ZGlmZiAtLWdpdCBhLy5naXRhbGxvd2VkIGIvLmdpdGFsbG93ZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE2MWM2YQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRhbGxvd2VkCkBAIC0wLDAgKzEsMiBAQAorIyBDYXRhcHVsdCBwcmVidWlsdCBoYXZlIGRlbW8gc2VjcmV0cyB0aGF0IGFyZSBhbHJlYWR5IHB1YmxpYworc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcG9seW1lci9jb21wb25lbnRzLyoqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTk9USUNFLnR4dCBiL05PVElDRS50eHQKaW5kZXggN2MyYmZhMy4uMzEwMTExMSAxMDA2NDQKLS0tIGEvTk9USUNFLnR4dAorKysgYi9OT1RJQ0UudHh0CkBAIC0xLDMyMiArMSw2IEBACi1Ob3RpY2VzIGZvciBmaWxlcyBjb250YWluZWQgaW4gdGhlIHRvb2xzIGRpcmVjdG9yeToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90aWNlcyBmb3IgZmlsZShzKToKLS9iaW4vbmV3ZnNfbXNkb3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29weXJpZ2h0IChjKSAxOTk4IFJvYmVydCBOb3JkaWVyCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gICBkaXN0cmlidXRpb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUihTKSBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCi1PUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi1BUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkKLURJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUKLUdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLUlOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCi1JTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKLU9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KLUlGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNvcHlyaWdodCAoYykgMjAxMyBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi1ieSBDaHJpc3RvcyBab3VsYXMuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi1hcmUgbWV0OgotMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCi1gYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi1QVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCi1CRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi1DT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi1JTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi1QT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLUZyZWVCU0QKLQotQ29weXJpZ2h0IChjKSAxOTk4IFJvYmVydCBOb3JkaWVyCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gICBkaXN0cmlidXRpb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUihTKSBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCi1PUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi1BUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkKLURJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUKLUdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLUlOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCi1JTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKLU9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KLUlGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2ZyYW1ld29yay9tb2NraXRvLWhvc3QuamFyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBNSVQgTGljZW5zZQotCi1Db3B5cmlnaHQgKGMpIDIwMDcgTW9ja2l0byBjb250cmlidXRvcnMKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLWluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLXRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLWNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLWFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi1GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi1PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi1USEUgU09GVFdBUkUuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vbGliNjQvbGlidGlueXhtbDIuc28KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKLXdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkKLWRhbWFnZXMgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KLQotUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci1wdXJwb3NlLCBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQKLXJlZGlzdHJpYnV0ZSBpdCBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6Ci0KLTEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3QKLW5vdCBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcwotc29mdHdhcmUgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uCi13b3VsZCBiZSBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgotCi0yLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZAotbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgotCi0zLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UKLWRpc3RyaWJ1dGlvbi4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2xpYi9saWJkdF9mZF9mb3J3YXJkLnNvCi0vbGliNjQvbGliZHRfZmRfZm9yd2FyZC5zbwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEZJTEUgSEVBREVSLgotCi1UaGlzIGZpbGUgaW1wbGVtZW50cyBpbnRlcmZhY2VzIGZyb20gdGhlIGZpbGUgamR3cFRyYW5zcG9ydC5oLiBUaGlzCi1pbXBsZW1lbnRhdGlvbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyB0aGUgZmlsZQotamR3cFRyYW5zcG9ydC5oLiBUaGUgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uIGZvciB0aGUgZmlsZQotamR3cFRyYW5zcG9ydC5oIGZvbGxvd3MuCi0KLUNvcHlyaWdodCAoYykgMjAwMywgMjAxNiwgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLURPIE5PVCBBTFRFUiBPUiBSRU1PVkUgQ09QWVJJR0hUIE5PVElDRVMgT1IgVEhJUyBGSUxFIEhFQURFUi4KLQotVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIG9ubHksIGFzCi1wdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIE9yYWNsZSBkZXNpZ25hdGVzIHRoaXMKLXBhcnRpY3VsYXIgZmlsZSBhcyBzdWJqZWN0IHRvIHRoZSAiQ2xhc3NwYXRoIiBleGNlcHRpb24gYXMgcHJvdmlkZWQKLWJ5IE9yYWNsZSBpbiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgYWNjb21wYW5pZWQgdGhpcyBjb2RlLgotCi1UaGlzIGNvZGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLUFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi12ZXJzaW9uIDIgZm9yIG1vcmUgZGV0YWlscyAoYSBjb3B5IGlzIGluY2x1ZGVkIGluIHRoZSBMSUNFTlNFIGZpbGUgdGhhdAotYWNjb21wYW5pZWQgdGhpcyBjb2RlKS4KLQotWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgotMiBhbG9uZyB3aXRoIHRoaXMgd29yazsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotCi1QbGVhc2UgY29udGFjdCBPcmFjbGUsIDUwMCBPcmFjbGUgUGFya3dheSwgUmVkd29vZCBTaG9yZXMsIENBIDk0MDY1IFVTQQotb3IgdmlzaXQgd3d3Lm9yYWNsZS5jb20gaWYgeW91IG5lZWQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvciBoYXZlIGFueQotcXVlc3Rpb25zLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vbGliL2xpYmNvbXBpbGVyX3J0LWV4dHJhcy5hCi0vbGliNjQvbGliY29tcGlsZXJfcnQtZXh0cmFzLmEKLS9saWI2NC9saWJjb21waWxlcl9ydC5zbwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWNvbXBpbGVyX3J0IExpY2Vuc2UKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgY29tcGlsZXJfcnQgbGlicmFyeSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIGJvdGggdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMKLSJCU0QtTGlrZSIgbGljZW5zZSBhbmQgdGhlIE1JVCBsaWNlbnNlLiAgQXMgYSB1c2VyIG9mIHRoaXMgY29kZSB5b3UgbWF5IGNob29zZQotdG8gdXNlIGl0IHVuZGVyIGVpdGhlciBsaWNlbnNlLiAgQXMgYSBjb250cmlidXRvciwgeW91IGFncmVlIHRvIGFsbG93IHlvdXIgY29kZQotdG8gYmUgdXNlZCB1bmRlciBib3RoLgotCi1GdWxsIHRleHQgb2YgdGhlIHJlbGV2YW50IGxpY2Vuc2VzIGlzIGluY2x1ZGVkIGJlbG93LgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCi1PcGVuIFNvdXJjZSBMaWNlbnNlCi0KLUNvcHlyaWdodCAoYykgMjAwOS0yMDE0IGJ5IHRoZSBjb250cmlidXRvcnMgbGlzdGVkIGluIENSRURJVFMuVFhUCi0KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLURldmVsb3BlZCBieToKLQotICAgIExMVk0gVGVhbQotCi0gICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCi0KLSAgICBodHRwOi8vbGx2bS5vcmcKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAotdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLW9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCi0gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0Ci0gICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KLSAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCi0gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUwotRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUNPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLU9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKLVNPRlRXQVJFLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQ29weXJpZ2h0IChjKSAyMDA5LTIwMTQgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLWluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLXRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLWNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLWFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi1GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi1PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi1USEUgU09GVFdBUkUuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ29weXJpZ2h0cyBhbmQgTGljZW5zZXMgZm9yIFRoaXJkIFBhcnR5IFNvZnR3YXJlIERpc3RyaWJ1dGVkIHdpdGggTExWTToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotVGhlIExMVk0gc29mdHdhcmUgY29udGFpbnMgY29kZSB3cml0dGVuIGJ5IHRoaXJkIHBhcnRpZXMuICBTdWNoIHNvZnR3YXJlIHdpbGwKLWhhdmUgaXRzIG93biBpbmRpdmlkdWFsIExJQ0VOU0UuVFhUIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBhcHBlYXJzLgotVGhpcyBmaWxlIHdpbGwgZGVzY3JpYmUgdGhlIGNvcHlyaWdodHMsIGxpY2Vuc2UsIGFuZCByZXN0cmljdGlvbnMgd2hpY2ggYXBwbHkKLXRvIHRoYXQgY29kZS4KLQotVGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgaW4gdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UgTGljZW5zZQotYXBwbGllcyB0byBhbGwgY29kZSBpbiB0aGUgTExWTSBEaXN0cmlidXRpb24sIGFuZCBub3RoaW5nIGluIGFueSBvZiB0aGUKLW90aGVyIGxpY2Vuc2VzIGdpdmVzIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtIG9yIHRoZQotVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLVNvZnR3YXJlLgotCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90aWNlcyBmb3IgZmlsZShzKToKLS9saWI2NC9saWJ4bWwyLnNvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUV4Y2VwdCB3aGVyZSBvdGhlcndpc2Ugbm90ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIChlLmcuIHRoZSBmaWxlcyBoYXNoLmMsCi1saXN0LmMgYW5kIHRoZSB0cmlvIGZpbGVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBhIHNpbWlsYXIgbGljZW5jZSBidXQKLXdpdGggZGlmZmVyZW50IENvcHlyaWdodCBub3RpY2VzKSBhbGwgdGhlIGZpbGVzIGFyZToKLQotIENvcHlyaWdodCAoQykgMTk5OC0yMDEyIERhbmllbCBWZWlsbGFyZC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLW9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi1pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi10byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi1jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVyLQotbmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLWFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVC0KLU5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi1PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCi1USEUgU09GVFdBUkUuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90aWNlcyBmb3IgZmlsZShzKToKLS9saWIvbGlibG9nLmEKLS9saWIvbGlibG9nLnNvCi0vbGliNjQvbGlibG9nLmEKLS9saWI2NC9saWJsb2cuc28KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLQotICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitBbmRyb2lkIHVzZWQgYnk6CisgIHNkay1yZXBvLWxpbnV4LXBsYXRmb3JtLXRvb2xzLnppcAogCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCkBAIC00OTYsNDUgKzE4MCw0NjYgQEAKIAogICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCiAKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2Jpbi92OG1rcGVlcGhvbGUKLS9saWIvbGlidjhiYXNlLmEKLS9saWI2NC9saWJ2OGJhc2UuYQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGlzIGxpY2Vuc2UgYXBwbGllcyB0byBhbGwgcGFydHMgb2YgVjggdGhhdCBhcmUgbm90IGV4dGVybmFsbHkKLW1haW50YWluZWQgbGlicmFyaWVzLiAgVGhlIGV4dGVybmFsbHkgbWFpbnRhaW5lZCBsaWJyYXJpZXMgdXNlZCBieSBWOAotYXJlOgorICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KIAotICAtIFBDUkUgdGVzdCBzdWl0ZSwgbG9jYXRlZCBpbgotICAgIHRlc3QvbWpzdW5pdC90aGlyZF9wYXJ0eS9yZWdleHAtcGNyZS9yZWdleHAtcGNyZS5qcy4gIFRoaXMgaXMgYmFzZWQgb24gdGhlCi0gICAgdGVzdCBzdWl0ZSBmcm9tIFBDUkUtNy4zLCB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgVW5pdmVyc2l0eQotICAgIG9mIENhbWJyaWRnZSBhbmQgR29vZ2xlLCBJbmMuICBUaGUgY29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZQotICAgIGFyZSBlbWJlZGRlZCBpbiByZWdleHAtcGNyZS5qcy4KKyAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQogCi0gIC0gTGF5b3V0IHRlc3RzLCBsb2NhdGVkIGluIHRlc3QvbWpzdW5pdC90aGlyZF9wYXJ0eS9vYmplY3Qta2V5cy4gIFRoZXNlIGFyZQotICAgIGJhc2VkIG9uIGxheW91dCB0ZXN0cyBmcm9tIHdlYmtpdC5vcmcgd2hpY2ggYXJlIGNvcHlyaWdodGVkIGJ5Ci0gICAgQXBwbGUgQ29tcHV0ZXIsIEluYy4gYW5kIHJlbGVhc2VkIHVuZGVyIGEgMy1jbGF1c2UgQlNEIGxpY2Vuc2UuCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogCi0gIC0gU3Ryb25ndGFsayBhc3NlbWJsZXIsIHRoZSBiYXNpcyBvZiB0aGUgZmlsZXMgYXNzZW1ibGVyLWFybS1pbmwuaCwKLSAgICBhc3NlbWJsZXItYXJtLmNjLCBhc3NlbWJsZXItYXJtLmgsIGFzc2VtYmxlci1pYTMyLWlubC5oLAotICAgIGFzc2VtYmxlci1pYTMyLmNjLCBhc3NlbWJsZXItaWEzMi5oLCBhc3NlbWJsZXIteDY0LWlubC5oLAotICAgIGFzc2VtYmxlci14NjQuY2MsIGFzc2VtYmxlci14NjQuaCwgYXNzZW1ibGVyLW1pcHMtaW5sLmgsCi0gICAgYXNzZW1ibGVyLW1pcHMuY2MsIGFzc2VtYmxlci1taXBzLmgsIGFzc2VtYmxlci5jYyBhbmQgYXNzZW1ibGVyLmguCi0gICAgVGhpcyBjb2RlIGlzIGNvcHlyaWdodGVkIGJ5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBhbmQgcmVsZWFzZWQKLSAgICB1bmRlciBhIDMtY2xhdXNlIEJTRCBsaWNlbnNlLgorICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogCi0gIC0gVmFsZ3JpbmQgY2xpZW50IEFQSSBoZWFkZXIsIGxvY2F0ZWQgYXQgdGhpcmRfcGFydHkvdmFsZ3JpbmQvdmFsZ3JpbmQuaAotICAgIFRoaXMgaXMgcmVsZWFzZSB1bmRlciB0aGUgQlNEIGxpY2Vuc2UuCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotVGhlc2UgbGlicmFyaWVzIGhhdmUgdGhlaXIgb3duIGxpY2Vuc2VzOyB3ZSByZWNvbW1lbmQgeW91IHJlYWQgdGhlbSwKLWFzIHRoZWlyIHRlcm1zIG1heSBkaWZmZXIgZnJvbSB0aGUgdGVybXMgYmVsb3cuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyBhcmUgbWV0OgorICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgIGRpc3RyaWJ1dGlvbi4KIAotRnVydGhlciBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGZpbGVzIGxvY2F0ZWQgaW4gCi1zdWItZGlyZWN0b3JpZXMuCisgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyBTVUNIIERBTUFHRS4KIAotQ29weXJpZ2h0IDIwMTQsIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sO2NoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPklDVSBMaWNlbnNlIC0gbW92ZWQgdG8gTElDRU5TRTwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IEJHQ09MT1I9IiNmZmZmZmYiPgorICA8cD4KKyAgICBUaGUgSUNVIGxpY2Vuc2UgaXMgbm93IGluIHBsYWluIHRleHQgZm9ybWF0LCBzZWUgPGEgaHJlZj0iLi9MSUNFTlNFIj5MSUNFTlNFPC9hPi4KK1VwZGF0ZSBsaW5rcyBhbmQgc29mdHdhcmUgYXBwcm9wcmlhdGVseS4KKyAgPC9wPgorICA8aT7CqSAyMDE2IGFuZCBsYXRlcjogVW5pY29kZSwgSW5jLiBhbmQgb3RoZXJzLiBMaWNlbnNlICZhbXA7IHRlcm1zIG9mIHVzZTogaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbDwvaT4gCisgIDxpPsKpIDE5OTUtMjAxNiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnM8L2k+CisKKzwvYm9keT4KKzwvaHRtbD4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDT1BZUklHSFQgQU5EIFBFUk1JU1NJT04gTk9USUNFIChJQ1UgNTggYW5kIGxhdGVyKQorCitDb3B5cmlnaHQgwqkgMTk5MS0yMDE4IFVuaWNvZGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUZXJtcyBvZiBVc2UgaW4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhlIFVuaWNvZGUgZGF0YSBmaWxlcyBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorKHRoZSAiRGF0YSBGaWxlcyIpIG9yIFVuaWNvZGUgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyh0aGUgIlNvZnR3YXJlIikgdG8gZGVhbCBpbiB0aGUgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZQord2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKK2NvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZC9vciBzZWxsIGNvcGllcyBvZgordGhlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBEYXRhIEZpbGVzCitvciBTb2Z0d2FyZSBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBwcm92aWRlZCB0aGF0IGVpdGhlcgorKGEpIHRoaXMgY29weXJpZ2h0IGFuZCBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgd2l0aCBhbGwgY29waWVzCitvZiB0aGUgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZSwgb3IKKyhiKSB0aGlzIGNvcHlyaWdodCBhbmQgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFzc29jaWF0ZWQKK0RvY3VtZW50YXRpb24uCisKK1RIRSBEQVRBIEZJTEVTIEFORCBTT0ZUV0FSRSBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRgorQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBIT0xERVJTIElOQ0xVREVEIElOIFRISVMKK05PVElDRSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKK0RBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKK1RPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKK1BFUkZPUk1BTkNFIE9GIFRIRSBEQVRBIEZJTEVTIE9SIFNPRlRXQVJFLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBhIGNvcHlyaWdodCBob2xkZXIKK3NoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLAordXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoZXNlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUgd2l0aG91dCBwcmlvcgord3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcmQtUGFydHkgU29mdHdhcmUgTGljZW5zZXMKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoaXJkLXBhcnR5IHNvZnR3YXJlIG5vdGljZXMgYW5kL29yIGFkZGl0aW9uYWwKK3Rlcm1zIGZvciBsaWNlbnNlZCB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSBjb21wb25lbnRzIGluY2x1ZGVkIHdpdGhpbiBJQ1UKK2xpYnJhcmllcy4KKworMS4gSUNVIExpY2Vuc2UgLSBJQ1UgMS44LjEgdG8gSUNVIDU3LjEKKworQ09QWVJJR0hUIEFORCBQRVJNSVNTSU9OIE5PVElDRQorCitDb3B5cmlnaHQgKGMpIDE5OTUtMjAxNiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMKK3RvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YKK3RoZSBTb2Z0d2FyZSBhbmQgdGhhdCBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UCitPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCitIT0xERVJTIElOQ0xVREVEIElOIFRISVMgTk9USUNFIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBPUiBBTlkKK1NQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCitSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRgorQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTgorQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyCitzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlCitvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uCitvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KKworQWxsIHRyYWRlbWFya3MgYW5kIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBtZW50aW9uZWQgaGVyZWluIGFyZSB0aGUKK3Byb3BlcnR5IG9mIHRoZWlyIHJlc3BlY3RpdmUgb3duZXJzLgorCisyLiBDaGluZXNlL0phcGFuZXNlIFdvcmQgQnJlYWsgRGljdGlvbmFyeSBEYXRhIChjamRpY3QudHh0KQorCisgIyAgICAgVGhlIEdvb2dsZSBDaHJvbWUgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IEdvb2dsZSBpcyBsaWNlbnNlZCB1bmRlcgorICMgdGhlIEJTRCBsaWNlbnNlLiBPdGhlciBzb2Z0d2FyZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpcworICMgcHJvdmlkZWQgdW5kZXIgb3RoZXIgbGljZW5zZXMsIGFzIHNldCBmb3J0aCBiZWxvdy4KKyAjCisgIyAgVGhlIEJTRCBMaWNlbnNlCisgIyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocAorICMgIENvcHlyaWdodCAoQykgMjAwNi0yMDA4LCBHb29nbGUgSW5jLgorICMKKyAjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICMKKyAjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICMKKyAjICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgIyB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICMgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgIyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aAorICMgdGhlIGRpc3RyaWJ1dGlvbi4KKyAjICBOZWl0aGVyIHRoZSBuYW1lIG9mICBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgIworICMKKyAjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAjIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgIyBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgIyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICMgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAjCisgIworICMgIFRoZSB3b3JkIGxpc3QgaW4gY2pkaWN0LnR4dCBhcmUgZ2VuZXJhdGVkIGJ5IGNvbWJpbmluZyB0aHJlZSB3b3JkIGxpc3RzCisgIyBsaXN0ZWQgYmVsb3cgd2l0aCBmdXJ0aGVyIHByb2Nlc3NpbmcgZm9yIGNvbXBvdW5kIHdvcmQgYnJlYWtpbmcuIFRoZQorICMgZnJlcXVlbmN5IGlzIGdlbmVyYXRlZCB3aXRoIGFuIGl0ZXJhdGl2ZSB0cmFpbmluZyBhZ2FpbnN0IEdvb2dsZSB3ZWIKKyAjIGNvcnBvcmEuCisgIworICMgICogTGlidGFiZSAoQ2hpbmVzZSkKKyAjICAgIC0gaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC8/Z3JvdXBfaWQ9MTUxOQorICMgICAgLSBJdHMgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcmUgc2hvd24gYmVsb3cuCisgIworICMgICogSVBBRElDIChKYXBhbmVzZSkKKyAjICAgIC0gaHR0cDovL2NoYXNlbi5haXN0LW5hcmEuYWMuanAvY2hhc2VuL2Rpc3RyaWJ1dGlvbi5odG1sCisgIyAgICAtIEl0cyBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGFyZSBzaG93biBiZWxvdy4KKyAjCisgIyAgLS0tLS0tLS0tQ09QWUlORy5saWJ0YWJlIC0tLS0gQkVHSU4tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMKKyAjICAvKgorICMgICAqIENvcHlyaWdodCAoYykgMTk5OSBUYUJFIFByb2plY3QuCisgIyAgICogQ29weXJpZ2h0IChjKSAxOTk5IFBhaS1Ic2lhbmcgSHNpYW8uCisgIyAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAjICAgKgorICMgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICMgICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICMgICAqIGFyZSBtZXQ6CisgIyAgICoKKyAjICAgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgIyAgICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIyAgICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICMgICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgIyAgICogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgIyAgICogICBkaXN0cmlidXRpb24uCisgIyAgICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBUYUJFIFByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAjICAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICMgICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICMgICAqCisgIyAgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICMgICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgIyAgICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAjICAgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICMgICAqIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgIyAgICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAjICAgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAjICAgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAjICAgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgIyAgICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICMgICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAjICAgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgIyAgICovCisgIworICMgIC8qCisgIyAgICogQ29weXJpZ2h0IChjKSAxOTk5IENvbXB1dGVyIFN5c3RlbXMgYW5kIENvbW11bmljYXRpb24gTGFiLAorICMgICAqICAgICAgICAgICAgICAgICAgICBJbnN0aXR1dGUgb2YgSW5mb3JtYXRpb24gU2NpZW5jZSwgQWNhZGVtaWEKKyAjICAgICAgICogICAgICAgICAgICAgICAgICAgIFNpbmljYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAjICAgKgorICMgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICMgICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICMgICAqIGFyZSBtZXQ6CisgIyAgICoKKyAjICAgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgIyAgICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIyAgICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICMgICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgIyAgICogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgIyAgICogICBkaXN0cmlidXRpb24uCisgIyAgICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDb21wdXRlciBTeXN0ZW1zIGFuZCBDb21tdW5pY2F0aW9uIExhYgorICMgICAqICAgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IKKyAjICAgKiAgIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICMgICAqICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICMgICAqCisgIyAgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICMgICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgIyAgICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAjICAgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICMgICAqIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgIyAgICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAjICAgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAjICAgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAjICAgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgIyAgICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICMgICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAjICAgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgIyAgICovCisgIworICMgIENvcHlyaWdodCAxOTk2IENoaWgtSGFvIFRzYWkgQCBCZWNrbWFuIEluc3RpdHV0ZSwKKyAjICAgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcworICMgIGMtdHNhaTRAdWl1Yy5lZHUgIGh0dHA6Ly9jYXNwZXIuYmVja21hbi51aXVjLmVkdS9+Yy10c2FpNAorICMKKyAjICAtLS0tLS0tLS0tLS0tLS1DT1BZSU5HLmxpYnRhYmUtLS0tLUVORC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIworICMKKyAjICAtLS0tLS0tLS0tLS0tLS1DT1BZSU5HLmlwYWRpYy0tLS0tQkVHSU4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIworICMgIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzIE5hcmEgSW5zdGl0dXRlIG9mIFNjaWVuY2UKKyAjICBhbmQgVGVjaG5vbG9neS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgIworICMgIFVzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgc29mdHdhcmUgaXMgcGVybWl0dGVkLgorICMgIEFueSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIHdoZXRoZXIgaW4gaXRzIG9yaWdpbmFsIGZvcm0gb3IgbW9kaWZpZWQsCisgIyAgbXVzdCBpbmNsdWRlIGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKKyAjICBwYXJhZ3JhcGhzLgorICMKKyAjICBOYXJhIEluc3RpdHV0ZSBvZiBTY2llbmNlIGFuZCBUZWNobm9sb2d5IChOQUlTVCksCisgIyAgdGhlIGNvcHlyaWdodCBob2xkZXJzLCBkaXNjbGFpbXMgYWxsIHdhcnJhbnRpZXMgd2l0aCByZWdhcmQgdG8gdGhpcworICMgIHNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kCisgIyAgZml0bmVzcywgaW4gbm8gZXZlbnQgc2hhbGwgTkFJU1QgYmUgbGlhYmxlIGZvcgorICMgIGFueSBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgYW55IGRhbWFnZXMKKyAjICB3aGF0c29ldmVyIHJlc3VsdGluZyBmcm9tIGxvc3Mgb2YgdXNlLCBkYXRhIG9yIHByb2ZpdHMsIHdoZXRoZXIgaW4gYW4KKyAjICBhY3Rpb24gb2YgY29udHJhY3QsIG5lZ2xpZ2VuY2Ugb3Igb3RoZXIgdG9ydHVvdXMgYWN0aW9uLCBhcmlzaW5nIG91dAorICMgIG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgdXNlIG9yIHBlcmZvcm1hbmNlIG9mIHRoaXMgc29mdHdhcmUuCisgIworICMgIEEgbGFyZ2UgcG9ydGlvbiBvZiB0aGUgZGljdGlvbmFyeSBlbnRyaWVzCisgIyAgb3JpZ2luYXRlIGZyb20gSUNPVCBGcmVlIFNvZnR3YXJlLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGZvciBJQ09UCisgIyAgRnJlZSBTb2Z0d2FyZSBhcHBsaWVzIHRvIHRoZSBjdXJyZW50IGRpY3Rpb25hcnkgYXMgd2VsbC4KKyAjCisgIyAgRWFjaCBVc2VyIG1heSBhbHNvIGZyZWVseSBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCB3aGV0aGVyIGluIGl0cworICMgIG9yaWdpbmFsIGZvcm0gb3IgbW9kaWZpZWQsIHRvIGFueSB0aGlyZCBwYXJ0eSBvciBwYXJ0aWVzLCBQUk9WSURFRAorICMgIHRoYXQgdGhlIHByb3Zpc2lvbnMgb2YgU2VjdGlvbiAzICgiTk8gV0FSUkFOVFkiKSB3aWxsIEFMV0FZUyBhcHBlYXIKKyAjICBvbiwgb3IgYmUgYXR0YWNoZWQgdG8sIHRoZSBQcm9ncmFtLCB3aGljaCBpcyBkaXN0cmlidXRlZCBzdWJzdGFudGlhbGx5CisgIyAgaW4gdGhlIHNhbWUgZm9ybSBhcyBzZXQgb3V0IGhlcmVpbiBhbmQgdGhhdCBzdWNoIGludGVuZGVkCisgIyAgZGlzdHJpYnV0aW9uLCBpZiBhY3R1YWxseSBtYWRlLCB3aWxsIG5laXRoZXIgdmlvbGF0ZSBvciBvdGhlcndpc2UKKyAjICBjb250cmF2ZW5lIGFueSBvZiB0aGUgbGF3cyBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIGNvdW50cmllcyBoYXZpbmcKKyAjICBqdXJpc2RpY3Rpb24gb3ZlciB0aGUgVXNlciBvciB0aGUgaW50ZW5kZWQgZGlzdHJpYnV0aW9uIGl0c2VsZi4KKyAjCisgIyAgTk8gV0FSUkFOVFkKKyAjCisgIyAgVGhlIHByb2dyYW0gd2FzIHByb2R1Y2VkIG9uIGFuIGV4cGVyaW1lbnRhbCBiYXNpcyBpbiB0aGUgY291cnNlIG9mIHRoZQorICMgIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCBjb25kdWN0ZWQgZHVyaW5nIHRoZSBwcm9qZWN0IGFuZCBpcyBwcm92aWRlZAorICMgIHRvIHVzZXJzIGFzIHNvIHByb2R1Y2VkIG9uIGFuIGV4cGVyaW1lbnRhbCBiYXNpcy4gIEFjY29yZGluZ2x5LCB0aGUKKyAjICBwcm9ncmFtIGlzIHByb3ZpZGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IHdoYXRzb2V2ZXIsIHdoZXRoZXIgZXhwcmVzcywKKyAjICBpbXBsaWVkLCBzdGF0dXRvcnkgb3Igb3RoZXJ3aXNlLiAgVGhlIHRlcm0gIndhcnJhbnR5IiB1c2VkIGhlcmVpbgorICMgIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIGFueSB3YXJyYW50eSBvZiB0aGUgcXVhbGl0eSwKKyAjICBwZXJmb3JtYW5jZSwgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBvZgorICMgIHRoZSBwcm9ncmFtIGFuZCB0aGUgbm9uZXhpc3RlbmNlIG9mIGFueSBpbmZyaW5nZW1lbnQgb3IgdmlvbGF0aW9uIG9mCisgIyAgYW55IHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eS4KKyAjCisgIyAgRWFjaCB1c2VyIG9mIHRoZSBwcm9ncmFtIHdpbGwgYWdyZWUgYW5kIHVuZGVyc3RhbmQsIGFuZCBiZSBkZWVtZWQgdG8KKyAjICBoYXZlIGFncmVlZCBhbmQgdW5kZXJzdG9vZCwgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGZvcgorICMgIHRoZSBwcm9ncmFtIGFuZCwgYWNjb3JkaW5nbHksIHRoZSBlbnRpcmUgcmlzayBhcmlzaW5nIGZyb20gb3IKKyAjICBvdGhlcndpc2UgY29ubmVjdGVkIHdpdGggdGhlIHByb2dyYW0gaXMgYXNzdW1lZCBieSB0aGUgdXNlci4KKyAjCisgIyAgVGhlcmVmb3JlLCBuZWl0aGVyIElDT1QsIHRoZSBjb3B5cmlnaHQgaG9sZGVyLCBvciBhbnkgb3RoZXIKKyAjICBvcmdhbml6YXRpb24gdGhhdCBwYXJ0aWNpcGF0ZWQgaW4gb3Igd2FzIG90aGVyd2lzZSByZWxhdGVkIHRvIHRoZQorICMgIGRldmVsb3BtZW50IG9mIHRoZSBwcm9ncmFtIGFuZCB0aGVpciByZXNwZWN0aXZlIG9mZmljaWFscywgZGlyZWN0b3JzLAorICMgIG9mZmljZXJzIGFuZCBvdGhlciBlbXBsb3llZXMgc2hhbGwgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBhbmQgYWxsCisgIyAgZGFtYWdlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwKKyAjICBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBhcmlzaW5nIG91dCBvZiBvciBvdGhlcndpc2UgaW4gY29ubmVjdGlvbgorICMgIHdpdGggdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZSBwcm9ncmFtIG9yIGFueSBwcm9kdWN0LCBtYXRlcmlhbAorICMgIG9yIHJlc3VsdCBwcm9kdWNlZCBvciBvdGhlcndpc2Ugb2J0YWluZWQgYnkgdXNpbmcgdGhlIHByb2dyYW0sCisgIyAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgaGF2ZSBiZWVuIGFkdmlzZWQgb2YsIG9yIG90aGVyd2lzZSBoYWQKKyAjICBrbm93bGVkZ2Ugb2YsIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMgYXQgYW55IHRpbWUgZHVyaW5nIHRoZQorICMgIHByb2plY3Qgb3IgdGhlcmVhZnRlci4gIEVhY2ggdXNlciB3aWxsIGJlIGRlZW1lZCB0byBoYXZlIGFncmVlZCB0byB0aGUKKyAjICBmb3JlZ29pbmcgYnkgaGlzIG9yIGhlciBjb21tZW5jZW1lbnQgb2YgdXNlIG9mIHRoZSBwcm9ncmFtLiAgVGhlIHRlcm0KKyAjICAidXNlIiBhcyB1c2VkIGhlcmVpbiBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCB0aGUgdXNlLAorICMgIG1vZGlmaWNhdGlvbiwgY29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBwcm9ncmFtIGFuZCB0aGUKKyAjICBwcm9kdWN0aW9uIG9mIHNlY29uZGFyeSBwcm9kdWN0cyBmcm9tIHRoZSBwcm9ncmFtLgorICMKKyAjICBJbiB0aGUgY2FzZSB3aGVyZSB0aGUgcHJvZ3JhbSwgd2hldGhlciBpbiBpdHMgb3JpZ2luYWwgZm9ybSBvcgorICMgIG1vZGlmaWVkLCB3YXMgZGlzdHJpYnV0ZWQgb3IgZGVsaXZlcmVkIHRvIG9yIHJlY2VpdmVkIGJ5IGEgdXNlciBmcm9tCisgIyAgYW55IHBlcnNvbiwgb3JnYW5pemF0aW9uIG9yIGVudGl0eSBvdGhlciB0aGFuIElDT1QsIHVubGVzcyBpdCBtYWtlcyBvcgorICMgIGdyYW50cyBpbmRlcGVuZGVudGx5IG9mIElDT1QgYW55IHNwZWNpZmljIHdhcnJhbnR5IHRvIHRoZSB1c2VyIGluCisgIyAgd3JpdGluZywgc3VjaCBwZXJzb24sIG9yZ2FuaXphdGlvbiBvciBlbnRpdHksIHdpbGwgYWxzbyBiZSBleGVtcHRlZAorICMgIGZyb20gYW5kIG5vdCBiZSBoZWxkIGxpYWJsZSB0byB0aGUgdXNlciBmb3IgYW55IHN1Y2ggZGFtYWdlcyBhcyBub3RlZAorICMgIGFib3ZlIGFzIGZhciBhcyB0aGUgcHJvZ3JhbSBpcyBjb25jZXJuZWQuCisgIworICMgIC0tLS0tLS0tLS0tLS0tLUNPUFlJTkcuaXBhZGljLS0tLS1FTkQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzMuIExhbyBXb3JkIEJyZWFrIERpY3Rpb25hcnkgRGF0YSAobGFvZGljdC50eHQpCisKKyAjICBDb3B5cmlnaHQgKGMpIDIwMTMgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbgorICMgIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgIworICMgUHJvamVjdDogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2xhby1kaWN0aW9uYXJ5LworICMgRGljdGlvbmFyeTogaHR0cDovL2xhby1kaWN0aW9uYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9MYW8tRGljdGlvbmFyeS50eHQKKyAjIExpY2Vuc2U6IGh0dHA6Ly9sYW8tZGljdGlvbmFyeS5nb29nbGVjb2RlLmNvbS9naXQvTGFvLURpY3Rpb25hcnktTElDRU5TRS50eHQKKyAjICAgICAgICAgICAgICAoY29waWVkIGJlbG93KQorICMKKyAjICBUaGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBhYm92ZSBkaWN0aW9uYXJ5LCB3aXRoIHNsaWdodAorICMgIG1vZGlmaWNhdGlvbnMuCisgIyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgIENvcHlyaWdodCAoQykgMjAxMyBCcmlhbiBFdWdlbmUgV2lsc29uLCBSb2JlcnQgTWFydGluIENhbXBiZWxsLgorICMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIworICMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICMgIG1vZGlmaWNhdGlvbiwKKyAjICBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgIworICMKKyAjIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICMgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiBSZWRpc3RyaWJ1dGlvbnMgaW4KKyAjICBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mCisgIyAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICMgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgIworICMKKyAjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAjIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAjIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAjIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAjIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAjICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis0LiBCdXJtZXNlIFdvcmQgQnJlYWsgRGljdGlvbmFyeSBEYXRhIChidXJtZXNlZGljdC50eHQpCisKKyAjICBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbgorICMgIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgIworICMgIFRoaXMgbGlzdCBpcyBwYXJ0IG9mIGEgcHJvamVjdCBob3N0ZWQgYXQ6CisgIyAgICBnaXRodWIuY29tL2thbnlhd3RlY2gvbXlhbm1hci1rYXJlbi13b3JkLWxpc3RzCisgIworICMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyAgQ29weXJpZ2h0IChjKSAyMDEzLCBMZVJveSBCZW5qYW1pbiBTaGFyb24KKyAjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICMKKyAjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAjICBhcmUgbWV0OiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgIyAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAjICBkaXNjbGFpbWVyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZQorICMgIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgIyAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgIyAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICMKKyAjICAgIE5laXRoZXIgdGhlIG5hbWUgTXlhbm1hciBLYXJlbiBXb3JkIExpc3RzLCBub3IgdGhlIG5hbWVzIG9mIGl0cworICMgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgIyAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgIworICMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICMgIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgIyAgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAjICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICMgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUworICMgIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgIyAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgIyAgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICMgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgIyAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgIyAgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgIyAgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgIyAgU1VDSCBEQU1BR0UuCisgIyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworNS4gVGltZSBab25lIERhdGFiYXNlCisKKyAgSUNVIHVzZXMgdGhlIHB1YmxpYyBkb21haW4gZGF0YSBhbmQgY29kZSBkZXJpdmVkIGZyb20gVGltZSBab25lCitEYXRhYmFzZSBmb3IgaXRzIHRpbWUgem9uZSBzdXBwb3J0LiBUaGUgb3duZXJzaGlwIG9mIHRoZSBUWiBkYXRhYmFzZQoraXMgZXhwbGFpbmVkIGluIEJDUCAxNzU6IFByb2NlZHVyZSBmb3IgTWFpbnRhaW5pbmcgdGhlIFRpbWUgWm9uZQorRGF0YWJhc2Ugc2VjdGlvbiA3LgorCisgIyA3LiAgRGF0YWJhc2UgT3duZXJzaGlwCisgIworICMgICAgVGhlIFRaIGRhdGFiYXNlIGl0c2VsZiBpcyBub3QgYW4gSUVURiBDb250cmlidXRpb24gb3IgYW4gSUVURgorICMgICAgZG9jdW1lbnQuICBSYXRoZXIgaXQgaXMgYSBwcmUtZXhpc3RpbmcgYW5kIHJlZ3VsYXJseSB1cGRhdGVkIHdvcmsKKyAjICAgIHRoYXQgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIGFuZCBpcyBpbnRlbmRlZCB0byByZW1haW4gaW4gdGhlCisgIyAgICBwdWJsaWMgZG9tYWluLiAgVGhlcmVmb3JlLCBCQ1BzIDc4IFtSRkM1Mzc4XSBhbmQgNzkgW1JGQzM5NzldIGRvCisgIyAgICBub3QgYXBwbHkgdG8gdGhlIFRaIERhdGFiYXNlIG9yIGNvbnRyaWJ1dGlvbnMgdGhhdCBpbmRpdmlkdWFscyBtYWtlCisgIyAgICB0byBpdC4gIFNob3VsZCBhbnkgY2xhaW1zIGJlIG1hZGUgYW5kIHN1YnN0YW50aWF0ZWQgYWdhaW5zdCB0aGUgVFoKKyAjICAgIERhdGFiYXNlLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgaXMgcHJvdmlkaW5nIHRoZSBJQU5BCisgIyAgICBDb25zaWRlcmF0aW9ucyBkZWZpbmVkIGluIHRoaXMgUkZDLCB1bmRlciB0aGUgbWVtb3JhbmR1bSBvZgorICMgICAgdW5kZXJzdGFuZGluZyB3aXRoIHRoZSBJRVRGLCBjdXJyZW50bHkgSUNBTk4sIG1heSBhY3QgaW4gYWNjb3JkYW5jZQorICMgICAgd2l0aCBhbGwgY29tcGV0ZW50IGNvdXJ0IG9yZGVycy4gIE5vIG93bmVyc2hpcCBjbGFpbXMgd2lsbCBiZSBtYWRlCisgIyAgICBieSBJQ0FOTiBvciB0aGUgSUVURiBUcnVzdCBvbiB0aGUgZGF0YWJhc2Ugb3IgdGhlIGNvZGUuICBBbnkgcGVyc29uCisgIyAgICBtYWtpbmcgYSBjb250cmlidXRpb24gdG8gdGhlIGRhdGFiYXNlIG9yIGNvZGUgd2FpdmVzIGFsbCByaWdodHMgdG8KKyAjICAgIGZ1dHVyZSBjbGFpbXMgaW4gdGhhdCBjb250cmlidXRpb24gb3IgaW4gdGhlIFRaIERhdGFiYXNlLgorCis2LiBHb29nbGUgZG91YmxlLWNvbnZlcnNpb24KKworQ29weXJpZ2h0IDIwMDYtMjAxMSwgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgpAQCAtNTYxLDU3OSArNjY2LDE3NjkgQEAKIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1VOSUNPREUsIElOQy4gTElDRU5TRSBBR1JFRU1FTlQgLSBEQVRBIEZJTEVTIEFORCBTT0ZUV0FSRQogCi1mZGxpYm0KK1NlZSBUZXJtcyBvZiBVc2UgPGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdodC5odG1sPgorZm9yIGRlZmluaXRpb25zIG9mIFVuaWNvZGUgSW5jLuKAmXMgRGF0YSBGaWxlcyBhbmQgU29mdHdhcmUuCiAKLUNvcHlyaWdodCAoQykgMTk5My0yMDA0IGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK05PVElDRSBUTyBVU0VSOiBDYXJlZnVsbHkgcmVhZCB0aGUgZm9sbG93aW5nIGxlZ2FsIGFncmVlbWVudC4KK0JZIERPV05MT0FESU5HLCBJTlNUQUxMSU5HLCBDT1BZSU5HIE9SIE9USEVSV0lTRSBVU0lORyBVTklDT0RFIElOQy4nUworREFUQSBGSUxFUyAoIkRBVEEgRklMRVMiKSwgQU5EL09SIFNPRlRXQVJFICgiU09GVFdBUkUiKSwKK1lPVSBVTkVRVUlWT0NBTExZIEFDQ0VQVCwgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZLCBBTEwgT0YgVEhFCitURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVC4KK0lGIFlPVSBETyBOT1QgQUdSRUUsIERPIE5PVCBET1dOTE9BRCwgSU5TVEFMTCwgQ09QWSwgRElTVFJJQlVURSBPUiBVU0UKK1RIRSBEQVRBIEZJTEVTIE9SIFNPRlRXQVJFLgogCi1EZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLWlzIHByZXNlcnZlZC4KK0NPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0UKIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHQgwqkgMTk5MS0yMDIyIFVuaWNvZGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUZXJtcyBvZiBVc2UgaW4gaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvY29weXJpZ2h0Lmh0bWwuCiAKLVN0cm9uZ3RhbGsKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoZSBVbmljb2RlIGRhdGEgZmlsZXMgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyh0aGUgIkRhdGEgRmlsZXMiKSBvciBVbmljb2RlIHNvZnR3YXJlIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisodGhlICJTb2Z0d2FyZSIpIHRvIGRlYWwgaW4gdGhlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUKK3dpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCitjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YKK3RoZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgRGF0YSBGaWxlcworb3IgU29mdHdhcmUgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCBlaXRoZXIKKyhhKSB0aGlzIGNvcHlyaWdodCBhbmQgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIHdpdGggYWxsIGNvcGllcworb2YgdGhlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUsIG9yCisoYikgdGhpcyBjb3B5cmlnaHQgYW5kIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhc3NvY2lhdGVkCitEb2N1bWVudGF0aW9uLgogCi1Db3B5cmlnaHQgKGMpIDE5OTQtMjAwNiBTdW4gTWljcm9zeXN0ZW1zIEluYy4KLUFsbCBSaWdodHMgUmVzZXJ2ZWQuCitUSEUgREFUQSBGSUxFUyBBTkQgU09GVFdBUkUgQVJFIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YKK0FOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFCitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgSE9MREVSUyBJTkNMVURFRCBJTiBUSElTCitOT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCitEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCitUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCitQRVJGT1JNQU5DRSBPRiBUSEUgREFUQSBGSUxFUyBPUiBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyCitzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwKK3VzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGVzZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3IKK3dyaXR0ZW4gYXV0aG9yaXphdGlvbiBvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlyZC1QYXJ0eSBTb2Z0d2FyZSBMaWNlbnNlcworCitUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhpcmQtcGFydHkgc29mdHdhcmUgbm90aWNlcyBhbmQvb3IgYWRkaXRpb25hbAordGVybXMgZm9yIGxpY2Vuc2VkIHRoaXJkLXBhcnR5IHNvZnR3YXJlIGNvbXBvbmVudHMgaW5jbHVkZWQgd2l0aGluIElDVQorbGlicmFyaWVzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lDVSBMaWNlbnNlIC0gSUNVIDEuOC4xIHRvIElDVSA1Ny4xCisKK0NPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0UKKworQ29weXJpZ2h0IChjKSAxOTk1LTIwMTYgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zCit0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIG9mCit0aGUgU29mdHdhcmUgYW5kIHRoYXQgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVAorT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorSE9MREVSUyBJTkNMVURFRCBJTiBUSElTIE5PVElDRSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgT1IgQU5ZCitTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YKK0NPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KK0NPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlcgorc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZQorb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbgorb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCisKK0FsbCB0cmFkZW1hcmtzIGFuZCByZWdpc3RlcmVkIHRyYWRlbWFya3MgbWVudGlvbmVkIGhlcmVpbiBhcmUgdGhlCitwcm9wZXJ0eSBvZiB0aGVpciByZXNwZWN0aXZlIG93bmVycy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGluZXNlL0phcGFuZXNlIFdvcmQgQnJlYWsgRGljdGlvbmFyeSBEYXRhIChjamRpY3QudHh0KQorCisgIyAgICAgVGhlIEdvb2dsZSBDaHJvbWUgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IEdvb2dsZSBpcyBsaWNlbnNlZCB1bmRlcgorICMgdGhlIEJTRCBsaWNlbnNlLiBPdGhlciBzb2Z0d2FyZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpcworICMgcHJvdmlkZWQgdW5kZXIgb3RoZXIgbGljZW5zZXMsIGFzIHNldCBmb3J0aCBiZWxvdy4KKyAjCisgIyAgVGhlIEJTRCBMaWNlbnNlCisgIyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocAorICMgIENvcHlyaWdodCAoQykgMjAwNi0yMDA4LCBHb29nbGUgSW5jLgorICMKKyAjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICMKKyAjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICMKKyAjICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgIyB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICMgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgIyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aAorICMgdGhlIGRpc3RyaWJ1dGlvbi4KKyAjICBOZWl0aGVyIHRoZSBuYW1lIG9mICBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgIworICMKKyAjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAjIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgIyBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgIyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICMgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAjCisgIworICMgIFRoZSB3b3JkIGxpc3QgaW4gY2pkaWN0LnR4dCBhcmUgZ2VuZXJhdGVkIGJ5IGNvbWJpbmluZyB0aHJlZSB3b3JkIGxpc3RzCisgIyBsaXN0ZWQgYmVsb3cgd2l0aCBmdXJ0aGVyIHByb2Nlc3NpbmcgZm9yIGNvbXBvdW5kIHdvcmQgYnJlYWtpbmcuIFRoZQorICMgZnJlcXVlbmN5IGlzIGdlbmVyYXRlZCB3aXRoIGFuIGl0ZXJhdGl2ZSB0cmFpbmluZyBhZ2FpbnN0IEdvb2dsZSB3ZWIKKyAjIGNvcnBvcmEuCisgIworICMgICogTGlidGFiZSAoQ2hpbmVzZSkKKyAjICAgIC0gaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC8/Z3JvdXBfaWQ9MTUxOQorICMgICAgLSBJdHMgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcmUgc2hvd24gYmVsb3cuCisgIworICMgICogSVBBRElDIChKYXBhbmVzZSkKKyAjICAgIC0gaHR0cDovL2NoYXNlbi5haXN0LW5hcmEuYWMuanAvY2hhc2VuL2Rpc3RyaWJ1dGlvbi5odG1sCisgIyAgICAtIEl0cyBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGFyZSBzaG93biBiZWxvdy4KKyAjCisgIyAgLS0tLS0tLS0tQ09QWUlORy5saWJ0YWJlIC0tLS0gQkVHSU4tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMKKyAjICAvKgorICMgICAqIENvcHlyaWdodCAoYykgMTk5OSBUYUJFIFByb2plY3QuCisgIyAgICogQ29weXJpZ2h0IChjKSAxOTk5IFBhaS1Ic2lhbmcgSHNpYW8uCisgIyAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAjICAgKgorICMgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICMgICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICMgICAqIGFyZSBtZXQ6CisgIyAgICoKKyAjICAgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgIyAgICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIyAgICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICMgICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgIyAgICogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgIyAgICogICBkaXN0cmlidXRpb24uCisgIyAgICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBUYUJFIFByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAjICAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICMgICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICMgICAqCisgIyAgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICMgICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgIyAgICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAjICAgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICMgICAqIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgIyAgICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAjICAgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAjICAgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAjICAgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgIyAgICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICMgICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAjICAgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgIyAgICovCisgIworICMgIC8qCisgIyAgICogQ29weXJpZ2h0IChjKSAxOTk5IENvbXB1dGVyIFN5c3RlbXMgYW5kIENvbW11bmljYXRpb24gTGFiLAorICMgICAqICAgICAgICAgICAgICAgICAgICBJbnN0aXR1dGUgb2YgSW5mb3JtYXRpb24gU2NpZW5jZSwgQWNhZGVtaWEKKyAjICAgICAgICogICAgICAgICAgICAgICAgICAgIFNpbmljYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAjICAgKgorICMgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICMgICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICMgICAqIGFyZSBtZXQ6CisgIyAgICoKKyAjICAgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgIyAgICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIyAgICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICMgICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgIyAgICogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgIyAgICogICBkaXN0cmlidXRpb24uCisgIyAgICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDb21wdXRlciBTeXN0ZW1zIGFuZCBDb21tdW5pY2F0aW9uIExhYgorICMgICAqICAgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IKKyAjICAgKiAgIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICMgICAqICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICMgICAqCisgIyAgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICMgICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgIyAgICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAjICAgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICMgICAqIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgIyAgICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAjICAgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAjICAgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAjICAgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgIyAgICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICMgICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAjICAgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgIyAgICovCisgIworICMgIENvcHlyaWdodCAxOTk2IENoaWgtSGFvIFRzYWkgQCBCZWNrbWFuIEluc3RpdHV0ZSwKKyAjICAgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcworICMgIGMtdHNhaTRAdWl1Yy5lZHUgIGh0dHA6Ly9jYXNwZXIuYmVja21hbi51aXVjLmVkdS9+Yy10c2FpNAorICMKKyAjICAtLS0tLS0tLS0tLS0tLS1DT1BZSU5HLmxpYnRhYmUtLS0tLUVORC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIworICMKKyAjICAtLS0tLS0tLS0tLS0tLS1DT1BZSU5HLmlwYWRpYy0tLS0tQkVHSU4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIworICMgIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzIE5hcmEgSW5zdGl0dXRlIG9mIFNjaWVuY2UKKyAjICBhbmQgVGVjaG5vbG9neS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgIworICMgIFVzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgc29mdHdhcmUgaXMgcGVybWl0dGVkLgorICMgIEFueSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIHdoZXRoZXIgaW4gaXRzIG9yaWdpbmFsIGZvcm0gb3IgbW9kaWZpZWQsCisgIyAgbXVzdCBpbmNsdWRlIGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKKyAjICBwYXJhZ3JhcGhzLgorICMKKyAjICBOYXJhIEluc3RpdHV0ZSBvZiBTY2llbmNlIGFuZCBUZWNobm9sb2d5IChOQUlTVCksCisgIyAgdGhlIGNvcHlyaWdodCBob2xkZXJzLCBkaXNjbGFpbXMgYWxsIHdhcnJhbnRpZXMgd2l0aCByZWdhcmQgdG8gdGhpcworICMgIHNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kCisgIyAgZml0bmVzcywgaW4gbm8gZXZlbnQgc2hhbGwgTkFJU1QgYmUgbGlhYmxlIGZvcgorICMgIGFueSBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgYW55IGRhbWFnZXMKKyAjICB3aGF0c29ldmVyIHJlc3VsdGluZyBmcm9tIGxvc3Mgb2YgdXNlLCBkYXRhIG9yIHByb2ZpdHMsIHdoZXRoZXIgaW4gYW4KKyAjICBhY3Rpb24gb2YgY29udHJhY3QsIG5lZ2xpZ2VuY2Ugb3Igb3RoZXIgdG9ydHVvdXMgYWN0aW9uLCBhcmlzaW5nIG91dAorICMgIG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgdXNlIG9yIHBlcmZvcm1hbmNlIG9mIHRoaXMgc29mdHdhcmUuCisgIworICMgIEEgbGFyZ2UgcG9ydGlvbiBvZiB0aGUgZGljdGlvbmFyeSBlbnRyaWVzCisgIyAgb3JpZ2luYXRlIGZyb20gSUNPVCBGcmVlIFNvZnR3YXJlLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGZvciBJQ09UCisgIyAgRnJlZSBTb2Z0d2FyZSBhcHBsaWVzIHRvIHRoZSBjdXJyZW50IGRpY3Rpb25hcnkgYXMgd2VsbC4KKyAjCisgIyAgRWFjaCBVc2VyIG1heSBhbHNvIGZyZWVseSBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCB3aGV0aGVyIGluIGl0cworICMgIG9yaWdpbmFsIGZvcm0gb3IgbW9kaWZpZWQsIHRvIGFueSB0aGlyZCBwYXJ0eSBvciBwYXJ0aWVzLCBQUk9WSURFRAorICMgIHRoYXQgdGhlIHByb3Zpc2lvbnMgb2YgU2VjdGlvbiAzICgiTk8gV0FSUkFOVFkiKSB3aWxsIEFMV0FZUyBhcHBlYXIKKyAjICBvbiwgb3IgYmUgYXR0YWNoZWQgdG8sIHRoZSBQcm9ncmFtLCB3aGljaCBpcyBkaXN0cmlidXRlZCBzdWJzdGFudGlhbGx5CisgIyAgaW4gdGhlIHNhbWUgZm9ybSBhcyBzZXQgb3V0IGhlcmVpbiBhbmQgdGhhdCBzdWNoIGludGVuZGVkCisgIyAgZGlzdHJpYnV0aW9uLCBpZiBhY3R1YWxseSBtYWRlLCB3aWxsIG5laXRoZXIgdmlvbGF0ZSBvciBvdGhlcndpc2UKKyAjICBjb250cmF2ZW5lIGFueSBvZiB0aGUgbGF3cyBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIGNvdW50cmllcyBoYXZpbmcKKyAjICBqdXJpc2RpY3Rpb24gb3ZlciB0aGUgVXNlciBvciB0aGUgaW50ZW5kZWQgZGlzdHJpYnV0aW9uIGl0c2VsZi4KKyAjCisgIyAgTk8gV0FSUkFOVFkKKyAjCisgIyAgVGhlIHByb2dyYW0gd2FzIHByb2R1Y2VkIG9uIGFuIGV4cGVyaW1lbnRhbCBiYXNpcyBpbiB0aGUgY291cnNlIG9mIHRoZQorICMgIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCBjb25kdWN0ZWQgZHVyaW5nIHRoZSBwcm9qZWN0IGFuZCBpcyBwcm92aWRlZAorICMgIHRvIHVzZXJzIGFzIHNvIHByb2R1Y2VkIG9uIGFuIGV4cGVyaW1lbnRhbCBiYXNpcy4gIEFjY29yZGluZ2x5LCB0aGUKKyAjICBwcm9ncmFtIGlzIHByb3ZpZGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IHdoYXRzb2V2ZXIsIHdoZXRoZXIgZXhwcmVzcywKKyAjICBpbXBsaWVkLCBzdGF0dXRvcnkgb3Igb3RoZXJ3aXNlLiAgVGhlIHRlcm0gIndhcnJhbnR5IiB1c2VkIGhlcmVpbgorICMgIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIGFueSB3YXJyYW50eSBvZiB0aGUgcXVhbGl0eSwKKyAjICBwZXJmb3JtYW5jZSwgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBvZgorICMgIHRoZSBwcm9ncmFtIGFuZCB0aGUgbm9uZXhpc3RlbmNlIG9mIGFueSBpbmZyaW5nZW1lbnQgb3IgdmlvbGF0aW9uIG9mCisgIyAgYW55IHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eS4KKyAjCisgIyAgRWFjaCB1c2VyIG9mIHRoZSBwcm9ncmFtIHdpbGwgYWdyZWUgYW5kIHVuZGVyc3RhbmQsIGFuZCBiZSBkZWVtZWQgdG8KKyAjICBoYXZlIGFncmVlZCBhbmQgdW5kZXJzdG9vZCwgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGZvcgorICMgIHRoZSBwcm9ncmFtIGFuZCwgYWNjb3JkaW5nbHksIHRoZSBlbnRpcmUgcmlzayBhcmlzaW5nIGZyb20gb3IKKyAjICBvdGhlcndpc2UgY29ubmVjdGVkIHdpdGggdGhlIHByb2dyYW0gaXMgYXNzdW1lZCBieSB0aGUgdXNlci4KKyAjCisgIyAgVGhlcmVmb3JlLCBuZWl0aGVyIElDT1QsIHRoZSBjb3B5cmlnaHQgaG9sZGVyLCBvciBhbnkgb3RoZXIKKyAjICBvcmdhbml6YXRpb24gdGhhdCBwYXJ0aWNpcGF0ZWQgaW4gb3Igd2FzIG90aGVyd2lzZSByZWxhdGVkIHRvIHRoZQorICMgIGRldmVsb3BtZW50IG9mIHRoZSBwcm9ncmFtIGFuZCB0aGVpciByZXNwZWN0aXZlIG9mZmljaWFscywgZGlyZWN0b3JzLAorICMgIG9mZmljZXJzIGFuZCBvdGhlciBlbXBsb3llZXMgc2hhbGwgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBhbmQgYWxsCisgIyAgZGFtYWdlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwKKyAjICBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBhcmlzaW5nIG91dCBvZiBvciBvdGhlcndpc2UgaW4gY29ubmVjdGlvbgorICMgIHdpdGggdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZSBwcm9ncmFtIG9yIGFueSBwcm9kdWN0LCBtYXRlcmlhbAorICMgIG9yIHJlc3VsdCBwcm9kdWNlZCBvciBvdGhlcndpc2Ugb2J0YWluZWQgYnkgdXNpbmcgdGhlIHByb2dyYW0sCisgIyAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgaGF2ZSBiZWVuIGFkdmlzZWQgb2YsIG9yIG90aGVyd2lzZSBoYWQKKyAjICBrbm93bGVkZ2Ugb2YsIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMgYXQgYW55IHRpbWUgZHVyaW5nIHRoZQorICMgIHByb2plY3Qgb3IgdGhlcmVhZnRlci4gIEVhY2ggdXNlciB3aWxsIGJlIGRlZW1lZCB0byBoYXZlIGFncmVlZCB0byB0aGUKKyAjICBmb3JlZ29pbmcgYnkgaGlzIG9yIGhlciBjb21tZW5jZW1lbnQgb2YgdXNlIG9mIHRoZSBwcm9ncmFtLiAgVGhlIHRlcm0KKyAjICAidXNlIiBhcyB1c2VkIGhlcmVpbiBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCB0aGUgdXNlLAorICMgIG1vZGlmaWNhdGlvbiwgY29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBwcm9ncmFtIGFuZCB0aGUKKyAjICBwcm9kdWN0aW9uIG9mIHNlY29uZGFyeSBwcm9kdWN0cyBmcm9tIHRoZSBwcm9ncmFtLgorICMKKyAjICBJbiB0aGUgY2FzZSB3aGVyZSB0aGUgcHJvZ3JhbSwgd2hldGhlciBpbiBpdHMgb3JpZ2luYWwgZm9ybSBvcgorICMgIG1vZGlmaWVkLCB3YXMgZGlzdHJpYnV0ZWQgb3IgZGVsaXZlcmVkIHRvIG9yIHJlY2VpdmVkIGJ5IGEgdXNlciBmcm9tCisgIyAgYW55IHBlcnNvbiwgb3JnYW5pemF0aW9uIG9yIGVudGl0eSBvdGhlciB0aGFuIElDT1QsIHVubGVzcyBpdCBtYWtlcyBvcgorICMgIGdyYW50cyBpbmRlcGVuZGVudGx5IG9mIElDT1QgYW55IHNwZWNpZmljIHdhcnJhbnR5IHRvIHRoZSB1c2VyIGluCisgIyAgd3JpdGluZywgc3VjaCBwZXJzb24sIG9yZ2FuaXphdGlvbiBvciBlbnRpdHksIHdpbGwgYWxzbyBiZSBleGVtcHRlZAorICMgIGZyb20gYW5kIG5vdCBiZSBoZWxkIGxpYWJsZSB0byB0aGUgdXNlciBmb3IgYW55IHN1Y2ggZGFtYWdlcyBhcyBub3RlZAorICMgIGFib3ZlIGFzIGZhciBhcyB0aGUgcHJvZ3JhbSBpcyBjb25jZXJuZWQuCisgIworICMgIC0tLS0tLS0tLS0tLS0tLUNPUFlJTkcuaXBhZGljLS0tLS1FTkQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTGFvIFdvcmQgQnJlYWsgRGljdGlvbmFyeSBEYXRhIChsYW9kaWN0LnR4dCkKKworICMgQ29weXJpZ2h0IChDKSAyMDE2IGFuZCBsYXRlcjogVW5pY29kZSwgSW5jLiBhbmQgb3RoZXJzLgorICMgTGljZW5zZSAmIHRlcm1zIG9mIHVzZTogaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbAorICMgQ29weXJpZ2h0IChjKSAyMDE1IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24KKyAjIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgIworICMgUHJvamVjdDogaHR0cHM6Ly9naXRodWIuY29tL3JvYmVyNDI1MzkvbGFvLWRpY3Rpb25hcnkKKyAjIERpY3Rpb25hcnk6IGh0dHBzOi8vZ2l0aHViLmNvbS9yb2JlcjQyNTM5L2xhby1kaWN0aW9uYXJ5L2xhb2RpY3QudHh0CisgIyBMaWNlbnNlOiBodHRwczovL2dpdGh1Yi5jb20vcm9iZXI0MjUzOS9sYW8tZGljdGlvbmFyeS9MSUNFTlNFLnR4dAorICMgICAgICAgICAgKGNvcGllZCBiZWxvdykKKyAjCisgIwlUaGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBhYm92ZSBkaWN0aW9uYXJ5IHZlcnNpb24gb2YgTm92IDIyLCAyMDIwCisgIyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgIENvcHlyaWdodCAoQykgMjAxMyBCcmlhbiBFdWdlbmUgV2lsc29uLCBSb2JlcnQgTWFydGluIENhbXBiZWxsLgorICMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIworICMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICMKKyAjICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAjICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeQorICMgIGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZAorICMgIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgIyAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICMKKyAjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAjIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAjIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAjIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAjIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAjICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J1cm1lc2UgV29yZCBCcmVhayBEaWN0aW9uYXJ5IERhdGEgKGJ1cm1lc2VkaWN0LnR4dCkKKworICMgIENvcHlyaWdodCAoYykgMjAxNCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uCisgIyAgYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAjCisgIyAgVGhpcyBsaXN0IGlzIHBhcnQgb2YgYSBwcm9qZWN0IGhvc3RlZCBhdDoKKyAjICAgIGdpdGh1Yi5jb20va2FueWF3dGVjaC9teWFubWFyLWthcmVuLXdvcmQtbGlzdHMKKyAjCisgIyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjICBDb3B5cmlnaHQgKGMpIDIwMTMsIExlUm95IEJlbmphbWluIFNoYXJvbgorICMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIworICMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICMgIGFyZSBtZXQ6IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAjICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICMgIGRpc2NsYWltZXIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlCisgIyAgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAjICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAjICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgIworICMgICAgTmVpdGhlciB0aGUgbmFtZSBNeWFubWFyIEthcmVuIFdvcmQgTGlzdHMsIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgIyAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAjICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAjCisgIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgIyAgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAjICBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICMgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgIyAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTCisgIyAgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAjICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAjICBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgIyAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAjICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAjICBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAjICBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAjICBTVUNIIERBTUFHRS4KKyAjICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RpbWUgWm9uZSBEYXRhYmFzZQorCisgIElDVSB1c2VzIHRoZSBwdWJsaWMgZG9tYWluIGRhdGEgYW5kIGNvZGUgZGVyaXZlZCBmcm9tIFRpbWUgWm9uZQorRGF0YWJhc2UgZm9yIGl0cyB0aW1lIHpvbmUgc3VwcG9ydC4gVGhlIG93bmVyc2hpcCBvZiB0aGUgVFogZGF0YWJhc2UKK2lzIGV4cGxhaW5lZCBpbiBCQ1AgMTc1OiBQcm9jZWR1cmUgZm9yIE1haW50YWluaW5nIHRoZSBUaW1lIFpvbmUKK0RhdGFiYXNlIHNlY3Rpb24gNy4KKworICMgNy4gIERhdGFiYXNlIE93bmVyc2hpcAorICMKKyAjICAgIFRoZSBUWiBkYXRhYmFzZSBpdHNlbGYgaXMgbm90IGFuIElFVEYgQ29udHJpYnV0aW9uIG9yIGFuIElFVEYKKyAjICAgIGRvY3VtZW50LiAgUmF0aGVyIGl0IGlzIGEgcHJlLWV4aXN0aW5nIGFuZCByZWd1bGFybHkgdXBkYXRlZCB3b3JrCisgIyAgICB0aGF0IGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBhbmQgaXMgaW50ZW5kZWQgdG8gcmVtYWluIGluIHRoZQorICMgICAgcHVibGljIGRvbWFpbi4gIFRoZXJlZm9yZSwgQkNQcyA3OCBbUkZDNTM3OF0gYW5kIDc5IFtSRkMzOTc5XSBkbworICMgICAgbm90IGFwcGx5IHRvIHRoZSBUWiBEYXRhYmFzZSBvciBjb250cmlidXRpb25zIHRoYXQgaW5kaXZpZHVhbHMgbWFrZQorICMgICAgdG8gaXQuICBTaG91bGQgYW55IGNsYWltcyBiZSBtYWRlIGFuZCBzdWJzdGFudGlhdGVkIGFnYWluc3QgdGhlIFRaCisgIyAgICBEYXRhYmFzZSwgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IGlzIHByb3ZpZGluZyB0aGUgSUFOQQorICMgICAgQ29uc2lkZXJhdGlvbnMgZGVmaW5lZCBpbiB0aGlzIFJGQywgdW5kZXIgdGhlIG1lbW9yYW5kdW0gb2YKKyAjICAgIHVuZGVyc3RhbmRpbmcgd2l0aCB0aGUgSUVURiwgY3VycmVudGx5IElDQU5OLCBtYXkgYWN0IGluIGFjY29yZGFuY2UKKyAjICAgIHdpdGggYWxsIGNvbXBldGVudCBjb3VydCBvcmRlcnMuICBObyBvd25lcnNoaXAgY2xhaW1zIHdpbGwgYmUgbWFkZQorICMgICAgYnkgSUNBTk4gb3IgdGhlIElFVEYgVHJ1c3Qgb24gdGhlIGRhdGFiYXNlIG9yIHRoZSBjb2RlLiAgQW55IHBlcnNvbgorICMgICAgbWFraW5nIGEgY29udHJpYnV0aW9uIHRvIHRoZSBkYXRhYmFzZSBvciBjb2RlIHdhaXZlcyBhbGwgcmlnaHRzIHRvCisgIyAgICBmdXR1cmUgY2xhaW1zIGluIHRoYXQgY29udHJpYnV0aW9uIG9yIGluIHRoZSBUWiBEYXRhYmFzZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHb29nbGUgZG91YmxlLWNvbnZlcnNpb24KKworQ29weXJpZ2h0IDIwMDYtMjAxMSwgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlsZTogYWNsb2NhbC5tNCAob25seSBmb3IgSUNVNEMpCitTZWN0aW9uOiBwa2cubTQgLSBNYWNyb3MgdG8gbG9jYXRlIGFuZCB1dGlsaXNlIHBrZy1jb25maWcuCisKKworQ29weXJpZ2h0IMKpIDIwMDQgU2NvdHQgSmFtZXMgUmVtbmFudCA8c2NvdHRAbmV0c3BsaXQuY29tPi4KK0NvcHlyaWdodCDCqSAyMDEyLTIwMTUgRGFuIE5pY2hvbHNvbiA8ZGJuLmxpc3RzQGdtYWlsLmNvbT4KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorMDIxMTEtMTMwNywgVVNBLgorCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CitkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKK2NvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCit0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0Citwcm9ncmFtLgorCisKKyhUaGUgY29uZGl0aW9uIGZvciB0aGUgZXhjZXB0aW9uIGlzIGZ1bGZpbGxlZCBiZWNhdXNlCitJQ1U0QyBpbmNsdWRlcyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwKK25hbWVseSB0aGUgYGNvbmZpZ3VyZWAgc2NyaXB0LikKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaWxlOiBjb25maWcuZ3Vlc3MgKG9ubHkgZm9yIElDVTRDKQorCisKK1RoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCitjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgordGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdAorcHJvZ3JhbS4gIFRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcKK29mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4KKworCisoVGhlIGNvbmRpdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbiBpcyBmdWxmaWxsZWQgYmVjYXVzZQorSUNVNEMgaW5jbHVkZXMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsCituYW1lbHkgdGhlIGBjb25maWd1cmVgIHNjcmlwdC4pCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlsZTogaW5zdGFsbC1zaCAob25seSBmb3IgSUNVNEMpCisKKworQ29weXJpZ2h0IDE5OTEgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCitkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAordGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0Citjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKK3B1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKK3dyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCitzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKK3dpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvZGUgaW4gdGhpcyByZXBvIHVzZXMgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlcy4KK1JlZmVyIHRvIGVhY2ggZmlsZSB0byBkZXRlcm1pbmUgd2hpY2ggbGljZW5zZXMgYXBwbHkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCitMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCitPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitCb3JpbmdTU0wgaXMgYSBmb3JrIG9mIE9wZW5TU0wuIEFzIHN1Y2gsIGxhcmdlIHBhcnRzIG9mIGl0IGZhbGwgdW5kZXIgT3BlblNTTAorbGljZW5zaW5nLiBGaWxlcyB0aGF0IGFyZSBjb21wbGV0ZWx5IG5ldyBoYXZlIGEgR29vZ2xlIGNvcHlyaWdodCBhbmQgYW4gSVNDCitsaWNlbnNlLiBUaGlzIGxpY2Vuc2UgaXMgcmVwcm9kdWNlZCBhdCB0aGUgYm90dG9tIG9mIHRoaXMgZmlsZS4KKworQ29udHJpYnV0b3JzIHRvIEJvcmluZ1NTTCBhcmUgcmVxdWlyZWQgdG8gZm9sbG93IHRoZSBDTEEgcnVsZXMgZm9yIENocm9taXVtOgoraHR0cHM6Ly9jbGEuZGV2ZWxvcGVycy5nb29nbGUuY29tL2NsYXMKKworRmlsZXMgaW4gdGhpcmRfcGFydHkvIGhhdmUgdGhlaXIgb3duIGxpY2Vuc2VzLCBhcyBkZXNjcmliZWQgdGhlcmVpbi4gVGhlIE1JVAorbGljZW5zZSwgZm9yIHRoaXJkX3BhcnR5L2ZpYXQsIHdoaWNoLCB1bmxpa2Ugb3RoZXIgdGhpcmRfcGFydHkgZGlyZWN0b3JpZXMsIGlzCitjb21waWxlZCBpbnRvIG5vbi10ZXN0IGxpYnJhcmllcywgaXMgaW5jbHVkZWQgYmVsb3cuCisKK1RoZSBPcGVuU1NMIHRvb2xraXQgc3RheXMgdW5kZXIgYSBkdWFsIGxpY2Vuc2UsIGkuZS4gYm90aCB0aGUgY29uZGl0aW9ucyBvZiB0aGUKK09wZW5TU0wgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIFNTTGVheSBsaWNlbnNlIGFwcGx5IHRvIHRoZSB0b29sa2l0LiBTZWUgYmVsb3cKK2ZvciB0aGUgYWN0dWFsIGxpY2Vuc2UgdGV4dHMuIEFjdHVhbGx5IGJvdGggbGljZW5zZXMgYXJlIEJTRC1zdHlsZSBPcGVuIFNvdXJjZQorbGljZW5zZXMuIEluIGNhc2Ugb2YgYW55IGxpY2Vuc2UgaXNzdWVzIHJlbGF0ZWQgdG8gT3BlblNTTCBwbGVhc2UgY29udGFjdAorb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorCitUaGUgZm9sbG93aW5nIGFyZSBHb29nbGUtaW50ZXJuYWwgYnVnIG51bWJlcnMgd2hlcmUgZXhwbGljaXQgcGVybWlzc2lvbiBmcm9tCitzb21lIGF1dGhvcnMgaXMgcmVjb3JkZWQgZm9yIHVzZSBvZiB0aGVpciB3b3JrLiAoVGhpcyBpcyBwdXJlbHkgZm9yIG91ciBvd24KK3JlY29yZCBrZWVwaW5nLikKKyAgMjcyODcxOTkKKyAgMjcyODc4ODAKKyAgMjcyODc4ODMKKyAgMjYzMjkxNDQ1CisKKyAgT3BlblNTTCBMaWNlbnNlCisgIC0tLS0tLS0tLS0tLS0tLQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKworIE9yaWdpbmFsIFNTTGVheSBMaWNlbnNlCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisKK0lTQyBsaWNlbnNlIHVzZWQgZm9yIGNvbXBsZXRlbHkgbmV3IGNvZGUgaW4gQm9yaW5nU1NMOgorCisvKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEdvb2dsZSBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuICovCisKKworVGhlIGNvZGUgaW4gdGhpcmRfcGFydHkvZmlhdCBjYXJyaWVzIHRoZSBNSVQgbGljZW5zZToKKworQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYgdGhlIGZpYXQtY3J5cHRvIGF1dGhvcnMgKHNlZQoraHR0cHM6Ly9naXRodWIuY29tL21pdC1wbHYvZmlhdC1jcnlwdG8vYmxvYi9tYXN0ZXIvQVVUSE9SUykuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKK1NPRlRXQVJFLgorCisKK0xpY2Vuc2VzIGZvciBzdXBwb3J0IGNvZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFydHMgb2YgdGhlIFRMUyB0ZXN0IHN1aXRlIGFyZSB1bmRlciB0aGUgR28gbGljZW5zZS4gVGhpcyBjb2RlIGlzIG5vdCBpbmNsdWRlZAoraW4gQm9yaW5nU1NMIChpLmUuIGxpYmNyeXB0byBhbmQgbGlic3NsKSB3aGVuIGNvbXBpbGVkLCBob3dldmVyLCBzbworZGlzdHJpYnV0aW5nIGNvZGUgbGlua2VkIGFnYWluc3QgQm9yaW5nU1NMIGRvZXMgbm90IHRyaWdnZXIgdGhpcyBsaWNlbnNlOgorCitDb3B5cmlnaHQgKGMpIDIwMDkgVGhlIEdvIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgogCi0tIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLXRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKK2luIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKyAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKLS0gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLS0gTmVpdGhlciB0aGUgbmFtZSBvZiBTdW4gTWljcm9zeXN0ZW1zIG9yIHRoZSBuYW1lcyBvZiBjb250cmlidXRvcnMgbWF5Ci1iZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci1zcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCi1JUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi1USEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi1QVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi1DT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLUVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLVBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgotTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitCb3JpbmdTU0wgdXNlcyB0aGUgQ2hyb21pdW0gdGVzdCBpbmZyYXN0cnVjdHVyZSB0byBydW4gYSBjb250aW51b3VzIGJ1aWxkLAordHJ5Ym90cyBldGMuIFRoZSBzY3JpcHRzIHdoaWNoIG1hbmFnZSB0aGlzLCBhbmQgdGhlIHNjcmlwdCBmb3IgZ2VuZXJhdGluZyBidWlsZAorbWV0YWRhdGEsIGFyZSB1bmRlciB0aGUgQ2hyb21pdW0gbGljZW5zZS4gRGlzdHJpYnV0aW5nIGNvZGUgbGlua2VkIGFnYWluc3QKK0JvcmluZ1NTTCBkb2VzIG5vdCB0cmlnZ2VyIHRoaXMgbGljZW5zZS4KIAotVGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlIGNvdmVyZWQgYnkgdGhlIGFib3ZlIGxpY2Vuc2UgYWJvdmUgaGFzIGJlZW4KLW1vZGlmaWVkIHNpZ25pZmljYW50bHkgYnkgR29vZ2xlIEluYy4KLUNvcHlyaWdodCAyMDA2LTIwMDggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0NvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgogCi12YWxncmluZAorICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCitpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uCisgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKK2NvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1Ob3RpY2UgdGhhdCB0aGUgZm9sbG93aW5nIEJTRC1zdHlsZSBsaWNlbnNlIGFwcGxpZXMgdG8gdGhpcyBvbmUKLWZpbGUgKHZhbGdyaW5kLmgpIG9ubHkuICBUaGUgcmVzdCBvZiBWYWxncmluZCBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLXRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCB1bmxlc3MKLW90aGVyd2lzZSBpbmRpY2F0ZWQuICBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgc291cmNlCi1kaXN0cmlidXRpb24gZm9yIGRldGFpbHMuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMy0yMDE2IGJ5IHRoZSBCcm90bGkgQXV0aG9ycy4KIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKIAotVGhpcyBmaWxlIGlzIHBhcnQgb2YgVmFsZ3JpbmQsIGEgZHluYW1pYyBiaW5hcnkgaW5zdHJ1bWVudGF0aW9uCi1mcmFtZXdvcmsuCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAKLUNvcHlyaWdodCAoQykgMjAwMC0yMDA3IEp1bGlhbiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KIAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLQogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICAgd3JpdHRlbiBwZXJtaXNzaW9uLgogCi0yLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IAotICAgbm90IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gIElmIHlvdSB1c2UgdGhpcyAKLSAgIHNvZnR3YXJlIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgCi0gICBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKK09GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KIAotMy4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdAotICAgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBwYWNrYWdlLCB0aGUgRVhUMiBmaWxlc3lzdGVtIHV0aWxpdGllcywgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyCit0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBsaWIvZXh0MmZzCithbmQgbGliL2UycCBsaWJyYXJpZXMsIHdoaWNoIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgR05VIExpYnJhcnkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCB0aGUgbGliL3V1aWQgbGlicmFyeSB3aGljaCBpcyBtYWRlCithdmFpbGFibGUgdW5kZXIgYSBCU0Qtc3R5bGUgbGljZW5zZSBhbmQgdGhlIGxpYi9ldCBhbmQgbGliL3NzCitsaWJyYXJpZXMgd2hpY2ggYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGFuIE1JVC1zdHlsZSBsaWNlbnNlLiAgUGxlYXNlCitzZWUgbGliL3V1aWQvQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzIGZvciB0aGUgbGljZW5zZSBmb3IgdGhlIGZpbGVzCitjb21wcmlzaW5nIHRoZSBsaWJ1dWlkIGxpYnJhcnksIGFuZCB0aGUgc291cmNlIGZpbGUgaGVhZGVycyBvZiB0aGUKK2xpYmV0IGFuZCBsaWJzcyBsaWJyYXJpZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKLTQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSAKLSAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiAKLSAgIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCi1PUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi1BUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKLURJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUKLUdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLUlOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAotV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLVNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorVGhlIG1vc3QgcmVjZW50IG9mZmljaWFsbHkgZGlzdHJpYnV0ZWQgdmVyc2lvbiBjYW4gYmUgZm91bmQgYXQKK2h0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LiAgSWYgeW91IG5lZWQgdG8gbWFrZSBhIGRpc3RyaWJ1dGlvbiwKK3RoYXQncyB0aGUgb25lIHlvdSBzaG91bGQgdXNlLiAgSWYgdGhlcmUgaXMgc29tZSByZWFzb24gd2h5IHlvdSdkIGxpa2UKK2EgbW9yZSByZWNlbnQgdmVyc2lvbiB0aGF0IGlzIHN0aWxsIGluIEFMUEhBIHRlc3RpbmcgKGkuZS4sIGVpdGhlcgordXNpbmcgdGhlICJXSVAiIHRlc3QgZGlzdHJpYnV0aW9ucyBvciBvbmUgZnJvbSB0aGUgaGcgb3IgZ2l0CityZXBvc2l0b3J5IGZyb20gdGhlIGRldmVsb3BtZW50IGJyYW5jaCwgcGxlYXNlIGNvbnRhY3QgbWUKKyh0eXRzb0BtaXQuZWR1KSBiZWZvcmUgeW91IHNoaXAuICBUaGUgcmVsZWFzZSBzY2hlZHVsZXMgZm9yIHRoaXMKK3BhY2thZ2UgYXJlIGZsZXhpYmxlLCBpZiB5b3UgZ2l2ZSBtZSBlbm91Z2ggbGVhZCB0aW1lLgogCiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90aWNlcyBmb3IgZmlsZShzKToKLS9mcmFtZXdvcmsvb3JnLW5ldGJlYW5zLWFwaS12aXN1YWwuamFyCi0vZnJhbWV3b3JrL29yZy1vcGVuaWRlLXV0aWwuamFyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIEp1bmUgMTk5MSAKKwkJCQkJVGhlb2RvcmUgVHMnbworCQkJCQkyMy1KdW5lLTIwMDcKIAotQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi01OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCiAKLUV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwotb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgogCi1QcmVhbWJsZQorCQkJICAgIFByZWFtYmxlCiAKLVRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5Ci15b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBHTlUKLUdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbQotdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlCi1pcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiBUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLWFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJ3Mgc29mdHdhcmUKLWFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0byB1c2luZyBpdC4KLShTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Ci10aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgWW91IGNhbgotYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLiBXaGVuIHdlIHNwZWFrIG9mIGZyZWUKLXNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4gT3VyCi1HZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91Ci1oYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZAotY2hhcmdlIGZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlCi1zb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4KLWNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZQotcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLiBUbwotcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0Ci1mb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvCi1zdXJyZW5kZXIgdGhlIHJpZ2h0cy4gVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0bwotY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mCi10aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgogCi1Gb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLAotd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzCi1hbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LAotdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiBBbmQgeW91IG11c3Qgc2hvdwotdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCiAKLVdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlCi1zb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdQotbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlCi1zb2Z0d2FyZS4KKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KIAotQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlCi1jZXJ0YWluIHRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eQotZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5Ci1zb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ugd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93Ci10aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvIHRoYXQgYW55Ci1wcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZQotb3JpZ2luYWwgYXV0aG9ycycgcmVwdXRhdGlvbnMuCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KIAotRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkKLXNvZnR3YXJlIHBhdGVudHMuIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0Ci1yZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUgcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4KLXBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUgcHJvZ3JhbSBwcm9wcmlldGFyeS4KLVRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0Ci1iZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KIAotVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbgotYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgogCi1URVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORAotTU9ESUZJQ0FUSU9OCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCiAKLTAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2gKLWNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQKLW1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYwotTGljZW5zZS4gVGhlICJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yCi13b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIgbWVhbnMgZWl0aGVyIHRoZQotUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMKLXRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAotZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvCi1hbm90aGVyIGxhbmd1YWdlLiAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkCi13aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSBFYWNoCi1saWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgogCi1BY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24KLWFyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLgotVGhlIGFjdCBvZiBydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlCi1vdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzCi1jb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YKLWhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuIFdoZXRoZXIgdGhhdCBpcwotdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCiAKLTEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlCi1Qcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sCi1wcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24KLWVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mCi13YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcwotTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkKLW90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZwotd2l0aCB0aGUgUHJvZ3JhbS4KK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgogCi1Zb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYQotY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbgotaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KIAotMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkKLXBvcnRpb24gb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZAotY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUKLXRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZgotdGhlc2UgY29uZGl0aW9uczoKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KIAotYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudAotbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZgotYW55IGNoYW5nZS4KKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgogCi1iKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsCi10aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZQotUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vCi1jaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgogCi1jKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcwotaW50ZXJhY3RpdmVseSB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZAotcnVubmluZyBmb3Igc3VjaCBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LAotdG8gcHJpbnQgb3IgZGlzcGxheSBhbiBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlCi1jb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvcgotZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5Ci1yZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcKLXRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIChFeGNlcHRpb246IGlmCi10aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0IGRvZXMgbm90IG5vcm1hbGx5Ci1wcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtCi1pcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KIAotVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmCi1pZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZQotUHJvZ3JhbSwgYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kCi1zZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cwotdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlCi10aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiBCdXQgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGUgc2FtZQotc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZCBvbiB0aGUKLVByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zCi1vZiB0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMKLWV4dGVuZCB0byB0aGUgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0Ci1yZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKwwKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCiAKLVRodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMKLW9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsKLXJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUKLWRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlCi1Qcm9ncmFtLiBJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90Ci1iYXNlZCBvbiB0aGUgUHJvZ3JhbSB3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZAotb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24KLW1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcwotTGljZW5zZS4KK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCiAKLTMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkCi1vbiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KLXVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91Ci1hbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KIAotYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKLW1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQKLXVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCi1jdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAKLWIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0Ci10aHJlZSB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlCi10aGFuIHlvdXIgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwKLWEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZQotY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIKLWFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOwotb3IsCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAogCi1jKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZQotb2ZmZXIgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAoVGhpcwotYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbgotYW5kIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yCi1leGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aAotU3Vic2VjdGlvbiBiIGFib3ZlLikKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKIAotVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZQotd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhbiBleGVjdXRhYmxlIHdvcmssCi1jb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwKLW1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlCi1kZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbAotY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gSG93ZXZlciwgYXMKLWEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdAotaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIKLXNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsCi1rZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlCi1leGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKLXRoZSBleGVjdXRhYmxlLiBJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZQotaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwKLXRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbQotdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsCi1ldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlCi1zb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQogCi00LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkKLWF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCi1yaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlCi1yZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwKLW5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMKLXJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCiAKLTUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdQotaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdQotcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMKLWRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdQotZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSwKLXlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKLWFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvcgotbW9kaWZ5aW5nIHRoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KIAotNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkCi1vbiB0aGUgUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhCi1saWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IKLW1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLgotWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUKLXJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUKLW5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KIHRoaXMgTGljZW5zZS4KIAotNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mCi1wYXRlbnQgaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0bwotcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5Ci1jb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZQotY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUKLWNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMKLXRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCi1MaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEKLWNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiBGb3IKLWV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUKLXJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZQotY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5Ci15b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCiAKLUlmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IKLXVuZW5mb3JjZWFibGUgdW5kZXIgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZQotb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEKLXdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuIEl0IGlzIG5vdAotdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55Ci1wYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0Ci12YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUKLXB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlCi1kaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZQotcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0bwotdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbQotaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMKLXVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvCi1kaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZQotY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS4KK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCiAKLVRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcwotYmVsaWV2ZWQgdG8gYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KIAotOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzCi1yZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5Ci1jb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8KLXBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdAotZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZQotY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvcgotYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMKLUxpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlCi1ib2R5IG9mIHRoaXMgTGljZW5zZS4KK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KIAotOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vcgotbmV3IHZlcnNpb25zIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0bwotdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUKLXByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3Ci1wcm9ibGVtcyBvciBjb25jZXJucy4KKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KIAotRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmCi10aGUgUHJvZ3JhbSBzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2gKLWFwcGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24KLW9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbgotb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi1Gb3VuZGF0aW9uLiBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIKLW9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQKLWJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCiAKLTEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvCi1vdGhlciBmcmVlIHByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZQotZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gRm9yCi1zb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2UKLXNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuIE91ciBkZWNpc2lvbiB3aWxsIGJlCi1ndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwKLWRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlCi1zaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCiAKLU5PIFdBUlJBTlRZCisJCQkgICAgTk8gV0FSUkFOVFkKIAotMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTCi1OTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCi1BUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRQotQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTQotIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SCi1JTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLVBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UKLU9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUKLURFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCiBSRVBBSVIgT1IgQ09SUkVDVElPTi4KIAotMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQKLVRPIElOIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZCi1XSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRAotQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwKLVNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GCi1USEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UCi1MSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IKLUxPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRQotUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNICi1IT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLVNVQ0ggREFNQUdFUy4KKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCiAKLUVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKIAotSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgogCi1JZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlCi1ncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUKLXRoaXMgaXMgdG8gbWFrZSBpdCBmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbgotcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCiAKLVRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiBJdCBpcwotc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvCi1tb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaAotZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyCi10byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgogCi1PbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQKLWl0IGRvZXMuCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotQ29weXJpZ2h0IChDKSA8eWVhcj4gPG5hbWUgb2YgYXV0aG9yPgotVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0Ci1hbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi1MaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLXZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKLXZlcnNpb24uIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0Ci13aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlCi1pbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi1QQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi1tb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVQotR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LAotd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCi1QbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIAotQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kCi1wYXBlciBtYWlsLiBJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYQotc2hvcnQgbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZQotbW9kZToKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxICBVU0EKIAotR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCi1Hbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzCi10eXBlIGBzaG93IHcnLiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8KLXJlZGlzdHJpYnV0ZSBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yCi1kZXRhaWxzLiBUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJwotc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlIHBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYwotTGljZW5zZS4gT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkgYmUgY2FsbGVkCi1zb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbgotYmUgbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KIAotWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhCi1wcm9ncmFtbWVyKSBvciB5b3VyIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodAotZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuIEhlcmUgaXMgYSBzYW1wbGU7Ci1hbHRlciB0aGUgbmFtZXM6CitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KIAotWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbgotdGhlIHByb2dyYW0gYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykKLXdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKIAotc2lnbmF0dXJlIG9mIFR5IENvb24sIDEgQXByaWwgMTk4OQotVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKLVRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZwoteW91ciBwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuIElmIHlvdXIgcHJvZ3JhbSBpcyBhCi1zdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8KLXBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZSBsaWJyYXJ5LiBJZgotdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAogUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCiAKLSJDTEFTU1BBVEgiIEVYQ0VQVElPTiBUTyBUSEUgR1BMIFZFUlNJT04gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1DZXJ0YWluIHNvdXJjZSBmaWxlcyBkaXN0cmlidXRlZCBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIAotYXJlIHN1YmplY3QgdG8gIHRoZSBmb2xsb3dpbmcgY2xhcmlmaWNhdGlvbiBhbmQgc3BlY2lhbAotZXhjZXB0aW9uIHRvIHRoZSBHUEwgVmVyc2lvbiAyLCBidXQgb25seSB3aGVyZSBTdW4gaGFzCi1leHByZXNzbHkgaW5jbHVkZWQgaW4gdGhlIHBhcnRpY3VsYXIgc291cmNlIGZpbGUncyBoZWFkZXIKLXRoZSB3b3JkcyAgIlN1biBkZXNpZ25hdGVzIHRoaXMgcGFydGljdWxhciBmaWxlIGFzIHN1YmplY3QKLXRvIHRoZSAiQ2xhc3NwYXRoIiBleGNlcHRpb24gYXMgcHJvdmlkZWQgYnkgU3VuIGluIHRoZQotTGljZW5zZSBmaWxlIHRoYXQgYWNjb21wYW5pZWQgdGhpcyBjb2RlLiIgCisJCSAgR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKIAotICAgTGlua2luZyB0aGlzIGxpYnJhcnkgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIG90aGVyCi1tb2R1bGVzIGlzIG1ha2luZyBhIGNvbWJpbmVkIHdvcmsgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LiAKLVRodXMsIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi1MaWNlbnNlIFZlcnNpb24gMiBjb3ZlciB0aGUgd2hvbGUgY29tYmluYXRpb24uIAorIENvcHlyaWdodCAoQykgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAJCSAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgogCi0gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGlzCi1saWJyYXJ5IGdpdmUgeW91ICBwZXJtaXNzaW9uIHRvIGxpbmsgdGhpcyBsaWJyYXJ5IHdpdGgKLWluZGVwZW5kZW50IG1vZHVsZXMgdG8gcHJvZHVjZSBhbiAgZXhlY3V0YWJsZSwgcmVnYXJkbGVzcyBvZgotdGhlIGxpY2Vuc2UgdGVybXMgb2YgdGhlc2UgaW5kZXBlbmRlbnQgbW9kdWxlcywgIGFuZCB0byBjb3B5Ci1hbmQgZGlzdHJpYnV0ZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdW5kZXIgdGVybXMgb2YgeW91ciAKLWNob2ljZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0LCBmb3IgZWFjaCBsaW5rZWQKLWluZGVwZW5kZW50IG1vZHVsZSwgIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZQotb2YgdGhhdCBtb2R1bGUuICBBbiBpbmRlcGVuZGVudCAgbW9kdWxlIGlzIGEgbW9kdWxlIHdoaWNoIGlzCi1ub3QgZGVyaXZlZCBmcm9tIG9yIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gIElmICB5b3UgbW9kaWZ5Ci10aGlzIGxpYnJhcnksIHlvdSBtYXkgZXh0ZW5kIHRoaXMgZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbgotb2YgIHRoZSBsaWJyYXJ5LCBidXQgeW91IGFyZSBub3Qgb2JsaWdhdGVkIHRvIGRvIHNvLiAgSWYgeW91Ci1kbyBub3Qgd2lzaCB0byBkbyBzbywgZGVsZXRlIHRoaXMgZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tCi15b3VyIHZlcnNpb24uCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vbGliL2xpYm9wZW5qZGtqdm0uc28KLS9saWIvbGlib3Blbmpka2p2bWQuc28KLS9saWI2NC9saWJvcGVuamRranZtLnNvCi0vbGliNjQvbGlib3Blbmpka2p2bWQuc28KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLURPIE5PVCBBTFRFUiBPUiBSRU1PVkUgQ09QWVJJR0hUIE5PVElDRVMgT1IgVEhJUyBGSUxFIEhFQURFUi4KK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IEdQTC4gIEl0IGlzCisgbnVtYmVyZWQgMiBiZWNhdXNlIGl0IGdvZXMgd2l0aCB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdQTC5dCiAKLVRoaXMgZmlsZSBpbXBsZW1lbnRzIGludGVyZmFjZXMgZnJvbSB0aGUgZmlsZSBqdm0uaC4gVGhpcyBpbXBsZW1lbnRhdGlvbgotaXMgbGljZW5zZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgdGhlIGZpbGUganZtLmguICBUaGUKLWNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGZpbGUganZtLmggZm9sbG93cy4KKwkJCSAgICBQcmVhbWJsZQogCi1Db3B5cmlnaHQgKGMpIDE5OTcsIDIwMTEsIE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1ETyBOT1QgQUxURVIgT1IgUkVNT1ZFIENPUFlSSUdIVCBOT1RJQ0VTIE9SIFRISVMgRklMRSBIRUFERVIuCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCitmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCiAKLVRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci11bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvbmx5LCBhcwotcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBPcmFjbGUgZGVzaWduYXRlcyB0aGlzCi1wYXJ0aWN1bGFyIGZpbGUgYXMgc3ViamVjdCB0byB0aGUgIkNsYXNzcGF0aCIgZXhjZXB0aW9uIGFzIHByb3ZpZGVkCi1ieSBPcmFjbGUgaW4gdGhlIExJQ0VOU0UgZmlsZSB0aGF0IGFjY29tcGFuaWVkIHRoaXMgY29kZS4KKyAgVGhpcyBsaWNlbnNlLCB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSwgYW5kIHRvIGFueQorb3RoZXIgbGlicmFyaWVzIHdob3NlIGF1dGhvcnMgZGVjaWRlIHRvIHVzZSBpdC4gIFlvdSBjYW4gdXNlIGl0IGZvcgoreW91ciBsaWJyYXJpZXMsIHRvby4KIAotVGhpcyBjb2RlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi1BTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLUZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotdmVyc2lvbiAyIGZvciBtb3JlIGRldGFpbHMgKGEgY29weSBpcyBpbmNsdWRlZCBpbiB0aGUgTElDRU5TRSBmaWxlIHRoYXQKLWFjY29tcGFuaWVkIHRoaXMgY29kZSkuCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KIAotWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgotMiBhbG9uZyB3aXRoIHRoaXMgd29yazsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmCit5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIG9yIGlmIHlvdSBtb2RpZnkgaXQuCiAKLVBsZWFzZSBjb250YWN0IE9yYWNsZSwgNTAwIE9yYWNsZSBQYXJrd2F5LCBSZWR3b29kIFNob3JlcywgQ0EgOTQwNjUgVVNBCi1vciB2aXNpdCB3d3cub3JhY2xlLmNvbSBpZiB5b3UgbmVlZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9yIGhhdmUgYW55Ci1xdWVzdGlvbnMuCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCitvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlCit5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCitjb2RlLiAgSWYgeW91IGxpbmsgYSBwcm9ncmFtIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cyBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5LCBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vYmluL21kbnNkCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBtYWpvcml0eSBvZiB0aGUgc291cmNlIGNvZGUgaW4gdGhlIG1ETlNSZXNwb25kZXIgcHJvamVjdCBpcyBsaWNlbnNlZAotdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBmcm9tOgotICAgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMD4KKyAgT3VyIG1ldGhvZCBvZiBwcm90ZWN0aW5nIHlvdXIgcmlnaHRzIGhhcyB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQKK3RoZSBsaWJyYXJ5LCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KIAotVG8gYWNjb21tb2RhdGUgbGljZW5zZSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHdpZGVzdCBwb3NzaWJsZSByYW5nZQotb2YgY2xpZW50IGNvZGUgbGljZW5zZXMsIHRoZSBzaGFyZWQgbGlicmFyeSBjb2RlLCB3aGljaCBpcyBsaW5rZWQKLWF0IHJ1bnRpbWUgaW50byB0aGUgc2FtZSBhZGRyZXNzIHNwYWNlIGFzIHRoZSBjbGllbnQgdXNpbmcgaXQsIGlzCi1saWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlICJUaHJlZS1DbGF1c2UgQlNEIExpY2Vuc2UiLgorICBBbHNvLCBmb3IgZWFjaCBkaXN0cmlidXRvcidzIHByb3RlY3Rpb24sIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorbGlicmFyeS4gIElmIHRoZSBsaWJyYXJ5IGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbAordmVyc2lvbiwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbgordGhlIG9yaWdpbmFsIGF1dGhvcnMnIHJlcHV0YXRpb25zLgorDAorICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IGNvbXBhbmllcyBkaXN0cmlidXRpbmcgZnJlZQorc29mdHdhcmUgd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgdGh1cyBpbiBlZmZlY3QKK3RyYW5zZm9ybWluZyB0aGUgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHNvZnR3YXJlLiAgVG8gcHJldmVudCB0aGlzLAord2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzCitmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgogCi1UaGUgTGludXggTmFtZSBTZXJ2aWNlIFN3aXRjaCBjb2RlLCBjb250cmlidXRlZCBieSBOYXRpb25hbCBJQ1QKLUF1c3RyYWxpYSBMdGQgKE5JQ1RBKSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE5JQ1RBIFB1YmxpYwotU29mdHdhcmUgTGljZW5jZSAod2hpY2ggaXMgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiVGhyZWUtQ2xhdXNlCi1CU0QgTGljZW5zZSIsIHdpdGggc29tZSBhZGRpdGlvbmFsIGxhbmd1YWdlIHBlcnRhaW5pbmcgdG8gQXVzdHJhbGlhbiBsYXcpLgorICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIHdhcyBkZXNpZ25lZCBmb3IgdXRpbGl0eSBwcm9ncmFtcy4gIFRoaXMKK2xpY2Vuc2UsIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4KK2Rlc2lnbmF0ZWQgbGlicmFyaWVzLiAgVGhpcyBsaWNlbnNlIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeQorb25lOyBiZSBzdXJlIHRvIHJlYWQgaXQgaW4gZnVsbCwgYW5kIGRvbid0IGFzc3VtZSB0aGF0IGFueXRoaW5nIGluIGl0IGlzCit0aGUgc2FtZSBhcyBpbiB0aGUgb3JkaW5hcnkgbGljZW5zZS4KIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2Jpbi9mc2NrLmYyZnMKLS9iaW4vbWFrZV9mMmZzCi0vYmluL3Nsb2FkX2YyZnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGUgcmVhc29uIHdlIGhhdmUgYSBzZXBhcmF0ZSBwdWJsaWMgbGljZW5zZSBmb3Igc29tZSBsaWJyYXJpZXMgaXMgdGhhdAordGhleSBibHVyIHRoZSBkaXN0aW5jdGlvbiB3ZSB1c3VhbGx5IG1ha2UgYmV0d2VlbiBtb2RpZnlpbmcgb3IgYWRkaW5nIHRvIGEKK3Byb2dyYW0gYW5kIHNpbXBseSB1c2luZyBpdC4gIExpbmtpbmcgYSBwcm9ncmFtIHdpdGggYSBsaWJyYXJ5LCB3aXRob3V0CitjaGFuZ2luZyB0aGUgbGlicmFyeSwgaXMgaW4gc29tZSBzZW5zZSBzaW1wbHkgdXNpbmcgdGhlIGxpYnJhcnksIGFuZCBpcworYW5hbG9nb3VzIHRvIHJ1bm5pbmcgYSB1dGlsaXR5IHByb2dyYW0gb3IgYXBwbGljYXRpb24gcHJvZ3JhbS4gIEhvd2V2ZXIsIGluCithIHRleHR1YWwgYW5kIGxlZ2FsIHNlbnNlLCB0aGUgbGlua2VkIGV4ZWN1dGFibGUgaXMgYSBjb21iaW5lZCB3b3JrLCBhCitkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LCBhbmQgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK3RyZWF0cyBpdCBhcyBzdWNoLgorCisgIEJlY2F1c2Ugb2YgdGhpcyBibHVycmVkIGRpc3RpbmN0aW9uLCB1c2luZyB0aGUgb3JkaW5hcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgZm9yIGxpYnJhcmllcyBkaWQgbm90IGVmZmVjdGl2ZWx5IHByb21vdGUgc29mdHdhcmUKK3NoYXJpbmcsIGJlY2F1c2UgbW9zdCBkZXZlbG9wZXJzIGRpZCBub3QgdXNlIHRoZSBsaWJyYXJpZXMuICBXZQorY29uY2x1ZGVkIHRoYXQgd2Vha2VyIGNvbmRpdGlvbnMgbWlnaHQgcHJvbW90ZSBzaGFyaW5nIGJldHRlci4KKworICBIb3dldmVyLCB1bnJlc3RyaWN0ZWQgbGlua2luZyBvZiBub24tZnJlZSBwcm9ncmFtcyB3b3VsZCBkZXByaXZlIHRoZQordXNlcnMgb2YgdGhvc2UgcHJvZ3JhbXMgb2YgYWxsIGJlbmVmaXQgZnJvbSB0aGUgZnJlZSBzdGF0dXMgb2YgdGhlCitsaWJyYXJpZXMgdGhlbXNlbHZlcy4gIFRoaXMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvCitwZXJtaXQgZGV2ZWxvcGVycyBvZiBub24tZnJlZSBwcm9ncmFtcyB0byB1c2UgZnJlZSBsaWJyYXJpZXMsIHdoaWxlCitwcmVzZXJ2aW5nIHlvdXIgZnJlZWRvbSBhcyBhIHVzZXIgb2Ygc3VjaCBwcm9ncmFtcyB0byBjaGFuZ2UgdGhlIGZyZWUKK2xpYnJhcmllcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlbS4gIChXZSBoYXZlIG5vdCBzZWVuIGhvdyB0byBhY2hpZXZlCit0aGlzIGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiBoZWFkZXIgZmlsZXMsIGJ1dCB3ZSBoYXZlIGFjaGlldmVkIGl0IGFzIHJlZ2FyZHMKK2NoYW5nZXMgaW4gdGhlIGFjdHVhbCBmdW5jdGlvbnMgb2YgdGhlIExpYnJhcnkuKSAgVGhlIGhvcGUgaXMgdGhhdCB0aGlzCit3aWxsIGxlYWQgdG8gZmFzdGVyIGRldmVsb3BtZW50IG9mIGZyZWUgbGlicmFyaWVzLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoaWxlIHRoZSBsYXR0ZXIgb25seQord29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgbGlicmFyeS4KKworICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIGEgbGlicmFyeSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByYXRoZXIgdGhhbiBieSB0aGlzIHNwZWNpYWwgb25lLgorDAorCQkgIEdOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSB3aGljaAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yIG90aGVyIGF1dGhvcml6ZWQKK3BhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGlicmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLiAgRWFjaCBsaWNlbnNlZSBpcworYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCitzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yCit3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCithbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKyAgCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tcGlsZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGMpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZCkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5CitkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCitidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAorImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQorbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisMCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAorZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCityZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK29yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCisgIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiAgSXQgaXMKK3NhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKKyJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgIFVTQQorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIGxpYnJhcnksIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUKKyAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5OTAKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCEKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQgYW5kIENsYXJrIENvb3BlcgorQ29weXJpZ2h0IChjKSAyMDAxLTIwMjIgRXhwYXQgbWFpbnRhaW5lcnMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCitpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCitDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKK1NPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIFRoZSB0b29scyBmb3IgRjJGUyBhcmUgY292ZXJlZCBieSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgogRXhjZXB0aW9uYWxseSwgdGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgYWxzbyBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIGFzIHRoZSBkdWFsIGxpY2Vuc2VzLgpAQCAtMTk5OSwzNTkgKzMyOTQsNzMgQEAKIAogVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCEKIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2Jpbi9mY19zb3J0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCi0JCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDE2LCBWaWN0b3IgWnZlcm92aWNoCiAKLSBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gICAgICAgICAgICAgICAgICAgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKLSBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCiAKLQkJCSAgICBQcmVhbWJsZQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKIAotICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCi1mcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQotc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKLUdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCi1Gb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCi11c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Ci10aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KLXlvdXIgcHJvZ3JhbXMsIHRvby4KKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIAotICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90Ci1wcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91Ci1oYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCi10aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKLWlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0Ci1pbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKK09OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLSAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAotYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgotVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKLWRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0IChjKSAyMDEyIC0gcHJlc2VudCwgVmljdG9yIFp2ZXJvdmljaCBhbmQge2ZtdH0gY29udHJpYnV0b3JzCiAKLSAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgotZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Ci15b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQotc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgotcmlnaHRzLgorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAKLSAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAotKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKLWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAKLSAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KLXRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCi1zb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKLXdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCi10aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAotYXV0aG9ycycgcmVwdXRhdGlvbnMuCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAKLSAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKLXBhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKLXByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKLXByb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQotcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKy0tLSBPcHRpb25hbCBleGNlcHRpb24gdG8gdGhlIGxpY2Vuc2UgLS0tCiAKLSAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKLW1vZGlmaWNhdGlvbiBmb2xsb3cuCi0MCi0JCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCitBcyBhbiBleGNlcHRpb24sIGlmLCBhcyBhIHJlc3VsdCBvZiB5b3VyIGNvbXBpbGluZyB5b3VyIHNvdXJjZSBjb2RlLCBwb3J0aW9ucworb2YgdGhpcyBTb2Z0d2FyZSBhcmUgZW1iZWRkZWQgaW50byBhIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgZm9ybSBvZiBzdWNoCitzb3VyY2UgY29kZSwgeW91IG1heSByZWRpc3RyaWJ1dGUgc3VjaCBlbWJlZGRlZCBwb3J0aW9ucyBpbiBzdWNoIG9iamVjdCBmb3JtCit3aXRob3V0IGluY2x1ZGluZyB0aGUgYWJvdmUgY29weXJpZ2h0IGFuZCBwZXJtaXNzaW9uIG5vdGljZXMuCiAKLSAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucwotYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKLXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKLXJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgotbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKLXRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCi1laXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgotbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgotdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKLWNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKLXJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KLWlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCi1Qcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgotV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisgICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogCi0gIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncwotc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Ci1jb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCi1jb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCi1ub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7Ci1hbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCi1hbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAKLVlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoteW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi0gIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KLW9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKLWRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQotYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKLQotICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCi0KLSAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KLSAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKLSAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAotICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KLQotICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKLSAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCi0gICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgotICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQotICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQotICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKLSAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcwotICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0Ci0gICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgotICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQotDAotVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgotaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKLWFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgotdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQotc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91Ci1kaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKLW9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgotdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKLWVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KLQotVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Ci15b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KLWV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgotY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KLQotSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQotd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCi1hIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgotdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KLQotICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKLXVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgotU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotCi0gICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQotICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucwotICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAotCi0gICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKLSAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgotICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKLSAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCi0gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KLSAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCi0KLSAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgotICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCi0gICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKLSAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCi0gICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCi0KLVRoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKLW1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCi1jb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQotYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCi1jb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCi1zcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKLWFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Ci1mb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQotb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKLWl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KLQotSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZwotYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAotYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKLWNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCi0MCi0gIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAotb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCi12b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCi1Ib3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgotdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKLXBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KLQotICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKLXNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCi1kaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKLXByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKLW1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQotUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKLWFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKLXRoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgotCi0gIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKLVByb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCi1vcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCi10aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgotcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgotWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KLXRoaXMgTGljZW5zZS4KLQotICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50Ci1pbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAotY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgotb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAotZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKLWRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKLUxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKLW1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKLWxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKLWFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgotdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwotcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KLQotSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCi1hbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCi1hcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgotY2lyY3Vtc3RhbmNlcy4KLQotSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQotcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKLXN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKLWludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcwotaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCi1nZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCi10aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAotc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwotdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90Ci1pbXBvc2UgdGhhdCBjaG9pY2UuCi0KLVRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bwotYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCi0MCi0gIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCi1jZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKLW9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKLW1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwotdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZwotY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCi10aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KLQotICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucwotb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCi1iZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KLWFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgotCi1FYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCi1zcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQotbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKLXRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24uCi0KLSAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQotcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgotdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCi1Tb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKLW1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCi1vZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCi1vZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KLQotCQkJICAgIE5PIFdBUlJBTlRZCi0KLSAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCi1GT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KLU9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKLVBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECi1PUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUwotVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQotUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCi1SRVBBSVIgT1IgQ09SUkVDVElPTi4KLQotICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCi1XSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCi1SRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAotSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCi1PVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECi1UTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKLVlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCi1QUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKLVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KLQotCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwotDAotCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKLQotICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Ci1wb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0Ci1mcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KLQotICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAotdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQotY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKLXRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgotCi0gICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KLSAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotCi0KLUFsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgotCi1JZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCi13aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgotCi0gICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCi0gICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgotICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKLSAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCi0KLVRoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQotcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQotYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCi1tb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgotCi1Zb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgotc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKLW5lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKLQotICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCi0gIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgotCi0gIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQotICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQotCi1UaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KLXByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Ci1jb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKLWxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAotUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90aWNlcyBmb3IgZmlsZShzKToKLS9iaW4vYXNzZW1ibGVfdmludGYKLS9mcmFtZXdvcmsvZ3VhdmFsaWIuamFyCi0vZnJhbWV3b3JrL2phcmphci5qYXIKLS9mcmFtZXdvcmsvb2JqZW5lc2lzLWhvc3QuamFyCi0vbGliNjQvbGlidmludGYuc28KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNApAQCAtMjUzMCwxMzc5ICszNTM5LDggQEAKIAogICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCiAKLSAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KIAotICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKLSAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKLSAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCi0gICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQotICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCi0gICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCi0gICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKLSAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KLQotICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCi0KLSAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90aWNlcyBmb3IgZmlsZShzKToKLS9saWIvbGliZHRfc29ja2V0LnNvCi0vbGliL2xpYmpkd3Auc28KLS9saWIvbGlibnB0LnNvCi0vbGliNjQvbGliZHRfc29ja2V0LnNvCi0vbGliNjQvbGliamR3cC5zbwotL2xpYjY0L2xpYm5wdC5zbwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkKLQotVmVyc2lvbiAyLCBKdW5lIDE5OTEKLQotQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotCi1FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlCi1kb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgotCi1QcmVhbWJsZQotCi1UaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUKLWFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvCi1ndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZQotc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvCi1tb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UKLWF1dGhvcnMgY29tbWl0IHRvIHVzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzCi1jb3ZlcmVkIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSBZb3UgY2FuIGFwcGx5IGl0IHRvCi15b3VyIHByb2dyYW1zLCB0b28uCi0KLVdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuICBPdXIKLUdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0bwotZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwKLXRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZQotdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdQotY2FuIGRvIHRoZXNlIHRoaW5ncy4KLQotVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueQoteW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zCi10cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCi0KLUZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvcgotYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB5b3UgaGF2ZS4gIFlvdSBtdXN0Ci1tYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3QKLXNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgotCi1XZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kICgyKQotb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlCi1hbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KLQotQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdAotZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiAgSWYgdGhlCi1zb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ugd2FudCBpdHMgcmVjaXBpZW50cyB0bwota25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQKLWJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy4KLQotRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gIFdlCi13aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUgcHJvZ3JhbSB3aWxsCi1pbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUgcHJvZ3JhbSBwcm9wcmlldGFyeS4KLVRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvcgotZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgotCi1UaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24KLWZvbGxvdy4KLQotVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCi0KLTAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMgYSBub3RpY2UKLXBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgotdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtCi1vciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIgbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueQotZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUKLVByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vcgotdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkCi13aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcwotInlvdSIuCi0KLUFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90IGNvdmVyZWQgYnkKLXRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFByb2dyYW0gaXMKLW5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMKLWNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5Ci1ydW5uaW5nIHRoZSBQcm9ncmFtKS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgotCi0xLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMKLXlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAotYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAotZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlCi1hbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUKLVByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgotCi1Zb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heQotYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCi0KLTIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMKLWZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMKLW9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZgotdGhlc2UgY29uZGl0aW9uczoKLQotICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nCi0gICAgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCi0KLSAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4gd2hvbGUgb3IKLSAgICBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZQotICAgIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZgotICAgIHRoaXMgTGljZW5zZS4KLQotICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkgd2hlbiBydW4sCi0gICAgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoIGludGVyYWN0aXZlIHVzZSBpbiB0aGUKLSAgICBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbiBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuCi0gICAgYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYSBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IKLSAgICBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlCi0gICAgdGhlIHByb2dyYW0gdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5Ci0gICAgb2YgdGhpcyBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dCBkb2VzCi0gICAgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0gaXMKLSAgICBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKLQotVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZiBpZGVudGlmaWFibGUKLXNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwgYW5kIGNhbiBiZSByZWFzb25hYmx5Ci1jb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kCi1pdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUKLXdvcmtzLiAgQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEKLXdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zCi1vZiB0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZSBlbnRpcmUKLXdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgotCi1UaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91cgotcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUKLXJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24KLXRoZSBQcm9ncmFtLgotCi1JbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtIHdpdGggdGhlCi1Qcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCi1kaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGlzCi1MaWNlbnNlLgotCi0zLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwgdW5kZXIKLVNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZAotMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotCi0gICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UKLSAgICBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlCi0gICAgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAotCi0gICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvCi0gICAgZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91ciBjb3N0IG9mIHBoeXNpY2FsbHkKLSAgICBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZQotICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxCi0gICAgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAotCi0gICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIgdG8KLSAgICBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkKLSAgICBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluCi0gICAgb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGgKLSAgICBTdWJzZWN0aW9uIGIgYWJvdmUuKQotCi1UaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZwotbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbAotdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UKLWRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24KLW9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlCi1kaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlcgotc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pCi1vZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKLWl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KLQotSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQotZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlCi1jb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoCi10aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KLQotNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4Y2VwdCBhcwotZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksCi1zdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUKLXlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvcgotcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvCi1sb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgotCi01LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LgotSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90Ci1hY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvcgotYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0bwotZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCi10aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KLQotNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSwKLXRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8KLWNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuCi1Zb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUKLXJpZ2h0cyBncmFudGVkIGhlcmVpbi4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieQotdGhpcmQgcGFydGllcyB0byB0aGlzIExpY2Vuc2UuCi0KLTcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKLWluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMKLWFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdAotY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUKLWNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkKLXNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50Ci1vYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLgotRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24KLW9mIHRoZSBQcm9ncmFtIGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoCi15b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwotcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KLQotSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQotcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5IGFuZAotdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgotCi1JdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3IKLW90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcwotc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUKLWRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkKLXBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZQotZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKLXN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8KLWRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdAotY2hvaWNlLgotCi1UaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYQotY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgotCi04LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbiBjZXJ0YWluCi1jb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsCi1jb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQKLWdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0Ci1kaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4KLXN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5Ci1vZiB0aGlzIExpY2Vuc2UuCi0KLTkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZQotR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbgotc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcwotb3IgY29uY2VybnMuCi0KLUVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KLXNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55IGxhdGVyCi12ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZgotdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heQotY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0KLTEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMKLXdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvcgotcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4KLU91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mCi1hbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2YKLXNvZnR3YXJlIGdlbmVyYWxseS4KLQotTk8gV0FSUkFOVFkKLQotMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUgotVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFCi1TVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUKLVBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsCi1JTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECi1GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQKLVBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwKLVlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgotCi0xMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwKLUFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUKLVBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZCi1HRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SCi1JTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBCi1CRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQotRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUgotT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgotCi1FTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQotSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCi0KLUlmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUKLXVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQgZnJlZSBzb2Z0d2FyZQotd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgotCi1UbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdCB0byBhdHRhY2gKLXRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBjb252ZXkgdGhlIGV4Y2x1c2lvbgotb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEKLXBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgotCi0gICAgT25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuCi0KLSAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiA8bmFtZSBvZiBhdXRob3I+Ci0KLSAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICAgIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotCi1BbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KLQotSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0Ci1zdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKLQotICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvciBHbm9tb3Zpc2lvbiBjb21lcwotICAgIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSAnc2hvdyB3Jy4gIFRoaXMgaXMgZnJlZQotICAgIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7Ci0gICAgdHlwZSAnc2hvdyBjJyBmb3IgZGV0YWlscy4KLQotVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyAnc2hvdyB3JyBhbmQgJ3Nob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCi1wYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5IGJlCi1jYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gJ3Nob3cgdycgYW5kICdzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKLW1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCi0KLVlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyIHNjaG9vbCwKLWlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuICBIZXJlCi1pcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgotCi0gICAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQotICAgICdHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgotCi0gICAgc2lnbmF0dXJlIG9mIFR5IENvb24sIDEgQXByaWwgMTk4OQotCi0gICAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKLQotVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCi1wcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQotY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCi1saWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi1MaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgotCi0KLSJDTEFTU1BBVEgiIEVYQ0VQVElPTiBUTyBUSEUgR1BMCi0KLUNlcnRhaW4gc291cmNlIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IE9yYWNsZSBBbWVyaWNhIGFuZC9vciBpdHMgYWZmaWxpYXRlcyBhcmUKLXN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjbGFyaWZpY2F0aW9uIGFuZCBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCBidXQKLW9ubHkgd2hlcmUgT3JhY2xlIGhhcyBleHByZXNzbHkgaW5jbHVkZWQgaW4gdGhlIHBhcnRpY3VsYXIgc291cmNlIGZpbGUncyBoZWFkZXIKLXRoZSB3b3JkcyAiT3JhY2xlIGRlc2lnbmF0ZXMgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgYXMgc3ViamVjdCB0byB0aGUgIkNsYXNzcGF0aCIKLWV4Y2VwdGlvbiBhcyBwcm92aWRlZCBieSBPcmFjbGUgaW4gdGhlIExJQ0VOU0UgZmlsZSB0aGF0IGFjY29tcGFuaWVkIHRoaXMgY29kZS4iCi0KLSAgICBMaW5raW5nIHRoaXMgbGlicmFyeSBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IHdpdGggb3RoZXIgbW9kdWxlcyBpcyBtYWtpbmcKLSAgICBhIGNvbWJpbmVkIHdvcmsgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LiAgVGh1cywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNvdmVyIHRoZSB3aG9sZSBjb21iaW5hdGlvbi4KLQotICAgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGlzIGxpYnJhcnkgZ2l2ZSB5b3UKLSAgICBwZXJtaXNzaW9uIHRvIGxpbmsgdGhpcyBsaWJyYXJ5IHdpdGggaW5kZXBlbmRlbnQgbW9kdWxlcyB0byBwcm9kdWNlIGFuCi0gICAgZXhlY3V0YWJsZSwgcmVnYXJkbGVzcyBvZiB0aGUgbGljZW5zZSB0ZXJtcyBvZiB0aGVzZSBpbmRlcGVuZGVudCBtb2R1bGVzLAotICAgIGFuZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB1bmRlciB0ZXJtcyBvZiB5b3VyCi0gICAgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQsIGZvciBlYWNoIGxpbmtlZCBpbmRlcGVuZGVudCBtb2R1bGUsCi0gICAgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlIG9mIHRoYXQgbW9kdWxlLiAgQW4gaW5kZXBlbmRlbnQKLSAgICBtb2R1bGUgaXMgYSBtb2R1bGUgd2hpY2ggaXMgbm90IGRlcml2ZWQgZnJvbSBvciBiYXNlZCBvbiB0aGlzIGxpYnJhcnkuICBJZgotICAgIHlvdSBtb2RpZnkgdGhpcyBsaWJyYXJ5LCB5b3UgbWF5IGV4dGVuZCB0aGlzIGV4Y2VwdGlvbiB0byB5b3VyIHZlcnNpb24gb2YKLSAgICB0aGUgbGlicmFyeSwgYnV0IHlvdSBhcmUgbm90IG9ibGlnYXRlZCB0byBkbyBzby4gIElmIHlvdSBkbyBub3Qgd2lzaCB0byBkbwotICAgIHNvLCBkZWxldGUgdGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciB2ZXJzaW9uLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vbGliNjQvbGliY2FwLnNvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVVubGVzcyBvdGhlcndpc2UgKmV4cGxpY2l0bHkqIHN0YXRlZCwgdGhlIGZvbGxvd2luZyB0ZXh0IGRlc2NyaWJlcyB0aGUKLWxpY2Vuc2VkIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIGNvbnRlbnRzIG9mIHRoaXMgbGliY2FwIHJlbGVhc2UKLW1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZDoKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBvZiBsaWJjYXAsIHdpdGgKLW9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZwotY29uZGl0aW9ucyBhcmUgbWV0OgotCi0xLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gYW55IGV4aXN0aW5nIGNvcHlyaWdodAotICAgbm90aWNlLCBhbmQgdGhpcyBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAotICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCi0KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhbGwgcHJpb3IgYW5kIGN1cnJlbnQKLSAgIGNvcHlyaWdodCBub3RpY2VzLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKLSAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0zLiBUaGUgbmFtZSBvZiBhbnkgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKLSAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgdGhlaXIgc3BlY2lmaWMgcHJpb3IKLSAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotQUxURVJOQVRJVkVMWSwgdGhpcyBwcm9kdWN0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCi1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodjIuMCAtIHNlZSBiZWxvdyksIGluIHdoaWNoIGNhc2UgdGhlCi1wcm92aXNpb25zIG9mIHRoZSBHTlUgR1BMIGFyZSByZXF1aXJlZCBJTlNURUFEIE9GIHRoZSBhYm92ZQotcmVzdHJpY3Rpb25zLiAgKFRoaXMgY2xhdXNlIGlzIG5lY2Vzc2FyeSBkdWUgdG8gYSBwb3RlbnRpYWwgY29uZmxpY3QKLWJldHdlZW4gdGhlIEdOVSBHUEwgYW5kIHRoZSByZXN0cmljdGlvbnMgY29udGFpbmVkIGluIGEgQlNELXN0eWxlCi1jb3B5cmlnaHQuKQotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLU1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi1JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi1PRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi1PTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKLVVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLURBTUFHRS4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRnVsbCB0ZXh0IG9mIGdwbC0yLjAudHh0OgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICAgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCi0gICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCi0KLSBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKLSBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCi0KLSAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgotZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLUxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKLXNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCi1HZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwotdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQotdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KLXlvdXIgcHJvZ3JhbXMsIHRvby4KLQotICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90Ci1wcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91Ci1oYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCi10aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKLWlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0Ci1pbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCi0KLSAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAotYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgotVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKLWRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KLQotICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCi1ncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKLXlvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCi1zb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCi1yaWdodHMuCi0KLSAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAotKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKLWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCi0KLSAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KLXRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCi1zb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKLXdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCi10aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAotYXV0aG9ycycgcmVwdXRhdGlvbnMuCi0KLSAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKLXBhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKLXByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKLXByb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQotcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KLQotICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAotbW9kaWZpY2F0aW9uIGZvbGxvdy4KLQotICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCi0KLSAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucwotYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKLXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKLXJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgotbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKLXRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCi1laXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgotbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgotdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCi0KLUFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Ci1jb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCi1ydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCi1pcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQotUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KLVdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgotCi0gIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncwotc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Ci1jb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCi1jb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCi1ub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7Ci1hbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCi1hbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgotCi1Zb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKLXlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCi0KLSAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgotb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAotZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCi1hYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgotCi0gICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KLQotICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgotICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQotICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCi0gICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgotCi0gICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQotICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKLSAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCi0gICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCi0gICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCi0gICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgotICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCi0gICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKLSAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCi0gICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCi0KLVRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKLWlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCi1hbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KLXRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKLXNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQotZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCi1vbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKLXRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCi1lbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCi0KLVRodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoteW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCi1leGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKLWNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCi0KLUluIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KLXdpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgotYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKLXRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCi11bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKLVNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLQotICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKLSAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKLSAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKLQotICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCi0gICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKLSAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCi0gICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQotICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCi0gICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAotCi0gICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKLSAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcwotICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91Ci0gICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAotICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQotCi1UaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCi1tYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQotY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKLWFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bwotY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQotc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCi1hbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQotZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKLW9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50Ci1pdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCi0KLUlmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKLWFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKLWFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcwotZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Ci1jb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgotCi0gIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAotb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCi12b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCi1Ib3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgotdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKLXBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KLQotICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKLXNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCi1kaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKLXByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKLW1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQotUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKLWFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKLXRoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgotCi0gIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKLVByb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCi1vcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCi10aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgotcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgotWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KLXRoaXMgTGljZW5zZS4KLQotICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50Ci1pbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAotY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgotb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAotZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKLWRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKLUxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKLW1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKLWxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKLWFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgotdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwotcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KLQotSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCi1hbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCi1hcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgotY2lyY3Vtc3RhbmNlcy4KLQotSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQotcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKLXN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKLWludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcwotaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCi1nZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCi10aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAotc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwotdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90Ci1pbXBvc2UgdGhhdCBjaG9pY2UuCi0KLVRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bwotYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KLWNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQotb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQotbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCi10aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCi1jb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKLXRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgotCi0gIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCi1vZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKLWJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwotYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCi0KLUVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KLXNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55Ci1sYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi1laXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgotdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbi4KLQotICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCi1wcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCi10byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcwotbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKLW9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKLW9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTk8gV0FSUkFOVFkKLQotICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKLUZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgotT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUwotUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKLU9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCi1UTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCi1QUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKLVJFUEFJUiBPUiBDT1JSRUNUSU9OLgotCi0gIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKLVdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKLVJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCi1JTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKLU9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKLVRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQotWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKLVBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQotUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgotCi0gICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQotICAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCi0KLSAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAotcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAotZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCi0KLSAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKLXRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKLWNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Ci10aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KLQotICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+Ci0gICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0KLUFsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgotCi1JZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCi13aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgotCi0gICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCi0gICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgotICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKLSAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCi0KLVRoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQotcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQotYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCi1tb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgotCi1Zb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgotc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKLW5lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKLQotICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCi0gIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgotCi0gIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQotICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQotCi1UaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KLXByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Ci1jb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKLWxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCi1QdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2xpYjY0L2xpYmV2ZW50LWhvc3Quc28KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTGliZXZlbnQgaXMgYXZhaWxhYmxlIGZvciB1c2UgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlLCBjb21tb25seSBrbm93bgotYXMgdGhlIDMtY2xhdXNlIChvciAibW9kaWZpZWQiKSBCU0QgbGljZW5zZToKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Db3B5cmlnaHQgKGMpIDIwMDAtMjAwNyBOaWVscyBQcm92b3MgPHByb3Zvc0BjaXRpLnVtaWNoLmVkdT4KLUNvcHlyaWdodCAoYykgMjAwNy0yMDEyIE5pZWxzIFByb3ZvcyBhbmQgTmljayBNYXRoZXdzb24KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFyZSBtZXQ6Ci0xLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0zLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi1USEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLVRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUG9ydGlvbnMgb2YgTGliZXZlbnQgYXJlIGJhc2VkIG9uIHdvcmtzIGJ5IG90aGVycywgYWxzbyBtYWRlIGF2YWlsYWJsZSBieQotdGhlbSB1bmRlciB0aGUgdGhyZWUtY2xhdXNlIEJTRCBsaWNlbnNlIGFib3ZlLiAgVGhlIGNvcHlyaWdodCBub3RpY2VzIGFyZQotYXZhaWxhYmxlIGluIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBmaWxlczsgdGhlIGxpY2Vuc2UgaXMgYXMgYWJvdmUuICBIZXJlJ3MKLWEgbGlzdDoKLQotbG9nLmM6Ci0gICBDb3B5cmlnaHQgKGMpIDIwMDAgRHVnIFNvbmcgPGR1Z3NvbmdAbW9ua2V5Lm9yZz4KLSAgIENvcHlyaWdodCAoYykgMTk5MyBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotCi1zdHJsY3B5LmM6Ci0gICBDb3B5cmlnaHQgKGMpIDE5OTggVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+Ci0KLXdpbjMyc2VsZWN0LmM6Ci0gICBDb3B5cmlnaHQgKGMpIDIwMDMgTWljaGFlbCBBLiBEYXZpcyA8bWlrZUBkYXRhbmVyZHMubmV0PgotCi1ldnBvcnQuYzoKLSAgIENvcHlyaWdodCAoYykgMjAwNyBTdW4gTWljcm9zeXN0ZW1zCi0KLWh0LWludGVybmFsLmg6Ci0gICBDb3B5cmlnaHQgKGMpIDIwMDIgQ2hyaXN0b3BoZXIgQ2xhcmsKLQotbWluaGVhcC1pbnRlcm5hbC5oOgotICAgQ29weXJpZ2h0IChjKSAyMDA2IE1heGltIFllZ29ydXNoa2luIDxtYXhpbS55ZWdvcnVzaGtpbkBnbWFpbC5jb20+Ci0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgYXJjNG1vZHVsZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZywgc29tZXRpbWVzIGNhbGxlZCB0aGUKLSJPcGVuQlNEIiBsaWNlbnNlOgotCi0gICBDb3B5cmlnaHQgKGMpIDE5OTYsIERhdmlkIE1hemllcmVzIDxkbUB1dW4ub3JnPgotICAgQ29weXJpZ2h0IChjKSAyMDA4LCBEYW1pZW4gTWlsbGVyIDxkam1Ab3BlbmJzZC5vcmc+Ci0KLSAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLQotICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vbGliL2xpYm9wZW5qZGtqdm10aS5zbwotL2xpYi9saWJvcGVuamRranZtdGlkLnNvCi0vbGliNjQvbGlib3Blbmpka2p2bXRpLnNvCi0vbGliNjQvbGlib3Blbmpka2p2bXRpZC5zbwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEZJTEUgSEVBREVSLgotCi1UaGlzIGZpbGUgaW1wbGVtZW50cyBpbnRlcmZhY2VzIGZyb20gdGhlIGZpbGUganZtdGkuaC4gVGhpcyBpbXBsZW1lbnRhdGlvbgotaXMgbGljZW5zZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgdGhlIGZpbGUganZtdGkuaC4gIFRoZQotY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uIGZvciB0aGUgZmlsZSBqdm10aS5oIGZvbGxvd3MuCi0KLUNvcHlyaWdodCAoYykgMTk5NywgMjAxMSwgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLURPIE5PVCBBTFRFUiBPUiBSRU1PVkUgQ09QWVJJR0hUIE5PVElDRVMgT1IgVEhJUyBGSUxFIEhFQURFUi4KLQotVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIG9ubHksIGFzCi1wdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIE9yYWNsZSBkZXNpZ25hdGVzIHRoaXMKLXBhcnRpY3VsYXIgZmlsZSBhcyBzdWJqZWN0IHRvIHRoZSAiQ2xhc3NwYXRoIiBleGNlcHRpb24gYXMgcHJvdmlkZWQKLWJ5IE9yYWNsZSBpbiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgYWNjb21wYW5pZWQgdGhpcyBjb2RlLgotCi1UaGlzIGNvZGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLUFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi12ZXJzaW9uIDIgZm9yIG1vcmUgZGV0YWlscyAoYSBjb3B5IGlzIGluY2x1ZGVkIGluIHRoZSBMSUNFTlNFIGZpbGUgdGhhdAotYWNjb21wYW5pZWQgdGhpcyBjb2RlKS4KLQotWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgotMiBhbG9uZyB3aXRoIHRoaXMgd29yazsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotCi1QbGVhc2UgY29udGFjdCBPcmFjbGUsIDUwMCBPcmFjbGUgUGFya3dheSwgUmVkd29vZCBTaG9yZXMsIENBIDk0MDY1IFVTQQotb3IgdmlzaXQgd3d3Lm9yYWNsZS5jb20gaWYgeW91IG5lZWQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvciBoYXZlIGFueQotcXVlc3Rpb25zLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vbGliNjQvbGliY2hyb21lLnNvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vZnJhbWV3b3JrL2NvbW1vbnMtY29tcHJlc3MtMS4wLmphcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BcGFjaGUgQ29tbW9ucyBDb21wcmVzcwotQ29weXJpZ2h0IDIwMDItMjAwOSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KLQotVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieQotVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4KLQotT3JpZ2luYWwgQlppcDIgY2xhc3NlcyBjb250cmlidXRlZCBieSBLZWlyb24gTGlkZGxlCi08a2Vpcm9uQGFmdGV4c3cuY29tPiwgQWZ0ZXggU29mdHdhcmUgdG8gdGhlIEFwYWNoZSBBbnQgcHJvamVjdAotCi1PcmlnaW5hbCBUYXIgY2xhc3NlcyBmcm9tIGNvbnRyaWJ1dG9ycyBvZiB0aGUgQXBhY2hlIEFudCBwcm9qZWN0Ci0KLU9yaWdpbmFsIFppcCBjbGFzc2VzIGZyb20gY29udHJpYnV0b3JzIG9mIHRoZSBBcGFjaGUgQW50IHByb2plY3QKLQotT3JpZ2luYWwgQ1BJTyBjbGFzc2VzIGNvbnRyaWJ1dGVkIGJ5IE1hcmt1cyBLdXNzIGFuZCB0aGUgalJQTSBwcm9qZWN0Ci0oanJwbS5zb3VyY2Vmb3JnZS5uZXQpCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90aWNlcyBmb3IgZmlsZShzKToKLS9iaW4vc2dkaXNrCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCi0JCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQotCi0gQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKLSBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KLQotCQkJICAgIFByZWFtYmxlCi0KLSAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgotZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLUxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKLXNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCi1HZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwotdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQotdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCi15b3VyIHByb2dyYW1zLCB0b28uCi0KLSAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAotcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQotaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgotdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0Ci1pZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAotaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgotCi0gIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKLWFueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KLVRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91Ci1kaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCi0KLSAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgotZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Ci15b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQotc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgotcmlnaHRzLgotCi0gIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKLSgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCi1kaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgotCi0gIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCi10aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQotc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCi13YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwotdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKLWF1dGhvcnMnIHJlcHV0YXRpb25zLgotCi0gIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCi1wYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCi1wcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCi1wcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKLXBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCi0KLSAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKLW1vZGlmaWNhdGlvbiBmb2xsb3cuCi0MCi0JCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCi0KLSAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucwotYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKLXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKLXJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgotbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKLXRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCi1laXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgotbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgotdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCi0KLUFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Ci1jb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCi1ydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCi1pcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQotUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KLVdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgotCi0gIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncwotc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Ci1jb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCi1jb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCi1ub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7Ci1hbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCi1hbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgotCi1Zb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKLXlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCi0KLSAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgotb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAotZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCi1hYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgotCi0gICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KLQotICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgotICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQotICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCi0gICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgotCi0gICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQotICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKLSAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCi0gICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCi0gICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCi0gICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgotICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCi0gICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKLSAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCi0gICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCi0MCi1UaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCi1pZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAotYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCi10aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCi1zZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKLWRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAotb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCi10aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQotZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgotCi1UaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKLXlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bwotZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCi1jb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgotCi1JbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCi13aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKLWEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCi10aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgotCi0gIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAotdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCi1TZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCi0gICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCi0gICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCi0KLSAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQotICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCi0gICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQotICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKLSAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQotICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKLQotICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCi0gICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKLSAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQotICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKLSAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKLQotVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgotbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKLWNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Ci1hc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KLWNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKLXNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQotYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKLWZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCi1vcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAotaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgotCi1JZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCi1hY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50Ci1hY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAotY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KLQwKLSAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi1leGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0Ci1vdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKLXZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KLUhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCi10aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAotcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgotCi0gIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAotc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKLWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQotcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQotbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCi1Qcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAotYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwotdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCi0KLSAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQotUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKLW9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KLXRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCi1yZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCi1Zb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwotdGhpcyBMaWNlbnNlLgotCi0gIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKLWluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCi1jb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCi1vdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90Ci1leGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAotZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwotTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQotbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAotbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQotYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCi10aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCi1yZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgotCi1JZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKLWFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KLWFwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCi1jaXJjdW1zdGFuY2VzLgotCi1JdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55Ci1wYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQotc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQotaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCi1pbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKLWdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKLXRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Ci1zeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCi10byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKLWltcG9zZSB0aGF0IGNob2ljZS4KLQotVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCi1iZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KLQwKLSAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KLWNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQotb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQotbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCi10aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCi1jb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKLXRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgotCi0gIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCi1vZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKLWJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwotYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCi0KLUVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KLXNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55Ci1sYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi1laXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgotdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbi4KLQotICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCi1wcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCi10byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcwotbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKLW9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKLW9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgotCi0JCQkgICAgTk8gV0FSUkFOVFkKLQotICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKLUZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgotT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUwotUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKLU9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCi1UTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCi1QUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKLVJFUEFJUiBPUiBDT1JSRUNUSU9OLgotCi0gIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKLVdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKLVJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCi1JTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKLU9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKLVRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQotWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKLVBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQotUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgotCi0JCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0MCi0JICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwotCi0gIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKLXBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKLWZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgotCi0gIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Ci10byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Ci1jb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAotdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCi0KLSAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgotICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+Ci0KLSAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLQotCi1BbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KLQotSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcwotd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKLQotICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKLSAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCi0gICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAotICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KLQotVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCi1wYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5Ci1iZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKLW1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCi0KLVlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCi1zY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgotbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgotCi0gIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KLSAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCi0KLSAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5Ci0gIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCi0KLVRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bwotcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKLWNvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQotbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCi1QdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2xpYi9saWJleHBhdC1ob3N0LnNvCi0vbGliL2xpYmV4cGF0LmEKLS9saWI2NC9saWJleHBhdC1ob3N0LnNvCi0vbGliNjQvbGliZXhwYXQuYQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db3B5cmlnaHQgKGMpIDE5OTgtMjAwMCBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQgYW5kIENsYXJrIENvb3BlcgotQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcgRXhwYXQgbWFpbnRhaW5lcnMKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCi1hIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLSJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLXdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLWRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi10aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCi1pbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi1FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLU1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KLUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCi1DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAotVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLVNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vYmluL3NxbGl0ZTMKLS9saWIvbGlic3FsaXRlLnNvCi0vbGliNjQvbGlic3FsaXRlLnNvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTIwMDEgU2VwdGVtYmVyIDE1Ci0KLVRoZSBhdXRob3IgZGlzY2xhaW1zIGNvcHlyaWdodCB0byB0aGlzIHNvdXJjZSBjb2RlLiAgSW4gcGxhY2Ugb2YKLWEgbGVnYWwgbm90aWNlLCBoZXJlIGlzIGEgYmxlc3Npbmc6Ci0KLSAgIE1heSB5b3UgZG8gZ29vZCBhbmQgbm90IGV2aWwuCi0gICBNYXkgeW91IGZpbmQgZm9yZ2l2ZW5lc3MgZm9yIHlvdXJzZWxmIGFuZCBmb3JnaXZlIG90aGVycy4KLSAgIE1heSB5b3Ugc2hhcmUgZnJlZWx5LCBuZXZlciB0YWtpbmcgbW9yZSB0aGFuIHlvdSBnaXZlLgotCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90aWNlcyBmb3IgZmlsZShzKToKLS9mcmFtZXdvcmsvY29uc2NyeXB0LmphcgotL2xpYi9saWJjb25zY3J5cHRfb3Blbmpka19qbmkuc28KLS9saWIvbGliamF2YWNyeXB0by5zbwotL2xpYjY0L2xpYmNvbnNjcnlwdF9vcGVuamRrX2puaS5zbwotL2xpYjY0L2xpYmphdmFjcnlwdG8uc28KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29weXJpZ2h0IDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi1MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLXlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLVlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi1TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi1saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoaXMgcHJvZHVjdCBjb250YWlucyBhIG1vZGlmaWVkIHBvcnRpb24gb2YgYE5ldHR5YCwgYSBjb25maWd1cmFibGUgbmV0d29yawotc3RhY2sgaW4gSmF2YSwgd2hpY2ggY2FuIGJlIG9idGFpbmVkIGF0OgotCi0gICogTElDRU5TRToKLSAgICAqIGxpY2Vuc2VzL0xJQ0VOU0UubmV0dHkudHh0IChBcGFjaGUgTGljZW5zZSAyLjApCi0gICogSE9NRVBBR0U6Ci0gICAgKiBodHRwOi8vbmV0dHkuaW8vCi0KLVRoaXMgcHJvZHVjdCBjb250YWlucyBhIG1vZGlmaWVkIHBvcnRpb24gb2YgYEFwYWNoZSBIYXJtb255YCwgbW9kdWxhciBKYXZhIHJ1bnRpbWUsCi13aGljaCBjYW4gYmUgb2J0YWluZWQgYXQ6Ci0KLSAgKiBMSUNFTlNFOgotICAgICogbGljZW5zZXMvTElDRU5TRS5oYXJtb255LnR4dCAoQXBhY2hlIExpY2Vuc2UgMi4wKQotICAqIEhPTUVQQUdFOgotICAgICogaHR0cHM6Ly9oYXJtb255LmFwYWNoZS5vcmcvCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90aWNlcyBmb3IgZmlsZShzKToKLS9saWI2NC9saWJwbGF0Zm9ybXByb3Rvcy5zbwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgID09ICBOT1RJQ0UgZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzZWN0aW9uIDQgZCBvZiAgICAgICAgICAgICAgICAgICAgPT0KICAgID09ICB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0KQEAgLTM5NjEsMTcgKzM1OTksNiBAQAogICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgPT0gIE5PVElDRSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlY3Rpb24gNCBkIG9mICAgICAgICAgICAgICAgICAgICA9PQogICAgPT0gIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PQotICAgPT0gIGluIHRoaXMgY2FzZSBmb3IgdGhlIG1EbnNSZXNwb25kZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICA9PQotICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1tRG5zUmVzcG9uZGVyIFRYVFJlY29yZAotVGhpcyBmaWxlIGlzIENvcHlyaWdodCAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBidXQgcmVsZWFzZWQgdW5kZXIKLXRoZSBBcGFjaGUyIExpY2Vuc2UuCi0KLQotICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgPT0gIE5PVElDRSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlY3Rpb24gNCBkIG9mICAgICAgICAgICAgICAgICAgICA9PQotICAgPT0gIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PQogICAgPT0gIGluIHRoaXMgY2FzZSBmb3IgdGhlIFRhZ1NvdXAgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PQogICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC00MjM5LDYxMyArMzg2NiwzNyBAQAogb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhlc2UgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4KIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90aWNlcyBmb3IgZmlsZShzKToKLS9iaW4vYWRiCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAgIENvcHlyaWdodCAyMDA2LCBCcmlhbiBTd2V0bGFuZCA8c3dldGxhbmRAZnJvdHoubmV0PgotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLQotICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKLSAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KLQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCi0KLSAgIDEuIERlZmluaXRpb25zLgotCi0gICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAotICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCi0KLSAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5Ci0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKLSAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KLSAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCi0gICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKLSAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCi0gICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKLSAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCi0KLSAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCi0KLSAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAotICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgotICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLQotICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKLSAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKLSAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKLSAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KLQotICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKLSAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKLSAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawotICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KLQotICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAotICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQotICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucwotICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKLSAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgotICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAotICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KLQotICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKLSAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQotICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgotICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCi0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKLSAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKLSAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCi0gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAotICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKLSAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAotICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKLSAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgotCi0gICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCi0gICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KLQotICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCi0gICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKLSAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCi0KLSAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAotICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCi0gICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQotICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKLSAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKLSAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91Ci0gICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQotICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawotICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKLSAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKLSAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQotICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgotCi0gICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0Ci0gICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQotICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLSAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCi0gICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKLQotICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAotCi0gICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKLSAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKLSAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCi0gICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAotCi0gICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKLSAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0Ci0gICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCi0gICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90Ci0gICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCi0gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKLSAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCi0gICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAotICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwotICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKLSAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgotICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCi0gICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCi0gICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCi0gICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKLSAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKLSAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAotICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCi0gICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgotCi0gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCi0gICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKLSAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KLSAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKLSAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCi0gICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCi0KLSAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKLSAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKLSAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQotICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCi0KLSAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgotICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAotICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCi0gICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCi0gICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKLSAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQotICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgotCi0gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKLSAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAotICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKLSAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCi0gICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCi0gICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKLSAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKLSAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKLSAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCi0gICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCi0gICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCi0KLSAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKLSAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCi0gICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAotICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKLSAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5Ci0gICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgotICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAotICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5Ci0gICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCi0gICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KLQotICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbGlid2lucHRocmVhZCBsaWNlbnNlOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db3B5cmlnaHQgKGMpIDIwMTEgbWluZ3ctdzY0IHByb2plY3QKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLWNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi10byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi10aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLWFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLWFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi1GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi1GUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi1ERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0KLQotLyoKLSAqIFBhcnRzIG9mIHRoaXMgbGlicmFyeSBhcmUgZGVyaXZlZCBieToKLSAqCi0gKiBQb3NpeCBUaHJlYWRzIGxpYnJhcnkgZm9yIE1pY3Jvc29mdCBXaW5kb3dzCi0gKgotICogVXNlIGF0IG93biByaXNrLCB0aGVyZSBpcyBubyBpbXBsaWVkIHdhcnJhbnR5IHRvIHRoaXMgY29kZS4KLSAqIEl0IHVzZXMgdW5kb2N1bWVudGVkIGZlYXR1cmVzIG9mIE1pY3Jvc29mdCBXaW5kb3dzIHRoYXQgY2FuIGNoYW5nZQotICogYXQgYW55IHRpbWUgaW4gdGhlIGZ1dHVyZS4KLSAqCi0gKiAoQykgMjAxMCBMb2NrbGVzcyBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCi0gKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTG9ja2xlc3MgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlCi0gKiAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFOCi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKLSAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90aWNlcyBmb3IgZmlsZShzKToKLS9iaW4vbGx2bS1ycy1jYwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi09PT09PT09PT09PT09PT09PT09PT09PT09Ci1OT1RJQ0UgZmlsZSBmb3Igc2xhbmcuZ2l0Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgIENvcHlyaWdodCAoYykgMjAwNS0yMDExLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotCi0gICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KLQotICAgMS4gRGVmaW5pdGlvbnMuCi0KLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KLQotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgotICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQotICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KLQotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCi0gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAotICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAotICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgotCi0gICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCi0gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwotICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCi0gICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAotICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQotICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0Ci0gICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCi0KLSAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KLQotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0gICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCi0KLSAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwotICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKLSAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQotCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5PVElDRSBmaWxlIGZvciBleHRlcm5hbC9jbGFuZyAoY2xhbmcuZ2l0KS4KLU5vdGU6IGxpYmNsYW5nKi5hIGFyZSBzdGF0aWNhbGx5IGxpbmtlZC4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1MTFZNIFJlbGVhc2UgTGljZW5zZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Vbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKLU9wZW4gU291cmNlIExpY2Vuc2UKLQotQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduLgorQ29weXJpZ2h0IDIwMDgsIEdvb2dsZSBJbmMuCiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCi1EZXZlbG9wZWQgYnk6CitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKIAotICAgIExMVk0gVGVhbQorICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKK2luIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKK2NvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCi0gICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCi0KLSAgICBodHRwOi8vbGx2bS5vcmcKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAotdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLW9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCi0gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0Ci0gICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KLSAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCi0gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUwotRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUNPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLU9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKLVNPRlRXQVJFLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1UaGUgTExWTSBzb2Z0d2FyZSBjb250YWlucyBjb2RlIHdyaXR0ZW4gYnkgdGhpcmQgcGFydGllcy4gIFN1Y2ggc29mdHdhcmUgd2lsbAotaGF2ZSBpdHMgb3duIGluZGl2aWR1YWwgTElDRU5TRS5UWFQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGFwcGVhcnMuCi1UaGlzIGZpbGUgd2lsbCBkZXNjcmliZSB0aGUgY29weXJpZ2h0cywgbGljZW5zZSwgYW5kIHJlc3RyaWN0aW9ucyB3aGljaCBhcHBseQotdG8gdGhhdCBjb2RlLgotCi1UaGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpbiB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZSBMaWNlbnNlCi1hcHBsaWVzIHRvIGFsbCBjb2RlIGluIHRoZSBMTFZNIERpc3RyaWJ1dGlvbiwgYW5kIG5vdGhpbmcgaW4gYW55IG9mIHRoZQotb3RoZXIgbGljZW5zZXMgZ2l2ZXMgcGVybWlzc2lvbiB0byB1c2UgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0gb3IgdGhlCi1Vbml2ZXJzaXR5IG9mIElsbGlub2lzIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotU29mdHdhcmUuCi0KLVRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlIGhhdmUgYWRkaXRpb25hbCBvciBhbHRlcm5hdGUgY29weXJpZ2h0cywKLWxpY2Vuc2VzLCBhbmQvb3IgcmVzdHJpY3Rpb25zOgotCi1Qcm9ncmFtICAgICAgICAgICAgIERpcmVjdG9yeQotLS0tLS0tLSAgICAgICAgICAgICAtLS0tLS0tLS0KLTxub25lIHlldD4KLQotCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1OT1RJQ0UgZmlsZSBmb3IgZXh0ZXJuYWwvbGx2bSAobGx2bS5naXQpLgotTm90ZTogbGliTExWTSouYSBhcmUgc3RhdGljYWxseSBsaW5rZWQuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUxMVk0gUmVsZWFzZSBMaWNlbnNlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVVuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQQotT3BlbiBTb3VyY2UgTGljZW5zZQotCi1Db3B5cmlnaHQgKGMpIDIwMDMtMjAxMSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1EZXZlbG9wZWQgYnk6Ci0KLSAgICBMTFZNIFRlYW0KLQotICAgIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbgotCi0gICAgaHR0cDovL2xsdm0ub3JnCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKLXRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIHdpdGgKLXRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KLXVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCi1vZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KLXNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMuCi0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIGluIHRoZQotICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgICogTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSwgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdAotICAgICAgVXJiYW5hLUNoYW1wYWlnbiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvCi0gICAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYwotICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKLUZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi1DT05UUklCVVRPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi1PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEggVEhFCi1TT0ZUV0FSRS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Db3B5cmlnaHRzIGFuZCBMaWNlbnNlcyBmb3IgVGhpcmQgUGFydHkgU29mdHdhcmUgRGlzdHJpYnV0ZWQgd2l0aCBMTFZNOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1UaGUgTExWTSBzb2Z0d2FyZSBjb250YWlucyBjb2RlIHdyaXR0ZW4gYnkgdGhpcmQgcGFydGllcy4gIFN1Y2ggc29mdHdhcmUgd2lsbAotaGF2ZSBpdHMgb3duIGluZGl2aWR1YWwgTElDRU5TRS5UWFQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGFwcGVhcnMuCi1UaGlzIGZpbGUgd2lsbCBkZXNjcmliZSB0aGUgY29weXJpZ2h0cywgbGljZW5zZSwgYW5kIHJlc3RyaWN0aW9ucyB3aGljaCBhcHBseQotdG8gdGhhdCBjb2RlLgotCi1UaGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpbiB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZSBMaWNlbnNlCi1hcHBsaWVzIHRvIGFsbCBjb2RlIGluIHRoZSBMTFZNIERpc3RyaWJ1dGlvbiwgYW5kIG5vdGhpbmcgaW4gYW55IG9mIHRoZQotb3RoZXIgbGljZW5zZXMgZ2l2ZXMgcGVybWlzc2lvbiB0byB1c2UgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0gb3IgdGhlCi1Vbml2ZXJzaXR5IG9mIElsbGlub2lzIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotU29mdHdhcmUuCi0KLVRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlIGhhdmUgYWRkaXRpb25hbCBvciBhbHRlcm5hdGUgY29weXJpZ2h0cywKLWxpY2Vuc2VzLCBhbmQvb3IgcmVzdHJpY3Rpb25zOgotCi1Qcm9ncmFtICAgICAgICAgICAgIERpcmVjdG9yeQotLS0tLS0tLSAgICAgICAgICAgICAtLS0tLS0tLS0KLUF1dG9jb25mICAgICAgICAgICAgbGx2bS9hdXRvY29uZgotICAgICAgICAgICAgICAgICAgICBsbHZtL3Byb2plY3RzL01vZHVsZU1ha2VyL2F1dG9jb25mCi0gICAgICAgICAgICAgICAgICAgIGxsdm0vcHJvamVjdHMvc2FtcGxlL2F1dG9jb25mCi1DZWxsU1BVIGJhY2tlbmQgICAgIGxsdm0vbGliL1RhcmdldC9DZWxsU1BVL1JFQURNRS50eHQKLUdvb2dsZSBUZXN0ICAgICAgICAgbGx2bS91dGlscy91bml0dGVzdC9nb29nbGV0ZXN0Ci1PcGVuQlNEIHJlZ2V4ICAgICAgIGxsdm0vbGliL1N1cHBvcnQve3JlZyosIENPUFlSSUdIVC5yZWdleH0KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2xpYi9saWJjKysuc28KLS9saWIvbGliYysrX3N0YXRpYy5hCi0vbGliNjQvbGliYysrLnNvCi0vbGliNjQvbGliYysrX3N0YXRpYy5hCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogbGliYysrIExpY2Vuc2UKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDkyMywxMDUgKzM5NzQsNjUgQEAKIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KIFRIRSBTT0ZUV0FSRS4KIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2xpYi9saWJqcGVnLnNvCi0vbGliNjQvbGlianBlZy5zbwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1saWJqcGVnLXR1cmJvIExpY2Vuc2VzCi09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorbGliYysrYWJpIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1saWJqcGVnLXR1cmJvIGlzIGNvdmVyZWQgYnkgdGhyZWUgY29tcGF0aWJsZSBCU0Qtc3R5bGUgb3BlbiBzb3VyY2UgbGljZW5zZXM6CitUaGUgbGliYysrYWJpIGxpYnJhcnkgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBib3RoIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzCisiQlNELUxpa2UiIGxpY2Vuc2UgYW5kIHRoZSBNSVQgbGljZW5zZS4gIEFzIGEgdXNlciBvZiB0aGlzIGNvZGUgeW91IG1heSBjaG9vc2UKK3RvIHVzZSBpdCB1bmRlciBlaXRoZXIgbGljZW5zZS4gIEFzIGEgY29udHJpYnV0b3IsIHlvdSBhZ3JlZSB0byBhbGxvdyB5b3VyIGNvZGUKK3RvIGJlIHVzZWQgdW5kZXIgYm90aC4KIAotLSBUaGUgSUpHIChJbmRlcGVuZGVudCBKUEVHIEdyb3VwKSBMaWNlbnNlLCB3aGljaCBpcyBsaXN0ZWQgaW4KLSAgW1JFQURNRS5pamddKFJFQURNRS5pamcpCitGdWxsIHRleHQgb2YgdGhlIHJlbGV2YW50IGxpY2Vuc2VzIGlzIGluY2x1ZGVkIGJlbG93LgogCi0gIFRoaXMgbGljZW5zZSBhcHBsaWVzIHRvIHRoZSBsaWJqcGVnIEFQSSBsaWJyYXJ5IGFuZCBhc3NvY2lhdGVkIHByb2dyYW1zCi0gIChhbnkgY29kZSBpbmhlcml0ZWQgZnJvbSBsaWJqcGVnLCBhbmQgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhhdCBjb2RlLikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0tIFRoZSBNb2RpZmllZCAoMy1jbGF1c2UpIEJTRCBMaWNlbnNlLCB3aGljaCBpcyBsaXN0ZWQgaW4KLSAgW3R1cmJvanBlZy5jXSh0dXJib2pwZWcuYykKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQQorT3BlbiBTb3VyY2UgTGljZW5zZQogCi0gIFRoaXMgbGljZW5zZSBjb3ZlcnMgdGhlIFR1cmJvSlBFRyBBUEkgbGlicmFyeSBhbmQgYXNzb2NpYXRlZCBwcm9ncmFtcy4KK0NvcHlyaWdodCAoYykgMjAwOS0yMDE4IGJ5IHRoZSBjb250cmlidXRvcnMgbGlzdGVkIGluIENSRURJVFMuVFhUCiAKLS0gVGhlIHpsaWIgTGljZW5zZSwgd2hpY2ggaXMgbGlzdGVkIGluIFtzaW1kL2pzaW1kZXh0LmluY10oc2ltZC9qc2ltZGV4dC5pbmMpCitBbGwgcmlnaHRzIHJlc2VydmVkLgogCi0gIFRoaXMgbGljZW5zZSBpcyBhIHN1YnNldCBvZiB0aGUgb3RoZXIgdHdvLCBhbmQgaXQgY292ZXJzIHRoZSBsaWJqcGVnLXR1cmJvCi0gIFNJTUQgZXh0ZW5zaW9ucy4KK0RldmVsb3BlZCBieToKIAorICAgIExMVk0gVGVhbQogCi1Db21wbHlpbmcgd2l0aCB0aGUgbGlianBlZy10dXJibyBMaWNlbnNlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KIAotVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgcm9sbC11cCBvZiB0aGUgbGlianBlZy10dXJibyBsaWNlbnNpbmcgdGVybXMsIHRvIHRoZQotYmVzdCBvZiBvdXIgdW5kZXJzdGFuZGluZy4KKyAgICBodHRwOi8vbGx2bS5vcmcKIAotMS4gIElmIHlvdSBhcmUgZGlzdHJpYnV0aW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlianBlZy10dXJibyBzb3VyY2UsCi0gICAgdGhlbjoKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIHdpdGgKK3RoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKIAotICAgIDEuICBZb3UgY2Fubm90IGFsdGVyIG9yIHJlbW92ZSBhbnkgZXhpc3RpbmcgY29weXJpZ2h0IG9yIGxpY2Vuc2Ugbm90aWNlcwotICAgICAgICBmcm9tIHRoZSBzb3VyY2UuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KIAotICAgICAgICAqKk9yaWdpbioqCi0gICAgICAgIC0gQ2xhdXNlIDEgb2YgdGhlIElKRyBMaWNlbnNlCi0gICAgICAgIC0gQ2xhdXNlIDEgb2YgdGhlIE1vZGlmaWVkIEJTRCBMaWNlbnNlCi0gICAgICAgIC0gQ2xhdXNlcyAxIGFuZCAzIG9mIHRoZSB6bGliIExpY2Vuc2UKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIAotICAgIDIuICBZb3UgbXVzdCBhZGQgeW91ciBvd24gY29weXJpZ2h0IG5vdGljZSB0byB0aGUgaGVhZGVyIG9mIGVhY2ggc291cmNlCi0gICAgICAgIGZpbGUgeW91IG1vZGlmaWVkLCBzbyBvdGhlcnMgY2FuIHRlbGwgdGhhdCB5b3UgbW9kaWZpZWQgdGhhdCBmaWxlIChpZgotICAgICAgICB0aGVyZSBpcyBub3QgYW4gZXhpc3RpbmcgY29weXJpZ2h0IGhlYWRlciBpbiB0aGF0IGZpbGUsIHRoZW4geW91IGNhbgotICAgICAgICBzaW1wbHkgYWRkIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQgdGhlIGZpbGUuKQorICAgICogTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSwgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdAorICAgICAgVXJiYW5hLUNoYW1wYWlnbiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvCisgICAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCi0gICAgICAgICoqT3JpZ2luKioKLSAgICAgICAgLSBDbGF1c2UgMSBvZiB0aGUgSUpHIExpY2Vuc2UKLSAgICAgICAgLSBDbGF1c2UgMiBvZiB0aGUgemxpYiBMaWNlbnNlCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT05UUklCVVRPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEggVEhFCitTT0ZUV0FSRS4KIAotICAgIDMuICBZb3UgbXVzdCBpbmNsdWRlIHRoZSBJSkcgUkVBRE1FIGZpbGUsIGFuZCB5b3UgbXVzdCBub3QgYWx0ZXIgYW55IG9mIHRoZQotICAgICAgICBjb3B5cmlnaHQgb3IgbGljZW5zZSB0ZXh0IGluIHRoYXQgZmlsZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gICAgICAgICoqT3JpZ2luKioKLSAgICAgICAgLSBDbGF1c2UgMSBvZiB0aGUgSUpHIExpY2Vuc2UKLQotMi4gIElmIHlvdSBhcmUgZGlzdHJpYnV0aW5nIG9ubHkgbGlianBlZy10dXJibyBiaW5hcmllcyB3aXRob3V0IHRoZSBzb3VyY2UsIG9yCi0gICAgaWYgeW91IGFyZSBkaXN0cmlidXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCBzdGF0aWNhbGx5IGxpbmtzIHdpdGgKLSAgICBsaWJqcGVnLXR1cmJvLCB0aGVuOgotCi0gICAgMS4gIFlvdXIgcHJvZHVjdCBkb2N1bWVudGF0aW9uIG11c3QgaW5jbHVkZSBhIG1lc3NhZ2Ugc3RhdGluZzoKLQotICAgICAgICBUaGlzIHNvZnR3YXJlIGlzIGJhc2VkIGluIHBhcnQgb24gdGhlIHdvcmsgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcKLSAgICAgICAgR3JvdXAuCi0KLSAgICAgICAgKipPcmlnaW4qKgotICAgICAgICAtIENsYXVzZSAyIG9mIHRoZSBJSkcgbGljZW5zZQotCi0gICAgMi4gIElmIHlvdXIgYmluYXJ5IGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBvciB1c2VzIHRoZSBUdXJib0pQRUcgQVBJLCB0aGVuCi0gICAgICAgIHlvdXIgcHJvZHVjdCBkb2N1bWVudGF0aW9uIG11c3QgaW5jbHVkZSB0aGUgdGV4dCBvZiB0aGUgTW9kaWZpZWQgQlNECi0gICAgICAgIExpY2Vuc2UuCi0KLSAgICAgICAgKipPcmlnaW4qKgotICAgICAgICAtIENsYXVzZSAyIG9mIHRoZSBNb2RpZmllZCBCU0QgTGljZW5zZQotCi0zLiAgWW91IGNhbm5vdCB1c2UgdGhlIG5hbWUgb2YgdGhlIElKRyBvciBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IG9yIHRoZQotICAgIGNvbnRyaWJ1dG9ycyB0aGVyZW9mIGluIGFkdmVydGlzaW5nLCBwdWJsaWNpdHksIGV0Yy4KLQotICAgICoqT3JpZ2luKioKLSAgICAtIElKRyBMaWNlbnNlCi0gICAgLSBDbGF1c2UgMyBvZiB0aGUgTW9kaWZpZWQgQlNEIExpY2Vuc2UKLQotNC4gIFRoZSBJSkcgYW5kIFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgZG8gbm90IHdhcnJhbnQgbGlianBlZy10dXJibyB0byBiZQotICAgIGZyZWUgb2YgZGVmZWN0cywgbm9yIGRvIHdlIGFjY2VwdCBhbnkgbGlhYmlsaXR5IGZvciB1bmRlc2lyYWJsZQotICAgIGNvbnNlcXVlbmNlcyByZXN1bHRpbmcgZnJvbSB5b3VyIHVzZSBvZiB0aGUgc29mdHdhcmUuCi0KLSAgICAqKk9yaWdpbioqCi0gICAgLSBJSkcgTGljZW5zZQotICAgIC0gTW9kaWZpZWQgQlNEIExpY2Vuc2UKLSAgICAtIHpsaWIgTGljZW5zZQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vbGliNjQvbGliYnJvdGxpLnNvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMy0yMDE2IGJ5IHRoZSBCcm90bGkgQXV0aG9ycy4KK0NvcHlyaWdodCAoYykgMjAwOS0yMDE0IGJ5IHRoZSBjb250cmlidXRvcnMgbGlzdGVkIGluIENSRURJVFMuVFhUCiAKIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCkBAIC01MDM1LDkyMiArNDA0NiwyMzIgQEAKIAogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogVEhFIFNPRlRXQVJFLgogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vYmluL2FhcHQKLS9iaW4vYWlkbAotL2Jpbi9kZXhkdW1wCi0vYmluL2R4Ci0vYmluL2hvc3RfaW5pdF92ZXJpZmllcgotL2Jpbi9zaG93bWFwCi0vZnJhbWV3b3JrL2R4LmphcgotL2xpYi9saWJhYXB0LmEKLS9saWIvbGliYW5kcm9pZGZ3LmEKLS9saWIvbGliY3V0aWxzLmEKLS9saWIvbGliY3V0aWxzLnNvCi0vbGliL2xpYm5hdGl2ZWhlbHBlci5zbwotL2xpYi9saWJ1dGlscy5hCi0vbGliNjQvbGliYWFwdC5hCi0vbGliNjQvbGliYW5kcm9pZGZ3LmEKLS9saWI2NC9saWJjdXRpbHMuYQotL2xpYjY0L2xpYmN1dGlscy5zbwotL2xpYjY0L2xpYm5hdGl2ZWhlbHBlci5zbwotL2xpYjY0L2xpYnV0aWxzLmEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2xpYmMrK2FiaSBMaWNlbnNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKK1RoZSBsaWJjKythYmkgbGlicmFyeSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIGJvdGggdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMKKyJCU0QtTGlrZSIgbGljZW5zZSBhbmQgdGhlIE1JVCBsaWNlbnNlLiAgQXMgYSB1c2VyIG9mIHRoaXMgY29kZSB5b3UgbWF5IGNob29zZQordG8gdXNlIGl0IHVuZGVyIGVpdGhlciBsaWNlbnNlLiAgQXMgYSBjb250cmlidXRvciwgeW91IGFncmVlIHRvIGFsbG93IHlvdXIgY29kZQordG8gYmUgdXNlZCB1bmRlciBib3RoLgogCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KK0Z1bGwgdGV4dCBvZiB0aGUgcmVsZXZhbnQgbGljZW5zZXMgaXMgaW5jbHVkZWQgYmVsb3cuCiAKLSAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQQorT3BlbiBTb3VyY2UgTGljZW5zZQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KLQotICAgMS4gRGVmaW5pdGlvbnMuCi0KLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KLQotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgotICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQotICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KLQotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCi0gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAotICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAotICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgotCi0gICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCi0gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwotICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCi0gICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAotICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQotICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0Ci0gICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCi0KLSAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KLQotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0gICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCi0KLSAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwotICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKLSAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vZnJhbWV3b3JrL2pkaWZmLmphcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCSAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCi0JCSAgICAgICBWZXJzaW9uIDIuMSwgRmVicnVhcnkgMTk5OQotCi0gQ29weXJpZ2h0IChDKSAxOTkxLCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCi0gb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCi0KLVtUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBMZXNzZXIgR1BMLiAgSXQgYWxzbyBjb3VudHMKLSBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQotIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQotCi0JCQkgICAgUHJlYW1ibGUKLQotICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCi1mcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQotZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgotCi0gIFRoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKLXNwZWNpYWxseSBkZXNpZ25hdGVkIHNvZnR3YXJlIHBhY2thZ2VzLS10eXBpY2FsbHkgbGlicmFyaWVzLS1vZiB0aGUKLUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQotY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlcgotdGhpcyBsaWNlbnNlIG9yIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIHRoZSBiZXR0ZXIKLXN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgotCi0gIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwKLW5vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKLXlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKLWZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpOyB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQKLWl0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgotaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCi10aGVzZSB0aGluZ3MuCi0KLSAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAotZGlzdHJpYnV0b3JzIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGVzZQotcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCi15b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCi0KLSAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKLW9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKLXlvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKLWNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKLWNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQotd2l0aCB0aGUgbGlicmFyeSBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKLWl0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgotCi0gIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUKLWxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCi1wZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KLQotICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKLXRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKLW1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB0aGUgcmVjaXBpZW50cyBzaG91bGQga25vdwotdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCi1hdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKLWludHJvZHVjZWQgYnkgb3RoZXJzLgotDAotICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgotYW55IGZyZWUgcHJvZ3JhbS4gIFdlIHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgYSBjb21wYW55IGNhbm5vdAotZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCi1yZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAotYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZQotY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCi0KLSAgTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUKLW9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgotR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKLWlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgV2UgdXNlCi10aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCi1saWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KLQotICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZwotYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCi1jb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuICBUaGUgb3JkaW5hcnkKLUdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCi1lbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbAotUHVibGljIExpY2Vuc2UgcGVybWl0cyBtb3JlIGxheCBjcml0ZXJpYSBmb3IgbGlua2luZyBvdGhlciBjb2RlIHdpdGgKLXRoZSBsaWJyYXJ5LgotCi0gIFdlIGNhbGwgdGhpcyBsaWNlbnNlIHRoZSAiTGVzc2VyIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJlY2F1c2UgaXQKLWRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsCi1QdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKLW9mIGFuIGFkdmFudGFnZSBvdmVyIGNvbXBldGluZyBub24tZnJlZSBwcm9ncmFtcy4gIFRoZXNlIGRpc2FkdmFudGFnZXMKLWFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQotbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgotc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgotCi0gIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCi1lbmNvdXJhZ2UgdGhlIHdpZGVzdCBwb3NzaWJsZSB1c2Ugb2YgYSBjZXJ0YWluIGxpYnJhcnksIHNvIHRoYXQgaXQgYmVjb21lcwotYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQotYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQotbGlicmFyeSBkb2VzIHRoZSBzYW1lIGpvYiBhcyB3aWRlbHkgdXNlZCBub24tZnJlZSBsaWJyYXJpZXMuICBJbiB0aGlzCi1jYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKLXNvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0KLSAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCi1wcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKLWZyZWUgc29mdHdhcmUuICBGb3IgZXhhbXBsZSwgcGVybWlzc2lvbiB0byB1c2UgdGhlIEdOVSBDIExpYnJhcnkgaW4KLW5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQotb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcKLXN5c3RlbS4KLQotICBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZQotdXNlcnMnIGZyZWVkb20sIGl0IGRvZXMgZW5zdXJlIHRoYXQgdGhlIHVzZXIgb2YgYSBwcm9ncmFtIHRoYXQgaXMKLWxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgotdGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KLQotICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAotbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCi0id29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gIFRoZQotZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdAotYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCi0MCi0JCSAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KLQotICAwLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgb3Igb3RoZXIKLXByb2dyYW0gd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yCi1vdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCi10aGlzIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuCi1FYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KLQotICBBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhCi1wcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMKLSh3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCi0KLSAgVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsKLXdoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKLUxpYnJhcnkiIG1lYW5zIGVpdGhlciB0aGUgTGlicmFyeSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyCi1jb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYQotcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZAotc3RyYWlnaHRmb3J3YXJkbHkgaW50byBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcwotaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKLQotICAiU291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgotbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucwotYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKLWludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbgotYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQotICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAotY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgotcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQotc3VjaCBhIHByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZAotb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvcgotd3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcwotYW5kIHdoYXQgdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IGRvZXMuCi0gIAotICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MKLWNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0Ci15b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgotYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QKLWFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55Ci13YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQotTGlicmFyeS4KLQotICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAotYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYQotZmVlLgotDAotICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBMaWJyYXJ5IG9yIGFueSBwb3J0aW9uCi1vZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCi1kaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKLWFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6Ci0KLSAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCi0KLSAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKLSAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgotCi0gICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCi0gICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKLSAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCi0gICAgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eQotICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAotICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgotICAgIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mCi0gICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgotCi0gICAgKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMKLSAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCi0gICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKLSAgICBhcHBsaWNhdGlvbi1zdXBwbGllZCBmdW5jdGlvbiBvciB0YWJsZSB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdAotICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCi0gICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKLQotVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgotaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKLWFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgotdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQotc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91Ci1kaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKLW9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgotdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKLWVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZQotaXQuCi0KLVRodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoteW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCi1leGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKLWNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCi0KLUluIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKLXdpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZgotYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKLXRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKLUxpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KLXRoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28KLXRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKLWluc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKLW9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkKLXRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KLXRoZXNlIG5vdGljZXMuCi0MCi0gIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKLXRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCi1zdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgotCi0gIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgotdGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgotCi0gIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCi1kZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybQotdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55Ci1pdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCi1tdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KLQotICBJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQotZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKLXNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bwotZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAotY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KLQotICA1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZQotTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgotbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKLXdvcmssIGluIGlzb2xhdGlvbiwgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5LCBhbmQKLXRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeQotY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0Ci1jb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQotbGlicmFyeSIuICBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCi1TZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KLQotICBXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZQotdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCi1kZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KLVdoZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlCi1saW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQotdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KLQotICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQotc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCi1mdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0Ci1maWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCi13b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQotTGlicmFyeSB3aWxsIHN0aWxsIGZhbGwgdW5kZXIgU2VjdGlvbiA2LikKLQotICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQotZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuCi1BbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKLXdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KLQwKLSAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKLWxpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCi13b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAotbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCi1lbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KLQotICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKLUxpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieQotdGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yawotZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKLWNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UKLWRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKLW9mIHRoZXNlIHRoaW5nczoKLQotICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCi0gICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCi0gICAgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIKLSAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAotICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAotICAgIHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlCi0gICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKLSAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAotICAgIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZQotICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCi0gICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCi0KLSAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKLSAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQotICAgIGNvcHkgb2YgdGhlIGxpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLAotICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQotICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKLSAgICB0aGUgdXNlciBpbnN0YWxscyBvbmUsIGFzIGxvbmcgYXMgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMKLSAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KLQotICAgIGMpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0Ci0gICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCi0gICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQotICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KLQotICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Ci0gICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCi0gICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgotCi0gICAgZSkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCi0gICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCi0KLSAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCi1MaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgotcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCi10aGUgbWF0ZXJpYWxzIHRvIGJlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcwotbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCi1jb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCi13aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzCi10aGUgZXhlY3V0YWJsZS4KLQotICBJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZQotcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQotYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAotdXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdQotZGlzdHJpYnV0ZS4KLQwKLSAgNy4gWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZQotTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKLWZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKLWxpYnJhcnksIHByb3ZpZGVkIHRoYXQgdGhlIHNlcGFyYXRlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBiYXNlZCBvbgotdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCi1wZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgotCi0gICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKLSAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5Ci0gICAgZmFjaWxpdGllcy4gIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCi0gICAgU2VjdGlvbnMgYWJvdmUuCi0KLSAgICBiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdAotICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCi0gICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgotCi0gIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCi10aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQotYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yCi1kaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKLXJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKLW9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMKLXRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KLQotICA5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKLXNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCi1kaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKLXByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKLW1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQotTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKLWFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKLXRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgotCi0gIDEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCi1MaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQotb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQotc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgotcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgotWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAotdGhpcyBMaWNlbnNlLgotDAotICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAotaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKLWNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKLW90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKLWV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90Ci1kaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCi1MaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91Ci1tYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50Ci1saWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5Ci1hbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KLXRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KLXJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCi0KLUlmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKLXBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKLWFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCi0KLUl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKLXBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Ci1zdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCi1pbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcwotaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCi1nZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCi10aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAotc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwotdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90Ci1pbXBvc2UgdGhhdCBjaG9pY2UuCi0KLVRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bwotYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCi1jZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKLW9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAotYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCi1zbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKLWV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCi13cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KLQotICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKLXZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KLVN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKLWJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KLQotRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQotc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCi0iYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCi1jb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCi1saWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQotdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLQwKLSAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZQotcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAotd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKLWNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlCi1Tb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCi1kZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCi1vZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZwotYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KLQotCQkJICAgIE5PIFdBUlJBTlRZCi0KLSAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCi1XQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLgotRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKLU9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi1LSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCi1MSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQotVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgotCi0gIDE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCi1XUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQotQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKLUZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKLUNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCi1MSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HCi1SRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQotRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgotU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotREFNQUdFUy4KLQotCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwotDAotICAgICAgICAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgTGlicmFyaWVzCi0KLSAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAotcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHdlIHJlY29tbWVuZCBtYWtpbmcgaXQgZnJlZSBzb2Z0d2FyZSB0aGF0Ci1ldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UuICBZb3UgY2FuIGRvIHNvIGJ5IHBlcm1pdHRpbmcKLXJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuCi0KLSAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcwotc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKLWNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZQotImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KLQotICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+Ci0gICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLQotQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCi0KLVlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCi1zY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgotbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgotCi0gIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCi0gIGxpYnJhcnkgYEZyb2InIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuIGJ5IEphbWVzIFJhbmRvbSBIYWNrZXIuCi0KLSAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCi0gIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCi0KLVRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCi0KLQotCi0KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2xpYi9saWJqYXZhY29yZS5zbwotL2xpYi9saWJvcGVuamRrLnNvCi0vbGliL2xpYm9wZW5qZGtkLnNvCi0vbGliNjQvbGliamF2YWNvcmUuc28KLS9saWI2NC9saWJvcGVuamRrLnNvCi0vbGliNjQvbGlib3Blbmpka2Quc28KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgPT0gIE5PVElDRSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlY3Rpb24gNCBkIG9mICAgICAgICAgICAgICAgICAgICA9PQotICAgPT0gIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PQotICAgPT0gIGluIHRoaXMgY2FzZSBmb3IgdGhlIEFuZHJvaWQtc3BlY2lmaWMgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICA9PQotICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1BbmRyb2lkIENvZGUKLUNvcHlyaWdodCAyMDA1LTIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi1UaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGFzIHBhcnQgb2YKLVRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKGh0dHA6Ly9zb3VyY2UuYW5kcm9pZC5jb20pLgotCi0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICA9PSAgTk9USUNFIGZpbGUgY29ycmVzcG9uZGluZyB0byB0aGUgc2VjdGlvbiA0IGQgb2YgICAgICAgICAgICAgICAgICAgID09Ci0gICA9PSAgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09Ci0gICA9PSAgaW4gdGhpcyBjYXNlIGZvciB0aGUgQXBhY2hlIEhhcm1vbnkgZGlzdHJpYnV0aW9uLiAgICAgICAgICAgICAgICAgID09Ci0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUFwYWNoZSBIYXJtb255Ci1Db3B5cmlnaHQgMjAwNiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KLQotVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBhdAotVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4KLQotUG9ydGlvbnMgb2YgSGFybW9ueSB3ZXJlIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5Ci1JbnRlbCBDb3Jwb3JhdGlvbiBhbmQgYXJlIGxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUKLUZvdW5kYXRpb24gdW5kZXIgdGhlICJTb2Z0d2FyZSBHcmFudCBhbmQgQ29ycG9yYXRlIENvbnRyaWJ1dGlvbgotTGljZW5zZSBBZ3JlZW1lbnQiLCBpbmZvcm1hbGx5IGtub3duIGFzIHRoZSAiSW50ZWwgSGFybW9ueSBDTEEiLgotCi0KLSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgID09ICBOT1RJQ0UgZmlsZSBmb3IgdGhlIElDVSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0KLSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQ29weXJpZ2h0IChjKSAxOTk1LTIwMTQgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzCitDb3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIGxpc3RlZCBpbiBDUkVESVRTLlRYVAogCiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCi1QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLWEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zCi10byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi1jb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIG9mCi10aGUgU29mdHdhcmUgYW5kIHRoYXQgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcwotcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KK0RldmVsb3BlZCBieToKIAotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi1FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLU1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVAotT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgotSE9MREVSUyBJTkNMVURFRCBJTiBUSElTIE5PVElDRSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgT1IgQU5ZCi1TUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgotUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YKLUNPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KLUNPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgICAgTExWTSBUZWFtCiAKLUV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlcgotc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZQotb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbgotb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCisgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCiAKLUFsbCB0cmFkZW1hcmtzIGFuZCByZWdpc3RlcmVkIHRyYWRlbWFya3MgbWVudGlvbmVkIGhlcmVpbiBhcmUgdGhlCi1wcm9wZXJ0eSBvZiB0aGVpciByZXNwZWN0aXZlIG93bmVycy4KKyAgICBodHRwOi8vbGx2bS5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0CisgICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KKyAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKK1NPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ29weXJpZ2h0IChjKSAyMDA5LTIwMTQgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ09QWVJJR0hUIE5PVElDRSwgRElTQ0xBSU1FUiwgYW5kIExJQ0VOU0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1BORyBSZWZlcmVuY2UgTGlicmFyeSBMaWNlbnNlIHZlcnNpb24gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIENvcHlyaWdodCAoYykgMTk5NS0yMDIzIFRoZSBQTkcgUmVmZXJlbmNlIExpYnJhcnkgQXV0aG9ycy4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIzIENvc21pbiBUcnV0YS4KKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyLCAyMDA0LCAyMDA2LTIwMTggR2xlbm4gUmFuZGVycy1QZWhyc29uLgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTcgQW5kcmVhcyBEaWxnZXIuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5NiBHdXkgRXJpYyBTY2hhbG5hdCwgR3JvdXAgNDIsIEluYy4KKworVGhlIHNvZnR3YXJlIGlzIHN1cHBsaWVkICJhcyBpcyIsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsCitleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcworb2YgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgdGl0bGUsIGFuZAorbm9uLWluZnJpbmdlbWVudC4gIEluIG5vIGV2ZW50IHNoYWxsIHRoZSBDb3B5cmlnaHQgb3duZXJzLCBvcgorYW55b25lIGRpc3RyaWJ1dGluZyB0aGUgc29mdHdhcmUsIGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgb3IKK290aGVyIGxpYWJpbGl0eSwgd2hldGhlciBpbiBjb250cmFjdCwgdG9ydCBvciBvdGhlcndpc2UsIGFyaXNpbmcKK2Zyb20sIG91dCBvZiwgb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBzb2Z0d2FyZSwgb3IgdGhlIHVzZSBvcgorb3RoZXIgZGVhbGluZ3MgaW4gdGhlIHNvZnR3YXJlLCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5CitvZiBzdWNoIGRhbWFnZS4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUKK3RoaXMgc29mdHdhcmUsIG9yIHBvcnRpb25zIGhlcmVvZiwgZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0IGZlZSwKK3N1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdQorICAgIG11c3Qgbm90IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gIElmIHlvdQorICAgIHVzZSB0aGlzIHNvZnR3YXJlIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QKKyAgICBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIGFwcHJlY2lhdGVkLCBidXQgaXMgbm90IHJlcXVpcmVkLgorCisgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdAorICAgIG5vdCBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisKKyAzLiBUaGlzIENvcHlyaWdodCBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkKKyAgICBzb3VyY2Ugb3IgYWx0ZXJlZCBzb3VyY2UgZGlzdHJpYnV0aW9uLgogCiAKLSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgID09ICBOT1RJQ0UgZmlsZSBmb3IgdGhlIEtYTUwgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0KLSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BORyBSZWZlcmVuY2UgTGlicmFyeSBMaWNlbnNlIHZlcnNpb24gMSAoZm9yIGxpYnBuZyAwLjUgdGhyb3VnaCAxLjYuMzUpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKGMpIDIwMDIsMjAwMywgU3RlZmFuIEhhdXN0ZWluLCBPYmVyaGF1c2VuLCBSaGxkLiwgR2VybWFueQorbGlicG5nIHZlcnNpb25zIDEuMC43LCBKdWx5IDEsIDIwMDAsIHRocm91Z2ggMS42LjM1LCBKdWx5IDE1LCAyMDE4IGFyZQorQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIsIDIwMDQsIDIwMDYtMjAxOCBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFyZQorZGVyaXZlZCBmcm9tIGxpYnBuZy0xLjAuNiwgYW5kIGFyZSBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUKK2Rpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMC42IHdpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscworYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnM6CiAKLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0iU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi13aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi1kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLXBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgIFNpbW9uLVBpZXJyZSBDYWRpZXV4CisgICAgRXJpYyBTLiBSYXltb25kCisgICAgTWFucyBSdWxsZ2FyZAorICAgIENvc21pbiBUcnV0YQorICAgIEdpbGxlcyBWb2xsYW50CisgICAgSmFtZXMgWXUKKyAgICBNYW5kYXIgU2FoYXN0cmFidWRkaGUKKyAgICBHb29nbGUgSW5jLgorICAgIFZhZGltIEJhcmtvdgogCi1UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCithbmQgd2l0aCB0aGUgZm9sbG93aW5nIGFkZGl0aW9ucyB0byB0aGUgZGlzY2xhaW1lcjoKIAotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi1FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLU1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KLUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCi1DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAotVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLVNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgIFRoZXJlIGlzIG5vIHdhcnJhbnR5IGFnYWluc3QgaW50ZXJmZXJlbmNlIHdpdGggeW91ciBlbmpveW1lbnQgb2YKKyAgICB0aGUgbGlicmFyeSBvciBhZ2FpbnN0IGluZnJpbmdlbWVudC4gIFRoZXJlIGlzIG5vIHdhcnJhbnR5IHRoYXQgb3VyCisgICAgZWZmb3J0cyBvciB0aGUgbGlicmFyeSB3aWxsIGZ1bGZpbGwgYW55IG9mIHlvdXIgcGFydGljdWxhciBwdXJwb3NlcworICAgIG9yIG5lZWRzLiAgVGhpcyBsaWJyYXJ5IGlzIHByb3ZpZGVkIHdpdGggYWxsIGZhdWx0cywgYW5kIHRoZSBlbnRpcmUKKyAgICByaXNrIG9mIHNhdGlzZmFjdG9yeSBxdWFsaXR5LCBwZXJmb3JtYW5jZSwgYWNjdXJhY3ksIGFuZCBlZmZvcnQgaXMKKyAgICB3aXRoIHRoZSB1c2VyLgogCitTb21lIGZpbGVzIGluIHRoZSAiY29udHJpYiIgZGlyZWN0b3J5IGFuZCBzb21lIGNvbmZpZ3VyZS1nZW5lcmF0ZWQKK2ZpbGVzIHRoYXQgYXJlIGRpc3RyaWJ1dGVkIHdpdGggbGlicG5nIGhhdmUgb3RoZXIgY29weXJpZ2h0IG93bmVycywgYW5kCithcmUgcmVsZWFzZWQgdW5kZXIgb3RoZXIgb3BlbiBzb3VyY2UgbGljZW5zZXMuCiAKLSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgID09ICBOT1RJQ0UgZmlsZSBmb3IgdGhlIFczQyBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0KLSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2xpYnBuZyB2ZXJzaW9ucyAwLjk3LCBKYW51YXJ5IDE5OTgsIHRocm91Z2ggMS4wLjYsIE1hcmNoIDIwLCAyMDAwLCBhcmUKK0NvcHlyaWdodCAoYykgMTk5OC0yMDAwIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYXJlIGRlcml2ZWQgZnJvbQorbGlicG5nLTAuOTYsIGFuZCBhcmUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kCitsaWNlbnNlIGFzIGxpYnBuZy0wLjk2LCB3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlCitsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzOgogCi1Db3B5cmlnaHQgKGMpIDIwMDAgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlCi1vZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuCi1BdXRvbWF0aXF1ZSwgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGlzCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDJ3MgU29mdHdhcmUgSW50ZWxsZWN0dWFsIFByb3BlcnR5IExpY2Vuc2UuCi1UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci1XSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi1NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICAgVG9tIExhbmUKKyAgICBHbGVubiBSYW5kZXJzLVBlaHJzb24KKyAgICBXaWxsZW0gdmFuIFNjaGFpawogCi1TZWUgVzNDIExpY2Vuc2UgaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8gZm9yIG1vcmUgZGV0YWlscy4KK2xpYnBuZyB2ZXJzaW9ucyAwLjg5LCBKdW5lIDE5OTYsIHRocm91Z2ggMC45NiwgTWF5IDE5OTcsIGFyZQorQ29weXJpZ2h0IChjKSAxOTk2LTE5OTcgQW5kcmVhcyBEaWxnZXIsIGFyZSBkZXJpdmVkIGZyb20gbGlicG5nLTAuODgsCithbmQgYXJlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzCitsaWJwbmctMC44OCwgd2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mCitDb250cmlidXRpbmcgQXV0aG9yczoKIAotICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgPT0gIE5PVElDRSBmaWxlIGZvciB0aGUgZmRsaWJtIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PQotICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIEpvaG4gQm93bGVyCisgICAgS2V2aW4gQnJhY2V5CisgICAgU2FtIEJ1c2hlbGwKKyAgICBNYWdudXMgSG9sbWdyZW4KKyAgICBHcmVnIFJvZWxvZnMKKyAgICBUb20gVGFubmVyCiAKLUNvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitTb21lIGZpbGVzIGluIHRoZSAic2NyaXB0cyIgZGlyZWN0b3J5IGhhdmUgb3RoZXIgY29weXJpZ2h0IG93bmVycywKK2J1dCBhcmUgcmVsZWFzZWQgdW5kZXIgdGhpcyBsaWNlbnNlLgogCi1EZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLWlzIHByZXNlcnZlZC4KK2xpYnBuZyB2ZXJzaW9ucyAwLjUsIE1heSAxOTk1LCB0aHJvdWdoIDAuODgsIEphbnVhcnkgMTk5NiwgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTUtMTk5NiBHdXkgRXJpYyBTY2hhbG5hdCwgR3JvdXAgNDIsIEluYy4KIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2ZyYW1ld29yay9kb2NsYXZhLmphcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gCi0gQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuCi0gCi0gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIAotIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIAotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK0ZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UsICJDb250cmlidXRpbmcgQXV0aG9ycyIKK2lzIGRlZmluZWQgYXMgdGhlIGZvbGxvd2luZyBzZXQgb2YgaW5kaXZpZHVhbHM6CiAKKyAgICBBbmRyZWFzIERpbGdlcgorICAgIERhdmUgTWFydGluZGFsZQorICAgIEd1eSBFcmljIFNjaGFsbmF0CisgICAgUGF1bCBTY2htaWR0CisgICAgVGltIFdlZ25lcgogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgUE5HIFJlZmVyZW5jZSBMaWJyYXJ5IGlzIHN1cHBsaWVkICJBUyBJUyIuICBUaGUgQ29udHJpYnV0aW5nCitBdXRob3JzIGFuZCBHcm91cCA0MiwgSW5jLiBkaXNjbGFpbSBhbGwgd2FycmFudGllcywgZXhwcmVzc2VkIG9yCitpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YKK21lcmNoYW50YWJpbGl0eSBhbmQgb2YgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuICBUaGUgQ29udHJpYnV0aW5nCitBdXRob3JzIGFuZCBHcm91cCA0MiwgSW5jLiBhc3N1bWUgbm8gbGlhYmlsaXR5IGZvciBkaXJlY3QsIGluZGlyZWN0LAoraW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHdoaWNoIG1heQorcmVzdWx0IGZyb20gdGhlIHVzZSBvZiB0aGUgUE5HIFJlZmVyZW5jZSBMaWJyYXJ5LCBldmVuIGlmIGFkdmlzZWQgb2YKK3RoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KIAotalF1ZXJ5IDEuMi42IC0gTmV3IFdhdmUgSmF2YXNjcmlwdAorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc291cmNlIGNvZGUsIG9yIHBvcnRpb25zIGhlcmVvZiwgZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0IGZlZSwgc3ViamVjdAordG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CiAKLUNvcHlyaWdodCAoYykgMjAwOCBKb2huIFJlc2lnIChqcXVlcnkuY29tKQotRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIChNSVQtTElDRU5TRS50eHQpCi1hbmQgR1BMIChHUEwtTElDRU5TRS50eHQpIGxpY2Vuc2VzLgorIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb3VyY2UgY29kZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZC4KIAotQ29weXJpZ2h0IChjKSAyMDA5IEpvaG4gUmVzaWcsIGh0dHA6Ly9qcXVlcnkuY29tLworIDIuIEFsdGVyZWQgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoIGFuZCBtdXN0IG5vdAorICAgIGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb3VyY2UuCiAKLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0iU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi13aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi1kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLXBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIDMuIFRoaXMgQ29weXJpZ2h0IG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueQorICAgIHNvdXJjZSBvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmlidXRpb24uCiAKLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi1pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KK1RoZSBDb250cmlidXRpbmcgQXV0aG9ycyBhbmQgR3JvdXAgNDIsIEluYy4gc3BlY2lmaWNhbGx5IHBlcm1pdCwKK3dpdGhvdXQgZmVlLCBhbmQgZW5jb3VyYWdlIHRoZSB1c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBhcyBhIGNvbXBvbmVudAordG8gc3VwcG9ydGluZyB0aGUgUE5HIGZpbGUgZm9ybWF0IGluIGNvbW1lcmNpYWwgcHJvZHVjdHMuICBJZiB5b3UgdXNlCit0aGlzIHNvdXJjZSBjb2RlIGluIGEgcHJvZHVjdCwgYWNrbm93bGVkZ21lbnQgaXMgbm90IHJlcXVpcmVkIGJ1dCB3b3VsZAorYmUgYXBwcmVjaWF0ZWQuCiAKLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQotTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgotT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCi1XSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vYmluL2RlcG1vZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkJICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKIAkJICAgICAgIFZlcnNpb24gMi4xLCBGZWJydWFyeSAxOTk5CiAKICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCiAKQEAgLTY0MzMsNyArNDc1NCw3IEBACiAKICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAKIEFsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgogCkBAIC02NDUxLDgzICs0NzcyLDI3NiBAQAogCiAKIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2Jpbi9taW5pZ3ppcAotL2xpYi9saWJ6LWhvc3Quc28KLS9saWIvbGliei5hCi0vbGliNjQvbGliei1ob3N0LnNvCi0vbGliNjQvbGliei5hCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAoQykgMTk5NS0yMDE3IEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgPT0gIE5PVElDRSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlY3Rpb24gNCBkIG9mICAgICAgICAgICAgICAgICAgICA9PQorICAgPT0gIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PQorICAgPT0gIGluIHRoaXMgY2FzZSBmb3IgdGhlIEFuZHJvaWQtc3BlY2lmaWMgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICA9PQorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCi0gIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKLSAgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyAgIENvcHlyaWdodCAoYykgMjAwNS0yMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAKLSAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCi0gIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKLSAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAKLSAgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKLSAgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKLSAgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCi0gICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCi0gIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCi0gICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KLSAgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi0gIEplYW4tbG91cCBHYWlsbHkgICAgICAgIE1hcmsgQWRsZXIKLSAgamxvdXBAZ3ppcC5vcmcgICAgICAgICAgbWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdQogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vYmluL2Fwcm90b2MKLS9saWI2NC9saWJwcm90b2J1Zi1jcHAtZnVsbC5zbwotL2xpYjY0L2xpYnByb3RvYnVmLWNwcC1saXRlLnNvCi0vbGliNjQvbGlicHJvdG9jLnNvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvcHlyaWdodCAyMDA4LCBHb29nbGUgSW5jLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgID09ICBOT1RJQ0UgZmlsZSBmb3IgdGhlIHg4NiBKSVQgbGliZW5jIHN1YmRpcmVjdG9yeS4gICAgICAgICAgICAgICAgICAgPT0KKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQXBhY2hlIEhhcm1vbnkKK0NvcHlyaWdodCAyMDA2LCAyMDEwIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBhdAorVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4KKworUG9ydGlvbnMgb2YgSGFybW9ueSB3ZXJlIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5CitJbnRlbCBDb3Jwb3JhdGlvbiBhbmQgYXJlIGxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUKK0ZvdW5kYXRpb24gdW5kZXIgdGhlICJTb2Z0d2FyZSBHcmFudCBhbmQgQ29ycG9yYXRlIENvbnRyaWJ1dGlvbgorTGljZW5zZSBBZ3JlZW1lbnQiIGFuZCBmb3Igd2hpY2ggdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlcworYXBwbHkKKyAgICAgICAgIChDKSBDb3B5cmlnaHQgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbgorICAgICAgICAgKEMpIENvcHlyaWdodCAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAgICAgICAgIChDKSBDb3B5cmlnaHQgMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbgorCitQb3J0aW9ucyBvZiB0aGUgQXBhY2hlIFBvcnRhYmxlIFJ1bnRpbWUgdXNlZCBieSBEUkxWTSB3ZXJlCitkZXZlbG9wZWQgYXQgdGhlIE5hdGlvbmFsIENlbnRlciBmb3IgU3VwZXJjb21wdXRpbmcgQXBwbGljYXRpb25zCisoTkNTQSkgYXQgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbi4KKworVGhpcyBzb2Z0d2FyZSBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgUlNBIERhdGEgU2VjdXJpdHkKK0luYy4gTUQ1IE1lc3NhZ2UtRGlnZXN0IEFsZ29yaXRobS4KKworVGhpcyBzb2Z0d2FyZSBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSBVTklYIFY3LCBDb3B5cmlnaHQoQykKK0NhbGRlcmEgSW50ZXJuYXRpb25hbCBJbmMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTFo0IExpYnJhcnkKK0NvcHlyaWdodCAoYykgMjAxMS0yMDIwLCBZYW5uIENvbGxldAogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi1tZXQ6CitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotZGlzdHJpYnV0aW9uLgotICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLXRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIAotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLUxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLU9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi1EQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLVRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogCi1Db2RlIGdlbmVyYXRlZCBieSB0aGUgUHJvdG9jb2wgQnVmZmVyIGNvbXBpbGVyIGlzIG93bmVkIGJ5IHRoZSBvd25lcgotb2YgdGhlIGlucHV0IGZpbGUgdXNlZCB3aGVuIGdlbmVyYXRpbmcgaXQuICBUaGlzIGNvZGUgaXMgbm90Ci1zdGFuZGFsb25lIGFuZCByZXF1aXJlcyBhIHN1cHBvcnQgbGlicmFyeSB0byBiZSBsaW5rZWQgd2l0aCBpdC4gIFRoaXMKLXN1cHBvcnQgbGlicmFyeSBpcyBpdHNlbGYgY292ZXJlZCBieSB0aGUgYWJvdmUgbGljZW5zZS4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90aWNlcyBmb3IgZmlsZShzKToKLS9saWI2NC9saWJmZWMuc28KLS9saWI2NC9saWJzcXVhc2hmc191dGlscy5zbwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBtYWpvcml0eSBvZiB0aGUgc291cmNlIGNvZGUgaW4gdGhlIG1ETlNSZXNwb25kZXIgcHJvamVjdCBpcyBsaWNlbnNlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBmcm9tOgorICAgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMD4KIAotICAgQ29weXJpZ2h0IChjKSAyMDE1LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CitUbyBhY2NvbW1vZGF0ZSBsaWNlbnNlIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgd2lkZXN0IHBvc3NpYmxlIHJhbmdlCitvZiBjbGllbnQgY29kZSBsaWNlbnNlcywgdGhlIHNoYXJlZCBsaWJyYXJ5IGNvZGUsIHdoaWNoIGlzIGxpbmtlZAorYXQgcnVudGltZSBpbnRvIHRoZSBzYW1lIGFkZHJlc3Mgc3BhY2UgYXMgdGhlIGNsaWVudCB1c2luZyBpdCwgaXMKK2xpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIlRocmVlLUNsYXVzZSBCU0QgTGljZW5zZSIuCisKK1RoZSBMaW51eCBOYW1lIFNlcnZpY2UgU3dpdGNoIGNvZGUsIGNvbnRyaWJ1dGVkIGJ5IE5hdGlvbmFsIElDVAorQXVzdHJhbGlhIEx0ZCAoTklDVEEpIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTklDVEEgUHVibGljCitTb2Z0d2FyZSBMaWNlbmNlICh3aGljaCBpcyBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJUaHJlZS1DbGF1c2UKK0JTRCBMaWNlbnNlIiwgd2l0aCBzb21lIGFkZGl0aW9uYWwgbGFuZ3VhZ2UgcGVydGFpbmluZyB0byBBdXN0cmFsaWFuIGxhdykuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICAgQ29weXJpZ2h0IDIwMDYsIEJyaWFuIFN3ZXRsYW5kIDxzd2V0bGFuZEBmcm90ei5uZXQ+CiAKICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpAQCAtNjcxNywxMiArNTIzMSw5MjAzIEBACiAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKIAogCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05vdGljZXMgZm9yIGZpbGVzIGNvbnRhaW5lZCBpbiB0aGUgdG9vbHMgZGlyZWN0b3J5OgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBOb3RpY2VzIGZvciBmaWxlKHMpOgotL2Jpbi9ibGtfYWxsb2NfdG9fYmFzZV9mcwotL2Jpbi9ta2UyZnMuY29uZgotL2Jpbi9ta3VzZXJpbWdfbWtlMmZzLnNoCi0vbGliNjQvbGliZXh0NF91dGlscy5zbworL2Jpbi9ta3NkY2FyZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb3B5cmlnaHQgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisgICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR29vZ2xlIEluYy4gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KK0VWRU5UIFNIQUxMIEdvb2dsZSBJbmMuIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKK09SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKK09USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05vdGljZXMgZm9yIGZpbGUocyk6CisvZnJhbWV3b3JrL2NvbnNjcnlwdC1ob3N0ZGV4LmphcgorL2ZyYW1ld29yay9jb3JlLWhvc3RkZXguamFyCisvZnJhbWV3b3JrL2NvcmUtbGliYXJ0LWhvc3RkZXguamFyCisvbGliL2xpYmphdmFjb3JlLnNvCisvbGliL2xpYmphdmFjcnlwdG8uc28KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgPT0gIE5PVElDRSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlY3Rpb24gNCBkIG9mICAgICAgICAgICAgICAgICAgICA9PQorICAgPT0gIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PQorICAgPT0gIGluIHRoaXMgY2FzZSBmb3IgdGhlIEFuZHJvaWQtc3BlY2lmaWMgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICA9PQorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBbmRyb2lkIENvZGUKK0NvcHlyaWdodCAyMDA1LTIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCitUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGFzIHBhcnQgb2YKK1RoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKGh0dHA6Ly9zb3VyY2UuYW5kcm9pZC5jb20pLgorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICA9PSAgTk9USUNFIGZpbGUgY29ycmVzcG9uZGluZyB0byB0aGUgc2VjdGlvbiA0IGQgb2YgICAgICAgICAgICAgICAgICAgID09CisgICA9PSAgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09CisgICA9PSAgaW4gdGhpcyBjYXNlIGZvciB0aGUgQXBhY2hlIEhhcm1vbnkgZGlzdHJpYnV0aW9uLiAgICAgICAgICAgICAgICAgID09CisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FwYWNoZSBIYXJtb255CitDb3B5cmlnaHQgMjAwNiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KKworVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBhdAorVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4KKworUG9ydGlvbnMgb2YgSGFybW9ueSB3ZXJlIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5CitJbnRlbCBDb3Jwb3JhdGlvbiBhbmQgYXJlIGxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUKK0ZvdW5kYXRpb24gdW5kZXIgdGhlICJTb2Z0d2FyZSBHcmFudCBhbmQgQ29ycG9yYXRlIENvbnRyaWJ1dGlvbgorTGljZW5zZSBBZ3JlZW1lbnQiLCBpbmZvcm1hbGx5IGtub3duIGFzIHRoZSAiSW50ZWwgSGFybW9ueSBDTEEiLgorCisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgID09ICBOT1RJQ0UgZmlsZSBmb3IgdGhlIElDVSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0KKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ29weXJpZ2h0IChjKSAxOTk1LTIwMDkgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMKK3RvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YKK3RoZSBTb2Z0d2FyZSBhbmQgdGhhdCBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UCitPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCitIT0xERVJTIElOQ0xVREVEIElOIFRISVMgTk9USUNFIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBPUiBBTlkKK1NQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCitSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRgorQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTgorQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyCitzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlCitvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uCitvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KKworQWxsIHRyYWRlbWFya3MgYW5kIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBtZW50aW9uZWQgaGVyZWluIGFyZSB0aGUKK3Byb3BlcnR5IG9mIHRoZWlyIHJlc3BlY3RpdmUgb3duZXJzLgorCisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgID09ICBOT1RJQ0UgZmlsZSBmb3IgdGhlIEpVbml0IExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0KKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ29tbW9uIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjAKKworVEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENPTU1PTgorUFVCTElDIExJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4gREVGSU5JVElPTlMKKworIkNvbnRyaWJ1dGlvbiIgbWVhbnM6CisKKyAgICAgIGEpIGluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZAorICAgICAgICAgZG9jdW1lbnRhdGlvbiBkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCisgICAgICBiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6CisKKyAgICAgIGkpIGNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZAorCisgICAgICBpaSkgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOworCisgICAgICB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUKKyAgICAgIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEKKyAgICAgIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0bworICAgICAgdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoCisgICAgICBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8KKyAgICAgIHRoZSBQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUKKyAgICAgIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duCisgICAgICBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorICAgICAgUHJvZ3JhbS4KKworIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisiTGljZW5zZWQgUGF0ZW50cyAiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3IKK3doaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24KK2Fsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBDb250cmlidXRpb25zIGRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzCitBZ3JlZW1lbnQuCisKKyJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcworQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworMi4gR1JBTlQgT0YgUklHSFRTCisKKyAgICAgIGEpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yCisgICAgICBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UKKyAgICAgIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaAorICAgICAgZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCisKKyAgICAgIGIpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yCisgICAgICBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCisgICAgICBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIKKyAgICAgIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorICAgICAgQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMKKyAgICAgIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUKKyAgICAgIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMKKyAgICAgIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uCisgICAgICBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLgorICAgICAgVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBhbnkgb3RoZXIgY29tYmluYXRpb25zCisgICAgICB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcyBsaWNlbnNlZAorICAgICAgaGVyZXVuZGVyLgorCisgICAgICBjKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cworICAgICAgdGhlIGxpY2Vuc2VzIHRvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vCisgICAgICBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgUHJvZ3JhbSBkb2VzCisgICAgICBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mCisgICAgICBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvCisgICAgICBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24KKyAgICAgIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYQorICAgICAgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZAorICAgICAgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvCisgICAgICBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuCisgICAgICBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0bworICAgICAgYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzCisgICAgICByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZQorICAgICAgUHJvZ3JhbS4KKworICAgICAgZCkgRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMKKyAgICAgIHN1ZmZpY2llbnQgY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvCisgICAgICBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorCiszLiBSRVFVSVJFTUVOVFMKKworQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybQordW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDoKKworICAgICAgYSkgaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorCisgICAgICBiKSBpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6CisKKyAgICAgIGkpIGVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwKKyAgICAgIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZworICAgICAgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQKKyAgICAgIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcworICAgICAgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworCisgICAgICBpaSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsCisgICAgICBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsKKworICAgICAgaWlpKSBzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudAorICAgICAgYXJlIG9mZmVyZWQgYnkgdGhhdCBDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlcgorICAgICAgcGFydHk7IGFuZAorCisgICAgICBpdikgc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tCisgICAgICBzdWNoIENvbnRyaWJ1dG9yLCBhbmQgaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhCisgICAgICByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yCisgICAgICBzb2Z0d2FyZSBleGNoYW5nZS4KKworV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCisgICAgICBhKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgCisKKyAgICAgIGIpIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mCisgICAgICB0aGUgUHJvZ3JhbS4KKworQ29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQKK3dpdGhpbiB0aGUgUHJvZ3JhbS4KKworRWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMKK0NvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQKK1JlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4KKworNC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT04KKworQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluCityZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUKK2xpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYQorY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdAorY3JlYXRlIHBvdGVudGlhbCBsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhCitDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywKK3N1Y2ggQ29udHJpYnV0b3IgKCJDb21tZXJjaWFsIENvbnRyaWJ1dG9yIikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQKK2FuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIgQ29udHJpYnV0b3IgKCJJbmRlbW5pZmllZCBDb250cmlidXRvciIpCithZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgIkxvc3NlcyIpIGFyaXNpbmcKK2Zyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkKK2FnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzCitvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aCBpdHMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZy4gVGhlCitvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4KK0luIG9yZGVyIHRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5Citub3RpZnkgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikKK2FsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZCBhbnkgcmVsYXRlZCBzZXR0bGVtZW50CituZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUgaW4gYW55IHN1Y2gKK2NsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KKworRm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZQorY2xhaW1zIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eQorYWxvbmUuIFVuZGVyIHRoaXMgc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0bworZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZSBvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZQorcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYSBjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIKK0NvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK211c3QgcGF5IHRob3NlIGRhbWFnZXMuCisKKzUuIE5PIFdBUlJBTlRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUworUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZCitPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cworZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCit0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZQorbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQKK3VuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SCitBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HCitXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SCitESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRAorSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gR0VORVJBTAorCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mCit0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlcgorYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKK0lmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYSBDb250cmlidXRvciB3aXRoCityZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yCitjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgdG8gc3VjaCBSZWNpcGllbnQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGFzCitvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEluIGFkZGl0aW9uLCBpZiBSZWNpcGllbnQKK2luc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbQoraXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IKK2hhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnQncworcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoCitsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCitBbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdAorZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMKK0FncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZgordGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UKK2FuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLgorSG93ZXZlciwgUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcworZ3JhbnRlZCBieSBSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kCitzdXJ2aXZlLgorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsCitidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzIGNvcHlyaWdodGVkIGFuZAorbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQgU3Rld2FyZAorcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIElCTSBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIElCTSBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0byBzZXJ2ZSBhcyB0aGUKK0FncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlCitQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvCit0aGUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sCithZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkKK2VsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIKK3RoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKQorYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlIGludGVsbGVjdHVhbAorcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwKK2J5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuCisKK1RoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yayBhbmQKK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObworcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIEFncmVlbWVudAorbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uCisKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgPT0gIE5PVElDRSBmaWxlIGZvciB0aGUgS1hNTCBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PQorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMywgU3RlZmFuIEhhdXN0ZWluLCBPYmVyaGF1c2VuLCBSaGxkLiwgR2VybWFueQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKK0NMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCitUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgPT0gIE5PVElDRSBmaWxlIGZvciB0aGUgU1FMaXRlIEphdmEgV3JhcHBlciBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICA9PQorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodGVkIGJ5IENocmlzdGlhbiBXZXJuZXIgPGNod0BjaC13ZXJuZXIuZGU+CithbmQgb3RoZXJzLiBUaGUgZm9sbG93aW5nIHRlcm1zIGFwcGx5IHRvIGFsbCBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlCitzb2Z0d2FyZSB1bmxlc3MgZXhwbGljaXRseSBkaXNjbGFpbWVkIGluIGluZGl2aWR1YWwgZmlsZXMuCisKK1RoZSBhdXRob3JzIGhlcmVieSBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLAorYW5kIGxpY2Vuc2UgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZAordGhhdCBleGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcyBhcmUgcmV0YWluZWQgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCB0aGlzCitub3RpY2UgaXMgaW5jbHVkZWQgdmVyYmF0aW0gaW4gYW55IGRpc3RyaWJ1dGlvbnMuIE5vIHdyaXR0ZW4gYWdyZWVtZW50LAorbGljZW5zZSwgb3Igcm95YWx0eSBmZWUgaXMgcmVxdWlyZWQgZm9yIGFueSBvZiB0aGUgYXV0aG9yaXplZCB1c2VzLgorTW9kaWZpY2F0aW9ucyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSBjb3B5cmlnaHRlZCBieSB0aGVpciBhdXRob3JzCithbmQgbmVlZCBub3QgZm9sbG93IHRoZSBsaWNlbnNpbmcgdGVybXMgZGVzY3JpYmVkIGhlcmUsIHByb3ZpZGVkIHRoYXQKK3RoZSBuZXcgdGVybXMgYXJlIGNsZWFybHkgaW5kaWNhdGVkIG9uIHRoZSBmaXJzdCBwYWdlIG9mIGVhY2ggZmlsZSB3aGVyZQordGhleSBhcHBseS4KKworSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgRElTVFJJQlVUT1JTIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkKK0ZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKK0FSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgSVRTIERPQ1VNRU5UQVRJT04sIE9SIEFOWQorREVSSVZBVElWRVMgVEhFUkVPRiwgRVZFTiBJRiBUSEUgQVVUSE9SUyBIQVZFIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUSEUgQVVUSE9SUyBBTkQgRElTVFJJQlVUT1JTIFNQRUNJRklDQUxMWSBESVNDTEFJTSBBTlkgV0FSUkFOVElFUywKK0lOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4gIFRISVMgU09GVFdBUkUKK0lTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgQVVUSE9SUyBBTkQgRElTVFJJQlVUT1JTIEhBVkUKK05PIE9CTElHQVRJT04gVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUgorTU9ESUZJQ0FUSU9OUy4KKworCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICA9PSAgTk9USUNFIGZpbGUgZm9yIHRoZSBXM0MgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09CisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAwMCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUKK29mIFRlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4KK0F1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBUaGlzIHByb2dyYW0gaXMKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0MncyBTb2Z0d2FyZSBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTGljZW5zZS4KK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworU2VlIFczQyBMaWNlbnNlIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvIGZvciBtb3JlIGRldGFpbHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy91c3IvaWN1L2ljdWR0NTFsLmRhdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJQ1UgTGljZW5zZSAtIElDVSAxLjguMSBhbmQgbGF0ZXIKKworQ09QWVJJR0hUIEFORCBQRVJNSVNTSU9OIE5PVElDRQorCitDb3B5cmlnaHQgKGMpIDE5OTUtMjAwOCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMKKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYW5kIHRoYXQgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIEhPTERFUlMgSU5DTFVERUQgSU4gVEhJUyBOT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlciBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCisKK0FsbCB0cmFkZW1hcmtzIGFuZCByZWdpc3RlcmVkIHRyYWRlbWFya3MgbWVudGlvbmVkIGhlcmVpbiBhcmUgdGhlIHByb3BlcnR5IG9mIHRoZWlyIHJlc3BlY3RpdmUgb3duZXJzLiAKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1VOSUNPREUsIElOQy4gTElDRU5TRSBBR1JFRU1FTlQgLSBEQVRBIEZJTEVTIEFORCBTT0ZUV0FSRQorCisgICAgVW5pY29kZSBEYXRhIEZpbGVzIGluY2x1ZGUgYWxsIGRhdGEgZmlsZXMgdW5kZXIgdGhlIGRpcmVjdG9yaWVzCitodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy8sIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy8sIGFuZAoraHR0cDovL3d3dy51bmljb2RlLm9yZy9jbGRyL2RhdGEvIC4gVW5pY29kZSBTb2Z0d2FyZSBpbmNsdWRlcyBhbnkgc291cmNlIGNvZGUKK3B1Ymxpc2hlZCBpbiB0aGUgVW5pY29kZSBTdGFuZGFyZCBvciB1bmRlciB0aGUgZGlyZWN0b3JpZXMKK2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLywgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzLywgYW5kCitodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NsZHIvZGF0YS8uCisKKyAgICBOT1RJQ0UgVE8gVVNFUjogQ2FyZWZ1bGx5IHJlYWQgdGhlIGZvbGxvd2luZyBsZWdhbCBhZ3JlZW1lbnQuIEJZCitET1dOTE9BRElORywgSU5TVEFMTElORywgQ09QWUlORyBPUiBPVEhFUldJU0UgVVNJTkcgVU5JQ09ERSBJTkMuJ1MgREFUQSBGSUxFUworKCJEQVRBIEZJTEVTIiksIEFORC9PUiBTT0ZUV0FSRSAoIlNPRlRXQVJFIiksIFlPVSBVTkVRVUlWT0NBTExZIEFDQ0VQVCwgQU5ECitBR1JFRSBUTyBCRSBCT1VORCBCWSwgQUxMIE9GIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVC4gSUYgWU9VCitETyBOT1QgQUdSRUUsIERPIE5PVCBET1dOTE9BRCwgSU5TVEFMTCwgQ09QWSwgRElTVFJJQlVURSBPUiBVU0UgVEhFIERBVEEgRklMRVMKK09SIFNPRlRXQVJFLgorCisgICAgQ09QWVJJR0hUIEFORCBQRVJNSVNTSU9OIE5PVElDRQorCisgICAgQ29weXJpZ2h0IMKswqkgMTk5MS0yMDA3IFVuaWNvZGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gRGlzdHJpYnV0ZWQgdW5kZXIKK3RoZSBUZXJtcyBvZiBVc2UgaW4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbC4KKworICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoZSBVbmljb2RlIGRhdGEgZmlsZXMgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gKHRoZSAiRGF0YSBGaWxlcyIpIG9yCitVbmljb2RlIHNvZnR3YXJlIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uICh0aGUgIlNvZnR3YXJlIikgdG8gZGVhbCBpbgordGhlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKK3JpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZC9vciBzZWxsIGNvcGllcyBvZgordGhlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBEYXRhIEZpbGVzIG9yCitTb2Z0d2FyZSBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBwcm92aWRlZCB0aGF0IChhKSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKQorYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIHdpdGggYWxsIGNvcGllcyBvZiB0aGUgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZSwKKyhiKSBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgorYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCBhbmQgKGMpIHRoZXJlIGlzIGNsZWFyIG5vdGljZSBpbiBlYWNoIG1vZGlmaWVkIERhdGEKK0ZpbGUgb3IgaW4gdGhlIFNvZnR3YXJlIGFzIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBEYXRhCitGaWxlKHMpIG9yIFNvZnR3YXJlIHRoYXQgdGhlIGRhdGEgb3Igc29mdHdhcmUgaGFzIGJlZW4gbW9kaWZpZWQuCisKKyAgICBUSEUgREFUQSBGSUxFUyBBTkQgU09GVFdBUkUgQVJFIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCitLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRAorUEFSVFkgUklHSFRTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBIT0xERVJTIElOQ0xVREVEIElOIFRISVMKK05PVElDRSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLAorV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhFIERBVEEgRklMRVMgT1IKK1NPRlRXQVJFLgorCisgICAgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyIHNoYWxsIG5vdAorYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzCitpbiB0aGVzZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIHRoZQorY29weXJpZ2h0IGhvbGRlci4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKy8qIFRoaXMgSUNVIGNvZGUgZGVyaXZlZCBmcm9tOiAqLworLyoKK3B1bnljb2RlLmMgMC40LjAgKDIwMDEtTm92LTE3LVNhdCkKK2h0dHA6Ly93d3cuY3MuYmVya2VsZXkuZWR1L35hbWMvaWRuLworQWRhbSBNLiBDb3N0ZWxsbworaHR0cDovL3d3dy5uaWNlbWljZS5uZXQvYW1jLworCitEaXNjbGFpbWVyIGFuZCBsaWNlbnNlCisKK1JlZ2FyZGluZyB0aGlzIGVudGlyZSBkb2N1bWVudCBvciBhbnkgcG9ydGlvbiBvZiBpdCAoaW5jbHVkaW5nCit0aGUgcHNldWRvY29kZSBhbmQgQyBjb2RlKSwgdGhlIGF1dGhvciBtYWtlcyBubyBndWFyYW50ZWVzIGFuZAoraXMgbm90IHJlc3BvbnNpYmxlIGZvciBhbnkgZGFtYWdlIHJlc3VsdGluZyBmcm9tIGl0cyB1c2UuIFRoZQorYXV0aG9yIGdyYW50cyBpcnJldm9jYWJsZSBwZXJtaXNzaW9uIHRvIGFueW9uZSB0byB1c2UsIG1vZGlmeSwKK2FuZCBkaXN0cmlidXRlIGl0IGluIGFueSB3YXkgdGhhdCBkb2VzIG5vdCBkaW1pbmlzaCB0aGUgcmlnaHRzCitvZiBhbnlvbmUgZWxzZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgaXQsIHByb3ZpZGVkIHRoYXQKK3JlZGlzdHJpYnV0ZWQgZGVyaXZhdGl2ZSB3b3JrcyBkbyBub3QgY29udGFpbiBtaXNsZWFkaW5nIGF1dGhvciBvcgordmVyc2lvbiBpbmZvcm1hdGlvbi4gRGVyaXZhdGl2ZSB3b3JrcyBuZWVkIG5vdCBiZSBsaWNlbnNlZCB1bmRlcgorc2ltaWxhciB0ZXJtcy4KKyovCisKKworLyoKKyoqIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbiwgc28gY2xhcmlmaWVkIGFzIG9mCisqKiAyMDA2LTA3LTE3IGJ5IEFydGh1ciBEYXZpZCBPbHNvbi4KKyovCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy9mcmFtZXdvcmsvamNvbW1vbi0xLjAuMTIuamFyCisvZnJhbWV3b3JrL2pmcmVlY2hhcnQtMS4wLjktc3d0LmphcgorL2ZyYW1ld29yay9qZnJlZWNoYXJ0LTEuMC45LmphcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCSAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIuMSwgRmVicnVhcnkgMTk5OQorCisgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBMZXNzZXIgR1BMLiAgSXQgYWxzbyBjb3VudHMKKyBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQorIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQorZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgorCisgIFRoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIHNvZnR3YXJlIHBhY2thZ2VzLS10eXBpY2FsbHkgbGlicmFyaWVzLS1vZiB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQorY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlcgordGhpcyBsaWNlbnNlIG9yIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIHRoZSBiZXR0ZXIKK3N0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwKK25vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKK3lvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKK2ZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpOyB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQKK2l0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgoraXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCit0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorZGlzdHJpYnV0b3JzIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGVzZQorcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCit5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKK29yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKK3lvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKK2NvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQord2l0aCB0aGUgbGlicmFyeSBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUKK2xpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKK3RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKK21vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB0aGUgcmVjaXBpZW50cyBzaG91bGQga25vdwordGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCithdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKK2ludHJvZHVjZWQgYnkgb3RoZXJzLgorDAorICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgorYW55IGZyZWUgcHJvZ3JhbS4gIFdlIHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgYSBjb21wYW55IGNhbm5vdAorZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCityZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAorYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZQorY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCisKKyAgTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKK2lzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgV2UgdXNlCit0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCitsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KKworICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZworYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCitjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuICBUaGUgb3JkaW5hcnkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCitlbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgcGVybWl0cyBtb3JlIGxheCBjcml0ZXJpYSBmb3IgbGlua2luZyBvdGhlciBjb2RlIHdpdGgKK3RoZSBsaWJyYXJ5LgorCisgIFdlIGNhbGwgdGhpcyBsaWNlbnNlIHRoZSAiTGVzc2VyIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJlY2F1c2UgaXQKK2RvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKK29mIGFuIGFkdmFudGFnZSBvdmVyIGNvbXBldGluZyBub24tZnJlZSBwcm9ncmFtcy4gIFRoZXNlIGRpc2FkdmFudGFnZXMKK2FyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQorbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgorc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgorCisgIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCitlbmNvdXJhZ2UgdGhlIHdpZGVzdCBwb3NzaWJsZSB1c2Ugb2YgYSBjZXJ0YWluIGxpYnJhcnksIHNvIHRoYXQgaXQgYmVjb21lcworYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQorYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQorbGlicmFyeSBkb2VzIHRoZSBzYW1lIGpvYiBhcyB3aWRlbHkgdXNlZCBub24tZnJlZSBsaWJyYXJpZXMuICBJbiB0aGlzCitjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKK3NvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCitwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKK2ZyZWUgc29mdHdhcmUuICBGb3IgZXhhbXBsZSwgcGVybWlzc2lvbiB0byB1c2UgdGhlIEdOVSBDIExpYnJhcnkgaW4KK25vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQorb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcKK3N5c3RlbS4KKworICBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZQordXNlcnMnIGZyZWVkb20sIGl0IGRvZXMgZW5zdXJlIHRoYXQgdGhlIHVzZXIgb2YgYSBwcm9ncmFtIHRoYXQgaXMKK2xpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgordGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCisid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gIFRoZQorZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdAorYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCisMCisJCSAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgb3Igb3RoZXIKK3Byb2dyYW0gd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yCitvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCit0aGlzIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuCitFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworICBBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhCitwcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMKKyh3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCisKKyAgVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsKK3doaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkiIG1lYW5zIGVpdGhlciB0aGUgTGlicmFyeSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyCitjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYQorcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZAorc3RyYWlnaHRmb3J3YXJkbHkgaW50byBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcworaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKKworICAiU291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucworYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKK2ludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbgorYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQorc3VjaCBhIHByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvcgord3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcworYW5kIHdoYXQgdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IGRvZXMuCisgIAorICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MKK2NvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0Cit5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgorYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QKK2FsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55Cit3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQorTGlicmFyeS4KKworICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAorYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYQorZmVlLgorDAorICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBMaWJyYXJ5IG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCisgICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKKyAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCisgICAgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eQorICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAorICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgorICAgIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mCisgICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorCisgICAgKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMKKyAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCisgICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKKyAgICBhcHBsaWNhdGlvbi1zdXBwbGllZCBmdW5jdGlvbiBvciB0YWJsZSB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdAorICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCisgICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZQoraXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKK3dpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KK3RoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28KK3RoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKK2luc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkKK3RoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KK3RoZXNlIG5vdGljZXMuCisMCisgIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKK3RoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCitzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCisgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgordGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCisgIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCitkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybQordW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55CitpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCittdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICBJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKK3NvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bworZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZQorTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgorbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKK3dvcmssIGluIGlzb2xhdGlvbiwgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5LCBhbmQKK3RoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeQorY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0Citjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQorbGlicmFyeSIuICBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCitTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworICBXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZQordGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCitkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KK1doZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlCitsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQordGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KKworICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQorc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCitmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0CitmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCit3b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQorTGlicmFyeSB3aWxsIHN0aWxsIGZhbGwgdW5kZXIgU2VjdGlvbiA2LikKKworICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQorZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuCitBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKK3doZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKwwKKyAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKK2xpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCit3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawordW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKK0xpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieQordGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yaworZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKK2NvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UKK2RpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKK29mIHRoZXNlIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCisgICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCisgICAgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIKKyAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAorICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAorICAgIHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlCisgICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKKyAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAorICAgIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZQorICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCisgICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCisKKyAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKKyAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQorICAgIGNvcHkgb2YgdGhlIGxpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLAorICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQorICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKKyAgICB0aGUgdXNlciBpbnN0YWxscyBvbmUsIGFzIGxvbmcgYXMgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMKKyAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KKworICAgIGMpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZSkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgbWF0ZXJpYWxzIHRvIGJlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcworbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCitjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCit3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzCit0aGUgZXhlY3V0YWJsZS4KKworICBJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZQorcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQorYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAordXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdQorZGlzdHJpYnV0ZS4KKwwKKyAgNy4gWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKK2ZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKK2xpYnJhcnksIHByb3ZpZGVkIHRoYXQgdGhlIHNlcGFyYXRlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBiYXNlZCBvbgordGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCitwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKKyAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CisgICAgZmFjaWxpdGllcy4gIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgICAgU2VjdGlvbnMgYWJvdmUuCisKKyAgICBiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdAorICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCisgICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCisgIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCit0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQorYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKK29yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMKK3Rlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQorc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK1N1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKK2J1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCisiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCitsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKwwKKyAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAord3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKK2NvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCitkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCitvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZworYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCitXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLgorRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKK09USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQorVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCitXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQorQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKK0ZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HCitSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQorRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgorU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorICAgICAgICAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgTGlicmFyaWVzCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHdlIHJlY29tbWVuZCBtYWtpbmcgaXQgZnJlZSBzb2Z0d2FyZSB0aGF0CitldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UuICBZb3UgY2FuIGRvIHNvIGJ5IHBlcm1pdHRpbmcKK3JlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuCisKKyAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcworc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZQorImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIGxpYnJhcnksIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUKKyAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5OTAKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCEKKworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy9saWIvdGhpcmRfcGFydHlfaWN1X2ljdWRhdGFfaG9zdF9neXAuYQorL2xpYi90aGlyZF9wYXJ0eV9pY3VfaWN1aTE4bl9ob3N0X2d5cC5hCisvbGliL3RoaXJkX3BhcnR5X2ljdV9pY3V1Y19ob3N0X2d5cC5hCisvbGliL3RoaXJkX3BhcnR5X3Byb3RvYnVmX3Byb3RvYnVmX2Z1bGxfZG9fbm90X3VzZV9ob3N0X2d5cC5hCisvbGliL3Y4X3Rvb2xzX2d5cF92OF9iYXNlX2FybV9ob3N0X2d5cC5hCisvbGliL3Y4X3Rvb2xzX2d5cF92OF9ub3NuYXBzaG90X2FybV9ob3N0X2d5cC5hCisvb2JqL0dZUC9zaGFyZWRfaW50ZXJtZWRpYXRlcy9ta3NuYXBzaG90LmFybQorL29iai9HWVAvc2hhcmVkX2ludGVybWVkaWF0ZXMvcHJvdG9jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5MSwgMjAwMCwgMjAwMSBieSBMdWNlbnQgVGVjaG5vbG9naWVzLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBub3RpY2UKKyAqIGlzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgYW55IHNvZnR3YXJlIHdoaWNoIGlzIG9yIGluY2x1ZGVzIGEgY29weQorICogb3IgbW9kaWZpY2F0aW9uIG9mIHRoaXMgc29mdHdhcmUgYW5kIGluIGFsbCBjb3BpZXMgb2YgdGhlIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24gZm9yIHN1Y2ggc29mdHdhcmUuCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRZLiAgSU4gUEFSVElDVUxBUiwgTkVJVEhFUiBUSEUgQVVUSE9SIE5PUiBMVUNFTlQgTUFLRVMgQU5ZCisgKiBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNRVJDSEFOVEFCSUxJVFkKKyAqIE9GIFRISVMgU09GVFdBUkUgT1IgSVRTIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDksIEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIC0tLQorICogQXV0aG9yOiBLb3N0eWEgU2VyZWJyeWFueQorICovCisKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgTmV0c2NhcGUgUG9ydGFibGUgUnVudGltZSAoTlNQUikuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMAorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKy8vIENvcHlyaWdodCAoYykgMjAwNiwgR29vZ2xlIEluYy4KKy8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyAgIE5vdGljZSB0aGF0IHRoZSBmb2xsb3dpbmcgQlNELXN0eWxlIGxpY2Vuc2UgYXBwbGllcyB0byB0aGUgVmFsZ3JpbmQgaGVhZGVyCisgICBmaWxlcyB1c2VkIGJ5IENocm9taXVtICh2YWxncmluZC5oIGFuZCBtZW1jaGVjay5oKS4gSG93ZXZlciwgdGhlIHJlc3Qgb2YKKyAgIFZhbGdyaW5kIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgICB2ZXJzaW9uIDIsIHVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLgorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA4IEp1bGlhbiBTZXdhcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKworICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgMi4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCAKKyAgICAgIG5vdCBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuICBJZiB5b3UgdXNlIHRoaXMgCisgICAgICBzb2Z0d2FyZSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IAorICAgICAgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZSBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorCisgICAzLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0CisgICAgICBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorCisgICA0LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgCisgICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gCisgICAgICBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworICAgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCisgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAgIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFCisgICBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworICBDb3B5cmlnaHQgKGMpIDIwMDcgUmVkIEhhdCwgaW5jCisKKyAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKKyAgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwKKyAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwKKyAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKKyAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorCisgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKKworICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAgU09GVFdBUkUuCisKK0NvcHlyaWdodCAyMDAzLTIwMDUgQ29saW4gUGVyY2l2YWwKK0FsbCByaWdodHMgcmVzZXJ2ZWQKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkaW5nIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIAorYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKK0lOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworICAgQ29weXJpZ2h0IDIwMDctMjAwOSBHb29nbGUgSW5jLgorICAgQ29weXJpZ2h0IDIwMDctMjAwOSBXZWJEcml2ZXIgY29tbWl0dGVycworCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKK0NvcHlyaWdodCAoQykgMjAwOSBieSBUdW5nIE1hYy4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgTmV0c2NhcGUgc2VjdXJpdHkgbGlicmFyaWVzLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAwCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBOZXRzY2FwZSBzZWN1cml0eSBsaWJyYXJpZXMuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTQtMjAwMAorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKK0NvcHlyaWdodCAyMDExLCBUaGUgQ2hyb21pdW0gQXV0aG9ycworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCitpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCitjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQordGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCisKKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisvKgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorKioKKyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisqKiAiTWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyoqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisqKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqKgorKiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyoqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KKyoqCisqKiBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisqKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisqKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisqKiBNQVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgorKi8KKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyhXZWJLaXQgZG9lc24ndCBkaXN0cmlidXRlIGFuIGV4cGxpY2l0IGxpY2Vuc2UuICBUaGlzIExJQ0VOU0UgaXMgZGVyaXZlZCBmcm9tCitsaWNlbnNlIHRleHQgaW4gdGhlIHNvdXJjZS4pCisKK0NvcHlyaWdodCAoYykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwKKzIwMDYsIDIwMDcgQWxleGFuZGVyIEtlbGxldHQsIEFsZXhleSBQcm9za3VyeWFrb3YsIEFsZXggTWF0aGV3cywgQWxsYW4KK1NhbmRmZWxkIEplbnNlbiwgQWxwIFRva2VyLCBBbmRlcnMgQ2FybHNzb24sIEFuZHJldyBXZWxsaW5ndG9uLCBBbnR0aQorS29pdmlzdG8sIEFwcGxlIEluYy4sIEFydGh1ciBMYW5nZXJlaXMsIEJhcm9uIFNjaHdhcnR6LCBCam9lcm4gR3JhZiwKK0JyZW50IEZ1bGdoYW0sIENhbWVyb24gWndhcmljaCwgQ2hhcmxlcyBTYW11ZWxzLCBDaHJpc3RpYW4gRHl3YW4sCitDb2xsYWJvcmEgTHRkLiwgQ3lydXMgUGF0ZWwsIERhbmllbCBNb2xrZW50aW4sIERhdmUgTWFjbGFjaGxhbiwgRGF2aWQKK1NtaXRoLCBEYXdpdCBBbGVtYXllaHUsIERpcmsgTXVlbGxlciwgRGlyayBTY2h1bHplLCBEb24gR2lic29uLCBFbnJpY28KK1JvcywgRXJpYyBTZWlkZWwsIEZyZWRlcmlrIEhvbGxqZW4sIEZyZXJpY2ggUmFhYmUsIEZyaWVkbWFubiBLbGVpbnQsCitHZW9yZ2UgU3RhaWtvcywgR29vZ2xlIEluYy4sIEdyYWhhbSBEZW5uaXMsIEhhcnJpIFBvcnRlbiwgSGVucnkgTWFzb24sCitIaXJveXVraSBJa2V6b2UsIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyLCBJQk0sIEphbWVzIEcuIFNwZXRoLCBKYW4KK0Fsb256bywgSmVhbi1Mb3VwIEdhaWxseSwgSm9obiBSZWlzLCBKb25hcyBXaXR0LCBKb24gU2hpZXIsIEpvbmFzCitXaXR0LCBKdWxpZW4gQ2hhZmZyYWl4LCBKdXN0aW4gSGF5Z29vZCwgS2V2aW4gT2xsaXZpZXIsIEtldmluIFdhdHRlcnMsCitLaW1tbyBLaW5udW5lbiwgS291aGVpIFN1dG91LCBLcnp5c3p0b2YgS293YWxjenlrLCBMYXJzIEtub2xsLCBMdWNhCitCcnVubywgTWFrcyBPcmxvdmljaCwgTWFsdGUgU3Rhcm9zdGlrLCBNYXJrIEFkbGVyLCBNYXJ0aW4gSm9uZXMsCitNYXJ2aW4gRGVja2VyLCBNYXR0IExpbGVrLCBNaWNoYWVsIEVtbWVsLCBNaXR6IFBldHRlbCwgbW96aWxsYS5vcmcsCitOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbiwgTmljaG9sYXMgU2hhbmtzLCBOaWtvbGFzCitaaW1tZXJtYW5uLCBOb2tpYSwgT2xpdmVyIEh1bnQsIE9wZW5lZCBIYW5kLCBQYXVsIEpvaG5zdG9uLCBQZXRlcgorS2VsbHksIFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgUmljaCBNb29yZSwgUm9iIEJ1aXMsIFJvYmluIER1bm4sCitSb25hbGQgVHNjaGFsw6RyLCBTYW11ZWwgV2VpbmlnLCBTaW1vbiBIYXVzbWFubiwgU3RhaWtvcyBDb21wdXRpbmcKK1NlcnZpY2VzIEluYy4sIFN0ZWZhbiBTY2hpbWFuc2tpLCBTeW1hbnRlYyBDb3Jwb3JhdGlvbiwgVGhlIERvam8KK0ZvdW5kYXRpb24sIFRoZSBLYXJib24gRGV2ZWxvcGVycywgVGhvbWFzIEJveWVyLCBUaW0gQ29wcGVyZmllbGQsCitUb2JpYXMgQW50b24sIFRvcmJlbiBXZWlzLCBUcm9sbHRlY2gsIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLCBWYWNsYXYKK1NsYXZpaywgV2FsZG8gQmFzdGlhbiwgWGFuIExvcGV6LCBaYWNrIFJ1c2luCisKK1RoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB2YXJ5IGZyb20gZmlsZSB0byBmaWxlLCBidXQgYXJlIG9uZSBvZjoKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KKworKk9SKgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKK0NPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCitQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyAgICAgICAgICAgICAgICAgIEdOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgR1BMLiAgSXQgaXMKKyBudW1iZXJlZCAyIGJlY2F1c2UgaXQgZ29lcyB3aXRoIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR1BMLl0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UKK2ZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBUaGlzIGxpY2Vuc2UsIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQorc3BlY2lhbGx5IGRlc2lnbmF0ZWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlLCBhbmQgdG8gYW55CitvdGhlciBsaWJyYXJpZXMgd2hvc2UgYXV0aG9ycyBkZWNpZGUgdG8gdXNlIGl0LiAgWW91IGNhbiB1c2UgaXQgZm9yCit5b3VyIGxpYnJhcmllcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmCit5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKK29yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKK3lvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKK2NvZGUuICBJZiB5b3UgbGluayBhIHByb2dyYW0gd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZQorY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzIHNvIHRoYXQgdGhleSBjYW4gcmVsaW5rIHRoZW0KK3dpdGggdGhlIGxpYnJhcnksIGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZworaXQuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKyAgT3VyIG1ldGhvZCBvZiBwcm90ZWN0aW5nIHlvdXIgcmlnaHRzIGhhcyB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQKK3RoZSBsaWJyYXJ5LCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworICBBbHNvLCBmb3IgZWFjaCBkaXN0cmlidXRvcidzIHByb3RlY3Rpb24sIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorbGlicmFyeS4gIElmIHRoZSBsaWJyYXJ5IGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbAordmVyc2lvbiwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbgordGhlIG9yaWdpbmFsIGF1dGhvcnMnIHJlcHV0YXRpb25zLgorDAorICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IGNvbXBhbmllcyBkaXN0cmlidXRpbmcgZnJlZQorc29mdHdhcmUgd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgdGh1cyBpbiBlZmZlY3QKK3RyYW5zZm9ybWluZyB0aGUgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHNvZnR3YXJlLiAgVG8gcHJldmVudCB0aGlzLAord2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzCitmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5CitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggd2FzIGRlc2lnbmVkIGZvciB1dGlsaXR5IHByb2dyYW1zLiAgVGhpcworbGljZW5zZSwgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gY2VydGFpbgorZGVzaWduYXRlZCBsaWJyYXJpZXMuICBUaGlzIGxpY2Vuc2UgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5CitvbmU7IGJlIHN1cmUgdG8gcmVhZCBpdCBpbiBmdWxsLCBhbmQgZG9uJ3QgYXNzdW1lIHRoYXQgYW55dGhpbmcgaW4gaXQgaXMKK3RoZSBzYW1lIGFzIGluIHRoZSBvcmRpbmFyeSBsaWNlbnNlLgorCisgIFRoZSByZWFzb24gd2UgaGF2ZSBhIHNlcGFyYXRlIHB1YmxpYyBsaWNlbnNlIGZvciBzb21lIGxpYnJhcmllcyBpcyB0aGF0Cit0aGV5IGJsdXIgdGhlIGRpc3RpbmN0aW9uIHdlIHVzdWFsbHkgbWFrZSBiZXR3ZWVuIG1vZGlmeWluZyBvciBhZGRpbmcgdG8gYQorcHJvZ3JhbSBhbmQgc2ltcGx5IHVzaW5nIGl0LiAgTGlua2luZyBhIHByb2dyYW0gd2l0aCBhIGxpYnJhcnksIHdpdGhvdXQKK2NoYW5naW5nIHRoZSBsaWJyYXJ5LCBpcyBpbiBzb21lIHNlbnNlIHNpbXBseSB1c2luZyB0aGUgbGlicmFyeSwgYW5kIGlzCithbmFsb2dvdXMgdG8gcnVubmluZyBhIHV0aWxpdHkgcHJvZ3JhbSBvciBhcHBsaWNhdGlvbiBwcm9ncmFtLiAgSG93ZXZlciwgaW4KK2EgdGV4dHVhbCBhbmQgbGVnYWwgc2Vuc2UsIHRoZSBsaW5rZWQgZXhlY3V0YWJsZSBpcyBhIGNvbWJpbmVkIHdvcmssIGEKK2Rlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnksIGFuZCB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQordHJlYXRzIGl0IGFzIHN1Y2guCisKKyAgQmVjYXVzZSBvZiB0aGlzIGJsdXJyZWQgZGlzdGluY3Rpb24sIHVzaW5nIHRoZSBvcmRpbmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBmb3IgbGlicmFyaWVzIGRpZCBub3QgZWZmZWN0aXZlbHkgcHJvbW90ZSBzb2Z0d2FyZQorc2hhcmluZywgYmVjYXVzZSBtb3N0IGRldmVsb3BlcnMgZGlkIG5vdCB1c2UgdGhlIGxpYnJhcmllcy4gIFdlCitjb25jbHVkZWQgdGhhdCB3ZWFrZXIgY29uZGl0aW9ucyBtaWdodCBwcm9tb3RlIHNoYXJpbmcgYmV0dGVyLgorCisgIEhvd2V2ZXIsIHVucmVzdHJpY3RlZCBsaW5raW5nIG9mIG5vbi1mcmVlIHByb2dyYW1zIHdvdWxkIGRlcHJpdmUgdGhlCit1c2VycyBvZiB0aG9zZSBwcm9ncmFtcyBvZiBhbGwgYmVuZWZpdCBmcm9tIHRoZSBmcmVlIHN0YXR1cyBvZiB0aGUKK2xpYnJhcmllcyB0aGVtc2VsdmVzLiAgVGhpcyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8KK3Blcm1pdCBkZXZlbG9wZXJzIG9mIG5vbi1mcmVlIHByb2dyYW1zIHRvIHVzZSBmcmVlIGxpYnJhcmllcywgd2hpbGUKK3ByZXNlcnZpbmcgeW91ciBmcmVlZG9tIGFzIGEgdXNlciBvZiBzdWNoIHByb2dyYW1zIHRvIGNoYW5nZSB0aGUgZnJlZQorbGlicmFyaWVzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGVtLiAgKFdlIGhhdmUgbm90IHNlZW4gaG93IHRvIGFjaGlldmUKK3RoaXMgYXMgcmVnYXJkcyBjaGFuZ2VzIGluIGhlYWRlciBmaWxlcywgYnV0IHdlIGhhdmUgYWNoaWV2ZWQgaXQgYXMgcmVnYXJkcworY2hhbmdlcyBpbiB0aGUgYWN0dWFsIGZ1bmN0aW9ucyBvZiB0aGUgTGlicmFyeS4pICBUaGUgaG9wZSBpcyB0aGF0IHRoaXMKK3dpbGwgbGVhZCB0byBmYXN0ZXIgZGV2ZWxvcG1lbnQgb2YgZnJlZSBsaWJyYXJpZXMuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuICBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYQorIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKK2Zvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hpbGUgdGhlIGxhdHRlciBvbmx5Cit3b3JrcyB0b2dldGhlciB3aXRoIHRoZSBsaWJyYXJ5LgorCisgIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBsaWJyYXJ5IHRvIGJlIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5CitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJhdGhlciB0aGFuIGJ5IHRoaXMgc3BlY2lhbCBvbmUuCisMCisgICAgICAgICAgICAgICAgICBHTlUgTElCUkFSWSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgd2hpY2gKK2NvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvciBvdGhlciBhdXRob3JpemVkCitwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpYnJhcnkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4gIEVhY2ggbGljZW5zZWUgaXMKK2FkZHJlc3NlZCBhcyAieW91Ii4KKworICBBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhCitwcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMKKyh3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCisKKyAgVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsKK3doaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkiIG1lYW5zIGVpdGhlciB0aGUgTGlicmFyeSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyCitjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYQorcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZAorc3RyYWlnaHRmb3J3YXJkbHkgaW50byBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcworaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKKworICAiU291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucworYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKK2ludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbgorYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQorc3VjaCBhIHByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvcgord3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcworYW5kIHdoYXQgdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IGRvZXMuCisgIAorICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MKK2NvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0Cit5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgorYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QKK2FsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55Cit3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQorTGlicmFyeS4KKworICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAorYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYQorZmVlLgorDAorICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBMaWJyYXJ5IG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCisgICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKKyAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCisgICAgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eQorICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAorICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgorICAgIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mCisgICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorCisgICAgKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMKKyAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCisgICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKKyAgICBhcHBsaWNhdGlvbi1zdXBwbGllZCBmdW5jdGlvbiBvciB0YWJsZSB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdAorICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCisgICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZQoraXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKK3dpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KK3RoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28KK3RoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKK2luc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkKK3RoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KK3RoZXNlIG5vdGljZXMuCisMCisgIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKK3RoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCitzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCisgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgordGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCisgIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCitkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybQordW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55CitpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCittdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICBJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKK3NvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bworZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZQorTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgorbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKK3dvcmssIGluIGlzb2xhdGlvbiwgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5LCBhbmQKK3RoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeQorY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0Citjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQorbGlicmFyeSIuICBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCitTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworICBXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZQordGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCitkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KK1doZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlCitsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQordGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KKworICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQorc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCitmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0CitmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCit3b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQorTGlicmFyeSB3aWxsIHN0aWxsIGZhbGwgdW5kZXIgU2VjdGlvbiA2LikKKworICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQorZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuCitBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKK3doZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKwwKKyAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbXBpbGUgb3IKK2xpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCit3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawordW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKK0xpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieQordGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yaworZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKK2NvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UKK2RpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKK29mIHRoZXNlIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCisgICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCisgICAgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIKKyAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAorICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAorICAgIHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlCisgICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKKyAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAorICAgIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZQorICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCisgICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCisKKyAgICBiKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAorICAgIGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscworICAgIHNwZWNpZmllZCBpbiBTdWJzZWN0aW9uIDZhLCBhYm92ZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUKKyAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCisKKyAgICBjKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQorICAgIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KKworICAgIGQpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQorICAgIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgorCisgIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQorTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKK3JlcHJvZHVjaW5nIHRoZSBleGVjdXRhYmxlIGZyb20gaXQuICBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLAordGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseQorZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCitjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCit3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzCit0aGUgZXhlY3V0YWJsZS4KKworICBJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZQorcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQorYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAordXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdQorZGlzdHJpYnV0ZS4KKwwKKyAgNy4gWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKK2ZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKK2xpYnJhcnksIHByb3ZpZGVkIHRoYXQgdGhlIHNlcGFyYXRlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBiYXNlZCBvbgordGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCitwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKKyAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CisgICAgZmFjaWxpdGllcy4gIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgICAgU2VjdGlvbnMgYWJvdmUuCisKKyAgICBiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdAorICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCisgICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCisgIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCit0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQorYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKK29yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMKK3Rlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQorc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKwwKKyAgMTEuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CitwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksCithbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIExpYnJhcnkgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQKK2FuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLAorc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzCitleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZgord3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTMuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3Cit2ZXJzaW9ucyBvZiB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgorU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLAorYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBMaWJyYXJ5CitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKKyJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKK2xpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorDAorICAxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsCit3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcworY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIKK2RlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKK29mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nCithbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk8gV0FSUkFOVFkKKworICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KK1dBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuCitFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUgorT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKK0tJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKK0xJQlJBUlkgSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FCitUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KK1dSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZCitBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQorRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUKK0xJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKK1JFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBCitGQUlMVVJFIE9GIFRIRSBMSUJSQVJZIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgU09GVFdBUkUpLCBFVkVOIElGCitTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0VTLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4xLCBGZWJydWFyeSAxOTk5CisKKyBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBMZXNzZXIgR1BMLiAgSXQgYWxzbyBjb3VudHMKKyBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQorIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQorZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgorCisgIFRoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIHNvZnR3YXJlIHBhY2thZ2VzLS10eXBpY2FsbHkgbGlicmFyaWVzLS1vZiB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQorY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlcgordGhpcyBsaWNlbnNlIG9yIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIHRoZSBiZXR0ZXIKK3N0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwKK25vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKK3lvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKK2ZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpOyB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQKK2l0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgoraXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCit0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorZGlzdHJpYnV0b3JzIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGVzZQorcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCit5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKK29yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKK3lvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKK2NvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQord2l0aCB0aGUgbGlicmFyeSBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUKK2xpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKK3RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKK21vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB0aGUgcmVjaXBpZW50cyBzaG91bGQga25vdwordGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCithdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKK2ludHJvZHVjZWQgYnkgb3RoZXJzLgorDAorICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgorYW55IGZyZWUgcHJvZ3JhbS4gIFdlIHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgYSBjb21wYW55IGNhbm5vdAorZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCityZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAorYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZQorY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCisKKyAgTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKK2lzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgV2UgdXNlCit0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCitsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KKworICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZworYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCitjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuICBUaGUgb3JkaW5hcnkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCitlbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgcGVybWl0cyBtb3JlIGxheCBjcml0ZXJpYSBmb3IgbGlua2luZyBvdGhlciBjb2RlIHdpdGgKK3RoZSBsaWJyYXJ5LgorCisgIFdlIGNhbGwgdGhpcyBsaWNlbnNlIHRoZSAiTGVzc2VyIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJlY2F1c2UgaXQKK2RvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKK29mIGFuIGFkdmFudGFnZSBvdmVyIGNvbXBldGluZyBub24tZnJlZSBwcm9ncmFtcy4gIFRoZXNlIGRpc2FkdmFudGFnZXMKK2FyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQorbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgorc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgorCisgIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCitlbmNvdXJhZ2UgdGhlIHdpZGVzdCBwb3NzaWJsZSB1c2Ugb2YgYSBjZXJ0YWluIGxpYnJhcnksIHNvIHRoYXQgaXQgYmVjb21lcworYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQorYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQorbGlicmFyeSBkb2VzIHRoZSBzYW1lIGpvYiBhcyB3aWRlbHkgdXNlZCBub24tZnJlZSBsaWJyYXJpZXMuICBJbiB0aGlzCitjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKK3NvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCitwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKK2ZyZWUgc29mdHdhcmUuICBGb3IgZXhhbXBsZSwgcGVybWlzc2lvbiB0byB1c2UgdGhlIEdOVSBDIExpYnJhcnkgaW4KK25vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQorb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcKK3N5c3RlbS4KKworICBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZQordXNlcnMnIGZyZWVkb20sIGl0IGRvZXMgZW5zdXJlIHRoYXQgdGhlIHVzZXIgb2YgYSBwcm9ncmFtIHRoYXQgaXMKK2xpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgordGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCisid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gIFRoZQorZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdAorYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCisMCisgICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgorcHJvZ3JhbSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3IKK290aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KK0VhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCitzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yCit3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCithbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MKK2NvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0Cit5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgorYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QKK2FsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55Cit3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQorTGlicmFyeS4KKworICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAorYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYQorZmVlLgorDAorICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBMaWJyYXJ5IG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCisgICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKKyAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCisgICAgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eQorICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAorICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgorICAgIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mCisgICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorCisgICAgKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMKKyAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCisgICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKKyAgICBhcHBsaWNhdGlvbi1zdXBwbGllZCBmdW5jdGlvbiBvciB0YWJsZSB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdAorICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCisgICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZQoraXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKK3dpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KK3RoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28KK3RoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKK2luc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkKK3RoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KK3RoZXNlIG5vdGljZXMuCisMCisgIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKK3RoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCitzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCisgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgordGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCisgIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCitkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybQordW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55CitpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCittdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICBJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKK3NvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bworZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZQorTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgorbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKK3dvcmssIGluIGlzb2xhdGlvbiwgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5LCBhbmQKK3RoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeQorY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0Citjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQorbGlicmFyeSIuICBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCitTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworICBXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZQordGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCitkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KK1doZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlCitsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQordGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KKworICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQorc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCitmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0CitmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCit3b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQorTGlicmFyeSB3aWxsIHN0aWxsIGZhbGwgdW5kZXIgU2VjdGlvbiA2LikKKworICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQorZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuCitBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKK3doZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKwwKKyAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKK2xpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCit3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawordW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKK0xpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieQordGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yaworZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKK2NvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UKK2RpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKK29mIHRoZXNlIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCisgICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCisgICAgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIKKyAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAorICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAorICAgIHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlCisgICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKKyAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAorICAgIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZQorICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCisgICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCisKKyAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKKyAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQorICAgIGNvcHkgb2YgdGhlIGxpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLAorICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQorICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKKyAgICB0aGUgdXNlciBpbnN0YWxscyBvbmUsIGFzIGxvbmcgYXMgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMKKyAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KKworICAgIGMpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZSkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgbWF0ZXJpYWxzIHRvIGJlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcworbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCitjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCit3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzCit0aGUgZXhlY3V0YWJsZS4KKworICBJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZQorcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQorYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAordXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdQorZGlzdHJpYnV0ZS4KKwwKKyAgNy4gWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKK2ZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKK2xpYnJhcnksIHByb3ZpZGVkIHRoYXQgdGhlIHNlcGFyYXRlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBiYXNlZCBvbgordGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCitwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKKyAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CisgICAgZmFjaWxpdGllcy4gIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgICAgU2VjdGlvbnMgYWJvdmUuCisKKyAgICBiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdAorICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCisgICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCisgIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCit0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQorYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKK29yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMKK3Rlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQorc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK1N1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKK2J1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCisiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCitsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKwwKKyAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAord3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKK2NvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCitkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCitvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZworYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PIFdBUlJBTlRZCisKKyAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCitXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLgorRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKK09USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQorVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCitXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQorQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKK0ZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HCitSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQorRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgorU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKy8vIENvcHlyaWdodCAoQykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIAorLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLy8gYXJlIG1ldDoKKy8vCisvLyAgICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLworLy8gICAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgCisvLyAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLworLy8gICAgIE5laXRoZXIgdGhlIG5hbWUgb2YgVHJhbnNHYW1pbmcgSW5jLiwgR29vZ2xlIEluYy4sIDNETGFicyBJbmMuCisvLyAgICAgTHRkLiwgbm9yIHRoZSBuYW1lcyBvZiB0aGVpciBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQorLy8gICAgIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworLy8gICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCAKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisvLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorLy8gQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKy8vIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKy8vIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKy8vIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorLy8gTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKy8vIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK0NvcHlyaWdodCAoYykgMjAxMiwgTWFuZnJlZCBNb2l0emkKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgCitjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIAorIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAKK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgCitkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAKK2luIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgCitPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIAorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAKK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIAorQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgCitUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSAKK1NPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKworRGV1dHNjaGUgw5xiZXJzZXR6dW5nOgorCitDb3B5cmlnaHQgKGMpIDIwMTIsIE1hbmZyZWQgTW9pdHppCisKK0hpZXJtaXQgd2lyZCB1bmVudGdlbHRsaWNoLCBqZWRlciBQZXJzb24sIGRpZSBlaW5lIEtvcGllIGRlciBTb2Z0d2FyZSAKK3VuZCBkZXIgenVnZWjDtnJpZ2VuIERva3VtZW50YXRpb25lbiAoZGllICJTb2Z0d2FyZSIpIGVyaMOkbHQsIGRpZSAKK0VybGF1Ym5pcyBlcnRlaWx0LCB1bmVpbmdlc2NocsOkbmt0IHp1IGJlbnV0emVuLCBpbmtsdXNpdmUgdW5kIG9obmUgCitBdXNuYWhtZSwgZGVtIFJlY2h0LCBzaWUgenUgdmVyd2VuZGVuLCBrb3BpZXJlbiwgw6RuZGVybiwgZnVzaW9uaWVyZW4sIAordmVybGVnZW4sIHZlcmJyZWl0ZW4sIHVudGVybGl6ZW56aWVyZW4gdW5kL29kZXIgenUgdmVya2F1ZmVuLCB1bmQgCitQZXJzb25lbiwgZGllIGRpZXNlIFNvZnR3YXJlIGVyaGFsdGVuLCBkaWVzZSBSZWNodGUgenUgZ2ViZW4sIHVudGVyIGRlbiAKK2ZvbGdlbmRlbiBCZWRpbmd1bmdlbjogCisKK0RlciBvYmlnZSBVcmhlYmVycmVjaHRzdmVybWVyayB1bmQgZGllc2VyIEVybGF1Ym5pc3Zlcm1lcmsgc2luZCBpbiBhbGxlbiAKK0tvcGllbiBvZGVyIFRlaWxrb3BpZW4gZGVyIFNvZnR3YXJlIGJlaXp1bGVnZW4uIAorCitESUUgU09GVFdBUkUgV0lSRCBPSE5FIEpFREUgQVVTRFLDnENLTElDSEUgT0RFUiBJTVBMSVpJRVJURSBHQVJBTlRJRSAKK0JFUkVJVEdFU1RFTExULCBFSU5TQ0hMSUVTU0xJQ0ggREVSIEdBUkFOVElFIFpVUiBCRU5VVFpVTkcgRsOcUiBERU4gCitWT1JHRVNFSEVORU4gT0RFUiBFSU5FTSBCRVNUSU1NVEVOIFpXRUNLIFNPV0lFIEpFR0xJQ0hFUiAKK1JFQ0hUU1ZFUkxFVFpVTkcsIEpFRE9DSCBOSUNIVCBEQVJBVUYgQkVTQ0hSw4ROS1QuIElOIEtFSU5FTSBGQUxMIFNJTkQgCitESUUgQVVUT1JFTiBPREVSIENPUFlSSUdIVElOSEFCRVIgRsOcUiBKRUdMSUNIRU4gU0NIQURFTiBPREVSIFNPTlNUSUdFIAorQU5TUFLDnENIRSBIQUZUQkFSIFpVIE1BQ0hFTiwgT0IgSU5GT0xHRSBERVIgRVJGw5xMTFVORyBFSU5FUyBWRVJUUkFHRVMsIAorRUlORVMgREVMSUtURVMgT0RFUiBBTkRFUlMgSU0gWlVTQU1NRU5IQU5HIE1JVCBERVIgU09GVFdBUkUgT0RFUiAKK1NPTlNUSUdFUiBWRVJXRU5EVU5HIERFUiBTT0ZUV0FSRSBFTlRTVEFOREVOLiAKKworCisvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTU9aSUxMQSBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0KKworMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgMS4wLjEuICJDb21tZXJjaWFsIFVzZSIgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlCisgICAgIENvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKworICAgICAxLjEuICJDb250cmlidXRvciIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvCisgICAgIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisgICAgIDEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwKKyAgICAgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucworICAgICBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworICAgICAxLjMuICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlCisgICAgIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UKKyAgICAgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKyAgICAgMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkKKyAgICAgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMKKyAgICAgdHJhbnNmZXIgb2YgZGF0YS4KKworICAgICAxLjUuICJFeGVjdXRhYmxlIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UKKyAgICAgQ29kZS4KKworICAgICAxLjYuICJJbml0aWFsIERldmVsb3BlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQKKyAgICAgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdAorICAgICBBLgorCisgICAgIDEuNy4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yCisgICAgIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgIDEuOC4gIkxpY2Vuc2UiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bQorICAgICBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3IKKyAgICAgc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworICAgICAxLjkuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUKKyAgICAgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzCisgICAgIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhCisgICAgIE1vZGlmaWNhdGlvbiBpczoKKyAgICAgICAgICBBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlCisgICAgICAgICAgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKyAgICAgICAgICBCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvcgorICAgICAgICAgIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKyAgICAgMS4xMC4gIk9yaWdpbmFsIENvZGUiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUKKyAgICAgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzCisgICAgIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcworICAgICBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yCisgICAgIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLAorICAgICBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisKKyAgICAgMS4xMS4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IKKyAgICAgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cworICAgICBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wKKyAgICAgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZQorICAgICBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlcgorICAgICB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlCisgICAgIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlCisgICAgIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUKKyAgICAgZm9yIG5vIGNoYXJnZS4KKworICAgICAxLjEyLiAiWW91IiAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5CisgICAgIGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcworICAgICBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4KKyAgICAgRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcworICAgICBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mCisgICAgIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwKKyAgICAgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5CisgICAgIGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudAorICAgICAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2gKKyAgICAgZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisgICAgIDIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorICAgICBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCisgICAgIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKKyAgICAgY2xhaW1zOgorICAgICAgICAgIChhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvcgorICAgICAgICAgIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwKKyAgICAgICAgICBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsCisgICAgICAgICAgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vcgorICAgICAgICAgIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyAgICAgICAgICAoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yCisgICAgICAgICAgc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsCisgICAgICAgICAgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlCisgICAgICAgICAgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisKKyAgICAgICAgICAoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZQorICAgICAgICAgIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcworICAgICAgICAgIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgICAgICAgIChkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzCisgICAgICAgICAgZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpCisgICAgICAgICAgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkCisgICAgICAgICAgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZQorICAgICAgICAgIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4KKworICAgICAyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorICAgICBTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IKKyAgICAgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorCisgICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCisgICAgICAgICAgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LAorICAgICAgICAgIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMKKyAgICAgICAgICBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbgorICAgICAgICAgIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlCisgICAgICAgICAgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyAgICAgICAgICAoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yCisgICAgICAgICAgc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUKKyAgICAgICAgICBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMKKyAgICAgICAgICBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZQorICAgICAgICAgIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKKyAgICAgICAgICBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YKKyAgICAgICAgICBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvcgorICAgICAgICAgIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCisgICAgICAgICAgKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZQorICAgICAgICAgIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZgorICAgICAgICAgIHRoZSBDb3ZlcmVkIENvZGUuCisKKyAgICAgICAgICAoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcworICAgICAgICAgIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlCisgICAgICAgICAgQ29udHJpYnV0b3IgVmVyc2lvbjsgMikgc2VwYXJhdGUgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsKKyAgICAgICAgICAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YKKyAgICAgICAgICBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlCisgICAgICAgICAgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zCisgICAgICAgICAgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkKKyAgICAgICAgICB0aGF0IENvbnRyaWJ1dG9yLgorCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKyAgICAgMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorICAgICBUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZQorICAgICBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgICAgIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlCisgICAgIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uCisgICAgIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYQorICAgICBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorICAgICBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZQorICAgICB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMKKyAgICAgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlCisgICAgIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbgorICAgICBTZWN0aW9uIDMuNS4KKworICAgICAzLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KKyAgICAgQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUKKyAgICAgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCisgICAgIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkCisgICAgIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbgorICAgICBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMKKyAgICAgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKQorICAgICBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeAorICAgICAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24KKyAgICAgaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvcgorICAgICBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlCisgICAgIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKyAgICAgMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorICAgICBZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYQorICAgICBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQKKyAgICAgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdAorICAgICB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwKKyAgICAgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUKKyAgICAgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuCisgICAgIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZQorICAgICBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKyAgICAgMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworICAgICAgICAgIChhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCisgICAgICAgICAgSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5J3MKKyAgICAgICAgICBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMKKyAgICAgICAgICBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwKKyAgICAgICAgICBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUKKyAgICAgICAgICBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlCisgICAgICAgICAgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwKKyAgICAgICAgICBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlcgorICAgICAgICAgIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLAorICAgICAgICAgIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzCisgICAgICAgICAgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMKKyAgICAgICAgICAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKQorICAgICAgICAgIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkCisgICAgICAgICAgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyAgICAgICAgICAoYikgQ29udHJpYnV0b3IgQVBJcy4KKyAgICAgICAgICBJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZworICAgICAgICAgIGludGVyZmFjZSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2gKKyAgICAgICAgICBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0CisgICAgICAgICAgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKyAgICAgICAgICAoYykgUmVwcmVzZW50YXRpb25zLgorICAgICAgICAgIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0bworICAgICAgICAgIFNlY3Rpb24gMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yJ3MKKyAgICAgICAgICBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcidzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vcgorICAgICAgICAgIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5CisgICAgICAgICAgdGhpcyBMaWNlbnNlLgorCisgICAgIDMuNS4gUmVxdWlyZWQgTm90aWNlcy4KKyAgICAgWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCisgICAgIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZQorICAgICBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhCisgICAgIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5CisgICAgIHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKQorICAgICBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbgorICAgICBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbgorICAgICBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgb3Igb3duZXJzaGlwCisgICAgIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8KKyAgICAgY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkKKyAgICAgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdQorICAgICBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsCisgICAgIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuCisgICAgIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMKKyAgICAgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbAorICAgICBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZQorICAgICBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LAorICAgICBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorICAgICBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZQorICAgICByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLAorICAgICBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mCisgICAgIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCisgICAgIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZQorICAgICBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQKKyAgICAgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorICAgICBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlCisgICAgIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZAorICAgICBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkKKyAgICAgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbgorICAgICBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlCisgICAgIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncworICAgICByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzCisgICAgIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQKKyAgICAgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyCisgICAgIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsCisgICAgIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZQorICAgICBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkKKyAgICAgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2gKKyAgICAgdGVybXMgWW91IG9mZmVyLgorCisgICAgIDMuNy4gTGFyZ2VyIFdvcmtzLgorICAgICBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlCisgICAgIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIKKyAgICAgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZQorICAgICByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KKworICAgICBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzCisgICAgIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvCisgICAgIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aAorICAgICB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKQorICAgICBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uCisgICAgIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0CisgICAgIGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlCisgICAgIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlCisgICAgIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0bworICAgICB1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzCisgICAgIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKyAgICAgNi4xLiBOZXcgVmVyc2lvbnMuCisgICAgIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uICgiTmV0c2NhcGUiKSBtYXkgcHVibGlzaCByZXZpc2VkCisgICAgIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbgorICAgICB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKyAgICAgNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorICAgICBPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlCisgICAgIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdAorICAgICB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMKKyAgICAgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTmV0c2NhcGUuIE5vIG9uZQorICAgICBvdGhlciB0aGFuIE5ldHNjYXBlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvCisgICAgIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgICA2LjMuIERlcml2YXRpdmUgV29ya3MuCisgICAgIElmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkKKyAgICAgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZQorICAgICBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0CisgICAgIHRoZSBwaHJhc2VzICJNb3ppbGxhIiwgIk1PWklMTEFQTCIsICJNT1pQTCIsICJOZXRzY2FwZSIsCisgICAgICJNUEwiLCAiTlBMIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyCisgICAgIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpCisgICAgIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UKKyAgICAgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgYW5kCisgICAgIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbAorICAgICBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4KKyAgICAgRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mCisgICAgIHRoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKKyAgICAgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywKKyAgICAgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GCisgICAgIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4KKyAgICAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFCisgICAgIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsCisgICAgIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUKKyAgICAgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUgorICAgICBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRgorICAgICBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorCisgICAgIDguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlCisgICAgIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUKKyAgICAgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsCisgICAgIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwKKyAgICAgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpcgorICAgICBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZQorICAgICBzaGFsbCBzdXJ2aXZlLgorCisgICAgIDguMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudAorICAgICBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyCisgICAgIG9yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20KKyAgICAgWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikgYWxsZWdpbmcgdGhhdDoKKworICAgICAoYSkgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseQorICAgICBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoCisgICAgIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2UKKyAgICAgc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwKKyAgICAgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKQorICAgICBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlCisgICAgIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaAorICAgICBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvCisgICAgIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMKKyAgICAgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90CisgICAgIG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0KKyAgICAgaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlcgorICAgICBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZgorICAgICB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisgICAgIChiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzCisgICAgIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4KKyAgICAgYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKQorICAgICBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwKKyAgICAgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorICAgICBQYXJ0aWNpcGFudC4KKworICAgICA4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQKKyAgICAgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvcgorICAgICBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMKKyAgICAgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQKKyAgICAgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzCisgICAgIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuCisgICAgIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yCisgICAgIGxpY2Vuc2UuCisKKyAgICAgOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwKKyAgICAgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKQorICAgICB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyCisgICAgIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCisgICAgIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUCisgICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwKKyAgICAgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsCisgICAgIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IKKyAgICAgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZCisgICAgIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwKKyAgICAgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIKKyAgICAgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTgorICAgICBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YKKyAgICAgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWQorICAgICBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXCisgICAgIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFCisgICAgIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTworICAgICBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKKyAgICAgVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbgorICAgICA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIKKyAgICAgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMgc3VjaAorICAgICB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4CisgICAgIEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwKKyAgICAgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlCisgICAgIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUy4KKworICAgICBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdAorICAgICBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCisgICAgIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudAorICAgICBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5CisgICAgIENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZgorICAgICBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuCisgICAgIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLAorICAgICBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZAorICAgICBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCisgICAgIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuCisgICAgIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LAorICAgICBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcKKyAgICAgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMgYW5kCisgICAgIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24KKyAgICAgQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKyAgICAgQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3QKKyAgICAgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMKKyAgICAgTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKKyAgICAgQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcworICAgICByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCisgICAgIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvCisgICAgIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaAorICAgICByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yCisgICAgIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4KKworICAgICBJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMKKyAgICAgIk11bHRpcGxlLUxpY2Vuc2VkIi4gIk11bHRpcGxlLUxpY2Vuc2VkIiBtZWFucyB0aGF0IHRoZSBJbml0aWFsCisgICAgIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIKKyAgICAgWW91ciBjaG9pY2Ugb2YgdGhlIE5QTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkCisgICAgIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorCitFWEhJQklUIEEgLU1vemlsbGEgUHVibGljIExpY2Vuc2UuCisKKyAgICAgYGBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlCisgICAgIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KKyAgICAgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisKKyAgICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorICAgICBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICAgICBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKKyAgICAgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyAgICAgVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKKyAgICAgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fXy4KKyAgICAgUG9ydGlvbnMgY3JlYXRlZCBieSBfX19fX19fX19fX19fX19fX19fX19fIGFyZSBDb3B5cmlnaHQgKEMpIF9fX19fXworICAgICBfX19fX19fX19fX19fX19fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgICBDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKKyAgICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyAgICAgb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSAiW19fX10gTGljZW5zZSIpLCBpbiB3aGljaCBjYXNlIHRoZQorICAgICBwcm92aXNpb25zIG9mIFtfX19fX19dIExpY2Vuc2UgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZQorICAgICBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorICAgICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAgICAgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisgICAgIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIExpY2Vuc2UuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgICAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyAgICAgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuIgorCisgICAgIFtOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YKKyAgICAgdGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkCisgICAgIHVzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUKKyAgICAgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KKworICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgQU1FTkRNRU5UUworCisgICAgIFRoZSBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoIk5QTCIpIGNvbnNpc3RzIG9mIHRoZQorICAgICBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIHdpdGggdGhlIGZvbGxvd2luZyBBbWVuZG1lbnRzLAorICAgICBpbmNsdWRpbmcgRXhoaWJpdCBBLU5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLiBGaWxlcyBpZGVudGlmaWVkIHdpdGgKKyAgICAgIkV4aGliaXQgQS1OZXRzY2FwZSBQdWJsaWMgTGljZW5zZSIgYXJlIGdvdmVybmVkIGJ5IHRoZSBOZXRzY2FwZQorICAgICBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMS4KKworICAgICBBZGRpdGlvbmFsIFRlcm1zIGFwcGxpY2FibGUgdG8gdGhlIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLgorICAgICAgICAgIEkuIEVmZmVjdC4KKyAgICAgICAgICBUaGVzZSBhZGRpdGlvbmFsIHRlcm1zIGRlc2NyaWJlZCBpbiB0aGlzIE5ldHNjYXBlIFB1YmxpYworICAgICAgICAgIExpY2Vuc2UgLS0gQW1lbmRtZW50cyBzaGFsbCBhcHBseSB0byB0aGUgTW96aWxsYSBDb21tdW5pY2F0b3IKKyAgICAgICAgICBjbGllbnQgY29kZSBhbmQgdG8gYWxsIENvdmVyZWQgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICBJSS4gIk5ldHNjYXBlJ3MgQnJhbmRlZCBDb2RlIiBtZWFucyBDb3ZlcmVkIENvZGUgdGhhdCBOZXRzY2FwZQorICAgICAgICAgIGRpc3RyaWJ1dGVzIGFuZC9vciBwZXJtaXRzIG90aGVycyB0byBkaXN0cmlidXRlIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgICAgdHJhZGVtYXJrKHMpIHdoaWNoIGFyZSBjb250cm9sbGVkIGJ5IE5ldHNjYXBlIGJ1dCB3aGljaCBhcmUgbm90CisgICAgICAgICAgbGljZW5zZWQgZm9yIHVzZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICBJSUkuIE5ldHNjYXBlIGFuZCBsb2dvLgorICAgICAgICAgIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcworICAgICAgICAgICJOZXRzY2FwZSIsIHRoZSAiTmV0c2NhcGUgTiBhbmQgaG9yaXpvbiIgbG9nbyBvciB0aGUgIk5ldHNjYXBlCisgICAgICAgICAgbGlnaHRob3VzZSIgbG9nbywgIk5ldGNlbnRlciIsICJHZWNrbyIsICJKYXZhIiBvciAiSmF2YVNjcmlwdCIsCisgICAgICAgICAgIlNtYXJ0IEJyb3dzaW5nIiBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbAorICAgICAgICAgIENvZGUgb3IgTW9kaWZpY2F0aW9ucy4KKworICAgICAgICAgIElWLiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBDb250cmFjdHVhbCBPYmxpZ2F0aW9uLgorICAgICAgICAgIFByaW9yIHRvIGxpY2Vuc2luZyB0aGUgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UsIE5ldHNjYXBlCisgICAgICAgICAgaGFzIGxpY2Vuc2VkIHRoaXJkIHBhcnR5IGNvZGUgZm9yIHVzZSBpbiBOZXRzY2FwZSdzIEJyYW5kZWQgQ29kZS4KKyAgICAgICAgICBUbyB0aGUgZXh0ZW50IHRoYXQgTmV0c2NhcGUgaXMgbGltaXRlZCBjb250cmFjdHVhbGx5IGZyb20gbWFraW5nCisgICAgICAgICAgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UsIE5ldHNjYXBlIG1heQorICAgICAgICAgIGNob29zZSB0byByZWludGVncmF0ZSBzdWNoIGNvZGUgaW50byBDb3ZlcmVkIENvZGUgd2l0aG91dCBiZWluZworICAgICAgICAgIHJlcXVpcmVkIHRvIGRpc3RyaWJ1dGUgc3VjaCBjb2RlIGluIFNvdXJjZSBDb2RlIGZvcm0sIGV2ZW4gaWYKKyAgICAgICAgICBzdWNoIGNvZGUgd291bGQgb3RoZXJ3aXNlIGJlIGNvbnNpZGVyZWQgIk1vZGlmaWNhdGlvbnMiIHVuZGVyCisgICAgICAgICAgdGhpcyBMaWNlbnNlLgorCisgICAgICAgICAgVi4gVXNlIG9mIE1vZGlmaWNhdGlvbnMgYW5kIENvdmVyZWQgQ29kZSBieSBJbml0aWFsIERldmVsb3Blci4KKyAgICAgICAgICAgICAgIFYuMS4gSW4gR2VuZXJhbC4KKyAgICAgICAgICAgICAgIFRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMgYXBwbHkgdG8gTmV0c2NhcGUsIGV4Y2VwdCB0bworICAgICAgICAgICAgICAgdGhlIGV4dGVudCBzcGVjaWZpZWQgaW4gdGhpcyBBbWVuZG1lbnQsIFNlY3Rpb24gVi4yIGFuZCBWLjMuCisKKyAgICAgICAgICAgICAgIFYuMi4gT3RoZXIgUHJvZHVjdHMuCisgICAgICAgICAgICAgICBOZXRzY2FwZSBtYXkgaW5jbHVkZSBDb3ZlcmVkIENvZGUgaW4gcHJvZHVjdHMgb3RoZXIgdGhhbiB0aGUKKyAgICAgICAgICAgICAgIE5ldHNjYXBlJ3MgQnJhbmRlZCBDb2RlIHdoaWNoIGFyZSByZWxlYXNlZCBieSBOZXRzY2FwZQorICAgICAgICAgICAgICAgZHVyaW5nIHRoZSB0d28gKDIpIHllYXJzIGZvbGxvd2luZyB0aGUgcmVsZWFzZSBkYXRlIG9mIHRoZQorICAgICAgICAgICAgICAgT3JpZ2luYWwgQ29kZSwgd2l0aG91dCBzdWNoIGFkZGl0aW9uYWwgcHJvZHVjdHMgYmVjb21pbmcKKyAgICAgICAgICAgICAgIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIHN1Y2gKKyAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgcHJvZHVjdHMgb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkCisgICAgICAgICAgICAgICBpbiB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICAgICAgIFYuMy4gQWx0ZXJuYXRpdmUgTGljZW5zaW5nLgorICAgICAgICAgICAgICAgTmV0c2NhcGUgbWF5IGxpY2Vuc2UgdGhlIFNvdXJjZSBDb2RlIG9mIE5ldHNjYXBlJ3MgQnJhbmRlZAorICAgICAgICAgICAgICAgQ29kZSwgaW5jbHVkaW5nIE1vZGlmaWNhdGlvbnMgaW5jb3Jwb3JhdGVkIHRoZXJlaW4sIHdpdGhvdXQKKyAgICAgICAgICAgICAgIHN1Y2ggTmV0c2NhcGUgQnJhbmRlZCBDb2RlIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mCisgICAgICAgICAgICAgICB0aGlzIExpY2Vuc2UsIGFuZCBtYXkgbGljZW5zZSBzdWNoIE5ldHNjYXBlIEJyYW5kZWQgQ29kZSBvbgorICAgICAgICAgICAgICAgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZS4KKworICAgICAgICAgIFZJLiBMaXRpZ2F0aW9uLgorICAgICAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgbGltaXRhdGlvbnMgb2YgU2VjdGlvbiAxMSBhYm92ZSwgdGhlCisgICAgICAgICAgcHJvdmlzaW9ucyByZWdhcmRpbmcgbGl0aWdhdGlvbiBpbiBTZWN0aW9uIDExKGEpLCAoYikgYW5kIChjKSBvZgorICAgICAgICAgIHRoZSBMaWNlbnNlIHNoYWxsIGFwcGx5IHRvIGFsbCBkaXNwdXRlcyByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UuCisKKyAgICAgRVhISUJJVCBBLU5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLgorCisgICAgICAgICAgIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE5ldHNjYXBlIFB1YmxpYworICAgICAgICAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisgICAgICAgICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgICAgICAgICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9OUEwvCisKKyAgICAgICAgICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyAgICAgICAgICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICAgICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisgICAgICAgICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworICAgICAgICAgIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29tbXVuaWNhdG9yIGNsaWVudCBjb2RlLCByZWxlYXNlZAorICAgICAgICAgIE1hcmNoIDMxLCAxOTk4LgorCisgICAgICAgICAgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIE5ldHNjYXBlCisgICAgICAgICAgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uIFBvcnRpb25zIGNyZWF0ZWQgYnkgTmV0c2NhcGUgYXJlCisgICAgICAgICAgQ29weXJpZ2h0IChDKSAxOTk4LTE5OTkgTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uIEFsbAorICAgICAgICAgIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgICAgICAgIENvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworICAgICAgICAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisgICAgICAgICAgdGVybXMgb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSAiW19fX10gTGljZW5zZSIpLCBpbiB3aGljaCBjYXNlCisgICAgICAgICAgdGhlIHByb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSAgaW5zdGVhZCBvZgorICAgICAgICAgIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyAgICAgICAgICBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBbX19fX10gTGljZW5zZSBhbmQgbm90IHRvIGFsbG93CisgICAgICAgICAgb3RoZXJzIHRvIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBOUEwsIGluZGljYXRlCisgICAgICAgICAgeW91ciBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSAgdGhlbQorICAgICAgICAgIHdpdGggdGhlIG5vdGljZSBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgW19fX10KKyAgICAgICAgICBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQKKyAgICAgICAgICBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBOUEwgb3IgdGhlCisgICAgICAgICAgW19fX10gTGljZW5zZS4iCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgMTl5eSAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSAxOXl5IG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCisKK0NvcHlyaWdodCAoYykgMTk5OCwgMTk5OSwgMjAwMCBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgQ2xhcmsgQ29vcGVyCitDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRXhwYXQgbWFpbnRhaW5lcnMuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwordGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAoraW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK1RPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKK0NvcHlyaWdodCAoYykgMjAwNy0yMDA5IElPTEEgYW5kIE9sZSBMYXVyc2VuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCitjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCitTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCitIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitUaGlzIHNvZnR3YXJlIGlzIGJhc2VkIGluIHBhcnQgb24gdGhlIHdvcmsgb2YgdGhlIEZyZWVUeXBlIFRlYW0uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgICBUaGUgRnJlZVR5cGUgUHJvamVjdCBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDYtSmFuLTI3CisKKyAgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IDE5OTYtMjAwMiwgMjAwNiBieQorICAgICAgICAgIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZworCisKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworICBUaGUgRnJlZVR5cGUgIFByb2plY3QgaXMgZGlzdHJpYnV0ZWQgaW4gIHNldmVyYWwgYXJjaGl2ZSBwYWNrYWdlczsKKyAgc29tZSBvZiB0aGVtIG1heSBjb250YWluLCBpbiBhZGRpdGlvbiB0byB0aGUgRnJlZVR5cGUgZm9udCBlbmdpbmUsCisgIHZhcmlvdXMgdG9vbHMgYW5kICBjb250cmlidXRpb25zIHdoaWNoIHJlbHkgb24sIG9yICByZWxhdGUgdG8sIHRoZQorICBGcmVlVHlwZSBQcm9qZWN0LgorCisgIFRoaXMgIGxpY2Vuc2UgYXBwbGllcyAgdG8gYWxsICBmaWxlcyBmb3VuZCAgaW4gc3VjaCAgcGFja2FnZXMsIGFuZAorICB3aGljaCBkbyBub3QgIGZhbGwgdW5kZXIgdGhlaXIgb3duIGV4cGxpY2l0ICBsaWNlbnNlLiAgVGhlIGxpY2Vuc2UKKyAgYWZmZWN0cyAgdGh1cyAgdGhlICBGcmVlVHlwZSAgIGZvbnQgIGVuZ2luZSwgIHRoZSAgdGVzdCAgcHJvZ3JhbXMsCisgIGRvY3VtZW50YXRpb24gYW5kIG1ha2VmaWxlcywgYXQgdGhlIHZlcnkgbGVhc3QuCisKKyAgVGhpcyAgbGljZW5zZSAgIHdhcyAgaW5zcGlyZWQgIGJ5ICB0aGUgIEJTRCwgICBBcnRpc3RpYywgIGFuZCAgSUpHCisgIChJbmRlcGVuZGVudCBKUEVHICBHcm91cCkgbGljZW5zZXMsIHdoaWNoICBhbGwgZW5jb3VyYWdlIGluY2x1c2lvbgorICBhbmQgIHVzZSBvZiAgZnJlZSAgc29mdHdhcmUgaW4gIGNvbW1lcmNpYWwgIGFuZCBmcmVld2FyZSAgcHJvZHVjdHMKKyAgYWxpa2UuICBBcyBhIGNvbnNlcXVlbmNlLCBpdHMgbWFpbiBwb2ludHMgYXJlIHRoYXQ6CisKKyAgICBvIFdlIGRvbid0IHByb21pc2UgdGhhdCB0aGlzIHNvZnR3YXJlIHdvcmtzLiBIb3dldmVyLCB3ZSB3aWxsIGJlCisgICAgICBpbnRlcmVzdGVkIGluIGFueSBraW5kIG9mIGJ1ZyByZXBvcnRzLiAoYGFzIGlzJyBkaXN0cmlidXRpb24pCisKKyAgICBvIFlvdSBjYW4gIHVzZSB0aGlzIHNvZnR3YXJlIGZvciB3aGF0ZXZlciB5b3UgIHdhbnQsIGluIHBhcnRzIG9yCisgICAgICBmdWxsIGZvcm0sIHdpdGhvdXQgaGF2aW5nIHRvIHBheSB1cy4gKGByb3lhbHR5LWZyZWUnIHVzYWdlKQorCisgICAgbyBZb3UgbWF5IG5vdCBwcmV0ZW5kIHRoYXQgIHlvdSB3cm90ZSB0aGlzIHNvZnR3YXJlLiAgSWYgeW91IHVzZQorICAgICAgaXQsIG9yICBvbmx5IHBhcnRzIG9mIGl0LCAgaW4gYSBwcm9ncmFtLCAgeW91IG11c3QgYWNrbm93bGVkZ2UKKyAgICAgIHNvbWV3aGVyZSAgaW4gIHlvdXIgIGRvY3VtZW50YXRpb24gIHRoYXQgIHlvdSAgaGF2ZSAgdXNlZCAgdGhlCisgICAgICBGcmVlVHlwZSBjb2RlLiAoYGNyZWRpdHMnKQorCisgIFdlICBzcGVjaWZpY2FsbHkgIHBlcm1pdCAgYW5kICBlbmNvdXJhZ2UgIHRoZSAgaW5jbHVzaW9uICBvZiAgdGhpcworICBzb2Z0d2FyZSwgd2l0aCAgb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCAgaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKyAgV2UgIGRpc2NsYWltICBhbGwgd2FycmFudGllcyAgY292ZXJpbmcgIFRoZSAgRnJlZVR5cGUgUHJvamVjdCAgYW5kCisgIGFzc3VtZSBubyBsaWFiaWxpdHkgcmVsYXRlZCB0byBUaGUgRnJlZVR5cGUgUHJvamVjdC4KKworCisgIEZpbmFsbHksICBtYW55ICBwZW9wbGUgIGFza2VkICB1cyAgZm9yICBhICBwcmVmZXJyZWQgIGZvcm0gIGZvciAgYQorICBjcmVkaXQvZGlzY2xhaW1lciB0byB1c2UgaW4gY29tcGxpYW5jZSB3aXRoIHRoaXMgbGljZW5zZS4gIFdlIHRodXMKKyAgZW5jb3VyYWdlIHlvdSB0byB1c2UgdGhlIGZvbGxvd2luZyB0ZXh0OgorCisgICAiIiIgIAorICAgIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgYXJlIGNvcHlyaWdodCCpIDx5ZWFyPiBUaGUgRnJlZVR5cGUKKyAgICBQcm9qZWN0ICh3d3cuZnJlZXR5cGUub3JnKS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAiIiIKKworICBQbGVhc2UgcmVwbGFjZSA8eWVhcj4gd2l0aCB0aGUgdmFsdWUgZnJvbSB0aGUgRnJlZVR5cGUgdmVyc2lvbiB5b3UKKyAgYWN0dWFsbHkgdXNlLgorCisKK0xlZ2FsIFRlcm1zCis9PT09PT09PT09PQorCiswLiBEZWZpbml0aW9ucworLS0tLS0tLS0tLS0tLS0KKworICBUaHJvdWdob3V0IHRoaXMgbGljZW5zZSwgIHRoZSB0ZXJtcyBgcGFja2FnZScsIGBGcmVlVHlwZSBQcm9qZWN0JywKKyAgYW5kICBgRnJlZVR5cGUgIGFyY2hpdmUnIHJlZmVyICB0byAgdGhlICBzZXQgIG9mIGZpbGVzICBvcmlnaW5hbGx5CisgIGRpc3RyaWJ1dGVkICBieSB0aGUgIGF1dGhvcnMgIChEYXZpZCBUdXJuZXIsICBSb2JlcnQgV2lsaGVsbSwgIGFuZAorICBXZXJuZXIgTGVtYmVyZykgYXMgdGhlIGBGcmVlVHlwZSBQcm9qZWN0JywgYmUgdGhleSBuYW1lZCBhcyBhbHBoYSwKKyAgYmV0YSBvciBmaW5hbCByZWxlYXNlLgorCisgIGBZb3UnIHJlZmVycyB0byAgdGhlIGxpY2Vuc2VlLCBvciBwZXJzb24gdXNpbmcgIHRoZSBwcm9qZWN0LCB3aGVyZQorICBgdXNpbmcnIGlzIGEgZ2VuZXJpYyB0ZXJtIGluY2x1ZGluZyBjb21waWxpbmcgdGhlIHByb2plY3QncyBzb3VyY2UKKyAgY29kZSBhcyAgd2VsbCBhcyBsaW5raW5nIGl0ICB0byBmb3JtIGEgIGBwcm9ncmFtJyBvciBgZXhlY3V0YWJsZScuCisgIFRoaXMgIHByb2dyYW0gaXMgIHJlZmVycmVkIHRvICBhcyAgYGEgcHJvZ3JhbSAgdXNpbmcgdGhlICBGcmVlVHlwZQorICBlbmdpbmUnLgorCisgIFRoaXMgIGxpY2Vuc2UgYXBwbGllcyAgdG8gYWxsICBmaWxlcyBkaXN0cmlidXRlZCAgaW4gIHRoZSBvcmlnaW5hbAorICBGcmVlVHlwZSAgUHJvamVjdCwgICBpbmNsdWRpbmcgIGFsbCAgc291cmNlICAgY29kZSwgIGJpbmFyaWVzICBhbmQKKyAgZG9jdW1lbnRhdGlvbiwgIHVubGVzcyAgb3RoZXJ3aXNlICBzdGF0ZWQgICBpbiAgdGhlICBmaWxlICBpbiAgaXRzCisgIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGZvcm0gYXMgIGRpc3RyaWJ1dGVkIGluIHRoZSBvcmlnaW5hbCBhcmNoaXZlLgorICBJZiB5b3UgYXJlICB1bnN1cmUgd2hldGhlciBvciBub3QgYSBwYXJ0aWN1bGFyICBmaWxlIGlzIGNvdmVyZWQgYnkKKyAgdGhpcyBsaWNlbnNlLCB5b3UgbXVzdCBjb250YWN0IHVzIHRvIHZlcmlmeSB0aGlzLgorCisgIFRoZSBGcmVlVHlwZSAgUHJvamVjdCBpcyBjb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCAgYnkgRGF2aWQgVHVybmVyLAorICBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgQWxsIHJpZ2h0cyByZXNlcnZlZCBleGNlcHQgYXMKKyAgc3BlY2lmaWVkIGJlbG93LgorCisxLiBObyBXYXJyYW50eQorLS0tLS0tLS0tLS0tLS0KKworICBUSEUgRlJFRVRZUEUgUFJPSkVDVCAgSVMgUFJPVklERUQgYEFTIElTJyBXSVRIT1VUICBXQVJSQU5UWSBPRiBBTlkKKyAgS0lORCwgRUlUSEVSICBFWFBSRVNTIE9SIElNUExJRUQsICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgVE8sCisgIFdBUlJBTlRJRVMgIE9GICBNRVJDSEFOVEFCSUxJVFkgICBBTkQgIEZJVE5FU1MgIEZPUiAgQSAgUEFSVElDVUxBUgorICBQVVJQT1NFLiAgSU4gTk8gRVZFTlQgV0lMTCBBTlkgT0YgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAgQkUgTElBQkxFICBGT1IgQU5ZIERBTUFHRVMgQ0FVU0VEICBCWSBUSEUgVVNFIE9SICBUSEUgSU5BQklMSVRZIFRPCisgIFVTRSwgT0YgVEhFIEZSRUVUWVBFIFBST0pFQ1QuCisKKzIuIFJlZGlzdHJpYnV0aW9uCistLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgIGxpY2Vuc2UgIGdyYW50cyAgYSAgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsICBwZXJwZXR1YWwgIGFuZAorICBpcnJldm9jYWJsZSByaWdodCAgYW5kIGxpY2Vuc2UgdG8gdXNlLCAgZXhlY3V0ZSwgcGVyZm9ybSwgY29tcGlsZSwKKyAgZGlzcGxheSwgIGNvcHksICAgY3JlYXRlICBkZXJpdmF0aXZlICB3b3JrcyAgIG9mLCAgZGlzdHJpYnV0ZSAgYW5kCisgIHN1YmxpY2Vuc2UgdGhlICBGcmVlVHlwZSBQcm9qZWN0IChpbiAgYm90aCBzb3VyY2UgYW5kICBvYmplY3QgY29kZQorICBmb3JtcykgIGFuZCAgZGVyaXZhdGl2ZSB3b3JrcyAgdGhlcmVvZiAgZm9yICBhbnkgIHB1cnBvc2U7IGFuZCAgdG8KKyAgYXV0aG9yaXplIG90aGVycyAgdG8gZXhlcmNpc2UgIHNvbWUgb3IgYWxsICBvZiB0aGUgIHJpZ2h0cyBncmFudGVkCisgIGhlcmVpbiwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICBvIFJlZGlzdHJpYnV0aW9uIG9mICBzb3VyY2UgY29kZSAgbXVzdCByZXRhaW4gdGhpcyAgbGljZW5zZSBmaWxlCisgICAgICAoYEZUTC5UWFQnKSB1bmFsdGVyZWQ7IGFueSAgYWRkaXRpb25zLCBkZWxldGlvbnMgb3IgY2hhbmdlcyB0bworICAgICAgdGhlIG9yaWdpbmFsICBmaWxlcyBtdXN0IGJlIGNsZWFybHkgIGluZGljYXRlZCBpbiBhY2NvbXBhbnlpbmcKKyAgICAgIGRvY3VtZW50YXRpb24uICAgVGhlICBjb3B5cmlnaHQgICBub3RpY2VzICBvZiAgdGhlICB1bmFsdGVyZWQsCisgICAgICBvcmlnaW5hbCAgZmlsZXMgbXVzdCAgYmUgIHByZXNlcnZlZCBpbiAgYWxsICBjb3BpZXMgb2YgIHNvdXJjZQorICAgICAgZmlsZXMuCisKKyAgICBvIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcHJvdmlkZSBhICBkaXNjbGFpbWVyICB0aGF0CisgICAgICBzdGF0ZXMgIHRoYXQgIHRoZSBzb2Z0d2FyZSBpcyBiYXNlZCBpbiBwYXJ0IG9mIHRoZSB3b3JrIG9mIHRoZQorICAgICAgRnJlZVR5cGUgVGVhbSwgIGluICB0aGUgIGRpc3RyaWJ1dGlvbiAgZG9jdW1lbnRhdGlvbi4gIFdlIGFsc28KKyAgICAgIGVuY291cmFnZSB5b3UgdG8gcHV0IGFuIFVSTCB0byB0aGUgRnJlZVR5cGUgd2ViIHBhZ2UgIGluICB5b3VyCisgICAgICBkb2N1bWVudGF0aW9uLCB0aG91Z2ggdGhpcyBpc24ndCBtYW5kYXRvcnkuCisKKyAgVGhlc2UgY29uZGl0aW9ucyAgYXBwbHkgdG8gYW55ICBzb2Z0d2FyZSBkZXJpdmVkIGZyb20gb3IgIGJhc2VkIG9uCisgIHRoZSBGcmVlVHlwZSBQcm9qZWN0LCAgbm90IGp1c3QgdGhlIHVubW9kaWZpZWQgZmlsZXMuICAgSWYgeW91IHVzZQorICBvdXIgd29yaywgeW91ICBtdXN0IGFja25vd2xlZGdlIHVzLiAgSG93ZXZlciwgbm8gIGZlZSBuZWVkIGJlIHBhaWQKKyAgdG8gdXMuCisKKzMuIEFkdmVydGlzaW5nCistLS0tLS0tLS0tLS0tLQorCisgIE5laXRoZXIgdGhlICBGcmVlVHlwZSBhdXRob3JzIGFuZCAgY29udHJpYnV0b3JzIG5vciB5b3UgIHNoYWxsIHVzZQorICB0aGUgbmFtZSBvZiB0aGUgIG90aGVyIGZvciBjb21tZXJjaWFsLCBhZHZlcnRpc2luZywgb3IgcHJvbW90aW9uYWwKKyAgcHVycG9zZXMgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgV2Ugc3VnZ2VzdCwgIGJ1dCBkbyBub3QgcmVxdWlyZSwgdGhhdCAgeW91IHVzZSBvbmUgb3IgIG1vcmUgb2YgdGhlCisgIGZvbGxvd2luZyBwaHJhc2VzIHRvIHJlZmVyICB0byB0aGlzIHNvZnR3YXJlIGluIHlvdXIgZG9jdW1lbnRhdGlvbgorICBvciBhZHZlcnRpc2luZyAgbWF0ZXJpYWxzOiBgRnJlZVR5cGUgUHJvamVjdCcsICBgRnJlZVR5cGUgRW5naW5lJywKKyAgYEZyZWVUeXBlIGxpYnJhcnknLCBvciBgRnJlZVR5cGUgRGlzdHJpYnV0aW9uJy4KKworICBBcyAgeW91IGhhdmUgIG5vdCBzaWduZWQgIHRoaXMgbGljZW5zZSwgIHlvdSBhcmUgIG5vdCAgcmVxdWlyZWQgdG8KKyAgYWNjZXB0ICBpdC4gICBIb3dldmVyLCAgYXMgIHRoZSBGcmVlVHlwZSAgUHJvamVjdCAgaXMgIGNvcHlyaWdodGVkCisgIG1hdGVyaWFsLCBvbmx5ICB0aGlzIGxpY2Vuc2UsIG9yICBhbm90aGVyIG9uZSBjb250cmFjdGVkICB3aXRoIHRoZQorICBhdXRob3JzLCBncmFudHMgeW91ICB0aGUgcmlnaHQgdG8gdXNlLCBkaXN0cmlidXRlLCAgYW5kIG1vZGlmeSBpdC4KKyAgVGhlcmVmb3JlLCAgYnkgIHVzaW5nLCAgZGlzdHJpYnV0aW5nLCAgb3IgbW9kaWZ5aW5nICB0aGUgIEZyZWVUeXBlCisgIFByb2plY3QsIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgYWxsIHRoZSB0ZXJtcworICBvZiB0aGlzIGxpY2Vuc2UuCisKKzQuIENvbnRhY3RzCistLS0tLS0tLS0tLQorCisgIFRoZXJlIGFyZSB0d28gbWFpbGluZyBsaXN0cyByZWxhdGVkIHRvIEZyZWVUeXBlOgorCisgICAgbyBmcmVldHlwZUBub25nbnUub3JnCisKKyAgICAgIERpc2N1c3NlcyBnZW5lcmFsIHVzZSBhbmQgYXBwbGljYXRpb25zIG9mIEZyZWVUeXBlLCBhcyB3ZWxsIGFzCisgICAgICBmdXR1cmUgYW5kICB3YW50ZWQgYWRkaXRpb25zIHRvIHRoZSAgbGlicmFyeSBhbmQgZGlzdHJpYnV0aW9uLgorICAgICAgSWYgIHlvdSBhcmUgbG9va2luZyAgZm9yIHN1cHBvcnQsICBzdGFydCBpbiAgdGhpcyBsaXN0ICBpZiB5b3UKKyAgICAgIGhhdmVuJ3QgZm91bmQgYW55dGhpbmcgdG8gaGVscCB5b3UgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKKyAgICBvIGZyZWV0eXBlLWRldmVsQG5vbmdudS5vcmcKKworICAgICAgRGlzY3Vzc2VzIGJ1Z3MsICBhcyB3ZWxsICBhcyBlbmdpbmUgaW50ZXJuYWxzLCAgZGVzaWduIGlzc3VlcywKKyAgICAgIHNwZWNpZmljIGxpY2Vuc2VzLCBwb3J0aW5nLCBldGMuCisKKyAgT3VyIGhvbWUgcGFnZSBjYW4gYmUgZm91bmQgYXQKKworICAgIGh0dHA6Ly93d3cuZnJlZXR5cGUub3JnCisKKworLS0tIGVuZCBvZiBGVEwuVFhUIC0tLQorCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwkJCUNPUFlSSUdIVFMKKworQ29tcGlsYXRpb24gY29weXJpZ2h0IGlzIGhlbGQgYnkgdGhlIEdQU0QgcHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0dQU0QgcHJvamVjdCBjb3B5cmlnaHRzIGFyZSBhc3NpZ25lZCB0byB0aGUgcHJvamVjdCBsZWFkLCBjdXJyZW50bHkKK0VyaWMgUy4gUmF5bW9uZC4gT3RoZXIgcG9ydGlvbnMgb2YgdGhlIEdQU0QgY29kZSBhcmUgQ29weXJpZ2h0IChjKQorMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiBieSBSZW1jbyBUcmVmZmtvcm4sIGFuZCBvdGhlcnMKK0NvcHlyaWdodCAoYykgMjAwNSBieSBFcmljIFMuIFJheW1vbmQuICBGb3Igb3RoZXIgY29weXJpZ2h0cywgc2VlCitpbmRpdmlkdWFsIGZpbGVzLgorCisJCQlCU0QgTElDRU5TRQorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDo8UD4KKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci48UD4KKworUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uPFA+CisKK05laXRoZXIgbmFtZSBvZiB0aGUgR1BTRCBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCit3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SCitDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwkJICBHTlUgTElCUkFSWSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgIAkJICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgR1BMLiAgSXQgaXMKKyBudW1iZXJlZCAyIGJlY2F1c2UgaXQgZ29lcyB3aXRoIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR1BMLl0KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UKK2ZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBUaGlzIGxpY2Vuc2UsIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQorc3BlY2lhbGx5IGRlc2lnbmF0ZWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlLCBhbmQgdG8gYW55CitvdGhlciBsaWJyYXJpZXMgd2hvc2UgYXV0aG9ycyBkZWNpZGUgdG8gdXNlIGl0LiAgWW91IGNhbiB1c2UgaXQgZm9yCit5b3VyIGxpYnJhcmllcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmCit5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKK29yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKK3lvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKK2NvZGUuICBJZiB5b3UgbGluayBhIHByb2dyYW0gd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZQorY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzIHNvIHRoYXQgdGhleSBjYW4gcmVsaW5rIHRoZW0KK3dpdGggdGhlIGxpYnJhcnksIGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZworaXQuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKyAgT3VyIG1ldGhvZCBvZiBwcm90ZWN0aW5nIHlvdXIgcmlnaHRzIGhhcyB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQKK3RoZSBsaWJyYXJ5LCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworICBBbHNvLCBmb3IgZWFjaCBkaXN0cmlidXRvcidzIHByb3RlY3Rpb24sIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorbGlicmFyeS4gIElmIHRoZSBsaWJyYXJ5IGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbAordmVyc2lvbiwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbgordGhlIG9yaWdpbmFsIGF1dGhvcnMnIHJlcHV0YXRpb25zLgorDAorICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IGNvbXBhbmllcyBkaXN0cmlidXRpbmcgZnJlZQorc29mdHdhcmUgd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgdGh1cyBpbiBlZmZlY3QKK3RyYW5zZm9ybWluZyB0aGUgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHNvZnR3YXJlLiAgVG8gcHJldmVudCB0aGlzLAord2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzCitmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5CitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggd2FzIGRlc2lnbmVkIGZvciB1dGlsaXR5IHByb2dyYW1zLiAgVGhpcworbGljZW5zZSwgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gY2VydGFpbgorZGVzaWduYXRlZCBsaWJyYXJpZXMuICBUaGlzIGxpY2Vuc2UgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5CitvbmU7IGJlIHN1cmUgdG8gcmVhZCBpdCBpbiBmdWxsLCBhbmQgZG9uJ3QgYXNzdW1lIHRoYXQgYW55dGhpbmcgaW4gaXQgaXMKK3RoZSBzYW1lIGFzIGluIHRoZSBvcmRpbmFyeSBsaWNlbnNlLgorCisgIFRoZSByZWFzb24gd2UgaGF2ZSBhIHNlcGFyYXRlIHB1YmxpYyBsaWNlbnNlIGZvciBzb21lIGxpYnJhcmllcyBpcyB0aGF0Cit0aGV5IGJsdXIgdGhlIGRpc3RpbmN0aW9uIHdlIHVzdWFsbHkgbWFrZSBiZXR3ZWVuIG1vZGlmeWluZyBvciBhZGRpbmcgdG8gYQorcHJvZ3JhbSBhbmQgc2ltcGx5IHVzaW5nIGl0LiAgTGlua2luZyBhIHByb2dyYW0gd2l0aCBhIGxpYnJhcnksIHdpdGhvdXQKK2NoYW5naW5nIHRoZSBsaWJyYXJ5LCBpcyBpbiBzb21lIHNlbnNlIHNpbXBseSB1c2luZyB0aGUgbGlicmFyeSwgYW5kIGlzCithbmFsb2dvdXMgdG8gcnVubmluZyBhIHV0aWxpdHkgcHJvZ3JhbSBvciBhcHBsaWNhdGlvbiBwcm9ncmFtLiAgSG93ZXZlciwgaW4KK2EgdGV4dHVhbCBhbmQgbGVnYWwgc2Vuc2UsIHRoZSBsaW5rZWQgZXhlY3V0YWJsZSBpcyBhIGNvbWJpbmVkIHdvcmssIGEKK2Rlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnksIGFuZCB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQordHJlYXRzIGl0IGFzIHN1Y2guCisKKyAgQmVjYXVzZSBvZiB0aGlzIGJsdXJyZWQgZGlzdGluY3Rpb24sIHVzaW5nIHRoZSBvcmRpbmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBmb3IgbGlicmFyaWVzIGRpZCBub3QgZWZmZWN0aXZlbHkgcHJvbW90ZSBzb2Z0d2FyZQorc2hhcmluZywgYmVjYXVzZSBtb3N0IGRldmVsb3BlcnMgZGlkIG5vdCB1c2UgdGhlIGxpYnJhcmllcy4gIFdlCitjb25jbHVkZWQgdGhhdCB3ZWFrZXIgY29uZGl0aW9ucyBtaWdodCBwcm9tb3RlIHNoYXJpbmcgYmV0dGVyLgorCisgIEhvd2V2ZXIsIHVucmVzdHJpY3RlZCBsaW5raW5nIG9mIG5vbi1mcmVlIHByb2dyYW1zIHdvdWxkIGRlcHJpdmUgdGhlCit1c2VycyBvZiB0aG9zZSBwcm9ncmFtcyBvZiBhbGwgYmVuZWZpdCBmcm9tIHRoZSBmcmVlIHN0YXR1cyBvZiB0aGUKK2xpYnJhcmllcyB0aGVtc2VsdmVzLiAgVGhpcyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8KK3Blcm1pdCBkZXZlbG9wZXJzIG9mIG5vbi1mcmVlIHByb2dyYW1zIHRvIHVzZSBmcmVlIGxpYnJhcmllcywgd2hpbGUKK3ByZXNlcnZpbmcgeW91ciBmcmVlZG9tIGFzIGEgdXNlciBvZiBzdWNoIHByb2dyYW1zIHRvIGNoYW5nZSB0aGUgZnJlZQorbGlicmFyaWVzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGVtLiAgKFdlIGhhdmUgbm90IHNlZW4gaG93IHRvIGFjaGlldmUKK3RoaXMgYXMgcmVnYXJkcyBjaGFuZ2VzIGluIGhlYWRlciBmaWxlcywgYnV0IHdlIGhhdmUgYWNoaWV2ZWQgaXQgYXMgcmVnYXJkcworY2hhbmdlcyBpbiB0aGUgYWN0dWFsIGZ1bmN0aW9ucyBvZiB0aGUgTGlicmFyeS4pICBUaGUgaG9wZSBpcyB0aGF0IHRoaXMKK3dpbGwgbGVhZCB0byBmYXN0ZXIgZGV2ZWxvcG1lbnQgb2YgZnJlZSBsaWJyYXJpZXMuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuICBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYQorIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKK2Zvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hpbGUgdGhlIGxhdHRlciBvbmx5Cit3b3JrcyB0b2dldGhlciB3aXRoIHRoZSBsaWJyYXJ5LgorCisgIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBsaWJyYXJ5IHRvIGJlIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5CitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJhdGhlciB0aGFuIGJ5IHRoaXMgc3BlY2lhbCBvbmUuCisMCisJCSAgR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IHdoaWNoCitjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3Igb3RoZXIgYXV0aG9yaXplZAorcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWJyYXJ5CitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuICBFYWNoIGxpY2Vuc2VlIGlzCithZGRyZXNzZWQgYXMgInlvdSIuCisKKyAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQorcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCisod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisgIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCit3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgIndvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgorY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKK3BvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKK3N0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKK2luY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKyAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCitpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KK2FuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KK3N1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKK3dyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKK2FuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorICAKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCitjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAoreW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4KK2FwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CithbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQord2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUKK0xpYnJhcnkuCisKKyAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwKK2FuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKK2ZlZS4KKwwKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorCisgICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubworICAgIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCisgICAgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcworICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKKyAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKKyAgICBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IKKyAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgorICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KKworICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCisgICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQorICAgIGFwcGxpY2F0aW9uLiAgVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55CisgICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKKyAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQorICAgIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKK2l0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5Cit3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlIHRvIGEgZ2l2ZW4gY29weSBvZiB0aGUgTGlicmFyeS4gIFRvIGRvCit0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCit0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCitpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlCitvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5Cit0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCit0aGVzZSBub3RpY2VzLgorDAorICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCit0aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbAorc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KKworICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YKK3RoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KKworICA0LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvcgorZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KK3VuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueQoraXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaAorbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisKKyAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKK2Zyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCitzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQgdG8KK2Rpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKK0xpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IKK2xpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiAgU3VjaCBhCit3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCit0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKK2NyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdAorY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUKK2xpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgorU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCisKKyAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKK3RoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYQorZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuCitXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQorbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUKK3RocmVzaG9sZCBmb3IgdGhpcyB0byBiZSB0cnVlIGlzIG5vdCBwcmVjaXNlbHkgZGVmaW5lZCBieSBsYXcuCisKKyAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEKK3N0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZQorZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdAorZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZQord29yay4gIChFeGVjdXRhYmxlcyBjb250YWluaW5nIHRoaXMgb2JqZWN0IGNvZGUgcGx1cyBwb3J0aW9ucyBvZiB0aGUKK0xpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCisKKyAgT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgorQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsCit3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuCisMCisgIDYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21waWxlIG9yCitsaW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYQord29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKK3VuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQKK21vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZQorZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCisKKyAgWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlCitMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKK3RoaXMgTGljZW5zZS4gIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYgdGhlIHdvcmsKK2R1cmluZyBleGVjdXRpb24gZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlCitjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCitkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCitvZiB0aGVzZSB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZworICAgIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaWJyYXJ5IGluY2x1ZGluZyB3aGF0ZXZlcgorICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCisgICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKKyAgICB3aXRoIHRoZSBMaWJyYXJ5LCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlICJ3b3JrIHRoYXQKKyAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQorICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCisgICAgZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAgKEl0IGlzIHVuZGVyc3Rvb2QKKyAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKKyAgICBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbgorICAgIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQorCisgICAgYikgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQKKyAgICBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMKKyAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCisgICAgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgorCisgICAgYykgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKKyAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUKKyAgICBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCisKKyAgICBkKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKKyAgICBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS4KKworICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKK0xpYnJhcnkiIG11c3QgaW5jbHVkZSBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yCityZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKK3RoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkKK2Rpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgorY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbgord2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwordGhlIGV4ZWN1dGFibGUuCisKKyAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKK3Jlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKK2FjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QKK3VzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKK2Rpc3RyaWJ1dGUuCisMCisgIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CitmYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkCitsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KK3RoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQorcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCisgICAgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeQorICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICAgIFNlY3Rpb25zIGFib3ZlLgorCisgICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKKyAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZworICAgIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KKworICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQordGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkKK2F0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCityaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsCitvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCit0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisMCisgIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQorcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LAorYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCithbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywKK3NvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cworZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKK3dyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwordmVyc2lvbnMgb2YgdGhlIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK1N1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKK2J1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCisiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCitsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKwwKKyAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAord3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKK2NvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCitkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCitvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZworYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCitXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLgorRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKK09USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQorVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCitXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQorQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKK0ZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HCitSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQorRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgorU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorICAgICAgICAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgTGlicmFyaWVzCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHdlIHJlY29tbWVuZCBtYWtpbmcgaXQgZnJlZSBzb2Z0d2FyZSB0aGF0CitldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UuICBZb3UgY2FuIGRvIHNvIGJ5IHBlcm1pdHRpbmcKK3JlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuCisKKyAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcworc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZQorImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIAorICAgIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCisgIGxpYnJhcnkgYEZyb2InIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuIGJ5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCisKK0hhcmZCdXp6IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBzby1jYWxsZWQgIk9sZCBNSVQiIGxpY2Vuc2UuICBEZXRhaWxzIGZvbGxvdy4KK0ZvciBwYXJ0cyBvZiBIYXJmQnV6eiB0aGF0IGFyZSBsaWNlbnNlZCB1bmRlciBkaWZmZXJlbnQgbGljZW5zZXMgc2VlIGluZGl2aWR1YWwKK2ZpbGVzIG5hbWVzIENPUFlJTkcgaW4gc3ViZGlyZWN0b3JpZXMgd2hlcmUgYXBwbGljYWJsZS4KKworQ29weXJpZ2h0IMKpIDIwMTAsMjAxMSwyMDEyICBHb29nbGUsIEluYy4KK0NvcHlyaWdodCDCqSAyMDEyICBNb3ppbGxhIEZvdW5kYXRpb24KK0NvcHlyaWdodCDCqSAyMDExICBDb2RldGhpbmsgTGltaXRlZAorQ29weXJpZ2h0IMKpIDIwMDgsMjAxMCAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCitDb3B5cmlnaHQgwqkgMjAwOSAgS2VpdGggU3RyaWJsZXkKK0NvcHlyaWdodCDCqSAyMDA5ICBNYXJ0aW4gSG9za2VuIGFuZCBTSUwgSW50ZXJuYXRpb25hbAorQ29weXJpZ2h0IMKpIDIwMDcgIENocmlzIFdpbHNvbgorQ29weXJpZ2h0IMKpIDIwMDYgIEJlaGRhZCBFc2ZhaGJvZAorQ29weXJpZ2h0IMKpIDIwMDUgIERhdmlkIFR1cm5lcgorQ29weXJpZ2h0IMKpIDIwMDQsMjAwNywyMDA4LDIwMDksMjAxMCAgUmVkIEhhdCwgSW5jLgorQ29weXJpZ2h0IMKpIDE5OTgtMjAwNCAgRGF2aWQgVHVybmVyIGFuZCBXZXJuZXIgTGVtYmVyZworCitGb3IgZnVsbCBjb3B5cmlnaHQgbm90aWNlcyBjb25zdWx0IHRoZSBpbmRpdmlkdWFsIGZpbGVzIGluIHRoZSBwYWNrYWdlLgorCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHdpdGhvdXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKK2xpY2Vuc2Ugb3Igcm95YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUKK2Fib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBwZWFyIGluCithbGwgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuCisKK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCitESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKK0FSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04sIEVWRU4KK0lGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KKworVEhFIENPUFlSSUdIVCBIT0xERVIgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUworT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBOTyBPQkxJR0FUSU9OIFRPCitQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIElBY2Nlc3NpYmxlMiBJREwgU3BlY2lmaWNhdGlvbiAKKyAqIAorICogIENvcHlyaWdodCAoYykgMjAwNywgMjAxMCBMaW51eCBGb3VuZGF0aW9uIAorICogIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gCisgKiAgIAorICogICAKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgCisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIAorICogIGFyZSBtZXQ6IAorICogICAKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgCisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAgIAorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIAorICogICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyAKKyAqICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIAorICogICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTGludXggRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyAKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyAKKyAqICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIAorICogICAgICBwZXJtaXNzaW9uLiAKKyAqICAgCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIAorICogIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIAorICogIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIAorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIAorICogIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIAorICogIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCAKKyAqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgCisgKiAgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IAorICogIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIAorICogIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAKKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgCisgKiAgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgCisgKiAgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiAgIAorICogIFRoaXMgQlNEIExpY2Vuc2UgY29uZm9ybXMgdG8gdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgIlNpbXBsaWZpZWQgCisgKiAgQlNEIExpY2Vuc2UiIGFzIHB1Ymxpc2hlZCBhdDogCisgKiAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAgCisgKiAgIAorICogIElBY2Nlc3NpYmxlMiBpcyBhIHRyYWRlbWFyayBvZiB0aGUgTGludXggRm91bmRhdGlvbi4gVGhlIElBY2Nlc3NpYmxlMiAKKyAqICBtYXJrIG1heSBiZSB1c2VkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgTGludXggRm91bmRhdGlvbiBUcmFkZW1hcmsgCisgKiAgUG9saWN5IHRvIGluZGljYXRlIGNvbXBsaWFuY2Ugd2l0aCB0aGUgSUFjY2Vzc2libGUyIHNwZWNpZmljYXRpb24uIAorICogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKKworTElDRU5TRSBleHRyYWN0ZWQgZnJvbSBJSkcncyBqcGVnIGRpc3RyaWJ1dGlvbjoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHBsYWluIEVuZ2xpc2g6CisKKzEuIFdlIGRvbid0IHByb21pc2UgdGhhdCB0aGlzIHNvZnR3YXJlIHdvcmtzLiAgKEJ1dCBpZiB5b3UgZmluZCBhbnkgYnVncywKKyAgIHBsZWFzZSBsZXQgdXMga25vdyEpCisyLiBZb3UgY2FuIHVzZSB0aGlzIHNvZnR3YXJlIGZvciB3aGF0ZXZlciB5b3Ugd2FudC4gIFlvdSBkb24ndCBoYXZlIHRvIHBheSB1cy4KKzMuIFlvdSBtYXkgbm90IHByZXRlbmQgdGhhdCB5b3Ugd3JvdGUgdGhpcyBzb2Z0d2FyZS4gIElmIHlvdSB1c2UgaXQgaW4gYQorICAgcHJvZ3JhbSwgeW91IG11c3QgYWNrbm93bGVkZ2Ugc29tZXdoZXJlIGluIHlvdXIgZG9jdW1lbnRhdGlvbiB0aGF0CisgICB5b3UndmUgdXNlZCB0aGUgSUpHIGNvZGUuCisKK0luIGxlZ2FsZXNlOgorCitUaGUgYXV0aG9ycyBtYWtlIE5PIFdBUlJBTlRZIG9yIHJlcHJlc2VudGF0aW9uLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLAord2l0aCByZXNwZWN0IHRvIHRoaXMgc29mdHdhcmUsIGl0cyBxdWFsaXR5LCBhY2N1cmFjeSwgbWVyY2hhbnRhYmlsaXR5LCBvcgorZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUyBJUyIsIGFuZCB5b3UsCitpdHMgdXNlciwgYXNzdW1lIHRoZSBlbnRpcmUgcmlzayBhcyB0byBpdHMgcXVhbGl0eSBhbmQgYWNjdXJhY3kuCisKK1RoaXMgc29mdHdhcmUgaXMgY29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgorQWxsIFJpZ2h0cyBSZXNlcnZlZCBleGNlcHQgYXMgc3BlY2lmaWVkIGJlbG93LgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0IGZlZSwgc3ViamVjdCB0byB0aGVzZQorY29uZGl0aW9uczoKKygxKSBJZiBhbnkgcGFydCBvZiB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQsIHRoZW4gdGhpcworUkVBRE1FIGZpbGUgbXVzdCBiZSBpbmNsdWRlZCwgd2l0aCB0aGlzIGNvcHlyaWdodCBhbmQgbm8td2FycmFudHkgbm90aWNlCit1bmFsdGVyZWQ7IGFuZCBhbnkgYWRkaXRpb25zLCBkZWxldGlvbnMsIG9yIGNoYW5nZXMgdG8gdGhlIG9yaWdpbmFsIGZpbGVzCittdXN0IGJlIGNsZWFybHkgaW5kaWNhdGVkIGluIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLgorKDIpIElmIG9ubHkgZXhlY3V0YWJsZSBjb2RlIGlzIGRpc3RyaWJ1dGVkLCB0aGVuIHRoZSBhY2NvbXBhbnlpbmcKK2RvY3VtZW50YXRpb24gbXVzdCBzdGF0ZSB0aGF0ICJ0aGlzIHNvZnR3YXJlIGlzIGJhc2VkIGluIHBhcnQgb24gdGhlIHdvcmsgb2YKK3RoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwIi4KKygzKSBQZXJtaXNzaW9uIGZvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBncmFudGVkIG9ubHkgaWYgdGhlIHVzZXIgYWNjZXB0cworZnVsbCByZXNwb25zaWJpbGl0eSBmb3IgYW55IHVuZGVzaXJhYmxlIGNvbnNlcXVlbmNlczsgdGhlIGF1dGhvcnMgYWNjZXB0CitOTyBMSUFCSUxJVFkgZm9yIGRhbWFnZXMgb2YgYW55IGtpbmQuCisKK1RoZXNlIGNvbmRpdGlvbnMgYXBwbHkgdG8gYW55IHNvZnR3YXJlIGRlcml2ZWQgZnJvbSBvciBiYXNlZCBvbiB0aGUgSUpHIGNvZGUsCitub3QganVzdCB0byB0aGUgdW5tb2RpZmllZCBsaWJyYXJ5LiAgSWYgeW91IHVzZSBvdXIgd29yaywgeW91IG91Z2h0IHRvCithY2tub3dsZWRnZSB1cy4KKworUGVybWlzc2lvbiBpcyBOT1QgZ3JhbnRlZCBmb3IgdGhlIHVzZSBvZiBhbnkgSUpHIGF1dGhvcidzIG5hbWUgb3IgY29tcGFueSBuYW1lCitpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcmVsYXRpbmcgdG8gdGhpcyBzb2Z0d2FyZSBvciBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK2l0LiAgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgcmVmZXJyZWQgdG8gb25seSBhcyAidGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncworc29mdHdhcmUiLgorCitXZSBzcGVjaWZpY2FsbHkgcGVybWl0IGFuZCBlbmNvdXJhZ2UgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFzIHRoZSBiYXNpcyBvZgorY29tbWVyY2lhbCBwcm9kdWN0cywgcHJvdmlkZWQgdGhhdCBhbGwgd2FycmFudHkgb3IgbGlhYmlsaXR5IGNsYWltcyBhcmUKK2Fzc3VtZWQgYnkgdGhlIHByb2R1Y3QgdmVuZG9yLgorCisKK0lDVSBMaWNlbnNlIC0gSUNVIDEuOC4xIGFuZCBsYXRlcgorCitDT1BZUklHSFQgQU5EIFBFUk1JU1NJT04gTk9USUNFCisKK0NvcHlyaWdodCAoYykgMTk5NS0yMDEwIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycworCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKK3RvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KK3RoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zCit0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUgYW5kIHRoYXQgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgCitJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBJTiBOTyBFVkVOVCBTSEFMTAorVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgSE9MREVSUyBJTkNMVURFRCBJTiBUSElTIE5PVElDRSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKK09SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCitORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlciBzaGFsbCBub3QgYmUKK3VzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbgordGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KKworQWxsIHRyYWRlbWFya3MgYW5kIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBtZW50aW9uZWQgaGVyZWluIGFyZSB0aGUgcHJvcGVydHkgb2YgdGhlaXIgcmVzcGVjdGl2ZSBvd25lcnMuCisKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworVGhlIGZvbGxvd2luZyBpcyB0aGUgbGljZW5zZSBmb3IgdGhlIGplbWFsbG9jIHNvdXJjZSBjb2RlLCBhcyBwcm92aWRlZAoraW4gdGhlIGluaXRpYWwgc2VjdGlvbiBvZiB0aGUgc291cmNlIGZpbGVzLgorCitDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBKYXNvbiBFdmFucyA8amFzb25lQEZyZWVCU0Qub3JnPi4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZShzKSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBhcworICAgdGhlIGZpcnN0IGxpbmVzIG9mIHRoaXMgZmlsZSB1bm1vZGlmaWVkIG90aGVyIHRoYW4gdGhlIHBvc3NpYmxlCisgICBhZGRpdGlvbiBvZiBvbmUgb3IgbW9yZSBjb3B5cmlnaHQgbm90aWNlcy4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UocyksIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBgYEFTIElTJycgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCitCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCitPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAorRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitUaGUgSnNvbkNwcCBsaWJyYXJ5J3Mgc291cmNlIGNvZGUsIGluY2x1ZGluZyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiwgCit0ZXN0cyBhbmQgZGVtb25zdHJhdGlvbiBhcHBsaWNhdGlvbnMsIGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgZm9sbG93aW5nCitjb25kaXRpb25zLi4uCisKK1RoZSBhdXRob3IgKEJhcHRpc3RlIExlcGlsbGV1cikgZXhwbGljaXRseSBkaXNjbGFpbXMgY29weXJpZ2h0IGluIGFsbCAKK2p1cmlzZGljdGlvbnMgd2hpY2ggcmVjb2duaXplIHN1Y2ggYSBkaXNjbGFpbWVyLiBJbiBzdWNoIGp1cmlzZGljdGlvbnMsIAordGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCBpbnRvIHRoZSBQdWJsaWMgRG9tYWluLgorCitJbiBqdXJpc2RpY3Rpb25zIHdoaWNoIGRvIG5vdCByZWNvZ25pemUgUHVibGljIERvbWFpbiBwcm9wZXJ0eSAoZS5nLiBHZXJtYW55IGFzIG9mCisyMDEwKSwgdGhpcyBzb2Z0d2FyZSBpcyBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBieSBCYXB0aXN0ZSBMZXBpbGxldXIsIGFuZCBpcworcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSAoc2VlIGJlbG93KS4KKworSW4ganVyaXNkaWN0aW9ucyB3aGljaCByZWNvZ25pemUgUHVibGljIERvbWFpbiBwcm9wZXJ0eSwgdGhlIHVzZXIgb2YgdGhpcyAKK3NvZnR3YXJlIG1heSBjaG9vc2UgdG8gYWNjZXB0IGl0IGVpdGhlciBhcyAxKSBQdWJsaWMgRG9tYWluLCAyKSB1bmRlciB0aGUgCitjb25kaXRpb25zIG9mIHRoZSBNSVQgTGljZW5zZSAoc2VlIGJlbG93KSwgb3IgMykgdW5kZXIgdGhlIHRlcm1zIG9mIGR1YWwgCitQdWJsaWMgRG9tYWluL01JVCBMaWNlbnNlIGNvbmRpdGlvbnMgZGVzY3JpYmVkIGhlcmUsIGFzIHRoZXkgY2hvb3NlLgorCitUaGUgTUlUIExpY2Vuc2UgaXMgYWJvdXQgYXMgY2xvc2UgdG8gUHVibGljIERvbWFpbiBhcyBhIGxpY2Vuc2UgY2FuIGdldCwgYW5kIGlzCitkZXNjcmliZWQgaW4gY2xlYXIsIGNvbmNpc2UgdGVybXMgYXQ6CisKKyAgIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UKKyAgIAorVGhlIGZ1bGwgdGV4dCBvZiB0aGUgTUlUIExpY2Vuc2UgZm9sbG93czoKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCYXB0aXN0ZSBMZXBpbGxldXIKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCitmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CityZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwKK21vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCitCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCitDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCitTT0ZUV0FSRS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKEVORCBMSUNFTlNFIFRFWFQpCisKK1RoZSBNSVQgbGljZW5zZSBpcyBjb21wYXRpYmxlIHdpdGggYm90aCB0aGUgR1BMIGFuZCBjb21tZXJjaWFsCitzb2Z0d2FyZSwgYWZmb3JkaW5nIG9uZSBhbGwgb2YgdGhlIHJpZ2h0cyBvZiBQdWJsaWMgRG9tYWluIHdpdGggdGhlCittaW5vciBudWlzYW5jZSBvZiBiZWluZyByZXF1aXJlZCB0byBrZWVwIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlCithbmQgbGljZW5zZSB0ZXh0IGluIHRoZSBzb3VyY2UgY29kZS4gTm90ZSBhbHNvIHRoYXQgYnkgYWNjZXB0aW5nIHRoZQorUHVibGljIERvbWFpbiAibGljZW5zZSIgeW91IGNhbiByZS1saWNlbnNlIHlvdXIgY29weSB1c2luZyB3aGF0ZXZlcgorbGljZW5zZSB5b3UgbGlrZS4KKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIk1hdGVyaWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwordGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAoraW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgTWF0ZXJpYWxzLgorCitUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK1RPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitNQVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgorCisKK1NHSSBGUkVFIFNPRlRXQVJFIExJQ0VOU0UgQiAoVmVyc2lvbiAyLjAsIFNlcHQuIDE4LCAyMDA4KQorCitDb3B5cmlnaHQgKEMpIDE5OTIgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgdGhlIGRhdGVzIG9mIGZpcnN0IHB1YmxpY2F0aW9uIGFuZCBlaXRoZXIKK3RoaXMgcGVybWlzc2lvbiBub3RpY2Ugb3IgYSByZWZlcmVuY2UgdG8gaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLworc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuIAorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBTSUxJQ09OCitHUkFQSElDUywgSU5DLiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0FOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIHNoYWxsCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyCitkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gU2lsaWNvbgorR3JhcGhpY3MsIEluYy4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworTGljZW5zZSBjb3BpZWQgZnJvbSBiaW4vbGNvdjoKKworIworIyAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwNworIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisjICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgCisjCisjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKworQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKK2luIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKyAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTlZJRElBLCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworQ29weXJpZ2h0IDIwMDAtMjAwNyBOaWVscyBQcm92b3MgPHByb3Zvc0BjaXRpLnVtaWNoLmVkdT4KK0NvcHlyaWdodCAyMDA3LTIwMDkgTmllbHMgUHJvdm9zIGFuZCBOaWNrIE1hdGhld3NvbgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCitOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworQ29weXJpZ2h0IChjKSAyMDEzLCBHb29nbGUgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKK2FyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFCitHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKK1NUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkKK1dBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKyhDb3BpZWQgZnJvbSB0aGUgUkVBRE1FLikKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGF1dGhvcnMgbWFrZSBOTyBXQVJSQU5UWSBvciByZXByZXNlbnRhdGlvbiwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwKK3dpdGggcmVzcGVjdCB0byB0aGlzIHNvZnR3YXJlLCBpdHMgcXVhbGl0eSwgYWNjdXJhY3ksIG1lcmNoYW50YWJpbGl0eSwgb3IKK2ZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiQVMgSVMiLCBhbmQgeW91LAoraXRzIHVzZXIsIGFzc3VtZSB0aGUgZW50aXJlIHJpc2sgYXMgdG8gaXRzIHF1YWxpdHkgYW5kIGFjY3VyYWN5LgorCitUaGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodCAoQykgMTk5MS0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KK0FsbCBSaWdodHMgUmVzZXJ2ZWQgZXhjZXB0IGFzIHNwZWNpZmllZCBiZWxvdy4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc29mdHdhcmUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGZvciBhbnkgcHVycG9zZSwgd2l0aG91dCBmZWUsIHN1YmplY3QgdG8gdGhlc2UKK2NvbmRpdGlvbnM6CisoMSkgSWYgYW55IHBhcnQgb2YgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkLCB0aGVuIHRoaXMKK1JFQURNRSBmaWxlIG11c3QgYmUgaW5jbHVkZWQsIHdpdGggdGhpcyBjb3B5cmlnaHQgYW5kIG5vLXdhcnJhbnR5IG5vdGljZQordW5hbHRlcmVkOyBhbmQgYW55IGFkZGl0aW9ucywgZGVsZXRpb25zLCBvciBjaGFuZ2VzIHRvIHRoZSBvcmlnaW5hbCBmaWxlcworbXVzdCBiZSBjbGVhcmx5IGluZGljYXRlZCBpbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbi4KKygyKSBJZiBvbmx5IGV4ZWN1dGFibGUgY29kZSBpcyBkaXN0cmlidXRlZCwgdGhlbiB0aGUgYWNjb21wYW55aW5nCitkb2N1bWVudGF0aW9uIG11c3Qgc3RhdGUgdGhhdCAidGhpcyBzb2Z0d2FyZSBpcyBiYXNlZCBpbiBwYXJ0IG9uIHRoZSB3b3JrIG9mCit0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCIuCisoMykgUGVybWlzc2lvbiBmb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgZ3JhbnRlZCBvbmx5IGlmIHRoZSB1c2VyIGFjY2VwdHMKK2Z1bGwgcmVzcG9uc2liaWxpdHkgZm9yIGFueSB1bmRlc2lyYWJsZSBjb25zZXF1ZW5jZXM7IHRoZSBhdXRob3JzIGFjY2VwdAorTk8gTElBQklMSVRZIGZvciBkYW1hZ2VzIG9mIGFueSBraW5kLgorCitUaGVzZSBjb25kaXRpb25zIGFwcGx5IHRvIGFueSBzb2Z0d2FyZSBkZXJpdmVkIGZyb20gb3IgYmFzZWQgb24gdGhlIElKRyBjb2RlLAorbm90IGp1c3QgdG8gdGhlIHVubW9kaWZpZWQgbGlicmFyeS4gIElmIHlvdSB1c2Ugb3VyIHdvcmssIHlvdSBvdWdodCB0bworYWNrbm93bGVkZ2UgdXMuCisKK1Blcm1pc3Npb24gaXMgTk9UIGdyYW50ZWQgZm9yIHRoZSB1c2Ugb2YgYW55IElKRyBhdXRob3IncyBuYW1lIG9yIGNvbXBhbnkgbmFtZQoraW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHJlbGF0aW5nIHRvIHRoaXMgc29mdHdhcmUgb3IgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCitpdC4gIFRoaXMgc29mdHdhcmUgbWF5IGJlIHJlZmVycmVkIHRvIG9ubHkgYXMgInRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MKK3NvZnR3YXJlIi4KKworV2Ugc3BlY2lmaWNhbGx5IHBlcm1pdCBhbmQgZW5jb3VyYWdlIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhcyB0aGUgYmFzaXMgb2YKK2NvbW1lcmNpYWwgcHJvZHVjdHMsIHByb3ZpZGVkIHRoYXQgYWxsIHdhcnJhbnR5IG9yIGxpYWJpbGl0eSBjbGFpbXMgYXJlCithc3N1bWVkIGJ5IHRoZSBwcm9kdWN0IHZlbmRvci4KKworCithbnNpMmtuci5jIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGJ5IHBlcm1pc3Npb24gb2YgTC4gUGV0ZXIgRGV1dHNjaCwKK3NvbGUgcHJvcHJpZXRvciBvZiBpdHMgY29weXJpZ2h0IGhvbGRlciwgQWxhZGRpbiBFbnRlcnByaXNlcyBvZiBNZW5sbyBQYXJrLCBDQS4KK2Fuc2kya25yLmMgaXMgTk9UIGNvdmVyZWQgYnkgdGhlIGFib3ZlIGNvcHlyaWdodCBhbmQgY29uZGl0aW9ucywgYnV0IGluc3RlYWQKK2J5IHRoZSB1c3VhbCBkaXN0cmlidXRpb24gdGVybXMgb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgcHJpbmNpcGFsbHksCit0aGF0IHlvdSBtdXN0IGluY2x1ZGUgc291cmNlIGNvZGUgaWYgeW91IHJlZGlzdHJpYnV0ZSBpdC4gIChTZWUgdGhlIGZpbGUKK2Fuc2kya25yLmMgZm9yIGZ1bGwgZGV0YWlscy4pICBIb3dldmVyLCBzaW5jZSBhbnNpMmtuci5jIGlzIG5vdCBuZWVkZWQgYXMgcGFydAorb2YgYW55IHByb2dyYW0gZ2VuZXJhdGVkIGZyb20gdGhlIElKRyBjb2RlLCB0aGlzIGRvZXMgbm90IGxpbWl0IHlvdSBtb3JlIHRoYW4KK3RoZSBmb3JlZ29pbmcgcGFyYWdyYXBocyBkby4KKworVGhlIFVuaXggY29uZmlndXJhdGlvbiBzY3JpcHQgImNvbmZpZ3VyZSIgd2FzIHByb2R1Y2VkIHdpdGggR05VIEF1dG9jb25mLgorSXQgaXMgY29weXJpZ2h0IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYnV0IGlzIGZyZWVseSBkaXN0cmlidXRhYmxlLgorVGhlIHNhbWUgaG9sZHMgZm9yIGl0cyBzdXBwb3J0aW5nIHNjcmlwdHMgKGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwKK2x0Y29uZmlnLCBsdG1haW4uc2gpLiAgQW5vdGhlciBzdXBwb3J0IHNjcmlwdCwgaW5zdGFsbC1zaCwgaXMgY29weXJpZ2h0CitieSBNLkkuVC4gYnV0IGlzIGFsc28gZnJlZWx5IGRpc3RyaWJ1dGFibGUuCisKK0l0IGFwcGVhcnMgdGhhdCB0aGUgYXJpdGhtZXRpYyBjb2Rpbmcgb3B0aW9uIG9mIHRoZSBKUEVHIHNwZWMgaXMgY292ZXJlZCBieQorcGF0ZW50cyBvd25lZCBieSBJQk0sIEFUJlQsIGFuZCBNaXRzdWJpc2hpLiAgSGVuY2UgYXJpdGhtZXRpYyBjb2RpbmcgY2Fubm90CitsZWdhbGx5IGJlIHVzZWQgd2l0aG91dCBvYnRhaW5pbmcgb25lIG9yIG1vcmUgbGljZW5zZXMuICBGb3IgdGhpcyByZWFzb24sCitzdXBwb3J0IGZvciBhcml0aG1ldGljIGNvZGluZyBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGZyZWUgSlBFRyBzb2Z0d2FyZS4KKyhTaW5jZSBhcml0aG1ldGljIGNvZGluZyBwcm92aWRlcyBvbmx5IGEgbWFyZ2luYWwgZ2FpbiBvdmVyIHRoZSB1bnBhdGVudGVkCitIdWZmbWFuIG1vZGUsIGl0IGlzIHVubGlrZWx5IHRoYXQgdmVyeSBtYW55IGltcGxlbWVudGF0aW9ucyB3aWxsIHN1cHBvcnQgaXQuKQorU28gZmFyIGFzIHdlIGFyZSBhd2FyZSwgdGhlcmUgYXJlIG5vIHBhdGVudCByZXN0cmljdGlvbnMgb24gdGhlIHJlbWFpbmluZworY29kZS4KKworVGhlIElKRyBkaXN0cmlidXRpb24gZm9ybWVybHkgaW5jbHVkZWQgY29kZSB0byByZWFkIGFuZCB3cml0ZSBHSUYgZmlsZXMuCitUbyBhdm9pZCBlbnRhbmdsZW1lbnQgd2l0aCB0aGUgVW5pc3lzIExaVyBwYXRlbnQsIEdJRiByZWFkaW5nIHN1cHBvcnQgaGFzCitiZWVuIHJlbW92ZWQgYWx0b2dldGhlciwgYW5kIHRoZSBHSUYgd3JpdGVyIGhhcyBiZWVuIHNpbXBsaWZpZWQgdG8gcHJvZHVjZQorInVuY29tcHJlc3NlZCBHSUZzIi4gIFRoaXMgdGVjaG5pcXVlIGRvZXMgbm90IHVzZSB0aGUgTFpXIGFsZ29yaXRobTsgdGhlCityZXN1bHRpbmcgR0lGIGZpbGVzIGFyZSBsYXJnZXIgdGhhbiB1c3VhbCwgYnV0IGFyZSByZWFkYWJsZSBieSBhbGwgc3RhbmRhcmQKK0dJRiBkZWNvZGVycy4KKworV2UgYXJlIHJlcXVpcmVkIHRvIHN0YXRlIHRoYXQKKyAgICAiVGhlIEdyYXBoaWNzIEludGVyY2hhbmdlIEZvcm1hdChjKSBpcyB0aGUgQ29weXJpZ2h0IHByb3BlcnR5IG9mCisgICAgQ29tcHVTZXJ2ZSBJbmNvcnBvcmF0ZWQuICBHSUYoc20pIGlzIGEgU2VydmljZSBNYXJrIHByb3BlcnR5IG9mCisgICAgQ29tcHVTZXJ2ZSBJbmNvcnBvcmF0ZWQuIgorCitDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4KKworTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cit5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCitZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKK1RoaXMgY29weSBvZiB0aGUgbGlicG5nIG5vdGljZXMgaXMgcHJvdmlkZWQgZm9yIHlvdXIgY29udmVuaWVuY2UuICBJbiBjYXNlIG9mCithbnkgZGlzY3JlcGFuY3kgYmV0d2VlbiB0aGlzIGNvcHkgYW5kIHRoZSBub3RpY2VzIGluIHRoZSBmaWxlIHBuZy5oIHRoYXQgaXMKK2luY2x1ZGVkIGluIHRoZSBsaWJwbmcgZGlzdHJpYnV0aW9uLCB0aGUgbGF0dGVyIHNoYWxsIHByZXZhaWwuCisKK0NPUFlSSUdIVCBOT1RJQ0UsIERJU0NMQUlNRVIsIGFuZCBMSUNFTlNFOgorCitJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCit0aGlzIHNlbnRlbmNlLgorCitUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIGxpYnBuZyBsaWNlbnNlLgorCitsaWJwbmcgdmVyc2lvbnMgMS4yLjYsIEF1Z3VzdCAxNSwgMjAwNCwgdGhyb3VnaCAxLjIuNDUsIEp1bHkgNywgMjAxMSwgYXJlCitDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYtMjAwOSBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKK2Rpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjIuNQord2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWwgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKKworICAgQ29zbWluIFRydXRhCisKK2xpYnBuZyB2ZXJzaW9ucyAxLjAuNywgSnVseSAxLCAyMDAwLCB0aHJvdWdoIDEuMi41IC0gT2N0b2JlciAzLCAyMDAyLCBhcmUKK0NvcHlyaWdodCAoYykgMjAwMC0yMDAyIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQorZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMC42Cit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKKworICAgU2ltb24tUGllcnJlIENhZGlldXgKKyAgIEVyaWMgUy4gUmF5bW9uZAorICAgR2lsbGVzIFZvbGxhbnQKKworYW5kIHdpdGggdGhlIGZvbGxvd2luZyBhZGRpdGlvbnMgdG8gdGhlIGRpc2NsYWltZXI6CisKKyAgIFRoZXJlIGlzIG5vIHdhcnJhbnR5IGFnYWluc3QgaW50ZXJmZXJlbmNlIHdpdGggeW91ciBlbmpveW1lbnQgb2YgdGhlCisgICBsaWJyYXJ5IG9yIGFnYWluc3QgaW5mcmluZ2VtZW50LiAgVGhlcmUgaXMgbm8gd2FycmFudHkgdGhhdCBvdXIKKyAgIGVmZm9ydHMgb3IgdGhlIGxpYnJhcnkgd2lsbCBmdWxmaWxsIGFueSBvZiB5b3VyIHBhcnRpY3VsYXIgcHVycG9zZXMKKyAgIG9yIG5lZWRzLiAgVGhpcyBsaWJyYXJ5IGlzIHByb3ZpZGVkIHdpdGggYWxsIGZhdWx0cywgYW5kIHRoZSBlbnRpcmUKKyAgIHJpc2sgb2Ygc2F0aXNmYWN0b3J5IHF1YWxpdHksIHBlcmZvcm1hbmNlLCBhY2N1cmFjeSwgYW5kIGVmZm9ydCBpcyB3aXRoCisgICB0aGUgdXNlci4KKworbGlicG5nIHZlcnNpb25zIDAuOTcsIEphbnVhcnkgMTk5OCwgdGhyb3VnaCAxLjAuNiwgTWFyY2ggMjAsIDIwMDAsIGFyZQorQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQorZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTAuOTYsCit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnM6CisKKyAgIFRvbSBMYW5lCisgICBHbGVubiBSYW5kZXJzLVBlaHJzb24KKyAgIFdpbGxlbSB2YW4gU2NoYWlrCisKK2xpYnBuZyB2ZXJzaW9ucyAwLjg5LCBKdW5lIDE5OTYsIHRocm91Z2ggMC45NiwgTWF5IDE5OTcsIGFyZQorQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyCitEaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMC44OCwKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9yczoKKworICAgSm9obiBCb3dsZXIKKyAgIEtldmluIEJyYWNleQorICAgU2FtIEJ1c2hlbGwKKyAgIE1hZ251cyBIb2xtZ3JlbgorICAgR3JlZyBSb2Vsb2ZzCisgICBUb20gVGFubmVyCisKK2xpYnBuZyB2ZXJzaW9ucyAwLjUsIE1heSAxOTk1LCB0aHJvdWdoIDAuODgsIEphbnVhcnkgMTk5NiwgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYgR3V5IEVyaWMgU2NoYWxuYXQsIEdyb3VwIDQyLCBJbmMuCisKK0ZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UsICJDb250cmlidXRpbmcgQXV0aG9ycyIKK2lzIGRlZmluZWQgYXMgdGhlIGZvbGxvd2luZyBzZXQgb2YgaW5kaXZpZHVhbHM6CisKKyAgIEFuZHJlYXMgRGlsZ2VyCisgICBEYXZlIE1hcnRpbmRhbGUKKyAgIEd1eSBFcmljIFNjaGFsbmF0CisgICBQYXVsIFNjaG1pZHQKKyAgIFRpbSBXZWduZXIKKworVGhlIFBORyBSZWZlcmVuY2UgTGlicmFyeSBpcyBzdXBwbGllZCAiQVMgSVMiLiAgVGhlIENvbnRyaWJ1dGluZyBBdXRob3JzCithbmQgR3JvdXAgNDIsIEluYy4gZGlzY2xhaW0gYWxsIHdhcnJhbnRpZXMsIGV4cHJlc3NlZCBvciBpbXBsaWVkLAoraW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgb2YKK2ZpdG5lc3MgZm9yIGFueSBwdXJwb3NlLiAgVGhlIENvbnRyaWJ1dGluZyBBdXRob3JzIGFuZCBHcm91cCA0MiwgSW5jLgorYXNzdW1lIG5vIGxpYWJpbGl0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LAorb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCB3aGljaCBtYXkgcmVzdWx0IGZyb20gdGhlIHVzZSBvZiB0aGUgUE5HCitSZWZlcmVuY2UgTGlicmFyeSwgZXZlbiBpZiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc291cmNlIGNvZGUsIG9yIHBvcnRpb25zIGhlcmVvZiwgZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0IGZlZSwgc3ViamVjdAordG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKzEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb3VyY2UgY29kZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZC4KKworMi4gQWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2ggYW5kIG11c3Qgbm90CisgICBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc291cmNlLgorCiszLiBUaGlzIENvcHlyaWdodCBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkKKyAgIHNvdXJjZSBvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmlidXRpb24uCisKK1RoZSBDb250cmlidXRpbmcgQXV0aG9ycyBhbmQgR3JvdXAgNDIsIEluYy4gc3BlY2lmaWNhbGx5IHBlcm1pdCwgd2l0aG91dAorZmVlLCBhbmQgZW5jb3VyYWdlIHRoZSB1c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBhcyBhIGNvbXBvbmVudCB0bworc3VwcG9ydGluZyB0aGUgUE5HIGZpbGUgZm9ybWF0IGluIGNvbW1lcmNpYWwgcHJvZHVjdHMuICBJZiB5b3UgdXNlIHRoaXMKK3NvdXJjZSBjb2RlIGluIGEgcHJvZHVjdCwgYWNrbm93bGVkZ21lbnQgaXMgbm90IHJlcXVpcmVkIGJ1dCB3b3VsZCBiZQorYXBwcmVjaWF0ZWQuCisKKworQSAicG5nX2dldF9jb3B5cmlnaHQiIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgZm9yIGNvbnZlbmllbnQgdXNlIGluICJhYm91dCIKK2JveGVzIGFuZCB0aGUgbGlrZToKKworICAgcHJpbnRmKCIlcyIscG5nX2dldF9jb3B5cmlnaHQoTlVMTCkpOworCitBbHNvLCB0aGUgUE5HIGxvZ28gKGluIFBORyBmb3JtYXQsIG9mIGNvdXJzZSkgaXMgc3VwcGxpZWQgaW4gdGhlCitmaWxlcyAicG5nYmFyLnBuZyIgYW5kICJwbmdiYXIuanBnICg4OHgzMSkgYW5kICJwbmdub3cucG5nIiAoOTh4MzEpLgorCitMaWJwbmcgaXMgT1NJIENlcnRpZmllZCBPcGVuIFNvdXJjZSBTb2Z0d2FyZS4gIE9TSSBDZXJ0aWZpZWQgT3BlbiBTb3VyY2UgaXMgYQorY2VydGlmaWNhdGlvbiBtYXJrIG9mIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLgorCitHbGVubiBSYW5kZXJzLVBlaHJzb24KK2dsZW5ucnAgYXQgdXNlcnMuc291cmNlZm9yZ2UubmV0CitKdWx5IDcsIDIwMTEKKworCQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKKworIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIExlc3NlciBHUEwuICBJdCBhbHNvIGNvdW50cworIGFzIHRoZSBzdWNjZXNzb3Igb2YgdGhlIEdOVSBMaWJyYXJ5IFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGhlbmNlCisgdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCitmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQorc3BlY2lhbGx5IGRlc2lnbmF0ZWQgc29mdHdhcmUgcGFja2FnZXMtLXR5cGljYWxseSBsaWJyYXJpZXMtLW9mIHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCBvdGhlciBhdXRob3JzIHdobyBkZWNpZGUgdG8gdXNlIGl0LiAgWW91CitjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCit0aGlzIGxpY2Vuc2Ugb3IgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgdGhlIGJldHRlcgorc3RyYXRlZ3kgdG8gdXNlIGluIGFueSBwYXJ0aWN1bGFyIGNhc2UsIGJhc2VkIG9uIHRoZSBleHBsYW5hdGlvbnMgYmVsb3cuCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLAorbm90IHByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdAoreW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQorZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldAoraXQgaWYgeW91IHdhbnQgaXQ7IHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIGFuZCB1c2UgcGllY2VzIG9mCitpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KK3RoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCitkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlCityaWdodHMuICBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IKK3lvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCB3aGV0aGVyIGdyYXRpcworb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQoreW91LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZQorY29kZS4gIElmIHlvdSBsaW5rIG90aGVyIGNvZGUgd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZQorY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZworaXQuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZQorbGlicmFyeSwgYW5kICgyKSB3ZSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlLCB3aGljaCBnaXZlcyB5b3UgbGVnYWwKK3Blcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgorCisgIFRvIHByb3RlY3QgZWFjaCBkaXN0cmlidXRvciwgd2Ugd2FudCB0byBtYWtlIGl0IHZlcnkgY2xlYXIgdGhhdAordGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcworbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93Cit0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwgdmVyc2lvbiwgc28gdGhhdCB0aGUgb3JpZ2luYWwKK2F1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQoraW50cm9kdWNlZCBieSBvdGhlcnMuCisMCisgIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCithbnkgZnJlZSBwcm9ncmFtLiAgV2Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCBhIGNvbXBhbnkgY2Fubm90CitlZmZlY3RpdmVseSByZXN0cmljdCB0aGUgdXNlcnMgb2YgYSBmcmVlIHByb2dyYW0gYnkgb2J0YWluaW5nIGEKK3Jlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CithbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlCitjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgZnJlZWRvbSBvZiB1c2Ugc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4KKworICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGxpY2Vuc2UsIHRoZSBHTlUgTGVzc2VyCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAoraXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBXZSB1c2UKK3RoaXMgbGljZW5zZSBmb3IgY2VydGFpbiBsaWJyYXJpZXMgaW4gb3JkZXIgdG8gcGVybWl0IGxpbmtpbmcgdGhvc2UKK2xpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgorCisgIFdoZW4gYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIGEgbGlicmFyeSwgd2hldGhlciBzdGF0aWNhbGx5IG9yIHVzaW5nCithIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKK2NvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeS4gIFRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGVyZWZvcmUgcGVybWl0cyBzdWNoIGxpbmtpbmcgb25seSBpZiB0aGUKK2VudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aAordGhlIGxpYnJhcnkuCisKKyAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdAorZG9lcyBMZXNzIHRvIHByb3RlY3QgdGhlIHVzZXIncyBmcmVlZG9tIHRoYW4gdGhlIG9yZGluYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcworb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiAgVGhlc2UgZGlzYWR2YW50YWdlcworYXJlIHRoZSByZWFzb24gd2UgdXNlIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtYW55CitsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCitzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCisKKyAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KK2VuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdCBiZWNvbWVzCithIGRlLWZhY3RvIHN0YW5kYXJkLiAgVG8gYWNoaWV2ZSB0aGlzLCBub24tZnJlZSBwcm9ncmFtcyBtdXN0IGJlCithbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCitsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gIEluIHRoaXMKK2Nhc2UsIHRoZXJlIGlzIGxpdHRsZSB0byBnYWluIGJ5IGxpbWl0aW5nIHRoZSBmcmVlIGxpYnJhcnkgdG8gZnJlZQorc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBJbiBvdGhlciBjYXNlcywgcGVybWlzc2lvbiB0byB1c2UgYSBwYXJ0aWN1bGFyIGxpYnJhcnkgaW4gbm9uLWZyZWUKK3Byb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgorZnJlZSBzb2Z0d2FyZS4gIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbgorbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBtYW55IG1vcmUgcGVvcGxlIHRvIHVzZSB0aGUgd2hvbGUgR05VCitvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZworc3lzdGVtLgorCisgIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCit1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcworbGlua2VkIHdpdGggdGhlIExpYnJhcnkgaGFzIHRoZSBmcmVlZG9tIGFuZCB0aGUgd2hlcmV3aXRoYWwgdG8gcnVuCit0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoZXJlYXMgdGhlIGxhdHRlciBtdXN0CitiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KKwwKKwkJICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgorcHJvZ3JhbSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3IKK290aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KK0VhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCitzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yCit3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCithbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKyAgCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tYmluZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIFVzZSBhIHN1aXRhYmxlIHNoYXJlZCBsaWJyYXJ5IG1lY2hhbmlzbSBmb3IgbGlua2luZyB3aXRoIHRoZQorICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCisgICAgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sCisgICAgcmF0aGVyIHRoYW4gY29weWluZyBsaWJyYXJ5IGZ1bmN0aW9ucyBpbnRvIHRoZSBleGVjdXRhYmxlLCBhbmQgKDIpCisgICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgorICAgIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcworICAgIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIHZlcnNpb24gdGhhdCB0aGUgd29yayB3YXMgbWFkZSB3aXRoLgorCisgICAgYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQKKyAgICBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMKKyAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCisgICAgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgorCisgICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKKyAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUKKyAgICBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCisKKyAgICBlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKKyAgICBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS4KKworICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKK0xpYnJhcnkiIG11c3QgaW5jbHVkZSBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yCityZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKK3RoZSBtYXRlcmlhbHMgdG8gYmUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzCitub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCit0aGlzIExpY2Vuc2UuCisMCisgIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQorcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LAorYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCithbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywKK3NvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cworZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKK3dyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwordmVyc2lvbnMgb2YgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgorU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLAorYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBMaWJyYXJ5CitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKKyJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKK2xpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorDAorICAxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsCit3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcworY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIKK2RlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKK29mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nCithbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KK1dBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuCitFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUgorT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKK0tJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKK0xJQlJBUlkgSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FCitUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KK1dSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZCitBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQorRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUKK0xJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKK1JFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBCitGQUlMVVJFIE9GIFRIRSBMSUJSQVJZIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgU09GVFdBUkUpLCBFVkVOIElGCitTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKK2V2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZworcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gIEl0IGlzCitzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCisiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCisgIGxpYnJhcnkgYEZyb2InIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuIGJ5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCisKKworCisgICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAgICBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICAgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgICBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAgICBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICAgIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCisgICAgSU4gTk8gRVZFTlQgU0hBTEwgUFJFQ0lTSU9OIElOU0lHSFQgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUgorICAgIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICAgIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgICAgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0NvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgIGRpc3RyaWJ1dGlvbi4KKworICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworQWRkaXRpb25hbCBJUCBSaWdodHMgR3JhbnQgKFBhdGVudHMpCisKKyJUaGlzIGltcGxlbWVudGF0aW9uIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrcyBkaXN0cmlidXRlZCBieQorR29vZ2xlIGFzIHBhcnQgb2YgdGhlIFdlYk0gUHJvamVjdC4KKworR29vZ2xlIGhlcmVieSBncmFudHMgdG8geW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsCituby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKQorcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwKK3RyYW5zZmVyLCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZCBwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIHRoaXMKK2ltcGxlbWVudGF0aW9uIG9mIFZQOCwgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQKK2NsYWltcywgYm90aCBjdXJyZW50bHkgb3duZWQgYnkgR29vZ2xlIGFuZCBhY3F1aXJlZCBpbiB0aGUgZnV0dXJlLAorbGljZW5zYWJsZSBieSBHb29nbGUgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoaXMKK2ltcGxlbWVudGF0aW9uIG9mIFZQOC4gVGhpcyBncmFudCBkb2VzIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlCitpbmZyaW5nZWQgb25seSBhcyBhIGNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoaXMKK2ltcGxlbWVudGF0aW9uLiBJZiB5b3Ugb3IgeW91ciBhZ2VudCBvciBleGNsdXNpdmUgbGljZW5zZWUgaW5zdGl0dXRlIG9yCitvcmRlciBvciBhZ3JlZSB0byB0aGUgaW5zdGl0dXRpb24gb2YgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkKK2VudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcKK3RoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBWUDggb3IgYW55IGNvZGUgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGlzCitpbXBsZW1lbnRhdGlvbiBvZiBWUDggY29uc3RpdHV0ZXMgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQKK2luZnJpbmdlbWVudCwgb3IgaW5kdWNlbWVudCBvZiBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQKK3JpZ2h0cyBncmFudGVkIHRvIHlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgVlA4CitzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCitFeGNlcHQgd2hlcmUgb3RoZXJ3aXNlIG5vdGVkIGluIHRoZSBzb3VyY2UgY29kZSAoZS5nLiB0aGUgZmlsZXMgaGFzaC5jLAorbGlzdC5jIGFuZCB0aGUgdHJpbyBmaWxlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgYSBzaW1pbGFyIGxpY2VuY2UgYnV0Cit3aXRoIGRpZmZlcmVudCBDb3B5cmlnaHQgbm90aWNlcykgYWxsIHRoZSBmaWxlcyBhcmU6CisKKyBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMyBEYW5pZWwgVmVpbGxhcmQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1ci0KK25pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVQtCitORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitEQU5JRUwgVkVJTExBUkQgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT04tCitORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBEYW5pZWwgVmVpbGxhcmQgc2hhbGwgbm90CitiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbC0KK2luZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIGhpbS4KKworCitMaWNlbmNlIGZvciBsaWJ4c2x0IGV4Y2VwdCBsaWJleHNsdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIERhbmllbCBWZWlsbGFyZC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVyLQorbmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVC0KK05FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0RBTklFTCBWRUlMTEFSRCBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTi0KK05FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIERhbmllbCBWZWlsbGFyZCBzaGFsbCBub3QKK2JlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsLQoraW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gaGltLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xpY2VuY2UgZm9yIGxpYmV4c2x0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgVGhvbWFzIEJyb3llciwgQ2hhcmxpZSBCb3plbWFuIGFuZCBEYW5pZWwgVmVpbGxhcmQuCisgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXItCituaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklULQorTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTi0KK05FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBhdXRob3JzIHNoYWxsIG5vdAorYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWwtCitpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSBoaW0uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xaTUEgU0RLIGlzIHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworQ29weXJpZ2h0IChjKSAyMDAzLTIwMDkgSm9uYXRoYW4gJ1dvbGYnIFJlbnR6c2NoOiA8aHR0cDovL3JlbnR6c2NoLmNvbT4KK1NvbWUgcmlnaHRzIHJlc2VydmVkOiA8aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocD4KKworVGhlIGRlZmF1bHQgTWVzYSBsaWNlbnNlIGlzIGFzIGZvbGxvd3M6CisKK0NvcHlyaWdodCAoQykgMTk5OS0yMDA3ICBCcmlhbiBQYXVsICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKK2NvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCit0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCit0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKK2FuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKK2luIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKK0JSSUFOIFBBVUwgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOCitBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworCisKK1NvbWUgcGFydHMgb2YgTWVzYSBhcmUgY29weXJpZ2h0ZWQgdW5kZXIgdGhlIEdOVSBMR1BMLiAgU2VlIHRoZQorTWVzYS9kb2NzL0NPUFlSSUdIVCBmaWxlIGZvciBkZXRhaWxzLgorCitUaGUgZm9sbG93aW5nIGlzIHRoZSBzdGFuZGFyZCBHTlUgY29weXJpZ2h0IGZpbGUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCQkgIEdOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IEdQTC4gIEl0IGlzCisgbnVtYmVyZWQgMiBiZWNhdXNlIGl0IGdvZXMgd2l0aCB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdQTC5dCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCitmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgVGhpcyBsaWNlbnNlLCB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSwgYW5kIHRvIGFueQorb3RoZXIgbGlicmFyaWVzIHdob3NlIGF1dGhvcnMgZGVjaWRlIHRvIHVzZSBpdC4gIFlvdSBjYW4gdXNlIGl0IGZvcgoreW91ciBsaWJyYXJpZXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZgoreW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCitvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlCit5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCitjb2RlLiAgSWYgeW91IGxpbmsgYSBwcm9ncmFtIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cyBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5LCBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIE91ciBtZXRob2Qgb2YgcHJvdGVjdGluZyB5b3VyIHJpZ2h0cyBoYXMgdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0Cit0aGUgbGlicmFyeSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbAorcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKKyAgQWxzbywgZm9yIGVhY2ggZGlzdHJpYnV0b3IncyBwcm90ZWN0aW9uLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK2xpYnJhcnkuICBJZiB0aGUgbGlicmFyeSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwKK3ZlcnNpb24sIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24KK3RoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy4KKwwKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCBjb21wYW5pZXMgZGlzdHJpYnV0aW5nIGZyZWUKK3NvZnR3YXJlIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIHRodXMgaW4gZWZmZWN0Cit0cmFuc2Zvcm1pbmcgdGhlIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBzb2Z0d2FyZS4gIFRvIHByZXZlbnQgdGhpcywKK3dlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncworZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIHdhcyBkZXNpZ25lZCBmb3IgdXRpbGl0eSBwcm9ncmFtcy4gIFRoaXMKK2xpY2Vuc2UsIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4KK2Rlc2lnbmF0ZWQgbGlicmFyaWVzLiAgVGhpcyBsaWNlbnNlIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeQorb25lOyBiZSBzdXJlIHRvIHJlYWQgaXQgaW4gZnVsbCwgYW5kIGRvbid0IGFzc3VtZSB0aGF0IGFueXRoaW5nIGluIGl0IGlzCit0aGUgc2FtZSBhcyBpbiB0aGUgb3JkaW5hcnkgbGljZW5zZS4KKworICBUaGUgcmVhc29uIHdlIGhhdmUgYSBzZXBhcmF0ZSBwdWJsaWMgbGljZW5zZSBmb3Igc29tZSBsaWJyYXJpZXMgaXMgdGhhdAordGhleSBibHVyIHRoZSBkaXN0aW5jdGlvbiB3ZSB1c3VhbGx5IG1ha2UgYmV0d2VlbiBtb2RpZnlpbmcgb3IgYWRkaW5nIHRvIGEKK3Byb2dyYW0gYW5kIHNpbXBseSB1c2luZyBpdC4gIExpbmtpbmcgYSBwcm9ncmFtIHdpdGggYSBsaWJyYXJ5LCB3aXRob3V0CitjaGFuZ2luZyB0aGUgbGlicmFyeSwgaXMgaW4gc29tZSBzZW5zZSBzaW1wbHkgdXNpbmcgdGhlIGxpYnJhcnksIGFuZCBpcworYW5hbG9nb3VzIHRvIHJ1bm5pbmcgYSB1dGlsaXR5IHByb2dyYW0gb3IgYXBwbGljYXRpb24gcHJvZ3JhbS4gIEhvd2V2ZXIsIGluCithIHRleHR1YWwgYW5kIGxlZ2FsIHNlbnNlLCB0aGUgbGlua2VkIGV4ZWN1dGFibGUgaXMgYSBjb21iaW5lZCB3b3JrLCBhCitkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LCBhbmQgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK3RyZWF0cyBpdCBhcyBzdWNoLgorCisgIEJlY2F1c2Ugb2YgdGhpcyBibHVycmVkIGRpc3RpbmN0aW9uLCB1c2luZyB0aGUgb3JkaW5hcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgZm9yIGxpYnJhcmllcyBkaWQgbm90IGVmZmVjdGl2ZWx5IHByb21vdGUgc29mdHdhcmUKK3NoYXJpbmcsIGJlY2F1c2UgbW9zdCBkZXZlbG9wZXJzIGRpZCBub3QgdXNlIHRoZSBsaWJyYXJpZXMuICBXZQorY29uY2x1ZGVkIHRoYXQgd2Vha2VyIGNvbmRpdGlvbnMgbWlnaHQgcHJvbW90ZSBzaGFyaW5nIGJldHRlci4KKworICBIb3dldmVyLCB1bnJlc3RyaWN0ZWQgbGlua2luZyBvZiBub24tZnJlZSBwcm9ncmFtcyB3b3VsZCBkZXByaXZlIHRoZQordXNlcnMgb2YgdGhvc2UgcHJvZ3JhbXMgb2YgYWxsIGJlbmVmaXQgZnJvbSB0aGUgZnJlZSBzdGF0dXMgb2YgdGhlCitsaWJyYXJpZXMgdGhlbXNlbHZlcy4gIFRoaXMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvCitwZXJtaXQgZGV2ZWxvcGVycyBvZiBub24tZnJlZSBwcm9ncmFtcyB0byB1c2UgZnJlZSBsaWJyYXJpZXMsIHdoaWxlCitwcmVzZXJ2aW5nIHlvdXIgZnJlZWRvbSBhcyBhIHVzZXIgb2Ygc3VjaCBwcm9ncmFtcyB0byBjaGFuZ2UgdGhlIGZyZWUKK2xpYnJhcmllcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlbS4gIChXZSBoYXZlIG5vdCBzZWVuIGhvdyB0byBhY2hpZXZlCit0aGlzIGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiBoZWFkZXIgZmlsZXMsIGJ1dCB3ZSBoYXZlIGFjaGlldmVkIGl0IGFzIHJlZ2FyZHMKK2NoYW5nZXMgaW4gdGhlIGFjdHVhbCBmdW5jdGlvbnMgb2YgdGhlIExpYnJhcnkuKSAgVGhlIGhvcGUgaXMgdGhhdCB0aGlzCit3aWxsIGxlYWQgdG8gZmFzdGVyIGRldmVsb3BtZW50IG9mIGZyZWUgbGlicmFyaWVzLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoaWxlIHRoZSBsYXR0ZXIgb25seQord29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgbGlicmFyeS4KKworICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIGEgbGlicmFyeSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByYXRoZXIgdGhhbiBieSB0aGlzIHNwZWNpYWwgb25lLgorDAorCQkgIEdOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSB3aGljaAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yIG90aGVyIGF1dGhvcml6ZWQKK3BhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGlicmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLiAgRWFjaCBsaWNlbnNlZSBpcworYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCitzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yCit3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCithbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKyAgCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tcGlsZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGMpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZCkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5CitkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCitidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAorImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQorbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisMCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgQXBwZW5kaXg6IEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKK2V2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZworcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gIEl0IGlzCitzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCisiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbiBieSBKYW1lcyBSYW5kb20gSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk5MAorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQorCisKKyAqIE1PRFBfQjY0IC0gSGlnaCBwZXJmb3JtYW5jZSBiYXNlNjQgZW5jb2Rlci9kZWNvZGVyCisgKiBWZXJzaW9uIDEuMyAtLSAxNy1NYXItMjAwNgorICogaHR0cDovL21vZHAuY29tL3JlbGVhc2UvYmFzZTY0CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2ICBOaWNrIEdhbGJyZWF0aCAtLSBuaWNrZyBbYXRdIG1vZHAgW2RvdF0gY29tCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgbW9kcC5jb20gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitDb3B5cmlnaHQgMjAwOCBNb2xva29DYWNhbworQWxsIHJpZ2h0cyByZXNlcnZlZAorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRpbmcgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKK1NUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworQ29weXJpZ2h0IChjKSAyMDA0LTIwMDkgU2VyZ2V5IEx5dWJrYQorUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDA5IEdpbGJlcnQgV2VsbGlzY2gKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisKKworQ29weXJpZ2h0IDIwMTAtMjAxMSwgR29vZ2xlIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKK2luIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKyogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisgICBBIEMtcHJvZ3JhbSBmb3IgTVQxOTkzNywgd2l0aCBpbml0aWFsaXphdGlvbiBpbXByb3ZlZCAyMDAyLzEvMjYuCisgICBDb2RlZCBieSBUYWt1amkgTmlzaGltdXJhIGFuZCBNYWtvdG8gTWF0c3Vtb3RvLgorCisgICBCZWZvcmUgdXNpbmcsIGluaXRpYWxpemUgdGhlIHN0YXRlIGJ5IHVzaW5nIGluaXRfZ2VucmFuZChzZWVkKSAgCisgICBvciBpbml0X2J5X2FycmF5KGluaXRfa2V5LCBrZXlfbGVuZ3RoKS4KKworICAgQ29weXJpZ2h0IChDKSAxOTk3IC0gMjAwMiwgTWFrb3RvIE1hdHN1bW90byBhbmQgVGFrdWppIE5pc2hpbXVyYSwKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisKKyAgICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICAzLiBUaGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIAorICAgICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gCisgICAgICAgIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisvLyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBUaGUgQ2hyb21pdW0gT1MgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CitodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKK0xpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCitQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4Cit0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0NvbnRyaWJ1dG9yKHMpOgorCitBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKK2luIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCitvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQordW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwordXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKK2RlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCithbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQordGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgordGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKworICAKKyAgQ29weXJpZ2h0IChjKSAyMDA0LTIwMTIgYnkgTXVsbGUgS3liZXJuZXRpay4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uCisgIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbgorICBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBkZXJpdmF0aXZlIHdvcmtzIG9yIG1vZGlmaWVkIHZlcnNpb25zLAorICBhbmQgYW55IHBvcnRpb25zIHRoZXJlb2YsIGFuZCB0aGF0IGJvdGggbm90aWNlcyBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLAorICBhbmQgdGhhdCBjcmVkaXQgaXMgZ2l2ZW4gdG8gTXVsbGUgS3liZXJuZXRpayBpbiBhbGwgZG9jdW1lbnRzIGFuZCBwdWJsaWNpdHkKKyAgcGVydGFpbmluZyB0byBkaXJlY3Qgb3IgaW5kaXJlY3QgdXNlIG9mIHRoaXMgY29kZSBvciBpdHMgZGVyaXZhdGl2ZXMuCisKKyAgVEhJUyBJUyBFWFBFUklNRU5UQUwgU09GVFdBUkUgQU5EIElUIElTIEtOT1dOIFRPIEhBVkUgQlVHUywgU09NRSBPRiBXSElDSCBNQVkgSEFWRQorICBTRVJJT1VTIENPTlNFUVVFTkNFUy4gVEhFIENPUFlSSUdIVCBIT0xERVIgQUxMT1dTIEZSRUUgVVNFIE9GIFRISVMgU09GVFdBUkUgSU4gSVRTCisgICJBUyBJUyIgQ09ORElUSU9OLiBUSEUgQ09QWVJJR0hUIEhPTERFUiBESVNDTEFJTVMgQU5ZIExJQUJJTElUWSBPRiBBTlkgS0lORCBGT1IgQU5ZCisgIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRElSRUNUTFkgT1IgSU5ESVJFQ1RMWSBGUk9NIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRQorICBPUiBPRiBBTlkgREVSSVZBVElWRSBXT1JLLgorCisgIExJQ0VOU0UgSVNTVUVTCisgID09PT09PT09PT09PT09CisKKyAgVGhlIE9wZW5TU0wgdG9vbGtpdCBzdGF5cyB1bmRlciBhIGR1YWwgbGljZW5zZSwgaS5lLiBib3RoIHRoZSBjb25kaXRpb25zIG9mCisgIHRoZSBPcGVuU1NMIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCBTU0xlYXkgbGljZW5zZSBhcHBseSB0byB0aGUgdG9vbGtpdC4KKyAgU2VlIGJlbG93IGZvciB0aGUgYWN0dWFsIGxpY2Vuc2UgdGV4dHMuIEFjdHVhbGx5IGJvdGggbGljZW5zZXMgYXJlIEJTRC1zdHlsZQorICBPcGVuIFNvdXJjZSBsaWNlbnNlcy4gSW4gY2FzZSBvZiBhbnkgbGljZW5zZSBpc3N1ZXMgcmVsYXRlZCB0byBPcGVuU1NMCisgIHBsZWFzZSBjb250YWN0IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKworICBPcGVuU1NMIExpY2Vuc2UKKyAgLS0tLS0tLS0tLS0tLS0tCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworCisgT3JpZ2luYWwgU1NMZWF5IExpY2Vuc2UKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKworQ29weXJpZ2h0IDIwMDEtMjAxMSBYaXBoLk9yZywgU2t5cGUgTGltaXRlZCwgT2N0YXNpYywKKyAgICAgICAgICAgICAgICAgICAgSmVhbi1NYXJjIFZhbGluLCBUaW1vdGh5IEIuIFRlcnJpYmVycnksCisgICAgICAgICAgICAgICAgICAgIENTSVJPLCBHcmVnb3J5IE1heHdlbGwsIE1hcmsgQm9yZ2VyZGluZywKKyAgICAgICAgICAgICAgICAgICAgRXJpayBkZSBDYXN0cm8gTG9wbworCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCistIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCistIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZXJuZXQgU29jaWV0eSwgSUVURiBvciBJRVRGIFRydXN0LCBub3IgdGhlIAorbmFtZXMgb2Ygc3BlY2lmaWMgY29udHJpYnV0b3JzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKK3Byb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUgorT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitPcHVzIGlzIHN1YmplY3QgdG8gdGhlIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlCitzcGVjaWZpZWQgYXQ6CisKK1hpcGguT3JnIEZvdW5kYXRpb246CitodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2lwci8xNTI0LworCitNaWNyb3NvZnQgQ29ycG9yYXRpb246CitodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2lwci8xOTE0LworCitCcm9hZGNvbSBDb3Jwb3JhdGlvbjoKK2h0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvaXByLzE1MjYvCisKKy8vIENvcHlyaWdodCAoYykgMjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworUExZIChQeXRob24gTGV4LVlhY2MpICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMy40CisKK0NvcHlyaWdodCAoQykgMjAwMS0yMDExLAorRGF2aWQgTS4gQmVhemxleSAoRGFiZWF6IExMQykKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gIAorKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAgCisqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIERhdmlkIEJlYXpsZXkgb3IgRGFiZWF6IExMQyBtYXkgYmUgdXNlZCB0bworICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBQb2x5bWVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK0NvcHlyaWdodCAyMDA4LCBHb29nbGUgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCitpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCitjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQordGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworQ29kZSBnZW5lcmF0ZWQgYnkgdGhlIFByb3RvY29sIEJ1ZmZlciBjb21waWxlciBpcyBvd25lZCBieSB0aGUgb3duZXIKK29mIHRoZSBpbnB1dCBmaWxlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIGl0LiAgVGhpcyBjb2RlIGlzIG5vdAorc3RhbmRhbG9uZSBhbmQgcmVxdWlyZXMgYSBzdXBwb3J0IGxpYnJhcnkgdG8gYmUgbGlua2VkIHdpdGggaXQuICBUaGlzCitzdXBwb3J0IGxpYnJhcnkgaXMgaXRzZWxmIGNvdmVyZWQgYnkgdGhlIGFib3ZlIGxpY2Vuc2UuCisKK0NvcHlyaWdodCAoYykgMjAwMy0yMDEyLCBNaWNoYWVsIEZvb3JkCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitxY21zCitDb3B5cmlnaHQgKEMpIDIwMDkgTW96aWxsYSBDb3Jwb3JhdGlvbgorQ29weXJpZ2h0IChDKSAxOTk4LTIwMDcgTWFydGkgTWFyaWEKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIAorYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAKK3RvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gCit0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgCithbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgCitpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gCitUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCAKK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgCitMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIAorT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIAorV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKy8vIENvcHlyaWdodCAoYykgMjAwOSBUaGUgUkUyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworICAgQ29weXJpZ2h0IDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCitDb3B5cmlnaHQgKGMpIDIwMDYgQm9iIElwcG9saXRvCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKK1NPRlRXQVJFLgorCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworQWxsIE11cm11ckhhc2ggc291cmNlIGZpbGVzIGFyZSBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK1RoZSBsaWNlbnNlIGJlbG93IGFwcGxpZXMgdG8gYWxsIG90aGVyIGNvZGUgaW4gU01IYXNoZXI6CisKK0NvcHlyaWdodCAoYykgMjAxMSBHb29nbGUsIEluYy4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisKK1RoZSBhdXRob3IgZGlzY2xhaW1zIGNvcHlyaWdodCB0byB0aGlzIHNvdXJjZSBjb2RlLiAgSW4gcGxhY2Ugb2YKK2EgbGVnYWwgbm90aWNlLCBoZXJlIGlzIGEgYmxlc3Npbmc6CisKKyAgIE1heSB5b3UgZG8gZ29vZCBhbmQgbm90IGV2aWwuCisgICBNYXkgeW91IGZpbmQgZm9yZ2l2ZW5lc3MgZm9yIHlvdXJzZWxmIGFuZCBmb3JnaXZlIG90aGVycy4KKyAgIE1heSB5b3Ugc2hhcmUgZnJlZWx5LCBuZXZlciB0YWtpbmcgbW9yZSB0aGFuIHlvdSBnaXZlLgorCitTV0lHIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6CisKK0kuICAKKworQ29weXJpZ2h0IChjKSAxOTk1LTE5OTgKK1RoZSBVbml2ZXJzaXR5IG9mIFV0YWggYW5kIHRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFncmVlbWVudCBhbmQgd2l0aG91dAorbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IAorKDEpIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzCithcHBlYXIgaW4gYWxsIGNvcGllcyBvZiB0aGUgc291cmNlIGNvZGUgYW5kICgyKSByZWRpc3RyaWJ1dGlvbnMKK2luY2x1ZGluZyBiaW5hcmllcyByZXByb2R1Y2VzIHRoZXNlIG5vdGljZXMgaW4gdGhlIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24uICAgU3Vic3RhbnRpYWwgbW9kaWZpY2F0aW9ucyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZQorY29weXJpZ2h0ZWQgYnkgdGhlaXIgYXV0aG9ycyBhbmQgbmVlZCBub3QgZm9sbG93IHRoZSBsaWNlbnNpbmcgdGVybXMKK2Rlc2NyaWJlZCBoZXJlLCBwcm92aWRlZCB0aGF0IHRoZSBuZXcgdGVybXMgYXJlIGNsZWFybHkgaW5kaWNhdGVkIGluCithbGwgZmlsZXMgd2hlcmUgdGhleSBhcHBseS4KKworSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiwgVEhFIFVOSVZFUlNJVFkgT0YgQ0FMSUZPUk5JQSwgVEhFIAorVU5JVkVSU0lUWSBPRiBVVEFIIE9SIERJU1RSSUJVVE9SUyBPRiBUSElTIFNPRlRXQVJFIEJFIExJQUJMRSBUTyBBTlkKK1BBUlRZIEZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04sCitFVkVOIElGIFRIRSBBVVRIT1JTIE9SIEFOWSBPRiBUSEUgQUJPVkUgUEFSVElFUyBIQVZFIEJFRU4gQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUSEUgQVVUSE9SLCBUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBLCBBTkQgVEhFIFVOSVZFUlNJVFkgT0YgVVRBSAorU1BFQ0lGSUNBTExZIERJU0NMQUlNIEFOWSBXQVJSQU5USUVTLElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIgSVMgT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIAorVEhFIEFVVEhPUlMgQU5EIERJU1RSSUJVVE9SUyBIQVZFIE5PIE9CTElHQVRJT04gVE8gUFJPVklERSBNQUlOVEVOQU5DRSwKK1NVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KKworCitJSS4gCisKK1RoaXMgc29mdHdhcmUgaW5jbHVkZXMgY29udHJpYnV0aW9ucyB0aGF0IGFyZSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNQorVW5pdmVyc2l0eSBvZiBDaGljYWdvLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKK3RoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuICBSZWRpc3RyaWJ1dGlvbnMKK2luIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKK2NvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKK290aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uICBOZWl0aGVyIHRoZSBuYW1lIG9mCit0aGUgVW5pdmVyc2l0eSBvZiBDaGljYWdvIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUKK3VzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKK3NwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgVU5JVkVSU0lUWSBPRiBDSElDQUdPIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgVU5JVkVSU0lUWSBPRgorQ0hJQ0FHTyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworSUlJLiAgCisKK1RoaXMgc29mdHdhcmUgaW5jbHVkZXMgY29udHJpYnV0aW9ucyB0aGF0IGFyZSBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNgorQXJpem9uYSBCb2FyZCBvZiBSZWdlbnRzIChVbml2ZXJzaXR5IG9mIEFyaXpvbmEpLgorQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0CitsaWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKK3NvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQgCisoMSkgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMKK2FwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoZSBzb3VyY2UgY29kZSBhbmQgKDIpIHJlZGlzdHJpYnV0aW9ucworaW5jbHVkaW5nIGJpbmFyaWVzIHJlcHJvZHVjZXMgdGhlc2Ugbm90aWNlcyBpbiB0aGUgc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbi4gICBTdWJzdGFudGlhbCBtb2RpZmljYXRpb25zIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlCitjb3B5cmlnaHRlZCBieSB0aGVpciBhdXRob3JzIGFuZCBuZWVkIG5vdCBmb2xsb3cgdGhlIGxpY2Vuc2luZyB0ZXJtcworZGVzY3JpYmVkIGhlcmUsIHByb3ZpZGVkIHRoYXQgdGhlIG5ldyB0ZXJtcyBhcmUgY2xlYXJseSBpbmRpY2F0ZWQgaW4KK2FsbCBmaWxlcyB3aGVyZSB0aGV5IGFwcGx5LgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBVTklWRVJTSVRZIE9GIEFSSVpPTkEgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBVTklWRVJTSVRZIE9GCitBUklaT05BIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCitQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisvLyBDb3B5cmlnaHQgKGMpIDIwMDUsIEdvb2dsZSBJbmMuCisvLyBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitBbGwgY29kZSBoZXJlIGlzIHB1YmxpYyBkb21haW4uCisKK0NvcHlyaWdodCAoYykgMjAxMiwgTGludXggVVNCIFByb2plY3QKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKK28gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIExpbnV4IFVTQiBQcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyhDb3BpZWQgZnJvbSB0aGUgQ09QWVJJR0hUIGZpbGUgb2YKK2h0dHBzOi8vY29kZS5nb29nbGUuY29tL3Avc2N0cC1yZWZpbXBsL3NvdXJjZS9icm93c2UvdHJ1bmsvQ09QWVJJR0hUKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyIENpc2NvIFN5c3RlbXMsIEluYy4KK0NvcHlyaWdodCAoYykgMjAwMi0xMiBSYW5kYWxsIFIuIFN0ZXdhcnQKK0NvcHlyaWdodCAoYykgMjAwMi0xMiBNaWNoYWVsIFR1ZXhlbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorOyogeDg2aW5jLmFzbQorOyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis7KiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMSB4MjY0IHByb2plY3QKKzsqCis7KiBBdXRob3JzOiBMb3JlbiBNZXJyaXR0IDxsb3Jlbm1AdS53YXNoaW5ndG9uLmVkdT4KKzsqICAgICAgICAgIEFudG9uIE1pdHJvZmFub3YgPEJ1Z01hc3RlckBuYXJvZC5ydT4KKzsqICAgICAgICAgIEphc29uIEdhcnJldHQtR2xhc2VyIDxkYXJrc2hpa2FyaUBnbWFpbC5jb20+Cis7KgorOyogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Cis7KiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCis7KiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorOyoKKzsqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworOyogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorOyogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKzsqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKzsqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorOyogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKzsqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCis7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworOyBUaGlzIGlzIGEgaGVhZGVyIGZpbGUgZm9yIHRoZSB4MjY0QVNNIGFzc2VtYmx5IGxhbmd1YWdlLCB3aGljaCB1c2VzCis7IE5BU00vWUFTTSBzeW50YXggY29tYmluZWQgd2l0aCBhIGxhcmdlIG51bWJlciBvZiBtYWNyb3MgdG8gcHJvdmlkZSBlYXN5Cis7IGFic3RyYWN0aW9uIGJldHdlZW4gZGlmZmVyZW50IGNhbGxpbmcgY29udmVudGlvbnMgKHg4Nl8zMiwgd2luNjQsIGxpbnV4NjQpLgorOyBJdCBhbHNvIGhhcyB2YXJpb3VzIG90aGVyIHVzZWZ1bCBmZWF0dXJlcyB0byBzaW1wbGlmeSB3cml0aW5nIHRoZSBraW5kIG9mCis7IERTUCBmdW5jdGlvbnMgdGhhdCBhcmUgbW9zdCBvZnRlbiB1c2VkIGluIHgyNjQuCisKKzsgVW5saWtlIHRoZSByZXN0IG9mIHgyNjQsIHRoaXMgZmlsZSBpcyBhdmFpbGFibGUgdW5kZXIgYW4gSVNDIGxpY2Vuc2UsIGFzIGl0Cis7IGhhcyBzaWduaWZpY2FudCB1c2VmdWxuZXNzIG91dHNpZGUgb2YgeDI2NCBhbmQgd2Ugd2FudCBpdCB0byBiZSBhdmFpbGFibGUKKzsgdG8gdGhlIGxhcmdlc3QgYXVkaWVuY2UgcG9zc2libGUuICBPZiBjb3Vyc2UsIGlmIHlvdSBtb2RpZnkgaXQgZm9yIHlvdXIgb3duCis7IHB1cnBvc2VzIHRvIGFkZCBhIG5ldyBmZWF0dXJlLCB3ZSBzdHJvbmdseSBlbmNvdXJhZ2UgY29udHJpYnV0aW5nIGEgcGF0Y2gKKzsgYXMgdGhpcyBmZWF0dXJlIG1pZ2h0IGJlIHVzZWZ1bCBmb3Igb3RoZXJzIGFzIHdlbGwuICBTZW5kIHBhdGNoZXMgb3IgaWRlYXMKKzsgdG8geDI2NC1kZXZlbEB2aWRlb2xhbi5vcmcgLgorCitZYXNtIGlzIENvcHlyaWdodCAoYykgMjAwMS0yMDEwIFBldGVyIEpvaG5zb24gYW5kIG90aGVyIFlhc20gZGV2ZWxvcGVycy4KKworWWFzbSBkZXZlbG9wZXJzIGFuZC9vciBjb250cmlidXRvcnMgaW5jbHVkZToKKyAgUGV0ZXIgSm9obnNvbgorICBNaWNoYWVsIFVybWFuCisgIEJyaWFuIEdsYWRtYW4gKFZpc3VhbCBTdHVkaW8gYnVpbGQgZmlsZXMsIG90aGVyIGZpeGVzKQorICBTdGFuaXNsYXYgS2FyY2hlYm55IChvcHRpb25zIHBhcnNlcikKKyAgTWF0aGlldSBNb25uaWVyIChTU0U0IGluc3RydWN0aW9uIHBhdGNoZXMsIE5BU00gcHJlcHJvY2Vzc29yIGFkZGl0aW9ucykKKyAgQW5vbnltb3VzICJOQVNNNjQiIGRldmVsb3BlciAoTkFTTSBwcmVwcm9jZXNzb3IgZml4ZXMpCisgIFN0ZXBoZW4gUG9sa293c2tpICh4ODYgaW5zdHJ1Y3Rpb24gcGF0Y2hlcykKKyAgSGVucnlrIFJpY2h0ZXIgKE1hY2gtTyBvYmplY3QgZm9ybWF0KQorICBCZW4gU2tlZ2dzIChwYXRjaGVzLCBidWcgcmVwb3J0cykKKyAgQWxleGVpIFN2aXRraW5lIChHQVMgcHJlcHJvY2Vzc29yKQorICBTYW11ZWwgVGhpYmF1bHQgKFRBU00gcGFyc2VyIGFuZCBmcm9udGVuZCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1lhc20gbGljZW5zaW5nIG92ZXJ2aWV3IGFuZCBzdW1tYXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlOiBUaGlzIGRvY3VtZW50IGRvZXMgbm90IHByb3ZpZGUgbGVnYWwgYWR2aWNlIG5vciBpcyBpdCB0aGUgYWN0dWFsCitsaWNlbnNlIG9mIGFueSBwYXJ0IG9mIFlhc20uICBTZWUgdGhlIGluZGl2aWR1YWwgbGljZW5zZXMgZm9yIGNvbXBsZXRlCitkZXRhaWxzLiAgQ29uc3VsdCBhIGxhd3llciBmb3IgbGVnYWwgYWR2aWNlLgorCitUaGUgcHJpbWFyeSBsaWNlbnNlIG9mIFlhc20gaXMgdGhlIDItY2xhdXNlIEJTRCBsaWNlbnNlLiAgUGxlYXNlIHVzZSB0aGlzCitsaWNlbnNlIGlmIHlvdSBwbGFuIG9uIHN1Ym1pdHRpbmcgY29kZSB0byB0aGUgcHJvamVjdC4KKworWWFzbSBoYXMgYWJzb2x1dGVseSBubyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIG1lcmNoYW50aWJpbGl0eSBvciBmaXRuZXNzCitmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisKKy0tLS0tLS0KK0xpYnlhc20KKy0tLS0tLS0KK0xpYnlhc20gaXMgMi1jbGF1c2Ugb3IgMy1jbGF1c2UgQlNEIGxpY2Vuc2VkLCB3aXRoIHRoZSBleGNlcHRpb24gb2YKK2JpdHZlY3QsIHdoaWNoIGlzIHRyaXBsZS1saWNlbnNlZCB1bmRlciB0aGUgQXJ0aXN0aWMgbGljZW5zZSwgR1BMLCBhbmQKK0xHUEwuICBMaWJ5YXNtIGlzIHRodXMgR1BMIGFuZCBMR1BMIGNvbXBhdGlibGUuICBJbiBhZGRpdGlvbiwgdGhpcyBhbHNvCittZWFucyB0aGF0IGxpYnlhc20gaXMgZnJlZSBmb3IgYmluYXJ5LW9ubHkgZGlzdHJpYnV0aW9uIGFzIGxvbmcgYXMgdGhlCit0ZXJtcyBvZiB0aGUgMy1jbGF1c2UgQlNEIGxpY2Vuc2UgYW5kIEFydGlzdGljIGxpY2Vuc2UgKGFzIGl0IGFwcGxpZXMgdG8KK2JpdHZlY3QpIGFyZSBmdWxmaWxsZWQuCisKKy0tLS0tLS0KK01vZHVsZXMKKy0tLS0tLS0KK1RoZSBtb2R1bGVzIGFyZSAyLWNsYXVzZSBvciAzLWNsYXVzZSBCU0QgbGljZW5zZWQuCisKKy0tLS0tLS0tLQorRnJvbnRlbmRzCistLS0tLS0tLS0KK1RoZSBmcm9udGVuZHMgYXJlIDItY2xhdXNlIEJTRCBsaWNlbnNlZC4KKworLS0tLS0tLS0tLS0tLQorTGljZW5zZSBUZXh0cworLS0tLS0tLS0tLS0tLQorVGhlIGZ1bGwgdGV4dCBvZiBhbGwgbGljZW5zZXMgYXJlIHByb3ZpZGVkIGluIHNlcGFyYXRlIGZpbGVzIGluIHRoZSBzb3VyY2UKK2Rpc3RyaWJ1dGlvbi4gIEVhY2ggc291cmNlIGZpbGUgbWF5IGluY2x1ZGUgdGhlIGVudGlyZSBsaWNlbnNlIChpbiB0aGUgY2FzZQorb2YgdGhlIEJTRCBhbmQgQXJ0aXN0aWMgbGljZW5zZXMpLCBvciBtYXkgcmVmZXJlbmNlIHRoZSBHUEwgb3IgTEdQTCBsaWNlbnNlCitmaWxlLgorCitCU0QudHh0IC0gMi1jbGF1c2UgYW5kIDMtY2xhdXNlIEJTRCBsaWNlbnNlcworQXJ0aXN0aWMudHh0IC0gQXJ0aXN0aWMgbGljZW5zZQorR05VX0dQTC0yLjAgLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorR05VX0xHUEwtMi4wIC0gR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCisvKiB6bGliLmggLS0gaW50ZXJmYWNlIG9mIHRoZSAnemxpYicgZ2VuZXJhbCBwdXJwb3NlIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAgdmVyc2lvbiAxLjIuNCwgTWFyY2ggMTR0aCwgMjAxMAorCisgIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKworICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisKKyAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKKyAgSmVhbi1sb3VwIEdhaWxseQorICBNYXJrIEFkbGVyCisKKyovCisKK0NvcHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCitpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCitjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQordGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZSB1cmxfcGFyc2UuY2MgaXMgYmFzZWQgb24gbnNVUkxQYXJzZXJzLmNjIGZyb20gTW96aWxsYS4gVGhpcyBmaWxlIGlzCitsaWNlbnNlZCBzZXBhcmF0ZWx5IGFzIGZvbGxvd3M6CisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CitodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKK0xpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCitQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4Cit0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0NvbnRyaWJ1dG9yKHMpOgorICBEYXJpbiBGaXNoZXIgKG9yaWdpbmFsIGF1dGhvcikKKworQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKK2VpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCitpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKK3VuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KK3VzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCitkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKK3RoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKK3RoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisKK0NvcHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCitpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCitjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQordGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZSB1cmxfcGFyc2UuY2MgaXMgYmFzZWQgb24gbnNVUkxQYXJzZXJzLmNjIGZyb20gTW96aWxsYS4gVGhpcyBmaWxlIGlzCitsaWNlbnNlZCBzZXBhcmF0ZWx5IGFzIGZvbGxvd3M6CisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CitodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKK0xpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCitQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4Cit0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0NvbnRyaWJ1dG9yKHMpOgorICBEYXJpbiBGaXNoZXIgKG9yaWdpbmFsIGF1dGhvcikKKworQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKK2VpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCitpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKK3VuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KK3VzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCitkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKK3RoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKK3RoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisKK1RoaXMgbGljZW5zZSBhcHBsaWVzIHRvIGFsbCBwYXJ0cyBvZiBWOCB0aGF0IGFyZSBub3QgZXh0ZXJuYWxseQorbWFpbnRhaW5lZCBsaWJyYXJpZXMuICBUaGUgZXh0ZXJuYWxseSBtYWludGFpbmVkIGxpYnJhcmllcyB1c2VkIGJ5IFY4CithcmU6CisKKyAgLSBQQ1JFIHRlc3Qgc3VpdGUsIGxvY2F0ZWQgaW4KKyAgICB0ZXN0L21qc3VuaXQvdGhpcmRfcGFydHkvcmVnZXhwLXBjcmUuanMuICBUaGlzIGlzIGJhc2VkIG9uIHRoZQorICAgIHRlc3Qgc3VpdGUgZnJvbSBQQ1JFLTcuMywgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIFVuaXZlcnNpdHkKKyAgICBvZiBDYW1icmlkZ2UgYW5kIEdvb2dsZSwgSW5jLiAgVGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UKKyAgICBhcmUgZW1iZWRkZWQgaW4gcmVnZXhwLXBjcmUuanMuCisKKyAgLSBMYXlvdXQgdGVzdHMsIGxvY2F0ZWQgaW4gdGVzdC9tanN1bml0L3RoaXJkX3BhcnR5LiAgVGhlc2UgYXJlCisgICAgYmFzZWQgb24gbGF5b3V0IHRlc3RzIGZyb20gd2Via2l0Lm9yZyB3aGljaCBhcmUgY29weXJpZ2h0ZWQgYnkKKyAgICBBcHBsZSBDb21wdXRlciwgSW5jLiBhbmQgcmVsZWFzZWQgdW5kZXIgYSAzLWNsYXVzZSBCU0QgbGljZW5zZS4KKworICAtIFN0cm9uZ3RhbGsgYXNzZW1ibGVyLCB0aGUgYmFzaXMgb2YgdGhlIGZpbGVzIGFzc2VtYmxlci1hcm0taW5sLmgsCisgICAgYXNzZW1ibGVyLWFybS5jYywgYXNzZW1ibGVyLWFybS5oLCBhc3NlbWJsZXItaWEzMi1pbmwuaCwKKyAgICBhc3NlbWJsZXItaWEzMi5jYywgYXNzZW1ibGVyLWlhMzIuaCwgYXNzZW1ibGVyLXg2NC1pbmwuaCwKKyAgICBhc3NlbWJsZXIteDY0LmNjLCBhc3NlbWJsZXIteDY0LmgsIGFzc2VtYmxlci1taXBzLWlubC5oLAorICAgIGFzc2VtYmxlci1taXBzLmNjLCBhc3NlbWJsZXItbWlwcy5oLCBhc3NlbWJsZXIuY2MgYW5kIGFzc2VtYmxlci5oLgorICAgIFRoaXMgY29kZSBpcyBjb3B5cmlnaHRlZCBieSBTdW4gTWljcm9zeXN0ZW1zIEluYy4gYW5kIHJlbGVhc2VkCisgICAgdW5kZXIgYSAzLWNsYXVzZSBCU0QgbGljZW5zZS4KKworICAtIFZhbGdyaW5kIGNsaWVudCBBUEkgaGVhZGVyLCBsb2NhdGVkIGF0IHRoaXJkX3BhcnR5L3ZhbGdyaW5kL3ZhbGdyaW5kLmgKKyAgICBUaGlzIGlzIHJlbGVhc2UgdW5kZXIgdGhlIEJTRCBsaWNlbnNlLgorCitUaGVzZSBsaWJyYXJpZXMgaGF2ZSB0aGVpciBvd24gbGljZW5zZXM7IHdlIHJlY29tbWVuZCB5b3UgcmVhZCB0aGVtLAorYXMgdGhlaXIgdGVybXMgbWF5IGRpZmZlciBmcm9tIHRoZSB0ZXJtcyBiZWxvdy4KKworQ29weXJpZ2h0IDIwMDYtMjAxMiwgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy9iaW4vbWFrZV9leHQ0ZnMKKy9iaW4vbWt1c2VyaW1nLnNoCisvbGliL2xpYmV4dDRfdXRpbHNfaG9zdC5hCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CkBAIC02OTE3LDYgKzE0NjIyLDI0ODkgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBOb3RpY2VzIGZvciBmaWxlKHMpOgorL2xpYi9saWJzcWxpdGVfam5pLnNvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgc29mdHdhcmUgaXMgY29weXJpZ2h0ZWQgYnkgQ2hyaXN0aWFuIFdlcm5lciA8Y2h3QGNoLXdlcm5lci5kZT4KK2FuZCBvdGhlcnMuIFRoZSBmb2xsb3dpbmcgdGVybXMgYXBwbHkgdG8gYWxsIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUKK3NvZnR3YXJlIHVubGVzcyBleHBsaWNpdGx5IGRpc2NsYWltZWQgaW4gaW5kaXZpZHVhbCBmaWxlcy4KKworVGhlIGF1dGhvcnMgaGVyZWJ5IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsCithbmQgbGljZW5zZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkCit0aGF0IGV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCBpbiBhbGwgY29waWVzIGFuZCB0aGF0IHRoaXMKK25vdGljZSBpcyBpbmNsdWRlZCB2ZXJiYXRpbSBpbiBhbnkgZGlzdHJpYnV0aW9ucy4gTm8gd3JpdHRlbiBhZ3JlZW1lbnQsCitsaWNlbnNlLCBvciByb3lhbHR5IGZlZSBpcyByZXF1aXJlZCBmb3IgYW55IG9mIHRoZSBhdXRob3JpemVkIHVzZXMuCitNb2RpZmljYXRpb25zIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIGNvcHlyaWdodGVkIGJ5IHRoZWlyIGF1dGhvcnMKK2FuZCBuZWVkIG5vdCBmb2xsb3cgdGhlIGxpY2Vuc2luZyB0ZXJtcyBkZXNjcmliZWQgaGVyZSwgcHJvdmlkZWQgdGhhdAordGhlIG5ldyB0ZXJtcyBhcmUgY2xlYXJseSBpbmRpY2F0ZWQgb24gdGhlIGZpcnN0IHBhZ2Ugb2YgZWFjaCBmaWxlIHdoZXJlCit0aGV5IGFwcGx5LgorCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBESVNUUklCVVRPUlMgQkUgTElBQkxFIFRPIEFOWSBQQVJUWQorRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBJVFMgRE9DVU1FTlRBVElPTiwgT1IgQU5ZCitERVJJVkFUSVZFUyBUSEVSRU9GLCBFVkVOIElGIFRIRSBBVVRIT1JTIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RIRSBBVVRIT1JTIEFORCBESVNUUklCVVRPUlMgU1BFQ0lGSUNBTExZIERJU0NMQUlNIEFOWSBXQVJSQU5USUVTLAorSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULiAgVEhJUyBTT0ZUV0FSRQorSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBBVVRIT1JTIEFORCBESVNUUklCVVRPUlMgSEFWRQorTk8gT0JMSUdBVElPTiBUTyBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SCitNT0RJRklDQVRJT05TLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05vdGljZXMgZm9yIGZpbGUocyk6CisvbGliL2xpYmdjY2RlbWFuZ2xlLnNvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RpY2VzIGZvciBmaWxlKHMpOgorL2Jpbi9hYXB0CisvYmluL2FpZGwKKy9iaW4vZGV4ZHVtcAorL2Jpbi9qYXNtaW4KKy9iaW4vc3BsaXQtc2VsZWN0CisvZnJhbWV3b3JrL2FuZHJvaWQtbW9jay1nZW5lcmF0b3JsaWIuamFyCisvZnJhbWV3b3JrL2phc21pbi5qYXIKKy9saWIvbGliNjRjdXRpbHMuYQorL2xpYi9saWI2NGxvZy5hCisvbGliL2xpYjY0dXRpbHMuYQorL2xpYi9saWJhbmRyb2lkZncuYQorL2xpYi9saWJjdXRpbHMuYQorL2xpYi9saWJsb2cuYQorL2xpYi9saWJsb2cuc28KKy9saWIvbGlibmF0aXZlaGVscGVyLnNvCisvbGliL2xpYnNxbGl0ZTNfYW5kcm9pZC5hCisvbGliL2xpYnV0aWxzLmEKKy9saWIvbGliemlwZmlsZS5hCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy9mcmFtZXdvcmsvb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kc18zLjYuMC5JMjAxMDA1MTItMTUwMC5qYXIKKy9mcmFtZXdvcmsvb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9uc18zLjQuMjAwLnYyMDEwMDUwNS5qYXIKKy9mcmFtZXdvcmsvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lXzMuNi4wLnYyMDEwMDUwNS5qYXIKKy9mcmFtZXdvcmsvb3JnLmVjbGlwc2UuZXF1aW5veC5jb21tb25fMy42LjAudjIwMTAwNTAzLmphcgorL2ZyYW1ld29yay9vcmcuZWNsaXBzZS5qZmFjZV8zLjYuMi5NMjAxMTAyMTAtMTIwMC5qYXIKKy9mcmFtZXdvcmsvb3JnLmVjbGlwc2Uub3NnaV8zLjYuMi5SMzZ4X3YyMDExMDIxMC5qYXIKKy9mcmFtZXdvcmsvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3JfMy42LjEucjM2MV92MjAxMDA3MTQtMDgwMC5qYXIKKy9mcmFtZXdvcmsvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoXzMuNi4yLk0yMDExMDIxMC0xMjAwLmphcgorL2ZyYW1ld29yay9vc2dpLmphcgorL2ZyYW1ld29yay9wcm9wZXJ0eXNoZWV0LmphcgorL2ZyYW1ld29yay9zd3QuamFyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMAorCitUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRQorUFVCTElDIExJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKworKjEuIERFRklOSVRJT05TKgorCisiQ29udHJpYnV0aW9uIiBtZWFuczoKKworYSkgaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kCitkb2N1bWVudGF0aW9uIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQKKworYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOgorCitpKSBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKKworaWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKKword2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kCithcmUgZGlzdHJpYnV0ZWQgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbgorJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaAorQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4KK0NvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHdoaWNoOiAoaSkgYXJlCitzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0KK3VuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlIHdvcmtzIG9mCit0aGUgUHJvZ3JhbS4KKworIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisiTGljZW5zZWQgUGF0ZW50cyIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaAorYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZQorb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisiUHJvZ3JhbSIgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMgZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMKK0FncmVlbWVudC4KKworIlJlY2lwaWVudCIgbWVhbnMgYW55b25lIHdobyByZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwKK2luY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLgorCisqMi4gR1JBTlQgT0YgUklHSFRTKgorCithKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkKK2dyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQKK2xpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksCitwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kCitvYmplY3QgY29kZSBmb3JtLgorCitiKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkKK2dyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZQordW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQKK290aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4KK3NvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZQorY29tYmluYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZQorQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUKK0NvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZAorUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBhbnkgb3RoZXIgY29tYmluYXRpb25zCit3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCisKK2MpIFJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZQorbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUKK3Byb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZQorcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaAorQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieQorYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cworb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzCitncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0bworc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IKK2V4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50Cit0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlCit0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS4KKworZCkgRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudAorY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQKK2xpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorCisqMy4gUkVRVUlSRU1FTlRTKgorCitBIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtCit1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCithKSBpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kCisKK2IpIGl0cyBsaWNlbnNlIGFncmVlbWVudDoKKworaSkgZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzCithbmQgY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZgorbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsKKworaWkpIGVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yCitkYW1hZ2VzLCBpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQKK2NvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7CisKK2lpaSkgc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlCitvZmZlcmVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZAorCitpdikgc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2gKK0NvbnRyaWJ1dG9yLCBhbmQgaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUKK21hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorCitXaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZSBjb2RlIGZvcm06CisKK2EpIGl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorCitiKSBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4KKworQ29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQKK3dpdGhpbiB0aGUgUHJvZ3JhbS4KKworRWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMKK0NvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQKK1JlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4KKworKjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OKgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcword2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzCitsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUKK0NvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZworc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvcgorb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4KK2EgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgiQ29tbWVyY2lhbAorQ29udHJpYnV0b3IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIikgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAiTG9zc2VzIikgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZAorQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2gKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcworc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvcgorYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlciB0byBxdWFsaWZ5LCBhbgorSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCitpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQKK0NvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKK0ZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UKK2NsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkKK2Fsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8KK2RlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UKK3BlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQgcmVxdWlyZXMgYW55IG90aGVyCitDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCittdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgorCisqNS4gTk8gV0FSUkFOVFkqCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRAorT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsCitFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUworT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvcgorZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtCithbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0KK2Vycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwKK3Byb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCisqNi4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkqCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IKK0FOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcKK1dJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IKK0RJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVECitIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisqNy4gR0VORVJBTCoKKworSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZgordGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uCitieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtCitleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZworYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtCitpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvcgoraGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudCdzCityaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2gKK2xpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzCit0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQKK2FuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIKK2JlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlcgordGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uCitvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudCdzCitvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50CityZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LAorYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcyBjb3B5cmlnaHRlZCBhbmQgbWF5Citvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50IFN0ZXdhcmQgcmVzZXJ2ZXMKK3RoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcworQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZQoraW5pdGlhbCBBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZQorcmVzcG9uc2liaWxpdHkgdG8gc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUKK2VudGl0eS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZwordmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZQorZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcworcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaXMKK3B1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZworaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4KK1NlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMKK3RvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LAord2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4KK3RoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuCisKK1RoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObyBwYXJ0eSB0bwordGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIEFncmVlbWVudCBtb3JlIHRoYW4KK29uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzIGl0cyByaWdodHMKK3RvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RpY2VzIGZvciBmaWxlKHMpOgorL2ZyYW1ld29yay9ib3VuY3ljYXN0bGUtaG9zdC5qYXIKKy9mcmFtZXdvcmsvYm91bmN5Y2FzdGxlLWhvc3RkZXguamFyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvcHlyaWdodCAoYykgMjAwMC0yMDEzIFRoZSBMZWdpb24gT2YgVGhlIEJvdW5jeSBDYXN0bGUgKGh0dHA6Ly93d3cuYm91bmN5Y2FzdGxlLm9yZykKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZAorYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sCitpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKK3N1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCitwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UCitMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4KK05PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy9mcmFtZXdvcmsvY29tbW9ucy1jb21wcmVzcy0xLjAuamFyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FwYWNoZSBDb21tb25zIENvbXByZXNzCitDb3B5cmlnaHQgMjAwMi0yMDA5IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgorCitUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5CitUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLgorCitPcmlnaW5hbCBCWmlwMiBjbGFzc2VzIGNvbnRyaWJ1dGVkIGJ5IEtlaXJvbiBMaWRkbGUKKzxrZWlyb25AYWZ0ZXhzdy5jb20+LCBBZnRleCBTb2Z0d2FyZSB0byB0aGUgQXBhY2hlIEFudCBwcm9qZWN0CisKK09yaWdpbmFsIFRhciBjbGFzc2VzIGZyb20gY29udHJpYnV0b3JzIG9mIHRoZSBBcGFjaGUgQW50IHByb2plY3QKKworT3JpZ2luYWwgWmlwIGNsYXNzZXMgZnJvbSBjb250cmlidXRvcnMgb2YgdGhlIEFwYWNoZSBBbnQgcHJvamVjdAorCitPcmlnaW5hbCBDUElPIGNsYXNzZXMgY29udHJpYnV0ZWQgYnkgTWFya3VzIEt1c3MgYW5kIHRoZSBqUlBNIHByb2plY3QKKyhqcnBtLnNvdXJjZWZvcmdlLm5ldCkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RpY2VzIGZvciBmaWxlKHMpOgorL2xpYi9saWJiY2Muc28KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KK05PVElDRSBmaWxlIGZvciBsaWJiY2MuZ2l0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIE5PVElDRSBmb3IgbGliL0V4ZWN1dGlvbkVuZ2luZS8sIGxpYi9TY3JpcHRDUlQvLCBpbmNsdWRlIGFuZCBoZWxwZXIvLgorCisgICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKworCisqIE5PVElDRSBmb3IgcnVudGltZS8gYW5kIGxpYi9Db2RlR2VuLy4KKyAgTm90ZTogVGhlIE5PVElDRSBpcyB0aGUgc2FtZSBmb3IgYW5vdGhlciBnaXQgcHJvamVjdCwgZXh0ZXJuYWwvbGx2bS5naXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTExWTSBSZWxlYXNlIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAwMy0yMDExIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbi4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieToKKworICAgIExMVk0gVGVhbQorCisgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCisKKyAgICBodHRwOi8vbGx2bS5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0CisgICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KKyAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKK1NPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvcHlyaWdodHMgYW5kIExpY2Vuc2VzIGZvciBUaGlyZCBQYXJ0eSBTb2Z0d2FyZSBEaXN0cmlidXRlZCB3aXRoIExMVk06Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBMTFZNIHNvZnR3YXJlIGNvbnRhaW5zIGNvZGUgd3JpdHRlbiBieSB0aGlyZCBwYXJ0aWVzLiAgU3VjaCBzb2Z0d2FyZSB3aWxsCitoYXZlIGl0cyBvd24gaW5kaXZpZHVhbCBMSUNFTlNFLlRYVCBmaWxlIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgYXBwZWFycy4KK1RoaXMgZmlsZSB3aWxsIGRlc2NyaWJlIHRoZSBjb3B5cmlnaHRzLCBsaWNlbnNlLCBhbmQgcmVzdHJpY3Rpb25zIHdoaWNoIGFwcGx5Cit0byB0aGF0IGNvZGUuCisKK1RoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGluIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlIExpY2Vuc2UKK2FwcGxpZXMgdG8gYWxsIGNvZGUgaW4gdGhlIExMVk0gRGlzdHJpYnV0aW9uLCBhbmQgbm90aGluZyBpbiBhbnkgb2YgdGhlCitvdGhlciBsaWNlbnNlcyBnaXZlcyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSBvciB0aGUKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCitTb2Z0d2FyZS4KKworVGhlIGZvbGxvd2luZyBwaWVjZXMgb2Ygc29mdHdhcmUgaGF2ZSBhZGRpdGlvbmFsIG9yIGFsdGVybmF0ZSBjb3B5cmlnaHRzLAorbGljZW5zZXMsIGFuZC9vciByZXN0cmljdGlvbnM6CisKK1Byb2dyYW0gICAgICAgICAgICAgRGlyZWN0b3J5CistLS0tLS0tICAgICAgICAgICAgIC0tLS0tLS0tLQorQXV0b2NvbmYgICAgICAgICAgICBsbHZtL2F1dG9jb25mCisgICAgICAgICAgICAgICAgICAgIGxsdm0vcHJvamVjdHMvTW9kdWxlTWFrZXIvYXV0b2NvbmYKKyAgICAgICAgICAgICAgICAgICAgbGx2bS9wcm9qZWN0cy9zYW1wbGUvYXV0b2NvbmYKK0NlbGxTUFUgYmFja2VuZCAgICAgbGx2bS9saWIvVGFyZ2V0L0NlbGxTUFUvUkVBRE1FLnR4dAorR29vZ2xlIFRlc3QgICAgICAgICBsbHZtL3V0aWxzL3VuaXR0ZXN0L2dvb2dsZXRlc3QKK09wZW5CU0QgcmVnZXggICAgICAgbGx2bS9saWIvU3VwcG9ydC97cmVnKiwgQ09QWVJJR0hULnJlZ2V4fQorCisKKworKiBOT1RJQ0UgZm9yIHRlc3RzL2Rpc2Fzc2VtLmNwcCBhbmQgdGVzdHMvZGlzYXNzZW0uaC4KKworLyogICAgICAkTmV0QlNEOiBkaXNhc3NlbS5jLHYgMS4xNCAyMDAzLzAzLzI3IDE2OjU4OjM2IG15Y3JvZnQgRXhwICQgICAgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYgTWFyayBCcmluaWNvbWJlLgorICogQ29weXJpZ2h0IChjKSAxOTk2IEJyaW5pLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBCcmluaS4KKyAqIDQuIFRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG5vciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQlJJTkkgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIEJSSU5JIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogUmlzY0JTRCBrZXJuZWwgcHJvamVjdAorICoKKyAqIGRiX2Rpc2FzbS5jCisgKgorICogS2VybmVsIGRpc2Fzc2VtYmxlcgorICoKKyAqIENyZWF0ZWQgICAgICA6IDEwLzAyLzk2CisgKgorICogU3RydWN0dXJlZCBhZnRlciB0aGUgc3BhcmMvc3BhcmMvZGJfZGlzYXNtLmMgYnkgRGF2aWQgUy4gTWlsbGVyICYKKyAqIFBhdWwgS3JhbmVuYnVyZworICoKKyAqIFRoaXMgY29kZSBpcyBub3QgY29tcGxldGUuIE5vdCBhbGwgaW5zdHJ1Y3Rpb25zIGFyZSBkaXNhc3NlbWJsZWQuCisgKi8KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RpY2VzIGZvciBmaWxlKHMpOgorL2xpYi9saWJmZGxpYm0uYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKK2lzIHByZXNlcnZlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RpY2VzIGZvciBmaWxlKHMpOgorL2Jpbi9lbXVsYXRvci1hcm0KKy9iaW4vZW11bGF0b3ItbWlwcworL2Jpbi9lbXVsYXRvci14ODYKKy9iaW4vZW11bGF0b3IKKy9iaW4vZW11bGF0b3I2NC1hcm0KKy9iaW4vZW11bGF0b3I2NC1taXBzCisvYmluL2VtdWxhdG9yNjQteDg2CisvbGliL2VtdWxhdG9yLWNvbW1vbi5hCisvbGliL2VtdWxhdG9yLWxpYmVsZmYuYQorL2xpYi9lbXVsYXRvci1saWJqcGVnLmEKKy9saWIvZW11bGF0b3ItbGlicWVtdS5hCisvbGliL2VtdWxhdG9yLWxpYnVpLmEKKy9saWIvZW11bGF0b3ItdGFyZ2V0LWFybS5hCisvbGliL2VtdWxhdG9yLXRhcmdldC1pMzg2LmEKKy9saWIvZW11bGF0b3ItdGFyZ2V0LW1pcHMuYQorL2xpYi9lbXVsYXRvcjY0LWNvbW1vbi5hCisvbGliL2VtdWxhdG9yNjQtbGliZWxmZi5hCisvbGliL2VtdWxhdG9yNjQtbGlianBlZy5hCisvbGliL2VtdWxhdG9yNjQtbGlicWVtdS5hCisvbGliL2VtdWxhdG9yNjQtbGlidWkuYQorL2xpYi9lbXVsYXRvcjY0LXRhcmdldC1hcm0uYQorL2xpYi9lbXVsYXRvcjY0LXRhcmdldC1pMzg2LmEKKy9saWIvZW11bGF0b3I2NC10YXJnZXQtbWlwcy5hCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgICAgICAgICAgICAgICAgICAgICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKwwKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKwwKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorDAorICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorDAorICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSAxOXl5ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIDE5eXkgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RpY2VzIGZvciBmaWxlKHMpOgorL2ZyYW1ld29yay9ncm9vdnktYWxsLTEuNy4wLmphcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RpY2VzIGZvciBmaWxlKHMpOgorL2xpYi9saWJjb3Jrc2NyZXcuc28KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBDb3B5cmlnaHQgKGMpIDIwMTEsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy9mcmFtZXdvcmsvbGlibHpmLmphcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBNYXJjIEFsZXhhbmRlciBMZWhtYW5uIDxzY2htb3JwQHNjaG1vcnAuZGU+CisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYS0KK3Rpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKK1dBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUi0KK0NIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTworRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEUtCitDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKK09SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RILQorRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECitPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK0FsdGVybmF0aXZlbHksIHRoZSBmb2xsb3dpbmcgZmlsZXMgY2FycnkgYW4gYWRkaXRpb25hbCBub3RpY2UgdGhhdAorZXhwbGljaXRseSBhbGxvd3MgcmVsaWNlbnNpbmcgdW5kZXIgdGhlIEdQTHYyOiBsemYuYyBsemYuaCBsemZQLmggbHpmX2MuYworbHpmX2QuYworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy9saWIvbGliTExWTS5zbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0xMVk0gUmVsZWFzZSBMaWNlbnNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQQorT3BlbiBTb3VyY2UgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitEZXZlbG9wZWQgYnk6CisKKyAgICBMTFZNIFRlYW0KKworICAgIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbgorCisgICAgaHR0cDovL2xsdm0ub3JnCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIHdpdGgKK3RoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSwgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdAorICAgICAgVXJiYW5hLUNoYW1wYWlnbiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvCisgICAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT05UUklCVVRPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEggVEhFCitTT0ZUV0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHRzIGFuZCBMaWNlbnNlcyBmb3IgVGhpcmQgUGFydHkgU29mdHdhcmUgRGlzdHJpYnV0ZWQgd2l0aCBMTFZNOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgTExWTSBzb2Z0d2FyZSBjb250YWlucyBjb2RlIHdyaXR0ZW4gYnkgdGhpcmQgcGFydGllcy4gIFN1Y2ggc29mdHdhcmUgd2lsbAoraGF2ZSBpdHMgb3duIGluZGl2aWR1YWwgTElDRU5TRS5UWFQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGFwcGVhcnMuCitUaGlzIGZpbGUgd2lsbCBkZXNjcmliZSB0aGUgY29weXJpZ2h0cywgbGljZW5zZSwgYW5kIHJlc3RyaWN0aW9ucyB3aGljaCBhcHBseQordG8gdGhhdCBjb2RlLgorCitUaGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpbiB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZSBMaWNlbnNlCithcHBsaWVzIHRvIGFsbCBjb2RlIGluIHRoZSBMTFZNIERpc3RyaWJ1dGlvbiwgYW5kIG5vdGhpbmcgaW4gYW55IG9mIHRoZQorb3RoZXIgbGljZW5zZXMgZ2l2ZXMgcGVybWlzc2lvbiB0byB1c2UgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0gb3IgdGhlCitVbml2ZXJzaXR5IG9mIElsbGlub2lzIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworU29mdHdhcmUuCisKK1RoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlIGhhdmUgYWRkaXRpb25hbCBvciBhbHRlcm5hdGUgY29weXJpZ2h0cywKK2xpY2Vuc2VzLCBhbmQvb3IgcmVzdHJpY3Rpb25zOgorCitQcm9ncmFtICAgICAgICAgICAgIERpcmVjdG9yeQorLS0tLS0tLSAgICAgICAgICAgICAtLS0tLS0tLS0KK0F1dG9jb25mICAgICAgICAgICAgbGx2bS9hdXRvY29uZgorICAgICAgICAgICAgICAgICAgICBsbHZtL3Byb2plY3RzL01vZHVsZU1ha2VyL2F1dG9jb25mCisgICAgICAgICAgICAgICAgICAgIGxsdm0vcHJvamVjdHMvc2FtcGxlL2F1dG9jb25mCitDZWxsU1BVIGJhY2tlbmQgICAgIGxsdm0vbGliL1RhcmdldC9DZWxsU1BVL1JFQURNRS50eHQKK0dvb2dsZSBUZXN0ICAgICAgICAgbGx2bS91dGlscy91bml0dGVzdC9nb29nbGV0ZXN0CitPcGVuQlNEIHJlZ2V4ICAgICAgIGxsdm0vbGliL1N1cHBvcnQve3JlZyosIENPUFlSSUdIVC5yZWdleH0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPT0gTElDRU5TRS5UWFQgZm9yIC4vYXV0b2NvbmYvTElDRU5TRS5UWFQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBdXRvY29uZiBGaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBbGwgYXV0b2NvbmYgZmlsZXMgYXJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBMTFZNIGxpY2Vuc2Ugd2l0aCB0aGUgZm9sbG93aW5nCithZGRpdGlvbnM6CisKK2xsdm0vYXV0b2NvbmYvaW5zdGFsbC1zaDoKKwlUaGlzIHNjcmlwdCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTExWTSBsaWNlbnNlLCB3aXRoIHRoZSBmb2xsb3dpbmcKKwlhZGRpdGlvbmFsIGNvcHlyaWdodHMgYW5kIHJlc3RyaWN0aW9uczoKKworCUNvcHlyaWdodCAxOTkxIGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisKKwlQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKwlkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAorCXRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAorCWNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgCisJZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisJcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorCXdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisJc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisJd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKK1BsZWFzZSBzZWUgdGhlIHNvdXJjZSBmaWxlcyBmb3IgYWRkaXRpb25hbCBjb3B5cmlnaHRzLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz09IExJQ0VOU0UuVFhUIGZvciAuL3Byb2plY3RzL3NhbXBsZS9hdXRvY29uZi9MSUNFTlNFLlRYVAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0F1dG9jb25mIEZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FsbCBhdXRvY29uZiBmaWxlcyBhcmUgbGljZW5zZWQgdW5kZXIgdGhlIExMVk0gbGljZW5zZSB3aXRoIHRoZSBmb2xsb3dpbmcKK2FkZGl0aW9uczoKKworbGx2bS9hdXRvY29uZi9pbnN0YWxsLXNoOgorCVRoaXMgc2NyaXB0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBMTFZNIGxpY2Vuc2UsIHdpdGggdGhlIGZvbGxvd2luZworCWFkZGl0aW9uYWwgY29weXJpZ2h0cyBhbmQgcmVzdHJpY3Rpb25zOgorCisJQ29weXJpZ2h0IDE5OTEgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKworCVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworCWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CisJdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0CisJY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyAKKwlkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKwlwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisJd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKwlzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKwl3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKworUGxlYXNlIHNlZSB0aGUgc291cmNlIGZpbGVzIGZvciBhZGRpdGlvbmFsIGNvcHlyaWdodHMuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPT0gTElDRU5TRS5UWFQgZm9yIC4vdXRpbHMvdW5pdHRlc3QvZ29vZ2xldGVzdC9MSUNFTlNFLlRYVAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQgMjAwOCwgR29vZ2xlIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgoraW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz09IExJQ0VOU0UuVFhUIGZvciAuL2luY2x1ZGUvbGx2bS9TdXBwb3J0L0xJQ0VOU0UuVFhUCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0xMVk0gU3lzdGVtIEludGVyZmFjZSBMaWJyYXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgTExWTSBTeXN0ZW0gSW50ZXJmYWNlIExpYnJhcnkgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElsbGlub2lzIE9wZW4gU291cmNlCitMaWNlbnNlIGFuZCBoYXMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGNvcHlyaWdodDoKKworQ29weXJpZ2h0IChDKSAyMDA0IGVYdGVuc2libGUgU3lzdGVtcywgSW5jLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05vdGljZXMgZm9yIGZpbGUocyk6CisvZnJhbWV3b3JrL2RvY2xhdmEuamFyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4KKyAKKyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgCisgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworalF1ZXJ5IDEuMi42IC0gTmV3IFdhdmUgSmF2YXNjcmlwdAorCitDb3B5cmlnaHQgKGMpIDIwMDggSm9obiBSZXNpZyAoanF1ZXJ5LmNvbSkKK0R1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoTUlULUxJQ0VOU0UudHh0KQorYW5kIEdQTCAoR1BMLUxJQ0VOU0UudHh0KSBsaWNlbnNlcy4KKworQ29weXJpZ2h0IChjKSAyMDA5IEpvaG4gUmVzaWcsIGh0dHA6Ly9qcXVlcnkuY29tLworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RpY2VzIGZvciBmaWxlKHMpOgorL2Jpbi9zcWxpdGUzCisvbGliL2xpYnNxbGl0ZS5zbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyMDAxIFNlcHRlbWJlciAxNQorCitUaGUgYXV0aG9yIGRpc2NsYWltcyBjb3B5cmlnaHQgdG8gdGhpcyBzb3VyY2UgY29kZS4gIEluIHBsYWNlIG9mCithIGxlZ2FsIG5vdGljZSwgaGVyZSBpcyBhIGJsZXNzaW5nOgorCisgICBNYXkgeW91IGRvIGdvb2QgYW5kIG5vdCBldmlsLgorICAgTWF5IHlvdSBmaW5kIGZvcmdpdmVuZXNzIGZvciB5b3Vyc2VsZiBhbmQgZm9yZ2l2ZSBvdGhlcnMuCisgICBNYXkgeW91IHNoYXJlIGZyZWVseSwgbmV2ZXIgdGFraW5nIG1vcmUgdGhhbiB5b3UgZ2l2ZS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05vdGljZXMgZm9yIGZpbGUocyk6CisvbGliL2xpYmNyeXB0by1ob3N0LnNvCisvbGliL2xpYmNyeXB0b19zdGF0aWMuYQorL2xpYi9saWJzc2wtaG9zdC5zbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgTElDRU5TRSBJU1NVRVMKKyAgPT09PT09PT09PT09PT0KKworICBUaGUgT3BlblNTTCB0b29sa2l0IHN0YXlzIHVuZGVyIGEgZHVhbCBsaWNlbnNlLCBpLmUuIGJvdGggdGhlIGNvbmRpdGlvbnMgb2YKKyAgdGhlIE9wZW5TU0wgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIFNTTGVheSBsaWNlbnNlIGFwcGx5IHRvIHRoZSB0b29sa2l0LgorICBTZWUgYmVsb3cgZm9yIHRoZSBhY3R1YWwgbGljZW5zZSB0ZXh0cy4gQWN0dWFsbHkgYm90aCBsaWNlbnNlcyBhcmUgQlNELXN0eWxlCisgIE9wZW4gU291cmNlIGxpY2Vuc2VzLiBJbiBjYXNlIG9mIGFueSBsaWNlbnNlIGlzc3VlcyByZWxhdGVkIHRvIE9wZW5TU0wKKyAgcGxlYXNlIGNvbnRhY3Qgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorCisgIE9wZW5TU0wgTGljZW5zZQorICAtLS0tLS0tLS0tLS0tLS0KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisKKyBPcmlnaW5hbCBTU0xlYXkgTGljZW5zZQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05vdGljZXMgZm9yIGZpbGUocyk6CisvbGliL2xpYmV4cGF0LWhvc3Quc28KKy9saWIvbGliZXhwYXQuYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTksIDIwMDAgVGhhaSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBDZW50ZXIgTHRkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIENsYXJrIENvb3BlcgorQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEV4cGF0IG1haW50YWluZXJzLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKK2luIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKK0NMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCitUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy9saWIvbGliTExWTUFuYWx5c2lzLmEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitMTFZNIFJlbGVhc2UgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKK09wZW4gU291cmNlIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDAzLTIwMTEgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OgorCisgICAgTExWTSBUZWFtCisKKyAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KKworICAgIGh0dHA6Ly9sbHZtLm9yZworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQKKyAgICAgIFVyYmFuYS1DaGFtcGFpZ24sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bworICAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKKyAgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQorU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0cyBhbmQgTGljZW5zZXMgZm9yIFRoaXJkIFBhcnR5IFNvZnR3YXJlIERpc3RyaWJ1dGVkIHdpdGggTExWTToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIExMVk0gc29mdHdhcmUgY29udGFpbnMgY29kZSB3cml0dGVuIGJ5IHRoaXJkIHBhcnRpZXMuICBTdWNoIHNvZnR3YXJlIHdpbGwKK2hhdmUgaXRzIG93biBpbmRpdmlkdWFsIExJQ0VOU0UuVFhUIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBhcHBlYXJzLgorVGhpcyBmaWxlIHdpbGwgZGVzY3JpYmUgdGhlIGNvcHlyaWdodHMsIGxpY2Vuc2UsIGFuZCByZXN0cmljdGlvbnMgd2hpY2ggYXBwbHkKK3RvIHRoYXQgY29kZS4KKworVGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgaW4gdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UgTGljZW5zZQorYXBwbGllcyB0byBhbGwgY29kZSBpbiB0aGUgTExWTSBEaXN0cmlidXRpb24sIGFuZCBub3RoaW5nIGluIGFueSBvZiB0aGUKK290aGVyIGxpY2Vuc2VzIGdpdmVzIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtIG9yIHRoZQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKK1NvZnR3YXJlLgorCitUaGUgZm9sbG93aW5nIHBpZWNlcyBvZiBzb2Z0d2FyZSBoYXZlIGFkZGl0aW9uYWwgb3IgYWx0ZXJuYXRlIGNvcHlyaWdodHMsCitsaWNlbnNlcywgYW5kL29yIHJlc3RyaWN0aW9uczoKKworUHJvZ3JhbSAgICAgICAgICAgICBEaXJlY3RvcnkKKy0tLS0tLS0gICAgICAgICAgICAgLS0tLS0tLS0tCitBdXRvY29uZiAgICAgICAgICAgIGxsdm0vYXV0b2NvbmYKKyAgICAgICAgICAgICAgICAgICAgbGx2bS9wcm9qZWN0cy9Nb2R1bGVNYWtlci9hdXRvY29uZgorICAgICAgICAgICAgICAgICAgICBsbHZtL3Byb2plY3RzL3NhbXBsZS9hdXRvY29uZgorQ2VsbFNQVSBiYWNrZW5kICAgICBsbHZtL2xpYi9UYXJnZXQvQ2VsbFNQVS9SRUFETUUudHh0CitHb29nbGUgVGVzdCAgICAgICAgIGxsdm0vdXRpbHMvdW5pdHRlc3QvZ29vZ2xldGVzdAorT3BlbkJTRCByZWdleCAgICAgICBsbHZtL2xpYi9TdXBwb3J0L3tyZWcqLCBDT1BZUklHSFQucmVnZXh9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKIC9mcmFtZXdvcmsvZW1tYWxpYi5qYXIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29tbW9uIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjAKQEAgLTcwNTQsMTMgKzE3MjQyLDMyNzYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBOb3RpY2VzIGZvciBmaWxlKHMpOgotL2xpYi9saWJndGVzdF9ob3N0LmEKLS9saWI2NC9saWJndGVzdF9ob3N0LmEKLS9saWI2NC9saWJndGVzdF9wcm9kLnNvCisvbGliL2xpYnNlbGludXguYQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db3B5cmlnaHQgMjAwOCwgR29vZ2xlIEluYy4KK1RoaXMgbGlicmFyeSAobGlic2VsaW51eCkgaXMgcHVibGljIGRvbWFpbiBzb2Z0d2FyZSwgaS5lLiBub3QgY29weXJpZ2h0ZWQuCisKK1dhcnJhbnR5IEV4Y2x1c2lvbgorLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgYWdyZWUgdGhhdCB0aGlzIHNvZnR3YXJlIGlzIGEKK25vbi1jb21tZXJjaWFsbHkgZGV2ZWxvcGVkIHByb2dyYW0gdGhhdCBtYXkgY29udGFpbiAiYnVncyIgKGFzIHRoYXQKK3Rlcm0gaXMgdXNlZCBpbiB0aGUgaW5kdXN0cnkpIGFuZCB0aGF0IGl0IG1heSBub3QgZnVuY3Rpb24gYXMgaW50ZW5kZWQuCitUaGUgc29mdHdhcmUgaXMgbGljZW5zZWQgImFzIGlzIi4gTlNBIG1ha2VzIG5vLCBhbmQgaGVyZWJ5IGV4cHJlc3NseQorZGlzY2xhaW1zIGFsbCwgd2FycmFudGllcywgZXhwcmVzcywgaW1wbGllZCwgc3RhdHV0b3J5LCBvciBvdGhlcndpc2UKK3dpdGggcmVzcGVjdCB0byB0aGUgc29mdHdhcmUsIGluY2x1ZGluZyBub25pbmZyaW5nZW1lbnQgYW5kIHRoZSBpbXBsaWVkCit3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW4gbm8gZXZlbnQgd2lsbCBOU0EgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcywgaW5jbHVkaW5nIGxvc3Mgb2YgZGF0YSwKK2xvc3QgcHJvZml0cywgY29zdCBvZiBjb3Zlciwgb3Igb3RoZXIgc3BlY2lhbCwgaW5jaWRlbnRhbCwKK2NvbnNlcXVlbnRpYWwsIGRpcmVjdCBvciBpbmRpcmVjdCBkYW1hZ2VzIGFyaXNpbmcgZnJvbSB0aGUgc29mdHdhcmUgb3IKK3RoZSB1c2UgdGhlcmVvZiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgbGlhYmlsaXR5LiBUaGlzCitsaW1pdGF0aW9uIHdpbGwgYXBwbHkgZXZlbiBpZiBOU0EgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkKK29mIHN1Y2ggZGFtYWdlLiBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGlzIGlzIGEgcmVhc29uYWJsZSBhbGxvY2F0aW9uIG9mCityaXNrLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05vdGljZXMgZm9yIGZpbGUocyk6CisvZnJhbWV3b3JrL29yZy1uZXRiZWFucy1hcGktdmlzdWFsLmphcgorL2ZyYW1ld29yay9vcmctb3BlbmlkZS11dGlsLmphcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBKdW5lIDE5OTEgCisKK0NvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCitvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworUHJlYW1ibGUKKworVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkKK3lvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tCit0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUKK2lzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuIFRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24ncyBzb2Z0d2FyZQorYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvIHVzaW5nIGl0LgorKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSBZb3UgY2FuCithcHBseSBpdCB0byB5b3VyIHByb2dyYW1zLCB0b28uIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZQorc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90IHByaWNlLiBPdXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kCitjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUKK3NvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbgorY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlCitwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuIFRvCitwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQKK2ZvcmJpZCBhbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8KK3N1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvCitjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YKK3RoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwKK3doZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cworYWxsIHRoZSByaWdodHMgdGhhdCB5b3UgaGF2ZS4gWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwKK3RvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gQW5kIHlvdSBtdXN0IHNob3cKK3RoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUKK3NvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91CitsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUKK3NvZnR3YXJlLgorCitBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UKK2NlcnRhaW4gdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5Citmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkKK3NvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cKK3RoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28gdGhhdCBhbnkKK3Byb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlCitvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy4KKworRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkKK3NvZnR3YXJlIHBhdGVudHMuIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0CityZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUgcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4KK3BhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUgcHJvZ3JhbSBwcm9wcmlldGFyeS4KK1RvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0CitiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCitUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uCithbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQKK01PRElGSUNBVElPTgorCiswLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoCitjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0CittYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UuIFRoZSAiUHJvZ3JhbSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvcgord29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iIG1lYW5zIGVpdGhlciB0aGUKK1Byb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzCit0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50bworYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZAord2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgRWFjaAorbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24KK2FyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLgorVGhlIGFjdCBvZiBydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlCitvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzCitjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YKK2hhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuIFdoZXRoZXIgdGhhdCBpcwordHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUKK1Byb2dyYW0ncyBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwKK3Byb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbgorZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2YKK3dhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzCitMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueQorb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nCit3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYQorY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbgoraW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueQorcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kCitjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZQordGVybXMgb2YgU2VjdGlvbiAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mCit0aGVzZSBjb25kaXRpb25zOgorCithKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50Citub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mCithbnkgY2hhbmdlLgorCitiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsCit0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZQorUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vCitjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMKK2ludGVyYWN0aXZlbHkgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQKK3J1bm5pbmcgZm9yIHN1Y2ggaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwKK3RvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgYSBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IKK2Vsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heQorcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nCit0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAoRXhjZXB0aW9uOiBpZgordGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dCBkb2VzIG5vdCBub3JtYWxseQorcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbQoraXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUKK1Byb2dyYW0sIGFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZAorc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMKK3Rlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2Ugc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZQordGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUKK3NlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzCitleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydAorcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMKK29yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsKK3JhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUKK2Rpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlCitQcm9ncmFtLiBJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90CitiYXNlZCBvbiB0aGUgUHJvZ3JhbSB3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24KK21lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcworTGljZW5zZS4KKworMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQKK29uIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybQordW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UKK2Fsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKK2EpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCittYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCitiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdAordGhyZWUgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQordGhhbiB5b3VyIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sCithIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UKK2NvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyCithYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsKK29yLAorCitjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZQorb2ZmZXIgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAoVGhpcworYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbgorYW5kIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yCitleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aAorU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZQord29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhbiBleGVjdXRhYmxlIHdvcmssCitjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwKK21vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlCitkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbAorY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gSG93ZXZlciwgYXMKK2Egc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdAoraW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIKK3NvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsCitrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlCitleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLiBJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZQoraXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwKK3RoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbQordGhlIHNhbWUgcGxhY2UgY291bnRzIGFzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsCitldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlCitzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKzQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueQorYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtIGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUKK3JlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbAorbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcworcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91CitoYXZlIG5vdCBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91CitwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cworZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91CitkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLAoreW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yCittb2RpZnlpbmcgdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKzYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYQorbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yCittb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KK1lvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlCityZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlCitub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mCitwYXRlbnQgaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0bworcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5Citjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZQorY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUKK2NvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMKK3RvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEKK2NvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiBGb3IKK2V4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUKK3JlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZQorY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5Cit5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IKK3VuZW5mb3JjZWFibGUgdW5kZXIgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZQorb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEKK3dob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuIEl0IGlzIG5vdAordGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0Cit2YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUKK3B1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlCitkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZQorcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0bwordGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbQoraW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMKK3VwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvCitkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZQorY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzCitiZWxpZXZlZCB0byBiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzCityZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5Citjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8KK3BsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdAorZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZQorY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvcgorYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMKK0xpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlCitib2R5IG9mIHRoaXMgTGljZW5zZS4KKworOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vcgorbmV3IHZlcnNpb25zIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0bwordGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUKK3ByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3Citwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmCit0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2gKK2FwcGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24KK29mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbgorb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLiBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIKK29mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQKK2J5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKzEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvCitvdGhlciBmcmVlIHByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZQorZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gRm9yCitzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2UKK3NvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuIE91ciBkZWNpc2lvbiB3aWxsIGJlCitndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwKK2Rlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlCitzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKK05PIFdBUlJBTlRZCisKKzExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUworTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQorQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUKK0NPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0KKyJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUgorSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFCitPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFCitERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQKK1RPIElOIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZCitXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRAorQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwKK1NQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GCitUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UCitMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IKK0xPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRQorUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNICitIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFUy4KKworRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKK0hvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCitJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlCitncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUKK3RoaXMgaXMgdG8gbWFrZSBpdCBmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbgorcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKK1RvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiBJdCBpcworc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvCittb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaAorZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyCit0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKK09uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdAoraXQgZG9lcy4KKworQ29weXJpZ2h0IChDKSA8eWVhcj4gPG5hbWUgb2YgYXV0aG9yPgorVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CithbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0Cit3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlCitpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCittb3JlIGRldGFpbHMuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LAord3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCitQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZAorcGFwZXIgbWFpbC4gSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEKK3Nob3J0IG5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUKK21vZGU6CisKK0dub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscwordHlwZSBgc2hvdyB3Jy4gVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvCityZWRpc3RyaWJ1dGUgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvcgorZGV0YWlscy4gVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycKK3Nob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UuIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5IGJlIGNhbGxlZAorc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4KK2JlIG1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYQorcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQKK2Rpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LiBIZXJlIGlzIGEgc2FtcGxlOworYWx0ZXIgdGhlIG5hbWVzOgorCitZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluCit0aGUgcHJvZ3JhbSBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKQord3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKK3NpZ25hdHVyZSBvZiBUeSBDb29uLCAxIEFwcmlsIDE5ODkKK1R5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcKK3lvdXIgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiBJZiB5b3VyIHByb2dyYW0gaXMgYQorc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5IGNvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvCitwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgbGlicmFyeS4gSWYKK3RoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKworIkNMQVNTUEFUSCIgRVhDRVBUSU9OIFRPIFRIRSBHUEwgVkVSU0lPTiAyCisKK0NlcnRhaW4gc291cmNlIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gCithcmUgc3ViamVjdCB0byAgdGhlIGZvbGxvd2luZyBjbGFyaWZpY2F0aW9uIGFuZCBzcGVjaWFsCitleGNlcHRpb24gdG8gdGhlIEdQTCBWZXJzaW9uIDIsIGJ1dCBvbmx5IHdoZXJlIFN1biBoYXMKK2V4cHJlc3NseSBpbmNsdWRlZCBpbiB0aGUgcGFydGljdWxhciBzb3VyY2UgZmlsZSdzIGhlYWRlcgordGhlIHdvcmRzICAiU3VuIGRlc2lnbmF0ZXMgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgYXMgc3ViamVjdAordG8gdGhlICJDbGFzc3BhdGgiIGV4Y2VwdGlvbiBhcyBwcm92aWRlZCBieSBTdW4gaW4gdGhlCitMaWNlbnNlIGZpbGUgdGhhdCBhY2NvbXBhbmllZCB0aGlzIGNvZGUuIiAKKworICAgTGlua2luZyB0aGlzIGxpYnJhcnkgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIG90aGVyCittb2R1bGVzIGlzIG1ha2luZyBhIGNvbWJpbmVkIHdvcmsgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LiAKK1RodXMsIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIFZlcnNpb24gMiBjb3ZlciB0aGUgd2hvbGUgY29tYmluYXRpb24uIAorCisgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGlzCitsaWJyYXJ5IGdpdmUgeW91ICBwZXJtaXNzaW9uIHRvIGxpbmsgdGhpcyBsaWJyYXJ5IHdpdGgKK2luZGVwZW5kZW50IG1vZHVsZXMgdG8gcHJvZHVjZSBhbiAgZXhlY3V0YWJsZSwgcmVnYXJkbGVzcyBvZgordGhlIGxpY2Vuc2UgdGVybXMgb2YgdGhlc2UgaW5kZXBlbmRlbnQgbW9kdWxlcywgIGFuZCB0byBjb3B5CithbmQgZGlzdHJpYnV0ZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdW5kZXIgdGVybXMgb2YgeW91ciAKK2Nob2ljZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0LCBmb3IgZWFjaCBsaW5rZWQKK2luZGVwZW5kZW50IG1vZHVsZSwgIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZQorb2YgdGhhdCBtb2R1bGUuICBBbiBpbmRlcGVuZGVudCAgbW9kdWxlIGlzIGEgbW9kdWxlIHdoaWNoIGlzCitub3QgZGVyaXZlZCBmcm9tIG9yIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gIElmICB5b3UgbW9kaWZ5Cit0aGlzIGxpYnJhcnksIHlvdSBtYXkgZXh0ZW5kIHRoaXMgZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbgorb2YgIHRoZSBsaWJyYXJ5LCBidXQgeW91IGFyZSBub3Qgb2JsaWdhdGVkIHRvIGRvIHNvLiAgSWYgeW91CitkbyBub3Qgd2lzaCB0byBkbyBzbywgZGVsZXRlIHRoaXMgZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tCit5b3VyIHZlcnNpb24uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05vdGljZXMgZm9yIGZpbGUocyk6CisvYmluL2FkYgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIENvcHlyaWdodCAoYykgMjAwNi0yMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgICBDb3B5cmlnaHQgMjAwNiwgQnJpYW4gU3dldGxhbmQgPHN3ZXRsYW5kQGZyb3R6Lm5ldD4KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy9mcmFtZXdvcmsvYXBhY2hlLXhtbC1ob3N0ZGV4LmphcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICA9PSAgTk9USUNFIGZpbGUgY29ycmVzcG9uZGluZyB0byBzZWN0aW9uIDQoZCkgb2YgdGhlIEFwYWNoZSBMaWNlbnNlLCAgID09CisgICA9PSAgVmVyc2lvbiAyLjAsIGluIHRoaXMgY2FzZSBmb3IgdGhlIEFwYWNoZSBYYWxhbiBKYXZhIGRpc3RyaWJ1dGlvbi4gID09CisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIEFwYWNoZSBYYWxhbiAoWGFsYW4gWFNMVCBwcm9jZXNzb3IpCisgICBDb3B5cmlnaHQgMTk5OS0yMDA2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgorCisgICBBcGFjaGUgWGFsYW4gKFhhbGFuIHNlcmlhbGl6ZXIpCisgICBDb3B5cmlnaHQgMTk5OS0yMDA2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgorCisgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGF0CisgICBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLgorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHRoZSBmb2xsb3dpbmc6CisgICAgIC0gc29mdHdhcmUgY29weXJpZ2h0IChjKSAxOTk5LTIwMDIsIExvdHVzIERldmVsb3BtZW50IENvcnBvcmF0aW9uLiwKKyAgICAgICBodHRwOi8vd3d3LmxvdHVzLmNvbS4KKyAgICAgLSBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiwgU3VuIE1pY3Jvc3lzdGVtcy4sCisgICAgICAgaHR0cDovL3d3dy5zdW4uY29tLgorICAgICAtIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMywgSUJNIENvcnBvcmF0aW9uLiwgCisgICAgICAgaHR0cDovL3d3dy5pYm0uY29tLgorICAgICAgIAorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgVGhlIGJpbmFyeSBkaXN0cmlidXRpb24gcGFja2FnZSAoaWUuIGphcnMsIHNhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24pIG9mCisgICB0aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBmb2xsb3dpbmc6CisgICAgICAgCisgICAgIC0gVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIAorICAgICAgICAgLSBYZXJjZXMgSmF2YSAtIHNlZSBMSUNFTlNFLnR4dCAKKyAgICAgICAgIC0gSkFYUCAxLjMgQVBJcyAtIHNlZSBMSUNFTlNFLnR4dAorICAgICAgICAgLSBCeXRlY29kZSBFbmdpbmVlcmluZyBMaWJyYXJ5IC0gc2VlIExJQ0VOU0UudHh0CisgICAgICAgICAtIFJlZ3VsYXIgRXhwcmVzc2lvbiAtIHNlZSBMSUNFTlNFLnR4dAorICAgICAgIAorICAgICAtIFNjb3R0IEh1ZHNvbiwgRnJhbmsgRmxhbm5lcnksIEMuIFNjb3R0IEFuYW5pYW4gCisgICAgICAgICAtIENVUCBQYXJzZXIgR2VuZXJhdG9yIHJ1bnRpbWUgKGphdmFjdXBccnVudGltZSkgLSBzZWUgTElDRU5TRS50eHQgCisgCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICAgVGhlIHNvdXJjZSBkaXN0cmlidXRpb24gcGFja2FnZSAoaWUuIGFsbCBzb3VyY2UgYW5kIHRvb2xzIHJlcXVpcmVkIHRvIGJ1aWxkCisgICBYYWxhbiBKYXZhKSBvZiB0aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBmb2xsb3dpbmc6CisgICAgICAgCisgICAgIC0gVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICAgICAgICAtIFhlcmNlcyBKYXZhIC0gc2VlIExJQ0VOU0UudHh0IAorICAgICAgICAgLSBKQVhQIDEuMyBBUElzIC0gc2VlIExJQ0VOU0UudHh0CisgICAgICAgICAtIEJ5dGVjb2RlIEVuZ2luZWVyaW5nIExpYnJhcnkgLSBzZWUgTElDRU5TRS50eHQKKyAgICAgICAgIC0gUmVndWxhciBFeHByZXNzaW9uIC0gc2VlIExJQ0VOU0UudHh0CisgICAgICAgICAtIEFudCAtIHNlZSBMSUNFTlNFLnR4dAorICAgICAgICAgLSBTdHlsZWJvb2sgZG9jIHRvb2wgLSBzZWUgTElDRU5TRS50eHQgICAgCisgICAgICAgCisgICAgIC0gRWxsaW90IEpvZWwgQmVyayBhbmQgQy4gU2NvdHQgQW5hbmlhbiAKKyAgICAgICAgIC0gTGV4aWNhbCBBbmFseXplciBHZW5lcmF0b3IgKEpMZXgpIC0gc2VlIExJQ0VOU0UudHh0CisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgICAgCisgICBBcGFjaGUgWGVyY2VzIEphdmEKKyAgIENvcHlyaWdodCAxOTk5LTIwMDYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisKKyAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYXQKKyAgIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuCisKKyAgIFBvcnRpb25zIG9mIEFwYWNoZSBYZXJjZXMgSmF2YSBpbiB4ZXJjZXNJbXBsLmphciBhbmQgeG1sLWFwaXMuamFyCisgICB3ZXJlIG9yaWdpbmFsbHkgYmFzZWQgb24gdGhlIGZvbGxvd2luZzoKKyAgICAgLSBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDE5OTksIElCTSBDb3Jwb3JhdGlvbi4sIGh0dHA6Ly93d3cuaWJtLmNvbS4KKyAgICAgLSBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDE5OTksIFN1biBNaWNyb3N5c3RlbXMuLCBodHRwOi8vd3d3LnN1bi5jb20uCisgICAgIC0gdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBQYXVsIEVuZyBvbiBiZWhhbGYgb2YgdGhlIAorICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHRoYXQgd2VyZSBvcmlnaW5hbGx5IGRldmVsb3BlZCBhdCBpQ2xpY2ssIEluYy4sCisgICAgICAgc29mdHdhcmUgY29weXJpZ2h0IChjKSAxOTk5LiAgICAKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgIAorICAgQXBhY2hlIHhtbC1jb21tb25zIHhtbC1hcGlzIChyZWRpc3RyaWJ1dGlvbiBvZiB4bWwtYXBpcy5qYXIpCisKKyAgIEFwYWNoZSBYTUwgQ29tbW9ucworICAgQ29weXJpZ2h0IDIwMDEtMjAwMywyMDA2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBhdAorICAgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4KKworICAgUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIG9yaWdpbmFsbHkgYmFzZWQgb24gdGhlIGZvbGxvd2luZzoKKyAgICAgLSBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDE5OTksIElCTSBDb3Jwb3JhdGlvbi4sIGh0dHA6Ly93d3cuaWJtLmNvbS4KKyAgICAgLSBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDE5OTksIFN1biBNaWNyb3N5c3RlbXMuLCBodHRwOi8vd3d3LnN1bi5jb20uCisgICAgIC0gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIGh0dHA6Ly93d3cudzMub3JnCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RpY2VzIGZvciBmaWxlKHMpOgorL2Jpbi9sbHZtLXJzLWNjCisvYmluL3JzLXNwZWMtZ2VuCisvbGliL2xpYnNsYW5nLmEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPT09PT09PT09PT09PT09PT09PT09PT09PQorTk9USUNFIGZpbGUgZm9yIHNsYW5nLmdpdAorPT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOT1RJQ0UgZmlsZSBmb3IgZXh0ZXJuYWwvY2xhbmcgKGNsYW5nLmdpdCkuCitOb3RlOiBsaWJjbGFuZyouYSBhcmUgc3RhdGljYWxseSBsaW5rZWQuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTExWTSBSZWxlYXNlIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAwNy0yMDExIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbi4KIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKK0RldmVsb3BlZCBieToKKworICAgIExMVk0gVGVhbQorCisgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCisKKyAgICBodHRwOi8vbGx2bS5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0CisgICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KKyAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKK1NPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBMTFZNIHNvZnR3YXJlIGNvbnRhaW5zIGNvZGUgd3JpdHRlbiBieSB0aGlyZCBwYXJ0aWVzLiAgU3VjaCBzb2Z0d2FyZSB3aWxsCitoYXZlIGl0cyBvd24gaW5kaXZpZHVhbCBMSUNFTlNFLlRYVCBmaWxlIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgYXBwZWFycy4KK1RoaXMgZmlsZSB3aWxsIGRlc2NyaWJlIHRoZSBjb3B5cmlnaHRzLCBsaWNlbnNlLCBhbmQgcmVzdHJpY3Rpb25zIHdoaWNoIGFwcGx5Cit0byB0aGF0IGNvZGUuCisKK1RoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGluIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlIExpY2Vuc2UKK2FwcGxpZXMgdG8gYWxsIGNvZGUgaW4gdGhlIExMVk0gRGlzdHJpYnV0aW9uLCBhbmQgbm90aGluZyBpbiBhbnkgb2YgdGhlCitvdGhlciBsaWNlbnNlcyBnaXZlcyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSBvciB0aGUKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCitTb2Z0d2FyZS4KKworVGhlIGZvbGxvd2luZyBwaWVjZXMgb2Ygc29mdHdhcmUgaGF2ZSBhZGRpdGlvbmFsIG9yIGFsdGVybmF0ZSBjb3B5cmlnaHRzLAorbGljZW5zZXMsIGFuZC9vciByZXN0cmljdGlvbnM6CisKK1Byb2dyYW0gICAgICAgICAgICAgRGlyZWN0b3J5CistLS0tLS0tICAgICAgICAgICAgIC0tLS0tLS0tLQorPG5vbmUgeWV0PgorCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05PVElDRSBmaWxlIGZvciBleHRlcm5hbC9sbHZtIChsbHZtLmdpdCkuCitOb3RlOiBsaWJMTFZNKi5hIGFyZSBzdGF0aWNhbGx5IGxpbmtlZC4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTExWTSBSZWxlYXNlIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAwMy0yMDExIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbi4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieToKKworICAgIExMVk0gVGVhbQorCisgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCisKKyAgICBodHRwOi8vbGx2bS5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0CisgICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KKyAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKK1NPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvcHlyaWdodHMgYW5kIExpY2Vuc2VzIGZvciBUaGlyZCBQYXJ0eSBTb2Z0d2FyZSBEaXN0cmlidXRlZCB3aXRoIExMVk06Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBMTFZNIHNvZnR3YXJlIGNvbnRhaW5zIGNvZGUgd3JpdHRlbiBieSB0aGlyZCBwYXJ0aWVzLiAgU3VjaCBzb2Z0d2FyZSB3aWxsCitoYXZlIGl0cyBvd24gaW5kaXZpZHVhbCBMSUNFTlNFLlRYVCBmaWxlIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgYXBwZWFycy4KK1RoaXMgZmlsZSB3aWxsIGRlc2NyaWJlIHRoZSBjb3B5cmlnaHRzLCBsaWNlbnNlLCBhbmQgcmVzdHJpY3Rpb25zIHdoaWNoIGFwcGx5Cit0byB0aGF0IGNvZGUuCisKK1RoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGluIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlIExpY2Vuc2UKK2FwcGxpZXMgdG8gYWxsIGNvZGUgaW4gdGhlIExMVk0gRGlzdHJpYnV0aW9uLCBhbmQgbm90aGluZyBpbiBhbnkgb2YgdGhlCitvdGhlciBsaWNlbnNlcyBnaXZlcyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSBvciB0aGUKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCitTb2Z0d2FyZS4KKworVGhlIGZvbGxvd2luZyBwaWVjZXMgb2Ygc29mdHdhcmUgaGF2ZSBhZGRpdGlvbmFsIG9yIGFsdGVybmF0ZSBjb3B5cmlnaHRzLAorbGljZW5zZXMsIGFuZC9vciByZXN0cmljdGlvbnM6CisKK1Byb2dyYW0gICAgICAgICAgICAgRGlyZWN0b3J5CistLS0tLS0tICAgICAgICAgICAgIC0tLS0tLS0tLQorQXV0b2NvbmYgICAgICAgICAgICBsbHZtL2F1dG9jb25mCisgICAgICAgICAgICAgICAgICAgIGxsdm0vcHJvamVjdHMvTW9kdWxlTWFrZXIvYXV0b2NvbmYKKyAgICAgICAgICAgICAgICAgICAgbGx2bS9wcm9qZWN0cy9zYW1wbGUvYXV0b2NvbmYKK0NlbGxTUFUgYmFja2VuZCAgICAgbGx2bS9saWIvVGFyZ2V0L0NlbGxTUFUvUkVBRE1FLnR4dAorR29vZ2xlIFRlc3QgICAgICAgICBsbHZtL3V0aWxzL3VuaXR0ZXN0L2dvb2dsZXRlc3QKK09wZW5CU0QgcmVnZXggICAgICAgbGx2bS9saWIvU3VwcG9ydC97cmVnKiwgQ09QWVJJR0hULnJlZ2V4fQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05vdGljZXMgZm9yIGZpbGUocyk6CisvYmluL21pbmlnemlwCisvbGliL2xpYnVuei5hCisvbGliL2xpYnotaG9zdC5zbworL2xpYi9saWJ6LmEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorCisgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKworICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworICBKZWFuLWxvdXAgR2FpbGx5ICAgICAgICBNYXJrIEFkbGVyCisgIGpsb3VwQGd6aXAub3JnICAgICAgICAgIG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RpY2VzIGZvciBmaWxlKHMpOgorL2Jpbi9ta3NuYXBzaG90LmFybQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb3B5cmlnaHQgKGMpIDE5OTQtMjAwNiBTdW4gTWljcm9zeXN0ZW1zIEluYy4KK0FsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCistIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKK3RoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKy0gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworLSBOZWl0aGVyIHRoZSBuYW1lIG9mIFN1biBNaWNyb3N5c3RlbXMgb3IgdGhlIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycyBtYXkKK2JlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKK3NwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKK0lTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKK0NPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCitQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlIGNvdmVyZWQgYnkgdGhlIGFib3ZlIGxpY2Vuc2UgYWJvdmUgaGFzIGJlZW4KK21vZGlmaWVkIHNpZ25pZmljYW50bHkgYnkgR29vZ2xlIEluYy4KK0NvcHlyaWdodCAyMDA2LTIwMDggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RpY2VzIGZvciBmaWxlKHMpOgorL2xpYi9saWJwbmcuYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgY29weSBvZiB0aGUgbGlicG5nIG5vdGljZXMgaXMgcHJvdmlkZWQgZm9yIHlvdXIgY29udmVuaWVuY2UuICBJbiBjYXNlIG9mCithbnkgZGlzY3JlcGFuY3kgYmV0d2VlbiB0aGlzIGNvcHkgYW5kIHRoZSBub3RpY2VzIGluIHRoZSBmaWxlIHBuZy5oIHRoYXQgaXMKK2luY2x1ZGVkIGluIHRoZSBsaWJwbmcgZGlzdHJpYnV0aW9uLCB0aGUgbGF0dGVyIHNoYWxsIHByZXZhaWwuCisKK0NPUFlSSUdIVCBOT1RJQ0UsIERJU0NMQUlNRVIsIGFuZCBMSUNFTlNFOgorCitJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCit0aGlzIHNlbnRlbmNlLgorCitUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIGxpYnBuZyBsaWNlbnNlLgorCitsaWJwbmcgdmVyc2lvbnMgMS4yLjYsIEF1Z3VzdCAxNSwgMjAwNCwgdGhyb3VnaCAxLjIuNDYsIEp1bHkgOSwgMjAxMSwgYXJlCitDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYtMjAwOSBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKK2Rpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjIuNQord2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWwgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKKworICAgQ29zbWluIFRydXRhCisKK2xpYnBuZyB2ZXJzaW9ucyAxLjAuNywgSnVseSAxLCAyMDAwLCB0aHJvdWdoIDEuMi41IC0gT2N0b2JlciAzLCAyMDAyLCBhcmUKK0NvcHlyaWdodCAoYykgMjAwMC0yMDAyIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQorZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMC42Cit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKKworICAgU2ltb24tUGllcnJlIENhZGlldXgKKyAgIEVyaWMgUy4gUmF5bW9uZAorICAgR2lsbGVzIFZvbGxhbnQKKworYW5kIHdpdGggdGhlIGZvbGxvd2luZyBhZGRpdGlvbnMgdG8gdGhlIGRpc2NsYWltZXI6CisKKyAgIFRoZXJlIGlzIG5vIHdhcnJhbnR5IGFnYWluc3QgaW50ZXJmZXJlbmNlIHdpdGggeW91ciBlbmpveW1lbnQgb2YgdGhlCisgICBsaWJyYXJ5IG9yIGFnYWluc3QgaW5mcmluZ2VtZW50LiAgVGhlcmUgaXMgbm8gd2FycmFudHkgdGhhdCBvdXIKKyAgIGVmZm9ydHMgb3IgdGhlIGxpYnJhcnkgd2lsbCBmdWxmaWxsIGFueSBvZiB5b3VyIHBhcnRpY3VsYXIgcHVycG9zZXMKKyAgIG9yIG5lZWRzLiAgVGhpcyBsaWJyYXJ5IGlzIHByb3ZpZGVkIHdpdGggYWxsIGZhdWx0cywgYW5kIHRoZSBlbnRpcmUKKyAgIHJpc2sgb2Ygc2F0aXNmYWN0b3J5IHF1YWxpdHksIHBlcmZvcm1hbmNlLCBhY2N1cmFjeSwgYW5kIGVmZm9ydCBpcyB3aXRoCisgICB0aGUgdXNlci4KKworbGlicG5nIHZlcnNpb25zIDAuOTcsIEphbnVhcnkgMTk5OCwgdGhyb3VnaCAxLjAuNiwgTWFyY2ggMjAsIDIwMDAsIGFyZQorQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQorZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTAuOTYsCit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnM6CisKKyAgIFRvbSBMYW5lCisgICBHbGVubiBSYW5kZXJzLVBlaHJzb24KKyAgIFdpbGxlbSB2YW4gU2NoYWlrCisKK2xpYnBuZyB2ZXJzaW9ucyAwLjg5LCBKdW5lIDE5OTYsIHRocm91Z2ggMC45NiwgTWF5IDE5OTcsIGFyZQorQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyCitEaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMC44OCwKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9yczoKKworICAgSm9obiBCb3dsZXIKKyAgIEtldmluIEJyYWNleQorICAgU2FtIEJ1c2hlbGwKKyAgIE1hZ251cyBIb2xtZ3JlbgorICAgR3JlZyBSb2Vsb2ZzCisgICBUb20gVGFubmVyCisKK2xpYnBuZyB2ZXJzaW9ucyAwLjUsIE1heSAxOTk1LCB0aHJvdWdoIDAuODgsIEphbnVhcnkgMTk5NiwgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYgR3V5IEVyaWMgU2NoYWxuYXQsIEdyb3VwIDQyLCBJbmMuCisKK0ZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UsICJDb250cmlidXRpbmcgQXV0aG9ycyIKK2lzIGRlZmluZWQgYXMgdGhlIGZvbGxvd2luZyBzZXQgb2YgaW5kaXZpZHVhbHM6CisKKyAgIEFuZHJlYXMgRGlsZ2VyCisgICBEYXZlIE1hcnRpbmRhbGUKKyAgIEd1eSBFcmljIFNjaGFsbmF0CisgICBQYXVsIFNjaG1pZHQKKyAgIFRpbSBXZWduZXIKKworVGhlIFBORyBSZWZlcmVuY2UgTGlicmFyeSBpcyBzdXBwbGllZCAiQVMgSVMiLiAgVGhlIENvbnRyaWJ1dGluZyBBdXRob3JzCithbmQgR3JvdXAgNDIsIEluYy4gZGlzY2xhaW0gYWxsIHdhcnJhbnRpZXMsIGV4cHJlc3NlZCBvciBpbXBsaWVkLAoraW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgb2YKK2ZpdG5lc3MgZm9yIGFueSBwdXJwb3NlLiAgVGhlIENvbnRyaWJ1dGluZyBBdXRob3JzIGFuZCBHcm91cCA0MiwgSW5jLgorYXNzdW1lIG5vIGxpYWJpbGl0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LAorb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCB3aGljaCBtYXkgcmVzdWx0IGZyb20gdGhlIHVzZSBvZiB0aGUgUE5HCitSZWZlcmVuY2UgTGlicmFyeSwgZXZlbiBpZiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc291cmNlIGNvZGUsIG9yIHBvcnRpb25zIGhlcmVvZiwgZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0IGZlZSwgc3ViamVjdAordG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKzEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb3VyY2UgY29kZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZC4KKworMi4gQWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2ggYW5kIG11c3Qgbm90CisgICBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc291cmNlLgorCiszLiBUaGlzIENvcHlyaWdodCBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkKKyAgIHNvdXJjZSBvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmlidXRpb24uCisKK1RoZSBDb250cmlidXRpbmcgQXV0aG9ycyBhbmQgR3JvdXAgNDIsIEluYy4gc3BlY2lmaWNhbGx5IHBlcm1pdCwgd2l0aG91dAorZmVlLCBhbmQgZW5jb3VyYWdlIHRoZSB1c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBhcyBhIGNvbXBvbmVudCB0bworc3VwcG9ydGluZyB0aGUgUE5HIGZpbGUgZm9ybWF0IGluIGNvbW1lcmNpYWwgcHJvZHVjdHMuICBJZiB5b3UgdXNlIHRoaXMKK3NvdXJjZSBjb2RlIGluIGEgcHJvZHVjdCwgYWNrbm93bGVkZ21lbnQgaXMgbm90IHJlcXVpcmVkIGJ1dCB3b3VsZCBiZQorYXBwcmVjaWF0ZWQuCisKKworQSAicG5nX2dldF9jb3B5cmlnaHQiIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgZm9yIGNvbnZlbmllbnQgdXNlIGluICJhYm91dCIKK2JveGVzIGFuZCB0aGUgbGlrZToKKworICAgcHJpbnRmKCIlcyIscG5nX2dldF9jb3B5cmlnaHQoTlVMTCkpOworCitBbHNvLCB0aGUgUE5HIGxvZ28gKGluIFBORyBmb3JtYXQsIG9mIGNvdXJzZSkgaXMgc3VwcGxpZWQgaW4gdGhlCitmaWxlcyAicG5nYmFyLnBuZyIgYW5kICJwbmdiYXIuanBnICg4OHgzMSkgYW5kICJwbmdub3cucG5nIiAoOTh4MzEpLgorCitMaWJwbmcgaXMgT1NJIENlcnRpZmllZCBPcGVuIFNvdXJjZSBTb2Z0d2FyZS4gIE9TSSBDZXJ0aWZpZWQgT3BlbiBTb3VyY2UgaXMgYQorY2VydGlmaWNhdGlvbiBtYXJrIG9mIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLgorCitHbGVubiBSYW5kZXJzLVBlaHJzb24KK2dsZW5ucnAgYXQgdXNlcnMuc291cmNlZm9yZ2UubmV0CitKdWx5IDksIDIwMTEKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RpY2VzIGZvciBmaWxlKHMpOgorL2ZyYW1ld29yay9hbnRsci1ydW50aW1lLmphcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbVGhlICJCU0QgbGljZW5zZSJdCitDb3B5cmlnaHQgKGMpIDIwMSBUZXJlbmNlIFBhcnIKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCisgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKK05PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05vdGljZXMgZm9yIGZpbGUocyk6CisvZnJhbWV3b3JrL2p1bml0LmphcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb21tb24gUHVibGljIExpY2Vuc2UgLSB2IDEuMAorCisKK1RIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDT01NT04gUFVCTElDIExJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgorCisKKzEuIERFRklOSVRJT05TCisKKyJDb250cmlidXRpb24iIG1lYW5zOgorCithKSBpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6CitpKQkgY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kCitpaSkJIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKK3doZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgUHJvZ3JhbS4KKworIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisKKyJMaWNlbnNlZCBQYXRlbnRzICIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2Ugb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworCisiUHJvZ3JhbSIgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMgZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50LgorCisKKyJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLgorCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCithKQlTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4KK2IpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBhbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KK2MpCVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCitkKQlFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorMy4gUkVRVUlSRU1FTlRTCisKK0EgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDoKKworYSkJaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorYikJaXRzIGxpY2Vuc2UgYWdyZWVtZW50OgoraSkJZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsKK2lpKSBlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsKK2lpaSkJc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdCBDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kCitpdikJc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KK1doZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlIGNvZGUgZm9ybToKKworYSkJaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kCitiKQlhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4KKworQ29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLgorCisKK0VhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLgorCisKKzQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OCisKK0NvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCJDb21tZXJjaWFsIENvbnRyaWJ1dG9yIikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBDb250cmlidXRvciAoIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIikgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMb3NzZXMiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZCBhbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKKworRm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZSBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZSBvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuCisKKworNS4gTk8gV0FSUkFOVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisKKzcuIEdFTkVSQUwKKworSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKKworSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhIENvbnRyaWJ1dG9yIHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgYnkgdGhhdCBDb250cmlidXRvciB0byBzdWNoIFJlY2lwaWVudCB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiBJbiBhZGRpdGlvbiwgaWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworCitBbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4KKworCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMgY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50IFN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBJQk0gaXMgdGhlIGluaXRpYWwgQWdyZWVtZW50IFN0ZXdhcmQuIElCTSBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0byBzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLgorCisKK1RoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzIGl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy9mcmFtZXdvcmsvYW50LWdsb2IuamFyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworICoKKyAqICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisgKgorICogICAxLiBEZWZpbml0aW9ucy4KKyAqCisgKiAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgKiAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorICoKKyAqICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAqICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorICoKKyAqICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICogICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgKiAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgKiAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICogICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICogICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAqICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKyAqCisgKiAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAqICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKyAqCisgKiAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICogICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgKiAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgKgorICogICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICogICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgKiAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAqICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorICoKKyAqICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAqICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICogICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAqICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKyAqCisgKiAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAqICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICogICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgKiAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgKiAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICogICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgKiAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisgKgorICogICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICogICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgKiAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICogICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgKiAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICogICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAqICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICogICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICogICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICogICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICogICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAqICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAqICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisgKgorICogICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICogICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAqICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisgKgorICogICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAqICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICogICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICogICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAqICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgKiAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisgKgorICogICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAqICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICogICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICogICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAqICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgKiAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgKiAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgKiAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAqICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAqICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAqICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICogICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICogICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgKiAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICogICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisgKgorICogICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICogICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAqICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICogICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKyAqCisgKiAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAqICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorICoKKyAqICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgKiAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgKiAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICogICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICogICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorICoKKyAqICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgKiAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgKiAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAqICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICogICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgKiAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICogICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICogICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgKiAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgKiAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAqICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAqICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgKiAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICogICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgKiAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAqICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKyAqCisgKiAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICogICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgKiAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAqICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgKiAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICogICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorICoKKyAqICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICogICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAqICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAqICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgKiAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAqICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAqICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorICoKKyAqICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICogICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgKiAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICogICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKyAqCisgKiAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICogICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgKiAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAqICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAqICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICogICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAqICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgKiAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKyAqCisgKiAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICogICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAqICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAqICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAqICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICogICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAqICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICogICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgKiAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgKiAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAqICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorICoKKyAqICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICogICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICogICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICogICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICogICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICogICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICogICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgKiAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICogICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgKiAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorICoKKyAqICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisgKgorICogICBBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmsuCisgKgorICogICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICogICAgICBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyAiW10iCisgKiAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgKiAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgKiAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQorICogICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgKiAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICogICAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCisgKgorICogICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKyAqCisgKiAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitXM0OuIFNPRlRXQVJFIE5PVElDRSBBTkQgTElDRU5TRQoraHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorCitUaGlzIHdvcmsgKGFuZCBpbmNsdWRlZCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiBzdWNoIGFzIFJFQURNRXMsIG9yIG90aGVyCityZWxhdGVkIGl0ZW1zKSBpcyBiZWluZyBwcm92aWRlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgdW5kZXIgdGhlIGZvbGxvd2luZworbGljZW5zZS4gQnkgb2J0YWluaW5nLCB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzIHdvcmssIHlvdSAodGhlIGxpY2Vuc2VlKSBhZ3JlZQordGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZAorY29uZGl0aW9ucy4KKworUGVybWlzc2lvbiB0byBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uLAord2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBvciByb3lhbHR5IGlzCitoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG9uIEFMTCBjb3BpZXMgb2YgdGhlCitzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9uczoKKworICAxLiBUaGUgZnVsbCB0ZXh0IG9mIHRoaXMgTk9USUNFIGluIGEgbG9jYXRpb24gdmlld2FibGUgdG8gdXNlcnMgb2YgdGhlCisgICAgIHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSB3b3JrLiAKKyAgMi4gQW55IHByZS1leGlzdGluZyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgZGlzY2xhaW1lcnMsIG5vdGljZXMsIG9yIHRlcm1zCisgICAgIGFuZCBjb25kaXRpb25zLiBJZiBub25lIGV4aXN0LCB0aGUgVzNDIFNvZnR3YXJlIFNob3J0IE5vdGljZSBzaG91bGQgYmUKKyAgICAgaW5jbHVkZWQgKGh5cGVydGV4dCBpcyBwcmVmZXJyZWQsIHRleHQgaXMgcGVybWl0dGVkKSB3aXRoaW4gdGhlIGJvZHkKKyAgICAgb2YgYW55IHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSBjb2RlLgorICAzLiBOb3RpY2Ugb2YgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgZmlsZXMsIGluY2x1ZGluZyB0aGUgZGF0ZQorICAgICBjaGFuZ2VzIHdlcmUgbWFkZS4gKFdlIHJlY29tbWVuZCB5b3UgcHJvdmlkZSBVUklzIHRvIHRoZSBsb2NhdGlvbiBmcm9tCisgICAgIHdoaWNoIHRoZSBjb2RlIGlzIGRlcml2ZWQuKQorICAgICAKK1RISVMgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04gSVMgUFJPVklERUQgIkFTIElTLCIgQU5EIENPUFlSSUdIVCBIT0xERVJTIE1BS0UKK05PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPLCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQKK1RIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZCitQQVRFTlRTLCBDT1BZUklHSFRTLCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUy4KKworQ09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIEFOWSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04uCisKK1RoZSBuYW1lIGFuZCB0cmFkZW1hcmtzIG9mIGNvcHlyaWdodCBob2xkZXJzIG1heSBOT1QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KK1RpdGxlIHRvIGNvcHlyaWdodCBpbiB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHdpbGwgYXQKK2FsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQgaG9sZGVycy4KKworX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK1RoaXMgZm9ybXVsYXRpb24gb2YgVzNDJ3Mgbm90aWNlIGFuZCBsaWNlbnNlIGJlY2FtZSBhY3RpdmUgb24gRGVjZW1iZXIgMzEgMjAwMi4KK1RoaXMgdmVyc2lvbiByZW1vdmVzIHRoZSBjb3B5cmlnaHQgb3duZXJzaGlwIG5vdGljZSBzdWNoIHRoYXQgdGhpcyBsaWNlbnNlIGNhbgorYmUgdXNlZCB3aXRoIG1hdGVyaWFscyBvdGhlciB0aGFuIHRob3NlIG93bmVkIGJ5IHRoZSBXM0MsIHJlZmxlY3RzIHRoYXQgRVJDSU0KK2lzIG5vdyBhIGhvc3Qgb2YgdGhlIFczQywgaW5jbHVkZXMgcmVmZXJlbmNlcyB0byB0aGlzIHNwZWNpZmljIGRhdGVkIHZlcnNpb24gb2YKK3RoZSBsaWNlbnNlLCBhbmQgcmVtb3ZlcyB0aGUgYW1iaWd1b3VzIGdyYW50IG9mICJ1c2UiLiBPdGhlcndpc2UsIHRoaXMgdmVyc2lvbgoraXMgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHZlcnNpb24gYW5kIGlzIHdyaXR0ZW4gc28gYXMgdG8gcHJlc2VydmUgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24ncyBhc3Nlc3NtZW50IG9mIEdQTCBjb21wYXRpYmlsaXR5IGFuZCBPU0kncyBjZXJ0aWZpY2F0aW9uCit1bmRlciB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbi4gUGxlYXNlIHNlZSBvdXIgQ29weXJpZ2h0IEZBUSBmb3IgY29tbW9uCitxdWVzdGlvbnMgYWJvdXQgdXNpbmcgbWF0ZXJpYWxzIGZyb20gb3VyIHNpdGUsIGluY2x1ZGluZyBzcGVjaWZpYyB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgZm9yIHBhY2thZ2VzIGxpa2UgbGlid3d3LCBBbWF5YSwgYW5kIEppZ3Nhdy4gT3RoZXIgcXVlc3Rpb25zIGFib3V0Cit0aGlzIG5vdGljZSBjYW4gYmUgZGlyZWN0ZWQgdG8gc2l0ZS1wb2xpY3lAdzMub3JnLgorIAorSm9zZXBoIFJlYWdsZSA8c2l0ZS1wb2xpY3lAdzMub3JnPiAKKworVGhpcyBsaWNlbnNlIGNhbWUgZnJvbTogaHR0cDovL3d3dy5tZWdnaW5zb24uY29tL1NBWC9jb3B5aW5nLmh0bWwKKyAgSG93ZXZlciBwbGVhc2Ugbm90ZSBmdXR1cmUgdmVyc2lvbnMgb2YgU0FYIG1heSBiZSBjb3ZlcmVkIAorICB1bmRlciBodHRwOi8vc2F4cHJvamVjdC5vcmcvP3NlbGVjdGVkPXBkCisKK1NBWDIgaXMgRnJlZSEKKworSSBoZXJlYnkgYWJhbmRvbiBhbnkgcHJvcGVydHkgcmlnaHRzIHRvIFNBWCAyLjAgKHRoZSBTaW1wbGUgQVBJIGZvcgorWE1MKSwgYW5kIHJlbGVhc2UgYWxsIG9mIHRoZSBTQVggMi4wIHNvdXJjZSBjb2RlLCBjb21waWxlZCBjb2RlLCBhbmQKK2RvY3VtZW50YXRpb24gY29udGFpbmVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGludG8gdGhlIFB1YmxpYyBEb21haW4uCitTQVggY29tZXMgd2l0aCBOTyBXQVJSQU5UWSBvciBndWFyYW50ZWUgb2YgZml0bmVzcyBmb3IgYW55CitwdXJwb3NlLgorCitEYXZpZCBNZWdnaW5zb24sIGRhdmlkQG1lZ2dpbnNvbi5jb20KKzIwMDAtMDUtMDUKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RpY2VzIGZvciBmaWxlKHMpOgorL2xpYi9saWJjbGFuZy5zbworL2xpYi9saWJjbGFuZ0FuYWx5c2lzLmEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitMTFZNIFJlbGVhc2UgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKK09wZW4gU291cmNlIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OgorCisgICAgTExWTSBUZWFtCisKKyAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KKworICAgIGh0dHA6Ly9sbHZtLm9yZworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQKKyAgICAgIFVyYmFuYS1DaGFtcGFpZ24sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bworICAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKKyAgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQorU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIExMVk0gc29mdHdhcmUgY29udGFpbnMgY29kZSB3cml0dGVuIGJ5IHRoaXJkIHBhcnRpZXMuICBTdWNoIHNvZnR3YXJlIHdpbGwKK2hhdmUgaXRzIG93biBpbmRpdmlkdWFsIExJQ0VOU0UuVFhUIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBhcHBlYXJzLgorVGhpcyBmaWxlIHdpbGwgZGVzY3JpYmUgdGhlIGNvcHlyaWdodHMsIGxpY2Vuc2UsIGFuZCByZXN0cmljdGlvbnMgd2hpY2ggYXBwbHkKK3RvIHRoYXQgY29kZS4KKworVGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgaW4gdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UgTGljZW5zZQorYXBwbGllcyB0byBhbGwgY29kZSBpbiB0aGUgTExWTSBEaXN0cmlidXRpb24sIGFuZCBub3RoaW5nIGluIGFueSBvZiB0aGUKK290aGVyIGxpY2Vuc2VzIGdpdmVzIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtIG9yIHRoZQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKK1NvZnR3YXJlLgorCitUaGUgZm9sbG93aW5nIHBpZWNlcyBvZiBzb2Z0d2FyZSBoYXZlIGFkZGl0aW9uYWwgb3IgYWx0ZXJuYXRlIGNvcHlyaWdodHMsCitsaWNlbnNlcywgYW5kL29yIHJlc3RyaWN0aW9uczoKKworUHJvZ3JhbSAgICAgICAgICAgICBEaXJlY3RvcnkKKy0tLS0tLS0gICAgICAgICAgICAgLS0tLS0tLS0tCis8bm9uZSB5ZXQ+CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy9mcmFtZXdvcmsvZ3VhdmFsaWIuamFyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy9jb3JlLWxhbWJkYS1zdHVicy5qYXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpCisKK1ZlcnNpb24gMiwgSnVuZSAxOTkxCisKK0NvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UKK2RvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1ByZWFtYmxlCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZQorYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8KK2d1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlCitzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8KK21vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZQorYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMKK2NvdmVyZWQgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4gIE91cgorR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvCitkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLAordGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlCit0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91CitjYW4gZG8gdGhlc2UgdGhpbmdzLgorCitUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkIGFueW9uZSB0byBkZW55Cit5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVzZSByZXN0cmljdGlvbnMKK3RyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCitzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlciBncmF0aXMgb3IgZm9yCithIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiAgWW91IG11c3QKK21ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdAorc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKK1dlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQgKDIpCitvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUKK2FuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCitBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0CitldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgc29mdHdhcmUuICBJZiB0aGUKK3NvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvCitrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZAorYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsIGF1dGhvcnMnIHJlcHV0YXRpb25zLgorCitGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLiAgV2UKK3dpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZSBwcm9ncmFtIHdpbGwKK2luZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZSBwcm9ncmFtIHByb3ByaWV0YXJ5LgorVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yCitldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKK1RoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbgorZm9sbG93LgorCitURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucyBhIG5vdGljZQorcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCit0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0KK29yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIiBtZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55CitkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZQorUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yCit0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQKK3dpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzCisieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QgY292ZXJlZCBieQordGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YgcnVubmluZyB0aGUgUHJvZ3JhbSBpcworbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cworY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkKK3J1bm5pbmcgdGhlIFByb2dyYW0pLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKzEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncyBzb3VyY2UgY29kZSBhcworeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kCithcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kCitkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UKK2FuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZQorUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5CithdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cworZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucworb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mCit0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcKKyAgICB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbiB3aG9sZSBvcgorICAgIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlCisgICAgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuIHJ1biwKKyAgICB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2ggaW50ZXJhY3RpdmUgdXNlIGluIHRoZQorICAgIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4KKyAgICBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvcgorICAgIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUKKyAgICB0aGUgcHJvZ3JhbSB1bmRlciB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkKKyAgICBvZiB0aGlzIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0IGRvZXMKKyAgICBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSBpcworICAgIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmIGlkZW50aWZpYWJsZQorc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLCBhbmQgY2FuIGJlIHJlYXNvbmFibHkKK2NvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluIHRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQKK2l0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZQord29ya3MuICBCdXQgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYQord29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMKK29mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZQord2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdCB5b3VyCityaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZQorcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbgordGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0gd2l0aCB0aGUKK1Byb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IKK2Rpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMKK0xpY2Vuc2UuCisKKzMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LCB1bmRlcgorU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kCisyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZQorICAgIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUKKyAgICBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8KKyAgICBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyIGNvc3Qgb2YgcGh5c2ljYWxseQorICAgIHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEKKyAgICBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlciB0bworICAgIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seQorICAgIGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4KKyAgICBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aAorICAgIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nCittb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsCit0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZQorZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbgorb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUKK2Rpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyCitzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikKK29mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UKK2NvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMgZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2gKK3RoaXJkIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCis0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gZXhjZXB0IGFzCitleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwKK3N1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZQoreW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yCityaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28KK2xvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKzUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuCitIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QKK2FjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yCithbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvCitkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCis2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLAordGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0bworY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KK1lvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZQorcmlnaHRzIGdyYW50ZWQgaGVyZWluLiAgWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5Cit0aGlyZCBwYXJ0aWVzIHRvIHRoaXMgTGljZW5zZS4KKworNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwgY29uZGl0aW9ucworYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0Citjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZQorY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeQorc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQKK29ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuCitGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbgorb2YgdGhlIFByb2dyYW0gYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2gKK3lvdSwgdGhlbiB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CitwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHkgYW5kCit0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvcgorb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55IHN1Y2ggY2xhaW1zOyB0aGlzCitzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZQorZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueQorcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlCitkaXN0cmlidXRlZCB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0bworZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0CitjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0byBiZSBhCitjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKzguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4KK2NvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUgb3JpZ2luYWwKK2NvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdAorZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQKK2Rpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbgorc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkKK29mIHRoaXMgTGljZW5zZS4KKworOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluCitzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zCitvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIKK3ZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mCit0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCitJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5CitjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcword2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yCitwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCit3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLgorT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YKK2FsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZgorc29mdHdhcmUgZ2VuZXJhbGx5LgorCitOTyBXQVJSQU5UWQorCisxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SCitUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UKK1NUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRQorUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwKK0lOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORAorUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLAorWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKzEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTAorQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRQorUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKK0dFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IKK0lOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEKK0JFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBCitGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSCitPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKK0VORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCitIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdCBwb3NzaWJsZQordXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdCBmcmVlIHNvZnR3YXJlCit3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKK1RvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0IHRvIGF0dGFjaAordGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uCitvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYQorcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICBPbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4KKworICAgIENvcHlyaWdodCAoQykgPHllYXI+IDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgICAgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICAgIFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQKK3N0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yIEdub21vdmlzaW9uIGNvbWVzCisgICAgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlICdzaG93IHcnLiAgVGhpcyBpcyBmcmVlCisgICAgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsKKyAgICB0eXBlICdzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzICdzaG93IHcnIGFuZCAnc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkgYmUKK2NhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiAnc2hvdyB3JyBhbmQgJ3Nob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIgc2Nob29sLAoraWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4gIEhlcmUKK2lzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgICAgJ0dub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgICBzaWduYXR1cmUgb2YgVHkgQ29vbiwgMSBBcHJpbCAxOTg5CisKKyAgICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCisKKworIkNMQVNTUEFUSCIgRVhDRVBUSU9OIFRPIFRIRSBHUEwKKworQ2VydGFpbiBzb3VyY2UgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgT3JhY2xlIEFtZXJpY2EgYW5kL29yIGl0cyBhZmZpbGlhdGVzIGFyZQorc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNsYXJpZmljYXRpb24gYW5kIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIGJ1dAorb25seSB3aGVyZSBPcmFjbGUgaGFzIGV4cHJlc3NseSBpbmNsdWRlZCBpbiB0aGUgcGFydGljdWxhciBzb3VyY2UgZmlsZSdzIGhlYWRlcgordGhlIHdvcmRzICJPcmFjbGUgZGVzaWduYXRlcyB0aGlzIHBhcnRpY3VsYXIgZmlsZSBhcyBzdWJqZWN0IHRvIHRoZSAiQ2xhc3NwYXRoIgorZXhjZXB0aW9uIGFzIHByb3ZpZGVkIGJ5IE9yYWNsZSBpbiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgYWNjb21wYW5pZWQgdGhpcyBjb2RlLiIKKworICAgIExpbmtpbmcgdGhpcyBsaWJyYXJ5IHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBvdGhlciBtb2R1bGVzIGlzIG1ha2luZworICAgIGEgY29tYmluZWQgd29yayBiYXNlZCBvbiB0aGlzIGxpYnJhcnkuICBUaHVzLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY292ZXIgdGhlIHdob2xlIGNvbWJpbmF0aW9uLgorCisgICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoaXMgbGlicmFyeSBnaXZlIHlvdQorICAgIHBlcm1pc3Npb24gdG8gbGluayB0aGlzIGxpYnJhcnkgd2l0aCBpbmRlcGVuZGVudCBtb2R1bGVzIHRvIHByb2R1Y2UgYW4KKyAgICBleGVjdXRhYmxlLCByZWdhcmRsZXNzIG9mIHRoZSBsaWNlbnNlIHRlcm1zIG9mIHRoZXNlIGluZGVwZW5kZW50IG1vZHVsZXMsCisgICAgYW5kIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHVuZGVyIHRlcm1zIG9mIHlvdXIKKyAgICBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCwgZm9yIGVhY2ggbGlua2VkIGluZGVwZW5kZW50IG1vZHVsZSwKKyAgICB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2Ugb2YgdGhhdCBtb2R1bGUuICBBbiBpbmRlcGVuZGVudAorICAgIG1vZHVsZSBpcyBhIG1vZHVsZSB3aGljaCBpcyBub3QgZGVyaXZlZCBmcm9tIG9yIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gIElmCisgICAgeW91IG1vZGlmeSB0aGlzIGxpYnJhcnksIHlvdSBtYXkgZXh0ZW5kIHRoaXMgZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbiBvZgorICAgIHRoZSBsaWJyYXJ5LCBidXQgeW91IGFyZSBub3Qgb2JsaWdhdGVkIHRvIGRvIHNvLiAgSWYgeW91IGRvIG5vdCB3aXNoIHRvIGRvCisgICAgc28sIGRlbGV0ZSB0aGlzIGV4Y2VwdGlvbiBzdGF0ZW1lbnQgZnJvbSB5b3VyIHZlcnNpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTm90aWNlcyBmb3IgZmlsZShzKToKKy9saWIvZDguamFyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgZmlsZSBsaXN0cyBhbGwgbGljZW5zZXMgZm9yIGNvZGUgZGlzdHJpYnV0ZWQuCitBbGwgbm9uLWxpYnJhcnkgY29kZSBoYXMgdGhlIGZvbGxvd2luZyAzLUNsYXVzZSBCU0QgbGljZW5zZS4KKworCitDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBSOCBwcm9qZWN0IGF1dGhvcnMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCitTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitTdW1tYXJ5IG9mIGRpc3RyaWJ1dGVkIGxpYnJhcmllczoKKworLSBhcnRpZmFjdDogY29tLmdvb2dsZS5ndWF2YTpndWF2YTorCisgIG5hbWU6IEd1YXZhIEdvb2dsZSBDb3JlIExpYnJhcmllcyBmb3IgSmF2YQorICBjb3B5cmlnaHRIb2xkZXI6IFRoZSBHdWF2YSBBdXRob3JzCisgIGxpY2Vuc2U6IFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgbGljZW5zZVVybDogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLnR4dAorLSBhcnRpZmFjdDogY29tLmdvb2dsZS5jb2RlLmdzb246Z3NvbjorCisgIG5hbWU6IEdzb24KKyAgbGljZW5zZTogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICBsaWNlbnNlVXJsOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0CisgIHVybDogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9nc29uCistIGFydGlmYWN0OiBpdC51bmltaS5kc2k6ZmFzdHV0aWw6KworICBuYW1lOiBmYXN0dXRpbAorICBsaWNlbnNlOiBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgbGljZW5zZVVybDogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLmh0bWwKKyAgdXJsOiBodHRwOi8vZmFzdXRpbC5kaS51bmltaS5pdC8KKy0gYXJ0aWZhY3Q6IG5ldC5zZi5qb3B0LXNpbXBsZTpqb3B0LXNpbXBsZTorCisgIG5hbWU6IEpPcHQgU2ltcGxlCisgIGxpY2Vuc2U6IFRoZSBNSVQgTGljZW5zZQorICBsaWNlbnNlVXJsOiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAorICB1cmw6IGh0dHA6Ly9waG9sc2VyLmdpdGh1Yi5jb20vam9wdC1zaW1wbGUKKy0gYXJ0aWZhY3Q6IG9yZy5vdzIuYXNtOmFzbS1jb21tb25zOisKKyAgbmFtZTogQVNNIENvbW1vbnMKKyAgY29weXJpZ2h0SG9sZGVyOiBJTlJJQSwgRnJhbmNlIFRlbGVjb20KKyAgbGljZW5zZTogQVNNIGxpY2Vuc2UKKyAgbGljZW5zZVVybDogaHR0cDovL2FzbS5vdzIub3JnL2xpY2Vuc2UuaHRtbAorICB1cmw6IGh0dHA6Ly9hc20ub3cyLm9yZy9pbmRleC5odG1sCistIGFydGlmYWN0OiBvcmcub3cyLmFzbTphc20tdHJlZTorCisgIG5hbWU6IEFTTSBUcmVlCisgIGNvcHlyaWdodEhvbGRlcjogSU5SSUEsIEZyYW5jZSBUZWxlY29tCisgIGxpY2Vuc2U6IEFTTSBsaWNlbnNlCisgIGxpY2Vuc2VVcmw6IGh0dHA6Ly9hc20ub3cyLm9yZy9saWNlbnNlLmh0bWwKKyAgdXJsOiBodHRwOi8vYXNtLm93Mi5vcmcvaW5kZXguaHRtbAorLSBhcnRpZmFjdDogb3JnLm93Mi5hc206YXNtLXV0aWw6KworICBuYW1lOiBBU00gVXRpbAorICBjb3B5cmlnaHRIb2xkZXI6IElOUklBLCBGcmFuY2UgVGVsZWNvbQorICBsaWNlbnNlOiBBU00gbGljZW5zZQorICBsaWNlbnNlVXJsOiBodHRwOi8vYXNtLm93Mi5vcmcvbGljZW5zZS5odG1sCisgIHVybDogaHR0cDovL2FzbS5vdzIub3JnL2luZGV4Lmh0bWwKKy0gYXJ0aWZhY3Q6IG9yZy5vdzIuYXNtOmFzbS1hbmFseXNpczorCisgIG5hbWU6IEFTTSBVdGlsCisgIGNvcHlyaWdodEhvbGRlcjogSU5SSUEsIEZyYW5jZSBUZWxlY29tCisgIGxpY2Vuc2U6IEFTTSBsaWNlbnNlCisgIGxpY2Vuc2VVcmw6IGh0dHA6Ly9hc20ub3cyLm9yZy9saWNlbnNlLmh0bWwKKyAgdXJsOiBodHRwOi8vYXNtLm93Mi5vcmcvaW5kZXguaHRtbAorLSBhcnRpZmFjdDogb3JnLm93Mi5hc206YXNtOisKKyAgbmFtZTogQVNNIENvcmUKKyAgY29weXJpZ2h0SG9sZGVyOiBJTlJJQSwgRnJhbmNlIFRlbGVjb20KKyAgbGljZW5zZTogQVNNIGxpY2Vuc2UKKyAgbGljZW5zZVVybDogaHR0cDovL2FzbS5vdzIub3JnL2xpY2Vuc2UuaHRtbAorICB1cmw6IGh0dHA6Ly9hc20ub3cyLm9yZy9pbmRleC5odG1sCistIGFydGlmYWN0OiBvcmcuamV0YnJhaW5zLmtvdGxpbjprb3RsaW4tc3RkbGliOisKKyAgbmFtZTogb3JnLmpldGJyYWlucy5rb3RsaW46a290bGluLXN0ZGxpYgorICBjb3B5cmlnaHRIb2xkZXI6IEpldEJyYWlucyBzLnIuby4KKyAgbGljZW5zZTogVGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICBsaWNlbnNlVXJsOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0CisgIHVybDogaHR0cHM6Ly9rb3RsaW5sYW5nLm9yZy8KKy0gYXJ0aWZhY3Q6IG9yZy5qZXRicmFpbnMua290bGluOmtvdGxpbi1zdGRsaWItY29tbW9uOisKKyAgbmFtZTogb3JnLmpldGJyYWlucy5rb3RsaW46a290bGluLXN0ZGxpYgorICBjb3B5cmlnaHRIb2xkZXI6IEpldEJyYWlucyBzLnIuby4KKyAgbGljZW5zZTogVGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICBsaWNlbnNlVXJsOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0CisgIHVybDogaHR0cHM6Ly9rb3RsaW5sYW5nLm9yZy8KKy0gYXJ0aWZhY3Q6IG9yZy5qZXRicmFpbnMua290bGlueDprb3RsaW54LW1ldGFkYXRhLWp2bTorCisgIG5hbWU6IG9yZy5qZXRicmFpbnMua290bGlueDprb3RsaW54LW1ldGFkYXRhLWp2bQorICBjb3B5cmlnaHRIb2xkZXI6IEpldEJyYWlucyBzLnIuby4KKyAgbGljZW5zZTogVGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICBsaWNlbnNlVXJsOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0CisgIHVybDogaHR0cHM6Ly9rb3RsaW5sYW5nLm9yZy8KKy0gYXJ0aWZhY3Q6IG9yZy5qZXRicmFpbnM6YW5ub3RhdGlvbnM6KworICBuYW1lOiBJbnRlbGxpSiBJREVBIEFubm90YXRpb25zCisgIGNvcHlyaWdodEhvbGRlcjogSmV0QnJhaW5zIHMuci5vLgorICBsaWNlbnNlOiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgIGxpY2Vuc2VVcmw6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC50eHQKKyAgdXJsOiBodHRwOi8vd3d3LmpldGJyYWlucy5vcmcKKworCitMaWNlbnNlcyBkZXRhaWxzOgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworQ29weXJpZ2h0IChjKSAyMDAwLTIwMTEgSU5SSUEsIEZyYW5jZSBUZWxlY29tCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworQXBhY2hlIENvbW1vbnMgQ29tcHJlc3MKK0NvcHlyaWdodCAyMDAyLTIwMTYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisKK1RoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYXQKK1RoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuCisKK1RoZSBmaWxlcyBpbiB0aGUgcGFja2FnZSBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuYXJjaGl2ZXJzLnNldmVuegord2VyZSBkZXJpdmVkIGZyb20gdGhlIExaTUEgU0RLLCB2ZXJzaW9uIDkuMjAgKEMvIGFuZCBDUFAvN3ppcC8pLAord2hpY2ggaGFzIGJlZW4gcGxhY2VkIGluIHRoZSBwdWJsaWMgZG9tYWluOgorCisiTFpNQSBTREsgaXMgcGxhY2VkIGluIHRoZSBwdWJsaWMgZG9tYWluLiIgKGh0dHA6Ly93d3cuNy16aXAub3JnL3Nkay5odG1sKQorCisKKyBUaGUgTUlUIExpY2Vuc2UKKworIENvcHlyaWdodCAoYykgMjAwNC0yMDE2IFBhdWwgUi4gSG9sc2VyLCBKci4KKworIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIENvcHlyaWdodCAoYykgMjAwNS0yMDE0LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0UgKElDVSA1OCBhbmQgbGF0ZXIpCisKK0NvcHlyaWdodCDCqSAxOTkxLTIwMjAgVW5pY29kZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRlcm1zIG9mIFVzZSBpbiBodHRwczovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhlIFVuaWNvZGUgZGF0YSBmaWxlcyBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorKHRoZSAiRGF0YSBGaWxlcyIpIG9yIFVuaWNvZGUgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyh0aGUgIlNvZnR3YXJlIikgdG8gZGVhbCBpbiB0aGUgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZQord2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKK2NvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZC9vciBzZWxsIGNvcGllcyBvZgordGhlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBEYXRhIEZpbGVzCitvciBTb2Z0d2FyZSBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBwcm92aWRlZCB0aGF0IGVpdGhlcgorKGEpIHRoaXMgY29weXJpZ2h0IGFuZCBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgd2l0aCBhbGwgY29waWVzCitvZiB0aGUgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZSwgb3IKKyhiKSB0aGlzIGNvcHlyaWdodCBhbmQgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFzc29jaWF0ZWQKK0RvY3VtZW50YXRpb24uCisKK1RIRSBEQVRBIEZJTEVTIEFORCBTT0ZUV0FSRSBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRgorQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBIT0xERVJTIElOQ0xVREVEIElOIFRISVMKK05PVElDRSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKK0RBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKK1RPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKK1BFUkZPUk1BTkNFIE9GIFRIRSBEQVRBIEZJTEVTIE9SIFNPRlRXQVJFLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBhIGNvcHlyaWdodCBob2xkZXIKK3NoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLAordXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoZXNlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUgd2l0aG91dCBwcmlvcgord3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcmQtUGFydHkgU29mdHdhcmUgTGljZW5zZXMKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoaXJkLXBhcnR5IHNvZnR3YXJlIG5vdGljZXMgYW5kL29yIGFkZGl0aW9uYWwKK3Rlcm1zIGZvciBsaWNlbnNlZCB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSBjb21wb25lbnRzIGluY2x1ZGVkIHdpdGhpbiBJQ1UKK2xpYnJhcmllcy4KKworMS4gSUNVIExpY2Vuc2UgLSBJQ1UgMS44LjEgdG8gSUNVIDU3LjEKKworQ09QWVJJR0hUIEFORCBQRVJNSVNTSU9OIE5PVElDRQorCitDb3B5cmlnaHQgKGMpIDE5OTUtMjAxNiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMKK3RvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YKK3RoZSBTb2Z0d2FyZSBhbmQgdGhhdCBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UCitPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCitIT0xERVJTIElOQ0xVREVEIElOIFRISVMgTk9USUNFIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBPUiBBTlkKK1NQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCitSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRgorQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTgorQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyCitzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlCitvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uCitvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KKworQWxsIHRyYWRlbWFya3MgYW5kIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBtZW50aW9uZWQgaGVyZWluIGFyZSB0aGUKK3Byb3BlcnR5IG9mIHRoZWlyIHJlc3BlY3RpdmUgb3duZXJzLgorCisyLiBDaGluZXNlL0phcGFuZXNlIFdvcmQgQnJlYWsgRGljdGlvbmFyeSBEYXRhIChjamRpY3QudHh0KQorCisgIyAgICAgVGhlIEdvb2dsZSBDaHJvbWUgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IEdvb2dsZSBpcyBsaWNlbnNlZCB1bmRlcgorICMgdGhlIEJTRCBsaWNlbnNlLiBPdGhlciBzb2Z0d2FyZSBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpcworICMgcHJvdmlkZWQgdW5kZXIgb3RoZXIgbGljZW5zZXMsIGFzIHNldCBmb3J0aCBiZWxvdy4KKyAjCisgIyAgVGhlIEJTRCBMaWNlbnNlCisgIyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocAorICMgIENvcHlyaWdodCAoQykgMjAwNi0yMDA4LCBHb29nbGUgSW5jLgorICMKKyAjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICMKKyAjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICMKKyAjICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgIyB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICMgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgIyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aAorICMgdGhlIGRpc3RyaWJ1dGlvbi4KKyAjICBOZWl0aGVyIHRoZSBuYW1lIG9mICBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgIworICMKKyAjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAjIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgIyBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgIyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICMgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAjCisgIworICMgIFRoZSB3b3JkIGxpc3QgaW4gY2pkaWN0LnR4dCBhcmUgZ2VuZXJhdGVkIGJ5IGNvbWJpbmluZyB0aHJlZSB3b3JkIGxpc3RzCisgIyBsaXN0ZWQgYmVsb3cgd2l0aCBmdXJ0aGVyIHByb2Nlc3NpbmcgZm9yIGNvbXBvdW5kIHdvcmQgYnJlYWtpbmcuIFRoZQorICMgZnJlcXVlbmN5IGlzIGdlbmVyYXRlZCB3aXRoIGFuIGl0ZXJhdGl2ZSB0cmFpbmluZyBhZ2FpbnN0IEdvb2dsZSB3ZWIKKyAjIGNvcnBvcmEuCisgIworICMgICogTGlidGFiZSAoQ2hpbmVzZSkKKyAjICAgIC0gaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC8/Z3JvdXBfaWQ9MTUxOQorICMgICAgLSBJdHMgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcmUgc2hvd24gYmVsb3cuCisgIworICMgICogSVBBRElDIChKYXBhbmVzZSkKKyAjICAgIC0gaHR0cDovL2NoYXNlbi5haXN0LW5hcmEuYWMuanAvY2hhc2VuL2Rpc3RyaWJ1dGlvbi5odG1sCisgIyAgICAtIEl0cyBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGFyZSBzaG93biBiZWxvdy4KKyAjCisgIyAgLS0tLS0tLS0tQ09QWUlORy5saWJ0YWJlIC0tLS0gQkVHSU4tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMKKyAjICAvKgorICMgICAqIENvcHlyaWdodCAoYykgMTk5OSBUYUJFIFByb2plY3QuCisgIyAgICogQ29weXJpZ2h0IChjKSAxOTk5IFBhaS1Ic2lhbmcgSHNpYW8uCisgIyAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAjICAgKgorICMgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICMgICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICMgICAqIGFyZSBtZXQ6CisgIyAgICoKKyAjICAgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgIyAgICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIyAgICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICMgICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgIyAgICogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgIyAgICogICBkaXN0cmlidXRpb24uCisgIyAgICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBUYUJFIFByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAjICAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICMgICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICMgICAqCisgIyAgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICMgICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgIyAgICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAjICAgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICMgICAqIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgIyAgICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAjICAgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAjICAgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAjICAgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgIyAgICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICMgICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAjICAgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgIyAgICovCisgIworICMgIC8qCisgIyAgICogQ29weXJpZ2h0IChjKSAxOTk5IENvbXB1dGVyIFN5c3RlbXMgYW5kIENvbW11bmljYXRpb24gTGFiLAorICMgICAqICAgICAgICAgICAgICAgICAgICBJbnN0aXR1dGUgb2YgSW5mb3JtYXRpb24gU2NpZW5jZSwgQWNhZGVtaWEKKyAjICAgICAgICogICAgICAgICAgICAgICAgICAgIFNpbmljYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAjICAgKgorICMgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICMgICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICMgICAqIGFyZSBtZXQ6CisgIyAgICoKKyAjICAgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgIyAgICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIyAgICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICMgICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgIyAgICogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgIyAgICogICBkaXN0cmlidXRpb24uCisgIyAgICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDb21wdXRlciBTeXN0ZW1zIGFuZCBDb21tdW5pY2F0aW9uIExhYgorICMgICAqICAgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IKKyAjICAgKiAgIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICMgICAqICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICMgICAqCisgIyAgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICMgICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgIyAgICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAjICAgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICMgICAqIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgIyAgICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAjICAgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAjICAgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAjICAgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgIyAgICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICMgICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAjICAgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgIyAgICovCisgIworICMgIENvcHlyaWdodCAxOTk2IENoaWgtSGFvIFRzYWkgQCBCZWNrbWFuIEluc3RpdHV0ZSwKKyAjICAgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcworICMgIGMtdHNhaTRAdWl1Yy5lZHUgIGh0dHA6Ly9jYXNwZXIuYmVja21hbi51aXVjLmVkdS9+Yy10c2FpNAorICMKKyAjICAtLS0tLS0tLS0tLS0tLS1DT1BZSU5HLmxpYnRhYmUtLS0tLUVORC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIworICMKKyAjICAtLS0tLS0tLS0tLS0tLS1DT1BZSU5HLmlwYWRpYy0tLS0tQkVHSU4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIworICMgIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzIE5hcmEgSW5zdGl0dXRlIG9mIFNjaWVuY2UKKyAjICBhbmQgVGVjaG5vbG9neS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgIworICMgIFVzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgc29mdHdhcmUgaXMgcGVybWl0dGVkLgorICMgIEFueSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIHdoZXRoZXIgaW4gaXRzIG9yaWdpbmFsIGZvcm0gb3IgbW9kaWZpZWQsCisgIyAgbXVzdCBpbmNsdWRlIGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKKyAjICBwYXJhZ3JhcGhzLgorICMKKyAjICBOYXJhIEluc3RpdHV0ZSBvZiBTY2llbmNlIGFuZCBUZWNobm9sb2d5IChOQUlTVCksCisgIyAgdGhlIGNvcHlyaWdodCBob2xkZXJzLCBkaXNjbGFpbXMgYWxsIHdhcnJhbnRpZXMgd2l0aCByZWdhcmQgdG8gdGhpcworICMgIHNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kCisgIyAgZml0bmVzcywgaW4gbm8gZXZlbnQgc2hhbGwgTkFJU1QgYmUgbGlhYmxlIGZvcgorICMgIGFueSBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgYW55IGRhbWFnZXMKKyAjICB3aGF0c29ldmVyIHJlc3VsdGluZyBmcm9tIGxvc3Mgb2YgdXNlLCBkYXRhIG9yIHByb2ZpdHMsIHdoZXRoZXIgaW4gYW4KKyAjICBhY3Rpb24gb2YgY29udHJhY3QsIG5lZ2xpZ2VuY2Ugb3Igb3RoZXIgdG9ydHVvdXMgYWN0aW9uLCBhcmlzaW5nIG91dAorICMgIG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgdXNlIG9yIHBlcmZvcm1hbmNlIG9mIHRoaXMgc29mdHdhcmUuCisgIworICMgIEEgbGFyZ2UgcG9ydGlvbiBvZiB0aGUgZGljdGlvbmFyeSBlbnRyaWVzCisgIyAgb3JpZ2luYXRlIGZyb20gSUNPVCBGcmVlIFNvZnR3YXJlLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGZvciBJQ09UCisgIyAgRnJlZSBTb2Z0d2FyZSBhcHBsaWVzIHRvIHRoZSBjdXJyZW50IGRpY3Rpb25hcnkgYXMgd2VsbC4KKyAjCisgIyAgRWFjaCBVc2VyIG1heSBhbHNvIGZyZWVseSBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCB3aGV0aGVyIGluIGl0cworICMgIG9yaWdpbmFsIGZvcm0gb3IgbW9kaWZpZWQsIHRvIGFueSB0aGlyZCBwYXJ0eSBvciBwYXJ0aWVzLCBQUk9WSURFRAorICMgIHRoYXQgdGhlIHByb3Zpc2lvbnMgb2YgU2VjdGlvbiAzICgiTk8gV0FSUkFOVFkiKSB3aWxsIEFMV0FZUyBhcHBlYXIKKyAjICBvbiwgb3IgYmUgYXR0YWNoZWQgdG8sIHRoZSBQcm9ncmFtLCB3aGljaCBpcyBkaXN0cmlidXRlZCBzdWJzdGFudGlhbGx5CisgIyAgaW4gdGhlIHNhbWUgZm9ybSBhcyBzZXQgb3V0IGhlcmVpbiBhbmQgdGhhdCBzdWNoIGludGVuZGVkCisgIyAgZGlzdHJpYnV0aW9uLCBpZiBhY3R1YWxseSBtYWRlLCB3aWxsIG5laXRoZXIgdmlvbGF0ZSBvciBvdGhlcndpc2UKKyAjICBjb250cmF2ZW5lIGFueSBvZiB0aGUgbGF3cyBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIGNvdW50cmllcyBoYXZpbmcKKyAjICBqdXJpc2RpY3Rpb24gb3ZlciB0aGUgVXNlciBvciB0aGUgaW50ZW5kZWQgZGlzdHJpYnV0aW9uIGl0c2VsZi4KKyAjCisgIyAgTk8gV0FSUkFOVFkKKyAjCisgIyAgVGhlIHByb2dyYW0gd2FzIHByb2R1Y2VkIG9uIGFuIGV4cGVyaW1lbnRhbCBiYXNpcyBpbiB0aGUgY291cnNlIG9mIHRoZQorICMgIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCBjb25kdWN0ZWQgZHVyaW5nIHRoZSBwcm9qZWN0IGFuZCBpcyBwcm92aWRlZAorICMgIHRvIHVzZXJzIGFzIHNvIHByb2R1Y2VkIG9uIGFuIGV4cGVyaW1lbnRhbCBiYXNpcy4gIEFjY29yZGluZ2x5LCB0aGUKKyAjICBwcm9ncmFtIGlzIHByb3ZpZGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IHdoYXRzb2V2ZXIsIHdoZXRoZXIgZXhwcmVzcywKKyAjICBpbXBsaWVkLCBzdGF0dXRvcnkgb3Igb3RoZXJ3aXNlLiAgVGhlIHRlcm0gIndhcnJhbnR5IiB1c2VkIGhlcmVpbgorICMgIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIGFueSB3YXJyYW50eSBvZiB0aGUgcXVhbGl0eSwKKyAjICBwZXJmb3JtYW5jZSwgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBvZgorICMgIHRoZSBwcm9ncmFtIGFuZCB0aGUgbm9uZXhpc3RlbmNlIG9mIGFueSBpbmZyaW5nZW1lbnQgb3IgdmlvbGF0aW9uIG9mCisgIyAgYW55IHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eS4KKyAjCisgIyAgRWFjaCB1c2VyIG9mIHRoZSBwcm9ncmFtIHdpbGwgYWdyZWUgYW5kIHVuZGVyc3RhbmQsIGFuZCBiZSBkZWVtZWQgdG8KKyAjICBoYXZlIGFncmVlZCBhbmQgdW5kZXJzdG9vZCwgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGZvcgorICMgIHRoZSBwcm9ncmFtIGFuZCwgYWNjb3JkaW5nbHksIHRoZSBlbnRpcmUgcmlzayBhcmlzaW5nIGZyb20gb3IKKyAjICBvdGhlcndpc2UgY29ubmVjdGVkIHdpdGggdGhlIHByb2dyYW0gaXMgYXNzdW1lZCBieSB0aGUgdXNlci4KKyAjCisgIyAgVGhlcmVmb3JlLCBuZWl0aGVyIElDT1QsIHRoZSBjb3B5cmlnaHQgaG9sZGVyLCBvciBhbnkgb3RoZXIKKyAjICBvcmdhbml6YXRpb24gdGhhdCBwYXJ0aWNpcGF0ZWQgaW4gb3Igd2FzIG90aGVyd2lzZSByZWxhdGVkIHRvIHRoZQorICMgIGRldmVsb3BtZW50IG9mIHRoZSBwcm9ncmFtIGFuZCB0aGVpciByZXNwZWN0aXZlIG9mZmljaWFscywgZGlyZWN0b3JzLAorICMgIG9mZmljZXJzIGFuZCBvdGhlciBlbXBsb3llZXMgc2hhbGwgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBhbmQgYWxsCisgIyAgZGFtYWdlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwKKyAjICBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBhcmlzaW5nIG91dCBvZiBvciBvdGhlcndpc2UgaW4gY29ubmVjdGlvbgorICMgIHdpdGggdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZSBwcm9ncmFtIG9yIGFueSBwcm9kdWN0LCBtYXRlcmlhbAorICMgIG9yIHJlc3VsdCBwcm9kdWNlZCBvciBvdGhlcndpc2Ugb2J0YWluZWQgYnkgdXNpbmcgdGhlIHByb2dyYW0sCisgIyAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgaGF2ZSBiZWVuIGFkdmlzZWQgb2YsIG9yIG90aGVyd2lzZSBoYWQKKyAjICBrbm93bGVkZ2Ugb2YsIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMgYXQgYW55IHRpbWUgZHVyaW5nIHRoZQorICMgIHByb2plY3Qgb3IgdGhlcmVhZnRlci4gIEVhY2ggdXNlciB3aWxsIGJlIGRlZW1lZCB0byBoYXZlIGFncmVlZCB0byB0aGUKKyAjICBmb3JlZ29pbmcgYnkgaGlzIG9yIGhlciBjb21tZW5jZW1lbnQgb2YgdXNlIG9mIHRoZSBwcm9ncmFtLiAgVGhlIHRlcm0KKyAjICAidXNlIiBhcyB1c2VkIGhlcmVpbiBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCB0aGUgdXNlLAorICMgIG1vZGlmaWNhdGlvbiwgY29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBwcm9ncmFtIGFuZCB0aGUKKyAjICBwcm9kdWN0aW9uIG9mIHNlY29uZGFyeSBwcm9kdWN0cyBmcm9tIHRoZSBwcm9ncmFtLgorICMKKyAjICBJbiB0aGUgY2FzZSB3aGVyZSB0aGUgcHJvZ3JhbSwgd2hldGhlciBpbiBpdHMgb3JpZ2luYWwgZm9ybSBvcgorICMgIG1vZGlmaWVkLCB3YXMgZGlzdHJpYnV0ZWQgb3IgZGVsaXZlcmVkIHRvIG9yIHJlY2VpdmVkIGJ5IGEgdXNlciBmcm9tCisgIyAgYW55IHBlcnNvbiwgb3JnYW5pemF0aW9uIG9yIGVudGl0eSBvdGhlciB0aGFuIElDT1QsIHVubGVzcyBpdCBtYWtlcyBvcgorICMgIGdyYW50cyBpbmRlcGVuZGVudGx5IG9mIElDT1QgYW55IHNwZWNpZmljIHdhcnJhbnR5IHRvIHRoZSB1c2VyIGluCisgIyAgd3JpdGluZywgc3VjaCBwZXJzb24sIG9yZ2FuaXphdGlvbiBvciBlbnRpdHksIHdpbGwgYWxzbyBiZSBleGVtcHRlZAorICMgIGZyb20gYW5kIG5vdCBiZSBoZWxkIGxpYWJsZSB0byB0aGUgdXNlciBmb3IgYW55IHN1Y2ggZGFtYWdlcyBhcyBub3RlZAorICMgIGFib3ZlIGFzIGZhciBhcyB0aGUgcHJvZ3JhbSBpcyBjb25jZXJuZWQuCisgIworICMgIC0tLS0tLS0tLS0tLS0tLUNPUFlJTkcuaXBhZGljLS0tLS1FTkQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzMuIExhbyBXb3JkIEJyZWFrIERpY3Rpb25hcnkgRGF0YSAobGFvZGljdC50eHQpCisKKyAjICBDb3B5cmlnaHQgKGMpIDIwMTMgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbgorICMgIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgIworICMgUHJvamVjdDogaHR0cHM6Ly9naXRodWIuY29tL3ZlZXI2Ni9sYW8tZGljdGlvbmFyeQorICMgRGljdGlvbmFyeTogaHR0cHM6Ly9naXRodWIuY29tL3ZlZXI2Ni9sYW8tZGljdGlvbmFyeS9ibG9iL21hc3Rlci9MYW8tRGljdGlvbmFyeS50eHQKKyAjIExpY2Vuc2U6IGh0dHBzOi8vZ2l0aHViLmNvbS92ZWVyNjYvbGFvLWRpY3Rpb25hcnkvYmxvYi9tYXN0ZXIvTGFvLURpY3Rpb25hcnktTElDRU5TRS50eHQKKyAjICAgICAgICAgICAgICAoY29waWVkIGJlbG93KQorICMKKyAjICBUaGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBhYm92ZSBkaWN0aW9uYXJ5LCB3aXRoIHNsaWdodAorICMgIG1vZGlmaWNhdGlvbnMuCisgIyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgIENvcHlyaWdodCAoQykgMjAxMyBCcmlhbiBFdWdlbmUgV2lsc29uLCBSb2JlcnQgTWFydGluIENhbXBiZWxsLgorICMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIworICMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICMgIG1vZGlmaWNhdGlvbiwKKyAjICBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgIworICMKKyAjIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICMgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiBSZWRpc3RyaWJ1dGlvbnMgaW4KKyAjICBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mCisgIyAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICMgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgIworICMKKyAjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAjIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAjIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAjIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAjIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAjICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis0LiBCdXJtZXNlIFdvcmQgQnJlYWsgRGljdGlvbmFyeSBEYXRhIChidXJtZXNlZGljdC50eHQpCisKKyAjICBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbgorICMgIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgIworICMgIFRoaXMgbGlzdCBpcyBwYXJ0IG9mIGEgcHJvamVjdCBob3N0ZWQgYXQ6CisgIyAgICBnaXRodWIuY29tL2thbnlhd3RlY2gvbXlhbm1hci1rYXJlbi13b3JkLWxpc3RzCisgIworICMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyAgQ29weXJpZ2h0IChjKSAyMDEzLCBMZVJveSBCZW5qYW1pbiBTaGFyb24KKyAjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICMKKyAjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAjICBhcmUgbWV0OiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgIyAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAjICBkaXNjbGFpbWVyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZQorICMgIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgIyAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgIyAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICMKKyAjICAgIE5laXRoZXIgdGhlIG5hbWUgTXlhbm1hciBLYXJlbiBXb3JkIExpc3RzLCBub3IgdGhlIG5hbWVzIG9mIGl0cworICMgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgIyAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgIworICMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICMgIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgIyAgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAjICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICMgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUworICMgIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgIyAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgIyAgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICMgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgIyAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgIyAgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgIyAgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgIyAgU1VDSCBEQU1BR0UuCisgIyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworNS4gVGltZSBab25lIERhdGFiYXNlCisKKyAgSUNVIHVzZXMgdGhlIHB1YmxpYyBkb21haW4gZGF0YSBhbmQgY29kZSBkZXJpdmVkIGZyb20gVGltZSBab25lCitEYXRhYmFzZSBmb3IgaXRzIHRpbWUgem9uZSBzdXBwb3J0LiBUaGUgb3duZXJzaGlwIG9mIHRoZSBUWiBkYXRhYmFzZQoraXMgZXhwbGFpbmVkIGluIEJDUCAxNzU6IFByb2NlZHVyZSBmb3IgTWFpbnRhaW5pbmcgdGhlIFRpbWUgWm9uZQorRGF0YWJhc2Ugc2VjdGlvbiA3LgorCisgIyA3LiAgRGF0YWJhc2UgT3duZXJzaGlwCisgIworICMgICAgVGhlIFRaIGRhdGFiYXNlIGl0c2VsZiBpcyBub3QgYW4gSUVURiBDb250cmlidXRpb24gb3IgYW4gSUVURgorICMgICAgZG9jdW1lbnQuICBSYXRoZXIgaXQgaXMgYSBwcmUtZXhpc3RpbmcgYW5kIHJlZ3VsYXJseSB1cGRhdGVkIHdvcmsKKyAjICAgIHRoYXQgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIGFuZCBpcyBpbnRlbmRlZCB0byByZW1haW4gaW4gdGhlCisgIyAgICBwdWJsaWMgZG9tYWluLiAgVGhlcmVmb3JlLCBCQ1BzIDc4IFtSRkM1Mzc4XSBhbmQgNzkgW1JGQzM5NzldIGRvCisgIyAgICBub3QgYXBwbHkgdG8gdGhlIFRaIERhdGFiYXNlIG9yIGNvbnRyaWJ1dGlvbnMgdGhhdCBpbmRpdmlkdWFscyBtYWtlCisgIyAgICB0byBpdC4gIFNob3VsZCBhbnkgY2xhaW1zIGJlIG1hZGUgYW5kIHN1YnN0YW50aWF0ZWQgYWdhaW5zdCB0aGUgVFoKKyAjICAgIERhdGFiYXNlLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgaXMgcHJvdmlkaW5nIHRoZSBJQU5BCisgIyAgICBDb25zaWRlcmF0aW9ucyBkZWZpbmVkIGluIHRoaXMgUkZDLCB1bmRlciB0aGUgbWVtb3JhbmR1bSBvZgorICMgICAgdW5kZXJzdGFuZGluZyB3aXRoIHRoZSBJRVRGLCBjdXJyZW50bHkgSUNBTk4sIG1heSBhY3QgaW4gYWNjb3JkYW5jZQorICMgICAgd2l0aCBhbGwgY29tcGV0ZW50IGNvdXJ0IG9yZGVycy4gIE5vIG93bmVyc2hpcCBjbGFpbXMgd2lsbCBiZSBtYWRlCisgIyAgICBieSBJQ0FOTiBvciB0aGUgSUVURiBUcnVzdCBvbiB0aGUgZGF0YWJhc2Ugb3IgdGhlIGNvZGUuICBBbnkgcGVyc29uCisgIyAgICBtYWtpbmcgYSBjb250cmlidXRpb24gdG8gdGhlIGRhdGFiYXNlIG9yIGNvZGUgd2FpdmVzIGFsbCByaWdodHMgdG8KKyAjICAgIGZ1dHVyZSBjbGFpbXMgaW4gdGhhdCBjb250cmlidXRpb24gb3IgaW4gdGhlIFRaIERhdGFiYXNlLgorCis2LiBHb29nbGUgZG91YmxlLWNvbnZlcnNpb24KKworQ29weXJpZ2h0IDIwMDYtMjAxMSwgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgpAQCAtNzA4NywxOTggKzIwNTM4LDY3OSBAQAogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vbGliNjQvbGliYnouc28KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29kZSBnZW5lcmF0ZWQgYnkgdGhlIFByb3RvY29sIEJ1ZmZlciBjb21waWxlciBpcyBvd25lZCBieSB0aGUgb3duZXIKK29mIHRoZSBpbnB1dCBmaWxlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIGl0LiAgVGhpcyBjb2RlIGlzIG5vdAorc3RhbmRhbG9uZSBhbmQgcmVxdWlyZXMgYSBzdXBwb3J0IGxpYnJhcnkgdG8gYmUgbGlua2VkIHdpdGggaXQuICBUaGlzCitzdXBwb3J0IGxpYnJhcnkgaXMgaXRzZWxmIGNvdmVyZWQgYnkgdGhlIGFib3ZlIGxpY2Vuc2UuCiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIwMDEgU2VwdGVtYmVyIDE1CiAKLVRoaXMgcHJvZ3JhbSwgImJ6aXAyIiwgdGhlIGFzc29jaWF0ZWQgbGlicmFyeSAibGliYnppcDIiLCBhbmQgYWxsCi1kb2N1bWVudGF0aW9uLCBhcmUgY29weXJpZ2h0IChDKSAxOTk2LTIwMTAgSnVsaWFuIFIgU2V3YXJkLiAgQWxsCi1yaWdodHMgcmVzZXJ2ZWQuCitUaGUgYXV0aG9yIGRpc2NsYWltcyBjb3B5cmlnaHQgdG8gdGhpcyBzb3VyY2UgY29kZS4gIEluIHBsYWNlIG9mCithIGxlZ2FsIG5vdGljZSwgaGVyZSBpcyBhIGJsZXNzaW5nOgorCisgICBNYXkgeW91IGRvIGdvb2QgYW5kIG5vdCBldmlsLgorICAgTWF5IHlvdSBmaW5kIGZvcmdpdmVuZXNzIGZvciB5b3Vyc2VsZiBhbmQgZm9yZ2l2ZSBvdGhlcnMuCisgICBNYXkgeW91IHNoYXJlIGZyZWVseSwgbmV2ZXIgdGFraW5nIG1vcmUgdGhhbiB5b3UgZ2l2ZS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgQ29weXJpZ2h0IChjKSAyMDA1LTIwMTksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworQ29weXJpZ2h0IDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi1hcmUgbWV0OgorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgogCi0xLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCitpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uCisgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKK2NvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCi0yLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IAotICAgbm90IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gIElmIHlvdSB1c2UgdGhpcyAKLSAgIHNvZnR3YXJlIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgCi0gICBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0zLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0Ci0gICBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2ZXJzaW9uIDEuMi4xMiwgTWFyY2ggMjd0aCwgMjAyMgogCi00LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgCi0gICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gCi0gICBwZXJtaXNzaW9uLgorQ29weXJpZ2h0IChDKSAxOTk1LTIwMjIgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUwotT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCi1ESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFCi1HT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi1JTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKLVdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi1TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1RoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCit3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCithcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgogCi1KdWxpYW4gU2V3YXJkLCBqc2V3YXJkQGJ6aXAub3JnCi1iemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC42IG9mIDYgU2VwdGVtYmVyIDIwMTAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAoraW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2xpYjY0L2xpYnBjcmUyLnNvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBDUkUgTElDRU5DRQotLS0tLS0tLS0tLS0tCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0JTRCBMaWNlbnNlCiAKLVBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4Ci1hbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorRm9yIFpzdGFuZGFyZCBzb2Z0d2FyZQogCi1SZWxlYXNlIDggb2YgUENSRSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlICJCU0QiIGxpY2VuY2UsIGFzCi1zcGVjaWZpZWQgYmVsb3cuIFRoZSBkb2N1bWVudGF0aW9uIGZvciBQQ1JFLCBzdXBwbGllZCBpbiB0aGUgImRvYyIKLWRpcmVjdG9yeSwgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgdGhlIHNvZnR3YXJlIGl0c2VsZi4KLQotVGhlIGJhc2ljIGxpYnJhcnkgZnVuY3Rpb25zIGFyZSB3cml0dGVuIGluIEMgYW5kIGFyZSBmcmVlc3RhbmRpbmcuIEFsc28KLWluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24gaXMgYSBzZXQgb2YgQysrIHdyYXBwZXIgZnVuY3Rpb25zLCBhbmQgYQotanVzdC1pbi10aW1lIGNvbXBpbGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3B0aW1pemUgcGF0dGVybiBtYXRjaGluZy4gVGhlc2UKLWFyZSBib3RoIG9wdGlvbmFsIGZlYXR1cmVzIHRoYXQgY2FuIGJlIG9taXR0ZWQgd2hlbiB0aGUgbGlicmFyeSBpcyBidWlsdC4KLQotCi1USEUgQkFTSUMgTElCUkFSWSBGVU5DVElPTlMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Xcml0dGVuIGJ5OiAgICAgICBQaGlsaXAgSGF6ZWwKLUVtYWlsIGxvY2FsIHBhcnQ6IHBoMTAKLUVtYWlsIGRvbWFpbjogICAgIGNhbS5hYy51awotCi1Vbml2ZXJzaXR5IG9mIENhbWJyaWRnZSBDb21wdXRpbmcgU2VydmljZSwKLUNhbWJyaWRnZSwgRW5nbGFuZC4KLQotQ29weXJpZ2h0IChjKSAxOTk3LTIwMTQgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLQotUENSRSBKVVNULUlOLVRJTUUgQ09NUElMQVRJT04gU1VQUE9SVAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Xcml0dGVuIGJ5OiAgICAgICBab2x0YW4gSGVyY3plZwotRW1haWwgbG9jYWwgcGFydDogaHptZXN0ZXIKLUVtYWluIGRvbWFpbjogICAgIGZyZWVtYWlsLmh1Ci0KLUNvcHlyaWdodChjKSAyMDEwLTIwMTQgWm9sdGFuIEhlcmN6ZWcKLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLQotU1RBQ0stTEVTUyBKVVNULUlOLVRJTUUgQ09NUElMRVIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdyaXR0ZW4gYnk6ICAgICAgIFpvbHRhbiBIZXJjemVnCi1FbWFpbCBsb2NhbCBwYXJ0OiBoem1lc3RlcgotRW1haW4gZG9tYWluOiAgICAgZnJlZW1haWwuaHUKLQotQ29weXJpZ2h0KGMpIDIwMDktMjAxNCBab2x0YW4gSGVyY3plZwotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotCi1USEUgQysrIFdSQVBQRVIgRlVOQ1RJT05TCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNvbnRyaWJ1dGVkIGJ5OiAgIEdvb2dsZSBJbmMuCi0KLUNvcHlyaWdodCAoYykgMjAwNy0yMDEyLCBHb29nbGUgSW5jLgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotCi1USEUgIkJTRCIgTElDRU5DRQotLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIG5vciB0aGUgbmFtZSBvZiBHb29nbGUKLSAgICAgIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGVpciBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvcgotICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCi0gICAgICB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLUFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLVNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi1BUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLUVuZAotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vbGliNjQvbGlidGlueWFsc2Euc28KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29weXJpZ2h0IDIwMTEsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBub3IgdGhlIG5hbWVzIG9mCi0gICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBgYEFTIElTJycgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi1BUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBCRSBMSUFCTEUKLUZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi1EQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLUNBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi1EQU1BR0UuCi0KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2xpYi9saWJsejQuc28KLS9saWI2NC9saWJsejQuc28KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTFo0IExpYnJhcnkKLUNvcHlyaWdodCAoYykgMjAxMS0yMDE2LCBZYW5uIENvbGxldAotQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0NvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAKLSogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCi0gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIAotKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKLSAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCi0gIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICogTmVpdGhlciB0aGUgbmFtZSBGYWNlYm9vaywgbm9yIE1ldGEsIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIAogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTcyOTEsMjI5ICsyMTIyMywzNDMgQEAKIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL3Vzci9zaGFyZS96b25laW5mby90emRhdGEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotV2l0aCBhIGZldyBleGNlcHRpb25zLCBhbGwgZmlsZXMgaW4gdGhlIHR6IGNvZGUgYW5kIGRhdGEgKGluY2x1ZGluZwotdGhpcyBvbmUpIGFyZSBpbiB0aGUgcHVibGljIGRvbWFpbi4gIFRoZSBleGNlcHRpb25zIGFyZSBkYXRlLmMsCi1uZXdzdHJmdGltZS4zLCBhbmQgc3RyZnRpbWUuYywgd2hpY2ggY29udGFpbiBtYXRlcmlhbCBkZXJpdmVkIGZyb20gQlNECi1hbmQgd2hpY2ggdXNlIHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLU5vdGljZXMgZm9yIGZpbGUocyk6Ci0vbGliNjQvbGliY3VybC1ob3N0LnNvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0UKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KIAotQ29weXJpZ2h0IChjKSAxOTk2IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBhbmQgbWFueQotY29udHJpYnV0b3JzLCBzZWUgdGhlIFRIQU5LUyBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCiAKLUFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCiAKLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlCi13aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKLW5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgogCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi1GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gSU4KLU5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAotREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCi1PVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRQotT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgogCi1FeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBhIGNvcHlyaWdodCBob2xkZXIgc2hhbGwgbm90Ci1iZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MKLWluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2ZyYW1ld29yay9ib3VuY3ljYXN0bGUuamFyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvcHlyaWdodCAoYykgMjAwMC0yMDE1IFRoZSBMZWdpb24gb2YgdGhlIEJvdW5jeSBDYXN0bGUgSW5jLiAoaHR0cDovL3d3dy5ib3VuY3ljYXN0bGUub3JnKQorICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KIAotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZAotYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sCi1pbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKLXN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KIAotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAotcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgogCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVAotTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOCi1OTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCi1XSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLVNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RpY2VzIGZvciBmaWxlKHMpOgotL2xpYi9saWJjcnlwdG8taG9zdC5zbwotL2xpYi9saWJzc2wtaG9zdC5zbwotL2xpYjY0L2xpYmNyeXB0by1ob3N0LnNvCi0vbGliNjQvbGlic3NsLWhvc3Quc28KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCiAKLSAgTElDRU5TRSBJU1NVRVMKLSAgPT09PT09PT09PT09PT0KKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCiAKLSAgVGhlIE9wZW5TU0wgdG9vbGtpdCBzdGF5cyB1bmRlciBhIGR1YWwgbGljZW5zZSwgaS5lLiBib3RoIHRoZSBjb25kaXRpb25zIG9mCi0gIHRoZSBPcGVuU1NMIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCBTU0xlYXkgbGljZW5zZSBhcHBseSB0byB0aGUgdG9vbGtpdC4KLSAgU2VlIGJlbG93IGZvciB0aGUgYWN0dWFsIGxpY2Vuc2UgdGV4dHMuIEFjdHVhbGx5IGJvdGggbGljZW5zZXMgYXJlIEJTRC1zdHlsZQotICBPcGVuIFNvdXJjZSBsaWNlbnNlcy4gSW4gY2FzZSBvZiBhbnkgbGljZW5zZSBpc3N1ZXMgcmVsYXRlZCB0byBPcGVuU1NMCi0gIHBsZWFzZSBjb250YWN0IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgogCi0gIE9wZW5TU0wgTGljZW5zZQotICAtLS0tLS0tLS0tLS0tLS0KKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCiAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0gKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0gKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0gKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0gKgotICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotICogICAgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotICoKLSAqLworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgogCi0gT3JpZ2luYWwgU1NMZWF5IExpY2Vuc2UKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CiAKLS8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSAqIAotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0gKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0gKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotICogCi0gKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0gKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKiAKLSAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0gKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0gKi8KKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgogCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90aWNlcyBmb3IgZmlsZShzKToKLS9saWI2NC9saWJicmlsbG8tc3RyZWFtLnNvCi0vbGliNjQvbGliYnJpbGxvLnNvCi0vbGliNjQvbGlibWluaWphaWwuc28KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIE9TIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCiAKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2FkYiBiL2FkYgppbmRleCBhZmE0Y2Q4Li45ODBlZDVmIDEwMDc1NQotLS0gYS9hZGIKKysrIGIvYWRiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwaS9hbm5vdGF0aW9ucy56aXAgYi9hcGkvYW5ub3RhdGlvbnMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTQ0ZWJiLi4wMDAwMDAwCi0tLSBhL2FwaS9hbm5vdGF0aW9ucy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcGkvYXBpLXZlcnNpb25zLnhtbCBiL2FwaS9hcGktdmVyc2lvbnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjAxMGJmLi4wMDAwMDAwCi0tLSBhL2FwaS9hcGktdmVyc2lvbnMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzg3MTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxhcGkgdmVyc2lvbj0iMiI+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvTWFuaWZlc3QiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvTWFuaWZlc3QkcGVybWlzc2lvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0NFUFRfSEFORE9WRVIiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNDRVNTX0NIRUNLSU5fUFJPUEVSVElFUyIvPgotCQk8ZmllbGQgbmFtZT0iQUNDRVNTX0NPQVJTRV9MT0NBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iQUNDRVNTX0ZJTkVfTE9DQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VTU19MT0NBVElPTl9FWFRSQV9DT01NQU5EUyIvPgotCQk8ZmllbGQgbmFtZT0iQUNDRVNTX01PQ0tfTE9DQVRJT04iIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0NFU1NfTkVUV09SS19TVEFURSIvPgotCQk8ZmllbGQgbmFtZT0iQUNDRVNTX05PVElGSUNBVElPTl9QT0xJQ1kiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNDRVNTX1NVUkZBQ0VfRkxJTkdFUiIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VTU19XSUZJX1NUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0NPVU5UX01BTkFHRVIiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBRERfU1lTVEVNX1NFUlZJQ0UiIHJlbW92ZWQ9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFERF9WT0lDRU1BSUwiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iQU5TV0VSX1BIT05FX0NBTExTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVEhFTlRJQ0FURV9BQ0NPVU5UUyIgc2luY2U9IjUiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVRURVJZX1NUQVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX0FDQ0VTU0lCSUxJVFlfU0VSVklDRSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX0FQUFdJREdFVCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkJJTkRfQVVUT0ZJTExfU0VSVklDRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX0NBUlJJRVJfTUVTU0FHSU5HX1NFUlZJQ0UiIHNpbmNlPSIyMiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkJJTkRfQ0FSUklFUl9TRVJWSUNFUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX0NIT09TRVJfVEFSR0VUX1NFUlZJQ0UiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQklORF9DT05ESVRJT05fUFJPVklERVJfU0VSVklDRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX0RFVklDRV9BRE1JTiIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkJJTkRfRFJFQU1fU0VSVklDRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX0lOQ0FMTF9TRVJWSUNFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkJJTkRfSU5QVVRfTUVUSE9EIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQklORF9NSURJX0RFVklDRV9TRVJWSUNFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkJJTkRfTkZDX1NFUlZJQ0UiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQklORF9OT1RJRklDQVRJT05fTElTVEVORVJfU0VSVklDRSIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX1BSSU5UX1NFUlZJQ0UiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQklORF9RVUlDS19TRVRUSU5HU19USUxFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkJJTkRfUkVNT1RFVklFV1MiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iQklORF9TQ1JFRU5JTkdfU0VSVklDRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX1RFTEVDT01fQ09OTkVDVElPTl9TRVJWSUNFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkJJTkRfVEVYVF9TRVJWSUNFIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkJJTkRfVFZfSU5QVVQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQklORF9WSVNVQUxfVk9JQ0VNQUlMX1NFUlZJQ0UiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQklORF9WT0lDRV9JTlRFUkFDVElPTiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX1ZQTl9TRVJWSUNFIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkJJTkRfVlJfTElTVEVORVJfU0VSVklDRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX1dBTExQQVBFUiIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkJMVUVUT09USCIvPgotCQk8ZmllbGQgbmFtZT0iQkxVRVRPT1RIX0FETUlOIi8+Ci0JCTxmaWVsZCBuYW1lPSJCTFVFVE9PVEhfUFJJVklMRUdFRCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCT0RZX1NFTlNPUlMiIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iQlJJQ0siIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJCUk9BRENBU1RfUEFDS0FHRV9SRU1PVkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCUk9BRENBU1RfU01TIiBzaW5jZT0iMiIvPgotCQk8ZmllbGQgbmFtZT0iQlJPQURDQVNUX1NUSUNLWSIvPgotCQk8ZmllbGQgbmFtZT0iQlJPQURDQVNUX1dBUF9QVVNIIiBzaW5jZT0iMiIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMTF9QSE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMTF9QUklWSUxFR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQU1FUkEiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUFRVUkVfQVVESU9fT1VUUFVUIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUFRVUkVfU0VDVVJFX1ZJREVPX09VVFBVVCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBUVVJFX1ZJREVPX09VVFBVVCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOR0VfQ09NUE9ORU5UX0VOQUJMRURfU1RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5HRV9DT05GSUdVUkFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOR0VfTkVUV09SS19TVEFURSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTkdFX1dJRklfTVVMVElDQVNUX1NUQVRFIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTkdFX1dJRklfU1RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNMRUFSX0FQUF9DQUNIRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0xFQVJfQVBQX1VTRVJfREFUQSIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfTE9DQVRJT05fVVBEQVRFUyIvPgotCQk8ZmllbGQgbmFtZT0iREVMRVRFX0NBQ0hFX0ZJTEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUxFVEVfUEFDS0FHRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkRFVklDRV9QT1dFUiIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkRJQUdOT1NUSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FCTEVfS0VZR1VBUkQiLz4KLQkJPGZpZWxkIG5hbWU9IkRVTVAiLz4KLQkJPGZpZWxkIG5hbWU9IkVYUEFORF9TVEFUVVNfQkFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJGQUNUT1JZX1RFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQVNITElHSFQiIHJlbW92ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JDRV9CQUNLIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRk9SRUdST1VORF9TRVJWSUNFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZPVEFfVVBEQVRFIiByZW1vdmVkPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHRVRfQUNDT1VOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9BQ0NPVU5UU19QUklWSUxFR0VEIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9QQUNLQUdFX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9UQVNLUyIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9UT1BfQUNUSVZJVFlfSU5GTyIgc2luY2U9IjE4IiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iR0xPQkFMX1NFQVJDSCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IkhBUkRXQVJFX1RFU1QiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTkpFQ1RfRVZFTlRTIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFMTF9MT0NBVElPTl9QUk9WSURFUiIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfUEFDS0FHRVMiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfU0hPUlRDVVQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFOVF9BUFBfRk9SRUdST1VORF9TRVJWSUNFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSTkFMX1NZU1RFTV9XSU5ET1ciIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUk5FVCIvPgotCQk8ZmllbGQgbmFtZT0iS0lMTF9CQUNLR1JPVU5EX1BST0NFU1NFUyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FUSU9OX0hBUkRXQVJFIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTkFHRV9BQ0NPVU5UUyIgc2luY2U9IjUiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5BR0VfQVBQX1RPS0VOUyIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTkFHRV9ET0NVTUVOVFMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTUFOQUdFX09XTl9DQUxMUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQVNURVJfQ0xFQVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX0NPTlRFTlRfQ09OVFJPTCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RJRllfQVVESU9fU0VUVElOR1MiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PRElGWV9QSE9ORV9TVEFURSIvPgotCQk8ZmllbGQgbmFtZT0iTU9VTlRfRk9STUFUX0ZJTEVTWVNURU1TIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iTU9VTlRfVU5NT1VOVF9GSUxFU1lTVEVNUyIvPgotCQk8ZmllbGQgbmFtZT0iTkZDIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iTkZDX1RSQU5TQUNUSU9OX0VWRU5UIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlBBQ0tBR0VfVVNBR0VfU1RBVFMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUEVSU0lTVEVOVF9BQ1RJVklUWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBST0NFU1NfT1VUR09JTkdfQ0FMTFMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQURfQ0FMRU5EQVIiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQURfQ0FMTF9MT0ciIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUkVBRF9DT05UQUNUUyIvPgotCQk8ZmllbGQgbmFtZT0iUkVBRF9FWFRFUk5BTF9TVE9SQUdFIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQURfRlJBTUVfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFEX0hJU1RPUllfQk9PS01BUktTIiBzaW5jZT0iNCIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQURfSU5QVVRfU1RBVEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFEX0xPR1MiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQURfT1dORVJfREFUQSIgcmVtb3ZlZD0iOSIvPgotCQk8ZmllbGQgbmFtZT0iUkVBRF9QSE9ORV9OVU1CRVJTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQURfUEhPTkVfU1RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQURfUFJPRklMRSIgc2luY2U9IjE0IiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUkVBRF9TTVMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQURfU09DSUFMX1NUUkVBTSIgc2luY2U9IjE1IiBkZXByZWNhdGVkPSIyMSIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQURfU1lOQ19TRVRUSU5HUyIvPgotCQk8ZmllbGQgbmFtZT0iUkVBRF9TWU5DX1NUQVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFEX1VTRVJfRElDVElPTkFSWSIgc2luY2U9IjE2IiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUkVBRF9WT0lDRU1BSUwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUkVCT09UIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNFSVZFX0JPT1RfQ09NUExFVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNFSVZFX01NUyIvPgotCQk8ZmllbGQgbmFtZT0iUkVDRUlWRV9TTVMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQ0VJVkVfV0FQX1BVU0giLz4KLQkJPGZpZWxkIG5hbWU9IlJFQ09SRF9BVURJTyIvPgotCQk8ZmllbGQgbmFtZT0iUkVPUkRFUl9UQVNLUyIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9DT01QQU5JT05fUlVOX0lOX0JBQ0tHUk9VTkQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9DT01QQU5JT05fVVNFX0RBVEFfSU5fQkFDS0dST1VORCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVFVRVNUX0RFTEVURV9QQUNLQUdFUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVFVRVNUX0lHTk9SRV9CQVRURVJZX09QVElNSVpBVElPTlMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9JTlNUQUxMX1BBQ0tBR0VTIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1RBUlRfUEFDS0FHRVMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5EX1JFU1BPTkRfVklBX01FU1NBR0UiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iU0VORF9TTVMiLz4KLQkJPGZpZWxkIG5hbWU9IlNFVF9BQ1RJVklUWV9XQVRDSEVSIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU0VUX0FMQVJNIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iU0VUX0FMV0FZU19GSU5JU0giLz4KLQkJPGZpZWxkIG5hbWU9IlNFVF9BTklNQVRJT05fU0NBTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFVF9ERUJVR19BUFAiLz4KLQkJPGZpZWxkIG5hbWU9IlNFVF9PUklFTlRBVElPTiIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNFVF9QT0lOVEVSX1NQRUVEIiBzaW5jZT0iMTMiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVRfUFJFRkVSUkVEX0FQUExJQ0FUSU9OUyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFVF9QUk9DRVNTX0ZPUkVHUk9VTkQiIHJlbW92ZWQ9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFVF9QUk9DRVNTX0xJTUlUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVRfVElNRSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNFVF9USU1FX1pPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFVF9XQUxMUEFQRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNFVF9XQUxMUEFQRVJfSElOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR05BTF9QRVJTSVNURU5UX1BST0NFU1NFUyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0JBUiIvPgotCQk8ZmllbGQgbmFtZT0iU1VCU0NSSUJFRF9GRUVEU19SRUFEIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU1VCU0NSSUJFRF9GRUVEU19XUklURSIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNZU1RFTV9BTEVSVF9XSU5ET1ciLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TTUlUX0lSIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSU5TVEFMTF9TSE9SVENVVCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVUERBVEVfREVWSUNFX1NUQVRTIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iVVNFX0JJT01FVFJJQyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VfQ1JFREVOVElBTFMiIHNpbmNlPSI1IiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVVNFX0ZJTkdFUlBSSU5UIiBzaW5jZT0iMjMiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VfU0lQIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iVklCUkFURSIvPgotCQk8ZmllbGQgbmFtZT0iV0FLRV9MT0NLIi8+Ci0JCTxmaWVsZCBuYW1lPSJXUklURV9BUE5fU0VUVElOR1MiLz4KLQkJPGZpZWxkIG5hbWU9IldSSVRFX0NBTEVOREFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJXUklURV9DQUxMX0xPRyIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXUklURV9DT05UQUNUUyIvPgotCQk8ZmllbGQgbmFtZT0iV1JJVEVfRVhURVJOQUxfU1RPUkFHRSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IldSSVRFX0dTRVJWSUNFUyIvPgotCQk8ZmllbGQgbmFtZT0iV1JJVEVfSElTVE9SWV9CT09LTUFSS1MiIHNpbmNlPSI0IiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iV1JJVEVfT1dORVJfREFUQSIgcmVtb3ZlZD0iOSIvPgotCQk8ZmllbGQgbmFtZT0iV1JJVEVfUFJPRklMRSIgc2luY2U9IjE0IiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iV1JJVEVfU0VDVVJFX1NFVFRJTkdTIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iV1JJVEVfU0VUVElOR1MiLz4KLQkJPGZpZWxkIG5hbWU9IldSSVRFX1NNUyIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IldSSVRFX1NPQ0lBTF9TVFJFQU0iIHNpbmNlPSIxNSIgZGVwcmVjYXRlZD0iMjEiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJXUklURV9TWU5DX1NFVFRJTkdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJXUklURV9VU0VSX0RJQ1RJT05BUlkiIHNpbmNlPSIxNiIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IldSSVRFX1ZPSUNFTUFJTCIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9NYW5pZmVzdCRwZXJtaXNzaW9uX2dyb3VwIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VTU0lCSUxJVFlfRkVBVFVSRVMiIHNpbmNlPSIxOCIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ09VTlRTIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUZGRUNUU19CQVRURVJZIiBzaW5jZT0iMTciIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUFBfSU5GTyIgc2luY2U9IjE3IiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQVVESU9fU0VUVElOR1MiIHNpbmNlPSIxNyIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkJMVUVUT09USF9ORVRXT1JLIiBzaW5jZT0iMTciIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT09LTUFSS1MiIHNpbmNlPSIxNyIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTEVOREFSIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkNBTExfTE9HIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTUVSQSIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UQUNUUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT1NUX01PTkVZIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iREVWRUxPUE1FTlRfVE9PTFMiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVZJQ0VfQUxBUk1TIiBzaW5jZT0iMTciIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNQTEFZIiBzaW5jZT0iMTciIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQVJEV0FSRV9DT05UUk9MUyIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVNTQUdFUyIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JQ1JPUEhPTkUiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SSyIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUlNPTkFMX0lORk8iIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORV9DQUxMUyIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTkxPQ0siIHNpbmNlPSIxNyIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUlMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU01TIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNPQ0lBTF9JTkZPIiBzaW5jZT0iMTciIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfQkFSIiBzaW5jZT0iMTciIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVE9SQUdFIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ19TRVRUSU5HUyIgc2luY2U9IjE3IiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU1lTVEVNX0NMT0NLIiBzaW5jZT0iMTciIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWVNURU1fVE9PTFMiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VSX0RJQ1RJT05BUlkiIHNpbmNlPSIxNyIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlZPSUNFTUFJTCIgc2luY2U9IjE3IiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iV0FMTFBBUEVSIiBzaW5jZT0iMTciIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJXUklURV9VU0VSX0RJQ1RJT05BUlkiIHNpbmNlPSIxNyIgcmVtb3ZlZD0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL1IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvUiRhbmltIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImFjY2VsZXJhdGVfZGVjZWxlcmF0ZV9pbnRlcnBvbGF0b3IiLz4KLQkJPGZpZWxkIG5hbWU9ImFjY2VsZXJhdGVfaW50ZXJwb2xhdG9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbnRpY2lwYXRlX2ludGVycG9sYXRvciIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9ImFudGljaXBhdGVfb3ZlcnNob290X2ludGVycG9sYXRvciIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9ImJvdW5jZV9pbnRlcnBvbGF0b3IiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjeWNsZV9pbnRlcnBvbGF0b3IiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkZWNlbGVyYXRlX2ludGVycG9sYXRvciIvPgotCQk8ZmllbGQgbmFtZT0iZmFkZV9pbiIvPgotCQk8ZmllbGQgbmFtZT0iZmFkZV9vdXQiLz4KLQkJPGZpZWxkIG5hbWU9ImxpbmVhcl9pbnRlcnBvbGF0b3IiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJvdmVyc2hvb3RfaW50ZXJwb2xhdG9yIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0ic2xpZGVfaW5fbGVmdCIvPgotCQk8ZmllbGQgbmFtZT0ic2xpZGVfb3V0X3JpZ2h0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9SJGFuaW1hdG9yIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJmYWRlX2luIi8+Ci0JCTxmaWVsZCBuYW1lPSJmYWRlX291dCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvUiRhcnJheSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJlbWFpbEFkZHJlc3NUeXBlcyIvPgotCQk8ZmllbGQgbmFtZT0iaW1Qcm90b2NvbHMiLz4KLQkJPGZpZWxkIG5hbWU9Im9yZ2FuaXphdGlvblR5cGVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJwaG9uZVR5cGVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJwb3N0YWxBZGRyZXNzVHlwZXMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL1IkYXR0ciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJhYnNMaXN0Vmlld1N0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY2Nlc3NpYmlsaXR5RXZlbnRUeXBlcyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhY2Nlc3NpYmlsaXR5RmVlZGJhY2tUeXBlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9ImFjY2Vzc2liaWxpdHlGbGFncyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhY2Nlc3NpYmlsaXR5SGVhZGluZyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhY2Nlc3NpYmlsaXR5TGl2ZVJlZ2lvbiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhY2Nlc3NpYmlsaXR5UGFuZVRpdGxlIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9ImFjY2Vzc2liaWxpdHlUcmF2ZXJzYWxBZnRlciIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY2Nlc3NpYmlsaXR5VHJhdmVyc2FsQmVmb3JlIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9ImFjY291bnRQcmVmZXJlbmNlcyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9ImFjY291bnRUeXBlIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iYWN0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25CYXJEaXZpZGVyIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvbkJhckl0ZW1CYWNrZ3JvdW5kIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvbkJhclBvcHVwVGhlbWUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iYWN0aW9uQmFyU2l6ZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25CYXJTcGxpdFN0eWxlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvbkJhclN0eWxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvbkJhclRhYkJhclN0eWxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvbkJhclRhYlN0eWxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvbkJhclRhYlRleHRTdHlsZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25CYXJUaGVtZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25CYXJXaWRnZXRUaGVtZSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25CdXR0b25TdHlsZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25Ecm9wRG93blN0eWxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvbkxheW91dCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25NZW51VGV4dEFwcGVhcmFuY2UiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iYWN0aW9uTWVudVRleHRDb2xvciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25Nb2RlQmFja2dyb3VuZCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25Nb2RlQ2xvc2VCdXR0b25TdHlsZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25Nb2RlQ2xvc2VEcmF3YWJsZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25Nb2RlQ29weURyYXdhYmxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvbk1vZGVDdXREcmF3YWJsZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25Nb2RlRmluZERyYXdhYmxlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvbk1vZGVQYXN0ZURyYXdhYmxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvbk1vZGVTZWxlY3RBbGxEcmF3YWJsZSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25Nb2RlU2hhcmVEcmF3YWJsZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25Nb2RlU3BsaXRCYWNrZ3JvdW5kIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvbk1vZGVTdHlsZSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25Nb2RlV2ViU2VhcmNoRHJhd2FibGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iYWN0aW9uT3ZlcmZsb3dCdXR0b25TdHlsZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25PdmVyZmxvd01lbnVTdHlsZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25Qcm92aWRlckNsYXNzIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvblZpZXdDbGFzcyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3RpdmF0ZWRCYWNrZ3JvdW5kSW5kaWNhdG9yIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGl2aXR5Q2xvc2VFbnRlckFuaW1hdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0iYWN0aXZpdHlDbG9zZUV4aXRBbmltYXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGl2aXR5T3BlbkVudGVyQW5pbWF0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpdml0eU9wZW5FeGl0QW5pbWF0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJhZGRQcmludGVyc0FjdGl2aXR5IiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9ImFkZFN0YXRlc0Zyb21DaGlsZHJlbiIvPgotCQk8ZmllbGQgbmFtZT0iYWRqdXN0Vmlld0JvdW5kcyIvPgotCQk8ZmllbGQgbmFtZT0iYWR2YW5jZWRQcmludE9wdGlvbnNBY3Rpdml0eSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhbGVydERpYWxvZ0ljb24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iYWxlcnREaWFsb2dTdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0iYWxlcnREaWFsb2dUaGVtZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbGlnbm1lbnRNb2RlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9ImFsbENvbnRhY3RzTmFtZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbGxvd0JhY2t1cCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9ImFsbG93Q2xlYXJVc2VyRGF0YSIvPgotCQk8ZmllbGQgbmFtZT0iYWxsb3dFbWJlZGRlZCIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbGxvd1BhcmFsbGVsU3luY3MiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iYWxsb3dTaW5nbGVUYXAiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbGxvd1Rhc2tSZXBhcmVudGluZyIvPgotCQk8ZmllbGQgbmFtZT0iYWxsb3dVbmRvIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImFscGhhIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImFscGhhYmV0aWNNb2RpZmllcnMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iYWxwaGFiZXRpY1Nob3J0Y3V0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhbHdheXNEcmF3bldpdGhDYWNoZSIvPgotCQk8ZmllbGQgbmFtZT0iYWx3YXlzUmV0YWluVGFza1N0YXRlIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbVBtQmFja2dyb3VuZENvbG9yIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbVBtVGV4dENvbG9yIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbWJpZW50U2hhZG93QWxwaGEiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iYW5nbGUiLz4KLQkJPGZpZWxkIG5hbWU9ImFuaW1hdGVGaXJzdFZpZXciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iYW5pbWF0ZUxheW91dENoYW5nZXMiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iYW5pbWF0ZU9uQ2xpY2siIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbmltYXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9ImFuaW1hdGlvbkNhY2hlIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbmltYXRpb25EdXJhdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0iYW5pbWF0aW9uT3JkZXIiLz4KLQkJPGZpZWxkIG5hbWU9ImFuaW1hdGlvblJlc29sdXRpb24iIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9ImFudGlhbGlhcyIvPgotCQk8ZmllbGQgbmFtZT0iYW55RGVuc2l0eSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9ImFwZHVTZXJ2aWNlQmFubmVyIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9ImFwaUtleSIvPgotCQk8ZmllbGQgbmFtZT0iYXBwQ2F0ZWdvcnkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iYXBwQ29tcG9uZW50RmFjdG9yeSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhdXRob3IiIHNpbmNlPSI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhdXRob3JpdGllcyIvPgotCQk8ZmllbGQgbmFtZT0iYXV0b0FkdmFuY2VWaWV3SWQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iYXV0b0NvbXBsZXRlVGV4dFZpZXdTdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0iYXV0b0xpbmsiLz4KLQkJPGZpZWxkIG5hbWU9ImF1dG9NaXJyb3JlZCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhdXRvUmVtb3ZlRnJvbVJlY2VudHMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iYXV0b1NpemVNYXhUZXh0U2l6ZSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhdXRvU2l6ZU1pblRleHRTaXplIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9ImF1dG9TaXplUHJlc2V0U2l6ZXMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iYXV0b1NpemVTdGVwR3JhbnVsYXJpdHkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iYXV0b1NpemVUZXh0VHlwZSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhdXRvU3RhcnQiIHNpbmNlPSI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhdXRvVGV4dCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9ImF1dG9VcmxEZXRlY3QiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhdXRvVmVyaWZ5IiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImF1dG9maWxsSGludHMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iYXV0b2ZpbGxlZEhpZ2hsaWdodCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJiYWNrZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJiYWNrZ3JvdW5kRGltQW1vdW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJiYWNrZ3JvdW5kRGltRW5hYmxlZCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImJhY2tncm91bmRTcGxpdCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJiYWNrZ3JvdW5kU3RhY2tlZCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJiYWNrZ3JvdW5kVGludCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJiYWNrZ3JvdW5kVGludE1vZGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iYmFja3VwQWdlbnQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJiYWNrdXBJbkZvcmVncm91bmQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iYmFubmVyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImJhc2VsaW5lIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImJhc2VsaW5lQWxpZ25Cb3R0b20iLz4KLQkJPGZpZWxkIG5hbWU9ImJhc2VsaW5lQWxpZ25lZCIvPgotCQk8ZmllbGQgbmFtZT0iYmFzZWxpbmVBbGlnbmVkQ2hpbGRJbmRleCIvPgotCQk8ZmllbGQgbmFtZT0iYml0bWFwIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9ImJvcmRlcmxlc3NCdXR0b25TdHlsZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJib3R0b20iLz4KLQkJPGZpZWxkIG5hbWU9ImJvdHRvbUJyaWdodCIvPgotCQk8ZmllbGQgbmFtZT0iYm90dG9tRGFyayIvPgotCQk8ZmllbGQgbmFtZT0iYm90dG9tTGVmdFJhZGl1cyIvPgotCQk8ZmllbGQgbmFtZT0iYm90dG9tTWVkaXVtIi8+Ci0JCTxmaWVsZCBuYW1lPSJib3R0b21PZmZzZXQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJib3R0b21SaWdodFJhZGl1cyIvPgotCQk8ZmllbGQgbmFtZT0iYnJlYWRDcnVtYlNob3J0VGl0bGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iYnJlYWRDcnVtYlRpdGxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImJyZWFrU3RyYXRlZ3kiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iYnVmZmVyVHlwZSIvPgotCQk8ZmllbGQgbmFtZT0iYnV0dG9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJidXR0b25CYXJCdXR0b25TdHlsZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJidXR0b25CYXJOZWdhdGl2ZUJ1dHRvblN0eWxlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImJ1dHRvbkJhck5ldXRyYWxCdXR0b25TdHlsZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJidXR0b25CYXJQb3NpdGl2ZUJ1dHRvblN0eWxlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImJ1dHRvbkJhclN0eWxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImJ1dHRvbkNvcm5lclJhZGl1cyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJidXR0b25HcmF2aXR5IiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9ImJ1dHRvblN0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJidXR0b25TdHlsZUluc2V0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJidXR0b25TdHlsZVNtYWxsIi8+Ci0JCTxmaWVsZCBuYW1lPSJidXR0b25TdHlsZVRvZ2dsZSIvPgotCQk8ZmllbGQgbmFtZT0iYnV0dG9uVGludCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJidXR0b25UaW50TW9kZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJjYWNoZUNvbG9ySGludCIvPgotCQk8ZmllbGQgbmFtZT0iY2FsZW5kYXJUZXh0Q29sb3IiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY2FsZW5kYXJWaWV3U2hvd24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iY2FsZW5kYXJWaWV3U3R5bGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iY2FuUGVyZm9ybUdlc3R1cmVzIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9ImNhblJlY29yZCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBzaW5jZT0iMTgiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9ImNhblJlcXVlc3RGaW5nZXJwcmludEdlc3R1cmVzIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9ImNhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uTW9kZSIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iY2FuZGlkYXRlc1RleHRTdHlsZVNwYW5zIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iY2FudFNhdmVTdGF0ZSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjYXBpdGFsaXplIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iY2F0ZWdvcnkiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iY2VudGVyQnJpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjZW50ZXJDb2xvciIvPgotCQk8ZmllbGQgbmFtZT0iY2VudGVyRGFyayIvPgotCQk8ZmllbGQgbmFtZT0iY2VudGVyTWVkaXVtIi8+Ci0JCTxmaWVsZCBuYW1lPSJjZW50ZXJYIi8+Ci0JCTxmaWVsZCBuYW1lPSJjZW50ZXJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJjZXJ0RGlnZXN0IiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9ImNoZWNrQm94UHJlZmVyZW5jZVN0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJjaGVja01hcmsiLz4KLQkJPGZpZWxkIG5hbWU9ImNoZWNrTWFya1RpbnQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY2hlY2tNYXJrVGludE1vZGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY2hlY2thYmxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJjaGVja2FibGVCZWhhdmlvciIvPgotCQk8ZmllbGQgbmFtZT0iY2hlY2tib3hTdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0iY2hlY2tlZCIvPgotCQk8ZmllbGQgbmFtZT0iY2hlY2tlZEJ1dHRvbiIvPgotCQk8ZmllbGQgbmFtZT0iY2hlY2tlZFRleHRWaWV3U3R5bGUiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iY2hpbGREaXZpZGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJjaGlsZEluZGljYXRvciIvPgotCQk8ZmllbGQgbmFtZT0iY2hpbGRJbmRpY2F0b3JFbmQiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iY2hpbGRJbmRpY2F0b3JMZWZ0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjaGlsZEluZGljYXRvclJpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjaGlsZEluZGljYXRvclN0YXJ0IiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9ImNob2ljZU1vZGUiLz4KLQkJPGZpZWxkIG5hbWU9ImNsYXNzTG9hZGVyIiBzaW5jZT0iMjciLz4KLQkJPGZpZWxkIG5hbWU9ImNsZWFyVGFza09uTGF1bmNoIi8+Ci0JCTxmaWVsZCBuYW1lPSJjbGlja2FibGUiLz4KLQkJPGZpZWxkIG5hbWU9ImNsaXBDaGlsZHJlbiIvPgotCQk8ZmllbGQgbmFtZT0iY2xpcE9yaWVudGF0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJjbGlwVG9QYWRkaW5nIi8+Ci0JCTxmaWVsZCBuYW1lPSJjbG9zZUljb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY29kZXMiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xsYXBzZUNvbHVtbnMiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbGxhcHNlQ29udGVudERlc2NyaXB0aW9uIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbGxhcHNlSWNvbiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvciIvPgotCQk8ZmllbGQgbmFtZT0iY29sb3JBY2NlbnQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY29sb3JBY3RpdmF0ZWRIaWdobGlnaHQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iY29sb3JCYWNrZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvckJhY2tncm91bmRDYWNoZUhpbnQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvckJhY2tncm91bmRGbG9hdGluZyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvckJ1dHRvbk5vcm1hbCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvckNvbnRyb2xBY3RpdmF0ZWQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY29sb3JDb250cm9sSGlnaGxpZ2h0IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbG9yQ29udHJvbE5vcm1hbCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvckVkZ2VFZmZlY3QiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY29sb3JFcnJvciIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvckZvY3VzZWRIaWdobGlnaHQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iY29sb3JGb3JlZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvckZvcmVncm91bmRJbnZlcnNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvckxvbmdQcmVzc2VkSGlnaGxpZ2h0IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbG9yTW9kZSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvck11bHRpU2VsZWN0SGlnaGxpZ2h0IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbG9yUHJlc3NlZEhpZ2hsaWdodCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvclByaW1hcnkiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY29sb3JQcmltYXJ5RGFyayIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvclNlY29uZGFyeSIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb2x1bW5Db3VudCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb2x1bW5EZWxheSIvPgotCQk8ZmllbGQgbmFtZT0iY29sdW1uT3JkZXJQcmVzZXJ2ZWQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iY29sdW1uV2lkdGgiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbW1pdEljb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY29tcGF0aWJsZVdpZHRoTGltaXREcCIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb21wbGV0aW9uSGludCIvPgotCQk8ZmllbGQgbmFtZT0iY29tcGxldGlvbkhpbnRWaWV3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb21wbGV0aW9uVGhyZXNob2xkIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb25maWdDaGFuZ2VzIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb25maWd1cmUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb25zdGFudFNpemUiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbnRlbnQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb250ZW50QWdlSGludCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb250ZW50QXV0aG9yaXR5IiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iY29udGVudERlc2NyaXB0aW9uIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iY29udGVudEluc2V0RW5kIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbnRlbnRJbnNldEVuZFdpdGhBY3Rpb25zIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbnRlbnRJbnNldExlZnQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY29udGVudEluc2V0UmlnaHQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY29udGVudEluc2V0U3RhcnQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY29udGVudEluc2V0U3RhcnRXaXRoTmF2aWdhdGlvbiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb250ZXh0Q2xpY2thYmxlIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbnRleHREZXNjcmlwdGlvbiIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb250ZXh0UG9wdXBNZW51U3R5bGUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iY29udGV4dFVyaSIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb250cm9sWDEiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY29udHJvbFgyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbnRyb2xZMSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb250cm9sWTIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY291bnREb3duIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9ImNvdW50cnkiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY3JvcFRvUGFkZGluZyIvPgotCQk8ZmllbGQgbmFtZT0iY3Vyc29yVmlzaWJsZSIvPgotCQk8ZmllbGQgbmFtZT0iY3VzdG9tTmF2aWdhdGlvbkxheW91dCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJjdXN0b21Ub2tlbnMiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iY3ljbGVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJkYXNoR2FwIi8+Ci0JCTxmaWVsZCBuYW1lPSJkYXNoV2lkdGgiLz4KLQkJPGZpZWxkIG5hbWU9ImRhdGEiLz4KLQkJPGZpZWxkIG5hbWU9ImRhdGVQaWNrZXJEaWFsb2dUaGVtZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJkYXRlUGlja2VyTW9kZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJkYXRlUGlja2VyU3R5bGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZGF0ZVRleHRBcHBlYXJhbmNlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImRheU9mV2Vla0JhY2tncm91bmQiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImRheU9mV2Vla1RleHRBcHBlYXJhbmNlIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJkZWJ1Z2dhYmxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJkZWZhdWx0Rm9jdXNIaWdobGlnaHRFbmFibGVkIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9ImRlZmF1bHRIZWlnaHQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iZGVmYXVsdFRvRGV2aWNlUHJvdGVjdGVkU3RvcmFnZSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkZWZhdWx0VmFsdWUiLz4KLQkJPGZpZWxkIG5hbWU9ImRlZmF1bHRXaWR0aCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkZWxheSIvPgotCQk8ZmllbGQgbmFtZT0iZGVwZW5kZW5jeSIvPgotCQk8ZmllbGQgbmFtZT0iZGVzY2VuZGFudEZvY3VzYWJpbGl0eSIvPgotCQk8ZmllbGQgbmFtZT0iZGVzY3JpcHRpb24iLz4KLQkJPGZpZWxkIG5hbWU9ImRldGFjaFdhbGxwYXBlciIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9ImRldGFpbENvbHVtbiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9ImRldGFpbFNvY2lhbFN1bW1hcnkiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkZXRhaWxzRWxlbWVudEJhY2tncm91bmQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZGlhbCIvPgotCQk8ZmllbGQgbmFtZT0iZGlhbG9nQ29ybmVyUmFkaXVzIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9ImRpYWxvZ0ljb24iLz4KLQkJPGZpZWxkIG5hbWU9ImRpYWxvZ0xheW91dCIvPgotCQk8ZmllbGQgbmFtZT0iZGlhbG9nTWVzc2FnZSIvPgotCQk8ZmllbGQgbmFtZT0iZGlhbG9nUHJlZmVyZW5jZVN0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJkaWFsb2dQcmVmZXJyZWRQYWRkaW5nIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9ImRpYWxvZ1RoZW1lIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImRpYWxvZ1RpdGxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJkaWdpdHMiLz4KLQkJPGZpZWxkIG5hbWU9ImRpcmVjdEJvb3RBd2FyZSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkaXJlY3Rpb24iLz4KLQkJPGZpZWxkIG5hbWU9ImRpcmVjdGlvbkRlc2NyaXB0aW9ucyIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iZGlyZWN0aW9uUHJpb3JpdHkiLz4KLQkJPGZpZWxkIG5hbWU9ImRpc2FibGVEZXBlbmRlbnRzU3RhdGUiLz4KLQkJPGZpZWxkIG5hbWU9ImRpc2FibGVkQWxwaGEiLz4KLQkJPGZpZWxkIG5hbWU9ImRpc3BsYXlPcHRpb25zIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImRpdGhlciIvPgotCQk8ZmllbGQgbmFtZT0iZGl2aWRlciIvPgotCQk8ZmllbGQgbmFtZT0iZGl2aWRlckhlaWdodCIvPgotCQk8ZmllbGQgbmFtZT0iZGl2aWRlckhvcml6b250YWwiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZGl2aWRlclBhZGRpbmciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZGl2aWRlclZlcnRpY2FsIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImRvY3VtZW50TGF1bmNoTW9kZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJkcmF3U2VsZWN0b3JPblRvcCIvPgotCQk8ZmllbGQgbmFtZT0iZHJhd2FibGUiLz4KLQkJPGZpZWxkIG5hbWU9ImRyYXdhYmxlQm90dG9tIi8+Ci0JCTxmaWVsZCBuYW1lPSJkcmF3YWJsZUVuZCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkcmF3YWJsZUxlZnQiLz4KLQkJPGZpZWxkIG5hbWU9ImRyYXdhYmxlUGFkZGluZyIvPgotCQk8ZmllbGQgbmFtZT0iZHJhd2FibGVSaWdodCIvPgotCQk8ZmllbGQgbmFtZT0iZHJhd2FibGVTdGFydCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkcmF3YWJsZVRpbnQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iZHJhd2FibGVUaW50TW9kZSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJkcmF3YWJsZVRvcCIvPgotCQk8ZmllbGQgbmFtZT0iZHJhd2luZ0NhY2hlUXVhbGl0eSIvPgotCQk8ZmllbGQgbmFtZT0iZHJvcERvd25BbmNob3IiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJkcm9wRG93bkhlaWdodCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9ImRyb3BEb3duSGludEFwcGVhcmFuY2UiLz4KLQkJPGZpZWxkIG5hbWU9ImRyb3BEb3duSG9yaXpvbnRhbE9mZnNldCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9ImRyb3BEb3duSXRlbVN0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJkcm9wRG93bkxpc3RWaWV3U3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9ImRyb3BEb3duU2VsZWN0b3IiLz4KLQkJPGZpZWxkIG5hbWU9ImRyb3BEb3duU3Bpbm5lclN0eWxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImRyb3BEb3duVmVydGljYWxPZmZzZXQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkcm9wRG93bldpZHRoIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iZHVwbGljYXRlUGFyZW50U3RhdGUiLz4KLQkJPGZpZWxkIG5hbWU9ImR1cmF0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJlZGl0VGV4dEJhY2tncm91bmQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZWRpdFRleHRDb2xvciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJlZGl0VGV4dFByZWZlcmVuY2VTdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0iZWRpdFRleHRTdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0iZWRpdGFibGUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJlZGl0b3JFeHRyYXMiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJlbGVnYW50VGV4dEhlaWdodCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJlbGV2YXRpb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iZWxsaXBzaXplIi8+Ci0JCTxmaWVsZCBuYW1lPSJlbXMiLz4KLQkJPGZpZWxkIG5hbWU9ImVuYWJsZVZyTW9kZSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJlbmFibGVkIi8+Ci0JCTxmaWVsZCBuYW1lPSJlbmQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iZW5kQ29sb3IiLz4KLQkJPGZpZWxkIG5hbWU9ImVuZFgiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iZW5kWSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJlbmRZZWFyIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iZW50ZXJGYWRlRHVyYXRpb24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZW50cmllcyIvPgotCQk8ZmllbGQgbmFtZT0iZW50cnlWYWx1ZXMiLz4KLQkJPGZpZWxkIG5hbWU9ImV2ZW50c0ludGVyY2VwdGlvbkVuYWJsZWQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJleGNsdWRlQ2xhc3MiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iZXhjbHVkZUZyb21SZWNlbnRzIi8+Ci0JCTxmaWVsZCBuYW1lPSJleGNsdWRlSWQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iZXhjbHVkZU5hbWUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iZXhpdEZhZGVEdXJhdGlvbiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJleHBhbmRhYmxlTGlzdFByZWZlcnJlZENoaWxkSW5kaWNhdG9yTGVmdCIvPgotCQk8ZmllbGQgbmFtZT0iZXhwYW5kYWJsZUxpc3RQcmVmZXJyZWRDaGlsZEluZGljYXRvclJpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJleHBhbmRhYmxlTGlzdFByZWZlcnJlZENoaWxkUGFkZGluZ0xlZnQiLz4KLQkJPGZpZWxkIG5hbWU9ImV4cGFuZGFibGVMaXN0UHJlZmVycmVkSXRlbUluZGljYXRvckxlZnQiLz4KLQkJPGZpZWxkIG5hbWU9ImV4cGFuZGFibGVMaXN0UHJlZmVycmVkSXRlbUluZGljYXRvclJpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJleHBhbmRhYmxlTGlzdFByZWZlcnJlZEl0ZW1QYWRkaW5nTGVmdCIvPgotCQk8ZmllbGQgbmFtZT0iZXhwYW5kYWJsZUxpc3RWaWV3U3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9ImV4cGFuZGFibGVMaXN0Vmlld1doaXRlU3R5bGUiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJleHBvcnRlZCIvPgotCQk8ZmllbGQgbmFtZT0iZXh0ZXJuYWxTZXJ2aWNlIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9ImV4dHJhVGVuc2lvbiIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9ImV4dHJhY3ROYXRpdmVMaWJzIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImZhY3RvciIvPgotCQk8ZmllbGQgbmFtZT0iZmFkZUR1cmF0aW9uIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iZmFkZUVuYWJsZWQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmYWRlT2Zmc2V0IiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iZmFkZVNjcm9sbGJhcnMiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmYWRpbmdFZGdlIi8+Ci0JCTxmaWVsZCBuYW1lPSJmYWRpbmdFZGdlTGVuZ3RoIi8+Ci0JCTxmaWVsZCBuYW1lPSJmYWRpbmdNb2RlIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9ImZhbGxiYWNrTGluZVNwYWNpbmciIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iZmFzdFNjcm9sbEFsd2F5c1Zpc2libGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZmFzdFNjcm9sbEVuYWJsZWQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJmYXN0U2Nyb2xsT3ZlcmxheVBvc2l0aW9uIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImZhc3RTY3JvbGxQcmV2aWV3QmFja2dyb3VuZExlZnQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZmFzdFNjcm9sbFByZXZpZXdCYWNrZ3JvdW5kUmlnaHQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZmFzdFNjcm9sbFN0eWxlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImZhc3RTY3JvbGxUZXh0Q29sb3IiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZmFzdFNjcm9sbFRodW1iRHJhd2FibGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZmFzdFNjcm9sbFRyYWNrRHJhd2FibGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZmlsbEFmdGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJmaWxsQWxwaGEiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iZmlsbEJlZm9yZSIvPgotCQk8ZmllbGQgbmFtZT0iZmlsbENvbG9yIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImZpbGxFbmFibGVkIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iZmlsbFR5cGUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iZmlsbFZpZXdwb3J0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmaWx0ZXIiLz4KLQkJPGZpZWxkIG5hbWU9ImZpbHRlclRvdWNoZXNXaGVuT2JzY3VyZWQiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmaW5nZXJwcmludEF1dGhEcmF3YWJsZSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJmaW5pc2hPbkNsb3NlU3lzdGVtRGlhbG9ncyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9ImZpbmlzaE9uVGFza0xhdW5jaCIvPgotCQk8ZmllbGQgbmFtZT0iZmlyc3RCYXNlbGluZVRvVG9wSGVpZ2h0IiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9ImZpcnN0RGF5T2ZXZWVrIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImZpdHNTeXN0ZW1XaW5kb3dzIi8+Ci0JCTxmaWVsZCBuYW1lPSJmbGlwSW50ZXJ2YWwiLz4KLQkJPGZpZWxkIG5hbWU9ImZvY3VzYWJsZSIvPgotCQk8ZmllbGQgbmFtZT0iZm9jdXNhYmxlSW5Ub3VjaE1vZGUiLz4KLQkJPGZpZWxkIG5hbWU9ImZvY3VzZWRCeURlZmF1bHQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iZm9jdXNlZE1vbnRoRGF0ZUNvbG9yIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJmb250IiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9ImZvbnRGYW1pbHkiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iZm9udEZlYXR1cmVTZXR0aW5ncyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJmb250UHJvdmlkZXJBdXRob3JpdHkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iZm9udFByb3ZpZGVyQ2VydHMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iZm9udFByb3ZpZGVyUGFja2FnZSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmb250UHJvdmlkZXJRdWVyeSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmb250U3R5bGUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iZm9udFZhcmlhdGlvblNldHRpbmdzIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9ImZvbnRXZWlnaHQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iZm9vdGVyRGl2aWRlcnNFbmFibGVkIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iZm9yY2VIYXNPdmVybGFwcGluZ1JlbmRlcmluZyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmb3JlZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJmb3JlZ3JvdW5kR3Jhdml0eSIvPgotCQk8ZmllbGQgbmFtZT0iZm9yZWdyb3VuZFRpbnQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iZm9yZWdyb3VuZFRpbnRNb2RlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImZvcm1hdCIvPgotCQk8ZmllbGQgbmFtZT0iZm9ybWF0MTJIb3VyIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9ImZvcm1hdDI0SG91ciIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmcmFjdGlvbiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJmcmFnbWVudCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJmcmFnbWVudEFsbG93RW50ZXJUcmFuc2l0aW9uT3ZlcmxhcCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJmcmFnbWVudEFsbG93UmV0dXJuVHJhbnNpdGlvbk92ZXJsYXAiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iZnJhZ21lbnRDbG9zZUVudGVyQW5pbWF0aW9uIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImZyYWdtZW50Q2xvc2VFeGl0QW5pbWF0aW9uIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImZyYWdtZW50RW50ZXJUcmFuc2l0aW9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImZyYWdtZW50RXhpdFRyYW5zaXRpb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iZnJhZ21lbnRGYWRlRW50ZXJBbmltYXRpb24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZnJhZ21lbnRGYWRlRXhpdEFuaW1hdGlvbiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJmcmFnbWVudE9wZW5FbnRlckFuaW1hdGlvbiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJmcmFnbWVudE9wZW5FeGl0QW5pbWF0aW9uIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImZyYWdtZW50UmVlbnRlclRyYW5zaXRpb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iZnJhZ21lbnRSZXR1cm5UcmFuc2l0aW9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImZyYWdtZW50U2hhcmVkRWxlbWVudEVudGVyVHJhbnNpdGlvbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJmcmFnbWVudFNoYXJlZEVsZW1lbnRSZXR1cm5UcmFuc2l0aW9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImZyZWV6ZXNUZXh0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmcm9tQWxwaGEiLz4KLQkJPGZpZWxkIG5hbWU9ImZyb21EZWdyZWVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJmcm9tSWQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iZnJvbVNjZW5lIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9ImZyb21YRGVsdGEiLz4KLQkJPGZpZWxkIG5hbWU9ImZyb21YU2NhbGUiLz4KLQkJPGZpZWxkIG5hbWU9ImZyb21ZRGVsdGEiLz4KLQkJPGZpZWxkIG5hbWU9ImZyb21ZU2NhbGUiLz4KLQkJPGZpZWxkIG5hbWU9ImZ1bGxCYWNrdXBDb250ZW50IiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImZ1bGxCYWNrdXBPbmx5IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImZ1bGxCcmlnaHQiLz4KLQkJPGZpZWxkIG5hbWU9ImZ1bGxEYXJrIi8+Ci0JCTxmaWVsZCBuYW1lPSJmdW5jdGlvbmFsVGVzdCIvPgotCQk8ZmllbGQgbmFtZT0iZ2FsbGVyeUl0ZW1CYWNrZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJnYWxsZXJ5U3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9Imdlc3R1cmVDb2xvciIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9Imdlc3R1cmVTdHJva2VBbmdsZVRocmVzaG9sZCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9Imdlc3R1cmVTdHJva2VMZW5ndGhUaHJlc2hvbGQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJnZXN0dXJlU3Ryb2tlU3F1YXJlbmVzc1RocmVzaG9sZCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9Imdlc3R1cmVTdHJva2VUeXBlIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iZ2VzdHVyZVN0cm9rZVdpZHRoIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iZ2xFc1ZlcnNpb24iIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJnb0ljb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iZ3JhZGllbnRSYWRpdXMiLz4KLQkJPGZpZWxkIG5hbWU9ImdyYW50VXJpUGVybWlzc2lvbnMiLz4KLQkJPGZpZWxkIG5hbWU9ImdyYXZpdHkiLz4KLQkJPGZpZWxkIG5hbWU9ImdyaWRWaWV3U3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9Imdyb3VwSW5kaWNhdG9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJoYW5kX2hvdXIiLz4KLQkJPGZpZWxkIG5hbWU9ImhhbmRfbWludXRlIi8+Ci0JCTxmaWVsZCBuYW1lPSJoYW5kbGUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJoYW5kbGVQcm9maWxpbmciLz4KLQkJPGZpZWxkIG5hbWU9ImhhcHRpY0ZlZWRiYWNrRW5hYmxlZCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImhhcmR3YXJlQWNjZWxlcmF0ZWQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iaGFzQ29kZSIvPgotCQk8ZmllbGQgbmFtZT0iaGVhZGVyQW1QbVRleHRBcHBlYXJhbmNlIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJoZWFkZXJCYWNrZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJoZWFkZXJEYXlPZk1vbnRoVGV4dEFwcGVhcmFuY2UiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImhlYWRlckRpdmlkZXJzRW5hYmxlZCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImhlYWRlck1vbnRoVGV4dEFwcGVhcmFuY2UiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImhlYWRlclRpbWVUZXh0QXBwZWFyYW5jZSIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iaGVhZGVyWWVhclRleHRBcHBlYXJhbmNlIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJoZWlnaHQiLz4KLQkJPGZpZWxkIG5hbWU9ImhpZGVPbkNvbnRlbnRTY3JvbGwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iaGludCIvPgotCQk8ZmllbGQgbmFtZT0iaG9tZUFzVXBJbmRpY2F0b3IiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iaG9tZUxheW91dCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJob3Jpem9udGFsRGl2aWRlciIvPgotCQk8ZmllbGQgbmFtZT0iaG9yaXpvbnRhbEdhcCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9Imhvcml6b250YWxTY3JvbGxWaWV3U3R5bGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iaG9yaXpvbnRhbFNwYWNpbmciLz4KLQkJPGZpZWxkIG5hbWU9Imhvc3QiLz4KLQkJPGZpZWxkIG5hbWU9ImhvdFNwb3RYIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9ImhvdFNwb3RZIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Imh5cGhlbmF0aW9uRnJlcXVlbmN5IiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Imljb24iLz4KLQkJPGZpZWxkIG5hbWU9Imljb25QcmV2aWV3IiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iaWNvblNwYWNlUmVzZXJ2ZWQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iaWNvblRpbnQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iaWNvblRpbnRNb2RlIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Imljb25pZmllZEJ5RGVmYXVsdCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJpZCIvPgotCQk8ZmllbGQgbmFtZT0iaWdub3JlR3Jhdml0eSIvPgotCQk8ZmllbGQgbmFtZT0iaW1hZ2VCdXR0b25TdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0iaW1hZ2VXZWxsU3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9ImltZUFjdGlvbklkIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iaW1lQWN0aW9uTGFiZWwiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbWVFeHRyYWN0RW50ZXJBbmltYXRpb24iIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbWVFeHRyYWN0RXhpdEFuaW1hdGlvbiIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImltZUZ1bGxzY3JlZW5CYWNrZ3JvdW5kIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iaW1lT3B0aW9ucyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImltZVN1YnR5cGVFeHRyYVZhbHVlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImltZVN1YnR5cGVMb2NhbGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iaW1lU3VidHlwZU1vZGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iaW1tZXJzaXZlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iaW1wb3J0YW50Rm9yQXV0b2ZpbGwiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iaW5BbmltYXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9ImluY2x1ZGVGb250UGFkZGluZyIvPgotCQk8ZmllbGQgbmFtZT0iaW5jbHVkZUluR2xvYmFsU2VhcmNoIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iaW5kZXRlcm1pbmF0ZSIvPgotCQk8ZmllbGQgbmFtZT0iaW5kZXRlcm1pbmF0ZUJlaGF2aW9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbmRldGVybWluYXRlRHJhd2FibGUiLz4KLQkJPGZpZWxkIG5hbWU9ImluZGV0ZXJtaW5hdGVEdXJhdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0iaW5kZXRlcm1pbmF0ZU9ubHkiLz4KLQkJPGZpZWxkIG5hbWU9ImluZGV0ZXJtaW5hdGVQcm9ncmVzc1N0eWxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImluZGV0ZXJtaW5hdGVUaW50IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImluZGV0ZXJtaW5hdGVUaW50TW9kZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbmRpY2F0b3JFbmQiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iaW5kaWNhdG9yTGVmdCIvPgotCQk8ZmllbGQgbmFtZT0iaW5kaWNhdG9yUmlnaHQiLz4KLQkJPGZpZWxkIG5hbWU9ImluZGljYXRvclN0YXJ0IiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9ImluZmxhdGVkSWQiLz4KLQkJPGZpZWxkIG5hbWU9ImluaXRPcmRlciIvPgotCQk8ZmllbGQgbmFtZT0iaW5pdGlhbEtleWd1YXJkTGF5b3V0IiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9ImluaXRpYWxMYXlvdXQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbm5lclJhZGl1cyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImlubmVyUmFkaXVzUmF0aW8iLz4KLQkJPGZpZWxkIG5hbWU9ImlucHV0TWV0aG9kIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iaW5wdXRUeXBlIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iaW5zZXQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iaW5zZXRCb3R0b20iLz4KLQkJPGZpZWxkIG5hbWU9Imluc2V0TGVmdCIvPgotCQk8ZmllbGQgbmFtZT0iaW5zZXRSaWdodCIvPgotCQk8ZmllbGQgbmFtZT0iaW5zZXRUb3AiLz4KLQkJPGZpZWxkIG5hbWU9Imluc3RhbGxMb2NhdGlvbiIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9ImludGVycG9sYXRvciIvPgotCQk8ZmllbGQgbmFtZT0iaXNBbHdheXNTeW5jYWJsZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJpc0FzY2lpQ2FwYWJsZSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpc0F1eGlsaWFyeSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpc0RlZmF1bHQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJpc0ZlYXR1cmVTcGxpdCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpc0dhbWUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iaXNJbmRpY2F0b3IiLz4KLQkJPGZpZWxkIG5hbWU9ImlzTW9kaWZpZXIiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJpc1JlcGVhdGFibGUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJpc1Njcm9sbENvbnRhaW5lciIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImlzU3RhdGljIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9ImlzU3RpY2t5IiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iaXNvbGF0ZWRQcm9jZXNzIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Imlzb2xhdGVkU3BsaXRzIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Iml0ZW1CYWNrZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJpdGVtSWNvbkRpc2FibGVkQWxwaGEiLz4KLQkJPGZpZWxkIG5hbWU9Iml0ZW1QYWRkaW5nIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Iml0ZW1UZXh0QXBwZWFyYW5jZSIvPgotCQk8ZmllbGQgbmFtZT0ianVzdGlmaWNhdGlvbk1vZGUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0ia2VlcFNjcmVlbk9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJrZXkiLz4KLQkJPGZpZWxkIG5hbWU9ImtleUJhY2tncm91bmQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJrZXlFZGdlRmxhZ3MiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJrZXlIZWlnaHQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJrZXlJY29uIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0ia2V5TGFiZWwiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJrZXlPdXRwdXRUZXh0IiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0ia2V5UHJldmlld0hlaWdodCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImtleVByZXZpZXdMYXlvdXQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJrZXlQcmV2aWV3T2Zmc2V0IiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0ia2V5U2V0IiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9ImtleVRleHRDb2xvciIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImtleVRleHRTaXplIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0ia2V5V2lkdGgiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJrZXlib2FyZExheW91dCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJrZXlib2FyZE1vZGUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJrZXlib2FyZE5hdmlnYXRpb25DbHVzdGVyIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9ImtleWNvZGUiLz4KLQkJPGZpZWxkIG5hbWU9ImtpbGxBZnRlclJlc3RvcmUiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYWJlbCIvPgotCQk8ZmllbGQgbmFtZT0ibGFiZWxGb3IiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0ibGFiZWxUZXh0U2l6ZSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9Imxhbmd1YWdlVGFnIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9ImxhcmdlSGVhcCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJsYXJnZVNjcmVlbnMiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXJnZXN0V2lkdGhMaW1pdERwIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9Imxhc3RCYXNlbGluZVRvQm90dG9tSGVpZ2h0IiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9ImxhdW5jaE1vZGUiLz4KLQkJPGZpZWxkIG5hbWU9ImxhdW5jaFRhc2tCZWhpbmRTb3VyY2VBbmltYXRpb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ibGF1bmNoVGFza0JlaGluZFRhcmdldEFuaW1hdGlvbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJsYXllclR5cGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0ibGF5b3V0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRBbmltYXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dERpcmVjdGlvbiIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRNb2RlIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9hYm92ZSIvPgotCQk8ZmllbGQgbmFtZT0ibGF5b3V0X2FsaWduQmFzZWxpbmUiLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9hbGlnbkJvdHRvbSIvPgotCQk8ZmllbGQgbmFtZT0ibGF5b3V0X2FsaWduRW5kIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9hbGlnbkxlZnQiLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9hbGlnblBhcmVudEJvdHRvbSIvPgotCQk8ZmllbGQgbmFtZT0ibGF5b3V0X2FsaWduUGFyZW50RW5kIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9hbGlnblBhcmVudExlZnQiLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9hbGlnblBhcmVudFJpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfYWxpZ25QYXJlbnRTdGFydCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfYWxpZ25QYXJlbnRUb3AiLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9hbGlnblJpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfYWxpZ25TdGFydCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfYWxpZ25Ub3AiLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9hbGlnbldpdGhQYXJlbnRJZk1pc3NpbmciLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9iZWxvdyIvPgotCQk8ZmllbGQgbmFtZT0ibGF5b3V0X2NlbnRlckhvcml6b250YWwiLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9jZW50ZXJJblBhcmVudCIvPgotCQk8ZmllbGQgbmFtZT0ibGF5b3V0X2NlbnRlclZlcnRpY2FsIi8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfY29sdW1uIi8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfY29sdW1uU3BhbiIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfY29sdW1uV2VpZ2h0IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9ncmF2aXR5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfaGVpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfbWFyZ2luIi8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfbWFyZ2luQm90dG9tIi8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfbWFyZ2luRW5kIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9tYXJnaW5Ib3Jpem9udGFsIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9tYXJnaW5MZWZ0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfbWFyZ2luUmlnaHQiLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9tYXJnaW5TdGFydCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfbWFyZ2luVG9wIi8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfbWFyZ2luVmVydGljYWwiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0ibGF5b3V0X3JvdyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfcm93U3BhbiIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfcm93V2VpZ2h0IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF9zY2FsZSIvPgotCQk8ZmllbGQgbmFtZT0ibGF5b3V0X3NwYW4iLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF90b0VuZE9mIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF90b0xlZnRPZiIvPgotCQk8ZmllbGQgbmFtZT0ibGF5b3V0X3RvUmlnaHRPZiIvPgotCQk8ZmllbGQgbmFtZT0ibGF5b3V0X3RvU3RhcnRPZiIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfd2VpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfd2lkdGgiLz4KLQkJPGZpZWxkIG5hbWU9ImxheW91dF94Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRfeSIvPgotCQk8ZmllbGQgbmFtZT0ibGVmdCIvPgotCQk8ZmllbGQgbmFtZT0ibGV0dGVyU3BhY2luZyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJsZXZlbCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsaW5lSGVpZ2h0IiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9ImxpbmVTcGFjaW5nRXh0cmEiLz4KLQkJPGZpZWxkIG5hbWU9ImxpbmVTcGFjaW5nTXVsdGlwbGllciIvPgotCQk8ZmllbGQgbmFtZT0ibGluZXMiLz4KLQkJPGZpZWxkIG5hbWU9ImxpbmtzQ2xpY2thYmxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJsaXN0Q2hvaWNlQmFja2dyb3VuZEluZGljYXRvciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJsaXN0Q2hvaWNlSW5kaWNhdG9yTXVsdGlwbGUiLz4KLQkJPGZpZWxkIG5hbWU9Imxpc3RDaG9pY2VJbmRpY2F0b3JTaW5nbGUiLz4KLQkJPGZpZWxkIG5hbWU9Imxpc3REaXZpZGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJsaXN0RGl2aWRlckFsZXJ0RGlhbG9nIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Imxpc3RNZW51Vmlld1N0eWxlIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Imxpc3RQb3B1cFdpbmRvd1N0eWxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Imxpc3RQcmVmZXJyZWRJdGVtSGVpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsaXN0UHJlZmVycmVkSXRlbUhlaWdodExhcmdlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9Imxpc3RQcmVmZXJyZWRJdGVtSGVpZ2h0U21hbGwiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ibGlzdFByZWZlcnJlZEl0ZW1QYWRkaW5nRW5kIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9Imxpc3RQcmVmZXJyZWRJdGVtUGFkZGluZ0xlZnQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ibGlzdFByZWZlcnJlZEl0ZW1QYWRkaW5nUmlnaHQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ibGlzdFByZWZlcnJlZEl0ZW1QYWRkaW5nU3RhcnQiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0ibGlzdFNlbGVjdG9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJsaXN0U2VwYXJhdG9yVGV4dFZpZXdTdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0ibGlzdFZpZXdTdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0ibGlzdFZpZXdXaGl0ZVN0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJsb2NrVGFza01vZGUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0ibG9nbyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJsb2dvRGVzY3JpcHRpb24iIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0ibG9uZ0NsaWNrYWJsZSIvPgotCQk8ZmllbGQgbmFtZT0ibG9vcFZpZXdzIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Im1hbmFnZVNwYWNlQWN0aXZpdHkiLz4KLQkJPGZpZWxkIG5hbWU9Im1hcFZpZXdTdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0ibWFycXVlZVJlcGVhdExpbWl0IiBzaW5jZT0iMiIvPgotCQk8ZmllbGQgbmFtZT0ibWF0Y2hPcmRlciIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJtYXgiLz4KLQkJPGZpZWxkIG5hbWU9Im1heEFzcGVjdFJhdGlvIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Im1heEJ1dHRvbkhlaWdodCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtYXhEYXRlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Im1heEVtcyIvPgotCQk8ZmllbGQgbmFtZT0ibWF4SGVpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtYXhJdGVtc1BlclJvdyIvPgotCQk8ZmllbGQgbmFtZT0ibWF4TGVuZ3RoIi8+Ci0JCTxmaWVsZCBuYW1lPSJtYXhMZXZlbCIvPgotCQk8ZmllbGQgbmFtZT0ibWF4TGluZXMiLz4KLQkJPGZpZWxkIG5hbWU9Im1heExvbmdWZXJzaW9uQ29kZSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtYXhSZWNlbnRzIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Im1heFJvd3MiLz4KLQkJPGZpZWxkIG5hbWU9Im1heFNka1ZlcnNpb24iIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtYXhXaWR0aCIvPgotCQk8ZmllbGQgbmFtZT0ibWF4aW11bUFuZ2xlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Im1lYXN1cmVBbGxDaGlsZHJlbiIvPgotCQk8ZmllbGQgbmFtZT0ibWVhc3VyZVdpdGhMYXJnZXN0Q2hpbGQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0ibWVkaWFSb3V0ZUJ1dHRvblN0eWxlIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Im1lZGlhUm91dGVUeXBlcyIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtZW51Q2F0ZWdvcnkiLz4KLQkJPGZpZWxkIG5hbWU9Im1pbWVUeXBlIi8+Ci0JCTxmaWVsZCBuYW1lPSJtaW4iIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0ibWluRGF0ZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJtaW5FbXMiLz4KLQkJPGZpZWxkIG5hbWU9Im1pbkhlaWdodCIvPgotCQk8ZmllbGQgbmFtZT0ibWluTGV2ZWwiLz4KLQkJPGZpZWxkIG5hbWU9Im1pbkxpbmVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJtaW5SZXNpemVIZWlnaHQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ibWluUmVzaXplV2lkdGgiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ibWluU2RrVmVyc2lvbiIvPgotCQk8ZmllbGQgbmFtZT0ibWluV2lkdGgiLz4KLQkJPGZpZWxkIG5hbWU9Im1pbmltdW1Ib3Jpem9udGFsQW5nbGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ibWluaW11bVZlcnRpY2FsQW5nbGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ibWlwTWFwIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9Im1pcnJvckZvclJ0bCIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtb2RlIi8+Ci0JCTxmaWVsZCBuYW1lPSJtb3JlSWNvbiIvPgotCQk8ZmllbGQgbmFtZT0ibXVsdGlBcmNoIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Im11bHRpcHJvY2VzcyIvPgotCQk8ZmllbGQgbmFtZT0ibmFtZSIvPgotCQk8ZmllbGQgbmFtZT0ibmF2aWdhdGlvbkJhckNvbG9yIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Im5hdmlnYXRpb25CYXJEaXZpZGVyQ29sb3IiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0ibmF2aWdhdGlvbkNvbnRlbnREZXNjcmlwdGlvbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJuYXZpZ2F0aW9uSWNvbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJuYXZpZ2F0aW9uTW9kZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJuZWdhdGl2ZUJ1dHRvblRleHQiLz4KLQkJPGZpZWxkIG5hbWU9Im5lc3RlZFNjcm9sbGluZ0VuYWJsZWQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ibmV0d29ya1NlY3VyaXR5Q29uZmlnIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Im5leHRDbHVzdGVyRm9yd2FyZCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJuZXh0Rm9jdXNEb3duIi8+Ci0JCTxmaWVsZCBuYW1lPSJuZXh0Rm9jdXNGb3J3YXJkIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Im5leHRGb2N1c0xlZnQiLz4KLQkJPGZpZWxkIG5hbWU9Im5leHRGb2N1c1JpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJuZXh0Rm9jdXNVcCIvPgotCQk8ZmllbGQgbmFtZT0ibm9IaXN0b3J5IiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0ibm9ybWFsU2NyZWVucyIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9Im5vdGlmaWNhdGlvblRpbWVvdXQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ibnVtQ29sdW1ucyIvPgotCQk8ZmllbGQgbmFtZT0ibnVtU3RhcnMiLz4KLQkJPGZpZWxkIG5hbWU9Im51bWJlclBpY2tlclN0eWxlIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Im51bWJlcnNCYWNrZ3JvdW5kQ29sb3IiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ibnVtYmVyc0lubmVyVGV4dENvbG9yIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Im51bWJlcnNTZWxlY3RvckNvbG9yIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Im51bWJlcnNUZXh0Q29sb3IiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ibnVtZXJpYyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Im51bWVyaWNNb2RpZmllcnMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0ibnVtZXJpY1Nob3J0Y3V0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJvZmZzZXQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0ib25DbGljayIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9Im9uZXNob3QiLz4KLQkJPGZpZWxkIG5hbWU9Im9wYWNpdHkiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0ib3JkZXIiLz4KLQkJPGZpZWxkIG5hbWU9Im9yZGVySW5DYXRlZ29yeSIvPgotCQk8ZmllbGQgbmFtZT0ib3JkZXJpbmciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0ib3JkZXJpbmdGcm9tWG1sIi8+Ci0JCTxmaWVsZCBuYW1lPSJvcmllbnRhdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0ib3V0QW5pbWF0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJvdXRsaW5lQW1iaWVudFNoYWRvd0NvbG9yIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Im91dGxpbmVQcm92aWRlciIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJvdXRsaW5lU3BvdFNoYWRvd0NvbG9yIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Im92ZXJTY3JvbGxGb290ZXIiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJvdmVyU2Nyb2xsSGVhZGVyIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0ib3ZlclNjcm9sbE1vZGUiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJvdmVybGFwQW5jaG9yIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Im92ZXJyaWRlc0ltcGxpY2l0bHlFbmFibGVkU3VidHlwZSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwYWNrYWdlTmFtZXMiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0icGFkZGluZyIvPgotCQk8ZmllbGQgbmFtZT0icGFkZGluZ0JvdHRvbSIvPgotCQk8ZmllbGQgbmFtZT0icGFkZGluZ0VuZCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwYWRkaW5nSG9yaXpvbnRhbCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwYWRkaW5nTGVmdCIvPgotCQk8ZmllbGQgbmFtZT0icGFkZGluZ01vZGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0icGFkZGluZ1JpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwYWRkaW5nU3RhcnQiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0icGFkZGluZ1RvcCIvPgotCQk8ZmllbGQgbmFtZT0icGFkZGluZ1ZlcnRpY2FsIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9InBhbmVsQmFja2dyb3VuZCIvPgotCQk8ZmllbGQgbmFtZT0icGFuZWxDb2xvckJhY2tncm91bmQiLz4KLQkJPGZpZWxkIG5hbWU9InBhbmVsQ29sb3JGb3JlZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJwYW5lbEZ1bGxCYWNrZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJwYW5lbFRleHRBcHBlYXJhbmNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJwYXJlbnRBY3Rpdml0eU5hbWUiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0icGFzc3dvcmQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwYXRoIi8+Ci0JCTxmaWVsZCBuYW1lPSJwYXRoRGF0YSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJwYXRoUGF0dGVybiIvPgotCQk8ZmllbGQgbmFtZT0icGF0aFByZWZpeCIvPgotCQk8ZmllbGQgbmFtZT0icGF0dGVyblBhdGhEYXRhIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InBlcm1pc3Npb24iLz4KLQkJPGZpZWxkIG5hbWU9InBlcm1pc3Npb25GbGFncyIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwZXJtaXNzaW9uR3JvdXAiLz4KLQkJPGZpZWxkIG5hbWU9InBlcm1pc3Npb25Hcm91cEZsYWdzIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9InBlcnNpc3RhYmxlTW9kZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJwZXJzaXN0ZW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwZXJzaXN0ZW50RHJhd2luZ0NhY2hlIi8+Ci0JCTxmaWVsZCBuYW1lPSJwZXJzaXN0ZW50V2hlbkZlYXR1cmVBdmFpbGFibGUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0icGhvbmVOdW1iZXIiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwaXZvdFgiLz4KLQkJPGZpZWxkIG5hbWU9InBpdm90WSIvPgotCQk8ZmllbGQgbmFtZT0icG9pbnRlckljb24iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0icG9wdXBBbmltYXRpb25TdHlsZSIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9InBvcHVwQmFja2dyb3VuZCIvPgotCQk8ZmllbGQgbmFtZT0icG9wdXBDaGFyYWN0ZXJzIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0icG9wdXBFbGV2YXRpb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0icG9wdXBFbnRlclRyYW5zaXRpb24iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0icG9wdXBFeGl0VHJhbnNpdGlvbiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwb3B1cEtleWJvYXJkIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0icG9wdXBMYXlvdXQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJwb3B1cE1lbnVTdHlsZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJwb3B1cFRoZW1lIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InBvcHVwV2luZG93U3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9InBvcnQiLz4KLQkJPGZpZWxkIG5hbWU9InBvc2l0aXZlQnV0dG9uVGV4dCIvPgotCQk8ZmllbGQgbmFtZT0icHJlZmVyZW5jZUNhdGVnb3J5U3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9InByZWZlcmVuY2VGcmFnbWVudFN0eWxlIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9InByZWZlcmVuY2VJbmZvcm1hdGlvblN0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcmVmZXJlbmNlTGF5b3V0Q2hpbGQiLz4KLQkJPGZpZWxkIG5hbWU9InByZWZlcmVuY2VTY3JlZW5TdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0icHJlZmVyZW5jZVN0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcmVzZW50YXRpb25UaGVtZSIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwcmV2aWV3SW1hZ2UiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0icHJpbWFyeUNvbnRlbnRBbHBoYSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwcmlvcml0eSIvPgotCQk8ZmllbGQgbmFtZT0icHJpdmF0ZUltZU9wdGlvbnMiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9jZXNzIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9ncmVzcyIvPgotCQk8ZmllbGQgbmFtZT0icHJvZ3Jlc3NCYWNrZ3JvdW5kVGludCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9ncmVzc0JhY2tncm91bmRUaW50TW9kZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9ncmVzc0JhclBhZGRpbmciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0icHJvZ3Jlc3NCYXJTdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0icHJvZ3Jlc3NCYXJTdHlsZUhvcml6b250YWwiLz4KLQkJPGZpZWxkIG5hbWU9InByb2dyZXNzQmFyU3R5bGVJbnZlcnNlIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0icHJvZ3Jlc3NCYXJTdHlsZUxhcmdlIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9ncmVzc0JhclN0eWxlTGFyZ2VJbnZlcnNlIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0icHJvZ3Jlc3NCYXJTdHlsZVNtYWxsIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9ncmVzc0JhclN0eWxlU21hbGxJbnZlcnNlIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0icHJvZ3Jlc3NCYXJTdHlsZVNtYWxsVGl0bGUiLz4KLQkJPGZpZWxkIG5hbWU9InByb2dyZXNzRHJhd2FibGUiLz4KLQkJPGZpZWxkIG5hbWU9InByb2dyZXNzVGludCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9ncmVzc1RpbnRNb2RlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InByb21wdCIvPgotCQk8ZmllbGQgbmFtZT0icHJvcGVydHlOYW1lIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InByb3BlcnR5WE5hbWUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0icHJvcGVydHlZTmFtZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm90ZWN0aW9uTGV2ZWwiLz4KLQkJPGZpZWxkIG5hbWU9InB1YmxpY0tleSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJxdWVyeUFjdGlvbk1zZyIvPgotCQk8ZmllbGQgbmFtZT0icXVlcnlBZnRlclplcm9SZXN1bHRzIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0icXVlcnlCYWNrZ3JvdW5kIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InF1ZXJ5SGludCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJxdWlja0NvbnRhY3RCYWRnZVN0eWxlU21hbGxXaW5kb3dMYXJnZSIgc2luY2U9IjYiLz4KLQkJPGZpZWxkIG5hbWU9InF1aWNrQ29udGFjdEJhZGdlU3R5bGVTbWFsbFdpbmRvd01lZGl1bSIgc2luY2U9IjYiLz4KLQkJPGZpZWxkIG5hbWU9InF1aWNrQ29udGFjdEJhZGdlU3R5bGVTbWFsbFdpbmRvd1NtYWxsIiBzaW5jZT0iNiIvPgotCQk8ZmllbGQgbmFtZT0icXVpY2tDb250YWN0QmFkZ2VTdHlsZVdpbmRvd0xhcmdlIiBzaW5jZT0iNiIvPgotCQk8ZmllbGQgbmFtZT0icXVpY2tDb250YWN0QmFkZ2VTdHlsZVdpbmRvd01lZGl1bSIgc2luY2U9IjYiLz4KLQkJPGZpZWxkIG5hbWU9InF1aWNrQ29udGFjdEJhZGdlU3R5bGVXaW5kb3dTbWFsbCIgc2luY2U9IjYiLz4KLQkJPGZpZWxkIG5hbWU9InJhZGlvQnV0dG9uU3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9InJhZGl1cyIvPgotCQk8ZmllbGQgbmFtZT0icmF0aW5nIi8+Ci0JCTxmaWVsZCBuYW1lPSJyYXRpbmdCYXJTdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0icmF0aW5nQmFyU3R5bGVJbmRpY2F0b3IiLz4KLQkJPGZpZWxkIG5hbWU9InJhdGluZ0JhclN0eWxlU21hbGwiLz4KLQkJPGZpZWxkIG5hbWU9InJlYWRQZXJtaXNzaW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZWNvZ25pdGlvblNlcnZpY2UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0icmVjcmVhdGVPbkNvbmZpZ0NoYW5nZXMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0icmVjeWNsZUVuYWJsZWQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0icmVsaW5xdWlzaFRhc2tJZGVudGl0eSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXBhcmVudCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXBhcmVudFdpdGhPdmVybGF5IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InJlcGVhdENvdW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJyZXBlYXRNb2RlIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXFGaXZlV2F5TmF2IiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0icmVxSGFyZEtleWJvYXJkIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0icmVxS2V5Ym9hcmRUeXBlIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0icmVxTmF2aWdhdGlvbiIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9InJlcVRvdWNoU2NyZWVuIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0icmVxdWlyZURldmljZVVubG9jayIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJyZXF1aXJlZCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9InJlcXVpcmVkQWNjb3VudFR5cGUiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0icmVxdWlyZWRGZWF0dXJlIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9InJlcXVpcmVkRm9yQWxsVXNlcnMiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0icmVxdWlyZWROb3RGZWF0dXJlIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9InJlcXVpcmVzRmFkaW5nRWRnZSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJyZXF1aXJlc1NtYWxsZXN0V2lkdGhEcCIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXNpemVDbGlwIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9InJlc2l6ZU1vZGUiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0icmVzaXplYWJsZSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9InJlc2l6ZWFibGVBY3Rpdml0eSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJyZXNvdXJjZSIvPgotCQk8ZmllbGQgbmFtZT0icmVzdG9yZUFueVZlcnNpb24iIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJyZXN0b3JlTmVlZHNBcHBsaWNhdGlvbiIgc2luY2U9IjUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJyZXN0cmljdGVkQWNjb3VudFR5cGUiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0icmVzdHJpY3Rpb25UeXBlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InJlc3VtZVdoaWxlUGF1c2luZyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXZlcnNpYmxlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InJldmlzaW9uQ29kZSIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJyaWdodCIvPgotCQk8ZmllbGQgbmFtZT0icmluZ3RvbmVQcmVmZXJlbmNlU3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9InJpbmd0b25lVHlwZSIvPgotCQk8ZmllbGQgbmFtZT0icm90YXRpb24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0icm90YXRpb25BbmltYXRpb24iIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0icm90YXRpb25YIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InJvdGF0aW9uWSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJyb3VuZEljb24iIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0icm93Q291bnQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0icm93RGVsYXkiLz4KLQkJPGZpZWxkIG5hbWU9InJvd0VkZ2VGbGFncyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9InJvd0hlaWdodCIvPgotCQk8ZmllbGQgbmFtZT0icm93T3JkZXJQcmVzZXJ2ZWQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ic2F2ZUVuYWJsZWQiLz4KLQkJPGZpZWxkIG5hbWU9InNjYWxlR3Jhdml0eSIvPgotCQk8ZmllbGQgbmFtZT0ic2NhbGVIZWlnaHQiLz4KLQkJPGZpZWxkIG5hbWU9InNjYWxlVHlwZSIvPgotCQk8ZmllbGQgbmFtZT0ic2NhbGVXaWR0aCIvPgotCQk8ZmllbGQgbmFtZT0ic2NhbGVYIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InNjYWxlWSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJzY2hlbWUiLz4KLQkJPGZpZWxkIG5hbWU9InNjcmVlbkRlbnNpdHkiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzY3JlZW5PcmllbnRhdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0ic2NyZWVuUmVhZGVyRm9jdXNhYmxlIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9InNjcmVlblNpemUiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzY3JvbGxIb3Jpem9udGFsbHkiLz4KLQkJPGZpZWxkIG5hbWU9InNjcm9sbEluZGljYXRvcnMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0ic2Nyb2xsVmlld1N0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJzY3JvbGxYIi8+Ci0JCTxmaWVsZCBuYW1lPSJzY3JvbGxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJzY3JvbGxiYXJBbHdheXNEcmF3SG9yaXpvbnRhbFRyYWNrIi8+Ci0JCTxmaWVsZCBuYW1lPSJzY3JvbGxiYXJBbHdheXNEcmF3VmVydGljYWxUcmFjayIvPgotCQk8ZmllbGQgbmFtZT0ic2Nyb2xsYmFyRGVmYXVsdERlbGF5QmVmb3JlRmFkZSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9InNjcm9sbGJhckZhZGVEdXJhdGlvbiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9InNjcm9sbGJhclNpemUiLz4KLQkJPGZpZWxkIG5hbWU9InNjcm9sbGJhclN0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJzY3JvbGxiYXJUaHVtYkhvcml6b250YWwiLz4KLQkJPGZpZWxkIG5hbWU9InNjcm9sbGJhclRodW1iVmVydGljYWwiLz4KLQkJPGZpZWxkIG5hbWU9InNjcm9sbGJhclRyYWNrSG9yaXpvbnRhbCIvPgotCQk8ZmllbGQgbmFtZT0ic2Nyb2xsYmFyVHJhY2tWZXJ0aWNhbCIvPgotCQk8ZmllbGQgbmFtZT0ic2Nyb2xsYmFycyIvPgotCQk8ZmllbGQgbmFtZT0ic2Nyb2xsaW5nQ2FjaGUiLz4KLQkJPGZpZWxkIG5hbWU9InNlYXJjaEJ1dHRvblRleHQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzZWFyY2hIaW50SWNvbiIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZWFyY2hJY29uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InNlYXJjaE1vZGUiLz4KLQkJPGZpZWxkIG5hbWU9InNlYXJjaFNldHRpbmdzRGVzY3JpcHRpb24iIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzZWFyY2hTdWdnZXN0QXV0aG9yaXR5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzZWFyY2hTdWdnZXN0SW50ZW50QWN0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZWFyY2hTdWdnZXN0SW50ZW50RGF0YSIvPgotCQk8ZmllbGQgbmFtZT0ic2VhcmNoU3VnZ2VzdFBhdGgiLz4KLQkJPGZpZWxkIG5hbWU9InNlYXJjaFN1Z2dlc3RTZWxlY3Rpb24iLz4KLQkJPGZpZWxkIG5hbWU9InNlYXJjaFN1Z2dlc3RUaHJlc2hvbGQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzZWFyY2hWaWV3U3R5bGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ic2Vjb25kYXJ5Q29udGVudEFscGhhIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9InNlY29uZGFyeVByb2dyZXNzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZWNvbmRhcnlQcm9ncmVzc1RpbnQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ic2Vjb25kYXJ5UHJvZ3Jlc3NUaW50TW9kZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZWVrQmFyU3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9InNlZ21lbnRlZEJ1dHRvblN0eWxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InNlbGVjdEFsbE9uRm9jdXMiLz4KLQkJPGZpZWxkIG5hbWU9InNlbGVjdGFibGUiLz4KLQkJPGZpZWxkIG5hbWU9InNlbGVjdGFibGVJdGVtQmFja2dyb3VuZCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZWxlY3RhYmxlSXRlbUJhY2tncm91bmRCb3JkZXJsZXNzIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9InNlc3Npb25TZXJ2aWNlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InNldHRpbmdzQWN0aXZpdHkiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZXR1cEFjdGl2aXR5IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InNoYWRvd0NvbG9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJzaGFkb3dEeCIvPgotCQk8ZmllbGQgbmFtZT0ic2hhZG93RHkiLz4KLQkJPGZpZWxkIG5hbWU9InNoYWRvd1JhZGl1cyIvPgotCQk8ZmllbGQgbmFtZT0ic2hhcGUiLz4KLQkJPGZpZWxkIG5hbWU9InNoYXJlSW50ZXJwb2xhdG9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJzaGFyZWRVc2VySWQiLz4KLQkJPGZpZWxkIG5hbWU9InNoYXJlZFVzZXJMYWJlbCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9InNob3J0Y3V0RGlzYWJsZWRNZXNzYWdlIiBzaW5jZT0iMjUiLz4KLQkJPGZpZWxkIG5hbWU9InNob3J0Y3V0SWQiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0ic2hvcnRjdXRMb25nTGFiZWwiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0ic2hvcnRjdXRTaG9ydExhYmVsIiBzaW5jZT0iMjUiLz4KLQkJPGZpZWxkIG5hbWU9InNob3VsZERpc2FibGVWaWV3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzaG93QXNBY3Rpb24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0ic2hvd0RlZmF1bHQiLz4KLQkJPGZpZWxkIG5hbWU9InNob3dEaXZpZGVycyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJzaG93Rm9yQWxsVXNlcnMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0ic2hvd01ldGFkYXRhSW5QcmV2aWV3IiBzaW5jZT0iMjUiLz4KLQkJPGZpZWxkIG5hbWU9InNob3dPbkxvY2tTY3JlZW4iIHNpbmNlPSIxNyIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9InNob3dTaWxlbnQiLz4KLQkJPGZpZWxkIG5hbWU9InNob3dUZXh0IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InNob3dXZWVrTnVtYmVyIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzaG93V2hlbkxvY2tlZCIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzaG93bldlZWtDb3VudCIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0ic2hyaW5rQ29sdW1ucyIvPgotCQk8ZmllbGQgbmFtZT0ic2luZ2xlTGluZSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9InNpbmdsZUxpbmVUaXRsZSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzaW5nbGVVc2VyIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9InNsaWRlRWRnZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJzbWFsbEljb24iIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzbWFsbFNjcmVlbnMiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzbW9vdGhTY3JvbGxiYXIiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzb3VuZEVmZmVjdHNFbmFibGVkIi8+Ci0JCTxmaWVsZCBuYW1lPSJzcGFjaW5nIi8+Ci0JCTxmaWVsZCBuYW1lPSJzcGlubmVyRHJvcERvd25JdGVtU3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9InNwaW5uZXJJdGVtU3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9InNwaW5uZXJNb2RlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InNwaW5uZXJTdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0ic3Bpbm5lcnNTaG93biIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJzcGxpdE1vdGlvbkV2ZW50cyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJzcGxpdE5hbWUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0ic3BsaXRUcmFjayIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJzcG90U2hhZG93QWxwaGEiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ic3JjIi8+Ci0JCTxmaWVsZCBuYW1lPSJzc3AiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0ic3NwUGF0dGVybiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzc3BQcmVmaXgiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0ic3RhY2tGcm9tQm90dG9tIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGFja1ZpZXdTdHlsZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGFyU3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXJ0IiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXJ0Q29sb3IiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXJ0RGVsYXkiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0ic3RhcnRPZmZzZXQiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXJ0WCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzdGFydFkiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0ic3RhcnRZZWFyIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdGVMaXN0QW5pbWF0b3IiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdGVOb3ROZWVkZWQiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRlX2Fib3ZlX2FuY2hvciIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdGVfYWNjZWxlcmF0ZWQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdGVfYWN0aXZhdGVkIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRlX2FjdGl2ZSIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdGVfY2hlY2thYmxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0ZV9jaGVja2VkIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0ZV9kcmFnX2Nhbl9hY2NlcHQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdGVfZHJhZ19ob3ZlcmVkIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRlX2VtcHR5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0ZV9lbmFibGVkIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0ZV9leHBhbmRlZCIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdGVfZmlyc3QiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRlX2ZvY3VzZWQiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRlX2hvdmVyZWQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdGVfbGFzdCIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdGVfbG9uZ19wcmVzc2FibGUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0ZV9taWRkbGUiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRlX211bHRpbGluZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0ZV9wcmVzc2VkIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0ZV9zZWxlY3RlZCIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdGVfc2luZ2xlIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0ZV93aW5kb3dfZm9jdXNlZCIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdGljV2FsbHBhcGVyUHJldmlldyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0dXNCYXJDb2xvciIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGVwU2l6ZSIvPgotCQk8ZmllbGQgbmFtZT0ic3RvcFdpdGhUYXNrIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9InN0cmVhbVR5cGUiLz4KLQkJPGZpZWxkIG5hbWU9InN0cmV0Y2hDb2x1bW5zIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdHJldGNoTW9kZSIvPgotCQk8ZmllbGQgbmFtZT0ic3Ryb2tlQWxwaGEiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ic3Ryb2tlQ29sb3IiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ic3Ryb2tlTGluZUNhcCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdHJva2VMaW5lSm9pbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdHJva2VNaXRlckxpbWl0IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InN0cm9rZVdpZHRoIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InN1Yk1lbnVBcnJvdyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzdWJtaXRCYWNrZ3JvdW5kIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InN1YnRpdGxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InN1YnRpdGxlVGV4dEFwcGVhcmFuY2UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ic3VidGl0bGVUZXh0Q29sb3IiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0ic3VidGl0bGVUZXh0U3R5bGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0ic3VidHlwZUV4dHJhVmFsdWUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ic3VidHlwZUlkIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9InN1YnR5cGVMb2NhbGUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ic3VnZ2VzdEFjdGlvbk1zZyIvPgotCQk8ZmllbGQgbmFtZT0ic3VnZ2VzdEFjdGlvbk1zZ0NvbHVtbiIvPgotCQk8ZmllbGQgbmFtZT0ic3VnZ2VzdGlvblJvd0xheW91dCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdW1tYXJ5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzdW1tYXJ5Q29sdW1uIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0ic3VtbWFyeU9mZiIvPgotCQk8ZmllbGQgbmFtZT0ic3VtbWFyeU9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdXBwb3J0c0Fzc2lzdCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdXBwb3J0c0xhdW5jaFZvaWNlQXNzaXN0RnJvbUtleWd1YXJkIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9InN1cHBvcnRzTG9jYWxJbnRlcmFjdGlvbiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0ic3VwcG9ydHNSdGwiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0ic3VwcG9ydHNTd2l0Y2hpbmdUb05leHRJbnB1dE1ldGhvZCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzdXBwb3J0c1VwbG9hZGluZyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9InN3aXRjaE1pbldpZHRoIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9InN3aXRjaFBhZGRpbmciIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ic3dpdGNoUHJlZmVyZW5jZVN0eWxlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9InN3aXRjaFN0eWxlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InN3aXRjaFRleHRBcHBlYXJhbmNlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9InN3aXRjaFRleHRPZmYiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ic3dpdGNoVGV4dE9uIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9InN5bmNhYmxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0YWJTdHJpcEVuYWJsZWQiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0YWJTdHJpcExlZnQiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0YWJTdHJpcFJpZ2h0IiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0idGFiV2lkZ2V0U3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9InRhZyIvPgotCQk8ZmllbGQgbmFtZT0idGFyZ2V0QWN0aXZpdHkiLz4KLQkJPGZpZWxkIG5hbWU9InRhcmdldENsYXNzIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0YXJnZXREZXNjcmlwdGlvbnMiIHNpbmNlPSIxNCIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9InRhcmdldElkIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9InRhcmdldE5hbWUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0idGFyZ2V0UGFja2FnZSIvPgotCQk8ZmllbGQgbmFtZT0idGFyZ2V0UHJvY2Vzc2VzIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9InRhcmdldFNhbmRib3hWZXJzaW9uIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9InRhcmdldFNka1ZlcnNpb24iIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0YXNrQWZmaW5pdHkiLz4KLQkJPGZpZWxkIG5hbWU9InRhc2tDbG9zZUVudGVyQW5pbWF0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0YXNrQ2xvc2VFeGl0QW5pbWF0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0YXNrT3BlbkVudGVyQW5pbWF0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0YXNrT3BlbkV4aXRBbmltYXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9InRhc2tUb0JhY2tFbnRlckFuaW1hdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0idGFza1RvQmFja0V4aXRBbmltYXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9InRhc2tUb0Zyb250RW50ZXJBbmltYXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9InRhc2tUb0Zyb250RXhpdEFuaW1hdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0idGVuc2lvbiIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9InRlc3RPbmx5IiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0idGV4dCIvPgotCQk8ZmllbGQgbmFtZT0idGV4dEFsaWdubWVudCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0QWxsQ2FwcyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0QXBwZWFyYW5jZSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dEFwcGVhcmFuY2VCdXR0b24iLz4KLQkJPGZpZWxkIG5hbWU9InRleHRBcHBlYXJhbmNlSW52ZXJzZSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dEFwcGVhcmFuY2VMYXJnZSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dEFwcGVhcmFuY2VMYXJnZUludmVyc2UiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRBcHBlYXJhbmNlTGFyZ2VQb3B1cE1lbnUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dEFwcGVhcmFuY2VMaXN0SXRlbSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0QXBwZWFyYW5jZUxpc3RJdGVtU2Vjb25kYXJ5IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRBcHBlYXJhbmNlTGlzdEl0ZW1TbWFsbCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0QXBwZWFyYW5jZU1lZGl1bSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dEFwcGVhcmFuY2VNZWRpdW1JbnZlcnNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0QXBwZWFyYW5jZVBvcHVwTWVudUhlYWRlciIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0QXBwZWFyYW5jZVNlYXJjaFJlc3VsdFN1YnRpdGxlIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dEFwcGVhcmFuY2VTZWFyY2hSZXN1bHRUaXRsZSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRBcHBlYXJhbmNlU21hbGwiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRBcHBlYXJhbmNlU21hbGxJbnZlcnNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0QXBwZWFyYW5jZVNtYWxsUG9wdXBNZW51IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRDaGVja01hcmsiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRDaGVja01hcmtJbnZlcnNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0Q29sb3IiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRDb2xvckFsZXJ0RGlhbG9nTGlzdEl0ZW0iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dENvbG9ySGlnaGxpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0Q29sb3JIaWdobGlnaHRJbnZlcnNlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRDb2xvckhpbnQiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRDb2xvckhpbnRJbnZlcnNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0Q29sb3JMaW5rIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0Q29sb3JMaW5rSW52ZXJzZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0Q29sb3JQcmltYXJ5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0Q29sb3JQcmltYXJ5RGlzYWJsZU9ubHkiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRDb2xvclByaW1hcnlJbnZlcnNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0Q29sb3JQcmltYXJ5SW52ZXJzZURpc2FibGVPbmx5IiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0idGV4dENvbG9yUHJpbWFyeUludmVyc2VOb0Rpc2FibGUiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRDb2xvclByaW1hcnlOb0Rpc2FibGUiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRDb2xvclNlY29uZGFyeSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dENvbG9yU2Vjb25kYXJ5SW52ZXJzZSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dENvbG9yU2Vjb25kYXJ5SW52ZXJzZU5vRGlzYWJsZSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dENvbG9yU2Vjb25kYXJ5Tm9EaXNhYmxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0Q29sb3JUZXJ0aWFyeSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dENvbG9yVGVydGlhcnlJbnZlcnNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0Q3Vyc29yRHJhd2FibGUiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0idGV4dERpcmVjdGlvbiIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0RWRpdE5vUGFzdGVXaW5kb3dMYXlvdXQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dEVkaXRQYXN0ZVdpbmRvd0xheW91dCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0RWRpdFNpZGVOb1Bhc3RlV2luZG93TGF5b3V0IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRFZGl0U2lkZVBhc3RlV2luZG93TGF5b3V0IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRFZGl0U3VnZ2VzdGlvbkl0ZW1MYXlvdXQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0idGV4dEZpbHRlckVuYWJsZWQiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRGb250V2VpZ2h0IiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9InRleHRJc1NlbGVjdGFibGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dE9mZiIvPgotCQk8ZmllbGQgbmFtZT0idGV4dE9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0U2NhbGVYIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0U2VsZWN0SGFuZGxlIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dFNlbGVjdEhhbmRsZUxlZnQiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0U2VsZWN0SGFuZGxlUmlnaHQiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0U2VsZWN0SGFuZGxlV2luZG93U3R5bGUiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0U2l6ZSIvPgotCQk8ZmllbGQgbmFtZT0idGV4dFN0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0U3VnZ2VzdGlvbnNXaW5kb3dTdHlsZSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0Vmlld1N0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aGVtZSIvPgotCQk8ZmllbGQgbmFtZT0idGhpY2tuZXNzIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0idGhpY2tuZXNzUmF0aW8iLz4KLQkJPGZpZWxkIG5hbWU9InRodW1iIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aHVtYk9mZnNldCIvPgotCQk8ZmllbGQgbmFtZT0idGh1bWJQb3NpdGlvbiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aHVtYlRleHRQYWRkaW5nIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9InRodW1iVGludCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aHVtYlRpbnRNb2RlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InRodW1ibmFpbCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9InRpY2tNYXJrIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9InRpY2tNYXJrVGludCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0aWNrTWFya1RpbnRNb2RlIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9InRpbGVNb2RlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aWxlTW9kZVgiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0idGlsZU1vZGVZIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InRpbWVQaWNrZXJEaWFsb2dUaGVtZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aW1lUGlja2VyTW9kZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aW1lUGlja2VyU3R5bGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0idGltZVpvbmUiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0idGludCIvPgotCQk8ZmllbGQgbmFtZT0idGludE1vZGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0idGl0bGUiLz4KLQkJPGZpZWxkIG5hbWU9InRpdGxlQ29uZGVuc2VkIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aXRsZU1hcmdpbiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0aXRsZU1hcmdpbkJvdHRvbSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0aXRsZU1hcmdpbkVuZCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0aXRsZU1hcmdpblN0YXJ0IiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9InRpdGxlTWFyZ2luVG9wIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9InRpdGxlVGV4dEFwcGVhcmFuY2UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0idGl0bGVUZXh0Q29sb3IiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0idGl0bGVUZXh0U3R5bGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0idG9BbHBoYSIvPgotCQk8ZmllbGQgbmFtZT0idG9EZWdyZWVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0b0lkIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InRvU2NlbmUiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0idG9YRGVsdGEiLz4KLQkJPGZpZWxkIG5hbWU9InRvWFNjYWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0b1lEZWx0YSIvPgotCQk8ZmllbGQgbmFtZT0idG9ZU2NhbGUiLz4KLQkJPGZpZWxkIG5hbWU9InRvb2xiYXJTdHlsZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0b29sdGlwVGV4dCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0b3AiLz4KLQkJPGZpZWxkIG5hbWU9InRvcEJyaWdodCIvPgotCQk8ZmllbGQgbmFtZT0idG9wRGFyayIvPgotCQk8ZmllbGQgbmFtZT0idG9wTGVmdFJhZGl1cyIvPgotCQk8ZmllbGQgbmFtZT0idG9wT2Zmc2V0IiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0idG9wUmlnaHRSYWRpdXMiLz4KLQkJPGZpZWxkIG5hbWU9InRvdWNoc2NyZWVuQmxvY2tzRm9jdXMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0idHJhY2siIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0idHJhY2tUaW50IiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9InRyYWNrVGludE1vZGUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0idHJhbnNjcmlwdE1vZGUiLz4KLQkJPGZpZWxkIG5hbWU9InRyYW5zZm9ybVBpdm90WCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0cmFuc2Zvcm1QaXZvdFkiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0idHJhbnNpdGlvbiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0cmFuc2l0aW9uR3JvdXAiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0idHJhbnNpdGlvbk5hbWUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0idHJhbnNpdGlvbk9yZGVyaW5nIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9InRyYW5zaXRpb25WaXNpYmlsaXR5TW9kZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0cmFuc2xhdGVYIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InRyYW5zbGF0ZVkiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0idHJhbnNsYXRpb25YIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InRyYW5zbGF0aW9uWSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0cmFuc2xhdGlvbloiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0idHJpbVBhdGhFbmQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0idHJpbVBhdGhPZmZzZXQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0idHJpbVBhdGhTdGFydCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0dGNJbmRleCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0dW5lckNvdW50IiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9InR1cm5TY3JlZW5PbiIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0eXBlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0eXBlZmFjZSIvPgotCQk8ZmllbGQgbmFtZT0idWlPcHRpb25zIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9InVuY2VydGFpbkdlc3R1cmVDb2xvciIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9InVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJ1bnNlbGVjdGVkQWxwaGEiLz4KLQkJPGZpZWxkIG5hbWU9InVwZGF0ZVBlcmlvZE1pbGxpcyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9InVzZTMyYml0QWJpIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9InVzZURlZmF1bHRNYXJnaW5zIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9InVzZUludHJpbnNpY1NpemVBc01pbmltdW0iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0idXNlTGV2ZWwiLz4KLQkJPGZpZWxkIG5hbWU9InVzZXJWaXNpYmxlIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0idXNlc0NsZWFydGV4dFRyYWZmaWMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0idmFsdWUiLz4KLQkJPGZpZWxkIG5hbWU9InZhbHVlRnJvbSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2YWx1ZVRvIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InZhbHVlVHlwZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2YXJpYWJsZVBhZGRpbmciLz4KLQkJPGZpZWxkIG5hbWU9InZlbmRvciIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ2ZXJzaW9uIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9InZlcnNpb25Db2RlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2ZXJzaW9uQ29kZU1ham9yIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9InZlcnNpb25NYWpvciIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ2ZXJzaW9uTmFtZSIvPgotCQk8ZmllbGQgbmFtZT0idmVydGljYWxDb3JyZWN0aW9uIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0idmVydGljYWxEaXZpZGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2ZXJ0aWNhbEdhcCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9InZlcnRpY2FsU2Nyb2xsYmFyUG9zaXRpb24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0idmVydGljYWxTcGFjaW5nIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2aWV3cG9ydEhlaWdodCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2aWV3cG9ydFdpZHRoIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InZpc2liaWxpdHkiLz4KLQkJPGZpZWxkIG5hbWU9InZpc2libGUiLz4KLQkJPGZpZWxkIG5hbWU9InZpc2libGVUb0luc3RhbnRBcHBzIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9InZtU2FmZU1vZGUiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ2b2ljZUljb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0idm9pY2VMYW5ndWFnZSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9InZvaWNlTGFuZ3VhZ2VNb2RlbCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9InZvaWNlTWF4UmVzdWx0cyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9InZvaWNlUHJvbXB0VGV4dCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9InZvaWNlU2VhcmNoTW9kZSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IndhbGxwYXBlckNsb3NlRW50ZXJBbmltYXRpb24iIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ3YWxscGFwZXJDbG9zZUV4aXRBbmltYXRpb24iIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ3YWxscGFwZXJJbnRyYUNsb3NlRW50ZXJBbmltYXRpb24iIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ3YWxscGFwZXJJbnRyYUNsb3NlRXhpdEFuaW1hdGlvbiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IndhbGxwYXBlckludHJhT3BlbkVudGVyQW5pbWF0aW9uIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0id2FsbHBhcGVySW50cmFPcGVuRXhpdEFuaW1hdGlvbiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IndhbGxwYXBlck9wZW5FbnRlckFuaW1hdGlvbiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IndhbGxwYXBlck9wZW5FeGl0QW5pbWF0aW9uIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0id2ViVGV4dFZpZXdTdHlsZSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IndlYlZpZXdTdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0id2Vla0RheVRleHRBcHBlYXJhbmNlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IndlZWtOdW1iZXJDb2xvciIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0id2Vla1NlcGFyYXRvckxpbmVDb2xvciIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0id2VpZ2h0U3VtIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aWRnZXRDYXRlZ29yeSIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ3aWRnZXRGZWF0dXJlcyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ3aWRnZXRMYXlvdXQiLz4KLQkJPGZpZWxkIG5hbWU9IndpZHRoIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dBY3Rpb25CYXIiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93QWN0aW9uQmFyT3ZlcmxheSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dBY3Rpb25Nb2RlT3ZlcmxheSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dBY3Rpdml0eVRyYW5zaXRpb25zIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IndpbmRvd0FsbG93RW50ZXJUcmFuc2l0aW9uT3ZlcmxhcCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dBbGxvd1JldHVyblRyYW5zaXRpb25PdmVybGFwIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IndpbmRvd0FuaW1hdGlvblN0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dCYWNrZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dCYWNrZ3JvdW5kRmFsbGJhY2siIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93Q2xpcFRvT3V0bGluZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dDbG9zZU9uVG91Y2hPdXRzaWRlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IndpbmRvd0NvbnRlbnRPdmVybGF5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dDb250ZW50VHJhbnNpdGlvbk1hbmFnZXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93Q29udGVudFRyYW5zaXRpb25zIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IndpbmRvd0Rpc2FibGVQcmV2aWV3IiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93RHJhd3NTeXN0ZW1CYXJCYWNrZ3JvdW5kcyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dFbGV2YXRpb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93RW5hYmxlU3BsaXRUb3VjaCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dFbnRlckFuaW1hdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93RW50ZXJUcmFuc2l0aW9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IndpbmRvd0V4aXRBbmltYXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9IndpbmRvd0V4aXRUcmFuc2l0aW9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IndpbmRvd0ZyYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dGdWxsc2NyZWVuIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dIaWRlQW5pbWF0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dJc0Zsb2F0aW5nIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dJc1RyYW5zbHVjZW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dMYXlvdXRJbkRpc3BsYXlDdXRvdXRNb2RlIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IndpbmRvd0xpZ2h0TmF2aWdhdGlvbkJhciIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dMaWdodFN0YXR1c0JhciIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dNaW5XaWR0aE1ham9yIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IndpbmRvd01pbldpZHRoTWlub3IiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93Tm9EaXNwbGF5IiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93Tm9UaXRsZSIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93T3ZlcnNjYW4iIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93UmVlbnRlclRyYW5zaXRpb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93UmV0dXJuVHJhbnNpdGlvbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dTaGFyZWRFbGVtZW50RW50ZXJUcmFuc2l0aW9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IndpbmRvd1NoYXJlZEVsZW1lbnRFeGl0VHJhbnNpdGlvbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dTaGFyZWRFbGVtZW50UmVlbnRlclRyYW5zaXRpb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93U2hhcmVkRWxlbWVudFJldHVyblRyYW5zaXRpb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93U2hhcmVkRWxlbWVudHNVc2VPdmVybGF5IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IndpbmRvd1Nob3dBbmltYXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9IndpbmRvd1Nob3dXYWxscGFwZXIiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dTb2Z0SW5wdXRNb2RlIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93U3BsYXNoc2NyZWVuQ29udGVudCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dTd2lwZVRvRGlzbWlzcyIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dUaXRsZUJhY2tncm91bmRTdHlsZSIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93VGl0bGVTaXplIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dUaXRsZVN0eWxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dUcmFuc2l0aW9uQmFja2dyb3VuZEZhZGVEdXJhdGlvbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dUcmFuc2x1Y2VudE5hdmlnYXRpb24iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0id2luZG93VHJhbnNsdWNlbnRTdGF0dXMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0id3JpdGVQZXJtaXNzaW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJ4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ4bGFyZ2VTY3JlZW5zIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCQk8ZmllbGQgbmFtZT0ieWVhckxpc3RJdGVtVGV4dEFwcGVhcmFuY2UiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9InllYXJMaXN0U2VsZWN0b3JDb2xvciIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0ieWVzTm9QcmVmZXJlbmNlU3R5bGUiLz4KLQkJPGZpZWxkIG5hbWU9InpBZGp1c3RtZW50Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9SJGJvb2wiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvUiRjb2xvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJiYWNrZ3JvdW5kX2RhcmsiLz4KLQkJPGZpZWxkIG5hbWU9ImJhY2tncm91bmRfbGlnaHQiLz4KLQkJPGZpZWxkIG5hbWU9ImJsYWNrIi8+Ci0JCTxmaWVsZCBuYW1lPSJkYXJrZXJfZ3JheSIvPgotCQk8ZmllbGQgbmFtZT0iaG9sb19ibHVlX2JyaWdodCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJob2xvX2JsdWVfZGFyayIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJob2xvX2JsdWVfbGlnaHQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iaG9sb19ncmVlbl9kYXJrIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9ImhvbG9fZ3JlZW5fbGlnaHQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iaG9sb19vcmFuZ2VfZGFyayIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJob2xvX29yYW5nZV9saWdodCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJob2xvX3B1cnBsZSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJob2xvX3JlZF9kYXJrIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9ImhvbG9fcmVkX2xpZ2h0IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9InByaW1hcnlfdGV4dF9kYXJrIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0icHJpbWFyeV90ZXh0X2Rhcmtfbm9kaXNhYmxlIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0icHJpbWFyeV90ZXh0X2xpZ2h0IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0icHJpbWFyeV90ZXh0X2xpZ2h0X25vZGlzYWJsZSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9InNlY29uZGFyeV90ZXh0X2RhcmsiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzZWNvbmRhcnlfdGV4dF9kYXJrX25vZGlzYWJsZSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9InNlY29uZGFyeV90ZXh0X2xpZ2h0IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0ic2Vjb25kYXJ5X3RleHRfbGlnaHRfbm9kaXNhYmxlIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0idGFiX2luZGljYXRvcl90ZXh0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXJ0aWFyeV90ZXh0X2RhcmsiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXJ0aWFyeV90ZXh0X2xpZ2h0IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0idHJhbnNwYXJlbnQiLz4KLQkJPGZpZWxkIG5hbWU9IndoaXRlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aWRnZXRfZWRpdHRleHRfZGFyayIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvUiRkaW1lbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJhcHBfaWNvbl9zaXplIi8+Ci0JCTxmaWVsZCBuYW1lPSJkaWFsb2dfbWluX3dpZHRoX21ham9yIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImRpYWxvZ19taW5fd2lkdGhfbWlub3IiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0ibm90aWZpY2F0aW9uX2xhcmdlX2ljb25faGVpZ2h0IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Im5vdGlmaWNhdGlvbl9sYXJnZV9pY29uX3dpZHRoIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InRodW1ibmFpbF9oZWlnaHQiLz4KLQkJPGZpZWxkIG5hbWU9InRodW1ibmFpbF93aWR0aCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvUiRkcmF3YWJsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbGVydF9kYXJrX2ZyYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbGVydF9saWdodF9mcmFtZSIvPgotCQk8ZmllbGQgbmFtZT0iYXJyb3dfZG93bl9mbG9hdCIvPgotCQk8ZmllbGQgbmFtZT0iYXJyb3dfdXBfZmxvYXQiLz4KLQkJPGZpZWxkIG5hbWU9ImJvdHRvbV9iYXIiLz4KLQkJPGZpZWxkIG5hbWU9ImJ0bl9kZWZhdWx0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJidG5fZGVmYXVsdF9zbWFsbCIvPgotCQk8ZmllbGQgbmFtZT0iYnRuX2RpYWxvZyIvPgotCQk8ZmllbGQgbmFtZT0iYnRuX2Ryb3Bkb3duIi8+Ci0JCTxmaWVsZCBuYW1lPSJidG5fbWludXMiLz4KLQkJPGZpZWxkIG5hbWU9ImJ0bl9wbHVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJidG5fcmFkaW8iLz4KLQkJPGZpZWxkIG5hbWU9ImJ0bl9zdGFyIi8+Ci0JCTxmaWVsZCBuYW1lPSJidG5fc3Rhcl9iaWdfb2ZmIi8+Ci0JCTxmaWVsZCBuYW1lPSJidG5fc3Rhcl9iaWdfb24iLz4KLQkJPGZpZWxkIG5hbWU9ImJ1dHRvbl9vbm9mZl9pbmRpY2F0b3Jfb2ZmIi8+Ci0JCTxmaWVsZCBuYW1lPSJidXR0b25fb25vZmZfaW5kaWNhdG9yX29uIi8+Ci0JCTxmaWVsZCBuYW1lPSJjaGVja2JveF9vZmZfYmFja2dyb3VuZCIvPgotCQk8ZmllbGQgbmFtZT0iY2hlY2tib3hfb25fYmFja2dyb3VuZCIvPgotCQk8ZmllbGQgbmFtZT0iZGFya19oZWFkZXIiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJkaWFsb2dfZnJhbWUiLz4KLQkJPGZpZWxkIG5hbWU9ImRpYWxvZ19ob2xvX2RhcmtfZnJhbWUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZGlhbG9nX2hvbG9fbGlnaHRfZnJhbWUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZGl2aWRlcl9ob3Jpem9udGFsX2JyaWdodCIvPgotCQk8ZmllbGQgbmFtZT0iZGl2aWRlcl9ob3Jpem9udGFsX2RhcmsiLz4KLQkJPGZpZWxkIG5hbWU9ImRpdmlkZXJfaG9yaXpvbnRhbF9kaW1fZGFyayIvPgotCQk8ZmllbGQgbmFtZT0iZGl2aWRlcl9ob3Jpem9udGFsX3RleHRmaWVsZCIvPgotCQk8ZmllbGQgbmFtZT0iZWRpdF90ZXh0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJlZGl0Ym94X2JhY2tncm91bmQiLz4KLQkJPGZpZWxkIG5hbWU9ImVkaXRib3hfYmFja2dyb3VuZF9ub3JtYWwiLz4KLQkJPGZpZWxkIG5hbWU9ImVkaXRib3hfZHJvcGRvd25fZGFya19mcmFtZSIvPgotCQk8ZmllbGQgbmFtZT0iZWRpdGJveF9kcm9wZG93bl9saWdodF9mcmFtZSIvPgotCQk8ZmllbGQgbmFtZT0iZ2FsbGVyeV90aHVtYiIvPgotCQk8ZmllbGQgbmFtZT0iaWNfYnRuX3NwZWFrX25vdyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImljX2RlbGV0ZSIvPgotCQk8ZmllbGQgbmFtZT0iaWNfZGlhbG9nX2FsZXJ0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpY19kaWFsb2dfZGlhbGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19kaWFsb2dfZW1haWwiLz4KLQkJPGZpZWxkIG5hbWU9ImljX2RpYWxvZ19pbmZvIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19kaWFsb2dfbWFwIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19pbnB1dF9hZGQiLz4KLQkJPGZpZWxkIG5hbWU9ImljX2lucHV0X2RlbGV0ZSIvPgotCQk8ZmllbGQgbmFtZT0iaWNfaW5wdXRfZ2V0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpY19sb2NrX2lkbGVfYWxhcm0iLz4KLQkJPGZpZWxkIG5hbWU9ImljX2xvY2tfaWRsZV9jaGFyZ2luZyIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbG9ja19pZGxlX2xvY2siLz4KLQkJPGZpZWxkIG5hbWU9ImljX2xvY2tfaWRsZV9sb3dfYmF0dGVyeSIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbG9ja19sb2NrIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19sb2NrX3Bvd2VyX29mZiIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbG9ja19zaWxlbnRfbW9kZSIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbG9ja19zaWxlbnRfbW9kZV9vZmYiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lZGlhX2ZmIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZWRpYV9uZXh0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZWRpYV9wYXVzZSIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVkaWFfcGxheSIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVkaWFfcHJldmlvdXMiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lZGlhX3JldyIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9hZGQiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfYWdlbmRhIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZW51X2Fsd2F5c19sYW5kc2NhcGVfcG9ydHJhaXQiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfY2FsbCIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9jYW1lcmEiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfY2xvc2VfY2xlYXJfY2FuY2VsIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZW51X2NvbXBhc3MiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfY3JvcCIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9kYXkiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfZGVsZXRlIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZW51X2RpcmVjdGlvbnMiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfZWRpdCIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9nYWxsZXJ5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZW51X2hlbHAiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfaW5mb19kZXRhaWxzIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZW51X21hbmFnZSIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9tYXBtb2RlIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZW51X21vbnRoIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZW51X21vcmUiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfbXlfY2FsZW5kYXIiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfbXlsb2NhdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9teXBsYWNlcyIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9wcmVmZXJlbmNlcyIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9yZWNlbnRfaGlzdG9yeSIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9yZXBvcnRfaW1hZ2UiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfcmV2ZXJ0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZW51X3JvdGF0ZSIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9zYXZlIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZW51X3NlYXJjaCIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9zZW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZW51X3NldF9hcyIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9zaGFyZSIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9zbGlkZXNob3ciLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfc29ydF9hbHBoYWJldGljYWxseSIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV9zb3J0X2J5X3NpemUiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfdG9kYXkiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfdXBsb2FkIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZW51X3VwbG9hZF95b3VfdHViZSIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbWVudV92aWV3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpY19tZW51X3dlZWsiLz4KLQkJPGZpZWxkIG5hbWU9ImljX21lbnVfem9vbSIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbm90aWZpY2F0aW9uX2NsZWFyX2FsbCIvPgotCQk8ZmllbGQgbmFtZT0iaWNfbm90aWZpY2F0aW9uX292ZXJsYXkiLz4KLQkJPGZpZWxkIG5hbWU9ImljX3BhcnRpYWxfc2VjdXJlIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19wb3B1cF9kaXNrX2Z1bGwiLz4KLQkJPGZpZWxkIG5hbWU9ImljX3BvcHVwX3JlbWluZGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19wb3B1cF9zeW5jIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY19zZWFyY2hfY2F0ZWdvcnlfZGVmYXVsdCIvPgotCQk8ZmllbGQgbmFtZT0iaWNfc2VjdXJlIi8+Ci0JCTxmaWVsZCBuYW1lPSJsaXN0X3NlbGVjdG9yX2JhY2tncm91bmQiLz4KLQkJPGZpZWxkIG5hbWU9Im1lbnVfZnJhbWUiLz4KLQkJPGZpZWxkIG5hbWU9Im1lbnVfZnVsbF9mcmFtZSIvPgotCQk8ZmllbGQgbmFtZT0ibWVudWl0ZW1fYmFja2dyb3VuZCIvPgotCQk8ZmllbGQgbmFtZT0icGljdHVyZV9mcmFtZSIvPgotCQk8ZmllbGQgbmFtZT0icHJlc2VuY2VfYXVkaW9fYXdheSIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9InByZXNlbmNlX2F1ZGlvX2J1c3kiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwcmVzZW5jZV9hdWRpb19vbmxpbmUiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwcmVzZW5jZV9hd2F5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwcmVzZW5jZV9idXN5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwcmVzZW5jZV9pbnZpc2libGUiLz4KLQkJPGZpZWxkIG5hbWU9InByZXNlbmNlX29mZmxpbmUiLz4KLQkJPGZpZWxkIG5hbWU9InByZXNlbmNlX29ubGluZSIvPgotCQk8ZmllbGQgbmFtZT0icHJlc2VuY2VfdmlkZW9fYXdheSIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9InByZXNlbmNlX3ZpZGVvX2J1c3kiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwcmVzZW5jZV92aWRlb19vbmxpbmUiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9ncmVzc19ob3Jpem9udGFsIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9ncmVzc19pbmRldGVybWluYXRlX2hvcml6b250YWwiLz4KLQkJPGZpZWxkIG5hbWU9InJhZGlvYnV0dG9uX29mZl9iYWNrZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJyYWRpb2J1dHRvbl9vbl9iYWNrZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJzY3JlZW5fYmFja2dyb3VuZF9kYXJrIi8+Ci0JCTxmaWVsZCBuYW1lPSJzY3JlZW5fYmFja2dyb3VuZF9kYXJrX3RyYW5zcGFyZW50IiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0ic2NyZWVuX2JhY2tncm91bmRfbGlnaHQiLz4KLQkJPGZpZWxkIG5hbWU9InNjcmVlbl9iYWNrZ3JvdW5kX2xpZ2h0X3RyYW5zcGFyZW50IiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0ic3Bpbm5lcl9iYWNrZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJzcGlubmVyX2Ryb3Bkb3duX2JhY2tncm91bmQiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXJfYmlnX29mZiIvPgotCQk8ZmllbGQgbmFtZT0ic3Rhcl9iaWdfb24iLz4KLQkJPGZpZWxkIG5hbWU9InN0YXJfb2ZmIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGFyX29uIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0X25vdGlmeV9jYWxsX211dGUiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRfbm90aWZ5X2NoYXQiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRfbm90aWZ5X2Vycm9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0X25vdGlmeV9taXNzZWRfY2FsbCIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdF9ub3RpZnlfbW9yZSIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdF9ub3RpZnlfc2RjYXJkIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0X25vdGlmeV9zZGNhcmRfcHJlcGFyZSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRfbm90aWZ5X3NkY2FyZF91c2IiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRfbm90aWZ5X3N5bmMiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRfbm90aWZ5X3N5bmNfbm9hbmltIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0X25vdGlmeV92b2ljZW1haWwiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRfc3lzX2RhdGFfYmx1ZXRvb3RoIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0X3N5c19kb3dubG9hZCIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdF9zeXNfZG93bmxvYWRfZG9uZSIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdF9zeXNfaGVhZHNldCIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdF9zeXNfcGhvbmVfY2FsbCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRfc3lzX3Bob25lX2NhbGxfZm9yd2FyZCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRfc3lzX3Bob25lX2NhbGxfb25faG9sZCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRfc3lzX3NwZWFrZXJwaG9uZSIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdF9zeXNfdXBsb2FkIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0X3N5c191cGxvYWRfZG9uZSIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdF9zeXNfdnBfcGhvbmVfY2FsbCIgc2luY2U9IjQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0X3N5c192cF9waG9uZV9jYWxsX29uX2hvbGQiIHNpbmNlPSI0IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdF9zeXNfd2FybmluZyIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdHVzX2Jhcl9pdGVtX2FwcF9iYWNrZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0dXNfYmFyX2l0ZW1fYmFja2dyb3VuZCIvPgotCQk8ZmllbGQgbmFtZT0ic3ltX2FjdGlvbl9jYWxsIi8+Ci0JCTxmaWVsZCBuYW1lPSJzeW1fYWN0aW9uX2NoYXQiLz4KLQkJPGZpZWxkIG5hbWU9InN5bV9hY3Rpb25fZW1haWwiLz4KLQkJPGZpZWxkIG5hbWU9InN5bV9jYWxsX2luY29taW5nIi8+Ci0JCTxmaWVsZCBuYW1lPSJzeW1fY2FsbF9taXNzZWQiLz4KLQkJPGZpZWxkIG5hbWU9InN5bV9jYWxsX291dGdvaW5nIi8+Ci0JCTxmaWVsZCBuYW1lPSJzeW1fY29udGFjdF9jYXJkIi8+Ci0JCTxmaWVsZCBuYW1lPSJzeW1fZGVmX2FwcF9pY29uIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aXRsZV9iYXIiLz4KLQkJPGZpZWxkIG5hbWU9InRpdGxlX2Jhcl90YWxsIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0idG9hc3RfZnJhbWUiLz4KLQkJPGZpZWxkIG5hbWU9Inpvb21fcGxhdGUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL1IkZnJhY3Rpb24iIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL1IkaWQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iYWNjZXNzaWJpbGl0eUFjdGlvbkNvbnRleHRDbGljayIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY2Nlc3NpYmlsaXR5QWN0aW9uSGlkZVRvb2x0aXAiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iYWNjZXNzaWJpbGl0eUFjdGlvbk1vdmVXaW5kb3ciIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iYWNjZXNzaWJpbGl0eUFjdGlvblNjcm9sbERvd24iIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iYWNjZXNzaWJpbGl0eUFjdGlvblNjcm9sbExlZnQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iYWNjZXNzaWJpbGl0eUFjdGlvblNjcm9sbFJpZ2h0IiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImFjY2Vzc2liaWxpdHlBY3Rpb25TY3JvbGxUb1Bvc2l0aW9uIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImFjY2Vzc2liaWxpdHlBY3Rpb25TY3JvbGxVcCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY2Nlc3NpYmlsaXR5QWN0aW9uU2V0UHJvZ3Jlc3MiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iYWNjZXNzaWJpbGl0eUFjdGlvblNob3dPblNjcmVlbiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY2Nlc3NpYmlsaXR5QWN0aW9uU2hvd1Rvb2x0aXAiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iYXV0b2ZpbGwiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iYmFja2dyb3VuZCIvPgotCQk8ZmllbGQgbmFtZT0iYnV0dG9uMSIvPgotCQk8ZmllbGQgbmFtZT0iYnV0dG9uMiIvPgotCQk8ZmllbGQgbmFtZT0iYnV0dG9uMyIvPgotCQk8ZmllbGQgbmFtZT0iY2FuZGlkYXRlc0FyZWEiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJjaGVja2JveCIvPgotCQk8ZmllbGQgbmFtZT0iY2xvc2VCdXR0b24iIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb250ZW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb3B5IiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iY29weVVybCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImN1c3RvbSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9ImN1dCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImVkaXQiLz4KLQkJPGZpZWxkIG5hbWU9ImVtcHR5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJleHRyYWN0QXJlYSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImhpbnQiLz4KLQkJPGZpZWxkIG5hbWU9ImhvbWUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iaWNvbiIvPgotCQk8ZmllbGQgbmFtZT0iaWNvbjEiLz4KLQkJPGZpZWxkIG5hbWU9Imljb24yIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY29uX2ZyYW1lIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9ImlucHV0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpbnB1dEFyZWEiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbnB1dEV4dHJhY3RFZGl0VGV4dCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9ImtleWJvYXJkVmlldyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9Imxpc3QiLz4KLQkJPGZpZWxkIG5hbWU9Imxpc3RfY29udGFpbmVyIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Im1hc2siIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ibWVzc2FnZSIvPgotCQk8ZmllbGQgbmFtZT0ibmF2aWdhdGlvbkJhckJhY2tncm91bmQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0icGFzdGUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJwYXN0ZUFzUGxhaW5UZXh0IiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9InByaW1hcnkiLz4KLQkJPGZpZWxkIG5hbWU9InByb2dyZXNzIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZWRvIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9InJlcGxhY2VUZXh0IiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9InNlY29uZGFyeVByb2dyZXNzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZWxlY3RBbGwiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZWxlY3RlZEljb24iLz4KLQkJPGZpZWxkIG5hbWU9InNoYXJlVGV4dCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGFydFNlbGVjdGluZ1RleHQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0dXNCYXJCYWNrZ3JvdW5kIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InN0b3BTZWxlY3RpbmdUZXh0IiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0ic3VtbWFyeSIvPgotCQk8ZmllbGQgbmFtZT0ic3dpdGNoSW5wdXRNZXRob2QiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzd2l0Y2hfd2lkZ2V0IiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9InRhYmNvbnRlbnQiLz4KLQkJPGZpZWxkIG5hbWU9InRhYmhvc3QiLz4KLQkJPGZpZWxkIG5hbWU9InRhYnMiLz4KLQkJPGZpZWxkIG5hbWU9InRleHQxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0MiIvPgotCQk8ZmllbGQgbmFtZT0idGV4dEFzc2lzdCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0aXRsZSIvPgotCQk8ZmllbGQgbmFtZT0idG9nZ2xlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ1bmRvIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IndpZGdldF9mcmFtZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvUiRpbnRlZ2VyIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbmZpZ19sb25nQW5pbVRpbWUiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbmZpZ19tZWRpdW1BbmltVGltZSIvPgotCQk8ZmllbGQgbmFtZT0iY29uZmlnX3Nob3J0QW5pbVRpbWUiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fbWF4bnVtIiBzaW5jZT0iMTQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL1IkaW50ZXJwb2xhdG9yIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY2NlbGVyYXRlX2N1YmljIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY2NlbGVyYXRlX2RlY2VsZXJhdGUiLz4KLQkJPGZpZWxkIG5hbWU9ImFjY2VsZXJhdGVfcXVhZCIvPgotCQk8ZmllbGQgbmFtZT0iYWNjZWxlcmF0ZV9xdWludCIvPgotCQk8ZmllbGQgbmFtZT0iYW50aWNpcGF0ZSIvPgotCQk8ZmllbGQgbmFtZT0iYW50aWNpcGF0ZV9vdmVyc2hvb3QiLz4KLQkJPGZpZWxkIG5hbWU9ImJvdW5jZSIvPgotCQk8ZmllbGQgbmFtZT0iY3ljbGUiLz4KLQkJPGZpZWxkIG5hbWU9ImRlY2VsZXJhdGVfY3ViaWMiLz4KLQkJPGZpZWxkIG5hbWU9ImRlY2VsZXJhdGVfcXVhZCIvPgotCQk8ZmllbGQgbmFtZT0iZGVjZWxlcmF0ZV9xdWludCIvPgotCQk8ZmllbGQgbmFtZT0iZmFzdF9vdXRfZXh0cmFfc2xvd19pbiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmYXN0X291dF9saW5lYXJfaW4iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iZmFzdF9vdXRfc2xvd19pbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJsaW5lYXIiLz4KLQkJPGZpZWxkIG5hbWU9ImxpbmVhcl9vdXRfc2xvd19pbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJvdmVyc2hvb3QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL1IkbGF5b3V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGl2aXR5X2xpc3RfaXRlbSIvPgotCQk8ZmllbGQgbmFtZT0iYnJvd3Nlcl9saW5rX2NvbnRleHRfaGVhZGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJleHBhbmRhYmxlX2xpc3RfY29udGVudCIvPgotCQk8ZmllbGQgbmFtZT0ibGlzdF9jb250ZW50IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InByZWZlcmVuY2VfY2F0ZWdvcnkiLz4KLQkJPGZpZWxkIG5hbWU9InNlbGVjdF9kaWFsb2dfaXRlbSIvPgotCQk8ZmllbGQgbmFtZT0ic2VsZWN0X2RpYWxvZ19tdWx0aWNob2ljZSIvPgotCQk8ZmllbGQgbmFtZT0ic2VsZWN0X2RpYWxvZ19zaW5nbGVjaG9pY2UiLz4KLQkJPGZpZWxkIG5hbWU9InNpbXBsZV9kcm9wZG93bl9pdGVtXzFsaW5lIi8+Ci0JCTxmaWVsZCBuYW1lPSJzaW1wbGVfZXhwYW5kYWJsZV9saXN0X2l0ZW1fMSIvPgotCQk8ZmllbGQgbmFtZT0ic2ltcGxlX2V4cGFuZGFibGVfbGlzdF9pdGVtXzIiLz4KLQkJPGZpZWxkIG5hbWU9InNpbXBsZV9nYWxsZXJ5X2l0ZW0iLz4KLQkJPGZpZWxkIG5hbWU9InNpbXBsZV9saXN0X2l0ZW1fMSIvPgotCQk8ZmllbGQgbmFtZT0ic2ltcGxlX2xpc3RfaXRlbV8yIi8+Ci0JCTxmaWVsZCBuYW1lPSJzaW1wbGVfbGlzdF9pdGVtX2FjdGl2YXRlZF8xIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InNpbXBsZV9saXN0X2l0ZW1fYWN0aXZhdGVkXzIiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0ic2ltcGxlX2xpc3RfaXRlbV9jaGVja2VkIi8+Ci0JCTxmaWVsZCBuYW1lPSJzaW1wbGVfbGlzdF9pdGVtX211bHRpcGxlX2Nob2ljZSIvPgotCQk8ZmllbGQgbmFtZT0ic2ltcGxlX2xpc3RfaXRlbV9zaW5nbGVfY2hvaWNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJzaW1wbGVfc2VsZWN0YWJsZV9saXN0X2l0ZW0iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0ic2ltcGxlX3NwaW5uZXJfZHJvcGRvd25faXRlbSIvPgotCQk8ZmllbGQgbmFtZT0ic2ltcGxlX3NwaW5uZXJfaXRlbSIvPgotCQk8ZmllbGQgbmFtZT0idGVzdF9saXN0X2l0ZW0iLz4KLQkJPGZpZWxkIG5hbWU9InR3b19saW5lX2xpc3RfaXRlbSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvUiRtZW51IiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9SJG1pcG1hcCIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0ic3ltX2RlZl9hcHBfaWNvbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvUiRwbHVyYWxzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL1IkcmF3IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL1Ikc3RyaW5nIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlZpZGVvVmlld19lcnJvcl9idXR0b24iLz4KLQkJPGZpZWxkIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X2ludmFsaWRfcHJvZ3Jlc3NpdmVfcGxheWJhY2siIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF91bmtub3duIi8+Ci0JCTxmaWVsZCBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGl0bGUiLz4KLQkJPGZpZWxkIG5hbWU9ImF1dG9maWxsIiBzaW5jZT0iMjciLz4KLQkJPGZpZWxkIG5hbWU9ImNhbmNlbCIvPgotCQk8ZmllbGQgbmFtZT0iY29weSIvPgotCQk8ZmllbGQgbmFtZT0iY29weVVybCIvPgotCQk8ZmllbGQgbmFtZT0iY3V0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkZWZhdWx0TXNpc2RuQWxwaGFUYWciLz4KLQkJPGZpZWxkIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIvPgotCQk8ZmllbGQgbmFtZT0iZGlhbG9nX2FsZXJ0X3RpdGxlIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iZW1wdHlQaG9uZU51bWJlciIvPgotCQk8ZmllbGQgbmFtZT0iZmluZ2VycHJpbnRfaWNvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Imh0dHBFcnJvckJhZFVybCIvPgotCQk8ZmllbGQgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRTY2hlbWUiLz4KLQkJPGZpZWxkIG5hbWU9Im5vIi8+Ci0JCTxmaWVsZCBuYW1lPSJvayIvPgotCQk8ZmllbGQgbmFtZT0icGFzdGUiLz4KLQkJPGZpZWxkIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0ic2VhcmNoX2dvIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZWxlY3RBbGwiLz4KLQkJPGZpZWxkIG5hbWU9InNlbGVjdFRleHRNb2RlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0idW5rbm93bk5hbWUiLz4KLQkJPGZpZWxkIG5hbWU9InVudGl0bGVkIi8+Ci0JCTxmaWVsZCBuYW1lPSJ5ZXMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL1Ikc3R5bGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQW5pbWF0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJBbmltYXRpb25fQWN0aXZpdHkiLz4KLQkJPGZpZWxkIG5hbWU9IkFuaW1hdGlvbl9EaWFsb2ciLz4KLQkJPGZpZWxkIG5hbWU9IkFuaW1hdGlvbl9JbnB1dE1ldGhvZCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkFuaW1hdGlvbl9Ub2FzdCIvPgotCQk8ZmllbGQgbmFtZT0iQW5pbWF0aW9uX1RyYW5zbHVjZW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEZXZpY2VEZWZhdWx0X0J1dHRvbkJhciIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEZXZpY2VEZWZhdWx0X0J1dHRvbkJhcl9BbGVydERpYWxvZyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEZXZpY2VEZWZhdWx0X0xpZ2h0X0J1dHRvbkJhciIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEZXZpY2VEZWZhdWx0X0xpZ2h0X0J1dHRvbkJhcl9BbGVydERpYWxvZyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEZXZpY2VEZWZhdWx0X0xpZ2h0X1NlZ21lbnRlZEJ1dHRvbiIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEZXZpY2VEZWZhdWx0X1NlZ21lbnRlZEJ1dHRvbiIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIb2xvX0J1dHRvbkJhciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJIb2xvX0J1dHRvbkJhcl9BbGVydERpYWxvZyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJIb2xvX0xpZ2h0X0J1dHRvbkJhciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJIb2xvX0xpZ2h0X0J1dHRvbkJhcl9BbGVydERpYWxvZyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJIb2xvX0xpZ2h0X1NlZ21lbnRlZEJ1dHRvbiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJIb2xvX1NlZ21lbnRlZEJ1dHRvbiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJNZWRpYUJ1dHRvbiIvPgotCQk8ZmllbGQgbmFtZT0iTWVkaWFCdXR0b25fRmZ3ZCIvPgotCQk8ZmllbGQgbmFtZT0iTWVkaWFCdXR0b25fTmV4dCIvPgotCQk8ZmllbGQgbmFtZT0iTWVkaWFCdXR0b25fUGF1c2UiLz4KLQkJPGZpZWxkIG5hbWU9Ik1lZGlhQnV0dG9uX1BsYXkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1lZGlhQnV0dG9uX1ByZXZpb3VzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNZWRpYUJ1dHRvbl9SZXciLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9EZXZpY2VEZWZhdWx0IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0RldmljZURlZmF1bHRfRGlhbG9nV2luZG93VGl0bGUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9JbnZlcnNlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0RldmljZURlZmF1bHRfTGFyZ2UiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9MYXJnZV9JbnZlcnNlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0RldmljZURlZmF1bHRfTWVkaXVtIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0RldmljZURlZmF1bHRfTWVkaXVtX0ludmVyc2UiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9TZWFyY2hSZXN1bHRfU3VidGl0bGUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9TZWFyY2hSZXN1bHRfVGl0bGUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9TbWFsbCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9EZXZpY2VEZWZhdWx0X1NtYWxsX0ludmVyc2UiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9XaWRnZXQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9XaWRnZXRfQWN0aW9uQmFyX01lbnUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9XaWRnZXRfQWN0aW9uQmFyX1N1YnRpdGxlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0RldmljZURlZmF1bHRfV2lkZ2V0X0FjdGlvbkJhcl9TdWJ0aXRsZV9JbnZlcnNlIiBzaW5jZT0iMTQiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9EZXZpY2VEZWZhdWx0X1dpZGdldF9BY3Rpb25CYXJfVGl0bGUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9XaWRnZXRfQWN0aW9uQmFyX1RpdGxlX0ludmVyc2UiIHNpbmNlPSIxNCIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0RldmljZURlZmF1bHRfV2lkZ2V0X0FjdGlvbk1vZGVfU3VidGl0bGUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9XaWRnZXRfQWN0aW9uTW9kZV9TdWJ0aXRsZV9JbnZlcnNlIiBzaW5jZT0iMTQiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9EZXZpY2VEZWZhdWx0X1dpZGdldF9BY3Rpb25Nb2RlX1RpdGxlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0RldmljZURlZmF1bHRfV2lkZ2V0X0FjdGlvbk1vZGVfVGl0bGVfSW52ZXJzZSIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9XaWRnZXRfQnV0dG9uIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0RldmljZURlZmF1bHRfV2lkZ2V0X0Ryb3BEb3duSGludCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9EZXZpY2VEZWZhdWx0X1dpZGdldF9Ecm9wRG93bkl0ZW0iIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9XaWRnZXRfRWRpdFRleHQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9XaWRnZXRfSWNvbk1lbnVfSXRlbSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9EZXZpY2VEZWZhdWx0X1dpZGdldF9Qb3B1cE1lbnUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9XaWRnZXRfUG9wdXBNZW51X0xhcmdlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0RldmljZURlZmF1bHRfV2lkZ2V0X1BvcHVwTWVudV9TbWFsbCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9EZXZpY2VEZWZhdWx0X1dpZGdldF9UYWJXaWRnZXQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9XaWRnZXRfVGV4dFZpZXciIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGV2aWNlRGVmYXVsdF9XaWRnZXRfVGV4dFZpZXdfUG9wdXBNZW51IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0RldmljZURlZmF1bHRfV2lkZ2V0X1RleHRWaWV3X1NwaW5uZXJJdGVtIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0RldmljZURlZmF1bHRfV2luZG93VGl0bGUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfRGlhbG9nV2luZG93VGl0bGUiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0hvbG8iIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfSG9sb19EaWFsb2dXaW5kb3dUaXRsZSIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9Ib2xvX0ludmVyc2UiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfSG9sb19MYXJnZSIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9Ib2xvX0xhcmdlX0ludmVyc2UiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfSG9sb19NZWRpdW0iIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfSG9sb19NZWRpdW1fSW52ZXJzZSIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9Ib2xvX1NlYXJjaFJlc3VsdF9TdWJ0aXRsZSIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9Ib2xvX1NlYXJjaFJlc3VsdF9UaXRsZSIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9Ib2xvX1NtYWxsIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0hvbG9fU21hbGxfSW52ZXJzZSIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9Ib2xvX1dpZGdldCIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9Ib2xvX1dpZGdldF9BY3Rpb25CYXJfTWVudSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9Ib2xvX1dpZGdldF9BY3Rpb25CYXJfU3VidGl0bGUiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfSG9sb19XaWRnZXRfQWN0aW9uQmFyX1N1YnRpdGxlX0ludmVyc2UiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfSG9sb19XaWRnZXRfQWN0aW9uQmFyX1RpdGxlIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0hvbG9fV2lkZ2V0X0FjdGlvbkJhcl9UaXRsZV9JbnZlcnNlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0hvbG9fV2lkZ2V0X0FjdGlvbk1vZGVfU3VidGl0bGUiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfSG9sb19XaWRnZXRfQWN0aW9uTW9kZV9TdWJ0aXRsZV9JbnZlcnNlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0hvbG9fV2lkZ2V0X0FjdGlvbk1vZGVfVGl0bGUiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfSG9sb19XaWRnZXRfQWN0aW9uTW9kZV9UaXRsZV9JbnZlcnNlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0hvbG9fV2lkZ2V0X0J1dHRvbiIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9Ib2xvX1dpZGdldF9Ecm9wRG93bkhpbnQiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfSG9sb19XaWRnZXRfRHJvcERvd25JdGVtIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0hvbG9fV2lkZ2V0X0VkaXRUZXh0IiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0hvbG9fV2lkZ2V0X0ljb25NZW51X0l0ZW0iIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfSG9sb19XaWRnZXRfUG9wdXBNZW51IiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0hvbG9fV2lkZ2V0X1BvcHVwTWVudV9MYXJnZSIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9Ib2xvX1dpZGdldF9Qb3B1cE1lbnVfU21hbGwiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfSG9sb19XaWRnZXRfVGFiV2lkZ2V0IiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0hvbG9fV2lkZ2V0X1RleHRWaWV3IiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0hvbG9fV2lkZ2V0X1RleHRWaWV3X1BvcHVwTWVudSIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9Ib2xvX1dpZGdldF9UZXh0Vmlld19TcGlubmVySXRlbSIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9Ib2xvX1dpbmRvd1RpdGxlIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0ludmVyc2UiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX0xhcmdlIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9MYXJnZV9JbnZlcnNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9Cb2R5MSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9Cb2R5MiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9CdXR0b24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfQ2FwdGlvbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9EaWFsb2dXaW5kb3dUaXRsZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9EaXNwbGF5MSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9EaXNwbGF5MiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9EaXNwbGF5MyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9EaXNwbGF5NCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9IZWFkbGluZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9JbnZlcnNlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX0xhcmdlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX0xhcmdlX0ludmVyc2UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfTWVkaXVtIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX01lZGl1bV9JbnZlcnNlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX01lbnUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfTm90aWZpY2F0aW9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX05vdGlmaWNhdGlvbl9FbXBoYXNpcyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9Ob3RpZmljYXRpb25fSW5mbyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9Ob3RpZmljYXRpb25fTGluZTIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfTm90aWZpY2F0aW9uX1RpbWUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfTm90aWZpY2F0aW9uX1RpdGxlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX1NlYXJjaFJlc3VsdF9TdWJ0aXRsZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9TZWFyY2hSZXN1bHRfVGl0bGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfU21hbGwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfU21hbGxfSW52ZXJzZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9TdWJoZWFkIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX1RpdGxlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX1dpZGdldCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9XaWRnZXRfQWN0aW9uQmFyX01lbnUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfV2lkZ2V0X0FjdGlvbkJhcl9TdWJ0aXRsZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9XaWRnZXRfQWN0aW9uQmFyX1N1YnRpdGxlX0ludmVyc2UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfV2lkZ2V0X0FjdGlvbkJhcl9UaXRsZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9XaWRnZXRfQWN0aW9uQmFyX1RpdGxlX0ludmVyc2UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfV2lkZ2V0X0FjdGlvbk1vZGVfU3VidGl0bGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfV2lkZ2V0X0FjdGlvbk1vZGVfU3VidGl0bGVfSW52ZXJzZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9XaWRnZXRfQWN0aW9uTW9kZV9UaXRsZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9XaWRnZXRfQWN0aW9uTW9kZV9UaXRsZV9JbnZlcnNlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX1dpZGdldF9CdXR0b24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfV2lkZ2V0X0J1dHRvbl9Cb3JkZXJsZXNzX0NvbG9yZWQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfV2lkZ2V0X0J1dHRvbl9Db2xvcmVkIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX1dpZGdldF9CdXR0b25fSW52ZXJzZSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9XaWRnZXRfRHJvcERvd25IaW50IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX1dpZGdldF9Ecm9wRG93bkl0ZW0iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfV2lkZ2V0X0VkaXRUZXh0IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX1dpZGdldF9JY29uTWVudV9JdGVtIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX1dpZGdldF9Qb3B1cE1lbnUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfV2lkZ2V0X1BvcHVwTWVudV9MYXJnZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9NYXRlcmlhbF9XaWRnZXRfUG9wdXBNZW51X1NtYWxsIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX1dpZGdldF9UYWJXaWRnZXQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfV2lkZ2V0X1RleHRWaWV3IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX1dpZGdldF9UZXh0Vmlld19Qb3B1cE1lbnUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfV2lkZ2V0X1RleHRWaWV3X1NwaW5uZXJJdGVtIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX1dpZGdldF9Ub29sYmFyX1N1YnRpdGxlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX1dpZGdldF9Ub29sYmFyX1RpdGxlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01hdGVyaWFsX1dpbmRvd1RpdGxlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX01lZGl1bSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfTWVkaXVtX0ludmVyc2UiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX1NtYWxsIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9TbWFsbF9JbnZlcnNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9TdGF0dXNCYXJfRXZlbnRDb250ZW50IiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfU3RhdHVzQmFyX0V2ZW50Q29udGVudF9UaXRsZSIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX1N0YXR1c0Jhcl9JY29uIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfU3RhdHVzQmFyX1RpdGxlIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfU3VnZ2VzdGlvbkhpZ2hsaWdodCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9UaGVtZSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfVGhlbWVfRGlhbG9nIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9XaWRnZXQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX1dpZGdldF9CdXR0b24iLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX1dpZGdldF9Ecm9wRG93bkhpbnQiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX1dpZGdldF9Ecm9wRG93bkl0ZW0iLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX1dpZGdldF9FZGl0VGV4dCIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfV2lkZ2V0X0ljb25NZW51X0l0ZW0iLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX1dpZGdldF9Qb3B1cE1lbnVfTGFyZ2UiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfV2lkZ2V0X1BvcHVwTWVudV9TbWFsbCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9XaWRnZXRfVGFiV2lkZ2V0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUZXh0QXBwZWFyYW5jZV9XaWRnZXRfVGV4dFZpZXciLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX1dpZGdldF9UZXh0Vmlld19Qb3B1cE1lbnUiLz4KLQkJPGZpZWxkIG5hbWU9IlRleHRBcHBlYXJhbmNlX1dpZGdldF9UZXh0Vmlld19TcGlubmVySXRlbSIvPgotCQk8ZmllbGQgbmFtZT0iVGV4dEFwcGVhcmFuY2VfV2luZG93VGl0bGUiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZU92ZXJsYXkiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVPdmVybGF5X01hdGVyaWFsIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lT3ZlcmxheV9NYXRlcmlhbF9BY3Rpb25CYXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVPdmVybGF5X01hdGVyaWFsX0RhcmsiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVPdmVybGF5X01hdGVyaWFsX0RhcmtfQWN0aW9uQmFyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lT3ZlcmxheV9NYXRlcmlhbF9EaWFsb2ciIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVPdmVybGF5X01hdGVyaWFsX0RpYWxvZ19BbGVydCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZU92ZXJsYXlfTWF0ZXJpYWxfTGlnaHQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfQmxhY2siLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0JsYWNrX05vVGl0bGVCYXIiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0JsYWNrX05vVGl0bGVCYXJfRnVsbHNjcmVlbiIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfRGV2aWNlRGVmYXVsdCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9EZXZpY2VEZWZhdWx0X0RpYWxvZyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9EZXZpY2VEZWZhdWx0X0RpYWxvZ1doZW5MYXJnZSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9EZXZpY2VEZWZhdWx0X0RpYWxvZ1doZW5MYXJnZV9Ob0FjdGlvbkJhciIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9EZXZpY2VEZWZhdWx0X0RpYWxvZ19BbGVydCIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9EZXZpY2VEZWZhdWx0X0RpYWxvZ19NaW5XaWR0aCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9EZXZpY2VEZWZhdWx0X0RpYWxvZ19Ob0FjdGlvbkJhciIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9EZXZpY2VEZWZhdWx0X0RpYWxvZ19Ob0FjdGlvbkJhcl9NaW5XaWR0aCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9EZXZpY2VEZWZhdWx0X0lucHV0TWV0aG9kIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0RldmljZURlZmF1bHRfTGlnaHQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfRGV2aWNlRGVmYXVsdF9MaWdodF9EYXJrQWN0aW9uQmFyIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0RldmljZURlZmF1bHRfTGlnaHRfRGlhbG9nIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0RldmljZURlZmF1bHRfTGlnaHRfRGlhbG9nV2hlbkxhcmdlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0RldmljZURlZmF1bHRfTGlnaHRfRGlhbG9nV2hlbkxhcmdlX05vQWN0aW9uQmFyIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0RldmljZURlZmF1bHRfTGlnaHRfRGlhbG9nX0FsZXJ0IiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0RldmljZURlZmF1bHRfTGlnaHRfRGlhbG9nX01pbldpZHRoIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0RldmljZURlZmF1bHRfTGlnaHRfRGlhbG9nX05vQWN0aW9uQmFyIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0RldmljZURlZmF1bHRfTGlnaHRfRGlhbG9nX05vQWN0aW9uQmFyX01pbldpZHRoIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0RldmljZURlZmF1bHRfTGlnaHRfTm9BY3Rpb25CYXIiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfRGV2aWNlRGVmYXVsdF9MaWdodF9Ob0FjdGlvbkJhcl9GdWxsc2NyZWVuIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0RldmljZURlZmF1bHRfTGlnaHRfTm9BY3Rpb25CYXJfT3ZlcnNjYW4iIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfRGV2aWNlRGVmYXVsdF9MaWdodF9Ob0FjdGlvbkJhcl9UcmFuc2x1Y2VudERlY29yIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0RldmljZURlZmF1bHRfTGlnaHRfUGFuZWwiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfRGV2aWNlRGVmYXVsdF9Ob0FjdGlvbkJhciIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9EZXZpY2VEZWZhdWx0X05vQWN0aW9uQmFyX0Z1bGxzY3JlZW4iIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfRGV2aWNlRGVmYXVsdF9Ob0FjdGlvbkJhcl9PdmVyc2NhbiIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9EZXZpY2VEZWZhdWx0X05vQWN0aW9uQmFyX1RyYW5zbHVjZW50RGVjb3IiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfRGV2aWNlRGVmYXVsdF9QYW5lbCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9EZXZpY2VEZWZhdWx0X1NldHRpbmdzIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0RldmljZURlZmF1bHRfV2FsbHBhcGVyIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0RldmljZURlZmF1bHRfV2FsbHBhcGVyX05vVGl0bGVCYXIiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfRGlhbG9nIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9Ib2xvIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9Ib2xvX0RpYWxvZyIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfSG9sb19EaWFsb2dXaGVuTGFyZ2UiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0hvbG9fRGlhbG9nV2hlbkxhcmdlX05vQWN0aW9uQmFyIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9Ib2xvX0RpYWxvZ19NaW5XaWR0aCIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfSG9sb19EaWFsb2dfTm9BY3Rpb25CYXIiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0hvbG9fRGlhbG9nX05vQWN0aW9uQmFyX01pbldpZHRoIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9Ib2xvX0lucHV0TWV0aG9kIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9Ib2xvX0xpZ2h0IiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9Ib2xvX0xpZ2h0X0RhcmtBY3Rpb25CYXIiIHNpbmNlPSIxNCIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0hvbG9fTGlnaHRfRGlhbG9nIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9Ib2xvX0xpZ2h0X0RpYWxvZ1doZW5MYXJnZSIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfSG9sb19MaWdodF9EaWFsb2dXaGVuTGFyZ2VfTm9BY3Rpb25CYXIiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0hvbG9fTGlnaHRfRGlhbG9nX01pbldpZHRoIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9Ib2xvX0xpZ2h0X0RpYWxvZ19Ob0FjdGlvbkJhciIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfSG9sb19MaWdodF9EaWFsb2dfTm9BY3Rpb25CYXJfTWluV2lkdGgiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0hvbG9fTGlnaHRfTm9BY3Rpb25CYXIiIHNpbmNlPSIxMyIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0hvbG9fTGlnaHRfTm9BY3Rpb25CYXJfRnVsbHNjcmVlbiIgc2luY2U9IjEzIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfSG9sb19MaWdodF9Ob0FjdGlvbkJhcl9PdmVyc2NhbiIgc2luY2U9IjE4IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfSG9sb19MaWdodF9Ob0FjdGlvbkJhcl9UcmFuc2x1Y2VudERlY29yIiBzaW5jZT0iMTkiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9Ib2xvX0xpZ2h0X1BhbmVsIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9Ib2xvX05vQWN0aW9uQmFyIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9Ib2xvX05vQWN0aW9uQmFyX0Z1bGxzY3JlZW4iIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0hvbG9fTm9BY3Rpb25CYXJfT3ZlcnNjYW4iIHNpbmNlPSIxOCIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0hvbG9fTm9BY3Rpb25CYXJfVHJhbnNsdWNlbnREZWNvciIgc2luY2U9IjE5IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfSG9sb19QYW5lbCIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfSG9sb19XYWxscGFwZXIiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0hvbG9fV2FsbHBhcGVyX05vVGl0bGVCYXIiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0lucHV0TWV0aG9kIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTGlnaHQiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0xpZ2h0X05vVGl0bGVCYXIiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX0xpZ2h0X05vVGl0bGVCYXJfRnVsbHNjcmVlbiIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTGlnaHRfUGFuZWwiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9MaWdodF9XYWxscGFwZXJTZXR0aW5ncyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsX0RpYWxvZyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9NYXRlcmlhbF9EaWFsb2dXaGVuTGFyZ2UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTWF0ZXJpYWxfRGlhbG9nV2hlbkxhcmdlX05vQWN0aW9uQmFyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsX0RpYWxvZ19BbGVydCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9NYXRlcmlhbF9EaWFsb2dfTWluV2lkdGgiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTWF0ZXJpYWxfRGlhbG9nX05vQWN0aW9uQmFyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsX0RpYWxvZ19Ob0FjdGlvbkJhcl9NaW5XaWR0aCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9NYXRlcmlhbF9EaWFsb2dfUHJlc2VudGF0aW9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsX0lucHV0TWV0aG9kIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsX0xpZ2h0IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsX0xpZ2h0X0RhcmtBY3Rpb25CYXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTWF0ZXJpYWxfTGlnaHRfRGlhbG9nIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsX0xpZ2h0X0RpYWxvZ1doZW5MYXJnZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9NYXRlcmlhbF9MaWdodF9EaWFsb2dXaGVuTGFyZ2VfRGFya0FjdGlvbkJhciIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9NYXRlcmlhbF9MaWdodF9EaWFsb2dXaGVuTGFyZ2VfTm9BY3Rpb25CYXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTWF0ZXJpYWxfTGlnaHRfRGlhbG9nX0FsZXJ0IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsX0xpZ2h0X0RpYWxvZ19NaW5XaWR0aCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9NYXRlcmlhbF9MaWdodF9EaWFsb2dfTm9BY3Rpb25CYXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTWF0ZXJpYWxfTGlnaHRfRGlhbG9nX05vQWN0aW9uQmFyX01pbldpZHRoIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsX0xpZ2h0X0RpYWxvZ19QcmVzZW50YXRpb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTWF0ZXJpYWxfTGlnaHRfTGlnaHRTdGF0dXNCYXIiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTWF0ZXJpYWxfTGlnaHRfTm9BY3Rpb25CYXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTWF0ZXJpYWxfTGlnaHRfTm9BY3Rpb25CYXJfRnVsbHNjcmVlbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9NYXRlcmlhbF9MaWdodF9Ob0FjdGlvbkJhcl9PdmVyc2NhbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9NYXRlcmlhbF9MaWdodF9Ob0FjdGlvbkJhcl9UcmFuc2x1Y2VudERlY29yIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsX0xpZ2h0X1BhbmVsIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsX0xpZ2h0X1ZvaWNlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsX05vQWN0aW9uQmFyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX01hdGVyaWFsX05vQWN0aW9uQmFyX0Z1bGxzY3JlZW4iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTWF0ZXJpYWxfTm9BY3Rpb25CYXJfT3ZlcnNjYW4iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTWF0ZXJpYWxfTm9BY3Rpb25CYXJfVHJhbnNsdWNlbnREZWNvciIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9NYXRlcmlhbF9QYW5lbCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9NYXRlcmlhbF9TZXR0aW5ncyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9NYXRlcmlhbF9Wb2ljZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9NYXRlcmlhbF9XYWxscGFwZXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTWF0ZXJpYWxfV2FsbHBhcGVyX05vVGl0bGVCYXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTm9EaXNwbGF5IiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTm9UaXRsZUJhciIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfTm9UaXRsZUJhcl9GdWxsc2NyZWVuIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9Ob1RpdGxlQmFyX092ZXJsYXlBY3Rpb25Nb2RlcyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9QYW5lbCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX1RyYW5zbHVjZW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9UcmFuc2x1Y2VudF9Ob1RpdGxlQmFyIi8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9UcmFuc2x1Y2VudF9Ob1RpdGxlQmFyX0Z1bGxzY3JlZW4iLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX1dhbGxwYXBlciIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlRoZW1lX1dhbGxwYXBlclNldHRpbmdzIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfV2FsbHBhcGVyX05vVGl0bGVCYXIiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUaGVtZV9XYWxscGFwZXJfTm9UaXRsZUJhcl9GdWxsc2NyZWVuIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iVGhlbWVfV2l0aEFjdGlvbkJhciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9BYnNMaXN0VmlldyIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0FjdGlvbkJhciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfQWN0aW9uQmFyX1RhYkJhciIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfQWN0aW9uQmFyX1RhYlRleHQiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0FjdGlvbkJhcl9UYWJWaWV3IiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9BY3Rpb25CdXR0b24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0FjdGlvbkJ1dHRvbl9DbG9zZU1vZGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0FjdGlvbkJ1dHRvbl9PdmVyZmxvdyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfQXV0b0NvbXBsZXRlVGV4dFZpZXciLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9CdXR0b24iLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9CdXR0b25fSW5zZXQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9CdXR0b25fU21hbGwiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9CdXR0b25fVG9nZ2xlIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfQ2FsZW5kYXJWaWV3IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Db21wb3VuZEJ1dHRvbiIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0NvbXBvdW5kQnV0dG9uX0NoZWNrQm94Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfQ29tcG91bmRCdXR0b25fUmFkaW9CdXR0b24iLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Db21wb3VuZEJ1dHRvbl9TdGFyIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGF0ZVBpY2tlciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9BY3Rpb25CYXIiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfQWN0aW9uQmFyX1NvbGlkIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0FjdGlvbkJhcl9UYWJCYXIiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfQWN0aW9uQmFyX1RhYlRleHQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfQWN0aW9uQmFyX1RhYlZpZXciIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfQWN0aW9uQnV0dG9uIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0FjdGlvbkJ1dHRvbl9DbG9zZU1vZGUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfQWN0aW9uQnV0dG9uX092ZXJmbG93IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0FjdGlvbkJ1dHRvbl9UZXh0QnV0dG9uIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0FjdGlvbk1vZGUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfQXV0b0NvbXBsZXRlVGV4dFZpZXciIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfQnV0dG9uIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0J1dHRvbl9Cb3JkZXJsZXNzIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0J1dHRvbl9Cb3JkZXJsZXNzX0NvbG9yZWQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfQnV0dG9uX0JvcmRlcmxlc3NfU21hbGwiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfQnV0dG9uX0NvbG9yZWQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfQnV0dG9uX0luc2V0IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0J1dHRvbl9TbWFsbCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9CdXR0b25fVG9nZ2xlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0NhbGVuZGFyVmlldyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9DaGVja2VkVGV4dFZpZXciIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfQ29tcG91bmRCdXR0b25fQ2hlY2tCb3giIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfQ29tcG91bmRCdXR0b25fUmFkaW9CdXR0b24iIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfQ29tcG91bmRCdXR0b25fU3RhciIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9EYXRlUGlja2VyIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0Ryb3BEb3duSXRlbSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9Ecm9wRG93bkl0ZW1fU3Bpbm5lciIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9FZGl0VGV4dCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9FeHBhbmRhYmxlTGlzdFZpZXciIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfRmFzdFNjcm9sbCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9HcmlkVmlldyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9Ib3Jpem9udGFsU2Nyb2xsVmlldyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9JbWFnZUJ1dHRvbiIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9BY3Rpb25CYXIiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfQWN0aW9uQmFyX1NvbGlkIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0FjdGlvbkJhcl9Tb2xpZF9JbnZlcnNlIiBzaW5jZT0iMTQiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9BY3Rpb25CYXJfVGFiQmFyIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0FjdGlvbkJhcl9UYWJCYXJfSW52ZXJzZSIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfQWN0aW9uQmFyX1RhYlRleHQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfQWN0aW9uQmFyX1RhYlRleHRfSW52ZXJzZSIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfQWN0aW9uQmFyX1RhYlZpZXciIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfQWN0aW9uQmFyX1RhYlZpZXdfSW52ZXJzZSIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfQWN0aW9uQnV0dG9uIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0FjdGlvbkJ1dHRvbl9DbG9zZU1vZGUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfQWN0aW9uQnV0dG9uX092ZXJmbG93IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0FjdGlvbk1vZGUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfQWN0aW9uTW9kZV9JbnZlcnNlIiBzaW5jZT0iMTQiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9BdXRvQ29tcGxldGVUZXh0VmlldyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9CdXR0b24iIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfQnV0dG9uX0JvcmRlcmxlc3NfU21hbGwiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfQnV0dG9uX0luc2V0IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0J1dHRvbl9TbWFsbCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9CdXR0b25fVG9nZ2xlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0NhbGVuZGFyVmlldyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9DaGVja2VkVGV4dFZpZXciIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfQ29tcG91bmRCdXR0b25fQ2hlY2tCb3giIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfQ29tcG91bmRCdXR0b25fUmFkaW9CdXR0b24iIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfQ29tcG91bmRCdXR0b25fU3RhciIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9Ecm9wRG93bkl0ZW0iIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfRHJvcERvd25JdGVtX1NwaW5uZXIiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfRWRpdFRleHQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfRXhwYW5kYWJsZUxpc3RWaWV3IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0Zhc3RTY3JvbGwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfR3JpZFZpZXciIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfSG9yaXpvbnRhbFNjcm9sbFZpZXciIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfSW1hZ2VCdXR0b24iIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfTGlzdFBvcHVwV2luZG93IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0xpc3RWaWV3IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0xpc3RWaWV3X0Ryb3BEb3duIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X01lZGlhUm91dGVCdXR0b24iIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfUG9wdXBNZW51IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X1BvcHVwV2luZG93IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X1Byb2dyZXNzQmFyIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X1Byb2dyZXNzQmFyX0hvcml6b250YWwiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfUHJvZ3Jlc3NCYXJfSW52ZXJzZSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9Qcm9ncmVzc0Jhcl9MYXJnZSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9Qcm9ncmVzc0Jhcl9MYXJnZV9JbnZlcnNlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X1Byb2dyZXNzQmFyX1NtYWxsIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X1Byb2dyZXNzQmFyX1NtYWxsX0ludmVyc2UiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfUHJvZ3Jlc3NCYXJfU21hbGxfVGl0bGUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfUmF0aW5nQmFyIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X1JhdGluZ0Jhcl9JbmRpY2F0b3IiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfUmF0aW5nQmFyX1NtYWxsIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X1Njcm9sbFZpZXciIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfU2Vla0JhciIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9TcGlubmVyIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X1N0YWNrVmlldyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9UYWIiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfVGFiV2lkZ2V0IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X1RleHRWaWV3IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X1RleHRWaWV3X1NwaW5uZXJJdGVtIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X1dlYlRleHRWaWV3IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X1dlYlZpZXciIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfTGlzdFBvcHVwV2luZG93IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpc3RWaWV3IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X0xpc3RWaWV3X0Ryb3BEb3duIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X01lZGlhUm91dGVCdXR0b24iIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfUG9wdXBNZW51IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X1BvcHVwV2luZG93IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X1Byb2dyZXNzQmFyIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X1Byb2dyZXNzQmFyX0hvcml6b250YWwiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfUHJvZ3Jlc3NCYXJfTGFyZ2UiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfUHJvZ3Jlc3NCYXJfU21hbGwiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfUHJvZ3Jlc3NCYXJfU21hbGxfVGl0bGUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfUmF0aW5nQmFyIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X1JhdGluZ0Jhcl9JbmRpY2F0b3IiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfUmF0aW5nQmFyX1NtYWxsIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X1Njcm9sbFZpZXciIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfU2Vla0JhciIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9TcGlubmVyIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X1N0YWNrVmlldyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRGV2aWNlRGVmYXVsdF9UYWIiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0RldmljZURlZmF1bHRfVGFiV2lkZ2V0IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X1RleHRWaWV3IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X1RleHRWaWV3X1NwaW5uZXJJdGVtIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X1dlYlRleHRWaWV3IiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9EZXZpY2VEZWZhdWx0X1dlYlZpZXciIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0Ryb3BEb3duSXRlbSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0Ryb3BEb3duSXRlbV9TcGlubmVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfRWRpdFRleHQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9FeHBhbmRhYmxlTGlzdFZpZXciLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9GYXN0U2Nyb2xsIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9GcmFnbWVudEJyZWFkQ3J1bWJzIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9HYWxsZXJ5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfR3JpZFZpZXciLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0FjdGlvbkJhciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19BY3Rpb25CYXJfU29saWQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fQWN0aW9uQmFyX1RhYkJhciIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19BY3Rpb25CYXJfVGFiVGV4dCIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19BY3Rpb25CYXJfVGFiVmlldyIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19BY3Rpb25CdXR0b24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fQWN0aW9uQnV0dG9uX0Nsb3NlTW9kZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19BY3Rpb25CdXR0b25fT3ZlcmZsb3ciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fQWN0aW9uQnV0dG9uX1RleHRCdXR0b24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fQWN0aW9uTW9kZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19BdXRvQ29tcGxldGVUZXh0VmlldyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19CdXR0b24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fQnV0dG9uX0JvcmRlcmxlc3MiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fQnV0dG9uX0JvcmRlcmxlc3NfU21hbGwiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fQnV0dG9uX0luc2V0IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0J1dHRvbl9TbWFsbCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19CdXR0b25fVG9nZ2xlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0NhbGVuZGFyVmlldyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19DaGVja2VkVGV4dFZpZXciIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fQ29tcG91bmRCdXR0b25fQ2hlY2tCb3giIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fQ29tcG91bmRCdXR0b25fUmFkaW9CdXR0b24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fQ29tcG91bmRCdXR0b25fU3RhciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19EYXRlUGlja2VyIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0Ryb3BEb3duSXRlbSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19Ecm9wRG93bkl0ZW1fU3Bpbm5lciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19FZGl0VGV4dCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19FeHBhbmRhYmxlTGlzdFZpZXciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fR3JpZFZpZXciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fSG9yaXpvbnRhbFNjcm9sbFZpZXciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fSW1hZ2VCdXR0b24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfQWN0aW9uQmFyIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X0FjdGlvbkJhcl9Tb2xpZCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9BY3Rpb25CYXJfU29saWRfSW52ZXJzZSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9BY3Rpb25CYXJfVGFiQmFyIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X0FjdGlvbkJhcl9UYWJCYXJfSW52ZXJzZSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9BY3Rpb25CYXJfVGFiVGV4dCIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9BY3Rpb25CYXJfVGFiVGV4dF9JbnZlcnNlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X0FjdGlvbkJhcl9UYWJWaWV3IiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X0FjdGlvbkJhcl9UYWJWaWV3X0ludmVyc2UiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfQWN0aW9uQnV0dG9uIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X0FjdGlvbkJ1dHRvbl9DbG9zZU1vZGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfQWN0aW9uQnV0dG9uX092ZXJmbG93IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X0FjdGlvbk1vZGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfQWN0aW9uTW9kZV9JbnZlcnNlIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X0F1dG9Db21wbGV0ZVRleHRWaWV3IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X0J1dHRvbiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9CdXR0b25fQm9yZGVybGVzc19TbWFsbCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9CdXR0b25fSW5zZXQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfQnV0dG9uX1NtYWxsIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X0J1dHRvbl9Ub2dnbGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfQ2FsZW5kYXJWaWV3IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X0NoZWNrZWRUZXh0VmlldyIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9Db21wb3VuZEJ1dHRvbl9DaGVja0JveCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9Db21wb3VuZEJ1dHRvbl9SYWRpb0J1dHRvbiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9Db21wb3VuZEJ1dHRvbl9TdGFyIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X0Ryb3BEb3duSXRlbSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9Ecm9wRG93bkl0ZW1fU3Bpbm5lciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9FZGl0VGV4dCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9FeHBhbmRhYmxlTGlzdFZpZXciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfR3JpZFZpZXciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfSG9yaXpvbnRhbFNjcm9sbFZpZXciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfSW1hZ2VCdXR0b24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfTGlzdFBvcHVwV2luZG93IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X0xpc3RWaWV3IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X0xpc3RWaWV3X0Ryb3BEb3duIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X01lZGlhUm91dGVCdXR0b24iIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfUG9wdXBNZW51IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X1BvcHVwV2luZG93IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X1Byb2dyZXNzQmFyIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X1Byb2dyZXNzQmFyX0hvcml6b250YWwiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfUHJvZ3Jlc3NCYXJfSW52ZXJzZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9Qcm9ncmVzc0Jhcl9MYXJnZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9Qcm9ncmVzc0Jhcl9MYXJnZV9JbnZlcnNlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X1Byb2dyZXNzQmFyX1NtYWxsIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X1Byb2dyZXNzQmFyX1NtYWxsX0ludmVyc2UiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfUHJvZ3Jlc3NCYXJfU21hbGxfVGl0bGUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfUmF0aW5nQmFyIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X1JhdGluZ0Jhcl9JbmRpY2F0b3IiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfUmF0aW5nQmFyX1NtYWxsIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X1Njcm9sbFZpZXciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfU2Vla0JhciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9TcGlubmVyIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX0xpZ2h0X1RhYiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaWdodF9UYWJXaWRnZXQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfVGV4dFZpZXciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfVGV4dFZpZXdfU3Bpbm5lckl0ZW0iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfV2ViVGV4dFZpZXciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlnaHRfV2ViVmlldyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19MaXN0UG9wdXBXaW5kb3ciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlzdFZpZXciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTGlzdFZpZXdfRHJvcERvd24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fTWVkaWFSb3V0ZUJ1dHRvbiIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19Qb3B1cE1lbnUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fUG9wdXBXaW5kb3ciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fUHJvZ3Jlc3NCYXIiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fUHJvZ3Jlc3NCYXJfSG9yaXpvbnRhbCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19Qcm9ncmVzc0Jhcl9MYXJnZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19Qcm9ncmVzc0Jhcl9TbWFsbCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19Qcm9ncmVzc0Jhcl9TbWFsbF9UaXRsZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19SYXRpbmdCYXIiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fUmF0aW5nQmFyX0luZGljYXRvciIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19SYXRpbmdCYXJfU21hbGwiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fU2Nyb2xsVmlldyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19TZWVrQmFyIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX1NwaW5uZXIiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0hvbG9fVGFiIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Ib2xvX1RhYldpZGdldCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19UZXh0VmlldyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19UZXh0Vmlld19TcGlubmVySXRlbSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19XZWJUZXh0VmlldyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfSG9sb19XZWJWaWV3IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9JbWFnZUJ1dHRvbiIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0ltYWdlV2VsbCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0tleWJvYXJkVmlldyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9MaXN0UG9wdXBXaW5kb3ciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X0xpc3RWaWV3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTGlzdFZpZXdfRHJvcERvd24iLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9MaXN0Vmlld19NZW51Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTGlzdFZpZXdfV2hpdGUiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfQWN0aW9uQmFyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9BY3Rpb25CYXJfU29saWQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0FjdGlvbkJhcl9UYWJCYXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0FjdGlvbkJhcl9UYWJUZXh0IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9BY3Rpb25CYXJfVGFiVmlldyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfQWN0aW9uQnV0dG9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9BY3Rpb25CdXR0b25fQ2xvc2VNb2RlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9BY3Rpb25CdXR0b25fT3ZlcmZsb3ciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0FjdGlvbk1vZGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0F1dG9Db21wbGV0ZVRleHRWaWV3IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9CdXR0b24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0J1dHRvbkJhciIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfQnV0dG9uQmFyX0FsZXJ0RGlhbG9nIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9CdXR0b25fQm9yZGVybGVzcyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfQnV0dG9uX0JvcmRlcmxlc3NfQ29sb3JlZCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfQnV0dG9uX0JvcmRlcmxlc3NfU21hbGwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0J1dHRvbl9Db2xvcmVkIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9CdXR0b25fSW5zZXQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0J1dHRvbl9TbWFsbCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfQnV0dG9uX1RvZ2dsZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfQ2FsZW5kYXJWaWV3IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9DaGVja2VkVGV4dFZpZXciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0NvbXBvdW5kQnV0dG9uX0NoZWNrQm94IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9Db21wb3VuZEJ1dHRvbl9SYWRpb0J1dHRvbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfQ29tcG91bmRCdXR0b25fU3RhciIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfQ29tcG91bmRCdXR0b25fU3dpdGNoIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9EYXRlUGlja2VyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9Ecm9wRG93bkl0ZW0iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0Ryb3BEb3duSXRlbV9TcGlubmVyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9FZGl0VGV4dCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfRXhwYW5kYWJsZUxpc3RWaWV3IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9GYXN0U2Nyb2xsIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9HcmlkVmlldyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfSG9yaXpvbnRhbFNjcm9sbFZpZXciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0ltYWdlQnV0dG9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfQWN0aW9uQmFyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9BY3Rpb25CYXJfU29saWQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0FjdGlvbkJhcl9UYWJCYXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0FjdGlvbkJhcl9UYWJUZXh0IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9BY3Rpb25CYXJfVGFiVmlldyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfQWN0aW9uQnV0dG9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9BY3Rpb25CdXR0b25fQ2xvc2VNb2RlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9BY3Rpb25CdXR0b25fT3ZlcmZsb3ciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0FjdGlvbk1vZGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0F1dG9Db21wbGV0ZVRleHRWaWV3IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9CdXR0b24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0J1dHRvbkJhciIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfQnV0dG9uQmFyX0FsZXJ0RGlhbG9nIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9CdXR0b25fQm9yZGVybGVzcyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfQnV0dG9uX0JvcmRlcmxlc3NfQ29sb3JlZCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfQnV0dG9uX0JvcmRlcmxlc3NfU21hbGwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0J1dHRvbl9JbnNldCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfQnV0dG9uX1NtYWxsIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9CdXR0b25fVG9nZ2xlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9DYWxlbmRhclZpZXciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0NoZWNrZWRUZXh0VmlldyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfQ29tcG91bmRCdXR0b25fQ2hlY2tCb3giIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0NvbXBvdW5kQnV0dG9uX1JhZGlvQnV0dG9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9Db21wb3VuZEJ1dHRvbl9TdGFyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9Db21wb3VuZEJ1dHRvbl9Td2l0Y2giIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0RhdGVQaWNrZXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0Ryb3BEb3duSXRlbSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfRHJvcERvd25JdGVtX1NwaW5uZXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0VkaXRUZXh0IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9FeHBhbmRhYmxlTGlzdFZpZXciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0Zhc3RTY3JvbGwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0dyaWRWaWV3IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9Ib3Jpem9udGFsU2Nyb2xsVmlldyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfSW1hZ2VCdXR0b24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0xpc3RQb3B1cFdpbmRvdyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfTGlzdFZpZXciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X0xpc3RWaWV3X0Ryb3BEb3duIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9NZWRpYVJvdXRlQnV0dG9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9OdW1iZXJQaWNrZXIiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X1BvcHVwTWVudSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfUG9wdXBNZW51X092ZXJmbG93IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9Qb3B1cFdpbmRvdyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfUHJvZ3Jlc3NCYXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X1Byb2dyZXNzQmFyX0hvcml6b250YWwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X1Byb2dyZXNzQmFyX0ludmVyc2UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X1Byb2dyZXNzQmFyX0xhcmdlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9Qcm9ncmVzc0Jhcl9MYXJnZV9JbnZlcnNlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9Qcm9ncmVzc0Jhcl9TbWFsbCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfUHJvZ3Jlc3NCYXJfU21hbGxfSW52ZXJzZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfUHJvZ3Jlc3NCYXJfU21hbGxfVGl0bGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X1JhdGluZ0JhciIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfUmF0aW5nQmFyX0luZGljYXRvciIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfUmF0aW5nQmFyX1NtYWxsIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9TY3JvbGxWaWV3IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9TZWFyY2hWaWV3IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9TZWVrQmFyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9TZWdtZW50ZWRCdXR0b24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X1NwaW5uZXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X1NwaW5uZXJfVW5kZXJsaW5lZCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfU3RhY2tWaWV3IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9UYWIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X1RhYldpZGdldCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfVGV4dFZpZXciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX0xpZ2h0X1RleHRWaWV3X1NwaW5uZXJJdGVtIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9UaW1lUGlja2VyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaWdodF9XZWJUZXh0VmlldyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlnaHRfV2ViVmlldyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlzdFBvcHVwV2luZG93IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9MaXN0VmlldyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfTGlzdFZpZXdfRHJvcERvd24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX01lZGlhUm91dGVCdXR0b24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX051bWJlclBpY2tlciIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfUG9wdXBNZW51IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9Qb3B1cE1lbnVfT3ZlcmZsb3ciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX1BvcHVwV2luZG93IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9Qcm9ncmVzc0JhciIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfUHJvZ3Jlc3NCYXJfSG9yaXpvbnRhbCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfUHJvZ3Jlc3NCYXJfTGFyZ2UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX1Byb2dyZXNzQmFyX1NtYWxsIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9Qcm9ncmVzc0Jhcl9TbWFsbF9UaXRsZSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfUmF0aW5nQmFyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9SYXRpbmdCYXJfSW5kaWNhdG9yIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9SYXRpbmdCYXJfU21hbGwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX1Njcm9sbFZpZXciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX1NlYXJjaFZpZXciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX1NlZWtCYXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX1NlZWtCYXJfRGlzY3JldGUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX1NlZ21lbnRlZEJ1dHRvbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfU3Bpbm5lciIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfU3Bpbm5lcl9VbmRlcmxpbmVkIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9TdGFja1ZpZXciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX1RhYiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfVGFiV2lkZ2V0IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9UZXh0VmlldyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfTWF0ZXJpYWxfVGV4dFZpZXdfU3Bpbm5lckl0ZW0iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX1RpbWVQaWNrZXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX1Rvb2xiYXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX1Rvb2xiYXJfQnV0dG9uX05hdmlnYXRpb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X01hdGVyaWFsX1dlYlRleHRWaWV3IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9NYXRlcmlhbF9XZWJWaWV3IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Qb3B1cE1lbnUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X1BvcHVwV2luZG93Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfUHJvZ3Jlc3NCYXIiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Qcm9ncmVzc0Jhcl9Ib3Jpem9udGFsIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfUHJvZ3Jlc3NCYXJfSW52ZXJzZSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Qcm9ncmVzc0Jhcl9MYXJnZSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X1Byb2dyZXNzQmFyX0xhcmdlX0ludmVyc2UiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfUHJvZ3Jlc3NCYXJfU21hbGwiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9Qcm9ncmVzc0Jhcl9TbWFsbF9JbnZlcnNlIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X1JhdGluZ0JhciIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X1Njcm9sbFZpZXciLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9TZWVrQmFyIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfU3Bpbm5lciIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X1NwaW5uZXJfRHJvcERvd24iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X1N0YWNrVmlldyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfVGFiV2lkZ2V0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXaWRnZXRfVGV4dFZpZXciLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9UZXh0Vmlld19Qb3B1cE1lbnUiLz4KLQkJPGZpZWxkIG5hbWU9IldpZGdldF9UZXh0Vmlld19TcGlubmVySXRlbSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X1Rvb2xiYXIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X1Rvb2xiYXJfQnV0dG9uX05hdmlnYXRpb24iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV2lkZ2V0X1dlYlZpZXciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL1IkdHJhbnNpdGlvbiIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iZXhwbG9kZSIvPgotCQk8ZmllbGQgbmFtZT0iZmFkZSIvPgotCQk8ZmllbGQgbmFtZT0ibW92ZSIvPgotCQk8ZmllbGQgbmFtZT0ibm9fdHJhbnNpdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0ic2xpZGVfYm90dG9tIi8+Ci0JCTxmaWVsZCBuYW1lPSJzbGlkZV9sZWZ0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzbGlkZV9yaWdodCIvPgotCQk8ZmllbGQgbmFtZT0ic2xpZGVfdG9wIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9SJHhtbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5QnV0dG9uQ29udHJvbGxlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWNjZXNzaWJpbGl0eUJ1dHRvbkF2YWlsYWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQWNjZXNzaWJpbGl0eUJ1dHRvbkNhbGxiYWNrKExhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0FjY2Vzc2liaWxpdHlCdXR0b25Db250cm9sbGVyJEFjY2Vzc2liaWxpdHlCdXR0b25DYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQWNjZXNzaWJpbGl0eUJ1dHRvbkNhbGxiYWNrKExhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0FjY2Vzc2liaWxpdHlCdXR0b25Db250cm9sbGVyJEFjY2Vzc2liaWxpdHlCdXR0b25DYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckFjY2Vzc2liaWxpdHlCdXR0b25DYWxsYmFjayhMYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5QnV0dG9uQ29udHJvbGxlciRBY2Nlc3NpYmlsaXR5QnV0dG9uQ2FsbGJhY2s7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0FjY2Vzc2liaWxpdHlCdXR0b25Db250cm9sbGVyJEFjY2Vzc2liaWxpdHlCdXR0b25DYWxsYmFjayIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQXZhaWxhYmlsaXR5Q2hhbmdlZChMYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5QnV0dG9uQ29udHJvbGxlcjtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNsaWNrZWQoTGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvQWNjZXNzaWJpbGl0eUJ1dHRvbkNvbnRyb2xsZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0FjY2Vzc2liaWxpdHlTZXJ2aWNlIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNhYmxlU2VsZigpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hHZXN0dXJlKExhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0dlc3R1cmVEZXNjcmlwdGlvbjtMYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZSRHZXN0dXJlUmVzdWx0Q2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEZvY3VzKEkpTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mbzsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjY2Vzc2liaWxpdHlCdXR0b25Db250cm9sbGVyKClMYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5QnV0dG9uQ29udHJvbGxlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbmdlcnByaW50R2VzdHVyZUNvbnRyb2xsZXIoKUxhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0ZpbmdlcnByaW50R2VzdHVyZUNvbnRyb2xsZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYWduaWZpY2F0aW9uQ29udHJvbGxlcigpTGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvQWNjZXNzaWJpbGl0eVNlcnZpY2UkTWFnbmlmaWNhdGlvbkNvbnRyb2xsZXI7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb290SW5BY3RpdmVXaW5kb3coKUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm87IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlSW5mbygpTGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvQWNjZXNzaWJpbGl0eVNlcnZpY2VJbmZvOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U29mdEtleWJvYXJkQ29udHJvbGxlcigpTGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvQWNjZXNzaWJpbGl0eVNlcnZpY2UkU29mdEtleWJvYXJkQ29udHJvbGxlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpbmRvd3MoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWNjZXNzaWJpbGl0eUV2ZW50KExhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5RXZlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdlc3R1cmUoSSlaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkludGVycnVwdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uS2V5RXZlbnQoTGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXJ2aWNlQ29ubmVjdGVkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVyZm9ybUdsb2JhbEFjdGlvbihJKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlcnZpY2VJbmZvKExhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0FjY2Vzc2liaWxpdHlTZXJ2aWNlSW5mbzspViIvPgotCQk8ZmllbGQgbmFtZT0iR0VTVFVSRV9TV0lQRV9ET1dOIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdFU1RVUkVfU1dJUEVfRE9XTl9BTkRfTEVGVCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHRVNUVVJFX1NXSVBFX0RPV05fQU5EX1JJR0hUIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdFU1RVUkVfU1dJUEVfRE9XTl9BTkRfVVAiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iR0VTVFVSRV9TV0lQRV9MRUZUIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdFU1RVUkVfU1dJUEVfTEVGVF9BTkRfRE9XTiIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHRVNUVVJFX1NXSVBFX0xFRlRfQU5EX1JJR0hUIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdFU1RVUkVfU1dJUEVfTEVGVF9BTkRfVVAiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iR0VTVFVSRV9TV0lQRV9SSUdIVCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHRVNUVVJFX1NXSVBFX1JJR0hUX0FORF9ET1dOIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdFU1RVUkVfU1dJUEVfUklHSFRfQU5EX0xFRlQiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iR0VTVFVSRV9TV0lQRV9SSUdIVF9BTkRfVVAiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iR0VTVFVSRV9TV0lQRV9VUCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHRVNUVVJFX1NXSVBFX1VQX0FORF9ET1dOIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdFU1RVUkVfU1dJUEVfVVBfQU5EX0xFRlQiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iR0VTVFVSRV9TV0lQRV9VUF9BTkRfUklHSFQiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iR0xPQkFMX0FDVElPTl9CQUNLIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMT0JBTF9BQ1RJT05fSE9NRSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTE9CQUxfQUNUSU9OX0xPQ0tfU0NSRUVOIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMT0JBTF9BQ1RJT05fTk9USUZJQ0FUSU9OUyIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTE9CQUxfQUNUSU9OX1BPV0VSX0RJQUxPRyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTE9CQUxfQUNUSU9OX1FVSUNLX1NFVFRJTkdTIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkdMT0JBTF9BQ1RJT05fUkVDRU5UUyIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTE9CQUxfQUNUSU9OX1RBS0VfU0NSRUVOU0hPVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTE9CQUxfQUNUSU9OX1RPR0dMRV9TUExJVF9TQ1JFRU4iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9JTlRFUkZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfTUVUQV9EQVRBIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1dfTU9ERV9BVVRPIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1dfTU9ERV9ISURERU4iIHNpbmNlPSIyNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvQWNjZXNzaWJpbGl0eVNlcnZpY2UkR2VzdHVyZVJlc3VsdENhbGxiYWNrIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYW5jZWxsZWQoTGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvR2VzdHVyZURlc2NyaXB0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db21wbGV0ZWQoTGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvR2VzdHVyZURlc2NyaXB0aW9uOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZSRNYWduaWZpY2F0aW9uQ29udHJvbGxlciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvQWNjZXNzaWJpbGl0eVNlcnZpY2U7TGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZExpc3RlbmVyKExhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0FjY2Vzc2liaWxpdHlTZXJ2aWNlJE1hZ25pZmljYXRpb25Db250cm9sbGVyJE9uTWFnbmlmaWNhdGlvbkNoYW5nZWRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZExpc3RlbmVyKExhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0FjY2Vzc2liaWxpdHlTZXJ2aWNlJE1hZ25pZmljYXRpb25Db250cm9sbGVyJE9uTWFnbmlmaWNhdGlvbkNoYW5nZWRMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VudGVyWCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlbnRlclkoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYWduaWZpY2F0aW9uUmVnaW9uKClMYW5kcm9pZC9ncmFwaGljcy9SZWdpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhbGUoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVMaXN0ZW5lcihMYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZSRNYWduaWZpY2F0aW9uQ29udHJvbGxlciRPbk1hZ25pZmljYXRpb25DaGFuZ2VkTGlzdGVuZXI7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldChaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDZW50ZXIoRkZaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY2FsZShGWilaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZSRNYWduaWZpY2F0aW9uQ29udHJvbGxlciRPbk1hZ25pZmljYXRpb25DaGFuZ2VkTGlzdGVuZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1hZ25pZmljYXRpb25DaGFuZ2VkKExhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0FjY2Vzc2liaWxpdHlTZXJ2aWNlJE1hZ25pZmljYXRpb25Db250cm9sbGVyO0xhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbjtGRkYpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvQWNjZXNzaWJpbGl0eVNlcnZpY2UkU29mdEtleWJvYXJkQ29udHJvbGxlciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvQWNjZXNzaWJpbGl0eVNlcnZpY2U7TGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE9uU2hvd01vZGVDaGFuZ2VkTGlzdGVuZXIoTGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvQWNjZXNzaWJpbGl0eVNlcnZpY2UkU29mdEtleWJvYXJkQ29udHJvbGxlciRPblNob3dNb2RlQ2hhbmdlZExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkT25TaG93TW9kZUNoYW5nZWRMaXN0ZW5lcihMYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZSRTb2Z0S2V5Ym9hcmRDb250cm9sbGVyJE9uU2hvd01vZGVDaGFuZ2VkTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3dNb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlT25TaG93TW9kZUNoYW5nZWRMaXN0ZW5lcihMYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZSRTb2Z0S2V5Ym9hcmRDb250cm9sbGVyJE9uU2hvd01vZGVDaGFuZ2VkTGlzdGVuZXI7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG93TW9kZShJKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0FjY2Vzc2liaWxpdHlTZXJ2aWNlJFNvZnRLZXlib2FyZENvbnRyb2xsZXIkT25TaG93TW9kZUNoYW5nZWRMaXN0ZW5lciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2hvd01vZGVDaGFuZ2VkKExhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0FjY2Vzc2liaWxpdHlTZXJ2aWNlJFNvZnRLZXlib2FyZENvbnRyb2xsZXI7SSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZUluZm8iIHNpbmNlPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYXBhYmlsaXR5VG9TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImZlZWRiYWNrVHlwZVRvU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbGFnVG9TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhblJldHJpZXZlV2luZG93Q29udGVudCgpWiIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhcGFiaWxpdGllcygpSSIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc29sdmVJbmZvKClMYW5kcm9pZC9jb250ZW50L3BtL1Jlc29sdmVJbmZvOyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2V0dGluZ3NBY3Rpdml0eU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZERlc2NyaXB0aW9uKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZFN1bW1hcnkoTGFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlTWFuYWdlcjspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfQ0FOX0NPTlRST0xfTUFHTklGSUNBVElPTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX0NBTl9QRVJGT1JNX0dFU1RVUkVTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfQ0FOX1JFUVVFU1RfRU5IQU5DRURfV0VCX0FDQ0VTU0lCSUxJVFkiIHNpbmNlPSIxOCIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfQ0FOX1JFUVVFU1RfRklMVEVSX0tFWV9FVkVOVFMiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9DQU5fUkVRVUVTVF9GSU5HRVJQUklOVF9HRVNUVVJFUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX0NBTl9SRVFVRVNUX1RPVUNIX0VYUExPUkFUSU9OIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfQ0FOX1JFVFJJRVZFX1dJTkRPV19DT05URU5UIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IkZFRURCQUNLX0FMTF9NQVNLIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkZFRURCQUNLX0FVRElCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkZFRURCQUNLX0JSQUlMTEUiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iRkVFREJBQ0tfR0VORVJJQyIvPgotCQk8ZmllbGQgbmFtZT0iRkVFREJBQ0tfSEFQVElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUVEQkFDS19TUE9LRU4iLz4KLQkJPGZpZWxkIG5hbWU9IkZFRURCQUNLX1ZJU1VBTCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19FTkFCTEVfQUNDRVNTSUJJTElUWV9WT0xVTUUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19JTkNMVURFX05PVF9JTVBPUlRBTlRfVklFV1MiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19SRVBPUlRfVklFV19JRFMiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19SRVFVRVNUX0FDQ0VTU0lCSUxJVFlfQlVUVE9OIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUkVRVUVTVF9FTkhBTkNFRF9XRUJfQUNDRVNTSUJJTElUWSIgc2luY2U9IjE4IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19SRVFVRVNUX0ZJTFRFUl9LRVlfRVZFTlRTIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUkVRVUVTVF9GSU5HRVJQUklOVF9HRVNUVVJFUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1JFUVVFU1RfVE9VQ0hfRVhQTE9SQVRJT05fTU9ERSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1JFVFJJRVZFX0lOVEVSQUNUSVZFX1dJTkRPV1MiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iZXZlbnRUeXBlcyIvPgotCQk8ZmllbGQgbmFtZT0iZmVlZGJhY2tUeXBlIi8+Ci0JCTxmaWVsZCBuYW1lPSJmbGFncyIvPgotCQk8ZmllbGQgbmFtZT0ibm90aWZpY2F0aW9uVGltZW91dCIvPgotCQk8ZmllbGQgbmFtZT0icGFja2FnZU5hbWVzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9GaW5nZXJwcmludEdlc3R1cmVDb250cm9sbGVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNHZXN0dXJlRGV0ZWN0aW9uQXZhaWxhYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJGaW5nZXJwcmludEdlc3R1cmVDYWxsYmFjayhMYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9GaW5nZXJwcmludEdlc3R1cmVDb250cm9sbGVyJEZpbmdlcnByaW50R2VzdHVyZUNhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyRmluZ2VycHJpbnRHZXN0dXJlQ2FsbGJhY2soTGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvRmluZ2VycHJpbnRHZXN0dXJlQ29udHJvbGxlciRGaW5nZXJwcmludEdlc3R1cmVDYWxsYmFjazspViIvPgotCQk8ZmllbGQgbmFtZT0iRklOR0VSUFJJTlRfR0VTVFVSRV9TV0lQRV9ET1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSU5HRVJQUklOVF9HRVNUVVJFX1NXSVBFX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTkdFUlBSSU5UX0dFU1RVUkVfU1dJUEVfUklHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTkdFUlBSSU5UX0dFU1RVUkVfU1dJUEVfVVAiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0ZpbmdlcnByaW50R2VzdHVyZUNvbnRyb2xsZXIkRmluZ2VycHJpbnRHZXN0dXJlQ2FsbGJhY2siIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdlc3R1cmVEZXRlY3RlZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdlc3R1cmVEZXRlY3Rpb25BdmFpbGFiaWxpdHlDaGFuZ2VkKFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvR2VzdHVyZURlc2NyaXB0aW9uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4R2VzdHVyZUR1cmF0aW9uKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4U3Ryb2tlQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJva2UoSSlMYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9HZXN0dXJlRGVzY3JpcHRpb24kU3Ryb2tlRGVzY3JpcHRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3Ryb2tlQ291bnQoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0dlc3R1cmVEZXNjcmlwdGlvbiRCdWlsZGVyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkU3Ryb2tlKExhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0dlc3R1cmVEZXNjcmlwdGlvbiRTdHJva2VEZXNjcmlwdGlvbjspTGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvR2VzdHVyZURlc2NyaXB0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0dlc3R1cmVEZXNjcmlwdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0dlc3R1cmVEZXNjcmlwdGlvbiRTdHJva2VEZXNjcmlwdGlvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9QYXRoO0pKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDtKSlopViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGludWVTdHJva2UoTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDtKSlopTGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvR2VzdHVyZURlc2NyaXB0aW9uJFN0cm9rZURlc2NyaXB0aW9uOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHVyYXRpb24oKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXRoKClMYW5kcm9pZC9ncmFwaGljcy9QYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXJ0VGltZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9IndpbGxDb250aW51ZSgpWiIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hY2NvdW50cy9BYnN0cmFjdEFjY291bnRBdXRoZW50aWNhdG9yIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQWNjb3VudChMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBY2NvdW50RnJvbUNyZWRlbnRpYWxzKExhbmRyb2lkL2FjY291bnRzL0FjY291bnRBdXRoZW50aWNhdG9yUmVzcG9uc2U7TGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbmZpcm1DcmVkZW50aWFscyhMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlO0xhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZWRpdFByb3BlcnRpZXMoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZTtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaFNlc3Npb24oTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZTtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjY291bnRDcmVkZW50aWFsc0ZvckNsb25pbmcoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZTtMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50OylMYW5kcm9pZC9vcy9CdW5kbGU7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY2NvdW50UmVtb3ZhbEFsbG93ZWQoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZTtMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50OylMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0aFRva2VuKExhbmRyb2lkL2FjY291bnRzL0FjY291bnRBdXRoZW50aWNhdG9yUmVzcG9uc2U7TGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRoVG9rZW5MYWJlbChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SUJpbmRlcigpTGFuZHJvaWQvb3MvSUJpbmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNGZWF0dXJlcyhMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlO0xhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7W0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDcmVkZW50aWFsc1VwZGF0ZVN1Z2dlc3RlZChMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlO0xhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWRkQWNjb3VudFNlc3Npb24oTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZTtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9vcy9CdW5kbGU7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFVwZGF0ZUNyZWRlbnRpYWxzU2Vzc2lvbihMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlO0xhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9vcy9CdW5kbGU7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVDcmVkZW50aWFscyhMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlO0xhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ1VTVE9NX1RPS0VOX0VYUElSWSIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50IiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0ibmFtZSIvPgotCQk8ZmllbGQgbmFtZT0idHlwZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYWNjb3VudHMvQWNjb3VudEF1dGhlbnRpY2F0b3JBY3Rpdml0eSIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9BY3Rpdml0eSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjY291bnRBdXRoZW50aWNhdG9yUmVzdWx0KExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYWNjb3VudHMvQWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZSIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkVycm9yKElMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVxdWVzdENvbnRpbnVlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVzdWx0KExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXIiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFjY291bnQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBY2NvdW50RXhwbGljaXRseShMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFjY291bnRFeHBsaWNpdGx5KExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO0xqYXZhL3V0aWwvTWFwOylaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRPbkFjY291bnRzVXBkYXRlZExpc3RlbmVyKExhbmRyb2lkL2FjY291bnRzL09uQWNjb3VudHNVcGRhdGVMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyO1opViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE9uQWNjb3VudHNVcGRhdGVkTGlzdGVuZXIoTGFuZHJvaWQvYWNjb3VudHMvT25BY2NvdW50c1VwZGF0ZUxpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7WltMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmxvY2tpbmdHZXRBdXRoVG9rZW4oTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMamF2YS9sYW5nL1N0cmluZztaKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyUGFzc3dvcmQoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbmZpcm1DcmVkZW50aWFscyhMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O0xhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZGl0UHJvcGVydGllcyhMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5pc2hTZXNzaW9uKExhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckZ1dHVyZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxhbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjY291bnRWaXNpYmlsaXR5KExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvbGFuZy9TdHJpbmc7KUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjY291bnRzKClbTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY2NvdW50c0FuZFZpc2liaWxpdHlGb3JQYWNrYWdlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL01hcDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjY291bnRzQnlUeXBlKExqYXZhL2xhbmcvU3RyaW5nOylbTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY2NvdW50c0J5VHlwZUFuZEZlYXR1cmVzKExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckNhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KUxhbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjY291bnRzQnlUeXBlRm9yUGFja2FnZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspW0xhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRoVG9rZW4oTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7TGFuZHJvaWQvYXBwL0FjdGl2aXR5O0xhbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0aFRva2VuKExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO1pMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckNhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KUxhbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyRnV0dXJlOyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0aFRva2VuKExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvbGFuZy9TdHJpbmc7WkxhbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJGdXR1cmU7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1dGhUb2tlbkJ5RmVhdHVyZXMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9vcy9CdW5kbGU7TGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0aGVudGljYXRvclR5cGVzKClbTGFuZHJvaWQvYWNjb3VudHMvQXV0aGVudGljYXRvckRlc2NyaXB0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VzQW5kVmlzaWJpbGl0eUZvckFjY291bnQoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDspTGphdmEvdXRpbC9NYXA7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXNzd29yZChMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50OylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmV2aW91c05hbWUoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyRGF0YShMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNGZWF0dXJlcyhMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O1tMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckNhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KUxhbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyRnV0dXJlOyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZhbGlkYXRlQXV0aFRva2VuKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDcmVkZW50aWFsc1VwZGF0ZVN1Z2dlc3RlZChMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJGdXR1cmU7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdDaG9vc2VBY2NvdW50SW50ZW50KExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvdXRpbC9BcnJheUxpc3Q7W0xqYXZhL2xhbmcvU3RyaW5nO1pMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiIHNpbmNlPSIxNCIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdDaG9vc2VBY2NvdW50SW50ZW50KExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvdXRpbC9MaXN0O1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeUFjY291bnRBdXRoZW50aWNhdGVkKExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7KVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InBlZWtBdXRoVG9rZW4oTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQWNjb3VudChMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O0xhbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJGdXR1cmU7IiBkZXByZWNhdGVkPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUFjY291bnQoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckZ1dHVyZTsiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUFjY291bnRFeHBsaWNpdGx5KExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7KVoiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU9uQWNjb3VudHNVcGRhdGVkTGlzdGVuZXIoTGFuZHJvaWQvYWNjb3VudHMvT25BY2NvdW50c1VwZGF0ZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVuYW1lQWNjb3VudChMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJGdXR1cmU7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBY2NvdW50VmlzaWJpbGl0eShMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O0xqYXZhL2xhbmcvU3RyaW5nO0kpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0aFRva2VuKExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXNzd29yZChMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXNlckRhdGEoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWRkQWNjb3VudFNlc3Npb24oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckZ1dHVyZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0VXBkYXRlQ3JlZGVudGlhbHNTZXNzaW9uKExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckNhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KUxhbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyRnV0dXJlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQ3JlZGVudGlhbHMoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7TGFuZHJvaWQvYXBwL0FjdGl2aXR5O0xhbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJGdXR1cmU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQUNDT1VOVF9SRU1PVkVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BVVRIRU5USUNBVE9SX0lOVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSEVOVElDQVRPUl9BVFRSSUJVVEVTX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVEhFTlRJQ0FUT1JfTUVUQV9EQVRBX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0NPREVfQkFEX0FSR1VNRU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfQ09ERV9CQURfQVVUSEVOVElDQVRJT04iIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfQ09ERV9CQURfUkVRVUVTVCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfQ09ERV9DQU5DRUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfQ09ERV9JTlZBTElEX1JFU1BPTlNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9DT0RFX05FVFdPUktfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0NPREVfUkVNT1RFX0VYQ0VQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfQ09ERV9VTlNVUFBPUlRFRF9PUEVSQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9BQ0NPVU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FDQ09VTlRfQVVUSEVOVElDQVRPUl9SRVNQT05TRSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FDQ09VTlRfTUFOQUdFUl9SRVNQT05TRSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FDQ09VTlRfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FDQ09VTlRfU0VTU0lPTl9CVU5ETEUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FDQ09VTlRfU1RBVFVTX1RPS0VOIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9BQ0NPVU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9BTkRST0lEX1BBQ0tBR0VfTkFNRSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQVVUSEVOVElDQVRPUl9UWVBFUyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FVVEhUT0tFTiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FVVEhfRkFJTEVEX01FU1NBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9BVVRIX1RPS0VOX0xBQkVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQk9PTEVBTl9SRVNVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9DQUxMRVJfUElEIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9DQUxMRVJfVUlEIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9FUlJPUl9DT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfRVJST1JfTUVTU0FHRSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0lOVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0xBU1RfQVVUSEVOVElDQVRFRF9USU1FIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9QQVNTV09SRCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1VTRVJEQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0dJTl9BQ0NPVU5UU19DSEFOR0VEX0FDVElPTiIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlBBQ0tBR0VfTkFNRV9LRVlfTEVHQUNZX05PVF9WSVNJQkxFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlBBQ0tBR0VfTkFNRV9LRVlfTEVHQUNZX1ZJU0lCTEUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iVklTSUJJTElUWV9OT1RfVklTSUJMRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWSVNJQklMSVRZX1VOREVGSU5FRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWSVNJQklMSVRZX1VTRVJfTUFOQUdFRF9OT1RfVklTSUJMRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWSVNJQklMSVRZX1VTRVJfTUFOQUdFRF9WSVNJQkxFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlZJU0lCSUxJVFlfVklTSUJMRSIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckNhbGxiYWNrIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW4oTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJGdXR1cmU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyRnV0dXJlIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWwoWilaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzdWx0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXN1bHQoSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDYW5jZWxsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RvbmUoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FjY291bnRzL0FjY291bnRzRXhjZXB0aW9uIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FjY291bnRzL0F1dGhlbnRpY2F0b3JEZXNjcmlwdGlvbiIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUlJSVopViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3S2V5KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9hY2NvdW50cy9BdXRoZW50aWNhdG9yRGVzY3JpcHRpb247Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY2NvdW50UHJlZmVyZW5jZXNJZCIvPgotCQk8ZmllbGQgbmFtZT0iY3VzdG9tVG9rZW5zIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Imljb25JZCIvPgotCQk8ZmllbGQgbmFtZT0ibGFiZWxJZCIvPgotCQk8ZmllbGQgbmFtZT0icGFja2FnZU5hbWUiLz4KLQkJPGZpZWxkIG5hbWU9InNtYWxsSWNvbklkIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0eXBlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hY2NvdW50cy9BdXRoZW50aWNhdG9yRXhjZXB0aW9uIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYWNjb3VudHMvQWNjb3VudHNFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FjY291bnRzL05ldHdvcmtFcnJvckV4Y2VwdGlvbiIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FjY291bnRzL0FjY291bnRzRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hY2NvdW50cy9PbkFjY291bnRzVXBkYXRlTGlzdGVuZXIiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWNjb3VudHNVcGRhdGVkKFtMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hY2NvdW50cy9PcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbiIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FjY291bnRzL0FjY291bnRzRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3IiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZExpc3RlbmVyKExhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvciRBbmltYXRvckxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUGF1c2VMaXN0ZW5lcihMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3IkQW5pbWF0b3JQYXVzZUxpc3RlbmVyOylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWwoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldER1cmF0aW9uKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZXJwb2xhdG9yKClMYW5kcm9pZC9hbmltYXRpb24vVGltZUludGVycG9sYXRvcjsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpc3RlbmVycygpTGphdmEvdXRpbC9BcnJheUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhcnREZWxheSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdGFsRHVyYXRpb24oKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGF1c2VkKClaIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1J1bm5pbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N0YXJ0ZWQoKVoiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhdXNlKClWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBbGxMaXN0ZW5lcnMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVMaXN0ZW5lcihMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3IkQW5pbWF0b3JMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVBhdXNlTGlzdGVuZXIoTGFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9yJEFuaW1hdG9yUGF1c2VMaXN0ZW5lcjspViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdW1lKClWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREdXJhdGlvbihKKUxhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlcnBvbGF0b3IoTGFuZHJvaWQvYW5pbWF0aW9uL1RpbWVJbnRlcnBvbGF0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGFydERlbGF5KEopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRhcmdldChMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldHVwRW5kVmFsdWVzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0dXBTdGFydFZhbHVlcygpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJEVVJBVElPTl9JTkZJTklURSIgc2luY2U9IjI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3IkQW5pbWF0b3JMaXN0ZW5lciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQW5pbWF0aW9uQ2FuY2VsKExhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQW5pbWF0aW9uRW5kKExhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQW5pbWF0aW9uRW5kKExhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvcjtaKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQW5pbWF0aW9uUmVwZWF0KExhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQW5pbWF0aW9uU3RhcnQoTGFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BbmltYXRpb25TdGFydChMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3I7WilWIiBzaW5jZT0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvciRBbmltYXRvclBhdXNlTGlzdGVuZXIiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFuaW1hdGlvblBhdXNlKExhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQW5pbWF0aW9uUmVzdW1lKExhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9ySW5mbGF0ZXIiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkQW5pbWF0b3IoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0kpTGFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRTdGF0ZUxpc3RBbmltYXRvcihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SSlMYW5kcm9pZC9hbmltYXRpb24vU3RhdGVMaXN0QW5pbWF0b3I7IiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvckxpc3RlbmVyQWRhcHRlciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvciRBbmltYXRvckxpc3RlbmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9yJEFuaW1hdG9yUGF1c2VMaXN0ZW5lciIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3JTZXQiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmUoKUxhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvclNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGlsZEFuaW1hdGlvbnMoKUxqYXZhL3V0aWwvQXJyYXlMaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRQbGF5VGltZSgpSiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGxheShMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3I7KUxhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvclNldCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsYXlTZXF1ZW50aWFsbHkoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGxheVNlcXVlbnRpYWxseShbTGFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGxheVRvZ2V0aGVyKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9InBsYXlUb2dldGhlcihbTGFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmV2ZXJzZSgpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VycmVudFBsYXlUaW1lKEopViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHVyYXRpb24oSilMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3JTZXQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3JTZXQkQnVpbGRlciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3JTZXQ7KVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvclNldDtMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3I7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFmdGVyKEopTGFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9yU2V0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWZ0ZXIoTGFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9yOylMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3JTZXQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJiZWZvcmUoTGFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9yOylMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3JTZXQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoKExhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvcjspTGFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9yU2V0JEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vQXJnYkV2YWx1YXRvciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9UeXBlRXZhbHVhdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vQmlkaXJlY3Rpb25hbFR5cGVDb252ZXJ0ZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYW5pbWF0aW9uL1R5cGVDb252ZXJ0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL0NsYXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udmVydEJhY2soTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImludmVydCgpTGFuZHJvaWQvYW5pbWF0aW9uL0JpZGlyZWN0aW9uYWxUeXBlQ29udmVydGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYW5pbWF0aW9uL0Zsb2F0QXJyYXlFdmFsdWF0b3IiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vVHlwZUV2YWx1YXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXZhbHVhdGUoRltGW0YpW0YiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9GbG9hdEV2YWx1YXRvciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9UeXBlRXZhbHVhdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXZhbHVhdGUoRkxqYXZhL2xhbmcvTnVtYmVyO0xqYXZhL2xhbmcvTnVtYmVyOylMamF2YS9sYW5nL0Zsb2F0OyIgc2luY2U9IjE0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vSW50QXJyYXlFdmFsdWF0b3IiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vVHlwZUV2YWx1YXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXZhbHVhdGUoRltJW0kpW0kiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9JbnRFdmFsdWF0b3IiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vVHlwZUV2YWx1YXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImV2YWx1YXRlKEZMamF2YS9sYW5nL0ludGVnZXI7TGphdmEvbGFuZy9JbnRlZ2VyOylMamF2YS9sYW5nL0ludGVnZXI7IiBzaW5jZT0iMTQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9LZXlmcmFtZSIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmUoKUxhbmRyb2lkL2FuaW1hdGlvbi9LZXlmcmFtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcmFjdGlvbigpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVycG9sYXRvcigpTGFuZHJvaWQvYW5pbWF0aW9uL1RpbWVJbnRlcnBvbGF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzVmFsdWUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkZsb2F0KEYpTGFuZHJvaWQvYW5pbWF0aW9uL0tleWZyYW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mRmxvYXQoRkYpTGFuZHJvaWQvYW5pbWF0aW9uL0tleWZyYW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mSW50KEYpTGFuZHJvaWQvYW5pbWF0aW9uL0tleWZyYW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mSW50KEZJKUxhbmRyb2lkL2FuaW1hdGlvbi9LZXlmcmFtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZk9iamVjdChGKUxhbmRyb2lkL2FuaW1hdGlvbi9LZXlmcmFtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZk9iamVjdChGTGphdmEvbGFuZy9PYmplY3Q7KUxhbmRyb2lkL2FuaW1hdGlvbi9LZXlmcmFtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGcmFjdGlvbihGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlcnBvbGF0b3IoTGFuZHJvaWQvYW5pbWF0aW9uL1RpbWVJbnRlcnBvbGF0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYWx1ZShMamF2YS9sYW5nL09iamVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYW5pbWF0aW9uL0xheW91dFRyYW5zaXRpb24iIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDaGlsZChMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDtMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRUcmFuc2l0aW9uTGlzdGVuZXIoTGFuZHJvaWQvYW5pbWF0aW9uL0xheW91dFRyYW5zaXRpb24kVHJhbnNpdGlvbkxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzYWJsZVRyYW5zaXRpb25UeXBlKEkpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlVHJhbnNpdGlvblR5cGUoSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmltYXRvcihJKUxhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREdXJhdGlvbihJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlcnBvbGF0b3IoSSlMYW5kcm9pZC9hbmltYXRpb24vVGltZUludGVycG9sYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFnZ2VyKEkpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXJ0RGVsYXkoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNpdGlvbkxpc3RlbmVycygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImhpZGVDaGlsZChMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDtMYW5kcm9pZC92aWV3L1ZpZXc7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGlkZUNoaWxkKExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwO0xhbmRyb2lkL3ZpZXcvVmlldztJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2hhbmdpbmdMYXlvdXQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1J1bm5pbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RyYW5zaXRpb25UeXBlRW5hYmxlZChJKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUNoaWxkKExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwO0xhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVRyYW5zaXRpb25MaXN0ZW5lcihMYW5kcm9pZC9hbmltYXRpb24vTGF5b3V0VHJhbnNpdGlvbiRUcmFuc2l0aW9uTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbmltYXRlUGFyZW50SGllcmFyY2h5KFopViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QW5pbWF0b3IoSUxhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldER1cmF0aW9uKElKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREdXJhdGlvbihKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlcnBvbGF0b3IoSUxhbmRyb2lkL2FuaW1hdGlvbi9UaW1lSW50ZXJwb2xhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RhZ2dlcihJSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RhcnREZWxheShJSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd0NoaWxkKExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwO0xhbmRyb2lkL3ZpZXcvVmlldzspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93Q2hpbGQoTGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7TGFuZHJvaWQvdmlldy9WaWV3O0kpViIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUFBFQVJJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5HRV9BUFBFQVJJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5HRV9ESVNBUFBFQVJJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5HSU5HIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FQUEVBUklORyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYW5pbWF0aW9uL0xheW91dFRyYW5zaXRpb24kVHJhbnNpdGlvbkxpc3RlbmVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5kVHJhbnNpdGlvbihMYW5kcm9pZC9hbmltYXRpb24vTGF5b3V0VHJhbnNpdGlvbjtMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDtMYW5kcm9pZC92aWV3L1ZpZXc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRUcmFuc2l0aW9uKExhbmRyb2lkL2FuaW1hdGlvbi9MYXlvdXRUcmFuc2l0aW9uO0xhbmRyb2lkL3ZpZXcvVmlld0dyb3VwO0xhbmRyb2lkL3ZpZXcvVmlldztJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vVmFsdWVBbmltYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lKClMYW5kcm9pZC9hbmltYXRpb24vT2JqZWN0QW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvcGVydHlOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYXJnZXQoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mQXJnYihMamF2YS9sYW5nL09iamVjdDtMYW5kcm9pZC91dGlsL1Byb3BlcnR5O1tJKUxhbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mQXJnYihMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1N0cmluZztbSSlMYW5kcm9pZC9hbmltYXRpb24vT2JqZWN0QW5pbWF0b3I7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkZsb2F0KExqYXZhL2xhbmcvT2JqZWN0O0xhbmRyb2lkL3V0aWwvUHJvcGVydHk7TGFuZHJvaWQvdXRpbC9Qcm9wZXJ0eTtMYW5kcm9pZC9ncmFwaGljcy9QYXRoOylMYW5kcm9pZC9hbmltYXRpb24vT2JqZWN0QW5pbWF0b3I7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkZsb2F0KExqYXZhL2xhbmcvT2JqZWN0O0xhbmRyb2lkL3V0aWwvUHJvcGVydHk7W0YpTGFuZHJvaWQvYW5pbWF0aW9uL09iamVjdEFuaW1hdG9yOyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZGbG9hdChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9ncmFwaGljcy9QYXRoOylMYW5kcm9pZC9hbmltYXRpb24vT2JqZWN0QW5pbWF0b3I7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkZsb2F0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvU3RyaW5nO1tGKUxhbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkludChMamF2YS9sYW5nL09iamVjdDtMYW5kcm9pZC91dGlsL1Byb3BlcnR5O0xhbmRyb2lkL3V0aWwvUHJvcGVydHk7TGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDspTGFuZHJvaWQvYW5pbWF0aW9uL09iamVjdEFuaW1hdG9yOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZJbnQoTGphdmEvbGFuZy9PYmplY3Q7TGFuZHJvaWQvdXRpbC9Qcm9wZXJ0eTtbSSlMYW5kcm9pZC9hbmltYXRpb24vT2JqZWN0QW5pbWF0b3I7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkludChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9ncmFwaGljcy9QYXRoOylMYW5kcm9pZC9hbmltYXRpb24vT2JqZWN0QW5pbWF0b3I7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkludChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1N0cmluZztbSSlMYW5kcm9pZC9hbmltYXRpb24vT2JqZWN0QW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZNdWx0aUZsb2F0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2FuaW1hdGlvbi9UeXBlQ29udmVydGVyO0xhbmRyb2lkL2FuaW1hdGlvbi9UeXBlRXZhbHVhdG9yO1tMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvYW5pbWF0aW9uL09iamVjdEFuaW1hdG9yOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZNdWx0aUZsb2F0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2dyYXBoaWNzL1BhdGg7KUxhbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mTXVsdGlGbG9hdChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1N0cmluZztbW0YpTGFuZHJvaWQvYW5pbWF0aW9uL09iamVjdEFuaW1hdG9yOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZNdWx0aUludChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9hbmltYXRpb24vVHlwZUNvbnZlcnRlcjtMYW5kcm9pZC9hbmltYXRpb24vVHlwZUV2YWx1YXRvcjtbTGphdmEvbGFuZy9PYmplY3Q7KUxhbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mTXVsdGlJbnQoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDspTGFuZHJvaWQvYW5pbWF0aW9uL09iamVjdEFuaW1hdG9yOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZNdWx0aUludChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1N0cmluZztbW0kpTGFuZHJvaWQvYW5pbWF0aW9uL09iamVjdEFuaW1hdG9yOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZPYmplY3QoTGphdmEvbGFuZy9PYmplY3Q7TGFuZHJvaWQvdXRpbC9Qcm9wZXJ0eTtMYW5kcm9pZC9hbmltYXRpb24vVHlwZUNvbnZlcnRlcjtMYW5kcm9pZC9hbmltYXRpb24vVHlwZUV2YWx1YXRvcjtbTGphdmEvbGFuZy9PYmplY3Q7KUxhbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mT2JqZWN0KExqYXZhL2xhbmcvT2JqZWN0O0xhbmRyb2lkL3V0aWwvUHJvcGVydHk7TGFuZHJvaWQvYW5pbWF0aW9uL1R5cGVDb252ZXJ0ZXI7TGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDspTGFuZHJvaWQvYW5pbWF0aW9uL09iamVjdEFuaW1hdG9yOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZPYmplY3QoTGphdmEvbGFuZy9PYmplY3Q7TGFuZHJvaWQvdXRpbC9Qcm9wZXJ0eTtMYW5kcm9pZC9hbmltYXRpb24vVHlwZUV2YWx1YXRvcjtbTGphdmEvbGFuZy9PYmplY3Q7KUxhbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvcjsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9mT2JqZWN0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2FuaW1hdGlvbi9UeXBlQ29udmVydGVyO0xhbmRyb2lkL2dyYXBoaWNzL1BhdGg7KUxhbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mT2JqZWN0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2FuaW1hdGlvbi9UeXBlRXZhbHVhdG9yO1tMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvYW5pbWF0aW9uL09iamVjdEFuaW1hdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mUHJvcGVydHlWYWx1ZXNIb2xkZXIoTGphdmEvbGFuZy9PYmplY3Q7W0xhbmRyb2lkL2FuaW1hdGlvbi9Qcm9wZXJ0eVZhbHVlc0hvbGRlcjspTGFuZHJvaWQvYW5pbWF0aW9uL09iamVjdEFuaW1hdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dG9DYW5jZWwoWilWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREdXJhdGlvbihKKUxhbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9wZXJ0eShMYW5kcm9pZC91dGlsL1Byb3BlcnR5OylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9wZXJ0eU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9Qb2ludEZFdmFsdWF0b3IiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vVHlwZUV2YWx1YXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9Qb2ludEY7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJldmFsdWF0ZShGTGFuZHJvaWQvZ3JhcGhpY3MvUG9pbnRGO0xhbmRyb2lkL2dyYXBoaWNzL1BvaW50RjspTGFuZHJvaWQvZ3JhcGhpY3MvUG9pbnRGOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3BlcnR5TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZGbG9hdChMYW5kcm9pZC91dGlsL1Byb3BlcnR5O1tGKUxhbmRyb2lkL2FuaW1hdGlvbi9Qcm9wZXJ0eVZhbHVlc0hvbGRlcjsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9mRmxvYXQoTGphdmEvbGFuZy9TdHJpbmc7W0YpTGFuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mSW50KExhbmRyb2lkL3V0aWwvUHJvcGVydHk7W0kpTGFuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyOyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZJbnQoTGphdmEvbGFuZy9TdHJpbmc7W0kpTGFuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mS2V5ZnJhbWUoTGFuZHJvaWQvdXRpbC9Qcm9wZXJ0eTtbTGFuZHJvaWQvYW5pbWF0aW9uL0tleWZyYW1lOylMYW5kcm9pZC9hbmltYXRpb24vUHJvcGVydHlWYWx1ZXNIb2xkZXI7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZktleWZyYW1lKExqYXZhL2xhbmcvU3RyaW5nO1tMYW5kcm9pZC9hbmltYXRpb24vS2V5ZnJhbWU7KUxhbmRyb2lkL2FuaW1hdGlvbi9Qcm9wZXJ0eVZhbHVlc0hvbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZk11bHRpRmxvYXQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvYW5pbWF0aW9uL1R5cGVDb252ZXJ0ZXI7TGFuZHJvaWQvYW5pbWF0aW9uL1R5cGVFdmFsdWF0b3I7W0xhbmRyb2lkL2FuaW1hdGlvbi9LZXlmcmFtZTspTGFuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZNdWx0aUZsb2F0KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2FuaW1hdGlvbi9UeXBlQ29udmVydGVyO0xhbmRyb2lkL2FuaW1hdGlvbi9UeXBlRXZhbHVhdG9yO1tMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZNdWx0aUZsb2F0KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2dyYXBoaWNzL1BhdGg7KUxhbmRyb2lkL2FuaW1hdGlvbi9Qcm9wZXJ0eVZhbHVlc0hvbGRlcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mTXVsdGlGbG9hdChMamF2YS9sYW5nL1N0cmluZztbW0YpTGFuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZNdWx0aUludChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9hbmltYXRpb24vVHlwZUNvbnZlcnRlcjtMYW5kcm9pZC9hbmltYXRpb24vVHlwZUV2YWx1YXRvcjtbTGFuZHJvaWQvYW5pbWF0aW9uL0tleWZyYW1lOylMYW5kcm9pZC9hbmltYXRpb24vUHJvcGVydHlWYWx1ZXNIb2xkZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZk11bHRpSW50KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2FuaW1hdGlvbi9UeXBlQ29udmVydGVyO0xhbmRyb2lkL2FuaW1hdGlvbi9UeXBlRXZhbHVhdG9yO1tMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZNdWx0aUludChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9ncmFwaGljcy9QYXRoOylMYW5kcm9pZC9hbmltYXRpb24vUHJvcGVydHlWYWx1ZXNIb2xkZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZk11bHRpSW50KExqYXZhL2xhbmcvU3RyaW5nO1tbSSlMYW5kcm9pZC9hbmltYXRpb24vUHJvcGVydHlWYWx1ZXNIb2xkZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZk9iamVjdChMYW5kcm9pZC91dGlsL1Byb3BlcnR5O0xhbmRyb2lkL2FuaW1hdGlvbi9UeXBlQ29udmVydGVyO0xhbmRyb2lkL2FuaW1hdGlvbi9UeXBlRXZhbHVhdG9yO1tMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZPYmplY3QoTGFuZHJvaWQvdXRpbC9Qcm9wZXJ0eTtMYW5kcm9pZC9hbmltYXRpb24vVHlwZUNvbnZlcnRlcjtMYW5kcm9pZC9ncmFwaGljcy9QYXRoOylMYW5kcm9pZC9hbmltYXRpb24vUHJvcGVydHlWYWx1ZXNIb2xkZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZk9iamVjdChMYW5kcm9pZC91dGlsL1Byb3BlcnR5O0xhbmRyb2lkL2FuaW1hdGlvbi9UeXBlRXZhbHVhdG9yO1tMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyOyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZPYmplY3QoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvYW5pbWF0aW9uL1R5cGVDb252ZXJ0ZXI7TGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDspTGFuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZPYmplY3QoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvYW5pbWF0aW9uL1R5cGVFdmFsdWF0b3I7W0xqYXZhL2xhbmcvT2JqZWN0OylMYW5kcm9pZC9hbmltYXRpb24vUHJvcGVydHlWYWx1ZXNIb2xkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udmVydGVyKExhbmRyb2lkL2FuaW1hdGlvbi9UeXBlQ29udmVydGVyOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFdmFsdWF0b3IoTGFuZHJvaWQvYW5pbWF0aW9uL1R5cGVFdmFsdWF0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGbG9hdFZhbHVlcyhbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50VmFsdWVzKFtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZXlmcmFtZXMoW0xhbmRyb2lkL2FuaW1hdGlvbi9LZXlmcmFtZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9iamVjdFZhbHVlcyhbTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9wZXJ0eShMYW5kcm9pZC91dGlsL1Byb3BlcnR5OylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9wZXJ0eU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9SZWN0RXZhbHVhdG9yIiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvYW5pbWF0aW9uL1R5cGVFdmFsdWF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXZhbHVhdGUoRkxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9TdGF0ZUxpc3RBbmltYXRvciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTdGF0ZShbSUxhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lKClMYW5kcm9pZC9hbmltYXRpb24vU3RhdGVMaXN0QW5pbWF0b3I7IiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJqdW1wVG9DdXJyZW50U3RhdGUoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9UaW1lQW5pbWF0b3IiIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYW5pbWF0aW9uL1ZhbHVlQW5pbWF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaW1lTGlzdGVuZXIoTGFuZHJvaWQvYW5pbWF0aW9uL1RpbWVBbmltYXRvciRUaW1lTGlzdGVuZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FuaW1hdGlvbi9UaW1lQW5pbWF0b3IkVGltZUxpc3RlbmVyIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25UaW1lVXBkYXRlKExhbmRyb2lkL2FuaW1hdGlvbi9UaW1lQW5pbWF0b3I7SkopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYW5pbWF0aW9uL1RpbWVJbnRlcnBvbGF0b3IiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlcnBvbGF0aW9uKEYpRiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYW5pbWF0aW9uL1R5cGVDb252ZXJ0ZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL0NsYXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udmVydChMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vVHlwZUV2YWx1YXRvciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImV2YWx1YXRlKEZMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vVmFsdWVBbmltYXRvciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRVcGRhdGVMaXN0ZW5lcihMYW5kcm9pZC9hbmltYXRpb24vVmFsdWVBbmltYXRvciRBbmltYXRvclVwZGF0ZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXJlQW5pbWF0b3JzRW5hYmxlZCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmUoKUxhbmRyb2lkL2FuaW1hdGlvbi9WYWx1ZUFuaW1hdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuaW1hdGVkRnJhY3Rpb24oKUYiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuaW1hdGVkVmFsdWUoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuaW1hdGVkVmFsdWUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRQbGF5VGltZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyYW1lRGVsYXkoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlcnBvbGF0b3IoKUxhbmRyb2lkL2FuaW1hdGlvbi9UaW1lSW50ZXJwb2xhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcGVhdENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVwZWF0TW9kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbHVlcygpW0xhbmRyb2lkL2FuaW1hdGlvbi9Qcm9wZXJ0eVZhbHVlc0hvbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkFyZ2IoW0kpTGFuZHJvaWQvYW5pbWF0aW9uL1ZhbHVlQW5pbWF0b3I7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkZsb2F0KFtGKUxhbmRyb2lkL2FuaW1hdGlvbi9WYWx1ZUFuaW1hdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mSW50KFtJKUxhbmRyb2lkL2FuaW1hdGlvbi9WYWx1ZUFuaW1hdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mT2JqZWN0KExhbmRyb2lkL2FuaW1hdGlvbi9UeXBlRXZhbHVhdG9yO1tMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvYW5pbWF0aW9uL1ZhbHVlQW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZQcm9wZXJ0eVZhbHVlc0hvbGRlcihbTGFuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyOylMYW5kcm9pZC9hbmltYXRpb24vVmFsdWVBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBbGxVcGRhdGVMaXN0ZW5lcnMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVVcGRhdGVMaXN0ZW5lcihMYW5kcm9pZC9hbmltYXRpb24vVmFsdWVBbmltYXRvciRBbmltYXRvclVwZGF0ZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmV2ZXJzZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1cnJlbnRGcmFjdGlvbihGKVYiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1cnJlbnRQbGF5VGltZShKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREdXJhdGlvbihKKUxhbmRyb2lkL2FuaW1hdGlvbi9WYWx1ZUFuaW1hdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV2YWx1YXRvcihMYW5kcm9pZC9hbmltYXRpb24vVHlwZUV2YWx1YXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZsb2F0VmFsdWVzKFtGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGcmFtZURlbGF5KEopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludFZhbHVlcyhbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T2JqZWN0VmFsdWVzKFtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlcGVhdENvdW50KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlcGVhdE1vZGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFsdWVzKFtMYW5kcm9pZC9hbmltYXRpb24vUHJvcGVydHlWYWx1ZXNIb2xkZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IklORklOSVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNUQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVZFUlNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vVmFsdWVBbmltYXRvciRBbmltYXRvclVwZGF0ZUxpc3RlbmVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BbmltYXRpb25VcGRhdGUoTGFuZHJvaWQvYW5pbWF0aW9uL1ZhbHVlQW5pbWF0b3I7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2Fubm90YXRpb24vU3VwcHJlc3NMaW50IiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZSgpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYW5ub3RhdGlvbi9UYXJnZXRBcGkiIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL2Fubm90YXRpb24vQW5ub3RhdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvQWN0aW9uQmFyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkT25NZW51VmlzaWJpbGl0eUxpc3RlbmVyKExhbmRyb2lkL2FwcC9BY3Rpb25CYXIkT25NZW51VmlzaWJpbGl0eUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGFiKExhbmRyb2lkL2FwcC9BY3Rpb25CYXIkVGFiOylWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRhYihMYW5kcm9pZC9hcHAvQWN0aW9uQmFyJFRhYjtJKVYiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGFiKExhbmRyb2lkL2FwcC9BY3Rpb25CYXIkVGFiO0laKVYiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGFiKExhbmRyb2lkL2FwcC9BY3Rpb25CYXIkVGFiO1opViIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXN0b21WaWV3KClMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU9wdGlvbnMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbGV2YXRpb24oKUYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpZGVPZmZzZXQoKUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hdmlnYXRpb25JdGVtQ291bnQoKUkiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmF2aWdhdGlvbk1vZGUoKUkiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VsZWN0ZWROYXZpZ2F0aW9uSW5kZXgoKUkiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VsZWN0ZWRUYWIoKUxhbmRyb2lkL2FwcC9BY3Rpb25CYXIkVGFiOyIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJ0aXRsZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFiQXQoSSlMYW5kcm9pZC9hcHAvQWN0aW9uQmFyJFRhYjsiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFiQ291bnQoKUkiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGhlbWVkQ29udGV4dCgpTGFuZHJvaWQvY29udGVudC9Db250ZXh0OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGl0bGUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImhpZGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0hpZGVPbkNvbnRlbnRTY3JvbGxFbmFibGVkKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Nob3dpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdUYWIoKUxhbmRyb2lkL2FwcC9BY3Rpb25CYXIkVGFiOyIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBbGxUYWJzKClWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU9uTWVudVZpc2liaWxpdHlMaXN0ZW5lcihMYW5kcm9pZC9hcHAvQWN0aW9uQmFyJE9uTWVudVZpc2liaWxpdHlMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVRhYihMYW5kcm9pZC9hcHAvQWN0aW9uQmFyJFRhYjspViIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVUYWJBdChJKVYiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VsZWN0VGFiKExhbmRyb2lkL2FwcC9BY3Rpb25CYXIkVGFiOylWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJhY2tncm91bmREcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1c3RvbVZpZXcoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VzdG9tVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXN0b21WaWV3KExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC9hcHAvQWN0aW9uQmFyJExheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXlIb21lQXNVcEVuYWJsZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlzcGxheU9wdGlvbnMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlzcGxheU9wdGlvbnMoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXlTaG93Q3VzdG9tRW5hYmxlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaXNwbGF5U2hvd0hvbWVFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXlTaG93VGl0bGVFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXlVc2VMb2dvRW5hYmxlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbGV2YXRpb24oRilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIaWRlT2Zmc2V0KEkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGlkZU9uQ29udGVudFNjcm9sbEVuYWJsZWQoWilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIb21lQWN0aW9uQ29udGVudERlc2NyaXB0aW9uKEkpViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG9tZUFjdGlvbkNvbnRlbnREZXNjcmlwdGlvbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG9tZUFzVXBJbmRpY2F0b3IoSSlWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIb21lQXNVcEluZGljYXRvcihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG9tZUJ1dHRvbkVuYWJsZWQoWilWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uKEkpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWNvbihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGlzdE5hdmlnYXRpb25DYWxsYmFja3MoTGFuZHJvaWQvd2lkZ2V0L1NwaW5uZXJBZGFwdGVyO0xhbmRyb2lkL2FwcC9BY3Rpb25CYXIkT25OYXZpZ2F0aW9uTGlzdGVuZXI7KVYiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9nbyhJKVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvZ28oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5hdmlnYXRpb25Nb2RlKEkpViIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWxlY3RlZE5hdmlnYXRpb25JdGVtKEkpViIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTcGxpdEJhY2tncm91bmREcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RhY2tlZEJhY2tncm91bmREcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VidGl0bGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VidGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaXRsZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaXRsZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3coKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU1BMQVlfSE9NRV9BU19VUCIvPgotCQk8ZmllbGQgbmFtZT0iRElTUExBWV9TSE9XX0NVU1RPTSIvPgotCQk8ZmllbGQgbmFtZT0iRElTUExBWV9TSE9XX0hPTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU1BMQVlfU0hPV19USVRMRSIvPgotCQk8ZmllbGQgbmFtZT0iRElTUExBWV9VU0VfTE9HTyIvPgotCQk8ZmllbGQgbmFtZT0iTkFWSUdBVElPTl9NT0RFX0xJU1QiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQVZJR0FUSU9OX01PREVfU1RBTkRBUkQiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQVZJR0FUSU9OX01PREVfVEFCUyIgZGVwcmVjYXRlZD0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BY3Rpb25CYXIkTGF5b3V0UGFyYW1zIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJE1hcmdpbkxheW91dFBhcmFtcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9hcHAvQWN0aW9uQmFyJExheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJncmF2aXR5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvQWN0aW9uQmFyJE9uTWVudVZpc2liaWxpdHlMaXN0ZW5lciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTWVudVZpc2liaWxpdHlDaGFuZ2VkKFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0FjdGlvbkJhciRPbk5hdmlnYXRpb25MaXN0ZW5lciIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk5hdmlnYXRpb25JdGVtU2VsZWN0ZWQoSUopWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0FjdGlvbkJhciRUYWIiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudERlc2NyaXB0aW9uKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1c3RvbVZpZXcoKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJY29uKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3NpdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRhZygpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2VsZWN0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGVudERlc2NyaXB0aW9uKEkpTGFuZHJvaWQvYXBwL0FjdGlvbkJhciRUYWI7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50RGVzY3JpcHRpb24oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9BY3Rpb25CYXIkVGFiOyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VzdG9tVmlldyhJKUxhbmRyb2lkL2FwcC9BY3Rpb25CYXIkVGFiOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1c3RvbVZpZXcoTGFuZHJvaWQvdmlldy9WaWV3OylMYW5kcm9pZC9hcHAvQWN0aW9uQmFyJFRhYjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uKEkpTGFuZHJvaWQvYXBwL0FjdGlvbkJhciRUYWI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWNvbihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspTGFuZHJvaWQvYXBwL0FjdGlvbkJhciRUYWI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFiTGlzdGVuZXIoTGFuZHJvaWQvYXBwL0FjdGlvbkJhciRUYWJMaXN0ZW5lcjspTGFuZHJvaWQvYXBwL0FjdGlvbkJhciRUYWI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFnKExqYXZhL2xhbmcvT2JqZWN0OylMYW5kcm9pZC9hcHAvQWN0aW9uQmFyJFRhYjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0KEkpTGFuZHJvaWQvYXBwL0FjdGlvbkJhciRUYWI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvYXBwL0FjdGlvbkJhciRUYWI7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlZBTElEX1BPU0lUSU9OIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvQWN0aW9uQmFyJFRhYkxpc3RlbmVyIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVGFiUmVzZWxlY3RlZChMYW5kcm9pZC9hcHAvQWN0aW9uQmFyJFRhYjtMYW5kcm9pZC9hcHAvRnJhZ21lbnRUcmFuc2FjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVGFiU2VsZWN0ZWQoTGFuZHJvaWQvYXBwL0FjdGlvbkJhciRUYWI7TGFuZHJvaWQvYXBwL0ZyYWdtZW50VHJhbnNhY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRhYlVuc2VsZWN0ZWQoTGFuZHJvaWQvYXBwL0FjdGlvbkJhciRUYWI7TGFuZHJvaWQvYXBwL0ZyYWdtZW50VHJhbnNhY3Rpb247KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BY3Rpdml0eSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvQ29udGV4dFRoZW1lV3JhcHBlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50Q2FsbGJhY2tzIiByZW1vdmVkPSIxNCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50Q2FsbGJhY2tzMiIgc2luY2U9IjE0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9LZXlFdmVudCRDYWxsYmFjayIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXIkRmFjdG9yeSIgcmVtb3ZlZD0iMTEiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyJEZhY3RvcnkyIiBzaW5jZT0iMTEiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXckT25DcmVhdGVDb250ZXh0TWVudUxpc3RlbmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9XaW5kb3ckQ2FsbGJhY2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDb250ZW50VmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2VDb250ZXh0TWVudSgpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZU9wdGlvbnNNZW51KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlUGVuZGluZ1Jlc3VsdChJTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7SSlMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNtaXNzRGlhbG9nKEkpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNtaXNzS2V5Ym9hcmRTaG9ydGN1dHNIZWxwZXIoKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXAoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vRmlsZURlc2NyaXB0b3I7TGphdmEvaW8vUHJpbnRXcml0ZXI7W0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbnRlclBpY3R1cmVJblBpY3R1cmVNb2RlKClWIiBzaW5jZT0iMjQiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW50ZXJQaWN0dXJlSW5QaWN0dXJlTW9kZShMYW5kcm9pZC9hcHAvUGljdHVyZUluUGljdHVyZVBhcmFtczspWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZFZpZXdCeUlkKEkpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaEFjdGl2aXR5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaEFjdGl2aXR5RnJvbUNoaWxkKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5pc2hBZmZpbml0eSgpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluaXNoQWZ0ZXJUcmFuc2l0aW9uKClWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5pc2hBbmRSZW1vdmVUYXNrKClWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5pc2hGcm9tQ2hpbGQoTGFuZHJvaWQvYXBwL0FjdGl2aXR5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aW9uQmFyKClMYW5kcm9pZC9hcHAvQWN0aW9uQmFyOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwbGljYXRpb24oKUxhbmRyb2lkL2FwcC9BcHBsaWNhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxsaW5nQWN0aXZpdHkoKUxhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxsaW5nUGFja2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhbmdpbmdDb25maWd1cmF0aW9ucygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBvbmVudE5hbWUoKUxhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50U2NlbmUoKUxhbmRyb2lkL3RyYW5zaXRpb24vU2NlbmU7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50VHJhbnNpdGlvbk1hbmFnZXIoKUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbk1hbmFnZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50Rm9jdXMoKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcmFnbWVudE1hbmFnZXIoKUxhbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXI7IiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2VDb3VudCgpSiIgcmVtb3ZlZD0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlbnQoKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhc3ROb25Db25maWd1cmF0aW9uSW5zdGFuY2UoKUxqYXZhL2xhbmcvT2JqZWN0OyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXlvdXRJbmZsYXRlcigpTGFuZHJvaWQvdmlldy9MYXlvdXRJbmZsYXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2FkZXJNYW5hZ2VyKClMYW5kcm9pZC9hcHAvTG9hZGVyTWFuYWdlcjsiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbENsYXNzTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4TnVtUGljdHVyZUluUGljdHVyZUFjdGlvbnMoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lZGlhQ29udHJvbGxlcigpTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYUNvbnRyb2xsZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZW51SW5mbGF0ZXIoKUxhbmRyb2lkL3ZpZXcvTWVudUluZmxhdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmVudCgpTGFuZHJvaWQvYXBwL0FjdGl2aXR5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmVudEFjdGl2aXR5SW50ZW50KClMYW5kcm9pZC9jb250ZW50L0ludGVudDsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWZlcmVuY2VzKEkpTGFuZHJvaWQvY29udGVudC9TaGFyZWRQcmVmZXJlbmNlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWZlcnJlcigpTGFuZHJvaWQvbmV0L1VyaTsiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVlc3RlZE9yaWVudGF0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VhcmNoRXZlbnQoKUxhbmRyb2lkL3ZpZXcvU2VhcmNoRXZlbnQ7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYXNrSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaXRsZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGl0bGVDb2xvcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZvaWNlSW50ZXJhY3RvcigpTGFuZHJvaWQvYXBwL1ZvaWNlSW50ZXJhY3RvcjsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZvbHVtZUNvbnRyb2xTdHJlYW0oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaW5kb3coKUxhbmRyb2lkL3ZpZXcvV2luZG93OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpbmRvd01hbmFnZXIoKUxhbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNXaW5kb3dGb2N1cygpWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZhbGlkYXRlT3B0aW9uc01lbnUoKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWN0aXZpdHlUcmFuc2l0aW9uUnVubmluZygpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDaGFuZ2luZ0NvbmZpZ3VyYXRpb25zKClaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NoaWxkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZXN0cm95ZWQoKVoiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmluaXNoaW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbW1lcnNpdmUoKVoiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5NdWx0aVdpbmRvd01vZGUoKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5QaWN0dXJlSW5QaWN0dXJlTW9kZSgpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMb2NhbFZvaWNlSW50ZXJhY3Rpb25TdXBwb3J0ZWQoKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVGFza1Jvb3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZvaWNlSW50ZXJhY3Rpb24oKVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVm9pY2VJbnRlcmFjdGlvblJvb3QoKVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im1hbmFnZWRRdWVyeShMYW5kcm9pZC9uZXQvVXJpO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZVRhc2tUb0JhY2soWilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmF2aWdhdGVVcFRvKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuYXZpZ2F0ZVVwVG9Gcm9tQ2hpbGQoTGFuZHJvaWQvYXBwL0FjdGl2aXR5O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFjdGl2aXR5UmVlbnRlcihJTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWN0aXZpdHlSZXN1bHQoSUlMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQXR0YWNoRnJhZ21lbnQoTGFuZHJvaWQvYXBwL0ZyYWdtZW50OylWIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25CYWNrUHJlc3NlZCgpViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNoaWxkVGl0bGVDaGFuZ2VkKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29udGV4dEl0ZW1TZWxlY3RlZChMYW5kcm9pZC92aWV3L01lbnVJdGVtOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db250ZXh0TWVudUNsb3NlZChMYW5kcm9pZC92aWV3L01lbnU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZShMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZShMYW5kcm9pZC9vcy9CdW5kbGU7TGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlRGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlRGlhbG9nKEkpTGFuZHJvaWQvYXBwL0RpYWxvZzsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVEaWFsb2coSUxhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvYXBwL0RpYWxvZzsiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlTmF2aWdhdGVVcFRhc2tTdGFjayhMYW5kcm9pZC9hcHAvVGFza1N0YWNrQnVpbGRlcjspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVPcHRpb25zTWVudShMYW5kcm9pZC92aWV3L01lbnU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZVRodW1ibmFpbChMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7TGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzOylaIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGVzdHJveSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRW50ZXJBbmltYXRpb25Db21wbGV0ZSgpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZW5lcmljTW90aW9uRXZlbnQoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25LZXlTaG9ydGN1dChJTGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Mb2NhbFZvaWNlSW50ZXJhY3Rpb25TdGFydGVkKClWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxvY2FsVm9pY2VJbnRlcmFjdGlvblN0b3BwZWQoKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTXVsdGlXaW5kb3dNb2RlQ2hhbmdlZChaKVYiIHNpbmNlPSIyNCIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk11bHRpV2luZG93TW9kZUNoYW5nZWQoWkxhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbmZpZ3VyYXRpb247KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTmF2aWdhdGVVcCgpWiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25OYXZpZ2F0ZVVwRnJvbUNoaWxkKExhbmRyb2lkL2FwcC9BY3Rpdml0eTspWiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25OZXdJbnRlbnQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk9wdGlvbnNJdGVtU2VsZWN0ZWQoTGFuZHJvaWQvdmlldy9NZW51SXRlbTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uT3B0aW9uc01lbnVDbG9zZWQoTGFuZHJvaWQvdmlldy9NZW51OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYXVzZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGljdHVyZUluUGljdHVyZU1vZGVDaGFuZ2VkKFopViIgc2luY2U9IjI0IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGljdHVyZUluUGljdHVyZU1vZGVDaGFuZ2VkKFpMYW5kcm9pZC9jb250ZW50L3Jlcy9Db25maWd1cmF0aW9uOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBvc3RDcmVhdGUoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Qb3N0Q3JlYXRlKExhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Qb3N0UmVzdW1lKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QcmVwYXJlRGlhbG9nKElMYW5kcm9pZC9hcHAvRGlhbG9nOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJlcGFyZURpYWxvZyhJTGFuZHJvaWQvYXBwL0RpYWxvZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJlcGFyZU5hdmlnYXRlVXBUYXNrU3RhY2soTGFuZHJvaWQvYXBwL1Rhc2tTdGFja0J1aWxkZXI7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJlcGFyZU9wdGlvbnNNZW51KExhbmRyb2lkL3ZpZXcvTWVudTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJvdmlkZUFzc2lzdENvbnRlbnQoTGFuZHJvaWQvYXBwL2Fzc2lzdC9Bc3Npc3RDb250ZW50OylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByb3ZpZGVBc3Npc3REYXRhKExhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Qcm92aWRlUmVmZXJyZXIoKUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlcXVlc3RQZXJtaXNzaW9uc1Jlc3VsdChJW0xqYXZhL2xhbmcvU3RyaW5nO1tJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVzdGFydCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVzdG9yZUluc3RhbmNlU3RhdGUoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXN0b3JlSW5zdGFuY2VTdGF0ZShMYW5kcm9pZC9vcy9CdW5kbGU7TGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVzdW1lKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXRhaW5Ob25Db25maWd1cmF0aW9uSW5zdGFuY2UoKUxqYXZhL2xhbmcvT2JqZWN0OyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNhdmVJbnN0YW5jZVN0YXRlKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2F2ZUluc3RhbmNlU3RhdGUoTGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXJ0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGF0ZU5vdFNhdmVkKClWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0b3AoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRpdGxlQ2hhbmdlZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRvdWNoRXZlbnQoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVHJhY2tiYWxsRXZlbnQoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVXNlckludGVyYWN0aW9uKClWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVXNlckxlYXZlSGludCgpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblZpc2libGVCZWhpbmRDYW5jZWxlZCgpViIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5Db250ZXh0TWVudShMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuT3B0aW9uc01lbnUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvdmVycmlkZVBlbmRpbmdUcmFuc2l0aW9uKElJKVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG9zdHBvbmVFbnRlclRyYW5zaXRpb24oKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlY3JlYXRlKClWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlckZvckNvbnRleHRNZW51KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2VJbnN0YW5jZSgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlRGlhbG9nKEkpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBvcnRGdWxseURyYXduKClWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0RHJhZ0FuZERyb3BQZXJtaXNzaW9ucyhMYW5kcm9pZC92aWV3L0RyYWdFdmVudDspTGFuZHJvaWQvdmlldy9EcmFnQW5kRHJvcFBlcm1pc3Npb25zOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFBlcm1pc3Npb25zKFtMamF2YS9sYW5nL1N0cmluZztJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RTaG93S2V5Ym9hcmRTaG9ydGN1dHMoKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RWaXNpYmxlQmVoaW5kKFopWiIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RXaW5kb3dGZWF0dXJlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVpcmVWaWV3QnlJZChJKUxhbmRyb2lkL3ZpZXcvVmlldzsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InJ1bk9uVWlUaHJlYWQoTGphdmEvbGFuZy9SdW5uYWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjdGlvbkJhcihMYW5kcm9pZC93aWRnZXQvVG9vbGJhcjspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGVudFRyYW5zaXRpb25NYW5hZ2VyKExhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbk1hbmFnZXI7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRWaWV3KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0S2V5TW9kZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbnRlclNoYXJlZEVsZW1lbnRDYWxsYmFjayhMYW5kcm9pZC9hcHAvU2hhcmVkRWxlbWVudENhbGxiYWNrOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeGl0U2hhcmVkRWxlbWVudENhbGxiYWNrKExhbmRyb2lkL2FwcC9TaGFyZWRFbGVtZW50Q2FsbGJhY2s7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZlYXR1cmVEcmF3YWJsZShJTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGZWF0dXJlRHJhd2FibGVBbHBoYShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmVhdHVyZURyYXdhYmxlUmVzb3VyY2UoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZlYXR1cmVEcmF3YWJsZVVyaShJTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZpbmlzaE9uVG91Y2hPdXRzaWRlKFopViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW1tZXJzaXZlKFopViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZW50KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWVkaWFDb250cm9sbGVyKExhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFDb250cm9sbGVyOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQZXJzaXN0ZW50KFopViIgcmVtb3ZlZD0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQaWN0dXJlSW5QaWN0dXJlUGFyYW1zKExhbmRyb2lkL2FwcC9QaWN0dXJlSW5QaWN0dXJlUGFyYW1zOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9ncmVzcyhJKVYiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvZ3Jlc3NCYXJJbmRldGVybWluYXRlKFopViIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9ncmVzc0JhckluZGV0ZXJtaW5hdGVWaXNpYmlsaXR5KFopViIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9ncmVzc0JhclZpc2liaWxpdHkoWilWIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlcXVlc3RlZE9yaWVudGF0aW9uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc3VsdChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXN1bHQoSUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2Vjb25kYXJ5UHJvZ3Jlc3MoSSlWIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNob3dXaGVuTG9ja2VkKFopViIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFza0Rlc2NyaXB0aW9uKExhbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXIkVGFza0Rlc2NyaXB0aW9uOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaXRsZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaXRsZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpdGxlQ29sb3IoSSlWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFR1cm5TY3JlZW5PbihaKVYiIHNpbmNlPSIyNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpc2libGUoWilWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZvbHVtZUNvbnRyb2xTdHJlYW0oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VnJNb2RlRW5hYmxlZChaTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG91bGRTaG93UmVxdWVzdFBlcm1pc3Npb25SYXRpb25hbGUoTGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNob3VsZFVwUmVjcmVhdGVUYXNrKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93QXNzaXN0KExhbmRyb2lkL29zL0J1bmRsZTspWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd0RpYWxvZyhJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd0RpYWxvZyhJTGFuZHJvaWQvb3MvQnVuZGxlOylaIiBzaW5jZT0iOCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93TG9ja1Rhc2tFc2NhcGVNZXNzYWdlKClWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEFjdGlvbk1vZGUoTGFuZHJvaWQvdmlldy9BY3Rpb25Nb2RlJENhbGxiYWNrOylMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGU7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEFjdGlvbk1vZGUoTGFuZHJvaWQvdmlldy9BY3Rpb25Nb2RlJENhbGxiYWNrO0kpTGFuZHJvaWQvdmlldy9BY3Rpb25Nb2RlOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBY3Rpdml0eUZvclJlc3VsdChMYW5kcm9pZC9jb250ZW50L0ludGVudDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEFjdGl2aXR5Rm9yUmVzdWx0KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0lMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWN0aXZpdHlGcm9tQ2hpbGQoTGFuZHJvaWQvYXBwL0FjdGl2aXR5O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWN0aXZpdHlGcm9tQ2hpbGQoTGFuZHJvaWQvYXBwL0FjdGl2aXR5O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0lMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWN0aXZpdHlGcm9tRnJhZ21lbnQoTGFuZHJvaWQvYXBwL0ZyYWdtZW50O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0kpViIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWN0aXZpdHlGcm9tRnJhZ21lbnQoTGFuZHJvaWQvYXBwL0ZyYWdtZW50O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0lMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIxNiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEFjdGl2aXR5SWZOZWVkZWQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7SSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBY3Rpdml0eUlmTmVlZGVkKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0lMYW5kcm9pZC9vcy9CdW5kbGU7KVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0SW50ZW50U2VuZGVyRm9yUmVzdWx0KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50U2VuZGVyO0lMYW5kcm9pZC9jb250ZW50L0ludGVudDtJSUkpViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEludGVudFNlbmRlckZvclJlc3VsdChMYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlcjtJTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7SUlJTGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEludGVudFNlbmRlckZyb21DaGlsZChMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvY29udGVudC9JbnRlbnRTZW5kZXI7SUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0lJSSlWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0SW50ZW50U2VuZGVyRnJvbUNoaWxkKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlcjtJTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7SUlJTGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydExvY2FsVm9pY2VJbnRlcmFjdGlvbihMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0TG9ja1Rhc2soKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0TWFuYWdpbmdDdXJzb3IoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0TmV4dE1hdGNoaW5nQWN0aXZpdHkoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydE5leHRNYXRjaGluZ0FjdGl2aXR5KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xhbmRyb2lkL29zL0J1bmRsZTspWiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRQb3N0cG9uZWRFbnRlclRyYW5zaXRpb24oKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0U2VhcmNoKExqYXZhL2xhbmcvU3RyaW5nO1pMYW5kcm9pZC9vcy9CdW5kbGU7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcExvY2FsVm9pY2VJbnRlcmFjdGlvbigpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcExvY2tUYXNrKClWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wTWFuYWdpbmdDdXJzb3IoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InRha2VLZXlFdmVudHMoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJpZ2dlclNlYXJjaChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckZvckNvbnRleHRNZW51KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9LRVlTX0RJQUxFUiIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9LRVlTX0RJU0FCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfS0VZU19TRUFSQ0hfR0xPQkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX0tFWVNfU0VBUkNIX0xPQ0FMIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX0tFWVNfU0hPUlRDVVQiLz4KLQkJPGZpZWxkIG5hbWU9IkZPQ1VTRURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfQ0FOQ0VMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9GSVJTVF9VU0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfT0siLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BY3Rpdml0eUdyb3VwIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMTMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9BY3Rpdml0eSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50QWN0aXZpdHkoKUxhbmRyb2lkL2FwcC9BY3Rpdml0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbEFjdGl2aXR5TWFuYWdlcigpTGFuZHJvaWQvYXBwL0xvY2FsQWN0aXZpdHlNYW5hZ2VyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0FjdGl2aXR5TWFuYWdlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQXBwVGFzayhMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7TGFuZHJvaWQvYXBwL0FjdGl2aXR5TWFuYWdlciRUYXNrRGVzY3JpcHRpb247TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhckFwcGxpY2F0aW9uVXNlckRhdGEoKVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyV2F0Y2hIZWFwTGltaXQoKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXBQYWNrYWdlU3RhdGUoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFwcFRhc2tUaHVtYm5haWxTaXplKClMYW5kcm9pZC91dGlsL1NpemU7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBUYXNrcygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlQ29uZmlndXJhdGlvbkluZm8oKUxhbmRyb2lkL2NvbnRlbnQvcG0vQ29uZmlndXJhdGlvbkluZm87IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhcmdlTWVtb3J5Q2xhc3MoKUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhdW5jaGVyTGFyZ2VJY29uRGVuc2l0eSgpSSIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF1bmNoZXJMYXJnZUljb25TaXplKClJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NrVGFza01vZGVTdGF0ZSgpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVtb3J5Q2xhc3MoKUkiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVtb3J5SW5mbyhMYW5kcm9pZC9hcHAvQWN0aXZpdHlNYW5hZ2VyJE1lbW9yeUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNeU1lbW9yeVN0YXRlKExhbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXIkUnVubmluZ0FwcFByb2Nlc3NJbmZvOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9jZXNzTWVtb3J5SW5mbyhbSSlbTGFuZHJvaWQvb3MvRGVidWckTWVtb3J5SW5mbzsiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvY2Vzc2VzSW5FcnJvclN0YXRlKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVjZW50VGFza3MoSUkpTGphdmEvdXRpbC9MaXN0OyIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSdW5uaW5nQXBwUHJvY2Vzc2VzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJ1bm5pbmdTZXJ2aWNlQ29udHJvbFBhbmVsKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7IiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJ1bm5pbmdTZXJ2aWNlcyhJKUxqYXZhL3V0aWwvTGlzdDsiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnVubmluZ1Rhc2tzKEkpTGphdmEvdXRpbC9MaXN0OyIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JhY2tncm91bmRSZXN0cmljdGVkKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0luTG9ja1Rhc2tNb2RlKClaIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMb3dSYW1EZXZpY2UoKVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUnVubmluZ0luVGVzdEhhcm5lc3MoKVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVXNlckFNb25rZXkoKVoiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ia2lsbEJhY2tncm91bmRQcm9jZXNzZXMoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZVRhc2tUb0Zyb250KElJKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9Im1vdmVUYXNrVG9Gcm9udChJSUxhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdGFydFBhY2thZ2UoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZyVGhyZWFkKEkpViIgc2luY2U9IjI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2F0Y2hIZWFwTGltaXQoSilWIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9SRVBPUlRfSEVBUF9MSU1JVCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NLX1RBU0tfTU9ERV9MT0NLRUQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTE9DS19UQVNLX01PREVfTk9ORSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NLX1RBU0tfTU9ERV9QSU5ORUQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9IT01FX0FMVEVSTkFURSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNT1ZFX1RBU0tfTk9fVVNFUl9BQ1RJT04iIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iTU9WRV9UQVNLX1dJVEhfSE9NRSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNFTlRfSUdOT1JFX1VOQVZBSUxBQkxFIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQ0VOVF9XSVRIX0VYQ0xVREVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvQWN0aXZpdHlNYW5hZ2VyJEFwcFRhc2siIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5pc2hBbmRSZW1vdmVUYXNrKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFza0luZm8oKUxhbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXIkUmVjZW50VGFza0luZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZVRvRnJvbnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeGNsdWRlRnJvbVJlY2VudHMoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBY3Rpdml0eShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvQWN0aXZpdHlNYW5hZ2VyJE1lbW9yeUluZm8iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkRnJvbVBhcmNlbChMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9ImF2YWlsTWVtIi8+Ci0JCTxmaWVsZCBuYW1lPSJsb3dNZW1vcnkiLz4KLQkJPGZpZWxkIG5hbWU9InRocmVzaG9sZCIvPgotCQk8ZmllbGQgbmFtZT0idG90YWxNZW0iIHNpbmNlPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0FjdGl2aXR5TWFuYWdlciRQcm9jZXNzRXJyb3JTdGF0ZUluZm8iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkRnJvbVBhcmNlbChMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSQVNIRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PVF9SRVNQT05ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iY29uZGl0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJjcmFzaERhdGEiLz4KLQkJPGZpZWxkIG5hbWU9ImxvbmdNc2ciLz4KLQkJPGZpZWxkIG5hbWU9InBpZCIvPgotCQk8ZmllbGQgbmFtZT0icHJvY2Vzc05hbWUiLz4KLQkJPGZpZWxkIG5hbWU9InNob3J0TXNnIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGFja1RyYWNlIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0idGFnIi8+Ci0JCTxmaWVsZCBuYW1lPSJ1aWQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXIkUmVjZW50VGFza0luZm8iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkRnJvbVBhcmNlbChMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9ImFmZmlsaWF0ZWRUYXNrSWQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iYmFzZUFjdGl2aXR5IiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImJhc2VJbnRlbnQiLz4KLQkJPGZpZWxkIG5hbWU9ImRlc2NyaXB0aW9uIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImlkIi8+Ci0JCTxmaWVsZCBuYW1lPSJudW1BY3Rpdml0aWVzIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Im9yaWdBY3Rpdml0eSIvPgotCQk8ZmllbGQgbmFtZT0icGVyc2lzdGVudElkIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9InRhc2tEZXNjcmlwdGlvbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0b3BBY3Rpdml0eSIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvQWN0aXZpdHlNYW5hZ2VyJFJ1bm5pbmdBcHBQcm9jZXNzSW5mbyIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEZyb21QYXJjZWwoTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTkNFX0JBQ0tHUk9VTkQiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTkNFX0NBQ0hFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTkNFX0NBTlRfU0FWRV9TVEFURSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTkNFX0VNUFRZIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iSU1QT1JUQU5DRV9GT1JFR1JPVU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTkNFX0ZPUkVHUk9VTkRfU0VSVklDRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTkNFX0dPTkUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iSU1QT1JUQU5DRV9QRVJDRVBUSUJMRSIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IklNUE9SVEFOQ0VfUEVSQ0VQVElCTEVfUFJFXzI2IiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IklNUE9SVEFOQ0VfU0VSVklDRSIvPgotCQk8ZmllbGQgbmFtZT0iSU1QT1JUQU5DRV9UT1BfU0xFRVBJTkciIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iSU1QT1JUQU5DRV9UT1BfU0xFRVBJTkdfUFJFXzI4IiBzaW5jZT0iMjgiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTkNFX1ZJU0lCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9QUk9WSURFUl9JTl9VU0UiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFTT05fU0VSVklDRV9JTl9VU0UiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFTT05fVU5LTk9XTiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9ImltcG9ydGFuY2UiLz4KLQkJPGZpZWxkIG5hbWU9ImltcG9ydGFuY2VSZWFzb25Db2RlIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iaW1wb3J0YW5jZVJlYXNvbkNvbXBvbmVudCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9ImltcG9ydGFuY2VSZWFzb25QaWQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXN0VHJpbUxldmVsIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9ImxydSIvPgotCQk8ZmllbGQgbmFtZT0icGlkIi8+Ci0JCTxmaWVsZCBuYW1lPSJwa2dMaXN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9jZXNzTmFtZSIvPgotCQk8ZmllbGQgbmFtZT0idWlkIiBzaW5jZT0iNSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0FjdGl2aXR5TWFuYWdlciRSdW5uaW5nU2VydmljZUluZm8iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkRnJvbVBhcmNlbChMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfRk9SRUdST1VORCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUEVSU0lTVEVOVF9QUk9DRVNTIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TVEFSVEVEIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TWVNURU1fUFJPQ0VTUyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGl2ZVNpbmNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJjbGllbnRDb3VudCIvPgotCQk8ZmllbGQgbmFtZT0iY2xpZW50TGFiZWwiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjbGllbnRQYWNrYWdlIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iY3Jhc2hDb3VudCIvPgotCQk8ZmllbGQgbmFtZT0iZmxhZ3MiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmb3JlZ3JvdW5kIi8+Ci0JCTxmaWVsZCBuYW1lPSJsYXN0QWN0aXZpdHlUaW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJwaWQiLz4KLQkJPGZpZWxkIG5hbWU9InByb2Nlc3MiLz4KLQkJPGZpZWxkIG5hbWU9InJlc3RhcnRpbmciLz4KLQkJPGZpZWxkIG5hbWU9InNlcnZpY2UiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXJ0ZWQiLz4KLQkJPGZpZWxkIG5hbWU9InVpZCIgc2luY2U9IjUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXIkUnVubmluZ1Rhc2tJbmZvIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEZyb21QYXJjZWwoTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJiYXNlQWN0aXZpdHkiLz4KLQkJPGZpZWxkIG5hbWU9ImRlc2NyaXB0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJpZCIvPgotCQk8ZmllbGQgbmFtZT0ibnVtQWN0aXZpdGllcyIvPgotCQk8ZmllbGQgbmFtZT0ibnVtUnVubmluZyIvPgotCQk8ZmllbGQgbmFtZT0idGh1bWJuYWlsIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0b3BBY3Rpdml0eSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0FjdGl2aXR5TWFuYWdlciRUYXNrRGVzY3JpcHRpb24iIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXIkVGFza0Rlc2NyaXB0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0lJKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtJKVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWNvbigpTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhYmVsKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmltYXJ5Q29sb3IoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkRnJvbVBhcmNlbChMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BY3Rpdml0eU9wdGlvbnMiIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXVuY2hCb3VuZHMoKUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXVuY2hEaXNwbGF5SWQoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2tUYXNrTW9kZSgpWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWFrZUJhc2ljKClMYW5kcm9pZC9hcHAvQWN0aXZpdHlPcHRpb25zOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFrZUNsaXBSZXZlYWxBbmltYXRpb24oTGFuZHJvaWQvdmlldy9WaWV3O0lJSUkpTGFuZHJvaWQvYXBwL0FjdGl2aXR5T3B0aW9uczsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im1ha2VDdXN0b21BbmltYXRpb24oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lJKUxhbmRyb2lkL2FwcC9BY3Rpdml0eU9wdGlvbnM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWFrZVNjYWxlVXBBbmltYXRpb24oTGFuZHJvaWQvdmlldy9WaWV3O0lJSUkpTGFuZHJvaWQvYXBwL0FjdGl2aXR5T3B0aW9uczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYWtlU2NlbmVUcmFuc2l0aW9uQW5pbWF0aW9uKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC92aWV3L1ZpZXc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9BY3Rpdml0eU9wdGlvbnM7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYWtlU2NlbmVUcmFuc2l0aW9uQW5pbWF0aW9uKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtbTGFuZHJvaWQvdXRpbC9QYWlyOylMYW5kcm9pZC9hcHAvQWN0aXZpdHlPcHRpb25zOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFrZVRhc2tMYXVuY2hCZWhpbmQoKUxhbmRyb2lkL2FwcC9BY3Rpdml0eU9wdGlvbnM7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYWtlVGh1bWJuYWlsU2NhbGVVcEFuaW1hdGlvbihMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0lJKUxhbmRyb2lkL2FwcC9BY3Rpdml0eU9wdGlvbnM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFVzYWdlVGltZVJlcG9ydChMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXBwVmVyaWZpY2F0aW9uQnVuZGxlKExhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvYXBwL0FjdGl2aXR5T3B0aW9uczsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldExhdW5jaEJvdW5kcyhMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylMYW5kcm9pZC9hcHAvQWN0aXZpdHlPcHRpb25zOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF1bmNoRGlzcGxheUlkKEkpTGFuZHJvaWQvYXBwL0FjdGl2aXR5T3B0aW9uczsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvY2tUYXNrRW5hYmxlZChaKUxhbmRyb2lkL2FwcC9BY3Rpdml0eU9wdGlvbnM7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0J1bmRsZSgpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZShMYW5kcm9pZC9hcHAvQWN0aXZpdHlPcHRpb25zOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9VU0FHRV9USU1FX1JFUE9SVCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9VU0FHRV9USU1FX1JFUE9SVF9QQUNLQUdFUyIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvQWxhcm1NYW5hZ2VyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWwoTGFuZHJvaWQvYXBwL0FsYXJtTWFuYWdlciRPbkFsYXJtTGlzdGVuZXI7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbChMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5leHRBbGFybUNsb2NrKClMYW5kcm9pZC9hcHAvQWxhcm1NYW5hZ2VyJEFsYXJtQ2xvY2tJbmZvOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KElKTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoSUpMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9hcHAvQWxhcm1NYW5hZ2VyJE9uQWxhcm1MaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGFybUNsb2NrKExhbmRyb2lkL2FwcC9BbGFybU1hbmFnZXIkQWxhcm1DbG9ja0luZm87TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFuZEFsbG93V2hpbGVJZGxlKElKTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4YWN0KElKTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4YWN0KElKTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvYXBwL0FsYXJtTWFuYWdlciRPbkFsYXJtTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXhhY3RBbmRBbGxvd1doaWxlSWRsZShJSkxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbmV4YWN0UmVwZWF0aW5nKElKSkxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlcGVhdGluZyhJSkpMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWUoSilWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVab25lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2luZG93KElKSkxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXaW5kb3coSUpKTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvYXBwL0FsYXJtTWFuYWdlciRPbkFsYXJtTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTkVYVF9BTEFSTV9DTE9DS19DSEFOR0VEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVMQVBTRURfUkVBTFRJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVMQVBTRURfUkVBTFRJTUVfV0FLRVVQIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlZBTF9EQVkiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlZBTF9GSUZURUVOX01JTlVURVMiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlZBTF9IQUxGX0RBWSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSVkFMX0hBTEZfSE9VUiIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSVkFMX0hPVVIiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJSVEMiLz4KLQkJPGZpZWxkIG5hbWU9IlJUQ19XQUtFVVAiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BbGFybU1hbmFnZXIkQWxhcm1DbG9ja0luZm8iIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3dJbnRlbnQoKUxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyaWdnZXJUaW1lKClKIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvQWxhcm1NYW5hZ2VyJE9uQWxhcm1MaXN0ZW5lciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWxhcm0oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BbGVydERpYWxvZyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9EaWFsb2ciLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O1pMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNhbmNlbExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnV0dG9uKEkpTGFuZHJvaWQvd2lkZ2V0L0J1dHRvbjsiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGlzdFZpZXcoKUxhbmRyb2lkL3dpZGdldC9MaXN0VmlldzsiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QnV0dG9uKElMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNsaWNrTGlzdGVuZXI7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QnV0dG9uKElMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9vcy9NZXNzYWdlOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJ1dHRvbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNsaWNrTGlzdGVuZXI7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QnV0dG9uKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL29zL01lc3NhZ2U7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QnV0dG9uMihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNsaWNrTGlzdGVuZXI7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QnV0dG9uMihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9vcy9NZXNzYWdlOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJ1dHRvbjMoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2UkT25DbGlja0xpc3RlbmVyOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJ1dHRvbjMoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvb3MvTWVzc2FnZTspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXN0b21UaXRsZShMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEljb24oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uQXR0cmlidXRlKEkpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW52ZXJzZUJhY2tncm91bmRGb3JjZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWVzc2FnZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpZXcoTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7SUlJSSlWIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iVEhFTUVfREVWSUNFX0RFRkFVTFRfREFSSyIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVEhFTUVfREVWSUNFX0RFRkFVTFRfTElHSFQiIHNpbmNlPSIxNCIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlRIRU1FX0hPTE9fREFSSyIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVEhFTUVfSE9MT19MSUdIVCIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVEhFTUVfVFJBRElUSU9OQUwiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BbGVydERpYWxvZyRCdWlsZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZSgpTGFuZHJvaWQvYXBwL0FsZXJ0RGlhbG9nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRleHQoKUxhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFkYXB0ZXIoTGFuZHJvaWQvd2lkZ2V0L0xpc3RBZGFwdGVyO0xhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlJE9uQ2xpY2tMaXN0ZW5lcjspTGFuZHJvaWQvYXBwL0FsZXJ0RGlhbG9nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FuY2VsYWJsZShaKUxhbmRyb2lkL2FwcC9BbGVydERpYWxvZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1cnNvcihMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7TGFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2UkT25DbGlja0xpc3RlbmVyO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9hcHAvQWxlcnREaWFsb2ckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXN0b21UaXRsZShMYW5kcm9pZC92aWV3L1ZpZXc7KUxhbmRyb2lkL2FwcC9BbGVydERpYWxvZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEljb24oSSlMYW5kcm9pZC9hcHAvQWxlcnREaWFsb2ckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylMYW5kcm9pZC9hcHAvQWxlcnREaWFsb2ckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uQXR0cmlidXRlKEkpTGFuZHJvaWQvYXBwL0FsZXJ0RGlhbG9nJEJ1aWxkZXI7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnZlcnNlQmFja2dyb3VuZEZvcmNlZChaKUxhbmRyb2lkL2FwcC9BbGVydERpYWxvZyRCdWlsZGVyOyIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJdGVtcyhJTGFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2UkT25DbGlja0xpc3RlbmVyOylMYW5kcm9pZC9hcHAvQWxlcnREaWFsb2ckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJdGVtcyhbTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2UkT25DbGlja0xpc3RlbmVyOylMYW5kcm9pZC9hcHAvQWxlcnREaWFsb2ckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNZXNzYWdlKEkpTGFuZHJvaWQvYXBwL0FsZXJ0RGlhbG9nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWVzc2FnZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvYXBwL0FsZXJ0RGlhbG9nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TXVsdGlDaG9pY2VJdGVtcyhJW1pMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbk11bHRpQ2hvaWNlQ2xpY2tMaXN0ZW5lcjspTGFuZHJvaWQvYXBwL0FsZXJ0RGlhbG9nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TXVsdGlDaG9pY2VJdGVtcyhMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2UkT25NdWx0aUNob2ljZUNsaWNrTGlzdGVuZXI7KUxhbmRyb2lkL2FwcC9BbGVydERpYWxvZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE11bHRpQ2hvaWNlSXRlbXMoW0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO1taTGFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2UkT25NdWx0aUNob2ljZUNsaWNrTGlzdGVuZXI7KUxhbmRyb2lkL2FwcC9BbGVydERpYWxvZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5lZ2F0aXZlQnV0dG9uKElMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNsaWNrTGlzdGVuZXI7KUxhbmRyb2lkL2FwcC9BbGVydERpYWxvZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5lZ2F0aXZlQnV0dG9uKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlJE9uQ2xpY2tMaXN0ZW5lcjspTGFuZHJvaWQvYXBwL0FsZXJ0RGlhbG9nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmV1dHJhbEJ1dHRvbihJTGFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2UkT25DbGlja0xpc3RlbmVyOylMYW5kcm9pZC9hcHAvQWxlcnREaWFsb2ckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROZXV0cmFsQnV0dG9uKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlJE9uQ2xpY2tMaXN0ZW5lcjspTGFuZHJvaWQvYXBwL0FsZXJ0RGlhbG9nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25DYW5jZWxMaXN0ZW5lcihMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNhbmNlbExpc3RlbmVyOylMYW5kcm9pZC9hcHAvQWxlcnREaWFsb2ckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkRpc21pc3NMaXN0ZW5lcihMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkRpc21pc3NMaXN0ZW5lcjspTGFuZHJvaWQvYXBwL0FsZXJ0RGlhbG9nJEJ1aWxkZXI7IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkl0ZW1TZWxlY3RlZExpc3RlbmVyKExhbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlldyRPbkl0ZW1TZWxlY3RlZExpc3RlbmVyOylMYW5kcm9pZC9hcHAvQWxlcnREaWFsb2ckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbktleUxpc3RlbmVyKExhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlJE9uS2V5TGlzdGVuZXI7KUxhbmRyb2lkL2FwcC9BbGVydERpYWxvZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvc2l0aXZlQnV0dG9uKElMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNsaWNrTGlzdGVuZXI7KUxhbmRyb2lkL2FwcC9BbGVydERpYWxvZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvc2l0aXZlQnV0dG9uKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlJE9uQ2xpY2tMaXN0ZW5lcjspTGFuZHJvaWQvYXBwL0FsZXJ0RGlhbG9nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2luZ2xlQ2hvaWNlSXRlbXMoSUlMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNsaWNrTGlzdGVuZXI7KUxhbmRyb2lkL2FwcC9BbGVydERpYWxvZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNpbmdsZUNob2ljZUl0ZW1zKExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtJTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2UkT25DbGlja0xpc3RlbmVyOylMYW5kcm9pZC9hcHAvQWxlcnREaWFsb2ckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaW5nbGVDaG9pY2VJdGVtcyhMYW5kcm9pZC93aWRnZXQvTGlzdEFkYXB0ZXI7SUxhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlJE9uQ2xpY2tMaXN0ZW5lcjspTGFuZHJvaWQvYXBwL0FsZXJ0RGlhbG9nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2luZ2xlQ2hvaWNlSXRlbXMoW0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNsaWNrTGlzdGVuZXI7KUxhbmRyb2lkL2FwcC9BbGVydERpYWxvZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpdGxlKEkpTGFuZHJvaWQvYXBwL0FsZXJ0RGlhbG9nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9BbGVydERpYWxvZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpZXcoSSlMYW5kcm9pZC9hcHAvQWxlcnREaWFsb2ckQnVpbGRlcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpZXcoTGFuZHJvaWQvdmlldy9WaWV3OylMYW5kcm9pZC9hcHAvQWxlcnREaWFsb2ckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93KClMYW5kcm9pZC9hcHAvQWxlcnREaWFsb2c7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvQWxpYXNBY3Rpdml0eSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9BY3Rpdml0eSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0FwcENvbXBvbmVudEZhY3RvcnkiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnN0YW50aWF0ZUFjdGl2aXR5KExqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KUxhbmRyb2lkL2FwcC9BY3Rpdml0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnN0YW50aWF0ZUFwcGxpY2F0aW9uKExqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9BcHBsaWNhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnN0YW50aWF0ZVByb3ZpZGVyKExqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc3RhbnRpYXRlUmVjZWl2ZXIoTGphdmEvbGFuZy9DbGFzc0xvYWRlcjtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9jb250ZW50L0ludGVudDspTGFuZHJvaWQvY29udGVudC9Ccm9hZGNhc3RSZWNlaXZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnN0YW50aWF0ZVNlcnZpY2UoTGphdmEvbGFuZy9DbGFzc0xvYWRlcjtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9jb250ZW50L0ludGVudDspTGFuZHJvaWQvYXBwL1NlcnZpY2U7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvQXBwT3BzTWFuYWdlciIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrT3AoTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tPcE5vVGhyb3coTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tQYWNrYWdlKElMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaE9wKExqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGVPcChMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RlT3BOb1Rocm93KExqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGVQcm94eU9wKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RlUHJveHlPcE5vVGhyb3coTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InBlcm1pc3Npb25Ub09wKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0T3AoTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRPcE5vVGhyb3coTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRXYXRjaGluZ01vZGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvYXBwL0FwcE9wc01hbmFnZXIkT25PcENoYW5nZWRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BXYXRjaGluZ01vZGUoTGFuZHJvaWQvYXBwL0FwcE9wc01hbmFnZXIkT25PcENoYW5nZWRMaXN0ZW5lcjspViIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9BTExPV0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX0RFRkFVTFQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9FUlJPUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX0lHTk9SRUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX0FERF9WT0lDRU1BSUwiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iT1BTVFJfQU5TV0VSX1BIT05FX0NBTExTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX0JPRFlfU0VOU09SUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUFNUUl9DQUxMX1BIT05FIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX0NBTUVSQSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUFNUUl9DT0FSU0VfTE9DQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX0ZJTkVfTE9DQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX0dFVF9VU0FHRV9TVEFUUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUFNUUl9NT0NLX0xPQ0FUSU9OIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX01PTklUT1JfSElHSF9QT1dFUl9MT0NBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iT1BTVFJfTU9OSVRPUl9MT0NBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iT1BTVFJfUElDVFVSRV9JTl9QSUNUVVJFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX1BST0NFU1NfT1VUR09JTkdfQ0FMTFMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BTVFJfUkVBRF9DQUxFTkRBUiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUFNUUl9SRUFEX0NBTExfTE9HIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX1JFQURfQ0VMTF9CUk9BRENBU1RTIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX1JFQURfQ09OVEFDVFMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iT1BTVFJfUkVBRF9FWFRFUk5BTF9TVE9SQUdFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX1JFQURfUEhPTkVfTlVNQkVSUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUFNUUl9SRUFEX1BIT05FX1NUQVRFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX1JFQURfU01TIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX1JFQ0VJVkVfTU1TIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX1JFQ0VJVkVfU01TIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX1JFQ0VJVkVfV0FQX1BVU0giIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iT1BTVFJfUkVDT1JEX0FVRElPIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX1NFTkRfU01TIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX1NZU1RFTV9BTEVSVF9XSU5ET1ciIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iT1BTVFJfVVNFX0ZJTkdFUlBSSU5UIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QU1RSX1VTRV9TSVAiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iT1BTVFJfV1JJVEVfQ0FMRU5EQVIiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iT1BTVFJfV1JJVEVfQ0FMTF9MT0ciIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iT1BTVFJfV1JJVEVfQ09OVEFDVFMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iT1BTVFJfV1JJVEVfRVhURVJOQUxfU1RPUkFHRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUFNUUl9XUklURV9TRVRUSU5HUyIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvQXBwT3BzTWFuYWdlciRPbk9wQ2hhbmdlZExpc3RlbmVyIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25PcENoYW5nZWQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BcHBsaWNhdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29udGV4dFdyYXBwZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudENhbGxiYWNrcyIgcmVtb3ZlZD0iMTQiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudENhbGxiYWNrczIiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb2Nlc3NOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UZXJtaW5hdGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlckFjdGl2aXR5TGlmZWN5Y2xlQ2FsbGJhY2tzKExhbmRyb2lkL2FwcC9BcHBsaWNhdGlvbiRBY3Rpdml0eUxpZmVjeWNsZUNhbGxiYWNrczspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJPblByb3ZpZGVBc3Npc3REYXRhTGlzdGVuZXIoTGFuZHJvaWQvYXBwL0FwcGxpY2F0aW9uJE9uUHJvdmlkZUFzc2lzdERhdGFMaXN0ZW5lcjspViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckFjdGl2aXR5TGlmZWN5Y2xlQ2FsbGJhY2tzKExhbmRyb2lkL2FwcC9BcHBsaWNhdGlvbiRBY3Rpdml0eUxpZmVjeWNsZUNhbGxiYWNrczspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3Rlck9uUHJvdmlkZUFzc2lzdERhdGFMaXN0ZW5lcihMYW5kcm9pZC9hcHAvQXBwbGljYXRpb24kT25Qcm92aWRlQXNzaXN0RGF0YUxpc3RlbmVyOylWIiBzaW5jZT0iMTgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BcHBsaWNhdGlvbiRBY3Rpdml0eUxpZmVjeWNsZUNhbGxiYWNrcyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWN0aXZpdHlDcmVhdGVkKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFjdGl2aXR5RGVzdHJveWVkKExhbmRyb2lkL2FwcC9BY3Rpdml0eTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWN0aXZpdHlQYXVzZWQoTGFuZHJvaWQvYXBwL0FjdGl2aXR5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BY3Rpdml0eVJlc3VtZWQoTGFuZHJvaWQvYXBwL0FjdGl2aXR5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BY3Rpdml0eVNhdmVJbnN0YW5jZVN0YXRlKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFjdGl2aXR5U3RhcnRlZChMYW5kcm9pZC9hcHAvQWN0aXZpdHk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFjdGl2aXR5U3RvcHBlZChMYW5kcm9pZC9hcHAvQWN0aXZpdHk7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BcHBsaWNhdGlvbiRPblByb3ZpZGVBc3Npc3REYXRhTGlzdGVuZXIiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByb3ZpZGVBc3Npc3REYXRhKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BcHBsaWNhdGlvbkVycm9yUmVwb3J0IiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXAoTGFuZHJvaWQvdXRpbC9QcmludGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXJyb3JSZXBvcnRSZWNlaXZlcihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7SSlMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEZyb21QYXJjZWwoTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FOUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9CQVRURVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0NSQVNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUlVOTklOR19TRVJWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbnJJbmZvIi8+Ci0JCTxmaWVsZCBuYW1lPSJiYXR0ZXJ5SW5mbyIvPgotCQk8ZmllbGQgbmFtZT0iY3Jhc2hJbmZvIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbnN0YWxsZXJQYWNrYWdlTmFtZSIvPgotCQk8ZmllbGQgbmFtZT0icGFja2FnZU5hbWUiLz4KLQkJPGZpZWxkIG5hbWU9InByb2Nlc3NOYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJydW5uaW5nU2VydmljZUluZm8iLz4KLQkJPGZpZWxkIG5hbWU9InN5c3RlbUFwcCIvPgotCQk8ZmllbGQgbmFtZT0idGltZSIvPgotCQk8ZmllbGQgbmFtZT0idHlwZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0FwcGxpY2F0aW9uRXJyb3JSZXBvcnQkQW5ySW5mbyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExhbmRyb2lkL3V0aWwvUHJpbnRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVG9QYXJjZWwoTGFuZHJvaWQvb3MvUGFyY2VsO0kpViIvPgotCQk8ZmllbGQgbmFtZT0iYWN0aXZpdHkiLz4KLQkJPGZpZWxkIG5hbWU9ImNhdXNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbmZvIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvQXBwbGljYXRpb25FcnJvclJlcG9ydCRCYXR0ZXJ5SW5mbyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExhbmRyb2lkL3V0aWwvUHJpbnRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVG9QYXJjZWwoTGFuZHJvaWQvb3MvUGFyY2VsO0kpViIvPgotCQk8ZmllbGQgbmFtZT0iY2hlY2tpbkRldGFpbHMiLz4KLQkJPGZpZWxkIG5hbWU9ImR1cmF0aW9uTWljcm9zIi8+Ci0JCTxmaWVsZCBuYW1lPSJ1c2FnZURldGFpbHMiLz4KLQkJPGZpZWxkIG5hbWU9InVzYWdlUGVyY2VudCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0FwcGxpY2F0aW9uRXJyb3JSZXBvcnQkQ3Jhc2hJbmZvIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXAoTGFuZHJvaWQvdXRpbC9QcmludGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVUb1BhcmNlbChMYW5kcm9pZC9vcy9QYXJjZWw7SSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJleGNlcHRpb25DbGFzc05hbWUiLz4KLQkJPGZpZWxkIG5hbWU9ImV4Y2VwdGlvbk1lc3NhZ2UiLz4KLQkJPGZpZWxkIG5hbWU9InN0YWNrVHJhY2UiLz4KLQkJPGZpZWxkIG5hbWU9InRocm93Q2xhc3NOYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aHJvd0ZpbGVOYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aHJvd0xpbmVOdW1iZXIiLz4KLQkJPGZpZWxkIG5hbWU9InRocm93TWV0aG9kTmFtZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0FwcGxpY2F0aW9uRXJyb3JSZXBvcnQkUnVubmluZ1NlcnZpY2VJbmZvIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXAoTGFuZHJvaWQvdXRpbC9QcmludGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVUb1BhcmNlbChMYW5kcm9pZC9vcy9QYXJjZWw7SSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJkdXJhdGlvbk1pbGxpcyIvPgotCQk8ZmllbGQgbmFtZT0ic2VydmljZURldGFpbHMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9BdXRoZW50aWNhdGlvblJlcXVpcmVkRXhjZXB0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvU2VjdXJpdHlFeGNlcHRpb24iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlO0xhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlckFjdGlvbigpTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvQXV0b21hdGljWmVuUnVsZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9uZXQvVXJpO0laKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25kaXRpb25JZCgpTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDcmVhdGlvblRpbWUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlcnJ1cHRpb25GaWx0ZXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPd25lcigpTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbmRpdGlvbklkKExhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludGVycnVwdGlvbkZpbHRlcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYW1lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvRGF0ZVBpY2tlckRpYWxvZyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9BbGVydERpYWxvZyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlJE9uQ2xpY2tMaXN0ZW5lciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3dpZGdldC9EYXRlUGlja2VyJE9uRGF0ZUNoYW5nZWRMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SSlWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lMYW5kcm9pZC9hcHAvRGF0ZVBpY2tlckRpYWxvZyRPbkRhdGVTZXRMaXN0ZW5lcjtJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvYXBwL0RhdGVQaWNrZXJEaWFsb2ckT25EYXRlU2V0TGlzdGVuZXI7SUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlUGlja2VyKClMYW5kcm9pZC93aWRnZXQvRGF0ZVBpY2tlcjsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uRGF0ZVNldExpc3RlbmVyKExhbmRyb2lkL2FwcC9EYXRlUGlja2VyRGlhbG9nJE9uRGF0ZVNldExpc3RlbmVyOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVEYXRlKElJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvRGF0ZVBpY2tlckRpYWxvZyRPbkRhdGVTZXRMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25EYXRlU2V0KExhbmRyb2lkL3dpZGdldC9EYXRlUGlja2VyO0lJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvRGlhbG9nIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvS2V5RXZlbnQkQ2FsbGJhY2siLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXckT25DcmVhdGVDb250ZXh0TWVudUxpc3RlbmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9XaW5kb3ckQ2FsbGJhY2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O1pMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNhbmNlbExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQ29udGVudFZpZXcoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlT3B0aW9uc01lbnUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRWaWV3QnlJZChJKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3Rpb25CYXIoKUxhbmRyb2lkL2FwcC9BY3Rpb25CYXI7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZXh0KClMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudEZvY3VzKClMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5b3V0SW5mbGF0ZXIoKUxhbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3duZXJBY3Rpdml0eSgpTGFuZHJvaWQvYXBwL0FjdGl2aXR5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlYXJjaEV2ZW50KClMYW5kcm9pZC92aWV3L1NlYXJjaEV2ZW50OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vm9sdW1lQ29udHJvbFN0cmVhbSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpbmRvdygpTGFuZHJvaWQvdmlldy9XaW5kb3c7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGlkZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImludmFsaWRhdGVPcHRpb25zTWVudSgpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTaG93aW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25CYWNrUHJlc3NlZCgpViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbnRleHRJdGVtU2VsZWN0ZWQoTGFuZHJvaWQvdmlldy9NZW51SXRlbTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29udGV4dE1lbnVDbG9zZWQoTGFuZHJvaWQvdmlldy9NZW51OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGUoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVPcHRpb25zTWVudShMYW5kcm9pZC92aWV3L01lbnU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdlbmVyaWNNb3Rpb25FdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbktleVNob3J0Y3V0KElMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk9wdGlvbnNJdGVtU2VsZWN0ZWQoTGFuZHJvaWQvdmlldy9NZW51SXRlbTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uT3B0aW9uc01lbnVDbG9zZWQoTGFuZHJvaWQvdmlldy9NZW51OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QcmVwYXJlT3B0aW9uc01lbnUoTGFuZHJvaWQvdmlldy9NZW51OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXN0b3JlSW5zdGFuY2VTdGF0ZShMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNhdmVJbnN0YW5jZVN0YXRlKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGFydCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RvcCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVG91Y2hFdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UcmFja2JhbGxFdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkNvbnRleHRNZW51KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5PcHRpb25zTWVudSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyRm9yQ29udGV4dE1lbnUoTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFdpbmRvd0ZlYXR1cmUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWlyZVZpZXdCeUlkKEkpTGFuZHJvaWQvdmlldy9WaWV3OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FuY2VsTWVzc2FnZShMYW5kcm9pZC9vcy9NZXNzYWdlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FuY2VsYWJsZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYW5jZWxlZE9uVG91Y2hPdXRzaWRlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRWaWV3KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaXNtaXNzTWVzc2FnZShMYW5kcm9pZC9vcy9NZXNzYWdlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmVhdHVyZURyYXdhYmxlKElMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZlYXR1cmVEcmF3YWJsZUFscGhhKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGZWF0dXJlRHJhd2FibGVSZXNvdXJjZShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmVhdHVyZURyYXdhYmxlVXJpKElMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25DYW5jZWxMaXN0ZW5lcihMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNhbmNlbExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25EaXNtaXNzTGlzdGVuZXIoTGFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2UkT25EaXNtaXNzTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbktleUxpc3RlbmVyKExhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlJE9uS2V5TGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPblNob3dMaXN0ZW5lcihMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPblNob3dMaXN0ZW5lcjspViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPd25lckFjdGl2aXR5KExhbmRyb2lkL2FwcC9BY3Rpdml0eTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpdGxlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpdGxlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Vm9sdW1lQ29udHJvbFN0cmVhbShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idGFrZUtleUV2ZW50cyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyRm9yQ29udGV4dE1lbnUoTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvRGlhbG9nRnJhZ21lbnQiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9GcmFnbWVudCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlJE9uQ2FuY2VsTGlzdGVuZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkRpc21pc3NMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc21pc3MoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNtaXNzQWxsb3dpbmdTdGF0ZUxvc3MoKVYiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpYWxvZygpTGFuZHJvaWQvYXBwL0RpYWxvZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG93c0RpYWxvZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRoZW1lKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDYW5jZWxhYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVEaWFsb2coTGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9hcHAvRGlhbG9nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbmNlbGFibGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hvd3NEaWFsb2coWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3R5bGUoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3coTGFuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3coTGFuZHJvaWQvYXBwL0ZyYWdtZW50VHJhbnNhY3Rpb247TGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPGZpZWxkIG5hbWU9IlNUWUxFX05PUk1BTCIvPgotCQk8ZmllbGQgbmFtZT0iU1RZTEVfTk9fRlJBTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUWUxFX05PX0lOUFVUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFlMRV9OT19USVRMRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0Rvd25sb2FkTWFuYWdlciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZENvbXBsZXRlZERvd25sb2FkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1pMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztKWilKIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDb21wbGV0ZWREb3dubG9hZChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztaTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SlpMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL25ldC9Vcmk7KUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImVucXVldWUoTGFuZHJvaWQvYXBwL0Rvd25sb2FkTWFuYWdlciRSZXF1ZXN0OylKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4Qnl0ZXNPdmVyTW9iaWxlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGphdmEvbGFuZy9Mb25nOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWltZVR5cGVGb3JEb3dubG9hZGVkRmlsZShKKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVjb21tZW5kZWRNYXhCeXRlc092ZXJNb2JpbGUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMamF2YS9sYW5nL0xvbmc7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmlGb3JEb3dubG9hZGVkRmlsZShKKUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuRG93bmxvYWRlZEZpbGUoSilMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeShMYW5kcm9pZC9hcHAvRG93bmxvYWRNYW5hZ2VyJFF1ZXJ5OylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlKFtKKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9ET1dOTE9BRF9DT01QTEVURSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX05PVElGSUNBVElPTl9DTElDS0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVklFV19ET1dOTE9BRFMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9CWVRFU19ET1dOTE9BREVEX1NPX0ZBUiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0RFU0NSSVBUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9MQVNUX01PRElGSUVEX1RJTUVTVEFNUCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0xPQ0FMX0ZJTEVOQU1FIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fTE9DQUxfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fTUVESUFQUk9WSURFUl9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9NRURJQV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fUkVBU09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fU1RBVFVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVElUTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9UT1RBTF9TSVpFX0JZVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9DQU5OT1RfUkVTVU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9ERVZJQ0VfTk9UX0ZPVU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9GSUxFX0FMUkVBRFlfRVhJU1RTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9GSUxFX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9IVFRQX0RBVEFfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0lOU1VGRklDSUVOVF9TUEFDRSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfVE9PX01BTllfUkVESVJFQ1RTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9VTkhBTkRMRURfSFRUUF9DT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9ET1dOTE9BRF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTk9USUZJQ0FUSU9OX0NMSUNLX0RPV05MT0FEX0lEUyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFTlRfRVhUUkFTX1NPUlRfQllfU0laRSIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVVTRURfUVVFVUVEX0ZPUl9XSUZJIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVVTRURfVU5LTk9XTiIvPgotCQk8ZmllbGQgbmFtZT0iUEFVU0VEX1dBSVRJTkdfRk9SX05FVFdPUksiLz4KLQkJPGZpZWxkIG5hbWU9IlBBVVNFRF9XQUlUSU5HX1RPX1JFVFJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfRkFJTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfUEFVU0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfUEVORElORyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX1JVTk5JTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19TVUNDRVNTRlVMIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvRG93bmxvYWRNYW5hZ2VyJFF1ZXJ5IiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaWx0ZXJCeUlkKFtKKUxhbmRyb2lkL2FwcC9Eb3dubG9hZE1hbmFnZXIkUXVlcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmlsdGVyQnlTdGF0dXMoSSlMYW5kcm9pZC9hcHAvRG93bmxvYWRNYW5hZ2VyJFF1ZXJ5OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0Rvd25sb2FkTWFuYWdlciRSZXF1ZXN0IiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFJlcXVlc3RIZWFkZXIoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9Eb3dubG9hZE1hbmFnZXIkUmVxdWVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxvd1NjYW5uaW5nQnlNZWRpYVNjYW5uZXIoKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFsbG93ZWROZXR3b3JrVHlwZXMoSSlMYW5kcm9pZC9hcHAvRG93bmxvYWRNYW5hZ2VyJFJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxsb3dlZE92ZXJNZXRlcmVkKFopTGFuZHJvaWQvYXBwL0Rvd25sb2FkTWFuYWdlciRSZXF1ZXN0OyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxsb3dlZE92ZXJSb2FtaW5nKFopTGFuZHJvaWQvYXBwL0Rvd25sb2FkTWFuYWdlciRSZXF1ZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlc2NyaXB0aW9uKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9hcHAvRG93bmxvYWRNYW5hZ2VyJFJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXIoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9hcHAvRG93bmxvYWRNYW5hZ2VyJFJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9hcHAvRG93bmxvYWRNYW5hZ2VyJFJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVzdGluYXRpb25VcmkoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvYXBwL0Rvd25sb2FkTWFuYWdlciRSZXF1ZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbWVUeXBlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9hcHAvRG93bmxvYWRNYW5hZ2VyJFJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Tm90aWZpY2F0aW9uVmlzaWJpbGl0eShJKUxhbmRyb2lkL2FwcC9Eb3dubG9hZE1hbmFnZXIkUmVxdWVzdDsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlcXVpcmVzQ2hhcmdpbmcoWilMYW5kcm9pZC9hcHAvRG93bmxvYWRNYW5hZ2VyJFJlcXVlc3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXF1aXJlc0RldmljZUlkbGUoWilMYW5kcm9pZC9hcHAvRG93bmxvYWRNYW5hZ2VyJFJlcXVlc3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG93UnVubmluZ05vdGlmaWNhdGlvbihaKUxhbmRyb2lkL2FwcC9Eb3dubG9hZE1hbmFnZXIkUmVxdWVzdDsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9Eb3dubG9hZE1hbmFnZXIkUmVxdWVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaXNpYmxlSW5Eb3dubG9hZHNVaShaKUxhbmRyb2lkL2FwcC9Eb3dubG9hZE1hbmFnZXIkUmVxdWVzdDsiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVFdPUktfTU9CSUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLX1dJRkkiLz4KLQkJPGZpZWxkIG5hbWU9IlZJU0lCSUxJVFlfSElEREVOIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlZJU0lCSUxJVFlfVklTSUJMRSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSVNJQklMSVRZX1ZJU0lCTEVfTk9USUZZX0NPTVBMRVRFRCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSVNJQklMSVRZX1ZJU0lCTEVfTk9USUZZX09OTFlfQ09NUExFVElPTiIgc2luY2U9IjEyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvRXhwYW5kYWJsZUxpc3RBY3Rpdml0eSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9BY3Rpdml0eSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3dpZGdldC9FeHBhbmRhYmxlTGlzdFZpZXckT25DaGlsZENsaWNrTGlzdGVuZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvRXhwYW5kYWJsZUxpc3RWaWV3JE9uR3JvdXBDb2xsYXBzZUxpc3RlbmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0V4cGFuZGFibGVMaXN0VmlldyRPbkdyb3VwRXhwYW5kTGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHBhbmRhYmxlTGlzdEFkYXB0ZXIoKUxhbmRyb2lkL3dpZGdldC9FeHBhbmRhYmxlTGlzdEFkYXB0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhwYW5kYWJsZUxpc3RWaWV3KClMYW5kcm9pZC93aWRnZXQvRXhwYW5kYWJsZUxpc3RWaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGVkSWQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxlY3RlZFBvc2l0aW9uKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGlzdEFkYXB0ZXIoTGFuZHJvaWQvd2lkZ2V0L0V4cGFuZGFibGVMaXN0QWRhcHRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbGVjdGVkQ2hpbGQoSUlaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWxlY3RlZEdyb3VwKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0ZyYWdtZW50IiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50Q2FsbGJhY2tzIiByZW1vdmVkPSIxNCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50Q2FsbGJhY2tzMiIgc2luY2U9IjE0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3JE9uQ3JlYXRlQ29udGV4dE1lbnVMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXAoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vRmlsZURlc2NyaXB0b3I7TGphdmEvaW8vUHJpbnRXcml0ZXI7W0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZpdHkoKUxhbmRyb2lkL2FwcC9BY3Rpdml0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxvd0VudGVyVHJhbnNpdGlvbk92ZXJsYXAoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbG93UmV0dXJuVHJhbnNpdGlvbk92ZXJsYXAoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFyZ3VtZW50cygpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkRnJhZ21lbnRNYW5hZ2VyKClMYW5kcm9pZC9hcHAvRnJhZ21lbnRNYW5hZ2VyOyIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGV4dCgpTGFuZHJvaWQvY29udGVudC9Db250ZXh0OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW50ZXJUcmFuc2l0aW9uKClMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeGl0VHJhbnNpdGlvbigpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJhZ21lbnRNYW5hZ2VyKClMYW5kcm9pZC9hcHAvRnJhZ21lbnRNYW5hZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvc3QoKUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXlvdXRJbmZsYXRlcigpTGFuZHJvaWQvdmlldy9MYXlvdXRJbmZsYXRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvYWRlck1hbmFnZXIoKUxhbmRyb2lkL2FwcC9Mb2FkZXJNYW5hZ2VyOyIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJlbnRGcmFnbWVudCgpTGFuZHJvaWQvYXBwL0ZyYWdtZW50OyIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVlbnRlclRyYW5zaXRpb24oKUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc291cmNlcygpTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJldGFpbkluc3RhbmNlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmV0dXJuVHJhbnNpdGlvbigpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hhcmVkRWxlbWVudEVudGVyVHJhbnNpdGlvbigpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hhcmVkRWxlbWVudFJldHVyblRyYW5zaXRpb24oKUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmluZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmluZyhJW0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRhcmdldEZyYWdtZW50KClMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFyZ2V0UmVxdWVzdENvZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0KEkpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlclZpc2libGVIaW50KClaIiBzaW5jZT0iMTUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWV3KClMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zdGFudGlhdGUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zdGFudGlhdGUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvYXBwL0ZyYWdtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWRkZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RldGFjaGVkKClaIiBzaW5jZT0iMTMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0hpZGRlbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5MYXlvdXQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlbW92aW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZXN1bWVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTdGF0ZVNhdmVkKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Zpc2libGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFjdGl2aXR5Q3JlYXRlZChMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFjdGl2aXR5UmVzdWx0KElJTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF0dGFjaChMYW5kcm9pZC9hcHAvQWN0aXZpdHk7KVYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BdHRhY2goTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF0dGFjaEZyYWdtZW50KExhbmRyb2lkL2FwcC9GcmFnbWVudDspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db250ZXh0SXRlbVNlbGVjdGVkKExhbmRyb2lkL3ZpZXcvTWVudUl0ZW07KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZShMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZUFuaW1hdG9yKElaSSlMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVPcHRpb25zTWVudShMYW5kcm9pZC92aWV3L01lbnU7TGFuZHJvaWQvdmlldy9NZW51SW5mbGF0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZVZpZXcoTGFuZHJvaWQvdmlldy9MYXlvdXRJbmZsYXRlcjtMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDtMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRlc3Ryb3koKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRlc3Ryb3lPcHRpb25zTWVudSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGVzdHJveVZpZXcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRldGFjaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2V0TGF5b3V0SW5mbGF0ZXIoTGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25IaWRkZW5DaGFuZ2VkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSW5mbGF0ZShMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMTIiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25JbmZsYXRlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSW5mbGF0ZShMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25NdWx0aVdpbmRvd01vZGVDaGFuZ2VkKFopViIgc2luY2U9IjI0IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTXVsdGlXaW5kb3dNb2RlQ2hhbmdlZChaTGFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25PcHRpb25zSXRlbVNlbGVjdGVkKExhbmRyb2lkL3ZpZXcvTWVudUl0ZW07KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk9wdGlvbnNNZW51Q2xvc2VkKExhbmRyb2lkL3ZpZXcvTWVudTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGF1c2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBpY3R1cmVJblBpY3R1cmVNb2RlQ2hhbmdlZChaKVYiIHNpbmNlPSIyNCIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBpY3R1cmVJblBpY3R1cmVNb2RlQ2hhbmdlZChaTGFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QcmVwYXJlT3B0aW9uc01lbnUoTGFuZHJvaWQvdmlldy9NZW51OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXF1ZXN0UGVybWlzc2lvbnNSZXN1bHQoSVtMamF2YS9sYW5nL1N0cmluZztbSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlc3VtZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2F2ZUluc3RhbmNlU3RhdGUoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGFydCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RvcCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVmlld0NyZWF0ZWQoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjEzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25WaWV3U3RhdGVSZXN0b3JlZChMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InBvc3Rwb25lRW50ZXJUcmFuc2l0aW9uKClWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlckZvckNvbnRleHRNZW51KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RQZXJtaXNzaW9ucyhbTGphdmEvbGFuZy9TdHJpbmc7SSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGxvd0VudGVyVHJhbnNpdGlvbk92ZXJsYXAoWilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGxvd1JldHVyblRyYW5zaXRpb25PdmVybGFwKFopViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXJndW1lbnRzKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVudGVyU2hhcmVkRWxlbWVudENhbGxiYWNrKExhbmRyb2lkL2FwcC9TaGFyZWRFbGVtZW50Q2FsbGJhY2s7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVudGVyVHJhbnNpdGlvbihMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4aXRTaGFyZWRFbGVtZW50Q2FsbGJhY2soTGFuZHJvaWQvYXBwL1NoYXJlZEVsZW1lbnRDYWxsYmFjazspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXhpdFRyYW5zaXRpb24oTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIYXNPcHRpb25zTWVudShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbml0aWFsU2F2ZWRTdGF0ZShMYW5kcm9pZC9hcHAvRnJhZ21lbnQkU2F2ZWRTdGF0ZTspViIgc2luY2U9IjEzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWVudVZpc2liaWxpdHkoWilWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWVudGVyVHJhbnNpdGlvbihMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJldGFpbkluc3RhbmNlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJldHVyblRyYW5zaXRpb24oTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaGFyZWRFbGVtZW50RW50ZXJUcmFuc2l0aW9uKExhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hhcmVkRWxlbWVudFJldHVyblRyYW5zaXRpb24oTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUYXJnZXRGcmFnbWVudChMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXNlclZpc2libGVIaW50KFopViIgc2luY2U9IjE1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdWxkU2hvd1JlcXVlc3RQZXJtaXNzaW9uUmF0aW9uYWxlKExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEFjdGl2aXR5KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBY3Rpdml0eShMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBY3Rpdml0eUZvclJlc3VsdChMYW5kcm9pZC9jb250ZW50L0ludGVudDtJTGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEludGVudFNlbmRlckZvclJlc3VsdChMYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlcjtJTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7SUlJTGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFBvc3Rwb25lZEVudGVyVHJhbnNpdGlvbigpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckZvckNvbnRleHRNZW51KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0ZyYWdtZW50JEluc3RhbnRpYXRpb25FeGNlcHRpb24iIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3V0aWwvQW5kcm9pZFJ1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9FeGNlcHRpb247KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9GcmFnbWVudCRTYXZlZFN0YXRlIiBzaW5jZT0iMTMiIGRlcHJlY2F0ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvRnJhZ21lbnRCcmVhZENydW1icyIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3R3JvdXAiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9hcHAvRnJhZ21lbnRNYW5hZ2VyJE9uQmFja1N0YWNrQ2hhbmdlZExpc3RlbmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjdGl2aXR5KExhbmRyb2lkL2FwcC9BY3Rpdml0eTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1heFZpc2libGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25CcmVhZENydW1iQ2xpY2tMaXN0ZW5lcihMYW5kcm9pZC9hcHAvRnJhZ21lbnRCcmVhZENydW1icyRPbkJyZWFkQ3J1bWJDbGlja0xpc3RlbmVyOylWIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXJlbnRUaXRsZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC92aWV3L1ZpZXckT25DbGlja0xpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9GcmFnbWVudEJyZWFkQ3J1bWJzJE9uQnJlYWRDcnVtYkNsaWNrTGlzdGVuZXIiIHNpbmNlPSIxMiIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25CcmVhZENydW1iQ2xpY2soTGFuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlciRCYWNrU3RhY2tFbnRyeTtJKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9GcmFnbWVudENvbnRhaW5lciIgc2luY2U9IjIzIiBkZXByZWNhdGVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZpbmRWaWV3QnlJZChJKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkhhc1ZpZXcoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9GcmFnbWVudENvbnRyb2xsZXIiIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9hcHAvRnJhZ21lbnRIb3N0Q2FsbGJhY2s7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImF0dGFjaEhvc3QoTGFuZHJvaWQvYXBwL0ZyYWdtZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ29udHJvbGxlcihMYW5kcm9pZC9hcHAvRnJhZ21lbnRIb3N0Q2FsbGJhY2s7KUxhbmRyb2lkL2FwcC9GcmFnbWVudENvbnRyb2xsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hBY3Rpdml0eUNyZWF0ZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaENvbmZpZ3VyYXRpb25DaGFuZ2VkKExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbmZpZ3VyYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaENvbnRleHRJdGVtU2VsZWN0ZWQoTGFuZHJvaWQvdmlldy9NZW51SXRlbTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoQ3JlYXRlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hDcmVhdGVPcHRpb25zTWVudShMYW5kcm9pZC92aWV3L01lbnU7TGFuZHJvaWQvdmlldy9NZW51SW5mbGF0ZXI7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaERlc3Ryb3koKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaERlc3Ryb3lWaWV3KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hMb3dNZW1vcnkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaE11bHRpV2luZG93TW9kZUNoYW5nZWQoWilWIiBzaW5jZT0iMjQiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hNdWx0aVdpbmRvd01vZGVDaGFuZ2VkKFpMYW5kcm9pZC9jb250ZW50L3Jlcy9Db25maWd1cmF0aW9uOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaE9wdGlvbnNJdGVtU2VsZWN0ZWQoTGFuZHJvaWQvdmlldy9NZW51SXRlbTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoT3B0aW9uc01lbnVDbG9zZWQoTGFuZHJvaWQvdmlldy9NZW51OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hQYXVzZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoUGljdHVyZUluUGljdHVyZU1vZGVDaGFuZ2VkKFopViIgc2luY2U9IjI0IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoUGljdHVyZUluUGljdHVyZU1vZGVDaGFuZ2VkKFpMYW5kcm9pZC9jb250ZW50L3Jlcy9Db25maWd1cmF0aW9uOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaFByZXBhcmVPcHRpb25zTWVudShMYW5kcm9pZC92aWV3L01lbnU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaFJlc3VtZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoU3RhcnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaFN0b3AoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaFRyaW1NZW1vcnkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9Mb2FkZXJEZXN0cm95KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9Mb2FkZXJTdGFydCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRvTG9hZGVyU3RvcChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wTG9hZGVycyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtMamF2YS9pby9QcmludFdyaXRlcjtbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjUGVuZGluZ0FjdGlvbnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kRnJhZ21lbnRCeVdobyhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvYXBwL0ZyYWdtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyYWdtZW50TWFuYWdlcigpTGFuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2FkZXJNYW5hZ2VyKClMYW5kcm9pZC9hcHAvTG9hZGVyTWFuYWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RlU3RhdGVOb3RTYXZlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVwb3J0TG9hZGVyU3RhcnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN0b3JlQWxsU3RhdGUoTGFuZHJvaWQvb3MvUGFyY2VsYWJsZTtMYW5kcm9pZC9hcHAvRnJhZ21lbnRNYW5hZ2VyTm9uQ29uZmlnOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN0b3JlQWxsU3RhdGUoTGFuZHJvaWQvb3MvUGFyY2VsYWJsZTtMamF2YS91dGlsL0xpc3Q7KVYiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdG9yZUxvYWRlck5vbkNvbmZpZyhMYW5kcm9pZC91dGlsL0FycmF5TWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmV0YWluTG9hZGVyTm9uQ29uZmlnKClMYW5kcm9pZC91dGlsL0FycmF5TWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9InJldGFpbk5lc3RlZE5vbkNvbmZpZygpTGFuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlck5vbkNvbmZpZzsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJldGFpbk5vbkNvbmZpZygpTGphdmEvdXRpbC9MaXN0OyIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzYXZlQWxsU3RhdGUoKUxhbmRyb2lkL29zL1BhcmNlbGFibGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvRnJhZ21lbnRIb3N0Q2FsbGJhY2siIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9GcmFnbWVudENvbnRhaW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvb3MvSGFuZGxlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF0dGFjaEZyYWdtZW50KExhbmRyb2lkL2FwcC9GcmFnbWVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRHVtcChMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtMamF2YS9pby9QcmludFdyaXRlcjtbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdldEhvc3QoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2V0TGF5b3V0SW5mbGF0ZXIoKUxhbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZXRXaW5kb3dBbmltYXRpb25zKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25IYXNXaW5kb3dBbmltYXRpb25zKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25JbnZhbGlkYXRlT3B0aW9uc01lbnUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlcXVlc3RQZXJtaXNzaW9uc0Zyb21GcmFnbWVudChMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7W0xqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2hvdWxkU2F2ZUZyYWdtZW50U3RhdGUoTGFuZHJvaWQvYXBwL0ZyYWdtZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGFydEFjdGl2aXR5RnJvbUZyYWdtZW50KExhbmRyb2lkL2FwcC9GcmFnbWVudDtMYW5kcm9pZC9jb250ZW50L0ludGVudDtJTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGFydEludGVudFNlbmRlckZyb21GcmFnbWVudChMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7TGFuZHJvaWQvY29udGVudC9JbnRlbnRTZW5kZXI7SUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0lJSUxhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Vc2VGcmFnbWVudE1hbmFnZXJJbmZsYXRlckZhY3RvcnkoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXIiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkT25CYWNrU3RhY2tDaGFuZ2VkTGlzdGVuZXIoTGFuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlciRPbkJhY2tTdGFja0NoYW5nZWRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJlZ2luVHJhbnNhY3Rpb24oKUxhbmRyb2lkL2FwcC9GcmFnbWVudFRyYW5zYWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXAoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vRmlsZURlc2NyaXB0b3I7TGphdmEvaW8vUHJpbnRXcml0ZXI7W0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlRGVidWdMb2dnaW5nKFopViIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWN1dGVQZW5kaW5nVHJhbnNhY3Rpb25zKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEZyYWdtZW50QnlJZChJKUxhbmRyb2lkL2FwcC9GcmFnbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kRnJhZ21lbnRCeVRhZyhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvYXBwL0ZyYWdtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhY2tTdGFja0VudHJ5QXQoSSlMYW5kcm9pZC9hcHAvRnJhZ21lbnRNYW5hZ2VyJEJhY2tTdGFja0VudHJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhY2tTdGFja0VudHJ5Q291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcmFnbWVudChMYW5kcm9pZC9vcy9CdW5kbGU7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9GcmFnbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcmFnbWVudHMoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1hcnlOYXZpZ2F0aW9uRnJhZ21lbnQoKUxhbmRyb2lkL2FwcC9GcmFnbWVudDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImludmFsaWRhdGVPcHRpb25zTWVudSgpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZXN0cm95ZWQoKVoiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3RhdGVTYXZlZCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG9wQmFja1N0YWNrKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9wQmFja1N0YWNrKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3BCYWNrU3RhY2soTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9wQmFja1N0YWNrSW1tZWRpYXRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9wQmFja1N0YWNrSW1tZWRpYXRlKElJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3BCYWNrU3RhY2tJbW1lZGlhdGUoTGphdmEvbGFuZy9TdHJpbmc7SSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RnJhZ21lbnQoTGFuZHJvaWQvb3MvQnVuZGxlO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2FwcC9GcmFnbWVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyRnJhZ21lbnRMaWZlY3ljbGVDYWxsYmFja3MoTGFuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlciRGcmFnbWVudExpZmVjeWNsZUNhbGxiYWNrcztaKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU9uQmFja1N0YWNrQ2hhbmdlZExpc3RlbmVyKExhbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXIkT25CYWNrU3RhY2tDaGFuZ2VkTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzYXZlRnJhZ21lbnRJbnN0YW5jZVN0YXRlKExhbmRyb2lkL2FwcC9GcmFnbWVudDspTGFuZHJvaWQvYXBwL0ZyYWdtZW50JFNhdmVkU3RhdGU7IiBzaW5jZT0iMTMiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyRnJhZ21lbnRMaWZlY3ljbGVDYWxsYmFja3MoTGFuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlciRGcmFnbWVudExpZmVjeWNsZUNhbGxiYWNrczspViIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQT1BfQkFDS19TVEFDS19JTkNMVVNJVkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXIkQmFja1N0YWNrRW50cnkiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnJlYWRDcnVtYlNob3J0VGl0bGUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJyZWFkQ3J1bWJTaG9ydFRpdGxlUmVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnJlYWRDcnVtYlRpdGxlKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCcmVhZENydW1iVGl0bGVSZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvRnJhZ21lbnRNYW5hZ2VyJEZyYWdtZW50TGlmZWN5Y2xlQ2FsbGJhY2tzIiBzaW5jZT0iMjYiIGRlcHJlY2F0ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRnJhZ21lbnRBY3Rpdml0eUNyZWF0ZWQoTGFuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlcjtMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25GcmFnbWVudEF0dGFjaGVkKExhbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXI7TGFuZHJvaWQvYXBwL0ZyYWdtZW50O0xhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRnJhZ21lbnRDcmVhdGVkKExhbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXI7TGFuZHJvaWQvYXBwL0ZyYWdtZW50O0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRnJhZ21lbnREZXN0cm95ZWQoTGFuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlcjtMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZyYWdtZW50RGV0YWNoZWQoTGFuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlcjtMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZyYWdtZW50UGF1c2VkKExhbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXI7TGFuZHJvaWQvYXBwL0ZyYWdtZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25GcmFnbWVudFByZUF0dGFjaGVkKExhbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXI7TGFuZHJvaWQvYXBwL0ZyYWdtZW50O0xhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRnJhZ21lbnRQcmVDcmVhdGVkKExhbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXI7TGFuZHJvaWQvYXBwL0ZyYWdtZW50O0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRnJhZ21lbnRSZXN1bWVkKExhbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXI7TGFuZHJvaWQvYXBwL0ZyYWdtZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25GcmFnbWVudFNhdmVJbnN0YW5jZVN0YXRlKExhbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXI7TGFuZHJvaWQvYXBwL0ZyYWdtZW50O0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRnJhZ21lbnRTdGFydGVkKExhbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXI7TGFuZHJvaWQvYXBwL0ZyYWdtZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25GcmFnbWVudFN0b3BwZWQoTGFuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlcjtMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZyYWdtZW50Vmlld0NyZWF0ZWQoTGFuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlcjtMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7TGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRnJhZ21lbnRWaWV3RGVzdHJveWVkKExhbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXI7TGFuZHJvaWQvYXBwL0ZyYWdtZW50OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvRnJhZ21lbnRNYW5hZ2VyJE9uQmFja1N0YWNrQ2hhbmdlZExpc3RlbmVyIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQmFja1N0YWNrQ2hhbmdlZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlck5vbkNvbmZpZyIgc2luY2U9IjI0IiBkZXByZWNhdGVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTGlzdDtMamF2YS91dGlsL0xpc3Q7KVYiIHNpbmNlPSIyOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0ZyYWdtZW50VHJhbnNhY3Rpb24iIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKElMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7KUxhbmRyb2lkL2FwcC9GcmFnbWVudFRyYW5zYWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChJTGFuZHJvaWQvYXBwL0ZyYWdtZW50O0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9hcHAvRnJhZ21lbnRUcmFuc2FjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGQoTGFuZHJvaWQvYXBwL0ZyYWdtZW50O0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9hcHAvRnJhZ21lbnRUcmFuc2FjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTaGFyZWRFbGVtZW50KExhbmRyb2lkL3ZpZXcvVmlldztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvYXBwL0ZyYWdtZW50VHJhbnNhY3Rpb247IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRUb0JhY2tTdGFjayhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvYXBwL0ZyYWdtZW50VHJhbnNhY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXR0YWNoKExhbmRyb2lkL2FwcC9GcmFnbWVudDspTGFuZHJvaWQvYXBwL0ZyYWdtZW50VHJhbnNhY3Rpb247IiBzaW5jZT0iMTMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21taXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21taXRBbGxvd2luZ1N0YXRlTG9zcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbW1pdE5vdygpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tbWl0Tm93QWxsb3dpbmdTdGF0ZUxvc3MoKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGFjaChMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7KUxhbmRyb2lkL2FwcC9GcmFnbWVudFRyYW5zYWN0aW9uOyIgc2luY2U9IjEzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzYWxsb3dBZGRUb0JhY2tTdGFjaygpTGFuZHJvaWQvYXBwL0ZyYWdtZW50VHJhbnNhY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGlkZShMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7KUxhbmRyb2lkL2FwcC9GcmFnbWVudFRyYW5zYWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWRkVG9CYWNrU3RhY2tBbGxvd2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbXB0eSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZShMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7KUxhbmRyb2lkL2FwcC9GcmFnbWVudFRyYW5zYWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2UoSUxhbmRyb2lkL2FwcC9GcmFnbWVudDspTGFuZHJvaWQvYXBwL0ZyYWdtZW50VHJhbnNhY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZShJTGFuZHJvaWQvYXBwL0ZyYWdtZW50O0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9hcHAvRnJhZ21lbnRUcmFuc2FjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5PbkNvbW1pdChMamF2YS9sYW5nL1J1bm5hYmxlOylMYW5kcm9pZC9hcHAvRnJhZ21lbnRUcmFuc2FjdGlvbjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJyZWFkQ3J1bWJTaG9ydFRpdGxlKEkpTGFuZHJvaWQvYXBwL0ZyYWdtZW50VHJhbnNhY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QnJlYWRDcnVtYlNob3J0VGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9GcmFnbWVudFRyYW5zYWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJyZWFkQ3J1bWJUaXRsZShJKUxhbmRyb2lkL2FwcC9GcmFnbWVudFRyYW5zYWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJyZWFkQ3J1bWJUaXRsZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvYXBwL0ZyYWdtZW50VHJhbnNhY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VzdG9tQW5pbWF0aW9ucyhJSSlMYW5kcm9pZC9hcHAvRnJhZ21lbnRUcmFuc2FjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXN0b21BbmltYXRpb25zKElJSUkpTGFuZHJvaWQvYXBwL0ZyYWdtZW50VHJhbnNhY3Rpb247IiBzaW5jZT0iMTMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmltYXJ5TmF2aWdhdGlvbkZyYWdtZW50KExhbmRyb2lkL2FwcC9GcmFnbWVudDspTGFuZHJvaWQvYXBwL0ZyYWdtZW50VHJhbnNhY3Rpb247IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZW9yZGVyaW5nQWxsb3dlZChaKUxhbmRyb2lkL2FwcC9GcmFnbWVudFRyYW5zYWN0aW9uOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhbnNpdGlvbihJKUxhbmRyb2lkL2FwcC9GcmFnbWVudFRyYW5zYWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyYW5zaXRpb25TdHlsZShJKUxhbmRyb2lkL2FwcC9GcmFnbWVudFRyYW5zYWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InNob3coTGFuZHJvaWQvYXBwL0ZyYWdtZW50OylMYW5kcm9pZC9hcHAvRnJhZ21lbnRUcmFuc2FjdGlvbjsiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TSVRfRU5URVJfTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNJVF9FWElUX01BU0siLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TSVRfRlJBR01FTlRfQ0xPU0UiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TSVRfRlJBR01FTlRfRkFERSIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNJVF9GUkFHTUVOVF9PUEVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFOU0lUX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TSVRfVU5TRVQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9JbnN0cnVtZW50YXRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjcXVpcmVMb29wZXJNYW5hZ2VyKExhbmRyb2lkL29zL0xvb3BlcjspTGFuZHJvaWQvb3MvVGVzdExvb3Blck1hbmFnZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRNb25pdG9yKExhbmRyb2lkL2FwcC9JbnN0cnVtZW50YXRpb24kQWN0aXZpdHlNb25pdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTW9uaXRvcihMYW5kcm9pZC9jb250ZW50L0ludGVudEZpbHRlcjtMYW5kcm9pZC9hcHAvSW5zdHJ1bWVudGF0aW9uJEFjdGl2aXR5UmVzdWx0O1opTGFuZHJvaWQvYXBwL0luc3RydW1lbnRhdGlvbiRBY3Rpdml0eU1vbml0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTW9uaXRvcihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9hcHAvSW5zdHJ1bWVudGF0aW9uJEFjdGl2aXR5UmVzdWx0O1opTGFuZHJvaWQvYXBwL0luc3RydW1lbnRhdGlvbiRBY3Rpdml0eU1vbml0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUmVzdWx0cyhMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbGxBY3Rpdml0eU9uQ3JlYXRlKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxsQWN0aXZpdHlPbkNyZWF0ZShMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxsQWN0aXZpdHlPbkRlc3Ryb3koTGFuZHJvaWQvYXBwL0FjdGl2aXR5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FsbEFjdGl2aXR5T25OZXdJbnRlbnQoTGFuZHJvaWQvYXBwL0FjdGl2aXR5O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FsbEFjdGl2aXR5T25QYXVzZShMYW5kcm9pZC9hcHAvQWN0aXZpdHk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxsQWN0aXZpdHlPblBvc3RDcmVhdGUoTGFuZHJvaWQvYXBwL0FjdGl2aXR5O0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbGxBY3Rpdml0eU9uUG9zdENyZWF0ZShMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxsQWN0aXZpdHlPblJlc3RhcnQoTGFuZHJvaWQvYXBwL0FjdGl2aXR5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FsbEFjdGl2aXR5T25SZXN0b3JlSW5zdGFuY2VTdGF0ZShMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FsbEFjdGl2aXR5T25SZXN0b3JlSW5zdGFuY2VTdGF0ZShMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxsQWN0aXZpdHlPblJlc3VtZShMYW5kcm9pZC9hcHAvQWN0aXZpdHk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxsQWN0aXZpdHlPblNhdmVJbnN0YW5jZVN0YXRlKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxsQWN0aXZpdHlPblNhdmVJbnN0YW5jZVN0YXRlKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9vcy9CdW5kbGU7TGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbGxBY3Rpdml0eU9uU3RhcnQoTGFuZHJvaWQvYXBwL0FjdGl2aXR5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FsbEFjdGl2aXR5T25TdG9wKExhbmRyb2lkL2FwcC9BY3Rpdml0eTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbGxBY3Rpdml0eU9uVXNlckxlYXZpbmcoTGFuZHJvaWQvYXBwL0FjdGl2aXR5OylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbGxBcHBsaWNhdGlvbk9uQ3JlYXRlKExhbmRyb2lkL2FwcC9BcHBsaWNhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrTW9uaXRvckhpdChMYW5kcm9pZC9hcHAvSW5zdHJ1bWVudGF0aW9uJEFjdGl2aXR5TW9uaXRvcjtJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRQZXJmb3JtYW5jZVNuYXBzaG90KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluaXNoKElMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxvY0NvdW50cygpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpbmRlckNvdW50cygpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBvbmVudE5hbWUoKUxhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZXh0KClMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvY2Vzc05hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFyZ2V0Q29udGV4dCgpTGFuZHJvaWQvY29udGVudC9Db250ZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVpQXV0b21hdGlvbigpTGFuZHJvaWQvYXBwL1VpQXV0b21hdGlvbjsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVpQXV0b21hdGlvbihJKUxhbmRyb2lkL2FwcC9VaUF1dG9tYXRpb247IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZva2VDb250ZXh0TWVudUFjdGlvbihMYW5kcm9pZC9hcHAvQWN0aXZpdHk7SUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imludm9rZU1lbnVBY3Rpb25TeW5jKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcm9maWxpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdBY3Rpdml0eShMamF2YS9sYW5nL0NsYXNzO0xhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9vcy9JQmluZGVyO0xhbmRyb2lkL2FwcC9BcHBsaWNhdGlvbjtMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9jb250ZW50L3BtL0FjdGl2aXR5SW5mbztMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KUxhbmRyb2lkL2FwcC9BY3Rpdml0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdBY3Rpdml0eShMamF2YS9sYW5nL0NsYXNzTG9hZGVyO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMYW5kcm9pZC9hcHAvQWN0aXZpdHk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3QXBwbGljYXRpb24oTGphdmEvbGFuZy9DbGFzcztMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxhbmRyb2lkL2FwcC9BcHBsaWNhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdBcHBsaWNhdGlvbihMamF2YS9sYW5nL0NsYXNzTG9hZGVyO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGFuZHJvaWQvYXBwL0FwcGxpY2F0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGVzdHJveSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXhjZXB0aW9uKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvVGhyb3dhYmxlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGFydCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU1vbml0b3IoTGFuZHJvaWQvYXBwL0luc3RydW1lbnRhdGlvbiRBY3Rpdml0eU1vbml0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5Pbk1haW5TeW5jKExqYXZhL2xhbmcvUnVubmFibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kQ2hhcmFjdGVyU3luYyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kS2V5RG93blVwU3luYyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kS2V5U3luYyhMYW5kcm9pZC92aWV3L0tleUV2ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZFBvaW50ZXJTeW5jKExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kU3RhdHVzKElMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kU3RyaW5nU3luYyhMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRUcmFja2JhbGxFdmVudFN5bmMoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dG9tYXRpY1BlcmZvcm1hbmNlU25hcHNob3RzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5Ub3VjaE1vZGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEFjdGl2aXR5U3luYyhMYW5kcm9pZC9jb250ZW50L0ludGVudDspTGFuZHJvaWQvYXBwL0FjdGl2aXR5OyIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWN0aXZpdHlTeW5jKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvYXBwL0FjdGl2aXR5OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBbGxvY0NvdW50aW5nKClWIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0UGVyZm9ybWFuY2VTbmFwc2hvdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0UHJvZmlsaW5nKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcEFsbG9jQ291bnRpbmcoKVYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcFByb2ZpbGluZygpViIvPgotCQk8bWV0aG9kIG5hbWU9IndhaXRGb3JJZGxlKExqYXZhL2xhbmcvUnVubmFibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3YWl0Rm9ySWRsZVN5bmMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3YWl0Rm9yTW9uaXRvcihMYW5kcm9pZC9hcHAvSW5zdHJ1bWVudGF0aW9uJEFjdGl2aXR5TW9uaXRvcjspTGFuZHJvaWQvYXBwL0FjdGl2aXR5OyIvPgotCQk8bWV0aG9kIG5hbWU9IndhaXRGb3JNb25pdG9yV2l0aFRpbWVvdXQoTGFuZHJvaWQvYXBwL0luc3RydW1lbnRhdGlvbiRBY3Rpdml0eU1vbml0b3I7SilMYW5kcm9pZC9hcHAvQWN0aXZpdHk7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVBPUlRfS0VZX0lERU5USUZJRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUE9SVF9LRVlfU1RSRUFNUkVTVUxUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvSW5zdHJ1bWVudGF0aW9uJEFjdGl2aXR5TW9uaXRvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9JbnRlbnRGaWx0ZXI7TGFuZHJvaWQvYXBwL0luc3RydW1lbnRhdGlvbiRBY3Rpdml0eVJlc3VsdDtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvYXBwL0luc3RydW1lbnRhdGlvbiRBY3Rpdml0eVJlc3VsdDtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWx0ZXIoKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50RmlsdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpdHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXN0QWN0aXZpdHkoKUxhbmRyb2lkL2FwcC9BY3Rpdml0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXN1bHQoKUxhbmRyb2lkL2FwcC9JbnN0cnVtZW50YXRpb24kQWN0aXZpdHlSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNCbG9ja2luZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhcnRBY3Rpdml0eShMYW5kcm9pZC9jb250ZW50L0ludGVudDspTGFuZHJvaWQvYXBwL0luc3RydW1lbnRhdGlvbiRBY3Rpdml0eVJlc3VsdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9IndhaXRGb3JBY3Rpdml0eSgpTGFuZHJvaWQvYXBwL0FjdGl2aXR5OyIvPgotCQk8bWV0aG9kIG5hbWU9IndhaXRGb3JBY3Rpdml0eVdpdGhUaW1lb3V0KEopTGFuZHJvaWQvYXBwL0FjdGl2aXR5OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0luc3RydW1lbnRhdGlvbiRBY3Rpdml0eVJlc3VsdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3VsdENvZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXN1bHREYXRhKClMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9JbnRlbnRTZXJ2aWNlIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkhhbmRsZUludGVudChMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludGVudFJlZGVsaXZlcnkoWilWIiBzaW5jZT0iNSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0tleWd1YXJkTWFuYWdlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ29uZmlybURldmljZUNyZWRlbnRpYWxJbnRlbnQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhpdEtleWd1YXJkU2VjdXJlbHkoTGFuZHJvaWQvYXBwL0tleWd1YXJkTWFuYWdlciRPbktleWd1YXJkRXhpdFJlc3VsdDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbktleWd1YXJkUmVzdHJpY3RlZElucHV0TW9kZSgpWiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RldmljZUxvY2tlZCgpWiIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZXZpY2VTZWN1cmUoKVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzS2V5Z3VhcmRMb2NrZWQoKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzS2V5Z3VhcmRTZWN1cmUoKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0tleWd1YXJkTG9jayhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvYXBwL0tleWd1YXJkTWFuYWdlciRLZXlndWFyZExvY2s7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3REaXNtaXNzS2V5Z3VhcmQoTGFuZHJvaWQvYXBwL0FjdGl2aXR5O0xhbmRyb2lkL2FwcC9LZXlndWFyZE1hbmFnZXIkS2V5Z3VhcmREaXNtaXNzQ2FsbGJhY2s7KVYiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0tleWd1YXJkTWFuYWdlciRLZXlndWFyZERpc21pc3NDYWxsYmFjayIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGlzbWlzc0NhbmNlbGxlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGlzbWlzc0Vycm9yKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EaXNtaXNzU3VjY2VlZGVkKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvS2V5Z3VhcmRNYW5hZ2VyJEtleWd1YXJkTG9jayIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9hcHAvS2V5Z3VhcmRNYW5hZ2VyOylWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9hcHAvS2V5Z3VhcmRNYW5hZ2VyO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNhYmxlS2V5Z3VhcmQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWVuYWJsZUtleWd1YXJkKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvS2V5Z3VhcmRNYW5hZ2VyJE9uS2V5Z3VhcmRFeGl0UmVzdWx0IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25LZXlndWFyZEV4aXRSZXN1bHQoWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTGF1bmNoZXJBY3Rpdml0eSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9MaXN0QWN0aXZpdHkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYXJnZXRJbnRlbnQoKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImludGVudEZvclBvc2l0aW9uKEkpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Iml0ZW1Gb3JQb3NpdGlvbihJKUxhbmRyb2lkL2FwcC9MYXVuY2hlckFjdGl2aXR5JExpc3RJdGVtOyIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYWtlTGlzdEl0ZW1zKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUXVlcnlQYWNrYWdlTWFuYWdlcihMYW5kcm9pZC9jb250ZW50L0ludGVudDspTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNldENvbnRlbnRWaWV3KClWIiBzaW5jZT0iNSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0xhdW5jaGVyQWN0aXZpdHkkSWNvblJlc2l6ZXIiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9hcHAvTGF1bmNoZXJBY3Rpdml0eTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUljb25UaHVtYm5haWwoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0xhdW5jaGVyQWN0aXZpdHkkTGlzdEl0ZW0iIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iY2xhc3NOYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJleHRyYXMiLz4KLQkJPGZpZWxkIG5hbWU9Imljb24iLz4KLQkJPGZpZWxkIG5hbWU9ImxhYmVsIi8+Ci0JCTxmaWVsZCBuYW1lPSJwYWNrYWdlTmFtZSIvPgotCQk8ZmllbGQgbmFtZT0icmVzb2x2ZUluZm8iIHNpbmNlPSI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTGlzdEFjdGl2aXR5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL0FjdGl2aXR5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGlzdEFkYXB0ZXIoKUxhbmRyb2lkL3dpZGdldC9MaXN0QWRhcHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaXN0VmlldygpTGFuZHJvaWQvd2lkZ2V0L0xpc3RWaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGVkSXRlbUlkKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VsZWN0ZWRJdGVtUG9zaXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxpc3RJdGVtQ2xpY2soTGFuZHJvaWQvd2lkZ2V0L0xpc3RWaWV3O0xhbmRyb2lkL3ZpZXcvVmlldztJSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGlzdEFkYXB0ZXIoTGFuZHJvaWQvd2lkZ2V0L0xpc3RBZGFwdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VsZWN0aW9uKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL0xpc3RGcmFnbWVudCIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL0ZyYWdtZW50Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGlzdEFkYXB0ZXIoKUxhbmRyb2lkL3dpZGdldC9MaXN0QWRhcHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaXN0VmlldygpTGFuZHJvaWQvd2lkZ2V0L0xpc3RWaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGVkSXRlbUlkKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VsZWN0ZWRJdGVtUG9zaXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxpc3RJdGVtQ2xpY2soTGFuZHJvaWQvd2lkZ2V0L0xpc3RWaWV3O0xhbmRyb2lkL3ZpZXcvVmlldztJSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW1wdHlUZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGlzdEFkYXB0ZXIoTGFuZHJvaWQvd2lkZ2V0L0xpc3RBZGFwdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGlzdFNob3duKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExpc3RTaG93bk5vQW5pbWF0aW9uKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbGVjdGlvbihJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9Mb2FkZXJNYW5hZ2VyIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlc3Ryb3lMb2FkZXIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHVtcChMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtMamF2YS9pby9QcmludFdyaXRlcjtbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmFibGVEZWJ1Z0xvZ2dpbmcoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9hZGVyKEkpTGFuZHJvaWQvY29udGVudC9Mb2FkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdExvYWRlcihJTGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL2FwcC9Mb2FkZXJNYW5hZ2VyJExvYWRlckNhbGxiYWNrczspTGFuZHJvaWQvY29udGVudC9Mb2FkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdGFydExvYWRlcihJTGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL2FwcC9Mb2FkZXJNYW5hZ2VyJExvYWRlckNhbGxiYWNrczspTGFuZHJvaWQvY29udGVudC9Mb2FkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTG9hZGVyTWFuYWdlciRMb2FkZXJDYWxsYmFja3MiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVMb2FkZXIoSUxhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvY29udGVudC9Mb2FkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Mb2FkRmluaXNoZWQoTGFuZHJvaWQvY29udGVudC9Mb2FkZXI7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxvYWRlclJlc2V0KExhbmRyb2lkL2NvbnRlbnQvTG9hZGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTG9jYWxBY3Rpdml0eU1hbmFnZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIxMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYXBwL0FjdGl2aXR5O1opViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlc3Ryb3lBY3Rpdml0eShMamF2YS9sYW5nL1N0cmluZztaKUxhbmRyb2lkL3ZpZXcvV2luZG93OyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoQ3JlYXRlKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoRGVzdHJveShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaFBhdXNlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoUmVzdW1lKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hTdG9wKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZpdHkoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9BY3Rpdml0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50QWN0aXZpdHkoKUxhbmRyb2lkL2FwcC9BY3Rpdml0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50SWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUFsbEFjdGl2aXRpZXMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzYXZlSW5zdGFuY2VTdGF0ZSgpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWN0aXZpdHkoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KUxhbmRyb2lkL3ZpZXcvV2luZG93OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL01lZGlhUm91dGVBY3Rpb25Qcm92aWRlciIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L0FjdGlvblByb3ZpZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dGVuZGVkU2V0dGluZ3NDbGlja0xpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlldyRPbkNsaWNrTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSb3V0ZVR5cGVzKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL01lZGlhUm91dGVCdXR0b24iIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um91dGVUeXBlcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dGVuZGVkU2V0dGluZ3NDbGlja0xpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlldyRPbkNsaWNrTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSb3V0ZVR5cGVzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dEaWFsb2coKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9OYXRpdmVBY3Rpdml0eSIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9BY3Rpdml0eSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvSW5wdXRRdWV1ZSRDYWxsYmFjayIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvU3VyZmFjZUhvbGRlciRDYWxsYmFjazIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdUcmVlT2JzZXJ2ZXIkT25HbG9iYWxMYXlvdXRMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9EQVRBX0ZVTkNfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9EQVRBX0xJQl9OQU1FIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtKKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lKClMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYWRnZUljb25UeXBlKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFubmVsSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3JvdXAoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3JvdXBBbGVydEJlaGF2aW9yKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXJnZUljb24oKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXR0aW5nc1RleHQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvcnRjdXRJZCgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTbWFsbEljb24oKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb3J0S2V5KClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVvdXRBZnRlcigpSiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF0ZXN0RXZlbnRJbmZvKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT19BVFRSSUJVVEVTX0RFRkFVTFQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQkFER0VfSUNPTl9MQVJHRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQURHRV9JQ09OX05PTkUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQkFER0VfSUNPTl9TTUFMTCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9BTEFSTSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9DQUxMIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0VNQUlMIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0VSUk9SIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0VWRU5UIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX01FU1NBR0UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfTkFWSUdBVElPTiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9QUk9HUkVTUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9QUk9NTyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9SRUNPTU1FTkRBVElPTiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9SRU1JTkRFUiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9TRVJWSUNFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX1NPQ0lBTCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9TVEFUVVMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfU1lTVEVNIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX1RSQU5TUE9SVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9ERUZBVUxUIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfQUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX0xJR0hUUyIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TT1VORCIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9WSUJSQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BVURJT19DT05URU5UU19VUkkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQkFDS0dST1VORF9JTUFHRV9VUkkiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQklHX1RFWFQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0hBTk5FTF9HUk9VUF9JRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DSEFOTkVMX0lEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0NIUk9OT01FVEVSX0NPVU5UX0RPV04iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ09MT1JJWkVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0NPTVBBQ1RfQUNUSU9OUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DT05WRVJTQVRJT05fVElUTEUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfSElTVE9SSUNfTUVTU0FHRVMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfSU5GT19URVhUIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0lTX0dST1VQX0NPTlZFUlNBVElPTiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9MQVJHRV9JQ09OIiBzaW5jZT0iMTkiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9MQVJHRV9JQ09OX0JJRyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9NRURJQV9TRVNTSU9OIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX01FU1NBR0VTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX01FU1NBR0lOR19QRVJTT04iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTk9USUZJQ0FUSU9OX0lEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX05PVElGSUNBVElPTl9UQUciIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUEVPUExFIiBzaW5jZT0iMTkiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QRU9QTEVfTElTVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QSUNUVVJFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST0dSRVNTIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST0dSRVNTX0lOREVURVJNSU5BVEUiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJPR1JFU1NfTUFYIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JFTU9URV9JTlBVVF9EUkFGVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9SRU1PVEVfSU5QVVRfSElTVE9SWSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TRUxGX0RJU1BMQVlfTkFNRSIgc2luY2U9IjI0IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU0hPV19DSFJPTk9NRVRFUiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TSE9XX1dIRU4iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU01BTExfSUNPTiIgc2luY2U9IjE5IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU1VCX1RFWFQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU1VNTUFSWV9URVhUIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1RFTVBMQVRFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1RFWFQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfVEVYVF9MSU5FUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9USVRMRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9USVRMRV9CSUciIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19BVVRPX0NBTkNFTCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19GT1JFR1JPVU5EX1NFUlZJQ0UiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0dST1VQX1NVTU1BUlkiIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19ISUdIX1BSSU9SSVRZIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0lOU0lTVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19MT0NBTF9PTkxZIiBzaW5jZT0iMjAiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfTk9fQ0xFQVIiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfT05HT0lOR19FVkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19PTkxZX0FMRVJUX09OQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfU0hPV19MSUdIVFMiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHUk9VUF9BTEVSVF9BTEwiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iR1JPVVBfQUxFUlRfQ0hJTERSRU4iIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iR1JPVVBfQUxFUlRfU1VNTUFSWSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFTlRfQ0FURUdPUllfTk9USUZJQ0FUSU9OX1BSRUZFUkVOQ0VTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlBSSU9SSVRZX0RFRkFVTFQiIHNpbmNlPSIxNiIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlBSSU9SSVRZX0hJR0giIHNpbmNlPSIxNiIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlBSSU9SSVRZX0xPVyIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUFJJT1JJVFlfTUFYIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUklPUklUWV9NSU4iIHNpbmNlPSIxNiIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUkVBTV9ERUZBVUxUIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVklTSUJJTElUWV9QUklWQVRFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlZJU0lCSUxJVFlfUFVCTElDIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlZJU0lCSUxJVFlfU0VDUkVUIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvbnMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iYXVkaW9BdHRyaWJ1dGVzIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhdWRpb1N0cmVhbVR5cGUiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJiaWdDb250ZW50VmlldyIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iY2F0ZWdvcnkiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY29sb3IiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iY29udGVudEludGVudCIvPgotCQk8ZmllbGQgbmFtZT0iY29udGVudFZpZXciIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkZWZhdWx0cyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9ImRlbGV0ZUludGVudCIvPgotCQk8ZmllbGQgbmFtZT0iZXh0cmFzIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9ImZsYWdzIi8+Ci0JCTxmaWVsZCBuYW1lPSJmdWxsU2NyZWVuSW50ZW50IiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iaGVhZHNVcENvbnRlbnRWaWV3IiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpY29uIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iaWNvbkxldmVsIi8+Ci0JCTxmaWVsZCBuYW1lPSJsYXJnZUljb24iIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImxlZEFSR0IiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsZWRPZmZNUyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9ImxlZE9uTVMiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJudW1iZXIiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwcmlvcml0eSIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0icHVibGljVmVyc2lvbiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJzb3VuZCIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9InRpY2tlclRleHQiLz4KLQkJPGZpZWxkIG5hbWU9InRpY2tlclZpZXciIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InZpYnJhdGUiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ2aXNpYmlsaXR5IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IndoZW4iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQWN0aW9uIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmUoKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbG93R2VuZXJhdGVkUmVwbGllcygpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YU9ubHlSZW1vdGVJbnB1dHMoKVtMYW5kcm9pZC9hcHAvUmVtb3RlSW5wdXQ7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIyMCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEljb24oKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZW1vdGVJbnB1dHMoKVtMYW5kcm9pZC9hcHAvUmVtb3RlSW5wdXQ7IiBzaW5jZT0iMjAiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZW1hbnRpY0FjdGlvbigpSSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU1BTlRJQ19BQ1RJT05fQVJDSElWRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU1BTlRJQ19BQ1RJT05fQ0FMTCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU1BTlRJQ19BQ1RJT05fREVMRVRFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTUFOVElDX0FDVElPTl9NQVJLX0FTX1JFQUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU0VNQU5USUNfQUNUSU9OX01BUktfQVNfVU5SRUFEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTUFOVElDX0FDVElPTl9NVVRFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTUFOVElDX0FDVElPTl9OT05FIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTUFOVElDX0FDVElPTl9SRVBMWSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU1BTlRJQ19BQ1RJT05fVEhVTUJTX0RPV04iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU0VNQU5USUNfQUNUSU9OX1RIVU1CU19VUCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU1BTlRJQ19BQ1RJT05fVU5NVVRFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGlvbkludGVudCIvPgotCQk8ZmllbGQgbmFtZT0iaWNvbiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9InRpdGxlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEFjdGlvbiRCdWlsZGVyIiBzaW5jZT0iMjAiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRBY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbjtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRXh0cmFzKExhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRBY3Rpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSZW1vdGVJbnB1dChMYW5kcm9pZC9hcHAvUmVtb3RlSW5wdXQ7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQWN0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4dGVuZChMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEFjdGlvbiRFeHRlbmRlcjspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRBY3Rpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGxvd0dlbmVyYXRlZFJlcGxpZXMoWilMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEFjdGlvbiRCdWlsZGVyOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VtYW50aWNBY3Rpb24oSSlMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEFjdGlvbiRCdWlsZGVyOyIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEFjdGlvbiRFeHRlbmRlciIgc2luY2U9IjIwIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImV4dGVuZChMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEFjdGlvbiRCdWlsZGVyOylMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEFjdGlvbiRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRBY3Rpb24kV2VhcmFibGVFeHRlbmRlciIgc2luY2U9IjIwIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQWN0aW9uJEV4dGVuZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmUoKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQWN0aW9uJFdlYXJhYmxlRXh0ZW5kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FuY2VsTGFiZWwoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjIyIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbmZpcm1MYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjIiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGludERpc3BsYXlBY3Rpb25JbmxpbmUoKVoiIHNpbmNlPSIyNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpbnRMYXVuY2hlc0FjdGl2aXR5KClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJblByb2dyZXNzTGFiZWwoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjIyIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXZhaWxhYmxlT2ZmbGluZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF2YWlsYWJsZU9mZmxpbmUoWilMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEFjdGlvbiRXZWFyYWJsZUV4dGVuZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbmNlbExhYmVsKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEFjdGlvbiRXZWFyYWJsZUV4dGVuZGVyOyIgc2luY2U9IjIyIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbmZpcm1MYWJlbChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRBY3Rpb24kV2VhcmFibGVFeHRlbmRlcjsiIHNpbmNlPSIyMiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIaW50RGlzcGxheUFjdGlvbklubGluZShaKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQWN0aW9uJFdlYXJhYmxlRXh0ZW5kZXI7IiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIaW50TGF1bmNoZXNBY3Rpdml0eShaKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQWN0aW9uJFdlYXJhYmxlRXh0ZW5kZXI7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJblByb2dyZXNzTGFiZWwoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQWN0aW9uJFdlYXJhYmxlRXh0ZW5kZXI7IiBzaW5jZT0iMjIiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJpZ1BpY3R1cmVTdHlsZSIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJFN0eWxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjspViIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaWdMYXJnZUljb24oTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJpZ1BpY3R1cmVTdHlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaWdMYXJnZUljb24oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbjspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCaWdQaWN0dXJlU3R5bGU7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaWdQaWN0dXJlKExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCaWdQaWN0dXJlU3R5bGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmlnQ29udGVudFRpdGxlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJpZ1BpY3R1cmVTdHlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdW1tYXJ5VGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCaWdQaWN0dXJlU3R5bGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJpZ1RleHRTdHlsZSIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJFN0eWxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjspViIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaWdUZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJpZ1RleHRTdHlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCaWdDb250ZW50VGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQmlnVGV4dFN0eWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1bW1hcnlUZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJpZ1RleHRTdHlsZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQWN0aW9uKElMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFjdGlvbihMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEFjdGlvbjspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRXh0cmFzKExhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUGVyc29uKExhbmRyb2lkL2FwcC9QZXJzb247KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFBlcnNvbihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQmlnQ29udGVudFZpZXcoKUxhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3czsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUNvbnRlbnRWaWV3KClMYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3M7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVIZWFkc1VwQ29udGVudFZpZXcoKUxhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3czsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImV4dGVuZChMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEV4dGVuZGVyOylMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7IiBzaW5jZT0iMjAiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIyMCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5vdGlmaWNhdGlvbigpTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3R5bGUoKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kU3R5bGU7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWNvdmVyQnVpbGRlcihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbjspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWN0aW9ucyhbTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRBY3Rpb247KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dG9DYW5jZWwoWilMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmFkZ2VJY29uVHlwZShJKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhdGVnb3J5KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGFubmVsSWQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENocm9ub21ldGVyQ291bnREb3duKFopTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sb3IoSSlMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2xvcml6ZWQoWilMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50KExhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3czspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50SW5mbyhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50SW50ZW50KExhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGVudFRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50VGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXN0b21CaWdDb250ZW50VmlldyhMYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3M7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1c3RvbUNvbnRlbnRWaWV3KExhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3czspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VzdG9tSGVhZHNVcENvbnRlbnRWaWV3KExhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3czspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVmYXVsdHMoSSlMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlbGV0ZUludGVudChMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dHJhcyhMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZ1bGxTY3JlZW5JbnRlbnQoTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7WilMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R3JvdXAoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIyMCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyb3VwQWxlcnRCZWhhdmlvcihJKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyb3VwU3VtbWFyeShaKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIyMCIvPgotCQk8bWV0aG9kIG5hbWU9InNldExhcmdlSWNvbihMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYXJnZUljb24oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbjspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGlnaHRzKElJSSlMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvY2FsT25seShaKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIyMCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE51bWJlcihJKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25nb2luZyhaKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbmx5QWxlcnRPbmNlKFopTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByaW9yaXR5KEkpTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb2dyZXNzKElJWilMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQdWJsaWNWZXJzaW9uKExhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb247KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlbW90ZUlucHV0SGlzdG9yeShbTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNldHRpbmdzVGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hvcnRjdXRJZChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hvd1doZW4oWilMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTbWFsbEljb24oSSlMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U21hbGxJY29uKElJKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTbWFsbEljb24oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbjspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U29ydEtleShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U291bmQoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTb3VuZChMYW5kcm9pZC9uZXQvVXJpO0kpTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTb3VuZChMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL21lZGlhL0F1ZGlvQXR0cmlidXRlczspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0eWxlKExhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kU3R5bGU7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1YlRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpY2tlcihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpY2tlcihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3M7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZW91dEFmdGVyKEopTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXNlc0Nocm9ub21ldGVyKFopTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlicmF0ZShbSilMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpc2liaWxpdHkoSSlMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXaGVuKEopTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRDYXJFeHRlbmRlciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kRXh0ZW5kZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFyZ2VJY29uKClMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5yZWFkQ29udmVyc2F0aW9uKClMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJENhckV4dGVuZGVyJFVucmVhZENvbnZlcnNhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2xvcihJKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQ2FyRXh0ZW5kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGFyZ2VJY29uKExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRDYXJFeHRlbmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVbnJlYWRDb252ZXJzYXRpb24oTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRDYXJFeHRlbmRlciRVbnJlYWRDb252ZXJzYXRpb247KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQ2FyRXh0ZW5kZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJENhckV4dGVuZGVyJEJ1aWxkZXIiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRNZXNzYWdlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJENhckV4dGVuZGVyJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQ2FyRXh0ZW5kZXIkVW5yZWFkQ29udmVyc2F0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldExhdGVzdFRpbWVzdGFtcChKKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQ2FyRXh0ZW5kZXIkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWFkUGVuZGluZ0ludGVudChMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRDYXJFeHRlbmRlciRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlcGx5QWN0aW9uKExhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50O0xhbmRyb2lkL2FwcC9SZW1vdGVJbnB1dDspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRDYXJFeHRlbmRlciRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRDYXJFeHRlbmRlciRVbnJlYWRDb252ZXJzYXRpb24iIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9hcHAvUmVtb3RlSW5wdXQ7TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7W0xqYXZhL2xhbmcvU3RyaW5nO0opViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF0ZXN0VGltZXN0YW1wKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVzc2FnZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJ0aWNpcGFudCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFydGljaXBhbnRzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhZFBlbmRpbmdJbnRlbnQoKUxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlbW90ZUlucHV0KClMYW5kcm9pZC9hcHAvUmVtb3RlSW5wdXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVwbHlQZW5kaW5nSW50ZW50KClMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kRGVjb3JhdGVkQ3VzdG9tVmlld1N0eWxlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kU3R5bGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kRGVjb3JhdGVkTWVkaWFDdXN0b21WaWV3U3R5bGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRNZWRpYVN0eWxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEV4dGVuZGVyIiBzaW5jZT0iMjAiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXh0ZW5kKExhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kQnVpbGRlcjspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRJbmJveFN0eWxlIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kU3R5bGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOylWIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZExpbmUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kSW5ib3hTdHlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCaWdDb250ZW50VGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kSW5ib3hTdHlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdW1tYXJ5VGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRJbmJveFN0eWxlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRNZWRpYVN0eWxlIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kU3R5bGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRCdWlsZGVyOylWIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1lZGlhU2Vzc2lvbihMYW5kcm9pZC9tZWRpYS9zZXNzaW9uL01lZGlhU2Vzc2lvbiRUb2tlbjspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRNZWRpYVN0eWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNob3dBY3Rpb25zSW5Db21wYWN0VmlldyhbSSlMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJE1lZGlhU3R5bGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJE1lc3NhZ2luZ1N0eWxlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kU3R5bGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYXBwL1BlcnNvbjspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEhpc3RvcmljTWVzc2FnZShMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJE1lc3NhZ2luZ1N0eWxlJE1lc3NhZ2U7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kTWVzc2FnaW5nU3R5bGU7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRNZXNzYWdlKExhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kTWVzc2FnaW5nU3R5bGUkTWVzc2FnZTspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRNZXNzYWdpbmdTdHlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRNZXNzYWdlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0pMYW5kcm9pZC9hcHAvUGVyc29uOylMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJE1lc3NhZ2luZ1N0eWxlOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTWVzc2FnZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtKTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kTWVzc2FnaW5nU3R5bGU7IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnZlcnNhdGlvblRpdGxlKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaXN0b3JpY01lc3NhZ2VzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXNzYWdlcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXIoKUxhbmRyb2lkL2FwcC9QZXJzb247IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyRGlzcGxheU5hbWUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0dyb3VwQ29udmVyc2F0aW9uKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb252ZXJzYXRpb25UaXRsZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRNZXNzYWdpbmdTdHlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcm91cENvbnZlcnNhdGlvbihaKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kTWVzc2FnaW5nU3R5bGU7IiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWElNVU1fUkVUQUlORURfTUVTU0FHRVMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kTWVzc2FnaW5nU3R5bGUkTWVzc2FnZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtKTGFuZHJvaWQvYXBwL1BlcnNvbjspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0pMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhTWltZVR5cGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFVcmkoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZW5kZXIoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZW5kZXJQZXJzb24oKUxhbmRyb2lkL2FwcC9QZXJzb247IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXAoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kTWVzc2FnaW5nU3R5bGUkTWVzc2FnZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kU3R5bGUiIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja0J1aWxkZXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFuZGFyZFZpZXcoSSlMYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW50ZXJuYWxTZXRCaWdDb250ZW50VGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRlcm5hbFNldFN1bW1hcnlUZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QnVpbGRlcihMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEJ1aWxkZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9Im1CdWlsZGVyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJFdlYXJhYmxlRXh0ZW5kZXIiIHNpbmNlPSIyMCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJEV4dGVuZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBY3Rpb24oTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRBY3Rpb247KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kV2VhcmFibGVFeHRlbmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBY3Rpb25zKExqYXZhL3V0aWwvTGlzdDspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRXZWFyYWJsZUV4dGVuZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFBhZ2UoTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbjspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRXZWFyYWJsZUV4dGVuZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFBhZ2VzKExqYXZhL3V0aWwvTGlzdDspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRXZWFyYWJsZUV4dGVuZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQWN0aW9ucygpTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRXZWFyYWJsZUV4dGVuZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyUGFnZXMoKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kV2VhcmFibGVFeHRlbmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRXZWFyYWJsZUV4dGVuZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGlvbnMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYWNrZ3JvdW5kKClMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnJpZGdlVGFnKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnRBY3Rpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50SWNvbigpSSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50SWNvbkdyYXZpdHkoKUkiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudEludGVudEF2YWlsYWJsZU9mZmxpbmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXN0b21Db250ZW50SGVpZ2h0KClJIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1c3RvbVNpemVQcmVzZXQoKUkiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzbWlzc2FsSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheUludGVudCgpTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3Jhdml0eSgpSSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaW50QW1iaWVudEJpZ1BpY3R1cmUoKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpbnRBdm9pZEJhY2tncm91bmRDbGlwcGluZygpWiIgc2luY2U9IjIyIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpbnRDb250ZW50SW50ZW50TGF1bmNoZXNBY3Rpdml0eSgpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGludEhpZGVJY29uKClaIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpbnRTY3JlZW5UaW1lb3V0KClJIiBzaW5jZT0iMjIiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGludFNob3dCYWNrZ3JvdW5kT25seSgpWiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWdlcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXJ0U2Nyb2xsQm90dG9tKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmFja2dyb3VuZChMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kV2VhcmFibGVFeHRlbmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCcmlkZ2VUYWcoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kV2VhcmFibGVFeHRlbmRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRBY3Rpb24oSSlMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJFdlYXJhYmxlRXh0ZW5kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGVudEljb24oSSlMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJFdlYXJhYmxlRXh0ZW5kZXI7IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRJY29uR3Jhdml0eShJKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kV2VhcmFibGVFeHRlbmRlcjsiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGVudEludGVudEF2YWlsYWJsZU9mZmxpbmUoWilMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJFdlYXJhYmxlRXh0ZW5kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VzdG9tQ29udGVudEhlaWdodChJKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kV2VhcmFibGVFeHRlbmRlcjsiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VzdG9tU2l6ZVByZXNldChJKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kV2VhcmFibGVFeHRlbmRlcjsiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlzbWlzc2FsSWQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kV2VhcmFibGVFeHRlbmRlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXlJbnRlbnQoTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kV2VhcmFibGVFeHRlbmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcmF2aXR5KEkpTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRXZWFyYWJsZUV4dGVuZGVyOyIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIaW50QW1iaWVudEJpZ1BpY3R1cmUoWilMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJFdlYXJhYmxlRXh0ZW5kZXI7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIaW50QXZvaWRCYWNrZ3JvdW5kQ2xpcHBpbmcoWilMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uJFdlYXJhYmxlRXh0ZW5kZXI7IiBzaW5jZT0iMjIiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGludENvbnRlbnRJbnRlbnRMYXVuY2hlc0FjdGl2aXR5KFopTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRXZWFyYWJsZUV4dGVuZGVyOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGludEhpZGVJY29uKFopTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRXZWFyYWJsZUV4dGVuZGVyOyIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIaW50U2NyZWVuVGltZW91dChJKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kV2VhcmFibGVFeHRlbmRlcjsiIHNpbmNlPSIyMiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIaW50U2hvd0JhY2tncm91bmRPbmx5KFopTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbiRXZWFyYWJsZUV4dGVuZGVyOyIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGFydFNjcm9sbEJvdHRvbShaKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24kV2VhcmFibGVFeHRlbmRlcjsiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTl9USU1FT1VUX0xPTkciIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOX1RJTUVPVVRfU0hPUlQiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iU0laRV9ERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSVpFX0ZVTExfU0NSRUVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSVpFX0xBUkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSVpFX01FRElVTSIvPgotCQk8ZmllbGQgbmFtZT0iU0laRV9TTUFMTCIvPgotCQk8ZmllbGQgbmFtZT0iU0laRV9YU01BTEwiLz4KLQkJPGZpZWxkIG5hbWU9IlVOU0VUX0FDVElPTl9JTkRFWCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbkNoYW5uZWwiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbkJ5cGFzc0RuZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNhblNob3dCYWRnZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuYWJsZUxpZ2h0cyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmFibGVWaWJyYXRpb24oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXVkaW9BdHRyaWJ1dGVzKClMYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyb3VwKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1wb3J0YW5jZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpZ2h0Q29sb3IoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2Nrc2NyZWVuVmlzaWJpbGl0eSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvdW5kKClMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpYnJhdGlvblBhdHRlcm4oKVtKIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QnlwYXNzRG5kKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlc2NyaXB0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R3JvdXAoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbXBvcnRhbmNlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExpZ2h0Q29sb3IoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9ja3NjcmVlblZpc2liaWxpdHkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmFtZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNob3dCYWRnZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTb3VuZChMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL21lZGlhL0F1ZGlvQXR0cmlidXRlczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpYnJhdGlvblBhdHRlcm4oW0opViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3VsZFNob3dMaWdodHMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG91bGRWaWJyYXRlKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX0NIQU5ORUxfSUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb25DaGFubmVsR3JvdXAiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmUoKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb25DaGFubmVsR3JvdXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhbm5lbHMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNjcmlwdGlvbigpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNCbG9ja2VkKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZXNjcmlwdGlvbihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uTWFuYWdlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQXV0b21hdGljWmVuUnVsZShMYW5kcm9pZC9hcHAvQXV0b21hdGljWmVuUnVsZTspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcmVOb3RpZmljYXRpb25zRW5hYmxlZCgpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbChMamF2YS9sYW5nL1N0cmluZztJKVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsQWxsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlTm90aWZpY2F0aW9uQ2hhbm5lbChMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uQ2hhbm5lbDspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlTm90aWZpY2F0aW9uQ2hhbm5lbEdyb3VwKExhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb25DaGFubmVsR3JvdXA7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZU5vdGlmaWNhdGlvbkNoYW5uZWxHcm91cHMoTGphdmEvdXRpbC9MaXN0OylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVOb3RpZmljYXRpb25DaGFubmVscyhMamF2YS91dGlsL0xpc3Q7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZU5vdGlmaWNhdGlvbkNoYW5uZWwoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZU5vdGlmaWNhdGlvbkNoYW5uZWxHcm91cChMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZlTm90aWZpY2F0aW9ucygpW0xhbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1N0YXR1c0Jhck5vdGlmaWNhdGlvbjsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1dG9tYXRpY1plblJ1bGUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9BdXRvbWF0aWNaZW5SdWxlOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0b21hdGljWmVuUnVsZXMoKUxqYXZhL3V0aWwvTWFwOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudEludGVycnVwdGlvbkZpbHRlcigpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1wb3J0YW5jZSgpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Tm90aWZpY2F0aW9uQ2hhbm5lbChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbkNoYW5uZWw7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb3RpZmljYXRpb25DaGFubmVsR3JvdXAoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb25DaGFubmVsR3JvdXA7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb3RpZmljYXRpb25DaGFubmVsR3JvdXBzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb3RpZmljYXRpb25DaGFubmVscygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Tm90aWZpY2F0aW9uUG9saWN5KClMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uTWFuYWdlciRQb2xpY3k7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05vdGlmaWNhdGlvbkxpc3RlbmVyQWNjZXNzR3JhbnRlZChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVoiIHNpbmNlPSIyNyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTm90aWZpY2F0aW9uUG9saWN5QWNjZXNzR3JhbnRlZCgpWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5KElMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5KExqYXZhL2xhbmcvU3RyaW5nO0lMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uOylWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUF1dG9tYXRpY1plblJ1bGUoTGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludGVycnVwdGlvbkZpbHRlcihJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5vdGlmaWNhdGlvblBvbGljeShMYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uTWFuYWdlciRQb2xpY3k7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUF1dG9tYXRpY1plblJ1bGUoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvYXBwL0F1dG9tYXRpY1plblJ1bGU7KVoiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FQUF9CTE9DS19TVEFURV9DSEFOR0VEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9JTlRFUlJVUFRJT05fRklMVEVSX0NIQU5HRUQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX05PVElGSUNBVElPTl9DSEFOTkVMX0JMT0NLX1NUQVRFX0NIQU5HRUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX05PVElGSUNBVElPTl9DSEFOTkVMX0dST1VQX0JMT0NLX1NUQVRFX0NIQU5HRUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX05PVElGSUNBVElPTl9QT0xJQ1lfQUNDRVNTX0dSQU5URURfQ0hBTkdFRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTk9USUZJQ0FUSU9OX1BPTElDWV9DSEFOR0VEIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0JMT0NLRURfU1RBVEUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTk9USUZJQ0FUSU9OX0NIQU5ORUxfR1JPVVBfSUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTk9USUZJQ0FUSU9OX0NIQU5ORUxfSUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iSU1QT1JUQU5DRV9ERUZBVUxUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IklNUE9SVEFOQ0VfSElHSCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTkNFX0xPVyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTkNFX01BWCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTkNFX01JTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTkNFX05PTkUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iSU1QT1JUQU5DRV9VTlNQRUNJRklFRCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlJVUFRJT05fRklMVEVSX0FMQVJNUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlJVUFRJT05fRklMVEVSX0FMTCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlJVUFRJT05fRklMVEVSX05PTkUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iSU5URVJSVVBUSU9OX0ZJTFRFUl9QUklPUklUWSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlJVUFRJT05fRklMVEVSX1VOS05PV04iIHNpbmNlPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbk1hbmFnZXIkUG9saWN5IiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InByaW9yaXR5Q2F0ZWdvcmllc1RvU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJpb3JpdHlTZW5kZXJzVG9TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwcmVzc2VkRWZmZWN0c1RvU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlBSSU9SSVRZX0NBVEVHT1JZX0FMQVJNUyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUklPUklUWV9DQVRFR09SWV9DQUxMUyIvPgotCQk8ZmllbGQgbmFtZT0iUFJJT1JJVFlfQ0FURUdPUllfRVZFTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklPUklUWV9DQVRFR09SWV9NRURJQSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUklPUklUWV9DQVRFR09SWV9NRVNTQUdFUyIvPgotCQk8ZmllbGQgbmFtZT0iUFJJT1JJVFlfQ0FURUdPUllfUkVNSU5ERVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklPUklUWV9DQVRFR09SWV9SRVBFQVRfQ0FMTEVSUyIvPgotCQk8ZmllbGQgbmFtZT0iUFJJT1JJVFlfQ0FURUdPUllfU1lTVEVNIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlBSSU9SSVRZX1NFTkRFUlNfQU5ZIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklPUklUWV9TRU5ERVJTX0NPTlRBQ1RTIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklPUklUWV9TRU5ERVJTX1NUQVJSRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBSRVNTRURfRUZGRUNUX0FNQklFTlQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU1VQUFJFU1NFRF9FRkZFQ1RfQkFER0UiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU1VQUFJFU1NFRF9FRkZFQ1RfRlVMTF9TQ1JFRU5fSU5URU5UIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBQUkVTU0VEX0VGRkVDVF9OT1RJRklDQVRJT05fTElTVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBQUkVTU0VEX0VGRkVDVF9QRUVLIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PRkYiIHNpbmNlPSIyNCIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTiIgc2luY2U9IjI0IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU1VQUFJFU1NFRF9FRkZFQ1RfU1RBVFVTX0JBUiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwcmlvcml0eUNhbGxTZW5kZXJzIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcmlvcml0eUNhdGVnb3JpZXMiLz4KLQkJPGZpZWxkIG5hbWU9InByaW9yaXR5TWVzc2FnZVNlbmRlcnMiLz4KLQkJPGZpZWxkIG5hbWU9InN1cHByZXNzZWRWaXN1YWxFZmZlY3RzIiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9JQmluZGVyO0xqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWwoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3Rpdml0aWVzKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJW0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0kpTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3Rpdml0aWVzKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJW0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0lMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZpdHkoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lMYW5kcm9pZC9jb250ZW50L0ludGVudDtJKUxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2aXR5KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7SUxhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCcm9hZGNhc3QoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lMYW5kcm9pZC9jb250ZW50L0ludGVudDtJKUxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENyZWF0b3JQYWNrYWdlKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENyZWF0b3JVaWQoKUkiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENyZWF0b3JVc2VySGFuZGxlKClMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOyIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9yZWdyb3VuZFNlcnZpY2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lMYW5kcm9pZC9jb250ZW50L0ludGVudDtJKUxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZW50U2VuZGVyKClMYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlcjsiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VydmljZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0kpTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFyZ2V0UGFja2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRQZW5kaW5nSW50ZW50T3JOdWxsRnJvbVBhcmNlbChMYW5kcm9pZC9vcy9QYXJjZWw7KUxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmQoSUxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50JE9uRmluaXNoZWQ7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudCRPbkZpbmlzaGVkO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQkT25GaW5pc2hlZDtMYW5kcm9pZC9vcy9IYW5kbGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQkT25GaW5pc2hlZDtMYW5kcm9pZC9vcy9IYW5kbGVyO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVQZW5kaW5nSW50ZW50T3JOdWxsVG9QYXJjZWwoTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7TGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0NBTkNFTF9DVVJSRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0lNTVVUQUJMRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX05PX0NSRUFURSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19PTkVfU0hPVCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19VUERBVEVfQ1VSUkVOVCIgc2luY2U9IjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50JENhbmNlbGVkRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdXRpbC9BbmRyb2lkRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvRXhjZXB0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudCRPbkZpbmlzaGVkIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlbmRGaW5pc2hlZChMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDtMYW5kcm9pZC9jb250ZW50L0ludGVudDtJTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvUGVyc29uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJY29uKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9JY29uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXJpKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JvdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW1wb3J0YW50KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9CdWlsZGVyKClMYW5kcm9pZC9hcHAvUGVyc29uJEJ1aWxkZXI7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvUGVyc29uJEJ1aWxkZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvYXBwL1BlcnNvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCb3QoWilMYW5kcm9pZC9hcHAvUGVyc29uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWNvbihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9JY29uOylMYW5kcm9pZC9hcHAvUGVyc29uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW1wb3J0YW50KFopTGFuZHJvaWQvYXBwL1BlcnNvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEtleShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvYXBwL1BlcnNvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5hbWUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9QZXJzb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVcmkoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9QZXJzb24kQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9QaWN0dXJlSW5QaWN0dXJlUGFyYW1zIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1BpY3R1cmVJblBpY3R1cmVQYXJhbXMkQnVpbGRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9hcHAvUGljdHVyZUluUGljdHVyZVBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBY3Rpb25zKExqYXZhL3V0aWwvTGlzdDspTGFuZHJvaWQvYXBwL1BpY3R1cmVJblBpY3R1cmVQYXJhbXMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBc3BlY3RSYXRpbyhMYW5kcm9pZC91dGlsL1JhdGlvbmFsOylMYW5kcm9pZC9hcHAvUGljdHVyZUluUGljdHVyZVBhcmFtcyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNvdXJjZVJlY3RIaW50KExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KUxhbmRyb2lkL2FwcC9QaWN0dXJlSW5QaWN0dXJlUGFyYW1zJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvUHJlc2VudGF0aW9uIiBzaW5jZT0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9EaWFsb2ciLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3ZpZXcvRGlzcGxheTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdmlldy9EaXNwbGF5O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXkoKUxhbmRyb2lkL3ZpZXcvRGlzcGxheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNvdXJjZXMoKUxhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRpc3BsYXlDaGFuZ2VkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EaXNwbGF5UmVtb3ZlZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1Byb2dyZXNzRGlhbG9nIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9BbGVydERpYWxvZyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb2dyZXNzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vjb25kYXJ5UHJvZ3Jlc3MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmNyZW1lbnRQcm9ncmVzc0J5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImluY3JlbWVudFNlY29uZGFyeVByb2dyZXNzQnkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbmRldGVybWluYXRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5kZXRlcm1pbmF0ZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbmRldGVybWluYXRlRHJhd2FibGUoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXgoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvZ3Jlc3MoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvZ3Jlc3NEcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb2dyZXNzTnVtYmVyRm9ybWF0KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9ncmVzc1BlcmNlbnRGb3JtYXQoTGphdmEvdGV4dC9OdW1iZXJGb3JtYXQ7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb2dyZXNzU3R5bGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2Vjb25kYXJ5UHJvZ3Jlc3MoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdyhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9Qcm9ncmVzc0RpYWxvZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtaKUxhbmRyb2lkL2FwcC9Qcm9ncmVzc0RpYWxvZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtaWilMYW5kcm9pZC9hcHAvUHJvZ3Jlc3NEaWFsb2c7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdyhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7WlpMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNhbmNlbExpc3RlbmVyOylMYW5kcm9pZC9hcHAvUHJvZ3Jlc3NEaWFsb2c7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVFlMRV9IT1JJWk9OVEFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFlMRV9TUElOTkVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvUmVtb3RlQWN0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9JY29uO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmUoKUxhbmRyb2lkL2FwcC9SZW1vdGVBY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZHVtcChMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9QcmludFdyaXRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGlvbkludGVudCgpTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudERlc2NyaXB0aW9uKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJY29uKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9JY29uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpdGxlKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNob3VsZFNob3dJY29uKFopViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdWxkU2hvd0ljb24oKVoiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1JlbW90ZUlucHV0IiBzaW5jZT0iMjAiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGREYXRhUmVzdWx0VG9JbnRlbnQoTGFuZHJvaWQvYXBwL1JlbW90ZUlucHV0O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xqYXZhL3V0aWwvTWFwOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSZXN1bHRzVG9JbnRlbnQoW0xhbmRyb2lkL2FwcC9SZW1vdGVJbnB1dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxvd0ZyZWVGb3JtSW5wdXQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxvd2VkRGF0YVR5cGVzKClMamF2YS91dGlsL1NldDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENob2ljZXMoKVtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhUmVzdWx0c0Zyb21JbnRlbnQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvTWFwOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFiZWwoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3VsdEtleSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzdWx0c0Zyb21JbnRlbnQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXN1bHRzU291cmNlKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RhdGFPbmx5KClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXN1bHRzU291cmNlKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0kpViIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9SRVNVTFRTX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVFNfQ0xJUF9MQUJFTCIvPgotCQk8ZmllbGQgbmFtZT0iU09VUkNFX0NIT0lDRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTT1VSQ0VfRlJFRV9GT1JNX0lOUFVUIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9SZW1vdGVJbnB1dCRCdWlsZGVyIiBzaW5jZT0iMjAiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRXh0cmFzKExhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvYXBwL1JlbW90ZUlucHV0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL2FwcC9SZW1vdGVJbnB1dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGxvd0RhdGFUeXBlKExqYXZhL2xhbmcvU3RyaW5nO1opTGFuZHJvaWQvYXBwL1JlbW90ZUlucHV0JEJ1aWxkZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGxvd0ZyZWVGb3JtSW5wdXQoWilMYW5kcm9pZC9hcHAvUmVtb3RlSW5wdXQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaG9pY2VzKFtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvYXBwL1JlbW90ZUlucHV0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGFiZWwoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2FwcC9SZW1vdGVJbnB1dCRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1NlYXJjaE1hbmFnZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlJE9uQ2FuY2VsTGlzdGVuZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkRpc21pc3NMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdsb2JhbFNlYXJjaEFjdGl2aXR5KClMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWFyY2hhYmxlSW5mbyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUxhbmRyb2lkL2FwcC9TZWFyY2hhYmxlSW5mbzsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VhcmNoYWJsZXNJbkdsb2JhbFNlYXJjaCgpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkNhbmNlbExpc3RlbmVyKExhbmRyb2lkL2FwcC9TZWFyY2hNYW5hZ2VyJE9uQ2FuY2VsTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkRpc21pc3NMaXN0ZW5lcihMYW5kcm9pZC9hcHAvU2VhcmNoTWFuYWdlciRPbkRpc21pc3NMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0U2VhcmNoKExqYXZhL2xhbmcvU3RyaW5nO1pMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGFuZHJvaWQvb3MvQnVuZGxlO1opViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BTZWFyY2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmlnZ2VyU2VhcmNoKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fS0VZIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTVNHIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUFBfREFUQSIvPgotCQk8ZmllbGQgbmFtZT0iQ1VSU09SX0VYVFJBX0tFWV9JTl9QUk9HUkVTUyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0RBVEFfS0VZIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTkVXX1NFQVJDSCIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TRUxFQ1RfUVVFUlkiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9XRUJfU0VBUkNIX1BFTkRJTkdJTlRFTlQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19RVUVSWV9SRUZJTkVNRU5UIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVOVF9BQ1RJT05fR0xPQkFMX1NFQVJDSCIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVOVF9BQ1RJT05fU0VBUkNIQUJMRVNfQ0hBTkdFRCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVOVF9BQ1RJT05fU0VBUkNIX1NFVFRJTkdTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iSU5URU5UX0FDVElPTl9TRUFSQ0hfU0VUVElOR1NfQ0hBTkdFRCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVOVF9BQ1RJT05fV0VCX1NFQVJDSF9TRVRUSU5HUyIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVOVF9HTE9CQUxfU0VBUkNIX0FDVElWSVRZX0NIQU5HRUQiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTUVOVV9LRVkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FTlVfS0VZQ09ERSIvPgotCQk8ZmllbGQgbmFtZT0iUVVFUlkiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUQ1VUX01JTUVfVFlQRSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVR0dFU1RfQ09MVU1OX0FVRElPX0NIQU5ORUxfQ09ORklHIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNVR0dFU1RfQ09MVU1OX0NPTlRFTlRfVFlQRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX0NPTFVNTl9EVVJBVElPTiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX0NPTFVNTl9GTEFHUyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX0NPTFVNTl9GT1JNQVQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVR0dFU1RfQ09MVU1OX0lDT05fMSIvPgotCQk8ZmllbGQgbmFtZT0iU1VHR0VTVF9DT0xVTU5fSUNPTl8yIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX0NPTFVNTl9JTlRFTlRfQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX0NPTFVNTl9JTlRFTlRfREFUQSIvPgotCQk8ZmllbGQgbmFtZT0iU1VHR0VTVF9DT0xVTU5fSU5URU5UX0RBVEFfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVR0dFU1RfQ09MVU1OX0lOVEVOVF9FWFRSQV9EQVRBIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iU1VHR0VTVF9DT0xVTU5fSVNfTElWRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX0NPTFVNTl9MQVNUX0FDQ0VTU19ISU5UIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVR0dFU1RfQ09MVU1OX1BST0RVQ1RJT05fWUVBUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX0NPTFVNTl9QVVJDSEFTRV9QUklDRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX0NPTFVNTl9RVUVSWSIvPgotCQk8ZmllbGQgbmFtZT0iU1VHR0VTVF9DT0xVTU5fUkFUSU5HX1NDT1JFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNVR0dFU1RfQ09MVU1OX1JBVElOR19TVFlMRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX0NPTFVNTl9SRU5UQUxfUFJJQ0UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iU1VHR0VTVF9DT0xVTU5fUkVTVUxUX0NBUkRfSU1BR0UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iU1VHR0VTVF9DT0xVTU5fU0hPUlRDVVRfSUQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX0NPTFVNTl9TUElOTkVSX1dISUxFX1JFRlJFU0hJTkciIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX0NPTFVNTl9URVhUXzEiLz4KLQkJPGZpZWxkIG5hbWU9IlNVR0dFU1RfQ09MVU1OX1RFWFRfMiIvPgotCQk8ZmllbGQgbmFtZT0iU1VHR0VTVF9DT0xVTU5fVEVYVF8yX1VSTCIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNVR0dFU1RfQ09MVU1OX1ZJREVPX0hFSUdIVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX0NPTFVNTl9WSURFT19XSURUSCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX01JTUVfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iU1VHR0VTVF9ORVZFUl9NQUtFX1NIT1JUQ1VUIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iU1VHR0VTVF9QQVJBTUVURVJfTElNSVQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX1VSSV9QQVRIX1FVRVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUX1VSSV9QQVRIX1NIT1JUQ1VUIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVVNFUl9RVUVSWSIgc2luY2U9IjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9TZWFyY2hNYW5hZ2VyJE9uQ2FuY2VsTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FuY2VsKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvU2VhcmNoTWFuYWdlciRPbkRpc21pc3NMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25EaXNtaXNzKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvU2VhcmNoYWJsZUluZm8iIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXV0b1VybERldGVjdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpbnRJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEltZU9wdGlvbnMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dFR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWFyY2hBY3Rpdml0eSgpTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNldHRpbmdzRGVzY3JpcHRpb25JZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1Z2dlc3RBdXRob3JpdHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1Z2dlc3RJbnRlbnRBY3Rpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1Z2dlc3RJbnRlbnREYXRhKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWdnZXN0UGFja2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VnZ2VzdFBhdGgoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1Z2dlc3RTZWxlY3Rpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1Z2dlc3RUaHJlc2hvbGQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2ljZUxhbmd1YWdlSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2ljZUxhbmd1YWdlTW9kZUlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vm9pY2VNYXhSZXN1bHRzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vm9pY2VQcm9tcHRUZXh0SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2ljZVNlYXJjaEVuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2ljZVNlYXJjaExhdW5jaFJlY29nbml6ZXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2ljZVNlYXJjaExhdW5jaFdlYlNlYXJjaCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5QWZ0ZXJaZXJvUmVzdWx0cygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNob3VsZEluY2x1ZGVJbkdsb2JhbFNlYXJjaCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNob3VsZFJld3JpdGVRdWVyeUZyb21EYXRhKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdWxkUmV3cml0ZVF1ZXJ5RnJvbVRleHQoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9TZXJ2aWNlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvY29udGVudC9Db250ZXh0V3JhcHBlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50Q2FsbGJhY2tzIiByZW1vdmVkPSIxNCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50Q2FsbGJhY2tzMiIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHVtcChMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtMamF2YS9pby9QcmludFdyaXRlcjtbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvbigpTGFuZHJvaWQvYXBwL0FwcGxpY2F0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQmluZChMYW5kcm9pZC9jb250ZW50L0ludGVudDspTGFuZHJvaWQvb3MvSUJpbmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGVzdHJveSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmViaW5kKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGFydChMYW5kcm9pZC9jb250ZW50L0ludGVudDtJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGFydENvbW1hbmQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7SUkpSSIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRhc2tSZW1vdmVkKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVuYmluZChMYW5kcm9pZC9jb250ZW50L0ludGVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvcmVncm91bmQoWilWIiByZW1vdmVkPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0Rm9yZWdyb3VuZChJTGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbjspViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wRm9yZWdyb3VuZChJKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BGb3JlZ3JvdW5kKFopViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wU2VsZigpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BTZWxmKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BTZWxmUmVzdWx0KEkpWiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBUlRfQ09OVElOVUFUSU9OX01BU0siIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFSVF9GTEFHX1JFREVMSVZFUlkiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFSVF9GTEFHX1JFVFJZIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBUlRfTk9UX1NUSUNLWSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVJUX1JFREVMSVZFUl9JTlRFTlQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFSVF9TVElDS1kiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFSVF9TVElDS1lfQ09NUEFUSUJJTElUWSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUT1BfRk9SRUdST1VORF9ERVRBQ0giIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iU1RPUF9GT1JFR1JPVU5EX1JFTU9WRSIgc2luY2U9IjI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvU2hhcmVkRWxlbWVudENhbGxiYWNrIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYXB0dXJlU2hhcmVkRWxlbWVudFNuYXBzaG90KExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC9ncmFwaGljcy9NYXRyaXg7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdEY7KUxhbmRyb2lkL29zL1BhcmNlbGFibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVTbmFwc2hvdFZpZXcoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL29zL1BhcmNlbGFibGU7KUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1hcFNoYXJlZEVsZW1lbnRzKExqYXZhL3V0aWwvTGlzdDtMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVqZWN0U2hhcmVkRWxlbWVudHMoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TaGFyZWRFbGVtZW50RW5kKExqYXZhL3V0aWwvTGlzdDtMamF2YS91dGlsL0xpc3Q7TGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TaGFyZWRFbGVtZW50U3RhcnQoTGphdmEvdXRpbC9MaXN0O0xqYXZhL3V0aWwvTGlzdDtMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNoYXJlZEVsZW1lbnRzQXJyaXZlZChMamF2YS91dGlsL0xpc3Q7TGphdmEvdXRpbC9MaXN0O0xhbmRyb2lkL2FwcC9TaGFyZWRFbGVtZW50Q2FsbGJhY2skT25TaGFyZWRFbGVtZW50c1JlYWR5TGlzdGVuZXI7KVYiIHNpbmNlPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1NoYXJlZEVsZW1lbnRDYWxsYmFjayRPblNoYXJlZEVsZW1lbnRzUmVhZHlMaXN0ZW5lciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2hhcmVkRWxlbWVudHNSZWFkeSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1RhYkFjdGl2aXR5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMTMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9BY3Rpdml0eUdyb3VwIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFiSG9zdCgpTGFuZHJvaWQvd2lkZ2V0L1RhYkhvc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFiV2lkZ2V0KClMYW5kcm9pZC93aWRnZXQvVGFiV2lkZ2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHRUYWIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVmYXVsdFRhYihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1Rhc2tTdGFja0J1aWxkZXIiIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTmV4dEludGVudChMYW5kcm9pZC9jb250ZW50L0ludGVudDspTGFuZHJvaWQvYXBwL1Rhc2tTdGFja0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTmV4dEludGVudFdpdGhQYXJlbnRTdGFjayhMYW5kcm9pZC9jb250ZW50L0ludGVudDspTGFuZHJvaWQvYXBwL1Rhc2tTdGFja0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUGFyZW50U3RhY2soTGFuZHJvaWQvYXBwL0FjdGl2aXR5OylMYW5kcm9pZC9hcHAvVGFza1N0YWNrQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRQYXJlbnRTdGFjayhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUxhbmRyb2lkL2FwcC9UYXNrU3RhY2tCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFBhcmVudFN0YWNrKExqYXZhL2xhbmcvQ2xhc3M7KUxhbmRyb2lkL2FwcC9UYXNrU3RhY2tCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxhbmRyb2lkL2FwcC9UYXNrU3RhY2tCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVkaXRJbnRlbnRBdChJKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVudENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZW50cygpW0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlbmRpbmdJbnRlbnQoSUkpTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVuZGluZ0ludGVudChJSUxhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBY3Rpdml0aWVzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBY3Rpdml0aWVzKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1RpbWVQaWNrZXJEaWFsb2ciIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvQWxlcnREaWFsb2ciLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNsaWNrTGlzdGVuZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvVGltZVBpY2tlciRPblRpbWVDaGFuZ2VkTGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lMYW5kcm9pZC9hcHAvVGltZVBpY2tlckRpYWxvZyRPblRpbWVTZXRMaXN0ZW5lcjtJSVopViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvYXBwL1RpbWVQaWNrZXJEaWFsb2ckT25UaW1lU2V0TGlzdGVuZXI7SUlaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVUaW1lKElJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9UaW1lUGlja2VyRGlhbG9nJE9uVGltZVNldExpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRpbWVTZXQoTGFuZHJvaWQvd2lkZ2V0L1RpbWVQaWNrZXI7SUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1VpQXV0b21hdGlvbiIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyV2luZG93QW5pbWF0aW9uRnJhbWVTdGF0cygpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJXaW5kb3dDb250ZW50RnJhbWVTdGF0cyhJKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWN1dGVBbmRXYWl0Rm9yRXZlbnQoTGphdmEvbGFuZy9SdW5uYWJsZTtMYW5kcm9pZC9hcHAvVWlBdXRvbWF0aW9uJEFjY2Vzc2liaWxpdHlFdmVudEZpbHRlcjtKKUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5RXZlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZVNoZWxsQ29tbWFuZChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kRm9jdXMoSSlMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um9vdEluQWN0aXZlV2luZG93KClMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZpY2VJbmZvKClMYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2luZG93QW5pbWF0aW9uRnJhbWVTdGF0cygpTGFuZHJvaWQvdmlldy9XaW5kb3dBbmltYXRpb25GcmFtZVN0YXRzOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2luZG93Q29udGVudEZyYW1lU3RhdHMoSSlMYW5kcm9pZC92aWV3L1dpbmRvd0NvbnRlbnRGcmFtZVN0YXRzOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2luZG93cygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ3JhbnRSdW50aW1lUGVybWlzc2lvbihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ3JhbnRSdW50aW1lUGVybWlzc2lvbkFzVXNlcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmplY3RJbnB1dEV2ZW50KExhbmRyb2lkL3ZpZXcvSW5wdXRFdmVudDtaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJmb3JtR2xvYmFsQWN0aW9uKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJldm9rZVJ1bnRpbWVQZXJtaXNzaW9uKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXZva2VSdW50aW1lUGVybWlzc2lvbkFzVXNlcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkFjY2Vzc2liaWxpdHlFdmVudExpc3RlbmVyKExhbmRyb2lkL2FwcC9VaUF1dG9tYXRpb24kT25BY2Nlc3NpYmlsaXR5RXZlbnRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJvdGF0aW9uKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJ1bkFzTW9ua2V5KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlcnZpY2VJbmZvKExhbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0FjY2Vzc2liaWxpdHlTZXJ2aWNlSW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9InRha2VTY3JlZW5zaG90KClMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2FpdEZvcklkbGUoSkopViIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19ET05UX1NVUFBSRVNTX0FDQ0VTU0lCSUxJVFlfU0VSVklDRVMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iUk9UQVRJT05fRlJFRVpFXzAiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVEFUSU9OX0ZSRUVaRV8xODAiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVEFUSU9OX0ZSRUVaRV8yNzAiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVEFUSU9OX0ZSRUVaRV85MCIvPgotCQk8ZmllbGQgbmFtZT0iUk9UQVRJT05fRlJFRVpFX0NVUlJFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVEFUSU9OX1VORlJFRVpFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvVWlBdXRvbWF0aW9uJEFjY2Vzc2liaWxpdHlFdmVudEZpbHRlciIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdChMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUV2ZW50OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvVWlBdXRvbWF0aW9uJE9uQWNjZXNzaWJpbGl0eUV2ZW50TGlzdGVuZXIiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFjY2Vzc2liaWxpdHlFdmVudChMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUV2ZW50OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvVWlNb2RlTWFuYWdlciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzYWJsZUNhck1vZGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlQ2FyTW9kZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50TW9kZVR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROaWdodE1vZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROaWdodE1vZGUoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRU5URVJfQ0FSX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9FTlRFUl9ERVNLX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9FWElUX0NBUl9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRVhJVF9ERVNLX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FCTEVfQ0FSX01PREVfR09fSE9NRSIvPgotCQk8ZmllbGQgbmFtZT0iRU5BQkxFX0NBUl9NT0RFX0FMTE9XX1NMRUVQIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQUJMRV9DQVJfTU9ERV9HT19DQVJfSE9NRSIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9OSUdIVF9BVVRPIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX05JR0hUX05PIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX05JR0hUX1lFUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1ZvaWNlSW50ZXJhY3RvciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2ZVJlcXVlc3QoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9Wb2ljZUludGVyYWN0b3IkUmVxdWVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3RpdmVSZXF1ZXN0cygpW0xhbmRyb2lkL2FwcC9Wb2ljZUludGVyYWN0b3IkUmVxdWVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJtaXRSZXF1ZXN0KExhbmRyb2lkL2FwcC9Wb2ljZUludGVyYWN0b3IkUmVxdWVzdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1Ym1pdFJlcXVlc3QoTGFuZHJvaWQvYXBwL1ZvaWNlSW50ZXJhY3RvciRSZXF1ZXN0O0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNDb21tYW5kcyhbTGphdmEvbGFuZy9TdHJpbmc7KVtaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvVm9pY2VJbnRlcmFjdG9yJEFib3J0Vm9pY2VSZXF1ZXN0IiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9Wb2ljZUludGVyYWN0b3IkUmVxdWVzdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9hcHAvVm9pY2VJbnRlcmFjdG9yJFByb21wdDtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFib3J0UmVzdWx0KExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1ZvaWNlSW50ZXJhY3RvciRDb21tYW5kUmVxdWVzdCIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvVm9pY2VJbnRlcmFjdG9yJFJlcXVlc3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db21tYW5kUmVzdWx0KFpMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9Wb2ljZUludGVyYWN0b3IkQ29tcGxldGVWb2ljZVJlcXVlc3QiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1ZvaWNlSW50ZXJhY3RvciRSZXF1ZXN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2FwcC9Wb2ljZUludGVyYWN0b3IkUHJvbXB0O0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29tcGxldGVSZXN1bHQoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvVm9pY2VJbnRlcmFjdG9yJENvbmZpcm1hdGlvblJlcXVlc3QiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1ZvaWNlSW50ZXJhY3RvciRSZXF1ZXN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2FwcC9Wb2ljZUludGVyYWN0b3IkUHJvbXB0O0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29uZmlybWF0aW9uUmVzdWx0KFpMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9Wb2ljZUludGVyYWN0b3IkUGlja09wdGlvblJlcXVlc3QiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1ZvaWNlSW50ZXJhY3RvciRSZXF1ZXN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2FwcC9Wb2ljZUludGVyYWN0b3IkUHJvbXB0O1tMYW5kcm9pZC9hcHAvVm9pY2VJbnRlcmFjdG9yJFBpY2tPcHRpb25SZXF1ZXN0JE9wdGlvbjtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBpY2tPcHRpb25SZXN1bHQoWltMYW5kcm9pZC9hcHAvVm9pY2VJbnRlcmFjdG9yJFBpY2tPcHRpb25SZXF1ZXN0JE9wdGlvbjtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9Wb2ljZUludGVyYWN0b3IkUGlja09wdGlvblJlcXVlc3QkT3B0aW9uIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTeW5vbnltKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9hcHAvVm9pY2VJbnRlcmFjdG9yJFBpY2tPcHRpb25SZXF1ZXN0JE9wdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3VudFN5bm9ueW1zKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lub255bUF0KEkpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXh0cmFzKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1ZvaWNlSW50ZXJhY3RvciRQcm9tcHQiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvdW50Vm9pY2VQcm9tcHRzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmlzdWFsUHJvbXB0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2ljZVByb21wdEF0KEkpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvVm9pY2VJbnRlcmFjdG9yJFJlcXVlc3QiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWwoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3Rpdml0eSgpTGFuZHJvaWQvYXBwL0FjdGl2aXR5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRleHQoKUxhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF0dGFjaGVkKExhbmRyb2lkL2FwcC9BY3Rpdml0eTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FuY2VsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EZXRhY2hlZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1dhbGxwYXBlckNvbG9ycyIgc2luY2U9IjI3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3I7TGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3I7TGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbUJpdG1hcChMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KUxhbmRyb2lkL2FwcC9XYWxscGFwZXJDb2xvcnM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbURyYXdhYmxlKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylMYW5kcm9pZC9hcHAvV2FsbHBhcGVyQ29sb3JzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1hcnlDb2xvcigpTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vjb25kYXJ5Q29sb3IoKUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRlcnRpYXJ5Q29sb3IoKUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1dhbGxwYXBlckluZm8iIHNpbmNlPSI3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2NvbnRlbnQvcG0vUmVzb2x2ZUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExhbmRyb2lkL3V0aWwvUHJpbnRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBvbmVudCgpTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlSW5mbygpTGFuZHJvaWQvY29udGVudC9wbS9TZXJ2aWNlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2V0dGluZ3NBY3Rpdml0eSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvd01ldGFkYXRhSW5QcmV2aWV3KClaIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkQXV0aG9yKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRDb250ZXh0RGVzY3JpcHRpb24oTGFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlTWFuYWdlcjspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkQ29udGV4dFVyaShMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyOylMYW5kcm9pZC9uZXQvVXJpOyIgc2luY2U9IjI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZERlc2NyaXB0aW9uKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRJY29uKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRMYWJlbChMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkVGh1bWJuYWlsKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1dhbGxwYXBlck1hbmFnZXIiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE9uQ29sb3JzQ2hhbmdlZExpc3RlbmVyKExhbmRyb2lkL2FwcC9XYWxscGFwZXJNYW5hZ2VyJE9uQ29sb3JzQ2hhbmdlZExpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiIHNpbmNlPSIyNyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoSSlWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcldhbGxwYXBlcigpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJXYWxscGFwZXJPZmZzZXRzKExhbmRyb2lkL29zL0lCaW5kZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JnZXRMb2FkZWRXYWxscGFwZXIoKVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1aWx0SW5EcmF3YWJsZSgpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCdWlsdEluRHJhd2FibGUoSSlMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1aWx0SW5EcmF3YWJsZShJSVpGRilMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1aWx0SW5EcmF3YWJsZShJSVpGRkkpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDcm9wQW5kU2V0V2FsbHBhcGVySW50ZW50KExhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzaXJlZE1pbmltdW1IZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNpcmVkTWluaW11bVdpZHRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJhd2FibGUoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZhc3REcmF3YWJsZSgpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC9hcHAvV2FsbHBhcGVyTWFuYWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXYWxscGFwZXJDb2xvcnMoSSlMYW5kcm9pZC9hcHAvV2FsbHBhcGVyQ29sb3JzOyIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2FsbHBhcGVyRmlsZShJKUxhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2FsbHBhcGVySWQoSSlJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXYWxscGFwZXJJbmZvKClMYW5kcm9pZC9hcHAvV2FsbHBhcGVySW5mbzsiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzUmVzb3VyY2VXYWxscGFwZXIoSSlaIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NldFdhbGxwYXBlckFsbG93ZWQoKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzV2FsbHBhcGVyU3VwcG9ydGVkKClaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZWVrRHJhd2FibGUoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InBlZWtGYXN0RHJhd2FibGUoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU9uQ29sb3JzQ2hhbmdlZExpc3RlbmVyKExhbmRyb2lkL2FwcC9XYWxscGFwZXJNYW5hZ2VyJE9uQ29sb3JzQ2hhbmdlZExpc3RlbmVyOylWIiBzaW5jZT0iMjciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kV2FsbHBhcGVyQ29tbWFuZChMYW5kcm9pZC9vcy9JQmluZGVyO0xqYXZhL2xhbmcvU3RyaW5nO0lJSUxhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCaXRtYXAoTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qml0bWFwKExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtMYW5kcm9pZC9ncmFwaGljcy9SZWN0O1opSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qml0bWFwKExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtMYW5kcm9pZC9ncmFwaGljcy9SZWN0O1pJKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXlQYWRkaW5nKExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc291cmNlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc291cmNlKElJKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cmVhbShMamF2YS9pby9JbnB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cmVhbShMamF2YS9pby9JbnB1dFN0cmVhbTtMYW5kcm9pZC9ncmFwaGljcy9SZWN0O1opSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RyZWFtKExqYXZhL2lvL0lucHV0U3RyZWFtO0xhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7WkkpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2FsbHBhcGVyT2Zmc2V0U3RlcHMoRkYpViIgc2luY2U9IjciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXYWxscGFwZXJPZmZzZXRzKExhbmRyb2lkL29zL0lCaW5kZXI7RkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InN1Z2dlc3REZXNpcmVkRGltZW5zaW9ucyhJSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ0hBTkdFX0xJVkVfV0FMTFBBUEVSIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DUk9QX0FORF9TRVRfV0FMTFBBUEVSIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9MSVZFX1dBTExQQVBFUl9DSE9PU0VSIiBzaW5jZT0iNyIvPgotCQk8ZmllbGQgbmFtZT0iQ09NTUFORF9EUk9QIiBzaW5jZT0iNyIvPgotCQk8ZmllbGQgbmFtZT0iQ09NTUFORF9TRUNPTkRBUllfVEFQIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTU1BTkRfVEFQIiBzaW5jZT0iNyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTElWRV9XQUxMUEFQRVJfQ09NUE9ORU5UIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfTE9DSyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NZU1RFTSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXQUxMUEFQRVJfUFJFVklFV19NRVRBX0RBVEEiIHNpbmNlPSIxMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL1dhbGxwYXBlck1hbmFnZXIkT25Db2xvcnNDaGFuZ2VkTGlzdGVuZXIiIHNpbmNlPSIyNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbG9yc0NoYW5nZWQoTGFuZHJvaWQvYXBwL1dhbGxwYXBlckNvbG9ycztJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9hZG1pbi9Db25uZWN0RXZlbnQiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL2FkbWluL05ldHdvcmtFdmVudCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmV0QWRkcmVzcygpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvcnQoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9hZG1pbi9EZXZpY2VBZG1pbkluZm8iIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2NvbnRlbnQvcG0vUmVzb2x2ZUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExhbmRyb2lkL3V0aWwvUHJpbnRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2aXR5SW5mbygpTGFuZHJvaWQvY29udGVudC9wbS9BY3Rpdml0eUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tcG9uZW50KClMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlY2VpdmVyTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFnRm9yUG9saWN5KEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWaXNpYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZERlc2NyaXB0aW9uKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRJY29uKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRMYWJlbChMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c1RyYW5zZmVyT3duZXJzaGlwKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1c2VzUG9saWN5KEkpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iVVNFU19FTkNSWVBURURfU1RPUkFHRSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VTX1BPTElDWV9ESVNBQkxFX0NBTUVSQSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VTX1BPTElDWV9ESVNBQkxFX0tFWUdVQVJEX0ZFQVRVUkVTIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IlVTRVNfUE9MSUNZX0VYUElSRV9QQVNTV09SRCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VTX1BPTElDWV9GT1JDRV9MT0NLIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VTX1BPTElDWV9MSU1JVF9QQVNTV09SRCIvPgotCQk8ZmllbGQgbmFtZT0iVVNFU19QT0xJQ1lfUkVTRVRfUEFTU1dPUkQiLz4KLQkJPGZpZWxkIG5hbWU9IlVTRVNfUE9MSUNZX1dBVENIX0xPR0lOIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VTX1BPTElDWV9XSVBFX0RBVEEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9hZG1pbi9EZXZpY2VBZG1pblJlY2VpdmVyIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvY29udGVudC9Ccm9hZGNhc3RSZWNlaXZlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hbmFnZXIoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC9hcHAvYWRtaW4vRGV2aWNlUG9saWN5TWFuYWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaG8oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25CdWdyZXBvcnRGYWlsZWQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0kpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25CdWdyZXBvcnRTaGFyZWQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkJ1Z3JlcG9ydFNoYXJpbmdEZWNsaW5lZChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2hvb3NlUHJpdmF0ZUtleUFsaWFzKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDtJTGFuZHJvaWQvbmV0L1VyaTtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRpc2FibGVSZXF1ZXN0ZWQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRpc2FibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRW5hYmxlZChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxvY2tUYXNrTW9kZUVudGVyaW5nKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDtMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Mb2NrVGFza01vZGVFeGl0aW5nKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25OZXR3b3JrTG9nc0F2YWlsYWJsZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7SkkpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYXNzd29yZENoYW5nZWQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGFzc3dvcmRDaGFuZ2VkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBhc3N3b3JkRXhwaXJpbmcoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYXNzd29yZEV4cGlyaW5nKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBhc3N3b3JkRmFpbGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBhc3N3b3JkRmFpbGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBhc3N3b3JkU3VjY2VlZGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBhc3N3b3JkU3VjY2VlZGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByb2ZpbGVQcm92aXNpb25pbmdDb21wbGV0ZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVhZHlGb3JVc2VySW5pdGlhbGl6YXRpb24oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIiBzaW5jZT0iMjMiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZWN1cml0eUxvZ3NBdmFpbGFibGUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN5c3RlbVVwZGF0ZVBlbmRpbmcoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0opViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UcmFuc2ZlckFmZmlsaWF0ZWRQcm9maWxlT3duZXJzaGlwQ29tcGxldGUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVHJhbnNmZXJPd25lcnNoaXBDb21wbGV0ZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVXNlckFkZGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVzZXJSZW1vdmVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVzZXJTdGFydGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVzZXJTdG9wcGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVzZXJTd2l0Y2hlZChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7TGFuZHJvaWQvb3MvVXNlckhhbmRsZTspViIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fREVWSUNFX0FETUlOX0RJU0FCTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fREVWSUNFX0FETUlOX0RJU0FCTEVfUkVRVUVTVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fREVWSUNFX0FETUlOX0VOQUJMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9MT0NLX1RBU0tfRU5URVJJTkciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0xPQ0tfVEFTS19FWElUSU5HIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QQVNTV09SRF9DSEFOR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUEFTU1dPUkRfRVhQSVJJTkciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BBU1NXT1JEX0ZBSUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BBU1NXT1JEX1NVQ0NFRURFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BST0ZJTEVfUFJPVklTSU9OSU5HX0NPTVBMRVRFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkJVR1JFUE9SVF9GQUlMVVJFX0ZBSUxFRF9DT01QTEVUSU5HIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkJVR1JFUE9SVF9GQUlMVVJFX0ZJTEVfTk9fTE9OR0VSX0FWQUlMQUJMRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERVZJQ0VfQURNSU5fTUVUQV9EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9ESVNBQkxFX1dBUk5JTkciLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0xPQ0tfVEFTS19QQUNLQUdFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1RSQU5TRkVSX09XTkVSU0hJUF9BRE1JTl9FWFRSQVNfQlVORExFIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9hZG1pbi9EZXZpY2VBZG1pblNlcnZpY2UiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9hZG1pbi9EZXZpY2VQb2xpY3lNYW5hZ2VyIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDcm9zc1Byb2ZpbGVJbnRlbnRGaWx0ZXIoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50RmlsdGVyO0kpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQ3Jvc3NQcm9maWxlV2lkZ2V0UHJvdmlkZXIoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRPdmVycmlkZUFwbihMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGFuZHJvaWQvdGVsZXBob255L2RhdGEvQXBuU2V0dGluZzspSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUGVyc2lzdGVudFByZWZlcnJlZEFjdGl2aXR5KExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9jb250ZW50L0ludGVudEZpbHRlcjtMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFVzZXJSZXN0cmljdGlvbihMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmREZXZpY2VBZG1pblNlcnZpY2VBc1VzZXIoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xhbmRyb2lkL2NvbnRlbnQvU2VydmljZUNvbm5lY3Rpb247SUxhbmRyb2lkL29zL1VzZXJIYW5kbGU7KVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQXBwbGljYXRpb25Vc2VyRGF0YShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yO0xhbmRyb2lkL2FwcC9hZG1pbi9EZXZpY2VQb2xpY3lNYW5hZ2VyJE9uQ2xlYXJBcHBsaWNhdGlvblVzZXJEYXRhTGlzdGVuZXI7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQ3Jvc3NQcm9maWxlSW50ZW50RmlsdGVycyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyRGV2aWNlT3duZXJBcHAoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhclBhY2thZ2VQZXJzaXN0ZW50UHJlZmVycmVkQWN0aXZpdGllcyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyUHJvZmlsZU93bmVyKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspViIgc2luY2U9IjI0IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyUmVzZXRQYXNzd29yZFRva2VuKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJVc2VyUmVzdHJpY3Rpb24oTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVBZG1pblN1cHBvcnRJbnRlbnQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQW5kSW5pdGlhbGl6ZVVzZXIoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL29zL1VzZXJIYW5kbGU7IiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjIzIiByZW1vdmVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUFuZE1hbmFnZVVzZXIoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTtJKUxhbmRyb2lkL29zL1VzZXJIYW5kbGU7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVVc2VyKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvb3MvVXNlckhhbmRsZTsiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjMiIHJlbW92ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlU3lzdGVtQXBwKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9jb250ZW50L0ludGVudDspSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlU3lzdGVtQXBwKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVLZXlQYWlyKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjO0kpTGFuZHJvaWQvc2VjdXJpdHkvQXR0ZXN0ZWRLZXlQYWlyOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNjb3VudFR5cGVzV2l0aE1hbmFnZW1lbnREaXNhYmxlZCgpW0xqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZlQWRtaW5zKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWZmaWxpYXRpb25JZHMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMamF2YS91dGlsL1NldDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsd2F5c09uVnBuUGFja2FnZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9vcy9CdW5kbGU7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9uc01hbmFnaW5nUGFja2FnZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI0IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1dG9UaW1lUmVxdWlyZWQoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpbmREZXZpY2VBZG1pblRhcmdldFVzZXJzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qmx1ZXRvb3RoQ29udGFjdFNoYXJpbmdEaXNhYmxlZChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbWVyYURpc2FibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspWiIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VydEluc3RhbGxlclBhY2thZ2UoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDcm9zc1Byb2ZpbGVDYWxsZXJJZERpc2FibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3Jvc3NQcm9maWxlQ29udGFjdHNTZWFyY2hEaXNhYmxlZChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENyb3NzUHJvZmlsZVdpZGdldFByb3ZpZGVycyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRGYWlsZWRQYXNzd29yZEF0dGVtcHRzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVsZWdhdGVQYWNrYWdlcyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlbGVnYXRlZFNjb3BlcyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZU93bmVyTG9ja1NjcmVlbkluZm8oKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5kVXNlclNlc3Npb25NZXNzYWdlKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YWxsZWRDYUNlcnRzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2VlcFVuaW5zdGFsbGVkUGFja2FnZXMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlndWFyZERpc2FibGVkRmVhdHVyZXMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylJIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NrVGFza0ZlYXR1cmVzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9ja1Rhc2tQYWNrYWdlcyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVtMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmdTdXBwb3J0TWVzc2FnZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4aW11bUZhaWxlZFBhc3N3b3Jkc0ZvcldpcGUoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4aW11bVRpbWVUb0xvY2soTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0ZXJlZERhdGFEaXNhYmxlZFBhY2thZ2VzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3JnYW5pemF0aW9uQ29sb3IoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmdhbml6YXRpb25OYW1lKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdmVycmlkZUFwbnMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJlbnRQcm9maWxlSW5zdGFuY2UoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMYW5kcm9pZC9hcHAvYWRtaW4vRGV2aWNlUG9saWN5TWFuYWdlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhc3N3b3JkRXhwaXJhdGlvbihMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhc3N3b3JkRXhwaXJhdGlvblRpbWVvdXQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylKIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXNzd29yZEhpc3RvcnlMZW5ndGgoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXNzd29yZE1heGltdW1MZW5ndGgoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFzc3dvcmRNaW5pbXVtTGVuZ3RoKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhc3N3b3JkTWluaW11bUxldHRlcnMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXNzd29yZE1pbmltdW1Mb3dlckNhc2UoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXNzd29yZE1pbmltdW1Ob25MZXR0ZXIoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXNzd29yZE1pbmltdW1OdW1lcmljKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspSSIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFzc3dvcmRNaW5pbXVtU3ltYm9scyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhc3N3b3JkTWluaW11bVVwcGVyQ2FzZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhc3N3b3JkUXVhbGl0eShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZW5kaW5nU3lzdGVtVXBkYXRlKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGFuZHJvaWQvYXBwL2FkbWluL1N5c3RlbVVwZGF0ZUluZm87IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJtaXNzaW9uR3JhbnRTdGF0ZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlcm1pc3Npb25Qb2xpY3koTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJtaXR0ZWRBY2Nlc3NpYmlsaXR5U2VydmljZXMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJtaXR0ZWRDcm9zc1Byb2ZpbGVOb3RpZmljYXRpb25MaXN0ZW5lcnMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJtaXR0ZWRJbnB1dE1ldGhvZHMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXF1aXJlZFN0cm9uZ0F1dGhUaW1lb3V0KExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspSiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NyZWVuQ2FwdHVyZURpc2FibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vjb25kYXJ5VXNlcnMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG9ydFN1cHBvcnRNZXNzYWdlKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydFVzZXJTZXNzaW9uTWVzc2FnZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RvcmFnZUVuY3J5cHRpb24oTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdG9yYWdlRW5jcnlwdGlvblN0YXR1cygpSSIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lzdGVtVXBkYXRlUG9saWN5KClMYW5kcm9pZC9hcHAvYWRtaW4vU3lzdGVtVXBkYXRlUG9saWN5OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNmZXJPd25lcnNoaXBCdW5kbGUoKUxhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJ1c3RBZ2VudENvbmZpZ3VyYXRpb24oTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlclJlc3RyaWN0aW9ucyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpZmlNYWNBZGRyZXNzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNDYUNlcnRJbnN0YWxsZWQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO1tCKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0dyYW50ZWRQb2xpY3koTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0kpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zdGFsbENhQ2VydChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7W0IpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zdGFsbEV4aXN0aW5nUGFja2FnZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9Imluc3RhbGxLZXlQYWlyKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9zZWN1cml0eS9Qcml2YXRlS2V5O0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Imluc3RhbGxLZXlQYWlyKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9zZWN1cml0eS9Qcml2YXRlS2V5O1tMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlO0xqYXZhL2xhbmcvU3RyaW5nO0kpWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zdGFsbEtleVBhaXIoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL3NlY3VyaXR5L1ByaXZhdGVLZXk7W0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7TGphdmEvbGFuZy9TdHJpbmc7WilaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FjdGl2ZVBhc3N3b3JkU3VmZmljaWVudCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWRtaW5BY3RpdmUoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBZmZpbGlhdGVkVXNlcigpWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBcHBsaWNhdGlvbkhpZGRlbihMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQmFja3VwU2VydmljZUVuYWJsZWQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NhbGxlckFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlKClaIiBzaW5jZT0iMjQiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZXZpY2VJZEF0dGVzdGF0aW9uU3VwcG9ydGVkKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RldmljZU93bmVyQXBwKExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VwaGVtZXJhbFVzZXIoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xvY2tUYXNrUGVybWl0dGVkKExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xvZ291dEVuYWJsZWQoKVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTWFuYWdlZFByb2ZpbGUoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc01hc3RlclZvbHVtZU11dGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOZXR3b3JrTG9nZ2luZ0VuYWJsZWQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc092ZXJyaWRlQXBuRW5hYmxlZChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGFja2FnZVN1c3BlbmRlZChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUHJvZmlsZU93bmVyQXBwKExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Byb3Zpc2lvbmluZ0FsbG93ZWQoTGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVzZXRQYXNzd29yZFRva2VuQWN0aXZlKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTZWN1cml0eUxvZ2dpbmdFbmFibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVbmluc3RhbGxCbG9ja2VkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVc2luZ1VuaWZpZWRQYXNzd29yZChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImxvY2tOb3coKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2NrTm93KEkpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9nb3V0VXNlcihMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InJlYm9vdChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUFjdGl2ZUFkbWluKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUNyb3NzUHJvZmlsZVdpZGdldFByb3ZpZGVyKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlS2V5UGFpcihMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU92ZXJyaWRlQXBuKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtJKVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVVzZXIoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7KVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RCdWdyZXBvcnQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldFBhc3N3b3JkKExqYXZhL2xhbmcvU3RyaW5nO0kpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0UGFzc3dvcmRXaXRoVG9rZW4oTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvU3RyaW5nO1tCSSlaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXRyaWV2ZU5ldHdvcmtMb2dzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtKKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJldHJpZXZlUHJlUmVib290U2VjdXJpdHlMb2dzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmV0cmlldmVTZWN1cml0eUxvZ3MoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBY2NvdW50TWFuYWdlbWVudERpc2FibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZztaKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFmZmlsaWF0aW9uSWRzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS91dGlsL1NldDspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWx3YXlzT25WcG5QYWNrYWdlKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZztaKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFwcGxpY2F0aW9uSGlkZGVuKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZztaKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI0IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dG9UaW1lUmVxdWlyZWQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO1opViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmFja3VwU2VydmljZUVuYWJsZWQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO1opViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qmx1ZXRvb3RoQ29udGFjdFNoYXJpbmdEaXNhYmxlZChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7WilWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYW1lcmFEaXNhYmxlZChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7WilWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDZXJ0SW5zdGFsbGVyUGFja2FnZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDcm9zc1Byb2ZpbGVDYWxsZXJJZERpc2FibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtaKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENyb3NzUHJvZmlsZUNvbnRhY3RzU2VhcmNoRGlzYWJsZWQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO1opViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVsZWdhdGVkU2NvcGVzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0xpc3Q7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldERldmljZU93bmVyTG9ja1NjcmVlbkluZm8oTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmRVc2VyU2Vzc2lvbk1lc3NhZ2UoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHbG9iYWxTZXR0aW5nKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2VlcFVuaW5zdGFsbGVkUGFja2FnZXMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL3V0aWwvTGlzdDspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2V5UGFpckNlcnRpZmljYXRlKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0xpc3Q7WilaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZXlndWFyZERpc2FibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtaKVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEtleWd1YXJkRGlzYWJsZWRGZWF0dXJlcyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7SSlWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2NrVGFza0ZlYXR1cmVzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtJKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvY2tUYXNrUGFja2FnZXMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO1tMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9nb3V0RW5hYmxlZChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7WilWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb25nU3VwcG9ydE1lc3NhZ2UoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXN0ZXJWb2x1bWVNdXRlZChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7WilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhpbXVtRmFpbGVkUGFzc3dvcmRzRm9yV2lwZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4aW11bVRpbWVUb0xvY2soTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0opViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1ldGVyZWREYXRhRGlzYWJsZWRQYWNrYWdlcyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvdXRpbC9MaXN0OylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROZXR3b3JrTG9nZ2luZ0VuYWJsZWQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO1opViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3JnYW5pemF0aW9uQ29sb3IoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0kpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3JnYW5pemF0aW9uTmFtZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE92ZXJyaWRlQXBuc0VuYWJsZWQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO1opViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFja2FnZXNTdXNwZW5kZWQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO1tMamF2YS9sYW5nL1N0cmluZztaKVtMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhc3N3b3JkRXhwaXJhdGlvblRpbWVvdXQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0opViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFzc3dvcmRIaXN0b3J5TGVuZ3RoKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtJKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhc3N3b3JkTWluaW11bUxlbmd0aChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFzc3dvcmRNaW5pbXVtTGV0dGVycyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7SSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXNzd29yZE1pbmltdW1Mb3dlckNhc2UoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0kpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFzc3dvcmRNaW5pbXVtTm9uTGV0dGVyKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtJKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhc3N3b3JkTWluaW11bU51bWVyaWMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0kpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFzc3dvcmRNaW5pbXVtU3ltYm9scyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7SSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXNzd29yZE1pbmltdW1VcHBlckNhc2UoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0kpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFzc3dvcmRRdWFsaXR5KExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQZXJtaXNzaW9uR3JhbnRTdGF0ZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SSlaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQZXJtaXNzaW9uUG9saWN5KExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBlcm1pdHRlZEFjY2Vzc2liaWxpdHlTZXJ2aWNlcyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvdXRpbC9MaXN0OylaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQZXJtaXR0ZWRDcm9zc1Byb2ZpbGVOb3RpZmljYXRpb25MaXN0ZW5lcnMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL3V0aWwvTGlzdDspWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGVybWl0dGVkSW5wdXRNZXRob2RzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS91dGlsL0xpc3Q7KVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb2ZpbGVFbmFibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvZmlsZU5hbWUoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWNvbW1lbmRlZEdsb2JhbFByb3h5KExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9uZXQvUHJveHlJbmZvOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXF1aXJlZFN0cm9uZ0F1dGhUaW1lb3V0KExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtKKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc2V0UGFzc3dvcmRUb2tlbihMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7W0IpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVzdHJpY3Rpb25zUHJvdmlkZXIoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2NyZWVuQ2FwdHVyZURpc2FibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtaKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlY3VyZVNldHRpbmcoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWN1cml0eUxvZ2dpbmdFbmFibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtaKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNob3J0U3VwcG9ydE1lc3NhZ2UoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGFydFVzZXJTZXNzaW9uTWVzc2FnZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXR1c0JhckRpc2FibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtaKVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0b3JhZ2VFbmNyeXB0aW9uKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtaKUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN5c3RlbVNldHRpbmcoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTeXN0ZW1VcGRhdGVQb2xpY3koTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xhbmRyb2lkL2FwcC9hZG1pbi9TeXN0ZW1VcGRhdGVQb2xpY3k7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWUoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0opWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZVpvbmUoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUcnVzdEFnZW50Q29uZmlndXJhdGlvbihMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVbmluc3RhbGxCbG9ja2VkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZztaKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZXJJY29uKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0VXNlckluQmFja2dyb3VuZChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGFuZHJvaWQvb3MvVXNlckhhbmRsZTspSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcFVzZXIoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7KUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InN3aXRjaFVzZXIoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7KVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InRyYW5zZmVyT3duZXJzaGlwKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InVuaW5zdGFsbEFsbFVzZXJDYUNlcnRzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5pbnN0YWxsQ2FDZXJ0KExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtbQilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVPdmVycmlkZUFwbihMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7SUxhbmRyb2lkL3RlbGVwaG9ueS9kYXRhL0FwblNldHRpbmc7KVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9IndpcGVEYXRhKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IndpcGVEYXRhKElMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQUREX0RFVklDRV9BRE1JTiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FQUExJQ0FUSU9OX0RFTEVHQVRJT05fU0NPUEVTX0NIQU5HRUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RFVklDRV9BRE1JTl9TRVJWSUNFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9ERVZJQ0VfT1dORVJfQ0hBTkdFRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTUFOQUdFRF9QUk9GSUxFX1BST1ZJU0lPTkVEIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QUk9GSUxFX09XTkVSX0NIQU5HRUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BST1ZJU0lPTklOR19TVUNDRVNTRlVMIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QUk9WSVNJT05fTUFOQUdFRF9ERVZJQ0UiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BST1ZJU0lPTl9NQU5BR0VEX1BST0ZJTEUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NFVF9ORVdfUEFSRU5UX1BST0ZJTEVfUEFTU1dPUkQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NFVF9ORVdfUEFTU1dPUkQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TVEFSVF9FTkNSWVBUSU9OIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TWVNURU1fVVBEQVRFX1BPTElDWV9DSEFOR0VEIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTEVHQVRJT05fQVBQX1JFU1RSSUNUSU9OUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUxFR0FUSU9OX0JMT0NLX1VOSU5TVEFMTCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUxFR0FUSU9OX0NFUlRfSU5TVEFMTCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUxFR0FUSU9OX0VOQUJMRV9TWVNURU1fQVBQIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTEVHQVRJT05fSU5TVEFMTF9FWElTVElOR19QQUNLQUdFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTEVHQVRJT05fS0VFUF9VTklOU1RBTExFRF9QQUNLQUdFUyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUxFR0FUSU9OX1BBQ0tBR0VfQUNDRVNTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTEVHQVRJT05fUEVSTUlTU0lPTl9HUkFOVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNSWVBUSU9OX1NUQVRVU19BQ1RJVkFUSU5HIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ1JZUFRJT05fU1RBVFVTX0FDVElWRSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNSWVBUSU9OX1NUQVRVU19BQ1RJVkVfREVGQVVMVF9LRVkiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRU5DUllQVElPTl9TVEFUVVNfQUNUSVZFX1BFUl9VU0VSIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ1JZUFRJT05fU1RBVFVTX0lOQUNUSVZFIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ1JZUFRJT05fU1RBVFVTX1VOU1VQUE9SVEVEIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERF9FWFBMQU5BVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfREVMRUdBVElPTl9TQ09QRVMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfREVWSUNFX0FETUlOIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9WSVNJT05JTkdfQUNDT1VOVF9UT19NSUdSQVRFIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST1ZJU0lPTklOR19BRE1JTl9FWFRSQVNfQlVORExFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST1ZJU0lPTklOR19ERVZJQ0VfQURNSU5fQ09NUE9ORU5UX05BTUUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJPVklTSU9OSU5HX0RFVklDRV9BRE1JTl9NSU5JTVVNX1ZFUlNJT05fQ09ERSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9WSVNJT05JTkdfREVWSUNFX0FETUlOX1BBQ0tBR0VfQ0hFQ0tTVU0iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJPVklTSU9OSU5HX0RFVklDRV9BRE1JTl9QQUNLQUdFX0RPV05MT0FEX0NPT0tJRV9IRUFERVIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJPVklTSU9OSU5HX0RFVklDRV9BRE1JTl9QQUNLQUdFX0RPV05MT0FEX0xPQ0FUSU9OIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST1ZJU0lPTklOR19ERVZJQ0VfQURNSU5fUEFDS0FHRV9OQU1FIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9WSVNJT05JTkdfREVWSUNFX0FETUlOX1NJR05BVFVSRV9DSEVDS1NVTSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9WSVNJT05JTkdfRElTQ0xBSU1FUlMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJPVklTSU9OSU5HX0RJU0NMQUlNRVJfQ09OVEVOVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9WSVNJT05JTkdfRElTQ0xBSU1FUl9IRUFERVIiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJPVklTSU9OSU5HX0VNQUlMX0FERFJFU1MiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST1ZJU0lPTklOR19LRUVQX0FDQ09VTlRfT05fTUlHUkFUSU9OIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST1ZJU0lPTklOR19MRUFWRV9BTExfU1lTVEVNX0FQUFNfRU5BQkxFRCIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9WSVNJT05JTkdfTE9DQUxFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST1ZJU0lPTklOR19MT0NBTF9USU1FIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST1ZJU0lPTklOR19MT0dPX1VSSSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9WSVNJT05JTkdfTUFJTl9DT0xPUiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9WSVNJT05JTkdfU0tJUF9FTkNSWVBUSU9OIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST1ZJU0lPTklOR19TS0lQX1VTRVJfQ09OU0VOVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9WSVNJT05JTkdfVElNRV9aT05FIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST1ZJU0lPTklOR19XSUZJX0hJRERFTiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9WSVNJT05JTkdfV0lGSV9QQUNfVVJMIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST1ZJU0lPTklOR19XSUZJX1BBU1NXT1JEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST1ZJU0lPTklOR19XSUZJX1BST1hZX0JZUEFTUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9WSVNJT05JTkdfV0lGSV9QUk9YWV9IT1NUIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST1ZJU0lPTklOR19XSUZJX1BST1hZX1BPUlQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJPVklTSU9OSU5HX1dJRklfU0VDVVJJVFlfVFlQRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9WSVNJT05JTkdfV0lGSV9TU0lEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfRVZJQ1RfQ1JFREVOVElBTF9FTkNSWVBUSU9OX0tFWSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX01BTkFHRURfQ0FOX0FDQ0VTU19QQVJFTlQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19QQVJFTlRfQ0FOX0FDQ0VTU19NQU5BR0VEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IklEX1RZUEVfQkFTRV9JTkZPIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IklEX1RZUEVfSU1FSSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJRF9UWVBFX01FSUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iSURfVFlQRV9TRVJJQUwiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFMTEtFWV9SRVFVRVNUX0NSRURFTlRJQUxTX0FDQ0VTUyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNUQUxMS0VZX1NFVF9VU0VSX1NFTEVDVEFCTEUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZR1VBUkRfRElTQUJMRV9CSU9NRVRSSUNTIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUdVQVJEX0RJU0FCTEVfRkFDRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlHVUFSRF9ESVNBQkxFX0ZFQVRVUkVTX0FMTCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlHVUFSRF9ESVNBQkxFX0ZFQVRVUkVTX05PTkUiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZR1VBUkRfRElTQUJMRV9GSU5HRVJQUklOVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlHVUFSRF9ESVNBQkxFX0lSSVMiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZR1VBUkRfRElTQUJMRV9SRU1PVEVfSU5QVVQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZR1VBUkRfRElTQUJMRV9TRUNVUkVfQ0FNRVJBIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IktFWUdVQVJEX0RJU0FCTEVfU0VDVVJFX05PVElGSUNBVElPTlMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZR1VBUkRfRElTQUJMRV9UUlVTVF9BR0VOVFMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZR1VBUkRfRElTQUJMRV9VTlJFREFDVEVEX05PVElGSUNBVElPTlMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZR1VBUkRfRElTQUJMRV9XSURHRVRTX0FMTCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMRUFWRV9BTExfU1lTVEVNX0FQUFNfRU5BQkxFRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NLX1RBU0tfRkVBVFVSRV9HTE9CQUxfQUNUSU9OUyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NLX1RBU0tfRkVBVFVSRV9IT01FIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0tfVEFTS19GRUFUVVJFX0tFWUdVQVJEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0tfVEFTS19GRUFUVVJFX05PTkUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTE9DS19UQVNLX0ZFQVRVUkVfTk9USUZJQ0FUSU9OUyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NLX1RBU0tfRkVBVFVSRV9PVkVSVklFVyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NLX1RBU0tfRkVBVFVSRV9TWVNURU1fSU5GTyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQUtFX1VTRVJfRVBIRU1FUkFMIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVfVFlQRV9QUk9WSVNJT05JTkdfTkZDIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlBBU1NXT1JEX1FVQUxJVFlfQUxQSEFCRVRJQyIvPgotCQk8ZmllbGQgbmFtZT0iUEFTU1dPUkRfUVVBTElUWV9BTFBIQU5VTUVSSUMiLz4KLQkJPGZpZWxkIG5hbWU9IlBBU1NXT1JEX1FVQUxJVFlfQklPTUVUUklDX1dFQUsiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iUEFTU1dPUkRfUVVBTElUWV9DT01QTEVYIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlBBU1NXT1JEX1FVQUxJVFlfTlVNRVJJQyIvPgotCQk8ZmllbGQgbmFtZT0iUEFTU1dPUkRfUVVBTElUWV9OVU1FUklDX0NPTVBMRVgiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUEFTU1dPUkRfUVVBTElUWV9TT01FVEhJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlBBU1NXT1JEX1FVQUxJVFlfVU5TUEVDSUZJRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUk1JU1NJT05fR1JBTlRfU1RBVEVfREVGQVVMVCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJQRVJNSVNTSU9OX0dSQU5UX1NUQVRFX0RFTklFRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJQRVJNSVNTSU9OX0dSQU5UX1NUQVRFX0dSQU5URUQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUEVSTUlTU0lPTl9QT0xJQ1lfQVVUT19ERU5ZIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUk1JU1NJT05fUE9MSUNZX0FVVE9fR1JBTlQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUEVSTUlTU0lPTl9QT0xJQ1lfUFJPTVBUIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlBPTElDWV9ESVNBQkxFX0NBTUVSQSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQT0xJQ1lfRElTQUJMRV9TQ1JFRU5fQ0FQVFVSRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNFVF9QQVNTV09SRF9ET19OT1RfQVNLX0NSRURFTlRJQUxTX09OX0JPT1QiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUkVTRVRfUEFTU1dPUkRfUkVRVUlSRV9FTlRSWSIvPgotCQk8ZmllbGQgbmFtZT0iU0tJUF9TRVRVUF9XSVpBUkQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iV0lQRV9FVUlDQyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSVBFX0VYVEVSTkFMX1NUT1JBR0UiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSVBFX1JFU0VUX1BST1RFQ1RJT05fREFUQSIgc2luY2U9IjIyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvYWRtaW4vRGV2aWNlUG9saWN5TWFuYWdlciRPbkNsZWFyQXBwbGljYXRpb25Vc2VyRGF0YUxpc3RlbmVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BcHBsaWNhdGlvblVzZXJEYXRhQ2xlYXJlZChMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9hZG1pbi9EbnNFdmVudCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvYWRtaW4vTmV0d29ya0V2ZW50Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvc3RuYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmV0QWRkcmVzc2VzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG90YWxSZXNvbHZlZEFkZHJlc3NDb3VudCgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2FkbWluL0ZyZWV6ZVBlcmlvZCIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS90aW1lL01vbnRoRGF5O0xqYXZhL3RpbWUvTW9udGhEYXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmQoKUxqYXZhL3RpbWUvTW9udGhEYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhcnQoKUxqYXZhL3RpbWUvTW9udGhEYXk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvYWRtaW4vTmV0d29ya0V2ZW50IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClKIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZXN0YW1wKClKIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvYWRtaW4vU2VjdXJpdHlMb2ciIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkxFVkVMX0VSUk9SIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkxFVkVMX0lORk8iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTEVWRUxfV0FSTklORyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfQURCX1NIRUxMX0NNRCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0FEQl9TSEVMTF9JTlRFUkFDVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0FQUF9QUk9DRVNTX1NUQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfQ0VSVF9BVVRIT1JJVFlfSU5TVEFMTEVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19DRVJUX0FVVEhPUklUWV9SRU1PVkVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19DRVJUX1ZBTElEQVRJT05fRkFJTFVSRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfQ1JZUFRPX1NFTEZfVEVTVF9DT01QTEVURUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0tFWUdVQVJEX0RJU0FCTEVEX0ZFQVRVUkVTX1NFVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfS0VZR1VBUkRfRElTTUlTU0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfS0VZR1VBUkRfRElTTUlTU19BVVRIX0FUVEVNUFQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19LRVlHVUFSRF9TRUNVUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfS0VZX0RFU1RSVUNUSU9OIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19LRVlfR0VORVJBVEVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19LRVlfSU1QT1JUIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19LRVlfSU5URUdSSVRZX1ZJT0xBVElPTiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfTE9HR0lOR19TVEFSVEVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19MT0dHSU5HX1NUT1BQRUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0xPR19CVUZGRVJfU0laRV9DUklUSUNBTCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfTUFYX1BBU1NXT1JEX0FUVEVNUFRTX1NFVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfTUFYX1NDUkVFTl9MT0NLX1RJTUVPVVRfU0VUIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19NRURJQV9NT1VOVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfTUVESUFfVU5NT1VOVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfT1NfU0hVVERPV04iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX09TX1NUQVJUVVAiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1BBU1NXT1JEX0NPTVBMRVhJVFlfU0VUIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19QQVNTV09SRF9FWFBJUkFUSU9OX1NFVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfUEFTU1dPUkRfSElTVE9SWV9MRU5HVEhfU0VUIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19SRU1PVEVfTE9DSyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfU1lOQ19SRUNWX0ZJTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19TWU5DX1NFTkRfRklMRSIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1VTRVJfUkVTVFJJQ1RJT05fQURERUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1VTRVJfUkVTVFJJQ1RJT05fUkVNT1ZFRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfV0lQRV9GQUlMVVJFIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9hZG1pbi9TZWN1cml0eUxvZyRTZWN1cml0eUV2ZW50IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0IpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvZ0xldmVsKClJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWcoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lTmFub3MoKUoiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9hZG1pbi9TeXN0ZW1VcGRhdGVJbmZvIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWNlaXZlZFRpbWUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWN1cml0eVBhdGNoU3RhdGUoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQ1VSSVRZX1BBVENIX1NUQVRFX0ZBTFNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNVUklUWV9QQVRDSF9TVEFURV9UUlVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNVUklUWV9QQVRDSF9TVEFURV9VTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvYWRtaW4vU3lzdGVtVXBkYXRlUG9saWN5IiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUF1dG9tYXRpY0luc3RhbGxQb2xpY3koKUxhbmRyb2lkL2FwcC9hZG1pbi9TeXN0ZW1VcGRhdGVQb2xpY3k7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlUG9zdHBvbmVJbnN0YWxsUG9saWN5KClMYW5kcm9pZC9hcHAvYWRtaW4vU3lzdGVtVXBkYXRlUG9saWN5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVdpbmRvd2VkSW5zdGFsbFBvbGljeShJSSlMYW5kcm9pZC9hcHAvYWRtaW4vU3lzdGVtVXBkYXRlUG9saWN5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyZWV6ZVBlcmlvZHMoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbGxXaW5kb3dFbmQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YWxsV2luZG93U3RhcnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb2xpY3lUeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RnJlZXplUGVyaW9kcyhMamF2YS91dGlsL0xpc3Q7KUxhbmRyb2lkL2FwcC9hZG1pbi9TeXN0ZW1VcGRhdGVQb2xpY3k7IiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSU5TVEFMTF9BVVRPTUFUSUMiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSU5TVEFMTF9XSU5ET1dFRCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9QT1NUUE9ORSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2FkbWluL1N5c3RlbVVwZGF0ZVBvbGljeSRWYWxpZGF0aW9uRmFpbGVkRXhjZXB0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcnJvckNvZGUoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0NPTUJJTkVEX0ZSRUVaRV9QRVJJT0RfVE9PX0NMT1NFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9DT01CSU5FRF9GUkVFWkVfUEVSSU9EX1RPT19MT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9EVVBMSUNBVEVfT1JfT1ZFUkxBUCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTkVXX0ZSRUVaRV9QRVJJT0RfVE9PX0NMT1NFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9ORVdfRlJFRVpFX1BFUklPRF9UT09fTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfVU5LTk9XTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2Fzc2lzdC9Bc3Npc3RDb250ZW50IiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsaXBEYXRhKClMYW5kcm9pZC9jb250ZW50L0NsaXBEYXRhOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dHJhcygpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVudCgpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RydWN0dXJlZERhdGEoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdlYlVyaSgpTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FwcFByb3ZpZGVkSW50ZW50KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBcHBQcm92aWRlZFdlYlVyaSgpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2xpcERhdGEoTGFuZHJvaWQvY29udGVudC9DbGlwRGF0YTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludGVudChMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cnVjdHVyZWREYXRhKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2ViVXJpKExhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9hc3Npc3QvQXNzaXN0U3RydWN0dXJlIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjcXVpc2l0aW9uRW5kVGltZSgpSiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNxdWlzaXRpb25TdGFydFRpbWUoKUoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2aXR5Q29tcG9uZW50KClMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2luZG93Tm9kZUF0KEkpTGFuZHJvaWQvYXBwL2Fzc2lzdC9Bc3Npc3RTdHJ1Y3R1cmUkV2luZG93Tm9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaW5kb3dOb2RlQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0hvbWVBY3Rpdml0eSgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvYXNzaXN0L0Fzc2lzdFN0cnVjdHVyZSRWaWV3Tm9kZSIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFscGhhKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0b2ZpbGxIaW50cygpW0xqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0b2ZpbGxJZCgpTGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbElkOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0b2ZpbGxPcHRpb25zKClbTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRvZmlsbFR5cGUoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1dG9maWxsVmFsdWUoKUxhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxWYWx1ZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkQXQoSSlMYW5kcm9pZC9hcHAvYXNzaXN0L0Fzc2lzdFN0cnVjdHVyZSRWaWV3Tm9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGlsZENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xhc3NOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50RGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVsZXZhdGlvbigpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dHJhcygpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpbnQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEh0bWxJbmZvKClMYW5kcm9pZC92aWV3L1ZpZXdTdHJ1Y3R1cmUkSHRtbEluZm87IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkRW50cnkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkUGFja2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWRUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbXBvcnRhbnRGb3JBdXRvZmlsbCgpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRUeXBlKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZWZ0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxlTGlzdCgpTGFuZHJvaWQvb3MvTG9jYWxlTGlzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFRleHRFbXMoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFRleHRMZW5ndGgoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pblRleHRFbXMoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjcm9sbFgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY3JvbGxZKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dEJhY2tncm91bmRDb2xvcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRDb2xvcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRJZEVudHJ5KClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRMaW5lQmFzZWxpbmVzKClbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRMaW5lQ2hhck9mZnNldHMoKVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dFNlbGVjdGlvbkVuZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRTZWxlY3Rpb25TdGFydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRTaXplKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dFN0eWxlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9wKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNmb3JtYXRpb24oKUxhbmRyb2lkL2dyYXBoaWNzL01hdHJpeDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaXNpYmlsaXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2ViRG9tYWluKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdlYlNjaGVtZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWNjZXNzaWJpbGl0eUZvY3VzZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FjdGl2YXRlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXNzaXN0QmxvY2tlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2hlY2thYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDaGVja2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDbGlja2FibGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbnRleHRDbGlja2FibGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZvY3VzYWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRm9jdXNlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG9uZ0NsaWNrYWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT3BhcXVlKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NlbGVjdGVkKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJURVhUX0NPTE9SX1VOREVGSU5FRCIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9TVFlMRV9CT0xEIi8+Ci0JCTxmaWVsZCBuYW1lPSJURVhUX1NUWUxFX0lUQUxJQyIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9TVFlMRV9TVFJJS0VfVEhSVSIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9TVFlMRV9VTkRFUkxJTkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9hc3Npc3QvQXNzaXN0U3RydWN0dXJlJFdpbmRvd05vZGUiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZWZ0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um9vdFZpZXdOb2RlKClMYW5kcm9pZC9hcHAvYXNzaXN0L0Fzc2lzdFN0cnVjdHVyZSRWaWV3Tm9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaXRsZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9wKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkdGgoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9iYWNrdXAvQmFja3VwQWdlbnQiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NvbnRleHRXcmFwcGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZnVsbEJhY2t1cEZpbGUoTGphdmEvaW8vRmlsZTtMYW5kcm9pZC9hcHAvYmFja3VwL0Z1bGxCYWNrdXBEYXRhT3V0cHV0OylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkJhY2t1cChMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjtMYW5kcm9pZC9hcHAvYmFja3VwL0JhY2t1cERhdGFPdXRwdXQ7TGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGVzdHJveSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRnVsbEJhY2t1cChMYW5kcm9pZC9hcHAvYmFja3VwL0Z1bGxCYWNrdXBEYXRhT3V0cHV0OylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblF1b3RhRXhjZWVkZWQoSkopViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXN0b3JlKExhbmRyb2lkL2FwcC9iYWNrdXAvQmFja3VwRGF0YUlucHV0O0lMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVzdG9yZShMYW5kcm9pZC9hcHAvYmFja3VwL0JhY2t1cERhdGFJbnB1dDtKTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVzdG9yZUZpbGUoTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7SkxqYXZhL2lvL0ZpbGU7SUpKKVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVzdG9yZUZpbmlzaGVkKClWIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfQ0xJRU5UX1NJREVfRU5DUllQVElPTl9FTkFCTEVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfREVWSUNFX1RPX0RFVklDRV9UUkFOU0ZFUiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0RJUkVDVE9SWSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0ZJTEUiIHNpbmNlPSIxNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2JhY2t1cC9CYWNrdXBBZ2VudEhlbHBlciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9iYWNrdXAvQmFja3VwQWdlbnQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRIZWxwZXIoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvYXBwL2JhY2t1cC9CYWNrdXBIZWxwZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9iYWNrdXAvQmFja3VwRGF0YUlucHV0IiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEVudGl0eURhdGEoW0JJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZE5leHRIZWFkZXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJza2lwRW50aXR5RGF0YSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2JhY2t1cC9CYWNrdXBEYXRhSW5wdXRTdHJlYW0iIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JbnB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYXBwL2JhY2t1cC9CYWNrdXBEYXRhSW5wdXQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2JhY2t1cC9CYWNrdXBEYXRhT3V0cHV0IiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdW90YSgpSiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNwb3J0RmxhZ3MoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlRW50aXR5RGF0YShbQkkpSSIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlRW50aXR5SGVhZGVyKExqYXZhL2xhbmcvU3RyaW5nO0kpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2JhY2t1cC9CYWNrdXBIZWxwZXIiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InBlcmZvcm1CYWNrdXAoTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7TGFuZHJvaWQvYXBwL2JhY2t1cC9CYWNrdXBEYXRhT3V0cHV0O0xhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdG9yZUVudGl0eShMYW5kcm9pZC9hcHAvYmFja3VwL0JhY2t1cERhdGFJbnB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlTmV3U3RhdGVEZXNjcmlwdGlvbihMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2JhY2t1cC9CYWNrdXBNYW5hZ2VyIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0YUNoYW5nZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRhQ2hhbmdlZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RSZXN0b3JlKExhbmRyb2lkL2FwcC9iYWNrdXAvUmVzdG9yZU9ic2VydmVyOylJIiBkZXByZWNhdGVkPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2JhY2t1cC9GaWxlQmFja3VwSGVscGVyIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL2JhY2t1cC9GaWxlQmFja3VwSGVscGVyQmFzZSIgcmVtb3ZlZD0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgc2luY2U9IjI5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvYXBwL2JhY2t1cC9CYWNrdXBIZWxwZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O1tMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2JhY2t1cC9GaWxlQmFja3VwSGVscGVyQmFzZSIgc2luY2U9IjgiIHJlbW92ZWQ9IjI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlTmV3U3RhdGVEZXNjcmlwdGlvbihMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2JhY2t1cC9GdWxsQmFja3VwRGF0YU91dHB1dCIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdW90YSgpSiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNwb3J0RmxhZ3MoKUkiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2JhY2t1cC9SZXN0b3JlT2JzZXJ2ZXIiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVXBkYXRlKElMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc3RvcmVGaW5pc2hlZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN0b3JlU3RhcnRpbmcoSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvYmFja3VwL1NoYXJlZFByZWZlcmVuY2VzQmFja3VwSGVscGVyIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL2JhY2t1cC9GaWxlQmFja3VwSGVscGVyQmFzZSIgcmVtb3ZlZD0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgc2luY2U9IjI5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvYXBwL2JhY2t1cC9CYWNrdXBIZWxwZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O1tMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2pvYi9Kb2JJbmZvIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYWNrb2ZmUG9saWN5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xpcERhdGEoKUxhbmRyb2lkL2NvbnRlbnQvQ2xpcERhdGE7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGlwR3JhbnRGbGFncygpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXN0aW1hdGVkTmV0d29ya0Rvd25sb2FkQnl0ZXMoKUoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVzdGltYXRlZE5ldHdvcmtVcGxvYWRCeXRlcygpSiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbGV4TWlsbGlzKClKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluaXRpYWxCYWNrb2ZmTWlsbGlzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZXJ2YWxNaWxsaXMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhFeGVjdXRpb25EZWxheU1pbGxpcygpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbkZsZXhNaWxsaXMoKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbkxhdGVuY3lNaWxsaXMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5QZXJpb2RNaWxsaXMoKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5ldHdvcmtUeXBlKClJIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVpcmVkTmV0d29yaygpTGFuZHJvaWQvbmV0L05ldHdvcmtSZXF1ZXN0OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VydmljZSgpTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYW5zaWVudEV4dHJhcygpTGFuZHJvaWQvb3MvQnVuZGxlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJpZ2dlckNvbnRlbnRNYXhEZWxheSgpSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJpZ2dlckNvbnRlbnRVcGRhdGVEZWxheSgpSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJpZ2dlckNvbnRlbnRVcmlzKClbTGFuZHJvaWQvYXBwL2pvYi9Kb2JJbmZvJFRyaWdnZXJDb250ZW50VXJpOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbXBvcnRhbnRXaGlsZUZvcmVncm91bmQoKVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGVyaW9kaWMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1BlcnNpc3RlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUHJlZmV0Y2goKVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVxdWlyZUJhdHRlcnlOb3RMb3coKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVxdWlyZUNoYXJnaW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZXF1aXJlRGV2aWNlSWRsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVxdWlyZVN0b3JhZ2VOb3RMb3coKVoiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQkFDS09GRl9QT0xJQ1lfRVhQT05FTlRJQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkJBQ0tPRkZfUE9MSUNZX0xJTkVBUiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9JTklUSUFMX0JBQ0tPRkZfTUlMTElTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfQkFDS09GRl9ERUxBWV9NSUxMSVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVFdPUktfQllURVNfVU5LTk9XTiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLX1RZUEVfQU5ZIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLX1RZUEVfQ0VMTFVMQVIiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SS19UWVBFX01FVEVSRUQiIHNpbmNlPSIyNiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVFdPUktfVFlQRV9OT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLX1RZUEVfTk9UX1JPQU1JTkciIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SS19UWVBFX1VOTUVURVJFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL2pvYi9Kb2JJbmZvJEJ1aWxkZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRyaWdnZXJDb250ZW50VXJpKExhbmRyb2lkL2FwcC9qb2IvSm9iSW5mbyRUcmlnZ2VyQ29udGVudFVyaTspTGFuZHJvaWQvYXBwL2pvYi9Kb2JJbmZvJEJ1aWxkZXI7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvYXBwL2pvYi9Kb2JJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJhY2tvZmZDcml0ZXJpYShKSSlMYW5kcm9pZC9hcHAvam9iL0pvYkluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGlwRGF0YShMYW5kcm9pZC9jb250ZW50L0NsaXBEYXRhO0kpTGFuZHJvaWQvYXBwL2pvYi9Kb2JJbmZvJEJ1aWxkZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFc3RpbWF0ZWROZXR3b3JrQnl0ZXMoSkopTGFuZHJvaWQvYXBwL2pvYi9Kb2JJbmZvJEJ1aWxkZXI7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeHRyYXMoTGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7KUxhbmRyb2lkL2FwcC9qb2IvSm9iSW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltcG9ydGFudFdoaWxlRm9yZWdyb3VuZChaKUxhbmRyb2lkL2FwcC9qb2IvSm9iSW5mbyRCdWlsZGVyOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWluaW11bUxhdGVuY3koSilMYW5kcm9pZC9hcHAvam9iL0pvYkluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdmVycmlkZURlYWRsaW5lKEopTGFuZHJvaWQvYXBwL2pvYi9Kb2JJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGVyaW9kaWMoSilMYW5kcm9pZC9hcHAvam9iL0pvYkluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQZXJpb2RpYyhKSilMYW5kcm9pZC9hcHAvam9iL0pvYkluZm8kQnVpbGRlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBlcnNpc3RlZChaKUxhbmRyb2lkL2FwcC9qb2IvSm9iSW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZWZldGNoKFopTGFuZHJvaWQvYXBwL2pvYi9Kb2JJbmZvJEJ1aWxkZXI7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXF1aXJlZE5ldHdvcmsoTGFuZHJvaWQvbmV0L05ldHdvcmtSZXF1ZXN0OylMYW5kcm9pZC9hcHAvam9iL0pvYkluZm8kQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlcXVpcmVkTmV0d29ya1R5cGUoSSlMYW5kcm9pZC9hcHAvam9iL0pvYkluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXF1aXJlc0JhdHRlcnlOb3RMb3coWilMYW5kcm9pZC9hcHAvam9iL0pvYkluZm8kQnVpbGRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlcXVpcmVzQ2hhcmdpbmcoWilMYW5kcm9pZC9hcHAvam9iL0pvYkluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXF1aXJlc0RldmljZUlkbGUoWilMYW5kcm9pZC9hcHAvam9iL0pvYkluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXF1aXJlc1N0b3JhZ2VOb3RMb3coWilMYW5kcm9pZC9hcHAvam9iL0pvYkluZm8kQnVpbGRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyYW5zaWVudEV4dHJhcyhMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL2FwcC9qb2IvSm9iSW5mbyRCdWlsZGVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJpZ2dlckNvbnRlbnRNYXhEZWxheShKKUxhbmRyb2lkL2FwcC9qb2IvSm9iSW5mbyRCdWlsZGVyOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJpZ2dlckNvbnRlbnRVcGRhdGVEZWxheShKKUxhbmRyb2lkL2FwcC9qb2IvSm9iSW5mbyRCdWlsZGVyOyIgc2luY2U9IjI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvam9iL0pvYkluZm8kVHJpZ2dlckNvbnRlbnRVcmkiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC9Vcmk7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxhZ3MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmkoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX05PVElGWV9GT1JfREVTQ0VOREFOVFMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9qb2IvSm9iUGFyYW1ldGVycyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGxldGVXb3JrKExhbmRyb2lkL2FwcC9qb2IvSm9iV29ya0l0ZW07KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlcXVldWVXb3JrKClMYW5kcm9pZC9hcHAvam9iL0pvYldvcmtJdGVtOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xpcERhdGEoKUxhbmRyb2lkL2NvbnRlbnQvQ2xpcERhdGE7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGlwR3JhbnRGbGFncygpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRKb2JJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5ldHdvcmsoKUxhbmRyb2lkL25ldC9OZXR3b3JrOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNpZW50RXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmlnZ2VyZWRDb250ZW50QXV0aG9yaXRpZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyaWdnZXJlZENvbnRlbnRVcmlzKClbTGFuZHJvaWQvbmV0L1VyaTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT3ZlcnJpZGVEZWFkbGluZUV4cGlyZWQoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9qb2IvSm9iU2NoZWR1bGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbEFsbCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVucXVldWUoTGFuZHJvaWQvYXBwL2pvYi9Kb2JJbmZvO0xhbmRyb2lkL2FwcC9qb2IvSm9iV29ya0l0ZW07KUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbFBlbmRpbmdKb2JzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVuZGluZ0pvYihJKUxhbmRyb2lkL2FwcC9qb2IvSm9iSW5mbzsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNjaGVkdWxlKExhbmRyb2lkL2FwcC9qb2IvSm9iSW5mbzspSSIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVUxUX0ZBSUxVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9TVUNDRVNTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvam9iL0pvYlNlcnZpY2UiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJqb2JGaW5pc2hlZChMYW5kcm9pZC9hcHAvam9iL0pvYlBhcmFtZXRlcnM7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGFydEpvYihMYW5kcm9pZC9hcHAvam9iL0pvYlBhcmFtZXRlcnM7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0b3BKb2IoTGFuZHJvaWQvYXBwL2pvYi9Kb2JQYXJhbWV0ZXJzOylaIi8+Ci0JCTxmaWVsZCBuYW1lPSJQRVJNSVNTSU9OX0JJTkQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9qb2IvSm9iU2VydmljZUVuZ2luZSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9hcHAvU2VydmljZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpbmRlcigpTGFuZHJvaWQvb3MvSUJpbmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJqb2JGaW5pc2hlZChMYW5kcm9pZC9hcHAvam9iL0pvYlBhcmFtZXRlcnM7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGFydEpvYihMYW5kcm9pZC9hcHAvam9iL0pvYlBhcmFtZXRlcnM7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0b3BKb2IoTGFuZHJvaWQvYXBwL2pvYi9Kb2JQYXJhbWV0ZXJzOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvam9iL0pvYldvcmtJdGVtIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0ludGVudDtKSilWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWxpdmVyeUNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXN0aW1hdGVkTmV0d29ya0Rvd25sb2FkQnl0ZXMoKUoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVzdGltYXRlZE5ldHdvcmtVcGxvYWRCeXRlcygpSiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZW50KClMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9zbGljZS9TbGljZSIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGludHMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJdGVtcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNwZWMoKUxhbmRyb2lkL2FwcC9zbGljZS9TbGljZVNwZWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXJpKClMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2FsbGVyTmVlZGVkKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9SQU5HRV9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfVE9HR0xFX1NUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJISU5UX0FDVElPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IkhJTlRfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkhJTlRfSE9SSVpPTlRBTCIvPgotCQk8ZmllbGQgbmFtZT0iSElOVF9LRVlXT1JEUyIvPgotCQk8ZmllbGQgbmFtZT0iSElOVF9MQVJHRSIvPgotCQk8ZmllbGQgbmFtZT0iSElOVF9MQVNUX1VQREFURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkhJTlRfTElTVCIvPgotCQk8ZmllbGQgbmFtZT0iSElOVF9MSVNUX0lURU0iLz4KLQkJPGZpZWxkIG5hbWU9IkhJTlRfTk9fVElOVCIvPgotCQk8ZmllbGQgbmFtZT0iSElOVF9QQVJUSUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJISU5UX1BFUk1JU1NJT05fUkVRVUVTVCIvPgotCQk8ZmllbGQgbmFtZT0iSElOVF9TRUVfTU9SRSIvPgotCQk8ZmllbGQgbmFtZT0iSElOVF9TRUxFQ1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iSElOVF9TSE9SVENVVCIvPgotCQk8ZmllbGQgbmFtZT0iSElOVF9TVU1NQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJISU5UX1RJVExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJISU5UX1RUTCIvPgotCQk8ZmllbGQgbmFtZT0iU1VCVFlQRV9DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iU1VCVFlQRV9DT05URU5UX0RFU0NSSVBUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUJUWVBFX0xBWU9VVF9ESVJFQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNVQlRZUEVfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUJUWVBFX01FU1NBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNVQlRZUEVfTUlMTElTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUJUWVBFX1BSSU9SSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUJUWVBFX1JBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUJUWVBFX1NPVVJDRSIvPgotCQk8ZmllbGQgbmFtZT0iU1VCVFlQRV9UT0dHTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNVQlRZUEVfVkFMVUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC9zbGljZS9TbGljZSRCdWlsZGVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2FwcC9zbGljZS9TbGljZSRCdWlsZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvYXBwL3NsaWNlL1NsaWNlU3BlYzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFjdGlvbihMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDtMYW5kcm9pZC9hcHAvc2xpY2UvU2xpY2U7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2FwcC9zbGljZS9TbGljZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEJ1bmRsZShMYW5kcm9pZC9vcy9CdW5kbGU7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9MaXN0OylMYW5kcm9pZC9hcHAvc2xpY2UvU2xpY2UkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRIaW50cyhMamF2YS91dGlsL0xpc3Q7KUxhbmRyb2lkL2FwcC9zbGljZS9TbGljZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEljb24oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbjtMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0xpc3Q7KUxhbmRyb2lkL2FwcC9zbGljZS9TbGljZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEludChJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9MaXN0OylMYW5kcm9pZC9hcHAvc2xpY2UvU2xpY2UkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRMb25nKEpMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0xpc3Q7KUxhbmRyb2lkL2FwcC9zbGljZS9TbGljZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFJlbW90ZUlucHV0KExhbmRyb2lkL2FwcC9SZW1vdGVJbnB1dDtMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0xpc3Q7KUxhbmRyb2lkL2FwcC9zbGljZS9TbGljZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFN1YlNsaWNlKExhbmRyb2lkL2FwcC9zbGljZS9TbGljZTtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvYXBwL3NsaWNlL1NsaWNlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0xpc3Q7KUxhbmRyb2lkL2FwcC9zbGljZS9TbGljZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9hcHAvc2xpY2UvU2xpY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FsbGVyTmVlZGVkKFopTGFuZHJvaWQvYXBwL3NsaWNlL1NsaWNlJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvc2xpY2UvU2xpY2VJdGVtIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3Rpb24oKUxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1bmRsZSgpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcm1hdCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGludHMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJY29uKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9JY29uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmcoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZW1vdGVJbnB1dCgpTGFuZHJvaWQvYXBwL1JlbW90ZUlucHV0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNsaWNlKClMYW5kcm9pZC9hcHAvc2xpY2UvU2xpY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3ViVHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzSGludChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0FDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0JVTkRMRSIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0lNQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX1JFTU9URV9JTlBVVCIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX1NMSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfVEVYVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL3NsaWNlL1NsaWNlTWFuYWdlciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmRTbGljZShMYW5kcm9pZC9jb250ZW50L0ludGVudDtMamF2YS91dGlsL1NldDspTGFuZHJvaWQvYXBwL3NsaWNlL1NsaWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmRTbGljZShMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL3V0aWwvU2V0OylMYW5kcm9pZC9hcHAvc2xpY2UvU2xpY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tTbGljZVBlcm1pc3Npb24oTGFuZHJvaWQvbmV0L1VyaTtJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGlubmVkU2xpY2VzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGlubmVkU3BlY3MoTGFuZHJvaWQvbmV0L1VyaTspTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2xpY2VEZXNjZW5kYW50cyhMYW5kcm9pZC9uZXQvVXJpOylMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ3JhbnRTbGljZVBlcm1pc3Npb24oTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcEludGVudFRvVXJpKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9InBpblNsaWNlKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvdXRpbC9TZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXZva2VTbGljZVBlcm1pc3Npb24oTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9InVucGluU2xpY2UoTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfU0xJQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNMSUNFX01FVEFEQVRBX0tFWSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL3NsaWNlL1NsaWNlTWV0cmljcyIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZ0hpZGRlbigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZ1RvdWNoKElMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9nVmlzaWJsZSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL3NsaWNlL1NsaWNlUHJvdmlkZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25CaW5kU2xpY2UoTGFuZHJvaWQvbmV0L1VyaTtMamF2YS91dGlsL1NldDspTGFuZHJvaWQvYXBwL3NsaWNlL1NsaWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlUGVybWlzc2lvblJlcXVlc3QoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZXRTbGljZURlc2NlbmRhbnRzKExhbmRyb2lkL25ldC9Vcmk7KUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1hcEludGVudFRvVXJpKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2xpY2VQaW5uZWQoTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2xpY2VVbnBpbm5lZChMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJTTElDRV9UWVBFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvc2xpY2UvU2xpY2VTcGVjIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5SZW5kZXIoTGFuZHJvaWQvYXBwL3NsaWNlL1NsaWNlU3BlYzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJldmlzaW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvdXNhZ2UvQ29uZmlndXJhdGlvblN0YXRzIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9hcHAvdXNhZ2UvQ29uZmlndXJhdGlvblN0YXRzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZhdGlvbkNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uZmlndXJhdGlvbigpTGFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaXJzdFRpbWVTdGFtcCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhc3RUaW1lQWN0aXZlKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFzdFRpbWVTdGFtcCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdGFsVGltZUFjdGl2ZSgpSiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL3VzYWdlL0V2ZW50U3RhdHMiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2FwcC91c2FnZS9FdmVudFN0YXRzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKExhbmRyb2lkL2FwcC91c2FnZS9FdmVudFN0YXRzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFdmVudFR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaXJzdFRpbWVTdGFtcCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhc3RFdmVudFRpbWUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXN0VGltZVN0YW1wKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG90YWxUaW1lKClKIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvdXNhZ2UvRXh0ZXJuYWxTdG9yYWdlU3RhdHMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwQnl0ZXMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdWRpb0J5dGVzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1hZ2VCeXRlcygpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdGFsQnl0ZXMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWRlb0J5dGVzKClKIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvdXNhZ2UvTmV0d29ya1N0YXRzIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BdXRvQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV4dEJ1Y2tldChMYW5kcm9pZC9hcHAvdXNhZ2UvTmV0d29ya1N0YXRzJEJ1Y2tldDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc05leHRCdWNrZXQoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC91c2FnZS9OZXR3b3JrU3RhdHMkQnVja2V0IiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdE5ldHdvcmtTdGF0dXMoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuZFRpbWVTdGFtcCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldGVyZWQoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvYW1pbmcoKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJ4Qnl0ZXMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSeFBhY2tldHMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydFRpbWVTdGFtcCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFnKClJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeEJ5dGVzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHhQYWNrZXRzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VWlkKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX05FVFdPUktfQUxMIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfTkVUV09SS19OTyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX05FVFdPUktfWUVTIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEVSRURfQUxMIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEVSRURfTk8iIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTUVURVJFRF9ZRVMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUk9BTUlOR19BTEwiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iUk9BTUlOR19OTyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJST0FNSU5HX1lFUyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9BTEwiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0RFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0ZPUkVHUk9VTkQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19OT05FIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlVJRF9BTEwiLz4KLQkJPGZpZWxkIG5hbWU9IlVJRF9SRU1PVkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJVSURfVEVUSEVSSU5HIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvdXNhZ2UvTmV0d29ya1N0YXRzTWFuYWdlciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5RGV0YWlscyhJTGphdmEvbGFuZy9TdHJpbmc7SkopTGFuZHJvaWQvYXBwL3VzYWdlL05ldHdvcmtTdGF0czsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeURldGFpbHNGb3JVaWQoSUxqYXZhL2xhbmcvU3RyaW5nO0pKSSlMYW5kcm9pZC9hcHAvdXNhZ2UvTmV0d29ya1N0YXRzOyIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5RGV0YWlsc0ZvclVpZFRhZyhJTGphdmEvbGFuZy9TdHJpbmc7SkpJSSlMYW5kcm9pZC9hcHAvdXNhZ2UvTmV0d29ya1N0YXRzOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnlEZXRhaWxzRm9yVWlkVGFnU3RhdGUoSUxqYXZhL2xhbmcvU3RyaW5nO0pKSUlJKUxhbmRyb2lkL2FwcC91c2FnZS9OZXR3b3JrU3RhdHM7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeVN1bW1hcnkoSUxqYXZhL2xhbmcvU3RyaW5nO0pKKUxhbmRyb2lkL2FwcC91c2FnZS9OZXR3b3JrU3RhdHM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnlTdW1tYXJ5Rm9yRGV2aWNlKElMamF2YS9sYW5nL1N0cmluZztKSilMYW5kcm9pZC9hcHAvdXNhZ2UvTmV0d29ya1N0YXRzJEJ1Y2tldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeVN1bW1hcnlGb3JVc2VyKElMamF2YS9sYW5nL1N0cmluZztKSilMYW5kcm9pZC9hcHAvdXNhZ2UvTmV0d29ya1N0YXRzJEJ1Y2tldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlclVzYWdlQ2FsbGJhY2soSUxqYXZhL2xhbmcvU3RyaW5nO0pMYW5kcm9pZC9hcHAvdXNhZ2UvTmV0d29ya1N0YXRzTWFuYWdlciRVc2FnZUNhbGxiYWNrOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlclVzYWdlQ2FsbGJhY2soSUxqYXZhL2xhbmcvU3RyaW5nO0pMYW5kcm9pZC9hcHAvdXNhZ2UvTmV0d29ya1N0YXRzTWFuYWdlciRVc2FnZUNhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJVc2FnZUNhbGxiYWNrKExhbmRyb2lkL2FwcC91c2FnZS9OZXR3b3JrU3RhdHNNYW5hZ2VyJFVzYWdlQ2FsbGJhY2s7KVYiIHNpbmNlPSIyNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL3VzYWdlL05ldHdvcmtTdGF0c01hbmFnZXIkVXNhZ2VDYWxsYmFjayIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVGhyZXNob2xkUmVhY2hlZChJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcC91c2FnZS9TdG9yYWdlU3RhdHMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwQnl0ZXMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWNoZUJ5dGVzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YUJ5dGVzKClKIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvdXNhZ2UvU3RvcmFnZVN0YXRzTWFuYWdlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyZWVCeXRlcyhMamF2YS91dGlsL1VVSUQ7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3RhbEJ5dGVzKExqYXZhL3V0aWwvVVVJRDspSiIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5RXh0ZXJuYWxTdGF0c0ZvclVzZXIoTGphdmEvdXRpbC9VVUlEO0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7KUxhbmRyb2lkL2FwcC91c2FnZS9FeHRlcm5hbFN0b3JhZ2VTdGF0czsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeVN0YXRzRm9yUGFja2FnZShMamF2YS91dGlsL1VVSUQ7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvVXNlckhhbmRsZTspTGFuZHJvaWQvYXBwL3VzYWdlL1N0b3JhZ2VTdGF0czsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeVN0YXRzRm9yVWlkKExqYXZhL3V0aWwvVVVJRDtJKUxhbmRyb2lkL2FwcC91c2FnZS9TdG9yYWdlU3RhdHM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnlTdGF0c0ZvclVzZXIoTGphdmEvdXRpbC9VVUlEO0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7KUxhbmRyb2lkL2FwcC91c2FnZS9TdG9yYWdlU3RhdHM7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHAvdXNhZ2UvVXNhZ2VFdmVudHMiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV4dEV2ZW50KExhbmRyb2lkL2FwcC91c2FnZS9Vc2FnZUV2ZW50cyRFdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc05leHRFdmVudCgpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL3VzYWdlL1VzYWdlRXZlbnRzJEV2ZW50IiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwU3RhbmRieUJ1Y2tldCgpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xhc3NOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25maWd1cmF0aW9uKClMYW5kcm9pZC9jb250ZW50L3Jlcy9Db25maWd1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV2ZW50VHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG9ydGN1dElkKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVTdGFtcCgpSiIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHVVJBVElPTl9DSEFOR0UiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUdVQVJEX0hJRERFTiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlHVUFSRF9TSE9XTiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNT1ZFX1RPX0JBQ0tHUk9VTkQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PVkVfVE9fRk9SRUdST1VORCIvPgotCQk8ZmllbGQgbmFtZT0iTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOX0lOVEVSQUNUSVZFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTl9OT05fSU5URVJBQ1RJVkUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU0hPUlRDVVRfSU5WT0NBVElPTiIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFOREJZX0JVQ0tFVF9DSEFOR0VEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlVTRVJfSU5URVJBQ1RJT04iIHNpbmNlPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL3VzYWdlL1VzYWdlU3RhdHMiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2FwcC91c2FnZS9Vc2FnZVN0YXRzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKExhbmRyb2lkL2FwcC91c2FnZS9Vc2FnZVN0YXRzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rmlyc3RUaW1lU3RhbXAoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXN0VGltZVN0YW1wKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFzdFRpbWVVc2VkKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdGFsVGltZUluRm9yZWdyb3VuZCgpSiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYXBwL3VzYWdlL1VzYWdlU3RhdHNNYW5hZ2VyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwU3RhbmRieUJ1Y2tldCgpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBcHBJbmFjdGl2ZShMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnlBbmRBZ2dyZWdhdGVVc2FnZVN0YXRzKEpKKUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5Q29uZmlndXJhdGlvbnMoSUpKKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeUV2ZW50U3RhdHMoSUpKKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5RXZlbnRzKEpKKUxhbmRyb2lkL2FwcC91c2FnZS9Vc2FnZUV2ZW50czsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeUV2ZW50c0ZvclNlbGYoSkopTGFuZHJvaWQvYXBwL3VzYWdlL1VzYWdlRXZlbnRzOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnlVc2FnZVN0YXRzKElKSilMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlZBTF9CRVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlZBTF9EQUlMWSIvPgotCQk8ZmllbGQgbmFtZT0iSU5URVJWQUxfTU9OVEhMWSIvPgotCQk8ZmllbGQgbmFtZT0iSU5URVJWQUxfV0VFS0xZIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlZBTF9ZRUFSTFkiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQU5EQllfQlVDS0VUX0FDVElWRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFOREJZX0JVQ0tFVF9GUkVRVUVOVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFOREJZX0JVQ0tFVF9SQVJFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQU5EQllfQlVDS0VUX1dPUktJTkdfU0VUIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRIb3N0IiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFsbG9jYXRlQXBwV2lkZ2V0SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhclZpZXdzKClWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVWaWV3KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJTGFuZHJvaWQvYXBwd2lkZ2V0L0FwcFdpZGdldFByb3ZpZGVySW5mbzspTGFuZHJvaWQvYXBwd2lkZ2V0L0FwcFdpZGdldEhvc3RWaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZUFsbEhvc3RzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVsZXRlQXBwV2lkZ2V0SWQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVsZXRlSG9zdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFwcFdpZGdldElkcygpW0kiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlVmlldyhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SUxhbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRQcm92aWRlckluZm87KUxhbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRIb3N0VmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByb3ZpZGVyQ2hhbmdlZChJTGFuZHJvaWQvYXBwd2lkZ2V0L0FwcFdpZGdldFByb3ZpZGVySW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJvdmlkZXJzQ2hhbmdlZCgpViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBcHBXaWRnZXRDb25maWd1cmVBY3Rpdml0eUZvclJlc3VsdChMYW5kcm9pZC9hcHAvQWN0aXZpdHk7SUlJTGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydExpc3RlbmluZygpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BMaXN0ZW5pbmcoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRIb3N0VmlldyIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9GcmFtZUxheW91dCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBXaWRnZXRJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFwcFdpZGdldEluZm8oKUxhbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRQcm92aWRlckluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFBhZGRpbmdGb3JXaWRnZXQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylMYW5kcm9pZC9ncmFwaGljcy9SZWN0OyIgc2luY2U9IjE1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFZpZXcoKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcnJvclZpZXcoKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmVwYXJlVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBcHBXaWRnZXQoSUxhbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRQcm92aWRlckluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeGVjdXRvcihMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUFwcFdpZGdldChMYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVBcHBXaWRnZXRPcHRpb25zKExhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQXBwV2lkZ2V0U2l6ZShMYW5kcm9pZC9vcy9CdW5kbGU7SUlJSSlWIiBzaW5jZT0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRNYW5hZ2VyIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kQXBwV2lkZ2V0SWQoSUxhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspViIgcmVtb3ZlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kQXBwV2lkZ2V0SWRJZkFsbG93ZWQoSUxhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspWiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZEFwcFdpZGdldElkSWZBbGxvd2VkKElMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGFuZHJvaWQvb3MvQnVuZGxlOylaIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kQXBwV2lkZ2V0SWRJZkFsbG93ZWQoSUxhbmRyb2lkL29zL1VzZXJIYW5kbGU7TGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xhbmRyb2lkL29zL0J1bmRsZTspWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwV2lkZ2V0SWRzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBXaWRnZXRJbmZvKEkpTGFuZHJvaWQvYXBwd2lkZ2V0L0FwcFdpZGdldFByb3ZpZGVySW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBXaWRnZXRPcHRpb25zKEkpTGFuZHJvaWQvb3MvQnVuZGxlOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFsbGVkUHJvdmlkZXJzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFsbGVkUHJvdmlkZXJzRm9yUGFja2FnZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YWxsZWRQcm92aWRlcnNGb3JQcm9maWxlKExhbmRyb2lkL29zL1VzZXJIYW5kbGU7KUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGFuZHJvaWQvYXBwd2lkZ2V0L0FwcFdpZGdldE1hbmFnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZXF1ZXN0UGluQXBwV2lkZ2V0U3VwcG9ydGVkKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlBcHBXaWRnZXRWaWV3RGF0YUNoYW5nZWQoSUkpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5QXBwV2lkZ2V0Vmlld0RhdGFDaGFuZ2VkKFtJSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJ0aWFsbHlVcGRhdGVBcHBXaWRnZXQoSUxhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3czspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFydGlhbGx5VXBkYXRlQXBwV2lkZ2V0KFtJTGFuZHJvaWQvd2lkZ2V0L1JlbW90ZVZpZXdzOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0UGluQXBwV2lkZ2V0KExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9vcy9CdW5kbGU7TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUFwcFdpZGdldChJTGFuZHJvaWQvd2lkZ2V0L1JlbW90ZVZpZXdzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQXBwV2lkZ2V0KExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVBcHBXaWRnZXQoW0lMYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVBcHBXaWRnZXRPcHRpb25zKElMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUFwcFdpZGdldFByb3ZpZGVySW5mbyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FQUFdJREdFVF9CSU5EIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BUFBXSURHRVRfQ09ORklHVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQVBQV0lER0VUX0RFTEVURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BUFBXSURHRVRfRElTQUJMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BUFBXSURHRVRfRU5BQkxFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FQUFdJREdFVF9IT1NUX1JFU1RPUkVEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BUFBXSURHRVRfT1BUSU9OU19DSEFOR0VEIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BUFBXSURHRVRfUElDSyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FQUFdJREdFVF9SRVNUT1JFRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQVBQV0lER0VUX1VQREFURSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQVBQV0lER0VUX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BUFBXSURHRVRfSURTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BUFBXSURHRVRfT0xEX0lEUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BUFBXSURHRVRfT1BUSU9OUyIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BUFBXSURHRVRfUFJFVklFVyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BUFBXSURHRVRfUFJPVklERVIiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQVBQV0lER0VUX1BST1ZJREVSX1BST0ZJTEUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ1VTVE9NX0VYVFJBUyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ1VTVE9NX0lORk8iLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0hPU1RfSUQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iSU5WQUxJRF9BUFBXSURHRVRfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFfREFUQV9BUFBXSURHRVRfUFJPVklERVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QVElPTl9BUFBXSURHRVRfSE9TVF9DQVRFR09SWSIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUFRJT05fQVBQV0lER0VUX01BWF9IRUlHSFQiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BUSU9OX0FQUFdJREdFVF9NQVhfV0lEVEgiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BUSU9OX0FQUFdJREdFVF9NSU5fSEVJR0hUIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QVElPTl9BUFBXSURHRVRfTUlOX1dJRFRIIiBzaW5jZT0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRQcm92aWRlciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQnJvYWRjYXN0UmVjZWl2ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFwcFdpZGdldE9wdGlvbnNDaGFuZ2VkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9hcHB3aWRnZXQvQXBwV2lkZ2V0TWFuYWdlcjtJTGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRlbGV0ZWQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O1tJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRpc2FibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRW5hYmxlZChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlc3RvcmVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtbSVtJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVXBkYXRlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9hcHB3aWRnZXQvQXBwV2lkZ2V0TWFuYWdlcjtbSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9hcHB3aWRnZXQvQXBwV2lkZ2V0UHJvdmlkZXJJbmZvIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lKClMYW5kcm9pZC9hcHB3aWRnZXQvQXBwV2lkZ2V0UHJvdmlkZXJJbmZvOyIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvZmlsZSgpTGFuZHJvaWQvb3MvVXNlckhhbmRsZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRJY29uKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZExhYmVsKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZFByZXZpZXdJbWFnZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SSlMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iUkVTSVpFX0JPVEgiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iUkVTSVpFX0hPUklaT05UQUwiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iUkVTSVpFX05PTkUiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iUkVTSVpFX1ZFUlRJQ0FMIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IldJREdFVF9DQVRFR09SWV9IT01FX1NDUkVFTiIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSURHRVRfQ0FURUdPUllfS0VZR1VBUkQiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iV0lER0VUX0NBVEVHT1JZX1NFQVJDSEJPWCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSURHRVRfRkVBVFVSRV9ISURFX0ZST01fUElDS0VSIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IldJREdFVF9GRUFUVVJFX1JFQ09ORklHVVJBQkxFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9ImF1dG9BZHZhbmNlVmlld0lkIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbmZpZ3VyZSIvPgotCQk8ZmllbGQgbmFtZT0iaWNvbiIvPgotCQk8ZmllbGQgbmFtZT0iaW5pdGlhbEtleWd1YXJkTGF5b3V0IiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9ImluaXRpYWxMYXlvdXQiLz4KLQkJPGZpZWxkIG5hbWU9ImxhYmVsIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ibWluSGVpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtaW5SZXNpemVIZWlnaHQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ibWluUmVzaXplV2lkdGgiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ibWluV2lkdGgiLz4KLQkJPGZpZWxkIG5hbWU9InByZXZpZXdJbWFnZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm92aWRlciIvPgotCQk8ZmllbGQgbmFtZT0icmVzaXplTW9kZSIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJ1cGRhdGVQZXJpb2RNaWxsaXMiLz4KLQkJPGZpZWxkIG5hbWU9IndpZGdldENhdGVnb3J5IiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IndpZGdldEZlYXR1cmVzIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhBMmRwIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFByb2ZpbGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoUHJvZmlsZSRTZXJ2aWNlTGlzdGVuZXI7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQTJkcFBsYXlpbmcoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTspWiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NPTk5FQ1RJT05fU1RBVEVfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BMQVlJTkdfU1RBVEVfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfTk9UX1BMQVlJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX1BMQVlJTkciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhBZGFwdGVyIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWxEaXNjb3ZlcnkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja0JsdWV0b290aEFkZHJlc3MoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZVByb2ZpbGVQcm94eShJTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFByb2ZpbGU7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2FibGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmFibGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBZGRyZXNzKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCbHVldG9vdGhMZUFkdmVydGlzZXIoKUxhbmRyb2lkL2JsdWV0b290aC9sZS9CbHVldG9vdGhMZUFkdmVydGlzZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCbHVldG9vdGhMZVNjYW5uZXIoKUxhbmRyb2lkL2JsdWV0b290aC9sZS9CbHVldG9vdGhMZVNjYW5uZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb25kZWREZXZpY2VzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0QWRhcHRlcigpTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEFkYXB0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGVNYXhpbXVtQWR2ZXJ0aXNpbmdEYXRhTGVuZ3RoKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9maWxlQ29ubmVjdGlvblN0YXRlKEkpSSIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvZmlsZVByb3h5KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoUHJvZmlsZSRTZXJ2aWNlTGlzdGVuZXI7SSlaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZW1vdGVEZXZpY2UoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVtb3RlRGV2aWNlKFtCKUxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2FuTW9kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEaXNjb3ZlcmluZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTGUyTVBoeVN1cHBvcnRlZCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMZUNvZGVkUGh5U3VwcG9ydGVkKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xlRXh0ZW5kZWRBZHZlcnRpc2luZ1N1cHBvcnRlZCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMZVBlcmlvZGljQWR2ZXJ0aXNpbmdTdXBwb3J0ZWQoKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTXVsdGlwbGVBZHZlcnRpc2VtZW50U3VwcG9ydGVkKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc09mZmxvYWRlZEZpbHRlcmluZ1N1cHBvcnRlZCgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPZmZsb2FkZWRTY2FuQmF0Y2hpbmdTdXBwb3J0ZWQoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Imxpc3RlblVzaW5nSW5zZWN1cmVSZmNvbW1XaXRoU2VydmljZVJlY29yZChMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL1VVSUQ7KUxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhTZXJ2ZXJTb2NrZXQ7IiBzaW5jZT0iMTAiLz4KLQkJPG1ldGhvZCBuYW1lPSJsaXN0ZW5Vc2luZ1JmY29tbVdpdGhTZXJ2aWNlUmVjb3JkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvVVVJRDspTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFNlcnZlclNvY2tldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYW1lKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnREaXNjb3ZlcnkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydExlU2NhbihMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoQWRhcHRlciRMZVNjYW5DYWxsYmFjazspWiIgc2luY2U9IjE4IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0TGVTY2FuKFtMamF2YS91dGlsL1VVSUQ7TGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEFkYXB0ZXIkTGVTY2FuQ2FsbGJhY2s7KVoiIHNpbmNlPSIxOCIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wTGVTY2FuKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhBZGFwdGVyJExlU2NhbkNhbGxiYWNrOylWIiBzaW5jZT0iMTgiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ09OTkVDVElPTl9TVEFURV9DSEFOR0VEIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9ESVNDT1ZFUllfRklOSVNIRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9ESVNDT1ZFUllfU1RBUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0xPQ0FMX05BTUVfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1JFUVVFU1RfRElTQ09WRVJBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUkVRVUVTVF9FTkFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TQ0FOX01PREVfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NUQVRFX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DT05ORUNUSU9OX1NUQVRFIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0RJU0NPVkVSQUJMRV9EVVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTE9DQUxfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJFVklPVVNfQ09OTkVDVElPTl9TVEFURSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUkVWSU9VU19TQ0FOX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BSRVZJT1VTX1NUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TQ0FOX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0FOX01PREVfQ09OTkVDVEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNDQU5fTU9ERV9DT05ORUNUQUJMRV9ESVNDT1ZFUkFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNDQU5fTU9ERV9OT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9DT05ORUNURUQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfQ09OTkVDVElORyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9ESVNDT05ORUNURUQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfRElTQ09OTkVDVElORyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9PRkYiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9UVVJOSU5HX09GRiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfVFVSTklOR19PTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEFkYXB0ZXIkTGVTY2FuQ2FsbGJhY2siIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxlU2NhbihMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlO0lbQilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoQXNzaWduZWROdW1iZXJzIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQU1QX09GX0FNRVJJQ0EiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQUNDRUxfU0VNSUNPTkRVQ1RPUiIvPgotCQk8ZmllbGQgbmFtZT0iQUNFX1NFTlNPUiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBRElEQVMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQURWQU5DRURfUEFOTU9CSUxfU1lTVEVNUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBSVJPSEFfVEVDSE5PTE9HWSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTENBVEVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTFBXSVNFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkFNSUNDT01fRUxFQ1RST05JQ1MiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQVBMSVgiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQVBQTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkFQVF9MSUNFTlNJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkFSQ0hPUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUlBfREVWSUNFUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVEhFUk9TX0NPTU1VTklDQVRJT05TIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVE1FTCIvPgotCQk8ZmllbGQgbmFtZT0iQVVTVENPX0NPTU1VTklDQVRJT05fU1lTVEVNUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRPTkVUX01PQklMRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVkFHTyIvPgotCQk8ZmllbGQgbmFtZT0iQVZNX0JFUkxJTiIvPgotCQk8ZmllbGQgbmFtZT0iQV9BTkRfRF9FTkdJTkVFUklORyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBX0FORF9SX0NBTUJSSURHRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EU1BFRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfWElfSU5URVJOQVRJT05BTCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCREVfVEVDSE5PTE9HWSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCRUFUU19FTEVDVFJPTklDUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCRUFVVElGVUxfRU5URVJQUklTRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCRUtFWSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCRUxLSU5fSU5URVJOQVRJT05BTCIvPgotCQk8ZmllbGQgbmFtZT0iQklOQVVSSUMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQklPU0VOVFJPTklDUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCTFVFR0lHQSIvPgotCQk8ZmllbGQgbmFtZT0iQkxVRVJBRElPUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCTFVFVE9PVEhfU0lHIi8+Ci0JCTxmaWVsZCBuYW1lPSJCTFVFVFJFS19URUNITk9MT0dJRVMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQk9TRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCUklBUlRFSyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCUk9BRENPTSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FFTl9SRklEIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTUJSSURHRV9TSUxJQ09OX1JBRElPIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRDIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSU5FVElYIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkNMQVJJTk9YX1RFQ0hOT0xPR0lFUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUkZZIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTU1JTCIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORVhBTlRfU1lTVEVNUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OTkVDVEJMVUUiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVElORU5UQUxfQVVUT01PVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OV0lTRV9URUNITk9MT0dZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVElWRV9URUNITk9MT0dZIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkNfVEVDSE5PTE9HSUVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQU5MRVJTIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTE9STUVfUFVCTElTSElOR19DT01QQU5ZIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkRFWENPTSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESUFMT0dfU0VNSUNPTkRVQ1RPUiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESUdJQU5TV0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFQ0xJUFNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFQ09URVNUIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVMR0FUT19TWVNURU1TIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVNX01JQ1JPRUxFQ1RST05JQ19NQVJJTiIvPgotCQk8ZmllbGQgbmFtZT0iRVFVSU5PWF9BRyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFUklDU1NPTl9URUNITk9MT0dZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkxVTUEiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRlJFRTJNT1ZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGVU5BSV9FTEVDVFJJQyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHQVJNSU5fSU5URVJOQVRJT05BTCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHQ1RfU0VNSUNPTkRVQ1RPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0VMTyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHRU5FUSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHRU5FUkFMX01PVE9SUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHRU5OVU0iLz4KLQkJPGZpZWxkIG5hbWU9IkdFT0ZPUkNFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkdJQlNPTl9HVUlUQVJTIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkdOX05FVENPTSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTl9SRVNPVU5EIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkdPT0dMRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHUkVFTl9USFJPVFRMRV9HQU1FUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHUk9VUF9TRU5TRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIQU5MWU5OX1RFQ0hOT0xPR0lFUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIQVJNQU5fSU5URVJOQVRJT05BTCIvPgotCQk8ZmllbGQgbmFtZT0iSEVXTEVUVF9QQUNLQVJEIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkhJVEFDSEkiLz4KLQkJPGZpZWxkIG5hbWU9IkhPU0lERU4iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iSUJNIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTkZJTkVPTl9URUNITk9MT0dJRVMiLz4KLQkJPGZpZWxkIG5hbWU9IklOR0VOSUVVUl9TWVNURU1HUlVQUEVfWkFITiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFR1JBVEVEX1NJTElDT05fU09MVVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVHUkFURURfU1lTVEVNX1NPTFVUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFTCIvPgotCQk8ZmllbGQgbmFtZT0iSU5WRU5URUwiLz4KLQkJPGZpZWxkIG5hbWU9IklQRVhUUkVNRSIvPgotCQk8ZmllbGQgbmFtZT0iSV9URUNIX0RZTkFNSUNfR0xPQkFMX0RJU1RSSUJVVElPTiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJKQVdCT05FIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkpJQU5HU1VfVE9QUE9XRVJfQVVUT01PVElWRV9FTEVDVFJPTklDUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJKT0hOU09OX0NPTlRST0xTIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkpfQU5EX00iLz4KLQkJPGZpZWxkIG5hbWU9IktBV0FOVEVDSCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLQ19URUNITk9MT0dZIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRU5TSU5HVE9OX0NPTVBVVEVSX1BST0RVQ1RTX0dST1VQIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkxBSVJEX1RFQ0hOT0xPR0lFUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMRVNTV0lSRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMR19FTEVDVFJPTklDUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMSU5BSyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMVUNFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkxVRFVTX0hFTFNJTktJIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BQ1JPTklYIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQUdORVRJX01BUkVMTEkiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTUFOU0VMTEEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BUlZFTEwiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVFNVU0hJVEFfRUxFQ1RSSUMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1DMTAiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFURUsiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FU09fSU5URVJOQVRJT05BTCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX1dBVENIIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FV1RFTF9URUNITk9MT0dZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUNPTU1BTkQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTUlDUk9DSElQX1RFQ0hOT0xPR1kiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTUlDUk9TT0ZUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5EVFJFRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNSVNGSVRfV0VBUkFCTEVTIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JVEVMX1NFTUlDT05EVUNUT1IiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JVFNVQklTSElfRUxFQ1RSSUMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PQklMSUFOX0NPUlBPUkFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05TVEVSIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PVE9ST0xBIi8+Ci0JCTxmaWVsZCBuYW1lPSJNU1RBUl9TRU1JQ09ORFVDVE9SIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1VWklLIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FQyIvPgotCQk8ZmllbGQgbmFtZT0iTkVDX0xJR0hUSU5HIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FV0xPR0lDIi8+Ci0JCTxmaWVsZCBuYW1lPSJOSUtFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik5JTkVfU09MVVRJT05TIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PS0lBX01PQklMRV9QSE9ORVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PUkRJQ19TRU1JQ09ORFVDVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1JXT09EX1NZU1RFTVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9ETV9URUNITk9MT0dZIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik9NRUdBV0FWRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPTlNFVF9DT01QVVRFUiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVOX0lOVEVSRkFDRSIvPgotCQk8ZmllbGQgbmFtZT0iT1RMX0RZTkFNSUNTIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlBBTkRBX09DRUFOIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlBBUlJPVCIvPgotCQk8ZmllbGQgbmFtZT0iUEFSVEhVU19URUNITk9MT0dJRVMiLz4KLQkJPGZpZWxkIG5hbWU9IlBBU1NJRl9TRU1JQ09ORFVDVE9SIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlBFVEVSX1NZU1RFTVRFQ0hOSUsiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iUEhJTElQU19TRU1JQ09ORFVDVE9SUyIvPgotCQk8ZmllbGQgbmFtZT0iUExBTlRST05JQ1MiLz4KLQkJPGZpZWxkIG5hbWU9IlBPTEFSX0VMRUNUUk8iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iUE9MQVJfRUxFQ1RST19FVVJPUEUiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPQ1RFUl9BTkRfR0FNQkxFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxDT01NIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMQ09NTV9DT05ORUNURURfRVhQRVJJRU5DRVMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iUVVBTENPTU1fSU5OT1ZBVElPTl9DRU5URVIiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iUVVBTENPTU1fTEFCUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMQ09NTV9URUNITk9MT0dJRVMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iUVVJTlRJQyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJRVVVQUEEiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iUkFMSU5LX1RFQ0hOT0xPR1kiLz4KLQkJPGZpZWxkIG5hbWU9IlJEQV9NSUNST0VMRUNUUk9OSUNTIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQUxURUtfU0VNSUNPTkRVQ1RPUiIvPgotCQk8ZmllbGQgbmFtZT0iUkVEX00iLz4KLQkJPGZpZWxkIG5hbWU9IlJFTkVTQVNfVEVDSE5PTE9HWSIvPgotCQk8ZmllbGQgbmFtZT0iUkVTRUFSQ0hfSU5fTU9USU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRl9NSUNST19ERVZJQ0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJSSVZJRVJBV0FWRVMiLz4KLQkJPGZpZWxkIG5hbWU9IlJPSERFX0FORF9TQ0hXQVJaIi8+Ci0JCTxmaWVsZCBuYW1lPSJSVFhfVEVMRUNPTSIvPgotCQk8ZmllbGQgbmFtZT0iU0FNU1VOR19FTEVDVFJPTklDUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQVJJU19DWUNMSU5HX0dST1VQIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlNFRVJTX1RFQ0hOT0xPR1kiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iU0VJS09fRVBTT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNFTEZMWSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU1JTElOSyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5OSEVJU0VSX0NPTU1VTklDQVRJT05TIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlNIQU5HSEFJX1NVUEVSX1NNQVJUX0VMRUNUUk9OSUNTIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlNIRU5aSEVOX0VYQ0VMU0VDVV9EQVRBX1RFQ0hOT0xPR1kiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iU0lHTklBX1RFQ0hOT0xPR0lFUyIvPgotCQk8ZmllbGQgbmFtZT0iU0lMSUNPTl9XQVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSVJGX1RFQ0hOT0xPR1kiLz4KLQkJPGZpZWxkIG5hbWU9IlNPQ0tFVF9NT0JJTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNPTllfRVJJQ1NTT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNPVU5EX0lEIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlNQT1JUU19UUkFDS0lOR19URUNITk9MT0dJRVMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iU1JfTUVESVpJTkVMRUtUUk9OSUsiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBQ0NBVE9fQ09NTVVOSUNBVElPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQUxNQVJUX1RFQ0hOT0xPR1kiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBUktFWV9MQUJPUkFUT1JJRVMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iU1RPTExNQU5fRV9QTFVTX1YiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iU1RPTkVTVFJFRVRfT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVF9NSUNST0VMRUNUUk9OSUNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVU1NSVRfREFUQV9DT01NVU5JQ0FUSU9OUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVVVOVE8iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iU1dJUkxfTkVUV09SS1MiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iU1lNQk9MX1RFQ0hOT0xPR0lFUyIvPgotCQk8ZmllbGQgbmFtZT0iU1lOT1BTWVMiLz4KLQkJPGZpZWxkIG5hbWU9IlNZU1RFTVNfQU5EX0NISVBTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTX1BPV0VSX0VMRUNUUk9OSUNTIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlRBSVhJTkdCQU5HX1RFQ0hOT0xPR1kiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVEVOT1ZJUyIvPgotCQk8ZmllbGQgbmFtZT0iVEVSQVgiLz4KLQkJPGZpZWxkIG5hbWU9IlRFWEFTX0lOU1RSVU1FTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSElOS09QVElDUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUSFJFRUNPTSIvPgotCQk8ZmllbGQgbmFtZT0iVEhSRUVfRElKT1kiLz4KLQkJPGZpZWxkIG5hbWU9IlRIUkVFX0RTUCIvPgotCQk8ZmllbGQgbmFtZT0iVElNRUtFRVBJTkdfU1lTVEVNUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FWF9HUk9VUF9VU0EiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVE9QQ09STl9QT1NJVElPTklOR19TWVNURU1TIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlRPU0hJQkEiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TSUxJQ0EiLz4KLQkJPGZpZWxkIG5hbWU9IlRSRUxBQiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUVFBDT00iLz4KLQkJPGZpZWxkIG5hbWU9IlRYVFIiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVFpFUk9fVEVDSE5PTE9HSUVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklWRVJTQUxfRUxFQ1RST05JQ1MiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVkVSVFUiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVklTVEVPTiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWSVpJTyIvPgotCQk8ZmllbGQgbmFtZT0iVk9ZRVRSQV9UVVJUTEVfQkVBQ0giIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iV0FWRVBMVVNfVEVDSE5PTE9HWSIvPgotCQk8ZmllbGQgbmFtZT0iV0lDRU5UUklDIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSURDT01NIi8+Ci0JCTxmaWVsZCBuYW1lPSJXVVhJX1ZJTUlDUk8iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iWkVFVk8iLz4KLQkJPGZpZWxkIG5hbWU9IlpFUjAxX1RWIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlpPTU0iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iWlNDQU5fU09GVFdBUkUiIHNpbmNlPSIxOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aENsYXNzIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZUNsYXNzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFqb3JEZXZpY2VDbGFzcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1NlcnZpY2UoSSlaIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoQ2xhc3MkRGV2aWNlIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX1ZJREVPX0NBTUNPUkRFUiIvPgotCQk8ZmllbGQgbmFtZT0iQVVESU9fVklERU9fQ0FSX0FVRElPIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT19WSURFT19IQU5EU0ZSRUUiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX1ZJREVPX0hFQURQSE9ORVMiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX1ZJREVPX0hJRklfQVVESU8iLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX1ZJREVPX0xPVURTUEVBS0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT19WSURFT19NSUNST1BIT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT19WSURFT19QT1JUQUJMRV9BVURJTyIvPgotCQk8ZmllbGQgbmFtZT0iQVVESU9fVklERU9fU0VUX1RPUF9CT1giLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX1ZJREVPX1VOQ0FURUdPUklaRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX1ZJREVPX1ZDUiIvPgotCQk8ZmllbGQgbmFtZT0iQVVESU9fVklERU9fVklERU9fQ0FNRVJBIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT19WSURFT19WSURFT19DT05GRVJFTkNJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX1ZJREVPX1ZJREVPX0RJU1BMQVlfQU5EX0xPVURTUEVBS0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT19WSURFT19WSURFT19HQU1JTkdfVE9ZIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT19WSURFT19WSURFT19NT05JVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT19WSURFT19XRUFSQUJMRV9IRUFEU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QVVRFUl9ERVNLVE9QIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QVVRFUl9IQU5ESEVMRF9QQ19QREEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBVVEVSX0xBUFRPUCIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUFVURVJfUEFMTV9TSVpFX1BDX1BEQSIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUFVURVJfU0VSVkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QVVRFUl9VTkNBVEVHT1JJWkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QVVRFUl9XRUFSQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iSEVBTFRIX0JMT09EX1BSRVNTVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRUFMVEhfREFUQV9ESVNQTEFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRUFMVEhfR0xVQ09TRSIvPgotCQk8ZmllbGQgbmFtZT0iSEVBTFRIX1BVTFNFX09YSU1FVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRUFMVEhfUFVMU0VfUkFURSIvPgotCQk8ZmllbGQgbmFtZT0iSEVBTFRIX1RIRVJNT01FVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRUFMVEhfVU5DQVRFR09SSVpFRCIvPgotCQk8ZmllbGQgbmFtZT0iSEVBTFRIX1dFSUdISU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORV9DRUxMVUxBUiIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVfQ09SRExFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT05FX0lTRE4iLz4KLQkJPGZpZWxkIG5hbWU9IlBIT05FX01PREVNX09SX0dBVEVXQVkiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT05FX1NNQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORV9VTkNBVEVHT1JJWkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT1lfQ09OVFJPTExFUiIvPgotCQk8ZmllbGQgbmFtZT0iVE9ZX0RPTExfQUNUSU9OX0ZJR1VSRSIvPgotCQk8ZmllbGQgbmFtZT0iVE9ZX0dBTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlRPWV9ST0JPVCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ZX1VOQ0FURUdPUklaRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPWV9WRUhJQ0xFIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUFSQUJMRV9HTEFTU0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUFSQUJMRV9IRUxNRVQiLz4KLQkJPGZpZWxkIG5hbWU9IldFQVJBQkxFX0pBQ0tFVCIvPgotCQk8ZmllbGQgbmFtZT0iV0VBUkFCTEVfUEFHRVIiLz4KLQkJPGZpZWxkIG5hbWU9IldFQVJBQkxFX1VOQ0FURUdPUklaRUQiLz4KLQkJPGZpZWxkIG5hbWU9IldFQVJBQkxFX1dSSVNUX1dBVENIIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoQ2xhc3MkRGV2aWNlJE1ham9yIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX1ZJREVPIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QVVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iSEVBTFRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTUFHSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSVNDIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJQRVJJUEhFUkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iVE9ZIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTkNBVEVHT1JJWkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUFSQUJMRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aENsYXNzJFNlcnZpY2UiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQVVESU8iLz4KLQkJPGZpZWxkIG5hbWU9IkNBUFRVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IklORk9STUFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSU1JVEVEX0RJU0NPVkVSQUJJTElUWSIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SS0lORyIvPgotCQk8ZmllbGQgbmFtZT0iT0JKRUNUX1RSQU5TRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT1NJVElPTklORyIvPgotCQk8ZmllbGQgbmFtZT0iUkVOREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJURUxFUEhPTlkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2UiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0R2F0dChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7WkxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0Q2FsbGJhY2s7KUxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0OyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29ubmVjdEdhdHQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O1pMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dENhbGxiYWNrO0kpTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQ7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0R2F0dChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7WkxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0Q2FsbGJhY2s7SUkpTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQ7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0R2F0dChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7WkxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0Q2FsbGJhY2s7SUlMYW5kcm9pZC9vcy9IYW5kbGVyOylMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUJvbmQoKVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUluc2VjdXJlUmZjb21tU29ja2V0VG9TZXJ2aWNlUmVjb3JkKExqYXZhL3V0aWwvVVVJRDspTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFNvY2tldDsiIHNpbmNlPSIxMCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVJmY29tbVNvY2tldFRvU2VydmljZVJlY29yZChMamF2YS91dGlsL1VVSUQ7KUxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhTb2NrZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmV0Y2hVdWlkc1dpdGhTZHAoKVoiIHNpbmNlPSIxNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkZHJlc3MoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJsdWV0b290aENsYXNzKClMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9uZFN0YXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpSSIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXVpZHMoKVtMYW5kcm9pZC9vcy9QYXJjZWxVdWlkOyIgc2luY2U9IjE1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFpcmluZ0NvbmZpcm1hdGlvbihaKVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBpbihbQilaIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BQ0xfQ09OTkVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQUNMX0RJU0NPTk5FQ1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FDTF9ESVNDT05ORUNUX1JFUVVFU1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0JPTkRfU1RBVEVfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NMQVNTX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9GT1VORCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX05BTUVfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BBSVJJTkdfUkVRVUVTVCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVVVJRCIgc2luY2U9IjE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCT05EX0JPTkRFRCIvPgotCQk8ZmllbGQgbmFtZT0iQk9ORF9CT05ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT05EX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkRFVklDRV9UWVBFX0NMQVNTSUMiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iREVWSUNFX1RZUEVfRFVBTCIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERVZJQ0VfVFlQRV9MRSIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERVZJQ0VfVFlQRV9VTktOT1dOIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9CT05EX1NUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DTEFTUyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfREVWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QQUlSSU5HX0tFWSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QQUlSSU5HX1ZBUklBTlQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJFVklPVVNfQk9ORF9TVEFURSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUlNTSSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfVVVJRCIgc2luY2U9IjE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQQUlSSU5HX1ZBUklBTlRfUEFTU0tFWV9DT05GSVJNQVRJT04iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iUEFJUklOR19WQVJJQU5UX1BJTiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQSFlfTEVfMU0iIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUEhZX0xFXzFNX01BU0siIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUEhZX0xFXzJNIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlBIWV9MRV8yTV9NQVNLIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlBIWV9MRV9DT0RFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQSFlfTEVfQ09ERURfTUFTSyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQSFlfT1BUSU9OX05PX1BSRUZFUlJFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQSFlfT1BUSU9OX1MyIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlBIWV9PUFRJT05fUzgiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNQT1JUX0FVVE8iIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNQT1JUX0JSRURSIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TUE9SVF9MRSIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dCIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhQcm9maWxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWJvcnRSZWxpYWJsZVdyaXRlKClWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhYm9ydFJlbGlhYmxlV3JpdGUoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTspViIgZGVwcmVjYXRlZD0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiZWdpblJlbGlhYmxlV3JpdGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNjb25uZWN0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzY292ZXJTZXJ2aWNlcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWN1dGVSZWxpYWJsZVdyaXRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlKClMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZpY2UoTGphdmEvdXRpbC9VVUlEOylMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dFNlcnZpY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VydmljZXMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkQ2hhcmFjdGVyaXN0aWMoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRDaGFyYWN0ZXJpc3RpYzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWREZXNjcmlwdG9yKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0RGVzY3JpcHRvcjspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRQaHkoKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRSZW1vdGVSc3NpKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdENvbm5lY3Rpb25Qcmlvcml0eShJKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RNdHUoSSlaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGFyYWN0ZXJpc3RpY05vdGlmaWNhdGlvbihMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dENoYXJhY3RlcmlzdGljO1opWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZWZlcnJlZFBoeShJSUkpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVDaGFyYWN0ZXJpc3RpYyhMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dENoYXJhY3RlcmlzdGljOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVEZXNjcmlwdG9yKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0RGVzY3JpcHRvcjspWiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OTkVDVElPTl9QUklPUklUWV9CQUxBTkNFRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05ORUNUSU9OX1BSSU9SSVRZX0hJR0giIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OTkVDVElPTl9QUklPUklUWV9MT1dfUE9XRVIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iR0FUVF9DT05ORUNUSU9OX0NPTkdFU1RFRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJHQVRUX0ZBSUxVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdBVFRfSU5TVUZGSUNJRU5UX0FVVEhFTlRJQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHQVRUX0lOU1VGRklDSUVOVF9FTkNSWVBUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHQVRUX0lOVkFMSURfQVRUUklCVVRFX0xFTkdUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0FUVF9JTlZBTElEX09GRlNFVCIvPgotCQk8ZmllbGQgbmFtZT0iR0FUVF9SRUFEX05PVF9QRVJNSVRURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdBVFRfUkVRVUVTVF9OT1RfU1VQUE9SVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHQVRUX1NVQ0NFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdBVFRfV1JJVEVfTk9UX1BFUk1JVFRFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRDYWxsYmFjayIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0O0xhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0Q2hhcmFjdGVyaXN0aWM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNoYXJhY3RlcmlzdGljUmVhZChMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dDtMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dENoYXJhY3RlcmlzdGljO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2hhcmFjdGVyaXN0aWNXcml0ZShMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dDtMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dENoYXJhY3RlcmlzdGljO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29ubmVjdGlvblN0YXRlQ2hhbmdlKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0O0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRlc2NyaXB0b3JSZWFkKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0O0xhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0RGVzY3JpcHRvcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRlc2NyaXB0b3JXcml0ZShMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dDtMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dERlc2NyaXB0b3I7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25NdHVDaGFuZ2VkKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGh5UmVhZChMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dDtJSUkpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QaHlVcGRhdGUoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQ7SUlJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVhZFJlbW90ZVJzc2koTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQ7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVsaWFibGVXcml0ZUNvbXBsZXRlZChMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlcnZpY2VzRGlzY292ZXJlZChMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dDtJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0Q2hhcmFjdGVyaXN0aWMiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9VVUlEO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGREZXNjcmlwdG9yKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0RGVzY3JpcHRvcjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlc2NyaXB0b3IoTGphdmEvdXRpbC9VVUlEOylMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dERlc2NyaXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzY3JpcHRvcnMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbG9hdFZhbHVlKElJKUxqYXZhL2xhbmcvRmxvYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2VJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludFZhbHVlKElJKUxqYXZhL2xhbmcvSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJtaXNzaW9ucygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3BlcnRpZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlKClMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dFNlcnZpY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nVmFsdWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVdWlkKClMamF2YS91dGlsL1VVSUQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V3JpdGVUeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFsdWUoSUlJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYWx1ZShJSUlJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYWx1ZShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZhbHVlKFtCKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXcml0ZVR5cGUoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9GTE9BVCIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX1NGTE9BVCIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX1NJTlQxNiIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX1NJTlQzMiIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX1NJTlQ4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfVUlOVDE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfVUlOVDMyIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfVUlOVDgiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUk1JU1NJT05fUkVBRCIvPgotCQk8ZmllbGQgbmFtZT0iUEVSTUlTU0lPTl9SRUFEX0VOQ1JZUFRFRCIvPgotCQk8ZmllbGQgbmFtZT0iUEVSTUlTU0lPTl9SRUFEX0VOQ1JZUFRFRF9NSVRNIi8+Ci0JCTxmaWVsZCBuYW1lPSJQRVJNSVNTSU9OX1dSSVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQRVJNSVNTSU9OX1dSSVRFX0VOQ1JZUFRFRCIvPgotCQk8ZmllbGQgbmFtZT0iUEVSTUlTU0lPTl9XUklURV9FTkNSWVBURURfTUlUTSIvPgotCQk8ZmllbGQgbmFtZT0iUEVSTUlTU0lPTl9XUklURV9TSUdORUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUk1JU1NJT05fV1JJVEVfU0lHTkVEX01JVE0iLz4KLQkJPGZpZWxkIG5hbWU9IlBST1BFUlRZX0JST0FEQ0FTVCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfRVhURU5ERURfUFJPUFMiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1BFUlRZX0lORElDQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9OT1RJRlkiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1BFUlRZX1JFQUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1BFUlRZX1NJR05FRF9XUklURSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfV1JJVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1BFUlRZX1dSSVRFX05PX1JFU1BPTlNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJXUklURV9UWVBFX0RFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IldSSVRFX1RZUEVfTk9fUkVTUE9OU0UiLz4KLQkJPGZpZWxkIG5hbWU9IldSSVRFX1RZUEVfU0lHTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJtRGVzY3JpcHRvcnMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0RGVzY3JpcHRvciIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL1VVSUQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhcmFjdGVyaXN0aWMoKUxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0Q2hhcmFjdGVyaXN0aWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVybWlzc2lvbnMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVdWlkKClMamF2YS91dGlsL1VVSUQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFsdWUoW0IpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBQkxFX05PVElGSUNBVElPTl9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iRU5BQkxFX0lORElDQVRJT05fVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQUJMRV9OT1RJRklDQVRJT05fVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUk1JU1NJT05fUkVBRCIvPgotCQk8ZmllbGQgbmFtZT0iUEVSTUlTU0lPTl9SRUFEX0VOQ1JZUFRFRCIvPgotCQk8ZmllbGQgbmFtZT0iUEVSTUlTU0lPTl9SRUFEX0VOQ1JZUFRFRF9NSVRNIi8+Ci0JCTxmaWVsZCBuYW1lPSJQRVJNSVNTSU9OX1dSSVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQRVJNSVNTSU9OX1dSSVRFX0VOQ1JZUFRFRCIvPgotCQk8ZmllbGQgbmFtZT0iUEVSTUlTU0lPTl9XUklURV9FTkNSWVBURURfTUlUTSIvPgotCQk8ZmllbGQgbmFtZT0iUEVSTUlTU0lPTl9XUklURV9TSUdORUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUk1JU1NJT05fV1JJVEVfU0lHTkVEX01JVE0iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0U2VydmVyIiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFByb2ZpbGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTZXJ2aWNlKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0U2VydmljZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbENvbm5lY3Rpb24oTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyU2VydmljZXMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTtaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlKExqYXZhL3V0aWwvVVVJRDspTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRTZXJ2aWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZpY2VzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5Q2hhcmFjdGVyaXN0aWNDaGFuZ2VkKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7TGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRDaGFyYWN0ZXJpc3RpYztaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkUGh5KExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVNlcnZpY2UoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRTZXJ2aWNlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZFJlc3BvbnNlKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7SUlJW0IpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZWZlcnJlZFBoeShMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlO0lJSSlWIiBzaW5jZT0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0U2VydmVyQ2FsbGJhY2siIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNoYXJhY3RlcmlzdGljUmVhZFJlcXVlc3QoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTtJSUxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0Q2hhcmFjdGVyaXN0aWM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNoYXJhY3RlcmlzdGljV3JpdGVSZXF1ZXN0KExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7SUxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0Q2hhcmFjdGVyaXN0aWM7WlpJW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29ubmVjdGlvblN0YXRlQ2hhbmdlKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGVzY3JpcHRvclJlYWRSZXF1ZXN0KExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7SUlMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dERlc2NyaXB0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRlc2NyaXB0b3JXcml0ZVJlcXVlc3QoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTtJTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHREZXNjcmlwdG9yO1paSVtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkV4ZWN1dGVXcml0ZShMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlO0laKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk10dUNoYW5nZWQoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTtJKVYiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTm90aWZpY2F0aW9uU2VudChMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlO0kpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QaHlSZWFkKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7SUlJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGh5VXBkYXRlKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7SUlJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2VydmljZUFkZGVkKElMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dFNlcnZpY2U7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0U2VydmljZSIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL1VVSUQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQ2hhcmFjdGVyaXN0aWMoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRDaGFyYWN0ZXJpc3RpYzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFNlcnZpY2UoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRTZXJ2aWNlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhcmFjdGVyaXN0aWMoTGphdmEvdXRpbC9VVUlEOylMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dENoYXJhY3RlcmlzdGljOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJhY3RlcmlzdGljcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluY2x1ZGVkU2VydmljZXMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZUlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFV1aWQoKUxqYXZhL3V0aWwvVVVJRDsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9UWVBFX1BSSU1BUlkiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfVFlQRV9TRUNPTkRBUlkiLz4KLQkJPGZpZWxkIG5hbWU9Im1DaGFyYWN0ZXJpc3RpY3MiLz4KLQkJPGZpZWxkIG5hbWU9Im1JbmNsdWRlZFNlcnZpY2VzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoSGVhZHNldCIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhQcm9maWxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFByb2ZpbGUkU2VydmljZUxpc3RlbmVyOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0F1ZGlvQ29ubmVjdGVkKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kVmVuZG9yU3BlY2lmaWNSZXN1bHRDb2RlKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0Vm9pY2VSZWNvZ25pdGlvbihMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcFZvaWNlUmVjb2duaXRpb24oTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTspWiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FVRElPX1NUQVRFX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DT05ORUNUSU9OX1NUQVRFX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9WRU5ET1JfU1BFQ0lGSUNfSEVBRFNFVF9FVkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iQVRfQ01EX1RZUEVfQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVF9DTURfVFlQRV9CQVNJQyIvPgotCQk8ZmllbGQgbmFtZT0iQVRfQ01EX1RZUEVfUkVBRCIvPgotCQk8ZmllbGQgbmFtZT0iQVRfQ01EX1RZUEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVF9DTURfVFlQRV9URVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9WRU5ET1JfU1BFQ0lGSUNfSEVBRFNFVF9FVkVOVF9BUkdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9WRU5ET1JfU1BFQ0lGSUNfSEVBRFNFVF9FVkVOVF9DTUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1ZFTkRPUl9TUEVDSUZJQ19IRUFEU0VUX0VWRU5UX0NNRF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9BVURJT19DT05ORUNURUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0FVRElPX0NPTk5FQ1RJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0FVRElPX0RJU0NPTk5FQ1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iVkVORE9SX1JFU1VMVF9DT0RFX0NPTU1BTkRfQU5EUk9JRCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWRU5ET1JfU1BFQ0lGSUNfSEVBRFNFVF9FVkVOVF9DT01QQU5ZX0lEX0NBVEVHT1JZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoSGVhbHRoIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFByb2ZpbGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoUHJvZmlsZSRTZXJ2aWNlTGlzdGVuZXI7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3RDaGFubmVsVG9Tb3VyY2UoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTtMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoSGVhbHRoQXBwQ29uZmlndXJhdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2Nvbm5lY3RDaGFubmVsKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7TGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEhlYWx0aEFwcENvbmZpZ3VyYXRpb247SSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFpbkNoYW5uZWxGZChMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlO0xhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhIZWFsdGhBcHBDb25maWd1cmF0aW9uOylMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlclNpbmtBcHBDb25maWd1cmF0aW9uKExqYXZhL2xhbmcvU3RyaW5nO0lMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoSGVhbHRoQ2FsbGJhY2s7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyQXBwQ29uZmlndXJhdGlvbihMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoSGVhbHRoQXBwQ29uZmlndXJhdGlvbjspWiIvPgotCQk8ZmllbGQgbmFtZT0iQVBQX0NPTkZJR19SRUdJU1RSQVRJT05fRkFJTFVSRSIvPgotCQk8ZmllbGQgbmFtZT0iQVBQX0NPTkZJR19SRUdJU1RSQVRJT05fU1VDQ0VTUyIvPgotCQk8ZmllbGQgbmFtZT0iQVBQX0NPTkZJR19VTlJFR0lTVFJBVElPTl9GQUlMVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUFBfQ09ORklHX1VOUkVHSVNUUkFUSU9OX1NVQ0NFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfVFlQRV9SRUxJQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9UWVBFX1NUUkVBTUlORyIvPgotCQk8ZmllbGQgbmFtZT0iU0lOS19ST0xFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT1VSQ0VfUk9MRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfQ0hBTk5FTF9DT05ORUNURUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0NIQU5ORUxfQ09OTkVDVElORyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfQ0hBTk5FTF9ESVNDT05ORUNURUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0NIQU5ORUxfRElTQ09OTkVDVElORyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEhlYWx0aEFwcENvbmZpZ3VyYXRpb24iIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFUeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um9sZSgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEhlYWx0aENhbGxiYWNrIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25IZWFsdGhBcHBDb25maWd1cmF0aW9uU3RhdHVzQ2hhbmdlKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhIZWFsdGhBcHBDb25maWd1cmF0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSGVhbHRoQ2hhbm5lbFN0YXRlQ2hhbmdlKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhIZWFsdGhBcHBDb25maWd1cmF0aW9uO0xhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7SUlMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjtJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhIaWREZXZpY2UiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoUHJvZmlsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhQcm9maWxlJFNlcnZpY2VMaXN0ZW5lcjspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29ubmVjdChMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzY29ubmVjdChMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJBcHAoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEhpZERldmljZUFwcFNkcFNldHRpbmdzO0xhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhIaWREZXZpY2VBcHBRb3NTZXR0aW5ncztMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoSGlkRGV2aWNlQXBwUW9zU2V0dGluZ3M7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yO0xhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhIaWREZXZpY2UkQ2FsbGJhY2s7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBseVJlcG9ydChMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlO0JCW0IpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcG9ydEVycm9yKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7QilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZFJlcG9ydChMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlO0lbQilaIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckFwcCgpWiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NPTk5FQ1RJT05fU1RBVEVfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfUlNQX0lOVkFMSURfUEFSQU0iLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1JTUF9JTlZBTElEX1JQVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfUlNQX05PVF9SRUFEWSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfUlNQX1NVQ0NFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1JTUF9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9SU1BfVU5TVVBQT1JURURfUkVRIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UT0NPTF9CT09UX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RPQ09MX1JFUE9SVF9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVBPUlRfVFlQRV9GRUFUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVBPUlRfVFlQRV9JTlBVVCIvPgotCQk8ZmllbGQgbmFtZT0iUkVQT1JUX1RZUEVfT1VUUFVUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUJDTEFTUzFfQ09NQk8iLz4KLQkJPGZpZWxkIG5hbWU9IlNVQkNMQVNTMV9LRVlCT0FSRCIvPgotCQk8ZmllbGQgbmFtZT0iU1VCQ0xBU1MxX01PVVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUJDTEFTUzFfTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iU1VCQ0xBU1MyX0NBUkRfUkVBREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUJDTEFTUzJfRElHSVRJWkVSX1RBQkxFVCIvPgotCQk8ZmllbGQgbmFtZT0iU1VCQ0xBU1MyX0dBTUVQQUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVQkNMQVNTMl9KT1lTVElDSyIvPgotCQk8ZmllbGQgbmFtZT0iU1VCQ0xBU1MyX1JFTU9URV9DT05UUk9MIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUJDTEFTUzJfU0VOU0lOR19ERVZJQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNVQkNMQVNTMl9VTkNBVEVHT1JJWkVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoSGlkRGV2aWNlJENhbGxiYWNrIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BcHBTdGF0dXNDaGFuZ2VkKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db25uZWN0aW9uU3RhdGVDaGFuZ2VkKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZXRSZXBvcnQoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTtCQkkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSW50ZXJydXB0RGF0YShMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlO0JbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXRQcm90b2NvbChMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlO0IpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2V0UmVwb3J0KExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7QkJbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25WaXJ0dWFsQ2FibGVVbnBsdWcoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEhpZERldmljZUFwcFFvc1NldHRpbmdzIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlbGF5VmFyaWF0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF0ZW5jeSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlYWtCYW5kd2lkdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlVHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRva2VuQnVja2V0U2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRva2VuUmF0ZSgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWSUNFX0JFU1RfRUZGT1JUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWSUNFX0dVQVJBTlRFRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfTk9fVFJBRkZJQyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEhpZERldmljZUFwcFNkcFNldHRpbmdzIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztCW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlc2NyaXB0aW9uKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNjcmlwdG9ycygpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm92aWRlcigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3ViY2xhc3MoKUIiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhNYW5hZ2VyIiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkYXB0ZXIoKUxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhBZGFwdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3RlZERldmljZXMoSSlMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ubmVjdGlvblN0YXRlKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlc01hdGNoaW5nQ29ubmVjdGlvblN0YXRlcyhJW0kpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5HYXR0U2VydmVyKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dFNlcnZlckNhbGxiYWNrOylMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dFNlcnZlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhQcm9maWxlIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ubmVjdGVkRGV2aWNlcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb25TdGF0ZShMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlc01hdGNoaW5nQ29ubmVjdGlvblN0YXRlcyhbSSlMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBMkRQIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUkVWSU9VU19TVEFURSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU1RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdBVFQiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iR0FUVF9TRVJWRVIiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iSEVBRFNFVCIvPgotCQk8ZmllbGQgbmFtZT0iSEVBTFRIIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkhJRF9ERVZJQ0UiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU0FQIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0NPTk5FQ1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfQ09OTkVDVElORyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfRElTQ09OTkVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9ESVNDT05ORUNUSU5HIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoUHJvZmlsZSRTZXJ2aWNlTGlzdGVuZXIiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlcnZpY2VDb25uZWN0ZWQoSUxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhQcm9maWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXJ2aWNlRGlzY29ubmVjdGVkKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFNlcnZlclNvY2tldCIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJWlpJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdCgpTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFNvY2tldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHQoSSlMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoU29ja2V0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFNvY2tldCIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoU29ja2V0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ubmVjdGlvblR5cGUoKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0U3RyZWFtKClMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhSZWNlaXZlUGFja2V0U2l6ZSgpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4VHJhbnNtaXRQYWNrZXRTaXplKClJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRwdXRTdHJlYW0oKUxqYXZhL2lvL091dHB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZW1vdGVEZXZpY2UoKUxhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb25uZWN0ZWQoKVoiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9MMkNBUCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1JGQ09NTSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NDTyIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlQ2FsbGJhY2siIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXJ0RmFpbHVyZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXJ0U3VjY2VzcyhMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlU2V0dGluZ3M7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFEVkVSVElTRV9GQUlMRURfQUxSRUFEWV9TVEFSVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBRFZFUlRJU0VfRkFJTEVEX0RBVEFfVE9PX0xBUkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBRFZFUlRJU0VfRkFJTEVEX0ZFQVRVUkVfVU5TVVBQT1JURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFEVkVSVElTRV9GQUlMRURfSU5URVJOQUxfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkFEVkVSVElTRV9GQUlMRURfVE9PX01BTllfQURWRVJUSVNFUlMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VEYXRhIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9MaXN0O0xhbmRyb2lkL3V0aWwvU3BhcnNlQXJyYXk7TGphdmEvdXRpbC9NYXA7WlopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5jbHVkZURldmljZU5hbWUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmNsdWRlVHhQb3dlckxldmVsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFudWZhY3R1cmVyU3BlY2lmaWNEYXRhKClMYW5kcm9pZC91dGlsL1NwYXJzZUFycmF5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZpY2VEYXRhKClMamF2YS91dGlsL01hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlVXVpZHMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VEYXRhJEJ1aWxkZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRNYW51ZmFjdHVyZXJEYXRhKElbQilMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlRGF0YSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFNlcnZpY2VEYXRhKExhbmRyb2lkL29zL1BhcmNlbFV1aWQ7W0IpTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzZURhdGEkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTZXJ2aWNlVXVpZChMYW5kcm9pZC9vcy9QYXJjZWxVdWlkOylMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlRGF0YSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlRGF0YTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbmNsdWRlRGV2aWNlTmFtZShaKUxhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VEYXRhJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5jbHVkZVR4UG93ZXJMZXZlbChaKUxhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VEYXRhJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlU2V0dGluZ3MiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lb3V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHhQb3dlckxldmVsKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb25uZWN0YWJsZSgpWiIvPgotCQk8ZmllbGQgbmFtZT0iQURWRVJUSVNFX01PREVfQkFMQU5DRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFEVkVSVElTRV9NT0RFX0xPV19MQVRFTkNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJBRFZFUlRJU0VfTU9ERV9MT1dfUE9XRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkFEVkVSVElTRV9UWF9QT1dFUl9ISUdIIi8+Ci0JCTxmaWVsZCBuYW1lPSJBRFZFUlRJU0VfVFhfUE9XRVJfTE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJBRFZFUlRJU0VfVFhfUE9XRVJfTUVESVVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJBRFZFUlRJU0VfVFhfUE9XRVJfVUxUUkFfTE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlU2V0dGluZ3MkQnVpbGRlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlU2V0dGluZ3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWR2ZXJ0aXNlTW9kZShJKUxhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VTZXR0aW5ncyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbm5lY3RhYmxlKFopTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzZVNldHRpbmdzJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZW91dChJKUxhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VTZXR0aW5ncyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFR4UG93ZXJMZXZlbChJKUxhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VTZXR0aW5ncyRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzaW5nU2V0IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlQWR2ZXJ0aXNpbmcoWklJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBZHZlcnRpc2luZ0RhdGEoTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzZURhdGE7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBZHZlcnRpc2luZ1BhcmFtZXRlcnMoTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzaW5nU2V0UGFyYW1ldGVyczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBlcmlvZGljQWR2ZXJ0aXNpbmdEYXRhKExhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VEYXRhOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGVyaW9kaWNBZHZlcnRpc2luZ0VuYWJsZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGVyaW9kaWNBZHZlcnRpc2luZ1BhcmFtZXRlcnMoTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1BlcmlvZGljQWR2ZXJ0aXNpbmdQYXJhbWV0ZXJzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2NhblJlc3BvbnNlRGF0YShMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlRGF0YTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzaW5nU2V0Q2FsbGJhY2siIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFkdmVydGlzaW5nRGF0YVNldChMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNpbmdTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BZHZlcnRpc2luZ0VuYWJsZWQoTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzaW5nU2V0O1pJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFkdmVydGlzaW5nUGFyYW1ldGVyc1VwZGF0ZWQoTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzaW5nU2V0O0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFkdmVydGlzaW5nU2V0U3RhcnRlZChMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNpbmdTZXQ7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWR2ZXJ0aXNpbmdTZXRTdG9wcGVkKExhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2luZ1NldDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGVyaW9kaWNBZHZlcnRpc2luZ0RhdGFTZXQoTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzaW5nU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGVyaW9kaWNBZHZlcnRpc2luZ0VuYWJsZWQoTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzaW5nU2V0O1pJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBlcmlvZGljQWR2ZXJ0aXNpbmdQYXJhbWV0ZXJzVXBkYXRlZChMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNpbmdTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TY2FuUmVzcG9uc2VEYXRhU2V0KExhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2luZ1NldDtJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFEVkVSVElTRV9GQUlMRURfQUxSRUFEWV9TVEFSVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBRFZFUlRJU0VfRkFJTEVEX0RBVEFfVE9PX0xBUkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBRFZFUlRJU0VfRkFJTEVEX0ZFQVRVUkVfVU5TVVBQT1JURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFEVkVSVElTRV9GQUlMRURfSU5URVJOQUxfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkFEVkVSVElTRV9GQUlMRURfVE9PX01BTllfQURWRVJUSVNFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkFEVkVSVElTRV9TVUNDRVNTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNpbmdTZXRQYXJhbWV0ZXJzIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlcnZhbCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1hcnlQaHkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWNvbmRhcnlQaHkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeFBvd2VyTGV2ZWwoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmNsdWRlVHhQb3dlcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQW5vbnltb3VzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb25uZWN0YWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTGVnYWN5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTY2FubmFibGUoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSVkFMX0hJR0giLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSVkFMX0xPVyIvPgotCQk8ZmllbGQgbmFtZT0iSU5URVJWQUxfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlZBTF9NRURJVU0iLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSVkFMX01JTiIvPgotCQk8ZmllbGQgbmFtZT0iVFhfUE9XRVJfSElHSCIvPgotCQk8ZmllbGQgbmFtZT0iVFhfUE9XRVJfTE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWF9QT1dFUl9NQVgiLz4KLQkJPGZpZWxkIG5hbWU9IlRYX1BPV0VSX01FRElVTSIvPgotCQk8ZmllbGQgbmFtZT0iVFhfUE9XRVJfTUlOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWF9QT1dFUl9VTFRSQV9MT1ciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2luZ1NldFBhcmFtZXRlcnMkQnVpbGRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNpbmdTZXRQYXJhbWV0ZXJzOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFub255bW91cyhaKUxhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2luZ1NldFBhcmFtZXRlcnMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb25uZWN0YWJsZShaKUxhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2luZ1NldFBhcmFtZXRlcnMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbmNsdWRlVHhQb3dlcihaKUxhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2luZ1NldFBhcmFtZXRlcnMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlcnZhbChJKUxhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2luZ1NldFBhcmFtZXRlcnMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMZWdhY3lNb2RlKFopTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzaW5nU2V0UGFyYW1ldGVycyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByaW1hcnlQaHkoSSlMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNpbmdTZXRQYXJhbWV0ZXJzJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2Nhbm5hYmxlKFopTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzaW5nU2V0UGFyYW1ldGVycyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlY29uZGFyeVBoeShJKUxhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2luZ1NldFBhcmFtZXRlcnMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUeFBvd2VyTGV2ZWwoSSlMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNpbmdTZXRQYXJhbWV0ZXJzJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvbGUvQmx1ZXRvb3RoTGVBZHZlcnRpc2VyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBZHZlcnRpc2luZyhMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlU2V0dGluZ3M7TGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzZURhdGE7TGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzZUNhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBZHZlcnRpc2luZyhMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlU2V0dGluZ3M7TGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzZURhdGE7TGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzZURhdGE7TGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzZUNhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBZHZlcnRpc2luZ1NldChMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNpbmdTZXRQYXJhbWV0ZXJzO0xhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VEYXRhO0xhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VEYXRhO0xhbmRyb2lkL2JsdWV0b290aC9sZS9QZXJpb2RpY0FkdmVydGlzaW5nUGFyYW1ldGVycztMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlRGF0YTtJSUxhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2luZ1NldENhbGxiYWNrOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEFkdmVydGlzaW5nU2V0KExhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2luZ1NldFBhcmFtZXRlcnM7TGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzZURhdGE7TGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzZURhdGE7TGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1BlcmlvZGljQWR2ZXJ0aXNpbmdQYXJhbWV0ZXJzO0xhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VEYXRhO0lJTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzaW5nU2V0Q2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBZHZlcnRpc2luZ1NldChMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNpbmdTZXRQYXJhbWV0ZXJzO0xhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VEYXRhO0xhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VEYXRhO0xhbmRyb2lkL2JsdWV0b290aC9sZS9QZXJpb2RpY0FkdmVydGlzaW5nUGFyYW1ldGVycztMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlRGF0YTtMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNpbmdTZXRDYWxsYmFjazspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBZHZlcnRpc2luZ1NldChMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNpbmdTZXRQYXJhbWV0ZXJzO0xhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VEYXRhO0xhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2VEYXRhO0xhbmRyb2lkL2JsdWV0b290aC9sZS9QZXJpb2RpY0FkdmVydGlzaW5nUGFyYW1ldGVycztMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNlRGF0YTtMYW5kcm9pZC9ibHVldG9vdGgvbGUvQWR2ZXJ0aXNpbmdTZXRDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wQWR2ZXJ0aXNpbmcoTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL0FkdmVydGlzZUNhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcEFkdmVydGlzaW5nU2V0KExhbmRyb2lkL2JsdWV0b290aC9sZS9BZHZlcnRpc2luZ1NldENhbGxiYWNrOylWIiBzaW5jZT0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9sZS9CbHVldG9vdGhMZVNjYW5uZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaFBlbmRpbmdTY2FuUmVzdWx0cyhMYW5kcm9pZC9ibHVldG9vdGgvbGUvU2NhbkNhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRTY2FuKExhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuQ2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFNjYW4oTGphdmEvdXRpbC9MaXN0O0xhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuU2V0dGluZ3M7TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0U2NhbihMamF2YS91dGlsL0xpc3Q7TGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5TZXR0aW5ncztMYW5kcm9pZC9ibHVldG9vdGgvbGUvU2NhbkNhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcFNjYW4oTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BTY2FuKExhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuQ2FsbGJhY2s7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0NBTExCQUNLX1RZUEUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfRVJST1JfQ09ERSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9MSVNUX1NDQU5fUkVTVUxUIiBzaW5jZT0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9sZS9QZXJpb2RpY0FkdmVydGlzaW5nUGFyYW1ldGVycyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5jbHVkZVR4UG93ZXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlcnZhbCgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL2xlL1BlcmlvZGljQWR2ZXJ0aXNpbmdQYXJhbWV0ZXJzJEJ1aWxkZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1BlcmlvZGljQWR2ZXJ0aXNpbmdQYXJhbWV0ZXJzOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluY2x1ZGVUeFBvd2VyKFopTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1BlcmlvZGljQWR2ZXJ0aXNpbmdQYXJhbWV0ZXJzJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZXJ2YWwoSSlMYW5kcm9pZC9ibHVldG9vdGgvbGUvUGVyaW9kaWNBZHZlcnRpc2luZ1BhcmFtZXRlcnMkQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuQ2FsbGJhY2siIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkJhdGNoU2NhblJlc3VsdHMoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TY2FuRmFpbGVkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2NhblJlc3VsdChJTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5SZXN1bHQ7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNDQU5fRkFJTEVEX0FMUkVBRFlfU1RBUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0NBTl9GQUlMRURfQVBQTElDQVRJT05fUkVHSVNUUkFUSU9OX0ZBSUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0NBTl9GQUlMRURfRkVBVFVSRV9VTlNVUFBPUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0NBTl9GQUlMRURfSU5URVJOQUxfRVJST1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuRmlsdGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvUGFyY2VsVXVpZDtMYW5kcm9pZC9vcy9QYXJjZWxVdWlkO0xhbmRyb2lkL29zL1BhcmNlbFV1aWQ7W0JbQklbQltCKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZUFkZHJlc3MoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hbnVmYWN0dXJlckRhdGEoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFudWZhY3R1cmVyRGF0YU1hc2soKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFudWZhY3R1cmVySWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlRGF0YSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlRGF0YU1hc2soKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VydmljZURhdGFVdWlkKClMYW5kcm9pZC9vcy9QYXJjZWxVdWlkOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZpY2VVdWlkKClMYW5kcm9pZC9vcy9QYXJjZWxVdWlkOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZpY2VVdWlkTWFzaygpTGFuZHJvaWQvb3MvUGFyY2VsVXVpZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaGVzKExhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuUmVzdWx0OylaIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvbGUvU2NhbkZpbHRlciRCdWlsZGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuRmlsdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERldmljZUFkZHJlc3MoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuRmlsdGVyJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGV2aWNlTmFtZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5GaWx0ZXIkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYW51ZmFjdHVyZXJEYXRhKElbQilMYW5kcm9pZC9ibHVldG9vdGgvbGUvU2NhbkZpbHRlciRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1hbnVmYWN0dXJlckRhdGEoSVtCW0IpTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5GaWx0ZXIkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZXJ2aWNlRGF0YShMYW5kcm9pZC9vcy9QYXJjZWxVdWlkO1tCKUxhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuRmlsdGVyJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VydmljZURhdGEoTGFuZHJvaWQvb3MvUGFyY2VsVXVpZDtbQltCKUxhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuRmlsdGVyJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VydmljZVV1aWQoTGFuZHJvaWQvb3MvUGFyY2VsVXVpZDspTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5GaWx0ZXIkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZXJ2aWNlVXVpZChMYW5kcm9pZC9vcy9QYXJjZWxVdWlkO0xhbmRyb2lkL29zL1BhcmNlbFV1aWQ7KUxhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuRmlsdGVyJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ibHVldG9vdGgvbGUvU2NhblJlY29yZCIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9MaXN0O0xhbmRyb2lkL3V0aWwvU3BhcnNlQXJyYXk7TGphdmEvdXRpbC9NYXA7SUlMamF2YS9sYW5nL1N0cmluZztbQilWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBZHZlcnRpc2VGbGFncygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5dGVzKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hbnVmYWN0dXJlclNwZWNpZmljRGF0YSgpTGFuZHJvaWQvdXRpbC9TcGFyc2VBcnJheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYW51ZmFjdHVyZXJTcGVjaWZpY0RhdGEoSSlbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZpY2VEYXRhKClMamF2YS91dGlsL01hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlRGF0YShMYW5kcm9pZC9vcy9QYXJjZWxVdWlkOylbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZpY2VVdWlkcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR4UG93ZXJMZXZlbCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5SZXN1bHQiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7SUlJSUlJSUxhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuUmVjb3JkO0opViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7TGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5SZWNvcmQ7SUopViIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBZHZlcnRpc2luZ1NpZCgpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YVN0YXR1cygpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlKClMYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlcmlvZGljQWR2ZXJ0aXNpbmdJbnRlcnZhbCgpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbWFyeVBoeSgpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnNzaSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYW5SZWNvcmQoKUxhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuUmVjb3JkOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlY29uZGFyeVBoeSgpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZXN0YW1wTmFub3MoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeFBvd2VyKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nvbm5lY3RhYmxlKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xlZ2FjeSgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBX0NPTVBMRVRFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfVFJVTkNBVEVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUklPRElDX0lOVEVSVkFMX05PVF9QUkVTRU5UIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlBIWV9VTlVTRUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iU0lEX05PVF9QUkVTRU5UIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRYX1BPV0VSX05PVF9QUkVTRU5UIiBzaW5jZT0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuU2V0dGluZ3MiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGxiYWNrVHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExlZ2FjeSgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGh5KClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXBvcnREZWxheU1pbGxpcygpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYW5Nb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhblJlc3VsdFR5cGUoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTExCQUNLX1RZUEVfQUxMX01BVENIRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTExCQUNLX1RZUEVfRklSU1RfTUFUQ0giIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMTEJBQ0tfVFlQRV9NQVRDSF9MT1NUIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVENIX01PREVfQUdHUkVTU0lWRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRDSF9NT0RFX1NUSUNLWSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRDSF9OVU1fRkVXX0FEVkVSVElTRU1FTlQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTUFUQ0hfTlVNX01BWF9BRFZFUlRJU0VNRU5UIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVENIX05VTV9PTkVfQURWRVJUSVNFTUVOVCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSFlfTEVfQUxMX1NVUFBPUlRFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0FOX01PREVfQkFMQU5DRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNDQU5fTU9ERV9MT1dfTEFURU5DWSIvPgotCQk8ZmllbGQgbmFtZT0iU0NBTl9NT0RFX0xPV19QT1dFUiIvPgotCQk8ZmllbGQgbmFtZT0iU0NBTl9NT0RFX09QUE9SVFVOSVNUSUMiIHNpbmNlPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5TZXR0aW5ncyRCdWlsZGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL2JsdWV0b290aC9sZS9TY2FuU2V0dGluZ3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FsbGJhY2tUeXBlKEkpTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5TZXR0aW5ncyRCdWlsZGVyOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGVnYWN5KFopTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5TZXR0aW5ncyRCdWlsZGVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF0Y2hNb2RlKEkpTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5TZXR0aW5ncyRCdWlsZGVyOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TnVtT2ZNYXRjaGVzKEkpTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5TZXR0aW5ncyRCdWlsZGVyOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGh5KEkpTGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5TZXR0aW5ncyRCdWlsZGVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVwb3J0RGVsYXkoSilMYW5kcm9pZC9ibHVldG9vdGgvbGUvU2NhblNldHRpbmdzJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2Nhbk1vZGUoSSlMYW5kcm9pZC9ibHVldG9vdGgvbGUvU2NhblNldHRpbmdzJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb21wYW5pb24vQXNzb2NpYXRpb25SZXF1ZXN0IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbXBhbmlvbi9Bc3NvY2lhdGlvblJlcXVlc3QkQnVpbGRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZERldmljZUZpbHRlcihMYW5kcm9pZC9jb21wYW5pb24vRGV2aWNlRmlsdGVyOylMYW5kcm9pZC9jb21wYW5pb24vQXNzb2NpYXRpb25SZXF1ZXN0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL2NvbXBhbmlvbi9Bc3NvY2lhdGlvblJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tOb3RVc2VkKClWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXJrVXNlZCgpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2luZ2xlRGV2aWNlKFopTGFuZHJvaWQvY29tcGFuaW9uL0Fzc29jaWF0aW9uUmVxdWVzdCRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29tcGFuaW9uL0JsdWV0b290aERldmljZUZpbHRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2NvbXBhbmlvbi9EZXZpY2VGaWx0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb21wYW5pb24vQmx1ZXRvb3RoRGV2aWNlRmlsdGVyJEJ1aWxkZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTZXJ2aWNlVXVpZChMYW5kcm9pZC9vcy9QYXJjZWxVdWlkO0xhbmRyb2lkL29zL1BhcmNlbFV1aWQ7KUxhbmRyb2lkL2NvbXBhbmlvbi9CbHVldG9vdGhEZXZpY2VGaWx0ZXIkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvY29tcGFuaW9uL0JsdWV0b290aERldmljZUZpbHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja05vdFVzZWQoKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcmtVc2VkKClWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBZGRyZXNzKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb21wYW5pb24vQmx1ZXRvb3RoRGV2aWNlRmlsdGVyJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmFtZVBhdHRlcm4oTGphdmEvdXRpbC9yZWdleC9QYXR0ZXJuOylMYW5kcm9pZC9jb21wYW5pb24vQmx1ZXRvb3RoRGV2aWNlRmlsdGVyJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb21wYW5pb24vQmx1ZXRvb3RoTGVEZXZpY2VGaWx0ZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb21wYW5pb24vRGV2aWNlRmlsdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47TGFuZHJvaWQvYmx1ZXRvb3RoL2xlL1NjYW5GaWx0ZXI7W0JbQkxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lJSUlaKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlbmFtZVByZWZpeExlbmd0aExpbWl0KClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb21wYW5pb24vQmx1ZXRvb3RoTGVEZXZpY2VGaWx0ZXIkQnVpbGRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9jb21wYW5pb24vQmx1ZXRvb3RoTGVEZXZpY2VGaWx0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tOb3RVc2VkKClWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXJrVXNlZCgpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmFtZVBhdHRlcm4oTGphdmEvdXRpbC9yZWdleC9QYXR0ZXJuOylMYW5kcm9pZC9jb21wYW5pb24vQmx1ZXRvb3RoTGVEZXZpY2VGaWx0ZXIkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSYXdEYXRhRmlsdGVyKFtCW0IpTGFuZHJvaWQvY29tcGFuaW9uL0JsdWV0b290aExlRGV2aWNlRmlsdGVyJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVuYW1lRnJvbUJ5dGVzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lJTGphdmEvbmlvL0J5dGVPcmRlcjspTGFuZHJvaWQvY29tcGFuaW9uL0JsdWV0b290aExlRGV2aWNlRmlsdGVyJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVuYW1lRnJvbU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUkpTGFuZHJvaWQvY29tcGFuaW9uL0JsdWV0b290aExlRGV2aWNlRmlsdGVyJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2NhbkZpbHRlcihMYW5kcm9pZC9ibHVldG9vdGgvbGUvU2NhbkZpbHRlcjspTGFuZHJvaWQvY29tcGFuaW9uL0JsdWV0b290aExlRGV2aWNlRmlsdGVyJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb21wYW5pb24vQ29tcGFuaW9uRGV2aWNlTWFuYWdlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc29jaWF0ZShMYW5kcm9pZC9jb21wYW5pb24vQXNzb2NpYXRpb25SZXF1ZXN0O0xhbmRyb2lkL2NvbXBhbmlvbi9Db21wYW5pb25EZXZpY2VNYW5hZ2VyJENhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNhc3NvY2lhdGUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBc3NvY2lhdGlvbnMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNOb3RpZmljYXRpb25BY2Nlc3MoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdE5vdGlmaWNhdGlvbkFjY2VzcyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0RFVklDRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29tcGFuaW9uL0NvbXBhbmlvbkRldmljZU1hbmFnZXIkQ2FsbGJhY2siIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRldmljZUZvdW5kKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50U2VuZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25GYWlsdXJlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb21wYW5pb24vRGV2aWNlRmlsdGVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29tcGFuaW9uL1dpZmlEZXZpY2VGaWx0ZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb21wYW5pb24vRGV2aWNlRmlsdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47KVYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29tcGFuaW9uL1dpZmlEZXZpY2VGaWx0ZXIkQnVpbGRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9jb21wYW5pb24vV2lmaURldmljZUZpbHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja05vdFVzZWQoKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcmtVc2VkKClWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYW1lUGF0dGVybihMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47KUxhbmRyb2lkL2NvbXBhbmlvbi9XaWZpRGV2aWNlRmlsdGVyJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0Fic3RyYWN0VGhyZWFkZWRTeW5jQWRhcHRlciIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O1paKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRleHQoKUxhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeW5jQWRhcHRlckJpbmRlcigpTGFuZHJvaWQvb3MvSUJpbmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBlcmZvcm1TeW5jKExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGFuZHJvaWQvb3MvQnVuZGxlO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyQ2xpZW50O0xhbmRyb2lkL2NvbnRlbnQvU3luY1Jlc3VsdDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2VjdXJpdHlFeGNlcHRpb24oTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMYW5kcm9pZC9vcy9CdW5kbGU7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9TeW5jUmVzdWx0OylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN5bmNDYW5jZWxlZCgpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN5bmNDYW5jZWxlZChMamF2YS9sYW5nL1RocmVhZDspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25VbnN5bmNhYmxlQWNjb3VudCgpWiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0dfU1lOQ19ERVRBSUxTIiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9BY3Rpdml0eU5vdEZvdW5kRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0FzeW5jUXVlcnlIYW5kbGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3MvSGFuZGxlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbE9wZXJhdGlvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVIYW5kbGVyKExhbmRyb2lkL29zL0xvb3BlcjspTGFuZHJvaWQvb3MvSGFuZGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRlbGV0ZUNvbXBsZXRlKElMamF2YS9sYW5nL09iamVjdDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkluc2VydENvbXBsZXRlKElMamF2YS9sYW5nL09iamVjdDtMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25RdWVyeUNvbXBsZXRlKElMamF2YS9sYW5nL09iamVjdDtMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVwZGF0ZUNvbXBsZXRlKElMamF2YS9sYW5nL09iamVjdDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydERlbGV0ZShJTGphdmEvbGFuZy9PYmplY3Q7TGFuZHJvaWQvbmV0L1VyaTtMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEluc2VydChJTGphdmEvbGFuZy9PYmplY3Q7TGFuZHJvaWQvbmV0L1VyaTtMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFF1ZXJ5KElMamF2YS9sYW5nL09iamVjdDtMYW5kcm9pZC9uZXQvVXJpO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFVwZGF0ZShJTGphdmEvbGFuZy9PYmplY3Q7TGFuZHJvaWQvbmV0L1VyaTtMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0FzeW5jUXVlcnlIYW5kbGVyJFdvcmtlckFyZ3MiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iY29va2llIi8+Ci0JCTxmaWVsZCBuYW1lPSJoYW5kbGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJvcmRlckJ5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9qZWN0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXN1bHQiLz4KLQkJPGZpZWxkIG5hbWU9InNlbGVjdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0ic2VsZWN0aW9uQXJncyIvPgotCQk8ZmllbGQgbmFtZT0idXJpIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2YWx1ZXMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQXN5bmNRdWVyeUhhbmRsZXIkV29ya2VySGFuZGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL0hhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Bc3luY1F1ZXJ5SGFuZGxlcjtMYW5kcm9pZC9vcy9Mb29wZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQXN5bmNUYXNrTG9hZGVyIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0xvYWRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWxMb2FkKClaIiByZW1vdmVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbExvYWRJbkJhY2tncm91bmQoKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG9hZEluQmFja2dyb3VuZENhbmNlbGVkKClaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkSW5CYWNrZ3JvdW5kKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbmNlbGVkKExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Mb2FkSW5CYWNrZ3JvdW5kKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVcGRhdGVUaHJvdHRsZShKKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQnJvYWRjYXN0UmVjZWl2ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFib3J0QnJvYWRjYXN0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJBYm9ydEJyb2FkY2FzdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFib3J0QnJvYWRjYXN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVidWdVbnJlZ2lzdGVyKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzdWx0Q29kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3VsdERhdGEoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3VsdEV4dHJhcyhaKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnb0FzeW5jKClMYW5kcm9pZC9jb250ZW50L0Jyb2FkY2FzdFJlY2VpdmVyJFBlbmRpbmdSZXN1bHQ7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0luaXRpYWxTdGlja3lCcm9hZGNhc3QoKVoiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPcmRlcmVkQnJvYWRjYXN0KClaIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVjZWl2ZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZWVrU2VydmljZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KUxhbmRyb2lkL29zL0lCaW5kZXI7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlYnVnVW5yZWdpc3RlcihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcmRlcmVkSGludChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXN1bHQoSUxqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc3VsdENvZGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVzdWx0RGF0YShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc3VsdEV4dHJhcyhMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQnJvYWRjYXN0UmVjZWl2ZXIkUGVuZGluZ1Jlc3VsdCIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTtJWlpMYW5kcm9pZC9vcy9JQmluZGVyO0lJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFib3J0QnJvYWRjYXN0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJBYm9ydEJyb2FkY2FzdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFib3J0QnJvYWRjYXN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzdWx0Q29kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3VsdERhdGEoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3VsdEV4dHJhcyhaKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXN1bHQoSUxqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc3VsdENvZGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVzdWx0RGF0YShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc3VsdEV4dHJhcyhMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ2xpcERhdGEiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ2xpcERhdGE7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NsaXBEZXNjcmlwdGlvbjtMYW5kcm9pZC9jb250ZW50L0NsaXBEYXRhJEl0ZW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7W0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQ2xpcERhdGEkSXRlbTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEl0ZW0oTGFuZHJvaWQvY29udGVudC9DbGlwRGF0YSRJdGVtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSXRlbShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9jb250ZW50L0NsaXBEYXRhJEl0ZW07KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlc2NyaXB0aW9uKClMYW5kcm9pZC9jb250ZW50L0NsaXBEZXNjcmlwdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJdGVtQXQoSSlMYW5kcm9pZC9jb250ZW50L0NsaXBEYXRhJEl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SXRlbUNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SHRtbFRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvQ2xpcERhdGE7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnRlbnQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KUxhbmRyb2lkL2NvbnRlbnQvQ2xpcERhdGE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3UGxhaW5UZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9jb250ZW50L0NsaXBEYXRhOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1Jhd1VyaShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9uZXQvVXJpOylMYW5kcm9pZC9jb250ZW50L0NsaXBEYXRhOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1VyaShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9uZXQvVXJpOylMYW5kcm9pZC9jb250ZW50L0NsaXBEYXRhOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9DbGlwRGF0YSRJdGVtIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7TGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xhbmRyb2lkL25ldC9Vcmk7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvZXJjZVRvSHRtbFRleHQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvZXJjZVRvU3R5bGVkVGV4dChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29lcmNlVG9UZXh0KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SHRtbFRleHQoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZW50KClMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmkoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NsaXBEZXNjcmlwdGlvbiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9DbGlwRGVzY3JpcHRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7W0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZU1pbWVUeXBlcyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbHRlck1pbWVUeXBlcyhMamF2YS9sYW5nL1N0cmluZzspW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dHJhcygpTGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWltZVR5cGUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW1lVHlwZUNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZXN0YW1wKClKIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNNaW1lVHlwZShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dHJhcyhMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTspViIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU1FVFlQRV9URVhUX0hUTUwiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTUlNRVRZUEVfVEVYVF9JTlRFTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX1RFWFRfUExBSU4iLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX1RFWFRfVVJJTElTVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9DbGlwYm9hcmRNYW5hZ2VyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvQ2xpcGJvYXJkTWFuYWdlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFByaW1hcnlDbGlwQ2hhbmdlZExpc3RlbmVyKExhbmRyb2lkL2NvbnRlbnQvQ2xpcGJvYXJkTWFuYWdlciRPblByaW1hcnlDbGlwQ2hhbmdlZExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJQcmltYXJ5Q2xpcCgpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbWFyeUNsaXAoKUxhbmRyb2lkL2NvbnRlbnQvQ2xpcERhdGE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbWFyeUNsaXBEZXNjcmlwdGlvbigpTGFuZHJvaWQvY29udGVudC9DbGlwRGVzY3JpcHRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzUHJpbWFyeUNsaXAoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVQcmltYXJ5Q2xpcENoYW5nZWRMaXN0ZW5lcihMYW5kcm9pZC9jb250ZW50L0NsaXBib2FyZE1hbmFnZXIkT25QcmltYXJ5Q2xpcENoYW5nZWRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByaW1hcnlDbGlwKExhbmRyb2lkL2NvbnRlbnQvQ2xpcERhdGE7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ2xpcGJvYXJkTWFuYWdlciRPblByaW1hcnlDbGlwQ2hhbmdlZExpc3RlbmVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QcmltYXJ5Q2xpcENoYW5nZWQoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50Q2FsbGJhY2tzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbmZpZ3VyYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxvd01lbW9yeSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9Db21wb25lbnRDYWxsYmFja3MyIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvY29udGVudC9Db21wb25lbnRDYWxsYmFja3MiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRyaW1NZW1vcnkoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUklNX01FTU9SWV9CQUNLR1JPVU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUklNX01FTU9SWV9DT01QTEVURSIvPgotCQk8ZmllbGQgbmFtZT0iVFJJTV9NRU1PUllfTU9ERVJBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlRSSU1fTUVNT1JZX1JVTk5JTkdfQ1JJVElDQUwiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVFJJTV9NRU1PUllfUlVOTklOR19MT1ciIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVFJJTV9NRU1PUllfUlVOTklOR19NT0RFUkFURSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUUklNX01FTU9SWV9VSV9ISURERU4iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIiBzaW5jZT0iOCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvQ2xhc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lKClMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUkiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlUmVsYXRpdmUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVSZWxhdGl2ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmxhdHRlblRvU2hvcnRTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZsYXR0ZW5Ub1N0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xhc3NOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvcnRDbGFzc05hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRGcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvU2hvcnRTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InVuZmxhdHRlbkZyb21TdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVRvUGFyY2VsKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudENhbGxiYWNrcyIgcmVtb3ZlZD0iMTQiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudENhbGxiYWNrczIiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5QmF0Y2goTGphdmEvdXRpbC9BcnJheUxpc3Q7KVtMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlclJlc3VsdDsiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXR0YWNoSW5mbyhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvY29udGVudC9wbS9Qcm92aWRlckluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWxrSW5zZXJ0KExhbmRyb2lkL25ldC9Vcmk7W0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlczspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbGwoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9vcy9CdW5kbGU7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5vbmljYWxpemUoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvbmV0L1VyaTsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZShMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXAoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7TGphdmEvaW8vUHJpbnRXcml0ZXI7W0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxsaW5nUGFja2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZXh0KClMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGF0aFBlcm1pc3Npb25zKClbTGFuZHJvaWQvY29udGVudC9wbS9QYXRoUGVybWlzc2lvbjsiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhZFBlcm1pc3Npb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmVhbVR5cGVzKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoTGFuZHJvaWQvbmV0L1VyaTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V3JpdGVQZXJtaXNzaW9uKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnQoTGFuZHJvaWQvbmV0L1VyaTtMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7KUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUZW1wb3JhcnkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5Bc3NldEZpbGUoTGFuZHJvaWQvbmV0L1VyaTtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRGaWxlRGVzY3JpcHRvcjsiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkFzc2V0RmlsZShMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0NhbmNlbGxhdGlvblNpZ25hbDspTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRGaWxlRGVzY3JpcHRvcjsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5GaWxlKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5GaWxlKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsOylMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5GaWxlSGVscGVyKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5QaXBlSGVscGVyKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO0xqYXZhL2xhbmcvT2JqZWN0O0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyJFBpcGVEYXRhV3JpdGVyOylMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5UeXBlZEFzc2V0RmlsZShMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRGaWxlRGVzY3JpcHRvcjsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5UeXBlZEFzc2V0RmlsZShMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWw7KUxhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3I7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeShMYW5kcm9pZC9uZXQvVXJpO1tMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeShMYW5kcm9pZC9uZXQvVXJpO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeShMYW5kcm9pZC9uZXQvVXJpO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWZyZXNoKExhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL29zL0NhbmNlbGxhdGlvblNpZ25hbDspWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGF0aFBlcm1pc3Npb25zKFtMYW5kcm9pZC9jb250ZW50L3BtL1BhdGhQZXJtaXNzaW9uOylWIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlYWRQZXJtaXNzaW9uKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V3JpdGVQZXJtaXNzaW9uKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2h1dGRvd24oKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InVuY2Fub25pY2FsaXplKExhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoTGFuZHJvaWQvbmV0L1VyaTtMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlciRQaXBlRGF0YVdyaXRlciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlRGF0YVRvUGlwZShMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjtMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTtMamF2YS9sYW5nL09iamVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJDbGllbnQiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQXV0b0Nsb3NlYWJsZSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlCYXRjaChMamF2YS91dGlsL0FycmF5TGlzdDspW0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyUmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1bGtJbnNlcnQoTGFuZHJvaWQvbmV0L1VyaTtbTGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FsbChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbm9uaWNhbGl6ZShMYW5kcm9pZC9uZXQvVXJpOylMYW5kcm9pZC9uZXQvVXJpOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVsZXRlKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxDb250ZW50UHJvdmlkZXIoKUxhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmVhbVR5cGVzKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoTGFuZHJvaWQvbmV0L1VyaTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0KExhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzOylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5Bc3NldEZpbGUoTGFuZHJvaWQvbmV0L1VyaTtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRGaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuQXNzZXRGaWxlKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsOylMYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldEZpbGVEZXNjcmlwdG9yOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkZpbGUoTGFuZHJvaWQvbmV0L1VyaTtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkZpbGUoTGFuZHJvaWQvbmV0L1VyaTtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWw7KUxhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlblR5cGVkQXNzZXRGaWxlRGVzY3JpcHRvcihMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRGaWxlRGVzY3JpcHRvcjsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5UeXBlZEFzc2V0RmlsZURlc2NyaXB0b3IoTGFuZHJvaWQvbmV0L1VyaTtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsOylMYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldEZpbGVEZXNjcmlwdG9yOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnkoTGFuZHJvaWQvbmV0L1VyaTtbTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL29zL0NhbmNlbGxhdGlvblNpZ25hbDspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnkoTGFuZHJvaWQvbmV0L1VyaTtbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnkoTGFuZHJvaWQvbmV0L1VyaTtbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0NhbmNlbGxhdGlvblNpZ25hbDspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVmcmVzaChMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWw7KVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVoiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5jYW5vbmljYWxpemUoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvbmV0L1VyaTsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZShMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlcztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyT3BlcmF0aW9uIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlck9wZXJhdGlvbiRCdWlsZGVyOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlcjtbTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJSZXN1bHQ7SSlMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlclJlc3VsdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmkoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBc3NlcnRRdWVyeSgpWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZWxldGUoKVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5zZXJ0KClaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlYWRPcGVyYXRpb24oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VwZGF0ZSgpWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXcml0ZU9wZXJhdGlvbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzWWllbGRBbGxvd2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3QXNzZXJ0UXVlcnkoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJPcGVyYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdEZWxldGUoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJPcGVyYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnNlcnQoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJPcGVyYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdVcGRhdGUoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJPcGVyYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlU2VsZWN0aW9uQXJnc0JhY2tSZWZlcmVuY2VzKFtMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlclJlc3VsdDtJKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlVmFsdWVCYWNrUmVmZXJlbmNlcyhbTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJSZXN1bHQ7SSlMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlck9wZXJhdGlvbiRCdWlsZGVyIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMYW5kcm9pZC9uZXQvVXJpOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJPcGVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aEV4cGVjdGVkQ291bnQoSSlMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlck9wZXJhdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhTZWxlY3Rpb24oTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlck9wZXJhdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhTZWxlY3Rpb25CYWNrUmVmZXJlbmNlKElJKUxhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyT3BlcmF0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aFZhbHVlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlck9wZXJhdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhWYWx1ZUJhY2tSZWZlcmVuY2UoTGphdmEvbGFuZy9TdHJpbmc7SSlMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlck9wZXJhdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhWYWx1ZUJhY2tSZWZlcmVuY2VzKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlczspTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJPcGVyYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoVmFsdWVzKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlczspTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJPcGVyYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoWWllbGRBbGxvd2VkKFopTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJPcGVyYXRpb24kQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyUmVzdWx0IiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iY291bnQiLz4KLQkJPGZpZWxkIG5hbWU9InVyaSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9Db250ZW50UXVlcnlNYXAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL09ic2VydmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO0xqYXZhL2xhbmcvU3RyaW5nO1pMYW5kcm9pZC9vcy9IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3dzKClMamF2YS91dGlsL01hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZXMoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXJ5KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2VlcFVwZGF0ZWQoWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjcXVpcmVDb250ZW50UHJvdmlkZXJDbGllbnQoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJDbGllbnQ7IiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImFjcXVpcmVDb250ZW50UHJvdmlkZXJDbGllbnQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyQ2xpZW50OyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3F1aXJlVW5zdGFibGVDb250ZW50UHJvdmlkZXJDbGllbnQoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJDbGllbnQ7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3F1aXJlVW5zdGFibGVDb250ZW50UHJvdmlkZXJDbGllbnQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyQ2xpZW50OyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUGVyaW9kaWNTeW5jKExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO0opViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTdGF0dXNDaGFuZ2VMaXN0ZW5lcihJTGFuZHJvaWQvY29udGVudC9TeW5jU3RhdHVzT2JzZXJ2ZXI7KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseUJhdGNoKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvQXJyYXlMaXN0OylbTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJSZXN1bHQ7IiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1bGtJbnNlcnQoTGFuZHJvaWQvbmV0L1VyaTtbTGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FsbChMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvb3MvQnVuZGxlOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsU3luYyhMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbFN5bmMoTGFuZHJvaWQvY29udGVudC9TeW5jUmVxdWVzdDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsU3luYyhMYW5kcm9pZC9uZXQvVXJpOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbm9uaWNhbGl6ZShMYW5kcm9pZC9uZXQvVXJpOylMYW5kcm9pZC9uZXQvVXJpOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVsZXRlKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudFN5bmMoKUxhbmRyb2lkL2NvbnRlbnQvU3luY0luZm87IiBzaW5jZT0iOCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50U3luY3MoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElzU3luY2FibGUoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMamF2YS9sYW5nL1N0cmluZzspSSIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXN0ZXJTeW5jQXV0b21hdGljYWxseSgpWiIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRnb2luZ1BlcnNpc3RlZFVyaVBlcm1pc3Npb25zKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJpb2RpY1N5bmNzKExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVyc2lzdGVkVXJpUGVybWlzc2lvbnMoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmVhbVR5cGVzKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5bmNBZGFwdGVyVHlwZXMoKVtMYW5kcm9pZC9jb250ZW50L1N5bmNBZGFwdGVyVHlwZTsiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3luY0F1dG9tYXRpY2FsbHkoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKExhbmRyb2lkL25ldC9Vcmk7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydChMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlczspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N5bmNBY3RpdmUoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N5bmNQZW5kaW5nKExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5Q2hhbmdlKExhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvZGF0YWJhc2UvQ29udGVudE9ic2VydmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5Q2hhbmdlKExhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvZGF0YWJhc2UvQ29udGVudE9ic2VydmVyO0kpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5Q2hhbmdlKExhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvZGF0YWJhc2UvQ29udGVudE9ic2VydmVyO1opViIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5Bc3NldEZpbGVEZXNjcmlwdG9yKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3I7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5Bc3NldEZpbGVEZXNjcmlwdG9yKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsOylMYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldEZpbGVEZXNjcmlwdG9yOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkZpbGVEZXNjcmlwdG9yKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5GaWxlRGVzY3JpcHRvcihMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0NhbmNlbGxhdGlvblNpZ25hbDspTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuSW5wdXRTdHJlYW0oTGFuZHJvaWQvbmV0L1VyaTspTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3Blbk91dHB1dFN0cmVhbShMYW5kcm9pZC9uZXQvVXJpOylMamF2YS9pby9PdXRwdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3Blbk91dHB1dFN0cmVhbShMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9pby9PdXRwdXRTdHJlYW07IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5UeXBlZEFzc2V0RmlsZURlc2NyaXB0b3IoTGFuZHJvaWQvbmV0L1VyaTtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3I7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuVHlwZWRBc3NldEZpbGVEZXNjcmlwdG9yKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL29zL0NhbmNlbGxhdGlvblNpZ25hbDspTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRGaWxlRGVzY3JpcHRvcjsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5KExhbmRyb2lkL25ldC9Vcmk7W0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWw7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5KExhbmRyb2lkL25ldC9Vcmk7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5KExhbmRyb2lkL25ldC9Vcmk7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWw7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlZnJlc2goTGFuZHJvaWQvbmV0L1VyaTtMYW5kcm9pZC9vcy9CdW5kbGU7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsOylaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlckNvbnRlbnRPYnNlcnZlcihMYW5kcm9pZC9uZXQvVXJpO1pMYW5kcm9pZC9kYXRhYmFzZS9Db250ZW50T2JzZXJ2ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlUGVyc2lzdGFibGVVcmlQZXJtaXNzaW9uKExhbmRyb2lkL25ldC9Vcmk7SSlWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVQZXJpb2RpY1N5bmMoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlU3RhdHVzQ2hhbmdlTGlzdGVuZXIoTGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFN5bmMoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFN5bmMoTGFuZHJvaWQvY29udGVudC9TeW5jUmVxdWVzdDspViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SXNTeW5jYWJsZShMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O0xqYXZhL2xhbmcvU3RyaW5nO0kpViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXN0ZXJTeW5jQXV0b21hdGljYWxseShaKVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3luY0F1dG9tYXRpY2FsbHkoTGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtMamF2YS9sYW5nL1N0cmluZztaKVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRTeW5jKExhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InRha2VQZXJzaXN0YWJsZVVyaVBlcm1pc3Npb24oTGFuZHJvaWQvbmV0L1VyaTtJKVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InVuY2Fub25pY2FsaXplKExhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKExhbmRyb2lkL2RhdGFiYXNlL0NvbnRlbnRPYnNlcnZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZShMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlcztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWxpZGF0ZVN5bmNFeHRyYXNCdW5kbGUoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTllfQ1VSU09SX0lURU1fVFlQRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVVJTT1JfRElSX0JBU0VfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ1VSU09SX0lURU1fQkFTRV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9IT05PUkVEX0FSR1MiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUkVGUkVTSF9TVVBQT1JURUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU0laRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9UT1RBTF9DT1VOVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOT1RJRllfU0tJUF9OT1RJRllfRk9SX0RFU0NFTkRBTlRTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PVElGWV9TWU5DX1RPX05FVFdPUksiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iUVVFUllfQVJHX0xJTUlUIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlFVRVJZX0FSR19PRkZTRVQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUVVFUllfQVJHX1NPUlRfQ09MTEFUSU9OIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlFVRVJZX0FSR19TT1JUX0NPTFVNTlMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUVVFUllfQVJHX1NPUlRfRElSRUNUSU9OIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlFVRVJZX0FSR19TUUxfU0VMRUNUSU9OIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlFVRVJZX0FSR19TUUxfU0VMRUNUSU9OX0FSR1MiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUVVFUllfQVJHX1NRTF9TT1JUX09SREVSIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlFVRVJZX1NPUlRfRElSRUNUSU9OX0FTQ0VORElORyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJRVUVSWV9TT1JUX0RJUkVDVElPTl9ERVNDRU5ESU5HIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNDSEVNRV9BTkRST0lEX1JFU09VUkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0hFTUVfQ09OVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iU0NIRU1FX0ZJTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNfRVhUUkFTX0FDQ09VTlQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX0VYVFJBU19ESVNDQVJEX0xPQ0FMX0RFTEVUSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ19FWFRSQVNfRE9fTk9UX1JFVFJZIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ19FWFRSQVNfRVhQRURJVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX0VYVFJBU19GT1JDRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNfRVhUUkFTX0lHTk9SRV9CQUNLT0ZGIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ19FWFRSQVNfSUdOT1JFX1NFVFRJTkdTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ19FWFRSQVNfSU5JVElBTElaRSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNfRVhUUkFTX01BTlVBTCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNfRVhUUkFTX09WRVJSSURFX1RPT19NQU5ZX0RFTEVUSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ19FWFRSQVNfUkVRVUlSRV9DSEFSR0lORyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX0VYVFJBU19VUExPQUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNfT0JTRVJWRVJfVFlQRV9BQ1RJVkUiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX09CU0VSVkVSX1RZUEVfUEVORElORyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNfT0JTRVJWRVJfVFlQRV9TRVRUSU5HUyIgc2luY2U9IjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29udGVudFVyaXMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZElkKExhbmRyb2lkL25ldC9VcmkkQnVpbGRlcjtKKUxhbmRyb2lkL25ldC9VcmkkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZUlkKExhbmRyb2lkL25ldC9Vcmk7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoQXBwZW5kZWRJZChMYW5kcm9pZC9uZXQvVXJpO0opTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWluc0tleShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXNCb29sZWFuKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0Jvb2xlYW47Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXNCeXRlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0J5dGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXNCeXRlQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7KVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXNEb3VibGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvRG91YmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFzRmxvYXQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvRmxvYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXNJbnRlZ2VyKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXNMb25nKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0xvbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXNTaG9ydChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TaG9ydDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBc1N0cmluZyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5U2V0KClMamF2YS91dGlsL1NldDsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0Jvb2xlYW47KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9CeXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvRG91YmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvRmxvYXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9JbnRlZ2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvTG9uZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Nob3J0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL2xhbmcvU3RyaW5nO1tCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRBbGwoTGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0TnVsbChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZVNldCgpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29udGV4dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZFNlcnZpY2UoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7TGFuZHJvaWQvY29udGVudC9TZXJ2aWNlQ29ubmVjdGlvbjtJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja0NhbGxpbmdPclNlbGZQZXJtaXNzaW9uKExqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tDYWxsaW5nT3JTZWxmVXJpUGVybWlzc2lvbihMYW5kcm9pZC9uZXQvVXJpO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja0NhbGxpbmdVcmlQZXJtaXNzaW9uKExhbmRyb2lkL25ldC9Vcmk7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tQZXJtaXNzaW9uKExqYXZhL2xhbmcvU3RyaW5nO0lJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1NlbGZQZXJtaXNzaW9uKExqYXZhL2xhbmcvU3RyaW5nOylJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1VyaVBlcm1pc3Npb24oTGFuZHJvaWQvbmV0L1VyaTtJSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrVXJpUGVybWlzc2lvbihMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJXYWxscGFwZXIoKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ29uZmlndXJhdGlvbkNvbnRleHQoTGFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbjspTGFuZHJvaWQvY29udGVudC9Db250ZXh0OyIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ29udGV4dEZvclNwbGl0KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVEZXZpY2VQcm90ZWN0ZWRTdG9yYWdlQ29udGV4dCgpTGFuZHJvaWQvY29udGVudC9Db250ZXh0OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRGlzcGxheUNvbnRleHQoTGFuZHJvaWQvdmlldy9EaXNwbGF5OylMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVQYWNrYWdlQ29udGV4dChMamF2YS9sYW5nL1N0cmluZztJKUxhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRhYmFzZUxpc3QoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVEYXRhYmFzZShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZUZpbGUoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVTaGFyZWRQcmVmZXJlbmNlcyhMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5mb3JjZUNhbGxpbmdPclNlbGZVcmlQZXJtaXNzaW9uKExhbmRyb2lkL25ldC9Vcmk7SUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5mb3JjZUNhbGxpbmdVcmlQZXJtaXNzaW9uKExhbmRyb2lkL25ldC9Vcmk7SUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5mb3JjZVBlcm1pc3Npb24oTGphdmEvbGFuZy9TdHJpbmc7SUlMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZm9yY2VVcmlQZXJtaXNzaW9uKExhbmRyb2lkL25ldC9Vcmk7SUlJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmZvcmNlVXJpUGVybWlzc2lvbihMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lJSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsZUxpc3QoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvbkNvbnRleHQoKUxhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvbkluZm8oKUxhbmRyb2lkL2NvbnRlbnQvcG0vQXBwbGljYXRpb25JbmZvOyIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBc3NldHMoKUxhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0TWFuYWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWNoZURpcigpTGphdmEvaW8vRmlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGFzc0xvYWRlcigpTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2RlQ2FjaGVEaXIoKUxqYXZhL2lvL0ZpbGU7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2xvcihJKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yU3RhdGVMaXN0KEkpTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50UmVzb2x2ZXIoKUxhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFEaXIoKUxqYXZhL2lvL0ZpbGU7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhYmFzZVBhdGgoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2lvL0ZpbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlyKExqYXZhL2xhbmcvU3RyaW5nO0kpTGphdmEvaW8vRmlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcmF3YWJsZShJKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZXJuYWxDYWNoZURpcigpTGphdmEvaW8vRmlsZTsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZXJuYWxDYWNoZURpcnMoKVtMamF2YS9pby9GaWxlOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZXJuYWxGaWxlc0RpcihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvaW8vRmlsZTsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZXJuYWxGaWxlc0RpcnMoTGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9pby9GaWxlOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZXJuYWxNZWRpYURpcnMoKVtMamF2YS9pby9GaWxlOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsZVN0cmVhbVBhdGgoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2lvL0ZpbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsZXNEaXIoKUxqYXZhL2lvL0ZpbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFpbkV4ZWN1dG9yKClMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYWluTG9vcGVyKClMYW5kcm9pZC9vcy9Mb29wZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Tm9CYWNrdXBGaWxlc0RpcigpTGphdmEvaW8vRmlsZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iYkRpcigpTGphdmEvaW8vRmlsZTsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iYkRpcnMoKVtMamF2YS9pby9GaWxlOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZUNvZGVQYXRoKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZU1hbmFnZXIoKUxhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VSZXNvdXJjZVBhdGgoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNvdXJjZXMoKUxhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaGFyZWRQcmVmZXJlbmNlcyhMamF2YS9sYW5nL1N0cmluZztJKUxhbmRyb2lkL2NvbnRlbnQvU2hhcmVkUHJlZmVyZW5jZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nKElbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5c3RlbVNlcnZpY2UoTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1TZXJ2aWNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1TZXJ2aWNlTmFtZShMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHQoSSlMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaGVtZSgpTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzJFRoZW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdhbGxwYXBlcigpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdhbGxwYXBlckRlc2lyZWRNaW5pbXVtSGVpZ2h0KClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdhbGxwYXBlckRlc2lyZWRNaW5pbXVtV2lkdGgoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ3JhbnRVcmlQZXJtaXNzaW9uKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL25ldC9Vcmk7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZXZpY2VQcm90ZWN0ZWRTdG9yYWdlKClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Jlc3RyaWN0ZWQoKVoiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZURhdGFiYXNlRnJvbShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im1vdmVTaGFyZWRQcmVmZXJlbmNlc0Zyb20oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKElbSSlMYW5kcm9pZC9jb250ZW50L3Jlcy9UeXBlZEFycmF5OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpblN0eWxlZEF0dHJpYnV0ZXMoTGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7W0kpTGFuZHJvaWQvY29udGVudC9yZXMvVHlwZWRBcnJheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKExhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O1tJSUkpTGFuZHJvaWQvY29udGVudC9yZXMvVHlwZWRBcnJheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKFtJKUxhbmRyb2lkL2NvbnRlbnQvcmVzL1R5cGVkQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkZpbGVJbnB1dChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvaW8vRmlsZUlucHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5GaWxlT3V0cHV0KExqYXZhL2xhbmcvU3RyaW5nO0kpTGphdmEvaW8vRmlsZU91dHB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuT3JDcmVhdGVEYXRhYmFzZShMamF2YS9sYW5nL1N0cmluZztJTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJEN1cnNvckZhY3Rvcnk7KUxhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuT3JDcmVhdGVEYXRhYmFzZShMamF2YS9sYW5nL1N0cmluZztJTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJEN1cnNvckZhY3Rvcnk7TGFuZHJvaWQvZGF0YWJhc2UvRGF0YWJhc2VFcnJvckhhbmRsZXI7KUxhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InBlZWtXYWxscGFwZXIoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlckNvbXBvbmVudENhbGxiYWNrcyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudENhbGxiYWNrczspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJSZWNlaXZlcihMYW5kcm9pZC9jb250ZW50L0Jyb2FkY2FzdFJlY2VpdmVyO0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50RmlsdGVyOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlclJlY2VpdmVyKExhbmRyb2lkL2NvbnRlbnQvQnJvYWRjYXN0UmVjZWl2ZXI7TGFuZHJvaWQvY29udGVudC9JbnRlbnRGaWx0ZXI7SSlMYW5kcm9pZC9jb250ZW50L0ludGVudDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyUmVjZWl2ZXIoTGFuZHJvaWQvY29udGVudC9Ccm9hZGNhc3RSZWNlaXZlcjtMYW5kcm9pZC9jb250ZW50L0ludGVudEZpbHRlcjtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9IYW5kbGVyOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlclJlY2VpdmVyKExhbmRyb2lkL2NvbnRlbnQvQnJvYWRjYXN0UmVjZWl2ZXI7TGFuZHJvaWQvY29udGVudC9JbnRlbnRGaWx0ZXI7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvSGFuZGxlcjtJKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlU3RpY2t5QnJvYWRjYXN0KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVN0aWNreUJyb2FkY2FzdEFzVXNlcihMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMTciIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmV2b2tlVXJpUGVybWlzc2lvbihMYW5kcm9pZC9uZXQvVXJpO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InJldm9rZVVyaVBlcm1pc3Npb24oTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvbmV0L1VyaTtJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRCcm9hZGNhc3QoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kQnJvYWRjYXN0KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZEJyb2FkY2FzdEFzVXNlcihMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kQnJvYWRjYXN0QXNVc2VyKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRPcmRlcmVkQnJvYWRjYXN0KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZE9yZGVyZWRCcm9hZGNhc3QoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9Ccm9hZGNhc3RSZWNlaXZlcjtMYW5kcm9pZC9vcy9IYW5kbGVyO0lMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kT3JkZXJlZEJyb2FkY2FzdEFzVXNlcihMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQnJvYWRjYXN0UmVjZWl2ZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjtJTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kU3RpY2t5QnJvYWRjYXN0KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7TGFuZHJvaWQvb3MvVXNlckhhbmRsZTspViIgc2luY2U9IjE3IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRTdGlja3lPcmRlcmVkQnJvYWRjYXN0KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xhbmRyb2lkL2NvbnRlbnQvQnJvYWRjYXN0UmVjZWl2ZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjtJTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iNSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kU3RpY2t5T3JkZXJlZEJyb2FkY2FzdEFzVXNlcihMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlO0xhbmRyb2lkL2NvbnRlbnQvQnJvYWRjYXN0UmVjZWl2ZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjtJTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMTciIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGhlbWUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2FsbHBhcGVyKExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXYWxscGFwZXIoTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBY3Rpdml0aWVzKFtMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBY3Rpdml0aWVzKFtMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWN0aXZpdHkoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEFjdGl2aXR5KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRGb3JlZ3JvdW5kU2VydmljZShMYW5kcm9pZC9jb250ZW50L0ludGVudDspTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRJbnN0cnVtZW50YXRpb24oTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0SW50ZW50U2VuZGVyKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50U2VuZGVyO0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0lJSSlWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0SW50ZW50U2VuZGVyKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50U2VuZGVyO0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0lJSUxhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRTZXJ2aWNlKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcFNlcnZpY2UoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmJpbmRTZXJ2aWNlKExhbmRyb2lkL2NvbnRlbnQvU2VydmljZUNvbm5lY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyQ29tcG9uZW50Q2FsbGJhY2tzKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50Q2FsbGJhY2tzOylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyUmVjZWl2ZXIoTGFuZHJvaWQvY29udGVudC9Ccm9hZGNhc3RSZWNlaXZlcjspViIvPgotCQk8ZmllbGQgbmFtZT0iQUNDRVNTSUJJTElUWV9TRVJWSUNFIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNDT1VOVF9TRVJWSUNFIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSVZJVFlfU0VSVklDRSIvPgotCQk8ZmllbGQgbmFtZT0iQUxBUk1fU0VSVklDRSIvPgotCQk8ZmllbGQgbmFtZT0iQVBQV0lER0VUX1NFUlZJQ0UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQVBQX09QU19TRVJWSUNFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX1NFUlZJQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkJBVFRFUllfU0VSVklDRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX0FCT1ZFX0NMSUVOVCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX0FESlVTVF9XSVRIX0FDVElWSVRZIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkJJTkRfQUxMT1dfT09NX01BTkFHRU1FTlQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iQklORF9BVVRPX0NSRUFURSIvPgotCQk8ZmllbGQgbmFtZT0iQklORF9ERUJVR19VTkJJTkQiLz4KLQkJPGZpZWxkIG5hbWU9IkJJTkRfRVhURVJOQUxfU0VSVklDRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX0lNUE9SVEFOVCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX05PVF9GT1JFR1JPVU5EIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQklORF9XQUlWRV9QUklPUklUWSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCTFVFVE9PVEhfU0VSVklDRSIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQU1FUkFfU0VSVklDRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBUSU9OSU5HX1NFUlZJQ0UiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FSUklFUl9DT05GSUdfU0VSVklDRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTElQQk9BUkRfU0VSVklDRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUEFOSU9OX0RFVklDRV9TRVJWSUNFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTk5FQ1RJVklUWV9TRVJWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05TVU1FUl9JUl9TRVJWSUNFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFWFRfSUdOT1JFX1NFQ1VSSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URVhUX0lOQ0xVREVfQ09ERSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVYVF9SRVNUUklDVEVEIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iQ1JPU1NfUFJPRklMRV9BUFBTX1NFUlZJQ0UiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iREVWSUNFX1BPTElDWV9TRVJWSUNFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRElTUExBWV9TRVJWSUNFIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkRPV05MT0FEX1NFUlZJQ0UiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEUk9QQk9YX1NFUlZJQ0UiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFVUlDQ19TRVJWSUNFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTkdFUlBSSU5UX1NFUlZJQ0UiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iSEFSRFdBUkVfUFJPUEVSVElFU19TRVJWSUNFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOUFVUX01FVEhPRF9TRVJWSUNFIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iSU5QVVRfU0VSVklDRSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJUFNFQ19TRVJWSUNFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkpPQl9TQ0hFRFVMRVJfU0VSVklDRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlHVUFSRF9TRVJWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVVOQ0hFUl9BUFBTX1NFUlZJQ0UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTEFZT1VUX0lORkxBVEVSX1NFUlZJQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FUSU9OX1NFUlZJQ0UiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX1BST0pFQ1RJT05fU0VSVklDRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9ST1VURVJfU0VSVklDRSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9TRVNTSU9OX1NFUlZJQ0UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTUlESV9TRVJWSUNFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfQVBQRU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX0VOQUJMRV9XUklURV9BSEVBRF9MT0dHSU5HIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfTVVMVElfUFJPQ0VTUyIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9OT19MT0NBTElaRURfQ09MTEFUT1JTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfUFJJVkFURSIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9XT1JMRF9SRUFEQUJMRSIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfV09STERfV1JJVEVBQkxFIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SS19TVEFUU19TRVJWSUNFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik5GQ19TRVJWSUNFIiBzaW5jZT0iMTAiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PVElGSUNBVElPTl9TRVJWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOU0RfU0VSVklDRSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQT1dFUl9TRVJWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklOVF9TRVJWSUNFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQ0VJVkVSX1ZJU0lCTEVfVE9fSU5TVEFOVF9BUFBTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1RSSUNUSU9OU19TRVJWSUNFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQVJDSF9TRVJWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfU0VSVklDRSIvPgotCQk8ZmllbGQgbmFtZT0iU0hPUlRDVVRfU0VSVklDRSIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVE9SQUdFX1NFUlZJQ0UiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVE9SQUdFX1NUQVRTX1NFUlZJQ0UiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iU1lTVEVNX0hFQUxUSF9TRVJWSUNFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRFTEVDT01fU0VSVklDRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJURUxFUEhPTllfU0VSVklDRSIvPgotCQk8ZmllbGQgbmFtZT0iVEVMRVBIT05ZX1NVQlNDUklQVElPTl9TRVJWSUNFIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFRfQ0xBU1NJRklDQVRJT05fU0VSVklDRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJURVhUX1NFUlZJQ0VTX01BTkFHRVJfU0VSVklDRSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUVl9JTlBVVF9TRVJWSUNFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlVJX01PREVfU0VSVklDRSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQUdFX1NUQVRTX1NFUlZJQ0UiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iVVNCX1NFUlZJQ0UiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iVVNFUl9TRVJWSUNFIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IlZJQlJBVE9SX1NFUlZJQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IldBTExQQVBFUl9TRVJWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX0FXQVJFX1NFUlZJQ0UiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9QMlBfU0VSVklDRSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1JUVF9SQU5HSU5HX1NFUlZJQ0UiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9TRVJWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSU5ET1dfU0VSVklDRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9Db250ZXh0V3JhcHBlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29udGV4dCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdHRhY2hCYXNlQ29udGV4dChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYXNlQ29udGV4dCgpTGFuZHJvaWQvY29udGVudC9Db250ZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VDb2RlUGF0aCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZVJlc291cmNlUGF0aCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0N1cnNvckxvYWRlciIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvY29udGVudC9Bc3luY1Rhc2tMb2FkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9uZXQvVXJpO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxpdmVyUmVzdWx0KExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb2plY3Rpb24oKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxlY3Rpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGlvbkFyZ3MoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb3J0T3JkZXIoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVyaSgpTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkSW5CYWNrZ3JvdW5kKClMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYW5jZWxlZChMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9qZWN0aW9uKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbGVjdGlvbihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbGVjdGlvbkFyZ3MoW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U29ydE9yZGVyKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXJpKExhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWwoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNtaXNzKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJCVVRUT04xIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQlVUVE9OMiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkJVVFRPTjMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCVVRUT05fTkVHQVRJVkUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJCVVRUT05fTkVVVFJBTCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkJVVFRPTl9QT1NJVElWRSIgc2luY2U9IjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlJE9uQ2FuY2VsTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FuY2VsKExhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNsaWNrTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2xpY2soTGFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2U7SSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkRpc21pc3NMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25EaXNtaXNzKExhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbktleUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbktleShMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZTtJTGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2UkT25NdWx0aUNob2ljZUNsaWNrTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2xpY2soTGFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2U7SVopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2UkT25TaG93TGlzdGVuZXIiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2hvdyhMYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9FbnRpdHkiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTdWJWYWx1ZShMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudGl0eVZhbHVlcygpTGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YlZhbHVlcygpTGphdmEvdXRpbC9BcnJheUxpc3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0VudGl0eSROYW1lZENvbnRlbnRWYWx1ZXMiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlczspViIvPgotCQk8ZmllbGQgbmFtZT0idXJpIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2YWx1ZXMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvRW50aXR5SXRlcmF0b3IiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvSXRlcmF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0ludGVudCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9DbGFzczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvQ2xhc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDYXRlZ29yeShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRmxhZ3MoSSlMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZUZpbHRlcigpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ2hvb3NlcihMYW5kcm9pZC9jb250ZW50L0ludGVudDtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ2hvb3NlcihMYW5kcm9pZC9jb250ZW50L0ludGVudDtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlcjspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7IiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWxsSW4oTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsdGVyRXF1YWxzKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsdGVySGFzaENvZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3Rpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvb2xlYW5BcnJheUV4dHJhKExqYXZhL2xhbmcvU3RyaW5nOylbWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvb2xlYW5FeHRyYShMamF2YS9sYW5nL1N0cmluZztaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCdW5kbGVFeHRyYShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5dGVBcnJheUV4dHJhKExqYXZhL2xhbmcvU3RyaW5nOylbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5dGVFeHRyYShMamF2YS9sYW5nL1N0cmluZztCKUIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYXRlZ29yaWVzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyQXJyYXlFeHRyYShMamF2YS9sYW5nL1N0cmluZzspW0MiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyRXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7QylDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhclNlcXVlbmNlQXJyYXlFeHRyYShMamF2YS9sYW5nL1N0cmluZzspW0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyU2VxdWVuY2VBcnJheUxpc3RFeHRyYShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9BcnJheUxpc3Q7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJTZXF1ZW5jZUV4dHJhKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGlwRGF0YSgpTGFuZHJvaWQvY29udGVudC9DbGlwRGF0YTsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBvbmVudCgpTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGEoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YVN0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG91YmxlQXJyYXlFeHRyYShMamF2YS9sYW5nL1N0cmluZzspW0QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb3VibGVFeHRyYShMamF2YS9sYW5nL1N0cmluZztEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbGFncygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsb2F0QXJyYXlFeHRyYShMamF2YS9sYW5nL1N0cmluZzspW0YiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbG9hdEV4dHJhKExqYXZhL2xhbmcvU3RyaW5nO0YpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludEFycmF5RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7KVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZWdlckFycmF5TGlzdEV4dHJhKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0FycmF5TGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlbnQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlbnRPbGQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmdBcnJheUV4dHJhKExqYXZhL2xhbmcvU3RyaW5nOylbSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmdFeHRyYShMamF2YS9sYW5nL1N0cmluZztKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyY2VsYWJsZUFycmF5RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7KVtMYW5kcm9pZC9vcy9QYXJjZWxhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmNlbGFibGVBcnJheUxpc3RFeHRyYShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9BcnJheUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyY2VsYWJsZUV4dHJhKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9vcy9QYXJjZWxhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjaGVtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VsZWN0b3IoKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIgc2luY2U9IjE1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VyaWFsaXphYmxlRXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2lvL1NlcmlhbGl6YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG9ydEFycmF5RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7KVtTIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvcnRFeHRyYShMamF2YS9sYW5nL1N0cmluZztTKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb3VyY2VCb3VuZHMoKUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7IiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmluZ0FycmF5RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmdBcnJheUxpc3RFeHRyYShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9BcnJheUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nRXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0NhdGVnb3J5KExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNGaWxlRGVzY3JpcHRvcnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYWtlTWFpbkFjdGl2aXR5KExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYWtlTWFpblNlbGVjdG9yQWN0aXZpdHkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIgc2luY2U9IjE1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWFrZVJlc3RhcnRBY3Rpdml0eVRhc2soTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9Im5vcm1hbGl6ZU1pbWVUeXBlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlSW50ZW50KExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztMb3JnL3htbHB1bGwvdjEvWG1sUHVsbFBhcnNlcjtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VVcmkoTGphdmEvbGFuZy9TdHJpbmc7SSlMYW5kcm9pZC9jb250ZW50L0ludGVudDsiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0Q2hhclNlcXVlbmNlQXJyYXlMaXN0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9BcnJheUxpc3Q7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRFeHRyYShMamF2YS9sYW5nL1N0cmluZztCKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEV4dHJhKExqYXZhL2xhbmcvU3RyaW5nO0MpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7RClMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRFeHRyYShMamF2YS9sYW5nL1N0cmluZztGKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEV4dHJhKExqYXZhL2xhbmcvU3RyaW5nO0kpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7SilMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRFeHRyYShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEV4dHJhKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL1BhcmNlbGFibGU7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEV4dHJhKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL1NlcmlhbGl6YWJsZTspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEV4dHJhKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRFeHRyYShMamF2YS9sYW5nL1N0cmluZztTKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEV4dHJhKExqYXZhL2xhbmcvU3RyaW5nO1opTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7W0IpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7W0MpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7W0QpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7W0YpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7W0kpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7W0opTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7W0xhbmRyb2lkL29zL1BhcmNlbGFibGU7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEV4dHJhKExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEV4dHJhKExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7W1MpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7W1opTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmFzKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRFeHRyYXMoTGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRJbnRlZ2VyQXJyYXlMaXN0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9BcnJheUxpc3Q7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFBhcmNlbGFibGVBcnJheUxpc3RFeHRyYShMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0FycmF5TGlzdDspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0U3RyaW5nQXJyYXlMaXN0RXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9BcnJheUxpc3Q7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRGcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUNhdGVnb3J5KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlRXh0cmEoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVGbGFncyhJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2VFeHRyYXMoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBsYWNlRXh0cmFzKExhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmVBY3Rpdml0eShMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyOylMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZUFjdGl2aXR5SW5mbyhMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyO0kpTGFuZHJvaWQvY29udGVudC9wbS9BY3Rpdml0eUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZVR5cGUoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmVUeXBlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZVR5cGVJZk5lZWRlZChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWN0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGFzcyhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9DbGFzczspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2xhc3NOYW1lKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2xhc3NOYW1lKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGlwRGF0YShMYW5kcm9pZC9jb250ZW50L0NsaXBEYXRhOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb21wb25lbnQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhKExhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFBbmROb3JtYWxpemUoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhQW5kVHlwZShMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhQW5kVHlwZUFuZE5vcm1hbGl6ZShMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dHJhc0NsYXNzTG9hZGVyKExqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGbGFncyhJKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhY2thZ2UoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWxlY3RvcihMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIgc2luY2U9IjE1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U291cmNlQm91bmRzKExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHlwZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHlwZUFuZE5vcm1hbGl6ZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1VSSSgpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InRvVXJpKEkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FJUlBMQU5FX01PREVfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FMTF9BUFBTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQU5TV0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQVBQTElDQVRJT05fUFJFRkVSRU5DRVMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FQUExJQ0FUSU9OX1JFU1RSSUNUSU9OU19DSEFOR0VEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BUFBfRVJST1IiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FTU0lTVCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQVRUQUNIX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9CQVRURVJZX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9CQVRURVJZX0xPVyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0JBVFRFUllfT0tBWSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9CT09UX0NPTVBMRVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0JVR19SRVBPUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DQUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ0FMTF9CVVRUT04iLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DQU1FUkFfQlVUVE9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ0FSUklFUl9TRVRVUCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ0hPT1NFUiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NMT1NFX1NZU1RFTV9ESUFMT0dTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ09ORklHVVJBVElPTl9DSEFOR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ1JFQVRFX0RPQ1VNRU5UIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DUkVBVEVfU0hPUlRDVVQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9EQVRFX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9ERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fREVMRVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fREVWSUNFX1NUT1JBR0VfTE9XIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RFVklDRV9TVE9SQUdFX09LIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RJQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9ET0NLX0VWRU5UIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RSRUFNSU5HX1NUQVJURUQiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RSRUFNSU5HX1NUT1BQRUQiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0VESVQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9FWFRFUk5BTF9BUFBMSUNBVElPTlNfQVZBSUxBQkxFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0VYVEVSTkFMX0FQUExJQ0FUSU9OU19VTkFWQUlMQUJMRSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9GQUNUT1JZX1RFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9HRVRfQ09OVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0dFVF9SRVNUUklDVElPTl9FTlRSSUVTIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9HVEFMS19TRVJWSUNFX0NPTk5FQ1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0dUQUxLX1NFUlZJQ0VfRElTQ09OTkVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fSEVBRFNFVF9QTFVHIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fSU5QVVRfTUVUSE9EX0NIQU5HRUQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fSU5TRVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fSU5TRVJUX09SX0VESVQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9JTlNUQUxMX0ZBSUxVUkUiIHNpbmNlPSIyNyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0lOU1RBTExfUEFDS0FHRSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTE9DQUxFX0NIQU5HRUQiIHNpbmNlPSI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTE9DS0VEX0JPT1RfQ09NUExFVEVEIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NQUlOIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTUFOQUdFRF9QUk9GSUxFX0FEREVEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NQU5BR0VEX1BST0ZJTEVfQVZBSUxBQkxFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NQU5BR0VEX1BST0ZJTEVfUkVNT1ZFRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTUFOQUdFRF9QUk9GSUxFX1VOQVZBSUxBQkxFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NQU5BR0VEX1BST0ZJTEVfVU5MT0NLRUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX01BTkFHRV9ORVRXT1JLX1VTQUdFIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NQU5BR0VfUEFDS0FHRV9TVE9SQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTUVESUFfQkFEX1JFTU9WQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NRURJQV9CVVRUT04iLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NRURJQV9DSEVDS0lORyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NRURJQV9FSkVDVCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX01FRElBX01PVU5URUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NRURJQV9OT0ZTIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX01FRElBX1JFTU9WRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NRURJQV9TQ0FOTkVSX0ZJTklTSEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTUVESUFfU0NBTk5FUl9TQ0FOX0ZJTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NRURJQV9TQ0FOTkVSX1NUQVJURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NRURJQV9TSEFSRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NRURJQV9VTk1PVU5UQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX01FRElBX1VOTU9VTlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX01ZX1BBQ0tBR0VfUkVQTEFDRUQiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX01ZX1BBQ0tBR0VfU1VTUEVOREVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NWV9QQUNLQUdFX1VOU1VTUEVOREVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9ORVdfT1VUR09JTkdfQ0FMTCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX09QRU5fRE9DVU1FTlQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX09QRU5fRE9DVU1FTlRfVFJFRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUEFDS0FHRVNfU1VTUEVOREVEIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QQUNLQUdFU19VTlNVU1BFTkRFRCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUEFDS0FHRV9BRERFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BBQ0tBR0VfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BBQ0tBR0VfREFUQV9DTEVBUkVEIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BBQ0tBR0VfRklSU1RfTEFVTkNIIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QQUNLQUdFX0ZVTExZX1JFTU9WRUQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BBQ0tBR0VfSU5TVEFMTCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QQUNLQUdFX05FRURTX1ZFUklGSUNBVElPTiIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUEFDS0FHRV9SRU1PVkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUEFDS0FHRV9SRVBMQUNFRCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QQUNLQUdFX1JFU1RBUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BBQ0tBR0VfVkVSSUZJRUQiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BBU1RFIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QSUNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUElDS19BQ1RJVklUWSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BPV0VSX0NPTk5FQ1RFRCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QT1dFUl9ESVNDT05ORUNURUQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUE9XRVJfVVNBR0VfU1VNTUFSWSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QUk9DRVNTX1RFWFQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BST1ZJREVSX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9RVUlDS19DTE9DSyIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUVVJQ0tfVklFVyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUkVCT09UIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUlVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0NSRUVOX09GRiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NDUkVFTl9PTiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NFQVJDSCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NFQVJDSF9MT05HX1BSRVNTIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NFTkQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TRU5EVE8iLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TRU5EX01VTFRJUExFIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NFVF9XQUxMUEFQRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TSE9XX0FQUF9JTkZPIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TSFVURE9XTiIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TWU5DIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU1lTVEVNX1RVVE9SSUFMIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1RJTUVaT05FX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9USU1FX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9USU1FX1RJQ0siLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9VSURfUkVNT1ZFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1VNU19DT05ORUNURUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVU1TX0RJU0NPTk5FQ1RFRCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9VTklOU1RBTExfUEFDS0FHRSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVVNFUl9CQUNLR1JPVU5EIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9VU0VSX0ZPUkVHUk9VTkQiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1VTRVJfSU5JVElBTElaRSIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVVNFUl9QUkVTRU5UIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1VTRVJfVU5MT0NLRUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1ZJRVciLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9WT0lDRV9DT01NQU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fV0FMTFBBUEVSX0NIQU5HRUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fV0VCX1NFQVJDSCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfQUxURVJOQVRJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0FQUF9CUk9XU0VSIiBzaW5jZT0iMTUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0FQUF9DQUxDVUxBVE9SIiBzaW5jZT0iMTUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0FQUF9DQUxFTkRBUiIgc2luY2U9IjE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9BUFBfQ09OVEFDVFMiIHNpbmNlPSIxNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfQVBQX0VNQUlMIiBzaW5jZT0iMTUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0FQUF9HQUxMRVJZIiBzaW5jZT0iMTUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0FQUF9NQVBTIiBzaW5jZT0iMTUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0FQUF9NQVJLRVQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfQVBQX01FU1NBR0lORyIgc2luY2U9IjE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9BUFBfTVVTSUMiIHNpbmNlPSIxNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfQlJPV1NBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9DQVJfRE9DSyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0NBUl9NT0RFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfREVTS19ET0NLIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfREVWRUxPUE1FTlRfUFJFRkVSRU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfRU1CRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0ZSQU1FV09SS19JTlNUUlVNRU5UQVRJT05fVEVTVCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfR0FER0VUIiByZW1vdmVkPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9IRV9ERVNLX0RPQ0siIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfSE9NRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfSU5GTyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0xBVU5DSEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9MRUFOQkFDS19MQVVOQ0hFUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9MRV9ERVNLX0RPQ0siIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfTU9OS0VZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9PUEVOQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfUFJFRkVSRU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfU0FNUExFX0NPREUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX1NFTEVDVEVEX0FMVEVSTkFUSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9UQUIiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX1RFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX1RZUEVEX09QRU5BQkxFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX1VOSVRfVEVTVCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfVk9JQ0UiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfVlJfSE9NRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BTEFSTV9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUxMT1dfTVVMVElQTEUiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUxMT1dfUkVQTEFDRSIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUxURVJOQVRFX0lOVEVOVFMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQVNTSVNUX0NPTlRFWFQiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQVNTSVNUX0lOUFVUX0RFVklDRV9JRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BU1NJU1RfSU5QVVRfSElOVF9LRVlCT0FSRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BU1NJU1RfUEFDS0FHRSIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BU1NJU1RfVUlEIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0JDQyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQlVHX1JFUE9SVCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DQyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0hBTkdFRF9DT01QT05FTlRfTkFNRSIgc2luY2U9IjUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DSEFOR0VEX0NPTVBPTkVOVF9OQU1FX0xJU1QiIHNpbmNlPSI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DSEFOR0VEX1BBQ0tBR0VfTElTVCIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0NIQU5HRURfVUlEX0xJU1QiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DSE9PU0VSX1JFRklORU1FTlRfSU5URU5UX1NFTkRFUiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DSE9PU0VSX1RBUkdFVFMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0hPU0VOX0NPTVBPTkVOVCIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DSE9TRU5fQ09NUE9ORU5UX0lOVEVOVF9TRU5ERVIiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ09NUE9ORU5UX05BTUUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ09OVEVOVF9BTk5PVEFUSU9OUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9EQVRBX1JFTU9WRUQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9ET0NLX1NUQVRFIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfRE9DS19TVEFURV9DQVIiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9ET0NLX1NUQVRFX0RFU0siIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9ET0NLX1NUQVRFX0hFX0RFU0siIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfRE9DS19TVEFURV9MRV9ERVNLIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0RPQ0tfU1RBVEVfVU5ET0NLRUQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9ET05UX0tJTExfQVBQIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9FTUFJTCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfRVhDTFVERV9DT01QT05FTlRTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0ZST01fU1RPUkFHRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9IVE1MX1RFWFQiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfSU5ERVgiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfSU5JVElBTF9JTlRFTlRTIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfSU5TVEFMTEVSX1BBQ0tBR0VfTkFNRSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9JTlRFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0tFWV9FVkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTE9DQUxfT05MWSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9NSU1FX1RZUEVTIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX05PVF9VTktOT1dOX1NPVVJDRSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9PUklHSU5BVElOR19VUkkiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUEFDS0FHRV9OQU1FIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BIT05FX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJPQ0VTU19URVhUIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BST0NFU1NfVEVYVF9SRUFET05MWSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9RVUlDS19WSUVXX0ZFQVRVUkVTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1FVSUVUX01PREUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUkVGRVJSRVIiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUkVGRVJSRVJfTkFNRSIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9SRU1PVEVfSU5URU5UX1RPS0VOIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUkVQTEFDRU1FTlRfRVhUUkFTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JFUExBQ0lORyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JFU1RSSUNUSU9OU19CVU5ETEUiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUkVTVFJJQ1RJT05TX0lOVEVOVCIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9SRVNUUklDVElPTlNfTElTVCIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9SRVNVTFRfUkVDRUlWRVIiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUkVUVVJOX1JFU1VMVCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TSE9SVENVVF9JQ09OIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU0hPUlRDVVRfSUNPTl9SRVNPVVJDRSIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NIT1JUQ1VUX0lOVEVOVCIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NIT1JUQ1VUX05BTUUiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TSFVURE9XTl9VU0VSU1BBQ0VfT05MWSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TUExJVF9OQU1FIiBzaW5jZT0iMjciLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NUUkVBTSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU1VCSkVDVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU1VTUEVOREVEX1BBQ0tBR0VfRVhUUkFTIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1RFTVBMQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9URVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9USVRMRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfVUlEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9VU0VSIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTExfSU5fQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUxMX0lOX0NBVEVHT1JJRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTExfSU5fQ0xJUF9EQVRBIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTExfSU5fQ09NUE9ORU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUxMX0lOX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTExfSU5fUEFDS0FHRSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTExfSU5fU0VMRUNUT1IiIHNpbmNlPSIxNSIvPgotCQk8ZmllbGQgbmFtZT0iRklMTF9JTl9TT1VSQ0VfQk9VTkRTIiBzaW5jZT0iNyIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19BQ1RJVklUWV9CUk9VR0hUX1RPX0ZST05UIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FDVElWSVRZX0NMRUFSX1RBU0siIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19BQ1RJVklUWV9DTEVBUl9UT1AiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfQUNUSVZJVFlfQ0xFQVJfV0hFTl9UQVNLX1JFU0VUIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfQUNUSVZJVFlfQ0xPU0VfU1lTVEVNX0RJQUxPR1MiIHNpbmNlPSIxNiIgcmVtb3ZlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfQUNUSVZJVFlfRVhDTFVERV9GUk9NX1JFQ0VOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfQUNUSVZJVFlfRk9SV0FSRF9SRVNVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfQUNUSVZJVFlfTEFVTkNIRURfRlJPTV9ISVNUT1JZIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FDVElWSVRZX0xBVU5DSF9BREpBQ0VOVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FDVElWSVRZX01BVENIX0VYVEVSTkFMIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfQUNUSVZJVFlfTVVMVElQTEVfVEFTSyIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19BQ1RJVklUWV9ORVdfVEFTSyIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19BQ1RJVklUWV9OT19BTklNQVRJT04iIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FDVElWSVRZX05PX0hJU1RPUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfQUNUSVZJVFlfTk9fVVNFUl9BQ1RJT04iIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FDVElWSVRZX1BSRVZJT1VTX0lTX1RPUCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19BQ1RJVklUWV9SRU9SREVSX1RPX0ZST05UIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19BQ1RJVklUWV9SRVNFVF9UQVNLX0lGX05FRURFRCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19BQ1RJVklUWV9SRVRBSU5fSU5fUkVDRU5UUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FDVElWSVRZX1NJTkdMRV9UT1AiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfQUNUSVZJVFlfVEFTS19PTl9IT01FIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfREVCVUdfTE9HX1JFU09MVVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfRVhDTFVERV9TVE9QUEVEX1BBQ0tBR0VTIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfRlJPTV9CQUNLR1JPVU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0dSQU5UX1BFUlNJU1RBQkxFX1VSSV9QRVJNSVNTSU9OIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfR1JBTlRfUFJFRklYX1VSSV9QRVJNSVNTSU9OIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfR1JBTlRfUkVBRF9VUklfUEVSTUlTU0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19HUkFOVF9XUklURV9VUklfUEVSTUlTU0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19JTkNMVURFX1NUT1BQRURfUEFDS0FHRVMiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19SRUNFSVZFUl9GT1JFR1JPVU5EIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUkVDRUlWRVJfTk9fQUJPUlQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFkiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUkVDRUlWRVJfUkVQTEFDRV9QRU5ESU5HIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19SRUNFSVZFUl9WSVNJQkxFX1RPX0lOU1RBTlRfQVBQUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9ET0NLX0hPTUUiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVUklfQUxMT1dfVU5TQUZFIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IlVSSV9BTkRST0lEX0FQUF9TQ0hFTUUiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iVVJJX0lOVEVOVF9TQ0hFTUUiIHNpbmNlPSI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0ludGVudCRGaWx0ZXJDb21wYXJpc29uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlbnQoKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9JbnRlbnQkU2hvcnRjdXRJY29uUmVzb3VyY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tQ29udGV4dChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SSlMYW5kcm9pZC9jb250ZW50L0ludGVudCRTaG9ydGN1dEljb25SZXNvdXJjZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9InBhY2thZ2VOYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXNvdXJjZU5hbWUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvSW50ZW50RmlsdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50RmlsdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWN0aW9uc0l0ZXJhdG9yKClMamF2YS91dGlsL0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFjdGlvbihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZENhdGVnb3J5KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRGF0YUF1dGhvcml0eShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZERhdGFQYXRoKExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZERhdGFTY2hlbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGREYXRhU2NoZW1lU3BlY2lmaWNQYXJ0KExqYXZhL2xhbmcvU3RyaW5nO0kpViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRGF0YVR5cGUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdXRob3JpdGllc0l0ZXJhdG9yKClMamF2YS91dGlsL0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNhdGVnb3JpZXNJdGVyYXRvcigpTGphdmEvdXRpbC9JdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3VudEFjdGlvbnMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3VudENhdGVnb3JpZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3VudERhdGFBdXRob3JpdGllcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvdW50RGF0YVBhdGhzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY291bnREYXRhU2NoZW1lU3BlY2lmaWNQYXJ0cygpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY291bnREYXRhU2NoZW1lcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvdW50RGF0YVR5cGVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L0ludGVudEZpbHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExhbmRyb2lkL3V0aWwvUHJpbnRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGlvbihJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhdGVnb3J5KEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YUF1dGhvcml0eShJKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50RmlsdGVyJEF1dGhvcml0eUVudHJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFQYXRoKEkpTGFuZHJvaWQvb3MvUGF0dGVybk1hdGNoZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YVNjaGVtZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFTY2hlbWVTcGVjaWZpY1BhcnQoSSlMYW5kcm9pZC9vcy9QYXR0ZXJuTWF0Y2hlcjsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFUeXBlKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpb3JpdHkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNBY3Rpb24oTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNDYXRlZ29yeShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0RhdGFBdXRob3JpdHkoTGFuZHJvaWQvbmV0L1VyaTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0RhdGFQYXRoKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRGF0YVNjaGVtZShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0RhdGFTY2hlbWVTcGVjaWZpY1BhcnQoTGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0RhdGFUeXBlKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF0Y2goTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7WkxqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF0Y2goTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvbmV0L1VyaTtMamF2YS91dGlsL1NldDtMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1hdGNoQWN0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF0Y2hDYXRlZ29yaWVzKExqYXZhL3V0aWwvU2V0OylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaERhdGEoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvbmV0L1VyaTspSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1hdGNoRGF0YUF1dGhvcml0eShMYW5kcm9pZC9uZXQvVXJpOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0icGF0aHNJdGVyYXRvcigpTGphdmEvdXRpbC9JdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkRnJvbVhtbChMb3JnL3htbHB1bGwvdjEvWG1sUHVsbFBhcnNlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNjaGVtZVNwZWNpZmljUGFydHNJdGVyYXRvcigpTGphdmEvdXRpbC9JdGVyYXRvcjsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNjaGVtZXNJdGVyYXRvcigpTGphdmEvdXRpbC9JdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmlvcml0eShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0eXBlc0l0ZXJhdG9yKClMamF2YS91dGlsL0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVG9YbWwoTG9yZy94bWxwdWxsL3YxL1htbFNlcmlhbGl6ZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVENIX0FESlVTVE1FTlRfTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iTUFUQ0hfQURKVVNUTUVOVF9OT1JNQUwiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVENIX0NBVEVHT1JZX0VNUFRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRDSF9DQVRFR09SWV9IT1NUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRDSF9DQVRFR09SWV9NQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRDSF9DQVRFR09SWV9QQVRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRDSF9DQVRFR09SWV9QT1JUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRDSF9DQVRFR09SWV9TQ0hFTUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVENIX0NBVEVHT1JZX1NDSEVNRV9TUEVDSUZJQ19QQVJUIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVENIX0NBVEVHT1JZX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX01BVENIX0FDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iTk9fTUFUQ0hfQ0FURUdPUlkiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX01BVENIX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX01BVENIX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNZU1RFTV9ISUdIX1BSSU9SSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWVNURU1fTE9XX1BSSU9SSVRZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0ludGVudEZpbHRlciRBdXRob3JpdHlFbnRyeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SG9zdCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1hdGNoKExhbmRyb2lkL25ldC9Vcmk7KUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvSW50ZW50RmlsdGVyJE1hbGZvcm1lZE1pbWVUeXBlRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdXRpbC9BbmRyb2lkRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlciIgc2luY2U9IjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvSUJpbmRlcjspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3JlYXRvclBhY2thZ2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3JlYXRvclVpZCgpSSIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3JlYXRvclVzZXJIYW5kbGUoKUxhbmRyb2lkL29zL1VzZXJIYW5kbGU7IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYXJnZXRQYWNrYWdlKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI5IiBkZXByZWNhdGVkPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRJbnRlbnRTZW5kZXJPck51bGxGcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspTGFuZHJvaWQvY29udGVudC9JbnRlbnRTZW5kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZEludGVudChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50U2VuZGVyJE9uRmluaXNoZWQ7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRJbnRlbnQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlciRPbkZpbmlzaGVkO0xhbmRyb2lkL29zL0hhbmRsZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlSW50ZW50U2VuZGVyT3JOdWxsVG9QYXJjZWwoTGFuZHJvaWQvY29udGVudC9JbnRlbnRTZW5kZXI7TGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlciRPbkZpbmlzaGVkIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlbmRGaW5pc2hlZChMYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlcjtMYW5kcm9pZC9jb250ZW50L0ludGVudDtJTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlciRTZW5kSW50ZW50RXhjZXB0aW9uIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdXRpbC9BbmRyb2lkRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvRXhjZXB0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0xvYWRlciIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWJhbmRvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbExvYWQoKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbW1pdENvbnRlbnRDaGFuZ2VkKClWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRhVG9TdHJpbmcoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGl2ZXJDYW5jZWxsYXRpb24oKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGl2ZXJSZXN1bHQoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0xqYXZhL2lvL1ByaW50V3JpdGVyO1tMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcmNlTG9hZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRleHQoKUxhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWJhbmRvbmVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZXNldCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3RhcnRlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWJhbmRvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FuY2VsTG9hZCgpWiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db250ZW50Q2hhbmdlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRm9yY2VMb2FkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhcnRMb2FkaW5nKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdG9wTG9hZGluZygpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyTGlzdGVuZXIoSUxhbmRyb2lkL2NvbnRlbnQvTG9hZGVyJE9uTG9hZENvbXBsZXRlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3Rlck9uTG9hZENhbmNlbGVkTGlzdGVuZXIoTGFuZHJvaWQvY29udGVudC9Mb2FkZXIkT25Mb2FkQ2FuY2VsZWRMaXN0ZW5lcjspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb2xsYmFja0NvbnRlbnRDaGFuZ2VkKClWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydExvYWRpbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wTG9hZGluZygpViIvPgotCQk8bWV0aG9kIG5hbWU9InRha2VDb250ZW50Q2hhbmdlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJMaXN0ZW5lcihMYW5kcm9pZC9jb250ZW50L0xvYWRlciRPbkxvYWRDb21wbGV0ZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3Rlck9uTG9hZENhbmNlbGVkTGlzdGVuZXIoTGFuZHJvaWQvY29udGVudC9Mb2FkZXIkT25Mb2FkQ2FuY2VsZWRMaXN0ZW5lcjspViIgc2luY2U9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L0xvYWRlciRGb3JjZUxvYWRDb250ZW50T2JzZXJ2ZXIiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL0NvbnRlbnRPYnNlcnZlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0xvYWRlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9Mb2FkZXIkT25Mb2FkQ2FuY2VsZWRMaXN0ZW5lciIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxvYWRDYW5jZWxlZChMYW5kcm9pZC9jb250ZW50L0xvYWRlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9Mb2FkZXIkT25Mb2FkQ29tcGxldGVMaXN0ZW5lciIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxvYWRDb21wbGV0ZShMYW5kcm9pZC9jb250ZW50L0xvYWRlcjtMamF2YS9sYW5nL09iamVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9NdXRhYmxlQ29udGV4dFdyYXBwZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NvbnRleHRXcmFwcGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJhc2VDb250ZXh0KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9PcGVyYXRpb25BcHBsaWNhdGlvbkV4Y2VwdGlvbiIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1TdWNjZXNzZnVsWWllbGRQb2ludHMoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvUGVyaW9kaWNTeW5jIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO0opViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iYWNjb3VudCIvPgotCQk8ZmllbGQgbmFtZT0iYXV0aG9yaXR5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJleHRyYXMiLz4KLQkJPGZpZWxkIG5hbWU9InBlcmlvZCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9RdWlja1ZpZXdDb25zdGFudHMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfREVMRVRFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfRE9XTkxPQUQiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfRURJVCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9QUklOVCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9TRU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1ZJRVciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvUmVjZWl2ZXJDYWxsTm90QWxsb3dlZEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3V0aWwvQW5kcm9pZFJ1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvUmVzdHJpY3Rpb25FbnRyeSIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVCdW5kbGVBcnJheUVudHJ5KExqYXZhL2xhbmcvU3RyaW5nO1tMYW5kcm9pZC9jb250ZW50L1Jlc3RyaWN0aW9uRW50cnk7KUxhbmRyb2lkL2NvbnRlbnQvUmVzdHJpY3Rpb25FbnRyeTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUJ1bmRsZUVudHJ5KExqYXZhL2xhbmcvU3RyaW5nO1tMYW5kcm9pZC9jb250ZW50L1Jlc3RyaWN0aW9uRW50cnk7KUxhbmRyb2lkL2NvbnRlbnQvUmVzdHJpY3Rpb25FbnRyeTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbFNlbGVjdGVkU3RyaW5ncygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENob2ljZUVudHJpZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaG9pY2VWYWx1ZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNjcmlwdGlvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50VmFsdWUoKUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzdHJpY3Rpb25zKClbTGFuZHJvaWQvY29udGVudC9SZXN0cmljdGlvbkVudHJ5OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VsZWN0ZWRTdGF0ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGVkU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaXRsZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFsbFNlbGVjdGVkU3RyaW5ncyhbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaG9pY2VFbnRyaWVzKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaG9pY2VFbnRyaWVzKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENob2ljZVZhbHVlcyhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hvaWNlVmFsdWVzKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlc2NyaXB0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50VmFsdWUoSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXN0cmljdGlvbnMoW0xhbmRyb2lkL2NvbnRlbnQvUmVzdHJpY3Rpb25FbnRyeTspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VsZWN0ZWRTdGF0ZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWxlY3RlZFN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpdGxlKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHlwZShJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQk9PTEVBTiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9CVU5ETEUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9CVU5ETEVfQVJSQVkiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DSE9JQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSU5URUdFUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX01VTFRJX1NFTEVDVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9OVUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NUUklORyIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L1Jlc3RyaWN0aW9uc01hbmFnZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb252ZXJ0UmVzdHJpY3Rpb25zVG9CdW5kbGUoTGphdmEvdXRpbC9MaXN0OylMYW5kcm9pZC9vcy9CdW5kbGU7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVMb2NhbEFwcHJvdmFsSW50ZW50KClMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9ucygpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hbmlmZXN0UmVzdHJpY3Rpb25zKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzUmVzdHJpY3Rpb25zUHJvdmlkZXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlQZXJtaXNzaW9uUmVzcG9uc2UoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0UGVybWlzc2lvbihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTspViIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BFUk1JU1NJT05fUkVTUE9OU0VfUkVDRUlWRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9SRVFVRVNUX0xPQ0FMX0FQUFJPVkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUkVRVUVTVF9QRVJNSVNTSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QQUNLQUdFX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JFUVVFU1RfQlVORExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9SRVFVRVNUX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9SRVFVRVNUX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JFU1BPTlNFX0JVTkRMRSIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9EQVRBX0FQUF9SRVNUUklDVElPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfS0VZX0FQUFJPVkVfTEFCRUwiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfS0VZX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfS0VZX0RFTllfTEFCRUwiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfS0VZX0lDT04iLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfS0VZX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVFVRVNUX0tFWV9NRVNTQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVFVRVNUX0tFWV9ORVdfUkVRVUVTVCIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9LRVlfVElUTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfVFlQRV9BUFBST1ZBTCIvPgotCQk8ZmllbGQgbmFtZT0iUkVTUE9OU0VfS0VZX0VSUk9SX0NPREUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1BPTlNFX0tFWV9NRVNTQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNQT05TRV9LRVlfUkVTUE9OU0VfVElNRVNUQU1QIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNQT05TRV9LRVlfUkVTVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfQVBQUk9WRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9ERU5JRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVUxUX0VSUk9SX0JBRF9SRVFVRVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfRVJST1JfSU5URVJOQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9FUlJPUl9ORVRXT1JLIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfTk9fUkVTUE9OU0UiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9VTktOT1dOX1JFUVVFU1QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvU2VhcmNoUmVjZW50U3VnZ2VzdGlvbnNQcm92aWRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0dXBTdWdnZXN0aW9ucyhMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFCQVNFX01PREVfMkxJTkVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBQkFTRV9NT0RFX1FVRVJJRVMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvU2VydmljZUNvbm5lY3Rpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQmluZGluZ0RpZWQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk51bGxCaW5kaW5nKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXJ2aWNlQ29ubmVjdGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9vcy9JQmluZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXJ2aWNlRGlzY29ubmVjdGVkKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9TaGFyZWRQcmVmZXJlbmNlcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnMoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZGl0KClMYW5kcm9pZC9jb250ZW50L1NoYXJlZFByZWZlcmVuY2VzJEVkaXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGwoKUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvb2xlYW4oTGphdmEvbGFuZy9TdHJpbmc7WilaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxvYXQoTGphdmEvbGFuZy9TdHJpbmc7RilGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50KExqYXZhL2xhbmcvU3RyaW5nO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmcoTGphdmEvbGFuZy9TdHJpbmc7SilKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmdTZXQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9TZXQ7KUxqYXZhL3V0aWwvU2V0OyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJPblNoYXJlZFByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcihMYW5kcm9pZC9jb250ZW50L1NoYXJlZFByZWZlcmVuY2VzJE9uU2hhcmVkUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3Rlck9uU2hhcmVkUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyKExhbmRyb2lkL2NvbnRlbnQvU2hhcmVkUHJlZmVyZW5jZXMkT25TaGFyZWRQcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvU2hhcmVkUHJlZmVyZW5jZXMkRWRpdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseSgpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcigpTGFuZHJvaWQvY29udGVudC9TaGFyZWRQcmVmZXJlbmNlcyRFZGl0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tbWl0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0Qm9vbGVhbihMamF2YS9sYW5nL1N0cmluZztaKUxhbmRyb2lkL2NvbnRlbnQvU2hhcmVkUHJlZmVyZW5jZXMkRWRpdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEZsb2F0KExqYXZhL2xhbmcvU3RyaW5nO0YpTGFuZHJvaWQvY29udGVudC9TaGFyZWRQcmVmZXJlbmNlcyRFZGl0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0SW50KExqYXZhL2xhbmcvU3RyaW5nO0kpTGFuZHJvaWQvY29udGVudC9TaGFyZWRQcmVmZXJlbmNlcyRFZGl0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0TG9uZyhMamF2YS9sYW5nL1N0cmluZztKKUxhbmRyb2lkL2NvbnRlbnQvU2hhcmVkUHJlZmVyZW5jZXMkRWRpdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFN0cmluZyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9TaGFyZWRQcmVmZXJlbmNlcyRFZGl0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0U3RyaW5nU2V0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvU2V0OylMYW5kcm9pZC9jb250ZW50L1NoYXJlZFByZWZlcmVuY2VzJEVkaXRvcjsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9TaGFyZWRQcmVmZXJlbmNlcyRFZGl0b3I7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L1NoYXJlZFByZWZlcmVuY2VzJE9uU2hhcmVkUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNoYXJlZFByZWZlcmVuY2VDaGFuZ2VkKExhbmRyb2lkL2NvbnRlbnQvU2hhcmVkUHJlZmVyZW5jZXM7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvU3luY0FkYXB0ZXJUeXBlIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztaWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsb3dQYXJhbGxlbFN5bmNzKClaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXR0aW5nc0FjdGl2aXR5KClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWx3YXlzU3luY2FibGUoKVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVXNlclZpc2libGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdLZXkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvU3luY0FkYXB0ZXJUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzVXBsb2FkaW5nKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY2NvdW50VHlwZSIvPgotCQk8ZmllbGQgbmFtZT0iYXV0aG9yaXR5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpc0tleSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9TeW5jQ29udGV4dCIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3luY0NvbnRleHRCaW5kZXIoKUxhbmRyb2lkL29zL0lCaW5kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25GaW5pc2hlZChMYW5kcm9pZC9jb250ZW50L1N5bmNSZXN1bHQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvU3luY0luZm8iIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9TeW5jSW5mbzspViIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhY2NvdW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhdXRob3JpdHkiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXJ0VGltZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9TeW5jUmVxdWVzdCIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L1N5bmNSZXF1ZXN0JEJ1aWxkZXIiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvY29udGVudC9TeW5jUmVxdWVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaXNhbGxvd01ldGVyZWQoWilMYW5kcm9pZC9jb250ZW50L1N5bmNSZXF1ZXN0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXhwZWRpdGVkKFopTGFuZHJvaWQvY29udGVudC9TeW5jUmVxdWVzdCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dHJhcyhMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL2NvbnRlbnQvU3luY1JlcXVlc3QkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJZ25vcmVCYWNrb2ZmKFopTGFuZHJvaWQvY29udGVudC9TeW5jUmVxdWVzdCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldElnbm9yZVNldHRpbmdzKFopTGFuZHJvaWQvY29udGVudC9TeW5jUmVxdWVzdCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1hbnVhbChaKUxhbmRyb2lkL2NvbnRlbnQvU3luY1JlcXVlc3QkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROb1JldHJ5KFopTGFuZHJvaWQvY29udGVudC9TeW5jUmVxdWVzdCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlcXVpcmVzQ2hhcmdpbmcoWilMYW5kcm9pZC9jb250ZW50L1N5bmNSZXF1ZXN0JEJ1aWxkZXI7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTeW5jQWRhcHRlcihMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L1N5bmNSZXF1ZXN0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3luY09uY2UoKUxhbmRyb2lkL2NvbnRlbnQvU3luY1JlcXVlc3QkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzeW5jUGVyaW9kaWMoSkopTGFuZHJvaWQvY29udGVudC9TeW5jUmVxdWVzdCRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9TeW5jUmVzdWx0IiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNFcnJvcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0hhcmRFcnJvcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1NvZnRFcnJvcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im1hZGVTb21lUHJvZ3Jlc3MoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0RlYnVnU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkFMUkVBRFlfSU5fUFJPR1JFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9ImRhdGFiYXNlRXJyb3IiLz4KLQkJPGZpZWxkIG5hbWU9ImRlbGF5VW50aWwiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmdWxsU3luY1JlcXVlc3RlZCIvPgotCQk8ZmllbGQgbmFtZT0ibW9yZVJlY29yZHNUb0dldCIvPgotCQk8ZmllbGQgbmFtZT0icGFydGlhbFN5bmNVbmF2YWlsYWJsZSIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdHMiLz4KLQkJPGZpZWxkIG5hbWU9InN5bmNBbHJlYWR5SW5Qcm9ncmVzcyIvPgotCQk8ZmllbGQgbmFtZT0idG9vTWFueURlbGV0aW9ucyIvPgotCQk8ZmllbGQgbmFtZT0idG9vTWFueVJldHJpZXMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvU3luY1N0YXRzIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJudW1BdXRoRXhjZXB0aW9ucyIvPgotCQk8ZmllbGQgbmFtZT0ibnVtQ29uZmxpY3REZXRlY3RlZEV4Y2VwdGlvbnMiLz4KLQkJPGZpZWxkIG5hbWU9Im51bURlbGV0ZXMiLz4KLQkJPGZpZWxkIG5hbWU9Im51bUVudHJpZXMiLz4KLQkJPGZpZWxkIG5hbWU9Im51bUluc2VydHMiLz4KLQkJPGZpZWxkIG5hbWU9Im51bUlvRXhjZXB0aW9ucyIvPgotCQk8ZmllbGQgbmFtZT0ibnVtUGFyc2VFeGNlcHRpb25zIi8+Ci0JCTxmaWVsZCBuYW1lPSJudW1Ta2lwcGVkRW50cmllcyIvPgotCQk8ZmllbGQgbmFtZT0ibnVtVXBkYXRlcyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9TeW5jU3RhdHVzT2JzZXJ2ZXIiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhdHVzQ2hhbmdlZChJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvVXJpTWF0Y2hlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFVSSShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaChMYW5kcm9pZC9uZXQvVXJpOylJIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19NQVRDSCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9VcmlQZXJtaXNzaW9uIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJzaXN0ZWRUaW1lKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXJpKClMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVhZFBlcm1pc3Npb24oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1dyaXRlUGVybWlzc2lvbigpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iSU5WQUxJRF9USU1FIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL0FjdGl2aXR5SW5mbyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vQ29tcG9uZW50SW5mbyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9wbS9BY3Rpdml0eUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExhbmRyb2lkL3V0aWwvUHJpbnRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRoZW1lUmVzb3VyY2UoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX01PREVfREVGQVVMVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9NT0RFX0hEUiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9NT0RFX1dJREVfQ09MT1JfR0FNVVQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHX0NPTE9SX01PREUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHX0RFTlNJVFkiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHX0ZPTlRfU0NBTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkZJR19LRVlCT0FSRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHX0tFWUJPQVJEX0hJRERFTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHX0xBWU9VVF9ESVJFQ1RJT04iIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHX0xPQ0FMRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHX01DQyIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHX01OQyIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHX05BVklHQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkZJR19PUklFTlRBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHX1NDUkVFTl9MQVlPVVQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05GSUdfU0NSRUVOX1NJWkUiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHX1NNQUxMRVNUX1NDUkVFTl9TSVpFIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkZJR19UT1VDSFNDUkVFTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHX1VJX01PREUiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJET0NVTUVOVF9MQVVOQ0hfQUxXQVlTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkRPQ1VNRU5UX0xBVU5DSF9JTlRPX0VYSVNUSU5HIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkRPQ1VNRU5UX0xBVU5DSF9ORVZFUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJET0NVTUVOVF9MQVVOQ0hfTk9ORSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FMTE9XX1RBU0tfUkVQQVJFTlRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfQUxXQVlTX1JFVEFJTl9UQVNLX1NUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FVVE9fUkVNT1ZFX0ZST01fUkVDRU5UUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0NMRUFSX1RBU0tfT05fTEFVTkNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0VOQUJMRV9WUl9NT0RFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfRVhDTFVERV9GUk9NX1JFQ0VOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfRklOSVNIX09OX0NMT1NFX1NZU1RFTV9ESUFMT0dTIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19GSU5JU0hfT05fVEFTS19MQVVOQ0giLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfSEFSRFdBUkVfQUNDRUxFUkFURUQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19JTU1FUlNJVkUiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19NVUxUSVBST0NFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfTk9fSElTVE9SWSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUkVMSU5RVUlTSF9UQVNLX0lERU5USVRZIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUkVTVU1FX1dISUxFX1BBVVNJTkciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TSU5HTEVfVVNFUiIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NUQVRFX05PVF9ORUVERUQiLz4KLQkJPGZpZWxkIG5hbWU9IkxBVU5DSF9NVUxUSVBMRSIvPgotCQk8ZmllbGQgbmFtZT0iTEFVTkNIX1NJTkdMRV9JTlNUQU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iTEFVTkNIX1NJTkdMRV9UQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVVOQ0hfU0lOR0xFX1RPUCIvPgotCQk8ZmllbGQgbmFtZT0iUEVSU0lTVF9BQ1JPU1NfUkVCT09UUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJQRVJTSVNUX05FVkVSIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUlNJU1RfUk9PVF9PTkxZIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTl9PUklFTlRBVElPTl9CRUhJTkQiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTl9PUklFTlRBVElPTl9GVUxMX1NFTlNPUiIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTl9PUklFTlRBVElPTl9GVUxMX1VTRVIiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOX09SSUVOVEFUSU9OX0xBTkRTQ0FQRSIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOX09SSUVOVEFUSU9OX0xPQ0tFRCIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5fT1JJRU5UQVRJT05fTk9TRU5TT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTl9PUklFTlRBVElPTl9QT1JUUkFJVCIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOX09SSUVOVEFUSU9OX1JFVkVSU0VfTEFORFNDQVBFIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOX09SSUVOVEFUSU9OX1JFVkVSU0VfUE9SVFJBSVQiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5fT1JJRU5UQVRJT05fU0VOU09SIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5fT1JJRU5UQVRJT05fU0VOU09SX0xBTkRTQ0FQRSIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTl9PUklFTlRBVElPTl9TRU5TT1JfUE9SVFJBSVQiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5fT1JJRU5UQVRJT05fVU5TUEVDSUZJRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTl9PUklFTlRBVElPTl9VU0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5fT1JJRU5UQVRJT05fVVNFUl9MQU5EU0NBUEUiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOX09SSUVOVEFUSU9OX1VTRVJfUE9SVFJBSVQiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iVUlPUFRJT05fU1BMSVRfQUNUSU9OX0JBUl9XSEVOX05BUlJPVyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvck1vZGUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iY29uZmlnQ2hhbmdlcyIvPgotCQk8ZmllbGQgbmFtZT0iZG9jdW1lbnRMYXVuY2hNb2RlIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImZsYWdzIi8+Ci0JCTxmaWVsZCBuYW1lPSJsYXVuY2hNb2RlIi8+Ci0JCTxmaWVsZCBuYW1lPSJtYXhSZWNlbnRzIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InBhcmVudEFjdGl2aXR5TmFtZSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwZXJtaXNzaW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJwZXJzaXN0YWJsZU1vZGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ic2NyZWVuT3JpZW50YXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9InNvZnRJbnB1dE1vZGUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0YXJnZXRBY3Rpdml0eSIvPgotCQk8ZmllbGQgbmFtZT0idGFza0FmZmluaXR5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0aGVtZSIvPgotCQk8ZmllbGQgbmFtZT0idWlPcHRpb25zIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IndpbmRvd0xheW91dCIgc2luY2U9IjI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL0FjdGl2aXR5SW5mbyRXaW5kb3dMYXlvdXQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUZJRklJSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJncmF2aXR5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJoZWlnaHQiLz4KLQkJPGZpZWxkIG5hbWU9ImhlaWdodEZyYWN0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJtaW5IZWlnaHQiLz4KLQkJPGZpZWxkIG5hbWU9Im1pbldpZHRoIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aWR0aCIvPgotCQk8ZmllbGQgbmFtZT0id2lkdGhGcmFjdGlvbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9BcHBsaWNhdGlvbkluZm8iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJdGVtSW5mbyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9wbS9BcHBsaWNhdGlvbkluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExhbmRyb2lkL3V0aWwvUHJpbnRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhdGVnb3J5VGl0bGUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0kpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZpcnR1YWxQcmVsb2FkKClaIiBzaW5jZT0iMjciLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkRGVzY3JpcHRpb24oTGFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlTWFuYWdlcjspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9BVURJTyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9HQU1FIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0lNQUdFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX01BUFMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfTkVXUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9QUk9EVUNUSVZJVFkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfU09DSUFMIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX1VOREVGSU5FRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9WSURFTyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FMTE9XX0JBQ0tVUCIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfQUxMT1dfQ0xFQVJfVVNFUl9EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FMTE9XX1RBU0tfUkVQQVJFTlRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfREVCVUdHQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19FWFRFUk5BTF9TVE9SQUdFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19FWFRSQUNUX05BVElWRV9MSUJTIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfRkFDVE9SWV9URVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0ZVTExfQkFDS1VQX09OTFkiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19IQVJEV0FSRV9BQ0NFTEVSQVRFRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0hBU19DT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0lOU1RBTExFRCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0lTX0RBVEFfT05MWSIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0lTX0dBTUUiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfS0lMTF9BRlRFUl9SRVNUT1JFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19MQVJHRV9IRUFQIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfTVVMVElBUkNIIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUEVSU0lTVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19SRVNJWkVBQkxFX0ZPUl9TQ1JFRU5TIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19SRVNUT1JFX0FOWV9WRVJTSU9OIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TVE9QUEVEIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfU1VQUE9SVFNfTEFSR0VfU0NSRUVOUyIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfU1VQUE9SVFNfTk9STUFMX1NDUkVFTlMiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NVUFBPUlRTX1JUTCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NVUFBPUlRTX1NDUkVFTl9ERU5TSVRJRVMiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NVUFBPUlRTX1NNQUxMX1NDUkVFTlMiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NVUFBPUlRTX1hMQVJHRV9TQ1JFRU5TIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfU1VTUEVOREVEIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfU1lTVEVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1RFU1RfT05MWSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfVVBEQVRFRF9TWVNURU1fQVBQIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19VU0VTX0NMRUFSVEVYVF9UUkFGRklDIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfVk1fU0FGRV9NT0RFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iYXBwQ29tcG9uZW50RmFjdG9yeSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJiYWNrdXBBZ2VudE5hbWUiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjYXRlZ29yeSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjbGFzc05hbWUiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbXBhdGlibGVXaWR0aExpbWl0RHAiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iZGF0YURpciIvPgotCQk8ZmllbGQgbmFtZT0iZGVzY3JpcHRpb25SZXMiLz4KLQkJPGZpZWxkIG5hbWU9ImRldmljZVByb3RlY3RlZERhdGFEaXIiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iZW5hYmxlZCIvPgotCQk8ZmllbGQgbmFtZT0iZmxhZ3MiLz4KLQkJPGZpZWxkIG5hbWU9Imxhcmdlc3RXaWR0aExpbWl0RHAiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0ibWFuYWdlU3BhY2VBY3Rpdml0eU5hbWUiLz4KLQkJPGZpZWxkIG5hbWU9Im1pblNka1ZlcnNpb24iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0ibmF0aXZlTGlicmFyeURpciIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9InBlcm1pc3Npb24iLz4KLQkJPGZpZWxkIG5hbWU9InByb2Nlc3NOYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJwdWJsaWNTb3VyY2VEaXIiLz4KLQkJPGZpZWxkIG5hbWU9InJlcXVpcmVzU21hbGxlc3RXaWR0aERwIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9InNoYXJlZExpYnJhcnlGaWxlcyIvPgotCQk8ZmllbGQgbmFtZT0ic291cmNlRGlyIi8+Ci0JCTxmaWVsZCBuYW1lPSJzcGxpdE5hbWVzIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9InNwbGl0UHVibGljU291cmNlRGlycyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJzcGxpdFNvdXJjZURpcnMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ic3RvcmFnZVV1aWQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0idGFyZ2V0U2RrVmVyc2lvbiIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9InRhc2tBZmZpbml0eSIvPgotCQk8ZmllbGQgbmFtZT0idGhlbWUiLz4KLQkJPGZpZWxkIG5hbWU9InVpT3B0aW9ucyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ1aWQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vQXBwbGljYXRpb25JbmZvJERpc3BsYXlOYW1lQ29tcGFyYXRvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9Db21wYXJhdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlKExhbmRyb2lkL2NvbnRlbnQvcG0vQXBwbGljYXRpb25JbmZvO0xhbmRyb2lkL2NvbnRlbnQvcG0vQXBwbGljYXRpb25JbmZvOylJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL0NoYW5nZWRQYWNrYWdlcyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VOYW1lcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcXVlbmNlTnVtYmVyKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL0NvbXBvbmVudEluZm8iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJdGVtSW5mbyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3BtL0NvbXBvbmVudEluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFubmVyUmVzb3VyY2UoKUkiIHNpbmNlPSIyMCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEljb25SZXNvdXJjZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvZ29SZXNvdXJjZSgpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbmFibGVkKClaIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImFwcGxpY2F0aW9uSW5mbyIvPgotCQk8ZmllbGQgbmFtZT0iZGVzY3JpcHRpb25SZXMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkaXJlY3RCb290QXdhcmUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iZW5hYmxlZCIvPgotCQk8ZmllbGQgbmFtZT0iZXhwb3J0ZWQiLz4KLQkJPGZpZWxkIG5hbWU9InByb2Nlc3NOYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJzcGxpdE5hbWUiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9Db25maWd1cmF0aW9uSW5mbyIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3BtL0NvbmZpZ3VyYXRpb25JbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2xFc1ZlcnNpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0VTX1ZFUlNJT05fVU5ERUZJTkVEIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iSU5QVVRfRkVBVFVSRV9GSVZFX1dBWV9OQVYiLz4KLQkJPGZpZWxkIG5hbWU9IklOUFVUX0ZFQVRVUkVfSEFSRF9LRVlCT0FSRCIvPgotCQk8ZmllbGQgbmFtZT0icmVxR2xFc1ZlcnNpb24iIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJyZXFJbnB1dEZlYXR1cmVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXFLZXlib2FyZFR5cGUiLz4KLQkJPGZpZWxkIG5hbWU9InJlcU5hdmlnYXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9InJlcVRvdWNoU2NyZWVuIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL0Nyb3NzUHJvZmlsZUFwcHMiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9maWxlU3dpdGNoaW5nSWNvbkRyYXdhYmxlKExhbmRyb2lkL29zL1VzZXJIYW5kbGU7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb2ZpbGVTd2l0Y2hpbmdMYWJlbChMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYXJnZXRVc2VyUHJvZmlsZXMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydE1haW5BY3Rpdml0eShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGFuZHJvaWQvb3MvVXNlckhhbmRsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9GZWF0dXJlR3JvdXBJbmZvIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3BtL0ZlYXR1cmVHcm91cEluZm87KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9ImZlYXR1cmVzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL0ZlYXR1cmVJbmZvIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvcG0vRmVhdHVyZUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHbEVzVmVyc2lvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1JFUVVJUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9FU19WRVJTSU9OX1VOREVGSU5FRCIvPgotCQk8ZmllbGQgbmFtZT0iZmxhZ3MiLz4KLQkJPGZpZWxkIG5hbWU9Im5hbWUiLz4KLQkJPGZpZWxkIG5hbWU9InJlcUdsRXNWZXJzaW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2ZXJzaW9uIiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIiIHNpbmNlPSIxIiByZW1vdmVkPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL0lJbnRlcmZhY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYWNrYWdlSW5zdGFsbGVkKExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9JUGFja2FnZUluc3RhbGxPYnNlcnZlciRTdHViIiBzaW5jZT0iMSIgcmVtb3ZlZD0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3MvQmluZGVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9JUGFja2FnZUluc3RhbGxPYnNlcnZlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzSW50ZXJmYWNlKExhbmRyb2lkL29zL0lCaW5kZXI7KUxhbmRyb2lkL2NvbnRlbnQvcG0vSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL0luc3RydW1lbnRhdGlvbkluZm8iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJdGVtSW5mbyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9wbS9JbnN0cnVtZW50YXRpb25JbmZvOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJkYXRhRGlyIi8+Ci0JCTxmaWVsZCBuYW1lPSJmdW5jdGlvbmFsVGVzdCIvPgotCQk8ZmllbGQgbmFtZT0iaGFuZGxlUHJvZmlsaW5nIi8+Ci0JCTxmaWVsZCBuYW1lPSJwdWJsaWNTb3VyY2VEaXIiLz4KLQkJPGZpZWxkIG5hbWU9InNvdXJjZURpciIvPgotCQk8ZmllbGQgbmFtZT0ic3BsaXROYW1lcyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzcGxpdFB1YmxpY1NvdXJjZURpcnMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0ic3BsaXRTb3VyY2VEaXJzIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9InRhcmdldFBhY2thZ2UiLz4KLQkJPGZpZWxkIG5hbWU9InRhcmdldFByb2Nlc3NlcyIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL0xhYmVsZWRJbnRlbnQiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0ludGVudCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0ludGVudDtMamF2YS9sYW5nL1N0cmluZztJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEljb25SZXNvdXJjZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhYmVsUmVzb3VyY2UoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb25Mb2NhbGl6ZWRMYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U291cmNlUGFja2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZEljb24oTGFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlTWFuYWdlcjspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZExhYmVsKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9MYXVuY2hlckFjdGl2aXR5SW5mbyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvbkluZm8oKUxhbmRyb2lkL2NvbnRlbnQvcG0vQXBwbGljYXRpb25JbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhZGdlZEljb24oSSlMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wb25lbnROYW1lKClMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rmlyc3RJbnN0YWxsVGltZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEljb24oSSlMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlcigpTGFuZHJvaWQvb3MvVXNlckhhbmRsZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vTGF1bmNoZXJBcHBzIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2aXR5TGlzdChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwbGljYXRpb25JbmZvKExqYXZhL2xhbmcvU3RyaW5nO0lMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylMYW5kcm9pZC9jb250ZW50L3BtL0FwcGxpY2F0aW9uSW5mbzsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBpbkl0ZW1SZXF1ZXN0KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMYW5kcm9pZC9jb250ZW50L3BtL0xhdW5jaGVyQXBwcyRQaW5JdGVtUmVxdWVzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb2ZpbGVzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG9ydGN1dEJhZGdlZEljb25EcmF3YWJsZShMYW5kcm9pZC9jb250ZW50L3BtL1Nob3J0Y3V0SW5mbztJKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvcnRjdXRDb25maWdBY3Rpdml0eUludGVudChMYW5kcm9pZC9jb250ZW50L3BtL0xhdW5jaGVyQWN0aXZpdHlJbmZvOylMYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3J0Y3V0Q29uZmlnQWN0aXZpdHlMaXN0KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7KUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3J0Y3V0SWNvbkRyYXdhYmxlKExhbmRyb2lkL2NvbnRlbnQvcG0vU2hvcnRjdXRJbmZvO0kpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG9ydGN1dHMoTGFuZHJvaWQvY29udGVudC9wbS9MYXVuY2hlckFwcHMkU2hvcnRjdXRRdWVyeTtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXNwZW5kZWRQYWNrYWdlTGF1bmNoZXJFeHRyYXMoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvVXNlckhhbmRsZTspTGFuZHJvaWQvb3MvQnVuZGxlOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzU2hvcnRjdXRIb3N0UGVybWlzc2lvbigpWiIgc2luY2U9IjI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBY3Rpdml0eUVuYWJsZWQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1BhY2thZ2VFbmFibGVkKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwaW5TaG9ydGN1dHMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9MaXN0O0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7KVYiIHNpbmNlPSIyNSIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQ2FsbGJhY2soTGFuZHJvaWQvY29udGVudC9wbS9MYXVuY2hlckFwcHMkQ2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlckNhbGxiYWNrKExhbmRyb2lkL2NvbnRlbnQvcG0vTGF1bmNoZXJBcHBzJENhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlQWN0aXZpdHkoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7TGFuZHJvaWQvb3MvVXNlckhhbmRsZTspTGFuZHJvaWQvY29udGVudC9wbS9MYXVuY2hlckFjdGl2aXR5SW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEFwcERldGFpbHNBY3Rpdml0eShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGFuZHJvaWQvb3MvVXNlckhhbmRsZTtMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0TWFpbkFjdGl2aXR5KExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlO0xhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRTaG9ydGN1dChMYW5kcm9pZC9jb250ZW50L3BtL1Nob3J0Y3V0SW5mbztMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0xhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRTaG9ydGN1dChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0xhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyQ2FsbGJhY2soTGFuZHJvaWQvY29udGVudC9wbS9MYXVuY2hlckFwcHMkQ2FsbGJhY2s7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DT05GSVJNX1BJTl9BUFBXSURHRVQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NPTkZJUk1fUElOX1NIT1JUQ1VUIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BJTl9JVEVNX1JFUVVFU1QiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9MYXVuY2hlckFwcHMkQ2FsbGJhY2siIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBhY2thZ2VBZGRlZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYWNrYWdlQ2hhbmdlZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYWNrYWdlUmVtb3ZlZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYWNrYWdlc0F2YWlsYWJsZShbTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvVXNlckhhbmRsZTtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBhY2thZ2VzU3VzcGVuZGVkKFtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBhY2thZ2VzU3VzcGVuZGVkKFtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlO0xhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYWNrYWdlc1VuYXZhaWxhYmxlKFtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlO1opViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGFja2FnZXNVbnN1c3BlbmRlZChbTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvVXNlckhhbmRsZTspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TaG9ydGN1dHNDaGFuZ2VkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTGlzdDtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIiBzaW5jZT0iMjUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vTGF1bmNoZXJBcHBzJFBpbkl0ZW1SZXF1ZXN0IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHQoTGFuZHJvaWQvb3MvQnVuZGxlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwV2lkZ2V0UHJvdmlkZXJJbmZvKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGFuZHJvaWQvYXBwd2lkZ2V0L0FwcFdpZGdldFByb3ZpZGVySW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXF1ZXN0VHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3J0Y3V0SW5mbygpTGFuZHJvaWQvY29udGVudC9wbS9TaG9ydGN1dEluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYWxpZCgpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9UWVBFX0FQUFdJREdFVCIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9UWVBFX1NIT1JUQ1VUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL0xhdW5jaGVyQXBwcyRTaG9ydGN1dFF1ZXJ5IiBzaW5jZT0iMjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWN0aXZpdHkoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMYW5kcm9pZC9jb250ZW50L3BtL0xhdW5jaGVyQXBwcyRTaG9ydGN1dFF1ZXJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoYW5nZWRTaW5jZShKKUxhbmRyb2lkL2NvbnRlbnQvcG0vTGF1bmNoZXJBcHBzJFNob3J0Y3V0UXVlcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFja2FnZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9wbS9MYXVuY2hlckFwcHMkU2hvcnRjdXRRdWVyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRRdWVyeUZsYWdzKEkpTGFuZHJvaWQvY29udGVudC9wbS9MYXVuY2hlckFwcHMkU2hvcnRjdXRRdWVyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG9ydGN1dElkcyhMamF2YS91dGlsL0xpc3Q7KUxhbmRyb2lkL2NvbnRlbnQvcG0vTGF1bmNoZXJBcHBzJFNob3J0Y3V0UXVlcnk7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0dFVF9LRVlfRklFTERTX09OTFkiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfTUFUQ0hfRFlOQU1JQyIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19NQVRDSF9NQU5JRkVTVCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19NQVRDSF9QSU5ORUQiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfTUFUQ0hfUElOTkVEX0JZX0FOWV9MQVVOQ0hFUiIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJbmZvIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZ1ZlcnNpb25Db2RlKClKIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb25nVmVyc2lvbkNvZGUoSilWIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfTE9DQVRJT05fQVVUTyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNUQUxMX0xPQ0FUSU9OX0lOVEVSTkFMX09OTFkiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFMTF9MT0NBVElPTl9QUkVGRVJfRVhURVJOQUwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVEVEX1BFUk1JU1NJT05fR1JBTlRFRCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVFVRVNURURfUEVSTUlTU0lPTl9SRVFVSVJFRCIgc2luY2U9IjE2IiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iYWN0aXZpdGllcyIvPgotCQk8ZmllbGQgbmFtZT0iYXBwbGljYXRpb25JbmZvIi8+Ci0JCTxmaWVsZCBuYW1lPSJiYXNlUmV2aXNpb25Db2RlIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbmZpZ1ByZWZlcmVuY2VzIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iZmVhdHVyZUdyb3VwcyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJmaXJzdEluc3RhbGxUaW1lIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iZ2lkcyIvPgotCQk8ZmllbGQgbmFtZT0iaW5zdGFsbExvY2F0aW9uIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Imluc3RydW1lbnRhdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0ibGFzdFVwZGF0ZVRpbWUiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwYWNrYWdlTmFtZSIvPgotCQk8ZmllbGQgbmFtZT0icGVybWlzc2lvbnMiLz4KLQkJPGZpZWxkIG5hbWU9InByb3ZpZGVycyIvPgotCQk8ZmllbGQgbmFtZT0icmVjZWl2ZXJzIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXFGZWF0dXJlcyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9InJlcXVlc3RlZFBlcm1pc3Npb25zIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXF1ZXN0ZWRQZXJtaXNzaW9uc0ZsYWdzIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9InNlcnZpY2VzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzaGFyZWRVc2VySWQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzaGFyZWRVc2VyTGFiZWwiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzaWduYXR1cmVzIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0ic2lnbmluZ0luZm8iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0ic3BsaXROYW1lcyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJzcGxpdFJldmlzaW9uQ29kZXMiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0idmVyc2lvbkNvZGUiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ2ZXJzaW9uTmFtZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlSW5zdGFsbGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWJhbmRvblNlc3Npb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU2Vzc2lvbihMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJbnN0YWxsZXIkU2Vzc2lvblBhcmFtczspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbFNlc3Npb25zKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TXlTZXNzaW9ucygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlc3Npb25JbmZvKEkpTGFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlSW5zdGFsbGVyJFNlc3Npb25JbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5TZXNzaW9uKEkpTGFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlSW5zdGFsbGVyJFNlc3Npb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJTZXNzaW9uQ2FsbGJhY2soTGFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlSW5zdGFsbGVyJFNlc3Npb25DYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyU2Vzc2lvbkNhbGxiYWNrKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZUluc3RhbGxlciRTZXNzaW9uQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InVuaW5zdGFsbChMYW5kcm9pZC9jb250ZW50L3BtL1ZlcnNpb25lZFBhY2thZ2U7TGFuZHJvaWQvY29udGVudC9JbnRlbnRTZW5kZXI7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InVuaW5zdGFsbChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJTZXNzaW9uQ2FsbGJhY2soTGFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlSW5zdGFsbGVyJFNlc3Npb25DYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZVNlc3Npb25BcHBJY29uKElMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVTZXNzaW9uQXBwTGFiZWwoSUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0VTU0lPTl9DT01NSVRURUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NFU1NJT05fREVUQUlMUyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfT1RIRVJfUEFDS0FHRV9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QQUNLQUdFX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NFU1NJT04iIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU0VTU0lPTl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU1RBVFVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TVEFUVVNfTUVTU0FHRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU1RPUkFHRV9QQVRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfRkFJTFVSRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0ZBSUxVUkVfQUJPUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0ZBSUxVUkVfQkxPQ0tFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0ZBSUxVUkVfQ09ORkxJQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19GQUlMVVJFX0lOQ09NUEFUSUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0ZBSUxVUkVfSU5WQUxJRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0ZBSUxVUkVfU1RPUkFHRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX1BFTkRJTkdfVVNFUl9BQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19TVUNDRVNTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJbnN0YWxsZXIkU2Vzc2lvbiIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL0Nsb3NlYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFiYW5kb24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21taXQoTGFuZHJvaWQvY29udGVudC9JbnRlbnRTZW5kZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmc3luYyhMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5SZWFkKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuV3JpdGUoTGphdmEvbGFuZy9TdHJpbmc7SkopTGphdmEvaW8vT3V0cHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVNwbGl0KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGFnaW5nUHJvZ3Jlc3MoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNmZXIoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyNyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlSW5zdGFsbGVyJFNlc3Npb25DYWxsYmFjayIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWN0aXZlQ2hhbmdlZChJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25CYWRnaW5nQ2hhbmdlZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZWQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25GaW5pc2hlZChJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Qcm9ncmVzc0NoYW5nZWQoSUYpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlSW5zdGFsbGVyJFNlc3Npb25JbmZvIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZURldGFpbHNJbnRlbnQoKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFwcEljb24oKUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBMYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwUGFja2FnZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbGxMb2NhdGlvbigpSSIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFsbFJlYXNvbigpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFsbGVyUGFja2FnZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vZGUoKUkiIHNpbmNlPSIyNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yaWdpbmF0aW5nVWlkKClJIiBzaW5jZT0iMjciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmlnaW5hdGluZ1VyaSgpTGFuZHJvaWQvbmV0L1VyaTsiIHNpbmNlPSIyNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb2dyZXNzKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVmZXJyZXJVcmkoKUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMjciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXNzaW9uSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaXplKClKIiBzaW5jZT0iMjciLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FjdGl2ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2VhbGVkKClaIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZUluc3RhbGxlciRTZXNzaW9uUGFyYW1zIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBcHBJY29uKExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFwcExhYmVsKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXBwUGFja2FnZU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnN0YWxsTG9jYXRpb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5zdGFsbFJlYXNvbihJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9yaWdpbmF0aW5nVWlkKEkpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3JpZ2luYXRpbmdVcmkoTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlZmVycmVyVXJpKExhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaXplKEopViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9GVUxMX0lOU1RBTEwiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfSU5IRVJJVF9FWElTVElORyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlSXRlbUluZm8iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJdGVtSW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wQmFjayhMYW5kcm9pZC91dGlsL1ByaW50ZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wRnJvbnQoTGFuZHJvaWQvdXRpbC9QcmludGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZEJhbm5lcihMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIyMCIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRJY29uKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRMYWJlbChMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkTG9nbyhMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZFVuYmFkZ2VkSWNvbihMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRYbWxNZXRhRGF0YShMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L3Jlcy9YbWxSZXNvdXJjZVBhcnNlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVRvUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDtJKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImJhbm5lciIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY29uIi8+Ci0JCTxmaWVsZCBuYW1lPSJsYWJlbFJlcyIvPgotCQk8ZmllbGQgbmFtZT0ibG9nbyIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9Im1ldGFEYXRhIi8+Ci0JCTxmaWVsZCBuYW1lPSJuYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJub25Mb2NhbGl6ZWRMYWJlbCIvPgotCQk8ZmllbGQgbmFtZT0icGFja2FnZU5hbWUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZUl0ZW1JbmZvJERpc3BsYXlOYW1lQ29tcGFyYXRvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9Db21wYXJhdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZUl0ZW1JbmZvO0xhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZUl0ZW1JbmZvOylJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRQYWNrYWdlVG9QcmVmZXJyZWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUGVybWlzc2lvbihMYW5kcm9pZC9jb250ZW50L3BtL1Blcm1pc3Npb25JbmZvOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUGVybWlzc2lvbkFzeW5jKExhbmRyb2lkL2NvbnRlbnQvcG0vUGVybWlzc2lvbkluZm87KVoiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUHJlZmVycmVkQWN0aXZpdHkoTGFuZHJvaWQvY29udGVudC9JbnRlbnRGaWx0ZXI7SVtMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNhblJlcXVlc3RQYWNrYWdlSW5zdGFsbHMoKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbm9uaWNhbFRvQ3VycmVudFBhY2thZ2VOYW1lcyhbTGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tQZXJtaXNzaW9uKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tTaWduYXR1cmVzKElJKUkiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tTaWduYXR1cmVzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJJbnN0YW50QXBwQ29va2llKClWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhclBhY2thZ2VQcmVmZXJyZWRBY3Rpdml0aWVzKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3VycmVudFRvQ2Fub25pY2FsUGFja2FnZU5hbWVzKFtMamF2YS9sYW5nL1N0cmluZzspW0xqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHRlbmRWZXJpZmljYXRpb25UaW1lb3V0KElJSilWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3Rpdml0eUJhbm5lcihMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZpdHlCYW5uZXIoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZpdHlJY29uKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZpdHlJY29uKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3Rpdml0eUluZm8oTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0kpTGFuZHJvaWQvY29udGVudC9wbS9BY3Rpdml0eUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZpdHlMb2dvKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2aXR5TG9nbyhMYW5kcm9pZC9jb250ZW50L0ludGVudDspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbFBlcm1pc3Npb25Hcm91cHMoSSlMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwbGljYXRpb25CYW5uZXIoTGFuZHJvaWQvY29udGVudC9wbS9BcHBsaWNhdGlvbkluZm87KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwbGljYXRpb25CYW5uZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwbGljYXRpb25FbmFibGVkU2V0dGluZyhMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFwcGxpY2F0aW9uSWNvbihMYW5kcm9pZC9jb250ZW50L3BtL0FwcGxpY2F0aW9uSW5mbzspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwbGljYXRpb25JY29uKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvbkluZm8oTGphdmEvbGFuZy9TdHJpbmc7SSlMYW5kcm9pZC9jb250ZW50L3BtL0FwcGxpY2F0aW9uSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvbkxhYmVsKExhbmRyb2lkL2NvbnRlbnQvcG0vQXBwbGljYXRpb25JbmZvOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvbkxvZ28oTGFuZHJvaWQvY29udGVudC9wbS9BcHBsaWNhdGlvbkluZm87KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvbkxvZ28oTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFuZ2VkUGFja2FnZXMoSSlMYW5kcm9pZC9jb250ZW50L3BtL0NoYW5nZWRQYWNrYWdlczsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBvbmVudEVuYWJsZWRTZXR0aW5nKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRBY3Rpdml0eUljb24oKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyYXdhYmxlKExqYXZhL2xhbmcvU3RyaW5nO0lMYW5kcm9pZC9jb250ZW50L3BtL0FwcGxpY2F0aW9uSW5mbzspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFsbGVkQXBwbGljYXRpb25zKEkpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbGxlZFBhY2thZ2VzKEkpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbGxlclBhY2thZ2VOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFudEFwcENvb2tpZSgpW0IiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbnRBcHBDb29raWVNYXhCeXRlcygpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdHJ1bWVudGF0aW9uSW5mbyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7SSlMYW5kcm9pZC9jb250ZW50L3BtL0luc3RydW1lbnRhdGlvbkluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF1bmNoSW50ZW50Rm9yUGFja2FnZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExlYW5iYWNrTGF1bmNoSW50ZW50Rm9yUGFja2FnZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lRm9yVWlkKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZUFyY2hpdmVJbmZvKExqYXZhL2xhbmcvU3RyaW5nO0kpTGFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlR2lkcyhMamF2YS9sYW5nL1N0cmluZzspW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlR2lkcyhMamF2YS9sYW5nL1N0cmluZztJKVtJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlSW5mbyhMYW5kcm9pZC9jb250ZW50L3BtL1ZlcnNpb25lZFBhY2thZ2U7SSlMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJbmZvOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZUluZm8oTGphdmEvbGFuZy9TdHJpbmc7SSlMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VJbnN0YWxsZXIoKUxhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZUluc3RhbGxlcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VVaWQoTGphdmEvbGFuZy9TdHJpbmc7SSlJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlc0ZvclVpZChJKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlc0hvbGRpbmdQZXJtaXNzaW9ucyhbTGphdmEvbGFuZy9TdHJpbmc7SSlMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJtaXNzaW9uR3JvdXBJbmZvKExqYXZhL2xhbmcvU3RyaW5nO0kpTGFuZHJvaWQvY29udGVudC9wbS9QZXJtaXNzaW9uR3JvdXBJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlcm1pc3Npb25JbmZvKExqYXZhL2xhbmcvU3RyaW5nO0kpTGFuZHJvaWQvY29udGVudC9wbS9QZXJtaXNzaW9uSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVmZXJyZWRBY3Rpdml0aWVzKExqYXZhL3V0aWwvTGlzdDtMamF2YS91dGlsL0xpc3Q7TGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVmZXJyZWRQYWNrYWdlcyhJKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm92aWRlckluZm8oTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0kpTGFuZHJvaWQvY29udGVudC9wbS9Qcm92aWRlckluZm87IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlY2VpdmVySW5mbyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7SSlMYW5kcm9pZC9jb250ZW50L3BtL0FjdGl2aXR5SW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNvdXJjZXNGb3JBY3Rpdml0eShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUxhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNvdXJjZXNGb3JBcHBsaWNhdGlvbihMYW5kcm9pZC9jb250ZW50L3BtL0FwcGxpY2F0aW9uSW5mbzspTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc291cmNlc0ZvckFwcGxpY2F0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VydmljZUluZm8oTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0kpTGFuZHJvaWQvY29udGVudC9wbS9TZXJ2aWNlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaGFyZWRMaWJyYXJpZXMoSSlMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXNwZW5kZWRQYWNrYWdlQXBwRXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1BdmFpbGFibGVGZWF0dXJlcygpW0xhbmRyb2lkL2NvbnRlbnQvcG0vRmVhdHVyZUluZm87IiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5c3RlbVNoYXJlZExpYnJhcnlOYW1lcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0KExqYXZhL2xhbmcvU3RyaW5nO0lMYW5kcm9pZC9jb250ZW50L3BtL0FwcGxpY2F0aW9uSW5mbzspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlckJhZGdlZERyYXdhYmxlRm9yRGVuc2l0eShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTtMYW5kcm9pZC9vcy9Vc2VySGFuZGxlO0xhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7SSlMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJCYWRnZWRJY29uKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlO0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlckJhZGdlZExhYmVsKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WG1sKExqYXZhL2xhbmcvU3RyaW5nO0lMYW5kcm9pZC9jb250ZW50L3BtL0FwcGxpY2F0aW9uSW5mbzspTGFuZHJvaWQvY29udGVudC9yZXMvWG1sUmVzb3VyY2VQYXJzZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzU2lnbmluZ0NlcnRpZmljYXRlKElbQkkpWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzU2lnbmluZ0NlcnRpZmljYXRlKExqYXZhL2xhbmcvU3RyaW5nO1tCSSlaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNTeXN0ZW1GZWF0dXJlKExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1N5c3RlbUZlYXR1cmUoTGphdmEvbGFuZy9TdHJpbmc7SSlaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnN0YWxsUGFja2FnZShMYW5kcm9pZC9uZXQvVXJpOylWIiByZW1vdmVkPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zdGFsbFBhY2thZ2UoTGFuZHJvaWQvbmV0L1VyaTtMYW5kcm9pZC9jb250ZW50L3BtL0lQYWNrYWdlSW5zdGFsbE9ic2VydmVyO0kpViIgcmVtb3ZlZD0iNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5zdGFudEFwcCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbnN0YW50QXBwKExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1BhY2thZ2VTdXNwZW5kZWQoKVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGVybWlzc2lvblJldm9rZWRCeVBvbGljeShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTYWZlTW9kZSgpWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeUJyb2FkY2FzdFJlY2VpdmVycyhMYW5kcm9pZC9jb250ZW50L0ludGVudDtJKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeUNvbnRlbnRQcm92aWRlcnMoTGphdmEvbGFuZy9TdHJpbmc7SUkpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5SW5zdHJ1bWVudGF0aW9uKExqYXZhL2xhbmcvU3RyaW5nO0kpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5SW50ZW50QWN0aXZpdGllcyhMYW5kcm9pZC9jb250ZW50L0ludGVudDtJKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeUludGVudEFjdGl2aXR5T3B0aW9ucyhMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7W0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0kpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5SW50ZW50Q29udGVudFByb3ZpZGVycyhMYW5kcm9pZC9jb250ZW50L0ludGVudDtJKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5SW50ZW50U2VydmljZXMoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7SSlMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnlQZXJtaXNzaW9uc0J5R3JvdXAoTGphdmEvbGFuZy9TdHJpbmc7SSlMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUGFja2FnZUZyb21QcmVmZXJyZWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUGVybWlzc2lvbihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmVBY3Rpdml0eShMYW5kcm9pZC9jb250ZW50L0ludGVudDtJKUxhbmRyb2lkL2NvbnRlbnQvcG0vUmVzb2x2ZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZUNvbnRlbnRQcm92aWRlcihMamF2YS9sYW5nL1N0cmluZztJKUxhbmRyb2lkL2NvbnRlbnQvcG0vUHJvdmlkZXJJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmVTZXJ2aWNlKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0kpTGFuZHJvaWQvY29udGVudC9wbS9SZXNvbHZlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBcHBsaWNhdGlvbkNhdGVnb3J5SGludChMamF2YS9sYW5nL1N0cmluZztJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFwcGxpY2F0aW9uRW5hYmxlZFNldHRpbmcoTGphdmEvbGFuZy9TdHJpbmc7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbXBvbmVudEVuYWJsZWRTZXR0aW5nKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5zdGFsbGVyUGFja2FnZU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUluc3RhbnRBcHBDb29raWUoW0IpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmVyaWZ5UGVuZGluZ0luc3RhbGwoSUkpViIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRVJUX0lOUFVUX1JBV19YNTA5IiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNFUlRfSU5QVVRfU0hBMjU2IiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RJU0FCTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QT05FTlRfRU5BQkxFRF9TVEFURV9ESVNBQkxFRF9VTlRJTF9VU0VEIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RJU0FCTEVEX1VTRVIiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfRU5BQkxFRCIvPgotCQk8ZmllbGQgbmFtZT0iRE9OVF9LSUxMX0FQUCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfVkVSSUZJQ0FUSU9OX0lEIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1ZFUklGSUNBVElPTl9SRVNVTFQiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9BQ1RJVklUSUVTX09OX1NFQ09OREFSWV9ESVNQTEFZUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0FQUF9XSURHRVRTIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQVVESU9fTE9XX0xBVEVOQ1kiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0FVRElPX09VVFBVVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0FVRElPX1BSTyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0FVVE9GSUxMIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQVVUT01PVElWRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0JBQ0tVUCIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0JMVUVUT09USCIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQkxVRVRPT1RIX0xFIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQ0FNRVJBIiBzaW5jZT0iNyIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9DQU1FUkFfQU5ZIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQ0FNRVJBX0FSIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQ0FNRVJBX0FVVE9GT0NVUyIgc2luY2U9IjciLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQ0FNRVJBX0NBUEFCSUxJVFlfTUFOVUFMX1BPU1RfUFJPQ0VTU0lORyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0NBTUVSQV9DQVBBQklMSVRZX01BTlVBTF9TRU5TT1IiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9DQU1FUkFfQ0FQQUJJTElUWV9SQVciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9DQU1FUkFfRVhURVJOQUwiIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9DQU1FUkFfRkxBU0giIHNpbmNlPSI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0NBTUVSQV9GUk9OVCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQ0FNRVJBX0xFVkVMX0ZVTEwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9DQU5UX1NBVkVfU1RBVEUiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9DT01QQU5JT05fREVWSUNFX1NFVFVQIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQ09OTkVDVElPTl9TRVJWSUNFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQ09OU1VNRVJfSVIiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9ERVZJQ0VfQURNSU4iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9FTUJFRERFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0VUSEVSTkVUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfRkFLRVRPVUNIIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfRkFLRVRPVUNIX01VTFRJVE9VQ0hfRElTVElOQ1QiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9GQUtFVE9VQ0hfTVVMVElUT1VDSF9KQVpaSEFORCIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0ZJTkdFUlBSSU5UIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfRlJFRUZPUk1fV0lORE9XX01BTkFHRU1FTlQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9HQU1FUEFEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfSElGSV9TRU5TT1JTIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfSE9NRV9TQ1JFRU4iIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9JTlBVVF9NRVRIT0RTIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfTEVBTkJBQ0siIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9MRUFOQkFDS19PTkxZIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfTElWRV9UViIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0xJVkVfV0FMTFBBUEVSIiBzaW5jZT0iNyIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9MT0NBVElPTiIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfTE9DQVRJT05fR1BTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9MT0NBVElPTl9ORVRXT1JLIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9NQU5BR0VEX1VTRVJTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfTUlDUk9QSE9ORSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfTUlESSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX05GQyIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfTkZDX0hPU1RfQ0FSRF9FTVVMQVRJT04iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9ORkNfSE9TVF9DQVJEX0VNVUxBVElPTl9ORkNGIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfT1BFTkdMRVNfRVhURU5TSU9OX1BBQ0siIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9QQyIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1BJQ1RVUkVfSU5fUElDVFVSRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1BSSU5USU5HIiBzaW5jZT0iMjAiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfUkFNX0xPVyIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1JBTV9OT1JNQUwiIHNpbmNlPSIyNyIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9TQ1JFRU5fTEFORFNDQVBFIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfU0NSRUVOX1BPUlRSQUlUIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfU0VDVVJFTFlfUkVNT1ZFU19VU0VSUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1NFTlNPUl9BQ0NFTEVST01FVEVSIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9TRU5TT1JfQU1CSUVOVF9URU1QRVJBVFVSRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1NFTlNPUl9CQVJPTUVURVIiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1NFTlNPUl9DT01QQVNTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9TRU5TT1JfR1lST1NDT1BFIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9TRU5TT1JfSEVBUlRfUkFURSIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1NFTlNPUl9IRUFSVF9SQVRFX0VDRyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1NFTlNPUl9MSUdIVCIgc2luY2U9IjciLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfU0VOU09SX1BST1hJTUlUWSIgc2luY2U9IjciLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfU0VOU09SX1JFTEFUSVZFX0hVTUlESVRZIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfU0VOU09SX1NURVBfQ09VTlRFUiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1NFTlNPUl9TVEVQX0RFVEVDVE9SIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfU0lQIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9TSVBfVk9JUCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfU1RST05HQk9YX0tFWVNUT1JFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfVEVMRVBIT05ZIiBzaW5jZT0iNyIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9URUxFUEhPTllfQ0RNQSIgc2luY2U9IjciLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfVEVMRVBIT05ZX0VVSUNDIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfVEVMRVBIT05ZX0dTTSIgc2luY2U9IjciLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfVEVMRVBIT05ZX01CTVMiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9URUxFVklTSU9OIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1RPVUNIU0NSRUVOIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9UT1VDSFNDUkVFTl9NVUxUSVRPVUNIIiBzaW5jZT0iNyIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9UT1VDSFNDUkVFTl9NVUxUSVRPVUNIX0RJU1RJTkNUIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9UT1VDSFNDUkVFTl9NVUxUSVRPVUNIX0pBWlpIQU5EIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9VU0JfQUNDRVNTT1JZIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfVVNCX0hPU1QiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9WRVJJRklFRF9CT09UIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfVlJfSEVBRFRSQUNLSU5HIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfVlJfTU9ERSIgc2luY2U9IjI0IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9WUl9NT0RFX0hJR0hfUEVSRk9STUFOQ0UiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9WVUxLQU5fSEFSRFdBUkVfQ09NUFVURSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1ZVTEtBTl9IQVJEV0FSRV9MRVZFTCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1ZVTEtBTl9IQVJEV0FSRV9WRVJTSU9OIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfV0FUQ0giIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9XRUJWSUVXIiBzaW5jZT0iMjAiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfV0lGSSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfV0lGSV9BV0FSRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1dJRklfRElSRUNUIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfV0lGSV9QQVNTUE9JTlQiIHNpbmNlPSIyNyIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9XSUZJX1JUVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JXQVJEX0xPQ0tfUEFDS0FHRSIgcmVtb3ZlZD0iNCIvPgotCQk8ZmllbGQgbmFtZT0iR0VUX0FDVElWSVRJRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9DT05GSUdVUkFUSU9OUyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9ESVNBQkxFRF9DT01QT05FTlRTIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iR0VUX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUyIgc2luY2U9IjE4IiBkZXByZWNhdGVkPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iR0VUX0dJRFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9JTlNUUlVNRU5UQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9JTlRFTlRfRklMVEVSUyIvPgotCQk8ZmllbGQgbmFtZT0iR0VUX01FVEFfREFUQSIvPgotCQk8ZmllbGQgbmFtZT0iR0VUX1BFUk1JU1NJT05TIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRVRfUFJPVklERVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRVRfUkVDRUlWRVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRVRfUkVTT0xWRURfRklMVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRVRfU0VSVklDRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9TSEFSRURfTElCUkFSWV9GSUxFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0VUX1NJR05BVFVSRVMiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHRVRfU0lHTklOR19DRVJUSUZJQ0FURVMiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9VUklfUEVSTUlTU0lPTl9QQVRURVJOUyIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFMTF9GQUlMRURfQUxSRUFEWV9FWElTVFMiIHJlbW92ZWQ9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfRkFJTEVEX0NPTkZMSUNUSU5HX1BST1ZJREVSIiBzaW5jZT0iMyIgcmVtb3ZlZD0iNCIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFMTF9GQUlMRURfREVYT1BUIiByZW1vdmVkPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNUQUxMX0ZBSUxFRF9EVVBMSUNBVEVfUEFDS0FHRSIgcmVtb3ZlZD0iNCIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFMTF9GQUlMRURfSU5TVUZGSUNJRU5UX1NUT1JBR0UiIHJlbW92ZWQ9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfRkFJTEVEX0lOVkFMSURfQVBLIiByZW1vdmVkPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNUQUxMX0ZBSUxFRF9JTlZBTElEX1VSSSIgcmVtb3ZlZD0iNCIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFMTF9GQUlMRURfTUlTU0lOR19TSEFSRURfTElCUkFSWSIgcmVtb3ZlZD0iNCIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFMTF9GQUlMRURfTk9fU0hBUkVEX1VTRVIiIHJlbW92ZWQ9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfRkFJTEVEX09MREVSX1NESyIgcmVtb3ZlZD0iNCIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFMTF9GQUlMRURfUkVQTEFDRV9DT1VMRE5UX0RFTEVURSIgcmVtb3ZlZD0iNCIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFMTF9GQUlMRURfU0hBUkVEX1VTRVJfSU5DT01QQVRJQkxFIiByZW1vdmVkPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNUQUxMX0ZBSUxFRF9VUERBVEVfSU5DT01QQVRJQkxFIiByZW1vdmVkPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNUQUxMX1BBUlNFX0ZBSUxFRF9CQURfTUFOSUZFU1QiIHJlbW92ZWQ9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfUEFSU0VfRkFJTEVEX0JBRF9QQUNLQUdFX05BTUUiIHJlbW92ZWQ9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfUEFSU0VfRkFJTEVEX0JBRF9TSEFSRURfVVNFUl9JRCIgcmVtb3ZlZD0iNCIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFMTF9QQVJTRV9GQUlMRURfQ0VSVElGSUNBVEVfRU5DT0RJTkciIHJlbW92ZWQ9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfUEFSU0VfRkFJTEVEX0lOQ09OU0lTVEVOVF9DRVJUSUZJQ0FURVMiIHJlbW92ZWQ9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfUEFSU0VfRkFJTEVEX01BTklGRVNUX0VNUFRZIiByZW1vdmVkPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNUQUxMX1BBUlNFX0ZBSUxFRF9NQU5JRkVTVF9NQUxGT1JNRUQiIHJlbW92ZWQ9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfUEFSU0VfRkFJTEVEX05PVF9BUEsiIHJlbW92ZWQ9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfUEFSU0VfRkFJTEVEX05PX0NFUlRJRklDQVRFUyIgcmVtb3ZlZD0iNCIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFMTF9QQVJTRV9GQUlMRURfVU5FWFBFQ1RFRF9FWENFUFRJT04iIHJlbW92ZWQ9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfUkVBU09OX0RFVklDRV9SRVNUT1JFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfUkVBU09OX0RFVklDRV9TRVRVUCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNUQUxMX1JFQVNPTl9QT0xJQ1kiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFMTF9SRUFTT05fVU5LTk9XTiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNUQUxMX1JFQVNPTl9VU0VSIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfU1VDQ0VFREVEIiByZW1vdmVkPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRDSF9BTEwiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTUFUQ0hfREVGQVVMVF9PTkxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRDSF9ESVJFQ1RfQk9PVF9BV0FSRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRDSF9ESVJFQ1RfQk9PVF9VTkFXQVJFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVENIX1NZU1RFTV9PTkxZIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWElNVU1fVkVSSUZJQ0FUSU9OX1RJTUVPVVQiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iUEVSTUlTU0lPTl9ERU5JRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUk1JU1NJT05fR1JBTlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iUEtHX0lOU1RBTExfQ09NUExFVEUiIHJlbW92ZWQ9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlBLR19JTlNUQUxMX0lOQ09NUExFVEUiIHJlbW92ZWQ9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUExBQ0VfRVhJU1RJTkdfUEFDS0FHRSIgcmVtb3ZlZD0iNCIvPgotCQk8ZmllbGQgbmFtZT0iU0lHTkFUVVJFX0ZJUlNUX05PVF9TSUdORUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR05BVFVSRV9NQVRDSCIvPgotCQk8ZmllbGQgbmFtZT0iU0lHTkFUVVJFX05FSVRIRVJfU0lHTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdOQVRVUkVfTk9fTUFUQ0giLz4KLQkJPGZpZWxkIG5hbWU9IlNJR05BVFVSRV9TRUNPTkRfTk9UX1NJR05FRCIvPgotCQk8ZmllbGQgbmFtZT0iU0lHTkFUVVJFX1VOS05PV05fUEFDS0FHRSIvPgotCQk8ZmllbGQgbmFtZT0iVkVSSUZJQ0FUSU9OX0FMTE9XIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlZFUklGSUNBVElPTl9SRUpFQ1QiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVkVSU0lPTl9DT0RFX0hJR0hFU1QiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlTWFuYWdlciROYW1lTm90Rm91bmRFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC91dGlsL0FuZHJvaWRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZVN0YXRzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VTdGF0czspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9ImNhY2hlU2l6ZSIvPgotCQk8ZmllbGQgbmFtZT0iY29kZVNpemUiLz4KLQkJPGZpZWxkIG5hbWU9ImRhdGFTaXplIi8+Ci0JCTxmaWVsZCBuYW1lPSJleHRlcm5hbENhY2hlU2l6ZSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJleHRlcm5hbENvZGVTaXplIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9ImV4dGVybmFsRGF0YVNpemUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZXh0ZXJuYWxNZWRpYVNpemUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iZXh0ZXJuYWxPYmJTaXplIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InBhY2thZ2VOYW1lIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL1BhdGhQZXJtaXNzaW9uIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3MvUGF0dGVybk1hdGNoZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlYWRQZXJtaXNzaW9uKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXcml0ZVBlcm1pc3Npb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9QZXJtaXNzaW9uR3JvdXBJbmZvIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlSXRlbUluZm8iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvcG0vUGVybWlzc2lvbkdyb3VwSW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWREZXNjcmlwdGlvbihMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUEVSU09OQUxfSU5GTyIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkZXNjcmlwdGlvblJlcyIvPgotCQk8ZmllbGQgbmFtZT0iZmxhZ3MiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0ibm9uTG9jYWxpemVkRGVzY3JpcHRpb24iLz4KLQkJPGZpZWxkIG5hbWU9InByaW9yaXR5IiBzaW5jZT0iMTciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vUGVybWlzc2lvbkluZm8iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJdGVtSW5mbyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9wbS9QZXJtaXNzaW9uSW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3RlY3Rpb24oKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3RlY3Rpb25GbGFncygpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZERlc2NyaXB0aW9uKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19DT1NUU19NT05FWSIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0lOU1RBTExFRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9URUNUSU9OX0RBTkdFUk9VUyIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVEVDVElPTl9GTEFHX0FQUE9QIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RFQ1RJT05fRkxBR19ERVZFTE9QTUVOVCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9URUNUSU9OX0ZMQUdfSU5TVEFMTEVSIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RFQ1RJT05fRkxBR19JTlNUQU5UIiBzaW5jZT0iMjciLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RFQ1RJT05fRkxBR19QUkUyMyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9URUNUSU9OX0ZMQUdfUFJFSU5TVEFMTEVEIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RFQ1RJT05fRkxBR19QUklWSUxFR0VEIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RFQ1RJT05fRkxBR19SVU5USU1FX09OTFkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVEVDVElPTl9GTEFHX1NFVFVQIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RFQ1RJT05fRkxBR19TWVNURU0iIHNpbmNlPSIxNiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RFQ1RJT05fRkxBR19WRVJJRklFUiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9URUNUSU9OX01BU0tfQkFTRSIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVEVDVElPTl9NQVNLX0ZMQUdTIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9URUNUSU9OX05PUk1BTCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVEVDVElPTl9TSUdOQVRVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RFQ1RJT05fU0lHTkFUVVJFX09SX1NZU1RFTSIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImRlc2NyaXB0aW9uUmVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJmbGFncyIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJncm91cCIvPgotCQk8ZmllbGQgbmFtZT0ibm9uTG9jYWxpemVkRGVzY3JpcHRpb24iLz4KLQkJPGZpZWxkIG5hbWU9InByb3RlY3Rpb25MZXZlbCIgZGVwcmVjYXRlZD0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vUHJvdmlkZXJJbmZvIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9Db21wb25lbnRJbmZvIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3BtL1Byb3ZpZGVySW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXAoTGFuZHJvaWQvdXRpbC9QcmludGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfU0lOR0xFX1VTRVIiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iYXV0aG9yaXR5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmbGFncyIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJncmFudFVyaVBlcm1pc3Npb25zIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbml0T3JkZXIiLz4KLQkJPGZpZWxkIG5hbWU9ImlzU3luY2FibGUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtdWx0aXByb2Nlc3MiLz4KLQkJPGZpZWxkIG5hbWU9InBhdGhQZXJtaXNzaW9ucyIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9InJlYWRQZXJtaXNzaW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJ1cmlQZXJtaXNzaW9uUGF0dGVybnMiLz4KLQkJPGZpZWxkIG5hbWU9IndyaXRlUGVybWlzc2lvbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9SZXNvbHZlSW5mbyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3BtL1Jlc29sdmVJbmZvOylWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExhbmRyb2lkL3V0aWwvUHJpbnRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEljb25SZXNvdXJjZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRJY29uKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRMYWJlbChMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9ImFjdGl2aXR5SW5mbyIvPgotCQk8ZmllbGQgbmFtZT0iZmlsdGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJpY29uIi8+Ci0JCTxmaWVsZCBuYW1lPSJpc0RlZmF1bHQiLz4KLQkJPGZpZWxkIG5hbWU9ImlzSW5zdGFudEFwcEF2YWlsYWJsZSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYWJlbFJlcyIvPgotCQk8ZmllbGQgbmFtZT0ibWF0Y2giLz4KLQkJPGZpZWxkIG5hbWU9Im5vbkxvY2FsaXplZExhYmVsIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcmVmZXJyZWRPcmRlciIvPgotCQk8ZmllbGQgbmFtZT0icHJpb3JpdHkiLz4KLQkJPGZpZWxkIG5hbWU9InByb3ZpZGVySW5mbyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJyZXNvbHZlUGFja2FnZU5hbWUiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzZXJ2aWNlSW5mbyIvPgotCQk8ZmllbGQgbmFtZT0ic3BlY2lmaWNJbmRleCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9SZXNvbHZlSW5mbyREaXNwbGF5TmFtZUNvbXBhcmF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvQ29tcGFyYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZShMYW5kcm9pZC9jb250ZW50L3BtL1Jlc29sdmVJbmZvO0xhbmRyb2lkL2NvbnRlbnQvcG0vUmVzb2x2ZUluZm87KUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vU2VydmljZUluZm8iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL0NvbXBvbmVudEluZm8iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvcG0vU2VydmljZUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExhbmRyb2lkL3V0aWwvUHJpbnRlcjtMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfRVhURVJOQUxfU0VSVklDRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0lTT0xBVEVEX1BST0NFU1MiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TSU5HTEVfVVNFUiIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NUT1BfV0lUSF9UQVNLIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9ImZsYWdzIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9InBlcm1pc3Npb24iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vU2hhcmVkTGlicmFyeUluZm8iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2xhcmluZ1BhY2thZ2UoKUxhbmRyb2lkL2NvbnRlbnQvcG0vVmVyc2lvbmVkUGFja2FnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXBlbmRlbnRQYWNrYWdlcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmdWZXJzaW9uKClKIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVyc2lvbigpSSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQlVJTFRJTiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9EWU5BTUlDIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NUQVRJQyIvPgotCQk8ZmllbGQgbmFtZT0iVkVSU0lPTl9VTkRFRklORUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vU2hvcnRjdXRJbmZvIiBzaW5jZT0iMjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9wbS9TaG9ydGN1dEluZm8kQnVpbGRlcjspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZpdHkoKUxhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYXRlZ29yaWVzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNhYmxlZE1lc3NhZ2UoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc2FibGVkUmVhc29uKClJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlbnQoKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVudHMoKVtMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXN0Q2hhbmdlZFRpbWVzdGFtcCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmdMYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmFuaygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3J0TGFiZWwoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJIYW5kbGUoKUxhbmRyb2lkL29zL1VzZXJIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzS2V5RmllbGRzT25seSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGVjbGFyZWRJbk1hbmlmZXN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEeW5hbWljKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbW11dGFibGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Bpbm5lZCgpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUJMRURfUkVBU09OX0FQUF9DSEFOR0VEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FCTEVEX1JFQVNPTl9CQUNLVVBfTk9UX1NVUFBPUlRFRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBQkxFRF9SRUFTT05fQllfQVBQIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FCTEVEX1JFQVNPTl9OT1RfRElTQUJMRUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUJMRURfUkVBU09OX09USEVSX1JFU1RPUkVfSVNTVUUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUJMRURfUkVBU09OX1NJR05BVFVSRV9NSVNNQVRDSCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBQkxFRF9SRUFTT05fVU5LTk9XTiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBQkxFRF9SRUFTT05fVkVSU0lPTl9MT1dFUiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9SVENVVF9DQVRFR09SWV9DT05WRVJTQVRJT04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vU2hvcnRjdXRJbmZvJEJ1aWxkZXIiIHNpbmNlPSIyNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL2NvbnRlbnQvcG0vU2hvcnRjdXRJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjdGl2aXR5KExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGFuZHJvaWQvY29udGVudC9wbS9TaG9ydGN1dEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYXRlZ29yaWVzKExqYXZhL3V0aWwvU2V0OylMYW5kcm9pZC9jb250ZW50L3BtL1Nob3J0Y3V0SW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc2FibGVkTWVzc2FnZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvY29udGVudC9wbS9TaG9ydGN1dEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeHRyYXMoTGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7KUxhbmRyb2lkL2NvbnRlbnQvcG0vU2hvcnRjdXRJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWNvbihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9JY29uOylMYW5kcm9pZC9jb250ZW50L3BtL1Nob3J0Y3V0SW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludGVudChMYW5kcm9pZC9jb250ZW50L0ludGVudDspTGFuZHJvaWQvY29udGVudC9wbS9TaG9ydGN1dEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlbnRzKFtMYW5kcm9pZC9jb250ZW50L0ludGVudDspTGFuZHJvaWQvY29udGVudC9wbS9TaG9ydGN1dEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb25nTGFiZWwoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2NvbnRlbnQvcG0vU2hvcnRjdXRJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmFuayhJKUxhbmRyb2lkL2NvbnRlbnQvcG0vU2hvcnRjdXRJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hvcnRMYWJlbChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvY29udGVudC9wbS9TaG9ydGN1dEluZm8kQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vU2hvcnRjdXRNYW5hZ2VyIiBzaW5jZT0iMjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZER5bmFtaWNTaG9ydGN1dHMoTGphdmEvdXRpbC9MaXN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU2hvcnRjdXRSZXN1bHRJbnRlbnQoTGFuZHJvaWQvY29udGVudC9wbS9TaG9ydGN1dEluZm87KUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzYWJsZVNob3J0Y3V0cyhMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNhYmxlU2hvcnRjdXRzKExqYXZhL3V0aWwvTGlzdDtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuYWJsZVNob3J0Y3V0cyhMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREeW5hbWljU2hvcnRjdXRzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWNvbk1heEhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEljb25NYXhXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hbmlmZXN0U2hvcnRjdXRzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4U2hvcnRjdXRDb3VudFBlckFjdGl2aXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGlubmVkU2hvcnRjdXRzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSYXRlTGltaXRpbmdBY3RpdmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlcXVlc3RQaW5TaG9ydGN1dFN1cHBvcnRlZCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQWxsRHluYW1pY1Nob3J0Y3V0cygpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUR5bmFtaWNTaG9ydGN1dHMoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVwb3J0U2hvcnRjdXRVc2VkKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFBpblNob3J0Y3V0KExhbmRyb2lkL2NvbnRlbnQvcG0vU2hvcnRjdXRJbmZvO0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50U2VuZGVyOylaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREeW5hbWljU2hvcnRjdXRzKExqYXZhL3V0aWwvTGlzdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZVNob3J0Y3V0cyhMamF2YS91dGlsL0xpc3Q7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcG0vU2lnbmF0dXJlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0J5dGVBcnJheSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0NoYXJzKClbQyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQ2hhcnMoW0NbSSlbQyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQ2hhcnNTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9TaWduaW5nSW5mbyIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9wbS9TaWduaW5nSW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFwa0NvbnRlbnRzU2lnbmVycygpW0xhbmRyb2lkL2NvbnRlbnQvcG0vU2lnbmF0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpZ25pbmdDZXJ0aWZpY2F0ZUhpc3RvcnkoKVtMYW5kcm9pZC9jb250ZW50L3BtL1NpZ25hdHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNNdWx0aXBsZVNpZ25lcnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNQYXN0U2lnbmluZ0NlcnRpZmljYXRlcygpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9wbS9WZXJzaW9uZWRQYWNrYWdlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SilWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nVmVyc2lvbkNvZGUoKUoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZXJzaW9uQ29kZSgpSSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiIHNpbmNlPSIzIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7SkopViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjtKSkxhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVJbnB1dFN0cmVhbSgpTGphdmEvaW8vRmlsZUlucHV0U3RyZWFtOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVPdXRwdXRTdHJlYW0oKUxqYXZhL2lvL0ZpbGVPdXRwdXRTdHJlYW07IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2xhcmVkTGVuZ3RoKClKIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dHJhcygpTGFuZHJvaWQvb3MvQnVuZGxlOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsZURlc2NyaXB0b3IoKUxqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExlbmd0aCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmNlbEZpbGVEZXNjcmlwdG9yKClMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydE9mZnNldCgpSiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IlVOS05PV05fTEVOR1RIIiBzaW5jZT0iMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRGaWxlRGVzY3JpcHRvciRBdXRvQ2xvc2VJbnB1dFN0cmVhbSIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yJEF1dG9DbG9zZUlucHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3I7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3IkQXV0b0Nsb3NlT3V0cHV0U3RyZWFtIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3IkQXV0b0Nsb3NlT3V0cHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3I7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0TWFuYWdlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BdXRvQ2xvc2VhYmxlIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsaXN0KExqYXZhL2xhbmcvU3RyaW5nOylbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbihMamF2YS9sYW5nL1N0cmluZztJKUxqYXZhL2lvL0lucHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5GZChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRGaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuTm9uQXNzZXRGZChJTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3Blbk5vbkFzc2V0RmQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlblhtbFJlc291cmNlUGFyc2VyKElMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvY29udGVudC9yZXMvWG1sUmVzb3VyY2VQYXJzZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlblhtbFJlc291cmNlUGFyc2VyKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L3Jlcy9YbWxSZXNvdXJjZVBhcnNlcjsiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VTU19CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VTU19SQU5ET00iLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VTU19TVFJFQU1JTkciLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VTU19VTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXIkQXNzZXRJbnB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0lucHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0TWFuYWdlcjspViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRNYW5hZ2VyO0opViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXNzZXRJbnQoKUkiIHJlbW92ZWQ9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbW0lbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRnJvbVhtbChMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7TG9yZy94bWxwdWxsL3YxL1htbFB1bGxQYXJzZXI7KUxhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OyIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcm9tWG1sKExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztMb3JnL3htbHB1bGwvdjEvWG1sUHVsbFBhcnNlcjtMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMkVGhlbWU7KUxhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhbmdpbmdDb25maWd1cmF0aW9ucygpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sb3JGb3JTdGF0ZShbSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRDb2xvcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT3BhcXVlKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N0YXRlZnVsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihJKUxhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhBbHBoYShJKUxhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3Jlcy9Db25maWd1cmF0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbmZpZ3VyYXRpb247KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaWZmKExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbmZpZ3VyYXRpb247KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoTGFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheW91dERpcmVjdGlvbigpSSIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxlcygpTGFuZHJvaWQvb3MvTG9jYWxlTGlzdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTGF5b3V0U2l6ZUF0TGVhc3QoSSlaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NjcmVlbkhkcigpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTY3JlZW5Sb3VuZCgpWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTY3JlZW5XaWRlQ29sb3JHYW11dCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmVlZE5ld1Jlc291cmNlcyhJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEZyb21QYXJjZWwoTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldExheW91dERpcmVjdGlvbihMamF2YS91dGlsL0xvY2FsZTspViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9jYWxlKExqYXZhL3V0aWwvTG9jYWxlOylWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2NhbGVzKExhbmRyb2lkL29zL0xvY2FsZUxpc3Q7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRvKExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbmZpZ3VyYXRpb247KVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VG9EZWZhdWx0cygpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUZyb20oTGFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbjspSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfTU9ERV9IRFJfTUFTSyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9NT0RFX0hEUl9OTyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9NT0RFX0hEUl9TSElGVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9NT0RFX0hEUl9VTkRFRklORUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfTU9ERV9IRFJfWUVTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX01PREVfVU5ERUZJTkVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX01PREVfV0lERV9DT0xPUl9HQU1VVF9NQVNLIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX01PREVfV0lERV9DT0xPUl9HQU1VVF9OTyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9NT0RFX1dJREVfQ09MT1JfR0FNVVRfVU5ERUZJTkVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX01PREVfV0lERV9DT0xPUl9HQU1VVF9ZRVMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV9EUElfVU5ERUZJTkVEIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkhBUkRLRVlCT0FSREhJRERFTl9OTyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkhBUkRLRVlCT0FSREhJRERFTl9VTkRFRklORUQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQVJES0VZQk9BUkRISURERU5fWUVTIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQk9BUkRISURERU5fTk8iLz4KLQkJPGZpZWxkIG5hbWU9IktFWUJPQVJESElEREVOX1VOREVGSU5FRCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQk9BUkRISURERU5fWUVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlCT0FSRF8xMktFWSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQk9BUkRfTk9LRVlTIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlCT0FSRF9RV0VSVFkiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUJPQVJEX1VOREVGSU5FRCIvPgotCQk8ZmllbGQgbmFtZT0iTU5DX1pFUk8iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTkFWSUdBVElPTkhJRERFTl9OTyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BVklHQVRJT05ISURERU5fVU5ERUZJTkVEIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iTkFWSUdBVElPTkhJRERFTl9ZRVMiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOQVZJR0FUSU9OX0RQQUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BVklHQVRJT05fTk9OQVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BVklHQVRJT05fVFJBQ0tCQUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQVZJR0FUSU9OX1VOREVGSU5FRCIvPgotCQk8ZmllbGQgbmFtZT0iTkFWSUdBVElPTl9XSEVFTCIvPgotCQk8ZmllbGQgbmFtZT0iT1JJRU5UQVRJT05fTEFORFNDQVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUklFTlRBVElPTl9QT1JUUkFJVCIvPgotCQk8ZmllbGQgbmFtZT0iT1JJRU5UQVRJT05fU1FVQVJFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1JJRU5UQVRJT05fVU5ERUZJTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5MQVlPVVRfTEFZT1VURElSX0xUUiIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5MQVlPVVRfTEFZT1VURElSX01BU0siIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOTEFZT1VUX0xBWU9VVERJUl9SVEwiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOTEFZT1VUX0xBWU9VVERJUl9TSElGVCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5MQVlPVVRfTEFZT1VURElSX1VOREVGSU5FRCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5MQVlPVVRfTE9OR19NQVNLIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOTEFZT1VUX0xPTkdfTk8iIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5MQVlPVVRfTE9OR19VTkRFRklORUQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5MQVlPVVRfTE9OR19ZRVMiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5MQVlPVVRfUk9VTkRfTUFTSyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5MQVlPVVRfUk9VTkRfTk8iIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOTEFZT1VUX1JPVU5EX1VOREVGSU5FRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5MQVlPVVRfUk9VTkRfWUVTIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTkxBWU9VVF9TSVpFX0xBUkdFIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOTEFZT1VUX1NJWkVfTUFTSyIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTkxBWU9VVF9TSVpFX05PUk1BTCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTkxBWU9VVF9TSVpFX1NNQUxMIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOTEFZT1VUX1NJWkVfVU5ERUZJTkVEIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOTEFZT1VUX1NJWkVfWExBUkdFIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOTEFZT1VUX1VOREVGSU5FRCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5fSEVJR0hUX0RQX1VOREVGSU5FRCIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5fV0lEVEhfRFBfVU5ERUZJTkVEIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IlNNQUxMRVNUX1NDUkVFTl9XSURUSF9EUF9VTkRFRklORUQiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iVE9VQ0hTQ1JFRU5fRklOR0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT1VDSFNDUkVFTl9OT1RPVUNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT1VDSFNDUkVFTl9TVFlMVVMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT1VDSFNDUkVFTl9VTkRFRklORUQiLz4KLQkJPGZpZWxkIG5hbWU9IlVJX01PREVfTklHSFRfTUFTSyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlVJX01PREVfTklHSFRfTk8iIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVSV9NT0RFX05JR0hUX1VOREVGSU5FRCIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlVJX01PREVfTklHSFRfWUVTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iVUlfTU9ERV9UWVBFX0FQUExJQU5DRSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVSV9NT0RFX1RZUEVfQ0FSIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iVUlfTU9ERV9UWVBFX0RFU0siIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVSV9NT0RFX1RZUEVfTUFTSyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlVJX01PREVfVFlQRV9OT1JNQUwiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVSV9NT0RFX1RZUEVfVEVMRVZJU0lPTiIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJVSV9NT0RFX1RZUEVfVU5ERUZJTkVEIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iVUlfTU9ERV9UWVBFX1ZSX0hFQURTRVQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iVUlfTU9ERV9UWVBFX1dBVENIIiBzaW5jZT0iMjAiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbG9yTW9kZSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkZW5zaXR5RHBpIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9ImZvbnRTY2FsZSIvPgotCQk8ZmllbGQgbmFtZT0iaGFyZEtleWJvYXJkSGlkZGVuIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0ia2V5Ym9hcmQiLz4KLQkJPGZpZWxkIG5hbWU9ImtleWJvYXJkSGlkZGVuIi8+Ci0JCTxmaWVsZCBuYW1lPSJsb2NhbGUiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtY2MiLz4KLQkJPGZpZWxkIG5hbWU9Im1uYyIvPgotCQk8ZmllbGQgbmFtZT0ibmF2aWdhdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0ibmF2aWdhdGlvbkhpZGRlbiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9Im9yaWVudGF0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJzY3JlZW5IZWlnaHREcCIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzY3JlZW5MYXlvdXQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzY3JlZW5XaWR0aERwIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9InNtYWxsZXN0U2NyZWVuV2lkdGhEcCIgc2luY2U9IjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0b3VjaHNjcmVlbiIvPgotCQk8ZmllbGQgbmFtZT0idWlNb2RlIiBzaW5jZT0iOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9yZXMvT2JiSW5mbyIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iT0JCX09WRVJMQVkiLz4KLQkJPGZpZWxkIG5hbWU9ImZpbGVuYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJmbGFncyIvPgotCQk8ZmllbGQgbmFtZT0icGFja2FnZU5hbWUiLz4KLQkJPGZpZWxkIG5hbWU9InZlcnNpb24iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcmVzL09iYlNjYW5uZXIiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iYkluZm8oTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvcmVzL09iYkluZm87Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXI7TGFuZHJvaWQvdXRpbC9EaXNwbGF5TWV0cmljcztMYW5kcm9pZC9jb250ZW50L3Jlcy9Db25maWd1cmF0aW9uOylWIiBkZXByZWNhdGVkPSIyNSIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaFByZWxvYWRpbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaExheW91dENhY2hlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5pbWF0aW9uKEkpTGFuZHJvaWQvY29udGVudC9yZXMvWG1sUmVzb3VyY2VQYXJzZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXNzZXRzKClMYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9vbGVhbihJKVoiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sb3IoSSlJIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yKElMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMkVGhlbWU7KUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yU3RhdGVMaXN0KEkpTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yU3RhdGVMaXN0KElMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMkVGhlbWU7KUxhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uZmlndXJhdGlvbigpTGFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaW1lbnNpb24oSSlGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGltZW5zaW9uUGl4ZWxPZmZzZXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGltZW5zaW9uUGl4ZWxTaXplKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlNZXRyaWNzKClMYW5kcm9pZC91dGlsL0Rpc3BsYXlNZXRyaWNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyYXdhYmxlKEkpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBkZXByZWNhdGVkPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyYXdhYmxlKElMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMkVGhlbWU7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJhd2FibGVGb3JEZW5zaXR5KElJKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjE1IiBkZXByZWNhdGVkPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyYXdhYmxlRm9yRGVuc2l0eShJSUxhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcyRUaGVtZTspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb250KEkpTGFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2U7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcmFjdGlvbihJSUkpRiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZGVudGlmaWVyKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50QXJyYXkoSSlbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVnZXIoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5b3V0KEkpTGFuZHJvaWQvY29udGVudC9yZXMvWG1sUmVzb3VyY2VQYXJzZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW92aWUoSSlMYW5kcm9pZC9ncmFwaGljcy9Nb3ZpZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWFudGl0eVN0cmluZyhJSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWFudGl0eVN0cmluZyhJSVtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVhbnRpdHlUZXh0KElJKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc291cmNlRW50cnlOYW1lKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzb3VyY2VOYW1lKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzb3VyY2VQYWNrYWdlTmFtZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc291cmNlVHlwZU5hbWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmcoSVtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nQXJyYXkoSSlbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lzdGVtKClMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dChJKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHQoSUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0QXJyYXkoSSlbTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoSUxhbmRyb2lkL3V0aWwvVHlwZWRWYWx1ZTtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC91dGlsL1R5cGVkVmFsdWU7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWVGb3JEZW5zaXR5KElJTGFuZHJvaWQvdXRpbC9UeXBlZFZhbHVlO1opViIgc2luY2U9IjE1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WG1sKEkpTGFuZHJvaWQvY29udGVudC9yZXMvWG1sUmVzb3VyY2VQYXJzZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3VGhlbWUoKUxhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcyRUaGVtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW5BdHRyaWJ1dGVzKExhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O1tJKUxhbmRyb2lkL2NvbnRlbnQvcmVzL1R5cGVkQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluVHlwZWRBcnJheShJKUxhbmRyb2lkL2NvbnRlbnQvcmVzL1R5cGVkQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlblJhd1Jlc291cmNlKEkpTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlblJhd1Jlc291cmNlKElMYW5kcm9pZC91dGlsL1R5cGVkVmFsdWU7KUxqYXZhL2lvL0lucHV0U3RyZWFtOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuUmF3UmVzb3VyY2VGZChJKUxhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VCdW5kbGVFeHRyYShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VCdW5kbGVFeHRyYXMoTGFuZHJvaWQvY29udGVudC9yZXMvWG1sUmVzb3VyY2VQYXJzZXI7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUNvbmZpZ3VyYXRpb24oTGFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbjtMYW5kcm9pZC91dGlsL0Rpc3BsYXlNZXRyaWNzOylWIiBkZXByZWNhdGVkPSIyNSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzJE5vdEZvdW5kRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvRXhjZXB0aW9uOylWIiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcyRUaGVtZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5U3R5bGUoSVopViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXAoSUxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhbmdpbmdDb25maWd1cmF0aW9ucygpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJhd2FibGUoSSlMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc291cmNlcygpTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluU3R5bGVkQXR0cmlidXRlcyhJW0kpTGFuZHJvaWQvY29udGVudC9yZXMvVHlwZWRBcnJheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKExhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O1tJSUkpTGFuZHJvaWQvY29udGVudC9yZXMvVHlwZWRBcnJheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKFtJKUxhbmRyb2lkL2NvbnRlbnQvcmVzL1R5cGVkQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZUF0dHJpYnV0ZShJTGFuZHJvaWQvdXRpbC9UeXBlZFZhbHVlO1opWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRvKExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcyRUaGVtZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvY29udGVudC9yZXMvVHlwZWRBcnJheSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvb2xlYW4oSVopWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYW5naW5nQ29uZmlndXJhdGlvbnMoKUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2xvclN0YXRlTGlzdChJKUxhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpbWVuc2lvbihJRilGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGltZW5zaW9uUGl4ZWxPZmZzZXQoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpbWVuc2lvblBpeGVsU2l6ZShJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJhd2FibGUoSSlMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbG9hdChJRilGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9udChJKUxhbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJhY3Rpb24oSUlJRilGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXgoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXhDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludChJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZWdlcihJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5b3V0RGltZW5zaW9uKElJKUkiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5b3V0RGltZW5zaW9uKElMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5vblJlc291cmNlU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zaXRpb25EZXNjcmlwdGlvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzb3VyY2VJZChJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzb3VyY2VzKClMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dChJKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRBcnJheShJKVtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKEkpSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoSUxhbmRyb2lkL3V0aWwvVHlwZWRWYWx1ZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1ZhbHVlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1ZhbHVlT3JFbXB0eShJKVoiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9Imxlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InBlZWtWYWx1ZShJKUxhbmRyb2lkL3V0aWwvVHlwZWRWYWx1ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWN5Y2xlKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9jb250ZW50L3Jlcy9YbWxSZXNvdXJjZVBhcnNlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiIHNpbmNlPSIxOSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcveG1scHVsbC92MS9YbWxQdWxsUGFyc2VyIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL0Fic3RyYWN0Q3Vyc29yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9Dcm9zc1Byb2Nlc3NDdXJzb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1Bvc2l0aW9uKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Tm90aWZpY2F0aW9uVXJpKClMYW5kcm9pZC9uZXQvVXJpOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXBkYXRlZEZpZWxkKEkpTGphdmEvbGFuZy9PYmplY3Q7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmllbGRVcGRhdGVkKEkpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNoYW5nZShaKVYiLz4KLQkJPGZpZWxkIG5hbWU9Im1DbG9zZWQiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJtQ29udGVudFJlc29sdmVyIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0ibUN1cnJlbnRSb3dJRCIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJtUG9zIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0ibVJvd0lkQ29sdW1uSW5kZXgiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0ibVVwZGF0ZWRSb3dzIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL0Fic3RyYWN0Q3Vyc29yJFNlbGZDb250ZW50T2JzZXJ2ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9Db250ZW50T2JzZXJ2ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZGF0YWJhc2UvQWJzdHJhY3RDdXJzb3I7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL0Fic3RyYWN0V2luZG93ZWRDdXJzb3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9BYnN0cmFjdEN1cnNvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1dpbmRvdygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQmxvYihJKVoiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGbG9hdChJKVoiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG9uZyhJKVoiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3RyaW5nKEkpWiIgc2luY2U9IjUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2luZG93KExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcldpbmRvdzspViIvPgotCQk8ZmllbGQgbmFtZT0ibVdpbmRvdyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvQ2hhckFycmF5QnVmZmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtDKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImRhdGEiLz4KLQkJPGZpZWxkIG5hbWU9InNpemVDb3BpZWQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL0NvbnRlbnRPYnNlcnZhYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvT2JzZXJ2YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoQ2hhbmdlKFopViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaENoYW5nZShaTGFuZHJvaWQvbmV0L1VyaTspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5Q2hhbmdlKFopViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3Rlck9ic2VydmVyKExhbmRyb2lkL2RhdGFiYXNlL0NvbnRlbnRPYnNlcnZlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvQ29udGVudE9ic2VydmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGl2ZXJTZWxmTm90aWZpY2F0aW9ucygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoQ2hhbmdlKFopViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaENoYW5nZShaTGFuZHJvaWQvbmV0L1VyaTspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DaGFuZ2UoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DaGFuZ2UoWkxhbmRyb2lkL25ldC9Vcmk7KVYiIHNpbmNlPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvQ3Jvc3NQcm9jZXNzQ3Vyc29yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWxsV2luZG93KElMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3JXaW5kb3c7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaW5kb3coKUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcldpbmRvdzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1vdmUoSUkpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvQ3Jvc3NQcm9jZXNzQ3Vyc29yV3JhcHBlciIgc2luY2U9IjE1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3JXcmFwcGVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvQ3Jvc3NQcm9jZXNzQ3Vyc29yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weVN0cmluZ1RvQnVmZmVyKElMYW5kcm9pZC9kYXRhYmFzZS9DaGFyQXJyYXlCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWFjdGl2YXRlKClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJsb2IoSSlbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbHVtbkNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sdW1uSW5kZXgoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2x1bW5JbmRleE9yVGhyb3coTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2x1bW5OYW1lKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sdW1uTmFtZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERvdWJsZShJKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbG9hdChJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZyhJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb3RpZmljYXRpb25VcmkoKUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3NpdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3J0KEkpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmluZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoSSlJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXYW50c0FsbE9uTW92ZUNhbGxzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBZnRlckxhc3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JlZm9yZUZpcnN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDbG9zZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZpcnN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMYXN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOdWxsKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im1vdmUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZVRvRmlyc3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtb3ZlVG9MYXN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZVRvTmV4dCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im1vdmVUb1Bvc2l0aW9uKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im1vdmVUb1ByZXZpb3VzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoTGFuZHJvaWQvZGF0YWJhc2UvQ29udGVudE9ic2VydmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJEYXRhU2V0T2JzZXJ2ZXIoTGFuZHJvaWQvZGF0YWJhc2UvRGF0YVNldE9ic2VydmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVyeSgpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNwb25kKExhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dHJhcyhMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5vdGlmaWNhdGlvblVyaShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcihMYW5kcm9pZC9kYXRhYmFzZS9Db250ZW50T2JzZXJ2ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyRGF0YVNldE9ic2VydmVyKExhbmRyb2lkL2RhdGFiYXNlL0RhdGFTZXRPYnNlcnZlcjspViIvPgotCQk8ZmllbGQgbmFtZT0iRklFTERfVFlQRV9CTE9CIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkZJRUxEX1RZUEVfRkxPQVQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iRklFTERfVFlQRV9JTlRFR0VSIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkZJRUxEX1RZUEVfTlVMTCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUVMRF9UWVBFX1NUUklORyIgc2luY2U9IjExIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3JJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL0N1cnNvckpvaW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9JdGVyYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvSXRlcmF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO1tMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7W0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dCgpTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29ySm9pbmVyJFJlc3VsdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL0N1cnNvckpvaW5lciRSZXN1bHQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3JKb2luZXIkUmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2RhdGFiYXNlL0N1cnNvckpvaW5lciRSZXN1bHQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCT1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRUZUIi8+Ci0JCTxmaWVsZCBuYW1lPSJSSUdIVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yV2luZG93IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUNsb3NhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjE1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0opViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFopViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxvY1JvdygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiIHJlbW92ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29weVN0cmluZ1RvQnVmZmVyKElJTGFuZHJvaWQvZGF0YWJhc2UvQ2hhckFycmF5QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZnJlZUxhc3RSb3coKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCbG9iKElJKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG91YmxlKElJKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbG9hdChJSSlGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50KElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKElJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1Sb3dzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvcnQoSUkpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXJ0UG9zaXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmcoSUkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZShJSSlJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Jsb2IoSUkpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Zsb2F0KElJKVoiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG9uZyhJSSlaIiBzaW5jZT0iNSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc051bGwoSUkpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N0cmluZyhJSSlaIiBzaW5jZT0iNSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdGcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yV2luZG93OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEJsb2IoW0JJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RG91YmxlKERJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0TG9uZyhKSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InB1dE51bGwoSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFN0cmluZyhMamF2YS9sYW5nL1N0cmluZztJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TnVtQ29sdW1ucyhJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGFydFBvc2l0aW9uKEkpViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yV3JhcHBlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdyYXBwZWRDdXJzb3IoKUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiIHNpbmNlPSIxMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvRGF0YVNldE9ic2VydmFibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9PYnNlcnZhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5Q2hhbmdlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeUludmFsaWRhdGVkKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9EYXRhU2V0T2JzZXJ2ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2hhbmdlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSW52YWxpZGF0ZWQoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL0RhdGFiYXNlRXJyb3JIYW5kbGVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db3JydXB0aW9uKExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvRGF0YWJhc2VVdGlscyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kRXNjYXBlZFNRTFN0cmluZyhMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRTZWxlY3Rpb25BcmdzKFtMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZFZhbHVlVG9TcWwoTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyO0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZE9iamVjdFRvUHJvZ3JhbShMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlUHJvZ3JhbTtJTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJibG9iRmlsZURlc2NyaXB0b3JGb3JRdWVyeShMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2U7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImJsb2JGaWxlRGVzY3JpcHRvckZvclF1ZXJ5KExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVTdGF0ZW1lbnQ7W0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbmNhdGVuYXRlV2hlcmUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRGJGcm9tU3FsU3RhdGVtZW50cyhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3Vyc29yRG91YmxlVG9Db250ZW50VmFsdWVzKExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjdXJzb3JEb3VibGVUb0NvbnRlbnRWYWx1ZXNJZlByZXNlbnQoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlcztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJjdXJzb3JEb3VibGVUb0N1cnNvclZhbHVlcyhMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3Vyc29yRmxvYXRUb0NvbnRlbnRWYWx1ZXNJZlByZXNlbnQoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlcztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJjdXJzb3JJbnRUb0NvbnRlbnRWYWx1ZXMoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImN1cnNvckludFRvQ29udGVudFZhbHVlcyhMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3Vyc29ySW50VG9Db250ZW50VmFsdWVzSWZQcmVzZW50KExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3Vyc29yTG9uZ1RvQ29udGVudFZhbHVlcyhMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3Vyc29yTG9uZ1RvQ29udGVudFZhbHVlcyhMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3Vyc29yTG9uZ1RvQ29udGVudFZhbHVlc0lmUHJlc2VudChMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7TGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImN1cnNvclJvd1RvQ29udGVudFZhbHVlcyhMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7TGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3Vyc29yU2hvcnRUb0NvbnRlbnRWYWx1ZXNJZlByZXNlbnQoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlcztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJjdXJzb3JTdHJpbmdUb0NvbnRlbnRWYWx1ZXMoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImN1cnNvclN0cmluZ1RvQ29udGVudFZhbHVlcyhMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3Vyc29yU3RyaW5nVG9Db250ZW50VmFsdWVzSWZQcmVzZW50KExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3Vyc29yU3RyaW5nVG9JbnNlcnRIZWxwZXIoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2RhdGFiYXNlL0RhdGFiYXNlVXRpbHMkSW5zZXJ0SGVscGVyO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXBDdXJyZW50Um93KExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXBDdXJyZW50Um93KExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtMamF2YS9pby9QcmludFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXBDdXJyZW50Um93KExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wQ3VycmVudFJvd1RvU3RyaW5nKExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZHVtcEN1cnNvcihMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wQ3Vyc29yKExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtMamF2YS9pby9QcmludFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXBDdXJzb3IoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO0xqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXBDdXJzb3JUb1N0cmluZyhMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbGxhdGlvbktleShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGV4Q29sbGF0aW9uS2V5KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcWxTdGF0ZW1lbnRUeXBlKExqYXZhL2xhbmcvU3RyaW5nOylJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb25nRm9yUXVlcnkoTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZzspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvbmdGb3JRdWVyeShMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlU3RhdGVtZW50O1tMamF2YS9sYW5nL1N0cmluZzspSiIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5TnVtRW50cmllcyhMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2U7TGphdmEvbGFuZy9TdHJpbmc7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeU51bUVudHJpZXMoTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylKIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeU51bUVudHJpZXMoTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZzspSiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEV4Y2VwdGlvbkZyb21QYXJjZWwoTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEV4Y2VwdGlvbldpdGhGaWxlTm90Rm91bmRFeGNlcHRpb25Gcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRFeGNlcHRpb25XaXRoT3BlcmF0aW9uQXBwbGljYXRpb25FeGNlcHRpb25Gcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcWxFc2NhcGVTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InN0cmluZ0ZvclF1ZXJ5KExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTtMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InN0cmluZ0ZvclF1ZXJ5KExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVTdGF0ZW1lbnQ7W0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUV4Y2VwdGlvblRvUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDtMamF2YS9sYW5nL0V4Y2VwdGlvbjspViIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVNRU5UX0FCT1JUIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFTUVOVF9BVFRBQ0giIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVNRU5UX0JFR0lOIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFTUVOVF9DT01NSVQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVNRU5UX0RETCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURU1FTlRfT1RIRVIiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVNRU5UX1BSQUdNQSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURU1FTlRfU0VMRUNUIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFTUVOVF9VTlBSRVBBUkVEIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFTUVOVF9VUERBVEUiIHNpbmNlPSIxMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvRGF0YWJhc2VVdGlscyRJbnNlcnRIZWxwZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZChJRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZChJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZChJSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZChJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kKElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kKElbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZE51bGwoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdXRlKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sdW1uSW5kZXgoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnQoTGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzOylKIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJlcGFyZUZvckluc2VydCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InByZXBhcmVGb3JSZXBsYWNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7KUoiLz4KLQkJPGZpZWxkIG5hbWU9IlRBQkxFX0lORk9fUFJBR01BX0RFRkFVTFRfSU5ERVgiIHJlbW92ZWQ9IjE3Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9EZWZhdWx0RGF0YWJhc2VFcnJvckhhbmRsZXIiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9EYXRhYmFzZUVycm9ySGFuZGxlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvTWF0cml4Q3Vyc29yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvQWJzdHJhY3RDdXJzb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSb3coTGphdmEvbGFuZy9JdGVyYWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFJvdyhbTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdSb3coKUxhbmRyb2lkL2RhdGFiYXNlL01hdHJpeEN1cnNvciRSb3dCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvTWF0cml4Q3Vyc29yJFJvd0J1aWxkZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9kYXRhYmFzZS9NYXRyaXhDdXJzb3I7KVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2RhdGFiYXNlL01hdHJpeEN1cnNvcjtJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvZGF0YWJhc2UvTWF0cml4Q3Vyc29yJFJvd0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylMYW5kcm9pZC9kYXRhYmFzZS9NYXRyaXhDdXJzb3IkUm93QnVpbGRlcjsiIHNpbmNlPSIxOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvTWVyZ2VDdXJzb3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9BYnN0cmFjdEN1cnNvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9PYnNlcnZhYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3Rlck9ic2VydmVyKExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckFsbCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJPYnNlcnZlcihMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8ZmllbGQgbmFtZT0ibU9ic2VydmVycyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvU1FMRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL1N0YWxlRGF0YUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUFib3J0RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUFjY2Vzc1Blcm1FeGNlcHRpb24iIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUJpbmRPckNvbHVtbkluZGV4T3V0T2ZSYW5nZUV4Y2VwdGlvbiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlQmxvYlRvb0JpZ0V4Y2VwdGlvbiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlQ2FudE9wZW5EYXRhYmFzZUV4Y2VwdGlvbiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlQ2xvc2FibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL0Nsb3NlYWJsZSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWNxdWlyZVJlZmVyZW5jZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWxsUmVmZXJlbmNlc1JlbGVhc2VkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BbGxSZWZlcmVuY2VzUmVsZWFzZWRGcm9tQ29udGFpbmVyKClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2VSZWZlcmVuY2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlUmVmZXJlbmNlRnJvbUNvbnRhaW5lcigpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVDb25zdHJhaW50RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUN1cnNvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL0Fic3RyYWN0V2luZG93ZWRDdXJzb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUN1cnNvckRyaXZlcjtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlUXVlcnk7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2U7TGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUN1cnNvckRyaXZlcjtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlUXVlcnk7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YWJhc2UoKUxhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaWxsV2luZG93Rm9yd2FyZE9ubHkoWilWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWxlY3Rpb25Bcmd1bWVudHMoW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlQ3Vyc29yRHJpdmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJjdXJzb3JDbG9zZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjdXJzb3JEZWFjdGl2YXRlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImN1cnNvclJlcXVlcmllZChMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeShMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2UkQ3Vyc29yRmFjdG9yeTtbTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCaW5kQXJndW1lbnRzKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUNsb3NhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJEN1cnNvckZhY3Rvcnk7TGFuZHJvaWQvZGF0YWJhc2UvRGF0YWJhc2VFcnJvckhhbmRsZXI7SUlKTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImJlZ2luVHJhbnNhY3Rpb24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiZWdpblRyYW5zYWN0aW9uTm9uRXhjbHVzaXZlKClWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJiZWdpblRyYW5zYWN0aW9uV2l0aExpc3RlbmVyKExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVUcmFuc2FjdGlvbkxpc3RlbmVyOylWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImJlZ2luVHJhbnNhY3Rpb25XaXRoTGlzdGVuZXJOb25FeGNsdXNpdmUoTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZVRyYW5zYWN0aW9uTGlzdGVuZXI7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlKClWIiByZW1vdmVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBpbGVTdGF0ZW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVTdGF0ZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZSRDdXJzb3JGYWN0b3J5OylMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSW5NZW1vcnkoTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJE9wZW5QYXJhbXM7KUxhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTsiIHNpbmNlPSIyNyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVEYXRhYmFzZShMamF2YS9pby9GaWxlOylaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNhYmxlV3JpdGVBaGVhZExvZ2dpbmcoKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuYWJsZVdyaXRlQWhlYWRMb2dnaW5nKClaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRUcmFuc2FjdGlvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWNTUUwoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjU1FMKExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRFZGl0VGFibGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dGFjaGVkRGJzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhpbXVtU2l6ZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhZ2VTaXplKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGF0aCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3luY2VkVGFibGVzKClMamF2YS91dGlsL01hcDsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVyc2lvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImluVHJhbnNhY3Rpb24oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzOylKIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0T3JUaHJvdyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnRXaXRoT25Db25mbGljdChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7SSlKIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGF0YWJhc2VJbnRlZ3JpdHlPaygpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEYkxvY2tlZEJ5Q3VycmVudFRocmVhZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGJMb2NrZWRCeU90aGVyVGhyZWFkcygpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc09wZW4oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlYWRPbmx5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXcml0ZUFoZWFkTG9nZ2luZ0VuYWJsZWQoKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcmtUYWJsZVN5bmNhYmxlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcmtUYWJsZVN5bmNhYmxlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im5lZWRVcGdyYWRlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5EYXRhYmFzZShMamF2YS9pby9GaWxlO0xhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZSRPcGVuUGFyYW1zOylMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2U7IiBzaW5jZT0iMjciLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuRGF0YWJhc2UoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJEN1cnNvckZhY3Rvcnk7SSlMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkRhdGFiYXNlKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZSRDdXJzb3JGYWN0b3J5O0lMYW5kcm9pZC9kYXRhYmFzZS9EYXRhYmFzZUVycm9ySGFuZGxlcjspTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3Blbk9yQ3JlYXRlRGF0YWJhc2UoTGphdmEvaW8vRmlsZTtMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2UkQ3Vyc29yRmFjdG9yeTspTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5PckNyZWF0ZURhdGFiYXNlKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZSRDdXJzb3JGYWN0b3J5OylMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3Blbk9yQ3JlYXRlRGF0YWJhc2UoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJEN1cnNvckZhY3Rvcnk7TGFuZHJvaWQvZGF0YWJhc2UvRGF0YWJhc2VFcnJvckhhbmRsZXI7KUxhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5KExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeShMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnkoWkxqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeShaTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWw7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5V2l0aEZhY3RvcnkoTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJEN1cnNvckZhY3Rvcnk7WkxqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeVdpdGhGYWN0b3J5KExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZSRDdXJzb3JGYWN0b3J5O1pMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0NhbmNlbGxhdGlvblNpZ25hbDspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmF3UXVlcnkoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmF3UXVlcnkoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0NhbmNlbGxhdGlvblNpZ25hbDspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmF3UXVlcnlXaXRoRmFjdG9yeShMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2UkQ3Vyc29yRmFjdG9yeTtMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyYXdRdWVyeVdpdGhGYWN0b3J5KExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZSRDdXJzb3JGYWN0b3J5O0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWw7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2VNZW1vcnkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBsYWNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlczspSiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2VPclRocm93KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlczspSiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvcmVpZ25LZXlDb25zdHJhaW50c0VuYWJsZWQoWilWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2NhbGUoTGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2NraW5nRW5hYmxlZChaKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4U3FsQ2FjaGVTaXplKEkpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4aW11bVNpemUoSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFnZVNpemUoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhbnNhY3Rpb25TdWNjZXNzZnVsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmVyc2lvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZVdpdGhPbkNvbmZsaWN0KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlcztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7SSlJIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InZhbGlkYXRlU3FsKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0NhbmNlbGxhdGlvblNpZ25hbDspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ieWllbGRJZkNvbnRlbmRlZCgpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ5aWVsZElmQ29udGVuZGVkU2FmZWx5KClaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InlpZWxkSWZDb250ZW5kZWRTYWZlbHkoSilaIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORkxJQ1RfQUJPUlQiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05GTElDVF9GQUlMIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORkxJQ1RfSUdOT1JFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORkxJQ1RfTk9ORSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkZMSUNUX1JFUExBQ0UiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05GTElDVF9ST0xMQkFDSyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFURV9JRl9ORUNFU1NBUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQUJMRV9XUklURV9BSEVBRF9MT0dHSU5HIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9TUUxfQ0FDSEVfU0laRSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19MT0NBTElaRURfQ09MTEFUT1JTIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVOX1JFQURPTkxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVOX1JFQURXUklURSIvPgotCQk8ZmllbGQgbmFtZT0iU1FMSVRFX01BWF9MSUtFX1BBVFRFUk5fTEVOR1RIIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2UkQ3Vyc29yRmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3Q3Vyc29yKExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTtMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlQ3Vyc29yRHJpdmVyO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVRdWVyeTspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJE9wZW5QYXJhbXMiIHNpbmNlPSIyNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2UkQ3Vyc29yRmFjdG9yeTtMYW5kcm9pZC9kYXRhYmFzZS9EYXRhYmFzZUVycm9ySGFuZGxlcjtJSUpMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3Vyc29yRmFjdG9yeSgpTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJEN1cnNvckZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXJyb3JIYW5kbGVyKClMYW5kcm9pZC9kYXRhYmFzZS9EYXRhYmFzZUVycm9ySGFuZGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZGxlQ29ubmVjdGlvblRpbWVvdXQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRKb3VybmFsTW9kZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb29rYXNpZGVTbG90Q291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb29rYXNpZGVTbG90U2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9wZW5GbGFncygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5bmNocm9ub3VzTW9kZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZSRPcGVuUGFyYW1zJEJ1aWxkZXIiIHNpbmNlPSIyNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJE9wZW5QYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRPcGVuRmxhZ3MoSSlMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2UkT3BlblBhcmFtcyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2UkT3BlblBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVPcGVuRmxhZ3MoSSlMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2UkT3BlblBhcmFtcyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1cnNvckZhY3RvcnkoTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJEN1cnNvckZhY3Rvcnk7KUxhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZSRPcGVuUGFyYW1zJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXJyb3JIYW5kbGVyKExhbmRyb2lkL2RhdGFiYXNlL0RhdGFiYXNlRXJyb3JIYW5kbGVyOylMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2UkT3BlblBhcmFtcyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldElkbGVDb25uZWN0aW9uVGltZW91dChKKUxhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZSRPcGVuUGFyYW1zJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Sm91cm5hbE1vZGUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZSRPcGVuUGFyYW1zJEJ1aWxkZXI7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb29rYXNpZGVDb25maWcoSUkpTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJE9wZW5QYXJhbXMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcGVuRmxhZ3MoSSlMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2UkT3BlblBhcmFtcyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN5bmNocm9ub3VzTW9kZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJE9wZW5QYXJhbXMkQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlQ29ycnVwdEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZUxvY2tlZEV4Y2VwdGlvbiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YXR5cGVNaXNtYXRjaEV4Y2VwdGlvbiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGlza0lPRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURvbmVFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvU1FMRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVGdWxsRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZU1pc3VzZUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVPcGVuSGVscGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nO0lMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2UkT3BlblBhcmFtczspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2UkQ3Vyc29yRmFjdG9yeTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZSRDdXJzb3JGYWN0b3J5O0lMYW5kcm9pZC9kYXRhYmFzZS9EYXRhYmFzZUVycm9ySGFuZGxlcjspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhYmFzZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhZGFibGVEYXRhYmFzZSgpTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdyaXRhYmxlRGF0YWJhc2UoKUxhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbmZpZ3VyZShMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2U7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlKExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRG93bmdyYWRlKExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTtJSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk9wZW4oTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25VcGdyYWRlKExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWRsZUNvbm5lY3Rpb25UaW1lb3V0KEopViIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9va2FzaWRlQ29uZmlnKElJKVYiIHNpbmNlPSIyNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9wZW5QYXJhbXMoTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlJE9wZW5QYXJhbXM7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdyaXRlQWhlYWRMb2dnaW5nRW5hYmxlZChaKVYiIHNpbmNlPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZU91dE9mTWVtb3J5RXhjZXB0aW9uIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVQcm9ncmFtIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUNsb3NhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2U7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvT2JqZWN0O0xhbmRyb2lkL29zL0NhbmNlbGxhdGlvblNpZ25hbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZEFsbEFyZ3NBc1N0cmluZ3MoW0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kQmxvYihJW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmREb3VibGUoSUQpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmRMb25nKElKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kTnVsbChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kU3RyaW5nKElMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQmluZGluZ3MoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIgcmVtb3ZlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21waWxlKExqYXZhL2xhbmcvU3RyaW5nO1opViIgcmVtb3ZlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVbmlxdWVJZCgpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuYXRpdmVfYmluZF9ibG9iKElbQilWIiByZW1vdmVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im5hdGl2ZV9iaW5kX2RvdWJsZShJRClWIiByZW1vdmVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im5hdGl2ZV9iaW5kX2xvbmcoSUopViIgcmVtb3ZlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuYXRpdmVfYmluZF9udWxsKEkpViIgcmVtb3ZlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuYXRpdmVfYmluZF9zdHJpbmcoSUxqYXZhL2xhbmcvU3RyaW5nOylWIiByZW1vdmVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im5hdGl2ZV9jb21waWxlKExqYXZhL2xhbmcvU3RyaW5nOylWIiByZW1vdmVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im5hdGl2ZV9maW5hbGl6ZSgpViIgcmVtb3ZlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Im1EYXRhYmFzZSIgcmVtb3ZlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Im5IYW5kbGUiIHJlbW92ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJuU3RhdGVtZW50IiByZW1vdmVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZVF1ZXJ5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZVByb2dyYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWw7KVYiIHNpbmNlPSIyOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZVF1ZXJ5QnVpbGRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kQ29sdW1ucyhMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7W0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kV2hlcmUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRXaGVyZUVzY2FwZVN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkUXVlcnkoW0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkUXVlcnkoW0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkUXVlcnlTdHJpbmcoWkxqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGRVbmlvblF1ZXJ5KFtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGRVbmlvblN1YlF1ZXJ5KExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL1NldDtJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGRVbmlvblN1YlF1ZXJ5KExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL1NldDtJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFibGVzKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeShMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2U7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5KExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZTtbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnkoTGFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXJzb3JGYWN0b3J5KExhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVEYXRhYmFzZSRDdXJzb3JGYWN0b3J5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlzdGluY3QoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvamVjdGlvbk1hcChMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cmljdChaKVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRhYmxlcyhMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZVJlYWRPbmx5RGF0YWJhc2VFeGNlcHRpb24iIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZVN0YXRlbWVudCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVQcm9ncmFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2U7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdXRlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZUluc2VydCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWN1dGVVcGRhdGVEZWxldGUoKUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNpbXBsZVF1ZXJ5Rm9yQmxvYkZpbGVEZXNjcmlwdG9yKClMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNpbXBsZVF1ZXJ5Rm9yTG9uZygpSiIvPgotCQk8bWV0aG9kIG5hbWU9InNpbXBsZVF1ZXJ5Rm9yU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVUYWJsZUxvY2tlZEV4Y2VwdGlvbiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlVHJhbnNhY3Rpb25MaXN0ZW5lciIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25CZWdpbigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29tbWl0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Sb2xsYmFjaygpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZHJtL0RybUNvbnZlcnRlZFN0YXR1cyIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJW0JJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0lOUFVUREFUQV9FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX09LIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb252ZXJ0ZWREYXRhIi8+Ci0JCTxmaWVsZCBuYW1lPSJvZmZzZXQiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXR1c0NvZGUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RybS9Ecm1FcnJvckV2ZW50IiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2RybS9Ecm1FdmVudCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9IYXNoTWFwOylWIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQUNRVUlSRV9EUk1fSU5GT19GQUlMRUQiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9OT1RfU1VQUE9SVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX05PX0lOVEVSTkVUX0NPTk5FQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfT1VUX09GX01FTU9SWSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9QUk9DRVNTX0RSTV9JTkZPX0ZBSUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9SRU1PVkVfQUxMX1JJR0hUU19GQUlMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUklHSFRTX05PVF9JTlNUQUxMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUklHSFRTX1JFTkVXQUxfTk9UX0FMTE9XRUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RybS9Ecm1FdmVudCIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9IYXNoTWFwOylWIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVzc2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVuaXF1ZUlkKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJEUk1fSU5GT19PQkpFQ1QiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iRFJNX0lORk9fU1RBVFVTX09CSkVDVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BTExfUklHSFRTX1JFTU9WRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRFJNX0lORk9fUFJPQ0VTU0VEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kcm0vRHJtSW5mbyIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSVtCTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGEoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5mb1R5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW1lVHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXRlcmF0b3IoKUxqYXZhL3V0aWwvSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5SXRlcmF0b3IoKUxqYXZhL3V0aWwvSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kcm0vRHJtSW5mb0V2ZW50IiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2RybS9Ecm1FdmVudCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9IYXNoTWFwOylWIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQUNDT1VOVF9BTFJFQURZX1JFR0lTVEVSRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQUxSRUFEWV9SRUdJU1RFUkVEX0JZX0FOT1RIRVJfQUNDT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9SRU1PVkVfUklHSFRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1JJR0hUU19JTlNUQUxMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUklHSFRTX1JFTU9WRUQiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9XQUlUX0ZPUl9SSUdIVFMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RybS9Ecm1JbmZvUmVxdWVzdCIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZm9UeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWltZVR5cGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Iml0ZXJhdG9yKClMamF2YS91dGlsL0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImtleUl0ZXJhdG9yKClMamF2YS91dGlsL0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8ZmllbGQgbmFtZT0iQUNDT1VOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iU1VCU0NSSVBUSU9OX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1JFR0lTVFJBVElPTl9JTkZPIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1JJR0hUU19BQ1FVSVNJVElPTl9JTkZPIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1JJR0hUU19BQ1FVSVNJVElPTl9QUk9HUkVTU19JTkZPIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1VOUkVHSVNUUkFUSU9OX0lORk8iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RybS9Ecm1JbmZvU3RhdHVzIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJTGFuZHJvaWQvZHJtL1Byb2Nlc3NlZERhdGE7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX09LIi8+Ci0JCTxmaWVsZCBuYW1lPSJkYXRhIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbmZvVHlwZSIvPgotCQk8ZmllbGQgbmFtZT0ibWltZVR5cGUiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXR1c0NvZGUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RybS9Ecm1NYW5hZ2VyQ2xpZW50IiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BdXRvQ2xvc2VhYmxlIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWNxdWlyZURybUluZm8oTGFuZHJvaWQvZHJtL0RybUluZm9SZXF1ZXN0OylMYW5kcm9pZC9kcm0vRHJtSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3F1aXJlUmlnaHRzKExhbmRyb2lkL2RybS9Ecm1JbmZvUmVxdWVzdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbkhhbmRsZShMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuSGFuZGxlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tSaWdodHNTdGF0dXMoTGFuZHJvaWQvbmV0L1VyaTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrUmlnaHRzU3RhdHVzKExhbmRyb2lkL25ldC9Vcmk7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tSaWdodHNTdGF0dXMoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1JpZ2h0c1N0YXR1cyhMamF2YS9sYW5nL1N0cmluZztJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZUNvbnZlcnRTZXNzaW9uKEkpTGFuZHJvaWQvZHJtL0RybUNvbnZlcnRlZFN0YXR1czsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb252ZXJ0RGF0YShJW0IpTGFuZHJvaWQvZHJtL0RybUNvbnZlcnRlZFN0YXR1czsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVEcm1FbmdpbmVzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uc3RyYWludHMoTGFuZHJvaWQvbmV0L1VyaTtJKUxhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25zdHJhaW50cyhMamF2YS9sYW5nL1N0cmluZztJKUxhbmRyb2lkL2NvbnRlbnQvQ29udGVudFZhbHVlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcm1PYmplY3RUeXBlKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcm1PYmplY3RUeXBlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0YWRhdGEoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvY29udGVudC9Db250ZW50VmFsdWVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldGFkYXRhKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3JpZ2luYWxNaW1lVHlwZShMYW5kcm9pZC9uZXQvVXJpOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmlnaW5hbE1pbWVUeXBlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuQ29udmVydFNlc3Npb24oTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm9jZXNzRHJtSW5mbyhMYW5kcm9pZC9kcm0vRHJtSW5mbzspSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVYiIHNpbmNlPSIxNiIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBbGxSaWdodHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVSaWdodHMoTGFuZHJvaWQvbmV0L1VyaTspSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVJpZ2h0cyhMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9InNhdmVSaWdodHMoTGFuZHJvaWQvZHJtL0RybVJpZ2h0cztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uRXJyb3JMaXN0ZW5lcihMYW5kcm9pZC9kcm0vRHJtTWFuYWdlckNsaWVudCRPbkVycm9yTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkV2ZW50TGlzdGVuZXIoTGFuZHJvaWQvZHJtL0RybU1hbmFnZXJDbGllbnQkT25FdmVudExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25JbmZvTGlzdGVuZXIoTGFuZHJvaWQvZHJtL0RybU1hbmFnZXJDbGllbnQkT25JbmZvTGlzdGVuZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1VOS05PV04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RybS9Ecm1NYW5hZ2VyQ2xpZW50JE9uRXJyb3JMaXN0ZW5lciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXJyb3IoTGFuZHJvaWQvZHJtL0RybU1hbmFnZXJDbGllbnQ7TGFuZHJvaWQvZHJtL0RybUVycm9yRXZlbnQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RybS9Ecm1NYW5hZ2VyQ2xpZW50JE9uRXZlbnRMaXN0ZW5lciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXZlbnQoTGFuZHJvaWQvZHJtL0RybU1hbmFnZXJDbGllbnQ7TGFuZHJvaWQvZHJtL0RybUV2ZW50OylWIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkV2ZW50KExhbmRyb2lkL2RybS9Ecm1NYW5hZ2VyQ2xpZW50O0xhbmRyb2lkL2RybS9Ecm1FdmVudDtMamF2YS91dGlsL0hhc2hNYXA7KVYiIHJlbW92ZWQ9IjEyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kcm0vRHJtTWFuYWdlckNsaWVudCRPbkluZm9MaXN0ZW5lciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSW5mbyhMYW5kcm9pZC9kcm0vRHJtTWFuYWdlckNsaWVudDtMYW5kcm9pZC9kcm0vRHJtSW5mb0V2ZW50OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kcm0vRHJtUmlnaHRzIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2RybS9Qcm9jZXNzZWREYXRhO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0ZpbGU7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY2NvdW50SWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGEoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWltZVR5cGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YnNjcmlwdGlvbklkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RybS9Ecm1TdG9yZSIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RybS9Ecm1TdG9yZSRBY3Rpb24iIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNQTEFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWEVDVVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPVVRQVVQiLz4KLQkJPGZpZWxkIG5hbWU9IlBMQVkiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVZJRVciLz4KLQkJPGZpZWxkIG5hbWU9IlJJTkdUT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFOU0ZFUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZHJtL0RybVN0b3JlJENvbnN0cmFpbnRzQ29sdW1ucyIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iRVhURU5ERURfTUVUQURBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IkxJQ0VOU0VfQVZBSUxBQkxFX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkxJQ0VOU0VfRVhQSVJZX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkxJQ0VOU0VfU1RBUlRfVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1JFUEVBVF9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iUkVNQUlOSU5HX1JFUEVBVF9DT1VOVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZHJtL0RybVN0b3JlJERybU9iamVjdFR5cGUiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJSSUdIVFNfT0JKRUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUklHR0VSX09CSkVDVCIvPgotCQk8ZmllbGQgbmFtZT0iVU5LTk9XTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZHJtL0RybVN0b3JlJFBsYXliYWNrIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUEFVU0UiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VNRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBUlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUT1AiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2RybS9Ecm1TdG9yZSRSaWdodHNTdGF0dXMiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSSUdIVFNfRVhQSVJFRCIvPgotCQk8ZmllbGQgbmFtZT0iUklHSFRTX0lOVkFMSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlJJR0hUU19OT1RfQUNRVUlSRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlJJR0hUU19WQUxJRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZHJtL0RybVN1cHBvcnRJbmZvIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRmlsZVN1ZmZpeChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE1pbWVUeXBlKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzY3JpcHJpdGlvbigpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlc2NyaXB0aW9uKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGVTdWZmaXhJdGVyYXRvcigpTGphdmEvdXRpbC9JdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW1lVHlwZUl0ZXJhdG9yKClMamF2YS91dGlsL0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlc2NyaXB0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kcm0vRHJtVXRpbHMiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRlbmRlZE1ldGFkYXRhUGFyc2VyKFtCKUxhbmRyb2lkL2RybS9Ecm1VdGlscyRFeHRlbmRlZE1ldGFkYXRhUGFyc2VyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZHJtL0RybVV0aWxzJEV4dGVuZGVkTWV0YWRhdGFQYXJzZXIiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXRlcmF0b3IoKUxqYXZhL3V0aWwvSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5SXRlcmF0b3IoKUxqYXZhL3V0aWwvSXRlcmF0b3I7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9kcm0vUHJvY2Vzc2VkRGF0YSIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0JMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNjb3VudElkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YnNjcmlwdGlvbklkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZSIgc2luY2U9IjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFN0cm9rZShMYW5kcm9pZC9nZXN0dXJlL0dlc3R1cmVTdHJva2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb3VuZGluZ0JveCgpTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdEY7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SUQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZW5ndGgoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJva2VzKClMamF2YS91dGlsL0FycmF5TGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJva2VzQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0JpdG1hcChJSUlJKUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0JpdG1hcChJSUlJSSlMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9QYXRoKClMYW5kcm9pZC9ncmFwaGljcy9QYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvUGF0aChJSUlJKUxhbmRyb2lkL2dyYXBoaWNzL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9QYXRoKExhbmRyb2lkL2dyYXBoaWNzL1BhdGg7KUxhbmRyb2lkL2dyYXBoaWNzL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9QYXRoKExhbmRyb2lkL2dyYXBoaWNzL1BhdGg7SUlJSSlMYW5kcm9pZC9ncmFwaGljcy9QYXRoOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ2VzdHVyZS9HZXN0dXJlTGlicmFyaWVzIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tRmlsZShMamF2YS9pby9GaWxlOylMYW5kcm9pZC9nZXN0dXJlL0dlc3R1cmVMaWJyYXJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb21GaWxlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9nZXN0dXJlL0dlc3R1cmVMaWJyYXJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb21Qcml2YXRlRmlsZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZUxpYnJhcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbVJhd1Jlc291cmNlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKUxhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZUxpYnJhcnk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9nZXN0dXJlL0dlc3R1cmVMaWJyYXJ5IiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRHZXN0dXJlKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdlc3R1cmVFbnRyaWVzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHZXN0dXJlcyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9BcnJheUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3JpZW50YXRpb25TdHlsZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcXVlbmNlVHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVhZE9ubHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVjb2duaXplKExhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZTspTGphdmEvdXRpbC9BcnJheUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlRW50cnkoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVHZXN0dXJlKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNhdmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcmllbnRhdGlvblN0eWxlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlcXVlbmNlVHlwZShJKVYiLz4KLQkJPGZpZWxkIG5hbWU9Im1TdG9yZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ2VzdHVyZS9HZXN0dXJlT3ZlcmxheVZpZXciIHNpbmNlPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvRnJhbWVMYXlvdXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRPbkdlc3R1cmVMaXN0ZW5lcihMYW5kcm9pZC9nZXN0dXJlL0dlc3R1cmVPdmVybGF5VmlldyRPbkdlc3R1cmVMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE9uR2VzdHVyZVBlcmZvcm1lZExpc3RlbmVyKExhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZU92ZXJsYXlWaWV3JE9uR2VzdHVyZVBlcmZvcm1lZExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkT25HZXN0dXJpbmdMaXN0ZW5lcihMYW5kcm9pZC9nZXN0dXJlL0dlc3R1cmVPdmVybGF5VmlldyRPbkdlc3R1cmluZ0xpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsQ2xlYXJBbmltYXRpb24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWxHZXN0dXJlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudFN0cm9rZSgpTGphdmEvdXRpbC9BcnJheUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmFkZU9mZnNldCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdlc3R1cmUoKUxhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHZXN0dXJlQ29sb3IoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHZXN0dXJlUGF0aCgpTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHZXN0dXJlUGF0aChMYW5kcm9pZC9ncmFwaGljcy9QYXRoOylMYW5kcm9pZC9ncmFwaGljcy9QYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdlc3R1cmVTdHJva2VBbmdsZVRocmVzaG9sZCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdlc3R1cmVTdHJva2VMZW5ndGhUaHJlc2hvbGQoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHZXN0dXJlU3Ryb2tlU3F1YXJlbmVzc1RyZXNob2xkKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2VzdHVyZVN0cm9rZVR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHZXN0dXJlU3Ryb2tlV2lkdGgoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmllbnRhdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVuY2VydGFpbkdlc3R1cmVDb2xvcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRXZlbnRzSW50ZXJjZXB0aW9uRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmFkZUVuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0dlc3R1cmVWaXNpYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNHZXN0dXJpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBbGxPbkdlc3R1cmVMaXN0ZW5lcnMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBbGxPbkdlc3R1cmVQZXJmb3JtZWRMaXN0ZW5lcnMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBbGxPbkdlc3R1cmluZ0xpc3RlbmVycygpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU9uR2VzdHVyZUxpc3RlbmVyKExhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZU92ZXJsYXlWaWV3JE9uR2VzdHVyZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlT25HZXN0dXJlUGVyZm9ybWVkTGlzdGVuZXIoTGFuZHJvaWQvZ2VzdHVyZS9HZXN0dXJlT3ZlcmxheVZpZXckT25HZXN0dXJlUGVyZm9ybWVkTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVPbkdlc3R1cmluZ0xpc3RlbmVyKExhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZU92ZXJsYXlWaWV3JE9uR2VzdHVyaW5nTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFdmVudHNJbnRlcmNlcHRpb25FbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZhZGVFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZhZGVPZmZzZXQoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R2VzdHVyZShMYW5kcm9pZC9nZXN0dXJlL0dlc3R1cmU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHZXN0dXJlQ29sb3IoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R2VzdHVyZVN0cm9rZUFuZ2xlVGhyZXNob2xkKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdlc3R1cmVTdHJva2VMZW5ndGhUaHJlc2hvbGQoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R2VzdHVyZVN0cm9rZVNxdWFyZW5lc3NUcmVzaG9sZChGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHZXN0dXJlU3Ryb2tlVHlwZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHZXN0dXJlU3Ryb2tlV2lkdGgoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R2VzdHVyZVZpc2libGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3JpZW50YXRpb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VW5jZXJ0YWluR2VzdHVyZUNvbG9yKEkpViIvPgotCQk8ZmllbGQgbmFtZT0iR0VTVFVSRV9TVFJPS0VfVFlQRV9NVUxUSVBMRSIvPgotCQk8ZmllbGQgbmFtZT0iR0VTVFVSRV9TVFJPS0VfVFlQRV9TSU5HTEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9SSUVOVEFUSU9OX0hPUklaT05UQUwiLz4KLQkJPGZpZWxkIG5hbWU9Ik9SSUVOVEFUSU9OX1ZFUlRJQ0FMIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9nZXN0dXJlL0dlc3R1cmVPdmVybGF5VmlldyRPbkdlc3R1cmVMaXN0ZW5lciIgc2luY2U9IjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZXN0dXJlKExhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZU92ZXJsYXlWaWV3O0xhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdlc3R1cmVDYW5jZWxsZWQoTGFuZHJvaWQvZ2VzdHVyZS9HZXN0dXJlT3ZlcmxheVZpZXc7TGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2VzdHVyZUVuZGVkKExhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZU92ZXJsYXlWaWV3O0xhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdlc3R1cmVTdGFydGVkKExhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZU92ZXJsYXlWaWV3O0xhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZU92ZXJsYXlWaWV3JE9uR2VzdHVyZVBlcmZvcm1lZExpc3RlbmVyIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdlc3R1cmVQZXJmb3JtZWQoTGFuZHJvaWQvZ2VzdHVyZS9HZXN0dXJlT3ZlcmxheVZpZXc7TGFuZHJvaWQvZ2VzdHVyZS9HZXN0dXJlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9nZXN0dXJlL0dlc3R1cmVPdmVybGF5VmlldyRPbkdlc3R1cmluZ0xpc3RlbmVyIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdlc3R1cmluZ0VuZGVkKExhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZU92ZXJsYXlWaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZXN0dXJpbmdTdGFydGVkKExhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZU92ZXJsYXlWaWV3OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9nZXN0dXJlL0dlc3R1cmVQb2ludCIgc2luY2U9IjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZGSilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aW1lc3RhbXAiLz4KLQkJPGZpZWxkIG5hbWU9IngiLz4KLQkJPGZpZWxkIG5hbWU9InkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZVN0b3JlIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRHZXN0dXJlKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdlc3R1cmVFbnRyaWVzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHZXN0dXJlcyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9BcnJheUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3JpZW50YXRpb25TdHlsZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcXVlbmNlVHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0NoYW5nZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkKExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZChMamF2YS9pby9JbnB1dFN0cmVhbTtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWNvZ25pemUoTGFuZHJvaWQvZ2VzdHVyZS9HZXN0dXJlOylMamF2YS91dGlsL0FycmF5TGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVFbnRyeShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUdlc3R1cmUoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvZ2VzdHVyZS9HZXN0dXJlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2F2ZShMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzYXZlKExqYXZhL2lvL091dHB1dFN0cmVhbTtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcmllbnRhdGlvblN0eWxlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlcXVlbmNlVHlwZShJKVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9SSUVOVEFUSU9OX0lOVkFSSUFOVCIvPgotCQk8ZmllbGQgbmFtZT0iT1JJRU5UQVRJT05fU0VOU0lUSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVFVRU5DRV9JTlZBUklBTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUVVFTkNFX1NFTlNJVElWRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ2VzdHVyZS9HZXN0dXJlU3Ryb2tlIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9BcnJheUxpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhclBhdGgoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlT3JpZW50ZWRCb3VuZGluZ0JveCgpTGFuZHJvaWQvZ2VzdHVyZS9PcmllbnRlZEJvdW5kaW5nQm94OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhdGgoKUxhbmRyb2lkL2dyYXBoaWNzL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9QYXRoKEZGSSlMYW5kcm9pZC9ncmFwaGljcy9QYXRoOyIvPgotCQk8ZmllbGQgbmFtZT0iYm91bmRpbmdCb3giLz4KLQkJPGZpZWxkIG5hbWU9Imxlbmd0aCIvPgotCQk8ZmllbGQgbmFtZT0icG9pbnRzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9nZXN0dXJlL0dlc3R1cmVVdGlscyIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcHV0ZU9yaWVudGVkQm91bmRpbmdCb3goTGphdmEvdXRpbC9BcnJheUxpc3Q7KUxhbmRyb2lkL2dlc3R1cmUvT3JpZW50ZWRCb3VuZGluZ0JveDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlT3JpZW50ZWRCb3VuZGluZ0JveChbRilMYW5kcm9pZC9nZXN0dXJlL09yaWVudGVkQm91bmRpbmdCb3g7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BhdGlhbFNhbXBsaW5nKExhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZTtJKVtGIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3BhdGlhbFNhbXBsaW5nKExhbmRyb2lkL2dlc3R1cmUvR2VzdHVyZTtJWilbRiIvPgotCQk8bWV0aG9kIG5hbWU9InRlbXBvcmFsU2FtcGxpbmcoTGFuZHJvaWQvZ2VzdHVyZS9HZXN0dXJlU3Ryb2tlO0kpW0YiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dlc3R1cmUvT3JpZW50ZWRCb3VuZGluZ0JveCIgc2luY2U9IjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGRkZGRilWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9ImNlbnRlclgiLz4KLQkJPGZpZWxkIG5hbWU9ImNlbnRlclkiLz4KLQkJPGZpZWxkIG5hbWU9ImhlaWdodCIvPgotCQk8ZmllbGQgbmFtZT0ib3JpZW50YXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9InNxdWFyZW5lc3MiLz4KLQkJPGZpZWxkIG5hbWU9IndpZHRoIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9nZXN0dXJlL1ByZWRpY3Rpb24iIHNpbmNlPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7RClWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9Im5hbWUiLz4KLQkJPGZpZWxkIG5hbWU9InNjb3JlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9Bdm9pZFhmZXJtb2RlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9YZmVybW9kZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUxhbmRyb2lkL2dyYXBoaWNzL0F2b2lkWGZlcm1vZGUkTW9kZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQXZvaWRYZmVybW9kZSRNb2RlIiBzaW5jZT0iMSIgcmVtb3ZlZD0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL0F2b2lkWGZlcm1vZGUkTW9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9ncmFwaGljcy9Bdm9pZFhmZXJtb2RlJE1vZGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVk9JRCIvPgotCQk8ZmllbGQgbmFtZT0iVEFSR0VUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wcmVzcyhMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAkQ29tcHJlc3NGb3JtYXQ7SUxqYXZhL2lvL091dHB1dFN0cmVhbTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkoTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwJENvbmZpZztaKUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5UGl4ZWxzRnJvbUJ1ZmZlcihMamF2YS9uaW8vQnVmZmVyOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlQaXhlbHNUb0J1ZmZlcihMamF2YS9uaW8vQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQml0bWFwKElJTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwJENvbmZpZzspTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUJpdG1hcChJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcCRDb25maWc7WilMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVCaXRtYXAoSUlMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAkQ29uZmlnO1pMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlOylMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVCaXRtYXAoTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQml0bWFwKExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtJSUlJKUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVCaXRtYXAoTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0lJSUlMYW5kcm9pZC9ncmFwaGljcy9NYXRyaXg7WilMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQml0bWFwKExhbmRyb2lkL2dyYXBoaWNzL1BpY3R1cmU7KUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUJpdG1hcChMYW5kcm9pZC9ncmFwaGljcy9QaWN0dXJlO0lJTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwJENvbmZpZzspTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQml0bWFwKExhbmRyb2lkL3V0aWwvRGlzcGxheU1ldHJpY3M7SUlMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAkQ29uZmlnOylMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVCaXRtYXAoTGFuZHJvaWQvdXRpbC9EaXNwbGF5TWV0cmljcztJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcCRDb25maWc7WilMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVCaXRtYXAoTGFuZHJvaWQvdXRpbC9EaXNwbGF5TWV0cmljcztJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcCRDb25maWc7WkxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7KUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUJpdG1hcChMYW5kcm9pZC91dGlsL0Rpc3BsYXlNZXRyaWNzO1tJSUlJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcCRDb25maWc7KUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUJpdG1hcChMYW5kcm9pZC91dGlsL0Rpc3BsYXlNZXRyaWNzO1tJSUlMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAkQ29uZmlnOylMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVCaXRtYXAoW0lJSUlJTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwJENvbmZpZzspTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUJpdG1hcChbSUlJTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwJENvbmZpZzspTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVNjYWxlZEJpdG1hcChMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7SUlaKUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcmFzZUNvbG9yKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImV4dHJhY3RBbHBoYSgpTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4dHJhY3RBbHBoYShMYW5kcm9pZC9ncmFwaGljcy9QYWludDtbSSlMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxsb2NhdGlvbkJ5dGVDb3VudCgpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qnl0ZUNvdW50KClJIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2xvclNwYWNlKClMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uZmlnKClMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAkQ29uZmlnOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlbnNpdHkoKUkiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2VuZXJhdGlvbklkKClJIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROaW5lUGF0Y2hDaHVuaygpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQaXhlbChJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGl4ZWxzKFtJSUlJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3dCeXRlcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYWxlZEhlaWdodChJKUkiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhbGVkSGVpZ2h0KExhbmRyb2lkL2dyYXBoaWNzL0NhbnZhczspSSIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2FsZWRIZWlnaHQoTGFuZHJvaWQvdXRpbC9EaXNwbGF5TWV0cmljczspSSIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2FsZWRXaWR0aChJKUkiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhbGVkV2lkdGgoTGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzOylJIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYWxlZFdpZHRoKExhbmRyb2lkL3V0aWwvRGlzcGxheU1ldHJpY3M7KUkiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNBbHBoYSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc01pcE1hcCgpWiIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNNdXRhYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcmVtdWx0aXBsaWVkKClaIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlY3ljbGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJlcGFyZVRvRHJhdygpViIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWNvbmZpZ3VyZShJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcCRDb25maWc7KVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InJlY3ljbGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzYW1lQXMoTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylaIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb25maWcoTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwJENvbmZpZzspViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVuc2l0eShJKVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGFzQWxwaGEoWilWIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIYXNNaXBNYXAoWilWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIZWlnaHQoSSlWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQaXhlbChJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBpeGVscyhbSUlJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJlbXVsdGlwbGllZChaKVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdpZHRoKEkpViIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJERU5TSVRZX05PTkUiIHNpbmNlPSI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAkQ29tcHJlc3NGb3JtYXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAkQ29tcHJlc3NGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwJENvbXByZXNzRm9ybWF0OyIvPgotCQk8ZmllbGQgbmFtZT0iSlBFRyIvPgotCQk8ZmllbGQgbmFtZT0iUE5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUJQIiBzaW5jZT0iMTQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcCRDb25maWciIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAkQ29uZmlnOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcCRDb25maWc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTFBIQV84Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdCXzQ0NDQiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdCXzg4ODgiLz4KLQkJPGZpZWxkIG5hbWU9IkhBUkRXQVJFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJHQkFfRjE2IiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJHQl81NjUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29kZUJ5dGVBcnJheShbQklJKUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVCeXRlQXJyYXkoW0JJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkkT3B0aW9uczspTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29kZUZpbGUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVGaWxlKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkkT3B0aW9uczspTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29kZUZpbGVEZXNjcmlwdG9yKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOylMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjb2RlRmlsZURlc2NyaXB0b3IoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5JE9wdGlvbnM7KUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVSZXNvdXJjZShMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7SSlMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjb2RlUmVzb3VyY2UoTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzO0lMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5JE9wdGlvbnM7KUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVSZXNvdXJjZVN0cmVhbShMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7TGFuZHJvaWQvdXRpbC9UeXBlZFZhbHVlO0xqYXZhL2lvL0lucHV0U3RyZWFtO0xhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeSRPcHRpb25zOylMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7IiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29kZVN0cmVhbShMamF2YS9pby9JbnB1dFN0cmVhbTspTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29kZVN0cmVhbShMamF2YS9pby9JbnB1dFN0cmVhbTtMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkkT3B0aW9uczspTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeSRPcHRpb25zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Q2FuY2VsRGVjb2RlKClWIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iaW5CaXRtYXAiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iaW5EZW5zaXR5IiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iaW5EaXRoZXIiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpbklucHV0U2hhcmVhYmxlIiBzaW5jZT0iNCIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImluSnVzdERlY29kZUJvdW5kcyIvPgotCQk8ZmllbGQgbmFtZT0iaW5NdXRhYmxlIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9ImluUHJlZmVyUXVhbGl0eU92ZXJTcGVlZCIgc2luY2U9IjEwIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iaW5QcmVmZXJyZWRDb2xvclNwYWNlIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9ImluUHJlZmVycmVkQ29uZmlnIi8+Ci0JCTxmaWVsZCBuYW1lPSJpblByZW11bHRpcGxpZWQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iaW5QdXJnZWFibGUiIHNpbmNlPSI0IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iaW5TYW1wbGVTaXplIi8+Ci0JCTxmaWVsZCBuYW1lPSJpblNjYWxlZCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9ImluU2NyZWVuRGVuc2l0eSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9ImluVGFyZ2V0RGVuc2l0eSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9ImluVGVtcFN0b3JhZ2UiLz4KLQkJPGZpZWxkIG5hbWU9Im1DYW5jZWwiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJvdXRDb2xvclNwYWNlIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Im91dENvbmZpZyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJvdXRIZWlnaHQiLz4KLQkJPGZpZWxkIG5hbWU9Im91dE1pbWVUeXBlIi8+Ci0JCTxmaWVsZCBuYW1lPSJvdXRXaWR0aCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwUmVnaW9uRGVjb2RlciIgc2luY2U9IjEwIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVSZWdpb24oTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5JE9wdGlvbnM7KUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVjeWNsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtaKUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcFJlZ2lvbkRlY29kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SW5zdGFuY2UoTGphdmEvaW8vSW5wdXRTdHJlYW07WilMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBSZWdpb25EZWNvZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO1opTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwUmVnaW9uRGVjb2RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShbQklJWilMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBSZWdpb25EZWNvZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlY3ljbGUoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcFNoYWRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1NoYWRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7TGFuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyJFRpbGVNb2RlO0xhbmRyb2lkL2dyYXBoaWNzL1NoYWRlciRUaWxlTW9kZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQmx1ck1hc2tGaWx0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9NYXNrRmlsdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZMYW5kcm9pZC9ncmFwaGljcy9CbHVyTWFza0ZpbHRlciRCbHVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9CbHVyTWFza0ZpbHRlciRCbHVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvQmx1ck1hc2tGaWx0ZXIkQmx1cjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9ncmFwaGljcy9CbHVyTWFza0ZpbHRlciRCbHVyOyIvPgotCQk8ZmllbGQgbmFtZT0iSU5ORVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PUk1BTCIvPgotCQk8ZmllbGQgbmFtZT0iT1VURVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNPTElEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9DYW1lcmEiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5VG9DYW52YXMoTGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG90V2l0aE5vcm1hbChGRkYpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2F0aW9uWCgpRiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYXRpb25ZKClGIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhdGlvblooKUYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hdHJpeChMYW5kcm9pZC9ncmFwaGljcy9NYXRyaXg7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN0b3JlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icm90YXRlKEZGRilWIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb3RhdGVYKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InJvdGF0ZVkoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icm90YXRlWihGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzYXZlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9jYXRpb24oRkZGKVYiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9InRyYW5zbGF0ZShGRkYpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9vcGVuZ2xlcy9HTDspViIgcmVtb3ZlZD0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGlwT3V0UGF0aChMYW5kcm9pZC9ncmFwaGljcy9QYXRoOylaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGlwT3V0UmVjdChGRkZGKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsaXBPdXRSZWN0KElJSUkpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xpcE91dFJlY3QoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xpcE91dFJlY3QoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdEY7KVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsaXBQYXRoKExhbmRyb2lkL2dyYXBoaWNzL1BhdGg7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGlwUGF0aChMYW5kcm9pZC9ncmFwaGljcy9QYXRoO0xhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbiRPcDspWiIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGlwUmVjdChGRkZGKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGlwUmVjdChGRkZGTGFuZHJvaWQvZ3JhcGhpY3MvUmVnaW9uJE9wOylaIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsaXBSZWN0KElJSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsaXBSZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGlwUmVjdChMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0xhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbiRPcDspWiIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGlwUmVjdChMYW5kcm9pZC9ncmFwaGljcy9SZWN0RjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsaXBSZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGO0xhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbiRPcDspWiIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGlwUmVnaW9uKExhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbjspWiIgZGVwcmVjYXRlZD0iMjEiIHJlbW92ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xpcFJlZ2lvbihMYW5kcm9pZC9ncmFwaGljcy9SZWdpb247TGFuZHJvaWQvZ3JhcGhpY3MvUmVnaW9uJE9wOylaIiBkZXByZWNhdGVkPSIyMSIgcmVtb3ZlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25jYXQoTGFuZHJvaWQvZ3JhcGhpY3MvTWF0cml4OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd0FSR0IoSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd0FyYyhGRkZGRkZaTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXdBcmMoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdEY7RkZaTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3Qml0bWFwKExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtGRkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd0JpdG1hcChMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7TGFuZHJvaWQvZ3JhcGhpY3MvTWF0cml4O0xhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd0JpdG1hcChMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0xhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd0JpdG1hcChMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtMYW5kcm9pZC9ncmFwaGljcy9SZWN0RjtMYW5kcm9pZC9ncmFwaGljcy9QYWludDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXdCaXRtYXAoW0lJSUZGSUlaTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXdCaXRtYXAoW0lJSUlJSUlaTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd0JpdG1hcE1lc2goTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0lJW0ZJW0lJTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3Q2lyY2xlKEZGRkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd0NvbG9yKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXdDb2xvcihJTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd0xpbmUoRkZGRkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd0xpbmVzKFtGSUlMYW5kcm9pZC9ncmFwaGljcy9QYWludDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXdMaW5lcyhbRkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd092YWwoRkZGRkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3T3ZhbChMYW5kcm9pZC9ncmFwaGljcy9SZWN0RjtMYW5kcm9pZC9ncmFwaGljcy9QYWludDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXdQYWludChMYW5kcm9pZC9ncmFwaGljcy9QYWludDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXdQYXRoKExhbmRyb2lkL2dyYXBoaWNzL1BhdGg7TGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3UGljdHVyZShMYW5kcm9pZC9ncmFwaGljcy9QaWN0dXJlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd1BpY3R1cmUoTGFuZHJvaWQvZ3JhcGhpY3MvUGljdHVyZTtMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd1BpY3R1cmUoTGFuZHJvaWQvZ3JhcGhpY3MvUGljdHVyZTtMYW5kcm9pZC9ncmFwaGljcy9SZWN0RjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXdQb2ludChGRkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd1BvaW50cyhbRklJTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3UG9pbnRzKFtGTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3UG9zVGV4dChMamF2YS9sYW5nL1N0cmluZztbRkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXdQb3NUZXh0KFtDSUlbRkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXdSR0IoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3UmVjdChGRkZGTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3UmVjdChMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0xhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd1JlY3QoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdEY7TGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3Um91bmRSZWN0KEZGRkZGRkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3Um91bmRSZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGO0ZGTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3VGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSUZGTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3VGV4dChMamF2YS9sYW5nL1N0cmluZztGRkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd1RleHQoTGphdmEvbGFuZy9TdHJpbmc7SUlGRkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd1RleHQoW0NJSUZGTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3VGV4dE9uUGF0aChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9ncmFwaGljcy9QYXRoO0ZGTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3VGV4dE9uUGF0aChbQ0lJTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDtGRkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd1RleHRSdW4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUlJSUZGWkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3VGV4dFJ1bihbQ0lJSUlGRlpMYW5kcm9pZC9ncmFwaGljcy9QYWludDspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd1ZlcnRpY2VzKExhbmRyb2lkL2dyYXBoaWNzL0NhbnZhcyRWZXJ0ZXhNb2RlO0lbRklbRklbSUlbU0lJTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcmVlR2xDYWNoZXMoKVYiIHJlbW92ZWQ9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xpcEJvdW5kcygpTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGlwQm91bmRzKExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZW5zaXR5KClJIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyYXdGaWx0ZXIoKUxhbmRyb2lkL2dyYXBoaWNzL0RyYXdGaWx0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R0woKUxqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9vcGVuZ2xlcy9HTDsiIHJlbW92ZWQ9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGVpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF0cml4KClMYW5kcm9pZC9ncmFwaGljcy9NYXRyaXg7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hdHJpeChMYW5kcm9pZC9ncmFwaGljcy9NYXRyaXg7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4aW11bUJpdG1hcEhlaWdodCgpSSIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4aW11bUJpdG1hcFdpZHRoKClJIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTYXZlQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSGFyZHdhcmVBY2NlbGVyYXRlZCgpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPcGFxdWUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWlja1JlamVjdChGRkZGTGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzJEVkZ2VUeXBlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icXVpY2tSZWplY3QoTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDtMYW5kcm9pZC9ncmFwaGljcy9DYW52YXMkRWRnZVR5cGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWlja1JlamVjdChMYW5kcm9pZC9ncmFwaGljcy9SZWN0RjtMYW5kcm9pZC9ncmFwaGljcy9DYW52YXMkRWRnZVR5cGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN0b3JlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdG9yZVRvQ291bnQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icm90YXRlKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InJvdGF0ZShGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNhdmUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzYXZlKEkpSSIgZGVwcmVjYXRlZD0iMjYiIHJlbW92ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2F2ZUxheWVyKEZGRkZMYW5kcm9pZC9ncmFwaGljcy9QYWludDspSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2F2ZUxheWVyKEZGRkZMYW5kcm9pZC9ncmFwaGljcy9QYWludDtJKUkiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2F2ZUxheWVyKExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGO0xhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzYXZlTGF5ZXIoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdEY7TGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7SSlJIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNhdmVMYXllckFscGhhKEZGRkZJKUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNhdmVMYXllckFscGhhKEZGRkZJSSlJIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNhdmVMYXllckFscGhhKExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGO0kpSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2F2ZUxheWVyQWxwaGEoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdEY7SUkpSSIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2FsZShGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2NhbGUoRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qml0bWFwKExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlbnNpdHkoSSlWIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERyYXdGaWx0ZXIoTGFuZHJvaWQvZ3JhcGhpY3MvRHJhd0ZpbHRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1hdHJpeChMYW5kcm9pZC9ncmFwaGljcy9NYXRyaXg7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWV3cG9ydChJSSlWIiByZW1vdmVkPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNrZXcoRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InRyYW5zbGF0ZShGRilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTExfU0FWRV9GTEFHIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTElQX1NBVkVfRkxBRyIgZGVwcmVjYXRlZD0iMjYiIHJlbW92ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDTElQX1RPX0xBWUVSX1NBVkVfRkxBRyIgZGVwcmVjYXRlZD0iMjYiIHJlbW92ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGVUxMX0NPTE9SX0xBWUVSX1NBVkVfRkxBRyIgZGVwcmVjYXRlZD0iMjYiIHJlbW92ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIQVNfQUxQSEFfTEFZRVJfU0FWRV9GTEFHIiBkZXByZWNhdGVkPSIyNiIgcmVtb3ZlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVFJJWF9TQVZFX0ZMQUciIGRlcHJlY2F0ZWQ9IjI2IiByZW1vdmVkPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzJEVkZ2VUeXBlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzJEVkZ2VUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2dyYXBoaWNzL0NhbnZhcyRFZGdlVHlwZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkFBIi8+Ci0JCTxmaWVsZCBuYW1lPSJCVyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzJFZlcnRleE1vZGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9ncmFwaGljcy9DYW52YXMkVmVydGV4TW9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9ncmFwaGljcy9DYW52YXMkVmVydGV4TW9kZTsiLz4KLQkJPGZpZWxkIG5hbWU9IlRSSUFOR0xFUyIvPgotCQk8ZmllbGQgbmFtZT0iVFJJQU5HTEVfRkFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUklBTkdMRV9TVFJJUCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQ29sb3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IkhTVlRvQ29sb3IoSVtGKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJIU1ZUb0NvbG9yKFtGKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJSR0JUb0hTVihJSUlbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWxwaGEoKUYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFscGhhKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImFscGhhKEopRiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXJnYihGRkZGKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFyZ2IoSUlJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmx1ZSgpRiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmx1ZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJibHVlKEopRiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29sb3JTcGFjZShKKUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb2xvclRvSFNWKElbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udmVydChGRkZGTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZSRDb25uZWN0b3I7KUoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnZlcnQoRkZGRkxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7TGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZTspSiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29udmVydChJTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZTspSiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29udmVydChKTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZSRDb25uZWN0b3I7KUoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnZlcnQoSkxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7KUoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnZlcnQoTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZTspTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3I7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2xvclNwYWNlKClMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tcG9uZW50KEkpRiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tcG9uZW50Q291bnQoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBvbmVudHMoKVtGIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wb25lbnRzKFtGKVtGIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2RlbCgpTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZSRNb2RlbDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdyZWVuKClGIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJncmVlbihJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJncmVlbihKKUYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5Db2xvclNwYWNlKEpMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlOylaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NyZ2IoKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3JnYihKKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzV2lkZUdhbXV0KClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1dpZGVHYW11dChKKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Imx1bWluYW5jZSgpRiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibHVtaW5hbmNlKEkpRiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibHVtaW5hbmNlKEopRiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFjaygpSiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFjayhGRkYpSiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFjayhGRkZGKUoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InBhY2soRkZGRkxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7KUoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InBhY2soSSlKIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZUNvbG9yKExqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVkKClGIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVkKEopRiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmdiKEZGRilJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZ2IoSUlJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0FyZ2IoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InRvQXJnYihKKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoRkZGKUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihGRkZGKUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihGRkZGTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZTspTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3I7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKEkpTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3I7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKEopTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3I7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKFtGTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZTspTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3I7IiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkJMQUNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJCTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDWUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJES0dSQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkdSQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkdSRUVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJMVEdSQVkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BR0VOVEEiLz4KLQkJPGZpZWxkIG5hbWU9IlJFRCIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNQQVJFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IldISVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJZRUxMT1ciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL0NvbG9yRmlsdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9Db2xvck1hdHJpeCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL0NvbG9yTWF0cml4OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcnJheSgpW0YiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0Q29uY2F0KExhbmRyb2lkL2dyYXBoaWNzL0NvbG9yTWF0cml4OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJlQ29uY2F0KExhbmRyb2lkL2dyYXBoaWNzL0NvbG9yTWF0cml4OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JNYXRyaXg7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoW0YpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbmNhdChMYW5kcm9pZC9ncmFwaGljcy9Db2xvck1hdHJpeDtMYW5kcm9pZC9ncmFwaGljcy9Db2xvck1hdHJpeDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJHQjJZVVYoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSb3RhdGUoSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNhdHVyYXRpb24oRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2NhbGUoRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0WVVWMlJHQigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JNYXRyaXhDb2xvckZpbHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL0NvbG9yRmlsdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL0NvbG9yTWF0cml4OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2xvck1hdHJpeChMYW5kcm9pZC9ncmFwaGljcy9Db2xvck1hdHJpeDspViIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlJE1vZGVsO0kpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRhcHQoTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZTtbRilMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkYXB0KExhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7W0ZMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlJEFkYXB0YXRpb247KUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29ubmVjdChMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlOylMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlJENvbm5lY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0KExhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7TGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZSRSZW5kZXJJbnRlbnQ7KUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2UkQ29ubmVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZTtMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlOylMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlJENvbm5lY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0KExhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7TGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZTtMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlJFJlbmRlckludGVudDspTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZSRDb25uZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbVh5eihGRkYpW0YiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tWHl6KFtGKVtGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KExhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2UkTmFtZWQ7KUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tcG9uZW50Q291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFZhbHVlKEkpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pblZhbHVlKEkpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vZGVsKClMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlJE1vZGVsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3JnYigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzV2lkZUdhbXV0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF0Y2goW0ZMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlJFJnYiRUcmFuc2ZlclBhcmFtZXRlcnM7KUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9YeXooRkZGKVtGIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9YeXooW0YpW0YiLz4KLQkJPGZpZWxkIG5hbWU9IklMTFVNSU5BTlRfQSIvPgotCQk8ZmllbGQgbmFtZT0iSUxMVU1JTkFOVF9CIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTExVTUlOQU5UX0MiLz4KLQkJPGZpZWxkIG5hbWU9IklMTFVNSU5BTlRfRDUwIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTExVTUlOQU5UX0Q1NSIvPgotCQk8ZmllbGQgbmFtZT0iSUxMVU1JTkFOVF9ENjAiLz4KLQkJPGZpZWxkIG5hbWU9IklMTFVNSU5BTlRfRDY1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTExVTUlOQU5UX0Q3NSIvPgotCQk8ZmllbGQgbmFtZT0iSUxMVU1JTkFOVF9FIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9JRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZSRBZGFwdGF0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2UkQWRhcHRhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlJEFkYXB0YXRpb247Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCUkFERk9SRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0lFQ0FUMDIiLz4KLQkJPGZpZWxkIG5hbWU9IlZPTl9LUklFUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZSRDb25uZWN0b3IiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7TGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZTtMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlJFJlbmRlckludGVudDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzdGluYXRpb24oKUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVuZGVySW50ZW50KClMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlJFJlbmRlckludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb3VyY2UoKUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNmb3JtKEZGRilbRiIvPgotCQk8bWV0aG9kIG5hbWU9InRyYW5zZm9ybShbRilbRiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZSRNb2RlbCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wb25lbnRDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2UkTW9kZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZSRNb2RlbDsiLz4KLQkJPGZpZWxkIG5hbWU9IkNNWUsiLz4KLQkJPGZpZWxkIG5hbWU9IkxBQiIvPgotCQk8ZmllbGQgbmFtZT0iUkdCIi8+Ci0JCTxmaWVsZCBuYW1lPSJYWVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2UkTmFtZWQiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZSROYW1lZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlJE5hbWVkOyIvPgotCQk8ZmllbGQgbmFtZT0iQUNFUyIvPgotCQk8ZmllbGQgbmFtZT0iQUNFU0NHIi8+Ci0JCTxmaWVsZCBuYW1lPSJBRE9CRV9SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkJUMjAyMCIvPgotCQk8ZmllbGQgbmFtZT0iQlQ3MDkiLz4KLQkJPGZpZWxkIG5hbWU9IkNJRV9MQUIiLz4KLQkJPGZpZWxkIG5hbWU9IkNJRV9YWVoiLz4KLQkJPGZpZWxkIG5hbWU9IkRDSV9QMyIvPgotCQk8ZmllbGQgbmFtZT0iRElTUExBWV9QMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhURU5ERURfU1JHQiIvPgotCQk8ZmllbGQgbmFtZT0iTElORUFSX0VYVEVOREVEX1NSR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkxJTkVBUl9TUkdCIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVFNDXzE5NTMiLz4KLQkJPGZpZWxkIG5hbWU9IlBST19QSE9UT19SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IlNNUFRFX0MiLz4KLQkJPGZpZWxkIG5hbWU9IlNSR0IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2UkUmVuZGVySW50ZW50IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2UkUmVuZGVySW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2dyYXBoaWNzL0NvbG9yU3BhY2UkUmVuZGVySW50ZW50OyIvPgotCQk8ZmllbGQgbmFtZT0iQUJTT0xVVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUkNFUFRVQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlJFTEFUSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQVRVUkFUSU9OIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlJFJnYiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO1tGRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO1tGTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZSRSZ2IkVHJhbnNmZXJQYXJhbWV0ZXJzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO1tGTGphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVVbmFyeU9wZXJhdG9yO0xqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlVW5hcnlPcGVyYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztbRltGRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO1tGW0ZMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlJFJnYiRUcmFuc2ZlclBhcmFtZXRlcnM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7W0ZbRkxqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlVW5hcnlPcGVyYXRvcjtMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZVVuYXJ5T3BlcmF0b3I7RkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb21MaW5lYXIoRkZGKVtGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbUxpbmVhcihbRilbRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVvdGYoKUxqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlVW5hcnlPcGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnZlcnNlVHJhbnNmb3JtKClbRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludmVyc2VUcmFuc2Zvcm0oW0YpW0YiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPZXRmKClMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZVVuYXJ5T3BlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbWFyaWVzKClbRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1hcmllcyhbRilbRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYW5zZmVyUGFyYW1ldGVycygpTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZSRSZ2IkVHJhbnNmZXJQYXJhbWV0ZXJzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYW5zZm9ybSgpW0YiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFuc2Zvcm0oW0YpW0YiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaGl0ZVBvaW50KClbRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdoaXRlUG9pbnQoW0YpW0YiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0xpbmVhcihGRkYpW0YiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0xpbmVhcihbRilbRiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZSRSZ2IkVHJhbnNmZXJQYXJhbWV0ZXJzIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEREREREKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oRERERERERClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJhIi8+Ci0JCTxmaWVsZCBuYW1lPSJiIi8+Ci0JCTxmaWVsZCBuYW1lPSJjIi8+Ci0JCTxmaWVsZCBuYW1lPSJkIi8+Ci0JCTxmaWVsZCBuYW1lPSJlIi8+Ci0JCTxmaWVsZCBuYW1lPSJmIi8+Ci0JCTxmaWVsZCBuYW1lPSJnIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9Db21wb3NlUGF0aEVmZmVjdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1BhdGhFZmZlY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aEVmZmVjdDtMYW5kcm9pZC9ncmFwaGljcy9QYXRoRWZmZWN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9Db21wb3NlU2hhZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL1NoYWRlcjtMYW5kcm9pZC9ncmFwaGljcy9TaGFkZXI7TGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL1NoYWRlcjtMYW5kcm9pZC9ncmFwaGljcy9TaGFkZXI7TGFuZHJvaWQvZ3JhcGhpY3MvWGZlcm1vZGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL0Nvcm5lclBhdGhFZmZlY3QiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9QYXRoRWZmZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEYpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvRGFzaFBhdGhFZmZlY3QiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9QYXRoRWZmZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtGRilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9EaXNjcmV0ZVBhdGhFZmZlY3QiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9QYXRoRWZmZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZGKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL0RyYXdGaWx0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvRW1ib3NzTWFza0ZpbHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL01hc2tGaWx0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0ZGRkYpViIgZGVwcmVjYXRlZD0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL0ltYWdlRGVjb2RlciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQXV0b0Nsb3NlYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSklJWlopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU291cmNlKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL2dyYXBoaWNzL0ltYWdlRGVjb2RlciRTb3VyY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU291cmNlKExhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0TWFuYWdlcjtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyJFNvdXJjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTb3VyY2UoTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzO0kpTGFuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyJFNvdXJjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTb3VyY2UoTGphdmEvaW8vRmlsZTspTGFuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyJFNvdXJjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTb3VyY2UoTGphdmEvbmlvL0J5dGVCdWZmZXI7KUxhbmRyb2lkL2dyYXBoaWNzL0ltYWdlRGVjb2RlciRTb3VyY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjb2RlQml0bWFwKExhbmRyb2lkL2dyYXBoaWNzL0ltYWdlRGVjb2RlciRTb3VyY2U7KUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVCaXRtYXAoTGFuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyJFNvdXJjZTtMYW5kcm9pZC9ncmFwaGljcy9JbWFnZURlY29kZXIkT25IZWFkZXJEZWNvZGVkTGlzdGVuZXI7KUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVEcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9JbWFnZURlY29kZXIkU291cmNlOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVEcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9JbWFnZURlY29kZXIkU291cmNlO0xhbmRyb2lkL2dyYXBoaWNzL0ltYWdlRGVjb2RlciRPbkhlYWRlckRlY29kZWRMaXN0ZW5lcjspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxsb2NhdG9yKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3JvcCgpTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZW1vcnlTaXplUG9saWN5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T25QYXJ0aWFsSW1hZ2VMaXN0ZW5lcigpTGFuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyJE9uUGFydGlhbEltYWdlTGlzdGVuZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zdFByb2Nlc3NvcigpTGFuZHJvaWQvZ3JhcGhpY3MvUG9zdFByb2Nlc3NvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RlY29kZUFzQWxwaGFNYXNrRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTXV0YWJsZVJlcXVpcmVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVbnByZW11bHRpcGxpZWRSZXF1aXJlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFsbG9jYXRvcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDcm9wKExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWNvZGVBc0FscGhhTWFza0VuYWJsZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWVtb3J5U2l6ZVBvbGljeShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNdXRhYmxlUmVxdWlyZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25QYXJ0aWFsSW1hZ2VMaXN0ZW5lcihMYW5kcm9pZC9ncmFwaGljcy9JbWFnZURlY29kZXIkT25QYXJ0aWFsSW1hZ2VMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvc3RQcm9jZXNzb3IoTGFuZHJvaWQvZ3JhcGhpY3MvUG9zdFByb2Nlc3NvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRhcmdldENvbG9yU3BhY2UoTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JTcGFjZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRhcmdldFNhbXBsZVNpemUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFyZ2V0U2l6ZShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VW5wcmVtdWx0aXBsaWVkUmVxdWlyZWQoWilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTExPQ0FUT1JfREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iQUxMT0NBVE9SX0hBUkRXQVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTExPQ0FUT1JfU0hBUkVEX01FTU9SWSIvPgotCQk8ZmllbGQgbmFtZT0iQUxMT0NBVE9SX1NPRlRXQVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRU1PUllfUE9MSUNZX0RFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FTU9SWV9QT0xJQ1lfTE9XX1JBTSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyJERlY29kZUV4Y2VwdGlvbiIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvVGhyb3dhYmxlO0xhbmRyb2lkL2dyYXBoaWNzL0ltYWdlRGVjb2RlciRTb3VyY2U7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVycm9yKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U291cmNlKClMYW5kcm9pZC9ncmFwaGljcy9JbWFnZURlY29kZXIkU291cmNlOyIvPgotCQk8ZmllbGQgbmFtZT0iU09VUkNFX0VYQ0VQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iU09VUkNFX0lOQ09NUExFVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9NQUxGT1JNRURfREFUQSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyJEltYWdlSW5mbyIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2xvclNwYWNlKClMYW5kcm9pZC9ncmFwaGljcy9Db2xvclNwYWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbWVUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaXplKClMYW5kcm9pZC91dGlsL1NpemU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBbmltYXRlZCgpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyJE9uSGVhZGVyRGVjb2RlZExpc3RlbmVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25IZWFkZXJEZWNvZGVkKExhbmRyb2lkL2dyYXBoaWNzL0ltYWdlRGVjb2RlcjtMYW5kcm9pZC9ncmFwaGljcy9JbWFnZURlY29kZXIkSW1hZ2VJbmZvO0xhbmRyb2lkL2dyYXBoaWNzL0ltYWdlRGVjb2RlciRTb3VyY2U7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL0ltYWdlRGVjb2RlciRPblBhcnRpYWxJbWFnZUxpc3RlbmVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYXJ0aWFsSW1hZ2UoTGFuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyJERlY29kZUV4Y2VwdGlvbjspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyJFNvdXJjZSIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VGb3JtYXQiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpdHNQZXJQaXhlbChJKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkRFUFRIMTYiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iREVQVEhfUE9JTlRfQ0xPVUQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRkxFWF9SR0JBXzg4ODgiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRkxFWF9SR0JfODg4IiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkpQRUciLz4KLQkJPGZpZWxkIG5hbWU9Ik5WMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5WMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlBSSVZBVEUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUkFXMTAiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUkFXMTIiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUkFXX1BSSVZBVEUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iUkFXX1NFTlNPUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJSR0JfNTY1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJZVVZfNDIwXzg4OCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJZVVZfNDIyXzg4OCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJZVVZfNDQ0Xzg4OCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJZVVkyIi8+Ci0JCTxmaWVsZCBuYW1lPSJZVjEyIiBzaW5jZT0iOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvSW50ZXJwb2xhdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlGcmFtZUNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWVDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZXlGcmFtZShJSVtGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZXlGcmFtZShJSVtGW0YpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlcGVhdE1pcnJvcihGWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idGltZVRvVmFsdWVzKElbRilMYW5kcm9pZC9ncmFwaGljcy9JbnRlcnBvbGF0b3IkUmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9InRpbWVUb1ZhbHVlcyhbRilMYW5kcm9pZC9ncmFwaGljcy9JbnRlcnBvbGF0b3IkUmVzdWx0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvSW50ZXJwb2xhdG9yJFJlc3VsdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL0ludGVycG9sYXRvciRSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvZ3JhcGhpY3MvSW50ZXJwb2xhdG9yJFJlc3VsdDsiLz4KLQkJPGZpZWxkIG5hbWU9IkZSRUVaRV9FTkQiLz4KLQkJPGZpZWxkIG5hbWU9IkZSRUVaRV9TVEFSVCIvPgotCQk8ZmllbGQgbmFtZT0iTk9STUFMIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9MYXllclJhc3Rlcml6ZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMSIgcmVtb3ZlZD0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1Jhc3Rlcml6ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRMYXllcihMYW5kcm9pZC9ncmFwaGljcy9QYWludDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZExheWVyKExhbmRyb2lkL2dyYXBoaWNzL1BhaW50O0ZGKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL0xpZ2h0aW5nQ29sb3JGaWx0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sb3JBZGQoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yTXVsdGlwbHkoKUkiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvTGluZWFyR3JhZGllbnQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9TaGFkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oRkZGRklJTGFuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyJFRpbGVNb2RlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZGRkZbSVtGTGFuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyJFRpbGVNb2RlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9NYXNrRmlsdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL01hdHJpeCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL01hdHJpeDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbHVlcyhbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW52ZXJ0KExhbmRyb2lkL2dyYXBoaWNzL01hdHJpeDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWZmaW5lKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0lkZW50aXR5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFwUG9pbnRzKFtGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXBQb2ludHMoW0ZJW0ZJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFwUG9pbnRzKFtGW0YpViIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcFJhZGl1cyhGKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXBSZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFwUmVjdChMYW5kcm9pZC9ncmFwaGljcy9SZWN0RjtMYW5kcm9pZC9ncmFwaGljcy9SZWN0RjspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcFZlY3RvcnMoW0YpViIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcFZlY3RvcnMoW0ZJW0ZJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFwVmVjdG9ycyhbRltGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0Q29uY2F0KExhbmRyb2lkL2dyYXBoaWNzL01hdHJpeDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InBvc3RSb3RhdGUoRilaIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9zdFJvdGF0ZShGRkYpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBvc3RTY2FsZShGRilaIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9zdFNjYWxlKEZGRkYpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBvc3RTa2V3KEZGKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0U2tldyhGRkZGKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0VHJhbnNsYXRlKEZGKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmVDb25jYXQoTGFuZHJvaWQvZ3JhcGhpY3MvTWF0cml4OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJlUm90YXRlKEYpWiIvPgotCQk8bWV0aG9kIG5hbWU9InByZVJvdGF0ZShGRkYpWiIvPgotCQk8bWV0aG9kIG5hbWU9InByZVNjYWxlKEZGKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmVTY2FsZShGRkZGKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmVTa2V3KEZGKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmVTa2V3KEZGRkYpWiIvPgotCQk8bWV0aG9kIG5hbWU9InByZVRyYW5zbGF0ZShGRilaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVjdFN0YXlzUmVjdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KExhbmRyb2lkL2dyYXBoaWNzL01hdHJpeDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbmNhdChMYW5kcm9pZC9ncmFwaGljcy9NYXRyaXg7TGFuZHJvaWQvZ3JhcGhpY3MvTWF0cml4OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9seVRvUG9seShbRklbRklJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWN0VG9SZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGO0xhbmRyb2lkL2dyYXBoaWNzL1JlY3RGO0xhbmRyb2lkL2dyYXBoaWNzL01hdHJpeCRTY2FsZVRvRml0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Um90YXRlKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJvdGF0ZShGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjYWxlKEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY2FsZShGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaW5Db3MoRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNpbkNvcyhGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTa2V3KEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTa2V3KEZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyYW5zbGF0ZShGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFsdWVzKFtGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1Nob3J0U3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRVJTUF8wIi8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVSU1BfMSIvPgotCQk8ZmllbGQgbmFtZT0iTVBFUlNQXzIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1TQ0FMRV9YIi8+Ci0JCTxmaWVsZCBuYW1lPSJNU0NBTEVfWSIvPgotCQk8ZmllbGQgbmFtZT0iTVNLRVdfWCIvPgotCQk8ZmllbGQgbmFtZT0iTVNLRVdfWSIvPgotCQk8ZmllbGQgbmFtZT0iTVRSQU5TX1giLz4KLQkJPGZpZWxkIG5hbWU9Ik1UUkFOU19ZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9NYXRyaXgkU2NhbGVUb0ZpdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL01hdHJpeCRTY2FsZVRvRml0OyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2dyYXBoaWNzL01hdHJpeCRTY2FsZVRvRml0OyIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkQiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTEwiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVJUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9Nb3ZpZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVCeXRlQXJyYXkoW0JJSSlMYW5kcm9pZC9ncmFwaGljcy9Nb3ZpZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVGaWxlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9ncmFwaGljcy9Nb3ZpZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVTdHJlYW0oTGphdmEvaW8vSW5wdXRTdHJlYW07KUxhbmRyb2lkL2dyYXBoaWNzL01vdmllOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXcoTGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzO0ZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3KExhbmRyb2lkL2dyYXBoaWNzL0NhbnZhcztGRkxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHVyYXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc09wYXF1ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0id2lkdGgoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL05pbmVQYXRjaCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtbQilWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO1tCTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3KExhbmRyb2lkL2dyYXBoaWNzL0NhbnZhcztMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhdyhMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtMYW5kcm9pZC9ncmFwaGljcy9QYWludDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXcoTGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzO0xhbmRyb2lkL2dyYXBoaWNzL1JlY3RGOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qml0bWFwKClMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZW5zaXR5KClJIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFpbnQoKUxhbmRyb2lkL2dyYXBoaWNzL1BhaW50OyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNwYXJlbnRSZWdpb24oTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspTGFuZHJvaWQvZ3JhcGhpY3MvUmVnaW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpZHRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQWxwaGEoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05pbmVQYXRjaENodW5rKFtCKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYWludChMYW5kcm9pZC9ncmFwaGljcy9QYWludDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvT3V0bGluZSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9PdXRsaW5lOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuQ2xpcCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFscGhhKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmFkaXVzKClGIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW1wdHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZmZzZXQoSUkpViIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KExhbmRyb2lkL2dyYXBoaWNzL091dGxpbmU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbHBoYShGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb252ZXhQYXRoKExhbmRyb2lkL2dyYXBoaWNzL1BhdGg7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbXB0eSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE92YWwoSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3ZhbChMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVjdChJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSb3VuZFJlY3QoSUlJSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJvdW5kUmVjdChMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0YpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc2NlbnQoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJicmVha1RleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUlaRltGKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJicmVha1RleHQoTGphdmEvbGFuZy9TdHJpbmc7WkZbRilJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnJlYWtUZXh0KFtDSUlGW0YpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyU2hhZG93TGF5ZXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXNjZW50KClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXF1YWxzRm9yVGV4dE1lYXN1cmVtZW50KExhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbHBoYSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sb3JGaWx0ZXIoKUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yRmlsdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGxQYXRoKExhbmRyb2lkL2dyYXBoaWNzL1BhdGg7TGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsYWdzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9udEZlYXR1cmVTZXR0aW5ncygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb250TWV0cmljcygpTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkRm9udE1ldHJpY3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9udE1ldHJpY3MoTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkRm9udE1ldHJpY3M7KUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb250TWV0cmljc0ludCgpTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkRm9udE1ldHJpY3NJbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9udE1ldHJpY3NJbnQoTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkRm9udE1ldHJpY3NJbnQ7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb250U3BhY2luZygpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvbnRWYXJpYXRpb25TZXR0aW5ncygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaW50aW5nKClJIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZXR0ZXJTcGFjaW5nKClGIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXNrRmlsdGVyKClMYW5kcm9pZC9ncmFwaGljcy9NYXNrRmlsdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9mZnNldEZvckFkdmFuY2UoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUlJSVpGKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9mZnNldEZvckFkdmFuY2UoW0NJSUlJWkYpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGF0aEVmZmVjdCgpTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aEVmZmVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSYXN0ZXJpemVyKClMYW5kcm9pZC9ncmFwaGljcy9SYXN0ZXJpemVyOyIgZGVwcmVjYXRlZD0iMjEiIHJlbW92ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnVuQWR2YW5jZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSUlJWkkpRiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnVuQWR2YW5jZShbQ0lJSUlaSSlGIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaGFkZXIoKUxhbmRyb2lkL2dyYXBoaWNzL1NoYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJva2VDYXAoKUxhbmRyb2lkL2dyYXBoaWNzL1BhaW50JENhcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJva2VKb2luKClMYW5kcm9pZC9ncmFwaGljcy9QYWludCRKb2luOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cm9rZU1pdGVyKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3Ryb2tlV2lkdGgoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHlsZSgpTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkU3R5bGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dEFsaWduKClMYW5kcm9pZC9ncmFwaGljcy9QYWludCRBbGlnbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0Qm91bmRzKExqYXZhL2xhbmcvU3RyaW5nO0lJTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRCb3VuZHMoW0NJSUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0TG9jYWxlKClMamF2YS91dGlsL0xvY2FsZTsiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRMb2NhbGVzKClMYW5kcm9pZC9vcy9Mb2NhbGVMaXN0OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dFBhdGgoTGphdmEvbGFuZy9TdHJpbmc7SUlGRkxhbmRyb2lkL2dyYXBoaWNzL1BhdGg7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0UGF0aChbQ0lJRkZMYW5kcm9pZC9ncmFwaGljcy9QYXRoOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dFNjYWxlWCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRTaXplKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dFNrZXdYKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dFdpZHRocyhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSVtGKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0V2lkdGhzKExqYXZhL2xhbmcvU3RyaW5nO0lJW0YpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRXaWR0aHMoTGphdmEvbGFuZy9TdHJpbmc7W0YpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRXaWR0aHMoW0NJSVtGKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlZmFjZSgpTGFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WGZlcm1vZGUoKUxhbmRyb2lkL2dyYXBoaWNzL1hmZXJtb2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0dseXBoKExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FudGlBbGlhcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGl0aGVyKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbGVnYW50VGV4dEhlaWdodCgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGYWtlQm9sZFRleHQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZpbHRlckJpdG1hcCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTGluZWFyVGV4dCgpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N0cmlrZVRocnVUZXh0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTdWJwaXhlbFRleHQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VuZGVybGluZVRleHQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtZWFzdXJlVGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSSlGIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWVhc3VyZVRleHQoTGphdmEvbGFuZy9TdHJpbmc7KUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtZWFzdXJlVGV4dChMamF2YS9sYW5nL1N0cmluZztJSSlGIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWVhc3VyZVRleHQoW0NJSSlGIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBUkdCKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFscGhhKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFudGlBbGlhcyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2xvcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2xvckZpbHRlcihMYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlcjspTGFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JGaWx0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGl0aGVyKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVsZWdhbnRUZXh0SGVpZ2h0KFopViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmFrZUJvbGRUZXh0KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZpbHRlckJpdG1hcChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGbGFncyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb250RmVhdHVyZVNldHRpbmdzKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb250VmFyaWF0aW9uU2V0dGluZ3MoTGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhpbnRpbmcoSSlWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMZXR0ZXJTcGFjaW5nKEYpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGluZWFyVGV4dChaKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWFza0ZpbHRlcihMYW5kcm9pZC9ncmFwaGljcy9NYXNrRmlsdGVyOylMYW5kcm9pZC9ncmFwaGljcy9NYXNrRmlsdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhdGhFZmZlY3QoTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aEVmZmVjdDspTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aEVmZmVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSYXN0ZXJpemVyKExhbmRyb2lkL2dyYXBoaWNzL1Jhc3Rlcml6ZXI7KUxhbmRyb2lkL2dyYXBoaWNzL1Jhc3Rlcml6ZXI7IiBkZXByZWNhdGVkPSIyMSIgcmVtb3ZlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaGFkZXIoTGFuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyOylMYW5kcm9pZC9ncmFwaGljcy9TaGFkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hhZG93TGF5ZXIoRkZGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RyaWtlVGhydVRleHQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3Ryb2tlQ2FwKExhbmRyb2lkL2dyYXBoaWNzL1BhaW50JENhcDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cm9rZUpvaW4oTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkSm9pbjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cm9rZU1pdGVyKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cm9rZVdpZHRoKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0eWxlKExhbmRyb2lkL2dyYXBoaWNzL1BhaW50JFN0eWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VicGl4ZWxUZXh0KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRBbGlnbihMYW5kcm9pZC9ncmFwaGljcy9QYWludCRBbGlnbjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRMb2NhbGUoTGphdmEvdXRpbC9Mb2NhbGU7KVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRMb2NhbGVzKExhbmRyb2lkL29zL0xvY2FsZUxpc3Q7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRTY2FsZVgoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dFNpemUoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dFNrZXdYKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFR5cGVmYWNlKExhbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlOylMYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVbmRlcmxpbmVUZXh0KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFhmZXJtb2RlKExhbmRyb2lkL2dyYXBoaWNzL1hmZXJtb2RlOylMYW5kcm9pZC9ncmFwaGljcy9YZmVybW9kZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkFOVElfQUxJQVNfRkxBRyIvPgotCQk8ZmllbGQgbmFtZT0iREVWX0tFUk5fVEVYVF9GTEFHIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVRIRVJfRkxBRyIvPgotCQk8ZmllbGQgbmFtZT0iRU1CRURERURfQklUTUFQX1RFWFRfRkxBRyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGQUtFX0JPTERfVEVYVF9GTEFHIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUxURVJfQklUTUFQX0ZMQUciLz4KLQkJPGZpZWxkIG5hbWU9IkhJTlRJTkdfT0ZGIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkhJTlRJTkdfT04iIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iTElORUFSX1RFWFRfRkxBRyIvPgotCQk8ZmllbGQgbmFtZT0iU1RSSUtFX1RIUlVfVEVYVF9GTEFHIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUJQSVhFTF9URVhUX0ZMQUciLz4KLQkJPGZpZWxkIG5hbWU9IlVOREVSTElORV9URVhUX0ZMQUciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1BhaW50JEFsaWduIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkQWxpZ247Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkQWxpZ247Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5URVIiLz4KLQkJPGZpZWxkIG5hbWU9IkxFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IlJJR0hUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9QYWludCRDYXAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9ncmFwaGljcy9QYWludCRDYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkQ2FwOyIvPgotCQk8ZmllbGQgbmFtZT0iQlVUVCIvPgotCQk8ZmllbGQgbmFtZT0iUk9VTkQiLz4KLQkJPGZpZWxkIG5hbWU9IlNRVUFSRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkRm9udE1ldHJpY3MiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iYXNjZW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJib3R0b20iLz4KLQkJPGZpZWxkIG5hbWU9ImRlc2NlbnQiLz4KLQkJPGZpZWxkIG5hbWU9ImxlYWRpbmciLz4KLQkJPGZpZWxkIG5hbWU9InRvcCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkRm9udE1ldHJpY3NJbnQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iYXNjZW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJib3R0b20iLz4KLQkJPGZpZWxkIG5hbWU9ImRlc2NlbnQiLz4KLQkJPGZpZWxkIG5hbWU9ImxlYWRpbmciLz4KLQkJPGZpZWxkIG5hbWU9InRvcCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkSm9pbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL1BhaW50JEpvaW47Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkSm9pbjsiLz4KLQkJPGZpZWxkIG5hbWU9IkJFVkVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iUk9VTkQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1BhaW50JFN0eWxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkU3R5bGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkU3R5bGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGSUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUxMX0FORF9TVFJPS0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUk9LRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUGFpbnRGbGFnc0RyYXdGaWx0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9EcmF3RmlsdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1BhdGgiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9QYXRoOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQXJjKEZGRkZGRilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBcmMoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdEY7RkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZENpcmNsZShGRkZMYW5kcm9pZC9ncmFwaGljcy9QYXRoJERpcmVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE92YWwoRkZGRkxhbmRyb2lkL2dyYXBoaWNzL1BhdGgkRGlyZWN0aW9uOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRPdmFsKExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGO0xhbmRyb2lkL2dyYXBoaWNzL1BhdGgkRGlyZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUGF0aChMYW5kcm9pZC9ncmFwaGljcy9QYXRoOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUGF0aChMYW5kcm9pZC9ncmFwaGljcy9QYXRoO0ZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRQYXRoKExhbmRyb2lkL2dyYXBoaWNzL1BhdGg7TGFuZHJvaWQvZ3JhcGhpY3MvTWF0cml4OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUmVjdChGRkZGTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aCREaXJlY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGO0xhbmRyb2lkL2dyYXBoaWNzL1BhdGgkRGlyZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUm91bmRSZWN0KEZGRkZGRkxhbmRyb2lkL2dyYXBoaWNzL1BhdGgkRGlyZWN0aW9uOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSb3VuZFJlY3QoRkZGRltGTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aCREaXJlY3Rpb247KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFJvdW5kUmVjdChMYW5kcm9pZC9ncmFwaGljcy9SZWN0RjtGRkxhbmRyb2lkL2dyYXBoaWNzL1BhdGgkRGlyZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUm91bmRSZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGO1tGTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aCREaXJlY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHByb3hpbWF0ZShGKVtGIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcmNUbyhGRkZGRkZaKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFyY1RvKExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGO0ZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcmNUbyhMYW5kcm9pZC9ncmFwaGljcy9SZWN0RjtGRlopViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcHV0ZUJvdW5kcyhMYW5kcm9pZC9ncmFwaGljcy9SZWN0RjtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjdWJpY1RvKEZGRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsbFR5cGUoKUxhbmRyb2lkL2dyYXBoaWNzL1BhdGgkRmlsbFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5jUmVzZXJ2ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbnZleCgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbXB0eSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW52ZXJzZUZpbGxUeXBlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGluZVRvKEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtb3ZlVG8oRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9mZnNldChGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2Zmc2V0KEZGTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9wKExhbmRyb2lkL2dyYXBoaWNzL1BhdGg7TGFuZHJvaWQvZ3JhcGhpY3MvUGF0aCRPcDspWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3AoTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDtMYW5kcm9pZC9ncmFwaGljcy9QYXRoO0xhbmRyb2lkL2dyYXBoaWNzL1BhdGgkT3A7KVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InF1YWRUbyhGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyQ3ViaWNUbyhGRkZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InJMaW5lVG8oRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InJNb3ZlVG8oRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InJRdWFkVG8oRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXdpbmQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZpbGxUeXBlKExhbmRyb2lkL2dyYXBoaWNzL1BhdGgkRmlsbFR5cGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYXN0UG9pbnQoRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InRvZ2dsZUludmVyc2VGaWxsVHlwZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InRyYW5zZm9ybShMYW5kcm9pZC9ncmFwaGljcy9NYXRyaXg7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFuc2Zvcm0oTGFuZHJvaWQvZ3JhcGhpY3MvTWF0cml4O0xhbmRyb2lkL2dyYXBoaWNzL1BhdGg7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1BhdGgkRGlyZWN0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aCREaXJlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aCREaXJlY3Rpb247Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQ1ciLz4KLQkJPGZpZWxkIG5hbWU9IkNXIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9QYXRoJEZpbGxUeXBlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aCRGaWxsVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9ncmFwaGljcy9QYXRoJEZpbGxUeXBlOyIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTl9PREQiLz4KLQkJPGZpZWxkIG5hbWU9IklOVkVSU0VfRVZFTl9PREQiLz4KLQkJPGZpZWxkIG5hbWU9IklOVkVSU0VfV0lORElORyIvPgotCQk8ZmllbGQgbmFtZT0iV0lORElORyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUGF0aCRPcCIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9ncmFwaGljcy9QYXRoJE9wOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2dyYXBoaWNzL1BhdGgkT3A7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESUZGRVJFTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlNFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IlJFVkVSU0VfRElGRkVSRU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iVU5JT04iLz4KLQkJPGZpZWxkIG5hbWU9IlhPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUGF0aERhc2hQYXRoRWZmZWN0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUGF0aEVmZmVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9QYXRoO0ZGTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aERhc2hQYXRoRWZmZWN0JFN0eWxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9QYXRoRGFzaFBhdGhFZmZlY3QkU3R5bGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9ncmFwaGljcy9QYXRoRGFzaFBhdGhFZmZlY3QkU3R5bGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aERhc2hQYXRoRWZmZWN0JFN0eWxlOyIvPgotCQk8ZmllbGQgbmFtZT0iTU9SUEgiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVEFURSIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNMQVRFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9QYXRoRWZmZWN0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1BhdGhNZWFzdXJlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZW5ndGgoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXRyaXgoRkxhbmRyb2lkL2dyYXBoaWNzL01hdHJpeDtJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3NUYW4oRltGW0YpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlZ21lbnQoRkZMYW5kcm9pZC9ncmFwaGljcy9QYXRoO1opWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2xvc2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dENvbnRvdXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXRoKExhbmRyb2lkL2dyYXBoaWNzL1BhdGg7WilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT1NJVElPTl9NQVRSSVhfRkxBRyIvPgotCQk8ZmllbGQgbmFtZT0iVEFOR0VOVF9NQVRSSVhfRkxBRyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUGljdHVyZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL1BpY3R1cmU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiZWdpblJlY29yZGluZyhJSSlMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRnJvbVN0cmVhbShMamF2YS9pby9JbnB1dFN0cmVhbTspTGFuZHJvaWQvZ3JhcGhpY3MvUGljdHVyZTsiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhdyhMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRSZWNvcmRpbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVpcmVzSGFyZHdhcmVBY2NlbGVyYXRpb24oKVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVG9TdHJlYW0oTGphdmEvaW8vT3V0cHV0U3RyZWFtOylWIiBkZXByZWNhdGVkPSIxOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUGl4ZWxGb3JtYXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdEhhc0FscGhhKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBpeGVsRm9ybWF0SW5mbyhJTGFuZHJvaWQvZ3JhcGhpY3MvUGl4ZWxGb3JtYXQ7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFfOCIgZGVwcmVjYXRlZD0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkpQRUciIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMQV84OCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkxfOCIgZGVwcmVjYXRlZD0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QQVFVRSIvPgotCQk8ZmllbGQgbmFtZT0iUkdCQV8xMDEwMTAyIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJHQkFfNDQ0NCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlJHQkFfNTU1MSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlJHQkFfODg4OCIvPgotCQk8ZmllbGQgbmFtZT0iUkdCQV9GMTYiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUkdCWF84ODg4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSR0JfMzMyIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUkdCXzU2NSIvPgotCQk8ZmllbGQgbmFtZT0iUkdCXzg4OCIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNMVUNFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TUEFSRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJZQ2JDcl80MjBfU1AiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJZQ2JDcl80MjJfSSIgc2luY2U9IjUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJZQ2JDcl80MjJfU1AiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJiaXRzUGVyUGl4ZWwiLz4KLQkJPGZpZWxkIG5hbWU9ImJ5dGVzUGVyUGl4ZWwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1BpeGVsWG9yWGZlcm1vZGUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1hmZXJtb2RlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUG9pbnQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiIHNpbmNlPSIxMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL1BvaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXF1YWxzKElJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZWdhdGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZmZzZXQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRGcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjEzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KElJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0ieCIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUG9pbnRGIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIiBzaW5jZT0iMTMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9Qb2ludDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVxdWFscyhGRilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGVuZ3RoKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGVuZ3RoKEZGKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZWdhdGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZmZzZXQoRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRGcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjEzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGFuZHJvaWQvZ3JhcGhpY3MvUG9pbnRGOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IngiLz4KLQkJPGZpZWxkIG5hbWU9InkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkFERCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTEVBUiIvPgotCQk8ZmllbGQgbmFtZT0iREFSS0VOIi8+Ci0JCTxmaWVsZCBuYW1lPSJEU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkRTVF9BVE9QIi8+Ci0JCTxmaWVsZCBuYW1lPSJEU1RfSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkRTVF9PVVQiLz4KLQkJPGZpZWxkIG5hbWU9IkRTVF9PVkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSUdIVEVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJNVUxUSVBMWSIvPgotCQk8ZmllbGQgbmFtZT0iT1ZFUkxBWSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU4iLz4KLQkJPGZpZWxkIG5hbWU9IlNSQyIvPgotCQk8ZmllbGQgbmFtZT0iU1JDX0FUT1AiLz4KLQkJPGZpZWxkIG5hbWU9IlNSQ19JTiIvPgotCQk8ZmllbGQgbmFtZT0iU1JDX09VVCIvPgotCQk8ZmllbGQgbmFtZT0iU1JDX09WRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlhPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZkNvbG9yRmlsdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvQ29sb3JGaWx0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZlhmZXJtb2RlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvWGZlcm1vZGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9Qb3N0UHJvY2Vzc29yIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Qb3N0UHJvY2VzcyhMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7KUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1JhZGlhbEdyYWRpZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZGRklJTGFuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyJFRpbGVNb2RlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZGRltJW0ZMYW5kcm9pZC9ncmFwaGljcy9TaGFkZXIkVGlsZU1vZGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1Jhc3Rlcml6ZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMSIgcmVtb3ZlZD0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9SZWN0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2VudGVyWCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNlbnRlclkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWlucyhJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnMoSUlJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnMoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImV4YWN0Q2VudGVyWCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImV4YWN0Q2VudGVyWSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImZsYXR0ZW5Ub1N0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9ImhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2V0KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRlcnNlY3QoSUlJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW50ZXJzZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRlcnNlY3RzKElJSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImludGVyc2VjdHMoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbXB0eSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9mZnNldChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2Zmc2V0VG8oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRGcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldChJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVtcHR5KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZXJzZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNvcnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1Nob3J0U3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5mbGF0dGVuRnJvbVN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDsiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5pb24oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InVuaW9uKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InVuaW9uKExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aWR0aCgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iYm90dG9tIi8+Ci0JCTxmaWVsZCBuYW1lPSJsZWZ0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJyaWdodCIvPgotCQk8ZmllbGQgbmFtZT0idG9wIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9SZWN0RiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdEY7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjZW50ZXJYKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2VudGVyWSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zKEZGKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWlucyhGRkZGKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWlucyhMYW5kcm9pZC9ncmFwaGljcy9SZWN0RjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImhlaWdodCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2V0KEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRlcnNlY3QoRkZGRilaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW50ZXJzZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW50ZXJzZWN0cyhGRkZGKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRlcnNlY3RzKExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGO0xhbmRyb2lkL2dyYXBoaWNzL1JlY3RGOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbXB0eSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9mZnNldChGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2Zmc2V0VG8oRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRGcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb3VuZChMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icm91bmRPdXQoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldChGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldChMYW5kcm9pZC9ncmFwaGljcy9SZWN0RjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVtcHR5KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZXJzZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGO0xhbmRyb2lkL2dyYXBoaWNzL1JlY3RGOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic29ydCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InRvU2hvcnRTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5pb24oRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InVuaW9uKEZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InVuaW9uKExhbmRyb2lkL2dyYXBoaWNzL1JlY3RGOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id2lkdGgoKUYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJib3R0b20iLz4KLQkJPGZpZWxkIG5hbWU9ImxlZnQiLz4KLQkJPGZpZWxkIG5hbWU9InJpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0b3AiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9SZWdpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWlucyhJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm91bmRhcnlQYXRoKClMYW5kcm9pZC9ncmFwaGljcy9QYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvdW5kYXJ5UGF0aChMYW5kcm9pZC9ncmFwaGljcy9QYXRoOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm91bmRzKClMYW5kcm9pZC9ncmFwaGljcy9SZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvdW5kcyhMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb21wbGV4KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbXB0eSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVjdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wKElJSUlMYW5kcm9pZC9ncmFwaGljcy9SZWdpb24kT3A7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcChMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0xhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbiRPcDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wKExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7TGFuZHJvaWQvZ3JhcGhpY3MvUmVnaW9uO0xhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbiRPcDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wKExhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbjtMYW5kcm9pZC9ncmFwaGljcy9SZWdpb24kT3A7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcChMYW5kcm9pZC9ncmFwaGljcy9SZWdpb247TGFuZHJvaWQvZ3JhcGhpY3MvUmVnaW9uO0xhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbiRPcDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InF1aWNrQ29udGFpbnMoSUlJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icXVpY2tDb250YWlucyhMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icXVpY2tSZWplY3QoSUlJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icXVpY2tSZWplY3QoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InF1aWNrUmVqZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldChJSUlJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldChMYW5kcm9pZC9ncmFwaGljcy9SZWdpb247KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbXB0eSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhdGgoTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDtMYW5kcm9pZC9ncmFwaGljcy9SZWdpb247KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFuc2xhdGUoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InRyYW5zbGF0ZShJSUxhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9InVuaW9uKExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVoiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbiRPcCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbiRPcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9ncmFwaGljcy9SZWdpb24kT3A7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESUZGRVJFTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlNFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUExBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlJFVkVSU0VfRElGRkVSRU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iVU5JT04iLz4KLQkJPGZpZWxkIG5hbWU9IlhPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUmVnaW9uSXRlcmF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9SZWdpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1NoYWRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsTWF0cml4KExhbmRyb2lkL2dyYXBoaWNzL01hdHJpeDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvY2FsTWF0cml4KExhbmRyb2lkL2dyYXBoaWNzL01hdHJpeDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyJFRpbGVNb2RlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyJFRpbGVNb2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2dyYXBoaWNzL1NoYWRlciRUaWxlTW9kZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNMQU1QIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUEVBVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvU3VtUGF0aEVmZmVjdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1BhdGhFZmZlY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aEVmZmVjdDtMYW5kcm9pZC9ncmFwaGljcy9QYXRoRWZmZWN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9TdXJmYWNlVGV4dHVyZSIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSVopViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFopViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXR0YWNoVG9HTENvbnRleHQoSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRhY2hGcm9tR0xDb250ZXh0KClWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXAoKUoiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYW5zZm9ybU1hdHJpeChbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZWxlYXNlZCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZSgpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZVRleEltYWdlKClWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0QnVmZmVyU2l6ZShJSSlWIiBzaW5jZT0iMTUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkZyYW1lQXZhaWxhYmxlTGlzdGVuZXIoTGFuZHJvaWQvZ3JhcGhpY3MvU3VyZmFjZVRleHR1cmUkT25GcmFtZUF2YWlsYWJsZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25GcmFtZUF2YWlsYWJsZUxpc3RlbmVyKExhbmRyb2lkL2dyYXBoaWNzL1N1cmZhY2VUZXh0dXJlJE9uRnJhbWVBdmFpbGFibGVMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVUZXhJbWFnZSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvU3VyZmFjZVRleHR1cmUkT25GcmFtZUF2YWlsYWJsZUxpc3RlbmVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25GcmFtZUF2YWlsYWJsZShMYW5kcm9pZC9ncmFwaGljcy9TdXJmYWNlVGV4dHVyZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvU3VyZmFjZVRleHR1cmUkT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24iIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9Td2VlcEdyYWRpZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZGSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGRltJW0YpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoTGFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2U7SSlMYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoTGFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2U7SVopTGFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2U7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoTGphdmEvbGFuZy9TdHJpbmc7SSlMYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcm9tQXNzZXQoTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRNYW5hZ2VyO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcm9tRmlsZShMamF2YS9pby9GaWxlOylMYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZTsiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRnJvbUZpbGUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlOyIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWZhdWx0RnJvbVN0eWxlKEkpTGFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3R5bGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWlnaHQoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQm9sZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSXRhbGljKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT0xEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT0xEX0lUQUxJQyIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9CT0xEIi8+Ci0JCTxmaWVsZCBuYW1lPSJJVEFMSUMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTk9TUEFDRSIvPgotCQk8ZmllbGQgbmFtZT0iTk9STUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQU5TX1NFUklGIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJJRiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2UkQnVpbGRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGYWxsYmFjayhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2UkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb250VmFyaWF0aW9uU2V0dGluZ3MoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9udFZhcmlhdGlvblNldHRpbmdzKFtMYW5kcm9pZC9ncmFwaGljcy9mb250cy9Gb250VmFyaWF0aW9uQXhpczspTGFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2UkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJdGFsaWMoWilMYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFR0Y0luZGV4KEkpTGFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2UkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXZWlnaHQoSSlMYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZSRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvWGZlcm1vZGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvWXV2SW1hZ2UiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQklJSVtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wcmVzc1RvSnBlZyhMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0lMamF2YS9pby9PdXRwdXRTdHJlYW07KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpZGVzKClbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpZHRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WXV2RGF0YSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRZdXZGb3JtYXQoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0FkYXB0aXZlSWNvbkRyYXdhYmxlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUkQ2FsbGJhY2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7TGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYWNrZ3JvdW5kKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYUluc2V0RnJhY3Rpb24oKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JlZ3JvdW5kKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJY29uTWFzaygpTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcGFjaXR5KEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvQW5pbWF0YWJsZSIgc2luY2U9IjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSdW5uaW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9BbmltYXRhYmxlMiIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0FuaW1hdGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhckFuaW1hdGlvbkNhbGxiYWNrcygpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQW5pbWF0aW9uQ2FsbGJhY2soTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvQW5pbWF0YWJsZTIkQW5pbWF0aW9uQ2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyQW5pbWF0aW9uQ2FsbGJhY2soTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvQW5pbWF0YWJsZTIkQW5pbWF0aW9uQ2FsbGJhY2s7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0FuaW1hdGFibGUyJEFuaW1hdGlvbkNhbGxiYWNrIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BbmltYXRpb25FbmQoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFuaW1hdGlvblN0YXJ0KExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9BbmltYXRlZEltYWdlRHJhd2FibGUiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9BbmltYXRhYmxlMiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcGVhdENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVwZWF0Q291bnQoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVBFQVRfSU5GSU5JVEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0FuaW1hdGVkU3RhdGVMaXN0RHJhd2FibGUiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvU3RhdGVMaXN0RHJhd2FibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTdGF0ZShbSUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRyYW5zaXRpb24oSUlMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTtaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0FuaW1hdGVkVmVjdG9yRHJhd2FibGUiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9BbmltYXRhYmxlIiByZW1vdmVkPSIyMyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0FuaW1hdGFibGUyIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9BbmltYXRpb25EcmF3YWJsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlQ29udGFpbmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvQW5pbWF0YWJsZSIgc2luY2U9IjQiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL1J1bm5hYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRnJhbWUoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHVyYXRpb24oSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJhbWUoSSlMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1iZXJPZkZyYW1lcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT25lU2hvdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUnVubmluZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uZVNob3QoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9CaXRtYXBEcmF3YWJsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7KVYiIHNpbmNlPSI0IiBkZXByZWNhdGVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylWIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7TGphdmEvaW8vSW5wdXRTdHJlYW07KVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qml0bWFwKClMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3Jhdml0eSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhaW50KClMYW5kcm9pZC9ncmFwaGljcy9QYWludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaWxlTW9kZVgoKUxhbmRyb2lkL2dyYXBoaWNzL1NoYWRlciRUaWxlTW9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaWxlTW9kZVkoKUxhbmRyb2lkL2dyYXBoaWNzL1NoYWRlciRUaWxlTW9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNBbnRpQWxpYXMoKVoiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc01pcE1hcCgpWiIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QW50aUFsaWFzKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyYXZpdHkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWlwTWFwKFopViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFyZ2V0RGVuc2l0eShJKVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFyZ2V0RGVuc2l0eShMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7KVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFyZ2V0RGVuc2l0eShMYW5kcm9pZC91dGlsL0Rpc3BsYXlNZXRyaWNzOylWIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbGVNb2RlWChMYW5kcm9pZC9ncmFwaGljcy9TaGFkZXIkVGlsZU1vZGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaWxlTW9kZVhZKExhbmRyb2lkL2dyYXBoaWNzL1NoYWRlciRUaWxlTW9kZTtMYW5kcm9pZC9ncmFwaGljcy9TaGFkZXIkVGlsZU1vZGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaWxlTW9kZVkoTGFuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyJFRpbGVNb2RlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9DbGlwRHJhd2FibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZSIgcmVtb3ZlZD0iMjMiLz4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZVdyYXBwZXIiIHNpbmNlPSIyMyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlJENhbGxiYWNrIiByZW1vdmVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTtJSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1JJWk9OVEFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJWRVJUSUNBTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvQ29sb3JEcmF3YWJsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFscGhhKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sb3IoKUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbG9yKEkpViIgc2luY2U9IjExIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlUaGVtZShMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMkVGhlbWU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbkFwcGx5VGhlbWUoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQ29sb3JGaWx0ZXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5Qm91bmRzKClMYW5kcm9pZC9ncmFwaGljcy9SZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlCb3VuZHMoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUZyb21QYXRoKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcm9tUmVzb3VyY2VTdHJlYW0oTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzO0xhbmRyb2lkL3V0aWwvVHlwZWRWYWx1ZTtMamF2YS9pby9JbnB1dFN0cmVhbTtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUZyb21SZXNvdXJjZVN0cmVhbShMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7TGFuZHJvaWQvdXRpbC9UeXBlZFZhbHVlO0xqYXZhL2lvL0lucHV0U3RyZWFtO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkkT3B0aW9uczspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iNSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcm9tU3RyZWFtKExqYXZhL2lvL0lucHV0U3RyZWFtO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcm9tWG1sKExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztMb3JnL3htbHB1bGwvdjEvWG1sUHVsbFBhcnNlcjspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRnJvbVhtbChMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7TG9yZy94bWxwdWxsL3YxL1htbFB1bGxQYXJzZXI7TGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzJFRoZW1lOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUZyb21YbWxJbm5lcihMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7TG9yZy94bWxwdWxsL3YxL1htbFB1bGxQYXJzZXI7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUZyb21YbWxJbm5lcihMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7TG9yZy94bWxwdWxsL3YxL1htbFB1bGxQYXJzZXI7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7TGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzJFRoZW1lOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXcoTGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxwaGEoKUkiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvdW5kcygpTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxsYmFjaygpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUkQ2FsbGJhY2s7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFuZ2luZ0NvbmZpZ3VyYXRpb25zKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sb3JGaWx0ZXIoKUxhbmRyb2lkL2dyYXBoaWNzL0NvbG9yRmlsdGVyOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uc3RhbnRTdGF0ZSgpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUkQ29uc3RhbnRTdGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50KClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXJ0eUJvdW5kcygpTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvdHNwb3RCb3VuZHMoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50cmluc2ljSGVpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50cmluc2ljV2lkdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXlvdXREaXJlY3Rpb24oKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExldmVsKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluaW11bUhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbmltdW1XaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9wYWNpdHkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRsaW5lKExhbmRyb2lkL2dyYXBoaWNzL091dGxpbmU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhZGRpbmcoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXRlKClbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYW5zcGFyZW50UmVnaW9uKClMYW5kcm9pZC9ncmFwaGljcy9SZWdpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5mbGF0ZShMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7TG9yZy94bWxwdWxsL3YxL1htbFB1bGxQYXJzZXI7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmZsYXRlKExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztMb3JnL3htbHB1bGwvdjEvWG1sUHVsbFBhcnNlcjtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMkVGhlbWU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImludmFsaWRhdGVTZWxmKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBdXRvTWlycm9yZWQoKVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmlsdGVyQml0bWFwKClaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N0YXRlZnVsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWaXNpYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ianVtcFRvQ3VycmVudFN0YXRlKClWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJtdXRhdGUoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkJvdW5kc0NoYW5nZShMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25MYXlvdXREaXJlY3Rpb25DaGFuZ2VkKEkpWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25MZXZlbENoYW5nZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXRlQ2hhbmdlKFtJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlT3BhY2l0eShJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2NoZWR1bGVTZWxmKExqYXZhL2xhbmcvUnVubmFibGU7SilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxwaGEoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0b01pcnJvcmVkKFopViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qm91bmRzKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJvdW5kcyhMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FsbGJhY2soTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUkQ2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGFuZ2luZ0NvbmZpZ3VyYXRpb25zKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbG9yRmlsdGVyKElMYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmJE1vZGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2xvckZpbHRlcihMYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpdGhlcihaKVYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmlsdGVyQml0bWFwKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhvdHNwb3QoRkYpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG90c3BvdEJvdW5kcyhJSUlJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldExheW91dERpcmVjdGlvbihJKVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldExldmVsKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXRlKFtJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaW50KEkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGludExpc3QoTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbnRNb2RlKExhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlzaWJsZShaWilaIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5zY2hlZHVsZVNlbGYoTGphdmEvbGFuZy9SdW5uYWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUkQ2FsbGJhY2siIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImludmFsaWRhdGVEcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNjaGVkdWxlRHJhd2FibGUoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7TGphdmEvbGFuZy9SdW5uYWJsZTtKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnNjaGVkdWxlRHJhd2FibGUoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7TGphdmEvbGFuZy9SdW5uYWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUkQ29uc3RhbnRTdGF0ZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuQXBwbHlUaGVtZSgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhbmdpbmdDb25maWd1cmF0aW9ucygpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0RyYXdhYmxlKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdEcmF3YWJsZShMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdEcmF3YWJsZShMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7TGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzJFRoZW1lOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGVDb250YWluZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlJENhbGxiYWNrIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VsZWN0RHJhd2FibGUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29uc3RhbnRTdGF0ZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZUNvbnRhaW5lciREcmF3YWJsZUNvbnRhaW5lclN0YXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW50ZXJGYWRlRHVyYXRpb24oSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeGl0RmFkZUR1cmF0aW9uKEkpViIgc2luY2U9IjExIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZUNvbnRhaW5lciREcmF3YWJsZUNvbnRhaW5lclN0YXRlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUkQ29uc3RhbnRTdGF0ZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGVDb250YWluZXIkRHJhd2FibGVDb250YWluZXJTdGF0ZTtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZUNvbnRhaW5lcjtMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZENoaWxkKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuQ29uc3RhbnRTdGF0ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXB1dGVDb25zdGFudFNpemUoKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkKEkpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGlsZENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hpbGRyZW4oKVtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25zdGFudEhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnN0YW50TWluaW11bUhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnN0YW50TWluaW11bVdpZHRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uc3RhbnRQYWRkaW5nKClMYW5kcm9pZC9ncmFwaGljcy9SZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnN0YW50V2lkdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbnRlckZhZGVEdXJhdGlvbigpSSIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhpdEZhZGVEdXJhdGlvbigpSSIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3BhY2l0eSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imdyb3dBcnJheShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb25zdGFudFNpemUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N0YXRlZnVsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29uc3RhbnRTaXplKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVudGVyRmFkZUR1cmF0aW9uKEkpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXhpdEZhZGVEdXJhdGlvbihJKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZhcmlhYmxlUGFkZGluZyhaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlV3JhcHBlciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlJENhbGxiYWNrIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJhd2FibGUoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERyYXdhYmxlKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9HcmFkaWVudERyYXdhYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvR3JhZGllbnREcmF3YWJsZSRPcmllbnRhdGlvbjtbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sb3IoKUxhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sb3JzKClbSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ybmVyUmFkaWkoKVtGIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb3JuZXJSYWRpdXMoKUYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyYWRpZW50Q2VudGVyWCgpRiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3JhZGllbnRDZW50ZXJZKClGIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcmFkaWVudFJhZGl1cygpRiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3JhZGllbnRUeXBlKClJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmllbnRhdGlvbigpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvR3JhZGllbnREcmF3YWJsZSRPcmllbnRhdGlvbjsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNoYXBlKClJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VMZXZlbCgpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sb3IoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sb3IoTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbG9ycyhbSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb3JuZXJSYWRpaShbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29ybmVyUmFkaXVzKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyYWRpZW50Q2VudGVyKEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcmFkaWVudFJhZGl1cyhGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcmFkaWVudFR5cGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3JpZW50YXRpb24oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvR3JhZGllbnREcmF3YWJsZSRPcmllbnRhdGlvbjspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hhcGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2l6ZShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3Ryb2tlKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdHJva2UoSUlGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3Ryb2tlKElMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3Ryb2tlKElMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDtGRilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VMZXZlbChaKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkxJTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkxJTkVBUl9HUkFESUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iT1ZBTCIvPgotCQk8ZmllbGQgbmFtZT0iUkFESUFMX0dSQURJRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNUQU5HTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNXRUVQX0dSQURJRU5UIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9HcmFkaWVudERyYXdhYmxlJE9yaWVudGF0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvR3JhZGllbnREcmF3YWJsZSRPcmllbnRhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9HcmFkaWVudERyYXdhYmxlJE9yaWVudGF0aW9uOyIvPgotCQk8ZmllbGQgbmFtZT0iQkxfVFIiLz4KLQkJPGZpZWxkIG5hbWU9IkJPVFRPTV9UT1AiLz4KLQkJPGZpZWxkIG5hbWU9IkJSX1RMIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRUZUX1JJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJSSUdIVF9MRUZUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUTF9CUiIvPgotCQk8ZmllbGQgbmFtZT0iVE9QX0JPVFRPTSIvPgotCQk8ZmllbGQgbmFtZT0iVFJfQkwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb24iIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVdpdGhBZGFwdGl2ZUJpdG1hcChMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVXaXRoQml0bWFwKExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVXaXRoQ29udGVudFVyaShMYW5kcm9pZC9uZXQvVXJpOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9JY29uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVdpdGhDb250ZW50VXJpKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9JY29uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVdpdGhEYXRhKFtCSUkpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVXaXRoRmlsZVBhdGgoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlV2l0aFJlc291cmNlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlV2l0aFJlc291cmNlKExqYXZhL2xhbmcvU3RyaW5nO0kpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNJZCgpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzUGFja2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmkoKUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkRHJhd2FibGUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkRHJhd2FibGVBc3luYyhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbiRPbkRyYXdhYmxlTG9hZGVkTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWREcmF3YWJsZUFzeW5jKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9vcy9NZXNzYWdlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGludChJKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGludExpc3QoTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7KUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGludE1vZGUoTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9JY29uOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BREFQVElWRV9CSVRNQVAiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9CSVRNQVAiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9EQVRBIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUkVTT1VSQ0UiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9VUkkiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbiRPbkRyYXdhYmxlTG9hZGVkTGlzdGVuZXIiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRyYXdhYmxlTG9hZGVkKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9JbnNldERyYXdhYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGVXcmFwcGVyIiBzaW5jZT0iMjMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZSRDYWxsYmFjayIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7RilWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7RkZGRilWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlO0lJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyYXdhYmxlKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIxOSIgcmVtb3ZlZD0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0xheWVyRHJhd2FibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlJENhbGxiYWNrIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZExheWVyKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kRHJhd2FibGVCeUxheWVySWQoSSlMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kSW5kZXhCeUxheWVySWQoSSlJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb3R0b21QYWRkaW5nKClJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcmF3YWJsZShJKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuZFBhZGRpbmcoKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheWVyR3Jhdml0eShJKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheWVySGVpZ2h0KEkpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5ZXJJbnNldEJvdHRvbShJKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheWVySW5zZXRFbmQoSSlJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXllckluc2V0TGVmdChJKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheWVySW5zZXRSaWdodChJKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheWVySW5zZXRTdGFydChJKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheWVySW5zZXRUb3AoSSlJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXllcldpZHRoKEkpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGVmdFBhZGRpbmcoKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE51bWJlck9mTGF5ZXJzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFkZGluZ01vZGUoKUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJpZ2h0UGFkZGluZygpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhcnRQYWRkaW5nKClJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3BQYWRkaW5nKClJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREcmF3YWJsZShJTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERyYXdhYmxlQnlMYXllcklkKElMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldElkKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYXllckdyYXZpdHkoSUkpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5ZXJIZWlnaHQoSUkpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5ZXJJbnNldChJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5ZXJJbnNldEJvdHRvbShJSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYXllckluc2V0RW5kKElJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldExheWVySW5zZXRMZWZ0KElJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldExheWVySW5zZXRSZWxhdGl2ZShJSUlJSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYXllckluc2V0UmlnaHQoSUkpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5ZXJJbnNldFN0YXJ0KElJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldExheWVySW5zZXRUb3AoSUkpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5ZXJTaXplKElJSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYXllcldpZHRoKElJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9wYWNpdHkoSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYWRkaW5nKElJSUkpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFkZGluZ01vZGUoSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYWRkaW5nUmVsYXRpdmUoSUlJSSlWIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IklOU0VUX1VOREVGSU5FRCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQQURESU5HX01PREVfTkVTVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQURESU5HX01PREVfU1RBQ0siIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvTGV2ZWxMaXN0RHJhd2FibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZUNvbnRhaW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZExldmVsKElJTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL05pbmVQYXRjaERyYXdhYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzO0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtbQkxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztMYW5kcm9pZC9ncmFwaGljcy9OaW5lUGF0Y2g7KVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtbQkxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7TGphdmEvbGFuZy9TdHJpbmc7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL05pbmVQYXRjaDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWludCgpTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFyZ2V0RGVuc2l0eShJKVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFyZ2V0RGVuc2l0eShMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7KVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFyZ2V0RGVuc2l0eShMYW5kcm9pZC91dGlsL0Rpc3BsYXlNZXRyaWNzOylWIiBzaW5jZT0iNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvUGFpbnREcmF3YWJsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1NoYXBlRHJhd2FibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29ybmVyUmFkaWkoW0YpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvcm5lclJhZGl1cyhGKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1BpY3R1cmVEcmF3YWJsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL1BpY3R1cmU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQaWN0dXJlKClMYW5kcm9pZC9ncmFwaGljcy9QaWN0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBpY3R1cmUoTGFuZHJvaWQvZ3JhcGhpY3MvUGljdHVyZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvUmlwcGxlRHJhd2FibGUiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvTGF5ZXJEcmF3YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJhZGl1cygpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sb3IoTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSYWRpdXMoSSlWIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlJBRElVU19BVVRPIiBzaW5jZT0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1JvdGF0ZURyYXdhYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGVXcmFwcGVyIiBzaW5jZT0iMjMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZSRDYWxsYmFjayIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcmF3YWJsZSgpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iMyIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcm9tRGVncmVlcygpRiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGl2b3RYKClGIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQaXZvdFkoKUYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvRGVncmVlcygpRiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQaXZvdFhSZWxhdGl2ZSgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQaXZvdFlSZWxhdGl2ZSgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHJhd2FibGUoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHNpbmNlPSIyMSIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGcm9tRGVncmVlcyhGKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBpdm90WChGKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBpdm90WFJlbGF0aXZlKFopViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGl2b3RZKEYpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGl2b3RZUmVsYXRpdmUoWilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUb0RlZ3JlZXMoRilWIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1NjYWxlRHJhd2FibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZSIgcmVtb3ZlZD0iMjMiLz4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZVdyYXBwZXIiIHNpbmNlPSIyMyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlJENhbGxiYWNrIiByZW1vdmVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTtJRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyYXdhYmxlKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIzIiByZW1vdmVkPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvU2hhcGVEcmF3YWJsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL3NoYXBlcy9TaGFwZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhaW50KClMYW5kcm9pZC9ncmFwaGljcy9QYWludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaGFkZXJGYWN0b3J5KClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9TaGFwZURyYXdhYmxlJFNoYWRlckZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hhcGUoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL3NoYXBlcy9TaGFwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmZsYXRlVGFnKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztMb3JnL3htbHB1bGwvdjEvWG1sUHVsbFBhcnNlcjtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRHJhdyhMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvU2hhcGU7TGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzO0xhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50cmluc2ljSGVpZ2h0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludHJpbnNpY1dpZHRoKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhZGRpbmcoSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFkZGluZyhMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hhZGVyRmFjdG9yeShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9TaGFwZURyYXdhYmxlJFNoYWRlckZhY3Rvcnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaGFwZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvU2hhcGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1NoYXBlRHJhd2FibGUkU2hhZGVyRmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzaXplKElJKUxhbmRyb2lkL2dyYXBoaWNzL1NoYWRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1N0YXRlTGlzdERyYXdhYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGVDb250YWluZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTdGF0ZShbSUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9UcmFuc2l0aW9uRHJhd2FibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9MYXllckRyYXdhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nyb3NzRmFkZUVuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldFRyYW5zaXRpb24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXZlcnNlVHJhbnNpdGlvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDcm9zc0ZhZGVFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0VHJhbnNpdGlvbihJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1ZlY3RvckRyYXdhYmxlIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvQXJjU2hhcGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvUmVjdFNoYXBlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvc2hhcGVzL0FyY1NoYXBlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhcnRBbmdsZSgpRiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3dlZXBBbmdsZSgpRiIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvT3ZhbFNoYXBlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvc2hhcGVzL1JlY3RTaGFwZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvT3ZhbFNoYXBlOyIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvUGF0aFNoYXBlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvc2hhcGVzL1NoYXBlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL1BhdGg7RkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvUGF0aFNoYXBlOyIgc2luY2U9IjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL3NoYXBlcy9SZWN0U2hhcGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvU2hhcGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvc2hhcGVzL1JlY3RTaGFwZTsiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVjdCgpTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdEY7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvUm91bmRSZWN0U2hhcGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvUmVjdFNoYXBlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtGTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdEY7W0YpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvUm91bmRSZWN0U2hhcGU7IiBzaW5jZT0iMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvc2hhcGVzL1NoYXBlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvc2hhcGVzL1NoYXBlOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3KExhbmRyb2lkL2dyYXBoaWNzL0NhbnZhcztMYW5kcm9pZC9ncmFwaGljcy9QYWludDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlaWdodCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE91dGxpbmUoTGFuZHJvaWQvZ3JhcGhpY3MvT3V0bGluZTspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkdGgoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNBbHBoYSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVzaXplKEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNpemUoRkYpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvZm9udHMvRm9udFZhcmlhdGlvbkF4aXMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7RilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbUZvbnRWYXJpYXRpb25TZXR0aW5ncyhMamF2YS9sYW5nL1N0cmluZzspW0xhbmRyb2lkL2dyYXBoaWNzL2ZvbnRzL0ZvbnRWYXJpYXRpb25BeGlzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0eWxlVmFsdWUoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvRm9udFZhcmlhdGlvblNldHRpbmdzKFtMYW5kcm9pZC9ncmFwaGljcy9mb250cy9Gb250VmFyaWF0aW9uQXhpczspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9wZGYvUGRmRG9jdW1lbnQiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaFBhZ2UoTGFuZHJvaWQvZ3JhcGhpY3MvcGRmL1BkZkRvY3VtZW50JFBhZ2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWdlcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0UGFnZShMYW5kcm9pZC9ncmFwaGljcy9wZGYvUGRmRG9jdW1lbnQkUGFnZUluZm87KUxhbmRyb2lkL2dyYXBoaWNzL3BkZi9QZGZEb2N1bWVudCRQYWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVG8oTGphdmEvaW8vT3V0cHV0U3RyZWFtOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9wZGYvUGRmRG9jdW1lbnQkUGFnZSIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzO0xhbmRyb2lkL2dyYXBoaWNzL3BkZi9QZGZEb2N1bWVudCRQYWdlSW5mbzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FudmFzKClMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5mbygpTGFuZHJvaWQvZ3JhcGhpY3MvcGRmL1BkZkRvY3VtZW50JFBhZ2VJbmZvOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvcGRmL1BkZkRvY3VtZW50JFBhZ2VJbmZvIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudFJlY3QoKUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFnZUhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhZ2VOdW1iZXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWdlV2lkdGgoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL3BkZi9QZGZEb2N1bWVudCRQYWdlSW5mbyRCdWlsZGVyIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKClMYW5kcm9pZC9ncmFwaGljcy9wZGYvUGRmRG9jdW1lbnQkUGFnZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGVudFJlY3QoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspTGFuZHJvaWQvZ3JhcGhpY3MvcGRmL1BkZkRvY3VtZW50JFBhZ2VJbmZvJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9wZGYvUGRmUmVuZGVyZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWdlQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuUGFnZShJKUxhbmRyb2lkL2dyYXBoaWNzL3BkZi9QZGZSZW5kZXJlciRQYWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNob3VsZFNjYWxlRm9yUHJpbnRpbmcoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL3BkZi9QZGZSZW5kZXJlciRQYWdlIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BdXRvQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL3BkZi9QZGZSZW5kZXJlcjspViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvcGRmL1BkZlJlbmRlcmVyO0kpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGVpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbmRlcihMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtMYW5kcm9pZC9ncmFwaGljcy9NYXRyaXg7SSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRU5ERVJfTU9ERV9GT1JfRElTUExBWSIvPgotCQk8ZmllbGQgbmFtZT0iUkVOREVSX01PREVfRk9SX1BSSU5UIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDYWxsYmFja0J1ZmZlcihbQilWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImF1dG9Gb2N1cyhMYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkQXV0b0ZvY3VzQ2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWxBdXRvRm9jdXMoKVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlU2h1dHRlclNvdW5kKFopWiIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FtZXJhSW5mbyhJTGFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhJENhbWVyYUluZm87KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtYmVyT2ZDYW1lcmFzKClJIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtZXRlcnMoKUxhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYSRQYXJhbWV0ZXJzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvY2soKVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbigpTGFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW4oSSlMYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmE7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InJlY29ubmVjdCgpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0b0ZvY3VzTW92ZUNhbGxiYWNrKExhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYSRBdXRvRm9jdXNNb3ZlQ2FsbGJhY2s7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXlPcmllbnRhdGlvbihJKVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXJyb3JDYWxsYmFjayhMYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkRXJyb3JDYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZhY2VEZXRlY3Rpb25MaXN0ZW5lcihMYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkRmFjZURldGVjdGlvbkxpc3RlbmVyOylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbmVTaG90UHJldmlld0NhbGxiYWNrKExhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYSRQcmV2aWV3Q2FsbGJhY2s7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyYW1ldGVycyhMYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkUGFyYW1ldGVyczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZXZpZXdDYWxsYmFjayhMYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkUHJldmlld0NhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJldmlld0NhbGxiYWNrV2l0aEJ1ZmZlcihMYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkUHJldmlld0NhbGxiYWNrOylWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZXZpZXdEaXNwbGF5KExhbmRyb2lkL3ZpZXcvU3VyZmFjZUhvbGRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZXZpZXdUZXh0dXJlKExhbmRyb2lkL2dyYXBoaWNzL1N1cmZhY2VUZXh0dXJlOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRab29tQ2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhJE9uWm9vbUNoYW5nZUxpc3RlbmVyOylWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0RmFjZURldGVjdGlvbigpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRQcmV2aWV3KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRTbW9vdGhab29tKEkpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wRmFjZURldGVjdGlvbigpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcFByZXZpZXcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wU21vb3RoWm9vbSgpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0YWtlUGljdHVyZShMYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkU2h1dHRlckNhbGxiYWNrO0xhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYSRQaWN0dXJlQ2FsbGJhY2s7TGFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhJFBpY3R1cmVDYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9InRha2VQaWN0dXJlKExhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYSRTaHV0dGVyQ2FsbGJhY2s7TGFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhJFBpY3R1cmVDYWxsYmFjaztMYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkUGljdHVyZUNhbGxiYWNrO0xhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYSRQaWN0dXJlQ2FsbGJhY2s7KVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5sb2NrKClWIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX05FV19QSUNUVVJFIiBzaW5jZT0iMTQiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTkVXX1ZJREVPIiBzaW5jZT0iMTQiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQU1FUkFfRVJST1JfRVZJQ1RFRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQU1FUkFfRVJST1JfU0VSVkVSX0RJRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTUVSQV9FUlJPUl9VTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkQXJlYSIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtJKVYiLz4KLQkJPGZpZWxkIG5hbWU9InJlY3QiLz4KLQkJPGZpZWxkIG5hbWU9IndlaWdodCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhJEF1dG9Gb2N1c0NhbGxiYWNrIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BdXRvRm9jdXMoWkxhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhJEF1dG9Gb2N1c01vdmVDYWxsYmFjayIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF1dG9Gb2N1c01vdmluZyhaTGFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkQ2FtZXJhSW5mbyIgc2luY2U9IjkiIGRlcHJlY2F0ZWQ9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ0FNRVJBX0ZBQ0lOR19CQUNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQU1FUkFfRkFDSU5HX0ZST05UIi8+Ci0JCTxmaWVsZCBuYW1lPSJjYW5EaXNhYmxlU2h1dHRlclNvdW5kIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9ImZhY2luZyIvPgotCQk8ZmllbGQgbmFtZT0ib3JpZW50YXRpb24iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYSRFcnJvckNhbGxiYWNrIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25FcnJvcihJTGFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkRmFjZSIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImlkIi8+Ci0JCTxmaWVsZCBuYW1lPSJsZWZ0RXllIi8+Ci0JCTxmaWVsZCBuYW1lPSJtb3V0aCIvPgotCQk8ZmllbGQgbmFtZT0icmVjdCIvPgotCQk8ZmllbGQgbmFtZT0icmlnaHRFeWUiLz4KLQkJPGZpZWxkIG5hbWU9InNjb3JlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkRmFjZURldGVjdGlvbkxpc3RlbmVyIiBzaW5jZT0iMTQiIGRlcHJlY2F0ZWQ9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRmFjZURldGVjdGlvbihbTGFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhJEZhY2U7TGFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkT25ab29tQ2hhbmdlTGlzdGVuZXIiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblpvb21DaGFuZ2UoSVpMYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmE7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYSRQYXJhbWV0ZXJzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZsYXR0ZW4oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW50aWJhbmRpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRvRXhwb3N1cmVMb2NrKClaIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRvV2hpdGVCYWxhbmNlTG9jaygpWiIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sb3JFZmZlY3QoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHBvc3VyZUNvbXBlbnNhdGlvbigpSSIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHBvc3VyZUNvbXBlbnNhdGlvblN0ZXAoKUYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rmxhc2hNb2RlKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9jYWxMZW5ndGgoKUYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9jdXNBcmVhcygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9jdXNEaXN0YW5jZXMoW0YpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb2N1c01vZGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3Jpem9udGFsVmlld0FuZ2xlKClGIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludChMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEpwZWdRdWFsaXR5KClJIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEpwZWdUaHVtYm5haWxRdWFsaXR5KClJIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEpwZWdUaHVtYm5haWxTaXplKClMYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkU2l6ZTsiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4RXhwb3N1cmVDb21wZW5zYXRpb24oKUkiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4TnVtRGV0ZWN0ZWRGYWNlcygpSSIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4TnVtRm9jdXNBcmVhcygpSSIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4TnVtTWV0ZXJpbmdBcmVhcygpSSIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4Wm9vbSgpSSIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXRlcmluZ0FyZWFzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5FeHBvc3VyZUNvbXBlbnNhdGlvbigpSSIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQaWN0dXJlRm9ybWF0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGljdHVyZVNpemUoKUxhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYSRTaXplOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWZlcnJlZFByZXZpZXdTaXplRm9yVmlkZW8oKUxhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYSRTaXplOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJldmlld0Zvcm1hdCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZXZpZXdGcHNSYW5nZShbSSlWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZXZpZXdGcmFtZVJhdGUoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJldmlld1NpemUoKUxhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYSRTaXplOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjZW5lTW9kZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZEFudGliYW5kaW5nKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZENvbG9yRWZmZWN0cygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRGbGFzaE1vZGVzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZEZvY3VzTW9kZXMoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VwcG9ydGVkSnBlZ1RodW1ibmFpbFNpemVzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZFBpY3R1cmVGb3JtYXRzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZFBpY3R1cmVTaXplcygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRQcmV2aWV3Rm9ybWF0cygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRQcmV2aWV3RnBzUmFuZ2UoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VwcG9ydGVkUHJldmlld0ZyYW1lUmF0ZXMoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZFByZXZpZXdTaXplcygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRTY2VuZU1vZGVzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZFZpZGVvU2l6ZXMoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZFdoaXRlQmFsYW5jZSgpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZXJ0aWNhbFZpZXdBbmdsZSgpRiIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWRlb1N0YWJpbGl6YXRpb24oKVoiIHNpbmNlPSIxNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdoaXRlQmFsYW5jZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFpvb20oKUkiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Wm9vbVJhdGlvcygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0F1dG9FeHBvc3VyZUxvY2tTdXBwb3J0ZWQoKVoiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXV0b1doaXRlQmFsYW5jZUxvY2tTdXBwb3J0ZWQoKVoiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU21vb3RoWm9vbVN1cHBvcnRlZCgpWiIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZpZGVvU25hcHNob3RTdXBwb3J0ZWQoKVoiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmlkZW9TdGFiaWxpemF0aW9uU3VwcG9ydGVkKClaIiBzaW5jZT0iMTUiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1pvb21TdXBwb3J0ZWQoKVoiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlR3BzRGF0YSgpViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QW50aWJhbmRpbmcoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0b0V4cG9zdXJlTG9jayhaKVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dG9XaGl0ZUJhbGFuY2VMb2NrKFopViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sb3JFZmZlY3QoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXhwb3N1cmVDb21wZW5zYXRpb24oSSlWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZsYXNoTW9kZShMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb2N1c0FyZWFzKExqYXZhL3V0aWwvTGlzdDspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9jdXNNb2RlKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdwc0FsdGl0dWRlKEQpViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcHNMYXRpdHVkZShEKVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R3BzTG9uZ2l0dWRlKEQpViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcHNQcm9jZXNzaW5nTWV0aG9kKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdwc1RpbWVzdGFtcChKKVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SnBlZ1F1YWxpdHkoSSlWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEpwZWdUaHVtYm5haWxRdWFsaXR5KEkpViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRKcGVnVGh1bWJuYWlsU2l6ZShJSSlWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1ldGVyaW5nQXJlYXMoTGphdmEvdXRpbC9MaXN0OylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQaWN0dXJlRm9ybWF0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBpY3R1cmVTaXplKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmV2aWV3Rm9ybWF0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZXZpZXdGcHNSYW5nZShJSSlWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZXZpZXdGcmFtZVJhdGUoSSlWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZXZpZXdTaXplKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWNvcmRpbmdIaW50KFopViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Um90YXRpb24oSSlWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjZW5lTW9kZShMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWRlb1N0YWJpbGl6YXRpb24oWilWIiBzaW5jZT0iMTUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXaGl0ZUJhbGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Wm9vbShJKVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5mbGF0dGVuKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTlRJQkFORElOR181MEhaIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQU5USUJBTkRJTkdfNjBIWiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkFOVElCQU5ESU5HX0FVVE8iIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTlRJQkFORElOR19PRkYiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfQVFVQSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9CTEFDS0JPQVJEIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX01PTk8iIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfTkVHQVRJVkUiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfTk9ORSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9QT1NURVJJWkUiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfU0VQSUEiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfU09MQVJJWkUiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfV0hJVEVCT0FSRCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQVNIX01PREVfQVVUTyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQVNIX01PREVfT0ZGIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBU0hfTU9ERV9PTiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQVNIX01PREVfUkVEX0VZRSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQVNIX01PREVfVE9SQ0giIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT0NVU19ESVNUQU5DRV9GQVJfSU5ERVgiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT0NVU19ESVNUQU5DRV9ORUFSX0lOREVYIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iRk9DVVNfRElTVEFOQ0VfT1BUSU1BTF9JTkRFWCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IkZPQ1VTX01PREVfQVVUTyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkZPQ1VTX01PREVfQ09OVElOVU9VU19QSUNUVVJFIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkZPQ1VTX01PREVfQ09OVElOVU9VU19WSURFTyIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IkZPQ1VTX01PREVfRURPRiIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZPQ1VTX01PREVfRklYRUQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT0NVU19NT0RFX0lORklOSVRZIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRk9DVVNfTU9ERV9NQUNSTyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVZJRVdfRlBTX01BWF9JTkRFWCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVZJRVdfRlBTX01JTl9JTkRFWCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IlNDRU5FX01PREVfQUNUSU9OIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iU0NFTkVfTU9ERV9BVVRPIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iU0NFTkVfTU9ERV9CQVJDT0RFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iU0NFTkVfTU9ERV9CRUFDSCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlNDRU5FX01PREVfQ0FORExFTElHSFQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0VORV9NT0RFX0ZJUkVXT1JLUyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlNDRU5FX01PREVfSERSIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IlNDRU5FX01PREVfTEFORFNDQVBFIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iU0NFTkVfTU9ERV9OSUdIVCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlNDRU5FX01PREVfTklHSFRfUE9SVFJBSVQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0VORV9NT0RFX1BBUlRZIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iU0NFTkVfTU9ERV9QT1JUUkFJVCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlNDRU5FX01PREVfU05PVyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlNDRU5FX01PREVfU1BPUlRTIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iU0NFTkVfTU9ERV9TVEVBRFlQSE9UTyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlNDRU5FX01PREVfU1VOU0VUIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iU0NFTkVfTU9ERV9USEVBVFJFIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iV0hJVEVfQkFMQU5DRV9BVVRPIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iV0hJVEVfQkFMQU5DRV9DTE9VRFlfREFZTElHSFQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSElURV9CQUxBTkNFX0RBWUxJR0hUIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iV0hJVEVfQkFMQU5DRV9GTFVPUkVTQ0VOVCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IldISVRFX0JBTEFOQ0VfSU5DQU5ERVNDRU5UIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iV0hJVEVfQkFMQU5DRV9TSEFERSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IldISVRFX0JBTEFOQ0VfVFdJTElHSFQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSElURV9CQUxBTkNFX1dBUk1fRkxVT1JFU0NFTlQiIHNpbmNlPSI1Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEkUGljdHVyZUNhbGxiYWNrIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QaWN0dXJlVGFrZW4oW0JMYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmE7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYSRQcmV2aWV3Q2FsbGJhY2siIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByZXZpZXdGcmFtZShbQkxhbmRyb2lkL2hhcmR3YXJlL0NhbWVyYTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhJFNodXR0ZXJDYWxsYmFjayIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2h1dHRlcigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhJFNpemUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhO0lJKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImhlaWdodCIvPgotCQk8ZmllbGQgbmFtZT0id2lkdGgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL0NvbnN1bWVySXJNYW5hZ2VyIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FycmllckZyZXF1ZW5jaWVzKClbTGFuZHJvaWQvaGFyZHdhcmUvQ29uc3VtZXJJck1hbmFnZXIkQ2FycmllckZyZXF1ZW5jeVJhbmdlOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0lyRW1pdHRlcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9InRyYW5zbWl0KElbSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9Db25zdW1lcklyTWFuYWdlciRDYXJyaWVyRnJlcXVlbmN5UmFuZ2UiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaGFyZHdhcmUvQ29uc3VtZXJJck1hbmFnZXI7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heEZyZXF1ZW5jeSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbkZyZXF1ZW5jeSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvR2VvbWFnbmV0aWNGaWVsZCIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZGRkopViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2xpbmF0aW9uKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmllbGRTdHJlbmd0aCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvcml6b250YWxTdHJlbmd0aCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluY2xpbmF0aW9uKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFkoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRaKClGIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9IYXJkd2FyZUJ1ZmZlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKElJSUlKKUxhbmRyb2lkL2hhcmR3YXJlL0hhcmR3YXJlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcm1hdCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheWVycygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzYWdlKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nsb3NlZCgpWiIvPgotCQk8ZmllbGQgbmFtZT0iQkxPQiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRFNfMjRVSTgiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRFNfRlAzMlVJOCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEXzE2IiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRfMjQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRF9GUDMyIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlJHQkFfMTAxMDEwMiIvPgotCQk8ZmllbGQgbmFtZT0iUkdCQV84ODg4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSR0JBX0ZQMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlJHQlhfODg4OCIvPgotCQk8ZmllbGQgbmFtZT0iUkdCXzU2NSIvPgotCQk8ZmllbGQgbmFtZT0iUkdCXzg4OCIvPgotCQk8ZmllbGQgbmFtZT0iU19VSTgiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVVNBR0VfQ1BVX1JFQURfT0ZURU4iLz4KLQkJPGZpZWxkIG5hbWU9IlVTQUdFX0NQVV9SRUFEX1JBUkVMWSIvPgotCQk8ZmllbGQgbmFtZT0iVVNBR0VfQ1BVX1dSSVRFX09GVEVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9DUFVfV1JJVEVfUkFSRUxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9HUFVfQ09MT1JfT1VUUFVUIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9HUFVfQ1VCRV9NQVAiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVVNBR0VfR1BVX0RBVEFfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9HUFVfTUlQTUFQX0NPTVBMRVRFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQUdFX0dQVV9TQU1QTEVEX0lNQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9QUk9URUNURURfQ09OVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iVVNBR0VfU0VOU09SX0RJUkVDVF9EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9WSURFT19FTkNPREUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL1NlbnNvciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rmlmb01heEV2ZW50Q291bnQoKUkiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpZm9SZXNlcnZlZEV2ZW50Q291bnQoKUkiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpZ2hlc3REaXJlY3RSZXBvcnRSYXRlTGV2ZWwoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhEZWxheSgpSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4aW11bVJhbmdlKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluRGVsYXkoKUkiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG93ZXIoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXBvcnRpbmdNb2RlKClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNvbHV0aW9uKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nVHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjAiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVuZG9yKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZXJzaW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBZGRpdGlvbmFsSW5mb1N1cHBvcnRlZCgpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEaXJlY3RDaGFubmVsVHlwZVN1cHBvcnRlZChJKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRHluYW1pY1NlbnNvcigpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXYWtlVXBTZW5zb3IoKVoiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUkVQT1JUSU5HX01PREVfQ09OVElOVU9VUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVBPUlRJTkdfTU9ERV9PTkVfU0hPVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVBPUlRJTkdfTU9ERV9PTl9DSEFOR0UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUkVQT1JUSU5HX01PREVfU1BFQ0lBTF9UUklHR0VSIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUklOR19UWVBFX0FDQ0VMRVJPTUVURVIiIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iU1RSSU5HX1RZUEVfQUNDRUxFUk9NRVRFUl9VTkNBTElCUkFURUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iU1RSSU5HX1RZUEVfQU1CSUVOVF9URU1QRVJBVFVSRSIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJTkdfVFlQRV9HQU1FX1JPVEFUSU9OX1ZFQ1RPUiIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJTkdfVFlQRV9HRU9NQUdORVRJQ19ST1RBVElPTl9WRUNUT1IiIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iU1RSSU5HX1RZUEVfR1JBVklUWSIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJTkdfVFlQRV9HWVJPU0NPUEUiIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iU1RSSU5HX1RZUEVfR1lST1NDT1BFX1VOQ0FMSUJSQVRFRCIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJTkdfVFlQRV9IRUFSVF9CRUFUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUklOR19UWVBFX0hFQVJUX1JBVEUiIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iU1RSSU5HX1RZUEVfTElHSFQiIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iU1RSSU5HX1RZUEVfTElORUFSX0FDQ0VMRVJBVElPTiIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJTkdfVFlQRV9MT1dfTEFURU5DWV9PRkZCT0RZX0RFVEVDVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJTkdfVFlQRV9NQUdORVRJQ19GSUVMRCIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJTkdfVFlQRV9NQUdORVRJQ19GSUVMRF9VTkNBTElCUkFURUQiIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iU1RSSU5HX1RZUEVfTU9USU9OX0RFVEVDVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJTkdfVFlQRV9PUklFTlRBVElPTiIgc2luY2U9IjIwIiBkZXByZWNhdGVkPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iU1RSSU5HX1RZUEVfUE9TRV82RE9GIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUklOR19UWVBFX1BSRVNTVVJFIiBzaW5jZT0iMjAiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUklOR19UWVBFX1BST1hJTUlUWSIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJTkdfVFlQRV9SRUxBVElWRV9IVU1JRElUWSIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJTkdfVFlQRV9ST1RBVElPTl9WRUNUT1IiIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iU1RSSU5HX1RZUEVfU0lHTklGSUNBTlRfTU9USU9OIiBzaW5jZT0iMjAiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUklOR19UWVBFX1NUQVRJT05BUllfREVURUNUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUklOR19UWVBFX1NURVBfQ09VTlRFUiIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJTkdfVFlQRV9TVEVQX0RFVEVDVE9SIiBzaW5jZT0iMjAiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUklOR19UWVBFX1RFTVBFUkFUVVJFIiBzaW5jZT0iMjAiIGRlcHJlY2F0ZWQ9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FDQ0VMRVJPTUVURVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQUNDRUxFUk9NRVRFUl9VTkNBTElCUkFURUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BTEwiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQU1CSUVOVF9URU1QRVJBVFVSRSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0RFVklDRV9QUklWQVRFX0JBU0UiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9HQU1FX1JPVEFUSU9OX1ZFQ1RPUiIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0dFT01BR05FVElDX1JPVEFUSU9OX1ZFQ1RPUiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0dSQVZJVFkiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0dZUk9TQ09QRSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9HWVJPU0NPUEVfVU5DQUxJQlJBVEVEIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSEVBUlRfQkVBVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0hFQVJUX1JBVEUiIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9MSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9MSU5FQVJfQUNDRUxFUkFUSU9OIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9MT1dfTEFURU5DWV9PRkZCT0RZX0RFVEVDVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX01BR05FVElDX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX01BR05FVElDX0ZJRUxEX1VOQ0FMSUJSQVRFRCIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX01PVElPTl9ERVRFQ1QiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9PUklFTlRBVElPTiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUE9TRV82RE9GIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUFJFU1NVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUFJPWElNSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1JFTEFUSVZFX0hVTUlESVRZIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUk9UQVRJT05fVkVDVE9SIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9TSUdOSUZJQ0FOVF9NT1RJT04iIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9TVEFUSU9OQVJZX0RFVEVDVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NURVBfQ09VTlRFUiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NURVBfREVURUNUT1IiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9URU1QRVJBVFVSRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL1NlbnNvckFkZGl0aW9uYWxJbmZvIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3I7SUlbSVtGKVYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9GUkFNRV9CRUdJTiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9GUkFNRV9FTkQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSU5URVJOQUxfVEVNUEVSQVRVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfU0FNUExJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfU0VOU09SX1BMQUNFTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9VTlRSQUNLRURfREVMQVkiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVkVDM19DQUxJQlJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iZmxvYXRWYWx1ZXMiLz4KLQkJPGZpZWxkIG5hbWU9ImludFZhbHVlcyIvPgotCQk8ZmllbGQgbmFtZT0ic2Vuc29yIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZXJpYWwiLz4KLQkJPGZpZWxkIG5hbWU9InR5cGUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL1NlbnNvckRpcmVjdENoYW5uZWwiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvQ2hhbm5lbCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yTWFuYWdlcjtJSUopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29uZmlndXJlKExhbmRyb2lkL2hhcmR3YXJlL1NlbnNvcjtJKUkiLz4KLQkJPGZpZWxkIG5hbWU9IlJBVEVfRkFTVCIvPgotCQk8ZmllbGQgbmFtZT0iUkFURV9OT1JNQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlJBVEVfU1RPUCIvPgotCQk8ZmllbGQgbmFtZT0iUkFURV9WRVJZX0ZBU1QiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSEFSRFdBUkVfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX01FTU9SWV9GSUxFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3JFdmVudCIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iYWNjdXJhY3kiLz4KLQkJPGZpZWxkIG5hbWU9InNlbnNvciIvPgotCQk8ZmllbGQgbmFtZT0idGltZXN0YW1wIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2YWx1ZXMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL1NlbnNvckV2ZW50Q2FsbGJhY2siIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3JFdmVudExpc3RlbmVyMiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2Vuc29yQWRkaXRpb25hbEluZm8oTGFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yQWRkaXRpb25hbEluZm87KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL1NlbnNvckV2ZW50TGlzdGVuZXIiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWNjdXJhY3lDaGFuZ2VkKExhbmRyb2lkL2hhcmR3YXJlL1NlbnNvcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlbnNvckNoYW5nZWQoTGFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yRXZlbnQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL1NlbnNvckV2ZW50TGlzdGVuZXIyIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yRXZlbnRMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRmx1c2hDb21wbGV0ZWQoTGFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3JMaXN0ZW5lciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BY2N1cmFjeUNoYW5nZWQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2Vuc29yQ2hhbmdlZChJW0YpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yTWFuYWdlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsVHJpZ2dlclNlbnNvcihMYW5kcm9pZC9oYXJkd2FyZS9UcmlnZ2VyRXZlbnRMaXN0ZW5lcjtMYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3I7KVoiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZURpcmVjdENoYW5uZWwoTGFuZHJvaWQvaGFyZHdhcmUvSGFyZHdhcmVCdWZmZXI7KUxhbmRyb2lkL2hhcmR3YXJlL1NlbnNvckRpcmVjdENoYW5uZWw7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVEaXJlY3RDaGFubmVsKExhbmRyb2lkL29zL01lbW9yeUZpbGU7KUxhbmRyb2lkL2hhcmR3YXJlL1NlbnNvckRpcmVjdENoYW5uZWw7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaChMYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3JFdmVudExpc3RlbmVyOylaIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbHRpdHVkZShGRilGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZ2xlQ2hhbmdlKFtGW0ZbRilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRTZW5zb3IoSSlMYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3I7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRTZW5zb3IoSVopTGFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHluYW1pY1NlbnNvckxpc3QoSSlMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmNsaW5hdGlvbihbRilGIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yaWVudGF0aW9uKFtGW0YpW0YiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVhdGVybmlvbkZyb21WZWN0b3IoW0ZbRilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvdGF0aW9uTWF0cml4KFtGW0ZbRltGKVoiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um90YXRpb25NYXRyaXhGcm9tVmVjdG9yKFtGW0YpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZW5zb3JMaXN0KEkpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZW5zb3JzKClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRHluYW1pY1NlbnNvckRpc2NvdmVyeVN1cHBvcnRlZCgpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJEeW5hbWljU2Vuc29yQ2FsbGJhY2soTGFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yTWFuYWdlciREeW5hbWljU2Vuc29yQ2FsbGJhY2s7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyRHluYW1pY1NlbnNvckNhbGxiYWNrKExhbmRyb2lkL2hhcmR3YXJlL1NlbnNvck1hbmFnZXIkRHluYW1pY1NlbnNvckNhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyTGlzdGVuZXIoTGFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yRXZlbnRMaXN0ZW5lcjtMYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3I7SSlaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyTGlzdGVuZXIoTGFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yRXZlbnRMaXN0ZW5lcjtMYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3I7SUkpWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJMaXN0ZW5lcihMYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3JFdmVudExpc3RlbmVyO0xhbmRyb2lkL2hhcmR3YXJlL1NlbnNvcjtJSUxhbmRyb2lkL29zL0hhbmRsZXI7KVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyTGlzdGVuZXIoTGFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yRXZlbnRMaXN0ZW5lcjtMYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3I7SUxhbmRyb2lkL29zL0hhbmRsZXI7KVoiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJMaXN0ZW5lcihMYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3JMaXN0ZW5lcjtJKVoiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJMaXN0ZW5lcihMYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3JMaXN0ZW5lcjtJSSlaIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbWFwQ29vcmRpbmF0ZVN5c3RlbShbRklJW0YpWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0VHJpZ2dlclNlbnNvcihMYW5kcm9pZC9oYXJkd2FyZS9UcmlnZ2VyRXZlbnRMaXN0ZW5lcjtMYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3I7KVoiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJEeW5hbWljU2Vuc29yQ2FsbGJhY2soTGFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yTWFuYWdlciREeW5hbWljU2Vuc29yQ2FsbGJhY2s7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJMaXN0ZW5lcihMYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3JFdmVudExpc3RlbmVyOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJMaXN0ZW5lcihMYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3JFdmVudExpc3RlbmVyO0xhbmRyb2lkL2hhcmR3YXJlL1NlbnNvcjspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyTGlzdGVuZXIoTGFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yTGlzdGVuZXI7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3Rlckxpc3RlbmVyKExhbmRyb2lkL2hhcmR3YXJlL1NlbnNvckxpc3RlbmVyO0kpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfTUlOVVNfWCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfTUlOVVNfWSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfTUlOVVNfWiIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfWCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfWSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfWiIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfWCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdSQVZJVFlfREVBVEhfU1RBUl9JIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUkFWSVRZX0VBUlRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUkFWSVRZX0pVUElURVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdSQVZJVFlfTUFSUyIvPgotCQk8ZmllbGQgbmFtZT0iR1JBVklUWV9NRVJDVVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUkFWSVRZX01PT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdSQVZJVFlfTkVQVFVORSIvPgotCQk8ZmllbGQgbmFtZT0iR1JBVklUWV9QTFVUTyIvPgotCQk8ZmllbGQgbmFtZT0iR1JBVklUWV9TQVRVUk4iLz4KLQkJPGZpZWxkIG5hbWU9IkdSQVZJVFlfU1VOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUkFWSVRZX1RIRV9JU0xBTkQiLz4KLQkJPGZpZWxkIG5hbWU9IkdSQVZJVFlfVVJBTlVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUkFWSVRZX1ZFTlVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSUdIVF9DTE9VRFkiLz4KLQkJPGZpZWxkIG5hbWU9IkxJR0hUX0ZVTExNT09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSUdIVF9OT19NT09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSUdIVF9PVkVSQ0FTVCIvPgotCQk8ZmllbGQgbmFtZT0iTElHSFRfU0hBREUiLz4KLQkJPGZpZWxkIG5hbWU9IkxJR0hUX1NVTkxJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSUdIVF9TVU5MSUdIVF9NQVgiLz4KLQkJPGZpZWxkIG5hbWU9IkxJR0hUX1NVTlJJU0UiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BR05FVElDX0ZJRUxEX0VBUlRIX01BWCIvPgotCQk8ZmllbGQgbmFtZT0iTUFHTkVUSUNfRklFTERfRUFSVEhfTUlOIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTU1VSRV9TVEFOREFSRF9BVE1PU1BIRVJFIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iUkFXX0RBVEFfSU5ERVgiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSQVdfREFUQV9YIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUkFXX0RBVEFfWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlJBV19EQVRBX1oiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfQUNDRUxFUk9NRVRFUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9BTEwiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfREVMQVlfRkFTVEVTVCIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX0RFTEFZX0dBTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9ERUxBWV9OT1JNQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9ERUxBWV9VSSIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX0xJR0hUIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX01BR05FVElDX0ZJRUxEIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX01BWCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9NSU4iIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfT1JJRU5UQVRJT04iIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfT1JJRU5UQVRJT05fUkFXIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX1BST1hJTUlUWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9TVEFUVVNfQUNDVVJBQ1lfSElHSCIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX1NUQVRVU19BQ0NVUkFDWV9MT1ciLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9TVEFUVVNfQUNDVVJBQ1lfTUVESVVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfU1RBVFVTX05PX0NPTlRBQ1QiIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX1NUQVRVU19VTlJFTElBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfVEVNUEVSQVRVUkUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfVFJJQ09SREVSIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBTkRBUkRfR1JBVklUWSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yTWFuYWdlciREeW5hbWljU2Vuc29yQ2FsbGJhY2siIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkR5bmFtaWNTZW5zb3JDb25uZWN0ZWQoTGFuZHJvaWQvaGFyZHdhcmUvU2Vuc29yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EeW5hbWljU2Vuc29yRGlzY29ubmVjdGVkKExhbmRyb2lkL2hhcmR3YXJlL1NlbnNvcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvVHJpZ2dlckV2ZW50IiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0ic2Vuc29yIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aW1lc3RhbXAiLz4KLQkJPGZpZWxkIG5hbWU9InZhbHVlcyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvVHJpZ2dlckV2ZW50TGlzdGVuZXIiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRyaWdnZXIoTGFuZHJvaWQvaGFyZHdhcmUvVHJpZ2dlckV2ZW50OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9iaW9tZXRyaWNzL0Jpb21ldHJpY1Byb21wdCIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImF1dGhlbnRpY2F0ZShMYW5kcm9pZC9oYXJkd2FyZS9iaW9tZXRyaWNzL0Jpb21ldHJpY1Byb21wdCRDcnlwdG9PYmplY3Q7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsO0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjtMYW5kcm9pZC9oYXJkd2FyZS9iaW9tZXRyaWNzL0Jpb21ldHJpY1Byb21wdCRBdXRoZW50aWNhdGlvbkNhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXV0aGVudGljYXRlKExhbmRyb2lkL29zL0NhbmNlbGxhdGlvblNpZ25hbDtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7TGFuZHJvaWQvaGFyZHdhcmUvYmlvbWV0cmljcy9CaW9tZXRyaWNQcm9tcHQkQXV0aGVudGljYXRpb25DYWxsYmFjazspViIvPgotCQk8ZmllbGQgbmFtZT0iQklPTUVUUklDX0FDUVVJUkVEX0dPT0QiLz4KLQkJPGZpZWxkIG5hbWU9IkJJT01FVFJJQ19BQ1FVSVJFRF9JTUFHRVJfRElSVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkJJT01FVFJJQ19BQ1FVSVJFRF9JTlNVRkZJQ0lFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkJJT01FVFJJQ19BQ1FVSVJFRF9QQVJUSUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSU9NRVRSSUNfQUNRVUlSRURfVE9PX0ZBU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkJJT01FVFJJQ19BQ1FVSVJFRF9UT09fU0xPVyIvPgotCQk8ZmllbGQgbmFtZT0iQklPTUVUUklDX0VSUk9SX0NBTkNFTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSU9NRVRSSUNfRVJST1JfSFdfTk9UX1BSRVNFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkJJT01FVFJJQ19FUlJPUl9IV19VTkFWQUlMQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iQklPTUVUUklDX0VSUk9SX0xPQ0tPVVQiLz4KLQkJPGZpZWxkIG5hbWU9IkJJT01FVFJJQ19FUlJPUl9MT0NLT1VUX1BFUk1BTkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iQklPTUVUUklDX0VSUk9SX05PX0JJT01FVFJJQ1MiLz4KLQkJPGZpZWxkIG5hbWU9IkJJT01FVFJJQ19FUlJPUl9OT19TUEFDRSIvPgotCQk8ZmllbGQgbmFtZT0iQklPTUVUUklDX0VSUk9SX1RJTUVPVVQiLz4KLQkJPGZpZWxkIG5hbWU9IkJJT01FVFJJQ19FUlJPUl9VTkFCTEVfVE9fUFJPQ0VTUyIvPgotCQk8ZmllbGQgbmFtZT0iQklPTUVUUklDX0VSUk9SX1VTRVJfQ0FOQ0VMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkJJT01FVFJJQ19FUlJPUl9WRU5ET1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2Jpb21ldHJpY3MvQmlvbWV0cmljUHJvbXB0JEF1dGhlbnRpY2F0aW9uQ2FsbGJhY2siIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF1dGhlbnRpY2F0aW9uRXJyb3IoSUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BdXRoZW50aWNhdGlvbkZhaWxlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQXV0aGVudGljYXRpb25IZWxwKElMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQXV0aGVudGljYXRpb25TdWNjZWVkZWQoTGFuZHJvaWQvaGFyZHdhcmUvYmlvbWV0cmljcy9CaW9tZXRyaWNQcm9tcHQkQXV0aGVudGljYXRpb25SZXN1bHQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2Jpb21ldHJpY3MvQmlvbWV0cmljUHJvbXB0JEF1dGhlbnRpY2F0aW9uUmVzdWx0IiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3J5cHRvT2JqZWN0KClMYW5kcm9pZC9oYXJkd2FyZS9iaW9tZXRyaWNzL0Jpb21ldHJpY1Byb21wdCRDcnlwdG9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9iaW9tZXRyaWNzL0Jpb21ldHJpY1Byb21wdCRCdWlsZGVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9oYXJkd2FyZS9iaW9tZXRyaWNzL0Jpb21ldHJpY1Byb21wdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZXNjcmlwdGlvbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvaGFyZHdhcmUvYmlvbWV0cmljcy9CaW9tZXRyaWNQcm9tcHQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROZWdhdGl2ZUJ1dHRvbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7TGFuZHJvaWQvY29udGVudC9EaWFsb2dJbnRlcmZhY2UkT25DbGlja0xpc3RlbmVyOylMYW5kcm9pZC9oYXJkd2FyZS9iaW9tZXRyaWNzL0Jpb21ldHJpY1Byb21wdCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1YnRpdGxlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9oYXJkd2FyZS9iaW9tZXRyaWNzL0Jpb21ldHJpY1Byb21wdCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpdGxlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9oYXJkd2FyZS9iaW9tZXRyaWNzL0Jpb21ldHJpY1Byb21wdCRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvYmlvbWV0cmljcy9CaW9tZXRyaWNQcm9tcHQkQ3J5cHRvT2JqZWN0IiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3NlY3VyaXR5L1NpZ25hdHVyZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YXgvY3J5cHRvL0NpcGhlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YXgvY3J5cHRvL01hYzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENpcGhlcigpTGphdmF4L2NyeXB0by9DaXBoZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFjKClMamF2YXgvY3J5cHRvL01hYzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaWduYXR1cmUoKUxqYXZhL3NlY3VyaXR5L1NpZ25hdHVyZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhQWNjZXNzRXhjZXB0aW9uIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3V0aWwvQW5kcm9pZEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWFzb24oKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTUVSQV9ESVNBQkxFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FNRVJBX0RJU0NPTk5FQ1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FNRVJBX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQU1FUkFfSU5fVVNFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9DQU1FUkFTX0lOX1VTRSIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BdXRvQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWJvcnRDYXB0dXJlcygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhcHR1cmUoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdDtMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uJENhcHR1cmVDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FwdHVyZUJ1cnN0KExqYXZhL3V0aWwvTGlzdDtMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uJENhcHR1cmVDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FwdHVyZUJ1cnN0UmVxdWVzdHMoTGphdmEvdXRpbC9MaXN0O0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjtMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uJENhcHR1cmVDYWxsYmFjazspSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FwdHVyZVNpbmdsZVJlcXVlc3QoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdDtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7TGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDYXB0dXJlU2Vzc2lvbiRDYXB0dXJlQ2FsbGJhY2s7KUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmFsaXplT3V0cHV0Q29uZmlndXJhdGlvbnMoTGphdmEvdXRpbC9MaXN0OylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXZpY2UoKUxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhRGV2aWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0U3VyZmFjZSgpTGFuZHJvaWQvdmlldy9TdXJmYWNlOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZXByb2Nlc3NhYmxlKClaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmVwYXJlKExhbmRyb2lkL3ZpZXcvU3VyZmFjZTspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVwZWF0aW5nQnVyc3QoTGphdmEvdXRpbC9MaXN0O0xhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhQ2FwdHVyZVNlc3Npb24kQ2FwdHVyZUNhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXBlYXRpbmdCdXJzdFJlcXVlc3RzKExqYXZhL3V0aWwvTGlzdDtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7TGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDYXB0dXJlU2Vzc2lvbiRDYXB0dXJlQ2FsbGJhY2s7KUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlcGVhdGluZ1JlcXVlc3QoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdDtMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uJENhcHR1cmVDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2luZ2xlUmVwZWF0aW5nUmVxdWVzdChMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXF1ZXN0O0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjtMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uJENhcHR1cmVDYWxsYmFjazspSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcFJlcGVhdGluZygpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZU91dHB1dENvbmZpZ3VyYXRpb24oTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9wYXJhbXMvT3V0cHV0Q29uZmlndXJhdGlvbjspViIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uJENhcHR1cmVDYWxsYmFjayIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FwdHVyZUJ1ZmZlckxvc3QoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDYXB0dXJlU2Vzc2lvbjtMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXF1ZXN0O0xhbmRyb2lkL3ZpZXcvU3VyZmFjZTtKKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FwdHVyZUNvbXBsZXRlZChMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uO0xhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlcXVlc3Q7TGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9Ub3RhbENhcHR1cmVSZXN1bHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhcHR1cmVGYWlsZWQoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDYXB0dXJlU2Vzc2lvbjtMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXF1ZXN0O0xhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZUZhaWx1cmU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhcHR1cmVQcm9ncmVzc2VkKExhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhQ2FwdHVyZVNlc3Npb247TGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdDtMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXN1bHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhcHR1cmVTZXF1ZW5jZUFib3J0ZWQoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDYXB0dXJlU2Vzc2lvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhcHR1cmVTZXF1ZW5jZUNvbXBsZXRlZChMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uO0lKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhcHR1cmVTdGFydGVkKExhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhQ2FwdHVyZVNlc3Npb247TGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdDtKSilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uJFN0YXRlQ2FsbGJhY2siIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFjdGl2ZShMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYXB0dXJlUXVldWVFbXB0eShMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNsb3NlZChMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db25maWd1cmVGYWlsZWQoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDYXB0dXJlU2Vzc2lvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29uZmlndXJlZChMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZWFkeShMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdXJmYWNlUHJlcGFyZWQoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDYXB0dXJlU2Vzc2lvbjtMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiIHNpbmNlPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDaGFyYWN0ZXJpc3RpY3MiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFNZXRhZGF0YSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNoYXJhY3RlcmlzdGljcyRLZXk7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUNhcHR1cmVSZXF1ZXN0S2V5cygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUNhcHR1cmVSZXN1bHRLZXlzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZhaWxhYmxlUGh5c2ljYWxDYW1lcmFSZXF1ZXN0S2V5cygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZhaWxhYmxlU2Vzc2lvbktleXMoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBoeXNpY2FsQ2FtZXJhSWRzKClMamF2YS91dGlsL1NldDsiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfQ09SUkVDVElPTl9BVkFJTEFCTEVfQUJFUlJBVElPTl9NT0RFUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRV9BVkFJTEFCTEVfQU5USUJBTkRJTkdfTU9ERVMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUVfQVZBSUxBQkxFX01PREVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX0FWQUlMQUJMRV9UQVJHRVRfRlBTX1JBTkdFUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRV9DT01QRU5TQVRJT05fUkFOR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUVfQ09NUEVOU0FUSU9OX1NURVAiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUVfTE9DS19BVkFJTEFCTEUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRl9BVkFJTEFCTEVfTU9ERVMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQVZBSUxBQkxFX0VGRkVDVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQVZBSUxBQkxFX01PREVTIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQVZBSUxBQkxFX1NDRU5FX01PREVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FWQUlMQUJMRV9WSURFT19TVEFCSUxJWkFUSU9OX01PREVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FXQl9BVkFJTEFCTEVfTU9ERVMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQVdCX0xPQ0tfQVZBSUxBQkxFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfTUFYX1JFR0lPTlNfQUUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfTUFYX1JFR0lPTlNfQUYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfTUFYX1JFR0lPTlNfQVdCIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1BPU1RfUkFXX1NFTlNJVElWSVRZX0JPT1NUX1JBTkdFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRFUFRIX0RFUFRIX0lTX0VYQ0xVU0lWRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNUT1JUSU9OX0NPUlJFQ1RJT05fQVZBSUxBQkxFX01PREVTIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVER0VfQVZBSUxBQkxFX0VER0VfTU9ERVMiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQVNIX0lORk9fQVZBSUxBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1RfUElYRUxfQVZBSUxBQkxFX0hPVF9QSVhFTF9NT0RFUyIvPgotCQk8ZmllbGQgbmFtZT0iSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUwiLz4KLQkJPGZpZWxkIG5hbWU9IklORk9fVkVSU0lPTiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJKUEVHX0FWQUlMQUJMRV9USFVNQk5BSUxfU0laRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfRElTVE9SVElPTiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5TX0ZBQ0lORyIvPgotCQk8ZmllbGQgbmFtZT0iTEVOU19JTkZPX0FWQUlMQUJMRV9BUEVSVFVSRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfSU5GT19BVkFJTEFCTEVfRklMVEVSX0RFTlNJVElFUyIvPgotCQk8ZmllbGQgbmFtZT0iTEVOU19JTkZPX0FWQUlMQUJMRV9GT0NBTF9MRU5HVEhTIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5TX0lORk9fQVZBSUxBQkxFX09QVElDQUxfU1RBQklMSVpBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iTEVOU19JTkZPX0ZPQ1VTX0RJU1RBTkNFX0NBTElCUkFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5TX0lORk9fSFlQRVJGT0NBTF9ESVNUQU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iTEVOU19JTkZPX01JTklNVU1fRk9DVVNfRElTVEFOQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfSU5UUklOU0lDX0NBTElCUkFUSU9OIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfUE9TRV9SRUZFUkVOQ0UiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTEVOU19QT1NFX1JPVEFUSU9OIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfUE9TRV9UUkFOU0xBVElPTiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5TX1JBRElBTF9ESVNUT1JUSU9OIiBzaW5jZT0iMjMiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0dJQ0FMX01VTFRJX0NBTUVSQV9TRU5TT1JfU1lOQ19UWVBFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PSVNFX1JFRFVDVElPTl9BVkFJTEFCTEVfTk9JU0VfUkVEVUNUSU9OX01PREVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVBST0NFU1NfTUFYX0NBUFRVUkVfU1RBTEwiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVFVRVNUX01BWF9OVU1fSU5QVVRfU1RSRUFNUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVFVRVNUX01BWF9OVU1fT1VUUFVUX1BST0MiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfTUFYX05VTV9PVVRQVVRfUFJPQ19TVEFMTElORyIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9NQVhfTlVNX09VVFBVVF9SQVciLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfUEFSVElBTF9SRVNVTFRfQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfUElQRUxJTkVfTUFYX0RFUFRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0FMRVJfQVZBSUxBQkxFX01BWF9ESUdJVEFMX1pPT00iLz4KLQkJPGZpZWxkIG5hbWU9IlNDQUxFUl9DUk9QUElOR19UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0FMRVJfU1RSRUFNX0NPTkZJR1VSQVRJT05fTUFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfQVZBSUxBQkxFX1RFU1RfUEFUVEVSTl9NT0RFUyIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX0JMQUNLX0xFVkVMX1BBVFRFUk4iLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9DQUxJQlJBVElPTl9UUkFOU0ZPUk0xIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfQ0FMSUJSQVRJT05fVFJBTlNGT1JNMiIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX0NPTE9SX1RSQU5TRk9STTEiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9DT0xPUl9UUkFOU0ZPUk0yIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfRk9SV0FSRF9NQVRSSVgxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfRk9SV0FSRF9NQVRSSVgyIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX0lORk9fQ09MT1JfRklMVEVSX0FSUkFOR0VNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfSU5GT19FWFBPU1VSRV9USU1FX1JBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfSU5GT19MRU5TX1NIQURJTkdfQVBQTElFRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfSU5GT19NQVhfRlJBTUVfRFVSQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9JTkZPX1BIWVNJQ0FMX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9JTkZPX1BJWEVMX0FSUkFZX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9JTkZPX1BSRV9DT1JSRUNUSU9OX0FDVElWRV9BUlJBWV9TSVpFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9JTkZPX1NFTlNJVElWSVRZX1JBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfSU5GT19USU1FU1RBTVBfU09VUkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfSU5GT19XSElURV9MRVZFTCIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX01BWF9BTkFMT0dfU0VOU0lUSVZJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9PUFRJQ0FMX0JMQUNLX1JFR0lPTlMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX09SSUVOVEFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfUkVGRVJFTkNFX0lMTFVNSU5BTlQxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfUkVGRVJFTkNFX0lMTFVNSU5BTlQyIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSEFESU5HX0FWQUlMQUJMRV9NT0RFUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUSVNUSUNTX0lORk9fQVZBSUxBQkxFX0ZBQ0VfREVURUNUX01PREVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUSVNUSUNTX0lORk9fQVZBSUxBQkxFX0hPVF9QSVhFTF9NQVBfTU9ERVMiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRJU1RJQ1NfSU5GT19BVkFJTEFCTEVfTEVOU19TSEFESU5HX01BUF9NT0RFUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUSVNUSUNTX0lORk9fQVZBSUxBQkxFX09JU19EQVRBX01PREVTIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRJU1RJQ1NfSU5GT19NQVhfRkFDRV9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ19NQVhfTEFURU5DWSIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORU1BUF9BVkFJTEFCTEVfVE9ORV9NQVBfTU9ERVMiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVNQVBfTUFYX0NVUlZFX1BPSU5UUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDaGFyYWN0ZXJpc3RpY3MkS2V5IiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhQ29uc3RyYWluZWRIaWdoU3BlZWRDYXB0dXJlU2Vzc2lvbiIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSGlnaFNwZWVkUmVxdWVzdExpc3QoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdDspTGphdmEvdXRpbC9MaXN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFEZXZpY2UiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDYXB0dXJlUmVxdWVzdChJKUxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlcXVlc3QkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDYXB0dXJlUmVxdWVzdChJTGphdmEvdXRpbC9TZXQ7KUxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlcXVlc3QkQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUNhcHR1cmVTZXNzaW9uKExhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFyYW1zL1Nlc3Npb25Db25maWd1cmF0aW9uOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDYXB0dXJlU2Vzc2lvbihMamF2YS91dGlsL0xpc3Q7TGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDYXB0dXJlU2Vzc2lvbiRTdGF0ZUNhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDYXB0dXJlU2Vzc2lvbkJ5T3V0cHV0Q29uZmlndXJhdGlvbnMoTGphdmEvdXRpbC9MaXN0O0xhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhQ2FwdHVyZVNlc3Npb24kU3RhdGVDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDb25zdHJhaW5lZEhpZ2hTcGVlZENhcHR1cmVTZXNzaW9uKExqYXZhL3V0aWwvTGlzdDtMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uJFN0YXRlQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlUmVwcm9jZXNzQ2FwdHVyZVJlcXVlc3QoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9Ub3RhbENhcHR1cmVSZXN1bHQ7KUxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlcXVlc3QkQnVpbGRlcjsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVJlcHJvY2Vzc2FibGVDYXB0dXJlU2Vzc2lvbihMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL3BhcmFtcy9JbnB1dENvbmZpZ3VyYXRpb247TGphdmEvdXRpbC9MaXN0O0xhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhQ2FwdHVyZVNlc3Npb24kU3RhdGVDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVSZXByb2Nlc3NhYmxlQ2FwdHVyZVNlc3Npb25CeUNvbmZpZ3VyYXRpb25zKExhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFyYW1zL0lucHV0Q29uZmlndXJhdGlvbjtMamF2YS91dGlsL0xpc3Q7TGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDYXB0dXJlU2Vzc2lvbiRTdGF0ZUNhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IlRFTVBMQVRFX01BTlVBTCIvPgotCQk8ZmllbGQgbmFtZT0iVEVNUExBVEVfUFJFVklFVyIvPgotCQk8ZmllbGQgbmFtZT0iVEVNUExBVEVfUkVDT1JEIi8+Ci0JCTxmaWVsZCBuYW1lPSJURU1QTEFURV9TVElMTF9DQVBUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJURU1QTEFURV9WSURFT19TTkFQU0hPVCIvPgotCQk8ZmllbGQgbmFtZT0iVEVNUExBVEVfWkVST19TSFVUVEVSX0xBRyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFEZXZpY2UkU3RhdGVDYWxsYmFjayIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2xvc2VkKExhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhRGV2aWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EaXNjb25uZWN0ZWQoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFEZXZpY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkVycm9yKExhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhRGV2aWNlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uT3BlbmVkKExhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhRGV2aWNlOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9DQU1FUkFfREVWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9DQU1FUkFfRElTQUJMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0NBTUVSQV9JTl9VU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0NBTUVSQV9TRVJWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9NQVhfQ0FNRVJBU19JTl9VU0UiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWFuYWdlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbWVyYUlkTGlzdCgpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5DYW1lcmEoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFEZXZpY2UkU3RhdGVDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkNhbWVyYShMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7TGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFEZXZpY2UkU3RhdGVDYWxsYmFjazspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJBdmFpbGFiaWxpdHlDYWxsYmFjayhMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYU1hbmFnZXIkQXZhaWxhYmlsaXR5Q2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQXZhaWxhYmlsaXR5Q2FsbGJhY2soTGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yO0xhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWFuYWdlciRBdmFpbGFiaWxpdHlDYWxsYmFjazspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJUb3JjaENhbGxiYWNrKExhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWFuYWdlciRUb3JjaENhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyVG9yY2hDYWxsYmFjayhMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7TGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFNYW5hZ2VyJFRvcmNoQ2FsbGJhY2s7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRvcmNoTW9kZShMamF2YS9sYW5nL1N0cmluZztaKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJBdmFpbGFiaWxpdHlDYWxsYmFjayhMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYU1hbmFnZXIkQXZhaWxhYmlsaXR5Q2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyVG9yY2hDYWxsYmFjayhMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYU1hbmFnZXIkVG9yY2hDYWxsYmFjazspViIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYU1hbmFnZXIkQXZhaWxhYmlsaXR5Q2FsbGJhY2siIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbWVyYUF2YWlsYWJsZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FtZXJhVW5hdmFpbGFibGUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWFuYWdlciRUb3JjaENhbGxiYWNrIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Ub3JjaE1vZGVDaGFuZ2VkKExqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVG9yY2hNb2RlVW5hdmFpbGFibGUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWV0YWRhdGEiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9DT1JSRUNUSU9OX0FCRVJSQVRJT05fTU9ERV9GQVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9DT1JSRUNUSU9OX0FCRVJSQVRJT05fTU9ERV9ISUdIX1FVQUxJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0NPUlJFQ1RJT05fQUJFUlJBVElPTl9NT0RFX09GRiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfQ09SUkVDVElPTl9NT0RFX0ZBU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0NPUlJFQ1RJT05fTU9ERV9ISUdIX1FVQUxJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0NPUlJFQ1RJT05fTU9ERV9UUkFOU0ZPUk1fTUFUUklYIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX0FOVElCQU5ESU5HX01PREVfNTBIWiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRV9BTlRJQkFORElOR19NT0RFXzYwSFoiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUVfQU5USUJBTkRJTkdfTU9ERV9BVVRPIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX0FOVElCQU5ESU5HX01PREVfT0ZGIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX01PREVfT0ZGIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX01PREVfT04iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUVfTU9ERV9PTl9BTFdBWVNfRkxBU0giLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUVfTU9ERV9PTl9BVVRPX0ZMQVNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX01PREVfT05fQVVUT19GTEFTSF9SRURFWUUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUVfTU9ERV9PTl9FWFRFUk5BTF9GTEFTSCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX1BSRUNBUFRVUkVfVFJJR0dFUl9DQU5DRUwiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRV9QUkVDQVBUVVJFX1RSSUdHRVJfSURMRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRV9QUkVDQVBUVVJFX1RSSUdHRVJfU1RBUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUVfU1RBVEVfQ09OVkVSR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX1NUQVRFX0ZMQVNIX1JFUVVJUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX1NUQVRFX0lOQUNUSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX1NUQVRFX0xPQ0tFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRV9TVEFURV9QUkVDQVBUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX1NUQVRFX1NFQVJDSElORyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRl9NT0RFX0FVVE8iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUZfTU9ERV9DT05USU5VT1VTX1BJQ1RVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUZfTU9ERV9DT05USU5VT1VTX1ZJREVPIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FGX01PREVfRURPRiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRl9NT0RFX01BQ1JPIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FGX01PREVfT0ZGIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FGX1NDRU5FX0NIQU5HRV9ERVRFQ1RFRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FGX1NDRU5FX0NIQU5HRV9OT1RfREVURUNURUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRl9TVEFURV9BQ1RJVkVfU0NBTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRl9TVEFURV9GT0NVU0VEX0xPQ0tFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRl9TVEFURV9JTkFDVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRl9TVEFURV9OT1RfRk9DVVNFRF9MT0NLRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUZfU1RBVEVfUEFTU0lWRV9GT0NVU0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FGX1NUQVRFX1BBU1NJVkVfU0NBTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRl9TVEFURV9QQVNTSVZFX1VORk9DVVNFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRl9UUklHR0VSX0NBTkNFTCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRl9UUklHR0VSX0lETEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUZfVFJJR0dFUl9TVEFSVCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BV0JfTU9ERV9BVVRPIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FXQl9NT0RFX0NMT1VEWV9EQVlMSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BV0JfTU9ERV9EQVlMSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BV0JfTU9ERV9GTFVPUkVTQ0VOVCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BV0JfTU9ERV9JTkNBTkRFU0NFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQVdCX01PREVfT0ZGIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FXQl9NT0RFX1NIQURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FXQl9NT0RFX1RXSUxJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FXQl9NT0RFX1dBUk1fRkxVT1JFU0NFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQVdCX1NUQVRFX0NPTlZFUkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BV0JfU1RBVEVfSU5BQ1RJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQVdCX1NUQVRFX0xPQ0tFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BV0JfU1RBVEVfU0VBUkNISU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0NBUFRVUkVfSU5URU5UX0NVU1RPTSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9DQVBUVVJFX0lOVEVOVF9NQU5VQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQ0FQVFVSRV9JTlRFTlRfTU9USU9OX1RSQUNLSU5HIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQ0FQVFVSRV9JTlRFTlRfUFJFVklFVyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9DQVBUVVJFX0lOVEVOVF9TVElMTF9DQVBUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0NBUFRVUkVfSU5URU5UX1ZJREVPX1JFQ09SRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9DQVBUVVJFX0lOVEVOVF9WSURFT19TTkFQU0hPVCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9DQVBUVVJFX0lOVEVOVF9aRVJPX1NIVVRURVJfTEFHIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0VGRkVDVF9NT0RFX0FRVUEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfRUZGRUNUX01PREVfQkxBQ0tCT0FSRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9FRkZFQ1RfTU9ERV9NT05PIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0VGRkVDVF9NT0RFX05FR0FUSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0VGRkVDVF9NT0RFX09GRiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9FRkZFQ1RfTU9ERV9QT1NURVJJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfRUZGRUNUX01PREVfU0VQSUEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfRUZGRUNUX01PREVfU09MQVJJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfRUZGRUNUX01PREVfV0hJVEVCT0FSRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9NT0RFX0FVVE8iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfTU9ERV9PRkYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfTU9ERV9PRkZfS0VFUF9TVEFURSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9NT0RFX1VTRV9TQ0VORV9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1NDRU5FX01PREVfQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1NDRU5FX01PREVfQkFSQ09ERSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9TQ0VORV9NT0RFX0JFQUNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1NDRU5FX01PREVfQ0FORExFTElHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfU0NFTkVfTU9ERV9ESVNBQkxFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9TQ0VORV9NT0RFX0ZBQ0VfUFJJT1JJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfU0NFTkVfTU9ERV9GSVJFV09SS1MiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfU0NFTkVfTU9ERV9IRFIiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9TQ0VORV9NT0RFX0hJR0hfU1BFRURfVklERU8iIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1NDRU5FX01PREVfTEFORFNDQVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1NDRU5FX01PREVfTklHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfU0NFTkVfTU9ERV9OSUdIVF9QT1JUUkFJVCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9TQ0VORV9NT0RFX1BBUlRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1NDRU5FX01PREVfUE9SVFJBSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfU0NFTkVfTU9ERV9TTk9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1NDRU5FX01PREVfU1BPUlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1NDRU5FX01PREVfU1RFQURZUEhPVE8iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfU0NFTkVfTU9ERV9TVU5TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfU0NFTkVfTU9ERV9USEVBVFJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1ZJREVPX1NUQUJJTElaQVRJT05fTU9ERV9PRkYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfVklERU9fU1RBQklMSVpBVElPTl9NT0RFX09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNUT1JUSU9OX0NPUlJFQ1RJT05fTU9ERV9GQVNUIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU1RPUlRJT05fQ09SUkVDVElPTl9NT0RFX0hJR0hfUVVBTElUWSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNUT1JUSU9OX0NPUlJFQ1RJT05fTU9ERV9PRkYiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRURHRV9NT0RFX0ZBU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkVER0VfTU9ERV9ISUdIX1FVQUxJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkVER0VfTU9ERV9PRkYiLz4KLQkJPGZpZWxkIG5hbWU9IkVER0VfTU9ERV9aRVJPX1NIVVRURVJfTEFHIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQVNIX01PREVfT0ZGIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFTSF9NT0RFX1NJTkdMRSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBU0hfTU9ERV9UT1JDSCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBU0hfU1RBVEVfQ0hBUkdJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkZMQVNIX1NUQVRFX0ZJUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFTSF9TVEFURV9QQVJUSUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFTSF9TVEFURV9SRUFEWSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBU0hfU1RBVEVfVU5BVkFJTEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVF9QSVhFTF9NT0RFX0ZBU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVF9QSVhFTF9NT0RFX0hJR0hfUVVBTElUWSIvPgotCQk8ZmllbGQgbmFtZT0iSE9UX1BJWEVMX01PREVfT0ZGIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTF8zIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IklORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMX0VYVEVSTkFMIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IklORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMX0ZVTEwiLz4KLQkJPGZpZWxkIG5hbWU9IklORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMX0xFR0FDWSIvPgotCQk8ZmllbGQgbmFtZT0iSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUxfTElNSVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iTEVOU19GQUNJTkdfQkFDSyIvPgotCQk8ZmllbGQgbmFtZT0iTEVOU19GQUNJTkdfRVhURVJOQUwiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTEVOU19GQUNJTkdfRlJPTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfSU5GT19GT0NVU19ESVNUQU5DRV9DQUxJQlJBVElPTl9BUFBST1hJTUFURSIvPgotCQk8ZmllbGQgbmFtZT0iTEVOU19JTkZPX0ZPQ1VTX0RJU1RBTkNFX0NBTElCUkFUSU9OX0NBTElCUkFURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfSU5GT19GT0NVU19ESVNUQU5DRV9DQUxJQlJBVElPTl9VTkNBTElCUkFURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfT1BUSUNBTF9TVEFCSUxJWkFUSU9OX01PREVfT0ZGIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFX09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5TX1BPU0VfUkVGRVJFTkNFX0dZUk9TQ09QRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5TX1BPU0VfUkVGRVJFTkNFX1BSSU1BUllfQ0FNRVJBIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfU1RBVEVfTU9WSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5TX1NUQVRFX1NUQVRJT05BUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPR0lDQUxfTVVMVElfQ0FNRVJBX1NFTlNPUl9TWU5DX1RZUEVfQVBQUk9YSU1BVEUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTE9HSUNBTF9NVUxUSV9DQU1FUkFfU0VOU09SX1NZTkNfVFlQRV9DQUxJQlJBVEVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PSVNFX1JFRFVDVElPTl9NT0RFX0ZBU1QiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PSVNFX1JFRFVDVElPTl9NT0RFX0hJR0hfUVVBTElUWSIvPgotCQk8ZmllbGQgbmFtZT0iTk9JU0VfUkVEVUNUSU9OX01PREVfTUlOSU1BTCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT0lTRV9SRURVQ1RJT05fTU9ERV9PRkYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PSVNFX1JFRFVDVElPTl9NT0RFX1pFUk9fU0hVVFRFUl9MQUciIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTX0JBQ0tXQVJEX0NPTVBBVElCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfQVZBSUxBQkxFX0NBUEFCSUxJVElFU19CVVJTVF9DQVBUVVJFIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfQVZBSUxBQkxFX0NBUEFCSUxJVElFU19DT05TVFJBSU5FRF9ISUdIX1NQRUVEX1ZJREVPIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfQVZBSUxBQkxFX0NBUEFCSUxJVElFU19ERVBUSF9PVVRQVVQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTX0xPR0lDQUxfTVVMVElfQ0FNRVJBIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfQVZBSUxBQkxFX0NBUEFCSUxJVElFU19NQU5VQUxfUE9TVF9QUk9DRVNTSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVFVRVNUX0FWQUlMQUJMRV9DQVBBQklMSVRJRVNfTUFOVUFMX1NFTlNPUiIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTX01PTk9DSFJPTUUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTX01PVElPTl9UUkFDS0lORyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVFVRVNUX0FWQUlMQUJMRV9DQVBBQklMSVRJRVNfUFJJVkFURV9SRVBST0NFU1NJTkciIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTX1JBVyIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9BVkFJTEFCTEVfQ0FQQUJJTElUSUVTX1JFQURfU0VOU09SX1NFVFRJTkdTIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfQVZBSUxBQkxFX0NBUEFCSUxJVElFU19ZVVZfUkVQUk9DRVNTSU5HIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNDQUxFUl9DUk9QUElOR19UWVBFX0NFTlRFUl9PTkxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0FMRVJfQ1JPUFBJTkdfVFlQRV9GUkVFRk9STSIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX0lORk9fQ09MT1JfRklMVEVSX0FSUkFOR0VNRU5UX0JHR1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9JTkZPX0NPTE9SX0ZJTFRFUl9BUlJBTkdFTUVOVF9HQlJHIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfSU5GT19DT0xPUl9GSUxURVJfQVJSQU5HRU1FTlRfR1JCRyIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX0lORk9fQ09MT1JfRklMVEVSX0FSUkFOR0VNRU5UX1JHQiIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX0lORk9fQ09MT1JfRklMVEVSX0FSUkFOR0VNRU5UX1JHR0IiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9JTkZPX1RJTUVTVEFNUF9TT1VSQ0VfUkVBTFRJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9JTkZPX1RJTUVTVEFNUF9TT1VSQ0VfVU5LTk9XTiIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX1JFRkVSRU5DRV9JTExVTUlOQU5UMV9DTE9VRFlfV0VBVEhFUiIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX1JFRkVSRU5DRV9JTExVTUlOQU5UMV9DT09MX1dISVRFX0ZMVU9SRVNDRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfUkVGRVJFTkNFX0lMTFVNSU5BTlQxX0Q1MCIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX1JFRkVSRU5DRV9JTExVTUlOQU5UMV9ENTUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9SRUZFUkVOQ0VfSUxMVU1JTkFOVDFfRDY1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfUkVGRVJFTkNFX0lMTFVNSU5BTlQxX0Q3NSIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX1JFRkVSRU5DRV9JTExVTUlOQU5UMV9EQVlMSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX1JFRkVSRU5DRV9JTExVTUlOQU5UMV9EQVlMSUdIVF9GTFVPUkVTQ0VOVCIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX1JFRkVSRU5DRV9JTExVTUlOQU5UMV9EQVlfV0hJVEVfRkxVT1JFU0NFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9SRUZFUkVOQ0VfSUxMVU1JTkFOVDFfRklORV9XRUFUSEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfUkVGRVJFTkNFX0lMTFVNSU5BTlQxX0ZMQVNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfUkVGRVJFTkNFX0lMTFVNSU5BTlQxX0ZMVU9SRVNDRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfUkVGRVJFTkNFX0lMTFVNSU5BTlQxX0lTT19TVFVESU9fVFVOR1NURU4iLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9SRUZFUkVOQ0VfSUxMVU1JTkFOVDFfU0hBREUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9SRUZFUkVOQ0VfSUxMVU1JTkFOVDFfU1RBTkRBUkRfQSIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX1JFRkVSRU5DRV9JTExVTUlOQU5UMV9TVEFOREFSRF9CIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfUkVGRVJFTkNFX0lMTFVNSU5BTlQxX1NUQU5EQVJEX0MiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9SRUZFUkVOQ0VfSUxMVU1JTkFOVDFfVFVOR1NURU4iLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9SRUZFUkVOQ0VfSUxMVU1JTkFOVDFfV0hJVEVfRkxVT1JFU0NFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9URVNUX1BBVFRFUk5fTU9ERV9DT0xPUl9CQVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfVEVTVF9QQVRURVJOX01PREVfQ09MT1JfQkFSU19GQURFX1RPX0dSQVkiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9URVNUX1BBVFRFUk5fTU9ERV9DVVNUT00xIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfVEVTVF9QQVRURVJOX01PREVfT0ZGIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfVEVTVF9QQVRURVJOX01PREVfUE45Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfVEVTVF9QQVRURVJOX01PREVfU09MSURfQ09MT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNIQURJTkdfTU9ERV9GQVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSEFESU5HX01PREVfSElHSF9RVUFMSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSEFESU5HX01PREVfT0ZGIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREVfRlVMTCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFX09GRiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFX1NJTVBMRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVElTVElDU19MRU5TX1NIQURJTkdfTUFQX01PREVfT0ZGIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUSVNUSUNTX0xFTlNfU0hBRElOR19NQVBfTU9ERV9PTiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVElTVElDU19PSVNfREFUQV9NT0RFX09GRiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUSVNUSUNTX09JU19EQVRBX01PREVfT04iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVElTVElDU19TQ0VORV9GTElDS0VSXzUwSFoiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRJU1RJQ1NfU0NFTkVfRkxJQ0tFUl82MEhaIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUSVNUSUNTX1NDRU5FX0ZMSUNLRVJfTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ19NQVhfTEFURU5DWV9QRVJfRlJBTUVfQ09OVFJPTCIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ19NQVhfTEFURU5DWV9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FTUFQX01PREVfQ09OVFJBU1RfQ1VSVkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVNQVBfTU9ERV9GQVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FTUFQX01PREVfR0FNTUFfVkFMVUUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORU1BUF9NT0RFX0hJR0hfUVVBTElUWSIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORU1BUF9NT0RFX1BSRVNFVF9DVVJWRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FTUFQX1BSRVNFVF9DVVJWRV9SRUM3MDkiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORU1BUF9QUkVTRVRfQ1VSVkVfU1JHQiIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVGYWlsdXJlIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXF1ZXN0O0laSUopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJhbWVOdW1iZXIoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWFzb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXF1ZXN0KClMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXF1ZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcXVlbmNlSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3YXNJbWFnZUNhcHR1cmVkKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFTT05fRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9GTFVTSEVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXF1ZXN0IiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWV0YWRhdGEiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KExhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlcXVlc3QkS2V5OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWcoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVwcm9jZXNzKClaIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkJMQUNLX0xFVkVMX0xPQ0siLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0NPUlJFQ1RJT05fQUJFUlJBVElPTl9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9DT1JSRUNUSU9OX0dBSU5TIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9DT1JSRUNUSU9OX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0NPUlJFQ1RJT05fVFJBTlNGT1JNIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX0FOVElCQU5ESU5HX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUVfRVhQT1NVUkVfQ09NUEVOU0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX0xPQ0siLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUVfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRV9QUkVDQVBUVVJFX1RSSUdHRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUVfUkVHSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRV9UQVJHRVRfRlBTX1JBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FGX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUZfUkVHSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRl9UUklHR0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FXQl9MT0NLIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FXQl9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FXQl9SRUdJT05TIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0NBUFRVUkVfSU5URU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0VGRkVDVF9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0VOQUJMRV9aU0wiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1BPU1RfUkFXX1NFTlNJVElWSVRZX0JPT1NUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfU0NFTkVfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9WSURFT19TVEFCSUxJWkFUSU9OX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU1RPUlRJT05fQ09SUkVDVElPTl9NT0RFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVER0VfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBU0hfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iSE9UX1BJWEVMX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkpQRUdfR1BTX0xPQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJKUEVHX09SSUVOVEFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJKUEVHX1FVQUxJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkpQRUdfVEhVTUJOQUlMX1FVQUxJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkpQRUdfVEhVTUJOQUlMX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfQVBFUlRVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfRklMVEVSX0RFTlNJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfRk9DQUxfTEVOR1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5TX0ZPQ1VTX0RJU1RBTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT0lTRV9SRURVQ1RJT05fTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iUkVQUk9DRVNTX0VGRkVDVElWRV9FWFBPU1VSRV9GQUNUT1IiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU0NBTEVSX0NST1BfUkVHSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfRVhQT1NVUkVfVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX0ZSQU1FX0RVUkFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfU0VOU0lUSVZJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9URVNUX1BBVFRFUk5fREFUQSIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX1RFU1RfUEFUVEVSTl9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSEFESU5HX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRJU1RJQ1NfRkFDRV9ERVRFQ1RfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVElTVElDU19IT1RfUElYRUxfTUFQX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRJU1RJQ1NfTEVOU19TSEFESU5HX01BUF9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUSVNUSUNTX09JU19EQVRBX01PREUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORU1BUF9DVVJWRSIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORU1BUF9HQU1NQSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FTUFQX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVNQVBfUFJFU0VUX0NVUlZFIiBzaW5jZT0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlcXVlc3QkQnVpbGRlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRhcmdldChMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdCRLZXk7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBoeXNpY2FsQ2FtZXJhS2V5KExhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlcXVlc3QkS2V5O0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVRhcmdldChMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdCRLZXk7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQaHlzaWNhbENhbWVyYUtleShMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXF1ZXN0JEtleTtMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdCRCdWlsZGVyOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFnKExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXF1ZXN0JEtleSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DbGFzczspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXN1bHQiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFNZXRhZGF0YSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXN1bHQkS2V5OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcmFtZU51bWJlcigpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVlc3QoKUxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VxdWVuY2VJZCgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQkxBQ0tfTEVWRUxfTE9DSyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfQ09SUkVDVElPTl9BQkVSUkFUSU9OX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0NPUlJFQ1RJT05fR0FJTlMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0NPUlJFQ1RJT05fTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfQ09SUkVDVElPTl9UUkFOU0ZPUk0iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUVfQU5USUJBTkRJTkdfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRV9FWFBPU1VSRV9DT01QRU5TQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUVfTE9DSyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRV9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX1BSRUNBUFRVUkVfVFJJR0dFUiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRV9SRUdJT05TIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX1NUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FFX1RBUkdFVF9GUFNfUkFOR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQUZfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9BRl9SRUdJT05TIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FGX1NDRU5FX0NIQU5HRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FGX1NUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0FGX1RSSUdHRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQVdCX0xPQ0siLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQVdCX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQVdCX1JFR0lPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfQVdCX1NUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0NBUFRVUkVfSU5URU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0VGRkVDVF9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX0VOQUJMRV9aU0wiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1BPU1RfUkFXX1NFTlNJVElWSVRZX0JPT1NUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfU0NFTkVfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTF9WSURFT19TVEFCSUxJWkFUSU9OX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU1RPUlRJT05fQ09SUkVDVElPTl9NT0RFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVER0VfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBU0hfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBU0hfU1RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVF9QSVhFTF9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJKUEVHX0dQU19MT0NBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iSlBFR19PUklFTlRBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iSlBFR19RVUFMSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJKUEVHX1RIVU1CTkFJTF9RVUFMSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJKUEVHX1RIVU1CTkFJTF9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5TX0FQRVJUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5TX0RJU1RPUlRJT04iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTEVOU19GSUxURVJfREVOU0lUWSIvPgotCQk8ZmllbGQgbmFtZT0iTEVOU19GT0NBTF9MRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfRk9DVVNfRElTVEFOQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfRk9DVVNfUkFOR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfSU5UUklOU0lDX0NBTElCUkFUSU9OIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfT1BUSUNBTF9TVEFCSUxJWkFUSU9OX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTlNfUE9TRV9ST1RBVElPTiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5TX1BPU0VfVFJBTlNMQVRJT04iIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTEVOU19SQURJQUxfRElTVE9SVElPTiIgc2luY2U9IjIzIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTEVOU19TVEFURSIvPgotCQk8ZmllbGQgbmFtZT0iTk9JU0VfUkVEVUNUSU9OX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUFJPQ0VTU19FRkZFQ1RJVkVfRVhQT1NVUkVfRkFDVE9SIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfUElQRUxJTkVfREVQVEgiLz4KLQkJPGZpZWxkIG5hbWU9IlNDQUxFUl9DUk9QX1JFR0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX0RZTkFNSUNfQkxBQ0tfTEVWRUwiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX0RZTkFNSUNfV0hJVEVfTEVWRUwiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX0VYUE9TVVJFX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9GUkFNRV9EVVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX0dSRUVOX1NQTElUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfTkVVVFJBTF9DT0xPUl9QT0lOVCIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX05PSVNFX1BST0ZJTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9ST0xMSU5HX1NIVVRURVJfU0tFVyIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX1NFTlNJVElWSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5TT1JfVEVTVF9QQVRURVJOX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNPUl9URVNUX1BBVFRFUk5fTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iU0VOU09SX1RJTUVTVEFNUCIvPgotCQk8ZmllbGQgbmFtZT0iU0hBRElOR19NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUSVNUSUNTX0ZBQ0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRJU1RJQ1NfSE9UX1BJWEVMX01BUCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVElTVElDU19IT1RfUElYRUxfTUFQX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRJU1RJQ1NfTEVOU19TSEFESU5HX0NPUlJFQ1RJT05fTUFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUSVNUSUNTX0xFTlNfU0hBRElOR19NQVBfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVElTVElDU19PSVNfREFUQV9NT0RFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRJU1RJQ1NfT0lTX1NBTVBMRVMiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVElTVElDU19TQ0VORV9GTElDS0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FTUFQX0NVUlZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FTUFQX0dBTU1BIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVNQVBfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORU1BUF9QUkVTRVRfQ1VSVkUiIHNpbmNlPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVzdWx0JEtleSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DbGFzczspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0RuZ0NyZWF0b3IiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDaGFyYWN0ZXJpc3RpY3M7TGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVzdWx0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVzY3JpcHRpb24oTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvRG5nQ3JlYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2NhdGlvbihMYW5kcm9pZC9sb2NhdGlvbi9Mb2NhdGlvbjspTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9EbmdDcmVhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9yaWVudGF0aW9uKEkpTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9EbmdDcmVhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRodW1ibmFpbChMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KUxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvRG5nQ3JlYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaHVtYm5haWwoTGFuZHJvaWQvbWVkaWEvSW1hZ2U7KUxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvRG5nQ3JlYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUJ5dGVCdWZmZXIoTGphdmEvaW8vT3V0cHV0U3RyZWFtO0xhbmRyb2lkL3V0aWwvU2l6ZTtMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUltYWdlKExqYXZhL2lvL091dHB1dFN0cmVhbTtMYW5kcm9pZC9tZWRpYS9JbWFnZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlSW5wdXRTdHJlYW0oTGphdmEvaW8vT3V0cHV0U3RyZWFtO0xhbmRyb2lkL3V0aWwvU2l6ZTtMamF2YS9pby9JbnB1dFN0cmVhbTtKKVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9USFVNQk5BSUxfRElNRU5TSU9OIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL1RvdGFsQ2FwdHVyZVJlc3VsdCIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXN1bHQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJ0aWFsUmVzdWx0cygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBoeXNpY2FsQ2FtZXJhUmVzdWx0cygpTGphdmEvdXRpbC9NYXA7IiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFyYW1zL0JsYWNrTGV2ZWxQYXR0ZXJuIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5VG8oW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPZmZzZXRGb3JJbmRleChJSSlJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT1VOVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9wYXJhbXMvQ29sb3JTcGFjZVRyYW5zZm9ybSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMYW5kcm9pZC91dGlsL1JhdGlvbmFsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weUVsZW1lbnRzKFtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weUVsZW1lbnRzKFtMYW5kcm9pZC91dGlsL1JhdGlvbmFsO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVsZW1lbnQoSUkpTGFuZHJvaWQvdXRpbC9SYXRpb25hbDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFyYW1zL0ZhY2UiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7SSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb3VuZHMoKUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZWZ0RXllUG9zaXRpb24oKUxhbmRyb2lkL2dyYXBoaWNzL1BvaW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vdXRoUG9zaXRpb24oKUxhbmRyb2lkL2dyYXBoaWNzL1BvaW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJpZ2h0RXllUG9zaXRpb24oKUxhbmRyb2lkL2dyYXBoaWNzL1BvaW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjb3JlKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRF9VTlNVUFBPUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0NPUkVfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ09SRV9NSU4iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFyYW1zL0lucHV0Q29uZmlndXJhdGlvbiIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcm1hdCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpZHRoKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL3BhcmFtcy9MZW5zU2hhZGluZ01hcCIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0ZJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5R2FpbkZhY3RvcnMoW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2x1bW5Db3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdhaW5GYWN0b3IoSUlJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHYWluRmFjdG9yQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHYWluRmFjdG9yVmVjdG9yKElJKUxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFyYW1zL1JnZ2JDaGFubmVsVmVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvd0NvdW50KClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5JTVVNX0dBSU5fRkFDVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL3BhcmFtcy9NZXRlcmluZ1JlY3RhbmdsZSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL1BvaW50O0xhbmRyb2lkL3V0aWwvU2l6ZTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9wYXJhbXMvTWV0ZXJpbmdSZWN0YW5nbGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXRlcmluZ1dlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlY3QoKUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2l6ZSgpTGFuZHJvaWQvdXRpbC9TaXplOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVwcGVyTGVmdFBvaW50KClMYW5kcm9pZC9ncmFwaGljcy9Qb2ludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRZKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRFUklOR19XRUlHSFRfRE9OVF9DQVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRFUklOR19XRUlHSFRfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRFUklOR19XRUlHSFRfTUlOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL3BhcmFtcy9PaXNTYW1wbGUiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXAoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRYc2hpZnQoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRZc2hpZnQoKUYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFyYW1zL091dHB1dENvbmZpZ3VyYXRpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdXRpbC9TaXplO0xqYXZhL2xhbmcvQ2xhc3M7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTdXJmYWNlKExhbmRyb2lkL3ZpZXcvU3VyZmFjZTspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlU3VyZmFjZVNoYXJpbmcoKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFNoYXJlZFN1cmZhY2VDb3VudCgpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VyZmFjZSgpTGFuZHJvaWQvdmlldy9TdXJmYWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cmZhY2VHcm91cElkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VyZmFjZXMoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVN1cmZhY2UoTGFuZHJvaWQvdmlldy9TdXJmYWNlOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQaHlzaWNhbENhbWVyYUlkKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUkZBQ0VfR1JPVVBfSURfTk9ORSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9wYXJhbXMvUmdnYkNoYW5uZWxWZWN0b3IiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weVRvKFtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qmx1ZSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBvbmVudChJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcmVlbkV2ZW4oKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcmVlbk9kZCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlZCgpRiIvPgotCQk8ZmllbGQgbmFtZT0iQkxVRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdSRUVOX0VWRU4iLz4KLQkJPGZpZWxkIG5hbWU9IkdSRUVOX09ERCIvPgotCQk8ZmllbGQgbmFtZT0iUkVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL3BhcmFtcy9TZXNzaW9uQ29uZmlndXJhdGlvbiIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGphdmEvdXRpbC9MaXN0O0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjtMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uJFN0YXRlQ2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeGVjdXRvcigpTGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0Q29uZmlndXJhdGlvbigpTGFuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9wYXJhbXMvSW5wdXRDb25maWd1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE91dHB1dENvbmZpZ3VyYXRpb25zKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vzc2lvblBhcmFtZXRlcnMoKUxhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vzc2lvblR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0ZUNhbGxiYWNrKClMYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNhcHR1cmVTZXNzaW9uJFN0YXRlQ2FsbGJhY2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5wdXRDb25maWd1cmF0aW9uKExhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFyYW1zL0lucHV0Q29uZmlndXJhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlc3Npb25QYXJhbWV0ZXJzKExhbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlcXVlc3Q7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFU1NJT05fSElHSF9TUEVFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0VTU0lPTl9SRUdVTEFSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL3BhcmFtcy9TdHJlYW1Db25maWd1cmF0aW9uTWFwIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGlnaFJlc29sdXRpb25PdXRwdXRTaXplcyhJKVtMYW5kcm9pZC91dGlsL1NpemU7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaWdoU3BlZWRWaWRlb0Zwc1JhbmdlcygpW0xhbmRyb2lkL3V0aWwvUmFuZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGlnaFNwZWVkVmlkZW9GcHNSYW5nZXNGb3IoTGFuZHJvaWQvdXRpbC9TaXplOylbTGFuZHJvaWQvdXRpbC9SYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaWdoU3BlZWRWaWRlb1NpemVzKClbTGFuZHJvaWQvdXRpbC9TaXplOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpZ2hTcGVlZFZpZGVvU2l6ZXNGb3IoTGFuZHJvaWQvdXRpbC9SYW5nZTspW0xhbmRyb2lkL3V0aWwvU2l6ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dEZvcm1hdHMoKVtJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dFNpemVzKEkpW0xhbmRyb2lkL3V0aWwvU2l6ZTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE91dHB1dEZvcm1hdHMoKVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3V0cHV0TWluRnJhbWVEdXJhdGlvbihJTGFuZHJvaWQvdXRpbC9TaXplOylKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3V0cHV0TWluRnJhbWVEdXJhdGlvbihMamF2YS9sYW5nL0NsYXNzO0xhbmRyb2lkL3V0aWwvU2l6ZTspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE91dHB1dFNpemVzKEkpW0xhbmRyb2lkL3V0aWwvU2l6ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRwdXRTaXplcyhMamF2YS9sYW5nL0NsYXNzOylbTGFuZHJvaWQvdXRpbC9TaXplOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE91dHB1dFN0YWxsRHVyYXRpb24oSUxhbmRyb2lkL3V0aWwvU2l6ZTspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE91dHB1dFN0YWxsRHVyYXRpb24oTGphdmEvbGFuZy9DbGFzcztMYW5kcm9pZC91dGlsL1NpemU7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWxpZE91dHB1dEZvcm1hdHNGb3JJbnB1dChJKVtJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc091dHB1dFN1cHBvcnRlZEZvcihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc091dHB1dFN1cHBvcnRlZEZvcihMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc091dHB1dFN1cHBvcnRlZEZvcihMamF2YS9sYW5nL0NsYXNzOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL3BhcmFtcy9Ub25lbWFwQ3VydmUiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0ZbRltGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5Q29sb3JDdXJ2ZShJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb2ludChJSSlMYW5kcm9pZC9ncmFwaGljcy9Qb2ludEY7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9pbnRDb3VudChJKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfQkxVRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9HUkVFTiIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9SRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkxFVkVMX0JMQUNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRVZFTF9XSElURSIvPgotCQk8ZmllbGQgbmFtZT0iUE9JTlRfU0laRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvZGlzcGxheS9EaXNwbGF5TWFuYWdlciIgc2luY2U9IjE3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVWaXJ0dWFsRGlzcGxheShMamF2YS9sYW5nL1N0cmluZztJSUlMYW5kcm9pZC92aWV3L1N1cmZhY2U7SSlMYW5kcm9pZC9oYXJkd2FyZS9kaXNwbGF5L1ZpcnR1YWxEaXNwbGF5OyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVmlydHVhbERpc3BsYXkoTGphdmEvbGFuZy9TdHJpbmc7SUlJTGFuZHJvaWQvdmlldy9TdXJmYWNlO0lMYW5kcm9pZC9oYXJkd2FyZS9kaXNwbGF5L1ZpcnR1YWxEaXNwbGF5JENhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KUxhbmRyb2lkL2hhcmR3YXJlL2Rpc3BsYXkvVmlydHVhbERpc3BsYXk7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5KEkpTGFuZHJvaWQvdmlldy9EaXNwbGF5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlzKClbTGFuZHJvaWQvdmlldy9EaXNwbGF5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlzKExqYXZhL2xhbmcvU3RyaW5nOylbTGFuZHJvaWQvdmlldy9EaXNwbGF5OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyRGlzcGxheUxpc3RlbmVyKExhbmRyb2lkL2hhcmR3YXJlL2Rpc3BsYXkvRGlzcGxheU1hbmFnZXIkRGlzcGxheUxpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyRGlzcGxheUxpc3RlbmVyKExhbmRyb2lkL2hhcmR3YXJlL2Rpc3BsYXkvRGlzcGxheU1hbmFnZXIkRGlzcGxheUxpc3RlbmVyOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNQTEFZX0NBVEVHT1JZX1BSRVNFTlRBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iVklSVFVBTF9ESVNQTEFZX0ZMQUdfQVVUT19NSVJST1IiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVklSVFVBTF9ESVNQTEFZX0ZMQUdfT1dOX0NPTlRFTlRfT05MWSIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSVJUVUFMX0RJU1BMQVlfRkxBR19QUkVTRU5UQVRJT04iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVklSVFVBTF9ESVNQTEFZX0ZMQUdfUFVCTElDIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlZJUlRVQUxfRElTUExBWV9GTEFHX1NFQ1VSRSIgc2luY2U9IjE5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9kaXNwbGF5L0Rpc3BsYXlNYW5hZ2VyJERpc3BsYXlMaXN0ZW5lciIgc2luY2U9IjE3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGlzcGxheUFkZGVkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGlzcGxheUNoYW5nZWQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EaXNwbGF5UmVtb3ZlZChJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2Rpc3BsYXkvVmlydHVhbERpc3BsYXkiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5KClMYW5kcm9pZC92aWV3L0Rpc3BsYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VyZmFjZSgpTGFuZHJvaWQvdmlldy9TdXJmYWNlOyIgc2luY2U9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2l6ZShJSUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VyZmFjZShMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiIHNpbmNlPSIyMCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvZGlzcGxheS9WaXJ0dWFsRGlzcGxheSRDYWxsYmFjayIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGF1c2VkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXN1bWVkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdG9wcGVkKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9maW5nZXJwcmludC9GaW5nZXJwcmludE1hbmFnZXIiIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXV0aGVudGljYXRlKExhbmRyb2lkL2hhcmR3YXJlL2ZpbmdlcnByaW50L0ZpbmdlcnByaW50TWFuYWdlciRDcnlwdG9PYmplY3Q7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsO0lMYW5kcm9pZC9oYXJkd2FyZS9maW5nZXJwcmludC9GaW5nZXJwcmludE1hbmFnZXIkQXV0aGVudGljYXRpb25DYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0Vucm9sbGVkRmluZ2VycHJpbnRzKClaIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSGFyZHdhcmVEZXRlY3RlZCgpWiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTkdFUlBSSU5UX0FDUVVJUkVEX0dPT0QiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTkdFUlBSSU5UX0FDUVVJUkVEX0lNQUdFUl9ESVJUWSIvPgotCQk8ZmllbGQgbmFtZT0iRklOR0VSUFJJTlRfQUNRVUlSRURfSU5TVUZGSUNJRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSU5HRVJQUklOVF9BQ1FVSVJFRF9QQVJUSUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSU5HRVJQUklOVF9BQ1FVSVJFRF9UT09fRkFTVCIvPgotCQk8ZmllbGQgbmFtZT0iRklOR0VSUFJJTlRfQUNRVUlSRURfVE9PX1NMT1ciLz4KLQkJPGZpZWxkIG5hbWU9IkZJTkdFUlBSSU5UX0VSUk9SX0NBTkNFTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSU5HRVJQUklOVF9FUlJPUl9IV19OT1RfUFJFU0VOVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGSU5HRVJQUklOVF9FUlJPUl9IV19VTkFWQUlMQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iRklOR0VSUFJJTlRfRVJST1JfTE9DS09VVCIvPgotCQk8ZmllbGQgbmFtZT0iRklOR0VSUFJJTlRfRVJST1JfTE9DS09VVF9QRVJNQU5FTlQiIHNpbmNlPSIyNyIvPgotCQk8ZmllbGQgbmFtZT0iRklOR0VSUFJJTlRfRVJST1JfTk9fRklOR0VSUFJJTlRTIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTkdFUlBSSU5UX0VSUk9SX05PX1NQQUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSU5HRVJQUklOVF9FUlJPUl9USU1FT1VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSU5HRVJQUklOVF9FUlJPUl9VTkFCTEVfVE9fUFJPQ0VTUyIvPgotCQk8ZmllbGQgbmFtZT0iRklOR0VSUFJJTlRfRVJST1JfVVNFUl9DQU5DRUxFRCIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGSU5HRVJQUklOVF9FUlJPUl9WRU5ET1IiIHNpbmNlPSIyNyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvZmluZ2VycHJpbnQvRmluZ2VycHJpbnRNYW5hZ2VyJEF1dGhlbnRpY2F0aW9uQ2FsbGJhY2siIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BdXRoZW50aWNhdGlvbkVycm9yKElMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQXV0aGVudGljYXRpb25GYWlsZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF1dGhlbnRpY2F0aW9uSGVscChJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF1dGhlbnRpY2F0aW9uU3VjY2VlZGVkKExhbmRyb2lkL2hhcmR3YXJlL2ZpbmdlcnByaW50L0ZpbmdlcnByaW50TWFuYWdlciRBdXRoZW50aWNhdGlvblJlc3VsdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvZmluZ2VycHJpbnQvRmluZ2VycHJpbnRNYW5hZ2VyJEF1dGhlbnRpY2F0aW9uUmVzdWx0IiBzaW5jZT0iMjMiIGRlcHJlY2F0ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENyeXB0b09iamVjdCgpTGFuZHJvaWQvaGFyZHdhcmUvZmluZ2VycHJpbnQvRmluZ2VycHJpbnRNYW5hZ2VyJENyeXB0b09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2ZpbmdlcnByaW50L0ZpbmdlcnByaW50TWFuYWdlciRDcnlwdG9PYmplY3QiIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3NlY3VyaXR5L1NpZ25hdHVyZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YXgvY3J5cHRvL0NpcGhlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YXgvY3J5cHRvL01hYzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENpcGhlcigpTGphdmF4L2NyeXB0by9DaXBoZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFjKClMamF2YXgvY3J5cHRvL01hYzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaWduYXR1cmUoKUxqYXZhL3NlY3VyaXR5L1NpZ25hdHVyZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2lucHV0L0lucHV0TWFuYWdlciIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0RGV2aWNlKEkpTGFuZHJvaWQvdmlldy9JbnB1dERldmljZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dERldmljZUlkcygpW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlcklucHV0RGV2aWNlTGlzdGVuZXIoTGFuZHJvaWQvaGFyZHdhcmUvaW5wdXQvSW5wdXRNYW5hZ2VyJElucHV0RGV2aWNlTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJJbnB1dERldmljZUxpc3RlbmVyKExhbmRyb2lkL2hhcmR3YXJlL2lucHV0L0lucHV0TWFuYWdlciRJbnB1dERldmljZUxpc3RlbmVyOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUVVFUllfS0VZQk9BUkRfTEFZT1VUUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9EQVRBX0tFWUJPQVJEX0xBWU9VVFMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2lucHV0L0lucHV0TWFuYWdlciRJbnB1dERldmljZUxpc3RlbmVyIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25JbnB1dERldmljZUFkZGVkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSW5wdXREZXZpY2VDaGFuZ2VkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSW5wdXREZXZpY2VSZW1vdmVkKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvbG9jYXRpb24vR2VvZmVuY2VIYXJkd2FyZSIgc2luY2U9IjE4IiByZW1vdmVkPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRHZW9mZW5jZShJSUxhbmRyb2lkL2hhcmR3YXJlL2xvY2F0aW9uL0dlb2ZlbmNlSGFyZHdhcmVSZXF1ZXN0O0xhbmRyb2lkL2hhcmR3YXJlL2xvY2F0aW9uL0dlb2ZlbmNlSGFyZHdhcmVDYWxsYmFjazspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vbml0b3JpbmdUeXBlcygpW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0dXNPZk1vbml0b3JpbmdUeXBlKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InBhdXNlR2VvZmVuY2UoSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyRm9yTW9uaXRvclN0YXRlQ2hhbmdlQ2FsbGJhY2soSUxhbmRyb2lkL2hhcmR3YXJlL2xvY2F0aW9uL0dlb2ZlbmNlSGFyZHdhcmVNb25pdG9yQ2FsbGJhY2s7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVHZW9mZW5jZShJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdW1lR2VvZmVuY2UoSUlJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyRm9yTW9uaXRvclN0YXRlQ2hhbmdlQ2FsbGJhY2soSUxhbmRyb2lkL2hhcmR3YXJlL2xvY2F0aW9uL0dlb2ZlbmNlSGFyZHdhcmVNb25pdG9yQ2FsbGJhY2s7KVoiLz4KLQkJPGZpZWxkIG5hbWU9IkdFT0ZFTkNFX0VOVEVSRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdFT0ZFTkNFX0VSUk9SX0lEX0VYSVNUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0VPRkVOQ0VfRVJST1JfSURfVU5LTk9XTiIvPgotCQk8ZmllbGQgbmFtZT0iR0VPRkVOQ0VfRVJST1JfSU5WQUxJRF9UUkFOU0lUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRU9GRU5DRV9FUlJPUl9UT09fTUFOWV9HRU9GRU5DRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdFT0ZFTkNFX0VYSVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0VPRkVOQ0VfRkFJTFVSRSIvPgotCQk8ZmllbGQgbmFtZT0iR0VPRkVOQ0VfU1VDQ0VTUyIvPgotCQk8ZmllbGQgbmFtZT0iR0VPRkVOQ0VfVU5DRVJUQUlOIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05JVE9SSU5HX1RZUEVfR1BTX0hBUkRXQVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05JVE9SX0NVUlJFTlRMWV9BVkFJTEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTklUT1JfQ1VSUkVOVExZX1VOQVZBSUxBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05JVE9SX1VOU1VQUE9SVEVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9sb2NhdGlvbi9HZW9mZW5jZUhhcmR3YXJlQ2FsbGJhY2siIHNpbmNlPSIxOCIgcmVtb3ZlZD0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZW9mZW5jZUFkZChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZW9mZW5jZVBhdXNlKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdlb2ZlbmNlUmVtb3ZlKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdlb2ZlbmNlUmVzdW1lKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdlb2ZlbmNlVHJhbnNpdGlvbihJSUxhbmRyb2lkL2xvY2F0aW9uL0xvY2F0aW9uO0pJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2xvY2F0aW9uL0dlb2ZlbmNlSGFyZHdhcmVNb25pdG9yQ2FsbGJhY2siIHNpbmNlPSIxOCIgcmVtb3ZlZD0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Nb25pdG9yaW5nU3lzdGVtQ2hhbmdlKElaTGFuZHJvaWQvbG9jYXRpb24vTG9jYXRpb247KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL2xvY2F0aW9uL0dlb2ZlbmNlSGFyZHdhcmVSZXF1ZXN0IiBzaW5jZT0iMTgiIHJlbW92ZWQ9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUNpcmN1bGFyR2VvZmVuY2UoREREKUxhbmRyb2lkL2hhcmR3YXJlL2xvY2F0aW9uL0dlb2ZlbmNlSGFyZHdhcmVSZXF1ZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhc3RUcmFuc2l0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF0aXR1ZGUoKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25naXR1ZGUoKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb25pdG9yVHJhbnNpdGlvbnMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb3RpZmljYXRpb25SZXNwb25zaXZlbmVzcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJhZGl1cygpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVua25vd25UaW1lcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldExhc3RUcmFuc2l0aW9uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1vbml0b3JUcmFuc2l0aW9ucyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROb3RpZmljYXRpb25SZXNwb25zaXZlbmVzcyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVbmtub3duVGltZXIoSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiQWNjZXNzb3J5IiBzaW5jZT0iMTIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNjcmlwdGlvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFudWZhY3R1cmVyKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2RlbCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VyaWFsKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZlcnNpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkNvbmZpZ3VyYXRpb24iIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGphdmEvbGFuZy9TdHJpbmc7SUkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlcmZhY2UoSSlMYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiSW50ZXJmYWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVyZmFjZUNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4UG93ZXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlbW90ZVdha2V1cCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2VsZlBvd2VyZWQoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JDb25zdGFudHMiIHNpbmNlPSIxMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQl9DTEFTU19BUFBfU1BFQyIvPgotCQk8ZmllbGQgbmFtZT0iVVNCX0NMQVNTX0FVRElPIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0JfQ0xBU1NfQ0RDX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQl9DTEFTU19DT01NIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0JfQ0xBU1NfQ09OVEVOVF9TRUMiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQl9DTEFTU19DU0NJRCIvPgotCQk8ZmllbGQgbmFtZT0iVVNCX0NMQVNTX0hJRCIvPgotCQk8ZmllbGQgbmFtZT0iVVNCX0NMQVNTX0hVQiIvPgotCQk8ZmllbGQgbmFtZT0iVVNCX0NMQVNTX01BU1NfU1RPUkFHRSIvPgotCQk8ZmllbGQgbmFtZT0iVVNCX0NMQVNTX01JU0MiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQl9DTEFTU19QRVJfSU5URVJGQUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0JfQ0xBU1NfUEhZU0lDQSIvPgotCQk8ZmllbGQgbmFtZT0iVVNCX0NMQVNTX1BSSU5URVIiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQl9DTEFTU19TVElMTF9JTUFHRSIvPgotCQk8ZmllbGQgbmFtZT0iVVNCX0NMQVNTX1ZFTkRPUl9TUEVDIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0JfQ0xBU1NfVklERU8iLz4KLQkJPGZpZWxkIG5hbWU9IlVTQl9DTEFTU19XSVJFTEVTU19DT05UUk9MTEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0JfRElSX0lOIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0JfRElSX09VVCIvPgotCQk8ZmllbGQgbmFtZT0iVVNCX0VORFBPSU5UX0RJUl9NQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0siLz4KLQkJPGZpZWxkIG5hbWU9IlVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0JfRU5EUE9JTlRfWEZFUl9CVUxLIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0JfRU5EUE9JTlRfWEZFUl9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQl9FTkRQT0lOVF9YRkVSX0lTT0MiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQl9JTlRFUkZBQ0VfU1VCQ0xBU1NfQk9PVCIvPgotCQk8ZmllbGQgbmFtZT0iVVNCX1NVQkNMQVNTX1ZFTkRPUl9TUEVDIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0JfVFlQRV9DTEFTUyIvPgotCQk8ZmllbGQgbmFtZT0iVVNCX1RZUEVfTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iVVNCX1RZUEVfUkVTRVJWRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQl9UWVBFX1NUQU5EQVJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0JfVFlQRV9WRU5ET1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JEZXZpY2UiIHNpbmNlPSIxMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJSUlJSUxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25maWd1cmF0aW9uKEkpTGFuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkNvbmZpZ3VyYXRpb247IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25maWd1cmF0aW9uQ291bnQoKUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZUNsYXNzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXZpY2VJZChMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZU5hbWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXZpY2VQcm90b2NvbCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZVN1YmNsYXNzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZXJmYWNlKEkpTGFuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkludGVyZmFjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlcmZhY2VDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hbnVmYWN0dXJlck5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvZHVjdElkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvZHVjdE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VyaWFsTnVtYmVyKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZlbmRvcklkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVyc2lvbigpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JEZXZpY2VDb25uZWN0aW9uIiBzaW5jZT0iMTIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiRGV2aWNlOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWxrVHJhbnNmZXIoTGFuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkVuZHBvaW50O1tCSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1bGtUcmFuc2ZlcihMYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiRW5kcG9pbnQ7W0JJSUkpSSIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xhaW1JbnRlcmZhY2UoTGFuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkludGVyZmFjZTtaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRyb2xUcmFuc2ZlcihJSUlJW0JJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udHJvbFRyYW5zZmVyKElJSUlbQklJSSlJIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWxlRGVzY3JpcHRvcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJhd0Rlc2NyaXB0b3JzKClbQiIgc2luY2U9IjEzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VyaWFsKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlSW50ZXJmYWNlKExhbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JJbnRlcmZhY2U7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0V2FpdCgpTGFuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYlJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFdhaXQoSilMYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiUmVxdWVzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbmZpZ3VyYXRpb24oTGFuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkNvbmZpZ3VyYXRpb247KVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludGVyZmFjZShMYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiSW50ZXJmYWNlOylaIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JFbmRwb2ludCIgc2luY2U9IjEyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWRkcmVzcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXJlY3Rpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmRwb2ludE51bWJlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVydmFsKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4UGFja2V0U2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JJbnRlcmZhY2UiIHNpbmNlPSIxMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUxqYXZhL2xhbmcvU3RyaW5nO0lJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbHRlcm5hdGVTZXR0aW5nKClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmRwb2ludChJKUxhbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JFbmRwb2ludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmRwb2ludENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlcmZhY2VDbGFzcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVyZmFjZVByb3RvY29sKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZXJmYWNlU3ViY2xhc3MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYk1hbmFnZXIiIHNpbmNlPSIxMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY2Nlc3NvcnlMaXN0KClbTGFuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkFjY2Vzc29yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXZpY2VMaXN0KClMamF2YS91dGlsL0hhc2hNYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzUGVybWlzc2lvbihMYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiQWNjZXNzb3J5OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzUGVybWlzc2lvbihMYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiRGV2aWNlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkFjY2Vzc29yeShMYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiQWNjZXNzb3J5OylMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuRGV2aWNlKExhbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JEZXZpY2U7KUxhbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JEZXZpY2VDb25uZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RQZXJtaXNzaW9uKExhbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JBY2Nlc3Nvcnk7TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0UGVybWlzc2lvbihMYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiRGV2aWNlO0xhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVVNCX0FDQ0VTU09SWV9BVFRBQ0hFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1VTQl9BQ0NFU1NPUllfREVUQUNIRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9VU0JfREVWSUNFX0FUVEFDSEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVVNCX0RFVklDRV9ERVRBQ0hFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUNDRVNTT1JZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9ERVZJQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BFUk1JU1NJT05fR1JBTlRFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYlJlcXVlc3QiIHNpbmNlPSIxMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWwoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsaWVudERhdGEoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuZHBvaW50KClMYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiRW5kcG9pbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdGlhbGl6ZShMYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiRGV2aWNlQ29ubmVjdGlvbjtMYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiRW5kcG9pbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWV1ZShMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVldWUoTGphdmEvbmlvL0J5dGVCdWZmZXI7SSlaIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENsaWVudERhdGEoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS9sYW5nL1VDaGFyYWN0ZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9pY3UvbGFuZy9VQ2hhcmFjdGVyRW51bXMkRUNoYXJhY3RlckNhdGVnb3J5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvaWN1L2xhbmcvVUNoYXJhY3RlckVudW1zJEVDaGFyYWN0ZXJEaXJlY3Rpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFyQ291bnQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29kZVBvaW50QXQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29kZVBvaW50QXQoW0NJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb2RlUG9pbnRBdChbQ0lJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb2RlUG9pbnRCZWZvcmUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29kZVBvaW50QmVmb3JlKFtDSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29kZVBvaW50QmVmb3JlKFtDSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvZGVQb2ludENvdW50KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb2RlUG9pbnRDb3VudChbQ0lJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaWdpdChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaWdpdChJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9sZENhc2UoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvbGRDYXNlKElaKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb2xkQ2FzZShMamF2YS9sYW5nL1N0cmluZztJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvbGRDYXNlKExqYXZhL2xhbmcvU3RyaW5nO1opTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRGlnaXQoSUkpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFnZShJKUxhbmRyb2lkL2ljdS91dGlsL1ZlcnNpb25JbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpZGlQYWlyZWRCcmFja2V0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJGcm9tRXh0ZW5kZWROYW1lKExqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhckZyb21OYW1lKExqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhckZyb21OYW1lQWxpYXMoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2RlUG9pbnQoQylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29kZVBvaW50KENDKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21iaW5pbmdDbGFzcyhJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXJlY3Rpb24oSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlyZWN0aW9uYWxpdHkoSSlCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZW5kZWROYW1lKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZW5kZWROYW1lSXRlcmF0b3IoKUxhbmRyb2lkL2ljdS91dGlsL1ZhbHVlSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGFuTnVtZXJpY1ZhbHVlKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludFByb3BlcnR5TWF4VmFsdWUoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50UHJvcGVydHlNaW5WYWx1ZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRQcm9wZXJ0eVZhbHVlKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaXJyb3IoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWVBbGlhcyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWVJdGVyYXRvcigpTGFuZHJvaWQvaWN1L3V0aWwvVmFsdWVJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1lcmljVmFsdWUoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvcGVydHlFbnVtKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvcGVydHlOYW1lKElJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3BlcnR5VmFsdWVFbnVtKElMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3BlcnR5VmFsdWVOYW1lKElJSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGVJdGVyYXRvcigpTGFuZHJvaWQvaWN1L3V0aWwvUmFuZ2VWYWx1ZUl0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVuaWNvZGVOdW1lcmljVmFsdWUoSSlEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5pY29kZVZlcnNpb24oKUxhbmRyb2lkL2ljdS91dGlsL1ZlcnNpb25JbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0JpbmFyeVByb3BlcnR5KElJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JNUChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Jhc2VGb3JtKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGVmaW5lZChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RpZ2l0KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSGlnaFN1cnJvZ2F0ZShDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0lTT0NvbnRyb2woSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJZGVudGlmaWVySWdub3JhYmxlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSmF2YUlkZW50aWZpZXJQYXJ0KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSmF2YUlkZW50aWZpZXJTdGFydChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xlZ2FsKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTGVnYWwoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xldHRlcihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xldHRlck9yRGlnaXQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMb3dTdXJyb2dhdGUoQylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMb3dlckNhc2UoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNNaXJyb3JlZChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ByaW50YWJsZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NwYWNlQ2hhcihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N1cHBsZW1lbnRhcnkoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTdXBwbGVtZW50YXJ5Q29kZVBvaW50KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3Vycm9nYXRlUGFpcihDQylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUaXRsZUNhc2UoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVQWxwaGFiZXRpYyhJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VMb3dlcmNhc2UoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVVXBwZXJjYXNlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVVdoaXRlU3BhY2UoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVbmljb2RlSWRlbnRpZmllclBhcnQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVbmljb2RlSWRlbnRpZmllclN0YXJ0KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVXBwZXJDYXNlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmFsaWRDb2RlUG9pbnQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXaGl0ZXNwYWNlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9mZnNldEJ5Q29kZVBvaW50cyhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2Zmc2V0QnlDb2RlUG9pbnRzKFtDSUlJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9DaGFycyhJKVtDIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9DaGFycyhJW0NJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0NvZGVQb2ludChDQylJIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9Mb3dlckNhc2UoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9Mb3dlckNhc2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9Mb3dlckNhc2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvTG93ZXJDYXNlKExqYXZhL3V0aWwvTG9jYWxlO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1N0cmluZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvVGl0bGVDYXNlKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InRvVGl0bGVDYXNlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9UaXRsZUNhc2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdGV4dC9CcmVha0l0ZXJhdG9yO0kpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9UaXRsZUNhc2UoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9UaXRsZUNhc2UoTGphdmEvdXRpbC9Mb2NhbGU7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9UaXRsZUNhc2UoTGphdmEvdXRpbC9Mb2NhbGU7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvcjtJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvVXBwZXJDYXNlKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InRvVXBwZXJDYXNlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvVXBwZXJDYXNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1VwcGVyQ2FzZShMamF2YS91dGlsL0xvY2FsZTtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT0xEX0NBU0VfREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lBTF9JIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfQ09ERV9QT0lOVCIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX0hJR0hfU1VSUk9HQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfTE9XX1NVUlJPR0FURSIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1JBRElYIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfU1VSUk9HQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9DT0RFX1BPSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fSElHSF9TVVJST0dBVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9MT1dfU1VSUk9HQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fUkFESVgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9TVVBQTEVNRU5UQVJZX0NPREVfUE9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9TVVJST0dBVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iTk9fTlVNRVJJQ19WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iUkVQTEFDRU1FTlRfQ0hBUiIvPgotCQk8ZmllbGQgbmFtZT0iU1VQUExFTUVOVEFSWV9NSU5fVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IlRJVExFQ0FTRV9OT19CUkVBS19BREpVU1RNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSVRMRUNBU0VfTk9fTE9XRVJDQVNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvbGFuZy9VQ2hhcmFjdGVyJEJpZGlQYWlyZWRCcmFja2V0VHlwZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQ0xPU0UiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PTkUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRU4iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS9sYW5nL1VDaGFyYWN0ZXIkRGVjb21wb3NpdGlvblR5cGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTk9OSUNBTCIvPgotCQk8ZmllbGQgbmFtZT0iQ0lSQ0xFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT05UIi8+Ci0JCTxmaWVsZCBuYW1lPSJGUkFDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iSU5JVElBTCIvPgotCQk8ZmllbGQgbmFtZT0iSVNPTEFURUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBTCIvPgotCQk8ZmllbGQgbmFtZT0iTkFSUk9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT0JSRUFLIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJTTUFMTCIvPgotCQk8ZmllbGQgbmFtZT0iU1FVQVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUIiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJWRVJUSUNBTCIvPgotCQk8ZmllbGQgbmFtZT0iV0lERSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L2xhbmcvVUNoYXJhY3RlciRFYXN0QXNpYW5XaWR0aCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQU1CSUdVT1VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJGVUxMV0lEVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTEZXSURUSCIvPgotCQk8ZmllbGQgbmFtZT0iTkFSUk9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVVUUkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSURFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvbGFuZy9VQ2hhcmFjdGVyJEdyYXBoZW1lQ2x1c3RlckJyZWFrIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUiIvPgotCQk8ZmllbGQgbmFtZT0iRVhURU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJFX0JBU0UiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRV9CQVNFX0dBWiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFX01PRElGSUVSIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMVUVfQUZURVJfWldKIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkwiLz4KLQkJPGZpZWxkIG5hbWU9IkxGIi8+Ci0JCTxmaWVsZCBuYW1lPSJMViIvPgotCQk8ZmllbGQgbmFtZT0iTFZUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPVEhFUiIvPgotCQk8ZmllbGQgbmFtZT0iUFJFUEVORCIvPgotCQk8ZmllbGQgbmFtZT0iUkVHSU9OQUxfSU5ESUNBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUEFDSU5HX01BUksiLz4KLQkJPGZpZWxkIG5hbWU9IlQiLz4KLQkJPGZpZWxkIG5hbWU9IlYiLz4KLQkJPGZpZWxkIG5hbWU9IlpXSiIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvbGFuZy9VQ2hhcmFjdGVyJEhhbmd1bFN5bGxhYmxlVHlwZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iTEVBRElOR19KQU1PIi8+Ci0JCTxmaWVsZCBuYW1lPSJMVlRfU1lMTEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkxWX1NZTExBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1RfQVBQTElDQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iVFJBSUxJTkdfSkFNTyIvPgotCQk8ZmllbGQgbmFtZT0iVk9XRUxfSkFNTyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L2xhbmcvVUNoYXJhY3RlciRKb2luaW5nR3JvdXAiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkFGUklDQU5fRkVIIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFGUklDQU5fTk9PTiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBRlJJQ0FOX1FBRiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkFMQVBIIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTEVGIi8+Ci0JCTxmaWVsZCBuYW1lPSJCRUgiLz4KLQkJPGZpZWxkIG5hbWU9IkJFVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkJVUlVTSEFTS0lfWUVIX0JBUlJFRSIvPgotCQk8ZmllbGQgbmFtZT0iREFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQUxBVEhfUklTSCIvPgotCQk8ZmllbGQgbmFtZT0iRSIvPgotCQk8ZmllbGQgbmFtZT0iRkFSU0lfWUVIIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRSIvPgotCQk8ZmllbGQgbmFtZT0iRkVIIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSU5BTF9TRU1LQVRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHQUYiLz4KLQkJPGZpZWxkIG5hbWU9IkdBTUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQUgiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTVpBX09OX0hFSF9HT0FMIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQU5JRklfUk9ISU5HWUFfS0lOTkFfWUEiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iSEFOSUZJX1JPSElOR1lBX1BBIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkhFIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRUgiLz4KLQkJPGZpZWxkIG5hbWU9IkhFSF9HT0FMIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRVRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQUYiLz4KLQkJPGZpZWxkIG5hbWU9IktBUEgiLz4KLQkJPGZpZWxkIG5hbWU9IktIQVBIIi8+Ci0JCTxmaWVsZCBuYW1lPSJLTk9UVEVEX0hFSCIvPgotCQk8ZmllbGQgbmFtZT0iTEFNIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQU1BREgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTEFZQUxBTV9CSEEiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTUFMQVlBTEFNX0pBIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTEFZQUxBTV9MTEEiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTUFMQVlBTEFNX0xMTEEiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTUFMQVlBTEFNX05HQSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQUxBWUFMQU1fTk5BIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTEFZQUxBTV9OTk5BIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTEFZQUxBTV9OWUEiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTUFMQVlBTEFNX1JBIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTEFZQUxBTV9TU0EiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTUFMQVlBTEFNX1RUQSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5JQ0hBRUFOX0FMRVBIIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5JQ0hBRUFOX0FZSU4iLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTklDSEFFQU5fQkVUSCIvPgotCQk8ZmllbGQgbmFtZT0iTUFOSUNIQUVBTl9EQUxFVEgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTklDSEFFQU5fREhBTUVESCIvPgotCQk8ZmllbGQgbmFtZT0iTUFOSUNIQUVBTl9GSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5JQ0hBRUFOX0dJTUVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5JQ0hBRUFOX0hFVEgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTklDSEFFQU5fSFVORFJFRCIvPgotCQk8ZmllbGQgbmFtZT0iTUFOSUNIQUVBTl9LQVBIIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5JQ0hBRUFOX0xBTUVESCIvPgotCQk8ZmllbGQgbmFtZT0iTUFOSUNIQUVBTl9NRU0iLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTklDSEFFQU5fTlVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5JQ0hBRUFOX09ORSIvPgotCQk8ZmllbGQgbmFtZT0iTUFOSUNIQUVBTl9QRSIvPgotCQk8ZmllbGQgbmFtZT0iTUFOSUNIQUVBTl9RT1BIIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5JQ0hBRUFOX1JFU0giLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTklDSEFFQU5fU0FESEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTklDSEFFQU5fU0FNRUtIIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5JQ0hBRUFOX1RBVyIvPgotCQk8ZmllbGQgbmFtZT0iTUFOSUNIQUVBTl9URU4iLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTklDSEFFQU5fVEVUSCIvPgotCQk8ZmllbGQgbmFtZT0iTUFOSUNIQUVBTl9USEFNRURIIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5JQ0hBRUFOX1RXRU5UWSIvPgotCQk8ZmllbGQgbmFtZT0iTUFOSUNIQUVBTl9XQVciLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTklDSEFFQU5fWU9ESCIvPgotCQk8ZmllbGQgbmFtZT0iTUFOSUNIQUVBTl9aQVlJTiIvPgotCQk8ZmllbGQgbmFtZT0iTUVFTSIvPgotCQk8ZmllbGQgbmFtZT0iTUlNIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19KT0lOSU5HX0dST1VQIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVU4iLz4KLQkJPGZpZWxkIG5hbWU9Ik5ZQSIvPgotCQk8ZmllbGQgbmFtZT0iUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlFBRiIvPgotCQk8ZmllbGQgbmFtZT0iUUFQSCIvPgotCQk8ZmllbGQgbmFtZT0iUkVIIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVZFUlNFRF9QRSIvPgotCQk8ZmllbGQgbmFtZT0iUk9ISU5HWUFfWUVIIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNBREhFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU1LQVRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSElOIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJBSUdIVF9XQVciLz4KLQkJPGZpZWxkIG5hbWU9IlNXQVNIX0tBRiIvPgotCQk8ZmllbGQgbmFtZT0iU1lSSUFDX1dBVyIvPgotCQk8ZmllbGQgbmFtZT0iVEFIIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQVciLz4KLQkJPGZpZWxkIG5hbWU9IlRFSF9NQVJCVVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJURUhfTUFSQlVUQV9HT0FMIi8+Ci0JCTxmaWVsZCBuYW1lPSJURVRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJXQVciLz4KLQkJPGZpZWxkIG5hbWU9IllFSCIvPgotCQk8ZmllbGQgbmFtZT0iWUVIX0JBUlJFRSIvPgotCQk8ZmllbGQgbmFtZT0iWUVIX1dJVEhfVEFJTCIvPgotCQk8ZmllbGQgbmFtZT0iWVVESCIvPgotCQk8ZmllbGQgbmFtZT0iWVVESF9IRSIvPgotCQk8ZmllbGQgbmFtZT0iWkFJTiIvPgotCQk8ZmllbGQgbmFtZT0iWkhBSU4iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS9sYW5nL1VDaGFyYWN0ZXIkSm9pbmluZ1R5cGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkRVQUxfSk9JTklORyIvPgotCQk8ZmllbGQgbmFtZT0iSk9JTl9DQVVTSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRUZUX0pPSU5JTkciLz4KLQkJPGZpZWxkIG5hbWU9Ik5PTl9KT0lOSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJSSUdIVF9KT0lOSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFOU1BBUkVOVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L2xhbmcvVUNoYXJhY3RlciRMaW5lQnJlYWsiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkFMUEhBQkVUSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkFNQklHVU9VUyIvPgotCQk8ZmllbGQgbmFtZT0iQlJFQUtfQUZURVIiLz4KLQkJPGZpZWxkIG5hbWU9IkJSRUFLX0JFRk9SRSIvPgotCQk8ZmllbGQgbmFtZT0iQlJFQUtfQk9USCIvPgotCQk8ZmllbGQgbmFtZT0iQlJFQUtfU1lNQk9MUyIvPgotCQk8ZmllbGQgbmFtZT0iQ0FSUklBR0VfUkVUVVJOIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTE9TRV9QQVJFTlRIRVNJUyIvPgotCQk8ZmllbGQgbmFtZT0iQ0xPU0VfUFVOQ1RVQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTUJJTklOR19NQVJLIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QTEVYX0NPTlRFWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkRJVElPTkFMX0pBUEFORVNFX1NUQVJURVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRJTkdFTlRfQlJFQUsiLz4KLQkJPGZpZWxkIG5hbWU9IkVYQ0xBTUFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJFX0JBU0UiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRV9NT0RJRklFUiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJIMiIvPgotCQk8ZmllbGQgbmFtZT0iSDMiLz4KLQkJPGZpZWxkIG5hbWU9IkhFQlJFV19MRVRURVIiLz4KLQkJPGZpZWxkIG5hbWU9IkhZUEhFTiIvPgotCQk8ZmllbGQgbmFtZT0iSURFT0dSQVBISUMiLz4KLQkJPGZpZWxkIG5hbWU9IklORklYX05VTUVSSUMiLz4KLQkJPGZpZWxkIG5hbWU9IklOU0VQQVJBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNFUEVSQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iSkwiLz4KLQkJPGZpZWxkIG5hbWU9IkpUIi8+Ci0JCTxmaWVsZCBuYW1lPSJKViIvPgotCQk8ZmllbGQgbmFtZT0iTElORV9GRUVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5EQVRPUllfQlJFQUsiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FWFRfTElORSIvPgotCQk8ZmllbGQgbmFtZT0iTk9OU1RBUlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iTlVNRVJJQyIvPgotCQk8ZmllbGQgbmFtZT0iT1BFTl9QVU5DVFVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iUE9TVEZJWF9OVU1FUklDIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVGSVhfTlVNRVJJQyIvPgotCQk8ZmllbGQgbmFtZT0iUVVPVEFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUdJT05BTF9JTkRJQ0FUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNQQUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVJST0dBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlVOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9IldPUkRfSk9JTkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJaV0oiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iWldTUEFDRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L2xhbmcvVUNoYXJhY3RlciROdW1lcmljVHlwZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iREVDSU1BTCIvPgotCQk8ZmllbGQgbmFtZT0iRElHSVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PTkUiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VTUVSSUMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS9sYW5nL1VDaGFyYWN0ZXIkU2VudGVuY2VCcmVhayIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQVRFUk0iLz4KLQkJPGZpZWxkIG5hbWU9IkNMT1NFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUiIvPgotCQk8ZmllbGQgbmFtZT0iRVhURU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkxGIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT1dFUiIvPgotCQk8ZmllbGQgbmFtZT0iTlVNRVJJQyIvPgotCQk8ZmllbGQgbmFtZT0iT0xFVFRFUiIvPgotCQk8ZmllbGQgbmFtZT0iT1RIRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNDT05USU5VRSIvPgotCQk8ZmllbGQgbmFtZT0iU0VQIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUCIvPgotCQk8ZmllbGQgbmFtZT0iU1RFUk0iLz4KLQkJPGZpZWxkIG5hbWU9IlVQUEVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvbGFuZy9VQ2hhcmFjdGVyJFVuaWNvZGVCbG9jayIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0NoYXJhY3RlciRTdWJzZXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yTmFtZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L2xhbmcvVUNoYXJhY3RlciRVbmljb2RlQmxvY2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SUQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShJKUxhbmRyb2lkL2ljdS9sYW5nL1VDaGFyYWN0ZXIkVW5pY29kZUJsb2NrOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKEkpTGFuZHJvaWQvaWN1L2xhbmcvVUNoYXJhY3RlciRVbmljb2RlQmxvY2s7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBRExBTSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBRExBTV9JRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBRUdFQU5fTlVNQkVSUyIvPgotCQk8ZmllbGQgbmFtZT0iQUVHRUFOX05VTUJFUlNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFIT00iLz4KLQkJPGZpZWxkIG5hbWU9IkFIT01fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFMQ0hFTUlDQUxfU1lNQk9MUyIvPgotCQk8ZmllbGQgbmFtZT0iQUxDSEVNSUNBTF9TWU1CT0xTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTFBIQUJFVElDX1BSRVNFTlRBVElPTl9GT1JNUyIvPgotCQk8ZmllbGQgbmFtZT0iQUxQSEFCRVRJQ19QUkVTRU5UQVRJT05fRk9STVNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFOQVRPTElBTl9ISUVST0dMWVBIUyIvPgotCQk8ZmllbGQgbmFtZT0iQU5BVE9MSUFOX0hJRVJPR0xZUEhTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTkNJRU5UX0dSRUVLX01VU0lDQUxfTk9UQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkFOQ0lFTlRfR1JFRUtfTVVTSUNBTF9OT1RBVElPTl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQU5DSUVOVF9HUkVFS19OVU1CRVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTkNJRU5UX0dSRUVLX05VTUJFUlNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFOQ0lFTlRfU1lNQk9MUyIvPgotCQk8ZmllbGQgbmFtZT0iQU5DSUVOVF9TWU1CT0xTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkFCSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkFSQUJJQ19FWFRFTkRFRF9BIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkFCSUNfRVhURU5ERURfQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQVJBQklDX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkFCSUNfTUFUSEVNQVRJQ0FMX0FMUEhBQkVUSUNfU1lNQk9MUyIvPgotCQk8ZmllbGQgbmFtZT0iQVJBQklDX01BVEhFTUFUSUNBTF9BTFBIQUJFVElDX1NZTUJPTFNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFSQUJJQ19QUkVTRU5UQVRJT05fRk9STVNfQSIvPgotCQk8ZmllbGQgbmFtZT0iQVJBQklDX1BSRVNFTlRBVElPTl9GT1JNU19BX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkFCSUNfUFJFU0VOVEFUSU9OX0ZPUk1TX0IiLz4KLQkJPGZpZWxkIG5hbWU9IkFSQUJJQ19QUkVTRU5UQVRJT05fRk9STVNfQl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQVJBQklDX1NVUFBMRU1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkFSQUJJQ19TVVBQTEVNRU5UX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUk1FTklBTiIvPgotCQk8ZmllbGQgbmFtZT0iQVJNRU5JQU5fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFSUk9XUyIvPgotCQk8ZmllbGQgbmFtZT0iQVJST1dTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkVTVEFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkVTVEFOX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQUxJTkVTRSIvPgotCQk8ZmllbGQgbmFtZT0iQkFMSU5FU0VfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTVVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU1VTV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQkFNVU1fU1VQUExFTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iQkFNVU1fU1VQUExFTUVOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQkFTSUNfTEFUSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkJBU0lDX0xBVElOX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVNTQV9WQUgiLz4KLQkJPGZpZWxkIG5hbWU9IkJBU1NBX1ZBSF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQkFUQUsiLz4KLQkJPGZpZWxkIG5hbWU9IkJBVEFLX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCRU5HQUxJIi8+Ci0JCTxmaWVsZCBuYW1lPSJCRU5HQUxJX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSEFJS1NVS0kiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQkhBSUtTVUtJX0lEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkJMT0NLX0VMRU1FTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJCTE9DS19FTEVNRU5UU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iQk9QT01PRk8iLz4KLQkJPGZpZWxkIG5hbWU9IkJPUE9NT0ZPX0VYVEVOREVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT1BPTU9GT19FWFRFTkRFRF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQk9QT01PRk9fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkJPWF9EUkFXSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT1hfRFJBV0lOR19JRCIvPgotCQk8ZmllbGQgbmFtZT0iQlJBSE1JIi8+Ci0JCTxmaWVsZCBuYW1lPSJCUkFITUlfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkJSQUlMTEVfUEFUVEVSTlMiLz4KLQkJPGZpZWxkIG5hbWU9IkJSQUlMTEVfUEFUVEVSTlNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkJVR0lORVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJCVUdJTkVTRV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQlVISUQiLz4KLQkJPGZpZWxkIG5hbWU9IkJVSElEX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCWVpBTlRJTkVfTVVTSUNBTF9TWU1CT0xTIi8+Ci0JCTxmaWVsZCBuYW1lPSJCWVpBTlRJTkVfTVVTSUNBTF9TWU1CT0xTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVJJQU4iLz4KLQkJPGZpZWxkIG5hbWU9IkNBUklBTl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FVQ0FTSUFOX0FMQkFOSUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVVDQVNJQU5fQUxCQU5JQU5fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQUtNQSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBS01BX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFNIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFNX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEVST0tFRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hFUk9LRUVfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNIRVJPS0VFX1NVUFBMRU1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkNIRVJPS0VFX1NVUFBMRU1FTlRfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNIRVNTX1NZTUJPTFMiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hFU1NfU1lNQk9MU19JRCIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSktfQ09NUEFUSUJJTElUWSIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX0NPTVBBVElCSUxJVFlfRk9STVMiLz4KLQkJPGZpZWxkIG5hbWU9IkNKS19DT01QQVRJQklMSVRZX0ZPUk1TX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSktfQ09NUEFUSUJJTElUWV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIUyIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIU19TVVBQTEVNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlRfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNKS19SQURJQ0FMU19TVVBQTEVNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSktfUkFESUNBTFNfU1VQUExFTUVOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1NUUk9LRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkNKS19TVFJPS0VTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSktfU1lNQk9MU19BTkRfUFVOQ1RVQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkNKS19TWU1CT0xTX0FORF9QVU5DVFVBVElPTl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1VOSUZJRURfSURFT0dSQVBIUyIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQSIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQiIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQyIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQ19JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fRF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fRV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fRiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9GX0lEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNKS19VTklGSUVEX0lERU9HUkFQSFNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09NQklOSU5HX0RJQUNSSVRJQ0FMX01BUktTX0VYVEVOREVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01CSU5JTkdfRElBQ1JJVElDQUxfTUFSS1NfRVhURU5ERURfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09NQklOSU5HX0RJQUNSSVRJQ0FMX01BUktTX1NVUFBMRU1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLU19TVVBQTEVNRU5UX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01CSU5JTkdfSEFMRl9NQVJLUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09NQklOSU5HX0hBTEZfTUFSS1NfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTUJJTklOR19NQVJLU19GT1JfU1lNQk9MUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09NQklOSU5HX01BUktTX0ZPUl9TWU1CT0xTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01NT05fSU5ESUNfTlVNQkVSX0ZPUk1TIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01NT05fSU5ESUNfTlVNQkVSX0ZPUk1TX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1BJQ1RVUkVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MX1BJQ1RVUkVTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT1BUSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPUFRJQ19FUEFDVF9OVU1CRVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT1BUSUNfRVBBQ1RfTlVNQkVSU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09QVElDX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT1VOVElOR19ST0RfTlVNRVJBTFMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPVU5USU5HX1JPRF9OVU1FUkFMU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ1VORUlGT1JNIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVU5FSUZPUk1fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNVTkVJRk9STV9OVU1CRVJTX0FORF9QVU5DVFVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iQ1VORUlGT1JNX05VTUJFUlNfQU5EX1BVTkNUVUFUSU9OX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVVJSRU5DWV9TWU1CT0xTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVVJSRU5DWV9TWU1CT0xTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDWVBSSU9UX1NZTExBQkFSWSIvPgotCQk8ZmllbGQgbmFtZT0iQ1lQUklPVF9TWUxMQUJBUllfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNZUklMTElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJDWVJJTExJQ19FWFRFTkRFRF9BIi8+Ci0JCTxmaWVsZCBuYW1lPSJDWVJJTExJQ19FWFRFTkRFRF9BX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDWVJJTExJQ19FWFRFTkRFRF9CIi8+Ci0JCTxmaWVsZCBuYW1lPSJDWVJJTExJQ19FWFRFTkRFRF9CX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDWVJJTExJQ19FWFRFTkRFRF9DIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNZUklMTElDX0VYVEVOREVEX0NfSUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ1lSSUxMSUNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNZUklMTElDX1NVUFBMRU1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkNZUklMTElDX1NVUFBMRU1FTlRBUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkNZUklMTElDX1NVUFBMRU1FTlRBUllfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNZUklMTElDX1NVUFBMRU1FTlRfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkRFU0VSRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkRFU0VSRVRfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkRFVkFOQUdBUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkRFVkFOQUdBUklfRVhURU5ERUQiLz4KLQkJPGZpZWxkIG5hbWU9IkRFVkFOQUdBUklfRVhURU5ERURfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkRFVkFOQUdBUklfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJTkdCQVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJESU5HQkFUU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iRE9HUkEiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRE9HUkFfSUQiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRE9NSU5PX1RJTEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJET01JTk9fVElMRVNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkRVUExPWUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJEVVBMT1lBTl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iRUFSTFlfRFlOQVNUSUNfQ1VORUlGT1JNIi8+Ci0JCTxmaWVsZCBuYW1lPSJFQVJMWV9EWU5BU1RJQ19DVU5FSUZPUk1fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHWVBUSUFOX0hJRVJPR0xZUEhTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR1lQVElBTl9ISUVST0dMWVBIU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iRUxCQVNBTiIvPgotCQk8ZmllbGQgbmFtZT0iRUxCQVNBTl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iRU1PVElDT05TIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTU9USUNPTlNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ0xPU0VEX0FMUEhBTlVNRVJJQ1MiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ0xPU0VEX0FMUEhBTlVNRVJJQ1NfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ0xPU0VEX0FMUEhBTlVNRVJJQ19TVVBQTEVNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNMT1NFRF9BTFBIQU5VTUVSSUNfU1VQUExFTUVOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iRU5DTE9TRURfQ0pLX0xFVFRFUlNfQU5EX01PTlRIUyIvPgotCQk8ZmllbGQgbmFtZT0iRU5DTE9TRURfQ0pLX0xFVFRFUlNfQU5EX01PTlRIU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iRU5DTE9TRURfSURFT0dSQVBISUNfU1VQUExFTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRU5DTE9TRURfSURFT0dSQVBISUNfU1VQUExFTUVOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iRVRISU9QSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkVUSElPUElDX0VYVEVOREVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVEhJT1BJQ19FWFRFTkRFRF9BIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVEhJT1BJQ19FWFRFTkRFRF9BX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVEhJT1BJQ19FWFRFTkRFRF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iRVRISU9QSUNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVUSElPUElDX1NVUFBMRU1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVUSElPUElDX1NVUFBMRU1FTlRfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdFTkVSQUxfUFVOQ1RVQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdFTkVSQUxfUFVOQ1RVQVRJT05fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdFT01FVFJJQ19TSEFQRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdFT01FVFJJQ19TSEFQRVNfRVhURU5ERUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdFT01FVFJJQ19TSEFQRVNfRVhURU5ERURfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdFT01FVFJJQ19TSEFQRVNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdFT1JHSUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRU9SR0lBTl9FWFRFTkRFRCIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHRU9SR0lBTl9FWFRFTkRFRF9JRCIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHRU9SR0lBTl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iR0VPUkdJQU5fU1VQUExFTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0VPUkdJQU5fU1VQUExFTUVOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xBR09MSVRJQyIvPgotCQk8ZmllbGQgbmFtZT0iR0xBR09MSVRJQ19JRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xBR09MSVRJQ19TVVBQTEVNRU5UIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMQUdPTElUSUNfU1VQUExFTUVOVF9JRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHT1RISUMiLz4KLQkJPGZpZWxkIG5hbWU9IkdPVEhJQ19JRCIvPgotCQk8ZmllbGQgbmFtZT0iR1JBTlRIQSIvPgotCQk8ZmllbGQgbmFtZT0iR1JBTlRIQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iR1JFRUsiLz4KLQkJPGZpZWxkIG5hbWU9IkdSRUVLX0VYVEVOREVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUkVFS19FWFRFTkRFRF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iR1JFRUtfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdVSkFSQVRJIi8+Ci0JCTxmaWVsZCBuYW1lPSJHVUpBUkFUSV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iR1VOSkFMQV9HT05ESSIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHVU5KQUxBX0dPTkRJX0lEIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkdVUk1VS0hJIi8+Ci0JCTxmaWVsZCBuYW1lPSJHVVJNVUtISV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iSEFMRldJRFRIX0FORF9GVUxMV0lEVEhfRk9STVMiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTEZXSURUSF9BTkRfRlVMTFdJRFRIX0ZPUk1TX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQU5HVUxfQ09NUEFUSUJJTElUWV9KQU1PIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQU5HVUxfQ09NUEFUSUJJTElUWV9KQU1PX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQU5HVUxfSkFNTyIvPgotCQk8ZmllbGQgbmFtZT0iSEFOR1VMX0pBTU9fRVhURU5ERURfQSIvPgotCQk8ZmllbGQgbmFtZT0iSEFOR1VMX0pBTU9fRVhURU5ERURfQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iSEFOR1VMX0pBTU9fRVhURU5ERURfQiIvPgotCQk8ZmllbGQgbmFtZT0iSEFOR1VMX0pBTU9fRVhURU5ERURfQl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iSEFOR1VMX0pBTU9fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTkdVTF9TWUxMQUJMRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTkdVTF9TWUxMQUJMRVNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTklGSV9ST0hJTkdZQSIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIQU5JRklfUk9ISU5HWUFfSUQiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iSEFOVU5PTyIvPgotCQk8ZmllbGQgbmFtZT0iSEFOVU5PT19JRCIvPgotCQk8ZmllbGQgbmFtZT0iSEFUUkFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQVRSQU5fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkhFQlJFVyIvPgotCQk8ZmllbGQgbmFtZT0iSEVCUkVXX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJISUdIX1BSSVZBVEVfVVNFX1NVUlJPR0FURVMiLz4KLQkJPGZpZWxkIG5hbWU9IkhJR0hfUFJJVkFURV9VU0VfU1VSUk9HQVRFU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iSElHSF9TVVJST0dBVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJISUdIX1NVUlJPR0FURVNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkhJUkFHQU5BIi8+Ci0JCTxmaWVsZCBuYW1lPSJISVJBR0FOQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iSURFT0dSQVBISUNfREVTQ1JJUFRJT05fQ0hBUkFDVEVSUyIvPgotCQk8ZmllbGQgbmFtZT0iSURFT0dSQVBISUNfREVTQ1JJUFRJT05fQ0hBUkFDVEVSU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iSURFT0dSQVBISUNfU1lNQk9MU19BTkRfUFVOQ1RVQVRJT04iIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iSURFT0dSQVBISUNfU1lNQk9MU19BTkRfUFVOQ1RVQVRJT05fSUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iSU1QRVJJQUxfQVJBTUFJQyIvPgotCQk8ZmllbGQgbmFtZT0iSU1QRVJJQUxfQVJBTUFJQ19JRCIvPgotCQk8ZmllbGQgbmFtZT0iSU5ESUNfU0lZQVFfTlVNQkVSUyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTkRJQ19TSVlBUV9OVU1CRVJTX0lEIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IklOU0NSSVBUSU9OQUxfUEFITEFWSSIvPgotCQk8ZmllbGQgbmFtZT0iSU5TQ1JJUFRJT05BTF9QQUhMQVZJX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNDUklQVElPTkFMX1BBUlRISUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNDUklQVElPTkFMX1BBUlRISUFOX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlZBTElEX0NPREUiLz4KLQkJPGZpZWxkIG5hbWU9IklOVkFMSURfQ09ERV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iSVBBX0VYVEVOU0lPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IklQQV9FWFRFTlNJT05TX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJKQVZBTkVTRSIvPgotCQk8ZmllbGQgbmFtZT0iSkFWQU5FU0VfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IktBSVRISSIvPgotCQk8ZmllbGQgbmFtZT0iS0FJVEhJX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQU5BX0VYVEVOREVEX0EiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iS0FOQV9FWFRFTkRFRF9BX0lEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IktBTkFfU1VQUExFTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iS0FOQV9TVVBQTEVNRU5UX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQU5CVU4iLz4KLQkJPGZpZWxkIG5hbWU9IktBTkJVTl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iS0FOR1hJX1JBRElDQUxTIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQU5HWElfUkFESUNBTFNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IktBTk5BREEiLz4KLQkJPGZpZWxkIG5hbWU9IktBTk5BREFfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IktBVEFLQU5BIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQVRBS0FOQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iS0FUQUtBTkFfUEhPTkVUSUNfRVhURU5TSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iS0FUQUtBTkFfUEhPTkVUSUNfRVhURU5TSU9OU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iS0FZQUhfTEkiLz4KLQkJPGZpZWxkIG5hbWU9IktBWUFIX0xJX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSEFST1NIVEhJIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSEFST1NIVEhJX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSE1FUiIvPgotCQk8ZmllbGQgbmFtZT0iS0hNRVJfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IktITUVSX1NZTUJPTFMiLz4KLQkJPGZpZWxkIG5hbWU9IktITUVSX1NZTUJPTFNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IktIT0pLSSIvPgotCQk8ZmllbGQgbmFtZT0iS0hPSktJX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSFVEQVdBREkiLz4KLQkJPGZpZWxkIG5hbWU9IktIVURBV0FESV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTEFPIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQU9fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkxBVElOXzFfU1VQUExFTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iTEFUSU5fMV9TVVBQTEVNRU5UX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTl9FWFRFTkRFRF9BIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTl9FWFRFTkRFRF9BRERJVElPTkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTl9FWFRFTkRFRF9BRERJVElPTkFMX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTl9FWFRFTkRFRF9BX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTl9FWFRFTkRFRF9CIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTl9FWFRFTkRFRF9CX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTl9FWFRFTkRFRF9DIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTl9FWFRFTkRFRF9DX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTl9FWFRFTkRFRF9EIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTl9FWFRFTkRFRF9EX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTl9FWFRFTkRFRF9FIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTl9FWFRFTkRFRF9FX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRVBDSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkxFUENIQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTEVUVEVSTElLRV9TWU1CT0xTIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRVRURVJMSUtFX1NZTUJPTFNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkxJTUJVIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSU1CVV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTElORUFSX0EiLz4KLQkJPGZpZWxkIG5hbWU9IkxJTkVBUl9BX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSU5FQVJfQl9JREVPR1JBTVMiLz4KLQkJPGZpZWxkIG5hbWU9IkxJTkVBUl9CX0lERU9HUkFNU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iTElORUFSX0JfU1lMTEFCQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSU5FQVJfQl9TWUxMQUJBUllfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkxJU1UiLz4KLQkJPGZpZWxkIG5hbWU9IkxJU1VfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkxPV19TVVJST0dBVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT1dfU1VSUk9HQVRFU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iTFlDSUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJMWUNJQU5fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkxZRElBTiIvPgotCQk8ZmllbGQgbmFtZT0iTFlESUFOX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQUhBSkFOSSIvPgotCQk8ZmllbGQgbmFtZT0iTUFIQUpBTklfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BSEpPTkdfVElMRVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BSEpPTkdfVElMRVNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BS0FTQVIiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTUFLQVNBUl9JRCIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQUxBWUFMQU0iLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTEFZQUxBTV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTUFOREFJQyIvPgotCQk8ZmllbGQgbmFtZT0iTUFOREFJQ19JRCIvPgotCQk8ZmllbGQgbmFtZT0iTUFOSUNIQUVBTiIvPgotCQk8ZmllbGQgbmFtZT0iTUFOSUNIQUVBTl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTUFSQ0hFTiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQVJDSEVOX0lEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BU0FSQU1fR09OREkiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTUFTQVJBTV9HT05ESV9JRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRIRU1BVElDQUxfQUxQSEFOVU1FUklDX1NZTUJPTFMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVEhFTUFUSUNBTF9BTFBIQU5VTUVSSUNfU1lNQk9MU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iTUFUSEVNQVRJQ0FMX09QRVJBVE9SUyIvPgotCQk8ZmllbGQgbmFtZT0iTUFUSEVNQVRJQ0FMX09QRVJBVE9SU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iTUFZQU5fTlVNRVJBTFMiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTUFZQU5fTlVNRVJBTFNfSUQiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTUVERUZBSURSSU4iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTUVERUZBSURSSU5fSUQiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTUVFVEVJX01BWUVLIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUVURUlfTUFZRUtfRVhURU5TSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVFVEVJX01BWUVLX0VYVEVOU0lPTlNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRVRFSV9NQVlFS19JRCIvPgotCQk8ZmllbGQgbmFtZT0iTUVOREVfS0lLQUtVSSIvPgotCQk8ZmllbGQgbmFtZT0iTUVOREVfS0lLQUtVSV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTUVST0lUSUNfQ1VSU0lWRSIvPgotCQk8ZmllbGQgbmFtZT0iTUVST0lUSUNfQ1VSU0lWRV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTUVST0lUSUNfSElFUk9HTFlQSFMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FUk9JVElDX0hJRVJPR0xZUEhTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUFPIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUFPX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSVNDRUxMQU5FT1VTX01BVEhFTUFUSUNBTF9TWU1CT0xTX0EiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJPTFNfQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTUlTQ0VMTEFORU9VU19NQVRIRU1BVElDQUxfU1lNQk9MU19CIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSVNDRUxMQU5FT1VTX01BVEhFTUFUSUNBTF9TWU1CT0xTX0JfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JU0NFTExBTkVPVVNfU1lNQk9MUyIvPgotCQk8ZmllbGQgbmFtZT0iTUlTQ0VMTEFORU9VU19TWU1CT0xTX0FORF9BUlJPV1MiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JU0NFTExBTkVPVVNfU1lNQk9MU19BTkRfQVJST1dTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSVNDRUxMQU5FT1VTX1NZTUJPTFNfQU5EX1BJQ1RPR1JBUEhTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSVNDRUxMQU5FT1VTX1NZTUJPTFNfQU5EX1BJQ1RPR1JBUEhTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSVNDRUxMQU5FT1VTX1NZTUJPTFNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JU0NFTExBTkVPVVNfVEVDSE5JQ0FMIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSVNDRUxMQU5FT1VTX1RFQ0hOSUNBTF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTU9ESSIvPgotCQk8ZmllbGQgbmFtZT0iTU9ESUZJRVJfVE9ORV9MRVRURVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RJRklFUl9UT05FX0xFVFRFUlNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PRElfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTkdPTElBTiIvPgotCQk8ZmllbGQgbmFtZT0iTU9OR09MSUFOX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05HT0xJQU5fU1VQUExFTUVOVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNT05HT0xJQU5fU1VQUExFTUVOVF9JRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNUk8iLz4KLQkJPGZpZWxkIG5hbWU9Ik1ST19JRCIvPgotCQk8ZmllbGQgbmFtZT0iTVVMVEFOSSIvPgotCQk8ZmllbGQgbmFtZT0iTVVMVEFOSV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTVVTSUNBTF9TWU1CT0xTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNVVNJQ0FMX1NZTUJPTFNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1ZQU5NQVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1ZQU5NQVJfRVhURU5ERURfQSIvPgotCQk8ZmllbGQgbmFtZT0iTVlBTk1BUl9FWFRFTkRFRF9BX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNWUFOTUFSX0VYVEVOREVEX0IiLz4KLQkJPGZpZWxkIG5hbWU9Ik1ZQU5NQVJfRVhURU5ERURfQl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTVlBTk1BUl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTkFCQVRBRUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQUJBVEFFQU5fSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FV0EiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTkVXQV9JRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJORVdfVEFJX0xVRSIvPgotCQk8ZmllbGQgbmFtZT0iTkVXX1RBSV9MVUVfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5LTyIvPgotCQk8ZmllbGQgbmFtZT0iTktPX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19CTE9DSyIvPgotCQk8ZmllbGQgbmFtZT0iTlVNQkVSX0ZPUk1TIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVU1CRVJfRk9STVNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VU0hVIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VU0hVX0lEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9HSEFNIi8+Ci0JCTxmaWVsZCBuYW1lPSJPR0hBTV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX0hVTkdBUklBTiIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX0hVTkdBUklBTl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX0lUQUxJQyIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX0lUQUxJQ19JRCIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX05PUlRIX0FSQUJJQU4iLz4KLQkJPGZpZWxkIG5hbWU9Ik9MRF9OT1JUSF9BUkFCSUFOX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTERfUEVSTUlDIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTERfUEVSTUlDX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTERfUEVSU0lBTiIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX1BFUlNJQU5fSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9MRF9TT0dESUFOIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9Ik9MRF9TT0dESUFOX0lEIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9Ik9MRF9TT1VUSF9BUkFCSUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTERfU09VVEhfQVJBQklBTl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX1RVUktJQyIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX1RVUktJQ19JRCIvPgotCQk8ZmllbGQgbmFtZT0iT0xfQ0hJS0kiLz4KLQkJPGZpZWxkIG5hbWU9Ik9MX0NISUtJX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUFRJQ0FMX0NIQVJBQ1RFUl9SRUNPR05JVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iT1BUSUNBTF9DSEFSQUNURVJfUkVDT0dOSVRJT05fSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9SSVlBIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUklZQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iT1JOQU1FTlRBTF9ESU5HQkFUUyIvPgotCQk8ZmllbGQgbmFtZT0iT1JOQU1FTlRBTF9ESU5HQkFUU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iT1NBR0UiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iT1NBR0VfSUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iT1NNQU5ZQSIvPgotCQk8ZmllbGQgbmFtZT0iT1NNQU5ZQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iUEFIQVdIX0hNT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQUhBV0hfSE1PTkdfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBBTE1ZUkVORSIvPgotCQk8ZmllbGQgbmFtZT0iUEFMTVlSRU5FX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVVfQ0lOX0hBVSIvPgotCQk8ZmllbGQgbmFtZT0iUEFVX0NJTl9IQVVfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBIQUdTX1BBIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSEFHU19QQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iUEhBSVNUT1NfRElTQyIvPgotCQk8ZmllbGQgbmFtZT0iUEhBSVNUT1NfRElTQ19JRCIvPgotCQk8ZmllbGQgbmFtZT0iUEhPRU5JQ0lBTiIvPgotCQk8ZmllbGQgbmFtZT0iUEhPRU5JQ0lBTl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVUSUNfRVhURU5TSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVUSUNfRVhURU5TSU9OU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVUSUNfRVhURU5TSU9OU19TVVBQTEVNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORVRJQ19FWFRFTlNJT05TX1NVUFBMRU1FTlRfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBMQVlJTkdfQ0FSRFMiLz4KLQkJPGZpZWxkIG5hbWU9IlBMQVlJTkdfQ0FSRFNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBSSVZBVEVfVVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklWQVRFX1VTRV9BUkVBIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklWQVRFX1VTRV9BUkVBX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklWQVRFX1VTRV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iUFNBTFRFUl9QQUhMQVZJIi8+Ci0JCTxmaWVsZCBuYW1lPSJQU0FMVEVSX1BBSExBVklfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlJFSkFORyIvPgotCQk8ZmllbGQgbmFtZT0iUkVKQU5HX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJSVU1JX05VTUVSQUxfU1lNQk9MUyIvPgotCQk8ZmllbGQgbmFtZT0iUlVNSV9OVU1FUkFMX1NZTUJPTFNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlJVTklDIi8+Ci0JCTxmaWVsZCBuYW1lPSJSVU5JQ19JRCIvPgotCQk8ZmllbGQgbmFtZT0iU0FNQVJJVEFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQU1BUklUQU5fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNBVVJBU0hUUkEiLz4KLQkJPGZpZWxkIG5hbWU9IlNBVVJBU0hUUkFfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNIQVJBREEiLz4KLQkJPGZpZWxkIG5hbWU9IlNIQVJBREFfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNIQVZJQU4iLz4KLQkJPGZpZWxkIG5hbWU9IlNIQVZJQU5fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUSEFORF9GT1JNQVRfQ09OVFJPTFMiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUSEFORF9GT1JNQVRfQ09OVFJPTFNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNJRERIQU0iLz4KLQkJPGZpZWxkIG5hbWU9IlNJRERIQU1fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNJTkhBTEEiLz4KLQkJPGZpZWxkIG5hbWU9IlNJTkhBTEFfQVJDSEFJQ19OVU1CRVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSU5IQUxBX0FSQ0hBSUNfTlVNQkVSU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iU0lOSEFMQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iU01BTExfRk9STV9WQVJJQU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iU01BTExfRk9STV9WQVJJQU5UU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iU09HRElBTiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTT0dESUFOX0lEIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IlNPUkFfU09NUEVORyIvPgotCQk8ZmllbGQgbmFtZT0iU09SQV9TT01QRU5HX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT1lPTUJPIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNPWU9NQk9fSUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU1BBQ0lOR19NT0RJRklFUl9MRVRURVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUEFDSU5HX01PRElGSUVSX0xFVFRFUlNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNQRUNJQUxTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUEVDSUFMU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iU1VOREFORVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVU5EQU5FU0VfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVTkRBTkVTRV9TVVBQTEVNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVU5EQU5FU0VfU1VQUExFTUVOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iU1VQRVJTQ1JJUFRTX0FORF9TVUJTQ1JJUFRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBFUlNDUklQVFNfQU5EX1NVQlNDUklQVFNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBMRU1FTlRBTF9BUlJPV1NfQSIvPgotCQk8ZmllbGQgbmFtZT0iU1VQUExFTUVOVEFMX0FSUk9XU19BX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBQTEVNRU5UQUxfQVJST1dTX0IiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBMRU1FTlRBTF9BUlJPV1NfQl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iU1VQUExFTUVOVEFMX0FSUk9XU19DIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBQTEVNRU5UQUxfQVJST1dTX0NfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBMRU1FTlRBTF9NQVRIRU1BVElDQUxfT1BFUkFUT1JTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBQTEVNRU5UQUxfTUFUSEVNQVRJQ0FMX09QRVJBVE9SU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iU1VQUExFTUVOVEFMX1BVTkNUVUFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBQTEVNRU5UQUxfUFVOQ1RVQVRJT05fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBMRU1FTlRBTF9TWU1CT0xTX0FORF9QSUNUT0dSQVBIUyIvPgotCQk8ZmllbGQgbmFtZT0iU1VQUExFTUVOVEFMX1NZTUJPTFNfQU5EX1BJQ1RPR1JBUEhTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBQTEVNRU5UQVJZX1BSSVZBVEVfVVNFX0FSRUFfQSIvPgotCQk8ZmllbGQgbmFtZT0iU1VQUExFTUVOVEFSWV9QUklWQVRFX1VTRV9BUkVBX0FfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBMRU1FTlRBUllfUFJJVkFURV9VU0VfQVJFQV9CIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBQTEVNRU5UQVJZX1BSSVZBVEVfVVNFX0FSRUFfQl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iU1VUVE9OX1NJR05XUklUSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVRUT05fU0lHTldSSVRJTkdfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTE9USV9OQUdSSSIvPgotCQk8ZmllbGQgbmFtZT0iU1lMT1RJX05BR1JJX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWVJJQUMiLz4KLQkJPGZpZWxkIG5hbWU9IlNZUklBQ19JRCIvPgotCQk8ZmllbGQgbmFtZT0iU1lSSUFDX1NVUFBMRU1FTlQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU1lSSUFDX1NVUFBMRU1FTlRfSUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHQUxPRyIvPgotCQk8ZmllbGQgbmFtZT0iVEFHQUxPR19JRCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHQkFOV0EiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR0JBTldBX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUlfTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlRBSV9MRV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iVEFJX1RIQU0iLz4KLQkJPGZpZWxkIG5hbWU9IlRBSV9USEFNX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUlfVklFVCIvPgotCQk8ZmllbGQgbmFtZT0iVEFJX1ZJRVRfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBSV9YVUFOX0pJTkdfU1lNQk9MUyIvPgotCQk8ZmllbGQgbmFtZT0iVEFJX1hVQU5fSklOR19TWU1CT0xTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUtSSSIvPgotCQk8ZmllbGQgbmFtZT0iVEFLUklfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBTUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQU1JTF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iVEFOR1VUIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRBTkdVVF9DT01QT05FTlRTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRBTkdVVF9DT01QT05FTlRTX0lEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRBTkdVVF9JRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJURUxVR1UiLz4KLQkJPGZpZWxkIG5hbWU9IlRFTFVHVV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iVEhBQU5BIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSEFBTkFfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRIQUkiLz4KLQkJPGZpZWxkIG5hbWU9IlRIQUlfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRJQkVUQU4iLz4KLQkJPGZpZWxkIG5hbWU9IlRJQkVUQU5fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRJRklOQUdIIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSUZJTkFHSF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iVElSSFVUQSIvPgotCQk8ZmllbGQgbmFtZT0iVElSSFVUQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNQT1JUX0FORF9NQVBfU1lNQk9MUyIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNQT1JUX0FORF9NQVBfU1lNQk9MU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iVUdBUklUSUMiLz4KLQkJPGZpZWxkIG5hbWU9IlVHQVJJVElDX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklGSUVEX0NBTkFESUFOX0FCT1JJR0lOQUxfU1lMTEFCSUNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklGSUVEX0NBTkFESUFOX0FCT1JJR0lOQUxfU1lMTEFCSUNTX0VYVEVOREVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklGSUVEX0NBTkFESUFOX0FCT1JJR0lOQUxfU1lMTEFCSUNTX0VYVEVOREVEX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklGSUVEX0NBTkFESUFOX0FCT1JJR0lOQUxfU1lMTEFCSUNTX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJWQUkiLz4KLQkJPGZpZWxkIG5hbWU9IlZBSV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iVkFSSUFUSU9OX1NFTEVDVE9SUyIvPgotCQk8ZmllbGQgbmFtZT0iVkFSSUFUSU9OX1NFTEVDVE9SU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iVkFSSUFUSU9OX1NFTEVDVE9SU19TVVBQTEVNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJWQVJJQVRJT05fU0VMRUNUT1JTX1NVUFBMRU1FTlRfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlZFRElDX0VYVEVOU0lPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IlZFRElDX0VYVEVOU0lPTlNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlZFUlRJQ0FMX0ZPUk1TIi8+Ci0JCTxmaWVsZCBuYW1lPSJWRVJUSUNBTF9GT1JNU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iV0FSQU5HX0NJVEkiLz4KLQkJPGZpZWxkIG5hbWU9IldBUkFOR19DSVRJX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJZSUpJTkdfSEVYQUdSQU1fU1lNQk9MUyIvPgotCQk8ZmllbGQgbmFtZT0iWUlKSU5HX0hFWEFHUkFNX1NZTUJPTFNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IllJX1JBRElDQUxTIi8+Ci0JCTxmaWVsZCBuYW1lPSJZSV9SQURJQ0FMU19JRCIvPgotCQk8ZmllbGQgbmFtZT0iWUlfU1lMTEFCTEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJZSV9TWUxMQUJMRVNfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlpBTkFCQVpBUl9TUVVBUkUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iWkFOQUJBWkFSX1NRVUFSRV9JRCIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvbGFuZy9VQ2hhcmFjdGVyJFdvcmRCcmVhayIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQUxFVFRFUiIvPgotCQk8ZmllbGQgbmFtZT0iQ1IiLz4KLQkJPGZpZWxkIG5hbWU9IkRPVUJMRV9RVU9URSIvPgotCQk8ZmllbGQgbmFtZT0iRVhURU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRFTkROVU1MRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVfQkFTRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFX0JBU0VfR0FaIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVfTU9ESUZJRVIiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTFVFX0FGVEVSX1pXSiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIRUJSRVdfTEVUVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQVRBS0FOQSIvPgotCQk8ZmllbGQgbmFtZT0iTEYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JRExFVFRFUiIvPgotCQk8ZmllbGQgbmFtZT0iTUlETlVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUROVU1MRVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FV0xJTkUiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VTUVSSUMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9USEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUdJT05BTF9JTkRJQ0FUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNJTkdMRV9RVU9URSIvPgotCQk8ZmllbGQgbmFtZT0iV1NFR1NQQUNFIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IlpXSiIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvbGFuZy9VQ2hhcmFjdGVyQ2F0ZWdvcnkiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9pY3UvbGFuZy9VQ2hhcmFjdGVyRW51bXMkRUNoYXJhY3RlckNhdGVnb3J5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS9sYW5nL1VDaGFyYWN0ZXJEaXJlY3Rpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9pY3UvbGFuZy9VQ2hhcmFjdGVyRW51bXMkRUNoYXJhY3RlckRpcmVjdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvbGFuZy9VQ2hhcmFjdGVyRW51bXMiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS9sYW5nL1VDaGFyYWN0ZXJFbnVtcyRFQ2hhcmFjdGVyQ2F0ZWdvcnkiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTUJJTklOR19TUEFDSU5HX01BUksiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTk5FQ1RPUl9QVU5DVFVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVFJPTCIvPgotCQk8ZmllbGQgbmFtZT0iQ1VSUkVOQ1lfU1lNQk9MIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVNIX1BVTkNUVUFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUNJTUFMX0RJR0lUX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iRU5DTE9TSU5HX01BUksiLz4KLQkJPGZpZWxkIG5hbWU9IkVORF9QVU5DVFVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRklOQUxfUFVOQ1RVQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkZJTkFMX1FVT1RFX1BVTkNUVUFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdFTkVSQUxfT1RIRVJfVFlQRVMiLz4KLQkJPGZpZWxkIG5hbWU9IklOSVRJQUxfUFVOQ1RVQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IklOSVRJQUxfUVVPVEVfUFVOQ1RVQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkxFVFRFUl9OVU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkxJTkVfU0VQQVJBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT1dFUkNBU0VfTEVUVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRIX1NZTUJPTCIvPgotCQk8ZmllbGQgbmFtZT0iTU9ESUZJRVJfTEVUVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RJRklFUl9TWU1CT0wiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PTl9TUEFDSU5HX01BUksiLz4KLQkJPGZpZWxkIG5hbWU9Ik9USEVSX0xFVFRFUiIvPgotCQk8ZmllbGQgbmFtZT0iT1RIRVJfTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPVEhFUl9QVU5DVFVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iT1RIRVJfU1lNQk9MIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJBR1JBUEhfU0VQQVJBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklWQVRFX1VTRSIvPgotCQk8ZmllbGQgbmFtZT0iU1BBQ0VfU0VQQVJBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFSVF9QVU5DVFVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iU1VSUk9HQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSVRMRUNBU0VfTEVUVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTkFTU0lHTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJVUFBFUkNBU0VfTEVUVEVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvbGFuZy9VQ2hhcmFjdGVyRW51bXMkRUNoYXJhY3RlckRpcmVjdGlvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQVJBQklDX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iQkxPQ0tfU0VQQVJBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT1VOREFSWV9ORVVUUkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01NT05fTlVNQkVSX1NFUEFSQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfQVJBQklDX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfQk9VTkRBUllfTkVVVFJBTCIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfQ09NTU9OX05VTUJFUl9TRVBBUkFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX0VVUk9QRUFOX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX0xFRlRfVE9fUklHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX0xFRlRfVE9fUklHSFRfRU1CRURESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9MRUZUX1RPX1JJR0hUX09WRVJSSURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9OT05TUEFDSU5HX01BUksiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX09USEVSX05FVVRSQUxTIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9QQVJBR1JBUEhfU0VQQVJBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9QT1BfRElSRUNUSU9OQUxfRk9STUFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9SSUdIVF9UT19MRUZUIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9SSUdIVF9UT19MRUZUX0FSQUJJQyIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfUklHSFRfVE9fTEVGVF9FTUJFRERJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX1NFR01FTlRfU0VQQVJBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9VTkRFRklORUQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX1dISVRFU1BBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUl9OT05fU1BBQ0lOR19NQVJLIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVVJPUEVBTl9OVU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkVVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkVVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSVJTVF9TVFJPTkdfSVNPTEFURSIvPgotCQk8ZmllbGQgbmFtZT0iTEVGVF9UT19SSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iTEVGVF9UT19SSUdIVF9FTUJFRERJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkxFRlRfVE9fUklHSFRfSVNPTEFURSIvPgotCQk8ZmllbGQgbmFtZT0iTEVGVF9UT19SSUdIVF9PVkVSUklERSIvPgotCQk8ZmllbGQgbmFtZT0iT1RIRVJfTkVVVFJBTCIvPgotCQk8ZmllbGQgbmFtZT0iUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCIvPgotCQk8ZmllbGQgbmFtZT0iUE9QX0RJUkVDVElPTkFMX0lTT0xBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJJR0hUX1RPX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IlJJR0hUX1RPX0xFRlRfQVJBQklDIi8+Ci0JCTxmaWVsZCBuYW1lPSJSSUdIVF9UT19MRUZUX0VNQkVERElORyIvPgotCQk8ZmllbGQgbmFtZT0iUklHSFRfVE9fTEVGVF9JU09MQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSSUdIVF9UT19MRUZUX09WRVJSSURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUdNRU5UX1NFUEFSQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iV0hJVEVfU1BBQ0VfTkVVVFJBTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L2xhbmcvVVByb3BlcnR5IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkFMUEhBQkVUSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkFTQ0lJX0hFWF9ESUdJVCIvPgotCQk8ZmllbGQgbmFtZT0iQklESV9DTEFTUyIvPgotCQk8ZmllbGQgbmFtZT0iQklESV9DT05UUk9MIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSURJX01JUlJPUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSURJX01JUlJPUklOR19HTFlQSCIvPgotCQk8ZmllbGQgbmFtZT0iQklESV9QQUlSRURfQlJBQ0tFVCIvPgotCQk8ZmllbGQgbmFtZT0iQklESV9QQUlSRURfQlJBQ0tFVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5BUllfU1RBUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkJMT0NLIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQU5PTklDQUxfQ09NQklOSU5HX0NMQVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVNFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FTRV9GT0xESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVNFX0lHTk9SQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FTRV9TRU5TSVRJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5HRVNfV0hFTl9DQVNFRk9MREVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOR0VTX1dIRU5fQ0FTRU1BUFBFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTkdFU19XSEVOX0xPV0VSQ0FTRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5HRVNfV0hFTl9ORktDX0NBU0VGT0xERUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5HRVNfV0hFTl9USVRMRUNBU0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOR0VTX1dIRU5fVVBQRVJDQVNFRCIvPgotCQk8ZmllbGQgbmFtZT0iREFTSCIvPgotCQk8ZmllbGQgbmFtZT0iREVDT01QT1NJVElPTl9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX0lHTk9SQUJMRV9DT0RFX1BPSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVBSRUNBVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJESUFDUklUSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkRPVUJMRV9TVEFSVCIvPgotCQk8ZmllbGQgbmFtZT0iRUFTVF9BU0lBTl9XSURUSCIvPgotCQk8ZmllbGQgbmFtZT0iRU1PSkkiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRU1PSklfQ09NUE9ORU5UIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVNT0pJX01PRElGSUVSIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVNT0pJX01PRElGSUVSX0JBU0UiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRU1PSklfUFJFU0VOVEFUSU9OIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVEVOREVEX1BJQ1RPR1JBUEhJQyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRFTkRFUiIvPgotCQk8ZmllbGQgbmFtZT0iRlVMTF9DT01QT1NJVElPTl9FWENMVVNJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdFTkVSQUxfQ0FURUdPUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkdFTkVSQUxfQ0FURUdPUllfTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iR1JBUEhFTUVfQkFTRSIvPgotCQk8ZmllbGQgbmFtZT0iR1JBUEhFTUVfQ0xVU1RFUl9CUkVBSyIvPgotCQk8ZmllbGQgbmFtZT0iR1JBUEhFTUVfRVhURU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUkFQSEVNRV9MSU5LIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQU5HVUxfU1lMTEFCTEVfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iSEVYX0RJR0lUIi8+Ci0JCTxmaWVsZCBuYW1lPSJIWVBIRU4iLz4KLQkJPGZpZWxkIG5hbWU9IklERU9HUkFQSElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRFNfQklOQVJZX09QRVJBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRFNfVFJJTkFSWV9PUEVSQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iSURfQ09OVElOVUUiLz4KLQkJPGZpZWxkIG5hbWU9IklEX1NUQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRfU1RBUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkpPSU5JTkdfR1JPVVAiLz4KLQkJPGZpZWxkIG5hbWU9IkpPSU5JTkdfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iSk9JTl9DT05UUk9MIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRUFEX0NBTk9OSUNBTF9DT01CSU5JTkdfQ0xBU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkxJTkVfQlJFQUsiLz4KLQkJPGZpZWxkIG5hbWU9IkxPR0lDQUxfT1JERVJfRVhDRVBUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT1dFUkNBU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkxPV0VSQ0FTRV9NQVBQSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVNLX1NUQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJORkNfSU5FUlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5GQ19RVUlDS19DSEVDSyIvPgotCQk8ZmllbGQgbmFtZT0iTkZEX0lORVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJORkRfUVVJQ0tfQ0hFQ0siLz4KLQkJPGZpZWxkIG5hbWU9Ik5GS0NfSU5FUlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5GS0NfUVVJQ0tfQ0hFQ0siLz4KLQkJPGZpZWxkIG5hbWU9Ik5GS0RfSU5FUlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5GS0RfUVVJQ0tfQ0hFQ0siLz4KLQkJPGZpZWxkIG5hbWU9Ik5PTkNIQVJBQ1RFUl9DT0RFX1BPSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVU1FUklDX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VTUVSSUNfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9USEVSX1BST1BFUlRZX1NUQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVRURVJOX1NZTlRBWCIvPgotCQk8ZmllbGQgbmFtZT0iUEFUVEVSTl9XSElURV9TUEFDRSIvPgotCQk8ZmllbGQgbmFtZT0iUE9TSVhfQUxOVU0iLz4KLQkJPGZpZWxkIG5hbWU9IlBPU0lYX0JMQU5LIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT1NJWF9HUkFQSCIvPgotCQk8ZmllbGQgbmFtZT0iUE9TSVhfUFJJTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlBPU0lYX1hESUdJVCIvPgotCQk8ZmllbGQgbmFtZT0iUFJFUEVOREVEX0NPTkNBVEVOQVRJT05fTUFSSyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJRVU9UQVRJT05fTUFSSyIvPgotCQk8ZmllbGQgbmFtZT0iUkFESUNBTCIvPgotCQk8ZmllbGQgbmFtZT0iUkVHSU9OQUxfSU5ESUNBVE9SIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUklQVCIvPgotCQk8ZmllbGQgbmFtZT0iU0NSSVBUX0VYVEVOU0lPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IlNFR01FTlRfU1RBUlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iU0VOVEVOQ0VfQlJFQUsiLz4KLQkJPGZpZWxkIG5hbWU9IlNJTVBMRV9DQVNFX0ZPTERJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNJTVBMRV9MT1dFUkNBU0VfTUFQUElORyIvPgotCQk8ZmllbGQgbmFtZT0iU0lNUExFX1RJVExFQ0FTRV9NQVBQSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSU1QTEVfVVBQRVJDQVNFX01BUFBJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNPRlRfRE9UVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJTkdfU1RBUlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNfVEVSTSIvPgotCQk8ZmllbGQgbmFtZT0iVEVSTUlOQUxfUFVOQ1RVQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlRJVExFQ0FTRV9NQVBQSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFJTF9DQU5PTklDQUxfQ09NQklOSU5HX0NMQVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklGSUVEX0lERU9HUkFQSCIvPgotCQk8ZmllbGQgbmFtZT0iVVBQRVJDQVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJVUFBFUkNBU0VfTUFQUElORyIvPgotCQk8ZmllbGQgbmFtZT0iVkFSSUFUSU9OX1NFTEVDVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSElURV9TUEFDRSIvPgotCQk8ZmllbGQgbmFtZT0iV09SRF9CUkVBSyIvPgotCQk8ZmllbGQgbmFtZT0iWElEX0NPTlRJTlVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJYSURfU1RBUlQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS9sYW5nL1VQcm9wZXJ0eSROYW1lQ2hvaWNlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9SVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L2xhbmcvVVNjcmlwdCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJyZWFrc0JldHdlZW5MZXR0ZXJzKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvZGUoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2RlKExqYXZhL2xhbmcvU3RyaW5nOylbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvZGUoTGphdmEvdXRpbC9Mb2NhbGU7KVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29kZUZyb21OYW1lKExqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNhbXBsZVN0cmluZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjcmlwdChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY3JpcHRFeHRlbnNpb25zKElMamF2YS91dGlsL0JpdFNldDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3J0TmFtZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzYWdlKEkpTGFuZHJvaWQvaWN1L2xhbmcvVVNjcmlwdCRTY3JpcHRVc2FnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNTY3JpcHQoSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2FzZWQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSaWdodFRvTGVmdChJKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkFETEFNIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFGQUtBIi8+Ci0JCTxmaWVsZCBuYW1lPSJBSE9NIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTkFUT0xJQU5fSElFUk9HTFlQSFMiLz4KLQkJPGZpZWxkIG5hbWU9IkFSQUJJQyIvPgotCQk8ZmllbGQgbmFtZT0iQVJNRU5JQU4iLz4KLQkJPGZpZWxkIG5hbWU9IkFWRVNUQU4iLz4KLQkJPGZpZWxkIG5hbWU9IkJBTElORVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU1VTSIvPgotCQk8ZmllbGQgbmFtZT0iQkFTU0FfVkFIIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVRBSyIvPgotCQk8ZmllbGQgbmFtZT0iQkVOR0FMSSIvPgotCQk8ZmllbGQgbmFtZT0iQkhBSUtTVUtJIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkJMSVNTWU1CT0xTIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT09LX1BBSExBVkkiLz4KLQkJPGZpZWxkIG5hbWU9IkJPUE9NT0ZPIi8+Ci0JCTxmaWVsZCBuYW1lPSJCUkFITUkiLz4KLQkJPGZpZWxkIG5hbWU9IkJSQUlMTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkJVR0lORVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJCVUhJRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FOQURJQU5fQUJPUklHSU5BTCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FSSUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVVDQVNJQU5fQUxCQU5JQU4iLz4KLQkJPGZpZWxkIG5hbWU9IkNIQUtNQSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hFUk9LRUUiLz4KLQkJPGZpZWxkIG5hbWU9IkNJUlRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01NT04iLz4KLQkJPGZpZWxkIG5hbWU9IkNPUFRJQyIvPgotCQk8ZmllbGQgbmFtZT0iQ1VORUlGT1JNIi8+Ci0JCTxmaWVsZCBuYW1lPSJDWVBSSU9UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDWVJJTExJQyIvPgotCQk8ZmllbGQgbmFtZT0iREVNT1RJQ19FR1lQVElBTiIvPgotCQk8ZmllbGQgbmFtZT0iREVTRVJFVCIvPgotCQk8ZmllbGQgbmFtZT0iREVWQU5BR0FSSSIvPgotCQk8ZmllbGQgbmFtZT0iRE9HUkEiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRFVQTE9ZQU4iLz4KLQkJPGZpZWxkIG5hbWU9IkVBU1RFUk5fU1lSSUFDIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR1lQVElBTl9ISUVST0dMWVBIUyIvPgotCQk8ZmllbGQgbmFtZT0iRUxCQVNBTiIvPgotCQk8ZmllbGQgbmFtZT0iRVNUUkFOR0VMT19TWVJJQUMiLz4KLQkJPGZpZWxkIG5hbWU9IkVUSElPUElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRU9SR0lBTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xBR09MSVRJQyIvPgotCQk8ZmllbGQgbmFtZT0iR09USElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUkFOVEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUkVFSyIvPgotCQk8ZmllbGQgbmFtZT0iR1VKQVJBVEkiLz4KLQkJPGZpZWxkIG5hbWU9IkdVTkpBTEFfR09OREkiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iR1VSTVVLSEkiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTiIvPgotCQk8ZmllbGQgbmFtZT0iSEFOR1VMIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQU5JRklfUk9ISU5HWUEiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iSEFOVU5PTyIvPgotCQk8ZmllbGQgbmFtZT0iSEFOX1dJVEhfQk9QT01PRk8iIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iSEFSQVBQQU5fSU5EVVMiLz4KLQkJPGZpZWxkIG5hbWU9IkhBVFJBTiIvPgotCQk8ZmllbGQgbmFtZT0iSEVCUkVXIi8+Ci0JCTxmaWVsZCBuYW1lPSJISUVSQVRJQ19FR1lQVElBTiIvPgotCQk8ZmllbGQgbmFtZT0iSElSQUdBTkEiLz4KLQkJPGZpZWxkIG5hbWU9IklNUEVSSUFMX0FSQU1BSUMiLz4KLQkJPGZpZWxkIG5hbWU9IklOSEVSSVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iSU5TQ1JJUFRJT05BTF9QQUhMQVZJIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNDUklQVElPTkFMX1BBUlRISUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlZBTElEX0NPREUiLz4KLQkJPGZpZWxkIG5hbWU9IkpBTU8iIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iSkFQQU5FU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkpBVkFORVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJKVVJDSEVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQUlUSEkiLz4KLQkJPGZpZWxkIG5hbWU9IktBTk5BREEiLz4KLQkJPGZpZWxkIG5hbWU9IktBVEFLQU5BIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQVRBS0FOQV9PUl9ISVJBR0FOQSIvPgotCQk8ZmllbGQgbmFtZT0iS0FZQUhfTEkiLz4KLQkJPGZpZWxkIG5hbWU9IktIQVJPU0hUSEkiLz4KLQkJPGZpZWxkIG5hbWU9IktITUVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSE9KS0kiLz4KLQkJPGZpZWxkIG5hbWU9IktIVURBV0FESSIvPgotCQk8ZmllbGQgbmFtZT0iS0hVVFNVUkkiLz4KLQkJPGZpZWxkIG5hbWU9IktPUkVBTiIvPgotCQk8ZmllbGQgbmFtZT0iS1BFTExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQU5OQSIvPgotCQk8ZmllbGQgbmFtZT0iTEFPIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTiIvPgotCQk8ZmllbGQgbmFtZT0iTEFUSU5fRlJBS1RVUiIvPgotCQk8ZmllbGQgbmFtZT0iTEFUSU5fR0FFTElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRVBDSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkxJTUJVIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSU5FQVJfQSIvPgotCQk8ZmllbGQgbmFtZT0iTElORUFSX0IiLz4KLQkJPGZpZWxkIG5hbWU9IkxJU1UiLz4KLQkJPGZpZWxkIG5hbWU9IkxPTUEiLz4KLQkJPGZpZWxkIG5hbWU9IkxZQ0lBTiIvPgotCQk8ZmllbGQgbmFtZT0iTFlESUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQUhBSkFOSSIvPgotCQk8ZmllbGQgbmFtZT0iTUFLQVNBUiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQUxBWUFMQU0iLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTkRBRUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5EQUlDIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5JQ0hBRUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVJDSEVOIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BU0FSQU1fR09OREkiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTUFUSEVNQVRJQ0FMX05PVEFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVlBTl9ISUVST0dMWVBIUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVERUZBSURSSU4iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTUVJVEVJX01BWUVLIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRU5ERSIvPgotCQk8ZmllbGQgbmFtZT0iTUVST0lUSUMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FUk9JVElDX0NVUlNJVkUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FUk9JVElDX0hJRVJPR0xZUEhTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUFPIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RJIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05HT0xJQU4iLz4KLQkJPGZpZWxkIG5hbWU9Ik1PT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik1STyIvPgotCQk8ZmllbGQgbmFtZT0iTVVMVEFOSSIvPgotCQk8ZmllbGQgbmFtZT0iTVlBTk1BUiIvPgotCQk8ZmllbGQgbmFtZT0iTkFCQVRBRUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQUtISV9HRUJBIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVdBIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FV19UQUlfTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOS08iLz4KLQkJPGZpZWxkIG5hbWU9Ik5VU0hVIi8+Ci0JCTxmaWVsZCBuYW1lPSJPR0hBTSIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX0NIVVJDSF9TTEFWT05JQ19DWVJJTExJQyIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX0hVTkdBUklBTiIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX0lUQUxJQyIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX05PUlRIX0FSQUJJQU4iLz4KLQkJPGZpZWxkIG5hbWU9Ik9MRF9QRVJNSUMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9MRF9QRVJTSUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTERfU09HRElBTiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPTERfU09VVEhfQVJBQklBTiIvPgotCQk8ZmllbGQgbmFtZT0iT0xfQ0hJS0kiLz4KLQkJPGZpZWxkIG5hbWU9Ik9SSVlBIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUktIT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik9TQUdFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9TTUFOWUEiLz4KLQkJPGZpZWxkIG5hbWU9IlBBSEFXSF9ITU9ORyIvPgotCQk8ZmllbGQgbmFtZT0iUEFMTVlSRU5FIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVVfQ0lOX0hBVSIvPgotCQk8ZmllbGQgbmFtZT0iUEhBR1NfUEEiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT0VOSUNJQU4iLz4KLQkJPGZpZWxkIG5hbWU9IlBIT05FVElDX1BPTExBUkQiLz4KLQkJPGZpZWxkIG5hbWU9IlBTQUxURVJfUEFITEFWSSIvPgotCQk8ZmllbGQgbmFtZT0iUkVKQU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJST05HT1JPTkdPIi8+Ci0JCTxmaWVsZCBuYW1lPSJSVU5JQyIvPgotCQk8ZmllbGQgbmFtZT0iU0FNQVJJVEFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQVJBVEkiLz4KLQkJPGZpZWxkIG5hbWU9IlNBVVJBU0hUUkEiLz4KLQkJPGZpZWxkIG5hbWU9IlNIQVJBREEiLz4KLQkJPGZpZWxkIG5hbWU9IlNIQVZJQU4iLz4KLQkJPGZpZWxkIG5hbWU9IlNJRERIQU0iLz4KLQkJPGZpZWxkIG5hbWU9IlNJR05fV1JJVElORyIvPgotCQk8ZmllbGQgbmFtZT0iU0lNUExJRklFRF9IQU4iLz4KLQkJPGZpZWxkIG5hbWU9IlNJTkRISSIvPgotCQk8ZmllbGQgbmFtZT0iU0lOSEFMQSIvPgotCQk8ZmllbGQgbmFtZT0iU09HRElBTiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTT1JBX1NPTVBFTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNPWU9NQk8iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU1VOREFORVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWUxPVElfTkFHUkkiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTUJPTFMiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTUJPTFNfRU1PSkkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iU1lSSUFDIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdBTE9HIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdCQU5XQSIvPgotCQk8ZmllbGQgbmFtZT0iVEFJX0xFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUlfVklFVCIvPgotCQk8ZmllbGQgbmFtZT0iVEFLUkkiLz4KLQkJPGZpZWxkIG5hbWU9IlRBTUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQU5HVVQiLz4KLQkJPGZpZWxkIG5hbWU9IlRFTFVHVSIvPgotCQk8ZmllbGQgbmFtZT0iVEVOR1dBUiIvPgotCQk8ZmllbGQgbmFtZT0iVEhBQU5BIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSEFJIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSUJFVEFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSUZJTkFHSCIvPgotCQk8ZmllbGQgbmFtZT0iVElSSFVUQSIvPgotCQk8ZmllbGQgbmFtZT0iVFJBRElUSU9OQUxfSEFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJVQ0FTIi8+Ci0JCTxmaWVsZCBuYW1lPSJVR0FSSVRJQyIvPgotCQk8ZmllbGQgbmFtZT0iVU5LTk9XTiIvPgotCQk8ZmllbGQgbmFtZT0iVU5XUklUVEVOX0xBTkdVQUdFUyIvPgotCQk8ZmllbGQgbmFtZT0iVkFJIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSVNJQkxFX1NQRUVDSCIvPgotCQk8ZmllbGQgbmFtZT0iV0FSQU5HX0NJVEkiLz4KLQkJPGZpZWxkIG5hbWU9IldFU1RFUk5fU1lSSUFDIi8+Ci0JCTxmaWVsZCBuYW1lPSJXT0xFQUkiLz4KLQkJPGZpZWxkIG5hbWU9IllJIi8+Ci0JCTxmaWVsZCBuYW1lPSJaQU5BQkFaQVJfU1FVQVJFIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS9sYW5nL1VTY3JpcHQkU2NyaXB0VXNhZ2UiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L2xhbmcvVVNjcmlwdCRTY3JpcHRVc2FnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9pY3UvbGFuZy9VU2NyaXB0JFNjcmlwdFVzYWdlOyIvPgotCQk8ZmllbGQgbmFtZT0iQVNQSVJBVElPTkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWENMVURFRCIvPgotCQk8ZmllbGQgbmFtZT0iTElNSVRFRF9VU0UiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PVF9FTkNPREVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNPTU1FTkRFRCIvPgotCQk8ZmllbGQgbmFtZT0iVU5LTk9XTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL051bWJlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEopViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9tYXRoL0JpZ0RlY2ltYWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbWF0aC9CaWdJbnRlZ2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL21hdGgvQmlnSW50ZWdlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0MpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQ0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhYnMoKUxhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWJzKExhbmRyb2lkL2ljdS9tYXRoL01hdGhDb250ZXh0OylMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOylMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsO0xhbmRyb2lkL2ljdS9tYXRoL01hdGhDb250ZXh0OylMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ5dGVWYWx1ZUV4YWN0KClCIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDtMYW5kcm9pZC9pY3UvbWF0aC9NYXRoQ29udGV4dDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImRpdmlkZShMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOylMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpdmlkZShMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsO0kpTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXZpZGUoTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDtJSSlMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpdmlkZShMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsO0xhbmRyb2lkL2ljdS9tYXRoL01hdGhDb250ZXh0OylMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpdmlkZUludGVnZXIoTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDspTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXZpZGVJbnRlZ2VyKExhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7TGFuZHJvaWQvaWN1L21hdGgvTWF0aENvbnRleHQ7KUxhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KElJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChJSUlJSUkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW50VmFsdWVFeGFjdCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImxvbmdWYWx1ZUV4YWN0KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4KExhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7KUxhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4KExhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7TGFuZHJvaWQvaWN1L21hdGgvTWF0aENvbnRleHQ7KUxhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWluKExhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7KUxhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWluKExhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7TGFuZHJvaWQvaWN1L21hdGgvTWF0aENvbnRleHQ7KUxhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZVBvaW50TGVmdChJKUxhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZVBvaW50UmlnaHQoSSlMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9Im11bHRpcGx5KExhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7KUxhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibXVsdGlwbHkoTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDtMYW5kcm9pZC9pY3UvbWF0aC9NYXRoQ29udGV4dDspTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZWdhdGUoKUxhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmVnYXRlKExhbmRyb2lkL2ljdS9tYXRoL01hdGhDb250ZXh0OylMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXMoKUxhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1cyhMYW5kcm9pZC9pY3UvbWF0aC9NYXRoQ29udGV4dDspTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3coTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDspTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3coTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDtMYW5kcm9pZC9pY3UvbWF0aC9NYXRoQ29udGV4dDspTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1haW5kZXIoTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDspTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1haW5kZXIoTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDtMYW5kcm9pZC9pY3UvbWF0aC9NYXRoQ29udGV4dDspTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2FsZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjYWxlKEkpTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY2FsZShJSSlMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9InNob3J0VmFsdWVFeGFjdCgpUyIvPgotCQk8bWV0aG9kIG5hbWU9InNpZ251bSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InN1YnRyYWN0KExhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7KUxhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3VidHJhY3QoTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDtMYW5kcm9pZC9pY3UvbWF0aC9NYXRoQ29udGV4dDspTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0JpZ0RlY2ltYWwoKUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0JpZ0ludGVnZXIoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0JpZ0ludGVnZXJFeGFjdCgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQ2hhckFycmF5KClbQyIvPgotCQk8bWV0aG9kIG5hbWU9InVuc2NhbGVkVmFsdWUoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKEQpTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKEopTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKEpJKUxhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVU5EX0NFSUxJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlJPVU5EX0RPV04iLz4KLQkJPGZpZWxkIG5hbWU9IlJPVU5EX0ZMT09SIi8+Ci0JCTxmaWVsZCBuYW1lPSJST1VORF9IQUxGX0RPV04iLz4KLQkJPGZpZWxkIG5hbWU9IlJPVU5EX0hBTEZfRVZFTiIvPgotCQk8ZmllbGQgbmFtZT0iUk9VTkRfSEFMRl9VUCIvPgotCQk8ZmllbGQgbmFtZT0iUk9VTkRfVU5ORUNFU1NBUlkiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVU5EX1VQIi8+Ci0JCTxmaWVsZCBuYW1lPSJURU4iLz4KLQkJPGZpZWxkIG5hbWU9IlpFUk8iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS9tYXRoL01hdGhDb250ZXh0IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJWkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpZ2l0cygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcm0oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb3N0RGlnaXRzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um91bmRpbmdNb2RlKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkdJTkVFUklORyIvPgotCQk8ZmllbGQgbmFtZT0iUExBSU4iLz4KLQkJPGZpZWxkIG5hbWU9IlJPVU5EX0NFSUxJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlJPVU5EX0RPV04iLz4KLQkJPGZpZWxkIG5hbWU9IlJPVU5EX0ZMT09SIi8+Ci0JCTxmaWVsZCBuYW1lPSJST1VORF9IQUxGX0RPV04iLz4KLQkJPGZpZWxkIG5hbWU9IlJPVU5EX0hBTEZfRVZFTiIvPgotCQk8ZmllbGQgbmFtZT0iUk9VTkRfSEFMRl9VUCIvPgotCQk8ZmllbGQgbmFtZT0iUk9VTkRfVU5ORUNFU1NBUlkiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVU5EX1VQIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0lFTlRJRklDIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9BbHBoYWJldGljSW5kZXgiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0l0ZXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS90ZXh0L1J1bGVCYXNlZENvbGxhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRMYWJlbHMoTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDspTGFuZHJvaWQvaWN1L3RleHQvQWxwaGFiZXRpY0luZGV4OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZExhYmVscyhbTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvQWxwaGFiZXRpY0luZGV4OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZExhYmVscyhbTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0FscGhhYmV0aWNJbmRleDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSZWNvcmQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9PYmplY3Q7KUxhbmRyb2lkL2ljdS90ZXh0L0FscGhhYmV0aWNJbmRleDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZEltbXV0YWJsZUluZGV4KClMYW5kcm9pZC9pY3UvdGV4dC9BbHBoYWJldGljSW5kZXgkSW1tdXRhYmxlSW5kZXg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJSZWNvcmRzKClMYW5kcm9pZC9pY3UvdGV4dC9BbHBoYWJldGljSW5kZXg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnVja2V0Q291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCdWNrZXRJbmRleChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1Y2tldExhYmVscygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbGxhdG9yKClMYW5kcm9pZC9pY3UvdGV4dC9SdWxlQmFzZWRDb2xsYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmZsb3dMYWJlbCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4TGFiZWxDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE92ZXJmbG93TGFiZWwoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlY29yZENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5kZXJmbG93TGFiZWwoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluZmxvd0xhYmVsKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9BbHBoYWJldGljSW5kZXg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4TGFiZWxDb3VudChJKUxhbmRyb2lkL2ljdS90ZXh0L0FscGhhYmV0aWNJbmRleDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdmVyZmxvd0xhYmVsKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9BbHBoYWJldGljSW5kZXg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VW5kZXJmbG93TGFiZWwoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L0FscGhhYmV0aWNJbmRleDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0FscGhhYmV0aWNJbmRleCRCdWNrZXQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0l0ZXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdGV4dC9BbHBoYWJldGljSW5kZXgkQnVja2V0JExhYmVsVHlwZTspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFiZWwoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhYmVsVHlwZSgpTGFuZHJvaWQvaWN1L3RleHQvQWxwaGFiZXRpY0luZGV4JEJ1Y2tldCRMYWJlbFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvQWxwaGFiZXRpY0luZGV4JEJ1Y2tldCRMYWJlbFR5cGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvQWxwaGFiZXRpY0luZGV4JEJ1Y2tldCRMYWJlbFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvaWN1L3RleHQvQWxwaGFiZXRpY0luZGV4JEJ1Y2tldCRMYWJlbFR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTkZMT1ciLz4KLQkJPGZpZWxkIG5hbWU9Ik5PUk1BTCIvPgotCQk8ZmllbGQgbmFtZT0iT1ZFUkZMT1ciLz4KLQkJPGZpZWxkIG5hbWU9IlVOREVSRkxPVyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvQWxwaGFiZXRpY0luZGV4JEltbXV0YWJsZUluZGV4IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9JdGVyYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1Y2tldChJKUxhbmRyb2lkL2ljdS90ZXh0L0FscGhhYmV0aWNJbmRleCRCdWNrZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnVja2V0Q291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCdWNrZXRJbmRleChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvQWxwaGFiZXRpY0luZGV4JFJlY29yZCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGEoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3VycmVudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZpcnN0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9sbG93aW5nKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUxvY2FsZXMoKVtMamF2YS91dGlsL0xvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyYWN0ZXJJbnN0YW5jZSgpTGFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyYWN0ZXJJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9CcmVha0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJhY3Rlckluc3RhbmNlKExqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9CcmVha0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmVJbnN0YW5jZSgpTGFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lSW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lSW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0JyZWFrSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnVsZVN0YXR1cygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJ1bGVTdGF0dXNWZWMoW0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbnRlbmNlSW5zdGFuY2UoKUxhbmRyb2lkL2ljdS90ZXh0L0JyZWFrSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VudGVuY2VJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9CcmVha0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbnRlbmNlSW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0JyZWFrSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dCgpTGphdmEvdGV4dC9DaGFyYWN0ZXJJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaXRsZUluc3RhbmNlKClMYW5kcm9pZC9pY3UvdGV4dC9CcmVha0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpdGxlSW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaXRsZUluc3RhbmNlKExqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9CcmVha0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdvcmRJbnN0YW5jZSgpTGFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXb3JkSW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXb3JkSW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0JyZWFrSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNCb3VuZGFyeShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXN0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJlY2VkaW5nKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InByZXZpb3VzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHQoTGphdmEvdGV4dC9DaGFyYWN0ZXJJdGVyYXRvcjspViIvPgotCQk8ZmllbGQgbmFtZT0iRE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9DSEFSQUNURVIiLz4KLQkJPGZpZWxkIG5hbWU9IktJTkRfTElORSIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9TRU5URU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9USVRMRSIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9XT1JEIi8+Ci0JCTxmaWVsZCBuYW1lPSJXT1JEX0lERU8iLz4KLQkJPGZpZWxkIG5hbWU9IldPUkRfSURFT19MSU1JVCIvPgotCQk8ZmllbGQgbmFtZT0iV09SRF9LQU5BIi8+Ci0JCTxmaWVsZCBuYW1lPSJXT1JEX0tBTkFfTElNSVQiLz4KLQkJPGZpZWxkIG5hbWU9IldPUkRfTEVUVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJXT1JEX0xFVFRFUl9MSU1JVCIvPgotCQk8ZmllbGQgbmFtZT0iV09SRF9OT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJXT1JEX05PTkVfTElNSVQiLz4KLQkJPGZpZWxkIG5hbWU9IldPUkRfTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJXT1JEX05VTUJFUl9MSU1JVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdGV4dC9SdWxlQmFzZWRDb2xsYXRvcjspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4RXhwYW5zaW9uKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9mZnNldCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmV2aW91cygpSSIvPgotCQk8bWV0aG9kIG5hbWU9InByaW1hcnlPcmRlcihJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNlY29uZGFyeU9yZGVyKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9mZnNldChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0KExhbmRyb2lkL2ljdS90ZXh0L1VDaGFyYWN0ZXJJdGVyYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0KExqYXZhL3RleHQvQ2hhcmFjdGVySXRlcmF0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXJ0aWFyeU9yZGVyKEkpSSIvPgotCQk8ZmllbGQgbmFtZT0iSUdOT1JBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVUxMT1JERVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0NvbGxhdGlvbktleSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExhbmRyb2lkL2ljdS90ZXh0L0NvbGxhdGlvbktleTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImVxdWFscyhMYW5kcm9pZC9pY3UvdGV4dC9Db2xsYXRpb25LZXk7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb3VuZChJSSlMYW5kcm9pZC9pY3UvdGV4dC9Db2xsYXRpb25LZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U291cmNlU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtZXJnZShMYW5kcm9pZC9pY3UvdGV4dC9Db2xsYXRpb25LZXk7KUxhbmRyb2lkL2ljdS90ZXh0L0NvbGxhdGlvbktleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0J5dGVBcnJheSgpW0IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0NvbGxhdGlvbktleSRCb3VuZE1vZGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkxPV0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJVUFBFUiIvPgotCQk8ZmllbGQgbmFtZT0iVVBQRVJfTE9ORyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvQ29sbGF0b3IiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9GcmVlemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvQ29tcGFyYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lQXNUaGF3ZWQoKUxhbmRyb2lkL2ljdS90ZXh0L0NvbGxhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcmVlemUoKUxhbmRyb2lkL2ljdS90ZXh0L0NvbGxhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUxvY2FsZXMoKVtMamF2YS91dGlsL0xvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVVTG9jYWxlcygpW0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sbGF0aW9uS2V5KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9Db2xsYXRpb25LZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVjb21wb3NpdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7TGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKExqYXZhL3V0aWwvTG9jYWxlO0xqYXZhL3V0aWwvTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcXVpdmFsZW50UmVvcmRlckNvZGVzKEkpW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGdW5jdGlvbmFsRXF1aXZhbGVudChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZ1bmN0aW9uYWxFcXVpdmFsZW50KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7W1opTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGFuZHJvaWQvaWN1L3RleHQvQ29sbGF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvQ29sbGF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0NvbGxhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleXdvcmRWYWx1ZXMoTGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXl3b3JkVmFsdWVzRm9yTG9jYWxlKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7WilbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5d29yZHMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhWYXJpYWJsZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlb3JkZXJDb2RlcygpW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRhaWxvcmVkU2V0KClMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVDQVZlcnNpb24oKUxhbmRyb2lkL2ljdS91dGlsL1ZlcnNpb25JbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhcmlhYmxlVG9wKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVyc2lvbigpTGFuZHJvaWQvaWN1L3V0aWwvVmVyc2lvbkluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVjb21wb3NpdGlvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhWYXJpYWJsZShJKUxhbmRyb2lkL2ljdS90ZXh0L0NvbGxhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlb3JkZXJDb2RlcyhbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RyZW5ndGgoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQU5PTklDQUxfREVDT01QT1NJVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRlVMTF9ERUNPTVBPU0lUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJJREVOVElDQUwiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX0RFQ09NUE9TSVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlBSSU1BUlkiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQVRFUk5BUlkiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQ09OREFSWSIvPgotCQk8ZmllbGQgbmFtZT0iVEVSVElBUlkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0NvbGxhdG9yJFJlb3JkZXJDb2RlcyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQ1VSUkVOQ1kiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJR0lUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSVJTVCIvPgotCQk8ZmllbGQgbmFtZT0iTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iT1RIRVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJQVU5DVFVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iU1BBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTUJPTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvQ29tcGFjdERlY2ltYWxGb3JtYXQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvRGVjaW1hbEZvcm1hdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtMYW5kcm9pZC9pY3UvdGV4dC9Db21wYWN0RGVjaW1hbEZvcm1hdCRDb21wYWN0U3R5bGU7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7TGFuZHJvaWQvaWN1L3RleHQvQ29tcGFjdERlY2ltYWxGb3JtYXQkQ29tcGFjdFN0eWxlOylMYW5kcm9pZC9pY3UvdGV4dC9Db21wYWN0RGVjaW1hbEZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTtMYW5kcm9pZC9pY3UvdGV4dC9Db21wYWN0RGVjaW1hbEZvcm1hdCRDb21wYWN0U3R5bGU7KUxhbmRyb2lkL2ljdS90ZXh0L0NvbXBhY3REZWNpbWFsRm9ybWF0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvQ29tcGFjdERlY2ltYWxGb3JtYXQkQ29tcGFjdFN0eWxlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L0NvbXBhY3REZWNpbWFsRm9ybWF0JENvbXBhY3RTdHlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9pY3UvdGV4dC9Db21wYWN0RGVjaW1hbEZvcm1hdCRDb21wYWN0U3R5bGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9SVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvQ3VycmVuY3lQbHVyYWxJbmZvIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbmN5UGx1cmFsUGF0dGVybihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxhbmRyb2lkL2ljdS90ZXh0L0N1cnJlbmN5UGx1cmFsSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9DdXJyZW5jeVBsdXJhbEluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0N1cnJlbmN5UGx1cmFsSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbGUoKUxhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGx1cmFsUnVsZXMoKUxhbmRyb2lkL2ljdS90ZXh0L1BsdXJhbFJ1bGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1cnJlbmN5UGx1cmFsUGF0dGVybihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvY2FsZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGx1cmFsUnVsZXMoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvVUZvcm1hdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhcjtMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjtMamF2YS90ZXh0L0ZpZWxkUG9zaXRpb247KUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS91dGlsL0RhdGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS91dGlsL0RhdGU7TGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7TGphdmEvdGV4dC9GaWVsZFBvc2l0aW9uOylMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVMb2NhbGVzKClbTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9vbGVhbkF0dHJpYnV0ZShMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0JEJvb2xlYW5BdHRyaWJ1dGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxlbmRhcigpTGFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGV4dChMYW5kcm9pZC9pY3UvdGV4dC9EaXNwbGF5Q29udGV4dCRUeXBlOylMYW5kcm9pZC9pY3UvdGV4dC9EaXNwbGF5Q29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlSW5zdGFuY2UoKUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZUluc3RhbmNlKEkpTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlSW5zdGFuY2UoSUxhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZUluc3RhbmNlKElMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlSW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXI7SSlMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGVJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhcjtJTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlSW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXI7SUxqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGVUaW1lSW5zdGFuY2UoKUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZVRpbWVJbnN0YW5jZShJSSlMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGVUaW1lSW5zdGFuY2UoSUlMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGVUaW1lSW5zdGFuY2UoSUlMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlVGltZUluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyO0lJKUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZVRpbWVJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhcjtJSUxhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZVRpbWVJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhcjtJSUxqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyO0xqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlRm9yU2tlbGV0b24oTGFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXI7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZUZvclNrZWxldG9uKExhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlRm9yU2tlbGV0b24oTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2VGb3JTa2VsZXRvbihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlRm9yU2tlbGV0b24oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtYmVyRm9ybWF0KClMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGF0dGVybkluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGF0dGVybkluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhdHRlcm5JbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXR0ZXJuSW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXR0ZXJuSW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZUluc3RhbmNlKClMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVJbnN0YW5jZShJKUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZUluc3RhbmNlKElMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVJbnN0YW5jZShJTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZUluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyO0kpTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lSW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXI7SUxhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZUluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyO0lMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lWm9uZSgpTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDYWxlbmRhckxlbmllbnQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xlbmllbnQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyO0xqYXZhL3RleHQvUGFyc2VQb3NpdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3RleHQvUGFyc2VQb3NpdGlvbjspTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJvb2xlYW5BdHRyaWJ1dGUoTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdCRCb29sZWFuQXR0cmlidXRlO1opTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYWxlbmRhcihMYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbGVuZGFyTGVuaWVudChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZXh0KExhbmRyb2lkL2ljdS90ZXh0L0Rpc3BsYXlDb250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGVuaWVudChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROdW1iZXJGb3JtYXQoTGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZVpvbmUoTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFCQlJfR0VORVJJQ19UWiIvPgotCQk8ZmllbGQgbmFtZT0iQUJCUl9NT05USCIvPgotCQk8ZmllbGQgbmFtZT0iQUJCUl9NT05USF9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkFCQlJfTU9OVEhfV0VFS0RBWV9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkFCQlJfUVVBUlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iQUJCUl9TUEVDSUZJQ19UWiIvPgotCQk8ZmllbGQgbmFtZT0iQUJCUl9VVENfVFoiLz4KLQkJPGZpZWxkIG5hbWU9IkFCQlJfV0VFS0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iQU1fUE1fRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IkFNX1BNX01JRE5JR0hUX05PT05fRklFTEQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iREFURV9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVlfT0ZfV0VFS19GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iREFZX09GX1dFRUtfSU5fTU9OVEhfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IkRBWV9PRl9ZRUFSX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJET1dfTE9DQUxfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IkVSQV9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iRVhURU5ERURfWUVBUl9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iRkxFWElCTEVfREFZX1BFUklPRF9GSUVMRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGUkFDVElPTkFMX1NFQ09ORF9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iRlVMTCIvPgotCQk8ZmllbGQgbmFtZT0iR0VORVJJQ19UWiIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUiIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUjBfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVVIxX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1VSMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVVIyNF9NSU5VVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVVIyNF9NSU5VVEVfU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1VSX01JTlVURSIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUl9NSU5VVEVfU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1VSX09GX0RBWTBfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVVJfT0ZfREFZMV9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iSlVMSUFOX0RBWV9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQVRJT05fVFoiLz4KLQkJPGZpZWxkIG5hbWU9IkxPTkciLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElVTSIvPgotCQk8ZmllbGQgbmFtZT0iTUlMTElTRUNPTkRTX0lOX0RBWV9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iTUlMTElTRUNPTkRfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTlVURSIvPgotCQk8ZmllbGQgbmFtZT0iTUlOVVRFX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5VVEVfU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05USCIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEhfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05USF9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEhfV0VFS0RBWV9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PTkUiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VTV9NT05USCIvPgotCQk8ZmllbGQgbmFtZT0iTlVNX01PTlRIX0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iTlVNX01PTlRIX1dFRUtEQVlfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFSVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFSVEVSX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUxBVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iUkVMQVRJVkVfREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iUkVMQVRJVkVfRlVMTCIvPgotCQk8ZmllbGQgbmFtZT0iUkVMQVRJVkVfTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iUkVMQVRJVkVfTUVESVVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUxBVElWRV9TSE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNPTkRfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUEVDSUZJQ19UWiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBTkRBTE9ORV9EQVlfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQU5EQUxPTkVfTU9OVEhfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQU5EQUxPTkVfUVVBUlRFUl9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVpPTkVfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IlRJTUVaT05FX0dFTkVSSUNfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IlRJTUVaT05FX0lTT19GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVpPTkVfSVNPX0xPQ0FMX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FWk9ORV9MT0NBTElaRURfR01UX09GRlNFVF9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVpPTkVfUkZDX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FWk9ORV9TUEVDSUFMX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUVLREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUVLX09GX01PTlRIX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUVLX09GX1lFQVJfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IllFQVIiLz4KLQkJPGZpZWxkIG5hbWU9IllFQVJfQUJCUl9NT05USCIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUl9BQkJSX01PTlRIX0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUl9BQkJSX01PTlRIX1dFRUtEQVlfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJZRUFSX0FCQlJfUVVBUlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUl9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUl9NT05USCIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUl9NT05USF9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IllFQVJfTU9OVEhfV0VFS0RBWV9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IllFQVJfTkFNRV9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUl9OVU1fTU9OVEgiLz4KLQkJPGZpZWxkIG5hbWU9IllFQVJfTlVNX01PTlRIX0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUl9OVU1fTU9OVEhfV0VFS0RBWV9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IllFQVJfUVVBUlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUl9XT1lfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9ImNhbGVuZGFyIi8+Ci0JCTxmaWVsZCBuYW1lPSJudW1iZXJGb3JtYXQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQkQm9vbGVhbkF0dHJpYnV0ZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0JEJvb2xlYW5BdHRyaWJ1dGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdCRCb29sZWFuQXR0cmlidXRlOyIvPgotCQk8ZmllbGQgbmFtZT0iUEFSU0VfQUxMT1dfTlVNRVJJQyIvPgotCQk8ZmllbGQgbmFtZT0iUEFSU0VfQUxMT1dfV0hJVEVTUEFDRSIvPgotCQk8ZmllbGQgbmFtZT0iUEFSU0VfTVVMVElQTEVfUEFUVEVSTlNfRk9SX01BVENIIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlBBUlNFX1BBUlRJQUxfTElURVJBTF9NQVRDSCIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0JEZpZWxkIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3RleHQvRm9ybWF0JEZpZWxkIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGVuZGFyRmllbGQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkNhbGVuZGFyRmllbGQoSSlMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0JEZpZWxkOyIvPgotCQk8ZmllbGQgbmFtZT0iQU1fUE0iLz4KLQkJPGZpZWxkIG5hbWU9IkFNX1BNX01JRE5JR0hUX05PT04iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iREFZX09GX01PTlRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVlfT0ZfV0VFSyIvPgotCQk8ZmllbGQgbmFtZT0iREFZX09GX1dFRUtfSU5fTU9OVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkRBWV9PRl9ZRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJET1dfTE9DQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkVSQSIvPgotCQk8ZmllbGQgbmFtZT0iRVhURU5ERURfWUVBUiIvPgotCQk8ZmllbGQgbmFtZT0iRkxFWElCTEVfREFZX1BFUklPRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIT1VSMCIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUjEiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVVJfT0ZfREFZMCIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUl9PRl9EQVkxIi8+Ci0JCTxmaWVsZCBuYW1lPSJKVUxJQU5fREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUxMSVNFQ09ORCIvPgotCQk8ZmllbGQgbmFtZT0iTUlMTElTRUNPTkRTX0lOX0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iTUlOVVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05USCIvPgotCQk8ZmllbGQgbmFtZT0iUVVBUlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FX1pPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IldFRUtfT0ZfTU9OVEgiLz4KLQkJPGZpZWxkIG5hbWU9IldFRUtfT0ZfWUVBUiIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUiIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUl9XT1kiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXRTeW1ib2xzIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXI7TGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhcjtMamF2YS91dGlsL0xvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2xhc3M7TGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NsYXNzO0xqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvUmVzb3VyY2VCdW5kbGU7TGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL1Jlc291cmNlQnVuZGxlO0xqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW1QbVN0cmluZ3MoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVMb2NhbGVzKClbTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXJhTmFtZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcmFzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXRTeW1ib2xzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXRTeW1ib2xzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0U3ltYm9sczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbFBhdHRlcm5DaGFycygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9udGhzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9udGhzKElJKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWFydGVycyhJSSlbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvcnRNb250aHMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG9ydFdlZWtkYXlzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2Vla2RheXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWVrZGF5cyhJSSlbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WWVhck5hbWVzKElJKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRab2RpYWNOYW1lcyhJSSlbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Wm9uZVN0cmluZ3MoKVtbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdGlhbGl6ZURhdGEoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFtUG1TdHJpbmdzKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVyYU5hbWVzKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVyYXMoW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9jYWxQYXR0ZXJuQ2hhcnMoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNb250aHMoW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TW9udGhzKFtMamF2YS9sYW5nL1N0cmluZztJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UXVhcnRlcnMoW0xqYXZhL2xhbmcvU3RyaW5nO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG9ydE1vbnRocyhbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG9ydFdlZWtkYXlzKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdlZWtkYXlzKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdlZWtkYXlzKFtMamF2YS9sYW5nL1N0cmluZztJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0WWVhck5hbWVzKFtMamF2YS9sYW5nL1N0cmluZztJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Wm9kaWFjTmFtZXMoW0xqYXZhL2xhbmcvU3RyaW5nO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRab25lU3RyaW5ncyhbW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQkJSRVZJQVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQVJST1ciLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFOREFMT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSURFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9EYXRlSW50ZXJ2YWxGb3JtYXQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvVUZvcm1hdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhcjtMYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhcjtMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjtMamF2YS90ZXh0L0ZpZWxkUG9zaXRpb247KUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMYW5kcm9pZC9pY3UvdXRpbC9EYXRlSW50ZXJ2YWw7TGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7TGphdmEvdGV4dC9GaWVsZFBvc2l0aW9uOylMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlRm9ybWF0KClMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGVJbnRlcnZhbEluZm8oKUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVJbnRlcnZhbEluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVJbnRlcnZhbEZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdGV4dC9EYXRlSW50ZXJ2YWxJbmZvOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlSW50ZXJ2YWxGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUludGVydmFsRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7TGFuZHJvaWQvaWN1L3RleHQvRGF0ZUludGVydmFsSW5mbzspTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUludGVydmFsRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlSW50ZXJ2YWxGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Mb2NhbGU7TGFuZHJvaWQvaWN1L3RleHQvRGF0ZUludGVydmFsSW5mbzspTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUludGVydmFsRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVab25lKClMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRlSW50ZXJ2YWxJbmZvKExhbmRyb2lkL2ljdS90ZXh0L0RhdGVJbnRlcnZhbEluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaW1lWm9uZShMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvRGF0ZUludGVydmFsSW5mbyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0ZyZWV6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZUFzVGhhd2VkKClMYW5kcm9pZC9pY3UvdGV4dC9EYXRlSW50ZXJ2YWxJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZyZWV6ZSgpTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUludGVydmFsSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0T3JkZXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGYWxsYmFja0ludGVydmFsUGF0dGVybigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZXJ2YWxQYXR0ZXJuKExqYXZhL2xhbmcvU3RyaW5nO0kpTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUludGVydmFsSW5mbyRQYXR0ZXJuSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGYWxsYmFja0ludGVydmFsUGF0dGVybihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludGVydmFsUGF0dGVybihMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0RhdGVJbnRlcnZhbEluZm8kUGF0dGVybkluZm8iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaXJzdERhdGVJblB0bklzTGF0ZXJEYXRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rmlyc3RQYXJ0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWNvbmRQYXJ0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0RhdGVUaW1lUGF0dGVybkdlbmVyYXRvciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0ZyZWV6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUGF0dGVybihMamF2YS9sYW5nL1N0cmluZztaTGFuZHJvaWQvaWN1L3RleHQvRGF0ZVRpbWVQYXR0ZXJuR2VuZXJhdG9yJFBhdHRlcm5JbmZvOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlVGltZVBhdHRlcm5HZW5lcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmVBc1RoYXdlZCgpTGFuZHJvaWQvaWN1L3RleHQvRGF0ZVRpbWVQYXR0ZXJuR2VuZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZyZWV6ZSgpTGFuZHJvaWQvaWN1L3RleHQvRGF0ZVRpbWVQYXR0ZXJuR2VuZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFwcGVuZEl0ZW1Gb3JtYXQoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBlbmRJdGVtTmFtZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhc2VTa2VsZXRvbihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFzZVNrZWxldG9ucyhMamF2YS91dGlsL1NldDspTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmVzdFBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJlc3RQYXR0ZXJuKExqYXZhL2xhbmcvU3RyaW5nO0kpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZVRpbWVGb3JtYXQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2ltYWwoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVtcHR5SW5zdGFuY2UoKUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVUaW1lUGF0dGVybkdlbmVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGFuZHJvaWQvaWN1L3RleHQvRGF0ZVRpbWVQYXR0ZXJuR2VuZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVUaW1lUGF0dGVybkdlbmVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvRGF0ZVRpbWVQYXR0ZXJuR2VuZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNrZWxldG9uKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTa2VsZXRvbnMoTGphdmEvdXRpbC9NYXA7KUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2VGaWVsZFR5cGVzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBsYWNlRmllbGRUeXBlcyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFwcGVuZEl0ZW1Gb3JtYXQoSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXBwZW5kSXRlbU5hbWUoSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0ZVRpbWVGb3JtYXQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWNpbWFsKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkRBWVBFUklPRCIvPgotCQk8ZmllbGQgbmFtZT0iREFZX09GX1dFRUtfSU5fTU9OVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkRBWV9PRl9ZRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUkEiLz4KLQkJPGZpZWxkIG5hbWU9IkZSQUNUSU9OQUxfU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRDSF9BTExfRklFTERTX0xFTkdUSCIvPgotCQk8ZmllbGQgbmFtZT0iTUFUQ0hfSE9VUl9GSUVMRF9MRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVENIX05PX09QVElPTlMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTlVURSIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEgiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQVJURVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQ09ORCIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS19PRl9NT05USCIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS19PRl9ZRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJZRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJaT05FIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9EYXRlVGltZVBhdHRlcm5HZW5lcmF0b3IkUGF0dGVybkluZm8iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkJBU0VfQ09ORkxJQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkZMSUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPSyIvPgotCQk8ZmllbGQgbmFtZT0iY29uZmxpY3RpbmdQYXR0ZXJuIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0dXMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0RlY2ltYWxGb3JtYXQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2ljdS90ZXh0L0RlY2ltYWxGb3JtYXRTeW1ib2xzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2ljdS90ZXh0L0RlY2ltYWxGb3JtYXRTeW1ib2xzO0xhbmRyb2lkL2ljdS90ZXh0L0N1cnJlbmN5UGx1cmFsSW5mbztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseUxvY2FsaXplZFBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseVBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcmVTaWduaWZpY2FudERpZ2l0c1VzZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW5jeVBsdXJhbEluZm8oKUxhbmRyb2lkL2ljdS90ZXh0L0N1cnJlbmN5UGx1cmFsSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW5jeVVzYWdlKClMYW5kcm9pZC9pY3UvdXRpbC9DdXJyZW5jeSRDdXJyZW5jeVVzYWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2ltYWxGb3JtYXRTeW1ib2xzKClMYW5kcm9pZC9pY3UvdGV4dC9EZWNpbWFsRm9ybWF0U3ltYm9sczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JtYXRXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyb3VwaW5nU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hdGhDb250ZXh0KClMamF2YS9tYXRoL01hdGhDb250ZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hdGhDb250ZXh0SUNVKClMYW5kcm9pZC9pY3UvbWF0aC9NYXRoQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5pbXVtRXhwb25lbnREaWdpdHMoKUIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNdWx0aXBsaWVyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmVnYXRpdmVQcmVmaXgoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5lZ2F0aXZlU3VmZml4KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWRDaGFyYWN0ZXIoKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWRQb3NpdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcnNlTWF4RGlnaXRzKClJIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvc2l0aXZlUHJlZml4KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3NpdGl2ZVN1ZmZpeCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um91bmRpbmdJbmNyZW1lbnQoKUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWNvbmRhcnlHcm91cGluZ1NpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RlY2ltYWxQYXR0ZXJuTWF0Y2hSZXF1aXJlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFeHBvbmVudFNpZ25BbHdheXNTaG93bigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGFyc2VCaWdEZWNpbWFsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTY2llbnRpZmljTm90YXRpb24oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXJyZW5jeVBsdXJhbEluZm8oTGFuZHJvaWQvaWN1L3RleHQvQ3VycmVuY3lQbHVyYWxJbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VycmVuY3lVc2FnZShMYW5kcm9pZC9pY3UvdXRpbC9DdXJyZW5jeSRDdXJyZW5jeVVzYWdlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVjaW1hbEZvcm1hdFN5bWJvbHMoTGFuZHJvaWQvaWN1L3RleHQvRGVjaW1hbEZvcm1hdFN5bWJvbHM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWNpbWFsUGF0dGVybk1hdGNoUmVxdWlyZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4cG9uZW50U2lnbkFsd2F5c1Nob3duKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvcm1hdFdpZHRoKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyb3VwaW5nU2l6ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXRoQ29udGV4dChMamF2YS9tYXRoL01hdGhDb250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF0aENvbnRleHRJQ1UoTGFuZHJvaWQvaWN1L21hdGgvTWF0aENvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWluaW11bUV4cG9uZW50RGlnaXRzKEIpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbmltdW1TaWduaWZpY2FudERpZ2l0cyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNdWx0aXBsaWVyKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5lZ2F0aXZlUHJlZml4KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmVnYXRpdmVTdWZmaXgoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYWRDaGFyYWN0ZXIoQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFkUG9zaXRpb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyc2VCaWdEZWNpbWFsKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhcnNlTWF4RGlnaXRzKEkpViIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb3NpdGl2ZVByZWZpeChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvc2l0aXZlU3VmZml4KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Um91bmRpbmdJbmNyZW1lbnQoRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Um91bmRpbmdJbmNyZW1lbnQoTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJvdW5kaW5nSW5jcmVtZW50KExqYXZhL21hdGgvQmlnRGVjaW1hbDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjaWVudGlmaWNOb3RhdGlvbihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWNvbmRhcnlHcm91cGluZ1NpemUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2lnbmlmaWNhbnREaWdpdHNVc2VkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InRvTG9jYWxpemVkUGF0dGVybigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9QYXR0ZXJuKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IlBBRF9BRlRFUl9QUkVGSVgiLz4KLQkJPGZpZWxkIG5hbWU9IlBBRF9BRlRFUl9TVUZGSVgiLz4KLQkJPGZpZWxkIG5hbWU9IlBBRF9CRUZPUkVfUFJFRklYIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQURfQkVGT1JFX1NVRkZJWCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvRGVjaW1hbEZvcm1hdFN5bWJvbHMiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZhaWxhYmxlTG9jYWxlcygpW0xqYXZhL3V0aWwvTG9jYWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbmN5KClMYW5kcm9pZC9pY3UvdXRpbC9DdXJyZW5jeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW5jeVN5bWJvbCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVjaW1hbFNlcGFyYXRvcigpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2ltYWxTZXBhcmF0b3JTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlnaXQoKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaWdpdFN0cmluZ3MoKVtMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpZ2l0cygpW0MiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHBvbmVudE11bHRpcGxpY2F0aW9uU2lnbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhwb25lbnRTZXBhcmF0b3IoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyb3VwaW5nU2VwYXJhdG9yKClDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3JvdXBpbmdTZXBhcmF0b3JTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5maW5pdHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMYW5kcm9pZC9pY3UvdGV4dC9EZWNpbWFsRm9ybWF0U3ltYm9sczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9EZWNpbWFsRm9ybWF0U3ltYm9sczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvRGVjaW1hbEZvcm1hdFN5bWJvbHM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZXJuYXRpb25hbEN1cnJlbmN5U3ltYm9sKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbGUoKUxqYXZhL3V0aWwvTG9jYWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbnVzU2lnbigpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbnVzU2lnblN0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb25ldGFyeURlY2ltYWxTZXBhcmF0b3IoKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb25ldGFyeURlY2ltYWxTZXBhcmF0b3JTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9uZXRhcnlHcm91cGluZ1NlcGFyYXRvcigpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3JTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFOKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWRFc2NhcGUoKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXR0ZXJuRm9yQ3VycmVuY3lTcGFjaW5nKElaKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhdHRlcm5TZXBhcmF0b3IoKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJNaWxsKClDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVyTWlsbFN0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJjZW50KClDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVyY2VudFN0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQbHVzU2lnbigpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBsdXNTaWduU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpZ25pZmljYW50RGlnaXQoKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVTG9jYWxlKClMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFplcm9EaWdpdCgpQyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1cnJlbmN5KExhbmRyb2lkL2ljdS91dGlsL0N1cnJlbmN5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VycmVuY3lTeW1ib2woTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWNpbWFsU2VwYXJhdG9yKEMpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlY2ltYWxTZXBhcmF0b3JTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpZ2l0KEMpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpZ2l0U3RyaW5ncyhbTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4cG9uZW50TXVsdGlwbGljYXRpb25TaWduKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXhwb25lbnRTZXBhcmF0b3IoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcm91cGluZ1NlcGFyYXRvcihDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcm91cGluZ1NlcGFyYXRvclN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5maW5pdHkoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlcm5hdGlvbmFsQ3VycmVuY3lTeW1ib2woTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNaW51c1NpZ24oQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWludXNTaWduU3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNb25ldGFyeURlY2ltYWxTZXBhcmF0b3IoQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TW9uZXRhcnlEZWNpbWFsU2VwYXJhdG9yU3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNb25ldGFyeUdyb3VwaW5nU2VwYXJhdG9yKEMpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1vbmV0YXJ5R3JvdXBpbmdTZXBhcmF0b3JTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5hTihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhZEVzY2FwZShDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXR0ZXJuRm9yQ3VycmVuY3lTcGFjaW5nKElaTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXR0ZXJuU2VwYXJhdG9yKEMpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBlck1pbGwoQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGVyTWlsbFN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGVyY2VudChDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQZXJjZW50U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQbHVzU2lnbihDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQbHVzU2lnblN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2lnbmlmaWNhbnREaWdpdChDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRaZXJvRGlnaXQoQylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVVJSRU5DWV9TUENfQ1VSUkVOQ1lfTUFUQ0giLz4KLQkJPGZpZWxkIG5hbWU9IkNVUlJFTkNZX1NQQ19JTlNFUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkNVUlJFTkNZX1NQQ19TVVJST1VORElOR19NQVRDSCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvRGlzcGxheUNvbnRleHQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idHlwZSgpTGFuZHJvaWQvaWN1L3RleHQvRGlzcGxheUNvbnRleHQkVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L0Rpc3BsYXlDb250ZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2ljdS90ZXh0L0Rpc3BsYXlDb250ZXh0OyIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQSVRBTElaQVRJT05fRk9SX0JFR0lOTklOR19PRl9TRU5URU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQSVRBTElaQVRJT05fRk9SX01JRERMRV9PRl9TRU5URU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQSVRBTElaQVRJT05fRk9SX1NUQU5EQUxPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUElUQUxJWkFUSU9OX0ZPUl9VSV9MSVNUX09SX01FTlUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUElUQUxJWkFUSU9OX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkRJQUxFQ1RfTkFNRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkxFTkdUSF9GVUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5HVEhfU0hPUlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX1NVQlNUSVRVVEUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBTkRBUkRfTkFNRVMiLz4KLQkJPGZpZWxkIG5hbWU9IlNVQlNUSVRVVEUiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvRGlzcGxheUNvbnRleHQkVHlwZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9EaXNwbGF5Q29udGV4dCRUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2ljdS90ZXh0L0Rpc3BsYXlDb250ZXh0JFR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBJVEFMSVpBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRElBTEVDVF9IQU5ETElORyIvPgotCQk8ZmllbGQgbmFtZT0iRElTUExBWV9MRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9IlNVQlNUSVRVVEVfSEFORExJTkciIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvSUROQSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgZGVwcmVjYXRlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVVFM0Nkluc3RhbmNlKEkpTGFuZHJvaWQvaWN1L3RleHQvSUROQTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYWJlbFRvQVNDSUkoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyO0xhbmRyb2lkL2ljdS90ZXh0L0lETkEkSW5mbzspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxhYmVsVG9Vbmljb2RlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjtMYW5kcm9pZC9pY3UvdGV4dC9JRE5BJEluZm87KUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuYW1lVG9BU0NJSShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7TGFuZHJvaWQvaWN1L3RleHQvSUROQSRJbmZvOylMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmFtZVRvVW5pY29kZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7TGFuZHJvaWQvaWN1L3RleHQvSUROQSRJbmZvOylMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEVDS19CSURJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEVDS19DT05URVhUSiIvPgotCQk8ZmllbGQgbmFtZT0iQ0hFQ0tfQ09OVEVYVE8iLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PTlRSQU5TSVRJT05BTF9UT19BU0NJSSIvPgotCQk8ZmllbGQgbmFtZT0iTk9OVFJBTlNJVElPTkFMX1RPX1VOSUNPREUiLz4KLQkJPGZpZWxkIG5hbWU9IlVTRV9TVEQzX1JVTEVTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9JRE5BJEVycm9yIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L0lETkEkRXJyb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvaWN1L3RleHQvSUROQSRFcnJvcjsiLz4KLQkJPGZpZWxkIG5hbWU9IkJJREkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFWFRKIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URVhUT19ESUdJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFWFRPX1BVTkNUVUFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJET01BSU5fTkFNRV9UT09fTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iRU1QVFlfTEFCRUwiLz4KLQkJPGZpZWxkIG5hbWU9IkhZUEhFTl8zXzQiLz4KLQkJPGZpZWxkIG5hbWU9IklOVkFMSURfQUNFX0xBQkVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQUJFTF9IQVNfRE9UIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQUJFTF9UT09fTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iTEVBRElOR19DT01CSU5JTkdfTUFSSyIvPgotCQk8ZmllbGQgbmFtZT0iTEVBRElOR19IWVBIRU4iLz4KLQkJPGZpZWxkIG5hbWU9IlBVTllDT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFJTElOR19IWVBIRU4iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0lETkEkSW5mbyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVycm9ycygpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRXJyb3JzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUcmFuc2l0aW9uYWxEaWZmZXJlbnQoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0xpc3RGb3JtYXR0ZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiIGRlcHJlY2F0ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL3V0aWwvQ29sbGVjdGlvbjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KFtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxhbmRyb2lkL2ljdS90ZXh0L0xpc3RGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvTGlzdEZvcm1hdHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvTGlzdEZvcm1hdHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXR0ZXJuRm9yTnVtSXRlbXMoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0xvY2FsZURpc3BsYXlOYW1lcyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgZGVwcmVjYXRlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZXh0KExhbmRyb2lkL2ljdS90ZXh0L0Rpc3BsYXlDb250ZXh0JFR5cGU7KUxhbmRyb2lkL2ljdS90ZXh0L0Rpc3BsYXlDb250ZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpYWxlY3RIYW5kbGluZygpTGFuZHJvaWQvaWN1L3RleHQvTG9jYWxlRGlzcGxheU5hbWVzJERpYWxlY3RIYW5kbGluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9Mb2NhbGVEaXNwbGF5TmFtZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtMYW5kcm9pZC9pY3UvdGV4dC9Mb2NhbGVEaXNwbGF5TmFtZXMkRGlhbGVjdEhhbmRsaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9Mb2NhbGVEaXNwbGF5TmFtZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtbTGFuZHJvaWQvaWN1L3RleHQvRGlzcGxheUNvbnRleHQ7KUxhbmRyb2lkL2ljdS90ZXh0L0xvY2FsZURpc3BsYXlOYW1lczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvTG9jYWxlRGlzcGxheU5hbWVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL3V0aWwvTG9jYWxlO1tMYW5kcm9pZC9pY3UvdGV4dC9EaXNwbGF5Q29udGV4dDspTGFuZHJvaWQvaWN1L3RleHQvTG9jYWxlRGlzcGxheU5hbWVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsZSgpTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVaUxpc3QoTGphdmEvdXRpbC9TZXQ7WkxqYXZhL3V0aWwvQ29tcGFyYXRvcjspTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VWlMaXN0Q29tcGFyZVdob2xlSXRlbXMoTGphdmEvdXRpbC9TZXQ7TGphdmEvdXRpbC9Db21wYXJhdG9yOylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJrZXlEaXNwbGF5TmFtZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5VmFsdWVEaXNwbGF5TmFtZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibGFuZ3VhZ2VEaXNwbGF5TmFtZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9jYWxlRGlzcGxheU5hbWUoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9jYWxlRGlzcGxheU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvY2FsZURpc3BsYXlOYW1lKExqYXZhL3V0aWwvTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpb25EaXNwbGF5TmFtZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2NyaXB0RGlzcGxheU5hbWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY3JpcHREaXNwbGF5TmFtZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFyaWFudERpc3BsYXlOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0xvY2FsZURpc3BsYXlOYW1lcyREaWFsZWN0SGFuZGxpbmciIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvTG9jYWxlRGlzcGxheU5hbWVzJERpYWxlY3RIYW5kbGluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9pY3UvdGV4dC9Mb2NhbGVEaXNwbGF5TmFtZXMkRGlhbGVjdEhhbmRsaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iRElBTEVDVF9OQU1FUyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBTkRBUkRfTkFNRVMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0xvY2FsZURpc3BsYXlOYW1lcyRVaUxpc3RJdGVtIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7TGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBhcmF0b3IoTGphdmEvdXRpbC9Db21wYXJhdG9yO1opTGphdmEvdXRpbC9Db21wYXJhdG9yOyIvPgotCQk8ZmllbGQgbmFtZT0ibWluaW1pemVkIi8+Ci0JCTxmaWVsZCBuYW1lPSJtb2RpZmllZCIvPgotCQk8ZmllbGQgbmFtZT0ibmFtZUluRGlzcGxheUxvY2FsZSIvPgotCQk8ZmllbGQgbmFtZT0ibmFtZUluU2VsZiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvTWVhc3VyZUZvcm1hdCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9VRm9ybWF0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlO0xhbmRyb2lkL2ljdS90ZXh0L01lYXN1cmVGb3JtYXQkRm9ybWF0V2lkdGg7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdE1lYXN1cmVQZXJVbml0KExhbmRyb2lkL2ljdS91dGlsL01lYXN1cmU7TGFuZHJvaWQvaWN1L3V0aWwvTWVhc3VyZVVuaXQ7TGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyO0xqYXZhL3RleHQvRmllbGRQb3NpdGlvbjspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0TWVhc3VyZXMoTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyO0xqYXZhL3RleHQvRmllbGRQb3NpdGlvbjtbTGFuZHJvaWQvaWN1L3V0aWwvTWVhc3VyZTspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdE1lYXN1cmVzKFtMYW5kcm9pZC9pY3UvdXRpbC9NZWFzdXJlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW5jeUZvcm1hdCgpTGFuZHJvaWQvaWN1L3RleHQvTWVhc3VyZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW5jeUZvcm1hdChMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9NZWFzdXJlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbmN5Rm9ybWF0KExqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9NZWFzdXJlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7TGFuZHJvaWQvaWN1L3RleHQvTWVhc3VyZUZvcm1hdCRGb3JtYXRXaWR0aDspTGFuZHJvaWQvaWN1L3RleHQvTWVhc3VyZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlO0xhbmRyb2lkL2ljdS90ZXh0L01lYXN1cmVGb3JtYXQkRm9ybWF0V2lkdGg7TGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0OylMYW5kcm9pZC9pY3UvdGV4dC9NZWFzdXJlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL3V0aWwvTG9jYWxlO0xhbmRyb2lkL2ljdS90ZXh0L01lYXN1cmVGb3JtYXQkRm9ybWF0V2lkdGg7KUxhbmRyb2lkL2ljdS90ZXh0L01lYXN1cmVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7TGFuZHJvaWQvaWN1L3RleHQvTWVhc3VyZUZvcm1hdCRGb3JtYXRXaWR0aDtMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7KUxhbmRyb2lkL2ljdS90ZXh0L01lYXN1cmVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxlKClMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE51bWJlckZvcm1hdCgpTGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVuaXREaXNwbGF5TmFtZShMYW5kcm9pZC9pY3UvdXRpbC9NZWFzdXJlVW5pdDspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaWR0aCgpTGFuZHJvaWQvaWN1L3RleHQvTWVhc3VyZUZvcm1hdCRGb3JtYXRXaWR0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZU9iamVjdChMamF2YS9sYW5nL1N0cmluZztMamF2YS90ZXh0L1BhcnNlUG9zaXRpb247KUxhbmRyb2lkL2ljdS91dGlsL01lYXN1cmU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9NZWFzdXJlRm9ybWF0JEZvcm1hdFdpZHRoIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L01lYXN1cmVGb3JtYXQkRm9ybWF0V2lkdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvaWN1L3RleHQvTWVhc3VyZUZvcm1hdCRGb3JtYXRXaWR0aDsiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BUlJPVyIvPgotCQk8ZmllbGQgbmFtZT0iTlVNRVJJQyIvPgotCQk8ZmllbGQgbmFtZT0iU0hPUlQiLz4KLQkJPGZpZWxkIG5hbWU9IldJREUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VGb3JtYXQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvVUZvcm1hdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlQYXR0ZXJuKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlQYXR0ZXJuKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VQYXR0ZXJuJEFwb3N0cm9waGVNb2RlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXV0b1F1b3RlQXBvc3Ryb3BoZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTWFwOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXQoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXQoTGphdmEvdXRpbC9NYXA7TGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7TGphdmEvdGV4dC9GaWVsZFBvc2l0aW9uOylMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXQoW0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvU3RyaW5nQnVmZmVyO0xqYXZhL3RleHQvRmllbGRQb3NpdGlvbjspTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBvc3Ryb3BoZU1vZGUoKUxhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VQYXR0ZXJuJEFwb3N0cm9waGVNb2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFyZ3VtZW50TmFtZXMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcm1hdEJ5QXJndW1lbnROYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS90ZXh0L0Zvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JtYXRzKClbTGphdmEvdGV4dC9Gb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9ybWF0c0J5QXJndW1lbnRJbmRleCgpW0xqYXZhL3RleHQvRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsZSgpTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VUxvY2FsZSgpTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL1N0cmluZzspW0xqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3RleHQvUGFyc2VQb3NpdGlvbjspW0xqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlVG9NYXAoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlVG9NYXAoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdGV4dC9QYXJzZVBvc2l0aW9uOylMamF2YS91dGlsL01hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb3JtYXQoSUxqYXZhL3RleHQvRm9ybWF0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9ybWF0QnlBcmd1bWVudEluZGV4KElMamF2YS90ZXh0L0Zvcm1hdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvcm1hdEJ5QXJndW1lbnROYW1lKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3RleHQvRm9ybWF0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9ybWF0cyhbTGphdmEvdGV4dC9Gb3JtYXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb3JtYXRzQnlBcmd1bWVudEluZGV4KFtMamF2YS90ZXh0L0Zvcm1hdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvcm1hdHNCeUFyZ3VtZW50TmFtZShMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvY2FsZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9jYWxlKExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9QYXR0ZXJuKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1c2VzTmFtZWRBcmd1bWVudHMoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VGb3JtYXQkRmllbGQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdGV4dC9Gb3JtYXQkRmllbGQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFSR1VNRU5UIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9NZXNzYWdlUGF0dGVybiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0ZyZWV6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VQYXR0ZXJuJEFwb3N0cm9waGVNb2RlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXV0b1F1b3RlQXBvc3Ryb3BoZURlZXAoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJQYXR0ZXJuQW5kU2V0QXBvc3Ryb3BoZU1vZGUoTGFuZHJvaWQvaWN1L3RleHQvTWVzc2FnZVBhdHRlcm4kQXBvc3Ryb3BoZU1vZGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZUFzVGhhd2VkKClMYW5kcm9pZC9pY3UvdGV4dC9NZXNzYWdlUGF0dGVybjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3VudFBhcnRzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZnJlZXplKClMYW5kcm9pZC9pY3UvdGV4dC9NZXNzYWdlUGF0dGVybjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcG9zdHJvcGhlTW9kZSgpTGFuZHJvaWQvaWN1L3RleHQvTWVzc2FnZVBhdHRlcm4kQXBvc3Ryb3BoZU1vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGltaXRQYXJ0SW5kZXgoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtZXJpY1ZhbHVlKExhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VQYXR0ZXJuJFBhcnQ7KUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJ0KEkpTGFuZHJvaWQvaWN1L3RleHQvTWVzc2FnZVBhdHRlcm4kUGFydDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJ0VHlwZShJKUxhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VQYXR0ZXJuJFBhcnQkVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXR0ZXJuSW5kZXgoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGF0dGVyblN0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGx1cmFsT2Zmc2V0KEkpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YnN0cmluZyhMYW5kcm9pZC9pY3UvdGV4dC9NZXNzYWdlUGF0dGVybiRQYXJ0OylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNOYW1lZEFyZ3VtZW50cygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc051bWJlcmVkQXJndW1lbnRzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VQYXR0ZXJuOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlQ2hvaWNlU3R5bGUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VQYXR0ZXJuOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlUGx1cmFsU3R5bGUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VQYXR0ZXJuOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlU2VsZWN0U3R5bGUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VQYXR0ZXJuOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnRTdWJzdHJpbmdNYXRjaGVzKExhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VQYXR0ZXJuJFBhcnQ7TGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWxpZGF0ZUFyZ3VtZW50TmFtZShMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8ZmllbGQgbmFtZT0iQVJHX05BTUVfTk9UX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iQVJHX05BTUVfTk9UX1ZBTElEIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19OVU1FUklDX1ZBTFVFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9NZXNzYWdlUGF0dGVybiRBcG9zdHJvcGhlTW9kZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9NZXNzYWdlUGF0dGVybiRBcG9zdHJvcGhlTW9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9pY3UvdGV4dC9NZXNzYWdlUGF0dGVybiRBcG9zdHJvcGhlTW9kZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkRPVUJMRV9PUFRJT05BTCIvPgotCQk8ZmllbGQgbmFtZT0iRE9VQkxFX1JFUVVJUkVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9NZXNzYWdlUGF0dGVybiRBcmdUeXBlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1BsdXJhbFN0eWxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvTWVzc2FnZVBhdHRlcm4kQXJnVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9pY3UvdGV4dC9NZXNzYWdlUGF0dGVybiRBcmdUeXBlOyIvPgotCQk8ZmllbGQgbmFtZT0iQ0hPSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJQTFVSQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTEVDVCIvPgotCQk8ZmllbGQgbmFtZT0iU0VMRUNUT1JESU5BTCIvPgotCQk8ZmllbGQgbmFtZT0iU0lNUExFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9NZXNzYWdlUGF0dGVybiRQYXJ0IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdGV4dC9NZXNzYWdlUGF0dGVybiRQYXJ0JFR5cGU7SUlJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFyZ1R5cGUoKUxhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VQYXR0ZXJuJEFyZ1R5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW1pdCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUxhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VQYXR0ZXJuJFBhcnQkVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvTWVzc2FnZVBhdHRlcm4kUGFydCRUeXBlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc051bWVyaWNWYWx1ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L01lc3NhZ2VQYXR0ZXJuJFBhcnQkVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9pY3UvdGV4dC9NZXNzYWdlUGF0dGVybiRQYXJ0JFR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfRE9VQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfTElNSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkFSR19OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfU0VMRUNUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkFSR19TVEFSVCIvPgotCQk8ZmllbGQgbmFtZT0iQVJHX1NUWUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iSU5TRVJUX0NIQVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1TR19MSU1JVCIvPgotCQk8ZmllbGQgbmFtZT0iTVNHX1NUQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVBMQUNFX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iU0tJUF9TWU5UQVgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L05vcm1hbGl6ZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmUoSUlJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlKElMamF2YS9sYW5nL1N0cmluZztJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmUoW0NJSVtDSUlJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlKFtDW0NJKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBBUkVfQ09ERV9QT0lOVF9PUkRFUiIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUEFSRV9JR05PUkVfQ0FTRSIvPgotCQk8ZmllbGQgbmFtZT0iRk9MRF9DQVNFX0RFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IkZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSSIvPgotCQk8ZmllbGQgbmFtZT0iSU5QVVRfSVNfRkNEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVlCRSIvPgotCQk8ZmllbGQgbmFtZT0iTk8iLz4KLQkJPGZpZWxkIG5hbWU9IllFUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvTm9ybWFsaXplciRRdWlja0NoZWNrUmVzdWx0IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIyOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvTm9ybWFsaXplcjIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIGRlcHJlY2F0ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKExqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBvc2VQYWlyKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21iaW5pbmdDbGFzcyhJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWNvbXBvc2l0aW9uKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvaW8vSW5wdXRTdHJlYW07TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvaWN1L3RleHQvTm9ybWFsaXplcjIkTW9kZTspTGFuZHJvaWQvaWN1L3RleHQvTm9ybWFsaXplcjI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TkZDSW5zdGFuY2UoKUxhbmRyb2lkL2ljdS90ZXh0L05vcm1hbGl6ZXIyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5GREluc3RhbmNlKClMYW5kcm9pZC9pY3UvdGV4dC9Ob3JtYWxpemVyMjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRORktDQ2FzZWZvbGRJbnN0YW5jZSgpTGFuZHJvaWQvaWN1L3RleHQvTm9ybWFsaXplcjI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TkZLQ0luc3RhbmNlKClMYW5kcm9pZC9pY3UvdGV4dC9Ob3JtYWxpemVyMjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRORktESW5zdGFuY2UoKUxhbmRyb2lkL2ljdS90ZXh0L05vcm1hbGl6ZXIyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJhd0RlY29tcG9zaXRpb24oSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNCb3VuZGFyeUFmdGVyKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0JvdW5kYXJ5QmVmb3JlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5lcnQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOb3JtYWxpemVkKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm9ybWFsaXplKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3JtYWxpemUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9BcHBlbmRhYmxlOylMamF2YS9sYW5nL0FwcGVuZGFibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm9ybWFsaXplKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vcm1hbGl6ZVNlY29uZEFuZEFwcGVuZChMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWlja0NoZWNrKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9pY3UvdGV4dC9Ob3JtYWxpemVyJFF1aWNrQ2hlY2tSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BhblF1aWNrQ2hlY2tZZXMoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L05vcm1hbGl6ZXIyJE1vZGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvTm9ybWFsaXplcjIkTW9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9pY3UvdGV4dC9Ob3JtYWxpemVyMiRNb2RlOyIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUE9TRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUE9TRV9DT05USUdVT1VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUNPTVBPU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkZDRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1VGb3JtYXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXQoRClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXQoRExqYXZhL2xhbmcvU3RyaW5nQnVmZmVyO0xqYXZhL3RleHQvRmllbGRQb3NpdGlvbjspTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KEopTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KEpMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjtMamF2YS90ZXh0L0ZpZWxkUG9zaXRpb247KUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXQoTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDtMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjtMamF2YS90ZXh0L0ZpZWxkUG9zaXRpb247KUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMYW5kcm9pZC9pY3UvdXRpbC9DdXJyZW5jeUFtb3VudDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExhbmRyb2lkL2ljdS91dGlsL0N1cnJlbmN5QW1vdW50O0xqYXZhL2xhbmcvU3RyaW5nQnVmZmVyO0xqYXZhL3RleHQvRmllbGRQb3NpdGlvbjspTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL21hdGgvQmlnRGVjaW1hbDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL21hdGgvQmlnRGVjaW1hbDtMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjtMamF2YS90ZXh0L0ZpZWxkUG9zaXRpb247KUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS9tYXRoL0JpZ0ludGVnZXI7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7TGphdmEvdGV4dC9GaWVsZFBvc2l0aW9uOylMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVMb2NhbGVzKClbTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGV4dChMYW5kcm9pZC9pY3UvdGV4dC9EaXNwbGF5Q29udGV4dCRUeXBlOylMYW5kcm9pZC9pY3UvdGV4dC9EaXNwbGF5Q29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW5jeSgpTGFuZHJvaWQvaWN1L3V0aWwvQ3VycmVuY3k7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVuY3lJbnN0YW5jZSgpTGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbmN5SW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbmN5SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L051bWJlckZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKEkpTGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L051bWJlckZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlO0kpTGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7SSlMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZWdlckluc3RhbmNlKClMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZWdlckluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L051bWJlckZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlZ2VySW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L051bWJlckZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhpbXVtSW50ZWdlckRpZ2l0cygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbmltdW1GcmFjdGlvbkRpZ2l0cygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbmltdW1JbnRlZ2VyRGlnaXRzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtYmVySW5zdGFuY2UoKUxhbmRyb2lkL2ljdS90ZXh0L051bWJlckZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1iZXJJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtYmVySW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L051bWJlckZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXR0ZXJuKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7SSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJjZW50SW5zdGFuY2UoKUxhbmRyb2lkL2ljdS90ZXh0L051bWJlckZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJjZW50SW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlcmNlbnRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvdW5kaW5nTW9kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjaWVudGlmaWNJbnN0YW5jZSgpTGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjaWVudGlmaWNJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NpZW50aWZpY0luc3RhbmNlKExqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNHcm91cGluZ1VzZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1BhcnNlSW50ZWdlck9ubHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1BhcnNlU3RyaWN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvTnVtYmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3RleHQvUGFyc2VQb3NpdGlvbjspTGphdmEvbGFuZy9OdW1iZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VDdXJyZW5jeShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS90ZXh0L1BhcnNlUG9zaXRpb247KUxhbmRyb2lkL2ljdS91dGlsL0N1cnJlbmN5QW1vdW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRleHQoTGFuZHJvaWQvaWN1L3RleHQvRGlzcGxheUNvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXJyZW5jeShMYW5kcm9pZC9pY3UvdXRpbC9DdXJyZW5jeTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyb3VwaW5nVXNlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4aW11bUludGVnZXJEaWdpdHMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWluaW11bUZyYWN0aW9uRGlnaXRzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhcnNlSW50ZWdlck9ubHkoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyc2VTdHJpY3QoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Um91bmRpbmdNb2RlKEkpViIvPgotCQk8ZmllbGQgbmFtZT0iQUNDT1VOVElOR0NVUlJFTkNZU1RZTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBU0hDVVJSRU5DWVNUWUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVVJSRU5DWVNUWUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGUkFDVElPTl9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iSU5URUdFUlNUWUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFR0VSX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09DVVJSRU5DWVNUWUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVU1CRVJTVFlMRSIvPgotCQk8ZmllbGQgbmFtZT0iUEVSQ0VOVFNUWUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQTFVSQUxDVVJSRU5DWVNUWUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0lFTlRJRklDU1RZTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQU5EQVJEQ1VSUkVOQ1lTVFlMRSIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQkRmllbGQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdGV4dC9Gb3JtYXQkRmllbGQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNVUlJFTkNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUNJTUFMX1NFUEFSQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRVhQT05FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYUE9ORU5UX1NJR04iLz4KLQkJPGZpZWxkIG5hbWU9IkVYUE9ORU5UX1NZTUJPTCIvPgotCQk8ZmllbGQgbmFtZT0iRlJBQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdST1VQSU5HX1NFUEFSQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iSU5URUdFUiIvPgotCQk8ZmllbGQgbmFtZT0iUEVSQ0VOVCIvPgotCQk8ZmllbGQgbmFtZT0iUEVSTUlMTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L051bWJlcmluZ1N5c3RlbSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZU5hbWVzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJpbmdTeXN0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoSVpMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyaW5nU3lzdGVtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L051bWJlcmluZ1N5c3RlbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyaW5nU3lzdGVtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlQnlOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJpbmdTeXN0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmFkaXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FsZ29yaXRobWljKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYWxpZERpZ2l0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9QbHVyYWxGb3JtYXQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvVUZvcm1hdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdGV4dC9QbHVyYWxSdWxlczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdGV4dC9QbHVyYWxSdWxlcztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7TGFuZHJvaWQvaWN1L3RleHQvUGx1cmFsUnVsZXMkUGx1cmFsVHlwZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlO0xhbmRyb2lkL2ljdS90ZXh0L1BsdXJhbFJ1bGVzJFBsdXJhbFR5cGU7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtMYW5kcm9pZC9pY3UvdGV4dC9QbHVyYWxSdWxlczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlO0xhbmRyb2lkL2ljdS90ZXh0L1BsdXJhbFJ1bGVzO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Mb2NhbGU7TGFuZHJvaWQvaWN1L3RleHQvUGx1cmFsUnVsZXMkUGx1cmFsVHlwZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xvY2FsZTtMYW5kcm9pZC9pY3UvdGV4dC9QbHVyYWxSdWxlczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5UGF0dGVybihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVxdWFscyhMYW5kcm9pZC9pY3UvdGV4dC9QbHVyYWxGb3JtYXQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXQoRClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL1N0cmluZztMamF2YS90ZXh0L1BhcnNlUG9zaXRpb247KUxqYXZhL2xhbmcvTnVtYmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE51bWJlckZvcm1hdChMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1BhdHRlcm4oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvUGx1cmFsUnVsZXMiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVSdWxlcyhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvUGx1cmFsUnVsZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXF1YWxzKExhbmRyb2lkL2ljdS90ZXh0L1BsdXJhbFJ1bGVzOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yTG9jYWxlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L1BsdXJhbFJ1bGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckxvY2FsZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlO0xhbmRyb2lkL2ljdS90ZXh0L1BsdXJhbFJ1bGVzJFBsdXJhbFR5cGU7KUxhbmRyb2lkL2ljdS90ZXh0L1BsdXJhbFJ1bGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckxvY2FsZShMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvUGx1cmFsUnVsZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yTG9jYWxlKExqYXZhL3V0aWwvTG9jYWxlO0xhbmRyb2lkL2ljdS90ZXh0L1BsdXJhbFJ1bGVzJFBsdXJhbFR5cGU7KUxhbmRyb2lkL2ljdS90ZXh0L1BsdXJhbFJ1bGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbEtleXdvcmRWYWx1ZXMoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXl3b3JkcygpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2FtcGxlcyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVuaXF1ZUtleXdvcmRWYWx1ZShMamF2YS9sYW5nL1N0cmluZzspRCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlRGVzY3JpcHRpb24oTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L1BsdXJhbFJ1bGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9InNlbGVjdChEKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZV09SRF9GRVciLz4KLQkJPGZpZWxkIG5hbWU9IktFWVdPUkRfTUFOWSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZV09SRF9PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IktFWVdPUkRfT1RIRVIiLz4KLQkJPGZpZWxkIG5hbWU9IktFWVdPUkRfVFdPIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlXT1JEX1pFUk8iLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX1VOSVFVRV9WQUxVRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvUGx1cmFsUnVsZXMkUGx1cmFsVHlwZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9QbHVyYWxSdWxlcyRQbHVyYWxUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2ljdS90ZXh0L1BsdXJhbFJ1bGVzJFBsdXJhbFR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVJESU5BTCIvPgotCQk8ZmllbGQgbmFtZT0iT1JESU5BTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9FbnVtTWFwO0xqYXZhL3V0aWwvRW51bU1hcDtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdGV4dC9QbHVyYWxSdWxlcztMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7TGFuZHJvaWQvaWN1L3RleHQvUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciRTdHlsZTtMYW5kcm9pZC9pY3UvdGV4dC9EaXNwbGF5Q29udGV4dDtMYW5kcm9pZC9pY3UvdGV4dC9CcmVha0l0ZXJhdG9yO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbWJpbmVEYXRlQW5kVGltZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KERMYW5kcm9pZC9pY3UvdGV4dC9SZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyJERpcmVjdGlvbjtMYW5kcm9pZC9pY3UvdGV4dC9SZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyJFJlbGF0aXZlVW5pdDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KERMYW5kcm9pZC9pY3UvdGV4dC9SZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyJFJlbGF0aXZlRGF0ZVRpbWVVbml0OylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMYW5kcm9pZC9pY3UvdGV4dC9SZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyJERpcmVjdGlvbjtMYW5kcm9pZC9pY3UvdGV4dC9SZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyJEFic29sdXRlVW5pdDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0TnVtZXJpYyhETGFuZHJvaWQvaWN1L3RleHQvUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciRSZWxhdGl2ZURhdGVUaW1lVW5pdDspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYXBpdGFsaXphdGlvbkNvbnRleHQoKUxhbmRyb2lkL2ljdS90ZXh0L0Rpc3BsYXlDb250ZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcm1hdFN0eWxlKClMYW5kcm9pZC9pY3UvdGV4dC9SZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyJFN0eWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMYW5kcm9pZC9pY3UvdGV4dC9SZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L1JlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7KUxhbmRyb2lkL2ljdS90ZXh0L1JlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7TGFuZHJvaWQvaWN1L3RleHQvUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciRTdHlsZTtMYW5kcm9pZC9pY3UvdGV4dC9EaXNwbGF5Q29udGV4dDspTGFuZHJvaWQvaWN1L3RleHQvUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTtMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7KUxhbmRyb2lkL2ljdS90ZXh0L1JlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtYmVyRm9ybWF0KClMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9SZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyJEFic29sdXRlVW5pdCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9SZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyJEFic29sdXRlVW5pdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9pY3UvdGV4dC9SZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyJEFic29sdXRlVW5pdDsiLz4KLQkJPGZpZWxkIG5hbWU9IkRBWSIvPgotCQk8ZmllbGQgbmFtZT0iRlJJREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05EQVkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTlRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1ciLz4KLQkJPGZpZWxkIG5hbWU9IlNBVFVSREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVU5EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IlRIVVJTREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJUVUVTREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRURORVNEQVkiLz4KLQkJPGZpZWxkIG5hbWU9IldFRUsiLz4KLQkJPGZpZWxkIG5hbWU9IllFQVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1JlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIkRGlyZWN0aW9uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L1JlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIkRGlyZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2ljdS90ZXh0L1JlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIkRGlyZWN0aW9uOyIvPgotCQk8ZmllbGQgbmFtZT0iTEFTVCIvPgotCQk8ZmllbGQgbmFtZT0iTEFTVF8yIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVhUXzIiLz4KLQkJPGZpZWxkIG5hbWU9IlBMQUlOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSElTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9SZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyJFJlbGF0aXZlRGF0ZVRpbWVVbml0IiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L1JlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIkUmVsYXRpdmVEYXRlVGltZVVuaXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvaWN1L3RleHQvUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciRSZWxhdGl2ZURhdGVUaW1lVW5pdDsiLz4KLQkJPGZpZWxkIG5hbWU9IkRBWSIvPgotCQk8ZmllbGQgbmFtZT0iRlJJREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5VVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTkRBWSIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEgiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQVJURVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNBVFVSREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNPTkQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVTkRBWSIvPgotCQk8ZmllbGQgbmFtZT0iVEhVUlNEQVkiLz4KLQkJPGZpZWxkIG5hbWU9IlRVRVNEQVkiLz4KLQkJPGZpZWxkIG5hbWU9IldFRE5FU0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iV0VFSyIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciRSZWxhdGl2ZVVuaXQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciRSZWxhdGl2ZVVuaXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvaWN1L3RleHQvUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciRSZWxhdGl2ZVVuaXQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEQVlTIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1VSUyIvPgotCQk8ZmllbGQgbmFtZT0iTUlOVVRFUyIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEhTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNPTkRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUVLUyIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUlMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1JlbGF0aXZlRGF0ZVRpbWVGb3JtYXR0ZXIkU3R5bGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvUmVsYXRpdmVEYXRlVGltZUZvcm1hdHRlciRTdHlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9pY3UvdGV4dC9SZWxhdGl2ZURhdGVUaW1lRm9ybWF0dGVyJFN0eWxlOyIvPgotCQk8ZmllbGQgbmFtZT0iTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iTkFSUk9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9SVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvUmVwbGFjZWFibGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFyMzJBdChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFyQXQoSSlDIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weShJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJzKElJW0NJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNNZXRhRGF0YSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imxlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2UoSUlMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2UoSUlbQ0lJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1J1bGVCYXNlZENvbGxhdG9yIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L0NvbGxhdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmVBc1RoYXdlZCgpTGFuZHJvaWQvaWN1L3RleHQvUnVsZUJhc2VkQ29sbGF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKExhbmRyb2lkL2ljdS90ZXh0L1VDaGFyYWN0ZXJJdGVyYXRvcjspTGFuZHJvaWQvaWN1L3RleHQvQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcihMamF2YS90ZXh0L0NoYXJhY3Rlckl0ZXJhdG9yOylMYW5kcm9pZC9pY3UvdGV4dC9Db2xsYXRpb25FbGVtZW50SXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udHJhY3Rpb25zQW5kRXhwYW5zaW9ucyhMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0O0xhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtZXJpY0NvbGxhdGlvbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJ1bGVzKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSdWxlcyhaKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDYXNlTGV2ZWwoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZyZW5jaENvbGxhdGlvbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG93ZXJDYXNlRmlyc3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VwcGVyQ2FzZUZpcnN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWx0ZXJuYXRlSGFuZGxpbmdEZWZhdWx0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWx0ZXJuYXRlSGFuZGxpbmdTaGlmdGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhc2VGaXJzdERlZmF1bHQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYXNlTGV2ZWwoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FzZUxldmVsRGVmYXVsdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlY29tcG9zaXRpb25EZWZhdWx0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RnJlbmNoQ29sbGF0aW9uKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZyZW5jaENvbGxhdGlvbkRlZmF1bHQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb3dlckNhc2VGaXJzdChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhWYXJpYWJsZShJKUxhbmRyb2lkL2ljdS90ZXh0L1J1bGVCYXNlZENvbGxhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE51bWVyaWNDb2xsYXRpb24oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TnVtZXJpY0NvbGxhdGlvbkRlZmF1bHQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdHJlbmd0aERlZmF1bHQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVcHBlckNhc2VGaXJzdChaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1NjaWVudGlmaWNOdW1iZXJGb3JtYXR0ZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXQoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hcmt1cEluc3RhbmNlKExhbmRyb2lkL2ljdS90ZXh0L0RlY2ltYWxGb3JtYXQ7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L1NjaWVudGlmaWNOdW1iZXJGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFya3VwSW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvU2NpZW50aWZpY051bWJlckZvcm1hdHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBlcnNjcmlwdEluc3RhbmNlKExhbmRyb2lkL2ljdS90ZXh0L0RlY2ltYWxGb3JtYXQ7KUxhbmRyb2lkL2ljdS90ZXh0L1NjaWVudGlmaWNOdW1iZXJGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VwZXJzY3JpcHRJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9TY2llbnRpZmljTnVtYmVyRm9ybWF0dGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvU2VhcmNoSXRlcmF0b3IiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdGV4dC9DaGFyYWN0ZXJJdGVyYXRvcjtMYW5kcm9pZC9pY3UvdGV4dC9CcmVha0l0ZXJhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlyc3QoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb2xsb3dpbmcoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnJlYWtJdGVyYXRvcigpTGFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbGVtZW50Q29tcGFyaXNvblR5cGUoKUxhbmRyb2lkL2ljdS90ZXh0L1NlYXJjaEl0ZXJhdG9yJEVsZW1lbnRDb21wYXJpc29uVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hdGNoTGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF0Y2hTdGFydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hdGNoZWRUZXh0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYXJnZXQoKUxqYXZhL3RleHQvQ2hhcmFjdGVySXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlTmV4dChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVQcmV2aW91cyhJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc092ZXJsYXBwaW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGFzdCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmVjZWRpbmcoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJldmlvdXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJyZWFrSXRlcmF0b3IoTGFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVsZW1lbnRDb21wYXJpc29uVHlwZShMYW5kcm9pZC9pY3UvdGV4dC9TZWFyY2hJdGVyYXRvciRFbGVtZW50Q29tcGFyaXNvblR5cGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbmRleChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXRjaExlbmd0aChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdmVybGFwcGluZyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUYXJnZXQoTGphdmEvdGV4dC9DaGFyYWN0ZXJJdGVyYXRvcjspViIvPgotCQk8ZmllbGQgbmFtZT0iRE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iYnJlYWtJdGVyYXRvciIvPgotCQk8ZmllbGQgbmFtZT0ibWF0Y2hMZW5ndGgiLz4KLQkJPGZpZWxkIG5hbWU9InRhcmdldFRleHQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1NlYXJjaEl0ZXJhdG9yJEVsZW1lbnRDb21wYXJpc29uVHlwZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9TZWFyY2hJdGVyYXRvciRFbGVtZW50Q29tcGFyaXNvblR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvaWN1L3RleHQvU2VhcmNoSXRlcmF0b3IkRWxlbWVudENvbXBhcmlzb25UeXBlOyIvPgotCQk8ZmllbGQgbmFtZT0iQU5ZX0JBU0VfV0VJR0hUX0lTX1dJTERDQVJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVRURVJOX0JBU0VfV0VJR0hUX0lTX1dJTERDQVJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFOREFSRF9FTEVNRU5UX0NPTVBBUklTT04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1NlbGVjdEZvcm1hdCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS90ZXh0L0Zvcm1hdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5UGF0dGVybihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9QYXR0ZXJuKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1NpbXBsZURhdGVGb3JtYXQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0U3ltYm9sczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseUxvY2FsaXplZFBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseVBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQyRGlnaXRZZWFyU3RhcnQoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlRm9ybWF0U3ltYm9scygpTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdFN5bWJvbHM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtYmVyRm9ybWF0KEMpTGFuZHJvaWQvaWN1L3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5bWJvbHMoKUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXRTeW1ib2xzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVab25lRm9ybWF0KClMYW5kcm9pZC9pY3UvdGV4dC9UaW1lWm9uZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaFF1YXJ0ZXJTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7SUlbTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaFN0cmluZyhMamF2YS9sYW5nL1N0cmluZztJSVtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhcjspSSIvPgotCQk8bWV0aG9kIG5hbWU9InBhdHRlcm5DaGFyVG9EYXRlRm9ybWF0RmllbGQoQylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0JEZpZWxkOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldDJEaWdpdFllYXJTdGFydChMamF2YS91dGlsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRlRm9ybWF0U3ltYm9scyhMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0U3ltYm9sczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE51bWJlckZvcm1hdChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdGV4dC9OdW1iZXJGb3JtYXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaW1lWm9uZUZvcm1hdChMYW5kcm9pZC9pY3UvdGV4dC9UaW1lWm9uZUZvcm1hdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InN1YkZvcm1hdChDSUlMamF2YS90ZXh0L0ZpZWxkUG9zaXRpb247TGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdFN5bWJvbHM7TGFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXI7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InN1YlBhcnNlKExqYXZhL2xhbmcvU3RyaW5nO0lDSVpaW1pMYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhcjspSSIvPgotCQk8bWV0aG9kIG5hbWU9InRvTG9jYWxpemVkUGF0dGVybigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9QYXR0ZXJuKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ6ZXJvUGFkZGluZ051bWJlcihKSUkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9TdHJpbmdQcmVwUGFyc2VFeGNlcHRpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdGV4dC9QYXJzZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVycm9yKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0VfUFJFRklYX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJCVUZGRVJfT1ZFUkZMT1dfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkNIRUNLX0JJRElfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkRPTUFJTl9OQU1FX1RPT19MT05HX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTExFR0FMX0NIQVJfRk9VTkQiLz4KLQkJPGZpZWxkIG5hbWU9IklOVkFMSURfQ0hBUl9GT1VORCIvPgotCQk8ZmllbGQgbmFtZT0iTEFCRUxfVE9PX0xPTkdfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlBST0hJQklURURfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNURDNfQVNDSUlfUlVMRVNfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlVOQVNTSUdORURfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlZFUklGSUNBVElPTl9FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iWkVST19MRU5HVEhfTEFCRUwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1N0cmluZ1NlYXJjaCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9TZWFyY2hJdGVyYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS90ZXh0L0NoYXJhY3Rlckl0ZXJhdG9yO0xhbmRyb2lkL2ljdS90ZXh0L1J1bGVCYXNlZENvbGxhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3RleHQvQ2hhcmFjdGVySXRlcmF0b3I7TGFuZHJvaWQvaWN1L3RleHQvUnVsZUJhc2VkQ29sbGF0b3I7TGFuZHJvaWQvaWN1L3RleHQvQnJlYWtJdGVyYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS90ZXh0L0NoYXJhY3Rlckl0ZXJhdG9yO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdGV4dC9DaGFyYWN0ZXJJdGVyYXRvcjtMamF2YS91dGlsL0xvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbGxhdG9yKClMYW5kcm9pZC9pY3UvdGV4dC9SdWxlQmFzZWRDb2xsYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXR0ZXJuKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nhbm9uaWNhbCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbm9uaWNhbChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2xsYXRvcihMYW5kcm9pZC9pY3UvdGV4dC9SdWxlQmFzZWRDb2xsYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1N5bWJvbFRhYmxlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9va3VwKExqYXZhL2xhbmcvU3RyaW5nOylbQyIvPgotCQk8bWV0aG9kIG5hbWU9Imxvb2t1cE1hdGNoZXIoSSlMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlTWF0Y2hlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZVJlZmVyZW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS90ZXh0L1BhcnNlUG9zaXRpb247SSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTUJPTF9SRUYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lRm9ybWF0IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1VGb3JtYXQiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9GcmVlemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lQXNUaGF3ZWQoKUxhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMYW5kcm9pZC9pY3UvdGV4dC9UaW1lWm9uZUZvcm1hdCRTdHlsZTtMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTtKKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMYW5kcm9pZC9pY3UvdGV4dC9UaW1lWm9uZUZvcm1hdCRTdHlsZTtMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTtKTGFuZHJvaWQvaWN1L3V0aWwvT3V0cHV0OylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRPZmZzZXRJU084NjAxQmFzaWMoSVpaWilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRPZmZzZXRJU084NjAxRXh0ZW5kZWQoSVpaWilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRPZmZzZXRMb2NhbGl6ZWRHTVQoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRPZmZzZXRTaG9ydExvY2FsaXplZEdNVChJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZyZWV6ZSgpTGFuZHJvaWQvaWN1L3RleHQvVGltZVpvbmVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFBhcnNlT3B0aW9ucygpTGphdmEvdXRpbC9FbnVtU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdNVE9mZnNldERpZ2l0cygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R01UT2Zmc2V0UGF0dGVybihMYW5kcm9pZC9pY3UvdGV4dC9UaW1lWm9uZUZvcm1hdCRHTVRPZmZzZXRQYXR0ZXJuVHlwZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R01UUGF0dGVybigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R01UWmVyb0Zvcm1hdCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvVGltZVpvbmVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVab25lTmFtZXMoKUxhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lTmFtZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGFuZHJvaWQvaWN1L3RleHQvVGltZVpvbmVGb3JtYXQkU3R5bGU7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdGV4dC9QYXJzZVBvc2l0aW9uO0xhbmRyb2lkL2ljdS91dGlsL091dHB1dDspTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGFuZHJvaWQvaWN1L3RleHQvVGltZVpvbmVGb3JtYXQkU3R5bGU7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdGV4dC9QYXJzZVBvc2l0aW9uO0xqYXZhL3V0aWwvRW51bVNldDtMYW5kcm9pZC9pY3UvdXRpbC9PdXRwdXQ7KUxhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL1N0cmluZztMamF2YS90ZXh0L1BhcnNlUG9zaXRpb247KUxhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlT2Zmc2V0SVNPODYwMShMamF2YS9sYW5nL1N0cmluZztMamF2YS90ZXh0L1BhcnNlUG9zaXRpb247KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZU9mZnNldExvY2FsaXplZEdNVChMamF2YS9sYW5nL1N0cmluZztMamF2YS90ZXh0L1BhcnNlUG9zaXRpb247KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZU9mZnNldFNob3J0TG9jYWxpemVkR01UKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3RleHQvUGFyc2VQb3NpdGlvbjspSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHRQYXJzZU9wdGlvbnMoTGphdmEvdXRpbC9FbnVtU2V0OylMYW5kcm9pZC9pY3UvdGV4dC9UaW1lWm9uZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHTVRPZmZzZXREaWdpdHMoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdNVE9mZnNldFBhdHRlcm4oTGFuZHJvaWQvaWN1L3RleHQvVGltZVpvbmVGb3JtYXQkR01UT2Zmc2V0UGF0dGVyblR5cGU7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdNVFBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdNVFplcm9Gb3JtYXQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVab25lTmFtZXMoTGFuZHJvaWQvaWN1L3RleHQvVGltZVpvbmVOYW1lczspTGFuZHJvaWQvaWN1L3RleHQvVGltZVpvbmVGb3JtYXQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9UaW1lWm9uZUZvcm1hdCRHTVRPZmZzZXRQYXR0ZXJuVHlwZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9UaW1lWm9uZUZvcm1hdCRHTVRPZmZzZXRQYXR0ZXJuVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9pY3UvdGV4dC9UaW1lWm9uZUZvcm1hdCRHTVRPZmZzZXRQYXR0ZXJuVHlwZTsiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FR0FUSVZFX0giLz4KLQkJPGZpZWxkIG5hbWU9Ik5FR0FUSVZFX0hNIi8+Ci0JCTxmaWVsZCBuYW1lPSJORUdBVElWRV9ITVMiLz4KLQkJPGZpZWxkIG5hbWU9IlBPU0lUSVZFX0giLz4KLQkJPGZpZWxkIG5hbWU9IlBPU0lUSVZFX0hNIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT1NJVElWRV9ITVMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lRm9ybWF0JFBhcnNlT3B0aW9uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lRm9ybWF0JFBhcnNlT3B0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lRm9ybWF0JFBhcnNlT3B0aW9uOyIvPgotCQk8ZmllbGQgbmFtZT0iQUxMX1NUWUxFUyIvPgotCQk8ZmllbGQgbmFtZT0iVFpfREFUQUJBU0VfQUJCUkVWSUFUSU9OUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvVGltZVpvbmVGb3JtYXQkU3R5bGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvVGltZVpvbmVGb3JtYXQkU3R5bGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvaWN1L3RleHQvVGltZVpvbmVGb3JtYXQkU3R5bGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWEVNUExBUl9MT0NBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0VORVJJQ19MT0NBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0VORVJJQ19MT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRU5FUklDX1NIT1JUIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQkFTSUNfRklYRUQiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19CQVNJQ19GVUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQkFTSUNfTE9DQUxfRklYRUQiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19CQVNJQ19MT0NBTF9GVUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQkFTSUNfTE9DQUxfU0hPUlQiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19CQVNJQ19TSE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0VYVEVOREVEX0ZJWEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fRVhURU5ERURfRlVMTCIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0VYVEVOREVEX0xPQ0FMX0ZJWEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fRVhURU5ERURfTE9DQUxfRlVMTCIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQUxJWkVEX0dNVCIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQUxJWkVEX0dNVF9TSE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iU1BFQ0lGSUNfTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iU1BFQ0lGSUNfU0hPUlQiLz4KLQkJPGZpZWxkIG5hbWU9IlpPTkVfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlpPTkVfSURfU0hPUlQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lRm9ybWF0JFRpbWVUeXBlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lRm9ybWF0JFRpbWVUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lRm9ybWF0JFRpbWVUeXBlOyIvPgotCQk8ZmllbGQgbmFtZT0iREFZTElHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQU5EQVJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9UaW1lWm9uZU5hbWVzIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZhaWxhYmxlTWV0YVpvbmVJRHMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZU1ldGFab25lSURzKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TmFtZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdGV4dC9UaW1lWm9uZU5hbWVzJE5hbWVUeXBlO0opTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhlbXBsYXJMb2NhdGlvbk5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lTmFtZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lTmFtZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0YVpvbmVEaXNwbGF5TmFtZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdGV4dC9UaW1lWm9uZU5hbWVzJE5hbWVUeXBlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXRhWm9uZUlEKExqYXZhL2xhbmcvU3RyaW5nO0opTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVmZXJlbmNlWm9uZUlEKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUWkRCSW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvVGltZVpvbmVOYW1lczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lWm9uZURpc3BsYXlOYW1lKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lTmFtZXMkTmFtZVR5cGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvVGltZVpvbmVOYW1lcyROYW1lVHlwZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9UaW1lWm9uZU5hbWVzJE5hbWVUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2ljdS90ZXh0L1RpbWVab25lTmFtZXMkTmFtZVR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWEVNUExBUl9MT0NBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iTE9OR19EQVlMSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iTE9OR19HRU5FUklDIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT05HX1NUQU5EQVJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9SVF9EQVlMSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iU0hPUlRfR0VORVJJQyIvPgotCQk8ZmllbGQgbmFtZT0iU0hPUlRfU1RBTkRBUkQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1VDaGFyYWN0ZXJJdGVyYXRvciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3VycmVudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImN1cnJlbnRDb2RlUG9pbnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyYWN0ZXJJdGVyYXRvcigpTGphdmEvdGV4dC9DaGFyYWN0ZXJJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS90ZXh0L1JlcGxhY2VhYmxlOylMYW5kcm9pZC9pY3UvdGV4dC9VQ2hhcmFjdGVySXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L1VDaGFyYWN0ZXJJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjspTGFuZHJvaWQvaWN1L3RleHQvVUNoYXJhY3Rlckl0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL3RleHQvQ2hhcmFjdGVySXRlcmF0b3I7KUxhbmRyb2lkL2ljdS90ZXh0L1VDaGFyYWN0ZXJJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShbQylMYW5kcm9pZC9pY3UvdGV4dC9VQ2hhcmFjdGVySXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoW0NJSSlMYW5kcm9pZC9pY3UvdGV4dC9VQ2hhcmFjdGVySXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dChbQylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dChbQ0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1vdmVDb2RlUG9pbnRJbmRleChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtb3ZlSW5kZXgoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRDb2RlUG9pbnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmV2aW91cygpSSIvPgotCQk8bWV0aG9kIG5hbWU9InByZXZpb3VzQ29kZVBvaW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5kZXgoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VG9MaW1pdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRvU3RhcnQoKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRPTkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1VGb3JtYXQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdGV4dC9Gb3JtYXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVGaWx0ZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlTWF0Y2hlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgZGVwcmVjYXRlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWlucyhJKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVNYXRjaGVyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTWF0Y2hTZXRUbyhMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF0Y2hlcyhMYW5kcm9pZC9pY3UvdGV4dC9SZXBsYWNlYWJsZTtbSUlaKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaGVzSW5kZXhWYWx1ZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1BhdHRlcm4oWilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkVUSEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJVX01BVENIIi8+Ci0JCTxmaWVsZCBuYW1lPSJVX01JU01BVENIIi8+Ci0JCTxmaWVsZCBuYW1lPSJVX1BBUlRJQUxfTUFUQ0giLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvVW5pY29kZUZpbHRlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0ZyZWV6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvSXRlcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS90ZXh0L1BhcnNlUG9zaXRpb247TGFuZHJvaWQvaWN1L3RleHQvU3ltYm9sVGFibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdGV4dC9QYXJzZVBvc2l0aW9uO0xhbmRyb2lkL2ljdS90ZXh0L1N5bWJvbFRhYmxlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0kpViIvPgotCQk8bWV0aG9kIG5hbWU9Il9nZW5lcmF0ZVBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7WilMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJfZ2VuZXJhdGVQYXR0ZXJuKExqYXZhL2xhbmcvU3RyaW5nQnVmZmVyO1paKUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChJKUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKElJKUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMamF2YS9sYW5nL0l0ZXJhYmxlOylMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFsbChJSSlMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFsbChMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OylMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFsbChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBbGwoTGphdmEvbGFuZy9JdGVyYWJsZTspTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBbGwoW0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFsbFRvKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5SW50UHJvcGVydHlWYWx1ZShJSSlMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5UGF0dGVybihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseVBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmc7SSlMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5UGF0dGVybihMamF2YS9sYW5nL1N0cmluZztaKUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlQcm9wZXJ0eUFsaWFzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5UHJvcGVydHlBbGlhcyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdGV4dC9TeW1ib2xUYWJsZTspTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFyQXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmVBc1RoYXdlZCgpTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZU92ZXIoSSlMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhY3QoKUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDtMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0JENvbXBhcmlzb25TdHlsZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS9sYW5nL0l0ZXJhYmxlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGxlbWVudCgpTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wbGVtZW50KEkpTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wbGVtZW50KElJKUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGxlbWVudChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wbGVtZW50QWxsKExhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7KUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGxlbWVudEFsbChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWlucyhJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnMoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWluc0FsbChMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnNBbGwoTGphdmEvbGFuZy9JdGVyYWJsZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zQWxsKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnNOb25lKElJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWluc05vbmUoTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zTm9uZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zTm9uZShMamF2YS9sYW5nL0l0ZXJhYmxlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnNTb21lKElJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWluc1NvbWUoTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zU29tZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zU29tZShMamF2YS9sYW5nL0l0ZXJhYmxlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZnJlZXplKClMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb20oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbUFsbChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSYW5nZUNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmFuZ2VFbmQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmFuZ2VTdGFydChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmRleE9mKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW1wdHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyYW5nZXMoKUxqYXZhL2xhbmcvSXRlcmFibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlKEkpTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmUoSUkpTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQWxsKExhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7KUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQWxsKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUFsbChMamF2YS9sYW5nL0l0ZXJhYmxlOylMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUFsbFN0cmluZ3MoKUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmV0YWluKEkpTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXRhaW4oSUkpTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXRhaW4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmV0YWluQWxsKExhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7KUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmV0YWluQWxsKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJldGFpbkFsbChMamF2YS9sYW5nL0l0ZXJhYmxlOylMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldChJSSlMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldChMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OylMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGFuKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0JFNwYW5Db25kaXRpb247KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGFuKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQkU3BhbkNvbmRpdGlvbjspSSIvPgotCQk8bWV0aG9kIG5hbWU9InNwYW5CYWNrKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0JFNwYW5Db25kaXRpb247KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGFuQmFjayhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0JFNwYW5Db25kaXRpb247KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdHJpbmdzKClMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBRERfQ0FTRV9NQVBQSU5HUyIvPgotCQk8ZmllbGQgbmFtZT0iQUxMX0NPREVfUE9JTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVNFX0lOU0VOU0lUSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTVBUWSIvPgotCQk8ZmllbGQgbmFtZT0iSUdOT1JFX1NQQUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9WQUxVRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldCRDb21wYXJpc29uU3R5bGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldCRDb21wYXJpc29uU3R5bGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldCRDb21wYXJpc29uU3R5bGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMRVhJQ09HUkFQSElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT05HRVJfRklSU1QiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JURVJfRklSU1QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQkRW50cnlSYW5nZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iY29kZXBvaW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb2RlcG9pbnRFbmQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQkU3BhbkNvbmRpdGlvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0JFNwYW5Db25kaXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldCRTcGFuQ29uZGl0aW9uOyIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORElUSU9OX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UQUlORUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PVF9DT05UQUlORUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNJTVBMRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldEl0ZXJhdG9yIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0UmFuZ2UoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KExhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQ7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IklTX1NUUklORyIvPgotCQk8ZmllbGQgbmFtZT0iY29kZXBvaW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjb2RlcG9pbnRFbmQiLz4KLQkJPGZpZWxkIG5hbWU9InN0cmluZyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldFNwYW5uZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvdW50SW4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3VudEluKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXRTcGFubmVyJENvdW50TWV0aG9kOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY291bnRJbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0U3Bhbm5lciRDb3VudE1ldGhvZDtMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0JFNwYW5Db25kaXRpb247KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVGcm9tKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVGcm9tKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQkU3BhbkNvbmRpdGlvbjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5pY29kZVNldCgpTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBsYWNlRnJvbShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZUZyb20oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldFNwYW5uZXIkQ291bnRNZXRob2Q7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2VGcm9tKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXRTcGFubmVyJENvdW50TWV0aG9kO0xhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXQkU3BhbkNvbmRpdGlvbjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJpbShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJpbShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0U3Bhbm5lciRUcmltT3B0aW9uOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmltKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXRTcGFubmVyJFRyaW1PcHRpb247TGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldCRTcGFuQ29uZGl0aW9uOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXRTcGFubmVyJENvdW50TWV0aG9kIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXRTcGFubmVyJENvdW50TWV0aG9kOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXRTcGFubmVyJENvdW50TWV0aG9kOyIvPgotCQk8ZmllbGQgbmFtZT0iTUlOX0VMRU1FTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSE9MRV9TUEFOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdGV4dC9Vbmljb2RlU2V0U3Bhbm5lciRUcmltT3B0aW9uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS90ZXh0L1VuaWNvZGVTZXRTcGFubmVyJFRyaW1PcHRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvaWN1L3RleHQvVW5pY29kZVNldFNwYW5uZXIkVHJpbU9wdGlvbjsiLz4KLQkJPGZpZWxkIG5hbWU9IkJPVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkxFQURJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlRSQUlMSU5HIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9CdWRkaGlzdENhbGVuZGFyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmU7TGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkJFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9DRUNhbGVuZGFyIiBzaW5jZT0iMjQiIHJlbW92ZWQ9IjI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTtMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lO0xqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9EYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmU7TGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFmdGVyKExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmVmb3JlKExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wbGV0ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXB1dGVGaWVsZHMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlR3JlZ29yaWFuRmllbGRzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXB1dGVHcmVnb3JpYW5Nb250aFN0YXJ0KElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlSnVsaWFuRGF5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcHV0ZU1pbGxpc0luRGF5KClJIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXB1dGVUaW1lKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcHV0ZVpvbmVPZmZzZXQoSkkpSSIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWVsZERpZmZlcmVuY2UoTGphdmEvdXRpbC9EYXRlO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZpZWxkTmFtZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZsb29yRGl2aWRlKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbG9vckRpdmlkZShJSVtJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbG9vckRpdmlkZShKSVtJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbG9vckRpdmlkZShKSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdHVhbE1heGltdW0oSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0dWFsTWluaW11bShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVMb2NhbGVzKClbTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZVRpbWVGb3JtYXQoSUlMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGVUaW1lRm9ybWF0KElJTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpZWxkQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWVsZFJlc29sdXRpb25UYWJsZSgpW1tbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpcnN0RGF5T2ZXZWVrKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3JlYXRlc3RNaW5pbXVtKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyZWdvcmlhbkRheU9mTW9udGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcmVnb3JpYW5EYXlPZlllYXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcmVnb3JpYW5Nb250aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyZWdvcmlhblllYXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmU7KUxhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lO0xqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5d29yZFZhbHVlc0ZvckxvY2FsZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlO1opW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExlYXN0TWF4aW11bShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW1pdChJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4aW11bShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluaW11bShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXBlYXRlZFdhbGxUaW1lT3B0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2tpcHBlZFdhbGxUaW1lT3B0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhbXAoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZSgpTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVJbk1pbGxpcygpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVab25lKClMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWVrRGF0YSgpTGFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXIkV2Vla0RhdGE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2Vla0RhdGFGb3JSZWdpb24oTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyJFdlZWtEYXRhOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdyZWdvcmlhbk1vbnRoTGVuZ3RoKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJncmVnb3JpYW5QcmV2aW91c01vbnRoTGVuZ3RoKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVDb21wdXRlRmllbGRzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZUNvbXB1dGVKdWxpYW5EYXkoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlQ29tcHV0ZU1vbnRoU3RhcnQoSUlaKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVDcmVhdGVGaWVsZHMoKVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlR2V0RGF0ZUZvcm1hdChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZUdldERhdGVGb3JtYXQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL2ljdS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlR2V0RGF0ZUZvcm1hdChMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVHZXRFeHRlbmRlZFllYXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVHZXRMaW1pdChJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlR2V0TW9udGhMZW5ndGgoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZUdldFllYXJMZW5ndGgoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW50ZXJuYWxHZXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW50ZXJuYWxHZXQoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImludGVybmFsR2V0VGltZUluTWlsbGlzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW50ZXJuYWxTZXQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRXF1aXZhbGVudFRvKExhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNHcmVnb3JpYW5MZWFwWWVhcihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xlbmllbnQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NldChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1dlZWtlbmQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1dlZWtlbmQoTGphdmEvdXRpbC9EYXRlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ianVsaWFuRGF5VG9EYXlPZldlZWsoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ianVsaWFuRGF5VG9NaWxsaXMoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWlsbGlzVG9KdWxpYW5EYXkoSilJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3ZXJGaWVsZChJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3ZXN0U3RhbXAoSUlJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwaW5GaWVsZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmVwYXJlR2V0QWN0dWFsKElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlRmllbGRzKFtbW0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJvbGwoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InJvbGwoSVopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoSUlJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaXJzdERheU9mV2VlayhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMZW5pZW50KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVwZWF0ZWRXYWxsVGltZU9wdGlvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTa2lwcGVkV2FsbFRpbWVPcHRpb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZShMamF2YS91dGlsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaW1lSW5NaWxsaXMoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZVpvbmUoTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXZWVrRGF0YShMYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhciRXZWVrRGF0YTspTGFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsaWRhdGVGaWVsZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWxpZGF0ZUZpZWxkKElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsaWRhdGVGaWVsZHMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3ZWVrTnVtYmVyKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3ZWVrTnVtYmVyKElJSSlJIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTSIvPgotCQk8ZmllbGQgbmFtZT0iQU1fUE0iLz4KLQkJPGZpZWxkIG5hbWU9IkFQUklMIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVUdVU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkJBU0VfRklFTERfQ09VTlQiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVlfT0ZfTU9OVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkRBWV9PRl9XRUVLIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVlfT0ZfV0VFS19JTl9NT05USCIvPgotCQk8ZmllbGQgbmFtZT0iREFZX09GX1lFQVIiLz4KLQkJPGZpZWxkIG5hbWU9IkRFQ0VNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJET1dfTE9DQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkRTVF9PRkZTRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVQT0NIX0pVTElBTl9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkVSQSIvPgotCQk8ZmllbGQgbmFtZT0iRVhURU5ERURfWUVBUiIvPgotCQk8ZmllbGQgbmFtZT0iRkVCUlVBUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkZSSURBWSIvPgotCQk8ZmllbGQgbmFtZT0iR1JFQVRFU1RfTUlOSU1VTSIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUiIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUl9PRl9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSTkFMTFlfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU19MRUFQX01PTlRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJKQU5VQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJKQU5fMV8xX0pVTElBTl9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkpVTElBTl9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkpVTFkiLz4KLQkJPGZpZWxkIG5hbWU9IkpVTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkxFQVNUX01BWElNVU0iLz4KLQkJPGZpZWxkIG5hbWU9Ik1BUkNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhJTVVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfREFURSIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX0ZJRUxEX0NPVU5UIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX0pVTElBTiIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX01JTExJUyIvPgotCQk8ZmllbGQgbmFtZT0iTUFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUxMSVNFQ09ORCIvPgotCQk8ZmllbGQgbmFtZT0iTUlMTElTRUNPTkRTX0lOX0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iTUlOSU1VTSIvPgotCQk8ZmllbGQgbmFtZT0iTUlOSU1VTV9VU0VSX1NUQU1QIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5VVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9EQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fSlVMSUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fTUlMTElTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05EQVkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTlRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1ZFTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iT0NUT0JFUiIvPgotCQk8ZmllbGQgbmFtZT0iT05FX0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iT05FX0hPVVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9ORV9NSU5VVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9ORV9TRUNPTkQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9ORV9XRUVLIi8+Ci0JCTxmaWVsZCBuYW1lPSJQTSIvPgotCQk8ZmllbGQgbmFtZT0iUkVTT0xWRV9SRU1BUCIvPgotCQk8ZmllbGQgbmFtZT0iU0FUVVJEQVkiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQ09ORCIvPgotCQk8ZmllbGQgbmFtZT0iU0VQVEVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVU5EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IlRIVVJTREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJUVUVTREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTkRFQ0lNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTlNFVCIvPgotCQk8ZmllbGQgbmFtZT0iV0FMTFRJTUVfRklSU1QiLz4KLQkJPGZpZWxkIG5hbWU9IldBTExUSU1FX0xBU1QiLz4KLQkJPGZpZWxkIG5hbWU9IldBTExUSU1FX05FWFRfVkFMSUQiLz4KLQkJPGZpZWxkIG5hbWU9IldFRE5FU0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS19PRl9NT05USCIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS19PRl9ZRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJZRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJZRUFSX1dPWSIvPgotCQk8ZmllbGQgbmFtZT0iWk9ORV9PRkZTRVQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyJFdlZWtEYXRhIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJmaXJzdERheU9mV2VlayIvPgotCQk8ZmllbGQgbmFtZT0ibWluaW1hbERheXNJbkZpcnN0V2VlayIvPgotCQk8ZmllbGQgbmFtZT0id2Vla2VuZENlYXNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3ZWVrZW5kQ2Vhc2VNaWxsaXMiLz4KLQkJPGZpZWxkIG5hbWU9IndlZWtlbmRPbnNldCIvPgotCQk8ZmllbGQgbmFtZT0id2Vla2VuZE9uc2V0TWlsbGlzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9DaGluZXNlQ2FsZW5kYXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmU7TGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTtMamF2YS91dGlsL0xvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvRGF0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZUdldERhdGVGb3JtYXQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0NvcHRpY0NhbGVuZGFyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0NFQ2FsZW5kYXIiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXIiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTtMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lO0xqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9EYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTVNISVIiLz4KLQkJPGZpZWxkIG5hbWU9IkJBQkEiLz4KLQkJPGZpZWxkIG5hbWU9IkJBUkFNSEFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVJBTU9VREEiLz4KLQkJPGZpZWxkIG5hbWU9IkJBU0hBTlMiLz4KLQkJPGZpZWxkIG5hbWU9IkVQRVAiLz4KLQkJPGZpZWxkIG5hbWU9IkhBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSUFISyIvPgotCQk8ZmllbGQgbmFtZT0iTUVTUkEiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BU0lFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQU9OQSIvPgotCQk8ZmllbGQgbmFtZT0iVE9CQSIvPgotCQk8ZmllbGQgbmFtZT0iVE9VVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvQ3VycmVuY3kiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvTWVhc3VyZVVuaXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVDdXJyZW5jaWVzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVDdXJyZW5jeUNvZGVzKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7TGphdmEvdXRpbC9EYXRlOylbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZhaWxhYmxlQ3VycmVuY3lDb2RlcyhMamF2YS91dGlsL0xvY2FsZTtMamF2YS91dGlsL0RhdGU7KVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVMb2NhbGVzKClbTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZhaWxhYmxlVUxvY2FsZXMoKVtMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbmN5Q29kZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdEZyYWN0aW9uRGlnaXRzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdEZyYWN0aW9uRGlnaXRzKExhbmRyb2lkL2ljdS91dGlsL0N1cnJlbmN5JEN1cnJlbmN5VXNhZ2U7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS91dGlsL0N1cnJlbmN5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdXRpbC9DdXJyZW5jeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3V0aWwvQ3VycmVuY3k7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5d29yZFZhbHVlc0ZvckxvY2FsZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlO1opW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtJTGphdmEvbGFuZy9TdHJpbmc7W1opTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlO0lbWilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKExqYXZhL3V0aWwvTG9jYWxlO0lMamF2YS9sYW5nL1N0cmluZztbWilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKExqYXZhL3V0aWwvTG9jYWxlO0lbWilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1lcmljQ29kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvdW5kaW5nSW5jcmVtZW50KClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um91bmRpbmdJbmNyZW1lbnQoTGFuZHJvaWQvaWN1L3V0aWwvQ3VycmVuY3kkQ3VycmVuY3lVc2FnZTspRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5bWJvbCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3ltYm9sKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5bWJvbChMamF2YS91dGlsL0xvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBdmFpbGFibGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9EYXRlO0xqYXZhL3V0aWwvRGF0ZTspWiIvPgotCQk8ZmllbGQgbmFtZT0iTE9OR19OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJQTFVSQUxfTE9OR19OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWU1CT0xfTkFNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvQ3VycmVuY3kkQ3VycmVuY3lVc2FnZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdXRpbC9DdXJyZW5jeSRDdXJyZW5jeVVzYWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2ljdS91dGlsL0N1cnJlbmN5JEN1cnJlbmN5VXNhZ2U7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFOREFSRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvQ3VycmVuY3lBbW91bnQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvTWVhc3VyZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihETGFuZHJvaWQvaWN1L3V0aWwvQ3VycmVuY3k7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9OdW1iZXI7TGFuZHJvaWQvaWN1L3V0aWwvQ3VycmVuY3k7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW5jeSgpTGFuZHJvaWQvaWN1L3V0aWwvQ3VycmVuY3k7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9EYXRlSW50ZXJ2YWwiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkopViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyb21EYXRlKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9EYXRlKClKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9FdGhpb3BpY0NhbGVuZGFyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0NFQ2FsZW5kYXIiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvQ2FsZW5kYXIiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTtMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lO0xqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9EYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBbWV0ZUFsZW1FcmEoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbWV0ZUFsZW1FcmEoWilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRU5CT1QiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRURBUiIvPgotCQk8ZmllbGQgbmFtZT0iTUVHQUJJVCIvPgotCQk8ZmllbGQgbmFtZT0iTUVTS0VSRU0iLz4KLQkJPGZpZWxkIG5hbWU9Ik1JQVpJQSIvPgotCQk8ZmllbGQgbmFtZT0iTkVIQVNTRSIvPgotCQk8ZmllbGQgbmFtZT0iUEFHVU1FTiIvPgotCQk8ZmllbGQgbmFtZT0iU0VORSIvPgotCQk8ZmllbGQgbmFtZT0iVEFIU0FTIi8+Ci0JCTxmaWVsZCBuYW1lPSJURUtFTVQiLz4KLQkJPGZpZWxkIG5hbWU9IlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iWUVLQVRJVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvRnJlZXphYmxlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZUFzVGhhd2VkKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcmVlemUoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRnJvemVuKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9HcmVnb3JpYW5DYWxlbmRhciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmU7TGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyZWdvcmlhbkNoYW5nZSgpTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTGVhcFllYXIoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R3JlZ29yaWFuQ2hhbmdlKExqYXZhL3V0aWwvRGF0ZTspViIvPgotCQk8ZmllbGQgbmFtZT0iQUQiLz4KLQkJPGZpZWxkIG5hbWU9IkJDIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbnZlcnRHcmVnb3JpYW4iLz4KLQkJPGZpZWxkIG5hbWU9ImlzR3JlZ29yaWFuIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9IZWJyZXdDYWxlbmRhciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTtMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lO0xqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9EYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBREFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJBREFSXzEiLz4KLQkJPGZpZWxkIG5hbWU9IkFWIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTFVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRVNIVkFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJJWUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSVNMRVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5JU0FOIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSEVWQVQiLz4KLQkJPGZpZWxkIG5hbWU9IlNJVkFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQU1VWiIvPgotCQk8ZmllbGQgbmFtZT0iVEVWRVQiLz4KLQkJPGZpZWxkIG5hbWU9IlRJU0hSSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvSUNVVW5jaGVja2VkSU9FeGNlcHRpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9JbGxmb3JtZWRMb2NhbGVFeGNlcHRpb24iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVycm9ySW5kZXgoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0luZGlhbkNhbGVuZGFyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0NhbGVuZGFyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmU7TGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFHUkFIQVlBTkEiLz4KLQkJPGZpZWxkIG5hbWU9IkFTQURIQSIvPgotCQk8ZmllbGQgbmFtZT0iQVNWSU5BIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSEFEUkEiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQUlUUkEiLz4KLQkJPGZpZWxkIG5hbWU9IklFIi8+Ci0JCTxmaWVsZCBuYW1lPSJKWUFJU1RIQSIvPgotCQk8ZmllbGQgbmFtZT0iS0FSVElLQSIvPgotCQk8ZmllbGQgbmFtZT0iTUFHSEEiLz4KLQkJPGZpZWxkIG5hbWU9IlBBVVNBIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSEFMR1VOQSIvPgotCQk8ZmllbGQgbmFtZT0iU1JBVkFOQSIvPgotCQk8ZmllbGQgbmFtZT0iVkFJU0FLSEEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0lzbGFtaWNDYWxlbmRhciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9DYWxlbmRhciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTtMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lO0xqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9EYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FsY3VsYXRpb25UeXBlKClMYW5kcm9pZC9pY3UvdXRpbC9Jc2xhbWljQ2FsZW5kYXIkQ2FsY3VsYXRpb25UeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbGN1bGF0aW9uVHlwZShMYW5kcm9pZC9pY3UvdXRpbC9Jc2xhbWljQ2FsZW5kYXIkQ2FsY3VsYXRpb25UeXBlOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJESFVfQUxfSElKSkFIIi8+Ci0JCTxmaWVsZCBuYW1lPSJESFVfQUxfUUlEQUgiLz4KLQkJPGZpZWxkIG5hbWU9IkpVTUFEQV8xIi8+Ci0JCTxmaWVsZCBuYW1lPSJKVU1BREFfMiIvPgotCQk8ZmllbGQgbmFtZT0iTVVIQVJSQU0iLz4KLQkJPGZpZWxkIG5hbWU9IlJBQklfMSIvPgotCQk8ZmllbGQgbmFtZT0iUkFCSV8yIi8+Ci0JCTxmaWVsZCBuYW1lPSJSQUpBQiIvPgotCQk8ZmllbGQgbmFtZT0iUkFNQURBTiIvPgotCQk8ZmllbGQgbmFtZT0iU0FGQVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNIQUJBTiIvPgotCQk8ZmllbGQgbmFtZT0iU0hBV1dBTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvSXNsYW1pY0NhbGVuZGFyJENhbGN1bGF0aW9uVHlwZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdXRpbC9Jc2xhbWljQ2FsZW5kYXIkQ2FsY3VsYXRpb25UeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2ljdS91dGlsL0lzbGFtaWNDYWxlbmRhciRDYWxjdWxhdGlvblR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJU0xBTUlDIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU0xBTUlDX0NJVklMIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU0xBTUlDX1RCTEEiLz4KLQkJPGZpZWxkIG5hbWU9IklTTEFNSUNfVU1BTFFVUkEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0phcGFuZXNlQ2FsZW5kYXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvR3JlZ29yaWFuQ2FsZW5kYXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmU7TGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNVUlJFTlRfRVJBIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRUlTRUkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FSUpJIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XQSIvPgotCQk8ZmllbGQgbmFtZT0iVEFJU0hPIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9Mb2NhbGVEYXRhIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q0xEUlZlcnNpb24oKUxhbmRyb2lkL2ljdS91dGlsL1ZlcnNpb25JbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlbGltaXRlcihJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMYW5kcm9pZC9pY3UvdXRpbC9Mb2NhbGVEYXRhOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxhbmRyb2lkL2ljdS91dGlsL0xvY2FsZURhdGE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVhc3VyZW1lbnRTeXN0ZW0oTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3V0aWwvTG9jYWxlRGF0YSRNZWFzdXJlbWVudFN5c3RlbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb1N1YnN0aXR1dGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXBlclNpemUoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3V0aWwvTG9jYWxlRGF0YSRQYXBlclNpemU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Tm9TdWJzdGl0dXRlKFopViIvPgotCQk8ZmllbGQgbmFtZT0iQUxUX1FVT1RBVElPTl9FTkQiLz4KLQkJPGZpZWxkIG5hbWU9IkFMVF9RVU9UQVRJT05fU1RBUlQiLz4KLQkJPGZpZWxkIG5hbWU9IlFVT1RBVElPTl9FTkQiLz4KLQkJPGZpZWxkIG5hbWU9IlFVT1RBVElPTl9TVEFSVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvTG9jYWxlRGF0YSRNZWFzdXJlbWVudFN5c3RlbSIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iU0kiLz4KLQkJPGZpZWxkIG5hbWU9IlVLIi8+Ci0JCTxmaWVsZCBuYW1lPSJVUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvTG9jYWxlRGF0YSRQYXBlclNpemUiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpZHRoKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9NZWFzdXJlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvTnVtYmVyO0xhbmRyb2lkL2ljdS91dGlsL01lYXN1cmVVbml0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtYmVyKClMamF2YS9sYW5nL051bWJlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVbml0KClMYW5kcm9pZC9pY3UvdXRpbC9NZWFzdXJlVW5pdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL01lYXN1cmVVbml0IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5IiBkZXByZWNhdGVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZSgpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZhaWxhYmxlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVUeXBlcygpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VidHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1JFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1JFX0ZPT1QiLz4KLQkJPGZpZWxkIG5hbWU9IkFNUEVSRSIvPgotCQk8ZmllbGQgbmFtZT0iQVJDX01JTlVURSIvPgotCQk8ZmllbGQgbmFtZT0iQVJDX1NFQ09ORCIvPgotCQk8ZmllbGQgbmFtZT0iQVNUUk9OT01JQ0FMX1VOSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkJJVCIvPgotCQk8ZmllbGQgbmFtZT0iQlVTSEVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJCWVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxPUklFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVJBVCIvPgotCQk8ZmllbGQgbmFtZT0iQ0VMU0lVUyIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVElMSVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVElNRVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVFVSWSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDVUJJQ19DRU5USU1FVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVUJJQ19GT09UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVUJJQ19JTkNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVUJJQ19LSUxPTUVURVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNVQklDX01FVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVUJJQ19NSUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVUJJQ19ZQVJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVVAiLz4KLQkJPGZpZWxkIG5hbWU9IkNVUF9NRVRSSUMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUNJTElURVIiLz4KLQkJPGZpZWxkIG5hbWU9IkRFQ0lNRVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iREVHUkVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGQUhSRU5IRUlUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGQVRIT00iLz4KLQkJPGZpZWxkIG5hbWU9IkZMVUlEX09VTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT09EQ0FMT1JJRSIvPgotCQk8ZmllbGQgbmFtZT0iRk9PVCIvPgotCQk8ZmllbGQgbmFtZT0iRlVSTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iR0FMTE9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHQUxMT05fSU1QRVJJQUwiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iR0VORVJJQ19URU1QRVJBVFVSRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHSUdBQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHSUdBQllURSIvPgotCQk8ZmllbGQgbmFtZT0iR0lHQUhFUlRaIi8+Ci0JCTxmaWVsZCBuYW1lPSJHSUdBV0FUVCIvPgotCQk8ZmllbGQgbmFtZT0iR1JBTSIvPgotCQk8ZmllbGQgbmFtZT0iR19GT1JDRSIvPgotCQk8ZmllbGQgbmFtZT0iSEVDVEFSRSIvPgotCQk8ZmllbGQgbmFtZT0iSEVDVE9MSVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iSEVDVE9QQVNDQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkhFUlRaIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1JTRVBPV0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTkNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTkNIX0hHIi8+Ci0JCTxmaWVsZCBuYW1lPSJKT1VMRSIvPgotCQk8ZmllbGQgbmFtZT0iS0FSQVQiLz4KLQkJPGZpZWxkIG5hbWU9IktFTFZJTiIvPgotCQk8ZmllbGQgbmFtZT0iS0lMT0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iS0lMT0JZVEUiLz4KLQkJPGZpZWxkIG5hbWU9IktJTE9DQUxPUklFIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSUxPR1JBTSIvPgotCQk8ZmllbGQgbmFtZT0iS0lMT0hFUlRaIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSUxPSk9VTEUiLz4KLQkJPGZpZWxkIG5hbWU9IktJTE9NRVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iS0lMT01FVEVSX1BFUl9IT1VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSUxPV0FUVCIvPgotCQk8ZmllbGQgbmFtZT0iS0lMT1dBVFRfSE9VUiIvPgotCQk8ZmllbGQgbmFtZT0iS05PVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMSUdIVF9ZRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iTElURVJfUEVSXzEwMEtJTE9NRVRFUlMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTElURVJfUEVSX0tJTE9NRVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iTFVYIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUdBQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUdBQllURSIvPgotCQk8ZmllbGQgbmFtZT0iTUVHQUhFUlRaIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUdBTElURVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FR0FXQVRUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iTUVURVJfUEVSX1NFQ09ORCIvPgotCQk8ZmllbGQgbmFtZT0iTUVURVJfUEVSX1NFQ09ORF9TUVVBUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRSSUNfVE9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUNST0dSQU0iLz4KLQkJPGZpZWxkIG5hbWU9Ik1JQ1JPTUVURVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JQ1JPU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUxFX1BFUl9HQUxMT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTEVfUEVSX0dBTExPTl9JTVBFUklBTCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNSUxFX1BFUl9IT1VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUxFX1NDQU5ESU5BVklBTiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNSUxMSUFNUEVSRSIvPgotCQk8ZmllbGQgbmFtZT0iTUlMTElCQVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTExJR1JBTSIvPgotCQk8ZmllbGQgbmFtZT0iTUlMTElHUkFNX1BFUl9ERUNJTElURVIiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTUlMTElMSVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iTUlMTElNRVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iTUlMTElNRVRFUl9PRl9NRVJDVVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUxMSU1PTEVfUEVSX0xJVEVSIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTExJU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUxMSVdBVFQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTlVURSIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEgiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTk9NRVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iTkFOT1NFQ09ORCIvPgotCQk8ZmllbGQgbmFtZT0iTkFVVElDQUxfTUlMRSIvPgotCQk8ZmllbGQgbmFtZT0iT0hNIi8+Ci0JCTxmaWVsZCBuYW1lPSJPVU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iT1VOQ0VfVFJPWSIvPgotCQk8ZmllbGQgbmFtZT0iUEFSU0VDIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJUX1BFUl9NSUxMSU9OIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlBJQ09NRVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iUElOVCIvPgotCQk8ZmllbGQgbmFtZT0iUElOVF9NRVRSSUMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUE9JTlQiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iUE9VTkQiLz4KLQkJPGZpZWxkIG5hbWU9IlBPVU5EX1BFUl9TUVVBUkVfSU5DSCIvPgotCQk8ZmllbGQgbmFtZT0iUVVBUlQiLz4KLQkJPGZpZWxkIG5hbWU9IlJBRElBTiIvPgotCQk8ZmllbGQgbmFtZT0iUkVWT0xVVElPTl9BTkdMRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNPTkQiLz4KLQkJPGZpZWxkIG5hbWU9IlNRVUFSRV9DRU5USU1FVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUVVBUkVfRk9PVCIvPgotCQk8ZmllbGQgbmFtZT0iU1FVQVJFX0lOQ0giLz4KLQkJPGZpZWxkIG5hbWU9IlNRVUFSRV9LSUxPTUVURVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNRVUFSRV9NRVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iU1FVQVJFX01JTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNRVUFSRV9ZQVJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iVEFCTEVTUE9PTiIvPgotCQk8ZmllbGQgbmFtZT0iVEVBU1BPT04iLz4KLQkJPGZpZWxkIG5hbWU9IlRFUkFCSVQiLz4KLQkJPGZpZWxkIG5hbWU9IlRFUkFCWVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT04iLz4KLQkJPGZpZWxkIG5hbWU9IlZPTFQiLz4KLQkJPGZpZWxkIG5hbWU9IldBVFQiLz4KLQkJPGZpZWxkIG5hbWU9IldFRUsiLz4KLQkJPGZpZWxkIG5hbWU9IllBUkQiLz4KLQkJPGZpZWxkIG5hbWU9IllFQVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL091dHB1dCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8ZmllbGQgbmFtZT0idmFsdWUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL1JhbmdlVmFsdWVJdGVyYXRvciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHQoTGFuZHJvaWQvaWN1L3V0aWwvUmFuZ2VWYWx1ZUl0ZXJhdG9yJEVsZW1lbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvUmFuZ2VWYWx1ZUl0ZXJhdG9yJEVsZW1lbnQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImxpbWl0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzdGFydCIvPgotCQk8ZmllbGQgbmFtZT0idmFsdWUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL1RhaXdhbkNhbGVuZGFyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmU7TGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkJFRk9SRV9NSU5HVU8iLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTkdVTyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvVGltZVVuaXQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvTWVhc3VyZVVuaXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9pY3UvdXRpbC9UaW1lVW5pdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvRnJlZXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZUFzVGhhd2VkKClMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3VudEVxdWl2YWxlbnRJRHMoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcmVlemUoKUxhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUlEcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUlEcyhJKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVJRHMoTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmUkU3lzdGVtVGltZVpvbmVUeXBlO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvSW50ZWdlcjspTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZhaWxhYmxlSURzKExqYXZhL2xhbmcvU3RyaW5nOylbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2Fub25pY2FsSUQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbm9uaWNhbElEKExqYXZhL2xhbmcvU3RyaW5nO1taKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERTVFNhdmluZ3MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0KClMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKFpJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKFpJTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoWklMamF2YS91dGlsL0xvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXF1aXZhbGVudElEKExqYXZhL2xhbmcvU3RyaW5nO0kpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJvemVuVGltZVpvbmUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElEKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJREZvcldpbmRvd3NJRChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2Zmc2V0KElJSUlJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2Zmc2V0KEopSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9mZnNldChKWltJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSYXdPZmZzZXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWdpb24oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRaRGF0YVZlcnNpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVab25lKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lWm9uZShMamF2YS9sYW5nL1N0cmluZztJKUxhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpbmRvd3NJRChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzU2FtZVJ1bGVzKExhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5EYXlsaWdodFRpbWUoTGphdmEvdXRpbC9EYXRlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2JzZXJ2ZXNEYXlsaWdodFRpbWUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJRChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJhd09mZnNldChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1c2VEYXlsaWdodFRpbWUoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkdFTkVSSUNfTE9DQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdNVF9aT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT05HX0dFTkVSSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkxPTkdfR01UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iU0hPUlRfQ09NTU9OTFlfVVNFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0hPUlRfR0VORVJJQyIvPgotCQk8ZmllbGQgbmFtZT0iU0hPUlRfR01UIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FWk9ORV9JQ1UiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVpPTkVfSkRLIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlVOS05PV05fWk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iVU5LTk9XTl9aT05FX0lEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9UaW1lWm9uZSRTeXN0ZW1UaW1lWm9uZVR5cGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3V0aWwvVGltZVpvbmUkU3lzdGVtVGltZVpvbmVUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL2ljdS91dGlsL1RpbWVab25lJFN5c3RlbVRpbWVab25lVHlwZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkFOWSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQU5PTklDQUwiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FOT05JQ0FMX0xPQ0FUSU9OIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHRMYW5ndWFnZShMamF2YS9sYW5nL1N0cmluZztbTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtbWilMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdExhbmd1YWdlKExqYXZhL2xhbmcvU3RyaW5nO1taKUxhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjZXB0TGFuZ3VhZ2UoW0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7W0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7W1opTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHRMYW5ndWFnZShbTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTtbWilMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZExpa2VseVN1YnRhZ3MoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5vbmljYWxpemUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ2Fub25pY2FsKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckxhbmd1YWdlVGFnKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckxvY2FsZShMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVMb2NhbGVzKClbTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYXNlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFzZU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJhY3Rlck9yaWVudGF0aW9uKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb3VudHJ5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb3VudHJ5KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0KClMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHQoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZSRDYXRlZ29yeTspTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5Q291bnRyeSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheUNvdW50cnkoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheUNvdW50cnkoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheUNvdW50cnkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlLZXl3b3JkKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5S2V5d29yZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5S2V5d29yZChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheUtleXdvcmRWYWx1ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheUtleXdvcmRWYWx1ZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5S2V5d29yZFZhbHVlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlLZXl3b3JkVmFsdWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlMYW5ndWFnZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheUxhbmd1YWdlKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlMYW5ndWFnZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TGFuZ3VhZ2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlMYW5ndWFnZVdpdGhEaWFsZWN0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TGFuZ3VhZ2VXaXRoRGlhbGVjdChMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TGFuZ3VhZ2VXaXRoRGlhbGVjdChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TGFuZ3VhZ2VXaXRoRGlhbGVjdChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TmFtZVdpdGhEaWFsZWN0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TmFtZVdpdGhEaWFsZWN0KExhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lV2l0aERpYWxlY3QoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWVXaXRoRGlhbGVjdChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheVNjcmlwdCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheVNjcmlwdChMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5U2NyaXB0KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlTY3JpcHQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlWYXJpYW50KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5VmFyaWFudChMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5VmFyaWFudChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5VmFyaWFudChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZW5zaW9uKEMpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZW5zaW9uS2V5cygpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmFsbGJhY2soKUxhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmFsbGJhY2soTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElTTzNDb3VudHJ5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJU08zQ291bnRyeShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SVNPM0xhbmd1YWdlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJU08zTGFuZ3VhZ2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElTT0NvdW50cmllcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElTT0xhbmd1YWdlcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleXdvcmRWYWx1ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5d29yZFZhbHVlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXl3b3JkcygpTGphdmEvdXRpbC9JdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXl3b3JkcyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9JdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYW5ndWFnZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFuZ3VhZ2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmVPcmllbnRhdGlvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NyaXB0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY3JpcHQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVuaWNvZGVMb2NhbGVBdHRyaWJ1dGVzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVbmljb2RlTG9jYWxlS2V5cygpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5pY29kZUxvY2FsZVR5cGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhcmlhbnQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhcmlhbnQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmlnaHRUb0xlZnQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW5pbWl6ZVN1YnRhZ3MoTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTspTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZXl3b3JkVmFsdWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2V5d29yZFZhbHVlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0xhbmd1YWdlVGFnKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0xlZ2FjeUtleShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9MZWdhY3lUeXBlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0xvY2FsZSgpTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9Vbmljb2RlTG9jYWxlS2V5KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1VuaWNvZGVMb2NhbGVUeXBlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTkFEQSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FOQURBX0ZSRU5DSCIvPgotCQk8ZmllbGQgbmFtZT0iQ0hJTkEiLz4KLQkJPGZpZWxkIG5hbWU9IkNISU5FU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVOR0xJU0giLz4KLQkJPGZpZWxkIG5hbWU9IkZSQU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iRlJFTkNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRVJNQU4iLz4KLQkJPGZpZWxkIG5hbWU9IkdFUk1BTlkiLz4KLQkJPGZpZWxkIG5hbWU9IklUQUxJQU4iLz4KLQkJPGZpZWxkIG5hbWU9IklUQUxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJKQVBBTiIvPgotCQk8ZmllbGQgbmFtZT0iSkFQQU5FU0UiLz4KLQkJPGZpZWxkIG5hbWU9IktPUkVBIi8+Ci0JCTxmaWVsZCBuYW1lPSJLT1JFQU4iLz4KLQkJPGZpZWxkIG5hbWU9IlBSQyIvPgotCQk8ZmllbGQgbmFtZT0iUFJJVkFURV9VU0VfRVhURU5TSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJST09UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSU1QTElGSUVEX0NISU5FU0UiLz4KLQkJPGZpZWxkIG5hbWU9IlRBSVdBTiIvPgotCQk8ZmllbGQgbmFtZT0iVFJBRElUSU9OQUxfQ0hJTkVTRSIvPgotCQk8ZmllbGQgbmFtZT0iVUsiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSUNPREVfTE9DQUxFX0VYVEVOU0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iVVMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGUkQnVpbGRlciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFVuaWNvZGVMb2NhbGVBdHRyaWJ1dGUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcigpTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyRXh0ZW5zaW9ucygpTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVVuaWNvZGVMb2NhbGVBdHRyaWJ1dGUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeHRlbnNpb24oQ0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGFuZ3VhZ2UoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYW5ndWFnZVRhZyhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvY2FsZShMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlOylMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVnaW9uKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2NyaXB0KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VW5pY29kZUxvY2FsZUtleXdvcmQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYXJpYW50KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pY3UvdXRpbC9VTG9jYWxlJENhdGVnb3J5IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2ljdS91dGlsL1VMb2NhbGUkQ2F0ZWdvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvaWN1L3V0aWwvVUxvY2FsZSRDYXRlZ29yeTsiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU1BMQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvVW5pdmVyc2FsVGltZVNjYWxlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmlnRGVjaW1hbEZyb20oREkpTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaWdEZWNpbWFsRnJvbShKSSlMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJpZ0RlY2ltYWxGcm9tKExhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7SSlMYW5kcm9pZC9pY3UvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb20oSkkpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVTY2FsZVZhbHVlKElJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0JpZ0RlY2ltYWwoSkkpTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0JpZ0RlY2ltYWwoTGFuZHJvaWQvaWN1L21hdGgvQmlnRGVjaW1hbDtJKUxhbmRyb2lkL2ljdS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9Mb25nKEpJKUoiLz4KLQkJPGZpZWxkIG5hbWU9IkRCMl9USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJET1RORVRfREFURV9USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUE9DSF9PRkZTRVRfUExVU18xX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUE9DSF9PRkZTRVRfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYQ0VMX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkZST01fTUFYX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGUk9NX01JTl9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iSUNVNENfVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iSkFWQV9USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQUNfT0xEX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BQ19USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfU0NBTEUiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT19NQVhfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IlRPX01JTl9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iVU5JVFNfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSVhfTUlDUk9TRUNPTkRTX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSVhfVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iV0lORE9XU19GSUxFX1RJTUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2ljdS91dGlsL1ZhbHVlSXRlcmF0b3IiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0KExhbmRyb2lkL2ljdS91dGlsL1ZhbHVlSXRlcmF0b3IkRWxlbWVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmFuZ2UoSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvVmFsdWVJdGVyYXRvciRFbGVtZW50IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbnRlZ2VyIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2YWx1ZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaWN1L3V0aWwvVmVyc2lvbkluZm8iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExhbmRyb2lkL2ljdS91dGlsL1ZlcnNpb25JbmZvOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoSSlMYW5kcm9pZC9pY3UvdXRpbC9WZXJzaW9uSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShJSSlMYW5kcm9pZC9pY3UvdXRpbC9WZXJzaW9uSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShJSUkpTGFuZHJvaWQvaWN1L3V0aWwvVmVyc2lvbkluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoSUlJSSlMYW5kcm9pZC9pY3UvdXRpbC9WZXJzaW9uSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvaWN1L3V0aWwvVmVyc2lvbkluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFqb3IoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaWNybygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbGxpKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWlub3IoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IklDVV9WRVJTSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJVQ09MX0JVSUxERVJfVkVSU0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iVUNPTF9SVU5USU1FX1ZFUlNJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlVOSUNPREVfMTBfMCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVTklDT0RFXzExXzAiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iVU5JQ09ERV8xXzAiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSUNPREVfMV8wXzEiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSUNPREVfMV8xXzAiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSUNPREVfMV8xXzUiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSUNPREVfMl8wIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklDT0RFXzJfMV8yIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklDT0RFXzJfMV81Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVTklDT0RFXzJfMV84Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVTklDT0RFXzJfMV85Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVTklDT0RFXzNfMCIvPgotCQk8ZmllbGQgbmFtZT0iVU5JQ09ERV8zXzBfMSIvPgotCQk8ZmllbGQgbmFtZT0iVU5JQ09ERV8zXzFfMCIvPgotCQk8ZmllbGQgbmFtZT0iVU5JQ09ERV8zXzFfMSIvPgotCQk8ZmllbGQgbmFtZT0iVU5JQ09ERV8zXzIiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSUNPREVfNF8wIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklDT0RFXzRfMF8xIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklDT0RFXzRfMSIvPgotCQk8ZmllbGQgbmFtZT0iVU5JQ09ERV81XzAiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSUNPREVfNV8xIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklDT0RFXzVfMiIvPgotCQk8ZmllbGQgbmFtZT0iVU5JQ09ERV82XzAiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSUNPREVfNl8xIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklDT0RFXzZfMiIvPgotCQk8ZmllbGQgbmFtZT0iVU5JQ09ERV82XzMiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSUNPREVfN18wIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklDT0RFXzhfMCIvPgotCQk8ZmllbGQgbmFtZT0iVU5JQ09ERV85XzAiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0Fic3RyYWN0SW5wdXRNZXRob2RTZXJ2aWNlIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L0tleUV2ZW50JENhbGxiYWNrIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5RGlzcGF0Y2hlclN0YXRlKClMYW5kcm9pZC92aWV3L0tleUV2ZW50JERpc3BhdGNoZXJTdGF0ZTsiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVJbnB1dE1ldGhvZEludGVyZmFjZSgpTGFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0Fic3RyYWN0SW5wdXRNZXRob2RTZXJ2aWNlJEFic3RyYWN0SW5wdXRNZXRob2RJbXBsOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlSW5wdXRNZXRob2RTZXNzaW9uSW50ZXJmYWNlKClMYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvQWJzdHJhY3RJbnB1dE1ldGhvZFNlcnZpY2UkQWJzdHJhY3RJbnB1dE1ldGhvZFNlc3Npb25JbXBsOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2VuZXJpY01vdGlvbkV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVHJhY2tiYWxsRXZlbnQoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0Fic3RyYWN0SW5wdXRNZXRob2RTZXJ2aWNlJEFic3RyYWN0SW5wdXRNZXRob2RJbXBsIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9BYnN0cmFjdElucHV0TWV0aG9kU2VydmljZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0Fic3RyYWN0SW5wdXRNZXRob2RTZXJ2aWNlJEFic3RyYWN0SW5wdXRNZXRob2RTZXNzaW9uSW1wbCIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFNlc3Npb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0Fic3RyYWN0SW5wdXRNZXRob2RTZXJ2aWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZXZva2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmV2b2tlU2VsZigpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuYWJsZWQoWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvRXh0cmFjdEVkaXRUZXh0IiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0VkaXRUZXh0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluaXNoSW50ZXJuYWxDaGFuZ2VzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzVmVydGljYWxTY3JvbGxCYXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEludGVybmFsQ2hhbmdlcygpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0lucHV0TWV0aG9kU2VydmljZSIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9BYnN0cmFjdElucHV0TWV0aG9kU2VydmljZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uKClaIiBzaW5jZT0iMTciIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFja0Rpc3Bvc2l0aW9uKClJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYW5kaWRhdGVzSGlkZGVuVmlzaWJpbGl0eSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRJbnB1dEJpbmRpbmcoKUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRCaW5kaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRJbnB1dENvbm5lY3Rpb24oKUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRDb25uZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRJbnB1dEVkaXRvckluZm8oKUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvRWRpdG9ySW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50SW5wdXRTdGFydGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRNZXRob2RXaW5kb3dSZWNvbW1lbmRlZEhlaWdodCgpSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5b3V0SW5mbGF0ZXIoKUxhbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4V2lkdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0Rm9ySW1lQWN0aW9uKEkpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2luZG93KClMYW5kcm9pZC9hcHAvRGlhbG9nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImhpZGVTdGF0dXNJY29uKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGlkZVdpbmRvdygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRXh0cmFjdFZpZXdTaG93bigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRnVsbHNjcmVlbk1vZGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0lucHV0Vmlld1Nob3duKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTaG93SW5wdXRSZXF1ZXN0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFwcFByaXZhdGVDb21tYW5kKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQmluZElucHV0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db21wdXRlSW5zZXRzKExhbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9JbnB1dE1ldGhvZFNlcnZpY2UkSW5zZXRzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db25maWd1cmVXaW5kb3coTGFuZHJvaWQvdmlldy9XaW5kb3c7WlopViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlQ2FuZGlkYXRlc1ZpZXcoKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZUV4dHJhY3RUZXh0VmlldygpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlSW5wdXRWaWV3KClMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DdXJyZW50SW5wdXRNZXRob2RTdWJ0eXBlQ2hhbmdlZChMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZTspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EaXNwbGF5Q29tcGxldGlvbnMoW0xhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvQ29tcGxldGlvbkluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkV2YWx1YXRlRnVsbHNjcmVlbk1vZGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkV2YWx1YXRlSW5wdXRWaWV3U2hvd24oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkV4dHJhY3RUZXh0Q29udGV4dE1lbnVJdGVtKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXh0cmFjdGVkQ3Vyc29yTW92ZW1lbnQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXh0cmFjdGVkU2VsZWN0aW9uQ2hhbmdlZChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25FeHRyYWN0ZWRUZXh0Q2xpY2tlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXh0cmFjdGluZ0lucHV0Q2hhbmdlZChMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0VkaXRvckluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZpbmlzaENhbmRpZGF0ZXNWaWV3KFopViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRmluaXNoSW5wdXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZpbmlzaElucHV0VmlldyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkluaXRpYWxpemVJbnRlcmZhY2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNob3dJbnB1dFJlcXVlc3RlZChJWilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGFydENhbmRpZGF0ZXNWaWV3KExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvRWRpdG9ySW5mbztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXJ0SW5wdXQoTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9FZGl0b3JJbmZvO1opViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhcnRJbnB1dFZpZXcoTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9FZGl0b3JJbmZvO1opViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVW5iaW5kSW5wdXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVwZGF0ZUN1cnNvcihMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVXBkYXRlQ3Vyc29yQW5jaG9ySW5mbyhMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0N1cnNvckFuY2hvckluZm87KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVXBkYXRlRXh0cmFjdGVkVGV4dChJTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9FeHRyYWN0ZWRUZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25VcGRhdGVFeHRyYWN0aW5nVmlld3MoTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9FZGl0b3JJbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25VcGRhdGVFeHRyYWN0aW5nVmlzaWJpbGl0eShMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0VkaXRvckluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVwZGF0ZVNlbGVjdGlvbihJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVmlld0NsaWNrZWQoWilWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbldpbmRvd0hpZGRlbigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uV2luZG93U2hvd24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0SGlkZVNlbGYoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFNob3dTZWxmKEkpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZERlZmF1bHRFZGl0b3JBY3Rpb24oWilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZERvd25VcEtleUV2ZW50cyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kS2V5Q2hhcihDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCYWNrRGlzcG9zaXRpb24oSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYW5kaWRhdGVzVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYW5kaWRhdGVzVmlld1Nob3duKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dHJhY3RWaWV3KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dHJhY3RWaWV3U2hvd24oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5wdXRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3VsZE9mZmVyU3dpdGNoaW5nVG9OZXh0SW5wdXRNZXRob2QoKVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dTdGF0dXNJY29uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dXaW5kb3coWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3dpdGNoSW5wdXRNZXRob2QoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzd2l0Y2hJbnB1dE1ldGhvZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZTspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3dpdGNoVG9OZXh0SW5wdXRNZXRob2QoWilaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzd2l0Y2hUb1ByZXZpb3VzSW5wdXRNZXRob2QoKVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUZ1bGxzY3JlZW5Nb2RlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlSW5wdXRWaWV3U2hvd24oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkJBQ0tfRElTUE9TSVRJT05fQURKVVNUX05PVEhJTkciIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQkFDS19ESVNQT1NJVElPTl9ERUZBVUxUIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkJBQ0tfRElTUE9TSVRJT05fV0lMTF9ESVNNSVNTIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQUNLX0RJU1BPU0lUSU9OX1dJTExfTk9UX0RJU01JU1MiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9JbnB1dE1ldGhvZFNlcnZpY2UkSW5wdXRNZXRob2RJbXBsIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0Fic3RyYWN0SW5wdXRNZXRob2RTZXJ2aWNlJEFic3RyYWN0SW5wdXRNZXRob2RJbXBsIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9JbnB1dE1ldGhvZFNlcnZpY2U7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9JbnB1dE1ldGhvZFNlcnZpY2UkSW5wdXRNZXRob2RTZXNzaW9uSW1wbCIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9BYnN0cmFjdElucHV0TWV0aG9kU2VydmljZSRBYnN0cmFjdElucHV0TWV0aG9kU2Vzc2lvbkltcGwiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0lucHV0TWV0aG9kU2VydmljZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0lucHV0TWV0aG9kU2VydmljZSRJbnNldHMiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iVE9VQ0hBQkxFX0lOU0VUU19DT05URU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT1VDSEFCTEVfSU5TRVRTX0ZSQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT1VDSEFCTEVfSU5TRVRTX1JFR0lPTiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT1VDSEFCTEVfSU5TRVRTX1ZJU0lCTEUiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbnRlbnRUb3BJbnNldHMiLz4KLQkJPGZpZWxkIG5hbWU9InRvdWNoYWJsZUluc2V0cyIvPgotCQk8ZmllbGQgbmFtZT0idG91Y2hhYmxlUmVnaW9uIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9InZpc2libGVUb3BJbnNldHMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9LZXlib2FyZCIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lJSUkpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUtleUZyb21YbWwoTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzO0xhbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9LZXlib2FyZCRSb3c7SUlMYW5kcm9pZC9jb250ZW50L3Jlcy9YbWxSZXNvdXJjZVBhcnNlcjspTGFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0tleWJvYXJkJEtleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVSb3dGcm9tWG1sKExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztMYW5kcm9pZC9jb250ZW50L3Jlcy9YbWxSZXNvdXJjZVBhcnNlcjspTGFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0tleWJvYXJkJFJvdzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3Jpem9udGFsR2FwKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5SGVpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5V2lkdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluV2lkdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2RpZmllcktleXMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZWFyZXN0S2V5cyhJSSlbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNoaWZ0S2V5SW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZXJ0aWNhbEdhcCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2hpZnRlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhvcml6b250YWxHYXAoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2V5SGVpZ2h0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEtleVdpZHRoKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNoaWZ0ZWQoWilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmVydGljYWxHYXAoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJFREdFX0JPVFRPTSIvPgotCQk8ZmllbGQgbmFtZT0iRURHRV9MRUZUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFREdFX1JJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFREdFX1RPUCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9BTFQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQ0FOQ0VMIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0RFTEVURSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9ET05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX01PREVfQ0hBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1NISUZUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvS2V5Ym9hcmQkS2V5IiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzO0xhbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9LZXlib2FyZCRSb3c7SUlMYW5kcm9pZC9jb250ZW50L3Jlcy9YbWxSZXNvdXJjZVBhcnNlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvS2V5Ym9hcmQkUm93OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudERyYXdhYmxlU3RhdGUoKVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbnNpZGUoSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJlc3NlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVsZWFzZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3F1YXJlZERpc3RhbmNlRnJvbShJSSlJIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2RlcyIvPgotCQk8ZmllbGQgbmFtZT0iZWRnZUZsYWdzIi8+Ci0JCTxmaWVsZCBuYW1lPSJnYXAiLz4KLQkJPGZpZWxkIG5hbWU9ImhlaWdodCIvPgotCQk8ZmllbGQgbmFtZT0iaWNvbiIvPgotCQk8ZmllbGQgbmFtZT0iaWNvblByZXZpZXciLz4KLQkJPGZpZWxkIG5hbWU9ImxhYmVsIi8+Ci0JCTxmaWVsZCBuYW1lPSJtb2RpZmllciIvPgotCQk8ZmllbGQgbmFtZT0ib24iLz4KLQkJPGZpZWxkIG5hbWU9InBvcHVwQ2hhcmFjdGVycyIvPgotCQk8ZmllbGQgbmFtZT0icG9wdXBSZXNJZCIvPgotCQk8ZmllbGQgbmFtZT0icHJlc3NlZCIvPgotCQk8ZmllbGQgbmFtZT0icmVwZWF0YWJsZSIvPgotCQk8ZmllbGQgbmFtZT0ic3RpY2t5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ3aWR0aCIvPgotCQk8ZmllbGQgbmFtZT0ieCIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0tleWJvYXJkJFJvdyIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztMYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvS2V5Ym9hcmQ7TGFuZHJvaWQvY29udGVudC9yZXMvWG1sUmVzb3VyY2VQYXJzZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0tleWJvYXJkOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJkZWZhdWx0SGVpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkZWZhdWx0SG9yaXpvbnRhbEdhcCIvPgotCQk8ZmllbGQgbmFtZT0iZGVmYXVsdFdpZHRoIi8+Ci0JCTxmaWVsZCBuYW1lPSJtb2RlIi8+Ci0JCTxmaWVsZCBuYW1lPSJyb3dFZGdlRmxhZ3MiLz4KLQkJPGZpZWxkIG5hbWU9InZlcnRpY2FsR2FwIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvS2V5Ym9hcmRWaWV3IiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3JE9uQ2xpY2tMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2luZygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleWJvYXJkKClMYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvS2V5Ym9hcmQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T25LZXlib2FyZEFjdGlvbkxpc3RlbmVyKClMYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvS2V5Ym9hcmRWaWV3JE9uS2V5Ym9hcmRBY3Rpb25MaXN0ZW5lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVCYWNrKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW52YWxpZGF0ZUFsbEtleXMoKVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW52YWxpZGF0ZUtleShJKVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcmV2aWV3RW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUHJveGltaXR5Q29ycmVjdGlvbkVuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NoaWZ0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxvbmdQcmVzcyhMYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvS2V5Ym9hcmQkS2V5OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2V5Ym9hcmQoTGFuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0tleWJvYXJkOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25LZXlib2FyZEFjdGlvbkxpc3RlbmVyKExhbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9LZXlib2FyZFZpZXckT25LZXlib2FyZEFjdGlvbkxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9wdXBPZmZzZXQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvcHVwUGFyZW50KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZXZpZXdFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3hpbWl0eUNvcnJlY3Rpb25FbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNoaWZ0ZWQoWilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmVydGljYWxDb3JyZWN0aW9uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InN3aXBlRG93bigpViIvPgotCQk8bWV0aG9kIG5hbWU9InN3aXBlTGVmdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InN3aXBlUmlnaHQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzd2lwZVVwKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvS2V5Ym9hcmRWaWV3JE9uS2V5Ym9hcmRBY3Rpb25MaXN0ZW5lciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25LZXkoSVtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByZXNzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVsZWFzZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzd2lwZURvd24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzd2lwZUxlZnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzd2lwZVJpZ2h0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3dpcGVVcCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbG9jYXRpb24vQWRkcmVzcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyTGF0aXR1ZGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhckxvbmdpdHVkZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkZHJlc3NMaW5lKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWRtaW5BcmVhKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb3VudHJ5Q29kZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q291bnRyeU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dHJhcygpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZlYXR1cmVOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXRpdHVkZSgpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsZSgpTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxpdHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmdpdHVkZSgpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heEFkZHJlc3NMaW5lSW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQaG9uZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zdGFsQ29kZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlbWlzZXMoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJBZG1pbkFyZWEoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YkxvY2FsaXR5KClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3ViVGhvcm91Z2hmYXJlKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGhvcm91Z2hmYXJlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmwoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0xhdGl0dWRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTG9uZ2l0dWRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWRkcmVzc0xpbmUoSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWRtaW5BcmVhKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q291bnRyeUNvZGUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb3VudHJ5TmFtZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dHJhcyhMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGZWF0dXJlTmFtZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExhdGl0dWRlKEQpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvY2FsaXR5KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9uZ2l0dWRlKEQpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBob25lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9zdGFsQ29kZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZW1pc2VzKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1YkFkbWluQXJlYShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1YkxvY2FsaXR5KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1YlRob3JvdWdoZmFyZShMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaG9yb3VnaGZhcmUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVcmwoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2xvY2F0aW9uL0NyaXRlcmlhIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2xvY2F0aW9uL0NyaXRlcmlhOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNjdXJhY3koKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCZWFyaW5nQWNjdXJhY3koKUkiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SG9yaXpvbnRhbEFjY3VyYWN5KClJIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvd2VyUmVxdWlyZW1lbnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGVlZEFjY3VyYWN5KClJIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZlcnRpY2FsQWNjdXJhY3koKUkiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBbHRpdHVkZVJlcXVpcmVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNCZWFyaW5nUmVxdWlyZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nvc3RBbGxvd2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTcGVlZFJlcXVpcmVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWNjdXJhY3koSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWx0aXR1ZGVSZXF1aXJlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCZWFyaW5nQWNjdXJhY3koSSlWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJlYXJpbmdSZXF1aXJlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb3N0QWxsb3dlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIb3Jpem9udGFsQWNjdXJhY3koSSlWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvd2VyUmVxdWlyZW1lbnQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3BlZWRBY2N1cmFjeShJKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3BlZWRSZXF1aXJlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWZXJ0aWNhbEFjY3VyYWN5KEkpViIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ1VSQUNZX0NPQVJTRSIvPgotCQk8ZmllbGQgbmFtZT0iQUNDVVJBQ1lfRklORSIvPgotCQk8ZmllbGQgbmFtZT0iQUNDVVJBQ1lfSElHSCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ1VSQUNZX0xPVyIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ1VSQUNZX01FRElVTSIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX1JFUVVJUkVNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT1dFUl9ISUdIIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT1dFUl9MT1ciLz4KLQkJPGZpZWxkIG5hbWU9IlBPV0VSX01FRElVTSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbG9jYXRpb24vR2VvY29kZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJvbUxvY2F0aW9uKERESSlMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJvbUxvY2F0aW9uTmFtZShMamF2YS9sYW5nL1N0cmluZztJKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcm9tTG9jYXRpb25OYW1lKExqYXZhL2xhbmcvU3RyaW5nO0lEREREKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ByZXNlbnQoKVoiIHNpbmNlPSI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9sb2NhdGlvbi9HbnNzQ2xvY2siIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qmlhc05hbm9zKClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qmlhc1VuY2VydGFpbnR5TmFub3MoKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcmlmdE5hbm9zUGVyU2Vjb25kKClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJpZnRVbmNlcnRhaW50eU5hbm9zUGVyU2Vjb25kKClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnVsbEJpYXNOYW5vcygpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhhcmR3YXJlQ2xvY2tEaXNjb250aW51aXR5Q291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZWFwU2Vjb25kKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZU5hbm9zKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZVVuY2VydGFpbnR5TmFub3MoKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNCaWFzTmFub3MoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNCaWFzVW5jZXJ0YWludHlOYW5vcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0RyaWZ0TmFub3NQZXJTZWNvbmQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNEcmlmdFVuY2VydGFpbnR5TmFub3NQZXJTZWNvbmQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNGdWxsQmlhc05hbm9zKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTGVhcFNlY29uZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1RpbWVVbmNlcnRhaW50eU5hbm9zKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9sb2NhdGlvbi9HbnNzTWVhc3VyZW1lbnQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNjdW11bGF0ZWREZWx0YVJhbmdlTWV0ZXJzKClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNjdW11bGF0ZWREZWx0YVJhbmdlU3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY2N1bXVsYXRlZERlbHRhUmFuZ2VVbmNlcnRhaW50eU1ldGVycygpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1dG9tYXRpY0dhaW5Db250cm9sTGV2ZWxEYigpRCIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FycmllckN5Y2xlcygpSiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYXJyaWVyRnJlcXVlbmN5SHooKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYXJyaWVyUGhhc2UoKUQiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FycmllclBoYXNlVW5jZXJ0YWludHkoKUQiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q24wRGJIeigpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnN0ZWxsYXRpb25UeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TXVsdGlwYXRoSW5kaWNhdG9yKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHNldWRvcmFuZ2VSYXRlTWV0ZXJzUGVyU2Vjb25kKClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHNldWRvcmFuZ2VSYXRlVW5jZXJ0YWludHlNZXRlcnNQZXJTZWNvbmQoKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWNlaXZlZFN2VGltZU5hbm9zKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVjZWl2ZWRTdlRpbWVVbmNlcnRhaW50eU5hbm9zKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U25ySW5EYigpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3ZpZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVPZmZzZXROYW5vcygpRCIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0F1dG9tYXRpY0dhaW5Db250cm9sTGV2ZWxEYigpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQ2FycmllckN5Y2xlcygpWiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNDYXJyaWVyRnJlcXVlbmN5SHooKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNDYXJyaWVyUGhhc2UoKVoiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQ2FycmllclBoYXNlVW5jZXJ0YWludHkoKVoiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzU25ySW5EYigpWiIvPgotCQk8ZmllbGQgbmFtZT0iQURSX1NUQVRFX0NZQ0xFX1NMSVAiLz4KLQkJPGZpZWxkIG5hbWU9IkFEUl9TVEFURV9IQUxGX0NZQ0xFX1JFUE9SVEVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFEUl9TVEFURV9IQUxGX0NZQ0xFX1JFU09MVkVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFEUl9TVEFURV9SRVNFVCIvPgotCQk8ZmllbGQgbmFtZT0iQURSX1NUQVRFX1VOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9IkFEUl9TVEFURV9WQUxJRCIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iTVVMVElQQVRIX0lORElDQVRPUl9ERVRFQ1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iTVVMVElQQVRIX0lORElDQVRPUl9OT1RfREVURUNURUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1VTFRJUEFUSF9JTkRJQ0FUT1JfVU5LTk9XTiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfQkRTX0QyX0JJVF9TWU5DIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9CRFNfRDJfU1VCRlJBTUVfU1lOQyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfQklUX1NZTkMiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0NPREVfTE9DSyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfR0FMX0UxQkNfQ09ERV9MT0NLIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9HQUxfRTFCX1BBR0VfU1lOQyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfR0FMX0UxQ18yTkRfQ09ERV9MT0NLIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9HTE9fU1RSSU5HX1NZTkMiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0dMT19UT0RfREVDT0RFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfR0xPX1RPRF9LTk9XTiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9NU0VDX0FNQklHVU9VUyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfU0JBU19TWU5DIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9TVUJGUkFNRV9TWU5DIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9TWU1CT0xfU1lOQyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfVE9XX0RFQ09ERUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX1RPV19LTk9XTiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9VTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9sb2NhdGlvbi9HbnNzTWVhc3VyZW1lbnRzRXZlbnQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9sb2NhdGlvbi9HbnNzQ2xvY2s7W0xhbmRyb2lkL2xvY2F0aW9uL0duc3NNZWFzdXJlbWVudDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xvY2soKUxhbmRyb2lkL2xvY2F0aW9uL0duc3NDbG9jazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZWFzdXJlbWVudHMoKUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2xvY2F0aW9uL0duc3NNZWFzdXJlbWVudHNFdmVudCRDYWxsYmFjayIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR25zc01lYXN1cmVtZW50c1JlY2VpdmVkKExhbmRyb2lkL2xvY2F0aW9uL0duc3NNZWFzdXJlbWVudHNFdmVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhdHVzQ2hhbmdlZChJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19MT0NBVElPTl9ESVNBQkxFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX05PVF9BTExPV0VEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19OT1RfU1VQUE9SVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfUkVBRFkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2xvY2F0aW9uL0duc3NOYXZpZ2F0aW9uTWVzc2FnZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lc3NhZ2VJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXR1cygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1Ym1lc3NhZ2VJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN2aWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfUEFSSVRZX1BBU1NFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX1BBUklUWV9SRUJVSUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfVU5LTk9XTiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9CRFNfRDEiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQkRTX0QyIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0dBTF9GIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0dBTF9JIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0dMT19MMUNBIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0dQU19DTkFWMiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9HUFNfTDFDQSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9HUFNfTDJDTkFWIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0dQU19MNUNOQVYiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVU5LTk9XTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbG9jYXRpb24vR25zc05hdmlnYXRpb25NZXNzYWdlJENhbGxiYWNrIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25HbnNzTmF2aWdhdGlvbk1lc3NhZ2VSZWNlaXZlZChMYW5kcm9pZC9sb2NhdGlvbi9HbnNzTmF2aWdhdGlvbk1lc3NhZ2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXR1c0NoYW5nZWQoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfTE9DQVRJT05fRElTQUJMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19OT1RfU1VQUE9SVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfUkVBRFkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2xvY2F0aW9uL0duc3NTdGF0dXMiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElbSVtGW0ZbRltGKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF6aW11dGhEZWdyZWVzKEkpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhcnJpZXJGcmVxdWVuY3lIeihJKUYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENuMERiSHooSSlGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uc3RlbGxhdGlvblR5cGUoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RWxldmF0aW9uRGVncmVlcyhJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTYXRlbGxpdGVDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN2aWQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQWxtYW5hY0RhdGEoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQ2FycmllckZyZXF1ZW5jeUh6KEkpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRXBoZW1lcmlzRGF0YShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1c2VkSW5GaXgoSSlaIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05TVEVMTEFUSU9OX0JFSURPVSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OU1RFTExBVElPTl9HQUxJTEVPIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05TVEVMTEFUSU9OX0dMT05BU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlNURUxMQVRJT05fR1BTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05TVEVMTEFUSU9OX1FaU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlNURUxMQVRJT05fU0JBUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OU1RFTExBVElPTl9VTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9sb2NhdGlvbi9HbnNzU3RhdHVzJENhbGxiYWNrIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25GaXJzdEZpeChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNhdGVsbGl0ZVN0YXR1c0NoYW5nZWQoTGFuZHJvaWQvbG9jYXRpb24vR25zc1N0YXR1czspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhcnRlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RvcHBlZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbG9jYXRpb24vR3BzU2F0ZWxsaXRlIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF6aW11dGgoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbGV2YXRpb24oKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm4oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTbnIoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNBbG1hbmFjKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRXBoZW1lcmlzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0idXNlZEluRml4KClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9sb2NhdGlvbi9HcHNTdGF0dXMiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhTYXRlbGxpdGVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2F0ZWxsaXRlcygpTGphdmEvbGFuZy9JdGVyYWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lVG9GaXJzdEZpeCgpSSIvPgotCQk8ZmllbGQgbmFtZT0iR1BTX0VWRU5UX0ZJUlNUX0ZJWCIvPgotCQk8ZmllbGQgbmFtZT0iR1BTX0VWRU5UX1NBVEVMTElURV9TVEFUVVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdQU19FVkVOVF9TVEFSVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUFNfRVZFTlRfU1RPUFBFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbG9jYXRpb24vR3BzU3RhdHVzJExpc3RlbmVyIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25HcHNTdGF0dXNDaGFuZ2VkKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbG9jYXRpb24vR3BzU3RhdHVzJE5tZWFMaXN0ZW5lciIgc2luY2U9IjUiIGRlcHJlY2F0ZWQ9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTm1lYVJlY2VpdmVkKEpMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbG9jYXRpb24vTG9jYXRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbG9jYXRpb24vTG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiZWFyaW5nVG8oTGFuZHJvaWQvbG9jYXRpb24vTG9jYXRpb247KUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb252ZXJ0KERJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnZlcnQoTGphdmEvbGFuZy9TdHJpbmc7KUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXN0YW5jZUJldHdlZW4oRERERFtGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXN0YW5jZVRvKExhbmRyb2lkL2xvY2F0aW9uL0xvY2F0aW9uOylGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHVtcChMYW5kcm9pZC91dGlsL1ByaW50ZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNjdXJhY3koKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbHRpdHVkZSgpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJlYXJpbmcoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCZWFyaW5nQWNjdXJhY3lEZWdyZWVzKClGIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbGFwc2VkUmVhbHRpbWVOYW5vcygpSiIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF0aXR1ZGUoKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25naXR1ZGUoKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm92aWRlcigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3BlZWQoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGVlZEFjY3VyYWN5TWV0ZXJzUGVyU2Vjb25kKClGIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVydGljYWxBY2N1cmFjeU1ldGVycygpRiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQWNjdXJhY3koKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNBbHRpdHVkZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0JlYXJpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNCZWFyaW5nQWNjdXJhY3koKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1NwZWVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzU3BlZWRBY2N1cmFjeSgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzVmVydGljYWxBY2N1cmFjeSgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGcm9tTW9ja1Byb3ZpZGVyKClaIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBY2N1cmFjeSgpViIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBbHRpdHVkZSgpViIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVCZWFyaW5nKClWIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVNwZWVkKClWIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KExhbmRyb2lkL2xvY2F0aW9uL0xvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWNjdXJhY3koRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWx0aXR1ZGUoRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmVhcmluZyhGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCZWFyaW5nQWNjdXJhY3lEZWdyZWVzKEYpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RWxhcHNlZFJlYWx0aW1lTmFub3MoSilWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeHRyYXMoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF0aXR1ZGUoRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9uZ2l0dWRlKEQpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3ZpZGVyKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3BlZWQoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3BlZWRBY2N1cmFjeU1ldGVyc1BlclNlY29uZChGKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWUoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmVydGljYWxBY2N1cmFjeU1ldGVycyhGKVYiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0RFR1JFRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9NSU5VVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfU0VDT05EUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbG9jYXRpb24vTG9jYXRpb25MaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Mb2NhdGlvbkNoYW5nZWQoTGFuZHJvaWQvbG9jYXRpb24vTG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByb3ZpZGVyRGlzYWJsZWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByb3ZpZGVyRW5hYmxlZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhdHVzQ2hhbmdlZChMamF2YS9sYW5nL1N0cmluZztJTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9sb2NhdGlvbi9Mb2NhdGlvbk1hbmFnZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEdwc1N0YXR1c0xpc3RlbmVyKExhbmRyb2lkL2xvY2F0aW9uL0dwc1N0YXR1cyRMaXN0ZW5lcjspWiIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTm1lYUxpc3RlbmVyKExhbmRyb2lkL2xvY2F0aW9uL0dwc1N0YXR1cyRObWVhTGlzdGVuZXI7KVoiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE5tZWFMaXN0ZW5lcihMYW5kcm9pZC9sb2NhdGlvbi9Pbk5tZWFNZXNzYWdlTGlzdGVuZXI7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE5tZWFMaXN0ZW5lcihMYW5kcm9pZC9sb2NhdGlvbi9Pbk5tZWFNZXNzYWdlTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUHJveGltaXR5QWxlcnQoRERGSkxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGVzdFByb3ZpZGVyKExqYXZhL2xhbmcvU3RyaW5nO1paWlpaWlpJSSlWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyVGVzdFByb3ZpZGVyRW5hYmxlZChMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhclRlc3RQcm92aWRlckxvY2F0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyVGVzdFByb3ZpZGVyU3RhdHVzKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbFByb3ZpZGVycygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJlc3RQcm92aWRlcihMYW5kcm9pZC9sb2NhdGlvbi9Dcml0ZXJpYTtaKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEduc3NIYXJkd2FyZU1vZGVsTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHbnNzWWVhck9mSGFyZHdhcmUoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdwc1N0YXR1cyhMYW5kcm9pZC9sb2NhdGlvbi9HcHNTdGF0dXM7KUxhbmRyb2lkL2xvY2F0aW9uL0dwc1N0YXR1czsiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhc3RLbm93bkxvY2F0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9sb2NhdGlvbi9Mb2NhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm92aWRlcihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbG9jYXRpb24vTG9jYXRpb25Qcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm92aWRlcnMoTGFuZHJvaWQvbG9jYXRpb24vQ3JpdGVyaWE7WilMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdmlkZXJzKFopTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG9jYXRpb25FbmFibGVkKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Byb3ZpZGVyRW5hYmxlZChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyR25zc01lYXN1cmVtZW50c0NhbGxiYWNrKExhbmRyb2lkL2xvY2F0aW9uL0duc3NNZWFzdXJlbWVudHNFdmVudCRDYWxsYmFjazspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJHbnNzTWVhc3VyZW1lbnRzQ2FsbGJhY2soTGFuZHJvaWQvbG9jYXRpb24vR25zc01lYXN1cmVtZW50c0V2ZW50JENhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyR25zc05hdmlnYXRpb25NZXNzYWdlQ2FsbGJhY2soTGFuZHJvaWQvbG9jYXRpb24vR25zc05hdmlnYXRpb25NZXNzYWdlJENhbGxiYWNrOylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3Rlckduc3NOYXZpZ2F0aW9uTWVzc2FnZUNhbGxiYWNrKExhbmRyb2lkL2xvY2F0aW9uL0duc3NOYXZpZ2F0aW9uTWVzc2FnZSRDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3Rlckduc3NTdGF0dXNDYWxsYmFjayhMYW5kcm9pZC9sb2NhdGlvbi9HbnNzU3RhdHVzJENhbGxiYWNrOylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3Rlckduc3NTdGF0dXNDYWxsYmFjayhMYW5kcm9pZC9sb2NhdGlvbi9HbnNzU3RhdHVzJENhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUdwc1N0YXR1c0xpc3RlbmVyKExhbmRyb2lkL2xvY2F0aW9uL0dwc1N0YXR1cyRMaXN0ZW5lcjspViIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlTm1lYUxpc3RlbmVyKExhbmRyb2lkL2xvY2F0aW9uL0dwc1N0YXR1cyRObWVhTGlzdGVuZXI7KVYiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU5tZWFMaXN0ZW5lcihMYW5kcm9pZC9sb2NhdGlvbi9Pbk5tZWFNZXNzYWdlTGlzdGVuZXI7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVByb3hpbWl0eUFsZXJ0KExhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlVGVzdFByb3ZpZGVyKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVVwZGF0ZXMoTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlVXBkYXRlcyhMYW5kcm9pZC9sb2NhdGlvbi9Mb2NhdGlvbkxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdExvY2F0aW9uVXBkYXRlcyhKRkxhbmRyb2lkL2xvY2F0aW9uL0NyaXRlcmlhO0xhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RMb2NhdGlvblVwZGF0ZXMoSkZMYW5kcm9pZC9sb2NhdGlvbi9Dcml0ZXJpYTtMYW5kcm9pZC9sb2NhdGlvbi9Mb2NhdGlvbkxpc3RlbmVyO0xhbmRyb2lkL29zL0xvb3BlcjspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0TG9jYXRpb25VcGRhdGVzKExqYXZhL2xhbmcvU3RyaW5nO0pGTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdExvY2F0aW9uVXBkYXRlcyhMamF2YS9sYW5nL1N0cmluZztKRkxhbmRyb2lkL2xvY2F0aW9uL0xvY2F0aW9uTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0TG9jYXRpb25VcGRhdGVzKExqYXZhL2xhbmcvU3RyaW5nO0pGTGFuZHJvaWQvbG9jYXRpb24vTG9jYXRpb25MaXN0ZW5lcjtMYW5kcm9pZC9vcy9Mb29wZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0U2luZ2xlVXBkYXRlKExhbmRyb2lkL2xvY2F0aW9uL0NyaXRlcmlhO0xhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RTaW5nbGVVcGRhdGUoTGFuZHJvaWQvbG9jYXRpb24vQ3JpdGVyaWE7TGFuZHJvaWQvbG9jYXRpb24vTG9jYXRpb25MaXN0ZW5lcjtMYW5kcm9pZC9vcy9Mb29wZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFNpbmdsZVVwZGF0ZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0U2luZ2xlVXBkYXRlKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2xvY2F0aW9uL0xvY2F0aW9uTGlzdGVuZXI7TGFuZHJvaWQvb3MvTG9vcGVyOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRFeHRyYUNvbW1hbmQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRlc3RQcm92aWRlckVuYWJsZWQoTGphdmEvbGFuZy9TdHJpbmc7WilWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRlc3RQcm92aWRlckxvY2F0aW9uKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2xvY2F0aW9uL0xvY2F0aW9uOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRlc3RQcm92aWRlclN0YXR1cyhMamF2YS9sYW5nL1N0cmluZztJTGFuZHJvaWQvb3MvQnVuZGxlO0opViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyR25zc01lYXN1cmVtZW50c0NhbGxiYWNrKExhbmRyb2lkL2xvY2F0aW9uL0duc3NNZWFzdXJlbWVudHNFdmVudCRDYWxsYmFjazspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3Rlckduc3NOYXZpZ2F0aW9uTWVzc2FnZUNhbGxiYWNrKExhbmRyb2lkL2xvY2F0aW9uL0duc3NOYXZpZ2F0aW9uTWVzc2FnZSRDYWxsYmFjazspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3Rlckduc3NTdGF0dXNDYWxsYmFjayhMYW5kcm9pZC9sb2NhdGlvbi9HbnNzU3RhdHVzJENhbGxiYWNrOylWIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkdQU19QUk9WSURFUiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0xPQ0FUSU9OX0NIQU5HRUQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfUFJPVklERVJfRU5BQkxFRCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9QUk9YSU1JVFlfRU5URVJJTkciLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9TVEFUVVNfQ0hBTkdFRCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfQ0hBTkdFRF9BQ1RJT04iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SS19QUk9WSURFUiIvPgotCQk8ZmllbGQgbmFtZT0iUEFTU0lWRV9QUk9WSURFUiIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1ZJREVSU19DSEFOR0VEX0FDVElPTiIgc2luY2U9IjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2xvY2F0aW9uL0xvY2F0aW9uUHJvdmlkZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjY3VyYWN5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG93ZXJSZXF1aXJlbWVudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc01vbmV0YXJ5Q29zdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im1lZXRzQ3JpdGVyaWEoTGFuZHJvaWQvbG9jYXRpb24vQ3JpdGVyaWE7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1aXJlc0NlbGwoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1aXJlc05ldHdvcmsoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1aXJlc1NhdGVsbGl0ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzQWx0aXR1ZGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0JlYXJpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c1NwZWVkKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkFJTEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9VVF9PRl9TRVJWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJURU1QT1JBUklMWV9VTkFWQUlMQUJMRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbG9jYXRpb24vT25ObWVhTWVzc2FnZUxpc3RlbmVyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25ObWVhTWVzc2FnZShMamF2YS9sYW5nL1N0cmluZztKKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL2xvY2F0aW9uL1NldHRpbmdJbmplY3RvclNlcnZpY2UiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdldEVuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdldFN1bW1hcnkoKUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9JTkpFQ1RFRF9TRVRUSU5HX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TRVJWSUNFX0lOVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iQVRUUklCVVRFU19OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX0RBVEFfTkFNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXN5bmNQbGF5ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InBsYXkoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL25ldC9Vcmk7WkkpViIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbGF5KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9uZXQvVXJpO1pMYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXM7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3AoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL0F1ZGlvQXR0cmlidXRlcyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50VHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsYWdzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNhZ2UoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2x1bWVDb250cm9sU3RyZWFtKClJIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRV9NT1ZJRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFX01VU0lDIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEVfU09OSUZJQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEVfU1BFRUNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEVfVU5LTk9XTiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19BVURJQklMSVRZX0VORk9SQ0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0hXX0FWX1NZTkMiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfTE9XX0xBVEVOQ1kiIHNpbmNlPSIyNCIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQUdFX0FMQVJNIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9BU1NJU1RBTkNFX0FDQ0VTU0lCSUxJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQUdFX0FTU0lTVEFOQ0VfTkFWSUdBVElPTl9HVUlEQU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iVVNBR0VfQVNTSVNUQU5DRV9TT05JRklDQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlVTQUdFX0FTU0lTVEFOVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9HQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9NRURJQSIvPgotCQk8ZmllbGQgbmFtZT0iVVNBR0VfTk9USUZJQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9OT1RJRklDQVRJT05fQ09NTVVOSUNBVElPTl9ERUxBWUVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9OT1RJRklDQVRJT05fQ09NTVVOSUNBVElPTl9JTlNUQU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9OT1RJRklDQVRJT05fQ09NTVVOSUNBVElPTl9SRVFVRVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9OT1RJRklDQVRJT05fRVZFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQUdFX05PVElGSUNBVElPTl9SSU5HVE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iVVNBR0VfVU5LTk9XTiIvPgotCQk8ZmllbGQgbmFtZT0iVVNBR0VfVk9JQ0VfQ09NTVVOSUNBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iVVNBR0VfVk9JQ0VfQ09NTVVOSUNBVElPTl9TSUdOQUxMSU5HIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXMkQnVpbGRlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvbWVkaWEvQXVkaW9BdHRyaWJ1dGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRUeXBlKEkpTGFuZHJvaWQvbWVkaWEvQXVkaW9BdHRyaWJ1dGVzJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmxhZ3MoSSlMYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMZWdhY3lTdHJlYW1UeXBlKEkpTGFuZHJvaWQvbWVkaWEvQXVkaW9BdHRyaWJ1dGVzJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXNhZ2UoSSlMYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXMkQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL0F1ZGlvRGV2aWNlQ2FsbGJhY2siIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF1ZGlvRGV2aWNlc0FkZGVkKFtMYW5kcm9pZC9tZWRpYS9BdWRpb0RldmljZUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF1ZGlvRGV2aWNlc1JlbW92ZWQoW0xhbmRyb2lkL21lZGlhL0F1ZGlvRGV2aWNlSW5mbzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXVkaW9EZXZpY2VJbmZvIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWRkcmVzcygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFubmVsQ291bnRzKClbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYW5uZWxJbmRleE1hc2tzKClbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYW5uZWxNYXNrcygpW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGluZ3MoKVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9kdWN0TmFtZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2FtcGxlUmF0ZXMoKVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2luaygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU291cmNlKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FVWF9MSU5FIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0JMVUVUT09USF9BMkRQIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0JMVUVUT09USF9TQ08iLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQlVJTFRJTl9FQVJQSUVDRSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9CVUlMVElOX01JQyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9CVUlMVElOX1NQRUFLRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQlVTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRE9DSyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9GTSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9GTV9UVU5FUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9IRE1JIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0hETUlfQVJDIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0hFQVJJTkdfQUlEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSVAiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTElORV9BTkFMT0ciLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTElORV9ESUdJVEFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFTEVQSE9OWSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9UVl9UVU5FUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1VTQl9BQ0NFU1NPUlkiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVVNCX0RFVklDRSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9VU0JfSEVBRFNFVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1dJUkVEX0hFQURQSE9ORVMiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfV0lSRURfSEVBRFNFVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXVkaW9Gb2N1c1JlcXVlc3QiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL21lZGlhL0F1ZGlvTWFuYWdlciRPbkF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyO0xhbmRyb2lkL21lZGlhL0F1ZGlvQXR0cmlidXRlcztJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHRzRGVsYXllZEZvY3VzR2FpbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1ZGlvQXR0cmlidXRlcygpTGFuZHJvaWQvbWVkaWEvQXVkaW9BdHRyaWJ1dGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvY3VzR2FpbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9IndpbGxQYXVzZVdoZW5EdWNrZWQoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL0F1ZGlvRm9jdXNSZXF1ZXN0JEJ1aWxkZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL21lZGlhL0F1ZGlvRm9jdXNSZXF1ZXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL21lZGlhL0F1ZGlvRm9jdXNSZXF1ZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjY2VwdHNEZWxheWVkRm9jdXNHYWluKFopTGFuZHJvaWQvbWVkaWEvQXVkaW9Gb2N1c1JlcXVlc3QkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdWRpb0F0dHJpYnV0ZXMoTGFuZHJvaWQvbWVkaWEvQXVkaW9BdHRyaWJ1dGVzOylMYW5kcm9pZC9tZWRpYS9BdWRpb0ZvY3VzUmVxdWVzdCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvY3VzR2FpbihJKUxhbmRyb2lkL21lZGlhL0F1ZGlvRm9jdXNSZXF1ZXN0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9yY2VEdWNraW5nKFopTGFuZHJvaWQvbWVkaWEvQXVkaW9Gb2N1c1JlcXVlc3QkQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uQXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVyKExhbmRyb2lkL21lZGlhL0F1ZGlvTWFuYWdlciRPbkF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lcjspTGFuZHJvaWQvbWVkaWEvQXVkaW9Gb2N1c1JlcXVlc3QkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9BdWRpb01hbmFnZXIkT25BdWRpb0ZvY3VzQ2hhbmdlTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspTGFuZHJvaWQvbWVkaWEvQXVkaW9Gb2N1c1JlcXVlc3QkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXaWxsUGF1c2VXaGVuRHVja2VkKFopTGFuZHJvaWQvbWVkaWEvQXVkaW9Gb2N1c1JlcXVlc3QkQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL0F1ZGlvRm9ybWF0IiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFubmVsQ291bnQoKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYW5uZWxJbmRleE1hc2soKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYW5uZWxNYXNrKClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGluZygpSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2FtcGxlUmF0ZSgpSSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX0NPTkZJR1VSQVRJT05fREVGQVVMVCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfQ09ORklHVVJBVElPTl9JTlZBTElEIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9DT05GSUdVUkFUSU9OX01PTk8iIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX0NPTkZJR1VSQVRJT05fU1RFUkVPIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9JTlZBTElEIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9JTl9CQUNLIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9JTl9CQUNLX1BST0NFU1NFRCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfSU5fREVGQVVMVCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfSU5fRlJPTlQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX0lOX0ZST05UX1BST0NFU1NFRCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfSU5fTEVGVCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfSU5fTEVGVF9QUk9DRVNTRUQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX0lOX01PTk8iIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX0lOX1BSRVNTVVJFIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9JTl9SSUdIVCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfSU5fUklHSFRfUFJPQ0VTU0VEIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9JTl9TVEVSRU8iIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX0lOX1ZPSUNFX0ROTElOSyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfSU5fVk9JQ0VfVVBMSU5LIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9JTl9YX0FYSVMiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX0lOX1lfQVhJUyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfSU5fWl9BWElTIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9PVVRfNVBPSU5UMSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfT1VUXzdQT0lOVDEiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9PVVRfN1BPSU5UMV9TVVJST1VORCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX09VVF9CQUNLX0NFTlRFUiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfT1VUX0JBQ0tfTEVGVCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfT1VUX0JBQ0tfUklHSFQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX09VVF9ERUZBVUxUIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9PVVRfRlJPTlRfQ0VOVEVSIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9PVVRfRlJPTlRfTEVGVCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfT1VUX0ZST05UX0xFRlRfT0ZfQ0VOVEVSIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9PVVRfRlJPTlRfUklHSFQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX09VVF9GUk9OVF9SSUdIVF9PRl9DRU5URVIiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX09VVF9MT1dfRlJFUVVFTkNZIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9PVVRfTU9OTyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfT1VUX1FVQUQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX09VVF9TSURFX0xFRlQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9PVVRfU0lERV9SSUdIVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX09VVF9TVEVSRU8iIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX09VVF9TVVJST1VORCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRU5DT0RJTkdfQUFDX0VMRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNPRElOR19BQUNfSEVfVjEiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRU5DT0RJTkdfQUFDX0hFX1YyIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ09ESU5HX0FBQ19MQyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNPRElOR19BQUNfWEhFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ09ESU5HX0FDMyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNPRElOR19BQzQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRU5DT0RJTkdfREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iRU5DT0RJTkdfRE9MQllfVFJVRUhEIiBzaW5jZT0iMjUiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ09ESU5HX0RUUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNPRElOR19EVFNfSEQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRU5DT0RJTkdfRV9BQzMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRU5DT0RJTkdfRV9BQzNfSk9DIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ09ESU5HX0lFQzYxOTM3IiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ09ESU5HX0lOVkFMSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ09ESU5HX01QMyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNPRElOR19QQ01fMTZCSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ09ESU5HX1BDTV84QklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNPRElOR19QQ01fRkxPQVQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iU0FNUExFX1JBVEVfVU5TUEVDSUZJRUQiIHNpbmNlPSIyNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXVkaW9Gb3JtYXQkQnVpbGRlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9BdWRpb0Zvcm1hdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9tZWRpYS9BdWRpb0Zvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGFubmVsSW5kZXhNYXNrKEkpTGFuZHJvaWQvbWVkaWEvQXVkaW9Gb3JtYXQkQnVpbGRlcjsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoYW5uZWxNYXNrKEkpTGFuZHJvaWQvbWVkaWEvQXVkaW9Gb3JtYXQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmNvZGluZyhJKUxhbmRyb2lkL21lZGlhL0F1ZGlvRm9ybWF0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2FtcGxlUmF0ZShJKUxhbmRyb2lkL21lZGlhL0F1ZGlvRm9ybWF0JEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9BdWRpb01hbmFnZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFiYW5kb25BdWRpb0ZvY3VzKExhbmRyb2lkL21lZGlhL0F1ZGlvTWFuYWdlciRPbkF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lcjspSSIgc2luY2U9IjgiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWJhbmRvbkF1ZGlvRm9jdXNSZXF1ZXN0KExhbmRyb2lkL21lZGlhL0F1ZGlvRm9jdXNSZXF1ZXN0OylJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGp1c3RTdHJlYW1Wb2x1bWUoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGp1c3RTdWdnZXN0ZWRTdHJlYW1Wb2x1bWUoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGp1c3RWb2x1bWUoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoTWVkaWFLZXlFdmVudChMYW5kcm9pZC92aWV3L0tleUV2ZW50OylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZUF1ZGlvU2Vzc2lvbklkKClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3RpdmVQbGF5YmFja0NvbmZpZ3VyYXRpb25zKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3RpdmVSZWNvcmRpbmdDb25maWd1cmF0aW9ucygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlcyhJKVtMYW5kcm9pZC9tZWRpYS9BdWRpb0RldmljZUluZm87IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaWNyb3Bob25lcygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtZXRlcnMoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9wZXJ0eShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSaW5nZXJNb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um91dGluZyhJKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyZWFtTWF4Vm9sdW1lKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmVhbU1pblZvbHVtZShJKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmVhbVZvbHVtZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJlYW1Wb2x1bWVEYihJSUkpRiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmlicmF0ZVNldHRpbmcoSSlJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQmx1ZXRvb3RoQTJkcE9uKClaIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JsdWV0b290aFNjb0F2YWlsYWJsZU9mZkNhbGwoKVoiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNCbHVldG9vdGhTY29PbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTWljcm9waG9uZU11dGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc011c2ljQWN0aXZlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTcGVha2VycGhvbmVPbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3RyZWFtTXV0ZShJKVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVm9sdW1lRml4ZWQoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzV2lyZWRIZWFkc2V0T24oKVoiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRTb3VuZEVmZmVjdHMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbGF5U291bmRFZmZlY3QoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGxheVNvdW5kRWZmZWN0KElGKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJBdWRpb0RldmljZUNhbGxiYWNrKExhbmRyb2lkL21lZGlhL0F1ZGlvRGV2aWNlQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJBdWRpb1BsYXliYWNrQ2FsbGJhY2soTGFuZHJvaWQvbWVkaWEvQXVkaW9NYW5hZ2VyJEF1ZGlvUGxheWJhY2tDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlckF1ZGlvUmVjb3JkaW5nQ2FsbGJhY2soTGFuZHJvaWQvbWVkaWEvQXVkaW9NYW5hZ2VyJEF1ZGlvUmVjb3JkaW5nQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJNZWRpYUJ1dHRvbkV2ZW50UmVjZWl2ZXIoTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiIHNpbmNlPSIxOCIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3Rlck1lZGlhQnV0dG9uRXZlbnRSZWNlaXZlcihMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVYiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyUmVtb3RlQ29udHJvbENsaWVudChMYW5kcm9pZC9tZWRpYS9SZW1vdGVDb250cm9sQ2xpZW50OylWIiBzaW5jZT0iMTQiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJSZW1vdGVDb250cm9sbGVyKExhbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xsZXI7KVoiIHNpbmNlPSIxOSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0QXVkaW9Gb2N1cyhMYW5kcm9pZC9tZWRpYS9BdWRpb0ZvY3VzUmVxdWVzdDspSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdEF1ZGlvRm9jdXMoTGFuZHJvaWQvbWVkaWEvQXVkaW9NYW5hZ2VyJE9uQXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVyO0lJKUkiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJsdWV0b290aEEyZHBPbihaKVYiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJsdWV0b290aFNjb09uKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pY3JvcGhvbmVNdXRlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1vZGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyYW1ldGVycyhMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSaW5nZXJNb2RlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJvdXRpbmcoSUlJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3BlYWtlcnBob25lT24oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RyZWFtTXV0ZShJWilWIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cmVhbVNvbG8oSVopViIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdHJlYW1Wb2x1bWUoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWJyYXRlU2V0dGluZyhJSSlWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdpcmVkSGVhZHNldE9uKFopViIgc2luY2U9IjUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdWxkVmlicmF0ZShJKVoiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRCbHVldG9vdGhTY28oKVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcEJsdWV0b290aFNjbygpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmxvYWRTb3VuZEVmZmVjdHMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyQXVkaW9EZXZpY2VDYWxsYmFjayhMYW5kcm9pZC9tZWRpYS9BdWRpb0RldmljZUNhbGxiYWNrOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyQXVkaW9QbGF5YmFja0NhbGxiYWNrKExhbmRyb2lkL21lZGlhL0F1ZGlvTWFuYWdlciRBdWRpb1BsYXliYWNrQ2FsbGJhY2s7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJBdWRpb1JlY29yZGluZ0NhbGxiYWNrKExhbmRyb2lkL21lZGlhL0F1ZGlvTWFuYWdlciRBdWRpb1JlY29yZGluZ0NhbGxiYWNrOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyTWVkaWFCdXR0b25FdmVudFJlY2VpdmVyKExhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIiBzaW5jZT0iMTgiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3Rlck1lZGlhQnV0dG9uRXZlbnRSZWNlaXZlcihMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVYiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJSZW1vdGVDb250cm9sQ2xpZW50KExhbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xDbGllbnQ7KVYiIHNpbmNlPSIxNCIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyUmVtb3RlQ29udHJvbGxlcihMYW5kcm9pZC9tZWRpYS9SZW1vdGVDb250cm9sbGVyOylWIiBzaW5jZT0iMTkiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQVVESU9fQkVDT01JTkdfTk9JU1kiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fSERNSV9BVURJT19QTFVHIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9IRUFEU0VUX1BMVUciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX01JQ1JPUEhPTkVfTVVURV9DSEFOR0VEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TQ09fQVVESU9fU1RBVEVfQ0hBTkdFRCIgc2luY2U9IjgiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0NPX0FVRElPX1NUQVRFX1VQREFURUQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iQURKVVNUX0xPV0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJBREpVU1RfTVVURSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBREpVU1RfUkFJU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkFESlVTVF9TQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJBREpVU1RfVE9HR0xFX01VVEUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQURKVVNUX1VOTVVURSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT0ZPQ1VTX0dBSU4iIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT0ZPQ1VTX0dBSU5fVFJBTlNJRU5UIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQVVESU9GT0NVU19HQUlOX1RSQU5TSUVOVF9FWENMVVNJVkUiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQVVESU9GT0NVU19HQUlOX1RSQU5TSUVOVF9NQVlfRFVDSyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPRk9DVVNfTE9TUyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPRk9DVVNfTE9TU19UUkFOU0lFTlQiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT0ZPQ1VTX0xPU1NfVFJBTlNJRU5UX0NBTl9EVUNLIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQVVESU9GT0NVU19OT05FIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPRk9DVVNfUkVRVUVTVF9ERUxBWUVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPRk9DVVNfUkVRVUVTVF9GQUlMRUQiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT0ZPQ1VTX1JFUVVFU1RfR1JBTlRFRCIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX1NFU1NJT05fSURfR0VORVJBVEUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1IiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfREVBRF9PQkpFQ1QiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQVVESU9fUExVR19TVEFURSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9FTkNPRElOR1MiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTUFYX0NIQU5ORUxfQ09VTlQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUklOR0VSX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NDT19BVURJT19QUkVWSU9VU19TVEFURSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TQ09fQVVESU9fU1RBVEUiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9WSUJSQVRFX1NFVFRJTkciIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9WSUJSQVRFX1RZUEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FMTE9XX1JJTkdFUl9NT0RFUyIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19QTEFZX1NPVU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1JFTU9WRV9TT1VORF9BTkRfVklCUkFURSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TSE9XX1VJIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1ZJQlJBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkZYX0ZPQ1VTX05BVklHQVRJT05fRE9XTiIvPgotCQk8ZmllbGQgbmFtZT0iRlhfRk9DVVNfTkFWSUdBVElPTl9MRUZUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGWF9GT0NVU19OQVZJR0FUSU9OX1JJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGWF9GT0NVU19OQVZJR0FUSU9OX1VQIi8+Ci0JCTxmaWVsZCBuYW1lPSJGWF9LRVlQUkVTU19ERUxFVEUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGWF9LRVlQUkVTU19JTlZBTElEIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkZYX0tFWVBSRVNTX1JFVFVSTiIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkZYX0tFWVBSRVNTX1NQQUNFQkFSIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iRlhfS0VZUFJFU1NfU1RBTkRBUkQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGWF9LRVlfQ0xJQ0siLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9ERVZJQ0VTX0FMTCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRVRfREVWSUNFU19JTlBVVFMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iR0VUX0RFVklDRVNfT1VUUFVUUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX0NVUlJFTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfSU5WQUxJRCIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9JTl9DQUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX0lOX0NPTU1VTklDQVRJT04iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9OT1JNQUwiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfUklOR1RPTkUiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VTV9TVFJFQU1TIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfT1VUUFVUX0ZSQU1FU19QRVJfQlVGRkVSIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IlBST1BFUlRZX09VVFBVVF9TQU1QTEVfUkFURSIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9TVVBQT1JUX0FVRElPX1NPVVJDRV9VTlBST0NFU1NFRCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9TVVBQT1JUX01JQ19ORUFSX1VMVFJBU09VTkQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfU1VQUE9SVF9TUEVBS0VSX05FQVJfVUxUUkFTT1VORCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJSSU5HRVJfTU9ERV9DSEFOR0VEX0FDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iUklOR0VSX01PREVfTk9STUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJSSU5HRVJfTU9ERV9TSUxFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlJJTkdFUl9NT0RFX1ZJQlJBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVVRFX0FMTCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVVRFX0JMVUVUT09USCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVVRFX0JMVUVUT09USF9BMkRQIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVVRFX0JMVUVUT09USF9TQ08iIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUk9VVEVfRUFSUElFQ0UiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJST1VURV9IRUFEU0VUIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUk9VVEVfU1BFQUtFUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNDT19BVURJT19TVEFURV9DT05ORUNURUQiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ09fQVVESU9fU1RBVEVfQ09OTkVDVElORyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ09fQVVESU9fU1RBVEVfRElTQ09OTkVDVEVEIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iU0NPX0FVRElPX1NUQVRFX0VSUk9SIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iU1RSRUFNX0FDQ0VTU0lCSUxJVFkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iU1RSRUFNX0FMQVJNIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJFQU1fRFRNRiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUkVBTV9NVVNJQyIvPgotCQk8ZmllbGQgbmFtZT0iU1RSRUFNX05PVElGSUNBVElPTiIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUkVBTV9SSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJFQU1fU1lTVEVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJFQU1fVk9JQ0VfQ0FMTCIvPgotCQk8ZmllbGQgbmFtZT0iVVNFX0RFRkFVTFRfU1RSRUFNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlZJQlJBVEVfU0VUVElOR19DSEFOR0VEX0FDVElPTiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlZJQlJBVEVfU0VUVElOR19PRkYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWSUJSQVRFX1NFVFRJTkdfT04iIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWSUJSQVRFX1NFVFRJTkdfT05MWV9TSUxFTlQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWSUJSQVRFX1RZUEVfTk9USUZJQ0FUSU9OIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVklCUkFURV9UWVBFX1JJTkdFUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL0F1ZGlvTWFuYWdlciRBdWRpb1BsYXliYWNrQ2FsbGJhY2siIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBsYXliYWNrQ29uZmlnQ2hhbmdlZChMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL0F1ZGlvTWFuYWdlciRBdWRpb1JlY29yZGluZ0NhbGxiYWNrIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZWNvcmRpbmdDb25maWdDaGFuZ2VkKExqYXZhL3V0aWwvTGlzdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXVkaW9NYW5hZ2VyJE9uQXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVyIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF1ZGlvRm9jdXNDaGFuZ2UoSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9BdWRpb1BsYXliYWNrQ29uZmlndXJhdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXVkaW9BdHRyaWJ1dGVzKClMYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXM7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9BdWRpb1ByZXNlbnRhdGlvbiIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlMamF2YS91dGlsL01hcDtMamF2YS9sYW5nL1N0cmluZztJWlpaKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhYmVscygpTGphdmEvdXRpbC9NYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxlKClMamF2YS91dGlsL0xvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXN0ZXJpbmdJbmRpY2F0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQXVkaW9EZXNjcmlwdGlvbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0RpYWxvZ3VlRW5oYW5jZW1lbnQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNTcG9rZW5TdWJ0aXRsZXMoKVoiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BU1RFUkVEX0ZPUl8zRCIvPgotCQk8ZmllbGQgbmFtZT0iTUFTVEVSRURfRk9SX0hFQURQSE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iTUFTVEVSRURfRk9SX1NURVJFTyIvPgotCQk8ZmllbGQgbmFtZT0iTUFTVEVSRURfRk9SX1NVUlJPVU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVNURVJJTkdfTk9UX0lORElDQVRFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXVkaW9SZWNvcmQiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL21lZGlhL0F1ZGlvUm91dGluZyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRPblJvdXRpbmdDaGFuZ2VkTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvQXVkaW9SZWNvcmQkT25Sb3V0aW5nQ2hhbmdlZExpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3RpdmVNaWNyb3Bob25lcygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXVkaW9Gb3JtYXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdWRpb1Nlc3Npb25JZCgpSSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXVkaW9Tb3VyY2UoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCdWZmZXJTaXplSW5GcmFtZXMoKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYW5uZWxDb25maWd1cmF0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhbm5lbENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9ybWF0KClMYW5kcm9pZC9tZWRpYS9BdWRpb0Zvcm1hdDsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldHJpY3MoKUxhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluQnVmZmVyU2l6ZShJSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5vdGlmaWNhdGlvbk1hcmtlclBvc2l0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zaXRpb25Ob3RpZmljYXRpb25QZXJpb2QoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVmZXJyZWREZXZpY2UoKUxhbmRyb2lkL21lZGlhL0F1ZGlvRGV2aWNlSW5mbzsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlY29yZGluZ1N0YXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um91dGVkRGV2aWNlKClMYW5kcm9pZC9tZWRpYS9BdWRpb0RldmljZUluZm87IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTYW1wbGVSYXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXAoTGFuZHJvaWQvbWVkaWEvQXVkaW9UaW1lc3RhbXA7SSlJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKExqYXZhL25pby9CeXRlQnVmZmVyO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWQoTGphdmEvbmlvL0J5dGVCdWZmZXI7SUkpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZChbQklJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKFtCSUlJKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWQoW0ZJSUkpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZChbU0lJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKFtTSUlJKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVPblJvdXRpbmdDaGFuZ2VkTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvQXVkaW9SZWNvcmQkT25Sb3V0aW5nQ2hhbmdlZExpc3RlbmVyOylWIiBzaW5jZT0iMjMiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Tm90aWZpY2F0aW9uTWFya2VyUG9zaXRpb24oSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9zaXRpb25Ob3RpZmljYXRpb25QZXJpb2QoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJlZmVycmVkRGV2aWNlKExhbmRyb2lkL21lZGlhL0F1ZGlvRGV2aWNlSW5mbzspWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVjb3JkUG9zaXRpb25VcGRhdGVMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9BdWRpb1JlY29yZCRPblJlY29yZFBvc2l0aW9uVXBkYXRlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWNvcmRQb3NpdGlvblVwZGF0ZUxpc3RlbmVyKExhbmRyb2lkL21lZGlhL0F1ZGlvUmVjb3JkJE9uUmVjb3JkUG9zaXRpb25VcGRhdGVMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRSZWNvcmRpbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFJlY29yZGluZyhMYW5kcm9pZC9tZWRpYS9NZWRpYVN5bmNFdmVudDspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcCgpViIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0JBRF9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfREVBRF9PQkpFQ1QiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfSU5WQUxJRF9PUEVSQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlJFQURfQkxPQ0tJTkciIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUkVBRF9OT05fQkxPQ0tJTkciIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iUkVDT1JEU1RBVEVfUkVDT1JESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNPUkRTVEFURV9TVE9QUEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9JTklUSUFMSVpFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfVU5JTklUSUFMSVpFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1VDQ0VTUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXVkaW9SZWNvcmQkQnVpbGRlciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9tZWRpYS9BdWRpb1JlY29yZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdWRpb0Zvcm1hdChMYW5kcm9pZC9tZWRpYS9BdWRpb0Zvcm1hdDspTGFuZHJvaWQvbWVkaWEvQXVkaW9SZWNvcmQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdWRpb1NvdXJjZShJKUxhbmRyb2lkL21lZGlhL0F1ZGlvUmVjb3JkJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QnVmZmVyU2l6ZUluQnl0ZXMoSSlMYW5kcm9pZC9tZWRpYS9BdWRpb1JlY29yZCRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXVkaW9SZWNvcmQkTWV0cmljc0NvbnN0YW50cyIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTFMiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ09ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRFTkNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQU1QTEVSQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT1VSQ0UiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL0F1ZGlvUmVjb3JkJE9uUmVjb3JkUG9zaXRpb25VcGRhdGVMaXN0ZW5lciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25NYXJrZXJSZWFjaGVkKExhbmRyb2lkL21lZGlhL0F1ZGlvUmVjb3JkOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QZXJpb2RpY05vdGlmaWNhdGlvbihMYW5kcm9pZC9tZWRpYS9BdWRpb1JlY29yZDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXVkaW9SZWNvcmQkT25Sb3V0aW5nQ2hhbmdlZExpc3RlbmVyIiBzaW5jZT0iMjMiIGRlcHJlY2F0ZWQ9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL21lZGlhL0F1ZGlvUm91dGluZyRPblJvdXRpbmdDaGFuZ2VkTGlzdGVuZXIiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUm91dGluZ0NoYW5nZWQoTGFuZHJvaWQvbWVkaWEvQXVkaW9SZWNvcmQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL0F1ZGlvUmVjb3JkaW5nQ29uZmlndXJhdGlvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXVkaW9EZXZpY2UoKUxhbmRyb2lkL21lZGlhL0F1ZGlvRGV2aWNlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGllbnRBdWRpb1Nlc3Npb25JZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsaWVudEF1ZGlvU291cmNlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xpZW50Rm9ybWF0KClMYW5kcm9pZC9tZWRpYS9BdWRpb0Zvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JtYXQoKUxhbmRyb2lkL21lZGlhL0F1ZGlvRm9ybWF0OyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXVkaW9Sb3V0aW5nIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkT25Sb3V0aW5nQ2hhbmdlZExpc3RlbmVyKExhbmRyb2lkL21lZGlhL0F1ZGlvUm91dGluZyRPblJvdXRpbmdDaGFuZ2VkTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWZlcnJlZERldmljZSgpTGFuZHJvaWQvbWVkaWEvQXVkaW9EZXZpY2VJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvdXRlZERldmljZSgpTGFuZHJvaWQvbWVkaWEvQXVkaW9EZXZpY2VJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU9uUm91dGluZ0NoYW5nZWRMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9BdWRpb1JvdXRpbmckT25Sb3V0aW5nQ2hhbmdlZExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJlZmVycmVkRGV2aWNlKExhbmRyb2lkL21lZGlhL0F1ZGlvRGV2aWNlSW5mbzspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXVkaW9Sb3V0aW5nJE9uUm91dGluZ0NoYW5nZWRMaXN0ZW5lciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUm91dGluZ0NoYW5nZWQoTGFuZHJvaWQvbWVkaWEvQXVkaW9Sb3V0aW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9BdWRpb1RpbWVzdGFtcCIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iVElNRUJBU0VfQk9PVFRJTUUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVElNRUJBU0VfTU9OT1RPTklDIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9ImZyYW1lUG9zaXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9Im5hbm9UaW1lIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9BdWRpb1JvdXRpbmciIHNpbmNlPSIyNCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL21lZGlhL1ZvbHVtZUF1dG9tYXRpb24iIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSUkpViIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJSUlJSSlWIiBzaW5jZT0iOSIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbWVkaWEvQXVkaW9BdHRyaWJ1dGVzO0xhbmRyb2lkL21lZGlhL0F1ZGlvRm9ybWF0O0lJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRPblJvdXRpbmdDaGFuZ2VkTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvQXVkaW9UcmFjayRPblJvdXRpbmdDaGFuZ2VkTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjIzIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImF0dGFjaEF1eEVmZmVjdChJKUkiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmx1c2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdWRpb0Zvcm1hdCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1ZGlvU2Vzc2lvbklkKClJIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1ZmZlckNhcGFjaXR5SW5GcmFtZXMoKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1ZmZlclNpemVJbkZyYW1lcygpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhbm5lbENvbmZpZ3VyYXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFubmVsQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JtYXQoKUxhbmRyb2lkL21lZGlhL0F1ZGlvRm9ybWF0OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4Vm9sdW1lKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0cmljcygpTGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5CdWZmZXJTaXplKElJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluVm9sdW1lKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmF0aXZlRnJhbWVDb3VudCgpSSIgZGVwcmVjYXRlZD0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYXRpdmVPdXRwdXRTYW1wbGVSYXRlKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5vdGlmaWNhdGlvbk1hcmtlclBvc2l0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVyZm9ybWFuY2VNb2RlKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQbGF5U3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQbGF5YmFja0hlYWRQb3NpdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBsYXliYWNrUGFyYW1zKClMYW5kcm9pZC9tZWRpYS9QbGF5YmFja1BhcmFtczsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBsYXliYWNrUmF0ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvc2l0aW9uTm90aWZpY2F0aW9uUGVyaW9kKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlZmVycmVkRGV2aWNlKClMYW5kcm9pZC9tZWRpYS9BdWRpb0RldmljZUluZm87IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3V0ZWREZXZpY2UoKUxhbmRyb2lkL21lZGlhL0F1ZGlvRGV2aWNlSW5mbzsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNhbXBsZVJhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmVhbVR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXAoTGFuZHJvaWQvbWVkaWEvQXVkaW9UaW1lc3RhbXA7KVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVuZGVycnVuQ291bnQoKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhdXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGxheSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxvYWRTdGF0aWNEYXRhKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlT25Sb3V0aW5nQ2hhbmdlZExpc3RlbmVyKExhbmRyb2lkL21lZGlhL0F1ZGlvVHJhY2skT25Sb3V0aW5nQ2hhbmdlZExpc3RlbmVyOylWIiBzaW5jZT0iMjMiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV4RWZmZWN0U2VuZExldmVsKEYpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCdWZmZXJTaXplSW5GcmFtZXMoSSlJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb29wUG9pbnRzKElJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Tm90aWZpY2F0aW9uTWFya2VyUG9zaXRpb24oSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGxheWJhY2tIZWFkUG9zaXRpb24oSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGxheWJhY2tQYXJhbXMoTGFuZHJvaWQvbWVkaWEvUGxheWJhY2tQYXJhbXM7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBsYXliYWNrUG9zaXRpb25VcGRhdGVMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrJE9uUGxheWJhY2tQb3NpdGlvblVwZGF0ZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGxheWJhY2tQb3NpdGlvblVwZGF0ZUxpc3RlbmVyKExhbmRyb2lkL21lZGlhL0F1ZGlvVHJhY2skT25QbGF5YmFja1Bvc2l0aW9uVXBkYXRlTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBsYXliYWNrUmF0ZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb3NpdGlvbk5vdGlmaWNhdGlvblBlcmlvZChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmVmZXJyZWREZXZpY2UoTGFuZHJvaWQvbWVkaWEvQXVkaW9EZXZpY2VJbmZvOylaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmVzZW50YXRpb24oTGFuZHJvaWQvbWVkaWEvQXVkaW9QcmVzZW50YXRpb247KUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXRlKEkpViIgZGVwcmVjYXRlZD0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGVyZW9Wb2x1bWUoRkYpSSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWb2x1bWUoRilJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7SUkpSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7SUlKKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKFtCSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKFtCSUlJKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKFtGSUlJKUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKFtTSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKFtTSUlJKUkiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0JBRF9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfREVBRF9PQkpFQ1QiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfSU5WQUxJRF9PUEVSQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfU1RBVElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX1NUUkVBTSIvPgotCQk8ZmllbGQgbmFtZT0iUEVSRk9STUFOQ0VfTU9ERV9MT1dfTEFURU5DWSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQRVJGT1JNQU5DRV9NT0RFX05PTkUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUEVSRk9STUFOQ0VfTU9ERV9QT1dFUl9TQVZJTkciIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUExBWVNUQVRFX1BBVVNFRCIvPgotCQk8ZmllbGQgbmFtZT0iUExBWVNUQVRFX1BMQVlJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlBMQVlTVEFURV9TVE9QUEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9JTklUSUFMSVpFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfTk9fU1RBVElDX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX1VOSU5JVElBTElaRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVQ0NFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IldSSVRFX0JMT0NLSU5HIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IldSSVRFX05PTl9CTE9DS0lORyIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrJEJ1aWxkZXIiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvbWVkaWEvQXVkaW9UcmFjazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdWRpb0F0dHJpYnV0ZXMoTGFuZHJvaWQvbWVkaWEvQXVkaW9BdHRyaWJ1dGVzOylMYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXVkaW9Gb3JtYXQoTGFuZHJvaWQvbWVkaWEvQXVkaW9Gb3JtYXQ7KUxhbmRyb2lkL21lZGlhL0F1ZGlvVHJhY2skQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCdWZmZXJTaXplSW5CeXRlcyhJKUxhbmRyb2lkL21lZGlhL0F1ZGlvVHJhY2skQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQZXJmb3JtYW5jZU1vZGUoSSlMYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrJEJ1aWxkZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZXNzaW9uSWQoSSlMYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhbnNmZXJNb2RlKEkpTGFuZHJvaWQvbWVkaWEvQXVkaW9UcmFjayRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXVkaW9UcmFjayRNZXRyaWNzQ29uc3RhbnRzIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVFRZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNBTVBMRVJBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUkVBTVRZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQUdFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrJE9uUGxheWJhY2tQb3NpdGlvblVwZGF0ZUxpc3RlbmVyIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1hcmtlclJlYWNoZWQoTGFuZHJvaWQvbWVkaWEvQXVkaW9UcmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGVyaW9kaWNOb3RpZmljYXRpb24oTGFuZHJvaWQvbWVkaWEvQXVkaW9UcmFjazspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXVkaW9UcmFjayRPblJvdXRpbmdDaGFuZ2VkTGlzdGVuZXIiIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvQXVkaW9Sb3V0aW5nJE9uUm91dGluZ0NoYW5nZWRMaXN0ZW5lciIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Sb3V0aW5nQ2hhbmdlZChMYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9DYW1jb3JkZXJQcm9maWxlIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJSUlJSUlJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoSSlMYW5kcm9pZC9tZWRpYS9DYW1jb3JkZXJQcm9maWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChJSSlMYW5kcm9pZC9tZWRpYS9DYW1jb3JkZXJQcm9maWxlOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNQcm9maWxlKEkpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzUHJvZmlsZShJSSlaIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxJVFlfMTA4MFAiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iUVVBTElUWV8yMTYwUCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMSVRZXzQ4MFAiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iUVVBTElUWV83MjBQIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxJVFlfQ0lGIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxJVFlfSElHSCIvPgotCQk8ZmllbGQgbmFtZT0iUVVBTElUWV9ISUdIX1NQRUVEXzEwODBQIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxJVFlfSElHSF9TUEVFRF8yMTYwUCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMSVRZX0hJR0hfU1BFRURfNDgwUCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMSVRZX0hJR0hfU1BFRURfNzIwUCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMSVRZX0hJR0hfU1BFRURfSElHSCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMSVRZX0hJR0hfU1BFRURfTE9XIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxJVFlfTE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMSVRZX1FDSUYiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iUVVBTElUWV9RVkdBIiBzaW5jZT0iMTUiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxJVFlfVElNRV9MQVBTRV8xMDgwUCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMSVRZX1RJTUVfTEFQU0VfMjE2MFAiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUVVBTElUWV9USU1FX0xBUFNFXzQ4MFAiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iUVVBTElUWV9USU1FX0xBUFNFXzcyMFAiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iUVVBTElUWV9USU1FX0xBUFNFX0NJRiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMSVRZX1RJTUVfTEFQU0VfSElHSCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMSVRZX1RJTUVfTEFQU0VfTE9XIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxJVFlfVElNRV9MQVBTRV9RQ0lGIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxJVFlfVElNRV9MQVBTRV9RVkdBIiBzaW5jZT0iMTUiLz4KLQkJPGZpZWxkIG5hbWU9ImF1ZGlvQml0UmF0ZSIvPgotCQk8ZmllbGQgbmFtZT0iYXVkaW9DaGFubmVscyIvPgotCQk8ZmllbGQgbmFtZT0iYXVkaW9Db2RlYyIvPgotCQk8ZmllbGQgbmFtZT0iYXVkaW9TYW1wbGVSYXRlIi8+Ci0JCTxmaWVsZCBuYW1lPSJkdXJhdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0iZmlsZUZvcm1hdCIvPgotCQk8ZmllbGQgbmFtZT0icXVhbGl0eSIvPgotCQk8ZmllbGQgbmFtZT0idmlkZW9CaXRSYXRlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2aWRlb0NvZGVjIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2aWRlb0ZyYW1lSGVpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ2aWRlb0ZyYW1lUmF0ZSIvPgotCQk8ZmllbGQgbmFtZT0idmlkZW9GcmFtZVdpZHRoIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9DYW1lcmFQcm9maWxlIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRKcGVnRW5jb2RpbmdRdWFsaXR5UGFyYW1ldGVyKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEpwZWdFbmNvZGluZ1F1YWxpdHlQYXJhbWV0ZXIoSUkpSSIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxJVFlfSElHSCIvPgotCQk8ZmllbGQgbmFtZT0iUVVBTElUWV9MT1ciLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxJVFlfTUVESVVNIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9EZW5pZWRCeVNlcnZlckV4Y2VwdGlvbiIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYURybUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvRHJtSW5pdERhdGEiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvdXRpbC9VVUlEOylMYW5kcm9pZC9tZWRpYS9Ecm1Jbml0RGF0YSRTY2hlbWVJbml0RGF0YTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL0RybUluaXREYXRhJFNjaGVtZUluaXREYXRhIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztbQilWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9ImRhdGEiLz4KLQkJPGZpZWxkIG5hbWU9Im1pbWVUeXBlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9FeGlmSW50ZXJmYWNlIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWx0aXR1ZGUoRClEIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlRG91YmxlKExqYXZhL2xhbmcvU3RyaW5nO0QpRCIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVJbnQoTGphdmEvbGFuZy9TdHJpbmc7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF0TG9uZyhbRilaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGh1bWJuYWlsKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRodW1ibmFpbEJpdG1hcCgpTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGh1bWJuYWlsQnl0ZXMoKVtCIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHVtYm5haWxSYW5nZSgpW0oiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1RodW1ibmFpbCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVGh1bWJuYWlsQ29tcHJlc3NlZCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2F2ZUF0dHJpYnV0ZXMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdHRyaWJ1dGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9SSUVOVEFUSU9OX0ZMSVBfSE9SSVpPTlRBTCIvPgotCQk8ZmllbGQgbmFtZT0iT1JJRU5UQVRJT05fRkxJUF9WRVJUSUNBTCIvPgotCQk8ZmllbGQgbmFtZT0iT1JJRU5UQVRJT05fTk9STUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUklFTlRBVElPTl9ST1RBVEVfMTgwIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUklFTlRBVElPTl9ST1RBVEVfMjcwIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUklFTlRBVElPTl9ST1RBVEVfOTAiLz4KLQkJPGZpZWxkIG5hbWU9Ik9SSUVOVEFUSU9OX1RSQU5TUE9TRSIvPgotCQk8ZmllbGQgbmFtZT0iT1JJRU5UQVRJT05fVFJBTlNWRVJTRSIvPgotCQk8ZmllbGQgbmFtZT0iT1JJRU5UQVRJT05fVU5ERUZJTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfQVBFUlRVUkUiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19BUEVSVFVSRV9WQUxVRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfQVJUSVNUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19CSVRTX1BFUl9TQU1QTEUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0JSSUdIVE5FU1NfVkFMVUUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0NGQV9QQVRURVJOIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19DT0xPUl9TUEFDRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfQ09NUE9ORU5UU19DT05GSUdVUkFUSU9OIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19DT01QUkVTU0VEX0JJVFNfUEVSX1BJWEVMIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19DT01QUkVTU0lPTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfQ09OVFJBU1QiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0NPUFlSSUdIVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfQ1VTVE9NX1JFTkRFUkVEIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19EQVRFVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0RBVEVUSU1FX0RJR0lUSVpFRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfREFURVRJTUVfT1JJR0lOQUwiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0RFRkFVTFRfQ1JPUF9TSVpFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19ERVZJQ0VfU0VUVElOR19ERVNDUklQVElPTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfRElHSVRBTF9aT09NX1JBVElPIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19ETkdfVkVSU0lPTiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfRVhJRl9WRVJTSU9OIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19FWFBPU1VSRV9CSUFTX1ZBTFVFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19FWFBPU1VSRV9JTkRFWCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfRVhQT1NVUkVfTU9ERSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfRVhQT1NVUkVfUFJPR1JBTSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfRVhQT1NVUkVfVElNRSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfRklMRV9TT1VSQ0UiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0ZMQVNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfRkxBU0hQSVhfVkVSU0lPTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfRkxBU0hfRU5FUkdZIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19GT0NBTF9MRU5HVEgiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfRk9DQUxfTEVOR1RIX0lOXzM1TU1fRklMTSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfRk9DQUxfUExBTkVfUkVTT0xVVElPTl9VTklUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19GT0NBTF9QTEFORV9YX1JFU09MVVRJT04iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0ZPQ0FMX1BMQU5FX1lfUkVTT0xVVElPTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfRl9OVU1CRVIiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0dBSU5fQ09OVFJPTCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfR1BTX0FMVElUVURFIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0dQU19BTFRJVFVERV9SRUYiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfR1BTX0FSRUFfSU5GT1JNQVRJT04iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0dQU19EQVRFU1RBTVAiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfR1BTX0RFU1RfQkVBUklORyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfR1BTX0RFU1RfQkVBUklOR19SRUYiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0dQU19ERVNUX0RJU1RBTkNFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19HUFNfREVTVF9ESVNUQU5DRV9SRUYiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0dQU19ERVNUX0xBVElUVURFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19HUFNfREVTVF9MQVRJVFVERV9SRUYiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0dQU19ERVNUX0xPTkdJVFVERSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfR1BTX0RFU1RfTE9OR0lUVURFX1JFRiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfR1BTX0RJRkZFUkVOVElBTCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfR1BTX0RPUCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfR1BTX0lNR19ESVJFQ1RJT04iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0dQU19JTUdfRElSRUNUSU9OX1JFRiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfR1BTX0xBVElUVURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfR1BTX0xBVElUVURFX1JFRiIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0dQU19MT05HSVRVREUiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19HUFNfTE9OR0lUVURFX1JFRiIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0dQU19NQVBfREFUVU0iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0dQU19NRUFTVVJFX01PREUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0dQU19QUk9DRVNTSU5HX01FVEhPRCIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19HUFNfU0FURUxMSVRFUyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfR1BTX1NQRUVEIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19HUFNfU1BFRURfUkVGIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19HUFNfU1RBVFVTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19HUFNfVElNRVNUQU1QIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0dQU19UUkFDSyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfR1BTX1RSQUNLX1JFRiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfR1BTX1ZFUlNJT05fSUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0lNQUdFX0RFU0NSSVBUSU9OIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19JTUFHRV9MRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19JTUFHRV9VTklRVUVfSUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0lNQUdFX1dJRFRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfSU5URVJPUEVSQUJJTElUWV9JTkRFWCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfSVNPIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfSVNPX1NQRUVEX1JBVElOR1MiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0pQRUdfSU5URVJDSEFOR0VfRk9STUFUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19KUEVHX0lOVEVSQ0hBTkdFX0ZPUk1BVF9MRU5HVEgiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX0xJR0hUX1NPVVJDRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfTUFLRSIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX01BS0VSX05PVEUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX01BWF9BUEVSVFVSRV9WQUxVRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfTUVURVJJTkdfTU9ERSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfTU9ERUwiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19ORVdfU1VCRklMRV9UWVBFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19PRUNGIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19PUkZfQVNQRUNUX0ZSQU1FIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19PUkZfUFJFVklFV19JTUFHRV9MRU5HVEgiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX09SRl9QUkVWSUVXX0lNQUdFX1NUQVJUIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19PUkZfVEhVTUJOQUlMX0lNQUdFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19PUklFTlRBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1BIT1RPTUVUUklDX0lOVEVSUFJFVEFUSU9OIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19QSVhFTF9YX0RJTUVOU0lPTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfUElYRUxfWV9ESU1FTlNJT04iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1BMQU5BUl9DT05GSUdVUkFUSU9OIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19QUklNQVJZX0NIUk9NQVRJQ0lUSUVTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19SRUZFUkVOQ0VfQkxBQ0tfV0hJVEUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1JFTEFURURfU09VTkRfRklMRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfUkVTT0xVVElPTl9VTklUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19ST1dTX1BFUl9TVFJJUCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfUlcyX0lTTyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfUlcyX0pQR19GUk9NX1JBVyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfUlcyX1NFTlNPUl9CT1RUT01fQk9SREVSIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19SVzJfU0VOU09SX0xFRlRfQk9SREVSIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19SVzJfU0VOU09SX1JJR0hUX0JPUkRFUiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfUlcyX1NFTlNPUl9UT1BfQk9SREVSIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19TQU1QTEVTX1BFUl9QSVhFTCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfU0FUVVJBVElPTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfU0NFTkVfQ0FQVFVSRV9UWVBFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19TQ0VORV9UWVBFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19TRU5TSU5HX01FVEhPRCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfU0hBUlBORVNTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19TSFVUVEVSX1NQRUVEX1ZBTFVFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19TT0ZUV0FSRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfU1BBVElBTF9GUkVRVUVOQ1lfUkVTUE9OU0UiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1NQRUNUUkFMX1NFTlNJVElWSVRZIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19TVFJJUF9CWVRFX0NPVU5UUyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfU1RSSVBfT0ZGU0VUUyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfU1VCRklMRV9UWVBFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19TVUJKRUNUX0FSRUEiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1NVQkpFQ1RfRElTVEFOQ0UiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1NVQkpFQ1RfRElTVEFOQ0VfUkFOR0UiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1NVQkpFQ1RfTE9DQVRJT04iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1NVQlNFQ19USU1FIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19TVUJTRUNfVElNRV9ESUciIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19TVUJTRUNfVElNRV9ESUdJVElaRUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1NVQlNFQ19USU1FX09SSUciIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19TVUJTRUNfVElNRV9PUklHSU5BTCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfVEhVTUJOQUlMX0lNQUdFX0xFTkdUSCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfVEhVTUJOQUlMX0lNQUdFX1dJRFRIIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19UUkFOU0ZFUl9GVU5DVElPTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfVVNFUl9DT01NRU5UIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19XSElURV9CQUxBTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfV0hJVEVfUE9JTlQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1hfUkVTT0xVVElPTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdfWV9DQl9DUl9DT0VGRklDSUVOVFMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1lfQ0JfQ1JfUE9TSVRJT05JTkciIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVEFHX1lfQ0JfQ1JfU1VCX1NBTVBMSU5HIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR19ZX1JFU09MVVRJT04iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iV0hJVEVCQUxBTkNFX0FVVE8iLz4KLQkJPGZpZWxkIG5hbWU9IldISVRFQkFMQU5DRV9NQU5VQUwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL0ZhY2VEZXRlY3RvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEZhY2VzKExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtbTGFuZHJvaWQvbWVkaWEvRmFjZURldGVjdG9yJEZhY2U7KUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL0ZhY2VEZXRlY3RvciRGYWNlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbWVkaWEvRmFjZURldGVjdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29uZmlkZW5jZSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImV5ZXNEaXN0YW5jZSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pZFBvaW50KExhbmRyb2lkL2dyYXBoaWNzL1BvaW50RjspViIvPgotCQk8bWV0aG9kIG5hbWU9InBvc2UoSSlGIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05GSURFTkNFX1RIUkVTSE9MRCIvPgotCQk8ZmllbGQgbmFtZT0iRVVMRVJfWCIvPgotCQk8ZmllbGQgbmFtZT0iRVVMRVJfWSIvPgotCQk8ZmllbGQgbmFtZT0iRVVMRVJfWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvSW1hZ2UiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDcm9wUmVjdCgpTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcm1hdCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhhcmR3YXJlQnVmZmVyKClMYW5kcm9pZC9oYXJkd2FyZS9IYXJkd2FyZUJ1ZmZlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBsYW5lcygpW0xhbmRyb2lkL21lZGlhL0ltYWdlJFBsYW5lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVzdGFtcCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpZHRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3JvcFJlY3QoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZXN0YW1wKEopViIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9JbWFnZSRQbGFuZSIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1ZmZlcigpTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGl4ZWxTdHJpZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3dTdHJpZGUoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL0ltYWdlUmVhZGVyIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BdXRvQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSilWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3F1aXJlTGF0ZXN0SW1hZ2UoKUxhbmRyb2lkL21lZGlhL0ltYWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFjcXVpcmVOZXh0SW1hZ2UoKUxhbmRyb2lkL21lZGlhL0ltYWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2NhcmRGcmVlQnVmZmVycygpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGVpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1hZ2VGb3JtYXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhJbWFnZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXJmYWNlKClMYW5kcm9pZC92aWV3L1N1cmZhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShJSUlJKUxhbmRyb2lkL21lZGlhL0ltYWdlUmVhZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uSW1hZ2VBdmFpbGFibGVMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9JbWFnZVJlYWRlciRPbkltYWdlQXZhaWxhYmxlTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvSW1hZ2VSZWFkZXIkT25JbWFnZUF2YWlsYWJsZUxpc3RlbmVyIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25JbWFnZUF2YWlsYWJsZShMYW5kcm9pZC9tZWRpYS9JbWFnZVJlYWRlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvSW1hZ2VXcml0ZXIiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvU3VyZmFjZTtJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXF1ZXVlSW5wdXRJbWFnZSgpTGFuZHJvaWQvbWVkaWEvSW1hZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9ybWF0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4SW1hZ2VzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SW5zdGFuY2UoTGFuZHJvaWQvdmlldy9TdXJmYWNlO0kpTGFuZHJvaWQvbWVkaWEvSW1hZ2VXcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVldWVJbnB1dEltYWdlKExhbmRyb2lkL21lZGlhL0ltYWdlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25JbWFnZVJlbGVhc2VkTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvSW1hZ2VXcml0ZXIkT25JbWFnZVJlbGVhc2VkTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvSW1hZ2VXcml0ZXIkT25JbWFnZVJlbGVhc2VkTGlzdGVuZXIiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkltYWdlUmVsZWFzZWQoTGFuZHJvaWQvbWVkaWEvSW1hZ2VXcml0ZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL0pldFBsYXllciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJRdWV1ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlSmV0RmlsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEpldFBsYXllcigpTGFuZHJvaWQvbWVkaWEvSmV0UGxheWVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFRyYWNrcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRKZXRGaWxlKExhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3I7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkSmV0RmlsZShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhdXNlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGxheSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXVlSmV0U2VnbWVudChJSUlJSUIpWiIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXVlSmV0U2VnbWVudE11dGVBcnJheShJSUlJW1pCKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXZlbnRMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9KZXRQbGF5ZXIkT25KZXRFdmVudExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXZlbnRMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9KZXRQbGF5ZXIkT25KZXRFdmVudExpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNdXRlQXJyYXkoW1paKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNdXRlRmxhZyhJWlopWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldE11dGVGbGFncyhJWilaIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJpZ2dlckNsaXAoSSlaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9KZXRQbGF5ZXIkT25KZXRFdmVudExpc3RlbmVyIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkpldEV2ZW50KExhbmRyb2lkL21lZGlhL0pldFBsYXllcjtTQkJCQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25KZXROdW1RdWV1ZWRTZWdtZW50VXBkYXRlKExhbmRyb2lkL21lZGlhL0pldFBsYXllcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkpldFBhdXNlVXBkYXRlKExhbmRyb2lkL21lZGlhL0pldFBsYXllcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkpldFVzZXJJZFVwZGF0ZShMYW5kcm9pZC9tZWRpYS9KZXRQbGF5ZXI7SUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFBY3Rpb25Tb3VuZCIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGxheShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT0NVU19DT01QTEVURSIvPgotCQk8ZmllbGQgbmFtZT0iU0hVVFRFUl9DTElDSyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBUlRfVklERU9fUkVDT1JESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVE9QX1ZJREVPX1JFQ09SRElORyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFDYXMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW51bWVyYXRlUGx1Z2lucygpW0xhbmRyb2lkL21lZGlhL01lZGlhQ2FzJFBsdWdpbkRlc2NyaXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTeXN0ZW1JZFN1cHBvcnRlZChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuU2Vzc2lvbigpTGFuZHJvaWQvbWVkaWEvTWVkaWFDYXMkU2Vzc2lvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm9jZXNzRW1tKFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm9jZXNzRW1tKFtCSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InByb3Zpc2lvbihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZnJlc2hFbnRpdGxlbWVudHMoSVtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kRXZlbnQoSUlbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXZlbnRMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9NZWRpYUNhcyRFdmVudExpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcml2YXRlRGF0YShbQilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYUNhcyRFdmVudExpc3RlbmVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25FdmVudChMYW5kcm9pZC9tZWRpYS9NZWRpYUNhcztJSVtCKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhQ2FzJFBsdWdpbkRlc2NyaXB0b3IiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1JZCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFDYXMkU2Vzc2lvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQXV0b0Nsb3NlYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9NZWRpYUNhczspViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbWVkaWEvTWVkaWFDYXM7TGphdmEvdXRpbC9BcnJheUxpc3Q7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9InByb2Nlc3NFY20oW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9InByb2Nlc3NFY20oW0JJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJpdmF0ZURhdGEoW0IpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFDYXNFeGNlcHRpb24iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhQ2FzRXhjZXB0aW9uJERlbmllZEJ5U2VydmVyRXhjZXB0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhQ2FzRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYUNhc0V4Y2VwdGlvbiROb3RQcm92aXNpb25lZEV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYUNhc0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFDYXNFeGNlcHRpb24kUmVzb3VyY2VCdXN5RXhjZXB0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhQ2FzRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYUNhc0V4Y2VwdGlvbiRVbnN1cHBvcnRlZENhc0V4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYUNhc0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFDYXNTdGF0ZUV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaWFnbm9zdGljSW5mbygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztaWilWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25maWd1cmUoTGFuZHJvaWQvbWVkaWEvTWVkaWFGb3JtYXQ7TGFuZHJvaWQvdmlldy9TdXJmYWNlO0lMYW5kcm9pZC9tZWRpYS9NZWRpYURlc2NyYW1ibGVyOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25maWd1cmUoTGFuZHJvaWQvbWVkaWEvTWVkaWFGb3JtYXQ7TGFuZHJvaWQvdmlldy9TdXJmYWNlO0xhbmRyb2lkL21lZGlhL01lZGlhQ3J5cHRvO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUJ5Q29kZWNOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZURlY29kZXJCeVR5cGUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL21lZGlhL01lZGlhQ29kZWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRW5jb2RlckJ5VHlwZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVJbnB1dFN1cmZhY2UoKUxhbmRyb2lkL3ZpZXcvU3VyZmFjZTsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVBlcnNpc3RlbnRJbnB1dFN1cmZhY2UoKUxhbmRyb2lkL3ZpZXcvU3VyZmFjZTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlcXVldWVJbnB1dEJ1ZmZlcihKKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXF1ZXVlT3V0cHV0QnVmZmVyKExhbmRyb2lkL21lZGlhL01lZGlhQ29kZWMkQnVmZmVySW5mbztKKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvZGVjSW5mbygpTGFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlY0luZm87IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dEJ1ZmZlcihJKUxqYXZhL25pby9CeXRlQnVmZmVyOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRCdWZmZXJzKClbTGphdmEvbmlvL0J5dGVCdWZmZXI7IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0Rm9ybWF0KClMYW5kcm9pZC9tZWRpYS9NZWRpYUZvcm1hdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0SW1hZ2UoSSlMYW5kcm9pZC9tZWRpYS9JbWFnZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldHJpY3MoKUxhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRwdXRCdWZmZXIoSSlMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE91dHB1dEJ1ZmZlcnMoKVtMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3V0cHV0Rm9ybWF0KClMYW5kcm9pZC9tZWRpYS9NZWRpYUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRwdXRGb3JtYXQoSSlMYW5kcm9pZC9tZWRpYS9NZWRpYUZvcm1hdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE91dHB1dEltYWdlKEkpTGFuZHJvaWQvbWVkaWEvSW1hZ2U7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWV1ZUlucHV0QnVmZmVyKElJSUpJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWV1ZVNlY3VyZUlucHV0QnVmZmVyKElJTGFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYyRDcnlwdG9JbmZvO0pJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZU91dHB1dEJ1ZmZlcihJSilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlT3V0cHV0QnVmZmVyKElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FsbGJhY2soTGFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYyRDYWxsYmFjazspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FsbGJhY2soTGFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYyRDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dFN1cmZhY2UoTGFuZHJvaWQvdmlldy9TdXJmYWNlOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkZyYW1lUmVuZGVyZWRMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjJE9uRnJhbWVSZW5kZXJlZExpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE91dHB1dFN1cmZhY2UoTGFuZHJvaWQvdmlldy9TdXJmYWNlOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXJhbWV0ZXJzKExhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlkZW9TY2FsaW5nTW9kZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaWduYWxFbmRPZklucHV0U3RyZWFtKClWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3AoKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkJVRkZFUl9GTEFHX0NPREVDX0NPTkZJRyIvPgotCQk8ZmllbGQgbmFtZT0iQlVGRkVSX0ZMQUdfRU5EX09GX1NUUkVBTSIvPgotCQk8ZmllbGQgbmFtZT0iQlVGRkVSX0ZMQUdfS0VZX0ZSQU1FIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkJVRkZFUl9GTEFHX1BBUlRJQUxfRlJBTUUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQlVGRkVSX0ZMQUdfU1lOQ19GUkFNRSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkZJR1VSRV9GTEFHX0VOQ09ERSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JZUFRPX01PREVfQUVTX0NCQyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUllQVE9fTU9ERV9BRVNfQ1RSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUllQVE9fTU9ERV9VTkVOQ1JZUFRFRCIvPgotCQk8ZmllbGQgbmFtZT0iSU5GT19PVVRQVVRfQlVGRkVSU19DSEFOR0VEIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iSU5GT19PVVRQVVRfRk9STUFUX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IklORk9fVFJZX0FHQUlOX0xBVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJBTUVURVJfS0VZX1JFUVVFU1RfU1lOQ19GUkFNRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJBTUVURVJfS0VZX1NVU1BFTkQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQU1FVEVSX0tFWV9WSURFT19CSVRSQVRFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlZJREVPX1NDQUxJTkdfTU9ERV9TQ0FMRV9UT19GSVQiLz4KLQkJPGZpZWxkIG5hbWU9IlZJREVPX1NDQUxJTkdfTU9ERV9TQ0FMRV9UT19GSVRfV0lUSF9DUk9QUElORyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYyRCdWZmZXJJbmZvIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KElJSkkpViIvPgotCQk8ZmllbGQgbmFtZT0iZmxhZ3MiLz4KLQkJPGZpZWxkIG5hbWU9Im9mZnNldCIvPgotCQk8ZmllbGQgbmFtZT0icHJlc2VudGF0aW9uVGltZVVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzaXplIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjJENhbGxiYWNrIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25FcnJvcihMYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjO0xhbmRyb2lkL21lZGlhL01lZGlhQ29kZWMkQ29kZWNFeGNlcHRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbklucHV0QnVmZmVyQXZhaWxhYmxlKExhbmRyb2lkL21lZGlhL01lZGlhQ29kZWM7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25PdXRwdXRCdWZmZXJBdmFpbGFibGUoTGFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYztJTGFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYyRCdWZmZXJJbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25PdXRwdXRGb3JtYXRDaGFuZ2VkKExhbmRyb2lkL21lZGlhL01lZGlhQ29kZWM7TGFuZHJvaWQvbWVkaWEvTWVkaWFGb3JtYXQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhQ29kZWMkQ29kZWNFeGNlcHRpb24iIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpYWdub3N0aWNJbmZvKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcnJvckNvZGUoKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVjb3ZlcmFibGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RyYW5zaWVudCgpWiIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfSU5TVUZGSUNJRU5UX1JFU09VUkNFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1JFQ0xBSU1FRCIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjJENyeXB0b0V4Y2VwdGlvbiIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXJyb3JDb2RlKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9JTlNVRkZJQ0lFTlRfT1VUUFVUX1BST1RFQ1RJT04iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfS0VZX0VYUElSRUQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTk9fS0VZIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1JFU09VUkNFX0JVU1kiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfU0VTU0lPTl9OT1RfT1BFTkVEIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1VOU1VQUE9SVEVEX09QRVJBVElPTiIgc2luY2U9IjI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjJENyeXB0b0luZm8iIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoSVtJW0lbQltCSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGF0dGVybihMYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjJENyeXB0b0luZm8kUGF0dGVybjspViIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpdiIvPgotCQk8ZmllbGQgbmFtZT0ia2V5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtb2RlIi8+Ci0JCTxmaWVsZCBuYW1lPSJudW1CeXRlc09mQ2xlYXJEYXRhIi8+Ci0JCTxmaWVsZCBuYW1lPSJudW1CeXRlc09mRW5jcnlwdGVkRGF0YSIvPgotCQk8ZmllbGQgbmFtZT0ibnVtU3ViU2FtcGxlcyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYyRDcnlwdG9JbmZvJFBhdHRlcm4iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY3J5cHRCbG9ja3MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTa2lwQmxvY2tzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KElJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhQ29kZWMkTWV0cmljc0NvbnN0YW50cyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09ERUMiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ09ERVIiLz4KLQkJPGZpZWxkIG5hbWU9IkhFSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iTUlNRV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX0FVRElPIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX1ZJREVPIi8+Ci0JCTxmaWVsZCBuYW1lPSJST1RBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iU0VDVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSURUSCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYyRPbkZyYW1lUmVuZGVyZWRMaXN0ZW5lciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRnJhbWVSZW5kZXJlZChMYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjO0pKKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhQ29kZWNJbmZvIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztaW0xhbmRyb2lkL21lZGlhL01lZGlhQ29kZWNJbmZvJENvZGVjQ2FwYWJpbGl0aWVzOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYXBhYmlsaXRpZXNGb3JUeXBlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjSW5mbyRDb2RlY0NhcGFiaWxpdGllczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRUeXBlcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5jb2RlcigpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlY0luZm8kQXVkaW9DYXBhYmlsaXRpZXMiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCaXRyYXRlUmFuZ2UoKUxhbmRyb2lkL3V0aWwvUmFuZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4SW5wdXRDaGFubmVsQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRTYW1wbGVSYXRlUmFuZ2VzKClbTGFuZHJvaWQvdXRpbC9SYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRTYW1wbGVSYXRlcygpW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NhbXBsZVJhdGVTdXBwb3J0ZWQoSSlaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjSW5mbyRDb2RlY0NhcGFiaWxpdGllcyIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUZyb21Qcm9maWxlTGV2ZWwoTGphdmEvbGFuZy9TdHJpbmc7SUkpTGFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlY0luZm8kQ29kZWNDYXBhYmlsaXRpZXM7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdWRpb0NhcGFiaWxpdGllcygpTGFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlY0luZm8kQXVkaW9DYXBhYmlsaXRpZXM7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0Rm9ybWF0KClMYW5kcm9pZC9tZWRpYS9NZWRpYUZvcm1hdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY29kZXJDYXBhYmlsaXRpZXMoKUxhbmRyb2lkL21lZGlhL01lZGlhQ29kZWNJbmZvJEVuY29kZXJDYXBhYmlsaXRpZXM7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhTdXBwb3J0ZWRJbnN0YW5jZXMoKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbWVUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZGVvQ2FwYWJpbGl0aWVzKClMYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjSW5mbyRWaWRlb0NhcGFiaWxpdGllczsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmVhdHVyZVJlcXVpcmVkKExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZlYXR1cmVTdXBwb3J0ZWQoTGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRm9ybWF0U3VwcG9ydGVkKExhbmRyb2lkL21lZGlhL01lZGlhRm9ybWF0OylaIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdDEyYml0UkdCNDQ0IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0MTZiaXRBUkdCMTU1NSIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdDE2Yml0QVJHQjQ0NDQiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXQxNmJpdEJHUjU2NSIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdDE2Yml0UkdCNTY1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXQxOEJpdEJHUjY2NiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdDE4Yml0QVJHQjE2NjUiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXQxOGJpdFJHQjY2NiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdDE5Yml0QVJHQjE2NjYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXQyNEJpdEFCR1I2NjY2IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0MjRCaXRBUkdCNjY2NiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdDI0Yml0QVJHQjE4ODciIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXQyNGJpdEJHUjg4OCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0MjRiaXRSR0I4ODgiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXQyNWJpdEFSR0IxODg4IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0MzJiaXRBQkdSODg4OCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXQzMmJpdEFSR0I4ODg4IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0MzJiaXRCR1JBODg4OCIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdDhiaXRSR0IzMzIiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXRDYllDclkiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXRDcllDYlkiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXRMMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdEwyIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0TDI0IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0TDMyIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0TDQiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXRMOCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0TW9ub2Nocm9tZSIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdFJHQkFGbGV4aWJsZSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXRSR0JGbGV4aWJsZSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXRSYXdCYXllcjEwYml0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXRSYXdCYXllcjhiaXQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdFJhd0JheWVyOGJpdGNvbXByZXNzZWQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdFN1cmZhY2UiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0WUNiWUNyIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0WUNyWUNiIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0WVVWNDExUGFja2VkUGxhbmFyIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0WVVWNDExUGxhbmFyIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0WVVWNDIwRmxleGlibGUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkUGxhbmFyIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkU2VtaVBsYW5hciIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hciIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXIiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXRZVVY0MjJGbGV4aWJsZSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXRZVVY0MjJQYWNrZWRQbGFuYXIiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9Gb3JtYXRZVVY0MjJQYWNrZWRTZW1pUGxhbmFyIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0WVVWNDIyUGxhbmFyIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfRm9ybWF0WVVWNDIyU2VtaVBsYW5hciIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdFlVVjQ0NEZsZXhpYmxlIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX0Zvcm1hdFlVVjQ0NEludGVybGVhdmVkIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfUUNPTV9Gb3JtYXRZVVY0MjBTZW1pUGxhbmFyIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfVElfRm9ybWF0WVVWNDIwUGFja2VkU2VtaVBsYW5hciIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQWRhcHRpdmVQbGF5YmFjayIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0ludHJhUmVmcmVzaCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1BhcnRpYWxGcmFtZSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1NlY3VyZVBsYXliYWNrIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfVHVubmVsZWRQbGF5YmFjayIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2xvckZvcm1hdHMiLz4KLQkJPGZpZWxkIG5hbWU9InByb2ZpbGVMZXZlbHMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhQ29kZWNJbmZvJENvZGVjUHJvZmlsZUxldmVsIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQUNPYmplY3RFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IkFBQ09iamVjdEVSTEMiLz4KLQkJPGZpZWxkIG5hbWU9IkFBQ09iamVjdEVSU2NhbGFibGUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQUFDT2JqZWN0SEUiLz4KLQkJPGZpZWxkIG5hbWU9IkFBQ09iamVjdEhFX1BTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQUNPYmplY3RMQyIvPgotCQk8ZmllbGQgbmFtZT0iQUFDT2JqZWN0TEQiLz4KLQkJPGZpZWxkIG5hbWU9IkFBQ09iamVjdExUUCIvPgotCQk8ZmllbGQgbmFtZT0iQUFDT2JqZWN0TWFpbiIvPgotCQk8ZmllbGQgbmFtZT0iQUFDT2JqZWN0U1NSIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQUNPYmplY3RTY2FsYWJsZSIvPgotCQk8ZmllbGQgbmFtZT0iQUFDT2JqZWN0WEhFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFWQ0xldmVsMSIvPgotCQk8ZmllbGQgbmFtZT0iQVZDTGV2ZWwxMSIvPgotCQk8ZmllbGQgbmFtZT0iQVZDTGV2ZWwxMiIvPgotCQk8ZmllbGQgbmFtZT0iQVZDTGV2ZWwxMyIvPgotCQk8ZmllbGQgbmFtZT0iQVZDTGV2ZWwxYiIvPgotCQk8ZmllbGQgbmFtZT0iQVZDTGV2ZWwyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkNMZXZlbDIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkNMZXZlbDIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkNMZXZlbDMiLz4KLQkJPGZpZWxkIG5hbWU9IkFWQ0xldmVsMzEiLz4KLQkJPGZpZWxkIG5hbWU9IkFWQ0xldmVsMzIiLz4KLQkJPGZpZWxkIG5hbWU9IkFWQ0xldmVsNCIvPgotCQk8ZmllbGQgbmFtZT0iQVZDTGV2ZWw0MSIvPgotCQk8ZmllbGQgbmFtZT0iQVZDTGV2ZWw0MiIvPgotCQk8ZmllbGQgbmFtZT0iQVZDTGV2ZWw1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVkNMZXZlbDUxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkNMZXZlbDUyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkFWQ1Byb2ZpbGVCYXNlbGluZSIvPgotCQk8ZmllbGQgbmFtZT0iQVZDUHJvZmlsZUNvbnN0cmFpbmVkQmFzZWxpbmUiIHNpbmNlPSIyNyIvPgotCQk8ZmllbGQgbmFtZT0iQVZDUHJvZmlsZUNvbnN0cmFpbmVkSGlnaCIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVkNQcm9maWxlRXh0ZW5kZWQiLz4KLQkJPGZpZWxkIG5hbWU9IkFWQ1Byb2ZpbGVIaWdoIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkNQcm9maWxlSGlnaDEwIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkNQcm9maWxlSGlnaDQyMiIvPgotCQk8ZmllbGQgbmFtZT0iQVZDUHJvZmlsZUhpZ2g0NDQiLz4KLQkJPGZpZWxkIG5hbWU9IkFWQ1Byb2ZpbGVNYWluIi8+Ci0JCTxmaWVsZCBuYW1lPSJEb2xieVZpc2lvbkxldmVsRmhkMjQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRG9sYnlWaXNpb25MZXZlbEZoZDMwIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRvbGJ5VmlzaW9uTGV2ZWxGaGQ2MCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEb2xieVZpc2lvbkxldmVsSGQyNCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEb2xieVZpc2lvbkxldmVsSGQzMCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEb2xieVZpc2lvbkxldmVsVWhkMjQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRG9sYnlWaXNpb25MZXZlbFVoZDMwIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRvbGJ5VmlzaW9uTGV2ZWxVaGQ0OCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEb2xieVZpc2lvbkxldmVsVWhkNjAiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRG9sYnlWaXNpb25Qcm9maWxlRHZhdlBlbiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEb2xieVZpc2lvblByb2ZpbGVEdmF2UGVyIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRvbGJ5VmlzaW9uUHJvZmlsZUR2YXZTZSIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEb2xieVZpc2lvblByb2ZpbGVEdmhlRGVuIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRvbGJ5VmlzaW9uUHJvZmlsZUR2aGVEZXIiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRG9sYnlWaXNpb25Qcm9maWxlRHZoZUR0YiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEb2xieVZpc2lvblByb2ZpbGVEdmhlRHRoIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRvbGJ5VmlzaW9uUHJvZmlsZUR2aGVEdHIiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRG9sYnlWaXNpb25Qcm9maWxlRHZoZVN0IiBzaW5jZT0iMjciLz4KLQkJPGZpZWxkIG5hbWU9IkRvbGJ5VmlzaW9uUHJvZmlsZUR2aGVTdG4iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iSDI2M0xldmVsMTAiLz4KLQkJPGZpZWxkIG5hbWU9IkgyNjNMZXZlbDIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJIMjYzTGV2ZWwzMCIvPgotCQk8ZmllbGQgbmFtZT0iSDI2M0xldmVsNDAiLz4KLQkJPGZpZWxkIG5hbWU9IkgyNjNMZXZlbDQ1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIMjYzTGV2ZWw1MCIvPgotCQk8ZmllbGQgbmFtZT0iSDI2M0xldmVsNjAiLz4KLQkJPGZpZWxkIG5hbWU9IkgyNjNMZXZlbDcwIi8+Ci0JCTxmaWVsZCBuYW1lPSJIMjYzUHJvZmlsZUJhY2t3YXJkQ29tcGF0aWJsZSIvPgotCQk8ZmllbGQgbmFtZT0iSDI2M1Byb2ZpbGVCYXNlbGluZSIvPgotCQk8ZmllbGQgbmFtZT0iSDI2M1Byb2ZpbGVIMzIwQ29kaW5nIi8+Ci0JCTxmaWVsZCBuYW1lPSJIMjYzUHJvZmlsZUhpZ2hDb21wcmVzc2lvbiIvPgotCQk8ZmllbGQgbmFtZT0iSDI2M1Byb2ZpbGVIaWdoTGF0ZW5jeSIvPgotCQk8ZmllbGQgbmFtZT0iSDI2M1Byb2ZpbGVJU1dWMiIvPgotCQk8ZmllbGQgbmFtZT0iSDI2M1Byb2ZpbGVJU1dWMyIvPgotCQk8ZmllbGQgbmFtZT0iSDI2M1Byb2ZpbGVJbnRlcmxhY2UiLz4KLQkJPGZpZWxkIG5hbWU9IkgyNjNQcm9maWxlSW50ZXJuZXQiLz4KLQkJPGZpZWxkIG5hbWU9IkhFVkNIaWdoVGllckxldmVsMSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRVZDSGlnaFRpZXJMZXZlbDIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iSEVWQ0hpZ2hUaWVyTGV2ZWwyMSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRVZDSGlnaFRpZXJMZXZlbDMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iSEVWQ0hpZ2hUaWVyTGV2ZWwzMSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRVZDSGlnaFRpZXJMZXZlbDQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iSEVWQ0hpZ2hUaWVyTGV2ZWw0MSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRVZDSGlnaFRpZXJMZXZlbDUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iSEVWQ0hpZ2hUaWVyTGV2ZWw1MSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRVZDSGlnaFRpZXJMZXZlbDUyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkhFVkNIaWdoVGllckxldmVsNiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRVZDSGlnaFRpZXJMZXZlbDYxIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkhFVkNIaWdoVGllckxldmVsNjIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iSEVWQ01haW5UaWVyTGV2ZWwxIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkhFVkNNYWluVGllckxldmVsMiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRVZDTWFpblRpZXJMZXZlbDIxIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkhFVkNNYWluVGllckxldmVsMyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRVZDTWFpblRpZXJMZXZlbDMxIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkhFVkNNYWluVGllckxldmVsNCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRVZDTWFpblRpZXJMZXZlbDQxIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkhFVkNNYWluVGllckxldmVsNSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRVZDTWFpblRpZXJMZXZlbDUxIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkhFVkNNYWluVGllckxldmVsNTIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iSEVWQ01haW5UaWVyTGV2ZWw2IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkhFVkNNYWluVGllckxldmVsNjEiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iSEVWQ01haW5UaWVyTGV2ZWw2MiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRVZDUHJvZmlsZU1haW4iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iSEVWQ1Byb2ZpbGVNYWluMTAiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iSEVWQ1Byb2ZpbGVNYWluMTBIRFIxMCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIRVZDUHJvZmlsZU1haW5TdGlsbCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHMkxldmVsSDE0IiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRUcyTGV2ZWxITCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHMkxldmVsSFAiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTVBFRzJMZXZlbExMIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRUcyTGV2ZWxNTCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHMlByb2ZpbGU0MjIiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTVBFRzJQcm9maWxlSGlnaCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHMlByb2ZpbGVNYWluIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRUcyUHJvZmlsZVNOUiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHMlByb2ZpbGVTaW1wbGUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTVBFRzJQcm9maWxlU3BhdGlhbCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHNExldmVsMCIvPgotCQk8ZmllbGQgbmFtZT0iTVBFRzRMZXZlbDBiIi8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHNExldmVsMSIvPgotCQk8ZmllbGQgbmFtZT0iTVBFRzRMZXZlbDIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRUc0TGV2ZWwzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHNExldmVsM2IiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTVBFRzRMZXZlbDQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRUc0TGV2ZWw0YSIvPgotCQk8ZmllbGQgbmFtZT0iTVBFRzRMZXZlbDUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRUc0TGV2ZWw2IiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRUc0UHJvZmlsZUFkdmFuY2VkQ29kaW5nIi8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHNFByb2ZpbGVBZHZhbmNlZENvcmUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRUc0UHJvZmlsZUFkdmFuY2VkUmVhbFRpbWUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRUc0UHJvZmlsZUFkdmFuY2VkU2NhbGFibGUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRUc0UHJvZmlsZUFkdmFuY2VkU2ltcGxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHNFByb2ZpbGVCYXNpY0FuaW1hdGVkIi8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHNFByb2ZpbGVDb3JlIi8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHNFByb2ZpbGVDb3JlU2NhbGFibGUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRUc0UHJvZmlsZUh5YnJpZCIvPgotCQk8ZmllbGQgbmFtZT0iTVBFRzRQcm9maWxlTWFpbiIvPgotCQk8ZmllbGQgbmFtZT0iTVBFRzRQcm9maWxlTmJpdCIvPgotCQk8ZmllbGQgbmFtZT0iTVBFRzRQcm9maWxlU2NhbGFibGVUZXh0dXJlIi8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHNFByb2ZpbGVTaW1wbGUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRUc0UHJvZmlsZVNpbXBsZUZCQSIvPgotCQk8ZmllbGQgbmFtZT0iTVBFRzRQcm9maWxlU2ltcGxlRmFjZSIvPgotCQk8ZmllbGQgbmFtZT0iTVBFRzRQcm9maWxlU2ltcGxlU2NhbGFibGUiLz4KLQkJPGZpZWxkIG5hbWU9IlZQOExldmVsX1ZlcnNpb24wIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IlZQOExldmVsX1ZlcnNpb24xIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IlZQOExldmVsX1ZlcnNpb24yIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IlZQOExldmVsX1ZlcnNpb24zIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IlZQOFByb2ZpbGVNYWluIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IlZQOUxldmVsMSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWUDlMZXZlbDExIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlZQOUxldmVsMiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWUDlMZXZlbDIxIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlZQOUxldmVsMyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWUDlMZXZlbDMxIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlZQOUxldmVsNCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWUDlMZXZlbDQxIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlZQOUxldmVsNSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWUDlMZXZlbDUxIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlZQOUxldmVsNTIiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVlA5TGV2ZWw2IiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlZQOUxldmVsNjEiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVlA5TGV2ZWw2MiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWUDlQcm9maWxlMCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWUDlQcm9maWxlMSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWUDlQcm9maWxlMiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWUDlQcm9maWxlMkhEUiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWUDlQcm9maWxlMyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWUDlQcm9maWxlM0hEUiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsZXZlbCIvPgotCQk8ZmllbGQgbmFtZT0icHJvZmlsZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlY0luZm8kRW5jb2RlckNhcGFiaWxpdGllcyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBsZXhpdHlSYW5nZSgpTGFuZHJvaWQvdXRpbC9SYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWFsaXR5UmFuZ2UoKUxhbmRyb2lkL3V0aWwvUmFuZ2U7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JpdHJhdGVNb2RlU3VwcG9ydGVkKEkpWiIvPgotCQk8ZmllbGQgbmFtZT0iQklUUkFURV9NT0RFX0NCUiIvPgotCQk8ZmllbGQgbmFtZT0iQklUUkFURV9NT0RFX0NRIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSVRSQVRFX01PREVfVkJSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjSW5mbyRWaWRlb0NhcGFiaWxpdGllcyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFyZVNpemVBbmRSYXRlU3VwcG9ydGVkKElJRClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNoaWV2YWJsZUZyYW1lUmF0ZXNGb3IoSUkpTGFuZHJvaWQvdXRpbC9SYW5nZTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpdHJhdGVSYW5nZSgpTGFuZHJvaWQvdXRpbC9SYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHRBbGlnbm1lbnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRGcmFtZVJhdGVzKClMYW5kcm9pZC91dGlsL1JhbmdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZEZyYW1lUmF0ZXNGb3IoSUkpTGFuZHJvaWQvdXRpbC9SYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRIZWlnaHRzKClMYW5kcm9pZC91dGlsL1JhbmdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZEhlaWdodHNGb3IoSSlMYW5kcm9pZC91dGlsL1JhbmdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZFdpZHRocygpTGFuZHJvaWQvdXRpbC9SYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRXaWR0aHNGb3IoSSlMYW5kcm9pZC91dGlsL1JhbmdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpZHRoQWxpZ25tZW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTaXplU3VwcG9ydGVkKElJKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhQ29kZWNMaXN0IiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmREZWNvZGVyRm9yRm9ybWF0KExhbmRyb2lkL21lZGlhL01lZGlhRm9ybWF0OylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRFbmNvZGVyRm9yRm9ybWF0KExhbmRyb2lkL21lZGlhL01lZGlhRm9ybWF0OylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvZGVjQ291bnQoKUkiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29kZWNJbmZvQXQoSSlMYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjSW5mbzsiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29kZWNJbmZvcygpW0xhbmRyb2lkL21lZGlhL01lZGlhQ29kZWNJbmZvOyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTExfQ09ERUNTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlJFR1VMQVJfQ09ERUNTIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhQ3J5cHRvIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvVVVJRDtbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDcnlwdG9TY2hlbWVTdXBwb3J0ZWQoTGphdmEvdXRpbC9VVUlEOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVpcmVzU2VjdXJlRGVjb2RlckNvbXBvbmVudChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1lZGlhRHJtU2Vzc2lvbihbQilWIiBzaW5jZT0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhQ3J5cHRvRXhjZXB0aW9uIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYURhdGFTb3VyY2UiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaXplKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEF0KEpbQklJKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhRGVzY3JhbWJsZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVzY3JhbWJsZShMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtMYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjJENyeXB0b0luZm87KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1aXJlc1NlY3VyZURlY29kZXJDb21wb25lbnQoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNZWRpYUNhc1Nlc3Npb24oTGFuZHJvaWQvbWVkaWEvTWVkaWFDYXMkU2Vzc2lvbjspViIvPgotCQk8ZmllbGQgbmFtZT0iU0NSQU1CTEVfQ09OVFJPTF9FVkVOX0tFWSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JBTUJMRV9DT05UUk9MX09ERF9LRVkiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU0NSQU1CTEVfQ09OVFJPTF9SRVNFUlZFRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JBTUJMRV9DT05UUk9MX1VOU0NSQU1CTEVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkFNQkxFX0ZMQUdfUEVTX0hFQURFUiIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYURlc2NyaXB0aW9uIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNjcmlwdGlvbigpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWNvbkJpdG1hcCgpTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEljb25VcmkoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVkaWFJZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVkaWFVcmkoKUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJ0aXRsZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGl0bGUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8ZmllbGQgbmFtZT0iQlRfRk9MREVSX1RZUEVfQUxCVU1TIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkJUX0ZPTERFUl9UWVBFX0FSVElTVFMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQlRfRk9MREVSX1RZUEVfR0VOUkVTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkJUX0ZPTERFUl9UWVBFX01JWEVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkJUX0ZPTERFUl9UWVBFX1BMQVlMSVNUUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCVF9GT0xERVJfVFlQRV9USVRMRVMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQlRfRk9MREVSX1RZUEVfWUVBUlMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQlRfRk9MREVSX1RZUEUiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFEZXNjcmlwdGlvbiRCdWlsZGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL21lZGlhL01lZGlhRGVzY3JpcHRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVzY3JpcHRpb24oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL21lZGlhL01lZGlhRGVzY3JpcHRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeHRyYXMoTGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9tZWRpYS9NZWRpYURlc2NyaXB0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWNvbkJpdG1hcChMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KUxhbmRyb2lkL21lZGlhL01lZGlhRGVzY3JpcHRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uVXJpKExhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL21lZGlhL01lZGlhRGVzY3JpcHRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNZWRpYUlkKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9tZWRpYS9NZWRpYURlc2NyaXB0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWVkaWFVcmkoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvbWVkaWEvTWVkaWFEZXNjcmlwdGlvbiRCdWlsZGVyOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VidGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL21lZGlhL01lZGlhRGVzY3JpcHRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaXRsZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvbWVkaWEvTWVkaWFEZXNjcmlwdGlvbiRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFEcm0iIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL1VVSUQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZVNlc3Npb24oW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3RlZEhkY3BMZXZlbCgpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3J5cHRvU2Vzc2lvbihbQkxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9tZWRpYS9NZWRpYURybSRDcnlwdG9TZXNzaW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleVJlcXVlc3QoW0JbQkxqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS91dGlsL0hhc2hNYXA7KUxhbmRyb2lkL21lZGlhL01lZGlhRHJtJEtleVJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4SGRjcExldmVsKClJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhTZWN1cml0eUxldmVsKClJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhTZXNzaW9uQ291bnQoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldHJpY3MoKUxhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3BlblNlc3Npb25Db3VudCgpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvcGVydHlCeXRlQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7KVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvcGVydHlTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3Zpc2lvblJlcXVlc3QoKUxhbmRyb2lkL21lZGlhL01lZGlhRHJtJFByb3Zpc2lvblJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VjdXJlU3RvcChbQilbQiIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VjdXJlU3RvcElkcygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VjdXJlU3RvcHMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWN1cml0eUxldmVsKFtCKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ3J5cHRvU2NoZW1lU3VwcG9ydGVkKExqYXZhL3V0aWwvVVVJRDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ3J5cHRvU2NoZW1lU3VwcG9ydGVkKExqYXZhL3V0aWwvVVVJRDtMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlblNlc3Npb24oKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlblNlc3Npb24oSSlbQiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJvdmlkZUtleVJlc3BvbnNlKFtCW0IpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm92aWRlUHJvdmlzaW9uUmVzcG9uc2UoW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5S2V5U3RhdHVzKFtCKUxqYXZhL3V0aWwvSGFzaE1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2VBbGxTZWN1cmVTdG9wcygpViIgc2luY2U9IjIyIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2VTZWN1cmVTdG9wcyhbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQWxsU2VjdXJlU3RvcHMoKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUtleXMoW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVNlY3VyZVN0b3AoW0IpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdG9yZUtleXMoW0JbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25FdmVudExpc3RlbmVyKExhbmRyb2lkL21lZGlhL01lZGlhRHJtJE9uRXZlbnRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uRXhwaXJhdGlvblVwZGF0ZUxpc3RlbmVyKExhbmRyb2lkL21lZGlhL01lZGlhRHJtJE9uRXhwaXJhdGlvblVwZGF0ZUxpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uS2V5U3RhdHVzQ2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvTWVkaWFEcm0kT25LZXlTdGF0dXNDaGFuZ2VMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9wZXJ0eUJ5dGVBcnJheShMamF2YS9sYW5nL1N0cmluZztbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvcGVydHlTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkVWRU5UX0tFWV9FWFBJUkVEIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfS0VZX1JFUVVJUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9QUk9WSVNJT05fUkVRVUlSRUQiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9TRVNTSU9OX1JFQ0xBSU1FRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9WRU5ET1JfREVGSU5FRCIvPgotCQk8ZmllbGQgbmFtZT0iSERDUF9MRVZFTF9VTktOT1dOIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkhEQ1BfTk9ORSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIRENQX05PX0RJR0lUQUxfT1VUUFVUIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkhEQ1BfVjEiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iSERDUF9WMiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIRENQX1YyXzEiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iSERDUF9WMl8yIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9UWVBFX09GRkxJTkUiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9UWVBFX1JFTEVBU0UiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9UWVBFX1NUUkVBTUlORyIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfQUxHT1JJVEhNUyIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfREVTQ1JJUFRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlBST1BFUlRZX0RFVklDRV9VTklRVUVfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1BFUlRZX1ZFTkRPUiIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfVkVSU0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iU0VDVVJJVFlfTEVWRUxfSFdfU0VDVVJFX0FMTCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNVUklUWV9MRVZFTF9IV19TRUNVUkVfQ1JZUFRPIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQ1VSSVRZX0xFVkVMX0hXX1NFQ1VSRV9ERUNPREUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU0VDVVJJVFlfTEVWRUxfU1dfU0VDVVJFX0NSWVBUTyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNVUklUWV9MRVZFTF9TV19TRUNVUkVfREVDT0RFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQ1VSSVRZX0xFVkVMX1VOS05PV04iIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFEcm0kQ3J5cHRvU2Vzc2lvbiIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9NZWRpYURybTspViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbWVkaWEvTWVkaWFEcm07W0JMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjcnlwdChbQltCW0IpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmNyeXB0KFtCW0JbQilbQiIvPgotCQk8bWV0aG9kIG5hbWU9InNpZ24oW0JbQilbQiIvPgotCQk8bWV0aG9kIG5hbWU9InZlcmlmeShbQltCW0IpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFEcm0kSGRjcExldmVsIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhRHJtJEtleVJlcXVlc3QiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRVcmwoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVlc3RUeXBlKClJIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfVFlQRV9JTklUSUFMIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfVFlQRV9OT05FIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfVFlQRV9SRUxFQVNFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfVFlQRV9SRU5FV0FMIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfVFlQRV9VUERBVEUiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFEcm0kS2V5U3RhdHVzIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQkkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5SWQoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdHVzQ29kZSgpSSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0VYUElSRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19JTlRFUk5BTF9FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX09VVFBVVF9OT1RfQUxMT1dFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX1BFTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19VU0FCTEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhRHJtJE1lZGlhRHJtU3RhdGVFeGNlcHRpb24iIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlhZ25vc3RpY0luZm8oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFEcm0kTWV0cmljc0NvbnN0YW50cyIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ0xPU0VfU0VTU0lPTl9FUlJPUl9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iQ0xPU0VfU0VTU0lPTl9FUlJPUl9MSVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTE9TRV9TRVNTSU9OX09LX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9LRVlfRVhQSVJFRF9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfS0VZX05FRURFRF9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfUFJPVklTSU9OX1JFUVVJUkVEX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9TRVNTSU9OX1JFQ0xBSU1FRF9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfVkVORE9SX0RFRklORURfQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9ERVZJQ0VfVU5JUVVFX0lEX0VSUk9SX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRVRfREVWSUNFX1VOSVFVRV9JRF9FUlJPUl9MSVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRVRfREVWSUNFX1VOSVFVRV9JRF9PS19DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0VUX0tFWV9SRVFVRVNUX0VSUk9SX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRVRfS0VZX1JFUVVFU1RfRVJST1JfTElTVCIvPgotCQk8ZmllbGQgbmFtZT0iR0VUX0tFWV9SRVFVRVNUX09LX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRVRfS0VZX1JFUVVFU1RfT0tfVElNRV9NSUNST1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9QUk9WSVNJT05fUkVRVUVTVF9FUlJPUl9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0VUX1BST1ZJU0lPTl9SRVFVRVNUX0VSUk9SX0xJU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9QUk9WSVNJT05fUkVRVUVTVF9PS19DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1NUQVRVU19FWFBJUkVEX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfU1RBVFVTX0lOVEVSTkFMX0VSUk9SX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfU1RBVFVTX09VVFBVVF9OT1RfQUxMT1dFRF9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1NUQVRVU19QRU5ESU5HX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfU1RBVFVTX1VTQUJMRV9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFTl9TRVNTSU9OX0VSUk9SX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVOX1NFU1NJT05fRVJST1JfTElTVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFTl9TRVNTSU9OX09LX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9WSURFX0tFWV9SRVNQT05TRV9FUlJPUl9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVklERV9LRVlfUkVTUE9OU0VfRVJST1JfTElTVCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVklERV9LRVlfUkVTUE9OU0VfT0tfQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1ZJREVfS0VZX1JFU1BPTlNFX09LX1RJTUVfTUlDUk9TIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9WSURFX1BST1ZJU0lPTl9SRVNQT05TRV9FUlJPUl9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVklERV9QUk9WSVNJT05fUkVTUE9OU0VfRVJST1JfTElTVCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVklERV9QUk9WSVNJT05fUkVTUE9OU0VfT0tfQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFU1NJT05fRU5EX1RJTUVTX01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVNTSU9OX1NUQVJUX1RJTUVTX01TIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYURybSRPbkV2ZW50TGlzdGVuZXIiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkV2ZW50KExhbmRyb2lkL21lZGlhL01lZGlhRHJtO1tCSUlbQilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYURybSRPbkV4cGlyYXRpb25VcGRhdGVMaXN0ZW5lciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXhwaXJhdGlvblVwZGF0ZShMYW5kcm9pZC9tZWRpYS9NZWRpYURybTtbQkopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFEcm0kT25LZXlTdGF0dXNDaGFuZ2VMaXN0ZW5lciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uS2V5U3RhdHVzQ2hhbmdlKExhbmRyb2lkL21lZGlhL01lZGlhRHJtO1tCTGphdmEvdXRpbC9MaXN0O1opViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFEcm0kUHJvdmlzaW9uUmVxdWVzdCIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGEoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFVybCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYURybSRTZWN1cml0eUxldmVsIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhRHJtRXhjZXB0aW9uIiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYURybVJlc2V0RXhjZXB0aW9uIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYUV4dHJhY3RvciIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkdmFuY2UoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdWRpb1ByZXNlbnRhdGlvbnMoSSlMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWNoZWREdXJhdGlvbigpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhc0luZm8oSSlMYW5kcm9pZC9tZWRpYS9NZWRpYUV4dHJhY3RvciRDYXNJbmZvOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJtSW5pdERhdGEoKUxhbmRyb2lkL21lZGlhL0RybUluaXREYXRhOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0cmljcygpTGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQc3NoSW5mbygpTGphdmEvdXRpbC9NYXA7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTYW1wbGVDcnlwdG9JbmZvKExhbmRyb2lkL21lZGlhL01lZGlhQ29kZWMkQ3J5cHRvSW5mbzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNhbXBsZUZsYWdzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2FtcGxlU2l6ZSgpSiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2FtcGxlVGltZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNhbXBsZVRyYWNrSW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFja0NvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhY2tGb3JtYXQoSSlMYW5kcm9pZC9tZWRpYS9NZWRpYUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNDYWNoZVJlYWNoZWRFbmRPZlN0cmVhbSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRTYW1wbGVEYXRhKExqYXZhL25pby9CeXRlQnVmZmVyO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZWVrVG8oSkkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbGVjdFRyYWNrKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFTb3VyY2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL25ldC9Vcmk7TGphdmEvdXRpbC9NYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhU291cmNlKExhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3I7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFTb3VyY2UoTGFuZHJvaWQvbWVkaWEvTWVkaWFEYXRhU291cmNlOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhU291cmNlKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0YVNvdXJjZShMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtKSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0YVNvdXJjZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFTb3VyY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9NYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNZWRpYUNhcyhMYW5kcm9pZC9tZWRpYS9NZWRpYUNhczspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5zZWxlY3RUcmFjayhJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNBTVBMRV9GTEFHX0VOQ1JZUFRFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0FNUExFX0ZMQUdfUEFSVElBTF9GUkFNRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQU1QTEVfRkxBR19TWU5DIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUVLX1RPX0NMT1NFU1RfU1lOQyIvPgotCQk8ZmllbGQgbmFtZT0iU0VFS19UT19ORVhUX1NZTkMiLz4KLQkJPGZpZWxkIG5hbWU9IlNFRUtfVE9fUFJFVklPVVNfU1lOQyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFFeHRyYWN0b3IkQ2FzSW5mbyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxhbmRyb2lkL21lZGlhL01lZGlhQ2FzJFNlc3Npb247KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlc3Npb24oKUxhbmRyb2lkL21lZGlhL01lZGlhQ2FzJFNlc3Npb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lzdGVtSWQoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhRXh0cmFjdG9yJE1ldHJpY3NDb25zdGFudHMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVCIvPgotCQk8ZmllbGQgbmFtZT0iTUlNRV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFDS1MiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhRm9ybWF0IiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnNLZXkoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVBdWRpb0Zvcm1hdChMamF2YS9sYW5nL1N0cmluZztJSSlMYW5kcm9pZC9tZWRpYS9NZWRpYUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTdWJ0aXRsZUZvcm1hdChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbWVkaWEvTWVkaWFGb3JtYXQ7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVWaWRlb0Zvcm1hdChMamF2YS9sYW5nL1N0cmluZztJSSlMYW5kcm9pZC9tZWRpYS9NZWRpYUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlQnVmZmVyKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGZWF0dXJlRW5hYmxlZChMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxvYXQoTGphdmEvbGFuZy9TdHJpbmc7KUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlZ2VyKExqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZyhMamF2YS9sYW5nL1N0cmluZzspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qnl0ZUJ1ZmZlcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZlYXR1cmVFbmFibGVkKExqYXZhL2xhbmcvU3RyaW5nO1opViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmxvYXQoTGphdmEvbGFuZy9TdHJpbmc7RilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZWdlcihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb25nKExqYXZhL2xhbmcvU3RyaW5nO0opViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cmluZyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfUkFOR0VfRlVMTCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9SQU5HRV9MSU1JVEVEIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX1NUQU5EQVJEX0JUMjAyMCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9TVEFOREFSRF9CVDYwMV9OVFNDIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX1NUQU5EQVJEX0JUNjAxX1BBTCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9TVEFOREFSRF9CVDcwOSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9UUkFOU0ZFUl9ITEciIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfVFJBTlNGRVJfTElORUFSIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX1RSQU5TRkVSX1NEUl9WSURFTyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9UUkFOU0ZFUl9TVDIwODQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FBQ19EUkNfQVRURU5VQVRJT05fRkFDVE9SIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9BQUNfRFJDX0JPT1NUX0ZBQ1RPUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQUFDX0RSQ19FRkZFQ1RfVFlQRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQUFDX0RSQ19IRUFWWV9DT01QUkVTU0lPTiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQUFDX0RSQ19UQVJHRVRfUkVGRVJFTkNFX0xFVkVMIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9BQUNfRU5DT0RFRF9UQVJHRVRfTEVWRUwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FBQ19NQVhfT1VUUFVUX0NIQU5ORUxfQ09VTlQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FBQ19QUk9GSUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQUFDX1NCUl9NT0RFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9BVURJT19TRVNTSU9OX0lEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9CSVRSQVRFX01PREUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0JJVF9SQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ0FQVFVSRV9SQVRFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9DSEFOTkVMX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ0hBTk5FTF9NQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ09MT1JfRk9STUFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ09MT1JfUkFOR0UiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NPTE9SX1NUQU5EQVJEIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9DT0xPUl9UUkFOU0ZFUiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ09NUExFWElUWSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfRFVSQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9GTEFDX0NPTVBSRVNTSU9OX0xFVkVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfRlJBTUVfUkFURSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0dSSURfQ09MVU1OUyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfR1JJRF9ST1dTIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9IRFJfU1RBVElDX0lORk8iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0hFSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0lOVFJBX1JFRlJFU0hfUEVSSU9EIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9JU19BRFRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfSVNfQVVUT1NFTEVDVCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfSVNfREVGQVVMVCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfSVNfRk9SQ0VEX1NVQlRJVExFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9JX0ZSQU1FX0lOVEVSVkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTEFOR1VBR0UiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0xBVEVOQ1kiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0xFVkVMIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NQVhfSEVJR0hUIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NQVhfSU5QVVRfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX01BWF9XSURUSCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTUlNRSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX09QRVJBVElOR19SQVRFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9PVVRQVVRfUkVPUkRFUl9ERVBUSCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfUENNX0VOQ09ESU5HIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9QUklPUklUWSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfUFJPRklMRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfUFVTSF9CTEFOS19CVUZGRVJTX09OX1NUT1AiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1FVQUxJVFkiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1JFUEVBVF9QUkVWSU9VU19GUkFNRV9BRlRFUiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfUk9UQVRJT04iIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1NBTVBMRV9SQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfU0xJQ0VfSEVJR0hUIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9TVFJJREUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1RFTVBPUkFMX0xBWUVSSU5HIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9USUxFX0hFSUdIVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfVElMRV9XSURUSCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfVFJBQ0tfSUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1dJRFRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU1FVFlQRV9BVURJT19BQUMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTUlNRVRZUEVfQVVESU9fQUMzIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX0FVRElPX0FNUl9OQiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU1FVFlQRV9BVURJT19BTVJfV0IiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTUlNRVRZUEVfQVVESU9fRUFDMyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU1FVFlQRV9BVURJT19GTEFDIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX0FVRElPX0c3MTFfQUxBVyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU1FVFlQRV9BVURJT19HNzExX01MQVciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTUlNRVRZUEVfQVVESU9fTVBFRyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU1FVFlQRV9BVURJT19NU0dTTSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU1FVFlQRV9BVURJT19PUFVTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX0FVRElPX1FDRUxQIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX0FVRElPX1JBVyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU1FVFlQRV9BVURJT19TQ1JBTUJMRUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTUlNRVRZUEVfQVVESU9fVk9SQklTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX0lNQUdFX0FORFJPSURfSEVJQyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNSU1FVFlQRV9URVhUX0NFQV82MDgiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTUlNRVRZUEVfVEVYVF9DRUFfNzA4IiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX1RFWFRfU1VCUklQIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX1RFWFRfVlRUIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX1ZJREVPX0FWQyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU1FVFlQRV9WSURFT19ET0xCWV9WSVNJT04iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTUlNRVRZUEVfVklERU9fSDI2MyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU1FVFlQRV9WSURFT19IRVZDIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX1ZJREVPX01QRUcyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX1ZJREVPX01QRUc0IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX1ZJREVPX1JBVyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU1FVFlQRV9WSURFT19TQ1JBTUJMRUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTUlNRVRZUEVfVklERU9fVlA4IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVUWVBFX1ZJREVPX1ZQOSIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWluc0tleShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpdG1hcChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlc2NyaXB0aW9uKClMYW5kcm9pZC9tZWRpYS9NZWRpYURlc2NyaXB0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmcoTGphdmEvbGFuZy9TdHJpbmc7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSYXRpbmcoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL21lZGlhL1JhdGluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImtleVNldCgpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZSgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0FMQlVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfQUxCVU1fQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfQUxCVU1fQVJUSVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfQUxCVU1fQVJUX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0FSVCIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0FSVElTVCIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0FSVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9BVVRIT1IiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9CVF9GT0xERVJfVFlQRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfQ09NUElMQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9DT01QT1NFUiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9ESVNDX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0RJU1BMQVlfREVTQ1JJUFRJT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9ESVNQTEFZX0lDT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9ESVNQTEFZX0lDT05fVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfRElTUExBWV9TVUJUSVRMRSIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0RJU1BMQVlfVElUTEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9EVVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0dFTlJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfTUVESUFfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9NRURJQV9VUkkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX05VTV9UUkFDS1MiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9SQVRJTkciLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9USVRMRSIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX1RSQUNLX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX1VTRVJfUkFUSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfV1JJVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfWUVBUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFNZXRhZGF0YSRCdWlsZGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL21lZGlhL01lZGlhTWV0YWRhdGE7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvbWVkaWEvTWVkaWFNZXRhZGF0YTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRCaXRtYXAoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylMYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0TG9uZyhMamF2YS9sYW5nL1N0cmluZztKKUxhbmRyb2lkL21lZGlhL01lZGlhTWV0YWRhdGEkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRSYXRpbmcoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvbWVkaWEvUmF0aW5nOylMYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0VGV4dChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvbWVkaWEvTWVkaWFNZXRhZGF0YSRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFNZXRhZGF0YUVkaXRvciIgc2luY2U9IjE5IiBkZXByZWNhdGVkPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRFZGl0YWJsZUtleShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qml0bWFwKElMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFZGl0YWJsZUtleXMoKVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZyhJSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2JqZWN0KElMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nKElMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0Qml0bWFwKElMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KUxhbmRyb2lkL21lZGlhL01lZGlhTWV0YWRhdGFFZGl0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0TG9uZyhJSilMYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhRWRpdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dE9iamVjdChJTGphdmEvbGFuZy9PYmplY3Q7KUxhbmRyb2lkL21lZGlhL01lZGlhTWV0YWRhdGFFZGl0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0U3RyaW5nKElMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbWVkaWEvTWVkaWFNZXRhZGF0YUVkaXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVFZGl0YWJsZUtleXMoKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkJJVE1BUF9LRVlfQVJUV09SSyIvPgotCQk8ZmllbGQgbmFtZT0iUkFUSU5HX0tFWV9CWV9PVEhFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IlJBVElOR19LRVlfQllfVVNFUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFNZXRhZGF0YVJldHJpZXZlciIgc2luY2U9IjEwIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImV4dHJhY3RNZXRhZGF0YShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVtYmVkZGVkUGljdHVyZSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcmFtZUF0SW5kZXgoSSlMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcmFtZUF0SW5kZXgoSUxhbmRyb2lkL21lZGlhL01lZGlhTWV0YWRhdGFSZXRyaWV2ZXIkQml0bWFwUGFyYW1zOylMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcmFtZUF0VGltZSgpTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyYW1lQXRUaW1lKEopTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyYW1lQXRUaW1lKEpJKUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcmFtZXNBdEluZGV4KElJKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyYW1lc0F0SW5kZXgoSUlMYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhUmV0cmlldmVyJEJpdG1hcFBhcmFtczspTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1hZ2VBdEluZGV4KEkpTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1hZ2VBdEluZGV4KElMYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhUmV0cmlldmVyJEJpdG1hcFBhcmFtczspTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbWFyeUltYWdlKClMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmltYXJ5SW1hZ2UoTGFuZHJvaWQvbWVkaWEvTWVkaWFNZXRhZGF0YVJldHJpZXZlciRCaXRtYXBQYXJhbXM7KUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYWxlZEZyYW1lQXRUaW1lKEpJSUkpTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFTb3VyY2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhU291cmNlKExhbmRyb2lkL21lZGlhL01lZGlhRGF0YVNvdXJjZTspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0YVNvdXJjZShMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFTb3VyY2UoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7SkopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFTb3VyY2UoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhU291cmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTWFwOylWIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9BTEJVTSIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0FMQlVNQVJUSVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfQVJUSVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfQVVUSE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfQklUUkFURSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfQ0FQVFVSRV9GUkFNRVJBVEUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0NEX1RSQUNLX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0NPTVBJTEFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfQ09NUE9TRVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9EQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfRElTQ19OVU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9EVVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0dFTlJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfSEFTX0FVRElPIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9IQVNfSU1BR0UiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0hBU19WSURFTyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfSU1BR0VfQ09VTlQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0lNQUdFX0hFSUdIVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfSU1BR0VfUFJJTUFSWSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfSU1BR0VfUk9UQVRJT04iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX0lNQUdFX1dJRFRIIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9MT0NBVElPTiIgc2luY2U9IjE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfTUlNRVRZUEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9OVU1fVFJBQ0tTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfVElUTEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9WSURFT19GUkFNRV9DT1VOVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfVklERU9fSEVJR0hUIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9WSURFT19ST1RBVElPTiIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBREFUQV9LRVlfVklERU9fV0lEVEgiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX1dSSVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfS0VZX1lFQVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QVElPTl9DTE9TRVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUFRJT05fQ0xPU0VTVF9TWU5DIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUFRJT05fTkVYVF9TWU5DIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUFRJT05fUFJFVklPVVNfU1lOQyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFNZXRhZGF0YVJldHJpZXZlciRCaXRtYXBQYXJhbXMiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3R1YWxDb25maWcoKUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcCRDb25maWc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlZmVycmVkQ29uZmlnKClMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAkQ29uZmlnOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZWZlcnJlZENvbmZpZyhMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAkQ29uZmlnOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYU11eGVyIiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0kpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRyYWNrKExhbmRyb2lkL21lZGlhL01lZGlhRm9ybWF0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvY2F0aW9uKEZGKVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9yaWVudGF0aW9uSGludChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3AoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVNhbXBsZURhdGEoSUxqYXZhL25pby9CeXRlQnVmZmVyO0xhbmRyb2lkL21lZGlhL01lZGlhQ29kZWMkQnVmZmVySW5mbzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFNdXhlciRPdXRwdXRGb3JtYXQiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1VWEVSX09VVFBVVF8zR1BQIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1VWEVSX09VVFBVVF9IRUlGIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1VWEVSX09VVFBVVF9NUEVHXzQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1VWEVSX09VVFBVVF9XRUJNIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9BdWRpb1JvdXRpbmciIHNpbmNlPSIyOCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL21lZGlhL1ZvbHVtZUF1dG9tYXRpb24iIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRpbWVkVGV4dFNvdXJjZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvbmV0L1VyaTtMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGltZWRUZXh0U291cmNlKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0pKTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRpbWVkVGV4dFNvdXJjZShMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGltZWRUZXh0U291cmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdHRhY2hBdXhFZmZlY3QoSSlWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyT25NZWRpYVRpbWVEaXNjb250aW51aXR5TGlzdGVuZXIoKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyT25TdWJ0aXRsZURhdGFMaXN0ZW5lcigpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKUxhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SUxhbmRyb2lkL21lZGlhL0F1ZGlvQXR0cmlidXRlcztJKUxhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9uZXQvVXJpOylMYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvdmlldy9TdXJmYWNlSG9sZGVyOylMYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvdmlldy9TdXJmYWNlSG9sZGVyO0xhbmRyb2lkL21lZGlhL0F1ZGlvQXR0cmlidXRlcztJKUxhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVzZWxlY3RUcmFjayhJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1ZGlvU2Vzc2lvbklkKClJIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRQb3NpdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERybUluZm8oKUxhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJERybUluZm87IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcm1Qcm9wZXJ0eVN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREdXJhdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleVJlcXVlc3QoW0JbQkxqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS91dGlsL01hcDspTGFuZHJvaWQvbWVkaWEvTWVkaWFEcm0kS2V5UmVxdWVzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldHJpY3MoKUxhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGxheWJhY2tQYXJhbXMoKUxhbmRyb2lkL21lZGlhL1BsYXliYWNrUGFyYW1zOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VsZWN0ZWRUcmFjayhJKUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5bmNQYXJhbXMoKUxhbmRyb2lkL21lZGlhL1N5bmNQYXJhbXM7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXAoKUxhbmRyb2lkL21lZGlhL01lZGlhVGltZXN0YW1wOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhY2tJbmZvKClbTGFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkVHJhY2tJbmZvOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmlkZW9IZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWRlb1dpZHRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMb29waW5nKClaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGxheWluZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhdXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJlcGFyZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InByZXBhcmVBc3luYygpViIvPgotCQk8bWV0aG9kIG5hbWU9InByZXBhcmVEcm0oTGphdmEvdXRpbC9VVUlEOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm92aWRlS2V5UmVzcG9uc2UoW0JbQilbQiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2VEcm0oKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdG9yZUtleXMoW0IpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2Vla1RvKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNlZWtUbyhKSSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZWxlY3RUcmFjayhJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1ZGlvQXR0cmlidXRlcyhMYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXM7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1ZGlvU2Vzc2lvbklkKEkpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdWRpb1N0cmVhbVR5cGUoSSlWIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1eEVmZmVjdFNlbmRMZXZlbChGKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0YVNvdXJjZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFTb3VyY2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL25ldC9Vcmk7TGphdmEvdXRpbC9NYXA7KVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFTb3VyY2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL25ldC9Vcmk7TGphdmEvdXRpbC9NYXA7TGphdmEvdXRpbC9MaXN0OylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhU291cmNlKExhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3I7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFTb3VyY2UoTGFuZHJvaWQvbWVkaWEvTWVkaWFEYXRhU291cmNlOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhU291cmNlKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0YVNvdXJjZShMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtKSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0YVNvdXJjZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXkoTGFuZHJvaWQvdmlldy9TdXJmYWNlSG9sZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHJtUHJvcGVydHlTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvb3BpbmcoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmV4dE1lZGlhUGxheWVyKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkJ1ZmZlcmluZ1VwZGF0ZUxpc3RlbmVyKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uQnVmZmVyaW5nVXBkYXRlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkNvbXBsZXRpb25MaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllciRPbkNvbXBsZXRpb25MaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uRHJtQ29uZmlnSGVscGVyKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uRHJtQ29uZmlnSGVscGVyOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkRybUluZm9MaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllciRPbkRybUluZm9MaXN0ZW5lcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25Ecm1JbmZvTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkT25Ecm1JbmZvTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25Ecm1QcmVwYXJlZExpc3RlbmVyKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uRHJtUHJlcGFyZWRMaXN0ZW5lcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25Ecm1QcmVwYXJlZExpc3RlbmVyKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uRHJtUHJlcGFyZWRMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkVycm9yTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkT25FcnJvckxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25JbmZvTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkT25JbmZvTGlzdGVuZXI7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25NZWRpYVRpbWVEaXNjb250aW51aXR5TGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkT25NZWRpYVRpbWVEaXNjb250aW51aXR5TGlzdGVuZXI7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uTWVkaWFUaW1lRGlzY29udGludWl0eUxpc3RlbmVyKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uTWVkaWFUaW1lRGlzY29udGludWl0eUxpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uUHJlcGFyZWRMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllciRPblByZXBhcmVkTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPblNlZWtDb21wbGV0ZUxpc3RlbmVyKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uU2Vla0NvbXBsZXRlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPblN1YnRpdGxlRGF0YUxpc3RlbmVyKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uU3VidGl0bGVEYXRhTGlzdGVuZXI7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uU3VidGl0bGVEYXRhTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkT25TdWJ0aXRsZURhdGFMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPblRpbWVkTWV0YURhdGFBdmFpbGFibGVMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllciRPblRpbWVkTWV0YURhdGFBdmFpbGFibGVMaXN0ZW5lcjspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25UaW1lZFRleHRMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllciRPblRpbWVkVGV4dExpc3RlbmVyOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPblZpZGVvU2l6ZUNoYW5nZWRMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllciRPblZpZGVvU2l6ZUNoYW5nZWRMaXN0ZW5lcjspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQbGF5YmFja1BhcmFtcyhMYW5kcm9pZC9tZWRpYS9QbGF5YmFja1BhcmFtczspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2NyZWVuT25XaGlsZVBsYXlpbmcoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VyZmFjZShMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN5bmNQYXJhbXMoTGFuZHJvaWQvbWVkaWEvU3luY1BhcmFtczspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlkZW9TY2FsaW5nTW9kZShJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZvbHVtZShGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2FrZU1vZGUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcCgpViIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfRVJST1JfSU8iIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfRVJST1JfTUFMRk9STUVEIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX0VSUk9SX05PVF9WQUxJRF9GT1JfUFJPR1JFU1NJVkVfUExBWUJBQ0siIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9FUlJPUl9TRVJWRVJfRElFRCIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfRVJST1JfVElNRURfT1VUIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX0VSUk9SX1VOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX0VSUk9SX1VOU1VQUE9SVEVEIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX0lORk9fQVVESU9fTk9UX1BMQVlJTkciIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfSU5GT19CQURfSU5URVJMRUFWSU5HIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfSU5GT19CVUZGRVJJTkdfRU5EIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfSU5GT19CVUZGRVJJTkdfU1RBUlQiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9JTkZPX01FVEFEQVRBX1VQREFURSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX0lORk9fTk9UX1NFRUtBQkxFIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfSU5GT19TVEFSVEVEX0FTX05FWFQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfSU5GT19TVUJUSVRMRV9USU1FRF9PVVQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfSU5GT19VTktOT1dOIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfSU5GT19VTlNVUFBPUlRFRF9TVUJUSVRMRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9JTkZPX1ZJREVPX05PVF9QTEFZSU5HIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX0lORk9fVklERU9fUkVOREVSSU5HX1NUQVJUIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX0lORk9fVklERU9fVFJBQ0tfTEFHR0lORyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX01JTUVUWVBFX1RFWFRfU1VCUklQIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVQQVJFX0RSTV9TVEFUVVNfUFJFUEFSQVRJT05fRVJST1IiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUFJFUEFSRV9EUk1fU1RBVFVTX1BST1ZJU0lPTklOR19ORVRXT1JLX0VSUk9SIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVBBUkVfRFJNX1NUQVRVU19QUk9WSVNJT05JTkdfU0VSVkVSX0VSUk9SIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVBBUkVfRFJNX1NUQVRVU19TVUNDRVNTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFRUtfQ0xPU0VTVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRUVLX0NMT1NFU1RfU1lOQyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRUVLX05FWFRfU1lOQyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRUVLX1BSRVZJT1VTX1NZTkMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iVklERU9fU0NBTElOR19NT0RFX1NDQUxFX1RPX0ZJVCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWSURFT19TQ0FMSU5HX01PREVfU0NBTEVfVE9fRklUX1dJVEhfQ1JPUFBJTkciIHNpbmNlPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkRHJtSW5mbyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQc3NoKClMamF2YS91dGlsL01hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRTY2hlbWVzKClbTGphdmEvdXRpbC9VVUlEOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkTWV0cmljc0NvbnN0YW50cyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09ERUNfQVVESU8iLz4KLQkJPGZpZWxkIG5hbWU9IkNPREVDX1ZJREVPIi8+Ci0JCTxmaWVsZCBuYW1lPSJEVVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9DT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGUkFNRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkZSQU1FU19EUk9QUEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRUlHSFQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVfVFlQRV9BVURJTyIvPgotCQk8ZmllbGQgbmFtZT0iTUlNRV9UWVBFX1ZJREVPIi8+Ci0JCTxmaWVsZCBuYW1lPSJQTEFZSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSURUSCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkTm9Ecm1TY2hlbWVFeGNlcHRpb24iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFEcm1FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uQnVmZmVyaW5nVXBkYXRlTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQnVmZmVyaW5nVXBkYXRlKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyO0kpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkT25Db21wbGV0aW9uTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29tcGxldGlvbihMYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkT25Ecm1Db25maWdIZWxwZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRybUNvbmZpZyhMYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkT25Ecm1JbmZvTGlzdGVuZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRybUluZm8oTGFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXI7TGFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkRHJtSW5mbzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkT25Ecm1QcmVwYXJlZExpc3RlbmVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Ecm1QcmVwYXJlZChMYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllcjtJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uRXJyb3JMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25FcnJvcihMYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllcjtJSSlaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllciRPbkluZm9MaXN0ZW5lciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25JbmZvKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyO0lJKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uTWVkaWFUaW1lRGlzY29udGludWl0eUxpc3RlbmVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25NZWRpYVRpbWVEaXNjb250aW51aXR5KExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyO0xhbmRyb2lkL21lZGlhL01lZGlhVGltZXN0YW1wOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllciRPblByZXBhcmVkTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJlcGFyZWQoTGFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uU2Vla0NvbXBsZXRlTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2Vla0NvbXBsZXRlKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllciRPblN1YnRpdGxlRGF0YUxpc3RlbmVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdWJ0aXRsZURhdGEoTGFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXI7TGFuZHJvaWQvbWVkaWEvU3VidGl0bGVEYXRhOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllciRPblRpbWVkTWV0YURhdGFBdmFpbGFibGVMaXN0ZW5lciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVGltZWRNZXRhRGF0YUF2YWlsYWJsZShMYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllcjtMYW5kcm9pZC9tZWRpYS9UaW1lZE1ldGFEYXRhOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllciRPblRpbWVkVGV4dExpc3RlbmVyIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25UaW1lZFRleHQoTGFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXI7TGFuZHJvaWQvbWVkaWEvVGltZWRUZXh0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYVBsYXllciRPblZpZGVvU2l6ZUNoYW5nZWRMaXN0ZW5lciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25WaWRlb1NpemVDaGFuZ2VkKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyO0lJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJFByb3Zpc2lvbmluZ05ldHdvcmtFcnJvckV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYURybUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkUHJvdmlzaW9uaW5nU2VydmVyRXJyb3JFeGNlcHRpb24iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFEcm1FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJFRyYWNrSW5mbyIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9ybWF0KClMYW5kcm9pZC9tZWRpYS9NZWRpYUZvcm1hdDsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhbmd1YWdlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFja1R5cGUoKUkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX1RSQUNLX1RZUEVfQVVESU8iLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX1RSQUNLX1RZUEVfTUVUQURBVEEiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfVFJBQ0tfVFlQRV9TVUJUSVRMRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9UUkFDS19UWVBFX1RJTUVEVEVYVCIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfVFJBQ0tfVFlQRV9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9UUkFDS19UWVBFX1ZJREVPIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYVJlY29yZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9BdWRpb1JvdXRpbmciIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2ZU1pY3JvcGhvbmVzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdWRpb1NvdXJjZU1heCgpSSIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhBbXBsaXR1ZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXRyaWNzKClMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cmZhY2UoKUxhbmRyb2lkL3ZpZXcvU3VyZmFjZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InBhdXNlKClWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmVwYXJlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdW1lKClWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdWRpb0NoYW5uZWxzKEkpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdWRpb0VuY29kZXIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXVkaW9FbmNvZGluZ0JpdFJhdGUoSSlWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1ZGlvU2FtcGxpbmdSYXRlKEkpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdWRpb1NvdXJjZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdXhpbGlhcnlPdXRwdXRGaWxlKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOylWIiBzaW5jZT0iMTEiIHJlbW92ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV4aWxpYXJ5T3V0cHV0RmlsZShMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjExIiByZW1vdmVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbWVyYShMYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmE7KVYiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhcHR1cmVSYXRlKEQpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5wdXRTdXJmYWNlKExhbmRyb2lkL3ZpZXcvU3VyZmFjZTspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9jYXRpb24oRkYpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4RHVyYXRpb24oSSlWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1heEZpbGVTaXplKEopViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROZXh0T3V0cHV0RmlsZShMamF2YS9pby9GaWxlOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROZXh0T3V0cHV0RmlsZShMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25FcnJvckxpc3RlbmVyKExhbmRyb2lkL21lZGlhL01lZGlhUmVjb3JkZXIkT25FcnJvckxpc3RlbmVyOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uSW5mb0xpc3RlbmVyKExhbmRyb2lkL21lZGlhL01lZGlhUmVjb3JkZXIkT25JbmZvTGlzdGVuZXI7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3JpZW50YXRpb25IaW50KEkpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdXRwdXRGaWxlKExqYXZhL2lvL0ZpbGU7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldE91dHB1dEZpbGUoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3V0cHV0RmlsZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE91dHB1dEZvcm1hdChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmV2aWV3RGlzcGxheShMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9maWxlKExhbmRyb2lkL21lZGlhL0NhbWNvcmRlclByb2ZpbGU7KVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlkZW9FbmNvZGVyKEkpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWRlb0VuY29kaW5nQml0UmF0ZShJKVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlkZW9FbmNvZGluZ1Byb2ZpbGVMZXZlbChJSSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWRlb0ZyYW1lUmF0ZShJKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlkZW9TaXplKElJKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlkZW9Tb3VyY2UoSSlWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcCgpViIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfRVJST1JfU0VSVkVSX0RJRUQiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfUkVDT1JERVJfRVJST1JfVU5LTk9XTiIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX1JFQ09SREVSX0lORk9fTUFYX0RVUkFUSU9OX1JFQUNIRUQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9SRUNPUkRFUl9JTkZPX01BWF9GSUxFU0laRV9BUFBST0FDSElORyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9SRUNPUkRFUl9JTkZPX01BWF9GSUxFU0laRV9SRUFDSEVEIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfUkVDT1JERVJfSU5GT19ORVhUX09VVFBVVF9GSUxFX1NUQVJURUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfUkVDT1JERVJfSU5GT19VTktOT1dOIiBzaW5jZT0iMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFSZWNvcmRlciRBdWRpb0VuY29kZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9NZWRpYVJlY29yZGVyOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQUMiIHNpbmNlPSIxMCIvPgotCQk8ZmllbGQgbmFtZT0iQUFDX0VMRCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTVJfTkIiLz4KLQkJPGZpZWxkIG5hbWU9IkFNUl9XQiIgc2luY2U9IjEwIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRV9BQUMiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVk9SQklTIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUmVjb3JkZXIkQXVkaW9Tb3VyY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9NZWRpYVJlY29yZGVyOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQU1DT1JERVIiIHNpbmNlPSI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFTU9URV9TVUJNSVgiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVU5QUk9DRVNTRUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVk9JQ0VfQ0FMTCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlZPSUNFX0NPTU1VTklDQVRJT04iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iVk9JQ0VfRE9XTkxJTksiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWT0lDRV9SRUNPR05JVElPTiIgc2luY2U9IjciLz4KLQkJPGZpZWxkIG5hbWU9IlZPSUNFX1VQTElOSyIgc2luY2U9IjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUmVjb3JkZXIkTWV0cmljc0NvbnN0YW50cyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQVVESU9fQklUUkFURSIvPgotCQk8ZmllbGQgbmFtZT0iQVVESU9fQ0hBTk5FTFMiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX1NBTVBMRVJBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX1RJTUVTQ0FMRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQVFVSRV9GUFMiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUFRVUkVfRlBTX0VOQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iRlJBTUVSQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRUlHSFQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PVklFX1RJTUVTQ0FMRSIvPgotCQk8ZmllbGQgbmFtZT0iUk9UQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlZJREVPX0JJVFJBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlZJREVPX0lGUkFNRV9JTlRFUlZBTCIvPgotCQk8ZmllbGQgbmFtZT0iVklERU9fTEVWRUwiLz4KLQkJPGZpZWxkIG5hbWU9IlZJREVPX1BST0ZJTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlZJREVPX1RJTUVTQ0FMRSIvPgotCQk8ZmllbGQgbmFtZT0iV0lEVEgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUmVjb3JkZXIkT25FcnJvckxpc3RlbmVyIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkVycm9yKExhbmRyb2lkL21lZGlhL01lZGlhUmVjb3JkZXI7SUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFSZWNvcmRlciRPbkluZm9MaXN0ZW5lciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25JbmZvKExhbmRyb2lkL21lZGlhL01lZGlhUmVjb3JkZXI7SUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFSZWNvcmRlciRPdXRwdXRGb3JtYXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9NZWRpYVJlY29yZGVyOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQUNfQURUUyIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTVJfTkIiIHNpbmNlPSIxMCIvPgotCQk8ZmllbGQgbmFtZT0iQU1SX1dCIiBzaW5jZT0iMTAiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1QRUdfMl9UUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHXzQiLz4KLQkJPGZpZWxkIG5hbWU9IlJBV19BTVIiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVEhSRUVfR1BQIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUJNIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUmVjb3JkZXIkVmlkZW9FbmNvZGVyIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbWVkaWEvTWVkaWFSZWNvcmRlcjspViIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iSDI2MyIvPgotCQk8ZmllbGQgbmFtZT0iSDI2NCIvPgotCQk8ZmllbGQgbmFtZT0iSEVWQyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNUEVHXzRfU1AiLz4KLQkJPGZpZWxkIG5hbWU9IlZQOCIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYVJlY29yZGVyJFZpZGVvU291cmNlIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbWVkaWEvTWVkaWFSZWNvcmRlcjspViIvPgotCQk8ZmllbGQgbmFtZT0iQ0FNRVJBIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVJGQUNFIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZENhbGxiYWNrKElMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRDYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZENhbGxiYWNrKElMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRDYWxsYmFjaztJKVYiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFVzZXJSb3V0ZShMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRVc2VyUm91dGVJbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJVc2VyUm91dGVzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlUm91dGVDYXRlZ29yeShJWilMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRSb3V0ZUNhdGVnb3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVJvdXRlQ2F0ZWdvcnkoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7WilMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRSb3V0ZUNhdGVnb3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVVzZXJSb3V0ZShMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRSb3V0ZUNhdGVnb3J5OylMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRVc2VyUm91dGVJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhdGVnb3J5QXQoSSlMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRSb3V0ZUNhdGVnb3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhdGVnb3J5Q291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0Um91dGUoKUxhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFJvdXRlSW5mbzsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvdXRlQXQoSSlMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRSb3V0ZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um91dGVDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGVkUm91dGUoSSlMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRSb3V0ZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQ2FsbGJhY2soTGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkQ2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVVc2VyUm91dGUoTGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkVXNlclJvdXRlSW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbGVjdFJvdXRlKElMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRSb3V0ZUluZm87KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTExCQUNLX0ZMQUdfUEVSRk9STV9BQ1RJVkVfU0NBTiIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxMQkFDS19GTEFHX1VORklMVEVSRURfRVZFTlRTIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVVRFX1RZUEVfTElWRV9BVURJTyIvPgotCQk8ZmllbGQgbmFtZT0iUk9VVEVfVFlQRV9MSVZFX1ZJREVPIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IlJPVVRFX1RZUEVfVVNFUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkQ2FsbGJhY2siIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJvdXRlQWRkZWQoTGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXI7TGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkUm91dGVJbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Sb3V0ZUNoYW5nZWQoTGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXI7TGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkUm91dGVJbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Sb3V0ZUdyb3VwZWQoTGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXI7TGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkUm91dGVJbmZvO0xhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFJvdXRlR3JvdXA7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Sb3V0ZVByZXNlbnRhdGlvbkRpc3BsYXlDaGFuZ2VkKExhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyO0xhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFJvdXRlSW5mbzspViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Sb3V0ZVJlbW92ZWQoTGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXI7TGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkUm91dGVJbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Sb3V0ZVNlbGVjdGVkKExhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyO0lMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRSb3V0ZUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJvdXRlVW5ncm91cGVkKExhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyO0xhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFJvdXRlSW5mbztMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRSb3V0ZUdyb3VwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Sb3V0ZVVuc2VsZWN0ZWQoTGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXI7SUxhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFJvdXRlSW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUm91dGVWb2x1bWVDaGFuZ2VkKExhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyO0xhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFJvdXRlSW5mbzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkUm91dGVDYXRlZ29yeSIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SVopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvdXRlcyhMamF2YS91dGlsL0xpc3Q7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRUeXBlcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzR3JvdXBhYmxlKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRSb3V0ZUdyb3VwIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFJvdXRlSW5mbyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkUm91dGVDYXRlZ29yeTspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUm91dGUoTGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkUm91dGVJbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUm91dGUoTGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkUm91dGVJbmZvO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvdXRlQXQoSSlMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRSb3V0ZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um91dGVDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVJvdXRlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVJvdXRlKExhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFJvdXRlSW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEljb25EcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEljb25SZXNvdXJjZShJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFJvdXRlSW5mbyIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkUm91dGVDYXRlZ29yeTspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2F0ZWdvcnkoKUxhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFJvdXRlQ2F0ZWdvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlVHlwZSgpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3JvdXAoKUxhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFJvdXRlR3JvdXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWNvbkRyYXdhYmxlKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGxheWJhY2tTdHJlYW0oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQbGF5YmFja1R5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVzZW50YXRpb25EaXNwbGF5KClMYW5kcm9pZC92aWV3L0Rpc3BsYXk7IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0dXMoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZFR5cGVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFnKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2x1bWUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2x1bWVIYW5kbGluZygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZvbHVtZU1heCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ29ubmVjdGluZygpWiIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbmFibGVkKClaIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0U2V0Vm9sdW1lKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RVcGRhdGVWb2x1bWUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFnKExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVZJQ0VfVFlQRV9CTFVFVE9PVEgiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iREVWSUNFX1RZUEVfU1BFQUtFUiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERVZJQ0VfVFlQRV9UViIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERVZJQ0VfVFlQRV9VTktOT1dOIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlBMQVlCQUNLX1RZUEVfTE9DQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlBMQVlCQUNLX1RZUEVfUkVNT1RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQTEFZQkFDS19WT0xVTUVfRklYRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBMQVlCQUNLX1ZPTFVNRV9WQVJJQUJMRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkU2ltcGxlQ2FsbGJhY2siIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkQ2FsbGJhY2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFVzZXJSb3V0ZUluZm8iIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkUm91dGVJbmZvIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRSb3V0ZUNhdGVnb3J5OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZW1vdGVDb250cm9sQ2xpZW50KClMYW5kcm9pZC9tZWRpYS9SZW1vdGVDb250cm9sQ2xpZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlc2NyaXB0aW9uKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uRHJhd2FibGUoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uUmVzb3VyY2UoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmFtZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYW1lKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGxheWJhY2tTdHJlYW0oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGxheWJhY2tUeXBlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlbW90ZUNvbnRyb2xDbGllbnQoTGFuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbENsaWVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXR1cyhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZvbHVtZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWb2x1bWVDYWxsYmFjayhMYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlciRWb2x1bWVDYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZvbHVtZUhhbmRsaW5nKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZvbHVtZU1heChJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFZvbHVtZUNhbGxiYWNrIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Wb2x1bWVTZXRSZXF1ZXN0KExhbmRyb2lkL21lZGlhL01lZGlhUm91dGVyJFJvdXRlSW5mbztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblZvbHVtZVVwZGF0ZVJlcXVlc3QoTGFuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXIkUm91dGVJbmZvO0kpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFTY2FubmVyQ29ubmVjdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvY29udGVudC9TZXJ2aWNlQ29ubmVjdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvbWVkaWEvTWVkaWFTY2FubmVyQ29ubmVjdGlvbiRNZWRpYVNjYW5uZXJDb25uZWN0aW9uQ2xpZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29ubmVjdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2Nvbm5lY3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nvbm5lY3RlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNjYW5GaWxlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtbTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL21lZGlhL01lZGlhU2Nhbm5lckNvbm5lY3Rpb24kT25TY2FuQ29tcGxldGVkTGlzdGVuZXI7KVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2NhbkZpbGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhU2Nhbm5lckNvbm5lY3Rpb24kTWVkaWFTY2FubmVyQ29ubmVjdGlvbkNsaWVudCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFTY2FubmVyQ29ubmVjdGlvbiRPblNjYW5Db21wbGV0ZWRMaXN0ZW5lciIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1lZGlhU2Nhbm5lckNvbm5lY3RlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2NhbkNvbXBsZXRlZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYVNjYW5uZXJDb25uZWN0aW9uJE9uU2NhbkNvbXBsZXRlZExpc3RlbmVyIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNjYW5Db21wbGV0ZWQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvbmV0L1VyaTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFTeW5jIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSW5wdXRTdXJmYWNlKClMYW5kcm9pZC92aWV3L1N1cmZhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmx1c2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQbGF5YmFja1BhcmFtcygpTGFuZHJvaWQvbWVkaWEvUGxheWJhY2tQYXJhbXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3luY1BhcmFtcygpTGFuZHJvaWQvbWVkaWEvU3luY1BhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXAoKUxhbmRyb2lkL21lZGlhL01lZGlhVGltZXN0YW1wOyIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXVlQXVkaW8oTGphdmEvbmlvL0J5dGVCdWZmZXI7SUopViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdWRpb1RyYWNrKExhbmRyb2lkL21lZGlhL0F1ZGlvVHJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYWxsYmFjayhMYW5kcm9pZC9tZWRpYS9NZWRpYVN5bmMkQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uRXJyb3JMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9NZWRpYVN5bmMkT25FcnJvckxpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQbGF5YmFja1BhcmFtcyhMYW5kcm9pZC9tZWRpYS9QbGF5YmFja1BhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1cmZhY2UoTGFuZHJvaWQvdmlldy9TdXJmYWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3luY1BhcmFtcyhMYW5kcm9pZC9tZWRpYS9TeW5jUGFyYW1zOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQVNZTkNfRVJST1JfQVVESU9UUkFDS19GQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQVNZTkNfRVJST1JfU1VSRkFDRV9GQUlMIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYVN5bmMkQ2FsbGJhY2siIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF1ZGlvQnVmZmVyQ29uc3VtZWQoTGFuZHJvaWQvbWVkaWEvTWVkaWFTeW5jO0xqYXZhL25pby9CeXRlQnVmZmVyO0kpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFTeW5jJE9uRXJyb3JMaXN0ZW5lciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXJyb3IoTGFuZHJvaWQvbWVkaWEvTWVkaWFTeW5jO0lJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhU3luY0V2ZW50IiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUV2ZW50KEkpTGFuZHJvaWQvbWVkaWEvTWVkaWFTeW5jRXZlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXVkaW9TZXNzaW9uSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXVkaW9TZXNzaW9uSWQoSSlMYW5kcm9pZC9tZWRpYS9NZWRpYVN5bmNFdmVudDsiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNfRVZFTlRfTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ19FVkVOVF9QUkVTRU5UQVRJT05fQ09NUExFVEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhVGltZXN0YW1wIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5jaG9yTWVkaWFUaW1lVXMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmNob3JTeXRlbU5hbm9UaW1lKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVkaWFDbG9ja1JhdGUoKUYiLz4KLQkJPGZpZWxkIG5hbWU9IlRJTUVTVEFNUF9VTktOT1dOIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL01pY3JvcGhvbmVJbmZvIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7SUlJTGFuZHJvaWQvbWVkaWEvTWljcm9waG9uZUluZm8kQ29vcmRpbmF0ZTNGO0xhbmRyb2lkL21lZGlhL01pY3JvcGhvbmVJbmZvJENvb3JkaW5hdGUzRjtMamF2YS91dGlsL0xpc3Q7TGphdmEvdXRpbC9MaXN0O0ZGRkkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWRkcmVzcygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhbm5lbE1hcHBpbmcoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNjcmlwdGlvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlyZWN0aW9uYWxpdHkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcmVxdWVuY3lSZXNwb25zZSgpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyb3VwKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmRleEluVGhlR3JvdXAoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFNwbCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pblNwbCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yaWVudGF0aW9uKClMYW5kcm9pZC9tZWRpYS9NaWNyb3Bob25lSW5mbyRDb29yZGluYXRlM0Y7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zaXRpb24oKUxhbmRyb2lkL21lZGlhL01pY3JvcGhvbmVJbmZvJENvb3JkaW5hdGUzRjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZW5zaXRpdml0eSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfTUFQUElOR19ESVJFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfTUFQUElOR19QUk9DRVNTRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX0JJX0RJUkVDVElPTkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9DQVJESU9JRCIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfSFlQRVJfQ0FSRElPSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX09NTkkiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX1NVUEVSX0NBUkRJT0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUk9VUF9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTkRFWF9JTl9USEVfR1JPVVBfVU5LTk9XTiIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQVRJT05fTUFJTkJPRFkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FUSU9OX01BSU5CT0RZX01PVkFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FUSU9OX1BFUklQSEVSQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FUSU9OX1VOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9Ik9SSUVOVEFUSU9OX1VOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9IlBPU0lUSU9OX1VOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlNJVElWSVRZX1VOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9IlNQTF9VTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9NaWNyb3Bob25lSW5mbyRDb29yZGluYXRlM0YiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZGRilWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IngiLz4KLQkJPGZpZWxkIG5hbWU9InkiLz4KLQkJPGZpZWxkIG5hbWU9InoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL05vdFByb3Zpc2lvbmVkRXhjZXB0aW9uIiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhRHJtRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9QbGF5YmFja1BhcmFtcyIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxvd0RlZmF1bHRzKClMYW5kcm9pZC9tZWRpYS9QbGF5YmFja1BhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdWRpb0ZhbGxiYWNrTW9kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBpdGNoKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3BlZWQoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdWRpb0ZhbGxiYWNrTW9kZShJKUxhbmRyb2lkL21lZGlhL1BsYXliYWNrUGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBpdGNoKEYpTGFuZHJvaWQvbWVkaWEvUGxheWJhY2tQYXJhbXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3BlZWQoRilMYW5kcm9pZC9tZWRpYS9QbGF5YmFja1BhcmFtczsiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX0ZBTExCQUNLX01PREVfREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iQVVESU9fRkFMTEJBQ0tfTU9ERV9GQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT19GQUxMQkFDS19NT0RFX01VVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL1JhdGluZyIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElGKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlcmNlbnRSYXRpbmcoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSYXRpbmdTdHlsZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXJSYXRpbmcoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNIZWFydCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmF0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RodW1iVXAoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdIZWFydFJhdGluZyhaKUxhbmRyb2lkL21lZGlhL1JhdGluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdQZXJjZW50YWdlUmF0aW5nKEYpTGFuZHJvaWQvbWVkaWEvUmF0aW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1N0YXJSYXRpbmcoSUYpTGFuZHJvaWQvbWVkaWEvUmF0aW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1RodW1iUmF0aW5nKFopTGFuZHJvaWQvbWVkaWEvUmF0aW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1VucmF0ZWRSYXRpbmcoSSlMYW5kcm9pZC9tZWRpYS9SYXRpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJSQVRJTkdfM19TVEFSUyIvPgotCQk8ZmllbGQgbmFtZT0iUkFUSU5HXzRfU1RBUlMiLz4KLQkJPGZpZWxkIG5hbWU9IlJBVElOR181X1NUQVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJSQVRJTkdfSEVBUlQiLz4KLQkJPGZpZWxkIG5hbWU9IlJBVElOR19OT05FIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlJBVElOR19QRVJDRU5UQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSQVRJTkdfVEhVTUJfVVBfRE9XTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbENsaWVudCIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7TGFuZHJvaWQvb3MvTG9vcGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWRpdE1ldGFkYXRhKFopTGFuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbENsaWVudCRNZXRhZGF0YUVkaXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZWRpYVNlc3Npb24oKUxhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFTZXNzaW9uOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWV0YWRhdGFVcGRhdGVMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9SZW1vdGVDb250cm9sQ2xpZW50JE9uTWV0YWRhdGFVcGRhdGVMaXN0ZW5lcjspViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25HZXRQbGF5YmFja1Bvc2l0aW9uTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbENsaWVudCRPbkdldFBsYXliYWNrUG9zaXRpb25MaXN0ZW5lcjspViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGxheWJhY2tQb3NpdGlvblVwZGF0ZUxpc3RlbmVyKExhbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xDbGllbnQkT25QbGF5YmFja1Bvc2l0aW9uVXBkYXRlTGlzdGVuZXI7KVYiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBsYXliYWNrU3RhdGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGxheWJhY2tTdGF0ZShJSkYpViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhbnNwb3J0Q29udHJvbEZsYWdzKEkpViIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19LRVlfTUVESUFfRkFTVF9GT1JXQVJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0tFWV9NRURJQV9ORVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0tFWV9NRURJQV9QQVVTRSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19LRVlfTUVESUFfUExBWSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19LRVlfTUVESUFfUExBWV9QQVVTRSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19LRVlfTUVESUFfUE9TSVRJT05fVVBEQVRFIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfS0VZX01FRElBX1BSRVZJT1VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0tFWV9NRURJQV9SQVRJTkciIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19LRVlfTUVESUFfUkVXSU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0tFWV9NRURJQV9TVE9QIi8+Ci0JCTxmaWVsZCBuYW1lPSJQTEFZU1RBVEVfQlVGRkVSSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJQTEFZU1RBVEVfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlBMQVlTVEFURV9GQVNUX0ZPUldBUkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlBMQVlTVEFURV9QQVVTRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBMQVlTVEFURV9QTEFZSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJQTEFZU1RBVEVfUkVXSU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJQTEFZU1RBVEVfU0tJUFBJTkdfQkFDS1dBUkRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJQTEFZU1RBVEVfU0tJUFBJTkdfRk9SV0FSRFMiLz4KLQkJPGZpZWxkIG5hbWU9IlBMQVlTVEFURV9TVE9QUEVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9SZW1vdGVDb250cm9sQ2xpZW50JE1ldGFkYXRhRWRpdG9yIiBzaW5jZT0iMTQiIGRlcHJlY2F0ZWQ9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhRWRpdG9yIiBzaW5jZT0iMTkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgcmVtb3ZlZD0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbENsaWVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRCaXRtYXAoSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspTGFuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbENsaWVudCRNZXRhZGF0YUVkaXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRMb25nKElKKUxhbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xDbGllbnQkTWV0YWRhdGFFZGl0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0T2JqZWN0KElMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbENsaWVudCRNZXRhZGF0YUVkaXRvcjsiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFN0cmluZyhJTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xDbGllbnQkTWV0YWRhdGFFZGl0b3I7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCSVRNQVBfS0VZX0FSVFdPUksiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xDbGllbnQkT25HZXRQbGF5YmFja1Bvc2l0aW9uTGlzdGVuZXIiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdldFBsYXliYWNrUG9zaXRpb24oKUoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xDbGllbnQkT25NZXRhZGF0YVVwZGF0ZUxpc3RlbmVyIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25NZXRhZGF0YVVwZGF0ZShJTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xDbGllbnQkT25QbGF5YmFja1Bvc2l0aW9uVXBkYXRlTGlzdGVuZXIiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBsYXliYWNrUG9zaXRpb25VcGRhdGUoSilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9SZW1vdGVDb250cm9sbGVyIiBzaW5jZT0iMTkiIGRlcHJlY2F0ZWQ9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbGxlciRPbkNsaWVudFVwZGF0ZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9tZWRpYS9SZW1vdGVDb250cm9sbGVyJE9uQ2xpZW50VXBkYXRlTGlzdGVuZXI7TGFuZHJvaWQvb3MvTG9vcGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJBcnR3b3JrQ29uZmlndXJhdGlvbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVkaXRNZXRhZGF0YSgpTGFuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbGxlciRNZXRhZGF0YUVkaXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFc3RpbWF0ZWRNZWRpYVBvc2l0aW9uKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2Vla1RvKEopWiIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRNZWRpYUtleUV2ZW50KExhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBcnR3b3JrQ29uZmlndXJhdGlvbihJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3luY2hyb25pemF0aW9uTW9kZShJKVoiLz4KLQkJPGZpZWxkIG5hbWU9IlBPU0lUSU9OX1NZTkNIUk9OSVpBVElPTl9DSEVDSyIvPgotCQk8ZmllbGQgbmFtZT0iUE9TSVRJT05fU1lOQ0hST05JWkFUSU9OX05PTkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xsZXIkTWV0YWRhdGFFZGl0b3IiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvTWVkaWFNZXRhZGF0YUVkaXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9SZW1vdGVDb250cm9sbGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9SZW1vdGVDb250cm9sbGVyJE9uQ2xpZW50VXBkYXRlTGlzdGVuZXIiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNsaWVudENoYW5nZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNsaWVudE1ldGFkYXRhVXBkYXRlKExhbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xsZXIkTWV0YWRhdGFFZGl0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNsaWVudFBsYXliYWNrU3RhdGVVcGRhdGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DbGllbnRQbGF5YmFja1N0YXRlVXBkYXRlKElKSkYpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2xpZW50VHJhbnNwb3J0Q29udHJvbFVwZGF0ZShJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL1Jlc291cmNlQnVzeUV4Y2VwdGlvbiIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9NZWRpYURybUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvUmluZ3RvbmUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O1opViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXVkaW9BdHRyaWJ1dGVzKClMYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXM7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJlYW1UeXBlKClJIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpdGxlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vm9sdW1lKClGIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xvb3BpbmcoKVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGxheWluZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBsYXkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdWRpb0F0dHJpYnV0ZXMoTGFuZHJvaWQvbWVkaWEvQXVkaW9BdHRyaWJ1dGVzOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb29waW5nKFopViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RyZWFtVHlwZShJKVYiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Vm9sdW1lKEYpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvUmluZ3RvbmVNYW5hZ2VyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYXBwL0FjdGl2aXR5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdHVhbERlZmF1bHRSaW5ndG9uZVVyaShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SSlMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnNvcigpTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRUeXBlKExhbmRyb2lkL25ldC9Vcmk7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0VXJpKEkpTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmNsdWRlRHJtKClaIiBkZXByZWNhdGVkPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJpbmd0b25lKEkpTGFuZHJvaWQvbWVkaWEvUmluZ3RvbmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmluZ3RvbmUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL21lZGlhL1Jpbmd0b25lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJpbmd0b25lUG9zaXRpb24oTGFuZHJvaWQvbmV0L1VyaTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJpbmd0b25lVXJpKEkpTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdG9wUHJldmlvdXNSaW5ndG9uZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbGlkUmluZ3RvbmVVcmkoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImluZmVyU3RyZWFtVHlwZSgpSSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RlZmF1bHQoTGFuZHJvaWQvbmV0L1VyaTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjdHVhbERlZmF1bHRSaW5ndG9uZVVyaShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SUxhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbmNsdWRlRHJtKFopViIgZGVwcmVjYXRlZD0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdG9wUHJldmlvdXNSaW5ndG9uZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUeXBlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BQcmV2aW91c1Jpbmd0b25lKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUklOR1RPTkVfUElDS0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9SSU5HVE9ORV9ERUZBVUxUX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUklOR1RPTkVfRVhJU1RJTkdfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9SSU5HVE9ORV9JTkNMVURFX0RSTSIgZGVwcmVjYXRlZD0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JJTkdUT05FX1BJQ0tFRF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JJTkdUT05FX1NIT1dfREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUklOR1RPTkVfU0hPV19TSUxFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JJTkdUT05FX1RJVExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9SSU5HVE9ORV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRF9DT0xVTU5fSU5ERVgiLz4KLQkJPGZpZWxkIG5hbWU9IlRJVExFX0NPTFVNTl9JTkRFWCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BTEFSTSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BTEwiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTk9USUZJQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1JJTkdUT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJVUklfQ09MVU1OX0lOREVYIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9Tb3VuZFBvb2wiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdXRvUGF1c2UoKVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXV0b1Jlc3VtZSgpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZChMYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldEZpbGVEZXNjcmlwdG9yO0kpSSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0pKSSlJIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWQoTGphdmEvbGFuZy9TdHJpbmc7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0icGF1c2UoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGxheShJRkZJSUYpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN1bWUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9vcChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25Mb2FkQ29tcGxldGVMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9Tb3VuZFBvb2wkT25Mb2FkQ29tcGxldGVMaXN0ZW5lcjspViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmlvcml0eShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmF0ZShJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Vm9sdW1lKElGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmxvYWQoSSlaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9Tb3VuZFBvb2wkQnVpbGRlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9tZWRpYS9Tb3VuZFBvb2w7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXVkaW9BdHRyaWJ1dGVzKExhbmRyb2lkL21lZGlhL0F1ZGlvQXR0cmlidXRlczspTGFuZHJvaWQvbWVkaWEvU291bmRQb29sJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4U3RyZWFtcyhJKUxhbmRyb2lkL21lZGlhL1NvdW5kUG9vbCRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvU291bmRQb29sJE9uTG9hZENvbXBsZXRlTGlzdGVuZXIiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTG9hZENvbXBsZXRlKExhbmRyb2lkL21lZGlhL1NvdW5kUG9vbDtJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9TdWJ0aXRsZURhdGEiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREdXJhdGlvblVzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhcnRUaW1lVXMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFja0luZGV4KClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9TeW5jUGFyYW1zIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsb3dEZWZhdWx0cygpTGFuZHJvaWQvbWVkaWEvU3luY1BhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdWRpb0FkanVzdE1vZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcmFtZVJhdGUoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeW5jU291cmNlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9sZXJhbmNlKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXVkaW9BZGp1c3RNb2RlKEkpTGFuZHJvaWQvbWVkaWEvU3luY1BhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGcmFtZVJhdGUoRilMYW5kcm9pZC9tZWRpYS9TeW5jUGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN5bmNTb3VyY2UoSSlMYW5kcm9pZC9tZWRpYS9TeW5jUGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRvbGVyYW5jZShGKUxhbmRyb2lkL21lZGlhL1N5bmNQYXJhbXM7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT19BREpVU1RfTU9ERV9ERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVURJT19BREpVU1RfTU9ERV9SRVNBTVBMRSIvPgotCQk8ZmllbGQgbmFtZT0iQVVESU9fQURKVVNUX01PREVfU1RSRVRDSCIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ19TT1VSQ0VfQVVESU8iLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNfU09VUkNFX0RFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNfU09VUkNFX1NZU1RFTV9DTE9DSyIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ19TT1VSQ0VfVlNZTkMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL1RodW1ibmFpbFV0aWxzIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVWaWRlb1RodW1ibmFpbChMamF2YS9sYW5nL1N0cmluZztJKUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHRyYWN0VGh1bWJuYWlsKExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtJSSlMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXh0cmFjdFRodW1ibmFpbChMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7SUlJKUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QVElPTlNfUkVDWUNMRV9JTlBVVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvVGltZWRNZXRhRGF0YSIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXRhRGF0YSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXAoKUoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL1RpbWVkVGV4dCIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb3VuZHMoKUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9Ub25lR2VuZXJhdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1ZGlvU2Vzc2lvbklkKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRUb25lKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0VG9uZShJSSlaIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BUb25lKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfVk9MVU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fVk9MVU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfQUJCUl9BTEVSVCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9BQkJSX0lOVEVSQ0VQVCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9BQkJSX1JFT1JERVIiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfQUxFUlRfQVVUT1JFRElBTF9MSVRFIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9DRE1BX0FMRVJUX0NBTExfR1VBUkQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfQUxFUlRfSU5DQUxMX0xJVEUiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfQUxFUlRfTkVUV09SS19MSVRFIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9DRE1BX0FOU1dFUiIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9DQUxMRFJPUF9MSVRFIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9DRE1BX0NBTExfU0lHTkFMX0lTRE5fSU5URVJHUk9VUCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9DQUxMX1NJR05BTF9JU0ROX05PUk1BTCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9DQUxMX1NJR05BTF9JU0ROX1BBVDMiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfQ0FMTF9TSUdOQUxfSVNETl9QQVQ1IiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9DRE1BX0NBTExfU0lHTkFMX0lTRE5fUEFUNiIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9DQUxMX1NJR05BTF9JU0ROX1BBVDciIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfQ0FMTF9TSUdOQUxfSVNETl9QSU5HX1JJTkciIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfQ0FMTF9TSUdOQUxfSVNETl9TUF9QUkkiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfQ09ORklSTSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9ESUFMX1RPTkVfTElURSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9FTUVSR0VOQ1lfUklOR0JBQ0siIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfSElHSF9MIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9DRE1BX0hJR0hfUEJYX0wiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfSElHSF9QQlhfU0xTIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9DRE1BX0hJR0hfUEJYX1NTIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9DRE1BX0hJR0hfUEJYX1NTTCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9ISUdIX1BCWF9TX1g0IiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9DRE1BX0hJR0hfU0xTIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9DRE1BX0hJR0hfU1MiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfSElHSF9TU0wiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfSElHSF9TU18yIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9DRE1BX0hJR0hfU19YNCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9JTlRFUkNFUFQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfS0VZUEFEX1ZPTFVNRV9LRVlfTElURSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9MT1dfTCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9MT1dfUEJYX0wiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfTE9XX1BCWF9TTFMiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfTE9XX1BCWF9TUyIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9MT1dfUEJYX1NTTCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9MT1dfUEJYX1NfWDQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfTE9XX1NMUyIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9MT1dfU1MiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfTE9XX1NTTCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9MT1dfU1NfMiIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9MT1dfU19YNCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9NRURfTCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9NRURfUEJYX0wiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfTUVEX1BCWF9TTFMiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfTUVEX1BCWF9TUyIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9NRURfUEJYX1NTTCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9NRURfUEJYX1NfWDQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfTUVEX1NMUyIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9NRURfU1MiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfTUVEX1NTTCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9NRURfU1NfMiIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9NRURfU19YNCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9ORVRXT1JLX0JVU1kiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfTkVUV09SS19CVVNZX09ORV9TSE9UIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9DRE1BX05FVFdPUktfQ0FMTFdBSVRJTkciIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfTkVUV09SS19VU0FfUklOR0JBQ0siIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfT05FX01JTl9CRUVQIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9DRE1BX1BJUCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9QUkVTU0hPTERLRVlfTElURSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfQ0RNQV9SRU9SREVSIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9DRE1BX1NJR05BTF9PRkYiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0NETUFfU09GVF9FUlJPUl9MSVRFIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9EVE1GXzAiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfRFRNRl8xIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0RUTUZfMiIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9EVE1GXzMiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfRFRNRl80Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0RUTUZfNSIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9EVE1GXzYiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfRFRNRl83Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0RUTUZfOCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9EVE1GXzkiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfRFRNRl9BIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0RUTUZfQiIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9EVE1GX0MiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfRFRNRl9EIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX0RUTUZfUCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9EVE1GX1MiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfUFJPUF9BQ0siLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfUFJPUF9CRUVQIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX1BST1BfQkVFUDIiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfUFJPUF9OQUNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX1BST1BfUFJPTVBUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX1NVUF9CVVNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX1NVUF9DQUxMX1dBSVRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfU1VQX0NPTkZJUk0iIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX1NVUF9DT05HRVNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX1NVUF9DT05HRVNUSU9OX0FCQlJFViIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfU1VQX0RJQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlRPTkVfU1VQX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX1NVUF9JTlRFUkNFUFQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX1NVUF9JTlRFUkNFUFRfQUJCUkVWIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9TVVBfUElQIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9TVVBfUkFESU9fQUNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT05FX1NVUF9SQURJT19OT1RBVkFJTCIvPgotCQk8ZmllbGQgbmFtZT0iVE9ORV9TVVBfUklOR1RPTkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL1Vuc3VwcG9ydGVkU2NoZW1lRXhjZXB0aW9uIiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL21lZGlhL01lZGlhRHJtRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9Wb2x1bWVBdXRvbWF0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVm9sdW1lU2hhcGVyKExhbmRyb2lkL21lZGlhL1ZvbHVtZVNoYXBlciRDb25maWd1cmF0aW9uOylMYW5kcm9pZC9tZWRpYS9Wb2x1bWVTaGFwZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9Wb2x1bWVQcm92aWRlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRWb2x1bWUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhWb2x1bWUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2x1bWVDb250cm9sKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BZGp1c3RWb2x1bWUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXRWb2x1bWVUbyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXJyZW50Vm9sdW1lKEkpViIvPgotCQk8ZmllbGQgbmFtZT0iVk9MVU1FX0NPTlRST0xfQUJTT0xVVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlZPTFVNRV9DT05UUk9MX0ZJWEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJWT0xVTUVfQ09OVFJPTF9SRUxBVElWRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvVm9sdW1lU2hhcGVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BdXRvQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHkoTGFuZHJvaWQvbWVkaWEvVm9sdW1lU2hhcGVyJE9wZXJhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZvbHVtZSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2UoTGFuZHJvaWQvbWVkaWEvVm9sdW1lU2hhcGVyJENvbmZpZ3VyYXRpb247TGFuZHJvaWQvbWVkaWEvVm9sdW1lU2hhcGVyJE9wZXJhdGlvbjtaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL1ZvbHVtZVNoYXBlciRDb25maWd1cmF0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREdXJhdGlvbigpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVycG9sYXRvclR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhpbXVtQ3VydmVQb2ludHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lcygpW0YiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2x1bWVzKClbRiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iQ1VCSUNfUkFNUCIvPgotCQk8ZmllbGQgbmFtZT0iSU5URVJQT0xBVE9SX1RZUEVfQ1VCSUMiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSUE9MQVRPUl9UWVBFX0NVQklDX01PTk9UT05JQyIvPgotCQk8ZmllbGQgbmFtZT0iSU5URVJQT0xBVE9SX1RZUEVfTElORUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlBPTEFUT1JfVFlQRV9TVEVQIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSU5FQVJfUkFNUCIvPgotCQk8ZmllbGQgbmFtZT0iU0NVUlZFX1JBTVAiLz4KLQkJPGZpZWxkIG5hbWU9IlNJTkVfUkFNUCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvVm9sdW1lU2hhcGVyJENvbmZpZ3VyYXRpb24kQnVpbGRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9Wb2x1bWVTaGFwZXIkQ29uZmlndXJhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9tZWRpYS9Wb2x1bWVTaGFwZXIkQ29uZmlndXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZlcnRWb2x1bWVzKClMYW5kcm9pZC9tZWRpYS9Wb2x1bWVTaGFwZXIkQ29uZmlndXJhdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZmxlY3RUaW1lcygpTGFuZHJvaWQvbWVkaWEvVm9sdW1lU2hhcGVyJENvbmZpZ3VyYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2FsZVRvRW5kVm9sdW1lKEYpTGFuZHJvaWQvbWVkaWEvVm9sdW1lU2hhcGVyJENvbmZpZ3VyYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2FsZVRvU3RhcnRWb2x1bWUoRilMYW5kcm9pZC9tZWRpYS9Wb2x1bWVTaGFwZXIkQ29uZmlndXJhdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1cnZlKFtGW0YpTGFuZHJvaWQvbWVkaWEvVm9sdW1lU2hhcGVyJENvbmZpZ3VyYXRpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREdXJhdGlvbihKKUxhbmRyb2lkL21lZGlhL1ZvbHVtZVNoYXBlciRDb25maWd1cmF0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZXJwb2xhdG9yVHlwZShJKUxhbmRyb2lkL21lZGlhL1ZvbHVtZVNoYXBlciRDb25maWd1cmF0aW9uJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9Wb2x1bWVTaGFwZXIkT3BlcmF0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlGKVYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iUExBWSIvPgotCQk8ZmllbGQgbmFtZT0iUkVWRVJTRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9BY291c3RpY0VjaG9DYW5jZWxlciIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0F1ZGlvRWZmZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShJKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvQWNvdXN0aWNFY2hvQ2FuY2VsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBdmFpbGFibGUoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvQXVkaW9FZmZlY3QiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9VVUlEO0xqYXZhL3V0aWwvVVVJRDtJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNjcmlwdG9yKClMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0F1ZGlvRWZmZWN0JERlc2NyaXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQ29udHJvbCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5RWZmZWN0cygpW0xhbmRyb2lkL21lZGlhL2F1ZGlvZngvQXVkaW9FZmZlY3QkRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udHJvbFN0YXR1c0xpc3RlbmVyKExhbmRyb2lkL21lZGlhL2F1ZGlvZngvQXVkaW9FZmZlY3QkT25Db250cm9sU3RhdHVzQ2hhbmdlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmFibGVTdGF0dXNMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0F1ZGlvRWZmZWN0JE9uRW5hYmxlU3RhdHVzQ2hhbmdlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmFibGVkKFopSSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NMT1NFX0FVRElPX0VGRkVDVF9DT05UUk9MX1NFU1NJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9ESVNQTEFZX0FVRElPX0VGRkVDVF9DT05UUk9MX1BBTkVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fT1BFTl9BVURJT19FRkZFQ1RfQ09OVFJPTF9TRVNTSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTFJFQURZX0VYSVNUUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFX0dBTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRV9NT1ZJRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFX01VU0lDIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEVfVk9JQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9BVVhJTElBUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9JTlNFUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9UWVBFX0FFQyIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfVFlQRV9BR0MiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX1RZUEVfQkFTU19CT09TVCIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfVFlQRV9EWU5BTUlDU19QUk9DRVNTSU5HIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9UWVBFX0VOVl9SRVZFUkIiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX1RZUEVfRVFVQUxJWkVSIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9UWVBFX0xPVURORVNTX0VOSEFOQ0VSIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9UWVBFX05TIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9UWVBFX1BSRVNFVF9SRVZFUkIiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX1RZUEVfVklSVFVBTElaRVIiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0JBRF9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfREVBRF9PQkpFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0lOVkFMSURfT1BFUkFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9OT19JTklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9OT19NRU1PUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FVRElPX1NFU1NJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0NPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUEFDS0FHRV9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUNDRVNTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0F1ZGlvRWZmZWN0JERlc2NyaXB0b3IiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8ZmllbGQgbmFtZT0iY29ubmVjdE1vZGUiLz4KLQkJPGZpZWxkIG5hbWU9ImltcGxlbWVudG9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJuYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0eXBlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ1dWlkIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0F1ZGlvRWZmZWN0JE9uQ29udHJvbFN0YXR1c0NoYW5nZUxpc3RlbmVyIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbnRyb2xTdGF0dXNDaGFuZ2UoTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9BdWRpb0VmZmVjdDtaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvQXVkaW9FZmZlY3QkT25FbmFibGVTdGF0dXNDaGFuZ2VMaXN0ZW5lciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25FbmFibGVTdGF0dXNDaGFuZ2UoTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9BdWRpb0VmZmVjdDtaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvQXV0b21hdGljR2FpbkNvbnRyb2wiIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9BdWRpb0VmZmVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoSSlMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0F1dG9tYXRpY0dhaW5Db250cm9sOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXZhaWxhYmxlKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0Jhc3NCb29zdCIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvQXVkaW9FZmZlY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3BlcnRpZXMoKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvQmFzc0Jvb3N0JFNldHRpbmdzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvdW5kZWRTdHJlbmd0aCgpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmVuZ3RoU3VwcG9ydGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyYW1ldGVyTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9CYXNzQm9vc3QkT25QYXJhbWV0ZXJDaGFuZ2VMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3BlcnRpZXMoTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9CYXNzQm9vc3QkU2V0dGluZ3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdHJlbmd0aChTKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlBBUkFNX1NUUkVOR1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJBTV9TVFJFTkdUSF9TVVBQT1JURUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvQmFzc0Jvb3N0JE9uUGFyYW1ldGVyQ2hhbmdlTGlzdGVuZXIiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGFyYW1ldGVyQ2hhbmdlKExhbmRyb2lkL21lZGlhL2F1ZGlvZngvQmFzc0Jvb3N0O0lJUylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0Jhc3NCb29zdCRTZXR0aW5ncyIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdHJlbmd0aCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmciIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9BdWRpb0VmZmVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRDb25maWc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFubmVsQnlDaGFubmVsSW5kZXgoSSlMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYW5uZWxDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbmZpZygpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckQ29uZmlnOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0R2FpbkJ5Q2hhbm5lbEluZGV4KEkpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbWl0ZXJCeUNoYW5uZWxJbmRleChJKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJExpbWl0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWJjQmFuZEJ5Q2hhbm5lbEluZGV4KElJKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJE1iY0JhbmQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWJjQnlDaGFubmVsSW5kZXgoSSlMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRNYmM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zdEVxQmFuZEJ5Q2hhbm5lbEluZGV4KElJKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxQmFuZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3N0RXFCeUNoYW5uZWxJbmRleChJKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZUVxQmFuZEJ5Q2hhbm5lbEluZGV4KElJKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxQmFuZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVFcUJ5Q2hhbm5lbEluZGV4KEkpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxsQ2hhbm5lbHNUbyhMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRDaGFubmVsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hhbm5lbFRvKElMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRDaGFubmVsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5wdXRHYWluQWxsQ2hhbm5lbHNUbyhGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dEdhaW5ieUNoYW5uZWwoSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExpbWl0ZXJBbGxDaGFubmVsc1RvKExhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJExpbWl0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaW1pdGVyQnlDaGFubmVsSW5kZXgoSUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJExpbWl0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYmNBbGxDaGFubmVsc1RvKExhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJE1iYzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1iY0JhbmRBbGxDaGFubmVsc1RvKElMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRNYmNCYW5kOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWJjQmFuZEJ5Q2hhbm5lbEluZGV4KElJTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckTWJjQmFuZDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1iY0J5Q2hhbm5lbEluZGV4KElMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRNYmM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb3N0RXFBbGxDaGFubmVsc1RvKExhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9zdEVxQmFuZEFsbENoYW5uZWxzVG8oSUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxQmFuZDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvc3RFcUJhbmRCeUNoYW5uZWxJbmRleChJSUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxQmFuZDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvc3RFcUJ5Q2hhbm5lbEluZGV4KElMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRFcTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZUVxQWxsQ2hhbm5lbHNUbyhMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRFcTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZUVxQmFuZEFsbENoYW5uZWxzVG8oSUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxQmFuZDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZUVxQmFuZEJ5Q2hhbm5lbEluZGV4KElJTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXFCYW5kOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJlRXFCeUNoYW5uZWxJbmRleChJTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXE7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IlZBUklBTlRfRkFWT1JfRlJFUVVFTkNZX1JFU09MVVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlZBUklBTlRfRkFWT1JfVElNRV9SRVNPTFVUSU9OIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRCYW5kQmFzZSIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihaRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3V0b2ZmRnJlcXVlbmN5KClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3V0b2ZmRnJlcXVlbmN5KEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuYWJsZWQoWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRCYW5kU3RhZ2UiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckU3RhZ2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWlpJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYW5kQ291bnQoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJENoYW5uZWwiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oRlpJWklaSVopViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRDaGFubmVsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRHYWluKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGltaXRlcigpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckTGltaXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYmMoKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJE1iYzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYmNCYW5kKEkpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckTWJjQmFuZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3N0RXEoKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvc3RFcUJhbmQoSSlMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRFcUJhbmQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlRXEoKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZUVxQmFuZChJKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxQmFuZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dEdhaW4oRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGltaXRlcihMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRMaW1pdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWJjKExhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJE1iYzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1iY0JhbmQoSUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJE1iY0JhbmQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb3N0RXEoTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXE7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb3N0RXFCYW5kKElMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRFcUJhbmQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmVFcShMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRFcTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZUVxQmFuZChJTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXFCYW5kOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRDb25maWciIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJENvbmZpZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhbm5lbEJ5Q2hhbm5lbEluZGV4KEkpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckQ2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dEdhaW5CeUNoYW5uZWxJbmRleChJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW1pdGVyQnlDaGFubmVsSW5kZXgoSSlMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRMaW1pdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1iY0JhbmRCeUNoYW5uZWxJbmRleChJSSlMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRNYmNCYW5kOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1iY0JhbmRDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1iY0J5Q2hhbm5lbEluZGV4KEkpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckTWJjOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvc3RFcUJhbmRCeUNoYW5uZWxJbmRleChJSSlMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRFcUJhbmQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zdEVxQmFuZENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zdEVxQnlDaGFubmVsSW5kZXgoSSlMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRFcTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVFcUJhbmRCeUNoYW5uZWxJbmRleChJSSlMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRFcUJhbmQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlRXFCYW5kQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVFcUJ5Q2hhbm5lbEluZGV4KEkpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlZmVycmVkRnJhbWVEdXJhdGlvbigpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhcmlhbnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xpbWl0ZXJJblVzZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTWJjSW5Vc2UoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Bvc3RFcUluVXNlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcmVFcUluVXNlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxsQ2hhbm5lbHNUbyhMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRDaGFubmVsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hhbm5lbFRvKElMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRDaGFubmVsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5wdXRHYWluQWxsQ2hhbm5lbHNUbyhGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dEdhaW5CeUNoYW5uZWxJbmRleChJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGltaXRlckFsbENoYW5uZWxzVG8oTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckTGltaXRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExpbWl0ZXJCeUNoYW5uZWxJbmRleChJTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckTGltaXRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1iY0FsbENoYW5uZWxzVG8oTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckTWJjOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWJjQmFuZEFsbENoYW5uZWxzVG8oSUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJE1iY0JhbmQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYmNCYW5kQnlDaGFubmVsSW5kZXgoSUlMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRNYmNCYW5kOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWJjQnlDaGFubmVsSW5kZXgoSUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJE1iYzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvc3RFcUFsbENoYW5uZWxzVG8oTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXE7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb3N0RXFCYW5kQWxsQ2hhbm5lbHNUbyhJTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXFCYW5kOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9zdEVxQmFuZEJ5Q2hhbm5lbEluZGV4KElJTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXFCYW5kOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9zdEVxQnlDaGFubmVsSW5kZXgoSUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJlRXFBbGxDaGFubmVsc1RvKExhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJlRXFCYW5kQWxsQ2hhbm5lbHNUbyhJTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXFCYW5kOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJlRXFCYW5kQnlDaGFubmVsSW5kZXgoSUlMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRFcUJhbmQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmVFcUJ5Q2hhbm5lbEluZGV4KElMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRFcTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckQ29uZmlnJEJ1aWxkZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlaSVpJWklaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckQ29uZmlnOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFsbENoYW5uZWxzVG8oTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckQ2hhbm5lbDspTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hhbm5lbFRvKElMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRDaGFubmVsOylMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRDb25maWckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dEdhaW5BbGxDaGFubmVsc1RvKEYpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5wdXRHYWluQnlDaGFubmVsSW5kZXgoSUYpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGltaXRlckFsbENoYW5uZWxzVG8oTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckTGltaXRlcjspTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGltaXRlckJ5Q2hhbm5lbEluZGV4KElMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRMaW1pdGVyOylMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRDb25maWckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYmNBbGxDaGFubmVsc1RvKExhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJE1iYzspTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWJjQnlDaGFubmVsSW5kZXgoSUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJE1iYzspTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9zdEVxQWxsQ2hhbm5lbHNUbyhMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRFcTspTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9zdEVxQnlDaGFubmVsSW5kZXgoSUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxOylMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRDb25maWckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmVFcUFsbENoYW5uZWxzVG8oTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXE7KUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJENvbmZpZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZUVxQnlDaGFubmVsSW5kZXgoSUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxOylMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRDb25maWckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmVmZXJyZWRGcmFtZUR1cmF0aW9uKEYpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRFcSIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRCYW5kU3RhZ2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXE7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWlpJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYW5kKEkpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXFCYW5kOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJhbmQoSUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxQmFuZDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckRXFCYW5kIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEJhbmRCYXNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEVxQmFuZDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihaRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdhaW4oKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHYWluKEYpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckTGltaXRlciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRTdGFnZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRMaW1pdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFpaSUZGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRhY2tUaW1lKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGlua0dyb3VwKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zdEdhaW4oKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSYXRpbygpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlbGVhc2VUaW1lKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGhyZXNob2xkKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXR0YWNrVGltZShGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaW5rR3JvdXAoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9zdEdhaW4oRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmF0aW8oRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVsZWFzZVRpbWUoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGhyZXNob2xkKEYpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckTWJjIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEJhbmRTdGFnZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRNYmM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWlpJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYW5kKEkpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckTWJjQmFuZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCYW5kKElMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRNYmNCYW5kOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0R5bmFtaWNzUHJvY2Vzc2luZyRNYmNCYW5kIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJEJhbmRCYXNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL21lZGlhL2F1ZGlvZngvRHluYW1pY3NQcm9jZXNzaW5nJE1iY0JhbmQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWkZGRkZGRkZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dGFja1RpbWUoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHBhbmRlclJhdGlvKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S25lZVdpZHRoKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Tm9pc2VHYXRlVGhyZXNob2xkKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zdEdhaW4oKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVHYWluKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmF0aW8oKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWxlYXNlVGltZSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRocmVzaG9sZCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF0dGFja1RpbWUoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXhwYW5kZXJSYXRpbyhGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLbmVlV2lkdGgoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Tm9pc2VHYXRlVGhyZXNob2xkKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvc3RHYWluKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZUdhaW4oRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmF0aW8oRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVsZWFzZVRpbWUoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGhyZXNob2xkKEYpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9EeW5hbWljc1Byb2Nlc3NpbmckU3RhZ2UiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWlopViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5Vc2UoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmFibGVkKFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9FbnZpcm9ubWVudGFsUmV2ZXJiIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9BdWRpb0VmZmVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVjYXlIRlJhdGlvKClTIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVjYXlUaW1lKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVuc2l0eSgpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpZmZ1c2lvbigpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3BlcnRpZXMoKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvRW52aXJvbm1lbnRhbFJldmVyYiRTZXR0aW5nczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWZsZWN0aW9uc0RlbGF5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVmbGVjdGlvbnNMZXZlbCgpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJldmVyYkRlbGF5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmV2ZXJiTGV2ZWwoKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb29tSEZMZXZlbCgpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvb21MZXZlbCgpUyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlY2F5SEZSYXRpbyhTKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWNheVRpbWUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVuc2l0eShTKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaWZmdXNpb24oUylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyYW1ldGVyTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9FbnZpcm9ubWVudGFsUmV2ZXJiJE9uUGFyYW1ldGVyQ2hhbmdlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9wZXJ0aWVzKExhbmRyb2lkL21lZGlhL2F1ZGlvZngvRW52aXJvbm1lbnRhbFJldmVyYiRTZXR0aW5nczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlZmxlY3Rpb25zRGVsYXkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVmbGVjdGlvbnNMZXZlbChTKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXZlcmJEZWxheShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXZlcmJMZXZlbChTKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSb29tSEZMZXZlbChTKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSb29tTGV2ZWwoUylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJBTV9ERUNBWV9IRl9SQVRJTyIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQU1fREVDQVlfVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQU1fREVOU0lUWSIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQU1fRElGRlVTSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJBTV9SRUZMRUNUSU9OU19ERUxBWSIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQU1fUkVGTEVDVElPTlNfTEVWRUwiLz4KLQkJPGZpZWxkIG5hbWU9IlBBUkFNX1JFVkVSQl9ERUxBWSIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQU1fUkVWRVJCX0xFVkVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJBTV9ST09NX0hGX0xFVkVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJBTV9ST09NX0xFVkVMIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0Vudmlyb25tZW50YWxSZXZlcmIkT25QYXJhbWV0ZXJDaGFuZ2VMaXN0ZW5lciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYXJhbWV0ZXJDaGFuZ2UoTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9FbnZpcm9ubWVudGFsUmV2ZXJiO0lJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0Vudmlyb25tZW50YWxSZXZlcmIkU2V0dGluZ3MiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8ZmllbGQgbmFtZT0iZGVjYXlIRlJhdGlvIi8+Ci0JCTxmaWVsZCBuYW1lPSJkZWNheVRpbWUiLz4KLQkJPGZpZWxkIG5hbWU9ImRlbnNpdHkiLz4KLQkJPGZpZWxkIG5hbWU9ImRpZmZ1c2lvbiIvPgotCQk8ZmllbGQgbmFtZT0icmVmbGVjdGlvbnNEZWxheSIvPgotCQk8ZmllbGQgbmFtZT0icmVmbGVjdGlvbnNMZXZlbCIvPgotCQk8ZmllbGQgbmFtZT0icmV2ZXJiRGVsYXkiLz4KLQkJPGZpZWxkIG5hbWU9InJldmVyYkxldmVsIi8+Ci0JCTxmaWVsZCBuYW1lPSJyb29tSEZMZXZlbCIvPgotCQk8ZmllbGQgbmFtZT0icm9vbUxldmVsIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0VxdWFsaXplciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvQXVkaW9FZmZlY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhbmQoSSlTIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFuZEZyZXFSYW5nZShTKVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFuZExldmVsKFMpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhbmRMZXZlbFJhbmdlKClbUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlbnRlckZyZXEoUylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudFByZXNldCgpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE51bWJlck9mQmFuZHMoKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1iZXJPZlByZXNldHMoKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVzZXROYW1lKFMpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvcGVydGllcygpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9FcXVhbGl6ZXIkU2V0dGluZ3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmFuZExldmVsKFNTKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXJhbWV0ZXJMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0VxdWFsaXplciRPblBhcmFtZXRlckNoYW5nZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvcGVydGllcyhMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0VxdWFsaXplciRTZXR0aW5nczspViIvPgotCQk8bWV0aG9kIG5hbWU9InVzZVByZXNldChTKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlBBUkFNX0JBTkRfRlJFUV9SQU5HRSIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQU1fQkFORF9MRVZFTCIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQU1fQ0VOVEVSX0ZSRVEiLz4KLQkJPGZpZWxkIG5hbWU9IlBBUkFNX0NVUlJFTlRfUFJFU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJBTV9HRVRfQkFORCIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQU1fR0VUX05VTV9PRl9QUkVTRVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJBTV9HRVRfUFJFU0VUX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlBBUkFNX0xFVkVMX1JBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJBTV9OVU1fQkFORFMiLz4KLQkJPGZpZWxkIG5hbWU9IlBBUkFNX1NUUklOR19TSVpFX01BWCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9FcXVhbGl6ZXIkT25QYXJhbWV0ZXJDaGFuZ2VMaXN0ZW5lciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYXJhbWV0ZXJDaGFuZ2UoTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9FcXVhbGl6ZXI7SUlJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0VxdWFsaXplciRTZXR0aW5ncyIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJiYW5kTGV2ZWxzIi8+Ci0JCTxmaWVsZCBuYW1lPSJjdXJQcmVzZXQiLz4KLQkJPGZpZWxkIG5hbWU9Im51bUJhbmRzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0xvdWRuZXNzRW5oYW5jZXIiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9BdWRpb0VmZmVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYXJnZXRHYWluKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFyZ2V0R2FpbihJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlBBUkFNX1RBUkdFVF9HQUlOX01CIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L05vaXNlU3VwcHJlc3NvciIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0F1ZGlvRWZmZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShJKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvTm9pc2VTdXBwcmVzc29yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXZhaWxhYmxlKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1ByZXNldFJldmVyYiIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvQXVkaW9FZmZlY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZXNldCgpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3BlcnRpZXMoKUxhbmRyb2lkL21lZGlhL2F1ZGlvZngvUHJlc2V0UmV2ZXJiJFNldHRpbmdzOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhcmFtZXRlckxpc3RlbmVyKExhbmRyb2lkL21lZGlhL2F1ZGlvZngvUHJlc2V0UmV2ZXJiJE9uUGFyYW1ldGVyQ2hhbmdlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmVzZXQoUylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvcGVydGllcyhMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1ByZXNldFJldmVyYiRTZXR0aW5nczspViIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQU1fUFJFU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTRVRfTEFSR0VIQUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTRVRfTEFSR0VST09NIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTRVRfTUVESVVNSEFMTCIvPgotCQk8ZmllbGQgbmFtZT0iUFJFU0VUX01FRElVTVJPT00iLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVNFVF9OT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTRVRfUExBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVNFVF9TTUFMTFJPT00iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvUHJlc2V0UmV2ZXJiJE9uUGFyYW1ldGVyQ2hhbmdlTGlzdGVuZXIiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGFyYW1ldGVyQ2hhbmdlKExhbmRyb2lkL21lZGlhL2F1ZGlvZngvUHJlc2V0UmV2ZXJiO0lJUylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1ByZXNldFJldmVyYiRTZXR0aW5ncyIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcmVzZXQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvVmlydHVhbGl6ZXIiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0F1ZGlvRWZmZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5WaXJ0dWFsaXplKElJKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcmNlVmlydHVhbGl6YXRpb25Nb2RlKEkpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvcGVydGllcygpTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXJ0dWFsaXplciRTZXR0aW5nczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3VuZGVkU3RyZW5ndGgoKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGVha2VyQW5nbGVzKElJW0kpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyZW5ndGhTdXBwb3J0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaXJ0dWFsaXphdGlvbk1vZGUoKUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhcmFtZXRlckxpc3RlbmVyKExhbmRyb2lkL21lZGlhL2F1ZGlvZngvVmlydHVhbGl6ZXIkT25QYXJhbWV0ZXJDaGFuZ2VMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3BlcnRpZXMoTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXJ0dWFsaXplciRTZXR0aW5nczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cmVuZ3RoKFMpViIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQU1fU1RSRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9IlBBUkFNX1NUUkVOR1RIX1NVUFBPUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iVklSVFVBTElaQVRJT05fTU9ERV9BVVRPIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlZJUlRVQUxJWkFUSU9OX01PREVfQklOQVVSQUwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVklSVFVBTElaQVRJT05fTU9ERV9PRkYiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVklSVFVBTElaQVRJT05fTU9ERV9UUkFOU0FVUkFMIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL2F1ZGlvZngvVmlydHVhbGl6ZXIkT25QYXJhbWV0ZXJDaGFuZ2VMaXN0ZW5lciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYXJhbWV0ZXJDaGFuZ2UoTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXJ0dWFsaXplcjtJSVMpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXJ0dWFsaXplciRTZXR0aW5ncyIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdHJlbmd0aCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXN1YWxpemVyIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FwdHVyZVNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYXB0dXJlU2l6ZVJhbmdlKClbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGZnQoW0IpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heENhcHR1cmVSYXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVhc3VyZW1lbnRNb2RlKClJIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZWFzdXJlbWVudFBlYWtSbXMoTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXN1YWxpemVyJE1lYXN1cmVtZW50UGVha1JtczspSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2FtcGxpbmdSYXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhbGluZ01vZGUoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdhdmVGb3JtKFtCKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FwdHVyZVNpemUoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0YUNhcHR1cmVMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1Zpc3VhbGl6ZXIkT25EYXRhQ2FwdHVyZUxpc3RlbmVyO0laWilJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5hYmxlZChaKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNZWFzdXJlbWVudE1vZGUoSSlJIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY2FsaW5nTW9kZShJKUkiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQUxSRUFEWV9FWElTVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9CQURfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0RFQURfT0JKRUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9JTlZBTElEX09QRVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTk9fSU5JVCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTk9fTUVNT1JZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9NT0RFX05PTkUiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfTU9ERV9QRUFLX1JNUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0FMSU5HX01PREVfQVNfUExBWUVEIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNDQUxJTkdfTU9ERV9OT1JNQUxJWkVEIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0VOQUJMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0lOSVRJQUxJWkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9VTklOSVRJQUxJWkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUNDRVNTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1Zpc3VhbGl6ZXIkTWVhc3VyZW1lbnRQZWFrUm1zIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJtUGVhayIvPgotCQk8ZmllbGQgbmFtZT0ibVJtcyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXN1YWxpemVyJE9uRGF0YUNhcHR1cmVMaXN0ZW5lciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25GZnREYXRhQ2FwdHVyZShMYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1Zpc3VhbGl6ZXI7W0JJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbldhdmVGb3JtRGF0YUNhcHR1cmUoTGFuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXN1YWxpemVyO1tCSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9icm93c2UvTWVkaWFCcm93c2VyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGFuZHJvaWQvbWVkaWEvYnJvd3NlL01lZGlhQnJvd3NlciRDb25uZWN0aW9uQ2FsbGJhY2s7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29ubmVjdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2Nvbm5lY3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJdGVtKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL21lZGlhL2Jyb3dzZS9NZWRpYUJyb3dzZXIkSXRlbUNhbGxiYWNrOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb290KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlQ29tcG9uZW50KClMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vzc2lvblRva2VuKClMYW5kcm9pZC9tZWRpYS9zZXNzaW9uL01lZGlhU2Vzc2lvbiRUb2tlbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nvbm5lY3RlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1YnNjcmliZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9tZWRpYS9icm93c2UvTWVkaWFCcm93c2VyJFN1YnNjcmlwdGlvbkNhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3Vic2NyaWJlKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9tZWRpYS9icm93c2UvTWVkaWFCcm93c2VyJFN1YnNjcmlwdGlvbkNhbGxiYWNrOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnN1YnNjcmliZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InVuc3Vic2NyaWJlKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL21lZGlhL2Jyb3dzZS9NZWRpYUJyb3dzZXIkU3Vic2NyaXB0aW9uQ2FsbGJhY2s7KVYiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUEFHRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QQUdFX1NJWkUiIHNpbmNlPSIyNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYnJvd3NlL01lZGlhQnJvd3NlciRDb25uZWN0aW9uQ2FsbGJhY2siIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbm5lY3RlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29ubmVjdGlvbkZhaWxlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29ubmVjdGlvblN1c3BlbmRlZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvYnJvd3NlL01lZGlhQnJvd3NlciRJdGVtQ2FsbGJhY2siIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkVycm9yKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25JdGVtTG9hZGVkKExhbmRyb2lkL21lZGlhL2Jyb3dzZS9NZWRpYUJyb3dzZXIkTWVkaWFJdGVtOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9icm93c2UvTWVkaWFCcm93c2VyJE1lZGlhSXRlbSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbWVkaWEvTWVkaWFEZXNjcmlwdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNjcmlwdGlvbigpTGFuZHJvaWQvbWVkaWEvTWVkaWFEZXNjcmlwdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbGFncygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lZGlhSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQnJvd3NhYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQbGF5YWJsZSgpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19CUk9XU0FCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUExBWUFCTEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL2Jyb3dzZS9NZWRpYUJyb3dzZXIkU3Vic2NyaXB0aW9uQ2FsbGJhY2siIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNoaWxkcmVuTG9hZGVkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2hpbGRyZW5Mb2FkZWQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9MaXN0O0xhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25FcnJvcihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXJyb3IoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL2VmZmVjdC9FZmZlY3QiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseShJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyYW1ldGVyKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXBkYXRlTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvZWZmZWN0L0VmZmVjdFVwZGF0ZUxpc3RlbmVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9lZmZlY3QvRWZmZWN0Q29udGV4dCIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVdpdGhDdXJyZW50R2xDb250ZXh0KClMYW5kcm9pZC9tZWRpYS9lZmZlY3QvRWZmZWN0Q29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGYWN0b3J5KClMYW5kcm9pZC9tZWRpYS9lZmZlY3QvRWZmZWN0RmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9lZmZlY3QvRWZmZWN0RmFjdG9yeSIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbWVkaWEvZWZmZWN0L0VmZmVjdENvbnRleHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUVmZmVjdChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbWVkaWEvZWZmZWN0L0VmZmVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VmZmVjdFN1cHBvcnRlZChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX0FVVE9GSVgiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9CQUNLRFJPUFBFUiIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX0JJVE1BUE9WRVJMQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9CTEFDS1dISVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfQlJJR0hUTkVTUyIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX0NPTlRSQVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfQ1JPUCIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX0NST1NTUFJPQ0VTUyIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX0RPQ1VNRU5UQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfRFVPVE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX0ZJTExMSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX0ZJU0hFWUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9GTElQIi8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfR1JBSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9HUkFZU0NBTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9MT01PSVNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfTkVHQVRJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9QT1NURVJJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9SRURFWUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9ST1RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9TQVRVUkFURSIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX1NFUElBIi8+Ci0JCTxmaWVsZCBuYW1lPSJFRkZFQ1RfU0hBUlBFTiIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX1NUUkFJR0hURU4iLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9URU1QRVJBVFVSRSIvPgotCQk8ZmllbGQgbmFtZT0iRUZGRUNUX1RJTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRkVDVF9WSUdORVRURSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvZWZmZWN0L0VmZmVjdFVwZGF0ZUxpc3RlbmVyIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25FZmZlY3RVcGRhdGVkKExhbmRyb2lkL21lZGlhL2VmZmVjdC9FZmZlY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL21pZGkvTWlkaURldmljZSIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL0Nsb3NlYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3RQb3J0cyhMYW5kcm9pZC9tZWRpYS9taWRpL01pZGlJbnB1dFBvcnQ7SSlMYW5kcm9pZC9tZWRpYS9taWRpL01pZGlEZXZpY2UkTWlkaUNvbm5lY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5mbygpTGFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpRGV2aWNlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuSW5wdXRQb3J0KEkpTGFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpSW5wdXRQb3J0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5PdXRwdXRQb3J0KEkpTGFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpT3V0cHV0UG9ydDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL21pZGkvTWlkaURldmljZSRNaWRpQ29ubmVjdGlvbiIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL0Nsb3NlYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9taWRpL01pZGlEZXZpY2U7KVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL21lZGlhL21pZGkvTWlkaURldmljZTtMYW5kcm9pZC9vcy9JQmluZGVyO0xhbmRyb2lkL21lZGlhL21pZGkvTWlkaUlucHV0UG9ydDspViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9taWRpL01pZGlEZXZpY2VJbmZvIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJSVtMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO1opViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dFBvcnRDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE91dHB1dFBvcnRDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvcnRzKClbTGFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpRGV2aWNlSW5mbyRQb3J0SW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9wZXJ0aWVzKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUHJpdmF0ZSgpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfQkxVRVRPT1RIX0RFVklDRSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfTUFOVUZBQ1RVUkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9QUk9EVUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9TRVJJQUxfTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9VU0JfREVWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9WRVJTSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0JMVUVUT09USCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9VU0IiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVklSVFVBTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpRGV2aWNlSW5mbyRQb3J0SW5mbyIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9ydE51bWJlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSU5QVVQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfT1VUUFVUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9taWRpL01pZGlEZXZpY2VTZXJ2aWNlIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9TZXJ2aWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlSW5mbygpTGFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpRGV2aWNlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRwdXRQb3J0UmVjZWl2ZXJzKClbTGFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpUmVjZWl2ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGV2aWNlU3RhdHVzQ2hhbmdlZChMYW5kcm9pZC9tZWRpYS9taWRpL01pZGlEZXZpY2VTdGF0dXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdldElucHV0UG9ydFJlY2VpdmVycygpW0xhbmRyb2lkL21lZGlhL21pZGkvTWlkaVJlY2VpdmVyOyIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9JTlRFUkZBQ0UiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL21pZGkvTWlkaURldmljZVN0YXR1cyIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL21lZGlhL21pZGkvTWlkaURldmljZUluZm87KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZUluZm8oKUxhbmRyb2lkL21lZGlhL21pZGkvTWlkaURldmljZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3V0cHV0UG9ydE9wZW5Db3VudChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0lucHV0UG9ydE9wZW4oSSlaIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9taWRpL01pZGlJbnB1dFBvcnQiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpUmVjZWl2ZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0kpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9ydE51bWJlcigpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpTWFuYWdlciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZXMoKVtMYW5kcm9pZC9tZWRpYS9taWRpL01pZGlEZXZpY2VJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5CbHVldG9vdGhEZXZpY2UoTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTtMYW5kcm9pZC9tZWRpYS9taWRpL01pZGlNYW5hZ2VyJE9uRGV2aWNlT3BlbmVkTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5EZXZpY2UoTGFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpRGV2aWNlSW5mbztMYW5kcm9pZC9tZWRpYS9taWRpL01pZGlNYW5hZ2VyJE9uRGV2aWNlT3BlbmVkTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyRGV2aWNlQ2FsbGJhY2soTGFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpTWFuYWdlciREZXZpY2VDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckRldmljZUNhbGxiYWNrKExhbmRyb2lkL21lZGlhL21pZGkvTWlkaU1hbmFnZXIkRGV2aWNlQ2FsbGJhY2s7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL21pZGkvTWlkaU1hbmFnZXIkRGV2aWNlQ2FsbGJhY2siIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRldmljZUFkZGVkKExhbmRyb2lkL21lZGlhL21pZGkvTWlkaURldmljZUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRldmljZVJlbW92ZWQoTGFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpRGV2aWNlSW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGV2aWNlU3RhdHVzQ2hhbmdlZChMYW5kcm9pZC9tZWRpYS9taWRpL01pZGlEZXZpY2VTdGF0dXM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL21pZGkvTWlkaU1hbmFnZXIkT25EZXZpY2VPcGVuZWRMaXN0ZW5lciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGV2aWNlT3BlbmVkKExhbmRyb2lkL21lZGlhL21pZGkvTWlkaURldmljZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpT3V0cHV0UG9ydCIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9tZWRpYS9taWRpL01pZGlTZW5kZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0kpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9ydE51bWJlcigpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvbWlkaS9NaWRpUmVjZWl2ZXIiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmx1c2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhNZXNzYWdlU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRmx1c2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlbmQoW0JJSUopViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmQoW0JJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZChbQklJSilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9taWRpL01pZGlTZW5kZXIiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0KExhbmRyb2lkL21lZGlhL21pZGkvTWlkaVJlY2VpdmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzY29ubmVjdChMYW5kcm9pZC9tZWRpYS9taWRpL01pZGlSZWNlaXZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29ubmVjdChMYW5kcm9pZC9tZWRpYS9taWRpL01pZGlSZWNlaXZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGlzY29ubmVjdChMYW5kcm9pZC9tZWRpYS9taWRpL01pZGlSZWNlaXZlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvcHJvamVjdGlvbi9NZWRpYVByb2plY3Rpb24iIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVWaXJ0dWFsRGlzcGxheShMamF2YS9sYW5nL1N0cmluZztJSUlJTGFuZHJvaWQvdmlldy9TdXJmYWNlO0xhbmRyb2lkL2hhcmR3YXJlL2Rpc3BsYXkvVmlydHVhbERpc3BsYXkkQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspTGFuZHJvaWQvaGFyZHdhcmUvZGlzcGxheS9WaXJ0dWFsRGlzcGxheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlckNhbGxiYWNrKExhbmRyb2lkL21lZGlhL3Byb2plY3Rpb24vTWVkaWFQcm9qZWN0aW9uJENhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckNhbGxiYWNrKExhbmRyb2lkL21lZGlhL3Byb2plY3Rpb24vTWVkaWFQcm9qZWN0aW9uJENhbGxiYWNrOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9wcm9qZWN0aW9uL01lZGlhUHJvamVjdGlvbiRDYWxsYmFjayIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RvcCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvcHJvamVjdGlvbi9NZWRpYVByb2plY3Rpb25NYW5hZ2VyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVNjcmVlbkNhcHR1cmVJbnRlbnQoKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lZGlhUHJvamVjdGlvbihJTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KUxhbmRyb2lkL21lZGlhL3Byb2plY3Rpb24vTWVkaWFQcm9qZWN0aW9uOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYUNvbnRyb2xsZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFTZXNzaW9uJFRva2VuOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRqdXN0Vm9sdW1lKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaE1lZGlhQnV0dG9uRXZlbnQoTGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dHJhcygpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsYWdzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0YWRhdGEoKUxhbmRyb2lkL21lZGlhL01lZGlhTWV0YWRhdGE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBsYXliYWNrSW5mbygpTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYUNvbnRyb2xsZXIkUGxheWJhY2tJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBsYXliYWNrU3RhdGUoKUxhbmRyb2lkL21lZGlhL3Nlc3Npb24vUGxheWJhY2tTdGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWV1ZSgpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFF1ZXVlVGl0bGUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJhdGluZ1R5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXNzaW9uQWN0aXZpdHkoKUxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlc3Npb25Ub2tlbigpTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYVNlc3Npb24kVG9rZW47Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNwb3J0Q29udHJvbHMoKUxhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFDb250cm9sbGVyJFRyYW5zcG9ydENvbnRyb2xzOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQ2FsbGJhY2soTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYUNvbnRyb2xsZXIkQ2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlckNhbGxiYWNrKExhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFDb250cm9sbGVyJENhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kQ29tbWFuZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7TGFuZHJvaWQvb3MvUmVzdWx0UmVjZWl2ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWb2x1bWVUbyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckNhbGxiYWNrKExhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFDb250cm9sbGVyJENhbGxiYWNrOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9zZXNzaW9uL01lZGlhQ29udHJvbGxlciRDYWxsYmFjayIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQXVkaW9JbmZvQ2hhbmdlZChMYW5kcm9pZC9tZWRpYS9zZXNzaW9uL01lZGlhQ29udHJvbGxlciRQbGF5YmFja0luZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkV4dHJhc0NoYW5nZWQoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25NZXRhZGF0YUNoYW5nZWQoTGFuZHJvaWQvbWVkaWEvTWVkaWFNZXRhZGF0YTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGxheWJhY2tTdGF0ZUNoYW5nZWQoTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9QbGF5YmFja1N0YXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25RdWV1ZUNoYW5nZWQoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25RdWV1ZVRpdGxlQ2hhbmdlZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2Vzc2lvbkRlc3Ryb3llZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2Vzc2lvbkV2ZW50KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYUNvbnRyb2xsZXIkUGxheWJhY2tJbmZvIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGFuZHJvaWQvbWVkaWEvQXVkaW9BdHRyaWJ1dGVzO0lJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdWRpb0F0dHJpYnV0ZXMoKUxhbmRyb2lkL21lZGlhL0F1ZGlvQXR0cmlidXRlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50Vm9sdW1lKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4Vm9sdW1lKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGxheWJhY2tUeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vm9sdW1lQ29udHJvbCgpSSIvPgotCQk8ZmllbGQgbmFtZT0iUExBWUJBQ0tfVFlQRV9MT0NBTCIvPgotCQk8ZmllbGQgbmFtZT0iUExBWUJBQ0tfVFlQRV9SRU1PVEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFDb250cm9sbGVyJFRyYW5zcG9ydENvbnRyb2xzIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFDb250cm9sbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmFzdEZvcndhcmQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXVzZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InBsYXkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbGF5RnJvbU1lZGlhSWQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGxheUZyb21TZWFyY2goTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGxheUZyb21VcmkoTGFuZHJvaWQvbmV0L1VyaTtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InByZXBhcmUoKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InByZXBhcmVGcm9tTWVkaWFJZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InByZXBhcmVGcm9tU2VhcmNoKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJlcGFyZUZyb21VcmkoTGFuZHJvaWQvbmV0L1VyaTtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJld2luZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNlZWtUbyhKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kQ3VzdG9tQWN0aW9uKExhbmRyb2lkL21lZGlhL3Nlc3Npb24vUGxheWJhY2tTdGF0ZSRDdXN0b21BY3Rpb247TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZEN1c3RvbUFjdGlvbihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSYXRpbmcoTGFuZHJvaWQvbWVkaWEvUmF0aW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2tpcFRvTmV4dCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNraXBUb1ByZXZpb3VzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2tpcFRvUXVldWVJdGVtKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3AoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFTZXNzaW9uIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRyb2xsZXIoKUxhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFDb250cm9sbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRDb250cm9sbGVySW5mbygpTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYVNlc3Npb25NYW5hZ2VyJFJlbW90ZVVzZXJJbmZvOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vzc2lvblRva2VuKClMYW5kcm9pZC9tZWRpYS9zZXNzaW9uL01lZGlhU2Vzc2lvbiRUb2tlbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FjdGl2ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kU2Vzc2lvbkV2ZW50KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjdGl2ZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYWxsYmFjayhMYW5kcm9pZC9tZWRpYS9zZXNzaW9uL01lZGlhU2Vzc2lvbiRDYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbGxiYWNrKExhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFTZXNzaW9uJENhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeHRyYXMoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmxhZ3MoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWVkaWFCdXR0b25SZWNlaXZlcihMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1ldGFkYXRhKExhbmRyb2lkL21lZGlhL01lZGlhTWV0YWRhdGE7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQbGF5YmFja1N0YXRlKExhbmRyb2lkL21lZGlhL3Nlc3Npb24vUGxheWJhY2tTdGF0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBsYXliYWNrVG9Mb2NhbChMYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQbGF5YmFja1RvUmVtb3RlKExhbmRyb2lkL21lZGlhL1ZvbHVtZVByb3ZpZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UXVldWUoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UXVldWVUaXRsZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJhdGluZ1R5cGUoSSlWIiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZXNzaW9uQWN0aXZpdHkoTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfSEFORExFU19NRURJQV9CVVRUT05TIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19IQU5ETEVTX1RSQU5TUE9SVF9DT05UUk9MUyIgZGVwcmVjYXRlZD0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFTZXNzaW9uJENhbGxiYWNrIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db21tYW5kKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9vcy9SZXN1bHRSZWNlaXZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3VzdG9tQWN0aW9uKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRmFzdEZvcndhcmQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1lZGlhQnV0dG9uRXZlbnQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBhdXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QbGF5KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QbGF5RnJvbU1lZGlhSWQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QbGF5RnJvbVNlYXJjaChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBsYXlGcm9tVXJpKExhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByZXBhcmUoKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJlcGFyZUZyb21NZWRpYUlkKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QcmVwYXJlRnJvbVNlYXJjaChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJlcGFyZUZyb21VcmkoTGFuZHJvaWQvbmV0L1VyaTtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmV3aW5kKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZWVrVG8oSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXRSYXRpbmcoTGFuZHJvaWQvbWVkaWEvUmF0aW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Ta2lwVG9OZXh0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Ta2lwVG9QcmV2aW91cygpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2tpcFRvUXVldWVJdGVtKEopViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RvcCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYVNlc3Npb24kUXVldWVJdGVtIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9NZWRpYURlc2NyaXB0aW9uO0opViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlc2NyaXB0aW9uKClMYW5kcm9pZC9tZWRpYS9NZWRpYURlc2NyaXB0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFF1ZXVlSWQoKUoiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlVOS05PV05fSUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFTZXNzaW9uJFRva2VuIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYVNlc3Npb25NYW5hZ2VyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE9uQWN0aXZlU2Vzc2lvbnNDaGFuZ2VkTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYVNlc3Npb25NYW5hZ2VyJE9uQWN0aXZlU2Vzc2lvbnNDaGFuZ2VkTGlzdGVuZXI7TGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkT25BY3RpdmVTZXNzaW9uc0NoYW5nZWRMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS9zZXNzaW9uL01lZGlhU2Vzc2lvbk1hbmFnZXIkT25BY3RpdmVTZXNzaW9uc0NoYW5nZWRMaXN0ZW5lcjtMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2ZVNlc3Npb25zKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVHJ1c3RlZEZvck1lZGlhQ29udHJvbChMYW5kcm9pZC9tZWRpYS9zZXNzaW9uL01lZGlhU2Vzc2lvbk1hbmFnZXIkUmVtb3RlVXNlckluZm87KVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU9uQWN0aXZlU2Vzc2lvbnNDaGFuZ2VkTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYVNlc3Npb25NYW5hZ2VyJE9uQWN0aXZlU2Vzc2lvbnNDaGFuZ2VkTGlzdGVuZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFTZXNzaW9uTWFuYWdlciRPbkFjdGl2ZVNlc3Npb25zQ2hhbmdlZExpc3RlbmVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BY3RpdmVTZXNzaW9uc0NoYW5nZWQoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9zZXNzaW9uL01lZGlhU2Vzc2lvbk1hbmFnZXIkUmVtb3RlVXNlckluZm8iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQaWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVaWQoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3Nlc3Npb24vUGxheWJhY2tTdGF0ZSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aW9ucygpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2ZVF1ZXVlSXRlbUlkKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnVmZmVyZWRQb3NpdGlvbigpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1c3RvbUFjdGlvbnMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcnJvck1lc3NhZ2UoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dHJhcygpTGFuZHJvaWQvb3MvQnVuZGxlOyIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFzdFBvc2l0aW9uVXBkYXRlVGltZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBsYXliYWNrU3BlZWQoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3NpdGlvbigpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXRlKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRkFTVF9GT1JXQVJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUEFVU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QTEFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUExBWV9GUk9NX01FRElBX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUExBWV9GUk9NX1NFQVJDSCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BMQVlfRlJPTV9VUkkiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BMQVlfUEFVU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QUkVQQVJFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QUkVQQVJFX0ZST01fTUVESUFfSUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BSRVBBUkVfRlJPTV9TRUFSQ0giIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BSRVBBUkVfRlJPTV9VUkkiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1JFV0lORCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NFRUtfVE8iLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TRVRfUkFUSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0tJUF9UT19ORVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0tJUF9UT19QUkVWSU9VUyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NLSVBfVE9fUVVFVUVfSVRFTSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NUT1AiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlBMQVlCQUNLX1BPU0lUSU9OX1VOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0JVRkZFUklORyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfQ09OTkVDVElORyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0ZBU1RfRk9SV0FSRElORyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfUEFVU0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9QTEFZSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9SRVdJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX1NLSVBQSU5HX1RPX05FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX1NLSVBQSU5HX1RPX1BSRVZJT1VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9TS0lQUElOR19UT19RVUVVRV9JVEVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9TVE9QUEVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BsYXliYWNrU3RhdGUkQnVpbGRlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BsYXliYWNrU3RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDdXN0b21BY3Rpb24oTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9QbGF5YmFja1N0YXRlJEN1c3RvbUFjdGlvbjspTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9QbGF5YmFja1N0YXRlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQ3VzdG9tQWN0aW9uKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0kpTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9QbGF5YmFja1N0YXRlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL21lZGlhL3Nlc3Npb24vUGxheWJhY2tTdGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBY3Rpb25zKEopTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9QbGF5YmFja1N0YXRlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWN0aXZlUXVldWVJdGVtSWQoSilMYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BsYXliYWNrU3RhdGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCdWZmZXJlZFBvc2l0aW9uKEopTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9QbGF5YmFja1N0YXRlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXJyb3JNZXNzYWdlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BsYXliYWNrU3RhdGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeHRyYXMoTGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BsYXliYWNrU3RhdGUkQnVpbGRlcjsiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXRlKElKRilMYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BsYXliYWNrU3RhdGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGF0ZShJSkZKKUxhbmRyb2lkL21lZGlhL3Nlc3Npb24vUGxheWJhY2tTdGF0ZSRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9QbGF5YmFja1N0YXRlJEN1c3RvbUFjdGlvbiIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aW9uKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJY29uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS9zZXNzaW9uL1BsYXliYWNrU3RhdGUkQ3VzdG9tQWN0aW9uJEJ1aWxkZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL21lZGlhL3Nlc3Npb24vUGxheWJhY2tTdGF0ZSRDdXN0b21BY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXh0cmFzKExhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9QbGF5YmFja1N0YXRlJEN1c3RvbUFjdGlvbiRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvdHYvVHZDb250ZW50UmF0aW5nIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zKExhbmRyb2lkL21lZGlhL3R2L1R2Q29udGVudFJhdGluZzspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlUmF0aW5nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbWVkaWEvdHYvVHZDb250ZW50UmF0aW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZsYXR0ZW5Ub1N0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG9tYWluKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYWluUmF0aW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSYXRpbmdTeXN0ZW0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YlJhdGluZ3MoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmZsYXR0ZW5Gcm9tU3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9tZWRpYS90di9UdkNvbnRlbnRSYXRpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVTlJBVEVEIiBzaW5jZT0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3R2L1R2Q29udHJhY3QiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZENoYW5uZWxMb2dvVXJpKEopTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZENoYW5uZWxMb2dvVXJpKExhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGRDaGFubmVsVXJpKEopTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZENoYW5uZWxVcmlGb3JQYXNzdGhyb3VnaElucHV0KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkQ2hhbm5lbHNVcmlGb3JJbnB1dChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZElucHV0SWQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZFByZXZpZXdQcm9ncmFtVXJpKEopTGFuZHJvaWQvbmV0L1VyaTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkUHJldmlld1Byb2dyYW1zVXJpRm9yQ2hhbm5lbChKKUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZFByZXZpZXdQcm9ncmFtc1VyaUZvckNoYW5uZWwoTGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvbmV0L1VyaTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkUHJvZ3JhbVVyaShKKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGRQcm9ncmFtc1VyaUZvckNoYW5uZWwoSilMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkUHJvZ3JhbXNVcmlGb3JDaGFubmVsKEpKSilMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkUHJvZ3JhbXNVcmlGb3JDaGFubmVsKExhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGRQcm9ncmFtc1VyaUZvckNoYW5uZWwoTGFuZHJvaWQvbmV0L1VyaTtKSilMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkUmVjb3JkZWRQcm9ncmFtVXJpKEopTGFuZHJvaWQvbmV0L1VyaTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkV2F0Y2hOZXh0UHJvZ3JhbVVyaShKKUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NoYW5uZWxVcmkoTGFuZHJvaWQvbmV0L1VyaTspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDaGFubmVsVXJpRm9yUGFzc3Rocm91Z2hJbnB1dChMYW5kcm9pZC9uZXQvVXJpOylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NoYW5uZWxVcmlGb3JUdW5lcklucHV0KExhbmRyb2lkL25ldC9Vcmk7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUHJvZ3JhbVVyaShMYW5kcm9pZC9uZXQvVXJpOylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlY29yZGVkUHJvZ3JhbVVyaShMYW5kcm9pZC9uZXQvVXJpOylaIiBzaW5jZT0iMjciLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Q2hhbm5lbEJyb3dzYWJsZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SilWIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9JTklUSUFMSVpFX1BST0dSQU1TIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QUkVWSUVXX1BST0dSQU1fQURERURfVE9fV0FUQ0hfTkVYVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUFJFVklFV19QUk9HUkFNX0JST1dTQUJMRV9ESVNBQkxFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUkVRVUVTVF9DSEFOTkVMX0JST1dTQUJMRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fV0FUQ0hfTkVYVF9QUk9HUkFNX0JST1dTQUJMRV9ESVNBQkxFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRIT1JJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0NIQU5ORUxfSUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJFVklFV19QUk9HUkFNX0lEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1dBVENIX05FWFRfUFJPR1JBTV9JRCIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS90di9UdkNvbnRyYWN0JEJhc2VUdkNvbHVtbnMiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1BBQ0tBR0VfTkFNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvdHYvVHZDb250cmFjdCRDaGFubmVscyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL21lZGlhL3R2L1R2Q29udHJhY3QkQmFzZVR2Q29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZGVvUmVzb2x1dGlvbihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQVBQX0xJTktfQ09MT1IiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0FQUF9MSU5LX0lDT05fVVJJIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9BUFBfTElOS19JTlRFTlRfVVJJIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9BUFBfTElOS19QT1NURVJfQVJUX1VSSSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQVBQX0xJTktfVEVYVCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQlJPV1NBQkxFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9ERVNDUklQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0RJU1BMQVlfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0RJU1BMQVlfTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSU5QVVRfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JTlRFUk5BTF9QUk9WSURFUl9EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSU5URVJOQUxfUFJPVklERVJfRkxBRzEiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0lOVEVSTkFMX1BST1ZJREVSX0ZMQUcyIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JTlRFUk5BTF9QUk9WSURFUl9GTEFHMyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSU5URVJOQUxfUFJPVklERVJfRkxBRzQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0lOVEVSTkFMX1BST1ZJREVSX0lEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9MT0NLRUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX05FVFdPUktfQUZGSUxJQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9PUklHSU5BTF9ORVRXT1JLX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fU0VBUkNIQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1NFUlZJQ0VfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9TRVJWSUNFX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9UUkFOU0lFTlQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1RSQU5TUE9SVF9TVFJFQU1fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVkVSU0lPTl9OVU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9WSURFT19GT1JNQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfSVRFTV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWSUNFX1RZUEVfQVVESU8iLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfVFlQRV9BVURJT19WSURFTyIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9UWVBFX09USEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFXzFTRUciLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQVRTQ19DIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FUU0NfTV9IIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FUU0NfVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DTU1CIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0RUTUIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRFZCX0MiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRFZCX0MyIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0RWQl9IIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0RWQl9TIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0RWQl9TMiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9EVkJfU0giLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRFZCX1QiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRFZCX1QyIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0lTREJfQyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9JU0RCX1MiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSVNEQl9UIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0lTREJfVEIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTlRTQyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9PVEhFUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9QQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUFJFVklFVyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NFQ0FNIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NfRE1CIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RfRE1CIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSURFT19GT1JNQVRfMTA4MEkiLz4KLQkJPGZpZWxkIG5hbWU9IlZJREVPX0ZPUk1BVF8xMDgwUCIvPgotCQk8ZmllbGQgbmFtZT0iVklERU9fRk9STUFUXzIxNjBQIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSURFT19GT1JNQVRfMjQwUCIvPgotCQk8ZmllbGQgbmFtZT0iVklERU9fRk9STUFUXzM2MFAiLz4KLQkJPGZpZWxkIG5hbWU9IlZJREVPX0ZPUk1BVF80MzIwUCIvPgotCQk8ZmllbGQgbmFtZT0iVklERU9fRk9STUFUXzQ4MEkiLz4KLQkJPGZpZWxkIG5hbWU9IlZJREVPX0ZPUk1BVF80ODBQIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSURFT19GT1JNQVRfNTc2SSIvPgotCQk8ZmllbGQgbmFtZT0iVklERU9fRk9STUFUXzU3NlAiLz4KLQkJPGZpZWxkIG5hbWU9IlZJREVPX0ZPUk1BVF83MjBQIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSURFT19SRVNPTFVUSU9OX0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSURFT19SRVNPTFVUSU9OX0ZIRCIvPgotCQk8ZmllbGQgbmFtZT0iVklERU9fUkVTT0xVVElPTl9IRCIvPgotCQk8ZmllbGQgbmFtZT0iVklERU9fUkVTT0xVVElPTl9TRCIvPgotCQk8ZmllbGQgbmFtZT0iVklERU9fUkVTT0xVVElPTl9VSEQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3R2L1R2Q29udHJhY3QkQ2hhbm5lbHMkTG9nbyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9ESVJFQ1RPUlkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3R2L1R2Q29udHJhY3QkUHJldmlld1Byb2dyYW1zIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvdHYvVHZDb250cmFjdCRCYXNlVHZDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBU1BFQ1RfUkFUSU9fMTZfOSIvPgotCQk8ZmllbGQgbmFtZT0iQVNQRUNUX1JBVElPXzFfMSIvPgotCQk8ZmllbGQgbmFtZT0iQVNQRUNUX1JBVElPXzJfMyIvPgotCQk8ZmllbGQgbmFtZT0iQVNQRUNUX1JBVElPXzNfMiIvPgotCQk8ZmllbGQgbmFtZT0iQVNQRUNUX1JBVElPXzRfMyIvPgotCQk8ZmllbGQgbmFtZT0iQVZBSUxBQklMSVRZX0FWQUlMQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iQVZBSUxBQklMSVRZX0ZSRUVfV0lUSF9TVUJTQ1JJUFRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkFWQUlMQUJJTElUWV9QQUlEX0NPTlRFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9BVURJT19MQU5HVUFHRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0FVVEhPUiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0FWQUlMQUJJTElUWSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0JST1dTQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0NBTk9OSUNBTF9HRU5SRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0NIQU5ORUxfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9DT05URU5UX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQ09OVEVOVF9SQVRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9EVVJBVElPTl9NSUxMSVMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9FUElTT0RFX0RJU1BMQVlfTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fRVBJU09ERV9USVRMRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0lOVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JTlRFUkFDVElPTl9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0lOVEVSQUNUSU9OX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JTlRFUk5BTF9QUk9WSURFUl9EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSU5URVJOQUxfUFJPVklERVJfRkxBRzEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JTlRFUk5BTF9QUk9WSURFUl9GTEFHMiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0lOVEVSTkFMX1BST1ZJREVSX0ZMQUczIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSU5URVJOQUxfUFJPVklERVJfRkxBRzQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JTlRFUk5BTF9QUk9WSURFUl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0lURU1fQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9MQVNUX1BMQVlCQUNLX1BPU0lUSU9OX01JTExJUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0xJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9MT0dPX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0xPTkdfREVTQ1JJUFRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9PRkZFUl9QUklDRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1BPU1RFUl9BUlRfQVNQRUNUX1JBVElPIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fUE9TVEVSX0FSVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9QUkVWSUVXX1ZJREVPX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1JFTEVBU0VfREFURSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1JFVklFV19SQVRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9SRVZJRVdfUkFUSU5HX1NUWUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fU0VBUkNIQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1NFQVNPTl9ESVNQTEFZX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1NFQVNPTl9USVRMRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1NIT1JUX0RFU0NSSVBUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fU1RBUlRJTkdfUFJJQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9USFVNQk5BSUxfQVNQRUNUX1JBVElPIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVEhVTUJOQUlMX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1RJVExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVFJBTlNJRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1ZFUlNJT05fTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVklERU9fSEVJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVklERU9fV0lEVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9XRUlHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfSVRFTV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUkFDVElPTl9UWVBFX0ZBTlMiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSQUNUSU9OX1RZUEVfRk9MTE9XRVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUkFDVElPTl9UWVBFX0xJS0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUkFDVElPTl9UWVBFX0xJU1RFTlMiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSQUNUSU9OX1RZUEVfVEhVTUJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUkFDVElPTl9UWVBFX1ZJRVdFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSQUNUSU9OX1RZUEVfVklFV1MiLz4KLQkJPGZpZWxkIG5hbWU9IlJFVklFV19SQVRJTkdfU1RZTEVfUEVSQ0VOVEFHRSIvPgotCQk8ZmllbGQgbmFtZT0iUkVWSUVXX1JBVElOR19TVFlMRV9TVEFSUyIvPgotCQk8ZmllbGQgbmFtZT0iUkVWSUVXX1JBVElOR19TVFlMRV9USFVNQlNfVVBfRE9XTiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BTEJVTSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BUlRJU1QiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQ0hBTk5FTCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DTElQIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0VWRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX01PVklFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1BMQVlMSVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NUQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVFJBQ0siLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVFZfRVBJU09ERSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9UVl9TRUFTT04iLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVFZfU0VSSUVTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS90di9UdkNvbnRyYWN0JFByb2dyYW1zIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvdHYvVHZDb250cmFjdCRCYXNlVHZDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQVVESU9fTEFOR1VBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9CUk9BRENBU1RfR0VOUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9DQU5PTklDQUxfR0VOUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9DSEFOTkVMX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQ09OVEVOVF9SQVRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9FTkRfVElNRV9VVENfTUlMTElTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fRVBJU09ERV9ESVNQTEFZX05VTUJFUiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fRVBJU09ERV9OVU1CRVIiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fRVBJU09ERV9USVRMRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0lOVEVSTkFMX1BST1ZJREVSX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JTlRFUk5BTF9QUk9WSURFUl9GTEFHMSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSU5URVJOQUxfUFJPVklERVJfRkxBRzIiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0lOVEVSTkFMX1BST1ZJREVSX0ZMQUczIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JTlRFUk5BTF9QUk9WSURFUl9GTEFHNCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fTE9OR19ERVNDUklQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1BPU1RFUl9BUlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fUkVDT1JESU5HX1BST0hJQklURUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1JFVklFV19SQVRJTkciIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1JFVklFV19SQVRJTkdfU1RZTEUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1NFQVJDSEFCTEUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1NFQVNPTl9ESVNQTEFZX05VTUJFUiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fU0VBU09OX05VTUJFUiIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9TRUFTT05fVElUTEUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1NIT1JUX0RFU0NSSVBUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fU1RBUlRfVElNRV9VVENfTUlMTElTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVEhVTUJOQUlMX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1RJVExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVkVSU0lPTl9OVU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9WSURFT19IRUlHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9WSURFT19XSURUSCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IlJFVklFV19SQVRJTkdfU1RZTEVfUEVSQ0VOVEFHRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVZJRVdfUkFUSU5HX1NUWUxFX1NUQVJTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFVklFV19SQVRJTkdfU1RZTEVfVEhVTUJTX1VQX0RPV04iIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvdHYvVHZDb250cmFjdCRQcm9ncmFtcyRHZW5yZXMiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGUoTGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmNvZGUoW0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nhbm9uaWNhbChMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTklNQUxfV0lMRExJRkUiLz4KLQkJPGZpZWxkIG5hbWU9IkFSVFMiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iQ09NRURZIi8+Ci0JCTxmaWVsZCBuYW1lPSJEUkFNQSIvPgotCQk8ZmllbGQgbmFtZT0iRURVQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTlRFUlRBSU5NRU5UIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IkZBTUlMWV9LSURTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHQU1JTkciLz4KLQkJPGZpZWxkIG5hbWU9IkxJRkVfU1RZTEUiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iTU9WSUVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNVVNJQyIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVNSUVSIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1BQSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUE9SVFMiLz4KLQkJPGZpZWxkIG5hbWU9IlRFQ0hfU0NJRU5DRSIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFWRUwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3R2L1R2Q29udHJhY3QkUmVjb3JkZWRQcm9ncmFtcyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL21lZGlhL3R2L1R2Q29udHJhY3QkQmFzZVR2Q29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0FVRElPX0xBTkdVQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQlJPQURDQVNUX0dFTlJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQ0FOT05JQ0FMX0dFTlJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQ0hBTk5FTF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0NPTlRFTlRfUkFUSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fRU5EX1RJTUVfVVRDX01JTExJUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0VQSVNPREVfRElTUExBWV9OVU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9FUElTT0RFX1RJVExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSU5QVVRfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JTlRFUk5BTF9QUk9WSURFUl9EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSU5URVJOQUxfUFJPVklERVJfRkxBRzEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JTlRFUk5BTF9QUk9WSURFUl9GTEFHMiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0lOVEVSTkFMX1BST1ZJREVSX0ZMQUczIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSU5URVJOQUxfUFJPVklERVJfRkxBRzQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9MT05HX0RFU0NSSVBUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fUE9TVEVSX0FSVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9SRUNPUkRJTkdfREFUQV9CWVRFUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1JFQ09SRElOR19EQVRBX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1JFQ09SRElOR19EVVJBVElPTl9NSUxMSVMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9SRUNPUkRJTkdfRVhQSVJFX1RJTUVfVVRDX01JTExJUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1JFVklFV19SQVRJTkciIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1JFVklFV19SQVRJTkdfU1RZTEUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1NFQVJDSEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9TRUFTT05fRElTUExBWV9OVU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9TRUFTT05fVElUTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9TSE9SVF9ERVNDUklQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1NUQVJUX1RJTUVfVVRDX01JTExJUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1RIVU1CTkFJTF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9USVRMRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1ZFUlNJT05fTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVklERU9fSEVJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVklERU9fV0lEVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfSVRFTV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVZJRVdfUkFUSU5HX1NUWUxFX1BFUkNFTlRBR0UiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUkVWSUVXX1JBVElOR19TVFlMRV9TVEFSUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVZJRVdfUkFUSU5HX1NUWUxFX1RIVU1CU19VUF9ET1dOIiBzaW5jZT0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3R2L1R2Q29udHJhY3QkV2F0Y2hOZXh0UHJvZ3JhbXMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9tZWRpYS90di9UdkNvbnRyYWN0JEJhc2VUdkNvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFTUEVDVF9SQVRJT18xNl85Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBU1BFQ1RfUkFUSU9fMV8xIi8+Ci0JCTxmaWVsZCBuYW1lPSJBU1BFQ1RfUkFUSU9fMl8zIi8+Ci0JCTxmaWVsZCBuYW1lPSJBU1BFQ1RfUkFUSU9fM18yIi8+Ci0JCTxmaWVsZCBuYW1lPSJBU1BFQ1RfUkFUSU9fNF8zIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkFJTEFCSUxJVFlfQVZBSUxBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkFJTEFCSUxJVFlfRlJFRV9XSVRIX1NVQlNDUklQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iQVZBSUxBQklMSVRZX1BBSURfQ09OVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0FVRElPX0xBTkdVQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQVVUSE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQVZBSUxBQklMSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQlJPV1NBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQ0FOT05JQ0FMX0dFTlJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fQ09OVEVOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0NPTlRFTlRfUkFUSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fRFVSQVRJT05fTUlMTElTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fRVBJU09ERV9ESVNQTEFZX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0VQSVNPREVfVElUTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSU5URVJBQ1RJT05fQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JTlRFUkFDVElPTl9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSU5URVJOQUxfUFJPVklERVJfREFUQSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0lOVEVSTkFMX1BST1ZJREVSX0ZMQUcxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSU5URVJOQUxfUFJPVklERVJfRkxBRzIiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JTlRFUk5BTF9QUk9WSURFUl9GTEFHMyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0lOVEVSTkFMX1BST1ZJREVSX0ZMQUc0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSU5URVJOQUxfUFJPVklERVJfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JVEVNX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fTEFTVF9FTkdBR0VNRU5UX1RJTUVfVVRDX01JTExJUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0xBU1RfUExBWUJBQ0tfUE9TSVRJT05fTUlMTElTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fTElWRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0xPR09fVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fTE9OR19ERVNDUklQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX09GRkVSX1BSSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fUE9TVEVSX0FSVF9BU1BFQ1RfUkFUSU8iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9QT1NURVJfQVJUX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1BSRVZJRVdfVklERU9fVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fUkVMRUFTRV9EQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fUkVWSUVXX1JBVElORyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1JFVklFV19SQVRJTkdfU1RZTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9TRUFSQ0hBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fU0VBU09OX0RJU1BMQVlfTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fU0VBU09OX1RJVExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fU0hPUlRfREVTQ1JJUFRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9TVEFSVElOR19QUklDRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1RIVU1CTkFJTF9BU1BFQ1RfUkFUSU8iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9USFVNQk5BSUxfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVElUTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9UUkFOU0lFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fVkVSU0lPTl9OVU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9WSURFT19IRUlHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9WSURFT19XSURUSCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1dBVENIX05FWFRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSQUNUSU9OX1RZUEVfRkFOUyIvPgotCQk8ZmllbGQgbmFtZT0iSU5URVJBQ1RJT05fVFlQRV9GT0xMT1dFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSQUNUSU9OX1RZUEVfTElLRVMiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSQUNUSU9OX1RZUEVfTElTVEVOUyIvPgotCQk8ZmllbGQgbmFtZT0iSU5URVJBQ1RJT05fVFlQRV9USFVNQlMiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSQUNUSU9OX1RZUEVfVklFV0VSUyIvPgotCQk8ZmllbGQgbmFtZT0iSU5URVJBQ1RJT05fVFlQRV9WSUVXUyIvPgotCQk8ZmllbGQgbmFtZT0iUkVWSUVXX1JBVElOR19TVFlMRV9QRVJDRU5UQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVZJRVdfUkFUSU5HX1NUWUxFX1NUQVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVZJRVdfUkFUSU5HX1NUWUxFX1RIVU1CU19VUF9ET1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FMQlVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FSVElTVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DSEFOTkVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0NMSVAiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRVZFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTU9WSUUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUExBWUxJU1QiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfU1RBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9UUkFDSyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9UVl9FUElTT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RWX1NFQVNPTiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9UVl9TRVJJRVMiLz4KLQkJPGZpZWxkIG5hbWU9IldBVENIX05FWFRfVFlQRV9DT05USU5VRSIvPgotCQk8ZmllbGQgbmFtZT0iV0FUQ0hfTkVYVF9UWVBFX05FVyIvPgotCQk8ZmllbGQgbmFtZT0iV0FUQ0hfTkVYVF9UWVBFX05FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IldBVENIX05FWFRfVFlQRV9XQVRDSExJU1QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3R2L1R2SW5wdXRJbmZvIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5SZWNvcmQoKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVNldHRpbmdzSW50ZW50KClMYW5kcm9pZC9jb250ZW50L0ludGVudDsiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU2V0dXBJbnRlbnQoKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dHJhcygpTGFuZHJvaWQvb3MvQnVuZGxlOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmVudElkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlSW5mbygpTGFuZHJvaWQvY29udGVudC9wbS9TZXJ2aWNlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUdW5lckNvdW50KClJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNIaWRkZW4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Bhc3N0aHJvdWdoSW5wdXQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkQ3VzdG9tTGFiZWwoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRJY29uKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZExhYmVsKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9JTlBVVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DT01QT05FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQ09NUE9TSVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0RJU1BMQVlfUE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9EVkkiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSERNSSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9PVEhFUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9TQ0FSVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9TVklERU8iLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVFVORVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVkdBIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS90di9UdklucHV0SW5mbyRCdWlsZGVyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvbWVkaWEvdHYvVHZJbnB1dEluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FuUmVjb3JkKFopTGFuZHJvaWQvbWVkaWEvdHYvVHZJbnB1dEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeHRyYXMoTGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9tZWRpYS90di9UdklucHV0SW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFR1bmVyQ291bnQoSSlMYW5kcm9pZC9tZWRpYS90di9UdklucHV0SW5mbyRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvdHYvVHZJbnB1dE1hbmFnZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCbG9ja2VkUmF0aW5ncygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRTdGF0ZShMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR2SW5wdXRJbmZvKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9tZWRpYS90di9UdklucHV0SW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUdklucHV0TGlzdCgpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGFyZW50YWxDb250cm9sc0VuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JhdGluZ0Jsb2NrZWQoTGFuZHJvaWQvbWVkaWEvdHYvVHZDb250ZW50UmF0aW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJDYWxsYmFjayhMYW5kcm9pZC9tZWRpYS90di9UdklucHV0TWFuYWdlciRUdklucHV0Q2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJDYWxsYmFjayhMYW5kcm9pZC9tZWRpYS90di9UdklucHV0TWFuYWdlciRUdklucHV0Q2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVUdklucHV0SW5mbyhMYW5kcm9pZC9tZWRpYS90di9UdklucHV0SW5mbzspViIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQkxPQ0tFRF9SQVRJTkdTX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QQVJFTlRBTF9DT05UUk9MU19FTkFCTEVEX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9RVUVSWV9DT05URU5UX1JBVElOR19TWVNURU1TIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0VUVVBfSU5QVVRTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9WSUVXX1JFQ09SRElOR19TQ0hFRFVMRVMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iSU5QVVRfU1RBVEVfQ09OTkVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlBVVF9TVEFURV9DT05ORUNURURfU1RBTkRCWSIvPgotCQk8ZmllbGQgbmFtZT0iSU5QVVRfU1RBVEVfRElTQ09OTkVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX0RBVEFfQ09OVEVOVF9SQVRJTkdfU1lTVEVNUyIvPgotCQk8ZmllbGQgbmFtZT0iUkVDT1JESU5HX0VSUk9SX0lOU1VGRklDSUVOVF9TUEFDRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNPUkRJTkdfRVJST1JfUkVTT1VSQ0VfQlVTWSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNPUkRJTkdfRVJST1JfVU5LTk9XTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FX1NISUZUX0lOVkFMSURfVElNRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FX1NISUZUX1NUQVRVU19BVkFJTEFCTEUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVElNRV9TSElGVF9TVEFUVVNfVU5BVkFJTEFCTEUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVElNRV9TSElGVF9TVEFUVVNfVU5LTk9XTiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FX1NISUZUX1NUQVRVU19VTlNVUFBPUlRFRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSURFT19VTkFWQUlMQUJMRV9SRUFTT05fQVVESU9fT05MWSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSURFT19VTkFWQUlMQUJMRV9SRUFTT05fQlVGRkVSSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSURFT19VTkFWQUlMQUJMRV9SRUFTT05fVFVOSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSURFT19VTkFWQUlMQUJMRV9SRUFTT05fVU5LTk9XTiIvPgotCQk8ZmllbGQgbmFtZT0iVklERU9fVU5BVkFJTEFCTEVfUkVBU09OX1dFQUtfU0lHTkFMIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS90di9UdklucHV0TWFuYWdlciRUdklucHV0Q2FsbGJhY2siIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbklucHV0QWRkZWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbklucHV0UmVtb3ZlZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSW5wdXRTdGF0ZUNoYW5nZWQoTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25JbnB1dFVwZGF0ZWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVHZJbnB1dEluZm9VcGRhdGVkKExhbmRyb2lkL21lZGlhL3R2L1R2SW5wdXRJbmZvOylWIiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3R2L1R2SW5wdXRTZXJ2aWNlIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9TZXJ2aWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVSZWNvcmRpbmdTZXNzaW9uKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9tZWRpYS90di9UdklucHV0U2VydmljZSRSZWNvcmRpbmdTZXNzaW9uOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVTZXNzaW9uKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9tZWRpYS90di9UdklucHV0U2VydmljZSRTZXNzaW9uOyIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9JTlRFUkZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfTUVUQV9EQVRBIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS90di9UdklucHV0U2VydmljZSRIYXJkd2FyZVNlc3Npb24iIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbWVkaWEvdHYvVHZJbnB1dFNlcnZpY2UkU2Vzc2lvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIYXJkd2FyZUlucHV0SWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSGFyZHdhcmVWaWRlb0F2YWlsYWJsZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSGFyZHdhcmVWaWRlb1VuYXZhaWxhYmxlKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvdHYvVHZJbnB1dFNlcnZpY2UkUmVjb3JkaW5nU2Vzc2lvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlFcnJvcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlSZWNvcmRpbmdTdG9wcGVkKExhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlUdW5lZChMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BcHBQcml2YXRlQ29tbWFuZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlbGVhc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXJ0UmVjb3JkaW5nKExhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0b3BSZWNvcmRpbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblR1bmUoTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVHVuZShMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvdHYvVHZJbnB1dFNlcnZpY2UkU2Vzc2lvbiIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvS2V5RXZlbnQkQ2FsbGJhY2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGF5b3V0U3VyZmFjZShJSUlJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeUNoYW5uZWxSZXR1bmVkKExhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlDb250ZW50QWxsb3dlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeUNvbnRlbnRCbG9ja2VkKExhbmRyb2lkL21lZGlhL3R2L1R2Q29udGVudFJhdGluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeVRpbWVTaGlmdFN0YXR1c0NoYW5nZWQoSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlUcmFja1NlbGVjdGVkKElMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeVRyYWNrc0NoYW5nZWQoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5VmlkZW9BdmFpbGFibGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlWaWRlb1VuYXZhaWxhYmxlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQXBwUHJpdmF0ZUNvbW1hbmQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZU92ZXJsYXlWaWV3KClMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZW5lcmljTW90aW9uRXZlbnQoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uT3ZlcmxheVZpZXdTaXplQ2hhbmdlZChJSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlbGVhc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlbGVjdFRyYWNrKElMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2V0Q2FwdGlvbkVuYWJsZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXRTdHJlYW1Wb2x1bWUoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXRTdXJmYWNlKExhbmRyb2lkL3ZpZXcvU3VyZmFjZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3VyZmFjZUNoYW5nZWQoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRpbWVTaGlmdEdldEN1cnJlbnRQb3NpdGlvbigpSiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UaW1lU2hpZnRHZXRTdGFydFBvc2l0aW9uKClKIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRpbWVTaGlmdFBhdXNlKClWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRpbWVTaGlmdFBsYXkoTGFuZHJvaWQvbmV0L1VyaTspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25UaW1lU2hpZnRSZXN1bWUoKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVGltZVNoaWZ0U2Vla1RvKEopViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UaW1lU2hpZnRTZXRQbGF5YmFja1BhcmFtcyhMYW5kcm9pZC9tZWRpYS9QbGF5YmFja1BhcmFtczspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Ub3VjaEV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRyYWNrYmFsbEV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblR1bmUoTGFuZHJvaWQvbmV0L1VyaTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVHVuZShMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL29zL0J1bmRsZTspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25VbmJsb2NrQ29udGVudChMYW5kcm9pZC9tZWRpYS90di9UdkNvbnRlbnRSYXRpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdmVybGF5Vmlld0VuYWJsZWQoWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS90di9UdlJlY29yZGluZ0NsaWVudCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvbWVkaWEvdHYvVHZSZWNvcmRpbmdDbGllbnQkUmVjb3JkaW5nQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kQXBwUHJpdmF0ZUNvbW1hbmQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRSZWNvcmRpbmcoTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BSZWNvcmRpbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0dW5lKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0dW5lKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS90di9UdlJlY29yZGluZ0NsaWVudCRSZWNvcmRpbmdDYWxsYmFjayIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29ubmVjdGlvbkZhaWxlZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGlzY29ubmVjdGVkKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25FcnJvcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlY29yZGluZ1N0b3BwZWQoTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVHVuZWQoTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvdHYvVHZUcmFja0luZm8iIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1ZGlvQ2hhbm5lbENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXVkaW9TYW1wbGVSYXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmEoKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFuZ3VhZ2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWRlb0FjdGl2ZUZvcm1hdERlc2NyaXB0aW9uKClCIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWRlb0ZyYW1lUmF0ZSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZGVvSGVpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmlkZW9QaXhlbEFzcGVjdFJhdGlvKClGIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWRlb1dpZHRoKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FVRElPIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NVQlRJVExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1ZJREVPIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS90di9UdlRyYWNrSW5mbyRCdWlsZGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9tZWRpYS90di9UdlRyYWNrSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdWRpb0NoYW5uZWxDb3VudChJKUxhbmRyb2lkL21lZGlhL3R2L1R2VHJhY2tJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXVkaW9TYW1wbGVSYXRlKEkpTGFuZHJvaWQvbWVkaWEvdHYvVHZUcmFja0luZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZXNjcmlwdGlvbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvbWVkaWEvdHYvVHZUcmFja0luZm8kQnVpbGRlcjsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dHJhKExhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvbWVkaWEvdHYvVHZUcmFja0luZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYW5ndWFnZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbWVkaWEvdHYvVHZUcmFja0luZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWRlb0FjdGl2ZUZvcm1hdERlc2NyaXB0aW9uKEIpTGFuZHJvaWQvbWVkaWEvdHYvVHZUcmFja0luZm8kQnVpbGRlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpZGVvRnJhbWVSYXRlKEYpTGFuZHJvaWQvbWVkaWEvdHYvVHZUcmFja0luZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWRlb0hlaWdodChJKUxhbmRyb2lkL21lZGlhL3R2L1R2VHJhY2tJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlkZW9QaXhlbEFzcGVjdFJhdGlvKEYpTGFuZHJvaWQvbWVkaWEvdHYvVHZUcmFja0luZm8kQnVpbGRlcjsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpZGVvV2lkdGgoSSlMYW5kcm9pZC9tZWRpYS90di9UdlRyYWNrSW5mbyRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbWVkaWEvdHYvVHZWaWV3IiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld0dyb3VwIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoVW5oYW5kbGVkSW5wdXRFdmVudChMYW5kcm9pZC92aWV3L0lucHV0RXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxlY3RlZFRyYWNrKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhY2tzKEkpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVW5oYW5kbGVkSW5wdXRFdmVudChMYW5kcm9pZC92aWV3L0lucHV0RXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbGVjdFRyYWNrKElMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRBcHBQcml2YXRlQ29tbWFuZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbGxiYWNrKExhbmRyb2lkL21lZGlhL3R2L1R2VmlldyRUdklucHV0Q2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYXB0aW9uRW5hYmxlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPblVuaGFuZGxlZElucHV0RXZlbnRMaXN0ZW5lcihMYW5kcm9pZC9tZWRpYS90di9UdlZpZXckT25VbmhhbmRsZWRJbnB1dEV2ZW50TGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdHJlYW1Wb2x1bWUoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZVNoaWZ0UG9zaXRpb25DYWxsYmFjayhMYW5kcm9pZC9tZWRpYS90di9UdlZpZXckVGltZVNoaWZ0UG9zaXRpb25DYWxsYmFjazspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Wk9yZGVyTWVkaWFPdmVybGF5KFopViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Wk9yZGVyT25Ub3AoWilWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aW1lU2hpZnRQYXVzZSgpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0idGltZVNoaWZ0UGxheShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9uZXQvVXJpOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aW1lU2hpZnRSZXN1bWUoKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InRpbWVTaGlmdFNlZWtUbyhKKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InRpbWVTaGlmdFNldFBsYXliYWNrUGFyYW1zKExhbmRyb2lkL21lZGlhL1BsYXliYWNrUGFyYW1zOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0dW5lKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0dW5lKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3R2L1R2VmlldyRPblVuaGFuZGxlZElucHV0RXZlbnRMaXN0ZW5lciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVW5oYW5kbGVkSW5wdXRFdmVudChMYW5kcm9pZC92aWV3L0lucHV0RXZlbnQ7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL21lZGlhL3R2L1R2VmlldyRUaW1lU2hpZnRQb3NpdGlvbkNhbGxiYWNrIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UaW1lU2hpZnRDdXJyZW50UG9zaXRpb25DaGFuZ2VkKExqYXZhL2xhbmcvU3RyaW5nO0opViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVGltZVNoaWZ0U3RhcnRQb3NpdGlvbkNoYW5nZWQoTGphdmEvbGFuZy9TdHJpbmc7SilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tZWRpYS90di9UdlZpZXckVHZJbnB1dENhbGxiYWNrIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DaGFubmVsUmV0dW5lZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db25uZWN0aW9uRmFpbGVkKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db250ZW50QWxsb3dlZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29udGVudEJsb2NrZWQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvbWVkaWEvdHYvVHZDb250ZW50UmF0aW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EaXNjb25uZWN0ZWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRpbWVTaGlmdFN0YXR1c0NoYW5nZWQoTGphdmEvbGFuZy9TdHJpbmc7SSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRyYWNrU2VsZWN0ZWQoTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UcmFja3NDaGFuZ2VkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVmlkZW9BdmFpbGFibGUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblZpZGVvU2l6ZUNoYW5nZWQoTGphdmEvbGFuZy9TdHJpbmc7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVmlkZW9VbmF2YWlsYWJsZShMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL210cC9NdHBDb25zdGFudHMiIHNpbmNlPSIxMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Fic3RyYWN0T2JqZWN0KEkpWiIvPgotCQk8ZmllbGQgbmFtZT0iQVNTT0NJQVRJT05fVFlQRV9HRU5FUklDX0ZPTERFUiIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUXzNHUF9DT05UQUlORVIiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9BQUMiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9BQlNUUkFDVF9BVURJT19BTEJVTSIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0FCU1RSQUNUX0FVRElPX1BMQVlMSVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQUJTVFJBQ1RfQVZfUExBWUxJU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9BQlNUUkFDVF9ET0NVTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0FCU1RSQUNUX0lNQUdFX0FMQlVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQUJTVFJBQ1RfTUVESUFDQVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQUJTVFJBQ1RfTVVMVElNRURJQV9BTEJVTSIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0FCU1RSQUNUX1ZJREVPX0FMQlVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQUJTVFJBQ1RfVklERU9fUExBWUxJU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9BSUZGIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQVNGIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQVNTT0NJQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9BU1hfUExBWUxJU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9BVURJQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQVZJIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQk1QIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfREVGSU5FRCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfRE5HIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9EUE9GIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfRVhFQ1VUQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0VYSUZfSlBFRyIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0ZMQUMiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9HSUYiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9IVE1MIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfSkZJRiIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0pQMiIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0pQWCIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX00zVV9QTEFZTElTVCIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX01QMiIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX01QMyIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX01QNF9DT05UQUlORVIiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9NUEVHIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfTVBMX1BMQVlMSVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfTVNfRVhDRUxfU1BSRUFEU0hFRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9NU19QT1dFUlBPSU5UX1BSRVNFTlRBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX01TX1dPUkRfRE9DVU1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9PR0ciLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9QSUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfUExTX1BMQVlMSVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfUE5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfU0NSSVBUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfVEVYVCIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX1RJRkYiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9USUZGX0VQIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfVU5ERUZJTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfVU5ERUZJTkVEX0FVRElPIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfVU5ERUZJTkVEX0NPTExFQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9VTkRFRklORURfRE9DVU1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9VTkRFRklORURfRklSTVdBUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9VTkRFRklORURfVklERU8iLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9XQVYiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9XSU5ET1dTX0lNQUdFX0ZPUk1BVCIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX1dNQSIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX1dNViIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX1dQTF9QTEFZTElTVCIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX1hNTF9ET0NVTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX0NMT1NFX1NFU1NJT04iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX0NPUFlfT0JKRUNUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRVJBVElPTl9ERUxFVEVfT0JKRUNUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRVJBVElPTl9GT1JNQVRfU1RPUkUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX0dFVF9ERVZJQ0VfSU5GTyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVSQVRJT05fR0VUX0RFVklDRV9QUk9QX0RFU0MiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX0dFVF9ERVZJQ0VfUFJPUF9WQUxVRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVSQVRJT05fR0VUX05VTV9PQkpFQ1RTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRVJBVElPTl9HRVRfT0JKRUNUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRVJBVElPTl9HRVRfT0JKRUNUX0hBTkRMRVMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX0dFVF9PQkpFQ1RfSU5GTyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVSQVRJT05fR0VUX09CSkVDVF9QUk9QU19TVVBQT1JURUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX0dFVF9PQkpFQ1RfUFJPUF9ERVNDIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRVJBVElPTl9HRVRfT0JKRUNUX1BST1BfVkFMVUUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX0dFVF9PQkpFQ1RfUkVGRVJFTkNFUyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVSQVRJT05fR0VUX1BBUlRJQUxfT0JKRUNUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRVJBVElPTl9HRVRfUEFSVElBTF9PQkpFQ1RfNjQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX0dFVF9TVE9SQUdFX0lORk8iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX0dFVF9TVE9SQUdFX0lfRFMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX0dFVF9USFVNQiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVSQVRJT05fSU5JVElBVEVfQ0FQVFVSRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVSQVRJT05fSU5JVElBVEVfT1BFTl9DQVBUVVJFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRVJBVElPTl9NT1ZFX09CSkVDVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVSQVRJT05fT1BFTl9TRVNTSU9OIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRVJBVElPTl9QT1dFUl9ET1dOIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRVJBVElPTl9SRVNFVF9ERVZJQ0UiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX1JFU0VUX0RFVklDRV9QUk9QX1ZBTFVFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRVJBVElPTl9TRUxGX1RFU1QiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX1NFTkRfT0JKRUNUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRVJBVElPTl9TRU5EX09CSkVDVF9JTkZPIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRVJBVElPTl9TRVRfREVWSUNFX1BST1BfVkFMVUUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX1NFVF9PQkpFQ1RfUFJPUF9WQUxVRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVSQVRJT05fU0VUX09CSkVDVF9QUk9URUNUSU9OIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRVJBVElPTl9TRVRfT0JKRUNUX1JFRkVSRU5DRVMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX1NLSVAiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFUkFUSU9OX1RFUk1JTkFURV9PUEVOX0NBUFRVUkUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVEVDVElPTl9TVEFUVVNfTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVEVDVElPTl9TVEFUVVNfTk9OX1RSQU5TRkVSQUJMRV9EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9URUNUSU9OX1NUQVRVU19SRUFEX09OTFkiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RFQ1RJT05fU1RBVFVTX1JFQURfT05MWV9EQVRBIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9tdHAvTXRwRGV2aWNlIiBzaW5jZT0iMTIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JEZXZpY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZU9iamVjdChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXZpY2VJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZUluZm8oKUxhbmRyb2lkL210cC9NdHBEZXZpY2VJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iamVjdChJSSlbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iamVjdEhhbmRsZXMoSUlJKVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2JqZWN0SW5mbyhJKUxhbmRyb2lkL210cC9NdHBPYmplY3RJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmVudChJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJ0aWFsT2JqZWN0KElKSltCKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcnRpYWxPYmplY3Q2NChJSkpbQilKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdG9yYWdlSWQoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RvcmFnZUlkcygpW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdG9yYWdlSW5mbyhJKUxhbmRyb2lkL210cC9NdHBTdG9yYWdlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHVtYm5haWwoSSlbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImltcG9ydEZpbGUoSUxhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbXBvcnRGaWxlKElMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW4oTGFuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkRldmljZUNvbm5lY3Rpb247KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkRXZlbnQoTGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsOylMYW5kcm9pZC9tdHAvTXRwRXZlbnQ7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kT2JqZWN0KElKTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRPYmplY3RJbmZvKExhbmRyb2lkL210cC9NdHBPYmplY3RJbmZvOylMYW5kcm9pZC9tdHAvTXRwT2JqZWN0SW5mbzsiIHNpbmNlPSIyNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbXRwL010cERldmljZUluZm8iIHNpbmNlPSIxMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFdmVudHNTdXBwb3J0ZWQoKVtJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYW51ZmFjdHVyZXIoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vZGVsKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcGVyYXRpb25zU3VwcG9ydGVkKClbSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VyaWFsTnVtYmVyKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZXJzaW9uKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0V2ZW50U3VwcG9ydGVkKEkpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPcGVyYXRpb25TdXBwb3J0ZWQoSSlaIiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL210cC9NdHBFdmVudCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZVByb3BDb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXZlbnRDb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2JqZWN0Rm9ybWF0Q29kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iamVjdEhhbmRsZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iamVjdFByb3BDb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1ldGVyMSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtZXRlcjIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXIzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RvcmFnZUlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNhY3Rpb25JZCgpSSIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfQ0FOQ0VMX1RSQU5TQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9DQVBUVVJFX0NPTVBMRVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9ERVZJQ0VfSU5GT19DSEFOR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9ERVZJQ0VfUFJPUF9DSEFOR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9ERVZJQ0VfUkVTRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVWRU5UX09CSkVDVF9BRERFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfT0JKRUNUX0lORk9fQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfT0JKRUNUX1BST1BfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfT0JKRUNUX1BST1BfREVTQ19DSEFOR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9PQkpFQ1RfUkVGRVJFTkNFU19DSEFOR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9PQkpFQ1RfUkVNT1ZFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfUkVRVUVTVF9PQkpFQ1RfVFJBTlNGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkVWRU5UX1NUT1JBR0VfSU5GT19DSEFOR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9TVE9SRV9BRERFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfU1RPUkVfRlVMTCIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfU1RPUkVfUkVNT1ZFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfVU5ERUZJTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9VTlJFUE9SVEVEX1NUQVRVUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbXRwL010cE9iamVjdEluZm8iIHNpbmNlPSIxMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBc3NvY2lhdGlvbkRlc2MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBc3NvY2lhdGlvblR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wcmVzc2VkU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXByZXNzZWRTaXplTG9uZygpSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZUNyZWF0ZWQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlTW9kaWZpZWQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JtYXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbWFnZVBpeERlcHRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1hZ2VQaXhEZXB0aExvbmcoKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEltYWdlUGl4SGVpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1hZ2VQaXhIZWlnaHRMb25nKClKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbWFnZVBpeFdpZHRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1hZ2VQaXhXaWR0aExvbmcoKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleXdvcmRzKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPYmplY3RIYW5kbGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJlbnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm90ZWN0aW9uU3RhdHVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VxdWVuY2VOdW1iZXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXF1ZW5jZU51bWJlckxvbmcoKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0b3JhZ2VJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRodW1iQ29tcHJlc3NlZFNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHVtYkNvbXByZXNzZWRTaXplTG9uZygpSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGh1bWJGb3JtYXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHVtYlBpeEhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRodW1iUGl4SGVpZ2h0TG9uZygpSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGh1bWJQaXhXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRodW1iUGl4V2lkdGhMb25nKClKIiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL210cC9NdHBPYmplY3RJbmZvJEJ1aWxkZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbXRwL010cE9iamVjdEluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvbXRwL010cE9iamVjdEluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXNzb2NpYXRpb25EZXNjKEkpTGFuZHJvaWQvbXRwL010cE9iamVjdEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBc3NvY2lhdGlvblR5cGUoSSlMYW5kcm9pZC9tdHAvTXRwT2JqZWN0SW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbXByZXNzZWRTaXplKEopTGFuZHJvaWQvbXRwL010cE9iamVjdEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRlQ3JlYXRlZChKKUxhbmRyb2lkL210cC9NdHBPYmplY3RJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0ZU1vZGlmaWVkKEopTGFuZHJvaWQvbXRwL010cE9iamVjdEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb3JtYXQoSSlMYW5kcm9pZC9tdHAvTXRwT2JqZWN0SW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltYWdlUGl4RGVwdGgoSilMYW5kcm9pZC9tdHAvTXRwT2JqZWN0SW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltYWdlUGl4SGVpZ2h0KEopTGFuZHJvaWQvbXRwL010cE9iamVjdEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbWFnZVBpeFdpZHRoKEopTGFuZHJvaWQvbXRwL010cE9iamVjdEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZXl3b3JkcyhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbXRwL010cE9iamVjdEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9tdHAvTXRwT2JqZWN0SW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9iamVjdEhhbmRsZShJKUxhbmRyb2lkL210cC9NdHBPYmplY3RJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyZW50KEkpTGFuZHJvaWQvbXRwL010cE9iamVjdEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm90ZWN0aW9uU3RhdHVzKEkpTGFuZHJvaWQvbXRwL010cE9iamVjdEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZXF1ZW5jZU51bWJlcihKKUxhbmRyb2lkL210cC9NdHBPYmplY3RJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RvcmFnZUlkKEkpTGFuZHJvaWQvbXRwL010cE9iamVjdEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaHVtYkNvbXByZXNzZWRTaXplKEopTGFuZHJvaWQvbXRwL010cE9iamVjdEluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaHVtYkZvcm1hdChJKUxhbmRyb2lkL210cC9NdHBPYmplY3RJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGh1bWJQaXhIZWlnaHQoSilMYW5kcm9pZC9tdHAvTXRwT2JqZWN0SW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRodW1iUGl4V2lkdGgoSilMYW5kcm9pZC9tdHAvTXRwT2JqZWN0SW5mbyRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbXRwL010cFN0b3JhZ2VJbmZvIiBzaW5jZT0iMTIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyZWVTcGFjZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heENhcGFjaXR5KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RvcmFnZUlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vm9sdW1lSWRlbnRpZmllcigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvQ2FwdGl2ZVBvcnRhbCIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL0lCaW5kZXI7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9Imlnbm9yZU5ldHdvcmsoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBvcnRDYXB0aXZlUG9ydGFsRGlzbWlzc2VkKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvQ29ubmVjdGl2aXR5TWFuYWdlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRGVmYXVsdE5ldHdvcmtBY3RpdmVMaXN0ZW5lcihMYW5kcm9pZC9uZXQvQ29ubmVjdGl2aXR5TWFuYWdlciRPbk5ldHdvcmtBY3RpdmVMaXN0ZW5lcjspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZFByb2Nlc3NUb05ldHdvcmsoTGFuZHJvaWQvbmV0L05ldHdvcms7KVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2ZU5ldHdvcmsoKUxhbmRyb2lkL25ldC9OZXR3b3JrOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZlTmV0d29ya0luZm8oKUxhbmRyb2lkL25ldC9OZXR3b3JrSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxOZXR3b3JrSW5mbygpW0xhbmRyb2lkL25ldC9OZXR3b3JrSW5mbzsiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxsTmV0d29ya3MoKVtMYW5kcm9pZC9uZXQvTmV0d29yazsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhY2tncm91bmREYXRhU2V0dGluZygpWiIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm91bmROZXR3b3JrRm9yUHJvY2VzcygpTGFuZHJvaWQvbmV0L05ldHdvcms7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0UHJveHkoKUxhbmRyb2lkL25ldC9Qcm94eUluZm87IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5rUHJvcGVydGllcyhMYW5kcm9pZC9uZXQvTmV0d29yazspTGFuZHJvaWQvbmV0L0xpbmtQcm9wZXJ0aWVzOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TXVsdGlwYXRoUHJlZmVyZW5jZShMYW5kcm9pZC9uZXQvTmV0d29yazspSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV0d29ya0NhcGFiaWxpdGllcyhMYW5kcm9pZC9uZXQvTmV0d29yazspTGFuZHJvaWQvbmV0L05ldHdvcmtDYXBhYmlsaXRpZXM7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZXR3b3JrSW5mbyhJKUxhbmRyb2lkL25ldC9OZXR3b3JrSW5mbzsiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV0d29ya0luZm8oTGFuZHJvaWQvbmV0L05ldHdvcms7KUxhbmRyb2lkL25ldC9OZXR3b3JrSW5mbzsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5ldHdvcmtQcmVmZXJlbmNlKClJIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5ldHdvcmtXYXRjaGxpc3RDb25maWdIYXNoKClbQiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvY2Vzc0RlZmF1bHROZXR3b3JrKClMYW5kcm9pZC9uZXQvTmV0d29yazsiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXN0cmljdEJhY2tncm91bmRTdGF0dXMoKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWN0aXZlTmV0d29ya01ldGVyZWQoKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGVmYXVsdE5ldHdvcmtBY3RpdmUoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTmV0d29ya1R5cGVWYWxpZChJKVoiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJEZWZhdWx0TmV0d29ya0NhbGxiYWNrKExhbmRyb2lkL25ldC9Db25uZWN0aXZpdHlNYW5hZ2VyJE5ldHdvcmtDYWxsYmFjazspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJEZWZhdWx0TmV0d29ya0NhbGxiYWNrKExhbmRyb2lkL25ldC9Db25uZWN0aXZpdHlNYW5hZ2VyJE5ldHdvcmtDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3Rlck5ldHdvcmtDYWxsYmFjayhMYW5kcm9pZC9uZXQvTmV0d29ya1JlcXVlc3Q7TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyTmV0d29ya0NhbGxiYWNrKExhbmRyb2lkL25ldC9OZXR3b3JrUmVxdWVzdDtMYW5kcm9pZC9uZXQvQ29ubmVjdGl2aXR5TWFuYWdlciROZXR3b3JrQ2FsbGJhY2s7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyTmV0d29ya0NhbGxiYWNrKExhbmRyb2lkL25ldC9OZXR3b3JrUmVxdWVzdDtMYW5kcm9pZC9uZXQvQ29ubmVjdGl2aXR5TWFuYWdlciROZXR3b3JrQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZU5ldHdvcmtSZXF1ZXN0KExhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVEZWZhdWx0TmV0d29ya0FjdGl2ZUxpc3RlbmVyKExhbmRyb2lkL25ldC9Db25uZWN0aXZpdHlNYW5hZ2VyJE9uTmV0d29ya0FjdGl2ZUxpc3RlbmVyOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBvcnRCYWROZXR3b3JrKExhbmRyb2lkL25ldC9OZXR3b3JrOylWIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVwb3J0TmV0d29ya0Nvbm5lY3Rpdml0eShMYW5kcm9pZC9uZXQvTmV0d29yaztaKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RCYW5kd2lkdGhVcGRhdGUoTGFuZHJvaWQvbmV0L05ldHdvcms7KVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3ROZXR3b3JrKExhbmRyb2lkL25ldC9OZXR3b3JrUmVxdWVzdDtMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdE5ldHdvcmsoTGFuZHJvaWQvbmV0L05ldHdvcmtSZXF1ZXN0O0xhbmRyb2lkL25ldC9Db25uZWN0aXZpdHlNYW5hZ2VyJE5ldHdvcmtDYWxsYmFjazspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdE5ldHdvcmsoTGFuZHJvaWQvbmV0L05ldHdvcmtSZXF1ZXN0O0xhbmRyb2lkL25ldC9Db25uZWN0aXZpdHlNYW5hZ2VyJE5ldHdvcmtDYWxsYmFjaztJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3ROZXR3b3JrKExhbmRyb2lkL25ldC9OZXR3b3JrUmVxdWVzdDtMYW5kcm9pZC9uZXQvQ29ubmVjdGl2aXR5TWFuYWdlciROZXR3b3JrQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdE5ldHdvcmsoTGFuZHJvaWQvbmV0L05ldHdvcmtSZXF1ZXN0O0xhbmRyb2lkL25ldC9Db25uZWN0aXZpdHlNYW5hZ2VyJE5ldHdvcmtDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyO0kpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFJvdXRlVG9Ib3N0KElJKVoiIGRlcHJlY2F0ZWQ9IjIxIiByZW1vdmVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5ldHdvcmtQcmVmZXJlbmNlKEkpViIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9jZXNzRGVmYXVsdE5ldHdvcmsoTGFuZHJvaWQvbmV0L05ldHdvcms7KVoiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFVzaW5nTmV0d29ya0ZlYXR1cmUoSUxqYXZhL2xhbmcvU3RyaW5nOylJIiBkZXByZWNhdGVkPSIyMSIgcmVtb3ZlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wVXNpbmdOZXR3b3JrRmVhdHVyZShJTGphdmEvbGFuZy9TdHJpbmc7KUkiIGRlcHJlY2F0ZWQ9IjIxIiByZW1vdmVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJOZXR3b3JrQ2FsbGJhY2soTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJOZXR3b3JrQ2FsbGJhY2soTGFuZHJvaWQvbmV0L0Nvbm5lY3Rpdml0eU1hbmFnZXIkTmV0d29ya0NhbGxiYWNrOylWIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9CQUNLR1JPVU5EX0RBVEFfU0VUVElOR19DSEFOR0VEIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DQVBUSVZFX1BPUlRBTF9TSUdOX0lOIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9SRVNUUklDVF9CQUNLR1JPVU5EX0NIQU5HRUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OTkVDVElWSVRZX0FDVElPTiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfTkVUV09SS19QUkVGRVJFTkNFIiBkZXByZWNhdGVkPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0FQVElWRV9QT1JUQUwiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0FQVElWRV9QT1JUQUxfVVJMIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0VYVFJBX0lORk8iLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0lTX0ZBSUxPVkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9ORVRXT1JLIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX05FVFdPUktfSU5GTyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX05FVFdPUktfUkVRVUVTVCIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9ORVRXT1JLX1RZUEUiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTk9fQ09OTkVDVElWSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9PVEhFUl9ORVRXT1JLX0lORk8iLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JFQVNPTiIvPgotCQk8ZmllbGQgbmFtZT0iTVVMVElQQVRIX1BSRUZFUkVOQ0VfSEFORE9WRVIiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTVVMVElQQVRIX1BSRUZFUkVOQ0VfUEVSRk9STUFOQ0UiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTVVMVElQQVRIX1BSRUZFUkVOQ0VfUkVMSUFCSUxJVFkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVFJJQ1RfQkFDS0dST1VORF9TVEFUVVNfRElTQUJMRUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVFJJQ1RfQkFDS0dST1VORF9TVEFUVVNfRU5BQkxFRCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNUUklDVF9CQUNLR1JPVU5EX1NUQVRVU19XSElURUxJU1RFRCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0JMVUVUT09USCIgc2luY2U9IjEzIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9EVU1NWSIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9FVEhFUk5FVCIgc2luY2U9IjEzIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9NT0JJTEUiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX01PQklMRV9EVU4iIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9NT0JJTEVfSElQUkkiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9NT0JJTEVfTU1TIiBzaW5jZT0iOCIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTU9CSUxFX1NVUEwiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9WUE4iIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfV0lGSSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfV0lNQVgiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L0Nvbm5lY3Rpdml0eU1hbmFnZXIkTmV0d29ya0NhbGxiYWNrIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BdmFpbGFibGUoTGFuZHJvaWQvbmV0L05ldHdvcms7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhcGFiaWxpdGllc0NoYW5nZWQoTGFuZHJvaWQvbmV0L05ldHdvcms7TGFuZHJvaWQvbmV0L05ldHdvcmtDYXBhYmlsaXRpZXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxpbmtQcm9wZXJ0aWVzQ2hhbmdlZChMYW5kcm9pZC9uZXQvTmV0d29yaztMYW5kcm9pZC9uZXQvTGlua1Byb3BlcnRpZXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxvc2luZyhMYW5kcm9pZC9uZXQvTmV0d29yaztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxvc3QoTGFuZHJvaWQvbmV0L05ldHdvcms7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVuYXZhaWxhYmxlKClWIiBzaW5jZT0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9Db25uZWN0aXZpdHlNYW5hZ2VyJE9uTmV0d29ya0FjdGl2ZUxpc3RlbmVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25OZXR3b3JrQWN0aXZlKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvQ3JlZGVudGlhbHMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdpZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBpZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVpZCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L0RoY3BJbmZvIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iZG5zMSIvPgotCQk8ZmllbGQgbmFtZT0iZG5zMiIvPgotCQk8ZmllbGQgbmFtZT0iZ2F0ZXdheSIvPgotCQk8ZmllbGQgbmFtZT0iaXBBZGRyZXNzIi8+Ci0JCTxmaWVsZCBuYW1lPSJsZWFzZUR1cmF0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJuZXRtYXNrIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZXJ2ZXJBZGRyZXNzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvSXBQcmVmaXgiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnMoTGphdmEvbmV0L0luZXRBZGRyZXNzOylaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBZGRyZXNzKClMamF2YS9uZXQvSW5ldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlZml4TGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmF3QWRkcmVzcygpW0IiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9JcFNlY0FsZ29yaXRobSIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7W0IpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztbQkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcnVuY2F0aW9uTGVuZ3RoQml0cygpSSIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSF9DUllQVF9BRVNfR0NNIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRIX0hNQUNfTUQ1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRIX0hNQUNfU0hBMSIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSF9ITUFDX1NIQTI1NiIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSF9ITUFDX1NIQTM4NCIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSF9ITUFDX1NIQTUxMiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JZUFRfQUVTX0NCQyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L0lwU2VjTWFuYWdlciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFsbG9jYXRlU2VjdXJpdHlQYXJhbWV0ZXJJbmRleChMamF2YS9uZXQvSW5ldEFkZHJlc3M7KUxhbmRyb2lkL25ldC9JcFNlY01hbmFnZXIkU2VjdXJpdHlQYXJhbWV0ZXJJbmRleDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxvY2F0ZVNlY3VyaXR5UGFyYW1ldGVySW5kZXgoTGphdmEvbmV0L0luZXRBZGRyZXNzO0kpTGFuZHJvaWQvbmV0L0lwU2VjTWFuYWdlciRTZWN1cml0eVBhcmFtZXRlckluZGV4OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5VHJhbnNwb3J0TW9kZVRyYW5zZm9ybShMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtJTGFuZHJvaWQvbmV0L0lwU2VjVHJhbnNmb3JtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlUcmFuc3BvcnRNb2RlVHJhbnNmb3JtKExqYXZhL25ldC9EYXRhZ3JhbVNvY2tldDtJTGFuZHJvaWQvbmV0L0lwU2VjVHJhbnNmb3JtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlUcmFuc3BvcnRNb2RlVHJhbnNmb3JtKExqYXZhL25ldC9Tb2NrZXQ7SUxhbmRyb2lkL25ldC9JcFNlY1RyYW5zZm9ybTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5VZHBFbmNhcHN1bGF0aW9uU29ja2V0KClMYW5kcm9pZC9uZXQvSXBTZWNNYW5hZ2VyJFVkcEVuY2Fwc3VsYXRpb25Tb2NrZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlblVkcEVuY2Fwc3VsYXRpb25Tb2NrZXQoSSlMYW5kcm9pZC9uZXQvSXBTZWNNYW5hZ2VyJFVkcEVuY2Fwc3VsYXRpb25Tb2NrZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlVHJhbnNwb3J0TW9kZVRyYW5zZm9ybXMoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVUcmFuc3BvcnRNb2RlVHJhbnNmb3JtcyhMamF2YS9uZXQvRGF0YWdyYW1Tb2NrZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVUcmFuc3BvcnRNb2RlVHJhbnNmb3JtcyhMamF2YS9uZXQvU29ja2V0OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05fSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTl9PVVQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9JcFNlY01hbmFnZXIkUmVzb3VyY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC91dGlsL0FuZHJvaWRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9JcFNlY01hbmFnZXIkU2VjdXJpdHlQYXJhbWV0ZXJJbmRleCIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQXV0b0Nsb3NlYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNwaSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L0lwU2VjTWFuYWdlciRTcGlVbmF2YWlsYWJsZUV4Y2VwdGlvbiIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC91dGlsL0FuZHJvaWRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3BpKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvSXBTZWNNYW5hZ2VyJFVkcEVuY2Fwc3VsYXRpb25Tb2NrZXQiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWxlRGVzY3JpcHRvcigpTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9ydCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L0lwU2VjVHJhbnNmb3JtIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BdXRvQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvSXBTZWNUcmFuc2Zvcm0kQnVpbGRlciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZFRyYW5zcG9ydE1vZGVUcmFuc2Zvcm0oTGphdmEvbmV0L0luZXRBZGRyZXNzO0xhbmRyb2lkL25ldC9JcFNlY01hbmFnZXIkU2VjdXJpdHlQYXJhbWV0ZXJJbmRleDspTGFuZHJvaWQvbmV0L0lwU2VjVHJhbnNmb3JtOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dGhlbnRpY2F0ZWRFbmNyeXB0aW9uKExhbmRyb2lkL25ldC9JcFNlY0FsZ29yaXRobTspTGFuZHJvaWQvbmV0L0lwU2VjVHJhbnNmb3JtJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0aGVudGljYXRpb24oTGFuZHJvaWQvbmV0L0lwU2VjQWxnb3JpdGhtOylMYW5kcm9pZC9uZXQvSXBTZWNUcmFuc2Zvcm0kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmNyeXB0aW9uKExhbmRyb2lkL25ldC9JcFNlY0FsZ29yaXRobTspTGFuZHJvaWQvbmV0L0lwU2VjVHJhbnNmb3JtJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SXB2NEVuY2Fwc3VsYXRpb24oTGFuZHJvaWQvbmV0L0lwU2VjTWFuYWdlciRVZHBFbmNhcHN1bGF0aW9uU29ja2V0O0kpTGFuZHJvaWQvbmV0L0lwU2VjVHJhbnNmb3JtJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvTGlua0FkZHJlc3MiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvSW50ZXJmYWNlQWRkcmVzczspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWRkcmVzcygpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsYWdzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlZml4TGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NvcGUoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9MaW5rUHJvcGVydGllcyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREbnNTZXJ2ZXJzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG9tYWlucygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SHR0cFByb3h5KClMYW5kcm9pZC9uZXQvUHJveHlJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVyZmFjZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmtBZGRyZXNzZXMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcml2YXRlRG5zU2VydmVyTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3V0ZXMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ByaXZhdGVEbnNBY3RpdmUoKVoiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L0xvY2FsU2VydmVyU29ja2V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdCgpTGFuZHJvaWQvbmV0L0xvY2FsU29ja2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsZURlc2NyaXB0b3IoKUxqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsU29ja2V0QWRkcmVzcygpTGFuZHJvaWQvbmV0L0xvY2FsU29ja2V0QWRkcmVzczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9Mb2NhbFNvY2tldCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kKExhbmRyb2lkL25ldC9Mb2NhbFNvY2tldEFkZHJlc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGFuZHJvaWQvbmV0L0xvY2FsU29ja2V0QWRkcmVzczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGFuZHJvaWQvbmV0L0xvY2FsU29ja2V0QWRkcmVzcztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmNpbGxhcnlGaWxlRGVzY3JpcHRvcnMoKVtMamF2YS9pby9GaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWxlRGVzY3JpcHRvcigpTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRTdHJlYW0oKUxqYXZhL2lvL0lucHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsU29ja2V0QWRkcmVzcygpTGFuZHJvaWQvbmV0L0xvY2FsU29ja2V0QWRkcmVzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRwdXRTdHJlYW0oKUxqYXZhL2lvL091dHB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZWVyQ3JlZGVudGlhbHMoKUxhbmRyb2lkL25ldC9DcmVkZW50aWFsczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWNlaXZlQnVmZmVyU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlbW90ZVNvY2tldEFkZHJlc3MoKUxhbmRyb2lkL25ldC9Mb2NhbFNvY2tldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VuZEJ1ZmZlclNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb1RpbWVvdXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JvdW5kKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDbG9zZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nvbm5lY3RlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5wdXRTaHV0ZG93bigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT3V0cHV0U2h1dGRvd24oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaWxlRGVzY3JpcHRvcnNGb3JTZW5kKFtMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlY2VpdmVCdWZmZXJTaXplKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbmRCdWZmZXJTaXplKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNvVGltZW91dChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaHV0ZG93bklucHV0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2h1dGRvd25PdXRwdXQoKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNPQ0tFVF9ER1JBTSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTT0NLRVRfU0VRUEFDS0VUIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlNPQ0tFVF9TVFJFQU0iIHNpbmNlPSIxOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L0xvY2FsU29ja2V0QWRkcmVzcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL25ldC9Mb2NhbFNvY2tldEFkZHJlc3MkTmFtZXNwYWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZXNwYWNlKClMYW5kcm9pZC9uZXQvTG9jYWxTb2NrZXRBZGRyZXNzJE5hbWVzcGFjZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9Mb2NhbFNvY2tldEFkZHJlc3MkTmFtZXNwYWNlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L0xvY2FsU29ja2V0QWRkcmVzcyROYW1lc3BhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvbmV0L0xvY2FsU29ja2V0QWRkcmVzcyROYW1lc3BhY2U7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQlNUUkFDVCIvPgotCQk8ZmllbGQgbmFtZT0iRklMRVNZU1RFTSIvPgotCQk8ZmllbGQgbmFtZT0iUkVTRVJWRUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9NYWNBZGRyZXNzIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tQnl0ZXMoW0IpTGFuZHJvaWQvbmV0L01hY0FkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbVN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L01hY0FkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWRkcmVzc1R5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xvY2FsbHlBc3NpZ25lZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InRvQnl0ZUFycmF5KClbQiIvPgotCQk8bWV0aG9kIG5hbWU9InRvT3VpU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkJST0FEQ0FTVF9BRERSRVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0JST0FEQ0FTVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9NVUxUSUNBU1QiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVU5JQ0FTVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L01haWxUbyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9keSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2MoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlYWRlcnMoKUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YmplY3QoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc01haWxUbyhMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvTWFpbFRvOyIvPgotCQk8ZmllbGQgbmFtZT0iTUFJTFRPX1NDSEVNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L05ldHdvcmsiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmRTb2NrZXQoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmRTb2NrZXQoTGphdmEvbmV0L0RhdGFncmFtU29ja2V0OylWIiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kU29ja2V0KExqYXZhL25ldC9Tb2NrZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tTmV0d29ya0hhbmRsZShKKUxhbmRyb2lkL25ldC9OZXR3b3JrOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxsQnlOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylbTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5TmFtZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5ldHdvcmtIYW5kbGUoKUoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvY2tldEZhY3RvcnkoKUxqYXZheC9uZXQvU29ja2V0RmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuQ29ubmVjdGlvbihMamF2YS9uZXQvVVJMOylMamF2YS9uZXQvVVJMQ29ubmVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuQ29ubmVjdGlvbihMamF2YS9uZXQvVVJMO0xqYXZhL25ldC9Qcm94eTspTGphdmEvbmV0L1VSTENvbm5lY3Rpb247IiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9OZXR3b3JrQ2FwYWJpbGl0aWVzIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZXQvTmV0d29ya0NhcGFiaWxpdGllczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmtEb3duc3RyZWFtQmFuZHdpZHRoS2JwcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmtVcHN0cmVhbUJhbmR3aWR0aEticHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNDYXBhYmlsaXR5KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1RyYW5zcG9ydChJKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVF9DQVBBQklMSVRZX0NBUFRJVkVfUE9SVEFMIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVF9DQVBBQklMSVRZX0NCUyIvPgotCQk8ZmllbGQgbmFtZT0iTkVUX0NBUEFCSUxJVFlfRFVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRfQ0FQQUJJTElUWV9FSU1TIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRfQ0FQQUJJTElUWV9GT1JFR1JPVU5EIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVF9DQVBBQklMSVRZX0ZPVEEiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVF9DQVBBQklMSVRZX0lBIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRfQ0FQQUJJTElUWV9JTVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVF9DQVBBQklMSVRZX0lOVEVSTkVUIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRfQ0FQQUJJTElUWV9NTVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVF9DQVBBQklMSVRZX05PVF9DT05HRVNURUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTkVUX0NBUEFCSUxJVFlfTk9UX01FVEVSRUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVF9DQVBBQklMSVRZX05PVF9SRVNUUklDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRfQ0FQQUJJTElUWV9OT1RfUk9BTUlORyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJORVRfQ0FQQUJJTElUWV9OT1RfU1VTUEVOREVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVF9DQVBBQklMSVRZX05PVF9WUE4iLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVF9DQVBBQklMSVRZX1JDUyIvPgotCQk8ZmllbGQgbmFtZT0iTkVUX0NBUEFCSUxJVFlfU1VQTCIvPgotCQk8ZmllbGQgbmFtZT0iTkVUX0NBUEFCSUxJVFlfVFJVU1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iTkVUX0NBUEFCSUxJVFlfVkFMSURBVEVEIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVF9DQVBBQklMSVRZX1dJRklfUDJQIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRfQ0FQQUJJTElUWV9YQ0FQIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFOU1BPUlRfQkxVRVRPT1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFOU1BPUlRfQ0VMTFVMQVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TUE9SVF9FVEhFUk5FVCIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNQT1JUX0xPV1BBTiIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFOU1BPUlRfVlBOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFOU1BPUlRfV0lGSSIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNQT1JUX1dJRklfQVdBUkUiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L05ldHdvcmtJbmZvIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiBzaW5jZT0iMyIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIiByZW1vdmVkPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC9OZXR3b3JrSW5mbzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV0YWlsZWRTdGF0ZSgpTGFuZHJvaWQvbmV0L05ldHdvcmtJbmZvJERldGFpbGVkU3RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFJbmZvKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWFzb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0ZSgpTGFuZHJvaWQvbmV0L05ldHdvcmtJbmZvJFN0YXRlOyIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJ0eXBlKClJIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YnR5cGVOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpSSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXZhaWxhYmxlKClaIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ29ubmVjdGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb25uZWN0ZWRPckNvbm5lY3RpbmcoKVoiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGYWlsb3ZlcigpWiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JvYW1pbmcoKVoiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIgc2luY2U9IjI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvTmV0d29ya0luZm8kRGV0YWlsZWRTdGF0ZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9OZXR3b3JrSW5mbyREZXRhaWxlZFN0YXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL25ldC9OZXR3b3JrSW5mbyREZXRhaWxlZFN0YXRlOyIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSEVOVElDQVRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkJMT0NLRUQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQVElWRV9QT1JUQUxfQ0hFQ0siIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OTkVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05ORUNUSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNDT05ORUNURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0NPTk5FQ1RJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkZBSUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iSURMRSIvPgotCQk8ZmllbGQgbmFtZT0iT0JUQUlOSU5HX0lQQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iU0NBTk5JTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNVU1BFTkRFRCIvPgotCQk8ZmllbGQgbmFtZT0iVkVSSUZZSU5HX1BPT1JfTElOSyIgc2luY2U9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvTmV0d29ya0luZm8kU3RhdGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvTmV0d29ya0luZm8kU3RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvbmV0L05ldHdvcmtJbmZvJFN0YXRlOyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OTkVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05ORUNUSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNDT05ORUNURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0NPTk5FQ1RJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNVU1BFTkRFRCIvPgotCQk8ZmllbGQgbmFtZT0iVU5LTk9XTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L05ldHdvcmtSZXF1ZXN0IiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L05ldHdvcmtSZXF1ZXN0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNDYXBhYmlsaXR5KEkpWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzVHJhbnNwb3J0KEkpWiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvTmV0d29ya1JlcXVlc3QkQnVpbGRlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZENhcGFiaWxpdHkoSSlMYW5kcm9pZC9uZXQvTmV0d29ya1JlcXVlc3QkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRUcmFuc3BvcnRUeXBlKEkpTGFuZHJvaWQvbmV0L05ldHdvcmtSZXF1ZXN0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL25ldC9OZXR3b3JrUmVxdWVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVDYXBhYmlsaXR5KEkpTGFuZHJvaWQvbmV0L05ldHdvcmtSZXF1ZXN0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlVHJhbnNwb3J0VHlwZShJKUxhbmRyb2lkL25ldC9OZXR3b3JrUmVxdWVzdCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5ldHdvcmtTcGVjaWZpZXIoTGFuZHJvaWQvbmV0L05ldHdvcmtTcGVjaWZpZXI7KUxhbmRyb2lkL25ldC9OZXR3b3JrUmVxdWVzdCRCdWlsZGVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmV0d29ya1NwZWNpZmllcihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L05ldHdvcmtSZXF1ZXN0JEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvTmV0d29ya1NwZWNpZmllciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L1BhcnNlRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJyZXNwb25zZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L1Byb3h5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0SG9zdCgpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRQb3J0KClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvc3QoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMamF2YS9sYW5nL1N0cmluZzsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9ydChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9YWV9JTkZPIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9YWV9DSEFOR0VfQUNUSU9OIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvUHJveHlJbmZvIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjIyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC9Vcmk7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkRGlyZWN0UHJveHkoTGphdmEvbGFuZy9TdHJpbmc7SSlMYW5kcm9pZC9uZXQvUHJveHlJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkRGlyZWN0UHJveHkoTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL3V0aWwvTGlzdDspTGFuZHJvaWQvbmV0L1Byb3h5SW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZFBhY1Byb3h5KExhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL25ldC9Qcm94eUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhjbHVzaW9uTGlzdCgpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvc3QoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY0ZpbGVVcmwoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9ydCgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L1Bza0tleU1hbmFnZXIiIHNpbmNlPSIyMSIgcmVtb3ZlZD0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hvb3NlQ2xpZW50S2V5SWRlbnRpdHkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbmV0L1NvY2tldDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hvb3NlQ2xpZW50S2V5SWRlbnRpdHkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmF4L25ldC9zc2wvU1NMRW5naW5lOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaG9vc2VTZXJ2ZXJLZXlJZGVudGl0eUhpbnQoTGphdmEvbmV0L1NvY2tldDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hvb3NlU2VydmVyS2V5SWRlbnRpdHlIaW50KExqYXZheC9uZXQvc3NsL1NTTEVuZ2luZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL25ldC9Tb2NrZXQ7KUxqYXZheC9jcnlwdG8vU2VjcmV0S2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YXgvbmV0L3NzbC9TU0xFbmdpbmU7KUxqYXZheC9jcnlwdG8vU2VjcmV0S2V5OyIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX0lERU5USVRZX0hJTlRfTEVOR1RIX0JZVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfSURFTlRJVFlfTEVOR1RIX0JZVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfS0VZX0xFTkdUSF9CWVRFUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L1JvdXRlSW5mbyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25ldC9JbmV0QWRkcmVzczspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzdGluYXRpb24oKUxhbmRyb2lkL25ldC9JcFByZWZpeDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHYXRld2F5KClMamF2YS9uZXQvSW5ldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZXJmYWNlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RlZmF1bHRSb3V0ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im1hdGNoZXMoTGphdmEvbmV0L0luZXRBZGRyZXNzOylaIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvU1NMQ2VydGlmaWNhdGVTb2NrZXRGYWN0b3J5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmF4L25ldC9zc2wvU1NMU29ja2V0RmFjdG9yeSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdChJKUxqYXZheC9uZXQvU29ja2V0RmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0KElMYW5kcm9pZC9uZXQvU1NMU2Vzc2lvbkNhY2hlOylMamF2YXgvbmV0L3NzbC9TU0xTb2NrZXRGYWN0b3J5OyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIdHRwU29ja2V0RmFjdG9yeShJTGFuZHJvaWQvbmV0L1NTTFNlc3Npb25DYWNoZTspTG9yZy9hcGFjaGUvaHR0cC9jb25uL3NzbC9TU0xTb2NrZXRGYWN0b3J5OyIgc2luY2U9IjgiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc2VjdXJlKElMYW5kcm9pZC9uZXQvU1NMU2Vzc2lvbkNhY2hlOylMamF2YXgvbmV0L3NzbC9TU0xTb2NrZXRGYWN0b3J5OyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROcG5TZWxlY3RlZFByb3RvY29sKExqYXZhL25ldC9Tb2NrZXQ7KVtCIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIb3N0bmFtZShMamF2YS9uZXQvU29ja2V0O0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZXlNYW5hZ2VycyhbTGphdmF4L25ldC9zc2wvS2V5TWFuYWdlcjspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TnBuUHJvdG9jb2xzKFtbQilWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUcnVzdE1hbmFnZXJzKFtMamF2YXgvbmV0L3NzbC9UcnVzdE1hbmFnZXI7KVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZVNlc3Npb25UaWNrZXRzKExqYXZhL25ldC9Tb2NrZXQ7WilWIiBzaW5jZT0iMTciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9TU0xTZXNzaW9uQ2FjaGUiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L1RyYWZmaWNTdGF0cyIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJUaHJlYWRTdGF0c1RhZygpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJUaHJlYWRTdGF0c1VpZCgpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kU2V0VGhyZWFkU3RhdHNUYWcoSSlJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2JpbGVSeEJ5dGVzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9iaWxlUnhQYWNrZXRzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9iaWxlVHhCeXRlcygpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vYmlsZVR4UGFja2V0cygpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRocmVhZFN0YXRzVGFnKClJIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHJlYWRTdGF0c1VpZCgpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG90YWxSeEJ5dGVzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG90YWxSeFBhY2tldHMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3RhbFR4Qnl0ZXMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3RhbFR4UGFja2V0cygpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVpZFJ4Qnl0ZXMoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VWlkUnhQYWNrZXRzKEkpSiIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VWlkVGNwUnhCeXRlcyhJKUoiIHNpbmNlPSIxMiIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVaWRUY3BSeFNlZ21lbnRzKEkpSiIgc2luY2U9IjEyIiBkZXByZWNhdGVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVpZFRjcFR4Qnl0ZXMoSSlKIiBzaW5jZT0iMTIiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VWlkVGNwVHhTZWdtZW50cyhJKUoiIHNpbmNlPSIxMiIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVaWRUeEJ5dGVzKEkpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVpZFR4UGFja2V0cyhJKUoiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVpZFVkcFJ4Qnl0ZXMoSSlKIiBzaW5jZT0iMTIiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VWlkVWRwUnhQYWNrZXRzKEkpSiIgc2luY2U9IjEyIiBkZXByZWNhdGVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVpZFVkcFR4Qnl0ZXMoSSlKIiBzaW5jZT0iMTIiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VWlkVWRwVHhQYWNrZXRzKEkpSiIgc2luY2U9IjEyIiBkZXByZWNhdGVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImluY3JlbWVudE9wZXJhdGlvbkNvdW50KEkpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5jcmVtZW50T3BlcmF0aW9uQ291bnQoSUkpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGhyZWFkU3RhdHNUYWcoSSlWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaHJlYWRTdGF0c1VpZChJKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InRhZ0RhdGFncmFtU29ja2V0KExqYXZhL25ldC9EYXRhZ3JhbVNvY2tldDspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGFnRmlsZURlc2NyaXB0b3IoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InRhZ1NvY2tldChMamF2YS9uZXQvU29ja2V0OylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnRhZ0RhdGFncmFtU29ja2V0KExqYXZhL25ldC9EYXRhZ3JhbVNvY2tldDspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW50YWdGaWxlRGVzY3JpcHRvcihMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW50YWdTb2NrZXQoTGphdmEvbmV0L1NvY2tldDspViIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVTlNVUFBPUlRFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L1VyaSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkVXBvbigpTGFuZHJvaWQvbmV0L1VyaSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMYW5kcm9pZC9uZXQvVXJpOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjb2RlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmNvZGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuY29kZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbUZpbGUoTGphdmEvaW8vRmlsZTspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tUGFydHMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0aG9yaXR5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb29sZWFuUXVlcnlQYXJhbWV0ZXIoTGphdmEvbGFuZy9TdHJpbmc7WilaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGVkQXV0aG9yaXR5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGVkRnJhZ21lbnQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY29kZWRQYXRoKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGVkUXVlcnkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY29kZWRTY2hlbWVTcGVjaWZpY1BhcnQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY29kZWRVc2VySW5mbygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJhZ21lbnQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvc3QoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhc3RQYXRoU2VnbWVudCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGF0aCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGF0aFNlZ21lbnRzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFF1ZXJ5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWVyeVBhcmFtZXRlcihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVlcnlQYXJhbWV0ZXJOYW1lcygpTGphdmEvdXRpbC9TZXQ7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWVyeVBhcmFtZXRlcnMoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2hlbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjaGVtZVNwZWNpZmljUGFydCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlckluZm8oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWJzb2x1dGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0hpZXJhcmNoaWNhbCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT3BhcXVlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZWxhdGl2ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5vcm1hbGl6ZVNjaGVtZSgpTGFuZHJvaWQvbmV0L1VyaTsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhBcHBlbmRlZFBhdGgoTGFuZHJvaWQvbmV0L1VyaTtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVRvUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDtMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTVBUWSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L1VyaSRCdWlsZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRFbmNvZGVkUGF0aChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZFBhdGgoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9VcmkkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRRdWVyeVBhcmFtZXRlcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImF1dGhvcml0eShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyUXVlcnkoKUxhbmRyb2lkL25ldC9VcmkkQnVpbGRlcjsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImVuY29kZWRBdXRob3JpdHkoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9VcmkkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmNvZGVkRnJhZ21lbnQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9VcmkkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmNvZGVkT3BhcXVlUGFydChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuY29kZWRQYXRoKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5jb2RlZFF1ZXJ5KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJhZ21lbnQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9VcmkkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGFxdWVQYXJ0KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGF0aChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2NoZW1lKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvVXJsUXVlcnlTYW5pdGl6ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFNhbml0aXplZEVudHJ5KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVIZXhEaWdpdChDKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxCdXROdWxBbmRBbmdsZUJyYWNrZXRzTGVnYWwoKUxhbmRyb2lkL25ldC9VcmxRdWVyeVNhbml0aXplciRWYWx1ZVNhbml0aXplcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxCdXROdWxMZWdhbCgpTGFuZHJvaWQvbmV0L1VybFF1ZXJ5U2FuaXRpemVyJFZhbHVlU2FuaXRpemVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbEJ1dFdoaXRlc3BhY2VMZWdhbCgpTGFuZHJvaWQvbmV0L1VybFF1ZXJ5U2FuaXRpemVyJFZhbHVlU2FuaXRpemVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbElsbGVnYWwoKUxhbmRyb2lkL25ldC9VcmxRdWVyeVNhbml0aXplciRWYWx1ZVNhbml0aXplcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxvd1VucmVnaXN0ZXJlZFBhcmFtYXRlcnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbXBBbmRTcGFjZUxlZ2FsKClMYW5kcm9pZC9uZXQvVXJsUXVlcnlTYW5pdGl6ZXIkVmFsdWVTYW5pdGl6ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW1wTGVnYWwoKUxhbmRyb2lkL25ldC9VcmxRdWVyeVNhbml0aXplciRWYWx1ZVNhbml0aXplcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFZmZlY3RpdmVWYWx1ZVNhbml0aXplcihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VybFF1ZXJ5U2FuaXRpemVyJFZhbHVlU2FuaXRpemVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtZXRlckxpc3QoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXJTZXQoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWZlckZpcnN0UmVwZWF0ZWRQYXJhbWV0ZXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGFjZUxlZ2FsKClMYW5kcm9pZC9uZXQvVXJsUXVlcnlTYW5pdGl6ZXIkVmFsdWVTYW5pdGl6ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5yZWdpc3RlcmVkUGFyYW1ldGVyVmFsdWVTYW5pdGl6ZXIoKUxhbmRyb2lkL25ldC9VcmxRdWVyeVNhbml0aXplciRWYWx1ZVNhbml0aXplcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmxBbmRTcGFjZUxlZ2FsKClMYW5kcm9pZC9uZXQvVXJsUXVlcnlTYW5pdGl6ZXIkVmFsdWVTYW5pdGl6ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXJsTGVnYWwoKUxhbmRyb2lkL25ldC9VcmxRdWVyeVNhbml0aXplciRWYWx1ZVNhbml0aXplcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWVTYW5pdGl6ZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9VcmxRdWVyeVNhbml0aXplciRWYWx1ZVNhbml0aXplcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNQYXJhbWV0ZXIoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0hleERpZ2l0KEMpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlRW50cnkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZVF1ZXJ5KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VVcmwoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlclBhcmFtZXRlcihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9uZXQvVXJsUXVlcnlTYW5pdGl6ZXIkVmFsdWVTYW5pdGl6ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlclBhcmFtZXRlcnMoW0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL25ldC9VcmxRdWVyeVNhbml0aXplciRWYWx1ZVNhbml0aXplcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFsbG93VW5yZWdpc3RlcmVkUGFyYW1hdGVycyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmVmZXJGaXJzdFJlcGVhdGVkUGFyYW1ldGVyKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVucmVnaXN0ZXJlZFBhcmFtZXRlclZhbHVlU2FuaXRpemVyKExhbmRyb2lkL25ldC9VcmxRdWVyeVNhbml0aXplciRWYWx1ZVNhbml0aXplcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InVuZXNjYXBlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9VcmxRdWVyeVNhbml0aXplciRJbGxlZ2FsQ2hhcmFjdGVyVmFsdWVTYW5pdGl6ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL25ldC9VcmxRdWVyeVNhbml0aXplciRWYWx1ZVNhbml0aXplciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFMTF9CVVRfTlVMX0FORF9BTkdMRV9CUkFDS0VUU19MRUdBTCIvPgotCQk8ZmllbGQgbmFtZT0iQUxMX0JVVF9OVUxfTEVHQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkFMTF9CVVRfV0hJVEVTUEFDRV9MRUdBTCIvPgotCQk8ZmllbGQgbmFtZT0iQUxMX0lMTEVHQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkFMTF9PSyIvPgotCQk8ZmllbGQgbmFtZT0iQUxMX1dISVRFU1BBQ0VfT0siLz4KLQkJPGZpZWxkIG5hbWU9IkFNUF9BTkRfU1BBQ0VfTEVHQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkFNUF9MRUdBTCIvPgotCQk8ZmllbGQgbmFtZT0iQU1QX09LIi8+Ci0JCTxmaWVsZCBuYW1lPSJEUVVPVEVfT0siLz4KLQkJPGZpZWxkIG5hbWU9IkdUX09LIi8+Ci0JCTxmaWVsZCBuYW1lPSJMVF9PSyIvPgotCQk8ZmllbGQgbmFtZT0iTk9OXzdfQklUX0FTQ0lJX09LIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVUxfT0siLz4KLQkJPGZpZWxkIG5hbWU9Ik9USEVSX1dISVRFU1BBQ0VfT0siLz4KLQkJPGZpZWxkIG5hbWU9IlBDVF9PSyIvPgotCQk8ZmllbGQgbmFtZT0iU0NSSVBUX1VSTF9PSyIvPgotCQk8ZmllbGQgbmFtZT0iU1BBQ0VfTEVHQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlNQQUNFX09LIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUVVPVEVfT0siLz4KLQkJPGZpZWxkIG5hbWU9IlVSTF9BTkRfU1BBQ0VfTEVHQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlVSTF9MRUdBTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L1VybFF1ZXJ5U2FuaXRpemVyJFBhcmFtZXRlclZhbHVlUGFpciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC9VcmxRdWVyeVNhbml0aXplcjtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8ZmllbGQgbmFtZT0ibVBhcmFtZXRlciIvPgotCQk8ZmllbGQgbmFtZT0ibVZhbHVlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvVXJsUXVlcnlTYW5pdGl6ZXIkVmFsdWVTYW5pdGl6ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InNhbml0aXplKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9WcG5TZXJ2aWNlIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9TZXJ2aWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXZva2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmVwYXJlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJvdGVjdChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm90ZWN0KExqYXZhL25ldC9EYXRhZ3JhbVNvY2tldDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InByb3RlY3QoTGphdmEvbmV0L1NvY2tldDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVuZGVybHlpbmdOZXR3b3JrcyhbTGFuZHJvaWQvbmV0L05ldHdvcms7KVoiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9JTlRFUkZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfTUVUQV9EQVRBX1NVUFBPUlRTX0FMV0FZU19PTiIgc2luY2U9IjI3Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvVnBuU2VydmljZSRCdWlsZGVyIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC9WcG5TZXJ2aWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQWRkcmVzcyhMamF2YS9sYW5nL1N0cmluZztJKUxhbmRyb2lkL25ldC9WcG5TZXJ2aWNlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQWRkcmVzcyhMamF2YS9uZXQvSW5ldEFkZHJlc3M7SSlMYW5kcm9pZC9uZXQvVnBuU2VydmljZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFsbG93ZWRBcHBsaWNhdGlvbihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1ZwblNlcnZpY2UkQnVpbGRlcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZERpc2FsbG93ZWRBcHBsaWNhdGlvbihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1ZwblNlcnZpY2UkQnVpbGRlcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZERuc1NlcnZlcihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1ZwblNlcnZpY2UkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGREbnNTZXJ2ZXIoTGphdmEvbmV0L0luZXRBZGRyZXNzOylMYW5kcm9pZC9uZXQvVnBuU2VydmljZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFJvdXRlKExqYXZhL2xhbmcvU3RyaW5nO0kpTGFuZHJvaWQvbmV0L1ZwblNlcnZpY2UkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSb3V0ZShMamF2YS9uZXQvSW5ldEFkZHJlc3M7SSlMYW5kcm9pZC9uZXQvVnBuU2VydmljZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFNlYXJjaERvbWFpbihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1ZwblNlcnZpY2UkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxvd0J5cGFzcygpTGFuZHJvaWQvbmV0L1ZwblNlcnZpY2UkQnVpbGRlcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFsbG93RmFtaWx5KEkpTGFuZHJvaWQvbmV0L1ZwblNlcnZpY2UkQnVpbGRlcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImVzdGFibGlzaCgpTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmxvY2tpbmcoWilMYW5kcm9pZC9uZXQvVnBuU2VydmljZSRCdWlsZGVyOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29uZmlndXJlSW50ZW50KExhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylMYW5kcm9pZC9uZXQvVnBuU2VydmljZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE10dShJKUxhbmRyb2lkL25ldC9WcG5TZXJ2aWNlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2Vzc2lvbihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1ZwblNlcnZpY2UkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVbmRlcmx5aW5nTmV0d29ya3MoW0xhbmRyb2lkL25ldC9OZXR3b3JrOylMYW5kcm9pZC9uZXQvVnBuU2VydmljZSRCdWlsZGVyOyIgc2luY2U9IjIyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvaHR0cC9BbmRyb2lkSHR0cENsaWVudCIgc2luY2U9IjgiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9IdHRwQ2xpZW50Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNhYmxlQ3VybExvZ2dpbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmFibGVDdXJsTG9nZ2luZyhMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wcmVzc2VkRW50aXR5KFtCTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7KUxvcmcvYXBhY2hlL2h0dHAvZW50aXR5L0Fic3RyYWN0SHR0cEVudGl0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5HemlwU2l6ZShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVuZ3ppcHBlZENvbnRlbnQoTG9yZy9hcGFjaGUvaHR0cC9IdHRwRW50aXR5OylMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtb2RpZnlSZXF1ZXN0VG9BY2NlcHRHemlwUmVzcG9uc2UoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvaHR0cC9BbmRyb2lkSHR0cENsaWVudDsiIGRlcHJlY2F0ZWQ9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC9uZXQvaHR0cC9BbmRyb2lkSHR0cENsaWVudDsiIGRlcHJlY2F0ZWQ9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VEYXRlKExqYXZhL2xhbmcvU3RyaW5nOylKIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NZTkNfTUlOX0daSVBfQllURVMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9odHRwL0h0dHBSZXNwb25zZUNhY2hlIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25ldC9SZXNwb25zZUNhY2hlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVsZXRlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmx1c2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaXRDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbGxlZCgpTGFuZHJvaWQvbmV0L2h0dHAvSHR0cFJlc3BvbnNlQ2FjaGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV0d29ya0NvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVxdWVzdENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zdGFsbChMamF2YS9pby9GaWxlO0opTGFuZHJvaWQvbmV0L2h0dHAvSHR0cFJlc3BvbnNlQ2FjaGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4U2l6ZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9InNpemUoKUoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9odHRwL1NzbENlcnRpZmljYXRlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvRGF0ZTtMamF2YS91dGlsL0RhdGU7KVYiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElzc3VlZEJ5KClMYW5kcm9pZC9uZXQvaHR0cC9Tc2xDZXJ0aWZpY2F0ZSRETmFtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJc3N1ZWRUbygpTGFuZHJvaWQvbmV0L2h0dHAvU3NsQ2VydGlmaWNhdGUkRE5hbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsaWROb3RBZnRlcigpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbGlkTm90QWZ0ZXJEYXRlKClMamF2YS91dGlsL0RhdGU7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbGlkTm90QmVmb3JlKClMamF2YS9sYW5nL1N0cmluZzsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsaWROb3RCZWZvcmVEYXRlKClMamF2YS91dGlsL0RhdGU7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFg1MDlDZXJ0aWZpY2F0ZSgpTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7IiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN0b3JlU3RhdGUoTGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9uZXQvaHR0cC9Tc2xDZXJ0aWZpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzYXZlU3RhdGUoTGFuZHJvaWQvbmV0L2h0dHAvU3NsQ2VydGlmaWNhdGU7KUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9odHRwL1NzbENlcnRpZmljYXRlJEROYW1lIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L2h0dHAvU3NsQ2VydGlmaWNhdGU7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9OYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvaHR0cC9Tc2xFcnJvciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMYW5kcm9pZC9uZXQvaHR0cC9Tc2xDZXJ0aWZpY2F0ZTspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxhbmRyb2lkL25ldC9odHRwL1NzbENlcnRpZmljYXRlO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEVycm9yKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlcnRpZmljYXRlKClMYW5kcm9pZC9uZXQvaHR0cC9Tc2xDZXJ0aWZpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmltYXJ5RXJyb3IoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmwoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRXJyb3IoSSlaIi8+Ci0JCTxmaWVsZCBuYW1lPSJTU0xfREFURV9JTlZBTElEIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlNTTF9FWFBJUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTU0xfSURNSVNNQVRDSCIvPgotCQk8ZmllbGQgbmFtZT0iU1NMX0lOVkFMSUQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iU1NMX01BWF9FUlJPUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNTTF9OT1RZRVRWQUxJRCIvPgotCQk8ZmllbGQgbmFtZT0iU1NMX1VOVFJVU1RFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L2h0dHAvWDUwOVRydXN0TWFuYWdlckV4dGVuc2lvbnMiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmF4L25ldC9zc2wvWDUwOVRydXN0TWFuYWdlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrU2VydmVyVHJ1c3RlZChbTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NhbWVUcnVzdENvbmZpZ3VyYXRpb24oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVXNlckFkZGVkQ2VydGlmaWNhdGUoTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7KVoiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L25zZC9Oc2RNYW5hZ2VyIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzY292ZXJTZXJ2aWNlcyhMamF2YS9sYW5nL1N0cmluZztJTGFuZHJvaWQvbmV0L25zZC9Oc2RNYW5hZ2VyJERpc2NvdmVyeUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJTZXJ2aWNlKExhbmRyb2lkL25ldC9uc2QvTnNkU2VydmljZUluZm87SUxhbmRyb2lkL25ldC9uc2QvTnNkTWFuYWdlciRSZWdpc3RyYXRpb25MaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmVTZXJ2aWNlKExhbmRyb2lkL25ldC9uc2QvTnNkU2VydmljZUluZm87TGFuZHJvaWQvbmV0L25zZC9Oc2RNYW5hZ2VyJFJlc29sdmVMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BTZXJ2aWNlRGlzY292ZXJ5KExhbmRyb2lkL25ldC9uc2QvTnNkTWFuYWdlciREaXNjb3ZlcnlMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJTZXJ2aWNlKExhbmRyb2lkL25ldC9uc2QvTnNkTWFuYWdlciRSZWdpc3RyYXRpb25MaXN0ZW5lcjspViIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX05TRF9TVEFURV9DSEFOR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9OU0RfU1RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkZBSUxVUkVfQUxSRUFEWV9BQ1RJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkZBSUxVUkVfSU5URVJOQUxfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkZBSUxVUkVfTUFYX0xJTUlUIi8+Ci0JCTxmaWVsZCBuYW1lPSJOU0RfU1RBVEVfRElTQUJMRUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5TRF9TVEFURV9FTkFCTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UT0NPTF9ETlNfU0QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9uc2QvTnNkTWFuYWdlciREaXNjb3ZlcnlMaXN0ZW5lciIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGlzY292ZXJ5U3RhcnRlZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGlzY292ZXJ5U3RvcHBlZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2VydmljZUZvdW5kKExhbmRyb2lkL25ldC9uc2QvTnNkU2VydmljZUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlcnZpY2VMb3N0KExhbmRyb2lkL25ldC9uc2QvTnNkU2VydmljZUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXJ0RGlzY292ZXJ5RmFpbGVkKExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RvcERpc2NvdmVyeUZhaWxlZChMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9uc2QvTnNkTWFuYWdlciRSZWdpc3RyYXRpb25MaXN0ZW5lciIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVnaXN0cmF0aW9uRmFpbGVkKExhbmRyb2lkL25ldC9uc2QvTnNkU2VydmljZUluZm87SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXJ2aWNlUmVnaXN0ZXJlZChMYW5kcm9pZC9uZXQvbnNkL05zZFNlcnZpY2VJbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXJ2aWNlVW5yZWdpc3RlcmVkKExhbmRyb2lkL25ldC9uc2QvTnNkU2VydmljZUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVucmVnaXN0cmF0aW9uRmFpbGVkKExhbmRyb2lkL25ldC9uc2QvTnNkU2VydmljZUluZm87SSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvbnNkL05zZE1hbmFnZXIkUmVzb2x2ZUxpc3RlbmVyIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXNvbHZlRmFpbGVkKExhbmRyb2lkL25ldC9uc2QvTnNkU2VydmljZUluZm87SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXJ2aWNlUmVzb2x2ZWQoTGFuZHJvaWQvbmV0L25zZC9Oc2RTZXJ2aWNlSW5mbzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L25zZC9Oc2RTZXJ2aWNlSW5mbyIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVzKClMamF2YS91dGlsL01hcDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvc3QoKUxqYXZhL25ldC9JbmV0QWRkcmVzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3J0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VydmljZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZpY2VUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBdHRyaWJ1dGUoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF0dHJpYnV0ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG9zdChMamF2YS9uZXQvSW5ldEFkZHJlc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb3J0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlcnZpY2VOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VydmljZVR5cGUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9ydHAvQXVkaW9Db2RlYyIgc2luY2U9IjEyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2RlYyhJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9ydHAvQXVkaW9Db2RlYzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2RlY3MoKVtMYW5kcm9pZC9uZXQvcnRwL0F1ZGlvQ29kZWM7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdTTSIvPgotCQk8ZmllbGQgbmFtZT0iR1NNX0VGUiIvPgotCQk8ZmllbGQgbmFtZT0iUENNQSIvPgotCQk8ZmllbGQgbmFtZT0iUENNVSIvPgotCQk8ZmllbGQgbmFtZT0iZm10cCIvPgotCQk8ZmllbGQgbmFtZT0icnRwbWFwIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0eXBlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvcnRwL0F1ZGlvR3JvdXAiIHNpbmNlPSIxMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJlYW1zKClbTGFuZHJvaWQvbmV0L3J0cC9BdWRpb1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kRHRtZihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNb2RlKEkpViIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9FQ0hPX1NVUFBSRVNTSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX01VVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX05PUk1BTCIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9PTl9IT0xEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvcnRwL0F1ZGlvU3RyZWFtIiBzaW5jZT0iMTIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL25ldC9ydHAvUnRwU3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25ldC9JbmV0QWRkcmVzczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvZGVjKClMYW5kcm9pZC9uZXQvcnRwL0F1ZGlvQ29kZWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHRtZlR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcm91cCgpTGFuZHJvaWQvbmV0L3J0cC9BdWRpb0dyb3VwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImpvaW4oTGFuZHJvaWQvbmV0L3J0cC9BdWRpb0dyb3VwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29kZWMoTGFuZHJvaWQvbmV0L3J0cC9BdWRpb0NvZGVjOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHRtZlR5cGUoSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvcnRwL1J0cFN0cmVhbSIgc2luY2U9IjEyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmV0L0luZXRBZGRyZXNzOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NvY2lhdGUoTGphdmEvbmV0L0luZXRBZGRyZXNzO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsQWRkcmVzcygpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsUG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZW1vdGVBZGRyZXNzKClMamF2YS9uZXQvSW5ldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVtb3RlUG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQnVzeSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNb2RlKEkpViIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9OT1JNQUwiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfUkVDRUlWRV9PTkxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX1NFTkRfT05MWSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3NpcC9TaXBBdWRpb0NhbGwiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvbmV0L3NpcC9TaXBQcm9maWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYW5zd2VyQ2FsbChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdHRhY2hDYWxsKExhbmRyb2lkL25ldC9zaXAvU2lwU2Vzc2lvbjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGludWVDYWxsKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZENhbGwoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbFByb2ZpbGUoKUxhbmRyb2lkL25ldC9zaXAvU2lwUHJvZmlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZWVyUHJvZmlsZSgpTGFuZHJvaWQvbmV0L3NpcC9TaXBQcm9maWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaG9sZENhbGwoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbkNhbGwoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc011dGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPbkhvbGQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYWtlQ2FsbChMYW5kcm9pZC9uZXQvc2lwL1NpcFByb2ZpbGU7TGFuZHJvaWQvbmV0L3NpcC9TaXBTZXNzaW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmREdG1mKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmREdG1mKElMYW5kcm9pZC9vcy9NZXNzYWdlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGlzdGVuZXIoTGFuZHJvaWQvbmV0L3NpcC9TaXBBdWRpb0NhbGwkTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaXN0ZW5lcihMYW5kcm9pZC9uZXQvc2lwL1NpcEF1ZGlvQ2FsbCRMaXN0ZW5lcjtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTcGVha2VyTW9kZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEF1ZGlvKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9nZ2xlTXV0ZSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3NpcC9TaXBBdWRpb0NhbGwkTGlzdGVuZXIiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FsbEJ1c3koTGFuZHJvaWQvbmV0L3NpcC9TaXBBdWRpb0NhbGw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbGxFbmRlZChMYW5kcm9pZC9uZXQvc2lwL1NpcEF1ZGlvQ2FsbDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FsbEVzdGFibGlzaGVkKExhbmRyb2lkL25ldC9zaXAvU2lwQXVkaW9DYWxsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYWxsSGVsZChMYW5kcm9pZC9uZXQvc2lwL1NpcEF1ZGlvQ2FsbDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FsbGluZyhMYW5kcm9pZC9uZXQvc2lwL1NpcEF1ZGlvQ2FsbDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2hhbmdlZChMYW5kcm9pZC9uZXQvc2lwL1NpcEF1ZGlvQ2FsbDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXJyb3IoTGFuZHJvaWQvbmV0L3NpcC9TaXBBdWRpb0NhbGw7SUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZWFkeVRvQ2FsbChMYW5kcm9pZC9uZXQvc2lwL1NpcEF1ZGlvQ2FsbDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmluZ2luZyhMYW5kcm9pZC9uZXQvc2lwL1NpcEF1ZGlvQ2FsbDtMYW5kcm9pZC9uZXQvc2lwL1NpcFByb2ZpbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJpbmdpbmdCYWNrKExhbmRyb2lkL25ldC9zaXAvU2lwQXVkaW9DYWxsOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvc2lwL1NpcEVycm9yQ29kZSIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkNMSUVOVF9FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JPU1NfRE9NQUlOX0FVVEhFTlRJQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBX0NPTk5FQ1RJT05fTE9TVCIvPgotCQk8ZmllbGQgbmFtZT0iSU5WQUxJRF9DUkVERU5USUFMUyIvPgotCQk8ZmllbGQgbmFtZT0iSU5WQUxJRF9SRU1PVEVfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTl9QUk9HUkVTUyIvPgotCQk8ZmllbGQgbmFtZT0iTk9fRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlBFRVJfTk9UX1JFQUNIQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVkVSX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWRVJfVU5SRUFDSEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNPQ0tFVF9FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iVElNRV9PVVQiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TQUNUSU9OX1RFUk1JTlRFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3NpcC9TaXBFeGNlcHRpb24iIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3NpcC9TaXBNYW5hZ2VyIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTaXBTZXNzaW9uKExhbmRyb2lkL25ldC9zaXAvU2lwUHJvZmlsZTtMYW5kcm9pZC9uZXQvc2lwL1NpcFNlc3Npb24kTGlzdGVuZXI7KUxhbmRyb2lkL25ldC9zaXAvU2lwU2Vzc2lvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxsSWQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9mZmVyU2Vzc2lvbkRlc2NyaXB0aW9uKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXNzaW9uRm9yKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMYW5kcm9pZC9uZXQvc2lwL1NpcFNlc3Npb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBcGlTdXBwb3J0ZWQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbmNvbWluZ0NhbGxJbnRlbnQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc09wZW5lZChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVnaXN0ZXJlZChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2lwV2lmaU9ubHkoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWb2lwU3VwcG9ydGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im1ha2VBdWRpb0NhbGwoTGFuZHJvaWQvbmV0L3NpcC9TaXBQcm9maWxlO0xhbmRyb2lkL25ldC9zaXAvU2lwUHJvZmlsZTtMYW5kcm9pZC9uZXQvc2lwL1NpcEF1ZGlvQ2FsbCRMaXN0ZW5lcjtJKUxhbmRyb2lkL25ldC9zaXAvU2lwQXVkaW9DYWxsOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1ha2VBdWRpb0NhbGwoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvbmV0L3NpcC9TaXBBdWRpb0NhbGwkTGlzdGVuZXI7SSlMYW5kcm9pZC9uZXQvc2lwL1NpcEF1ZGlvQ2FsbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxhbmRyb2lkL25ldC9zaXAvU2lwTWFuYWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuKExhbmRyb2lkL25ldC9zaXAvU2lwUHJvZmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW4oTGFuZHJvaWQvbmV0L3NpcC9TaXBQcm9maWxlO0xhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50O0xhbmRyb2lkL25ldC9zaXAvU2lwUmVnaXN0cmF0aW9uTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlcihMYW5kcm9pZC9uZXQvc2lwL1NpcFByb2ZpbGU7SUxhbmRyb2lkL25ldC9zaXAvU2lwUmVnaXN0cmF0aW9uTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWdpc3RyYXRpb25MaXN0ZW5lcihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9uZXQvc2lwL1NpcFJlZ2lzdHJhdGlvbkxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idGFrZUF1ZGlvQ2FsbChMYW5kcm9pZC9jb250ZW50L0ludGVudDtMYW5kcm9pZC9uZXQvc2lwL1NpcEF1ZGlvQ2FsbCRMaXN0ZW5lcjspTGFuZHJvaWQvbmV0L3NpcC9TaXBBdWRpb0NhbGw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlcihMYW5kcm9pZC9uZXQvc2lwL1NpcFByb2ZpbGU7TGFuZHJvaWQvbmV0L3NpcC9TaXBSZWdpc3RyYXRpb25MaXN0ZW5lcjspViIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0FMTF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfT0ZGRVJfU0QiLz4KLQkJPGZpZWxkIG5hbWU9IklOQ09NSU5HX0NBTExfUkVTVUxUX0NPREUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9zaXAvU2lwUHJvZmlsZSIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0aFVzZXJOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1dG9SZWdpc3RyYXRpb24oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFzc3dvcmQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvcnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9maWxlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdG9jb2woKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3h5QWRkcmVzcygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VuZEtlZXBBbGl2ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpcERvbWFpbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXJpU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvc2lwL1NpcFByb2ZpbGUkQnVpbGRlciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC9zaXAvU2lwUHJvZmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9uZXQvc2lwL1NpcFByb2ZpbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0aFVzZXJOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvc2lwL1NpcFByb2ZpbGUkQnVpbGRlcjsiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dG9SZWdpc3RyYXRpb24oWilMYW5kcm9pZC9uZXQvc2lwL1NpcFByb2ZpbGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaXNwbGF5TmFtZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L3NpcC9TaXBQcm9maWxlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3V0Ym91bmRQcm94eShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L3NpcC9TaXBQcm9maWxlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFzc3dvcmQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9zaXAvU2lwUHJvZmlsZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvcnQoSSlMYW5kcm9pZC9uZXQvc2lwL1NpcFByb2ZpbGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9maWxlTmFtZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L3NpcC9TaXBQcm9maWxlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvdG9jb2woTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9zaXAvU2lwUHJvZmlsZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbmRLZWVwQWxpdmUoWilMYW5kcm9pZC9uZXQvc2lwL1NpcFByb2ZpbGUkQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9zaXAvU2lwUmVnaXN0cmF0aW9uTGlzdGVuZXIiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVnaXN0ZXJpbmcoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlZ2lzdHJhdGlvbkRvbmUoTGphdmEvbGFuZy9TdHJpbmc7SilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZWdpc3RyYXRpb25GYWlsZWQoTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvc2lwL1NpcFNlc3Npb24iIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFuc3dlckNhbGwoTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hhbmdlQ2FsbChMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRDYWxsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FsbElkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbElwKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbFByb2ZpbGUoKUxhbmRyb2lkL25ldC9zaXAvU2lwUHJvZmlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZWVyUHJvZmlsZSgpTGFuZHJvaWQvbmV0L3NpcC9TaXBQcm9maWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbkNhbGwoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYWtlQ2FsbChMYW5kcm9pZC9uZXQvc2lwL1NpcFByb2ZpbGU7TGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGlzdGVuZXIoTGFuZHJvaWQvbmV0L3NpcC9TaXBTZXNzaW9uJExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlcigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3NpcC9TaXBTZXNzaW9uJExpc3RlbmVyIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbGxCdXN5KExhbmRyb2lkL25ldC9zaXAvU2lwU2Vzc2lvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FsbENoYW5nZUZhaWxlZChMYW5kcm9pZC9uZXQvc2lwL1NpcFNlc3Npb247SUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYWxsRW5kZWQoTGFuZHJvaWQvbmV0L3NpcC9TaXBTZXNzaW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYWxsRXN0YWJsaXNoZWQoTGFuZHJvaWQvbmV0L3NpcC9TaXBTZXNzaW9uO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYWxsaW5nKExhbmRyb2lkL25ldC9zaXAvU2lwU2Vzc2lvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXJyb3IoTGFuZHJvaWQvbmV0L3NpcC9TaXBTZXNzaW9uO0lMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVnaXN0ZXJpbmcoTGFuZHJvaWQvbmV0L3NpcC9TaXBTZXNzaW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZWdpc3RyYXRpb25Eb25lKExhbmRyb2lkL25ldC9zaXAvU2lwU2Vzc2lvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlZ2lzdHJhdGlvbkZhaWxlZChMYW5kcm9pZC9uZXQvc2lwL1NpcFNlc3Npb247SUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZWdpc3RyYXRpb25UaW1lb3V0KExhbmRyb2lkL25ldC9zaXAvU2lwU2Vzc2lvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmluZ2luZyhMYW5kcm9pZC9uZXQvc2lwL1NpcFNlc3Npb247TGFuZHJvaWQvbmV0L3NpcC9TaXBQcm9maWxlO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SaW5naW5nQmFjayhMYW5kcm9pZC9uZXQvc2lwL1NpcFNlc3Npb247KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC9zaXAvU2lwU2Vzc2lvbiRTdGF0ZSIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkRFUkVHSVNURVJJTkciLz4KLQkJPGZpZWxkIG5hbWU9IklOQ09NSU5HX0NBTEwiLz4KLQkJPGZpZWxkIG5hbWU9IklOQ09NSU5HX0NBTExfQU5TV0VSSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTl9DQUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1RfREVGSU5FRCIvPgotCQk8ZmllbGQgbmFtZT0iT1VUR09JTkdfQ0FMTCIvPgotCQk8ZmllbGQgbmFtZT0iT1VUR09JTkdfQ0FMTF9DQU5DRUxJTkciLz4KLQkJPGZpZWxkIG5hbWU9Ik9VVEdPSU5HX0NBTExfUklOR19CQUNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSU5HSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFEWV9UT19DQUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUdJU1RFUklORyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvU2NhblJlc3VsdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzODAyMTFtY1Jlc3BvbmRlcigpWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQYXNzcG9pbnROZXR3b3JrKClaIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkJTU0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX1dJRFRIXzE2ME1IWiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX1dJRFRIXzIwTUhaIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU5ORUxfV0lEVEhfNDBNSFoiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBTk5FTF9XSURUSF84ME1IWiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFOTkVMX1dJRFRIXzgwTUhaX1BMVVNfTUhaIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNTSUQiLz4KLQkJPGZpZWxkIG5hbWU9ImNhcGFiaWxpdGllcyIvPgotCQk8ZmllbGQgbmFtZT0iY2VudGVyRnJlcTAiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iY2VudGVyRnJlcTEiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iY2hhbm5lbFdpZHRoIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9ImZyZXF1ZW5jeSIvPgotCQk8ZmllbGQgbmFtZT0ibGV2ZWwiLz4KLQkJPGZpZWxkIG5hbWU9Im9wZXJhdG9yRnJpZW5kbHlOYW1lIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9InRpbWVzdGFtcCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ2ZW51ZU5hbWUiIHNpbmNlPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvU3VwcGxpY2FudFN0YXRlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmFsaWRTdGF0ZShMYW5kcm9pZC9uZXQvd2lmaS9TdXBwbGljYW50U3RhdGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvd2lmaS9TdXBwbGljYW50U3RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvbmV0L3dpZmkvU3VwcGxpY2FudFN0YXRlOyIvPgotCQk8ZmllbGQgbmFtZT0iQVNTT0NJQVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iQVNTT0NJQVRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkFVVEhFTlRJQ0FUSU5HIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBMRVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iRElTQ09OTkVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJET1JNQU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1VSX1dBWV9IQU5EU0hBS0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdST1VQX0hBTkRTSEFLRSIvPgotCQk8ZmllbGQgbmFtZT0iSU5BQ1RJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSRkFDRV9ESVNBQkxFRCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlZBTElEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0FOTklORyIvPgotCQk8ZmllbGQgbmFtZT0iVU5JTklUSUFMSVpFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvV2lmaUNvbmZpZ3VyYXRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIdHRwUHJveHkoKUxhbmRyb2lkL25ldC9Qcm94eUluZm87IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Bhc3Nwb2ludCgpWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SHR0cFByb3h5KExhbmRyb2lkL25ldC9Qcm94eUluZm87KVYiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQlNTSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkZRRE4iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iU1NJRCIvPgotCQk8ZmllbGQgbmFtZT0iYWxsb3dlZEF1dGhBbGdvcml0aG1zIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbGxvd2VkR3JvdXBDaXBoZXJzIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbGxvd2VkS2V5TWFuYWdlbWVudCIvPgotCQk8ZmllbGQgbmFtZT0iYWxsb3dlZFBhaXJ3aXNlQ2lwaGVycyIvPgotCQk8ZmllbGQgbmFtZT0iYWxsb3dlZFByb3RvY29scyIvPgotCQk8ZmllbGQgbmFtZT0iZW50ZXJwcmlzZUNvbmZpZyIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJoaWRkZW5TU0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJpc0hvbWVQcm92aWRlck5ldHdvcmsiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0ibmV0d29ya0lkIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcmVTaGFyZWRLZXkiLz4KLQkJPGZpZWxkIG5hbWU9InByaW9yaXR5IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0icHJvdmlkZXJGcmllbmRseU5hbWUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0icm9hbWluZ0NvbnNvcnRpdW1JZHMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdHVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3ZXBLZXlzIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0id2VwVHhLZXlJbmRleCIgZGVwcmVjYXRlZD0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL1dpZmlDb25maWd1cmF0aW9uJEF1dGhBbGdvcml0aG0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iTEVBUCIvPgotCQk8ZmllbGQgbmFtZT0iT1BFTiIvPgotCQk8ZmllbGQgbmFtZT0iU0hBUkVEIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0ic3RyaW5ncyIvPgotCQk8ZmllbGQgbmFtZT0idmFyTmFtZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvV2lmaUNvbmZpZ3VyYXRpb24kR3JvdXBDaXBoZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ0NNUCIvPgotCQk8ZmllbGQgbmFtZT0iVEtJUCIvPgotCQk8ZmllbGQgbmFtZT0iV0VQMTA0IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iV0VQNDAiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzdHJpbmdzIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2YXJOYW1lIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9XaWZpQ29uZmlndXJhdGlvbiRLZXlNZ210IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IklFRUU4MDIxWCIvPgotCQk8ZmllbGQgbmFtZT0iTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iV1BBX0VBUCIvPgotCQk8ZmllbGQgbmFtZT0iV1BBX1BTSyIvPgotCQk8ZmllbGQgbmFtZT0ic3RyaW5ncyIvPgotCQk8ZmllbGQgbmFtZT0idmFyTmFtZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvV2lmaUNvbmZpZ3VyYXRpb24kUGFpcndpc2VDaXBoZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ0NNUCIvPgotCQk8ZmllbGQgbmFtZT0iTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iVEtJUCIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9InN0cmluZ3MiLz4KLQkJPGZpZWxkIG5hbWU9InZhck5hbWUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL1dpZmlDb25maWd1cmF0aW9uJFByb3RvY29sIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlJTTiIvPgotCQk8ZmllbGQgbmFtZT0iV1BBIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0ic3RyaW5ncyIvPgotCQk8ZmllbGQgbmFtZT0idmFyTmFtZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvV2lmaUNvbmZpZ3VyYXRpb24kU3RhdHVzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNVUlJFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FCTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkFCTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdHJpbmdzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9XaWZpRW50ZXJwcmlzZUNvbmZpZyIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L3dpZmkvV2lmaUVudGVycHJpc2VDb25maWc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbHRTdWJqZWN0TWF0Y2goKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5vbnltb3VzSWRlbnRpdHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhQ2VydGlmaWNhdGUoKUxqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhQ2VydGlmaWNhdGVzKClbTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGllbnRDZXJ0aWZpY2F0ZSgpTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xpZW50Q2VydGlmaWNhdGVDaGFpbigpW0xqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG9tYWluU3VmZml4TWF0Y2goKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RWFwTWV0aG9kKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWRlbnRpdHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhc3N3b3JkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQaGFzZTJNZXRob2QoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQbG1uKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlYWxtKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YmplY3RNYXRjaCgpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFsdFN1YmplY3RNYXRjaChMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QW5vbnltb3VzSWRlbnRpdHkoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYUNlcnRpZmljYXRlKExqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FDZXJ0aWZpY2F0ZXMoW0xqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGllbnRLZXlFbnRyeShMamF2YS9zZWN1cml0eS9Qcml2YXRlS2V5O0xqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2xpZW50S2V5RW50cnlXaXRoQ2VydGlmaWNhdGVDaGFpbihMamF2YS9zZWN1cml0eS9Qcml2YXRlS2V5O1tMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZTspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RG9tYWluU3VmZml4TWF0Y2goTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVhcE1ldGhvZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJZGVudGl0eShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhc3N3b3JkKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGhhc2UyTWV0aG9kKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBsbW4oTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlYWxtKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdWJqZWN0TWF0Y2goTGphdmEvbGFuZy9TdHJpbmc7KVYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9XaWZpRW50ZXJwcmlzZUNvbmZpZyRFYXAiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFLQSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBS0FfUFJJTUUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iUEVBUCIvPgotCQk8ZmllbGQgbmFtZT0iUFdEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSU0iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVExTIi8+Ci0JCTxmaWVsZCBuYW1lPSJUVExTIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTkFVVEhfVExTIiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL1dpZmlFbnRlcnByaXNlQ29uZmlnJFBoYXNlMiIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQUtBIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFLQV9QUklNRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHVEMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1TQ0hBUCIvPgotCQk8ZmllbGQgbmFtZT0iTVNDSEFQVjIiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlBBUCIvPgotCQk8ZmllbGQgbmFtZT0iU0lNIiBzaW5jZT0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL1dpZmlJbmZvIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QlNTSUQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldGFpbGVkU3RhdGVPZihMYW5kcm9pZC9uZXQvd2lmaS9TdXBwbGljYW50U3RhdGU7KUxhbmRyb2lkL25ldC9OZXR3b3JrSW5mbyREZXRhaWxlZFN0YXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyZXF1ZW5jeSgpSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGlkZGVuU1NJRCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElwQWRkcmVzcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmtTcGVlZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hY0FkZHJlc3MoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5ldHdvcmtJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJzc2koKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTU0lEKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwbGljYW50U3RhdGUoKUxhbmRyb2lkL25ldC93aWZpL1N1cHBsaWNhbnRTdGF0ZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkZSRVFVRU5DWV9VTklUUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSU5LX1NQRUVEX1VOSVRTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9XaWZpTWFuYWdlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTmV0d29yayhMYW5kcm9pZC9uZXQvd2lmaS9XaWZpQ29uZmlndXJhdGlvbjspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE9yVXBkYXRlUGFzc3BvaW50Q29uZmlndXJhdGlvbihMYW5kcm9pZC9uZXQvd2lmaS9ob3RzcG90Mi9QYXNzcG9pbnRDb25maWd1cmF0aW9uOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxjdWxhdGVTaWduYWxMZXZlbChJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsV3BzKExhbmRyb2lkL25ldC93aWZpL1dpZmlNYW5hZ2VyJFdwc0NhbGxiYWNrOylWIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVNpZ25hbExldmVsKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVNdWx0aWNhc3RMb2NrKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvd2lmaS9XaWZpTWFuYWdlciRNdWx0aWNhc3RMb2NrOyIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVXaWZpTG9jayhJTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC93aWZpL1dpZmlNYW5hZ2VyJFdpZmlMb2NrOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVXaWZpTG9jayhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L3dpZmkvV2lmaU1hbmFnZXIkV2lmaUxvY2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzYWJsZU5ldHdvcmsoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzY29ubmVjdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuYWJsZU5ldHdvcmsoSVopWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbmZpZ3VyZWROZXR3b3JrcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb25JbmZvKClMYW5kcm9pZC9uZXQvd2lmaS9XaWZpSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaGNwSW5mbygpTGFuZHJvaWQvbmV0L0RoY3BJbmZvOyIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXNzcG9pbnRDb25maWd1cmF0aW9ucygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhblJlc3VsdHMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaWZpU3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpczVHSHpCYW5kU3VwcG9ydGVkKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RldmljZVRvQXBSdHRTdXBwb3J0ZWQoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5oYW5jZWRQb3dlclJlcG9ydGluZ1N1cHBvcnRlZCgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQMnBTdXBwb3J0ZWQoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUHJlZmVycmVkTmV0d29ya09mZmxvYWRTdXBwb3J0ZWQoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2NhbkFsd2F5c0F2YWlsYWJsZSgpWiIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUZGxzU3VwcG9ydGVkKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1dpZmlFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGluZ1N1cHBsaWNhbnQoKVoiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhc3NvY2lhdGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWNvbm5lY3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVOZXR3b3JrKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVBhc3Nwb2ludENvbmZpZ3VyYXRpb24oTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNhdmVDb25maWd1cmF0aW9uKClaIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRkbHNFbmFibGVkKExqYXZhL25ldC9JbmV0QWRkcmVzcztaKVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRkbHNFbmFibGVkV2l0aE1hY0FkZHJlc3MoTGphdmEvbGFuZy9TdHJpbmc7WilWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXaWZpRW5hYmxlZChaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydExvY2FsT25seUhvdHNwb3QoTGFuZHJvaWQvbmV0L3dpZmkvV2lmaU1hbmFnZXIkTG9jYWxPbmx5SG90c3BvdENhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0U2NhbigpWiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFdwcyhMYW5kcm9pZC9uZXQvd2lmaS9XcHNJbmZvO0xhbmRyb2lkL25ldC93aWZpL1dpZmlNYW5hZ2VyJFdwc0NhbGxiYWNrOylWIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlTmV0d29yayhMYW5kcm9pZC9uZXQvd2lmaS9XaWZpQ29uZmlndXJhdGlvbjspSSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BJQ0tfV0lGSV9ORVRXT1JLIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUkVRVUVTVF9TQ0FOX0FMV0FZU19BVkFJTEFCTEUiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfQVVUSEVOVElDQVRJTkciIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9CU1NJRCIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX05FVFdPUktfSU5GTyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTkVXX1JTU0kiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX05FV19TVEFURSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BSRVZJT1VTX1dJRklfU1RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JFU1VMVFNfVVBEQVRFRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TVVBQTElDQU5UX0NPTk5FQ1RFRCIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NVUFBMSUNBTlRfRVJST1IiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9XSUZJX0lORk8iIHNpbmNlPSIxNCIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1dJRklfU1RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVFdPUktfSURTX0NIQU5HRURfQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLX1NUQVRFX0NIQU5HRURfQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJSU1NJX0NIQU5HRURfQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0FOX1JFU1VMVFNfQVZBSUxBQkxFX0FDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iU1VQUExJQ0FOVF9DT05ORUNUSU9OX0NIQU5HRV9BQ1RJT04iIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBQTElDQU5UX1NUQVRFX0NIQU5HRURfQUNUSU9OIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9NT0RFX0ZVTEwiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX01PREVfRlVMTF9ISUdIX1BFUkYiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9NT0RFX1NDQU5fT05MWSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfU1RBVEVfQ0hBTkdFRF9BQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfU1RBVEVfRElTQUJMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfU1RBVEVfRElTQUJMSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1NUQVRFX0VOQUJMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfU1RBVEVfRU5BQkxJTkciLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfU1RBVEVfVU5LTk9XTiIvPgotCQk8ZmllbGQgbmFtZT0iV1BTX0FVVEhfRkFJTFVSRSIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iV1BTX09WRVJMQVBfRVJST1IiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IldQU19USU1FRF9PVVQiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IldQU19US0lQX09OTFlfUFJPSElCSVRFRCIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iV1BTX1dFUF9QUk9ISUJJVEVEIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9XaWZpTWFuYWdlciRMb2NhbE9ubHlIb3RzcG90Q2FsbGJhY2siIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZhaWxlZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXJ0ZWQoTGFuZHJvaWQvbmV0L3dpZmkvV2lmaU1hbmFnZXIkTG9jYWxPbmx5SG90c3BvdFJlc2VydmF0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdG9wcGVkKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9HRU5FUklDIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9JTkNPTVBBVElCTEVfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTk9fQ0hBTk5FTCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfVEVUSEVSSU5HX0RJU0FMTE9XRUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL1dpZmlNYW5hZ2VyJExvY2FsT25seUhvdHNwb3RSZXNlcnZhdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQXV0b0Nsb3NlYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZXQvd2lmaS9XaWZpTWFuYWdlcjspViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L3dpZmkvV2lmaU1hbmFnZXI7TGFuZHJvaWQvbmV0L3dpZmkvV2lmaUNvbmZpZ3VyYXRpb247KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpZmlDb25maWd1cmF0aW9uKClMYW5kcm9pZC9uZXQvd2lmaS9XaWZpQ29uZmlndXJhdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL1dpZmlNYW5hZ2VyJE11bHRpY2FzdExvY2siIHNpbmNlPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZXQvd2lmaS9XaWZpTWFuYWdlcjspViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L3dpZmkvV2lmaU1hbmFnZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFjcXVpcmUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0hlbGQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVmZXJlbmNlQ291bnRlZChaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL1dpZmlNYW5hZ2VyJFdpZmlMb2NrIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L3dpZmkvV2lmaU1hbmFnZXI7KVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC93aWZpL1dpZmlNYW5hZ2VyO0lMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWNxdWlyZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSGVsZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWZlcmVuY2VDb3VudGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdvcmtTb3VyY2UoTGFuZHJvaWQvb3MvV29ya1NvdXJjZTspViIgc2luY2U9IjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL1dpZmlNYW5hZ2VyJFdwc0NhbGxiYWNrIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRmFpbGVkKEkpViIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXJ0ZWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdWNjZWVkZWQoKVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9XcHNJbmZvIiBzaW5jZT0iMTQiIGRlcHJlY2F0ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC93aWZpL1dwc0luZm87KVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCU1NJRCIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU1BMQVkiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlZBTElEIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZUEFEIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTEFCRUwiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQQkMiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwaW4iIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzZXR1cCIgZGVwcmVjYXRlZD0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL2F3YXJlL0F0dGFjaENhbGxiYWNrIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BdHRhY2hGYWlsZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF0dGFjaGVkKExhbmRyb2lkL25ldC93aWZpL2F3YXJlL1dpZmlBd2FyZVNlc3Npb247KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL2F3YXJlL0NoYXJhY3RlcmlzdGljcyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4TWF0Y2hGaWx0ZXJMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhTZXJ2aWNlTmFtZUxlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFNlcnZpY2VTcGVjaWZpY0luZm9MZW5ndGgoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL2F3YXJlL0Rpc2NvdmVyeVNlc3Npb24iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC93aWZpL2F3YXJlL1dpZmlBd2FyZU1hbmFnZXI7SUkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlTmV0d29ya1NwZWNpZmllck9wZW4oTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvUGVlckhhbmRsZTspTGFuZHJvaWQvbmV0L05ldHdvcmtTcGVjaWZpZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlTmV0d29ya1NwZWNpZmllclBhc3NwaHJhc2UoTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvUGVlckhhbmRsZTtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L05ldHdvcmtTcGVjaWZpZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZE1lc3NhZ2UoTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvUGVlckhhbmRsZTtJW0IpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvRGlzY292ZXJ5U2Vzc2lvbkNhbGxiYWNrIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25NZXNzYWdlUmVjZWl2ZWQoTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvUGVlckhhbmRsZTtbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25NZXNzYWdlU2VuZEZhaWxlZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1lc3NhZ2VTZW5kU3VjY2VlZGVkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHVibGlzaFN0YXJ0ZWQoTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvUHVibGlzaERpc2NvdmVyeVNlc3Npb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlcnZpY2VEaXNjb3ZlcmVkKExhbmRyb2lkL25ldC93aWZpL2F3YXJlL1BlZXJIYW5kbGU7W0JMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlcnZpY2VEaXNjb3ZlcmVkV2l0aGluUmFuZ2UoTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvUGVlckhhbmRsZTtbQkxqYXZhL3V0aWwvTGlzdDtJKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2Vzc2lvbkNvbmZpZ0ZhaWxlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2Vzc2lvbkNvbmZpZ1VwZGF0ZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlc3Npb25UZXJtaW5hdGVkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdWJzY3JpYmVTdGFydGVkKExhbmRyb2lkL25ldC93aWZpL2F3YXJlL1N1YnNjcmliZURpc2NvdmVyeVNlc3Npb247KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL2F3YXJlL0lkZW50aXR5Q2hhbmdlZExpc3RlbmVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25JZGVudGl0eUNoYW5nZWQoW0IpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvUGVlckhhbmRsZSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL2F3YXJlL1B1Ymxpc2hDb25maWciIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQltCW0JJSVpaKVYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iUFVCTElTSF9UWVBFX1NPTElDSVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iUFVCTElTSF9UWVBFX1VOU09MSUNJVEVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9hd2FyZS9QdWJsaXNoQ29uZmlnJEJ1aWxkZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvUHVibGlzaENvbmZpZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXRjaEZpbHRlcihMamF2YS91dGlsL0xpc3Q7KUxhbmRyb2lkL25ldC93aWZpL2F3YXJlL1B1Ymxpc2hDb25maWckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQdWJsaXNoVHlwZShJKUxhbmRyb2lkL25ldC93aWZpL2F3YXJlL1B1Ymxpc2hDb25maWckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSYW5naW5nRW5hYmxlZChaKUxhbmRyb2lkL25ldC93aWZpL2F3YXJlL1B1Ymxpc2hDb25maWckQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlcnZpY2VOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvd2lmaS9hd2FyZS9QdWJsaXNoQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VydmljZVNwZWNpZmljSW5mbyhbQilMYW5kcm9pZC9uZXQvd2lmaS9hd2FyZS9QdWJsaXNoQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGVybWluYXRlTm90aWZpY2F0aW9uRW5hYmxlZChaKUxhbmRyb2lkL25ldC93aWZpL2F3YXJlL1B1Ymxpc2hDb25maWckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUdGxTZWMoSSlMYW5kcm9pZC9uZXQvd2lmaS9hd2FyZS9QdWJsaXNoQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9hd2FyZS9QdWJsaXNoRGlzY292ZXJ5U2Vzc2lvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9hd2FyZS9EaXNjb3ZlcnlTZXNzaW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZXQvd2lmaS9hd2FyZS9XaWZpQXdhcmVNYW5hZ2VyO0lJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZVB1Ymxpc2goTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvUHVibGlzaENvbmZpZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvU3Vic2NyaWJlQ29uZmlnIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0JbQltCSUlaWklaSSlWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNVQlNDUklCRV9UWVBFX0FDVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iU1VCU0NSSUJFX1RZUEVfUEFTU0lWRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvU3Vic2NyaWJlQ29uZmlnJEJ1aWxkZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvU3Vic2NyaWJlQ29uZmlnOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1hdGNoRmlsdGVyKExqYXZhL3V0aWwvTGlzdDspTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvU3Vic2NyaWJlQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4RGlzdGFuY2VNbShJKUxhbmRyb2lkL25ldC93aWZpL2F3YXJlL1N1YnNjcmliZUNvbmZpZyRCdWlsZGVyOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWluRGlzdGFuY2VNbShJKUxhbmRyb2lkL25ldC93aWZpL2F3YXJlL1N1YnNjcmliZUNvbmZpZyRCdWlsZGVyOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VydmljZU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC93aWZpL2F3YXJlL1N1YnNjcmliZUNvbmZpZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlcnZpY2VTcGVjaWZpY0luZm8oW0IpTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvU3Vic2NyaWJlQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3Vic2NyaWJlVHlwZShJKUxhbmRyb2lkL25ldC93aWZpL2F3YXJlL1N1YnNjcmliZUNvbmZpZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRlcm1pbmF0ZU5vdGlmaWNhdGlvbkVuYWJsZWQoWilMYW5kcm9pZC9uZXQvd2lmaS9hd2FyZS9TdWJzY3JpYmVDb25maWckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUdGxTZWMoSSlMYW5kcm9pZC9uZXQvd2lmaS9hd2FyZS9TdWJzY3JpYmVDb25maWckQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL2F3YXJlL1N1YnNjcmliZURpc2NvdmVyeVNlc3Npb24iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvRGlzY292ZXJ5U2Vzc2lvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvV2lmaUF3YXJlTWFuYWdlcjtJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVTdWJzY3JpYmUoTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvU3Vic2NyaWJlQ29uZmlnOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9hd2FyZS9XaWZpQXdhcmVNYW5hZ2VyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXR0YWNoKExhbmRyb2lkL25ldC93aWZpL2F3YXJlL0F0dGFjaENhbGxiYWNrO0xhbmRyb2lkL25ldC93aWZpL2F3YXJlL0lkZW50aXR5Q2hhbmdlZExpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdHRhY2goTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvQXR0YWNoQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJhY3RlcmlzdGljcygpTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvQ2hhcmFjdGVyaXN0aWNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXZhaWxhYmxlKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fV0lGSV9BV0FSRV9TVEFURV9DSEFOR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX0FXQVJFX0RBVEFfUEFUSF9ST0xFX0lOSVRJQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9BV0FSRV9EQVRBX1BBVEhfUk9MRV9SRVNQT05ERVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL2F3YXJlL1dpZmlBd2FyZVNlc3Npb24iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC93aWZpL2F3YXJlL1dpZmlBd2FyZU1hbmFnZXI7TGFuZHJvaWQvb3MvQmluZGVyO0kpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlTmV0d29ya1NwZWNpZmllck9wZW4oSVtCKUxhbmRyb2lkL25ldC9OZXR3b3JrU3BlY2lmaWVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZU5ldHdvcmtTcGVjaWZpZXJQYXNzcGhyYXNlKElbQkxqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvTmV0d29ya1NwZWNpZmllcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdWJsaXNoKExhbmRyb2lkL25ldC93aWZpL2F3YXJlL1B1Ymxpc2hDb25maWc7TGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvRGlzY292ZXJ5U2Vzc2lvbkNhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJzY3JpYmUoTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvU3Vic2NyaWJlQ29uZmlnO0xhbmRyb2lkL25ldC93aWZpL2F3YXJlL0Rpc2NvdmVyeVNlc3Npb25DYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9ob3RzcG90Mi9Db25maWdQYXJzZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZVBhc3Nwb2ludENvbmZpZyhMamF2YS9sYW5nL1N0cmluZztbQilMYW5kcm9pZC9uZXQvd2lmaS9ob3RzcG90Mi9QYXNzcG9pbnRDb25maWd1cmF0aW9uOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvaG90c3BvdDIvUGFzc3BvaW50Q29uZmlndXJhdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L3dpZmkvaG90c3BvdDIvUGFzc3BvaW50Q29uZmlndXJhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENyZWRlbnRpYWwoKUxhbmRyb2lkL25ldC93aWZpL2hvdHNwb3QyL3Bwcy9DcmVkZW50aWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvbWVTcCgpTGFuZHJvaWQvbmV0L3dpZmkvaG90c3BvdDIvcHBzL0hvbWVTcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDcmVkZW50aWFsKExhbmRyb2lkL25ldC93aWZpL2hvdHNwb3QyL3Bwcy9DcmVkZW50aWFsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG9tZVNwKExhbmRyb2lkL25ldC93aWZpL2hvdHNwb3QyL3Bwcy9Ib21lU3A7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL2hvdHNwb3QyL29tYWRtL1Bwc01vUGFyc2VyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VNb1RleHQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC93aWZpL2hvdHNwb3QyL1Bhc3Nwb2ludENvbmZpZ3VyYXRpb247Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9ob3RzcG90Mi9wcHMvQ3JlZGVudGlhbCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L3dpZmkvaG90c3BvdDIvcHBzL0NyZWRlbnRpYWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYUNlcnRpZmljYXRlKClMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZXJ0Q3JlZGVudGlhbCgpTGFuZHJvaWQvbmV0L3dpZmkvaG90c3BvdDIvcHBzL0NyZWRlbnRpYWwkQ2VydGlmaWNhdGVDcmVkZW50aWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsaWVudENlcnRpZmljYXRlQ2hhaW4oKVtMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGllbnRQcml2YXRlS2V5KClMamF2YS9zZWN1cml0eS9Qcml2YXRlS2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlYWxtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaW1DcmVkZW50aWFsKClMYW5kcm9pZC9uZXQvd2lmaS9ob3RzcG90Mi9wcHMvQ3JlZGVudGlhbCRTaW1DcmVkZW50aWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJDcmVkZW50aWFsKClMYW5kcm9pZC9uZXQvd2lmaS9ob3RzcG90Mi9wcHMvQ3JlZGVudGlhbCRVc2VyQ3JlZGVudGlhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYUNlcnRpZmljYXRlKExqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2VydENyZWRlbnRpYWwoTGFuZHJvaWQvbmV0L3dpZmkvaG90c3BvdDIvcHBzL0NyZWRlbnRpYWwkQ2VydGlmaWNhdGVDcmVkZW50aWFsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2xpZW50Q2VydGlmaWNhdGVDaGFpbihbTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGllbnRQcml2YXRlS2V5KExqYXZhL3NlY3VyaXR5L1ByaXZhdGVLZXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWFsbShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNpbUNyZWRlbnRpYWwoTGFuZHJvaWQvbmV0L3dpZmkvaG90c3BvdDIvcHBzL0NyZWRlbnRpYWwkU2ltQ3JlZGVudGlhbDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZXJDcmVkZW50aWFsKExhbmRyb2lkL25ldC93aWZpL2hvdHNwb3QyL3Bwcy9DcmVkZW50aWFsJFVzZXJDcmVkZW50aWFsOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9ob3RzcG90Mi9wcHMvQ3JlZGVudGlhbCRDZXJ0aWZpY2F0ZUNyZWRlbnRpYWwiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC93aWZpL2hvdHNwb3QyL3Bwcy9DcmVkZW50aWFsJENlcnRpZmljYXRlQ3JlZGVudGlhbDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlcnRTaGEyNTZGaW5nZXJwcmludCgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZXJ0VHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2VydFNoYTI1NkZpbmdlcnByaW50KFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDZXJ0VHlwZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvaG90c3BvdDIvcHBzL0NyZWRlbnRpYWwkU2ltQ3JlZGVudGlhbCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L3dpZmkvaG90c3BvdDIvcHBzL0NyZWRlbnRpYWwkU2ltQ3JlZGVudGlhbDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVhcFR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbXNpKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFYXBUeXBlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltc2koTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL2hvdHNwb3QyL3Bwcy9DcmVkZW50aWFsJFVzZXJDcmVkZW50aWFsIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZXQvd2lmaS9ob3RzcG90Mi9wcHMvQ3JlZGVudGlhbCRVc2VyQ3JlZGVudGlhbDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVhcFR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb25FYXBJbm5lck1ldGhvZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFzc3dvcmQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJuYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFYXBUeXBlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5vbkVhcElubmVyTWV0aG9kKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFzc3dvcmQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VybmFtZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvaG90c3BvdDIvcHBzL0hvbWVTcCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L3dpZmkvaG90c3BvdDIvcHBzL0hvbWVTcDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZxZG4oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyaWVuZGx5TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um9hbWluZ0NvbnNvcnRpdW1PaXMoKVtKIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RnFkbihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZyaWVuZGx5TmFtZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJvYW1pbmdDb25zb3J0aXVtT2lzKFtKKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwQ29uZmlnIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycENvbmZpZzspViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iZGV2aWNlQWRkcmVzcyIvPgotCQk8ZmllbGQgbmFtZT0iZ3JvdXBPd25lckludGVudCIvPgotCQk8ZmllbGQgbmFtZT0id3BzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycERldmljZSIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBEZXZpY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0dyb3VwT3duZXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NlcnZpY2VEaXNjb3ZlcnlDYXBhYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0id3BzRGlzcGxheVN1cHBvcnRlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Indwc0tleXBhZFN1cHBvcnRlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Indwc1BiY1N1cHBvcnRlZCgpWiIvPgotCQk8ZmllbGQgbmFtZT0iQVZBSUxBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05ORUNURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkZBSUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iSU5WSVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iVU5BVkFJTEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9ImRldmljZUFkZHJlc3MiLz4KLQkJPGZpZWxkIG5hbWU9ImRldmljZU5hbWUiLz4KLQkJPGZpZWxkIG5hbWU9InByaW1hcnlEZXZpY2VUeXBlIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZWNvbmRhcnlEZXZpY2VUeXBlIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdGF0dXMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwRGV2aWNlTGlzdCIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBEZXZpY2VMaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycERldmljZTsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZUxpc3QoKUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwR3JvdXAiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwR3JvdXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGllbnRMaXN0KClMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZXJmYWNlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZXR3b3JrTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3duZXIoKUxhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwRGV2aWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhc3NwaHJhc2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzR3JvdXBPd25lcigpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBJbmZvIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycEluZm87KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9Imdyb3VwRm9ybWVkIi8+Ci0JCTxmaWVsZCBuYW1lPSJncm91cE93bmVyQWRkcmVzcyIvPgotCQk8ZmllbGQgbmFtZT0iaXNHcm91cE93bmVyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRMb2NhbFNlcnZpY2UoTGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJENoYW5uZWw7TGFuZHJvaWQvbmV0L3dpZmkvcDJwL25zZC9XaWZpUDJwU2VydmljZUluZm87TGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJEFjdGlvbkxpc3RlbmVyOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTZXJ2aWNlUmVxdWVzdChMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQ2hhbm5lbDtMYW5kcm9pZC9uZXQvd2lmaS9wMnAvbnNkL1dpZmlQMnBTZXJ2aWNlUmVxdWVzdDtMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQWN0aW9uTGlzdGVuZXI7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbENvbm5lY3QoTGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJENoYW5uZWw7TGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJEFjdGlvbkxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJMb2NhbFNlcnZpY2VzKExhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlciRDaGFubmVsO0xhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlciRBY3Rpb25MaXN0ZW5lcjspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJTZXJ2aWNlUmVxdWVzdHMoTGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJENoYW5uZWw7TGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJEFjdGlvbkxpc3RlbmVyOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0KExhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlciRDaGFubmVsO0xhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwQ29uZmlnO0xhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlciRBY3Rpb25MaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUdyb3VwKExhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlciRDaGFubmVsO0xhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlciRBY3Rpb25MaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2NvdmVyUGVlcnMoTGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJENoYW5uZWw7TGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJEFjdGlvbkxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzY292ZXJTZXJ2aWNlcyhMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQ2hhbm5lbDtMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQWN0aW9uTGlzdGVuZXI7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXRpYWxpemUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL29zL0xvb3BlcjtMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQ2hhbm5lbExpc3RlbmVyOylMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQ2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVHcm91cChMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQ2hhbm5lbDtMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQWN0aW9uTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVMb2NhbFNlcnZpY2UoTGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJENoYW5uZWw7TGFuZHJvaWQvbmV0L3dpZmkvcDJwL25zZC9XaWZpUDJwU2VydmljZUluZm87TGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJEFjdGlvbkxpc3RlbmVyOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVTZXJ2aWNlUmVxdWVzdChMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQ2hhbm5lbDtMYW5kcm9pZC9uZXQvd2lmaS9wMnAvbnNkL1dpZmlQMnBTZXJ2aWNlUmVxdWVzdDtMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQWN0aW9uTGlzdGVuZXI7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RDb25uZWN0aW9uSW5mbyhMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQ2hhbm5lbDtMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQ29ubmVjdGlvbkluZm9MaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RHcm91cEluZm8oTGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJENoYW5uZWw7TGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJEdyb3VwSW5mb0xpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFBlZXJzKExhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlciRDaGFubmVsO0xhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlciRQZWVyTGlzdExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RG5zU2RSZXNwb25zZUxpc3RlbmVycyhMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQ2hhbm5lbDtMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkRG5zU2RTZXJ2aWNlUmVzcG9uc2VMaXN0ZW5lcjtMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkRG5zU2RUeHRSZWNvcmRMaXN0ZW5lcjspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VydmljZVJlc3BvbnNlTGlzdGVuZXIoTGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJENoYW5uZWw7TGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJFNlcnZpY2VSZXNwb25zZUxpc3RlbmVyOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVcG5wU2VydmljZVJlc3BvbnNlTGlzdGVuZXIoTGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJENoYW5uZWw7TGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJFVwbnBTZXJ2aWNlUmVzcG9uc2VMaXN0ZW5lcjspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcFBlZXJEaXNjb3ZlcnkoTGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJENoYW5uZWw7TGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJEFjdGlvbkxpc3RlbmVyOylWIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkJVU1kiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9ESVNDT1ZFUllfU1RBVEUiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTkVUV09SS19JTkZPIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QMlBfREVWSUNFX0xJU1QiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfV0lGSV9QMlBfREVWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9XSUZJX1AyUF9HUk9VUCIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9XSUZJX1AyUF9JTkZPIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9XSUZJX1NUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19TRVJWSUNFX1JFUVVFU1RTIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlAyUF9VTlNVUFBPUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9QMlBfQ09OTkVDVElPTl9DSEFOR0VEX0FDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9QMlBfRElTQ09WRVJZX0NIQU5HRURfQUNUSU9OIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfUDJQX0RJU0NPVkVSWV9TVEFSVEVEIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfUDJQX0RJU0NPVkVSWV9TVE9QUEVEIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfUDJQX1BFRVJTX0NIQU5HRURfQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1AyUF9TVEFURV9DSEFOR0VEX0FDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9QMlBfU1RBVEVfRElTQUJMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfUDJQX1NUQVRFX0VOQUJMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfUDJQX1RISVNfREVWSUNFX0NIQU5HRURfQUNUSU9OIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQWN0aW9uTGlzdGVuZXIiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZhaWx1cmUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdWNjZXNzKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQ2hhbm5lbCIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQXV0b0Nsb3NlYWJsZSIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvb3MvTG9vcGVyO0xhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlciRDaGFubmVsTGlzdGVuZXI7TGFuZHJvaWQvb3MvQmluZGVyO0xhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlcjspViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQ2hhbm5lbExpc3RlbmVyIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DaGFubmVsRGlzY29ubmVjdGVkKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkQ29ubmVjdGlvbkluZm9MaXN0ZW5lciIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29ubmVjdGlvbkluZm9BdmFpbGFibGUoTGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBJbmZvOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkRG5zU2RTZXJ2aWNlUmVzcG9uc2VMaXN0ZW5lciIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRG5zU2RTZXJ2aWNlQXZhaWxhYmxlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwRGV2aWNlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIkRG5zU2RUeHRSZWNvcmRMaXN0ZW5lciIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRG5zU2RUeHRSZWNvcmRBdmFpbGFibGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9NYXA7TGFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBEZXZpY2U7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlciRHcm91cEluZm9MaXN0ZW5lciIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR3JvdXBJbmZvQXZhaWxhYmxlKExhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwR3JvdXA7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlciRQZWVyTGlzdExpc3RlbmVyIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QZWVyc0F2YWlsYWJsZShMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycERldmljZUxpc3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlciRTZXJ2aWNlUmVzcG9uc2VMaXN0ZW5lciIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2VydmljZUF2YWlsYWJsZShJW0JMYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycERldmljZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBNYW5hZ2VyJFVwbnBTZXJ2aWNlUmVzcG9uc2VMaXN0ZW5lciIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVXBucFNlcnZpY2VBdmFpbGFibGUoTGphdmEvdXRpbC9MaXN0O0xhbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwRGV2aWNlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9wMnAvbnNkL1dpZmlQMnBEbnNTZFNlcnZpY2VJbmZvIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL3AycC9uc2QvV2lmaVAycFNlcnZpY2VJbmZvIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xpc3Q7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTWFwOylMYW5kcm9pZC9uZXQvd2lmaS9wMnAvbnNkL1dpZmlQMnBEbnNTZFNlcnZpY2VJbmZvOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvcDJwL25zZC9XaWZpUDJwRG5zU2RTZXJ2aWNlUmVxdWVzdCIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9wMnAvbnNkL1dpZmlQMnBTZXJ2aWNlUmVxdWVzdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKClMYW5kcm9pZC9uZXQvd2lmaS9wMnAvbnNkL1dpZmlQMnBEbnNTZFNlcnZpY2VSZXF1ZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvd2lmaS9wMnAvbnNkL1dpZmlQMnBEbnNTZFNlcnZpY2VSZXF1ZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvd2lmaS9wMnAvbnNkL1dpZmlQMnBEbnNTZFNlcnZpY2VSZXF1ZXN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvcDJwL25zZC9XaWZpUDJwU2VydmljZUluZm8iIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xpc3Q7KVYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9UWVBFX0FMTCIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9UWVBFX0JPTkpPVVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfVFlQRV9VUE5QIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWSUNFX1RZUEVfVkVORE9SX1NQRUNJRklDIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9wMnAvbnNkL1dpZmlQMnBTZXJ2aWNlUmVxdWVzdCIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SW5zdGFuY2UoSSlMYW5kcm9pZC9uZXQvd2lmaS9wMnAvbnNkL1dpZmlQMnBTZXJ2aWNlUmVxdWVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShJTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC93aWZpL3AycC9uc2QvV2lmaVAycFNlcnZpY2VSZXF1ZXN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvcDJwL25zZC9XaWZpUDJwVXBucFNlcnZpY2VJbmZvIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL3AycC9uc2QvV2lmaVAycFNlcnZpY2VJbmZvIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xpc3Q7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTGlzdDspTGFuZHJvaWQvbmV0L3dpZmkvcDJwL25zZC9XaWZpUDJwVXBucFNlcnZpY2VJbmZvOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvcDJwL25zZC9XaWZpUDJwVXBucFNlcnZpY2VSZXF1ZXN0IiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL3AycC9uc2QvV2lmaVAycFNlcnZpY2VSZXF1ZXN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SW5zdGFuY2UoKUxhbmRyb2lkL25ldC93aWZpL3AycC9uc2QvV2lmaVAycFVwbnBTZXJ2aWNlUmVxdWVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L3dpZmkvcDJwL25zZC9XaWZpUDJwVXBucFNlcnZpY2VSZXF1ZXN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmV0L3dpZmkvcnR0L1JhbmdpbmdSZXF1ZXN0IiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFBlZXJzKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9ydHQvUmFuZ2luZ1JlcXVlc3QkQnVpbGRlciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFjY2Vzc1BvaW50KExhbmRyb2lkL25ldC93aWZpL1NjYW5SZXN1bHQ7KUxhbmRyb2lkL25ldC93aWZpL3J0dC9SYW5naW5nUmVxdWVzdCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFjY2Vzc1BvaW50cyhMamF2YS91dGlsL0xpc3Q7KUxhbmRyb2lkL25ldC93aWZpL3J0dC9SYW5naW5nUmVxdWVzdCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFdpZmlBd2FyZVBlZXIoTGFuZHJvaWQvbmV0L01hY0FkZHJlc3M7KUxhbmRyb2lkL25ldC93aWZpL3J0dC9SYW5naW5nUmVxdWVzdCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFdpZmlBd2FyZVBlZXIoTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvUGVlckhhbmRsZTspTGFuZHJvaWQvbmV0L3dpZmkvcnR0L1JhbmdpbmdSZXF1ZXN0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL25ldC93aWZpL3J0dC9SYW5naW5nUmVxdWVzdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL3J0dC9SYW5naW5nUmVzdWx0IiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxhbmRyb2lkL25ldC9NYWNBZGRyZXNzO0lJSUlJW0JbQkopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzdGFuY2VNbSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3RhbmNlU3RkRGV2TW0oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYWNBZGRyZXNzKClMYW5kcm9pZC9uZXQvTWFjQWRkcmVzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1BdHRlbXB0ZWRNZWFzdXJlbWVudHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1TdWNjZXNzZnVsTWVhc3VyZW1lbnRzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVlckhhbmRsZSgpTGFuZHJvaWQvbmV0L3dpZmkvYXdhcmUvUGVlckhhbmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSYW5naW5nVGltZXN0YW1wTWlsbGlzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnNzaSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXR1cygpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0ZBSUwiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19SRVNQT05ERVJfRE9FU19OT1RfU1VQUE9SVF9JRUVFODAyMTFNQyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX1NVQ0NFU1MiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25ldC93aWZpL3J0dC9SYW5naW5nUmVzdWx0Q2FsbGJhY2siIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJhbmdpbmdGYWlsdXJlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmFuZ2luZ1Jlc3VsdHMoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfQ09ERV9GQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfQ09ERV9GQUlMX1JUVF9OT1RfQVZBSUxBQkxFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZXQvd2lmaS9ydHQvV2lmaVJ0dE1hbmFnZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0F2YWlsYWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0UmFuZ2luZyhMYW5kcm9pZC9uZXQvd2lmaS9ydHQvUmFuZ2luZ1JlcXVlc3Q7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yO0xhbmRyb2lkL25ldC93aWZpL3J0dC9SYW5naW5nUmVzdWx0Q2FsbGJhY2s7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9XSUZJX1JUVF9TVEFURV9DSEFOR0VEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvRm9ybWF0RXhjZXB0aW9uIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiIHNpbmNlPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmZjL05kZWZNZXNzYWdlIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25mYy9OZGVmUmVjb3JkO1tMYW5kcm9pZC9uZmMvTmRlZlJlY29yZDspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0xhbmRyb2lkL25mYy9OZGVmUmVjb3JkOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qnl0ZUFycmF5TGVuZ3RoKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWNvcmRzKClbTGFuZHJvaWQvbmZjL05kZWZSZWNvcmQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9CeXRlQXJyYXkoKVtCIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvTmRlZlJlY29yZCIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihTW0JbQltCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0IpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVBcHBsaWNhdGlvblJlY29yZChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmZjL05kZWZSZWNvcmQ7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVFeHRlcm5hbChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbQilMYW5kcm9pZC9uZmMvTmRlZlJlY29yZDsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZU1pbWUoTGphdmEvbGFuZy9TdHJpbmc7W0IpTGFuZHJvaWQvbmZjL05kZWZSZWNvcmQ7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUZXh0UmVjb3JkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZmMvTmRlZlJlY29yZDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVVyaShMYW5kcm9pZC9uZXQvVXJpOylMYW5kcm9pZC9uZmMvTmRlZlJlY29yZDsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVVyaShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmZjL05kZWZSZWNvcmQ7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXlsb2FkKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRuZigpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9CeXRlQXJyYXkoKVtCIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InRvTWltZVR5cGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9VcmkoKUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlJURF9BTFRFUk5BVElWRV9DQVJSSUVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJSVERfSEFORE9WRVJfQ0FSUklFUiIvPgotCQk8ZmllbGQgbmFtZT0iUlREX0hBTkRPVkVSX1JFUVVFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IlJURF9IQU5ET1ZFUl9TRUxFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IlJURF9TTUFSVF9QT1NURVIiLz4KLQkJPGZpZWxkIG5hbWU9IlJURF9URVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJSVERfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJUTkZfQUJTT0xVVEVfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJUTkZfRU1QVFkiLz4KLQkJPGZpZWxkIG5hbWU9IlRORl9FWFRFUk5BTF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUTkZfTUlNRV9NRURJQSIvPgotCQk8ZmllbGQgbmFtZT0iVE5GX1VOQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iVE5GX1VOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9IlRORl9XRUxMX0tOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvTmZjQWRhcHRlciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2FibGVGb3JlZ3JvdW5kRGlzcGF0Y2goTGFuZHJvaWQvYXBwL0FjdGl2aXR5OylWIiBzaW5jZT0iMTAiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNhYmxlRm9yZWdyb3VuZE5kZWZQdXNoKExhbmRyb2lkL2FwcC9BY3Rpdml0eTspViIgc2luY2U9IjEwIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2FibGVSZWFkZXJNb2RlKExhbmRyb2lkL2FwcC9BY3Rpdml0eTspViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlRm9yZWdyb3VuZERpc3BhdGNoKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDtbTGFuZHJvaWQvY29udGVudC9JbnRlbnRGaWx0ZXI7W1tMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjEwIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlRm9yZWdyb3VuZE5kZWZQdXNoKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9uZmMvTmRlZk1lc3NhZ2U7KVYiIHNpbmNlPSIxMCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmFibGVSZWFkZXJNb2RlKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9uZmMvTmZjQWRhcHRlciRSZWFkZXJDYWxsYmFjaztJTGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0QWRhcHRlcigpTGFuZHJvaWQvbmZjL05mY0FkYXB0ZXI7IiByZW1vdmVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRBZGFwdGVyKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGFuZHJvaWQvbmZjL05mY0FkYXB0ZXI7IiBzaW5jZT0iMTAiLz4KLQkJPG1ldGhvZCBuYW1lPSJpZ25vcmUoTGFuZHJvaWQvbmZjL1RhZztJTGFuZHJvaWQvbmZjL05mY0FkYXB0ZXIkT25UYWdSZW1vdmVkTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW52b2tlQmVhbShMYW5kcm9pZC9hcHAvQWN0aXZpdHk7KVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTmRlZlB1c2hFbmFibGVkKClaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCZWFtUHVzaFVyaXMoW0xhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvYXBwL0FjdGl2aXR5OylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCZWFtUHVzaFVyaXNDYWxsYmFjayhMYW5kcm9pZC9uZmMvTmZjQWRhcHRlciRDcmVhdGVCZWFtVXJpc0NhbGxiYWNrO0xhbmRyb2lkL2FwcC9BY3Rpdml0eTspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmRlZlB1c2hNZXNzYWdlKExhbmRyb2lkL25mYy9OZGVmTWVzc2FnZTtMYW5kcm9pZC9hcHAvQWN0aXZpdHk7W0xhbmRyb2lkL2FwcC9BY3Rpdml0eTspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmRlZlB1c2hNZXNzYWdlQ2FsbGJhY2soTGFuZHJvaWQvbmZjL05mY0FkYXB0ZXIkQ3JlYXRlTmRlZk1lc3NhZ2VDYWxsYmFjaztMYW5kcm9pZC9hcHAvQWN0aXZpdHk7W0xhbmRyb2lkL2FwcC9BY3Rpdml0eTspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25OZGVmUHVzaENvbXBsZXRlQ2FsbGJhY2soTGFuZHJvaWQvbmZjL05mY0FkYXB0ZXIkT25OZGVmUHVzaENvbXBsZXRlQ2FsbGJhY2s7TGFuZHJvaWQvYXBwL0FjdGl2aXR5O1tMYW5kcm9pZC9hcHAvQWN0aXZpdHk7KVYiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FEQVBURVJfU1RBVEVfQ0hBTkdFRCIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTkRFRl9ESVNDT1ZFUkVEIiBzaW5jZT0iMTAiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9UQUdfRElTQ09WRVJFRCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1RFQ0hfRElTQ09WRVJFRCIgc2luY2U9IjEwIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVFJBTlNBQ1RJT05fREVURUNURUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQURBUFRFUl9TVEFURSIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BSUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfREFUQSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTkRFRl9NRVNTQUdFUyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUkVBREVSX1BSRVNFTkNFX0NIRUNLX0RFTEFZIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NFQ1VSRV9FTEVNRU5UX05BTUUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfVEFHIiBzaW5jZT0iMTAiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUkVBREVSX05GQ19BIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUkVBREVSX05GQ19CIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUkVBREVSX05GQ19CQVJDT0RFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUkVBREVSX05GQ19GIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUkVBREVSX05GQ19WIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUkVBREVSX05PX1BMQVRGT1JNX1NPVU5EUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1JFQURFUl9TS0lQX05ERUZfQ0hFQ0siIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfT0ZGIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX09OIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX1RVUk5JTkdfT0ZGIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX1RVUk5JTkdfT04iIHNpbmNlPSIxOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmZjL05mY0FkYXB0ZXIkQ3JlYXRlQmVhbVVyaXNDYWxsYmFjayIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUJlYW1VcmlzKExhbmRyb2lkL25mYy9OZmNFdmVudDspW0xhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvTmZjQWRhcHRlciRDcmVhdGVOZGVmTWVzc2FnZUNhbGxiYWNrIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlTmRlZk1lc3NhZ2UoTGFuZHJvaWQvbmZjL05mY0V2ZW50OylMYW5kcm9pZC9uZmMvTmRlZk1lc3NhZ2U7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvTmZjQWRhcHRlciRPbk5kZWZQdXNoQ29tcGxldGVDYWxsYmFjayIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTmRlZlB1c2hDb21wbGV0ZShMYW5kcm9pZC9uZmMvTmZjRXZlbnQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25mYy9OZmNBZGFwdGVyJE9uVGFnUmVtb3ZlZExpc3RlbmVyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25UYWdSZW1vdmVkKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvTmZjQWRhcHRlciRSZWFkZXJDYWxsYmFjayIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVGFnRGlzY292ZXJlZChMYW5kcm9pZC9uZmMvVGFnOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvTmZjRXZlbnQiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25mYy9OZmNBZGFwdGVyO0IpViIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJuZmNBZGFwdGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJwZWVyTGxjcE1ham9yVmVyc2lvbiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJwZWVyTGxjcE1pbm9yVmVyc2lvbiIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvTmZjTWFuYWdlciIgc2luY2U9IjEwIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0QWRhcHRlcigpTGFuZHJvaWQvbmZjL05mY0FkYXB0ZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvVGFnIiBzaW5jZT0iMTAiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRlY2hMaXN0KClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvVGFnTG9zdEV4Y2VwdGlvbiIgc2luY2U9IjEwIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmZjL2NhcmRlbXVsYXRpb24vQ2FyZEVtdWxhdGlvbiIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhdGVnb3J5QWxsb3dzRm9yZWdyb3VuZFByZWZlcmVuY2UoTGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFpZHNGb3JTZXJ2aWNlKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGFuZHJvaWQvbmZjL05mY0FkYXB0ZXI7KUxhbmRyb2lkL25mYy9jYXJkZW11bGF0aW9uL0NhcmRFbXVsYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VsZWN0aW9uTW9kZUZvckNhdGVnb3J5KExqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZWZhdWx0U2VydmljZUZvckFpZChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RlZmF1bHRTZXJ2aWNlRm9yQ2F0ZWdvcnkoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJBaWRzRm9yU2VydmljZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9MaXN0OylaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBaWRzRm9yU2VydmljZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZWZlcnJlZFNlcnZpY2UoTGFuZHJvaWQvYXBwL0FjdGl2aXR5O0xhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNBaWRQcmVmaXhSZWdpc3RyYXRpb24oKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InVuc2V0UHJlZmVycmVkU2VydmljZShMYW5kcm9pZC9hcHAvQWN0aXZpdHk7KVoiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NIQU5HRV9ERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9PVEhFUiIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfUEFZTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0FURUdPUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NFUlZJQ0VfQ09NUE9ORU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUxFQ1RJT05fTU9ERV9BTFdBWVNfQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUxFQ1RJT05fTU9ERV9BU0tfSUZfQ09ORkxJQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTEVDVElPTl9NT0RFX1BSRUZFUl9ERUZBVUxUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvY2FyZGVtdWxhdGlvbi9Ib3N0QXBkdVNlcnZpY2UiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlVbmhhbmRsZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRlYWN0aXZhdGVkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InByb2Nlc3NDb21tYW5kQXBkdShbQkxhbmRyb2lkL29zL0J1bmRsZTspW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kUmVzcG9uc2VBcGR1KFtCKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFQUNUSVZBVElPTl9ERVNFTEVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUFDVElWQVRJT05fTElOS19MT1NTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWSUNFX0lOVEVSRkFDRSIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9NRVRBX0RBVEEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25mYy9jYXJkZW11bGF0aW9uL0hvc3ROZmNGU2VydmljZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvU2VydmljZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGVhY3RpdmF0ZWQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJvY2Vzc05mY0ZQYWNrZXQoW0JMYW5kcm9pZC9vcy9CdW5kbGU7KVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZFJlc3BvbnNlUGFja2V0KFtCKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFQUNUSVZBVElPTl9MSU5LX0xPU1MiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfSU5URVJGQUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWSUNFX01FVEFfREFUQSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmZjL2NhcmRlbXVsYXRpb24vTmZjRkNhcmRFbXVsYXRpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNhYmxlU2VydmljZShMYW5kcm9pZC9hcHAvQWN0aXZpdHk7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmFibGVTZXJ2aWNlKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMYW5kcm9pZC9uZmMvTmZjQWRhcHRlcjspTGFuZHJvaWQvbmZjL2NhcmRlbXVsYXRpb24vTmZjRkNhcmRFbXVsYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmZjaWQyRm9yU2VydmljZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5c3RlbUNvZGVGb3JTZXJ2aWNlKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJTeXN0ZW1Db2RlRm9yU2VydmljZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7TGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROZmNpZDJGb3JTZXJ2aWNlKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJTeXN0ZW1Db2RlRm9yU2VydmljZShMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25mYy9jYXJkZW11bGF0aW9uL09mZkhvc3RBcGR1U2VydmljZSIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvU2VydmljZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9JTlRFUkZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfTUVUQV9EQVRBIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvdGVjaC9CYXNpY1RhZ1RlY2hub2xvZ3kiIHNpbmNlPSIxMCIgcmVtb3ZlZD0iMjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvbmZjL3RlY2gvVGFnVGVjaG5vbG9neSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmZjL3RlY2gvSXNvRGVwIiBzaW5jZT0iMTAiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL25mYy90ZWNoL0Jhc2ljVGFnVGVjaG5vbG9neSIgcmVtb3ZlZD0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZmMvVGFnOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGFuZHJvaWQvbmZjL1RhZzspTGFuZHJvaWQvbmZjL3RlY2gvSXNvRGVwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpTGF5ZXJSZXNwb25zZSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaXN0b3JpY2FsQnl0ZXMoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4VHJhbnNjZWl2ZUxlbmd0aCgpSSIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZW91dCgpSSIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFeHRlbmRlZExlbmd0aEFwZHVTdXBwb3J0ZWQoKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVvdXQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNjZWl2ZShbQilbQiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmZjL3RlY2gvTWlmYXJlQ2xhc3NpYyIgc2luY2U9IjEwIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9uZmMvdGVjaC9CYXNpY1RhZ1RlY2hub2xvZ3kiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmZjL1RhZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXV0aGVudGljYXRlU2VjdG9yV2l0aEtleUEoSVtCKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdXRoZW50aWNhdGVTZWN0b3JXaXRoS2V5QihJW0IpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImJsb2NrVG9TZWN0b3IoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjcmVtZW50KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGFuZHJvaWQvbmZjL1RhZzspTGFuZHJvaWQvbmZjL3RlY2gvTWlmYXJlQ2xhc3NpYzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCbG9ja0NvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmxvY2tDb3VudEluU2VjdG9yKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFRyYW5zY2VpdmVMZW5ndGgoKUkiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlY3RvckNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVvdXQoKUkiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmNyZW1lbnQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRCbG9jayhJKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdG9yZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZWN0b3JUb0Jsb2NrKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVvdXQoSSlWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFuc2NlaXZlKFtCKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNmZXIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVCbG9jayhJW0IpViIvPgotCQk8ZmllbGQgbmFtZT0iQkxPQ0tfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0RFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NSUZBUkVfQVBQTElDQVRJT05fRElSRUNUT1JZIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTkZDX0ZPUlVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSVpFXzFLIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSVpFXzJLIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSVpFXzRLIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSVpFX01JTkkiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQ0xBU1NJQyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9QTFVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1BSTyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9VTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvdGVjaC9NaWZhcmVVbHRyYWxpZ2h0IiBzaW5jZT0iMTAiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL25mYy90ZWNoL0Jhc2ljVGFnVGVjaG5vbG9neSIgcmVtb3ZlZD0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZmMvVGFnOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGFuZHJvaWQvbmZjL1RhZzspTGFuZHJvaWQvbmZjL3RlY2gvTWlmYXJlVWx0cmFsaWdodDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhUcmFuc2NlaXZlTGVuZ3RoKClJIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lb3V0KClJIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFBhZ2VzKEkpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaW1lb3V0KEkpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNjZWl2ZShbQilbQiIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlUGFnZShJW0IpViIvPgotCQk8ZmllbGQgbmFtZT0iUEFHRV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1VMVFJBTElHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVUxUUkFMSUdIVF9DIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1VOS05PV04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25mYy90ZWNoL05kZWYiIHNpbmNlPSIxMCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbmZjL3RlY2gvQmFzaWNUYWdUZWNobm9sb2d5IiByZW1vdmVkPSIyOSIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25mYy9UYWc7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbk1ha2VSZWFkT25seSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMYW5kcm9pZC9uZmMvVGFnOylMYW5kcm9pZC9uZmMvdGVjaC9OZGVmOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhY2hlZE5kZWZNZXNzYWdlKClMYW5kcm9pZC9uZmMvTmRlZk1lc3NhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4U2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5kZWZNZXNzYWdlKClMYW5kcm9pZC9uZmMvTmRlZk1lc3NhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXcml0YWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im1ha2VSZWFkT25seSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlTmRlZk1lc3NhZ2UoTGFuZHJvaWQvbmZjL05kZWZNZXNzYWdlOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUZBUkVfQ0xBU1NJQyIvPgotCQk8ZmllbGQgbmFtZT0iTkZDX0ZPUlVNX1RZUEVfMSIvPgotCQk8ZmllbGQgbmFtZT0iTkZDX0ZPUlVNX1RZUEVfMiIvPgotCQk8ZmllbGQgbmFtZT0iTkZDX0ZPUlVNX1RZUEVfMyIvPgotCQk8ZmllbGQgbmFtZT0iTkZDX0ZPUlVNX1RZUEVfNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmZjL3RlY2gvTmRlZkZvcm1hdGFibGUiIHNpbmNlPSIxMCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbmZjL3RlY2gvQmFzaWNUYWdUZWNobm9sb2d5IiByZW1vdmVkPSIyOSIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25mYy9UYWc7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMYW5kcm9pZC9uZmMvTmRlZk1lc3NhZ2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRSZWFkT25seShMYW5kcm9pZC9uZmMvTmRlZk1lc3NhZ2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGFuZHJvaWQvbmZjL1RhZzspTGFuZHJvaWQvbmZjL3RlY2gvTmRlZkZvcm1hdGFibGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvdGVjaC9OZmNBIiBzaW5jZT0iMTAiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL25mYy90ZWNoL0Jhc2ljVGFnVGVjaG5vbG9neSIgcmVtb3ZlZD0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZmMvVGFnOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGFuZHJvaWQvbmZjL1RhZzspTGFuZHJvaWQvbmZjL3RlY2gvTmZjQTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHFhKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFRyYW5zY2VpdmVMZW5ndGgoKUkiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNhaygpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVvdXQoKUkiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVvdXQoSSlWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFuc2NlaXZlKFtCKVtCIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvdGVjaC9OZmNCIiBzaW5jZT0iMTAiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL25mYy90ZWNoL0Jhc2ljVGFnVGVjaG5vbG9neSIgcmVtb3ZlZD0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZmMvVGFnOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGFuZHJvaWQvbmZjL1RhZzspTGFuZHJvaWQvbmZjL3RlY2gvTmZjQjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvbkRhdGEoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4VHJhbnNjZWl2ZUxlbmd0aCgpSSIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdG9jb2xJbmZvKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9InRyYW5zY2VpdmUoW0IpW0IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL25mYy90ZWNoL05mY0JhcmNvZGUiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvbmZjL3RlY2gvQmFzaWNUYWdUZWNobm9sb2d5IiByZW1vdmVkPSIyOSIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25mYy9UYWc7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMYW5kcm9pZC9uZmMvVGFnOylMYW5kcm9pZC9uZmMvdGVjaC9OZmNCYXJjb2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhcmNvZGUoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpSSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9LT1ZJTyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9VTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9uZmMvdGVjaC9OZmNGIiBzaW5jZT0iMTAiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL25mYy90ZWNoL0Jhc2ljVGFnVGVjaG5vbG9neSIgcmVtb3ZlZD0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZmMvVGFnOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGFuZHJvaWQvbmZjL1RhZzspTGFuZHJvaWQvbmZjL3RlY2gvTmZjRjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYW51ZmFjdHVyZXIoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4VHJhbnNjZWl2ZUxlbmd0aCgpSSIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lzdGVtQ29kZSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lb3V0KClJIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaW1lb3V0KEkpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNjZWl2ZShbQilbQiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmZjL3RlY2gvTmZjViIgc2luY2U9IjEwIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9uZmMvdGVjaC9CYXNpY1RhZ1RlY2hub2xvZ3kiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmZjL1RhZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KExhbmRyb2lkL25mYy9UYWc7KUxhbmRyb2lkL25mYy90ZWNoL05mY1Y7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHNmSWQoKUIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhUcmFuc2NlaXZlTGVuZ3RoKClJIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNwb25zZUZsYWdzKClCIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNjZWl2ZShbQilbQiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvbmZjL3RlY2gvVGFnVGVjaG5vbG9neSIgc2luY2U9IjEwIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL0Nsb3NlYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWcoKUxhbmRyb2lkL25mYy9UYWc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb25uZWN0ZWQoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9FR0wxNCIgc2luY2U9IjE3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbEJpbmRBUEkoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsQmluZFRleEltYWdlKExhbmRyb2lkL29wZW5nbC9FR0xEaXNwbGF5O0xhbmRyb2lkL29wZW5nbC9FR0xTdXJmYWNlO0kpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbENob29zZUNvbmZpZyhMYW5kcm9pZC9vcGVuZ2wvRUdMRGlzcGxheTtbSUlbTGFuZHJvaWQvb3BlbmdsL0VHTENvbmZpZztJSVtJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsQ29weUJ1ZmZlcnMoTGFuZHJvaWQvb3BlbmdsL0VHTERpc3BsYXk7TGFuZHJvaWQvb3BlbmdsL0VHTFN1cmZhY2U7SSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsQ3JlYXRlQ29udGV4dChMYW5kcm9pZC9vcGVuZ2wvRUdMRGlzcGxheTtMYW5kcm9pZC9vcGVuZ2wvRUdMQ29uZmlnO0xhbmRyb2lkL29wZW5nbC9FR0xDb250ZXh0O1tJSSlMYW5kcm9pZC9vcGVuZ2wvRUdMQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xDcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihMYW5kcm9pZC9vcGVuZ2wvRUdMRGlzcGxheTtJSUxhbmRyb2lkL29wZW5nbC9FR0xDb25maWc7W0lJKUxhbmRyb2lkL29wZW5nbC9FR0xTdXJmYWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKExhbmRyb2lkL29wZW5nbC9FR0xEaXNwbGF5O0xhbmRyb2lkL29wZW5nbC9FR0xDb25maWc7W0lJKUxhbmRyb2lkL29wZW5nbC9FR0xTdXJmYWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbENyZWF0ZVBpeG1hcFN1cmZhY2UoTGFuZHJvaWQvb3BlbmdsL0VHTERpc3BsYXk7TGFuZHJvaWQvb3BlbmdsL0VHTENvbmZpZztJW0lJKUxhbmRyb2lkL29wZW5nbC9FR0xTdXJmYWNlOyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKExhbmRyb2lkL29wZW5nbC9FR0xEaXNwbGF5O0xhbmRyb2lkL29wZW5nbC9FR0xDb25maWc7TGphdmEvbGFuZy9PYmplY3Q7W0lJKUxhbmRyb2lkL29wZW5nbC9FR0xTdXJmYWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbERlc3Ryb3lDb250ZXh0KExhbmRyb2lkL29wZW5nbC9FR0xEaXNwbGF5O0xhbmRyb2lkL29wZW5nbC9FR0xDb250ZXh0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsRGVzdHJveVN1cmZhY2UoTGFuZHJvaWQvb3BlbmdsL0VHTERpc3BsYXk7TGFuZHJvaWQvb3BlbmdsL0VHTFN1cmZhY2U7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xHZXRDb25maWdBdHRyaWIoTGFuZHJvaWQvb3BlbmdsL0VHTERpc3BsYXk7TGFuZHJvaWQvb3BlbmdsL0VHTENvbmZpZztJW0lJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xHZXRDb25maWdzKExhbmRyb2lkL29wZW5nbC9FR0xEaXNwbGF5O1tMYW5kcm9pZC9vcGVuZ2wvRUdMQ29uZmlnO0lJW0lJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xHZXRDdXJyZW50Q29udGV4dCgpTGFuZHJvaWQvb3BlbmdsL0VHTENvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsR2V0Q3VycmVudERpc3BsYXkoKUxhbmRyb2lkL29wZW5nbC9FR0xEaXNwbGF5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbEdldEN1cnJlbnRTdXJmYWNlKEkpTGFuZHJvaWQvb3BlbmdsL0VHTFN1cmZhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsR2V0RGlzcGxheShJKUxhbmRyb2lkL29wZW5nbC9FR0xEaXNwbGF5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbEdldEVycm9yKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsSW5pdGlhbGl6ZShMYW5kcm9pZC9vcGVuZ2wvRUdMRGlzcGxheTtbSUlbSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbE1ha2VDdXJyZW50KExhbmRyb2lkL29wZW5nbC9FR0xEaXNwbGF5O0xhbmRyb2lkL29wZW5nbC9FR0xTdXJmYWNlO0xhbmRyb2lkL29wZW5nbC9FR0xTdXJmYWNlO0xhbmRyb2lkL29wZW5nbC9FR0xDb250ZXh0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsUXVlcnlBUEkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xRdWVyeUNvbnRleHQoTGFuZHJvaWQvb3BlbmdsL0VHTERpc3BsYXk7TGFuZHJvaWQvb3BlbmdsL0VHTENvbnRleHQ7SVtJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsUXVlcnlTdHJpbmcoTGFuZHJvaWQvb3BlbmdsL0VHTERpc3BsYXk7SSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xRdWVyeVN1cmZhY2UoTGFuZHJvaWQvb3BlbmdsL0VHTERpc3BsYXk7TGFuZHJvaWQvb3BlbmdsL0VHTFN1cmZhY2U7SVtJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsUmVsZWFzZVRleEltYWdlKExhbmRyb2lkL29wZW5nbC9FR0xEaXNwbGF5O0xhbmRyb2lkL29wZW5nbC9FR0xTdXJmYWNlO0kpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbFJlbGVhc2VUaHJlYWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xTdXJmYWNlQXR0cmliKExhbmRyb2lkL29wZW5nbC9FR0xEaXNwbGF5O0xhbmRyb2lkL29wZW5nbC9FR0xTdXJmYWNlO0lJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xTd2FwQnVmZmVycyhMYW5kcm9pZC9vcGVuZ2wvRUdMRGlzcGxheTtMYW5kcm9pZC9vcGVuZ2wvRUdMU3VyZmFjZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbFN3YXBJbnRlcnZhbChMYW5kcm9pZC9vcGVuZ2wvRUdMRGlzcGxheTtJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xUZXJtaW5hdGUoTGFuZHJvaWQvb3BlbmdsL0VHTERpc3BsYXk7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xXYWl0Q2xpZW50KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsV2FpdEdMKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsV2FpdE5hdGl2ZShJKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9BTFBIQV9NQVNLX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9BTFBIQV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfQkFDS19CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9CQURfQUNDRVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfQkFEX0FMTE9DIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfQkFEX0FUVFJJQlVURSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0JBRF9DT05GSUciLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9CQURfQ09OVEVYVCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0JBRF9DVVJSRU5UX1NVUkZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9CQURfRElTUExBWSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0JBRF9NQVRDSCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0JBRF9OQVRJVkVfUElYTUFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfQkFEX05BVElWRV9XSU5ET1ciLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9CQURfUEFSQU1FVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfQkFEX1NVUkZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfQklORF9UT19URVhUVVJFX1JHQkEiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9CTFVFX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9CVUZGRVJfREVTVFJPWUVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfQlVGRkVSX1BSRVNFUlZFRCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0JVRkZFUl9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfQ0xJRU5UX0FQSVMiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9DT0xPUl9CVUZGRVJfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0NPTkZJR19DQVZFQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9DT05GSUdfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9DT05GT1JNQU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfQ09OVEVYVF9DTElFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9DT05URVhUX0xPU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9DT1JFX05BVElWRV9FTkdJTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9ERUZBVUxUX0RJU1BMQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9ERVBUSF9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfRElTUExBWV9TQ0FMSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfRFJBVyIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0VYVEVOU0lPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9GQUxTRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0dSRUVOX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9IRUlHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9IT1JJWk9OVEFMX1JFU09MVVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9MQVJHRVNUX1BCVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9MRVZFTCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0xVTUlOQU5DRV9CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9MVU1JTkFOQ0VfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX01BVENIX05BVElWRV9QSVhNQVAiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9NQVhfUEJVRkZFUl9IRUlHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9NQVhfUEJVRkZFUl9QSVhFTFMiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9NQVhfUEJVRkZFUl9XSURUSCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX01BWF9TV0FQX0lOVEVSVkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfTUlOX1NXQVBfSU5URVJWQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9NSVBNQVBfTEVWRUwiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9NSVBNQVBfVEVYVFVSRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX01VTFRJU0FNUExFX1JFU09MVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9NVUxUSVNBTVBMRV9SRVNPTFZFX0JPWCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX01VTFRJU0FNUExFX1JFU09MVkVfQk9YX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX01VTFRJU0FNUExFX1JFU09MVkVfREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX05BVElWRV9SRU5ERVJBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfTkFUSVZFX1ZJU1VBTF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX05BVElWRV9WSVNVQUxfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9OT05fQ09ORk9STUFOVF9DT05GSUciLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9OT1RfSU5JVElBTElaRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9OT19DT05URVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfTk9fRElTUExBWSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX05PX1NVUkZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9OT19URVhUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfT1BFTkdMX0FQSSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX09QRU5HTF9CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9PUEVOR0xfRVMyX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX09QRU5HTF9FU19BUEkiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9PUEVOR0xfRVNfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfT1BFTlZHX0FQSSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX09QRU5WR19CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9PUEVOVkdfSU1BR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9QQlVGRkVSX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1BJWEVMX0FTUEVDVF9SQVRJTyIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1BJWE1BUF9CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9SRUFEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfUkVEX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9SRU5ERVJBQkxFX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9SRU5ERVJfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfUkdCX0JVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1NBTVBMRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9TQU1QTEVfQlVGRkVSUyIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1NJTkdMRV9CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9TTE9XX0NPTkZJRyIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1NURU5DSUxfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1NVQ0NFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9TVVJGQUNFX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9TV0FQX0JFSEFWSU9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfVEVYVFVSRV8yRCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1RFWFRVUkVfRk9STUFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfVEVYVFVSRV9SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9URVhUVVJFX1JHQkEiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9URVhUVVJFX1RBUkdFVCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1RSQU5TUEFSRU5UX0JMVUVfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1RSQU5TUEFSRU5UX1JFRF9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1RSQU5TUEFSRU5UX1JHQiIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1RSQU5TUEFSRU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9UUlVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfVkVORE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfVkVSU0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1ZFUlRJQ0FMX1JFU09MVVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9WR19BTFBIQV9GT1JNQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9WR19BTFBIQV9GT1JNQVRfTk9OUFJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfVkdfQUxQSEFfRk9STUFUX1BSRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1ZHX0FMUEhBX0ZPUk1BVF9QUkVfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfVkdfQ09MT1JTUEFDRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1ZHX0NPTE9SU1BBQ0VfTElORUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfVkdfQ09MT1JTUEFDRV9MSU5FQVJfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfVkdfQ09MT1JTUEFDRV9zUkdCIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfV0lEVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9XSU5ET1dfQklUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvRUdMQ29uZmlnIiBzaW5jZT0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9FR0xPYmplY3RIYW5kbGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEopViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvRUdMQ29udGV4dCIgc2luY2U9IjE3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvRUdMT2JqZWN0SGFuZGxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKKVYiIHNpbmNlPSIyOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3BlbmdsL0VHTERpc3BsYXkiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3BlbmdsL0VHTE9iamVjdEhhbmRsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9FR0xFeHQiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xQcmVzZW50YXRpb25UaW1lQU5EUk9JRChMYW5kcm9pZC9vcGVuZ2wvRUdMRGlzcGxheTtMYW5kcm9pZC9vcGVuZ2wvRUdMU3VyZmFjZTtKKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9DT05URVhUX0ZMQUdTX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0NPTlRFWFRfTUFKT1JfVkVSU0lPTl9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9DT05URVhUX01JTk9SX1ZFUlNJT05fS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfT1BFTkdMX0VTM19CSVRfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfUkVDT1JEQUJMRV9BTkRST0lEIiBzaW5jZT0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9FR0xPYmplY3RIYW5kbGUiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhhbmRsZSgpSSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYXRpdmVIYW5kbGUoKUoiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3BlbmdsL0VHTFN1cmZhY2UiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3BlbmdsL0VHTE9iamVjdEhhbmRsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9FVEMxIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVCbG9jayhMamF2YS9uaW8vQnVmZmVyO0xqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGVJbWFnZShMamF2YS9uaW8vQnVmZmVyO0xqYXZhL25pby9CdWZmZXI7SUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5jb2RlQmxvY2soTGphdmEvbmlvL0J1ZmZlcjtJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuY29kZUltYWdlKExqYXZhL25pby9CdWZmZXI7SUlJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRIZWFkZXIoTGphdmEvbmlvL0J1ZmZlcjtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5jb2RlZERhdGFTaXplKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoTGphdmEvbmlvL0J1ZmZlcjspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpZHRoKExqYXZhL25pby9CdWZmZXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZhbGlkKExqYXZhL25pby9CdWZmZXI7KVoiLz4KLQkJPGZpZWxkIG5hbWU9IkRFQ09ERURfQkxPQ0tfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iRU5DT0RFRF9CTE9DS19TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVEMxX1JHQjhfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVENfUEtNX0hFQURFUl9TSVpFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvRVRDMVV0aWwiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXByZXNzVGV4dHVyZShMamF2YS9uaW8vQnVmZmVyO0lJSUkpTGFuZHJvaWQvb3BlbmdsL0VUQzFVdGlsJEVUQzFUZXh0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVRleHR1cmUoTGphdmEvaW8vSW5wdXRTdHJlYW07KUxhbmRyb2lkL29wZW5nbC9FVEMxVXRpbCRFVEMxVGV4dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VUQzFTdXBwb3J0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkVGV4dHVyZShJSUlJSUxhbmRyb2lkL29wZW5nbC9FVEMxVXRpbCRFVEMxVGV4dHVyZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRUZXh0dXJlKElJSUlJTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVRleHR1cmUoTGFuZHJvaWQvb3BlbmdsL0VUQzFVdGlsJEVUQzFUZXh0dXJlO0xqYXZhL2lvL091dHB1dFN0cmVhbTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3BlbmdsL0VUQzFVdGlsJEVUQzFUZXh0dXJlIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGEoKUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpZHRoKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvR0xEZWJ1Z0hlbHBlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JhcChMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTDtJTGphdmEvaW8vV3JpdGVyOylMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cmFwKExqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9vcGVuZ2xlcy9HTDtJTGphdmEvaW8vV3JpdGVyOylMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3Mvb3BlbmdsZXMvR0w7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05GSUdfQ0hFQ0tfR0xfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkZJR19DSEVDS19USFJFQUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkZJR19MT0dfQVJHVU1FTlRfTkFNRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1dST05HX1RIUkVBRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3BlbmdsL0dMRVMxMCIgc2luY2U9IjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xBY3RpdmVUZXh0dXJlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQWxwaGFGdW5jKElGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEFscGhhRnVuY3goSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmluZFRleHR1cmUoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmxlbmRGdW5jKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsZWFyKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xlYXJDb2xvcihGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsZWFyQ29sb3J4KElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xlYXJEZXB0aGYoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDbGVhckRlcHRoeChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsZWFyU3RlbmNpbChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsaWVudEFjdGl2ZVRleHR1cmUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDb2xvcjRmKEZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29sb3I0eChJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvbG9yTWFzayhaWlpaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvbG9yUG9pbnRlcihJSUlMamF2YS9uaW8vQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDb21wcmVzc2VkVGV4SW1hZ2UyRChJSUlJSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoSUlJSUlJSUlMamF2YS9uaW8vQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDb3B5VGV4SW1hZ2UyRChJSUlJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDb3B5VGV4U3ViSW1hZ2UyRChJSUlJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDdWxsRmFjZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZVRleHR1cmVzKElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZWxldGVUZXh0dXJlcyhJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlcHRoRnVuYyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlcHRoTWFzayhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlcHRoUmFuZ2VmKEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlcHRoUmFuZ2V4KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERpc2FibGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEaXNhYmxlQ2xpZW50U3RhdGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3QXJyYXlzKElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3RWxlbWVudHMoSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRW5hYmxlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRW5hYmxlQ2xpZW50U3RhdGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGaW5pc2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEZsdXNoKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGb2dmKElGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEZvZ2Z2KElMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEZvZ2Z2KElbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRm9neChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGb2d4dihJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRm9neHYoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGcm9udEZhY2UoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGcnVzdHVtZihGRkZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRnJ1c3R1bXgoSUlJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdlblRleHR1cmVzKElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZW5UZXh0dXJlcyhJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEVycm9yKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRJbnRlZ2VydihJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0SW50ZWdlcnYoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRTdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEhpbnQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTGlnaHRNb2RlbGYoSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTGlnaHRNb2RlbGZ2KElMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpZ2h0TW9kZWxmdihJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpZ2h0TW9kZWx4KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpZ2h0TW9kZWx4dihJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTGlnaHRNb2RlbHh2KElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTGlnaHRmKElJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xMaWdodGZ2KElJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xMaWdodGZ2KElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpZ2h0eChJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTGlnaHR4dihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpZ2h0eHYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTGluZVdpZHRoKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTGluZVdpZHRoeChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExvYWRJZGVudGl0eSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTG9hZE1hdHJpeGYoTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xMb2FkTWF0cml4ZihbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTG9hZE1hdHJpeHgoTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTG9hZE1hdHJpeHgoW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExvZ2ljT3AoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xNYXRlcmlhbGYoSUlGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE1hdGVyaWFsZnYoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE1hdGVyaWFsZnYoSUlbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTWF0ZXJpYWx4KElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xNYXRlcmlhbHh2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTWF0ZXJpYWx4dihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xNYXRyaXhNb2RlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTXVsdE1hdHJpeGYoTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xNdWx0TWF0cml4ZihbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTXVsdE1hdHJpeHgoTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTXVsdE1hdHJpeHgoW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE11bHRpVGV4Q29vcmQ0ZihJRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xNdWx0aVRleENvb3JkNHgoSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTm9ybWFsM2YoRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE5vcm1hbDN4KElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xOb3JtYWxQb2ludGVyKElJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsT3J0aG9mKEZGRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xPcnRob3goSUlJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBpeGVsU3RvcmVpKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBvaW50U2l6ZShGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBvaW50U2l6ZXgoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb2x5Z29uT2Zmc2V0KEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBvbHlnb25PZmZzZXR4KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBvcE1hdHJpeCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHVzaE1hdHJpeCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUmVhZFBpeGVscyhJSUlJSUlMamF2YS9uaW8vQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xSb3RhdGVmKEZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUm90YXRleChJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFNhbXBsZUNvdmVyYWdlKEZaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFNhbXBsZUNvdmVyYWdleChJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTY2FsZWYoRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFNjYWxleChJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU2Npc3NvcihJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFNoYWRlTW9kZWwoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTdGVuY2lsRnVuYyhJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU3RlbmNpbE1hc2soSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTdGVuY2lsT3AoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleENvb3JkUG9pbnRlcihJSUlMamF2YS9uaW8vQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhFbnZmKElJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhFbnZmdihJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4RW52ZnYoSUlbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4RW52eChJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4RW52eHYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhFbnZ4dihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhJbWFnZTJEKElJSUlJSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4UGFyYW1ldGVyZihJSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4UGFyYW1ldGVyeChJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4U3ViSW1hZ2UyRChJSUlJSUlJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRyYW5zbGF0ZWYoRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRyYW5zbGF0ZXgoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZlcnRleFBvaW50ZXIoSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVmlld3BvcnQoSUlJSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BREQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUxQSEFfQklUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUxQSEFfVEVTVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUxXQVlTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTUJJRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTUJJRU5UX0FORF9ESUZGVVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTkQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FORF9JTlZFUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQU5EX1JFVkVSU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JBQ0siLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JMRU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTFVFX0JJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JZVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NDVyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ0xBTVBfVE9fRURHRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ0xFQVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0FSUkFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9CVUZGRVJfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9MT0dJQ19PUCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfTUFURVJJQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT05TVEFOVF9BVFRFTlVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09QWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09QWV9JTlZFUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ1VMTF9GQUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DVyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVDQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQ1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIX0JJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIX0JVRkZFUl9CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIX1RFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RJRkZVU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RJVEhFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRE9OVF9DQVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EU1RfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RTVF9DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRU1JU1NJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0VRVUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9FUVVJViIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRVhQIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9FWFAyIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9FWFRFTlNJT05TIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GQUxTRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRkFTVEVTVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRklYRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZMQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZMT0FUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GT0ciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZPR19DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRk9HX0RFTlNJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZPR19FTkQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZPR19ISU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GT0dfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRk9HX1NUQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUk9OVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJPTlRfQU5EX0JBQ0siLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0dFUVVBTCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfR1JFQVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfR1JFRU5fQklUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVRfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTkNSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlZBTElEX0VOVU0iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lOVkFMSURfT1BFUkFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlZBTElEX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlZFUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0tFRVAiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xFUVVBTCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTEVTUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElHSFQwIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSUdIVDEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJR0hUMiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElHSFQzIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSUdIVDQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJR0hUNSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElHSFQ2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSUdIVDciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJR0hUSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSUdIVF9NT0RFTF9BTUJJRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSUdIVF9NT0RFTF9UV09fU0lERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElORUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSU5FQVJfQVRURU5VQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJTkVBUl9NSVBNQVBfTElORUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJTkVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSU5FX0xPT1AiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJTkVfU01PT1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSU5FX1NNT09USF9ISU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSU5FX1NUUklQIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MVU1JTkFOQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xVTUlOQU5DRV9BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0VMRU1FTlRTX0lORElDRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9FTEVNRU5UU19WRVJUSUNFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0xJR0hUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX01PREVMVklFV19TVEFDS19ERVBUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1BST0pFQ1RJT05fU1RBQ0tfREVQVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVhUVVJFX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVhUVVJFX1NUQUNLX0RFUFRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVEVYVFVSRV9VTklUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1ZJRVdQT1JUX0RJTVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01PREVMVklFVyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTU9EVUxBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01VTFRJU0FNUExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9OQU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ORUFSRVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05FVkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9OSUNFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05PT1AiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05PUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTk9STUFMSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9OT1JNQUxfQVJSQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05PVEVRVUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9OT19FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX09ORV9NSU5VU19EU1RfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX09ORV9NSU5VU19EU1RfQ09MT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX09ORV9NSU5VU19TUkNfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX09ORV9NSU5VU19TUkNfQ09MT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX09SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PUl9JTlZFUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT1JfUkVWRVJTRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT1VUX09GX01FTU9SWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUEFDS19BTElHTk1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BBTEVUVEU0X1I1X0c2X0I1X09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUEFMRVRURTRfUkdCNV9BMV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BBTEVUVEU0X1JHQjhfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QQUxFVFRFNF9SR0JBNF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BBTEVUVEU0X1JHQkE4X09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUEFMRVRURThfUjVfRzZfQjVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QQUxFVFRFOF9SR0I1X0ExX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUEFMRVRURThfUkdCOF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BBTEVUVEU4X1JHQkE0X09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUEFMRVRURThfUkdCQThfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QRVJTUEVDVElWRV9DT1JSRUNUSU9OX0hJTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPSU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9JTlRfRkFERV9USFJFU0hPTERfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9JTlRfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9JTlRfU01PT1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0lOVF9TTU9PVEhfSElOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9MWUdPTl9PRkZTRVRfRklMTCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9MWUdPTl9TTU9PVEhfSElOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9TSVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BST0pFQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1FVQURSQVRJQ19BVFRFTlVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVEX0JJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRVBFQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFUExBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFU0NBTEVfTk9STUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQkEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFX0FMUEhBX1RPX09ORSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFX0NPVkVSQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQ0lTU09SX1RFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NFVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0hJTklORVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TSE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU01PT1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TTU9PVEhfTElORV9XSURUSF9SQU5HRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU01PT1RIX1BPSU5UX1NJWkVfUkFOR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NQRUNVTEFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TUE9UX0NVVE9GRiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1BPVF9ESVJFQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NQT1RfRVhQT05FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NSQ19BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1JDX0FMUEhBX1NBVFVSQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TUkNfQ09MT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NUQUNLX09WRVJGTE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEFDS19VTkRFUkZMT1ciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfQklUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9CVUZGRVJfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX1RFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NVQlBJWEVMX0JJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUwIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTEwIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUxMiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUxNSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMTciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUxOCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUyMiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUyNSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMjciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUyOCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTMwIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMzEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkU0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFNSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkU3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFOCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfMkQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQ09PUkRfQVJSQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfRU5WIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0VOVl9DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9FTlZfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9NQUdfRklMVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX01JTl9GSUxURVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfV1JBUF9TIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX1dSQVBfVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVFJJQU5HTEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUklBTkdMRV9GQU4iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RSSUFOR0xFX1NUUklQIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUlVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlBBQ0tfQUxJR05NRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9CWVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9TSE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfU0hPUlRfNV82XzUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZFTkRPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSU0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSVEVYX0FSUkFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9YT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1pFUk8iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9HTEVTMTBFeHQiIHNpbmNlPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUXVlcnlNYXRyaXh4T0VTKExqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0ludEJ1ZmZlcjspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUXVlcnlNYXRyaXh4T0VTKFtJSVtJSSlJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvR0xFUzExIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3BlbmdsL0dMRVMxMCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmluZEJ1ZmZlcihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xCdWZmZXJEYXRhKElJTGphdmEvbmlvL0J1ZmZlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJ1ZmZlclN1YkRhdGEoSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xpcFBsYW5lZihJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDbGlwUGxhbmVmKElbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xpcFBsYW5leChJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xpcFBsYW5leChJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvbG9yNHViKEJCQkIpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29sb3JQb2ludGVyKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVsZXRlQnVmZmVycyhJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVsZXRlQnVmZmVycyhJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdFbGVtZW50cyhJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdlbkJ1ZmZlcnMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdlbkJ1ZmZlcnMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRCb29sZWFudihJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0Qm9vbGVhbnYoSVtaSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEJ1ZmZlclBhcmFtZXRlcml2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldENsaXBQbGFuZWYoSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0Q2xpcFBsYW5lZihJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldENsaXBQbGFuZXgoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldENsaXBQbGFuZXgoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRGaXhlZHYoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEZpeGVkdihJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEZsb2F0dihJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRGbG9hdHYoSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRMaWdodGZ2KElJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRMaWdodGZ2KElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldExpZ2h0eHYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRMaWdodHh2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldE1hdGVyaWFsZnYoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldE1hdGVyaWFsZnYoSUlbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0TWF0ZXJpYWx4dihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldE1hdGVyaWFseHYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4RW52ZnYoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleEVudmZ2KElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleEVudml2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4RW52aXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4RW52eHYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhFbnZ4dihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhQYXJhbWV0ZXJmdihJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4UGFyYW1ldGVyZnYoSUlbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4UGFyYW1ldGVyaXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhQYXJhbWV0ZXJpdihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhQYXJhbWV0ZXJ4dihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleFBhcmFtZXRlcnh2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbElzQnVmZmVyKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdsSXNFbmFibGVkKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdsSXNUZXh0dXJlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTm9ybWFsUG9pbnRlcihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUG9pbnRQYXJhbWV0ZXJmKElGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBvaW50UGFyYW1ldGVyZnYoSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUG9pbnRQYXJhbWV0ZXJmdihJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBvaW50UGFyYW1ldGVyeChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb2ludFBhcmFtZXRlcnh2KElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb2ludFBhcmFtZXRlcnh2KElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUG9pbnRTaXplUG9pbnRlck9FUyhJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleENvb3JkUG9pbnRlcihJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEVudmkoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEVudml2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4RW52aXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4UGFyYW1ldGVyZnYoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcmZ2KElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcmkoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcml2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4UGFyYW1ldGVyaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4UGFyYW1ldGVyeHYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhQYXJhbWV0ZXJ4dihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xWZXJ0ZXhQb2ludGVyKElJSUkpViIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUNUSVZFX1RFWFRVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FERF9TSUdORUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FMUEhBX1NDQUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTFBIQV9URVNUX0ZVTkMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FMUEhBX1RFU1RfUkVGIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BUlJBWV9CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTEVORF9EU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JMRU5EX1NSQyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQlVGRkVSX0FDQ0VTUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQlVGRkVSX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JVRkZFUl9VU0FHRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ0xJRU5UX0FDVElWRV9URVhUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DTElQX1BMQU5FMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ0xJUF9QTEFORTEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NMSVBfUExBTkUyIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DTElQX1BMQU5FMyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ0xJUF9QTEFORTQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NMSVBfUExBTkU1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BUlJBWV9CVUZGRVJfQklORElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVJSQVlfUE9JTlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVJSQVlfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVJSQVlfU1RSSURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BUlJBWV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9DTEVBUl9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfV1JJVEVNQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01CSU5FIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01CSU5FX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01CSU5FX1JHQiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09OU1RBTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPT1JEX1JFUExBQ0VfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DVUxMX0ZBQ0VfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ1VSUkVOVF9DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ1VSUkVOVF9OT1JNQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NVUlJFTlRfVEVYVFVSRV9DT09SRFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIX0NMRUFSX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9GVU5DIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9SQU5HRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVQVEhfV1JJVEVNQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ET1QzX1JHQiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRE9UM19SR0JBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EWU5BTUlDX0RSQVciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUk9OVF9GQUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9HRU5FUkFURV9NSVBNQVAiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0dFTkVSQVRFX01JUE1BUF9ISU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlRFUlBPTEFURSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElORV9XSURUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTE9HSUNfT1BfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFUUklYX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9DTElQX1BMQU5FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTU9ERUxWSUVXX01BVFJJWCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTU9ERUxWSUVXX01BVFJJWF9GTE9BVF9BU19JTlRfQklUU19PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01PREVMVklFV19TVEFDS19ERVBUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTk9STUFMX0FSUkFZX0JVRkZFUl9CSU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9OT1JNQUxfQVJSQVlfUE9JTlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTk9STUFMX0FSUkFZX1NUUklERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTk9STUFMX0FSUkFZX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX09QRVJBTkQwX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PUEVSQU5EMF9SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX09QRVJBTkQxX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PUEVSQU5EMV9SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX09QRVJBTkQyX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PUEVSQU5EMl9SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPSU5UX0RJU1RBTkNFX0FUVEVOVUFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0lOVF9GQURFX1RIUkVTSE9MRF9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0lOVF9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0lOVF9TSVpFX0FSUkFZX0JVRkZFUl9CSU5ESU5HX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9JTlRfU0laRV9BUlJBWV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPSU5UX1NJWkVfQVJSQVlfUE9JTlRFUl9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPSU5UX1NJWkVfQVJSQVlfU1RSSURFX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9JTlRfU0laRV9BUlJBWV9UWVBFX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9JTlRfU0laRV9NQVgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPSU5UX1NJWkVfTUlOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0lOVF9TUFJJVEVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0xZR09OX09GRlNFVF9GQUNUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QUkVWSU9VUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJJTUFSWV9DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJPSkVDVElPTl9NQVRSSVgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BST0pFQ1RJT05fTUFUUklYX0ZMT0FUX0FTX0lOVF9CSVRTX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJPSkVDVElPTl9TVEFDS19ERVBUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkdCX1NDQUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQU1QTEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQU1QTEVfQlVGRkVSUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQ0lTU09SX0JPWCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0hBREVfTU9ERUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NSQzBfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NSQzBfUkdCIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TUkMxX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TUkMxX1JHQiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1JDMl9BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1JDMl9SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NUQVRJQ19EUkFXIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX0ZBSUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfRlVOQyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX1JFRiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9WQUxVRV9NQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX1dSSVRFTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1VCVFJBQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQklORElOR18yRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DT09SRF9BUlJBWV9CVUZGRVJfQklORElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DT09SRF9BUlJBWV9QT0lOVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NPT1JEX0FSUkFZX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQ09PUkRfQVJSQVlfU1RSSURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NPT1JEX0FSUkFZX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfTUFUUklYIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX01BVFJJWF9GTE9BVF9BU19JTlRfQklUU19PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfU1RBQ0tfREVQVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZFUlRFWF9BUlJBWV9CVUZGRVJfQklORElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSVEVYX0FSUkFZX1BPSU5URVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZFUlRFWF9BUlJBWV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9WRVJURVhfQVJSQVlfU1RSSURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9WRVJURVhfQVJSQVlfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVklFV1BPUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1dSSVRFX09OTFkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9HTEVTMTFFeHQiIHNpbmNlPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQWxwaGFGdW5jeE9FUyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xCaW5kRnJhbWVidWZmZXJPRVMoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmluZFJlbmRlcmJ1ZmZlck9FUyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xCbGVuZEVxdWF0aW9uT0VTKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmxlbmRFcXVhdGlvblNlcGFyYXRlT0VTKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJsZW5kRnVuY1NlcGFyYXRlT0VTKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c09FUyhJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsZWFyQ29sb3J4T0VTKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xlYXJEZXB0aGZPRVMoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDbGVhckRlcHRoeE9FUyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsaXBQbGFuZWZPRVMoSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xpcFBsYW5lZk9FUyhJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsaXBQbGFuZXhPRVMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsaXBQbGFuZXhPRVMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDb2xvcjR4T0VTKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ3VycmVudFBhbGV0dGVNYXRyaXhPRVMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZWxldGVGcmFtZWJ1ZmZlcnNPRVMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZUZyYW1lYnVmZmVyc09FUyhJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNPRVMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNPRVMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZXB0aFJhbmdlZk9FUyhGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZXB0aFJhbmdleE9FUyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3VGV4Zk9FUyhGRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3VGV4ZnZPRVMoTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3VGV4ZnZPRVMoW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdUZXhpT0VTKElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdUZXhpdk9FUyhMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3VGV4aXZPRVMoW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdUZXhzT0VTKFNTU1NTKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdUZXhzdk9FUyhMamF2YS9uaW8vU2hvcnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdUZXhzdk9FUyhbU0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd1RleHhPRVMoSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd1RleHh2T0VTKExqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdUZXh4dk9FUyhbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRUdMSW1hZ2VUYXJnZXRSZW5kZXJidWZmZXJTdG9yYWdlT0VTKElMamF2YS9uaW8vQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xFR0xJbWFnZVRhcmdldFRleHR1cmUyRE9FUyhJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRm9neE9FUyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGb2d4dk9FUyhJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRm9neHZPRVMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlck9FUyhJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEZyYW1lYnVmZmVyVGV4dHVyZTJET0VTKElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEZydXN0dW1mT0VTKEZGRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGcnVzdHVteE9FUyhJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2VuRnJhbWVidWZmZXJzT0VTKElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZW5GcmFtZWJ1ZmZlcnNPRVMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZW5SZW5kZXJidWZmZXJzT0VTKElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZW5SZW5kZXJidWZmZXJzT0VTKElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2VuZXJhdGVNaXBtYXBPRVMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRDbGlwUGxhbmVmT0VTKElMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldENsaXBQbGFuZWZPRVMoSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRDbGlwUGxhbmV4T0VTKElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRDbGlwUGxhbmV4T0VTKElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0Rml4ZWR2T0VTKElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRGaXhlZHZPRVMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdk9FUyhJSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdk9FUyhJSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0TGlnaHR4dk9FUyhJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldExpZ2h0eHZPRVMoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0TWF0ZXJpYWx4dk9FUyhJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldE1hdGVyaWFseHZPRVMoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZPRVMoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdk9FUyhJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhFbnZ4dk9FUyhJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleEVudnh2T0VTKElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleEdlbmZ2T0VTKElJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhHZW5mdk9FUyhJSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhHZW5pdk9FUyhJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleEdlbml2T0VTKElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleEdlbnh2T0VTKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4R2VueHZPRVMoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4UGFyYW1ldGVyeHZPRVMoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhQYXJhbWV0ZXJ4dk9FUyhJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xJc0ZyYW1lYnVmZmVyT0VTKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdsSXNSZW5kZXJidWZmZXJPRVMoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xMaWdodE1vZGVseE9FUyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xMaWdodE1vZGVseHZPRVMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpZ2h0TW9kZWx4dk9FUyhJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpZ2h0eE9FUyhJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTGlnaHR4dk9FUyhJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpZ2h0eHZPRVMoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTGluZVdpZHRoeE9FUyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExvYWRNYXRyaXh4T0VTKExqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExvYWRNYXRyaXh4T0VTKFtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xMb2FkUGFsZXR0ZUZyb21Nb2RlbFZpZXdNYXRyaXhPRVMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE1hdGVyaWFseE9FUyhJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTWF0ZXJpYWx4dk9FUyhJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE1hdGVyaWFseHZPRVMoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTWF0cml4SW5kZXhQb2ludGVyT0VTKElJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE11bHRNYXRyaXh4T0VTKExqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE11bHRNYXRyaXh4T0VTKFtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xNdWx0aVRleENvb3JkNHhPRVMoSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTm9ybWFsM3hPRVMoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE9ydGhvZk9FUyhGRkZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsT3J0aG94T0VTKElJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb2ludFBhcmFtZXRlcnhPRVMoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUG9pbnRQYXJhbWV0ZXJ4dk9FUyhJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUG9pbnRQYXJhbWV0ZXJ4dk9FUyhJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBvaW50U2l6ZXhPRVMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb2x5Z29uT2Zmc2V0eE9FUyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xSZW5kZXJidWZmZXJTdG9yYWdlT0VTKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUm90YXRleE9FUyhJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFNhbXBsZUNvdmVyYWdleE9FUyhJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTY2FsZXhPRVMoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEVudnhPRVMoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEVudnh2T0VTKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4RW52eHZPRVMoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4R2VuZk9FUyhJSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4R2VuZnZPRVMoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEdlbmZ2T0VTKElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEdlbmlPRVMoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEdlbml2T0VTKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4R2VuaXZPRVMoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4R2VueE9FUyhJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4R2VueHZPRVMoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhHZW54dk9FUyhJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhQYXJhbWV0ZXJ4T0VTKElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhQYXJhbWV0ZXJ4dk9FUyhJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcnh2T0VTKElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRyYW5zbGF0ZXhPRVMoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFdlaWdodFBvaW50ZXJPRVMoSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8ZmllbGQgbmFtZT0iR0xfM0RDX1hZX0FNRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfM0RDX1hfQU1EIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BVENfUkdCQV9FWFBMSUNJVF9BTFBIQV9BTUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9BTFBIQV9BTUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FUQ19SR0JfQU1EIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CR1JBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTEVORF9EU1RfQUxQSEFfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTEVORF9EU1RfUkdCX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQkxFTkRfRVFVQVRJT05fQUxQSEFfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTEVORF9FUVVBVElPTl9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JMRU5EX0VRVUFUSU9OX1JHQl9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JMRU5EX1NSQ19BTFBIQV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JMRU5EX1NSQ19SR0JfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CVUZGRVJfQUNDRVNTX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQlVGRkVSX01BUFBFRF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JVRkZFUl9NQVBfUE9JTlRFUl9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0FUVEFDSE1FTlQwX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ1VSUkVOVF9QQUxFVFRFX01BVFJJWF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQ1JfV1JBUF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9BVFRBQ0hNRU5UX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVQVEhfQ09NUE9ORU5UMTZfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9DT01QT05FTlQyNF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVQVEhfU1RFTkNJTF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0VUQzFfUkdCOF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZJWEVEX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0JJTkRJTkdfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OU19PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRk9STUFUU19PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZVTkNfQUREX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlVOQ19TVUJUUkFDVF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lOQ1JfV1JBUF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFUUklYX0lOREVYX0FSUkFZX0JVRkZFUl9CSU5ESU5HX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFUUklYX0lOREVYX0FSUkFZX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFUUklYX0lOREVYX0FSUkFZX1BPSU5URVJfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVRSSVhfSU5ERVhfQVJSQVlfU0laRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BVFJJWF9JTkRFWF9BUlJBWV9TVFJJREVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVRSSVhfSU5ERVhfQVJSQVlfVFlQRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BVFJJWF9QQUxFVFRFX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9QQUxFVFRFX01BVFJJQ0VTX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVkVSVEVYX1VOSVRTX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUlSUk9SRURfUkVQRUFUX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTU9ERUxWSUVXX01BVFJJWF9GTE9BVF9BU19JTlRfQklUU19PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05PTkVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9OT1JNQUxfTUFQX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJPSkVDVElPTl9NQVRSSVhfRkxPQVRfQVNfSU5UX0JJVFNfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRUZMRUNUSU9OX01BUF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUl9BTFBIQV9TSVpFX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVOREVSQlVGRkVSX0JJTkRJTkdfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRU5ERVJCVUZGRVJfQkxVRV9TSVpFX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVOREVSQlVGRkVSX0RFUFRIX1NJWkVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRU5ERVJCVUZGRVJfR1JFRU5fU0laRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUl9IRUlHSFRfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVOREVSQlVGRkVSX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVOREVSQlVGRkVSX1JFRF9TSVpFX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUl9XSURUSF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFUVVJUkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfT0VTIiBzaW5jZT0iMTUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQjU2NV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQjVfQTFfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0I4X09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkdCQTRfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0JBOF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRVJfRVhURVJOQUxfT0VTIiBzaW5jZT0iMTUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfQVRUQUNITUVOVF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfSU5ERVgxX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9JTkRFWDRfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX0lOREVYOF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQklORElOR19FWFRFUk5BTF9PRVMiIHNpbmNlPSIxNSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DUk9QX1JFQ1RfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1hfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1lfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1pfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NVQkVfTUFQX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9FWFRFUk5BTF9PRVMiIHNpbmNlPSIxNSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9HRU5fTU9ERV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfR0VOX1NUUl9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfTUFUUklYX0ZMT0FUX0FTX0lOVF9CSVRTX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOU0lHTkVEX0lOVF8yNF84X09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfV0VJR0hUX0FSUkFZX0JVRkZFUl9CSU5ESU5HX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfV0VJR0hUX0FSUkFZX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfV0VJR0hUX0FSUkFZX1BPSU5URVJfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9XRUlHSFRfQVJSQVlfU0laRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1dFSUdIVF9BUlJBWV9TVFJJREVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9XRUlHSFRfQVJSQVlfVFlQRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1dSSVRFX09OTFlfT0VTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvR0xFUzIwIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEFjdGl2ZVRleHR1cmUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xBdHRhY2hTaGFkZXIoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmluZEF0dHJpYkxvY2F0aW9uKElJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJpbmRCdWZmZXIoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmluZEZyYW1lYnVmZmVyKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJpbmRSZW5kZXJidWZmZXIoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmluZFRleHR1cmUoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmxlbmRDb2xvcihGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJsZW5kRXF1YXRpb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmxlbmRGdW5jKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJsZW5kRnVuY1NlcGFyYXRlKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQnVmZmVyRGF0YShJSUxqYXZhL25pby9CdWZmZXI7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xCdWZmZXJTdWJEYXRhKElJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDbGVhcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsZWFyQ29sb3IoRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDbGVhckRlcHRoZihGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsZWFyU3RlbmNpbChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvbG9yTWFzayhaWlpaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvbXBpbGVTaGFkZXIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDb21wcmVzc2VkVGV4SW1hZ2UyRChJSUlJSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoSUlJSUlJSUlMamF2YS9uaW8vQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDb3B5VGV4SW1hZ2UyRChJSUlJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDb3B5VGV4U3ViSW1hZ2UyRChJSUlJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDcmVhdGVQcm9ncmFtKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDcmVhdGVTaGFkZXIoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDdWxsRmFjZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZUJ1ZmZlcnMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZUJ1ZmZlcnMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZUZyYW1lYnVmZmVycyhJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZVByb2dyYW0oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZWxldGVSZW5kZXJidWZmZXJzKElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZWxldGVSZW5kZXJidWZmZXJzKElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVsZXRlU2hhZGVyKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVsZXRlVGV4dHVyZXMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZVRleHR1cmVzKElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVwdGhGdW5jKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVwdGhNYXNrKFopViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVwdGhSYW5nZWYoRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGV0YWNoU2hhZGVyKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERpc2FibGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3QXJyYXlzKElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3RWxlbWVudHMoSUlJSSlWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd0VsZW1lbnRzKElJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEVuYWJsZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRmluaXNoKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGbHVzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGcm9udEZhY2UoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZW5CdWZmZXJzKElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZW5CdWZmZXJzKElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2VuRnJhbWVidWZmZXJzKElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZW5GcmFtZWJ1ZmZlcnMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZW5SZW5kZXJidWZmZXJzKElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZW5SZW5kZXJidWZmZXJzKElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2VuVGV4dHVyZXMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdlblRleHR1cmVzKElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2VuZXJhdGVNaXBtYXAoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRBY3RpdmVBdHRyaWIoSUlJTGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7QilWIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0QWN0aXZlQXR0cmliKElJSVtJSVtJSVtJSVtCSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRBY3RpdmVBdHRyaWIoSUlMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRBY3RpdmVBdHRyaWIoSUlbSUlbSUkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEFjdGl2ZVVuaWZvcm0oSUlJTGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7QilWIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0QWN0aXZlVW5pZm9ybShJSUlbSUlbSUlbSUlbQkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0QWN0aXZlVW5pZm9ybShJSUxqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0ludEJ1ZmZlcjspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEFjdGl2ZVVuaWZvcm0oSUlbSUlbSUkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEF0dGFjaGVkU2hhZGVycyhJSUxqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0QXR0YWNoZWRTaGFkZXJzKElJW0lJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEF0dHJpYkxvY2F0aW9uKElMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0Qm9vbGVhbnYoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEJvb2xlYW52KElbWkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0QnVmZmVyUGFyYW1ldGVyaXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRFcnJvcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0RmxvYXR2KElMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEZsb2F0dihJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KElJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KElJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRJbnRlZ2VydihJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0SW50ZWdlcnYoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRQcm9ncmFtSW5mb0xvZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0UHJvZ3JhbWl2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0UHJvZ3JhbWl2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0U2hhZGVySW5mb0xvZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KElJTGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoSUlbSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0U2hhZGVyU291cmNlKEkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFNoYWRlclNvdXJjZShJSUxqYXZhL25pby9JbnRCdWZmZXI7QilWIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0U2hhZGVyU291cmNlKElJW0lJW0JJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFNoYWRlcml2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0U2hhZGVyaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0U3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhQYXJhbWV0ZXJmdihJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4UGFyYW1ldGVyZnYoSUlbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4UGFyYW1ldGVyaXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhQYXJhbWV0ZXJpdihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRVbmlmb3JtTG9jYXRpb24oSUxqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRVbmlmb3JtZnYoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFVuaWZvcm1mdihJSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRVbmlmb3JtaXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRVbmlmb3JtaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VmVydGV4QXR0cmliZnYoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFZlcnRleEF0dHJpYmZ2KElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFZlcnRleEF0dHJpYml2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VmVydGV4QXR0cmliaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsSGludChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xJc0J1ZmZlcihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbElzRW5hYmxlZChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbElzRnJhbWVidWZmZXIoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xJc1Byb2dyYW0oSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xJc1JlbmRlcmJ1ZmZlcihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbElzU2hhZGVyKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdsSXNUZXh0dXJlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTGluZVdpZHRoKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTGlua1Byb2dyYW0oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQaXhlbFN0b3JlaShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb2x5Z29uT2Zmc2V0KEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFJlYWRQaXhlbHMoSUlJSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xSZW5kZXJidWZmZXJTdG9yYWdlKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU2FtcGxlQ292ZXJhZ2UoRlopViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU2Npc3NvcihJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFNoYWRlckJpbmFyeShJTGphdmEvbmlvL0ludEJ1ZmZlcjtJTGphdmEvbmlvL0J1ZmZlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFNoYWRlckJpbmFyeShJW0lJSUxqYXZhL25pby9CdWZmZXI7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTaGFkZXJTb3VyY2UoSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTdGVuY2lsRnVuYyhJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFN0ZW5jaWxNYXNrKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU3RlbmNpbE1hc2tTZXBhcmF0ZShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTdGVuY2lsT3AoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFN0ZW5jaWxPcFNlcGFyYXRlKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4SW1hZ2UyRChJSUlJSUlJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcmYoSUlGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcmZ2KElJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhQYXJhbWV0ZXJmdihJSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhQYXJhbWV0ZXJpKElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhQYXJhbWV0ZXJpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcml2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFN1YkltYWdlMkQoSUlJSUlJSUlMamF2YS9uaW8vQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtMWYoSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTFmdihJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTFmdihJSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtMWkoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTFpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm0xaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTJmKElGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtMmZ2KElJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtMmZ2KElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm0yaShJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTJpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm0yaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTNmKElGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTNmdihJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTNmdihJSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtM2koSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtM2l2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTNpdihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtNGYoSUZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTRmdihJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTRmdihJSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtNGkoSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTRpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm00aXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybU1hdHJpeDJmdihJSVpMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm1NYXRyaXgyZnYoSUlaW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm1NYXRyaXgzZnYoSUlaTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtTWF0cml4M2Z2KElJWltGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtTWF0cml4NGZ2KElJWkxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybU1hdHJpeDRmdihJSVpbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVXNlUHJvZ3JhbShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZhbGlkYXRlUHJvZ3JhbShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZlcnRleEF0dHJpYjFmKElGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZlcnRleEF0dHJpYjFmdihJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xWZXJ0ZXhBdHRyaWIxZnYoSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xWZXJ0ZXhBdHRyaWIyZihJRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVmVydGV4QXR0cmliMmZ2KElMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZlcnRleEF0dHJpYjJmdihJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZlcnRleEF0dHJpYjNmKElGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVmVydGV4QXR0cmliM2Z2KElMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZlcnRleEF0dHJpYjNmdihJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZlcnRleEF0dHJpYjRmKElGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZlcnRleEF0dHJpYjRmdihJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xWZXJ0ZXhBdHRyaWI0ZnYoSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKElJSVpJSSlWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVmVydGV4QXR0cmliUG9pbnRlcihJSUlaSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZpZXdwb3J0KElJSUkpViIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUNUSVZFX0FUVFJJQlVURVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUNUSVZFX1RFWFRVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FDVElWRV9VTklGT1JNUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTFBIQV9CSVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTFdBWVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FSUkFZX0JVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FUVEFDSEVEX1NIQURFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JBQ0siLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JMRU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTEVORF9DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQkxFTkRfRFNUX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTEVORF9EU1RfUkdCIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTEVORF9FUVVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQkxFTkRfRVFVQVRJT05fQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JMRU5EX0VRVUFUSU9OX1JHQiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQkxFTkRfU1JDX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTEVORF9TUkNfUkdCIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTFVFX0JJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JPT0xfVkVDMiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQk9PTF9WRUMzIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CT09MX1ZFQzQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JVRkZFUl9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CVUZGRVJfVVNBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JZVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NDVyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ0xBTVBfVE9fRURHRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVRUQUNITUVOVDAiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0JVRkZFUl9CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0NMRUFSX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9XUklURU1BU0siLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBJTEVfU1RBVFVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09OU1RBTlRfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTlNUQU5UX0NPTE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DVUxMX0ZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NVTExfRkFDRV9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DVVJSRU5UX1BST0dSQU0iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ1ciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQ1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQ1JfV1JBUCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVMRVRFX1NUQVRVUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVQVEhfQVRUQUNITUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVQVEhfQklUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVQVEhfQlVGRkVSX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVQVEhfQ0xFQVJfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIX0NPTVBPTkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVQVEhfQ09NUE9ORU5UMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIX0ZVTkMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIX1JBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9URVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9XUklURU1BU0siLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RJVEhFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRE9OVF9DQVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EU1RfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RTVF9DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRFlOQU1JQ19EUkFXIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRVFVQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0VYVEVOU0lPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZBTFNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GQVNURVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GSVhFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRkxPQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZMT0FUX01BVDIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZMT0FUX01BVDMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZMT0FUX01BVDQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZMT0FUX1ZFQzIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZMT0FUX1ZFQzMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZMT0FUX1ZFQzQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQUdNRU5UX1NIQURFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0JJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUk9OVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJPTlRfQU5EX0JBQ0siLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZST05UX0ZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZVTkNfQUREIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZVTkNfU1VCVFJBQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0dFTkVSQVRFX01JUE1BUF9ISU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9HRVFVQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0dSRUFURVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0dSRUVOX0JJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0hJR0hfRkxPQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0hJR0hfSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTkNSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTkNSX1dSQVAiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lORk9fTE9HX0xFTkdUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlRfVkVDMiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5UX1ZFQzMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lOVF9WRUM0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlZBTElEX0VOVU0iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlZBTElEX09QRVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5WQUxJRF9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5WRVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9LRUVQIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MRVFVQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJTkVBUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElORUFSX01JUE1BUF9MSU5FQVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElORVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJTkVfTE9PUCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElORV9TVFJJUCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElORV9XSURUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElOS19TVEFUVVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xPV19GTE9BVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTE9XX0lOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTFVNSU5BTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MVU1JTkFOQ0VfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVEVYVFVSRV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVkFSWUlOR19WRUNUT1JTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVkVSVEVYX0FUVFJJQlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9WSUVXUE9SVF9ESU1TIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NRURJVU1fRkxPQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01FRElVTV9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01JUlJPUkVEX1JFUEVBVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTkVBUkVTVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ORVZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTklDRVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9OT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9OT1RFUVVBTCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTk9fRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT05FX01JTlVTX0RTVF9BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT05FX01JTlVTX0RTVF9DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT05FX01JTlVTX1NSQ19BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT05FX01JTlVTX1NSQ19DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT1VUX09GX01FTU9SWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUEFDS19BTElHTk1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPSU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0xZR09OX09GRlNFVF9GSUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0xZR09OX09GRlNFVF9VTklUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVEX0JJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRU5ERVJCVUZGRVJfQkxVRV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRU5ERVJCVUZGRVJfREVQVEhfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUl9IRUlHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUl9SRURfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVOREVSQlVGRkVSX1dJRFRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRU5ERVJFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVQRUFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRVBMQUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQjU2NSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkdCNV9BMSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkdCQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkdCQTQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRVJfMkQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRVJfQ1VCRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQU1QTEVfQlVGRkVSUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFX0NPVkVSQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NDSVNTT1JfQk9YIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQ0lTU09SX1RFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NIQURFUl9CSU5BUllfRk9STUFUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0hBREVSX0NPTVBJTEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TSEFERVJfU09VUkNFX0xFTkdUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0hBREVSX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0hPUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NSQ19BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1JDX0FMUEhBX1NBVFVSQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TUkNfQ09MT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NUQVRJQ19EUkFXIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX0FUVEFDSE1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfQkFDS19GQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX0JBQ0tfRlVOQyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9CQUNLX1JFRiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0siLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfQkFDS19XUklURU1BU0siLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfQklUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9CVUZGRVJfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX0ZBSUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfRlVOQyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9JTkRFWCIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfSU5ERVg4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfUkVGIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX1RFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfVkFMVUVfTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9XUklURU1BU0siLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NUUkVBTV9EUkFXIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVUJQSVhFTF9CSVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUxMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTExIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUxMyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMTUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUxNiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUxOSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUyMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMjIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUyMyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMjUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUyNiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUyOSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUzMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTMxIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFNCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkU2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFNyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkU5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFXzJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0JJTkRJTkdfMkQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DVUJFX01BUCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9NQUdfRklMVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX01JTl9GSUxURVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfV1JBUF9TIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX1dSQVBfVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVFJJQU5HTEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUklBTkdMRV9GQU4iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RSSUFOR0xFX1NUUklQIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUlVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlBBQ0tfQUxJR05NRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9CWVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOU0lHTkVEX1NIT1JUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9TSE9SVF81XzZfNSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkFMSURBVEVfU1RBVFVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9WRU5ET1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZFUlNJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9WRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSVEVYX1NIQURFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVklFV1BPUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1pFUk8iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9HTEVTMzAiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3BlbmdsL0dMRVMyMCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmVnaW5RdWVyeShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xCZWdpblRyYW5zZm9ybUZlZWRiYWNrKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmluZEJ1ZmZlckJhc2UoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJpbmRCdWZmZXJSYW5nZShJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xCaW5kU2FtcGxlcihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xCaW5kVHJhbnNmb3JtRmVlZGJhY2soSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmluZFZlcnRleEFycmF5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmxpdEZyYW1lYnVmZmVyKElJSUlJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xlYXJCdWZmZXJmaShJSUZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsZWFyQnVmZmVyZnYoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsZWFyQnVmZmVyZnYoSUlbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xlYXJCdWZmZXJpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsZWFyQnVmZmVyaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xlYXJCdWZmZXJ1aXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDbGVhckJ1ZmZlcnVpdihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDbGllbnRXYWl0U3luYyhKSUopSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29tcHJlc3NlZFRleEltYWdlM0QoSUlJSUlJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvbXByZXNzZWRUZXhJbWFnZTNEKElJSUlJSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29tcHJlc3NlZFRleFN1YkltYWdlM0QoSUlJSUlJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29tcHJlc3NlZFRleFN1YkltYWdlM0QoSUlJSUlJSUlJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvcHlCdWZmZXJTdWJEYXRhKElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvcHlUZXhTdWJJbWFnZTNEKElJSUlJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZWxldGVRdWVyaWVzKElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZWxldGVRdWVyaWVzKElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVsZXRlU2FtcGxlcnMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZVNhbXBsZXJzKElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVsZXRlU3luYyhKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcyhJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzKElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVsZXRlVmVydGV4QXJyYXlzKElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZWxldGVWZXJ0ZXhBcnJheXMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3QXJyYXlzSW5zdGFuY2VkKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd0J1ZmZlcnMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdCdWZmZXJzKElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkKElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdFbGVtZW50c0luc3RhbmNlZChJSUlMamF2YS9uaW8vQnVmZmVyO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd1JhbmdlRWxlbWVudHMoSUlJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdSYW5nZUVsZW1lbnRzKElJSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRW5kUXVlcnkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xFbmRUcmFuc2Zvcm1GZWVkYmFjaygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRmVuY2VTeW5jKElJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2UoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdlblF1ZXJpZXMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdlblF1ZXJpZXMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZW5TYW1wbGVycyhJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2VuU2FtcGxlcnMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZW5UcmFuc2Zvcm1GZWVkYmFja3MoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdlblRyYW5zZm9ybUZlZWRiYWNrcyhJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdlblZlcnRleEFycmF5cyhJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2VuVmVydGV4QXJyYXlzKElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShJSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoSUlJW0lJW0JJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoSUlMamF2YS9uaW8vQnVmZmVyO0xqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KElJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KElJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRBY3RpdmVVbmlmb3Jtc2l2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjtJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0QWN0aXZlVW5pZm9ybXNpdihJSVtJSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0QnVmZmVyUGFyYW1ldGVyaTY0dihJSUxqYXZhL25pby9Mb25nQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpNjR2KElJW0pJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEJ1ZmZlclBvaW50ZXJ2KElJKUxqYXZhL25pby9CdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRGcmFnRGF0YUxvY2F0aW9uKElMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0SW50ZWdlcjY0aV92KElJTGphdmEvbmlvL0xvbmdCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEludGVnZXI2NGlfdihJSVtKSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRJbnRlZ2VyNjR2KElMamF2YS9uaW8vTG9uZ0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0SW50ZWdlcjY0dihJW0pJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEludGVnZXJpX3YoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRJbnRlZ2VyaV92KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEludGVybmFsZm9ybWF0aXYoSUlJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEludGVybmFsZm9ybWF0aXYoSUlJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRQcm9ncmFtQmluYXJ5KElJTGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFByb2dyYW1CaW5hcnkoSUlbSUlbSUlMamF2YS9uaW8vQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRRdWVyeU9iamVjdHVpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFF1ZXJ5T2JqZWN0dWl2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFF1ZXJ5aXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRRdWVyeWl2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFNhbXBsZXJQYXJhbWV0ZXJmdihJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0U2FtcGxlclBhcmFtZXRlcmZ2KElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFNhbXBsZXJQYXJhbWV0ZXJpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFNhbXBsZXJQYXJhbWV0ZXJpdihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRTdHJpbmdpKElJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0U3luY2l2KEpJSUxqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0U3luY2l2KEpJSVtJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoSUlJTGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7QilWIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKElJSUxqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9CeXRlQnVmZmVyOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhJSUlbSUlbSUlbSUlbQkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKElJTGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhJSVtJSVtJSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFVuaWZvcm1CbG9ja0luZGV4KElMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VW5pZm9ybUluZGljZXMoSVtMamF2YS9sYW5nL1N0cmluZztMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRVbmlmb3JtSW5kaWNlcyhJW0xqYXZhL2xhbmcvU3RyaW5nO1tJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRVbmlmb3JtdWl2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VW5pZm9ybXVpdihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRWZXJ0ZXhBdHRyaWJJaXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRWZXJ0ZXhBdHRyaWJJaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VmVydGV4QXR0cmliSXVpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFZlcnRleEF0dHJpYkl1aXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsSW52YWxpZGF0ZUZyYW1lYnVmZmVyKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsSW52YWxpZGF0ZUZyYW1lYnVmZmVyKElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihJSUxqYXZhL25pby9JbnRCdWZmZXI7SUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoSUlbSUlJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbElzUXVlcnkoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xJc1NhbXBsZXIoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xJc1N5bmMoSilaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xJc1RyYW5zZm9ybUZlZWRiYWNrKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdsSXNWZXJ0ZXhBcnJheShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE1hcEJ1ZmZlclJhbmdlKElJSUkpTGphdmEvbmlvL0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1CaW5hcnkoSUlMamF2YS9uaW8vQnVmZmVyO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVBhcmFtZXRlcmkoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFJlYWRCdWZmZXIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xSZWFkUGl4ZWxzKElJSUlJSUkpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUmVzdW1lVHJhbnNmb3JtRmVlZGJhY2soKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFNhbXBsZXJQYXJhbWV0ZXJmKElJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTYW1wbGVyUGFyYW1ldGVyZnYoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFNhbXBsZXJQYXJhbWV0ZXJmdihJSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTYW1wbGVyUGFyYW1ldGVyaShJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU2FtcGxlclBhcmFtZXRlcml2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU2FtcGxlclBhcmFtZXRlcml2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEltYWdlM0QoSUlJSUlJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhJbWFnZTNEKElJSUlJSUlJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFN0b3JhZ2UyRChJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhTdG9yYWdlM0QoSUlJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFN1YkltYWdlM0QoSUlJSUlJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4U3ViSW1hZ2UzRChJSUlJSUlJSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhJW0xqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTF1aShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtMXVpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm0xdWl2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm0ydWkoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm0ydWl2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTJ1aXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTN1aShJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm0zdWl2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTN1aXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybTR1aShJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtNHVpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm00dWl2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm1CbG9ja0JpbmRpbmcoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm1NYXRyaXgyeDNmdihJSVpMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm1NYXRyaXgyeDNmdihJSVpbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybU1hdHJpeDJ4NGZ2KElJWkxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybU1hdHJpeDJ4NGZ2KElJWltGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtTWF0cml4M3gyZnYoSUlaTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtTWF0cml4M3gyZnYoSUlaW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm1NYXRyaXgzeDRmdihJSVpMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVuaWZvcm1NYXRyaXgzeDRmdihJSVpbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybU1hdHJpeDR4MmZ2KElJWkxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVW5pZm9ybU1hdHJpeDR4MmZ2KElJWltGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtTWF0cml4NHgzZnYoSUlaTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xVbmlmb3JtTWF0cml4NHgzZnYoSUlaW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVubWFwQnVmZmVyKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVmVydGV4QXR0cmliRGl2aXNvcihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xWZXJ0ZXhBdHRyaWJJNGkoSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVmVydGV4QXR0cmliSTRpdihJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVmVydGV4QXR0cmliSTRpdihJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZlcnRleEF0dHJpYkk0dWkoSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVmVydGV4QXR0cmliSTR1aXYoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZlcnRleEF0dHJpYkk0dWl2KElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVmVydGV4QXR0cmliSVBvaW50ZXIoSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVmVydGV4QXR0cmliSVBvaW50ZXIoSUlJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFdhaXRTeW5jKEpJSilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BQ1RJVkVfVU5JRk9STV9CTE9DS1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FDVElWRV9VTklGT1JNX0JMT0NLX01BWF9OQU1FX0xFTkdUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUxSRUFEWV9TSUdOQUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQU5ZX1NBTVBMRVNfUEFTU0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CVUZGRVJfQUNDRVNTX0ZMQUdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CVUZGRVJfTUFQUEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CVUZGRVJfTUFQX0xFTkdUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQlVGRkVSX01BUF9PRkZTRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JVRkZFUl9NQVBfUE9JTlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0FUVEFDSE1FTlQxIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UMTAiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0FUVEFDSE1FTlQxMSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVRUQUNITUVOVDEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UMTMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0FUVEFDSE1FTlQxNCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVRUQUNITUVOVDE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UMiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVRUQUNITUVOVDMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0FUVEFDSE1FTlQ0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UNSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVRUQUNITUVOVDYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0FUVEFDSE1FTlQ3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UOCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVRUQUNITUVOVDkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBBUkVfUkVGX1RPX1RFWFRVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUjExX0VBQyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9SRzExX0VBQyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9SR0I4X0VUQzIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQThfRVRDMl9FQUMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9TUkdCOF9FVEMyIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09ORElUSU9OX1NBVElTRklFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09QWV9SRUFEX0JVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09QWV9SRUFEX0JVRkZFUl9CSU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT1BZX1dSSVRFX0JVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09QWV9XUklURV9CVUZGRVJfQklORElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ1VSUkVOVF9RVUVSWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVQVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIMjRfU1RFTkNJTDgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIMzJGX1NURU5DSUw4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9DT01QT05FTlQyNCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVQVEhfQ09NUE9ORU5UMzJGIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9TVEVOQ0lMIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RSQVdfQlVGRkVSMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRFJBV19CVUZGRVIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EUkFXX0JVRkZFUjEwIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EUkFXX0JVRkZFUjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EUkFXX0JVRkZFUjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EUkFXX0JVRkZFUjEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EUkFXX0JVRkZFUjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EUkFXX0JVRkZFUjE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EUkFXX0JVRkZFUjIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RSQVdfQlVGRkVSMyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRFJBV19CVUZGRVI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EUkFXX0JVRkZFUjUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RSQVdfQlVGRkVSNiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRFJBV19CVUZGRVI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EUkFXX0JVRkZFUjgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RSQVdfQlVGRkVSOSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRFJBV19GUkFNRUJVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EWU5BTUlDX0NPUFkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RZTkFNSUNfUkVBRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GTE9BVF9NQVQyeDMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZMT0FUX01BVDJ4NCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRkxPQVRfTUFUM3gyIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GTE9BVF9NQVQzeDQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZMT0FUX01BVDR4MiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRkxPQVRfTUFUNHgzIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQkxVRV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9SRURfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9TVEVOQ0lMX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MQVlFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfVU5ERUZJTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9HUkVFTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSEFMRl9GTE9BVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5URVJMRUFWRURfQVRUUklCUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5UXzJfMTBfMTBfMTBfUkVWIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlRfU0FNUExFUl8yRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lOVF9TQU1QTEVSXzNEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlRfU0FNUExFUl9DVUJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlZBTElEX0lOREVYIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQUpPUl9WRVJTSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVBfRkxVU0hfRVhQTElDSVRfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVBfSU5WQUxJREFURV9CVUZGRVJfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVBfSU5WQUxJREFURV9SQU5HRV9CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BUF9SRUFEX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFQX1VOU1lOQ0hST05JWkVEX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFQX1dSSVRFX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfM0RfVEVYVFVSRV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQVJSQVlfVEVYVFVSRV9MQVlFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9DT0xPUl9BVFRBQ0hNRU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0NPTUJJTkVEX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ09NQklORURfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0RSQVdfQlVGRkVSUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0VMRU1FTlRTX0lORElDRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9FTEVNRU5UU19WRVJUSUNFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0VMRU1FTlRfSU5ERVgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9GUkFHTUVOVF9JTlBVVF9DT01QT05FTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9QUk9HUkFNX1RFWEVMX09GRlNFVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1NBTVBMRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9TRVJWRVJfV0FJVF9USU1FT1VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVEVYVFVSRV9MT0RfQklBUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05FTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1VOSUZPUk1fQkxPQ0tfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVkFSWUlOR19DT01QT05FTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVkVSVEVYX09VVFBVVF9DT01QT05FTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUlOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NSU5PUl9WRVJTSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NSU5fUFJPR1JBTV9URVhFTF9PRkZTRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05VTV9FWFRFTlNJT05TIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9OVU1fUFJPR1JBTV9CSU5BUllfRk9STUFUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTlVNX1NBTVBMRV9DT1VOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX09CSkVDVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QQUNLX1JPV19MRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BBQ0tfU0tJUF9QSVhFTFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BBQ0tfU0tJUF9ST1dTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QSVhFTF9QQUNLX0JVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUElYRUxfUEFDS19CVUZGRVJfQklORElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUElYRUxfVU5QQUNLX0JVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUElYRUxfVU5QQUNLX0JVRkZFUl9CSU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJPR1JBTV9CSU5BUllfTEVOR1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QUk9HUkFNX0JJTkFSWV9SRVRSSUVWQUJMRV9ISU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9RVUVSWV9SRVNVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1FVRVJZX1JFU1VMVF9BVkFJTEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1IxMUZfRzExRl9CMTBGIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SMTZGIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SMTZJIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SMTZVSSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUjMyRiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUjMySSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUjMyVUkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1I4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SOEkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1I4VUkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1I4X1NOT1JNIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SQVNURVJJWkVSX0RJU0NBUkQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFQURfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRUFEX0ZSQU1FQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVEX0lOVEVHRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkcxNkYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHMTZJIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRzE2VUkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHMzJGIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRzMySSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkczMlVJIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRzgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHOEkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHOFVJIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRzhfU05PUk0iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQjEwX0EyIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0IxMF9BMlVJIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0IxNkYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQjE2SSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkdCMTZVSSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkdCMzJGIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0IzMkkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQjMyVUkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQjgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQjhJIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0I4VUkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQjhfU05PUk0iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQjlfRTUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQkExNkYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQkExNkkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQkExNlVJIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0JBMzJGIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0JBMzJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0JBMzJVSSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkdCQTgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQkE4SSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkdCQThVSSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkdCQThfU05PUk0iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQkFfSU5URUdFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkdCX0lOVEVHRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHX0lOVEVHRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRVJfMkRfQVJSQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRVJfMkRfQVJSQVlfU0hBRE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQU1QTEVSXzJEX1NIQURPVyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFUl8zRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFUl9CSU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQU1QTEVSX0NVQkVfU0hBRE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TRVBBUkFURV9BVFRSSUJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TSUdOQUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0lHTkVEX05PUk1BTElaRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NSR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NSR0I4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TUkdCOF9BTFBIQTgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NUQVRJQ19DT1BZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEFUSUNfUkVBRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RSRUFNX0NPUFkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NUUkVBTV9SRUFEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TWU5DX0NPTkRJVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1lOQ19GRU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1lOQ19GTEFHUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NZTkNfR1BVX0NPTU1BTkRTX0NPTVBMRVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TWU5DX1NUQVRVUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV8yRF9BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV8zRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9CQVNFX0xFVkVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0JJTkRJTkdfMkRfQVJSQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQklORElOR18zRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0lNTVVUQUJMRV9GT1JNQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfSU1NVVRBQkxFX0xFVkVMUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9NQVhfTEVWRUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfTUFYX0xPRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9NSU5fTE9EIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX1NXSVpaTEVfQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9TV0laWkxFX0IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfU1dJWlpMRV9HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX1NXSVpaTEVfUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9XUkFQX1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RJTUVPVVRfRVhQSVJFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVElNRU9VVF9JR05PUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUkFOU0ZPUk1fRkVFREJBQ0siLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RSQU5TRk9STV9GRUVEQkFDS19CSU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NUQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HX01BWF9MRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOSUZPUk1fQVJSQVlfU1RSSURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STV9JTkRJQ0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTklGT1JNX0JMT0NLX0JJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOSUZPUk1fQkxPQ0tfREFUQV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTklGT1JNX0JMT0NLX0lOREVYIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTklGT1JNX0JMT0NLX05BTUVfTEVOR1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5JRk9STV9CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOSUZPUk1fQlVGRkVSX09GRlNFVF9BTElHTk1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOSUZPUk1fQlVGRkVSX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOSUZPUk1fQlVGRkVSX1NUQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTklGT1JNX0lTX1JPV19NQUpPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5JRk9STV9NQVRSSVhfU1RSSURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTklGT1JNX05BTUVfTEVOR1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTklGT1JNX09GRlNFVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5JRk9STV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTklGT1JNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOUEFDS19JTUFHRV9IRUlHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOUEFDS19ST1dfTEVOR1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlBBQ0tfU0tJUF9JTUFHRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOUEFDS19TS0lQX1BJWEVMUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5QQUNLX1NLSVBfUk9XUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdOQUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfSU5UXzI0XzgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfSU5UXzVfOV85XzlfUkVWIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9JTlRfVkVDMiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfSU5UX1ZFQzMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOU0lHTkVEX0lOVF9WRUM0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9OT1JNQUxJWkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9WRVJURVhfQVJSQVlfQklORElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9WRVJURVhfQVRUUklCX0FSUkFZX0lOVEVHRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1dBSVRfRkFJTEVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvR0xFUzMxIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9HTEVTMzAiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEFjdGl2ZVNoYWRlclByb2dyYW0oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmluZEltYWdlVGV4dHVyZShJSUlaSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJpbmRQcm9ncmFtUGlwZWxpbmUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xCaW5kVmVydGV4QnVmZmVyKElJSkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ3JlYXRlU2hhZGVyUHJvZ3JhbXYoSVtMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVsZXRlUHJvZ3JhbVBpcGVsaW5lcyhJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVsZXRlUHJvZ3JhbVBpcGVsaW5lcyhJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERpc3BhdGNoQ29tcHV0ZShJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGlzcGF0Y2hDb21wdXRlSW5kaXJlY3QoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3QXJyYXlzSW5kaXJlY3QoSUopViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd0VsZW1lbnRzSW5kaXJlY3QoSUlKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEZyYW1lYnVmZmVyUGFyYW1ldGVyaShJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2VuUHJvZ3JhbVBpcGVsaW5lcyhJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2VuUHJvZ3JhbVBpcGVsaW5lcyhJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEJvb2xlYW5pX3YoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRCb29sZWFuaV92KElJW1pJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEZyYW1lYnVmZmVyUGFyYW1ldGVyaXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldE11bHRpc2FtcGxlZnYoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldE11bHRpc2FtcGxlZnYoSUlbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0UHJvZ3JhbUludGVyZmFjZWl2KElJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFByb2dyYW1JbnRlcmZhY2VpdihJSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0UHJvZ3JhbVBpcGVsaW5lSW5mb0xvZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0UHJvZ3JhbVBpcGVsaW5laXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRQcm9ncmFtUGlwZWxpbmVpdihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRQcm9ncmFtUmVzb3VyY2VJbmRleChJSUxqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRQcm9ncmFtUmVzb3VyY2VMb2NhdGlvbihJSUxqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRQcm9ncmFtUmVzb3VyY2VOYW1lKElJSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFByb2dyYW1SZXNvdXJjZWl2KElJSUlMamF2YS9uaW8vSW50QnVmZmVyO0lMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFByb2dyYW1SZXNvdXJjZWl2KElJSUlbSUlJW0lJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleExldmVsUGFyYW1ldGVyZnYoSUlJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhMZXZlbFBhcmFtZXRlcmZ2KElJSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhMZXZlbFBhcmFtZXRlcml2KElJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleExldmVsUGFyYW1ldGVyaXYoSUlJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbElzUHJvZ3JhbVBpcGVsaW5lKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTWVtb3J5QmFycmllcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE1lbW9yeUJhcnJpZXJCeVJlZ2lvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtMWYoSUlGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtMWZ2KElJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm0xZnYoSUlJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtMWkoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtMWl2KElJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtMWl2KElJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcm9ncmFtVW5pZm9ybTF1aShJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm0xdWl2KElJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtMXVpdihJSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm0yZihJSUZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtMmZ2KElJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm0yZnYoSUlJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtMmkoSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcm9ncmFtVW5pZm9ybTJpdihJSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcm9ncmFtVW5pZm9ybTJpdihJSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm0ydWkoSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcm9ncmFtVW5pZm9ybTJ1aXYoSUlJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm0ydWl2KElJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcm9ncmFtVW5pZm9ybTNmKElJRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtM2Z2KElJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm0zZnYoSUlJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtM2koSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm0zaXYoSUlJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm0zaXYoSUlJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtM3VpKElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtM3VpdihJSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcm9ncmFtVW5pZm9ybTN1aXYoSUlJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtNGYoSUlGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtNGZ2KElJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm00ZnYoSUlJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtNGkoSUlJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtNGl2KElJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtNGl2KElJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcm9ncmFtVW5pZm9ybTR1aShJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm00dWl2KElJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtNHVpdihJSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm1NYXRyaXgyZnYoSUlJWkxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm1NYXRyaXgyZnYoSUlJWltGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcm9ncmFtVW5pZm9ybU1hdHJpeDJ4M2Z2KElJSVpMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtTWF0cml4MngzZnYoSUlJWltGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcm9ncmFtVW5pZm9ybU1hdHJpeDJ4NGZ2KElJSVpMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtTWF0cml4Mng0ZnYoSUlJWltGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcm9ncmFtVW5pZm9ybU1hdHJpeDNmdihJSUlaTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcm9ncmFtVW5pZm9ybU1hdHJpeDNmdihJSUlaW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtTWF0cml4M3gyZnYoSUlJWkxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm1NYXRyaXgzeDJmdihJSUlaW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtTWF0cml4M3g0ZnYoSUlJWkxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm1NYXRyaXgzeDRmdihJSUlaW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtTWF0cml4NGZ2KElJSVpMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFByb2dyYW1Vbmlmb3JtTWF0cml4NGZ2KElJSVpbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm1NYXRyaXg0eDJmdihJSUlaTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcm9ncmFtVW5pZm9ybU1hdHJpeDR4MmZ2KElJSVpbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUHJvZ3JhbVVuaWZvcm1NYXRyaXg0eDNmdihJSUlaTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcm9ncmFtVW5pZm9ybU1hdHJpeDR4M2Z2KElJSVpbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU2FtcGxlTWFza2koSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4U3RvcmFnZTJETXVsdGlzYW1wbGUoSUlJSUlaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFVzZVByb2dyYW1TdGFnZXMoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZhbGlkYXRlUHJvZ3JhbVBpcGVsaW5lKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVmVydGV4QXR0cmliQmluZGluZyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xWZXJ0ZXhBdHRyaWJGb3JtYXQoSUlJWkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVmVydGV4QXR0cmliSUZvcm1hdChJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZlcnRleEJpbmRpbmdEaXZpc29yKElJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FDVElWRV9BVE9NSUNfQ09VTlRFUl9CVUZGRVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BQ1RJVkVfUFJPR1JBTSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUNUSVZFX1JFU09VUkNFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUNUSVZFX1ZBUklBQkxFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUxMX0JBUlJJRVJfQklUUyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTExfU0hBREVSX0JJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FSUkFZX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FSUkFZX1NUUklERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQVRPTUlDX0NPVU5URVJfQkFSUklFUl9CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FUT01JQ19DT1VOVEVSX0JVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQVRPTUlDX0NPVU5URVJfQlVGRkVSX0JJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FUT01JQ19DT1VOVEVSX0JVRkZFUl9JTkRFWCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQVRPTUlDX0NPVU5URVJfQlVGRkVSX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FUT01JQ19DT1VOVEVSX0JVRkZFUl9TVEFSVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQkxPQ0tfSU5ERVgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JVRkZFUl9CSU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CVUZGRVJfREFUQV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CVUZGRVJfVVBEQVRFX0JBUlJJRVJfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CVUZGRVJfVkFSSUFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTU1BTkRfQkFSUklFUl9CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBVVEVfU0hBREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QVVRFX1NIQURFUl9CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBVVEVfV09SS19HUk9VUF9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9TVEVOQ0lMX1RFWFRVUkVfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRElTUEFUQ0hfSU5ESVJFQ1RfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ESVNQQVRDSF9JTkRJUkVDVF9CVUZGRVJfQklORElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRFJBV19JTkRJUkVDVF9CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RSQVdfSU5ESVJFQ1RfQlVGRkVSX0JJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0VMRU1FTlRfQVJSQVlfQkFSUklFUl9CSVQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBR01FTlRfU0hBREVSX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfQkFSUklFUl9CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0RFRkFVTFRfRklYRURfU0FNUExFX0xPQ0FUSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfREVGQVVMVF9IRUlHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0RFRkFVTFRfU0FNUExFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfREVGQVVMVF9XSURUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU1BR0VfMkQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lNQUdFXzJEX0FSUkFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTUFHRV8zRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU1BR0VfQklORElOR19BQ0NFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lNQUdFX0JJTkRJTkdfRk9STUFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTUFHRV9CSU5ESU5HX0xBWUVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTUFHRV9CSU5ESU5HX0xBWUVSRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lNQUdFX0JJTkRJTkdfTEVWRUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lNQUdFX0JJTkRJTkdfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU1BR0VfQ1VCRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU1BR0VfRk9STUFUX0NPTVBBVElCSUxJVFlfQllfQ0xBU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lNQUdFX0ZPUk1BVF9DT01QQVRJQklMSVRZX0JZX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lNQUdFX0ZPUk1BVF9DT01QQVRJQklMSVRZX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lOVF9JTUFHRV8yRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5UX0lNQUdFXzJEX0FSUkFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlRfSU1BR0VfM0QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lOVF9JTUFHRV9DVUJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlRfU0FNUExFUl8yRF9NVUxUSVNBTVBMRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSVNfUk9XX01BSk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MT0NBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFUUklYX1NUUklERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0FUT01JQ19DT1VOVEVSX0JVRkZFUl9CSU5ESU5HUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0FUT01JQ19DT1VOVEVSX0JVRkZFUl9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ09MT1JfVEVYVFVSRV9TQU1QTEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ09NQklORURfQVRPTUlDX0NPVU5URVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ09NQklORURfQVRPTUlDX0NPVU5URVJfQlVGRkVSUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0NPTUJJTkVEX0NPTVBVVEVfVU5JRk9STV9DT01QT05FTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ09NQklORURfSU1BR0VfVU5JRk9STVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9DT01CSU5FRF9TSEFERVJfT1VUUFVUX1JFU09VUkNFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0NPTUJJTkVEX1NIQURFUl9TVE9SQUdFX0JMT0NLUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0NPTVBVVEVfQVRPTUlDX0NPVU5URVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ09NUFVURV9BVE9NSUNfQ09VTlRFUl9CVUZGRVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ09NUFVURV9JTUFHRV9VTklGT1JNUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0NPTVBVVEVfU0hBREVSX1NUT1JBR0VfQkxPQ0tTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ09NUFVURV9TSEFSRURfTUVNT1JZX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9DT01QVVRFX1RFWFRVUkVfSU1BR0VfVU5JVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9DT01QVVRFX1VOSUZPUk1fQkxPQ0tTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ09NUFVURV9VTklGT1JNX0NPTVBPTkVOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9DT01QVVRFX1dPUktfR1JPVVBfQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9DT01QVVRFX1dPUktfR1JPVVBfSU5WT0NBVElPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9DT01QVVRFX1dPUktfR1JPVVBfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0RFUFRIX1RFWFRVUkVfU0FNUExFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0ZSQUdNRU5UX0FUT01JQ19DT1VOVEVSUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0ZSQUdNRU5UX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9GUkFHTUVOVF9JTUFHRV9VTklGT1JNUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0ZSQUdNRU5UX1NIQURFUl9TVE9SQUdFX0JMT0NLUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0ZSQU1FQlVGRkVSX0hFSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0ZSQU1FQlVGRkVSX1NBTVBMRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9GUkFNRUJVRkZFUl9XSURUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0lNQUdFX1VOSVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfSU5URUdFUl9TQU1QTEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfTkFNRV9MRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9OVU1fQUNUSVZFX1ZBUklBQkxFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1BST0dSQU1fVEVYVFVSRV9HQVRIRVJfT0ZGU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfU0FNUExFX01BU0tfV09SRFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9TSEFERVJfU1RPUkFHRV9CTE9DS19TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfU0hBREVSX1NUT1JBR0VfQlVGRkVSX0JJTkRJTkdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVU5JRk9STV9MT0NBVElPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9WRVJURVhfQVRPTUlDX0NPVU5URVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVkVSVEVYX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9WRVJURVhfQVRUUklCX0JJTkRJTkdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVkVSVEVYX0FUVFJJQl9SRUxBVElWRV9PRkZTRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9WRVJURVhfQVRUUklCX1NUUklERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1ZFUlRFWF9JTUFHRV9VTklGT1JNUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1ZFUlRFWF9TSEFERVJfU1RPUkFHRV9CTE9DS1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01JTl9QUk9HUkFNX1RFWFRVUkVfR0FUSEVSX09GRlNFVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTkFNRV9MRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05VTV9BQ1RJVkVfVkFSSUFCTEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PRkZTRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BJWEVMX0JVRkZFUl9CQVJSSUVSX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJPR1JBTV9JTlBVVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJPR1JBTV9PVVRQVVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BST0dSQU1fUElQRUxJTkVfQklORElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJPR1JBTV9TRVBBUkFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFQURfT05MWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVBRF9XUklURSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVGRVJFTkNFRF9CWV9DT01QVVRFX1NIQURFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVGRVJFTkNFRF9CWV9GUkFHTUVOVF9TSEFERVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFUl8yRF9NVUxUSVNBTVBMRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFX01BU0siLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRV9NQVNLX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQU1QTEVfUE9TSVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NIQURFUl9JTUFHRV9BQ0NFU1NfQkFSUklFUl9CSVQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0hBREVSX1NUT1JBR0VfQkFSUklFUl9CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NIQURFUl9TVE9SQUdFX0JMT0NLIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TSEFERVJfU1RPUkFHRV9CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NIQURFUl9TVE9SQUdFX0JVRkZFUl9CSU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TSEFERVJfU1RPUkFHRV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0hBREVSX1NUT1JBR0VfQlVGRkVSX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NIQURFUl9TVE9SQUdFX0JVRkZFUl9TVEFSVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9JTkRFWCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV8yRF9NVUxUSVNBTVBMRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9BTFBIQV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0FMUEhBX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQklORElOR18yRF9NVUxUSVNBTVBMRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9CTFVFX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQkxVRV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NPTVBSRVNTRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfREVQVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfREVQVEhfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9ERVBUSF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0ZFVENIX0JBUlJJRVJfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0ZJWEVEX1NBTVBMRV9MT0NBVElPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfR1JFRU5fU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9HUkVFTl9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0hFSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfUkVEX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfUkVEX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfU0FNUExFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9TSEFSRURfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9TVEVOQ0lMX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfVVBEQVRFX0JBUlJJRVJfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX1dJRFRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UT1BfTEVWRUxfQVJSQVlfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVE9QX0xFVkVMX0FSUkFZX1NUUklERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JBUlJJRVJfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5JRk9STSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5JRk9STV9CQVJSSUVSX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5JRk9STV9CTE9DSyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfSU5UX0FUT01JQ19DT1VOVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9JTlRfSU1BR0VfMkQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOU0lHTkVEX0lOVF9JTUFHRV8yRF9BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfSU5UX0lNQUdFXzNEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9JTlRfSU1BR0VfQ1VCRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfTVVMVElTQU1QTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQkFSUklFUl9CSVQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSVEVYX0FUVFJJQl9CSU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9WRVJURVhfQVRUUklCX1JFTEFUSVZFX09GRlNFVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSVEVYX0JJTkRJTkdfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9WRVJURVhfQklORElOR19ESVZJU09SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9WRVJURVhfQklORElOR19PRkZTRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZFUlRFWF9CSU5ESU5HX1NUUklERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSVEVYX1NIQURFUl9CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1dSSVRFX09OTFkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9HTEVTMzFFeHQiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJsZW5kQmFycmllcktIUigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmxlbmRFcXVhdGlvblNlcGFyYXRlaUVYVChJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmxlbmRFcXVhdGlvbmlFWFQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmxlbmRGdW5jU2VwYXJhdGVpRVhUKElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJsZW5kRnVuY2lFWFQoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvbG9yTWFza2lFWFQoSVpaWlopViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29weUltYWdlU3ViRGF0YUVYVChJSUlJSUlJSUlJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVidWdNZXNzYWdlQ2FsbGJhY2tLSFIoTGFuZHJvaWQvb3BlbmdsL0dMRVMzMUV4dCREZWJ1Z1Byb2NLSFI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlYnVnTWVzc2FnZUNvbnRyb2xLSFIoSUlJSUxqYXZhL25pby9JbnRCdWZmZXI7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZWJ1Z01lc3NhZ2VDb250cm9sS0hSKElJSUlbSUlaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlYnVnTWVzc2FnZUluc2VydEtIUihJSUlJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERpc2FibGVpRVhUKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEVuYWJsZWlFWFQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRnJhbWVidWZmZXJUZXh0dXJlRVhUKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0RGVidWdNZXNzYWdlQ2FsbGJhY2tLSFIoKUxhbmRyb2lkL29wZW5nbC9HTEVTMzFFeHQkRGVidWdQcm9jS0hSOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0RGVidWdNZXNzYWdlTG9nS0hSKElJW0lJW0lJW0lJW0lJW0lJW0JJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldERlYnVnTWVzc2FnZUxvZ0tIUihJTGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0ludEJ1ZmZlcjspW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0RGVidWdNZXNzYWdlTG9nS0hSKElMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0J5dGVCdWZmZXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldERlYnVnTWVzc2FnZUxvZ0tIUihJW0lJW0lJW0lJW0lJKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldE9iamVjdExhYmVsS0hSKElJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0T2JqZWN0UHRyTGFiZWxLSFIoSilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFNhbXBsZXJQYXJhbWV0ZXJJaXZFWFQoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2RVhUKElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2RVhUKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0U2FtcGxlclBhcmFtZXRlckl1aXZFWFQoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4UGFyYW1ldGVySWl2RVhUKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4UGFyYW1ldGVySWl2RVhUKElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleFBhcmFtZXRlckl1aXZFWFQoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2RVhUKElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbElzRW5hYmxlZGlFWFQoSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTWluU2FtcGxlU2hhZGluZ09FUyhGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE9iamVjdExhYmVsS0hSKElJSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xPYmplY3RQdHJMYWJlbEtIUihKTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBhdGNoUGFyYW1ldGVyaUVYVChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb3BEZWJ1Z0dyb3VwS0hSKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcmltaXRpdmVCb3VuZGluZ0JveEVYVChGRkZGRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQdXNoRGVidWdHcm91cEtIUihJSUlMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU2FtcGxlclBhcmFtZXRlcklpdkVYVChJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFNhbXBsZXJQYXJhbWV0ZXJJaXZFWFQoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU2FtcGxlclBhcmFtZXRlckl1aXZFWFQoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTYW1wbGVyUGFyYW1ldGVySXVpdkVYVChJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhCdWZmZXJFWFQoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEJ1ZmZlclJhbmdlRVhUKElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcklpdkVYVChJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcklpdkVYVChJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhQYXJhbWV0ZXJJdWl2RVhUKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4UGFyYW1ldGVySXVpdkVYVChJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhTdG9yYWdlM0RNdWx0aXNhbXBsZU9FUyhJSUlJSUlaKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JMRU5EX0FEVkFOQ0VEX0NPSEVSRU5UX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQlVGRkVSX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ0xBTVBfVE9fQk9SREVSX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JCVVJOX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JET0RHRV9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMl9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NF9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4Nl9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT05URVhUX0ZMQUdfREVCVUdfQklUX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREFSS0VOX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfQ0FMTEJBQ0tfRlVOQ1RJT05fS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19DQUxMQkFDS19VU0VSX1BBUkFNX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfR1JPVVBfU1RBQ0tfREVQVEhfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19MT0dHRURfTUVTU0FHRVNfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19ORVhUX0xPR0dFRF9NRVNTQUdFX0xFTkdUSF9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX09VVFBVVF9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX09VVFBVVF9TWU5DSFJPTk9VU19LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX1NFVkVSSVRZX0hJR0hfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19TRVZFUklUWV9MT1dfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19TRVZFUklUWV9NRURJVU1fS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19TRVZFUklUWV9OT1RJRklDQVRJT05fS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19TT1VSQ0VfQVBJX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfU09VUkNFX0FQUExJQ0FUSU9OX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfU09VUkNFX09USEVSX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfU09VUkNFX1NIQURFUl9DT01QSUxFUl9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX1NPVVJDRV9USElSRF9QQVJUWV9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX1NPVVJDRV9XSU5ET1dfU1lTVEVNX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfVFlQRV9ERVBSRUNBVEVEX0JFSEFWSU9SX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfVFlQRV9FUlJPUl9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX1RZUEVfTUFSS0VSX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfVFlQRV9PVEhFUl9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX1RZUEVfUEVSRk9STUFOQ0VfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19UWVBFX1BPUF9HUk9VUF9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX1RZUEVfUE9SVEFCSUxJVFlfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19UWVBFX1BVU0hfR1JPVVBfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19UWVBFX1VOREVGSU5FRF9CRUhBVklPUl9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQ09ERV9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RJRkZFUkVOQ0VfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9FWENMVVNJT05fS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GSVJTVF9WRVJURVhfQ09OVkVOVElPTl9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQUNUSU9OQUxfRVZFTl9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQUNUSU9OQUxfT0REX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBR01FTlRfSU5URVJQT0xBVElPTl9PRkZTRVRfQklUU19PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfTEFZRVJFRF9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0RFRkFVTFRfTEFZRVJTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9MQVlFUl9UQVJHRVRTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfR0VPTUVUUllfTElOS0VEX0lOUFVUX1RZUEVfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9HRU9NRVRSWV9MSU5LRURfT1VUUFVUX1RZUEVfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9HRU9NRVRSWV9MSU5LRURfVkVSVElDRVNfT1VUX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfR0VPTUVUUllfU0hBREVSX0JJVF9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0dFT01FVFJZX1NIQURFUl9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0dFT01FVFJZX1NIQURFUl9JTlZPQ0FUSU9OU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0hBUkRMSUdIVF9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0hTTF9DT0xPUl9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0hTTF9IVUVfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9IU0xfTFVNSU5PU0lUWV9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0hTTF9TQVRVUkFUSU9OX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU1BR0VfQlVGRkVSX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU1BR0VfQ1VCRV9NQVBfQVJSQVlfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlRfSU1BR0VfQlVGRkVSX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5UX0lNQUdFX0NVQkVfTUFQX0FSUkFZX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5UX1NBTVBMRVJfMkRfTVVMVElTQU1QTEVfQVJSQVlfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlRfU0FNUExFUl9CVUZGRVJfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlRfU0FNUExFUl9DVUJFX01BUF9BUlJBWV9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lTT0xJTkVTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSVNfUEVSX1BBVENIX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTEFTVF9WRVJURVhfQ09OVkVOVElPTl9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xBWUVSX1BST1ZPS0lOR19WRVJURVhfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSUdIVEVOX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElORVNfQURKQUNFTkNZX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElORV9TVFJJUF9BREpBQ0VOQ1lfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ09NQklORURfR0VPTUVUUllfVU5JRk9STV9DT01QT05FTlRTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0NPTUJJTkVEX1RFU1NfQ09OVFJPTF9VTklGT1JNX0NPTVBPTkVOVFNfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ09NQklORURfVEVTU19FVkFMVUFUSU9OX1VOSUZPUk1fQ09NUE9ORU5UU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSF9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9ERUJVR19MT0dHRURfTUVTU0FHRVNfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfREVCVUdfTUVTU0FHRV9MRU5HVEhfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfRlJBR01FTlRfSU5URVJQT0xBVElPTl9PRkZTRVRfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfRlJBTUVCVUZGRVJfTEFZRVJTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0dFT01FVFJZX0FUT01JQ19DT1VOVEVSU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9HRU9NRVRSWV9BVE9NSUNfQ09VTlRFUl9CVUZGRVJTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0dFT01FVFJZX0lNQUdFX1VOSUZPUk1TX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0dFT01FVFJZX0lOUFVUX0NPTVBPTkVOVFNfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfR0VPTUVUUllfT1VUUFVUX0NPTVBPTkVOVFNfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfR0VPTUVUUllfT1VUUFVUX1ZFUlRJQ0VTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0dFT01FVFJZX1NIQURFUl9JTlZPQ0FUSU9OU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9HRU9NRVRSWV9TSEFERVJfU1RPUkFHRV9CTE9DS1NfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfR0VPTUVUUllfVEVYVFVSRV9JTUFHRV9VTklUU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9HRU9NRVRSWV9UT1RBTF9PVVRQVVRfQ09NUE9ORU5UU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9HRU9NRVRSWV9VTklGT1JNX0JMT0NLU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFNfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfTEFCRUxfTEVOR1RIX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1BBVENIX1ZFUlRJQ0VTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfQ09OVFJPTF9BVE9NSUNfQ09VTlRFUlNfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVEVTU19DT05UUk9MX0FUT01JQ19DT1VOVEVSX0JVRkZFUlNfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVEVTU19DT05UUk9MX0lNQUdFX1VOSUZPUk1TX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfQ09OVFJPTF9JTlBVVF9DT01QT05FTlRTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfQ09OVFJPTF9PVVRQVVRfQ09NUE9ORU5UU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0NPTlRST0xfU0hBREVSX1NUT1JBR0VfQkxPQ0tTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfQ09OVFJPTF9URVhUVVJFX0lNQUdFX1VOSVRTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfQ09OVFJPTF9UT1RBTF9PVVRQVVRfQ09NUE9ORU5UU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0NPTlRST0xfVU5JRk9STV9CTE9DS1NfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVEVTU19DT05UUk9MX1VOSUZPUk1fQ09NUE9ORU5UU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0VWQUxVQVRJT05fQVRPTUlDX0NPVU5URVJTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9BVE9NSUNfQ09VTlRFUl9CVUZGRVJTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9JTUFHRV9VTklGT1JNU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0VWQUxVQVRJT05fSU5QVVRfQ09NUE9ORU5UU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0VWQUxVQVRJT05fT1VUUFVUX0NPTVBPTkVOVFNfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1NIQURFUl9TVE9SQUdFX0JMT0NLU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0VWQUxVQVRJT05fVEVYVFVSRV9JTUFHRV9VTklUU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0VWQUxVQVRJT05fVU5JRk9STV9CTE9DS1NfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1VOSUZPUk1fQ09NUE9ORU5UU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0dFTl9MRVZFTF9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX1BBVENIX0NPTVBPTkVOVFNfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVEVYVFVSRV9CVUZGRVJfU0laRV9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01JTl9GUkFHTUVOVF9JTlRFUlBPTEFUSU9OX09GRlNFVF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01JTl9TQU1QTEVfU0hBRElOR19WQUxVRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01VTFRJUExZX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT1ZFUkxBWV9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BBVENIRVNfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QQVRDSF9WRVJUSUNFU19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BSSU1JVElWRVNfR0VORVJBVEVEX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJJTUlUSVZFX0JPVU5ESU5HX0JPWF9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BSSU1JVElWRV9SRVNUQVJUX0ZPUl9QQVRDSEVTX1NVUFBPUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJPR1JBTV9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1FVQURTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUVVFUllfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRUZFUkVOQ0VEX0JZX0dFT01FVFJZX1NIQURFUl9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFRkVSRU5DRURfQllfVEVTU19DT05UUk9MX1NIQURFUl9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFRkVSRU5DRURfQllfVEVTU19FVkFMVUFUSU9OX1NIQURFUl9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRVJfMkRfTVVMVElTQU1QTEVfQVJSQVlfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQU1QTEVSX0JVRkZFUl9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVlfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZX1NIQURPV19FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRVJfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQU1QTEVfU0hBRElOR19PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NDUkVFTl9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NIQURFUl9LSFIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NLSVBfREVDT0RFX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU09GVExJR0hUX0tIUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RBQ0tfT1ZFUkZMT1dfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEFDS19VTkRFUkZMT1dfS0hSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX0lOREVYOF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfSU5ERVhfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVNTX0NPTlRST0xfT1VUUFVUX1ZFUlRJQ0VTX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVTU19DT05UUk9MX1NIQURFUl9CSVRfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVNTX0NPTlRST0xfU0hBREVSX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVTU19FVkFMVUFUSU9OX1NIQURFUl9CSVRfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVNTX0VWQUxVQVRJT05fU0hBREVSX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVTU19HRU5fTU9ERV9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFU1NfR0VOX1BPSU5UX01PREVfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVNTX0dFTl9TUEFDSU5HX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVTU19HRU5fVkVSVEVYX09SREVSX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV8yRF9NVUxUSVNBTVBMRV9BUlJBWV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQklORElOR18yRF9NVUxUSVNBTVBMRV9BUlJBWV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQklORElOR19CVUZGRVJfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVBfQVJSQVlfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0JPUkRFUl9DT0xPUl9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQlVGRkVSX0JJTkRJTkdfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0JVRkZFUl9EQVRBX1NUT1JFX0JJTkRJTkdfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0JVRkZFUl9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQlVGRkVSX09GRlNFVF9BTElHTk1FTlRfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0JVRkZFUl9PRkZTRVRfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0JVRkZFUl9TSVpFX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DVUJFX01BUF9BUlJBWV9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfU1JHQl9ERUNPREVfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUklBTkdMRVNfQURKQUNFTkNZX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVFJJQU5HTEVfU1RSSVBfQURKQUNFTkNZX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5ERUZJTkVEX1ZFUlRFWF9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOU0lHTkVEX0lOVF9JTUFHRV9CVUZGRVJfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9JTlRfSU1BR0VfQ1VCRV9NQVBfQVJSQVlfRVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9NVUxUSVNBTVBMRV9BUlJBWV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0JVRkZFUl9FWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZX0VYVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSVEVYX0FSUkFZX0tIUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3BlbmdsL0dMRVMzMUV4dCREZWJ1Z1Byb2NLSFIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1lc3NhZ2UoSUlJSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvR0xFUzMyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9HTEVTMzEiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJsZW5kQmFycmllcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmxlbmRFcXVhdGlvblNlcGFyYXRlaShJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmxlbmRFcXVhdGlvbmkoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmxlbmRGdW5jU2VwYXJhdGVpKElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJsZW5kRnVuY2koSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvbG9yTWFza2koSVpaWlopViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29weUltYWdlU3ViRGF0YShJSUlJSUlJSUlJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVidWdNZXNzYWdlQ2FsbGJhY2soTGFuZHJvaWQvb3BlbmdsL0dMRVMzMiREZWJ1Z1Byb2M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlYnVnTWVzc2FnZUNvbnRyb2woSUlJSUxqYXZhL25pby9JbnRCdWZmZXI7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZWJ1Z01lc3NhZ2VDb250cm9sKElJSUlbSUlaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlYnVnTWVzc2FnZUluc2VydChJSUlJSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEaXNhYmxlaShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3RWxlbWVudHNCYXNlVmVydGV4KElJSUxqYXZhL25pby9CdWZmZXI7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4KElJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4KElJSUxqYXZhL25pby9CdWZmZXI7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd1JhbmdlRWxlbWVudHNCYXNlVmVydGV4KElJSUlJTGphdmEvbmlvL0J1ZmZlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEVuYWJsZWkoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRnJhbWVidWZmZXJUZXh0dXJlKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0RGVidWdNZXNzYWdlTG9nKElJW0lJW0lJW0lJW0lJW0lJW0JJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldERlYnVnTWVzc2FnZUxvZyhJTGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0ludEJ1ZmZlcjspW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0RGVidWdNZXNzYWdlTG9nKElMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0J5dGVCdWZmZXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldERlYnVnTWVzc2FnZUxvZyhJW0lJW0lJW0lJW0lJKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldE9iamVjdExhYmVsKElJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0T2JqZWN0UHRyTGFiZWwoSilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFBvaW50ZXJ2KEkpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0U2FtcGxlclBhcmFtZXRlcklpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFNhbXBsZXJQYXJhbWV0ZXJJaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0U2FtcGxlclBhcmFtZXRlckl1aXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhQYXJhbWV0ZXJJaXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhQYXJhbWV0ZXJJaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4UGFyYW1ldGVySXVpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleFBhcmFtZXRlckl1aXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0blVuaWZvcm1mdihJSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldG5Vbmlmb3JtZnYoSUlJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldG5Vbmlmb3JtaXYoSUlJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0blVuaWZvcm1pdihJSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0blVuaWZvcm11aXYoSUlJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0blVuaWZvcm11aXYoSUlJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbElzRW5hYmxlZGkoSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTWluU2FtcGxlU2hhZGluZyhGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE9iamVjdExhYmVsKElJSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xPYmplY3RQdHJMYWJlbChKTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBhdGNoUGFyYW1ldGVyaShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb3BEZWJ1Z0dyb3VwKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQcmltaXRpdmVCb3VuZGluZ0JveChGRkZGRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQdXNoRGVidWdHcm91cChJSUlMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUmVhZG5QaXhlbHMoSUlJSUlJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFNhbXBsZXJQYXJhbWV0ZXJJaXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTYW1wbGVyUGFyYW1ldGVySWl2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU2FtcGxlclBhcmFtZXRlckl1aXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4QnVmZmVyKElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhCdWZmZXJSYW5nZShJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhQYXJhbWV0ZXJJaXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhQYXJhbWV0ZXJJaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4UGFyYW1ldGVySXVpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlckl1aXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4U3RvcmFnZTNETXVsdGlzYW1wbGUoSUlJSUlJWilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NMQU1QX1RPX0JPUkRFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JCVVJOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUkRPREdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTAiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ180eDQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ182eDUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ184eDYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4OCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT05URVhUX0ZMQUdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT05URVhUX0ZMQUdfREVCVUdfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT05URVhUX0ZMQUdfUk9CVVNUX0FDQ0VTU19CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTlRFWFRfTE9TVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREFSS0VOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19DQUxMQkFDS19GVU5DVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfQ0FMTEJBQ0tfVVNFUl9QQVJBTSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfR1JPVVBfU1RBQ0tfREVQVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX0xPR0dFRF9NRVNTQUdFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfTkVYVF9MT0dHRURfTUVTU0FHRV9MRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX09VVFBVVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfT1VUUFVUX1NZTkNIUk9OT1VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19TRVZFUklUWV9ISUdIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19TRVZFUklUWV9MT1ciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX1NFVkVSSVRZX01FRElVTSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfU0VWRVJJVFlfTk9USUZJQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19TT1VSQ0VfQVBJIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19TT1VSQ0VfQVBQTElDQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX1NPVVJDRV9PVEhFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfU09VUkNFX1NIQURFUl9DT01QSUxFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfU09VUkNFX1RISVJEX1BBUlRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19TT1VSQ0VfV0lORE9XX1NZU1RFTSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfVFlQRV9ERVBSRUNBVEVEX0JFSEFWSU9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19UWVBFX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUJVR19UWVBFX01BUktFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfVFlQRV9PVEhFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfVFlQRV9QRVJGT1JNQU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfVFlQRV9QT1BfR1JPVVAiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX1RZUEVfUE9SVEFCSUxJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQlVHX1RZUEVfUFVTSF9HUk9VUCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVCVUdfVFlQRV9VTkRFRklORURfQkVIQVZJT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RJRkZFUkVOQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0VYQ0xVU0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRklSU1RfVkVSVEVYX0NPTlZFTlRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQUNUSU9OQUxfRVZFTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBQ1RJT05BTF9PREQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQUdNRU5UX0lOVEVSUE9MQVRJT05fT0ZGU0VUX0JJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfTEFZRVJFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfREVGQVVMVF9MQVlFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTEFZRVJfVEFSR0VUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfR0VPTUVUUllfSU5QVVRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfR0VPTUVUUllfT1VUUFVUX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0dFT01FVFJZX1NIQURFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfR0VPTUVUUllfU0hBREVSX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfR0VPTUVUUllfU0hBREVSX0lOVk9DQVRJT05TIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9HRU9NRVRSWV9WRVJUSUNFU19PVVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0dVSUxUWV9DT05URVhUX1JFU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9IQVJETElHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0hTTF9DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSFNMX0hVRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSFNMX0xVTUlOT1NJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0hTTF9TQVRVUkFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTUFHRV9CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lNQUdFX0NVQkVfTUFQX0FSUkFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTk5PQ0VOVF9DT05URVhUX1JFU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlRfSU1BR0VfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlRfSU1BR0VfQ1VCRV9NQVBfQVJSQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lOVF9TQU1QTEVSXzJEX01VTFRJU0FNUExFX0FSUkFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlRfU0FNUExFUl9CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lOVF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JU09MSU5FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSVNfUEVSX1BBVENIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MQVNUX1ZFUlRFWF9DT05WRU5USU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MQVlFUl9QUk9WT0tJTkdfVkVSVEVYIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSUdIVEVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSU5FU19BREpBQ0VOQ1kiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJTkVfU1RSSVBfQURKQUNFTkNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9DT01CSU5FRF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9DT01CSU5FRF9URVNTX0NPTlRST0xfVU5JRk9STV9DT01QT05FTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ09NQklORURfVEVTU19FVkFMVUFUSU9OX1VOSUZPUk1fQ09NUE9ORU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfREVCVUdfTE9HR0VEX01FU1NBR0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfREVCVUdfTUVTU0FHRV9MRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9GUkFHTUVOVF9JTlRFUlBPTEFUSU9OX09GRlNFVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0ZSQU1FQlVGRkVSX0xBWUVSUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0dFT01FVFJZX0FUT01JQ19DT1VOVEVSUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0dFT01FVFJZX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9HRU9NRVRSWV9JTUFHRV9VTklGT1JNUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0dFT01FVFJZX0lOUFVUX0NPTVBPTkVOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9HRU9NRVRSWV9PVVRQVVRfQ09NUE9ORU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0dFT01FVFJZX09VVFBVVF9WRVJUSUNFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0dFT01FVFJZX1NIQURFUl9JTlZPQ0FUSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0dFT01FVFJZX1NIQURFUl9TVE9SQUdFX0JMT0NLUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0dFT01FVFJZX1RFWFRVUkVfSU1BR0VfVU5JVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9HRU9NRVRSWV9UT1RBTF9PVVRQVVRfQ09NUE9ORU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX0dFT01FVFJZX1VOSUZPUk1fQkxPQ0tTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfR0VPTUVUUllfVU5JRk9STV9DT01QT05FTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfTEFCRUxfTEVOR1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfUEFUQ0hfVkVSVElDRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0NPTlRST0xfQVRPTUlDX0NPVU5URVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVEVTU19DT05UUk9MX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0NPTlRST0xfSU1BR0VfVU5JRk9STVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0NPTlRST0xfSU5QVVRfQ09NUE9ORU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfQ09OVFJPTF9PVVRQVVRfQ09NUE9ORU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfQ09OVFJPTF9TSEFERVJfU1RPUkFHRV9CTE9DS1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0NPTlRST0xfVEVYVFVSRV9JTUFHRV9VTklUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfQ09OVFJPTF9UT1RBTF9PVVRQVVRfQ09NUE9ORU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfQ09OVFJPTF9VTklGT1JNX0JMT0NLUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfQ09OVFJPTF9VTklGT1JNX0NPTVBPTkVOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0VWQUxVQVRJT05fQVRPTUlDX0NPVU5URVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0VWQUxVQVRJT05fSU1BR0VfVU5JRk9STVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0VWQUxVQVRJT05fSU5QVVRfQ09NUE9ORU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9PVVRQVVRfQ09NUE9ORU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9TSEFERVJfU1RPUkFHRV9CTE9DS1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0VWQUxVQVRJT05fVEVYVFVSRV9JTUFHRV9VTklUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9VTklGT1JNX0JMT0NLUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9VTklGT1JNX0NPTVBPTkVOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9URVNTX0dFTl9MRVZFTCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFU1NfUEFUQ0hfQ09NUE9ORU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFWFRVUkVfQlVGRkVSX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01JTl9GUkFHTUVOVF9JTlRFUlBPTEFUSU9OX09GRlNFVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUlOX1NBTVBMRV9TSEFESU5HX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NVUxUSVBMWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTVVMVElTQU1QTEVfTElORV9XSURUSF9HUkFOVUxBUklUWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTVVMVElTQU1QTEVfTElORV9XSURUSF9SQU5HRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PVkVSTEFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QQVRDSEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QQVRDSF9WRVJUSUNFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJJTUlUSVZFU19HRU5FUkFURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BSSU1JVElWRV9CT1VORElOR19CT1giLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BSSU1JVElWRV9SRVNUQVJUX0ZPUl9QQVRDSEVTX1NVUFBPUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJPR1JBTSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJPR1JBTV9QSVBFTElORSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUVVBRFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1FVRVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRUZFUkVOQ0VEX0JZX0dFT01FVFJZX1NIQURFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVGRVJFTkNFRF9CWV9URVNTX0NPTlRST0xfU0hBREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRUZFUkVOQ0VEX0JZX1RFU1NfRVZBTFVBVElPTl9TSEFERVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFUl8yRF9NVUxUSVNBTVBMRV9BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFUl9CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVlfU0hBRE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQU1QTEVfU0hBRElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0NSRUVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TSEFERVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NPRlRMSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RBQ0tfT1ZFUkZMT1ciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NUQUNLX1VOREVSRkxPVyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVTU19DT05UUk9MX09VVFBVVF9WRVJUSUNFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVTU19DT05UUk9MX1NIQURFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVTU19DT05UUk9MX1NIQURFUl9CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFU1NfRVZBTFVBVElPTl9TSEFERVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFU1NfRVZBTFVBVElPTl9TSEFERVJfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVNTX0dFTl9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVNTX0dFTl9QT0lOVF9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVNTX0dFTl9TUEFDSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVNTX0dFTl9WRVJURVhfT1JERVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfMkRfTVVMVElTQU1QTEVfQVJSQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQklORElOR18yRF9NVUxUSVNBTVBMRV9BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9CSU5ESU5HX0JVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQX0FSUkFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0JPUkRFUl9DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQlVGRkVSX0JJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQlVGRkVSX0RBVEFfU1RPUkVfQklORElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9CVUZGRVJfT0ZGU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0JVRkZFUl9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NVQkVfTUFQX0FSUkFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUklBTkdMRVNfQURKQUNFTkNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUklBTkdMRV9TVFJJUF9BREpBQ0VOQ1kiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOREVGSU5FRF9WRVJURVgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOS05PV05fQ09OVEVYVF9SRVNFVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfSU5UX0lNQUdFX0JVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfSU5UX0lNQUdFX0NVQkVfTUFQX0FSUkFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9NVUxUSVNBTVBMRV9BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFX01BUF9BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSVEVYX0FSUkFZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvR0xFUzMyJERlYnVnUHJvYyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTWVzc2FnZShJSUlJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9HTEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvR0xTdXJmYWNlVmlldyIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvU3VyZmFjZVZpZXciLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L1N1cmZhY2VIb2xkZXIkQ2FsbGJhY2siIHJlbW92ZWQ9IjI0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9TdXJmYWNlSG9sZGVyJENhbGxiYWNrMiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWJ1Z0ZsYWdzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlc2VydmVFR0xDb250ZXh0T25QYXVzZSgpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVuZGVyTW9kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGF1c2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlc3VtZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXVlRXZlbnQoTGphdmEvbGFuZy9SdW5uYWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RSZW5kZXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWJ1Z0ZsYWdzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVHTENvbmZpZ0Nob29zZXIoSUlJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFR0xDb25maWdDaG9vc2VyKExhbmRyb2lkL29wZW5nbC9HTFN1cmZhY2VWaWV3JEVHTENvbmZpZ0Nob29zZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFR0xDb25maWdDaG9vc2VyKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVHTENvbnRleHRDbGllbnRWZXJzaW9uKEkpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFR0xDb250ZXh0RmFjdG9yeShMYW5kcm9pZC9vcGVuZ2wvR0xTdXJmYWNlVmlldyRFR0xDb250ZXh0RmFjdG9yeTspViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFR0xXaW5kb3dTdXJmYWNlRmFjdG9yeShMYW5kcm9pZC9vcGVuZ2wvR0xTdXJmYWNlVmlldyRFR0xXaW5kb3dTdXJmYWNlRmFjdG9yeTspViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHTFdyYXBwZXIoTGFuZHJvaWQvb3BlbmdsL0dMU3VyZmFjZVZpZXckR0xXcmFwcGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJlc2VydmVFR0xDb250ZXh0T25QYXVzZShaKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlbmRlck1vZGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVuZGVyZXIoTGFuZHJvaWQvb3BlbmdsL0dMU3VyZmFjZVZpZXckUmVuZGVyZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFQlVHX0NIRUNLX0dMX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUJVR19MT0dfR0xfQ0FMTFMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFTkRFUk1PREVfQ09OVElOVU9VU0xZIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRU5ERVJNT0RFX1dIRU5fRElSVFkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9HTFN1cmZhY2VWaWV3JEVHTENvbmZpZ0Nob29zZXIiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNob29zZUNvbmZpZyhMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTDEwO0xqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMRGlzcGxheTspTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xDb25maWc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvR0xTdXJmYWNlVmlldyRFR0xDb250ZXh0RmFjdG9yeSIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ29udGV4dChMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTDEwO0xqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMRGlzcGxheTtMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTENvbmZpZzspTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xDb250ZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlc3Ryb3lDb250ZXh0KExqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMMTA7TGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xEaXNwbGF5O0xqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMQ29udGV4dDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3BlbmdsL0dMU3VyZmFjZVZpZXckRUdMV2luZG93U3VyZmFjZUZhY3RvcnkiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVdpbmRvd1N1cmZhY2UoTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0wxMDtMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTERpc3BsYXk7TGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xDb25maWc7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMU3VyZmFjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXN0cm95U3VyZmFjZShMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTDEwO0xqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMRGlzcGxheTtMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTFN1cmZhY2U7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9HTFN1cmZhY2VWaWV3JEdMV3JhcHBlciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JhcChMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3Mvb3BlbmdsZXMvR0w7KUxqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9vcGVuZ2xlcy9HTDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9HTFN1cmZhY2VWaWV3JFJlbmRlcmVyIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRyYXdGcmFtZShMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3Mvb3BlbmdsZXMvR0wxMDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3VyZmFjZUNoYW5nZWQoTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL29wZW5nbGVzL0dMMTA7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3VyZmFjZUNyZWF0ZWQoTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL29wZW5nbGVzL0dMMTA7TGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xDb25maWc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9HTFUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsdUVycm9yU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2x1TG9va0F0KExqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9vcGVuZ2xlcy9HTDEwO0ZGRkZGRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2x1T3J0aG8yRChMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3Mvb3BlbmdsZXMvR0wxMDtGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbHVQZXJzcGVjdGl2ZShMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3Mvb3BlbmdsZXMvR0wxMDtGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbHVQcm9qZWN0KEZGRltGSVtGSVtJSVtGSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2x1VW5Qcm9qZWN0KEZGRltGSVtGSVtJSVtGSSlJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvR0xVdGlscyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RUdMRXJyb3JTdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVybmFsRm9ybWF0KExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0idGV4SW1hZ2UyRChJSUlMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idGV4SW1hZ2UyRChJSUlMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InRleEltYWdlMkQoSUlMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idGV4U3ViSW1hZ2UyRChJSUlJTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idGV4U3ViSW1hZ2UyRChJSUlJTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0lJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29wZW5nbC9NYXRyaXgiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgZGVwcmVjYXRlZD0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcnVzdHVtTShbRklGRkZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImludmVydE0oW0ZJW0ZJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsZW5ndGgoRkZGKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtdWx0aXBseU1NKFtGSVtGSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibXVsdGlwbHlNVihbRklbRklbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9ydGhvTShbRklGRkZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InBlcnNwZWN0aXZlTShbRklGRkZGKVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InJvdGF0ZU0oW0ZJRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icm90YXRlTShbRklbRklGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2FsZU0oW0ZJRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2FsZU0oW0ZJW0ZJRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJZGVudGl0eU0oW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb29rQXRNKFtGSUZGRkZGRkZGRilWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJvdGF0ZUV1bGVyTShbRklGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJvdGF0ZU0oW0ZJRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNsYXRlTShbRklGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InRyYW5zbGF0ZU0oW0ZJW0ZJRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFuc3Bvc2VNKFtGSVtGSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcGVuZ2wvVmlzaWJpbGl0eSIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcHV0ZUJvdW5kaW5nU3BoZXJlKFtGSUlbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZydXN0dW1DdWxsU3BoZXJlcyhbRklbRklJW0lJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0idmlzaWJpbGl0eVRlc3QoW0ZJW0ZJW0NJSSlJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9Bc3luY1Rhc2siIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbChaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb0luQmFja2dyb3VuZChbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWN1dGUoTGphdmEvbGFuZy9SdW5uYWJsZTspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZShbTGphdmEvbGFuZy9PYmplY3Q7KUxhbmRyb2lkL29zL0FzeW5jVGFzazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdXRlT25FeGVjdXRvcihMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7W0xqYXZhL2xhbmcvT2JqZWN0OylMYW5kcm9pZC9vcy9Bc3luY1Rhc2s7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0dXMoKUxhbmRyb2lkL29zL0FzeW5jVGFzayRTdGF0dXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDYW5jZWxsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbmNlbGxlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FuY2VsbGVkKExqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBvc3RFeGVjdXRlKExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QcmVFeGVjdXRlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Qcm9ncmVzc1VwZGF0ZShbTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdWJsaXNoUHJvZ3Jlc3MoW0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJJQUxfRVhFQ1VUT1IiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iVEhSRUFEX1BPT0xfRVhFQ1VUT1IiIHNpbmNlPSIxMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvQXN5bmNUYXNrJFN0YXR1cyIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL29zL0FzeW5jVGFzayRTdGF0dXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvb3MvQXN5bmNUYXNrJFN0YXR1czsiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTklTSEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJQRU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJSVU5OSU5HIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9CYWRQYXJjZWxhYmxlRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdXRpbC9BbmRyb2lkUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0V4Y2VwdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvQmFzZUJ1bmRsZSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnNLZXkoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvb2xlYW4oTGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvb2xlYW4oTGphdmEvbGFuZy9TdHJpbmc7WilaIiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb29sZWFuQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7KVtaIiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb3VibGUoTGphdmEvbGFuZy9TdHJpbmc7KUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb3VibGUoTGphdmEvbGFuZy9TdHJpbmc7RClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG91YmxlQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7KVtEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50KExqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50KExqYXZhL2xhbmcvU3RyaW5nO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludEFycmF5KExqYXZhL2xhbmcvU3RyaW5nOylbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmcoTGphdmEvbGFuZy9TdHJpbmc7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKExqYXZhL2xhbmcvU3RyaW5nO0opSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmdBcnJheShMamF2YS9sYW5nL1N0cmluZzspW0oiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmluZyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VtcHR5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5U2V0KClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRBbGwoTGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRCb29sZWFuKExqYXZhL2xhbmcvU3RyaW5nO1opViIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0Qm9vbGVhbkFycmF5KExqYXZhL2xhbmcvU3RyaW5nO1taKVYiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9InB1dERvdWJsZShMamF2YS9sYW5nL1N0cmluZztEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXREb3VibGVBcnJheShMamF2YS9sYW5nL1N0cmluZztbRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0SW50KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEludEFycmF5KExqYXZhL2xhbmcvU3RyaW5nO1tJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRMb25nKExqYXZhL2xhbmcvU3RyaW5nO0opViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dExvbmdBcnJheShMamF2YS9sYW5nL1N0cmluZztbSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0U3RyaW5nQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvQmF0dGVyeU1hbmFnZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXB1dGVDaGFyZ2VUaW1lUmVtYWluaW5nKClKIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRQcm9wZXJ0eShJKUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmdQcm9wZXJ0eShJKUoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2hhcmdpbmcoKVoiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NIQVJHSU5HIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9ESVNDSEFSR0lORyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVRURVJZX0hFQUxUSF9DT0xEIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkJBVFRFUllfSEVBTFRIX0RFQUQiLz4KLQkJPGZpZWxkIG5hbWU9IkJBVFRFUllfSEVBTFRIX0dPT0QiLz4KLQkJPGZpZWxkIG5hbWU9IkJBVFRFUllfSEVBTFRIX09WRVJIRUFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVRURVJZX0hFQUxUSF9PVkVSX1ZPTFRBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkJBVFRFUllfSEVBTFRIX1VOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9IkJBVFRFUllfSEVBTFRIX1VOU1BFQ0lGSUVEX0ZBSUxVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkJBVFRFUllfUExVR0dFRF9BQyIvPgotCQk8ZmllbGQgbmFtZT0iQkFUVEVSWV9QTFVHR0VEX1VTQiIvPgotCQk8ZmllbGQgbmFtZT0iQkFUVEVSWV9QTFVHR0VEX1dJUkVMRVNTIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkJBVFRFUllfUFJPUEVSVFlfQ0FQQUNJVFkiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQkFUVEVSWV9QUk9QRVJUWV9DSEFSR0VfQ09VTlRFUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVRURVJZX1BST1BFUlRZX0NVUlJFTlRfQVZFUkFHRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVRURVJZX1BST1BFUlRZX0NVUlJFTlRfTk9XIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkJBVFRFUllfUFJPUEVSVFlfRU5FUkdZX0NPVU5URVIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQkFUVEVSWV9QUk9QRVJUWV9TVEFUVVMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQkFUVEVSWV9TVEFUVVNfQ0hBUkdJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkJBVFRFUllfU1RBVFVTX0RJU0NIQVJHSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVRURVJZX1NUQVRVU19GVUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVRURVJZX1NUQVRVU19OT1RfQ0hBUkdJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkJBVFRFUllfU1RBVFVTX1VOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0JBVFRFUllfTE9XIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0hFQUxUSCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0lDT05fU01BTEwiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9MRVZFTCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BMVUdHRUQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUkVTRU5UIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU0NBTEUiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TVEFUVVMiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9URUNITk9MT0dZIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfVEVNUEVSQVRVUkUiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9WT0xUQUdFIiBzaW5jZT0iNSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvQmluZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9JQmluZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXR0YWNoSW50ZXJmYWNlKExhbmRyb2lkL29zL0lJbnRlcmZhY2U7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhckNhbGxpbmdJZGVudGl0eSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXAoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7TGphdmEvaW8vUHJpbnRXcml0ZXI7W0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmx1c2hQZW5kaW5nQ29tbWFuZHMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxsaW5nUGlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FsbGluZ1VpZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGxpbmdVc2VySGFuZGxlKClMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOyIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iam9pblRocmVhZFBvb2woKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRyYW5zYWN0KElMYW5kcm9pZC9vcy9QYXJjZWw7TGFuZHJvaWQvb3MvUGFyY2VsO0kpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoSilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9CdWlsZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmFkaW9WZXJzaW9uKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcmlhbCgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkJPQVJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT09UTE9BREVSIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQlJBTkQiLz4KLQkJPGZpZWxkIG5hbWU9IkNQVV9BQkkiIHNpbmNlPSI0IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ1BVX0FCSTIiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iREVWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNQTEFZIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iRklOR0VSUFJJTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkhBUkRXQVJFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iSE9TVCIvPgotCQk8ZmllbGQgbmFtZT0iSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTlVGQUNUVVJFUiIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9EVUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJSQURJTyIgc2luY2U9IjgiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJJQUwiIHNpbmNlPSI5IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iU1VQUE9SVEVEXzMyX0JJVF9BQklTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBPUlRFRF82NF9CSVRfQUJJUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBQT1JURURfQUJJUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTktOT1dOIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iVVNFUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvQnVpbGQkVkVSU0lPTiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVNFX09TIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPREVOQU1FIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iSU5DUkVNRU5UQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVZJRVdfU0RLX0lOVCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUxFQVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTREsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTREtfSU5UIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iU0VDVVJJVFlfUEFUQ0giIHNpbmNlPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvQnVpbGQkVkVSU0lPTl9DT0RFUyIgc2luY2U9IjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVNFXzFfMSIvPgotCQk8ZmllbGQgbmFtZT0iQ1VQQ0FLRSIvPgotCQk8ZmllbGQgbmFtZT0iQ1VSX0RFVkVMT1BNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJET05VVCIvPgotCQk8ZmllbGQgbmFtZT0iRUNMQUlSIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRUNMQUlSXzBfMSIgc2luY2U9IjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVDTEFJUl9NUjEiIHNpbmNlPSI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGUk9ZTyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkdJTkdFUkJSRUFEIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iR0lOR0VSQlJFQURfTVIxIiBzaW5jZT0iMTAiLz4KLQkJPGZpZWxkIG5hbWU9IkhPTkVZQ09NQiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT05FWUNPTUJfTVIxIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkhPTkVZQ09NQl9NUjIiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iSUNFX0NSRUFNX1NBTkRXSUNIIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IklDRV9DUkVBTV9TQU5EV0lDSF9NUjEiIHNpbmNlPSIxNSIvPgotCQk8ZmllbGQgbmFtZT0iSkVMTFlfQkVBTiIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJKRUxMWV9CRUFOX01SMSIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJKRUxMWV9CRUFOX01SMiIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLSVRLQVQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iS0lUS0FUX1dBVENIIiBzaW5jZT0iMjAiLz4KLQkJPGZpZWxkIG5hbWU9IkwiIHNpbmNlPSIyMSIgcmVtb3ZlZD0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IkxPTExJUE9QIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPTExJUE9QX01SMSIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJNIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9Ik4iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTl9NUjEiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iTyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPX01SMSIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL0J1bmRsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL0Jhc2VCdW5kbGUiIHNpbmNlPSIyMSIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiByZW1vdmVkPSIyMSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DbGFzc0xvYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnNLZXkoTGphdmEvbGFuZy9TdHJpbmc7KVoiIHJlbW92ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVlcENvcHkoKUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9PYmplY3Q7IiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpbmRlcihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvb3MvSUJpbmRlcjsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvb2xlYW4oTGphdmEvbGFuZy9TdHJpbmc7KVoiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9vbGVhbihMamF2YS9sYW5nL1N0cmluZztaKVoiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9vbGVhbkFycmF5KExqYXZhL2xhbmcvU3RyaW5nOylbWiIgcmVtb3ZlZD0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCdW5kbGUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlKExqYXZhL2xhbmcvU3RyaW5nOylCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qnl0ZShMamF2YS9sYW5nL1N0cmluZztCKUxqYXZhL2xhbmcvQnl0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7KVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhcihMamF2YS9sYW5nL1N0cmluZzspQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXIoTGphdmEvbGFuZy9TdHJpbmc7QylDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhckFycmF5KExqYXZhL2xhbmcvU3RyaW5nOylbQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJTZXF1ZW5jZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhclNlcXVlbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJTZXF1ZW5jZUFycmF5KExqYXZhL2xhbmcvU3RyaW5nOylbTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJTZXF1ZW5jZUFycmF5TGlzdChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9BcnJheUxpc3Q7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsYXNzTG9hZGVyKClMamF2YS9sYW5nL0NsYXNzTG9hZGVyOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG91YmxlKExqYXZhL2xhbmcvU3RyaW5nOylEIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERvdWJsZShMamF2YS9sYW5nL1N0cmluZztEKUQiIHJlbW92ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG91YmxlQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7KVtEIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsb2F0KExqYXZhL2xhbmcvU3RyaW5nOylGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxvYXQoTGphdmEvbGFuZy9TdHJpbmc7RilGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxvYXRBcnJheShMamF2YS9sYW5nL1N0cmluZzspW0YiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnQoTGphdmEvbGFuZy9TdHJpbmc7KUkiIHJlbW92ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50KExqYXZhL2xhbmcvU3RyaW5nO0kpSSIgcmVtb3ZlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRBcnJheShMamF2YS9sYW5nL1N0cmluZzspW0kiIHJlbW92ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZWdlckFycmF5TGlzdChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9BcnJheUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZyhMamF2YS9sYW5nL1N0cmluZzspSiIgcmVtb3ZlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKExqYXZhL2xhbmcvU3RyaW5nO0opSiIgcmVtb3ZlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7KVtKIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmNlbGFibGUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL29zL1BhcmNlbGFibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyY2VsYWJsZUFycmF5KExqYXZhL2xhbmcvU3RyaW5nOylbTGFuZHJvaWQvb3MvUGFyY2VsYWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJjZWxhYmxlQXJyYXlMaXN0KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0FycmF5TGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJpYWxpemFibGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2lvL1NlcmlhbGl6YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG9ydChMamF2YS9sYW5nL1N0cmluZzspUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3J0KExqYXZhL2xhbmcvU3RyaW5nO1MpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3J0QXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7KVtTIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2l6ZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdXRpbC9TaXplOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2l6ZUYoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3V0aWwvU2l6ZUY7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGFyc2VQYXJjZWxhYmxlQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3V0aWwvU3BhcnNlQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIHJlbW92ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxMiIgcmVtb3ZlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmdBcnJheShMamF2YS9sYW5nL1N0cmluZzspW0xqYXZhL2xhbmcvU3RyaW5nOyIgcmVtb3ZlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmdBcnJheUxpc3QoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvQXJyYXlMaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0ZpbGVEZXNjcmlwdG9ycygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW1wdHkoKVoiIHJlbW92ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5U2V0KClMamF2YS91dGlsL1NldDsiIHJlbW92ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0QWxsKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEJpbmRlcihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9JQmluZGVyOylWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRCb29sZWFuKExqYXZhL2xhbmcvU3RyaW5nO1opViIgcmVtb3ZlZD0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRCb29sZWFuQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7W1opViIgcmVtb3ZlZD0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRCdW5kbGUoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0Qnl0ZShMamF2YS9sYW5nL1N0cmluZztCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRCeXRlQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7W0IpViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dENoYXIoTGphdmEvbGFuZy9TdHJpbmc7QylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0Q2hhckFycmF5KExqYXZhL2xhbmcvU3RyaW5nO1tDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRDaGFyU2VxdWVuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRDaGFyU2VxdWVuY2VBcnJheShMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0Q2hhclNlcXVlbmNlQXJyYXlMaXN0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvQXJyYXlMaXN0OylWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InB1dERvdWJsZShMamF2YS9sYW5nL1N0cmluZztEKVYiIHJlbW92ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RG91YmxlQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7W0QpViIgcmVtb3ZlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRGbG9hdChMamF2YS9sYW5nL1N0cmluZztGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRGbG9hdEFycmF5KExqYXZhL2xhbmcvU3RyaW5nO1tGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRJbnQoTGphdmEvbGFuZy9TdHJpbmc7SSlWIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEludEFycmF5KExqYXZhL2xhbmcvU3RyaW5nO1tJKVYiIHJlbW92ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0SW50ZWdlckFycmF5TGlzdChMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0FycmF5TGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dExvbmcoTGphdmEvbGFuZy9TdHJpbmc7SilWIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InB1dExvbmdBcnJheShMamF2YS9sYW5nL1N0cmluZztbSilWIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFBhcmNlbGFibGUoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvUGFyY2VsYWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFBhcmNlbGFibGVBcnJheShMamF2YS9sYW5nL1N0cmluZztbTGFuZHJvaWQvb3MvUGFyY2VsYWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFBhcmNlbGFibGVBcnJheUxpc3QoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9BcnJheUxpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRTZXJpYWxpemFibGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vU2VyaWFsaXphYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0U2hvcnQoTGphdmEvbGFuZy9TdHJpbmc7UylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0U2hvcnRBcnJheShMamF2YS9sYW5nL1N0cmluZztbUylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0U2l6ZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC91dGlsL1NpemU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFNpemVGKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL3V0aWwvU2l6ZUY7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFNwYXJzZVBhcmNlbGFibGVBcnJheShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC91dGlsL1NwYXJzZUFycmF5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFN0cmluZ0FycmF5KExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZzspViIgcmVtb3ZlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRTdHJpbmdBcnJheUxpc3QoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9BcnJheUxpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkRnJvbVBhcmNlbChMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGFzc0xvYWRlcihMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZSgpSSIgcmVtb3ZlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkVNUFRZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWwiIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWwoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NhbmNlbGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25DYW5jZWxMaXN0ZW5lcihMYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWwkT25DYW5jZWxMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InRocm93SWZDYW5jZWxlZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsJE9uQ2FuY2VsTGlzdGVuZXIiIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbmNlbCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvQ29uZGl0aW9uVmFyaWFibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJibG9jaygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJsb2NrKEopWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvQ291bnREb3duVGltZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25GaW5pc2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRpY2soSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnQoKUxhbmRyb2lkL29zL0NvdW50RG93blRpbWVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvQ3B1VXNhZ2VJbmZvIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3RpdmUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3RhbCgpSiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvRGVhZE9iamVjdEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL1JlbW90ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9EZWFkU3lzdGVtRXhjZXB0aW9uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL0RlYWRPYmplY3RFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL0RlYnVnIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdHRhY2hKdm10aUFnZW50KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImNoYW5nZURlYnVnUG9ydChJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZHVtcEhwcm9mRGF0YShMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wU2VydmljZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtbTGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlRW11bGF0b3JUcmFjZU91dHB1dCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpbmRlckRlYXRoT2JqZWN0Q291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCaW5kZXJMb2NhbE9iamVjdENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmluZGVyUHJveHlPYmplY3RDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpbmRlclJlY2VpdmVkVHJhbnNhY3Rpb25zKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmluZGVyU2VudFRyYW5zYWN0aW9ucygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdsb2JhbEFsbG9jQ291bnQoKUkiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2xvYmFsQWxsb2NTaXplKClJIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdsb2JhbENsYXNzSW5pdENvdW50KClJIiBzaW5jZT0iOCIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHbG9iYWxDbGFzc0luaXRUaW1lKClJIiBzaW5jZT0iOCIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHbG9iYWxFeHRlcm5hbEFsbG9jQ291bnQoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2xvYmFsRXh0ZXJuYWxBbGxvY1NpemUoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2xvYmFsRXh0ZXJuYWxGcmVlZENvdW50KClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdsb2JhbEV4dGVybmFsRnJlZWRTaXplKClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdsb2JhbEZyZWVkQ291bnQoKUkiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2xvYmFsRnJlZWRTaXplKClJIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdsb2JhbEdjSW52b2NhdGlvbkNvdW50KClJIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvYWRlZENsYXNzQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZW1vcnlJbmZvKExhbmRyb2lkL29zL0RlYnVnJE1lbW9yeUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYXRpdmVIZWFwQWxsb2NhdGVkU2l6ZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hdGl2ZUhlYXBGcmVlU2l6ZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hdGl2ZUhlYXBTaXplKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHNzKClKIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSdW50aW1lU3RhdChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSdW50aW1lU3RhdHMoKUxqYXZhL3V0aWwvTWFwOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGhyZWFkQWxsb2NDb3VudCgpSSIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHJlYWRBbGxvY1NpemUoKUkiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGhyZWFkRXh0ZXJuYWxBbGxvY0NvdW50KClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRocmVhZEV4dGVybmFsQWxsb2NTaXplKClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRocmVhZEdjSW52b2NhdGlvbkNvdW50KClJIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGVidWdnZXJDb25uZWN0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludExvYWRlZENsYXNzZXMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXRBbGxDb3VudHMoKVYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXRHbG9iYWxBbGxvY0NvdW50KClWIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0R2xvYmFsQWxsb2NTaXplKClWIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0R2xvYmFsQ2xhc3NJbml0Q291bnQoKVYiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0R2xvYmFsQ2xhc3NJbml0VGltZSgpViIgc2luY2U9IjgiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXRHbG9iYWxFeHRlcm5hbEFsbG9jQ291bnQoKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXRHbG9iYWxFeHRlcm5hbEFsbG9jU2l6ZSgpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldEdsb2JhbEV4dGVybmFsRnJlZWRDb3VudCgpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldEdsb2JhbEV4dGVybmFsRnJlZWRTaXplKClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0R2xvYmFsRnJlZWRDb3VudCgpViIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldEdsb2JhbEZyZWVkU2l6ZSgpViIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldEdsb2JhbEdjSW52b2NhdGlvbkNvdW50KClWIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0VGhyZWFkQWxsb2NDb3VudCgpViIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldFRocmVhZEFsbG9jU2l6ZSgpViIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldFRocmVhZEV4dGVybmFsQWxsb2NDb3VudCgpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldFRocmVhZEV4dGVybmFsQWxsb2NTaXplKClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0VGhyZWFkR2NJbnZvY2F0aW9uQ291bnQoKVYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxsb2NhdGlvbkxpbWl0KEkpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHbG9iYWxBbGxvY2F0aW9uTGltaXQoSSlJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWxsb2NDb3VudGluZygpViIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydE1ldGhvZFRyYWNpbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydE1ldGhvZFRyYWNpbmcoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydE1ldGhvZFRyYWNpbmcoTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRNZXRob2RUcmFjaW5nKExqYXZhL2xhbmcvU3RyaW5nO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydE1ldGhvZFRyYWNpbmdTYW1wbGluZyhMamF2YS9sYW5nL1N0cmluZztJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydE5hdGl2ZVRyYWNpbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wQWxsb2NDb3VudGluZygpViIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wTWV0aG9kVHJhY2luZygpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BOYXRpdmVUcmFjaW5nKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idGhyZWFkQ3B1VGltZU5hbm9zKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0id2FpdEZvckRlYnVnZ2VyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0id2FpdGluZ0ZvckRlYnVnZ2VyKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX0NMQVNTTE9BREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX0ZVTExfREVUQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX0lOSVRJQUxJWkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFDRV9DT1VOVF9BTExPQ1MiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9EZWJ1ZyRJbnN0cnVjdGlvbkNvdW50IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29sbGVjdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imdsb2JhbE1ldGhvZEludm9jYXRpb25zKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xvYmFsVG90YWwoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldEFuZFN0YXJ0KClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9EZWJ1ZyRNZW1vcnlJbmZvIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lbW9yeVN0YXQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVtb3J5U3RhdHMoKUxqYXZhL3V0aWwvTWFwOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3RoZXJMYWJlbChJKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE0IiByZW1vdmVkPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE90aGVyUHJpdmF0ZURpcnR5KEkpSSIgc2luY2U9IjE0IiByZW1vdmVkPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE90aGVyUHNzKEkpSSIgc2luY2U9IjE0IiByZW1vdmVkPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE90aGVyU2hhcmVkRGlydHkoSSlJIiBzaW5jZT0iMTQiIHJlbW92ZWQ9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG90YWxQcml2YXRlQ2xlYW4oKUkiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdGFsUHJpdmF0ZURpcnR5KClJIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdGFsUHNzKClJIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdGFsU2hhcmVkQ2xlYW4oKUkiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdGFsU2hhcmVkRGlydHkoKUkiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG90YWxTd2FwcGFibGVQc3MoKUkiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRGcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkYWx2aWtQcml2YXRlRGlydHkiLz4KLQkJPGZpZWxkIG5hbWU9ImRhbHZpa1BzcyIvPgotCQk8ZmllbGQgbmFtZT0iZGFsdmlrU2hhcmVkRGlydHkiLz4KLQkJPGZpZWxkIG5hbWU9Im5hdGl2ZVByaXZhdGVEaXJ0eSIvPgotCQk8ZmllbGQgbmFtZT0ibmF0aXZlUHNzIi8+Ci0JCTxmaWVsZCBuYW1lPSJuYXRpdmVTaGFyZWREaXJ0eSIvPgotCQk8ZmllbGQgbmFtZT0ib3RoZXJQcml2YXRlRGlydHkiLz4KLQkJPGZpZWxkIG5hbWU9Im90aGVyUHNzIi8+Ci0JCTxmaWVsZCBuYW1lPSJvdGhlclNoYXJlZERpcnR5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9Ecm9wQm94TWFuYWdlciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRGF0YShMamF2YS9sYW5nL1N0cmluZztbQkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEZpbGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vRmlsZTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRUZXh0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV4dEVudHJ5KExqYXZhL2xhbmcvU3RyaW5nO0opTGFuZHJvaWQvb3MvRHJvcEJveE1hbmFnZXIkRW50cnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUYWdFbmFibGVkKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRFJPUEJPWF9FTlRSWV9BRERFRCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9UQUciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfVElNRSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU19FTVBUWSIvPgotCQk8ZmllbGQgbmFtZT0iSVNfR1pJUFBFRCIvPgotCQk8ZmllbGQgbmFtZT0iSVNfVEVYVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvRHJvcEJveE1hbmFnZXIkRW50cnkiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0opViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztKTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0pMamF2YS9pby9GaWxlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztKTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SltCSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbGFncygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0U3RyZWFtKClMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHQoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lTWlsbGlzKClKIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9FbnZpcm9ubWVudCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YURpcmVjdG9yeSgpTGphdmEvaW8vRmlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb3dubG9hZENhY2hlRGlyZWN0b3J5KClMamF2YS9pby9GaWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dGVybmFsU3RvcmFnZURpcmVjdG9yeSgpTGphdmEvaW8vRmlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRlcm5hbFN0b3JhZ2VQdWJsaWNEaXJlY3RvcnkoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2lvL0ZpbGU7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dGVybmFsU3RvcmFnZVN0YXRlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRlcm5hbFN0b3JhZ2VTdGF0ZShMamF2YS9pby9GaWxlOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvb3REaXJlY3RvcnkoKUxqYXZhL2lvL0ZpbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RvcmFnZVN0YXRlKExqYXZhL2lvL0ZpbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE5IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRXh0ZXJuYWxTdG9yYWdlRW11bGF0ZWQoKVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRXh0ZXJuYWxTdG9yYWdlRW11bGF0ZWQoTGphdmEvaW8vRmlsZTspWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFeHRlcm5hbFN0b3JhZ2VSZW1vdmFibGUoKVoiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFeHRlcm5hbFN0b3JhZ2VSZW1vdmFibGUoTGphdmEvaW8vRmlsZTspWiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RPUllfQUxBUk1TIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUT1JZX0RDSU0iIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RPUllfRE9DVU1FTlRTIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVE9SWV9ET1dOTE9BRFMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RPUllfTU9WSUVTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUT1JZX01VU0lDIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUT1JZX05PVElGSUNBVElPTlMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RPUllfUElDVFVSRVMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RPUllfUE9EQ0FTVFMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RPUllfUklOR1RPTkVTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfQkFEX1JFTU9WQUwiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX0NIRUNLSU5HIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfRUpFQ1RJTkciIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfTU9VTlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfTU9VTlRFRF9SRUFEX09OTFkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX05PRlMiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9SRU1PVkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9TSEFSRUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX1VOS05PV04iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfVU5NT1VOVEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX1VOTU9VTlRFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvRmlsZU9ic2VydmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25FdmVudChJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFdhdGNoaW5nKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcFdhdGNoaW5nKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0NFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkFMTF9FVkVOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkFUVFJJQiIvPgotCQk8ZmllbGQgbmFtZT0iQ0xPU0VfTk9XUklURSIvPgotCQk8ZmllbGQgbmFtZT0iQ0xPU0VfV1JJVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFURSIvPgotCQk8ZmllbGQgbmFtZT0iREVMRVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUxFVEVfU0VMRiIvPgotCQk8ZmllbGQgbmFtZT0iTU9ESUZZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT1ZFRF9GUk9NIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT1ZFRF9UTyIvPgotCQk8ZmllbGQgbmFtZT0iTU9WRV9TRUxGIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9GaWxlVXJpRXhwb3NlZEV4Y2VwdGlvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL0hhbmRsZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9IYW5kbGVyJENhbGxiYWNrOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9Mb29wZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvTG9vcGVyO0xhbmRyb2lkL29zL0hhbmRsZXIkQ2FsbGJhY2s7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQXN5bmMoTGFuZHJvaWQvb3MvTG9vcGVyOylMYW5kcm9pZC9vcy9IYW5kbGVyOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQXN5bmMoTGFuZHJvaWQvb3MvTG9vcGVyO0xhbmRyb2lkL29zL0hhbmRsZXIkQ2FsbGJhY2s7KUxhbmRyb2lkL29zL0hhbmRsZXI7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaE1lc3NhZ2UoTGFuZHJvaWQvb3MvTWVzc2FnZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXAoTGFuZHJvaWQvdXRpbC9QcmludGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9vcGVyKClMYW5kcm9pZC9vcy9Mb29wZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVzc2FnZU5hbWUoTGFuZHJvaWQvb3MvTWVzc2FnZTspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVNZXNzYWdlKExhbmRyb2lkL29zL01lc3NhZ2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNNZXNzYWdlcyhJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNNZXNzYWdlcyhJTGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW5NZXNzYWdlKClMYW5kcm9pZC9vcy9NZXNzYWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbk1lc3NhZ2UoSSlMYW5kcm9pZC9vcy9NZXNzYWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbk1lc3NhZ2UoSUlJKUxhbmRyb2lkL29zL01lc3NhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluTWVzc2FnZShJSUlMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvb3MvTWVzc2FnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW5NZXNzYWdlKElMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvb3MvTWVzc2FnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0KExqYXZhL2xhbmcvUnVubmFibGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0QXRGcm9udE9mUXVldWUoTGphdmEvbGFuZy9SdW5uYWJsZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InBvc3RBdFRpbWUoTGphdmEvbGFuZy9SdW5uYWJsZTtKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0QXRUaW1lKExqYXZhL2xhbmcvUnVubmFibGU7TGphdmEvbGFuZy9PYmplY3Q7SilaIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9zdERlbGF5ZWQoTGphdmEvbGFuZy9SdW5uYWJsZTtKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0RGVsYXllZChMamF2YS9sYW5nL1J1bm5hYmxlO0xqYXZhL2xhbmcvT2JqZWN0O0opWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQ2FsbGJhY2tzKExqYXZhL2xhbmcvUnVubmFibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVDYWxsYmFja3MoTGphdmEvbGFuZy9SdW5uYWJsZTtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUNhbGxiYWNrc0FuZE1lc3NhZ2VzKExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlTWVzc2FnZXMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlTWVzc2FnZXMoSUxqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZEVtcHR5TWVzc2FnZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kRW1wdHlNZXNzYWdlQXRUaW1lKElKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kRW1wdHlNZXNzYWdlRGVsYXllZChJSilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZE1lc3NhZ2UoTGFuZHJvaWQvb3MvTWVzc2FnZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRNZXNzYWdlQXRGcm9udE9mUXVldWUoTGFuZHJvaWQvb3MvTWVzc2FnZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRNZXNzYWdlQXRUaW1lKExhbmRyb2lkL29zL01lc3NhZ2U7SilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZE1lc3NhZ2VEZWxheWVkKExhbmRyb2lkL29zL01lc3NhZ2U7SilaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9IYW5kbGVyJENhbGxiYWNrIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVNZXNzYWdlKExhbmRyb2lkL29zL01lc3NhZ2U7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL0hhbmRsZXJUaHJlYWQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1RocmVhZCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb29wZXIoKUxhbmRyb2lkL29zL0xvb3BlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHJlYWRJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTG9vcGVyUHJlcGFyZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWl0KClaIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InF1aXRTYWZlbHkoKVoiIHNpbmNlPSIxOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvSGFyZHdhcmVQcm9wZXJ0aWVzTWFuYWdlciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENwdVVzYWdlcygpW0xhbmRyb2lkL29zL0NwdVVzYWdlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXZpY2VUZW1wZXJhdHVyZXMoSUkpW0YiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGYW5TcGVlZHMoKVtGIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVZJQ0VfVEVNUEVSQVRVUkVfQkFUVEVSWSIvPgotCQk8ZmllbGQgbmFtZT0iREVWSUNFX1RFTVBFUkFUVVJFX0NQVSIvPgotCQk8ZmllbGQgbmFtZT0iREVWSUNFX1RFTVBFUkFUVVJFX0dQVSIvPgotCQk8ZmllbGQgbmFtZT0iREVWSUNFX1RFTVBFUkFUVVJFX1NLSU4iLz4KLQkJPGZpZWxkIG5hbWU9IlRFTVBFUkFUVVJFX0NVUlJFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlRFTVBFUkFUVVJFX1NIVVRET1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJURU1QRVJBVFVSRV9USFJPVFRMSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJURU1QRVJBVFVSRV9USFJPVFRMSU5HX0JFTE9XX1ZSX01JTiIvPgotCQk8ZmllbGQgbmFtZT0iVU5ERUZJTkVEX1RFTVBFUkFUVVJFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9JQmluZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO1tMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wQXN5bmMoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7W0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JpbmRlckFsaXZlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGlua1RvRGVhdGgoTGFuZHJvaWQvb3MvSUJpbmRlciREZWF0aFJlY2lwaWVudDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwaW5nQmluZGVyKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnlMb2NhbEludGVyZmFjZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvb3MvSUludGVyZmFjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFuc2FjdChJTGFuZHJvaWQvb3MvUGFyY2VsO0xhbmRyb2lkL29zL1BhcmNlbDtJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmxpbmtUb0RlYXRoKExhbmRyb2lkL29zL0lCaW5kZXIkRGVhdGhSZWNpcGllbnQ7SSlaIi8+Ci0JCTxmaWVsZCBuYW1lPSJEVU1QX1RSQU5TQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSVJTVF9DQUxMX1RSQU5TQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX09ORVdBWSIvPgotCQk8ZmllbGQgbmFtZT0iSU5URVJGQUNFX1RSQU5TQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVNUX0NBTExfVFJBTlNBQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkxJS0VfVFJBTlNBQ1RJT04iIHNpbmNlPSIxNSIvPgotCQk8ZmllbGQgbmFtZT0iUElOR19UUkFOU0FDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iVFdFRVRfVFJBTlNBQ1RJT04iIHNpbmNlPSIxMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvSUJpbmRlciREZWF0aFJlY2lwaWVudCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZGVyRGllZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvSUludGVyZmFjZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXNCaW5kZXIoKUxhbmRyb2lkL29zL0lCaW5kZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9Mb2NhbGVMaXN0IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbTGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JMYW5ndWFnZVRhZ3MoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL29zL0xvY2FsZUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KEkpTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWRqdXN0ZWREZWZhdWx0KClMYW5kcm9pZC9vcy9Mb2NhbGVMaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHQoKUxhbmRyb2lkL29zL0xvY2FsZUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW1wdHlMb2NhbGVMaXN0KClMYW5kcm9pZC9vcy9Mb2NhbGVMaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpcnN0TWF0Y2goW0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0xvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmRleE9mKExqYXZhL3V0aWwvTG9jYWxlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbXB0eSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHQoTGFuZHJvaWQvb3MvTG9jYWxlTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0xhbmd1YWdlVGFncygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9Mb29wZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWilWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExhbmRyb2lkL3V0aWwvUHJpbnRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1haW5Mb29wZXIoKUxhbmRyb2lkL29zL0xvb3BlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWV1ZSgpTGFuZHJvaWQvb3MvTWVzc2FnZVF1ZXVlOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGhyZWFkKClMamF2YS9sYW5nL1RocmVhZDsiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDdXJyZW50VGhyZWFkKClaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb29wKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibXlMb29wZXIoKUxhbmRyb2lkL29zL0xvb3BlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJteVF1ZXVlKClMYW5kcm9pZC9vcy9NZXNzYWdlUXVldWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJlcGFyZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InByZXBhcmVNYWluTG9vcGVyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icXVpdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InF1aXRTYWZlbHkoKVYiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1lc3NhZ2VMb2dnaW5nKExhbmRyb2lkL3V0aWwvUHJpbnRlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvTWVtb3J5RmlsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFsbG93UHVyZ2luZyhaKVoiIGRlcHJlY2F0ZWQ9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dFN0cmVhbSgpTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3V0cHV0U3RyZWFtKClMamF2YS9pby9PdXRwdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQdXJnaW5nQWxsb3dlZCgpWiIgZGVwcmVjYXRlZD0iMjciLz4KLQkJPG1ldGhvZCBuYW1lPSJsZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkQnl0ZXMoW0JJSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlQnl0ZXMoW0JJSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvTWVzc2FnZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlGcm9tKExhbmRyb2lkL29zL01lc3NhZ2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxsYmFjaygpTGphdmEvbGFuZy9SdW5uYWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFyZ2V0KClMYW5kcm9pZC9vcy9IYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdoZW4oKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FzeW5jaHJvbm91cygpWiIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluKClMYW5kcm9pZC9vcy9NZXNzYWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbihMYW5kcm9pZC9vcy9IYW5kbGVyOylMYW5kcm9pZC9vcy9NZXNzYWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbihMYW5kcm9pZC9vcy9IYW5kbGVyO0kpTGFuZHJvaWQvb3MvTWVzc2FnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW4oTGFuZHJvaWQvb3MvSGFuZGxlcjtJSUkpTGFuZHJvaWQvb3MvTWVzc2FnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW4oTGFuZHJvaWQvb3MvSGFuZGxlcjtJSUlMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvb3MvTWVzc2FnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW4oTGFuZHJvaWQvb3MvSGFuZGxlcjtJTGphdmEvbGFuZy9PYmplY3Q7KUxhbmRyb2lkL29zL01lc3NhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluKExhbmRyb2lkL29zL0hhbmRsZXI7TGphdmEvbGFuZy9SdW5uYWJsZTspTGFuZHJvaWQvb3MvTWVzc2FnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW4oTGFuZHJvaWQvb3MvTWVzc2FnZTspTGFuZHJvaWQvb3MvTWVzc2FnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZWVrRGF0YSgpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlY3ljbGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kVG9UYXJnZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBc3luY2hyb25vdXMoWilWIiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRhcmdldChMYW5kcm9pZC9vcy9IYW5kbGVyOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJhcmcxIi8+Ci0JCTxmaWVsZCBuYW1lPSJhcmcyIi8+Ci0JCTxmaWVsZCBuYW1lPSJvYmoiLz4KLQkJPGZpZWxkIG5hbWU9InJlcGx5VG8iLz4KLQkJPGZpZWxkIG5hbWU9InNlbmRpbmdVaWQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0id2hhdCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvTWVzc2FnZVF1ZXVlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSWRsZUhhbmRsZXIoTGFuZHJvaWQvb3MvTWVzc2FnZVF1ZXVlJElkbGVIYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkT25GaWxlRGVzY3JpcHRvckV2ZW50TGlzdGVuZXIoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7SUxhbmRyb2lkL29zL01lc3NhZ2VRdWV1ZSRPbkZpbGVEZXNjcmlwdG9yRXZlbnRMaXN0ZW5lcjspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJZGxlKClaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVJZGxlSGFuZGxlcihMYW5kcm9pZC9vcy9NZXNzYWdlUXVldWUkSWRsZUhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVPbkZpbGVEZXNjcmlwdG9yRXZlbnRMaXN0ZW5lcihMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspViIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9NZXNzYWdlUXVldWUkSWRsZUhhbmRsZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXVlSWRsZSgpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvTWVzc2FnZVF1ZXVlJE9uRmlsZURlc2NyaXB0b3JFdmVudExpc3RlbmVyIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25GaWxlRGVzY3JpcHRvckV2ZW50cyhMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtJKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkVWRU5UX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9JTlBVVCIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfT1VUUFVUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9NZXNzZW5nZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9JQmluZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmluZGVyKClMYW5kcm9pZC9vcy9JQmluZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRNZXNzZW5nZXJPck51bGxGcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspTGFuZHJvaWQvb3MvTWVzc2VuZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmQoTGFuZHJvaWQvb3MvTWVzc2FnZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlTWVzc2VuZ2VyT3JOdWxsVG9QYXJjZWwoTGFuZHJvaWQvb3MvTWVzc2VuZ2VyO0xhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvTmV0d29ya09uTWFpblRocmVhZEV4Y2VwdGlvbiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL09wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kRnJvbShMYW5kcm9pZC9vcy9QYXJjZWw7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUJpbmRlckFycmF5KClbTGFuZHJvaWQvb3MvSUJpbmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVCaW5kZXJBcnJheUxpc3QoKUxqYXZhL3V0aWwvQXJyYXlMaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUJvb2xlYW5BcnJheSgpW1oiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVCeXRlQXJyYXkoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ2hhckFycmF5KClbQyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZURvdWJsZUFycmF5KClbRCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUZsb2F0QXJyYXkoKVtGIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSW50QXJyYXkoKVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlTG9uZ0FycmF5KClbSiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVN0cmluZ0FycmF5KClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU3RyaW5nQXJyYXlMaXN0KClMamF2YS91dGlsL0FycmF5TGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUeXBlZEFycmF5KExhbmRyb2lkL29zL1BhcmNlbGFibGUkQ3JlYXRvcjspW0xqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVR5cGVkQXJyYXlMaXN0KExhbmRyb2lkL29zL1BhcmNlbGFibGUkQ3JlYXRvcjspTGphdmEvdXRpbC9BcnJheUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0YUF2YWlsKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0YUNhcGFjaXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0YVBvc2l0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0YVNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmZvcmNlSW50ZXJmYWNlKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRmlsZURlc2NyaXB0b3JzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFyc2hhbGwoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluKClMYW5kcm9pZC9vcy9QYXJjZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluKEkpTGFuZHJvaWQvb3MvUGFyY2VsOyIgcmVtb3ZlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkQXJyYXkoTGphdmEvbGFuZy9DbGFzc0xvYWRlcjspW0xqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRBcnJheUxpc3QoTGphdmEvbGFuZy9DbGFzc0xvYWRlcjspTGphdmEvdXRpbC9BcnJheUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEJpbmRlckFycmF5KFtMYW5kcm9pZC9vcy9JQmluZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEJpbmRlckxpc3QoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEJvb2xlYW5BcnJheShbWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEJ1bmRsZSgpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRCdW5kbGUoTGphdmEvbGFuZy9DbGFzc0xvYWRlcjspTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRCeXRlKClCIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEJ5dGVBcnJheShbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZENoYXJBcnJheShbQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZERvdWJsZSgpRCIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWREb3VibGVBcnJheShbRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEV4Y2VwdGlvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRFeGNlcHRpb24oSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEZpbGVEZXNjcmlwdG9yKClMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkRmxvYXQoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkRmxvYXRBcnJheShbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEhhc2hNYXAoTGphdmEvbGFuZy9DbGFzc0xvYWRlcjspTGphdmEvdXRpbC9IYXNoTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRJbnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkSW50QXJyYXkoW0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRMaXN0KExqYXZhL3V0aWwvTGlzdDtMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZExvbmcoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkTG9uZ0FycmF5KFtKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkTWFwKExqYXZhL3V0aWwvTWFwO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkUGFyY2VsYWJsZShMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylMYW5kcm9pZC9vcy9QYXJjZWxhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRQYXJjZWxhYmxlQXJyYXkoTGphdmEvbGFuZy9DbGFzc0xvYWRlcjspW0xhbmRyb2lkL29zL1BhcmNlbGFibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFBlcnNpc3RhYmxlQnVuZGxlKClMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRQZXJzaXN0YWJsZUJ1bmRsZShMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRTZXJpYWxpemFibGUoKUxqYXZhL2lvL1NlcmlhbGl6YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkU2l6ZSgpTGFuZHJvaWQvdXRpbC9TaXplOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFNpemVGKClMYW5kcm9pZC91dGlsL1NpemVGOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFNwYXJzZUFycmF5KExqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KUxhbmRyb2lkL3V0aWwvU3BhcnNlQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFNwYXJzZUJvb2xlYW5BcnJheSgpTGFuZHJvaWQvdXRpbC9TcGFyc2VCb29sZWFuQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFN0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFN0cmluZ0FycmF5KFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRTdHJpbmdMaXN0KExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRTdHJvbmdCaW5kZXIoKUxhbmRyb2lkL29zL0lCaW5kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFR5cGVkQXJyYXkoW0xqYXZhL2xhbmcvT2JqZWN0O0xhbmRyb2lkL29zL1BhcmNlbGFibGUkQ3JlYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRUeXBlZExpc3QoTGphdmEvdXRpbC9MaXN0O0xhbmRyb2lkL29zL1BhcmNlbGFibGUkQ3JlYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRUeXBlZE9iamVjdChMYW5kcm9pZC9vcy9QYXJjZWxhYmxlJENyZWF0b3I7KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFZhbHVlKExqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlY3ljbGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhQ2FwYWNpdHkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0YVBvc2l0aW9uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFTaXplKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InVubWFyc2hhbGwoW0JJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVBcnJheShbTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUJpbmRlckFycmF5KFtMYW5kcm9pZC9vcy9JQmluZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVCaW5kZXJMaXN0KExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlQm9vbGVhbkFycmF5KFtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUJ1bmRsZShMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUJ5dGUoQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVCeXRlQXJyYXkoW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlQnl0ZUFycmF5KFtCSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlQ2hhckFycmF5KFtDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZURvdWJsZShEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZURvdWJsZUFycmF5KFtEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUV4Y2VwdGlvbihMamF2YS9sYW5nL0V4Y2VwdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlRmlsZURlc2NyaXB0b3IoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUZsb2F0KEYpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlRmxvYXRBcnJheShbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVJbnQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVJbnRBcnJheShbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVJbnRlcmZhY2VUb2tlbihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlTGlzdChMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUxvbmcoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVMb25nQXJyYXkoW0opViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlTWFwKExqYXZhL3V0aWwvTWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVOb0V4Y2VwdGlvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlUGFyY2VsYWJsZShMYW5kcm9pZC9vcy9QYXJjZWxhYmxlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlUGFyY2VsYWJsZUFycmF5KFtMYW5kcm9pZC9vcy9QYXJjZWxhYmxlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlUGVyc2lzdGFibGVCdW5kbGUoTGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlU2VyaWFsaXphYmxlKExqYXZhL2lvL1NlcmlhbGl6YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlU2l6ZShMYW5kcm9pZC91dGlsL1NpemU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlU2l6ZUYoTGFuZHJvaWQvdXRpbC9TaXplRjspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVTcGFyc2VBcnJheShMYW5kcm9pZC91dGlsL1NwYXJzZUFycmF5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVTcGFyc2VCb29sZWFuQXJyYXkoTGFuZHJvaWQvdXRpbC9TcGFyc2VCb29sZWFuQXJyYXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlU3RyaW5nQXJyYXkoW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVTdHJpbmdMaXN0KExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlU3Ryb25nQmluZGVyKExhbmRyb2lkL29zL0lCaW5kZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVN0cm9uZ0ludGVyZmFjZShMYW5kcm9pZC9vcy9JSW50ZXJmYWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVUeXBlZEFycmF5KFtMYW5kcm9pZC9vcy9QYXJjZWxhYmxlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVHlwZWRMaXN0KExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVHlwZWRPYmplY3QoTGFuZHJvaWQvb3MvUGFyY2VsYWJsZTtJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVmFsdWUoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUklOR19DUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL0Nsb3NlYWJsZSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRvcHRGZChJKUxhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOyIgc2luY2U9IjEzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuRGV0ZWN0RXJyb3JzKClaIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja0Vycm9yKClWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlV2l0aEVycm9yKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVQaXBlKClbTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVJlbGlhYmxlUGlwZSgpW0xhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlUmVsaWFibGVTb2NrZXRQYWlyKClbTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTb2NrZXRQYWlyKClbTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRhY2hGZCgpSSIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHVwKClMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImR1cChMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7IiBzaW5jZT0iMTMiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tRGF0YWdyYW1Tb2NrZXQoTGphdmEvbmV0L0RhdGFncmFtU29ja2V0OylMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb21GZChJKUxhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOyIgc2luY2U9IjEzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbVNvY2tldChMamF2YS9uZXQvU29ja2V0OylMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGZCgpSSIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsZURlc2NyaXB0b3IoKUxqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXRTaXplKClKIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW4oTGphdmEvaW8vRmlsZTtJKUxhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW4oTGphdmEvaW8vRmlsZTtJTGFuZHJvaWQvb3MvSGFuZGxlcjtMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvciRPbkNsb3NlTGlzdGVuZXI7KUxhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VNb2RlKExqYXZhL2xhbmcvU3RyaW5nOylJIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfQVBQRU5EIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9DUkVBVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfUkVBRF9PTkxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX1JFQURfV1JJVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfVFJVTkNBVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfV09STERfUkVBREFCTEUiIGRlcHJlY2F0ZWQ9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX1dPUkxEX1dSSVRFQUJMRSIgZGVwcmVjYXRlZD0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfV1JJVEVfT05MWSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3IkQXV0b0Nsb3NlSW5wdXRTdHJlYW0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9GaWxlSW5wdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yJEF1dG9DbG9zZU91dHB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0ZpbGVPdXRwdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yJEZpbGVEZXNjcmlwdG9yRGV0YWNoZWRFeGNlcHRpb24iIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSU9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yJE9uQ2xvc2VMaXN0ZW5lciIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2xvc2UoTGphdmEvaW8vSU9FeGNlcHRpb247KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbEZvcm1hdEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsVXVpZCIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL1VVSUQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tU3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9vcy9QYXJjZWxVdWlkOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFV1aWQoKUxqYXZhL3V0aWwvVVVJRDsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImRlc2NyaWJlQ29udGVudHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVRvUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDtJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRTX0ZJTEVfREVTQ1JJUFRPUiIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQ0VMQUJMRV9XUklURV9SRVRVUk5fVkFMVUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUkQ2xhc3NMb2FkZXJDcmVhdG9yIiBzaW5jZT0iMTMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSRDcmVhdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRnJvbVBhcmNlbChMYW5kcm9pZC9vcy9QYXJjZWw7TGphdmEvbGFuZy9DbGFzc0xvYWRlcjspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlJENyZWF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUZyb21QYXJjZWwoTGFuZHJvaWQvb3MvUGFyY2VsOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdBcnJheShJKVtMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1BhdHRlcm5NYXRjaGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXRoKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF0Y2goTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlBBVFRFUk5fQURWQU5DRURfR0xPQiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQQVRURVJOX0xJVEVSQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlBBVFRFUk5fUFJFRklYIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVRURVJOX1NJTVBMRV9HTE9CIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9vcy9CYXNlQnVuZGxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlZXBDb3B5KClMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlcnNpc3RhYmxlQnVuZGxlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRQZXJzaXN0YWJsZUJ1bmRsZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTspViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRU1QVFkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1Bvd2VyTWFuYWdlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYXRpb25Qb3dlclNhdmVNb2RlKClJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnb1RvU2xlZXAoSilWIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGV2aWNlSWRsZU1vZGUoKVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSWdub3JpbmdCYXR0ZXJ5T3B0aW1pemF0aW9ucyhMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbnRlcmFjdGl2ZSgpWiIgc2luY2U9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQb3dlclNhdmVNb2RlKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NjcmVlbk9uKClaIiBzaW5jZT0iNyIgZGVwcmVjYXRlZD0iMjAiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N1c3RhaW5lZFBlcmZvcm1hbmNlTW9kZVN1cHBvcnRlZCgpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXYWtlTG9ja0xldmVsU3VwcG9ydGVkKEkpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3V2FrZUxvY2soSUxqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9vcy9Qb3dlck1hbmFnZXIkV2FrZUxvY2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVib290KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InVzZXJBY3Rpdml0eShKWilWIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Indha2VVcChKKVYiIHNpbmNlPSIxNyIgcmVtb3ZlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDUVVJUkVfQ0FVU0VTX1dBS0VVUCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RFVklDRV9JRExFX01PREVfQ0hBTkdFRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUE9XRVJfU0FWRV9NT0RFX0NIQU5HRUQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRlVMTF9XQUtFX0xPQ0siIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NBVElPTl9NT0RFX0FMTF9ESVNBQkxFRF9XSEVOX1NDUkVFTl9PRkYiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQVRJT05fTU9ERV9GT1JFR1JPVU5EX09OTFkiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQVRJT05fTU9ERV9HUFNfRElTQUJMRURfV0hFTl9TQ1JFRU5fT0ZGIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FUSU9OX01PREVfTk9fQ0hBTkdFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9OX0FGVEVSX1JFTEVBU0UiLz4KLQkJPGZpZWxkIG5hbWU9IlBBUlRJQUxfV0FLRV9MT0NLIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9YSU1JVFlfU0NSRUVOX09GRl9XQUtFX0xPQ0siIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUkVMRUFTRV9GTEFHX1dBSVRfRk9SX05PX1BST1hJTUlUWSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5fQlJJR0hUX1dBS0VfTE9DSyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTl9ESU1fV0FLRV9MT0NLIiBkZXByZWNhdGVkPSIxNyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvUG93ZXJNYW5hZ2VyJFdha2VMb2NrIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUG93ZXJNYW5hZ2VyOylWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9Qb3dlck1hbmFnZXI7SUxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3F1aXJlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWNxdWlyZShKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0hlbGQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZShJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlZmVyZW5jZUNvdW50ZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V29ya1NvdXJjZShMYW5kcm9pZC9vcy9Xb3JrU291cmNlOylWIiBzaW5jZT0iOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvUHJvY2VzcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RWxhcHNlZENwdVRpbWUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeGNsdXNpdmVDb3JlcygpW0kiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdpZEZvck5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydEVsYXBzZWRSZWFsdGltZSgpSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhcnRVcHRpbWVNaWxsaXMoKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRocmVhZFByaW9yaXR5KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVpZEZvck5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpczY0Qml0KClaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FwcGxpY2F0aW9uVWlkKEkpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJc29sYXRlZCgpWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ia2lsbFByb2Nlc3MoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibXlQaWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJteVRpZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im15VWlkKClJIiBzaW5jZT0iMiIvPgotCQk8bWV0aG9kIG5hbWU9Im15VXNlckhhbmRsZSgpTGFuZHJvaWQvb3MvVXNlckhhbmRsZTsiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRTaWduYWwoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRocmVhZFByaW9yaXR5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRocmVhZFByaW9yaXR5KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c1Byb2Nlc3NlcygpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkJMVUVUT09USF9HSUQiIHJlbW92ZWQ9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGSVJTVF9BUFBMSUNBVElPTl9VSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkxBU1RfQVBQTElDQVRJT05fVUlEIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORV9VSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR05BTF9LSUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdOQUxfUVVJVCIvPgotCQk8ZmllbGQgbmFtZT0iU0lHTkFMX1VTUjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNZU1RFTV9VSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRIUkVBRF9QUklPUklUWV9BVURJTyIvPgotCQk8ZmllbGQgbmFtZT0iVEhSRUFEX1BSSU9SSVRZX0JBQ0tHUk9VTkQiLz4KLQkJPGZpZWxkIG5hbWU9IlRIUkVBRF9QUklPUklUWV9ERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSFJFQURfUFJJT1JJVFlfRElTUExBWSIvPgotCQk8ZmllbGQgbmFtZT0iVEhSRUFEX1BSSU9SSVRZX0ZPUkVHUk9VTkQiLz4KLQkJPGZpZWxkIG5hbWU9IlRIUkVBRF9QUklPUklUWV9MRVNTX0ZBVk9SQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iVEhSRUFEX1BSSU9SSVRZX0xPV0VTVCIvPgotCQk8ZmllbGQgbmFtZT0iVEhSRUFEX1BSSU9SSVRZX01PUkVfRkFWT1JBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSFJFQURfUFJJT1JJVFlfVVJHRU5UX0FVRElPIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSFJFQURfUFJJT1JJVFlfVVJHRU5UX0RJU1BMQVkiLz4KLQkJPGZpZWxkIG5hbWU9IlRIUkVBRF9QUklPUklUWV9WSURFTyIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9Qcm94eUZpbGVEZXNjcmlwdG9yQ2FsbGJhY2siIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZzeW5jKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZXRTaXplKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZWFkKEpJW0IpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVsZWFzZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uV3JpdGUoSklbQilJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9SZWNvdmVyeVN5c3RlbSIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zdGFsbFBhY2thZ2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2lvL0ZpbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWJvb3RXaXBlQ2FjaGUoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWJvb3RXaXBlVXNlckRhdGEoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idmVyaWZ5UGFja2FnZShMamF2YS9pby9GaWxlO0xhbmRyb2lkL29zL1JlY292ZXJ5U3lzdGVtJFByb2dyZXNzTGlzdGVuZXI7TGphdmEvaW8vRmlsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvUmVjb3ZlcnlTeXN0ZW0kUHJvZ3Jlc3NMaXN0ZW5lciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Qcm9ncmVzcyhJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1JlbW90ZUNhbGxiYWNrTGlzdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmVnaW5Ccm9hZGNhc3QoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5pc2hCcm9hZGNhc3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCcm9hZGNhc3RDb29raWUoSSlMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnJvYWRjYXN0SXRlbShJKUxhbmRyb2lkL29zL0lJbnRlcmZhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVnaXN0ZXJlZENhbGxiYWNrQ29va2llKEkpTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWdpc3RlcmVkQ2FsbGJhY2tDb3VudCgpSSIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVnaXN0ZXJlZENhbGxiYWNrSXRlbShJKUxhbmRyb2lkL29zL0lJbnRlcmZhY2U7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJraWxsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYWxsYmFja0RpZWQoTGFuZHJvaWQvb3MvSUludGVyZmFjZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FsbGJhY2tEaWVkKExhbmRyb2lkL29zL0lJbnRlcmZhY2U7TGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXIoTGFuZHJvaWQvb3MvSUludGVyZmFjZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyKExhbmRyb2lkL29zL0lJbnRlcmZhY2U7TGphdmEvbGFuZy9PYmplY3Q7KVoiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlcihMYW5kcm9pZC9vcy9JSW50ZXJmYWNlOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9SZW1vdGVFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC91dGlsL0FuZHJvaWRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIxNSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvUmVzdWx0UmVjZWl2ZXIiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVjZWl2ZVJlc3VsdChJTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZChJTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9TaGFyZWRNZW1vcnkiIHNpbmNlPSIyNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExqYXZhL2xhbmcvU3RyaW5nO0kpTGFuZHJvaWQvb3MvU2hhcmVkTWVtb3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXAoSUlJKUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcFJlYWRPbmx5KClMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXBSZWFkV3JpdGUoKUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3RlY3QoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5tYXAoTGphdmEvbmlvL0J5dGVCdWZmZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1N0YXRGcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZhaWxhYmxlQmxvY2tzKClJIiBkZXByZWNhdGVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUJsb2Nrc0xvbmcoKUoiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUJ5dGVzKClKIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCbG9ja0NvdW50KClJIiBkZXByZWNhdGVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJsb2NrQ291bnRMb25nKClKIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCbG9ja1NpemUoKUkiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmxvY2tTaXplTG9uZygpSiIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJlZUJsb2NrcygpSSIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcmVlQmxvY2tzTG9uZygpSiIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJlZUJ5dGVzKClKIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3RhbEJ5dGVzKClKIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN0YXQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1N0cmljdE1vZGUiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFsbG93VGhyZWFkRGlza1JlYWRzKClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFRocmVhZFBvbGljeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxvd1RocmVhZERpc2tXcml0ZXMoKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVGhyZWFkUG9saWN5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuYWJsZURlZmF1bHRzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGhyZWFkUG9saWN5KClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFRocmVhZFBvbGljeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWbVBvbGljeSgpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRWbVBvbGljeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RlU2xvd0NhbGwoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRocmVhZFBvbGljeShMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFRocmVhZFBvbGljeTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZtUG9saWN5KExhbmRyb2lkL29zL1N0cmljdE1vZGUkVm1Qb2xpY3k7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1N0cmljdE1vZGUkT25UaHJlYWRWaW9sYXRpb25MaXN0ZW5lciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVGhyZWFkVmlvbGF0aW9uKExhbmRyb2lkL29zL3N0cmljdG1vZGUvVmlvbGF0aW9uOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9TdHJpY3RNb2RlJE9uVm1WaW9sYXRpb25MaXN0ZW5lciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVm1WaW9sYXRpb24oTGFuZHJvaWQvb3Mvc3RyaWN0bW9kZS9WaW9sYXRpb247KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1N0cmljdE1vZGUkVGhyZWFkUG9saWN5IiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJE9uVGhyZWFkVmlvbGF0aW9uTGlzdGVuZXI7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yOylWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxBWCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvU3RyaWN0TW9kZSRUaHJlYWRQb2xpY3kkQnVpbGRlciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1N0cmljdE1vZGUkVGhyZWFkUG9saWN5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVGhyZWFkUG9saWN5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGVjdEFsbCgpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRUaHJlYWRQb2xpY3kkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRlY3RDdXN0b21TbG93Q2FsbHMoKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVGhyZWFkUG9saWN5JEJ1aWxkZXI7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRlY3REaXNrUmVhZHMoKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVGhyZWFkUG9saWN5JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGV0ZWN0RGlza1dyaXRlcygpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRUaHJlYWRQb2xpY3kkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRlY3ROZXR3b3JrKClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFRocmVhZFBvbGljeSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGVjdFJlc291cmNlTWlzbWF0Y2hlcygpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRUaHJlYWRQb2xpY3kkQnVpbGRlcjsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGVjdFVuYnVmZmVyZWRJbygpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRUaHJlYWRQb2xpY3kkQnVpbGRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InBlbmFsdHlEZWF0aCgpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRUaHJlYWRQb2xpY3kkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZW5hbHR5RGVhdGhPbk5ldHdvcmsoKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVGhyZWFkUG9saWN5JEJ1aWxkZXI7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZW5hbHR5RGlhbG9nKClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFRocmVhZFBvbGljeSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBlbmFsdHlEcm9wQm94KClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFRocmVhZFBvbGljeSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBlbmFsdHlGbGFzaFNjcmVlbigpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRUaHJlYWRQb2xpY3kkQnVpbGRlcjsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InBlbmFsdHlMaXN0ZW5lcihMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7TGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRPblRocmVhZFZpb2xhdGlvbkxpc3RlbmVyOylMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFRocmVhZFBvbGljeSRCdWlsZGVyOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGVuYWx0eUxvZygpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRUaHJlYWRQb2xpY3kkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJtaXRBbGwoKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVGhyZWFkUG9saWN5JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGVybWl0Q3VzdG9tU2xvd0NhbGxzKClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFRocmVhZFBvbGljeSRCdWlsZGVyOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVybWl0RGlza1JlYWRzKClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFRocmVhZFBvbGljeSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBlcm1pdERpc2tXcml0ZXMoKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVGhyZWFkUG9saWN5JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGVybWl0TmV0d29yaygpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRUaHJlYWRQb2xpY3kkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJtaXRSZXNvdXJjZU1pc21hdGNoZXMoKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVGhyZWFkUG9saWN5JEJ1aWxkZXI7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJtaXRVbmJ1ZmZlcmVkSW8oKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVGhyZWFkUG9saWN5JEJ1aWxkZXI7IiBzaW5jZT0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1N0cmljdE1vZGUkVm1Qb2xpY3kiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL3V0aWwvSGFzaE1hcDtMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJE9uVm1WaW9sYXRpb25MaXN0ZW5lcjtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7KVYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTEFYIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFZtUG9saWN5JEJ1aWxkZXIiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFZtUG9saWN5OylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRWbVBvbGljeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRlY3RBY3Rpdml0eUxlYWtzKClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFZtUG9saWN5JEJ1aWxkZXI7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRlY3RBbGwoKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVm1Qb2xpY3kkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRlY3RDbGVhcnRleHROZXR3b3JrKClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFZtUG9saWN5JEJ1aWxkZXI7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRlY3RDb250ZW50VXJpV2l0aG91dFBlcm1pc3Npb24oKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVm1Qb2xpY3kkQnVpbGRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGVjdEZpbGVVcmlFeHBvc3VyZSgpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRWbVBvbGljeSRCdWlsZGVyOyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGV0ZWN0TGVha2VkQ2xvc2FibGVPYmplY3RzKClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFZtUG9saWN5JEJ1aWxkZXI7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRlY3RMZWFrZWRSZWdpc3RyYXRpb25PYmplY3RzKClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFZtUG9saWN5JEJ1aWxkZXI7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRlY3RMZWFrZWRTcWxMaXRlT2JqZWN0cygpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRWbVBvbGljeSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGVjdE5vblNka0FwaVVzYWdlKClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFZtUG9saWN5JEJ1aWxkZXI7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRlY3RVbnRhZ2dlZFNvY2tldHMoKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVm1Qb2xpY3kkQnVpbGRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InBlbmFsdHlEZWF0aCgpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRWbVBvbGljeSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBlbmFsdHlEZWF0aE9uQ2xlYXJ0ZXh0TmV0d29yaygpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRWbVBvbGljeSRCdWlsZGVyOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVuYWx0eURlYXRoT25GaWxlVXJpRXhwb3N1cmUoKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVm1Qb2xpY3kkQnVpbGRlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBlbmFsdHlEcm9wQm94KClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFZtUG9saWN5JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGVuYWx0eUxpc3RlbmVyKExqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjtMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJE9uVm1WaW9sYXRpb25MaXN0ZW5lcjspTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRWbVBvbGljeSRCdWlsZGVyOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGVuYWx0eUxvZygpTGFuZHJvaWQvb3MvU3RyaWN0TW9kZSRWbVBvbGljeSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBlcm1pdE5vblNka0FwaVVzYWdlKClMYW5kcm9pZC9vcy9TdHJpY3RNb2RlJFZtUG9saWN5JEJ1aWxkZXI7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGFzc0luc3RhbmNlTGltaXQoTGphdmEvbGFuZy9DbGFzcztJKUxhbmRyb2lkL29zL1N0cmljdE1vZGUkVm1Qb2xpY3kkQnVpbGRlcjsiIHNpbmNlPSIxMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvU3lzdGVtQ2xvY2siIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImN1cnJlbnRUaHJlYWRUaW1lTWlsbGlzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWxhcHNlZFJlYWx0aW1lKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWxhcHNlZFJlYWx0aW1lTmFub3MoKUoiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1cnJlbnRUaW1lTWlsbGlzKEopWiIvPgotCQk8bWV0aG9kIG5hbWU9InNsZWVwKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InVwdGltZU1pbGxpcygpSiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvVGVzdExvb3Blck1hbmFnZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL0xvb3BlcjspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZShMYW5kcm9pZC9vcy9NZXNzYWdlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVzc2FnZVF1ZXVlKClMYW5kcm9pZC9vcy9NZXNzYWdlUXVldWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTWVzc2FnZXMoTGFuZHJvaWQvb3MvSGFuZGxlcjtMamF2YS9sYW5nL09iamVjdDtJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNNZXNzYWdlcyhMYW5kcm9pZC9vcy9IYW5kbGVyO0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvUnVubmFibGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0KClMYW5kcm9pZC9vcy9NZXNzYWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlY3ljbGUoTGFuZHJvaWQvb3MvTWVzc2FnZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1Rva2VuV2F0Y2hlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL0hhbmRsZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3F1aXJlKExhbmRyb2lkL29zL0lCaW5kZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3F1aXJlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFudXAoTGFuZHJvaWQvb3MvSUJpbmRlcjtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHVtcChMamF2YS9pby9QcmludFdyaXRlcjspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBY3F1aXJlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoTGFuZHJvaWQvb3MvSUJpbmRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2VkKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9UcmFjZSIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJlZ2luU2VjdGlvbihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZFNlY3Rpb24oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1RyYW5zYWN0aW9uVG9vTGFyZ2VFeGNlcHRpb24iIHNpbmNlPSIxNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3MvUmVtb3RlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1VzZXJIYW5kbGUiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJIYW5kbGVGb3JVaWQoSSlMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEZyb21QYXJjZWwoTGFuZHJvaWQvb3MvUGFyY2VsOylMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVG9QYXJjZWwoTGFuZHJvaWQvb3MvVXNlckhhbmRsZTtMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1VzZXJNYW5hZ2VyIiBzaW5jZT0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVXNlckNyZWF0aW9uSW50ZW50KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9vcy9CdW5kbGU7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJpYWxOdW1iZXJGb3JVc2VyKExhbmRyb2lkL29zL1VzZXJIYW5kbGU7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyQ3JlYXRpb25UaW1lKExhbmRyb2lkL29zL1VzZXJIYW5kbGU7KUoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJGb3JTZXJpYWxOdW1iZXIoSilMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyUHJvZmlsZXMoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJSZXN0cmljdGlvbnMoKUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJSZXN0cmljdGlvbnMoTGFuZHJvaWQvb3MvVXNlckhhbmRsZTspTGFuZHJvaWQvb3MvQnVuZGxlOyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzVXNlclJlc3RyaWN0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RlbW9Vc2VyKClaIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1F1aWV0TW9kZUVuYWJsZWQoTGFuZHJvaWQvb3MvVXNlckhhbmRsZTspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTeXN0ZW1Vc2VyKClaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VzZXJBR29hdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVXNlclJ1bm5pbmcoTGFuZHJvaWQvb3MvVXNlckhhbmRsZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVXNlclJ1bm5pbmdPclN0b3BwaW5nKExhbmRyb2lkL29zL1VzZXJIYW5kbGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VzZXJVbmxvY2tlZCgpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVc2VyVW5sb2NrZWQoTGFuZHJvaWQvb3MvVXNlckhhbmRsZTspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFF1aWV0TW9kZUVuYWJsZWQoWkxhbmRyb2lkL29zL1VzZXJIYW5kbGU7KVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc3RyaWN0aW9uc0NoYWxsZW5nZShMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjE5IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZXJSZXN0cmljdGlvbihMamF2YS9sYW5nL1N0cmluZztaKVYiIHNpbmNlPSIxOCIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VyUmVzdHJpY3Rpb25zKExhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjE4IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZXJSZXN0cmljdGlvbnMoTGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7KVYiIHNpbmNlPSIxOCIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c011bHRpcGxlVXNlcnMoKVoiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQUxMT1dfUEFSRU5UX1BST0ZJTEVfQVBQX0xJTktJTkciIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfQUREX01BTkFHRURfUFJPRklMRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19BRERfVVNFUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19BREpVU1RfVk9MVU1FIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX0FJUlBMQU5FX01PREUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfQU1CSUVOVF9ESVNQTEFZIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX0FQUFNfQ09OVFJPTCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19BVVRPRklMTCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19CTFVFVE9PVEgiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfQkxVRVRPT1RIX1NIQVJJTkciIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfQ09ORklHX0JMVUVUT09USCIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19DT05GSUdfQlJJR0hUTkVTUyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19DT05GSUdfQ0VMTF9CUk9BRENBU1RTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX0NPTkZJR19DUkVERU5USUFMUyIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19DT05GSUdfREFURV9USU1FIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX0NPTkZJR19MT0NBTEUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfQ09ORklHX0xPQ0FUSU9OIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX0NPTkZJR19NT0JJTEVfTkVUV09SS1MiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfQ09ORklHX1NDUkVFTl9USU1FT1VUIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX0NPTkZJR19URVRIRVJJTkciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfQ09ORklHX1ZQTiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19DT05GSUdfV0lGSSIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19DUkVBVEVfV0lORE9XUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19DUk9TU19QUk9GSUxFX0NPUFlfUEFTVEUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfREFUQV9ST0FNSU5HIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX0RFQlVHR0lOR19GRUFUVVJFUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19GQUNUT1JZX1JFU0VUIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX0ZVTiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19JTlNUQUxMX0FQUFMiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfSU5TVEFMTF9VTktOT1dOX1NPVVJDRVMiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfTU9ESUZZX0FDQ09VTlRTIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX01PVU5UX1BIWVNJQ0FMX01FRElBIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX05FVFdPUktfUkVTRVQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfT1VUR09JTkdfQkVBTSIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19PVVRHT0lOR19DQUxMUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19QUklOVElORyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19SRU1PVkVfTUFOQUdFRF9QUk9GSUxFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX1JFTU9WRV9VU0VSIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX1NBRkVfQk9PVCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNBTExPV19TRVRfVVNFUl9JQ09OIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX1NFVF9XQUxMUEFQRVIiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfU0hBUkVfSU5UT19NQU5BR0VEX1BST0ZJTEUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfU0hBUkVfTE9DQVRJT04iIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfU01TIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX1NZU1RFTV9FUlJPUl9ESUFMT0dTIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU0FMTE9XX1VOSUZJRURfUEFTU1dPUkQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfVU5JTlNUQUxMX0FQUFMiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfVU5NVVRFX01JQ1JPUEhPTkUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfVVNCX0ZJTEVfVFJBTlNGRVIiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRElTQUxMT1dfVVNFUl9TV0lUQ0giIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRU5TVVJFX1ZFUklGWV9BUFBTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9SRVNUUklDVElPTlNfUEVORElORyIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VSX0NSRUFUSU9OX0ZBSUxFRF9OT1RfUEVSTUlUVEVEIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlVTRVJfQ1JFQVRJT05fRkFJTEVEX05PX01PUkVfVVNFUlMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVVNFUl9PUEVSQVRJT05fRVJST1JfQ1VSUkVOVF9VU0VSIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlVTRVJfT1BFUkFUSU9OX0VSUk9SX0xPV19TVE9SQUdFIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlVTRVJfT1BFUkFUSU9OX0VSUk9SX01BTkFHRURfUFJPRklMRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VSX09QRVJBVElPTl9FUlJPUl9NQVhfUlVOTklOR19VU0VSUyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VSX09QRVJBVElPTl9FUlJPUl9NQVhfVVNFUlMiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVVNFUl9PUEVSQVRJT05fRVJST1JfVU5LTk9XTiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VSX09QRVJBVElPTl9TVUNDRVNTIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1VzZXJNYW5hZ2VyJFVzZXJPcGVyYXRpb25FeGNlcHRpb24iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJPcGVyYXRpb25SZXN1bHQoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1ZpYnJhdGlvbkVmZmVjdCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVPbmVTaG90KEpJKUxhbmRyb2lkL29zL1ZpYnJhdGlvbkVmZmVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVXYXZlZm9ybShbSkkpTGFuZHJvaWQvb3MvVmlicmF0aW9uRWZmZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVdhdmVmb3JtKFtKW0lJKUxhbmRyb2lkL29zL1ZpYnJhdGlvbkVmZmVjdDsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfQU1QTElUVURFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9WaWJyYXRvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQW1wbGl0dWRlQ29udHJvbCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzVmlicmF0b3IoKVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InZpYnJhdGUoSilWIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InZpYnJhdGUoSkxhbmRyb2lkL21lZGlhL0F1ZGlvQXR0cmlidXRlczspViIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InZpYnJhdGUoTGFuZHJvaWQvb3MvVmlicmF0aW9uRWZmZWN0OylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2aWJyYXRlKExhbmRyb2lkL29zL1ZpYnJhdGlvbkVmZmVjdDtMYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXM7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InZpYnJhdGUoW0pJKVYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmlicmF0ZShbSklMYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXM7KVYiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL1dvcmtTb3VyY2UiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvV29ya1NvdXJjZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMYW5kcm9pZC9vcy9Xb3JrU291cmNlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaWZmKExhbmRyb2lkL29zL1dvcmtTb3VyY2U7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmUoTGFuZHJvaWQvb3MvV29ya1NvdXJjZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldChMYW5kcm9pZC9vcy9Xb3JrU291cmNlOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9oZWFsdGgvSGVhbHRoU3RhdHMiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhVHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVhc3VyZW1lbnQoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVhc3VyZW1lbnRLZXlBdChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZWFzdXJlbWVudEtleUNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVhc3VyZW1lbnRzKEkpTGphdmEvdXRpbC9NYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVhc3VyZW1lbnRzS2V5QXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVhc3VyZW1lbnRzS2V5Q291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0cyhJKUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXRzS2V5QXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdHNLZXlDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVyKEkpTGFuZHJvaWQvb3MvaGVhbHRoL1RpbWVyU3RhdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lckNvdW50KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVyS2V5QXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZXJLZXlDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVyVGltZShJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lcnMoSSlMamF2YS91dGlsL01hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lcnNLZXlBdChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lcnNLZXlDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc01lYXN1cmVtZW50KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc01lYXN1cmVtZW50cyhJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNTdGF0cyhJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNUaW1lcihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNUaW1lcnMoSSlaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9oZWFsdGgvUGFja2FnZUhlYWx0aFN0YXRzIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVFNfV0FLRVVQX0FMQVJNU19DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFNfU0VSVklDRVMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL2hlYWx0aC9QaWRIZWFsdGhTdGF0cyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfV0FLRV9ORVNUSU5HX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9XQUtFX1NUQVJUX01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9XQUtFX1NVTV9NUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvaGVhbHRoL1Byb2Nlc3NIZWFsdGhTdGF0cyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfQU5SX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9DUkFTSEVTX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9GT1JFR1JPVU5EX01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9TVEFSVFNfQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX1NZU1RFTV9USU1FX01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9VU0VSX1RJTUVfTVMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL2hlYWx0aC9TZXJ2aWNlSGVhbHRoU3RhdHMiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX0xBVU5DSF9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfU1RBUlRfU0VSVklDRV9DT1VOVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3MvaGVhbHRoL1N5c3RlbUhlYWx0aE1hbmFnZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0YWtlTXlVaWRTbmFwc2hvdCgpTGFuZHJvaWQvb3MvaGVhbHRoL0hlYWx0aFN0YXRzOyIvPgotCQk8bWV0aG9kIG5hbWU9InRha2VVaWRTbmFwc2hvdChJKUxhbmRyb2lkL29zL2hlYWx0aC9IZWFsdGhTdGF0czsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0YWtlVWlkU25hcHNob3RzKFtJKVtMYW5kcm9pZC9vcy9oZWFsdGgvSGVhbHRoU3RhdHM7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9oZWFsdGgvVGltZXJTdGF0IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvdW50KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWUoSilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9oZWFsdGgvVWlkSGVhbHRoU3RhdHMiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX0JMVUVUT09USF9JRExFX01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9CTFVFVE9PVEhfUE9XRVJfTUFNUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfQkxVRVRPT1RIX1JYX0JZVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9CTFVFVE9PVEhfUlhfTVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX0JMVUVUT09USF9SWF9QQUNLRVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9CTFVFVE9PVEhfVFhfQllURVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX0JMVUVUT09USF9UWF9NUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfQkxVRVRPT1RIX1RYX1BBQ0tFVFMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX0JVVFRPTl9VU0VSX0FDVElWSVRZX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9DUFVfUE9XRVJfTUFNUyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX01PQklMRV9JRExFX01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9NT0JJTEVfUE9XRVJfTUFNUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfTU9CSUxFX1JYX0JZVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9NT0JJTEVfUlhfTVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX01PQklMRV9SWF9QQUNLRVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9NT0JJTEVfVFhfQllURVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX01PQklMRV9UWF9NUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfTU9CSUxFX1RYX1BBQ0tFVFMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX09USEVSX1VTRVJfQUNUSVZJVFlfQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX1JFQUxUSU1FX0JBVFRFUllfTVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX1JFQUxUSU1FX1NDUkVFTl9PRkZfQkFUVEVSWV9NUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfU1lTVEVNX0NQVV9USU1FX01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9UT1VDSF9VU0VSX0FDVElWSVRZX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9VUFRJTUVfQkFUVEVSWV9NUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfVVBUSU1FX1NDUkVFTl9PRkZfQkFUVEVSWV9NUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfVVNFUl9DUFVfVElNRV9NUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfV0lGSV9GVUxMX0xPQ0tfTVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX1dJRklfSURMRV9NUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfV0lGSV9NVUxUSUNBU1RfTVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX1dJRklfUE9XRVJfTUFNUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRU1FTlRfV0lGSV9SVU5OSU5HX01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9XSUZJX1JYX0JZVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9XSUZJX1JYX01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFTUVOVF9XSUZJX1JYX1BBQ0tFVFMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX1dJRklfVFhfQllURVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX1dJRklfVFhfTVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVNRU5UX1dJRklfVFhfUEFDS0VUUyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFNfUEFDS0FHRVMiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRTX1BJRFMiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRTX1BST0NFU1NFUyIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVJTX0pPQlMiLz4KLQkJPGZpZWxkIG5hbWU9IlRJTUVSU19TRU5TT1JTIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FUlNfU1lOQ1MiLz4KLQkJPGZpZWxkIG5hbWU9IlRJTUVSU19XQUtFTE9DS1NfRFJBVyIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVJTX1dBS0VMT0NLU19GVUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FUlNfV0FLRUxPQ0tTX1BBUlRJQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlRJTUVSU19XQUtFTE9DS1NfV0lORE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FUl9BVURJTyIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVJfQkxVRVRPT1RIX1NDQU4iLz4KLQkJPGZpZWxkIG5hbWU9IlRJTUVSX0NBTUVSQSIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVJfRkxBU0hMSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVJfRk9SRUdST1VORF9BQ1RJVklUWSIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVJfR1BTX1NFTlNPUiIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVJfTU9CSUxFX1JBRElPX0FDVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVJfUFJPQ0VTU19TVEFURV9CQUNLR1JPVU5EX01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FUl9QUk9DRVNTX1NUQVRFX0NBQ0hFRF9NUyIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVJfUFJPQ0VTU19TVEFURV9GT1JFR1JPVU5EX01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FUl9QUk9DRVNTX1NUQVRFX0ZPUkVHUk9VTkRfU0VSVklDRV9NUyIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVJfUFJPQ0VTU19TVEFURV9UT1BfTVMiLz4KLQkJPGZpZWxkIG5hbWU9IlRJTUVSX1BST0NFU1NfU1RBVEVfVE9QX1NMRUVQSU5HX01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FUl9WSUJSQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVJfVklERU8iLz4KLQkJPGZpZWxkIG5hbWU9IlRJTUVSX1dJRklfU0NBTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3Mvc3RvcmFnZS9Pbk9iYlN0YXRlQ2hhbmdlTGlzdGVuZXIiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uT2JiU3RhdGVDaGFuZ2UoTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9BTFJFQURZX01PVU5URUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0NPVUxEX05PVF9NT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfQ09VTERfTk9UX1VOTU9VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0lOVEVSTkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9OT1RfTU9VTlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfUEVSTUlTU0lPTl9ERU5JRUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PVU5URUQiLz4KLQkJPGZpZWxkIG5hbWU9IlVOTU9VTlRFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3Mvc3RvcmFnZS9TdG9yYWdlTWFuYWdlciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsb2NhdGVCeXRlcyhMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtKKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFsbG9jYXRlQnl0ZXMoTGphdmEvdXRpbC9VVUlEO0opViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxsb2NhdGFibGVCeXRlcyhMamF2YS91dGlsL1VVSUQ7KUoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhY2hlUXVvdGFCeXRlcyhMamF2YS91dGlsL1VVSUQ7KUoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhY2hlU2l6ZUJ5dGVzKExqYXZhL3V0aWwvVVVJRDspSiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW91bnRlZE9iYlBhdGgoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1hcnlTdG9yYWdlVm9sdW1lKClMYW5kcm9pZC9vcy9zdG9yYWdlL1N0b3JhZ2VWb2x1bWU7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdG9yYWdlVm9sdW1lKExqYXZhL2lvL0ZpbGU7KUxhbmRyb2lkL29zL3N0b3JhZ2UvU3RvcmFnZVZvbHVtZTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0b3JhZ2VWb2x1bWVzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVdWlkRm9yUGF0aChMamF2YS9pby9GaWxlOylMamF2YS91dGlsL1VVSUQ7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FsbG9jYXRpb25TdXBwb3J0ZWQoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7KVoiIHNpbmNlPSIyNyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2FjaGVCZWhhdmlvckdyb3VwKExqYXZhL2lvL0ZpbGU7KVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2FjaGVCZWhhdmlvclRvbWJzdG9uZShMamF2YS9pby9GaWxlOylaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VuY3J5cHRlZChMamF2YS9pby9GaWxlOylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc09iYk1vdW50ZWQoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtb3VudE9iYihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9zdG9yYWdlL09uT2JiU3RhdGVDaGFuZ2VMaXN0ZW5lcjspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5Qcm94eUZpbGVEZXNjcmlwdG9yKElMYW5kcm9pZC9vcy9Qcm94eUZpbGVEZXNjcmlwdG9yQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspTGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYWNoZUJlaGF2aW9yR3JvdXAoTGphdmEvaW8vRmlsZTtaKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhY2hlQmVoYXZpb3JUb21ic3RvbmUoTGphdmEvaW8vRmlsZTtaKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InVubW91bnRPYmIoTGphdmEvbGFuZy9TdHJpbmc7WkxhbmRyb2lkL29zL3N0b3JhZ2UvT25PYmJTdGF0ZUNoYW5nZUxpc3RlbmVyOylaIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTUFOQUdFX1NUT1JBR0UiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUkVRVUVTVEVEX0JZVEVTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1VVSUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iVVVJRF9ERUZBVUxUIiBzaW5jZT0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL3N0b3JhZ2UvU3RvcmFnZVZvbHVtZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQWNjZXNzSW50ZW50KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNjcmlwdGlvbihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXRlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVdWlkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VtdWxhdGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcmltYXJ5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZW1vdmFibGUoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NUT1JBR0VfVk9MVU1FIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9zdHJpY3Rtb2RlL0NsZWFydGV4dE5ldHdvcmtWaW9sYXRpb24iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3Mvc3RyaWN0bW9kZS9WaW9sYXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvQ29udGVudFVyaVdpdGhvdXRQZXJtaXNzaW9uVmlvbGF0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvVmlvbGF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvQ3VzdG9tVmlvbGF0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvVmlvbGF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9zdHJpY3Rtb2RlL0Rpc2tSZWFkVmlvbGF0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvVmlvbGF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9zdHJpY3Rtb2RlL0Rpc2tXcml0ZVZpb2xhdGlvbiIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9vcy9zdHJpY3Rtb2RlL1Zpb2xhdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3Mvc3RyaWN0bW9kZS9GaWxlVXJpRXhwb3NlZFZpb2xhdGlvbiIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9vcy9zdHJpY3Rtb2RlL1Zpb2xhdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3Mvc3RyaWN0bW9kZS9JbnN0YW5jZUNvdW50VmlvbGF0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvVmlvbGF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NsYXNzO0pJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE51bWJlck9mSW5zdGFuY2VzKClKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9zdHJpY3Rtb2RlL0ludGVudFJlY2VpdmVyTGVha2VkVmlvbGF0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvVmlvbGF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9zdHJpY3Rtb2RlL0xlYWtlZENsb3NhYmxlVmlvbGF0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvVmlvbGF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9zdHJpY3Rtb2RlL05ldHdvcmtWaW9sYXRpb24iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3Mvc3RyaWN0bW9kZS9WaW9sYXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvTm9uU2RrQXBpVXNlZFZpb2xhdGlvbiIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9vcy9zdHJpY3Rtb2RlL1Zpb2xhdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3Mvc3RyaWN0bW9kZS9SZXNvdXJjZU1pc21hdGNoVmlvbGF0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvVmlvbGF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL09iamVjdDspViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9zdHJpY3Rtb2RlL1NlcnZpY2VDb25uZWN0aW9uTGVha2VkVmlvbGF0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvVmlvbGF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9zdHJpY3Rtb2RlL1NxbGl0ZU9iamVjdExlYWtlZFZpb2xhdGlvbiIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9vcy9zdHJpY3Rtb2RlL1Zpb2xhdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiIHNpbmNlPSIyOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvb3Mvc3RyaWN0bW9kZS9VbmJ1ZmZlcmVkSW9WaW9sYXRpb24iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3Mvc3RyaWN0bW9kZS9WaW9sYXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvVW50YWdnZWRTb2NrZXRWaW9sYXRpb24iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3Mvc3RyaWN0bW9kZS9WaW9sYXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvVmlvbGF0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvVGhyb3dhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9vcy9zdHJpY3Rtb2RlL1dlYlZpZXdNZXRob2RDYWxsZWRPbldyb25nVGhyZWFkVmlvbGF0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL3N0cmljdG1vZGUvVmlvbGF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL0NoZWNrQm94UHJlZmVyZW5jZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZSIgcmVtb3ZlZD0iMTQiLz4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL1R3b1N0YXRlUHJlZmVyZW5jZSIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzYWJsZURlcGVuZGVudHNTdGF0ZSgpWiIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdW1tYXJ5T2ZmKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VtbWFyeU9uKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDaGVja2VkKClaIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoZWNrZWQoWilWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc2FibGVEZXBlbmRlbnRzU3RhdGUoWilWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1bW1hcnlPZmYoSSlWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1bW1hcnlPZmYoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VtbWFyeU9uKEkpViIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdW1tYXJ5T24oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiIHJlbW92ZWQ9IjE0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL0RpYWxvZ1ByZWZlcmVuY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2UiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkNsaWNrTGlzdGVuZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkRpc21pc3NMaXN0ZW5lciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZU1hbmFnZXIkT25BY3Rpdml0eURlc3Ryb3lMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlhbG9nKClMYW5kcm9pZC9hcHAvRGlhbG9nOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaWFsb2dJY29uKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaWFsb2dMYXlvdXRSZXNvdXJjZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpYWxvZ01lc3NhZ2UoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpYWxvZ1RpdGxlKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZWdhdGl2ZUJ1dHRvblRleHQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvc2l0aXZlQnV0dG9uVGV4dCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25CaW5kRGlhbG9nVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZURpYWxvZ1ZpZXcoKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRpYWxvZ0Nsb3NlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByZXBhcmVEaWFsb2dCdWlsZGVyKExhbmRyb2lkL2FwcC9BbGVydERpYWxvZyRCdWlsZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlhbG9nSWNvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaWFsb2dJY29uKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlhbG9nTGF5b3V0UmVzb3VyY2UoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlhbG9nTWVzc2FnZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaWFsb2dNZXNzYWdlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlhbG9nVGl0bGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlhbG9nVGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROZWdhdGl2ZUJ1dHRvblRleHQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmVnYXRpdmVCdXR0b25UZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9zaXRpdmVCdXR0b25UZXh0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvc2l0aXZlQnV0dG9uVGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dEaWFsb2coTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL0VkaXRUZXh0UHJlZmVyZW5jZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ByZWZlcmVuY2UvRGlhbG9nUHJlZmVyZW5jZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVkaXRUZXh0KClMYW5kcm9pZC93aWRnZXQvRWRpdFRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BZGRFZGl0VGV4dFRvRGlhbG9nVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvd2lkZ2V0L0VkaXRUZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJlZmVyZW5jZS9MaXN0UHJlZmVyZW5jZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ByZWZlcmVuY2UvRGlhbG9nUHJlZmVyZW5jZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEluZGV4T2ZWYWx1ZShMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudHJpZXMoKVtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbnRyeSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW50cnlWYWx1ZXMoKVtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW50cmllcyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbnRyaWVzKFtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVudHJ5VmFsdWVzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVudHJ5VmFsdWVzKFtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZhbHVlKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFsdWVJbmRleChJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByZWZlcmVuY2UvTXVsdGlTZWxlY3RMaXN0UHJlZmVyZW5jZSIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL0RpYWxvZ1ByZWZlcmVuY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRJbmRleE9mVmFsdWUoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbnRyaWVzKClbTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW50cnlWYWx1ZXMoKVtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZXMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVudHJpZXMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW50cmllcyhbTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbnRyeVZhbHVlcyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbnRyeVZhbHVlcyhbTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYWx1ZXMoTGphdmEvdXRpbC9TZXQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FsbENoYW5nZUxpc3RlbmVyKExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRQcmVmZXJlbmNlSW5IaWVyYXJjaHkoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZXh0KClMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVwZW5kZW5jeSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RWRpdG9yKClMYW5kcm9pZC9jb250ZW50L1NoYXJlZFByZWZlcmVuY2VzJEVkaXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyYWdtZW50KClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEljb24oKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZW50KClMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheW91dFJlc291cmNlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T25QcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXIoKUxhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZSRPblByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPblByZWZlcmVuY2VDbGlja0xpc3RlbmVyKClMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2UkT25QcmVmZXJlbmNlQ2xpY2tMaXN0ZW5lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmRlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmVudCgpTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlR3JvdXA7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJzaXN0ZWRCb29sZWFuKFopWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlcnNpc3RlZEZsb2F0KEYpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlcnNpc3RlZEludChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJzaXN0ZWRMb25nKEopSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlcnNpc3RlZFN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVyc2lzdGVkU3RyaW5nU2V0KExqYXZhL3V0aWwvU2V0OylMamF2YS91dGlsL1NldDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWZlcmVuY2VEYXRhU3RvcmUoKUxhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZURhdGFTdG9yZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWZlcmVuY2VNYW5hZ2VyKClMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VNYW5hZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNoYXJlZFByZWZlcmVuY2VzKClMYW5kcm9pZC9jb250ZW50L1NoYXJlZFByZWZlcmVuY2VzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3VsZERpc2FibGVWaWV3KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VtbWFyeSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGl0bGUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpdGxlUmVzKClJIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDspTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpZGdldExheW91dFJlc291cmNlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzS2V5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJY29uU3BhY2VSZXNlcnZlZCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQZXJzaXN0ZW50KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZWN5Y2xlRW5hYmxlZCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTZWxlY3RhYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTaW5nbGVMaW5lVGl0bGUoKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeUNoYW5nZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlEZXBlbmRlbmN5Q2hhbmdlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeUhpZXJhcmNoeUNoYW5nZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF0dGFjaGVkVG9BY3Rpdml0eSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQXR0YWNoZWRUb0hpZXJhcmNoeShMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VNYW5hZ2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25CaW5kVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNsaWNrKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVWaWV3KExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwOylMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25EZXBlbmRlbmN5Q2hhbmdlZChMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2U7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZXREZWZhdWx0VmFsdWUoTGFuZHJvaWQvY29udGVudC9yZXMvVHlwZWRBcnJheTtJKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGFyZW50Q2hhbmdlZChMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2U7WilWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByZXBhcmVGb3JSZW1vdmFsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXN0b3JlSW5zdGFuY2VTdGF0ZShMYW5kcm9pZC9vcy9QYXJjZWxhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TYXZlSW5zdGFuY2VTdGF0ZSgpTGFuZHJvaWQvb3MvUGFyY2VsYWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNldEluaXRpYWxWYWx1ZShaTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZWVrRXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJzaXN0Qm9vbGVhbihaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJzaXN0RmxvYXQoRilaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVyc2lzdEludChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJzaXN0TG9uZyhKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJzaXN0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVyc2lzdFN0cmluZ1NldChMamF2YS91dGlsL1NldDspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdG9yZUhpZXJhcmNoeVN0YXRlKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNhdmVIaWVyYXJjaHlTdGF0ZShMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0VmFsdWUoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZXBlbmRlbmN5KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5hYmxlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGcmFnbWVudChMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWNvbihJKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEljb24oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEljb25TcGFjZVJlc2VydmVkKFopViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZW50KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2V5KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5b3V0UmVzb3VyY2UoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25QcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlJE9uUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25QcmVmZXJlbmNlQ2xpY2tMaXN0ZW5lcihMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2UkT25QcmVmZXJlbmNlQ2xpY2tMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9yZGVyKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBlcnNpc3RlbnQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJlZmVyZW5jZURhdGFTdG9yZShMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VEYXRhU3RvcmU7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlY3ljbGVFbmFibGVkKFopViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VsZWN0YWJsZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG91bGREaXNhYmxlVmlldyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaW5nbGVMaW5lVGl0bGUoWilWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdW1tYXJ5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1bW1hcnkoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaXRsZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaXRsZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdpZGdldExheW91dFJlc291cmNlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3VsZENvbW1pdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNob3VsZERpc2FibGVEZXBlbmRlbnRzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdWxkUGVyc2lzdCgpWiIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9PUkRFUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlJEJhc2VTYXZlZFN0YXRlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9BYnNTYXZlZFN0YXRlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWxhYmxlOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2UkT25QcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJlZmVyZW5jZUNoYW5nZShMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2U7TGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZSRPblByZWZlcmVuY2VDbGlja0xpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByZWZlcmVuY2VDbGljayhMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2U7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUFjdGl2aXR5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL0xpc3RBY3Rpdml0eSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUZyYWdtZW50JE9uUHJlZmVyZW5jZVN0YXJ0RnJhZ21lbnRDYWxsYmFjayIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUHJlZmVyZW5jZXNGcm9tSW50ZW50KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFByZWZlcmVuY2VzRnJvbVJlc291cmNlKEkpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kUHJlZmVyZW5jZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5pc2hQcmVmZXJlbmNlUGFuZWwoTGFuZHJvaWQvYXBwL0ZyYWdtZW50O0lMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlZmVyZW5jZU1hbmFnZXIoKUxhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZU1hbmFnZXI7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWZlcmVuY2VTY3JlZW4oKUxhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZVNjcmVlbjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzSGVhZGVycygpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW52YWxpZGF0ZUhlYWRlcnMoKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTXVsdGlQYW5lKClaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZhbGlkRnJhZ21lbnQoTGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRIZWFkZXJzRnJvbVJlc291cmNlKElMamF2YS91dGlsL0xpc3Q7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQnVpbGRIZWFkZXJzKExqYXZhL3V0aWwvTGlzdDspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25CdWlsZFN0YXJ0RnJhZ21lbnRJbnRlbnQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO0lJKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZXRJbml0aWFsSGVhZGVyKClMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VBY3Rpdml0eSRIZWFkZXI7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdldE5ld0hlYWRlcigpTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlQWN0aXZpdHkkSGVhZGVyOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25IZWFkZXJDbGljayhMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VBY3Rpdml0eSRIZWFkZXI7SSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbklzSGlkaW5nSGVhZGVycygpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Jc011bHRpUGFuZSgpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QcmVmZXJlbmNlVHJlZUNsaWNrKExhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZVNjcmVlbjtMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2U7KVoiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGlzdEZvb3RlcihMYW5kcm9pZC92aWV3L1ZpZXc7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhcmVudFRpdGxlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3ZpZXcvVmlldyRPbkNsaWNrTGlzdGVuZXI7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZWZlcmVuY2VTY3JlZW4oTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlU2NyZWVuOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dCcmVhZENydW1icyhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRQcmVmZXJlbmNlRnJhZ21lbnQoTGFuZHJvaWQvYXBwL0ZyYWdtZW50O1opViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRQcmVmZXJlbmNlUGFuZWwoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO0lMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9hcHAvRnJhZ21lbnQ7SSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFdpdGhGcmFnbWVudChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7TGFuZHJvaWQvYXBwL0ZyYWdtZW50O0kpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRXaXRoRnJhZ21lbnQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL2FwcC9GcmFnbWVudDtJSUkpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3dpdGNoVG9IZWFkZXIoTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlQWN0aXZpdHkkSGVhZGVyOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzd2l0Y2hUb0hlYWRlcihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTk9fSEVBREVSUyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TSE9XX0ZSQUdNRU5UIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NIT1dfRlJBR01FTlRfQVJHVU1FTlRTIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NIT1dfRlJBR01FTlRfU0hPUlRfVElUTEUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU0hPV19GUkFHTUVOVF9USVRMRSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIRUFERVJfSURfVU5ERUZJTkVEIiBzaW5jZT0iMTEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUFjdGl2aXR5JEhlYWRlciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCcmVhZENydW1iU2hvcnRUaXRsZShMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJyZWFkQ3J1bWJUaXRsZShMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1bW1hcnkoTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaXRsZShMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRGcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iYnJlYWRDcnVtYlNob3J0VGl0bGUiLz4KLQkJPGZpZWxkIG5hbWU9ImJyZWFkQ3J1bWJTaG9ydFRpdGxlUmVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJicmVhZENydW1iVGl0bGUiLz4KLQkJPGZpZWxkIG5hbWU9ImJyZWFkQ3J1bWJUaXRsZVJlcyIvPgotCQk8ZmllbGQgbmFtZT0iZXh0cmFzIi8+Ci0JCTxmaWVsZCBuYW1lPSJmcmFnbWVudCIvPgotCQk8ZmllbGQgbmFtZT0iZnJhZ21lbnRBcmd1bWVudHMiLz4KLQkJPGZpZWxkIG5hbWU9Imljb25SZXMiLz4KLQkJPGZpZWxkIG5hbWU9ImlkIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbnRlbnQiLz4KLQkJPGZpZWxkIG5hbWU9InN1bW1hcnkiLz4KLQkJPGZpZWxkIG5hbWU9InN1bW1hcnlSZXMiLz4KLQkJPGZpZWxkIG5hbWU9InRpdGxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aXRsZVJlcyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlQ2F0ZWdvcnkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VHcm91cCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlRGF0YVN0b3JlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9vbGVhbihMamF2YS9sYW5nL1N0cmluZztaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbG9hdChMamF2YS9sYW5nL1N0cmluZztGKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnQoTGphdmEvbGFuZy9TdHJpbmc7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZyhMamF2YS9sYW5nL1N0cmluZztKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmluZ1NldChMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL1NldDspTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0Qm9vbGVhbihMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRGbG9hdChMamF2YS9sYW5nL1N0cmluZztGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRJbnQoTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0TG9uZyhMamF2YS9sYW5nL1N0cmluZztKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRTdHJpbmdTZXQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9TZXQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUZyYWdtZW50IiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvRnJhZ21lbnQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRQcmVmZXJlbmNlc0Zyb21JbnRlbnQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRQcmVmZXJlbmNlc0Zyb21SZXNvdXJjZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kUHJlZmVyZW5jZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWZlcmVuY2VNYW5hZ2VyKClMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VNYW5hZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWZlcmVuY2VTY3JlZW4oKUxhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZVNjcmVlbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByZWZlcmVuY2VUcmVlQ2xpY2soTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlU2NyZWVuO0xhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZWZlcmVuY2VTY3JlZW4oTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlU2NyZWVuOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VGcmFnbWVudCRPblByZWZlcmVuY2VTdGFydEZyYWdtZW50Q2FsbGJhY2siIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QcmVmZXJlbmNlU3RhcnRGcmFnbWVudChMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VGcmFnbWVudDtMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2U7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUdyb3VwIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJdGVtRnJvbUluZmxhdGVyKExhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFByZWZlcmVuY2UoTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hSZXN0b3JlSW5zdGFuY2VTdGF0ZShMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaFNhdmVJbnN0YW5jZVN0YXRlKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRQcmVmZXJlbmNlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlZmVyZW5jZShJKUxhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVmZXJlbmNlQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc09uU2FtZVNjcmVlbkFzQ2hpbGRyZW4oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc09yZGVyaW5nQXNBZGRlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJlcGFyZUFkZFByZWZlcmVuY2UoTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQWxsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUHJlZmVyZW5jZShMYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2U7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcmRlcmluZ0FzQWRkZWQoWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VNYW5hZ2VyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlUHJlZmVyZW5jZVNjcmVlbihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxhbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZVNjcmVlbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kUHJlZmVyZW5jZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRTaGFyZWRQcmVmZXJlbmNlcyhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxhbmRyb2lkL2NvbnRlbnQvU2hhcmVkUHJlZmVyZW5jZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFNoYXJlZFByZWZlcmVuY2VzTmFtZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlZmVyZW5jZURhdGFTdG9yZSgpTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlRGF0YVN0b3JlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hhcmVkUHJlZmVyZW5jZXMoKUxhbmRyb2lkL2NvbnRlbnQvU2hhcmVkUHJlZmVyZW5jZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hhcmVkUHJlZmVyZW5jZXNNb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hhcmVkUHJlZmVyZW5jZXNOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N0b3JhZ2VEZWZhdWx0KClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N0b3JhZ2VEZXZpY2VQcm90ZWN0ZWQoKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHRWYWx1ZXMoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0laKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0VmFsdWVzKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZztJSVopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZWZlcmVuY2VEYXRhU3RvcmUoTGFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlRGF0YVN0b3JlOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaGFyZWRQcmVmZXJlbmNlc01vZGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hhcmVkUHJlZmVyZW5jZXNOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RvcmFnZURlZmF1bHQoKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0b3JhZ2VEZXZpY2VQcm90ZWN0ZWQoKVYiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0hBU19TRVRfREVGQVVMVF9WQUxVRVMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0tFWV9QUkVGRVJFTkNFUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlTWFuYWdlciRPbkFjdGl2aXR5RGVzdHJveUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFjdGl2aXR5RGVzdHJveSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlTWFuYWdlciRPbkFjdGl2aXR5UmVzdWx0TGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWN0aXZpdHlSZXN1bHQoSUlMYW5kcm9pZC9jb250ZW50L0ludGVudDspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlTWFuYWdlciRPbkFjdGl2aXR5U3RvcExpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFjdGl2aXR5U3RvcCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlU2NyZWVuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlR3JvdXAiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0RpYWxvZ0ludGVyZmFjZSRPbkRpc21pc3NMaXN0ZW5lciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlldyRPbkl0ZW1DbGlja0xpc3RlbmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmQoTGFuZHJvaWQvd2lkZ2V0L0xpc3RWaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlhbG9nKClMYW5kcm9pZC9hcHAvRGlhbG9nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvb3RBZGFwdGVyKClMYW5kcm9pZC93aWRnZXQvTGlzdEFkYXB0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVSb290QWRhcHRlcigpTGFuZHJvaWQvd2lkZ2V0L0xpc3RBZGFwdGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJlZmVyZW5jZS9SaW5ndG9uZVByZWZlcmVuY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2UiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VNYW5hZ2VyJE9uQWN0aXZpdHlSZXN1bHRMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJpbmd0b25lVHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3dEZWZhdWx0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvd1NpbGVudCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJlcGFyZVJpbmd0b25lUGlja2VySW50ZW50KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXN0b3JlUmluZ3RvbmUoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TYXZlUmluZ3RvbmUoTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJpbmd0b25lVHlwZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG93RGVmYXVsdChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG93U2lsZW50KFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJlZmVyZW5jZS9Td2l0Y2hQcmVmZXJlbmNlIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ByZWZlcmVuY2UvVHdvU3RhdGVQcmVmZXJlbmNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3dpdGNoVGV4dE9mZigpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3dpdGNoVGV4dE9uKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTd2l0Y2hUZXh0T2ZmKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN3aXRjaFRleHRPZmYoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTd2l0Y2hUZXh0T24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3dpdGNoVGV4dE9uKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL1R3b1N0YXRlUHJlZmVyZW5jZSIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNhYmxlRGVwZW5kZW50c1N0YXRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VtbWFyeU9mZigpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VtbWFyeU9uKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NoZWNrZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGVja2VkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc2FibGVEZXBlbmRlbnRzU3RhdGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VtbWFyeU9mZihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdW1tYXJ5T2ZmKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VtbWFyeU9uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1bW1hcnlPbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJpbnQvUGFnZVJhbmdlIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5kKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhcnQoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkFMTF9QQUdFUyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yTW9kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldER1cGxleE1vZGUoKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lZGlhU2l6ZSgpTGFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzJE1lZGlhU2l6ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5NYXJnaW5zKClMYW5kcm9pZC9wcmludC9QcmludEF0dHJpYnV0ZXMkTWFyZ2luczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNvbHV0aW9uKClMYW5kcm9pZC9wcmludC9QcmludEF0dHJpYnV0ZXMkUmVzb2x1dGlvbjsiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX01PREVfQ09MT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTE9SX01PREVfTU9OT0NIUk9NRSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRFVQTEVYX01PREVfTE9OR19FREdFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkRVUExFWF9NT0RFX05PTkUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRFVQTEVYX01PREVfU0hPUlRfRURHRSIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmludC9QcmludEF0dHJpYnV0ZXMkQnVpbGRlciIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9wcmludC9QcmludEF0dHJpYnV0ZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sb3JNb2RlKEkpTGFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHVwbGV4TW9kZShJKUxhbmRyb2lkL3ByaW50L1ByaW50QXR0cmlidXRlcyRCdWlsZGVyOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWVkaWFTaXplKExhbmRyb2lkL3ByaW50L1ByaW50QXR0cmlidXRlcyRNZWRpYVNpemU7KUxhbmRyb2lkL3ByaW50L1ByaW50QXR0cmlidXRlcyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbk1hcmdpbnMoTGFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzJE1hcmdpbnM7KUxhbmRyb2lkL3ByaW50L1ByaW50QXR0cmlidXRlcyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc29sdXRpb24oTGFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzJFJlc29sdXRpb247KUxhbmRyb2lkL3ByaW50L1ByaW50QXR0cmlidXRlcyRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzJE1hcmdpbnMiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm90dG9tTWlscygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExlZnRNaWxzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmlnaHRNaWxzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9wTWlscygpSSIvPgotCQk8ZmllbGQgbmFtZT0iTk9fTUFSR0lOUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzJE1lZGlhU2l6ZSIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNMYW5kc2NhcGUoKUxhbmRyb2lkL3ByaW50L1ByaW50QXR0cmlidXRlcyRNZWRpYVNpemU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXNQb3J0cmFpdCgpTGFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzJE1lZGlhU2l6ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHRNaWxzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhYmVsKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpZHRoTWlscygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUG9ydHJhaXQoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19BMCIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0ExIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQTEwIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQTIiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19BMyIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0E0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQTUiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19BNiIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0E3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQTgiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19BOSIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0IwIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQjEiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19CMTAiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19CMiIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0IzIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQjQiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19CNSIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0I2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQjciLz4KLQkJPGZpZWxkIG5hbWU9IklTT19COCIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0I5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQzAiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19DMSIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0MxMCIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0MyIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQzMiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19DNCIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0M1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQzYiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19DNyIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0M4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fQzkiLz4KLQkJPGZpZWxkIG5hbWU9IkpJU19CMCIvPgotCQk8ZmllbGQgbmFtZT0iSklTX0IxIi8+Ci0JCTxmaWVsZCBuYW1lPSJKSVNfQjEwIi8+Ci0JCTxmaWVsZCBuYW1lPSJKSVNfQjIiLz4KLQkJPGZpZWxkIG5hbWU9IkpJU19CMyIvPgotCQk8ZmllbGQgbmFtZT0iSklTX0I0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJKSVNfQjUiLz4KLQkJPGZpZWxkIG5hbWU9IkpJU19CNiIvPgotCQk8ZmllbGQgbmFtZT0iSklTX0I3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJKSVNfQjgiLz4KLQkJPGZpZWxkIG5hbWU9IkpJU19COSIvPgotCQk8ZmllbGQgbmFtZT0iSklTX0VYRUMiLz4KLQkJPGZpZWxkIG5hbWU9IkpQTl9DSE9VMiIvPgotCQk8ZmllbGQgbmFtZT0iSlBOX0NIT1UzIi8+Ci0JCTxmaWVsZCBuYW1lPSJKUE5fQ0hPVTQiLz4KLQkJPGZpZWxkIG5hbWU9IkpQTl9IQUdBS0kiLz4KLQkJPGZpZWxkIG5hbWU9IkpQTl9LQUhVIi8+Ci0JCTxmaWVsZCBuYW1lPSJKUE5fS0FLVTIiLz4KLQkJPGZpZWxkIG5hbWU9IkpQTl9PVUZVS1UiLz4KLQkJPGZpZWxkIG5hbWU9IkpQTl9ZT1U0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOQV9GT09MU0NBUCIvPgotCQk8ZmllbGQgbmFtZT0iTkFfR09WVF9MRVRURVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BX0lOREVYXzNYNSIvPgotCQk8ZmllbGQgbmFtZT0iTkFfSU5ERVhfNFg2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOQV9JTkRFWF81WDgiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BX0pVTklPUl9MRUdBTCIvPgotCQk8ZmllbGQgbmFtZT0iTkFfTEVER0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQV9MRUdBTCIvPgotCQk8ZmllbGQgbmFtZT0iTkFfTEVUVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQV9NT05BUkNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQV9RVUFSVE8iLz4KLQkJPGZpZWxkIG5hbWU9Ik5BX1RBQkxPSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9NX0RBSV9QQV9LQUkiLz4KLQkJPGZpZWxkIG5hbWU9Ik9NX0pVVVJPX0tVX0tBSSIvPgotCQk8ZmllbGQgbmFtZT0iT01fUEFfS0FJIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkNfMSIvPgotCQk8ZmllbGQgbmFtZT0iUFJDXzEwIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkNfMTZLIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkNfMiIvPgotCQk8ZmllbGQgbmFtZT0iUFJDXzMiLz4KLQkJPGZpZWxkIG5hbWU9IlBSQ180Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUkNfNSIvPgotCQk8ZmllbGQgbmFtZT0iUFJDXzYiLz4KLQkJPGZpZWxkIG5hbWU9IlBSQ183Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUkNfOCIvPgotCQk8ZmllbGQgbmFtZT0iUFJDXzkiLz4KLQkJPGZpZWxkIG5hbWU9IlJPQ18xNksiLz4KLQkJPGZpZWxkIG5hbWU9IlJPQ184SyIvPgotCQk8ZmllbGQgbmFtZT0iVU5LTk9XTl9MQU5EU0NBUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlVOS05PV05fUE9SVFJBSVQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByaW50L1ByaW50QXR0cmlidXRlcyRSZXNvbHV0aW9uIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3Jpem9udGFsRHBpKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhYmVsKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZXJ0aWNhbERwaSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJpbnQvUHJpbnREb2N1bWVudEFkYXB0ZXIiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZpbmlzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTGF5b3V0KExhbmRyb2lkL3ByaW50L1ByaW50QXR0cmlidXRlcztMYW5kcm9pZC9wcmludC9QcmludEF0dHJpYnV0ZXM7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsO0xhbmRyb2lkL3ByaW50L1ByaW50RG9jdW1lbnRBZGFwdGVyJExheW91dFJlc3VsdENhbGxiYWNrO0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhcnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbldyaXRlKFtMYW5kcm9pZC9wcmludC9QYWdlUmFuZ2U7TGFuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3I7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsO0xhbmRyb2lkL3ByaW50L1ByaW50RG9jdW1lbnRBZGFwdGVyJFdyaXRlUmVzdWx0Q2FsbGJhY2s7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BSSU5UX1BSRVZJRVciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByaW50L1ByaW50RG9jdW1lbnRBZGFwdGVyJExheW91dFJlc3VsdENhbGxiYWNrIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25MYXlvdXRDYW5jZWxsZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxheW91dEZhaWxlZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTGF5b3V0RmluaXNoZWQoTGFuZHJvaWQvcHJpbnQvUHJpbnREb2N1bWVudEluZm87WilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmludC9QcmludERvY3VtZW50QWRhcHRlciRXcml0ZVJlc3VsdENhbGxiYWNrIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Xcml0ZUNhbmNlbGxlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uV3JpdGVGYWlsZWQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbldyaXRlRmluaXNoZWQoW0xhbmRyb2lkL3ByaW50L1BhZ2VSYW5nZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJpbnQvUHJpbnREb2N1bWVudEluZm8iIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudFR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhU2l6ZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhZ2VDb3VudCgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFX0RPQ1VNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEVfUEhPVE8iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRV9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQUdFX0NPVU5UX1VOS05PV04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByaW50L1ByaW50RG9jdW1lbnRJbmZvJEJ1aWxkZXIiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvcHJpbnQvUHJpbnREb2N1bWVudEluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGVudFR5cGUoSSlMYW5kcm9pZC9wcmludC9QcmludERvY3VtZW50SW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhZ2VDb3VudChJKUxhbmRyb2lkL3ByaW50L1ByaW50RG9jdW1lbnRJbmZvJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmludC9QcmludEpvYiIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvcHJpbnQvUHJpbnRKb2JJbmZvO0xhbmRyb2lkL3ByaW50L1ByaW50TWFuYWdlcjspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUxhbmRyb2lkL3ByaW50L1ByaW50Sm9iSWQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5mbygpTGFuZHJvaWQvcHJpbnQvUHJpbnRKb2JJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQmxvY2tlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2FuY2VsbGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb21wbGV0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZhaWxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUXVldWVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTdGFydGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdGFydCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJpbnQvUHJpbnRKb2JJZCIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByaW50L1ByaW50Sm9iSW5mbyIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBZHZhbmNlZEludE9wdGlvbihMamF2YS9sYW5nL1N0cmluZzspSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWR2YW5jZWRTdHJpbmdPcHRpb24oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlcygpTGFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvcGllcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENyZWF0aW9uVGltZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClMYW5kcm9pZC9wcmludC9QcmludEpvYklkOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhYmVsKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWdlcygpW0xhbmRyb2lkL3ByaW50L1BhZ2VSYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmludGVySWQoKUxhbmRyb2lkL3ByaW50L1ByaW50ZXJJZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0FkdmFuY2VkT3B0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0JMT0NLRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0NBTkNFTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9DT01QTEVURUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0NSRUFURUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0ZBSUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfUVVFVUVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9TVEFSVEVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmludC9QcmludEpvYkluZm8kQnVpbGRlciIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9wcmludC9QcmludEpvYkluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvcHJpbnQvUHJpbnRKb2JJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEFkdmFuY2VkT3B0aW9uKExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEFkdmFuY2VkT3B0aW9uKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXR0cmlidXRlcyhMYW5kcm9pZC9wcmludC9QcmludEF0dHJpYnV0ZXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb3BpZXMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFnZXMoW0xhbmRyb2lkL3ByaW50L1BhZ2VSYW5nZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJpbnQvUHJpbnRNYW5hZ2VyIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbnRKb2JzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvcHJpbnQvUHJpbnREb2N1bWVudEFkYXB0ZXI7TGFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzOylMYW5kcm9pZC9wcmludC9QcmludEpvYjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByaW50L1ByaW50ZXJDYXBhYmlsaXRpZXNJbmZvIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yTW9kZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0cygpTGFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldER1cGxleE1vZGVzKClJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZWRpYVNpemVzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluTWFyZ2lucygpTGFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzJE1hcmdpbnM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzb2x1dGlvbnMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByaW50L1ByaW50ZXJDYXBhYmlsaXRpZXNJbmZvJEJ1aWxkZXIiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvcHJpbnQvUHJpbnRlcklkOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTWVkaWFTaXplKExhbmRyb2lkL3ByaW50L1ByaW50QXR0cmlidXRlcyRNZWRpYVNpemU7WilMYW5kcm9pZC9wcmludC9QcmludGVyQ2FwYWJpbGl0aWVzSW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFJlc29sdXRpb24oTGFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzJFJlc29sdXRpb247WilMYW5kcm9pZC9wcmludC9QcmludGVyQ2FwYWJpbGl0aWVzSW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9wcmludC9QcmludGVyQ2FwYWJpbGl0aWVzSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2xvck1vZGVzKElJKUxhbmRyb2lkL3ByaW50L1ByaW50ZXJDYXBhYmlsaXRpZXNJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHVwbGV4TW9kZXMoSUkpTGFuZHJvaWQvcHJpbnQvUHJpbnRlckNhcGFiaWxpdGllc0luZm8kQnVpbGRlcjsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbk1hcmdpbnMoTGFuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzJE1hcmdpbnM7KUxhbmRyb2lkL3ByaW50L1ByaW50ZXJDYXBhYmlsaXRpZXNJbmZvJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmludC9QcmludGVySWQiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJpbnQvUHJpbnRlckluZm8iIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhcGFiaWxpdGllcygpTGFuZHJvaWQvcHJpbnQvUHJpbnRlckNhcGFiaWxpdGllc0luZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClMYW5kcm9pZC9wcmludC9QcmludGVySWQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdHVzKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfQlVTWSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0lETEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19VTkFWQUlMQUJMRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJpbnQvUHJpbnRlckluZm8kQnVpbGRlciIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9wcmludC9QcmludGVySWQ7TGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ByaW50L1ByaW50ZXJJbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL3ByaW50L1ByaW50ZXJJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhcGFiaWxpdGllcyhMYW5kcm9pZC9wcmludC9QcmludGVyQ2FwYWJpbGl0aWVzSW5mbzspTGFuZHJvaWQvcHJpbnQvUHJpbnRlckluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZXNjcmlwdGlvbihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvcHJpbnQvUHJpbnRlckluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIYXNDdXN0b21QcmludGVySWNvbihaKUxhbmRyb2lkL3ByaW50L1ByaW50ZXJJbmZvJEJ1aWxkZXI7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uUmVzb3VyY2VJZChJKUxhbmRyb2lkL3ByaW50L1ByaW50ZXJJbmZvJEJ1aWxkZXI7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbmZvSW50ZW50KExhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylMYW5kcm9pZC9wcmludC9QcmludGVySW5mbyRCdWlsZGVyOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmFtZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvcHJpbnQvUHJpbnRlckluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGF0dXMoSSlMYW5kcm9pZC9wcmludC9QcmludGVySW5mbyRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJpbnQvcGRmL1ByaW50ZWRQZGZEb2N1bWVudCIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9wZGYvUGRmRG9jdW1lbnQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3ByaW50L1ByaW50QXR0cmlidXRlczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhZ2VDb250ZW50UmVjdCgpTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWdlSGVpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFnZVdpZHRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRQYWdlKEkpTGFuZHJvaWQvZ3JhcGhpY3MvcGRmL1BkZkRvY3VtZW50JFBhZ2U7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmludHNlcnZpY2UvQ3VzdG9tUHJpbnRlckljb25DYWxsYmFjayIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbjspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJpbnRzZXJ2aWNlL1ByaW50RG9jdW1lbnQiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhKClMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmZvKClMYW5kcm9pZC9wcmludC9QcmludERvY3VtZW50SW5mbzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByaW50c2VydmljZS9QcmludEpvYiIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJsb2NrKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGxldGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJmYWlsKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWR2YW5jZWRJbnRPcHRpb24oTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBZHZhbmNlZFN0cmluZ09wdGlvbihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG9jdW1lbnQoKUxhbmRyb2lkL3ByaW50c2VydmljZS9QcmludERvY3VtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClMYW5kcm9pZC9wcmludC9QcmludEpvYklkOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZm8oKUxhbmRyb2lkL3ByaW50L1ByaW50Sm9iSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0FkdmFuY2VkT3B0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNCbG9ja2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDYW5jZWxsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbXBsZXRlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmFpbGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNRdWV1ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N0YXJ0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9ncmVzcyhGKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXR1cyhJKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXR1cyhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFnKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnQoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ByaW50c2VydmljZS9QcmludFNlcnZpY2UiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZVByaW50ZXJJZChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvcHJpbnQvUHJpbnRlcklkOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2ZVByaW50Sm9icygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29ubmVjdGVkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVQcmludGVyRGlzY292ZXJ5U2Vzc2lvbigpTGFuZHJvaWQvcHJpbnRzZXJ2aWNlL1ByaW50ZXJEaXNjb3ZlcnlTZXNzaW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGlzY29ubmVjdGVkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QcmludEpvYlF1ZXVlZChMYW5kcm9pZC9wcmludHNlcnZpY2UvUHJpbnRKb2I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlcXVlc3RDYW5jZWxQcmludEpvYihMYW5kcm9pZC9wcmludHNlcnZpY2UvUHJpbnRKb2I7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0NBTl9TRUxFQ1RfUFJJTlRFUiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUklOVEVSX0lORk8iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJJTlRfRE9DVU1FTlRfSU5GTyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUklOVF9KT0JfSU5GTyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU0VMRUNUX1BSSU5URVIiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9JTlRFUkZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfTUVUQV9EQVRBIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcmludHNlcnZpY2UvUHJpbnRlckRpc2NvdmVyeVNlc3Npb24iIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRQcmludGVycyhMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmludGVycygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYWNrZWRQcmludGVycygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGVzdHJveWVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcmludGVyRGlzY292ZXJ5U3RhcnRlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGVzdHJveSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVxdWVzdEN1c3RvbVByaW50ZXJJY29uKExhbmRyb2lkL3ByaW50L1ByaW50ZXJJZDtMYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWw7TGFuZHJvaWQvcHJpbnRzZXJ2aWNlL0N1c3RvbVByaW50ZXJJY29uQ2FsbGJhY2s7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhcnRQcmludGVyRGlzY292ZXJ5KExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhcnRQcmludGVyU3RhdGVUcmFja2luZyhMYW5kcm9pZC9wcmludC9QcmludGVySWQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0b3BQcmludGVyRGlzY292ZXJ5KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdG9wUHJpbnRlclN0YXRlVHJhY2tpbmcoTGFuZHJvaWQvcHJpbnQvUHJpbnRlcklkOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25WYWxpZGF0ZVByaW50ZXJzKExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVByaW50ZXJzKExqYXZhL3V0aWwvTGlzdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQWxhcm1DbG9jayIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRElTTUlTU19BTEFSTSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRElTTUlTU19USU1FUiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0VUX0FMQVJNIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0VUX1RJTUVSIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TSE9XX0FMQVJNUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0hPV19USU1FUlMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NOT09aRV9BTEFSTSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTEFSTV9TRUFSQ0hfTU9ERV9BTEwiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUxBUk1fU0VBUkNIX01PREVfTEFCRUwiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUxBUk1fU0VBUkNIX01PREVfTkVYVCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTEFSTV9TRUFSQ0hfTU9ERV9USU1FIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FMQVJNX1NFQVJDSF9NT0RFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FMQVJNX1NOT09aRV9EVVJBVElPTiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9EQVlTIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0hPVVIiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0lTX1BNIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0xFTkdUSCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9NRVNTQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9NSU5VVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9SSU5HVE9ORSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TS0lQX1VJIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1ZJQlJBVEUiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVkFMVUVfUklOR1RPTkVfU0lMRU5UIiBzaW5jZT0iMTkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9Il9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iX0lEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CbG9ja2VkTnVtYmVyQ29udHJhY3QiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5DdXJyZW50VXNlckJsb2NrTnVtYmVycyhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Jsb2NrZWQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5ibG9jayhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVEhPUklUWSIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSE9SSVRZX1VSSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmxvY2tlZE51bWJlckNvbnRyYWN0JEJsb2NrZWROdW1iZXJzIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fRTE2NF9OVU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX09SSUdJTkFMX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jyb3dzZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFNlYXJjaFVybChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZzspViIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5DbGVhckhpc3RvcnkoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7KVoiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJIaXN0b3J5KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyOylWIiByZW1vdmVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyU2VhcmNoZXMoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7KVYiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVsZXRlRnJvbUhpc3RvcnkoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVsZXRlSGlzdG9yeVRpbWVGcmFtZShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtKSilWIiByZW1vdmVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbEJvb2ttYXJrcyhMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxWaXNpdGVkVXJscyhMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0QWxsSWNvbnMoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvd2Via2l0L1dlYkljb25EYXRhYmFzZSRJY29uTGlzdGVuZXI7KVYiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2F2ZUJvb2ttYXJrKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kU3RyaW5nKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InRydW5jYXRlSGlzdG9yeShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjspViIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVWaXNpdGVkSGlzdG9yeShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZztaKVYiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT09LTUFSS1NfVVJJIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQVBQTElDQVRJT05fSUQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DUkVBVEVfTkVXX1RBQiIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9IRUFERVJTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iSElTVE9SWV9QUk9KRUNUSU9OIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iSElTVE9SWV9QUk9KRUNUSU9OX0JPT0tNQVJLX0lOREVYIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iSElTVE9SWV9QUk9KRUNUSU9OX0RBVEVfSU5ERVgiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJISVNUT1JZX1BST0pFQ1RJT05fRkFWSUNPTl9JTkRFWCIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkhJU1RPUllfUFJPSkVDVElPTl9JRF9JTkRFWCIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkhJU1RPUllfUFJPSkVDVElPTl9USVRMRV9JTkRFWCIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkhJU1RPUllfUFJPSkVDVElPTl9VUkxfSU5ERVgiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJISVNUT1JZX1BST0pFQ1RJT05fVklTSVRTX0lOREVYIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iSU5JVElBTF9aT09NX0xFVkVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUFSQ0hFU19QUk9KRUNUSU9OIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU0VBUkNIRVNfUFJPSkVDVElPTl9EQVRFX0lOREVYIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU0VBUkNIRVNfUFJPSkVDVElPTl9TRUFSQ0hfSU5ERVgiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUFSQ0hFU19VUkkiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUlVOQ0FURV9ISVNUT1JZX1BST0pFQ1RJT04iIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUlVOQ0FURV9ISVNUT1JZX1BST0pFQ1RJT05fSURfSU5ERVgiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUlVOQ0FURV9OX09MREVTVCIgcmVtb3ZlZD0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jyb3dzZXIkQm9va21hcmtDb2x1bW5zIiBzaW5jZT0iMSIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkJPT0tNQVJLIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGQVZJQ09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSVRMRSIvPgotCQk8ZmllbGQgbmFtZT0iVVJMIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSVNJVFMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jyb3dzZXIkU2VhcmNoQ29sdW1ucyIgc2luY2U9IjEiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUFSQ0giLz4KLQkJPGZpZWxkIG5hbWU9IlVSTCIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGVuZGFyQ29udHJhY3QiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ09VTlRfVFlQRV9MT0NBTCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0VWRU5UX1JFTUlOREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fSEFORExFX0NVU1RPTV9FVkVOVCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRIT1JJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTExFUl9JU19TWU5DQURBUFRFUiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0NVU1RPTV9BUFBfVVJJIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0VWRU5UX0FMTF9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0VWRU5UX0JFR0lOX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0VWRU5UX0VORF9USU1FIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JEF0dGVuZGVlcyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ2FsZW5kYXJDb250cmFjdCRBdHRlbmRlZXNDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ2FsZW5kYXJDb250cmFjdCRFdmVudHNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnkoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7SltMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGVuZGFyQ29udHJhY3QkQXR0ZW5kZWVzQ29sdW1ucyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQVRURU5ERUVfRU1BSUwiLz4KLQkJPGZpZWxkIG5hbWU9IkFUVEVOREVFX0lERU5USVRZIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFUVEVOREVFX0lEX05BTUVTUEFDRSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVFRFTkRFRV9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVFRFTkRFRV9SRUxBVElPTlNISVAiLz4KLQkJPGZpZWxkIG5hbWU9IkFUVEVOREVFX1NUQVRVUyIvPgotCQk8ZmllbGQgbmFtZT0iQVRURU5ERUVfU1RBVFVTX0FDQ0VQVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVFRFTkRFRV9TVEFUVVNfREVDTElORUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFUVEVOREVFX1NUQVRVU19JTlZJVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVFRFTkRFRV9TVEFUVVNfTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iQVRURU5ERUVfU1RBVFVTX1RFTlRBVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iQVRURU5ERUVfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlJFTEFUSU9OU0hJUF9BVFRFTkRFRSIvPgotCQk8ZmllbGQgbmFtZT0iUkVMQVRJT05TSElQX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFTEFUSU9OU0hJUF9PUkdBTklaRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlJFTEFUSU9OU0hJUF9QRVJGT1JNRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlJFTEFUSU9OU0hJUF9TUEVBS0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfT1BUSU9OQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUkVRVUlSRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUkVTT1VSQ0UiIHNpbmNlPSIxNSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ2FsZW5kYXJDb250cmFjdCRDYWxlbmRhckFsZXJ0cyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ2FsZW5kYXJDb250cmFjdCRDYWxlbmRhckFsZXJ0c0NvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JENhbGVuZGFyQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGVuZGFyQ29udHJhY3QkRXZlbnRzQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJX0JZX0lOU1RBTkNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JENhbGVuZGFyQWxlcnRzQ29sdW1ucyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQUxBUk1fVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iQkVHSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUSU9OX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIvPgotCQk8ZmllbGQgbmFtZT0iRU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTUlOVVRFUyIvPgotCQk8ZmllbGQgbmFtZT0iTk9USUZZX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQ0VJVkVEX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9ESVNNSVNTRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0ZJUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9TQ0hFRFVMRUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGVuZGFyQ29udHJhY3QkQ2FsZW5kYXJDYWNoZSIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGVuZGFyQ29udHJhY3QkQ2FsZW5kYXJDYWNoZUNvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9USU1FWk9ORV9JTlNUQU5DRVMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9USU1FWk9ORV9JTlNUQU5DRVNfUFJFVklPVVMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9USU1FWk9ORV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FWk9ORV9UWVBFX0FVVE8iLz4KLQkJPGZpZWxkIG5hbWU9IlRJTUVaT05FX1RZUEVfSE9NRSIvPgotCQk8ZmllbGQgbmFtZT0iVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JENhbGVuZGFyQ2FjaGVDb2x1bW5zIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVkiLz4KLQkJPGZpZWxkIG5hbWU9IlZBTFVFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JENhbGVuZGFyQ29sdW1ucyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQUxMT1dFRF9BVFRFTkRFRV9UWVBFUyIgc2luY2U9IjE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTExPV0VEX0FWQUlMQUJJTElUWSIgc2luY2U9IjE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTExPV0VEX1JFTUlOREVSUyIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMRU5EQVJfQUNDRVNTX0xFVkVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxFTkRBUl9DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMRU5EQVJfQ09MT1JfS0VZIiBzaW5jZT0iMTUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTEVOREFSX0RJU1BMQVlfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMRU5EQVJfVElNRV9aT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxfQUNDRVNTX0NPTlRSSUJVVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxfQUNDRVNTX0VESVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMX0FDQ0VTU19GUkVFQlVTWSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMX0FDQ0VTU19OT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxfQUNDRVNTX09WRVJSSURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxfQUNDRVNTX09XTkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxfQUNDRVNTX1JFQUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTF9BQ0NFU1NfUkVTUE9ORCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMX0FDQ0VTU19ST09UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQU5fTU9ESUZZX1RJTUVfWk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FOX09SR0FOSVpFUl9SRVNQT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU19QUklNQVJZIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9SRU1JTkRFUlMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9XTkVSX0FDQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNfRVZFTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSVNJQkxFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JENhbGVuZGFyRW50aXR5IiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JENhbGVuZGFyQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGVuZGFyQ29udHJhY3QkU3luY0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdFbnRpdHlJdGVyYXRvcihMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7KUxhbmRyb2lkL2NvbnRlbnQvRW50aXR5SXRlcmF0b3I7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ2FsZW5kYXJDb250cmFjdCRDYWxlbmRhclN5bmNDb2x1bW5zIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxfU1lOQzEiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTF9TWU5DMTAiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTF9TWU5DMiIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMX1NZTkMzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxfU1lOQzQiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTF9TWU5DNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMX1NZTkM2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxfU1lOQzciLz4KLQkJPGZpZWxkIG5hbWU9IkNBTF9TWU5DOCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMX1NZTkM5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JENhbGVuZGFycyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ2FsZW5kYXJDb250cmFjdCRDYWxlbmRhckNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JFN5bmNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxFTkRBUl9MT0NBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIvPgotCQk8ZmllbGQgbmFtZT0iTkFNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ2FsZW5kYXJDb250cmFjdCRDb2xvcnMiIHNpbmNlPSIxNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JENvbG9yc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JENvbG9yc0NvbHVtbnMiIHNpbmNlPSIxNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9TeW5jU3RhdGVDb250cmFjdCRDb2x1bW5zIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MT1JfS0VZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUl9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0NBTEVOREFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0VWRU5UIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JEV2ZW50RGF5cyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGVuZGFyQ29udHJhY3QkRXZlbnREYXlzQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0lJW0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ2FsZW5kYXJDb250cmFjdCRFdmVudERheXNDb2x1bW5zIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkREQVkiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVJUREFZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JEV2ZW50cyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ2FsZW5kYXJDb250cmFjdCRDYWxlbmRhckNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JEV2ZW50c0NvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JFN5bmNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0VYQ0VQVElPTl9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JEV2ZW50c0NvbHVtbnMiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VTU19DT05GSURFTlRJQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VTU19ERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0NFU1NfTEVWRUwiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VTU19QUklWQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0NFU1NfUFVCTElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTExfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkFJTEFCSUxJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkFWQUlMQUJJTElUWV9CVVNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkFJTEFCSUxJVFlfRlJFRSIvPgotCQk8ZmllbGQgbmFtZT0iQVZBSUxBQklMSVRZX1RFTlRBVElWRSIgc2luY2U9IjE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxFTkRBUl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FOX0lOVklURV9PVEhFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkNVU1RPTV9BUFBfUEFDS0FHRSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDVVNUT01fQVBQX1VSSSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERVNDUklQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRElTUExBWV9DT0xPUiIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEVEVORCIvPgotCQk8ZmllbGQgbmFtZT0iRFRTVEFSVCIvPgotCQk8ZmllbGQgbmFtZT0iRFVSQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkVWRU5UX0NPTE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9DT0xPUl9LRVkiIHNpbmNlPSIxNSIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfRU5EX1RJTUVaT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9MT0NBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfVElNRVpPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYREFURSIvPgotCQk8ZmllbGQgbmFtZT0iRVhSVUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHVUVTVFNfQ0FOX0lOVklURV9PVEhFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdVRVNUU19DQU5fTU9ESUZZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHVUVTVFNfQ0FOX1NFRV9HVUVTVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkhBU19BTEFSTSIvPgotCQk8ZmllbGQgbmFtZT0iSEFTX0FUVEVOREVFX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IkhBU19FWFRFTkRFRF9QUk9QRVJUSUVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU19PUkdBTklaRVIiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iTEFTVF9EQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVNUX1NZTkNFRCIvPgotCQk8ZmllbGQgbmFtZT0iT1JHQU5JWkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUklHSU5BTF9BTExfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUklHSU5BTF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iT1JJR0lOQUxfSU5TVEFOQ0VfVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iT1JJR0lOQUxfU1lOQ19JRCIvPgotCQk8ZmllbGQgbmFtZT0iUkRBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJSVUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUxGX0FUVEVOREVFX1NUQVRVUyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfQ0FOQ0VMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19DT05GSVJNRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19URU5UQVRJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNfREFUQTEiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNfREFUQTEwIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX0RBVEEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX0RBVEEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX0RBVEE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX0RBVEE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX0RBVEE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX0RBVEE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX0RBVEE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX0RBVEE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUSVRMRSIvPgotCQk8ZmllbGQgbmFtZT0iVUlEXzI0NDUiIHNpbmNlPSIxNyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ2FsZW5kYXJDb250cmFjdCRFdmVudHNFbnRpdHkiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGVuZGFyQ29udHJhY3QkRXZlbnRzQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGVuZGFyQ29udHJhY3QkU3luY0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdFbnRpdHlJdGVyYXRvcihMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7TGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJDbGllbnQ7KUxhbmRyb2lkL2NvbnRlbnQvRW50aXR5SXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RW50aXR5SXRlcmF0b3IoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO0xhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyOylMYW5kcm9pZC9jb250ZW50L0VudGl0eUl0ZXJhdG9yOyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGVuZGFyQ29udHJhY3QkRXh0ZW5kZWRQcm9wZXJ0aWVzIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JEV2ZW50c0NvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JEV4dGVuZGVkUHJvcGVydGllc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JEV4dGVuZGVkUHJvcGVydGllc0NvbHVtbnMiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkVWRU5UX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJWQUxVRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ2FsZW5kYXJDb250cmFjdCRJbnN0YW5jZXMiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGVuZGFyQ29udHJhY3QkQ2FsZW5kYXJDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ2FsZW5kYXJDb250cmFjdCRFdmVudHNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnkoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7W0xqYXZhL2xhbmcvU3RyaW5nO0pKKUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtbTGphdmEvbGFuZy9TdHJpbmc7SkpMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIvPgotCQk8ZmllbGQgbmFtZT0iQkVHSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfQllfREFZX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9TRUFSQ0hfQllfREFZX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9TRUFSQ0hfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRfTUlOVVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBUlRfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFSVF9NSU5VVEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGVuZGFyQ29udHJhY3QkUmVtaW5kZXJzIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JEV2ZW50c0NvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JFJlbWluZGVyc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtKW0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ2FsZW5kYXJDb250cmFjdCRSZW1pbmRlcnNDb2x1bW5zIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iTUVUSE9EIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRIT0RfQUxBUk0iIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUSE9EX0FMRVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRIT0RfREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iTUVUSE9EX0VNQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRIT0RfU01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5VVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5VVEVTX0RFRkFVTFQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGVuZGFyQ29udHJhY3QkU3luY0NvbHVtbnMiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JENhbGVuZGFyU3luY0NvbHVtbnMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ09VTlRfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iQUNDT1VOVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQU5fUEFSVElBTExZX1VQREFURSIvPgotCQk8ZmllbGQgbmFtZT0iREVMRVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iRElSVFkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1VVEFUT1JTIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TWU5DX0lEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxlbmRhckNvbnRyYWN0JFN5bmNTdGF0ZSIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1N5bmNTdGF0ZUNvbnRyYWN0JENvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9DYWxsTG9nIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVEhPUklUWSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NhbGxMb2ckQ2FsbHMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFzdE91dGdvaW5nQ2FsbChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFOU1dFUkVEX0VYVEVSTkFMTFlfVFlQRSIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCTE9DS0VEX1RZUEUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FDSEVEX0ZPUk1BVFRFRF9OVU1CRVIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FDSEVEX0xPT0tVUF9VUkkiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FDSEVEX01BVENIRURfTlVNQkVSIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNBQ0hFRF9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQUNIRURfTk9STUFMSVpFRF9OVU1CRVIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FDSEVEX05VTUJFUl9MQUJFTCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FDSEVEX05VTUJFUl9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQUNIRURfUEhPVE9fSUQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FDSEVEX1BIT1RPX1VSSSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0ZJTFRFUl9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfSVRFTV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSV9XSVRIX1ZPSUNFTUFJTCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT1VOVFJZX0lTTyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBX1VTQUdFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIvPgotCQk8ZmllbGQgbmFtZT0iRFVSQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0NBTExfVFlQRV9GSUxURVIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRVMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRVNfSERfQ0FMTCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFU19QVUxMRURfRVhURVJOQUxMWSIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFU19SVFQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRVNfVklERU8iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRVNfV0lGSSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHRU9DT0RFRF9MT0NBVElPTiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTkNPTUlOR19UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU19SRUFEIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkxBU1RfTU9ESUZJRUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTElNSVRfUEFSQU1fS0VZIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9Ik1JU1NFRF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVciLz4KLQkJPGZpZWxkIG5hbWU9Ik5VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iTlVNQkVSX1BSRVNFTlRBVElPTiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPRkZTRVRfUEFSQU1fS0VZIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9Ik9VVEdPSU5HX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT05FX0FDQ09VTlRfQ09NUE9ORU5UX05BTUUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVfQUNDT1VOVF9JRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT1NUX0RJQUxfRElHSVRTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVNFTlRBVElPTl9BTExPV0VEIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVNFTlRBVElPTl9QQVlQSE9ORSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTRU5UQVRJT05fUkVTVFJJQ1RFRCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTRU5UQVRJT05fVU5LTk9XTiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRUpFQ1RFRF9UWVBFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TQ1JJUFRJT04iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iVklBX05VTUJFUiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWT0lDRU1BSUxfVFlQRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJWT0lDRU1BSUxfVVJJIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVEhPUklUWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9FTUFJTCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IktJTkRfSU0iIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLSU5EX09SR0FOSVpBVElPTiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IktJTkRfUEhPTkUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLSU5EX1BPU1RBTCIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJENvbnRhY3RNZXRob2RzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJENvbnRhY3RNZXRob2RzQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJFBlb3BsZUNvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRQb3N0YWxMb2NhdGlvbihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SkREKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjb2RlSW1Qcm90b2NvbChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9PYmplY3Q7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuY29kZUN1c3RvbUltUHJvdG9jb2woTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmNvZGVQcmVkZWZpbmVkSW1Qcm90b2NvbChJKUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TGFiZWwoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfRU1BSUxfSVRFTV9UWVBFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9FTUFJTF9UWVBFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9FTUFJTF9VUkkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0lNX0lURU1fVFlQRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfUE9TVEFMX0lURU1fVFlQRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfUE9TVEFMX1RZUEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUlNPTl9JRCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBPU1RBTF9MT0NBVElPTl9MQVRJVFVERSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBPU1RBTF9MT0NBVElPTl9MT05HSVRVREUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UT0NPTF9BSU0iIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UT0NPTF9HT09HTEVfVEFMSyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RPQ09MX0lDUSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RPQ09MX0pBQkJFUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RPQ09MX01TTiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RPQ09MX1FRIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVE9DT0xfU0tZUEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UT0NPTF9ZQUhPTyIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJENvbnRhY3RNZXRob2RzQ29sdW1ucyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVhfREFUQSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEEiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJU1BSSU1BUlkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLSU5EIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTEFCRUwiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DVVNUT00iIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0hPTUUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX09USEVSIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9XT1JLIiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMkRXh0ZW5zaW9ucyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRFeHRlbnNpb25zQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUlNPTl9JRCIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJEV4dGVuc2lvbnNDb2x1bW5zIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTUUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWQUxVRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJEdyb3VwTWVtYmVyc2hpcCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRHcm91cHNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0RJUkVDVE9SWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfSVRFTV9UWVBFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHUk9VUF9JRCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdST1VQX1NZTkNfQUNDT1VOVCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdST1VQX1NZTkNfQUNDT1VOVF9UWVBFIiBzaW5jZT0iNSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdST1VQX1NZTkNfSUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQRVJTT05fSUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSQVdfQ09OVEVOVF9VUkkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRHcm91cHMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMkR3JvdXBzQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTEVURURfQ09OVEVOVF9VUkkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHUk9VUF9BTkRST0lEX1NUQVJSRUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHUk9VUF9NWV9DT05UQUNUUyIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJEdyb3Vwc0NvbHVtbnMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iTkFNRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PVEVTIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU0hPVUxEX1NZTkMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWVNURU1fSUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRJbnRlbnRzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVFRBQ0hfSU1BR0UiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DUkVBVEVfREVTQ1JJUFRJT04iIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfRk9SQ0VfQ1JFQVRFIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQVJDSF9TVUdHRVNUSU9OX0NMSUNLRUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRUFSQ0hfU1VHR0VTVElPTl9DUkVBVEVfQ09OVEFDVF9DTElDS0VEIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU0VBUkNIX1NVR0dFU1RJT05fRElBTF9OVU1CRVJfQ0xJQ0tFRCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1dfT1JfQ1JFQVRFX0NPTlRBQ1QiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMkSW50ZW50cyRJbnNlcnQiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBBTlkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTUFJTCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkVNQUlMX0lTUFJJTUFSWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkVNQUlMX1RZUEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGVUxMX01PREUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTV9IQU5ETEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTV9JU1BSSU1BUlkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTV9QUk9UT0NPTCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkpPQl9USVRMRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTUUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOT1RFUyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT05FIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVUSUNfTkFNRSIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORV9JU1BSSU1BUlkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORV9UWVBFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUE9TVEFMIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUE9TVEFMX0lTUFJJTUFSWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBPU1RBTF9UWVBFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU0VDT05EQVJZX0VNQUlMIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQ09OREFSWV9FTUFJTF9UWVBFIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQ09OREFSWV9QSE9ORSIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNPTkRBUllfUEhPTkVfVFlQRSIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJURVJUSUFSWV9FTUFJTCIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJURVJUSUFSWV9FTUFJTF9UWVBFIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlRFUlRJQVJZX1BIT05FIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlRFUlRJQVJZX1BIT05FX1RZUEUiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMkSW50ZW50cyRVSSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iRklMVEVSX0NPTlRBQ1RTX0FDVElPTiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTFRFUl9URVhUX0VYVFJBX0tFWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkdST1VQX05BTUVfRVhUUkFfS0VZIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTElTVF9BTExfQ09OVEFDVFNfQUNUSU9OIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTElTVF9DT05UQUNUU19XSVRIX1BIT05FU19BQ1RJT04iIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMSVNUX0RFRkFVTFQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMSVNUX0ZSRVFVRU5UX0FDVElPTiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkxJU1RfR1JPVVBfQUNUSU9OIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTElTVF9TVEFSUkVEX0FDVElPTiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkxJU1RfU1RSRVFVRU5UX0FDVElPTiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlRJVExFX0VYVFJBX0tFWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJE9yZ2FuaXphdGlvbkNvbHVtbnMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUEFOWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IklTUFJJTUFSWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkxBQkVMIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUEVSU09OX0lEIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVElUTEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DVVNUT00iIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX09USEVSIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9XT1JLIiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMkT3JnYW5pemF0aW9ucyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRPcmdhbml6YXRpb25Db2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheUxhYmVsKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfRElSRUNUT1JZIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRQZW9wbGUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMkUGVvcGxlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJFBob25lc0NvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRQcmVzZW5jZUNvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIGRlcHJlY2F0ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVG9Hcm91cChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtKSilMYW5kcm9pZC9uZXQvVXJpOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRUb0dyb3VwKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0pMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVG9NeUNvbnRhY3RzR3JvdXAoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7SilMYW5kcm9pZC9uZXQvVXJpOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVQZXJzb25Jbk15Q29udGFjdHNHcm91cChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRWYWx1ZXM7KUxhbmRyb2lkL25ldC9Vcmk7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRDb250YWN0UGhvdG8oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL25ldC9Vcmk7SUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkkT3B0aW9uczspTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXJrQXNDb250YWN0ZWQoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7SilWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5Db250YWN0UGhvdG9JbnB1dFN0cmVhbShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9uZXQvVXJpOylMamF2YS9pby9JbnB1dFN0cmVhbTsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnlHcm91cHMoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7SilMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBob3RvRGF0YShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9uZXQvVXJpO1tCKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0ZJTFRFUl9VUkkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0lURU1fVFlQRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TT1JUX09SREVSIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iREVMRVRFRF9DT05URU5UX1VSSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBSSU1BUllfRU1BSUxfSUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUklNQVJZX09SR0FOSVpBVElPTl9JRCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBSSU1BUllfUEhPTkVfSUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRQZW9wbGUkQ29udGFjdE1ldGhvZHMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMkQ29udGFjdE1ldGhvZHNDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMkUGVvcGxlQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9ESVJFQ1RPUlkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRQZW9wbGUkRXh0ZW5zaW9ucyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRFeHRlbnNpb25zQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgZGVwcmVjYXRlZD0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfRElSRUNUT1JZIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TT1JUX09SREVSIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUEVSU09OX0lEIiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMkUGVvcGxlJFBob25lcyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRQZW9wbGVDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMkUGhvbmVzQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9ESVJFQ1RPUlkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRQZW9wbGVDb2x1bW5zIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkNVU1RPTV9SSU5HVE9ORSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU1BMQVlfTkFNRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkxBU1RfVElNRV9DT05UQUNURUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOQU1FIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTk9URVMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORVRJQ19OQU1FIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT1RPX1ZFUlNJT04iIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5EX1RPX1ZPSUNFTUFJTCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVJSRUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FU19DT05UQUNURUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRQaG9uZXMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMkUGVvcGxlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJFBob25lc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TGFiZWwoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlMYWJlbChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO1tMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9GSUxURVJfVVJMIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBFUlNPTl9JRCIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJFBob25lc0NvbHVtbnMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iSVNQUklNQVJZIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTEFCRUwiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOVU1CRVIiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOVU1CRVJfS0VZIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQ1VTVE9NIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9GQVhfSE9NRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRkFYX1dPUksiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0hPTUUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX01PQklMRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfT1RIRVIiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1BBR0VSIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9XT1JLIiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMkUGhvdG9zIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJFBob3Rvc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfRElSRUNUT1JZIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0cyRQaG90b3NDb2x1bW5zIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEEiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJET1dOTE9BRF9SRVFVSVJFRCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYSVNUU19PTl9TRVJWRVIiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NBTF9WRVJTSU9OIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUEVSU09OX0lEIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ19FUlJPUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJFByZXNlbmNlQ29sdW1ucyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVkFJTEFCTEUiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBV0FZIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRE9fTk9UX0RJU1RVUkIiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJRExFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iSU1fQUNDT1VOVCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IklNX0hBTkRMRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IklNX1BST1RPQ09MIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iSU5WSVNJQkxFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iT0ZGTElORSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVNFTkNFX0NVU1RPTV9TVEFUVVMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTRU5DRV9TVEFUVVMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUklPUklUWSIgc2luY2U9IjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJFNldHRpbmdzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJFNldHRpbmdzQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNldHRpbmcoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZXR0aW5nKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9ESVJFQ1RPUlkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNfRVZFUllUSElORyIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzJFNldHRpbmdzQ29sdW1ucyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWQUxVRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Il9TWU5DX0FDQ09VTlQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJfU1lOQ19BQ0NPVU5UX1RZUEUiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcm9maWxlSWQoSilaIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVEhPUklUWSIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSE9SSVRZX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMTEVSX0lTX1NZTkNBREFQVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZFUlJFRF9TTklQUEVUSU5HIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkVSUkVEX1NOSVBQRVRJTkdfUVVFUlkiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUT1JZX1BBUkFNX0tFWSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSU1JVF9QQVJBTV9LRVkiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iUFJJTUFSWV9BQ0NPVU5UX05BTUUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iUFJJTUFSWV9BQ0NPVU5UX1RZUEUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iUkVNT1ZFX0RVUExJQ0FURV9FTlRSSUVTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUkVRVUVOVF9QSE9ORV9PTkxZIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQWdncmVnYXRpb25FeGNlcHRpb25zIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IlJBV19DT05UQUNUX0lEMSIvPgotCQk8ZmllbGQgbmFtZT0iUkFXX0NPTlRBQ1RfSUQyIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FVVE9NQVRJQyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9LRUVQX1NFUEFSQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0tFRVBfVE9HRVRIRVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQmFzZVN5bmNDb2x1bW5zIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkMxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DMiIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQzMiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkM0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbW1vbkRhdGFLaW5kcyIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbW1vbkRhdGFLaW5kcyRCYXNlVHlwZXMiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DVVNUT00iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29tbW9uRGF0YUtpbmRzJENhbGxhYmxlIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb21tb25EYXRhS2luZHMkQ29tbW9uQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YUNvbHVtbnNXaXRoSm9pbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfRklMVEVSX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkVOVEVSUFJJU0VfQ09OVEVOVF9GSUxURVJfVVJJIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYX0NPVU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYX1RJVExFUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb21tb25EYXRhS2luZHMkQ29tbW9uQ29sdW1ucyIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb21tb25EYXRhS2luZHMkQmFzZVR5cGVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQUJFTCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb21tb25EYXRhS2luZHMkQ29udGFjdGFibGVzIiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb21tb25EYXRhS2luZHMkQ29tbW9uQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YUNvbHVtbnNXaXRoSm9pbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfRklMVEVSX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVhfQ09VTlRTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWF9USVRMRVMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVklTSUJMRV9DT05UQUNUU19PTkxZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbW1vbkRhdGFLaW5kcyRFbWFpbCIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb21tb25EYXRhS2luZHMkQ29tbW9uQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YUNvbHVtbnNXaXRoSm9pbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlTGFiZWwoTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzO0lMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZUxhYmVsUmVzb3VyY2UoSSlJIi8+Ci0JCTxmaWVsZCBuYW1lPSJBRERSRVNTIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfRklMVEVSX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfTE9PS1VQX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iRElTUExBWV9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTlRFUlBSSVNFX0NPTlRFTlRfRklMVEVSX1VSSSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTlRFUlBSSVNFX0NPTlRFTlRfTE9PS1VQX1VSSSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVgiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYX0NPVU5UUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVhfVElUTEVTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSE9NRSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9NT0JJTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfT1RIRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfV09SSyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb21tb25EYXRhS2luZHMkRXZlbnQiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29tbW9uRGF0YUtpbmRzJENvbW1vbkNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JERhdGFDb2x1bW5zV2l0aEpvaW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZUxhYmVsKExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZVJlc291cmNlKExqYXZhL2xhbmcvSW50ZWdlcjspSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVhfQ09VTlRTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWF9USVRMRVMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBUlRfREFURSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BTk5JVkVSU0FSWSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9CSVJUSERBWSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9PVEhFUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb21tb25EYXRhS2luZHMkR3JvdXBNZW1iZXJzaGlwIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JERhdGFDb2x1bW5zV2l0aEpvaW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0lURU1fVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWF9DT1VOVFMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYX1RJVExFUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUk9VUF9ST1dfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdST1VQX1NPVVJDRV9JRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb21tb25EYXRhS2luZHMkSWRlbnRpdHkiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JERhdGFDb2x1bW5zV2l0aEpvaW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0lURU1fVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWF9DT1VOVFMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYX1RJVExFUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJJREVOVElUWSIvPgotCQk8ZmllbGQgbmFtZT0iTkFNRVNQQUNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbW1vbkRhdGFLaW5kcyRJbSIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb21tb25EYXRhS2luZHMkQ29tbW9uQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YUNvbHVtbnNXaXRoSm9pbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm90b2NvbExhYmVsKExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3RvY29sTGFiZWxSZXNvdXJjZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlTGFiZWwoTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzO0lMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZUxhYmVsUmVzb3VyY2UoSSlJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0lURU1fVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ1VTVE9NX1BST1RPQ09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVgiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYX0NPVU5UUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVhfVElUTEVTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RPQ09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UT0NPTF9BSU0iLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RPQ09MX0NVU1RPTSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVE9DT0xfR09PR0xFX1RBTEsiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RPQ09MX0lDUSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVE9DT0xfSkFCQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UT0NPTF9NU04iLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RPQ09MX05FVE1FRVRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RPQ09MX1FRIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UT0NPTF9TS1lQRSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVE9DT0xfWUFIT08iLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSE9NRSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9PVEhFUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9XT1JLIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbW1vbkRhdGFLaW5kcyROaWNrbmFtZSIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb21tb25EYXRhS2luZHMkQ29tbW9uQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YUNvbHVtbnNXaXRoSm9pbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfSVRFTV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVgiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYX0NPVU5UUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVhfVElUTEVTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9JTklUSUFMUyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9NQUlERU5fTkFNRSIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTUFJTkRFTl9OQU1FIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9PVEhFUl9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NIT1JUX05BTUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29tbW9uRGF0YUtpbmRzJE5vdGUiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YUNvbHVtbnNXaXRoSm9pbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfSVRFTV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVgiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYX0NPVU5UUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVhfVElUTEVTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PVEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29tbW9uRGF0YUtpbmRzJE9yZ2FuaXphdGlvbiIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb21tb25EYXRhS2luZHMkQ29tbW9uQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YUNvbHVtbnNXaXRoSm9pbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlTGFiZWwoTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzO0lMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZUxhYmVsUmVzb3VyY2UoSSlJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QQU5ZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0lURU1fVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iREVQQVJUTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWF9DT1VOVFMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYX1RJVExFUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJKT0JfREVTQ1JJUFRJT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik9GRklDRV9MT0NBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVUSUNfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVUSUNfTkFNRV9TVFlMRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWU1CT0wiLz4KLQkJPGZpZWxkIG5hbWU9IlRJVExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX09USEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1dPUksiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29tbW9uRGF0YUtpbmRzJFBob25lIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbW1vbkRhdGFLaW5kcyRDb21tb25Db2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCREYXRhQ29sdW1uc1dpdGhKb2lucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGVMYWJlbChMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7SUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlTGFiZWxSZXNvdXJjZShJKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfRklMVEVSX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkVOVEVSUFJJU0VfQ09OVEVOVF9GSUxURVJfVVJJIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVhfQ09VTlRTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWF9USVRMRVMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTk9STUFMSVpFRF9OVU1CRVIiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUFSQ0hfRElTUExBWV9OQU1FX0tFWSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRUFSQ0hfUEhPTkVfTlVNQkVSX0tFWSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FTU0lTVEFOVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DQUxMQkFDSyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DQVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQ09NUEFOWV9NQUlOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0ZBWF9IT01FIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0ZBWF9XT1JLIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0hPTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSVNETiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9NQUlOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX01NUyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9NT0JJTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfT1RIRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfT1RIRVJfRkFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1BBR0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1JBRElPIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFTEVYIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RUWV9UREQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfV09SSyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9XT1JLX01PQklMRSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9XT1JLX1BBR0VSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbW1vbkRhdGFLaW5kcyRQaG90byIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCREYXRhQ29sdW1uc1dpdGhKb2lucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVhfQ09VTlRTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWF9USVRMRVMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUEhPVE8iLz4KLQkJPGZpZWxkIG5hbWU9IlBIT1RPX0ZJTEVfSUQiIHNpbmNlPSIxNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb21tb25EYXRhS2luZHMkUmVsYXRpb24iIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29tbW9uRGF0YUtpbmRzJENvbW1vbkNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JERhdGFDb2x1bW5zV2l0aEpvaW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZUxhYmVsKExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZUxhYmVsUmVzb3VyY2UoSSlJIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfSVRFTV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVgiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYX0NPVU5UUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVhfVElUTEVTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQVNTSVNUQU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0JST1RIRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQ0hJTEQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRE9NRVNUSUNfUEFSVE5FUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9GQVRIRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRlJJRU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX01BTkFHRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTU9USEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1BBUkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9QQVJUTkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1JFRkVSUkVEX0JZIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1JFTEFUSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NJU1RFUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9TUE9VU0UiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29tbW9uRGF0YUtpbmRzJFNpcEFkZHJlc3MiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29tbW9uRGF0YUtpbmRzJENvbW1vbkNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JERhdGFDb2x1bW5zV2l0aEpvaW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZUxhYmVsKExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGVMYWJlbFJlc291cmNlKEkpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVhfQ09VTlRTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWF9USVRMRVMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iU0lQX0FERFJFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSE9NRSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9PVEhFUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9XT1JLIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbW1vbkRhdGFLaW5kcyRTdHJ1Y3R1cmVkTmFtZSIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCREYXRhQ29sdW1uc1dpdGhKb2lucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU1BMQVlfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWF9DT1VOVFMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYX1RJVExFUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJGQU1JTFlfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iRlVMTF9OQU1FX1NUWUxFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkdJVkVOX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JRERMRV9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORVRJQ19GQU1JTFlfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVUSUNfR0lWRU5fTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVUSUNfTUlERExFX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT05FVElDX05BTUVfU1RZTEUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iUFJFRklYIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUZGSVgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29tbW9uRGF0YUtpbmRzJFN0cnVjdHVyZWRQb3N0YWwiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29tbW9uRGF0YUtpbmRzJENvbW1vbkNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JERhdGFDb2x1bW5zV2l0aEpvaW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZUxhYmVsKExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGVMYWJlbFJlc291cmNlKEkpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ0lUWSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPVU5UUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVhfQ09VTlRTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWF9USVRMRVMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUVEVEX0FERFJFU1MiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FSUdIQk9SSE9PRCIvPgotCQk8ZmllbGQgbmFtZT0iUE9CT1giLz4KLQkJPGZpZWxkIG5hbWU9IlBPU1RDT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUdJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNUUkVFVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9IT01FIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX09USEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1dPUksiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29tbW9uRGF0YUtpbmRzJFdlYnNpdGUiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29tbW9uRGF0YUtpbmRzJENvbW1vbkNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JERhdGFDb2x1bW5zV2l0aEpvaW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0lURU1fVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWF9DT1VOVFMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYX1RJVExFUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0JMT0ciLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRlRQIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0hPTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSE9NRVBBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfT1RIRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUFJPRklMRSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9XT1JLIi8+Ci0JCTxmaWVsZCBuYW1lPSJVUkwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29udGFjdE5hbWVDb2x1bW5zIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNQTEFZX05BTUVfQUxURVJOQVRJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU1BMQVlfTkFNRV9QUklNQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNQTEFZX05BTUVfU09VUkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORVRJQ19OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORVRJQ19OQU1FX1NUWUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT1JUX0tFWV9BTFRFUk5BVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iU09SVF9LRVlfUFJJTUFSWSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb250YWN0T3B0aW9uc0NvbHVtbnMiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQ1VTVE9NX1JJTkdUT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVNUX1RJTUVfQ09OVEFDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSU5ORUQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iU0VORF9UT19WT0lDRU1BSUwiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVJSRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRJTUVTX0NPTlRBQ1RFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb250YWN0U3RhdHVzQ29sdW1ucyIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UQUNUX0NIQVRfQ0FQQUJJTElUWSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UQUNUX1BSRVNFTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UQUNUX1NUQVRVUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEFDVF9TVEFUVVNfSUNPTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEFDVF9TVEFUVVNfTEFCRUwiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRBQ1RfU1RBVFVTX1JFU19QQUNLQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UQUNUX1NUQVRVU19USU1FU1RBTVAiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29udGFjdHMiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb250YWN0TmFtZUNvbHVtbnMiIHNpbmNlPSIxMSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29udGFjdE9wdGlvbnNDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb250YWN0U3RhdHVzQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29udGFjdHNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9va3VwVXJpKEpMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb29rdXBVcmkoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VudGVycHJpc2VDb250YWN0SWQoSilaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb29rdXBDb250YWN0KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWFya0FzQ29udGFjdGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0opViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuQ29udGFjdFBob3RvSW5wdXRTdHJlYW0oTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGFuZHJvaWQvbmV0L1VyaTspTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkNvbnRhY3RQaG90b0lucHV0U3RyZWFtKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xhbmRyb2lkL25ldC9Vcmk7WilMamF2YS9pby9JbnB1dFN0cmVhbTsiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9GSUxURVJfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0ZSRVFVRU5UX1VSSSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0dST1VQX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfTE9PS1VQX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9NVUxUSV9WQ0FSRF9VUkkiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9TVFJFUVVFTlRfRklMVEVSX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9TVFJFUVVFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1ZDQVJEX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVkNBUkRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTlRFUlBSSVNFX0NPTlRFTlRfRklMVEVSX1VSSSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVgiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUREUkVTU19CT09LX0lOREVYX0NPVU5UUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVhfVElUTEVTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlFVRVJZX1BBUkFNRVRFUl9WQ0FSRF9OT19QSE9UTyIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbnRhY3RzJEFnZ3JlZ2F0aW9uU3VnZ2VzdGlvbnMiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb250YWN0T3B0aW9uc0NvbHVtbnMiIHNpbmNlPSIxMSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29udGFjdFN0YXR1c0NvbHVtbnMiIHNpbmNlPSIxMSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29udGFjdHNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0RJUkVDVE9SWSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb250YWN0cyRBZ2dyZWdhdGlvblN1Z2dlc3Rpb25zJEJ1aWxkZXIiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGROYW1lUGFyYW1ldGVyKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbnRhY3RzJEFnZ3JlZ2F0aW9uU3VnZ2VzdGlvbnMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250YWN0SWQoSilMYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbnRhY3RzJEFnZ3JlZ2F0aW9uU3VnZ2VzdGlvbnMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaW1pdChJKUxhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29udGFjdHMkQWdncmVnYXRpb25TdWdnZXN0aW9ucyRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb250YWN0cyREYXRhIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YUNvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfRElSRUNUT1JZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbnRhY3RzJEVudGl0eSIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRCYXNlU3luY0NvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbnRhY3ROYW1lQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29udGFjdE9wdGlvbnNDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb250YWN0U3RhdHVzQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29udGFjdHNDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCREYXRhQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YVVzYWdlU3RhdENvbHVtbnMiIHNpbmNlPSIyMSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkUmF3Q29udGFjdHNDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRTdGF0dXNDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRTeW5jQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9ESVJFQ1RPUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlJBV19DT05UQUNUX0lEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbnRhY3RzJFBob3RvIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YUNvbHVtbnMiIHJlbW92ZWQ9IjExIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCREYXRhQ29sdW1uc1dpdGhKb2lucyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0RJUkVDVE9SWSIvPgotCQk8ZmllbGQgbmFtZT0iRElTUExBWV9QSE9UTyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9UTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9UT19GSUxFX0lEIiBzaW5jZT0iMTQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29udGFjdHMkU3RyZWFtSXRlbXMiIHNpbmNlPSIxNSIgZGVwcmVjYXRlZD0iMjEiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkU3RyZWFtSXRlbXNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0RJUkVDVE9SWSIgZGVwcmVjYXRlZD0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29udGFjdHNDb2x1bW5zIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRBQ1RfTEFTVF9VUERBVEVEX1RJTUVTVEFNUCIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNQTEFZX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkhBU19QSE9ORV9OVU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IklOX0RFRkFVTFRfRElSRUNUT1JZIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IklOX1ZJU0lCTEVfR1JPVVAiLz4KLQkJPGZpZWxkIG5hbWU9IklTX1VTRVJfUFJPRklMRSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT09LVVBfS0VZIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQU1FX1JBV19DT05UQUNUX0lEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT1RPX0ZJTEVfSUQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iUEhPVE9fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT1RPX1RIVU1CTkFJTF9VUkkiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iUEhPVE9fVVJJIiBzaW5jZT0iMTEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YSIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCREYXRhQ29sdW1uc1dpdGhKb2lucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRhY3RMb29rdXBVcmkoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BRERSRVNTX0JPT0tfSU5ERVhfQ09VTlRTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FERFJFU1NfQk9PS19JTkRFWF9USVRMRVMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iVklTSUJMRV9DT05UQUNUU19PTkxZIiBzaW5jZT0iMTgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YUNvbHVtbnMiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FSUklFUl9QUkVTRU5DRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVJSSUVSX1BSRVNFTkNFX1ZUX0NBUEFCTEUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iREFUQTEiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEExMCIvPgotCQk8ZmllbGQgbmFtZT0iREFUQTExIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEExMyIvPgotCQk8ZmllbGQgbmFtZT0iREFUQTE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBMTUiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBMyIvPgotCQk8ZmllbGQgbmFtZT0iREFUQTQiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBNiIvPgotCQk8ZmllbGQgbmFtZT0iREFUQTciLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBOSIvPgotCQk8ZmllbGQgbmFtZT0iREFUQV9WRVJTSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU19QUklNQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU19SRUFEX09OTFkiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iSVNfU1VQRVJfUFJJTUFSWSIvPgotCQk8ZmllbGQgbmFtZT0iTUlNRVRZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRUZFUlJFRF9QSE9ORV9BQ0NPVU5UX0NPTVBPTkVOVF9OQU1FIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRUZFUlJFRF9QSE9ORV9BQ0NPVU5UX0lEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlJBV19DT05UQUNUX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNfUEFDS0FHRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DMSIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQzIiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkMzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCREYXRhQ29sdW1uc1dpdGhKb2lucyIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbnRhY3ROYW1lQ29sdW1ucyIgc2luY2U9IjExIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb250YWN0T3B0aW9uc0NvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbnRhY3RTdGF0dXNDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb250YWN0c0NvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JERhdGFDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCREYXRhVXNhZ2VTdGF0Q29sdW1ucyIgc2luY2U9IjE4Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRSYXdDb250YWN0c0NvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFN0YXR1c0NvbHVtbnMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YVVzYWdlRmVlZGJhY2siIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTEVURV9VU0FHRV9VUkkiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iRkVFREJBQ0tfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9UWVBFX0NBTEwiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQUdFX1RZUEVfTE9OR19URVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9UWVBFX1NIT1JUX1RFWFQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YVVzYWdlU3RhdENvbHVtbnMiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkxBU1RfVElNRV9VU0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FU19VU0VEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JERlbGV0ZWRDb250YWN0cyIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGVsZXRlZENvbnRhY3RzQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkRBWVNfS0VQVF9NSUxMSVNFQ09ORFMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGVsZXRlZENvbnRhY3RzQ29sdW1ucyIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEFDVF9ERUxFVEVEX1RJTUVTVEFNUCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEFDVF9JRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCREaXJlY3RvcnkiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW50ZXJwcmlzZURpcmVjdG9yeUlkKEopWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZW1vdGVEaXJlY3RvcnlJZChKKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeURpcmVjdG9yeUNoYW5nZShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjspViIvPgotCQk8ZmllbGQgbmFtZT0iQUNDT1VOVF9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0NPVU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTExFUl9QQUNLQUdFX1BBUkFNX0tFWSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0lURU1fVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUT1JZX0FVVEhPUklUWSIvPgotCQk8ZmllbGQgbmFtZT0iRElTUExBWV9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTlRFUlBSSVNFX0NPTlRFTlRfVVJJIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOVEVSUFJJU0VfREVGQVVMVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTlRFUlBSSVNFX0xPQ0FMX0lOVklTSUJMRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFBPUlRfU1VQUE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhQT1JUX1NVUFBPUlRfQU5ZX0FDQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYUE9SVF9TVVBQT1JUX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYUE9SVF9TVVBQT1JUX1NBTUVfQUNDT1VOVF9PTkxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NBTF9JTlZJU0lCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlBBQ0tBR0VfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iUEhPVE9fU1VQUE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iUEhPVE9fU1VQUE9SVF9GVUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9UT19TVVBQT1JUX0ZVTExfU0laRV9PTkxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9UT19TVVBQT1JUX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT1RPX1NVUFBPUlRfVEhVTUJOQUlMX09OTFkiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUQ1VUX1NVUFBPUlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUQ1VUX1NVUFBPUlRfREFUQV9JVEVNU19PTkxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9SVENVVF9TVVBQT1JUX0ZVTEwiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUQ1VUX1NVUFBPUlRfTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9SRVNPVVJDRV9JRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCREaXNwbGF5TmFtZVNvdXJjZXMiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkVNQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJOSUNLTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iT1JHQU5JWkFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iU1RSVUNUVVJFRF9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJVQ1RVUkVEX1BIT05FVElDX05BTUUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVU5ERUZJTkVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JERpc3BsYXlQaG90byIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9NQVhfRElNRU5TSU9OU19VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNQTEFZX01BWF9ESU0iLz4KLQkJPGZpZWxkIG5hbWU9IlRIVU1CTkFJTF9NQVhfRElNIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JEZ1bGxOYW1lU3R5bGUiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkNISU5FU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkNKSyIvPgotCQk8ZmllbGQgbmFtZT0iSkFQQU5FU0UiLz4KLQkJPGZpZWxkIG5hbWU9IktPUkVBTiIvPgotCQk8ZmllbGQgbmFtZT0iVU5ERUZJTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRVNURVJOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JEdyb3VwcyIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JEdyb3Vwc0NvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFN5bmNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RW50aXR5SXRlcmF0b3IoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOylMYW5kcm9pZC9jb250ZW50L0VudGl0eUl0ZXJhdG9yOyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfSVRFTV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1NVTU1BUllfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JEdyb3Vwc0NvbHVtbnMiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQVVUT19BREQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iREFUQV9TRVQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iREVMRVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iRkFWT1JJVEVTIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkdST1VQX0lTX1JFQURfT05MWSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUk9VUF9WSVNJQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1RFUyIvPgotCQk8ZmllbGQgbmFtZT0iUkVTX1BBQ0tBR0UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iU0hPVUxEX1NZTkMiLz4KLQkJPGZpZWxkIG5hbWU9IlNVTU1BUllfQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVTU1BUllfV0lUSF9QSE9ORVMiLz4KLQkJPGZpZWxkIG5hbWU9IlNZU1RFTV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iVElUTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlRJVExFX1JFUyIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JEludGVudHMiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1ZPSUNFX1NFTkRfTUVTU0FHRV9UT19DT05UQUNUUyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVFRBQ0hfSU1BR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRBQ1RTX0RBVEFCQVNFX0NSRUFURUQiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ1JFQVRFX0RFU0NSSVBUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9GT1JDRV9DUkVBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JFQ0lQSUVOVF9DT05UQUNUX0NIQVRfSUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUkVDSVBJRU5UX0NPTlRBQ1RfTkFNRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9SRUNJUElFTlRfQ09OVEFDVF9VUkkiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iSU5WSVRFX0NPTlRBQ1QiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfQUNDT1VOVF9UWVBFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX01JTUVUWVBFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQVJDSF9TVUdHRVNUSU9OX0NMSUNLRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQVJDSF9TVUdHRVNUSU9OX0NSRUFURV9DT05UQUNUX0NMSUNLRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQVJDSF9TVUdHRVNUSU9OX0RJQUxfTlVNQkVSX0NMSUNLRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1dfT1JfQ1JFQVRFX0NPTlRBQ1QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkSW50ZW50cyRJbnNlcnQiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QQU5ZIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkVNQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTUFJTF9JU1BSSU1BUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkVNQUlMX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FDQ09VTlQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfREFUQV9TRVQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRlVMTF9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTV9IQU5ETEUiLz4KLQkJPGZpZWxkIG5hbWU9IklNX0lTUFJJTUFSWSIvPgotCQk8ZmllbGQgbmFtZT0iSU1fUFJPVE9DT0wiLz4KLQkJPGZpZWxkIG5hbWU9IkpPQl9USVRMRSIvPgotCQk8ZmllbGQgbmFtZT0iTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iTk9URVMiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORVRJQ19OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORV9JU1BSSU1BUlkiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT05FX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlBPU1RBTCIvPgotCQk8ZmllbGQgbmFtZT0iUE9TVEFMX0lTUFJJTUFSWSIvPgotCQk8ZmllbGQgbmFtZT0iUE9TVEFMX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQ09OREFSWV9FTUFJTCIvPgotCQk8ZmllbGQgbmFtZT0iU0VDT05EQVJZX0VNQUlMX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQ09OREFSWV9QSE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iU0VDT05EQVJZX1BIT05FX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlRFUlRJQVJZX0VNQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJURVJUSUFSWV9FTUFJTF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJURVJUSUFSWV9QSE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iVEVSVElBUllfUEhPTkVfVFlQRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRQaG9uZUxvb2t1cCIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbnRhY3ROYW1lQ29sdW1ucyIgc2luY2U9IjI2Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb250YWN0T3B0aW9uc0NvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbnRhY3RzQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkUGhvbmVMb29rdXBDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0ZJTFRFUl9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkVOVEVSUFJJU0VfQ09OVEVOVF9GSUxURVJfVVJJIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlFVRVJZX1BBUkFNRVRFUl9TSVBfQUREUkVTUyIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFBob25lTG9va3VwQ29sdW1ucyIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UQUNUX0lEIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfSUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTEFCRUwiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PUk1BTElaRURfTlVNQkVSIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRQaG9uZXRpY05hbWVTdHlsZSIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iSkFQQU5FU0UiLz4KLQkJPGZpZWxkIG5hbWU9IktPUkVBTiIvPgotCQk8ZmllbGQgbmFtZT0iUElOWUlOIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTkRFRklORUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkUGlubmVkUG9zaXRpb25zIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGluKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0pJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmRlbW90ZShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtKKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTU9URUQiLz4KLQkJPGZpZWxkIG5hbWU9IlVOUElOTkVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFByZXNlbmNlIiBzaW5jZT0iNSIgZGVwcmVjYXRlZD0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRTdGF0dXNVcGRhdGVzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFByZXNlbmNlQ29sdW1ucyIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDVVNUT01fUFJPVE9DT0wiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IklNX0FDQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IklNX0hBTkRMRSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVE9DT0wiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkUHJvZmlsZSIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb250YWN0TmFtZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbnRhY3RPcHRpb25zQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29udGFjdFN0YXR1c0NvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JENvbnRhY3RzQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9SQVdfQ09OVEFDVFNfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9WQ0FSRF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9JRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRQcm9maWxlU3luY1N0YXRlIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvU3luY1N0YXRlQ29udHJhY3QkQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlckNsaWVudDtMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50OylbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpdGhVcmkoTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJDbGllbnQ7TGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDspTGFuZHJvaWQvdXRpbC9QYWlyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1NldE9wZXJhdGlvbihMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O1tCKUxhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyT3BlcmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlckNsaWVudDtMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O1tCKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfRElSRUNUT1JZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRQcm92aWRlclN0YXR1cyIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iREFUQUJBU0VfQ1JFQVRJT05fVElNRVNUQU1QIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVUyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0JVU1kiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19FTVBUWSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX05PUk1BTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRRdWlja0NvbnRhY3QiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dRdWlja0NvbnRhY3QoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7TGFuZHJvaWQvbmV0L1VyaTtJW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd1F1aWNrQ29udGFjdChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtMYW5kcm9pZC9uZXQvVXJpO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd1F1aWNrQ29udGFjdChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL25ldC9Vcmk7SVtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dRdWlja0NvbnRhY3QoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC9uZXQvVXJpO1tMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUVVJQ0tfQ09OVEFDVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9FWENMVURFX01JTUVTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX01PREUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJJT1JJVElaRURfTUlNRVRZUEUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9MQVJHRSIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9NRURJVU0iLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfU01BTEwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkUmF3Q29udGFjdHMiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRDb250YWN0TmFtZUNvbHVtbnMiIHNpbmNlPSIxMSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkQ29udGFjdE9wdGlvbnNDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRSYXdDb250YWN0c0NvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFN5bmNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGFjdExvb2t1cFVyaShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9uZXQvVXJpOylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0VudGl0eUl0ZXJhdG9yKExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjspTGFuZHJvaWQvY29udGVudC9FbnRpdHlJdGVyYXRvcjsiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBR0dSRUdBVElPTl9NT0RFX0RFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IkFHR1JFR0FUSU9OX01PREVfRElTQUJMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFHR1JFR0FUSU9OX01PREVfSU1NRURJQVRFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQUdHUkVHQVRJT05fTU9ERV9TVVNQRU5ERUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfSVRFTV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFJhd0NvbnRhY3RzJERhdGEiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCREYXRhQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9ESVJFQ1RPUlkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkUmF3Q29udGFjdHMkRGlzcGxheVBob3RvIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0RJUkVDVE9SWSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRSYXdDb250YWN0cyRFbnRpdHkiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCREYXRhQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9ESVJFQ1RPUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfSUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkUmF3Q29udGFjdHMkU3RyZWFtSXRlbXMiIHNpbmNlPSIxNSIgZGVwcmVjYXRlZD0iMjEiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRTdHJlYW1JdGVtc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfRElSRUNUT1JZIiBkZXByZWNhdGVkPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRSYXdDb250YWN0c0NvbHVtbnMiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQUNDT1VOVF9UWVBFX0FORF9EQVRBX1NFVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBR0dSRUdBVElPTl9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQUNLVVBfSUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEFDVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iREFUQV9TRVQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iREVMRVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfRElSVFkiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iUkFXX0NPTlRBQ1RfSVNfUkVBRF9PTkxZIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlJBV19DT05UQUNUX0lTX1VTRVJfUFJPRklMRSIgc2luY2U9IjE0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFJhd0NvbnRhY3RzRW50aXR5IiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkRGF0YUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFJhd0NvbnRhY3RzQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iREFUQV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPRklMRV9DT05URU5UX1VSSSIgc2luY2U9IjE0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFNlYXJjaFNuaXBwZXRzIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZFUlJFRF9TTklQUEVUSU5HX0tFWSIvPgotCQk8ZmllbGQgbmFtZT0iU05JUFBFVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRTZXR0aW5ncyIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRTZXR0aW5nc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfSVRFTV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFNldHRpbmdzQ29sdW1ucyIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0NPVU5UX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ09VTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQU5ZX1VOU1lOQ0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBX1NFVCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9VTERfU1lOQyIvPgotCQk8ZmllbGQgbmFtZT0iVU5HUk9VUEVEX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTkdST1VQRURfVklTSUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iVU5HUk9VUEVEX1dJVEhfUEhPTkVTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFN0YXR1c0NvbHVtbnMiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQVZBSUxBQkxFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQVdBWSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfSEFTX0NBTUVSQSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX0hBU19WSURFTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX0hBU19WT0lDRSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFUX0NBUEFCSUxJVFkiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iRE9fTk9UX0RJU1RVUkIiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJRExFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iSU5WSVNJQkxFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iT0ZGTElORSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVNFTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTRU5DRV9DVVNUT01fU1RBVFVTIiBzaW5jZT0iOCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVNFTkNFX1NUQVRVUyIgc2luY2U9IjgiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVMiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19JQ09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfTEFCRUwiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19SRVNfUEFDS0FHRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX1RJTUVTVEFNUCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRTdGF0dXNVcGRhdGVzIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFByZXNlbmNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkU3RhdHVzQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZXNlbmNlSWNvblJlc291cmNlSWQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlc2VuY2VQcmVjZWRlbmNlKEkpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9JVEVNX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IlBST0ZJTEVfQ09OVEVOVF9VUkkiIHNpbmNlPSIxNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRTdHJlYW1JdGVtUGhvdG9zIiBzaW5jZT0iMTUiIGRlcHJlY2F0ZWQ9IjIxIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkU3RyZWFtSXRlbVBob3Rvc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT1RPIiBkZXByZWNhdGVkPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRTdHJlYW1JdGVtUGhvdG9zQ29sdW1ucyIgc2luY2U9IjE1IiBkZXByZWNhdGVkPSIyMSIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9UT19GSUxFX0lEIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUEhPVE9fVVJJIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iU09SVF9JTkRFWCIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUkVBTV9JVEVNX0lEIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQzEiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DMiIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkMzIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQzQiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFN0cmVhbUl0ZW1zIiBzaW5jZT0iMTUiIGRlcHJlY2F0ZWQ9IjIxIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkU3RyZWFtSXRlbXNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0lURU1fVFlQRSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfTElNSVRfVVJJIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9QSE9UT19VUkkiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9JVEVNUyIgZGVwcmVjYXRlZD0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkU3RyZWFtSXRlbXMkU3RyZWFtSXRlbVBob3RvcyIgc2luY2U9IjE1IiBkZXByZWNhdGVkPSIyMSIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFN0cmVhbUl0ZW1QaG90b3NDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0RJUkVDVE9SWSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfSVRFTV9UWVBFIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFIiBkZXByZWNhdGVkPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdCRTdHJlYW1JdGVtc0NvbHVtbnMiIHNpbmNlPSIxNSIgZGVwcmVjYXRlZD0iMjEiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQUNDT1VOVF9OQU1FIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQUNDT1VOVF9UWVBFIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ09NTUVOVFMiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UQUNUX0lEIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEFDVF9MT09LVVBfS0VZIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iREFUQV9TRVQiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJSQVdfQ09OVEFDVF9JRCIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlJBV19DT05UQUNUX1NPVVJDRV9JRCIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU19JQ09OIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUkVTX0xBQkVMIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUkVTX1BBQ0tBR0UiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DMSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkMyIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQzMiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DNCIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFQiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FU1RBTVAiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JFN5bmNDb2x1bW5zIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0JEJhc2VTeW5jQ29sdW1ucyIvPgotCQk8ZmllbGQgbmFtZT0iQUNDT1VOVF9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0NPVU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUlRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT1VSQ0VfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlZFUlNJT04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QkU3luY1N0YXRlIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9TeW5jU3RhdGVDb250cmFjdCRDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyQ2xpZW50O0xhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7KVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2l0aFVyaShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlckNsaWVudDtMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50OylMYW5kcm9pZC91dGlsL1BhaXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3U2V0T3BlcmF0aW9uKExhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7W0IpTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJPcGVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyQ2xpZW50O0xhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7W0IpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9ESVJFQ1RPUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Eb2N1bWVudHNDb250cmFjdCIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkQ2hpbGREb2N1bWVudHNVcmkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGRDaGlsZERvY3VtZW50c1VyaVVzaW5nVHJlZShMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGREb2N1bWVudFVyaShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZERvY3VtZW50VXJpVXNpbmdUcmVlKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZFJlY2VudERvY3VtZW50c1VyaShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZFJvb3RVcmkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGRSb290c1VyaShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZFNlYXJjaERvY3VtZW50c1VyaShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZFRyZWVEb2N1bWVudFVyaShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlEb2N1bWVudChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVEb2N1bWVudChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlV2ViTGlua0ludGVudChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvY29udGVudC9JbnRlbnRTZW5kZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVEb2N1bWVudChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9uZXQvVXJpOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWplY3RSb290KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xhbmRyb2lkL25ldC9Vcmk7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmREb2N1bWVudFBhdGgoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvcHJvdmlkZXIvRG9jdW1lbnRzQ29udHJhY3QkUGF0aDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERvY3VtZW50SWQoTGFuZHJvaWQvbmV0L1VyaTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG9jdW1lbnRUaHVtYm5haWwoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGFuZHJvaWQvbmV0L1VyaTtMYW5kcm9pZC9ncmFwaGljcy9Qb2ludDtMYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWw7KUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb290SWQoTGFuZHJvaWQvbmV0L1VyaTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VhcmNoRG9jdW1lbnRzUXVlcnkoTGFuZHJvaWQvbmV0L1VyaTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJlZURvY3VtZW50SWQoTGFuZHJvaWQvbmV0L1VyaTspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RvY3VtZW50VXJpKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9uZXQvVXJpOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUcmVlVXJpKExhbmRyb2lkL25ldC9Vcmk7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im1vdmVEb2N1bWVudChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvbmV0L1VyaTspTGFuZHJvaWQvbmV0L1VyaTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZURvY3VtZW50KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvbmV0L1VyaTspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVuYW1lRG9jdW1lbnQoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGFuZHJvaWQvbmV0L1VyaTtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RPQ1VNRU5UX1NFVFRJTkdTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9FWENMVURFX1NFTEYiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfSU5GTyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfSU5JVElBTF9VUkkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTE9BRElORyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfT1JJRU5UQVRJT04iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUFJPTVBUIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1ZJREVSX0lOVEVSRkFDRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvRG9jdW1lbnRzQ29udHJhY3QkRG9jdW1lbnQiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9ESVNQTEFZX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9ET0NVTUVOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0ZMQUdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSUNPTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0xBU1RfTU9ESUZJRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9NSU1FX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fU1VNTUFSWSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19ESVJfUFJFRkVSU19HUklEIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0RJUl9QUkVGRVJTX0xBU1RfTU9ESUZJRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfRElSX1NVUFBPUlRTX0NSRUFURSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TVVBQT1JUU19DT1BZIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfU1VQUE9SVFNfREVMRVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NVUFBPUlRTX01PVkUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TVVBQT1JUU19SRU1PVkUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TVVBQT1JUU19SRU5BTUUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TVVBQT1JUU19TRVRUSU5HUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NVUFBPUlRTX1RIVU1CTkFJTCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TVVBQT1JUU19XUklURSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19WSVJUVUFMX0RPQ1VNRU5UIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfV0VCX0xJTktBQkxFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVfVFlQRV9ESVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0RvY3VtZW50c0NvbnRyYWN0JFBhdGgiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhdGgoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb290SWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvRG9jdW1lbnRzQ29udHJhY3QkUm9vdCIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0FWQUlMQUJMRV9CWVRFUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0NBUEFDSVRZX0JZVEVTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9ET0NVTUVOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX0ZMQUdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fSUNPTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX01JTUVfVFlQRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTFVNTl9ST09UX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xVTU5fU1VNTUFSWSIvPgotCQk8ZmllbGQgbmFtZT0iQ09MVU1OX1RJVExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0xPQ0FMX09OTFkiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfU1VQUE9SVFNfQ1JFQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NVUFBPUlRTX0VKRUNUIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfU1VQUE9SVFNfSVNfQ0hJTEQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TVVBQT1JUU19SRUNFTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NVUFBPUlRTX1NFQVJDSCIvPgotCQk8ZmllbGQgbmFtZT0iTUlNRV9UWVBFX0lURU0iIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvRG9jdW1lbnRzUHJvdmlkZXIiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5RG9jdW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRG9jdW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVdlYkxpbmtJbnRlbnQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZURvY3VtZW50KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWplY3RSb290KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kRG9jdW1lbnRQYXRoKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9wcm92aWRlci9Eb2N1bWVudHNDb250cmFjdCRQYXRoOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG9jdW1lbnRTdHJlYW1UeXBlcyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspW0xqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG9jdW1lbnRUeXBlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NoaWxkRG9jdW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im1vdmVEb2N1bWVudChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuRG9jdW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsOylMYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuRG9jdW1lbnRUaHVtYm5haWwoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvZ3JhcGhpY3MvUG9pbnQ7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsOylMYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldEZpbGVEZXNjcmlwdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5UeXBlZERvY3VtZW50KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWw7KUxhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0RmlsZURlc2NyaXB0b3I7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeUNoaWxkRG9jdW1lbnRzKExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5Q2hpbGREb2N1bWVudHMoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnlEb2N1bWVudChMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeVJlY2VudERvY3VtZW50cyhMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeVJvb3RzKFtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5U2VhcmNoRG9jdW1lbnRzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZURvY3VtZW50KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW5hbWVEb2N1bWVudChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXZva2VEb2N1bWVudFBlcm1pc3Npb24oTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvRm9udFJlcXVlc3QiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VydGlmaWNhdGVzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdmlkZXJBdXRob3JpdHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3ZpZGVyUGFja2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVlcnkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvRm9udHNDb250cmFjdCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkVHlwZWZhY2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL29zL0NhbmNlbGxhdGlvblNpZ25hbDtbTGFuZHJvaWQvcHJvdmlkZXIvRm9udHNDb250cmFjdCRGb250SW5mbzspTGFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmV0Y2hGb250cyhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvb3MvQ2FuY2VsbGF0aW9uU2lnbmFsO0xhbmRyb2lkL3Byb3ZpZGVyL0ZvbnRSZXF1ZXN0OylMYW5kcm9pZC9wcm92aWRlci9Gb250c0NvbnRyYWN0JEZvbnRGYW1pbHlSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdEZvbnRzKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9wcm92aWRlci9Gb250UmVxdWVzdDtMYW5kcm9pZC9vcy9IYW5kbGVyO0xhbmRyb2lkL29zL0NhbmNlbGxhdGlvblNpZ25hbDtMYW5kcm9pZC9wcm92aWRlci9Gb250c0NvbnRyYWN0JEZvbnRSZXF1ZXN0Q2FsbGJhY2s7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0ZvbnRzQ29udHJhY3QkQ29sdW1ucyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUxFX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJJVEFMSUMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9DT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfQ09ERV9GT05UX05PVF9GT1VORCIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVUxUX0NPREVfRk9OVF9VTkFWQUlMQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVUxUX0NPREVfTUFMRk9STUVEX1FVRVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfQ09ERV9PSyIvPgotCQk8ZmllbGQgbmFtZT0iVFRDX0lOREVYIi8+Ci0JCTxmaWVsZCBuYW1lPSJWQVJJQVRJT05fU0VUVElOR1MiLz4KLQkJPGZpZWxkIG5hbWU9IldFSUdIVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvRm9udHNDb250cmFjdCRGb250RmFtaWx5UmVzdWx0IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJW0xhbmRyb2lkL3Byb3ZpZGVyL0ZvbnRzQ29udHJhY3QkRm9udEluZm87KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvbnRzKClbTGFuZHJvaWQvcHJvdmlkZXIvRm9udHNDb250cmFjdCRGb250SW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0dXNDb2RlKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfT0siLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19SRUpFQ1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX1VORVhQRUNURURfREFUQV9QUk9WSURFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX1dST05HX0NFUlRJRklDQVRFUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvRm9udHNDb250cmFjdCRGb250SW5mbyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L1VyaTtJW0xhbmRyb2lkL2dyYXBoaWNzL2ZvbnRzL0ZvbnRWYXJpYXRpb25BeGlzO0laSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBeGVzKClbTGFuZHJvaWQvZ3JhcGhpY3MvZm9udHMvRm9udFZhcmlhdGlvbkF4aXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzdWx0Q29kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR0Y0luZGV4KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXJpKClMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSXRhbGljKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Gb250c0NvbnRyYWN0JEZvbnRSZXF1ZXN0Q2FsbGJhY2siIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblR5cGVmYWNlUmVxdWVzdEZhaWxlZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblR5cGVmYWNlUmV0cmlldmVkKExhbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJGQUlMX1JFQVNPTl9GT05UX0xPQURfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkZBSUxfUkVBU09OX0ZPTlRfTk9UX0ZPVU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJGQUlMX1JFQVNPTl9GT05UX1VOQVZBSUxBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGQUlMX1JFQVNPTl9NQUxGT1JNRURfUVVFUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkZBSUxfUkVBU09OX1BST1ZJREVSX05PVF9GT1VORCIvPgotCQk8ZmllbGQgbmFtZT0iRkFJTF9SRUFTT05fV1JPTkdfQ0VSVElGSUNBVEVTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9MaXZlRm9sZGVycyIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ1JFQVRFX0xJVkVfRk9MREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVNDUklQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRElTUExBWV9NT0RFX0dSSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU1BMQVlfTU9ERV9MSVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9MSVZFX0ZPTERFUl9CQVNFX0lOVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTElWRV9GT0xERVJfRElTUExBWV9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9MSVZFX0ZPTERFUl9JQ09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9MSVZFX0ZPTERFUl9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJJQ09OX0JJVE1BUCIvPgotCQk8ZmllbGQgbmFtZT0iSUNPTl9QQUNLQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJQ09OX1JFU09VUkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL01lZGlhU3RvcmUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERvY3VtZW50VXJpKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9uZXQvVXJpOylMYW5kcm9pZC9uZXQvVXJpOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVkaWFTY2FubmVyVXJpKClMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZlcnNpb24oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0lNQUdFX0NBUFRVUkUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fSU1BR0VfQ0FQVFVSRV9TRUNVUkUiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1ZJREVPX0NBUFRVUkUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRIT1JJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0RVUkFUSU9OX0xJTUlUIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfRklOSVNIX09OX0NPTVBMRVRJT04iIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9GVUxMX1NDUkVFTiIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX01FRElBX0FMQlVNIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTUVESUFfQVJUSVNUIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTUVESUFfRk9DVVMiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9NRURJQV9HRU5SRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9NRURJQV9QTEFZTElTVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9NRURJQV9SQURJT19DSEFOTkVMIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX01FRElBX1RJVExFIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfT1VUUFVUIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU0NSRUVOX09SSUVOVEFUSU9OIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU0hPV19BQ1RJT05fSUNPTlMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TSVpFX0xJTUlUIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfVklERU9fUVVBTElUWSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVOVF9BQ1RJT05fTUVESUFfUExBWV9GUk9NX1NFQVJDSCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVOVF9BQ1RJT05fTUVESUFfU0VBUkNIIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iSU5URU5UX0FDVElPTl9NVVNJQ19QTEFZRVIiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iSU5URU5UX0FDVElPTl9TVElMTF9JTUFHRV9DQU1FUkEiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFTlRfQUNUSU9OX1NUSUxMX0lNQUdFX0NBTUVSQV9TRUNVUkUiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iSU5URU5UX0FDVElPTl9URVhUX09QRU5fRlJPTV9TRUFSQ0giIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iSU5URU5UX0FDVElPTl9WSURFT19DQU1FUkEiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFTlRfQUNUSU9OX1ZJREVPX1BMQVlfRlJPTV9TRUFSQ0giIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfSUdOT1JFX0ZJTEVOQU1FIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iTUVESUFfU0NBTk5FUl9WT0xVTUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFfREFUQV9TVElMTF9JTUFHRV9DQU1FUkFfUFJFV0FSTV9TRVJWSUNFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlVOS05PV05fU1RSSU5HIiBzaW5jZT0iOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRBdWRpbyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5Rm9yKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL01lZGlhU3RvcmUkQXVkaW8kQWxidW1Db2x1bW5zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkFMQlVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTEJVTV9BUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkFMQlVNX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTEJVTV9LRVkiLz4KLQkJPGZpZWxkIG5hbWU9IkFSVElTVCIvPgotCQk8ZmllbGQgbmFtZT0iRklSU1RfWUVBUiIvPgotCQk8ZmllbGQgbmFtZT0iTEFTVF9ZRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVU1CRVJfT0ZfU09OR1MiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VTUJFUl9PRl9TT05HU19GT1JfQVJUSVNUIiBzaW5jZT0iMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRBdWRpbyRBbGJ1bXMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRBdWRpbyRBbGJ1bUNvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50VXJpKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiLz4KLQkJPGZpZWxkIG5hbWU9IkVOVFJZX0NPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhURVJOQUxfQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSTkFMX0NPTlRFTlRfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJEF1ZGlvJEFydGlzdENvbHVtbnMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQVJUSVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUlRJU1RfS0VZIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVU1CRVJfT0ZfQUxCVU1TIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVU1CRVJfT0ZfVFJBQ0tTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJEF1ZGlvJEFydGlzdHMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRBdWRpbyRBcnRpc3RDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudFVyaShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TT1JUX09SREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTlRSWV9DT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVEVSTkFMX0NPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUk5BTF9DT05URU5UX1VSSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRBdWRpbyRBcnRpc3RzJEFsYnVtcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRBdWRpbyRBbGJ1bUNvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50VXJpKExqYXZhL2xhbmcvU3RyaW5nO0opTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL01lZGlhU3RvcmUkQXVkaW8kQXVkaW9Db2x1bW5zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJE1lZGlhQ29sdW1ucyIvPgotCQk8ZmllbGQgbmFtZT0iQUxCVU0iLz4KLQkJPGZpZWxkIG5hbWU9IkFMQlVNX0FSVCIgcmVtb3ZlZD0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkFMQlVNX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTEJVTV9LRVkiLz4KLQkJPGZpZWxkIG5hbWU9IkFSVElTVCIvPgotCQk8ZmllbGQgbmFtZT0iQVJUSVNUX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUlRJU1RfS0VZIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT09LTUFSSyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBPU0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJEVVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iSVNfQUxBUk0iLz4KLQkJPGZpZWxkIG5hbWU9IklTX01VU0lDIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU19OT1RJRklDQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IklTX1BPRENBU1QiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJU19SSU5HVE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iVElUTEVfS0VZIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFDSyIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRBdWRpbyRHZW5yZXMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRBdWRpbyRHZW5yZXNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudFVyaShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50VXJpRm9yQXVkaW9JZChMamF2YS9sYW5nL1N0cmluZztJKUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TT1JUX09SREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTlRSWV9DT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVEVSTkFMX0NPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUk5BTF9DT05URU5UX1VSSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRBdWRpbyRHZW5yZXMkTWVtYmVycyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRBdWRpbyRBdWRpb0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50VXJpKExqYXZhL2xhbmcvU3RyaW5nO0opTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPGZpZWxkIG5hbWU9IkFVRElPX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0RJUkVDVE9SWSIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TT1JUX09SREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRU5SRV9JRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRBdWRpbyRHZW5yZXNDb2x1bW5zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL01lZGlhU3RvcmUkQXVkaW8kTWVkaWEiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL01lZGlhU3RvcmUkQXVkaW8kQXVkaW9Db2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudFVyaShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50VXJpRm9yUGF0aChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TT1JUX09SREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTlRSWV9DT05URU5UX1RZUEUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhURVJOQUxfQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX01BWF9CWVRFUyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSTkFMX0NPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNPUkRfU09VTkRfQUNUSU9OIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJEF1ZGlvJFBsYXlsaXN0cyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJEF1ZGlvJFBsYXlsaXN0c0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50VXJpKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiLz4KLQkJPGZpZWxkIG5hbWU9IkVOVFJZX0NPTlRFTlRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhURVJOQUxfQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSTkFMX0NPTlRFTlRfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJEF1ZGlvJFBsYXlsaXN0cyRNZW1iZXJzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJEF1ZGlvJEF1ZGlvQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnRVcmkoTGphdmEvbGFuZy9TdHJpbmc7SilMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1vdmVJdGVtKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0pJSSlaIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQVVESU9fSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfRElSRUNUT1JZIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiLz4KLQkJPGZpZWxkIG5hbWU9IlBMQVlMSVNUX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJQTEFZX09SREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJfSUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL01lZGlhU3RvcmUkQXVkaW8kUGxheWxpc3RzQ29sdW1ucyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFX0FEREVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFX01PRElGSUVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQU1FIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJEF1ZGlvJFJhZGlvIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTlRSWV9DT05URU5UX1RZUEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL01lZGlhU3RvcmUkRmlsZXMiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50VXJpKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnRVcmkoTGphdmEvbGFuZy9TdHJpbmc7SilMYW5kcm9pZC9uZXQvVXJpOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRGaWxlcyRGaWxlQ29sdW1ucyIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL01lZGlhU3RvcmUkTWVkaWFDb2x1bW5zIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9UWVBFX0FVRElPIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9UWVBFX0lNQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJQV9UWVBFX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX1RZUEVfUExBWUxJU1QiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX1RZUEVfVklERU8iLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iUEFSRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSVRMRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRJbWFnZXMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRJbWFnZXMkSW1hZ2VDb2x1bW5zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJE1lZGlhQ29sdW1ucyIvPgotCQk8ZmllbGQgbmFtZT0iQlVDS0VUX0RJU1BMQVlfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iQlVDS0VUX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFX1RBS0VOIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVNDUklQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iSVNfUFJJVkFURSIvPgotCQk8ZmllbGQgbmFtZT0iTEFUSVRVREUiLz4KLQkJPGZpZWxkIG5hbWU9IkxPTkdJVFVERSIvPgotCQk8ZmllbGQgbmFtZT0iTUlOSV9USFVNQl9NQUdJQyIvPgotCQk8ZmllbGQgbmFtZT0iT1JJRU5UQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlBJQ0FTQV9JRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRJbWFnZXMkTWVkaWEiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL01lZGlhU3RvcmUkSW1hZ2VzJEltYWdlQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpdG1hcChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9uZXQvVXJpOylMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudFVyaShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnRJbWFnZShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydEltYWdlKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9uZXQvVXJpO1tMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xhbmRyb2lkL25ldC9Vcmk7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnkoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGFuZHJvaWQvbmV0L1VyaTtbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIvPgotCQk8ZmllbGQgbmFtZT0iRVhURVJOQUxfQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSTkFMX0NPTlRFTlRfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJEltYWdlcyRUaHVtYm5haWxzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbFRodW1ibmFpbFJlcXVlc3QoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7SilWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbFRodW1ibmFpbFJlcXVlc3QoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7SkopViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50VXJpKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRodW1ibmFpbChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtKSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkkT3B0aW9uczspTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHVtYm5haWwoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7SkpJTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeSRPcHRpb25zOylMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xhbmRyb2lkL25ldC9Vcmk7W0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnlNaW5pVGh1bWJuYWlsKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0pJW0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVlcnlNaW5pVGh1bWJuYWlscyhMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9uZXQvVXJpO0lbTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIvPgotCQk8ZmllbGQgbmFtZT0iRVhURVJOQUxfQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkZVTExfU0NSRUVOX0tJTkQiLz4KLQkJPGZpZWxkIG5hbWU9IkhFSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iSU1BR0VfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSTkFMX0NPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUNST19LSU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5JX0tJTkQiLz4KLQkJPGZpZWxkIG5hbWU9IlRIVU1CX0RBVEEiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSURUSCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZSRNZWRpYUNvbHVtbnMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFX0FEREVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFX01PRElGSUVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNQTEFZX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkhFSUdIVCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNSU1FX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRJVExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSURUSCIgc2luY2U9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJFZpZGVvIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9uZXQvVXJpO1tMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TT1JUX09SREVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJFZpZGVvJE1lZGlhIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJFZpZGVvJFZpZGVvQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnRVcmkoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIvPgotCQk8ZmllbGQgbmFtZT0iRVhURVJOQUxfQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSTkFMX0NPTlRFTlRfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJFZpZGVvJFRodW1ibmFpbHMiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsVGh1bWJuYWlsUmVxdWVzdChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWxUaHVtYm5haWxSZXF1ZXN0KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0pKKVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudFVyaShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHVtYm5haWwoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7SklMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5JE9wdGlvbnM7KUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHVtYm5haWwoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7SkpJTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeSRPcHRpb25zOylMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7IiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iREFUQSIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TT1JUX09SREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRFUk5BTF9DT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iRlVMTF9TQ1JFRU5fS0lORCIvPgotCQk8ZmllbGQgbmFtZT0iSEVJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUk5BTF9DT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iS0lORCIvPgotCQk8ZmllbGQgbmFtZT0iTUlDUk9fS0lORCIvPgotCQk8ZmllbGQgbmFtZT0iTUlOSV9LSU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSURFT19JRCIvPgotCQk8ZmllbGQgbmFtZT0iV0lEVEgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL01lZGlhU3RvcmUkVmlkZW8kVmlkZW9Db2x1bW5zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlJE1lZGlhQ29sdW1ucyIvPgotCQk8ZmllbGQgbmFtZT0iQUxCVU0iLz4KLQkJPGZpZWxkIG5hbWU9IkFSVElTVCIvPgotCQk8ZmllbGQgbmFtZT0iQk9PS01BUksiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJCVUNLRVRfRElTUExBWV9OQU1FIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQlVDS0VUX0lEIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEVfVEFLRU4iLz4KLQkJPGZpZWxkIG5hbWU9IkRFU0NSSVBUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJEVVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iSVNfUFJJVkFURSIvPgotCQk8ZmllbGQgbmFtZT0iTEFOR1VBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkxBVElUVURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT05HSVRVREUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTklfVEhVTUJfTUFHSUMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU09MVVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlRBR1MiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL09wZW5hYmxlQ29sdW1ucyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNQTEFZX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlNJWkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1NlYXJjaFJlY2VudFN1Z2dlc3Rpb25zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFySGlzdG9yeSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNhdmVSZWNlbnRRdWVyeShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InRydW5jYXRlSGlzdG9yeShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlFVRVJJRVNfUFJPSkVDVElPTl8xTElORSIvPgotCQk8ZmllbGQgbmFtZT0iUVVFUklFU19QUk9KRUNUSU9OXzJMSU5FIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUVSSUVTX1BST0pFQ1RJT05fREFURV9JTkRFWCIvPgotCQk8ZmllbGQgbmFtZT0iUVVFUklFU19QUk9KRUNUSU9OX0RJU1BMQVkxX0lOREVYIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUVSSUVTX1BST0pFQ1RJT05fRElTUExBWTJfSU5ERVgiLz4KLQkJPGZpZWxkIG5hbWU9IlFVRVJJRVNfUFJPSkVDVElPTl9RVUVSWV9JTkRFWCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbkRyYXdPdmVybGF5cyhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVoiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FDQ0VTU0lCSUxJVFlfU0VUVElOR1MiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQUREX0FDQ09VTlQiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQUlSUExBTkVfTU9ERV9TRVRUSU5HUyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BUE5fU0VUVElOR1MiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BUFBMSUNBVElPTl9ERVRBSUxTX1NFVFRJTkdTIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FQUExJQ0FUSU9OX0RFVkVMT1BNRU5UX1NFVFRJTkdTIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FQUExJQ0FUSU9OX1NFVFRJTkdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQVBQX05PVElGSUNBVElPTl9TRVRUSU5HUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQkFUVEVSWV9TQVZFUl9TRVRUSU5HUyIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQkxVRVRPT1RIX1NFVFRJTkdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ0FQVElPTklOR19TRVRUSU5HUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ0FTVF9TRVRUSU5HUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ0hBTk5FTF9OT1RJRklDQVRJT05fU0VUVElOR1MiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RBVEFfUk9BTUlOR19TRVRUSU5HUyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9EQVRBX1VTQUdFX1NFVFRJTkdTIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9EQVRFX1NFVFRJTkdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fREVWSUNFX0lORk9fU0VUVElOR1MiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRElTUExBWV9TRVRUSU5HUyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RSRUFNX1NFVFRJTkdTIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9GSU5HRVJQUklOVF9FTlJPTEwiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0hBUkRfS0VZQk9BUkRfU0VUVElOR1MiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0hPTUVfU0VUVElOR1MiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0lHTk9SRV9CQUNLR1JPVU5EX0RBVEFfUkVTVFJJQ1RJT05TX1NFVFRJTkdTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9JR05PUkVfQkFUVEVSWV9PUFRJTUlaQVRJT05fU0VUVElOR1MiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0lOUFVUX01FVEhPRF9TRVRUSU5HUyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9JTlBVVF9NRVRIT0RfU1VCVFlQRV9TRVRUSU5HUyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fSU5URVJOQUxfU1RPUkFHRV9TRVRUSU5HUyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9MT0NBTEVfU0VUVElOR1MiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9MT0NBVElPTl9TT1VSQ0VfU0VUVElOR1MiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NQU5BR0VfQUxMX0FQUExJQ0FUSU9OU19TRVRUSU5HUyIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NQU5BR0VfQVBQTElDQVRJT05TX1NFVFRJTkdTIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX01BTkFHRV9ERUZBVUxUX0FQUFNfU0VUVElOR1MiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX01BTkFHRV9PVkVSTEFZX1BFUk1JU1NJT04iIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX01BTkFHRV9VTktOT1dOX0FQUF9TT1VSQ0VTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NQU5BR0VfV1JJVEVfU0VUVElOR1MiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX01FTU9SWV9DQVJEX1NFVFRJTkdTIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX05FVFdPUktfT1BFUkFUT1JfU0VUVElOR1MiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTkZDU0hBUklOR19TRVRUSU5HUyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTkZDX1BBWU1FTlRfU0VUVElOR1MiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX05GQ19TRVRUSU5HUyIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTklHSFRfRElTUExBWV9TRVRUSU5HUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTk9USUZJQ0FUSU9OX0xJU1RFTkVSX1NFVFRJTkdTIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9OT1RJRklDQVRJT05fUE9MSUNZX0FDQ0VTU19TRVRUSU5HUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUFJJTlRfU0VUVElOR1MiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BSSVZBQ1lfU0VUVElOR1MiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUVVJQ0tfTEFVTkNIX1NFVFRJTkdTIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1JFUVVFU1RfSUdOT1JFX0JBVFRFUllfT1BUSU1JWkFUSU9OUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUkVRVUVTVF9TRVRfQVVUT0ZJTExfU0VSVklDRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0VBUkNIX1NFVFRJTkdTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NFQ1VSSVRZX1NFVFRJTkdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0VUVElOR1MiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TSE9XX1JFR1VMQVRPUllfSU5GTyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU09VTkRfU0VUVElOR1MiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TVE9SQUdFX1ZPTFVNRV9BQ0NFU1NfU0VUVElOR1MiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NZTkNfU0VUVElOR1MiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVVNBR0VfQUNDRVNTX1NFVFRJTkdTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9VU0VSX0RJQ1RJT05BUllfU0VUVElOR1MiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVk9JQ0VfQ09OVFJPTF9BSVJQTEFORV9NT0RFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9WT0lDRV9DT05UUk9MX0JBVFRFUllfU0FWRVJfTU9ERSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVk9JQ0VfQ09OVFJPTF9ET19OT1RfRElTVFVSQl9NT0RFIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9WT0lDRV9JTlBVVF9TRVRUSU5HUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVlBOX1NFVFRJTkdTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9WUl9MSVNURU5FUl9TRVRUSU5HUyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fV0VCVklFV19TRVRUSU5HUyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fV0lGSV9JUF9TRVRUSU5HUyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9XSUZJX1NFVFRJTkdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fV0lSRUxFU1NfU0VUVElOR1MiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9aRU5fTU9ERV9QUklPUklUWV9TRVRUSU5HUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRIT1JJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FDQ09VTlRfVFlQRVMiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQUlSUExBTkVfTU9ERV9FTkFCTEVEIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FQUF9QQUNLQUdFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FVVEhPUklUSUVTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQkFUVEVSWV9TQVZFUl9NT0RFX0VOQUJMRUQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0hBTk5FTF9JRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9ET19OT1RfRElTVFVSQl9NT0RFX0VOQUJMRUQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfRE9fTk9UX0RJU1RVUkJfTU9ERV9NSU5VVEVTIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0lOUFVUX01FVEhPRF9JRCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TVUJfSUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iSU5URU5UX0NBVEVHT1JZX1VTQUdFX0FDQ0VTU19DT05GSUciIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfVVNBR0VfQUNDRVNTX1JFQVNPTiIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncyRHbG9iYWwiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MkTmFtZVZhbHVlVGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbG9hdChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZzspRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsb2F0KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nO0YpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZztJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nOylKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZyhMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZztKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmcoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVyaUZvcihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRGbG9hdChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZztGKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRJbnQoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGphdmEvbGFuZy9TdHJpbmc7SSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0TG9uZyhMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZztKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRTdHJpbmcoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPGZpZWxkIG5hbWU9IkFEQl9FTkFCTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBSVJQTEFORV9NT0RFX09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJBSVJQTEFORV9NT0RFX1JBRElPUyIvPgotCQk8ZmllbGQgbmFtZT0iQUxXQVlTX0ZJTklTSF9BQ1RJVklUSUVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTklNQVRPUl9EVVJBVElPTl9TQ0FMRSIvPgotCQk8ZmllbGQgbmFtZT0iQVVUT19USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRPX1RJTUVfWk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iQkxVRVRPT1RIX09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT09UX0NPVU5UIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRBQ1RfTUVUQURBVEFfU1lOQ19FTkFCTEVEIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBX1JPQU1JTkciLz4KLQkJPGZpZWxkIG5hbWU9IkRFQlVHX0FQUCIvPgotCQk8ZmllbGQgbmFtZT0iREVWRUxPUE1FTlRfU0VUVElOR1NfRU5BQkxFRCIvPgotCQk8ZmllbGQgbmFtZT0iREVWSUNFX05BTUUiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iREVWSUNFX1BST1ZJU0lPTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJIVFRQX1BST1hZIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNUQUxMX05PTl9NQVJLRVRfQVBQUyIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfUklOR0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLX1BSRUZFUkVOQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlJBRElPX0JMVUVUT09USCIvPgotCQk8ZmllbGQgbmFtZT0iUkFESU9fQ0VMTCIvPgotCQk8ZmllbGQgbmFtZT0iUkFESU9fTkZDIi8+Ci0JCTxmaWVsZCBuYW1lPSJSQURJT19XSUZJIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX1BST0NFU1NFUyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVlfT05fV0hJTEVfUExVR0dFRF9JTiIvPgotCQk8ZmllbGQgbmFtZT0iU1lTX1BST1BfU0VUVElOR19WRVJTSU9OIiByZW1vdmVkPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNJVElPTl9BTklNQVRJT05fU0NBTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQl9NQVNTX1NUT1JBR0VfRU5BQkxFRCIvPgotCQk8ZmllbGQgbmFtZT0iVVNFX0dPT0dMRV9NQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJXQUlUX0ZPUl9ERUJVR0dFUiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9ERVZJQ0VfT1dORVJfQ09ORklHU19MT0NLRE9XTiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX01BWF9ESENQX1JFVFJZX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX01PQklMRV9EQVRBX1RSQU5TSVRJT05fV0FLRUxPQ0tfVElNRU9VVF9NUyIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9ORVRXT1JLU19BVkFJTEFCTEVfTk9USUZJQ0FUSU9OX09OIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9ORVRXT1JLU19BVkFJTEFCTEVfUkVQRUFUX0RFTEFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX05VTV9PUEVOX05FVFdPUktTX0tFUFQiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfT04iLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfU0xFRVBfUE9MSUNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1NMRUVQX1BPTElDWV9ERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1NMRUVQX1BPTElDWV9ORVZFUiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9TTEVFUF9QT0xJQ1lfTkVWRVJfV0hJTEVfUExVR0dFRCIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9XQVRDSERPR19PTiIvPgotCQk8ZmllbGQgbmFtZT0iV0lORE9XX0FOSU1BVElPTl9TQ0FMRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MkTmFtZVZhbHVlVGFibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXJpRm9yKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0U3RyaW5nKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlZBTFVFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncyRTZWN1cmUiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncyROYW1lVmFsdWVUYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsb2F0KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nOylGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxvYXQoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGphdmEvbGFuZy9TdHJpbmc7RilGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmcoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGphdmEvbGFuZy9TdHJpbmc7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nO0opSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmluZyhMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXJpRm9yKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG9jYXRpb25Qcm92aWRlckVuYWJsZWQoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEZsb2F0KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nO0YpWiIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEludChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZztJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRMb25nKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nO0opWiIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFN0cmluZyhMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvY2F0aW9uUHJvdmlkZXJFbmFibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nO1opViIgc2luY2U9IjgiIGRlcHJlY2F0ZWQ9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0NFU1NJQklMSVRZX0RJU1BMQVlfSU5WRVJTSU9OX0VOQUJMRUQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQUNDRVNTSUJJTElUWV9FTkFCTEVEIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iQUNDRVNTSUJJTElUWV9TUEVBS19QQVNTV09SRCIgc2luY2U9IjE1IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQURCX0VOQUJMRUQiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTExPV0VEX0dFT0xPQ0FUSU9OX09SSUdJTlMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTExPV19NT0NLX0xPQ0FUSU9OIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQU5EUk9JRF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQkFDS0dST1VORF9EQVRBIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQkxVRVRPT1RIX09OIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfUk9BTUlORyIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfSU5QVVRfTUVUSE9EIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVZFTE9QTUVOVF9TRVRUSU5HU19FTkFCTEVEIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERVZJQ0VfUFJPVklTSU9ORUQiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkFCTEVEX0FDQ0VTU0lCSUxJVFlfU0VSVklDRVMiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkFCTEVEX0lOUFVUX01FVEhPRFMiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfUFJPWFkiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlBVVF9NRVRIT0RfU0VMRUNUT1JfVklTSUJJTElUWSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNUQUxMX05PTl9NQVJLRVRfQVBQUyIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FUSU9OX01PREUiIHNpbmNlPSIxOSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FUSU9OX01PREVfQkFUVEVSWV9TQVZJTkciIHNpbmNlPSIxOSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FUSU9OX01PREVfSElHSF9BQ0NVUkFDWSIgc2luY2U9IjE5IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQVRJT05fTU9ERV9PRkYiIHNpbmNlPSIxOSIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FUSU9OX01PREVfU0VOU09SU19PTkxZIiBzaW5jZT0iMTkiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NBVElPTl9QUk9WSURFUlNfQUxMT1dFRCIgZGVwcmVjYXRlZD0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0tfUEFUVEVSTl9FTkFCTEVEIiBzaW5jZT0iOCIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0tfUEFUVEVSTl9UQUNUSUxFX0ZFRURCQUNLX0VOQUJMRUQiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iTE9DS19QQVRURVJOX1ZJU0lCTEUiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iTE9HR0lOR19JRCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVFdPUktfUFJFRkVSRU5DRSIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IlBBUkVOVEFMX0NPTlRST0xfRU5BQkxFRCIvPgotCQk8ZmllbGQgbmFtZT0iUEFSRU5UQUxfQ09OVFJPTF9MQVNUX1VQREFURSIvPgotCQk8ZmllbGQgbmFtZT0iUEFSRU5UQUxfQ09OVFJPTF9SRURJUkVDVF9VUkwiLz4KLQkJPGZpZWxkIG5hbWU9IlJUVF9DQUxMSU5HX01PREUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU0VMRUNURURfSU5QVVRfTUVUSE9EX1NVQlRZUEUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iU0VUVElOR1NfQ0xBU1NOQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJTS0lQX0ZJUlNUX1VTRV9ISU5UUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWVNfUFJPUF9TRVRUSU5HX1ZFUlNJT04iIHJlbW92ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT1VDSF9FWFBMT1JBVElPTl9FTkFCTEVEIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRUU19ERUZBVUxUX0NPVU5UUlkiIHNpbmNlPSI0IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVFRTX0RFRkFVTFRfTEFORyIgc2luY2U9IjQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUVFNfREVGQVVMVF9QSVRDSCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRUU19ERUZBVUxUX1JBVEUiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUVFNfREVGQVVMVF9TWU5USCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRUU19ERUZBVUxUX1ZBUklBTlQiIHNpbmNlPSI0IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVFRTX0VOQUJMRURfUExVR0lOUyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRUU19VU0VfREVGQVVMVFMiIHNpbmNlPSI0IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVVNCX01BU1NfU1RPUkFHRV9FTkFCTEVEIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iVVNFX0dPT0dMRV9NQUlMIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9NQVhfREhDUF9SRVRSWV9DT1VOVCIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfTU9CSUxFX0RBVEFfVFJBTlNJVElPTl9XQUtFTE9DS19USU1FT1VUX01TIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9ORVRXT1JLU19BVkFJTEFCTEVfTk9USUZJQ0FUSU9OX09OIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9ORVRXT1JLU19BVkFJTEFCTEVfUkVQRUFUX0RFTEFZIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9OVU1fT1BFTl9ORVRXT1JLU19LRVBUIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9PTiIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfV0FUQ0hET0dfQUNDRVBUQUJMRV9QQUNLRVRfTE9TU19QRVJDRU5UQUdFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9XQVRDSERPR19BUF9DT1VOVCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfV0FUQ0hET0dfQkFDS0dST1VORF9DSEVDS19ERUxBWV9NUyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfV0FUQ0hET0dfQkFDS0dST1VORF9DSEVDS19FTkFCTEVEIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9XQVRDSERPR19CQUNLR1JPVU5EX0NIRUNLX1RJTUVPVVRfTVMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1dBVENIRE9HX0lOSVRJQUxfSUdOT1JFRF9QSU5HX0NPVU5UIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9XQVRDSERPR19NQVhfQVBfQ0hFQ0tTIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9XQVRDSERPR19PTiIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfV0FUQ0hET0dfUElOR19DT1VOVCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfV0FUQ0hET0dfUElOR19ERUxBWV9NUyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfV0FUQ0hET0dfUElOR19USU1FT1VUX01TIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9XQVRDSERPR19XQVRDSF9MSVNUIiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MkU2V0dGluZ05vdEZvdW5kRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdXRpbC9BbmRyb2lkRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncyRTeXN0ZW0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncyROYW1lVmFsdWVUYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbldyaXRlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uZmlndXJhdGlvbihMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMYW5kcm9pZC9jb250ZW50L3Jlcy9Db25maWd1cmF0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxvYXQoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGphdmEvbGFuZy9TdHJpbmc7KUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbG9hdChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZztGKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnQoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnQoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGphdmEvbGFuZy9TdHJpbmc7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZyhMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZzspSiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nO0opSiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG93R1RhbGtTZXJ2aWNlU3RhdHVzKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyOylaIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmluZyhMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXJpRm9yKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dENvbmZpZ3VyYXRpb24oTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEZsb2F0KExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nO0YpWiIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEludChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjtMamF2YS9sYW5nL1N0cmluZztJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRMb25nKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO0xqYXZhL2xhbmcvU3RyaW5nO0opWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRTdHJpbmcoTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG93R1RhbGtTZXJ2aWNlU3RhdHVzKExhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyO1opViIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VMRVJPTUVURVJfUk9UQVRJT04iIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBREJfRU5BQkxFRCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFJUlBMQU5FX01PREVfT04iIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBSVJQTEFORV9NT0RFX1JBRElPUyIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkFMQVJNX0FMRVJUIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQUxXQVlTX0ZJTklTSF9BQ1RJVklUSUVTIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iQU5EUk9JRF9JRCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFOSU1BVE9SX0RVUkFUSU9OX1NDQUxFIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUFBFTkRfRk9SX0xBU1RfQVVESUJMRSIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVE9fVElNRSIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkFVVE9fVElNRV9aT05FIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCTFVFVE9PVEhfRElTQ09WRVJBQklMSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJCTFVFVE9PVEhfRElTQ09WRVJBQklMSVRZX1RJTUVPVVQiLz4KLQkJPGZpZWxkIG5hbWU9IkJMVUVUT09USF9PTiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBX1JPQU1JTkciIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFX0ZPUk1BVCIvPgotCQk8ZmllbGQgbmFtZT0iREVCVUdfQVBQIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9BTEFSTV9BTEVSVF9VUkkiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX05PVElGSUNBVElPTl9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfUklOR1RPTkVfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVZJQ0VfUFJPVklTSU9ORUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESU1fU0NSRUVOIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iRFRNRl9UT05FX1RZUEVfV0hFTl9ESUFMSU5HIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkRUTUZfVE9ORV9XSEVOX0RJQUxJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkVORF9CVVRUT05fQkVIQVZJT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkZPTlRfU0NBTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkhBUFRJQ19GRUVEQkFDS19FTkFCTEVEIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9QUk9YWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTExfTk9OX01BUktFVF9BUFBTIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQVRJT05fUFJPVklERVJTX0FMTE9XRUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NLX1BBVFRFUk5fRU5BQkxFRCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0tfUEFUVEVSTl9UQUNUSUxFX0ZFRURCQUNLX0VOQUJMRUQiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTE9DS19QQVRURVJOX1ZJU0lCTEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0dHSU5HX0lEIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9SSU5HRVIiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX1JJTkdFUl9TVFJFQU1TX0FGRkVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNVVRFX1NUUkVBTVNfQUZGRUNURUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVFdPUktfUFJFRkVSRU5DRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FWFRfQUxBUk1fRk9STUFUVEVEIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTk9USUZJQ0FUSU9OX1NPVU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJFTlRBTF9DT05UUk9MX0VOQUJMRUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJFTlRBTF9DT05UUk9MX0xBU1RfVVBEQVRFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUEFSRU5UQUxfQ09OVFJPTF9SRURJUkVDVF9VUkwiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSQURJT19CTFVFVE9PVEgiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSQURJT19DRUxMIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iUkFESU9fTkZDIiBzaW5jZT0iMTQiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSQURJT19XSUZJIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iUklOR1RPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTl9CUklHSFRORVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5fQlJJR0hUTkVTU19NT0RFIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOX0JSSUdIVE5FU1NfTU9ERV9BVVRPTUFUSUMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JFRU5fQlJJR0hUTkVTU19NT0RFX01BTlVBTCIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTl9PRkZfVElNRU9VVCIvPgotCQk8ZmllbGQgbmFtZT0iU0VUVElOR1NfQ0xBU1NOQU1FIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU0VUVVBfV0laQVJEX0hBU19SVU4iLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1dfR1RBTEtfU0VSVklDRV9TVEFUVVMiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1dfUFJPQ0VTU0VTIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iU0hPV19XRUJfU1VHR0VTVElPTlMiIHNpbmNlPSI0IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU09VTkRfRUZGRUNUU19FTkFCTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFZX09OX1dISUxFX1BMVUdHRURfSU4iIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWVNfUFJPUF9TRVRUSU5HX1ZFUlNJT04iIHJlbW92ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJURVhUX0FVVE9fQ0FQUyIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9BVVRPX1BVTkNUVUFURSIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9BVVRPX1JFUExBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFRfU0hPV19QQVNTV09SRCIvPgotCQk8ZmllbGQgbmFtZT0iVElNRV8xMl8yNCIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNJVElPTl9BTklNQVRJT05fU0NBTEUiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVU0JfTUFTU19TVE9SQUdFX0VOQUJMRUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VSX1JPVEFUSU9OIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlVTRV9HT09HTEVfTUFJTCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlZJQlJBVEVfT04iLz4KLQkJPGZpZWxkIG5hbWU9IlZJQlJBVEVfV0hFTl9SSU5HSU5HIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlZPTFVNRV9BTEFSTSIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlZPTFVNRV9CTFVFVE9PVEhfU0NPIiBzaW5jZT0iOCIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlZPTFVNRV9NVVNJQyIgcmVtb3ZlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlZPTFVNRV9OT1RJRklDQVRJT04iIHNpbmNlPSIzIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVk9MVU1FX1JJTkciIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJWT0xVTUVfU0VUVElOR1MiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJWT0xVTUVfU1lTVEVNIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVk9MVU1FX1ZPSUNFIiByZW1vdmVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iV0FJVF9GT1JfREVCVUdHRVIiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXQUxMUEFQRVJfQUNUSVZJVFkiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX01BWF9ESENQX1JFVFJZX0NPVU5UIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfTU9CSUxFX0RBVEFfVFJBTlNJVElPTl9XQUtFTE9DS19USU1FT1VUX01TIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfTkVUV09SS1NfQVZBSUxBQkxFX05PVElGSUNBVElPTl9PTiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfTkVUV09SS1NfQVZBSUxBQkxFX1JFUEVBVF9ERUxBWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfTlVNX09QRU5fTkVUV09SS1NfS0VQVCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfT04iIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1NMRUVQX1BPTElDWSIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1NMRUVQX1BPTElDWV9ERUZBVUxUIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfU0xFRVBfUE9MSUNZX05FVkVSIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfU0xFRVBfUE9MSUNZX05FVkVSX1dISUxFX1BMVUdHRUQiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9TVEFUSUNfRE5TMSIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfU1RBVElDX0ROUzIiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1NUQVRJQ19HQVRFV0FZIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9TVEFUSUNfSVAiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1NUQVRJQ19ORVRNQVNLIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9VU0VfU1RBVElDX0lQIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9XQVRDSERPR19BQ0NFUFRBQkxFX1BBQ0tFVF9MT1NTX1BFUkNFTlRBR0UiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1dBVENIRE9HX0FQX0NPVU5UIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9XQVRDSERPR19CQUNLR1JPVU5EX0NIRUNLX0RFTEFZX01TIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9XQVRDSERPR19CQUNLR1JPVU5EX0NIRUNLX0VOQUJMRUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1dBVENIRE9HX0JBQ0tHUk9VTkRfQ0hFQ0tfVElNRU9VVF9NUyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldJRklfV0FUQ0hET0dfSU5JVElBTF9JR05PUkVEX1BJTkdfQ09VTlQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1dBVENIRE9HX01BWF9BUF9DSEVDS1MiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSUZJX1dBVENIRE9HX09OIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9XQVRDSERPR19QSU5HX0NPVU5UIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9XQVRDSERPR19QSU5HX0RFTEFZX01TIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iV0lGSV9XQVRDSERPR19QSU5HX1RJTUVPVVRfTVMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSU5ET1dfQU5JTUFUSU9OX1NDQUxFIiBkZXByZWNhdGVkPSIxNyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3NTbGljZXNDb250cmFjdCIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSE9SSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVNFX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FJUlBMQU5FX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9CQVRURVJZX1NBVkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQkxVRVRPT1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTE9DQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9XSUZJIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVRIX1NFVFRJTkdfQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVRIX1NFVFRJTkdfSU5URU5UIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9TeW5jU3RhdGVDb250cmFjdCIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9TeW5jU3RhdGVDb250cmFjdCRDb2x1bW5zIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8ZmllbGQgbmFtZT0iQUNDT1VOVF9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0NPVU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1N5bmNTdGF0ZUNvbnRyYWN0JENvbnN0YW50cyIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvU3luY1N0YXRlQ29udHJhY3QkQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9ESVJFQ1RPUlkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1N5bmNTdGF0ZUNvbnRyYWN0JEhlbHBlcnMiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlckNsaWVudDtMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7KVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2l0aFVyaShMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlckNsaWVudDtMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL2FjY291bnRzL0FjY291bnQ7KUxhbmRyb2lkL3V0aWwvUGFpcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnQoTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJDbGllbnQ7TGFuZHJvaWQvbmV0L1VyaTtMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O1tCKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3U2V0T3BlcmF0aW9uKExhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvYWNjb3VudHMvQWNjb3VudDtbQilMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlck9wZXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdVcGRhdGVPcGVyYXRpb24oTGFuZHJvaWQvbmV0L1VyaTtbQilMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlck9wZXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJDbGllbnQ7TGFuZHJvaWQvbmV0L1VyaTtMYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50O1tCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJDbGllbnQ7TGFuZHJvaWQvbmV0L1VyaTtbQilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9UZWxlcGhvbnkiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRCYXNlTW1zQ29sdW1ucyIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0NMQVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0xPQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iREFURSIvPgotCQk8ZmllbGQgbmFtZT0iREFURV9TRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUxJVkVSWV9SRVBPUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTElWRVJZX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYUElSWSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DS0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVNTQUdFX0JPWCIvPgotCQk8ZmllbGQgbmFtZT0iTUVTU0FHRV9CT1hfQUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVNTQUdFX0JPWF9EUkFGVFMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FU1NBR0VfQk9YX0ZBSUxFRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVNTQUdFX0JPWF9JTkJPWCIvPgotCQk8ZmllbGQgbmFtZT0iTUVTU0FHRV9CT1hfT1VUQk9YIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVNTQUdFX0JPWF9TRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVNTQUdFX0NMQVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVNTQUdFX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVNTQUdFX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FU1NBR0VfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iTU1TX1ZFUlNJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlBSSU9SSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFEIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFEX1JFUE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iUkVBRF9TVEFUVVMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUE9SVF9BTExPV0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNQT05TRV9TVEFUVVMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1BPTlNFX1RFWFQiLz4KLQkJPGZpZWxkIG5hbWU9IlJFVFJJRVZFX1NUQVRVUyIvPgotCQk8ZmllbGQgbmFtZT0iUkVUUklFVkVfVEVYVCIvPgotCQk8ZmllbGQgbmFtZT0iUkVUUklFVkVfVEVYVF9DSEFSU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVMiLz4KLQkJPGZpZWxkIG5hbWU9IlNVQkpFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IlNVQkpFQ1RfQ0hBUlNFVCIvPgotCQk8ZmllbGQgbmFtZT0iU1VCU0NSSVBUSU9OX0lEIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFRfT05MWSIvPgotCQk8ZmllbGQgbmFtZT0iVEhSRUFEX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFOU0FDVElPTl9JRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVGVsZXBob255JENhbm9uaWNhbEFkZHJlc3Nlc0NvbHVtbnMiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8ZmllbGQgbmFtZT0iQUREUkVTUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVGVsZXBob255JENhcnJpZXJJZCIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXJpRm9yU3Vic2NyaXB0aW9uSWQoSSlMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8ZmllbGQgbmFtZT0iQ0FSUklFUl9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FSUklFUl9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVGVsZXBob255JENhcnJpZXJzIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFQTiIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJCRUFSRVIiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVJSSUVSX0VOQUJMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVVJSRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1DQyIvPgotCQk8ZmllbGQgbmFtZT0iTU1TQyIvPgotCQk8ZmllbGQgbmFtZT0iTU1TUE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iTU1TUFJPWFkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1OQyIvPgotCQk8ZmllbGQgbmFtZT0iTVZOT19NQVRDSF9EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJNVk5PX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVFdPUktfVFlQRV9CSVRNQVNLIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VTUVSSUMiLz4KLQkJPGZpZWxkIG5hbWU9IlBBU1NXT1JEIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT1JUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UT0NPTCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPWFkiLz4KLQkJPGZpZWxkIG5hbWU9IlJPQU1JTkdfUFJPVE9DT0wiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZFUiIvPgotCQk8ZmllbGQgbmFtZT0iU1VCU0NSSVBUSU9OX0lEIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlVTRVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRNbXMiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9UZWxlcGhvbnkkQmFzZU1tc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUE9SVF9SRVFVRVNUX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iUkVQT1JUX1NUQVRVU19VUkkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRNbXMkQWRkciIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBRERSRVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFSU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UQUNUX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNU0dfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRNbXMkRHJhZnQiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9UZWxlcGhvbnkkQmFzZU1tc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRNbXMkSW5ib3giIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9UZWxlcGhvbnkkQmFzZU1tc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRNbXMkSW50ZW50cyIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9DSEFOR0VEX0FDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iREVMRVRFRF9DT05URU5UUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVGVsZXBob255JE1tcyRPdXRib3giIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9UZWxlcGhvbnkkQmFzZU1tc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRNbXMkUGFydCIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFSU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0RJU1BPU0lUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0xPQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNUX1NUQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUxFTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iTVNHX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVEiLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFQiLz4KLQkJPGZpZWxkIG5hbWU9Il9EQVRBIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9UZWxlcGhvbnkkTW1zJFJhdGUiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5UX1RJTUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRNbXMkU2VudCIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRCYXNlTW1zQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVGVsZXBob255JE1tc1NtcyIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0NPTlZFUlNBVElPTlNfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0RSQUZUX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9GSUxURVJfQllQSE9ORV9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfTE9DS0VEX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VTkRFTElWRVJFRF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJfVFlQRV9HRU5FUklDIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJfVFlQRV9HRU5FUklDX1BFUk1BTkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVJSX1RZUEVfTU1TX1BST1RPX1BFUk1BTkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVJSX1RZUEVfTU1TX1BST1RPX1RSQU5TSUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVJSX1RZUEVfU01TX1BST1RPX1BFUk1BTkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVJSX1RZUEVfU01TX1BST1RPX1RSQU5TSUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVJSX1RZUEVfVFJBTlNQT1JUX0ZBSUxVUkUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19QUk9UTyIvPgotCQk8ZmllbGQgbmFtZT0iTk9fRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQVJDSF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IlNNU19QUk9UTyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9ESVNDUklNSU5BVE9SX0NPTFVNTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVGVsZXBob255JE1tc1NtcyRQZW5kaW5nTWVzc2FnZXMiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkRVRV9USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9DT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVNUX1RSWSIvPgotCQk8ZmllbGQgbmFtZT0iTVNHX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNU0dfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVE9fVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iUkVUUllfSU5ERVgiLz4KLQkJPGZpZWxkIG5hbWU9IlNVQlNDUklQVElPTl9JRCIgc2luY2U9IjIyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9UZWxlcGhvbnkkU2VydmljZVN0YXRlVGFibGUiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmlGb3JTdWJzY3JpcHRpb25JZChJKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXJpRm9yU3Vic2NyaXB0aW9uSWRBbmRGaWVsZChJTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRIT1JJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU19NQU5VQUxfTkVUV09SS19TRUxFQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlZPSUNFX09QRVJBVE9SX05VTUVSSUMiLz4KLQkJPGZpZWxkIG5hbWU9IlZPSUNFX1JFR19TVEFURSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVGVsZXBob255JFNtcyIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVGVsZXBob255JFRleHRCYXNlZFNtc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0U21zUGFja2FnZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVGVsZXBob255JFNtcyRDb252ZXJzYXRpb25zIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9UZWxlcGhvbnkkVGV4dEJhc2VkU21zQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU09SVF9PUkRFUiIvPgotCQk8ZmllbGQgbmFtZT0iTUVTU0FHRV9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iU05JUFBFVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVGVsZXBob255JFNtcyREcmFmdCIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVGVsZXBob255JFRleHRCYXNlZFNtc0NvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NPUlRfT1JERVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRTbXMkSW5ib3giIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRUZXh0QmFzZWRTbXNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TT1JUX09SREVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9UZWxlcGhvbnkkU21zJEludGVudHMiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXNzYWdlc0Zyb21JbnRlbnQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVtMYW5kcm9pZC90ZWxlcGhvbnkvU21zTWVzc2FnZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DSEFOR0VfREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RFRkFVTFRfU01TX1BBQ0tBR0VfQ0hBTkdFRCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRVhURVJOQUxfUFJPVklERVJfQ0hBTkdFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfU01TX1JFQ0VJVkVEX0FDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfSVNfREVGQVVMVF9TTVNfQVBQIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BBQ0tBR0VfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVUxUX1NNU19EVVBMSUNBVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfU01TX0dFTkVSSUNfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9TTVNfSEFORExFRCIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVUxUX1NNU19PVVRfT0ZfTUVNT1JZIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfU01TX1VOU1VQUE9SVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNSRVRfQ09ERV9BQ1RJT04iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iU0lNX0ZVTExfQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJTTVNfQ0JfUkVDRUlWRURfQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJTTVNfREVMSVZFUl9BQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNNU19FTUVSR0VOQ1lfQ0JfUkVDRUlWRURfQUNUSU9OIiByZW1vdmVkPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iU01TX1JFQ0VJVkVEX0FDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iU01TX1JFSkVDVEVEX0FDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iU01TX1NFUlZJQ0VfQ0FURUdPUllfUFJPR1JBTV9EQVRBX1JFQ0VJVkVEX0FDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iV0FQX1BVU0hfREVMSVZFUl9BQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IldBUF9QVVNIX1JFQ0VJVkVEX0FDVElPTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVGVsZXBob255JFNtcyRPdXRib3giIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRUZXh0QmFzZWRTbXNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TT1JUX09SREVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9UZWxlcGhvbnkkU21zJFNlbnQiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRUZXh0QmFzZWRTbXNDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TT1JUX09SREVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9UZWxlcGhvbnkkVGV4dEJhc2VkU21zQ29sdW1ucyIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQUREUkVTUyIvPgotCQk8ZmllbGQgbmFtZT0iQk9EWSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFX1NFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0NPREUiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0tFRCIvPgotCQk8ZmllbGQgbmFtZT0iTUVTU0FHRV9UWVBFX0FMTCIvPgotCQk8ZmllbGQgbmFtZT0iTUVTU0FHRV9UWVBFX0RSQUZUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVNTQUdFX1RZUEVfRkFJTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVNTQUdFX1RZUEVfSU5CT1giLz4KLQkJPGZpZWxkIG5hbWU9Ik1FU1NBR0VfVFlQRV9PVVRCT1giLz4KLQkJPGZpZWxkIG5hbWU9Ik1FU1NBR0VfVFlQRV9RVUVVRUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FU1NBR0VfVFlQRV9TRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJQRVJTT04iLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RPQ09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFEIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVBMWV9QQVRIX1BSRVNFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFRU4iLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfQ0VOVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVMiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19DT01QTEVURSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0ZBSUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19QRU5ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUJKRUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUJTQ1JJUFRJT05fSUQiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iVEhSRUFEX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9UZWxlcGhvbnkkVGhyZWFkcyIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRUaHJlYWRzQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yQ3JlYXRlVGhyZWFkSWQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nOylKIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPckNyZWF0ZVRocmVhZElkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS91dGlsL1NldDspSiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJCUk9BRENBU1RfVEhSRUFEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01NT05fVEhSRUFEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iT0JTT0xFVEVfVEhSRUFEU19VUkkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL1RlbGVwaG9ueSRUaHJlYWRzQ29sdW1ucyIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkNISVZFRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iSEFTX0FUVEFDSE1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FU1NBR0VfQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQUQiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQ0lQSUVOVF9JRFMiLz4KLQkJPGZpZWxkIG5hbWU9IlNOSVBQRVQiLz4KLQkJPGZpZWxkIG5hbWU9IlNOSVBQRVRfQ0hBUlNFVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVXNlckRpY3Rpb25hcnkiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSE9SSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVXNlckRpY3Rpb25hcnkkV29yZHMiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3Byb3ZpZGVyL0Jhc2VDb2x1bW5zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkV29yZChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7SUkpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRXb3JkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Mb2NhbGU7KVYiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQVBQX0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0lURU1fVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TT1JUX09SREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJGUkVRVUVOQ1kiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FMRSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQUxFX1RZUEVfQUxMIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQUxFX1RZUEVfQ1VSUkVOVCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUQ1VUIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IldPUkQiLz4KLQkJPGZpZWxkIG5hbWU9Il9JRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvVm9pY2VtYWlsQ29udHJhY3QiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9GRVRDSF9WT0lDRU1BSUwiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9ORVdfVk9JQ0VNQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU1lOQ19WT0lDRU1BSUwiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSE9SSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QSE9ORV9BQ0NPVU5UX0hBTkRMRSIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TRUxGX0NIQU5HRSIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQU1fS0VZX1NPVVJDRV9QQUNLQUdFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Wb2ljZW1haWxDb250cmFjdCRTdGF0dXMiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9CYXNlQ29sdW1ucyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkU291cmNlVXJpKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHVVJBVElPTl9TVEFURSIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHVVJBVElPTl9TVEFURV9DQU5fQkVfQ09ORklHVVJFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ09ORklHVVJBVElPTl9TVEFURV9DT05GSUdVUklORyIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05GSUdVUkFUSU9OX1NUQVRFX0RJU0FCTEVEIiBzaW5jZT0iMjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkZJR1VSQVRJT05fU1RBVEVfRkFJTEVEIiBzaW5jZT0iMjUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkZJR1VSQVRJT05fU1RBVEVfTk9UX0NPTkZJR1VSRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkZJR1VSQVRJT05fU1RBVEVfT0siLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBX0NIQU5ORUxfU1RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfQ0hBTk5FTF9TVEFURV9CQURfQ09ORklHVVJBVElPTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBX0NIQU5ORUxfU1RBVEVfQ09NTVVOSUNBVElPTl9FUlJPUiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBX0NIQU5ORUxfU1RBVEVfTk9fQ09OTkVDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iREFUQV9DSEFOTkVMX1NUQVRFX05PX0NPTk5FQ1RJT05fQ0VMTFVMQVJfUkVRVUlSRUQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iREFUQV9DSEFOTkVMX1NUQVRFX09LIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBX0NIQU5ORUxfU1RBVEVfU0VSVkVSX0NPTk5FQ1RJT05fRVJST1IiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iREFUQV9DSEFOTkVMX1NUQVRFX1NFUlZFUl9FUlJPUiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVJfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iSVRFTV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1RJRklDQVRJT05fQ0hBTk5FTF9TVEFURSIvPgotCQk8ZmllbGQgbmFtZT0iTk9USUZJQ0FUSU9OX0NIQU5ORUxfU1RBVEVfTUVTU0FHRV9XQUlUSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1RJRklDQVRJT05fQ0hBTk5FTF9TVEFURV9OT19DT05ORUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1RJRklDQVRJT05fQ0hBTk5FTF9TVEFURV9PSyIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVfQUNDT1VOVF9DT01QT05FTlRfTkFNRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORV9BQ0NPVU5UX0lEIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlFVT1RBX09DQ1VQSUVEIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlFVT1RBX1RPVEFMIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlFVT1RBX1VOQVZBSUxBQkxFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFVFRJTkdTX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iU09VUkNFX1BBQ0tBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9UWVBFIiBzaW5jZT0iMjUiLz4KLQkJPGZpZWxkIG5hbWU9IlZPSUNFTUFJTF9BQ0NFU1NfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9Wb2ljZW1haWxDb250cmFjdCRWb2ljZW1haWxzIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvcHJvdmlkZXIvQmFzZUNvbHVtbnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9wcm92aWRlci9PcGVuYWJsZUNvbHVtbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZFNvdXJjZVVyaShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPGZpZWxkIG5hbWU9IkFSQ0hJVkVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkJBQ0tFRF9VUCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iREFURSIvPgotCQk8ZmllbGQgbmFtZT0iREVMRVRFRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJUWSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJUWV9SRVRBSU4iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRElSX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRVUkFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQVNfQ09OVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iSVNfT01UUF9WT0lDRU1BSUwiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iSVNfUkVBRCIvPgotCQk8ZmllbGQgbmFtZT0iSVRFTV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVNUX01PRElGSUVEIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTUVfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iTkVXIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVfQUNDT1VOVF9DT01QT05FTlRfTkFNRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORV9BQ0NPVU5UX0lEIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1RPUkVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT1VSQ0VfUEFDS0FHRSIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNDUklQVElPTiIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvQmFzZU9iaiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGU7SSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5MURSYW5nZUZyb20oSUlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkxRFJhbmdlRnJvbShJSUxqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5MURSYW5nZUZyb20oSUlbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weTFEUmFuZ2VGcm9tKElJW0YpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkxRFJhbmdlRnJvbShJSVtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5MURSYW5nZUZyb20oSUlbUylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKElJTGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChJSVtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQoSUlbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKElJW0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChJSVtTKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5MURSYW5nZVRvKElJTGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkxRFJhbmdlVG8oSUlbQilWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5MURSYW5nZVRvKElJW0YpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weTFEUmFuZ2VUbyhJSVtJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkxRFJhbmdlVG8oSUlbUylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5MURSYW5nZVRvVW5jaGVja2VkKElJTGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkxRFJhbmdlVG9VbmNoZWNrZWQoSUlbQilWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5MURSYW5nZVRvVW5jaGVja2VkKElJW0YpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weTFEUmFuZ2VUb1VuY2hlY2tlZChJSVtJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkxRFJhbmdlVG9VbmNoZWNrZWQoSUlbUylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5MkRSYW5nZUZyb20oSUlJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lJKVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkyRFJhbmdlRnJvbShJSUlJTGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkyRFJhbmdlRnJvbShJSUlJW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkyRFJhbmdlRnJvbShJSUlJW0YpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkyRFJhbmdlRnJvbShJSUlJW0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkyRFJhbmdlRnJvbShJSUlJW1MpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkyRFJhbmdlRnJvbShJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkyRFJhbmdlVG8oSUlJSUxqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5MkRSYW5nZVRvKElJSUlbQilWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5MkRSYW5nZVRvKElJSUlbRilWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5MkRSYW5nZVRvKElJSUlbSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5MkRSYW5nZVRvKElJSUlbUylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5M0RSYW5nZUZyb20oSUlJSUlJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUlJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkzRFJhbmdlRnJvbShJSUlJSUlMamF2YS9sYW5nL09iamVjdDspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weTNEUmFuZ2VUbyhJSUlJSUlMamF2YS9sYW5nL09iamVjdDspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weUZyb20oTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weUZyb20oTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlGcm9tKExqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5RnJvbShbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weUZyb20oW0YpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlGcm9tKFtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5RnJvbShbTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmo7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5RnJvbShbUylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weUZyb21VbmNoZWNrZWQoTGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlGcm9tVW5jaGVja2VkKFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5RnJvbVVuY2hlY2tlZChbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weUZyb21VbmNoZWNrZWQoW0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlGcm9tVW5jaGVja2VkKFtTKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5VG8oTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weVRvKExqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5VG8oW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlUbyhbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weVRvKFtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5VG8oW1MpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUFsbG9jYXRpb25zKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGU7SUkpW0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ3ViZW1hcEZyb21CaXRtYXAoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUN1YmVtYXBGcm9tQml0bWFwKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uJE1pcG1hcENvbnRyb2w7SSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDdWJlbWFwRnJvbUN1YmVGYWNlcyhMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDdWJlbWFwRnJvbUN1YmVGYWNlcyhMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uJE1pcG1hcENvbnRyb2w7SSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcm9tQml0bWFwKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcm9tQml0bWFwKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uJE1pcG1hcENvbnRyb2w7SSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcm9tQml0bWFwUmVzb3VyY2UoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7SSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcm9tQml0bWFwUmVzb3VyY2UoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uJE1pcG1hcENvbnRyb2w7SSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcm9tU3RyaW5nKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGphdmEvbGFuZy9TdHJpbmc7SSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTaXplZChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50O0kpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU2l6ZWQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDtJSSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUeXBlZChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUeXBlZChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlO0kpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVHlwZWQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvVHlwZTtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbiRNaXBtYXBDb250cm9sO0kpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVNaXBtYXBzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qnl0ZUJ1ZmZlcigpTGphdmEvbmlvL0J5dGVCdWZmZXI7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlc1NpemUoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVsZW1lbnQoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaWRlKClKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXJmYWNlKClMYW5kcm9pZC92aWV3L1N1cmZhY2U7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lU3RhbXAoKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzYWdlKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpb1JlY2VpdmUoKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlvU2VuZCgpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzaXplKEkpViIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdXRvUGFkZGluZyhaKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZyb21GaWVsZFBhY2tlcihJSUlJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpZWxkUGFja2VyOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGcm9tRmllbGRQYWNrZXIoSUlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmllbGRQYWNrZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGcm9tRmllbGRQYWNrZXIoSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWVsZFBhY2tlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uQnVmZmVyQXZhaWxhYmxlTGlzdGVuZXIoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb24kT25CdWZmZXJBdmFpbGFibGVMaXN0ZW5lcjspViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VyZmFjZShMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN5bmNBbGwoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9HUkFQSElDU19DT05TVEFOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IlVTQUdFX0dSQVBISUNTX1JFTkRFUl9UQVJHRVQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRSIvPgotCQk8ZmllbGQgbmFtZT0iVVNBR0VfR1JBUEhJQ1NfVkVSVEVYIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9JT19JTlBVVCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9JT19PVVRQVVQiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVVNBR0VfU0NSSVBUIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0FHRV9TSEFSRUQiIHNpbmNlPSIxOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb24kTWlwbWFwQ29udHJvbCIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbiRNaXBtYXBDb250cm9sOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uJE1pcG1hcENvbnRyb2w7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNSVBNQVBfRlVMTCIvPgotCQk8ZmllbGQgbmFtZT0iTUlQTUFQX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JUE1BUF9PTl9TWU5DX1RPX1RFWFRVUkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uJE9uQnVmZmVyQXZhaWxhYmxlTGlzdGVuZXIiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkJ1ZmZlckF2YWlsYWJsZShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb25BZGFwdGVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvVHlwZTspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlMUQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb25BZGFwdGVyOyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlMkQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb25BZGFwdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVR5cGVkKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGU7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uQWRhcHRlcjsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWREYXRhKFtGKVYiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZERhdGEoW0kpViIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGYWNlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlJEN1YmVtYXBGYWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TE9EKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFgoSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRZKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFooSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViRGF0YShJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpZWxkUGFja2VyOylWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InN1YkRhdGExRChJSVtCKVYiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViRGF0YTFEKElJW0YpViIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJEYXRhMUQoSUlbSSlWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InN1YkRhdGExRChJSVtTKVYiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViRGF0YTJEKElJSUlbRilWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InN1YkRhdGEyRChJSUlJW0kpViIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJFbGVtZW50RGF0YShJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWVsZFBhY2tlcjspViIgcmVtb3ZlZD0iMTQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9CYXNlT2JqIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVzdHJveSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmFtZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0J5dGUyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEJCKVYiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ieCIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0J5dGUzIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEJCQilWIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IngiLz4KLQkJPGZpZWxkIG5hbWU9InkiLz4KLQkJPGZpZWxkIG5hbWU9InoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9CeXRlNCIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihCQkJCKVYiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0idyIvPgotCQk8ZmllbGQgbmFtZT0ieCIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCQk8ZmllbGQgbmFtZT0ieiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTIiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oREQpViIvPgotCQk8ZmllbGQgbmFtZT0ieCIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTMiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oREREKVYiLz4KLQkJPGZpZWxkIG5hbWU9IngiLz4KLQkJPGZpZWxkIG5hbWU9InkiLz4KLQkJPGZpZWxkIG5hbWU9InoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGU0IiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEREREQpViIvPgotCQk8ZmllbGQgbmFtZT0idyIvPgotCQk8ZmllbGQgbmFtZT0ieCIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCQk8ZmllbGQgbmFtZT0ieiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmoiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJBTExPQ0FUSU9OKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9IkFfOChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJCT09MRUFOKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9IkVMRU1FTlQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iRjE2KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iRjE2XzIoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJGMTZfMyhMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9IkYxNl80KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iRjMyKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9IkYzMl8yKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9IkYzMl8zKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9IkYzMl80KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9IkY2NChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJGNjRfMihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9IkY2NF8zKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iRjY0XzQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJGT05UKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iSTE2KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9IkkxNl8yKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iSTE2XzMoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJJMTZfNChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9IkkzMihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJJMzJfMihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9IkkzMl8zKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iSTMyXzQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJJNjQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iSTY0XzIoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJJNjRfMyhMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9Ikk2NF80KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iSTgoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iSThfMihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9Ikk4XzMoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJJOF80KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iTUFUUklYNFg0KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJNQVRSSVhfMlgyKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9Ik1BVFJJWF8zWDMoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iTUFUUklYXzRYNChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJNRVNIKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9IlBST0dSQU1fRlJBR01FTlQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iUFJPR1JBTV9SQVNURVIoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iUFJPR1JBTV9TVE9SRShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJQUk9HUkFNX1ZFUlRFWChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJSR0JBXzQ0NDQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iUkdCQV81NTUxKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9IlJHQkFfODg4OChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJSR0JfNTY1KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9IlJHQl84ODgoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iU0FNUExFUihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJTQ1JJUFQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iVFlQRShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJVMTYoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iVTE2XzIoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJVMTZfMyhMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9IlUxNl80KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iVTMyKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9IlUzMl8yKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iVTMyXzMoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJVMzJfNChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9IlU2NChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJVNjRfMihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9IlU2NF8zKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iVTY0XzQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJVOChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJVOF8yKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iVThfMyhMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9IlU4XzQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iWVVWKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlUGl4ZWwoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudCREYXRhVHlwZTtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudCREYXRhS2luZDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVmVjdG9yKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQkRGF0YVR5cGU7SSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlc1NpemUoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFLaW5kKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudCREYXRhS2luZDsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFUeXBlKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudCREYXRhVHlwZTsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YkVsZW1lbnQoSSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YkVsZW1lbnRBcnJheVNpemUoSSlJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJFbGVtZW50Q291bnQoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YkVsZW1lbnROYW1lKEkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJFbGVtZW50T2Zmc2V0Qnl0ZXMoSSlJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZWN0b3JTaXplKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbXBhdGlibGUoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7KVoiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ29tcGxleCgpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQkQnVpbGRlciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50O0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDtMamF2YS9sYW5nL1N0cmluZztJKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50JERhdGFLaW5kIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50JERhdGFLaW5kOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50JERhdGFLaW5kOyIvPgotCQk8ZmllbGQgbmFtZT0iUElYRUxfQSIvPgotCQk8ZmllbGQgbmFtZT0iUElYRUxfREVQVEgiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iUElYRUxfTCIvPgotCQk8ZmllbGQgbmFtZT0iUElYRUxfTEEiLz4KLQkJPGZpZWxkIG5hbWU9IlBJWEVMX1JHQiIvPgotCQk8ZmllbGQgbmFtZT0iUElYRUxfUkdCQSIvPgotCQk8ZmllbGQgbmFtZT0iUElYRUxfWVVWIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IlVTRVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50JERhdGFUeXBlIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50JERhdGFUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50JERhdGFUeXBlOyIvPgotCQk8ZmllbGQgbmFtZT0iQk9PTEVBTiIvPgotCQk8ZmllbGQgbmFtZT0iRkxPQVRfMTYiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRkxPQVRfMzIiLz4KLQkJPGZpZWxkIG5hbWU9IkZMT0FUXzY0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRSSVhfMlgyIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRSSVhfM1gzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRSSVhfNFg0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOT05FIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlJTX0FMTE9DQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlJTX0VMRU1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlJTX0ZPTlQiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUlNfTUVTSCIvPgotCQk8ZmllbGQgbmFtZT0iUlNfUFJPR1JBTV9GUkFHTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iUlNfUFJPR1JBTV9SQVNURVIiLz4KLQkJPGZpZWxkIG5hbWU9IlJTX1BST0dSQU1fU1RPUkUiLz4KLQkJPGZpZWxkIG5hbWU9IlJTX1BST0dSQU1fVkVSVEVYIi8+Ci0JCTxmaWVsZCBuYW1lPSJSU19TQU1QTEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJSU19TQ1JJUFQiLz4KLQkJPGZpZWxkIG5hbWU9IlJTX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR05FRF8xNiIvPgotCQk8ZmllbGQgbmFtZT0iU0lHTkVEXzMyIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdORURfNjQiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR05FRF84Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVTlNJR05FRF8xNiIvPgotCQk8ZmllbGQgbmFtZT0iVU5TSUdORURfMzIiLz4KLQkJPGZpZWxkIG5hbWU9IlVOU0lHTkVEXzRfNF80XzQiLz4KLQkJPGZpZWxkIG5hbWU9IlVOU0lHTkVEXzVfNV81XzEiLz4KLQkJPGZpZWxkIG5hbWU9IlVOU0lHTkVEXzVfNl81Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVTlNJR05FRF82NCIvPgotCQk8ZmllbGQgbmFtZT0iVU5TSUdORURfOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpZWxkUGFja2VyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQilWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRCb29sZWFuKFopViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEYzMihGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRGMzIoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEYzMihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRjMyKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRGNjQoRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRjY0KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUyOylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRGNjQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTM7KVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEY2NChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlNDspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSTE2KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9TaG9ydDI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJMTYoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Nob3J0MzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEkxNihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2hvcnQ0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSTE2KFMpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEkzMihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJMzIoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ludDI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJMzIoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ludDM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJMzIoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ludDQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJNjQoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSTY0KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9Mb25nMjspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSTY0KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9Mb25nMzspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSTY0KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9Mb25nNDspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSTgoQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSTgoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0J5dGUyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSTgoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0J5dGUzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSTgoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0J5dGU0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTWF0cml4KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgyZjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE1hdHJpeChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4M2Y7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRNYXRyaXgoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDRmOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkT2JqKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9CYXNlT2JqOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVTE2KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFUxNihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvSW50MjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFUxNihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvSW50MzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFUxNihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvSW50NDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFUzMihKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRVMzIoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0xvbmcyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVTMyKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9Mb25nMzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFUzMihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTG9uZzQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRVNjQoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVTY0KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9Mb25nMjspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVTY0KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9Mb25nMzspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVTY0KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9Mb25nNDspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVTgoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Nob3J0MjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFU4KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9TaG9ydDM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRVOChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2hvcnQ0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVTgoUylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWxpZ24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNraXAoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViQm9vbGVhbigpWiIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViQnl0ZTIoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9CeXRlMjsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InN1YkJ5dGUzKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTM7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJCeXRlNCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0J5dGU0OyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViRG91YmxlMigpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTI7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJEb3VibGUzKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlMzsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InN1YkRvdWJsZTQoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGU0OyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViRjMyKClGIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJGNjQoKUQiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InN1YkZsb2F0MigpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InN1YkZsb2F0MygpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MzsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InN1YkZsb2F0NCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0NDsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InN1YkkxNigpUyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViSTMyKClJIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJJNjQoKUoiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InN1Ykk4KClCIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJJbnQyKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvSW50MjsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InN1YkludDMoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9JbnQzOyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViSW50NCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ludDQ7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJMb25nMigpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0xvbmcyOyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViTG9uZzMoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Mb25nMzsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InN1Ykxvbmc0KClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTG9uZzQ7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJNYXRyaXgyZigpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDJmOyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViTWF0cml4M2YoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgzZjsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InN1Yk1hdHJpeDRmKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4NGY7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJTaG9ydDIoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TaG9ydDI7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJTaG9ydDMoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TaG9ydDM7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJTaG9ydDQoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TaG9ydDQ7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJhbGlnbihJKVYiIHNpbmNlPSIxOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpbGVBM0QiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvQmFzZU9iaiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUZyb21Bc3NldChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0TWFuYWdlcjtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpbGVBM0Q7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUZyb21GaWxlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGphdmEvaW8vRmlsZTspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpbGVBM0Q7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUZyb21GaWxlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWxlQTNEOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcm9tUmVzb3VyY2UoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7SSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmlsZUEzRDsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXhFbnRyeShJKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWxlQTNEJEluZGV4RW50cnk7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZGV4RW50cnlDb3VudCgpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWxlQTNEJEVudHJ5VHlwZSIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWxlQTNEJEVudHJ5VHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmlsZUEzRCRFbnRyeVR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRVNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmlsZUEzRCRJbmRleEVudHJ5IiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbnRyeVR5cGUoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWxlQTNEJEVudHJ5VHlwZTsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVzaCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01lc2g7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPYmplY3QoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9CYXNlT2JqOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDIiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oRkYpViIvPgotCQk8ZmllbGQgbmFtZT0ieCIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MyIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGRkYpViIvPgotCQk8ZmllbGQgbmFtZT0ieCIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCQk8ZmllbGQgbmFtZT0ieiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0NCIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGRkZGKVYiLz4KLQkJPGZpZWxkIG5hbWU9InciLz4KLQkJPGZpZWxkIG5hbWU9IngiLz4KLQkJPGZpZWxkIG5hbWU9InkiLz4KLQkJPGZpZWxkIG5hbWU9InoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Gb250IiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmoiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ZvbnQkU3R5bGU7RilMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRm9udDsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRnJvbUFzc2V0KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzO0xqYXZhL2xhbmcvU3RyaW5nO0YpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ZvbnQ7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUZyb21GaWxlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzO0xqYXZhL2lvL0ZpbGU7RilMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRm9udDsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRnJvbUZpbGUoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7TGphdmEvbGFuZy9TdHJpbmc7RilMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRm9udDsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRnJvbVJlc291cmNlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzO0lGKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Gb250OyIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Gb250JFN0eWxlIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ZvbnQkU3R5bGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ZvbnQkU3R5bGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCT0xEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT0xEX0lUQUxJQyIvPgotCQk8ZmllbGQgbmFtZT0iSVRBTElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1JNQUwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9JbnQyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ieCIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0ludDMiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJKVYiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ieCIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCQk8ZmllbGQgbmFtZT0ieiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0ludDQiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJSSlWIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9InciLz4KLQkJPGZpZWxkIG5hbWU9IngiLz4KLQkJPGZpZWxkIG5hbWU9InkiLz4KLQkJPGZpZWxkIG5hbWU9InoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Mb25nMiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKSilWIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IngiLz4KLQkJPGZpZWxkIG5hbWU9InkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Mb25nMyIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKSkopViIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ6Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvTG9uZzQiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkpKSilWIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9InciLz4KLQkJPGZpZWxkIG5hbWU9IngiLz4KLQkJPGZpZWxkIG5hbWU9InkiLz4KLQkJPGZpZWxkIG5hbWU9InoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgyZiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KElJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcnJheSgpW0YiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgyZjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRJZGVudGl0eSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRNdWx0aXBseShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4MmY7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDJmOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZFJvdGF0ZShGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkU2NhbGUoRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9Im11bHRpcGx5KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgyZjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJvdGF0ZShGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2FsZShGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KElJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNwb3NlKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4M2YiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0YpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChJSSlGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXJyYXkoKVtGIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4M2Y7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkSWRlbnRpdHkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkTXVsdGlwbHkoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDNmO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgzZjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRSb3RhdGUoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZFJvdGF0ZShGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkU2NhbGUoRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRTY2FsZShGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRUcmFuc2xhdGUoRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9Im11bHRpcGx5KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgzZjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJvdGF0ZShGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb3RhdGUoRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2NhbGUoRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNjYWxlKEZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KElJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNsYXRlKEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFuc3Bvc2UoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXg0ZiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KElJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcnJheSgpW0YiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZlcnNlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW52ZXJzZVRyYW5zcG9zZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDRmOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZEZydXN0dW0oRkZGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkSWRlbnRpdHkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkTXVsdGlwbHkoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDRmO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXg0ZjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRPcnRobyhGRkZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRPcnRob1dpbmRvdyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZFBlcnNwZWN0aXZlKEZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRQcm9qZWN0aW9uTm9ybWFsaXplZChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZFJvdGF0ZShGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkU2NhbGUoRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkVHJhbnNsYXRlKEZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibXVsdGlwbHkoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDRmOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icm90YXRlKEZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNjYWxlKEZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KElJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNsYXRlKEZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNwb3NlKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaCIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9CYXNlT2JqIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXhTZXRBbGxvY2F0aW9uKEkpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1pdGl2ZShJKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9NZXNoJFByaW1pdGl2ZTsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbWl0aXZlQ291bnQoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVydGV4QWxsb2NhdGlvbihJKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZXJ0ZXhBbGxvY2F0aW9uQ291bnQoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaCRBbGxvY2F0aW9uQnVpbGRlciIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSW5kZXhTZXRBbGxvY2F0aW9uKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9NZXNoJFByaW1pdGl2ZTspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01lc2gkQWxsb2NhdGlvbkJ1aWxkZXI7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEluZGV4U2V0VHlwZShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaCRQcmltaXRpdmU7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9NZXNoJEFsbG9jYXRpb25CdWlsZGVyOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRWZXJ0ZXhBbGxvY2F0aW9uKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaCRBbGxvY2F0aW9uQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaDsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudEluZGV4U2V0SW5kZXgoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudFZlcnRleFR5cGVJbmRleCgpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9NZXNoJEJ1aWxkZXIiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0kpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJbmRleFNldFR5cGUoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9NZXNoJFByaW1pdGl2ZTspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01lc2gkQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSW5kZXhTZXRUeXBlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9NZXNoJFByaW1pdGl2ZTspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01lc2gkQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSW5kZXhTZXRUeXBlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9NZXNoJFByaW1pdGl2ZTspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01lc2gkQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVmVydGV4VHlwZShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDtJKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9NZXNoJEJ1aWxkZXI7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFZlcnRleFR5cGUoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGU7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9NZXNoJEJ1aWxkZXI7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZSgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01lc2g7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRJbmRleFNldEluZGV4KClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRWZXJ0ZXhUeXBlSW5kZXgoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaCRQcmltaXRpdmUiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaCRQcmltaXRpdmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01lc2gkUHJpbWl0aXZlOyIvPgotCQk8ZmllbGQgbmFtZT0iTElORSIvPgotCQk8ZmllbGQgbmFtZT0iTElORV9TVFJJUCIvPgotCQk8ZmllbGQgbmFtZT0iUE9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlRSSUFOR0xFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUklBTkdMRV9GQU4iLz4KLQkJPGZpZWxkIG5hbWU9IlRSSUFOR0xFX1NUUklQIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaCRUcmlhbmdsZU1lc2hCdWlsZGVyIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtJSSlWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRyaWFuZ2xlKElJSSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaCRUcmlhbmdsZU1lc2hCdWlsZGVyOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRWZXJ0ZXgoRkYpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01lc2gkVHJpYW5nbGVNZXNoQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVmVydGV4KEZGRilMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaCRUcmlhbmdsZU1lc2hCdWlsZGVyOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoWilMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaDsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sb3IoRkZGRilMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaCRUcmlhbmdsZU1lc2hCdWlsZGVyOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROb3JtYWwoRkZGKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9NZXNoJFRyaWFuZ2xlTWVzaEJ1aWxkZXI7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHR1cmUoRkYpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L01lc2gkVHJpYW5nbGVNZXNoQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT0xPUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PUk1BTCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFRVUkVfMCIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtIiBzaW5jZT0iMTEiIHJlbW92ZWQ9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvQmFzZU9iaiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmRDb25zdGFudHMoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZFNhbXBsZXIoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NhbXBsZXI7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZFRleHR1cmUoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uc3RhbnQoSSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvVHlwZTsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnN0YW50Q291bnQoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHR1cmVDb3VudCgpSSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dHVyZU5hbWUoSSlMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHR1cmVUeXBlKEkpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW0kVGV4dHVyZVR5cGU7IiBzaW5jZT0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtJEJhc2VQcm9ncmFtQnVpbGRlciIgc2luY2U9IjExIiByZW1vdmVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZENvbnN0YW50KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbSRCYXNlUHJvZ3JhbUJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGV4dHVyZShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbSRUZXh0dXJlVHlwZTspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW0kQmFzZVByb2dyYW1CdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRleHR1cmUoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW0kVGV4dHVyZVR5cGU7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtJEJhc2VQcm9ncmFtQnVpbGRlcjsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRDb25zdGFudEluZGV4KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudFRleHR1cmVJbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXRQcm9ncmFtKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hhZGVyKExhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztJKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtJEJhc2VQcm9ncmFtQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaGFkZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtJEJhc2VQcm9ncmFtQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtJFRleHR1cmVUeXBlIiBzaW5jZT0iMTEiIHJlbW92ZWQ9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbSRUZXh0dXJlVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbSRUZXh0dXJlVHlwZTsiLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFRVUkVfMkQiLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFRVUkVfQ1VCRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudCIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbUZyYWdtZW50JEJ1aWxkZXIiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbSRCYXNlUHJvZ3JhbUJ1aWxkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtRnJhZ21lbnQ7IiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24iIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbUZyYWdtZW50Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbiRCdWlsZGVyIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb2ludFNwcml0ZVRleENvb3JkaW5hdGVSZXBsYWNlbWVudChaKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uJEJ1aWxkZXI7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHR1cmUoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24kQnVpbGRlciRFbnZNb2RlO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uJEJ1aWxkZXIkRm9ybWF0O0kpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24kQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFyeWluZ0NvbG9yKFopTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24kQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfVEVYVFVSRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uJEJ1aWxkZXIkRW52TW9kZSIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uJEJ1aWxkZXIkRW52TW9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbiRCdWlsZGVyJEVudk1vZGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUNBTCIvPgotCQk8ZmllbGQgbmFtZT0iTU9EVUxBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUExBQ0UiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uJEJ1aWxkZXIkRm9ybWF0IiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24kQnVpbGRlciRGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24kQnVpbGRlciRGb3JtYXQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iTFVNSU5BTkNFX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJSR0IiLz4KLQkJPGZpZWxkIG5hbWU9IlJHQkEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtUmFzdGVyIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmoiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJDVUxMX0JBQ0soTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1SYXN0ZXI7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IkNVTExfRlJPTlQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1SYXN0ZXI7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IkNVTExfTk9ORShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVJhc3RlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VsbE1vZGUoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtUmFzdGVyJEN1bGxNb2RlOyIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUG9pbnRTcHJpdGVFbmFibGVkKClaIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVJhc3RlciRCdWlsZGVyIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtUmFzdGVyOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdWxsTW9kZShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVJhc3RlciRDdWxsTW9kZTspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1SYXN0ZXIkQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9pbnRTcHJpdGVFbmFibGVkKFopTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1SYXN0ZXIkQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVJhc3RlciRDdWxsTW9kZSIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtUmFzdGVyJEN1bGxNb2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtUmFzdGVyJEN1bGxNb2RlOyIvPgotCQk8ZmllbGQgbmFtZT0iQkFDSyIvPgotCQk8ZmllbGQgbmFtZT0iRlJPTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PTkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmUiIHNpbmNlPSIxMSIgcmVtb3ZlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9CYXNlT2JqIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iQkxFTkRfQUxQSEFfREVQVEhfTk9ORShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVN0b3JlOyIvPgotCQk8bWV0aG9kIG5hbWU9IkJMRU5EX0FMUEhBX0RFUFRIX1RFU1QoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJCTEVORF9OT05FX0RFUFRIX05PTkUoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJCTEVORF9OT05FX0RFUFRIX1RFU1QoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCbGVuZERzdEZ1bmMoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmUkQmxlbmREc3RGdW5jOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmxlbmRTcmNGdW5jKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVN0b3JlJEJsZW5kU3JjRnVuYzsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlcHRoRnVuYygpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZSREZXB0aEZ1bmM7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbG9yTWFza0FscGhhRW5hYmxlZCgpWiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb2xvck1hc2tCbHVlRW5hYmxlZCgpWiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb2xvck1hc2tHcmVlbkVuYWJsZWQoKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ29sb3JNYXNrUmVkRW5hYmxlZCgpWiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZXB0aE1hc2tFbmFibGVkKClaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RpdGhlckVuYWJsZWQoKVoiIHNpbmNlPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZSRCbGVuZERzdEZ1bmMiIHNpbmNlPSIxMSIgcmVtb3ZlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmUkQmxlbmREc3RGdW5jOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmUkQmxlbmREc3RGdW5jOyIvPgotCQk8ZmllbGQgbmFtZT0iRFNUX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTkUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9ORV9NSU5VU19EU1RfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9ORV9NSU5VU19TUkNfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9ORV9NSU5VU19TUkNfQ09MT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNSQ19BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iU1JDX0NPTE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJaRVJPIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVN0b3JlJEJsZW5kU3JjRnVuYyIgc2luY2U9IjExIiByZW1vdmVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZSRCbGVuZFNyY0Z1bmM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZSRCbGVuZFNyY0Z1bmM7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEU1RfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkRTVF9DT0xPUiIvPgotCQk8ZmllbGQgbmFtZT0iT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTkVfTUlOVVNfRFNUX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTkVfTUlOVVNfRFNUX0NPTE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTkVfTUlOVVNfU1JDX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUkNfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IlNSQ19BTFBIQV9TQVRVUkFURSIvPgotCQk8ZmllbGQgbmFtZT0iWkVSTyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZSRCdWlsZGVyIiBzaW5jZT0iMTEiIHJlbW92ZWQ9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVN0b3JlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJsZW5kRnVuYyhMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVN0b3JlJEJsZW5kU3JjRnVuYztMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVN0b3JlJEJsZW5kRHN0RnVuYzspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbG9yTWFza0VuYWJsZWQoWlpaWilMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVN0b3JlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVwdGhGdW5jKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmUkRGVwdGhGdW5jOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVN0b3JlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVwdGhNYXNrRW5hYmxlZChaKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaXRoZXJFbmFibGVkKFopTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZSRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZSREZXB0aEZ1bmMiIHNpbmNlPSIxMSIgcmVtb3ZlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmUkRGVwdGhGdW5jOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmUkRGVwdGhGdW5jOyIvPgotCQk8ZmllbGQgbmFtZT0iQUxXQVlTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUVVBTCIvPgotCQk8ZmllbGQgbmFtZT0iR1JFQVRFUiIvPgotCQk8ZmllbGQgbmFtZT0iR1JFQVRFUl9PUl9FUVVBTCIvPgotCQk8ZmllbGQgbmFtZT0iTEVTUyIvPgotCQk8ZmllbGQgbmFtZT0iTEVTU19PUl9FUVVBTCIvPgotCQk8ZmllbGQgbmFtZT0iTk9UX0VRVUFMIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVZlcnRleCIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXQoSSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDsiIHNpbmNlPSIxNiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dENvdW50KClJIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVZlcnRleCRCdWlsZGVyIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW0kQmFzZVByb2dyYW1CdWlsZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSW5wdXQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtVmVydGV4JEJ1aWxkZXI7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZSgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1WZXJ0ZXg7IiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1WZXJ0ZXgiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kQ29uc3RhbnRzKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbiRDb25zdGFudHM7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24kQnVpbGRlciIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb247IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHR1cmVNYXRyaXhFbmFibGUoWilMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24kQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24kQ29uc3RhbnRzIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXN0cm95KClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1vZGVsdmlldyhMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4NGY7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvamVjdGlvbihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4NGY7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dHVyZShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4NGY7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNEcml2ZXJFeGNlcHRpb24iIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1JTUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1JTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9SU1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9SU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNSdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNSdW50aW1lRXhjZXB0aW9uIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1JTU3VyZmFjZVZpZXciIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L1N1cmZhY2VWaWV3Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9TdXJmYWNlSG9sZGVyJENhbGxiYWNrIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVJlbmRlclNjcmlwdEdMKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHRHTCRTdXJmYWNlQ29uZmlnOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0R0w7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlc3Ryb3lSZW5kZXJTY3JpcHRHTCgpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZW5kZXJTY3JpcHRHTCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdEdMOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXVzZSgpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN1bWUoKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVuZGVyU2NyaXB0R0woTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdEdMOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1JTVGV4dHVyZVZpZXciIHNpbmNlPSIxNCIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L1RleHR1cmVWaWV3Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9UZXh0dXJlVmlldyRTdXJmYWNlVGV4dHVyZUxpc3RlbmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVJlbmRlclNjcmlwdEdMKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHRHTCRTdXJmYWNlQ29uZmlnOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0R0w7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlc3Ryb3lSZW5kZXJTY3JpcHRHTCgpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZW5kZXJTY3JpcHRHTCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdEdMOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXVzZSgpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN1bWUoKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVuZGVyU2NyaXB0R0woTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdEdMOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdCIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250ZXh0RHVtcCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0JENvbnRleHRUeXBlOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0JENvbnRleHRUeXBlO0kpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZU11bHRpQ29udGV4dChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdCRDb250ZXh0VHlwZTtJSSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVzdHJveSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFwcGxpY2F0aW9uQ29udGV4dCgpTGFuZHJvaWQvY29udGVudC9Db250ZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVycm9ySGFuZGxlcigpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdCRSU0Vycm9ySGFuZGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXNzYWdlSGFuZGxlcigpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdCRSU01lc3NhZ2VIYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbm9yVmVyc2lvbigpSiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZUFsbENvbnRleHRzKClWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kTWVzc2FnZShJW0kpViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXJyb3JIYW5kbGVyKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQkUlNFcnJvckhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNZXNzYWdlSGFuZGxlcihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0JFJTTWVzc2FnZUhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmlvcml0eShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0JFByaW9yaXR5OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVEVfRkxBR19MT1dfTEFURU5DWSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVEVfRkxBR19MT1dfUE9XRVIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRFX0ZMQUdfTk9ORSIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0JENvbnRleHRUeXBlIiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQkQ29udGV4dFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdCRDb250ZXh0VHlwZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkRFQlVHIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1JNQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlBST0ZJTEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQkUHJpb3JpdHkiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdCRQcmlvcml0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0JFByaW9yaXR5OyIvPgotCQk8ZmllbGQgbmFtZT0iTE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1JNQUwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQkUlNFcnJvckhhbmRsZXIiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL1J1bm5hYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJtRXJyb3JNZXNzYWdlIi8+Ci0JCTxmaWVsZCBuYW1lPSJtRXJyb3JOdW0iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQkUlNNZXNzYWdlSGFuZGxlciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvUnVubmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9Im1EYXRhIi8+Ci0JCTxmaWVsZCBuYW1lPSJtSUQiLz4KLQkJPGZpZWxkIG5hbWU9Im1MZW5ndGgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHRHTCIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHRHTCRTdXJmYWNlQ29uZmlnOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmRQcm9ncmFtRnJhZ21lbnQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kUHJvZ3JhbVJhc3RlcihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVJhc3RlcjspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kUHJvZ3JhbVN0b3JlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmU7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZFByb2dyYW1WZXJ0ZXgoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1WZXJ0ZXg7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZFJvb3RTY3JpcHQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkdGgoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGF1c2UoKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdW1lKClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1cmZhY2UoTGFuZHJvaWQvdmlldy9TdXJmYWNlSG9sZGVyO0lJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VyZmFjZVRleHR1cmUoTGFuZHJvaWQvZ3JhcGhpY3MvU3VyZmFjZVRleHR1cmU7SUkpViIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdEdMJFN1cmZhY2VDb25maWciIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdEdMJFN1cmZhY2VDb25maWc7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxwaGEoSUkpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2xvcihJSSlWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlcHRoKElJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2FtcGxlcyhJSUYpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9CYXNlT2JqIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iQ0xBTVBfTElORUFSKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IkNMQU1QX0xJTkVBUl9NSVBfTElORUFSKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IkNMQU1QX05FQVJFU1QoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NhbXBsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iTUlSUk9SRURfUkVQRUFUX0xJTkVBUihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2FtcGxlcjsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9Ik1JUlJPUkVEX1JFUEVBVF9MSU5FQVJfTUlQX0xJTkVBUihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2FtcGxlcjsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9Ik1JUlJPUkVEX1JFUEVBVF9ORUFSRVNUKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyOyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iV1JBUF9MSU5FQVIoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NhbXBsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iV1JBUF9MSU5FQVJfTUlQX0xJTkVBUihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2FtcGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJXUkFQX05FQVJFU1QoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NhbXBsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5pc290cm9weSgpRiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFnbmlmaWNhdGlvbigpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NhbXBsZXIkVmFsdWU7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5pZmljYXRpb24oKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyJFZhbHVlOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V3JhcFMoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyJFZhbHVlOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V3JhcFQoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyJFZhbHVlOyIgc2luY2U9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2FtcGxlciRCdWlsZGVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFuaXNvdHJvcHkoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWFnbmlmaWNhdGlvbihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2FtcGxlciRWYWx1ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbmlmaWNhdGlvbihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2FtcGxlciRWYWx1ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdyYXBTKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyJFZhbHVlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V3JhcFQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NhbXBsZXIkVmFsdWU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyJFZhbHVlIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyJFZhbHVlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TYW1wbGVyJFZhbHVlOyIvPgotCQk8ZmllbGQgbmFtZT0iQ0xBTVAiLz4KLQkJPGZpZWxkIG5hbWU9IkxJTkVBUiIvPgotCQk8ZmllbGQgbmFtZT0iTElORUFSX01JUF9MSU5FQVIiLz4KLQkJPGZpZWxkIG5hbWU9IkxJTkVBUl9NSVBfTkVBUkVTVCIvPgotCQk8ZmllbGQgbmFtZT0iTUlSUk9SRURfUkVQRUFUIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FQVJFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IldSQVAiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmoiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kQWxsb2NhdGlvbihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGaWVsZElEKElMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRGaWVsZElEOyIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSW52b2tlSUQoSSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEludm9rZUlEOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlS2VybmVsSUQoSUlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRLZXJuZWxJRDsiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2goSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWVsZFBhY2tlcjspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaChJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpZWxkUGFja2VyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaChJW0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWVsZFBhY2tlcjspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaChJW0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWVsZFBhY2tlcjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JExhdW5jaE9wdGlvbnM7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhckIoSSlaIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYXJEKEkpRCIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFyRihJKUYiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhckkoSSlJIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYXJKKEkpSiIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFyVihJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpZWxkUGFja2VyOylWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZva2UoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW52b2tlKElMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmllbGRQYWNrZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWR1Y2UoSVtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JExhdW5jaE9wdGlvbnM7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVab25lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFyKElEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYXIoSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZhcihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFyKElKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYXIoSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9CYXNlT2JqOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFyKElMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmllbGRQYWNrZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYXIoSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWVsZFBhY2tlcjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDtbSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYXIoSVopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRCdWlsZGVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylWIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkRmllbGRCYXNlIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxsb2NhdGlvbigpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RWxlbWVudCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQWxsb2NhdGlvbigpViIvPgotCQk8ZmllbGQgbmFtZT0ibUFsbG9jYXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9Im1FbGVtZW50Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEZpZWxkSUQiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmoiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQ7SSlWIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkSW52b2tlSUQiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmoiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQ7SSlWIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkS2VybmVsSUQiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmoiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQ7SUkpViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JExhdW5jaE9wdGlvbnMiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRYRW5kKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WFN0YXJ0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WUVuZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFlTdGFydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFpFbmQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRaU3RhcnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRYKElJKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRZKElJKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRaKElJKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRDIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMamF2YS9sYW5nL1N0cmluZztbQltCKVYiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwIiBzaW5jZT0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9CYXNlT2JqIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZSgpViIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdXRlKFtMamF2YS9sYW5nL09iamVjdDspW0xqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5wdXQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRLZXJuZWxJRDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdXRwdXQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRLZXJuZWxJRDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIgZGVwcmVjYXRlZD0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRHcm91cCRCaW5kaW5nIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkRmllbGRJRDtMamF2YS9sYW5nL09iamVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwJEJ1aWxkZXIiIHNpbmNlPSIxNyIgZGVwcmVjYXRlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDb25uZWN0aW9uKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkS2VybmVsSUQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRGaWVsZElEOylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0R3JvdXAkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDb25uZWN0aW9uKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkS2VybmVsSUQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRLZXJuZWxJRDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkS2VybmVsKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkS2VybmVsSUQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRHcm91cCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZSgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwJEJ1aWxkZXIyIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJbnB1dCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwJElucHV0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEludm9rZShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEludm9rZUlEO1tMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwJENsb3N1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkS2VybmVsKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkS2VybmVsSUQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGU7W0xqYXZhL2xhbmcvT2JqZWN0OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0R3JvdXAkQ2xvc3VyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoTGphdmEvbGFuZy9TdHJpbmc7W0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRHcm91cCRGdXR1cmU7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRHcm91cDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRHcm91cCRDbG9zdXJlIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9CYXNlT2JqIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2xvYmFsKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkRmllbGRJRDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwJEZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXR1cm4oKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRHcm91cCRGdXR1cmU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0R3JvdXAkRnV0dXJlIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0R3JvdXAkQ2xvc3VyZTtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEZpZWxkSUQ7TGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSIyOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwJElucHV0IiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljIiBzaW5jZT0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylWIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWMzRExVVCIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWMzRExVVDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JExhdW5jaE9wdGlvbnM7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtlcm5lbElEKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEtlcm5lbElEOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldExVVChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0JMQVMiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IkJOTk0oTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iQ0dCTVYoSUlJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJDR0VNTShJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IkNHRU1WKElMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IkNHRVJDKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IkNHRVJVKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IkNIQk1WKElJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJDSEVNTShJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IkNIRU1WKElMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IkNIRVIoSUZMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJDSEVSMihJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iQ0hFUjJLKElJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtGTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJDSEVSSyhJSUZMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtGTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJDSFBNVihJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJDSFBSKElGTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iQ0hQUjIoSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IkNTWU1NKElJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iQ1NZUjJLKElJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0MjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iQ1NZUksoSUlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJDVEJNVihJSUlJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iQ1RCU1YoSUlJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IkNUUE1WKElJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IkNUUFNWKElJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IkNUUk1NKElJSUlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iQ1RSTVYoSUlJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iQ1RSU00oSUlJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJDVFJTVihJSUlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJER0JNVihJSUlETGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SURMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJER0VNTShJSURMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtETGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJER0VNVihJRExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lETGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iREdFUihETGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IkRTQk1WKElJRExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lETGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iRFNQTVYoSURMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJRExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IkRTUFIoSURMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJEU1BSMihJRExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJEU1lNTShJSURMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtETGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJEU1lNVihJRExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lETGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iRFNZUihJRExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IkRTWVIyKElETGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IkRTWVIySyhJSURMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtETGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJEU1lSSyhJSURMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtETGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJEVEJNVihJSUlJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iRFRCU1YoSUlJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IkRUUE1WKElJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IkRUUFNWKElJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IkRUUk1NKElJSUlETGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJEVFJNVihJSUlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJEVFJTTShJSUlJRExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iRFRSU1YoSUlJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iU0dCTVYoSUlJRkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lGTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iU0dFTU0oSUlGTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247RkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iU0dFTVYoSUZMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJRkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IlNHRVIoRkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJTU0JNVihJSUZMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJRkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IlNTUE1WKElGTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUZMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJTU1BSKElGTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iU1NQUjIoSUZMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iU1NZTU0oSUlGTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247RkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iU1NZTVYoSUZMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJRkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IlNTWVIoSUZMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJTU1lSMihJRkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJTU1lSMksoSUlGTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247RkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iU1NZUksoSUlGTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247RkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iU1RCTVYoSUlJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IlNUQlNWKElJSUlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJTVFBNVihJSUlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJTVFBTVihJSUlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJTVFJNTShJSUlJRkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iU1RSTVYoSUlJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iU1RSU00oSUlJSUZMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IlNUUlNWKElJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IlpHQk1WKElJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlMjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJaR0VNTShJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iWkdFTVYoSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlMjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJaR0VSQyhMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlMjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iWkdFUlUoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IlpIQk1WKElJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IlpIRU1NKElJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJaSEVNVihJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IlpIRVIoSURMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJaSEVSMihJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IlpIRVIySyhJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0RMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IlpIRVJLKElJRExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0RMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IlpIUE1WKElMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlMjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0RvdWJsZTI7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iWkhQUihJRExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0lMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IlpIUFIyKElMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlMjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iWlNZTU0oSUlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlMjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlMjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IlpTWVIySyhJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iWlNZUksoSUlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlMjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRG91YmxlMjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IlpUQk1WKElJSUlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJaVEJTVihJSUlJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iWlRQTVYoSUlJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iWlRQU1YoSUlJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iWlRSTU0oSUlJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iWlRSTVYoSUlJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iWlRSU00oSUlJSUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9Eb3VibGUyO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iWlRSU1YoSUlJTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNCTEFTOyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OSl9UUkFOU1BPU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkxFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IkxPV0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT05fVU5JVCIvPgotCQk8ZmllbGQgbmFtZT0iTk9fVFJBTlNQT1NFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNQT1NFIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJVUFBFUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0JsZW5kIiBzaW5jZT0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDspTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0JsZW5kOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hBZGQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoQWRkKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaENsZWFyKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaENsZWFyKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaERzdChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hEc3QoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRMYXVuY2hPcHRpb25zOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoRHN0QXRvcChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hEc3RBdG9wKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaERzdEluKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaERzdEluKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaERzdE91dChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hEc3RPdXQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRMYXVuY2hPcHRpb25zOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoRHN0T3ZlcihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hEc3RPdmVyKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaE11bHRpcGx5KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaE11bHRpcGx5KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaFNyYyhMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hTcmMoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRMYXVuY2hPcHRpb25zOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoU3JjQXRvcChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hTcmNBdG9wKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaFNyY0luKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaFNyY0luKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaFNyY091dChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hTcmNPdXQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRMYXVuY2hPcHRpb25zOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoU3JjT3ZlcihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hTcmNPdmVyKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaFN1YnRyYWN0KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaFN1YnRyYWN0KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaFhvcihMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hYb3IoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRMYXVuY2hPcHRpb25zOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXJuZWxJREFkZCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRLZXJuZWxJRDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXJuZWxJRENsZWFyKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEtlcm5lbElEOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtlcm5lbElERHN0KClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEtlcm5lbElEOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtlcm5lbElERHN0QXRvcCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRLZXJuZWxJRDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXJuZWxJRERzdEluKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEtlcm5lbElEOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtlcm5lbElERHN0T3V0KClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEtlcm5lbElEOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtlcm5lbElERHN0T3ZlcigpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRLZXJuZWxJRDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXJuZWxJRE11bHRpcGx5KClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEtlcm5lbElEOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtlcm5lbElEU3JjKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEtlcm5lbElEOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtlcm5lbElEU3JjQXRvcCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRLZXJuZWxJRDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXJuZWxJRFNyY0luKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEtlcm5lbElEOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtlcm5lbElEU3JjT3V0KClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEtlcm5lbElEOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtlcm5lbElEU3JjT3ZlcigpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRLZXJuZWxJRDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXJuZWxJRFN1YnRyYWN0KClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEtlcm5lbElEOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtlcm5lbElEWG9yKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEtlcm5lbElEOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0JsdXIiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQmx1cjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JExhdW5jaE9wdGlvbnM7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpZWxkSURfSW5wdXQoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkRmllbGRJRDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXJuZWxJRCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRLZXJuZWxJRDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJhZGl1cyhGKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeCIgc2luY2U9IjE3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeDsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29sb3JNYXRyaXg7IiBkZXByZWNhdGVkPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2goTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2VybmVsSUQoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkS2VybmVsSUQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWRkKEZGRkYpViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWRkKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDQ7KVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbG9yTWF0cml4KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgzZjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbG9yTWF0cml4KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXg0ZjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyZXlzY2FsZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJHQnRvWVVWKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0WVVWdG9SR0IoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb252b2x2ZTN4MyIgc2luY2U9IjE3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb252b2x2ZTN4MzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JExhdW5jaE9wdGlvbnM7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpZWxkSURfSW5wdXQoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkRmllbGRJRDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXJuZWxJRCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRLZXJuZWxJRDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2VmZmljaWVudHMoW0YpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldElucHV0KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29udm9sdmU1eDUiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29udm9sdmU1eDU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2goTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRMYXVuY2hPcHRpb25zOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWVsZElEX0lucHV0KClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEZpZWxkSUQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2VybmVsSUQoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkS2VybmVsSUQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29lZmZpY2llbnRzKFtGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0hpc3RvZ3JhbSIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNIaXN0b2dyYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2goTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRMYXVuY2hPcHRpb25zOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoX0RvdChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hfRG90KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmllbGRJRF9JbnB1dCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRGaWVsZElEOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtlcm5lbElEX1NlcGFyYXRlKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEtlcm5lbElEOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERvdENvZWZmaWNpZW50cyhGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdXRwdXQoTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNMVVQiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljTFVUOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2goTGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2VybmVsSUQoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkS2VybmVsSUQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxwaGEoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJsdWUoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyZWVuKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWQoSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY1Jlc2l6ZSIgc2luY2U9IjIwIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNSZXNpemU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaF9iaWN1YmljKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaF9iaWN1YmljKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uO0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkTGF1bmNoT3B0aW9uczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpZWxkSURfSW5wdXQoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkRmllbGRJRDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXJuZWxJRF9iaWN1YmljKClMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0JEtlcm5lbElEOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldElucHV0KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljWXV2VG9SR0IiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkxhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0O0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OylMYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljWXV2VG9SR0I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpZWxkSURfSW5wdXQoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQkRmllbGRJRDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXJuZWxJRCgpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdCRLZXJuZWxJRDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dChMYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1Nob3J0MiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihTUylWIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IngiLz4KLQkJPGZpZWxkIG5hbWU9InkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9TaG9ydDMiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oU1NTKVYiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0ieCIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCQk8ZmllbGQgbmFtZT0ieiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1Nob3J0NCIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihTU1NTKVYiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0idyIvPgotCQk8ZmllbGQgbmFtZT0ieCIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCQk8ZmllbGQgbmFtZT0ieiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGUiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmoiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpMYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVYKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7SSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvVHlwZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVhZKExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7SUkpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGU7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVYWVooTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdDtMYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudDtJSUkpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGU7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVsZW1lbnQoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRZKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WXV2KClJIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRaKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRmFjZXMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNNaXBtYXBzKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9yZW5kZXJzY3JpcHQvVHlwZSRCdWlsZGVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQ7TGFuZHJvaWQvcmVuZGVyc2NyaXB0L0VsZW1lbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZhY2VzKFopTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNaXBtYXBzKFopTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRYKEkpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRZKEkpTGFuZHJvaWQvcmVuZGVyc2NyaXB0L1R5cGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRZdXZGb3JtYXQoSSlMYW5kcm9pZC9yZW5kZXJzY3JpcHQvVHlwZSRCdWlsZGVyOyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0WihJKUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlJEJ1aWxkZXI7IiBzaW5jZT0iMTgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlJEN1YmVtYXBGYWNlIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlJEN1YmVtYXBGYWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlJEN1YmVtYXBGYWNlOyIvPgotCQk8ZmllbGQgbmFtZT0iTkVHQVRJVkVfWCIvPgotCQk8ZmllbGQgbmFtZT0iTkVHQVRJVkVfWSIvPgotCQk8ZmllbGQgbmFtZT0iTkVHQVRJVkVfWiIvPgotCQk8ZmllbGQgbmFtZT0iUE9TSVRJVkVfWCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQT1NJVElWRV9ZIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlBPU0lUSVZFX1oiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iUE9TSVRWRV9YIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iUE9TSVRWRV9ZIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iUE9TSVRWRV9aIiBkZXByZWNhdGVkPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2F4L0VsZW1lbnQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvc2F4L0VsZW1lbnQ7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGlsZChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvc2F4L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hpbGQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3NheC9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVpcmVDaGlsZChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvc2F4L0VsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWlyZUNoaWxkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9zYXgvRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbGVtZW50TGlzdGVuZXIoTGFuZHJvaWQvc2F4L0VsZW1lbnRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuZEVsZW1lbnRMaXN0ZW5lcihMYW5kcm9pZC9zYXgvRW5kRWxlbWVudExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5kVGV4dEVsZW1lbnRMaXN0ZW5lcihMYW5kcm9pZC9zYXgvRW5kVGV4dEVsZW1lbnRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXJ0RWxlbWVudExpc3RlbmVyKExhbmRyb2lkL3NheC9TdGFydEVsZW1lbnRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRFbGVtZW50TGlzdGVuZXIoTGFuZHJvaWQvc2F4L1RleHRFbGVtZW50TGlzdGVuZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NheC9FbGVtZW50TGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3NheC9FbmRFbGVtZW50TGlzdGVuZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9zYXgvU3RhcnRFbGVtZW50TGlzdGVuZXIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NheC9FbmRFbGVtZW50TGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2F4L0VuZFRleHRFbGVtZW50TGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2F4L1Jvb3RFbGVtZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvc2F4L0VsZW1lbnQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50SGFuZGxlcigpTG9yZy94bWwvc2F4L0NvbnRlbnRIYW5kbGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2F4L1N0YXJ0RWxlbWVudExpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydChMb3JnL3htbC9zYXgvQXR0cmlidXRlczspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2F4L1RleHRFbGVtZW50TGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3NheC9FbmRUZXh0RWxlbWVudExpc3RlbmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvc2F4L1N0YXJ0RWxlbWVudExpc3RlbmVyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZS9vbWFwaS9DaGFubmVsIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0NoYW5uZWwiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxlY3RSZXNwb25zZSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXNzaW9uKClMYW5kcm9pZC9zZS9vbWFwaS9TZXNzaW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQmFzaWNDaGFubmVsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VsZWN0TmV4dCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InRyYW5zbWl0KFtCKVtCIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZS9vbWFwaS9SZWFkZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZVNlc3Npb25zKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U0VTZXJ2aWNlKClMYW5kcm9pZC9zZS9vbWFwaS9TRVNlcnZpY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTZWN1cmVFbGVtZW50UHJlc2VudCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5TZXNzaW9uKClMYW5kcm9pZC9zZS9vbWFwaS9TZXNzaW9uOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2Uvb21hcGkvU0VTZXJ2aWNlIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7TGFuZHJvaWQvc2Uvb21hcGkvU0VTZXJ2aWNlJE9uQ29ubmVjdGVkTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWFkZXJzKClbTGFuZHJvaWQvc2Uvb21hcGkvUmVhZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZlcnNpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ29ubmVjdGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2h1dGRvd24oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlL29tYXBpL1NFU2VydmljZSRPbkNvbm5lY3RlZExpc3RlbmVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db25uZWN0ZWQoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlL29tYXBpL1Nlc3Npb24iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlQ2hhbm5lbHMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBVFIoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhZGVyKClMYW5kcm9pZC9zZS9vbWFwaS9SZWFkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDbG9zZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuQmFzaWNDaGFubmVsKFtCKUxhbmRyb2lkL3NlL29tYXBpL0NoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkJhc2ljQ2hhbm5lbChbQkIpTGFuZHJvaWQvc2Uvb21hcGkvQ2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuTG9naWNhbENoYW5uZWwoW0IpTGFuZHJvaWQvc2Uvb21hcGkvQ2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuTG9naWNhbENoYW5uZWwoW0JCKUxhbmRyb2lkL3NlL29tYXBpL0NoYW5uZWw7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZWN1cml0eS9BdHRlc3RlZEtleVBhaXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3NlY3VyaXR5L0tleVBhaXI7W0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dGVzdGF0aW9uUmVjb3JkKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5UGFpcigpTGphdmEvc2VjdXJpdHkvS2V5UGFpcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlY3VyaXR5L0NvbmZpcm1hdGlvbkFscmVhZHlQcmVzZW50aW5nRXhjZXB0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZWN1cml0eS9Db25maXJtYXRpb25DYWxsYmFjayIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FuY2VsZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbmZpcm1lZChbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EaXNtaXNzZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkVycm9yKExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZWN1cml0eS9Db25maXJtYXRpb25Ob3RBdmFpbGFibGVFeGNlcHRpb24iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlY3VyaXR5L0NvbmZpcm1hdGlvblByb21wdCIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO1tCKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbFByb21wdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3VwcG9ydGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InByZXNlbnRQcm9tcHQoTGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yO0xhbmRyb2lkL3NlY3VyaXR5L0NvbmZpcm1hdGlvbkNhbGxiYWNrOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZWN1cml0eS9Db25maXJtYXRpb25Qcm9tcHQkQnVpbGRlciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvc2VjdXJpdHkvQ29uZmlybWF0aW9uUHJvbXB0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dHJhRGF0YShbQilMYW5kcm9pZC9zZWN1cml0eS9Db25maXJtYXRpb25Qcm9tcHQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9tcHRUZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9zZWN1cml0eS9Db25maXJtYXRpb25Qcm9tcHQkQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlY3VyaXR5L0tleUNoYWluIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hvb3NlUHJpdmF0ZUtleUFsaWFzKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9zZWN1cml0eS9LZXlDaGFpbkFsaWFzQ2FsbGJhY2s7W0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7TGFuZHJvaWQvbmV0L1VyaTtMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hvb3NlUHJpdmF0ZUtleUFsaWFzKExhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC9zZWN1cml0eS9LZXlDaGFpbkFsaWFzQ2FsbGJhY2s7W0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7TGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSW5zdGFsbEludGVudCgpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VydGlmaWNhdGVDaGFpbihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcml2YXRlS2V5KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvUHJpdmF0ZUtleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JvdW5kS2V5QWxnb3JpdGhtKExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMTgiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNLZXlBbGdvcml0aG1TdXBwb3J0ZWQoTGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0tFWUNIQUlOX0NIQU5HRUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0tFWV9BQ0NFU1NfQ0hBTkdFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU1RPUkFHRV9DSEFOR0VEIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVFJVU1RfU1RPUkVfQ0hBTkdFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DRVJUSUZJQ0FURSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfS0VZX0FDQ0VTU0lCTEUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfS0VZX0FMSUFTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BLQ1MxMiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VjdXJpdHkvS2V5Q2hhaW5BbGlhc0NhbGxiYWNrIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWxpYXMoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlY3VyaXR5L0tleUNoYWluRXhjZXB0aW9uIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZWN1cml0eS9LZXlQYWlyR2VuZXJhdG9yU3BlYyIgc2luY2U9IjE4IiBkZXByZWNhdGVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL0FsZ29yaXRobVBhcmFtZXRlclNwZWMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJTGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjO0xqYXZheC9zZWN1cml0eS9hdXRoL3g1MDAvWDUwMFByaW5jaXBhbDtMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvdXRpbC9EYXRlO0xqYXZhL3V0aWwvRGF0ZTtJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsZ29yaXRobVBhcmFtZXRlclNwZWMoKUxqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYzsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRleHQoKUxhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmREYXRlKClMamF2YS91dGlsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5U2l6ZSgpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5VHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlzdG9yZUFsaWFzKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJpYWxOdW1iZXIoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydERhdGUoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJqZWN0RE4oKUxqYXZheC9zZWN1cml0eS9hdXRoL3g1MDAvWDUwMFByaW5jaXBhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VuY3J5cHRpb25SZXF1aXJlZCgpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VjdXJpdHkvS2V5UGFpckdlbmVyYXRvclNwZWMkQnVpbGRlciIgc2luY2U9IjE4IiBkZXByZWNhdGVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL3NlY3VyaXR5L0tleVBhaXJHZW5lcmF0b3JTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFsZ29yaXRobVBhcmFtZXRlclNwZWMoTGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOylMYW5kcm9pZC9zZWN1cml0eS9LZXlQYWlyR2VuZXJhdG9yU3BlYyRCdWlsZGVyOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxpYXMoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3NlY3VyaXR5L0tleVBhaXJHZW5lcmF0b3JTcGVjJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5jcnlwdGlvblJlcXVpcmVkKClMYW5kcm9pZC9zZWN1cml0eS9LZXlQYWlyR2VuZXJhdG9yU3BlYyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuZERhdGUoTGphdmEvdXRpbC9EYXRlOylMYW5kcm9pZC9zZWN1cml0eS9LZXlQYWlyR2VuZXJhdG9yU3BlYyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEtleVNpemUoSSlMYW5kcm9pZC9zZWN1cml0eS9LZXlQYWlyR2VuZXJhdG9yU3BlYyRCdWlsZGVyOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2V5VHlwZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvc2VjdXJpdHkvS2V5UGFpckdlbmVyYXRvclNwZWMkQnVpbGRlcjsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlcmlhbE51bWJlcihMamF2YS9tYXRoL0JpZ0ludGVnZXI7KUxhbmRyb2lkL3NlY3VyaXR5L0tleVBhaXJHZW5lcmF0b3JTcGVjJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RhcnREYXRlKExqYXZhL3V0aWwvRGF0ZTspTGFuZHJvaWQvc2VjdXJpdHkvS2V5UGFpckdlbmVyYXRvclNwZWMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdWJqZWN0KExqYXZheC9zZWN1cml0eS9hdXRoL3g1MDAvWDUwMFByaW5jaXBhbDspTGFuZHJvaWQvc2VjdXJpdHkvS2V5UGFpckdlbmVyYXRvclNwZWMkQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlY3VyaXR5L0tleVN0b3JlUGFyYW1ldGVyIiBzaW5jZT0iMTgiIGRlcHJlY2F0ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L0tleVN0b3JlJFByb3RlY3Rpb25QYXJhbWV0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbmNyeXB0aW9uUmVxdWlyZWQoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlY3VyaXR5L0tleVN0b3JlUGFyYW1ldGVyJEJ1aWxkZXIiIHNpbmNlPSIxOCIgZGVwcmVjYXRlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9zZWN1cml0eS9LZXlTdG9yZVBhcmFtZXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmNyeXB0aW9uUmVxdWlyZWQoWilMYW5kcm9pZC9zZWN1cml0eS9LZXlTdG9yZVBhcmFtZXRlciRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VjdXJpdHkvTmV0d29ya1NlY3VyaXR5UG9saWN5IiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxhbmRyb2lkL3NlY3VyaXR5L05ldHdvcmtTZWN1cml0eVBvbGljeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NsZWFydGV4dFRyYWZmaWNQZXJtaXR0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NsZWFydGV4dFRyYWZmaWNQZXJtaXR0ZWQoTGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5RXhwaXJlZEV4Y2VwdGlvbiIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9JbnZhbGlkS2V5RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJSUxqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYztMamF2YXgvc2VjdXJpdHkvYXV0aC94NTAwL1g1MDBQcmluY2lwYWw7TGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL3V0aWwvRGF0ZTtMamF2YS91dGlsL0RhdGU7TGphdmEvdXRpbC9EYXRlO0xqYXZhL3V0aWwvRGF0ZTtMamF2YS91dGlsL0RhdGU7SVtMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztaWklaW0JaWlpaWlopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxnb3JpdGhtUGFyYW1ldGVyU3BlYygpTGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dGVzdGF0aW9uQ2hhbGxlbmdlKClbQiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmxvY2tNb2RlcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlcnRpZmljYXRlTm90QWZ0ZXIoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZXJ0aWZpY2F0ZU5vdEJlZm9yZSgpTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlcnRpZmljYXRlU2VyaWFsTnVtYmVyKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VydGlmaWNhdGVTdWJqZWN0KClMamF2YXgvc2VjdXJpdHkvYXV0aC94NTAwL1g1MDBQcmluY2lwYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlnZXN0cygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY3J5cHRpb25QYWRkaW5ncygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleVNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlWYWxpZGl0eUZvckNvbnN1bXB0aW9uRW5kKClMamF2YS91dGlsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5VmFsaWRpdHlGb3JPcmlnaW5hdGlvbkVuZCgpTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleVZhbGlkaXR5U3RhcnQoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlzdG9yZUFsaWFzKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQdXJwb3NlcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpZ25hdHVyZVBhZGRpbmdzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlckF1dGhlbnRpY2F0aW9uVmFsaWRpdHlEdXJhdGlvblNlY29uZHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RpZ2VzdHNTcGVjaWZpZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ludmFsaWRhdGVkQnlCaW9tZXRyaWNFbnJvbGxtZW50KClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JhbmRvbWl6ZWRFbmNyeXB0aW9uUmVxdWlyZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N0cm9uZ0JveEJhY2tlZCgpWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVbmxvY2tlZERldmljZVJlcXVpcmVkKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VzZXJBdXRoZW50aWNhdGlvblJlcXVpcmVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVc2VyQXV0aGVudGljYXRpb25WYWxpZFdoaWxlT25Cb2R5KClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VzZXJDb25maXJtYXRpb25SZXF1aXJlZCgpWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVc2VyUHJlc2VuY2VSZXF1aXJlZCgpWiIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjJEJ1aWxkZXIiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleUdlblBhcmFtZXRlclNwZWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxnb3JpdGhtUGFyYW1ldGVyU3BlYyhMamF2YS9zZWN1cml0eS9zcGVjL0FsZ29yaXRobVBhcmFtZXRlclNwZWM7KUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleUdlblBhcmFtZXRlclNwZWMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdHRlc3RhdGlvbkNoYWxsZW5nZShbQilMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjJEJ1aWxkZXI7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCbG9ja01vZGVzKFtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5R2VuUGFyYW1ldGVyU3BlYyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENlcnRpZmljYXRlTm90QWZ0ZXIoTGphdmEvdXRpbC9EYXRlOylMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2VydGlmaWNhdGVOb3RCZWZvcmUoTGphdmEvdXRpbC9EYXRlOylMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2VydGlmaWNhdGVTZXJpYWxOdW1iZXIoTGphdmEvbWF0aC9CaWdJbnRlZ2VyOylMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2VydGlmaWNhdGVTdWJqZWN0KExqYXZheC9zZWN1cml0eS9hdXRoL3g1MDAvWDUwMFByaW5jaXBhbDspTGFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5R2VuUGFyYW1ldGVyU3BlYyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpZ2VzdHMoW0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5jcnlwdGlvblBhZGRpbmdzKFtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5R2VuUGFyYW1ldGVyU3BlYyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludmFsaWRhdGVkQnlCaW9tZXRyaWNFbnJvbGxtZW50KFopTGFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5R2VuUGFyYW1ldGVyU3BlYyRCdWlsZGVyOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SXNTdHJvbmdCb3hCYWNrZWQoWilMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjJEJ1aWxkZXI7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZXlTaXplKEkpTGFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5R2VuUGFyYW1ldGVyU3BlYyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEtleVZhbGlkaXR5RW5kKExqYXZhL3V0aWwvRGF0ZTspTGFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5R2VuUGFyYW1ldGVyU3BlYyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEtleVZhbGlkaXR5Rm9yQ29uc3VtcHRpb25FbmQoTGphdmEvdXRpbC9EYXRlOylMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2V5VmFsaWRpdHlGb3JPcmlnaW5hdGlvbkVuZChMamF2YS91dGlsL0RhdGU7KUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleUdlblBhcmFtZXRlclNwZWMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZXlWYWxpZGl0eVN0YXJ0KExqYXZhL3V0aWwvRGF0ZTspTGFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5R2VuUGFyYW1ldGVyU3BlYyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJhbmRvbWl6ZWRFbmNyeXB0aW9uUmVxdWlyZWQoWilMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2lnbmF0dXJlUGFkZGluZ3MoW0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VW5sb2NrZWREZXZpY2VSZXF1aXJlZChaKUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleUdlblBhcmFtZXRlclNwZWMkQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZXJBdXRoZW50aWNhdGlvblJlcXVpcmVkKFopTGFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5R2VuUGFyYW1ldGVyU3BlYyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZXJBdXRoZW50aWNhdGlvblZhbGlkV2hpbGVPbkJvZHkoWilMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjJEJ1aWxkZXI7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VyQXV0aGVudGljYXRpb25WYWxpZGl0eUR1cmF0aW9uU2Vjb25kcyhJKUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleUdlblBhcmFtZXRlclNwZWMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VyQ29uZmlybWF0aW9uUmVxdWlyZWQoWilMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlHZW5QYXJhbWV0ZXJTcGVjJEJ1aWxkZXI7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VyUHJlc2VuY2VSZXF1aXJlZChaKUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleUdlblBhcmFtZXRlclNwZWMkQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5SW5mbyIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvS2V5U3BlYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7WklJTGphdmEvdXRpbC9EYXRlO0xqYXZhL3V0aWwvRGF0ZTtMamF2YS91dGlsL0RhdGU7SVtMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztaSVpaWlpaKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJsb2NrTW9kZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaWdlc3RzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5jcnlwdGlvblBhZGRpbmdzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5U2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleVZhbGlkaXR5Rm9yQ29uc3VtcHRpb25FbmQoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlWYWxpZGl0eUZvck9yaWdpbmF0aW9uRW5kKClMamF2YS91dGlsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5VmFsaWRpdHlTdGFydCgpTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleXN0b3JlQWxpYXMoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yaWdpbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFB1cnBvc2VzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2lnbmF0dXJlUGFkZGluZ3MoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyQXV0aGVudGljYXRpb25WYWxpZGl0eUR1cmF0aW9uU2Vjb25kcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5zaWRlU2VjdXJlSGFyZHdhcmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ludmFsaWRhdGVkQnlCaW9tZXRyaWNFbnJvbGxtZW50KClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RydXN0ZWRVc2VyUHJlc2VuY2VSZXF1aXJlZCgpWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVc2VyQXV0aGVudGljYXRpb25SZXF1aXJlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVXNlckF1dGhlbnRpY2F0aW9uUmVxdWlyZW1lbnRFbmZvcmNlZEJ5U2VjdXJlSGFyZHdhcmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VzZXJBdXRoZW50aWNhdGlvblZhbGlkV2hpbGVPbkJvZHkoKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVXNlckNvbmZpcm1hdGlvblJlcXVpcmVkKClaIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleU5vdFlldFZhbGlkRXhjZXB0aW9uIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0ludmFsaWRLZXlFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleVBlcm1hbmVudGx5SW52YWxpZGF0ZWRFeGNlcHRpb24iIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvSW52YWxpZEtleUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5UHJvcGVydGllcyIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQkxPQ0tfTU9ERV9DQkMiLz4KLQkJPGZpZWxkIG5hbWU9IkJMT0NLX01PREVfQ1RSIi8+Ci0JCTxmaWVsZCBuYW1lPSJCTE9DS19NT0RFX0VDQiIvPgotCQk8ZmllbGQgbmFtZT0iQkxPQ0tfTU9ERV9HQ00iLz4KLQkJPGZpZWxkIG5hbWU9IkRJR0VTVF9NRDUiLz4KLQkJPGZpZWxkIG5hbWU9IkRJR0VTVF9OT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJESUdFU1RfU0hBMSIvPgotCQk8ZmllbGQgbmFtZT0iRElHRVNUX1NIQTIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRElHRVNUX1NIQTI1NiIvPgotCQk8ZmllbGQgbmFtZT0iRElHRVNUX1NIQTM4NCIvPgotCQk8ZmllbGQgbmFtZT0iRElHRVNUX1NIQTUxMiIvPgotCQk8ZmllbGQgbmFtZT0iRU5DUllQVElPTl9QQURESU5HX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ1JZUFRJT05fUEFERElOR19QS0NTNyIvPgotCQk8ZmllbGQgbmFtZT0iRU5DUllQVElPTl9QQURESU5HX1JTQV9PQUVQIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNSWVBUSU9OX1BBRERJTkdfUlNBX1BLQ1MxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQUxHT1JJVEhNXzNERVMiIHNpbmNlPSIyOCIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9BTEdPUklUSE1fQUVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQUxHT1JJVEhNX0VDIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQUxHT1JJVEhNX0hNQUNfU0hBMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FMR09SSVRITV9ITUFDX1NIQTIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FMR09SSVRITV9ITUFDX1NIQTI1NiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FMR09SSVRITV9ITUFDX1NIQTM4NCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FMR09SSVRITV9ITUFDX1NIQTUxMiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FMR09SSVRITV9SU0EiLz4KLQkJPGZpZWxkIG5hbWU9Ik9SSUdJTl9HRU5FUkFURUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9SSUdJTl9JTVBPUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iT1JJR0lOX1NFQ1VSRUxZX0lNUE9SVEVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9SSUdJTl9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJQVVJQT1NFX0RFQ1JZUFQiLz4KLQkJPGZpZWxkIG5hbWU9IlBVUlBPU0VfRU5DUllQVCIvPgotCQk8ZmllbGQgbmFtZT0iUFVSUE9TRV9TSUdOIi8+Ci0JCTxmaWVsZCBuYW1lPSJQVVJQT1NFX1ZFUklGWSIvPgotCQk8ZmllbGQgbmFtZT0iUFVSUE9TRV9XUkFQX0tFWSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdOQVRVUkVfUEFERElOR19SU0FfUEtDUzEiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR05BVFVSRV9QQURESU5HX1JTQV9QU1MiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleVByb3RlY3Rpb24iIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9LZXlTdG9yZSRQcm90ZWN0aW9uUGFyYW1ldGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0RhdGU7TGphdmEvdXRpbC9EYXRlO0xqYXZhL3V0aWwvRGF0ZTtJW0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO1paSVpaWkpaWlpaKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJsb2NrTW9kZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaWdlc3RzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5jcnlwdGlvblBhZGRpbmdzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5VmFsaWRpdHlGb3JDb25zdW1wdGlvbkVuZCgpTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleVZhbGlkaXR5Rm9yT3JpZ2luYXRpb25FbmQoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlWYWxpZGl0eVN0YXJ0KClMamF2YS91dGlsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHVycG9zZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaWduYXR1cmVQYWRkaW5ncygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJBdXRoZW50aWNhdGlvblZhbGlkaXR5RHVyYXRpb25TZWNvbmRzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEaWdlc3RzU3BlY2lmaWVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbnZhbGlkYXRlZEJ5QmlvbWV0cmljRW5yb2xsbWVudCgpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSYW5kb21pemVkRW5jcnlwdGlvblJlcXVpcmVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVbmxvY2tlZERldmljZVJlcXVpcmVkKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VzZXJBdXRoZW50aWNhdGlvblJlcXVpcmVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVc2VyQXV0aGVudGljYXRpb25WYWxpZFdoaWxlT25Cb2R5KClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VzZXJDb25maXJtYXRpb25SZXF1aXJlZCgpWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVc2VyUHJlc2VuY2VSZXF1aXJlZCgpWiIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlQcm90ZWN0aW9uJEJ1aWxkZXIiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleVByb3RlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmxvY2tNb2RlcyhbTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleVByb3RlY3Rpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaWdlc3RzKFtMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5UHJvdGVjdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuY3J5cHRpb25QYWRkaW5ncyhbTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleVByb3RlY3Rpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnZhbGlkYXRlZEJ5QmlvbWV0cmljRW5yb2xsbWVudChaKUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleVByb3RlY3Rpb24kQnVpbGRlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEtleVZhbGlkaXR5RW5kKExqYXZhL3V0aWwvRGF0ZTspTGFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5UHJvdGVjdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEtleVZhbGlkaXR5Rm9yQ29uc3VtcHRpb25FbmQoTGphdmEvdXRpbC9EYXRlOylMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlQcm90ZWN0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2V5VmFsaWRpdHlGb3JPcmlnaW5hdGlvbkVuZChMamF2YS91dGlsL0RhdGU7KUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleVByb3RlY3Rpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZXlWYWxpZGl0eVN0YXJ0KExqYXZhL3V0aWwvRGF0ZTspTGFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5UHJvdGVjdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJhbmRvbWl6ZWRFbmNyeXB0aW9uUmVxdWlyZWQoWilMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlQcm90ZWN0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2lnbmF0dXJlUGFkZGluZ3MoW0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlQcm90ZWN0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VW5sb2NrZWREZXZpY2VSZXF1aXJlZChaKUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleVByb3RlY3Rpb24kQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZXJBdXRoZW50aWNhdGlvblJlcXVpcmVkKFopTGFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvS2V5UHJvdGVjdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZXJBdXRoZW50aWNhdGlvblZhbGlkV2hpbGVPbkJvZHkoWilMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlQcm90ZWN0aW9uJEJ1aWxkZXI7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VyQXV0aGVudGljYXRpb25WYWxpZGl0eUR1cmF0aW9uU2Vjb25kcyhJKUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleVByb3RlY3Rpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VyQ29uZmlybWF0aW9uUmVxdWlyZWQoWilMYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9LZXlQcm90ZWN0aW9uJEJ1aWxkZXI7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VyUHJlc2VuY2VSZXF1aXJlZChaKUxhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL0tleVByb3RlY3Rpb24kQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VjdXJpdHkva2V5c3RvcmUvU2VjdXJlS2V5SW1wb3J0VW5hdmFpbGFibGVFeGNlcHRpb24iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvUHJvdmlkZXJFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlY3VyaXR5L2tleXN0b3JlL1N0cm9uZ0JveFVuYXZhaWxhYmxlRXhjZXB0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9Vc2VyTm90QXV0aGVudGljYXRlZEV4Y2VwdGlvbiIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9JbnZhbGlkS2V5RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9Vc2VyUHJlc2VuY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9JbnZhbGlkS2V5RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZWN1cml0eS9rZXlzdG9yZS9XcmFwcGVkS2V5RW50cnkiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9LZXlTdG9yZSRFbnRyeSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQkxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsZ29yaXRobVBhcmFtZXRlclNwZWMoKUxqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFuc2Zvcm1hdGlvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V3JhcHBlZEtleUJ5dGVzKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdyYXBwaW5nS2V5QWxpYXMoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9BdXRvZmlsbFNlcnZpY2UiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWxsRXZlbnRIaXN0b3J5KClMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0ZpbGxFdmVudEhpc3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db25uZWN0ZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRpc2Nvbm5lY3RlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRmlsbFJlcXVlc3QoTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9GaWxsUmVxdWVzdDtMYW5kcm9pZC9vcy9DYW5jZWxsYXRpb25TaWduYWw7TGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9GaWxsQ2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNhdmVSZXF1ZXN0KExhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvU2F2ZVJlcXVlc3Q7TGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9TYXZlQ2FsbGJhY2s7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfSU5URVJGQUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWSUNFX01FVEFfREFUQSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9CYXRjaFVwZGF0ZXMiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0JhdGNoVXBkYXRlcyRCdWlsZGVyOylWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvQmF0Y2hVcGRhdGVzJEJ1aWxkZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9CYXRjaFVwZGF0ZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNmb3JtQ2hpbGQoSUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvVHJhbnNmb3JtYXRpb247KUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvQmF0Y2hVcGRhdGVzJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlVGVtcGxhdGUoTGFuZHJvaWQvd2lkZ2V0L1JlbW90ZVZpZXdzOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0JhdGNoVXBkYXRlcyRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9DaGFyU2VxdWVuY2VUcmFuc2Zvcm1hdGlvbiIgc2luY2U9IjI3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1RyYW5zZm9ybWF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0NoYXJTZXF1ZW5jZVRyYW5zZm9ybWF0aW9uJEJ1aWxkZXI7KVYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9DaGFyU2VxdWVuY2VUcmFuc2Zvcm1hdGlvbiRCdWlsZGVyIiBzaW5jZT0iMjciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxJZDtMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRGaWVsZChMYW5kcm9pZC92aWV3L2F1dG9maWxsL0F1dG9maWxsSWQ7TGphdmEvdXRpbC9yZWdleC9QYXR0ZXJuO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0NoYXJTZXF1ZW5jZVRyYW5zZm9ybWF0aW9uJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvQ2hhclNlcXVlbmNlVHJhbnNmb3JtYXRpb247Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0N1c3RvbURlc2NyaXB0aW9uIiBzaW5jZT0iMjciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9DdXN0b21EZXNjcmlwdGlvbiRCdWlsZGVyOylWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvQ3VzdG9tRGVzY3JpcHRpb24kQnVpbGRlciIgc2luY2U9IjI3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDaGlsZChJTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9UcmFuc2Zvcm1hdGlvbjspTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9DdXN0b21EZXNjcmlwdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJhdGNoVXBkYXRlKExhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvVmFsaWRhdG9yO0xhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvQmF0Y2hVcGRhdGVzOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0N1c3RvbURlc2NyaXB0aW9uJEJ1aWxkZXI7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9DdXN0b21EZXNjcmlwdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvRGF0YXNldCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvRGF0YXNldCRCdWlsZGVyOylWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvRGF0YXNldCRCdWlsZGVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3czspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0RhdGFzZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0aGVudGljYXRpb24oTGFuZHJvaWQvY29udGVudC9JbnRlbnRTZW5kZXI7KUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvRGF0YXNldCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldElkKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0RhdGFzZXQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYWx1ZShMYW5kcm9pZC92aWV3L2F1dG9maWxsL0F1dG9maWxsSWQ7TGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbFZhbHVlOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0RhdGFzZXQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYWx1ZShMYW5kcm9pZC92aWV3L2F1dG9maWxsL0F1dG9maWxsSWQ7TGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbFZhbHVlO0xhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3czspTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9EYXRhc2V0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFsdWUoTGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbElkO0xhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxWYWx1ZTtMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47KUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvRGF0YXNldCRCdWlsZGVyOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFsdWUoTGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbElkO0xhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxWYWx1ZTtMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47TGFuZHJvaWQvd2lkZ2V0L1JlbW90ZVZpZXdzOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0RhdGFzZXQkQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9EYXRlVHJhbnNmb3JtYXRpb24iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9UcmFuc2Zvcm1hdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L2F1dG9maWxsL0F1dG9maWxsSWQ7TGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDspViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9EYXRlVmFsdWVTYW5pdGl6ZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9TYW5pdGl6ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3RleHQvRGF0ZUZvcm1hdDspViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9GaWVsZENsYXNzaWZpY2F0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0FycmF5TGlzdDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF0Y2hlcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9GaWVsZENsYXNzaWZpY2F0aW9uJE1hdGNoIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztGKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhdGVnb3J5SWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjb3JlKClGIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0ZpbGxDYWxsYmFjayIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRmFpbHVyZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3VjY2VzcyhMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0ZpbGxSZXNwb25zZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9GaWxsQ29udGV4dCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVxdWVzdElkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RydWN0dXJlKClMYW5kcm9pZC9hcHAvYXNzaXN0L0Fzc2lzdFN0cnVjdHVyZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvRmlsbEV2ZW50SGlzdG9yeSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsaWVudFN0YXRlKClMYW5kcm9pZC9vcy9CdW5kbGU7IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV2ZW50cygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9GaWxsRXZlbnRIaXN0b3J5JEV2ZW50IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO0xqYXZhL3V0aWwvTGlzdDtMYW5kcm9pZC91dGlsL0FycmF5U2V0O0xqYXZhL3V0aWwvQXJyYXlMaXN0O0xqYXZhL3V0aWwvQXJyYXlMaXN0O0xqYXZhL3V0aWwvQXJyYXlMaXN0O0xqYXZhL3V0aWwvQXJyYXlMaXN0O1tMYW5kcm9pZC92aWV3L2F1dG9maWxsL0F1dG9maWxsSWQ7W0xhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvRmllbGRDbGFzc2lmaWNhdGlvbjspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhbmdlZEZpZWxkcygpTGphdmEvdXRpbC9NYXA7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGllbnRTdGF0ZSgpTGFuZHJvaWQvb3MvQnVuZGxlOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YXNldElkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWVsZHNDbGFzc2lmaWNhdGlvbigpTGphdmEvdXRpbC9NYXA7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZ25vcmVkRGF0YXNldElkcygpTGphdmEvdXRpbC9TZXQ7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYW51YWxseUVudGVyZWRGaWVsZCgpTGphdmEvdXRpbC9NYXA7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxlY3RlZERhdGFzZXRJZHMoKUxqYXZhL3V0aWwvU2V0OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpSSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BVVRIRU5USUNBVElPTl9TRUxFQ1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DT05URVhUX0NPTU1JVFRFRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0RBVEFTRVRfQVVUSEVOVElDQVRJT05fU0VMRUNURUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfREFUQVNFVF9TRUxFQ1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9TQVZFX1NIT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0ZpbGxSZXF1ZXN0IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGllbnRTdGF0ZSgpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGxDb250ZXh0cygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsYWdzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfTUFOVUFMX1JFUVVFU1QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvRmlsbFJlc3BvbnNlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9GaWxsUmVzcG9uc2UkQnVpbGRlcjspViIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0RJU0FCTEVfQUNUSVZJVFlfT05MWSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1RSQUNLX0NPTlRFWFRfQ09NTUlURUQiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9GaWxsUmVzcG9uc2UkQnVpbGRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZERhdGFzZXQoTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9EYXRhc2V0OylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0ZpbGxSZXNwb25zZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0ZpbGxSZXNwb25zZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNhYmxlQXV0b2ZpbGwoSilMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0ZpbGxSZXNwb25zZSRCdWlsZGVyOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0aGVudGljYXRpb24oW0xhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxJZDtMYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlcjtMYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3M7KUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvRmlsbFJlc3BvbnNlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2xpZW50U3RhdGUoTGFuZHJvaWQvb3MvQnVuZGxlOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0ZpbGxSZXNwb25zZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZpZWxkQ2xhc3NpZmljYXRpb25JZHMoW0xhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxJZDspTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9GaWxsUmVzcG9uc2UkQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZsYWdzKEkpTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9GaWxsUmVzcG9uc2UkQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvb3RlcihMYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3M7KUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvRmlsbFJlc3BvbnNlJEJ1aWxkZXI7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIZWFkZXIoTGFuZHJvaWQvd2lkZ2V0L1JlbW90ZVZpZXdzOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0ZpbGxSZXNwb25zZSRCdWlsZGVyOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWdub3JlZElkcyhbTGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbElkOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0ZpbGxSZXNwb25zZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNhdmVJbmZvKExhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvU2F2ZUluZm87KUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvRmlsbFJlc3BvbnNlJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0ltYWdlVHJhbnNmb3JtYXRpb24iIHNpbmNlPSIyNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9UcmFuc2Zvcm1hdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9JbWFnZVRyYW5zZm9ybWF0aW9uJEJ1aWxkZXI7KVYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9JbWFnZVRyYW5zZm9ybWF0aW9uJEJ1aWxkZXIiIHNpbmNlPSIyNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbElkO0xqYXZhL3V0aWwvcmVnZXgvUGF0dGVybjtJKVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxJZDtMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47SUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRPcHRpb24oTGphdmEvdXRpbC9yZWdleC9QYXR0ZXJuO0kpTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9JbWFnZVRyYW5zZm9ybWF0aW9uJEJ1aWxkZXI7IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE9wdGlvbihMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47SUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0ltYWdlVHJhbnNmb3JtYXRpb24kQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0ltYWdlVHJhbnNmb3JtYXRpb247Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL0x1aG5DaGVja3N1bVZhbGlkYXRvciIgc2luY2U9IjI3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1ZhbGlkYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbTGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbElkOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1JlZ2V4VmFsaWRhdG9yIiBzaW5jZT0iMjciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvVmFsaWRhdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxJZDtMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvU2FuaXRpemVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1NhdmVDYWxsYmFjayIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRmFpbHVyZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3VjY2VzcygpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3VjY2VzcyhMYW5kcm9pZC9jb250ZW50L0ludGVudFNlbmRlcjspViIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1NhdmVJbmZvIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9TYXZlSW5mbyRCdWlsZGVyOylWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfRE9OVF9TQVZFX09OX0ZJTklTSCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NBVkVfT05fQUxMX1ZJRVdTX0lOVklTSUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iTkVHQVRJVkVfQlVUVE9OX1NUWUxFX0NBTkNFTCIvPgotCQk8ZmllbGQgbmFtZT0iTkVHQVRJVkVfQlVUVE9OX1NUWUxFX1JFSkVDVCIvPgotCQk8ZmllbGQgbmFtZT0iU0FWRV9EQVRBX1RZUEVfQUREUkVTUyIvPgotCQk8ZmllbGQgbmFtZT0iU0FWRV9EQVRBX1RZUEVfQ1JFRElUX0NBUkQiLz4KLQkJPGZpZWxkIG5hbWU9IlNBVkVfREFUQV9UWVBFX0VNQUlMX0FERFJFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IlNBVkVfREFUQV9UWVBFX0dFTkVSSUMiLz4KLQkJPGZpZWxkIG5hbWU9IlNBVkVfREFUQV9UWVBFX1BBU1NXT1JEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQVZFX0RBVEFfVFlQRV9VU0VSTkFNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9TYXZlSW5mbyRCdWlsZGVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElbTGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbElkOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkU2FuaXRpemVyKExhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvU2FuaXRpemVyO1tMYW5kcm9pZC92aWV3L2F1dG9maWxsL0F1dG9maWxsSWQ7KUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvU2F2ZUluZm8kQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1NhdmVJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1c3RvbURlc2NyaXB0aW9uKExhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvQ3VzdG9tRGVzY3JpcHRpb247KUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvU2F2ZUluZm8kQnVpbGRlcjsiIHNpbmNlPSIyNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlc2NyaXB0aW9uKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1NhdmVJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmxhZ3MoSSlMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1NhdmVJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmVnYXRpdmVBY3Rpb24oSUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50U2VuZGVyOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1NhdmVJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3B0aW9uYWxJZHMoW0xhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxJZDspTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9TYXZlSW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyaWdnZXJJZChMYW5kcm9pZC92aWV3L2F1dG9maWxsL0F1dG9maWxsSWQ7KUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvU2F2ZUluZm8kQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZhbGlkYXRvcihMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1ZhbGlkYXRvcjspTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9TYXZlSW5mbyRCdWlsZGVyOyIgc2luY2U9IjI3Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1NhdmVSZXF1ZXN0IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGllbnRTdGF0ZSgpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFzZXRJZHMoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGxDb250ZXh0cygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9UZXh0VmFsdWVTYW5pdGl6ZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9TYW5pdGl6ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9yZWdleC9QYXR0ZXJuO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1RyYW5zZm9ybWF0aW9uIiBzaW5jZT0iMjciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1VzZXJEYXRhIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9Vc2VyRGF0YSRCdWlsZGVyOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWVsZENsYXNzaWZpY2F0aW9uQWxnb3JpdGhtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4Q2F0ZWdvcnlDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heEZpZWxkQ2xhc3NpZmljYXRpb25JZHNTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4VXNlckRhdGFTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4VmFsdWVMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5WYWx1ZUxlbmd0aCgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9Vc2VyRGF0YSRCdWlsZGVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1VzZXJEYXRhJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvVXNlckRhdGE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmllbGRDbGFzc2lmaWNhdGlvbkFsZ29yaXRobShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvVXNlckRhdGEkQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvVmFsaWRhdG9yIiBzaW5jZT0iMjciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1ZhbGlkYXRvcnMiIHNpbmNlPSIyNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbmQoW0xhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvVmFsaWRhdG9yOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1ZhbGlkYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3QoTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9WYWxpZGF0b3I7KUxhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvVmFsaWRhdG9yOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3IoW0xhbmRyb2lkL3NlcnZpY2UvYXV0b2ZpbGwvVmFsaWRhdG9yOylMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1ZhbGlkYXRvcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvY2Fycmllci9DYXJyaWVySWRlbnRpZmllciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0JMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2lkMSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2lkMigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1zaSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWNjKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNbmMoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNwbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2NhcnJpZXIvQ2Fycmllck1lc3NhZ2luZ1NlcnZpY2UiIHNpbmNlPSIyMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRvd25sb2FkTW1zKExhbmRyb2lkL25ldC9Vcmk7SUxhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvc2VydmljZS9jYXJyaWVyL0NhcnJpZXJNZXNzYWdpbmdTZXJ2aWNlJFJlc3VsdENhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25GaWx0ZXJTbXMoTGFuZHJvaWQvc2VydmljZS9jYXJyaWVyL01lc3NhZ2VQZHU7TGphdmEvbGFuZy9TdHJpbmc7SUlMYW5kcm9pZC9zZXJ2aWNlL2NhcnJpZXIvQ2Fycmllck1lc3NhZ2luZ1NlcnZpY2UkUmVzdWx0Q2FsbGJhY2s7KVYiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZWNlaXZlVGV4dFNtcyhMYW5kcm9pZC9zZXJ2aWNlL2NhcnJpZXIvTWVzc2FnZVBkdTtMamF2YS9sYW5nL1N0cmluZztJSUxhbmRyb2lkL3NlcnZpY2UvY2Fycmllci9DYXJyaWVyTWVzc2FnaW5nU2VydmljZSRSZXN1bHRDYWxsYmFjazspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZW5kRGF0YVNtcyhbQklMamF2YS9sYW5nL1N0cmluZztJSUxhbmRyb2lkL3NlcnZpY2UvY2Fycmllci9DYXJyaWVyTWVzc2FnaW5nU2VydmljZSRSZXN1bHRDYWxsYmFjazspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZW5kRGF0YVNtcyhbQklMamF2YS9sYW5nL1N0cmluZztJTGFuZHJvaWQvc2VydmljZS9jYXJyaWVyL0NhcnJpZXJNZXNzYWdpbmdTZXJ2aWNlJFJlc3VsdENhbGxiYWNrOylWIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2VuZE1tcyhMYW5kcm9pZC9uZXQvVXJpO0lMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL3NlcnZpY2UvY2Fycmllci9DYXJyaWVyTWVzc2FnaW5nU2VydmljZSRSZXN1bHRDYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2VuZE11bHRpcGFydFRleHRTbXMoTGphdmEvdXRpbC9MaXN0O0lMamF2YS9sYW5nL1N0cmluZztJTGFuZHJvaWQvc2VydmljZS9jYXJyaWVyL0NhcnJpZXJNZXNzYWdpbmdTZXJ2aWNlJFJlc3VsdENhbGxiYWNrOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlbmRNdWx0aXBhcnRUZXh0U21zKExqYXZhL3V0aWwvTGlzdDtJTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvc2VydmljZS9jYXJyaWVyL0NhcnJpZXJNZXNzYWdpbmdTZXJ2aWNlJFJlc3VsdENhbGxiYWNrOylWIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2VuZFRleHRTbXMoTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nO0lMYW5kcm9pZC9zZXJ2aWNlL2NhcnJpZXIvQ2Fycmllck1lc3NhZ2luZ1NlcnZpY2UkUmVzdWx0Q2FsbGJhY2s7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2VuZFRleHRTbXMoTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL3NlcnZpY2UvY2Fycmllci9DYXJyaWVyTWVzc2FnaW5nU2VydmljZSRSZXN1bHRDYWxsYmFjazspViIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkRPV05MT0FEX1NUQVRVU19FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iRE9XTkxPQURfU1RBVFVTX09LIi8+Ci0JCTxmaWVsZCBuYW1lPSJET1dOTE9BRF9TVEFUVVNfUkVUUllfT05fQ0FSUklFUl9ORVRXT1JLIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNFSVZFX09QVElPTlNfREVGQVVMVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNFSVZFX09QVElPTlNfRFJPUCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNFSVZFX09QVElPTlNfU0tJUF9OT1RJRllfV0hFTl9DUkVERU5USUFMX1BST1RFQ1RFRF9TVE9SQUdFX1VOQVZBSUxBQkxFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTkRfRkxBR19SRVFVRVNUX0RFTElWRVJZX1NUQVRVUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRU5EX1NUQVRVU19FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iU0VORF9TVEFUVVNfT0siLz4KLQkJPGZpZWxkIG5hbWU9IlNFTkRfU1RBVFVTX1JFVFJZX09OX0NBUlJJRVJfTkVUV09SSyIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9JTlRFUkZBQ0UiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvY2Fycmllci9DYXJyaWVyTWVzc2FnaW5nU2VydmljZSRSZXN1bHRDYWxsYmFjayIgc2luY2U9IjIyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVjZWl2ZVJlc3VsdChMamF2YS9sYW5nL09iamVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9jYXJyaWVyL0NhcnJpZXJNZXNzYWdpbmdTZXJ2aWNlJFNlbmRNbXNSZXN1bHQiIHNpbmNlPSIyMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSVtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZW5kQ29uZlBkdSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZW5kU3RhdHVzKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2NhcnJpZXIvQ2Fycmllck1lc3NhZ2luZ1NlcnZpY2UkU2VuZE11bHRpcGFydFNtc1Jlc3VsdCIgc2luY2U9IjIyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJW0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lc3NhZ2VSZWZzKClbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbmRTdGF0dXMoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvY2Fycmllci9DYXJyaWVyTWVzc2FnaW5nU2VydmljZSRTZW5kU21zUmVzdWx0IiBzaW5jZT0iMjIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXNzYWdlUmVmKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VuZFN0YXR1cygpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9jYXJyaWVyL0NhcnJpZXJTZXJ2aWNlIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9TZXJ2aWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5Q2Fycmllck5ldHdvcmtDaGFuZ2UoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Mb2FkQ29uZmlnKExhbmRyb2lkL3NlcnZpY2UvY2Fycmllci9DYXJyaWVySWRlbnRpZmllcjspTGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVJSSUVSX1NFUlZJQ0VfSU5URVJGQUNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL2NhcnJpZXIvTWVzc2FnZVBkdSIgc2luY2U9IjIyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGR1cygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9jaG9vc2VyL0Nob29zZXJUYXJnZXQiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247RkxhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wb25lbnROYW1lKClMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWNvbigpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlbnRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY29yZSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpdGxlKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvY2hvb3Nlci9DaG9vc2VyVGFyZ2V0U2VydmljZSIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvU2VydmljZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2V0Q2hvb3NlclRhcmdldHMoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50RmlsdGVyOylMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX1BFUk1JU1NJT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFfREFUQV9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWSUNFX0lOVEVSRkFDRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9kcmVhbXMvRHJlYW1TZXJ2aWNlIiBzaW5jZT0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9TZXJ2aWNlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9XaW5kb3ckQ2FsbGJhY2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDb250ZW50VmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZFZpZXdCeUlkKEkpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpbmRvdygpTGFuZHJvaWQvdmlldy9XaW5kb3c7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2luZG93TWFuYWdlcigpTGFuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRnVsbHNjcmVlbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW50ZXJhY3RpdmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NjcmVlbkJyaWdodCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRHJlYW1pbmdTdGFydGVkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EcmVhbWluZ1N0b3BwZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbldha2VVcCgpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWlyZVZpZXdCeUlkKEkpTGFuZHJvaWQvdmlldy9WaWV3OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGVudFZpZXcoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGVudFZpZXcoTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGVudFZpZXcoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZ1bGxzY3JlZW4oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZXJhY3RpdmUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2NyZWVuQnJpZ2h0KFopViIvPgotCQk8bWV0aG9kIG5hbWU9Indha2VVcCgpViIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJEUkVBTV9NRVRBX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfSU5URVJGQUNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL21lZGlhL0NhbWVyYVByZXdhcm1TZXJ2aWNlIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9TZXJ2aWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db29sZG93bihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByZXdhcm0oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvbWVkaWEvTWVkaWFCcm93c2VyU2VydmljZSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvU2VydmljZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJyb3dzZXJSb290SGludHMoKUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRCcm93c2VySW5mbygpTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYVNlc3Npb25NYW5hZ2VyJFJlbW90ZVVzZXJJbmZvOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vzc2lvblRva2VuKClMYW5kcm9pZC9tZWRpYS9zZXNzaW9uL01lZGlhU2Vzc2lvbiRUb2tlbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlDaGlsZHJlbkNoYW5nZWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlDaGlsZHJlbkNoYW5nZWQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdldFJvb3QoTGphdmEvbGFuZy9TdHJpbmc7SUxhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvc2VydmljZS9tZWRpYS9NZWRpYUJyb3dzZXJTZXJ2aWNlJEJyb3dzZXJSb290OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTG9hZENoaWxkcmVuKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL3NlcnZpY2UvbWVkaWEvTWVkaWFCcm93c2VyU2VydmljZSRSZXN1bHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxvYWRDaGlsZHJlbihMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9zZXJ2aWNlL21lZGlhL01lZGlhQnJvd3NlclNlcnZpY2UkUmVzdWx0O0xhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Mb2FkSXRlbShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9zZXJ2aWNlL21lZGlhL01lZGlhQnJvd3NlclNlcnZpY2UkUmVzdWx0OylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZXNzaW9uVG9rZW4oTGFuZHJvaWQvbWVkaWEvc2Vzc2lvbi9NZWRpYVNlc3Npb24kVG9rZW47KVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfSU5URVJGQUNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL21lZGlhL01lZGlhQnJvd3NlclNlcnZpY2UkQnJvd3NlclJvb3QiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um9vdElkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX09GRkxJTkUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUkVDRU5UIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NVR0dFU1RFRCIgc2luY2U9IjI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL21lZGlhL01lZGlhQnJvd3NlclNlcnZpY2UkUmVzdWx0IiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3NlcnZpY2UvbWVkaWEvTWVkaWFCcm93c2VyU2VydmljZTspViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvc2VydmljZS9tZWRpYS9NZWRpYUJyb3dzZXJTZXJ2aWNlO0xqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRhY2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kUmVzdWx0KExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9Db25kaXRpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weSgpTGFuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vQ29uZGl0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmFsaWRJZChMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SWQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC9uZXQvVXJpJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZXZhbmNlVG9TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGF0ZVRvU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1JFTEVWQU5UX0FMV0FZUyIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19SRUxFVkFOVF9OT1ciLz4KLQkJPGZpZWxkIG5hbWU9IlNDSEVNRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0ZBTFNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9UUlVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJmbGFncyIvPgotCQk8ZmllbGQgbmFtZT0iaWNvbiIvPgotCQk8ZmllbGQgbmFtZT0iaWQiLz4KLQkJPGZpZWxkIG5hbWU9ImxpbmUxIi8+Ci0JCTxmaWVsZCBuYW1lPSJsaW5lMiIvPgotCQk8ZmllbGQgbmFtZT0ic3RhdGUiLz4KLQkJPGZpZWxkIG5hbWU9InN1bW1hcnkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL0NvbmRpdGlvblByb3ZpZGVyU2VydmljZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvU2VydmljZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeUNvbmRpdGlvbihMYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9Db25kaXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlDb25kaXRpb25zKFtMYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9Db25kaXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbm5lY3RlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVxdWVzdENvbmRpdGlvbnMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdWJzY3JpYmUoTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVW5zdWJzY3JpYmUoTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RSZWJpbmQoTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0VW5iaW5kKClWIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JVTEVfSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFfREFUQV9DT05GSUdVUkFUSU9OX0FDVElWSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX0RBVEFfUlVMRV9JTlNUQU5DRV9MSU1JVCIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9EQVRBX1JVTEVfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9JTlRFUkZBQ0UiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvU2VydmljZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbEFsbE5vdGlmaWNhdGlvbnMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWxOb3RpZmljYXRpb24oTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbE5vdGlmaWNhdGlvbihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKVYiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsTm90aWZpY2F0aW9ucyhbTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2ZU5vdGlmaWNhdGlvbnMoKVtMYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9TdGF0dXNCYXJOb3RpZmljYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZlTm90aWZpY2F0aW9ucyhbTGphdmEvbGFuZy9TdHJpbmc7KVtMYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9TdGF0dXNCYXJOb3RpZmljYXRpb247IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50SW50ZXJydXB0aW9uRmlsdGVyKClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50TGlzdGVuZXJIaW50cygpSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudFJhbmtpbmcoKUxhbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSRSYW5raW5nTWFwOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Tm90aWZpY2F0aW9uQ2hhbm5lbEdyb3VwcyhMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb3RpZmljYXRpb25DaGFubmVscyhMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTbm9vemVkTm90aWZpY2F0aW9ucygpW0xhbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1N0YXR1c0Jhck5vdGlmaWNhdGlvbjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSW50ZXJydXB0aW9uRmlsdGVyQ2hhbmdlZChJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTGlzdGVuZXJDb25uZWN0ZWQoKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTGlzdGVuZXJEaXNjb25uZWN0ZWQoKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTGlzdGVuZXJIaW50c0NoYW5nZWQoSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk5vdGlmaWNhdGlvbkNoYW5uZWxHcm91cE1vZGlmaWVkKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7TGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbkNoYW5uZWxHcm91cDtJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTm90aWZpY2F0aW9uQ2hhbm5lbE1vZGlmaWVkKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL1VzZXJIYW5kbGU7TGFuZHJvaWQvYXBwL05vdGlmaWNhdGlvbkNoYW5uZWw7SSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk5vdGlmaWNhdGlvblBvc3RlZChMYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9TdGF0dXNCYXJOb3RpZmljYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk5vdGlmaWNhdGlvblBvc3RlZChMYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9TdGF0dXNCYXJOb3RpZmljYXRpb247TGFuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlJFJhbmtpbmdNYXA7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTm90aWZpY2F0aW9uUmFua2luZ1VwZGF0ZShMYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UkUmFua2luZ01hcDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Ob3RpZmljYXRpb25SZW1vdmVkKExhbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1N0YXR1c0Jhck5vdGlmaWNhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTm90aWZpY2F0aW9uUmVtb3ZlZChMYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9TdGF0dXNCYXJOb3RpZmljYXRpb247TGFuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlJFJhbmtpbmdNYXA7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTm90aWZpY2F0aW9uUmVtb3ZlZChMYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9TdGF0dXNCYXJOb3RpZmljYXRpb247TGFuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlJFJhbmtpbmdNYXA7SSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0SW50ZXJydXB0aW9uRmlsdGVyKEkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdExpc3RlbmVySGludHMoSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0UmViaW5kKExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFVuYmluZCgpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Tm90aWZpY2F0aW9uc1Nob3duKFtMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic25vb3plTm90aWZpY2F0aW9uKExqYXZhL2xhbmcvU3RyaW5nO0opViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlTm90aWZpY2F0aW9uQ2hhbm5lbChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlO0xhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb25DaGFubmVsOylWIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkhJTlRfSE9TVF9ESVNBQkxFX0NBTExfRUZGRUNUUyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJISU5UX0hPU1RfRElTQUJMRV9FRkZFQ1RTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkhJTlRfSE9TVF9ESVNBQkxFX05PVElGSUNBVElPTl9FRkZFQ1RTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSUlVQVElPTl9GSUxURVJfQUxBUk1TIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSUlVQVElPTl9GSUxURVJfQUxMIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSUlVQVElPTl9GSUxURVJfTk9ORSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFUlJVUFRJT05fRklMVEVSX1BSSU9SSVRZIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSUlVQVElPTl9GSUxURVJfVU5LTk9XTiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1RJRklDQVRJT05fQ0hBTk5FTF9PUl9HUk9VUF9BRERFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOT1RJRklDQVRJT05fQ0hBTk5FTF9PUl9HUk9VUF9ERUxFVEVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PVElGSUNBVElPTl9DSEFOTkVMX09SX0dST1VQX1VQREFURUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUkVBU09OX0FQUF9DQU5DRUwiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUkVBU09OX0FQUF9DQU5DRUxfQUxMIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9DQU5DRUwiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUkVBU09OX0NBTkNFTF9BTEwiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUkVBU09OX0NIQU5ORUxfQkFOTkVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9DTElDSyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFTT05fRVJST1IiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUkVBU09OX0dST1VQX09QVElNSVpBVElPTiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFTT05fR1JPVVBfU1VNTUFSWV9DQU5DRUxFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFTT05fTElTVEVORVJfQ0FOQ0VMIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9MSVNURU5FUl9DQU5DRUxfQUxMIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9QQUNLQUdFX0JBTk5FRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFTT05fUEFDS0FHRV9DSEFOR0VEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9QQUNLQUdFX1NVU1BFTkRFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFTT05fUFJPRklMRV9UVVJORURfT0ZGIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9TTk9PWkVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9USU1FT1VUIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9VTkFVVE9CVU5ETEVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9VU0VSX1NUT1BQRUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9JTlRFUkZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PRkYiIHNpbmNlPSIyNCIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTiIgc2luY2U9IjI0IiBkZXByZWNhdGVkPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlJFJhbmtpbmciIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5TaG93QmFkZ2UoKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYW5uZWwoKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb25DaGFubmVsOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1wb3J0YW5jZSgpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1wb3J0YW5jZUV4cGxhbmF0aW9uKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3ZlcnJpZGVHcm91cEtleSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSYW5rKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMoKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJTZW50aW1lbnQoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQW1iaWVudCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3VzcGVuZGVkKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaGVzSW50ZXJydXB0aW9uRmlsdGVyKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VSX1NFTlRJTUVOVF9ORUdBVElWRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VSX1NFTlRJTUVOVF9ORVVUUkFMIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlVTRVJfU0VOVElNRU5UX1BPU0lUSVZFIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSRSYW5raW5nTWFwIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yZGVyZWRLZXlzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmFua2luZyhMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UkUmFua2luZzspWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vU3RhdHVzQmFyTm90aWZpY2F0aW9uIiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nO0lJSUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb247TGFuZHJvaWQvb3MvVXNlckhhbmRsZTtKKVYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmUoKUxhbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1N0YXR1c0Jhck5vdGlmaWNhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcm91cEtleSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjAiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb3RpZmljYXRpb24oKUxhbmRyb2lkL2FwcC9Ob3RpZmljYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3ZlcnJpZGVHcm91cEtleSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zdFRpbWUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXIoKUxhbmRyb2lkL29zL1VzZXJIYW5kbGU7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VySWQoKUkiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDbGVhcmFibGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0dyb3VwKClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc09uZ29pbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdmVycmlkZUdyb3VwS2V5KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9UaWxlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnREZXNjcmlwdGlvbigpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWNvbigpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50RGVzY3JpcHRpb24oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYWJlbChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXRlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZVRpbGUoKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0FDVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfSU5BQ1RJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX1VOQVZBSUxBQkxFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL3F1aWNrc2V0dGluZ3MvVGlsZVNlcnZpY2UiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRc1RpbGUoKUxhbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9UaWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG9ja2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTZWN1cmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNsaWNrKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGFydExpc3RlbmluZygpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RvcExpc3RlbmluZygpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVGlsZUFkZGVkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UaWxlUmVtb3ZlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RMaXN0ZW5pbmdTdGF0ZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd0RpYWxvZyhMYW5kcm9pZC9hcHAvRGlhbG9nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBY3Rpdml0eUFuZENvbGxhcHNlKExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5sb2NrQW5kUnVuKExqYXZhL2xhbmcvUnVubmFibGU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9RU19USUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUVNfVElMRV9QUkVGRVJFTkNFUyIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9EQVRBX0FDVElWRV9USUxFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL3Jlc3RyaWN0aW9ucy9SZXN0cmljdGlvbnNSZWNlaXZlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0Jyb2FkY2FzdFJlY2VpdmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXF1ZXN0UGVybWlzc2lvbihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VyU2VydmljZSIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvU2VydmljZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVNlc3Npb24oKUxhbmRyb2lkL3NlcnZpY2UvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VyU2VydmljZSRTZXNzaW9uOyIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9JTlRFUkZBQ0UiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VyU2VydmljZSRTZXNzaW9uIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnVuZGxlKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbmNlbCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2xvc2UoKVYiIHNpbmNlPSIxNSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZXRTZW50ZW5jZVN1Z2dlc3Rpb25zTXVsdGlwbGUoW0xhbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvVGV4dEluZm87SSlbTGFuZHJvaWQvdmlldy90ZXh0c2VydmljZS9TZW50ZW5jZVN1Z2dlc3Rpb25zSW5mbzsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2V0U3VnZ2VzdGlvbnMoTGFuZHJvaWQvdmlldy90ZXh0c2VydmljZS9UZXh0SW5mbztJKUxhbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU3VnZ2VzdGlvbnNJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2V0U3VnZ2VzdGlvbnNNdWx0aXBsZShbTGFuZHJvaWQvdmlldy90ZXh0c2VydmljZS9UZXh0SW5mbztJWilbTGFuZHJvaWQvdmlldy90ZXh0c2VydmljZS9TdWdnZXN0aW9uc0luZm87Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL3ZvaWNlL0Fsd2F5c09uSG90d29yZERldGVjdG9yIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRW5yb2xsSW50ZW50KClMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVSZUVucm9sbEludGVudCgpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVW5FbnJvbGxJbnRlbnQoKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZFJlY29nbml0aW9uTW9kZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFJlY29nbml0aW9uKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BSZWNvZ25pdGlvbigpWiIvPgotCQk8ZmllbGQgbmFtZT0iUkVDT0dOSVRJT05fRkxBR19BTExPV19NVUxUSVBMRV9UUklHR0VSUyIvPgotCQk8ZmllbGQgbmFtZT0iUkVDT0dOSVRJT05fRkxBR19DQVBUVVJFX1RSSUdHRVJfQVVESU8iLz4KLQkJPGZpZWxkIG5hbWU9IlJFQ09HTklUSU9OX01PREVfVVNFUl9JREVOVElGSUNBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iUkVDT0dOSVRJT05fTU9ERV9WT0lDRV9UUklHR0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9IQVJEV0FSRV9VTkFWQUlMQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfS0VZUEhSQVNFX0VOUk9MTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9LRVlQSFJBU0VfVU5FTlJPTExFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfS0VZUEhSQVNFX1VOU1VQUE9SVEVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL3ZvaWNlL0Fsd2F5c09uSG90d29yZERldGVjdG9yJENhbGxiYWNrIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BdmFpbGFiaWxpdHlDaGFuZ2VkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGV0ZWN0ZWQoTGFuZHJvaWQvc2VydmljZS92b2ljZS9BbHdheXNPbkhvdHdvcmREZXRlY3RvciRFdmVudFBheWxvYWQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkVycm9yKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZWNvZ25pdGlvblBhdXNlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVjb2duaXRpb25SZXN1bWVkKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL3ZvaWNlL0Fsd2F5c09uSG90d29yZERldGVjdG9yJEV2ZW50UGF5bG9hZCIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWlpMYW5kcm9pZC9tZWRpYS9BdWRpb0Zvcm1hdDtJW0IpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FwdHVyZUF1ZGlvRm9ybWF0KClMYW5kcm9pZC9tZWRpYS9BdWRpb0Zvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmlnZ2VyQXVkaW8oKVtCIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL3ZvaWNlL1ZvaWNlSW50ZXJhY3Rpb25TZXJ2aWNlIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9TZXJ2aWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQWx3YXlzT25Ib3R3b3JkRGV0ZWN0b3IoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Mb2NhbGU7TGFuZHJvaWQvc2VydmljZS92b2ljZS9BbHdheXNPbkhvdHdvcmREZXRlY3RvciRDYWxsYmFjazspTGFuZHJvaWQvc2VydmljZS92b2ljZS9BbHdheXNPbkhvdHdvcmREZXRlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNhYmxlZFNob3dDb250ZXh0KClJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FjdGl2ZVNlcnZpY2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTGF1bmNoVm9pY2VBc3Npc3RGcm9tS2V5Z3VhcmQoKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVhZHkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNodXRkb3duKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlzYWJsZWRTaG93Q29udGV4dChJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dTZXNzaW9uKExhbmRyb2lkL29zL0J1bmRsZTtJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0U2Vzc2lvbihMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWSUNFX0lOVEVSRkFDRSIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9NRVRBX0RBVEEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2Uvdm9pY2UvVm9pY2VJbnRlcmFjdGlvblNlc3Npb24iIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudENhbGxiYWNrczIiIHNpbmNlPSIyMyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvS2V5RXZlbnQkQ2FsbGJhY2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9vcy9IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2VTeXN0ZW1EaWFsb2dzKClWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0xqYXZhL2lvL1ByaW50V3JpdGVyO1tMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluaXNoKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGV4dCgpTGFuZHJvaWQvY29udGVudC9Db250ZXh0OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzYWJsZWRTaG93Q29udGV4dCgpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5b3V0SW5mbGF0ZXIoKUxhbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXI7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyRGlzYWJsZWRTaG93Q29udGV4dCgpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2luZG93KClMYW5kcm9pZC9hcHAvRGlhbG9nOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGlkZSgpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Bc3Npc3RTdHJ1Y3R1cmVGYWlsdXJlKExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkJhY2tQcmVzc2VkKClWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbmNlbFJlcXVlc3QoTGFuZHJvaWQvc2VydmljZS92b2ljZS9Wb2ljZUludGVyYWN0aW9uU2Vzc2lvbiRSZXF1ZXN0OylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNsb3NlU3lzdGVtRGlhbG9ncygpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29tcHV0ZUluc2V0cyhMYW5kcm9pZC9zZXJ2aWNlL3ZvaWNlL1ZvaWNlSW50ZXJhY3Rpb25TZXNzaW9uJEluc2V0czspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGUoKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlKExhbmRyb2lkL29zL0J1bmRsZTspViIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZUNvbnRlbnRWaWV3KClMYW5kcm9pZC92aWV3L1ZpZXc7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRlc3Ryb3koKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdldFN1cHBvcnRlZENvbW1hbmRzKFtMamF2YS9sYW5nL1N0cmluZzspW1oiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSGFuZGxlQXNzaXN0KExhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9hcHAvYXNzaXN0L0Fzc2lzdFN0cnVjdHVyZTtMYW5kcm9pZC9hcHAvYXNzaXN0L0Fzc2lzdENvbnRlbnQ7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSGFuZGxlQXNzaXN0U2Vjb25kYXJ5KExhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9hcHAvYXNzaXN0L0Fzc2lzdFN0cnVjdHVyZTtMYW5kcm9pZC9hcHAvYXNzaXN0L0Fzc2lzdENvbnRlbnQ7SUkpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25IYW5kbGVTY3JlZW5zaG90KExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25IaWRlKClWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxvY2tzY3JlZW5TaG93bigpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QcmVwYXJlU2hvdyhMYW5kcm9pZC9vcy9CdW5kbGU7SSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlcXVlc3RBYm9ydFZvaWNlKExhbmRyb2lkL3NlcnZpY2Uvdm9pY2UvVm9pY2VJbnRlcmFjdGlvblNlc3Npb24kQWJvcnRWb2ljZVJlcXVlc3Q7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVxdWVzdENvbW1hbmQoTGFuZHJvaWQvc2VydmljZS92b2ljZS9Wb2ljZUludGVyYWN0aW9uU2Vzc2lvbiRDb21tYW5kUmVxdWVzdDspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXF1ZXN0Q29tcGxldGVWb2ljZShMYW5kcm9pZC9zZXJ2aWNlL3ZvaWNlL1ZvaWNlSW50ZXJhY3Rpb25TZXNzaW9uJENvbXBsZXRlVm9pY2VSZXF1ZXN0OylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlcXVlc3RDb25maXJtYXRpb24oTGFuZHJvaWQvc2VydmljZS92b2ljZS9Wb2ljZUludGVyYWN0aW9uU2Vzc2lvbiRDb25maXJtYXRpb25SZXF1ZXN0OylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlcXVlc3RQaWNrT3B0aW9uKExhbmRyb2lkL3NlcnZpY2Uvdm9pY2UvVm9pY2VJbnRlcmFjdGlvblNlc3Npb24kUGlja09wdGlvblJlcXVlc3Q7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2hvdyhMYW5kcm9pZC9vcy9CdW5kbGU7SSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRhc2tGaW5pc2hlZChMYW5kcm9pZC9jb250ZW50L0ludGVudDtJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVGFza1N0YXJ0ZWQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7SSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50VmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaXNhYmxlZFNob3dDb250ZXh0KEkpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2VlcEF3YWtlKFopViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGhlbWUoSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVaUVuYWJsZWQoWilWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93KExhbmRyb2lkL29zL0J1bmRsZTtJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QXNzaXN0YW50QWN0aXZpdHkoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0Vm9pY2VBY3Rpdml0eShMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX1NPVVJDRV9BQ1RJVklUWSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX1NPVVJDRV9BUFBMSUNBVElPTiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX1NPVVJDRV9BU1NJU1RfR0VTVFVSRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX1dJVEhfQVNTSVNUIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1dfV0lUSF9TQ1JFRU5TSE9UIiBzaW5jZT0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2Uvdm9pY2UvVm9pY2VJbnRlcmFjdGlvblNlc3Npb24kQWJvcnRWb2ljZVJlcXVlc3QiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvc2VydmljZS92b2ljZS9Wb2ljZUludGVyYWN0aW9uU2Vzc2lvbiRSZXF1ZXN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVzc2FnZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZvaWNlUHJvbXB0KClMYW5kcm9pZC9hcHAvVm9pY2VJbnRlcmFjdG9yJFByb21wdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kQWJvcnRSZXN1bHQoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL3ZvaWNlL1ZvaWNlSW50ZXJhY3Rpb25TZXNzaW9uJENvbW1hbmRSZXF1ZXN0IiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2Uvdm9pY2UvVm9pY2VJbnRlcmFjdGlvblNlc3Npb24kUmVxdWVzdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbW1hbmQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRJbnRlcm1lZGlhdGVSZXN1bHQoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZFJlc3VsdChMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2Uvdm9pY2UvVm9pY2VJbnRlcmFjdGlvblNlc3Npb24kQ29tcGxldGVWb2ljZVJlcXVlc3QiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvc2VydmljZS92b2ljZS9Wb2ljZUludGVyYWN0aW9uU2Vzc2lvbiRSZXF1ZXN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVzc2FnZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZvaWNlUHJvbXB0KClMYW5kcm9pZC9hcHAvVm9pY2VJbnRlcmFjdG9yJFByb21wdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kQ29tcGxldGVSZXN1bHQoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL3ZvaWNlL1ZvaWNlSW50ZXJhY3Rpb25TZXNzaW9uJENvbmZpcm1hdGlvblJlcXVlc3QiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvc2VydmljZS92b2ljZS9Wb2ljZUludGVyYWN0aW9uU2Vzc2lvbiRSZXF1ZXN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvbXB0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vm9pY2VQcm9tcHQoKUxhbmRyb2lkL2FwcC9Wb2ljZUludGVyYWN0b3IkUHJvbXB0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRDb25maXJtYXRpb25SZXN1bHQoWkxhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc2VydmljZS92b2ljZS9Wb2ljZUludGVyYWN0aW9uU2Vzc2lvbiRJbnNldHMiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlRPVUNIQUJMRV9JTlNFVFNfQ09OVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iVE9VQ0hBQkxFX0lOU0VUU19GUkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iVE9VQ0hBQkxFX0lOU0VUU19SRUdJT04iLz4KLQkJPGZpZWxkIG5hbWU9ImNvbnRlbnRJbnNldHMiLz4KLQkJPGZpZWxkIG5hbWU9InRvdWNoYWJsZUluc2V0cyIvPgotCQk8ZmllbGQgbmFtZT0idG91Y2hhYmxlUmVnaW9uIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL3ZvaWNlL1ZvaWNlSW50ZXJhY3Rpb25TZXNzaW9uJFBpY2tPcHRpb25SZXF1ZXN0IiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2Uvdm9pY2UvVm9pY2VJbnRlcmFjdGlvblNlc3Npb24kUmVxdWVzdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9wdGlvbnMoKVtMYW5kcm9pZC9hcHAvVm9pY2VJbnRlcmFjdG9yJFBpY2tPcHRpb25SZXF1ZXN0JE9wdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9tcHQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2ljZVByb21wdCgpTGFuZHJvaWQvYXBwL1ZvaWNlSW50ZXJhY3RvciRQcm9tcHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZEludGVybWVkaWF0ZVBpY2tPcHRpb25SZXN1bHQoW0xhbmRyb2lkL2FwcC9Wb2ljZUludGVyYWN0b3IkUGlja09wdGlvblJlcXVlc3QkT3B0aW9uO0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRQaWNrT3B0aW9uUmVzdWx0KFtMYW5kcm9pZC9hcHAvVm9pY2VJbnRlcmFjdG9yJFBpY2tPcHRpb25SZXF1ZXN0JE9wdGlvbjtMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2Uvdm9pY2UvVm9pY2VJbnRlcmFjdGlvblNlc3Npb24kUmVxdWVzdCIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGxpbmdQYWNrYWdlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxsaW5nVWlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBY3RpdmUoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2Uvdm9pY2UvVm9pY2VJbnRlcmFjdGlvblNlc3Npb25TZXJ2aWNlIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9TZXJ2aWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25OZXdTZXNzaW9uKExhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvc2VydmljZS92b2ljZS9Wb2ljZUludGVyYWN0aW9uU2Vzc2lvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2UvdnIvVnJMaXN0ZW5lclNlcnZpY2UiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZyTW9kZVBhY2thZ2VFbmFibGVkKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkN1cnJlbnRWckFjdGl2aXR5Q2hhbmdlZChMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfSU5URVJGQUNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zZXJ2aWNlL3dhbGxwYXBlci9XYWxscGFwZXJTZXJ2aWNlIiBzaW5jZT0iNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZUVuZ2luZSgpTGFuZHJvaWQvc2VydmljZS93YWxscGFwZXIvV2FsbHBhcGVyU2VydmljZSRFbmdpbmU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWSUNFX0lOVEVSRkFDRSIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9NRVRBX0RBVEEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NlcnZpY2Uvd2FsbHBhcGVyL1dhbGxwYXBlclNlcnZpY2UkRW5naW5lIiBzaW5jZT0iNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvc2VydmljZS93YWxscGFwZXIvV2FsbHBhcGVyU2VydmljZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXAoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vRmlsZURlc2NyaXB0b3I7TGphdmEvaW8vUHJpbnRXcml0ZXI7W0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNpcmVkTWluaW11bUhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlc2lyZWRNaW5pbXVtV2lkdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXJmYWNlSG9sZGVyKClMYW5kcm9pZC92aWV3L1N1cmZhY2VIb2xkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcmV2aWV3KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWaXNpYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5Q29sb3JzQ2hhbmdlZCgpViIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BcHBseVdpbmRvd0luc2V0cyhMYW5kcm9pZC92aWV3L1dpbmRvd0luc2V0czspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db21tYW5kKExqYXZhL2xhbmcvU3RyaW5nO0lJSUxhbmRyb2lkL29zL0J1bmRsZTtaKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbXB1dGVDb2xvcnMoKUxhbmRyb2lkL2FwcC9XYWxscGFwZXJDb2xvcnM7IiBzaW5jZT0iMjciLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZShMYW5kcm9pZC92aWV3L1N1cmZhY2VIb2xkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRlc2lyZWRTaXplQ2hhbmdlZChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EZXN0cm95KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25PZmZzZXRzQ2hhbmdlZChGRkZGSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3VyZmFjZUNoYW5nZWQoTGFuZHJvaWQvdmlldy9TdXJmYWNlSG9sZGVyO0lJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdXJmYWNlQ3JlYXRlZChMYW5kcm9pZC92aWV3L1N1cmZhY2VIb2xkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN1cmZhY2VEZXN0cm95ZWQoTGFuZHJvaWQvdmlldy9TdXJmYWNlSG9sZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdXJmYWNlUmVkcmF3TmVlZGVkKExhbmRyb2lkL3ZpZXcvU3VyZmFjZUhvbGRlcjspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRvdWNoRXZlbnQoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVmlzaWJpbGl0eUNoYW5nZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T2Zmc2V0Tm90aWZpY2F0aW9uc0VuYWJsZWQoWilWIiBzaW5jZT0iMTUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUb3VjaEV2ZW50c0VuYWJsZWQoWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zcGVlY2gvUmVjb2duaXRpb25MaXN0ZW5lciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25CZWdpbm5pbmdPZlNwZWVjaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQnVmZmVyUmVjZWl2ZWQoW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRW5kT2ZTcGVlY2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkVycm9yKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXZlbnQoSUxhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGFydGlhbFJlc3VsdHMoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZWFkeUZvclNwZWVjaChMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlc3VsdHMoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SbXNDaGFuZ2VkKEYpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc3BlZWNoL1JlY29nbml0aW9uU2VydmljZSIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9TZXJ2aWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYW5jZWwoTGFuZHJvaWQvc3BlZWNoL1JlY29nbml0aW9uU2VydmljZSRDYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhcnRMaXN0ZW5pbmcoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7TGFuZHJvaWQvc3BlZWNoL1JlY29nbml0aW9uU2VydmljZSRDYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RvcExpc3RlbmluZyhMYW5kcm9pZC9zcGVlY2gvUmVjb2duaXRpb25TZXJ2aWNlJENhbGxiYWNrOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWSUNFX0lOVEVSRkFDRSIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9NRVRBX0RBVEEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NwZWVjaC9SZWNvZ25pdGlvblNlcnZpY2UkQ2FsbGJhY2siIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9zcGVlY2gvUmVjb2duaXRpb25TZXJ2aWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmVnaW5uaW5nT2ZTcGVlY2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWZmZXJSZWNlaXZlZChbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5kT2ZTcGVlY2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcnJvcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxsaW5nVWlkKClJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJ0aWFsUmVzdWx0cyhMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkeUZvclNwZWVjaChMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN1bHRzKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InJtc0NoYW5nZWQoRilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zcGVlY2gvUmVjb2duaXplckludGVudCIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vm9pY2VEZXRhaWxzSW50ZW50KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7IiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0dFVF9MQU5HVUFHRV9ERVRBSUxTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1JFQ09HTklaRV9TUEVFQ0giLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9WT0lDRV9TRUFSQ0hfSEFORFNfRlJFRSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fV0VCX1NFQVJDSCIvPgotCQk8ZmllbGQgbmFtZT0iREVUQUlMU19NRVRBX0RBVEEiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DQUxMSU5HX1BBQ0tBR0UiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DT05GSURFTkNFX1NDT1JFUyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9MQU5HVUFHRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTEFOR1VBR0VfTU9ERUwiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0xBTkdVQUdFX1BSRUZFUkVOQ0UiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9NQVhfUkVTVUxUUyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfT05MWV9SRVRVUk5fTEFOR1VBR0VfUFJFRkVSRU5DRSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX09SSUdJTiIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QQVJUSUFMX1JFU1VMVFMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUkVGRVJfT0ZGTElORSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9QUk9NUFQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JFU1VMVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1JFU1VMVFNfUEVORElOR0lOVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUkVTVUxUU19QRU5ESU5HSU5URU5UX0JVTkRMRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU0VDVVJFIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NQRUVDSF9JTlBVVF9DT01QTEVURV9TSUxFTkNFX0xFTkdUSF9NSUxMSVMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TUEVFQ0hfSU5QVVRfTUlOSU1VTV9MRU5HVEhfTUlMTElTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU1BFRUNIX0lOUFVUX1BPU1NJQkxZX0NPTVBMRVRFX1NJTEVOQ0VfTEVOR1RIX01JTExJUyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NVUFBPUlRFRF9MQU5HVUFHRVMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9XRUJfU0VBUkNIX09OTFkiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iTEFOR1VBR0VfTU9ERUxfRlJFRV9GT1JNIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQU5HVUFHRV9NT0RFTF9XRUJfU0VBUkNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfQVVESU9fRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9DTElFTlRfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9ORVRXT1JLX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfTk9fTUFUQ0giLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9TRVJWRVJfRVJST1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NwZWVjaC9SZWNvZ25pemVyUmVzdWx0c0ludGVudCIgc2luY2U9IjEwIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1ZPSUNFX1NFQVJDSF9SRVNVTFRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9WT0lDRV9TRUFSQ0hfUkVTVUxUX0hUTUwiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1ZPSUNFX1NFQVJDSF9SRVNVTFRfSFRNTF9CQVNFX1VSTFMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1ZPSUNFX1NFQVJDSF9SRVNVTFRfSFRUUF9IRUFERVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9WT0lDRV9TRUFSQ0hfUkVTVUxUX1NUUklOR1MiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1ZPSUNFX1NFQVJDSF9SRVNVTFRfVVJMUyIvPgotCQk8ZmllbGQgbmFtZT0iVVJJX1NDSEVNRV9JTkxJTkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NwZWVjaC9TcGVlY2hSZWNvZ25pemVyIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVNwZWVjaFJlY29nbml6ZXIoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC9zcGVlY2gvU3BlZWNoUmVjb2duaXplcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTcGVlY2hSZWNvZ25pemVyKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7KUxhbmRyb2lkL3NwZWVjaC9TcGVlY2hSZWNvZ25pemVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlc3Ryb3koKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlY29nbml0aW9uQXZhaWxhYmxlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlY29nbml0aW9uTGlzdGVuZXIoTGFuZHJvaWQvc3BlZWNoL1JlY29nbml0aW9uTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydExpc3RlbmluZyhMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BMaXN0ZW5pbmcoKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkZJREVOQ0VfU0NPUkVTIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0FVRElPIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9DTElFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0lOU1VGRklDSUVOVF9QRVJNSVNTSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTkVUV09SSyIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTkVUV09SS19USU1FT1VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9OT19NQVRDSCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfUkVDT0dOSVpFUl9CVVNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9TRVJWRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1NQRUVDSF9USU1FT1VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRTX1JFQ09HTklUSU9OIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zcGVlY2gvdHRzL1N5bnRoZXNpc0NhbGxiYWNrIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXVkaW9BdmFpbGFibGUoW0JJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9uZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImVycm9yKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXJyb3IoSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhCdWZmZXJTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRmluaXNoZWQoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1N0YXJ0ZWQoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJhbmdlU3RhcnQoSUlJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0KElJSSlJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zcGVlY2gvdHRzL1N5bnRoZXNpc1JlcXVlc3QiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FsbGVyVWlkKClJIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyU2VxdWVuY2VUZXh0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvdW50cnkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhbmd1YWdlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQaXRjaCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNwZWVjaFJhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0KClMamF2YS9sYW5nL1N0cmluZzsiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFyaWFudCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vm9pY2VOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc3BlZWNoL3R0cy9UZXh0VG9TcGVlY2giIHNpbmNlPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvc3BlZWNoL3R0cy9UZXh0VG9TcGVlY2gkT25Jbml0TGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3NwZWVjaC90dHMvVGV4dFRvU3BlZWNoJE9uSW5pdExpc3RlbmVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRFYXJjb24oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vRmlsZTspSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRWFyY29uKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEVhcmNvbihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTcGVlY2goTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvaW8vRmlsZTspSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkU3BlZWNoKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvU3RyaW5nO0kpSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkU3BlZWNoKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkU3BlZWNoKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImFyZURlZmF1bHRzRW5mb3JjZWQoKVoiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUxhbmd1YWdlcygpTGphdmEvdXRpbC9TZXQ7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0RW5naW5lKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdExhbmd1YWdlKClMamF2YS91dGlsL0xvY2FsZTsiIHNpbmNlPSIxOCIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0Vm9pY2UoKUxhbmRyb2lkL3NwZWVjaC90dHMvVm9pY2U7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmdpbmVzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGZWF0dXJlcyhMamF2YS91dGlsL0xvY2FsZTspTGphdmEvdXRpbC9TZXQ7IiBzaW5jZT0iMTUiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFuZ3VhZ2UoKUxqYXZhL3V0aWwvTG9jYWxlOyIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhTcGVlY2hJbnB1dExlbmd0aCgpSSIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vm9pY2UoKUxhbmRyb2lkL3NwZWVjaC90dHMvVm9pY2U7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2ljZXMoKUxqYXZhL3V0aWwvU2V0OyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMYW5ndWFnZUF2YWlsYWJsZShMamF2YS91dGlsL0xvY2FsZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3BlYWtpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbGF5RWFyY29uKExqYXZhL2xhbmcvU3RyaW5nO0lMYW5kcm9pZC9vcy9CdW5kbGU7TGphdmEvbGFuZy9TdHJpbmc7KUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InBsYXlFYXJjb24oTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL3V0aWwvSGFzaE1hcDspSSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbGF5U2lsZW5jZShKSUxqYXZhL3V0aWwvSGFzaE1hcDspSSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbGF5U2lsZW50VXR0ZXJhbmNlKEpJTGphdmEvbGFuZy9TdHJpbmc7KUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1ZGlvQXR0cmlidXRlcyhMYW5kcm9pZC9tZWRpYS9BdWRpb0F0dHJpYnV0ZXM7KUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuZ2luZUJ5UGFja2FnZU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUkiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldExhbmd1YWdlKExqYXZhL3V0aWwvTG9jYWxlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25VdHRlcmFuY2VDb21wbGV0ZWRMaXN0ZW5lcihMYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaCRPblV0dGVyYW5jZUNvbXBsZXRlZExpc3RlbmVyOylJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uVXR0ZXJhbmNlUHJvZ3Jlc3NMaXN0ZW5lcihMYW5kcm9pZC9zcGVlY2gvdHRzL1V0dGVyYW5jZVByb2dyZXNzTGlzdGVuZXI7KUkiIHNpbmNlPSIxNSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBpdGNoKEYpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNwZWVjaFJhdGUoRilJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Vm9pY2UoTGFuZHJvaWQvc3BlZWNoL3R0cy9Wb2ljZTspSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2h1dGRvd24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGVhayhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJTGFuZHJvaWQvb3MvQnVuZGxlO0xqYXZhL2xhbmcvU3RyaW5nOylJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGVhayhMamF2YS9sYW5nL1N0cmluZztJTGphdmEvdXRpbC9IYXNoTWFwOylJIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3AoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzeW50aGVzaXplVG9GaWxlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL29zL0J1bmRsZTtMamF2YS9pby9GaWxlO0xqYXZhL2xhbmcvU3RyaW5nOylJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzeW50aGVzaXplVG9GaWxlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvSGFzaE1hcDtMamF2YS9sYW5nL1N0cmluZzspSSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9UVFNfUVVFVUVfUFJPQ0VTU0lOR19DT01QTEVURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9JTlZBTElEX1JFUVVFU1QiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTkVUV09SSyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9ORVRXT1JLX1RJTUVPVVQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTk9UX0lOU1RBTExFRF9ZRVQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfT1VUUFVUIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1NFUlZJQ0UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfU1lOVEhFU0lTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxBTkdfQVZBSUxBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQU5HX0NPVU5UUllfQVZBSUxBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQU5HX0NPVU5UUllfVkFSX0FWQUlMQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iTEFOR19NSVNTSU5HX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IkxBTkdfTk9UX1NVUFBPUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iUVVFVUVfQUREIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUVVRV9GTFVTSCIvPgotCQk8ZmllbGQgbmFtZT0iU1RPUFBFRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUNDRVNTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaCRFbmdpbmUiIHNpbmNlPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaDspViIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NIRUNLX1RUU19EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fR0VUX1NBTVBMRV9URVhUIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9JTlNUQUxMX1RUU19EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fVFRTX0RBVEFfSU5TVEFMTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEVDS19WT0lDRV9EQVRBX0JBRF9EQVRBIiBkZXByZWNhdGVkPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iQ0hFQ0tfVk9JQ0VfREFUQV9GQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEVDS19WT0lDRV9EQVRBX01JU1NJTkdfREFUQSIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkNIRUNLX1ZPSUNFX0RBVEFfTUlTU0lOR19WT0xVTUUiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEVDS19WT0lDRV9EQVRBX1BBU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU1RSRUFNIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9BVkFJTEFCTEVfVk9JQ0VTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0hFQ0tfVk9JQ0VfREFUQV9GT1IiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU0FNUExFX1RFWFQiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfVFRTX0RBVEFfSU5TVEFMTEVEIiBkZXByZWNhdGVkPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfVU5BVkFJTEFCTEVfVk9JQ0VTIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfVk9JQ0VfREFUQV9GSUxFUyIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1ZPSUNFX0RBVEFfRklMRVNfSU5GTyIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1ZPSUNFX0RBVEFfUk9PVF9ESVJFQ1RPUlkiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFTlRfQUNUSU9OX1RUU19TRVJWSUNFIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9GRUFUVVJFX0VNQkVEREVEX1NZTlRIRVNJUyIgc2luY2U9IjE1IiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0ZFQVRVUkVfTkVUV09SS19SRVRSSUVTX0NPVU5UIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9GRUFUVVJFX05FVFdPUktfU1lOVEhFU0lTIiBzaW5jZT0iMTUiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfRkVBVFVSRV9ORVRXT1JLX1RJTUVPVVRfTVMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0ZFQVRVUkVfTk9UX0lOU1RBTExFRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfUEFSQU1fUEFOIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9QQVJBTV9TRVNTSU9OX0lEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9QQVJBTV9TVFJFQU0iLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9QQVJBTV9VVFRFUkFOQ0VfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9QQVJBTV9WT0xVTUUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9NRVRBX0RBVEEiIHNpbmNlPSIxNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc3BlZWNoL3R0cy9UZXh0VG9TcGVlY2gkRW5naW5lSW5mbyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iaWNvbiIvPgotCQk8ZmllbGQgbmFtZT0ibGFiZWwiLz4KLQkJPGZpZWxkIG5hbWU9Im5hbWUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NwZWVjaC90dHMvVGV4dFRvU3BlZWNoJE9uSW5pdExpc3RlbmVyIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkluaXQoSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaCRPblV0dGVyYW5jZUNvbXBsZXRlZExpc3RlbmVyIiBzaW5jZT0iNCIgZGVwcmVjYXRlZD0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25VdHRlcmFuY2VDb21wbGV0ZWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NwZWVjaC90dHMvVGV4dFRvU3BlZWNoU2VydmljZSIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvU2VydmljZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2V0RGVmYXVsdFZvaWNlTmFtZUZvcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdldEZlYXR1cmVzRm9yTGFuZ3VhZ2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvU2V0OyIgc2luY2U9IjE1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZXRMYW5ndWFnZSgpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2V0Vm9pY2VzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbklzTGFuZ3VhZ2VBdmFpbGFibGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbklzVmFsaWRWb2ljZU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTG9hZExhbmd1YWdlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Mb2FkVm9pY2UoTGphdmEvbGFuZy9TdHJpbmc7KUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RvcCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3ludGhlc2l6ZVRleHQoTGFuZHJvaWQvc3BlZWNoL3R0cy9TeW50aGVzaXNSZXF1ZXN0O0xhbmRyb2lkL3NwZWVjaC90dHMvU3ludGhlc2lzQ2FsbGJhY2s7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3NwZWVjaC90dHMvVXR0ZXJhbmNlUHJvZ3Jlc3NMaXN0ZW5lciIgc2luY2U9IjE1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQXVkaW9BdmFpbGFibGUoTGphdmEvbGFuZy9TdHJpbmc7W0IpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25CZWdpblN5bnRoZXNpcyhMamF2YS9sYW5nL1N0cmluZztJSUkpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Eb25lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25FcnJvcihMamF2YS9sYW5nL1N0cmluZzspViIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkVycm9yKExqYXZhL2xhbmcvU3RyaW5nO0kpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SYW5nZVN0YXJ0KExqYXZhL2xhbmcvU3RyaW5nO0lJSSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXJ0KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdG9wKExqYXZhL2xhbmcvU3RyaW5nO1opViIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zcGVlY2gvdHRzL1ZvaWNlIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0xvY2FsZTtJSVpMamF2YS91dGlsL1NldDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZlYXR1cmVzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXRlbmN5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxlKClMamF2YS91dGlsL0xvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWFsaXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOZXR3b3JrQ29ubmVjdGlvblJlcXVpcmVkKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRFTkNZX0hJR0giLz4KLQkJPGZpZWxkIG5hbWU9IkxBVEVOQ1lfTE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRFTkNZX05PUk1BTCIvPgotCQk8ZmllbGQgbmFtZT0iTEFURU5DWV9WRVJZX0hJR0giLz4KLQkJPGZpZWxkIG5hbWU9IkxBVEVOQ1lfVkVSWV9MT1ciLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxJVFlfSElHSCIvPgotCQk8ZmllbGQgbmFtZT0iUVVBTElUWV9MT1ciLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxJVFlfTk9STUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMSVRZX1ZFUllfSElHSCIvPgotCQk8ZmllbGQgbmFtZT0iUVVBTElUWV9WRVJZX0xPVyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc3lzdGVtL0Vycm5vRXhjZXB0aW9uIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9ImVycm5vIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zeXN0ZW0vSW50NjRSZWYiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2YWx1ZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc3lzdGVtL09zIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjZXB0KExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0xqYXZhL25ldC9JbmV0U29ja2V0QWRkcmVzczspTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjZXNzKExqYXZhL2xhbmcvU3RyaW5nO0kpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmQoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7TGphdmEvbmV0L0luZXRBZGRyZXNzO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNobW9kKExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNob3duKExqYXZhL2xhbmcvU3RyaW5nO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZShMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7TGphdmEvbmV0L0luZXRBZGRyZXNzO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1cChMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZHVwMihMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtJKUxqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVudmlyb24oKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdihMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdmUoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZjaG1vZChMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmY2hvd24oTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZkYXRhc3luYyhMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZzdGF0KExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOylMYW5kcm9pZC9zeXN0ZW0vU3RydWN0U3RhdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmc3RhdHZmcyhMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspTGFuZHJvaWQvc3lzdGVtL1N0cnVjdFN0YXRWZnM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnN5bmMoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmdHJ1bmNhdGUoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7SilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2FpX3N0cmVycm9yKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0ZWdpZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldGVudihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0ZXVpZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldGdpZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldHBlZXJuYW1lKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOylMamF2YS9uZXQvU29ja2V0QWRkcmVzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRwaWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRwcGlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0c29ja25hbWUoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7KUxqYXZhL25ldC9Tb2NrZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldHRpZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldHVpZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldHhhdHRyKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylbQiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaWZfaW5kZXh0b25hbWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpZl9uYW1ldG9pbmRleChMamF2YS9sYW5nL1N0cmluZzspSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5ldF9wdG9uKElMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzYXR0eShMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImtpbGwoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImxjaG93bihMamF2YS9sYW5nL1N0cmluZztJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGluayhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Imxpc3RlbihMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsaXN0eGF0dHIoTGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImxzZWVrKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0pJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsc3RhdChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvc3lzdGVtL1N0cnVjdFN0YXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWluY29yZShKSltCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJta2RpcihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJta2ZpZm8oTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWxvY2soSkopViIvPgotCQk8bWV0aG9kIG5hbWU9Im1tYXAoSkpJSUxqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0opSiIvPgotCQk8bWV0aG9kIG5hbWU9Im1zeW5jKEpKSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibXVubG9jayhKSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibXVubWFwKEpKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuKExqYXZhL2xhbmcvU3RyaW5nO0lJKUxqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InBpcGUoKVtMamF2YS9pby9GaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb2xsKFtMYW5kcm9pZC9zeXN0ZW0vU3RydWN0UG9sbGZkO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9InBvc2l4X2ZhbGxvY2F0ZShMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtKSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJjdGwoSUpKSkopSSIvPgotCQk8bWV0aG9kIG5hbWU9InByZWFkKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0xqYXZhL25pby9CeXRlQnVmZmVyO0opSSIvPgotCQk8bWV0aG9kIG5hbWU9InByZWFkKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO1tCSUlKKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwd3JpdGUoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7TGphdmEvbmlvL0J5dGVCdWZmZXI7SilJIi8+Ci0JCTxtZXRob2QgbmFtZT0icHdyaXRlKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO1tCSUlKKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0xqYXZhL25pby9CeXRlQnVmZmVyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZChMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtbQklJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkbGluayhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZHYoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7W0xqYXZhL2xhbmcvT2JqZWN0O1tJW0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlY3Zmcm9tKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0xqYXZhL25pby9CeXRlQnVmZmVyO0lMamF2YS9uZXQvSW5ldFNvY2tldEFkZHJlc3M7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWN2ZnJvbShMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtbQklJSUxqYXZhL25ldC9JbmV0U29ja2V0QWRkcmVzczspSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZXhhdHRyKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW5hbWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kZmlsZShMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtMYW5kcm9pZC9zeXN0ZW0vSW50NjRSZWY7SilKIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kZmlsZShMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtMYW5kcm9pZC91dGlsL011dGFibGVMb25nO0opSiIgcmVtb3ZlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kdG8oTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7TGphdmEvbmlvL0J5dGVCdWZmZXI7SUxqYXZhL25ldC9JbmV0QWRkcmVzcztJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kdG8oTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7W0JJSUlMamF2YS9uZXQvSW5ldEFkZHJlc3M7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0ZWdpZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRlbnYoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0ZXVpZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRnaWQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0c2lkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0c29ja29wdEludChMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtJSUkpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0dWlkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldHhhdHRyKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tCSSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaHV0ZG93bihMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzb2NrZXQoSUlJKUxqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InNvY2tldHBhaXIoSUlJTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7TGphdmEvaW8vRmlsZURlc2NyaXB0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGF0KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9zeXN0ZW0vU3RydWN0U3RhdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGF0dmZzKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9zeXN0ZW0vU3RydWN0U3RhdFZmczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdHJlcnJvcihJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InN0cnNpZ25hbChJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InN5bWxpbmsoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzeXNjb25mKEkpSiIvPgotCQk8bWV0aG9kIG5hbWU9InRjZHJhaW4oTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0Y3NlbmRicmVhayhMamF2YS9pby9GaWxlRGVzY3JpcHRvcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bWFzayhJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmFtZSgpTGFuZHJvaWQvc3lzdGVtL1N0cnVjdFV0c25hbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5zZXRlbnYoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3YWl0cGlkKElMYW5kcm9pZC91dGlsL011dGFibGVJbnQ7SSlJIiByZW1vdmVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO0xqYXZhL25pby9CeXRlQnVmZmVyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7W0JJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGV2KExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yO1tMamF2YS9sYW5nL09iamVjdDtbSVtJKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3N5c3RlbS9Pc0NvbnN0YW50cyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IlNfSVNCTEsoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iU19JU0NIUihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJTX0lTRElSKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9IlNfSVNGSUZPKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9IlNfSVNMTksoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iU19JU1JFRyhJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJTX0lTU09DSyhJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJXQ09SRURVTVAoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iV0VYSVRTVEFUVVMoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iV0lGRVhJVEVEKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9IldJRlNJR05BTEVEKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9IldJRlNUT1BQRUQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iV1NUT1BTSUcoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iV1RFUk1TSUcoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXJybm9OYW1lKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2FpTmFtZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQUZfSU5FVCIvPgotCQk8ZmllbGQgbmFtZT0iQUZfSU5FVDYiLz4KLQkJPGZpZWxkIG5hbWU9IkFGX1VOSVgiLz4KLQkJPGZpZWxkIG5hbWU9IkFGX1VOU1BFQyIvPgotCQk8ZmllbGQgbmFtZT0iQUlfQUREUkNPTkZJRyIvPgotCQk8ZmllbGQgbmFtZT0iQUlfQUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJBSV9DQU5PTk5BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkFJX05VTUVSSUNIT1NUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBSV9OVU1FUklDU0VSViIvPgotCQk8ZmllbGQgbmFtZT0iQUlfUEFTU0lWRSIvPgotCQk8ZmllbGQgbmFtZT0iQUlfVjRNQVBQRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9BVURJVF9DT05UUk9MIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBfQVVESVRfV1JJVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9CTE9DS19TVVNQRU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBfQ0hPV04iLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9EQUNfT1ZFUlJJREUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9EQUNfUkVBRF9TRUFSQ0giLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9GT1dORVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9GU0VUSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9JUENfTE9DSyIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQX0lQQ19PV05FUiIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQX0tJTEwiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9MQVNUX0NBUCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQX0xFQVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBfTElOVVhfSU1NVVRBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBfTUFDX0FETUlOIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBfTUFDX09WRVJSSURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBfTUtOT0QiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9ORVRfQURNSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9ORVRfQklORF9TRVJWSUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBfTkVUX0JST0FEQ0FTVCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQX05FVF9SQVciLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9TRVRGQ0FQIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBfU0VUR0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBfU0VUUENBUCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQX1NFVFVJRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQX1NZU0xPRyIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQX1NZU19BRE1JTiIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQX1NZU19CT09UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBfU1lTX0NIUk9PVCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQX1NZU19NT0RVTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9TWVNfTklDRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQX1NZU19QQUNDVCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQX1NZU19QVFJBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9TWVNfUkFXSU8iLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9TWVNfUkVTT1VSQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9TWVNfVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQX1NZU19UVFlfQ09ORklHIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBfV0FLRV9BTEFSTSIvPgotCQk8ZmllbGQgbmFtZT0iRTJCSUciLz4KLQkJPGZpZWxkIG5hbWU9IkVBQ0NFUyIvPgotCQk8ZmllbGQgbmFtZT0iRUFERFJJTlVTRSIvPgotCQk8ZmllbGQgbmFtZT0iRUFERFJOT1RBVkFJTCIvPgotCQk8ZmllbGQgbmFtZT0iRUFGTk9TVVBQT1JUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFQUdBSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkVBSV9BR0FJTiIvPgotCQk8ZmllbGQgbmFtZT0iRUFJX0JBREZMQUdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFQUlfRkFJTCIvPgotCQk8ZmllbGQgbmFtZT0iRUFJX0ZBTUlMWSIvPgotCQk8ZmllbGQgbmFtZT0iRUFJX01FTU9SWSIvPgotCQk8ZmllbGQgbmFtZT0iRUFJX05PREFUQSIvPgotCQk8ZmllbGQgbmFtZT0iRUFJX05PTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iRUFJX09WRVJGTE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJFQUlfU0VSVklDRSIvPgotCQk8ZmllbGQgbmFtZT0iRUFJX1NPQ0tUWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFQUlfU1lTVEVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJFQUxSRUFEWSIvPgotCQk8ZmllbGQgbmFtZT0iRUJBREYiLz4KLQkJPGZpZWxkIG5hbWU9IkVCQURNU0ciLz4KLQkJPGZpZWxkIG5hbWU9IkVCVVNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFQ0FOQ0VMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVDSElMRCIvPgotCQk8ZmllbGQgbmFtZT0iRUNPTk5BQk9SVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFQ09OTlJFRlVTRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVDT05OUkVTRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVERUFETEsiLz4KLQkJPGZpZWxkIG5hbWU9IkVERVNUQUREUlJFUSIvPgotCQk8ZmllbGQgbmFtZT0iRURPTSIvPgotCQk8ZmllbGQgbmFtZT0iRURRVU9UIi8+Ci0JCTxmaWVsZCBuYW1lPSJFRVhJU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iRUZCSUciLz4KLQkJPGZpZWxkIG5hbWU9IkVIT1NUVU5SRUFDSCIvPgotCQk8ZmllbGQgbmFtZT0iRUlEUk0iLz4KLQkJPGZpZWxkIG5hbWU9IkVJTFNFUSIvPgotCQk8ZmllbGQgbmFtZT0iRUlOUFJPR1JFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkVJTlRSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFSU5WQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkVJTyIvPgotCQk8ZmllbGQgbmFtZT0iRUlTQ09OTiIvPgotCQk8ZmllbGQgbmFtZT0iRUlTRElSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTE9PUCIvPgotCQk8ZmllbGQgbmFtZT0iRU1GSUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTUxJTksiLz4KLQkJPGZpZWxkIG5hbWU9IkVNU0dTSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTVVMVElIT1AiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQU1FVE9PTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iRU5FVERPV04iLz4KLQkJPGZpZWxkIG5hbWU9IkVORVRSRVNFVCIvPgotCQk8ZmllbGQgbmFtZT0iRU5FVFVOUkVBQ0giLz4KLQkJPGZpZWxkIG5hbWU9IkVORklMRSIvPgotCQk8ZmllbGQgbmFtZT0iRU5PQlVGUyIvPgotCQk8ZmllbGQgbmFtZT0iRU5PREFUQSIvPgotCQk8ZmllbGQgbmFtZT0iRU5PREVWIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTk9FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOT0VYRUMiLz4KLQkJPGZpZWxkIG5hbWU9IkVOT0xDSyIvPgotCQk8ZmllbGQgbmFtZT0iRU5PTElOSyIvPgotCQk8ZmllbGQgbmFtZT0iRU5PTUVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTk9NU0ciLz4KLQkJPGZpZWxkIG5hbWU9IkVOT1BST1RPT1BUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTk9TUEMiLz4KLQkJPGZpZWxkIG5hbWU9IkVOT1NSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTk9TVFIiLz4KLQkJPGZpZWxkIG5hbWU9IkVOT1NZUyIvPgotCQk8ZmllbGQgbmFtZT0iRU5PVENPTk4iLz4KLQkJPGZpZWxkIG5hbWU9IkVOT1RESVIiLz4KLQkJPGZpZWxkIG5hbWU9IkVOT1RFTVBUWSIvPgotCQk8ZmllbGQgbmFtZT0iRU5PVFNPQ0siLz4KLQkJPGZpZWxkIG5hbWU9IkVOT1RTVVAiLz4KLQkJPGZpZWxkIG5hbWU9IkVOT1RUWSIvPgotCQk8ZmllbGQgbmFtZT0iRU5YSU8iLz4KLQkJPGZpZWxkIG5hbWU9IkVPUE5PVFNVUFAiLz4KLQkJPGZpZWxkIG5hbWU9IkVPVkVSRkxPVyIvPgotCQk8ZmllbGQgbmFtZT0iRVBFUk0iLz4KLQkJPGZpZWxkIG5hbWU9IkVQSVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUFJPVE8iLz4KLQkJPGZpZWxkIG5hbWU9IkVQUk9UT05PU1VQUE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iRVBST1RPVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRVJBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUk9GUyIvPgotCQk8ZmllbGQgbmFtZT0iRVNQSVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFU1JDSCIvPgotCQk8ZmllbGQgbmFtZT0iRVNUQUxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iRVRJTUVET1VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVFhUQlNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWERFViIvPgotCQk8ZmllbGQgbmFtZT0iRVhJVF9GQUlMVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWElUX1NVQ0NFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkZEX0NMT0VYRUMiLz4KLQkJPGZpZWxkIG5hbWU9IkZJT05SRUFEIi8+Ci0JCTxmaWVsZCBuYW1lPSJGX0RVUEZEIi8+Ci0JCTxmaWVsZCBuYW1lPSJGX0RVUEZEX0NMT0VYRUMiIHNpbmNlPSIyNyIvPgotCQk8ZmllbGQgbmFtZT0iRl9HRVRGRCIvPgotCQk8ZmllbGQgbmFtZT0iRl9HRVRGTCIvPgotCQk8ZmllbGQgbmFtZT0iRl9HRVRMSyIvPgotCQk8ZmllbGQgbmFtZT0iRl9HRVRMSzY0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGX0dFVE9XTiIvPgotCQk8ZmllbGQgbmFtZT0iRl9PSyIvPgotCQk8ZmllbGQgbmFtZT0iRl9SRExDSyIvPgotCQk8ZmllbGQgbmFtZT0iRl9TRVRGRCIvPgotCQk8ZmllbGQgbmFtZT0iRl9TRVRGTCIvPgotCQk8ZmllbGQgbmFtZT0iRl9TRVRMSyIvPgotCQk8ZmllbGQgbmFtZT0iRl9TRVRMSzY0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGX1NFVExLVyIvPgotCQk8ZmllbGQgbmFtZT0iRl9TRVRMS1c2NCIvPgotCQk8ZmllbGQgbmFtZT0iRl9TRVRPV04iLz4KLQkJPGZpZWxkIG5hbWU9IkZfVU5MQ0siLz4KLQkJPGZpZWxkIG5hbWU9IkZfV1JMQ0siLz4KLQkJPGZpZWxkIG5hbWU9IklGQV9GX0RBREZBSUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iSUZBX0ZfREVQUkVDQVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iSUZBX0ZfSE9NRUFERFJFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IklGQV9GX05PREFEIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRkFfRl9PUFRJTUlTVElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRkFfRl9QRVJNQU5FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IklGQV9GX1NFQ09OREFSWSIvPgotCQk8ZmllbGQgbmFtZT0iSUZBX0ZfVEVNUE9SQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRkFfRl9URU5UQVRJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IklGRl9BTExNVUxUSSIvPgotCQk8ZmllbGQgbmFtZT0iSUZGX0FVVE9NRURJQSIvPgotCQk8ZmllbGQgbmFtZT0iSUZGX0JST0FEQ0FTVCIvPgotCQk8ZmllbGQgbmFtZT0iSUZGX0RFQlVHIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRkZfRFlOQU1JQyIvPgotCQk8ZmllbGQgbmFtZT0iSUZGX0xPT1BCQUNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRkZfTUFTVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRkZfTVVMVElDQVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRkZfTk9BUlAiLz4KLQkJPGZpZWxkIG5hbWU9IklGRl9OT1RSQUlMRVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRkZfUE9JTlRPUE9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IklGRl9QT1JUU0VMIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRkZfUFJPTUlTQyIvPgotCQk8ZmllbGQgbmFtZT0iSUZGX1JVTk5JTkciLz4KLQkJPGZpZWxkIG5hbWU9IklGRl9TTEFWRSIvPgotCQk8ZmllbGQgbmFtZT0iSUZGX1VQIi8+Ci0JCTxmaWVsZCBuYW1lPSJJUFBST1RPX0lDTVAiLz4KLQkJPGZpZWxkIG5hbWU9IklQUFJPVE9fSUNNUFY2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJUFBST1RPX0lQIi8+Ci0JCTxmaWVsZCBuYW1lPSJJUFBST1RPX0lQVjYiLz4KLQkJPGZpZWxkIG5hbWU9IklQUFJPVE9fUkFXIi8+Ci0JCTxmaWVsZCBuYW1lPSJJUFBST1RPX1RDUCIvPgotCQk8ZmllbGQgbmFtZT0iSVBQUk9UT19VRFAiLz4KLQkJPGZpZWxkIG5hbWU9IklQVjZfQ0hFQ0tTVU0iLz4KLQkJPGZpZWxkIG5hbWU9IklQVjZfTVVMVElDQVNUX0hPUFMiLz4KLQkJPGZpZWxkIG5hbWU9IklQVjZfTVVMVElDQVNUX0lGIi8+Ci0JCTxmaWVsZCBuYW1lPSJJUFY2X01VTFRJQ0FTVF9MT09QIi8+Ci0JCTxmaWVsZCBuYW1lPSJJUFY2X1JFQ1ZEU1RPUFRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJJUFY2X1JFQ1ZIT1BMSU1JVCIvPgotCQk8ZmllbGQgbmFtZT0iSVBWNl9SRUNWSE9QT1BUUyIvPgotCQk8ZmllbGQgbmFtZT0iSVBWNl9SRUNWUEtUSU5GTyIvPgotCQk8ZmllbGQgbmFtZT0iSVBWNl9SRUNWUlRIRFIiLz4KLQkJPGZpZWxkIG5hbWU9IklQVjZfUkVDVlRDTEFTUyIvPgotCQk8ZmllbGQgbmFtZT0iSVBWNl9UQ0xBU1MiLz4KLQkJPGZpZWxkIG5hbWU9IklQVjZfVU5JQ0FTVF9IT1BTIi8+Ci0JCTxmaWVsZCBuYW1lPSJJUFY2X1Y2T05MWSIvPgotCQk8ZmllbGQgbmFtZT0iSVBfTVVMVElDQVNUX0lGIi8+Ci0JCTxmaWVsZCBuYW1lPSJJUF9NVUxUSUNBU1RfTE9PUCIvPgotCQk8ZmllbGQgbmFtZT0iSVBfTVVMVElDQVNUX1RUTCIvPgotCQk8ZmllbGQgbmFtZT0iSVBfVE9TIi8+Ci0JCTxmaWVsZCBuYW1lPSJJUF9UVEwiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BUF9GSVhFRCIvPgotCQk8ZmllbGQgbmFtZT0iTUFQX1BSSVZBVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BUF9TSEFSRUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1DQVNUX0JMT0NLX1NPVVJDRSIvPgotCQk8ZmllbGQgbmFtZT0iTUNBU1RfSk9JTl9HUk9VUCIvPgotCQk8ZmllbGQgbmFtZT0iTUNBU1RfSk9JTl9TT1VSQ0VfR1JPVVAiLz4KLQkJPGZpZWxkIG5hbWU9Ik1DQVNUX0xFQVZFX0dST1VQIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQ0FTVF9MRUFWRV9TT1VSQ0VfR1JPVVAiLz4KLQkJPGZpZWxkIG5hbWU9Ik1DQVNUX1VOQkxPQ0tfU09VUkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQ0xfQ1VSUkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iTUNMX0ZVVFVSRSIvPgotCQk8ZmllbGQgbmFtZT0iTVNHX0NUUlVOQyIvPgotCQk8ZmllbGQgbmFtZT0iTVNHX0RPTlRST1VURSIvPgotCQk8ZmllbGQgbmFtZT0iTVNHX0VPUiIvPgotCQk8ZmllbGQgbmFtZT0iTVNHX09PQiIvPgotCQk8ZmllbGQgbmFtZT0iTVNHX1BFRUsiLz4KLQkJPGZpZWxkIG5hbWU9Ik1TR19UUlVOQyIvPgotCQk8ZmllbGQgbmFtZT0iTVNHX1dBSVRBTEwiLz4KLQkJPGZpZWxkIG5hbWU9Ik1TX0FTWU5DIi8+Ci0JCTxmaWVsZCBuYW1lPSJNU19JTlZBTElEQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNU19TWU5DIi8+Ci0JCTxmaWVsZCBuYW1lPSJOSV9ER1JBTSIvPgotCQk8ZmllbGQgbmFtZT0iTklfTkFNRVJFUUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5JX05PRlFETiIvPgotCQk8ZmllbGQgbmFtZT0iTklfTlVNRVJJQ0hPU1QiLz4KLQkJPGZpZWxkIG5hbWU9Ik5JX05VTUVSSUNTRVJWIi8+Ci0JCTxmaWVsZCBuYW1lPSJPX0FDQ01PREUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9fQVBQRU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJPX0NMT0VYRUMiIHNpbmNlPSIyNyIvPgotCQk8ZmllbGQgbmFtZT0iT19DUkVBVCIvPgotCQk8ZmllbGQgbmFtZT0iT19EU1lOQyIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPX0VYQ0wiLz4KLQkJPGZpZWxkIG5hbWU9Ik9fTk9DVFRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJPX05PRk9MTE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJPX05PTkJMT0NLIi8+Ci0JCTxmaWVsZCBuYW1lPSJPX1JET05MWSIvPgotCQk8ZmllbGQgbmFtZT0iT19SRFdSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPX1NZTkMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9fVFJVTkMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9fV1JPTkxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT0xMRVJSIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT0xMSFVQIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT0xMSU4iLz4KLQkJPGZpZWxkIG5hbWU9IlBPTExOVkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT0xMT1VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT0xMUFJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT0xMUkRCQU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT0xMUkROT1JNIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT0xMV1JCQU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT0xMV1JOT1JNIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UX0VYRUMiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RfTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVF9SRUFEIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UX1dSSVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUl9HRVRfRFVNUEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlBSX1NFVF9EVU1QQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iUFJfU0VUX05PX05FV19QUklWUyIvPgotCQk8ZmllbGQgbmFtZT0iUlRfU0NPUEVfSE9TVCIvPgotCQk8ZmllbGQgbmFtZT0iUlRfU0NPUEVfTElOSyIvPgotCQk8ZmllbGQgbmFtZT0iUlRfU0NPUEVfTk9XSEVSRSIvPgotCQk8ZmllbGQgbmFtZT0iUlRfU0NPUEVfU0lURSIvPgotCQk8ZmllbGQgbmFtZT0iUlRfU0NPUEVfVU5JVkVSU0UiLz4KLQkJPGZpZWxkIG5hbWU9IlJfT0siLz4KLQkJPGZpZWxkIG5hbWU9IlNFRUtfQ1VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUVLX0VORCIvPgotCQk8ZmllbGQgbmFtZT0iU0VFS19TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IlNIVVRfUkQiLz4KLQkJPGZpZWxkIG5hbWU9IlNIVVRfUkRXUiIvPgotCQk8ZmllbGQgbmFtZT0iU0hVVF9XUiIvPgotCQk8ZmllbGQgbmFtZT0iU0lHQUJSVCIvPgotCQk8ZmllbGQgbmFtZT0iU0lHQUxSTSIvPgotCQk8ZmllbGQgbmFtZT0iU0lHQlVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdDSExEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdDT05UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdGUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR0hVUCIvPgotCQk8ZmllbGQgbmFtZT0iU0lHSUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdJTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR0lPIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdLSUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdQSVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdQUk9GIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdQV1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR1FVSVQiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR1JUTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdSVE1JTiIvPgotCQk8ZmllbGQgbmFtZT0iU0lHU0VHViIvPgotCQk8ZmllbGQgbmFtZT0iU0lHU1RLRkxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdTVE9QIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdTWVMiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR1RFUk0iLz4KLQkJPGZpZWxkIG5hbWU9IlNJR1RSQVAiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR1RTVFAiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR1RUSU4iLz4KLQkJPGZpZWxkIG5hbWU9IlNJR1RUT1UiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR1VSRyIvPgotCQk8ZmllbGQgbmFtZT0iU0lHVVNSMSIvPgotCQk8ZmllbGQgbmFtZT0iU0lHVVNSMiIvPgotCQk8ZmllbGQgbmFtZT0iU0lHVlRBTFJNIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdXSU5DSCIvPgotCQk8ZmllbGQgbmFtZT0iU0lHWENQVSIvPgotCQk8ZmllbGQgbmFtZT0iU0lHWEZTWiIvPgotCQk8ZmllbGQgbmFtZT0iU0lPQ0dJRkFERFIiLz4KLQkJPGZpZWxkIG5hbWU9IlNJT0NHSUZCUkRBRERSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSU9DR0lGRFNUQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iU0lPQ0dJRk5FVE1BU0siLz4KLQkJPGZpZWxkIG5hbWU9IlNPQ0tfREdSQU0iLz4KLQkJPGZpZWxkIG5hbWU9IlNPQ0tfUkFXIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT0NLX1NFUVBBQ0tFVCIvPgotCQk8ZmllbGQgbmFtZT0iU09DS19TVFJFQU0iLz4KLQkJPGZpZWxkIG5hbWU9IlNPTF9TT0NLRVQiLz4KLQkJPGZpZWxkIG5hbWU9IlNPX0JJTkRUT0RFVklDRSIvPgotCQk8ZmllbGQgbmFtZT0iU09fQlJPQURDQVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT19ERUJVRyIvPgotCQk8ZmllbGQgbmFtZT0iU09fRE9OVFJPVVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT19FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iU09fS0VFUEFMSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT19MSU5HRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNPX09PQklOTElORSIvPgotCQk8ZmllbGQgbmFtZT0iU09fUEFTU0NSRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNPX1BFRVJDUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT19SQ1ZCVUYiLz4KLQkJPGZpZWxkIG5hbWU9IlNPX1JDVkxPV0FUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT19SQ1ZUSU1FTyIvPgotCQk8ZmllbGQgbmFtZT0iU09fUkVVU0VBRERSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT19TTkRCVUYiLz4KLQkJPGZpZWxkIG5hbWU9IlNPX1NORExPV0FUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT19TTkRUSU1FTyIvPgotCQk8ZmllbGQgbmFtZT0iU09fVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RERVJSX0ZJTEVOTyIvPgotCQk8ZmllbGQgbmFtZT0iU1RESU5fRklMRU5PIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVERPVVRfRklMRU5PIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVF9NQU5ETE9DSyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVF9OT0FUSU1FIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNUX05PREVWIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNUX05PRElSQVRJTUUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU1RfTk9FWEVDIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNUX05PU1VJRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVF9SRE9OTFkiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU1RfUkVMQVRJTUUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU1RfU1lOQ0hST05PVVMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU19JRkJMSyIvPgotCQk8ZmllbGQgbmFtZT0iU19JRkNIUiIvPgotCQk8ZmllbGQgbmFtZT0iU19JRkRJUiIvPgotCQk8ZmllbGQgbmFtZT0iU19JRklGTyIvPgotCQk8ZmllbGQgbmFtZT0iU19JRkxOSyIvPgotCQk8ZmllbGQgbmFtZT0iU19JRk1UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTX0lGUkVHIi8+Ci0JCTxmaWVsZCBuYW1lPSJTX0lGU09DSyIvPgotCQk8ZmllbGQgbmFtZT0iU19JUkdSUCIvPgotCQk8ZmllbGQgbmFtZT0iU19JUk9USCIvPgotCQk8ZmllbGQgbmFtZT0iU19JUlVTUiIvPgotCQk8ZmllbGQgbmFtZT0iU19JUldYRyIvPgotCQk8ZmllbGQgbmFtZT0iU19JUldYTyIvPgotCQk8ZmllbGQgbmFtZT0iU19JUldYVSIvPgotCQk8ZmllbGQgbmFtZT0iU19JU0dJRCIvPgotCQk8ZmllbGQgbmFtZT0iU19JU1VJRCIvPgotCQk8ZmllbGQgbmFtZT0iU19JU1ZUWCIvPgotCQk8ZmllbGQgbmFtZT0iU19JV0dSUCIvPgotCQk8ZmllbGQgbmFtZT0iU19JV09USCIvPgotCQk8ZmllbGQgbmFtZT0iU19JV1VTUiIvPgotCQk8ZmllbGQgbmFtZT0iU19JWEdSUCIvPgotCQk8ZmllbGQgbmFtZT0iU19JWE9USCIvPgotCQk8ZmllbGQgbmFtZT0iU19JWFVTUiIvPgotCQk8ZmllbGQgbmFtZT0iVENQX05PREVMQVkiLz4KLQkJPGZpZWxkIG5hbWU9IlRDUF9VU0VSX1RJTUVPVVQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iV0NPTlRJTlVFRCIvPgotCQk8ZmllbGQgbmFtZT0iV0VYSVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iV05PSEFORyIvPgotCQk8ZmllbGQgbmFtZT0iV05PV0FJVCIvPgotCQk8ZmllbGQgbmFtZT0iV1NUT1BQRUQiLz4KLQkJPGZpZWxkIG5hbWU9IldVTlRSQUNFRCIvPgotCQk8ZmllbGQgbmFtZT0iV19PSyIvPgotCQk8ZmllbGQgbmFtZT0iWF9PSyIvPgotCQk8ZmllbGQgbmFtZT0iX1NDXzJfQ0hBUl9URVJNIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfMl9DX0JJTkQiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ18yX0NfREVWIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfMl9DX1ZFUlNJT04iLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ18yX0ZPUlRfREVWIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfMl9GT1JUX1JVTiIvPgotCQk8ZmllbGQgbmFtZT0iX1NDXzJfTE9DQUxFREVGIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfMl9TV19ERVYiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ18yX1VQRSIvPgotCQk8ZmllbGQgbmFtZT0iX1NDXzJfVkVSU0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX0FJT19MSVNUSU9fTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfQUlPX01BWCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX0FJT19QUklPX0RFTFRBX01BWCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX0FSR19NQVgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19BU1lOQ0hST05PVVNfSU8iLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19BVEVYSVRfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfQVZQSFlTX1BBR0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfQkNfQkFTRV9NQVgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19CQ19ESU1fTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfQkNfU0NBTEVfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfQkNfU1RSSU5HX01BWCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX0NISUxEX01BWCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX0NMS19UQ0siLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19DT0xMX1dFSUdIVFNfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfREVMQVlUSU1FUl9NQVgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19FWFBSX05FU1RfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfRlNZTkMiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19HRVRHUl9SX1NJWkVfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfR0VUUFdfUl9TSVpFX01BWCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX0lPVl9NQVgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19KT0JfQ09OVFJPTCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX0xJTkVfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfTE9HSU5fTkFNRV9NQVgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19NQVBQRURfRklMRVMiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19NRU1MT0NLIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfTUVNTE9DS19SQU5HRSIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX01FTU9SWV9QUk9URUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfTUVTU0FHRV9QQVNTSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfTVFfT1BFTl9NQVgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19NUV9QUklPX01BWCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX05HUk9VUFNfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfTlBST0NFU1NPUlNfQ09ORiIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX05QUk9DRVNTT1JTX09OTE4iLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19PUEVOX01BWCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1BBR0VTSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfUEFHRV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfUEFTU19NQVgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19QSFlTX1BBR0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfUFJJT1JJVElaRURfSU8iLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19QUklPUklUWV9TQ0hFRFVMSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfUkVBTFRJTUVfU0lHTkFMUyIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1JFX0RVUF9NQVgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19SVFNJR19NQVgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19TQVZFRF9JRFMiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19TRU1BUEhPUkVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfU0VNX05TRU1TX01BWCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1NFTV9WQUxVRV9NQVgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19TSUdRVUVVRV9NQVgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19TVFJFQU1fTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfU1lOQ0hST05JWkVEX0lPIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfVEhSRUFEUyIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19USFJFQURfS0VZU19NQVgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORyIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19USFJFQURfUFJJT19QUk9URUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfVEhSRUFEX1NUQUNLX01JTiIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1RIUkVBRF9USFJFQURTX01BWCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1RJTUVSUyIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1RJTUVSX01BWCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1RUWV9OQU1FX01BWCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1RaTkFNRV9NQVgiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19WRVJTSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfWEJTNV9JTFAzMl9PRkYzMiIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1hCUzVfSUxQMzJfT0ZGQklHIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfWEJTNV9MUDY0X09GRjY0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfWEJTNV9MUEJJR19PRkZCSUciLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19YT1BFTl9DUllQVCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1hPUEVOX0VOSF9JMThOIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfWE9QRU5fTEVHQUNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfWE9QRU5fUkVBTFRJTUUiLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19YT1BFTl9SRUFMVElNRV9USFJFQURTIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfWE9QRU5fU0hNIi8+Ci0JCTxmaWVsZCBuYW1lPSJfU0NfWE9QRU5fVU5JWCIvPgotCQk8ZmllbGQgbmFtZT0iX1NDX1hPUEVOX1ZFUlNJT04iLz4KLQkJPGZpZWxkIG5hbWU9Il9TQ19YT1BFTl9YQ1VfVkVSU0lPTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc3lzdGVtL1N0cnVjdFBvbGxmZCIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iZXZlbnRzIi8+Ci0JCTxmaWVsZCBuYW1lPSJmZCIvPgotCQk8ZmllbGQgbmFtZT0icmV2ZW50cyIvPgotCQk8ZmllbGQgbmFtZT0idXNlckRhdGEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3N5c3RlbS9TdHJ1Y3RTdGF0IiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpKSUpJSUpKSkpKSkopViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKSklKSUlKSkxhbmRyb2lkL3N5c3RlbS9TdHJ1Y3RUaW1lc3BlYztMYW5kcm9pZC9zeXN0ZW0vU3RydWN0VGltZXNwZWM7TGFuZHJvaWQvc3lzdGVtL1N0cnVjdFRpbWVzcGVjO0pKKVYiIHNpbmNlPSIyNyIvPgotCQk8ZmllbGQgbmFtZT0ic3RfYXRpbSIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzdF9hdGltZSIvPgotCQk8ZmllbGQgbmFtZT0ic3RfYmxrc2l6ZSIvPgotCQk8ZmllbGQgbmFtZT0ic3RfYmxvY2tzIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdF9jdGltIiBzaW5jZT0iMjciLz4KLQkJPGZpZWxkIG5hbWU9InN0X2N0aW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdF9kZXYiLz4KLQkJPGZpZWxkIG5hbWU9InN0X2dpZCIvPgotCQk8ZmllbGQgbmFtZT0ic3RfaW5vIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdF9tb2RlIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdF9tdGltIiBzaW5jZT0iMjciLz4KLQkJPGZpZWxkIG5hbWU9InN0X210aW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJzdF9ubGluayIvPgotCQk8ZmllbGQgbmFtZT0ic3RfcmRldiIvPgotCQk8ZmllbGQgbmFtZT0ic3Rfc2l6ZSIvPgotCQk8ZmllbGQgbmFtZT0ic3RfdWlkIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC9zeXN0ZW0vU3RydWN0U3RhdFZmcyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKSkpKSkpKSkpKSilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJmX2JhdmFpbCIvPgotCQk8ZmllbGQgbmFtZT0iZl9iZnJlZSIvPgotCQk8ZmllbGQgbmFtZT0iZl9ibG9ja3MiLz4KLQkJPGZpZWxkIG5hbWU9ImZfYnNpemUiLz4KLQkJPGZpZWxkIG5hbWU9ImZfZmF2YWlsIi8+Ci0JCTxmaWVsZCBuYW1lPSJmX2ZmcmVlIi8+Ci0JCTxmaWVsZCBuYW1lPSJmX2ZpbGVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJmX2ZsYWciLz4KLQkJPGZpZWxkIG5hbWU9ImZfZnJzaXplIi8+Ci0JCTxmaWVsZCBuYW1lPSJmX2ZzaWQiLz4KLQkJPGZpZWxkIG5hbWU9ImZfbmFtZW1heCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvc3lzdGVtL1N0cnVjdFRpbWVzcGVjIiBzaW5jZT0iMjciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGFuZHJvaWQvc3lzdGVtL1N0cnVjdFRpbWVzcGVjOylJIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0dl9uc2VjIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0dl9zZWMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3N5c3RlbS9TdHJ1Y3RVdHNuYW1lIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJtYWNoaW5lIi8+Ci0JCTxmaWVsZCBuYW1lPSJub2RlbmFtZSIvPgotCQk8ZmllbGQgbmFtZT0icmVsZWFzZSIvPgotCQk8ZmllbGQgbmFtZT0ic3lzbmFtZSIvPgotCQk8ZmllbGQgbmFtZT0idmVyc2lvbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZWNvbS9DYWxsIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYW5zd2VyKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbmZlcmVuY2UoTGFuZHJvaWQvdGVsZWNvbS9DYWxsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVmbGVjdChMYW5kcm9pZC9uZXQvVXJpOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNjb25uZWN0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FubmVkVGV4dFJlc3BvbnNlcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkcmVuKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uZmVyZW5jZWFibGVDYWxscygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldGFpbHMoKUxhbmRyb2lkL3RlbGVjb20vQ2FsbCREZXRhaWxzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmVudCgpTGFuZHJvaWQvdGVsZWNvbS9DYWxsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlbWFpbmluZ1Bvc3REaWFsU2VxdWVuY2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJ0dENhbGwoKUxhbmRyb2lkL3RlbGVjb20vQ2FsbCRSdHRDYWxsOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWRlb0NhbGwoKUxhbmRyb2lkL3RlbGVjb20vSW5DYWxsU2VydmljZSRWaWRlb0NhbGw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZG92ZXJUbyhMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTtJTGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJob2xkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSdHRBY3RpdmUoKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im1lcmdlQ29uZmVyZW5jZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InBob25lQWNjb3VudFNlbGVjdGVkKExhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50SGFuZGxlO1opViIvPgotCQk8bWV0aG9kIG5hbWU9InBsYXlEdG1mVG9uZShDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0RGlhbENvbnRpbnVlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InB1bGxFeHRlcm5hbENhbGwoKVYiIHNpbmNlPSIyNSIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEV4dHJhcyhMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyNSIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQ2FsbGJhY2soTGFuZHJvaWQvdGVsZWNvbS9DYWxsJENhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJDYWxsYmFjayhMYW5kcm9pZC90ZWxlY29tL0NhbGwkQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlamVjdChaTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVFeHRyYXMoTGphdmEvdXRpbC9MaXN0OylWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVFeHRyYXMoW0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNwb25kVG9SdHRSZXF1ZXN0KElaKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRDYWxsRXZlbnQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kUnR0UmVxdWVzdCgpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BsaXRGcm9tQ29uZmVyZW5jZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BEdG1mVG9uZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BSdHQoKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InN3YXBDb25mZXJlbmNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5ob2xkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckNhbGxiYWNrKExhbmRyb2lkL3RlbGVjb20vQ2FsbCRDYWxsYmFjazspViIvPgotCQk8ZmllbGQgbmFtZT0iQVZBSUxBQkxFX1BIT05FX0FDQ09VTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9MQVNUX0VNRVJHRU5DWV9DQUxMQkFDS19USU1FX01JTExJUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9BQ1RJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0NPTk5FQ1RJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0RJQUxJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0RJU0NPTk5FQ1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfRElTQ09OTkVDVElORyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfSE9MRElORyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfTkVXIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9QVUxMSU5HX0NBTEwiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfUklOR0lORyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfU0VMRUNUX1BIT05FX0FDQ09VTlQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vQ2FsbCRDYWxsYmFjayIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FsbERlc3Ryb3llZChMYW5kcm9pZC90ZWxlY29tL0NhbGw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbm5lZFRleHRSZXNwb25zZXNMb2FkZWQoTGFuZHJvaWQvdGVsZWNvbS9DYWxsO0xqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2hpbGRyZW5DaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vQ2FsbDtMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbmZlcmVuY2VhYmxlQ2FsbHNDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vQ2FsbDtMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbm5lY3Rpb25FdmVudChMYW5kcm9pZC90ZWxlY29tL0NhbGw7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRldGFpbHNDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vQ2FsbDtMYW5kcm9pZC90ZWxlY29tL0NhbGwkRGV0YWlsczspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSGFuZG92ZXJDb21wbGV0ZShMYW5kcm9pZC90ZWxlY29tL0NhbGw7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSGFuZG92ZXJGYWlsZWQoTGFuZHJvaWQvdGVsZWNvbS9DYWxsO0kpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYXJlbnRDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vQ2FsbDtMYW5kcm9pZC90ZWxlY29tL0NhbGw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBvc3REaWFsV2FpdChMYW5kcm9pZC90ZWxlY29tL0NhbGw7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJ0dEluaXRpYXRpb25GYWlsdXJlKExhbmRyb2lkL3RlbGVjb20vQ2FsbDtJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUnR0TW9kZUNoYW5nZWQoTGFuZHJvaWQvdGVsZWNvbS9DYWxsO0kpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25SdHRSZXF1ZXN0KExhbmRyb2lkL3RlbGVjb20vQ2FsbDtJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUnR0U3RhdHVzQ2hhbmdlZChMYW5kcm9pZC90ZWxlY29tL0NhbGw7WkxhbmRyb2lkL3RlbGVjb20vQ2FsbCRSdHRDYWxsOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXRlQ2hhbmdlZChMYW5kcm9pZC90ZWxlY29tL0NhbGw7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25WaWRlb0NhbGxDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vQ2FsbDtMYW5kcm9pZC90ZWxlY29tL0luQ2FsbFNlcnZpY2UkVmlkZW9DYWxsOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQU5ET1ZFUl9GQUlMVVJFX0RFU1RfQVBQX1JFSkVDVEVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTkRPVkVSX0ZBSUxVUkVfTk9UX1NVUFBPUlRFRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIQU5ET1ZFUl9GQUlMVVJFX09OR09JTkdfRU1FUkdFTkNZX0NBTEwiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iSEFORE9WRVJfRkFJTFVSRV9VTktOT1dOIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTkRPVkVSX0ZBSUxVUkVfVVNFUl9SRUpFQ1RFRCIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlY29tL0NhbGwkRGV0YWlscyIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvbmV0L1VyaTtJTGphdmEvbGFuZy9TdHJpbmc7SUxhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50SGFuZGxlO0lJTGFuZHJvaWQvdGVsZWNvbS9EaXNjb25uZWN0Q2F1c2U7SkxhbmRyb2lkL3RlbGVjb20vR2F0ZXdheUluZm87SUxhbmRyb2lkL3RlbGVjb20vU3RhdHVzSGludHM7TGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL29zL0J1bmRsZTtKKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW4oSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNhcGFiaWxpdGllc1RvU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNjb3VudEhhbmRsZSgpTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnRIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FsbENhcGFiaWxpdGllcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGxQcm9wZXJ0aWVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FsbGVyRGlzcGxheU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGxlckRpc3BsYXlOYW1lUHJlc2VudGF0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ubmVjdFRpbWVNaWxsaXMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDcmVhdGlvblRpbWVNaWxsaXMoKUoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc2Nvbm5lY3RDYXVzZSgpTGFuZHJvaWQvdGVsZWNvbS9EaXNjb25uZWN0Q2F1c2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2F0ZXdheUluZm8oKUxhbmRyb2lkL3RlbGVjb20vR2F0ZXdheUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGFuZGxlKClMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhhbmRsZVByZXNlbnRhdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVudEV4dHJhcygpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXR1c0hpbnRzKClMYW5kcm9pZC90ZWxlY29tL1N0YXR1c0hpbnRzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZGVvU3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNQcm9wZXJ0eShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNQcm9wZXJ0eShJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJvcGVydGllc1RvU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX0NBTk5PVF9ET1dOR1JBREVfVklERU9fVE9fQVVESU8iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9DQU5fUEFVU0VfVklERU8iLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfQ0FOX1BVTExfQ0FMTCIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX0RJU0NPTk5FQ1RfRlJPTV9DT05GRVJFTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX0hPTEQiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfTUFOQUdFX0NPTkZFUkVOQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfTUVSR0VfQ09ORkVSRU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9NVVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX1JFU1BPTkRfVklBX1RFWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfU0VQQVJBVEVfRlJPTV9DT05GRVJFTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX1NVUFBPUlRTX1ZUX0xPQ0FMX0JJRElSRUNUSU9OQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfU1VQUE9SVFNfVlRfTE9DQUxfUlgiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfU1VQUE9SVFNfVlRfTE9DQUxfVFgiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfU1VQUE9SVFNfVlRfUkVNT1RFX0JJRElSRUNUSU9OQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfU1VQUE9SVFNfVlRfUkVNT1RFX1JYIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX1NVUFBPUlRTX1ZUX1JFTU9URV9UWCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9TVVBQT1JUX0RFRkxFQ1QiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9TVVBQT1JUX0hPTEQiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfU1dBUF9DT05GRVJFTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9DT05GRVJFTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9FTUVSR0VOQ1lfQ0FMTEJBQ0tfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfRU5URVJQUklTRV9DQUxMIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1BFUlRZX0dFTkVSSUNfQ09ORkVSRU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfSEFTX0NETUFfVk9JQ0VfUFJJVkFDWSIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9ISUdIX0RFRl9BVURJTyIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfSVNfRVhURVJOQUxfQ0FMTCIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9SVFQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfU0VMRl9NQU5BR0VEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1BFUlRZX1dJRkkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vQ2FsbCRSdHRDYWxsIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnR0QXVkaW9Nb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEltbWVkaWF0ZWx5KClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJ0dE1vZGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IlJUVF9NT0RFX0ZVTEwiLz4KLQkJPGZpZWxkIG5hbWU9IlJUVF9NT0RFX0hDTyIvPgotCQk8ZmllbGQgbmFtZT0iUlRUX01PREVfVkNPIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlY29tL0NhbGxBdWRpb1N0YXRlIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihaSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImF1ZGlvUm91dGVUb1N0cmluZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2ZUJsdWV0b290aERldmljZSgpTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvdXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VwcG9ydGVkQmx1ZXRvb3RoRGV2aWNlcygpTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VwcG9ydGVkUm91dGVNYXNrKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNNdXRlZCgpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iUk9VVEVfQkxVRVRPT1RIIi8+Ci0JCTxmaWVsZCBuYW1lPSJST1VURV9FQVJQSUVDRSIvPgotCQk8ZmllbGQgbmFtZT0iUk9VVEVfU1BFQUtFUiIvPgotCQk8ZmllbGQgbmFtZT0iUk9VVEVfV0lSRURfSEVBRFNFVCIvPgotCQk8ZmllbGQgbmFtZT0iUk9VVEVfV0lSRURfT1JfRUFSUElFQ0UiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vQ2FsbFNjcmVlbmluZ1NlcnZpY2UiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNjcmVlbkNhbGwoTGFuZHJvaWQvdGVsZWNvbS9DYWxsJERldGFpbHM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNwb25kVG9DYWxsKExhbmRyb2lkL3RlbGVjb20vQ2FsbCREZXRhaWxzO0xhbmRyb2lkL3RlbGVjb20vQ2FsbFNjcmVlbmluZ1NlcnZpY2UkQ2FsbFJlc3BvbnNlOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWSUNFX0lOVEVSRkFDRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZWNvbS9DYWxsU2NyZWVuaW5nU2VydmljZSRDYWxsUmVzcG9uc2UiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFpaWlopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzYWxsb3dDYWxsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVqZWN0Q2FsbCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNraXBDYWxsTG9nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2tpcE5vdGlmaWNhdGlvbigpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZWNvbS9DYWxsU2NyZWVuaW5nU2VydmljZSRDYWxsUmVzcG9uc2UkQnVpbGRlciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC90ZWxlY29tL0NhbGxTY3JlZW5pbmdTZXJ2aWNlJENhbGxSZXNwb25zZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaXNhbGxvd0NhbGwoWilMYW5kcm9pZC90ZWxlY29tL0NhbGxTY3JlZW5pbmdTZXJ2aWNlJENhbGxSZXNwb25zZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlamVjdENhbGwoWilMYW5kcm9pZC90ZWxlY29tL0NhbGxTY3JlZW5pbmdTZXJ2aWNlJENhbGxSZXNwb25zZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNraXBDYWxsTG9nKFopTGFuZHJvaWQvdGVsZWNvbS9DYWxsU2NyZWVuaW5nU2VydmljZSRDYWxsUmVzcG9uc2UkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTa2lwTm90aWZpY2F0aW9uKFopTGFuZHJvaWQvdGVsZWNvbS9DYWxsU2NyZWVuaW5nU2VydmljZSRDYWxsUmVzcG9uc2UkQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vQ29uZmVyZW5jZSIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZWxlY29tL0NvbmZlcmVuY2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50SGFuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQ29ubmVjdGlvbihMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb247KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXN0cm95KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FsbEF1ZGlvU3RhdGUoKUxhbmRyb2lkL3RlbGVjb20vQ2FsbEF1ZGlvU3RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uZmVyZW5jZWFibGVDb25uZWN0aW9ucygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb25DYXBhYmlsaXRpZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25uZWN0aW9uUHJvcGVydGllcygpSSIgc2luY2U9IjI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ubmVjdGlvblRpbWUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25uZWN0aW9ucygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc2Nvbm5lY3RDYXVzZSgpTGFuZHJvaWQvdGVsZWNvbS9EaXNjb25uZWN0Q2F1c2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGhvbmVBY2NvdW50SGFuZGxlKClMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXR1c0hpbnRzKClMYW5kcm9pZC90ZWxlY29tL1N0YXR1c0hpbnRzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZGVvUHJvdmlkZXIoKUxhbmRyb2lkL3RlbGVjb20vQ29ubmVjdGlvbiRWaWRlb1Byb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZGVvU3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbGxBdWRpb1N0YXRlQ2hhbmdlZChMYW5kcm9pZC90ZWxlY29tL0NhbGxBdWRpb1N0YXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db25uZWN0aW9uQWRkZWQoTGFuZHJvaWQvdGVsZWNvbS9Db25uZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EaXNjb25uZWN0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25FeHRyYXNDaGFuZ2VkKExhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Ib2xkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25NZXJnZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTWVyZ2UoTGFuZHJvaWQvdGVsZWNvbS9Db25uZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QbGF5RHRtZlRvbmUoQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXBhcmF0ZShMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0b3BEdG1mVG9uZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3dhcCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVW5ob2xkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RXh0cmFzKExhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQ29ubmVjdGlvbihMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVFeHRyYXMoTGphdmEvdXRpbC9MaXN0OylWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVFeHRyYXMoW0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBY3RpdmUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb25mZXJlbmNlYWJsZUNvbm5lY3Rpb25zKExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbm5lY3Rpb25DYXBhYmlsaXRpZXMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29ubmVjdGlvblByb3BlcnRpZXMoSSlWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb25uZWN0aW9uU3RhcnRFbGFwc2VkUmVhbFRpbWUoSilWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb25uZWN0aW9uVGltZShKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaWFsaW5nKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlzY29ubmVjdGVkKExhbmRyb2lkL3RlbGVjb20vRGlzY29ubmVjdENhdXNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXh0cmFzKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uSG9sZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXR1c0hpbnRzKExhbmRyb2lkL3RlbGVjb20vU3RhdHVzSGludHM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWRlb1Byb3ZpZGVyKExhbmRyb2lkL3RlbGVjb20vQ29ubmVjdGlvbjtMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb24kVmlkZW9Qcm92aWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpZGVvU3RhdGUoTGFuZHJvaWQvdGVsZWNvbS9Db25uZWN0aW9uO0kpViIvPgotCQk8ZmllbGQgbmFtZT0iQ09OTkVDVF9USU1FX05PVF9TUEVDSUZJRUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vQ29uZmVyZW5jZWFibGUiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vQ29ubmVjdGlvbiIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZWxlY29tL0NvbmZlcmVuY2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FwYWJpbGl0aWVzVG9TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDYW5jZWxlZENvbm5lY3Rpb24oKUxhbmRyb2lkL3RlbGVjb20vQ29ubmVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGYWlsZWRDb25uZWN0aW9uKExhbmRyb2lkL3RlbGVjb20vRGlzY29ubmVjdENhdXNlOylMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVzdHJveSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkZHJlc3MoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWRkcmVzc1ByZXNlbnRhdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1ZGlvTW9kZUlzVm9pcCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGxBdWRpb1N0YXRlKClMYW5kcm9pZC90ZWxlY29tL0NhbGxBdWRpb1N0YXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGxlckRpc3BsYXlOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxsZXJEaXNwbGF5TmFtZVByZXNlbnRhdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbmZlcmVuY2UoKUxhbmRyb2lkL3RlbGVjb20vQ29uZmVyZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25mZXJlbmNlYWJsZXMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25uZWN0aW9uQ2FwYWJpbGl0aWVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ubmVjdGlvblByb3BlcnRpZXMoKUkiIHNpbmNlPSIyNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc2Nvbm5lY3RDYXVzZSgpTGFuZHJvaWQvdGVsZWNvbS9EaXNjb25uZWN0Q2F1c2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0dXNIaW50cygpTGFuZHJvaWQvdGVsZWNvbS9TdGF0dXNIaW50czsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWRlb1Byb3ZpZGVyKClMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb24kVmlkZW9Qcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVSdHRVcGdyYWRlUmVzcG9uc2UoTGFuZHJvaWQvdGVsZWNvbS9Db25uZWN0aW9uJFJ0dFRleHRTdHJlYW07KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmluZ2JhY2tSZXF1ZXN0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFib3J0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BbnN3ZXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFuc3dlcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbGxBdWRpb1N0YXRlQ2hhbmdlZChMYW5kcm9pZC90ZWxlY29tL0NhbGxBdWRpb1N0YXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYWxsRXZlbnQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRlZmxlY3QoTGFuZHJvaWQvbmV0L1VyaTspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25EaXNjb25uZWN0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25FeHRyYXNDaGFuZ2VkKExhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25IYW5kb3ZlckNvbXBsZXRlKClWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkhvbGQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBsYXlEdG1mVG9uZShDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBvc3REaWFsQ29udGludWUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QdWxsRXh0ZXJuYWxDYWxsKClWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlamVjdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVqZWN0KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlcGFyYXRlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TaG93SW5jb21pbmdDYWxsVWkoKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2lsZW5jZSgpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGFydFJ0dChMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb24kUnR0VGV4dFN0cmVhbTspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGF0ZUNoYW5nZWQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdG9wRHRtZlRvbmUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0b3BSdHQoKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVW5ob2xkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJvcGVydGllc1RvU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRFeHRyYXMoTGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVFeHRyYXMoTGphdmEvdXRpbC9MaXN0OylWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVFeHRyYXMoW0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Qmx1ZXRvb3RoQXVkaW8oTGFuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZTspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZENvbm5lY3Rpb25FdmVudChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyNSIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRSZW1vdGVSdHRSZXF1ZXN0KClWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kUnR0SW5pdGlhdGlvbkZhaWx1cmUoSSlWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kUnR0SW5pdGlhdGlvblN1Y2Nlc3MoKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRSdHRTZXNzaW9uUmVtb3RlbHlUZXJtaW5hdGVkKClWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBY3RpdmUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBZGRyZXNzKExhbmRyb2lkL25ldC9Vcmk7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXVkaW9Nb2RlSXNWb2lwKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1ZGlvUm91dGUoSSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYWxsZXJEaXNwbGF5TmFtZShMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb25mZXJlbmNlYWJsZUNvbm5lY3Rpb25zKExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbmZlcmVuY2VhYmxlcyhMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb25uZWN0aW9uQ2FwYWJpbGl0aWVzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbm5lY3Rpb25Qcm9wZXJ0aWVzKEkpViIgc2luY2U9IjI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlhbGluZygpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc2Nvbm5lY3RlZChMYW5kcm9pZC90ZWxlY29tL0Rpc2Nvbm5lY3RDYXVzZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dHJhcyhMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbml0aWFsaXplZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluaXRpYWxpemluZygpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5leHRQb3N0RGlhbENoYXIoQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25Ib2xkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9zdERpYWxXYWl0KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHVsbGluZygpViIgc2luY2U9IjI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmluZ2JhY2tSZXF1ZXN0ZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmluZ2luZygpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXR1c0hpbnRzKExhbmRyb2lkL3RlbGVjb20vU3RhdHVzSGludHM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWRlb1Byb3ZpZGVyKExhbmRyb2lkL3RlbGVjb20vQ29ubmVjdGlvbiRWaWRlb1Byb3ZpZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlkZW9TdGF0ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGF0ZVRvU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX0NBTk5PVF9ET1dOR1JBREVfVklERU9fVE9fQVVESU8iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9DQU5fUEFVU0VfVklERU8iLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfQ0FOX1BVTExfQ0FMTCIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX0NBTl9TRU5EX1JFU1BPTlNFX1ZJQV9DT05ORUNUSU9OIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfQ0FOX1VQR1JBREVfVE9fVklERU8iLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfRElTQ09OTkVDVF9GUk9NX0NPTkZFUkVOQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfSE9MRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9NQU5BR0VfQ09ORkVSRU5DRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9NRVJHRV9DT05GRVJFTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX01VVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfUkVTUE9ORF9WSUFfVEVYVCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9TRVBBUkFURV9GUk9NX0NPTkZFUkVOQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfU1VQUE9SVFNfVlRfTE9DQUxfQklESVJFQ1RJT05BTCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9TVVBQT1JUU19WVF9MT0NBTF9SWCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9TVVBQT1JUU19WVF9MT0NBTF9UWCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9TVVBQT1JUU19WVF9SRU1PVEVfQklESVJFQ1RJT05BTCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9TVVBQT1JUU19WVF9SRU1PVEVfUlgiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfU1VQUE9SVFNfVlRfUkVNT1RFX1RYIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX1NVUFBPUlRfREVGTEVDVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX1NVUFBPUlRfSE9MRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9TV0FQX0NPTkZFUkVOQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVWRU5UX0NBTExfTUVSR0VfRkFJTEVEIiBzaW5jZT0iMjUiLz4KLQkJPGZpZWxkIG5hbWU9IkVWRU5UX0NBTExfUFVMTF9GQUlMRUQiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQU5TV0VSSU5HX0RST1BTX0ZHX0NBTEwiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQU5TV0VSSU5HX0RST1BTX0ZHX0NBTExfQVBQX05BTUUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0FMTF9TVUJKRUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DSElMRF9BRERSRVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9MQVNUX0ZPUldBUkRFRF9OVU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1BFUlRZX0hBU19DRE1BX1ZPSUNFX1BSSVZBQ1kiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfSVNfRVhURVJOQUxfQ0FMTCIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9JU19SVFQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfU0VMRl9NQU5BR0VEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0FDVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfRElBTElORyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfRElTQ09OTkVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9IT0xESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9JTklUSUFMSVpJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX05FVyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfUFVMTElOR19DQUxMIiBzaW5jZT0iMjUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX1JJTkdJTkciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vQ29ubmVjdGlvbiRSdHRNb2RpZnlTdGF0dXMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFU1NJT05fTU9ESUZZX1JFUVVFU1RfRkFJTCIvPgotCQk8ZmllbGQgbmFtZT0iU0VTU0lPTl9NT0RJRllfUkVRVUVTVF9JTlZBTElEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVNTSU9OX01PRElGWV9SRVFVRVNUX1JFSkVDVEVEX0JZX1JFTU9URSIvPgotCQk8ZmllbGQgbmFtZT0iU0VTU0lPTl9NT0RJRllfUkVRVUVTVF9TVUNDRVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVNTSU9OX01PRElGWV9SRVFVRVNUX1RJTUVEX09VVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZWNvbS9Db25uZWN0aW9uJFJ0dFRleHRTdHJlYW0iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yO0xhbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkSW1tZWRpYXRlbHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb24kVmlkZW9Qcm92aWRlciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoYW5nZUNhbWVyYUNhcGFiaWxpdGllcyhMYW5kcm9pZC90ZWxlY29tL1ZpZGVvUHJvZmlsZSRDYW1lcmFDYXBhYmlsaXRpZXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFuZ2VQZWVyRGltZW5zaW9ucyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hhbmdlVmlkZW9RdWFsaXR5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZUNhbGxTZXNzaW9uRXZlbnQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXF1ZXN0Q2FtZXJhQ2FwYWJpbGl0aWVzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXF1ZXN0Q29ubmVjdGlvbkRhdGFVc2FnZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2VuZFNlc3Npb25Nb2RpZnlSZXF1ZXN0KExhbmRyb2lkL3RlbGVjb20vVmlkZW9Qcm9maWxlO0xhbmRyb2lkL3RlbGVjb20vVmlkZW9Qcm9maWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZW5kU2Vzc2lvbk1vZGlmeVJlc3BvbnNlKExhbmRyb2lkL3RlbGVjb20vVmlkZW9Qcm9maWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXRDYW1lcmEoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNldERldmljZU9yaWVudGF0aW9uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2V0RGlzcGxheVN1cmZhY2UoTGFuZHJvaWQvdmlldy9TdXJmYWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXRQYXVzZUltYWdlKExhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNldFByZXZpZXdTdXJmYWNlKExhbmRyb2lkL3ZpZXcvU3VyZmFjZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2V0Wm9vbShGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWNlaXZlU2Vzc2lvbk1vZGlmeVJlcXVlc3QoTGFuZHJvaWQvdGVsZWNvbS9WaWRlb1Byb2ZpbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWNlaXZlU2Vzc2lvbk1vZGlmeVJlc3BvbnNlKElMYW5kcm9pZC90ZWxlY29tL1ZpZGVvUHJvZmlsZTtMYW5kcm9pZC90ZWxlY29tL1ZpZGVvUHJvZmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbGxEYXRhVXNhZ2UoSilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVNTSU9OX0VWRU5UX0NBTUVSQV9GQUlMVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVNTSU9OX0VWRU5UX0NBTUVSQV9QRVJNSVNTSU9OX0VSUk9SIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFU1NJT05fRVZFTlRfQ0FNRVJBX1JFQURZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVNTSU9OX0VWRU5UX1JYX1BBVVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVNTSU9OX0VWRU5UX1JYX1JFU1VNRSIvPgotCQk8ZmllbGQgbmFtZT0iU0VTU0lPTl9FVkVOVF9UWF9TVEFSVCIvPgotCQk8ZmllbGQgbmFtZT0iU0VTU0lPTl9FVkVOVF9UWF9TVE9QIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVNTSU9OX01PRElGWV9SRVFVRVNUX0ZBSUwiLz4KLQkJPGZpZWxkIG5hbWU9IlNFU1NJT05fTU9ESUZZX1JFUVVFU1RfSU5WQUxJRCIvPgotCQk8ZmllbGQgbmFtZT0iU0VTU0lPTl9NT0RJRllfUkVRVUVTVF9SRUpFQ1RFRF9CWV9SRU1PVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFU1NJT05fTU9ESUZZX1JFUVVFU1RfU1VDQ0VTUyIvPgotCQk8ZmllbGQgbmFtZT0iU0VTU0lPTl9NT0RJRllfUkVRVUVTVF9USU1FRF9PVVQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vQ29ubmVjdGlvblJlcXVlc3QiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50SGFuZGxlO0xhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50SGFuZGxlO0xhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvb3MvQnVuZGxlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjY291bnRIYW5kbGUoKUxhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50SGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkZHJlc3MoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnR0VGV4dFN0cmVhbSgpTGFuZHJvaWQvdGVsZWNvbS9Db25uZWN0aW9uJFJ0dFRleHRTdHJlYW07IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWRlb1N0YXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZXF1ZXN0aW5nUnR0KClaIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vQ29ubmVjdGlvblNlcnZpY2UiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDb25mZXJlbmNlKExhbmRyb2lkL3RlbGVjb20vQ29uZmVyZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEV4aXN0aW5nQ29ubmVjdGlvbihMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTtMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25mZXJlbmNlUmVtb3RlQ29ubmVjdGlvbnMoTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25uZWN0aW9uO0xhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3Rpb25TZXJ2aWNlRm9jdXNSZWxlYXNlZCgpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlUmVtb3RlSW5jb21pbmdDb25uZWN0aW9uKExhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50SGFuZGxlO0xhbmRyb2lkL3RlbGVjb20vQ29ubmVjdGlvblJlcXVlc3Q7KUxhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVSZW1vdGVPdXRnb2luZ0Nvbm5lY3Rpb24oTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnRIYW5kbGU7TGFuZHJvaWQvdGVsZWNvbS9Db25uZWN0aW9uUmVxdWVzdDspTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25uZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbENvbmZlcmVuY2VzKClMamF2YS91dGlsL0NvbGxlY3Rpb247IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxDb25uZWN0aW9ucygpTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29uZmVyZW5jZShMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb247TGFuZHJvaWQvdGVsZWNvbS9Db25uZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db25uZWN0aW9uU2VydmljZUZvY3VzR2FpbmVkKClWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbm5lY3Rpb25TZXJ2aWNlRm9jdXNMb3N0KClWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZUluY29taW5nQ29ubmVjdGlvbihMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTtMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb25SZXF1ZXN0OylMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVJbmNvbWluZ0Nvbm5lY3Rpb25GYWlsZWQoTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnRIYW5kbGU7TGFuZHJvaWQvdGVsZWNvbS9Db25uZWN0aW9uUmVxdWVzdDspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVJbmNvbWluZ0hhbmRvdmVyQ29ubmVjdGlvbihMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTtMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb25SZXF1ZXN0OylMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb247IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZU91dGdvaW5nQ29ubmVjdGlvbihMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTtMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb25SZXF1ZXN0OylMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVPdXRnb2luZ0Nvbm5lY3Rpb25GYWlsZWQoTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnRIYW5kbGU7TGFuZHJvaWQvdGVsZWNvbS9Db25uZWN0aW9uUmVxdWVzdDspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVPdXRnb2luZ0hhbmRvdmVyQ29ubmVjdGlvbihMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTtMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb25SZXF1ZXN0OylMYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb247IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkhhbmRvdmVyRmFpbGVkKExhbmRyb2lkL3RlbGVjb20vQ29ubmVjdGlvblJlcXVlc3Q7SSlWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlbW90ZUNvbmZlcmVuY2VBZGRlZChMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbmZlcmVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlbW90ZUV4aXN0aW5nQ29ubmVjdGlvbkFkZGVkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbjspViIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9JTlRFUkZBQ0UiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vRGlzY29ubmVjdENhdXNlIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlc2NyaXB0aW9uKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhc29uKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb25lKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTlNXRVJFRF9FTFNFV0hFUkUiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iQlVTWSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMTF9QVUxMRUQiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FOQ0VMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTk5FQ1RJT05fTUFOQUdFUl9OT1RfU1VQUE9SVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQUwiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JU1NFRCIvPgotCQk8ZmllbGQgbmFtZT0iT1RIRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlJFSkVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRU1PVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1RSSUNURUQiLz4KLQkJPGZpZWxkIG5hbWU9IlVOS05PV04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vR2F0ZXdheUluZm8iIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdhdGV3YXlBZGRyZXNzKClMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdhdGV3YXlQcm92aWRlclBhY2thZ2VOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmlnaW5hbEFkZHJlc3MoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbXB0eSgpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZWNvbS9JbkNhbGxTZXJ2aWNlIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9TZXJ2aWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuQWRkQ2FsbCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGxBdWRpb1N0YXRlKClMYW5kcm9pZC90ZWxlY29tL0NhbGxBdWRpb1N0YXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGxzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25CcmluZ1RvRm9yZWdyb3VuZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbGxBZGRlZChMYW5kcm9pZC90ZWxlY29tL0NhbGw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbGxBdWRpb1N0YXRlQ2hhbmdlZChMYW5kcm9pZC90ZWxlY29tL0NhbGxBdWRpb1N0YXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYWxsUmVtb3ZlZChMYW5kcm9pZC90ZWxlY29tL0NhbGw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbkFkZENhbGxDaGFuZ2VkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29ubmVjdGlvbkV2ZW50KExhbmRyb2lkL3RlbGVjb20vQ2FsbDtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyNSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2lsZW5jZVJpbmdlcigpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdEJsdWV0b290aEF1ZGlvKExhbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2U7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1ZGlvUm91dGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TXV0ZWQoWilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJWSUNFX0lOVEVSRkFDRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZWNvbS9JbkNhbGxTZXJ2aWNlJFZpZGVvQ2FsbCIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQ2FsbGJhY2soTGFuZHJvaWQvdGVsZWNvbS9JbkNhbGxTZXJ2aWNlJFZpZGVvQ2FsbCRDYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQ2FsbGJhY2soTGFuZHJvaWQvdGVsZWNvbS9JbkNhbGxTZXJ2aWNlJFZpZGVvQ2FsbCRDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdENhbGxEYXRhVXNhZ2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Q2FtZXJhQ2FwYWJpbGl0aWVzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZFNlc3Npb25Nb2RpZnlSZXF1ZXN0KExhbmRyb2lkL3RlbGVjb20vVmlkZW9Qcm9maWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZFNlc3Npb25Nb2RpZnlSZXNwb25zZShMYW5kcm9pZC90ZWxlY29tL1ZpZGVvUHJvZmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbWVyYShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERldmljZU9yaWVudGF0aW9uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXlTdXJmYWNlKExhbmRyb2lkL3ZpZXcvU3VyZmFjZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhdXNlSW1hZ2UoTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZXZpZXdTdXJmYWNlKExhbmRyb2lkL3ZpZXcvU3VyZmFjZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFpvb20oRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckNhbGxiYWNrKExhbmRyb2lkL3RlbGVjb20vSW5DYWxsU2VydmljZSRWaWRlb0NhbGwkQ2FsbGJhY2s7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vSW5DYWxsU2VydmljZSRWaWRlb0NhbGwkQ2FsbGJhY2siIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbGxEYXRhVXNhZ2VDaGFuZ2VkKEopViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FsbFNlc3Npb25FdmVudChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbWVyYUNhcGFiaWxpdGllc0NoYW5nZWQoTGFuZHJvaWQvdGVsZWNvbS9WaWRlb1Byb2ZpbGUkQ2FtZXJhQ2FwYWJpbGl0aWVzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QZWVyRGltZW5zaW9uc0NoYW5nZWQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2Vzc2lvbk1vZGlmeVJlcXVlc3RSZWNlaXZlZChMYW5kcm9pZC90ZWxlY29tL1ZpZGVvUHJvZmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2Vzc2lvbk1vZGlmeVJlc3BvbnNlUmVjZWl2ZWQoSUxhbmRyb2lkL3RlbGVjb20vVmlkZW9Qcm9maWxlO0xhbmRyb2lkL3RlbGVjb20vVmlkZW9Qcm9maWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25WaWRlb1F1YWxpdHlDaGFuZ2VkKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnQiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkZXIoTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnRIYW5kbGU7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNjb3VudEhhbmRsZSgpTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnRIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWRkcmVzcygpTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYXBhYmlsaXRpZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpZ2hsaWdodENvbG9yKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWNvbigpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvcnREZXNjcmlwdGlvbigpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3Vic2NyaXB0aW9uQWRkcmVzcygpTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRVcmlTY2hlbWVzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQ2FwYWJpbGl0aWVzKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzVXJpU2NoZW1lKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9CdWlsZGVyKClMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudCRCdWlsZGVyOyIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9DQUxMX1BST1ZJREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX0NBTExfU1VCSkVDVCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FQQUJJTElUWV9DT05ORUNUSU9OX01BTkFHRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfUExBQ0VfRU1FUkdFTkNZX0NBTExTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX1JUVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX1NFTEZfTUFOQUdFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX1NJTV9TVUJTQ1JJUFRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfU1VQUE9SVFNfVklERU9fQ0FMTElORyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBBQklMSVRZX1ZJREVPX0NBTExJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkNBUEFCSUxJVFlfVklERU9fQ0FMTElOR19SRUxJRVNfT05fUFJFU0VOQ0UiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0FMTF9TVUJKRUNUX0NIQVJBQ1RFUl9FTkNPRElORyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DQUxMX1NVQkpFQ1RfTUFYX0xFTkdUSCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9MT0dfU0VMRl9NQU5BR0VEX0NBTExTIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NVUFBPUlRTX0hBTkRPVkVSX0ZST00iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU1VQUE9SVFNfSEFORE9WRVJfVE8iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTk9fSElHSExJR0hUX0NPTE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19SRVNPVVJDRV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iU0NIRU1FX1NJUCIvPgotCQk8ZmllbGQgbmFtZT0iU0NIRU1FX1RFTCIvPgotCQk8ZmllbGQgbmFtZT0iU0NIRU1FX1ZPSUNFTUFJTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnQkQnVpbGRlciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFN1cHBvcnRlZFVyaVNjaGVtZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWRkcmVzcyhMYW5kcm9pZC9uZXQvVXJpOylMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhcGFiaWxpdGllcyhJKUxhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXh0cmFzKExhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnQkQnVpbGRlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhpZ2hsaWdodENvbG9yKEkpTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247KUxhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hvcnREZXNjcmlwdGlvbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdWJzY3JpcHRpb25BZGRyZXNzKExhbmRyb2lkL25ldC9Vcmk7KUxhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VwcG9ydGVkVXJpU2NoZW1lcyhMamF2YS91dGlsL0xpc3Q7KUxhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50JEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZSIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tcG9uZW50TmFtZSgpTGFuZHJvaWQvY29udGVudC9Db21wb25lbnROYW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VySGFuZGxlKClMYW5kcm9pZC9vcy9Vc2VySGFuZGxlOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25mZXJlbmNlIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzY29ubmVjdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbmZlcmVuY2VhYmxlQ29ubmVjdGlvbnMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25uZWN0aW9uQ2FwYWJpbGl0aWVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ubmVjdGlvblByb3BlcnRpZXMoKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb25zKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzY29ubmVjdENhdXNlKClMYW5kcm9pZC90ZWxlY29tL0Rpc2Nvbm5lY3RDYXVzZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImhvbGQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtZXJnZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InBsYXlEdG1mVG9uZShDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlckNhbGxiYWNrKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29uZmVyZW5jZSRDYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQ2FsbGJhY2soTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25mZXJlbmNlJENhbGxiYWNrO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXBhcmF0ZShMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYWxsQXVkaW9TdGF0ZShMYW5kcm9pZC90ZWxlY29tL0NhbGxBdWRpb1N0YXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcER0bWZUb25lKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3dhcCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InVuaG9sZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJDYWxsYmFjayhMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbmZlcmVuY2UkQ2FsbGJhY2s7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29uZmVyZW5jZSRDYWxsYmFjayIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29uZmVyZW5jZWFibGVDb25uZWN0aW9uc0NoYW5nZWQoTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25mZXJlbmNlO0xqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29ubmVjdGlvbkFkZGVkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29uZmVyZW5jZTtMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbm5lY3Rpb25DYXBhYmlsaXRpZXNDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29uZmVyZW5jZTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbm5lY3Rpb25Qcm9wZXJ0aWVzQ2hhbmdlZChMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbmZlcmVuY2U7SSlWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbm5lY3Rpb25SZW1vdmVkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29uZmVyZW5jZTtMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRlc3Ryb3llZChMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbmZlcmVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRpc2Nvbm5lY3RlZChMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbmZlcmVuY2U7TGFuZHJvaWQvdGVsZWNvbS9EaXNjb25uZWN0Q2F1c2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkV4dHJhc0NoYW5nZWQoTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25mZXJlbmNlO0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhdGVDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29uZmVyZW5jZTtJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb24iIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3RlbGVjb20vRGlzY29ubmVjdENhdXNlOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhYm9ydCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFuc3dlcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2Nvbm5lY3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBZGRyZXNzKClMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkZHJlc3NQcmVzZW50YXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxsZXJEaXNwbGF5TmFtZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FsbGVyRGlzcGxheU5hbWVQcmVzZW50YXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25mZXJlbmNlKClMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbmZlcmVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uZmVyZW5jZWFibGVDb25uZWN0aW9ucygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb25DYXBhYmlsaXRpZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25uZWN0aW9uUHJvcGVydGllcygpSSIgc2luY2U9IjI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzY29ubmVjdENhdXNlKClMYW5kcm9pZC90ZWxlY29tL0Rpc2Nvbm5lY3RDYXVzZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXR1c0hpbnRzKClMYW5kcm9pZC90ZWxlY29tL1N0YXR1c0hpbnRzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZGVvUHJvdmlkZXIoKUxhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbiRWaWRlb1Byb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZGVvU3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJob2xkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSaW5nYmFja1JlcXVlc3RlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVm9pcEF1ZGlvTW9kZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBsYXlEdG1mVG9uZShDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0RGlhbENvbnRpbnVlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InB1bGxFeHRlcm5hbENhbGwoKVYiIHNpbmNlPSIyNSIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQ2FsbGJhY2soTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25uZWN0aW9uJENhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJDYWxsYmFjayhMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb24kQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlamVjdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbGxBdWRpb1N0YXRlKExhbmRyb2lkL3RlbGVjb20vQ2FsbEF1ZGlvU3RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wRHRtZlRvbmUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmhvbGQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyQ2FsbGJhY2soTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25uZWN0aW9uJENhbGxiYWNrOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb24kQ2FsbGJhY2siIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFkZHJlc3NDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbjtMYW5kcm9pZC9uZXQvVXJpO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FsbGVyRGlzcGxheU5hbWVDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbjtMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbmZlcmVuY2VDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbjtMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbmZlcmVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbmZlcmVuY2VhYmxlQ29ubmVjdGlvbnNDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbjtMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbm5lY3Rpb25DYXBhYmlsaXRpZXNDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbm5lY3Rpb25FdmVudChMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb247TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNvbm5lY3Rpb25Qcm9wZXJ0aWVzQ2hhbmdlZChMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb247SSlWIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRlc3Ryb3llZChMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRpc2Nvbm5lY3RlZChMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb247TGFuZHJvaWQvdGVsZWNvbS9EaXNjb25uZWN0Q2F1c2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkV4dHJhc0NoYW5nZWQoTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25uZWN0aW9uO0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUG9zdERpYWxDaGFyKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbjtDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBvc3REaWFsV2FpdChMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb247TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJpbmdiYWNrUmVxdWVzdGVkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbjtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXRlQ2hhbmdlZChMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGF0dXNIaW50c0NoYW5nZWQoTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25uZWN0aW9uO0xhbmRyb2lkL3RlbGVjb20vU3RhdHVzSGludHM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblZpZGVvUHJvdmlkZXJDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbjtMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb24kVmlkZW9Qcm92aWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVmlkZW9TdGF0ZUNoYW5nZWQoTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25uZWN0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVm9pcEF1ZGlvQ2hhbmdlZChMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb247WilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb24kVmlkZW9Qcm92aWRlciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQ2FsbGJhY2soTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25uZWN0aW9uJFZpZGVvUHJvdmlkZXIkQ2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Q2FsbERhdGFVc2FnZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RDYW1lcmFDYXBhYmlsaXRpZXMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kU2Vzc2lvbk1vZGlmeVJlcXVlc3QoTGFuZHJvaWQvdGVsZWNvbS9WaWRlb1Byb2ZpbGU7TGFuZHJvaWQvdGVsZWNvbS9WaWRlb1Byb2ZpbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kU2Vzc2lvbk1vZGlmeVJlc3BvbnNlKExhbmRyb2lkL3RlbGVjb20vVmlkZW9Qcm9maWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FtZXJhKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGV2aWNlT3JpZW50YXRpb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlzcGxheVN1cmZhY2UoTGFuZHJvaWQvdmlldy9TdXJmYWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGF1c2VJbWFnZShMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJldmlld1N1cmZhY2UoTGFuZHJvaWQvdmlldy9TdXJmYWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Wm9vbShGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyQ2FsbGJhY2soTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25uZWN0aW9uJFZpZGVvUHJvdmlkZXIkQ2FsbGJhY2s7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbiRWaWRlb1Byb3ZpZGVyJENhbGxiYWNrIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYWxsRGF0YVVzYWdlQ2hhbmdlZChMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb24kVmlkZW9Qcm92aWRlcjtKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbGxTZXNzaW9uRXZlbnQoTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25uZWN0aW9uJFZpZGVvUHJvdmlkZXI7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYW1lcmFDYXBhYmlsaXRpZXNDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbiRWaWRlb1Byb3ZpZGVyO0xhbmRyb2lkL3RlbGVjb20vVmlkZW9Qcm9maWxlJENhbWVyYUNhcGFiaWxpdGllczspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGVlckRpbWVuc2lvbnNDaGFuZ2VkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbiRWaWRlb1Byb3ZpZGVyO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlc3Npb25Nb2RpZnlSZXF1ZXN0UmVjZWl2ZWQoTGFuZHJvaWQvdGVsZWNvbS9SZW1vdGVDb25uZWN0aW9uJFZpZGVvUHJvdmlkZXI7TGFuZHJvaWQvdGVsZWNvbS9WaWRlb1Byb2ZpbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlc3Npb25Nb2RpZnlSZXNwb25zZVJlY2VpdmVkKExhbmRyb2lkL3RlbGVjb20vUmVtb3RlQ29ubmVjdGlvbiRWaWRlb1Byb3ZpZGVyO0lMYW5kcm9pZC90ZWxlY29tL1ZpZGVvUHJvZmlsZTtMYW5kcm9pZC90ZWxlY29tL1ZpZGVvUHJvZmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVmlkZW9RdWFsaXR5Q2hhbmdlZChMYW5kcm9pZC90ZWxlY29tL1JlbW90ZUNvbm5lY3Rpb24kVmlkZW9Qcm92aWRlcjtJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVjb20vU3RhdHVzSGludHMiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFzKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWNvbigpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlY29tL1RlbGVjb21NYW5hZ2VyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdEhhbmRvdmVyKExhbmRyb2lkL25ldC9Vcmk7SUxhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50SGFuZGxlOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHRSaW5naW5nQ2FsbCgpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjZXB0UmluZ2luZ0NhbGwoSSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGROZXdJbmNvbWluZ0NhbGwoTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnRIYW5kbGU7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWxNaXNzZWRDYWxsc05vdGlmaWNhdGlvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZU1hbmFnZUJsb2NrZWROdW1iZXJzSW50ZW50KClMYW5kcm9pZC9jb250ZW50L0ludGVudDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZENhbGwoKVoiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkblVyaUZvclBob25lQWNjb3VudChMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTspTGFuZHJvaWQvbmV0L1VyaTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGxDYXBhYmxlUGhvbmVBY2NvdW50cygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdERpYWxlclBhY2thZ2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdE91dGdvaW5nUGhvbmVBY2NvdW50KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmUxTnVtYmVyKExhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50SGFuZGxlOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBob25lQWNjb3VudChMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTspTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnQ7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxmTWFuYWdlZFBob25lQWNjb3VudHMoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpbUNhbGxNYW5hZ2VyKClMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZvaWNlTWFpbE51bWJlcihMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVNbWkoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVNbWkoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnRIYW5kbGU7KVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5DYWxsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbk1hbmFnZWRDYWxsKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0luY29taW5nQ2FsbFBlcm1pdHRlZChMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTspWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPdXRnb2luZ0NhbGxQZXJtaXR0ZWQoTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnRIYW5kbGU7KVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVHR5U3VwcG9ydGVkKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZvaWNlTWFpbE51bWJlcihMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTtMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icGxhY2VDYWxsKExhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlclBob25lQWNjb3VudChMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudDspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd0luQ2FsbFNjcmVlbihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaWxlbmNlUmluZ2VyKClWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyUGhvbmVBY2NvdW50KExhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50SGFuZGxlOylWIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DSEFOR0VfREVGQVVMVF9ESUFMRVIiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NIQU5HRV9QSE9ORV9BQ0NPVU5UUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ09ORklHVVJFX1BIT05FX0FDQ09VTlQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RFRkFVTFRfRElBTEVSX0NIQU5HRUQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0lOQ09NSU5HX0NBTEwiIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QSE9ORV9BQ0NPVU5UX1JFR0lTVEVSRUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BIT05FX0FDQ09VTlRfVU5SRUdJU1RFUkVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TSE9XX0NBTExfQUNDRVNTSUJJTElUWV9TRVRUSU5HUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0hPV19DQUxMX1NFVFRJTkdTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0hPV19NSVNTRURfQ0FMTFNfTk9USUZJQ0FUSU9OIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TSE9XX1JFU1BPTkRfVklBX1NNU19TRVRUSU5HUyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJEVE1GX0NIQVJBQ1RFUl9QQVVTRSIvPgotCQk8ZmllbGQgbmFtZT0iRFRNRl9DSEFSQUNURVJfV0FJVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0FMTF9CQUNLX05VTUJFUiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DQUxMX0RJU0NPTk5FQ1RfQ0FVU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0NBTExfRElTQ09OTkVDVF9NRVNTQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9DQUxMX1NVQkpFQ1QiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0hBTkdFX0RFRkFVTFRfRElBTEVSX1BBQ0tBR0VfTkFNRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9JTkNPTUlOR19DQUxMX0FERFJFU1MiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfSU5DT01JTkdfQ0FMTF9FWFRSQVMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfSU5DT01JTkdfVklERU9fU1RBVEUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTk9USUZJQ0FUSU9OX0NPVU5UIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX05PVElGSUNBVElPTl9QSE9ORV9OVU1CRVIiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfT1VUR09JTkdfQ0FMTF9FWFRSQVMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfUEhPTkVfQUNDT1VOVF9IQU5ETEUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU1RBUlRfQ0FMTF9XSVRIX1JUVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TVEFSVF9DQUxMX1dJVEhfU1BFQUtFUlBIT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TVEFSVF9DQUxMX1dJVEhfVklERU9fU1RBVEUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iR0FURVdBWV9PUklHSU5BTF9BRERSRVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHQVRFV0FZX1BST1ZJREVSX1BBQ0tBR0UiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFEQVRBX0lOQ0xVREVfRVhURVJOQUxfQ0FMTFMiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfSU5DTFVERV9TRUxGX01BTkFHRURfQ0FMTFMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfSU5fQ0FMTF9TRVJWSUNFX1JJTkdJTkciIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfSU5fQ0FMTF9TRVJWSUNFX1VJIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVNFTlRBVElPTl9BTExPV0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTRU5UQVRJT05fUEFZUEhPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVNFTlRBVElPTl9SRVNUUklDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTRU5UQVRJT05fVU5LTk9XTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZWNvbS9WaWRlb1Byb2ZpbGUiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVhbGl0eSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZGVvU3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0F1ZGlvT25seShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JpZGlyZWN0aW9uYWwoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQYXVzZWQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZWNlcHRpb25FbmFibGVkKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVHJhbnNtaXNzaW9uRW5hYmxlZChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZpZGVvKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InZpZGVvU3RhdGVUb1N0cmluZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iUVVBTElUWV9ERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMSVRZX0hJR0giLz4KLQkJPGZpZWxkIG5hbWU9IlFVQUxJVFlfTE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJRVUFMSVRZX01FRElVTSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfQVVESU9fT05MWSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfQklESVJFQ1RJT05BTCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfUEFVU0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9SWF9FTkFCTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9UWF9FTkFCTEVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlY29tL1ZpZGVvUHJvZmlsZSRDYW1lcmFDYXBhYmlsaXRpZXMiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaWR0aCgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L0FjY2Vzc05ldHdvcmtDb25zdGFudHMiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9BY2Nlc3NOZXR3b3JrQ29uc3RhbnRzJEFjY2Vzc05ldHdvcmtUeXBlIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRE1BMjAwMCIvPgotCQk8ZmllbGQgbmFtZT0iRVVUUkFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRVJBTiIvPgotCQk8ZmllbGQgbmFtZT0iSVdMQU4iLz4KLQkJPGZpZWxkIG5hbWU9IlVOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9IlVUUkFOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvQWNjZXNzTmV0d29ya0NvbnN0YW50cyRFdXRyYW5CYW5kIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzEiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMTAiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMTMiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMTciLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMiIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF8yMCIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF8yMSIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF8yMiIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF8yMyIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF8yNCIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF8yNSIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF8yNiIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF8yNyIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF8yOCIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF8zIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzMwIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzMxIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzMzIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzM0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzM1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzM2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzM3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzM4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzM5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzQiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNDAiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNDEiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNDIiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNDMiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNDQiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNDUiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNDYiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNDciLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNDgiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNSIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF82Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzY1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzY2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzY4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzciLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNzAiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfOCIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF85Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvQWNjZXNzTmV0d29ya0NvbnN0YW50cyRHZXJhbkJhbmQiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNDUwIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzQ4MCIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF83MTAiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNzUwIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzg1MCIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF9EQ1MxODAwIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EX0U5MDAiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfRVI5MDAiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfUDkwMCIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF9QQ1MxOTAwIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EX1I5MDAiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfVDM4MCIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF9UNDEwIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EX1Q4MTAiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9BY2Nlc3NOZXR3b3JrQ29uc3RhbnRzJFV0cmFuQmFuZCIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF8xIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzEwIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzExIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzEzIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzIiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMjAiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMjIiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMjUiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfMyIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF80Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzUiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfNiIvPgotCQk8ZmllbGQgbmFtZT0iQkFORF83Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU5EXzgiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTkRfOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L0NhcnJpZXJDb25maWdNYW5hZ2VyIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbmZpZygpTGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uZmlnRm9yU3ViSWQoSSlMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbmZpZ0ZvcklkZW50aWZpZWRDYXJyaWVyKExhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOylaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlDb25maWdDaGFuZ2VkRm9yU3ViSWQoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ0FSUklFUl9DT05GSUdfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iREFUQV9DWUNMRV9USFJFU0hPTERfRElTQUJMRUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU0xPVF9JTkRFWCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TVUJTQ1JJUFRJT05fSU5ERVgiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FERElUSU9OQUxfQ0FMTF9TRVRUSU5HX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9BTExPV19BRERJTkdfQVBOU19CT09MIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9BTExPV19BRERfQ0FMTF9EVVJJTkdfVklERU9fQ0FMTF9CT09MIiBzaW5jZT0iMjUiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9BTExPV19FTUVSR0VOQ1lfTlVNQkVSU19JTl9DQUxMX0xPR19CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQUxMT1dfRU1FUkdFTkNZX1ZJREVPX0NBTExTX0JPT0wiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FMTE9XX0xPQ0FMX0RUTUZfVE9ORVNfQk9PTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FMTE9XX01FUkdFX1dJRklfQ0FMTFNfV0hFTl9WT1dJRklfT0ZGX0JPT0wiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FMTE9XX05PTl9FTUVSR0VOQ1lfQ0FMTFNfSU5fRUNNX0JPT0wiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0FMV0FZU19TSE9XX0VNRVJHRU5DWV9BTEVSVF9PTk9GRl9CT09MIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9BUE5fRVhQQU5EX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9BVVRPX1JFVFJZX0VOQUJMRURfQk9PTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NBTExfRk9SV0FSRElOR19CTE9DS1NfV0hJTEVfUk9BTUlOR19TVFJJTkdfQVJSQVkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NBUlJJRVJfQUxMT1dfVFVSTk9GRl9JTVNfQk9PTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NBUlJJRVJfREFUQV9DQUxMX1BFUk1BTkVOVF9GQUlMVVJFX1NUUklOR1MiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NBUlJJRVJfRk9SQ0VfRElTQUJMRV9FVFdTX0NNQVNfVEVTVF9CT09MIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9DQVJSSUVSX0lNU19HQkFfUkVRVUlSRURfQk9PTCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ0FSUklFUl9JTlNUQU5UX0xFVFRFUklOR19BVkFJTEFCTEVfQk9PTCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ0FSUklFUl9JTlNUQU5UX0xFVFRFUklOR19FTkNPRElOR19TVFJJTkciIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NBUlJJRVJfSU5TVEFOVF9MRVRURVJJTkdfRVNDQVBFRF9DSEFSU19TVFJJTkciIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NBUlJJRVJfSU5TVEFOVF9MRVRURVJJTkdfSU5WQUxJRF9DSEFSU19TVFJJTkciIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NBUlJJRVJfSU5TVEFOVF9MRVRURVJJTkdfTEVOR1RIX0xJTUlUX0lOVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ0FSUklFUl9OQU1FX09WRVJSSURFX0JPT0wiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NBUlJJRVJfTkFNRV9TVFJJTkciIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NBUlJJRVJfU0VUVElOR1NfRU5BQkxFX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9DQVJSSUVSX1VTRV9JTVNfRklSU1RfRk9SX0VNRVJHRU5DWV9CT09MIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9DQVJSSUVSX1ZPTFRFX0FWQUlMQUJMRV9CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ0FSUklFUl9WT0xURV9QUk9WSVNJT05FRF9CT09MIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9DQVJSSUVSX1ZPTFRFX1BST1ZJU0lPTklOR19SRVFVSVJFRF9CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ0FSUklFUl9WT0xURV9UVFlfU1VQUE9SVEVEX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9DQVJSSUVSX1ZUX0FWQUlMQUJMRV9CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ0FSUklFUl9WVk1fUEFDS0FHRV9OQU1FX1NUUklORyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9DQVJSSUVSX1ZWTV9QQUNLQUdFX05BTUVfU1RSSU5HX0FSUkFZIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9DQVJSSUVSX1dGQ19JTVNfQVZBSUxBQkxFX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9DQVJSSUVSX1dGQ19TVVBQT1JUU19XSUZJX09OTFlfQk9PTCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ0RNQV8zV0FZQ0FMTF9GTEFTSF9ERUxBWV9JTlQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NETUFfRFRNRl9UT05FX0RFTEFZX0lOVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ0RNQV9OT05ST0FNSU5HX05FVFdPUktTX1NUUklOR19BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NETUFfUk9BTUlOR19NT0RFX0lOVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ0RNQV9ST0FNSU5HX05FVFdPUktTX1NUUklOR19BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NJX0FDVElPTl9PTl9TWVNfVVBEQVRFX0JPT0wiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NJX0FDVElPTl9PTl9TWVNfVVBEQVRFX0VYVFJBX1NUUklORyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ0lfQUNUSU9OX09OX1NZU19VUERBVEVfRVhUUkFfVkFMX1NUUklORyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ0lfQUNUSU9OX09OX1NZU19VUERBVEVfSU5URU5UX1NUUklORyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ09ORklHX0lNU19QQUNLQUdFX09WRVJSSURFX1NUUklORyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ09ORklHX1BMQU5TX1BBQ0tBR0VfT1ZFUlJJREVfU1RSSU5HIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9DT05GSUdfVEVMRVBIT05ZX1VTRV9PV05fTlVNQkVSX0ZPUl9WT0lDRU1BSUxfQk9PTCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQ1NQX0VOQUJMRURfQk9PTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0RBVEFfTElNSVRfVEhSRVNIT0xEX0JZVEVTX0xPTkciIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0RBVEFfV0FSTklOR19USFJFU0hPTERfQllURVNfTE9ORyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfREVGQVVMVF9TSU1fQ0FMTF9NQU5BR0VSX1NUUklORyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0RFRkFVTFRfVk1fTlVNQkVSX1NUUklORyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfRElBTF9TVFJJTkdfUkVQTEFDRV9TVFJJTkdfQVJSQVkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0RJU0FCTEVfQ0RNQV9BQ1RJVkFUSU9OX0NPREVfQk9PTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0RJU1BMQVlfSERfQVVESU9fUFJPUEVSVFlfQk9PTCIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfRFJPUF9WSURFT19DQUxMX1dIRU5fQU5TV0VSSU5HX0FVRElPX0NBTExfQk9PTCIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfRFRNRl9UWVBFX0VOQUJMRURfQk9PTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0RVUkFUSU9OX0JMT0NLSU5HX0RJU0FCTEVEX0FGVEVSX0VNRVJHRU5DWV9JTlQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0VESVRBQkxFX0VOSEFOQ0VEXzRHX0xURV9CT09MIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9FRElUQUJMRV9WT0lDRU1BSUxfTlVNQkVSX0JPT0wiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0VESVRBQkxFX1ZPSUNFTUFJTF9OVU1CRVJfU0VUVElOR19CT09MIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9FTkFCTEVfRElBTEVSX0tFWV9WSUJSQVRJT05fQk9PTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0ZPUkNFX0hPTUVfTkVUV09SS19CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfR1NNX0RUTUZfVE9ORV9ERUxBWV9JTlQiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0dTTV9OT05ST0FNSU5HX05FVFdPUktTX1NUUklOR19BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0dTTV9ST0FNSU5HX05FVFdPUktTX1NUUklOR19BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0hBU19JTl9DQUxMX05PSVNFX1NVUFBSRVNTSU9OX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9ISURFX0NBUlJJRVJfTkVUV09SS19TRVRUSU5HU19CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfSElERV9FTkhBTkNFRF80R19MVEVfQk9PTCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfSElERV9JTVNfQVBOX0JPT0wiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0hJREVfUFJFRkVSUkVEX05FVFdPUktfVFlQRV9CT09MIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9ISURFX1NJTV9MT0NLX1NFVFRJTkdTX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9JR05PUkVfU0lNX05FVFdPUktfTE9DS0VEX0VWRU5UU19CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfSU1TX0NPTkZFUkVOQ0VfU0laRV9MSU1JVF9JTlQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0lNU19EVE1GX1RPTkVfREVMQVlfSU5UIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9JU19JTVNfQ09ORkVSRU5DRV9TSVpFX0VORk9SQ0VEX0JPT0wiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX01ETl9JU19BRERJVElPTkFMX1ZPSUNFTUFJTF9OVU1CRVJfQk9PTCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTU1TX0FMSUFTX0VOQUJMRURfQk9PTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX01NU19BTElBU19NQVhfQ0hBUlNfSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTU1TX0FMSUFTX01JTl9DSEFSU19JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NTVNfQUxMT1dfQVRUQUNIX0FVRElPX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NTVNfQVBQRU5EX1RSQU5TQUNUSU9OX0lEX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NTVNfRU1BSUxfR0FURVdBWV9OVU1CRVJfU1RSSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTU1TX0dST1VQX01NU19FTkFCTEVEX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NTVNfSFRUUF9QQVJBTVNfU1RSSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTU1TX0hUVFBfU09DS0VUX1RJTUVPVVRfSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTU1TX01BWF9JTUFHRV9IRUlHSFRfSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTU1TX01BWF9JTUFHRV9XSURUSF9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NTVNfTUFYX01FU1NBR0VfU0laRV9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NTVNfTUVTU0FHRV9URVhUX01BWF9TSVpFX0lOVCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX01NU19NTVNfREVMSVZFUllfUkVQT1JUX0VOQUJMRURfQk9PTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX01NU19NTVNfRU5BQkxFRF9CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTU1TX01NU19SRUFEX1JFUE9SVF9FTkFCTEVEX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NTVNfTVVMVElQQVJUX1NNU19FTkFCTEVEX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NTVNfTkFJX1NVRkZJWF9TVFJJTkciLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NTVNfTk9USUZZX1dBUF9NTVNDX0VOQUJMRURfQk9PTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX01NU19SRUNJUElFTlRfTElNSVRfSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTU1TX1NFTkRfTVVMVElQQVJUX1NNU19BU19TRVBBUkFURV9NRVNTQUdFU19CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTU1TX1NIT1dfQ0VMTF9CUk9BRENBU1RfQVBQX0xJTktTX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NTVNfU01TX0RFTElWRVJZX1JFUE9SVF9FTkFCTEVEX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NTVNfU01TX1RPX01NU19URVhUX0xFTkdUSF9USFJFU0hPTERfSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTU1TX1NNU19UT19NTVNfVEVYVF9USFJFU0hPTERfSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTU1TX1NVQkpFQ1RfTUFYX0xFTkdUSF9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NTVNfU1VQUE9SVF9IVFRQX0NIQVJTRVRfSEVBREVSX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9NTVNfU1VQUE9SVF9NTVNfQ09OVEVOVF9ESVNQT1NJVElPTl9CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTU1TX1VBX1BST0ZfVEFHX05BTUVfU1RSSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfTU1TX1VBX1BST0ZfVVJMX1NUUklORyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX01NU19VU0VSX0FHRU5UX1NUUklORyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX01PTlRITFlfREFUQV9DWUNMRV9EQVlfSU5UIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9PTkxZX1NJTkdMRV9EQ19BTExPV0VEX0lOVF9BUlJBWSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfT1BFUkFUT1JfU0VMRUNUSU9OX0VYUEFORF9CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfUFJFRkVSXzJHX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9SQ1NfQ09ORklHX1NFUlZFUl9VUkxfU1RSSU5HIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9SRVFVSVJFX0VOVElUTEVNRU5UX0NIRUNLU19CT09MIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9SRVNUQVJUX1JBRElPX09OX1BEUF9GQUlMX1JFR1VMQVJfREVBQ1RJVkFUSU9OX0JPT0wiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1JUVF9TVVBQT1JURURfQk9PTCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfU0hPV19BUE5fU0VUVElOR19DRE1BX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9TSE9XX0NETUFfQ0hPSUNFU19CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfU0hPV19JQ0NJRF9JTl9TSU1fU1RBVFVTX0JPT0wiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1NIT1dfT05TQ1JFRU5fRElBTF9CVVRUT05fQk9PTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1NIT1dfU0lHTkFMX1NUUkVOR1RIX0lOX1NJTV9TVEFUVVNfQk9PTCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfU0lNUExJRklFRF9ORVRXT1JLX1NFVFRJTkdTX0JPT0wiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1NJTV9ORVRXT1JLX1VOTE9DS19BTExPV19ESVNNSVNTX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9TTVNfUkVRVUlSRVNfREVTVElOQVRJT05fTlVNQkVSX0NPTlZFUlNJT05fQk9PTCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfU1VQUE9SVF8zR1BQX0NBTExfRk9SV0FSRElOR19XSElMRV9ST0FNSU5HX0JPT0wiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1NVUFBPUlRfQ09ORkVSRU5DRV9DQUxMX0JPT0wiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1NVUFBPUlRfRU1FUkdFTkNZX1NNU19PVkVSX0lNU19CT09MIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9TVVBQT1JUX1BBVVNFX0lNU19WSURFT19DQUxMU19CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfU1VQUE9SVF9TV0FQX0FGVEVSX01FUkdFX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9UUkVBVF9ET1dOR1JBREVEX1ZJREVPX0NBTExTX0FTX1ZJREVPX0NBTExTX0JPT0wiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1VTRV9IRkFfRk9SX1BST1ZJU0lPTklOR19CT09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfVVNFX09UQVNQX0ZPUl9QUk9WSVNJT05JTkdfQk9PTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1VTRV9SQ1NfUFJFU0VOQ0VfQk9PTCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfVk9JQ0VNQUlMX05PVElGSUNBVElPTl9QRVJTSVNURU5UX0JPT0wiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9WT0lDRV9QUklWQUNZX0RJU0FCTEVfVUlfQk9PTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1ZPTFRFX1JFUExBQ0VNRU5UX1JBVF9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9WVk1fQ0VMTFVMQVJfREFUQV9SRVFVSVJFRF9CT09MIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9WVk1fQ0xJRU5UX1BSRUZJWF9TVFJJTkciIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1ZWTV9ERVNUSU5BVElPTl9OVU1CRVJfU1RSSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfVlZNX0RJU0FCTEVEX0NBUEFCSUxJVElFU19TVFJJTkdfQVJSQVkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1ZWTV9MRUdBQ1lfTU9ERV9FTkFCTEVEX0JPT0wiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1ZWTV9QT1JUX05VTUJFUl9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWV9WVk1fUFJFRkVUQ0hfQk9PTCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfVlZNX1NTTF9FTkFCTEVEX0JPT0wiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1ZWTV9UWVBFX1NUUklORyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1dPUkxEX1BIT05FX0JPT0wiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsSWRlbnRpdHkiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcGVyYXRvckFscGhhTG9uZygpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3BlcmF0b3JBbHBoYVNob3J0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsSWRlbnRpdHlDZG1hIiBzaW5jZT0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsSWRlbnRpdHkiIHNpbmNlPSIyOCIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiByZW1vdmVkPSIyOCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiIHJlbW92ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFzZXN0YXRpb25JZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhdGl0dWRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZ2l0dWRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV0d29ya0lkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lzdGVtSWQoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsSWRlbnRpdHlHc20iIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L0NlbGxJZGVudGl0eSIgc2luY2U9IjI4Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiIHJlbW92ZWQ9IjI4Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIgcmVtb3ZlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcmZjbigpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnNpYygpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2lkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFjKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWNjKClJIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1jY1N0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNbmMoKUkiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW5jU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vYmlsZU5ldHdvcmtPcGVyYXRvcigpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQc2MoKUkiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbElkZW50aXR5THRlIiBzaW5jZT0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsSWRlbnRpdHkiIHNpbmNlPSIyOCIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiByZW1vdmVkPSIyOCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiIHJlbW92ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFuZHdpZHRoKClJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVhcmZjbigpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWNjKClJIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1jY1N0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNbmMoKUkiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW5jU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vYmlsZU5ldHdvcmtPcGVyYXRvcigpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQY2koKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWMoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsSWRlbnRpdHlUZHNjZG1hIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsSWRlbnRpdHkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDcGlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFjKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWNjU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNbmNTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L0NlbGxJZGVudGl0eVdjZG1hIiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsSWRlbnRpdHkiIHNpbmNlPSIyOCIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiByZW1vdmVkPSIyOCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiIHJlbW92ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2lkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFjKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWNjKClJIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1jY1N0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNbmMoKUkiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW5jU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vYmlsZU5ldHdvcmtPcGVyYXRvcigpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQc2MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVYXJmY24oKUkiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L0NlbGxJbmZvIiBzaW5jZT0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlbGxDb25uZWN0aW9uU3RhdHVzKClJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lU3RhbXAoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlZ2lzdGVyZWQoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTk5FQ1RJT05fTk9ORSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05ORUNUSU9OX1BSSU1BUllfU0VSVklORyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05ORUNUSU9OX1NFQ09OREFSWV9TRVJWSU5HIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTk5FQ1RJT05fVU5LTk9XTiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbEluZm9DZG1hIiBzaW5jZT0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsSW5mbyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlbGxJZGVudGl0eSgpTGFuZHJvaWQvdGVsZXBob255L0NlbGxJZGVudGl0eUNkbWE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VsbFNpZ25hbFN0cmVuZ3RoKClMYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbFNpZ25hbFN0cmVuZ3RoQ2RtYTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsSW5mb0dzbSIgc2luY2U9IjE3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbEluZm8iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZWxsSWRlbnRpdHkoKUxhbmRyb2lkL3RlbGVwaG9ueS9DZWxsSWRlbnRpdHlHc207Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VsbFNpZ25hbFN0cmVuZ3RoKClMYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbFNpZ25hbFN0cmVuZ3RoR3NtOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L0NlbGxJbmZvTHRlIiBzaW5jZT0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsSW5mbyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlbGxJZGVudGl0eSgpTGFuZHJvaWQvdGVsZXBob255L0NlbGxJZGVudGl0eUx0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZWxsU2lnbmFsU3RyZW5ndGgoKUxhbmRyb2lkL3RlbGVwaG9ueS9DZWxsU2lnbmFsU3RyZW5ndGhMdGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbEluZm9XY2RtYSIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbEluZm8iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZWxsSWRlbnRpdHkoKUxhbmRyb2lkL3RlbGVwaG9ueS9DZWxsSWRlbnRpdHlXY2RtYTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZWxsU2lnbmFsU3RyZW5ndGgoKUxhbmRyb2lkL3RlbGVwaG9ueS9DZWxsU2lnbmFsU3RyZW5ndGhXY2RtYTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsTG9jYXRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVtcHR5KClMYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbExvY2F0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RMb2NhdGlvblVwZGF0ZSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L0NlbGxTaWduYWxTdHJlbmd0aCIgc2luY2U9IjE3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFzdUxldmVsKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGJtKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGV2ZWwoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR05BTF9TVFJFTkdUSF9HT09EIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR05BTF9TVFJFTkdUSF9HUkVBVCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdOQUxfU1RSRU5HVEhfTU9ERVJBVEUiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU0lHTkFMX1NUUkVOR1RIX05PTkVfT1JfVU5LTk9XTiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdOQUxfU1RSRU5HVEhfUE9PUiIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbFNpZ25hbFN0cmVuZ3RoQ2RtYSIgc2luY2U9IjE3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbFNpZ25hbFN0cmVuZ3RoIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENkbWFEYm0oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZG1hRWNpbygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENkbWFMZXZlbCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV2ZG9EYm0oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFdmRvRWNpbygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV2ZG9MZXZlbCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV2ZG9TbnIoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsU2lnbmFsU3RyZW5ndGhHc20iIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L0NlbGxTaWduYWxTdHJlbmd0aCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1pbmdBZHZhbmNlKClJIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9DZWxsU2lnbmFsU3RyZW5ndGhMdGUiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L0NlbGxTaWduYWxTdHJlbmd0aCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDcWkoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJzcnAoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJzcnEoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJzc25yKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1pbmdBZHZhbmNlKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbFNpZ25hbFN0cmVuZ3RoV2NkbWEiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L0NlbGxTaWduYWxTdHJlbmd0aCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9JY2NPcGVuTG9naWNhbENoYW5uZWxSZXNwb25zZSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhbm5lbCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdFJlc3BvbnNlKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXR1cygpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iSU5WQUxJRF9DSEFOTkVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfTUlTU0lOR19SRVNPVVJDRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX05PX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfTk9fU1VDSF9FTEVNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfVU5LTk9XTl9FUlJPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L01ibXNEb3dubG9hZFNlc3Npb24iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7SUxhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL01ibXNEb3dubG9hZFNlc3Npb25DYWxsYmFjazspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUHJvZ3Jlc3NMaXN0ZW5lcihMYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9Eb3dubG9hZFJlcXVlc3Q7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yO0xhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL0Rvd25sb2FkUHJvZ3Jlc3NMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFN0YXR1c0xpc3RlbmVyKExhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL0Rvd25sb2FkUmVxdWVzdDtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7TGFuZHJvaWQvdGVsZXBob255L21ibXMvRG93bmxvYWRTdGF0dXNMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbERvd25sb2FkKExhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL0Rvd25sb2FkUmVxdWVzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yO0lMYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9NYm1zRG93bmxvYWRTZXNzaW9uQ2FsbGJhY2s7KUxhbmRyb2lkL3RlbGVwaG9ueS9NYm1zRG93bmxvYWRTZXNzaW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yO0xhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL01ibXNEb3dubG9hZFNlc3Npb25DYWxsYmFjazspTGFuZHJvaWQvdGVsZXBob255L01ibXNEb3dubG9hZFNlc3Npb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZG93bmxvYWQoTGFuZHJvaWQvdGVsZXBob255L21ibXMvRG93bmxvYWRSZXF1ZXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGVtcEZpbGVSb290RGlyZWN0b3J5KClMamF2YS9pby9GaWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9Imxpc3RQZW5kaW5nRG93bmxvYWRzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUHJvZ3Jlc3NMaXN0ZW5lcihMYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9Eb3dubG9hZFJlcXVlc3Q7TGFuZHJvaWQvdGVsZXBob255L21ibXMvRG93bmxvYWRQcm9ncmVzc0xpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlU3RhdHVzTGlzdGVuZXIoTGFuZHJvaWQvdGVsZXBob255L21ibXMvRG93bmxvYWRSZXF1ZXN0O0xhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL0Rvd25sb2FkU3RhdHVzTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0RG93bmxvYWRTdGF0ZShMYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9Eb3dubG9hZFJlcXVlc3Q7TGFuZHJvaWQvdGVsZXBob255L21ibXMvRmlsZUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0VXBkYXRlRmlsZVNlcnZpY2VzKExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0RG93bmxvYWRLbm93bGVkZ2UoTGFuZHJvaWQvdGVsZXBob255L21ibXMvRG93bmxvYWRSZXF1ZXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGVtcEZpbGVSb290RGlyZWN0b3J5KExqYXZhL2lvL0ZpbGU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfVE9QX0xFVkVMX1RFTVBfRElSRUNUT1JZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9NQk1TX0NPTVBMRVRFRF9GSUxFX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTUJNU19ET1dOTE9BRF9SRVFVRVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9NQk1TX0RPV05MT0FEX1JFU1VMVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTUJNU19GSUxFX0lORk8iLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9DQU5DRUxMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9ET1dOTE9BRF9GQUlMVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfRVhQSVJFRCIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVUxUX0ZJTEVfUk9PVF9VTlJFQUNIQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVUxUX0lPX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfT1VUX09GX1NUT1JBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9TRVJWSUNFX0lEX05PVF9ERUZJTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfU1VDQ0VTU0ZVTCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0FDVElWRUxZX0RPV05MT0FESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfUEVORElOR19ET1dOTE9BRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX1BFTkRJTkdfRE9XTkxPQURfV0lORE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfUEVORElOR19SRVBBSVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19VTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvTWJtc1N0cmVhbWluZ1Nlc3Npb24iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7SUxhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL01ibXNTdHJlYW1pbmdTZXNzaW9uQ2FsbGJhY2s7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yO0lMYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9NYm1zU3RyZWFtaW5nU2Vzc2lvbkNhbGxiYWNrOylMYW5kcm9pZC90ZWxlcGhvbnkvTWJtc1N0cmVhbWluZ1Nlc3Npb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7TGFuZHJvaWQvdGVsZXBob255L21ibXMvTWJtc1N0cmVhbWluZ1Nlc3Npb25DYWxsYmFjazspTGFuZHJvaWQvdGVsZXBob255L01ibXNTdHJlYW1pbmdTZXNzaW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RVcGRhdGVTdHJlYW1pbmdTZXJ2aWNlcyhMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFN0cmVhbWluZyhMYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9TdHJlYW1pbmdTZXJ2aWNlSW5mbztMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7TGFuZHJvaWQvdGVsZXBob255L21ibXMvU3RyZWFtaW5nU2VydmljZUNhbGxiYWNrOylMYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9TdHJlYW1pbmdTZXJ2aWNlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L05laWdoYm9yaW5nQ2VsbEluZm8iIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9sYW5nL1N0cmluZztJKVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENpZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhYygpSSIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZXR3b3JrVHlwZSgpSSIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQc2MoKUkiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnNzaSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENpZChJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UnNzaShJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTktOT1dOX0NJRCIvPgotCQk8ZmllbGQgbmFtZT0iVU5LTk9XTl9SU1NJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvTmV0d29ya1NjYW4iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BTY2FuKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9JTlRFUlJVUFRFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfSU5WQUxJRF9TQ0FOIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9JTlZBTElEX1NDQU5JRCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTU9ERU1fRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX01PREVNX1VOQVZBSUxBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9SQURJT19JTlRFUkZBQ0VfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1VOU1VQUE9SVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUNDRVNTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvTmV0d29ya1NjYW5SZXF1ZXN0IiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJW0xhbmRyb2lkL3RlbGVwaG9ueS9SYWRpb0FjY2Vzc1NwZWNpZmllcjtJSVpJTGphdmEvdXRpbC9BcnJheUxpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmNyZW1lbnRhbFJlc3VsdHMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmNyZW1lbnRhbFJlc3VsdHNQZXJpb2RpY2l0eSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFNlYXJjaFRpbWUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQbG1ucygpTGphdmEvdXRpbC9BcnJheUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhblR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWFyY2hQZXJpb2RpY2l0eSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNwZWNpZmllcnMoKVtMYW5kcm9pZC90ZWxlcGhvbnkvUmFkaW9BY2Nlc3NTcGVjaWZpZXI7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0FOX1RZUEVfT05FX1NIT1QiLz4KLQkJPGZpZWxkIG5hbWU9IlNDQU5fVFlQRV9QRVJJT0RJQyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L1Bob25lTnVtYmVyRm9ybWF0dGluZ1RleHRXYXRjaGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L1RleHRXYXRjaGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9QaG9uZU51bWJlclV0aWxzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRUdHNTcGFuKExhbmRyb2lkL3RleHQvU3Bhbm5hYmxlO0lJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbGxlZFBhcnR5QkNERnJhZ21lbnRUb1N0cmluZyhbQklJKUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxsZWRQYXJ0eUJDREZyYWdtZW50VG9TdHJpbmcoW0JJSUkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxsZWRQYXJ0eUJDRFRvU3RyaW5nKFtCSUkpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbGxlZFBhcnR5QkNEVG9TdHJpbmcoW0JJSUkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udmVydEtleXBhZExldHRlcnNUb0RpZ2l0cyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVHRzU3BhbihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVHRzU3Bhbm5hYmxlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4dHJhY3ROZXR3b3JrUG9ydGlvbihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXh0cmFjdFBvc3REaWFsUG9ydGlvbihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0SmFwYW5lc2VOdW1iZXIoTGFuZHJvaWQvdGV4dC9FZGl0YWJsZTspViIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0TmFucE51bWJlcihMYW5kcm9pZC90ZXh0L0VkaXRhYmxlOylWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdE51bWJlcihMYW5kcm9pZC90ZXh0L0VkaXRhYmxlO0kpViIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXROdW1iZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXROdW1iZXIoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0TnVtYmVyKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdE51bWJlclRvRTE2NChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXROdW1iZXJUb1JGQzM5NjYoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9ybWF0VHlwZUZvckxvY2FsZShMamF2YS91dGlsL0xvY2FsZTspSSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1iZXJGcm9tSW50ZW50KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaXBwZWRSZXZlcnNlZChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXMxMktleShDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RpYWxhYmxlKEMpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW1lcmdlbmN5TnVtYmVyKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNHbG9iYWxQaG9uZU51bWJlcihMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSVNPRGlnaXQoQylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMb2NhbEVtZXJnZW5jeU51bWJlcihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTm9uU2VwYXJhdG9yKEMpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVhbGx5RGlhbGFibGUoQylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTdGFydHNQb3N0RGlhbChDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZvaWNlTWFpbE51bWJlcihMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXZWxsRm9ybWVkU21zQWRkcmVzcyhMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5ldHdvcmtQb3J0aW9uVG9DYWxsZWRQYXJ0eUJDRChMamF2YS9sYW5nL1N0cmluZzspW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXR3b3JrUG9ydGlvblRvQ2FsbGVkUGFydHlCQ0RXaXRoTGVuZ3RoKExqYXZhL2xhbmcvU3RyaW5nOylbQiIvPgotCQk8bWV0aG9kIG5hbWU9Im5vcm1hbGl6ZU51bWJlcihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJudW1iZXJUb0NhbGxlZFBhcnR5QkNEKExqYXZhL2xhbmcvU3RyaW5nOylbQiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJudW1iZXJUb0NhbGxlZFBhcnR5QkNEKExqYXZhL2xhbmcvU3RyaW5nO0kpW0IiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2VVbmljb2RlRGlnaXRzKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InN0cmluZ0Zyb21TdHJpbmdBbmRUT0EoTGphdmEvbGFuZy9TdHJpbmc7SSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdHJpcFNlcGFyYXRvcnMoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQ2FsbGVySURNaW5NYXRjaChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9hRnJvbVN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8ZmllbGQgbmFtZT0iQkNEX0VYVEVOREVEX1RZUEVfQ0FMTEVEX1BBUlRZIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkJDRF9FWFRFTkRFRF9UWVBFX0VGX0FETiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfSkFQQU4iIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfTkFOUCIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX1VOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9IlBBVVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT0FfSW50ZXJuYXRpb25hbCIvPgotCQk8ZmllbGQgbmFtZT0iVE9BX1Vua25vd24iLz4KLQkJPGZpZWxkIG5hbWU9IldBSVQiLz4KLQkJPGZpZWxkIG5hbWU9IldJTEQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9QaG9uZVN0YXRlTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FsbEZvcndhcmRpbmdJbmRpY2F0b3JDaGFuZ2VkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2FsbFN0YXRlQ2hhbmdlZChJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNlbGxJbmZvQ2hhbmdlZChMamF2YS91dGlsL0xpc3Q7KVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2VsbExvY2F0aW9uQ2hhbmdlZChMYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbExvY2F0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EYXRhQWN0aXZpdHkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EYXRhQ29ubmVjdGlvblN0YXRlQ2hhbmdlZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRhdGFDb25uZWN0aW9uU3RhdGVDaGFuZ2VkKElJKVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25NZXNzYWdlV2FpdGluZ0luZGljYXRvckNoYW5nZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZXJ2aWNlU3RhdGVDaGFuZ2VkKExhbmRyb2lkL3RlbGVwaG9ueS9TZXJ2aWNlU3RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNpZ25hbFN0cmVuZ3RoQ2hhbmdlZChJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TaWduYWxTdHJlbmd0aHNDaGFuZ2VkKExhbmRyb2lkL3RlbGVwaG9ueS9TaWduYWxTdHJlbmd0aDspViIgc2luY2U9IjciLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVzZXJNb2JpbGVEYXRhU3RhdGVDaGFuZ2VkKFopViIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMSVNURU5fQ0FMTF9GT1JXQVJESU5HX0lORElDQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iTElTVEVOX0NBTExfU1RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkxJU1RFTl9DRUxMX0lORk8iIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iTElTVEVOX0NFTExfTE9DQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkxJU1RFTl9EQVRBX0FDVElWSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSVNURU5fREFUQV9DT05ORUNUSU9OX1NUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSVNURU5fTUVTU0FHRV9XQUlUSU5HX0lORElDQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iTElTVEVOX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkxJU1RFTl9TRVJWSUNFX1NUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSVNURU5fU0lHTkFMX1NUUkVOR1RIIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTElTVEVOX1NJR05BTF9TVFJFTkdUSFMiIHNpbmNlPSI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMSVNURU5fVVNFUl9NT0JJTEVfREFUQV9TVEFURSIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvUmFkaW9BY2Nlc3NTcGVjaWZpZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElbSVtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYW5kcygpW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFubmVscygpW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSYWRpb0FjY2Vzc05ldHdvcmsoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9TZXJ2aWNlU3RhdGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3RlbGVwaG9ueS9TZXJ2aWNlU3RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5RnJvbShMYW5kcm9pZC90ZWxlcGhvbnkvU2VydmljZVN0YXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2RtYU5ldHdvcmtJZCgpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2RtYVN5c3RlbUlkKClJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZWxsQmFuZHdpZHRocygpW0kiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYW5uZWxOdW1iZXIoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldER1cGxleE1vZGUoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElzTWFudWFsU2VsZWN0aW9uKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3BlcmF0b3JBbHBoYUxvbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9wZXJhdG9yQWxwaGFTaG9ydCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3BlcmF0b3JOdW1lcmljKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb2FtaW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJc01hbnVhbFNlbGVjdGlvbihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcGVyYXRvck5hbWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSb2FtaW5nKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXRlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXRlT2ZmKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RhdGVPdXRPZlNlcnZpY2UoKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkRVUExFWF9NT0RFX0ZERCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEVVBMRVhfTU9ERV9UREQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRFVQTEVYX01PREVfVU5LTk9XTiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9FTUVSR0VOQ1lfT05MWSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfSU5fU0VSVklDRSIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfT1VUX09GX1NFUlZJQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX1BPV0VSX09GRiIvPgotCQk8ZmllbGQgbmFtZT0iVU5LTk9XTl9JRCIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvU2lnbmFsU3RyZW5ndGgiIHNpbmNlPSI3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZG1hRGJtKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2RtYUVjaW8oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFdmRvRGJtKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXZkb0VjaW8oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFdmRvU25yKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3NtQml0RXJyb3JSYXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3NtU2lnbmFsU3RyZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZXZlbCgpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNHc20oKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9TbXNNYW5hZ2VyIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQXBwU3BlY2lmaWNTbXNUb2tlbihMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXZpZGVNZXNzYWdlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0FycmF5TGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb3dubG9hZE11bHRpbWVkaWFNZXNzYWdlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9uZXQvVXJpO0xhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FycmllckNvbmZpZ1ZhbHVlcygpTGFuZHJvaWQvb3MvQnVuZGxlOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdCgpTGFuZHJvaWQvdGVsZXBob255L1Ntc01hbmFnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFNtc1N1YnNjcmlwdGlvbklkKClJIiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTbXNNYW5hZ2VyRm9yU3Vic2NyaXB0aW9uSWQoSSlMYW5kcm9pZC90ZWxlcGhvbnkvU21zTWFuYWdlcjsiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YnNjcmlwdGlvbklkKClJIiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmplY3RTbXNQZHUoW0JMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZERhdGFNZXNzYWdlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1NbQkxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50O0xhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZE11bHRpbWVkaWFNZXNzYWdlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTtMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZE11bHRpcGFydFRleHRNZXNzYWdlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvQXJyYXlMaXN0O0xqYXZhL3V0aWwvQXJyYXlMaXN0O0xqYXZhL3V0aWwvQXJyYXlMaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZFRleHRNZXNzYWdlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50O0xhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZFRleHRNZXNzYWdlV2l0aG91dFBlcnNpc3RpbmcoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTU1TX0RBVEEiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTU1TX0hUVFBfU1RBVFVTIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19DT05GSUdfQUxJQVNfRU5BQkxFRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX0FMSUFTX01BWF9DSEFSUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX0FMSUFTX01JTl9DSEFSUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX0FMTE9XX0FUVEFDSF9BVURJTyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX0FQUEVORF9UUkFOU0FDVElPTl9JRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX0VNQUlMX0dBVEVXQVlfTlVNQkVSIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19DT05GSUdfR1JPVVBfTU1TX0VOQUJMRUQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTU1TX0NPTkZJR19IVFRQX1BBUkFNUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX0hUVFBfU09DS0VUX1RJTUVPVVQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTU1TX0NPTkZJR19NQVhfSU1BR0VfSEVJR0hUIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19DT05GSUdfTUFYX0lNQUdFX1dJRFRIIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19DT05GSUdfTUFYX01FU1NBR0VfU0laRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX01FU1NBR0VfVEVYVF9NQVhfU0laRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX01NU19ERUxJVkVSWV9SRVBPUlRfRU5BQkxFRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX01NU19FTkFCTEVEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19DT05GSUdfTU1TX1JFQURfUkVQT1JUX0VOQUJMRUQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTU1TX0NPTkZJR19NVUxUSVBBUlRfU01TX0VOQUJMRUQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTU1TX0NPTkZJR19OQUlfU1VGRklYIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19DT05GSUdfTk9USUZZX1dBUF9NTVNDX0VOQUJMRUQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTU1TX0NPTkZJR19SRUNJUElFTlRfTElNSVQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTU1TX0NPTkZJR19TRU5EX01VTFRJUEFSVF9TTVNfQVNfU0VQQVJBVEVfTUVTU0FHRVMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTU1TX0NPTkZJR19TSE9XX0NFTExfQlJPQURDQVNUX0FQUF9MSU5LUyIgc2luY2U9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX1NNU19ERUxJVkVSWV9SRVBPUlRfRU5BQkxFRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX1NNU19UT19NTVNfVEVYVF9MRU5HVEhfVEhSRVNIT0xEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19DT05GSUdfU01TX1RPX01NU19URVhUX1RIUkVTSE9MRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX1NVQkpFQ1RfTUFYX0xFTkdUSCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX1NVUFBPUlRfSFRUUF9DSEFSU0VUX0hFQURFUiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfQ09ORklHX1NVUFBPUlRfTU1TX0NPTlRFTlRfRElTUE9TSVRJT04iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTU1TX0NPTkZJR19VQV9QUk9GX1RBR19OQU1FIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19DT05GSUdfVUFfUFJPRl9VUkwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTU1TX0NPTkZJR19VU0VSX0FHRU5UIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19FUlJPUl9DT05GSUdVUkFUSU9OX0VSUk9SIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19FUlJPUl9IVFRQX0ZBSUxVUkUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTU1TX0VSUk9SX0lOVkFMSURfQVBOIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19FUlJPUl9JT19FUlJPUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfRVJST1JfTk9fREFUQV9ORVRXT1JLIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19FUlJPUl9SRVRSWSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNTVNfRVJST1JfVU5BQkxFX0NPTk5FQ1RfTU1TIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1NU19FUlJPUl9VTlNQRUNJRklFRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfRVJST1JfR0VORVJJQ19GQUlMVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfRVJST1JfTElNSVRfRVhDRUVERUQiIHNpbmNlPSIyNyIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVUxUX0VSUk9SX05PX1NFUlZJQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9FUlJPUl9OVUxMX1BEVSIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVUxUX0VSUk9SX1JBRElPX09GRiIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVUxUX0VSUk9SX1NIT1JUX0NPREVfTkVWRVJfQUxMT1dFRCIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfRVJST1JfU0hPUlRfQ09ERV9OT1RfQUxMT1dFRCIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfT05fSUNDX0ZSRUUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19PTl9JQ0NfUkVBRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX09OX0lDQ19TRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfT05fSUNDX1VOUkVBRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX09OX0lDQ19VTlNFTlQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9TbXNNZXNzYWdlIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxjdWxhdGVMZW5ndGgoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7WilbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbGN1bGF0ZUxlbmd0aChMamF2YS9sYW5nL1N0cmluZztaKVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRnJvbVBkdShbQilMYW5kcm9pZC90ZWxlcGhvbnkvU21zTWVzc2FnZTsiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRnJvbVBkdShbQkxqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZWxlcGhvbnkvU21zTWVzc2FnZTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlNZXNzYWdlQm9keSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU9yaWdpbmF0aW5nQWRkcmVzcygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW1haWxCb2R5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbWFpbEZyb20oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZGV4T25JY2MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmRleE9uU2ltKClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lc3NhZ2VCb2R5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXNzYWdlQ2xhc3MoKUxhbmRyb2lkL3RlbGVwaG9ueS9TbXNNZXNzYWdlJE1lc3NhZ2VDbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmlnaW5hdGluZ0FkZHJlc3MoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBkdSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm90b2NvbElkZW50aWZpZXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQc2V1ZG9TdWJqZWN0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlQ2VudGVyQWRkcmVzcygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdHVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdHVzT25JY2MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0dXNPblNpbSgpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJtaXRQZHUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7WilMYW5kcm9pZC90ZWxlcGhvbnkvU21zTWVzc2FnZSRTdWJtaXRQZHU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VibWl0UGR1KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1NbQlopTGFuZHJvaWQvdGVsZXBob255L1Ntc01lc3NhZ2UkU3VibWl0UGR1OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRQTGF5ZXJMZW5ndGhGb3JQRFUoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXBNaWxsaXMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyRGF0YSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NwaHNNd2lNZXNzYWdlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbWFpbCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTVdJQ2xlYXJNZXNzYWdlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNNV0lTZXRNZXNzYWdlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNNd2lEb250U3RvcmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlcGxhY2UoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlcGx5UGF0aFByZXNlbnQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N0YXR1c1JlcG9ydE1lc3NhZ2UoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ09ESU5HXzE2QklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNPRElOR183QklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNPRElOR184QklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNPRElOR19VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfM0dQUCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfM0dQUDIiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1VTRVJfREFUQV9CWVRFUyIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1VTRVJfREFUQV9CWVRFU19XSVRIX0hFQURFUiIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1VTRVJfREFUQV9TRVBURVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfVVNFUl9EQVRBX1NFUFRFVFNfV0lUSF9IRUFERVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9TbXNNZXNzYWdlJE1lc3NhZ2VDbGFzcyIgc2luY2U9IjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RlbGVwaG9ueS9TbXNNZXNzYWdlJE1lc3NhZ2VDbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC90ZWxlcGhvbnkvU21zTWVzc2FnZSRNZXNzYWdlQ2xhc3M7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDTEFTU18wIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTEFTU18xIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTEFTU18yIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTEFTU18zIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvU21zTWVzc2FnZSRTdWJtaXRQZHUiIHNpbmNlPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iZW5jb2RlZE1lc3NhZ2UiLz4KLQkJPGZpZWxkIG5hbWU9ImVuY29kZWRTY0FkZHJlc3MiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9TdWJzY3JpcHRpb25JbmZvIiBzaW5jZT0iMjIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUljb25CaXRtYXAoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2Fycmllck5hbWUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvdW50cnlJc28oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFSb2FtaW5nKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEljY0lkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJY29uVGludCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1jYygpSSIgZGVwcmVjYXRlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNY2NTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW5jKClJIiBkZXByZWNhdGVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1uY1N0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1iZXIoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmVudFN1YklkKClJIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaW1TbG90SW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJzY3JpcHRpb25JZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW1iZWRkZWQoKVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT3Bwb3J0dW5pc3RpYygpWiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvU3Vic2NyaXB0aW9uTWFuYWdlciIgc2luY2U9IjIyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRPblN1YnNjcmlwdGlvbnNDaGFuZ2VkTGlzdGVuZXIoTGFuZHJvaWQvdGVsZXBob255L1N1YnNjcmlwdGlvbk1hbmFnZXIkT25TdWJzY3JpcHRpb25zQ2hhbmdlZExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuTWFuYWdlU3Vic2NyaXB0aW9uKExhbmRyb2lkL3RlbGVwaG9ueS9TdWJzY3JpcHRpb25JbmZvOylaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGFuZHJvaWQvdGVsZXBob255L1N1YnNjcmlwdGlvbk1hbmFnZXI7IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjY2Vzc2libGVTdWJzY3JpcHRpb25JbmZvTGlzdCgpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZlU3Vic2NyaXB0aW9uSW5mbyhJKUxhbmRyb2lkL3RlbGVwaG9ueS9TdWJzY3JpcHRpb25JbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2ZVN1YnNjcmlwdGlvbkluZm9Db3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2ZVN1YnNjcmlwdGlvbkluZm9Db3VudE1heCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2ZVN1YnNjcmlwdGlvbkluZm9Gb3JTaW1TbG90SW5kZXgoSSlMYW5kcm9pZC90ZWxlcGhvbnkvU3Vic2NyaXB0aW9uSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3RpdmVTdWJzY3JpcHRpb25JbmZvTGlzdCgpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHREYXRhU3Vic2NyaXB0aW9uSWQoKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRTbXNTdWJzY3JpcHRpb25JZCgpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFN1YnNjcmlwdGlvbklkKClJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0Vm9pY2VTdWJzY3JpcHRpb25JZCgpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3Vic2NyaXB0aW9uUGxhbnMoSSlMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05ldHdvcmtSb2FtaW5nKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU9uU3Vic2NyaXB0aW9uc0NoYW5nZWRMaXN0ZW5lcihMYW5kcm9pZC90ZWxlcGhvbnkvU3Vic2NyaXB0aW9uTWFuYWdlciRPblN1YnNjcmlwdGlvbnNDaGFuZ2VkTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdWJzY3JpcHRpb25PdmVycmlkZUNvbmdlc3RlZChJWkopViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3Vic2NyaXB0aW9uT3ZlcnJpZGVVbm1ldGVyZWQoSVpKKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1YnNjcmlwdGlvblBsYW5zKElMamF2YS91dGlsL0xpc3Q7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InN3aXRjaFRvU3Vic2NyaXB0aW9uKElMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fREVGQVVMVF9TTVNfU1VCU0NSSVBUSU9OX0NIQU5HRUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RFRkFVTFRfU1VCU0NSSVBUSU9OX0NIQU5HRUQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX01BTkFHRV9TVUJTQ1JJUFRJT05fUExBTlMiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1JFRlJFU0hfU1VCU0NSSVBUSU9OX1BMQU5TIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfUk9BTUlOR19ESVNBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBX1JPQU1JTkdfRU5BQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TVUJTQ1JJUFRJT05fSU5ERVgiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iSU5WQUxJRF9TVUJTQ1JJUFRJT05fSUQiIHNpbmNlPSIyNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L1N1YnNjcmlwdGlvbk1hbmFnZXIkT25TdWJzY3JpcHRpb25zQ2hhbmdlZExpc3RlbmVyIiBzaW5jZT0iMjIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdWJzY3JpcHRpb25zQ2hhbmdlZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L1N1YnNjcmlwdGlvblBsYW4iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImN5Y2xlSXRlcmF0b3IoKUxqYXZhL3V0aWwvSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YUxpbWl0QmVoYXZpb3IoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhTGltaXRCeXRlcygpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFVc2FnZUJ5dGVzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YVVzYWdlVGltZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1bW1hcnkoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpdGxlKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkJZVEVTX1VOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9IkJZVEVTX1VOTElNSVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iTElNSVRfQkVIQVZJT1JfQklMTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSU1JVF9CRUhBVklPUl9ESVNBQkxFRCIvPgotCQk8ZmllbGQgbmFtZT0iTElNSVRfQkVIQVZJT1JfVEhST1RUTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSU1JVF9CRUhBVklPUl9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FX1VOS05PV04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9TdWJzY3JpcHRpb25QbGFuJEJ1aWxkZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3RpbWUvWm9uZWREYXRlVGltZTtMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7TGphdmEvdGltZS9QZXJpb2Q7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC90ZWxlcGhvbnkvU3Vic2NyaXB0aW9uUGxhbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVOb25yZWN1cnJpbmcoTGphdmEvdGltZS9ab25lZERhdGVUaW1lO0xqYXZhL3RpbWUvWm9uZWREYXRlVGltZTspTGFuZHJvaWQvdGVsZXBob255L1N1YnNjcmlwdGlvblBsYW4kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVSZWN1cnJpbmcoTGphdmEvdGltZS9ab25lZERhdGVUaW1lO0xqYXZhL3RpbWUvUGVyaW9kOylMYW5kcm9pZC90ZWxlcGhvbnkvU3Vic2NyaXB0aW9uUGxhbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFMaW1pdChKSSlMYW5kcm9pZC90ZWxlcGhvbnkvU3Vic2NyaXB0aW9uUGxhbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFVc2FnZShKSilMYW5kcm9pZC90ZWxlcGhvbnkvU3Vic2NyaXB0aW9uUGxhbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1bW1hcnkoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3RlbGVwaG9ueS9TdWJzY3JpcHRpb25QbGFuJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3RlbGVwaG9ueS9TdWJzY3JpcHRpb25QbGFuJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvVGVsZXBob255TWFuYWdlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuQ2hhbmdlRHRtZlRvbmVMZW5ndGgoKVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUZvclBob25lQWNjb3VudEhhbmRsZShMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTspTGFuZHJvaWQvdGVsZXBob255L1RlbGVwaG9ueU1hbmFnZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGb3JTdWJzY3JpcHRpb25JZChJKUxhbmRyb2lkL3RlbGVwaG9ueS9UZWxlcGhvbnlNYW5hZ2VyOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxsQ2VsbEluZm8oKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGxTdGF0ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhcnJpZXJDb25maWcoKUxhbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VsbExvY2F0aW9uKClMYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbExvY2F0aW9uOyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhQWN0aXZpdHkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhTmV0d29ya1R5cGUoKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFTdGF0ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZUlkKClMamF2YS9sYW5nL1N0cmluZzsiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlSWQoSSlMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXZpY2VTb2Z0d2FyZVZlcnNpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcmJpZGRlblBsbW5zKClbTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcm91cElkTGV2ZWwxKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEljY0F1dGhlbnRpY2F0aW9uKElJTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1laSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbWVpKEkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lMU51bWJlcigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFudWZhY3R1cmVyQ29kZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYW51ZmFjdHVyZXJDb2RlKEkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZWlkKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1laWQoSSlMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1tc1VBUHJvZlVybCgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNbXNVc2VyQWdlbnQoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFpKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5laWdoYm9yaW5nQ2VsbEluZm8oKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5ldHdvcmtDb3VudHJ5SXNvKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZXR3b3JrT3BlcmF0b3IoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5ldHdvcmtPcGVyYXRvck5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5ldHdvcmtTcGVjaWZpZXIoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV0d29ya1R5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQaG9uZUNvdW50KClJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQaG9uZVR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlU3RhdGUoKUxhbmRyb2lkL3RlbGVwaG9ueS9TZXJ2aWNlU3RhdGU7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaWduYWxTdHJlbmd0aCgpTGFuZHJvaWQvdGVsZXBob255L1NpZ25hbFN0cmVuZ3RoOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2ltQ2FycmllcklkKClJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaW1DYXJyaWVySWROYW1lKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpbUNvdW50cnlJc28oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpbU9wZXJhdG9yKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaW1PcGVyYXRvck5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpbVNlcmlhbE51bWJlcigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2ltU3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaW1TdGF0ZShJKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YnNjcmliZXJJZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZUFsbG9jYXRpb25Db2RlKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGVBbGxvY2F0aW9uQ29kZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmlzdWFsVm9pY2VtYWlsUGFja2FnZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vm9pY2VNYWlsQWxwaGFUYWcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZvaWNlTWFpbE51bWJlcigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vm9pY2VOZXR3b3JrVHlwZSgpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vm9pY2VtYWlsUmluZ3RvbmVVcmkoTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnRIYW5kbGU7KUxhbmRyb2lkL25ldC9Vcmk7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNDYXJyaWVyUHJpdmlsZWdlcygpWiIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzSWNjQ2FyZCgpWiIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJpY2NDbG9zZUxvZ2ljYWxDaGFubmVsKEkpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaWNjRXhjaGFuZ2VTaW1JTyhJSUlJSUxqYXZhL2xhbmcvU3RyaW5nOylbQiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaWNjT3BlbkxvZ2ljYWxDaGFubmVsKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZWxlcGhvbnkvSWNjT3BlbkxvZ2ljYWxDaGFubmVsUmVzcG9uc2U7IiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaWNjT3BlbkxvZ2ljYWxDaGFubmVsKExqYXZhL2xhbmcvU3RyaW5nO0kpTGFuZHJvaWQvdGVsZXBob255L0ljY09wZW5Mb2dpY2FsQ2hhbm5lbFJlc3BvbnNlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaWNjVHJhbnNtaXRBcGR1QmFzaWNDaGFubmVsKElJSUlJTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaWNjVHJhbnNtaXRBcGR1TG9naWNhbENoYW5uZWwoSUlJSUlJTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb25jdXJyZW50Vm9pY2VBbmREYXRhU3VwcG9ydGVkKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RhdGFFbmFibGVkKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0hlYXJpbmdBaWRDb21wYXRpYmlsaXR5U3VwcG9ydGVkKClaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05ldHdvcmtSb2FtaW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTbXNDYXBhYmxlKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1R0eU1vZGVTdXBwb3J0ZWQoKVoiIHNpbmNlPSIyMyIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZvaWNlQ2FwYWJsZSgpWiIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWb2ljZW1haWxWaWJyYXRpb25FbmFibGVkKExhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50SGFuZGxlOylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1dvcmxkUGhvbmUoKVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Imxpc3RlbihMYW5kcm9pZC90ZWxlcGhvbnkvUGhvbmVTdGF0ZUxpc3RlbmVyO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3ROZXR3b3JrU2NhbihMYW5kcm9pZC90ZWxlcGhvbnkvTmV0d29ya1NjYW5SZXF1ZXN0O0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjtMYW5kcm9pZC90ZWxlcGhvbnkvVGVsZXBob255U2Nhbk1hbmFnZXIkTmV0d29ya1NjYW5DYWxsYmFjazspTGFuZHJvaWQvdGVsZXBob255L05ldHdvcmtTY2FuOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZERpYWxlclNwZWNpYWxDb2RlKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kRW52ZWxvcGVXaXRoU3RhdHVzKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRVc3NkUmVxdWVzdChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC90ZWxlcGhvbnkvVGVsZXBob255TWFuYWdlciRVc3NkUmVzcG9uc2VDYWxsYmFjaztMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kVmlzdWFsVm9pY2VtYWlsU21zKExqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0YUVuYWJsZWQoWilWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaW5lMU51bWJlckZvckRpc3BsYXkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5ldHdvcmtTZWxlY3Rpb25Nb2RlQXV0b21hdGljKClWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROZXR3b3JrU2VsZWN0aW9uTW9kZU1hbnVhbChMamF2YS9sYW5nL1N0cmluZztaKVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9wZXJhdG9yQnJhbmRPdmVycmlkZShMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJlZmVycmVkTmV0d29ya1R5cGVUb0dsb2JhbCgpWiIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlzdWFsVm9pY2VtYWlsU21zRmlsdGVyU2V0dGluZ3MoTGFuZHJvaWQvdGVsZXBob255L1Zpc3VhbFZvaWNlbWFpbFNtc0ZpbHRlclNldHRpbmdzOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWb2ljZU1haWxOdW1iZXIoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZvaWNlbWFpbFJpbmd0b25lVXJpKExhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50SGFuZGxlO0xhbmRyb2lkL25ldC9Vcmk7KVYiIHNpbmNlPSIyNiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWb2ljZW1haWxWaWJyYXRpb25FbmFibGVkKExhbmRyb2lkL3RlbGVjb20vUGhvbmVBY2NvdW50SGFuZGxlO1opViIgc2luY2U9IjI2IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NPTkZJR1VSRV9WT0lDRU1BSUwiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BIT05FX1NUQVRFX0NIQU5HRUQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUkVTUE9ORF9WSUFfTUVTU0FHRSIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0hPV19WT0lDRU1BSUxfTk9USUZJQ0FUSU9OIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TVUJTQ1JJUFRJT05fQ0FSUklFUl9JREVOVElUWV9DSEFOR0VEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFQUFRZUEVfQ1NJTSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUFBUWVBFX0lTSU0iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQVBQVFlQRV9SVUlNIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFQUFRZUEVfU0lNIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFQUFRZUEVfVVNJTSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRIVFlQRV9FQVBfQUtBIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVEhUWVBFX0VBUF9TSU0iIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FMTF9TVEFURV9JRExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQUxMX1NUQVRFX09GRkhPT0siLz4KLQkJPGZpZWxkIG5hbWU9IkNBTExfU1RBVEVfUklOR0lORyIvPgotCQk8ZmllbGQgbmFtZT0iQ0RNQV9ST0FNSU5HX01PREVfQUZGSUxJQVRFRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRE1BX1JPQU1JTkdfTU9ERV9BTlkiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQ0RNQV9ST0FNSU5HX01PREVfSE9NRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRE1BX1JPQU1JTkdfTU9ERV9SQURJT19ERUZBVUxUIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfQUNUSVZJVFlfRE9STUFOVCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfQUNUSVZJVFlfSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfQUNUSVZJVFlfSU5PVVQiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfQUNUSVZJVFlfTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iREFUQV9BQ1RJVklUWV9PVVQiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfQ09OTkVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBX0NPTk5FQ1RJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfRElTQ09OTkVDVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBX1NVU1BFTkRFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0FMTF9WT0lDRU1BSUxfSU5URU5UIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0NBUlJJRVJfSUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0FSUklFUl9OQU1FIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0hJREVfUFVCTElDX1NFVFRJTkdTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0lOQ09NSU5HX05VTUJFUiIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0lTX1JFRlJFU0giIHNpbmNlPSIyNyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTEFVTkNIX1ZPSUNFTUFJTF9TRVRUSU5HU19JTlRFTlQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfTk9USUZJQ0FUSU9OX0NPVU5UIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1BIT05FX0FDQ09VTlRfSEFORExFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NUQVRFIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU1RBVEVfSURMRSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1NUQVRFX09GRkhPT0siIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9TVEFURV9SSU5HSU5HIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfU1VCU0NSSVBUSU9OX0lEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX1ZPSUNFTUFJTF9OVU1CRVIiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQURBVEFfSElERV9WT0lDRU1BSUxfU0VUVElOR1NfTUVOVSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLX1RZUEVfMXhSVFQiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLX1RZUEVfQ0RNQSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVFdPUktfVFlQRV9FREdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLX1RZUEVfRUhSUEQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SS19UWVBFX0VWRE9fMCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVFdPUktfVFlQRV9FVkRPX0EiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLX1RZUEVfRVZET19CIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SS19UWVBFX0dQUlMiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVFdPUktfVFlQRV9HU00iIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SS19UWVBFX0hTRFBBIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SS19UWVBFX0hTUEEiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLX1RZUEVfSFNQQVAiIHNpbmNlPSIxMyIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SS19UWVBFX0hTVVBBIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SS19UWVBFX0lERU4iIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLX1RZUEVfSVdMQU4iIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SS19UWVBFX0xURSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVRXT1JLX1RZUEVfVERfU0NETUEiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iTkVUV09SS19UWVBFX1VNVFMiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVFdPUktfVFlQRV9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORV9UWVBFX0NETUEiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORV9UWVBFX0dTTSIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVfVFlQRV9OT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORV9UWVBFX1NJUCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSU1fU1RBVEVfQUJTRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSU1fU1RBVEVfQ0FSRF9JT19FUlJPUiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTSU1fU1RBVEVfQ0FSRF9SRVNUUklDVEVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNJTV9TVEFURV9ORVRXT1JLX0xPQ0tFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0lNX1NUQVRFX05PVF9SRUFEWSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTSU1fU1RBVEVfUEVSTV9ESVNBQkxFRCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTSU1fU1RBVEVfUElOX1JFUVVJUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSU1fU1RBVEVfUFVLX1JFUVVJUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSU1fU1RBVEVfUkVBRFkiLz4KLQkJPGZpZWxkIG5hbWU9IlNJTV9TVEFURV9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTktOT1dOX0NBUlJJRVJfSUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVVNTRF9FUlJPUl9TRVJWSUNFX1VOQVZBSUwiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iVVNTRF9SRVRVUk5fRkFJTFVSRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWVk1fVFlQRV9DVlZNIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlZWTV9UWVBFX09NVFAiIHNpbmNlPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L1RlbGVwaG9ueU1hbmFnZXIkVXNzZFJlc3BvbnNlQ2FsbGJhY2siIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlY2VpdmVVc3NkUmVzcG9uc2UoTGFuZHJvaWQvdGVsZXBob255L1RlbGVwaG9ueU1hbmFnZXI7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlY2VpdmVVc3NkUmVzcG9uc2VGYWlsZWQoTGFuZHJvaWQvdGVsZXBob255L1RlbGVwaG9ueU1hbmFnZXI7TGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvVGVsZXBob255U2Nhbk1hbmFnZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9UZWxlcGhvbnlTY2FuTWFuYWdlciROZXR3b3JrU2NhbkNhbGxiYWNrIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db21wbGV0ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXJyb3IoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXN1bHRzKExqYXZhL3V0aWwvTGlzdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L1Zpc3VhbFZvaWNlbWFpbFNlcnZpY2UiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNlbGxTZXJ2aWNlQ29ubmVjdGVkKExhbmRyb2lkL3RlbGVwaG9ueS9WaXN1YWxWb2ljZW1haWxTZXJ2aWNlJFZpc3VhbFZvaWNlbWFpbFRhc2s7TGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnRIYW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNpbVJlbW92ZWQoTGFuZHJvaWQvdGVsZXBob255L1Zpc3VhbFZvaWNlbWFpbFNlcnZpY2UkVmlzdWFsVm9pY2VtYWlsVGFzaztMYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudEhhbmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU21zUmVjZWl2ZWQoTGFuZHJvaWQvdGVsZXBob255L1Zpc3VhbFZvaWNlbWFpbFNlcnZpY2UkVmlzdWFsVm9pY2VtYWlsVGFzaztMYW5kcm9pZC90ZWxlcGhvbnkvVmlzdWFsVm9pY2VtYWlsU21zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdG9wcGVkKExhbmRyb2lkL3RlbGVwaG9ueS9WaXN1YWxWb2ljZW1haWxTZXJ2aWNlJFZpc3VhbFZvaWNlbWFpbFRhc2s7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfSU5URVJGQUNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvVmlzdWFsVm9pY2VtYWlsU2VydmljZSRWaXN1YWxWb2ljZW1haWxUYXNrIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9NZXNzZW5nZXI7SSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5pc2goKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9WaXN1YWxWb2ljZW1haWxTbXMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmllbGRzKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVzc2FnZUJvZHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBob25lQWNjb3VudEhhbmRsZSgpTGFuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnRIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlZml4KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9WaXN1YWxWb2ljZW1haWxTbXNGaWx0ZXJTZXR0aW5ncyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3RlbGVwaG9ueS9WaXN1YWxWb2ljZW1haWxTbXNGaWx0ZXJTZXR0aW5ncyRCdWlsZGVyOylWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkRFU1RJTkFUSU9OX1BPUlRfQU5ZIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVNUSU5BVElPTl9QT1JUX0RBVEFfU01TIi8+Ci0JCTxmaWVsZCBuYW1lPSJjbGllbnRQcmVmaXgiLz4KLQkJPGZpZWxkIG5hbWU9ImRlc3RpbmF0aW9uUG9ydCIvPgotCQk8ZmllbGQgbmFtZT0ib3JpZ2luYXRpbmdOdW1iZXJzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvVmlzdWFsVm9pY2VtYWlsU21zRmlsdGVyU2V0dGluZ3MkQnVpbGRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC90ZWxlcGhvbnkvVmlzdWFsVm9pY2VtYWlsU21zRmlsdGVyU2V0dGluZ3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2xpZW50UHJlZml4KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZWxlcGhvbnkvVmlzdWFsVm9pY2VtYWlsU21zRmlsdGVyU2V0dGluZ3MkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZXN0aW5hdGlvblBvcnQoSSlMYW5kcm9pZC90ZWxlcGhvbnkvVmlzdWFsVm9pY2VtYWlsU21zRmlsdGVyU2V0dGluZ3MkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcmlnaW5hdGluZ051bWJlcnMoTGphdmEvdXRpbC9MaXN0OylMYW5kcm9pZC90ZWxlcGhvbnkvVmlzdWFsVm9pY2VtYWlsU21zRmlsdGVyU2V0dGluZ3MkQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9jZG1hL0NkbWFDZWxsTG9jYXRpb24iIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbExvY2F0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnZlcnRRdWFydFNlY1RvRGVjRGVncmVlcyhJKUQiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbGxJbk5vdGlmaWVyQnVuZGxlKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhc2VTdGF0aW9uSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYXNlU3RhdGlvbkxhdGl0dWRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFzZVN0YXRpb25Mb25naXR1ZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZXR3b3JrSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1JZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENlbGxMb2NhdGlvbkRhdGEoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDZWxsTG9jYXRpb25EYXRhKElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGF0ZUludmFsaWQoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9kYXRhL0FwblNldHRpbmciIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC90ZWxlcGhvbnkvZGF0YS9BcG5TZXR0aW5nJEJ1aWxkZXI7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFwbk5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFwblR5cGVCaXRtYXNrKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0aFR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbnRyeU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW1zUHJveHlBZGRyZXNzKClMamF2YS9uZXQvSW5ldEFkZHJlc3M7IiBkZXByZWNhdGVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1tc1Byb3h5QWRkcmVzc0FzU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1tc1Byb3h5UG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1tc2MoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TXZub1R5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZXR3b3JrVHlwZUJpdG1hc2soKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcGVyYXRvck51bWVyaWMoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhc3N3b3JkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm90b2NvbCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3h5QWRkcmVzcygpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIgZGVwcmVjYXRlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm94eUFkZHJlc3NBc1N0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm94eVBvcnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb2FtaW5nUHJvdG9jb2woKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VuYWJsZWQoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVEhfVFlQRV9DSEFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRIX1RZUEVfTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSF9UWVBFX1BBUCIvPgotCQk8ZmllbGQgbmFtZT0iQVVUSF9UWVBFX1BBUF9PUl9DSEFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJNVk5PX1RZUEVfR0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNVk5PX1RZUEVfSUNDSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1WTk9fVFlQRV9JTVNJIi8+Ci0JCTxmaWVsZCBuYW1lPSJNVk5PX1RZUEVfU1BOIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UT0NPTF9JUCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVE9DT0xfSVBWNFY2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UT0NPTF9JUFY2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9UT0NPTF9QUFAiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQ0JTIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0RFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRFVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0VNRVJHRU5DWSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9GT1RBIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0hJUFJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0lBIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0lNUyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9NTVMiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfU1VQTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L2RhdGEvQXBuU2V0dGluZyRCdWlsZGVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL3RlbGVwaG9ueS9kYXRhL0FwblNldHRpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXBuTmFtZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGVsZXBob255L2RhdGEvQXBuU2V0dGluZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFwblR5cGVCaXRtYXNrKEkpTGFuZHJvaWQvdGVsZXBob255L2RhdGEvQXBuU2V0dGluZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dGhUeXBlKEkpTGFuZHJvaWQvdGVsZXBob255L2RhdGEvQXBuU2V0dGluZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhcnJpZXJFbmFibGVkKFopTGFuZHJvaWQvdGVsZXBob255L2RhdGEvQXBuU2V0dGluZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVudHJ5TmFtZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGVsZXBob255L2RhdGEvQXBuU2V0dGluZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1tc1Byb3h5QWRkcmVzcyhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGVsZXBob255L2RhdGEvQXBuU2V0dGluZyRCdWlsZGVyOyIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TW1zUHJveHlBZGRyZXNzKExqYXZhL25ldC9JbmV0QWRkcmVzczspTGFuZHJvaWQvdGVsZXBob255L2RhdGEvQXBuU2V0dGluZyRCdWlsZGVyOyIgZGVwcmVjYXRlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNbXNQcm94eVBvcnQoSSlMYW5kcm9pZC90ZWxlcGhvbnkvZGF0YS9BcG5TZXR0aW5nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TW1zYyhMYW5kcm9pZC9uZXQvVXJpOylMYW5kcm9pZC90ZWxlcGhvbnkvZGF0YS9BcG5TZXR0aW5nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TXZub1R5cGUoSSlMYW5kcm9pZC90ZWxlcGhvbnkvZGF0YS9BcG5TZXR0aW5nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmV0d29ya1R5cGVCaXRtYXNrKEkpTGFuZHJvaWQvdGVsZXBob255L2RhdGEvQXBuU2V0dGluZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9wZXJhdG9yTnVtZXJpYyhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGVsZXBob255L2RhdGEvQXBuU2V0dGluZyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhc3N3b3JkKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZWxlcGhvbnkvZGF0YS9BcG5TZXR0aW5nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvdG9jb2woSSlMYW5kcm9pZC90ZWxlcGhvbnkvZGF0YS9BcG5TZXR0aW5nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJveHlBZGRyZXNzKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZWxlcGhvbnkvZGF0YS9BcG5TZXR0aW5nJEJ1aWxkZXI7IiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm94eUFkZHJlc3MoTGphdmEvbmV0L0luZXRBZGRyZXNzOylMYW5kcm9pZC90ZWxlcGhvbnkvZGF0YS9BcG5TZXR0aW5nJEJ1aWxkZXI7IiBkZXByZWNhdGVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3h5UG9ydChJKUxhbmRyb2lkL3RlbGVwaG9ueS9kYXRhL0FwblNldHRpbmckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSb2FtaW5nUHJvdG9jb2woSSlMYW5kcm9pZC90ZWxlcGhvbnkvZGF0YS9BcG5TZXR0aW5nJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXNlcihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGVsZXBob255L2RhdGEvQXBuU2V0dGluZyRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L2V1aWNjL0Rvd25sb2FkYWJsZVN1YnNjcmlwdGlvbiIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JBY3RpdmF0aW9uQ29kZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGVsZXBob255L2V1aWNjL0Rvd25sb2FkYWJsZVN1YnNjcmlwdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25maXJtYXRpb25Db2RlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGVkQWN0aXZhdGlvbkNvZGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L2V1aWNjL0V1aWNjSW5mbyIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPc1ZlcnNpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L2V1aWNjL0V1aWNjTWFuYWdlciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVTdWJzY3JpcHRpb24oSUxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG93bmxvYWRTdWJzY3JpcHRpb24oTGFuZHJvaWQvdGVsZXBob255L2V1aWNjL0Rvd25sb2FkYWJsZVN1YnNjcmlwdGlvbjtaTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFaWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV1aWNjSW5mbygpTGFuZHJvaWQvdGVsZXBob255L2V1aWNjL0V1aWNjSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFJlc29sdXRpb25BY3Rpdml0eShMYW5kcm9pZC9hcHAvQWN0aXZpdHk7SUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3dpdGNoVG9TdWJzY3JpcHRpb24oSUxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTUFOQUdFX0VNQkVEREVEX1NVQlNDUklQVElPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9OT1RJRllfQ0FSUklFUl9TRVRVUF9JTkNPTVBMRVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTUJFRERFRF9TVUJTQ1JJUFRJT05fUkVTVUxUX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTUJFRERFRF9TVUJTQ1JJUFRJT05fUkVTVUxUX09LIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTUJFRERFRF9TVUJTQ1JJUFRJT05fUkVTVUxUX1JFU09MVkFCTEVfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0VNQkVEREVEX1NVQlNDUklQVElPTl9ERVRBSUxFRF9DT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRSQV9FTUJFRERFRF9TVUJTQ1JJUFRJT05fRE9XTkxPQURBQkxFX1NVQlNDUklQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9EQVRBX0NBUlJJRVJfSUNPTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L2dzbS9Hc21DZWxsTG9jYXRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbExvY2F0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbGxJbk5vdGlmaWVyQnVuZGxlKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENpZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhYygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBzYygpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYWNBbmRDaWQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXRlSW52YWxpZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L2dzbS9TbXNNYW5hZ2VyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIGRlcHJlY2F0ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGl2aWRlTWVzc2FnZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9BcnJheUxpc3Q7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHQoKUxhbmRyb2lkL3RlbGVwaG9ueS9nc20vU21zTWFuYWdlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZERhdGFNZXNzYWdlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1NbQkxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50O0xhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRNdWx0aXBhcnRUZXh0TWVzc2FnZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0FycmF5TGlzdDtMamF2YS91dGlsL0FycmF5TGlzdDtMamF2YS91dGlsL0FycmF5TGlzdDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kVGV4dE1lc3NhZ2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7TGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfRVJST1JfR0VORVJJQ19GQUlMVVJFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVUxUX0VSUk9SX05PX1NFUlZJQ0UiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfRVJST1JfTlVMTF9QRFUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfRVJST1JfUkFESU9fT0ZGIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX09OX1NJTV9GUkVFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX09OX1NJTV9SRUFEIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX09OX1NJTV9TRU5UIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX09OX1NJTV9VTlJFQUQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfT05fU0lNX1VOU0VOVCIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9nc20vU21zTWVzc2FnZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbGN1bGF0ZUxlbmd0aChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtaKVtJIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxjdWxhdGVMZW5ndGgoTGphdmEvbGFuZy9TdHJpbmc7WilbSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcm9tUGR1KFtCKUxhbmRyb2lkL3RlbGVwaG9ueS9nc20vU21zTWVzc2FnZTsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU1lc3NhZ2VCb2R5KClMamF2YS9sYW5nL1N0cmluZzsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU9yaWdpbmF0aW5nQWRkcmVzcygpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVtYWlsQm9keSgpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVtYWlsRnJvbSgpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZGV4T25TaW0oKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVzc2FnZUJvZHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXNzYWdlQ2xhc3MoKUxhbmRyb2lkL3RlbGVwaG9ueS9nc20vU21zTWVzc2FnZSRNZXNzYWdlQ2xhc3M7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yaWdpbmF0aW5nQWRkcmVzcygpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBkdSgpW0IiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdG9jb2xJZGVudGlmaWVyKClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBzZXVkb1N1YmplY3QoKUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlQ2VudGVyQWRkcmVzcygpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXR1cygpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0dXNPblNpbSgpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJtaXRQZHUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7WilMYW5kcm9pZC90ZWxlcGhvbnkvZ3NtL1Ntc01lc3NhZ2UkU3VibWl0UGR1OyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJtaXRQZHUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7U1tCWilMYW5kcm9pZC90ZWxlcGhvbnkvZ3NtL1Ntc01lc3NhZ2UkU3VibWl0UGR1OyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUUExheWVyTGVuZ3RoRm9yUERVKExqYXZhL2xhbmcvU3RyaW5nOylJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVzdGFtcE1pbGxpcygpSiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyRGF0YSgpW0IiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDcGhzTXdpTWVzc2FnZSgpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VtYWlsKClaIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTVdJQ2xlYXJNZXNzYWdlKClaIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTVdJU2V0TWVzc2FnZSgpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc013aURvbnRTdG9yZSgpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlcGxhY2UoKVoiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZXBseVBhdGhQcmVzZW50KClaIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3RhdHVzUmVwb3J0TWVzc2FnZSgpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ09ESU5HXzE2QklUIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iRU5DT0RJTkdfN0JJVCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ09ESU5HXzhCSVQiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkNPRElOR19VTktOT1dOIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1VTRVJfREFUQV9CWVRFUyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9VU0VSX0RBVEFfU0VQVEVUUyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9VU0VSX0RBVEFfU0VQVEVUU19XSVRIX0hFQURFUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9nc20vU21zTWVzc2FnZSRNZXNzYWdlQ2xhc3MiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZWxlcGhvbnkvZ3NtL1Ntc01lc3NhZ2UkTWVzc2FnZUNsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL3RlbGVwaG9ueS9nc20vU21zTWVzc2FnZSRNZXNzYWdlQ2xhc3M7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDTEFTU18wIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTEFTU18xIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTEFTU18yIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTEFTU18zIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvZ3NtL1Ntc01lc3NhZ2UkU3VibWl0UGR1IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJlbmNvZGVkTWVzc2FnZSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9ImVuY29kZWRTY0FkZHJlc3MiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9Eb3dubG9hZFByb2dyZXNzTGlzdGVuZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByb2dyZXNzVXBkYXRlZChMYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9Eb3dubG9hZFJlcXVlc3Q7TGFuZHJvaWQvdGVsZXBob255L21ibXMvRmlsZUluZm87SUlJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9Eb3dubG9hZFJlcXVlc3QiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlc3RpbmF0aW9uVXJpKClMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGVTZXJ2aWNlSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heEFwcEludGVudFNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhEZXN0aW5hdGlvblVyaVNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb3VyY2VVcmkoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3Vic2NyaXB0aW9uSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0J5dGVBcnJheSgpW0IiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL0Rvd25sb2FkUmVxdWVzdCRCdWlsZGVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9Eb3dubG9hZFJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbURvd25sb2FkUmVxdWVzdChMYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9Eb3dubG9hZFJlcXVlc3Q7KUxhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL0Rvd25sb2FkUmVxdWVzdCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb21TZXJpYWxpemVkUmVxdWVzdChbQilMYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9Eb3dubG9hZFJlcXVlc3QkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBcHBJbnRlbnQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KUxhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL0Rvd25sb2FkUmVxdWVzdCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlcnZpY2VJbmZvKExhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL0ZpbGVTZXJ2aWNlSW5mbzspTGFuZHJvaWQvdGVsZXBob255L21ibXMvRG93bmxvYWRSZXF1ZXN0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3Vic2NyaXB0aW9uSWQoSSlMYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9Eb3dubG9hZFJlcXVlc3QkQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL0Rvd25sb2FkU3RhdHVzTGlzdGVuZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXR1c1VwZGF0ZWQoTGFuZHJvaWQvdGVsZXBob255L21ibXMvRG93bmxvYWRSZXF1ZXN0O0xhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL0ZpbGVJbmZvO0kpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L21ibXMvRmlsZUluZm8iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbWVUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmkoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9GaWxlU2VydmljZUluZm8iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L21ibXMvU2VydmljZUluZm8iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGVzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9NYm1zRG93bmxvYWRSZWNlaXZlciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0Jyb2FkY2FzdFJlY2VpdmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9NYm1zRG93bmxvYWRTZXNzaW9uQ2FsbGJhY2siIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkVycm9yKElMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRmlsZVNlcnZpY2VzVXBkYXRlZChMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1pZGRsZXdhcmVSZWFkeSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L21ibXMvTWJtc0Vycm9ycyIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTUlERExFV0FSRV9MT1NUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9NSURETEVXQVJFX05PVF9CT1VORCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTk9fVU5JUVVFX01JRERMRVdBUkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNVQ0NFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IlVOS05PV04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL01ibXNFcnJvcnMkRG93bmxvYWRFcnJvcnMiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0NBTk5PVF9DSEFOR0VfVEVNUF9GSUxFX1JPT1QiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1VOS05PV05fRE9XTkxPQURfUkVRVUVTVCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfVU5LTk9XTl9GSUxFX0lORk8iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL01ibXNFcnJvcnMkR2VuZXJhbEVycm9ycyIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfQ0FSUklFUl9DSEFOR0VfTk9UX0FMTE9XRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0lOX0U5MTEiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX01JRERMRVdBUkVfTk9UX1lFVF9SRUFEWSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTUlERExFV0FSRV9URU1QT1JBUklMWV9VTkFWQUlMQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfTk9UX0NPTk5FQ1RFRF9UT19IT01FX0NBUlJJRVJfTFRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9PVVRfT0ZfTUVNT1JZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9VTkFCTEVfVE9fUkVBRF9TSU0iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RlbGVwaG9ueS9tYm1zL01ibXNFcnJvcnMkSW5pdGlhbGl6YXRpb25FcnJvcnMiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0FQUF9QRVJNSVNTSU9OU19OT1RfR1JBTlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfRFVQTElDQVRFX0lOSVRJQUxJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1VOQUJMRV9UT19JTklUSUFMSVpFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9NYm1zRXJyb3JzJFN0cmVhbWluZ0Vycm9ycyIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfQ09OQ1VSUkVOVF9TRVJWSUNFX0xJTUlUX1JFQUNIRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0RVUExJQ0FURV9TVEFSVF9TVFJFQU0iLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1VOQUJMRV9UT19TVEFSVF9TRVJWSUNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9NYm1zU3RyZWFtaW5nU2Vzc2lvbkNhbGxiYWNrIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25FcnJvcihJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1pZGRsZXdhcmVSZWFkeSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RyZWFtaW5nU2VydmljZXNVcGRhdGVkKExqYXZhL3V0aWwvTGlzdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L21ibXMvU2VydmljZUluZm8iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxlcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWVGb3JMb2NhbGUoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWVkQ29udGVudExvY2FsZXMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZpY2VDbGFzc05hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZpY2VJZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vzc2lvbkVuZFRpbWUoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXNzaW9uU3RhcnRUaW1lKClMamF2YS91dGlsL0RhdGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZWxlcGhvbnkvbWJtcy9TdHJlYW1pbmdTZXJ2aWNlIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BdXRvQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5mbygpTGFuZHJvaWQvdGVsZXBob255L21ibXMvU3RyZWFtaW5nU2VydmljZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGxheWJhY2tVcmkoKUxhbmRyb2lkL25ldC9Vcmk7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCUk9BRENBU1RfTUVUSE9EIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFTT05fQllfVVNFUl9SRVFVRVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFTT05fRU5EX09GX1NFU1NJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9GUkVRVUVOQ1lfQ09ORkxJQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9MRUZUX01CTVNfQlJPQURDQVNUX0FSRUEiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9OT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFTT05fTk9UX0NPTk5FQ1RFRF9UT19IT01FQ0FSUklFUl9MVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9PVVRfT0ZfTUVNT1JZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9TVEFMTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9TVEFSVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9TVE9QUEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklDQVNUX01FVEhPRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L21ibXMvU3RyZWFtaW5nU2VydmljZUNhbGxiYWNrIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Ccm9hZGNhc3RTaWduYWxTdHJlbmd0aFVwZGF0ZWQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25FcnJvcihJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1lZGlhRGVzY3JpcHRpb25VcGRhdGVkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdHJlYW1NZXRob2RVcGRhdGVkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RyZWFtU3RhdGVVcGRhdGVkKElJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR05BTF9TVFJFTkdUSF9VTkFWQUlMQUJMRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L21ibXMvU3RyZWFtaW5nU2VydmljZUluZm8iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGVsZXBob255L21ibXMvU2VydmljZUluZm8iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9BY3Rpdml0eUluc3RydW1lbnRhdGlvblRlc3RDYXNlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMyIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3Rlc3QvQWN0aXZpdHlUZXN0Q2FzZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3M7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idGVzdEFjdGl2aXR5VGVzdENhc2VTZXRVcFByb3Blcmx5KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXN0L0FjdGl2aXR5SW5zdHJ1bWVudGF0aW9uVGVzdENhc2UyIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXN0L0FjdGl2aXR5VGVzdENhc2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DbGFzczspViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DbGFzczspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBY3Rpdml0eUluaXRpYWxUb3VjaE1vZGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWN0aXZpdHlJbnRlbnQoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Rlc3QvQWN0aXZpdHlUZXN0Q2FzZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjI0IiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGVzdC9JbnN0cnVtZW50YXRpb25UZXN0Q2FzZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGl2aXR5KClMYW5kcm9pZC9hcHAvQWN0aXZpdHk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2NydWJDbGFzcyhMamF2YS9sYW5nL0NsYXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWN0aXZpdHkoTGFuZHJvaWQvYXBwL0FjdGl2aXR5OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXN0L0FjdGl2aXR5VW5pdFRlc3RDYXNlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXN0L0FjdGl2aXR5VGVzdENhc2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DbGFzczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbmlzaGVkQWN0aXZpdHlSZXF1ZXN0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVxdWVzdGVkT3JpZW50YXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydGVkQWN0aXZpdHlJbnRlbnQoKUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXJ0ZWRBY3Rpdml0eVJlcXVlc3QoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZpbmlzaENhbGxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjdGl2aXR5Q29udGV4dChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBcHBsaWNhdGlvbihMYW5kcm9pZC9hcHAvQXBwbGljYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEFjdGl2aXR5KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50O0xhbmRyb2lkL29zL0J1bmRsZTtMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvYXBwL0FjdGl2aXR5OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9BbmRyb2lkVGVzdENhc2UiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyNCIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqdW5pdC9mcmFtZXdvcmsvVGVzdENhc2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRBY3Rpdml0eVJlcXVpcmVzUGVybWlzc2lvbihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRSZWFkaW5nQ29udGVudFVyaVJlcXVpcmVzUGVybWlzc2lvbihMYW5kcm9pZC9uZXQvVXJpO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydFdyaXRpbmdDb250ZW50VXJpUmVxdWlyZXNQZXJtaXNzaW9uKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGV4dCgpTGFuZHJvaWQvY29udGVudC9Db250ZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNjcnViQ2xhc3MoTGphdmEvbGFuZy9DbGFzczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRleHQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idGVzdEFuZHJvaWRUZXN0Q2FzZVNldHVwUHJvcGVybHkoKVYiLz4KLQkJPGZpZWxkIG5hbWU9Im1Db250ZXh0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXN0L0FuZHJvaWRUZXN0UnVubmVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0ianVuaXQvcnVubmVyL0Jhc2VUZXN0UnVubmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGVzdExpc3RlbmVyKExqdW5pdC9mcmFtZXdvcmsvVGVzdExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJUZXN0TGlzdGVuZXJzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVGVzdFJlc3VsdCgpTGp1bml0L2ZyYW1ld29yay9UZXN0UmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRlc3RDYXNlcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRlc3RDbGFzc05hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRlc3RSZXN1bHQoKUxqdW5pdC9mcmFtZXdvcmsvVGVzdFJlc3VsdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5UZXN0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icnVuVGVzdChManVuaXQvZnJhbWV3b3JrL1Rlc3RSZXN1bHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZXh0KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluc3RydW1lbnRhaXRvbihMYW5kcm9pZC9hcHAvSW5zdHJ1bWVudGF0aW9uOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluc3RydW1lbnRhdGlvbihMYW5kcm9pZC9hcHAvSW5zdHJ1bWVudGF0aW9uOylWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRlc3QoTGp1bml0L2ZyYW1ld29yay9UZXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGVzdENsYXNzTmFtZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9BcHBsaWNhdGlvblRlc3RDYXNlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXN0L0FuZHJvaWRUZXN0Q2FzZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NsYXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQXBwbGljYXRpb24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvbigpTGFuZHJvaWQvYXBwL0FwcGxpY2F0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5c3RlbUNvbnRleHQoKUxhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXJtaW5hdGVBcHBsaWNhdGlvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9InRlc3RBcHBsaWNhdGlvblRlc3RDYXNlU2V0VXBQcm9wZXJseSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9Bc3NlcnRpb25GYWlsZWRFcnJvciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FcnJvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9Db21wYXJpc29uRmFpbHVyZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGVzdC9Bc3NlcnRpb25GYWlsZWRFcnJvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9GbGFreVRlc3QiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyNCIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b2xlcmFuY2UoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Rlc3QvSW5zdHJ1bWVudGF0aW9uVGVzdENhc2UiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyNCIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqdW5pdC9mcmFtZXdvcmsvVGVzdENhc2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0cnVtZW50YXRpb24oKUxhbmRyb2lkL2FwcC9JbnN0cnVtZW50YXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5qZWN0SW5zcnVtZW50YXRpb24oTGFuZHJvaWQvYXBwL0luc3RydW1lbnRhdGlvbjspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmplY3RJbnN0cnVtZW50YXRpb24oTGFuZHJvaWQvYXBwL0luc3RydW1lbnRhdGlvbjspViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXVuY2hBY3Rpdml0eShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzO0xhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvYXBwL0FjdGl2aXR5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImxhdW5jaEFjdGl2aXR5V2l0aEludGVudChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzO0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMYW5kcm9pZC9hcHAvQWN0aXZpdHk7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InJ1blRlc3RPblVpVGhyZWFkKExqYXZhL2xhbmcvUnVubmFibGU7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZEtleXMoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kS2V5cyhbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZFJlcGVhdGVkS2V5cyhbSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXN0L0luc3RydW1lbnRhdGlvblRlc3RSdW5uZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyNCIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9JbnN0cnVtZW50YXRpb24iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXN0L1Rlc3RTdWl0ZVByb3ZpZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxsVGVzdHMoKUxqdW5pdC9mcmFtZXdvcmsvVGVzdFN1aXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZHJvaWRUZXN0UnVubmVyKClMYW5kcm9pZC90ZXN0L0FuZHJvaWRUZXN0UnVubmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFyZ3VtZW50cygpTGFuZHJvaWQvb3MvQnVuZGxlOyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9hZGVyKClMamF2YS9sYW5nL0NsYXNzTG9hZGVyOyIvPgotCQk8ZmllbGQgbmFtZT0iUkVQT1JUX0tFWV9OQU1FX0NMQVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVBPUlRfS0VZX05BTUVfVEVTVCIvPgotCQk8ZmllbGQgbmFtZT0iUkVQT1JUX0tFWV9OVU1fQ1VSUkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iUkVQT1JUX0tFWV9OVU1fVE9UQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUE9SVF9LRVlfU1RBQ0siLz4KLQkJPGZpZWxkIG5hbWU9IlJFUE9SVF9WQUxVRV9JRCIvPgotCQk8ZmllbGQgbmFtZT0iUkVQT1JUX1ZBTFVFX1JFU1VMVF9FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iUkVQT1JUX1ZBTFVFX1JFU1VMVF9GQUlMVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVBPUlRfVkFMVUVfUkVTVUxUX09LIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVBPUlRfVkFMVUVfUkVTVUxUX1NUQVJUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXN0L0luc3RydW1lbnRhdGlvblRlc3RTdWl0ZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjI0IiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9Imp1bml0L2ZyYW1ld29yay9UZXN0U3VpdGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYXBwL0luc3RydW1lbnRhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NsYXNzO0xhbmRyb2lkL2FwcC9JbnN0cnVtZW50YXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvYXBwL0luc3RydW1lbnRhdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9Jc29sYXRlZENvbnRleHQiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyNCIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29udGV4dFdyYXBwZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXI7TGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kQ2xlYXJCcm9hZGNhc3RJbnRlbnRzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXN0L0xvYWRlclRlc3RDYXNlIiBzaW5jZT0iMTEiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXN0L0FuZHJvaWRUZXN0Q2FzZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvYWRlclJlc3VsdFN5bmNocm9ub3VzbHkoTGFuZHJvaWQvY29udGVudC9Mb2FkZXI7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9Nb3JlQXNzZXJ0cyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjI0IiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRBc3NpZ25hYmxlRnJvbShMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvQ2xhc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRBc3NpZ25hYmxlRnJvbShMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0Q29udGFpbnNSZWdleChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9yZWdleC9NYXRjaFJlc3VsdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRDb250YWluc1JlZ2V4KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL3JlZ2V4L01hdGNoUmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydENvbnRlbnRzSW5BbnlPcmRlcihMamF2YS9sYW5nL0l0ZXJhYmxlO1tMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydENvbnRlbnRzSW5BbnlPcmRlcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0l0ZXJhYmxlO1tMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydENvbnRlbnRzSW5PcmRlcihMamF2YS9sYW5nL0l0ZXJhYmxlO1tMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydENvbnRlbnRzSW5PcmRlcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0l0ZXJhYmxlO1tMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVtcHR5KExqYXZhL2xhbmcvSXRlcmFibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRFbXB0eShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0l0ZXJhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0RW1wdHkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9NYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRFbXB0eShMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVxdWFscyhMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL1NldDtMamF2YS91dGlsL1NldDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVxdWFscyhMamF2YS9sYW5nL1N0cmluZztbQltCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRFcXVhbHMoTGphdmEvbGFuZy9TdHJpbmc7W0RbRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0RXF1YWxzKExqYXZhL2xhbmcvU3RyaW5nO1tJW0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVxdWFscyhMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9PYmplY3Q7W0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0RXF1YWxzKExqYXZhL3V0aWwvU2V0O0xqYXZhL3V0aWwvU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0RXF1YWxzKFtCW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVxdWFscyhbRFtEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRFcXVhbHMoW0lbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0RXF1YWxzKFtMamF2YS9sYW5nL09iamVjdDtbTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRNYXRjaGVzUmVnZXgoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvcmVnZXgvTWF0Y2hSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0TWF0Y2hlc1JlZ2V4KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL3JlZ2V4L01hdGNoUmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydE5vdENvbnRhaW5zUmVnZXgoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnROb3RDb250YWluc1JlZ2V4KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0Tm90RW1wdHkoTGphdmEvbGFuZy9JdGVyYWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydE5vdEVtcHR5KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvSXRlcmFibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnROb3RFbXB0eShMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydE5vdEVtcHR5KExqYXZhL3V0aWwvTWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0Tm90RXF1YWwoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnROb3RFcXVhbChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydE5vdE1hdGNoZXNSZWdleChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydE5vdE1hdGNoZXNSZWdleChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrRXF1YWxzQW5kSGFzaENvZGVNZXRob2RzKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0O1opViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrRXF1YWxzQW5kSGFzaENvZGVNZXRob2RzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0O1opViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9QZXJmb3JtYW5jZVRlc3RDYXNlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGVyZm9ybWFuY2VPbmx5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRQZXJmb3JtYW5jZShMYW5kcm9pZC90ZXN0L1BlcmZvcm1hbmNlVGVzdENhc2UkSW50ZXJtZWRpYXRlczspSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9QZXJmb3JtYW5jZVRlc3RDYXNlJEludGVybWVkaWF0ZXMiIHNpbmNlPSIxIiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJbnRlcm1lZGlhdGUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJbnRlcm1lZGlhdGUoTGphdmEvbGFuZy9TdHJpbmc7SilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluaXNoVGltaW5nKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludGVybmFsSXRlcmF0aW9ucyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFRpbWluZyhaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Rlc3QvUHJvdmlkZXJUZXN0Q2FzZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjUiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXN0L0luc3RydW1lbnRhdGlvblRlc3RDYXNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2NrQ29udGVudFJlc29sdmVyKClMYW5kcm9pZC90ZXN0L21vY2svTW9ja0NvbnRlbnRSZXNvbHZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2NrQ29udGV4dCgpTGFuZHJvaWQvdGVzdC9Jc29sYXRlZENvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdmlkZXIoKUxhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1Jlc29sdmVyV2l0aENvbnRlbnRQcm92aWRlckZyb21TcWwoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Rlc3QvUHJvdmlkZXJUZXN0Q2FzZTIiIHNpbmNlPSIzIiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGVzdC9BbmRyb2lkVGVzdENhc2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vY2tDb250ZW50UmVzb2x2ZXIoKUxhbmRyb2lkL3Rlc3QvbW9jay9Nb2NrQ29udGVudFJlc29sdmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vY2tDb250ZXh0KClMYW5kcm9pZC90ZXN0L0lzb2xhdGVkQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm92aWRlcigpTGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3UmVzb2x2ZXJXaXRoQ29udGVudFByb3ZpZGVyRnJvbVNxbChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9SZW5hbWluZ0RlbGVnYXRpbmdDb250ZXh0IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NvbnRleHRXcmFwcGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YWJhc2VQcmVmaXgoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1ha2VFeGlzdGluZ0ZpbGVzQW5kRGJzQWNjZXNzaWJsZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InByb3ZpZGVyV2l0aFJlbmFtZWRDb250ZXh0KExqYXZhL2xhbmcvQ2xhc3M7TGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm92aWRlcldpdGhSZW5hbWVkQ29udGV4dChMamF2YS9sYW5nL0NsYXNzO0xhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZztaKUxhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9TZXJ2aWNlVGVzdENhc2UiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyNCIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3Rlc3QvQW5kcm9pZFRlc3RDYXNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2xhc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kU2VydmljZShMYW5kcm9pZC9jb250ZW50L0ludGVudDspTGFuZHJvaWQvb3MvSUJpbmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvbigpTGFuZHJvaWQvYXBwL0FwcGxpY2F0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZpY2UoKUxhbmRyb2lkL2FwcC9TZXJ2aWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5c3RlbUNvbnRleHQoKUxhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBcHBsaWNhdGlvbihMYW5kcm9pZC9hcHAvQXBwbGljYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXR1cFNlcnZpY2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaHV0ZG93blNlcnZpY2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFNlcnZpY2UoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0U2VydmljZVRlc3RDYXNlU2V0VXBQcm9wZXJseSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9TaW5nbGVMYXVuY2hBY3Rpdml0eVRlc3RDYXNlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXN0L0luc3RydW1lbnRhdGlvblRlc3RDYXNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3Rpdml0eSgpTGFuZHJvaWQvYXBwL0FjdGl2aXR5OyIvPgotCQk8bWV0aG9kIG5hbWU9InRlc3RBY3Rpdml0eVRlc3RDYXNlU2V0VXBQcm9wZXJseSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9TeW5jQmFzZUluc3RydW1lbnRhdGlvbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjI0IiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGVzdC9JbnN0cnVtZW50YXRpb25UZXN0Q2FzZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbFN5bmNzYW5kRGlzYWJsZUF1dG9TeW5jKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3luY1Byb3ZpZGVyKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Rlc3QvVGVzdFN1aXRlUHJvdmlkZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyNCIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGVzdFN1aXRlKClManVuaXQvZnJhbWV3b3JrL1Rlc3RTdWl0ZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Rlc3QvVG91Y2hVdGlscyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjI0IiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGlja1ZpZXcoTGFuZHJvaWQvdGVzdC9JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmFnKExhbmRyb2lkL3Rlc3QvQWN0aXZpdHlJbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtGRkZGSSlWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWcoTGFuZHJvaWQvdGVzdC9JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtGRkZGSSlWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWdRdWFydGVyU2NyZWVuRG93bihMYW5kcm9pZC90ZXN0L0FjdGl2aXR5SW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhZ1F1YXJ0ZXJTY3JlZW5Eb3duKExhbmRyb2lkL3Rlc3QvSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7TGFuZHJvaWQvYXBwL0FjdGl2aXR5OylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWdRdWFydGVyU2NyZWVuVXAoTGFuZHJvaWQvdGVzdC9BY3Rpdml0eUluc3RydW1lbnRhdGlvblRlc3RDYXNlOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWdRdWFydGVyU2NyZWVuVXAoTGFuZHJvaWQvdGVzdC9JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtMYW5kcm9pZC9hcHAvQWN0aXZpdHk7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhZ1ZpZXdCeShMYW5kcm9pZC90ZXN0L0FjdGl2aXR5SW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7TGFuZHJvaWQvdmlldy9WaWV3O0lJSSlJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWdWaWV3QnkoTGFuZHJvaWQvdGVzdC9JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtMYW5kcm9pZC92aWV3L1ZpZXc7SUlJKUkiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWdWaWV3VG8oTGFuZHJvaWQvdGVzdC9BY3Rpdml0eUluc3RydW1lbnRhdGlvblRlc3RDYXNlO0xhbmRyb2lkL3ZpZXcvVmlldztJSUkpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmFnVmlld1RvKExhbmRyb2lkL3Rlc3QvSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7TGFuZHJvaWQvdmlldy9WaWV3O0lJSSlJIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWdWaWV3VG9Cb3R0b20oTGFuZHJvaWQvdGVzdC9BY3Rpdml0eUluc3RydW1lbnRhdGlvblRlc3RDYXNlO0xhbmRyb2lkL3ZpZXcvVmlldzspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmFnVmlld1RvQm90dG9tKExhbmRyb2lkL3Rlc3QvQWN0aXZpdHlJbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtMYW5kcm9pZC92aWV3L1ZpZXc7SSlWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWdWaWV3VG9Cb3R0b20oTGFuZHJvaWQvdGVzdC9JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvdmlldy9WaWV3OylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWdWaWV3VG9Cb3R0b20oTGFuZHJvaWQvdGVzdC9JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvdmlldy9WaWV3O0kpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmFnVmlld1RvVG9wKExhbmRyb2lkL3Rlc3QvQWN0aXZpdHlJbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtMYW5kcm9pZC92aWV3L1ZpZXc7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhZ1ZpZXdUb1RvcChMYW5kcm9pZC90ZXN0L0FjdGl2aXR5SW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7TGFuZHJvaWQvdmlldy9WaWV3O0kpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmFnVmlld1RvVG9wKExhbmRyb2lkL3Rlc3QvSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7TGFuZHJvaWQvdmlldy9WaWV3OylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWdWaWV3VG9Ub3AoTGFuZHJvaWQvdGVzdC9JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtMYW5kcm9pZC92aWV3L1ZpZXc7SSlWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWdWaWV3VG9YKExhbmRyb2lkL3Rlc3QvQWN0aXZpdHlJbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtMYW5kcm9pZC92aWV3L1ZpZXc7SUkpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmFnVmlld1RvWChMYW5kcm9pZC90ZXN0L0luc3RydW1lbnRhdGlvblRlc3RDYXNlO0xhbmRyb2lkL3ZpZXcvVmlldztJSSlJIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWdWaWV3VG9ZKExhbmRyb2lkL3Rlc3QvQWN0aXZpdHlJbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtMYW5kcm9pZC92aWV3L1ZpZXc7SUkpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmFnVmlld1RvWShMYW5kcm9pZC90ZXN0L0luc3RydW1lbnRhdGlvblRlc3RDYXNlO0xhbmRyb2lkL3ZpZXcvVmlldztJSSlJIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvbmdDbGlja1ZpZXcoTGFuZHJvaWQvdGVzdC9BY3Rpdml0eUluc3RydW1lbnRhdGlvblRlc3RDYXNlO0xhbmRyb2lkL3ZpZXcvVmlldzspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb25nQ2xpY2tWaWV3KExhbmRyb2lkL3Rlc3QvSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7TGFuZHJvaWQvdmlldy9WaWV3OylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNjcm9sbFRvQm90dG9tKExhbmRyb2lkL3Rlc3QvQWN0aXZpdHlJbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY3JvbGxUb0JvdHRvbShMYW5kcm9pZC90ZXN0L0luc3RydW1lbnRhdGlvblRlc3RDYXNlO0xhbmRyb2lkL2FwcC9BY3Rpdml0eTtMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY3JvbGxUb1RvcChMYW5kcm9pZC90ZXN0L0FjdGl2aXR5SW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7TGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2Nyb2xsVG9Ub3AoTGFuZHJvaWQvdGVzdC9JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTtMYW5kcm9pZC9hcHAvQWN0aXZpdHk7TGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0idGFwVmlldyhMYW5kcm9pZC90ZXN0L0luc3RydW1lbnRhdGlvblRlc3RDYXNlO0xhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InRvdWNoQW5kQ2FuY2VsVmlldyhMYW5kcm9pZC90ZXN0L0luc3RydW1lbnRhdGlvblRlc3RDYXNlO0xhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9VaVRocmVhZFRlc3QiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyNCIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Rlc3QvVmlld0Fzc2VydHMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyNCIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0QmFzZWxpbmVBbGlnbmVkKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRCb3R0b21BbGlnbmVkKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRCb3R0b21BbGlnbmVkKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0R3JvdXBDb250YWlucyhMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDtMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRHcm91cEludGVncml0eShMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEdyb3VwTm90Q29udGFpbnMoTGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7TGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0SGFzU2NyZWVuQ29vcmRpbmF0ZXMoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvVmlldztJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0SG9yaXpvbnRhbENlbnRlckFsaWduZWQoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydExlZnRBbGlnbmVkKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRMZWZ0QWxpZ25lZChMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydE9mZlNjcmVlbkFib3ZlKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRPZmZTY3JlZW5CZWxvdyhMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0T25TY3JlZW4oTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydFJpZ2h0QWxpZ25lZChMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0UmlnaHRBbGlnbmVkKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0VG9wQWxpZ25lZChMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0VG9wQWxpZ25lZChMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydFZlcnRpY2FsQ2VudGVyQWxpZ25lZChMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXN0L21vY2svTW9ja0FwcGxpY2F0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvQXBwbGljYXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Rlc3QvbW9jay9Nb2NrQ29udGVudFByb3ZpZGVyIiBzaW5jZT0iOCIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0xhbmRyb2lkL2NvbnRlbnQvcG0vUGF0aFBlcm1pc3Npb247KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Rlc3QvbW9jay9Nb2NrQ29udGVudFJlc29sdmVyIiBzaW5jZT0iMSIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUHJvdmlkZXIoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Rlc3QvbW9jay9Nb2NrQ29udGV4dCIgc2luY2U9IjEiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NvbnRleHQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlQ29kZVBhdGgoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VSZXNvdXJjZVBhdGgoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9tb2NrL01vY2tDdXJzb3IiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIyNCIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWJvcnRVcGRhdGVzKClWIiByZW1vdmVkPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbW1pdFVwZGF0ZXMoKVoiIHJlbW92ZWQ9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tbWl0VXBkYXRlcyhMamF2YS91dGlsL01hcDspWiIgcmVtb3ZlZD0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVSb3coKVoiIHJlbW92ZWQ9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzVXBkYXRlcygpWiIgcmVtb3ZlZD0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c1VwZGF0ZXMoKVoiIHJlbW92ZWQ9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQmxvYihJW0IpWiIgcmVtb3ZlZD0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVEb3VibGUoSUQpWiIgcmVtb3ZlZD0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVGbG9hdChJRilaIiByZW1vdmVkPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUludChJSSlaIiByZW1vdmVkPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUxvbmcoSUopWiIgcmVtb3ZlZD0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVTaG9ydChJUylaIiByZW1vdmVkPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZVN0cmluZyhJTGphdmEvbGFuZy9TdHJpbmc7KVoiIHJlbW92ZWQ9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlVG9OdWxsKEkpWiIgcmVtb3ZlZD0iMTEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Rlc3QvbW9jay9Nb2NrRGlhbG9nSW50ZXJmYWNlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXN0L21vY2svTW9ja1BhY2thZ2VNYW5hZ2VyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxsSW50ZW50RmlsdGVycyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIzIiByZW1vdmVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7SSlaIiBzaW5jZT0iMjMiIHJlbW92ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFja2FnZU9iYlBhdGgoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI5IiByZW1vdmVkPSIxMCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9tb2NrL01vY2tSZXNvdXJjZXMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyNCIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGVzdC9zdWl0ZWJ1aWxkZXIvVGVzdE1ldGhvZCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjI2IiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DbGFzczspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDtMamF2YS9sYW5nL0NsYXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqdW5pdC9mcmFtZXdvcmsvVGVzdENhc2U7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVGVzdCgpTGp1bml0L2ZyYW1ld29yay9UZXN0Q2FzZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbm5vdGF0aW9uKExqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY2xvc2luZ0NsYXNzKClMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY2xvc2luZ0NsYXNzbmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXN0L3N1aXRlYnVpbGRlci9UZXN0U3VpdGVCdWlsZGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjYiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NsYXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSZXF1aXJlbWVudHMoTGphdmEvdXRpbC9MaXN0OylMYW5kcm9pZC90ZXN0L3N1aXRlYnVpbGRlci9UZXN0U3VpdGVCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFJlcXVpcmVtZW50cyhbTGNvbS9hbmRyb2lkL2ludGVybmFsL3V0aWwvUHJlZGljYXRlOylMYW5kcm9pZC90ZXN0L3N1aXRlYnVpbGRlci9UZXN0U3VpdGVCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClManVuaXQvZnJhbWV3b3JrL1Rlc3RTdWl0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGNsdWRlUGFja2FnZXMoW0xqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXN0L3N1aXRlYnVpbGRlci9UZXN0U3VpdGVCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1aXRlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5jbHVkZUFsbFBhY2thZ2VzVW5kZXJIZXJlKClMYW5kcm9pZC90ZXN0L3N1aXRlYnVpbGRlci9UZXN0U3VpdGVCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImluY2x1ZGVQYWNrYWdlcyhbTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3Rlc3Qvc3VpdGVidWlsZGVyL1Rlc3RTdWl0ZUJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmFtZWQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3Rlc3Qvc3VpdGVidWlsZGVyL1Rlc3RTdWl0ZUJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXN0L3N1aXRlYnVpbGRlci9UZXN0U3VpdGVCdWlsZGVyJEZhaWxlZFRvQ3JlYXRlVGVzdHMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyNiIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqdW5pdC9mcmFtZXdvcmsvVGVzdENhc2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9FeGNlcHRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0U3VpdGVDb25zdHJ1Y3Rpb25GYWlsZWQoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Rlc3Qvc3VpdGVidWlsZGVyL2Fubm90YXRpb24vTGFyZ2VUZXN0IiBzaW5jZT0iMiIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXN0L3N1aXRlYnVpbGRlci9hbm5vdGF0aW9uL01lZGl1bVRlc3QiIHNpbmNlPSIyIiBkZXByZWNhdGVkPSIyNCIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3Rlc3Qvc3VpdGVidWlsZGVyL2Fubm90YXRpb24vU21hbGxUZXN0IiBzaW5jZT0iMiIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXN0L3N1aXRlYnVpbGRlci9hbm5vdGF0aW9uL1Ntb2tlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXN0L3N1aXRlYnVpbGRlci9hbm5vdGF0aW9uL1N1cHByZXNzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjQiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L0FsdGVyZWRDaGFyU2VxdWVuY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvR2V0Q2hhcnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NoYXJTZXF1ZW5jZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7W0NJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYWtlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO1tDSUkpTGFuZHJvaWQvdGV4dC9BbHRlcmVkQ2hhclNlcXVlbmNlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9BbmRyb2lkQ2hhcmFjdGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlyZWN0aW9uYWxpdGllcyhbQ1tCSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RWFzdEFzaWFuV2lkdGgoQylJIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVhc3RBc2lhbldpZHRocyhbQ0lJW0IpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaXJyb3IoQylDIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWlycm9yKFtDSUkpWiIvPgotCQk8ZmllbGQgbmFtZT0iRUFTVF9BU0lBTl9XSURUSF9BTUJJR1VPVVMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFQVNUX0FTSUFOX1dJRFRIX0ZVTExfV0lEVEgiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFQVNUX0FTSUFOX1dJRFRIX0hBTEZfV0lEVEgiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFQVNUX0FTSUFOX1dJRFRIX05BUlJPVyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVBU1RfQVNJQU5fV0lEVEhfTkVVVFJBTCIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkVBU1RfQVNJQU5fV0lEVEhfV0lERSIgc2luY2U9IjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvQW5ub3RhdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9QYXJjZWxhYmxlU3BhbiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9BdXRvVGV4dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSUxhbmRyb2lkL3ZpZXcvVmlldzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2l6ZShMYW5kcm9pZC92aWV3L1ZpZXc7KUkiIHNpbmNlPSIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L0JpZGlGb3JtYXR0ZXIiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFpJTGFuZHJvaWQvdGV4dC9UZXh0RGlyZWN0aW9uSGV1cmlzdGljOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGFuZHJvaWQvdGV4dC9CaWRpRm9ybWF0dGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC90ZXh0L0JpZGlGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoWilMYW5kcm9pZC90ZXh0L0JpZGlGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RlcmVvUmVzZXQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1J0bChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSdGwoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1J0bENvbnRleHQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmljb2RlV3JhcChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmljb2RlV3JhcChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC90ZXh0L1RleHREaXJlY3Rpb25IZXVyaXN0aWM7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5pY29kZVdyYXAoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvdGV4dC9UZXh0RGlyZWN0aW9uSGV1cmlzdGljO1opTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmljb2RlV3JhcChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtaKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5pY29kZVdyYXAoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InVuaWNvZGVXcmFwKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL3RleHQvVGV4dERpcmVjdGlvbkhldXJpc3RpYzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5pY29kZVdyYXAoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvdGV4dC9UZXh0RGlyZWN0aW9uSGV1cmlzdGljO1opTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5pY29kZVdyYXAoTGphdmEvbGFuZy9TdHJpbmc7WilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvQmlkaUZvcm1hdHRlciRCdWlsZGVyIiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFopViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC90ZXh0L0JpZGlGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dERpcmVjdGlvbkhldXJpc3RpYyhMYW5kcm9pZC90ZXh0L1RleHREaXJlY3Rpb25IZXVyaXN0aWM7KUxhbmRyb2lkL3RleHQvQmlkaUZvcm1hdHRlciRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InN0ZXJlb1Jlc2V0KFopTGFuZHJvaWQvdGV4dC9CaWRpRm9ybWF0dGVyJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L0JvcmluZ0xheW91dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvTGF5b3V0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9UZXh0VXRpbHMkRWxsaXBzaXplQ2FsbGJhY2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvdGV4dC9UZXh0UGFpbnQ7SUxhbmRyb2lkL3RleHQvTGF5b3V0JEFsaWdubWVudDtGRkxhbmRyb2lkL3RleHQvQm9yaW5nTGF5b3V0JE1ldHJpY3M7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3RleHQvVGV4dFBhaW50O0lMYW5kcm9pZC90ZXh0L0xheW91dCRBbGlnbm1lbnQ7RkZMYW5kcm9pZC90ZXh0L0JvcmluZ0xheW91dCRNZXRyaWNzO1pMYW5kcm9pZC90ZXh0L1RleHRVdGlscyRUcnVuY2F0ZUF0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQm9yaW5nKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3RleHQvVGV4dFBhaW50OylMYW5kcm9pZC90ZXh0L0JvcmluZ0xheW91dCRNZXRyaWNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQm9yaW5nKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3RleHQvVGV4dFBhaW50O0xhbmRyb2lkL3RleHQvQm9yaW5nTGF5b3V0JE1ldHJpY3M7KUxhbmRyb2lkL3RleHQvQm9yaW5nTGF5b3V0JE1ldHJpY3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWFrZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC90ZXh0L1RleHRQYWludDtJTGFuZHJvaWQvdGV4dC9MYXlvdXQkQWxpZ25tZW50O0ZGTGFuZHJvaWQvdGV4dC9Cb3JpbmdMYXlvdXQkTWV0cmljcztaKUxhbmRyb2lkL3RleHQvQm9yaW5nTGF5b3V0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im1ha2UoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvdGV4dC9UZXh0UGFpbnQ7SUxhbmRyb2lkL3RleHQvTGF5b3V0JEFsaWdubWVudDtGRkxhbmRyb2lkL3RleHQvQm9yaW5nTGF5b3V0JE1ldHJpY3M7WkxhbmRyb2lkL3RleHQvVGV4dFV0aWxzJFRydW5jYXRlQXQ7SSlMYW5kcm9pZC90ZXh0L0JvcmluZ0xheW91dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBsYWNlT3JNYWtlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3RleHQvVGV4dFBhaW50O0lMYW5kcm9pZC90ZXh0L0xheW91dCRBbGlnbm1lbnQ7RkZMYW5kcm9pZC90ZXh0L0JvcmluZ0xheW91dCRNZXRyaWNzO1opTGFuZHJvaWQvdGV4dC9Cb3JpbmdMYXlvdXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZU9yTWFrZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC90ZXh0L1RleHRQYWludDtJTGFuZHJvaWQvdGV4dC9MYXlvdXQkQWxpZ25tZW50O0ZGTGFuZHJvaWQvdGV4dC9Cb3JpbmdMYXlvdXQkTWV0cmljcztaTGFuZHJvaWQvdGV4dC9UZXh0VXRpbHMkVHJ1bmNhdGVBdDtJKUxhbmRyb2lkL3RleHQvQm9yaW5nTGF5b3V0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9Cb3JpbmdMYXlvdXQkTWV0cmljcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2dyYXBoaWNzL1BhaW50JEZvbnRNZXRyaWNzSW50Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aWR0aCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9DbGlwYm9hcmRNYW5hZ2VyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzVGV4dCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvRHluYW1pY0xheW91dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvTGF5b3V0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3RleHQvVGV4dFBhaW50O0lMYW5kcm9pZC90ZXh0L0xheW91dCRBbGlnbm1lbnQ7RkZaKVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3RleHQvVGV4dFBhaW50O0lMYW5kcm9pZC90ZXh0L0xheW91dCRBbGlnbm1lbnQ7RkZaKVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3RleHQvVGV4dFBhaW50O0lMYW5kcm9pZC90ZXh0L0xheW91dCRBbGlnbm1lbnQ7RkZaTGFuZHJvaWQvdGV4dC9UZXh0VXRpbHMkVHJ1bmNhdGVBdDtJKVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L0R5bmFtaWNMYXlvdXQkQnVpbGRlciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC90ZXh0L0R5bmFtaWNMYXlvdXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3RleHQvVGV4dFBhaW50O0kpTGFuZHJvaWQvdGV4dC9EeW5hbWljTGF5b3V0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxpZ25tZW50KExhbmRyb2lkL3RleHQvTGF5b3V0JEFsaWdubWVudDspTGFuZHJvaWQvdGV4dC9EeW5hbWljTGF5b3V0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QnJlYWtTdHJhdGVneShJKUxhbmRyb2lkL3RleHQvRHluYW1pY0xheW91dCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXlUZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC90ZXh0L0R5bmFtaWNMYXlvdXQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbGxpcHNpemUoTGFuZHJvaWQvdGV4dC9UZXh0VXRpbHMkVHJ1bmNhdGVBdDspTGFuZHJvaWQvdGV4dC9EeW5hbWljTGF5b3V0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RWxsaXBzaXplZFdpZHRoKEkpTGFuZHJvaWQvdGV4dC9EeW5hbWljTGF5b3V0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SHlwaGVuYXRpb25GcmVxdWVuY3koSSlMYW5kcm9pZC90ZXh0L0R5bmFtaWNMYXlvdXQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbmNsdWRlUGFkKFopTGFuZHJvaWQvdGV4dC9EeW5hbWljTGF5b3V0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SnVzdGlmaWNhdGlvbk1vZGUoSSlMYW5kcm9pZC90ZXh0L0R5bmFtaWNMYXlvdXQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaW5lU3BhY2luZyhGRilMYW5kcm9pZC90ZXh0L0R5bmFtaWNMYXlvdXQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0RGlyZWN0aW9uKExhbmRyb2lkL3RleHQvVGV4dERpcmVjdGlvbkhldXJpc3RpYzspTGFuZHJvaWQvdGV4dC9EeW5hbWljTGF5b3V0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXNlTGluZVNwYWNpbmdGcm9tRmFsbGJhY2tzKFopTGFuZHJvaWQvdGV4dC9EeW5hbWljTGF5b3V0JEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L0VkaXRhYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L0dldENoYXJzIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9TcGFubmFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0FwcGVuZGFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NoYXJTZXF1ZW5jZSIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChDKUxhbmRyb2lkL3RleHQvRWRpdGFibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC90ZXh0L0VkaXRhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSSlMYW5kcm9pZC90ZXh0L0VkaXRhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJTcGFucygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZShJSSlMYW5kcm9pZC90ZXh0L0VkaXRhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbHRlcnMoKVtMYW5kcm9pZC90ZXh0L0lucHV0RmlsdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydChJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3RleHQvRWRpdGFibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0KElMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSSlMYW5kcm9pZC90ZXh0L0VkaXRhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2UoSUlMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvdGV4dC9FZGl0YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBsYWNlKElJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpTGFuZHJvaWQvdGV4dC9FZGl0YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaWx0ZXJzKFtMYW5kcm9pZC90ZXh0L0lucHV0RmlsdGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L0VkaXRhYmxlJEZhY3RvcnkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMYW5kcm9pZC90ZXh0L0VkaXRhYmxlJEZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RWRpdGFibGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3RleHQvRWRpdGFibGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L0dldENoYXJzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NoYXJTZXF1ZW5jZSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJzKElJW0NJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvSHRtbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXNjYXBlSHRtbChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tSHRtbChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9TcGFubmVkOyIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tSHRtbChMamF2YS9sYW5nL1N0cmluZztJKUxhbmRyb2lkL3RleHQvU3Bhbm5lZDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb21IdG1sKExqYXZhL2xhbmcvU3RyaW5nO0lMYW5kcm9pZC90ZXh0L0h0bWwkSW1hZ2VHZXR0ZXI7TGFuZHJvaWQvdGV4dC9IdG1sJFRhZ0hhbmRsZXI7KUxhbmRyb2lkL3RleHQvU3Bhbm5lZDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb21IdG1sKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL3RleHQvSHRtbCRJbWFnZUdldHRlcjtMYW5kcm9pZC90ZXh0L0h0bWwkVGFnSGFuZGxlcjspTGFuZHJvaWQvdGV4dC9TcGFubmVkOyIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0h0bWwoTGFuZHJvaWQvdGV4dC9TcGFubmVkOylMamF2YS9sYW5nL1N0cmluZzsiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9IdG1sKExhbmRyb2lkL3RleHQvU3Bhbm5lZDtJKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGUk9NX0hUTUxfTU9ERV9DT01QQUNUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZST01fSFRNTF9NT0RFX0xFR0FDWSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGUk9NX0hUTUxfT1BUSU9OX1VTRV9DU1NfQ09MT1JTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZST01fSFRNTF9TRVBBUkFUT1JfTElORV9CUkVBS19CTE9DS1FVT1RFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZST01fSFRNTF9TRVBBUkFUT1JfTElORV9CUkVBS19ESVYiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRlJPTV9IVE1MX1NFUEFSQVRPUl9MSU5FX0JSRUFLX0hFQURJTkciIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRlJPTV9IVE1MX1NFUEFSQVRPUl9MSU5FX0JSRUFLX0xJU1QiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRlJPTV9IVE1MX1NFUEFSQVRPUl9MSU5FX0JSRUFLX0xJU1RfSVRFTSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGUk9NX0hUTUxfU0VQQVJBVE9SX0xJTkVfQlJFQUtfUEFSQUdSQVBIIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPX0hUTUxfUEFSQUdSQVBIX0xJTkVTX0NPTlNFQ1VUSVZFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPX0hUTUxfUEFSQUdSQVBIX0xJTkVTX0lORElWSURVQUwiIHNpbmNlPSIyNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9IdG1sJEltYWdlR2V0dGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcmF3YWJsZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L0h0bWwkVGFnSGFuZGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlVGFnKFpMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC90ZXh0L0VkaXRhYmxlO0xvcmcveG1sL3NheC9YTUxSZWFkZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvSW5wdXRGaWx0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbHRlcihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSUxhbmRyb2lkL3RleHQvU3Bhbm5lZDtJSSlMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvSW5wdXRGaWx0ZXIkQWxsQ2FwcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9JbnB1dEZpbHRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xvY2FsZTspViIgc2luY2U9IjI3Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L0lucHV0RmlsdGVyJExlbmd0aEZpbHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9JbnB1dEZpbHRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXgoKUkiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9JbnB1dFR5cGUiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DTEFTU19EQVRFVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DTEFTU19OVU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQ0xBU1NfUEhPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQ0xBU1NfVEVYVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9EQVRFVElNRV9WQVJJQVRJT05fREFURSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9EQVRFVElNRV9WQVJJQVRJT05fTk9STUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0RBVEVUSU1FX1ZBUklBVElPTl9USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX01BU0tfQ0xBU1MiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTUFTS19GTEFHUyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9NQVNLX1ZBUklBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9OVUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX05VTUJFUl9GTEFHX0RFQ0lNQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTlVNQkVSX0ZMQUdfU0lHTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX05VTUJFUl9WQVJJQVRJT05fTk9STUFMIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTlVNQkVSX1ZBUklBVElPTl9QQVNTV09SRCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfRkxBR19BVVRPX0NPTVBMRVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfRkxBR19BVVRPX0NPUlJFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVEVYVF9GTEFHX0NBUF9DSEFSQUNURVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfRkxBR19DQVBfU0VOVEVOQ0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfRkxBR19DQVBfV09SRFMiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVEVYVF9GTEFHX0lNRV9NVUxUSV9MSU5FIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfRkxBR19NVUxUSV9MSU5FIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfRkxBR19OT19TVUdHRVNUSU9OUyIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVEVYVF9WQVJJQVRJT05fRU1BSUxfQUREUkVTUyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9URVhUX1ZBUklBVElPTl9FTUFJTF9TVUJKRUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfVkFSSUFUSU9OX0ZJTFRFUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9URVhUX1ZBUklBVElPTl9MT05HX01FU1NBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVEVYVF9WQVJJQVRJT05fTk9STUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfVkFSSUFUSU9OX1BBU1NXT1JEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfVkFSSUFUSU9OX1BFUlNPTl9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfVkFSSUFUSU9OX1BIT05FVElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfVkFSSUFUSU9OX1BPU1RBTF9BRERSRVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfVkFSSUFUSU9OX1NIT1JUX01FU1NBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVEVYVF9WQVJJQVRJT05fVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfVkFSSUFUSU9OX1ZJU0lCTEVfUEFTU1dPUkQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVEVYVF9WQVJJQVRJT05fV0VCX0VESVRfVEVYVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9URVhUX1ZBUklBVElPTl9XRUJfRU1BSUxfQUREUkVTUyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFRfVkFSSUFUSU9OX1dFQl9QQVNTV09SRCIgc2luY2U9IjExIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L0xheW91dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3RleHQvVGV4dFBhaW50O0lMYW5kcm9pZC90ZXh0L0xheW91dCRBbGlnbm1lbnQ7RkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXcoTGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhdyhMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7TGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDtMYW5kcm9pZC9ncmFwaGljcy9QYWludDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGlnbm1lbnQoKUxhbmRyb2lkL3RleHQvTGF5b3V0JEFsaWdubWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb3R0b21QYWRkaW5nKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3Vyc29yUGF0aChJTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlc2lyZWRXaWR0aChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSUxhbmRyb2lkL3RleHQvVGV4dFBhaW50OylGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzaXJlZFdpZHRoKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3RleHQvVGV4dFBhaW50OylGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RWxsaXBzaXNDb3VudChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbGxpcHNpc1N0YXJ0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVsbGlwc2l6ZWRXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmVBc2NlbnQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGluZUJhc2VsaW5lKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmVCb3R0b20oSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGluZUJvdW5kcyhJTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmVDb250YWluc1RhYihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lRGVzY2VudChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lRGlyZWN0aW9ucyhJKUxhbmRyb2lkL3RleHQvTGF5b3V0JERpcmVjdGlvbnM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGluZUVuZChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lRm9yT2Zmc2V0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmVGb3JWZXJ0aWNhbChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lTGVmdChJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lTWF4KEkpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmVSaWdodChJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lU3RhcnQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGluZVRvcChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lVmlzaWJsZUVuZChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lV2lkdGgoSSlGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2Zmc2V0Rm9ySG9yaXpvbnRhbChJRilJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2Zmc2V0VG9MZWZ0T2YoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2Zmc2V0VG9SaWdodE9mKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhaW50KClMYW5kcm9pZC90ZXh0L1RleHRQYWludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhZ3JhcGhBbGlnbm1lbnQoSSlMYW5kcm9pZC90ZXh0L0xheW91dCRBbGlnbm1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYWdyYXBoRGlyZWN0aW9uKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFncmFwaExlZnQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYWdyYXBoUmlnaHQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbWFyeUhvcml6b250YWwoSSlGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vjb25kYXJ5SG9yaXpvbnRhbChJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxlY3Rpb25QYXRoKElJTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNwYWNpbmdBZGQoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGFjaW5nTXVsdGlwbGllcigpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvcFBhZGRpbmcoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImluY3JlYXNlV2lkdGhUbyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1J0bENoYXJBdChJKVoiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3Bhbm5lZCgpWiIvPgotCQk8ZmllbGQgbmFtZT0iQlJFQUtfU1RSQVRFR1lfQkFMQU5DRUQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQlJFQUtfU1RSQVRFR1lfSElHSF9RVUFMSVRZIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkJSRUFLX1NUUkFURUdZX1NJTVBMRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX0xJTkVTUEFDSU5HX0FERElUSU9OIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfTElORVNQQUNJTkdfTVVMVElQTElFUiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVJfTEVGVF9UT19SSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iRElSX1JJR0hUX1RPX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IkhZUEhFTkFUSU9OX0ZSRVFVRU5DWV9GVUxMIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkhZUEhFTkFUSU9OX0ZSRVFVRU5DWV9OT05FIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkhZUEhFTkFUSU9OX0ZSRVFVRU5DWV9OT1JNQUwiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iSlVTVElGSUNBVElPTl9NT0RFX0lOVEVSX1dPUkQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iSlVTVElGSUNBVElPTl9NT0RFX05PTkUiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9MYXlvdXQkQWxpZ25tZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9MYXlvdXQkQWxpZ25tZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL3RleHQvTGF5b3V0JEFsaWdubWVudDsiLz4KLQkJPGZpZWxkIG5hbWU9IkFMSUdOX0NFTlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iQUxJR05fTk9STUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTElHTl9PUFBPU0lURSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9MYXlvdXQkRGlyZWN0aW9ucyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbSSlWIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvTG9naW5GaWx0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvSW5wdXRGaWx0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FsbG93ZWQoQylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25JbnZhbGlkQ2hhcmFjdGVyKEMpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhcnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0b3AoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvTG9naW5GaWx0ZXIkUGFzc3dvcmRGaWx0ZXJHTWFpbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvTG9naW5GaWx0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L0xvZ2luRmlsdGVyJFVzZXJuYW1lRmlsdGVyR01haWwiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L0xvZ2luRmlsdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9Mb2dpbkZpbHRlciRVc2VybmFtZUZpbHRlckdlbmVyaWMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L0xvZ2luRmlsdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9Ob0NvcHlTcGFuIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvTm9Db3B5U3BhbiRDb25jcmV0ZSIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9Ob0NvcHlTcGFuIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L1BhcmNlbGFibGVTcGFuIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3BhblR5cGVJZCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9QcmVjb21wdXRlZFRleHQiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L1NwYW5uYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC90ZXh0L1ByZWNvbXB1dGVkVGV4dCRQYXJhbXM7KUxhbmRyb2lkL3RleHQvUHJlY29tcHV0ZWRUZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvdW5kcyhJSUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhZ3JhcGhDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFncmFwaEVuZChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhZ3JhcGhTdGFydChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbXMoKUxhbmRyb2lkL3RleHQvUHJlY29tcHV0ZWRUZXh0JFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaWR0aChJSSlGIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L1ByZWNvbXB1dGVkVGV4dCRQYXJhbXMiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3RleHQvVGV4dFBhaW50O0xhbmRyb2lkL3RleHQvVGV4dERpcmVjdGlvbkhldXJpc3RpYztJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCcmVha1N0cmF0ZWd5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SHlwaGVuYXRpb25GcmVxdWVuY3koKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0RGlyZWN0aW9uKClMYW5kcm9pZC90ZXh0L1RleHREaXJlY3Rpb25IZXVyaXN0aWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dFBhaW50KClMYW5kcm9pZC90ZXh0L1RleHRQYWludDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvUHJlY29tcHV0ZWRUZXh0JFBhcmFtcyRCdWlsZGVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3RleHQvVGV4dFBhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL3RleHQvUHJlY29tcHV0ZWRUZXh0JFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCcmVha1N0cmF0ZWd5KEkpTGFuZHJvaWQvdGV4dC9QcmVjb21wdXRlZFRleHQkUGFyYW1zJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SHlwaGVuYXRpb25GcmVxdWVuY3koSSlMYW5kcm9pZC90ZXh0L1ByZWNvbXB1dGVkVGV4dCRQYXJhbXMkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0RGlyZWN0aW9uKExhbmRyb2lkL3RleHQvVGV4dERpcmVjdGlvbkhldXJpc3RpYzspTGFuZHJvaWQvdGV4dC9QcmVjb21wdXRlZFRleHQkUGFyYW1zJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L1NlbGVjdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXh0ZW5kRG93bihMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtMYW5kcm9pZC90ZXh0L0xheW91dDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImV4dGVuZExlZnQoTGFuZHJvaWQvdGV4dC9TcGFubmFibGU7TGFuZHJvaWQvdGV4dC9MYXlvdXQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHRlbmRSaWdodChMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtMYW5kcm9pZC90ZXh0L0xheW91dDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImV4dGVuZFNlbGVjdGlvbihMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHRlbmRUb0xlZnRFZGdlKExhbmRyb2lkL3RleHQvU3Bhbm5hYmxlO0xhbmRyb2lkL3RleHQvTGF5b3V0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXh0ZW5kVG9SaWdodEVkZ2UoTGFuZHJvaWQvdGV4dC9TcGFubmFibGU7TGFuZHJvaWQvdGV4dC9MYXlvdXQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHRlbmRVcChMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtMYW5kcm9pZC90ZXh0L0xheW91dDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGlvbkVuZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGlvblN0YXJ0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZURvd24oTGFuZHJvaWQvdGV4dC9TcGFubmFibGU7TGFuZHJvaWQvdGV4dC9MYXlvdXQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtb3ZlTGVmdChMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtMYW5kcm9pZC90ZXh0L0xheW91dDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im1vdmVSaWdodChMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtMYW5kcm9pZC90ZXh0L0xheW91dDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im1vdmVUb0xlZnRFZGdlKExhbmRyb2lkL3RleHQvU3Bhbm5hYmxlO0xhbmRyb2lkL3RleHQvTGF5b3V0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZVRvUmlnaHRFZGdlKExhbmRyb2lkL3RleHQvU3Bhbm5hYmxlO0xhbmRyb2lkL3RleHQvTGF5b3V0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZVVwKExhbmRyb2lkL3RleHQvU3Bhbm5hYmxlO0xhbmRyb2lkL3RleHQvTGF5b3V0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlU2VsZWN0aW9uKExhbmRyb2lkL3RleHQvU3Bhbm5hYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VsZWN0QWxsKExhbmRyb2lkL3RleHQvU3Bhbm5hYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VsZWN0aW9uKExhbmRyb2lkL3RleHQvU3Bhbm5hYmxlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbGVjdGlvbihMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtJSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUxFQ1RJT05fRU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUxFQ1RJT05fU1RBUlQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvU3BhbldhdGNoZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvTm9Db3B5U3BhbiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNwYW5BZGRlZChMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtMamF2YS9sYW5nL09iamVjdDtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TcGFuQ2hhbmdlZChMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtMamF2YS9sYW5nL09iamVjdDtJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNwYW5SZW1vdmVkKExhbmRyb2lkL3RleHQvU3Bhbm5hYmxlO0xqYXZhL2xhbmcvT2JqZWN0O0lJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvU3Bhbm5hYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L1NwYW5uZWQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVTcGFuKExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3BhbihMamF2YS9sYW5nL09iamVjdDtJSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9TcGFubmFibGUkRmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxhbmRyb2lkL3RleHQvU3Bhbm5hYmxlJEZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3U3Bhbm5hYmxlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvU3Bhbm5hYmxlU3RyaW5nIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9TcGFubmFibGVTdHJpbmdJbnRlcm5hbCIgcmVtb3ZlZD0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgc2luY2U9IjI5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9HZXRDaGFycyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvU3Bhbm5hYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DaGFyU2VxdWVuY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZVN0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvU3Bhbm5hYmxlU3RyaW5nQnVpbGRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9FZGl0YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvR2V0Q2hhcnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L1NwYW5uYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQXBwZW5kYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2hhclNlcXVlbmNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoQylMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZVN0cmluZ0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZVN0cmluZ0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lJKUxhbmRyb2lkL3RleHQvU3Bhbm5hYmxlU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9PYmplY3Q7SSlMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZVN0cmluZ0J1aWxkZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGUoSUkpTGFuZHJvaWQvdGV4dC9TcGFubmFibGVTdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRSdW5DdXJzb3IoSUlJSUlMYW5kcm9pZC9ncmFwaGljcy9QYWludDspSSIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRXYXRjaGVyRGVwdGgoKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydChJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3RleHQvU3Bhbm5hYmxlU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnQoSUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lJKUxhbmRyb2lkL3RleHQvU3Bhbm5hYmxlU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBsYWNlKElJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3RleHQvU3Bhbm5hYmxlU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBsYWNlKElJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpTGFuZHJvaWQvdGV4dC9TcGFubmFibGVTdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3RleHQvU3Bhbm5hYmxlU3RyaW5nQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvU3Bhbm5hYmxlU3RyaW5nSW50ZXJuYWwiIHNpbmNlPSIxIiByZW1vdmVkPSIyOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFyQXQoSSlDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhcnMoSUlbQ0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNwYW5FbmQoTGphdmEvbGFuZy9PYmplY3Q7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGFuRmxhZ3MoTGphdmEvbGFuZy9PYmplY3Q7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGFuU3RhcnQoTGphdmEvbGFuZy9PYmplY3Q7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGFucyhJSUxqYXZhL2xhbmcvQ2xhc3M7KVtMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0U3BhblRyYW5zaXRpb24oSUlMamF2YS9sYW5nL0NsYXNzOylJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L1NwYW5uZWQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2hhclNlcXVlbmNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3BhbkVuZChMamF2YS9sYW5nL09iamVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNwYW5GbGFncyhMamF2YS9sYW5nL09iamVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNwYW5TdGFydChMamF2YS9sYW5nL09iamVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNwYW5zKElJTGphdmEvbGFuZy9DbGFzczspW0xqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRTcGFuVHJhbnNpdGlvbihJSUxqYXZhL2xhbmcvQ2xhc3M7KUkiLz4KLQkJPGZpZWxkIG5hbWU9IlNQQU5fQ09NUE9TSU5HIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iU1BBTl9FWENMVVNJVkVfRVhDTFVTSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUEFOX0VYQ0xVU0lWRV9JTkNMVVNJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNQQU5fSU5DTFVTSVZFX0VYQ0xVU0lWRSIvPgotCQk8ZmllbGQgbmFtZT0iU1BBTl9JTkNMVVNJVkVfSU5DTFVTSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUEFOX0lOVEVSTUVESUFURSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNQQU5fTUFSS19NQVJLIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUEFOX01BUktfUE9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNQQU5fUEFSQUdSQVBIIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUEFOX1BPSU5UX01BUksiLz4KLQkJPGZpZWxkIG5hbWU9IlNQQU5fUE9JTlRfTUFSS19NQVNLIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iU1BBTl9QT0lOVF9QT0lOVCIvPgotCQk8ZmllbGQgbmFtZT0iU1BBTl9QUklPUklUWSIvPgotCQk8ZmllbGQgbmFtZT0iU1BBTl9QUklPUklUWV9TSElGVCIvPgotCQk8ZmllbGQgbmFtZT0iU1BBTl9VU0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUEFOX1VTRVJfU0hJRlQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvU3Bhbm5lZFN0cmluZyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvU3Bhbm5hYmxlU3RyaW5nSW50ZXJuYWwiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiIHNpbmNlPSIyOSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvR2V0Q2hhcnMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L1NwYW5uZWQiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NoYXJTZXF1ZW5jZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3RleHQvU3Bhbm5lZFN0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvU3RhdGljTGF5b3V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9MYXlvdXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUlMYW5kcm9pZC90ZXh0L1RleHRQYWludDtJTGFuZHJvaWQvdGV4dC9MYXlvdXQkQWxpZ25tZW50O0ZGWilWIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSUxhbmRyb2lkL3RleHQvVGV4dFBhaW50O0lMYW5kcm9pZC90ZXh0L0xheW91dCRBbGlnbm1lbnQ7RkZaTGFuZHJvaWQvdGV4dC9UZXh0VXRpbHMkVHJ1bmNhdGVBdDtJKVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3RleHQvVGV4dFBhaW50O0lMYW5kcm9pZC90ZXh0L0xheW91dCRBbGlnbm1lbnQ7RkZaKVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L1N0YXRpY0xheW91dCRCdWlsZGVyIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL3RleHQvU3RhdGljTGF5b3V0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSUxhbmRyb2lkL3RleHQvVGV4dFBhaW50O0kpTGFuZHJvaWQvdGV4dC9TdGF0aWNMYXlvdXQkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGlnbm1lbnQoTGFuZHJvaWQvdGV4dC9MYXlvdXQkQWxpZ25tZW50OylMYW5kcm9pZC90ZXh0L1N0YXRpY0xheW91dCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJyZWFrU3RyYXRlZ3koSSlMYW5kcm9pZC90ZXh0L1N0YXRpY0xheW91dCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVsbGlwc2l6ZShMYW5kcm9pZC90ZXh0L1RleHRVdGlscyRUcnVuY2F0ZUF0OylMYW5kcm9pZC90ZXh0L1N0YXRpY0xheW91dCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVsbGlwc2l6ZWRXaWR0aChJKUxhbmRyb2lkL3RleHQvU3RhdGljTGF5b3V0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SHlwaGVuYXRpb25GcmVxdWVuY3koSSlMYW5kcm9pZC90ZXh0L1N0YXRpY0xheW91dCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluY2x1ZGVQYWQoWilMYW5kcm9pZC90ZXh0L1N0YXRpY0xheW91dCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluZGVudHMoW0lbSSlMYW5kcm9pZC90ZXh0L1N0YXRpY0xheW91dCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEp1c3RpZmljYXRpb25Nb2RlKEkpTGFuZHJvaWQvdGV4dC9TdGF0aWNMYXlvdXQkQnVpbGRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldExpbmVTcGFjaW5nKEZGKUxhbmRyb2lkL3RleHQvU3RhdGljTGF5b3V0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4TGluZXMoSSlMYW5kcm9pZC90ZXh0L1N0YXRpY0xheW91dCRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3RleHQvU3RhdGljTGF5b3V0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dERpcmVjdGlvbihMYW5kcm9pZC90ZXh0L1RleHREaXJlY3Rpb25IZXVyaXN0aWM7KUxhbmRyb2lkL3RleHQvU3RhdGljTGF5b3V0JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXNlTGluZVNwYWNpbmdGcm9tRmFsbGJhY2tzKFopTGFuZHJvaWQvdGV4dC9TdGF0aWNMYXlvdXQkQnVpbGRlcjsiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9UZXh0RGlyZWN0aW9uSGV1cmlzdGljIiBzaW5jZT0iMTgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSdGwoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUnRsKFtDSUkpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9UZXh0RGlyZWN0aW9uSGV1cmlzdGljcyIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQU5ZUlRMX0xUUiIvPgotCQk8ZmllbGQgbmFtZT0iRklSU1RTVFJPTkdfTFRSIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSVJTVFNUUk9OR19SVEwiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FMRSIvPgotCQk8ZmllbGQgbmFtZT0iTFRSIi8+Ci0JCTxmaWVsZCBuYW1lPSJSVEwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvVGV4dFBhaW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL1BhaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KExhbmRyb2lkL3RleHQvVGV4dFBhaW50OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJiYXNlbGluZVNoaWZ0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJiZ0NvbG9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJkZW5zaXR5IiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iZHJhd2FibGVTdGF0ZSIvPgotCQk8ZmllbGQgbmFtZT0ibGlua0NvbG9yIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L1RleHRVdGlscyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tbWFFbGxpcHNpemUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvdGV4dC9UZXh0UGFpbnQ7RkxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29uY2F0KFtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29weVNwYW5zRnJvbShMYW5kcm9pZC90ZXh0L1NwYW5uZWQ7SUlMamF2YS9sYW5nL0NsYXNzO0xhbmRyb2lkL3RleHQvU3Bhbm5hYmxlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXBTcGFucyhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC91dGlsL1ByaW50ZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWxsaXBzaXplKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3RleHQvVGV4dFBhaW50O0ZMYW5kcm9pZC90ZXh0L1RleHRVdGlscyRUcnVuY2F0ZUF0OylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbGxpcHNpemUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvdGV4dC9UZXh0UGFpbnQ7RkxhbmRyb2lkL3RleHQvVGV4dFV0aWxzJFRydW5jYXRlQXQ7WkxhbmRyb2lkL3RleHQvVGV4dFV0aWxzJEVsbGlwc2l6ZUNhbGxiYWNrOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHBhbmRUZW1wbGF0ZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtbTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhcHNNb2RlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lJKUkiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhcnMoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUlbQ0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheW91dERpcmVjdGlvbkZyb21Mb2NhbGUoTGphdmEvdXRpbC9Mb2NhbGU7KUkiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9mZnNldEFmdGVyKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9mZnNldEJlZm9yZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXZlcnNlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lJKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmltbWVkTGVuZ3RoKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaHRtbEVuY29kZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5kZXhPZihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtDKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmRleE9mKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0NJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmRleE9mKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0NJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5kZXhPZihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImluZGV4T2YoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5kZXhPZihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEaWdpdHNPbmx5KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbXB0eShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzR3JhcGhpYyhDKVoiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNHcmFwaGljKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iam9pbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0l0ZXJhYmxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJqb2luKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO1tMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibGFzdEluZGV4T2YoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7QylJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGFzdEluZGV4T2YoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Q0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imxhc3RJbmRleE9mKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0NJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGlzdEVsbGlwc2l6ZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvdXRpbC9MaXN0O0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL3RleHQvVGV4dFBhaW50O0ZJKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaW9uTWF0Y2hlcyhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2UoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7W0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BsaXQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGxpdChMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47KVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdHJpbmdPclNwYW5uZWRTdHJpbmcoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9InN1YnN0cmluZyhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVRvUGFyY2VsKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL29zL1BhcmNlbDtJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUF9NT0RFX0NIQVJBQ1RFUlMiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBfTU9ERV9TRU5URU5DRVMiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVBfTU9ERV9XT1JEUyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQVJfU0VRVUVOQ0VfQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9UZXh0VXRpbHMkRWxsaXBzaXplQ2FsbGJhY2siIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImVsbGlwc2l6ZWQoSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9UZXh0VXRpbHMkU2ltcGxlU3RyaW5nU3BsaXR0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvVGV4dFV0aWxzJFN0cmluZ1NwbGl0dGVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9JdGVyYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvVGV4dFV0aWxzJFN0cmluZ1NwbGl0dGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0l0ZXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L1RleHRVdGlscyRUcnVuY2F0ZUF0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9UZXh0VXRpbHMkVHJ1bmNhdGVBdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC90ZXh0L1RleHRVdGlscyRUcnVuY2F0ZUF0OyIvPgotCQk8ZmllbGQgbmFtZT0iRU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVJRVUVFIiBzaW5jZT0iMiIvPgotCQk8ZmllbGQgbmFtZT0iTUlERExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFSVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9UZXh0V2F0Y2hlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9Ob0NvcHlTcGFuIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImFmdGVyVGV4dENoYW5nZWQoTGFuZHJvaWQvdGV4dC9FZGl0YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJlZm9yZVRleHRDaGFuZ2VkKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UZXh0Q2hhbmdlZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9mb3JtYXQvRGF0ZUZvcm1hdCIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0opTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL3V0aWwvQ2FsZW5kYXI7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS91dGlsL0RhdGU7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJlc3REYXRlVGltZVBhdHRlcm4oTGphdmEvdXRpbC9Mb2NhbGU7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZUZvcm1hdChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxqYXZhL3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlRm9ybWF0T3JkZXIoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylbQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmdEYXRlRm9ybWF0KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGphdmEvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lZGl1bURhdGVGb3JtYXQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMamF2YS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZUZvcm1hdChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxqYXZhL3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpczI0SG91ckZvcm1hdChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVoiLz4KLQkJPGZpZWxkIG5hbWU9IkFNX1BNIiBkZXByZWNhdGVkPSIxOCIgcmVtb3ZlZD0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUElUQUxfQU1fUE0iIGRlcHJlY2F0ZWQ9IjE4IiByZW1vdmVkPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iREFURSIgZGVwcmVjYXRlZD0iMTgiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVkiIGRlcHJlY2F0ZWQ9IjE4IiByZW1vdmVkPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUiIgZGVwcmVjYXRlZD0iMTgiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1VSX09GX0RBWSIgZGVwcmVjYXRlZD0iMTgiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5VVEUiIGRlcHJlY2F0ZWQ9IjE4IiByZW1vdmVkPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEgiIGRlcHJlY2F0ZWQ9IjE4IiByZW1vdmVkPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iUVVPVEUiIGRlcHJlY2F0ZWQ9IjE4IiByZW1vdmVkPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iU0VDT05EUyIgZGVwcmVjYXRlZD0iMTgiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFOREFMT05FX01PTlRIIiBzaW5jZT0iMTciIGRlcHJlY2F0ZWQ9IjE4IiByZW1vdmVkPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iVElNRV9aT05FIiBkZXByZWNhdGVkPSIxOCIgcmVtb3ZlZD0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IllFQVIiIGRlcHJlY2F0ZWQ9IjE4IiByZW1vdmVkPSIyMiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9mb3JtYXQvRGF0ZVV0aWxzIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXREYXRlUmFuZ2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0pKSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXREYXRlUmFuZ2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL3V0aWwvRm9ybWF0dGVyO0pKSSlMamF2YS91dGlsL0Zvcm1hdHRlcjsiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0RGF0ZVJhbmdlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS91dGlsL0Zvcm1hdHRlcjtKSklMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9Gb3JtYXR0ZXI7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdERhdGVUaW1lKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtKSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRFbGFwc2VkVGltZShKKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdEVsYXBzZWRUaW1lKExqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjtKKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdFNhbWVEYXlUaW1lKEpKSUkpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QU1QTVN0cmluZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXlPZldlZWtTdHJpbmcoSUkpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vbnRoU3RyaW5nKElJKUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWxhdGl2ZURhdGVUaW1lU3RyaW5nKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtKSkpJKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlbGF0aXZlVGltZVNwYW5TdHJpbmcoSilMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWxhdGl2ZVRpbWVTcGFuU3RyaW5nKEpKSilMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWxhdGl2ZVRpbWVTcGFuU3RyaW5nKEpKSkkpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVsYXRpdmVUaW1lU3BhblN0cmluZyhMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SilMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWxhdGl2ZVRpbWVTcGFuU3RyaW5nKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtKWilMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RvZGF5KEopWiIvPgotCQk8ZmllbGQgbmFtZT0iQUJCUkVWX01PTlRIX0ZPUk1BVCIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkFCQlJFVl9XRUVLREFZX0ZPUk1BVCIvPgotCQk8ZmllbGQgbmFtZT0iREFZX0lOX01JTExJUyIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUXzEySE9VUiIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF8yNEhPVVIiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQUJCUkVWX0FMTCIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0FCQlJFVl9NT05USCIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0FCQlJFVl9SRUxBVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iRk9STUFUX0FCQlJFVl9USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQUJCUkVWX1dFRUtEQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9DQVBfQU1QTSIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9DQVBfTUlETklHSFQiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQ0FQX05PT04iIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQ0FQX05PT05fTUlETklHSFQiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfTk9fTUlETklHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9OT19NT05USF9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9OT19OT09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfTk9fTk9PTl9NSUROSUdIVCIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9OT19ZRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfTlVNRVJJQ19EQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfU0hPV19EQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfU0hPV19USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfU0hPV19XRUVLREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfU0hPV19ZRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfVVRDIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUl9JTl9NSUxMSVMiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVVJfTUlOVVRFXzI0IiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iTEVOR1RIX0xPTkciIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5HVEhfTUVESVVNIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iTEVOR1RIX1NIT1JUIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iTEVOR1RIX1NIT1JURVIiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5HVEhfU0hPUlRFU1QiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5VVEVfSU5fTUlMTElTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05USF9EQVlfRk9STUFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05USF9GT1JNQVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VTUVSSUNfTU9OVEhfRk9STUFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNPTkRfSU5fTUlMTElTIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUVLREFZX0ZPUk1BVCIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS19JTl9NSUxMSVMiLz4KLQkJPGZpZWxkIG5hbWU9IllFQVJfRk9STUFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJZRUFSX0ZPUk1BVF9UV09fRElHSVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJZRUFSX0lOX01JTExJUyIvPgotCQk8ZmllbGQgbmFtZT0ic2FtZU1vbnRoVGFibGUiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzYW1lWWVhclRhYmxlIiBkZXByZWNhdGVkPSIxNyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9mb3JtYXQvRm9ybWF0dGVyIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRGaWxlU2l6ZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRJcEFkZHJlc3MoSSlMamF2YS9sYW5nL1N0cmluZzsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0U2hvcnRGaWxlU2l6ZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SilMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI1Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L2Zvcm1hdC9UaW1lIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMjIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3RleHQvZm9ybWF0L1RpbWU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZnRlcihMYW5kcm9pZC90ZXh0L2Zvcm1hdC9UaW1lOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmVmb3JlKExhbmRyb2lkL3RleHQvZm9ybWF0L1RpbWU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmUoTGFuZHJvaWQvdGV4dC9mb3JtYXQvVGltZTtMYW5kcm9pZC90ZXh0L2Zvcm1hdC9UaW1lOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXQyNDQ1KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXQzMzM5KFopTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0dWFsTWF4aW11bShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50VGltZXpvbmUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEp1bGlhbkRheShKSilJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SnVsaWFuTW9uZGF5RnJvbVdlZWtzU2luY2VFcG9jaChJKUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdlZWtOdW1iZXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWVrc1NpbmNlRXBvY2hGcm9tSnVsaWFuRGF5KElJKUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRXBvY2goTGFuZHJvaWQvdGV4dC9mb3JtYXQvVGltZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5vcm1hbGl6ZShaKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlMzMzOShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldChJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldChJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldChKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGFuZHJvaWQvdGV4dC9mb3JtYXQvVGltZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEp1bGlhbkRheShJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUb05vdygpViIvPgotCQk8bWV0aG9kIG5hbWU9InN3aXRjaFRpbWV6b25lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9NaWxsaXMoWilKIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUE9DSF9KVUxJQU5fREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJGUklEQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTlVURSIvPgotCQk8ZmllbGQgbmFtZT0iTU9OREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05EQVlfQkVGT1JFX0pVTElBTl9FUE9DSCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05USCIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEhfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQVRVUkRBWSIvPgotCQk8ZmllbGQgbmFtZT0iU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVU5EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IlRIVVJTREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FWk9ORV9VVEMiLz4KLQkJPGZpZWxkIG5hbWU9IlRVRVNEQVkiLz4KLQkJPGZpZWxkIG5hbWU9IldFRE5FU0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS19EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IldFRUtfTlVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJZRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJZRUFSX0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iYWxsRGF5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJnbXRvZmYiLz4KLQkJPGZpZWxkIG5hbWU9ImhvdXIiLz4KLQkJPGZpZWxkIG5hbWU9ImlzRHN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtaW51dGUiLz4KLQkJPGZpZWxkIG5hbWU9Im1vbnRoIi8+Ci0JCTxmaWVsZCBuYW1lPSJtb250aERheSIvPgotCQk8ZmllbGQgbmFtZT0ic2Vjb25kIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0aW1lem9uZSIvPgotCQk8ZmllbGQgbmFtZT0id2Vla0RheSIvPgotCQk8ZmllbGQgbmFtZT0ieWVhciIvPgotCQk8ZmllbGQgbmFtZT0ieWVhckRheSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvQXJyb3dLZXlNb3ZlbWVudE1ldGhvZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL0Jhc2VNb3ZlbWVudE1ldGhvZCIgc2luY2U9IjExIi8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiIHJlbW92ZWQ9IjExIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvTW92ZW1lbnRNZXRob2QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGFuZHJvaWQvdGV4dC9tZXRob2QvTW92ZW1lbnRNZXRob2Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9CYXNlS2V5TGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9NZXRhS2V5S2V5TGlzdGVuZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9LZXlMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJhY2tzcGFjZShMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdGV4dC9FZGl0YWJsZTtJTGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcndhcmREZWxldGUoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3RleHQvRWRpdGFibGU7SUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiIHNpbmNlPSIxMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvQmFzZU1vdmVtZW50TWV0aG9kIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvTW92ZW1lbnRNZXRob2QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJib3R0b20oTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3O0xhbmRyb2lkL3RleHQvU3Bhbm5hYmxlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG93bihMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7TGFuZHJvaWQvdGV4dC9TcGFubmFibGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmQoTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3O0xhbmRyb2lkL3RleHQvU3Bhbm5hYmxlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW92ZW1lbnRNZXRhU3RhdGUoTGFuZHJvaWQvdGV4dC9TcGFubmFibGU7TGFuZHJvaWQvdmlldy9LZXlFdmVudDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZU1vdmVtZW50S2V5KExhbmRyb2lkL3dpZGdldC9UZXh0VmlldztMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtJSUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJob21lKExhbmRyb2lkL3dpZGdldC9UZXh0VmlldztMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImxlZnQoTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3O0xhbmRyb2lkL3RleHQvU3Bhbm5hYmxlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGluZUVuZChMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7TGFuZHJvaWQvdGV4dC9TcGFubmFibGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsaW5lU3RhcnQoTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3O0xhbmRyb2lkL3RleHQvU3Bhbm5hYmxlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFnZURvd24oTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3O0xhbmRyb2lkL3RleHQvU3Bhbm5hYmxlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFnZVVwKExhbmRyb2lkL3dpZGdldC9UZXh0VmlldztMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJpZ2h0KExhbmRyb2lkL3dpZGdldC9UZXh0VmlldztMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InRvcChMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7TGFuZHJvaWQvdGV4dC9TcGFubmFibGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cChMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7TGFuZHJvaWQvdGV4dC9TcGFubmFibGU7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL0NoYXJhY3RlclBpY2tlckRpYWxvZyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9EaWFsb2ciLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXckT25DbGlja0xpc3RlbmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3JE9uSXRlbUNsaWNrTGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC90ZXh0L0VkaXRhYmxlO0xqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvRGF0ZUtleUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvTnVtYmVyS2V5TGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTG9jYWxlOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGFuZHJvaWQvdGV4dC9tZXRob2QvRGF0ZUtleUxpc3RlbmVyOyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGFuZHJvaWQvdGV4dC9tZXRob2QvRGF0ZUtleUxpc3RlbmVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFSQUNURVJTIiBkZXByZWNhdGVkPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvRGF0ZVRpbWVLZXlMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL051bWJlcktleUxpc3RlbmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xvY2FsZTspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxhbmRyb2lkL3RleHQvbWV0aG9kL0RhdGVUaW1lS2V5TGlzdGVuZXI7IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL3V0aWwvTG9jYWxlOylMYW5kcm9pZC90ZXh0L21ldGhvZC9EYXRlVGltZUtleUxpc3RlbmVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFSQUNURVJTIiBkZXByZWNhdGVkPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvRGlhbGVyS2V5TGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9OdW1iZXJLZXlMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMYW5kcm9pZC90ZXh0L21ldGhvZC9EaWFsZXJLZXlMaXN0ZW5lcjsiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQVJBQ1RFUlMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL0RpZ2l0c0tleUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvTnVtYmVyS2V5TGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTG9jYWxlOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Mb2NhbGU7WlopViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFpaKVYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxhbmRyb2lkL3RleHQvbWV0aG9kL0RpZ2l0c0tleUxpc3RlbmVyOyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9tZXRob2QvRGlnaXRzS2V5TGlzdGVuZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL3RleHQvbWV0aG9kL0RpZ2l0c0tleUxpc3RlbmVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7WlopTGFuZHJvaWQvdGV4dC9tZXRob2QvRGlnaXRzS2V5TGlzdGVuZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShaWilMYW5kcm9pZC90ZXh0L21ldGhvZC9EaWdpdHNLZXlMaXN0ZW5lcjsiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9IaWRlUmV0dXJuc1RyYW5zZm9ybWF0aW9uTWV0aG9kIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvUmVwbGFjZW1lbnRUcmFuc2Zvcm1hdGlvbk1ldGhvZCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMYW5kcm9pZC90ZXh0L21ldGhvZC9IaWRlUmV0dXJuc1RyYW5zZm9ybWF0aW9uTWV0aG9kOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvS2V5TGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyTWV0YUtleVN0YXRlKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC90ZXh0L0VkaXRhYmxlO0kpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dFR5cGUoKUkiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25LZXlEb3duKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC90ZXh0L0VkaXRhYmxlO0lMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25LZXlPdGhlcihMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdGV4dC9FZGl0YWJsZTtMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uS2V5VXAoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3RleHQvRWRpdGFibGU7SUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL0xpbmtNb3ZlbWVudE1ldGhvZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL1Njcm9sbGluZ01vdmVtZW50TWV0aG9kIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9NZXRhS2V5S2V5TGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkanVzdE1ldGFBZnRlcktleXByZXNzKEopSiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGp1c3RNZXRhQWZ0ZXJLZXlwcmVzcyhMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyTWV0YUtleVN0YXRlKEpJKUoiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJNZXRhS2V5U3RhdGUoTGFuZHJvaWQvdGV4dC9FZGl0YWJsZTtJKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJNZXRhS2V5U3RhdGUoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3RleHQvRWRpdGFibGU7SSlWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldGFTdGF0ZShKKUkiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0YVN0YXRlKEpJKUkiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0YVN0YXRlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0YVN0YXRlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldGFTdGF0ZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJTGFuZHJvaWQvdmlldy9LZXlFdmVudDspSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0YVN0YXRlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KUkiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZUtleURvd24oSklMYW5kcm9pZC92aWV3L0tleUV2ZW50OylKIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZUtleVVwKEpJTGFuZHJvaWQvdmlldy9LZXlFdmVudDspSiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc01ldGFUcmFja2VyKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTZWxlY3RpbmdNZXRhVHJhY2tlcihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL09iamVjdDspWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbktleURvd24oTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3RleHQvRWRpdGFibGU7SUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbktleVVwKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC90ZXh0L0VkaXRhYmxlO0lMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXRMb2NrZWRNZXRhKEopSiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldExvY2tlZE1ldGEoTGFuZHJvaWQvdGV4dC9TcGFubmFibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldE1ldGFTdGF0ZShMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTspViIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9BTFRfTE9DS0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX0FMVF9PTiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9DQVBfTE9DS0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX1NISUZUX09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX1NZTV9MT0NLRUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFfU1lNX09OIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9Nb3ZlbWVudE1ldGhvZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuU2VsZWN0QXJiaXRyYXJpbHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0aWFsaXplKExhbmRyb2lkL3dpZGdldC9UZXh0VmlldztMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2VuZXJpY01vdGlvbkV2ZW50KExhbmRyb2lkL3dpZGdldC9UZXh0VmlldztMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbktleURvd24oTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3O0xhbmRyb2lkL3RleHQvU3Bhbm5hYmxlO0lMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25LZXlPdGhlcihMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7TGFuZHJvaWQvdGV4dC9TcGFubmFibGU7TGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbktleVVwKExhbmRyb2lkL3dpZGdldC9UZXh0VmlldztMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtJTGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVGFrZUZvY3VzKExhbmRyb2lkL3dpZGdldC9UZXh0VmlldztMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRvdWNoRXZlbnQoTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3O0xhbmRyb2lkL3RleHQvU3Bhbm5hYmxlO0xhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRyYWNrYmFsbEV2ZW50KExhbmRyb2lkL3dpZGdldC9UZXh0VmlldztMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9NdWx0aVRhcEtleUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvQmFzZUtleUxpc3RlbmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9TcGFuV2F0Y2hlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC90ZXh0L21ldGhvZC9UZXh0S2V5TGlzdGVuZXIkQ2FwaXRhbGl6ZTtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShaTGFuZHJvaWQvdGV4dC9tZXRob2QvVGV4dEtleUxpc3RlbmVyJENhcGl0YWxpemU7KUxhbmRyb2lkL3RleHQvbWV0aG9kL011bHRpVGFwS2V5TGlzdGVuZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9OdW1iZXJLZXlMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL0Jhc2VLZXlMaXN0ZW5lciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvSW5wdXRGaWx0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY2NlcHRlZENoYXJzKClbQyIvPgotCQk8bWV0aG9kIG5hbWU9Imxvb2t1cChMYW5kcm9pZC92aWV3L0tleUV2ZW50O0xhbmRyb2lkL3RleHQvU3Bhbm5hYmxlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2soW0NDKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL1Bhc3N3b3JkVHJhbnNmb3JtYXRpb25NZXRob2QiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvVGV4dFdhdGNoZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9UcmFuc2Zvcm1hdGlvbk1ldGhvZCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMYW5kcm9pZC90ZXh0L21ldGhvZC9QYXNzd29yZFRyYW5zZm9ybWF0aW9uTWV0aG9kOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvUXdlcnR5S2V5TGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9CYXNlS2V5TGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdGV4dC9tZXRob2QvVGV4dEtleUxpc3RlbmVyJENhcGl0YWxpemU7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoWkxhbmRyb2lkL3RleHQvbWV0aG9kL1RleHRLZXlMaXN0ZW5lciRDYXBpdGFsaXplOylMYW5kcm9pZC90ZXh0L21ldGhvZC9Rd2VydHlLZXlMaXN0ZW5lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZUZvckZ1bGxLZXlib2FyZCgpTGFuZHJvaWQvdGV4dC9tZXRob2QvUXdlcnR5S2V5TGlzdGVuZXI7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXJrQXNSZXBsYWNlZChMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtJSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9SZXBsYWNlbWVudFRyYW5zZm9ybWF0aW9uTWV0aG9kIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9UcmFuc2Zvcm1hdGlvbk1ldGhvZCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yaWdpbmFsKClbQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcGxhY2VtZW50KClbQyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvU2Nyb2xsaW5nTW92ZW1lbnRNZXRob2QiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9CYXNlTW92ZW1lbnRNZXRob2QiIHNpbmNlPSIxMSIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiByZW1vdmVkPSIxMSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL01vdmVtZW50TWV0aG9kIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG93bihMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7TGFuZHJvaWQvdGV4dC9TcGFubmFibGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGFuZHJvaWQvdGV4dC9tZXRob2QvTW92ZW1lbnRNZXRob2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibGVmdChMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7TGFuZHJvaWQvdGV4dC9TcGFubmFibGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyaWdodChMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7TGFuZHJvaWQvdGV4dC9TcGFubmFibGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cChMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7TGFuZHJvaWQvdGV4dC9TcGFubmFibGU7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL1NpbmdsZUxpbmVUcmFuc2Zvcm1hdGlvbk1ldGhvZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL1JlcGxhY2VtZW50VHJhbnNmb3JtYXRpb25NZXRob2QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGFuZHJvaWQvdGV4dC9tZXRob2QvU2luZ2xlTGluZVRyYW5zZm9ybWF0aW9uTWV0aG9kOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvVGV4dEtleUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvQmFzZUtleUxpc3RlbmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9TcGFuV2F0Y2hlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC90ZXh0L21ldGhvZC9UZXh0S2V5TGlzdGVuZXIkQ2FwaXRhbGl6ZTtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcihMYW5kcm9pZC90ZXh0L0VkaXRhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxhbmRyb2lkL3RleHQvbWV0aG9kL1RleHRLZXlMaXN0ZW5lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShaTGFuZHJvaWQvdGV4dC9tZXRob2QvVGV4dEtleUxpc3RlbmVyJENhcGl0YWxpemU7KUxhbmRyb2lkL3RleHQvbWV0aG9kL1RleHRLZXlMaXN0ZW5lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdWxkQ2FwKExhbmRyb2lkL3RleHQvbWV0aG9kL1RleHRLZXlMaXN0ZW5lciRDYXBpdGFsaXplO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0kpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9tZXRob2QvVGV4dEtleUxpc3RlbmVyJENhcGl0YWxpemUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L21ldGhvZC9UZXh0S2V5TGlzdGVuZXIkQ2FwaXRhbGl6ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC90ZXh0L21ldGhvZC9UZXh0S2V5TGlzdGVuZXIkQ2FwaXRhbGl6ZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQVJBQ1RFUlMiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlRFTkNFUyIvPgotCQk8ZmllbGQgbmFtZT0iV09SRFMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL1RpbWVLZXlMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL051bWJlcktleUxpc3RlbmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xvY2FsZTspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxhbmRyb2lkL3RleHQvbWV0aG9kL1RpbWVLZXlMaXN0ZW5lcjsiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxhbmRyb2lkL3RleHQvbWV0aG9kL1RpbWVLZXlMaXN0ZW5lcjsiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBUkFDVEVSUyIgZGVwcmVjYXRlZD0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvbWV0aG9kL1RvdWNoIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbml0aWFsU2Nyb2xsWChMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7TGFuZHJvaWQvdGV4dC9TcGFubmFibGU7KUkiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5pdGlhbFNjcm9sbFkoTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3O0xhbmRyb2lkL3RleHQvU3Bhbm5hYmxlOylJIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVG91Y2hFdmVudChMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7TGFuZHJvaWQvdGV4dC9TcGFubmFibGU7TGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNjcm9sbFRvKExhbmRyb2lkL3dpZGdldC9UZXh0VmlldztMYW5kcm9pZC90ZXh0L0xheW91dDtJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L21ldGhvZC9UcmFuc2Zvcm1hdGlvbk1ldGhvZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNmb3JtYXRpb24oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvdmlldy9WaWV3OylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZvY3VzQ2hhbmdlZChMYW5kcm9pZC92aWV3L1ZpZXc7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7WklMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0Fic29sdXRlU2l6ZVNwYW4iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL01ldHJpY0FmZmVjdGluZ1NwYW4iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L1BhcmNlbGFibGVTcGFuIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSVopViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpcCgpWiIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaXplKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0FsaWdubWVudFNwYW4iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvUGFyYWdyYXBoU3R5bGUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGlnbm1lbnQoKUxhbmRyb2lkL3RleHQvTGF5b3V0JEFsaWdubWVudDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvQWxpZ25tZW50U3BhbiRTdGFuZGFyZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9QYXJjZWxhYmxlU3BhbiIgc2luY2U9IjMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0FsaWdubWVudFNwYW4iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC90ZXh0L0xheW91dCRBbGlnbm1lbnQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvQmFja2dyb3VuZENvbG9yU3BhbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvQ2hhcmFjdGVyU3R5bGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L1BhcmNlbGFibGVTcGFuIiBzaW5jZT0iMyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvVXBkYXRlQXBwZWFyYW5jZSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYWNrZ3JvdW5kQ29sb3IoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvQnVsbGV0U3BhbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9QYXJjZWxhYmxlU3BhbiIgc2luY2U9IjMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0xlYWRpbmdNYXJnaW5TcGFuIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSSlWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1bGxldFJhZGl1cygpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sb3IoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdhcFdpZHRoKClJIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQU5EQVJEX0dBUF9XSURUSCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9DaGFyYWN0ZXJTdHlsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5kZXJseWluZygpTGFuZHJvaWQvdGV4dC9zdHlsZS9DaGFyYWN0ZXJTdHlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVEcmF3U3RhdGUoTGFuZHJvaWQvdGV4dC9UZXh0UGFpbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cmFwKExhbmRyb2lkL3RleHQvc3R5bGUvQ2hhcmFjdGVyU3R5bGU7KUxhbmRyb2lkL3RleHQvc3R5bGUvQ2hhcmFjdGVyU3R5bGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0NsaWNrYWJsZVNwYW4iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0NoYXJhY3RlclN0eWxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9VcGRhdGVBcHBlYXJhbmNlIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2xpY2soTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0RyYXdhYmxlTWFyZ2luU3BhbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9MZWFkaW5nTWFyZ2luU3BhbiIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvTGluZUhlaWdodFNwYW4iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7SSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0R5bmFtaWNEcmF3YWJsZVNwYW4iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1JlcGxhY2VtZW50U3BhbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJhd2FibGUoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZlcnRpY2FsQWxpZ25tZW50KClJIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQUxJR05fQkFTRUxJTkUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTElHTl9CT1RUT00iIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJtVmVydGljYWxBbGlnbm1lbnQiIHNpbmNlPSIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0Vhc3lFZGl0U3BhbiIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvUGFyY2VsYWJsZVNwYW4iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQ7KVYiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfVEVYVF9DSEFOR0VEX1RZUEUiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9ERUxFVEVEIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFRfTU9ESUZJRUQiIHNpbmNlPSIxOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9Gb3JlZ3JvdW5kQ29sb3JTcGFuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9DaGFyYWN0ZXJTdHlsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvUGFyY2VsYWJsZVNwYW4iIHNpbmNlPSIzIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9VcGRhdGVBcHBlYXJhbmNlIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcmVncm91bmRDb2xvcigpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9JY29uTWFyZ2luU3BhbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9MZWFkaW5nTWFyZ2luU3BhbiIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvTGluZUhlaWdodFNwYW4iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvSW1hZ2VTcGFuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9EeW5hbWljRHJhd2FibGVTcGFuIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lJKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7SSlWIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvbmV0L1VyaTtJKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0kpViIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlO0kpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7TGphdmEvbGFuZy9TdHJpbmc7SSlWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvdXJjZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0xlYWRpbmdNYXJnaW5TcGFuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1BhcmFncmFwaFN0eWxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd0xlYWRpbmdNYXJnaW4oTGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzO0xhbmRyb2lkL2dyYXBoaWNzL1BhaW50O0lJSUlJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUlaTGFuZHJvaWQvdGV4dC9MYXlvdXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZWFkaW5nTWFyZ2luKFopSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9MZWFkaW5nTWFyZ2luU3BhbiRMZWFkaW5nTWFyZ2luU3BhbjIiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvTGVhZGluZ01hcmdpblNwYW4iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1dyYXBUb2dldGhlclNwYW4iLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZWFkaW5nTWFyZ2luTGluZUNvdW50KClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0xlYWRpbmdNYXJnaW5TcGFuJFN0YW5kYXJkIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L1BhcmNlbGFibGVTcGFuIiBzaW5jZT0iMyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvTGVhZGluZ01hcmdpblNwYW4iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9MaW5lQmFja2dyb3VuZFNwYW4iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvUGFyYWdyYXBoU3R5bGUiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3QmFja2dyb3VuZChMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7TGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7SUlJSUlMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9MaW5lSGVpZ2h0U3BhbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9QYXJhZ3JhcGhTdHlsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvV3JhcFRvZ2V0aGVyU3BhbiIvPgotCQk8bWV0aG9kIG5hbWU9ImNob29zZUhlaWdodChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSUlJTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQkRm9udE1ldHJpY3NJbnQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvTGluZUhlaWdodFNwYW4kV2l0aERlbnNpdHkiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvTGluZUhlaWdodFNwYW4iLz4KLQkJPG1ldGhvZCBuYW1lPSJjaG9vc2VIZWlnaHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUlJSUxhbmRyb2lkL2dyYXBoaWNzL1BhaW50JEZvbnRNZXRyaWNzSW50O0xhbmRyb2lkL3RleHQvVGV4dFBhaW50OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0xvY2FsZVNwYW4iIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9NZXRyaWNBZmZlY3RpbmdTcGFuIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9QYXJjZWxhYmxlU3BhbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9Mb2NhbGVMaXN0OylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxlKClMamF2YS91dGlsL0xvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbGVzKClMYW5kcm9pZC9vcy9Mb2NhbGVMaXN0OyIgc2luY2U9IjI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL01hc2tGaWx0ZXJTcGFuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9DaGFyYWN0ZXJTdHlsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvVXBkYXRlQXBwZWFyYW5jZSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvTWFza0ZpbHRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hc2tGaWx0ZXIoKUxhbmRyb2lkL2dyYXBoaWNzL01hc2tGaWx0ZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL01ldHJpY0FmZmVjdGluZ1NwYW4iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0NoYXJhY3RlclN0eWxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9VcGRhdGVMYXlvdXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVbmRlcmx5aW5nKClMYW5kcm9pZC90ZXh0L3N0eWxlL01ldHJpY0FmZmVjdGluZ1NwYW47Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlTWVhc3VyZVN0YXRlKExhbmRyb2lkL3RleHQvVGV4dFBhaW50OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1BhcmFncmFwaFN0eWxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvUXVvdGVTcGFuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L1BhcmNlbGFibGVTcGFuIiBzaW5jZT0iMyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvTGVhZGluZ01hcmdpblNwYW4iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSSlWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2FwV2lkdGgoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmlwZVdpZHRoKClJIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQU5EQVJEX0NPTE9SIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQU5EQVJEX0dBUF9XSURUSF9QWCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFOREFSRF9TVFJJUEVfV0lEVEhfUFgiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9SYXN0ZXJpemVyU3BhbiIgc2luY2U9IjEiIHJlbW92ZWQ9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0NoYXJhY3RlclN0eWxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9VcGRhdGVBcHBlYXJhbmNlIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9SYXN0ZXJpemVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmFzdGVyaXplcigpTGFuZHJvaWQvZ3JhcGhpY3MvUmFzdGVyaXplcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvUmVsYXRpdmVTaXplU3BhbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvTWV0cmljQWZmZWN0aW5nU3BhbiIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvUGFyY2VsYWJsZVNwYW4iIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2l6ZUNoYW5nZSgpRiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9SZXBsYWNlbWVudFNwYW4iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL01ldHJpY0FmZmVjdGluZ1NwYW4iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3KExhbmRyb2lkL2dyYXBoaWNzL0NhbnZhcztMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSUZJSUlMYW5kcm9pZC9ncmFwaGljcy9QYWludDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpemUoTGFuZHJvaWQvZ3JhcGhpY3MvUGFpbnQ7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUlMYW5kcm9pZC9ncmFwaGljcy9QYWludCRGb250TWV0cmljc0ludDspSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9TY2FsZVhTcGFuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9NZXRyaWNBZmZlY3RpbmdTcGFuIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9QYXJjZWxhYmxlU3BhbiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2FsZVgoKUYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvU3RyaWtldGhyb3VnaFNwYW4iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0NoYXJhY3RlclN0eWxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9QYXJjZWxhYmxlU3BhbiIgc2luY2U9IjMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1VwZGF0ZUFwcGVhcmFuY2UiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvU3R5bGVTcGFuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9NZXRyaWNBZmZlY3RpbmdTcGFuIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9QYXJjZWxhYmxlU3BhbiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHlsZSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9TdWJzY3JpcHRTcGFuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9NZXRyaWNBZmZlY3RpbmdTcGFuIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9QYXJjZWxhYmxlU3BhbiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9TdWdnZXN0aW9uU3BhbiIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0NoYXJhY3RlclN0eWxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9QYXJjZWxhYmxlU3BhbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvdXRpbC9Mb2NhbGU7W0xqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL0NsYXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtbTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xvY2FsZTtbTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxhZ3MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbGVPYmplY3QoKUxqYXZhL3V0aWwvTG9jYWxlOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VnZ2VzdGlvbnMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGbGFncyhJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TVUdHRVNUSU9OX1BJQ0tFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19BVVRPX0NPUlJFQ1RJT04iIHNpbmNlPSIxNSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19FQVNZX0NPUlJFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfTUlTU1BFTExFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1VHR0VTVElPTlNfTUFYX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNVR0dFU1RJT05fU1BBTl9QSUNLRURfQUZURVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNVR0dFU1RJT05fU1BBTl9QSUNLRURfQkVGT1JFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVUdHRVNUSU9OX1NQQU5fUElDS0VEX0hBU0hDT0RFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1N1cGVyc2NyaXB0U3BhbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvTWV0cmljQWZmZWN0aW5nU3BhbiIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvUGFyY2VsYWJsZVNwYW4iIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvVGFiU3RvcFNwYW4iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvUGFyYWdyYXBoU3R5bGUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWJTdG9wKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1RhYlN0b3BTcGFuJFN0YW5kYXJkIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1RhYlN0b3BTcGFuIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UZXh0QXBwZWFyYW5jZVNwYW4iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL01ldHJpY0FmZmVjdGluZ1NwYW4iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L1BhcmNlbGFibGVTcGFuIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SUlMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDtMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZhbWlseSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGlua1RleHRDb2xvcigpTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dENvbG9yKClMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0U2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRTdHlsZSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9QYXJjZWxhYmxlU3BhbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvUGVyc2lzdGFibGVCdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcmdzKClMYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkFOSU1BQ1lfQU5JTUFURSIvPgotCQk8ZmllbGQgbmFtZT0iQU5JTUFDWV9JTkFOSU1BVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkFSR19BTklNQUNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfQ0FTRSIvPgotCQk8ZmllbGQgbmFtZT0iQVJHX0NPVU5UUllfQ09ERSIvPgotCQk8ZmllbGQgbmFtZT0iQVJHX0NVUlJFTkNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfREVOT01JTkFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkFSR19ESUdJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkFSR19ET01BSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkFSR19FWFRFTlNJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkFSR19GUkFDVElPTkFMX1BBUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkFSR19GUkFHTUVOVF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iQVJHX0dFTkRFUiIvPgotCQk8ZmllbGQgbmFtZT0iQVJHX0hPVVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfSU5URUdFUl9QQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfTUlOVVRFUyIvPgotCQk8ZmllbGQgbmFtZT0iQVJHX01PTlRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfTVVMVElQTElDSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfTlVNQkVSX1BBUlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfTlVNRVJBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfUEFTU1dPUkQiLz4KLQkJPGZpZWxkIG5hbWU9IkFSR19QQVRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfUE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iQVJHX1BST1RPQ09MIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfUVVBTlRJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkFSR19RVUVSWV9TVFJJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkFSR19URVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfVU5JVCIvPgotCQk8ZmllbGQgbmFtZT0iQVJHX1VTRVJOQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfVkVSQkFUSU0iLz4KLQkJPGZpZWxkIG5hbWU9IkFSR19XRUVLREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdfWUVBUiIvPgotCQk8ZmllbGQgbmFtZT0iQ0FTRV9BQkxBVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FTRV9BQ0NVU0FUSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVNFX0RBVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FTRV9HRU5JVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FTRV9JTlNUUlVNRU5UQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkNBU0VfTE9DQVRJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBU0VfTk9NSU5BVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FTRV9WT0NBVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iR0VOREVSX0ZFTUFMRSIvPgotCQk8ZmllbGQgbmFtZT0iR0VOREVSX01BTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdFTkRFUl9ORVVUUkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05USF9BUFJJTCIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEhfQVVHVVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05USF9ERUNFTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEhfRkVCUlVBUlkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTlRIX0pBTlVBUlkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTlRIX0pVTFkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTlRIX0pVTkUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTlRIX01BUkNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05USF9NQVkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTlRIX05PVkVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05USF9PQ1RPQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05USF9TRVBURU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1VTFRJUExJQ0lUWV9EVUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJNVUxUSVBMSUNJVFlfUExVUkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJNVUxUSVBMSUNJVFlfU0lOR0xFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0NBUkRJTkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfREVDSU1BTCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9ESUdJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRUxFQ1RST05JQyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9GUkFDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9NRUFTVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX01PTkVZIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX09SRElOQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVEVMRVBIT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RFWFQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9WRVJCQVRJTSIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS0RBWV9GUklEQVkiLz4KLQkJPGZpZWxkIG5hbWU9IldFRUtEQVlfTU9OREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUVLREFZX1NBVFVSREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUVLREFZX1NVTkRBWSIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS0RBWV9USFVSU0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS0RBWV9UVUVTREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUVLREFZX1dFRE5FU0RBWSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJEJ1aWxkZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludEFyZ3VtZW50KExqYXZhL2xhbmcvU3RyaW5nO0kpTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9uZ0FyZ3VtZW50KExqYXZhL2xhbmcvU3RyaW5nO0opTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RyaW5nQXJndW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJENhcmRpbmFsQnVpbGRlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kU2VtaW90aWNDbGFzc0J1aWxkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TnVtYmVyKEopTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJENhcmRpbmFsQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROdW1iZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRDYXJkaW5hbEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kRGF0ZUJ1aWxkZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJFNlbWlvdGljQ2xhc3NCdWlsZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvSW50ZWdlcjtMamF2YS9sYW5nL0ludGVnZXI7TGphdmEvbGFuZy9JbnRlZ2VyO0xqYXZhL2xhbmcvSW50ZWdlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERheShJKUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiREYXRlQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNb250aChJKUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiREYXRlQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXZWVrZGF5KEkpTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJERhdGVCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFllYXIoSSlMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kRGF0ZUJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kRGVjaW1hbEJ1aWxkZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJFNlbWlvdGljQ2xhc3NCdWlsZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KERJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXJndW1lbnRzRnJvbURvdWJsZShESUkpTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJERlY2ltYWxCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZyYWN0aW9uYWxQYXJ0KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kRGVjaW1hbEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZWdlclBhcnQoSilMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kRGVjaW1hbEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZWdlclBhcnQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiREZWNpbWFsQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiREaWdpdHNCdWlsZGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRTZW1pb3RpY0NsYXNzQnVpbGRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpZ2l0cyhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJERpZ2l0c0J1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kRWxlY3Ryb25pY0J1aWxkZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJFNlbWlvdGljQ2xhc3NCdWlsZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RG9tYWluKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kRWxlY3Ryb25pY0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW1haWxBcmd1bWVudHMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRFbGVjdHJvbmljQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGcmFnbWVudElkKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kRWxlY3Ryb25pY0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFzc3dvcmQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRFbGVjdHJvbmljQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXRoKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kRWxlY3Ryb25pY0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9ydChJKUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRFbGVjdHJvbmljQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm90b2NvbChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJEVsZWN0cm9uaWNCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFF1ZXJ5U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kRWxlY3Ryb25pY0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXNlcm5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRFbGVjdHJvbmljQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRGcmFjdGlvbkJ1aWxkZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJFNlbWlvdGljQ2xhc3NCdWlsZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpKSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVub21pbmF0b3IoSilMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kRnJhY3Rpb25CdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlbm9taW5hdG9yKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kRnJhY3Rpb25CdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludGVnZXJQYXJ0KEopTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJEZyYWN0aW9uQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlZ2VyUGFydChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJEZyYWN0aW9uQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROdW1lcmF0b3IoSilMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kRnJhY3Rpb25CdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE51bWVyYXRvcihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJEZyYWN0aW9uQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRNZWFzdXJlQnVpbGRlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kU2VtaW90aWNDbGFzc0J1aWxkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZW5vbWluYXRvcihKKUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRNZWFzdXJlQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZW5vbWluYXRvcihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJE1lYXN1cmVCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZyYWN0aW9uYWxQYXJ0KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kTWVhc3VyZUJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZWdlclBhcnQoSilMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kTWVhc3VyZUJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZWdlclBhcnQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRNZWFzdXJlQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROdW1iZXIoSilMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kTWVhc3VyZUJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TnVtYmVyKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kTWVhc3VyZUJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TnVtZXJhdG9yKEopTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJE1lYXN1cmVCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE51bWVyYXRvcihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJE1lYXN1cmVCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVuaXQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRNZWFzdXJlQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRNb25leUJ1aWxkZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJFNlbWlvdGljQ2xhc3NCdWlsZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VycmVuY3koTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRNb25leUJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RnJhY3Rpb25hbFBhcnQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRNb25leUJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZWdlclBhcnQoSilMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kTW9uZXlCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludGVnZXJQYXJ0KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kTW9uZXlCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFF1YW50aXR5KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kTW9uZXlCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJE9yZGluYWxCdWlsZGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRTZW1pb3RpY0NsYXNzQnVpbGRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROdW1iZXIoSilMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kT3JkaW5hbEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TnVtYmVyKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kT3JkaW5hbEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kU2VtaW90aWNDbGFzc0J1aWxkZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJEJ1aWxkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbmltYWN5KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kU2VtaW90aWNDbGFzc0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FzZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJFNlbWlvdGljQ2xhc3NCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdlbmRlcihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJFNlbWlvdGljQ2xhc3NCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE11bHRpcGxpY2l0eShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJFNlbWlvdGljQ2xhc3NCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJFRlbGVwaG9uZUJ1aWxkZXIiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJFNlbWlvdGljQ2xhc3NCdWlsZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q291bnRyeUNvZGUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRUZWxlcGhvbmVCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4dGVuc2lvbihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJFRlbGVwaG9uZUJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TnVtYmVyUGFydHMoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRUZWxlcGhvbmVCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJFRleHRCdWlsZGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRTZW1pb3RpY0NsYXNzQnVpbGRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRUZXh0QnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRUaW1lQnVpbGRlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kU2VtaW90aWNDbGFzc0J1aWxkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhvdXJzKEkpTGFuZHJvaWQvdGV4dC9zdHlsZS9UdHNTcGFuJFRpbWVCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbnV0ZXMoSSlMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kVGltZUJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kVmVyYmF0aW1CdWlsZGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvVHRzU3BhbiRTZW1pb3RpY0NsYXNzQnVpbGRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZlcmJhdGltKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90ZXh0L3N0eWxlL1R0c1NwYW4kVmVyYmF0aW1CdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9UeXBlZmFjZVNwYW4iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL01ldHJpY0FmZmVjdGluZ1NwYW4iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L1BhcmNlbGFibGVTcGFuIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZTspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGYW1pbHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGVmYWNlKClMYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZTsiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9VUkxTcGFuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9DbGlja2FibGVTcGFuIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9QYXJjZWxhYmxlU3BhbiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVSTCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1VuZGVybGluZVNwYW4iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL0NoYXJhY3RlclN0eWxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9QYXJjZWxhYmxlU3BhbiIgc2luY2U9IjMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1VwZGF0ZUFwcGVhcmFuY2UiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvc3R5bGUvVXBkYXRlQXBwZWFyYW5jZSIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1VwZGF0ZUxheW91dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9VcGRhdGVBcHBlYXJhbmNlIiBzaW5jZT0iMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9XcmFwVG9nZXRoZXJTcGFuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC90ZXh0L3N0eWxlL1BhcmFncmFwaFN0eWxlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3V0aWwvTGlua2lmeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTGlua3MoTGFuZHJvaWQvdGV4dC9TcGFubmFibGU7SSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTGlua3MoTGFuZHJvaWQvdGV4dC9TcGFubmFibGU7TGphdmEvdXRpbC9yZWdleC9QYXR0ZXJuO0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTGlua3MoTGFuZHJvaWQvdGV4dC9TcGFubmFibGU7TGphdmEvdXRpbC9yZWdleC9QYXR0ZXJuO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL3RleHQvdXRpbC9MaW5raWZ5JE1hdGNoRmlsdGVyO0xhbmRyb2lkL3RleHQvdXRpbC9MaW5raWZ5JFRyYW5zZm9ybUZpbHRlcjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZExpbmtzKExhbmRyb2lkL3RleHQvU3Bhbm5hYmxlO0xqYXZhL3V0aWwvcmVnZXgvUGF0dGVybjtMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvdGV4dC91dGlsL0xpbmtpZnkkTWF0Y2hGaWx0ZXI7TGFuZHJvaWQvdGV4dC91dGlsL0xpbmtpZnkkVHJhbnNmb3JtRmlsdGVyOylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRMaW5rcyhMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7SSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTGlua3MoTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3O0xqYXZhL3V0aWwvcmVnZXgvUGF0dGVybjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZExpbmtzKExhbmRyb2lkL3dpZGdldC9UZXh0VmlldztMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvdGV4dC91dGlsL0xpbmtpZnkkTWF0Y2hGaWx0ZXI7TGFuZHJvaWQvdGV4dC91dGlsL0xpbmtpZnkkVHJhbnNmb3JtRmlsdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTGlua3MoTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3O0xqYXZhL3V0aWwvcmVnZXgvUGF0dGVybjtMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvdGV4dC91dGlsL0xpbmtpZnkkTWF0Y2hGaWx0ZXI7TGFuZHJvaWQvdGV4dC91dGlsL0xpbmtpZnkkVHJhbnNmb3JtRmlsdGVyOylWIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFMTCIvPgotCQk8ZmllbGQgbmFtZT0iRU1BSUxfQUREUkVTU0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVBfQUREUkVTU0VTIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVfTlVNQkVSUyIvPgotCQk8ZmllbGQgbmFtZT0iV0VCX1VSTFMiLz4KLQkJPGZpZWxkIG5hbWU9InNQaG9uZU51bWJlck1hdGNoRmlsdGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJzUGhvbmVOdW1iZXJUcmFuc2Zvcm1GaWx0ZXIiLz4KLQkJPGZpZWxkIG5hbWU9InNVcmxNYXRjaEZpbHRlciIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdGV4dC91dGlsL0xpbmtpZnkkTWF0Y2hGaWx0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdE1hdGNoKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lJKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RleHQvdXRpbC9MaW5raWZ5JFRyYW5zZm9ybUZpbHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNmb3JtVXJsKExqYXZhL3V0aWwvcmVnZXgvTWF0Y2hlcjtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3V0aWwvUmZjODIyVG9rZW4iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkZHJlc3MoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbW1lbnQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InF1b3RlQ29tbWVudChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVvdGVOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdW90ZU5hbWVJZk5lY2Vzc2FyeShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWRkcmVzcyhMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYW1lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90ZXh0L3V0aWwvUmZjODIyVG9rZW5pemVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvTXVsdGlBdXRvQ29tcGxldGVUZXh0VmlldyRUb2tlbml6ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b2tlbml6ZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspW0xhbmRyb2lkL3RleHQvdXRpbC9SZmM4MjJUb2tlbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b2tlbml6ZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS91dGlsL0NvbGxlY3Rpb247KVYiIHNpbmNlPSI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL0FyY01vdGlvbiIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL1BhdGhNb3Rpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4aW11bUFuZ2xlKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluaW11bUhvcml6b250YWxBbmdsZSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbmltdW1WZXJ0aWNhbEFuZ2xlKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4aW11bUFuZ2xlKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbmltdW1Ib3Jpem9udGFsQW5nbGUoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWluaW11bVZlcnRpY2FsQW5nbGUoRilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL0F1dG9UcmFuc2l0aW9uIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvblNldCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9DaGFuZ2VCb3VuZHMiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzaXplQ2xpcCgpWiIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVwYXJlbnQoWilWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc2l6ZUNsaXAoWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL0NoYW5nZUNsaXBCb3VuZHMiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9DaGFuZ2VJbWFnZVRyYW5zZm9ybSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL0NoYW5nZVNjcm9sbCIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL0NoYW5nZVRyYW5zZm9ybSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVwYXJlbnQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXBhcmVudFdpdGhPdmVybGF5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVwYXJlbnQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVwYXJlbnRXaXRoT3ZlcmxheShaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RyYW5zaXRpb24vQ2lyY3VsYXJQcm9wYWdhdGlvbiIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL1Zpc2liaWxpdHlQcm9wYWdhdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3BhZ2F0aW9uU3BlZWQoRilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL0V4cGxvZGUiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9WaXNpYmlsaXR5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9GYWRlIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RyYW5zaXRpb24vVmlzaWJpbGl0eSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IklOIi8+Ci0JCTxmaWVsZCBuYW1lPSJPVVQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RyYW5zaXRpb24vUGF0aE1vdGlvbiIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXRoKEZGRkYpTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RyYW5zaXRpb24vUGF0dGVyblBhdGhNb3Rpb24iIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9QYXRoTW90aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9QYXRoOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGF0dGVyblBhdGgoKUxhbmRyb2lkL2dyYXBoaWNzL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGF0dGVyblBhdGgoTGFuZHJvaWQvZ3JhcGhpY3MvUGF0aDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9TY2VuZSIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDtMYW5kcm9pZC92aWV3L1ZpZXc7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDtMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDspViIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbnRlcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImV4aXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2VuZUZvckxheW91dChMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDtJTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC90cmFuc2l0aW9uL1NjZW5lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjZW5lUm9vdCgpTGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW50ZXJBY3Rpb24oTGphdmEvbGFuZy9SdW5uYWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4aXRBY3Rpb24oTGphdmEvbGFuZy9SdW5uYWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9TaWRlUHJvcGFnYXRpb24iIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9WaXNpYmlsaXR5UHJvcGFnYXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9wYWdhdGlvblNwZWVkKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNpZGUoSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL1NsaWRlIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RyYW5zaXRpb24vVmlzaWJpbGl0eSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2xpZGVFZGdlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2xpZGVFZGdlKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRMaXN0ZW5lcihMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb24kVHJhbnNpdGlvbkxpc3RlbmVyOylMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGFyZ2V0KEkpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRhcmdldChMYW5kcm9pZC92aWV3L1ZpZXc7KUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRUYXJnZXQoTGphdmEvbGFuZy9DbGFzczspTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGFyZ2V0KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5SZW1vdmVWaWV3cygpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FwdHVyZUVuZFZhbHVlcyhMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25WYWx1ZXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYXB0dXJlU3RhcnRWYWx1ZXMoTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uVmFsdWVzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmUoKUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVBbmltYXRvcihMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDtMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25WYWx1ZXM7TGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uVmFsdWVzOylMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhjbHVkZUNoaWxkcmVuKElaKUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGNsdWRlQ2hpbGRyZW4oTGFuZHJvaWQvdmlldy9WaWV3O1opTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4Y2x1ZGVDaGlsZHJlbihMamF2YS9sYW5nL0NsYXNzO1opTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4Y2x1ZGVUYXJnZXQoSVopTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4Y2x1ZGVUYXJnZXQoTGFuZHJvaWQvdmlldy9WaWV3O1opTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4Y2x1ZGVUYXJnZXQoTGphdmEvbGFuZy9DbGFzcztaKUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGNsdWRlVGFyZ2V0KExqYXZhL2xhbmcvU3RyaW5nO1opTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHVyYXRpb24oKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcGljZW50ZXIoKUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcGljZW50ZXJDYWxsYmFjaygpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uJEVwaWNlbnRlckNhbGxiYWNrOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZXJwb2xhdG9yKClMYW5kcm9pZC9hbmltYXRpb24vVGltZUludGVycG9sYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXRoTW90aW9uKClMYW5kcm9pZC90cmFuc2l0aW9uL1BhdGhNb3Rpb247IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9wYWdhdGlvbigpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uUHJvcGFnYXRpb247IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydERlbGF5KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFyZ2V0SWRzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFyZ2V0TmFtZXMoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRhcmdldFR5cGVzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYXJnZXRzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNpdGlvblByb3BlcnRpZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFuc2l0aW9uVmFsdWVzKExhbmRyb2lkL3ZpZXcvVmlldztaKUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvblZhbHVlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RyYW5zaXRpb25SZXF1aXJlZChMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25WYWx1ZXM7TGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uVmFsdWVzOylaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVMaXN0ZW5lcihMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb24kVHJhbnNpdGlvbkxpc3RlbmVyOylMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlVGFyZ2V0KEkpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVRhcmdldChMYW5kcm9pZC92aWV3L1ZpZXc7KUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVUYXJnZXQoTGphdmEvbGFuZy9DbGFzczspTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlVGFyZ2V0KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREdXJhdGlvbihKKUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFcGljZW50ZXJDYWxsYmFjayhMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb24kRXBpY2VudGVyQ2FsbGJhY2s7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludGVycG9sYXRvcihMYW5kcm9pZC9hbmltYXRpb24vVGltZUludGVycG9sYXRvcjspTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1hdGNoT3JkZXIoW0kpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGF0aE1vdGlvbihMYW5kcm9pZC90cmFuc2l0aW9uL1BhdGhNb3Rpb247KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3BhZ2F0aW9uKExhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvblByb3BhZ2F0aW9uOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGFydERlbGF5KEopTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIvPgotCQk8ZmllbGQgbmFtZT0iTUFUQ0hfSUQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTUFUQ0hfSU5TVEFOQ0UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTUFUQ0hfSVRFTV9JRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRDSF9OQU1FIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbiRFcGljZW50ZXJDYWxsYmFjayIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2V0RXBpY2VudGVyKExhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjspTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbiRUcmFuc2l0aW9uTGlzdGVuZXIiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRyYW5zaXRpb25DYW5jZWwoTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UcmFuc2l0aW9uRW5kKExhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVHJhbnNpdGlvblBhdXNlKExhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVHJhbnNpdGlvblJlc3VtZShMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRyYW5zaXRpb25TdGFydChMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbkluZmxhdGVyIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb20oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25JbmZsYXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmZsYXRlVHJhbnNpdGlvbihJKUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmZsYXRlVHJhbnNpdGlvbk1hbmFnZXIoSUxhbmRyb2lkL3ZpZXcvVmlld0dyb3VwOylMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25NYW5hZ2VyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uTGlzdGVuZXJBZGFwdGVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uJFRyYW5zaXRpb25MaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uTWFuYWdlciIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJlZ2luRGVsYXllZFRyYW5zaXRpb24oTGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiZWdpbkRlbGF5ZWRUcmFuc2l0aW9uKExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwO0xhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZFRyYW5zaXRpb25zKExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbyhMYW5kcm9pZC90cmFuc2l0aW9uL1NjZW5lOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ28oTGFuZHJvaWQvdHJhbnNpdGlvbi9TY2VuZTtMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUcmFuc2l0aW9uKExhbmRyb2lkL3RyYW5zaXRpb24vU2NlbmU7TGFuZHJvaWQvdHJhbnNpdGlvbi9TY2VuZTtMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUcmFuc2l0aW9uKExhbmRyb2lkL3RyYW5zaXRpb24vU2NlbmU7TGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNpdGlvblRvKExhbmRyb2lkL3RyYW5zaXRpb24vU2NlbmU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvblByb3BhZ2F0aW9uIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FwdHVyZVZhbHVlcyhMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25WYWx1ZXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9wYWdhdGlvblByb3BlcnRpZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydERlbGF5KExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwO0xhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjtMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25WYWx1ZXM7TGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uVmFsdWVzOylKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25TZXQiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTGlzdGVuZXIoTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uJFRyYW5zaXRpb25MaXN0ZW5lcjspTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRhcmdldChJKUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvblNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRUYXJnZXQoTGFuZHJvaWQvdmlldy9WaWV3OylMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGFyZ2V0KExqYXZhL2xhbmcvQ2xhc3M7KUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvblNldDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRhcmdldChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uU2V0OyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVHJhbnNpdGlvbihMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247KUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvblNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yZGVyaW5nKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNpdGlvbkF0KEkpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNpdGlvbkNvdW50KClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVMaXN0ZW5lcihMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb24kVHJhbnNpdGlvbkxpc3RlbmVyOylMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlVGFyZ2V0KEkpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVRhcmdldChMYW5kcm9pZC92aWV3L1ZpZXc7KUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvblNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVUYXJnZXQoTGphdmEvbGFuZy9DbGFzczspTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uU2V0OyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlVGFyZ2V0KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25TZXQ7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVUcmFuc2l0aW9uKExhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjspTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldER1cmF0aW9uKEopTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludGVycG9sYXRvcihMYW5kcm9pZC9hbmltYXRpb24vVGltZUludGVycG9sYXRvcjspTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9yZGVyaW5nKEkpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXJ0RGVsYXkoSilMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25TZXQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUkRFUklOR19TRVFVRU5USUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUkRFUklOR19UT0dFVEhFUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uVmFsdWVzIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2YWx1ZXMiLz4KLQkJPGZpZWxkIG5hbWU9InZpZXciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RyYW5zaXRpb24vVmlzaWJpbGl0eSIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2RlKClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Zpc2libGUoTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uVmFsdWVzOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BcHBlYXIoTGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7TGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uVmFsdWVzO0lMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25WYWx1ZXM7SSlMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BcHBlYXIoTGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7TGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvblZhbHVlcztMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25WYWx1ZXM7KUxhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGlzYXBwZWFyKExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwO0xhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvblZhbHVlcztJTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uVmFsdWVzO0kpTGFuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGlzYXBwZWFyKExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwO0xhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25WYWx1ZXM7TGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uVmFsdWVzOylMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3I7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNb2RlKEkpViIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX0lOIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfT1VUIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3RyYW5zaXRpb24vVmlzaWJpbGl0eVByb3BhZ2F0aW9uIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvblByb3BhZ2F0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vmlld1Zpc2liaWxpdHkoTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uVmFsdWVzOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vmlld1goTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uVmFsdWVzOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vmlld1koTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uVmFsdWVzOylJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL0FuZHJvaWRFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0V4Y2VwdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjExIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL0FuZHJvaWRSdW50aW1lRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvRXhjZXB0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iMTEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvQXJyYXlNYXAiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL01hcCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdXRpbC9BcnJheU1hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zQWxsKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuc3VyZUNhcGFjaXR5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImluZGV4T2ZLZXkoTGphdmEvbGFuZy9PYmplY3Q7KUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImtleUF0KEkpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0QWxsKExhbmRyb2lkL3V0aWwvQXJyYXlNYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBbGwoTGphdmEvdXRpbC9Db2xsZWN0aW9uOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQXQoSSlMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXRhaW5BbGwoTGphdmEvdXRpbC9Db2xsZWN0aW9uOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFsdWVBdChJTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlQXQoSSlMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvQXJyYXlTZXQiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL0NvbGxlY3Rpb24iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL1NldCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdXRpbC9BcnJheVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFsbChMYW5kcm9pZC91dGlsL0FycmF5U2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5zdXJlQ2FwYWNpdHkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5kZXhPZihMamF2YS9sYW5nL09iamVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUFsbChMYW5kcm9pZC91dGlsL0FycmF5U2V0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQXQoSSlMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZUF0KEkpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL0F0b21pY0ZpbGUiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZhaWxXcml0ZShMamF2YS9pby9GaWxlT3V0cHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluaXNoV3JpdGUoTGphdmEvaW8vRmlsZU91dHB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhc2VGaWxlKClMamF2YS9pby9GaWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5SZWFkKClMamF2YS9pby9GaWxlSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEZ1bGx5KClbQiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0V3JpdGUoKUxqYXZhL2lvL0ZpbGVPdXRwdXRTdHJlYW07Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlQm9vbGVhblZhbHVlKElaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVCb29sZWFuVmFsdWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7WilaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVGbG9hdFZhbHVlKElGKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVGbG9hdFZhbHVlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0YpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZUludFZhbHVlKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVJbnRWYWx1ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVMaXN0VmFsdWUoSVtMamF2YS9sYW5nL1N0cmluZztJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVMaXN0VmFsdWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZU5hbWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVOYW1lUmVzb3VyY2UoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlTmFtZXNwYWNlKEkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVSZXNvdXJjZVZhbHVlKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVSZXNvdXJjZVZhbHVlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZVVuc2lnbmVkSW50VmFsdWUoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZVVuc2lnbmVkSW50VmFsdWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlVmFsdWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVWYWx1ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xhc3NBdHRyaWJ1dGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkQXR0cmlidXRlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZEF0dHJpYnV0ZVJlc291cmNlVmFsdWUoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zaXRpb25EZXNjcmlwdGlvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3R5bGVBdHRyaWJ1dGUoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvQmFzZTY0IiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGUoTGphdmEvbGFuZy9TdHJpbmc7SSlbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29kZShbQkkpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGUoW0JJSUkpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmNvZGUoW0JJKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5jb2RlKFtCSUlJKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5jb2RlVG9TdHJpbmcoW0JJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuY29kZVRvU3RyaW5nKFtCSUlJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JMRiIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iTk9fQ0xPU0UiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX1BBRERJTkciLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX1dSQVAiLz4KLQkJPGZpZWxkIG5hbWU9IlVSTF9TQUZFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL0Jhc2U2NERhdGFFeGNlcHRpb24iIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSU9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvQmFzZTY0SW5wdXRTdHJlYW0iIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9GaWx0ZXJJbnB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTtJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvQmFzZTY0T3V0cHV0U3RyZWFtIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vRmlsdGVyT3V0cHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTtJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvQ29uZmlnIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUJVRyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkxPR0QiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0dWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iUFJPRklMRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFTEVBU0UiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL0RlYnVnVXRpbHMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT2JqZWN0U2VsZWN0ZWQoTGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvRGlzcGxheU1ldHJpY3MiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVxdWFscyhMYW5kcm9pZC91dGlsL0Rpc3BsYXlNZXRyaWNzOylaIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUbyhMYW5kcm9pZC91dGlsL0Rpc3BsYXlNZXRyaWNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VG9EZWZhdWx0cygpViIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV8yNjAiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV8yODAiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV8zMDAiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV8zNDAiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV8zNjAiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV80MDAiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV80MjAiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV80NDAiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV81NjAiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV9ERUZBVUxUIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV9ERVZJQ0VfU1RBQkxFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTlNJVFlfSElHSCIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTlNJVFlfTE9XIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV9NRURJVU0iIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERU5TSVRZX1RWIiBzaW5jZT0iMTMiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTlNJVFlfWEhJR0giIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERU5TSVRZX1hYSElHSCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERU5TSVRZX1hYWEhJR0giIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iZGVuc2l0eSIvPgotCQk8ZmllbGQgbmFtZT0iZGVuc2l0eURwaSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9ImhlaWdodFBpeGVscyIvPgotCQk8ZmllbGQgbmFtZT0ic2NhbGVkRGVuc2l0eSIvPgotCQk8ZmllbGQgbmFtZT0id2lkdGhQaXhlbHMiLz4KLQkJPGZpZWxkIG5hbWU9InhkcGkiLz4KLQkJPGZpZWxkIG5hbWU9InlkcGkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvRXZlbnRMb2ciIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRhZ0NvZGUoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWdOYW1lKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEV2ZW50cyhbSUxqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlRXZlbnQoSUYpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVFdmVudChJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVFdmVudChJSilJIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVFdmVudChJTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUV2ZW50KElbTGphdmEvbGFuZy9PYmplY3Q7KUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvRXZlbnRMb2ckRXZlbnQiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0IpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvY2Vzc0lkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFnKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGhyZWFkSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lTmFub3MoKUoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvRXZlbnRMb2dUYWdzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vQnVmZmVyZWRSZWFkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoSSlMYW5kcm9pZC91dGlsL0V2ZW50TG9nVGFncyREZXNjcmlwdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3V0aWwvRXZlbnRMb2dUYWdzJERlc2NyaXB0aW9uOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9FdmVudExvZ1RhZ3MkRGVzY3JpcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9Im1OYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJtVGFnIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL0Zsb2F0TWF0aCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNlaWwoRilGIiByZW1vdmVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcyhGKUYiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhwKEYpRiIgc2luY2U9IjE3IiByZW1vdmVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImZsb29yKEYpRiIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJoeXBvdChGRilGIiBzaW5jZT0iMTciIHJlbW92ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icG93KEZGKUYiIHNpbmNlPSIxNyIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaW4oRilGIiByZW1vdmVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNxcnQoRilGIiByZW1vdmVkPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9GbG9hdFByb3BlcnR5IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3V0aWwvUHJvcGVydHkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9GbG9hdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZhbHVlKExqYXZhL2xhbmcvT2JqZWN0O0YpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9IYWxmIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvTnVtYmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEQpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oUylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWJzKFMpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImNlaWwoUylTIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZShTUylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExhbmRyb2lkL3V0aWwvSGFsZjspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlTaWduKFNTKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoU1MpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImZsb29yKFMpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4cG9uZW50KFMpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpZ24oUylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2lnbmlmaWNhbmQoUylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ3JlYXRlcihTUylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ3JlYXRlckVxdWFscyhTUylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFsZlRvSW50Qml0cyhTKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYWxmVG9SYXdJbnRCaXRzKFMpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbGZUb1Nob3J0Qml0cyhTKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYWxmVmFsdWUoKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNoQ29kZShTKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRCaXRzVG9IYWxmKEkpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5maW5pdGUoUylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOYU4oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05hTihTKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05vcm1hbGl6ZWQoUylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGVzcyhTUylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGVzc0VxdWFscyhTUylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4KFNTKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW4oU1MpUyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlSGFsZihMamF2YS9sYW5nL1N0cmluZzspUyIvPgotCQk8bWV0aG9kIG5hbWU9InJvdW5kKFMpUyIvPgotCQk8bWV0aG9kIG5hbWU9InRvRmxvYXQoUylGIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9IYWxmKEYpUyIvPgotCQk8bWV0aG9kIG5hbWU9InRvSGV4U3RyaW5nKFMpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoUylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnVuYyhTKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKEYpTGFuZHJvaWQvdXRpbC9IYWxmOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3V0aWwvSGFsZjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKFMpTGFuZHJvaWQvdXRpbC9IYWxmOyIvPgotCQk8ZmllbGQgbmFtZT0iRVBTSUxPTiIvPgotCQk8ZmllbGQgbmFtZT0iTE9XRVNUX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfRVhQT05FTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iTUlOX0VYUE9ORU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fTk9STUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FR0FUSVZFX0lORklOSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJORUdBVElWRV9aRVJPIi8+Ci0JCTxmaWVsZCBuYW1lPSJOYU4iLz4KLQkJPGZpZWxkIG5hbWU9IlBPU0lUSVZFX0lORklOSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT1NJVElWRV9aRVJPIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSVpFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL0ludFByb3BlcnR5IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3V0aWwvUHJvcGVydHkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9JbnRlZ2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFsdWUoTGphdmEvbGFuZy9PYmplY3Q7SSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL0pzb25SZWFkZXIiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vUmVhZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmVnaW5BcnJheSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJlZ2luT2JqZWN0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5kQXJyYXkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRPYmplY3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNOZXh0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMZW5pZW50KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dEJvb2xlYW4oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0RG91YmxlKClEIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dEludCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRMb25nKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHROdWxsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dFN0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGVlaygpTGFuZHJvaWQvdXRpbC9Kc29uVG9rZW47Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGVuaWVudChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJza2lwVmFsdWUoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvSnNvblRva2VuIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3V0aWwvSnNvblRva2VuOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL3V0aWwvSnNvblRva2VuOyIvPgotCQk8ZmllbGQgbmFtZT0iQkVHSU5fQVJSQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkJFR0lOX09CSkVDVCIvPgotCQk8ZmllbGQgbmFtZT0iQk9PTEVBTiIvPgotCQk8ZmllbGQgbmFtZT0iRU5EX0FSUkFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRfRE9DVU1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVORF9PQkpFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VTEwiLz4KLQkJPGZpZWxkIG5hbWU9Ik5VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iU1RSSU5HIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL0pzb25Xcml0ZXIiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vV3JpdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmVnaW5BcnJheSgpTGFuZHJvaWQvdXRpbC9Kc29uV3JpdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJlZ2luT2JqZWN0KClMYW5kcm9pZC91dGlsL0pzb25Xcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5kQXJyYXkoKUxhbmRyb2lkL3V0aWwvSnNvbldyaXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRPYmplY3QoKUxhbmRyb2lkL3V0aWwvSnNvbldyaXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTGVuaWVudCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3V0aWwvSnNvbldyaXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJudWxsVmFsdWUoKUxhbmRyb2lkL3V0aWwvSnNvbldyaXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbmRlbnQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMZW5pZW50KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlKEQpTGFuZHJvaWQvdXRpbC9Kc29uV3JpdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlKEopTGFuZHJvaWQvdXRpbC9Kc29uV3JpdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlKExqYXZhL2xhbmcvTnVtYmVyOylMYW5kcm9pZC91dGlsL0pzb25Xcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3V0aWwvSnNvbldyaXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZShaKUxhbmRyb2lkL3V0aWwvSnNvbldyaXRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvTGF5b3V0RGlyZWN0aW9uIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTkhFUklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NBTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkxUUiIvPgotCQk8ZmllbGQgbmFtZT0iUlRMIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL0xvZyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YWNrVHJhY2VTdHJpbmcoTGphdmEvbGFuZy9UaHJvd2FibGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMb2dnYWJsZShMamF2YS9sYW5nL1N0cmluZztJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGxuKElMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9InYoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0idyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9IncoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0id3RmKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9Ind0ZihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspSSIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3dGYoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KUkiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBU1NFUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkRFQlVHIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iSU5GTyIvPgotCQk8ZmllbGQgbmFtZT0iVkVSQk9TRSIvPgotCQk8ZmllbGQgbmFtZT0iV0FSTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9Mb2dQcmludGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC91dGlsL1ByaW50ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL0xvbmdTcGFyc2VBcnJheSIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChKTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lKClMYW5kcm9pZC91dGlsL0xvbmdTcGFyc2VBcnJheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGUoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KEopTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KEpMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5kZXhPZktleShKKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmRleE9mVmFsdWUoTGphdmEvbGFuZy9PYmplY3Q7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJrZXlBdChJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoSkxqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUF0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZhbHVlQXQoSUxqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlQXQoSSlMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvTHJ1Q2FjaGUiIHNpbmNlPSIxMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImVudHJ5UmVtb3ZlZChaTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJldmljdEFsbCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImV2aWN0aW9uQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImhpdENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4U2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1pc3NDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0Q291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmUoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2l6ZShJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaXplT2YoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzbmFwc2hvdCgpTGphdmEvdXRpbC9NYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJpbVRvU2l6ZShJKVYiIHNpbmNlPSIxNyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9NYWxmb3JtZWRKc29uRXhjZXB0aW9uIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0lPRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL01vbnRoRGlzcGxheUhlbHBlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2x1bW5PZihJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXlBdChJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlnaXRzRm9yUm93KEkpW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaXJzdERheU9mTW9udGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb250aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE51bWJlck9mRGF5c0luTW9udGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPZmZzZXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3dPZihJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWVrU3RhcnREYXkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRZZWFyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXaXRoaW5DdXJyZW50TW9udGgoSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRNb250aCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InByZXZpb3VzTW9udGgoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvTXV0YWJsZUJvb2xlYW4iIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFopViIvPgotCQk8ZmllbGQgbmFtZT0idmFsdWUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvTXV0YWJsZUJ5dGUiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEIpViIvPgotCQk8ZmllbGQgbmFtZT0idmFsdWUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvTXV0YWJsZUNoYXIiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEMpViIvPgotCQk8ZmllbGQgbmFtZT0idmFsdWUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvTXV0YWJsZURvdWJsZSIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oRClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2YWx1ZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9NdXRhYmxlRmxvYXQiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEYpViIvPgotCQk8ZmllbGQgbmFtZT0idmFsdWUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvTXV0YWJsZUludCIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2YWx1ZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9NdXRhYmxlTG9uZyIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2YWx1ZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9NdXRhYmxlU2hvcnQiIHNpbmNlPSIyMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFMpViIvPgotCQk8ZmllbGQgbmFtZT0idmFsdWUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvTm9TdWNoUHJvcGVydHlFeGNlcHRpb24iIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL1BhaXIiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZShMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvdXRpbC9QYWlyOyIvPgotCQk8ZmllbGQgbmFtZT0iZmlyc3QiLz4KLQkJPGZpZWxkIG5hbWU9InNlY29uZCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9QYXR0ZXJucyIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29uY2F0R3JvdXBzKExqYXZhL3V0aWwvcmVnZXgvTWF0Y2hlcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlnaXRzQW5kUGx1c09ubHkoTGphdmEvdXRpbC9yZWdleC9NYXRjaGVyOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkRPTUFJTl9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTUFJTF9BRERSRVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHT09EX0lSSV9DSEFSIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iSVBfQUREUkVTUyIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRPUF9MRVZFTF9ET01BSU4iIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT1BfTEVWRUxfRE9NQUlOX1NUUiIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRPUF9MRVZFTF9ET01BSU5fU1RSX0ZPUl9XRUJfVVJMIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iV0VCX1VSTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9QcmludFN0cmVhbVByaW50ZXIiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3V0aWwvUHJpbnRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9QcmludFN0cmVhbTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9QcmludFdyaXRlclByaW50ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3V0aWwvUHJpbnRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9QcmludFdyaXRlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9QcmludGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGxuKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL1Byb3BlcnR5IiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUxqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZWFkT25seSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdXRpbC9Qcm9wZXJ0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvUmFuZ2UiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9Db21wYXJhYmxlO0xqYXZhL2xhbmcvQ29tcGFyYWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsYW1wKExqYXZhL2xhbmcvQ29tcGFyYWJsZTspTGphdmEvbGFuZy9Db21wYXJhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zKExhbmRyb2lkL3V0aWwvUmFuZ2U7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWlucyhMamF2YS9sYW5nL0NvbXBhcmFibGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoTGphdmEvbGFuZy9Db21wYXJhYmxlO0xqYXZhL2xhbmcvQ29tcGFyYWJsZTspTGFuZHJvaWQvdXRpbC9SYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHRlbmQoTGFuZHJvaWQvdXRpbC9SYW5nZTspTGFuZHJvaWQvdXRpbC9SYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHRlbmQoTGphdmEvbGFuZy9Db21wYXJhYmxlOylMYW5kcm9pZC91dGlsL1JhbmdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4dGVuZChMamF2YS9sYW5nL0NvbXBhcmFibGU7TGphdmEvbGFuZy9Db21wYXJhYmxlOylMYW5kcm9pZC91dGlsL1JhbmdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvd2VyKClMamF2YS9sYW5nL0NvbXBhcmFibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXBwZXIoKUxqYXZhL2xhbmcvQ29tcGFyYWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRlcnNlY3QoTGFuZHJvaWQvdXRpbC9SYW5nZTspTGFuZHJvaWQvdXRpbC9SYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRlcnNlY3QoTGphdmEvbGFuZy9Db21wYXJhYmxlO0xqYXZhL2xhbmcvQ29tcGFyYWJsZTspTGFuZHJvaWQvdXRpbC9SYW5nZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvUmF0aW9uYWwiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9OdW1iZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMYW5kcm9pZC91dGlsL1JhdGlvbmFsOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVub21pbmF0b3IoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1lcmF0b3IoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Zpbml0ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5maW5pdGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05hTigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzWmVybygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlUmF0aW9uYWwoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3V0aWwvUmF0aW9uYWw7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJORUdBVElWRV9JTkZJTklUWSIvPgotCQk8ZmllbGQgbmFtZT0iTmFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT1NJVElWRV9JTkZJTklUWSIvPgotCQk8ZmllbGQgbmFtZT0iWkVSTyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9TaXplIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlU2l6ZShMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdXRpbC9TaXplOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9TaXplRiIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGVpZ2h0KClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkdGgoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZVNpemVGKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC91dGlsL1NpemVGOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9TcGFyc2VBcnJheSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoSUxqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvdXRpbC9TcGFyc2VBcnJheTsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoSSlMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoSUxqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmRleE9mS2V5KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImluZGV4T2ZWYWx1ZShMamF2YS9sYW5nL09iamVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImtleUF0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChJTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQXQoSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBdFJhbmdlKElJKVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZhbHVlQXQoSUxqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlQXQoSSlMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvU3BhcnNlQm9vbGVhbkFycmF5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvdXRpbC9TcGFyc2VCb29sZWFuQXJyYXk7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChJWilaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5kZXhPZktleShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmRleE9mVmFsdWUoWilJIi8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5QXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBdChJKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZUF0KEkpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9TcGFyc2VJbnRBcnJheSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmUoKUxhbmRyb2lkL3V0aWwvU3BhcnNlSW50QXJyYXk7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5kZXhPZktleShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmRleE9mVmFsdWUoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5QXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBdChJKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlQXQoSSlJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL1NwYXJzZUxvbmdBcnJheSIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChJSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvdXRpbC9TcGFyc2VMb25nQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVsZXRlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoSUopSiIvPgotCQk8bWV0aG9kIG5hbWU9ImluZGV4T2ZLZXkoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5kZXhPZlZhbHVlKEopSSIvPgotCQk8bWV0aG9kIG5hbWU9ImtleUF0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChJSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQXQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlQXQoSSlKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL1N0YXRlU2V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKFtJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzV2lsZENhcmQoW0kpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXRlU2V0TWF0Y2hlcyhbSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXRlU2V0TWF0Y2hlcyhbSVtJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmltU3RhdGVTZXQoW0lJKVtJIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1RISU5HIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IldJTERfQ0FSRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9TdGF0c0xvZyIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZ0V2ZW50KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZ1N0YXJ0KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZ1N0b3AoSSlaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL1N0cmluZ0J1aWxkZXJQcmludGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC91dGlsL1ByaW50ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC91dGlsL1RpbWVGb3JtYXRFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3V0aWwvVGltZVV0aWxzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lWm9uZShJWkpMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9UaW1lWm9uZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lWm9uZURhdGFiYXNlVmVyc2lvbigpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9UaW1pbmdMb2dnZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFNwbGl0KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHVtcFRvTG9nKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9UeXBlZFZhbHVlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseURpbWVuc2lvbihJRkxhbmRyb2lkL3V0aWwvRGlzcGxheU1ldHJpY3M7KUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb2VyY2VUb1N0cmluZygpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29lcmNlVG9TdHJpbmcoSUkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGxleFRvRGltZW5zaW9uKElMYW5kcm9pZC91dGlsL0Rpc3BsYXlNZXRyaWNzOylGIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGxleFRvRGltZW5zaW9uTm9pc3koSUxhbmRyb2lkL3V0aWwvRGlzcGxheU1ldHJpY3M7KUYiIHJlbW92ZWQ9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGxleFRvRGltZW5zaW9uUGl4ZWxPZmZzZXQoSUxhbmRyb2lkL3V0aWwvRGlzcGxheU1ldHJpY3M7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wbGV4VG9EaW1lbnNpb25QaXhlbFNpemUoSUxhbmRyb2lkL3V0aWwvRGlzcGxheU1ldHJpY3M7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wbGV4VG9GbG9hdChJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wbGV4VG9GcmFjdGlvbihJRkYpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBsZXhVbml0KClJIiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaW1lbnNpb24oTGFuZHJvaWQvdXRpbC9EaXNwbGF5TWV0cmljczspRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsb2F0KClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJhY3Rpb24oRkYpRiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRvKExhbmRyb2lkL3V0aWwvVHlwZWRWYWx1ZTspViIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUExFWF9NQU5USVNTQV9NQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QTEVYX01BTlRJU1NBX1NISUZUIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QTEVYX1JBRElYXzBwMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBMRVhfUkFESVhfMTZwNyIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUExFWF9SQURJWF8yM3AwIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QTEVYX1JBRElYXzhwMTUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBMRVhfUkFESVhfTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUExFWF9SQURJWF9TSElGVCIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUExFWF9VTklUX0RJUCIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUExFWF9VTklUX0ZSQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QTEVYX1VOSVRfRlJBQ1RJT05fUEFSRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QTEVYX1VOSVRfSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBMRVhfVU5JVF9NQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QTEVYX1VOSVRfTU0iLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBMRVhfVU5JVF9QVCIvPgotCQk8ZmllbGQgbmFtZT0iQ09NUExFWF9VTklUX1BYIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01QTEVYX1VOSVRfU0hJRlQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBMRVhfVU5JVF9TUCIvPgotCQk8ZmllbGQgbmFtZT0iREFUQV9OVUxMX0VNUFRZIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEFfTlVMTF9VTkRFRklORUQiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV9ERUZBVUxUIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iREVOU0lUWV9OT05FIiBzaW5jZT0iNCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BVFRSSUJVVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRElNRU5TSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0ZJUlNUX0NPTE9SX0lOVCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9GSVJTVF9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRkxPQVQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRlJBQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSU5UX0JPT0xFQU4iLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSU5UX0NPTE9SX0FSR0I0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0lOVF9DT0xPUl9BUkdCOCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9JTlRfQ09MT1JfUkdCNCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9JTlRfQ09MT1JfUkdCOCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9JTlRfREVDIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0lOVF9IRVgiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTEFTVF9DT0xPUl9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTEFTVF9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTlVMTCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9SRUZFUkVOQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfU1RSSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJhc3NldENvb2tpZSIvPgotCQk8ZmllbGQgbmFtZT0iY2hhbmdpbmdDb25maWd1cmF0aW9ucyIvPgotCQk8ZmllbGQgbmFtZT0iZGF0YSIvPgotCQk8ZmllbGQgbmFtZT0iZGVuc2l0eSIgc2luY2U9IjQiLz4KLQkJPGZpZWxkIG5hbWU9InJlc291cmNlSWQiLz4KLQkJPGZpZWxkIG5hbWU9InN0cmluZyIvPgotCQk8ZmllbGQgbmFtZT0idHlwZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9YbWwiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzQXR0cmlidXRlU2V0KExvcmcveG1scHVsbC92MS9YbWxQdWxsUGFyc2VyOylMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kRW5jb2RpbmdCeU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3V0aWwvWG1sJEVuY29kaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1B1bGxQYXJzZXIoKUxvcmcveG1scHVsbC92MS9YbWxQdWxsUGFyc2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1NlcmlhbGl6ZXIoKUxvcmcveG1scHVsbC92MS9YbWxTZXJpYWxpemVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2lvL0lucHV0U3RyZWFtO0xhbmRyb2lkL3V0aWwvWG1sJEVuY29kaW5nO0xvcmcveG1sL3NheC9Db250ZW50SGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2lvL1JlYWRlcjtMb3JnL3htbC9zYXgvQ29udGVudEhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL1N0cmluZztMb3JnL3htbC9zYXgvQ29udGVudEhhbmRsZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfUkVMQVhFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdXRpbC9YbWwkRW5jb2RpbmciIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC91dGlsL1htbCRFbmNvZGluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC91dGlsL1htbCRFbmNvZGluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IklTT184ODU5XzEiLz4KLQkJPGZpZWxkIG5hbWU9IlVTX0FTQ0lJIi8+Ci0JCTxmaWVsZCBuYW1lPSJVVEZfMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlVURl84Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0Fic1NhdmVkU3RhdGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDtMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsYWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cGVyU3RhdGUoKUxhbmRyb2lkL29zL1BhcmNlbGFibGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTVBUWV9TVEFURSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9BY3Rpb25Nb2RlIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluaXNoKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VzdG9tVmlldygpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lbnUoKUxhbmRyb2lkL3ZpZXcvTWVudTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZW51SW5mbGF0ZXIoKUxhbmRyb2lkL3ZpZXcvTWVudUluZmxhdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YnRpdGxlKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWcoKUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGl0bGUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpdGxlT3B0aW9uYWxIaW50KClaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJoaWRlKEopViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW52YWxpZGF0ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImludmFsaWRhdGVDb250ZW50UmVjdCgpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUaXRsZU9wdGlvbmFsKClaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbldpbmRvd0ZvY3VzQ2hhbmdlZChaKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1c3RvbVZpZXcoTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VidGl0bGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VidGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUYWcoTGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpdGxlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpdGxlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGl0bGVPcHRpb25hbEhpbnQoWilWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUeXBlKEkpViIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX0hJREVfRFVSQVRJT04iIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9GTE9BVElORyIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1BSSU1BUlkiIHNpbmNlPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9BY3Rpb25Nb2RlJENhbGxiYWNrIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BY3Rpb25JdGVtQ2xpY2tlZChMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGU7TGFuZHJvaWQvdmlldy9NZW51SXRlbTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlQWN0aW9uTW9kZShMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGU7TGFuZHJvaWQvdmlldy9NZW51OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EZXN0cm95QWN0aW9uTW9kZShMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByZXBhcmVBY3Rpb25Nb2RlKExhbmRyb2lkL3ZpZXcvQWN0aW9uTW9kZTtMYW5kcm9pZC92aWV3L01lbnU7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvQWN0aW9uTW9kZSRDYWxsYmFjazIiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L0FjdGlvbk1vZGUkQ2FsbGJhY2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdldENvbnRlbnRSZWN0KExhbmRyb2lkL3ZpZXcvQWN0aW9uTW9kZTtMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9BY3Rpb25Qcm92aWRlciIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNTdWJNZW51KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWaXNpYmxlKClaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZUFjdGlvblZpZXcoKUxhbmRyb2lkL3ZpZXcvVmlldzsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVBY3Rpb25WaWV3KExhbmRyb2lkL3ZpZXcvTWVudUl0ZW07KUxhbmRyb2lkL3ZpZXcvVmlldzsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGVyZm9ybURlZmF1bHRBY3Rpb24oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByZXBhcmVTdWJNZW51KExhbmRyb2lkL3ZpZXcvU3ViTWVudTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im92ZXJyaWRlc0l0ZW1WaXNpYmlsaXR5KClaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWZyZXNoVmlzaWJpbGl0eSgpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlzaWJpbGl0eUxpc3RlbmVyKExhbmRyb2lkL3ZpZXcvQWN0aW9uUHJvdmlkZXIkVmlzaWJpbGl0eUxpc3RlbmVyOylWIiBzaW5jZT0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvQWN0aW9uUHJvdmlkZXIkVmlzaWJpbGl0eUxpc3RlbmVyIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BY3Rpb25Qcm92aWRlclZpc2liaWxpdHlDaGFuZ2VkKFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9DaG9yZW9ncmFwaGVyIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9Mb29wZXI7SSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGFuZHJvaWQvdmlldy9DaG9yZW9ncmFwaGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBvc3RGcmFtZUNhbGxiYWNrKExhbmRyb2lkL3ZpZXcvQ2hvcmVvZ3JhcGhlciRGcmFtZUNhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9zdEZyYW1lQ2FsbGJhY2tEZWxheWVkKExhbmRyb2lkL3ZpZXcvQ2hvcmVvZ3JhcGhlciRGcmFtZUNhbGxiYWNrO0opViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUZyYW1lQ2FsbGJhY2soTGFuZHJvaWQvdmlldy9DaG9yZW9ncmFwaGVyJEZyYW1lQ2FsbGJhY2s7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvQ2hvcmVvZ3JhcGhlciRGcmFtZUNhbGxiYWNrIiBzaW5jZT0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZG9GcmFtZShKKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvQ29sbGFwc2libGVBY3Rpb25WaWV3IiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BY3Rpb25WaWV3Q29sbGFwc2VkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BY3Rpb25WaWV3RXhwYW5kZWQoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvQ29udGV4dE1lbnUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvTWVudSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFySGVhZGVyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGVhZGVySWNvbihJKUxhbmRyb2lkL3ZpZXcvQ29udGV4dE1lbnU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGVhZGVySWNvbihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspTGFuZHJvaWQvdmlldy9Db250ZXh0TWVudTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIZWFkZXJUaXRsZShJKUxhbmRyb2lkL3ZpZXcvQ29udGV4dE1lbnU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGVhZGVyVGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3ZpZXcvQ29udGV4dE1lbnU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGVhZGVyVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KUxhbmRyb2lkL3ZpZXcvQ29udGV4dE1lbnU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0NvbnRleHRNZW51JENvbnRleHRNZW51SW5mbyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0NvbnRleHRUaGVtZVdyYXBwZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9jb250ZW50L0NvbnRleHRXcmFwcGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcyRUaGVtZTspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlPdmVycmlkZUNvbmZpZ3VyYXRpb24oTGFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbjspViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BcHBseVRoZW1lUmVzb3VyY2UoTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzJFRoZW1lO0laKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvRGlzcGxheSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwVnN5bmNPZmZzZXROYW5vcygpSiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudFNpemVSYW5nZShMYW5kcm9pZC9ncmFwaGljcy9Qb2ludDtMYW5kcm9pZC9ncmFwaGljcy9Qb2ludDspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheUlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxhZ3MoKUkiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhkckNhcGFiaWxpdGllcygpTGFuZHJvaWQvdmlldy9EaXNwbGF5JEhkckNhcGFiaWxpdGllczsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlaWdodCgpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXRyaWNzKExhbmRyb2lkL3V0aWwvRGlzcGxheU1ldHJpY3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2RlKClMYW5kcm9pZC92aWV3L0Rpc3BsYXkkTW9kZTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3JpZW50YXRpb24oKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGl4ZWxGb3JtYXQoKUkiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlc2VudGF0aW9uRGVhZGxpbmVOYW5vcygpSiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhbE1ldHJpY3MoTGFuZHJvaWQvdXRpbC9EaXNwbGF5TWV0cmljczspViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhbFNpemUoTGFuZHJvaWQvZ3JhcGhpY3MvUG9pbnQ7KVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlY3RTaXplKExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiIHNpbmNlPSIxMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlZnJlc2hSYXRlKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um90YXRpb24oKUkiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2l6ZShMYW5kcm9pZC9ncmFwaGljcy9Qb2ludDspViIgc2luY2U9IjEzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdGUoKUkiIHNpbmNlPSIyMCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZE1vZGVzKClbTGFuZHJvaWQvdmlldy9EaXNwbGF5JE1vZGU7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRSZWZyZXNoUmF0ZXMoKVtGIiBzaW5jZT0iMjEiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkdGgoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNIZHIoKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmFsaWQoKVoiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzV2lkZUNvbG9yR2FtdXQoKVoiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9ESVNQTEFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1BSRVNFTlRBVElPTiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1BSSVZBVEUiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19ST1VORCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NFQ1VSRSIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NVUFBPUlRTX1BST1RFQ1RFRF9CVUZGRVJTIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IklOVkFMSURfRElTUExBWSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9ET1pFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX0RPWkVfU1VTUEVORCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9ET1pJTkciIHNpbmNlPSIyMCIgcmVtb3ZlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX09GRiIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9PTiIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFURV9PTl9TVVNQRU5EIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRFX1VOS05PV04iIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVEVfVlIiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9EaXNwbGF5JEhkckNhcGFiaWxpdGllcyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNpcmVkTWF4QXZlcmFnZUx1bWluYW5jZSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlc2lyZWRNYXhMdW1pbmFuY2UoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNpcmVkTWluTHVtaW5hbmNlKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VwcG9ydGVkSGRyVHlwZXMoKVtJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRFJfVFlQRV9ET0xCWV9WSVNJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkhEUl9UWVBFX0hEUjEwIi8+Ci0JCTxmaWVsZCBuYW1lPSJIRFJfVFlQRV9ITEciLz4KLQkJPGZpZWxkIG5hbWU9IklOVkFMSURfTFVNSU5BTkNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0Rpc3BsYXkkTW9kZSIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9kZUlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGh5c2ljYWxIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQaHlzaWNhbFdpZHRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVmcmVzaFJhdGUoKUYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvRGlzcGxheUN1dG91dCIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0xqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvdW5kaW5nUmVjdHMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTYWZlSW5zZXRCb3R0b20oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTYWZlSW5zZXRMZWZ0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2FmZUluc2V0UmlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTYWZlSW5zZXRUb3AoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvRHJhZ0FuZERyb3BQZXJtaXNzaW9ucyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiIHNpbmNlPSIyNSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIiBzaW5jZT0iMjUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvRHJhZ0V2ZW50IiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsaXBEYXRhKClMYW5kcm9pZC9jb250ZW50L0NsaXBEYXRhOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsaXBEZXNjcmlwdGlvbigpTGFuZHJvaWQvY29udGVudC9DbGlwRGVzY3JpcHRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxTdGF0ZSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzdWx0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFkoKUYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9EUkFHX0VOREVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRFJBR19FTlRFUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRFJBR19FWElURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9EUkFHX0xPQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRFJBR19TVEFSVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRFJPUCIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9Gb2N1c0ZpbmRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZE5lYXJlc3RUb3VjaGFibGUoTGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7SUlJW0kpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmROZXh0Rm9jdXMoTGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7TGFuZHJvaWQvdmlldy9WaWV3O0kpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmROZXh0Rm9jdXNGcm9tUmVjdChMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDtMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0kpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmROZXh0S2V5Ym9hcmROYXZpZ2F0aW9uQ2x1c3RlcihMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3O0kpTGFuZHJvaWQvdmlldy9WaWV3OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxhbmRyb2lkL3ZpZXcvRm9jdXNGaW5kZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0ZyYW1lTWV0cmljcyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L0ZyYW1lTWV0cmljczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldHJpYyhJKUoiLz4KLQkJPGZpZWxkIG5hbWU9IkFOSU1BVElPTl9EVVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iQ09NTUFORF9JU1NVRV9EVVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRFJBV19EVVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRklSU1RfRFJBV19GUkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iSU5QVVRfSEFORExJTkdfRFVSQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVOREVEX1ZTWU5DX1RJTUVTVEFNUCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMQVlPVVRfTUVBU1VSRV9EVVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iU1dBUF9CVUZGRVJTX0RVUkFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX0RVUkFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT1RBTF9EVVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iVU5LTk9XTl9ERUxBWV9EVVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iVlNZTkNfVElNRVNUQU1QIiBzaW5jZT0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvRnJhbWVTdGF0cyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuZFRpbWVOYW5vKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJhbWVDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyYW1lUHJlc2VudGVkVGltZU5hbm8oSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVmcmVzaFBlcmlvZE5hbm8oKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydFRpbWVOYW5vKClKIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTkRFRklORURfVElNRV9OQU5PIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0dlc3R1cmVEZXRlY3RvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC92aWV3L0dlc3R1cmVEZXRlY3RvciRPbkdlc3R1cmVMaXN0ZW5lcjspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3ZpZXcvR2VzdHVyZURldGVjdG9yJE9uR2VzdHVyZUxpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC92aWV3L0dlc3R1cmVEZXRlY3RvciRPbkdlc3R1cmVMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyO1opViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9HZXN0dXJlRGV0ZWN0b3IkT25HZXN0dXJlTGlzdGVuZXI7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvR2VzdHVyZURldGVjdG9yJE9uR2VzdHVyZUxpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMb25ncHJlc3NFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZW5lcmljTW90aW9uRXZlbnQoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Ub3VjaEV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZXh0Q2xpY2tMaXN0ZW5lcihMYW5kcm9pZC92aWV3L0dlc3R1cmVEZXRlY3RvciRPbkNvbnRleHRDbGlja0xpc3RlbmVyOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJc0xvbmdwcmVzc0VuYWJsZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25Eb3VibGVUYXBMaXN0ZW5lcihMYW5kcm9pZC92aWV3L0dlc3R1cmVEZXRlY3RvciRPbkRvdWJsZVRhcExpc3RlbmVyOylWIiBzaW5jZT0iMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9HZXN0dXJlRGV0ZWN0b3IkT25Db250ZXh0Q2xpY2tMaXN0ZW5lciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29udGV4dENsaWNrKExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvR2VzdHVyZURldGVjdG9yJE9uRG91YmxlVGFwTGlzdGVuZXIiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRG91YmxlVGFwKExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRvdWJsZVRhcEV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNpbmdsZVRhcENvbmZpcm1lZChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0dlc3R1cmVEZXRlY3RvciRPbkdlc3R1cmVMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Eb3duKExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZsaW5nKExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7TGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDtGRilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Mb25nUHJlc3MoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2Nyb2xsKExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7TGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDtGRilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TaG93UHJlc3MoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2luZ2xlVGFwVXAoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9HZXN0dXJlRGV0ZWN0b3IkU2ltcGxlT25HZXN0dXJlTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvR2VzdHVyZURldGVjdG9yJE9uQ29udGV4dENsaWNrTGlzdGVuZXIiIHNpbmNlPSIyMyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvR2VzdHVyZURldGVjdG9yJE9uRG91YmxlVGFwTGlzdGVuZXIiIHNpbmNlPSIzIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9HZXN0dXJlRGV0ZWN0b3IkT25HZXN0dXJlTGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvR3Jhdml0eSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHkoSUlJTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtJSUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseShJSUlMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0lJTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtJKVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5KElJSUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5KElJSUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtJKVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5RGlzcGxheShJTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5RGlzcGxheShJTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0kpViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWJzb2x1dGVHcmF2aXR5KElJKUkiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSG9yaXpvbnRhbChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZlcnRpY2FsKEkpWiIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19DTElQIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19QVUxMX0FGVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX1BVTExfQkVGT1JFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX1NQRUNJRklFRCIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19YX1NISUZUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX1lfU0hJRlQiLz4KLQkJPGZpZWxkIG5hbWU9IkJPVFRPTSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5URVJfSE9SSVpPTlRBTCIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVEVSX1ZFUlRJQ0FMIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTElQX0hPUklaT05UQUwiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTElQX1ZFUlRJQ0FMIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iRElTUExBWV9DTElQX0hPUklaT05UQUwiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNQTEFZX0NMSVBfVkVSVElDQUwiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iRklMTCIvPgotCQk8ZmllbGQgbmFtZT0iRklMTF9IT1JJWk9OVEFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUxMX1ZFUlRJQ0FMIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1JJWk9OVEFMX0dSQVZJVFlfTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iTEVGVCIvPgotCQk8ZmllbGQgbmFtZT0iTk9fR1JBVklUWSIvPgotCQk8ZmllbGQgbmFtZT0iUkVMQVRJVkVfSE9SSVpPTlRBTF9HUkFWSVRZX01BU0siIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iUkVMQVRJVkVfTEFZT1VUX0RJUkVDVElPTiIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBUlQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9QIi8+Ci0JCTxmaWVsZCBuYW1lPSJWRVJUSUNBTF9HUkFWSVRZX01BU0siLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvSGFwdGljRmVlZGJhY2tDb25zdGFudHMiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQ0xPQ0tfVElDSyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URVhUX0NMSUNLIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfSUdOT1JFX0dMT0JBTF9TRVRUSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0lHTk9SRV9WSUVXX1NFVFRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IktFWUJPQVJEX1BSRVNTIiBzaW5jZT0iMjciLz4KLQkJPGZpZWxkIG5hbWU9IktFWUJPQVJEX1JFTEVBU0UiIHNpbmNlPSIyNyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQk9BUkRfVEFQIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iTE9OR19QUkVTUyIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9IQU5ETEVfTU9WRSIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWSVJUVUFMX0tFWSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlZJUlRVQUxfS0VZX1JFTEVBU0UiIHNpbmNlPSIyNyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9JbmZsYXRlRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0lucHV0RGV2aWNlIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRyb2xsZXJOdW1iZXIoKUkiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlc2NyaXB0b3IoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlKEkpTGFuZHJvaWQvdmlldy9JbnB1dERldmljZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXZpY2VJZHMoKVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlDaGFyYWN0ZXJNYXAoKUxhbmRyb2lkL3ZpZXcvS2V5Q2hhcmFjdGVyTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleWJvYXJkVHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vdGlvblJhbmdlKEkpTGFuZHJvaWQvdmlldy9JbnB1dERldmljZSRNb3Rpb25SYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb3Rpb25SYW5nZShJSSlMYW5kcm9pZC92aWV3L0lucHV0RGV2aWNlJE1vdGlvblJhbmdlOyIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW90aW9uUmFuZ2VzKClMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9kdWN0SWQoKUkiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvdXJjZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZW5kb3JJZCgpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmlicmF0b3IoKUxhbmRyb2lkL29zL1ZpYnJhdG9yOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzS2V5cyhbSSlbWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTWljcm9waG9uZSgpWiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbmFibGVkKClaIiBzaW5jZT0iMjciLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZpcnR1YWwoKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzU291cmNlKEkpWiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlCT0FSRF9UWVBFX0FMUEhBQkVUSUMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUJPQVJEX1RZUEVfTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQk9BUkRfVFlQRV9OT05fQUxQSEFCRVRJQyIvPgotCQk8ZmllbGQgbmFtZT0iTU9USU9OX1JBTkdFX09SSUVOVEFUSU9OIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTU9USU9OX1JBTkdFX1BSRVNTVVJFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTU9USU9OX1JBTkdFX1NJWkUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNT1RJT05fUkFOR0VfVE9PTF9NQUpPUiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PVElPTl9SQU5HRV9UT09MX01JTk9SIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTU9USU9OX1JBTkdFX1RPVUNIX01BSk9SIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTU9USU9OX1JBTkdFX1RPVUNIX01JTk9SIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTU9USU9OX1JBTkdFX1giIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNT1RJT05fUkFOR0VfWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9BTlkiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9CTFVFVE9PVEhfU1RZTFVTIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9DTEFTU19CVVRUT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9DTEFTU19KT1lTVElDSyIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT1VSQ0VfQ0xBU1NfTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iU09VUkNFX0NMQVNTX05PTkUiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iU09VUkNFX0NMQVNTX1BPSU5URVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9DTEFTU19QT1NJVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iU09VUkNFX0NMQVNTX1RSQUNLQkFMTCIvPgotCQk8ZmllbGQgbmFtZT0iU09VUkNFX0RQQUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9HQU1FUEFEIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9IRE1JIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9KT1lTVElDSyIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT1VSQ0VfS0VZQk9BUkQiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9NT1VTRSIvPgotCQk8ZmllbGQgbmFtZT0iU09VUkNFX01PVVNFX1JFTEFUSVZFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9ST1RBUllfRU5DT0RFUiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTT1VSQ0VfU1RZTFVTIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRV9UT1VDSFBBRCIvPgotCQk8ZmllbGQgbmFtZT0iU09VUkNFX1RPVUNIU0NSRUVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT1VSQ0VfVE9VQ0hfTkFWSUdBVElPTiIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTT1VSQ0VfVFJBQ0tCQUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT1VSQ0VfVU5LTk9XTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9JbnB1dERldmljZSRNb3Rpb25SYW5nZSIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUZGRkZGKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF4aXMoKUkiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsYXQoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGdXp6KClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4KClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmFuZ2UoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNvbHV0aW9uKClGIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb3VyY2UoKUkiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRnJvbVNvdXJjZShJKVoiIHNpbmNlPSIxOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9JbnB1dEV2ZW50IiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlKClMYW5kcm9pZC92aWV3L0lucHV0RGV2aWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERldmljZUlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXZlbnRUaW1lKClKIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb3VyY2UoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Zyb21Tb3VyY2UoSSlaIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvSW5wdXRRdWV1ZSIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0lucHV0UXVldWUkQ2FsbGJhY2siIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSW5wdXRRdWV1ZUNyZWF0ZWQoTGFuZHJvaWQvdmlldy9JbnB1dFF1ZXVlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25JbnB1dFF1ZXVlRGVzdHJveWVkKExhbmRyb2lkL3ZpZXcvSW5wdXRRdWV1ZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9LZXlDaGFyYWN0ZXJNYXAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXZpY2VIYXNLZXkoSSlaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImRldmljZUhhc0tleXMoW0kpW1oiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWFkQ2hhcihJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheUxhYmVsKEkpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV2ZW50cyhbQylbTGFuZHJvaWQvdmlldy9LZXlFdmVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlEYXRhKElMYW5kcm9pZC92aWV3L0tleUNoYXJhY3Rlck1hcCRLZXlEYXRhOylaIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleWJvYXJkVHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hdGNoKElbQylDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF0Y2goSVtDSSlDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9kaWZpZXJCZWhhdmlvcigpSSIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtYmVyKEkpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUHJpbnRpbmdLZXkoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZChJKUxhbmRyb2lkL3ZpZXcvS2V5Q2hhcmFjdGVyTWFwOyIvPgotCQk8ZmllbGQgbmFtZT0iQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkJVSUxUX0lOX0tFWUJPQVJEIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQ09NQklOSU5HX0FDQ0VOVCIvPgotCQk8ZmllbGQgbmFtZT0iQ09NQklOSU5HX0FDQ0VOVF9NQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkZVTEwiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iSEVYX0lOUFVUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RJRklFUl9CRUhBVklPUl9DSE9SREVEIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PRElGSUVSX0JFSEFWSU9SX0NIT1JERURfT1JfVE9HR0xFRCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVU1FUklDIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSUNLRVJfRElBTE9HX0lOUFVUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVESUNUSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUEVDSUFMX0ZVTkNUSU9OIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlZJUlRVQUxfS0VZQk9BUkQiIHNpbmNlPSIxMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9LZXlDaGFyYWN0ZXJNYXAkS2V5RGF0YSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9MRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9ImRpc3BsYXlMYWJlbCIvPgotCQk8ZmllbGQgbmFtZT0ibWV0YSIvPgotCQk8ZmllbGQgbmFtZT0ibnVtYmVyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0tleUNoYXJhY3Rlck1hcCRVbmF2YWlsYWJsZUV4Y2VwdGlvbiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC91dGlsL0FuZHJvaWRSdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0tleUV2ZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9JbnB1dEV2ZW50IiBzaW5jZT0iOSIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiByZW1vdmVkPSI5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpKSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkpJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkpJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKSklJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKSklJSUlJSUlJKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpMamF2YS9sYW5nL1N0cmluZztJSSlWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L0tleUV2ZW50OylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L0tleUV2ZW50O0pJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hhbmdlQWN0aW9uKExhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7SSlMYW5kcm9pZC92aWV3L0tleUV2ZW50OyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFuZ2VGbGFncyhMYW5kcm9pZC92aWV3L0tleUV2ZW50O0kpTGFuZHJvaWQvdmlldy9LZXlFdmVudDsiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hhbmdlVGltZVJlcGVhdChMYW5kcm9pZC92aWV3L0tleUV2ZW50O0pJKUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNoYW5nZVRpbWVSZXBlYXQoTGFuZHJvaWQvdmlldy9LZXlFdmVudDtKSUkpTGFuZHJvaWQvdmlldy9LZXlFdmVudDsiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2goTGFuZHJvaWQvdmlldy9LZXlFdmVudCRDYWxsYmFjazspWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaChMYW5kcm9pZC92aWV3L0tleUV2ZW50JENhbGxiYWNrO0xhbmRyb2lkL3ZpZXcvS2V5RXZlbnQkRGlzcGF0Y2hlclN0YXRlO0xqYXZhL2xhbmcvT2JqZWN0OylaIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJhY3RlcnMoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWFkQ2hhcihJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TGFiZWwoKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb3duVGltZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV2ZW50VGltZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsYWdzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5Q2hhcmFjdGVyTWFwKClMYW5kcm9pZC92aWV3L0tleUNoYXJhY3Rlck1hcDsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleUNvZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlEYXRhKExhbmRyb2lkL3ZpZXcvS2V5Q2hhcmFjdGVyTWFwJEtleURhdGE7KVoiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF0Y2goW0MpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hdGNoKFtDSSlDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4S2V5Q29kZSgpSSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXRhU3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2RpZmllck1ldGFTdGF0ZU1hc2soKUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vZGlmaWVycygpSSIgc2luY2U9IjEzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtYmVyKClDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVwZWF0Q291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2FuQ29kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVuaWNvZGVDaGFyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5pY29kZUNoYXIoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTW9kaWZpZXJzKEkpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTm9Nb2RpZmllcnMoKVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWx0UHJlc3NlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2FuY2VsZWQoKVoiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDYXBzTG9ja09uKClaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0N0cmxQcmVzc2VkKClaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Z1bmN0aW9uUHJlc3NlZCgpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNHYW1lcGFkQnV0dG9uKEkpWiIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMb25nUHJlc3MoKVoiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNNZXRhUHJlc3NlZCgpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNNb2RpZmllcktleShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc051bUxvY2tPbigpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcmludGluZ0tleSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2Nyb2xsTG9ja09uKClaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NoaWZ0UHJlc3NlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3ltUHJlc3NlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3lzdGVtKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUcmFja2luZygpWiIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJrZXlDb2RlRnJvbVN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspSSIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5Q29kZVRvU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJtZXRhU3RhdGVIYXNNb2RpZmllcnMoSUkpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWV0YVN0YXRlSGFzTm9Nb2RpZmllcnMoSSlaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3JtYWxpemVNZXRhU3RhdGUoSSlJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTb3VyY2UoSSlWIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFRyYWNraW5nKClWIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RPV04iLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NVUxUSVBMRSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1VQIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0NBTkNFTEVEIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19DQU5DRUxFRF9MT05HX1BSRVNTIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19FRElUT1JfQUNUSU9OIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19GQUxMQkFDSyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0ZST01fU1lTVEVNIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19LRUVQX1RPVUNIX01PREUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0xPTkdfUFJFU1MiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NPRlRfS0VZQk9BUkQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1RSQUNLSU5HIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19WSVJUVUFMX0hBUkRfS0VZIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19XT0tFX0hFUkUiIGRlcHJlY2F0ZWQ9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFXzAiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV8xMSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFXzEyIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfMiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV8zIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFXzNEX01PREUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV80Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFXzUiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV83Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFXzgiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfOSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9BIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0FMTF9BUFBTIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQUxUX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQUxUX1JJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0FQT1NUUk9QSEUiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQVBQX1NXSVRDSCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0FTU0lTVCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0FUIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0FWUl9JTlBVVCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0FWUl9QT1dFUiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0IiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQkFDSyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9CQUNLU0xBU0giLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQk9PS01BUksiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9CUkVBSyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JSSUdIVE5FU1NfRE9XTiIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JSSUdIVE5FU1NfVVAiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9CVVRUT05fMSIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl8xMCIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl8xMSIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl8xMiIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl8xMyIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl8xNCIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl8xNSIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl8xNiIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl8yIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQlVUVE9OXzMiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9CVVRUT05fNCIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl81IiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQlVUVE9OXzYiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9CVVRUT05fNyIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl84IiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQlVUVE9OXzkiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9CVVRUT05fQSIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQlVUVE9OX0IiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl9DIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9CVVRUT05fTDEiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl9MMiIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQlVUVE9OX01PREUiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl9SMSIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQlVUVE9OX1IyIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9CVVRUT05fU0VMRUNUIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9CVVRUT05fU1RBUlQiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl9USFVNQkwiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl9USFVNQlIiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0JVVFRPTl9YIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9CVVRUT05fWSIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQlVUVE9OX1oiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0MiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQ0FMQ1VMQVRPUiIgc2luY2U9IjE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0NBTEVOREFSIiBzaW5jZT0iMTUiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQ0FMTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9DQU1FUkEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQ0FQU19MT0NLIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQ0FQVElPTlMiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9DSEFOTkVMX0RPV04iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9DSEFOTkVMX1VQIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQ0xFQVIiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQ09NTUEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQ09OVEFDVFMiIHNpbmNlPSIxNSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9DT1BZIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQ1RSTF9MRUZUIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfQ1RSTF9SSUdIVCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0NVVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0QiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfREVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0RQQURfQ0VOVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0RQQURfRE9XTiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9EUEFEX0RPV05fTEVGVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0RQQURfRE9XTl9SSUdIVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0RQQURfTEVGVCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9EUEFEX1JJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0RQQURfVVAiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfRFBBRF9VUF9MRUZUIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfRFBBRF9VUF9SSUdIVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0RWUiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0UiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfRUlTVSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0VORENBTEwiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfRU5URVIiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfRU5WRUxPUEUiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfRVFVQUxTIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0VTQ0FQRSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0VYUExPUkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0YiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfRjEiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9GMTAiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9GMTEiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9GMTIiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9GMiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0YzIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfRjQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9GNSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0Y2IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfRjciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9GOCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0Y5IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfRk9DVVMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfRk9SV0FSRCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0ZPUldBUkRfREVMIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfRlVOQ1RJT04iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9HIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0dSQVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0dVSURFIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfSCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9IRUFEU0VUSE9PSyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9IRUxQIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfSEVOS0FOIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfSE9NRSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9JIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0lORk8iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9JTlNFUlQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9KIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0siLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfS0FOQSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX0tBVEFLQU5BX0hJUkFHQU5BIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9MQU5HVUFHRV9TV0lUQ0giIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9MQVNUX0NIQU5ORUwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9MRUZUX0JSQUNLRVQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9NQU5ORVJfTU9ERSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX01FRElBX0FVRElPX1RSQUNLIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTUVESUFfQ0xPU0UiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9NRURJQV9FSkVDVCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX01FRElBX0ZBU1RfRk9SV0FSRCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTUVESUFfTkVYVCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTUVESUFfUEFVU0UiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9NRURJQV9QTEFZIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTUVESUFfUExBWV9QQVVTRSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTUVESUFfUFJFVklPVVMiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX01FRElBX1JFQ09SRCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX01FRElBX1JFV0lORCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTUVESUFfU0tJUF9CQUNLV0FSRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX01FRElBX1NLSVBfRk9SV0FSRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX01FRElBX1NURVBfQkFDS1dBUkQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9NRURJQV9TVEVQX0ZPUldBUkQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9NRURJQV9TVE9QIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9NRURJQV9UT1BfTUVOVSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX01FTlUiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTUVUQV9MRUZUIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTUVUQV9SSUdIVCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX01JTlVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX01PVkVfRU5EIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTU9WRV9IT01FIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTVVIRU5LQU4iIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9NVVNJQyIgc2luY2U9IjE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX01VVEUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX04iLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTkFWSUdBVEVfSU4iIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9OQVZJR0FURV9ORVhUIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTkFWSUdBVEVfT1VUIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTkFWSUdBVEVfUFJFVklPVVMiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9OT1RJRklDQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTlVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX05VTVBBRF8wIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTlVNUEFEXzEiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9OVU1QQURfMiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX05VTVBBRF8zIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTlVNUEFEXzQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9OVU1QQURfNSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX05VTVBBRF82IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTlVNUEFEXzciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9OVU1QQURfOCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX05VTVBBRF85IiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTlVNUEFEX0FERCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX05VTVBBRF9DT01NQSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX05VTVBBRF9ESVZJREUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9OVU1QQURfRE9UIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTlVNUEFEX0VOVEVSIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTlVNUEFEX0VRVUFMUyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX05VTVBBRF9MRUZUX1BBUkVOIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTlVNUEFEX01VTFRJUExZIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTlVNUEFEX1JJR0hUX1BBUkVOIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTlVNUEFEX1NVQlRSQUNUIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfTlVNX0xPQ0siIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9PIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1AiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfUEFHRV9ET1dOIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9QQUdFX1VQIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9QQUlSSU5HIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfUEFTVEUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9QRVJJT0QiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfUElDVFNZTUJPTFMiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1BMVVMiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfUE9VTkQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfUE9XRVIiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfUFJPR19CTFVFIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfUFJPR19HUkVFTiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1BST0dfUkVEIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfUFJPR19ZRUxMT1ciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9RIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1IiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfUkVGUkVTSCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1JJR0hUX0JSQUNLRVQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfUk8iIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9TIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1NDUk9MTF9MT0NLIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfU0VBUkNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1NFTUlDT0xPTiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9TRVRUSU5HUyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1NISUZUX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfU0hJRlRfUklHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfU0xBU0giLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfU0xFRVAiIHNpbmNlPSIyMCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9TT0ZUX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfU09GVF9SSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9TT0ZUX1NMRUVQIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfU1BBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfU1RBUiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9TVEJfSU5QVVQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9TVEJfUE9XRVIiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9TVEVNXzEiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9TVEVNXzIiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9TVEVNXzMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9TVEVNX1BSSU1BUlkiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9TV0lUQ0hfQ0hBUlNFVCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfU1lNIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1NZU1JRIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfU1lTVEVNX05BVklHQVRJT05fRE9XTiIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1NZU1RFTV9OQVZJR0FUSU9OX0xFRlQiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9TWVNURU1fTkFWSUdBVElPTl9SSUdIVCIgc2luY2U9IjI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1NZU1RFTV9OQVZJR0FUSU9OX1VQIiBzaW5jZT0iMjUiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9UQUIiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFYiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9UVl9BTlRFTk5BX0NBQkxFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFZfQVVESU9fREVTQ1JJUFRJT04iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9UVl9BVURJT19ERVNDUklQVElPTl9NSVhfRE9XTiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1RWX0FVRElPX0RFU0NSSVBUSU9OX01JWF9VUCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1RWX0NPTlRFTlRTX01FTlUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9UVl9EQVRBX1NFUlZJQ0UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9UVl9JTlBVVCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1RWX0lOUFVUX0NPTVBPTkVOVF8xIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFZfSU5QVVRfQ09NUE9ORU5UXzIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9UVl9JTlBVVF9DT01QT1NJVEVfMSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1RWX0lOUFVUX0NPTVBPU0lURV8yIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFZfSU5QVVRfSERNSV8xIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFZfSU5QVVRfSERNSV8yIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFZfSU5QVVRfSERNSV8zIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFZfSU5QVVRfSERNSV80IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFZfSU5QVVRfVkdBXzEiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9UVl9NRURJQV9DT05URVhUX01FTlUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9UVl9ORVRXT1JLIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFZfTlVNQkVSX0VOVFJZIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFZfUE9XRVIiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9UVl9SQURJT19TRVJWSUNFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFZfU0FURUxMSVRFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFZfU0FURUxMSVRFX0JTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFZfU0FURUxMSVRFX0NTIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVFZfU0FURUxMSVRFX1NFUlZJQ0UiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9UVl9URUxFVEVYVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1RWX1RFUlJFU1RSSUFMX0FOQUxPRyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1RWX1RFUlJFU1RSSUFMX0RJR0lUQUwiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9UVl9USU1FUl9QUk9HUkFNTUlORyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1RWX1pPT01fTU9ERSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1UiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVU5LTk9XTiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9WIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1ZPSUNFX0FTU0lTVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1ZPTFVNRV9ET1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1ZPTFVNRV9NVVRFIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfVk9MVU1FX1VQIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1ciLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfV0FLRVVQIiBzaW5jZT0iMjAiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfV0lORE9XIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfWCIvPgotCQk8ZmllbGQgbmFtZT0iS0VZQ09ERV9ZIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1lFTiIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1oiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfWkVOS0FLVV9IQU5LQUtVIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IktFWUNPREVfWk9PTV9JTiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlDT0RFX1pPT01fT1VUIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9LRVlDT0RFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9BTFRfTEVGVF9PTiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9BTFRfTUFTSyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX0FMVF9PTiIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9BTFRfUklHSFRfT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFfQ0FQU19MT0NLX09OIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFfQ1RSTF9MRUZUX09OIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFfQ1RSTF9NQVNLIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFfQ1RSTF9PTiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX0NUUkxfUklHSFRfT04iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9GVU5DVElPTl9PTiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX01FVEFfTEVGVF9PTiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX01FVEFfTUFTSyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX01FVEFfT04iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9NRVRBX1JJR0hUX09OIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFfTlVNX0xPQ0tfT04iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iTUVUQV9TQ1JPTExfTE9DS19PTiIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX1NISUZUX0xFRlRfT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEFfU0hJRlRfTUFTSyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX1NISUZUX09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX1NISUZUX1JJR0hUX09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRBX1NZTV9PTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9LZXlFdmVudCRDYWxsYmFjayIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25LZXlEb3duKElMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25LZXlMb25nUHJlc3MoSUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25LZXlNdWx0aXBsZShJSUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbktleVVwKElMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0tleUV2ZW50JERpc3BhdGNoZXJTdGF0ZSIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlVXBFdmVudChMYW5kcm9pZC92aWV3L0tleUV2ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUcmFja2luZyhMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVyZm9ybWVkTG9uZ1ByZXNzKExhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRUcmFja2luZyhMYW5kcm9pZC92aWV3L0tleUV2ZW50O0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0tleWJvYXJkU2hvcnRjdXRHcm91cCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSXRlbShMYW5kcm9pZC92aWV3L0tleWJvYXJkU2hvcnRjdXRJbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SXRlbXMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0tleWJvYXJkU2hvcnRjdXRJbmZvIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtDSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYXNlQ2hhcmFjdGVyKClDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5Y29kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhYmVsKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2RpZmllcnMoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9MYXlvdXRJbmZsYXRlcjtMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZUluQ29udGV4dChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxhbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVmlldyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb20oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRleHQoKUxhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGYWN0b3J5KClMYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyJEZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmFjdG9yeTIoKUxhbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXIkRmFjdG9yeTI7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWx0ZXIoKUxhbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXIkRmlsdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImluZmxhdGUoSUxhbmRyb2lkL3ZpZXcvVmlld0dyb3VwOylMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5mbGF0ZShJTGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7WilMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5mbGF0ZShMb3JnL3htbHB1bGwvdjEvWG1sUHVsbFBhcnNlcjtMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDspTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImluZmxhdGUoTG9yZy94bWxwdWxsL3YxL1htbFB1bGxQYXJzZXI7TGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7WilMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVWaWV3KExhbmRyb2lkL3ZpZXcvVmlldztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspTGFuZHJvaWQvdmlldy9WaWV3OyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVWaWV3KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmFjdG9yeShMYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyJEZhY3Rvcnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGYWN0b3J5MihMYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyJEZhY3RvcnkyOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaWx0ZXIoTGFuZHJvaWQvdmlldy9MYXlvdXRJbmZsYXRlciRGaWx0ZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXIkRmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DcmVhdGVWaWV3KExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9MYXlvdXRJbmZsYXRlciRGYWN0b3J5MiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXIkRmFjdG9yeSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyJEZpbHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Mb2FkQ2xhc3MoTGphdmEvbGFuZy9DbGFzczspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9NZW51IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGQoSSlMYW5kcm9pZC92aWV3L01lbnVJdGVtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChJSUlJKUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKElJSUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC92aWV3L01lbnVJdGVtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvdmlldy9NZW51SXRlbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJbnRlbnRPcHRpb25zKElJSUxhbmRyb2lkL2NvbnRlbnQvQ29tcG9uZW50TmFtZTtbTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7SVtMYW5kcm9pZC92aWV3L01lbnVJdGVtOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkU3ViTWVudShJKUxhbmRyb2lkL3ZpZXcvU3ViTWVudTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTdWJNZW51KElJSUkpTGFuZHJvaWQvdmlldy9TdWJNZW51OyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFN1Yk1lbnUoSUlJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3ZpZXcvU3ViTWVudTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTdWJNZW51KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC92aWV3L1N1Yk1lbnU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kSXRlbShJKUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SXRlbShJKUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1Zpc2libGVJdGVtcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2hvcnRjdXRLZXkoSUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJmb3JtSWRlbnRpZmllckFjdGlvbihJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVyZm9ybVNob3J0Y3V0KElMYW5kcm9pZC92aWV3L0tleUV2ZW50O0kpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUdyb3VwKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUl0ZW0oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R3JvdXBDaGVja2FibGUoSVpaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcm91cERpdmlkZXJFbmFibGVkKFopViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R3JvdXBFbmFibGVkKElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcm91cFZpc2libGUoSVopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFF3ZXJ0eU1vZGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZSgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfQUxURVJOQVRJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JZX0NPTlRBSU5FUiIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUllfU0VDT05EQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SWV9TWVNURU0iLz4KLQkJPGZpZWxkIG5hbWU9IkZJUlNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FMV0FZU19QRVJGT1JNX0NMT1NFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FQUEVORF9UT19HUk9VUCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19QRVJGT1JNX05PX0NMT1NFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBQT1JURURfTU9ESUZJRVJTX01BU0siIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9NZW51SW5mbGF0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmZsYXRlKElMYW5kcm9pZC92aWV3L01lbnU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvTWVudUl0ZW0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbGxhcHNlQWN0aW9uVmlldygpWiIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhwYW5kQWN0aW9uVmlldygpWiIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aW9uUHJvdmlkZXIoKUxhbmRyb2lkL3ZpZXcvQWN0aW9uUHJvdmlkZXI7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3Rpb25WaWV3KClMYW5kcm9pZC92aWV3L1ZpZXc7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbHBoYWJldGljTW9kaWZpZXJzKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbHBoYWJldGljU2hvcnRjdXQoKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50RGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3JvdXBJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEljb24oKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEljb25UaW50TGlzdCgpTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJY29uVGludE1vZGUoKUxhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVudCgpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SXRlbUlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVudUluZm8oKUxhbmRyb2lkL3ZpZXcvQ29udGV4dE1lbnUkQ29udGV4dE1lbnVJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE51bWVyaWNNb2RpZmllcnMoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE51bWVyaWNTaG9ydGN1dCgpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yZGVyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3ViTWVudSgpTGFuZHJvaWQvdmlldy9TdWJNZW51OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpdGxlKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaXRsZUNvbmRlbnNlZCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9vbHRpcFRleHQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzU3ViTWVudSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWN0aW9uVmlld0V4cGFuZGVkKClaIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NoZWNrYWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2hlY2tlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmlzaWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjdGlvblByb3ZpZGVyKExhbmRyb2lkL3ZpZXcvQWN0aW9uUHJvdmlkZXI7KUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBY3Rpb25WaWV3KEkpTGFuZHJvaWQvdmlldy9NZW51SXRlbTsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjdGlvblZpZXcoTGFuZHJvaWQvdmlldy9WaWV3OylMYW5kcm9pZC92aWV3L01lbnVJdGVtOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxwaGFiZXRpY1Nob3J0Y3V0KEMpTGFuZHJvaWQvdmlldy9NZW51SXRlbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbHBoYWJldGljU2hvcnRjdXQoQ0kpTGFuZHJvaWQvdmlldy9NZW51SXRlbTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoZWNrYWJsZShaKUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hlY2tlZChaKUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGVudERlc2NyaXB0aW9uKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC92aWV3L01lbnVJdGVtOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5hYmxlZChaKUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWNvbihJKUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWNvbihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspTGFuZHJvaWQvdmlldy9NZW51SXRlbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uVGludExpc3QoTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7KUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uVGludE1vZGUoTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOylMYW5kcm9pZC92aWV3L01lbnVJdGVtOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZW50KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMYW5kcm9pZC92aWV3L01lbnVJdGVtOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE51bWVyaWNTaG9ydGN1dChDKUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TnVtZXJpY1Nob3J0Y3V0KENJKUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkFjdGlvbkV4cGFuZExpc3RlbmVyKExhbmRyb2lkL3ZpZXcvTWVudUl0ZW0kT25BY3Rpb25FeHBhbmRMaXN0ZW5lcjspTGFuZHJvaWQvdmlldy9NZW51SXRlbTsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uTWVudUl0ZW1DbGlja0xpc3RlbmVyKExhbmRyb2lkL3ZpZXcvTWVudUl0ZW0kT25NZW51SXRlbUNsaWNrTGlzdGVuZXI7KUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hvcnRjdXQoQ0MpTGFuZHJvaWQvdmlldy9NZW51SXRlbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG9ydGN1dChDQ0lJKUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG93QXNBY3Rpb24oSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG93QXNBY3Rpb25GbGFncyhJKUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaXRsZShJKUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGl0bGVDb25kZW5zZWQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VG9vbHRpcFRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaXNpYmxlKFopTGFuZHJvaWQvdmlldy9NZW51SXRlbTsiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1dfQVNfQUNUSU9OX0FMV0FZUyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX0FTX0FDVElPTl9DT0xMQVBTRV9BQ1RJT05fVklFVyIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX0FTX0FDVElPTl9JRl9ST09NIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1dfQVNfQUNUSU9OX05FVkVSIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1dfQVNfQUNUSU9OX1dJVEhfVEVYVCIgc2luY2U9IjExIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L01lbnVJdGVtJE9uQWN0aW9uRXhwYW5kTGlzdGVuZXIiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1lbnVJdGVtQWN0aW9uQ29sbGFwc2UoTGFuZHJvaWQvdmlldy9NZW51SXRlbTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTWVudUl0ZW1BY3Rpb25FeHBhbmQoTGFuZHJvaWQvdmlldy9NZW51SXRlbTspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9NZW51SXRlbSRPbk1lbnVJdGVtQ2xpY2tMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25NZW51SXRlbUNsaWNrKExhbmRyb2lkL3ZpZXcvTWVudUl0ZW07KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L0lucHV0RXZlbnQiIHNpbmNlPSI5Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiIHJlbW92ZWQ9IjkiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWN0aW9uVG9TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEJhdGNoKEpGRkZGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQmF0Y2goSltMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50JFBvaW50ZXJDb29yZHM7SSlWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImF4aXNGcm9tU3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylJIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJheGlzVG9TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRQb2ludGVySW5kZXgoSSlJIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGlvbkJ1dHRvbigpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aW9uSW5kZXgoKUkiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aW9uTWFza2VkKClJIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF4aXNWYWx1ZShJKUYiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF4aXNWYWx1ZShJSSlGIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCdXR0b25TdGF0ZSgpSSIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV2aWNlSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb3duVGltZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVkZ2VGbGFncygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV2ZW50VGltZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsYWdzKClJIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpc3RvcmljYWxBeGlzVmFsdWUoSUkpRiIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGlzdG9yaWNhbEF4aXNWYWx1ZShJSUkpRiIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGlzdG9yaWNhbEV2ZW50VGltZShJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaXN0b3JpY2FsT3JpZW50YXRpb24oSSlGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpc3RvcmljYWxPcmllbnRhdGlvbihJSSlGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpc3RvcmljYWxQb2ludGVyQ29vcmRzKElJTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudCRQb2ludGVyQ29vcmRzOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpc3RvcmljYWxQcmVzc3VyZShJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaXN0b3JpY2FsUHJlc3N1cmUoSUkpRiIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaXN0b3JpY2FsU2l6ZShJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaXN0b3JpY2FsU2l6ZShJSSlGIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpc3RvcmljYWxUb29sTWFqb3IoSSlGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpc3RvcmljYWxUb29sTWFqb3IoSUkpRiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaXN0b3JpY2FsVG9vbE1pbm9yKEkpRiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaXN0b3JpY2FsVG9vbE1pbm9yKElJKUYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGlzdG9yaWNhbFRvdWNoTWFqb3IoSSlGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpc3RvcmljYWxUb3VjaE1ham9yKElJKUYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGlzdG9yaWNhbFRvdWNoTWlub3IoSSlGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpc3RvcmljYWxUb3VjaE1pbm9yKElJKUYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGlzdG9yaWNhbFgoSSlGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGlzdG9yaWNhbFgoSUkpRiIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaXN0b3JpY2FsWShJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaXN0b3JpY2FsWShJSSlGIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpc3RvcnlTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0YVN0YXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3JpZW50YXRpb24oKUYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3JpZW50YXRpb24oSSlGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvaW50ZXJDb29yZHMoSUxhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQkUG9pbnRlckNvb3JkczspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb2ludGVyQ291bnQoKUkiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9pbnRlcklkKEkpSSIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb2ludGVyUHJvcGVydGllcyhJTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudCRQb2ludGVyUHJvcGVydGllczspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlc3N1cmUoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVzc3VyZShJKUYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmF3WCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJhd1koKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaXplKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2l6ZShJKUYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9vbE1ham9yKClGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvb2xNYWpvcihJKUYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9vbE1pbm9yKClGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvb2xNaW5vcihJKUYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9vbFR5cGUoSSlJIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3VjaE1ham9yKClGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdWNoTWFqb3IoSSlGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdWNoTWlub3IoKUYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG91Y2hNaW5vcihJKUYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFgoSSlGIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFhQcmVjaXNpb24oKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRZKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WShJKUYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WVByZWNpc2lvbigpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQnV0dG9uUHJlc3NlZChJKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbihKSklGRkZGSUZGSUkpTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW4oSkpJRkZJKUxhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluKEpKSUlGRkZGSUZGSUkpTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDsiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbihKSklJW0lbTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudCRQb2ludGVyQ29vcmRzO0lGRklJSUkpTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDsiIHNpbmNlPSI5IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbihKSklJW0xhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQkUG9pbnRlclByb3BlcnRpZXM7W0xhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQkUG9pbnRlckNvb3JkcztJSUZGSUlJSSlMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluKExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KUxhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluTm9IaXN0b3J5KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KUxhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7IiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mZnNldExvY2F0aW9uKEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWN5Y2xlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWN0aW9uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVkZ2VGbGFncyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2NhdGlvbihGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U291cmNlKEkpViIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNmb3JtKExhbmRyb2lkL2dyYXBoaWNzL01hdHJpeDspViIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQlVUVE9OX1BSRVNTIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9CVVRUT05fUkVMRUFTRSIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ0FOQ0VMIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRE9XTiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0hPVkVSX0VOVEVSIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9IT1ZFUl9FWElUIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9IT1ZFUl9NT1ZFIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9NQVNLIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX01PVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9PVVRTSURFIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BPSU5URVJfMV9ET1dOIiBzaW5jZT0iNSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QT0lOVEVSXzFfVVAiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BPSU5URVJfMl9ET1dOIiBzaW5jZT0iNSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QT0lOVEVSXzJfVVAiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BPSU5URVJfM19ET1dOIiBzaW5jZT0iNSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QT0lOVEVSXzNfVVAiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BPSU5URVJfRE9XTiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QT0lOVEVSX0lEX01BU0siIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BPSU5URVJfSURfU0hJRlQiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BPSU5URVJfSU5ERVhfTUFTSyIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QT0lOVEVSX0lOREVYX1NISUZUIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BPSU5URVJfVVAiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0NST0xMIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9VUCIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19CUkFLRSIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX0RJU1RBTkNFIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfR0FTIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfR0VORVJJQ18xIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfR0VORVJJQ18xMCIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX0dFTkVSSUNfMTEiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19HRU5FUklDXzEyIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfR0VORVJJQ18xMyIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX0dFTkVSSUNfMTQiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19HRU5FUklDXzE1IiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfR0VORVJJQ18xNiIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX0dFTkVSSUNfMiIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX0dFTkVSSUNfMyIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX0dFTkVSSUNfNCIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX0dFTkVSSUNfNSIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX0dFTkVSSUNfNiIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX0dFTkVSSUNfNyIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX0dFTkVSSUNfOCIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX0dFTkVSSUNfOSIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX0hBVF9YIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfSEFUX1kiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19IU0NST0xMIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfTFRSSUdHRVIiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19PUklFTlRBVElPTiIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX1BSRVNTVVJFIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfUkVMQVRJVkVfWCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX1JFTEFUSVZFX1kiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19SVFJJR0dFUiIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX1JVRERFUiIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX1JYIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfUlkiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19SWiIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX1NDUk9MTCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX1NJWkUiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19USFJPVFRMRSIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX1RJTFQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19UT09MX01BSk9SIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfVE9PTF9NSU5PUiIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX1RPVUNIX01BSk9SIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfVE9VQ0hfTUlOT1IiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19WU0NST0xMIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfV0hFRUwiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iQVhJU19YIiBzaW5jZT0iMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkFYSVNfWSIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJBWElTX1oiIHNpbmNlPSIxMiIvPgotCQk8ZmllbGQgbmFtZT0iQlVUVE9OX0JBQ0siIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iQlVUVE9OX0ZPUldBUkQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iQlVUVE9OX1BSSU1BUlkiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iQlVUVE9OX1NFQ09OREFSWSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCVVRUT05fU1RZTFVTX1BSSU1BUlkiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQlVUVE9OX1NUWUxVU19TRUNPTkRBUlkiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQlVUVE9OX1RFUlRJQVJZIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkVER0VfQk9UVE9NIi8+Ci0JCTxmaWVsZCBuYW1lPSJFREdFX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVER0VfUklHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkVER0VfVE9QIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1dJTkRPV19JU19PQlNDVVJFRCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IklOVkFMSURfUE9JTlRFUl9JRCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUT09MX1RZUEVfRVJBU0VSIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPT0xfVFlQRV9GSU5HRVIiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9PTF9UWVBFX01PVVNFIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPT0xfVFlQRV9TVFlMVVMiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVE9PTF9UWVBFX1VOS05PV04iIHNpbmNlPSIxNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudCRQb2ludGVyQ29vcmRzIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudCRQb2ludGVyQ29vcmRzOylWIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcigpViIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weUZyb20oTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudCRQb2ludGVyQ29vcmRzOylWIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBeGlzVmFsdWUoSSlGIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBeGlzVmFsdWUoSUYpViIgc2luY2U9IjEyIi8+Ci0JCTxmaWVsZCBuYW1lPSJvcmllbnRhdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0icHJlc3N1cmUiLz4KLQkJPGZpZWxkIG5hbWU9InNpemUiLz4KLQkJPGZpZWxkIG5hbWU9InRvb2xNYWpvciIvPgotCQk8ZmllbGQgbmFtZT0idG9vbE1pbm9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0b3VjaE1ham9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0b3VjaE1pbm9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJ4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50JFBvaW50ZXJQcm9wZXJ0aWVzIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQkUG9pbnRlclByb3BlcnRpZXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlGcm9tKExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQkUG9pbnRlclByb3BlcnRpZXM7KVYiLz4KLQkJPGZpZWxkIG5hbWU9ImlkIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0b29sVHlwZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9PcmllbnRhdGlvbkV2ZW50TGlzdGVuZXIiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbkRldGVjdE9yaWVudGF0aW9uKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzYWJsZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuYWJsZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uT3JpZW50YXRpb25DaGFuZ2VkKEkpViIvPgotCQk8ZmllbGQgbmFtZT0iT1JJRU5UQVRJT05fVU5LTk9XTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9PcmllbnRhdGlvbkxpc3RlbmVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9oYXJkd2FyZS9TZW5zb3JMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0kpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNhYmxlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25PcmllbnRhdGlvbkNoYW5nZWQoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUklFTlRBVElPTl9VTktOT1dOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1BpeGVsQ29weSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3QoTGFuZHJvaWQvdmlldy9TdXJmYWNlO0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtMYW5kcm9pZC92aWV3L1BpeGVsQ29weSRPblBpeGVsQ29weUZpbmlzaGVkTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3QoTGFuZHJvaWQvdmlldy9TdXJmYWNlO0xhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0xhbmRyb2lkL3ZpZXcvUGl4ZWxDb3B5JE9uUGl4ZWxDb3B5RmluaXNoZWRMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0KExhbmRyb2lkL3ZpZXcvU3VyZmFjZVZpZXc7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0xhbmRyb2lkL3ZpZXcvUGl4ZWxDb3B5JE9uUGl4ZWxDb3B5RmluaXNoZWRMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdChMYW5kcm9pZC92aWV3L1N1cmZhY2VWaWV3O0xhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0xhbmRyb2lkL3ZpZXcvUGl4ZWxDb3B5JE9uUGl4ZWxDb3B5RmluaXNoZWRMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0KExhbmRyb2lkL3ZpZXcvV2luZG93O0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtMYW5kcm9pZC92aWV3L1BpeGVsQ29weSRPblBpeGVsQ29weUZpbmlzaGVkTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdChMYW5kcm9pZC92aWV3L1dpbmRvdztMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtMYW5kcm9pZC92aWV3L1BpeGVsQ29weSRPblBpeGVsQ29weUZpbmlzaGVkTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9ERVNUSU5BVElPTl9JTlZBTElEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9TT1VSQ0VfSU5WQUxJRCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfU09VUkNFX05PX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1RJTUVPVVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1VOS05PV04iLz4KLQkJPGZpZWxkIG5hbWU9IlNVQ0NFU1MiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvUGl4ZWxDb3B5JE9uUGl4ZWxDb3B5RmluaXNoZWRMaXN0ZW5lciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGl4ZWxDb3B5RmluaXNoZWQoSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1BvaW50ZXJJY29uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwO0ZGKUxhbmRyb2lkL3ZpZXcvUG9pbnRlckljb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lzdGVtSWNvbihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SSlMYW5kcm9pZC92aWV3L1BvaW50ZXJJY29uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWQoTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzO0kpTGFuZHJvaWQvdmlldy9Qb2ludGVySWNvbjsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQUxJQVMiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQUxMX1NDUk9MTCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BUlJPVyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DRUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0NPTlRFWFRfTUVOVSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DT1BZIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0NST1NTSEFJUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9ERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0dSQUIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfR1JBQkJJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSEFORCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9IRUxQIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0hPUklaT05UQUxfRE9VQkxFX0FSUk9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX05PX0RST1AiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTlVMTCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9URVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RPUF9MRUZUX0RJQUdPTkFMX0RPVUJMRV9BUlJPVyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9UT1BfUklHSFRfRElBR09OQUxfRE9VQkxFX0FSUk9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1ZFUlRJQ0FMX0RPVUJMRV9BUlJPVyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9WRVJUSUNBTF9URVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1dBSVQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfWk9PTV9JTiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9aT09NX09VVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9TY2FsZUdlc3R1cmVEZXRlY3RvciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC92aWV3L1NjYWxlR2VzdHVyZURldGVjdG9yJE9uU2NhbGVHZXN0dXJlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3ZpZXcvU2NhbGVHZXN0dXJlRGV0ZWN0b3IkT25TY2FsZUdlc3R1cmVMaXN0ZW5lcjtMYW5kcm9pZC9vcy9IYW5kbGVyOylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50U3BhbigpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRTcGFuWCgpRiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudFNwYW5ZKClGIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFdmVudFRpbWUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb2N1c1goKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb2N1c1koKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmV2aW91c1NwYW4oKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmV2aW91c1NwYW5YKClGIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmV2aW91c1NwYW5ZKClGIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2FsZUZhY3RvcigpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVEZWx0YSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5Qcm9ncmVzcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUXVpY2tTY2FsZUVuYWJsZWQoKVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3R5bHVzU2NhbGVFbmFibGVkKClaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRvdWNoRXZlbnQoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFF1aWNrU2NhbGVFbmFibGVkKFopViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3R5bHVzU2NhbGVFbmFibGVkKFopViIgc2luY2U9IjIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1NjYWxlR2VzdHVyZURldGVjdG9yJE9uU2NhbGVHZXN0dXJlTGlzdGVuZXIiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2NhbGUoTGFuZHJvaWQvdmlldy9TY2FsZUdlc3R1cmVEZXRlY3RvcjspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2NhbGVCZWdpbihMYW5kcm9pZC92aWV3L1NjYWxlR2VzdHVyZURldGVjdG9yOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TY2FsZUVuZChMYW5kcm9pZC92aWV3L1NjYWxlR2VzdHVyZURldGVjdG9yOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1NjYWxlR2VzdHVyZURldGVjdG9yJFNpbXBsZU9uU2NhbGVHZXN0dXJlTGlzdGVuZXIiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvU2NhbGVHZXN0dXJlRGV0ZWN0b3IkT25TY2FsZUdlc3R1cmVMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9TZWFyY2hFdmVudCIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L0lucHV0RGV2aWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXREZXZpY2UoKUxhbmRyb2lkL3ZpZXcvSW5wdXREZXZpY2U7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1NvdW5kRWZmZWN0Q29uc3RhbnRzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250YW50Rm9yRm9jdXNEaXJlY3Rpb24oSSlJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTElDSyIvPgotCQk8ZmllbGQgbmFtZT0iTkFWSUdBVElPTl9ET1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQVZJR0FUSU9OX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BVklHQVRJT05fUklHSFQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BVklHQVRJT05fVVAiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvU3ViTWVudSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9NZW51Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJIZWFkZXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJdGVtKClMYW5kcm9pZC92aWV3L01lbnVJdGVtOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhlYWRlckljb24oSSlMYW5kcm9pZC92aWV3L1N1Yk1lbnU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGVhZGVySWNvbihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspTGFuZHJvaWQvdmlldy9TdWJNZW51OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhlYWRlclRpdGxlKEkpTGFuZHJvaWQvdmlldy9TdWJNZW51OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhlYWRlclRpdGxlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC92aWV3L1N1Yk1lbnU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGVhZGVyVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KUxhbmRyb2lkL3ZpZXcvU3ViTWVudTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uKEkpTGFuZHJvaWQvdmlldy9TdWJNZW51OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEljb24oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KUxhbmRyb2lkL3ZpZXcvU3ViTWVudTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvU3VyZmFjZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZ3JhcGhpY3MvU3VyZmFjZVRleHR1cmU7KVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImZyZWV6ZSgpViIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJoaWRlKClWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmFsaWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2NrQ2FudmFzKExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KUxhbmRyb2lkL2dyYXBoaWNzL0NhbnZhczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2NrSGFyZHdhcmVDYW52YXMoKUxhbmRyb2lkL2dyYXBoaWNzL0NhbnZhczsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRGcm9tUGFyY2VsKExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFscGhhKEYpViIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGbGFncyhJSSlWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZyZWV6ZVRpbnQoSSlWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldExheWVyKEkpViIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXRyaXgoRkZGRilWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9yaWVudGF0aW9uKElJKVYiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9zaXRpb24oSUkpViIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaXplKElJKVYiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhbnNwYXJlbnRSZWdpb25IaW50KExhbmRyb2lkL2dyYXBoaWNzL1JlZ2lvbjspViIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93KClWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InVuZnJlZXplKClWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InVubG9ja0NhbnZhcyhMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7KVYiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5sb2NrQ2FudmFzQW5kUG9zdChMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkZYX1NVUkZBQ0VfQkxVUiIgcmVtb3ZlZD0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkZYX1NVUkZBQ0VfRElNIiByZW1vdmVkPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iRlhfU1VSRkFDRV9NQVNLIiByZW1vdmVkPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iRlhfU1VSRkFDRV9OT1JNQUwiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHUFUiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIQVJEV0FSRSIgcmVtb3ZlZD0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkhJRERFTiIgcmVtb3ZlZD0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PTl9QUkVNVUxUSVBMSUVEIiByZW1vdmVkPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iUFVTSF9CVUZGRVJTIiByZW1vdmVkPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iUk9UQVRJT05fMCIvPgotCQk8ZmllbGQgbmFtZT0iUk9UQVRJT05fMTgwIi8+Ci0JCTxmaWVsZCBuYW1lPSJST1RBVElPTl8yNzAiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVEFUSU9OXzkwIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNVUkUiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVVJBQ0VfRlJPWkVOIiByZW1vdmVkPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iU1VSRkFDRV9CTFVSX0ZSRUVaRSIgcmVtb3ZlZD0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUkZBQ0VfRElUSEVSIiByZW1vdmVkPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iU1VSRkFDRV9GUk9aRU4iIHNpbmNlPSI0IiByZW1vdmVkPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iU1VSRkFDRV9ISURERU4iIHJlbW92ZWQ9IjE0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1N1cmZhY2UkT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbiIgcmVtb3ZlZD0iMTkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9TdXJmYWNlSG9sZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDYWxsYmFjayhMYW5kcm9pZC92aWV3L1N1cmZhY2VIb2xkZXIkQ2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXJmYWNlKClMYW5kcm9pZC92aWV3L1N1cmZhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VyZmFjZUZyYW1lKClMYW5kcm9pZC9ncmFwaGljcy9SZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ3JlYXRpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2NrQ2FudmFzKClMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9ja0NhbnZhcyhMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9ja0hhcmR3YXJlQ2FudmFzKClMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVDYWxsYmFjayhMYW5kcm9pZC92aWV3L1N1cmZhY2VIb2xkZXIkQ2FsbGJhY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaXhlZFNpemUoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvcm1hdChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZWVwU2NyZWVuT24oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2l6ZUZyb21MYXlvdXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUeXBlKEkpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmxvY2tDYW52YXNBbmRQb3N0KExhbmRyb2lkL2dyYXBoaWNzL0NhbnZhczspViIvPgotCQk8ZmllbGQgbmFtZT0iU1VSRkFDRV9UWVBFX0dQVSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUkZBQ0VfVFlQRV9IQVJEV0FSRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUkZBQ0VfVFlQRV9OT1JNQUwiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVVJGQUNFX1RZUEVfUFVTSF9CVUZGRVJTIiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9TdXJmYWNlSG9sZGVyJEJhZFN1cmZhY2VUeXBlRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1N1cmZhY2VIb2xkZXIkQ2FsbGJhY2siIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InN1cmZhY2VDaGFuZ2VkKExhbmRyb2lkL3ZpZXcvU3VyZmFjZUhvbGRlcjtJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InN1cmZhY2VDcmVhdGVkKExhbmRyb2lkL3ZpZXcvU3VyZmFjZUhvbGRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InN1cmZhY2VEZXN0cm95ZWQoTGFuZHJvaWQvdmlldy9TdXJmYWNlSG9sZGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1N1cmZhY2VIb2xkZXIkQ2FsbGJhY2syIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L1N1cmZhY2VIb2xkZXIkQ2FsbGJhY2siLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXJmYWNlUmVkcmF3TmVlZGVkKExhbmRyb2lkL3ZpZXcvU3VyZmFjZUhvbGRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InN1cmZhY2VSZWRyYXdOZWVkZWRBc3luYyhMYW5kcm9pZC92aWV3L1N1cmZhY2VIb2xkZXI7TGphdmEvbGFuZy9SdW5uYWJsZTspViIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1N1cmZhY2VWaWV3IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2F0aGVyVHJhbnNwYXJlbnRSZWdpb24oTGFuZHJvaWQvZ3JhcGhpY3MvUmVnaW9uOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SG9sZGVyKClMYW5kcm9pZC92aWV3L1N1cmZhY2VIb2xkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VjdXJlKFopViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Wk9yZGVyTWVkaWFPdmVybGF5KFopViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRaT3JkZXJPblRvcChaKVYiIHNpbmNlPSI1Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1RleHR1cmVWaWV3IiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpdG1hcCgpTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpdG1hcChJSSlMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qml0bWFwKExhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cmZhY2VUZXh0dXJlKClMYW5kcm9pZC9ncmFwaGljcy9TdXJmYWNlVGV4dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXJmYWNlVGV4dHVyZUxpc3RlbmVyKClMYW5kcm9pZC92aWV3L1RleHR1cmVWaWV3JFN1cmZhY2VUZXh0dXJlTGlzdGVuZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNmb3JtKExhbmRyb2lkL2dyYXBoaWNzL01hdHJpeDspTGFuZHJvaWQvZ3JhcGhpY3MvTWF0cml4OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXZhaWxhYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9ja0NhbnZhcygpTGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvY2tDYW52YXMoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspTGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9wYXF1ZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdXJmYWNlVGV4dHVyZShMYW5kcm9pZC9ncmFwaGljcy9TdXJmYWNlVGV4dHVyZTspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VyZmFjZVRleHR1cmVMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1RleHR1cmVWaWV3JFN1cmZhY2VUZXh0dXJlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUcmFuc2Zvcm0oTGFuZHJvaWQvZ3JhcGhpY3MvTWF0cml4OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5sb2NrQ2FudmFzQW5kUG9zdChMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVGV4dHVyZVZpZXckU3VyZmFjZVRleHR1cmVMaXN0ZW5lciIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3VyZmFjZVRleHR1cmVBdmFpbGFibGUoTGFuZHJvaWQvZ3JhcGhpY3MvU3VyZmFjZVRleHR1cmU7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3VyZmFjZVRleHR1cmVEZXN0cm95ZWQoTGFuZHJvaWQvZ3JhcGhpY3MvU3VyZmFjZVRleHR1cmU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN1cmZhY2VUZXh0dXJlU2l6ZUNoYW5nZWQoTGFuZHJvaWQvZ3JhcGhpY3MvU3VyZmFjZVRleHR1cmU7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3VyZmFjZVRleHR1cmVVcGRhdGVkKExhbmRyb2lkL2dyYXBoaWNzL1N1cmZhY2VUZXh0dXJlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1RvdWNoRGVsZWdhdGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0xhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVG91Y2hFdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQk9WRSIvPgotCQk8ZmllbGQgbmFtZT0iQkVMT1ciLz4KLQkJPGZpZWxkIG5hbWU9IlRPX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IlRPX1JJR0hUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1ZlbG9jaXR5VHJhY2tlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkTW92ZW1lbnQoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcHV0ZUN1cnJlbnRWZWxvY2l0eShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlQ3VycmVudFZlbG9jaXR5KElGKVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WFZlbG9jaXR5KClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WFZlbG9jaXR5KEkpRiIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRZVmVsb2NpdHkoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRZVmVsb2NpdHkoSSlGIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbigpTGFuZHJvaWQvdmlldy9WZWxvY2l0eVRyYWNrZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVjeWNsZSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZSRDYWxsYmFjayIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvS2V5RXZlbnQkQ2FsbGJhY2siLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUV2ZW50U291cmNlIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZENoaWxkcmVuRm9yQWNjZXNzaWJpbGl0eShMamF2YS91dGlsL0FycmF5TGlzdDspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRXh0cmFEYXRhVG9BY2Nlc3NpYmlsaXR5Tm9kZUluZm8oTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mbztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEZvY3VzYWJsZXMoTGphdmEvdXRpbC9BcnJheUxpc3Q7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRm9jdXNhYmxlcyhMamF2YS91dGlsL0FycmF5TGlzdDtJSSlWIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEtleWJvYXJkTmF2aWdhdGlvbkNsdXN0ZXJzKExqYXZhL3V0aWwvQ29sbGVjdGlvbjtJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE9uQXR0YWNoU3RhdGVDaGFuZ2VMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXckT25BdHRhY2hTdGF0ZUNoYW5nZUxpc3RlbmVyOylWIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRPbkxheW91dENoYW5nZUxpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlldyRPbkxheW91dENoYW5nZUxpc3RlbmVyOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRPblVuaGFuZGxlZEtleUV2ZW50TGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3JE9uVW5oYW5kbGVkS2V5RXZlbnRMaXN0ZW5lcjspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVG91Y2hhYmxlcyhMamF2YS91dGlsL0FycmF5TGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFuaW1hdGUoKUxhbmRyb2lkL3ZpZXcvVmlld1Byb3BlcnR5QW5pbWF0b3I7IiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImF1dG9maWxsKExhbmRyb2lkL3V0aWwvU3BhcnNlQXJyYXk7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImF1dG9maWxsKExhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxWYWx1ZTspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXdha2VuU2Nyb2xsQmFycygpWiIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJhd2FrZW5TY3JvbGxCYXJzKEkpWiIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJhd2FrZW5TY3JvbGxCYXJzKElaKVoiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnJpbmdUb0Zyb250KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGREcmF3aW5nQ2FjaGUoKVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGREcmF3aW5nQ2FjaGUoWilWIiBzaW5jZT0iNCIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZExheWVyKClWIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxsT25DbGljaygpWiIgc2luY2U9IjE1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuUmVzb2x2ZUxheW91dERpcmVjdGlvbigpWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuUmVzb2x2ZVRleHRBbGlnbm1lbnQoKVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhblJlc29sdmVUZXh0RGlyZWN0aW9uKClaIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5TY3JvbGxIb3Jpem9udGFsbHkoSSlaIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5TY3JvbGxWZXJ0aWNhbGx5KEkpWiIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsRHJhZ0FuZERyb3AoKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbExvbmdQcmVzcygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbFBlbmRpbmdJbnB1dEV2ZW50cygpViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tJbnB1dENvbm5lY3Rpb25Qcm94eShMYW5kcm9pZC92aWV3L1ZpZXc7KVoiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJBbmltYXRpb24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhckZvY3VzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tYmluZU1lYXN1cmVkU3RhdGVzKElJKUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXB1dGVIb3Jpem9udGFsU2Nyb2xsRXh0ZW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcHV0ZUhvcml6b250YWxTY3JvbGxPZmZzZXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlSG9yaXpvbnRhbFNjcm9sbFJhbmdlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcHV0ZVNjcm9sbCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXB1dGVTeXN0ZW1XaW5kb3dJbnNldHMoTGFuZHJvaWQvdmlldy9XaW5kb3dJbnNldHM7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspTGFuZHJvaWQvdmlldy9XaW5kb3dJbnNldHM7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlVmVydGljYWxTY3JvbGxFeHRlbnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlVmVydGljYWxTY3JvbGxPZmZzZXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlVmVydGljYWxTY3JvbGxSYW5nZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbygpTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mbzsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUNvbnRleHRNZW51KExhbmRyb2lkL3ZpZXcvQ29udGV4dE1lbnU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXN0cm95RHJhd2luZ0NhY2hlKClWIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoQXBwbHlXaW5kb3dJbnNldHMoTGFuZHJvaWQvdmlldy9XaW5kb3dJbnNldHM7KUxhbmRyb2lkL3ZpZXcvV2luZG93SW5zZXRzOyIgc2luY2U9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hDYXB0dXJlZFBvaW50ZXJFdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaENvbmZpZ3VyYXRpb25DaGFuZ2VkKExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbmZpZ3VyYXRpb247KVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hEaXNwbGF5SGludChJKVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hEcmFnRXZlbnQoTGFuZHJvaWQvdmlldy9EcmFnRXZlbnQ7KVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoRHJhdyhMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaERyYXdhYmxlSG90c3BvdENoYW5nZWQoRkYpViIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hGaW5pc2hUZW1wb3JhcnlEZXRhY2goKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoR2VuZXJpY0ZvY3VzZWRFdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaEdlbmVyaWNNb3Rpb25FdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaEdlbmVyaWNQb2ludGVyRXZlbnQoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hIb3ZlckV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoS2V5RXZlbnQoTGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoS2V5RXZlbnRQcmVJbWUoTGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaEtleVNob3J0Y3V0RXZlbnQoTGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoTmVzdGVkRmxpbmcoRkZaKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoTmVzdGVkUHJlRmxpbmcoRkYpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hOZXN0ZWRQcmVQZXJmb3JtQWNjZXNzaWJpbGl0eUFjdGlvbihJTGFuZHJvaWQvb3MvQnVuZGxlOylaIiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaE5lc3RlZFByZVNjcm9sbChJSVtJW0kpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hOZXN0ZWRTY3JvbGwoSUlJSVtJKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoUG9pbnRlckNhcHR1cmVDaGFuZ2VkKFopViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hQb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUV2ZW50OylaIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoUHJvdmlkZUF1dG9maWxsU3RydWN0dXJlKExhbmRyb2lkL3ZpZXcvVmlld1N0cnVjdHVyZTtJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoUHJvdmlkZVN0cnVjdHVyZShMYW5kcm9pZC92aWV3L1ZpZXdTdHJ1Y3R1cmU7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoUmVzdG9yZUluc3RhbmNlU3RhdGUoTGFuZHJvaWQvdXRpbC9TcGFyc2VBcnJheTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoU2F2ZUluc3RhbmNlU3RhdGUoTGFuZHJvaWQvdXRpbC9TcGFyc2VBcnJheTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoU2V0QWN0aXZhdGVkKFopViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hTZXRQcmVzc2VkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoU2V0U2VsZWN0ZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hTdGFydFRlbXBvcmFyeURldGFjaCgpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hTeXN0ZW1VaVZpc2liaWxpdHlDaGFuZ2VkKEkpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hUb3VjaEV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaFRyYWNrYmFsbEV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaFVuaGFuZGxlZE1vdmUoTGFuZHJvaWQvdmlldy9WaWV3O0kpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoVmlzaWJpbGl0eUNoYW5nZWQoTGFuZHJvaWQvdmlldy9WaWV3O0kpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaFdpbmRvd0ZvY3VzQ2hhbmdlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaFdpbmRvd1N5c3RlbVVpVmlzaWJsaXR5Q2hhbmdlZChJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoV2luZG93VmlzaWJpbGl0eUNoYW5nZWQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhdyhMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3YWJsZUhvdHNwb3RDaGFuZ2VkKEZGKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXdhYmxlU3RhdGVDaGFuZ2VkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEZvY3VzKClMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZFZpZXdCeUlkKEkpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRWaWV3V2l0aFRhZyhMamF2YS9sYW5nL09iamVjdDspTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRWaWV3c1dpdGhUZXh0KExqYXZhL3V0aWwvQXJyYXlMaXN0O0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0kpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZml0U3lzdGVtV2luZG93cyhMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylaIiBkZXByZWNhdGVkPSIyMCIvPgotCQk8bWV0aG9kIG5hbWU9ImZpdHNTeXN0ZW1XaW5kb3dzKClaIiBzaW5jZT0iMTQiIHJlbW92ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9jdXNTZWFyY2goSSlMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yY2VIYXNPdmVybGFwcGluZ1JlbmRlcmluZyhaKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcmNlTGF5b3V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVWaWV3SWQoKUkiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjY2Vzc2liaWxpdHlDbGFzc05hbWUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNjZXNzaWJpbGl0eUxpdmVSZWdpb24oKUkiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjY2Vzc2liaWxpdHlOb2RlUHJvdmlkZXIoKUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZVByb3ZpZGVyOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNjZXNzaWJpbGl0eVBhbmVUaXRsZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY2Nlc3NpYmlsaXR5VHJhdmVyc2FsQWZ0ZXIoKUkiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjY2Vzc2liaWxpdHlUcmF2ZXJzYWxCZWZvcmUoKUkiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFscGhhKClGIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmltYXRpb24oKUxhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcHBsaWNhdGlvbldpbmRvd1Rva2VuKClMYW5kcm9pZC9vcy9JQmluZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1dG9maWxsSGludHMoKVtMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1dG9maWxsSWQoKUxhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxJZDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1dG9maWxsVHlwZSgpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0b2ZpbGxWYWx1ZSgpTGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbFZhbHVlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFja2dyb3VuZCgpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFja2dyb3VuZFRpbnRMaXN0KClMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhY2tncm91bmRUaW50TW9kZSgpTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFzZWxpbmUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb3R0b20oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb3R0b21GYWRpbmdFZGdlU3RyZW5ndGgoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb3R0b21QYWRkaW5nT2Zmc2V0KClJIiBzaW5jZT0iMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbWVyYURpc3RhbmNlKClGIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGlwQm91bmRzKClMYW5kcm9pZC9ncmFwaGljcy9SZWN0OyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xpcEJvdW5kcyhMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGlwVG9PdXRsaW5lKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50RGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZXh0KClMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGV4dE1lbnVJbmZvKClMYW5kcm9pZC92aWV3L0NvbnRleHRNZW51JENvbnRleHRNZW51SW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0Rm9jdXNIaWdobGlnaHRFbmFibGVkKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0U2l6ZShJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheSgpTGFuZHJvaWQvdmlldy9EaXNwbGF5OyIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJhd2FibGVTdGF0ZSgpW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcmF3aW5nQ2FjaGUoKUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJhd2luZ0NhY2hlKFopTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIgc2luY2U9IjQiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJhd2luZ0NhY2hlQmFja2dyb3VuZENvbG9yKClJIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyYXdpbmdDYWNoZVF1YWxpdHkoKUkiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJhd2luZ1JlY3QoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyYXdpbmdUaW1lKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RWxldmF0aW9uKClGIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWx0ZXJUb3VjaGVzV2hlbk9ic2N1cmVkKClaIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpdHNTeXN0ZW1XaW5kb3dzKClaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb2N1c2FibGUoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvY3VzYWJsZXMoSSlMamF2YS91dGlsL0FycmF5TGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb2N1c2VkUmVjdChMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9yZWdyb3VuZCgpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JlZ3JvdW5kR3Jhdml0eSgpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9yZWdyb3VuZFRpbnRMaXN0KClMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcmVncm91bmRUaW50TW9kZSgpTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2xvYmFsVmlzaWJsZVJlY3QoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdsb2JhbFZpc2libGVSZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7TGFuZHJvaWQvZ3JhcGhpY3MvUG9pbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIYW5kbGVyKClMYW5kcm9pZC9vcy9IYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhhc092ZXJsYXBwaW5nUmVuZGVyaW5nKClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaXRSZWN0KExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3Jpem9udGFsRmFkaW5nRWRnZUxlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEltcG9ydGFudEZvckF1dG9maWxsKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZWVwU2NyZWVuT24oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlEaXNwYXRjaGVyU3RhdGUoKUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQkRGlzcGF0Y2hlclN0YXRlOyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYWJlbEZvcigpSSIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5ZXJUeXBlKClJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXlvdXREaXJlY3Rpb24oKUkiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheW91dFBhcmFtcygpTGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExlZnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZWZ0RmFkaW5nRWRnZVN0cmVuZ3RoKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGVmdFBhZGRpbmdPZmZzZXQoKUkiIHNpbmNlPSIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxWaXNpYmxlUmVjdChMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYXRpb25JbldpbmRvdyhbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYXRpb25PblNjcmVlbihbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF0cml4KClMYW5kcm9pZC9ncmFwaGljcy9NYXRyaXg7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZWFzdXJlZEhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lYXN1cmVkSGVpZ2h0QW5kU3RhdGUoKUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lYXN1cmVkU3RhdGUoKUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lYXN1cmVkV2lkdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZWFzdXJlZFdpZHRoQW5kU3RhdGUoKUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbmltdW1IZWlnaHQoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbmltdW1XaWR0aCgpSSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV4dENsdXN0ZXJGb3J3YXJkSWQoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5leHRGb2N1c0Rvd25JZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5leHRGb2N1c0ZvcndhcmRJZCgpSSIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV4dEZvY3VzTGVmdElkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV4dEZvY3VzUmlnaHRJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5leHRGb2N1c1VwSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPbkZvY3VzQ2hhbmdlTGlzdGVuZXIoKUxhbmRyb2lkL3ZpZXcvVmlldyRPbkZvY3VzQ2hhbmdlTGlzdGVuZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3V0bGluZUFtYmllbnRTaGFkb3dDb2xvcigpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3V0bGluZVByb3ZpZGVyKClMYW5kcm9pZC92aWV3L1ZpZXdPdXRsaW5lUHJvdmlkZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRsaW5lU3BvdFNoYWRvd0NvbG9yKClJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdmVyU2Nyb2xsTW9kZSgpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdmVybGF5KClMYW5kcm9pZC92aWV3L1ZpZXdPdmVybGF5OyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFkZGluZ0JvdHRvbSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhZGRpbmdFbmQoKUkiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhZGRpbmdMZWZ0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFkZGluZ1JpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFkZGluZ1N0YXJ0KClJIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWRkaW5nVG9wKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50KClMYW5kcm9pZC92aWV3L1ZpZXdQYXJlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50Rm9yQWNjZXNzaWJpbGl0eSgpTGFuZHJvaWQvdmlldy9WaWV3UGFyZW50OyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGl2b3RYKClGIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQaXZvdFkoKUYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvaW50ZXJJY29uKClMYW5kcm9pZC92aWV3L1BvaW50ZXJJY29uOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzb3VyY2VzKClMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmV2ZWFsT25Gb2N1c0hpbnQoKVoiIHNpbmNlPSIyNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmlnaHRGYWRpbmdFZGdlU3RyZW5ndGgoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSaWdodFBhZGRpbmdPZmZzZXQoKUkiIHNpbmNlPSIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um9vdFZpZXcoKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb290V2luZG93SW5zZXRzKClMYW5kcm9pZC92aWV3L1dpbmRvd0luc2V0czsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvdGF0aW9uKClGIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3RhdGlvblgoKUYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvdGF0aW9uWSgpRiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhbGVYKClGIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2FsZVkoKUYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjcm9sbEJhckRlZmF1bHREZWxheUJlZm9yZUZhZGUoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjcm9sbEJhckZhZGVEdXJhdGlvbigpSSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Nyb2xsQmFyU2l6ZSgpSSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Nyb2xsQmFyU3R5bGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY3JvbGxJbmRpY2F0b3JzKClJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY3JvbGxYKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Nyb2xsWSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvbGlkQ29sb3IoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0ZUxpc3RBbmltYXRvcigpTGFuZHJvaWQvYW5pbWF0aW9uL1N0YXRlTGlzdEFuaW1hdG9yOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VnZ2VzdGVkTWluaW11bUhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1Z2dlc3RlZE1pbmltdW1XaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5c3RlbVVpVmlzaWJpbGl0eSgpSSIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFnKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWcoSSlMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dEFsaWdubWVudCgpSSIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dERpcmVjdGlvbigpSSIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9vbHRpcFRleHQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9wKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9wRmFkaW5nRWRnZVN0cmVuZ3RoKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9wUGFkZGluZ09mZnNldCgpSSIgc2luY2U9IjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3VjaERlbGVnYXRlKClMYW5kcm9pZC92aWV3L1RvdWNoRGVsZWdhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG91Y2hhYmxlcygpTGphdmEvdXRpbC9BcnJheUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNpdGlvbk5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNsYXRpb25YKClGIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFuc2xhdGlvblkoKUYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYW5zbGF0aW9uWigpRiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVydGljYWxGYWRpbmdFZGdlTGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVydGljYWxTY3JvbGxiYXJQb3NpdGlvbigpSSIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVydGljYWxTY3JvbGxiYXJXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZXdUcmVlT2JzZXJ2ZXIoKUxhbmRyb2lkL3ZpZXcvVmlld1RyZWVPYnNlcnZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaXNpYmlsaXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaW5kb3dBdHRhY2hDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpbmRvd0lkKClMYW5kcm9pZC92aWV3L1dpbmRvd0lkOyIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2luZG93U3lzdGVtVWlWaXNpYmlsaXR5KClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaW5kb3dUb2tlbigpTGFuZHJvaWQvb3MvSUJpbmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaW5kb3dWaXNpYmlsaXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2luZG93VmlzaWJsZURpc3BsYXlGcmFtZShMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFgoKUYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFkoKUYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFooKUYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0V4cGxpY2l0Rm9jdXNhYmxlKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNGb2N1cygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0ZvY3VzYWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc05lc3RlZFNjcm9sbGluZ1BhcmVudCgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzT25DbGlja0xpc3RlbmVycygpWiIgc2luY2U9IjE1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1BvaW50ZXJDYXB0dXJlKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNUcmFuc2llbnRTdGF0ZSgpWiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzV2luZG93Rm9jdXMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmZsYXRlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJTGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7KUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0aWFsaXplRmFkaW5nRWRnZShMYW5kcm9pZC9jb250ZW50L3Jlcy9UeXBlZEFycmF5OylWIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXRpYWxpemVTY3JvbGxiYXJzKExhbmRyb2lkL2NvbnRlbnQvcmVzL1R5cGVkQXJyYXk7KVYiIHJlbW92ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW52YWxpZGF0ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImludmFsaWRhdGUoSUlJSSlWIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImludmFsaWRhdGUoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZhbGlkYXRlT3V0bGluZSgpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBY2Nlc3NpYmlsaXR5Rm9jdXNlZCgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBY2Nlc3NpYmlsaXR5SGVhZGluZygpWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBY3RpdmF0ZWQoKVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXR0YWNoZWRUb1dpbmRvdygpWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDbGlja2FibGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbnRleHRDbGlja2FibGUoKVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGlydHkoKVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRHJhd2luZ0NhY2hlRW5hYmxlZCgpWiIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0R1cGxpY2F0ZVBhcmVudFN0YXRlRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRm9jdXNhYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGb2N1c2FibGVJblRvdWNoTW9kZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRm9jdXNlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRm9jdXNlZEJ5RGVmYXVsdCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNIYXB0aWNGZWVkYmFja0VuYWJsZWQoKVoiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNIYXJkd2FyZUFjY2VsZXJhdGVkKClaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0hvcml6b250YWxGYWRpbmdFZGdlRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSG9yaXpvbnRhbFNjcm9sbEJhckVuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0hvdmVyZWQoKVoiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbXBvcnRhbnRGb3JBdXRvZmlsbCgpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbkVkaXRNb2RlKClaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5MYXlvdXQoKVoiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5Ub3VjaE1vZGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0tleWJvYXJkTmF2aWdhdGlvbkNsdXN0ZXIoKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTGFpZE91dCgpWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMYXlvdXREaXJlY3Rpb25SZXNvbHZlZCgpWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMYXlvdXRSZXF1ZXN0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xvbmdDbGlja2FibGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05lc3RlZFNjcm9sbGluZ0VuYWJsZWQoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT3BhcXVlKClaIiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGFkZGluZ09mZnNldFJlcXVpcmVkKClaIiBzaW5jZT0iMiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGFkZGluZ1JlbGF0aXZlKClaIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Bpdm90U2V0KClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ByZXNzZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NhdmVFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTYXZlRnJvbVBhcmVudEVuYWJsZWQoKVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2NyZWVuUmVhZGVyRm9jdXNhYmxlKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Njcm9sbENvbnRhaW5lcigpWiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTY3JvbGxiYXJGYWRpbmdFbmFibGVkKClaIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2VsZWN0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Nob3duKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTb3VuZEVmZmVjdHNFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUZW1wb3JhcmlseURldGFjaGVkKClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RleHRBbGlnbm1lbnRSZXNvbHZlZCgpWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUZXh0RGlyZWN0aW9uUmVzb2x2ZWQoKVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmVydGljYWxGYWRpbmdFZGdlRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmVydGljYWxTY3JvbGxCYXJFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWaXNpYmxlVG9Vc2VyRm9yQXV0b2ZpbGwoSSlaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJqdW1wRHJhd2FibGVzVG9DdXJyZW50U3RhdGUoKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImtleWJvYXJkTmF2aWdhdGlvbkNsdXN0ZXJTZWFyY2goTGFuZHJvaWQvdmlldy9WaWV3O0kpTGFuZHJvaWQvdmlldy9WaWV3OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibGF5b3V0KElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im1lYXN1cmUoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im1lcmdlRHJhd2FibGVTdGF0ZXMoW0lbSSlbSSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mZnNldExlZnRBbmRSaWdodChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZmZzZXRUb3BBbmRCb3R0b20oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BbmltYXRpb25FbmQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFuaW1hdGlvblN0YXJ0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BcHBseVdpbmRvd0luc2V0cyhMYW5kcm9pZC92aWV3L1dpbmRvd0luc2V0czspTGFuZHJvaWQvdmlldy9XaW5kb3dJbnNldHM7IiBzaW5jZT0iMjAiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF0dGFjaGVkVG9XaW5kb3coKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhbmNlbFBlbmRpbmdJbnB1dEV2ZW50cygpViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DYXB0dXJlZFBvaW50ZXJFdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNoZWNrSXNUZXh0RWRpdG9yKClaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29uZmlndXJhdGlvbkNoYW5nZWQoTGFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbjspViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZUNvbnRleHRNZW51KExhbmRyb2lkL3ZpZXcvQ29udGV4dE1lbnU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZURyYXdhYmxlU3RhdGUoSSlbSSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlSW5wdXRDb25uZWN0aW9uKExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvRWRpdG9ySW5mbzspTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dENvbm5lY3Rpb247IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGV0YWNoZWRGcm9tV2luZG93KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EaXNwbGF5SGludChJKVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25EcmFnRXZlbnQoTGFuZHJvaWQvdmlldy9EcmFnRXZlbnQ7KVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRHJhdyhMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRyYXdGb3JlZ3JvdW5kKExhbmRyb2lkL2dyYXBoaWNzL0NhbnZhczspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EcmF3U2Nyb2xsQmFycyhMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7KVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25GaWx0ZXJUb3VjaEV2ZW50Rm9yU2VjdXJpdHkoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZpbmlzaEluZmxhdGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZpbmlzaFRlbXBvcmFyeURldGFjaCgpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZvY3VzQ2hhbmdlZChaSUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdlbmVyaWNNb3Rpb25FdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkhvdmVyQ2hhbmdlZChaKVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSG92ZXJFdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFdmVudDspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKExhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm87KVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uS2V5UHJlSW1lKElMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uS2V5U2hvcnRjdXQoSUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxheW91dChaSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25NZWFzdXJlKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk92ZXJTY3JvbGxlZChJSVpaKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Qb2ludGVyQ2FwdHVyZUNoYW5nZShaKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFdmVudDspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Qcm92aWRlQXV0b2ZpbGxTdHJ1Y3R1cmUoTGFuZHJvaWQvdmlldy9WaWV3U3RydWN0dXJlO0kpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Qcm92aWRlQXV0b2ZpbGxWaXJ0dWFsU3RydWN0dXJlKExhbmRyb2lkL3ZpZXcvVmlld1N0cnVjdHVyZTtJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJvdmlkZVN0cnVjdHVyZShMYW5kcm9pZC92aWV3L1ZpZXdTdHJ1Y3R1cmU7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJvdmlkZVZpcnR1YWxTdHJ1Y3R1cmUoTGFuZHJvaWQvdmlldy9WaWV3U3RydWN0dXJlOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlc29sdmVQb2ludGVySWNvbihMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50O0kpTGFuZHJvaWQvdmlldy9Qb2ludGVySWNvbjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVzdG9yZUluc3RhbmNlU3RhdGUoTGFuZHJvaWQvb3MvUGFyY2VsYWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUnRsUHJvcGVydGllc0NoYW5nZWQoSSlWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNhdmVJbnN0YW5jZVN0YXRlKClMYW5kcm9pZC9vcy9QYXJjZWxhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2NyZWVuU3RhdGVDaGFuZ2VkKEkpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TY3JvbGxDaGFuZ2VkKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2V0QWxwaGEoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TaXplQ2hhbmdlZChJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXJ0VGVtcG9yYXJ5RGV0YWNoKClWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVG91Y2hFdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UcmFja2JhbGxFdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25WaXNpYmlsaXR5QWdncmVnYXRlZChaKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVmlzaWJpbGl0eUNoYW5nZWQoTGFuZHJvaWQvdmlldy9WaWV3O0kpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbldpbmRvd0ZvY3VzQ2hhbmdlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbldpbmRvd1N5c3RlbVVpVmlzaWJpbGl0eUNoYW5nZWQoSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbldpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im92ZXJTY3JvbGxCeShJSUlJSUlJSVopWiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJmb3JtQWNjZXNzaWJpbGl0eUFjdGlvbihJTGFuZHJvaWQvb3MvQnVuZGxlOylaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJmb3JtQ2xpY2soKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJmb3JtQ29udGV4dENsaWNrKClaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJmb3JtQ29udGV4dENsaWNrKEZGKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBlcmZvcm1IYXB0aWNGZWVkYmFjayhJKVoiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVyZm9ybUhhcHRpY0ZlZWRiYWNrKElJKVoiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVyZm9ybUxvbmdDbGljaygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBlcmZvcm1Mb25nQ2xpY2soRkYpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGxheVNvdW5kRWZmZWN0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InBvc3QoTGphdmEvbGFuZy9SdW5uYWJsZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InBvc3REZWxheWVkKExqYXZhL2xhbmcvUnVubmFibGU7SilaIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9zdEludmFsaWRhdGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0SW52YWxpZGF0ZShJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0SW52YWxpZGF0ZURlbGF5ZWQoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9zdEludmFsaWRhdGVEZWxheWVkKEpJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0SW52YWxpZGF0ZU9uQW5pbWF0aW9uKClWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0SW52YWxpZGF0ZU9uQW5pbWF0aW9uKElJSUkpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG9zdE9uQW5pbWF0aW9uKExqYXZhL2xhbmcvUnVubmFibGU7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InBvc3RPbkFuaW1hdGlvbkRlbGF5ZWQoTGphdmEvbGFuZy9SdW5uYWJsZTtKKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlZnJlc2hEcmF3YWJsZVN0YXRlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZVBvaW50ZXJDYXB0dXJlKClWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVDYWxsYmFja3MoTGphdmEvbGFuZy9SdW5uYWJsZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU9uQXR0YWNoU3RhdGVDaGFuZ2VMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXckT25BdHRhY2hTdGF0ZUNoYW5nZUxpc3RlbmVyOylWIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVPbkxheW91dENoYW5nZUxpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlldyRPbkxheW91dENoYW5nZUxpc3RlbmVyOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVPblVuaGFuZGxlZEtleUV2ZW50TGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3JE9uVW5oYW5kbGVkS2V5RXZlbnRMaXN0ZW5lcjspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdEFwcGx5SW5zZXRzKClWIiBzaW5jZT0iMjAiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Rml0U3lzdGVtV2luZG93cygpViIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyMCIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RGb2N1cygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RGb2N1cyhJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Rm9jdXMoSUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Rm9jdXNGcm9tVG91Y2goKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0TGF5b3V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFBvaW50ZXJDYXB0dXJlKClWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0UmVjdGFuZ2xlT25TY3JlZW4oTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RSZWN0YW5nbGVPblNjcmVlbihMYW5kcm9pZC9ncmFwaGljcy9SZWN0O1opWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RVbmJ1ZmZlcmVkRGlzcGF0Y2goTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWlyZVZpZXdCeUlkKEkpTGFuZHJvaWQvdmlldy9WaWV3OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXRQaXZvdCgpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZVNpemUoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmVTaXplQW5kU3RhdGUoSUlJKUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlc3RvcmVEZWZhdWx0Rm9jdXMoKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc3RvcmVIaWVyYXJjaHlTdGF0ZShMYW5kcm9pZC91dGlsL1NwYXJzZUFycmF5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2F2ZUhpZXJhcmNoeVN0YXRlKExhbmRyb2lkL3V0aWwvU3BhcnNlQXJyYXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY3JvbGxCeShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2Nyb2xsVG8oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZShMYW5kcm9pZC92aWV3L1ZpZXckQWNjZXNzaWJpbGl0eURlbGVnYXRlOylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBY2Nlc3NpYmlsaXR5SGVhZGluZyhaKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjY2Vzc2liaWxpdHlMaXZlUmVnaW9uKEkpViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWNjZXNzaWJpbGl0eVBhbmVUaXRsZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWNjZXNzaWJpbGl0eVRyYXZlcnNhbEFmdGVyKEkpViIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWNjZXNzaWJpbGl0eVRyYXZlcnNhbEJlZm9yZShJKVYiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjdGl2YXRlZChaKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFscGhhKEYpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QW5pbWF0aW9uKExhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dG9maWxsSGludHMoW0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdXRvZmlsbElkKExhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxJZDspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmFja2dyb3VuZChMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmFja2dyb3VuZENvbG9yKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJhY2tncm91bmREcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCYWNrZ3JvdW5kUmVzb3VyY2UoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmFja2dyb3VuZFRpbnRMaXN0KExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCYWNrZ3JvdW5kVGludE1vZGUoTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCb3R0b20oSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYW1lcmFEaXN0YW5jZShGKVYiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENsaWNrYWJsZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGlwQm91bmRzKExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldENsaXBUb091dGxpbmUoWilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50RGVzY3JpcHRpb24oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGV4dENsaWNrYWJsZShaKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHRGb2N1c0hpZ2hsaWdodEVuYWJsZWQoWilWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREcmF3aW5nQ2FjaGVCYWNrZ3JvdW5kQ29sb3IoSSlWIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERyYXdpbmdDYWNoZUVuYWJsZWQoWilWIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERyYXdpbmdDYWNoZVF1YWxpdHkoSSlWIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldER1cGxpY2F0ZVBhcmVudFN0YXRlRW5hYmxlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbGV2YXRpb24oRilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZhZGluZ0VkZ2VMZW5ndGgoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmlsdGVyVG91Y2hlc1doZW5PYnNjdXJlZChaKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rml0c1N5c3RlbVdpbmRvd3MoWilWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb2N1c2FibGUoSSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb2N1c2FibGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9jdXNhYmxlSW5Ub3VjaE1vZGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9jdXNlZEJ5RGVmYXVsdChaKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvcmVncm91bmQoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvcmVncm91bmRHcmF2aXR5KEkpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9yZWdyb3VuZFRpbnRMaXN0KExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb3JlZ3JvdW5kVGludE1vZGUoTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIYXB0aWNGZWVkYmFja0VuYWJsZWQoWilWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhhc1RyYW5zaWVudFN0YXRlKFopViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG9yaXpvbnRhbEZhZGluZ0VkZ2VFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhvcml6b250YWxTY3JvbGxCYXJFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhvdmVyZWQoWilWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KEkpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW1wb3J0YW50Rm9yQXV0b2ZpbGwoSSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZWVwU2NyZWVuT24oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2V5Ym9hcmROYXZpZ2F0aW9uQ2x1c3RlcihaKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldExhYmVsRm9yKEkpViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5ZXJQYWludChMYW5kcm9pZC9ncmFwaGljcy9QYWludDspViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5ZXJUeXBlKElMYW5kcm9pZC9ncmFwaGljcy9QYWludDspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5b3V0RGlyZWN0aW9uKEkpViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5b3V0UGFyYW1zKExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExlZnQoSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb25nQ2xpY2thYmxlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1lYXN1cmVkRGltZW5zaW9uKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNaW5pbXVtSGVpZ2h0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbmltdW1XaWR0aChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROZXN0ZWRTY3JvbGxpbmdFbmFibGVkKFopViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmV4dENsdXN0ZXJGb3J3YXJkSWQoSSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROZXh0Rm9jdXNEb3duSWQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmV4dEZvY3VzRm9yd2FyZElkKEkpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmV4dEZvY3VzTGVmdElkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5leHRGb2N1c1JpZ2h0SWQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmV4dEZvY3VzVXBJZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkFwcGx5V2luZG93SW5zZXRzTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3JE9uQXBwbHlXaW5kb3dJbnNldHNMaXN0ZW5lcjspViIgc2luY2U9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25DYXB0dXJlZFBvaW50ZXJMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXckT25DYXB0dXJlZFBvaW50ZXJMaXN0ZW5lcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25DbGlja0xpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlldyRPbkNsaWNrTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkNvbnRleHRDbGlja0xpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlldyRPbkNvbnRleHRDbGlja0xpc3RlbmVyOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkNyZWF0ZUNvbnRleHRNZW51TGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3JE9uQ3JlYXRlQ29udGV4dE1lbnVMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uRHJhZ0xpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlldyRPbkRyYWdMaXN0ZW5lcjspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25Gb2N1c0NoYW5nZUxpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlldyRPbkZvY3VzQ2hhbmdlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkdlbmVyaWNNb3Rpb25MaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXckT25HZW5lcmljTW90aW9uTGlzdGVuZXI7KVYiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uSG92ZXJMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXckT25Ib3Zlckxpc3RlbmVyOylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbktleUxpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlldyRPbktleUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25Mb25nQ2xpY2tMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXckT25Mb25nQ2xpY2tMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uU2Nyb2xsQ2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3JE9uU2Nyb2xsQ2hhbmdlTGlzdGVuZXI7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uU3lzdGVtVWlWaXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3JE9uU3lzdGVtVWlWaXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXI7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uVG91Y2hMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXckT25Ub3VjaExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3V0bGluZUFtYmllbnRTaGFkb3dDb2xvcihJKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE91dGxpbmVQcm92aWRlcihMYW5kcm9pZC92aWV3L1ZpZXdPdXRsaW5lUHJvdmlkZXI7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE91dGxpbmVTcG90U2hhZG93Q29sb3IoSSlWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdmVyU2Nyb2xsTW9kZShJKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFkZGluZyhJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYWRkaW5nUmVsYXRpdmUoSUlJSSlWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQaXZvdFgoRilWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQaXZvdFkoRilWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb2ludGVySWNvbihMYW5kcm9pZC92aWV3L1BvaW50ZXJJY29uOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmVzc2VkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJldmVhbE9uRm9jdXNIaW50KFopViIgc2luY2U9IjI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmlnaHQoSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSb3RhdGlvbihGKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJvdGF0aW9uWChGKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJvdGF0aW9uWShGKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNhdmVFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNhdmVGcm9tUGFyZW50RW5hYmxlZChaKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjYWxlWChGKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjYWxlWShGKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjcmVlblJlYWRlckZvY3VzYWJsZShaKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjcm9sbEJhckRlZmF1bHREZWxheUJlZm9yZUZhZGUoSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY3JvbGxCYXJGYWRlRHVyYXRpb24oSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY3JvbGxCYXJTaXplKEkpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2Nyb2xsQmFyU3R5bGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2Nyb2xsQ29udGFpbmVyKFopViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY3JvbGxJbmRpY2F0b3JzKEkpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2Nyb2xsSW5kaWNhdG9ycyhJSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY3JvbGxYKEkpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2Nyb2xsWShJKVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjcm9sbGJhckZhZGluZ0VuYWJsZWQoWilWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbGVjdGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNvdW5kRWZmZWN0c0VuYWJsZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RhdGVMaXN0QW5pbWF0b3IoTGFuZHJvaWQvYW5pbWF0aW9uL1N0YXRlTGlzdEFuaW1hdG9yOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTeXN0ZW1VaVZpc2liaWxpdHkoSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUYWcoSUxqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRhZyhMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRBbGlnbm1lbnQoSSlWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0RGlyZWN0aW9uKEkpViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VG9vbHRpcFRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRvcChJKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRvdWNoRGVsZWdhdGUoTGFuZHJvaWQvdmlldy9Ub3VjaERlbGVnYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhbnNpdGlvbk5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyYW5zbGF0aW9uWChGKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyYW5zbGF0aW9uWShGKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyYW5zbGF0aW9uWihGKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZlcnRpY2FsRmFkaW5nRWRnZUVuYWJsZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmVydGljYWxTY3JvbGxCYXJFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZlcnRpY2FsU2Nyb2xsYmFyUG9zaXRpb24oSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaXNpYmlsaXR5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdpbGxOb3RDYWNoZURyYXdpbmcoWilWIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdpbGxOb3REcmF3KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFgoRilWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRZKEYpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0WihGKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dDb250ZXh0TWVudSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dDb250ZXh0TWVudShGRilaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEFjdGlvbk1vZGUoTGFuZHJvaWQvdmlldy9BY3Rpb25Nb2RlJENhbGxiYWNrOylMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGU7IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEFjdGlvbk1vZGUoTGFuZHJvaWQvdmlldy9BY3Rpb25Nb2RlJENhbGxiYWNrO0kpTGFuZHJvaWQvdmlldy9BY3Rpb25Nb2RlOyIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRBbmltYXRpb24oTGFuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnREcmFnKExhbmRyb2lkL2NvbnRlbnQvQ2xpcERhdGE7TGFuZHJvaWQvdmlldy9WaWV3JERyYWdTaGFkb3dCdWlsZGVyO0xqYXZhL2xhbmcvT2JqZWN0O0kpWiIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0RHJhZ0FuZERyb3AoTGFuZHJvaWQvY29udGVudC9DbGlwRGF0YTtMYW5kcm9pZC92aWV3L1ZpZXckRHJhZ1NoYWRvd0J1aWxkZXI7TGphdmEvbGFuZy9PYmplY3Q7SSlaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydE5lc3RlZFNjcm9sbChJKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BOZXN0ZWRTY3JvbGwoKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InVuc2NoZWR1bGVEcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZURyYWdTaGFkb3coTGFuZHJvaWQvdmlldy9WaWV3JERyYWdTaGFkb3dCdWlsZGVyOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2ZXJpZnlEcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9IndpbGxOb3RDYWNoZURyYXdpbmcoKVoiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2lsbE5vdERyYXcoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VTU0lCSUxJVFlfTElWRV9SRUdJT05fQVNTRVJUSVZFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VTU0lCSUxJVFlfTElWRV9SRUdJT05fTk9ORSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0NFU1NJQklMSVRZX0xJVkVfUkVHSU9OX1BPTElURSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTFBIQSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRPRklMTF9GTEFHX0lOQ0xVREVfTk9UX0lNUE9SVEFOVF9WSUVXUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRPRklMTF9ISU5UX0NSRURJVF9DQVJEX0VYUElSQVRJT05fREFURSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRPRklMTF9ISU5UX0NSRURJVF9DQVJEX0VYUElSQVRJT05fREFZIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVE9GSUxMX0hJTlRfQ1JFRElUX0NBUkRfRVhQSVJBVElPTl9NT05USCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRPRklMTF9ISU5UX0NSRURJVF9DQVJEX0VYUElSQVRJT05fWUVBUiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRPRklMTF9ISU5UX0NSRURJVF9DQVJEX05VTUJFUiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRPRklMTF9ISU5UX0NSRURJVF9DQVJEX1NFQ1VSSVRZX0NPREUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQVVUT0ZJTExfSElOVF9FTUFJTF9BRERSRVNTIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVE9GSUxMX0hJTlRfTkFNRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRPRklMTF9ISU5UX1BBU1NXT1JEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVE9GSUxMX0hJTlRfUEhPTkUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQVVUT0ZJTExfSElOVF9QT1NUQUxfQUREUkVTUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRPRklMTF9ISU5UX1BPU1RBTF9DT0RFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVE9GSUxMX0hJTlRfVVNFUk5BTUUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQVVUT0ZJTExfVFlQRV9EQVRFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVE9GSUxMX1RZUEVfTElTVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRPRklMTF9UWVBFX05PTkUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQVVUT0ZJTExfVFlQRV9URVhUIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVE9GSUxMX1RZUEVfVE9HR0xFIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkRSQUdfRkxBR19HTE9CQUwiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRFJBR19GTEFHX0dMT0JBTF9QRVJTSVNUQUJMRV9VUklfUEVSTUlTU0lPTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEUkFHX0ZMQUdfR0xPQkFMX1BSRUZJWF9VUklfUEVSTUlTU0lPTiIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEUkFHX0ZMQUdfR0xPQkFMX1VSSV9SRUFEIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRSQUdfRkxBR19HTE9CQUxfVVJJX1dSSVRFIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkRSQUdfRkxBR19PUEFRVUUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iRFJBV0lOR19DQUNIRV9RVUFMSVRZX0FVVE8iIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEUkFXSU5HX0NBQ0hFX1FVQUxJVFlfSElHSCIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRSQVdJTkdfQ0FDSEVfUVVBTElUWV9MT1ciIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTVBUWV9TVEFURV9TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQUJMRURfRk9DVVNFRF9TRUxFQ1RFRF9TVEFURV9TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQUJMRURfRk9DVVNFRF9TRUxFQ1RFRF9XSU5ET1dfRk9DVVNFRF9TVEFURV9TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQUJMRURfRk9DVVNFRF9TVEFURV9TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQUJMRURfRk9DVVNFRF9XSU5ET1dfRk9DVVNFRF9TVEFURV9TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQUJMRURfU0VMRUNURURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkFCTEVEX1NFTEVDVEVEX1dJTkRPV19GT0NVU0VEX1NUQVRFX1NFVCIvPgotCQk8ZmllbGQgbmFtZT0iRU5BQkxFRF9TVEFURV9TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQUJMRURfV0lORE9XX0ZPQ1VTRURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSU5EX1ZJRVdTX1dJVEhfQ09OVEVOVF9ERVNDUklQVElPTiIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGSU5EX1ZJRVdTX1dJVEhfVEVYVCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT0NVU0FCTEUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRk9DVVNBQkxFU19BTEwiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT0NVU0FCTEVTX1RPVUNIX01PREUiIHNpbmNlPSI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT0NVU0FCTEVfQVVUTyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT0NVU0VEX1NFTEVDVEVEX1NUQVRFX1NFVCIvPgotCQk8ZmllbGQgbmFtZT0iRk9DVVNFRF9TRUxFQ1RFRF9XSU5ET1dfRk9DVVNFRF9TVEFURV9TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkZPQ1VTRURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT0NVU0VEX1dJTkRPV19GT0NVU0VEX1NUQVRFX1NFVCIvPgotCQk8ZmllbGQgbmFtZT0iRk9DVVNfQkFDS1dBUkQiLz4KLQkJPGZpZWxkIG5hbWU9IkZPQ1VTX0RPV04iLz4KLQkJPGZpZWxkIG5hbWU9IkZPQ1VTX0ZPUldBUkQiLz4KLQkJPGZpZWxkIG5hbWU9IkZPQ1VTX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IkZPQ1VTX1JJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT0NVU19VUCIvPgotCQk8ZmllbGQgbmFtZT0iR09ORSIvPgotCQk8ZmllbGQgbmFtZT0iSEFQVElDX0ZFRURCQUNLX0VOQUJMRUQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTlRfRk9SX0FDQ0VTU0lCSUxJVFlfQVVUTyIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTlRfRk9SX0FDQ0VTU0lCSUxJVFlfTk8iIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX05PX0hJREVfREVTQ0VOREFOVFMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX1lFUyIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTlRfRk9SX0FVVE9GSUxMX0FVVE8iIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iSU1QT1JUQU5UX0ZPUl9BVVRPRklMTF9OTyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBPUlRBTlRfRk9SX0FVVE9GSUxMX05PX0VYQ0xVREVfREVTQ0VOREFOVFMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iSU1QT1JUQU5UX0ZPUl9BVVRPRklMTF9ZRVMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iSU1QT1JUQU5UX0ZPUl9BVVRPRklMTF9ZRVNfRVhDTFVERV9ERVNDRU5EQU5UUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlZJU0lCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IktFRVBfU0NSRUVOX09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVlFUl9UWVBFX0hBUkRXQVJFIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkxBWUVSX1RZUEVfTk9ORSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVlFUl9UWVBFX1NPRlRXQVJFIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkxBWU9VVF9ESVJFQ1RJT05fSU5IRVJJVCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMQVlPVVRfRElSRUNUSU9OX0xPQ0FMRSIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMQVlPVVRfRElSRUNUSU9OX0xUUiIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMQVlPVVRfRElSRUNUSU9OX1JUTCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRUFTVVJFRF9IRUlHSFRfU1RBVEVfU0hJRlQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRURfU0laRV9NQVNLIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FQVNVUkVEX1NUQVRFX01BU0siIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iTUVBU1VSRURfU1RBVEVfVE9PX1NNQUxMIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PVF9GT0NVU0FCTEUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTk9fSUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9WRVJfU0NST0xMX0FMV0FZUyIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9Ik9WRVJfU0NST0xMX0lGX0NPTlRFTlRfU0NST0xMUyIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9Ik9WRVJfU0NST0xMX05FVkVSIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iUFJFU1NFRF9FTkFCTEVEX0ZPQ1VTRURfU0VMRUNURURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTU0VEX0VOQUJMRURfRk9DVVNFRF9TRUxFQ1RFRF9XSU5ET1dfRk9DVVNFRF9TVEFURV9TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVNTRURfRU5BQkxFRF9GT0NVU0VEX1NUQVRFX1NFVCIvPgotCQk8ZmllbGQgbmFtZT0iUFJFU1NFRF9FTkFCTEVEX0ZPQ1VTRURfV0lORE9XX0ZPQ1VTRURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTU0VEX0VOQUJMRURfU0VMRUNURURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTU0VEX0VOQUJMRURfU0VMRUNURURfV0lORE9XX0ZPQ1VTRURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTU0VEX0VOQUJMRURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTU0VEX0VOQUJMRURfV0lORE9XX0ZPQ1VTRURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTU0VEX0ZPQ1VTRURfU0VMRUNURURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTU0VEX0ZPQ1VTRURfU0VMRUNURURfV0lORE9XX0ZPQ1VTRURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTU0VEX0ZPQ1VTRURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTU0VEX0ZPQ1VTRURfV0lORE9XX0ZPQ1VTRURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVTU0VEX1NFTEVDVEVEX1NUQVRFX1NFVCIvPgotCQk8ZmllbGQgbmFtZT0iUFJFU1NFRF9TRUxFQ1RFRF9XSU5ET1dfRk9DVVNFRF9TVEFURV9TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVNTRURfU1RBVEVfU0VUIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlBSRVNTRURfV0lORE9XX0ZPQ1VTRURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJST1RBVElPTiIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJST1RBVElPTl9YIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVEFUSU9OX1kiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iU0NBTEVfWCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQ0FMRV9ZIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTl9TVEFURV9PRkYiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOX1NUQVRFX09OIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUk9MTEJBUlNfSU5TSURFX0lOU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JPTExCQVJTX0lOU0lERV9PVkVSTEFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JPTExCQVJTX09VVFNJREVfSU5TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUk9MTEJBUlNfT1VUU0lERV9PVkVSTEFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JPTExCQVJfUE9TSVRJT05fREVGQVVMVCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JPTExCQVJfUE9TSVRJT05fTEVGVCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JPTExCQVJfUE9TSVRJT05fUklHSFQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iU0NST0xMX0FYSVNfSE9SSVpPTlRBTCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JPTExfQVhJU19OT05FIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUk9MTF9BWElTX1ZFUlRJQ0FMIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUk9MTF9JTkRJQ0FUT1JfQk9UVE9NIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUk9MTF9JTkRJQ0FUT1JfRU5EIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUk9MTF9JTkRJQ0FUT1JfTEVGVCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JPTExfSU5ESUNBVE9SX1JJR0hUIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUk9MTF9JTkRJQ0FUT1JfU1RBUlQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU0NST0xMX0lORElDQVRPUl9UT1AiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU0VMRUNURURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUxFQ1RFRF9XSU5ET1dfRk9DVVNFRF9TVEFURV9TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVU5EX0VGRkVDVFNfRU5BQkxFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0JBUl9ISURERU4iIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19CQVJfVklTSUJMRSIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU1lTVEVNX1VJX0ZMQUdfRlVMTFNDUkVFTiIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWVNURU1fVUlfRkxBR19ISURFX05BVklHQVRJT04iIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iU1lTVEVNX1VJX0ZMQUdfSU1NRVJTSVZFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlNZU1RFTV9VSV9GTEFHX0lNTUVSU0lWRV9TVElDS1kiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iU1lTVEVNX1VJX0ZMQUdfTEFZT1VUX0ZVTExTQ1JFRU4iIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU1lTVEVNX1VJX0ZMQUdfTEFZT1VUX0hJREVfTkFWSUdBVElPTiIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWVNURU1fVUlfRkxBR19MQVlPVVRfU1RBQkxFIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlNZU1RFTV9VSV9GTEFHX0xJR0hUX05BVklHQVRJT05fQkFSIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNZU1RFTV9VSV9GTEFHX0xJR0hUX1NUQVRVU19CQVIiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iU1lTVEVNX1VJX0ZMQUdfTE9XX1BST0ZJTEUiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iU1lTVEVNX1VJX0ZMQUdfVklTSUJMRSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWVNURU1fVUlfTEFZT1VUX0ZMQUdTIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFRfQUxJR05NRU5UX0NFTlRFUiIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJURVhUX0FMSUdOTUVOVF9HUkFWSVRZIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFRfQUxJR05NRU5UX0lOSEVSSVQiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9BTElHTk1FTlRfUkVTT0xWRURfREVGQVVMVCIgc2luY2U9IjE2IiByZW1vdmVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9BTElHTk1FTlRfVEVYVF9FTkQiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9BTElHTk1FTlRfVEVYVF9TVEFSVCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJURVhUX0FMSUdOTUVOVF9WSUVXX0VORCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJURVhUX0FMSUdOTUVOVF9WSUVXX1NUQVJUIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFRfRElSRUNUSU9OX0FOWV9SVEwiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9ESVJFQ1RJT05fRklSU1RfU1RST05HIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFRfRElSRUNUSU9OX0ZJUlNUX1NUUk9OR19MVFIiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9ESVJFQ1RJT05fRklSU1RfU1RST05HX1JUTCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJURVhUX0RJUkVDVElPTl9JTkhFUklUIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFRfRElSRUNUSU9OX0xPQ0FMRSIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJURVhUX0RJUkVDVElPTl9MVFIiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9ESVJFQ1RJT05fUlRMIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TTEFUSU9OX1giIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNMQVRJT05fWSIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFOU0xBVElPTl9aIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlZJRVdfTE9HX1RBRyIvPgotCQk8ZmllbGQgbmFtZT0iVklTSUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iV0lORE9XX0ZPQ1VTRURfU1RBVEVfU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJYIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlkiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iWiIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXckQWNjZXNzaWJpbGl0eURlbGVnYXRlIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRXh0cmFEYXRhVG9BY2Nlc3NpYmlsaXR5Tm9kZUluZm8oTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm87TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaFBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNjZXNzaWJpbGl0eU5vZGVQcm92aWRlcihMYW5kcm9pZC92aWV3L1ZpZXc7KUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZVByb3ZpZGVyOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUV2ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Qb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFdmVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVxdWVzdFNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoTGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7TGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5RXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJmb3JtQWNjZXNzaWJpbGl0eUFjdGlvbihMYW5kcm9pZC92aWV3L1ZpZXc7SUxhbmRyb2lkL29zL0J1bmRsZTspWiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZEFjY2Vzc2liaWxpdHlFdmVudChMYW5kcm9pZC92aWV3L1ZpZXc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZEFjY2Vzc2liaWxpdHlFdmVudFVuY2hlY2tlZChMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFdmVudDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3JEJhc2VTYXZlZFN0YXRlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9BYnNTYXZlZFN0YXRlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7TGphdmEvbGFuZy9DbGFzc0xvYWRlcjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbGFibGU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyREcmFnU2hhZG93QnVpbGRlciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWV3KClMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25EcmF3U2hhZG93KExhbmRyb2lkL2dyYXBoaWNzL0NhbnZhczspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJvdmlkZVNoYWRvd01ldHJpY3MoTGFuZHJvaWQvZ3JhcGhpY3MvUG9pbnQ7TGFuZHJvaWQvZ3JhcGhpY3MvUG9pbnQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyRNZWFzdXJlU3BlYyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9kZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaXplKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1ha2VNZWFzdXJlU3BlYyhJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkFUX01PU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkVYQUNUTFkiLz4KLQkJPGZpZWxkIG5hbWU9IlVOU1BFQ0lGSUVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXckT25BcHBseVdpbmRvd0luc2V0c0xpc3RlbmVyIiBzaW5jZT0iMjAiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BcHBseVdpbmRvd0luc2V0cyhMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9XaW5kb3dJbnNldHM7KUxhbmRyb2lkL3ZpZXcvV2luZG93SW5zZXRzOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3JE9uQXR0YWNoU3RhdGVDaGFuZ2VMaXN0ZW5lciIgc2luY2U9IjEyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVmlld0F0dGFjaGVkVG9XaW5kb3coTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25WaWV3RGV0YWNoZWRGcm9tV2luZG93KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3JE9uQ2FwdHVyZWRQb2ludGVyTGlzdGVuZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNhcHR1cmVkUG9pbnRlcihMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3JE9uQ2xpY2tMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DbGljayhMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyRPbkNvbnRleHRDbGlja0xpc3RlbmVyIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db250ZXh0Q2xpY2soTGFuZHJvaWQvdmlldy9WaWV3OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXckT25DcmVhdGVDb250ZXh0TWVudUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZUNvbnRleHRNZW51KExhbmRyb2lkL3ZpZXcvQ29udGV4dE1lbnU7TGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvQ29udGV4dE1lbnUkQ29udGV4dE1lbnVJbmZvOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXckT25EcmFnTGlzdGVuZXIiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRyYWcoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvRHJhZ0V2ZW50OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXckT25Gb2N1c0NoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZvY3VzQ2hhbmdlKExhbmRyb2lkL3ZpZXcvVmlldztaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyRPbkdlbmVyaWNNb3Rpb25MaXN0ZW5lciIgc2luY2U9IjEyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2VuZXJpY01vdGlvbihMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3JE9uSG92ZXJMaXN0ZW5lciIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSG92ZXIoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyRPbktleUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbktleShMYW5kcm9pZC92aWV3L1ZpZXc7SUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyRPbkxheW91dENoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25MYXlvdXRDaGFuZ2UoTGFuZHJvaWQvdmlldy9WaWV3O0lJSUlJSUlJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyRPbkxvbmdDbGlja0xpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxvbmdDbGljayhMYW5kcm9pZC92aWV3L1ZpZXc7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyRPblNjcm9sbENoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TY3JvbGxDaGFuZ2UoTGFuZHJvaWQvdmlldy9WaWV3O0lJSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3JE9uU3lzdGVtVWlWaXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN5c3RlbVVpVmlzaWJpbGl0eUNoYW5nZShJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyRPblRvdWNoTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVG91Y2goTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyRPblVuaGFuZGxlZEtleUV2ZW50TGlzdGVuZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVuaGFuZGxlZEtleUV2ZW50KExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdBbmltYXRpb25VdGlscyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUNpcmN1bGFyUmV2ZWFsKExhbmRyb2lkL3ZpZXcvVmlldztJSUZGKUxhbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld0NvbmZpZ3VyYXRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC92aWV3L1ZpZXdDb25maWd1cmF0aW9uOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0QWN0aW9uTW9kZUhpZGVEdXJhdGlvbigpSiIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG91YmxlVGFwVGltZW91dCgpSSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFZGdlU2xvcCgpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGYWRpbmdFZGdlTGVuZ3RoKClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdsb2JhbEFjdGlvbktleVRpbWVvdXQoKUoiIGRlcHJlY2F0ZWQ9IjIwIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SnVtcFRhcFRpbWVvdXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlSZXBlYXREZWxheSgpSSIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5UmVwZWF0VGltZW91dCgpSSIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZ1ByZXNzVGltZW91dCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heGltdW1EcmF3aW5nQ2FjaGVTaXplKClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heGltdW1GbGluZ1ZlbG9jaXR5KClJIiBzaW5jZT0iNCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5pbXVtRmxpbmdWZWxvY2l0eSgpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVzc2VkU3RhdGVEdXJhdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYWxlZERvdWJsZVRhcFNsb3AoKUkiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhbGVkRWRnZVNsb3AoKUkiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhbGVkRmFkaW5nRWRnZUxlbmd0aCgpSSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2FsZWRIb3Jpem9udGFsU2Nyb2xsRmFjdG9yKClGIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2FsZWRIb3ZlclNsb3AoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYWxlZE1heGltdW1EcmF3aW5nQ2FjaGVTaXplKClJIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYWxlZE1heGltdW1GbGluZ1ZlbG9jaXR5KClJIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYWxlZE1pbmltdW1GbGluZ1ZlbG9jaXR5KClJIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYWxlZE92ZXJmbGluZ0Rpc3RhbmNlKClJIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYWxlZE92ZXJzY3JvbGxEaXN0YW5jZSgpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2FsZWRQYWdpbmdUb3VjaFNsb3AoKUkiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhbGVkU2Nyb2xsQmFyU2l6ZSgpSSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2FsZWRUb3VjaFNsb3AoKUkiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhbGVkVmVydGljYWxTY3JvbGxGYWN0b3IoKUYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYWxlZFdpbmRvd1RvdWNoU2xvcCgpSSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY3JvbGxCYXJGYWRlRHVyYXRpb24oKUkiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Nyb2xsQmFyU2l6ZSgpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY3JvbGxEZWZhdWx0RGVsYXkoKUkiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Nyb2xsRnJpY3Rpb24oKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYXBUaW1lb3V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG91Y2hTbG9wKClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpbmRvd1RvdWNoU2xvcCgpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRab29tQ29udHJvbHNUaW1lb3V0KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzUGVybWFuZW50TWVudUtleSgpWiIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdWxkU2hvd01lbnVTaG9ydGN1dHNXaGVuS2V5Ym9hcmRQcmVzZW50KClaIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld0RlYnVnIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wQ2FwdHVyZWRWaWV3KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0SGllcmFyY2h5VHJhY2luZyhMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC92aWV3L1ZpZXc7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRSZWN5Y2xlclRyYWNpbmcoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvdmlldy9WaWV3OylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BIaWVyYXJjaHlUcmFjaW5nKClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BSZWN5Y2xlclRyYWNpbmcoKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJhY2UoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvVmlld0RlYnVnJEhpZXJhcmNoeVRyYWNlVHlwZTspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFjZShMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3RGVidWckUmVjeWNsZXJUcmFjZVR5cGU7W0kpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQUNFX0hJRVJBUkNIWSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQUNFX1JFQ1lDTEVSIiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3RGVidWckQ2FwdHVyZWRWaWV3UHJvcGVydHkiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0icmV0cmlldmVSZXR1cm4oKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld0RlYnVnJEV4cG9ydGVkUHJvcGVydHkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2F0ZWdvcnkoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWVwRXhwb3J0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmxhZ01hcHBpbmcoKVtMYW5kcm9pZC92aWV3L1ZpZXdEZWJ1ZyRGbGFnVG9TdHJpbmc7IiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdFRvSGV4U3RyaW5nKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNBZGphY2VudE1hcHBpbmcoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImluZGV4TWFwcGluZygpW0xhbmRyb2lkL3ZpZXcvVmlld0RlYnVnJEludFRvU3RyaW5nOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXBwaW5nKClbTGFuZHJvaWQvdmlldy9WaWV3RGVidWckSW50VG9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJlZml4KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlSWQoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld0RlYnVnJEZsYWdUb1N0cmluZyIgc2luY2U9IjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXNrKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3V0cHV0SWYoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld0RlYnVnJEhpZXJhcmNoeVRyYWNlVHlwZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC92aWV3L1ZpZXdEZWJ1ZyRIaWVyYXJjaHlUcmFjZVR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvdmlldy9WaWV3RGVidWckSGllcmFyY2h5VHJhY2VUeXBlOyIvPgotCQk8ZmllbGQgbmFtZT0iQlVJTERfQ0FDSEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRSQVciLz4KLQkJPGZpZWxkIG5hbWU9IklOVkFMSURBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IklOVkFMSURBVEVfQ0hJTEQiLz4KLQkJPGZpZWxkIG5hbWU9IklOVkFMSURBVEVfQ0hJTERfSU5fUEFSRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTl9MQVlPVVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9OX01FQVNVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfTEFZT1VUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdEZWJ1ZyRJbnRUb1N0cmluZyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0idG8oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3RGVidWckUmVjeWNsZXJUcmFjZVR5cGUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdmlldy9WaWV3RGVidWckUmVjeWNsZXJUcmFjZVR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvdmlldy9WaWV3RGVidWckUmVjeWNsZXJUcmFjZVR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5EX1ZJRVciLz4KLQkJPGZpZWxkIG5hbWU9Ik1PVkVfRlJPTV9BQ1RJVkVfVE9fU0NSQVBfSEVBUCIvPgotCQk8ZmllbGQgbmFtZT0iTU9WRV9UT19BQ1RJVkVfSEVBUCIgcmVtb3ZlZD0iOCIvPgotCQk8ZmllbGQgbmFtZT0iTU9WRV9UT19TQ1JBUF9IRUFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVdfVklFVyIvPgotCQk8ZmllbGQgbmFtZT0iUkVDWUNMRV9GUk9NX0FDVElWRV9IRUFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNZQ0xFX0ZST01fU0NSQVBfSEVBUCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3R3JvdXAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXciLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdNYW5hZ2VyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3UGFyZW50Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkU3RhdGVzRnJvbUNoaWxkcmVuKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldztJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7SUxhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFZpZXdJbkxheW91dChMYW5kcm9pZC92aWV3L1ZpZXc7SUxhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtczspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFZpZXdJbkxheW91dChMYW5kcm9pZC92aWV3L1ZpZXc7SUxhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtcztaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdHRhY2hMYXlvdXRBbmltYXRpb25QYXJhbWV0ZXJzKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImF0dGFjaFZpZXdUb1BhcmVudChMYW5kcm9pZC92aWV3L1ZpZXc7SUxhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbkFuaW1hdGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja0xheW91dFBhcmFtcyhMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhbnVwTGF5b3V0U3RhdGUoTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJEaXNhcHBlYXJpbmdDaGlsZHJlbigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlYnVnKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGFjaEFsbFZpZXdzRnJvbVBhcmVudCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGFjaFZpZXdGcm9tUGFyZW50KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGFjaFZpZXdGcm9tUGFyZW50KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGFjaFZpZXdzRnJvbVBhcmVudChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hGcmVlemVTZWxmT25seShMYW5kcm9pZC91dGlsL1NwYXJzZUFycmF5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hUaGF3U2VsZk9ubHkoTGFuZHJvaWQvdXRpbC9TcGFyc2VBcnJheTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXdDaGlsZChMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7TGFuZHJvaWQvdmlldy9WaWV3O0opWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZFZpZXdUcmFuc2l0aW9uKExhbmRyb2lkL3ZpZXcvVmlldzspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2F0aGVyVHJhbnNwYXJlbnRSZWdpb24oTGFuZHJvaWQvZ3JhcGhpY3MvUmVnaW9uOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVEZWZhdWx0TGF5b3V0UGFyYW1zKClMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVMYXlvdXRQYXJhbXMoTGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KUxhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZUxheW91dFBhcmFtcyhMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7KUxhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGlsZEF0KEkpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGlsZERyYXdpbmdPcmRlcihJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hpbGRNZWFzdXJlU3BlYyhJSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkU3RhdGljVHJhbnNmb3JtYXRpb24oTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL1RyYW5zZm9ybWF0aW9uOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xpcENoaWxkcmVuKClaIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGlwVG9QYWRkaW5nKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNjZW5kYW50Rm9jdXNhYmlsaXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9jdXNlZENoaWxkKClMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5b3V0QW5pbWF0aW9uKClMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9MYXlvdXRBbmltYXRpb25Db250cm9sbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheW91dEFuaW1hdGlvbkxpc3RlbmVyKClMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9BbmltYXRpb24kQW5pbWF0aW9uTGlzdGVuZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5b3V0TW9kZSgpSSIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5b3V0VHJhbnNpdGlvbigpTGFuZHJvaWQvYW5pbWF0aW9uL0xheW91dFRyYW5zaXRpb247IiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZXN0ZWRTY3JvbGxBeGVzKClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdmVybGF5KClMYW5kcm9pZC92aWV3L1ZpZXdHcm91cE92ZXJsYXk7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJzaXN0ZW50RHJhd2luZ0NhY2hlKClJIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdWNoc2NyZWVuQmxvY2tzRm9jdXMoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImluZGV4T2ZDaGlsZChMYW5kcm9pZC92aWV3L1ZpZXc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Fsd2F5c0RyYXduV2l0aENhY2hlRW5hYmxlZCgpWiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FuaW1hdGlvbkNhY2hlRW5hYmxlZCgpWiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NoaWxkcmVuRHJhd2luZ09yZGVyRW5hYmxlZCgpWiIgc2luY2U9IjciLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NoaWxkcmVuRHJhd25XaXRoQ2FjaGVFbmFibGVkKClaIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTW90aW9uRXZlbnRTcGxpdHRpbmdFbmFibGVkKClaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RyYW5zaXRpb25Hcm91cCgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWVhc3VyZUNoaWxkKExhbmRyb2lkL3ZpZXcvVmlldztJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWVhc3VyZUNoaWxkV2l0aE1hcmdpbnMoTGFuZHJvaWQvdmlldy9WaWV3O0lJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im1lYXN1cmVDaGlsZHJlbihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2Zmc2V0RGVzY2VuZGFudFJlY3RUb015Q29vcmRzKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2Zmc2V0UmVjdEludG9EZXNjZW5kYW50Q29vcmRzKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25JbnRlcmNlcHRIb3ZlckV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSW50ZXJjZXB0VG91Y2hFdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXF1ZXN0Rm9jdXNJbkRlc2NlbmRhbnRzKElMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXF1ZXN0U2VuZEFjY2Vzc2liaWxpdHlFdmVudChMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFdmVudDspWiIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25WaWV3QWRkZWQoTGFuZHJvaWQvdmlldy9WaWV3OylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblZpZXdSZW1vdmVkKExhbmRyb2lkL3ZpZXcvVmlldzspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQWxsVmlld3MoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBbGxWaWV3c0luTGF5b3V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlRGV0YWNoZWRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVWaWV3QXQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlVmlld0luTGF5b3V0KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVZpZXdzKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVWaWV3c0luTGF5b3V0KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Q2hpbGRSZWN0YW5nbGVPblNjcmVlbihMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldFJlc29sdmVkTGF5b3V0RGlyZWN0aW9uKClWIiBzaW5jZT0iMTQiIHJlbW92ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXRSZXNvbHZlZFRleHREaXJlY3Rpb24oKVYiIHNpbmNlPSIxNCIgcmVtb3ZlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2hlZHVsZUxheW91dEFuaW1hdGlvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFkZFN0YXRlc0Zyb21DaGlsZHJlbihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbHdheXNEcmF3bldpdGhDYWNoZUVuYWJsZWQoWilWIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFuaW1hdGlvbkNhY2hlRW5hYmxlZChaKVYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hpbGRyZW5EcmF3aW5nQ2FjaGVFbmFibGVkKFopViIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGlsZHJlbkRyYXdpbmdPcmRlckVuYWJsZWQoWilWIiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoaWxkcmVuRHJhd25XaXRoQ2FjaGVFbmFibGVkKFopViIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGlwQ2hpbGRyZW4oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2xpcFRvUGFkZGluZyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZXNjZW5kYW50Rm9jdXNhYmlsaXR5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExheW91dEFuaW1hdGlvbihMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9MYXlvdXRBbmltYXRpb25Db250cm9sbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5b3V0QW5pbWF0aW9uTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uJEFuaW1hdGlvbkxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5b3V0TW9kZShJKVYiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldExheW91dFRyYW5zaXRpb24oTGFuZHJvaWQvYW5pbWF0aW9uL0xheW91dFRyYW5zaXRpb247KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1vdGlvbkV2ZW50U3BsaXR0aW5nRW5hYmxlZChaKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uSGllcmFyY2h5Q2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkT25IaWVyYXJjaHlDaGFuZ2VMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBlcnNpc3RlbnREcmF3aW5nQ2FjaGUoSSlWIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXRpY1RyYW5zZm9ybWF0aW9uc0VuYWJsZWQoWilWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRvdWNoc2NyZWVuQmxvY2tzRm9jdXMoWilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUcmFuc2l0aW9uR3JvdXAoWilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG91bGREZWxheUNoaWxkUHJlc3NlZFN0YXRlKClaIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydExheW91dEFuaW1hdGlvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0Vmlld1RyYW5zaXRpb24oTGFuZHJvaWQvdmlldy9WaWV3OylWIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkNMSVBfVE9fUEFERElOR19NQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1VTRV9DSElMRF9EUkFXSU5HX09SREVSIiByZW1vdmVkPSI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT0NVU19BRlRFUl9ERVNDRU5EQU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iRk9DVVNfQkVGT1JFX0RFU0NFTkRBTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT0NVU19CTE9DS19ERVNDRU5EQU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iTEFZT1VUX01PREVfQ0xJUF9CT1VORFMiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iTEFZT1VUX01PREVfT1BUSUNBTF9CT1VORFMiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iUEVSU0lTVEVOVF9BTExfQ0FDSEVTIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iUEVSU0lTVEVOVF9BTklNQVRJT05fQ0FDSEUiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQRVJTSVNURU5UX05PX0NBQ0hFIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iUEVSU0lTVEVOVF9TQ1JPTExJTkdfQ0FDSEUiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlTGF5b3V0RGlyZWN0aW9uKEkpViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmFzZUF0dHJpYnV0ZXMoTGFuZHJvaWQvY29udGVudC9yZXMvVHlwZWRBcnJheTtJSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUxMX1BBUkVOVCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVENIX1BBUkVOVCIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IldSQVBfQ09OVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iaGVpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRBbmltYXRpb25QYXJhbWV0ZXJzIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aWR0aCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTWFyZ2luTGF5b3V0UGFyYW1zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRNYXJnaW5MYXlvdXRQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXlvdXREaXJlY3Rpb24oKUkiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hcmdpbkVuZCgpSSIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFyZ2luU3RhcnQoKUkiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTWFyZ2luUmVsYXRpdmUoKVoiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldExheW91dERpcmVjdGlvbihJKVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1hcmdpbkVuZChJKVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1hcmdpblN0YXJ0KEkpViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWFyZ2lucyhJSUlJKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImJvdHRvbU1hcmdpbiIvPgotCQk8ZmllbGQgbmFtZT0ibGVmdE1hcmdpbiIvPgotCQk8ZmllbGQgbmFtZT0icmlnaHRNYXJnaW4iLz4KLQkJPGZpZWxkIG5hbWU9InRvcE1hcmdpbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3R3JvdXAkT25IaWVyYXJjaHlDaGFuZ2VMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DaGlsZFZpZXdBZGRlZChMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25DaGlsZFZpZXdSZW1vdmVkKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld0dyb3VwT3ZlcmxheSIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdPdmVybGF5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdmlldy9WaWV3OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGQoTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlKExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3TWFuYWdlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVWaWV3TGF5b3V0KExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld091dGxpbmVQcm92aWRlciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE91dGxpbmUoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL2dyYXBoaWNzL091dGxpbmU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkJBQ0tHUk9VTkQiLz4KLQkJPGZpZWxkIG5hbWU9IkJPVU5EUyIvPgotCQk8ZmllbGQgbmFtZT0iUEFEREVEX0JPVU5EUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3T3ZlcmxheSIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3ZpZXcvVmlldzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmUoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld1BhcmVudCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnJpbmdDaGlsZFRvRnJvbnQoTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuUmVzb2x2ZUxheW91dERpcmVjdGlvbigpWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuUmVzb2x2ZVRleHRBbGlnbm1lbnQoKVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhblJlc29sdmVUZXh0RGlyZWN0aW9uKClaIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGlsZERyYXdhYmxlU3RhdGVDaGFuZ2VkKExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoaWxkSGFzVHJhbnNpZW50U3RhdGVDaGFuZ2VkKExhbmRyb2lkL3ZpZXcvVmlldztaKVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQ2hpbGRGb2N1cyhMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDb250ZXh0TWVudShMYW5kcm9pZC92aWV3L0NvbnRleHRNZW51OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9jdXNTZWFyY2goTGFuZHJvaWQvdmlldy9WaWV3O0kpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvY3VzYWJsZVZpZXdBdmFpbGFibGUoTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hpbGRWaXNpYmxlUmVjdChMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtMYW5kcm9pZC9ncmFwaGljcy9Qb2ludDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheW91dERpcmVjdGlvbigpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50KClMYW5kcm9pZC92aWV3L1ZpZXdQYXJlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50Rm9yQWNjZXNzaWJpbGl0eSgpTGFuZHJvaWQvdmlldy9WaWV3UGFyZW50OyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dEFsaWdubWVudCgpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dERpcmVjdGlvbigpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW52YWxpZGF0ZUNoaWxkKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImludmFsaWRhdGVDaGlsZEluUGFyZW50KFtJTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspTGFuZHJvaWQvdmlldy9WaWV3UGFyZW50OyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xheW91dERpcmVjdGlvblJlc29sdmVkKClaIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xheW91dFJlcXVlc3RlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVGV4dEFsaWdubWVudFJlc29sdmVkKClaIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RleHREaXJlY3Rpb25SZXNvbHZlZCgpWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5Ym9hcmROYXZpZ2F0aW9uQ2x1c3RlclNlYXJjaChMYW5kcm9pZC92aWV3L1ZpZXc7SSlMYW5kcm9pZC92aWV3L1ZpZXc7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlTdWJ0cmVlQWNjZXNzaWJpbGl0eVN0YXRlQ2hhbmdlZChMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3O0kpViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25EZXNjZW5kYW50SW52YWxpZGF0ZWQoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvVmlldzspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25OZXN0ZWRGbGluZyhMYW5kcm9pZC92aWV3L1ZpZXc7RkZaKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTmVzdGVkUHJlRmxpbmcoTGFuZHJvaWQvdmlldy9WaWV3O0ZGKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTmVzdGVkUHJlUGVyZm9ybUFjY2Vzc2liaWxpdHlBY3Rpb24oTGFuZHJvaWQvdmlldy9WaWV3O0lMYW5kcm9pZC9vcy9CdW5kbGU7KVoiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTmVzdGVkUHJlU2Nyb2xsKExhbmRyb2lkL3ZpZXcvVmlldztJSVtJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTmVzdGVkU2Nyb2xsKExhbmRyb2lkL3ZpZXcvVmlldztJSUlJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTmVzdGVkU2Nyb2xsQWNjZXB0ZWQoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvVmlldztJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RhcnROZXN0ZWRTY3JvbGwoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvVmlldztJKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3RvcE5lc3RlZFNjcm9sbChMYW5kcm9pZC92aWV3L1ZpZXc7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlY29tcHV0ZVZpZXdBdHRyaWJ1dGVzKExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RDaGlsZEZvY3VzKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Q2hpbGRSZWN0YW5nbGVPblNjcmVlbihMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDtaKVoiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdERpc2FsbG93SW50ZXJjZXB0VG91Y2hFdmVudChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Rml0U3lzdGVtV2luZG93cygpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdExheW91dCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RTZW5kQWNjZXNzaWJpbGl0eUV2ZW50KExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUV2ZW50OylaIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0VHJhbnNwYXJlbnRSZWdpb24oTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd0NvbnRleHRNZW51Rm9yQ2hpbGQoTGFuZHJvaWQvdmlldy9WaWV3OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd0NvbnRleHRNZW51Rm9yQ2hpbGQoTGFuZHJvaWQvdmlldy9WaWV3O0ZGKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWN0aW9uTW9kZUZvckNoaWxkKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGUkQ2FsbGJhY2s7KUxhbmRyb2lkL3ZpZXcvQWN0aW9uTW9kZTsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWN0aW9uTW9kZUZvckNoaWxkKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGUkQ2FsbGJhY2s7SSlMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGU7IiBzaW5jZT0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld1Byb3BlcnR5QW5pbWF0b3IiIHNpbmNlPSIxMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvVmlldzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWxwaGEoRilMYW5kcm9pZC92aWV3L1ZpZXdQcm9wZXJ0eUFuaW1hdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFscGhhQnkoRilMYW5kcm9pZC92aWV3L1ZpZXdQcm9wZXJ0eUFuaW1hdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbCgpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHVyYXRpb24oKUoiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVycG9sYXRvcigpTGFuZHJvaWQvYW5pbWF0aW9uL1RpbWVJbnRlcnBvbGF0b3I7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydERlbGF5KClKIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb3RhdGlvbihGKUxhbmRyb2lkL3ZpZXcvVmlld1Byb3BlcnR5QW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icm90YXRpb25CeShGKUxhbmRyb2lkL3ZpZXcvVmlld1Byb3BlcnR5QW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icm90YXRpb25YKEYpTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb3RhdGlvblhCeShGKUxhbmRyb2lkL3ZpZXcvVmlld1Byb3BlcnR5QW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icm90YXRpb25ZKEYpTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb3RhdGlvbllCeShGKUxhbmRyb2lkL3ZpZXcvVmlld1Byb3BlcnR5QW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2NhbGVYKEYpTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2FsZVhCeShGKUxhbmRyb2lkL3ZpZXcvVmlld1Byb3BlcnR5QW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2NhbGVZKEYpTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2FsZVlCeShGKUxhbmRyb2lkL3ZpZXcvVmlld1Byb3BlcnR5QW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHVyYXRpb24oSilMYW5kcm9pZC92aWV3L1ZpZXdQcm9wZXJ0eUFuaW1hdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludGVycG9sYXRvcihMYW5kcm9pZC9hbmltYXRpb24vVGltZUludGVycG9sYXRvcjspTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaXN0ZW5lcihMYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3IkQW5pbWF0b3JMaXN0ZW5lcjspTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGFydERlbGF5KEopTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVwZGF0ZUxpc3RlbmVyKExhbmRyb2lkL2FuaW1hdGlvbi9WYWx1ZUFuaW1hdG9yJEFuaW1hdG9yVXBkYXRlTGlzdGVuZXI7KUxhbmRyb2lkL3ZpZXcvVmlld1Byb3BlcnR5QW5pbWF0b3I7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydCgpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNsYXRpb25YKEYpTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFuc2xhdGlvblhCeShGKUxhbmRyb2lkL3ZpZXcvVmlld1Byb3BlcnR5QW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNsYXRpb25ZKEYpTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFuc2xhdGlvbllCeShGKUxhbmRyb2lkL3ZpZXcvVmlld1Byb3BlcnR5QW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNsYXRpb25aKEYpTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InRyYW5zbGF0aW9uWkJ5KEYpTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhFbmRBY3Rpb24oTGphdmEvbGFuZy9SdW5uYWJsZTspTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhMYXllcigpTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhTdGFydEFjdGlvbihMamF2YS9sYW5nL1J1bm5hYmxlOylMYW5kcm9pZC92aWV3L1ZpZXdQcm9wZXJ0eUFuaW1hdG9yOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ieChGKUxhbmRyb2lkL3ZpZXcvVmlld1Byb3BlcnR5QW5pbWF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ieEJ5KEYpTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ5KEYpTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ5QnkoRilMYW5kcm9pZC92aWV3L1ZpZXdQcm9wZXJ0eUFuaW1hdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InooRilMYW5kcm9pZC92aWV3L1ZpZXdQcm9wZXJ0eUFuaW1hdG9yOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iekJ5KEYpTGFuZHJvaWQvdmlldy9WaWV3UHJvcGVydHlBbmltYXRvcjsiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3U3RydWN0dXJlIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQ2hpbGRDb3VudChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3luY0NvbW1pdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzeW5jTmV3Q2hpbGQoSSlMYW5kcm9pZC92aWV3L1ZpZXdTdHJ1Y3R1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0b2ZpbGxJZCgpTGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbElkOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hpbGRDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dHJhcygpTGFuZHJvaWQvb3MvQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpbnQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRTZWxlY3Rpb25FbmQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0U2VsZWN0aW9uU3RhcnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNFeHRyYXMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdDaGlsZChJKUxhbmRyb2lkL3ZpZXcvVmlld1N0cnVjdHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdIdG1sSW5mb0J1aWxkZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3ZpZXcvVmlld1N0cnVjdHVyZSRIdG1sSW5mbyRCdWlsZGVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWNjZXNzaWJpbGl0eUZvY3VzZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWN0aXZhdGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFscGhhKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dG9maWxsSGludHMoW0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdXRvZmlsbElkKExhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxJZDspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0b2ZpbGxJZChMYW5kcm9pZC92aWV3L2F1dG9maWxsL0F1dG9maWxsSWQ7SSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdXRvZmlsbE9wdGlvbnMoW0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdXRvZmlsbFR5cGUoSSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdXRvZmlsbFZhbHVlKExhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxWYWx1ZTspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hlY2thYmxlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoZWNrZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hpbGRDb3VudChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGFzc05hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGlja2FibGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGVudERlc2NyaXB0aW9uKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGV4dENsaWNrYWJsZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhSXNTZW5zaXRpdmUoWilWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaW1lbnMoSUlJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbGV2YXRpb24oRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5hYmxlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb2N1c2FibGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9jdXNlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIaW50KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SHRtbEluZm8oTGFuZHJvaWQvdmlldy9WaWV3U3RydWN0dXJlJEh0bWxJbmZvOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJZChJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbXBvcnRhbnRGb3JBdXRvZmlsbChJKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldElucHV0VHlwZShJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvY2FsZUxpc3QoTGFuZHJvaWQvb3MvTG9jYWxlTGlzdDspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9uZ0NsaWNrYWJsZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhUZXh0RW1zKEkpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4VGV4dExlbmd0aChJKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pblRleHRFbXMoSSlWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcGFxdWUoWilWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWxlY3RlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dElkRW50cnkoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRMaW5lcyhbSVtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0U3R5bGUoRklJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhbnNmb3JtYXRpb24oTGFuZHJvaWQvZ3JhcGhpY3MvTWF0cml4OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlzaWJpbGl0eShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXZWJEb21haW4oTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3U3RydWN0dXJlJEh0bWxJbmZvIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRhZygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdTdHJ1Y3R1cmUkSHRtbEluZm8kQnVpbGRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEF0dHJpYnV0ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdmlldy9WaWV3U3RydWN0dXJlJEh0bWxJbmZvJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL3ZpZXcvVmlld1N0cnVjdHVyZSRIdG1sSW5mbzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld1N0dWIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXciLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZmxhdGVkSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXlvdXRJbmZsYXRlcigpTGFuZHJvaWQvdmlldy9MYXlvdXRJbmZsYXRlcjsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheW91dFJlc291cmNlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5mbGF0ZSgpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluZmxhdGVkSWQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5b3V0SW5mbGF0ZXIoTGFuZHJvaWQvdmlldy9MYXlvdXRJbmZsYXRlcjspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5b3V0UmVzb3VyY2UoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25JbmZsYXRlTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3U3R1YiRPbkluZmxhdGVMaXN0ZW5lcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3U3R1YiRPbkluZmxhdGVMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25JbmZsYXRlKExhbmRyb2lkL3ZpZXcvVmlld1N0dWI7TGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdUcmVlT2JzZXJ2ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRPbkRyYXdMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXdUcmVlT2JzZXJ2ZXIkT25EcmF3TGlzdGVuZXI7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE9uR2xvYmFsRm9jdXNDaGFuZ2VMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXdUcmVlT2JzZXJ2ZXIkT25HbG9iYWxGb2N1c0NoYW5nZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkT25HbG9iYWxMYXlvdXRMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXdUcmVlT2JzZXJ2ZXIkT25HbG9iYWxMYXlvdXRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE9uUHJlRHJhd0xpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlld1RyZWVPYnNlcnZlciRPblByZURyYXdMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE9uU2Nyb2xsQ2hhbmdlZExpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlld1RyZWVPYnNlcnZlciRPblNjcm9sbENoYW5nZWRMaXN0ZW5lcjspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRPblRvdWNoTW9kZUNoYW5nZUxpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlld1RyZWVPYnNlcnZlciRPblRvdWNoTW9kZUNoYW5nZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkT25XaW5kb3dBdHRhY2hMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXdUcmVlT2JzZXJ2ZXIkT25XaW5kb3dBdHRhY2hMaXN0ZW5lcjspViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkT25XaW5kb3dGb2N1c0NoYW5nZUxpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlld1RyZWVPYnNlcnZlciRPbldpbmRvd0ZvY3VzQ2hhbmdlTGlzdGVuZXI7KVYiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoT25EcmF3KClWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaE9uR2xvYmFsTGF5b3V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hPblByZURyYXcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FsaXZlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlR2xvYmFsT25MYXlvdXRMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXdUcmVlT2JzZXJ2ZXIkT25HbG9iYWxMYXlvdXRMaXN0ZW5lcjspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVPbkRyYXdMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXdUcmVlT2JzZXJ2ZXIkT25EcmF3TGlzdGVuZXI7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU9uR2xvYmFsRm9jdXNDaGFuZ2VMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXdUcmVlT2JzZXJ2ZXIkT25HbG9iYWxGb2N1c0NoYW5nZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlT25HbG9iYWxMYXlvdXRMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXdUcmVlT2JzZXJ2ZXIkT25HbG9iYWxMYXlvdXRMaXN0ZW5lcjspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlT25QcmVEcmF3TGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3VHJlZU9ic2VydmVyJE9uUHJlRHJhd0xpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlT25TY3JvbGxDaGFuZ2VkTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3VHJlZU9ic2VydmVyJE9uU2Nyb2xsQ2hhbmdlZExpc3RlbmVyOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU9uVG91Y2hNb2RlQ2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3VHJlZU9ic2VydmVyJE9uVG91Y2hNb2RlQ2hhbmdlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVPbldpbmRvd0F0dGFjaExpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlld1RyZWVPYnNlcnZlciRPbldpbmRvd0F0dGFjaExpc3RlbmVyOylWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVPbldpbmRvd0ZvY3VzQ2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3VHJlZU9ic2VydmVyJE9uV2luZG93Rm9jdXNDaGFuZ2VMaXN0ZW5lcjspViIgc2luY2U9IjE4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdUcmVlT2JzZXJ2ZXIkT25EcmF3TGlzdGVuZXIiIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRyYXcoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld1RyZWVPYnNlcnZlciRPbkdsb2JhbEZvY3VzQ2hhbmdlTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2xvYmFsRm9jdXNDaGFuZ2VkKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld1RyZWVPYnNlcnZlciRPbkdsb2JhbExheW91dExpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdsb2JhbExheW91dCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3VHJlZU9ic2VydmVyJE9uUHJlRHJhd0xpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByZURyYXcoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld1RyZWVPYnNlcnZlciRPblNjcm9sbENoYW5nZWRMaXN0ZW5lciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TY3JvbGxDaGFuZ2VkKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdUcmVlT2JzZXJ2ZXIkT25Ub3VjaE1vZGVDaGFuZ2VMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Ub3VjaE1vZGVDaGFuZ2VkKFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3VHJlZU9ic2VydmVyJE9uV2luZG93QXR0YWNoTGlzdGVuZXIiIHNpbmNlPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbldpbmRvd0F0dGFjaGVkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25XaW5kb3dEZXRhY2hlZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3VHJlZU9ic2VydmVyJE9uV2luZG93Rm9jdXNDaGFuZ2VMaXN0ZW5lciIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uV2luZG93Rm9jdXNDaGFuZ2VkKFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9XaW5kb3ciIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDb250ZW50VmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRmxhZ3MoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkT25GcmFtZU1ldHJpY3NBdmFpbGFibGVMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1dpbmRvdyRPbkZyYW1lTWV0cmljc0F2YWlsYWJsZUxpc3RlbmVyO0xhbmRyb2lkL29zL0hhbmRsZXI7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyRmxhZ3MoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2VBbGxQYW5lbHMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZVBhbmVsKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRWaWV3QnlJZChJKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxvd0VudGVyVHJhbnNpdGlvbk92ZXJsYXAoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbG93UmV0dXJuVHJhbnNpdGlvbk92ZXJsYXAoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZXMoKUxhbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlciRMYXlvdXRQYXJhbXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FsbGJhY2soKUxhbmRyb2lkL3ZpZXcvV2luZG93JENhbGxiYWNrOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yTW9kZSgpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGFpbmVyKClMYW5kcm9pZC92aWV3L1dpbmRvdzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50U2NlbmUoKUxhbmRyb2lkL3RyYW5zaXRpb24vU2NlbmU7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZXh0KClMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudEZvY3VzKClMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVjb3JWaWV3KClMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdEZlYXR1cmVzKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspSSIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW50ZXJUcmFuc2l0aW9uKClMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeGl0VHJhbnNpdGlvbigpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmVhdHVyZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JjZWRXaW5kb3dGbGFncygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheW91dEluZmxhdGVyKClMYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsRmVhdHVyZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZWRpYUNvbnRyb2xsZXIoKUxhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFDb250cm9sbGVyOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmF2aWdhdGlvbkJhckNvbG9yKClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYXZpZ2F0aW9uQmFyRGl2aWRlckNvbG9yKClJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWVudGVyVHJhbnNpdGlvbigpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmV0dXJuVHJhbnNpdGlvbigpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hhcmVkRWxlbWVudEVudGVyVHJhbnNpdGlvbigpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hhcmVkRWxlbWVudEV4aXRUcmFuc2l0aW9uKClMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaGFyZWRFbGVtZW50UmVlbnRlclRyYW5zaXRpb24oKUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNoYXJlZEVsZW1lbnRSZXR1cm5UcmFuc2l0aW9uKClMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaGFyZWRFbGVtZW50c1VzZU92ZXJsYXkoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXR1c0JhckNvbG9yKClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFuc2l0aW9uQmFja2dyb3VuZEZhZGVEdXJhdGlvbigpSiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNpdGlvbk1hbmFnZXIoKUxhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbk1hbmFnZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWb2x1bWVDb250cm9sU3RyZWFtKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2luZG93TWFuYWdlcigpTGFuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpbmRvd1N0eWxlKClMYW5kcm9pZC9jb250ZW50L3Jlcy9UeXBlZEFycmF5OyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0NoaWxkcmVuKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRmVhdHVyZShJKVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1NvZnRJbnB1dE1vZGUoKVoiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5qZWN0SW5wdXRFdmVudChMYW5kcm9pZC92aWV3L0lucHV0RXZlbnQ7KVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImludmFsaWRhdGVQYW5lbE1lbnUoSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FjdGl2ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmxvYXRpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Nob3J0Y3V0S2V5KElMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXaWRlQ29sb3JHYW11dCgpWiIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWFrZUFjdGl2ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWN0aXZlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db25maWd1cmF0aW9uQ2hhbmdlZChMYW5kcm9pZC9jb250ZW50L3Jlcy9Db25maWd1cmF0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlblBhbmVsKElMYW5kcm9pZC92aWV3L0tleUV2ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVla0RlY29yVmlldygpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9InBlcmZvcm1Db250ZXh0TWVudUlkZW50aWZpZXJBY3Rpb24oSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBlcmZvcm1QYW5lbElkZW50aWZpZXJBY3Rpb24oSUlJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJmb3JtUGFuZWxTaG9ydGN1dChJSUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7SSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlT25GcmFtZU1ldHJpY3NBdmFpbGFibGVMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1dpbmRvdyRPbkZyYW1lTWV0cmljc0F2YWlsYWJsZUxpc3RlbmVyOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0RmVhdHVyZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1aXJlVmlld0J5SWQoSSlMYW5kcm9pZC92aWV3L1ZpZXc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN0b3JlSGllcmFyY2h5U3RhdGUoTGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2F2ZUhpZXJhcmNoeVN0YXRlKClMYW5kcm9pZC9vcy9CdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxsb3dFbnRlclRyYW5zaXRpb25PdmVybGFwKFopViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxsb3dSZXR1cm5UcmFuc2l0aW9uT3ZlcmxhcChaKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF0dHJpYnV0ZXMoTGFuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyJExheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJhY2tncm91bmREcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJhY2tncm91bmREcmF3YWJsZVJlc291cmNlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbGxiYWNrKExhbmRyb2lkL3ZpZXcvV2luZG93JENhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hpbGREcmF3YWJsZShJTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGlsZEludChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2xpcFRvT3V0bGluZShaKVYiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbG9yTW9kZShJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRhaW5lcihMYW5kcm9pZC92aWV3L1dpbmRvdzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRWaWV3KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWNvckNhcHRpb25TaGFkZShJKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHRXaW5kb3dGb3JtYXQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGltQW1vdW50KEYpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RWxldmF0aW9uKEYpViIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW50ZXJUcmFuc2l0aW9uKExhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXhpdFRyYW5zaXRpb24oTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGZWF0dXJlRHJhd2FibGUoSUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmVhdHVyZURyYXdhYmxlQWxwaGEoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZlYXR1cmVEcmF3YWJsZVJlc291cmNlKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGZWF0dXJlRHJhd2FibGVVcmkoSUxhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGZWF0dXJlSW50KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGbGFncyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9ybWF0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyYXZpdHkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWNvbihJKVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldExheW91dChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9jYWxGb2N1cyhaWilWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2dvKEkpViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWVkaWFDb250cm9sbGVyKExhbmRyb2lkL21lZGlhL3Nlc3Npb24vTWVkaWFDb250cm9sbGVyOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYXZpZ2F0aW9uQmFyQ29sb3IoSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYXZpZ2F0aW9uQmFyRGl2aWRlckNvbG9yKEkpViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVlbnRlclRyYW5zaXRpb24oTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXNpemluZ0NhcHRpb25EcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVzdHJpY3RlZENhcHRpb25BcmVhTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9XaW5kb3ckT25SZXN0cmljdGVkQ2FwdGlvbkFyZWFDaGFuZ2VkTGlzdGVuZXI7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJldHVyblRyYW5zaXRpb24oTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaGFyZWRFbGVtZW50RW50ZXJUcmFuc2l0aW9uKExhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hhcmVkRWxlbWVudEV4aXRUcmFuc2l0aW9uKExhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hhcmVkRWxlbWVudFJlZW50ZXJUcmFuc2l0aW9uKExhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hhcmVkRWxlbWVudFJldHVyblRyYW5zaXRpb24oTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaGFyZWRFbGVtZW50c1VzZU92ZXJsYXkoWilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTb2Z0SW5wdXRNb2RlKEkpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGF0dXNCYXJDb2xvcihJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1c3RhaW5lZFBlcmZvcm1hbmNlTW9kZShaKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpdGxlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGl0bGVDb2xvcihJKVYiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhbnNpdGlvbkJhY2tncm91bmRGYWRlRHVyYXRpb24oSilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUcmFuc2l0aW9uTWFuYWdlcihMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25NYW5hZ2VyOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUeXBlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVpT3B0aW9ucyhJKVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVpT3B0aW9ucyhJSSlWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWb2x1bWVDb250cm9sU3RyZWFtKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdpbmRvd0FuaW1hdGlvbnMoSSlWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdpbmRvd01hbmFnZXIoTGFuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyO0xhbmRyb2lkL29zL0lCaW5kZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXaW5kb3dNYW5hZ2VyKExhbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlcjtMYW5kcm9pZC9vcy9JQmluZGVyO0xqYXZhL2xhbmcvU3RyaW5nO1opViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwZXJEaXNwYXRjaEdlbmVyaWNNb3Rpb25FdmVudChMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylaIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBlckRpc3BhdGNoS2V5RXZlbnQoTGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cGVyRGlzcGF0Y2hLZXlTaG9ydGN1dEV2ZW50KExhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InN1cGVyRGlzcGF0Y2hUb3VjaEV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBlckRpc3BhdGNoVHJhY2tiYWxsRXZlbnQoTGFuZHJvaWQvdmlldy9Nb3Rpb25FdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InRha2VJbnB1dFF1ZXVlKExhbmRyb2lkL3ZpZXcvSW5wdXRRdWV1ZSRDYWxsYmFjazspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0YWtlS2V5RXZlbnRzKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InRha2VTdXJmYWNlKExhbmRyb2lkL3ZpZXcvU3VyZmFjZUhvbGRlciRDYWxsYmFjazI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9nZ2xlUGFuZWwoSUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFQ09SX0NBUFRJT05fU0hBREVfQVVUTyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUNPUl9DQVBUSU9OX1NIQURFX0RBUksiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iREVDT1JfQ0FQVElPTl9TSEFERV9MSUdIVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX0ZFQVRVUkVTIiBkZXByZWNhdGVkPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9BQ1RJT05fQkFSIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQUNUSU9OX0JBUl9PVkVSTEFZIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQUNUSU9OX01PREVfT1ZFUkxBWSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0FDVElWSVRZX1RSQU5TSVRJT05TIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OUyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX0NPTlRFWFRfTUVOVSIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9DVVNUT01fVElUTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfSU5ERVRFUk1JTkFURV9QUk9HUkVTUyIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfTEVGVF9JQ09OIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX05PX1RJVExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX09QVElPTlNfUEFORUwiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfUFJPR1JFU1MiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1JJR0hUX0lDT04iLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfU1dJUEVfVE9fRElTTUlTUyIgc2luY2U9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJJRF9BTkRST0lEX0NPTlRFTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BVklHQVRJT05fQkFSX0JBQ0tHUk9VTkRfVFJBTlNJVElPTl9OQU1FIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlBST0dSRVNTX0VORCIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlBST0dSRVNTX0lOREVURVJNSU5BVEVfT0ZGIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPR1JFU1NfSU5ERVRFUk1JTkFURV9PTiIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlBST0dSRVNTX1NFQ09OREFSWV9FTkQiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9HUkVTU19TRUNPTkRBUllfU1RBUlQiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9HUkVTU19TVEFSVCIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlBST0dSRVNTX1ZJU0lCSUxJVFlfT0ZGIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPR1JFU1NfVklTSUJJTElUWV9PTiIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19CQVJfQkFDS0dST1VORF9UUkFOU0lUSU9OX05BTUUiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9XaW5kb3ckQ2FsbGJhY2siIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoR2VuZXJpY01vdGlvbkV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoS2V5RXZlbnQoTGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoS2V5U2hvcnRjdXRFdmVudChMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaFBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KExhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5RXZlbnQ7KVoiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hUb3VjaEV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaFRyYWNrYmFsbEV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFjdGlvbk1vZGVGaW5pc2hlZChMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGU7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQWN0aW9uTW9kZVN0YXJ0ZWQoTGFuZHJvaWQvdmlldy9BY3Rpb25Nb2RlOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF0dGFjaGVkVG9XaW5kb3coKVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db250ZW50Q2hhbmdlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlUGFuZWxNZW51KElMYW5kcm9pZC92aWV3L01lbnU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZVBhbmVsVmlldyhJKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRldGFjaGVkRnJvbVdpbmRvdygpViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1lbnVJdGVtU2VsZWN0ZWQoSUxhbmRyb2lkL3ZpZXcvTWVudUl0ZW07KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1lbnVPcGVuZWQoSUxhbmRyb2lkL3ZpZXcvTWVudTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGFuZWxDbG9zZWQoSUxhbmRyb2lkL3ZpZXcvTWVudTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUG9pbnRlckNhcHR1cmVDaGFuZ2VkKFopViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QcmVwYXJlUGFuZWwoSUxhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L01lbnU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByb3ZpZGVLZXlib2FyZFNob3J0Y3V0cyhMamF2YS91dGlsL0xpc3Q7TGFuZHJvaWQvdmlldy9NZW51O0kpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZWFyY2hSZXF1ZXN0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlYXJjaFJlcXVlc3RlZChMYW5kcm9pZC92aWV3L1NlYXJjaEV2ZW50OylaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbldpbmRvd0F0dHJpYnV0ZXNDaGFuZ2VkKExhbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlciRMYXlvdXRQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbldpbmRvd0ZvY3VzQ2hhbmdlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbldpbmRvd1N0YXJ0aW5nQWN0aW9uTW9kZShMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGUkQ2FsbGJhY2s7KUxhbmRyb2lkL3ZpZXcvQWN0aW9uTW9kZTsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uV2luZG93U3RhcnRpbmdBY3Rpb25Nb2RlKExhbmRyb2lkL3ZpZXcvQWN0aW9uTW9kZSRDYWxsYmFjaztJKUxhbmRyb2lkL3ZpZXcvQWN0aW9uTW9kZTsiIHNpbmNlPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9XaW5kb3ckT25GcmFtZU1ldHJpY3NBdmFpbGFibGVMaXN0ZW5lciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRnJhbWVNZXRyaWNzQXZhaWxhYmxlKExhbmRyb2lkL3ZpZXcvV2luZG93O0xhbmRyb2lkL3ZpZXcvRnJhbWVNZXRyaWNzO0kpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9XaW5kb3ckT25SZXN0cmljdGVkQ2FwdGlvbkFyZWFDaGFuZ2VkTGlzdGVuZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlc3RyaWN0ZWRDYXB0aW9uQXJlYUNoYW5nZWQoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9XaW5kb3dBbmltYXRpb25GcmFtZVN0YXRzIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvRnJhbWVTdGF0cyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvV2luZG93Q29udGVudEZyYW1lU3RhdHMiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9GcmFtZVN0YXRzIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyYW1lUG9zdGVkVGltZU5hbm8oSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJhbWVSZWFkeVRpbWVOYW5vKEkpSiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9XaW5kb3dJZCIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL0lCaW5kZXI7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRm9jdXNlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyRm9jdXNPYnNlcnZlcihMYW5kcm9pZC92aWV3L1dpbmRvd0lkJEZvY3VzT2JzZXJ2ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyRm9jdXNPYnNlcnZlcihMYW5kcm9pZC92aWV3L1dpbmRvd0lkJEZvY3VzT2JzZXJ2ZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvV2luZG93SWQkRm9jdXNPYnNlcnZlciIgc2luY2U9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRm9jdXNHYWluZWQoTGFuZHJvaWQvdmlldy9XaW5kb3dJZDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRm9jdXNMb3N0KExhbmRyb2lkL3ZpZXcvV2luZG93SWQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvV2luZG93SW5zZXRzIiBzaW5jZT0iMjAiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvV2luZG93SW5zZXRzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29uc3VtZURpc3BsYXlDdXRvdXQoKUxhbmRyb2lkL3ZpZXcvV2luZG93SW5zZXRzOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29uc3VtZVN0YWJsZUluc2V0cygpTGFuZHJvaWQvdmlldy9XaW5kb3dJbnNldHM7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25zdW1lU3lzdGVtV2luZG93SW5zZXRzKClMYW5kcm9pZC92aWV3L1dpbmRvd0luc2V0czsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5Q3V0b3V0KClMYW5kcm9pZC92aWV3L0Rpc3BsYXlDdXRvdXQ7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFibGVJbnNldEJvdHRvbSgpSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhYmxlSW5zZXRMZWZ0KClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFibGVJbnNldFJpZ2h0KClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFibGVJbnNldFRvcCgpSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lzdGVtV2luZG93SW5zZXRCb3R0b20oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1XaW5kb3dJbnNldExlZnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1XaW5kb3dJbnNldFJpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lzdGVtV2luZG93SW5zZXRUb3AoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNJbnNldHMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNTdGFibGVJbnNldHMoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1N5c3RlbVdpbmRvd0luc2V0cygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ29uc3VtZWQoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUm91bmQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBsYWNlU3lzdGVtV2luZG93SW5zZXRzKElJSUkpTGFuZHJvaWQvdmlldy9XaW5kb3dJbnNldHM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZVN5c3RlbVdpbmRvd0luc2V0cyhMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylMYW5kcm9pZC92aWV3L1dpbmRvd0luc2V0czsiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdNYW5hZ2VyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdERpc3BsYXkoKUxhbmRyb2lkL3ZpZXcvRGlzcGxheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVWaWV3SW1tZWRpYXRlKExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyJEJhZFRva2VuRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXIkSW52YWxpZERpc3BsYXlFeGNlcHRpb24iIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXIkTGF5b3V0UGFyYW1zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5RnJvbShMYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXIkTGF5b3V0UGFyYW1zOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVidWcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yTW9kZSgpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGl0bGUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1heVVzZUlucHV0TWV0aG9kKEkpWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2xvck1vZGUoSSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaXRsZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8ZmllbGQgbmFtZT0iQUxQSEFfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iQU5JTUFUSU9OX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkJSSUdIVE5FU1NfT1ZFUlJJREVfRlVMTCIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkJSSUdIVE5FU1NfT1ZFUlJJREVfTk9ORSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkJSSUdIVE5FU1NfT1ZFUlJJREVfT0ZGIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRElNX0FNT1VOVF9DSEFOR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSVJTVF9BUFBMSUNBVElPTl9XSU5ET1ciLz4KLQkJPGZpZWxkIG5hbWU9IkZJUlNUX1NVQl9XSU5ET1ciLz4KLQkJPGZpZWxkIG5hbWU9IkZJUlNUX1NZU1RFTV9XSU5ET1ciLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdTX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfQUxMT1dfTE9DS19XSElMRV9TQ1JFRU5fT04iIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0FMVF9GT0NVU0FCTEVfSU0iIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0JMVVJfQkVISU5EIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19ESU1fQkVISU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0RJU01JU1NfS0VZR1VBUkQiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19ESVRIRVIiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0RSQVdTX1NZU1RFTV9CQVJfQkFDS0dST1VORFMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19GT1JDRV9OT1RfRlVMTFNDUkVFTiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19GVUxMU0NSRUVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0hBUkRXQVJFX0FDQ0VMRVJBVEVEIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfSUdOT1JFX0NIRUVLX1BSRVNTRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfS0VFUF9TQ1JFRU5fT04iLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfTEFZT1VUX0FUVEFDSEVEX0lOX0RFQ09SIiBzaW5jZT0iMjIiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfTEFZT1VUX0lOU0VUX0RFQ09SIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0xBWU9VVF9JTl9PVkVSU0NBTiIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0xBWU9VVF9JTl9TQ1JFRU4iLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfTEFZT1VUX05PX0xJTUlUUyIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19MT0NBTF9GT0NVU19NT0RFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfTk9UX0ZPQ1VTQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19OT1RfVE9VQ0hBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX05PVF9UT1VDSF9NT0RBTCIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TQ0FMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfU0VDVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NIT1dfV0FMTFBBUEVSIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19TSE9XX1dIRU5fTE9DS0VEIiBzaW5jZT0iNSIgZGVwcmVjYXRlZD0iMjciLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfU1BMSVRfVE9VQ0giIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19UT1VDSEFCTEVfV0hFTl9XQUtJTkciIGRlcHJlY2F0ZWQ9IjIwIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1RSQU5TTFVDRU5UX05BVklHQVRJT04iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19UUkFOU0xVQ0VOVF9TVEFUVVMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19UVVJOX1NDUkVFTl9PTiIgc2luY2U9IjUiIGRlcHJlY2F0ZWQ9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1dBVENIX09VVFNJREVfVE9VQ0giIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iTEFTVF9BUFBMSUNBVElPTl9XSU5ET1ciLz4KLQkJPGZpZWxkIG5hbWU9IkxBU1RfU1VCX1dJTkRPVyIvPgotCQk8ZmllbGQgbmFtZT0iTEFTVF9TWVNURU1fV0lORE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVlPVVRfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iTEFZT1VUX0lOX0RJU1BMQVlfQ1VUT1VUX01PREVfREVGQVVMVCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMQVlPVVRfSU5fRElTUExBWV9DVVRPVVRfTU9ERV9ORVZFUiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMQVlPVVRfSU5fRElTUExBWV9DVVRPVVRfTU9ERV9TSE9SVF9FREdFUyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRU1PUllfVFlQRV9DSEFOR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRU1PUllfVFlQRV9HUFUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRU1PUllfVFlQRV9IQVJEV0FSRSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FTU9SWV9UWVBFX05PUk1BTCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FTU9SWV9UWVBFX1BVU0hfQlVGRkVSUyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVEFUSU9OX0FOSU1BVElPTl9DSEFOR0VEIiBzaW5jZT0iMTgiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVEFUSU9OX0FOSU1BVElPTl9DUk9TU0ZBREUiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iUk9UQVRJT05fQU5JTUFUSU9OX0pVTVBDVVQiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iUk9UQVRJT05fQU5JTUFUSU9OX1JPVEFURSIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJST1RBVElPTl9BTklNQVRJT05fU0VBTUxFU1MiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iU0NSRUVOX0JSSUdIVE5FU1NfQ0hBTkdFRCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUkVFTl9PUklFTlRBVElPTl9DSEFOR0VEIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iU09GVF9JTlBVVF9BREpVU1RfTk9USElORyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT0ZUX0lOUFVUX0FESlVTVF9QQU4iIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT0ZUX0lOUFVUX0FESlVTVF9SRVNJWkUiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT0ZUX0lOUFVUX0FESlVTVF9VTlNQRUNJRklFRCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNPRlRfSU5QVVRfSVNfRk9SV0FSRF9OQVZJR0FUSU9OIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iU09GVF9JTlBVVF9NQVNLX0FESlVTVCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNPRlRfSU5QVVRfTUFTS19TVEFURSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNPRlRfSU5QVVRfTU9ERV9DSEFOR0VEIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iU09GVF9JTlBVVF9TVEFURV9BTFdBWVNfSElEREVOIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iU09GVF9JTlBVVF9TVEFURV9BTFdBWVNfVklTSUJMRSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IlNPRlRfSU5QVVRfU1RBVEVfSElEREVOIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iU09GVF9JTlBVVF9TVEFURV9VTkNIQU5HRUQiIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT0ZUX0lOUFVUX1NUQVRFX1VOU1BFQ0lGSUVEIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iU09GVF9JTlBVVF9TVEFURV9WSVNJQkxFIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iVElUTEVfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BQ0NFU1NJQklMSVRZX09WRVJMQVkiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BUFBMSUNBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BUFBMSUNBVElPTl9BVFRBQ0hFRF9ESUFMT0ciIHNpbmNlPSIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FQUExJQ0FUSU9OX01FRElBIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FQUExJQ0FUSU9OX09WRVJMQVkiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BUFBMSUNBVElPTl9QQU5FTCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BUFBMSUNBVElPTl9TVEFSVElORyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BUFBMSUNBVElPTl9TVUJfUEFORUwiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQkFTRV9BUFBMSUNBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9DSEFOR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0RSQVdOX0FQUExJQ0FUSU9OIiBzaW5jZT0iMjUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfSU5QVVRfTUVUSE9EIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9JTlBVVF9NRVRIT0RfRElBTE9HIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9LRVlHVUFSRCIgcmVtb3ZlZD0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfS0VZR1VBUkRfRElBTE9HIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1BIT05FIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9QUklPUklUWV9QSE9ORSIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUFJJVkFURV9QUkVTRU5UQVRJT04iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9TRUFSQ0hfQkFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NUQVRVU19CQVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfU1RBVFVTX0JBUl9QQU5FTCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9TWVNURU1fQUxFUlQiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NZU1RFTV9ESUFMT0ciLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfU1lTVEVNX0VSUk9SIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9TWVNURU1fT1ZFUkxBWSIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVE9BU1QiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1dBTExQQVBFUiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9ImFscGhhIi8+Ci0JCTxmaWVsZCBuYW1lPSJidXR0b25CcmlnaHRuZXNzIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iZGltQW1vdW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmbGFncyIvPgotCQk8ZmllbGQgbmFtZT0iZm9ybWF0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJncmF2aXR5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJob3Jpem9udGFsTWFyZ2luIi8+Ci0JCTxmaWVsZCBuYW1lPSJob3Jpem9udGFsV2VpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJsYXlvdXRJbkRpc3BsYXlDdXRvdXRNb2RlIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9Im1lbW9yeVR5cGUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwYWNrYWdlTmFtZSIvPgotCQk8ZmllbGQgbmFtZT0icHJlZmVycmVkRGlzcGxheU1vZGVJZCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcmVmZXJyZWRSZWZyZXNoUmF0ZSIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0icm90YXRpb25BbmltYXRpb24iIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0ic2NyZWVuQnJpZ2h0bmVzcyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9InNjcmVlbk9yaWVudGF0aW9uIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0ic29mdElucHV0TW9kZSIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9InN5c3RlbVVpVmlzaWJpbGl0eSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0b2tlbiIvPgotCQk8ZmllbGQgbmFtZT0idHlwZSIvPgotCQk8ZmllbGQgbmFtZT0idmVydGljYWxNYXJnaW4iLz4KLQkJPGZpZWxkIG5hbWU9InZlcnRpY2FsV2VpZ2h0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dBbmltYXRpb25zIi8+Ci0JCTxmaWVsZCBuYW1lPSJ4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUV2ZW50IiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZWNvcmQiIHNpbmNlPSIxNCIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiByZW1vdmVkPSIxNCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRSZWNvcmQoTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZWNvcmQ7KVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImV2ZW50VHlwZVRvU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3Rpb24oKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkZGVkQ291bnQoKUkiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmVmb3JlVGV4dCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsYXNzTmFtZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnRDaGFuZ2VUeXBlcygpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudERlc2NyaXB0aW9uKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudEl0ZW1JbmRleCgpSSIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFdmVudFRpbWUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFdmVudFR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcm9tSW5kZXgoKUkiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SXRlbUNvdW50KClJIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vdmVtZW50R3JhbnVsYXJpdHkoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VOYW1lKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJjZWxhYmxlRGF0YSgpTGFuZHJvaWQvb3MvUGFyY2VsYWJsZTsiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVjb3JkKEkpTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZWNvcmQ7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWNvcmRDb3VudCgpSSIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVtb3ZlZENvdW50KClJIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHQoKUxqYXZhL3V0aWwvTGlzdDsiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2luZG93Q2hhbmdlcygpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdEZyb21QYXJjZWwoTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDaGVja2VkKClaIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5hYmxlZCgpWiIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Z1bGxTY3JlZW4oKVoiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQYXNzd29yZCgpWiIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW4oKUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5RXZlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluKEkpTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFdmVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW4oTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFdmVudDspTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFdmVudDsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlY3ljbGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBY3Rpb24oSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBZGRlZENvdW50KEkpViIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCZWZvcmVUZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoZWNrZWQoWilWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldENsYXNzTmFtZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50Q2hhbmdlVHlwZXMoSSlWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50RGVzY3JpcHRpb24oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VycmVudEl0ZW1JbmRleChJKVYiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5hYmxlZChaKVYiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXZlbnRUaW1lKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV2ZW50VHlwZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGcm9tSW5kZXgoSSlWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZ1bGxTY3JlZW4oWilWIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEl0ZW1Db3VudChJKVYiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TW92ZW1lbnRHcmFudWxhcml0eShJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhY2thZ2VOYW1lKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyY2VsYWJsZURhdGEoTGFuZHJvaWQvb3MvUGFyY2VsYWJsZTspViIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXNzd29yZChaKVYiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVtb3ZlZENvdW50KEkpViIgcmVtb3ZlZD0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfQ0hBTkdFX1RZUEVfQ09OVEVOVF9ERVNDUklQVElPTiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0NIQU5HRV9UWVBFX1BBTkVfQVBQRUFSRUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9DSEFOR0VfVFlQRV9QQU5FX0RJU0FQUEVBUkVEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfQ0hBTkdFX1RZUEVfUEFORV9USVRMRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX0NIQU5HRV9UWVBFX1NVQlRSRUUiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9DSEFOR0VfVFlQRV9URVhUIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfQ0hBTkdFX1RZUEVfVU5ERUZJTkVEIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IklOVkFMSURfUE9TSVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9URVhUX0xFTkdUSCIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVTX0FMTF9NQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FOTk9VTkNFTUVOVCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0FTU0lTVF9SRUFESU5HX0NPTlRFWFQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9HRVNUVVJFX0RFVEVDVElPTl9FTkQiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9HRVNUVVJFX0RFVEVDVElPTl9TVEFSVCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX05PVElGSUNBVElPTl9TVEFURV9DSEFOR0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RPVUNIX0VYUExPUkFUSU9OX0dFU1RVUkVfRU5EIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVE9VQ0hfRVhQTE9SQVRJT05fR0VTVFVSRV9TVEFSVCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RPVUNIX0lOVEVSQUNUSU9OX0VORCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1RPVUNIX0lOVEVSQUNUSU9OX1NUQVJUIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVklFV19BQ0NFU1NJQklMSVRZX0ZPQ1VTRUQiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9WSUVXX0FDQ0VTU0lCSUxJVFlfRk9DVVNfQ0xFQVJFRCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1ZJRVdfQ0xJQ0tFRCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9WSUVXX0NPTlRFWFRfQ0xJQ0tFRCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1ZJRVdfRk9DVVNFRCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9WSUVXX0hPVkVSX0VOVEVSIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVklFV19IT1ZFUl9FWElUIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVklFV19MT05HX0NMSUNLRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVklFV19TQ1JPTExFRCIgc2luY2U9IjE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1ZJRVdfU0VMRUNURUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVklFV19URVhUX0NIQU5HRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVklFV19URVhUX1NFTEVDVElPTl9DSEFOR0VEIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVklFV19URVhUX1RSQVZFUlNFRF9BVF9NT1ZFTUVOVF9HUkFOVUxBUklUWSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1dJTkRPV1NfQ0hBTkdFRCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1dJTkRPV19DT05URU5UX0NIQU5HRUQiIHNpbmNlPSIxNCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9XSU5ET1dfU1RBVEVfQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iV0lORE9XU19DSEFOR0VfQUNDRVNTSUJJTElUWV9GT0NVU0VEIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IldJTkRPV1NfQ0hBTkdFX0FDVElWRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSU5ET1dTX0NIQU5HRV9BRERFRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSU5ET1dTX0NIQU5HRV9CT1VORFMiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iV0lORE9XU19DSEFOR0VfQ0hJTERSRU4iIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iV0lORE9XU19DSEFOR0VfRk9DVVNFRCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSU5ET1dTX0NIQU5HRV9MQVlFUiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSU5ET1dTX0NIQU5HRV9QQVJFTlQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iV0lORE9XU19DSEFOR0VfUElQIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IldJTkRPV1NfQ0hBTkdFX1JFTU9WRUQiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iV0lORE9XU19DSEFOR0VfVElUTEUiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFdmVudFNvdXJjZSIgc2luY2U9IjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZEFjY2Vzc2liaWxpdHlFdmVudChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kQWNjZXNzaWJpbGl0eUV2ZW50VW5jaGVja2VkKExhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5RXZlbnQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlciIgc2luY2U9IjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQWNjZXNzaWJpbGl0eVJlcXVlc3RQcmVwYXJlcihMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlcXVlc3RQcmVwYXJlcjspViIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQWNjZXNzaWJpbGl0eVN0YXRlQ2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYW5hZ2VyJEFjY2Vzc2liaWxpdHlTdGF0ZUNoYW5nZUxpc3RlbmVyOylaIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBY2Nlc3NpYmlsaXR5U3RhdGVDaGFuZ2VMaXN0ZW5lcihMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXIkQWNjZXNzaWJpbGl0eVN0YXRlQ2hhbmdlTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVG91Y2hFeHBsb3JhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYW5hZ2VyJFRvdWNoRXhwbG9yYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyOylaIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRUb3VjaEV4cGxvcmF0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lcihMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXIkVG91Y2hFeHBsb3JhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXI7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNjZXNzaWJpbGl0eVNlcnZpY2VMaXN0KClMamF2YS91dGlsL0xpc3Q7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuYWJsZWRBY2Nlc3NpYmlsaXR5U2VydmljZUxpc3QoSSlMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YWxsZWRBY2Nlc3NpYmlsaXR5U2VydmljZUxpc3QoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImludGVycnVwdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWNjZXNzaWJpbGl0eUJ1dHRvblN1cHBvcnRlZCgpWiIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUb3VjaEV4cGxvcmF0aW9uRW5hYmxlZCgpWiIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQWNjZXNzaWJpbGl0eVJlcXVlc3RQcmVwYXJlcihMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlcXVlc3RQcmVwYXJlcjspViIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQWNjZXNzaWJpbGl0eVN0YXRlQ2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYW5hZ2VyJEFjY2Vzc2liaWxpdHlTdGF0ZUNoYW5nZUxpc3RlbmVyOylaIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVUb3VjaEV4cGxvcmF0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lcihMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXIkVG91Y2hFeHBsb3JhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXI7KVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFdmVudDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYW5hZ2VyJEFjY2Vzc2liaWxpdHlTdGF0ZUNoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25BY2Nlc3NpYmlsaXR5U3RhdGVDaGFuZ2VkKFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYW5hZ2VyJFRvdWNoRXhwbG9yYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Ub3VjaEV4cGxvcmF0aW9uU3RhdGVDaGFuZ2VkKFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mbyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBY3Rpb24oSSlWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFjdGlvbihMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvJEFjY2Vzc2liaWxpdHlBY3Rpb247KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZENoaWxkKExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZENoaWxkKExhbmRyb2lkL3ZpZXcvVmlldztJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbk9wZW5Qb3B1cCgpWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEFjY2Vzc2liaWxpdHlOb2RlSW5mb3NCeVRleHQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kQWNjZXNzaWJpbGl0eU5vZGVJbmZvc0J5Vmlld0lkKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0xpc3Q7IiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kRm9jdXMoSSlMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9jdXNTZWFyY2goSSlMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aW9uTGlzdCgpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aW9ucygpSSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVFeHRyYURhdGEoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvdW5kc0luUGFyZW50KExhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb3VuZHNJblNjcmVlbihMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hpbGQoSSlMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGFzc05hbWUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbGxlY3Rpb25JbmZvKClMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvJENvbGxlY3Rpb25JbmZvOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sbGVjdGlvbkl0ZW1JbmZvKClMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvJENvbGxlY3Rpb25JdGVtSW5mbzsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnREZXNjcmlwdGlvbigpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJhd2luZ09yZGVyKClJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcnJvcigpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYXMoKUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpbnRUZXh0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0VHlwZSgpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFiZWxGb3IoKUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm87IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYWJlbGVkQnkoKUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm87IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaXZlUmVnaW9uKClJIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhUZXh0TGVuZ3RoKClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb3ZlbWVudEdyYW51bGFyaXRpZXMoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VOYW1lKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYW5lVGl0bGUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50KClMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJhbmdlSW5mbygpTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mbyRSYW5nZUluZm87IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0U2VsZWN0aW9uRW5kKClJIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0U2VsZWN0aW9uU3RhcnQoKUkiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvb2x0aXBUZXh0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYXZlcnNhbEFmdGVyKClMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOyIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhdmVyc2FsQmVmb3JlKClMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOyIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vmlld0lkUmVzb3VyY2VOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpbmRvdygpTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlXaW5kb3dJbmZvOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2luZG93SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FjY2Vzc2liaWxpdHlGb2N1c2VkKClaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NoZWNrYWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2hlY2tlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2xpY2thYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb250ZW50SW52YWxpZCgpWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb250ZXh0Q2xpY2thYmxlKClaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Rpc21pc3NhYmxlKClaIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VkaXRhYmxlKClaIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZvY3VzYWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRm9jdXNlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSGVhZGluZygpWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xvbmdDbGlja2FibGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc011bHRpTGluZSgpWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQYXNzd29yZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2NyZWVuUmVhZGVyRm9jdXNhYmxlKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Njcm9sbGFibGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NlbGVjdGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTaG93aW5nSGludFRleHQoKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmlzaWJsZVRvVXNlcigpWiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluKClMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbihMYW5kcm9pZC92aWV3L1ZpZXc7KUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluKExhbmRyb2lkL3ZpZXcvVmlldztJKUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm87IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW4oTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mbzspTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJmb3JtQWN0aW9uKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBlcmZvcm1BY3Rpb24oSUxhbmRyb2lkL29zL0J1bmRsZTspWiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVjeWNsZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZnJlc2goKVoiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InJlZnJlc2hXaXRoRXh0cmFEYXRhKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQWN0aW9uKEkpViIgc2luY2U9IjIxIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUFjdGlvbihMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvJEFjY2Vzc2liaWxpdHlBY3Rpb247KVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUNoaWxkKExhbmRyb2lkL3ZpZXcvVmlldzspWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQ2hpbGQoTGFuZHJvaWQvdmlldy9WaWV3O0kpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWNjZXNzaWJpbGl0eUZvY3VzZWQoWilWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdmFpbGFibGVFeHRyYURhdGEoTGphdmEvdXRpbC9MaXN0OylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCb3VuZHNJblBhcmVudChMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qm91bmRzSW5TY3JlZW4oTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbk9wZW5Qb3B1cChaKVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoZWNrYWJsZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGVja2VkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENsYXNzTmFtZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENsaWNrYWJsZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2xsZWN0aW9uSW5mbyhMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvJENvbGxlY3Rpb25JbmZvOylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2xsZWN0aW9uSXRlbUluZm8oTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mbyRDb2xsZWN0aW9uSXRlbUluZm87KVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnREZXNjcmlwdGlvbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRJbnZhbGlkKFopViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGV4dENsaWNrYWJsZShaKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc21pc3NhYmxlKFopViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHJhd2luZ09yZGVyKEkpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RWRpdGFibGUoWilWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVycm9yKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb2N1c2FibGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9jdXNlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIZWFkaW5nKFopViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGludFRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkoWilWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dFR5cGUoSSlWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYWJlbEZvcihMYW5kcm9pZC92aWV3L1ZpZXc7KVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldExhYmVsRm9yKExhbmRyb2lkL3ZpZXcvVmlldztJKVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldExhYmVsZWRCeShMYW5kcm9pZC92aWV3L1ZpZXc7KVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldExhYmVsZWRCeShMYW5kcm9pZC92aWV3L1ZpZXc7SSlWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaXZlUmVnaW9uKEkpViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9uZ0NsaWNrYWJsZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhUZXh0TGVuZ3RoKEkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TW92ZW1lbnRHcmFudWxhcml0aWVzKEkpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TXVsdGlMaW5lKFopViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFja2FnZU5hbWUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYW5lVGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhcmVudChMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXJlbnQoTGFuZHJvaWQvdmlldy9WaWV3O0kpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFzc3dvcmQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmFuZ2VJbmZvKExhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm8kUmFuZ2VJbmZvOylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY3JlZW5SZWFkZXJGb2N1c2FibGUoWilWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY3JvbGxhYmxlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbGVjdGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNob3dpbmdIaW50VGV4dChaKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNvdXJjZShMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTb3VyY2UoTGFuZHJvaWQvdmlldy9WaWV3O0kpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRTZWxlY3Rpb24oSUkpViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VG9vbHRpcFRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyYXZlcnNhbEFmdGVyKExhbmRyb2lkL3ZpZXcvVmlldzspViIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhdmVyc2FsQWZ0ZXIoTGFuZHJvaWQvdmlldy9WaWV3O0kpViIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhdmVyc2FsQmVmb3JlKExhbmRyb2lkL3ZpZXcvVmlldzspViIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhdmVyc2FsQmVmb3JlKExhbmRyb2lkL3ZpZXcvVmlldztJKVYiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpZXdJZFJlc291cmNlTmFtZShMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlzaWJsZVRvVXNlcihaKVYiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FDQ0VTU0lCSUxJVFlfRk9DVVMiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FSR1VNRU5UX0NPTFVNTl9JTlQiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FSR1VNRU5UX0VYVEVORF9TRUxFQ1RJT05fQk9PTEVBTiIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQVJHVU1FTlRfSFRNTF9FTEVNRU5UX1NUUklORyIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQVJHVU1FTlRfTU9WRU1FTlRfR1JBTlVMQVJJVFlfSU5UIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BUkdVTUVOVF9NT1ZFX1dJTkRPV19YIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BUkdVTUVOVF9NT1ZFX1dJTkRPV19ZIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BUkdVTUVOVF9QUk9HUkVTU19WQUxVRSIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQVJHVU1FTlRfUk9XX0lOVCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQVJHVU1FTlRfU0VMRUNUSU9OX0VORF9JTlQiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FSR1VNRU5UX1NFTEVDVElPTl9TVEFSVF9JTlQiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0FSR1VNRU5UX1NFVF9URVhUX0NIQVJTRVFVRU5DRSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ0xFQVJfQUNDRVNTSUJJTElUWV9GT0NVUyIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ0xFQVJfRk9DVVMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DTEVBUl9TRUxFQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DTElDSyIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ09MTEFQU0UiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NPUFkiIHNpbmNlPSIxOCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NVVCIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRElTTUlTUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRVhQQU5EIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9GT0NVUyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0xPTkdfQ0xJQ0siIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX05FWFRfQVRfTU9WRU1FTlRfR1JBTlVMQVJJVFkiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX05FWFRfSFRNTF9FTEVNRU5UIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QQVNURSIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUFJFVklPVVNfQVRfTU9WRU1FTlRfR1JBTlVMQVJJVFkiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BSRVZJT1VTX0hUTUxfRUxFTUVOVCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0NST0xMX0JBQ0tXQVJEIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TQ1JPTExfRk9SV0FSRCIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0VMRUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0VUX1NFTEVDVElPTiIgc2luY2U9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0VUX1RFWFQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfREFUQV9URVhUX0NIQVJBQ1RFUl9MT0NBVElPTl9BUkdfTEVOR1RIIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0RBVEFfVEVYVF9DSEFSQUNURVJfTE9DQVRJT05fQVJHX1NUQVJUX0lOREVYIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0RBVEFfVEVYVF9DSEFSQUNURVJfTE9DQVRJT05fS0VZIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkZPQ1VTX0FDQ0VTU0lCSUxJVFkiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iRk9DVVNfSU5QVVQiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTU9WRU1FTlRfR1JBTlVMQVJJVFlfQ0hBUkFDVEVSIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PVkVNRU5UX0dSQU5VTEFSSVRZX0xJTkUiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTU9WRU1FTlRfR1JBTlVMQVJJVFlfUEFHRSIgc2luY2U9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNT1ZFTUVOVF9HUkFOVUxBUklUWV9QQVJBR1JBUEgiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iTU9WRU1FTlRfR1JBTlVMQVJJVFlfV09SRCIgc2luY2U9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvJEFjY2Vzc2liaWxpdHlBY3Rpb24iIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQUNDRVNTSUJJTElUWV9GT0NVUyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NMRUFSX0FDQ0VTU0lCSUxJVFlfRk9DVVMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DTEVBUl9GT0NVUyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NMRUFSX1NFTEVDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NMSUNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ09MTEFQU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DT05URVhUX0NMSUNLIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9DT1BZIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ1VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fRElTTUlTUyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0VYUEFORCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0ZPQ1VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fSElERV9UT09MVElQIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9MT05HX0NMSUNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fTU9WRV9XSU5ET1ciIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX05FWFRfQVRfTU9WRU1FTlRfR1JBTlVMQVJJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9ORVhUX0hUTUxfRUxFTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1BBU1RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUFJFVklPVVNfQVRfTU9WRU1FTlRfR1JBTlVMQVJJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9QUkVWSU9VU19IVE1MX0VMRU1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TQ1JPTExfQkFDS1dBUkQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TQ1JPTExfRE9XTiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0NST0xMX0ZPUldBUkQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TQ1JPTExfTEVGVCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0NST0xMX1JJR0hUIiBzaW5jZT0iMjMiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TQ1JPTExfVE9fUE9TSVRJT04iIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NDUk9MTF9VUCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0VMRUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0VUX1BST0dSRVNTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TRVRfU0VMRUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0VUX1RFWFQiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TSE9XX09OX1NDUkVFTiIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fU0hPV19UT09MVElQIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm8kQ29sbGVjdGlvbkluZm8iIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJWkkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sdW1uQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3dDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGlvbk1vZGUoKUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSGllcmFyY2hpY2FsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluKElJWilMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvJENvbGxlY3Rpb25JbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbihJSVpJKUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm8kQ29sbGVjdGlvbkluZm87IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTEVDVElPTl9NT0RFX01VTFRJUExFIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTEVDVElPTl9NT0RFX05PTkUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iU0VMRUNUSU9OX01PREVfU0lOR0xFIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm8kQ29sbGVjdGlvbkl0ZW1JbmZvIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJWlopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sdW1uSW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2x1bW5TcGFuKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um93SW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3dTcGFuKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNIZWFkaW5nKClaIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2VsZWN0ZWQoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbihJSUlJWilMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvJENvbGxlY3Rpb25JdGVtSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW4oSUlJSVpaKUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm8kQ29sbGVjdGlvbkl0ZW1JbmZvOyIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvJFJhbmdlSW5mbyIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUZGRilWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50KClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4KClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbihJRkZGKUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm8kUmFuZ2VJbmZvOyIvPgotCQk8ZmllbGQgbmFtZT0iUkFOR0VfVFlQRV9GTE9BVCIvPgotCQk8ZmllbGQgbmFtZT0iUkFOR0VfVFlQRV9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlJBTkdFX1RZUEVfUEVSQ0VOVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlUHJvdmlkZXIiIHNpbmNlPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRFeHRyYURhdGFUb0FjY2Vzc2liaWxpdHlOb2RlSW5mbyhJTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mbztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhJKUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEFjY2Vzc2liaWxpdHlOb2RlSW5mb3NCeVRleHQoTGphdmEvbGFuZy9TdHJpbmc7SSlMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEZvY3VzKEkpTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mbzsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InBlcmZvcm1BY3Rpb24oSUlMYW5kcm9pZC9vcy9CdW5kbGU7KVoiLz4KLQkJPGZpZWxkIG5hbWU9IkhPU1RfVklFV19JRCIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlY29yZCIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkZGVkQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCZWZvcmVUZXh0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGFzc05hbWUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnREZXNjcmlwdGlvbigpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudEl0ZW1JbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyb21JbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEl0ZW1Db3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFNjcm9sbFgoKUkiIHNpbmNlPSIxNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFNjcm9sbFkoKUkiIHNpbmNlPSIxNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmNlbGFibGVEYXRhKClMYW5kcm9pZC9vcy9QYXJjZWxhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlbW92ZWRDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjcm9sbERlbHRhWCgpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Nyb2xsRGVsdGFZKClJIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY3JvbGxYKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Nyb2xsWSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvdXJjZSgpTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0KClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9JbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpbmRvd0lkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDaGVja2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGdWxsU2NyZWVuKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQYXNzd29yZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2Nyb2xsYWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9idGFpbigpTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZWNvcmQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2J0YWluKExhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVjb3JkOylMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlY29yZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWN5Y2xlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWRkZWRDb3VudChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCZWZvcmVUZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hlY2tlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGFzc05hbWUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50RGVzY3JpcHRpb24oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXJyZW50SXRlbUluZGV4KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuYWJsZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RnJvbUluZGV4KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZ1bGxTY3JlZW4oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SXRlbUNvdW50KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1heFNjcm9sbFgoSSlWIiBzaW5jZT0iMTUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhTY3JvbGxZKEkpViIgc2luY2U9IjE1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyY2VsYWJsZURhdGEoTGFuZHJvaWQvb3MvUGFyY2VsYWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhc3N3b3JkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlbW92ZWRDb3VudChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY3JvbGxEZWx0YVgoSSlWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY3JvbGxEZWx0YVkoSSlWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY3JvbGxYKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjcm9sbFkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2Nyb2xsYWJsZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTb3VyY2UoTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U291cmNlKExhbmRyb2lkL3ZpZXcvVmlldztJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRvSW5kZXgoSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlcXVlc3RQcmVwYXJlciIgc2luY2U9IjI3Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmlldygpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUHJlcGFyZUV4dHJhRGF0YShJTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlO0xhbmRyb2lkL29zL01lc3NhZ2U7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUVVFU1RfVFlQRV9FWFRSQV9EQVRBIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVdpbmRvd0luZm8iIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5jaG9yKClMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm91bmRzSW5TY3JlZW4oTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkKEkpTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlXaW5kb3dJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheWVyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50KClMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVdpbmRvd0luZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um9vdCgpTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaXRsZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBY2Nlc3NpYmlsaXR5Rm9jdXNlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWN0aXZlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGb2N1c2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJblBpY3R1cmVJblBpY3R1cmVNb2RlKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW4oKUxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5V2luZG93SW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRhaW4oTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlXaW5kb3dJbmZvOylMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVdpbmRvd0luZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVjeWNsZSgpViIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BQ0NFU1NJQklMSVRZX09WRVJMQVkiIHNpbmNlPSIyMiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BUFBMSUNBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9JTlBVVF9NRVRIT0QiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfU1BMSVRfU0NSRUVOX0RJVklERVIiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9TWVNURU0iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9DYXB0aW9uaW5nTWFuYWdlciIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDYXB0aW9uaW5nQ2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0NhcHRpb25pbmdNYW5hZ2VyJENhcHRpb25pbmdDaGFuZ2VMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvbnRTY2FsZSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsZSgpTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlclN0eWxlKClMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQ2FwdGlvbmluZ01hbmFnZXIkQ2FwdGlvblN0eWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUNhcHRpb25pbmdDaGFuZ2VMaXN0ZW5lcihMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQ2FwdGlvbmluZ01hbmFnZXIkQ2FwdGlvbmluZ0NoYW5nZUxpc3RlbmVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQ2FwdGlvbmluZ01hbmFnZXIkQ2FwdGlvblN0eWxlIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSUxqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlZmFjZSgpTGFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQmFja2dyb3VuZENvbG9yKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNFZGdlQ29sb3IoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0VkZ2VUeXBlKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNGb3JlZ3JvdW5kQ29sb3IoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1dpbmRvd0NvbG9yKClaIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVER0VfVFlQRV9ERVBSRVNTRUQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRURHRV9UWVBFX0RST1BfU0hBRE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJFREdFX1RZUEVfTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iRURHRV9UWVBFX09VVExJTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVER0VfVFlQRV9SQUlTRUQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRURHRV9UWVBFX1VOU1BFQ0lGSUVEIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9ImJhY2tncm91bmRDb2xvciIvPgotCQk8ZmllbGQgbmFtZT0iZWRnZUNvbG9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJlZGdlVHlwZSIvPgotCQk8ZmllbGQgbmFtZT0iZm9yZWdyb3VuZENvbG9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3aW5kb3dDb2xvciIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQ2FwdGlvbmluZ01hbmFnZXIkQ2FwdGlvbmluZ0NoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25FbmFibGVkQ2hhbmdlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkZvbnRTY2FsZUNoYW5nZWQoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Mb2NhbGVDaGFuZ2VkKExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Vc2VyU3R5bGVDaGFuZ2VkKExhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9DYXB0aW9uaW5nTWFuYWdlciRDYXB0aW9uU3R5bGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FjY2VsZXJhdGVEZWNlbGVyYXRlSW50ZXJwb2xhdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vQmFzZUludGVycG9sYXRvciIgc2luY2U9IjIyIi8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vSW50ZXJwb2xhdG9yIiByZW1vdmVkPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FjY2VsZXJhdGVJbnRlcnBvbGF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9CYXNlSW50ZXJwb2xhdG9yIiBzaW5jZT0iMjIiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgcmVtb3ZlZD0iMjIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9JbnRlcnBvbGF0b3IiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FscGhhQW5pbWF0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9BbmltYXRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseVRyYW5zZm9ybWF0aW9uKEZMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9UcmFuc2Zvcm1hdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbCgpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlRHVyYXRpb25IaW50KClKIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuc3VyZUludGVycG9sYXRvcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhY2tncm91bmRDb2xvcigpSSIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV0YWNoV2FsbHBhcGVyKClaIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldER1cmF0aW9uKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsbEFmdGVyKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsbEJlZm9yZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVycG9sYXRvcigpTGFuZHJvaWQvdmlldy9hbmltYXRpb24vSW50ZXJwb2xhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcGVhdENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVwZWF0TW9kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYWxlRmFjdG9yKClGIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydE9mZnNldCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXJ0VGltZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYW5zZm9ybWF0aW9uKEpMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9UcmFuc2Zvcm1hdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYW5zZm9ybWF0aW9uKEpMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9UcmFuc2Zvcm1hdGlvbjtGKVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFpBZGp1c3RtZW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRW5kZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNTdGFydGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdGlhbGl6ZShJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZpbGxFbmFibGVkKClaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5pdGlhbGl6ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmVTaXplKElGSUkpRiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc3RyaWN0RHVyYXRpb24oSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2NhbGVDdXJyZW50RHVyYXRpb24oRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QW5pbWF0aW9uTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uJEFuaW1hdGlvbkxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmFja2dyb3VuZENvbG9yKEkpViIgc2luY2U9IjEyIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGV0YWNoV2FsbHBhcGVyKFopViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREdXJhdGlvbihKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaWxsQWZ0ZXIoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmlsbEJlZm9yZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaWxsRW5hYmxlZChaKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZXJwb2xhdG9yKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlcnBvbGF0b3IoTGFuZHJvaWQvdmlldy9hbmltYXRpb24vSW50ZXJwb2xhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVwZWF0Q291bnQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVwZWF0TW9kZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGFydE9mZnNldChKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGFydFRpbWUoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0WkFkanVzdG1lbnQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydE5vdygpViIvPgotCQk8bWV0aG9kIG5hbWU9IndpbGxDaGFuZ2VCb3VuZHMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aWxsQ2hhbmdlVHJhbnNmb3JtYXRpb25NYXRyaXgoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkFCU09MVVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTkZJTklURSIvPgotCQk8ZmllbGQgbmFtZT0iUkVMQVRJVkVfVE9fUEFSRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUxBVElWRV9UT19TRUxGIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNUQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVZFUlNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFSVF9PTl9GSVJTVF9GUkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iWk9SREVSX0JPVFRPTSIvPgotCQk8ZmllbGQgbmFtZT0iWk9SREVSX05PUk1BTCIvPgotCQk8ZmllbGQgbmFtZT0iWk9SREVSX1RPUCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uJEFuaW1hdGlvbkxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFuaW1hdGlvbkVuZChMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9BbmltYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFuaW1hdGlvblJlcGVhdChMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9BbmltYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFuaW1hdGlvblN0YXJ0KExhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uJERlc2NyaXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9InR5cGUiLz4KLQkJPGZpZWxkIG5hbWU9InZhbHVlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9BbmltYXRpb25TZXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9BbmltYXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFopViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFuaW1hdGlvbihMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9BbmltYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uU2V0OyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmltYXRpb25zKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9BbmltYXRpb25VdGlscyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3VycmVudEFuaW1hdGlvblRpbWVNaWxsaXMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkQW5pbWF0aW9uKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKUxhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkSW50ZXJwb2xhdG9yKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKUxhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0ludGVycG9sYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkTGF5b3V0QW5pbWF0aW9uKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKUxhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0xheW91dEFuaW1hdGlvbkNvbnRyb2xsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWFrZUluQW5pbWF0aW9uKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtaKUxhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYWtlSW5DaGlsZEJvdHRvbUFuaW1hdGlvbihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYWtlT3V0QW5pbWF0aW9uKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtaKUxhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FudGljaXBhdGVJbnRlcnBvbGF0b3IiIHNpbmNlPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9CYXNlSW50ZXJwb2xhdG9yIiBzaW5jZT0iMjIiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgcmVtb3ZlZD0iMjIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9JbnRlcnBvbGF0b3IiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FudGljaXBhdGVPdmVyc2hvb3RJbnRlcnBvbGF0b3IiIHNpbmNlPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9CYXNlSW50ZXJwb2xhdG9yIiBzaW5jZT0iMjIiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgcmVtb3ZlZD0iMjIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9JbnRlcnBvbGF0b3IiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vQmFzZUludGVycG9sYXRvciIgc2luY2U9IjIyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0ludGVycG9sYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vQm91bmNlSW50ZXJwb2xhdG9yIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vQmFzZUludGVycG9sYXRvciIgc2luY2U9IjIyIi8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vSW50ZXJwb2xhdG9yIiByZW1vdmVkPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0N5Y2xlSW50ZXJwb2xhdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vQmFzZUludGVycG9sYXRvciIgc2luY2U9IjIyIi8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vSW50ZXJwb2xhdG9yIiByZW1vdmVkPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9EZWNlbGVyYXRlSW50ZXJwb2xhdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vQmFzZUludGVycG9sYXRvciIgc2luY2U9IjIyIi8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vSW50ZXJwb2xhdG9yIiByZW1vdmVkPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9HcmlkTGF5b3V0QW5pbWF0aW9uQ29udHJvbGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0xheW91dEFuaW1hdGlvbkNvbnRyb2xsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9BbmltYXRpb247RkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbHVtbkRlbGF5KClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlyZWN0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlyZWN0aW9uUHJpb3JpdHkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3dEZWxheSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbHVtbkRlbGF5KEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpcmVjdGlvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaXJlY3Rpb25Qcmlvcml0eShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSb3dEZWxheShGKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTl9CT1RUT01fVE9fVE9QIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05fSE9SSVpPTlRBTF9NQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05fTEVGVF9UT19SSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OX1JJR0hUX1RPX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTl9UT1BfVE9fQk9UVE9NIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05fVkVSVElDQUxfTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iUFJJT1JJVFlfQ09MVU1OIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklPUklUWV9OT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklPUklUWV9ST1ciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0dyaWRMYXlvdXRBbmltYXRpb25Db250cm9sbGVyJEFuaW1hdGlvblBhcmFtZXRlcnMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9MYXlvdXRBbmltYXRpb25Db250cm9sbGVyJEFuaW1hdGlvblBhcmFtZXRlcnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbHVtbiIvPgotCQk8ZmllbGQgbmFtZT0iY29sdW1uc0NvdW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJyb3ciLz4KLQkJPGZpZWxkIG5hbWU9InJvd3NDb3VudCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vSW50ZXJwb2xhdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9hbmltYXRpb24vVGltZUludGVycG9sYXRvciIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZXJwb2xhdGlvbihGKUYiIHJlbW92ZWQ9IjExIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9MYXlvdXRBbmltYXRpb25Db250cm9sbGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9BbmltYXRpb247RilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5pbWF0aW9uKClMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9BbmltYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5pbWF0aW9uRm9yVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KUxhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWxheSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlbGF5Rm9yVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlcnBvbGF0b3IoKUxhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0ludGVycG9sYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmRlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYW5zZm9ybWVkSW5kZXgoTGFuZHJvaWQvdmlldy9hbmltYXRpb24vTGF5b3V0QW5pbWF0aW9uQ29udHJvbGxlciRBbmltYXRpb25QYXJhbWV0ZXJzOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEb25lKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QW5pbWF0aW9uKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbmltYXRpb24oTGFuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVsYXkoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZXJwb2xhdG9yKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlcnBvbGF0b3IoTGFuZHJvaWQvdmlldy9hbmltYXRpb24vSW50ZXJwb2xhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3JkZXIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aWxsT3ZlcmxhcCgpWiIvPgotCQk8ZmllbGQgbmFtZT0iT1JERVJfTk9STUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUkRFUl9SQU5ET00iLz4KLQkJPGZpZWxkIG5hbWU9Ik9SREVSX1JFVkVSU0UiLz4KLQkJPGZpZWxkIG5hbWU9Im1BbmltYXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9Im1JbnRlcnBvbGF0b3IiLz4KLQkJPGZpZWxkIG5hbWU9Im1SYW5kb21pemVyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9MYXlvdXRBbmltYXRpb25Db250cm9sbGVyJEFuaW1hdGlvblBhcmFtZXRlcnMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iY291bnQiLz4KLQkJPGZpZWxkIG5hbWU9ImluZGV4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9MaW5lYXJJbnRlcnBvbGF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9CYXNlSW50ZXJwb2xhdG9yIiBzaW5jZT0iMjIiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgcmVtb3ZlZD0iMjIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9JbnRlcnBvbGF0b3IiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vT3ZlcnNob290SW50ZXJwb2xhdG9yIiBzaW5jZT0iNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vQmFzZUludGVycG9sYXRvciIgc2luY2U9IjIyIi8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiIHJlbW92ZWQ9IjIyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vSW50ZXJwb2xhdG9yIiByZW1vdmVkPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9QYXRoSW50ZXJwb2xhdG9yIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0Jhc2VJbnRlcnBvbGF0b3IiIHNpbmNlPSIyMiIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiByZW1vdmVkPSIyMiIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0ludGVycG9sYXRvciIgcmVtb3ZlZD0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2dyYXBoaWNzL1BhdGg7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL1JvdGF0ZUFuaW1hdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGRklGSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL1NjYWxlQW5pbWF0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGRkZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihGRkZGSUZJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vVHJhbnNmb3JtYXRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcG9zZShMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9UcmFuc2Zvcm1hdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFscGhhKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF0cml4KClMYW5kcm9pZC9ncmFwaGljcy9NYXRyaXg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNmb3JtYXRpb25UeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KExhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL1RyYW5zZm9ybWF0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxwaGEoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhbnNmb3JtYXRpb25UeXBlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InRvU2hvcnRTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfQk9USCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9JREVOVElUWSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9NQVRSSVgiLz4KLQkJPGZpZWxkIG5hbWU9Im1BbHBoYSIvPgotCQk8ZmllbGQgbmFtZT0ibU1hdHJpeCIvPgotCQk8ZmllbGQgbmFtZT0ibVRyYW5zZm9ybWF0aW9uVHlwZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vVHJhbnNsYXRlQW5pbWF0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJRklGSUZJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbElkIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxNYW5hZ2VyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tbWl0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzYWJsZUF1dG9maWxsU2VydmljZXMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRvZmlsbFNlcnZpY2VDb21wb25lbnROYW1lKClMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVGaWVsZENsYXNzaWZpY2F0aW9uQWxnb3JpdGhtcygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdEZpZWxkQ2xhc3NpZmljYXRpb25BbGdvcml0aG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV4dEF1dG9maWxsSWQoKUxhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxJZDsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJEYXRhKClMYW5kcm9pZC9zZXJ2aWNlL2F1dG9maWxsL1VzZXJEYXRhOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlckRhdGFJZCgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNFbmFibGVkQXV0b2ZpbGxTZXJ2aWNlcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXV0b2ZpbGxTdXBwb3J0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZpZWxkQ2xhc3NpZmljYXRpb25FbmFibGVkKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlWYWx1ZUNoYW5nZWQoTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5VmFsdWVDaGFuZ2VkKExhbmRyb2lkL3ZpZXcvVmlldztJTGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbFZhbHVlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5Vmlld0NsaWNrZWQoTGFuZHJvaWQvdmlldy9WaWV3OylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlWaWV3Q2xpY2tlZChMYW5kcm9pZC92aWV3L1ZpZXc7SSlWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlWaWV3RW50ZXJlZChMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlWaWV3RW50ZXJlZChMYW5kcm9pZC92aWV3L1ZpZXc7SUxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlWaWV3RXhpdGVkKExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeVZpZXdFeGl0ZWQoTGFuZHJvaWQvdmlldy9WaWV3O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeVZpZXdWaXNpYmlsaXR5Q2hhbmdlZChMYW5kcm9pZC92aWV3L1ZpZXc7SVopViIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5Vmlld1Zpc2liaWxpdHlDaGFuZ2VkKExhbmRyb2lkL3ZpZXcvVmlldztaKVYiIHNpbmNlPSIyNyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQ2FsbGJhY2soTGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbE1hbmFnZXIkQXV0b2ZpbGxDYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RBdXRvZmlsbChMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0QXV0b2ZpbGwoTGFuZHJvaWQvdmlldy9WaWV3O0lMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXNlckRhdGEoTGFuZHJvaWQvc2VydmljZS9hdXRvZmlsbC9Vc2VyRGF0YTspViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckNhbGxiYWNrKExhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxNYW5hZ2VyJEF1dG9maWxsQ2FsbGJhY2s7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FTU0lTVF9TVFJVQ1RVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFJBX0FVVEhFTlRJQ0FUSU9OX1JFU1VMVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhUUkFfQ0xJRU5UX1NUQVRFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2F1dG9maWxsL0F1dG9maWxsTWFuYWdlciRBdXRvZmlsbENhbGxiYWNrIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25BdXRvZmlsbEV2ZW50KExhbmRyb2lkL3ZpZXcvVmlldztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkF1dG9maWxsRXZlbnQoTGFuZHJvaWQvdmlldy9WaWV3O0lJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkVWRU5UX0lOUFVUX0hJRERFTiIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfSU5QVVRfU0hPV04iLz4KLQkJPGZpZWxkIG5hbWU9IkVWRU5UX0lOUFVUX1VOQVZBSUxBQkxFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2F1dG9maWxsL0F1dG9maWxsVmFsdWUiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckRhdGUoSilMYW5kcm9pZC92aWV3L2F1dG9maWxsL0F1dG9maWxsVmFsdWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yTGlzdChJKUxhbmRyb2lkL3ZpZXcvYXV0b2ZpbGwvQXV0b2ZpbGxWYWx1ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JUZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC92aWV3L2F1dG9maWxsL0F1dG9maWxsVmFsdWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yVG9nZ2xlKFopTGFuZHJvaWQvdmlldy9hdXRvZmlsbC9BdXRvZmlsbFZhbHVlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGVWYWx1ZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpc3RWYWx1ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRWYWx1ZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG9nZ2xlVmFsdWUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RhdGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xpc3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RleHQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RvZ2dsZSgpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9CYXNlSW5wdXRDb25uZWN0aW9uIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0Q29ubmVjdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXc7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tcG9zaW5nU3BhbkVuZChMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBvc2luZ1NwYW5TdGFydChMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVkaXRhYmxlKClMYW5kcm9pZC90ZXh0L0VkaXRhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUNvbXBvc2luZ1NwYW5zKExhbmRyb2lkL3RleHQvU3Bhbm5hYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29tcG9zaW5nU3BhbnMoTGFuZHJvaWQvdGV4dC9TcGFubmFibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvQ29tcGxldGlvbkluZm8iIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSklMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKSUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYWJlbCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zaXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvQ29ycmVjdGlvbkluZm8iIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5ld1RleHQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9mZnNldCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9sZFRleHQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9DdXJzb3JBbmNob3JJbmZvIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyYWN0ZXJCb3VuZHMoSSlMYW5kcm9pZC9ncmFwaGljcy9SZWN0RjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyYWN0ZXJCb3VuZHNGbGFncyhJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wb3NpbmdUZXh0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wb3NpbmdUZXh0U3RhcnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnNlcnRpb25NYXJrZXJCYXNlbGluZSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc2VydGlvbk1hcmtlckJvdHRvbSgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc2VydGlvbk1hcmtlckZsYWdzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zZXJ0aW9uTWFya2VySG9yaXpvbnRhbCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc2VydGlvbk1hcmtlclRvcCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hdHJpeCgpTGFuZHJvaWQvZ3JhcGhpY3MvTWF0cml4OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGlvbkVuZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGlvblN0YXJ0KClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0hBU19JTlZJU0lCTEVfUkVHSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX0hBU19WSVNJQkxFX1JFR0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19JU19SVEwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvQ3Vyc29yQW5jaG9ySW5mbyRCdWlsZGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQ2hhcmFjdGVyQm91bmRzKElGRkZGSSlMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0N1cnNvckFuY2hvckluZm8kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9DdXJzb3JBbmNob3JJbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29tcG9zaW5nVGV4dChJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvQ3Vyc29yQW5jaG9ySW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluc2VydGlvbk1hcmtlckxvY2F0aW9uKEZGRkZJKUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvQ3Vyc29yQW5jaG9ySW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1hdHJpeChMYW5kcm9pZC9ncmFwaGljcy9NYXRyaXg7KUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvQ3Vyc29yQW5jaG9ySW5mbyRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbGVjdGlvblJhbmdlKElJKUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvQ3Vyc29yQW5jaG9ySW5mbyRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9FZGl0b3JJbmZvIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9JbnB1dFR5cGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdW1wKExhbmRyb2lkL3V0aWwvUHJpbnRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im1ha2VDb21wYXRpYmxlKEkpViIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTUVfQUNUSU9OX0RPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IklNRV9BQ1RJT05fR08iLz4KLQkJPGZpZWxkIG5hbWU9IklNRV9BQ1RJT05fTkVYVCIvPgotCQk8ZmllbGQgbmFtZT0iSU1FX0FDVElPTl9OT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTUVfQUNUSU9OX1BSRVZJT1VTIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IklNRV9BQ1RJT05fU0VBUkNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTUVfQUNUSU9OX1NFTkQiLz4KLQkJPGZpZWxkIG5hbWU9IklNRV9BQ1RJT05fVU5TUEVDSUZJRUQiLz4KLQkJPGZpZWxkIG5hbWU9IklNRV9GTEFHX0ZPUkNFX0FTQ0lJIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IklNRV9GTEFHX05BVklHQVRFX05FWFQiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iSU1FX0ZMQUdfTkFWSUdBVEVfUFJFVklPVVMiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iSU1FX0ZMQUdfTk9fQUNDRVNTT1JZX0FDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iSU1FX0ZMQUdfTk9fRU5URVJfQUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTUVfRkxBR19OT19FWFRSQUNUX1VJIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTUVfRkxBR19OT19GVUxMU0NSRUVOIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IklNRV9GTEFHX05PX1BFUlNPTkFMSVpFRF9MRUFSTklORyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTUVfTUFTS19BQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IklNRV9OVUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJhY3Rpb25JZCIvPgotCQk8ZmllbGQgbmFtZT0iYWN0aW9uTGFiZWwiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbnRlbnRNaW1lVHlwZXMiIHNpbmNlPSIyNSIvPgotCQk8ZmllbGQgbmFtZT0iZXh0cmFzIi8+Ci0JCTxmaWVsZCBuYW1lPSJmaWVsZElkIi8+Ci0JCTxmaWVsZCBuYW1lPSJmaWVsZE5hbWUiLz4KLQkJPGZpZWxkIG5hbWU9ImhpbnRMb2NhbGVzIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9ImhpbnRUZXh0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpbWVPcHRpb25zIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbml0aWFsQ2Fwc01vZGUiLz4KLQkJPGZpZWxkIG5hbWU9ImluaXRpYWxTZWxFbmQiLz4KLQkJPGZpZWxkIG5hbWU9ImluaXRpYWxTZWxTdGFydCIvPgotCQk8ZmllbGQgbmFtZT0iaW5wdXRUeXBlIi8+Ci0JCTxmaWVsZCBuYW1lPSJsYWJlbCIvPgotCQk8ZmllbGQgbmFtZT0icGFja2FnZU5hbWUiLz4KLQkJPGZpZWxkIG5hbWU9InByaXZhdGVJbWVPcHRpb25zIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0V4dHJhY3RlZFRleHQiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfU0VMRUNUSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTEFHX1NJTkdMRV9MSU5FIi8+Ci0JCTxmaWVsZCBuYW1lPSJmbGFncyIvPgotCQk8ZmllbGQgbmFtZT0iaGludCIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwYXJ0aWFsRW5kT2Zmc2V0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwYXJ0aWFsU3RhcnRPZmZzZXQiLz4KLQkJPGZpZWxkIG5hbWU9InNlbGVjdGlvbkVuZCIvPgotCQk8ZmllbGQgbmFtZT0ic2VsZWN0aW9uU3RhcnQiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXJ0T2Zmc2V0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ0ZXh0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0V4dHJhY3RlZFRleHRSZXF1ZXN0IiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJmbGFncyIvPgotCQk8ZmllbGQgbmFtZT0iaGludE1heENoYXJzIi8+Ci0JCTxmaWVsZCBuYW1lPSJoaW50TWF4TGluZXMiLz4KLQkJPGZpZWxkIG5hbWU9InRva2VuIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0QmluZGluZyIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0Q29ubmVjdGlvbjtMYW5kcm9pZC9vcy9JQmluZGVyO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dENvbm5lY3Rpb247TGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dEJpbmRpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25uZWN0aW9uKClMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0Q29ubmVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25uZWN0aW9uVG9rZW4oKUxhbmRyb2lkL29zL0lCaW5kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VWlkKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0Q29ubmVjdGlvbiIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmVnaW5CYXRjaEVkaXQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhck1ldGFLZXlTdGF0ZXMoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2VDb25uZWN0aW9uKClWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21taXRDb21wbGV0aW9uKExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvQ29tcGxldGlvbkluZm87KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21taXRDb250ZW50KExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRDb250ZW50SW5mbztJTGFuZHJvaWQvb3MvQnVuZGxlOylaIiBzaW5jZT0iMjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21taXRDb3JyZWN0aW9uKExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvQ29ycmVjdGlvbkluZm87KVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbW1pdFRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVsZXRlU3Vycm91bmRpbmdUZXh0KElJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVTdXJyb3VuZGluZ1RleHRJbkNvZGVQb2ludHMoSUkpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5kQmF0Y2hFZGl0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluaXNoQ29tcG9zaW5nVGV4dCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnNvckNhcHNNb2RlKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dHJhY3RlZFRleHQoTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9FeHRyYWN0ZWRUZXh0UmVxdWVzdDtJKUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvRXh0cmFjdGVkVGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIYW5kbGVyKClMYW5kcm9pZC9vcy9IYW5kbGVyOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VsZWN0ZWRUZXh0KEkpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRBZnRlckN1cnNvcihJSSlMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0QmVmb3JlQ3Vyc29yKElJKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9InBlcmZvcm1Db250ZXh0TWVudUFjdGlvbihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJmb3JtRWRpdG9yQWN0aW9uKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBlcmZvcm1Qcml2YXRlQ29tbWFuZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBvcnRGdWxsc2NyZWVuTW9kZShaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Q3Vyc29yVXBkYXRlcyhJKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRLZXlFdmVudChMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29tcG9zaW5nUmVnaW9uKElJKVoiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29tcG9zaW5nVGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWxlY3Rpb24oSUkpWiIvPgotCQk8ZmllbGQgbmFtZT0iQ1VSU09SX1VQREFURV9JTU1FRElBVEUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ1VSU09SX1VQREFURV9NT05JVE9SIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkdFVF9FWFRSQUNURURfVEVYVF9NT05JVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRVRfVEVYVF9XSVRIX1NUWUxFUyIvPgotCQk8ZmllbGQgbmFtZT0iSU5QVVRfQ09OVEVOVF9HUkFOVF9SRUFEX1VSSV9QRVJNSVNTSU9OIiBzaW5jZT0iMjUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRDb25uZWN0aW9uV3JhcHBlciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dENvbm5lY3Rpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dENvbm5lY3Rpb247WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFyZ2V0KExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRDb25uZWN0aW9uOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0Q29udGVudEluZm8iIHNpbmNlPSIyNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL25ldC9Vcmk7TGFuZHJvaWQvY29udGVudC9DbGlwRGVzY3JpcHRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvbmV0L1VyaTtMYW5kcm9pZC9jb250ZW50L0NsaXBEZXNjcmlwdGlvbjtMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudFVyaSgpTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNjcmlwdGlvbigpTGFuZHJvaWQvY29udGVudC9DbGlwRGVzY3JpcHRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGlua1VyaSgpTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlUGVybWlzc2lvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RQZXJtaXNzaW9uKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdHRhY2hUb2tlbihMYW5kcm9pZC9vcy9JQmluZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZElucHV0KExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRCaW5kaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hhbmdlSW5wdXRNZXRob2RTdWJ0eXBlKExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTZXNzaW9uKExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2QkU2Vzc2lvbkNhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGlkZVNvZnRJbnB1dChJTGFuZHJvaWQvb3MvUmVzdWx0UmVjZWl2ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN0YXJ0SW5wdXQoTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dENvbm5lY3Rpb247TGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9FZGl0b3JJbmZvOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmV2b2tlU2Vzc2lvbihMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU2Vzc2lvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlc3Npb25FbmFibGVkKExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTZXNzaW9uO1opViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dTb2Z0SW5wdXQoSUxhbmRyb2lkL29zL1Jlc3VsdFJlY2VpdmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRJbnB1dChMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0Q29ubmVjdGlvbjtMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0VkaXRvckluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmJpbmRJbnB1dCgpViIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9JTlRFUkZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZJQ0VfTUVUQV9EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX0VYUExJQ0lUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX0ZPUkNFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZCRTZXNzaW9uQ2FsbGJhY2siIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InNlc3Npb25DcmVhdGVkKExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTZXNzaW9uOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kSW5mbyIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvY29udGVudC9wbS9SZXNvbHZlSW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXAoTGFuZHJvaWQvdXRpbC9QcmludGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tcG9uZW50KClMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElzRGVmYXVsdFJlc291cmNlSWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VydmljZUluZm8oKUxhbmRyb2lkL2NvbnRlbnQvcG0vU2VydmljZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VydmljZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNldHRpbmdzQWN0aXZpdHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YnR5cGVBdChJKUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VidHlwZUNvdW50KClJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkSWNvbihMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkTGFiZWwoTGFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlTWFuYWdlcjspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kTWFuYWdlciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hLZXlFdmVudEZyb21JbnB1dE1ldGhvZChMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9LZXlFdmVudDspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGxheUNvbXBsZXRpb25zKExhbmRyb2lkL3ZpZXcvVmlldztbTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9Db21wbGV0aW9uSW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRJbnB1dE1ldGhvZFN1YnR5cGUoKUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlOyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5hYmxlZElucHV0TWV0aG9kTGlzdCgpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuYWJsZWRJbnB1dE1ldGhvZFN1YnR5cGVMaXN0KExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RJbmZvO1opTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRNZXRob2RMaXN0KClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFzdElucHV0TWV0aG9kU3VidHlwZSgpTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFN1YnR5cGU7IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG9ydGN1dElucHV0TWV0aG9kc0FuZFN1YnR5cGVzKClMamF2YS91dGlsL01hcDsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImhpZGVTb2Z0SW5wdXRGcm9tSW5wdXRNZXRob2QoTGFuZHJvaWQvb3MvSUJpbmRlcjtJKVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGlkZVNvZnRJbnB1dEZyb21XaW5kb3coTGFuZHJvaWQvb3MvSUJpbmRlcjtJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoaWRlU29mdElucHV0RnJvbVdpbmRvdyhMYW5kcm9pZC9vcy9JQmluZGVyO0lMYW5kcm9pZC9vcy9SZXN1bHRSZWNlaXZlcjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImhpZGVTdGF0dXNJY29uKExhbmRyb2lkL29zL0lCaW5kZXI7KVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBY2NlcHRpbmdUZXh0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBY3RpdmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FjdGl2ZShMYW5kcm9pZC92aWV3L1ZpZXc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Z1bGxzY3JlZW5Nb2RlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXYXRjaGluZ0N1cnNvcihMYW5kcm9pZC92aWV3L1ZpZXc7KVoiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdGFydElucHV0KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRBcHBQcml2YXRlQ29tbWFuZChMYW5kcm9pZC92aWV3L1ZpZXc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWRkaXRpb25hbElucHV0TWV0aG9kU3VidHlwZXMoTGphdmEvbGFuZy9TdHJpbmc7W0xhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlOylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXJyZW50SW5wdXRNZXRob2RTdWJ0eXBlKExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlOylaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dE1ldGhvZChMYW5kcm9pZC9vcy9JQmluZGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldElucHV0TWV0aG9kQW5kU3VidHlwZShMYW5kcm9pZC9vcy9JQmluZGVyO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlOylWIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdWxkT2ZmZXJTd2l0Y2hpbmdUb05leHRJbnB1dE1ldGhvZChMYW5kcm9pZC9vcy9JQmluZGVyOylaIiBzaW5jZT0iMTkiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd0lucHV0TWV0aG9kQW5kU3VidHlwZUVuYWJsZXIoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dJbnB1dE1ldGhvZFBpY2tlcigpViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dTb2Z0SW5wdXQoTGFuZHJvaWQvdmlldy9WaWV3O0kpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dTb2Z0SW5wdXQoTGFuZHJvaWQvdmlldy9WaWV3O0lMYW5kcm9pZC9vcy9SZXN1bHRSZWNlaXZlcjspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dTb2Z0SW5wdXRGcm9tSW5wdXRNZXRob2QoTGFuZHJvaWQvb3MvSUJpbmRlcjtJKVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd1N0YXR1c0ljb24oTGFuZHJvaWQvb3MvSUJpbmRlcjtMamF2YS9sYW5nL1N0cmluZztJKVYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3dpdGNoVG9MYXN0SW5wdXRNZXRob2QoTGFuZHJvaWQvb3MvSUJpbmRlcjspWiIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InN3aXRjaFRvTmV4dElucHV0TWV0aG9kKExhbmRyb2lkL29zL0lCaW5kZXI7WilaIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9nZ2xlU29mdElucHV0KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b2dnbGVTb2Z0SW5wdXRGcm9tV2luZG93KExhbmRyb2lkL29zL0lCaW5kZXI7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUN1cnNvcihMYW5kcm9pZC92aWV3L1ZpZXc7SUlJSSlWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUN1cnNvckFuY2hvckluZm8oTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvQ3Vyc29yQW5jaG9ySW5mbzspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlRXh0cmFjdGVkVGV4dChMYW5kcm9pZC92aWV3L1ZpZXc7SUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvRXh0cmFjdGVkVGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZVNlbGVjdGlvbihMYW5kcm9pZC92aWV3L1ZpZXc7SUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idmlld0NsaWNrZWQoTGFuZHJvaWQvdmlldy9WaWV3OylWIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkhJREVfSU1QTElDSVRfT05MWSIvPgotCQk8ZmllbGQgbmFtZT0iSElERV9OT1RfQUxXQVlTIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfSElEREVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfU0hPV04iLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9VTkNIQU5HRURfSElEREVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfVU5DSEFOR0VEX1NIT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX0ZPUkNFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0hPV19JTVBMSUNJVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFNlc3Npb24iIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcFByaXZhdGVDb21tYW5kKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoR2VuZXJpY01vdGlvbkV2ZW50KElMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50O0xhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTZXNzaW9uJEV2ZW50Q2FsbGJhY2s7KVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoS2V5RXZlbnQoSUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7TGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFNlc3Npb24kRXZlbnRDYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BhdGNoVHJhY2tiYWxsRXZlbnQoSUxhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7TGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFNlc3Npb24kRXZlbnRDYWxsYmFjazspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BsYXlDb21wbGV0aW9ucyhbTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9Db21wbGV0aW9uSW5mbzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaElucHV0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9nZ2xlU29mdElucHV0KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVDdXJzb3IoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUN1cnNvckFuY2hvckluZm8oTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9DdXJzb3JBbmNob3JJbmZvOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVFeHRyYWN0ZWRUZXh0KElMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0V4dHJhY3RlZFRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVTZWxlY3Rpb24oSUlJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2aWV3Q2xpY2tlZChaKVYiIHNpbmNlPSIxNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFNlc3Npb24kRXZlbnRDYWxsYmFjayIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluaXNoZWRFdmVudChJWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZSIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7WlopViIgc2luY2U9IjE0IiBkZXByZWNhdGVkPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1paSSlWIiBzaW5jZT0iMTciIGRlcHJlY2F0ZWQ9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnNFeHRyYVZhbHVlS2V5KExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TmFtZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvY29udGVudC9wbS9BcHBsaWNhdGlvbkluZm87KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFWYWx1ZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFWYWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEljb25SZXNJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhbmd1YWdlVGFnKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vZGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWVSZXNJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXNjaWlDYXBhYmxlKClaIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0F1eGlsaWFyeSgpWiIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3ZlcnJpZGVzSW1wbGljaXRseUVuYWJsZWRTdWJ0eXBlKClaIiBzaW5jZT0iMTQiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlJElucHV0TWV0aG9kU3VidHlwZUJ1aWxkZXIiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFN1YnR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SXNBc2NpaUNhcGFibGUoWilMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZSRJbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldElzQXV4aWxpYXJ5KFopTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFN1YnR5cGUkSW5wdXRNZXRob2RTdWJ0eXBlQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYW5ndWFnZVRhZyhMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFN1YnR5cGUkSW5wdXRNZXRob2RTdWJ0eXBlQnVpbGRlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldE92ZXJyaWRlc0ltcGxpY2l0bHlFbmFibGVkU3VidHlwZShaKUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlJElucHV0TWV0aG9kU3VidHlwZUJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VidHlwZUV4dHJhVmFsdWUoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlJElucHV0TWV0aG9kU3VidHlwZUJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VidHlwZUljb25SZXNJZChJKUxhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlJElucHV0TWV0aG9kU3VidHlwZUJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VidHlwZUlkKEkpTGFuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFN1YnR5cGUkSW5wdXRNZXRob2RTdWJ0eXBlQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdWJ0eXBlTG9jYWxlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZSRJbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1YnR5cGVNb2RlKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZSRJbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1YnR5cGVOYW1lUmVzSWQoSSlMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZSRJbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9TZWxlY3Rpb25FdmVudCIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU2VsZWN0aW9uQWN0aW9uRXZlbnQoSUlJKUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvU2VsZWN0aW9uRXZlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU2VsZWN0aW9uQWN0aW9uRXZlbnQoSUlJTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0Q2xhc3NpZmljYXRpb247KUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvU2VsZWN0aW9uRXZlbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU2VsZWN0aW9uTW9kaWZpZWRFdmVudChJSSlMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1NlbGVjdGlvbkV2ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVNlbGVjdGlvbk1vZGlmaWVkRXZlbnQoSUlMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbjspTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9TZWxlY3Rpb25FdmVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTZWxlY3Rpb25Nb2RpZmllZEV2ZW50KElJTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0U2VsZWN0aW9uOylMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1NlbGVjdGlvbkV2ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVNlbGVjdGlvblN0YXJ0ZWRFdmVudChJSSlMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1NlbGVjdGlvbkV2ZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldER1cmF0aW9uU2luY2VQcmV2aW91c0V2ZW50KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHVyYXRpb25TaW5jZVNlc3Npb25TdGFydCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudGl0eVR5cGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV2ZW50SW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFdmVudFRpbWUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFdmVudFR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnZvY2F0aW9uTWV0aG9kKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3VsdElkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXNzaW9uSWQoKUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dENsYXNzaWZpY2F0aW9uU2Vzc2lvbklkOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNtYXJ0RW5kKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U21hcnRTdGFydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXJ0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkZ2V0VHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkZ2V0VmVyc2lvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUZXJtaW5hbChJKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BQkFORE9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fQ09QWSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0NVVCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX0RSQUciLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9PVEhFUiIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX09WRVJUWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUEFTVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9SRVNFVCIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NFTEVDVF9BTEwiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9TSEFSRSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1NNQVJUX1NIQVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9BVVRPX1NFTEVDVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfU0VMRUNUSU9OX01PRElGSUVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9TRUxFQ1RJT05fU1RBUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iRVZFTlRfU01BUlRfU0VMRUNUSU9OX01VTFRJIi8+Ci0JCTxmaWVsZCBuYW1lPSJFVkVOVF9TTUFSVF9TRUxFQ1RJT05fU0lOR0xFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlZPQ0FUSU9OX0xJTksiLz4KLQkJPGZpZWxkIG5hbWU9IklOVk9DQVRJT05fTUFOVUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlZPQ0FUSU9OX1VOS05PV04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dENsYXNzaWZpY2F0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGlvbnMoKUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbmZpZGVuY2VTY29yZShMamF2YS9sYW5nL1N0cmluZzspRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudGl0eShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudGl0eUNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWNvbigpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVudCgpTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhYmVsKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T25DbGlja0xpc3RlbmVyKClMYW5kcm9pZC92aWV3L1ZpZXckT25DbGlja0xpc3RlbmVyOyIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiIHNpbmNlPSIyOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0Q2xhc3NpZmljYXRpb24kQnVpbGRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFjdGlvbihMYW5kcm9pZC9hcHAvUmVtb3RlQWN0aW9uOylMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dENsYXNzaWZpY2F0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVudGl0eVR5cGUoTGphdmEvbGFuZy9TdHJpbmc7RilMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbiRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEljb24oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dENsYXNzaWZpY2F0aW9uJEJ1aWxkZXI7IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldElkKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbiRCdWlsZGVyOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZW50KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbiRCdWlsZGVyOyIgZGVwcmVjYXRlZD0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYWJlbChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0Q2xhc3NpZmljYXRpb24kQnVpbGRlcjsiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25DbGlja0xpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlldyRPbkNsaWNrTGlzdGVuZXI7KUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dENsYXNzaWZpY2F0aW9uJEJ1aWxkZXI7IiBkZXByZWNhdGVkPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHQoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dENsYXNzaWZpY2F0aW9uJEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbiRSZXF1ZXN0IiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0TG9jYWxlcygpTGFuZHJvaWQvb3MvTG9jYWxlTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmRJbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlZmVyZW5jZVRpbWUoKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydEluZGV4KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbiRSZXF1ZXN0JEJ1aWxkZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbiRSZXF1ZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHRMb2NhbGVzKExhbmRyb2lkL29zL0xvY2FsZUxpc3Q7KUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dENsYXNzaWZpY2F0aW9uJFJlcXVlc3QkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWZlcmVuY2VUaW1lKExqYXZhL3RpbWUvWm9uZWREYXRlVGltZTspTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0Q2xhc3NpZmljYXRpb24kUmVxdWVzdCRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0Q2xhc3NpZmljYXRpb25Db250ZXh0IiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkZ2V0VHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkZ2V0VmVyc2lvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbkNvbnRleHQkQnVpbGRlciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbkNvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2lkZ2V0VmVyc2lvbihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0Q2xhc3NpZmljYXRpb25Db250ZXh0JEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbk1hbmFnZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVGV4dENsYXNzaWZpY2F0aW9uU2Vzc2lvbihMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbkNvbnRleHQ7KUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dENsYXNzaWZpZXI7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0Q2xhc3NpZmllcigpTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0Q2xhc3NpZmllcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0Q2xhc3NpZmljYXRpb25TZXNzaW9uRmFjdG9yeShMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvblNlc3Npb25GYWN0b3J5OylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0Q2xhc3NpZmllcihMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvblNlc3Npb25GYWN0b3J5IiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVGV4dENsYXNzaWZpY2F0aW9uU2Vzc2lvbihMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbkNvbnRleHQ7KUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dENsYXNzaWZpZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvblNlc3Npb25JZCIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dENsYXNzaWZpZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGFzc2lmeVRleHQoTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0Q2xhc3NpZmljYXRpb24kUmVxdWVzdDspTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0Q2xhc3NpZmljYXRpb247IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGFzc2lmeVRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUlMYW5kcm9pZC9vcy9Mb2NhbGVMaXN0OylMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWNhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXN0cm95KClWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZUxpbmtzKExhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dExpbmtzJFJlcXVlc3Q7KUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dExpbmtzOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4R2VuZXJhdGVMaW5rc1RleHRMZW5ndGgoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGVzdHJveWVkKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNlbGVjdGlvbkV2ZW50KExhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvU2VsZWN0aW9uRXZlbnQ7KVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InN1Z2dlc3RTZWxlY3Rpb24oTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0U2VsZWN0aW9uJFJlcXVlc3Q7KUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dFNlbGVjdGlvbjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InN1Z2dlc3RTZWxlY3Rpb24oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUlMYW5kcm9pZC9vcy9Mb2NhbGVMaXN0OylMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRTZWxlY3Rpb247Ii8+Ci0JCTxmaWVsZCBuYW1lPSJISU5UX1RFWFRfSVNfRURJVEFCTEUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iSElOVF9URVhUX0lTX05PVF9FRElUQUJMRSIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOT19PUCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9BRERSRVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX0RBVEUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9EQVRFX1RJTUUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9FTUFJTCIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9GTElHSFRfTlVNQkVSIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfT1RIRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfUEhPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfVU5LTk9XTiIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1VSTCIvPgotCQk8ZmllbGQgbmFtZT0iV0lER0VUX1RZUEVfQ1VTVE9NX0VESVRURVhUIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IldJREdFVF9UWVBFX0NVU1RPTV9URVhUVklFVyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSURHRVRfVFlQRV9DVVNUT01fVU5TRUxFQ1RBQkxFX1RFWFRWSUVXIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IldJREdFVF9UWVBFX0VESVRURVhUIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IldJREdFVF9UWVBFX0VESVRfV0VCVklFVyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSURHRVRfVFlQRV9URVhUVklFVyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSURHRVRfVFlQRV9VTktOT1dOIiBzaW5jZT0iMjgiLz4KLQkJPGZpZWxkIG5hbWU9IldJREdFVF9UWVBFX1VOU0VMRUNUQUJMRV9URVhUVklFVyIgc2luY2U9IjI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXSURHRVRfVFlQRV9XRUJWSUVXIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dENsYXNzaWZpZXIkRW50aXR5Q29uZmlnIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGUoTGphdmEvdXRpbC9Db2xsZWN0aW9uO0xqYXZhL3V0aWwvQ29sbGVjdGlvbjtMamF2YS91dGlsL0NvbGxlY3Rpb247KUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dENsYXNzaWZpZXIkRW50aXR5Q29uZmlnOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVdpdGhFeHBsaWNpdEVudGl0eUxpc3QoTGphdmEvdXRpbC9Db2xsZWN0aW9uOylMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWVyJEVudGl0eUNvbmZpZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVXaXRoSGludHMoTGphdmEvdXRpbC9Db2xsZWN0aW9uOylMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWVyJEVudGl0eUNvbmZpZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIaW50cygpTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmVFbnRpdHlMaXN0TW9kaWZpY2F0aW9ucyhMamF2YS91dGlsL0NvbGxlY3Rpb247KUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dExpbmtzIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseShMYW5kcm9pZC90ZXh0L1NwYW5uYWJsZTtJTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmtzKClMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUFBMWV9TVFJBVEVHWV9JR05PUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkFQUExZX1NUUkFURUdZX1JFUExBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19ESUZGRVJFTlRfVEVYVCIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVFVTX0xJTktTX0FQUExJRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVRVU19OT19MSU5LU19BUFBMSUVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFUVVNfTk9fTElOS1NfRk9VTkQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dExpbmtzJEJ1aWxkZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRMaW5rKElJTGphdmEvdXRpbC9NYXA7KUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dExpbmtzJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dExpbmtzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyVGV4dExpbmtzKClMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRMaW5rcyRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0TGlua3MkUmVxdWVzdCIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdExvY2FsZXMoKUxhbmRyb2lkL29zL0xvY2FsZUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW50aXR5Q29uZmlnKClMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWVyJEVudGl0eUNvbmZpZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dExpbmtzJFJlcXVlc3QkQnVpbGRlciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRMaW5rcyRSZXF1ZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHRMb2NhbGVzKExhbmRyb2lkL29zL0xvY2FsZUxpc3Q7KUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dExpbmtzJFJlcXVlc3QkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbnRpdHlDb25maWcoTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0Q2xhc3NpZmllciRFbnRpdHlDb25maWc7KUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dExpbmtzJFJlcXVlc3QkQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dExpbmtzJFRleHRMaW5rIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25maWRlbmNlU2NvcmUoTGphdmEvbGFuZy9TdHJpbmc7KUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbnRpdHkoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbnRpdHlDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXJ0KClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRMaW5rcyRUZXh0TGlua1NwYW4iIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdGV4dC9zdHlsZS9DbGlja2FibGVTcGFuIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dExpbmtzJFRleHRMaW5rOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dExpbmsoKUxhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dExpbmtzJFRleHRMaW5rOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0U2VsZWN0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbmZpZGVuY2VTY29yZShMamF2YS9sYW5nL1N0cmluZzspRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudGl0eShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudGl0eUNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VsZWN0aW9uRW5kSW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxlY3Rpb25TdGFydEluZGV4KClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDUkVBVE9SIiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dFNlbGVjdGlvbiRCdWlsZGVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0U2VsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVudGl0eVR5cGUoTGphdmEvbGFuZy9TdHJpbmc7RilMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRTZWxlY3Rpb24kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJZChMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0U2VsZWN0aW9uJEJ1aWxkZXI7IiBzaW5jZT0iMjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dFNlbGVjdGlvbiRSZXF1ZXN0IiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0TG9jYWxlcygpTGFuZHJvaWQvb3MvTG9jYWxlTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmRJbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXJ0SW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvdGV4dGNsYXNzaWZpZXIvVGV4dFNlbGVjdGlvbiRSZXF1ZXN0JEJ1aWxkZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkKClMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRTZWxlY3Rpb24kUmVxdWVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0TG9jYWxlcyhMYW5kcm9pZC9vcy9Mb2NhbGVMaXN0OylMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRTZWxlY3Rpb24kUmVxdWVzdCRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy90ZXh0c2VydmljZS9TZW50ZW5jZVN1Z2dlc3Rpb25zSW5mbyIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvb3MvUGFyY2VsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMYW5kcm9pZC92aWV3L3RleHRzZXJ2aWNlL1N1Z2dlc3Rpb25zSW5mbztbSVtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZW5ndGhBdChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPZmZzZXRBdChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWdnZXN0aW9uc0NvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VnZ2VzdGlvbnNJbmZvQXQoSSlMYW5kcm9pZC92aWV3L3RleHRzZXJ2aWNlL1N1Z2dlc3Rpb25zSW5mbzsiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VySW5mbyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tcG9uZW50KClMYW5kcm9pZC9jb250ZW50L0NvbXBvbmVudE5hbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2VOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlSW5mbygpTGFuZHJvaWQvY29udGVudC9wbS9TZXJ2aWNlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXR0aW5nc0FjdGl2aXR5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJ0eXBlQXQoSSlMYW5kcm9pZC92aWV3L3RleHRzZXJ2aWNlL1NwZWxsQ2hlY2tlclN1YnR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VidHlwZUNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZEljb24oTGFuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlTWFuYWdlcjspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZExhYmVsKExhbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXI7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy90ZXh0c2VydmljZS9TcGVsbENoZWNrZXJTZXNzaW9uIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsKClWIiBzaW5jZT0iMTUiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbnRlbmNlU3VnZ2VzdGlvbnMoW0xhbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvVGV4dEluZm87SSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGVsbENoZWNrZXIoKUxhbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VySW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWdnZXN0aW9ucyhMYW5kcm9pZC92aWV3L3RleHRzZXJ2aWNlL1RleHRJbmZvO0kpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWdnZXN0aW9ucyhbTGFuZHJvaWQvdmlldy90ZXh0c2VydmljZS9UZXh0SW5mbztJWilWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2Vzc2lvbkRpc2Nvbm5lY3RlZCgpWiIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVklDRV9NRVRBX0RBVEEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VyU2Vzc2lvbiRTcGVsbENoZWNrZXJTZXNzaW9uTGlzdGVuZXIiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdldFNlbnRlbmNlU3VnZ2VzdGlvbnMoW0xhbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU2VudGVuY2VTdWdnZXN0aW9uc0luZm87KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2V0U3VnZ2VzdGlvbnMoW0xhbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU3VnZ2VzdGlvbnNJbmZvOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L3RleHRzZXJ2aWNlL1NwZWxsQ2hlY2tlclN1YnR5cGUiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWluc0V4dHJhVmFsdWVLZXkoTGphdmEvbGFuZy9TdHJpbmc7KVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9jb250ZW50L3BtL0FwcGxpY2F0aW9uSW5mbzspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFWYWx1ZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmFWYWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhbmd1YWdlVGFnKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsZSgpTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWVSZXNJZCgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy90ZXh0c2VydmljZS9TdWdnZXN0aW9uc0luZm8iIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC9vcy9QYXJjZWxhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSVtMamF2YS9sYW5nL1N0cmluZztJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL29zL1BhcmNlbDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvb2tpZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcXVlbmNlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VnZ2VzdGlvbkF0KEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VnZ2VzdGlvbnNBdHRyaWJ1dGVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VnZ2VzdGlvbnNDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvb2tpZUFuZFNlcXVlbmNlKElJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU1VMVF9BVFRSX0hBU19SRUNPTU1FTkRFRF9TVUdHRVNUSU9OUyIgc2luY2U9IjE1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNVTFRfQVRUUl9JTl9USEVfRElDVElPTkFSWSIvPgotCQk8ZmllbGQgbmFtZT0iUkVTVUxUX0FUVFJfTE9PS1NfTElLRV9UWVBPIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC92aWV3L3RleHRzZXJ2aWNlL1RleHRJbmZvIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvb3MvUGFyY2VsYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUlJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJTZXF1ZW5jZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb29raWUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXF1ZW5jZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRPUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvdmlldy90ZXh0c2VydmljZS9UZXh0U2VydmljZXNNYW5hZ2VyIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3U3BlbGxDaGVja2VyU2Vzc2lvbihMYW5kcm9pZC9vcy9CdW5kbGU7TGphdmEvdXRpbC9Mb2NhbGU7TGFuZHJvaWQvdmlldy90ZXh0c2VydmljZS9TcGVsbENoZWNrZXJTZXNzaW9uJFNwZWxsQ2hlY2tlclNlc3Npb25MaXN0ZW5lcjtaKUxhbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VyU2Vzc2lvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9DYWNoZU1hbmFnZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIxMSIgcmVtb3ZlZD0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FjaGVEaXNhYmxlZCgpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRDYWNoZVRyYW5zYWN0aW9uKClaIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhY2hlRmlsZShMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL01hcDspTGFuZHJvaWQvd2Via2l0L0NhY2hlTWFuYWdlciRDYWNoZVJlc3VsdDsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FjaGVGaWxlQmFzZURpcigpTGphdmEvaW8vRmlsZTsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2F2ZUNhY2hlRmlsZShMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC93ZWJraXQvQ2FjaGVNYW5hZ2VyJENhY2hlUmVzdWx0OylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0Q2FjaGVUcmFuc2FjdGlvbigpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9DYWNoZU1hbmFnZXIkQ2FjaGVSZXN1bHQiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIxMSIgcmVtb3ZlZD0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudERpc3Bvc2l0aW9uKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudExlbmd0aCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVUYWcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY29kaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHBpcmVzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhwaXJlc1N0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEh0dHBTdGF0dXNDb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRTdHJlYW0oKUxqYXZhL2lvL0lucHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhc3RNb2RpZmllZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxQYXRoKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhdGlvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWltZVR5cGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE91dHB1dFN0cmVhbSgpTGphdmEvaW8vT3V0cHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuY29kaW5nKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5wdXRTdHJlYW0oTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9DYWxsYmFja1Byb3h5IiBzaW5jZT0iMSIgcmVtb3ZlZD0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvb3MvSGFuZGxlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRNZXNzYWdlVG9Db25zb2xlKExqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjciLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVXaW5kb3coWlopTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZG9VcGRhdGVWaXNpdGVkSGlzdG9yeShMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYWNrRm9yd2FyZExpc3QoKUxhbmRyb2lkL3dlYmtpdC9XZWJCYWNrRm9yd2FyZExpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvZ3Jlc3MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaXNpdGVkSGlzdG9yeShMYW5kcm9pZC93ZWJraXQvVmFsdWVDYWxsYmFjazspViIgc2luY2U9IjciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWJDaHJvbWVDbGllbnQoKUxhbmRyb2lkL3dlYmtpdC9XZWJDaHJvbWVDbGllbnQ7IiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ2xvc2VXaW5kb3coTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRvd25sb2FkU3RhcnQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25FeGNlZWRlZERhdGFiYXNlUXVvdGEoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SkpKTGFuZHJvaWQvd2Via2l0L1dlYlN0b3JhZ2UkUXVvdGFVcGRhdGVyOylWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRm9ybVJlc3VibWlzc2lvbihMYW5kcm9pZC9vcy9NZXNzYWdlO0xhbmRyb2lkL29zL01lc3NhZ2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdlb2xvY2F0aW9uUGVybWlzc2lvbnNIaWRlUHJvbXB0KClWIiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2VvbG9jYXRpb25QZXJtaXNzaW9uc1Nob3dQcm9tcHQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvd2Via2l0L0dlb2xvY2F0aW9uUGVybWlzc2lvbnMkQ2FsbGJhY2s7KVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Kc0FsZXJ0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Kc0JlZm9yZVVubG9hZChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSnNDb25maXJtKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Kc1Byb21wdChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Kc1RpbWVvdXQoKVoiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Mb2FkUmVzb3VyY2UoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBhZ2VGaW5pc2hlZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGFnZVN0YXJ0ZWQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Qcm9ncmVzc0NoYW5nZWQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZWFjaGVkTWF4QXBwQ2FjaGVTaXplKEpKTGFuZHJvaWQvd2Via2l0L1dlYlN0b3JhZ2UkUXVvdGFVcGRhdGVyOylWIiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVjZWl2ZWRFcnJvcihJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlY2VpdmVkSHR0cEF1dGhSZXF1ZXN0KExhbmRyb2lkL3dlYmtpdC9IdHRwQXV0aEhhbmRsZXI7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlY2VpdmVkSWNvbihMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlY2VpdmVkVGl0bGUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlcXVlc3RGb2N1cygpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2F2ZVBhc3N3b3JkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL01lc3NhZ2U7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNjYWxlQ2hhbmdlZChGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Ub29NYW55UmVkaXJlY3RzKExhbmRyb2lkL29zL01lc3NhZ2U7TGFuZHJvaWQvb3MvTWVzc2FnZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVW5oYW5kbGVkS2V5RXZlbnQoTGFuZHJvaWQvdmlldy9LZXlFdmVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERvd25sb2FkTGlzdGVuZXIoTGFuZHJvaWQvd2Via2l0L0Rvd25sb2FkTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXZWJDaHJvbWVDbGllbnQoTGFuZHJvaWQvd2Via2l0L1dlYkNocm9tZUNsaWVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdlYlZpZXdDbGllbnQoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXdDbGllbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG91bGRPdmVycmlkZVVybExvYWRpbmcoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1aU92ZXJyaWRlS2V5RXZlbnQoTGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InVpT3ZlcnJpZGVVcmxMb2FkaW5nKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvQ2xpZW50Q2VydFJlcXVlc3QiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWwoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3N0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlUeXBlcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvcnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmluY2lwYWxzKClbTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOyIvPgotCQk8bWV0aG9kIG5hbWU9Imlnbm9yZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InByb2NlZWQoTGphdmEvc2VjdXJpdHkvUHJpdmF0ZUtleTtbTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9Db25zb2xlTWVzc2FnZSIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lMYW5kcm9pZC93ZWJraXQvQ29uc29sZU1lc3NhZ2UkTWVzc2FnZUxldmVsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGluZU51bWJlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1lc3NhZ2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1lc3NhZ2VMZXZlbCgpTGFuZHJvaWQvd2Via2l0L0NvbnNvbGVNZXNzYWdlJE1lc3NhZ2VMZXZlbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzb3VyY2VJZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvQ29uc29sZU1lc3NhZ2UkTWVzc2FnZUxldmVsIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvd2Via2l0L0NvbnNvbGVNZXNzYWdlJE1lc3NhZ2VMZXZlbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC93ZWJraXQvQ29uc29sZU1lc3NhZ2UkTWVzc2FnZUxldmVsOyIvPgotCQk8ZmllbGQgbmFtZT0iREVCVUciLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0ciLz4KLQkJPGZpZWxkIG5hbWU9IlRJUCIvPgotCQk8ZmllbGQgbmFtZT0iV0FSTklORyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L0Nvb2tpZU1hbmFnZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdENvb2tpZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdFRoaXJkUGFydHlDb29raWVzKExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3OylaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxvd0ZpbGVTY2hlbWVDb29raWVzKClaIiBzaW5jZT0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaCgpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29va2llKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGFuZHJvaWQvd2Via2l0L0Nvb2tpZU1hbmFnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQ29va2llcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUFsbENvb2tpZSgpViIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBbGxDb29raWVzKExhbmRyb2lkL3dlYmtpdC9WYWx1ZUNhbGxiYWNrOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVFeHBpcmVkQ29va2llKClWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVNlc3Npb25Db29raWUoKVYiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlU2Vzc2lvbkNvb2tpZXMoTGFuZHJvaWQvd2Via2l0L1ZhbHVlQ2FsbGJhY2s7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjY2VwdENvb2tpZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBY2NlcHRGaWxlU2NoZW1lQ29va2llcyhaKVYiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjY2VwdFRoaXJkUGFydHlDb29raWVzKExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3O1opViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29va2llKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29va2llKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL3dlYmtpdC9WYWx1ZUNhbGxiYWNrOylWIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9Db29raWVTeW5jTWFuYWdlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93ZWJraXQvV2ViU3luY01hbmFnZXIiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUluc3RhbmNlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGFuZHJvaWQvd2Via2l0L0Nvb2tpZVN5bmNNYW5hZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMYW5kcm9pZC93ZWJraXQvQ29va2llU3luY01hbmFnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3luY0Zyb21SYW1Ub0ZsYXNoKClWIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9HVEFHIiBzaW5jZT0iMjEiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtRGF0YUJhc2UiIHNpbmNlPSIyMSIgcmVtb3ZlZD0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9Im1IYW5kbGVyIiBzaW5jZT0iMjEiIHJlbW92ZWQ9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvRGF0ZVNvcnRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvdW5kYXJ5KEkpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZGV4KEopSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhYmVsKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEQVlfQ09VTlQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9Eb3dubG9hZExpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRvd25sb2FkU3RhcnQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsb3coTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJBbGwoKVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxsb3dlZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC93ZWJraXQvVmFsdWVDYWxsYmFjazspViIgc2luY2U9IjciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGFuZHJvaWQvd2Via2l0L0dlb2xvY2F0aW9uUGVybWlzc2lvbnM7IiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yaWdpbnMoTGFuZHJvaWQvd2Via2l0L1ZhbHVlQ2FsbGJhY2s7KVYiIHNpbmNlPSI3Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvR2VvbG9jYXRpb25QZXJtaXNzaW9ucyRDYWxsYmFjayIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW52b2tlKExqYXZhL2xhbmcvU3RyaW5nO1paKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9IdHRwQXV0aEhhbmRsZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9vcy9IYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJvY2VlZChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InVzZUh0dHBBdXRoVXNlcm5hbWVQYXNzd29yZCgpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L0phdmFzY3JpcHRJbnRlcmZhY2UiIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL2Fubm90YXRpb24vQW5ub3RhdGlvbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L0pzUHJvbXB0UmVzdWx0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2Via2l0L0pzUmVzdWx0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29uZmlybShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L0pzUmVzdWx0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWwoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25maXJtKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0id2FrZVVwKClWIiByZW1vdmVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0ibVByb3h5IiByZW1vdmVkPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtUmVzdWx0IiByZW1vdmVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L01pbWVUeXBlTWFwIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRlbnNpb25Gcm9tTWltZVR5cGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGVFeHRlbnNpb25Gcm9tVXJsKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW1lVHlwZUZyb21FeHRlbnNpb24oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpbmdsZXRvbigpTGFuZHJvaWQvd2Via2l0L01pbWVUeXBlTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0V4dGVuc2lvbihMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc01pbWVUeXBlKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvUGVybWlzc2lvblJlcXVlc3QiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZW55KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3JpZ2luKClMYW5kcm9pZC9uZXQvVXJpOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc291cmNlcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdyYW50KFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8ZmllbGQgbmFtZT0iUkVTT1VSQ0VfQVVESU9fQ0FQVFVSRSIvPgotCQk8ZmllbGQgbmFtZT0iUkVTT1VSQ0VfTUlESV9TWVNFWCIgc2luY2U9IjIzIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVNPVVJDRV9QUk9URUNURURfTUVESUFfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU09VUkNFX1ZJREVPX0NBUFRVUkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9QbHVnaW4iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSI1IiByZW1vdmVkPSIxMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwYXRjaENsaWNrRXZlbnQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGVOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXRoKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGlja0hhbmRsZXIoTGFuZHJvaWQvd2Via2l0L1BsdWdpbiRQcmVmZXJlbmNlc0NsaWNrSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlc2NyaXB0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmlsZU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYW1lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGF0aChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L1BsdWdpbiRQcmVmZXJlbmNlc0NsaWNrSGFuZGxlciIgc2luY2U9IjEiIHJlbW92ZWQ9IjEyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZUNsaWNrRXZlbnQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvUGx1Z2luRGF0YSIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjUiIHJlbW92ZWQ9IjEyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTtKTGphdmEvdXRpbC9NYXA7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudExlbmd0aCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlYWRlcnMoKUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0U3RyZWFtKClMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0dXNDb2RlKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvUGx1Z2luTGlzdCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjUiIHJlbW92ZWQ9IjEyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFBsdWdpbihMYW5kcm9pZC93ZWJraXQvUGx1Z2luOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaXN0KClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1Z2luQ2xpY2tlZChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUGx1Z2luKExhbmRyb2lkL3dlYmtpdC9QbHVnaW47KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9QbHVnaW5TdHViIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbWJlZGRlZFZpZXcoSUxhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZ1bGxTY3JlZW5WaWV3KElMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9SZW5kZXJQcm9jZXNzR29uZURldGFpbCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpZENyYXNoKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVuZGVyZXJQcmlvcml0eUF0RXhpdCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L1NhZmVCcm93c2luZ1Jlc3BvbnNlIiBzaW5jZT0iMjciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmFja1RvU2FmZXR5KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InByb2NlZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd0ludGVyc3RpdGlhbChaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9TZXJ2aWNlV29ya2VyQ2xpZW50IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdWxkSW50ZXJjZXB0UmVxdWVzdChMYW5kcm9pZC93ZWJraXQvV2ViUmVzb3VyY2VSZXF1ZXN0OylMYW5kcm9pZC93ZWJraXQvV2ViUmVzb3VyY2VSZXNwb25zZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9TZXJ2aWNlV29ya2VyQ29udHJvbGxlciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMYW5kcm9pZC93ZWJraXQvU2VydmljZVdvcmtlckNvbnRyb2xsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VydmljZVdvcmtlcldlYlNldHRpbmdzKClMYW5kcm9pZC93ZWJraXQvU2VydmljZVdvcmtlcldlYlNldHRpbmdzOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlcnZpY2VXb3JrZXJDbGllbnQoTGFuZHJvaWQvd2Via2l0L1NlcnZpY2VXb3JrZXJDbGllbnQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9TZXJ2aWNlV29ya2VyV2ViU2V0dGluZ3MiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxvd0NvbnRlbnRBY2Nlc3MoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxvd0ZpbGVBY2Nlc3MoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCbG9ja05ldHdvcmtMb2FkcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhY2hlTW9kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFsbG93Q29udGVudEFjY2VzcyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGxvd0ZpbGVBY2Nlc3MoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmxvY2tOZXR3b3JrTG9hZHMoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FjaGVNb2RlKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L1NzbEVycm9ySGFuZGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL29zL0hhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWwoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm9jZWVkKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvVHJhY2luZ0NvbmZpZyIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL3V0aWwvTGlzdDtJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1c3RvbUluY2x1ZGVkQ2F0ZWdvcmllcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWRlZmluZWRDYXRlZ29yaWVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhY2luZ01vZGUoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JJRVNfQUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVRFR09SSUVTX0FORFJPSURfV0VCVklFVyIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUklFU19GUkFNRV9WSUVXRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JJRVNfSU5QVVRfTEFURU5DWSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUklFU19KQVZBU0NSSVBUX0FORF9SRU5ERVJJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JJRVNfTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FURUdPUklFU19SRU5ERVJJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkNBVEVHT1JJRVNfV0VCX0RFVkVMT1BFUiIvPgotCQk8ZmllbGQgbmFtZT0iUkVDT1JEX0NPTlRJTlVPVVNMWSIvPgotCQk8ZmllbGQgbmFtZT0iUkVDT1JEX1VOVElMX0ZVTEwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9UcmFjaW5nQ29uZmlnJEJ1aWxkZXIiIHNpbmNlPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDYXRlZ29yaWVzKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspTGFuZHJvaWQvd2Via2l0L1RyYWNpbmdDb25maWckQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDYXRlZ29yaWVzKFtJKUxhbmRyb2lkL3dlYmtpdC9UcmFjaW5nQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQ2F0ZWdvcmllcyhbTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3dlYmtpdC9UcmFjaW5nQ29uZmlnJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxhbmRyb2lkL3dlYmtpdC9UcmFjaW5nQ29uZmlnOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyYWNpbmdNb2RlKEkpTGFuZHJvaWQvd2Via2l0L1RyYWNpbmdDb25maWckQnVpbGRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9UcmFjaW5nQ29udHJvbGxlciIgc2luY2U9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMYW5kcm9pZC93ZWJraXQvVHJhY2luZ0NvbnRyb2xsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUcmFjaW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnQoTGFuZHJvaWQvd2Via2l0L1RyYWNpbmdDb25maWc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wKExqYXZhL2lvL091dHB1dFN0cmVhbTtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9VUkxVdGlsIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wb3NlU2VhcmNoVXJsKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGUoW0IpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJndWVzc0ZpbGVOYW1lKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJndWVzc1VybChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBYm91dFVybChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXNzZXRVcmwoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbnRlbnRVcmwoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nvb2tpZWxlc3NQcm94eVVybChMamF2YS9sYW5nL1N0cmluZzspWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RhdGFVcmwoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZpbGVVcmwoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0h0dHBVcmwoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0h0dHBzVXJsKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNKYXZhU2NyaXB0VXJsKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOZXR3b3JrVXJsKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYWxpZFVybChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InN0cmlwQW5jaG9yKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9VcmxJbnRlcmNlcHRIYW5kbGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iNSIgcmVtb3ZlZD0iMTIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGx1Z2luRGF0YShMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL01hcDspTGFuZHJvaWQvd2Via2l0L1BsdWdpbkRhdGE7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNlcnZpY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9NYXA7KUxhbmRyb2lkL3dlYmtpdC9DYWNoZU1hbmFnZXIkQ2FjaGVSZXN1bHQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvVXJsSW50ZXJjZXB0UmVnaXN0cnkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSI1IiByZW1vdmVkPSIxMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQbHVnaW5EYXRhKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTWFwOylMYW5kcm9pZC93ZWJraXQvUGx1Z2luRGF0YTsiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3Vycm9nYXRlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTWFwOylMYW5kcm9pZC93ZWJraXQvQ2FjaGVNYW5hZ2VyJENhY2hlUmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVySGFuZGxlcihMYW5kcm9pZC93ZWJraXQvVXJsSW50ZXJjZXB0SGFuZGxlcjspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVybEludGVyY2VwdERpc2FibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXJIYW5kbGVyKExhbmRyb2lkL3dlYmtpdC9VcmxJbnRlcmNlcHRIYW5kbGVyOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0idXJsSW50ZXJjZXB0RGlzYWJsZWQoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9WYWx1ZUNhbGxiYWNrIiBzaW5jZT0iNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlY2VpdmVWYWx1ZShMamF2YS9sYW5nL09iamVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L1dlYkJhY2tGb3J3YXJkTGlzdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvd2Via2l0L1dlYkJhY2tGb3J3YXJkTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50SW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50SXRlbSgpTGFuZHJvaWQvd2Via2l0L1dlYkhpc3RvcnlJdGVtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEl0ZW1BdEluZGV4KEkpTGFuZHJvaWQvd2Via2l0L1dlYkhpc3RvcnlJdGVtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpemUoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJDaHJvbWVDbGllbnQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRWaWRlb1Bvc3RlcigpTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIgc2luY2U9IjciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWRlb0xvYWRpbmdQcm9ncmVzc1ZpZXcoKUxhbmRyb2lkL3ZpZXcvVmlldzsiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmlzaXRlZEhpc3RvcnkoTGFuZHJvaWQvd2Via2l0L1ZhbHVlQ2FsbGJhY2s7KVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DbG9zZVdpbmRvdyhMYW5kcm9pZC93ZWJraXQvV2ViVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29uc29sZU1lc3NhZ2UoTGFuZHJvaWQvd2Via2l0L0NvbnNvbGVNZXNzYWdlOylaIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29uc29sZU1lc3NhZ2UoTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iNyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNyZWF0ZVdpbmRvdyhMYW5kcm9pZC93ZWJraXQvV2ViVmlldztaWkxhbmRyb2lkL29zL01lc3NhZ2U7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkV4Y2VlZGVkRGF0YWJhc2VRdW90YShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztKSkpMYW5kcm9pZC93ZWJraXQvV2ViU3RvcmFnZSRRdW90YVVwZGF0ZXI7KVYiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR2VvbG9jYXRpb25QZXJtaXNzaW9uc0hpZGVQcm9tcHQoKVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25HZW9sb2NhdGlvblBlcm1pc3Npb25zU2hvd1Byb21wdChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC93ZWJraXQvR2VvbG9jYXRpb25QZXJtaXNzaW9ucyRDYWxsYmFjazspViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkhpZGVDdXN0b21WaWV3KClWIiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSnNBbGVydChMYW5kcm9pZC93ZWJraXQvV2ViVmlldztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC93ZWJraXQvSnNSZXN1bHQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkpzQmVmb3JlVW5sb2FkKExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3O0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL3dlYmtpdC9Kc1Jlc3VsdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSnNDb25maXJtKExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3O0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL3dlYmtpdC9Kc1Jlc3VsdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSnNQcm9tcHQoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvd2Via2l0L0pzUHJvbXB0UmVzdWx0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Kc1RpbWVvdXQoKVoiIHNpbmNlPSI3IiBkZXByZWNhdGVkPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGVybWlzc2lvblJlcXVlc3QoTGFuZHJvaWQvd2Via2l0L1Blcm1pc3Npb25SZXF1ZXN0OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblBlcm1pc3Npb25SZXF1ZXN0Q2FuY2VsZWQoTGFuZHJvaWQvd2Via2l0L1Blcm1pc3Npb25SZXF1ZXN0OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByb2dyZXNzQ2hhbmdlZChMYW5kcm9pZC93ZWJraXQvV2ViVmlldztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlYWNoZWRNYXhBcHBDYWNoZVNpemUoSkpMYW5kcm9pZC93ZWJraXQvV2ViU3RvcmFnZSRRdW90YVVwZGF0ZXI7KVYiIHNpbmNlPSI3IiBkZXByZWNhdGVkPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVjZWl2ZWRJY29uKExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3O0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVjZWl2ZWRUaXRsZShMYW5kcm9pZC93ZWJraXQvV2ViVmlldztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVjZWl2ZWRUb3VjaEljb25VcmwoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7TGphdmEvbGFuZy9TdHJpbmc7WilWIiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVxdWVzdEZvY3VzKExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TaG93Q3VzdG9tVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7SUxhbmRyb2lkL3dlYmtpdC9XZWJDaHJvbWVDbGllbnQkQ3VzdG9tVmlld0NhbGxiYWNrOylWIiBzaW5jZT0iMTQiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TaG93Q3VzdG9tVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvd2Via2l0L1dlYkNocm9tZUNsaWVudCRDdXN0b21WaWV3Q2FsbGJhY2s7KVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TaG93RmlsZUNob29zZXIoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7TGFuZHJvaWQvd2Via2l0L1ZhbHVlQ2FsbGJhY2s7TGFuZHJvaWQvd2Via2l0L1dlYkNocm9tZUNsaWVudCRGaWxlQ2hvb3NlclBhcmFtczspWiIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvV2ViQ2hyb21lQ2xpZW50JEN1c3RvbVZpZXdDYWxsYmFjayIgc2luY2U9IjciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DdXN0b21WaWV3SGlkZGVuKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvV2ViQ2hyb21lQ2xpZW50JEZpbGVDaG9vc2VyUGFyYW1zIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSW50ZW50KClMYW5kcm9pZC9jb250ZW50L0ludGVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY2NlcHRUeXBlcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGVuYW1lSGludCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpdGxlKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NhcHR1cmVFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VSZXN1bHQoSUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylbTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfT1BFTiIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9PUEVOX01VTFRJUExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX1NBVkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJIaXN0b3J5SXRlbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvd2Via2l0L1dlYkhpc3RvcnlJdGVtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZhdmljb24oKUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpSSIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3JpZ2luYWxVcmwoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaXRsZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXJsKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJJY29uRGF0YWJhc2UiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIxOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMYW5kcm9pZC93ZWJraXQvV2ViSWNvbkRhdGFiYXNlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlSWNvbkZvclBhZ2VVcmwoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBbGxJY29ucygpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RJY29uRm9yUGFnZVVybChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC93ZWJraXQvV2ViSWNvbkRhdGFiYXNlJEljb25MaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJldGFpbkljb25Gb3JQYWdlVXJsKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvV2ViSWNvbkRhdGFiYXNlJEljb25MaXN0ZW5lciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjE4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVjZWl2ZWRJY29uKExqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L1dlYk1lc3NhZ2UiIHNpbmNlPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7W0xhbmRyb2lkL3dlYmtpdC9XZWJNZXNzYWdlUG9ydDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGEoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvcnRzKClbTGFuZHJvaWQvd2Via2l0L1dlYk1lc3NhZ2VQb3J0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L1dlYk1lc3NhZ2VQb3J0IiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0TWVzc2FnZShMYW5kcm9pZC93ZWJraXQvV2ViTWVzc2FnZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdlYk1lc3NhZ2VDYWxsYmFjayhMYW5kcm9pZC93ZWJraXQvV2ViTWVzc2FnZVBvcnQkV2ViTWVzc2FnZUNhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2ViTWVzc2FnZUNhbGxiYWNrKExhbmRyb2lkL3dlYmtpdC9XZWJNZXNzYWdlUG9ydCRXZWJNZXNzYWdlQ2FsbGJhY2s7TGFuZHJvaWQvb3MvSGFuZGxlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L1dlYk1lc3NhZ2VQb3J0JFdlYk1lc3NhZ2VDYWxsYmFjayIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTWVzc2FnZShMYW5kcm9pZC93ZWJraXQvV2ViTWVzc2FnZVBvcnQ7TGFuZHJvaWQvd2Via2l0L1dlYk1lc3NhZ2U7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJSZXNvdXJjZUVycm9yIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVycm9yQ29kZSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L1dlYlJlc291cmNlUmVxdWVzdCIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldGhvZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVxdWVzdEhlYWRlcnMoKUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVybCgpTGFuZHJvaWQvbmV0L1VyaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNHZXN0dXJlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGb3JNYWluRnJhbWUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlZGlyZWN0KClaIiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJSZXNvdXJjZVJlc3BvbnNlIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL01hcDtMamF2YS9pby9JbnB1dFN0cmVhbTspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YSgpTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5jb2RpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbWVUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWFzb25QaHJhc2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzcG9uc2VIZWFkZXJzKClMamF2YS91dGlsL01hcDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXR1c0NvZGUoKUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGEoTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmNvZGluZyhMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbWVUeXBlKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVzcG9uc2VIZWFkZXJzKExqYXZhL3V0aWwvTWFwOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGF0dXNDb2RlQW5kUmVhc29uUGhyYXNlKElMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvV2ViU2V0dGluZ3MiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuYWJsZVNtb290aFRyYW5zaXRpb24oKVoiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxvd0NvbnRlbnRBY2Nlc3MoKVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbG93RmlsZUFjY2VzcygpWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKClaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCbG9ja05ldHdvcmtJbWFnZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJsb2NrTmV0d29ya0xvYWRzKClaIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1aWx0SW5ab29tQ29udHJvbHMoKVoiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FjaGVNb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFiYXNlRW5hYmxlZCgpWiIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhYmFzZVBhdGgoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjUiIGRlcHJlY2F0ZWQ9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdEZpeGVkRm9udFNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0Rm9udFNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFVzZXJBZ2VudChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFpvb20oKUxhbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncyRab29tRGVuc2l0eTsiIHNpbmNlPSI3IiBkZXByZWNhdGVkPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc2FibGVkQWN0aW9uTW9kZU1lbnVJdGVtcygpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheVpvb21Db250cm9scygpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG9tU3RvcmFnZUVuYWJsZWQoKVoiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmFudGFzeUZvbnRGYW1pbHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpeGVkRm9udEZhbWlseSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEphdmFTY3JpcHRFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5b3V0QWxnb3JpdGhtKClMYW5kcm9pZC93ZWJraXQvV2ViU2V0dGluZ3MkTGF5b3V0QWxnb3JpdGhtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpZ2h0VG91Y2hFbmFibGVkKClaIiBkZXByZWNhdGVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvYWRXaXRoT3ZlcnZpZXdNb2RlKClaIiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKClaIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5pbXVtRm9udFNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWl4ZWRDb250ZW50TW9kZSgpSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmF2RHVtcCgpWiIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2Zmc2NyZWVuUHJlUmFzdGVyKClaIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQbHVnaW5TdGF0ZSgpTGFuZHJvaWQvd2Via2l0L1dlYlNldHRpbmdzJFBsdWdpblN0YXRlOyIgc2luY2U9IjgiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGx1Z2luc0VuYWJsZWQoKVoiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBsdWdpbnNQYXRoKClMamF2YS9sYW5nL1N0cmluZzsiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNhZmVCcm93c2luZ0VuYWJsZWQoKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNhbnNTZXJpZkZvbnRGYW1pbHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNhdmVGb3JtRGF0YSgpWiIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTYXZlUGFzc3dvcmQoKVoiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VyaWZGb250RmFtaWx5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFuZGFyZEZvbnRGYW1pbHkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRTaXplKClMYW5kcm9pZC93ZWJraXQvV2ViU2V0dGluZ3MkVGV4dFNpemU7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRab29tKClJIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VEb3VibGVUcmVlKClaIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VXZWJWaWV3QmFja2dyb3VuZEZvck92ZXJzY3JvbGxCYWNrZ3JvdW5kKClaIiBzaW5jZT0iOSIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlV2lkZVZpZXdQb3J0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlckFnZW50KClJIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyQWdlbnRTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGxvd0NvbnRlbnRBY2Nlc3MoWilWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGxvd0ZpbGVBY2Nlc3MoWilWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhaKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKFopViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXBwQ2FjaGVFbmFibGVkKFopViIgc2luY2U9IjciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBcHBDYWNoZU1heFNpemUoSilWIiBzaW5jZT0iNyIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBcHBDYWNoZVBhdGgoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmxvY2tOZXR3b3JrSW1hZ2UoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmxvY2tOZXR3b3JrTG9hZHMoWilWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJ1aWx0SW5ab29tQ29udHJvbHMoWilWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhY2hlTW9kZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXJzaXZlRm9udEZhbWlseShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFiYXNlRW5hYmxlZChaKVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0YWJhc2VQYXRoKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iNSIgZGVwcmVjYXRlZD0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0Rml4ZWRGb250U2l6ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0Rm9udFNpemUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0Wm9vbShMYW5kcm9pZC93ZWJraXQvV2ViU2V0dGluZ3MkWm9vbURlbnNpdHk7KVYiIHNpbmNlPSI3IiBkZXByZWNhdGVkPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc2FibGVkQWN0aW9uTW9kZU1lbnVJdGVtcyhJKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXlab29tQ29udHJvbHMoWilWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREb21TdG9yYWdlRW5hYmxlZChaKVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5hYmxlU21vb3RoVHJhbnNpdGlvbihaKVYiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGYW50YXN5Rm9udEZhbWlseShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZpeGVkRm9udEZhbWlseShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdlb2xvY2F0aW9uRGF0YWJhc2VQYXRoKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iNSIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHZW9sb2NhdGlvbkVuYWJsZWQoWilWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SmF2YVNjcmlwdEVuYWJsZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGF5b3V0QWxnb3JpdGhtKExhbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncyRMYXlvdXRBbGdvcml0aG07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaWdodFRvdWNoRW5hYmxlZChaKVYiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9hZFdpdGhPdmVydmlld01vZGUoWilWIiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShaKVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbmltdW1Gb250U2l6ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1peGVkQ29udGVudE1vZGUoSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYXZEdW1wKFopViIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmVlZEluaXRpYWxGb2N1cyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPZmZzY3JlZW5QcmVSYXN0ZXIoWilWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQbHVnaW5TdGF0ZShMYW5kcm9pZC93ZWJraXQvV2ViU2V0dGluZ3MkUGx1Z2luU3RhdGU7KVYiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBsdWdpbnNFbmFibGVkKFopViIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGx1Z2luc1BhdGgoTGphdmEvbGFuZy9TdHJpbmc7KVYiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlbmRlclByaW9yaXR5KExhbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncyRSZW5kZXJQcmlvcml0eTspViIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTYWZlQnJvd3NpbmdFbmFibGVkKFopViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2Fuc1NlcmlmRm9udEZhbWlseShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNhdmVGb3JtRGF0YShaKVYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2F2ZVBhc3N3b3JkKFopViIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZXJpZkZvbnRGYW1pbHkoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGFuZGFyZEZvbnRGYW1pbHkoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdXBwb3J0TXVsdGlwbGVXaW5kb3dzKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1cHBvcnRab29tKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRTaXplKExhbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncyRUZXh0U2l6ZTspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0Wm9vbShJKVYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZURvdWJsZVRyZWUoWilWIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VXZWJWaWV3QmFja2dyb3VuZEZvck92ZXJzY3JvbGxCYWNrZ3JvdW5kKFopViIgc2luY2U9IjkiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZVdpZGVWaWV3UG9ydChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VyQWdlbnQoSSlWIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VyQWdlbnRTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydE11bHRpcGxlV2luZG93cygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRab29tKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0FEX0NBQ0hFX0VMU0VfTkVUV09SSyIvPgotCQk8ZmllbGQgbmFtZT0iTE9BRF9DQUNIRV9PTkxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0FEX0RFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQURfTk9STUFMIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iTE9BRF9OT19DQUNIRSIvPgotCQk8ZmllbGQgbmFtZT0iTUVOVV9JVEVNX05PTkUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTUVOVV9JVEVNX1BST0NFU1NfVEVYVCIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRU5VX0lURU1fU0hBUkUiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTUVOVV9JVEVNX1dFQl9TRUFSQ0giIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTUlYRURfQ09OVEVOVF9BTFdBWVNfQUxMT1ciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTUlYRURfQ09OVEVOVF9DT01QQVRJQklMSVRZX01PREUiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTUlYRURfQ09OVEVOVF9ORVZFUl9BTExPVyIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvV2ViU2V0dGluZ3MkTGF5b3V0QWxnb3JpdGhtIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMTIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncyRMYXlvdXRBbGdvcml0aG07Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvd2Via2l0L1dlYlNldHRpbmdzJExheW91dEFsZ29yaXRobTsiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BUlJPV19DT0xVTU5TIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iTk9STUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSU5HTEVfQ09MVU1OIiBkZXByZWNhdGVkPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iVEVYVF9BVVRPU0laSU5HIiBzaW5jZT0iMTkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncyRQbHVnaW5TdGF0ZSIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncyRQbHVnaW5TdGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC93ZWJraXQvV2ViU2V0dGluZ3MkUGx1Z2luU3RhdGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPRkYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTl9ERU1BTkQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncyRSZW5kZXJQcmlvcml0eSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncyRSZW5kZXJQcmlvcml0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC93ZWJraXQvV2ViU2V0dGluZ3MkUmVuZGVyUHJpb3JpdHk7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJISUdIIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT1ciLz4KLQkJPGZpZWxkIG5hbWU9Ik5PUk1BTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L1dlYlNldHRpbmdzJFRleHRTaXplIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMTYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncyRUZXh0U2l6ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC93ZWJraXQvV2ViU2V0dGluZ3MkVGV4dFNpemU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMQVJHRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkxBUkdFU1QiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PUk1BTCIvPgotCQk8ZmllbGQgbmFtZT0iU01BTExFUiIvPgotCQk8ZmllbGQgbmFtZT0iU01BTExFU1QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncyRab29tRGVuc2l0eSIgc2luY2U9IjciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncyRab29tRGVuc2l0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMYW5kcm9pZC93ZWJraXQvV2ViU2V0dGluZ3MkWm9vbURlbnNpdHk7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDTE9TRSIvPgotCQk8ZmllbGQgbmFtZT0iRkFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJVU0iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJTdG9yYWdlIiBzaW5jZT0iNSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVBbGxEYXRhKClWIiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZU9yaWdpbihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGFuZHJvaWQvd2Via2l0L1dlYlN0b3JhZ2U7IiBzaW5jZT0iNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yaWdpbnMoTGFuZHJvaWQvd2Via2l0L1ZhbHVlQ2FsbGJhY2s7KVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVvdGFGb3JPcmlnaW4oTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvd2Via2l0L1ZhbHVlQ2FsbGJhY2s7KVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNhZ2VGb3JPcmlnaW4oTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvd2Via2l0L1ZhbHVlQ2FsbGJhY2s7KVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UXVvdGFGb3JPcmlnaW4oTGphdmEvbGFuZy9TdHJpbmc7SilWIiBzaW5jZT0iNyIgZGVwcmVjYXRlZD0iMTgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJTdG9yYWdlJE9yaWdpbiIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SkopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3JpZ2luKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdW90YSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzYWdlKClKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvV2ViU3RvcmFnZSRRdW90YVVwZGF0ZXIiIHNpbmNlPSI1IiBkZXByZWNhdGVkPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVRdW90YShKKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJTeW5jTWFuYWdlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIxIiByZW1vdmVkPSIyOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL1J1bm5hYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU3luY0luaXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldFN5bmMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFN5bmMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wU3luYygpViIvPgotCQk8bWV0aG9kIG5hbWU9InN5bmMoKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkxPR1RBRyIvPgotCQk8ZmllbGQgbmFtZT0ibURhdGFCYXNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJtSGFuZGxlciIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L1dlYlZpZXciIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvQWJzb2x1dGVMYXlvdXQiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRPbkhpZXJhcmNoeUNoYW5nZUxpc3RlbmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3VHJlZU9ic2VydmVyJE9uR2xvYmFsRm9jdXNDaGFuZ2VMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SVopViIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEphdmFzY3JpcHRJbnRlcmZhY2UoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5Hb0JhY2soKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5Hb0JhY2tPckZvcndhcmQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuR29Gb3J3YXJkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuWm9vbUluKClaIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuWm9vbU91dCgpWiIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImNhcHR1cmVQaWN0dXJlKClMYW5kcm9pZC9ncmFwaGljcy9QaWN0dXJlOyIgZGVwcmVjYXRlZD0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhckNhY2hlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQ2xpZW50Q2VydFByZWZlcmVuY2VzKExqYXZhL2xhbmcvUnVubmFibGU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyRm9ybURhdGEoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhckhpc3RvcnkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhck1hdGNoZXMoKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJTc2xQcmVmZXJlbmNlcygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyVmlldygpViIgZGVwcmVjYXRlZD0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5QmFja0ZvcndhcmRMaXN0KClMYW5kcm9pZC93ZWJraXQvV2ViQmFja0ZvcndhcmRMaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVByaW50RG9jdW1lbnRBZGFwdGVyKClMYW5kcm9pZC9wcmludC9QcmludERvY3VtZW50QWRhcHRlcjsiIHNpbmNlPSIxOSIgZGVwcmVjYXRlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVQcmludERvY3VtZW50QWRhcHRlcihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvcHJpbnQvUHJpbnREb2N1bWVudEFkYXB0ZXI7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVXZWJNZXNzYWdlQ2hhbm5lbCgpW0xhbmRyb2lkL3dlYmtpdC9XZWJNZXNzYWdlUG9ydDsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlYnVnRHVtcCgpViIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVzdHJveSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2FibGVQbGF0Zm9ybU5vdGlmaWNhdGlvbnMoKVYiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2FibGVXZWJWaWV3KClWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb2N1bWVudEhhc0ltYWdlcyhMYW5kcm9pZC9vcy9NZXNzYWdlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW11bGF0ZVNoaWZ0SGVsZCgpViIgc2luY2U9IjgiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuYWJsZVBsYXRmb3JtTm90aWZpY2F0aW9ucygpViIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlU2xvd1dob2xlRG9jdW1lbnREcmF3KClWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJldmFsdWF0ZUphdmFzY3JpcHQoTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvd2Via2l0L1ZhbHVlQ2FsbGJhY2s7KVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRBZGRyZXNzKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEFsbChMamF2YS9sYW5nL1N0cmluZzspSSIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEFsbEFzeW5jKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kTmV4dChaKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmxpbmdTY3JvbGwoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZyZWVNZW1vcnkoKVYiIHNpbmNlPSI3IiBkZXByZWNhdGVkPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlcnRpZmljYXRlKClMYW5kcm9pZC9uZXQvaHR0cC9Tc2xDZXJ0aWZpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50SGVpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudFdlYlZpZXdQYWNrYWdlKClMYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJbmZvOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmF2aWNvbigpTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpdFRlc3RSZXN1bHQoKUxhbmRyb2lkL3dlYmtpdC9XZWJWaWV3JEhpdFRlc3RSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SHR0cEF1dGhVc2VybmFtZVBhc3N3b3JkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylbTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yaWdpbmFsVXJsKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGx1Z2luTGlzdCgpTGFuZHJvaWQvd2Via2l0L1BsdWdpbkxpc3Q7IiByZW1vdmVkPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb2dyZXNzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVuZGVyZXJQcmlvcml0eVdhaXZlZFdoZW5Ob3RWaXNpYmxlKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZW5kZXJlclJlcXVlc3RlZFByaW9yaXR5KClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTYWZlQnJvd3NpbmdQcml2YWN5UG9saWN5VXJsKClMYW5kcm9pZC9uZXQvVXJpOyIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhbGUoKUYiIGRlcHJlY2F0ZWQ9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2V0dGluZ3MoKUxhbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5nczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0Q2xhc3NpZmllcigpTGFuZHJvaWQvdmlldy90ZXh0Y2xhc3NpZmllci9UZXh0Q2xhc3NpZmllcjsiIHNpbmNlPSIyNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpdGxlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmwoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpc2libGVUaXRsZUhlaWdodCgpSSIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNiIgcmVtb3ZlZD0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWJDaHJvbWVDbGllbnQoKUxhbmRyb2lkL3dlYmtpdC9XZWJDaHJvbWVDbGllbnQ7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWJWaWV3Q2xhc3NMb2FkZXIoKUxqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWJWaWV3Q2xpZW50KClMYW5kcm9pZC93ZWJraXQvV2ViVmlld0NsaWVudDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdlYlZpZXdMb29wZXIoKUxhbmRyb2lkL29zL0xvb3BlcjsiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFpvb21Db250cm9scygpTGFuZHJvaWQvdmlldy9WaWV3OyIgcmVtb3ZlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnb0JhY2soKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnb0JhY2tPckZvcndhcmQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ29Gb3J3YXJkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW52b2tlWm9vbVBpY2tlcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZERhdGEoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkRGF0YVdpdGhCYXNlVVJMKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZFVybChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRVcmwoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9NYXA7KVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYXVzZSgpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXN1bWUoKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9Im92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyKClaIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcigpWiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYWdlRG93bihaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYWdlVXAoWilaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGF1c2VUaW1lcnMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0VXJsKExqYXZhL2xhbmcvU3RyaW5nO1tCKVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG9zdFZpc3VhbFN0YXRlQ2FsbGJhY2soSkxhbmRyb2lkL3dlYmtpdC9XZWJWaWV3JFZpc3VhbFN0YXRlQ2FsbGJhY2s7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InBvc3RXZWJNZXNzYWdlKExhbmRyb2lkL3dlYmtpdC9XZWJNZXNzYWdlO0xhbmRyb2lkL25ldC9Vcmk7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZnJlc2hQbHVnaW5zKFopViIgcmVtb3ZlZD0iMTIiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxvYWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVKYXZhc2NyaXB0SW50ZXJmYWNlKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Rm9jdXNOb2RlSHJlZihMYW5kcm9pZC9vcy9NZXNzYWdlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdEltYWdlUmVmKExhbmRyb2lkL29zL01lc3NhZ2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN0b3JlUGljdHVyZShMYW5kcm9pZC9vcy9CdW5kbGU7TGphdmEvaW8vRmlsZTspWiIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjE2IiByZW1vdmVkPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc3RvcmVTdGF0ZShMYW5kcm9pZC9vcy9CdW5kbGU7KUxhbmRyb2lkL3dlYmtpdC9XZWJCYWNrRm9yd2FyZExpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdW1lVGltZXJzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2F2ZVBhc3N3b3JkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBkZXByZWNhdGVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InNhdmVQaWN0dXJlKExhbmRyb2lkL29zL0J1bmRsZTtMamF2YS9pby9GaWxlOylaIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMTYiIHJlbW92ZWQ9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2F2ZVN0YXRlKExhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvd2Via2l0L1dlYkJhY2tGb3J3YXJkTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzYXZlV2ViQXJjaGl2ZShMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2F2ZVdlYkFyY2hpdmUoTGphdmEvbGFuZy9TdHJpbmc7WkxhbmRyb2lkL3dlYmtpdC9WYWx1ZUNhbGxiYWNrOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDZXJ0aWZpY2F0ZShMYW5kcm9pZC9uZXQvaHR0cC9Tc2xDZXJ0aWZpY2F0ZTspViIgZGVwcmVjYXRlZD0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhRGlyZWN0b3J5U3VmZml4KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREb3dubG9hZExpc3RlbmVyKExhbmRyb2lkL3dlYmtpdC9Eb3dubG9hZExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmluZExpc3RlbmVyKExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3JEZpbmRMaXN0ZW5lcjspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG9yaXpvbnRhbFNjcm9sbGJhck92ZXJsYXkoWilWIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEh0dHBBdXRoVXNlcm5hbWVQYXNzd29yZChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbml0aWFsU2NhbGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWFwVHJhY2tiYWxsVG9BcnJvd0tleXMoWilWIiBkZXByZWNhdGVkPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5ldHdvcmtBdmFpbGFibGUoWilWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBpY3R1cmVMaXN0ZW5lcihMYW5kcm9pZC93ZWJraXQvV2ViVmlldyRQaWN0dXJlTGlzdGVuZXI7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVuZGVyZXJQcmlvcml0eVBvbGljeShJWilWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTYWZlQnJvd3NpbmdXaGl0ZWxpc3QoTGphdmEvdXRpbC9MaXN0O0xhbmRyb2lkL3dlYmtpdC9WYWx1ZUNhbGxiYWNrOylWIiBzaW5jZT0iMjciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0Q2xhc3NpZmllcihMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWVyOylWIiBzaW5jZT0iMjciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWZXJ0aWNhbFNjcm9sbGJhck92ZXJsYXkoWilWIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdlYkNocm9tZUNsaWVudChMYW5kcm9pZC93ZWJraXQvV2ViQ2hyb21lQ2xpZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2ViQ29udGVudHNEZWJ1Z2dpbmdFbmFibGVkKFopViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2ViVmlld0NsaWVudChMYW5kcm9pZC93ZWJraXQvV2ViVmlld0NsaWVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dGaW5kRGlhbG9nKExqYXZhL2xhbmcvU3RyaW5nO1opWiIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0U2FmZUJyb3dzaW5nKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC93ZWJraXQvVmFsdWVDYWxsYmFjazspViIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcExvYWRpbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ6b29tQnkoRilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJ6b29tSW4oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ6b29tT3V0KClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRU5ERVJFUl9QUklPUklUWV9CT1VORCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRU5ERVJFUl9QUklPUklUWV9JTVBPUlRBTlQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iUkVOREVSRVJfUFJJT1JJVFlfV0FJVkVEIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNDSEVNRV9HRU8iLz4KLQkJPGZpZWxkIG5hbWU9IlNDSEVNRV9NQUlMVE8iLz4KLQkJPGZpZWxkIG5hbWU9IlNDSEVNRV9URUwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJWaWV3JEZpbmRMaXN0ZW5lciIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRmluZFJlc3VsdFJlY2VpdmVkKElJWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvV2ViVmlldyRIaXRUZXN0UmVzdWx0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC93ZWJraXQvV2ViVmlldzspViIgcmVtb3ZlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpSSIvPgotCQk8ZmllbGQgbmFtZT0iQU5DSE9SX1RZUEUiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFRElUX1RFWFRfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRU1BSUxfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iR0VPX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IklNQUdFX0FOQ0hPUl9UWVBFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iSU1BR0VfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iUEhPTkVfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iU1JDX0FOQ0hPUl9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUkNfSU1BR0VfQU5DSE9SX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlVOS05PV05fVFlQRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2Via2l0L1dlYlZpZXckUGljdHVyZUxpc3RlbmVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMTIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25OZXdQaWN0dXJlKExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3O0xhbmRyb2lkL2dyYXBoaWNzL1BpY3R1cmU7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvV2ViVmlldyRWaXN1YWxTdGF0ZUNhbGxiYWNrIiBzaW5jZT0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Db21wbGV0ZShKKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJWaWV3JFdlYlZpZXdUcmFuc3BvcnQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC93ZWJraXQvV2ViVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdlYlZpZXcoKUxhbmRyb2lkL3dlYmtpdC9XZWJWaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdlYlZpZXcoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJWaWV3Q2xpZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb1VwZGF0ZVZpc2l0ZWRIaXN0b3J5KExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3O0xqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRm9ybVJlc3VibWlzc2lvbihMYW5kcm9pZC93ZWJraXQvV2ViVmlldztMYW5kcm9pZC9vcy9NZXNzYWdlO0xhbmRyb2lkL29zL01lc3NhZ2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkxvYWRSZXNvdXJjZShMYW5kcm9pZC93ZWJraXQvV2ViVmlldztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGFnZUNvbW1pdFZpc2libGUoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUGFnZUZpbmlzaGVkKExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYWdlU3RhcnRlZChMYW5kcm9pZC93ZWJraXQvV2ViVmlldztMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlY2VpdmVkQ2xpZW50Q2VydFJlcXVlc3QoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7TGFuZHJvaWQvd2Via2l0L0NsaWVudENlcnRSZXF1ZXN0OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlY2VpdmVkRXJyb3IoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7SUxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVjZWl2ZWRFcnJvcihMYW5kcm9pZC93ZWJraXQvV2ViVmlldztMYW5kcm9pZC93ZWJraXQvV2ViUmVzb3VyY2VSZXF1ZXN0O0xhbmRyb2lkL3dlYmtpdC9XZWJSZXNvdXJjZUVycm9yOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlY2VpdmVkSHR0cEF1dGhSZXF1ZXN0KExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3O0xhbmRyb2lkL3dlYmtpdC9IdHRwQXV0aEhhbmRsZXI7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlY2VpdmVkSHR0cEVycm9yKExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3O0xhbmRyb2lkL3dlYmtpdC9XZWJSZXNvdXJjZVJlcXVlc3Q7TGFuZHJvaWQvd2Via2l0L1dlYlJlc291cmNlUmVzcG9uc2U7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVjZWl2ZWRMb2dpblJlcXVlc3QoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVjZWl2ZWRTc2xFcnJvcihMYW5kcm9pZC93ZWJraXQvV2ViVmlldztMYW5kcm9pZC93ZWJraXQvU3NsRXJyb3JIYW5kbGVyO0xhbmRyb2lkL25ldC9odHRwL1NzbEVycm9yOylWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVuZGVyUHJvY2Vzc0dvbmUoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7TGFuZHJvaWQvd2Via2l0L1JlbmRlclByb2Nlc3NHb25lRGV0YWlsOylaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNhZmVCcm93c2luZ0hpdChMYW5kcm9pZC93ZWJraXQvV2ViVmlldztMYW5kcm9pZC93ZWJraXQvV2ViUmVzb3VyY2VSZXF1ZXN0O0lMYW5kcm9pZC93ZWJraXQvU2FmZUJyb3dzaW5nUmVzcG9uc2U7KVYiIHNpbmNlPSIyNyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2NhbGVDaGFuZ2VkKExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3O0ZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRvb01hbnlSZWRpcmVjdHMoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7TGFuZHJvaWQvb3MvTWVzc2FnZTtMYW5kcm9pZC9vcy9NZXNzYWdlOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVW5oYW5kbGVkSW5wdXRFdmVudChMYW5kcm9pZC93ZWJraXQvV2ViVmlldztMYW5kcm9pZC92aWV3L0lucHV0RXZlbnQ7KVYiIHNpbmNlPSIyMSIgcmVtb3ZlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVuaGFuZGxlZEtleUV2ZW50KExhbmRyb2lkL3dlYmtpdC9XZWJWaWV3O0xhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVYiIGRlcHJlY2F0ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdWxkSW50ZXJjZXB0UmVxdWVzdChMYW5kcm9pZC93ZWJraXQvV2ViVmlldztMYW5kcm9pZC93ZWJraXQvV2ViUmVzb3VyY2VSZXF1ZXN0OylMYW5kcm9pZC93ZWJraXQvV2ViUmVzb3VyY2VSZXNwb25zZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNob3VsZEludGVyY2VwdFJlcXVlc3QoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7TGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3dlYmtpdC9XZWJSZXNvdXJjZVJlc3BvbnNlOyIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNob3VsZE92ZXJyaWRlS2V5RXZlbnQoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7TGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNob3VsZE92ZXJyaWRlVXJsTG9hZGluZyhMYW5kcm9pZC93ZWJraXQvV2ViVmlldztMYW5kcm9pZC93ZWJraXQvV2ViUmVzb3VyY2VSZXF1ZXN0OylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG91bGRPdmVycmlkZVVybExvYWRpbmcoTGFuZHJvaWQvd2Via2l0L1dlYlZpZXc7TGphdmEvbGFuZy9TdHJpbmc7KVoiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9BVVRIRU5USUNBVElPTiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0JBRF9VUkwiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9DT05ORUNUIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfRkFJTEVEX1NTTF9IQU5EU0hBS0UiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9GSUxFIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfRklMRV9OT1RfRk9VTkQiIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9IT1NUX0xPT0tVUCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX0lPIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfUFJPWFlfQVVUSEVOVElDQVRJT04iIHNpbmNlPSI1Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9SRURJUkVDVF9MT09QIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfVElNRU9VVCIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1RPT19NQU5ZX1JFUVVFU1RTIiBzaW5jZT0iNSIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1JfVU5LTk9XTiIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1VOU0FGRV9SRVNPVVJDRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFUlJPUl9VTlNVUFBPUlRFRF9BVVRIX1NDSEVNRSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IkVSUk9SX1VOU1VQUE9SVEVEX1NDSEVNRSIgc2luY2U9IjUiLz4KLQkJPGZpZWxkIG5hbWU9IlNBRkVfQlJPV1NJTkdfVEhSRUFUX01BTFdBUkUiIHNpbmNlPSIyNyIvPgotCQk8ZmllbGQgbmFtZT0iU0FGRV9CUk9XU0lOR19USFJFQVRfUEhJU0hJTkciIHNpbmNlPSIyNyIvPgotCQk8ZmllbGQgbmFtZT0iU0FGRV9CUk9XU0lOR19USFJFQVRfVU5LTk9XTiIgc2luY2U9IjI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQUZFX0JST1dTSU5HX1RIUkVBVF9VTldBTlRFRF9TT0ZUV0FSRSIgc2luY2U9IjI3Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93ZWJraXQvV2ViVmlld0RhdGFiYXNlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhckZvcm1EYXRhKClWIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFySHR0cEF1dGhVc2VybmFtZVBhc3N3b3JkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJVc2VybmFtZVBhc3N3b3JkKClWIiBkZXByZWNhdGVkPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEh0dHBBdXRoVXNlcm5hbWVQYXNzd29yZChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspW0xqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylMYW5kcm9pZC93ZWJraXQvV2ViVmlld0RhdGFiYXNlOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0Zvcm1EYXRhKClaIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0h0dHBBdXRoVXNlcm5hbWVQYXNzd29yZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1VzZXJuYW1lUGFzc3dvcmQoKVoiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SHR0cEF1dGhVc2VybmFtZVBhc3N3b3JkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkxPR1RBRyIgcmVtb3ZlZD0iMTciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dlYmtpdC9XZWJWaWV3RnJhZ21lbnQiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9GcmFnbWVudCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdlYlZpZXcoKUxhbmRyb2lkL3dlYmtpdC9XZWJWaWV3OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0Fic0xpc3RWaWV3IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdGV4dC9UZXh0V2F0Y2hlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld1RyZWVPYnNlcnZlciRPbkdsb2JhbExheW91dExpc3RlbmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3VHJlZU9ic2VydmVyJE9uVG91Y2hNb2RlQ2hhbmdlTGlzdGVuZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvRmlsdGVyJEZpbHRlckxpc3RlbmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuU2Nyb2xsTGlzdChJKVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQ2hvaWNlcygpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJUZXh0RmlsdGVyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVmZXJOb3RpZnlEYXRhU2V0Q2hhbmdlZCgpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmxpbmcoSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZUxheW91dFBhcmFtcyhMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspTGFuZHJvaWQvd2lkZ2V0L0Fic0xpc3RWaWV3JExheW91dFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWNoZUNvbG9ySGludCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoZWNrZWRJdGVtQ291bnQoKUkiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoZWNrZWRJdGVtSWRzKClbSiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hlY2tlZEl0ZW1Qb3NpdGlvbigpSSIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hlY2tlZEl0ZW1Qb3NpdGlvbnMoKUxhbmRyb2lkL3V0aWwvU3BhcnNlQm9vbGVhbkFycmF5OyIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hvaWNlTW9kZSgpSSIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGlzdFBhZGRpbmdCb3R0b20oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaXN0UGFkZGluZ0xlZnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaXN0UGFkZGluZ1JpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGlzdFBhZGRpbmdUb3AoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxlY3RvcigpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dEZpbHRlcigpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYW5zY3JpcHRNb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlRGF0YUNoYW5nZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNUZXh0RmlsdGVyKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW52YWxpZGF0ZVZpZXdzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGYXN0U2Nyb2xsQWx3YXlzVmlzaWJsZSgpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGYXN0U2Nyb2xsRW5hYmxlZCgpWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0luRmlsdGVyTW9kZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSXRlbUNoZWNrZWQoSSlaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Njcm9sbGluZ0NhY2hlRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU21vb3RoU2Nyb2xsYmFyRW5hYmxlZCgpWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N0YWNrRnJvbUJvdHRvbSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVGV4dEZpbHRlckVuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXlvdXRDaGlsZHJlbigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mb0Zvckl0ZW0oTGFuZHJvaWQvdmlldy9WaWV3O0lMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlbW90ZUFkYXB0ZXJDb25uZWN0ZWQoKVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVtb3RlQWRhcHRlckRpc2Nvbm5lY3RlZCgpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9pbnRUb1Bvc2l0aW9uKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb2ludFRvUm93SWQoSUkpSiIvPgotCQk8bWV0aG9kIG5hbWU9InJlY2xhaW1WaWV3cyhMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY3JvbGxMaXN0QnkoSSlWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBZGFwdGVyKExhbmRyb2lkL3dpZGdldC9MaXN0QWRhcHRlcjspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FjaGVDb2xvckhpbnQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hvaWNlTW9kZShJKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldERyYXdTZWxlY3Rvck9uVG9wKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZhc3RTY3JvbGxBbHdheXNWaXNpYmxlKFopViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmFzdFNjcm9sbEVuYWJsZWQoWilWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZhc3RTY3JvbGxTdHlsZShJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZpbHRlclRleHQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGcmljdGlvbihGKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEl0ZW1DaGVja2VkKElaKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE11bHRpQ2hvaWNlTW9kZUxpc3RlbmVyKExhbmRyb2lkL3dpZGdldC9BYnNMaXN0VmlldyRNdWx0aUNob2ljZU1vZGVMaXN0ZW5lcjspViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25TY3JvbGxMaXN0ZW5lcihMYW5kcm9pZC93aWRnZXQvQWJzTGlzdFZpZXckT25TY3JvbGxMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlY3ljbGVyTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L0Fic0xpc3RWaWV3JFJlY3ljbGVyTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZW1vdGVWaWV3c0FkYXB0ZXIoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjcm9sbEluZGljYXRvcnMoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjcm9sbGluZ0NhY2hlRW5hYmxlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWxlY3Rpb25Gcm9tVG9wKElJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbGVjdG9yKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbGVjdG9yKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U21vb3RoU2Nyb2xsYmFyRW5hYmxlZChaKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RhY2tGcm9tQm90dG9tKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRGaWx0ZXJFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyYW5zY3JpcHRNb2RlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZlbG9jaXR5U2NhbGUoRilWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzbW9vdGhTY3JvbGxCeShJSSlWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNtb290aFNjcm9sbFRvUG9zaXRpb24oSSlWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNtb290aFNjcm9sbFRvUG9zaXRpb24oSUkpViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzbW9vdGhTY3JvbGxUb1Bvc2l0aW9uRnJvbVRvcChJSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzbW9vdGhTY3JvbGxUb1Bvc2l0aW9uRnJvbVRvcChJSUkpViIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSE9JQ0VfTU9ERV9NVUxUSVBMRSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSE9JQ0VfTU9ERV9NVUxUSVBMRV9NT0RBTCIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSE9JQ0VfTU9ERV9OT05FIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkNIT0lDRV9NT0RFX1NJTkdMRSIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFOU0NSSVBUX01PREVfQUxXQVlTX1NDUk9MTCIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNDUklQVF9NT0RFX0RJU0FCTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFOU0NSSVBUX01PREVfTk9STUFMIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvQWJzTGlzdFZpZXckTGF5b3V0UGFyYW1zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtczspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0Fic0xpc3RWaWV3JE11bHRpQ2hvaWNlTW9kZUxpc3RlbmVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9BY3Rpb25Nb2RlJENhbGxiYWNrIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25JdGVtQ2hlY2tlZFN0YXRlQ2hhbmdlZChMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGU7SUpaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BYnNMaXN0VmlldyRPblNjcm9sbExpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNjcm9sbChMYW5kcm9pZC93aWRnZXQvQWJzTGlzdFZpZXc7SUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNjcm9sbFN0YXRlQ2hhbmdlZChMYW5kcm9pZC93aWRnZXQvQWJzTGlzdFZpZXc7SSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JPTExfU1RBVEVfRkxJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlNDUk9MTF9TVEFURV9JRExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ1JPTExfU1RBVEVfVE9VQ0hfU0NST0xMIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvQWJzTGlzdFZpZXckUmVjeWNsZXJMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Nb3ZlZFRvU2NyYXBIZWFwKExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0Fic0xpc3RWaWV3JFNlbGVjdGlvbkJvdW5kc0FkanVzdGVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRqdXN0TGlzdEl0ZW1TZWxlY3Rpb25Cb3VuZHMoTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0Fic1NlZWtCYXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvUHJvZ3Jlc3NCYXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlQcm9ncmVzc0luY3JlbWVudCgpSSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGxpdFRyYWNrKClaIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHVtYigpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHVtYk9mZnNldCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRodW1iVGludExpc3QoKUxhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGh1bWJUaW50TW9kZSgpTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGlja01hcmsoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGlja01hcmtUaW50TGlzdCgpTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaWNrTWFya1RpbnRNb2RlKClMYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmJE1vZGU7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZXlQcm9ncmVzc0luY3JlbWVudChJKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3BsaXRUcmFjayhaKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRodW1iKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGh1bWJPZmZzZXQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGh1bWJUaW50TGlzdChMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGh1bWJUaW50TW9kZShMYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmJE1vZGU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpY2tNYXJrKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaWNrTWFya1RpbnRMaXN0KExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaWNrTWFya1RpbnRNb2RlKExhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTspViIgc2luY2U9IjI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvQWJzU3Bpbm5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlldyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkYXB0ZXIoKUxhbmRyb2lkL3dpZGdldC9TcGlubmVyQWRhcHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb2ludFRvUG9zaXRpb24oSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFkYXB0ZXIoTGFuZHJvaWQvd2lkZ2V0L1NwaW5uZXJBZGFwdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VsZWN0aW9uKElaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BYnNvbHV0ZUxheW91dCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld0dyb3VwIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvQWJzb2x1dGVMYXlvdXQkTGF5b3V0UGFyYW1zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVidWcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0ieCIvPgotCQk8ZmllbGQgbmFtZT0ieSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0FjdGlvbk1lbnVWaWV3IiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc21pc3NQb3B1cE1lbnVzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVEZWZhdWx0TGF5b3V0UGFyYW1zKClMYW5kcm9pZC93aWRnZXQvQWN0aW9uTWVudVZpZXckTGF5b3V0UGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlTGF5b3V0UGFyYW1zKExhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylMYW5kcm9pZC93aWRnZXQvQWN0aW9uTWVudVZpZXckTGF5b3V0UGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlTGF5b3V0UGFyYW1zKExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtczspTGFuZHJvaWQvd2lkZ2V0L0FjdGlvbk1lbnVWaWV3JExheW91dFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZW51KClMYW5kcm9pZC92aWV3L01lbnU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3ZlcmZsb3dJY29uKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvcHVwVGhlbWUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoaWRlT3ZlcmZsb3dNZW51KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPdmVyZmxvd01lbnVTaG93aW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25NZW51SXRlbUNsaWNrTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L0FjdGlvbk1lbnVWaWV3JE9uTWVudUl0ZW1DbGlja0xpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3ZlcmZsb3dJY29uKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb3B1cFRoZW1lKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dPdmVyZmxvd01lbnUoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BY3Rpb25NZW51VmlldyRMYXlvdXRQYXJhbXMiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0xpbmVhckxheW91dCRMYXlvdXRQYXJhbXMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3dpZGdldC9BY3Rpb25NZW51VmlldyRMYXlvdXRQYXJhbXM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BY3Rpb25NZW51VmlldyRPbk1lbnVJdGVtQ2xpY2tMaXN0ZW5lciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTWVudUl0ZW1DbGljayhMYW5kcm9pZC92aWV3L01lbnVJdGVtOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvQWRhcHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0b2ZpbGxPcHRpb25zKClbTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEl0ZW0oSSlMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJdGVtSWQoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SXRlbVZpZXdUeXBlKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZXcoSUxhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDspTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZXdUeXBlQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNTdGFibGVJZHMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VtcHR5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJEYXRhU2V0T2JzZXJ2ZXIoTGFuZHJvaWQvZGF0YWJhc2UvRGF0YVNldE9ic2VydmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlckRhdGFTZXRPYnNlcnZlcihMYW5kcm9pZC9kYXRhYmFzZS9EYXRhU2V0T2JzZXJ2ZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IklHTk9SRV9JVEVNX1ZJRVdfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iTk9fU0VMRUNUSU9OIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXciIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdHcm91cCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkYXB0ZXIoKUxhbmRyb2lkL3dpZGdldC9BZGFwdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW1wdHlWaWV3KClMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rmlyc3RWaXNpYmxlUG9zaXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJdGVtQXRQb3NpdGlvbihJKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEl0ZW1JZEF0UG9zaXRpb24oSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFzdFZpc2libGVQb3NpdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9uSXRlbUNsaWNrTGlzdGVuZXIoKUxhbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlldyRPbkl0ZW1DbGlja0xpc3RlbmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9uSXRlbUxvbmdDbGlja0xpc3RlbmVyKClMYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXckT25JdGVtTG9uZ0NsaWNrTGlzdGVuZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T25JdGVtU2VsZWN0ZWRMaXN0ZW5lcigpTGFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3JE9uSXRlbVNlbGVjdGVkTGlzdGVuZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zaXRpb25Gb3JWaWV3KExhbmRyb2lkL3ZpZXcvVmlldzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGVkSXRlbSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VsZWN0ZWRJdGVtSWQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxlY3RlZEl0ZW1Qb3NpdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGVkVmlldygpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9InBlcmZvcm1JdGVtQ2xpY2soTGFuZHJvaWQvdmlldy9WaWV3O0lKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBZGFwdGVyKExhbmRyb2lkL3dpZGdldC9BZGFwdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW1wdHlWaWV3KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uSXRlbUNsaWNrTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3JE9uSXRlbUNsaWNrTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkl0ZW1Mb25nQ2xpY2tMaXN0ZW5lcihMYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXckT25JdGVtTG9uZ0NsaWNrTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkl0ZW1TZWxlY3RlZExpc3RlbmVyKExhbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlldyRPbkl0ZW1TZWxlY3RlZExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VsZWN0aW9uKEkpViIvPgotCQk8ZmllbGQgbmFtZT0iSU5WQUxJRF9QT1NJVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iSU5WQUxJRF9ST1dfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IklURU1fVklFV19UWVBFX0hFQURFUl9PUl9GT09URVIiLz4KLQkJPGZpZWxkIG5hbWU9IklURU1fVklFV19UWVBFX0lHTk9SRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3JEFkYXB0ZXJDb250ZXh0TWVudUluZm8iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvQ29udGV4dE1lbnUkQ29udGV4dE1lbnVJbmZvIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvVmlldztJSilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJpZCIvPgotCQk8ZmllbGQgbmFtZT0icG9zaXRpb24iLz4KLQkJPGZpZWxkIG5hbWU9InRhcmdldFZpZXciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlldyRPbkl0ZW1DbGlja0xpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkl0ZW1DbGljayhMYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXc7TGFuZHJvaWQvdmlldy9WaWV3O0lKKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlldyRPbkl0ZW1Mb25nQ2xpY2tMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25JdGVtTG9uZ0NsaWNrKExhbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlldztMYW5kcm9pZC92aWV3L1ZpZXc7SUopWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3JE9uSXRlbVNlbGVjdGVkTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uSXRlbVNlbGVjdGVkKExhbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlldztMYW5kcm9pZC92aWV3L1ZpZXc7SUopViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTm90aGluZ1NlbGVjdGVkKExhbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlldzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3QW5pbWF0b3IiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0FkdmFuY2VhYmxlIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkdmFuY2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWZlck5vdGlmeURhdGFTZXRDaGFuZ2VkKClWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJmeWlXaWxsQmVBZHZhbmNlZEJ5SG9zdEtUaHgoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50VmlldygpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXllZENoaWxkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5BbmltYXRpb24oKUxhbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRBbmltYXRpb24oKUxhbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlbW90ZUFkYXB0ZXJDb25uZWN0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJlbW90ZUFkYXB0ZXJEaXNjb25uZWN0ZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbmltYXRlRmlyc3RWaWV3KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXllZENoaWxkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluQW5pbWF0aW9uKExhbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluQW5pbWF0aW9uKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdXRBbmltYXRpb24oTGFuZHJvaWQvYW5pbWF0aW9uL09iamVjdEFuaW1hdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3V0QW5pbWF0aW9uKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZW1vdGVWaWV3c0FkYXB0ZXIoTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93TmV4dCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dQcmV2aW91cygpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3RmxpcHBlciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXdBbmltYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxpcEludGVydmFsKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0F1dG9TdGFydCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmxpcHBpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdXRvU3RhcnQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmxpcEludGVydmFsKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0RmxpcHBpbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wRmxpcHBpbmcoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BZHZhbmNlYWJsZSIgc2luY2U9IjE2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkdmFuY2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmeWlXaWxsQmVBZHZhbmNlZEJ5SG9zdEtUaHgoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BbHBoYWJldEluZGV4ZXIiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9kYXRhYmFzZS9EYXRhU2V0T2JzZXJ2ZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvU2VjdGlvbkluZGV4ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO0lMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXJzb3IoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJtQWxwaGFiZXQiLz4KLQkJPGZpZWxkIG5hbWU9Im1Db2x1bW5JbmRleCIvPgotCQk8ZmllbGQgbmFtZT0ibURhdGFDdXJzb3IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BbmFsb2dDbG9jayIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXciLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BcnJheUFkYXB0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvQmFzZUFkYXB0ZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvRmlsdGVyYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3dpZGdldC9UaGVtZWRTcGlubmVyQWRhcHRlciIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lJTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJSVtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SUxqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SVtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFsbChMamF2YS91dGlsL0NvbGxlY3Rpb247KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFsbChbTGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRnJvbVJlc291cmNlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJSSlMYW5kcm9pZC93aWRnZXQvQXJyYXlBZGFwdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRleHQoKUxhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3NpdGlvbihMamF2YS9sYW5nL09iamVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydChMamF2YS9sYW5nL09iamVjdDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmUoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREcm9wRG93blZpZXdSZXNvdXJjZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROb3RpZnlPbkNoYW5nZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzb3J0KExqYXZhL3V0aWwvQ29tcGFyYXRvcjspViIgc2luY2U9IjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BdXRvQ29tcGxldGVUZXh0VmlldyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9FZGl0VGV4dCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3dpZGdldC9GaWx0ZXIkRmlsdGVyTGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzJFRoZW1lOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhckxpc3RTZWxlY3Rpb24oKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udmVydFNlbGVjdGlvblRvU3RyaW5nKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNtaXNzRHJvcERvd24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbm91Z2hUb0ZpbHRlcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkYXB0ZXIoKUxhbmRyb2lkL3dpZGdldC9MaXN0QWRhcHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wbGV0aW9uSGludCgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcm9wRG93bkFuY2hvcigpSSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcm9wRG93bkJhY2tncm91bmQoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcm9wRG93bkhlaWdodCgpSSIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcm9wRG93bkhvcml6b250YWxPZmZzZXQoKUkiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJvcERvd25WZXJ0aWNhbE9mZnNldCgpSSIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcm9wRG93bldpZHRoKClJIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbHRlcigpTGFuZHJvaWQvd2lkZ2V0L0ZpbHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJdGVtQ2xpY2tMaXN0ZW5lcigpTGFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3JE9uSXRlbUNsaWNrTGlzdGVuZXI7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEl0ZW1TZWxlY3RlZExpc3RlbmVyKClMYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXckT25JdGVtU2VsZWN0ZWRMaXN0ZW5lcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGlzdFNlbGVjdGlvbigpSSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPbkl0ZW1DbGlja0xpc3RlbmVyKClMYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXckT25JdGVtQ2xpY2tMaXN0ZW5lcjsiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T25JdGVtU2VsZWN0ZWRMaXN0ZW5lcigpTGFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3JE9uSXRlbVNlbGVjdGVkTGlzdGVuZXI7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRocmVzaG9sZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbGlkYXRvcigpTGFuZHJvaWQvd2lkZ2V0L0F1dG9Db21wbGV0ZVRleHRWaWV3JFZhbGlkYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1BlcmZvcm1pbmdDb21wbGV0aW9uKClaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUG9wdXBTaG93aW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVyZm9ybUNvbXBsZXRpb24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJmb3JtRmlsdGVyaW5nKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InBlcmZvcm1WYWxpZGF0aW9uKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZVRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBZGFwdGVyKExhbmRyb2lkL3dpZGdldC9MaXN0QWRhcHRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbXBsZXRpb25IaW50KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHJvcERvd25BbmNob3IoSSlWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERyb3BEb3duQmFja2dyb3VuZERyYXdhYmxlKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InNldERyb3BEb3duQmFja2dyb3VuZFJlc291cmNlKEkpViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREcm9wRG93bkhlaWdodChJKVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHJvcERvd25Ib3Jpem9udGFsT2Zmc2V0KEkpViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREcm9wRG93blZlcnRpY2FsT2Zmc2V0KEkpViIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREcm9wRG93bldpZHRoKEkpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaXN0U2VsZWN0aW9uKEkpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkRpc21pc3NMaXN0ZW5lcihMYW5kcm9pZC93aWRnZXQvQXV0b0NvbXBsZXRlVGV4dFZpZXckT25EaXNtaXNzTGlzdGVuZXI7KVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uSXRlbUNsaWNrTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3JE9uSXRlbUNsaWNrTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkl0ZW1TZWxlY3RlZExpc3RlbmVyKExhbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlldyRPbkl0ZW1TZWxlY3RlZExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtaKVYiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRocmVzaG9sZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYWxpZGF0b3IoTGFuZHJvaWQvd2lkZ2V0L0F1dG9Db21wbGV0ZVRleHRWaWV3JFZhbGlkYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dEcm9wRG93bigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0F1dG9Db21wbGV0ZVRleHRWaWV3JE9uRGlzbWlzc0xpc3RlbmVyIiBzaW5jZT0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25EaXNtaXNzKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvQXV0b0NvbXBsZXRlVGV4dFZpZXckVmFsaWRhdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaXhUZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZhbGlkKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvQmFzZUFkYXB0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3dpZGdldC9MaXN0QWRhcHRlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3dpZGdldC9TcGlubmVyQWRhcHRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeURhdGFTZXRDaGFuZ2VkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5RGF0YVNldEludmFsaWRhdGVkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0b2ZpbGxPcHRpb25zKFtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIgc2luY2U9IjI3Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvQmFzZUV4cGFuZGFibGVMaXN0QWRhcHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0V4cGFuZGFibGVMaXN0QWRhcHRlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3dpZGdldC9IZXRlcm9nZW5lb3VzRXhwYW5kYWJsZUxpc3QiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5RGF0YVNldENoYW5nZWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlEYXRhU2V0SW52YWxpZGF0ZWQoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9CdXR0b24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvVGV4dFZpZXciLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9DYWxlbmRhclZpZXciIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0ZyYW1lTGF5b3V0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGVUZXh0QXBwZWFyYW5jZSgpSSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rmlyc3REYXlPZldlZWsoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb2N1c2VkTW9udGhEYXRlQ29sb3IoKUkiIHNpbmNlPSIxNiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhEYXRlKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluRGF0ZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIxNiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IoKUkiIHNpbmNlPSIxNiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG93V2Vla051bWJlcigpWiIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG93bldlZWtDb3VudCgpSSIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yKClJIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2Vla0RheVRleHRBcHBlYXJhbmNlKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWVrTnVtYmVyQ29sb3IoKUkiIHNpbmNlPSIxNiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWVrU2VwYXJhdG9yTGluZUNvbG9yKClJIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0ZShKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRlKEpaWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0ZVRleHRBcHBlYXJhbmNlKEkpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rmlyc3REYXlPZldlZWsoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9jdXNlZE1vbnRoRGF0ZUNvbG9yKEkpViIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1heERhdGUoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWluRGF0ZShKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkRhdGVDaGFuZ2VMaXN0ZW5lcihMYW5kcm9pZC93aWRnZXQvQ2FsZW5kYXJWaWV3JE9uRGF0ZUNoYW5nZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoSSlWIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHNpbmNlPSIxNiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IoSSlWIiBzaW5jZT0iMTYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hvd1dlZWtOdW1iZXIoWilWIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNob3duV2Vla0NvdW50KEkpViIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yKEkpViIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdlZWtEYXlUZXh0QXBwZWFyYW5jZShJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdlZWtOdW1iZXJDb2xvcihJKVYiIHNpbmNlPSIxNiIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXZWVrU2VwYXJhdG9yTGluZUNvbG9yKEkpViIgc2luY2U9IjE2IiBkZXByZWNhdGVkPSIyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0NhbGVuZGFyVmlldyRPbkRhdGVDaGFuZ2VMaXN0ZW5lciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2VsZWN0ZWREYXlDaGFuZ2UoTGFuZHJvaWQvd2lkZ2V0L0NhbGVuZGFyVmlldztJSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0NoZWNrQm94IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0NvbXBvdW5kQnV0dG9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvQ2hlY2thYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NoZWNrZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGVja2VkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InRvZ2dsZSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0NoZWNrZWRUZXh0VmlldyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9UZXh0VmlldyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3dpZGdldC9DaGVja2FibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGVja01hcmtEcmF3YWJsZSgpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGVja01hcmtUaW50TGlzdCgpTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGVja01hcmtUaW50TW9kZSgpTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QYWRkaW5nQ2hhbmdlZChJKVYiIHNpbmNlPSIxNiIgcmVtb3ZlZD0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGVja01hcmtEcmF3YWJsZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGVja01hcmtEcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoZWNrTWFya1RpbnRMaXN0KExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGVja01hcmtUaW50TW9kZShMYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmJE1vZGU7KVYiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0Nocm9ub21ldGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFzZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcm1hdCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T25DaHJvbm9tZXRlclRpY2tMaXN0ZW5lcigpTGFuZHJvaWQvd2lkZ2V0L0Nocm9ub21ldGVyJE9uQ2hyb25vbWV0ZXJUaWNrTGlzdGVuZXI7IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ291bnREb3duKClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RoZUZpbmFsQ291bnREb3duKClaIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCYXNlKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvdW50RG93bihaKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvcm1hdChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uQ2hyb25vbWV0ZXJUaWNrTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L0Nocm9ub21ldGVyJE9uQ2hyb25vbWV0ZXJUaWNrTGlzdGVuZXI7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvQ2hyb25vbWV0ZXIkT25DaHJvbm9tZXRlclRpY2tMaXN0ZW5lciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DaHJvbm9tZXRlclRpY2soTGFuZHJvaWQvd2lkZ2V0L0Nocm9ub21ldGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvQ29tcG91bmRCdXR0b24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvQnV0dG9uIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0NoZWNrYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1dHRvbkRyYXdhYmxlKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1dHRvblRpbnRMaXN0KClMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1dHRvblRpbnRNb2RlKClMYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmJE1vZGU7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCdXR0b25EcmF3YWJsZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCdXR0b25EcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJ1dHRvblRpbnRMaXN0KExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCdXR0b25UaW50TW9kZShMYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmJE1vZGU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uQ2hlY2tlZENoYW5nZUxpc3RlbmVyKExhbmRyb2lkL3dpZGdldC9Db21wb3VuZEJ1dHRvbiRPbkNoZWNrZWRDaGFuZ2VMaXN0ZW5lcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0NvbXBvdW5kQnV0dG9uJE9uQ2hlY2tlZENoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNoZWNrZWRDaGFuZ2VkKExhbmRyb2lkL3dpZGdldC9Db21wb3VuZEJ1dHRvbjtaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9DdXJzb3JBZGFwdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0Jhc2VBZGFwdGVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0ZpbHRlcmFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvVGhlbWVkU3Bpbm5lckFkYXB0ZXIiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO0kpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZFZpZXcoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFuZ2VDdXJzb3IoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udmVydFRvU3RyaW5nKExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3Vyc29yKClMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsdGVyUXVlcnlQcm92aWRlcigpTGFuZHJvaWQvd2lkZ2V0L0ZpbHRlclF1ZXJ5UHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO1opViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdEcm9wRG93blZpZXcoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDspTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1ZpZXcoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDspTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29udGVudENoYW5nZWQoKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icnVuUXVlcnlPbkJhY2tncm91bmRUaHJlYWQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaWx0ZXJRdWVyeVByb3ZpZGVyKExhbmRyb2lkL3dpZGdldC9GaWx0ZXJRdWVyeVByb3ZpZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3dhcEN1cnNvcihMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iRkxBR19BVVRPX1JFUVVFUlkiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IkZMQUdfUkVHSVNURVJfQ09OVEVOVF9PQlNFUlZFUiIgc2luY2U9IjExIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvQ3Vyc29yVHJlZUFkYXB0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvQmFzZUV4cGFuZGFibGVMaXN0QWRhcHRlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3dpZGdldC9GaWx0ZXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO0xhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kQ2hpbGRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO1opViIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmRHcm91cFZpZXcoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hhbmdlQ3Vyc29yKExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnZlcnRUb1N0cmluZyhMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkKElJKUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGlsZHJlbkN1cnNvcihMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJzb3IoKUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWx0ZXJRdWVyeVByb3ZpZGVyKClMYW5kcm9pZC93aWRnZXQvRmlsdGVyUXVlcnlQcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcm91cChJKUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdDaGlsZFZpZXcoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtaTGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7KUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdHcm91cFZpZXcoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtaTGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7KUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlEYXRhU2V0Q2hhbmdlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5RdWVyeU9uQmFja2dyb3VuZFRocmVhZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoaWxkcmVuQ3Vyc29yKElMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaWx0ZXJRdWVyeVByb3ZpZGVyKExhbmRyb2lkL3dpZGdldC9GaWx0ZXJRdWVyeVByb3ZpZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R3JvdXBDdXJzb3IoTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvRGF0ZVBpY2tlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9GcmFtZUxheW91dCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGVuZGFyVmlldygpTGFuZHJvaWQvd2lkZ2V0L0NhbGVuZGFyVmlldzsiIHNpbmNlPSIxMiIgZGVwcmVjYXRlZD0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxlbmRhclZpZXdTaG93bigpWiIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERheU9mTW9udGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaXJzdERheU9mV2VlaygpSSIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4RGF0ZSgpSiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluRGF0ZSgpSiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9udGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGlubmVyc1Nob3duKClaIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WWVhcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoSUlJTGFuZHJvaWQvd2lkZ2V0L0RhdGVQaWNrZXIkT25EYXRlQ2hhbmdlZExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FsZW5kYXJWaWV3U2hvd24oWilWIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rmlyc3REYXlPZldlZWsoSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhEYXRlKEopViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWluRGF0ZShKKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uRGF0ZUNoYW5nZWRMaXN0ZW5lcihMYW5kcm9pZC93aWRnZXQvRGF0ZVBpY2tlciRPbkRhdGVDaGFuZ2VkTGlzdGVuZXI7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNwaW5uZXJzU2hvd24oWilWIiBzaW5jZT0iMTEiIGRlcHJlY2F0ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlRGF0ZShJSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0RhdGVQaWNrZXIkT25EYXRlQ2hhbmdlZExpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRhdGVDaGFuZ2VkKExhbmRyb2lkL3dpZGdldC9EYXRlUGlja2VyO0lJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvRGlhbGVyRmlsdGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9SZWxhdGl2ZUxheW91dCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJUZXh0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlnaXRzKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWx0ZXJUZXh0KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZXR0ZXJzKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNRd2VydHlLZXlib2FyZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTW9kZUNoYW5nZShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlRmlsdGVyV2F0Y2hlcihMYW5kcm9pZC90ZXh0L1RleHRXYXRjaGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGlnaXRzV2F0Y2hlcihMYW5kcm9pZC90ZXh0L1RleHRXYXRjaGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmlsdGVyV2F0Y2hlcihMYW5kcm9pZC90ZXh0L1RleHRXYXRjaGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGV0dGVyc1dhdGNoZXIoTGFuZHJvaWQvdGV4dC9UZXh0V2F0Y2hlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1vZGUoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJESUdJVFNfQU5EX0xFVFRFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkRJR0lUU19BTkRfTEVUVEVSU19OT19ESUdJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkRJR0lUU19BTkRfTEVUVEVSU19OT19MRVRURVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJESUdJVFNfT05MWSIvPgotCQk8ZmllbGQgbmFtZT0iTEVUVEVSU19PTkxZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvRGlnaXRhbENsb2NrIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMTciPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9UZXh0VmlldyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvRWRnZUVmZmVjdCIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3KExhbmRyb2lkL2dyYXBoaWNzL0NhbnZhczspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yKClJIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhIZWlnaHQoKUkiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmluaXNoZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFic29yYihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblB1bGwoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25QdWxsKEZGKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUmVsZWFzZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbG9yKEkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2l6ZShJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvRWRpdFRleHQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvVGV4dFZpZXciLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHRlbmRTZWxlY3Rpb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dCgpTGFuZHJvaWQvdGV4dC9FZGl0YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZWxlY3RBbGwoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWxlY3Rpb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VsZWN0aW9uKElJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9FeHBhbmRhYmxlTGlzdEFkYXB0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFyZUFsbEl0ZW1zRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkKElJKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkSWQoSUkpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkVmlldyhJSVpMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7KUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGlsZHJlbkNvdW50KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbWJpbmVkQ2hpbGRJZChKSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tYmluZWRHcm91cElkKEopSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyb3VwKEkpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3JvdXBDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyb3VwSWQoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R3JvdXBWaWV3KElaTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL3ZpZXcvVmlld0dyb3VwOylMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzU3RhYmxlSWRzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDaGlsZFNlbGVjdGFibGUoSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW1wdHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdyb3VwQ29sbGFwc2VkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR3JvdXBFeHBhbmRlZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlckRhdGFTZXRPYnNlcnZlcihMYW5kcm9pZC9kYXRhYmFzZS9EYXRhU2V0T2JzZXJ2ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZ2lzdGVyRGF0YVNldE9ic2VydmVyKExhbmRyb2lkL2RhdGFiYXNlL0RhdGFTZXRPYnNlcnZlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0V4cGFuZGFibGVMaXN0VmlldyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9MaXN0VmlldyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbGxhcHNlR3JvdXAoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhwYW5kR3JvdXAoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhwYW5kR3JvdXAoSVopWiIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhwYW5kYWJsZUxpc3RBZGFwdGVyKClMYW5kcm9pZC93aWRnZXQvRXhwYW5kYWJsZUxpc3RBZGFwdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4cGFuZGFibGVMaXN0UG9zaXRpb24oSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxhdExpc3RQb3NpdGlvbihKKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrZWRQb3NpdGlvbkNoaWxkKEopSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2tlZFBvc2l0aW9uRm9yQ2hpbGQoSUkpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2tlZFBvc2l0aW9uRm9yR3JvdXAoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2VkUG9zaXRpb25Hcm91cChKKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrZWRQb3NpdGlvblR5cGUoSilJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VsZWN0ZWRJZCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGVkUG9zaXRpb24oKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0dyb3VwRXhwYW5kZWQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWRhcHRlcihMYW5kcm9pZC93aWRnZXQvRXhwYW5kYWJsZUxpc3RBZGFwdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hpbGREaXZpZGVyKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hpbGRJbmRpY2F0b3IoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGlsZEluZGljYXRvckJvdW5kcyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hpbGRJbmRpY2F0b3JCb3VuZHNSZWxhdGl2ZShJSSlWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcm91cEluZGljYXRvcihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluZGljYXRvckJvdW5kcyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5kaWNhdG9yQm91bmRzUmVsYXRpdmUoSUkpViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25DaGlsZENsaWNrTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L0V4cGFuZGFibGVMaXN0VmlldyRPbkNoaWxkQ2xpY2tMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uR3JvdXBDbGlja0xpc3RlbmVyKExhbmRyb2lkL3dpZGdldC9FeHBhbmRhYmxlTGlzdFZpZXckT25Hcm91cENsaWNrTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkdyb3VwQ29sbGFwc2VMaXN0ZW5lcihMYW5kcm9pZC93aWRnZXQvRXhwYW5kYWJsZUxpc3RWaWV3JE9uR3JvdXBDb2xsYXBzZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25Hcm91cEV4cGFuZExpc3RlbmVyKExhbmRyb2lkL3dpZGdldC9FeHBhbmRhYmxlTGlzdFZpZXckT25Hcm91cEV4cGFuZExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VsZWN0ZWRDaGlsZChJSVopWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbGVjdGVkR3JvdXAoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSElMRF9JTkRJQ0FUT1JfSU5IRVJJVCIvPgotCQk8ZmllbGQgbmFtZT0iUEFDS0VEX1BPU0lUSU9OX1RZUEVfQ0hJTEQiLz4KLQkJPGZpZWxkIG5hbWU9IlBBQ0tFRF9QT1NJVElPTl9UWVBFX0dST1VQIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQUNLRURfUE9TSVRJT05fVFlQRV9OVUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQUNLRURfUE9TSVRJT05fVkFMVUVfTlVMTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0V4cGFuZGFibGVMaXN0VmlldyRFeHBhbmRhYmxlTGlzdENvbnRleHRNZW51SW5mbyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9Db250ZXh0TWVudSRDb250ZXh0TWVudUluZm8iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9WaWV3O0pKKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImlkIi8+Ci0JCTxmaWVsZCBuYW1lPSJwYWNrZWRQb3NpdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0idGFyZ2V0VmlldyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0V4cGFuZGFibGVMaXN0VmlldyRPbkNoaWxkQ2xpY2tMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DaGlsZENsaWNrKExhbmRyb2lkL3dpZGdldC9FeHBhbmRhYmxlTGlzdFZpZXc7TGFuZHJvaWQvdmlldy9WaWV3O0lJSilaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvRXhwYW5kYWJsZUxpc3RWaWV3JE9uR3JvdXBDbGlja0xpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdyb3VwQ2xpY2soTGFuZHJvaWQvd2lkZ2V0L0V4cGFuZGFibGVMaXN0VmlldztMYW5kcm9pZC92aWV3L1ZpZXc7SUopWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0V4cGFuZGFibGVMaXN0VmlldyRPbkdyb3VwQ29sbGFwc2VMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Hcm91cENvbGxhcHNlKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0V4cGFuZGFibGVMaXN0VmlldyRPbkdyb3VwRXhwYW5kTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uR3JvdXBFeHBhbmQoSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvRmlsdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb252ZXJ0UmVzdWx0VG9TdHJpbmcoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbHRlcihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbHRlcihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC93aWRnZXQvRmlsdGVyJEZpbHRlckxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVyZm9ybUZpbHRlcmluZyhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGFuZHJvaWQvd2lkZ2V0L0ZpbHRlciRGaWx0ZXJSZXN1bHRzOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1Ymxpc2hSZXN1bHRzKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3dpZGdldC9GaWx0ZXIkRmlsdGVyUmVzdWx0czspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0ZpbHRlciRGaWx0ZXJMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25GaWx0ZXJDb21wbGV0ZShJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9GaWx0ZXIkRmlsdGVyUmVzdWx0cyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb3VudCIvPgotCQk8ZmllbGQgbmFtZT0idmFsdWVzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvRmlsdGVyUXVlcnlQcm92aWRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icnVuUXVlcnkoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9GaWx0ZXJhYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWx0ZXIoKUxhbmRyb2lkL3dpZGdldC9GaWx0ZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvRnJhbWVMYXlvdXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdHcm91cCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlRGVmYXVsdExheW91dFBhcmFtcygpTGFuZHJvaWQvd2lkZ2V0L0ZyYW1lTGF5b3V0JExheW91dFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZUxheW91dFBhcmFtcyhMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspTGFuZHJvaWQvd2lkZ2V0L0ZyYW1lTGF5b3V0JExheW91dFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25zaWRlckdvbmVDaGlsZHJlbldoZW5NZWFzdXJpbmcoKVoiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9yZWdyb3VuZCgpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiByZW1vdmVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcmVncm91bmRHcmF2aXR5KClJIiBzaW5jZT0iMTYiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9yZWdyb3VuZFRpbnRMaXN0KClMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDsiIHNpbmNlPSIyMSIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JlZ3JvdW5kVGludE1vZGUoKUxhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTsiIHNpbmNlPSIyMSIgcmVtb3ZlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZWFzdXJlQWxsQ2hpbGRyZW4oKVoiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvcmVncm91bmQoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9yZWdyb3VuZEdyYXZpdHkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9yZWdyb3VuZFRpbnRMaXN0KExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OylWIiBzaW5jZT0iMjEiIHJlbW92ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9yZWdyb3VuZFRpbnRNb2RlKExhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTspViIgc2luY2U9IjIxIiByZW1vdmVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1lYXN1cmVBbGxDaGlsZHJlbihaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9GcmFtZUxheW91dCRMYXlvdXRQYXJhbXMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRNYXJnaW5MYXlvdXRQYXJhbXMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJE1hcmdpbkxheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC93aWRnZXQvRnJhbWVMYXlvdXQkTGF5b3V0UGFyYW1zOylWIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlVOU1BFQ0lGSUVEX0dSQVZJVFkiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iZ3Jhdml0eSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0dhbGxlcnkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIxNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0Fic1NwaW5uZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L0dlc3R1cmVEZXRlY3RvciRPbkdlc3R1cmVMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFuaW1hdGlvbkR1cmF0aW9uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENhbGxiYWNrRHVyaW5nRmxpbmcoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R3Jhdml0eShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTcGFjaW5nKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVuc2VsZWN0ZWRBbHBoYShGKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9HYWxsZXJ5JExheW91dFBhcmFtcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9HcmlkTGF5b3V0IiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld0dyb3VwIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVEZWZhdWx0TGF5b3V0UGFyYW1zKClMYW5kcm9pZC93aWRnZXQvR3JpZExheW91dCRMYXlvdXRQYXJhbXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVMYXlvdXRQYXJhbXMoTGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KUxhbmRyb2lkL3dpZGdldC9HcmlkTGF5b3V0JExheW91dFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZUxheW91dFBhcmFtcyhMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7KUxhbmRyb2lkL3dpZGdldC9HcmlkTGF5b3V0JExheW91dFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGlnbm1lbnRNb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sdW1uQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmllbnRhdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvd0NvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlRGVmYXVsdE1hcmdpbnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbHVtbk9yZGVyUHJlc2VydmVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSb3dPcmRlclByZXNlcnZlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFsaWdubWVudE1vZGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sdW1uQ291bnQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sdW1uT3JkZXJQcmVzZXJ2ZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3JpZW50YXRpb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Um93Q291bnQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Um93T3JkZXJQcmVzZXJ2ZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXNlRGVmYXVsdE1hcmdpbnMoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3BlYyhJKUxhbmRyb2lkL3dpZGdldC9HcmlkTGF5b3V0JFNwZWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BlYyhJRilMYW5kcm9pZC93aWRnZXQvR3JpZExheW91dCRTcGVjOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3BlYyhJSSlMYW5kcm9pZC93aWRnZXQvR3JpZExheW91dCRTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9InNwZWMoSUlGKUxhbmRyb2lkL3dpZGdldC9HcmlkTGF5b3V0JFNwZWM7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGVjKElJTGFuZHJvaWQvd2lkZ2V0L0dyaWRMYXlvdXQkQWxpZ25tZW50OylMYW5kcm9pZC93aWRnZXQvR3JpZExheW91dCRTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9InNwZWMoSUlMYW5kcm9pZC93aWRnZXQvR3JpZExheW91dCRBbGlnbm1lbnQ7RilMYW5kcm9pZC93aWRnZXQvR3JpZExheW91dCRTcGVjOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3BlYyhJTGFuZHJvaWQvd2lkZ2V0L0dyaWRMYXlvdXQkQWxpZ25tZW50OylMYW5kcm9pZC93aWRnZXQvR3JpZExheW91dCRTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9InNwZWMoSUxhbmRyb2lkL3dpZGdldC9HcmlkTGF5b3V0JEFsaWdubWVudDtGKUxhbmRyb2lkL3dpZGdldC9HcmlkTGF5b3V0JFNwZWM7IiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkFMSUdOX0JPVU5EUyIvPgotCQk8ZmllbGQgbmFtZT0iQUxJR05fTUFSR0lOUyIvPgotCQk8ZmllbGQgbmFtZT0iQkFTRUxJTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkJPVFRPTSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkQiIHNpbmNlPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iRklMTCIvPgotCQk8ZmllbGQgbmFtZT0iSE9SSVpPTlRBTCIvPgotCQk8ZmllbGQgbmFtZT0iTEVGVCIvPgotCQk8ZmllbGQgbmFtZT0iUklHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVJUIiBzaW5jZT0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlRPUCIvPgotCQk8ZmllbGQgbmFtZT0iVU5ERUZJTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJWRVJUSUNBTCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0dyaWRMYXlvdXQkQWxpZ25tZW50IiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvR3JpZExheW91dCRMYXlvdXRQYXJhbXMiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTWFyZ2luTGF5b3V0UGFyYW1zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTWFyZ2luTGF5b3V0UGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3dpZGdldC9HcmlkTGF5b3V0JExheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC93aWRnZXQvR3JpZExheW91dCRTcGVjO0xhbmRyb2lkL3dpZGdldC9HcmlkTGF5b3V0JFNwZWM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcmF2aXR5KEkpViIvPgotCQk8ZmllbGQgbmFtZT0iY29sdW1uU3BlYyIvPgotCQk8ZmllbGQgbmFtZT0icm93U3BlYyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0dyaWRMYXlvdXQkU3BlYyIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWklJTGFuZHJvaWQvd2lkZ2V0L0dyaWRMYXlvdXQkQWxpZ25tZW50O0YpViIgc2luY2U9IjI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvR3JpZFZpZXciIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvQWJzTGlzdFZpZXciLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBZGFwdGVyKClMYW5kcm9pZC93aWRnZXQvTGlzdEFkYXB0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sdW1uV2lkdGgoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyYXZpdHkoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvcml6b250YWxTcGFjaW5nKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1Db2x1bW5zKClJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXF1ZXN0ZWRDb2x1bW5XaWR0aCgpSSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVxdWVzdGVkSG9yaXpvbnRhbFNwYWNpbmcoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmV0Y2hNb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVydGljYWxTcGFjaW5nKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBZGFwdGVyKExhbmRyb2lkL3dpZGdldC9MaXN0QWRhcHRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbHVtbldpZHRoKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyYXZpdHkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG9yaXpvbnRhbFNwYWNpbmcoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TnVtQ29sdW1ucyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdHJldGNoTW9kZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWZXJ0aWNhbFNwYWNpbmcoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic21vb3RoU2Nyb2xsQnlPZmZzZXQoSSlWIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVE9fRklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19TVFJFVENIIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJFVENIX0NPTFVNTl9XSURUSCIvPgotCQk8ZmllbGQgbmFtZT0iU1RSRVRDSF9TUEFDSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJFVENIX1NQQUNJTkdfVU5JRk9STSIgc2luY2U9IjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9IZWFkZXJWaWV3TGlzdEFkYXB0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3dpZGdldC9GaWx0ZXJhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1dyYXBwZXJMaXN0QWRhcHRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0FycmF5TGlzdDtMamF2YS91dGlsL0FycmF5TGlzdDtMYW5kcm9pZC93aWRnZXQvTGlzdEFkYXB0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb290ZXJzQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWFkZXJzQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVGb290ZXIoTGFuZHJvaWQvdmlldy9WaWV3OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlSGVhZGVyKExhbmRyb2lkL3ZpZXcvVmlldzspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0hldGVyb2dlbmVvdXNFeHBhbmRhYmxlTGlzdCIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hpbGRUeXBlKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGlsZFR5cGVDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyb3VwVHlwZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcm91cFR5cGVDb3VudCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0hvcml6b250YWxTY3JvbGxWaWV3IiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0ZyYW1lTGF5b3V0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXJyb3dTY3JvbGwoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcHV0ZVNjcm9sbERlbHRhVG9HZXRDaGlsZFJlY3RPblNjcmVlbihMYW5kcm9pZC9ncmFwaGljcy9SZWN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZUtleUV2ZW50KExhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbGluZyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmdWxsU2Nyb2xsKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFNjcm9sbEFtb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmlsbFZpZXdwb3J0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTbW9vdGhTY3JvbGxpbmdFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFnZVNjcm9sbChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaWxsVmlld3BvcnQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U21vb3RoU2Nyb2xsaW5nRW5hYmxlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzbW9vdGhTY3JvbGxCeShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic21vb3RoU2Nyb2xsVG8oSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0ltYWdlQnV0dG9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0ltYWdlVmlldyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0ltYWdlU3dpdGNoZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvVmlld1N3aXRjaGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbWFnZURyYXdhYmxlKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW1hZ2VSZXNvdXJjZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbWFnZVVSSShMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvSW1hZ2VWaWV3IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJDb2xvckZpbHRlcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFkanVzdFZpZXdCb3VuZHMoKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhc2VsaW5lQWxpZ25Cb3R0b20oKVoiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbG9yRmlsdGVyKClMYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlcjsiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENyb3BUb1BhZGRpbmcoKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyYXdhYmxlKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbWFnZUFscGhhKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbWFnZU1hdHJpeCgpTGFuZHJvaWQvZ3JhcGhpY3MvTWF0cml4OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEltYWdlVGludExpc3QoKUxhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1hZ2VUaW50TW9kZSgpTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4SGVpZ2h0KClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhXaWR0aCgpSSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NhbGVUeXBlKClMYW5kcm9pZC93aWRnZXQvSW1hZ2VWaWV3JFNjYWxlVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBZGp1c3RWaWV3Qm91bmRzKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFscGhhKEkpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCYXNlbGluZShJKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJhc2VsaW5lQWxpZ25Cb3R0b20oWilWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2xvckZpbHRlcihJKVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sb3JGaWx0ZXIoSUxhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbG9yRmlsdGVyKExhbmRyb2lkL2dyYXBoaWNzL0NvbG9yRmlsdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3JvcFRvUGFkZGluZyhaKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZyYW1lKElJSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltYWdlQWxwaGEoSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbWFnZUJpdG1hcChMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbWFnZURyYXdhYmxlKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW1hZ2VJY29uKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltYWdlTGV2ZWwoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW1hZ2VNYXRyaXgoTGFuZHJvaWQvZ3JhcGhpY3MvTWF0cml4OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW1hZ2VSZXNvdXJjZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbWFnZVN0YXRlKFtJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW1hZ2VUaW50TGlzdChMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW1hZ2VUaW50TW9kZShMYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmJE1vZGU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltYWdlVVJJKExhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhIZWlnaHQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4V2lkdGgoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2NhbGVUeXBlKExhbmRyb2lkL3dpZGdldC9JbWFnZVZpZXckU2NhbGVUeXBlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvSW1hZ2VWaWV3JFNjYWxlVHlwZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxhbmRyb2lkL3dpZGdldC9JbWFnZVZpZXckU2NhbGVUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xhbmRyb2lkL3dpZGdldC9JbWFnZVZpZXckU2NhbGVUeXBlOyIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5URVJfQ1JPUCIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVEVSX0lOU0lERSIvPgotCQk8ZmllbGQgbmFtZT0iRklUX0NFTlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iRklUX0VORCIvPgotCQk8ZmllbGQgbmFtZT0iRklUX1NUQVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSVRfWFkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVFJJWCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0xpbmVhckxheW91dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld0dyb3VwIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZURlZmF1bHRMYXlvdXRQYXJhbXMoKUxhbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQkTGF5b3V0UGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlTGF5b3V0UGFyYW1zKExhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylMYW5kcm9pZC93aWRnZXQvTGluZWFyTGF5b3V0JExheW91dFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZUxheW91dFBhcmFtcyhMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7KUxhbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQkTGF5b3V0UGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhc2VsaW5lQWxpZ25lZENoaWxkSW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXZpZGVyRHJhd2FibGUoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGl2aWRlclBhZGRpbmcoKUkiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyYXZpdHkoKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yaWVudGF0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvd0RpdmlkZXJzKClJIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWlnaHRTdW0oKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Jhc2VsaW5lQWxpZ25lZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTWVhc3VyZVdpdGhMYXJnZXN0Q2hpbGRFbmFibGVkKClaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCYXNlbGluZUFsaWduZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmFzZWxpbmVBbGlnbmVkQ2hpbGRJbmRleChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaXZpZGVyRHJhd2FibGUoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpdmlkZXJQYWRkaW5nKEkpViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R3Jhdml0eShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIb3Jpem9udGFsR3Jhdml0eShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNZWFzdXJlV2l0aExhcmdlc3RDaGlsZEVuYWJsZWQoWilWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcmllbnRhdGlvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG93RGl2aWRlcnMoSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWZXJ0aWNhbEdyYXZpdHkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2VpZ2h0U3VtKEYpViIvPgotCQk8ZmllbGQgbmFtZT0iSE9SSVpPTlRBTCIvPgotCQk8ZmllbGQgbmFtZT0iU0hPV19ESVZJREVSX0JFR0lOTklORyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9XX0RJVklERVJfRU5EIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1dfRElWSURFUl9NSURETEUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iU0hPV19ESVZJREVSX05PTkUiIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iVkVSVElDQUwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQkTGF5b3V0UGFyYW1zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTWFyZ2luTGF5b3V0UGFyYW1zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRNYXJnaW5MYXlvdXRQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvd2lkZ2V0L0xpbmVhckxheW91dCRMYXlvdXRQYXJhbXM7KVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImRlYnVnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9ImdyYXZpdHkiLz4KLQkJPGZpZWxkIG5hbWU9IndlaWdodCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0xpc3RBZGFwdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvQWRhcHRlciIvPgotCQk8bWV0aG9kIG5hbWU9ImFyZUFsbEl0ZW1zRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5hYmxlZChJKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9MaXN0UG9wdXBXaW5kb3ciIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJMaXN0U2VsZWN0aW9uKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRHJhZ1RvT3Blbkxpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlldzspTGFuZHJvaWQvdmlldy9WaWV3JE9uVG91Y2hMaXN0ZW5lcjsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc21pc3MoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmNob3JWaWV3KClMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5pbWF0aW9uU3R5bGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYWNrZ3JvdW5kKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3Jpem9udGFsT2Zmc2V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRNZXRob2RNb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGlzdFZpZXcoKUxhbmRyb2lkL3dpZGdldC9MaXN0VmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9tcHRQb3NpdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGVkSXRlbSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VsZWN0ZWRJdGVtSWQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxlY3RlZEl0ZW1Qb3NpdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbGVjdGVkVmlldygpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvZnRJbnB1dE1vZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZXJ0aWNhbE9mZnNldCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdpZHRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbnB1dE1ldGhvZE5vdE5lZWRlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTW9kYWwoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Nob3dpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbktleURvd24oSUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbktleVByZUltZShJTGFuZHJvaWQvdmlldy9LZXlFdmVudDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uS2V5VXAoSUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJmb3JtSXRlbUNsaWNrKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBvc3RTaG93KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWRhcHRlcihMYW5kcm9pZC93aWRnZXQvTGlzdEFkYXB0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbmNob3JWaWV3KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFuaW1hdGlvblN0eWxlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJhY2tncm91bmREcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRXaWR0aChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREcm9wRG93bkdyYXZpdHkoSSlWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIZWlnaHQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG9yaXpvbnRhbE9mZnNldChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dE1ldGhvZE1vZGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGlzdFNlbGVjdG9yKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TW9kYWwoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25EaXNtaXNzTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L1BvcHVwV2luZG93JE9uRGlzbWlzc0xpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25JdGVtQ2xpY2tMaXN0ZW5lcihMYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXckT25JdGVtQ2xpY2tMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uSXRlbVNlbGVjdGVkTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3JE9uSXRlbVNlbGVjdGVkTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9tcHRQb3NpdGlvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9tcHRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbGVjdGlvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTb2Z0SW5wdXRNb2RlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZlcnRpY2FsT2Zmc2V0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdpZHRoKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdpbmRvd0xheW91dFR5cGUoSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlBVVF9NRVRIT0RfRlJPTV9GT0NVU0FCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IklOUFVUX01FVEhPRF9ORUVERUQiLz4KLQkJPGZpZWxkIG5hbWU9IklOUFVUX01FVEhPRF9OT1RfTkVFREVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRDSF9QQVJFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlBPU0lUSU9OX1BST01QVF9BQk9WRSIvPgotCQk8ZmllbGQgbmFtZT0iUE9TSVRJT05fUFJPTVBUX0JFTE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJXUkFQX0NPTlRFTlQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9MaXN0VmlldyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BYnNMaXN0VmlldyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEZvb3RlclZpZXcoTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRm9vdGVyVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7TGphdmEvbGFuZy9PYmplY3Q7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSGVhZGVyVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRIZWFkZXJWaWV3KExhbmRyb2lkL3ZpZXcvVmlldztMamF2YS9sYW5nL09iamVjdDtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcmVGb290ZXJEaXZpZGVyc0VuYWJsZWQoKVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFyZUhlYWRlckRpdmlkZXJzRW5hYmxlZCgpWiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJDaG9pY2VzKClWIiByZW1vdmVkPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRWaWV3VHJhdmVyc2FsKEkpTGFuZHJvaWQvdmlldy9WaWV3OyIgcmVtb3ZlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kVmlld1dpdGhUYWdUcmF2ZXJzYWwoTGphdmEvbGFuZy9PYmplY3Q7KUxhbmRyb2lkL3ZpZXcvVmlldzsiIHJlbW92ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWRhcHRlcigpTGFuZHJvaWQvd2lkZ2V0L0xpc3RBZGFwdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoZWNrSXRlbUlkcygpW0oiIHNpbmNlPSI0IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoZWNrZWRJdGVtSWRzKClbSiIgc2luY2U9IjgiIHJlbW92ZWQ9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hlY2tlZEl0ZW1Qb3NpdGlvbigpSSIgcmVtb3ZlZD0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGVja2VkSXRlbVBvc2l0aW9ucygpTGFuZHJvaWQvdXRpbC9TcGFyc2VCb29sZWFuQXJyYXk7IiByZW1vdmVkPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENob2ljZU1vZGUoKUkiIHJlbW92ZWQ9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGl2aWRlcigpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGl2aWRlckhlaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvb3RlclZpZXdzQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWFkZXJWaWV3c0NvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SXRlbXNDYW5Gb2N1cygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFNjcm9sbEFtb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE92ZXJzY3JvbGxGb290ZXIoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdmVyc2Nyb2xsSGVhZGVyKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJdGVtQ2hlY2tlZChJKVoiIHJlbW92ZWQ9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlRm9vdGVyVmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVIZWFkZXJWaWV3KExhbmRyb2lkL3ZpZXcvVmlldzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFkYXB0ZXIoTGFuZHJvaWQvd2lkZ2V0L0xpc3RBZGFwdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hvaWNlTW9kZShJKVYiIHJlbW92ZWQ9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGl2aWRlcihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpdmlkZXJIZWlnaHQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9vdGVyRGl2aWRlcnNFbmFibGVkKFopViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIZWFkZXJEaXZpZGVyc0VuYWJsZWQoWilWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEl0ZW1DaGVja2VkKElaKVYiIHJlbW92ZWQ9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SXRlbXNDYW5Gb2N1cyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdmVyc2Nyb2xsRm9vdGVyKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE92ZXJzY3JvbGxIZWFkZXIoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VsZWN0aW9uQWZ0ZXJIZWFkZXJWaWV3KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VsZWN0aW9uRnJvbVRvcChJSSlWIiByZW1vdmVkPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNtb290aFNjcm9sbEJ5T2Zmc2V0KEkpViIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSE9JQ0VfTU9ERV9NVUxUSVBMRSIgcmVtb3ZlZD0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkNIT0lDRV9NT0RFX05PTkUiIHJlbW92ZWQ9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSE9JQ0VfTU9ERV9TSU5HTEUiIHJlbW92ZWQ9IjExIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvTGlzdFZpZXckRml4ZWRWaWV3SW5mbyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3dpZGdldC9MaXN0VmlldzspViIvPgotCQk8ZmllbGQgbmFtZT0iZGF0YSIvPgotCQk8ZmllbGQgbmFtZT0iaXNTZWxlY3RhYmxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2aWV3Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvTWFnbmlmaWVyIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc21pc3MoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaWR0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFpvb20oKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93KEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9NZWRpYUNvbnRyb2xsZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvRnJhbWVMYXlvdXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGlkZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2hvd2luZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFuY2hvclZpZXcoTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWVkaWFQbGF5ZXIoTGFuZHJvaWQvd2lkZ2V0L01lZGlhQ29udHJvbGxlciRNZWRpYVBsYXllckNvbnRyb2w7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmV2TmV4dExpc3RlbmVycyhMYW5kcm9pZC92aWV3L1ZpZXckT25DbGlja0xpc3RlbmVyO0xhbmRyb2lkL3ZpZXcvVmlldyRPbkNsaWNrTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdyhJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9NZWRpYUNvbnRyb2xsZXIkTWVkaWFQbGF5ZXJDb250cm9sIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5QYXVzZSgpWiIgc2luY2U9IjUiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5TZWVrQmFja3dhcmQoKVoiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuU2Vla0ZvcndhcmQoKVoiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXVkaW9TZXNzaW9uSWQoKUkiIHNpbmNlPSIxOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1ZmZlclBlcmNlbnRhZ2UoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50UG9zaXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREdXJhdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGxheWluZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhdXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2Vla1RvKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvTXVsdGlBdXRvQ29tcGxldGVUZXh0VmlldyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BdXRvQ29tcGxldGVUZXh0VmlldyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InBlcmZvcm1GaWx0ZXJpbmcoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUb2tlbml6ZXIoTGFuZHJvaWQvd2lkZ2V0L011bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXckVG9rZW5pemVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvTXVsdGlBdXRvQ29tcGxldGVUZXh0VmlldyRDb21tYVRva2VuaXplciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L011bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXckVG9rZW5pemVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvTXVsdGlBdXRvQ29tcGxldGVUZXh0VmlldyRUb2tlbml6ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRUb2tlbkVuZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kVG9rZW5TdGFydChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXJtaW5hdGVUb2tlbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvTnVtYmVyUGlja2VyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5ZWRWYWx1ZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhWYWx1ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pblZhbHVlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXcmFwU2VsZWN0b3JXaGVlbCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXllZFZhbHVlcyhbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb3JtYXR0ZXIoTGFuZHJvaWQvd2lkZ2V0L051bWJlclBpY2tlciRGb3JtYXR0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhWYWx1ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNaW5WYWx1ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkxvbmdQcmVzc1VwZGF0ZUludGVydmFsKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uU2Nyb2xsTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L051bWJlclBpY2tlciRPblNjcm9sbExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25WYWx1ZUNoYW5nZWRMaXN0ZW5lcihMYW5kcm9pZC93aWRnZXQvTnVtYmVyUGlja2VyJE9uVmFsdWVDaGFuZ2VMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZhbHVlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdyYXBTZWxlY3RvcldoZWVsKFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L051bWJlclBpY2tlciRGb3JtYXR0ZXIiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXQoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9OdW1iZXJQaWNrZXIkT25TY3JvbGxMaXN0ZW5lciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2Nyb2xsU3RhdGVDaGFuZ2UoTGFuZHJvaWQvd2lkZ2V0L051bWJlclBpY2tlcjtJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUk9MTF9TVEFURV9GTElORyIvPgotCQk8ZmllbGQgbmFtZT0iU0NST0xMX1NUQVRFX0lETEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNDUk9MTF9TVEFURV9UT1VDSF9TQ1JPTEwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9OdW1iZXJQaWNrZXIkT25WYWx1ZUNoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25WYWx1ZUNoYW5nZShMYW5kcm9pZC93aWRnZXQvTnVtYmVyUGlja2VyO0lJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9PdmVyU2Nyb2xsZXIiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0ludGVycG9sYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdmlldy9hbmltYXRpb24vSW50ZXJwb2xhdG9yO0ZGKVYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9JbnRlcnBvbGF0b3I7RkZaKVYiIHNpbmNlPSIxMSIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhYm9ydEFuaW1hdGlvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXB1dGVTY3JvbGxPZmZzZXQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbGluZyhJSUlJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmxpbmcoSUlJSUlJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yY2VGaW5pc2hlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyVmVsb2NpdHkoKUYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJYKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VyclkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaW5hbFgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaW5hbFkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydFgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydFkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZpbmlzaGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPdmVyU2Nyb2xsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlIb3Jpem9udGFsRWRnZVJlYWNoZWQoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlWZXJ0aWNhbEVkZ2VSZWFjaGVkKElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RnJpY3Rpb24oRilWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcHJpbmdCYWNrKElJSUlJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRTY3JvbGwoSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRTY3JvbGwoSUlJSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1BvcHVwTWVudSIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC92aWV3L1ZpZXc7SSlWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3ZpZXcvVmlldztJSUkpViIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzbWlzcygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyYWdUb09wZW5MaXN0ZW5lcigpTGFuZHJvaWQvdmlldy9WaWV3JE9uVG91Y2hMaXN0ZW5lcjsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyYXZpdHkoKUkiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lbnUoKUxhbmRyb2lkL3ZpZXcvTWVudTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZW51SW5mbGF0ZXIoKUxhbmRyb2lkL3ZpZXcvTWVudUluZmxhdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImluZmxhdGUoSSlWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcmF2aXR5KEkpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25EaXNtaXNzTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L1BvcHVwTWVudSRPbkRpc21pc3NMaXN0ZW5lcjspViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25NZW51SXRlbUNsaWNrTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L1BvcHVwTWVudSRPbk1lbnVJdGVtQ2xpY2tMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3coKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9Qb3B1cE1lbnUkT25EaXNtaXNzTGlzdGVuZXIiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRpc21pc3MoTGFuZHJvaWQvd2lkZ2V0L1BvcHVwTWVudTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1BvcHVwTWVudSRPbk1lbnVJdGVtQ2xpY2tMaXN0ZW5lciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTWVudUl0ZW1DbGljayhMYW5kcm9pZC92aWV3L01lbnVJdGVtOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvUG9wdXBXaW5kb3ciIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXc7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXc7SUlaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNtaXNzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5pbWF0aW9uU3R5bGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYWNrZ3JvdW5kKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50VmlldygpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVsZXZhdGlvbigpRiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW50ZXJUcmFuc2l0aW9uKClMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeGl0VHJhbnNpdGlvbigpTGFuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGVpZ2h0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRNZXRob2RNb2RlKClJIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heEF2YWlsYWJsZUhlaWdodChMYW5kcm9pZC92aWV3L1ZpZXc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhBdmFpbGFibGVIZWlnaHQoTGFuZHJvaWQvdmlldy9WaWV3O0kpSSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhBdmFpbGFibGVIZWlnaHQoTGFuZHJvaWQvdmlldy9WaWV3O0laKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE92ZXJsYXBBbmNob3IoKVoiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvZnRJbnB1dE1vZGUoKUkiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXaW5kb3dMYXlvdXRUeXBlKClJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Fib3ZlQW5jaG9yKClaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXR0YWNoZWRJbkRlY29yKClaIiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NsaXBwaW5nRW5hYmxlZCgpWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZvY3VzYWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT3V0c2lkZVRvdWNoYWJsZSgpWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Nob3dpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NwbGl0VG91Y2hFbmFibGVkKClaIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RvdWNoYWJsZSgpWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbmltYXRpb25TdHlsZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdHRhY2hlZEluRGVjb3IoWilWIiBzaW5jZT0iMjIiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCYWNrZ3JvdW5kRHJhd2FibGUoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGlwcGluZ0VuYWJsZWQoWilWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRWaWV3KExhbmRyb2lkL3ZpZXcvVmlldzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVsZXZhdGlvbihGKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVudGVyVHJhbnNpdGlvbihMYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb247KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4aXRUcmFuc2l0aW9uKExhbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbjspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9jdXNhYmxlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhlaWdodChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJZ25vcmVDaGVla1ByZXNzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5wdXRNZXRob2RNb2RlKEkpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkRpc21pc3NMaXN0ZW5lcihMYW5kcm9pZC93aWRnZXQvUG9wdXBXaW5kb3ckT25EaXNtaXNzTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdXRzaWRlVG91Y2hhYmxlKFopViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdmVybGFwQW5jaG9yKFopViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U29mdElucHV0TW9kZShJKVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3BsaXRUb3VjaEVuYWJsZWQoWilWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUb3VjaEludGVyY2VwdG9yKExhbmRyb2lkL3ZpZXcvVmlldyRPblRvdWNoTGlzdGVuZXI7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VG91Y2hhYmxlKFopViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXaWR0aChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXaW5kb3dMYXlvdXRNb2RlKElJKVYiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdpbmRvd0xheW91dFR5cGUoSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93QXNEcm9wRG93bihMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93QXNEcm9wRG93bihMYW5kcm9pZC92aWV3L1ZpZXc7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dBc0Ryb3BEb3duKExhbmRyb2lkL3ZpZXcvVmlldztJSUkpViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd0F0TG9jYXRpb24oTGFuZHJvaWQvdmlldy9WaWV3O0lJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlKClWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZShJSSlWIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZShJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoSUlJSVopViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoTGFuZHJvaWQvdmlldy9WaWV3O0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoTGFuZHJvaWQvdmlldy9WaWV3O0lJSUkpViIvPgotCQk8ZmllbGQgbmFtZT0iSU5QVVRfTUVUSE9EX0ZST01fRk9DVVNBQkxFIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iSU5QVVRfTUVUSE9EX05FRURFRCIgc2luY2U9IjMiLz4KLQkJPGZpZWxkIG5hbWU9IklOUFVUX01FVEhPRF9OT1RfTkVFREVEIiBzaW5jZT0iMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1BvcHVwV2luZG93JE9uRGlzbWlzc0xpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRpc21pc3MoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9Qcm9ncmVzc0JhciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZGV0ZXJtaW5hdGVEcmF3YWJsZSgpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXRlcm1pbmF0ZVRpbnRMaXN0KClMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZGV0ZXJtaW5hdGVUaW50TW9kZSgpTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZXJwb2xhdG9yKClMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9JbnRlcnBvbGF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9ncmVzcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb2dyZXNzQmFja2dyb3VuZFRpbnRMaXN0KClMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb2dyZXNzQmFja2dyb3VuZFRpbnRNb2RlKClMYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmJE1vZGU7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9ncmVzc0RyYXdhYmxlKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9ncmVzc1RpbnRMaXN0KClMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb2dyZXNzVGludE1vZGUoKUxhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlY29uZGFyeVByb2dyZXNzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vjb25kYXJ5UHJvZ3Jlc3NUaW50TGlzdCgpTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWNvbmRhcnlQcm9ncmVzc1RpbnRNb2RlKClMYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmJE1vZGU7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmNyZW1lbnRQcm9ncmVzc0J5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImluY3JlbWVudFNlY29uZGFyeVByb2dyZXNzQnkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBbmltYXRpbmcoKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5kZXRlcm1pbmF0ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluZGV0ZXJtaW5hdGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5kZXRlcm1pbmF0ZURyYXdhYmxlKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5kZXRlcm1pbmF0ZURyYXdhYmxlVGlsZWQoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluZGV0ZXJtaW5hdGVUaW50TGlzdChMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5kZXRlcm1pbmF0ZVRpbnRNb2RlKExhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTspViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZXJwb2xhdG9yKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlcnBvbGF0b3IoTGFuZHJvaWQvdmlldy9hbmltYXRpb24vSW50ZXJwb2xhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbihJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb2dyZXNzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb2dyZXNzKElaKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb2dyZXNzQmFja2dyb3VuZFRpbnRMaXN0KExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9ncmVzc0JhY2tncm91bmRUaW50TW9kZShMYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmJE1vZGU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb2dyZXNzRHJhd2FibGUoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9ncmVzc0RyYXdhYmxlVGlsZWQoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb2dyZXNzVGludExpc3QoTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb2dyZXNzVGludE1vZGUoTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWNvbmRhcnlQcm9ncmVzcyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWNvbmRhcnlQcm9ncmVzc1RpbnRMaXN0KExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OylWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWNvbmRhcnlQcm9ncmVzc1RpbnRNb2RlKExhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTspViIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvUXVpY2tDb250YWN0QmFkZ2UiIHNpbmNlPSI1Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvSW1hZ2VWaWV3Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3JE9uQ2xpY2tMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2lnbkNvbnRhY3RGcm9tRW1haWwoTGphdmEvbGFuZy9TdHJpbmc7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzaWduQ29udGFjdEZyb21FbWFpbChMamF2YS9sYW5nL1N0cmluZztaTGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iMTgiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NpZ25Db250YWN0RnJvbVBob25lKExqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2lnbkNvbnRhY3RGcm9tUGhvbmUoTGphdmEvbGFuZy9TdHJpbmc7WkxhbmRyb2lkL29zL0J1bmRsZTspViIgc2luY2U9IjE4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzaWduQ29udGFjdFVyaShMYW5kcm9pZC9uZXQvVXJpOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXhjbHVkZU1pbWVzKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltYWdlVG9EZWZhdWx0KClWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNb2RlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE92ZXJsYXkoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByaW9yaXRpemVkTWltZVR5cGUoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMyIvPgotCQk8ZmllbGQgbmFtZT0ibUV4Y2x1ZGVNaW1lcyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1JhZGlvQnV0dG9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0NvbXBvdW5kQnV0dG9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvUmFkaW9Hcm91cCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQ2hlY2soKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZUxheW91dFBhcmFtcyhMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspTGFuZHJvaWQvd2lkZ2V0L1JhZGlvR3JvdXAkTGF5b3V0UGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoZWNrZWRSYWRpb0J1dHRvbklkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25DaGVja2VkQ2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L1JhZGlvR3JvdXAkT25DaGVja2VkQ2hhbmdlTGlzdGVuZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9SYWRpb0dyb3VwJExheW91dFBhcmFtcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQkTGF5b3V0UGFyYW1zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRNYXJnaW5MYXlvdXRQYXJhbXM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9SYWRpb0dyb3VwJE9uQ2hlY2tlZENoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkNoZWNrZWRDaGFuZ2VkKExhbmRyb2lkL3dpZGdldC9SYWRpb0dyb3VwO0kpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1JhdGluZ0JhciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BYnNTZWVrQmFyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtU3RhcnMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPblJhdGluZ0JhckNoYW5nZUxpc3RlbmVyKClMYW5kcm9pZC93aWRnZXQvUmF0aW5nQmFyJE9uUmF0aW5nQmFyQ2hhbmdlTGlzdGVuZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmF0aW5nKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RlcFNpemUoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0luZGljYXRvcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldElzSW5kaWNhdG9yKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE51bVN0YXJzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uUmF0aW5nQmFyQ2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L1JhdGluZ0JhciRPblJhdGluZ0JhckNoYW5nZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmF0aW5nKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0ZXBTaXplKEYpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1JhdGluZ0JhciRPblJhdGluZ0JhckNoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblJhdGluZ0NoYW5nZWQoTGFuZHJvaWQvd2lkZ2V0L1JhdGluZ0JhcjtGWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvUmVsYXRpdmVMYXlvdXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdHcm91cCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlTGF5b3V0UGFyYW1zKExhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylMYW5kcm9pZC93aWRnZXQvUmVsYXRpdmVMYXlvdXQkTGF5b3V0UGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyYXZpdHkoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyYXZpdHkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG9yaXpvbnRhbEdyYXZpdHkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWdub3JlR3Jhdml0eShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWZXJ0aWNhbEdyYXZpdHkoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQk9WRSIvPgotCQk8ZmllbGQgbmFtZT0iQUxJR05fQkFTRUxJTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkFMSUdOX0JPVFRPTSIvPgotCQk8ZmllbGQgbmFtZT0iQUxJR05fRU5EIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkFMSUdOX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IkFMSUdOX1BBUkVOVF9CT1RUT00iLz4KLQkJPGZpZWxkIG5hbWU9IkFMSUdOX1BBUkVOVF9FTkQiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iQUxJR05fUEFSRU5UX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IkFMSUdOX1BBUkVOVF9SSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iQUxJR05fUEFSRU5UX1NUQVJUIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IkFMSUdOX1BBUkVOVF9UT1AiLz4KLQkJPGZpZWxkIG5hbWU9IkFMSUdOX1JJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTElHTl9TVEFSVCIgc2luY2U9IjE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTElHTl9UT1AiLz4KLQkJPGZpZWxkIG5hbWU9IkJFTE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5URVJfSE9SSVpPTlRBTCIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVEVSX0lOX1BBUkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVEVSX1ZFUlRJQ0FMIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRfT0YiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iTEVGVF9PRiIvPgotCQk8ZmllbGQgbmFtZT0iUklHSFRfT0YiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVJUX09GIiBzaW5jZT0iMTciLz4KLQkJPGZpZWxkIG5hbWU9IlRSVUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9SZWxhdGl2ZUxheW91dCRMYXlvdXRQYXJhbXMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRNYXJnaW5MYXlvdXRQYXJhbXMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJE1hcmdpbkxheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC93aWRnZXQvUmVsYXRpdmVMYXlvdXQkTGF5b3V0UGFyYW1zOylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSdWxlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFJ1bGUoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlYnVnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSdWxlKEkpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnVsZXMoKVtJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUnVsZShJKVYiIHNpbmNlPSIxNyIvPgotCQk8ZmllbGQgbmFtZT0iYWxpZ25XaXRoUGFyZW50Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3MiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL29zL1BhcmNlbGFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyJEZpbHRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvd2lkZ2V0L1JlbW90ZVZpZXdzOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvd2lkZ2V0L1JlbW90ZVZpZXdzO0xhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3czspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFZpZXcoSUxhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3czspViIgc2luY2U9IjciLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7KUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGFuZHJvaWQvd2lkZ2V0L1JlbW90ZVZpZXdzOyIgc2luY2U9IjkiIGRlcHJlY2F0ZWQ9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5b3V0SWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFwcGx5KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBbGxWaWV3cyhJKVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWNjZXNzaWJpbGl0eVRyYXZlcnNhbEFmdGVyKElJKVYiIHNpbmNlPSIyMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjY2Vzc2liaWxpdHlUcmF2ZXJzYWxCZWZvcmUoSUkpViIgc2luY2U9IjIyIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qml0bWFwKElMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9ncmFwaGljcy9CaXRtYXA7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qm9vbGVhbihJTGphdmEvbGFuZy9TdHJpbmc7WilWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJ1bmRsZShJTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvQnVuZGxlOylWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJ5dGUoSUxqYXZhL2xhbmcvU3RyaW5nO0IpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGFyKElMamF2YS9sYW5nL1N0cmluZztDKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hhclNlcXVlbmNlKElMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaHJvbm9tZXRlcihJSkxqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENocm9ub21ldGVyQ291bnREb3duKElaKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnREZXNjcmlwdGlvbihJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiIHNpbmNlPSIxNSIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXllZENoaWxkKElJKVYiIHNpbmNlPSIxMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldERvdWJsZShJTGphdmEvbGFuZy9TdHJpbmc7RClWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVtcHR5VmlldyhJSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGbG9hdChJTGphdmEvbGFuZy9TdHJpbmc7RilWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEljb24oSUxqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltYWdlVmlld0JpdG1hcChJTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltYWdlVmlld0ljb24oSUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb247KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltYWdlVmlld1Jlc291cmNlKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbWFnZVZpZXdVcmkoSUxhbmRyb2lkL25ldC9Vcmk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnQoSUxqYXZhL2xhbmcvU3RyaW5nO0kpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlbnQoSUxqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYWJlbEZvcihJSSlWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb25nKElMamF2YS9sYW5nL1N0cmluZztKKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25DbGlja0ZpbGxJbkludGVudChJTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uQ2xpY2tQZW5kaW5nSW50ZW50KElMYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudDspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQZW5kaW5nSW50ZW50VGVtcGxhdGUoSUxhbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50OylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9ncmVzc0JhcihJSUlaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWxhdGl2ZVNjcm9sbFBvc2l0aW9uKElJKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlbW90ZUFkYXB0ZXIoSUlMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIgc2luY2U9IjExIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlbW90ZUFkYXB0ZXIoSUxhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY3JvbGxQb3NpdGlvbihJSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG9ydChJTGphdmEvbGFuZy9TdHJpbmc7UylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cmluZyhJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dENvbG9yKElJKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dFZpZXdDb21wb3VuZERyYXdhYmxlcyhJSUlJSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0Vmlld0NvbXBvdW5kRHJhd2FibGVzUmVsYXRpdmUoSUlJSUkpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dFZpZXdUZXh0KElMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRWaWV3VGV4dFNpemUoSUlGKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVyaShJTGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvbmV0L1VyaTspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWV3UGFkZGluZyhJSUlJSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWV3VmlzaWJpbGl0eShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvd05leHQoSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93UHJldmlvdXMoSSlWIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3cyRBY3Rpb25FeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9FeGNlcHRpb247KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3MkUmVtb3RlVmlldyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3c1NlcnZpY2UiIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvYXBwL1NlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkdldFZpZXdGYWN0b3J5KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3NTZXJ2aWNlJFJlbW90ZVZpZXdzRmFjdG9yeTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3c1NlcnZpY2UkUmVtb3RlVmlld3NGYWN0b3J5IiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJdGVtSWQoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9hZGluZ1ZpZXcoKUxhbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3czsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaWV3QXQoSSlMYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vmlld1R5cGVDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1N0YWJsZUlkcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ3JlYXRlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25EYXRhU2V0Q2hhbmdlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRGVzdHJveSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1Jlc291cmNlQ3Vyc29yQWRhcHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9DdXJzb3JBZGFwdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJTGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtJKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtaKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHJvcERvd25WaWV3UmVzb3VyY2UoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Vmlld1Jlc291cmNlKEkpViIgc2luY2U9IjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9SZXNvdXJjZUN1cnNvclRyZWVBZGFwdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0N1cnNvclRyZWVBZGFwdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yO0lJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7SUlJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvU2Nyb2xsVmlldyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9GcmFtZUxheW91dCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFycm93U2Nyb2xsKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXB1dGVTY3JvbGxEZWx0YVRvR2V0Q2hpbGRSZWN0T25TY3JlZW4oTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWN1dGVLZXlFdmVudChMYW5kcm9pZC92aWV3L0tleUV2ZW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmxpbmcoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZnVsbFNjcm9sbChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhTY3JvbGxBbW91bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZpbGxWaWV3cG9ydCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU21vb3RoU2Nyb2xsaW5nRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhZ2VTY3JvbGwoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmlsbFZpZXdwb3J0KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNtb290aFNjcm9sbGluZ0VuYWJsZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic21vb3RoU2Nyb2xsQnkoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNtb290aFNjcm9sbFRvKElJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9TY3JvbGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdmlldy9hbmltYXRpb24vSW50ZXJwb2xhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9JbnRlcnBvbGF0b3I7WilWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJhYm9ydEFuaW1hdGlvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXB1dGVTY3JvbGxPZmZzZXQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHRlbmREdXJhdGlvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbGluZyhJSUlJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yY2VGaW5pc2hlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyVmVsb2NpdHkoKUYiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJYKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VyclkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREdXJhdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbmFsWCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbmFsWSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXJ0WCgpSSIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFydFkoKUkiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGaW5pc2hlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZpbmFsWChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaW5hbFkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RnJpY3Rpb24oRilWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFNjcm9sbChJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydFNjcm9sbChJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idGltZVBhc3NlZCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1NlYXJjaFZpZXciIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0xpbmVhckxheW91dCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvQ29sbGFwc2libGVBY3Rpb25WaWV3IiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEltZU9wdGlvbnMoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0VHlwZSgpSSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4V2lkdGgoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFF1ZXJ5KClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWVyeUhpbnQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VnZ2VzdGlvbnNBZGFwdGVyKClMYW5kcm9pZC93aWRnZXQvQ3Vyc29yQWRhcHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ljb25maWVkQnlEZWZhdWx0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJY29uaWZpZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1F1ZXJ5UmVmaW5lbWVudEVuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N1Ym1pdEJ1dHRvbkVuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJY29uaWZpZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWNvbmlmaWVkQnlEZWZhdWx0KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltZU9wdGlvbnMoSSlWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dFR5cGUoSSlWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhXaWR0aChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkNsb3NlTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L1NlYXJjaFZpZXckT25DbG9zZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25RdWVyeVRleHRGb2N1c0NoYW5nZUxpc3RlbmVyKExhbmRyb2lkL3ZpZXcvVmlldyRPbkZvY3VzQ2hhbmdlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPblF1ZXJ5VGV4dExpc3RlbmVyKExhbmRyb2lkL3dpZGdldC9TZWFyY2hWaWV3JE9uUXVlcnlUZXh0TGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPblNlYXJjaENsaWNrTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3JE9uQ2xpY2tMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uU3VnZ2VzdGlvbkxpc3RlbmVyKExhbmRyb2lkL3dpZGdldC9TZWFyY2hWaWV3JE9uU3VnZ2VzdGlvbkxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UXVlcnkoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UXVlcnlIaW50KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UXVlcnlSZWZpbmVtZW50RW5hYmxlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZWFyY2hhYmxlSW5mbyhMYW5kcm9pZC9hcHAvU2VhcmNoYWJsZUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdWJtaXRCdXR0b25FbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1Z2dlc3Rpb25zQWRhcHRlcihMYW5kcm9pZC93aWRnZXQvQ3Vyc29yQWRhcHRlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1NlYXJjaFZpZXckT25DbG9zZUxpc3RlbmVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DbG9zZSgpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1NlYXJjaFZpZXckT25RdWVyeVRleHRMaXN0ZW5lciIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uUXVlcnlUZXh0Q2hhbmdlKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25RdWVyeVRleHRTdWJtaXQoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9TZWFyY2hWaWV3JE9uU3VnZ2VzdGlvbkxpc3RlbmVyIiBzaW5jZT0iMTEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdWdnZXN0aW9uQ2xpY2soSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdWdnZXN0aW9uU2VsZWN0KEkpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1NlY3Rpb25JbmRleGVyIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3NpdGlvbkZvclNlY3Rpb24oSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VjdGlvbkZvclBvc2l0aW9uKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlY3Rpb25zKClbTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvU2Vla0JhciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BYnNTZWVrQmFyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25TZWVrQmFyQ2hhbmdlTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L1NlZWtCYXIkT25TZWVrQmFyQ2hhbmdlTGlzdGVuZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9TZWVrQmFyJE9uU2Vla0JhckNoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblByb2dyZXNzQ2hhbmdlZChMYW5kcm9pZC93aWRnZXQvU2Vla0JhcjtJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TdGFydFRyYWNraW5nVG91Y2goTGFuZHJvaWQvd2lkZ2V0L1NlZWtCYXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0b3BUcmFja2luZ1RvdWNoKExhbmRyb2lkL3dpZGdldC9TZWVrQmFyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvU2hhcmVBY3Rpb25Qcm92aWRlciIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L0FjdGlvblByb3ZpZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uU2hhcmVUYXJnZXRTZWxlY3RlZExpc3RlbmVyKExhbmRyb2lkL3dpZGdldC9TaGFyZUFjdGlvblByb3ZpZGVyJE9uU2hhcmVUYXJnZXRTZWxlY3RlZExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hhcmVIaXN0b3J5RmlsZU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaGFyZUludGVudChMYW5kcm9pZC9jb250ZW50L0ludGVudDspViIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9TSEFSRV9ISVNUT1JZX0ZJTEVfTkFNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1NoYXJlQWN0aW9uUHJvdmlkZXIkT25TaGFyZVRhcmdldFNlbGVjdGVkTGlzdGVuZXIiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNoYXJlVGFyZ2V0U2VsZWN0ZWQoTGFuZHJvaWQvd2lkZ2V0L1NoYXJlQWN0aW9uUHJvdmlkZXI7TGFuZHJvaWQvY29udGVudC9JbnRlbnQ7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9TaW1wbGVBZGFwdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0Jhc2VBZGFwdGVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0ZpbHRlcmFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvVGhlbWVkU3Bpbm5lckFkYXB0ZXIiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvdXRpbC9MaXN0O0lbTGphdmEvbGFuZy9TdHJpbmc7W0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZXdCaW5kZXIoKUxhbmRyb2lkL3dpZGdldC9TaW1wbGVBZGFwdGVyJFZpZXdCaW5kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHJvcERvd25WaWV3UmVzb3VyY2UoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Vmlld0JpbmRlcihMYW5kcm9pZC93aWRnZXQvU2ltcGxlQWRhcHRlciRWaWV3QmluZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Vmlld0ltYWdlKExhbmRyb2lkL3dpZGdldC9JbWFnZVZpZXc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Vmlld0ltYWdlKExhbmRyb2lkL3dpZGdldC9JbWFnZVZpZXc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWV3VGV4dChMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9TaW1wbGVBZGFwdGVyJFZpZXdCaW5kZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpZXdWYWx1ZShMYW5kcm9pZC92aWV3L1ZpZXc7TGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9TaW1wbGVDdXJzb3JBZGFwdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1Jlc291cmNlQ3Vyc29yQWRhcHRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SUxhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtbTGphdmEvbGFuZy9TdHJpbmc7W0kpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7W0xqYXZhL2xhbmcvU3RyaW5nO1tJSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFuZ2VDdXJzb3JBbmRDb2x1bW5zKExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtbTGphdmEvbGFuZy9TdHJpbmc7W0kpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJzb3JUb1N0cmluZ0NvbnZlcnRlcigpTGFuZHJvaWQvd2lkZ2V0L1NpbXBsZUN1cnNvckFkYXB0ZXIkQ3Vyc29yVG9TdHJpbmdDb252ZXJ0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nQ29udmVyc2lvbkNvbHVtbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZpZXdCaW5kZXIoKUxhbmRyb2lkL3dpZGdldC9TaW1wbGVDdXJzb3JBZGFwdGVyJFZpZXdCaW5kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3Vyc29yVG9TdHJpbmdDb252ZXJ0ZXIoTGFuZHJvaWQvd2lkZ2V0L1NpbXBsZUN1cnNvckFkYXB0ZXIkQ3Vyc29yVG9TdHJpbmdDb252ZXJ0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdHJpbmdDb252ZXJzaW9uQ29sdW1uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpZXdCaW5kZXIoTGFuZHJvaWQvd2lkZ2V0L1NpbXBsZUN1cnNvckFkYXB0ZXIkVmlld0JpbmRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpZXdJbWFnZShMYW5kcm9pZC93aWRnZXQvSW1hZ2VWaWV3O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Vmlld1RleHQoTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvU2ltcGxlQ3Vyc29yQWRhcHRlciRDdXJzb3JUb1N0cmluZ0NvbnZlcnRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29udmVydFRvU3RyaW5nKExhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjspTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvU2ltcGxlQ3Vyc29yQWRhcHRlciRWaWV3QmluZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWV3VmFsdWUoTGFuZHJvaWQvdmlldy9WaWV3O0xhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtJKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9TaW1wbGVDdXJzb3JUcmVlQWRhcHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9SZXNvdXJjZUN1cnNvclRyZWVBZGFwdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7SUlbTGphdmEvbGFuZy9TdHJpbmc7W0lJSVtMamF2YS9sYW5nL1N0cmluZztbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7SUlbTGphdmEvbGFuZy9TdHJpbmc7W0lJW0xqYXZhL2xhbmcvU3RyaW5nO1tJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL2RhdGFiYXNlL0N1cnNvcjtJW0xqYXZhL2xhbmcvU3RyaW5nO1tJSVtMamF2YS9sYW5nL1N0cmluZztbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Vmlld0JpbmRlcigpTGFuZHJvaWQvd2lkZ2V0L1NpbXBsZUN1cnNvclRyZWVBZGFwdGVyJFZpZXdCaW5kZXI7IiBzaW5jZT0iNSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpZXdCaW5kZXIoTGFuZHJvaWQvd2lkZ2V0L1NpbXBsZUN1cnNvclRyZWVBZGFwdGVyJFZpZXdCaW5kZXI7KVYiIHNpbmNlPSI1Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Vmlld0ltYWdlKExhbmRyb2lkL3dpZGdldC9JbWFnZVZpZXc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWaWV3VGV4dChMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI1Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvU2ltcGxlQ3Vyc29yVHJlZUFkYXB0ZXIkVmlld0JpbmRlciIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Vmlld1ZhbHVlKExhbmRyb2lkL3ZpZXcvVmlldztMYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3I7SSlaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvU2ltcGxlRXhwYW5kYWJsZUxpc3RBZGFwdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0Jhc2VFeHBhbmRhYmxlTGlzdEFkYXB0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL3V0aWwvTGlzdDtJSVtMamF2YS9sYW5nL1N0cmluZztbSUxqYXZhL3V0aWwvTGlzdDtJSVtMamF2YS9sYW5nL1N0cmluZztbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS91dGlsL0xpc3Q7SUlbTGphdmEvbGFuZy9TdHJpbmc7W0lMamF2YS91dGlsL0xpc3Q7SVtMamF2YS9sYW5nL1N0cmluZztbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMamF2YS91dGlsL0xpc3Q7SVtMamF2YS9sYW5nL1N0cmluZztbSUxqYXZhL3V0aWwvTGlzdDtJW0xqYXZhL2xhbmcvU3RyaW5nO1tJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdDaGlsZFZpZXcoWkxhbmRyb2lkL3ZpZXcvVmlld0dyb3VwOylMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3R3JvdXBWaWV3KFpMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDspTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1NsaWRpbmdEcmF3ZXIiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3R3JvdXAiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFuaW1hdGVDbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFuaW1hdGVPcGVuKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYW5pbWF0ZVRvZ2dsZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudCgpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhhbmRsZSgpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTW92aW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPcGVuZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2NrKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbigpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uRHJhd2VyQ2xvc2VMaXN0ZW5lcihMYW5kcm9pZC93aWRnZXQvU2xpZGluZ0RyYXdlciRPbkRyYXdlckNsb3NlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkRyYXdlck9wZW5MaXN0ZW5lcihMYW5kcm9pZC93aWRnZXQvU2xpZGluZ0RyYXdlciRPbkRyYXdlck9wZW5MaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uRHJhd2VyU2Nyb2xsTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L1NsaWRpbmdEcmF3ZXIkT25EcmF3ZXJTY3JvbGxMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InRvZ2dsZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InVubG9jaygpViIvPgotCQk8ZmllbGQgbmFtZT0iT1JJRU5UQVRJT05fSE9SSVpPTlRBTCIvPgotCQk8ZmllbGQgbmFtZT0iT1JJRU5UQVRJT05fVkVSVElDQUwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9TbGlkaW5nRHJhd2VyJE9uRHJhd2VyQ2xvc2VMaXN0ZW5lciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25EcmF3ZXJDbG9zZWQoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9TbGlkaW5nRHJhd2VyJE9uRHJhd2VyT3Blbkxpc3RlbmVyIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkRyYXdlck9wZW5lZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1NsaWRpbmdEcmF3ZXIkT25EcmF3ZXJTY3JvbGxMaXN0ZW5lciIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25TY3JvbGxFbmRlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uU2Nyb2xsU3RhcnRlZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1NwYWNlIiBzaW5jZT0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1NwaW5uZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvQWJzU3Bpbm5lciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2NvbnRlbnQvRGlhbG9nSW50ZXJmYWNlJE9uQ2xpY2tMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0kpViIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJSUxhbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcyRUaGVtZTspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJvcERvd25Ib3Jpem9udGFsT2Zmc2V0KClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcm9wRG93blZlcnRpY2FsT2Zmc2V0KClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcm9wRG93bldpZHRoKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcmF2aXR5KClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3B1cEJhY2tncm91bmQoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9wdXBDb250ZXh0KClMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9tcHQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERyb3BEb3duSG9yaXpvbnRhbE9mZnNldChJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldERyb3BEb3duVmVydGljYWxPZmZzZXQoSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREcm9wRG93bldpZHRoKEkpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R3Jhdml0eShJKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvcHVwQmFja2dyb3VuZERyYXdhYmxlKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb3B1cEJhY2tncm91bmRSZXNvdXJjZShJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb21wdChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb21wdElkKEkpViIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9ESUFMT0ciIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9EUk9QRE9XTiIgc2luY2U9IjExIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvU3Bpbm5lckFkYXB0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3dpZGdldC9BZGFwdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJvcERvd25WaWV3KElMYW5kcm9pZC92aWV3L1ZpZXc7TGFuZHJvaWQvdmlldy9WaWV3R3JvdXA7KUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9TdGFja1ZpZXciIHNpbmNlPSIxMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3QW5pbWF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIiBzaW5jZT0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1N3aXRjaCIgc2luY2U9IjE0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvQ29tcG91bmRCdXR0b24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJSSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG93VGV4dCgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3BsaXRUcmFjaygpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3dpdGNoTWluV2lkdGgoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN3aXRjaFBhZGRpbmcoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRPZmYoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRPbigpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGh1bWJEcmF3YWJsZSgpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHVtYlRleHRQYWRkaW5nKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHVtYlRpbnRMaXN0KClMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRodW1iVGludE1vZGUoKUxhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYWNrRHJhd2FibGUoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhY2tUaW50TGlzdCgpTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFja1RpbnRNb2RlKClMYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmJE1vZGU7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG93VGV4dChaKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNwbGl0VHJhY2soWilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTd2l0Y2hNaW5XaWR0aChJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN3aXRjaFBhZGRpbmcoSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTd2l0Y2hUZXh0QXBwZWFyYW5jZShMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3dpdGNoVHlwZWZhY2UoTGFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTd2l0Y2hUeXBlZmFjZShMYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0T2ZmKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dE9uKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGh1bWJEcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGh1bWJSZXNvdXJjZShJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRodW1iVGV4dFBhZGRpbmcoSSlWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaHVtYlRpbnRMaXN0KExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OylWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaHVtYlRpbnRNb2RlKExhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTspViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhY2tEcmF3YWJsZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhY2tSZXNvdXJjZShJKVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyYWNrVGludExpc3QoTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyYWNrVGludE1vZGUoTGFuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZiRNb2RlOylWIiBzaW5jZT0iMjMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9UYWJIb3N0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0ZyYW1lTGF5b3V0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3VHJlZU9ic2VydmVyJE9uVG91Y2hNb2RlQ2hhbmdlTGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SSlWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRhYihMYW5kcm9pZC93aWRnZXQvVGFiSG9zdCRUYWJTcGVjOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJBbGxUYWJzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudFRhYigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRUYWJUYWcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRUYWJWaWV3KClMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudFZpZXcoKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWJDb250ZW50VmlldygpTGFuZHJvaWQvd2lkZ2V0L0ZyYW1lTGF5b3V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRhYldpZGdldCgpTGFuZHJvaWQvd2lkZ2V0L1RhYldpZGdldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdUYWJTcGVjKExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC93aWRnZXQvVGFiSG9zdCRUYWJTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1cnJlbnRUYWIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VycmVudFRhYkJ5VGFnKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25UYWJDaGFuZ2VkTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L1RhYkhvc3QkT25UYWJDaGFuZ2VMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldHVwKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0dXAoTGFuZHJvaWQvYXBwL0xvY2FsQWN0aXZpdHlNYW5hZ2VyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvVGFiSG9zdCRPblRhYkNoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRhYkNoYW5nZWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9UYWJIb3N0JFRhYkNvbnRlbnRGYWN0b3J5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUYWJDb250ZW50KExqYXZhL2xhbmcvU3RyaW5nOylMYW5kcm9pZC92aWV3L1ZpZXc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvVGFiSG9zdCRUYWJTcGVjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvd2lkZ2V0L1RhYkhvc3Q7KVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3dpZGdldC9UYWJIb3N0O0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50KEkpTGFuZHJvaWQvd2lkZ2V0L1RhYkhvc3QkVGFiU3BlYzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50KExhbmRyb2lkL2NvbnRlbnQvSW50ZW50OylMYW5kcm9pZC93aWRnZXQvVGFiSG9zdCRUYWJTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnQoTGFuZHJvaWQvd2lkZ2V0L1RhYkhvc3QkVGFiQ29udGVudEZhY3Rvcnk7KUxhbmRyb2lkL3dpZGdldC9UYWJIb3N0JFRhYlNwZWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5kaWNhdG9yKExhbmRyb2lkL3ZpZXcvVmlldzspTGFuZHJvaWQvd2lkZ2V0L1RhYkhvc3QkVGFiU3BlYzsiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5kaWNhdG9yKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMYW5kcm9pZC93aWRnZXQvVGFiSG9zdCRUYWJTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluZGljYXRvcihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspTGFuZHJvaWQvd2lkZ2V0L1RhYkhvc3QkVGFiU3BlYzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9UYWJXaWRnZXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvTGluZWFyTGF5b3V0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3JE9uRm9jdXNDaGFuZ2VMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvY3VzQ3VycmVudFRhYihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGlsZFRhYlZpZXdBdChJKUxhbmRyb2lkL3ZpZXcvVmlldzsiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGVmdFN0cmlwRHJhd2FibGUoKUxhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmlnaHRTdHJpcERyYXdhYmxlKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRhYkNvdW50KClJIiBzaW5jZT0iNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3RyaXBFbmFibGVkKClaIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1cnJlbnRUYWIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGl2aWRlckRyYXdhYmxlKEkpViIgc2luY2U9IjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaXZpZGVyRHJhd2FibGUoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHNpbmNlPSI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGVmdFN0cmlwRHJhd2FibGUoSSlWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldExlZnRTdHJpcERyYXdhYmxlKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJpZ2h0U3RyaXBEcmF3YWJsZShJKVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmlnaHRTdHJpcERyYXdhYmxlKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cmlwRW5hYmxlZChaKVYiIHNpbmNlPSI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvVGFibGVMYXlvdXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvTGluZWFyTGF5b3V0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZUxheW91dFBhcmFtcyhMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspTGFuZHJvaWQvd2lkZ2V0L1RhYmxlTGF5b3V0JExheW91dFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbHVtbkNvbGxhcHNlZChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbHVtblNocmlua2FibGUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb2x1bW5TdHJldGNoYWJsZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Nocmlua0FsbENvbHVtbnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N0cmV0Y2hBbGxDb2x1bW5zKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sdW1uQ29sbGFwc2VkKElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2x1bW5TaHJpbmthYmxlKElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2x1bW5TdHJldGNoYWJsZShJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hyaW5rQWxsQ29sdW1ucyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdHJldGNoQWxsQ29sdW1ucyhaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9UYWJsZUxheW91dCRMYXlvdXRQYXJhbXMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvTGluZWFyTGF5b3V0JExheW91dFBhcmFtcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTWFyZ2luTGF5b3V0UGFyYW1zOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvVGFibGVSb3ciIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvTGluZWFyTGF5b3V0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZUxheW91dFBhcmFtcyhMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspTGFuZHJvaWQvd2lkZ2V0L1RhYmxlUm93JExheW91dFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaXJ0dWFsQ2hpbGRBdChJKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWaXJ0dWFsQ2hpbGRDb3VudCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1RhYmxlUm93JExheW91dFBhcmFtcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQkTGF5b3V0UGFyYW1zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTWFyZ2luTGF5b3V0UGFyYW1zOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2x1bW4iLz4KLQkJPGZpZWxkIG5hbWU9InNwYW4iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9UZXh0Q2xvY2siIHNpbmNlPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9ybWF0MTJIb3VyKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JtYXQyNEhvdXIoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVab25lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpczI0SG91ck1vZGVFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9ybWF0MTJIb3VyKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9ybWF0MjRIb3VyKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZVpvbmUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfRk9STUFUXzEyX0hPVVIiIGRlcHJlY2F0ZWQ9IjE4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX0ZPUk1BVF8yNF9IT1VSIiBkZXByZWNhdGVkPSIxOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1RleHRTd2l0Y2hlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9WaWV3U3dpdGNoZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1cnJlbnRUZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3VHJlZU9ic2VydmVyJE9uUHJlRHJhd0xpc3RlbmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGV4dENoYW5nZWRMaXN0ZW5lcihMYW5kcm9pZC90ZXh0L1RleHRXYXRjaGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiZWdpbkJhdGNoRWRpdCgpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJicmluZ1BvaW50SW50b1ZpZXcoSSlaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQ29tcG9zaW5nVGV4dCgpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWJ1ZyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaWRUb3VjaEZvY3VzU2VsZWN0KClaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZEJhdGNoRWRpdCgpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHRyYWN0VGV4dChMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0V4dHJhY3RlZFRleHRSZXF1ZXN0O0xhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvRXh0cmFjdGVkVGV4dDspWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRvTGlua01hc2soKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRvU2l6ZU1heFRleHRTaXplKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRvU2l6ZU1pblRleHRTaXplKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRvU2l6ZVN0ZXBHcmFudWxhcml0eSgpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0b1NpemVUZXh0QXZhaWxhYmxlU2l6ZXMoKVtJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRvU2l6ZVRleHRUeXBlKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCcmVha1N0cmF0ZWd5KClJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wb3VuZERyYXdhYmxlUGFkZGluZygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBvdW5kRHJhd2FibGVUaW50TGlzdCgpTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wb3VuZERyYXdhYmxlVGludE1vZGUoKUxhbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmYkTW9kZTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBvdW5kRHJhd2FibGVzKClbTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tcG91bmREcmF3YWJsZXNSZWxhdGl2ZSgpW0xhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOyIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tcG91bmRQYWRkaW5nQm90dG9tKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tcG91bmRQYWRkaW5nRW5kKClJIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wb3VuZFBhZGRpbmdMZWZ0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tcG91bmRQYWRkaW5nUmlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wb3VuZFBhZGRpbmdTdGFydCgpSSIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tcG91bmRQYWRkaW5nVG9wKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudEhpbnRUZXh0Q29sb3IoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50VGV4dENvbG9yKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VzdG9tSW5zZXJ0aW9uQWN0aW9uTW9kZUNhbGxiYWNrKClMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGUkQ2FsbGJhY2s7IiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXN0b21TZWxlY3Rpb25BY3Rpb25Nb2RlQ2FsbGJhY2soKUxhbmRyb2lkL3ZpZXcvQWN0aW9uTW9kZSRDYWxsYmFjazsiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRFZGl0YWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRNb3ZlbWVudE1ldGhvZCgpTGFuZHJvaWQvdGV4dC9tZXRob2QvTW92ZW1lbnRNZXRob2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RWRpdGFibGVUZXh0KClMYW5kcm9pZC90ZXh0L0VkaXRhYmxlOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbGxpcHNpemUoKUxhbmRyb2lkL3RleHQvVGV4dFV0aWxzJFRydW5jYXRlQXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXJyb3IoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dGVuZGVkUGFkZGluZ0JvdHRvbSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dGVuZGVkUGFkZGluZ1RvcCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbHRlcnMoKVtMYW5kcm9pZC90ZXh0L0lucHV0RmlsdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpcnN0QmFzZWxpbmVUb1RvcEhlaWdodCgpSSIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9udEZlYXR1cmVTZXR0aW5ncygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb250VmFyaWF0aW9uU2V0dGluZ3MoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJlZXplc1RleHQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcmF2aXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGlnaGxpZ2h0Q29sb3IoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpbnQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhpbnRUZXh0Q29sb3JzKClMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIeXBoZW5hdGlvbkZyZXF1ZW5jeSgpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1lQWN0aW9uSWQoKUkiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1lQWN0aW9uTGFiZWwoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbWVIaW50TG9jYWxlcygpTGFuZHJvaWQvb3MvTG9jYWxlTGlzdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEltZU9wdGlvbnMoKUkiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5jbHVkZUZvbnRQYWRkaW5nKClaIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dEV4dHJhcyhaKUxhbmRyb2lkL29zL0J1bmRsZTsiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRUeXBlKClJIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEp1c3RpZmljYXRpb25Nb2RlKClJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlMaXN0ZW5lcigpTGFuZHJvaWQvdGV4dC9tZXRob2QvS2V5TGlzdGVuZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFzdEJhc2VsaW5lVG9Cb3R0b21IZWlnaHQoKUkiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExheW91dCgpTGFuZHJvaWQvdGV4dC9MYXlvdXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGV0dGVyU3BhY2luZygpRiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGluZUJvdW5kcyhJTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmVDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmVIZWlnaHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lU3BhY2luZ0V4dHJhKClGIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lU3BhY2luZ011bHRpcGxpZXIoKUYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmtUZXh0Q29sb3JzKClMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5rc0NsaWNrYWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hcnF1ZWVSZXBlYXRMaW1pdCgpSSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4RW1zKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhIZWlnaHQoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heExpbmVzKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhXaWR0aCgpSSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluRW1zKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5IZWlnaHQoKUkiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbkxpbmVzKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5XaWR0aCgpSSIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW92ZW1lbnRNZXRob2QoKUxhbmRyb2lkL3RleHQvbWV0aG9kL01vdmVtZW50TWV0aG9kOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9mZnNldEZvclBvc2l0aW9uKEZGKUkiIHNpbmNlPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhaW50KClMYW5kcm9pZC90ZXh0L1RleHRQYWludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWludEZsYWdzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpdmF0ZUltZU9wdGlvbnMoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxlY3Rpb25FbmQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWxlY3Rpb25TdGFydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNoYWRvd0NvbG9yKClJIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaGFkb3dEeCgpRiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hhZG93RHkoKUYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNoYWRvd1JhZGl1cygpRiIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvd1NvZnRJbnB1dE9uRm9jdXMoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHQoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRDbGFzc2lmaWVyKClMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dENvbG9yKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L3Jlcy9UeXBlZEFycmF5O0kpSSIgcmVtb3ZlZD0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0Q29sb3JzKClMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0Q29sb3JzKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L3Jlcy9UeXBlZEFycmF5OylMYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdDsiIHJlbW92ZWQ9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dExvY2FsZSgpTGphdmEvdXRpbC9Mb2NhbGU7IiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0TG9jYWxlcygpTGFuZHJvaWQvb3MvTG9jYWxlTGlzdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRNZXRyaWNzUGFyYW1zKClMYW5kcm9pZC90ZXh0L1ByZWNvbXB1dGVkVGV4dCRQYXJhbXM7IiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0U2NhbGVYKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dFNpemUoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3RhbFBhZGRpbmdCb3R0b20oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3RhbFBhZGRpbmdFbmQoKUkiIHNpbmNlPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdGFsUGFkZGluZ0xlZnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3RhbFBhZGRpbmdSaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdGFsUGFkZGluZ1N0YXJ0KClJIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3RhbFBhZGRpbmdUb3AoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFuc2Zvcm1hdGlvbk1ldGhvZCgpTGFuZHJvaWQvdGV4dC9tZXRob2QvVHJhbnNmb3JtYXRpb25NZXRob2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZWZhY2UoKUxhbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVybHMoKVtMYW5kcm9pZC90ZXh0L3N0eWxlL1VSTFNwYW47Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzU2VsZWN0aW9uKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBbGxDYXBzKClaIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0N1cnNvclZpc2libGUoKVoiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRWxlZ2FudFRleHRIZWlnaHQoKVoiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmFsbGJhY2tMaW5lU3BhY2luZygpWiIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbnB1dE1ldGhvZFRhcmdldCgpWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N1Z2dlc3Rpb25zRW5hYmxlZCgpWiIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUZXh0U2VsZWN0YWJsZSgpWiIgc2luY2U9IjExIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZUN1cnNvclRvVmlzaWJsZU9mZnNldCgpWiIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkJlZ2luQmF0Y2hFZGl0KClWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29tbWl0Q29tcGxldGlvbihMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0NvbXBsZXRpb25JbmZvOylWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29tbWl0Q29ycmVjdGlvbihMYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0NvcnJlY3Rpb25JbmZvOylWIiBzaW5jZT0iMTEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkVkaXRvckFjdGlvbihJKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25FbmRCYXRjaEVkaXQoKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Qcml2YXRlSU1FQ29tbWFuZChMamF2YS9sYW5nL1N0cmluZztMYW5kcm9pZC9vcy9CdW5kbGU7KVoiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25TZWxlY3Rpb25DaGFuZ2VkKElJKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UZXh0Q2hhbmdlZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVGV4dENvbnRleHRNZW51SXRlbShJKVoiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlVGV4dENoYW5nZWRMaXN0ZW5lcihMYW5kcm9pZC90ZXh0L1RleHRXYXRjaGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXRSZXNvbHZlZERyYXdhYmxlcygpViIgc2luY2U9IjE0IiByZW1vdmVkPSIxNyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0UmVzb2x2ZWRMYXlvdXREaXJlY3Rpb24oKVYiIHNpbmNlPSIxNCIgcmVtb3ZlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlRHJhd2FibGVzKClWIiBzaW5jZT0iMTQiIHJlbW92ZWQ9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZVRleHREaXJlY3Rpb24oKVYiIHNpbmNlPSIxNCIgcmVtb3ZlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGxDYXBzKFopViIgc2luY2U9IjE0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0b0xpbmtNYXNrKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dG9TaXplVGV4dFR5cGVVbmlmb3JtV2l0aENvbmZpZ3VyYXRpb24oSUlJSSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdXRvU2l6ZVRleHRUeXBlVW5pZm9ybVdpdGhQcmVzZXRTaXplcyhbSUkpViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0b1NpemVUZXh0VHlwZVdpdGhEZWZhdWx0cyhJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJyZWFrU3RyYXRlZ3koSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb21wb3VuZERyYXdhYmxlUGFkZGluZyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb21wb3VuZERyYXdhYmxlVGludExpc3QoTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbXBvdW5kRHJhd2FibGVUaW50TW9kZShMYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmJE1vZGU7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbXBvdW5kRHJhd2FibGVzKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlO0xhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlO0xhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlO0xhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29tcG91bmREcmF3YWJsZXNSZWxhdGl2ZShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29tcG91bmREcmF3YWJsZXNSZWxhdGl2ZVdpdGhJbnRyaW5zaWNCb3VuZHMoSUlJSSlWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb21wb3VuZERyYXdhYmxlc1JlbGF0aXZlV2l0aEludHJpbnNpY0JvdW5kcyhMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTtMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29tcG91bmREcmF3YWJsZXNXaXRoSW50cmluc2ljQm91bmRzKElJSUkpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb21wb3VuZERyYXdhYmxlc1dpdGhJbnRyaW5zaWNCb3VuZHMoTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7TGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7TGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7TGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXJzb3JWaXNpYmxlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1c3RvbUluc2VydGlvbkFjdGlvbk1vZGVDYWxsYmFjayhMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGUkQ2FsbGJhY2s7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEN1c3RvbVNlbGVjdGlvbkFjdGlvbk1vZGVDYWxsYmFjayhMYW5kcm9pZC92aWV3L0FjdGlvbk1vZGUkQ2FsbGJhY2s7KVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVkaXRhYmxlRmFjdG9yeShMYW5kcm9pZC90ZXh0L0VkaXRhYmxlJEZhY3Rvcnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbGVnYW50VGV4dEhlaWdodChaKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVsbGlwc2l6ZShMYW5kcm9pZC90ZXh0L1RleHRVdGlscyRUcnVuY2F0ZUF0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW1zKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVycm9yKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXJyb3IoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeHRyYWN0ZWRUZXh0KExhbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvRXh0cmFjdGVkVGV4dDspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGYWxsYmFja0xpbmVTcGFjaW5nKFopViIgc2luY2U9IjI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmlsdGVycyhbTGFuZHJvaWQvdGV4dC9JbnB1dEZpbHRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZpcnN0QmFzZWxpbmVUb1RvcEhlaWdodChJKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvbnRGZWF0dXJlU2V0dGluZ3MoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvbnRWYXJpYXRpb25TZXR0aW5ncyhMamF2YS9sYW5nL1N0cmluZzspWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RnJhbWUoSUlJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RnJlZXplc1RleHQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R3Jhdml0eShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIZWlnaHQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGlnaGxpZ2h0Q29sb3IoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGludChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIaW50KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGludFRleHRDb2xvcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIaW50VGV4dENvbG9yKExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG9yaXpvbnRhbGx5U2Nyb2xsaW5nKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEh5cGhlbmF0aW9uRnJlcXVlbmN5KEkpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW1lQWN0aW9uTGFiZWwoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SSlWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltZUhpbnRMb2NhbGVzKExhbmRyb2lkL29zL0xvY2FsZUxpc3Q7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEltZU9wdGlvbnMoSSlWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluY2x1ZGVGb250UGFkZGluZyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dEV4dHJhcyhJKVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5wdXRUeXBlKEkpViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRKdXN0aWZpY2F0aW9uTW9kZShJKVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEtleUxpc3RlbmVyKExhbmRyb2lkL3RleHQvbWV0aG9kL0tleUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGFzdEJhc2VsaW5lVG9Cb3R0b21IZWlnaHQoSSlWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMZXR0ZXJTcGFjaW5nKEYpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGluZUhlaWdodChJKVYiIHNpbmNlPSIyOCIvPgotCQk8bWV0aG9kIG5hbWU9InNldExpbmVTcGFjaW5nKEZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaW5lcyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaW5rVGV4dENvbG9yKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExpbmtUZXh0Q29sb3IoTGFuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaW5rc0NsaWNrYWJsZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXJxdWVlUmVwZWF0TGltaXQoSSlWIiBzaW5jZT0iMiIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1heEVtcyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhIZWlnaHQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4TGluZXMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4V2lkdGgoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWluRW1zKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbkhlaWdodChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNaW5MaW5lcyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNaW5XaWR0aChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNb3ZlbWVudE1ldGhvZChMYW5kcm9pZC90ZXh0L21ldGhvZC9Nb3ZlbWVudE1ldGhvZDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uRWRpdG9yQWN0aW9uTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3JE9uRWRpdG9yQWN0aW9uTGlzdGVuZXI7KVYiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFkZGluZ1JlbGF0aXZlKElJSUkpViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFpbnRGbGFncyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcml2YXRlSW1lT3B0aW9ucyhMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSYXdJbnB1dFR5cGUoSSlWIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjcm9sbGVyKExhbmRyb2lkL3dpZGdldC9TY3JvbGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlbGVjdEFsbE9uRm9jdXMoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hhZG93TGF5ZXIoRkZGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hvd1NvZnRJbnB1dE9uRm9jdXMoWilWIiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaW5nbGVMaW5lKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2luZ2xlTGluZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTcGFubmFibGVGYWN0b3J5KExhbmRyb2lkL3RleHQvU3Bhbm5hYmxlJEZhY3Rvcnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHQoSUxhbmRyb2lkL3dpZGdldC9UZXh0VmlldyRCdWZmZXJUeXBlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3JEJ1ZmZlclR5cGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0KFtDSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRBcHBlYXJhbmNlKEkpViIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dEFwcGVhcmFuY2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0kpViIgZGVwcmVjYXRlZD0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0Q2xhc3NpZmllcihMYW5kcm9pZC92aWV3L3RleHRjbGFzc2lmaWVyL1RleHRDbGFzc2lmaWVyOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0Q29sb3IoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dENvbG9yKExhbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dElzU2VsZWN0YWJsZShaKVYiIHNpbmNlPSIxMSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRLZWVwU3RhdGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0S2VlcFN0YXRlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xhbmRyb2lkL3dpZGdldC9UZXh0VmlldyRCdWZmZXJUeXBlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dExvY2FsZShMamF2YS91dGlsL0xvY2FsZTspViIgc2luY2U9IjE3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dExvY2FsZXMoTGFuZHJvaWQvb3MvTG9jYWxlTGlzdDspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dE1ldHJpY3NQYXJhbXMoTGFuZHJvaWQvdGV4dC9QcmVjb21wdXRlZFRleHQkUGFyYW1zOylWIiBzaW5jZT0iMjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0U2NhbGVYKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRTaXplKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHRTaXplKElGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUcmFuc2Zvcm1hdGlvbk1ldGhvZChMYW5kcm9pZC90ZXh0L21ldGhvZC9UcmFuc2Zvcm1hdGlvbk1ldGhvZDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFR5cGVmYWNlKExhbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHlwZWZhY2UoTGFuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2U7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2lkdGgoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVVRPX1NJWkVfVEVYVF9UWVBFX05PTkUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQVVUT19TSVpFX1RFWFRfVFlQRV9VTklGT1JNIiBzaW5jZT0iMjYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9UZXh0VmlldyRCdWZmZXJUeXBlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3JEJ1ZmZlclR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3JEJ1ZmZlclR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFRElUQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iTk9STUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUEFOTkFCTEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9UZXh0VmlldyRPbkVkaXRvckFjdGlvbkxpc3RlbmVyIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkVkaXRvckFjdGlvbihMYW5kcm9pZC93aWRnZXQvVGV4dFZpZXc7SUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9UZXh0VmlldyRTYXZlZFN0YXRlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3JEJhc2VTYXZlZFN0YXRlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9vcy9QYXJjZWxhYmxlOylWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFUT1IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9UaGVtZWRTcGlubmVyQWRhcHRlciIgc2luY2U9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3dpZGdldC9TcGlubmVyQWRhcHRlciIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyb3BEb3duVmlld1RoZW1lKClMYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMkVGhlbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHJvcERvd25WaWV3VGhlbWUoTGFuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzJFRoZW1lOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvVGltZVBpY2tlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9GcmFtZUxheW91dCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRIb3VyKClMamF2YS9sYW5nL0ludGVnZXI7IiBkZXByZWNhdGVkPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRNaW51dGUoKUxqYXZhL2xhbmcvSW50ZWdlcjsiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SG91cigpSSIgc2luY2U9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWludXRlKClJIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJpczI0SG91clZpZXcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXJyZW50SG91cihMamF2YS9sYW5nL0ludGVnZXI7KVYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VycmVudE1pbnV0ZShMamF2YS9sYW5nL0ludGVnZXI7KVYiIGRlcHJlY2F0ZWQ9IjIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG91cihJKVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldElzMjRIb3VyVmlldyhMamF2YS9sYW5nL0Jvb2xlYW47KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNaW51dGUoSSlWIiBzaW5jZT0iMjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPblRpbWVDaGFuZ2VkTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L1RpbWVQaWNrZXIkT25UaW1lQ2hhbmdlZExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsaWRhdGVJbnB1dCgpWiIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvVGltZVBpY2tlciRPblRpbWVDaGFuZ2VkTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVGltZUNoYW5nZWQoTGFuZHJvaWQvd2lkZ2V0L1RpbWVQaWNrZXI7SUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1RvYXN0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHVyYXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcmF2aXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SG9yaXpvbnRhbE1hcmdpbigpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZlcnRpY2FsTWFyZ2luKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmlldygpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFhPZmZzZXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRZT2Zmc2V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFrZVRleHQoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lJKUxhbmRyb2lkL3dpZGdldC9Ub2FzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYWtlVGV4dChMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SSlMYW5kcm9pZC93aWRnZXQvVG9hc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RHVyYXRpb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R3Jhdml0eShJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1hcmdpbihGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlldyhMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5HVEhfTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iTEVOR1RIX1NIT1JUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvVG9nZ2xlQnV0dG9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0NvbXBvdW5kQnV0dG9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dE9mZigpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dE9uKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0T2ZmKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dE9uKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvVG9vbGJhciIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC92aWV3L1ZpZXdHcm91cCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb2xsYXBzZUFjdGlvblZpZXcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNtaXNzUG9wdXBNZW51cygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlRGVmYXVsdExheW91dFBhcmFtcygpTGFuZHJvaWQvd2lkZ2V0L1Rvb2xiYXIkTGF5b3V0UGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlTGF5b3V0UGFyYW1zKExhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylMYW5kcm9pZC93aWRnZXQvVG9vbGJhciRMYXlvdXRQYXJhbXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVMYXlvdXRQYXJhbXMoTGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zOylMYW5kcm9pZC93aWRnZXQvVG9vbGJhciRMYXlvdXRQYXJhbXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudEluc2V0RW5kKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudEluc2V0RW5kV2l0aEFjdGlvbnMoKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnRJbnNldExlZnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50SW5zZXRSaWdodCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnRJbnNldFN0YXJ0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudEluc2V0U3RhcnRXaXRoTmF2aWdhdGlvbigpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudENvbnRlbnRJbnNldEVuZCgpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudENvbnRlbnRJbnNldExlZnQoKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbnRDb250ZW50SW5zZXRSaWdodCgpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudENvbnRlbnRJbnNldFN0YXJ0KClJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2dvKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2dvRGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lbnUoKUxhbmRyb2lkL3ZpZXcvTWVudTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYXZpZ2F0aW9uQ29udGVudERlc2NyaXB0aW9uKClMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYXZpZ2F0aW9uSWNvbigpTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3ZlcmZsb3dJY29uKClMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvcHVwVGhlbWUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJ0aXRsZSgpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGl0bGUoKUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpdGxlTWFyZ2luQm90dG9tKClJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaXRsZU1hcmdpbkVuZCgpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGl0bGVNYXJnaW5TdGFydCgpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGl0bGVNYXJnaW5Ub3AoKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0V4cGFuZGVkQWN0aW9uVmlldygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImhpZGVPdmVyZmxvd01lbnUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmZsYXRlTWVudShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc092ZXJmbG93TWVudVNob3dpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50SW5zZXRFbmRXaXRoQWN0aW9ucyhJKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRJbnNldFN0YXJ0V2l0aE5hdmlnYXRpb24oSSlWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50SW5zZXRzQWJzb2x1dGUoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRJbnNldHNSZWxhdGl2ZShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9nbyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2dvKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9nb0Rlc2NyaXB0aW9uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvZ29EZXNjcmlwdGlvbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5hdmlnYXRpb25Db250ZW50RGVzY3JpcHRpb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmF2aWdhdGlvbkNvbnRlbnREZXNjcmlwdGlvbihMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5hdmlnYXRpb25JY29uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5hdmlnYXRpb25JY29uKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmF2aWdhdGlvbk9uQ2xpY2tMaXN0ZW5lcihMYW5kcm9pZC92aWV3L1ZpZXckT25DbGlja0xpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25NZW51SXRlbUNsaWNrTGlzdGVuZXIoTGFuZHJvaWQvd2lkZ2V0L1Rvb2xiYXIkT25NZW51SXRlbUNsaWNrTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdmVyZmxvd0ljb24oTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7KVYiIHNpbmNlPSIyMyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvcHVwVGhlbWUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VidGl0bGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3VidGl0bGUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdWJ0aXRsZVRleHRBcHBlYXJhbmNlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdWJ0aXRsZVRleHRDb2xvcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaXRsZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaXRsZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpdGxlTWFyZ2luKElJSUkpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGl0bGVNYXJnaW5Cb3R0b20oSSlWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaXRsZU1hcmdpbkVuZChJKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpdGxlTWFyZ2luU3RhcnQoSSlWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaXRsZU1hcmdpblRvcChJKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpdGxlVGV4dEFwcGVhcmFuY2UoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpdGxlVGV4dENvbG9yKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dPdmVyZmxvd01lbnUoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9Ub29sYmFyJExheW91dFBhcmFtcyIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC9hcHAvQWN0aW9uQmFyJExheW91dFBhcmFtcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9hcHAvQWN0aW9uQmFyJExheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJE1hcmdpbkxheW91dFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC93aWRnZXQvVG9vbGJhciRMYXlvdXRQYXJhbXM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9Ub29sYmFyJE9uTWVudUl0ZW1DbGlja0xpc3RlbmVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25NZW51SXRlbUNsaWNrKExhbmRyb2lkL3ZpZXcvTWVudUl0ZW07KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9Ud29MaW5lTGlzdEl0ZW0iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIxNyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1JlbGF0aXZlTGF5b3V0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGV4dDEoKUxhbmRyb2lkL3dpZGdldC9UZXh0VmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0MigpTGFuZHJvaWQvd2lkZ2V0L1RleHRWaWV3OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1ZpZGVvVmlldyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvU3VyZmFjZVZpZXciLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvTWVkaWFDb250cm9sbGVyJE1lZGlhUGxheWVyQ29udHJvbCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0lJKVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFN1YnRpdGxlU291cmNlKExqYXZhL2lvL0lucHV0U3RyZWFtO0xhbmRyb2lkL21lZGlhL01lZGlhRm9ybWF0OylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlQWRqdXN0ZWRTaXplKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXN1bWUoKVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXVkaW9BdHRyaWJ1dGVzKExhbmRyb2lkL21lZGlhL0F1ZGlvQXR0cmlidXRlczspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXVkaW9Gb2N1c1JlcXVlc3QoSSlWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNZWRpYUNvbnRyb2xsZXIoTGFuZHJvaWQvd2lkZ2V0L01lZGlhQ29udHJvbGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uQ29tcGxldGlvbkxpc3RlbmVyKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uQ29tcGxldGlvbkxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T25FcnJvckxpc3RlbmVyKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uRXJyb3JMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uSW5mb0xpc3RlbmVyKExhbmRyb2lkL21lZGlhL01lZGlhUGxheWVyJE9uSW5mb0xpc3RlbmVyOylWIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPblByZXBhcmVkTGlzdGVuZXIoTGFuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIkT25QcmVwYXJlZExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlkZW9QYXRoKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlkZW9VUkkoTGFuZHJvaWQvbmV0L1VyaTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZpZGVvVVJJKExhbmRyb2lkL25ldC9Vcmk7TGphdmEvdXRpbC9NYXA7KVYiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BQbGF5YmFjaygpViIvPgotCQk8bWV0aG9kIG5hbWU9InN1c3BlbmQoKVYiIHNpbmNlPSI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvVmlld0FuaW1hdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0ZyYW1lTGF5b3V0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmltYXRlRmlyc3RWaWV3KClaIiBzaW5jZT0iMTciLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50VmlldygpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXllZENoaWxkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5BbmltYXRpb24oKUxhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRBbmltYXRpb24oKUxhbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbmltYXRlRmlyc3RWaWV3KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpc3BsYXllZENoaWxkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluQW5pbWF0aW9uKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbkFuaW1hdGlvbihMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9BbmltYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdXRBbmltYXRpb24oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE91dEFuaW1hdGlvbihMYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9BbmltYXRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93TmV4dCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNob3dQcmV2aW91cygpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1ZpZXdGbGlwcGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1ZpZXdBbmltYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBdXRvU3RhcnQoKVoiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGbGlwcGluZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dG9TdGFydChaKVYiIHNpbmNlPSI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmxpcEludGVydmFsKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0RmxpcHBpbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wRmxpcHBpbmcoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9WaWV3U3dpdGNoZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iYW5kcm9pZC93aWRnZXQvVmlld0FuaW1hdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZXh0VmlldygpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmFjdG9yeShMYW5kcm9pZC93aWRnZXQvVmlld1N3aXRjaGVyJFZpZXdGYWN0b3J5OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZC93aWRnZXQvVmlld1N3aXRjaGVyJFZpZXdGYWN0b3J5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYWtlVmlldygpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1dyYXBwZXJMaXN0QWRhcHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L0xpc3RBZGFwdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V3JhcHBlZEFkYXB0ZXIoKUxhbmRyb2lkL3dpZGdldC9MaXN0QWRhcHRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9ab29tQnV0dG9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9JbWFnZUJ1dHRvbiIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyRPbkxvbmdDbGlja0xpc3RlbmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7SUkpViIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Wm9vbVNwZWVkKEopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1pvb21CdXR0b25zQ29udHJvbGxlciIgc2luY2U9IjQiIGRlcHJlY2F0ZWQ9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlldyRPblRvdWNoTGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9WaWV3OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGFpbmVyKClMYW5kcm9pZC92aWV3L1ZpZXdHcm91cDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRab29tQ29udHJvbHMoKUxhbmRyb2lkL3ZpZXcvVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0F1dG9EaXNtaXNzZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Zpc2libGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdXRvRGlzbWlzc2VkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvY3VzYWJsZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPblpvb21MaXN0ZW5lcihMYW5kcm9pZC93aWRnZXQvWm9vbUJ1dHRvbnNDb250cm9sbGVyJE9uWm9vbUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlzaWJsZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRab29tSW5FbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFpvb21PdXRFbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFpvb21TcGVlZChKKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9ab29tQnV0dG9uc0NvbnRyb2xsZXIkT25ab29tTGlzdGVuZXIiIHNpbmNlPSI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVmlzaWJpbGl0eUNoYW5nZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25ab29tKFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWQvd2lkZ2V0L1pvb21Db250cm9scyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImhpZGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJc1pvb21JbkVuYWJsZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SXNab29tT3V0RW5hYmxlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPblpvb21JbkNsaWNrTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3JE9uQ2xpY2tMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9uWm9vbU91dENsaWNrTGlzdGVuZXIoTGFuZHJvaWQvdmlldy9WaWV3JE9uQ2xpY2tMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFpvb21TcGVlZChKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iYW5kcm9pZHgvYW5ub3RhdGlvbi9SZWNlbnRseU5vbk51bGwiIHNpbmNlPSIyOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL2Fubm90YXRpb24vQW5ub3RhdGlvbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImFuZHJvaWR4L2Fubm90YXRpb24vUmVjZW50bHlOdWxsYWJsZSIgc2luY2U9IjI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iY29tL2FuZHJvaWQvaW50ZXJuYWwvdXRpbC9QcmVkaWNhdGUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyNiIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHkoTGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9HZW9Qb2ludCIgc2luY2U9IjEiIHJlbW92ZWQ9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXRpdHVkZUU2KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZ2l0dWRlRTYoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9JdGVtaXplZE92ZXJsYXkiIHNpbmNlPSIxIiByZW1vdmVkPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvT3ZlcmxheSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJvdW5kQ2VudGVyKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlOylMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJib3VuZENlbnRlckJvdHRvbShMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspTGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSXRlbShJKUxjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9PdmVybGF5SXRlbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZW50ZXIoKUxjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9HZW9Qb2ludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb2N1cygpTGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL092ZXJsYXlJdGVtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZGV4VG9EcmF3KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEl0ZW0oSSlMY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvT3ZlcmxheUl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFzdEZvY3VzZWRJbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhdFNwYW5FNigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvblNwYW5FNigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImhpdFRlc3QoTGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL092ZXJsYXlJdGVtO0xhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlO0lJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0Rm9jdXMoWilMY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvT3ZlcmxheUl0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25UYXAoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9wdWxhdGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREcmF3Rm9jdXNlZEl0ZW0oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9jdXMoTGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL092ZXJsYXlJdGVtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGFzdEZvY3VzZWRJbmRleChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPbkZvY3VzQ2hhbmdlTGlzdGVuZXIoTGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL0l0ZW1pemVkT3ZlcmxheSRPbkZvY3VzQ2hhbmdlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaXplKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvSXRlbWl6ZWRPdmVybGF5JE9uRm9jdXNDaGFuZ2VMaXN0ZW5lciIgc2luY2U9IjEiIHJlbW92ZWQ9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25Gb2N1c0NoYW5nZWQoTGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL0l0ZW1pemVkT3ZlcmxheTtMY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvT3ZlcmxheUl0ZW07KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9NYXBBY3Rpdml0eSIgc2luY2U9IjEiIHJlbW92ZWQ9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL2FwcC9BY3Rpdml0eSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG9jYXRpb25EaXNwbGF5ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JvdXRlRGlzcGxheWVkKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvTWFwQ29udHJvbGxlciIgc2luY2U9IjEiIHJlbW92ZWQ9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3JE9uS2V5TGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbmltYXRlVG8oTGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL0dlb1BvaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYW5pbWF0ZVRvKExjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9HZW9Qb2ludDtMYW5kcm9pZC9vcy9NZXNzYWdlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYW5pbWF0ZVRvKExjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9HZW9Qb2ludDtMamF2YS9sYW5nL1J1bm5hYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2Nyb2xsQnkoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENlbnRlcihMY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvR2VvUG9pbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRab29tKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BBbmltYXRpb24oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcFBhbm5pbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ6b29tSW4oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ6b29tSW5GaXhpbmcoSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Inpvb21PdXQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ6b29tT3V0Rml4aW5nKElJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ6b29tVG9TcGFuKElJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9NYXBWaWV3IiBzaW5jZT0iMSIgcmVtb3ZlZD0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImFuZHJvaWQvdmlldy9WaWV3R3JvdXAiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xhbmRyb2lkL3V0aWwvQXR0cmlidXRlU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC91dGlsL0F0dHJpYnV0ZVNldDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuQ292ZXJDZW50ZXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNwbGF5Wm9vbUNvbnRyb2xzKFopViIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlRGVmYXVsdExheW91dFBhcmFtcygpTGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL01hcFZpZXckTGF5b3V0UGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRyb2xsZXIoKUxjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9NYXBDb250cm9sbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhdGl0dWRlU3BhbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmdpdHVkZVNwYW4oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXBDZW50ZXIoKUxjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9HZW9Qb2ludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhab29tTGV2ZWwoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdmVybGF5cygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb2plY3Rpb24oKUxjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9Qcm9qZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFpvb21Db250cm9scygpTGFuZHJvaWQvdmlldy9WaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFpvb21MZXZlbCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2F0ZWxsaXRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTdHJlZXRWaWV3KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUcmFmZmljKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25SZXN0b3JlSW5zdGFuY2VTdGF0ZShMYW5kcm9pZC9vcy9CdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblNhdmVJbnN0YW5jZVN0YXRlKExhbmRyb2lkL29zL0J1bmRsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InByZUxvYWQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXRpY2xlRHJhd01vZGUoTGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL01hcFZpZXckUmV0aWNsZURyYXdNb2RlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2F0ZWxsaXRlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cmVldFZpZXcoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhZmZpYyhaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9NYXBWaWV3JExheW91dFBhcmFtcyIgc2luY2U9IjEiIHJlbW92ZWQ9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJhbmRyb2lkL3ZpZXcvVmlld0dyb3VwJExheW91dFBhcmFtcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJTGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL0dlb1BvaW50O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUxjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9HZW9Qb2ludDtJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGFuZHJvaWQvdXRpbC9BdHRyaWJ1dGVTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvdmlldy9WaWV3R3JvdXAkTGF5b3V0UGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVidWcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQk9UVE9NIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT1RUT01fQ0VOVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5URVIiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlRFUl9IT1JJWk9OVEFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5URVJfVkVSVElDQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkxFRlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PREVfTUFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX1ZJRVciLz4KLQkJPGZpZWxkIG5hbWU9IlJJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUT1AiLz4KLQkJPGZpZWxkIG5hbWU9IlRPUF9MRUZUIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbGlnbm1lbnQiLz4KLQkJPGZpZWxkIG5hbWU9Im1vZGUiLz4KLQkJPGZpZWxkIG5hbWU9InBvaW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJ5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvTWFwVmlldyRSZXRpY2xlRHJhd01vZGUiIHNpbmNlPSIxIiByZW1vdmVkPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvTWFwVmlldyRSZXRpY2xlRHJhd01vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL01hcFZpZXckUmV0aWNsZURyYXdNb2RlOyIvPgotCQk8ZmllbGQgbmFtZT0iRFJBV19SRVRJQ0xFX05FVkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJEUkFXX1JFVElDTEVfT1ZFUiIvPgotCQk8ZmllbGQgbmFtZT0iRFJBV19SRVRJQ0xFX1VOREVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvTXlMb2NhdGlvbk92ZXJsYXkiIHNpbmNlPSIxIiByZW1vdmVkPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvT3ZlcmxheSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJhbmRyb2lkL2hhcmR3YXJlL1NlbnNvckxpc3RlbmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImFuZHJvaWQvbG9jYXRpb24vTG9jYXRpb25MaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7TGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL01hcFZpZXc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNhYmxlQ29tcGFzcygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2FibGVNeUxvY2F0aW9uKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGF0Y2hUYXAoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmF3Q29tcGFzcyhMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7RilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhd015TG9jYXRpb24oTGFuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzO0xjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9NYXBWaWV3O0xhbmRyb2lkL2xvY2F0aW9uL0xvY2F0aW9uO0xjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9HZW9Qb2ludDtKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmFibGVDb21wYXNzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlTXlMb2NhdGlvbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhc3RGaXgoKUxhbmRyb2lkL2xvY2F0aW9uL0xvY2F0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE15TG9jYXRpb24oKUxjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9HZW9Qb2ludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmllbnRhdGlvbigpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ29tcGFzc0VuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc015TG9jYXRpb25FbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icnVuT25GaXJzdEZpeChMamF2YS9sYW5nL1J1bm5hYmxlOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvT3ZlcmxheSIgc2luY2U9IjEiIHJlbW92ZWQ9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhdyhMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7TGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL01hcFZpZXc7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHJhdyhMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7TGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL01hcFZpZXc7WkopWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYXdBdChMYW5kcm9pZC9ncmFwaGljcy9DYW52YXM7TGFuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGU7SUlaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbktleURvd24oSUxhbmRyb2lkL3ZpZXcvS2V5RXZlbnQ7TGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL01hcFZpZXc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbktleVVwKElMYW5kcm9pZC92aWV3L0tleUV2ZW50O0xjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9NYXBWaWV3OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UYXAoTGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL0dlb1BvaW50O0xjb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9NYXBWaWV3OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25Ub3VjaEV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7TGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL01hcFZpZXc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblRyYWNrYmFsbEV2ZW50KExhbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQ7TGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL01hcFZpZXc7KVoiLz4KLQkJPGZpZWxkIG5hbWU9IlNIQURPV19YX1NLRVciLz4KLQkJPGZpZWxkIG5hbWU9IlNIQURPV19ZX1NDQUxFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvT3ZlcmxheUl0ZW0iIHNpbmNlPSIxIiByZW1vdmVkPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvR2VvUG9pbnQ7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXJrZXIoSSlMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb2ludCgpTGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL0dlb1BvaW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNuaXBwZXQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpdGxlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb3V0YWJsZUFkZHJlc3MoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1hcmtlcihMYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXRlKExhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0RyYXdhYmxlO0kpViIvPgotCQk8ZmllbGQgbmFtZT0iSVRFTV9TVEFURV9GT0NVU0VEX01BU0siLz4KLQkJPGZpZWxkIG5hbWU9IklURU1fU1RBVEVfUFJFU1NFRF9NQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJJVEVNX1NUQVRFX1NFTEVDVEVEX01BU0siLz4KLQkJPGZpZWxkIG5hbWU9Im1NYXJrZXIiLz4KLQkJPGZpZWxkIG5hbWU9Im1Qb2ludCIvPgotCQk8ZmllbGQgbmFtZT0ibVNuaXBwZXQiLz4KLQkJPGZpZWxkIG5hbWU9Im1UaXRsZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL1Byb2plY3Rpb24iIHNpbmNlPSIxIiByZW1vdmVkPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb21QaXhlbHMoSUkpTGNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL0dlb1BvaW50OyIvPgotCQk8bWV0aG9kIG5hbWU9Im1ldGVyc1RvRXF1YXRvclBpeGVscyhGKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1BpeGVscyhMY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvR2VvUG9pbnQ7TGFuZHJvaWQvZ3JhcGhpY3MvUG9pbnQ7KUxhbmRyb2lkL2dyYXBoaWNzL1BvaW50OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImNvbS9nb29nbGUvYW5kcm9pZC9tYXBzL1RyYWNrYmFsbEdlc3R1cmVEZXRlY3RvciIgc2luY2U9IjEiIHJlbW92ZWQ9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYW5hbHl6ZShMYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudERvd25YKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVudERvd25ZKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rmlyc3REb3duWCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpcnN0RG93blkoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RvdWJsZVRhcCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2Nyb2xsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUYXAoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlckxvbmdQcmVzc0NhbGxiYWNrKExqYXZhL2xhbmcvUnVubmFibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY3JvbGxYKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2Nyb2xsWSgpRiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImRhbHZpay9hbm5vdGF0aW9uL1Rlc3RUYXJnZXQiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL2Fubm90YXRpb24vQW5ub3RhdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbmNlcHROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWV0aG9kQXJncygpW0xqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWV0aG9kTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iZGFsdmlrL2Fubm90YXRpb24vVGVzdFRhcmdldENsYXNzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMTQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZSgpTGphdmEvbGFuZy9DbGFzczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJkYWx2aWsvYnl0ZWNvZGUvT3Bjb2RlSW5mbyIgc2luY2U9IjExIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iTUFYSU1VTV9QQUNLRURfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWElNVU1fVkFMVUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJkYWx2aWsvYnl0ZWNvZGUvT3Bjb2RlcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9BRERfRE9VQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9BRERfRE9VQkxFXzJBRERSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9BRERfRkxPQVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0FERF9GTE9BVF8yQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQUREX0lOVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQUREX0lOVF8yQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQUREX0lOVF9MSVQxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQUREX0lOVF9MSVQ4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9BRERfTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQUREX0xPTkdfMkFERFIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0FHRVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0FHRVRfQk9PTEVBTiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQUdFVF9CWVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9BR0VUX0NIQVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0FHRVRfT0JKRUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9BR0VUX1NIT1JUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9BR0VUX1dJREUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0FORF9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0FORF9JTlRfMkFERFIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0FORF9JTlRfTElUMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0FORF9JTlRfTElUOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQU5EX0xPTkciLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0FORF9MT05HXzJBRERSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9BUFVUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9BUFVUX0JPT0xFQU4iLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0FQVVRfQllURSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQVBVVF9DSEFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9BUFVUX09CSkVDVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQVBVVF9TSE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQVBVVF9XSURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9BUlJBWV9MRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0JSRUFLUE9JTlQiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQ0hFQ0tfQ0FTVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQ0hFQ0tfQ0FTVF9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9DTVBHX0RPVUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQ01QR19GTE9BVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQ01QTF9ET1VCTEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0NNUExfRkxPQVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0NNUF9MT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9DT05TVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQ09OU1RfMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0NPTlNUXzQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0NPTlNUX0NMQVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9DT05TVF9DTEFTU19KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9DT05TVF9ISUdIMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0NPTlNUX01FVEhPRF9IQU5ETEUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQ09OU1RfTUVUSE9EX1RZUEUiIHNpbmNlPSIyOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQ09OU1RfU1RSSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9DT05TVF9TVFJJTkdfSlVNQk8iLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0NPTlNUX1dJREUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0NPTlNUX1dJREVfMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0NPTlNUX1dJREVfMzIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0NPTlNUX1dJREVfSElHSDE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9ESVZfRE9VQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9ESVZfRE9VQkxFXzJBRERSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9ESVZfRkxPQVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0RJVl9GTE9BVF8yQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfRElWX0lOVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfRElWX0lOVF8yQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfRElWX0lOVF9MSVQxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfRElWX0lOVF9MSVQ4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9ESVZfTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iT1BfRElWX0xPTkdfMkFERFIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0RPVUJMRV9UT19GTE9BVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfRE9VQkxFX1RPX0lOVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfRE9VQkxFX1RPX0xPTkciLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0VYRUNVVEVfSU5MSU5FIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfRVhFQ1VURV9JTkxJTkVfUkFOR0UiIHNpbmNlPSI4IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfRklMTEVEX05FV19BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfRklMTEVEX05FV19BUlJBWV9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9GSUxMRURfTkVXX0FSUkFZX1JBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9GSUxMX0FSUkFZX0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0ZMT0FUX1RPX0RPVUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfRkxPQVRfVE9fSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9GTE9BVF9UT19MT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9HT1RPIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9HT1RPXzE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9HT1RPXzMyIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JRl9FUSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSUZfRVFaIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JRl9HRSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSUZfR0VaIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JRl9HVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSUZfR1RaIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JRl9MRSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSUZfTEVaIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JRl9MVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSUZfTFRaIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JRl9ORSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSUZfTkVaIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JR0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JR0VUX0JPT0xFQU4iLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lHRVRfQk9PTEVBTl9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JR0VUX0JZVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lHRVRfQllURV9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JR0VUX0NIQVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lHRVRfQ0hBUl9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JR0VUX0pVTUJPIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lHRVRfT0JKRUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JR0VUX09CSkVDVF9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JR0VUX09CSkVDVF9RVUlDSyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lHRVRfUVVJQ0siIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JR0VUX1NIT1JUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JR0VUX1NIT1JUX0pVTUJPIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lHRVRfV0lERSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSUdFVF9XSURFX0pVTUJPIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lHRVRfV0lERV9RVUlDSyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lHRVRfV0lERV9WT0xBVElMRSIgc2luY2U9IjkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlNUQU5DRV9PRiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSU5TVEFOQ0VfT0ZfSlVNQk8iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSU5UX1RPX0JZVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lOVF9UT19DSEFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlRfVE9fRE9VQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlRfVE9fRkxPQVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lOVF9UT19MT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlRfVE9fU0hPUlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lOVk9LRV9DVVNUT00iIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSU5WT0tFX0NVU1RPTV9SQU5HRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlZPS0VfRElSRUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlZPS0VfRElSRUNUX0VNUFRZIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSU5WT0tFX0RJUkVDVF9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlZPS0VfRElSRUNUX1JBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlZPS0VfSU5URVJGQUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlZPS0VfSU5URVJGQUNFX0pVTUJPIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lOVk9LRV9JTlRFUkZBQ0VfUkFOR0UiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lOVk9LRV9QT0xZTU9SUEhJQyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlZPS0VfUE9MWU1PUlBISUNfUkFOR0UiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSU5WT0tFX1NUQVRJQyIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSU5WT0tFX1NUQVRJQ19KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlZPS0VfU1RBVElDX1JBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlZPS0VfU1VQRVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lOVk9LRV9TVVBFUl9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlZPS0VfU1VQRVJfUVVJQ0siIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlZPS0VfU1VQRVJfUVVJQ0tfUkFOR0UiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlZPS0VfU1VQRVJfUkFOR0UiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lOVk9LRV9WSVJUVUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlZPS0VfVklSVFVBTF9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JTlZPS0VfVklSVFVBTF9RVUlDSyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lOVk9LRV9WSVJUVUFMX1FVSUNLX1JBTkdFIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSU5WT0tFX1ZJUlRVQUxfUkFOR0UiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lQVVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lQVVRfQk9PTEVBTiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSVBVVF9CT09MRUFOX0pVTUJPIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lQVVRfQllURSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSVBVVF9CWVRFX0pVTUJPIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lQVVRfQ0hBUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSVBVVF9DSEFSX0pVTUJPIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lQVVRfSlVNQk8iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSVBVVF9PQkpFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lQVVRfT0JKRUNUX0pVTUJPIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lQVVRfT0JKRUNUX1FVSUNLIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSVBVVF9RVUlDSyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lQVVRfU0hPUlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0lQVVRfU0hPUlRfSlVNQk8iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSVBVVF9XSURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9JUFVUX1dJREVfSlVNQk8iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSVBVVF9XSURFX1FVSUNLIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfSVBVVF9XSURFX1ZPTEFUSUxFIiBzaW5jZT0iOSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0xPTkdfVE9fRE9VQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9MT05HX1RPX0ZMT0FUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9MT05HX1RPX0lOVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfTU9OSVRPUl9FTlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfTU9OSVRPUl9FWElUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9NT1ZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9NT1ZFXzE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9NT1ZFX0VYQ0VQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfTU9WRV9GUk9NMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX01PVkVfT0JKRUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9NT1ZFX09CSkVDVF8xNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfTU9WRV9PQkpFQ1RfRlJPTTE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9NT1ZFX1JFU1VMVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfTU9WRV9SRVNVTFRfT0JKRUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9NT1ZFX1JFU1VMVF9XSURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9NT1ZFX1dJREUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX01PVkVfV0lERV8xNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfTU9WRV9XSURFX0ZST00xNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfTVVMX0RPVUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfTVVMX0RPVUJMRV8yQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfTVVMX0ZMT0FUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9NVUxfRkxPQVRfMkFERFIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX01VTF9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX01VTF9JTlRfMkFERFIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX01VTF9JTlRfTElUMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX01VTF9JTlRfTElUOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfTVVMX0xPTkciLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX01VTF9MT05HXzJBRERSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9ORUdfRE9VQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9ORUdfRkxPQVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX05FR19JTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX05FR19MT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9ORVdfQVJSQVkiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX05FV19BUlJBWV9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9ORVdfSU5TVEFOQ0UiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX05FV19JTlNUQU5DRV9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9OT1AiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX05PVF9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX05PVF9MT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9PUl9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX09SX0lOVF8yQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfT1JfSU5UX0xJVDE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9PUl9JTlRfTElUOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfT1JfTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iT1BfT1JfTE9OR18yQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfUEFDS0VEX1NXSVRDSCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfUkVNX0RPVUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfUkVNX0RPVUJMRV8yQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfUkVNX0ZMT0FUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9SRU1fRkxPQVRfMkFERFIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1JFTV9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1JFTV9JTlRfMkFERFIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1JFTV9JTlRfTElUMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1JFTV9JTlRfTElUOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfUkVNX0xPTkciLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1JFTV9MT05HXzJBRERSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9SRVRVUk4iLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1JFVFVSTl9PQkpFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1JFVFVSTl9WT0lEIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9SRVRVUk5fV0lERSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfUlNVQl9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1JTVUJfSU5UX0xJVDgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NHRVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NHRVRfQk9PTEVBTiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU0dFVF9CT09MRUFOX0pVTUJPIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NHRVRfQllURSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU0dFVF9CWVRFX0pVTUJPIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NHRVRfQ0hBUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU0dFVF9DSEFSX0pVTUJPIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NHRVRfSlVNQk8iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU0dFVF9PQkpFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NHRVRfT0JKRUNUX0pVTUJPIiBzaW5jZT0iMTEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NHRVRfU0hPUlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NHRVRfU0hPUlRfSlVNQk8iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU0dFVF9XSURFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9TR0VUX1dJREVfSlVNQk8iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU0dFVF9XSURFX1ZPTEFUSUxFIiBzaW5jZT0iOSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NITF9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NITF9JTlRfMkFERFIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NITF9JTlRfTElUOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU0hMX0xPTkciLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NITF9MT05HXzJBRERSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9TSFJfSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9TSFJfSU5UXzJBRERSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9TSFJfSU5UX0xJVDgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NIUl9MT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9TSFJfTE9OR18yQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU1BBUlNFX1NXSVRDSCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU1BVVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU1BVVF9CT09MRUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9TUFVUX0JPT0xFQU5fSlVNQk8iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU1BVVF9CWVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9TUFVUX0JZVEVfSlVNQk8iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU1BVVF9DSEFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9TUFVUX0NIQVJfSlVNQk8iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU1BVVF9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9TUFVUX09CSkVDVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU1BVVF9PQkpFQ1RfSlVNQk8iIHNpbmNlPSIxMSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU1BVVF9TSE9SVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU1BVVF9TSE9SVF9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9TUFVUX1dJREUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NQVVRfV0lERV9KVU1CTyIgc2luY2U9IjExIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9TUFVUX1dJREVfVk9MQVRJTEUiIHNpbmNlPSI5IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU1VCX0RPVUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU1VCX0RPVUJMRV8yQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfU1VCX0ZMT0FUIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9TVUJfRkxPQVRfMkFERFIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NVQl9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NVQl9JTlRfMkFERFIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1NVQl9MT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9TVUJfTE9OR18yQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfVEhST1ciLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1RIUk9XX1ZFUklGSUNBVElPTl9FUlJPUiIgc2luY2U9IjgiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9VTlVTRURfM2UiIHJlbW92ZWQ9IjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1VOVVNFRF8zZiIgcmVtb3ZlZD0iOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfVU5VU0VEXzQwIiByZW1vdmVkPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9VTlVTRURfNDEiIHJlbW92ZWQ9IjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1VOVVNFRF80MiIgcmVtb3ZlZD0iOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfVU5VU0VEXzQzIiByZW1vdmVkPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9VTlVTRURfNzMiIHJlbW92ZWQ9IjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1VOVVNFRF83OSIgcmVtb3ZlZD0iOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfVU5VU0VEXzdBIiByZW1vdmVkPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9VTlVTRURfRTMiIHJlbW92ZWQ9IjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1VOVVNFRF9FNCIgcmVtb3ZlZD0iOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfVU5VU0VEX0U1IiByZW1vdmVkPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9VTlVTRURfRTYiIHJlbW92ZWQ9IjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1VOVVNFRF9FNyIgcmVtb3ZlZD0iOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfVU5VU0VEX0U4IiByZW1vdmVkPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9VTlVTRURfRTkiIHJlbW92ZWQ9IjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1VOVVNFRF9FQSIgcmVtb3ZlZD0iOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfVU5VU0VEX0VCIiByZW1vdmVkPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9VTlVTRURfRUMiIHJlbW92ZWQ9IjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1VOVVNFRF9FRCIgcmVtb3ZlZD0iOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfVU5VU0VEX0VGIiByZW1vdmVkPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9VTlVTRURfRjEiIHJlbW92ZWQ9IjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1VOVVNFRF9GQyIgcmVtb3ZlZD0iOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfVU5VU0VEX0ZEIiByZW1vdmVkPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9VTlVTRURfRkUiIHJlbW92ZWQ9IjgiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1VOVVNFRF9GRiIgcmVtb3ZlZD0iOCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfVVNIUl9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1VTSFJfSU5UXzJBRERSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9VU0hSX0lOVF9MSVQ4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9VU0hSX0xPTkciLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX1VTSFJfTE9OR18yQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfWE9SX0lOVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfWE9SX0lOVF8yQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfWE9SX0lOVF9MSVQxNiIvPgotCQk8ZmllbGQgbmFtZT0iT1BfWE9SX0lOVF9MSVQ4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUF9YT1JfTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iT1BfWE9SX0xPTkdfMkFERFIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJkYWx2aWsvc3lzdGVtL0FsbG9jYXRpb25MaW1pdEVycm9yIiBzaW5jZT0iMSIgcmVtb3ZlZD0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9WaXJ0dWFsTWFjaGluZUVycm9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iZGFsdmlrL3N5c3RlbS9CYXNlRGV4Q2xhc3NMb2FkZXIiIHNpbmNlPSIxNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9DbGFzc0xvYWRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9GaWxlO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJkYWx2aWsvc3lzdGVtL0RlbGVnYXRlTGFzdENsYXNzTG9hZGVyIiBzaW5jZT0iMjciPgotCQk8ZXh0ZW5kcyBuYW1lPSJkYWx2aWsvc3lzdGVtL1BhdGhDbGFzc0xvYWRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJkYWx2aWsvc3lzdGVtL0RleENsYXNzTG9hZGVyIiBzaW5jZT0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImRhbHZpay9zeXN0ZW0vQmFzZURleENsYXNzTG9hZGVyIiBzaW5jZT0iMTQiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0NsYXNzTG9hZGVyIiByZW1vdmVkPSIxNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iZGFsdmlrL3N5c3RlbS9EZXhGaWxlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0ZpbGU7KVYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW50cmllcygpTGphdmEvdXRpbC9FbnVtZXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RleE9wdE5lZWRlZChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRDbGFzcyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWREZXgoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SSlMZGFsdmlrL3N5c3RlbS9EZXhGaWxlOyIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iZGFsdmlrL3N5c3RlbS9Jbk1lbW9yeURleENsYXNzTG9hZGVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJkYWx2aWsvc3lzdGVtL0Jhc2VEZXhDbGFzc0xvYWRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWIiBzaW5jZT0iMjciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJkYWx2aWsvc3lzdGVtL1BhdGhDbGFzc0xvYWRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJkYWx2aWsvc3lzdGVtL0Jhc2VEZXhDbGFzc0xvYWRlciIgc2luY2U9IjE0Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9DbGFzc0xvYWRlciIgcmVtb3ZlZD0iMTQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DbGFzc0xvYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iZGFsdmlrL3N5c3RlbS9Qb3RlbnRpYWxEZWFkbG9ja0Vycm9yIiBzaW5jZT0iMSIgcmVtb3ZlZD0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9WaXJ0dWFsTWFjaGluZUVycm9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iZGFsdmlrL3N5c3RlbS9TdGFsZURleENhY2hlRXJyb3IiIHNpbmNlPSIxIiByZW1vdmVkPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1ZpcnR1YWxNYWNoaW5lRXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJkYWx2aWsvc3lzdGVtL1RlbXBvcmFyeURpcmVjdG9yeSIgc2luY2U9IjEiIHJlbW92ZWQ9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXBEaXJlY3RvcnkoTGphdmEvaW8vRmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVwRGlyZWN0b3J5KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iZGFsdmlrL3N5c3RlbS9Ub3VjaERleCIgc2luY2U9IjEiIHJlbW92ZWQ9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFpbihbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydChMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImRhbHZpay9zeXN0ZW0vVk1EZWJ1ZyIgc2luY2U9IjEiIHJlbW92ZWQ9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHVtcEhwcm9mRGF0YShMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxvY0NvdW50KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RydWN0aW9uQ291bnQoW0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvYWRlZENsYXNzQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RlYnVnZ2VyQ29ubmVjdGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZWJ1Z2dpbmdFbmFibGVkKClaIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9Imxhc3REZWJ1Z2dlckFjdGl2aXR5KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnRMb2FkZWRDbGFzc2VzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0QWxsb2NDb3VudChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldEluc3RydWN0aW9uQ291bnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGxvY2F0aW9uTGltaXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R2xvYmFsQWxsb2NhdGlvbkxpbWl0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0QWxsb2NDb3VudGluZygpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0RW11bGF0b3JUcmFjaW5nKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRJbnN0cnVjdGlvbkNvdW50aW5nKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRNZXRob2RUcmFjaW5nKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRNZXRob2RUcmFjaW5nKExqYXZhL2xhbmcvU3RyaW5nO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wQWxsb2NDb3VudGluZygpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BFbXVsYXRvclRyYWNpbmcoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wSW5zdHJ1Y3Rpb25Db3VudGluZygpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3BNZXRob2RUcmFjaW5nKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idGhyZWFkQ3B1VGltZU5hbm9zKClKIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX01FVEhPRF9UUkFDRV9GSUxFX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IktJTkRfQUxMX0NPVU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9HTE9CQUxfQUxMT0NBVEVEX0JZVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSU5EX0dMT0JBTF9BTExPQ0FURURfT0JKRUNUUyIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9HTE9CQUxfQ0xBU1NfSU5JVF9DT1VOVCIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IktJTkRfR0xPQkFMX0NMQVNTX0lOSVRfVElNRSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IktJTkRfR0xPQkFMX0VYVF9BTExPQ0FURURfQllURVMiLz4KLQkJPGZpZWxkIG5hbWU9IktJTkRfR0xPQkFMX0VYVF9BTExPQ0FURURfT0JKRUNUUyIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9HTE9CQUxfRVhUX0ZSRUVEX0JZVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSU5EX0dMT0JBTF9FWFRfRlJFRURfT0JKRUNUUyIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9HTE9CQUxfRlJFRURfQllURVMiLz4KLQkJPGZpZWxkIG5hbWU9IktJTkRfR0xPQkFMX0ZSRUVEX09CSkVDVFMiLz4KLQkJPGZpZWxkIG5hbWU9IktJTkRfR0xPQkFMX0dDX0lOVk9DQVRJT05TIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSU5EX1RIUkVBRF9BTExPQ0FURURfQllURVMiLz4KLQkJPGZpZWxkIG5hbWU9IktJTkRfVEhSRUFEX0FMTE9DQVRFRF9PQkpFQ1RTIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSU5EX1RIUkVBRF9DTEFTU19JTklUX0NPVU5UIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9USFJFQURfQ0xBU1NfSU5JVF9USU1FIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9USFJFQURfRVhUX0FMTE9DQVRFRF9CWVRFUyIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9USFJFQURfRVhUX0FMTE9DQVRFRF9PQkpFQ1RTIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSU5EX1RIUkVBRF9FWFRfRlJFRURfQllURVMiLz4KLQkJPGZpZWxkIG5hbWU9IktJTkRfVEhSRUFEX0VYVF9GUkVFRF9PQkpFQ1RTIi8+Ci0JCTxmaWVsZCBuYW1lPSJLSU5EX1RIUkVBRF9GUkVFRF9CWVRFUyIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9USFJFQURfRlJFRURfT0JKRUNUUyIvPgotCQk8ZmllbGQgbmFtZT0iS0lORF9USFJFQURfR0NfSU5WT0NBVElPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQUNFX0NPVU5UX0FMTE9DUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImRhbHZpay9zeXN0ZW0vVk1SdW50aW1lIiBzaW5jZT0iMSIgcmVtb3ZlZD0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnY1NvZnRSZWZlcmVuY2VzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZXJuYWxCeXRlc0FsbG9jYXRlZCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbmltdW1IZWFwU2l6ZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJ1bnRpbWUoKUxkYWx2aWsvc3lzdGVtL1ZNUnVudGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYXJnZXRIZWFwVXRpbGl6YXRpb24oKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5GaW5hbGl6YXRpb25TeW5jKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWluaW11bUhlYXBTaXplKEopSiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRhcmdldEhlYXBVdGlsaXphdGlvbihGKUYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJkYWx2aWsvc3lzdGVtL1ZNU3RhY2siIHNpbmNlPSIxIiByZW1vdmVkPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbGxpbmdDbGFzc0xvYWRlcigpTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxsaW5nQ2xhc3NMb2FkZXIyKClMamF2YS9sYW5nL0NsYXNzTG9hZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsYXNzZXMoSVopW0xqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGhyZWFkU3RhY2tUcmFjZShMamF2YS9sYW5nL1RocmVhZDspW0xqYXZhL2xhbmcvU3RhY2tUcmFjZUVsZW1lbnQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iZGFsdmlrL3N5c3RlbS9aeWdvdGUiIHNpbmNlPSIxIiByZW1vdmVkPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcmsoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JrQW5kU3BlY2lhbGl6ZShJSVtJSVtbSSlJIiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcmtBbmRTcGVjaWFsaXplKElJW0laW1tJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JrU3lzdGVtU2VydmVyKElJW0lJW1tJKUkiIHNpbmNlPSIzIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ya1N5c3RlbVNlcnZlcihJSVtJWltbSSlJIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUJVR19FTkFCTEVfQVNTRVJUIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iREVCVUdfRU5BQkxFX0NIRUNLSk5JIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iREVCVUdfRU5BQkxFX0RFQlVHR0VSIiBzaW5jZT0iMyIvPgotCQk8ZmllbGQgbmFtZT0iREVCVUdfRU5BQkxFX1NBRkVNT0RFIiBzaW5jZT0iOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvYXd0L2ZvbnQvTnVtZXJpY1NoYXBlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZXh0dWFsU2hhcGVyKEkpTGphdmEvYXd0L2ZvbnQvTnVtZXJpY1NoYXBlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZXh0dWFsU2hhcGVyKElJKUxqYXZhL2F3dC9mb250L051bWVyaWNTaGFwZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGV4dHVhbFNoYXBlcihMamF2YS91dGlsL1NldDspTGphdmEvYXd0L2ZvbnQvTnVtZXJpY1NoYXBlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRleHR1YWxTaGFwZXIoTGphdmEvdXRpbC9TZXQ7TGphdmEvYXd0L2ZvbnQvTnVtZXJpY1NoYXBlciRSYW5nZTspTGphdmEvYXd0L2ZvbnQvTnVtZXJpY1NoYXBlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJhbmdlU2V0KClMamF2YS91dGlsL1NldDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJhbmdlcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNoYXBlcihJKUxqYXZhL2F3dC9mb250L051bWVyaWNTaGFwZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hhcGVyKExqYXZhL2F3dC9mb250L051bWVyaWNTaGFwZXIkUmFuZ2U7KUxqYXZhL2F3dC9mb250L051bWVyaWNTaGFwZXI7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbnRleHR1YWwoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaGFwZShbQ0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaGFwZShbQ0lJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2hhcGUoW0NJSUxqYXZhL2F3dC9mb250L051bWVyaWNTaGFwZXIkUmFuZ2U7KVYiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQUxMX1JBTkdFUyIvPgotCQk8ZmllbGQgbmFtZT0iQVJBQklDIi8+Ci0JCTxmaWVsZCBuYW1lPSJCRU5HQUxJIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVZBTkFHQVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJFQVNURVJOX0FSQUJJQyIvPgotCQk8ZmllbGQgbmFtZT0iRVRISU9QSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkVVUk9QRUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHVUpBUkFUSSIvPgotCQk8ZmllbGQgbmFtZT0iR1VSTVVLSEkiLz4KLQkJPGZpZWxkIG5hbWU9IktBTk5BREEiLz4KLQkJPGZpZWxkIG5hbWU9IktITUVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQU8iLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTEFZQUxBTSIvPgotCQk8ZmllbGQgbmFtZT0iTU9OR09MSUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJNWUFOTUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUklZQSIvPgotCQk8ZmllbGQgbmFtZT0iVEFNSUwiLz4KLQkJPGZpZWxkIG5hbWU9IlRFTFVHVSIvPgotCQk8ZmllbGQgbmFtZT0iVEhBSSIvPgotCQk8ZmllbGQgbmFtZT0iVElCRVRBTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvYXd0L2ZvbnQvTnVtZXJpY1NoYXBlciRSYW5nZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9hd3QvZm9udC9OdW1lcmljU2hhcGVyJFJhbmdlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL2F3dC9mb250L051bWVyaWNTaGFwZXIkUmFuZ2U7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUkFCSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkJBTElORVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJCRU5HQUxJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFNIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVZBTkFHQVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJFQVNURVJOX0FSQUJJQyIvPgotCQk8ZmllbGQgbmFtZT0iRVRISU9QSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkVVUk9QRUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHVUpBUkFUSSIvPgotCQk8ZmllbGQgbmFtZT0iR1VSTVVLSEkiLz4KLQkJPGZpZWxkIG5hbWU9IkpBVkFORVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQU5OQURBIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQVlBSF9MSSIvPgotCQk8ZmllbGQgbmFtZT0iS0hNRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkxBTyIvPgotCQk8ZmllbGQgbmFtZT0iTEVQQ0hBIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSU1CVSIvPgotCQk8ZmllbGQgbmFtZT0iTUFMQVlBTEFNIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUVURUlfTUFZRUsiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTkdPTElBTiIvPgotCQk8ZmllbGQgbmFtZT0iTVlBTk1BUiIvPgotCQk8ZmllbGQgbmFtZT0iTVlBTk1BUl9TSEFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJORVdfVEFJX0xVRSIvPgotCQk8ZmllbGQgbmFtZT0iTktPIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTF9DSElLSSIvPgotCQk8ZmllbGQgbmFtZT0iT1JJWUEiLz4KLQkJPGZpZWxkIG5hbWU9IlNBVVJBU0hUUkEiLz4KLQkJPGZpZWxkIG5hbWU9IlNVTkRBTkVTRSIvPgotCQk8ZmllbGQgbmFtZT0iVEFJX1RIQU1fSE9SQSIvPgotCQk8ZmllbGQgbmFtZT0iVEFJX1RIQU1fVEhBTSIvPgotCQk8ZmllbGQgbmFtZT0iVEFNSUwiLz4KLQkJPGZpZWxkIG5hbWU9IlRFTFVHVSIvPgotCQk8ZmllbGQgbmFtZT0iVEhBSSIvPgotCQk8ZmllbGQgbmFtZT0iVElCRVRBTiIvPgotCQk8ZmllbGQgbmFtZT0iVkFJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9hd3QvZm9udC9UZXh0QXR0cmlidXRlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdGV4dC9BdHRyaWJ1dGVkQ2hhcmFjdGVySXRlcmF0b3IkQXR0cmlidXRlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQUNLR1JPVU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSURJX0VNQkVERElORyIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBUl9SRVBMQUNFTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRkFNSUxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT05UIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JFR1JPVU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlBVVF9NRVRIT0RfSElHSExJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlBVVF9NRVRIT0RfVU5ERVJMSU5FIi8+Ci0JCTxmaWVsZCBuYW1lPSJKVVNUSUZJQ0FUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJKVVNUSUZJQ0FUSU9OX0ZVTEwiLz4KLQkJPGZpZWxkIG5hbWU9IkpVU1RJRklDQVRJT05fTk9ORSIvPgotCQk8ZmllbGQgbmFtZT0iS0VSTklORyIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IktFUk5JTkdfT04iIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMSUdBVFVSRVMiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMSUdBVFVSRVNfT04iIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOVU1FUklDX1NIQVBJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlBPU1RVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IlBPU1RVUkVfT0JMSVFVRSIvPgotCQk8ZmllbGQgbmFtZT0iUE9TVFVSRV9SRUdVTEFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJSVU5fRElSRUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJSVU5fRElSRUNUSU9OX0xUUiIvPgotCQk8ZmllbGQgbmFtZT0iUlVOX0RJUkVDVElPTl9SVEwiLz4KLQkJPGZpZWxkIG5hbWU9IlNJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUklLRVRIUk9VR0giLz4KLQkJPGZpZWxkIG5hbWU9IlNUUklLRVRIUk9VR0hfT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNVUEVSU0NSSVBUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBFUlNDUklQVF9TVUIiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUEVSU0NSSVBUX1NVUEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTV0FQX0NPTE9SUyIvPgotCQk8ZmllbGQgbmFtZT0iU1dBUF9DT0xPUlNfT04iLz4KLQkJPGZpZWxkIG5hbWU9IlRSQUNLSU5HIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iVFJBQ0tJTkdfTE9PU0UiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFDS0lOR19USUdIVCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TRk9STSIvPgotCQk8ZmllbGQgbmFtZT0iVU5ERVJMSU5FIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTkRFUkxJTkVfTE9XX0RBU0hFRCIvPgotCQk8ZmllbGQgbmFtZT0iVU5ERVJMSU5FX0xPV19ET1RURUQiLz4KLQkJPGZpZWxkIG5hbWU9IlVOREVSTElORV9MT1dfR1JBWSIvPgotCQk8ZmllbGQgbmFtZT0iVU5ERVJMSU5FX0xPV19PTkVfUElYRUwiLz4KLQkJPGZpZWxkIG5hbWU9IlVOREVSTElORV9MT1dfVFdPX1BJWEVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTkRFUkxJTkVfT04iLz4KLQkJPGZpZWxkIG5hbWU9IldFSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iV0VJR0hUX0JPTEQiLz4KLQkJPGZpZWxkIG5hbWU9IldFSUdIVF9ERU1JQk9MRCIvPgotCQk8ZmllbGQgbmFtZT0iV0VJR0hUX0RFTUlMSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iV0VJR0hUX0VYVFJBQk9MRCIvPgotCQk8ZmllbGQgbmFtZT0iV0VJR0hUX0VYVFJBX0xJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUlHSFRfSEVBVlkiLz4KLQkJPGZpZWxkIG5hbWU9IldFSUdIVF9MSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iV0VJR0hUX01FRElVTSIvPgotCQk8ZmllbGQgbmFtZT0iV0VJR0hUX1JFR1VMQVIiLz4KLQkJPGZpZWxkIG5hbWU9IldFSUdIVF9TRU1JQk9MRCIvPgotCQk8ZmllbGQgbmFtZT0iV0VJR0hUX1VMVFJBQk9MRCIvPgotCQk8ZmllbGQgbmFtZT0iV0lEVEgiLz4KLQkJPGZpZWxkIG5hbWU9IldJRFRIX0NPTkRFTlNFRCIvPgotCQk8ZmllbGQgbmFtZT0iV0lEVEhfRVhURU5ERUQiLz4KLQkJPGZpZWxkIG5hbWU9IldJRFRIX1JFR1VMQVIiLz4KLQkJPGZpZWxkIG5hbWU9IldJRFRIX1NFTUlfQ09OREVOU0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJXSURUSF9TRU1JX0VYVEVOREVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9iZWFucy9JbmRleGVkUHJvcGVydHlDaGFuZ2VFdmVudCIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2JlYW5zL1Byb3BlcnR5Q2hhbmdlRXZlbnQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXgoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2JlYW5zL1Byb3BlcnR5Q2hhbmdlRXZlbnQiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0V2ZW50T2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV3VmFsdWUoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9sZFZhbHVlKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9wYWdhdGlvbklkKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9wZXJ0eU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3BhZ2F0aW9uSWQoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2JlYW5zL1Byb3BlcnR5Q2hhbmdlTGlzdGVuZXIiIHNpbmNlPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvRXZlbnRMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9InByb3BlcnR5Q2hhbmdlKExqYXZhL2JlYW5zL1Byb3BlcnR5Q2hhbmdlRXZlbnQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2JlYW5zL1Byb3BlcnR5Q2hhbmdlTGlzdGVuZXJQcm94eSIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvRXZlbnRMaXN0ZW5lclByb3h5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvYmVhbnMvUHJvcGVydHlDaGFuZ2VMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9iZWFucy9Qcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvcGVydHlOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2JlYW5zL1Byb3BlcnR5Q2hhbmdlU3VwcG9ydCIgc2luY2U9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihMamF2YS9iZWFucy9Qcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9iZWFucy9Qcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlyZUluZGV4ZWRQcm9wZXJ0eUNoYW5nZShMamF2YS9sYW5nL1N0cmluZztJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpcmVJbmRleGVkUHJvcGVydHlDaGFuZ2UoTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlyZUluZGV4ZWRQcm9wZXJ0eUNoYW5nZShMamF2YS9sYW5nL1N0cmluZztJWlopViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpcmVQcm9wZXJ0eUNoYW5nZShMamF2YS9iZWFucy9Qcm9wZXJ0eUNoYW5nZUV2ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlyZVByb3BlcnR5Q2hhbmdlKExqYXZhL2xhbmcvU3RyaW5nO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaXJlUHJvcGVydHlDaGFuZ2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaXJlUHJvcGVydHlDaGFuZ2UoTGphdmEvbGFuZy9TdHJpbmc7WlopViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3BlcnR5Q2hhbmdlTGlzdGVuZXJzKClbTGphdmEvYmVhbnMvUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9wZXJ0eUNoYW5nZUxpc3RlbmVycyhMamF2YS9sYW5nL1N0cmluZzspW0xqYXZhL2JlYW5zL1Byb3BlcnR5Q2hhbmdlTGlzdGVuZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTGlzdGVuZXJzKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihMamF2YS9iZWFucy9Qcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9iZWFucy9Qcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9CdWZmZXJlZElucHV0U3RyZWFtIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vRmlsdGVySW5wdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07SSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJidWYiLz4KLQkJPGZpZWxkIG5hbWU9ImNvdW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtYXJrbGltaXQiLz4KLQkJPGZpZWxkIG5hbWU9Im1hcmtwb3MiLz4KLQkJPGZpZWxkIG5hbWU9InBvcyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vQnVmZmVyZWRPdXRwdXRTdHJlYW0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9GaWx0ZXJPdXRwdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vT3V0cHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTtJKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImJ1ZiIvPgotCQk8ZmllbGQgbmFtZT0iY291bnQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL0J1ZmZlcmVkUmVhZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vUmVhZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1JlYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9SZWFkZXI7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGluZXMoKUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRMaW5lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL0J1ZmZlcmVkV3JpdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vV3JpdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1dyaXRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9Xcml0ZXI7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3TGluZSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vQnl0ZUFycmF5SW5wdXRTdHJlYW0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JbnB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCSUkpViIvPgotCQk8ZmllbGQgbmFtZT0iYnVmIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb3VudCIvPgotCQk8ZmllbGQgbmFtZT0ibWFyayIvPgotCQk8ZmllbGQgbmFtZT0icG9zIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9CeXRlQXJyYXlPdXRwdXRTdHJlYW0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9PdXRwdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9CeXRlQXJyYXkoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVG8oTGphdmEvaW8vT3V0cHV0U3RyZWFtOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJidWYiLz4KLQkJPGZpZWxkIG5hbWU9ImNvdW50Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9DaGFyQXJyYXlSZWFkZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9SZWFkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0MpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQ0lJKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImJ1ZiIvPgotCQk8ZmllbGQgbmFtZT0iY291bnQiLz4KLQkJPGZpZWxkIG5hbWU9Im1hcmtlZFBvcyIvPgotCQk8ZmllbGQgbmFtZT0icG9zIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9DaGFyQXJyYXlXcml0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9Xcml0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKEMpTGphdmEvaW8vQ2hhckFycmF5V3JpdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvaW8vQ2hhckFycmF5V3JpdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSSlMamF2YS9pby9DaGFyQXJyYXlXcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9DaGFyQXJyYXkoKVtDIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVUbyhMamF2YS9pby9Xcml0ZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9ImJ1ZiIvPgotCQk8ZmllbGQgbmFtZT0iY291bnQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL0NoYXJDb252ZXJzaW9uRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSU9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL0Nsb3NlYWJsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BdXRvQ2xvc2VhYmxlIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vQ29uc29sZSIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vRmx1c2hhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL09iamVjdDspTGphdmEvaW8vQ29uc29sZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGYoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9pby9Db25zb2xlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRMaW5lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkTGluZShMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRQYXNzd29yZCgpW0MiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkUGFzc3dvcmQoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvT2JqZWN0OylbQyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRlcigpTGphdmEvaW8vUmVhZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlcigpTGphdmEvaW8vUHJpbnRXcml0ZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9EYXRhSW5wdXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRCb29sZWFuKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEJ5dGUoKUIiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkQ2hhcigpQyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWREb3VibGUoKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkRmxvYXQoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkRnVsbHkoW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRGdWxseShbQklJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkSW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZExpbmUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRMb25nKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFNob3J0KClTIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFVURigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFVuc2lnbmVkQnl0ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRVbnNpZ25lZFNob3J0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2tpcEJ5dGVzKEkpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vRGF0YUlucHV0U3RyZWFtIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vRmlsdGVySW5wdXRTdHJlYW0iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9EYXRhSW5wdXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkVVRGKExqYXZhL2lvL0RhdGFJbnB1dDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9EYXRhT3V0cHV0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZShbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoW0JJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVCb29sZWFuKFopViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlQnl0ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUJ5dGVzKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVDaGFyKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlQ2hhcnMoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZURvdWJsZShEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUZsb2F0KEYpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlSW50KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlTG9uZyhKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVNob3J0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVVRGKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9EYXRhT3V0cHV0U3RyZWFtIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vRmlsdGVyT3V0cHV0U3RyZWFtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vRGF0YU91dHB1dCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaXplKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3cml0dGVuIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9FT0ZFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vRXh0ZXJuYWxpemFibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRFeHRlcm5hbChMamF2YS9pby9PYmplY3RJbnB1dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlRXh0ZXJuYWwoTGphdmEvaW8vT2JqZWN0T3V0cHV0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9GaWxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvVVJJOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuRXhlY3V0ZSgpWiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5SZWFkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuV3JpdGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGphdmEvaW8vRmlsZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZU5ld0ZpbGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUZW1wRmlsZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvaW8vRmlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUZW1wRmlsZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9GaWxlOylMamF2YS9pby9GaWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZU9uRXhpdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImV4aXN0cygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFic29sdXRlRmlsZSgpTGphdmEvaW8vRmlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBYnNvbHV0ZVBhdGgoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbm9uaWNhbEZpbGUoKUxqYXZhL2lvL0ZpbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2Fub25pY2FsUGF0aCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJlZVNwYWNlKClKIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmVudCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50RmlsZSgpTGphdmEvaW8vRmlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXRoKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3RhbFNwYWNlKClKIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzYWJsZVNwYWNlKClKIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWJzb2x1dGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RpcmVjdG9yeSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmlsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSGlkZGVuKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGFzdE1vZGlmaWVkKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGVuZ3RoKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGlzdCgpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Imxpc3QoTGphdmEvaW8vRmlsZW5hbWVGaWx0ZXI7KVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsaXN0RmlsZXMoKVtMamF2YS9pby9GaWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9Imxpc3RGaWxlcyhMamF2YS9pby9GaWxlRmlsdGVyOylbTGphdmEvaW8vRmlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsaXN0RmlsZXMoTGphdmEvaW8vRmlsZW5hbWVGaWx0ZXI7KVtMamF2YS9pby9GaWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9Imxpc3RSb290cygpW0xqYXZhL2lvL0ZpbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWtkaXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJta2RpcnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW5hbWVUbyhMamF2YS9pby9GaWxlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXhlY3V0YWJsZShaKVoiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXhlY3V0YWJsZShaWilaIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldExhc3RNb2RpZmllZChKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWFkT25seSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlYWRhYmxlKFopWiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWFkYWJsZShaWilaIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdyaXRhYmxlKFopWiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXcml0YWJsZShaWilaIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InRvUGF0aCgpTGphdmEvbmlvL2ZpbGUvUGF0aDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InRvVVJJKClMamF2YS9uZXQvVVJJOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvVVJMKClMamF2YS9uZXQvVVJMOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPGZpZWxkIG5hbWU9InBhdGhTZXBhcmF0b3IiLz4KLQkJPGZpZWxkIG5hbWU9InBhdGhTZXBhcmF0b3JDaGFyIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZXBhcmF0b3IiLz4KLQkJPGZpZWxkIG5hbWU9InNlcGFyYXRvckNoYXIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzeW5jKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsaWQoKVoiLz4KLQkJPGZpZWxkIG5hbWU9ImVyciIvPgotCQk8ZmllbGQgbmFtZT0iaW4iLz4KLQkJPGZpZWxkIG5hbWU9Im91dCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vRmlsZUZpbHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjZXB0KExqYXZhL2lvL0ZpbGU7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL0ZpbGVJbnB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0lucHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0ZpbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFubmVsKClMamF2YS9uaW8vY2hhbm5lbHMvRmlsZUNoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RkQoKUxqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vRmlsZU5vdEZvdW5kRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSU9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL0ZpbGVPdXRwdXRTdHJlYW0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9PdXRwdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlO1opViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFubmVsKClMamF2YS9uaW8vY2hhbm5lbHMvRmlsZUNoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RkQoKUxqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vRmlsZVBlcm1pc3Npb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9QZXJtaXNzaW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9GaWxlUmVhZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSW5wdXRTdHJlYW1SZWFkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlRGVzY3JpcHRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vRmlsZVdyaXRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL091dHB1dFN0cmVhbVdyaXRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0ZpbGU7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vRmlsZW5hbWVGaWx0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdChMamF2YS9pby9GaWxlO0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9GaWx0ZXJJbnB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0lucHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vRmlsdGVyT3V0cHV0U3RyZWFtIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vT3V0cHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTspViIvPgotCQk8ZmllbGQgbmFtZT0ib3V0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9GaWx0ZXJSZWFkZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9SZWFkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vUmVhZGVyOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vRmlsdGVyV3JpdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vV3JpdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1dyaXRlcjspViIvPgotCQk8ZmllbGQgbmFtZT0ib3V0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9GbHVzaGFibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImZsdXNoKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9JT0Vycm9yIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FcnJvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vSU9FeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiIHNpbmNlPSI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9JbnB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXZhaWxhYmxlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFyayhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXJrU3VwcG9ydGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWQoW0IpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWQoW0JJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJza2lwKEopSiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vSW5wdXRTdHJlYW1SZWFkZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9SZWFkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07TGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTtMamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0RGVjb2RlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY29kaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL0ludGVycnVwdGVkSU9FeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8ZmllbGQgbmFtZT0iYnl0ZXNUcmFuc2ZlcnJlZCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vSW52YWxpZENsYXNzRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vT2JqZWN0U3RyZWFtRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJjbGFzc25hbWUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL0ludmFsaWRPYmplY3RFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9PYmplY3RTdHJlYW1FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL0xpbmVOdW1iZXJJbnB1dFN0cmVhbSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0ZpbHRlcklucHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGluZU51bWJlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldExpbmVOdW1iZXIoSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9MaW5lTnVtYmVyUmVhZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vQnVmZmVyZWRSZWFkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vUmVhZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1JlYWRlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lTnVtYmVyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGluZU51bWJlcihJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL05vdEFjdGl2ZUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL09iamVjdFN0cmVhbUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vTm90U2VyaWFsaXphYmxlRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vT2JqZWN0U3RyZWFtRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9PYmplY3RJbnB1dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vRGF0YUlucHV0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BdXRvQ2xvc2VhYmxlIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdmFpbGFibGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKFtCKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKFtCSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRPYmplY3QoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNraXAoSilKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9PYmplY3RJbnB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0lucHV0U3RyZWFtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vT2JqZWN0SW5wdXQiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9PYmplY3RTdHJlYW1Db25zdGFudHMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWZhdWx0UmVhZE9iamVjdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuYWJsZVJlc29sdmVPYmplY3QoWilaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZENsYXNzRGVzY3JpcHRvcigpTGphdmEvaW8vT2JqZWN0U3RyZWFtQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEZpZWxkcygpTGphdmEvaW8vT2JqZWN0SW5wdXRTdHJlYW0kR2V0RmllbGQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZE9iamVjdE92ZXJyaWRlKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkU3RyZWFtSGVhZGVyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFVuc2hhcmVkKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlclZhbGlkYXRpb24oTGphdmEvaW8vT2JqZWN0SW5wdXRWYWxpZGF0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmVDbGFzcyhMamF2YS9pby9PYmplY3RTdHJlYW1DbGFzczspTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlT2JqZWN0KExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlUHJveHlDbGFzcyhbTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9PYmplY3RJbnB1dFN0cmVhbSRHZXRGaWVsZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVmYXVsdGVkKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KExqYXZhL2xhbmcvU3RyaW5nO0IpQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL1N0cmluZztDKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvbGFuZy9TdHJpbmc7RClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KExqYXZhL2xhbmcvU3RyaW5nO0YpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL1N0cmluZztJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvbGFuZy9TdHJpbmc7SilKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvbGFuZy9TdHJpbmc7UylTIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KExqYXZhL2xhbmcvU3RyaW5nO1opWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iamVjdFN0cmVhbUNsYXNzKClMamF2YS9pby9PYmplY3RTdHJlYW1DbGFzczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL09iamVjdElucHV0VmFsaWRhdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsaWRhdGVPYmplY3QoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL09iamVjdE91dHB1dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vRGF0YU91dHB1dCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQXV0b0Nsb3NlYWJsZSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlT2JqZWN0KExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9PYmplY3RPdXRwdXRTdHJlYW0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9PdXRwdXRTdHJlYW0iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9PYmplY3RPdXRwdXQiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9PYmplY3RTdHJlYW1Db25zdGFudHMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vT3V0cHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYW5ub3RhdGVDbGFzcyhMamF2YS9sYW5nL0NsYXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYW5ub3RhdGVQcm94eUNsYXNzKExqYXZhL2xhbmcvQ2xhc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWZhdWx0V3JpdGVPYmplY3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmFpbigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuYWJsZVJlcGxhY2VPYmplY3QoWilaIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RmllbGRzKClMamF2YS9pby9PYmplY3RPdXRwdXRTdHJlYW0kUHV0RmllbGQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZU9iamVjdChMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1c2VQcm90b2NvbFZlcnNpb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVDbGFzc0Rlc2NyaXB0b3IoTGphdmEvaW8vT2JqZWN0U3RyZWFtQ2xhc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUZpZWxkcygpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlT2JqZWN0T3ZlcnJpZGUoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVN0cmVhbUhlYWRlcigpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVW5zaGFyZWQoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL09iamVjdE91dHB1dFN0cmVhbSRQdXRGaWVsZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL2xhbmcvU3RyaW5nO0IpViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChMamF2YS9sYW5nL1N0cmluZztDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoTGphdmEvbGFuZy9TdHJpbmc7RClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL2xhbmcvU3RyaW5nO0YpViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoTGphdmEvbGFuZy9TdHJpbmc7SilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL2xhbmcvU3RyaW5nO1MpViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZShMamF2YS9pby9PYmplY3RPdXRwdXQ7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9PYmplY3RTdHJlYW1DbGFzcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yQ2xhc3MoKUxqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmllbGQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2lvL09iamVjdFN0cmVhbUZpZWxkOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpZWxkcygpW0xqYXZhL2lvL09iamVjdFN0cmVhbUZpZWxkOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcmlhbFZlcnNpb25VSUQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb29rdXAoTGphdmEvbGFuZy9DbGFzczspTGphdmEvaW8vT2JqZWN0U3RyZWFtQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9va3VwQW55KExqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2lvL09iamVjdFN0cmVhbUNsYXNzOyIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX0ZJRUxEUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vT2JqZWN0U3RyZWFtQ29uc3RhbnRzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RPQ09MX1ZFUlNJT05fMSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPVE9DT0xfVkVSU0lPTl8yIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19CTE9DS19EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19FTlVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19FWFRFUk5BTElaQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iU0NfU0VSSUFMSVpBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19XUklURV9NRVRIT0QiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUkVBTV9NQUdJQyIvPgotCQk8ZmllbGQgbmFtZT0iU1RSRUFNX1ZFUlNJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNVQkNMQVNTX0lNUExFTUVOVEFUSU9OX1BFUk1JU1NJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNVQlNUSVRVVElPTl9QRVJNSVNTSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQ19BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iVENfQkFTRSIvPgotCQk8ZmllbGQgbmFtZT0iVENfQkxPQ0tEQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQ19CTE9DS0RBVEFMT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQ19DTEFTUyIvPgotCQk8ZmllbGQgbmFtZT0iVENfQ0xBU1NERVNDIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQ19FTkRCTE9DS0RBVEEiLz4KLQkJPGZpZWxkIG5hbWU9IlRDX0VOVU0iLz4KLQkJPGZpZWxkIG5hbWU9IlRDX0VYQ0VQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iVENfTE9OR1NUUklORyIvPgotCQk8ZmllbGQgbmFtZT0iVENfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQ19OVUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQ19PQkpFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IlRDX1BST1hZQ0xBU1NERVNDIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQ19SRUZFUkVOQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlRDX1JFU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQ19TVFJJTkciLz4KLQkJPGZpZWxkIG5hbWU9ImJhc2VXaXJlSGFuZGxlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9PYmplY3RTdHJlYW1FeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vT2JqZWN0U3RyZWFtRmllbGQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3M7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2Zmc2V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlQ29kZSgpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGVTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUHJpbWl0aXZlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVbnNoYXJlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9mZnNldChJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL09wdGlvbmFsRGF0YUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL09iamVjdFN0cmVhbUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9ImVvZiIvPgotCQk8ZmllbGQgbmFtZT0ibGVuZ3RoIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9PdXRwdXRTdHJlYW0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL0Nsb3NlYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL0ZsdXNoYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZShbQklJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL091dHB1dFN0cmVhbVdyaXRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL1dyaXRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vT3V0cHV0U3RyZWFtO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTtMamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTtMamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0RW5jb2RlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY29kaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL1BpcGVkSW5wdXRTdHJlYW0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JbnB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1BpcGVkT3V0cHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1BpcGVkT3V0cHV0U3RyZWFtO0kpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0KExqYXZhL2lvL1BpcGVkT3V0cHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVjZWl2ZShJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IlBJUEVfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iYnVmZmVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbiIvPgotCQk8ZmllbGQgbmFtZT0ib3V0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9QaXBlZE91dHB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL091dHB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9QaXBlZElucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29ubmVjdChMamF2YS9pby9QaXBlZElucHV0U3RyZWFtOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9QaXBlZFJlYWRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL1JlYWRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1BpcGVkV3JpdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1BpcGVkV3JpdGVyO0kpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0KExqYXZhL2lvL1BpcGVkV3JpdGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9QaXBlZFdyaXRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL1dyaXRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9QaXBlZFJlYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGphdmEvaW8vUGlwZWRSZWFkZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL1ByaW50U3RyZWFtIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vRmlsdGVyT3V0cHV0U3RyZWFtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BcHBlbmRhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0ZpbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vT3V0cHV0U3RyZWFtO1opViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07WkxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKEMpTGphdmEvaW8vUHJpbnRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS9pby9QcmludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpTGphdmEvaW8vUHJpbnRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tFcnJvcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyRXJyb3IoKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL09iamVjdDspTGphdmEvaW8vUHJpbnRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL3V0aWwvTG9jYWxlO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL09iamVjdDspTGphdmEvaW8vUHJpbnRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnQoQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnQoRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnQoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnQoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnQoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InByaW50KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InByaW50KFtDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGYoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9pby9QcmludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGYoTGphdmEvdXRpbC9Mb2NhbGU7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9pby9QcmludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGxuKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnRsbihDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGxuKEQpViIvPgotCQk8bWV0aG9kIG5hbWU9InByaW50bG4oRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnRsbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGxuKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InByaW50bG4oTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGxuKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnRsbihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGxuKFtDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFcnJvcigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vUHJpbnRXcml0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9Xcml0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1dyaXRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9Xcml0ZXI7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKEMpTGphdmEvaW8vUHJpbnRXcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS9pby9QcmludFdyaXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpTGphdmEvaW8vUHJpbnRXcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tFcnJvcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyRXJyb3IoKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL09iamVjdDspTGphdmEvaW8vUHJpbnRXcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL3V0aWwvTG9jYWxlO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL09iamVjdDspTGphdmEvaW8vUHJpbnRXcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnQoQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnQoRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnQoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnQoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnQoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InByaW50KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InByaW50KFtDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGYoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9pby9QcmludFdyaXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGYoTGphdmEvdXRpbC9Mb2NhbGU7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9pby9QcmludFdyaXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGxuKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnRsbihDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGxuKEQpViIvPgotCQk8bWV0aG9kIG5hbWU9InByaW50bG4oRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnRsbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGxuKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InByaW50bG4oTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGxuKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbnRsbihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludGxuKFtDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFcnJvcigpViIvPgotCQk8ZmllbGQgbmFtZT0ib3V0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9QdXNoYmFja0lucHV0U3RyZWFtIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vRmlsdGVySW5wdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWFkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVhZChbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWFkKFtCSUkpViIvPgotCQk8ZmllbGQgbmFtZT0iYnVmIi8+Ci0JCTxmaWVsZCBuYW1lPSJwb3MiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL1B1c2hiYWNrUmVhZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vRmlsdGVyUmVhZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1JlYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9SZWFkZXI7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWFkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVhZChbQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWFkKFtDSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vUmFuZG9tQWNjZXNzRmlsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vRGF0YUlucHV0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vRGF0YU91dHB1dCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhbm5lbCgpTGphdmEvbmlvL2NoYW5uZWxzL0ZpbGVDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZEKClMamF2YS9pby9GaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWxlUG9pbnRlcigpSiIvPgotCQk8bWV0aG9kIG5hbWU9Imxlbmd0aCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKFtCKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKFtCSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNlZWsoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGVuZ3RoKEopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vUmVhZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL1JlYWRhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFyayhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXJrU3VwcG9ydGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWQoW0MpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWQoW0NJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNraXAoSilKIi8+Ci0JCTxmaWVsZCBuYW1lPSJsb2NrIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9TZXF1ZW5jZUlucHV0U3RyZWFtIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSW5wdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07TGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9FbnVtZXJhdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZVBlcm1pc3Npb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9CYXNpY1Blcm1pc3Npb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL1N0cmVhbUNvcnJ1cHRlZEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL09iamVjdFN0cmVhbUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vU3RyZWFtVG9rZW5pemVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1JlYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbW1lbnRDaGFyKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVvbElzU2lnbmlmaWNhbnQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGluZW5vKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG93ZXJDYXNlTW9kZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0VG9rZW4oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcmRpbmFyeUNoYXIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3JkaW5hcnlDaGFycyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VOdW1iZXJzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHVzaEJhY2soKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdW90ZUNoYXIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXRTeW50YXgoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzbGFzaFNsYXNoQ29tbWVudHMoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2xhc2hTdGFyQ29tbWVudHMoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0id2hpdGVzcGFjZUNoYXJzKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3b3JkQ2hhcnMoSUkpViIvPgotCQk8ZmllbGQgbmFtZT0iVFRfRU9GIi8+Ci0JCTxmaWVsZCBuYW1lPSJUVF9FT0wiLz4KLQkJPGZpZWxkIG5hbWU9IlRUX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iVFRfV09SRCIvPgotCQk8ZmllbGQgbmFtZT0ibnZhbCIvPgotCQk8ZmllbGQgbmFtZT0ic3ZhbCIvPgotCQk8ZmllbGQgbmFtZT0idHR5cGUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL1N0cmluZ0J1ZmZlcklucHV0U3RyZWFtIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSW5wdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9ImJ1ZmZlciIvPgotCQk8ZmllbGQgbmFtZT0iY291bnQiLz4KLQkJPGZpZWxkIG5hbWU9InBvcyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vU3RyaW5nUmVhZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vUmVhZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9TdHJpbmdXcml0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9Xcml0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKEMpTGphdmEvaW8vU3RyaW5nV3JpdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvaW8vU3RyaW5nV3JpdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSSlMamF2YS9pby9TdHJpbmdXcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnVmZmVyKClMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL1N5bmNGYWlsZWRFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvaW8vVVRGRGF0YUZvcm1hdEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0lPRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9VbmNoZWNrZWRJT0V4Y2VwdGlvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSU9FeGNlcHRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vSU9FeGNlcHRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYXVzZSgpTGphdmEvaW8vSU9FeGNlcHRpb247Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSU9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2lvL1dyaXRlQWJvcnRlZEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL09iamVjdFN0cmVhbUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0V4Y2VwdGlvbjspViIvPgotCQk8ZmllbGQgbmFtZT0iZGV0YWlsIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9pby9Xcml0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL0Nsb3NlYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL0ZsdXNoYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQXBwZW5kYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChDKUxqYXZhL2lvL1dyaXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2lvL1dyaXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpTGphdmEvaW8vV3JpdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoTGphdmEvbGFuZy9TdHJpbmc7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKFtDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZShbQ0lJKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImxvY2siLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvQWJzdHJhY3RNZXRob2RFcnJvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSW5jb21wYXRpYmxlQ2xhc3NDaGFuZ2VFcnJvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9BYnN0cmFjdFN0cmluZ0J1aWxkZXIiIHNpbmNlPSIxIiByZW1vdmVkPSIyOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0FwcGVuZGFibGUiIHNpbmNlPSIyNiIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2hhclNlcXVlbmNlIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoQylMamF2YS9sYW5nL0Fic3RyYWN0U3RyaW5nQnVpbGRlcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9BYnN0cmFjdFN0cmluZ0J1aWxkZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpTGphdmEvbGFuZy9BYnN0cmFjdFN0cmluZ0J1aWxkZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYXBhY2l0eSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNoYXJBdChJKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb2RlUG9pbnRBdChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb2RlUG9pbnRCZWZvcmUoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29kZVBvaW50Q291bnQoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImVuc3VyZUNhcGFjaXR5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJzKElJW0NJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmRleE9mKExqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5kZXhPZihMamF2YS9sYW5nL1N0cmluZztJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXN0SW5kZXhPZihMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9Imxhc3RJbmRleE9mKExqYXZhL2xhbmcvU3RyaW5nO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imxlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mZnNldEJ5Q29kZVBvaW50cyhJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hhckF0KElDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMZW5ndGgoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViU2VxdWVuY2UoSUkpTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3Vic3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3Vic3RyaW5nKElJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRyaW1Ub1NpemUoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvQXBwZW5kYWJsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKEMpTGphdmEvbGFuZy9BcHBlbmRhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9BcHBlbmRhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSSlMamF2YS9sYW5nL0FwcGVuZGFibGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL0FyaXRobWV0aWNFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9BcnJheVN0b3JlRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL0Fzc2VydGlvbkVycm9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FcnJvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9Cb29sZWFuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYm9vbGVhblZhbHVlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZShaWilJIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGphdmEvbGFuZy9Cb29sZWFuOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9vbGVhbihMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc2hDb2RlKFopSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9naWNhbEFuZChaWilaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2dpY2FsT3IoWlopWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9naWNhbFhvcihaWilaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZUJvb2xlYW4oTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1N0cmluZyhaKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvQm9vbGVhbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKFopTGphdmEvbGFuZy9Cb29sZWFuOyIvPgotCQk8ZmllbGQgbmFtZT0iRkFMU0UiLz4KLQkJPGZpZWxkIG5hbWU9IlRSVUUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvQm9vdHN0cmFwTWV0aG9kRXJyb3IiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9MaW5rYWdlRXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvQnl0ZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvTnVtYmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEIpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmUoQkIpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL2xhbmcvQnl0ZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29kZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9CeXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc2hDb2RlKEIpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VCeXRlKExqYXZhL2xhbmcvU3RyaW5nOylCIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VCeXRlKExqYXZhL2xhbmcvU3RyaW5nO0kpQiIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKEIpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9VbnNpZ25lZEludChCKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InRvVW5zaWduZWRMb25nKEIpSiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihCKUxqYXZhL2xhbmcvQnl0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0J5dGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZztJKUxqYXZhL2xhbmcvQnl0ZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkJZVEVTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iTUlOX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL0NoYXJTZXF1ZW5jZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hhckF0KEkpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImNoYXJzKClMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW07IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb2RlUG9pbnRzKClMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW07IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJsZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJTZXF1ZW5jZShJSSlMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvQ2hhcmFjdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hhckNvdW50KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNoYXJWYWx1ZSgpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvZGVQb2ludEF0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvZGVQb2ludEF0KFtDSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29kZVBvaW50QXQoW0NJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29kZVBvaW50QmVmb3JlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvZGVQb2ludEJlZm9yZShbQ0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvZGVQb2ludEJlZm9yZShbQ0lJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb2RlUG9pbnRDb3VudChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29kZVBvaW50Q291bnQoW0NJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZShDQylJIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGphdmEvbGFuZy9DaGFyYWN0ZXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaWdpdChDSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlnaXQoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckRpZ2l0KElJKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXJlY3Rpb25hbGl0eShDKUIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXJlY3Rpb25hbGl0eShJKUIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKEkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1lcmljVmFsdWUoQylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtZXJpY1ZhbHVlKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoQylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNoQ29kZShDKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImhpZ2hTdXJyb2dhdGUoSSlDIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FscGhhYmV0aWMoSSlaIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JtcENvZGVQb2ludChJKVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGVmaW5lZChDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RlZmluZWQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEaWdpdChDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RpZ2l0KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSGlnaFN1cnJvZ2F0ZShDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0lTT0NvbnRyb2woQylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJU09Db250cm9sKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSWRlbnRpZmllcklnbm9yYWJsZShDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0lkZW50aWZpZXJJZ25vcmFibGUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJZGVvZ3JhcGhpYyhJKVoiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSmF2YUlkZW50aWZpZXJQYXJ0KEMpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSmF2YUlkZW50aWZpZXJQYXJ0KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSmF2YUlkZW50aWZpZXJTdGFydChDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0phdmFJZGVudGlmaWVyU3RhcnQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNKYXZhTGV0dGVyKEMpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0phdmFMZXR0ZXJPckRpZ2l0KEMpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xldHRlcihDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xldHRlcihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xldHRlck9yRGlnaXQoQylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMZXR0ZXJPckRpZ2l0KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG93U3Vycm9nYXRlKEMpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG93ZXJDYXNlKEMpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG93ZXJDYXNlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTWlycm9yZWQoQylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNNaXJyb3JlZChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NwYWNlKEMpWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NwYWNlQ2hhcihDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NwYWNlQ2hhcihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N1cHBsZW1lbnRhcnlDb2RlUG9pbnQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTdXJyb2dhdGUoQylaIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N1cnJvZ2F0ZVBhaXIoQ0MpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVGl0bGVDYXNlKEMpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVGl0bGVDYXNlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVW5pY29kZUlkZW50aWZpZXJQYXJ0KEMpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVW5pY29kZUlkZW50aWZpZXJQYXJ0KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVW5pY29kZUlkZW50aWZpZXJTdGFydChDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VuaWNvZGVJZGVudGlmaWVyU3RhcnQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVcHBlckNhc2UoQylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVcHBlckNhc2UoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYWxpZENvZGVQb2ludChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1doaXRlc3BhY2UoQylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXaGl0ZXNwYWNlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imxvd1N1cnJvZ2F0ZShJKUMiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mZnNldEJ5Q29kZVBvaW50cyhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2Zmc2V0QnlDb2RlUG9pbnRzKFtDSUlJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmV2ZXJzZUJ5dGVzKEMpQyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQ2hhcnMoSSlbQyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQ2hhcnMoSVtDSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9Db2RlUG9pbnQoQ0MpSSIvPgotCQk8bWV0aG9kIG5hbWU9InRvTG93ZXJDYXNlKEMpQyIvPgotCQk8bWV0aG9kIG5hbWU9InRvTG93ZXJDYXNlKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKEMpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9UaXRsZUNhc2UoQylDIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9UaXRsZUNhc2UoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9VcHBlckNhc2UoQylDIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9VcHBlckNhc2UoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihDKUxqYXZhL2xhbmcvQ2hhcmFjdGVyOyIvPgotCQk8ZmllbGQgbmFtZT0iQllURVMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQ09NQklOSU5HX1NQQUNJTkdfTUFSSyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OTkVDVE9SX1BVTkNUVUFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05UUk9MIi8+Ci0JCTxmaWVsZCBuYW1lPSJDVVJSRU5DWV9TWU1CT0wiLz4KLQkJPGZpZWxkIG5hbWU9IkRBU0hfUFVOQ1RVQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkRFQ0lNQUxfRElHSVRfTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9BUkFCSUNfTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9CT1VOREFSWV9ORVVUUkFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfRVVST1BFQU5fTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfTEVGVF9UT19SSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfTEVGVF9UT19SSUdIVF9FTUJFRERJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX05PTlNQQUNJTkdfTUFSSyIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfT1RIRVJfTkVVVFJBTFMiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX1BBUkFHUkFQSF9TRVBBUkFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX1JJR0hUX1RPX0xFRlQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX1JJR0hUX1RPX0xFRlRfQVJBQklDIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVJFQ1RJT05BTElUWV9SSUdIVF9UT19MRUZUX0VNQkVERElORyIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfUklHSFRfVE9fTEVGVF9PVkVSUklERSIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfU0VHTUVOVF9TRVBBUkFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTkFMSVRZX1VOREVGSU5FRCIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OQUxJVFlfV0hJVEVTUEFDRSIvPgotCQk8ZmllbGQgbmFtZT0iRU5DTE9TSU5HX01BUksiLz4KLQkJPGZpZWxkIG5hbWU9IkVORF9QVU5DVFVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iRklOQUxfUVVPVEVfUFVOQ1RVQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVCIvPgotCQk8ZmllbGQgbmFtZT0iSU5JVElBTF9RVU9URV9QVU5DVFVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iTEVUVEVSX05VTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iTElORV9TRVBBUkFUT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkxPV0VSQ0FTRV9MRVRURVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BVEhfU1lNQk9MIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfQ09ERV9QT0lOVCIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX0hJR0hfU1VSUk9HQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfTE9XX1NVUlJPR0FURSIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1JBRElYIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfU1VSUk9HQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9DT0RFX1BPSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fSElHSF9TVVJST0dBVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9MT1dfU1VSUk9HQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fUkFESVgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9TVVBQTEVNRU5UQVJZX0NPREVfUE9JTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9TVVJST0dBVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iTU9ESUZJRVJfTEVUVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RJRklFUl9TWU1CT0wiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PTl9TUEFDSU5HX01BUksiLz4KLQkJPGZpZWxkIG5hbWU9Ik9USEVSX0xFVFRFUiIvPgotCQk8ZmllbGQgbmFtZT0iT1RIRVJfTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJPVEhFUl9QVU5DVFVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iT1RIRVJfU1lNQk9MIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVJBR1JBUEhfU0VQQVJBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklWQVRFX1VTRSIvPgotCQk8ZmllbGQgbmFtZT0iU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iU1BBQ0VfU0VQQVJBVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFSVF9QVU5DVFVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iU1VSUk9HQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSVRMRUNBU0VfTEVUVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTkFTU0lHTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJVUFBFUkNBU0VfTEVUVEVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL0NoYXJhY3RlciRTdWJzZXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9DaGFyYWN0ZXIkVW5pY29kZUJsb2NrIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9DaGFyYWN0ZXIkU3Vic2V0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yTmFtZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9DaGFyYWN0ZXIkVW5pY29kZUJsb2NrOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKEMpTGphdmEvbGFuZy9DaGFyYWN0ZXIkVW5pY29kZUJsb2NrOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKEkpTGphdmEvbGFuZy9DaGFyYWN0ZXIkVW5pY29kZUJsb2NrOyIvPgotCQk8ZmllbGQgbmFtZT0iQUVHRUFOX05VTUJFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkFMQ0hFTUlDQUxfU1lNQk9MUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTFBIQUJFVElDX1BSRVNFTlRBVElPTl9GT1JNUyIvPgotCQk8ZmllbGQgbmFtZT0iQU5DSUVOVF9HUkVFS19NVVNJQ0FMX05PVEFUSU9OIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkFOQ0lFTlRfR1JFRUtfTlVNQkVSUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTkNJRU5UX1NZTUJPTFMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQVJBQklDIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkFCSUNfRVhURU5ERURfQSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUkFCSUNfTUFUSEVNQVRJQ0FMX0FMUEhBQkVUSUNfU1lNQk9MUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUkFCSUNfUFJFU0VOVEFUSU9OX0ZPUk1TX0EiLz4KLQkJPGZpZWxkIG5hbWU9IkFSQUJJQ19QUkVTRU5UQVRJT05fRk9STVNfQiIvPgotCQk8ZmllbGQgbmFtZT0iQVJBQklDX1NVUFBMRU1FTlQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQVJNRU5JQU4iLz4KLQkJPGZpZWxkIG5hbWU9IkFSUk9XUyIvPgotCQk8ZmllbGQgbmFtZT0iQVZFU1RBTiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQUxJTkVTRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU1VTSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCQU1VTV9TVVBQTEVNRU5UIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkJBU0lDX0xBVElOIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVRBSyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCRU5HQUxJIi8+Ci0JCTxmaWVsZCBuYW1lPSJCTE9DS19FTEVNRU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iQk9QT01PRk8iLz4KLQkJPGZpZWxkIG5hbWU9IkJPUE9NT0ZPX0VYVEVOREVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT1hfRFJBV0lORyIvPgotCQk8ZmllbGQgbmFtZT0iQlJBSE1JIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkJSQUlMTEVfUEFUVEVSTlMiLz4KLQkJPGZpZWxkIG5hbWU9IkJVR0lORVNFIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkJVSElEIi8+Ci0JCTxmaWVsZCBuYW1lPSJCWVpBTlRJTkVfTVVTSUNBTF9TWU1CT0xTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQVJJQU4iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBS01BIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU0iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hFUk9LRUUiLz4KLQkJPGZpZWxkIG5hbWU9IkNKS19DT01QQVRJQklMSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSktfQ09NUEFUSUJJTElUWV9GT1JNUyIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIUyIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBIU19TVVBQTEVNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSktfUkFESUNBTFNfU1VQUExFTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1NUUk9LRVMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0pLX1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSktfVU5JRklFRF9JREVPR1JBUEhTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9BIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9CIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9DIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkNKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0QiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQ09NQklOSU5HX0RJQUNSSVRJQ0FMX01BUktTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01CSU5JTkdfRElBQ1JJVElDQUxfTUFSS1NfU1VQUExFTUVOVCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT01CSU5JTkdfSEFMRl9NQVJLUyIvPgotCQk8ZmllbGQgbmFtZT0iQ09NQklOSU5HX01BUktTX0ZPUl9TWU1CT0xTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01NT05fSU5ESUNfTlVNQkVSX0ZPUk1TIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRST0xfUElDVFVSRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkNPUFRJQyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT1VOVElOR19ST0RfTlVNRVJBTFMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQ1VORUlGT1JNIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkNVTkVJRk9STV9OVU1CRVJTX0FORF9QVU5DVFVBVElPTiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDVVJSRU5DWV9TWU1CT0xTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDWVBSSU9UX1NZTExBQkFSWSIvPgotCQk8ZmllbGQgbmFtZT0iQ1lSSUxMSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkNZUklMTElDX0VYVEVOREVEX0EiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iQ1lSSUxMSUNfRVhURU5ERURfQiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDWVJJTExJQ19TVVBQTEVNRU5UQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVNFUkVUIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVZBTkFHQVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVZBTkFHQVJJX0VYVEVOREVEIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkRJTkdCQVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJET01JTk9fVElMRVMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRUdZUFRJQU5fSElFUk9HTFlQSFMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRU1PVElDT05TIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ0xPU0VEX0FMUEhBTlVNRVJJQ1MiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ0xPU0VEX0FMUEhBTlVNRVJJQ19TVVBQTEVNRU5UIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFMiLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ0xPU0VEX0lERU9HUkFQSElDX1NVUFBMRU1FTlQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRVRISU9QSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkVUSElPUElDX0VYVEVOREVEIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkVUSElPUElDX0VYVEVOREVEX0EiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iRVRISU9QSUNfU1VQUExFTUVOVCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHRU5FUkFMX1BVTkNUVUFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRU9NRVRSSUNfU0hBUEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRU9SR0lBTiIvPgotCQk8ZmllbGQgbmFtZT0iR0VPUkdJQU5fU1VQUExFTUVOVCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTEFHT0xJVElDIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkdPVEhJQyIvPgotCQk8ZmllbGQgbmFtZT0iR1JFRUsiLz4KLQkJPGZpZWxkIG5hbWU9IkdSRUVLX0VYVEVOREVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHVUpBUkFUSSIvPgotCQk8ZmllbGQgbmFtZT0iR1VSTVVLSEkiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTEZXSURUSF9BTkRfRlVMTFdJRFRIX0ZPUk1TIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQU5HVUxfQ09NUEFUSUJJTElUWV9KQU1PIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQU5HVUxfSkFNTyIvPgotCQk8ZmllbGQgbmFtZT0iSEFOR1VMX0pBTU9fRVhURU5ERURfQSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIQU5HVUxfSkFNT19FWFRFTkRFRF9CIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTkdVTF9TWUxMQUJMRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTlVOT08iLz4KLQkJPGZpZWxkIG5hbWU9IkhFQlJFVyIvPgotCQk8ZmllbGQgbmFtZT0iSElHSF9QUklWQVRFX1VTRV9TVVJST0dBVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJISUdIX1NVUlJPR0FURVMiLz4KLQkJPGZpZWxkIG5hbWU9IkhJUkFHQU5BIi8+Ci0JCTxmaWVsZCBuYW1lPSJJREVPR1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBFUklBTF9BUkFNQUlDIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IklOU0NSSVBUSU9OQUxfUEFITEFWSSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNDUklQVElPTkFMX1BBUlRISUFOIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IklQQV9FWFRFTlNJT05TIi8+Ci0JCTxmaWVsZCBuYW1lPSJKQVZBTkVTRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLQUlUSEkiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iS0FOQV9TVVBQTEVNRU5UIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IktBTkJVTiIvPgotCQk8ZmllbGQgbmFtZT0iS0FOR1hJX1JBRElDQUxTIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQU5OQURBIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQVRBS0FOQSIvPgotCQk8ZmllbGQgbmFtZT0iS0FUQUtBTkFfUEhPTkVUSUNfRVhURU5TSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iS0FZQUhfTEkiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iS0hBUk9TSFRISSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJLSE1FUiIvPgotCQk8ZmllbGQgbmFtZT0iS0hNRVJfU1lNQk9MUyIvPgotCQk8ZmllbGQgbmFtZT0iTEFPIi8+Ci0JCTxmaWVsZCBuYW1lPSJMQVRJTl8xX1NVUFBMRU1FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkxBVElOX0VYVEVOREVEX0EiLz4KLQkJPGZpZWxkIG5hbWU9IkxBVElOX0VYVEVOREVEX0FERElUSU9OQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkxBVElOX0VYVEVOREVEX0IiLz4KLQkJPGZpZWxkIG5hbWU9IkxBVElOX0VYVEVOREVEX0MiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTEFUSU5fRVhURU5ERURfRCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMRVBDSEEiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTEVUVEVSTElLRV9TWU1CT0xTIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSU1CVSIvPgotCQk8ZmllbGQgbmFtZT0iTElORUFSX0JfSURFT0dSQU1TIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSU5FQVJfQl9TWUxMQUJBUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkxJU1UiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9XX1NVUlJPR0FURVMiLz4KLQkJPGZpZWxkIG5hbWU9IkxZQ0lBTiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMWURJQU4iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTUFISk9OR19USUxFUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQUxBWUFMQU0iLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTkRBSUMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTUFUSEVNQVRJQ0FMX0FMUEhBTlVNRVJJQ19TWU1CT0xTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVRIRU1BVElDQUxfT1BFUkFUT1JTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUVURUlfTUFZRUsiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTUVFVEVJX01BWUVLX0VYVEVOU0lPTlMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTUVST0lUSUNfQ1VSU0lWRSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNRVJPSVRJQ19ISUVST0dMWVBIUyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNSUFPIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJPTFNfQSIvPgotCQk8ZmllbGQgbmFtZT0iTUlTQ0VMTEFORU9VU19NQVRIRU1BVElDQUxfU1lNQk9MU19CIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSVNDRUxMQU5FT1VTX1NZTUJPTFMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JU0NFTExBTkVPVVNfU1lNQk9MU19BTkRfQVJST1dTIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSVNDRUxMQU5FT1VTX1NZTUJPTFNfQU5EX1BJQ1RPR1JBUEhTIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JU0NFTExBTkVPVVNfVEVDSE5JQ0FMIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RJRklFUl9UT05FX0xFVFRFUlMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTU9OR09MSUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJNVVNJQ0FMX1NZTUJPTFMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1ZQU5NQVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1ZQU5NQVJfRVhURU5ERURfQSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJORVdfVEFJX0xVRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOS08iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iTlVNQkVSX0ZPUk1TIi8+Ci0JCTxmaWVsZCBuYW1lPSJPR0hBTSIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX0lUQUxJQyIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX1BFUlNJQU4iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX1NPVVRIX0FSQUJJQU4iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX1RVUktJQyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPTF9DSElLSSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPUFRJQ0FMX0NIQVJBQ1RFUl9SRUNPR05JVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iT1JJWUEiLz4KLQkJPGZpZWxkIG5hbWU9Ik9TTUFOWUEiLz4KLQkJPGZpZWxkIG5hbWU9IlBIQUdTX1BBIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlBIQUlTVE9TX0RJU0MiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iUEhPRU5JQ0lBTiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORVRJQ19FWFRFTlNJT05TIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSE9ORVRJQ19FWFRFTlNJT05TX1NVUFBMRU1FTlQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iUExBWUlOR19DQVJEUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUklWQVRFX1VTRV9BUkVBIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUpBTkciIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iUlVNSV9OVU1FUkFMX1NZTUJPTFMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iUlVOSUMiLz4KLQkJPGZpZWxkIG5hbWU9IlNBTUFSSVRBTiIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTQVVSQVNIVFJBIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlNIQVJBREEiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iU0hBVklBTiIvPgotCQk8ZmllbGQgbmFtZT0iU0lOSEFMQSIvPgotCQk8ZmllbGQgbmFtZT0iU01BTExfRk9STV9WQVJJQU5UUyIvPgotCQk8ZmllbGQgbmFtZT0iU09SQV9TT01QRU5HIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNQQUNJTkdfTU9ESUZJRVJfTEVUVEVSUyIvPgotCQk8ZmllbGQgbmFtZT0iU1BFQ0lBTFMiLz4KLQkJPGZpZWxkIG5hbWU9IlNVTkRBTkVTRSIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVU5EQU5FU0VfU1VQUExFTUVOVCIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBFUlNDUklQVFNfQU5EX1NVQlNDUklQVFMiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBMRU1FTlRBTF9BUlJPV1NfQSIvPgotCQk8ZmllbGQgbmFtZT0iU1VQUExFTUVOVEFMX0FSUk9XU19CIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBQTEVNRU5UQUxfTUFUSEVNQVRJQ0FMX09QRVJBVE9SUyIvPgotCQk8ZmllbGQgbmFtZT0iU1VQUExFTUVOVEFMX1BVTkNUVUFUSU9OIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlNVUFBMRU1FTlRBUllfUFJJVkFURV9VU0VfQVJFQV9BIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVVBQTEVNRU5UQVJZX1BSSVZBVEVfVVNFX0FSRUFfQiIvPgotCQk8ZmllbGQgbmFtZT0iU1VSUk9HQVRFU19BUkVBIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iU1lMT1RJX05BR1JJIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlNZUklBQyIvPgotCQk8ZmllbGQgbmFtZT0iVEFHQUxPRyIvPgotCQk8ZmllbGQgbmFtZT0iVEFHQkFOV0EiLz4KLQkJPGZpZWxkIG5hbWU9IlRBR1MiLz4KLQkJPGZpZWxkIG5hbWU9IlRBSV9MRSIvPgotCQk8ZmllbGQgbmFtZT0iVEFJX1RIQU0iIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVEFJX1ZJRVQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVEFJX1hVQU5fSklOR19TWU1CT0xTIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUtSSSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQU1JTCIvPgotCQk8ZmllbGQgbmFtZT0iVEVMVUdVIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSEFBTkEiLz4KLQkJPGZpZWxkIG5hbWU9IlRIQUkiLz4KLQkJPGZpZWxkIG5hbWU9IlRJQkVUQU4iLz4KLQkJPGZpZWxkIG5hbWU9IlRJRklOQUdIIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TUE9SVF9BTkRfTUFQX1NZTUJPTFMiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVUdBUklUSUMiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSUZJRURfQ0FOQURJQU5fQUJPUklHSU5BTF9TWUxMQUJJQ1MiLz4KLQkJPGZpZWxkIG5hbWU9IlVOSUZJRURfQ0FOQURJQU5fQUJPUklHSU5BTF9TWUxMQUJJQ1NfRVhURU5ERUQiIHNpbmNlPSIxOSIvPgotCQk8ZmllbGQgbmFtZT0iVkFJIiBzaW5jZT0iMTkiLz4KLQkJPGZpZWxkIG5hbWU9IlZBUklBVElPTl9TRUxFQ1RPUlMiLz4KLQkJPGZpZWxkIG5hbWU9IlZBUklBVElPTl9TRUxFQ1RPUlNfU1VQUExFTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iVkVESUNfRVhURU5TSU9OUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJWRVJUSUNBTF9GT1JNUyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJZSUpJTkdfSEVYQUdSQU1fU1lNQk9MUyIvPgotCQk8ZmllbGQgbmFtZT0iWUlfUkFESUNBTFMiLz4KLQkJPGZpZWxkIG5hbWU9IllJX1NZTExBQkxFUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9DaGFyYWN0ZXIkVW5pY29kZVNjcmlwdCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0NoYXJhY3RlciRVbmljb2RlU2NyaXB0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKEkpTGphdmEvbGFuZy9DaGFyYWN0ZXIkVW5pY29kZVNjcmlwdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0NoYXJhY3RlciRVbmljb2RlU2NyaXB0OyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL2xhbmcvQ2hhcmFjdGVyJFVuaWNvZGVTY3JpcHQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUkFCSUMiLz4KLQkJPGZpZWxkIG5hbWU9IkFSTUVOSUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVkVTVEFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQUxJTkVTRSIvPgotCQk8ZmllbGQgbmFtZT0iQkFNVU0iLz4KLQkJPGZpZWxkIG5hbWU9IkJBVEFLIi8+Ci0JCTxmaWVsZCBuYW1lPSJCRU5HQUxJIi8+Ci0JCTxmaWVsZCBuYW1lPSJCT1BPTU9GTyIvPgotCQk8ZmllbGQgbmFtZT0iQlJBSE1JIi8+Ci0JCTxmaWVsZCBuYW1lPSJCUkFJTExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJCVUdJTkVTRSIvPgotCQk8ZmllbGQgbmFtZT0iQlVISUQiLz4KLQkJPGZpZWxkIG5hbWU9IkNBTkFESUFOX0FCT1JJR0lOQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkNBUklBTiIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBS01BIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNIQU0iLz4KLQkJPGZpZWxkIG5hbWU9IkNIRVJPS0VFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01NT04iLz4KLQkJPGZpZWxkIG5hbWU9IkNPUFRJQyIvPgotCQk8ZmllbGQgbmFtZT0iQ1VORUlGT1JNIi8+Ci0JCTxmaWVsZCBuYW1lPSJDWVBSSU9UIi8+Ci0JCTxmaWVsZCBuYW1lPSJDWVJJTExJQyIvPgotCQk8ZmllbGQgbmFtZT0iREVTRVJFVCIvPgotCQk8ZmllbGQgbmFtZT0iREVWQU5BR0FSSSIvPgotCQk8ZmllbGQgbmFtZT0iRUdZUFRJQU5fSElFUk9HTFlQSFMiLz4KLQkJPGZpZWxkIG5hbWU9IkVUSElPUElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRU9SR0lBTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xBR09MSVRJQyIvPgotCQk8ZmllbGQgbmFtZT0iR09USElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUkVFSyIvPgotCQk8ZmllbGQgbmFtZT0iR1VKQVJBVEkiLz4KLQkJPGZpZWxkIG5hbWU9IkdVUk1VS0hJIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQU4iLz4KLQkJPGZpZWxkIG5hbWU9IkhBTkdVTCIvPgotCQk8ZmllbGQgbmFtZT0iSEFOVU5PTyIvPgotCQk8ZmllbGQgbmFtZT0iSEVCUkVXIi8+Ci0JCTxmaWVsZCBuYW1lPSJISVJBR0FOQSIvPgotCQk8ZmllbGQgbmFtZT0iSU1QRVJJQUxfQVJBTUFJQyIvPgotCQk8ZmllbGQgbmFtZT0iSU5IRVJJVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNDUklQVElPTkFMX1BBSExBVkkiLz4KLQkJPGZpZWxkIG5hbWU9IklOU0NSSVBUSU9OQUxfUEFSVEhJQU4iLz4KLQkJPGZpZWxkIG5hbWU9IkpBVkFORVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQUlUSEkiLz4KLQkJPGZpZWxkIG5hbWU9IktBTk5BREEiLz4KLQkJPGZpZWxkIG5hbWU9IktBVEFLQU5BIi8+Ci0JCTxmaWVsZCBuYW1lPSJLQVlBSF9MSSIvPgotCQk8ZmllbGQgbmFtZT0iS0hBUk9TSFRISSIvPgotCQk8ZmllbGQgbmFtZT0iS0hNRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkxBTyIvPgotCQk8ZmllbGQgbmFtZT0iTEFUSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkxFUENIQSIvPgotCQk8ZmllbGQgbmFtZT0iTElNQlUiLz4KLQkJPGZpZWxkIG5hbWU9IkxJTkVBUl9CIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSVNVIi8+Ci0JCTxmaWVsZCBuYW1lPSJMWUNJQU4iLz4KLQkJPGZpZWxkIG5hbWU9IkxZRElBTiIvPgotCQk8ZmllbGQgbmFtZT0iTUFMQVlBTEFNIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5EQUlDIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUVURUlfTUFZRUsiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FUk9JVElDX0NVUlNJVkUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTUVST0lUSUNfSElFUk9HTFlQSFMiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTUlBTyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNT05HT0xJQU4iLz4KLQkJPGZpZWxkIG5hbWU9Ik1ZQU5NQVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FV19UQUlfTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOS08iLz4KLQkJPGZpZWxkIG5hbWU9Ik9HSEFNIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTERfSVRBTElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJPTERfUEVSU0lBTiIvPgotCQk8ZmllbGQgbmFtZT0iT0xEX1NPVVRIX0FSQUJJQU4iLz4KLQkJPGZpZWxkIG5hbWU9Ik9MRF9UVVJLSUMiLz4KLQkJPGZpZWxkIG5hbWU9Ik9MX0NISUtJIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUklZQSIvPgotCQk8ZmllbGQgbmFtZT0iT1NNQU5ZQSIvPgotCQk8ZmllbGQgbmFtZT0iUEhBR1NfUEEiLz4KLQkJPGZpZWxkIG5hbWU9IlBIT0VOSUNJQU4iLz4KLQkJPGZpZWxkIG5hbWU9IlJFSkFORyIvPgotCQk8ZmllbGQgbmFtZT0iUlVOSUMiLz4KLQkJPGZpZWxkIG5hbWU9IlNBTUFSSVRBTiIvPgotCQk8ZmllbGQgbmFtZT0iU0FVUkFTSFRSQSIvPgotCQk8ZmllbGQgbmFtZT0iU0hBUkFEQSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTSEFWSUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSU5IQUxBIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT1JBX1NPTVBFTkciIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iU1VOREFORVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWUxPVElfTkFHUkkiLz4KLQkJPGZpZWxkIG5hbWU9IlNZUklBQyIvPgotCQk8ZmllbGQgbmFtZT0iVEFHQUxPRyIvPgotCQk8ZmllbGQgbmFtZT0iVEFHQkFOV0EiLz4KLQkJPGZpZWxkIG5hbWU9IlRBSV9MRSIvPgotCQk8ZmllbGQgbmFtZT0iVEFJX1RIQU0iLz4KLQkJPGZpZWxkIG5hbWU9IlRBSV9WSUVUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQUtSSSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUQU1JTCIvPgotCQk8ZmllbGQgbmFtZT0iVEVMVUdVIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSEFBTkEiLz4KLQkJPGZpZWxkIG5hbWU9IlRIQUkiLz4KLQkJPGZpZWxkIG5hbWU9IlRJQkVUQU4iLz4KLQkJPGZpZWxkIG5hbWU9IlRJRklOQUdIIi8+Ci0JCTxmaWVsZCBuYW1lPSJVR0FSSVRJQyIvPgotCQk8ZmllbGQgbmFtZT0iVU5LTk9XTiIvPgotCQk8ZmllbGQgbmFtZT0iVkFJIi8+Ci0JCTxmaWVsZCBuYW1lPSJZSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9DbGFzcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L0Fubm90YXRlZEVsZW1lbnQiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvR2VuZXJpY0RlY2xhcmF0aW9uIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L1R5cGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc1N1YmNsYXNzKExqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FzdChMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVzaXJlZEFzc2VydGlvblN0YXR1cygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImZvck5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yTmFtZShMamF2YS9sYW5nL1N0cmluZztaTGphdmEvbGFuZy9DbGFzc0xvYWRlcjspTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYW5vbmljYWxOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGFzc0xvYWRlcigpTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGFzc2VzKClbTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wb25lbnRUeXBlKClMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnN0cnVjdG9yKFtMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL3JlZmxlY3QvQ29uc3RydWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uc3RydWN0b3JzKClbTGphdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2xhcmVkQ2xhc3NlcygpW0xqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvcihbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2xhcmVkQ29uc3RydWN0b3JzKClbTGphdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2xhcmVkRmllbGQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvcmVmbGVjdC9GaWVsZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWNsYXJlZEZpZWxkcygpW0xqYXZhL2xhbmcvcmVmbGVjdC9GaWVsZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWNsYXJlZE1ldGhvZChMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWNsYXJlZE1ldGhvZHMoKVtMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2xhcmluZ0NsYXNzKClMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY2xvc2luZ0NsYXNzKClMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY2xvc2luZ0NvbnN0cnVjdG9yKClMamF2YS9sYW5nL3JlZmxlY3QvQ29uc3RydWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5jbG9zaW5nTWV0aG9kKClMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudW1Db25zdGFudHMoKVtMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWVsZChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpZWxkcygpW0xqYXZhL2xhbmcvcmVmbGVjdC9GaWVsZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHZW5lcmljSW50ZXJmYWNlcygpW0xqYXZhL2xhbmcvcmVmbGVjdC9UeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdlbmVyaWNTdXBlcmNsYXNzKClMamF2YS9sYW5nL3JlZmxlY3QvVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlcmZhY2VzKClbTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXRob2QoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0aG9kcygpW0xqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9kaWZpZXJzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZSgpTGphdmEvbGFuZy9QYWNrYWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3RlY3Rpb25Eb21haW4oKUxqYXZhL3NlY3VyaXR5L1Byb3RlY3Rpb25Eb21haW47Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzb3VyY2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25ldC9VUkw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzb3VyY2VBc1N0cmVhbShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2lnbmVycygpW0xqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpbXBsZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cGVyY2xhc3MoKUxqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBbm5vdGF0aW9uKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBbm9ueW1vdXNDbGFzcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXJyYXkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Fzc2lnbmFibGVGcm9tKExqYXZhL2xhbmcvQ2xhc3M7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VudW0oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0luc3RhbmNlKExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbnRlcmZhY2UoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xvY2FsQ2xhc3MoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc01lbWJlckNsYXNzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcmltaXRpdmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N5bnRoZXRpYygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0dlbmVyaWNTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL0NsYXNzQ2FzdEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9DbGFzc0NpcmN1bGFyaXR5RXJyb3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0xpbmthZ2VFcnJvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9DbGFzc0Zvcm1hdEVycm9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9MaW5rYWdlRXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvQ2xhc3NMb2FkZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJBc3NlcnRpb25TdGF0dXMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWZpbmVDbGFzcyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtMamF2YS9zZWN1cml0eS9Qcm90ZWN0aW9uRG9tYWluOylMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlZmluZUNsYXNzKExqYXZhL2xhbmcvU3RyaW5nO1tCSUkpTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWZpbmVDbGFzcyhMamF2YS9sYW5nL1N0cmluZztbQklJTGphdmEvc2VjdXJpdHkvUHJvdGVjdGlvbkRvbWFpbjspTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWZpbmVDbGFzcyhbQklJKUxqYXZhL2xhbmcvQ2xhc3M7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlZmluZVBhY2thZ2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbmV0L1VSTDspTGphdmEvbGFuZy9QYWNrYWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRDbGFzcyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kTGlicmFyeShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZExvYWRlZENsYXNzKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRSZXNvdXJjZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmV0L1VSTDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kUmVzb3VyY2VzKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0VudW1lcmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRTeXN0ZW1DbGFzcyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1BhY2thZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZXMoKVtMamF2YS9sYW5nL1BhY2thZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50KClMamF2YS9sYW5nL0NsYXNzTG9hZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc291cmNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9uZXQvVVJMOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc291cmNlQXNTdHJlYW0oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2lvL0lucHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc291cmNlcyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9FbnVtZXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1DbGFzc0xvYWRlcigpTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1SZXNvdXJjZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmV0L1VSTDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1SZXNvdXJjZUFzU3RyZWFtKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1SZXNvdXJjZXMoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvRW51bWVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZENsYXNzKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRDbGFzcyhMamF2YS9sYW5nL1N0cmluZztaKUxqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJBc1BhcmFsbGVsQ2FwYWJsZSgpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZUNsYXNzKExqYXZhL2xhbmcvQ2xhc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGFzc0Fzc2VydGlvblN0YXR1cyhMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0QXNzZXJ0aW9uU3RhdHVzKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhY2thZ2VBc3NlcnRpb25TdGF0dXMoTGphdmEvbGFuZy9TdHJpbmc7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2lnbmVycyhMamF2YS9sYW5nL0NsYXNzO1tMamF2YS9sYW5nL09iamVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9DbGFzc05vdEZvdW5kRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iIHJlbW92ZWQ9IjE5Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SZWZsZWN0aXZlT3BlcmF0aW9uRXhjZXB0aW9uIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeGNlcHRpb24oKUxqYXZhL2xhbmcvVGhyb3dhYmxlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS9sYW5nL09iamVjdDspSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9Db21waWxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tbWFuZChMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGlsZUNsYXNzKExqYXZhL2xhbmcvQ2xhc3M7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21waWxlQ2xhc3NlcyhMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2FibGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmFibGUoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvRGVwcmVjYXRlZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvRG91YmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9OdW1iZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZShERClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL2xhbmcvRG91YmxlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG91YmxlVG9Mb25nQml0cyhEKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb3VibGVUb1Jhd0xvbmdCaXRzKEQpSiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc2hDb2RlKEQpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGaW5pdGUoRClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0luZmluaXRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbmZpbml0ZShEKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05hTigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTmFOKEQpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvbmdCaXRzVG9Eb3VibGUoSilEIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4KEREKUQiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbihERClEIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZURvdWJsZShMamF2YS9sYW5nL1N0cmluZzspRCIvPgotCQk8bWV0aG9kIG5hbWU9InN1bShERClEIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0hleFN0cmluZyhEKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKEQpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihEKUxqYXZhL2xhbmcvRG91YmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvRG91YmxlOyIvPgotCQk8ZmllbGQgbmFtZT0iQllURVMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX0VYUE9ORU5UIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fRVhQT05FTlQiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fTk9STUFMIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iTUlOX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJORUdBVElWRV9JTkZJTklUWSIvPgotCQk8ZmllbGQgbmFtZT0iTmFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT1NJVElWRV9JTkZJTklUWSIvPgotCQk8ZmllbGQgbmFtZT0iU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9FbnVtIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL2xhbmcvRW51bTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2xhcmluZ0NsYXNzKClMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9yZGluYWwoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvRW51bTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvRW51bUNvbnN0YW50Tm90UHJlc2VudEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29uc3RhbnROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbnVtVHlwZSgpTGphdmEvbGFuZy9DbGFzczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvRXJyb3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1Rocm93YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTtaWilWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9UaHJvd2FibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7WlopViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvTGlua2FnZUVycm9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhjZXB0aW9uKClMamF2YS9sYW5nL1Rocm93YWJsZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvRmxvYXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL051bWJlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZShGRilJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL2xhbmcvRmxvYXQ7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbG9hdFRvSW50Qml0cyhGKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbG9hdFRvUmF3SW50Qml0cyhGKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNoQ29kZShGKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImludEJpdHNUb0Zsb2F0KEkpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmluaXRlKEYpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbmZpbml0ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5maW5pdGUoRilaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOYU4oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05hTihGKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXgoRkYpRiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWluKEZGKUYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlRmxvYXQoTGphdmEvbGFuZy9TdHJpbmc7KUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdW0oRkYpRiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9IZXhTdHJpbmcoRilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1N0cmluZyhGKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoRilMamF2YS9sYW5nL0Zsb2F0OyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvRmxvYXQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCWVRFUyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfRVhQT05FTlQiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQVhfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9FWFBPTkVOVCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTl9OT1JNQUwiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FR0FUSVZFX0lORklOSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJOYU4iLz4KLQkJPGZpZWxkIG5hbWU9IlBPU0lUSVZFX0lORklOSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL0Z1bmN0aW9uYWxJbnRlcmZhY2UiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL2Fubm90YXRpb24vQW5ub3RhdGlvbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsQWNjZXNzRXJyb3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0luY29tcGF0aWJsZUNsYXNzQ2hhbmdlRXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIiByZW1vdmVkPSIxOSIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUmVmbGVjdGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsVGhyZWFkU3RhdGVFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9JbmNvbXBhdGlibGVDbGFzc0NoYW5nZUVycm9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9MaW5rYWdlRXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9Jbmhlcml0YWJsZVRocmVhZExvY2FsIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9UaHJlYWRMb2NhbCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoaWxkVmFsdWUoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9JbnN0YW50aWF0aW9uRXJyb3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0luY29tcGF0aWJsZUNsYXNzQ2hhbmdlRXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIiByZW1vdmVkPSIxOSIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUmVmbGVjdGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL0ludGVnZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL051bWJlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaXRDb3VudChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlKElJKUkiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS9sYW5nL0ludGVnZXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVW5zaWduZWQoSUkpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjb2RlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGl2aWRlVW5zaWduZWQoSUkpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZWdlcihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9JbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVnZXIoTGphdmEvbGFuZy9TdHJpbmc7SSlMamF2YS9sYW5nL0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50ZWdlcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0ludGVnZXI7KUxqYXZhL2xhbmcvSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNoQ29kZShJKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImhpZ2hlc3RPbmVCaXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG93ZXN0T25lQml0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1heChJSSlJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW4oSUkpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibnVtYmVyT2ZMZWFkaW5nWmVyb3MoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibnVtYmVyT2ZUcmFpbGluZ1plcm9zKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlSW50KExqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VJbnQoTGphdmEvbGFuZy9TdHJpbmc7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VVbnNpZ25lZEludChMamF2YS9sYW5nL1N0cmluZzspSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VVbnNpZ25lZEludChMamF2YS9sYW5nL1N0cmluZztJKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbWFpbmRlclVuc2lnbmVkKElJKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJldmVyc2UoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmV2ZXJzZUJ5dGVzKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJvdGF0ZUxlZnQoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJvdGF0ZVJpZ2h0KElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaWdudW0oSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VtKElJKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InRvQmluYXJ5U3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9IZXhTdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b09jdGFsU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1N0cmluZyhJSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1Vuc2lnbmVkTG9uZyhJKUoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InRvVW5zaWduZWRTdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InRvVW5zaWduZWRTdHJpbmcoSUkpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKEkpTGphdmEvbGFuZy9JbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nO0kpTGphdmEvbGFuZy9JbnRlZ2VyOyIvPgotCQk8ZmllbGQgbmFtZT0iQllURVMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IlNJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvSW50ZXJuYWxFcnJvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvVmlydHVhbE1hY2hpbmVFcnJvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvSW50ZXJydXB0ZWRFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9JdGVyYWJsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaChMamF2YS91dGlsL2Z1bmN0aW9uL0NvbnN1bWVyOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpdGVyYXRvcigpTGphdmEvdXRpbC9JdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGxpdGVyYXRvcigpTGphdmEvdXRpbC9TcGxpdGVyYXRvcjsiIHNpbmNlPSIyNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9MaW5rYWdlRXJyb3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0Vycm9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iMTkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvTG9uZyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvTnVtYmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEopViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJpdENvdW50KEopSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmUoSkopSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL2xhbmcvTG9uZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVVbnNpZ25lZChKSilJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvTG9uZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXZpZGVVbnNpZ25lZChKSilKIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0xvbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZyhMamF2YS9sYW5nL1N0cmluZztKKUxqYXZhL2xhbmcvTG9uZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvTG9uZzspTGphdmEvbGFuZy9Mb25nOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc2hDb2RlKEopSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGlnaGVzdE9uZUJpdChKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb3dlc3RPbmVCaXQoSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4KEpKKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbihKSilKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJudW1iZXJPZkxlYWRpbmdaZXJvcyhKKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJudW1iZXJPZlRyYWlsaW5nWmVyb3MoSilJIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VMb25nKExqYXZhL2xhbmcvU3RyaW5nOylKIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VMb25nKExqYXZhL2xhbmcvU3RyaW5nO0kpSiIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlVW5zaWduZWRMb25nKExqYXZhL2xhbmcvU3RyaW5nOylKIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZVVuc2lnbmVkTG9uZyhMamF2YS9sYW5nL1N0cmluZztJKUoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbWFpbmRlclVuc2lnbmVkKEpKKUoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJldmVyc2UoSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0icmV2ZXJzZUJ5dGVzKEopSiIvPgotCQk8bWV0aG9kIG5hbWU9InJvdGF0ZUxlZnQoSkkpSiIvPgotCQk8bWV0aG9kIG5hbWU9InJvdGF0ZVJpZ2h0KEpJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaWdudW0oSilJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VtKEpKKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InRvQmluYXJ5U3RyaW5nKEopTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9IZXhTdHJpbmcoSilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b09jdGFsU3RyaW5nKEopTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoSilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1N0cmluZyhKSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1Vuc2lnbmVkU3RyaW5nKEopTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1Vuc2lnbmVkU3RyaW5nKEpJKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihKKUxqYXZhL2xhbmcvTG9uZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0xvbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZztJKUxqYXZhL2xhbmcvTG9uZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkJZVEVTIiBzaW5jZT0iMjQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iTUlOX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL01hdGgiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IklFRUVyZW1haW5kZXIoREQpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImFicyhEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhYnMoRilGIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWJzKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImFicyhKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY29zKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEV4YWN0KElJKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEV4YWN0KEpKKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImFzaW4oRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXRhbihEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdGFuMihERClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2JydChEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjZWlsKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlTaWduKEREKUQiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29weVNpZ24oRkYpRiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3MoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29zaChEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNyZW1lbnRFeGFjdChJKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY3JlbWVudEV4YWN0KEopSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhwKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImV4cG0xKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImZsb29yKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImZsb29yRGl2KElJKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImZsb29yRGl2KEpKKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImZsb29yTW9kKElJKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImZsb29yTW9kKEpKKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4cG9uZW50KEQpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHBvbmVudChGKUkiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaHlwb3QoREQpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImluY3JlbWVudEV4YWN0KEkpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5jcmVtZW50RXhhY3QoSilKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2coRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9nMTAoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9nMXAoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4KEREKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXgoRkYpRiIvPgotCQk8bWV0aG9kIG5hbWU9Im1heChJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4KEpKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW4oREQpRCIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbihGRilGIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWluKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW4oSkopSiIvPgotCQk8bWV0aG9kIG5hbWU9Im11bHRpcGx5RXhhY3QoSUkpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibXVsdGlwbHlFeGFjdChKSilKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZWdhdGVFeGFjdChJKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im5lZ2F0ZUV4YWN0KEopSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dEFmdGVyKEREKUQiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dEFmdGVyKEZEKUYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dERvd24oRClEIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0RG93bihGKUYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRVcChEKUQiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dFVwKEYpRiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3coREQpRCIvPgotCQk8bWV0aG9kIG5hbWU9InJhbmRvbSgpRCIvPgotCQk8bWV0aG9kIG5hbWU9InJpbnQoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0icm91bmQoRClKIi8+Ci0JCTxtZXRob2QgbmFtZT0icm91bmQoRilJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2NhbGIoREkpRCIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2FsYihGSSlGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNpZ251bShEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaWdudW0oRilGIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2luKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9InNpbmgoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3FydChEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJ0cmFjdEV4YWN0KElJKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InN1YnRyYWN0RXhhY3QoSkopSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGFuKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9InRhbmgoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9EZWdyZWVzKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9InRvSW50RXhhY3QoSilJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1JhZGlhbnMoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0idWxwKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9InVscChGKUYiLz4KLQkJPGZpZWxkIG5hbWU9IkUiLz4KLQkJPGZpZWxkIG5hbWU9IlBJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL05lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL05vQ2xhc3NEZWZGb3VuZEVycm9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9MaW5rYWdlRXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvTm9TdWNoRmllbGRFcnJvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSW5jb21wYXRpYmxlQ2xhc3NDaGFuZ2VFcnJvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9Ob1N1Y2hGaWVsZEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIiByZW1vdmVkPSIxOSIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUmVmbGVjdGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL05vU3VjaE1ldGhvZEVycm9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbmNvbXBhdGlibGVDbGFzc0NoYW5nZUVycm9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL05vU3VjaE1ldGhvZEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIiByZW1vdmVkPSIxOSIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUmVmbGVjdGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL051bGxQb2ludGVyRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL051bWJlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnl0ZVZhbHVlKClCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG91YmxlVmFsdWUoKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbG9hdFZhbHVlKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW50VmFsdWUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb25nVmFsdWUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG9ydFZhbHVlKClTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL051bWJlckZvcm1hdEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgc2luY2U9IjEiPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoTGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5hbGl6ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsYXNzKClMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc2hDb2RlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm90aWZ5QWxsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9IndhaXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3YWl0KEopViIvPgotCQk8bWV0aG9kIG5hbWU9IndhaXQoSkkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9PdXRPZk1lbW9yeUVycm9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9WaXJ0dWFsTWFjaGluZUVycm9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL092ZXJyaWRlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL2Fubm90YXRpb24vQW5ub3RhdGlvbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9QYWNrYWdlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvQW5ub3RhdGVkRWxlbWVudCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9qYXIvTWFuaWZlc3Q7TGphdmEvbmV0L1VSTDtMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbXBsZW1lbnRhdGlvblRpdGxlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbXBsZW1lbnRhdGlvblZlbmRvcigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW1wbGVtZW50YXRpb25WZXJzaW9uKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYWNrYWdlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1BhY2thZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2FnZXMoKVtMamF2YS9sYW5nL1BhY2thZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3BlY2lmaWNhdGlvblRpdGxlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGVjaWZpY2F0aW9uVmVuZG9yKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGVjaWZpY2F0aW9uVmVyc2lvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb21wYXRpYmxlV2l0aChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2VhbGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTZWFsZWQoTGphdmEvbmV0L1VSTDspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9Qcm9jZXNzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXN0cm95KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVzdHJveUZvcmNpYmx5KClMamF2YS9sYW5nL1Byb2Nlc3M7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGl0VmFsdWUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcnJvclN0cmVhbSgpTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRTdHJlYW0oKUxqYXZhL2lvL0lucHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE91dHB1dFN0cmVhbSgpTGphdmEvaW8vT3V0cHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWxpdmUoKVoiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9IndhaXRGb3IoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3YWl0Rm9yKEpMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KVoiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9Qcm9jZXNzQnVpbGRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21tYW5kKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tbWFuZChMamF2YS91dGlsL0xpc3Q7KUxqYXZhL2xhbmcvUHJvY2Vzc0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tbWFuZChbTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvUHJvY2Vzc0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlyZWN0b3J5KClMamF2YS9pby9GaWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpcmVjdG9yeShMamF2YS9pby9GaWxlOylMamF2YS9sYW5nL1Byb2Nlc3NCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVudmlyb25tZW50KClMamF2YS91dGlsL01hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmhlcml0SU8oKUxqYXZhL2xhbmcvUHJvY2Vzc0J1aWxkZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWRpcmVjdEVycm9yKClMamF2YS9sYW5nL1Byb2Nlc3NCdWlsZGVyJFJlZGlyZWN0OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVkaXJlY3RFcnJvcihMamF2YS9pby9GaWxlOylMamF2YS9sYW5nL1Byb2Nlc3NCdWlsZGVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVkaXJlY3RFcnJvcihMamF2YS9sYW5nL1Byb2Nlc3NCdWlsZGVyJFJlZGlyZWN0OylMamF2YS9sYW5nL1Byb2Nlc3NCdWlsZGVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVkaXJlY3RFcnJvclN0cmVhbSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlZGlyZWN0RXJyb3JTdHJlYW0oWilMamF2YS9sYW5nL1Byb2Nlc3NCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZGlyZWN0SW5wdXQoKUxqYXZhL2xhbmcvUHJvY2Vzc0J1aWxkZXIkUmVkaXJlY3Q7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWRpcmVjdElucHV0KExqYXZhL2lvL0ZpbGU7KUxqYXZhL2xhbmcvUHJvY2Vzc0J1aWxkZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWRpcmVjdElucHV0KExqYXZhL2xhbmcvUHJvY2Vzc0J1aWxkZXIkUmVkaXJlY3Q7KUxqYXZhL2xhbmcvUHJvY2Vzc0J1aWxkZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWRpcmVjdE91dHB1dCgpTGphdmEvbGFuZy9Qcm9jZXNzQnVpbGRlciRSZWRpcmVjdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InJlZGlyZWN0T3V0cHV0KExqYXZhL2lvL0ZpbGU7KUxqYXZhL2xhbmcvUHJvY2Vzc0J1aWxkZXI7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWRpcmVjdE91dHB1dChMamF2YS9sYW5nL1Byb2Nlc3NCdWlsZGVyJFJlZGlyZWN0OylMamF2YS9sYW5nL1Byb2Nlc3NCdWlsZGVyOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnQoKUxqYXZhL2xhbmcvUHJvY2VzczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvUHJvY2Vzc0J1aWxkZXIkUmVkaXJlY3QiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRUbyhMamF2YS9pby9GaWxlOylMamF2YS9sYW5nL1Byb2Nlc3NCdWlsZGVyJFJlZGlyZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbGUoKUxqYXZhL2lvL0ZpbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbShMamF2YS9pby9GaWxlOylMamF2YS9sYW5nL1Byb2Nlc3NCdWlsZGVyJFJlZGlyZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InRvKExqYXZhL2lvL0ZpbGU7KUxqYXZhL2xhbmcvUHJvY2Vzc0J1aWxkZXIkUmVkaXJlY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHlwZSgpTGphdmEvbGFuZy9Qcm9jZXNzQnVpbGRlciRSZWRpcmVjdCRUeXBlOyIvPgotCQk8ZmllbGQgbmFtZT0iSU5IRVJJVCIvPgotCQk8ZmllbGQgbmFtZT0iUElQRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9Qcm9jZXNzQnVpbGRlciRSZWRpcmVjdCRUeXBlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvUHJvY2Vzc0J1aWxkZXIkUmVkaXJlY3QkVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS9sYW5nL1Byb2Nlc3NCdWlsZGVyJFJlZGlyZWN0JFR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUFBFTkQiLz4KLQkJPGZpZWxkIG5hbWU9IklOSEVSSVQiLz4KLQkJPGZpZWxkIG5hbWU9IlBJUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQUQiLz4KLQkJPGZpZWxkIG5hbWU9IldSSVRFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1JlYWRhYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKExqYXZhL25pby9DaGFyQnVmZmVyOylJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1JlZmxlY3RpdmVPcGVyYXRpb25FeGNlcHRpb24iIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvUnVubmFibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InJ1bigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTaHV0ZG93bkhvb2soTGphdmEvbGFuZy9UaHJlYWQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdmFpbGFibGVQcm9jZXNzb3JzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlYyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9Qcm9jZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWMoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlYyhMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vRmlsZTspTGphdmEvbGFuZy9Qcm9jZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWMoW0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlYyhbTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlYyhbTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL0ZpbGU7KUxqYXZhL2xhbmcvUHJvY2VzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGl0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZyZWVNZW1vcnkoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnYygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsaXplZElucHV0U3RyZWFtKExqYXZhL2lvL0lucHV0U3RyZWFtOylMamF2YS9pby9JbnB1dFN0cmVhbTsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxpemVkT3V0cHV0U3RyZWFtKExqYXZhL2lvL091dHB1dFN0cmVhbTspTGphdmEvaW8vT3V0cHV0U3RyZWFtOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSdW50aW1lKClMamF2YS9sYW5nL1J1bnRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFsdChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZExpYnJhcnkoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXhNZW1vcnkoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVTaHV0ZG93bkhvb2soTGphdmEvbGFuZy9UaHJlYWQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5GaW5hbGl6YXRpb24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5GaW5hbGl6ZXJzT25FeGl0KFopViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b3RhbE1lbW9yeSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9InRyYWNlSW5zdHJ1Y3Rpb25zKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InRyYWNlTWV0aG9kQ2FsbHMoWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTtaWilWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZVBlcm1pc3Npb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9CYXNpY1Blcm1pc3Npb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvU2FmZVZhcmFyZ3MiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL2Fubm90YXRpb24vQW5ub3RhdGlvbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9TZWN1cml0eUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9TZWN1cml0eU1hbmFnZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrQWNjZXB0KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrQWNjZXNzKExqYXZhL2xhbmcvVGhyZWFkOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tBY2Nlc3MoTGphdmEvbGFuZy9UaHJlYWRHcm91cDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrQXd0RXZlbnRRdWV1ZUFjY2VzcygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrQ29ubmVjdChMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja0Nvbm5lY3QoTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tDcmVhdGVDbGFzc0xvYWRlcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrRGVsZXRlKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tFeGVjKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tFeGl0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrTGluayhMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrTGlzdGVuKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrTWVtYmVyQWNjZXNzKExqYXZhL2xhbmcvQ2xhc3M7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tNdWx0aWNhc3QoTGphdmEvbmV0L0luZXRBZGRyZXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tNdWx0aWNhc3QoTGphdmEvbmV0L0luZXRBZGRyZXNzO0IpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1BhY2thZ2VBY2Nlc3MoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1BhY2thZ2VEZWZpbml0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tQZXJtaXNzaW9uKExqYXZhL3NlY3VyaXR5L1Blcm1pc3Npb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1Blcm1pc3Npb24oTGphdmEvc2VjdXJpdHkvUGVybWlzc2lvbjtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrUHJpbnRKb2JBY2Nlc3MoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1Byb3BlcnRpZXNBY2Nlc3MoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1Byb3BlcnR5QWNjZXNzKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tSZWFkKExqYXZhL2lvL0ZpbGVEZXNjcmlwdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tSZWFkKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tSZWFkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tTZWN1cml0eUFjY2VzcyhMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrU2V0RmFjdG9yeSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrU3lzdGVtQ2xpcGJvYXJkQWNjZXNzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tUb3BMZXZlbFdpbmRvdyhMamF2YS9sYW5nL09iamVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrV3JpdGUoTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1dyaXRlKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xhc3NEZXB0aChMamF2YS9sYW5nL1N0cmluZzspSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGFzc0xvYWRlckRlcHRoKClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImN1cnJlbnRDbGFzc0xvYWRlcigpTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3VycmVudExvYWRlZENsYXNzKClMamF2YS9sYW5nL0NsYXNzOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGFzc0NvbnRleHQoKVtMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluQ2hlY2soKVoiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VjdXJpdHlDb250ZXh0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHJlYWRHcm91cCgpTGphdmEvbGFuZy9UaHJlYWRHcm91cDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbkNsYXNzKExqYXZhL2xhbmcvU3RyaW5nOylaIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImluQ2xhc3NMb2FkZXIoKVoiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpbkNoZWNrIiBkZXByZWNhdGVkPSIxNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9TaG9ydCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvTnVtYmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFMpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmUoU1MpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL2xhbmcvU2hvcnQ7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU2hvcnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzaENvZGUoUylJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZVNob3J0KExqYXZhL2xhbmcvU3RyaW5nOylTIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VTaG9ydChMamF2YS9sYW5nL1N0cmluZztJKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXZlcnNlQnl0ZXMoUylTIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoUylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1Vuc2lnbmVkSW50KFMpSSIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9VbnNpZ25lZExvbmcoUylKIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Nob3J0OyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7SSlMamF2YS9sYW5nL1Nob3J0OyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoUylMamF2YS9sYW5nL1Nob3J0OyIvPgotCQk8ZmllbGQgbmFtZT0iQllURVMiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IlNJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvU3RhY2tPdmVyZmxvd0Vycm9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9WaXJ0dWFsTWFjaGluZUVycm9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1N0YWNrVHJhY2VFbGVtZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xhc3NOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWxlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGluZU51bWJlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldGhvZE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTmF0aXZlTWV0aG9kKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1N0cmljdE1hdGgiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IklFRUVyZW1haW5kZXIoREQpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImFicyhEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhYnMoRilGIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWJzKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImFicyhKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY29zKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEV4YWN0KElJKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEV4YWN0KEpKKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImFzaW4oRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXRhbihEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdGFuMihERClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2JydChEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjZWlsKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlTaWduKEREKUQiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29weVNpZ24oRkYpRiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3MoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29zaChEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHAoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhwbTEoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmxvb3IoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmxvb3JEaXYoSUkpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmxvb3JEaXYoSkopSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmxvb3JNb2QoSUkpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmxvb3JNb2QoSkopSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhwb25lbnQoRClJIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4cG9uZW50KEYpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoeXBvdChERClEIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9nKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZzEwKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZzFwKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9Im1heChERClEIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4KEZGKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXgoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1heChKSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWluKEREKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW4oRkYpRiIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbihJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWluKEpKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtdWx0aXBseUV4YWN0KElJKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im11bHRpcGx5RXhhY3QoSkopSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dEFmdGVyKEREKUQiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dEFmdGVyKEZEKUYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dERvd24oRClEIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0RG93bihGKUYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRVcChEKUQiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dFVwKEYpRiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3coREQpRCIvPgotCQk8bWV0aG9kIG5hbWU9InJhbmRvbSgpRCIvPgotCQk8bWV0aG9kIG5hbWU9InJpbnQoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0icm91bmQoRClKIi8+Ci0JCTxtZXRob2QgbmFtZT0icm91bmQoRilJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2NhbGIoREkpRCIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2FsYihGSSlGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNpZ251bShEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaWdudW0oRilGIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2luKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9InNpbmgoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3FydChEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJ0cmFjdEV4YWN0KElJKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InN1YnRyYWN0RXhhY3QoSkopSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGFuKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9InRhbmgoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9EZWdyZWVzKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9InRvSW50RXhhY3QoSilJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1JhZGlhbnMoRClEIi8+Ci0JCTxtZXRob2QgbmFtZT0idWxwKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9InVscChGKUYiLz4KLQkJPGZpZWxkIG5hbWU9IkUiLz4KLQkJPGZpZWxkIG5hbWU9IlBJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1N0cmluZyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DaGFyU2VxdWVuY2UiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0JJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQklJSSlWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQklJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0JJSUxqYXZhL25pby9jaGFyc2V0L0NoYXJzZXQ7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0JMamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0OylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtDSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb2RlUG9pbnRBdChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb2RlUG9pbnRCZWZvcmUoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29kZVBvaW50Q291bnQoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUb0lnbm9yZUNhc2UoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25jYXQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGVudEVxdWFscyhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRlbnRFcXVhbHMoTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5VmFsdWVPZihbQylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5VmFsdWVPZihbQ0lJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZHNXaXRoKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXF1YWxzSWdub3JlQ2FzZShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS91dGlsL0xvY2FsZTtMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5dGVzKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5dGVzKElJW0JJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qnl0ZXMoTGphdmEvbGFuZy9TdHJpbmc7KVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qnl0ZXMoTGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldDspW0IiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhcnMoSUlbQ0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImluZGV4T2YoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5kZXhPZihJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5kZXhPZihMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImluZGV4T2YoTGphdmEvbGFuZy9TdHJpbmc7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW50ZXJuKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VtcHR5KClaIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImpvaW4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9JdGVyYWJsZTspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJqb2luKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO1tMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXN0SW5kZXhPZihJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXN0SW5kZXhPZihJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGFzdEluZGV4T2YoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXN0SW5kZXhPZihMamF2YS9sYW5nL1N0cmluZztJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaGVzKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2Zmc2V0QnlDb2RlUG9pbnRzKElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpb25NYXRjaGVzKElMamF2YS9sYW5nL1N0cmluZztJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaW9uTWF0Y2hlcyhaSUxqYXZhL2xhbmcvU3RyaW5nO0lJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBsYWNlKENDKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2UoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2VBbGwoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2VGaXJzdChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BsaXQoTGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGxpdChMamF2YS9sYW5nL1N0cmluZztJKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydHNXaXRoKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRzV2l0aChMamF2YS9sYW5nL1N0cmluZztJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJzdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJzdHJpbmcoSUkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9DaGFyQXJyYXkoKVtDIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9Mb3dlckNhc2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvTG93ZXJDYXNlKExqYXZhL3V0aWwvTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1VwcGVyQ2FzZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9VcHBlckNhc2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRyaW0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoQylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKEQpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihGKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKEopTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihaKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoW0MpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihbQ0lJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iQ0FTRV9JTlNFTlNJVElWRV9PUkRFUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9TdHJpbmdCdWZmZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0Fic3RyYWN0U3RyaW5nQnVpbGRlciIgcmVtb3ZlZD0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgc2luY2U9IjI5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BcHBlbmRhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DaGFyU2VxdWVuY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKEMpTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKEQpTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKEYpTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKEkpTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKEopTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjspTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKFopTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKFtDKUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChbQ0lJKUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZENvZGVQb2ludChJKUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZShJSSlMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVDaGFyQXQoSSlMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnQoSUMpTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0KElEKUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydChJRilMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnQoSUkpTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0KElKKUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydChJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydChJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0KElMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0KElMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0KElaKUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydChJW0MpTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0KElbQ0lJKUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2UoSUlMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmV2ZXJzZSgpTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1N0cmluZ0J1aWxkZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0Fic3RyYWN0U3RyaW5nQnVpbGRlciIgcmVtb3ZlZD0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgc2luY2U9IjI5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BcHBlbmRhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DaGFyU2VxdWVuY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKEMpTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChEKUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoRilMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKEkpTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChKKUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChaKUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoW0MpTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChbQ0lJKUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRDb2RlUG9pbnQoSSlMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVsZXRlKElJKUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVDaGFyQXQoSSlMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0KElDKUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnQoSUQpTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydChJRilMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0KElJKUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnQoSUopTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydChJTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnQoSUxqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lJKUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnQoSUxqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0KElMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydChJWilMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0KElbQylMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0KElbQ0lJKUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBsYWNlKElJTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXZlcnNlKClMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1N0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1N1cHByZXNzV2FybmluZ3MiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWUoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvU3lzdGVtIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcnJheWNvcHkoTGphdmEvbGFuZy9PYmplY3Q7SUxqYXZhL2xhbmcvT2JqZWN0O0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhclByb3BlcnR5KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25zb2xlKClMamF2YS9pby9Db25zb2xlOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjdXJyZW50VGltZU1pbGxpcygpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImV4aXQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2MoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9wZXJ0aWVzKClMamF2YS91dGlsL1Byb3BlcnRpZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvcGVydHkoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3BlcnR5KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWN1cml0eU1hbmFnZXIoKUxqYXZhL2xhbmcvU2VjdXJpdHlNYW5hZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldGVudigpTGphdmEvdXRpbC9NYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0ZW52KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpZGVudGl0eUhhc2hDb2RlKExqYXZhL2xhbmcvT2JqZWN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5oZXJpdGVkQ2hhbm5lbCgpTGphdmEvbmlvL2NoYW5uZWxzL0NoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibGluZVNlcGFyYXRvcigpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZExpYnJhcnkoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXBMaWJyYXJ5TmFtZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmFub1RpbWUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5GaW5hbGl6YXRpb24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5GaW5hbGl6ZXJzT25FeGl0KFopViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFcnIoTGphdmEvaW8vUHJpbnRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbihMamF2YS9pby9JbnB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE91dChMamF2YS9pby9QcmludFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3BlcnRpZXMoTGphdmEvdXRpbC9Qcm9wZXJ0aWVzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvcGVydHkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlY3VyaXR5TWFuYWdlcihMamF2YS9sYW5nL1NlY3VyaXR5TWFuYWdlcjspViIvPgotCQk8ZmllbGQgbmFtZT0iZXJyIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbiIvPgotCQk8ZmllbGQgbmFtZT0ib3V0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1RocmVhZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9SdW5uYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1J1bm5hYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvUnVubmFibGU7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJlYWRHcm91cDtMamF2YS9sYW5nL1J1bm5hYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyZWFkR3JvdXA7TGphdmEvbGFuZy9SdW5uYWJsZTtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1RocmVhZEdyb3VwO0xqYXZhL2xhbmcvUnVubmFibGU7TGphdmEvbGFuZy9TdHJpbmc7SilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyZWFkR3JvdXA7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3RpdmVDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrQWNjZXNzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY291bnRTdGFja0ZyYW1lcygpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjdXJyZW50VGhyZWFkKClMamF2YS9sYW5nL1RocmVhZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXN0cm95KClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImR1bXBTdGFjaygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVudW1lcmF0ZShbTGphdmEvbGFuZy9UaHJlYWQ7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxTdGFja1RyYWNlcygpTGphdmEvdXRpbC9NYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGV4dENsYXNzTG9hZGVyKClMamF2YS9sYW5nL0NsYXNzTG9hZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRVbmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIoKUxqYXZhL2xhbmcvVGhyZWFkJFVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW9yaXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhY2tUcmFjZSgpW0xqYXZhL2xhbmcvU3RhY2tUcmFjZUVsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdGUoKUxqYXZhL2xhbmcvVGhyZWFkJFN0YXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRocmVhZEdyb3VwKClMamF2YS9sYW5nL1RocmVhZEdyb3VwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcigpTGphdmEvbGFuZy9UaHJlYWQkVW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImhvbGRzTG9jayhMamF2YS9sYW5nL09iamVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImludGVycnVwdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImludGVycnVwdGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBbGl2ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGFlbW9uKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbnRlcnJ1cHRlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImpvaW4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJqb2luKEopViIvPgotCQk8bWV0aG9kIG5hbWU9ImpvaW4oSkkpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc3VtZSgpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZXh0Q2xhc3NMb2FkZXIoTGphdmEvbGFuZy9DbGFzc0xvYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhZW1vbihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0VW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyKExqYXZhL2xhbmcvVGhyZWFkJFVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmlvcml0eShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVbmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIoTGphdmEvbGFuZy9UaHJlYWQkVW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2xlZXAoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2xlZXAoSkkpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcCgpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wKExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN1c3BlbmQoKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ieWllbGQoKVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9QUklPUklUWSIvPgotCQk8ZmllbGQgbmFtZT0iTUlOX1BSSU9SSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1JNX1BSSU9SSVRZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1RocmVhZCRTdGF0ZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvVGhyZWFkJFN0YXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL2xhbmcvVGhyZWFkJFN0YXRlOyIvPgotCQk8ZmllbGQgbmFtZT0iQkxPQ0tFRCIvPgotCQk8ZmllbGQgbmFtZT0iTkVXIi8+Ci0JCTxmaWVsZCBuYW1lPSJSVU5OQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iVEVSTUlOQVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iVElNRURfV0FJVElORyIvPgotCQk8ZmllbGQgbmFtZT0iV0FJVElORyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9UaHJlYWQkVW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bmNhdWdodEV4Y2VwdGlvbihMamF2YS9sYW5nL1RocmVhZDtMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9UaHJlYWREZWF0aCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvVGhyZWFkR3JvdXAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvVGhyZWFkJFVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1RocmVhZEdyb3VwO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWN0aXZlQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3RpdmVHcm91cENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsb3dUaHJlYWRTdXNwZW5zaW9uKFopWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja0FjY2VzcygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlc3Ryb3koKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbnVtZXJhdGUoW0xqYXZhL2xhbmcvVGhyZWFkOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW51bWVyYXRlKFtMamF2YS9sYW5nL1RocmVhZDtaKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbnVtZXJhdGUoW0xqYXZhL2xhbmcvVGhyZWFkR3JvdXA7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbnVtZXJhdGUoW0xqYXZhL2xhbmcvVGhyZWFkR3JvdXA7WilJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4UHJpb3JpdHkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJlbnQoKUxqYXZhL2xhbmcvVGhyZWFkR3JvdXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW50ZXJydXB0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEYWVtb24oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Rlc3Ryb3llZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imxpc3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJlbnRPZihMamF2YS9sYW5nL1RocmVhZEdyb3VwOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzdW1lKClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhZW1vbihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhQcmlvcml0eShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9wKClWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InN1c3BlbmQoKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1RocmVhZExvY2FsIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXRpYWxWYWx1ZSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aEluaXRpYWwoTGphdmEvdXRpbC9mdW5jdGlvbi9TdXBwbGllcjspTGphdmEvbGFuZy9UaHJlYWRMb2NhbDsiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9UaHJvd2FibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTtaWilWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTdXBwcmVzc2VkKExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWxsSW5TdGFja1RyYWNlKClMamF2YS9sYW5nL1Rocm93YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYXVzZSgpTGphdmEvbGFuZy9UaHJvd2FibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxpemVkTWVzc2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVzc2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhY2tUcmFjZSgpW0xqYXZhL2xhbmcvU3RhY2tUcmFjZUVsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VwcHJlc3NlZCgpW0xqYXZhL2xhbmcvVGhyb3dhYmxlOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdENhdXNlKExqYXZhL2xhbmcvVGhyb3dhYmxlOylMamF2YS9sYW5nL1Rocm93YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludFN0YWNrVHJhY2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludFN0YWNrVHJhY2UoTGphdmEvaW8vUHJpbnRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmludFN0YWNrVHJhY2UoTGphdmEvaW8vUHJpbnRXcml0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGFja1RyYWNlKFtMamF2YS9sYW5nL1N0YWNrVHJhY2VFbGVtZW50OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1R5cGVOb3RQcmVzZW50RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHlwZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9Vbmtub3duRXJyb3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1ZpcnR1YWxNYWNoaW5lRXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvVW5zYXRpc2ZpZWRMaW5rRXJyb3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0xpbmthZ2VFcnJvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9VbnN1cHBvcnRlZENsYXNzVmVyc2lvbkVycm9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9DbGFzc0Zvcm1hdEVycm9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1Vuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1ZlcmlmeUVycm9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9MaW5rYWdlRXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvVmlydHVhbE1hY2hpbmVFcnJvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL1ZvaWQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFubm90YXRpb25UeXBlKClMamF2YS9sYW5nL0NsYXNzOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb25Gb3JtYXRFcnJvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uVHlwZU1pc21hdGNoRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbGVtZW50KClMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvdW5kVHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL2Fubm90YXRpb24vRG9jdW1lbnRlZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9FbGVtZW50VHlwZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvYW5ub3RhdGlvbi9FbGVtZW50VHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS9sYW5nL2Fubm90YXRpb24vRWxlbWVudFR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTk5PVEFUSU9OX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlNUUlVDVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQUxfVkFSSUFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEhPRCIvPgotCQk8ZmllbGQgbmFtZT0iUEFDS0FHRSIvPgotCQk8ZmllbGQgbmFtZT0iUEFSQU1FVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1BBUkFNRVRFUiIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1VTRSIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL2Fubm90YXRpb24vSW5jb21wbGV0ZUFubm90YXRpb25FeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFubm90YXRpb25UeXBlKClMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVsZW1lbnROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9Jbmhlcml0ZWQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL2Fubm90YXRpb24vTmF0aXZlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9SZXBlYXRhYmxlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZSgpTGphdmEvbGFuZy9DbGFzczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9SZXRlbnRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWUoKUxqYXZhL2xhbmcvYW5ub3RhdGlvbi9SZXRlbnRpb25Qb2xpY3k7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL2Fubm90YXRpb24vUmV0ZW50aW9uUG9saWN5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9hbm5vdGF0aW9uL1JldGVudGlvblBvbGljeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS9sYW5nL2Fubm90YXRpb24vUmV0ZW50aW9uUG9saWN5OyIvPgotCQk8ZmllbGQgbmFtZT0iQ0xBU1MiLz4KLQkJPGZpZWxkIG5hbWU9IlJVTlRJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlNPVVJDRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL1RhcmdldCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZSgpW0xqYXZhL2xhbmcvYW5ub3RhdGlvbi9FbGVtZW50VHlwZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvaW52b2tlL0NhbGxTaXRlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkeW5hbWljSW52b2tlcigpTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRhcmdldCgpTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRhcmdldChMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0eXBlKClMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9pbnZva2UvQ29uc3RhbnRDYWxsU2l0ZSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL2ludm9rZS9DYWxsU2l0ZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTtMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvaW52b2tlL0xhbWJkYUNvbnZlcnNpb25FeGNlcHRpb24iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7WlopViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKSUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFzQ29sbGVjdG9yKExqYXZhL2xhbmcvQ2xhc3M7SSlMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXNGaXhlZEFyaXR5KClMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXNTcHJlYWRlcihMamF2YS9sYW5nL0NsYXNzO0kpTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFzVHlwZShMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXNWYXJhcmdzQ29sbGVjdG9yKExqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kVG8oTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZva2UoW0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZva2VFeGFjdChbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Imludm9rZVdpdGhBcmd1bWVudHMoTGphdmEvdXRpbC9MaXN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZva2VXaXRoQXJndW1lbnRzKFtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYXJhcmdzQ29sbGVjdG9yKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0idHlwZSgpTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZUluZm8iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWNsYXJpbmdDbGFzcygpTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXRob2RUeXBlKClMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vZGlmaWVycygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlZmVyZW5jZUtpbmQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZhckFyZ3MoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWZLaW5kSXNGaWVsZChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWZLaW5kSXNWYWxpZChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWZLaW5kTmFtZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZmVyZW5jZUtpbmRUb1N0cmluZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZmxlY3RBcyhMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZXMkTG9va3VwOylMamF2YS9sYW5nL3JlZmxlY3QvTWVtYmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKElMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0iUkVGX2dldEZpZWxkIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUZfZ2V0U3RhdGljIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUZfaW52b2tlSW50ZXJmYWNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUZfaW52b2tlU3BlY2lhbCIvPgotCQk8ZmllbGQgbmFtZT0iUkVGX2ludm9rZVN0YXRpYyIvPgotCQk8ZmllbGQgbmFtZT0iUkVGX2ludm9rZVZpcnR1YWwiLz4KLQkJPGZpZWxkIG5hbWU9IlJFRl9uZXdJbnZva2VTcGVjaWFsIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUZfcHV0RmllbGQiLz4KLQkJPGZpZWxkIG5hbWU9IlJFRl9wdXRTdGF0aWMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZXMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcnJheUVsZW1lbnRHZXR0ZXIoTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFycmF5RWxlbWVudFNldHRlcihMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2F0Y2hFeGNlcHRpb24oTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlO0xqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29sbGVjdEFyZ3VtZW50cyhMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7SUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTspTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnN0YW50KExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcm9wQXJndW1lbnRzKExqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTtJTGphdmEvdXRpbC9MaXN0OylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZHJvcEFyZ3VtZW50cyhMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7SVtMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhhY3RJbnZva2VyKExqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHBsaWNpdENhc3RBcmd1bWVudHMoTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlO0xqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWx0ZXJBcmd1bWVudHMoTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlO0lbTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsdGVyUmV0dXJuVmFsdWUoTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlO0xqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTspTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvbGRBcmd1bWVudHMoTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlO0xqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTspTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9Imd1YXJkV2l0aFRlc3QoTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlO0xqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTtMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpZGVudGl0eShMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0QXJndW1lbnRzKExqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTtJW0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW52b2tlcihMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9va3VwKClMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGVzJExvb2t1cDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJtdXRlQXJndW1lbnRzKExqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTtMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlO1tJKUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdWJsaWNMb29rdXAoKUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZXMkTG9va3VwOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZmxlY3RBcyhMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTspTGphdmEvbGFuZy9yZWZsZWN0L01lbWJlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcHJlYWRJbnZva2VyKExqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7SSlMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhyb3dFeGNlcHRpb24oTGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGVzJExvb2t1cCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DbGFzczspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZENvbnN0cnVjdG9yKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTspTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRHZXR0ZXIoTGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZFNldHRlcihMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kU3BlY2lhbChMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7TGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRTdGF0aWMoTGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZFN0YXRpY0dldHRlcihMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kU3RhdGljU2V0dGVyKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRWaXJ0dWFsKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTspTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImluKExqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZXMkTG9va3VwOyIvPgotCQk8bWV0aG9kIG5hbWU9Imxvb2t1cENsYXNzKClMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9Imxvb2t1cE1vZGVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmV2ZWFsRGlyZWN0KExqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTspTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZmxlY3QoTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDspTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVmbGVjdENvbnN0cnVjdG9yKExqYXZhL2xhbmcvcmVmbGVjdC9Db25zdHJ1Y3RvcjspTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVmbGVjdEdldHRlcihMamF2YS9sYW5nL3JlZmxlY3QvRmllbGQ7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnJlZmxlY3RTZXR0ZXIoTGphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWZsZWN0U3BlY2lhbChMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kO0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTsiLz4KLQkJPGZpZWxkIG5hbWU9IlBBQ0tBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IlBSSVZBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RFQ1RFRCIvPgotCQk8ZmllbGQgbmFtZT0iUFVCTElDIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kUGFyYW1ldGVyVHlwZXMoTGphdmEvdXRpbC9MaXN0OylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZFBhcmFtZXRlclR5cGVzKFtMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNoYW5nZVBhcmFtZXRlclR5cGUoSUxqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hhbmdlUmV0dXJuVHlwZShMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRyb3BQYXJhbWV0ZXJUeXBlcyhJSSlMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVyYXNlKClMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb21NZXRob2REZXNjcmlwdG9yU3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJpYygpTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmljTWV0aG9kVHlwZShJKUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJpY01ldGhvZFR5cGUoSVopTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNQcmltaXRpdmVzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzV3JhcHBlcnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnRQYXJhbWV0ZXJUeXBlcyhJTGphdmEvdXRpbC9MaXN0OylMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydFBhcmFtZXRlclR5cGVzKElbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtZXRob2RUeXBlKExqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWV0aG9kVHlwZShMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWV0aG9kVHlwZShMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvQ2xhc3M7W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWV0aG9kVHlwZShMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWV0aG9kVHlwZShMamF2YS9sYW5nL0NsYXNzO0xqYXZhL3V0aWwvTGlzdDspTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtZXRob2RUeXBlKExqYXZhL2xhbmcvQ2xhc3M7W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYW1ldGVyQXJyYXkoKVtMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmFtZXRlckNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYW1ldGVyTGlzdCgpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmFtZXRlclR5cGUoSSlMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9InJldHVyblR5cGUoKUxqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9NZXRob2REZXNjcmlwdG9yU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bndyYXAoKUxqYXZhL2xhbmcvaW52b2tlL01ldGhvZFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JhcCgpTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvaW52b2tlL011dGFibGVDYWxsU2l0ZSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL2ludm9rZS9DYWxsU2l0ZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9pbnZva2UvVm9sYXRpbGVDYWxsU2l0ZSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL2ludm9rZS9DYWxsU2l0ZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL2ludm9rZS9NZXRob2RIYW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9pbnZva2UvV3JvbmdNZXRob2RUeXBlRXhjZXB0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9yZWYvUGhhbnRvbVJlZmVyZW5jZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvcmVmL1JlZmVyZW5jZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL3JlZi9SZWZlcmVuY2VRdWV1ZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9yZWYvUmVmZXJlbmNlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVucXVldWUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5xdWV1ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFjaGFiaWxpdHlGZW5jZShMamF2YS9sYW5nL09iamVjdDspViIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL3JlZi9SZWZlcmVuY2VRdWV1ZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9sbCgpTGphdmEvbGFuZy9yZWYvUmVmZXJlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZSgpTGphdmEvbGFuZy9yZWYvUmVmZXJlbmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZShKKUxqYXZhL2xhbmcvcmVmL1JlZmVyZW5jZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvcmVmL1NvZnRSZWZlcmVuY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL3JlZi9SZWZlcmVuY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9yZWYvUmVmZXJlbmNlUXVldWU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvcmVmL1dlYWtSZWZlcmVuY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL3JlZi9SZWZlcmVuY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9yZWYvUmVmZXJlbmNlUXVldWU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9BY2Nlc3NpYmxlT2JqZWN0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvQW5ub3RhdGVkRWxlbWVudCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWNjZXNzaWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFjY2Vzc2libGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWNjZXNzaWJsZShbTGphdmEvbGFuZy9yZWZsZWN0L0FjY2Vzc2libGVPYmplY3Q7WilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvQW5ub3RhdGVkRWxlbWVudCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5ub3RhdGlvbihMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL2Fubm90YXRpb24vQW5ub3RhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbm5vdGF0aW9ucygpW0xqYXZhL2xhbmcvYW5ub3RhdGlvbi9Bbm5vdGF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFubm90YXRpb25zQnlUeXBlKExqYXZhL2xhbmcvQ2xhc3M7KVtMamF2YS9sYW5nL2Fubm90YXRpb24vQW5ub3RhdGlvbjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2xhcmVkQW5ub3RhdGlvbihMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL2Fubm90YXRpb24vQW5ub3RhdGlvbjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2xhcmVkQW5ub3RhdGlvbnMoKVtMamF2YS9sYW5nL2Fubm90YXRpb24vQW5ub3RhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWNsYXJlZEFubm90YXRpb25zQnlUeXBlKExqYXZhL2xhbmcvQ2xhc3M7KVtMamF2YS9sYW5nL2Fubm90YXRpb24vQW5ub3RhdGlvbjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQW5ub3RhdGlvblByZXNlbnQoTGphdmEvbGFuZy9DbGFzczspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L0FycmF5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvbGFuZy9PYmplY3Q7SSlMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb29sZWFuKExqYXZhL2xhbmcvT2JqZWN0O0kpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5dGUoTGphdmEvbGFuZy9PYmplY3Q7SSlCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhcihMamF2YS9sYW5nL09iamVjdDtJKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb3VibGUoTGphdmEvbGFuZy9PYmplY3Q7SSlEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxvYXQoTGphdmEvbGFuZy9PYmplY3Q7SSlGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50KExqYXZhL2xhbmcvT2JqZWN0O0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExlbmd0aChMamF2YS9sYW5nL09iamVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmcoTGphdmEvbGFuZy9PYmplY3Q7SSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvcnQoTGphdmEvbGFuZy9PYmplY3Q7SSlTIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SW5zdGFuY2UoTGphdmEvbGFuZy9DbGFzcztJKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKExqYXZhL2xhbmcvQ2xhc3M7W0kpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KExqYXZhL2xhbmcvT2JqZWN0O0lMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJvb2xlYW4oTGphdmEvbGFuZy9PYmplY3Q7SVopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJ5dGUoTGphdmEvbGFuZy9PYmplY3Q7SUIpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoYXIoTGphdmEvbGFuZy9PYmplY3Q7SUMpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERvdWJsZShMamF2YS9sYW5nL09iamVjdDtJRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmxvYXQoTGphdmEvbGFuZy9PYmplY3Q7SUYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludChMamF2YS9sYW5nL09iamVjdDtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9uZyhMamF2YS9sYW5nL09iamVjdDtJSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hvcnQoTGphdmEvbGFuZy9PYmplY3Q7SVMpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L0FjY2Vzc2libGVPYmplY3QiIHJlbW92ZWQ9IjI2Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L0V4ZWN1dGFibGUiIHNpbmNlPSIyNiIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9HZW5lcmljRGVjbGFyYXRpb24iIHJlbW92ZWQ9IjI2Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L01lbWJlciIgcmVtb3ZlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeGNlcHRpb25UeXBlcygpW0xqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2VuZXJpY0V4Y2VwdGlvblR5cGVzKClbTGphdmEvbGFuZy9yZWZsZWN0L1R5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2VuZXJpY1BhcmFtZXRlclR5cGVzKClbTGphdmEvbGFuZy9yZWZsZWN0L1R5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1ldGVyQW5ub3RhdGlvbnMoKVtbTGphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1ldGVyVHlwZXMoKVtMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmFyQXJncygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKFtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9HZW5lcmljU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9FeGVjdXRhYmxlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9BY2Nlc3NpYmxlT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L0dlbmVyaWNEZWNsYXJhdGlvbiIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9NZW1iZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeGNlcHRpb25UeXBlcygpW0xqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2VuZXJpY0V4Y2VwdGlvblR5cGVzKClbTGphdmEvbGFuZy9yZWZsZWN0L1R5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2VuZXJpY1BhcmFtZXRlclR5cGVzKClbTGphdmEvbGFuZy9yZWZsZWN0L1R5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1ldGVyQW5ub3RhdGlvbnMoKVtbTGphdmEvbGFuZy9hbm5vdGF0aW9uL0Fubm90YXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1ldGVyQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXJUeXBlcygpW0xqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1ldGVycygpW0xqYXZhL2xhbmcvcmVmbGVjdC9QYXJhbWV0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYXJBcmdzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9HZW5lcmljU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9GaWVsZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9BY2Nlc3NpYmxlT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L01lbWJlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9vbGVhbihMamF2YS9sYW5nL09iamVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5dGUoTGphdmEvbGFuZy9PYmplY3Q7KUIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyKExqYXZhL2xhbmcvT2JqZWN0OylDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG91YmxlKExqYXZhL2xhbmcvT2JqZWN0OylEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxvYXQoTGphdmEvbGFuZy9PYmplY3Q7KUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHZW5lcmljVHlwZSgpTGphdmEvbGFuZy9yZWZsZWN0L1R5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50KExqYXZhL2xhbmcvT2JqZWN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZyhMamF2YS9sYW5nL09iamVjdDspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3J0KExqYXZhL2xhbmcvT2JqZWN0OylTIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VudW1Db25zdGFudCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJvb2xlYW4oTGphdmEvbGFuZy9PYmplY3Q7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qnl0ZShMamF2YS9sYW5nL09iamVjdDtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGFyKExqYXZhL2xhbmcvT2JqZWN0O0MpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERvdWJsZShMamF2YS9sYW5nL09iamVjdDtEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGbG9hdChMamF2YS9sYW5nL09iamVjdDtGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnQoTGphdmEvbGFuZy9PYmplY3Q7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9uZyhMamF2YS9sYW5nL09iamVjdDtKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG9ydChMamF2YS9sYW5nL09iamVjdDtTKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0dlbmVyaWNTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L0dlbmVyaWNBcnJheVR5cGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9UeXBlIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2VuZXJpY0NvbXBvbmVudFR5cGUoKUxqYXZhL2xhbmcvcmVmbGVjdC9UeXBlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L0dlbmVyaWNEZWNsYXJhdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L0Fubm90YXRlZEVsZW1lbnQiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGVQYXJhbWV0ZXJzKClbTGphdmEvbGFuZy9yZWZsZWN0L1R5cGVWYXJpYWJsZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9HZW5lcmljU2lnbmF0dXJlRm9ybWF0RXJyb3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0NsYXNzRm9ybWF0RXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L0ludm9jYXRpb25IYW5kbGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZva2UoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDtbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L0ludm9jYXRpb25UYXJnZXRFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbiIgcmVtb3ZlZD0iMTkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1JlZmxlY3RpdmVPcGVyYXRpb25FeGNlcHRpb24iIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRhcmdldEV4Y2VwdGlvbigpTGphdmEvbGFuZy9UaHJvd2FibGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvTWFsZm9ybWVkUGFyYW1ldGVyaXplZFR5cGVFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9NYWxmb3JtZWRQYXJhbWV0ZXJzRXhjZXB0aW9uIiBzaW5jZT0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L01lbWJlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVjbGFyaW5nQ2xhc3MoKUxqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9kaWZpZXJzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTeW50aGV0aWMoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkRFQ0xBUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJQVUJMSUMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2QiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvQWNjZXNzaWJsZU9iamVjdCIgcmVtb3ZlZD0iMjYiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvRXhlY3V0YWJsZSIgc2luY2U9IjI2Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L0dlbmVyaWNEZWNsYXJhdGlvbiIgcmVtb3ZlZD0iMjYiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvTWVtYmVyIiByZW1vdmVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRWYWx1ZSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhjZXB0aW9uVHlwZXMoKVtMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdlbmVyaWNFeGNlcHRpb25UeXBlcygpW0xqYXZhL2xhbmcvcmVmbGVjdC9UeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdlbmVyaWNQYXJhbWV0ZXJUeXBlcygpW0xqYXZhL2xhbmcvcmVmbGVjdC9UeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdlbmVyaWNSZXR1cm5UeXBlKClMamF2YS9sYW5nL3JlZmxlY3QvVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXJBbm5vdGF0aW9ucygpW1tMamF2YS9sYW5nL2Fubm90YXRpb24vQW5ub3RhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXJUeXBlcygpW0xqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmV0dXJuVHlwZSgpTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZva2UoTGphdmEvbGFuZy9PYmplY3Q7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JyaWRnZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGVmYXVsdCgpWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYXJBcmdzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9HZW5lcmljU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9Nb2RpZmllciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xhc3NNb2RpZmllcnMoKUkiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnN0cnVjdG9yTW9kaWZpZXJzKClJIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWVsZE1vZGlmaWVycygpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW50ZXJmYWNlTW9kaWZpZXJzKClJIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Fic3RyYWN0KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmluYWwoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbnRlcmZhY2UoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOYXRpdmUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcml2YXRlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUHJvdGVjdGVkKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUHVibGljKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3RhdGljKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3RyaWN0KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3luY2hyb25pemVkKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVHJhbnNpZW50KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVm9sYXRpbGUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWV0aG9kTW9kaWZpZXJzKClJIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJhbWV0ZXJNb2RpZmllcnMoKUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBQlNUUkFDVCIvPgotCQk8ZmllbGQgbmFtZT0iRklOQUwiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVSRkFDRSIvPgotCQk8ZmllbGQgbmFtZT0iTkFUSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklWQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9URUNURUQiLz4KLQkJPGZpZWxkIG5hbWU9IlBVQkxJQyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBVElDIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTkNIUk9OSVpFRCIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNJRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJWT0xBVElMRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L1BhcmFtZXRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9Bbm5vdGF0ZWRFbGVtZW50Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9yZWZsZWN0L0V4ZWN1dGFibGU7SSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWNsYXJpbmdFeGVjdXRhYmxlKClMamF2YS9sYW5nL3JlZmxlY3QvRXhlY3V0YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2RpZmllcnMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXJpemVkVHlwZSgpTGphdmEvbGFuZy9yZWZsZWN0L1R5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ltcGxpY2l0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOYW1lUHJlc2VudCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3ludGhldGljKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYXJBcmdzKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvUGFyYW1ldGVyaXplZFR5cGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9UeXBlIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0dWFsVHlwZUFyZ3VtZW50cygpW0xqYXZhL2xhbmcvcmVmbGVjdC9UeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE93bmVyVHlwZSgpTGphdmEvbGFuZy9yZWZsZWN0L1R5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmF3VHlwZSgpTGphdmEvbGFuZy9yZWZsZWN0L1R5cGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvUHJveHkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvbkhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnZvY2F0aW9uSGFuZGxlcihMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9yZWZsZWN0L0ludm9jYXRpb25IYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3h5Q2xhc3MoTGphdmEvbGFuZy9DbGFzc0xvYWRlcjtbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Byb3h5Q2xhc3MoTGphdmEvbGFuZy9DbGFzczspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1Byb3h5SW5zdGFuY2UoTGphdmEvbGFuZy9DbGFzc0xvYWRlcjtbTGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvbkhhbmRsZXI7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8ZmllbGQgbmFtZT0iaCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbGFuZy9yZWZsZWN0L1JlZmxlY3RQZXJtaXNzaW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvQmFzaWNQZXJtaXNzaW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvVHlwZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI4Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvVHlwZVZhcmlhYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvVHlwZSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvdW5kcygpW0xqYXZhL2xhbmcvcmVmbGVjdC9UeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdlbmVyaWNEZWNsYXJhdGlvbigpTGphdmEvbGFuZy9yZWZsZWN0L0dlbmVyaWNEZWNsYXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL2xhbmcvcmVmbGVjdC9VbmRlY2xhcmVkVGhyb3dhYmxlRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5kZWNsYXJlZFRocm93YWJsZSgpTGphdmEvbGFuZy9UaHJvd2FibGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvV2lsZGNhcmRUeXBlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL3JlZmxlY3QvVHlwZSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvd2VyQm91bmRzKClbTGphdmEvbGFuZy9yZWZsZWN0L1R5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXBwZXJCb3VuZHMoKVtMamF2YS9sYW5nL3JlZmxlY3QvVHlwZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL21hdGgvQmlnRGVjaW1hbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvTnVtYmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEQpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihETGphdmEvbWF0aC9NYXRoQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL21hdGgvTWF0aENvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpMamF2YS9tYXRoL01hdGhDb250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL21hdGgvTWF0aENvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbWF0aC9CaWdJbnRlZ2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL21hdGgvQmlnSW50ZWdlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbWF0aC9CaWdJbnRlZ2VyO0lMamF2YS9tYXRoL01hdGhDb250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL01hdGhDb250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0NJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtDSUlMamF2YS9tYXRoL01hdGhDb250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtDTGphdmEvbWF0aC9NYXRoQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFicygpTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFicyhMamF2YS9tYXRoL01hdGhDb250ZXh0OylMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKExqYXZhL21hdGgvQmlnRGVjaW1hbDspTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMamF2YS9tYXRoL0JpZ0RlY2ltYWw7TGphdmEvbWF0aC9NYXRoQ29udGV4dDspTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ5dGVWYWx1ZUV4YWN0KClCIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL21hdGgvQmlnRGVjaW1hbDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImRpdmlkZShMamF2YS9tYXRoL0JpZ0RlY2ltYWw7KUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXZpZGUoTGphdmEvbWF0aC9CaWdEZWNpbWFsO0kpTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpdmlkZShMamF2YS9tYXRoL0JpZ0RlY2ltYWw7SUkpTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpdmlkZShMamF2YS9tYXRoL0JpZ0RlY2ltYWw7SUxqYXZhL21hdGgvUm91bmRpbmdNb2RlOylMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGl2aWRlKExqYXZhL21hdGgvQmlnRGVjaW1hbDtMamF2YS9tYXRoL01hdGhDb250ZXh0OylMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGl2aWRlKExqYXZhL21hdGgvQmlnRGVjaW1hbDtMamF2YS9tYXRoL1JvdW5kaW5nTW9kZTspTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpdmlkZUFuZFJlbWFpbmRlcihMamF2YS9tYXRoL0JpZ0RlY2ltYWw7KVtMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGl2aWRlQW5kUmVtYWluZGVyKExqYXZhL21hdGgvQmlnRGVjaW1hbDtMamF2YS9tYXRoL01hdGhDb250ZXh0OylbTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpdmlkZVRvSW50ZWdyYWxWYWx1ZShMamF2YS9tYXRoL0JpZ0RlY2ltYWw7KUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXZpZGVUb0ludGVncmFsVmFsdWUoTGphdmEvbWF0aC9CaWdEZWNpbWFsO0xqYXZhL21hdGgvTWF0aENvbnRleHQ7KUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRWYWx1ZUV4YWN0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9uZ1ZhbHVlRXhhY3QoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXgoTGphdmEvbWF0aC9CaWdEZWNpbWFsOylMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWluKExqYXZhL21hdGgvQmlnRGVjaW1hbDspTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1vdmVQb2ludExlZnQoSSlMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZVBvaW50UmlnaHQoSSlMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibXVsdGlwbHkoTGphdmEvbWF0aC9CaWdEZWNpbWFsOylMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibXVsdGlwbHkoTGphdmEvbWF0aC9CaWdEZWNpbWFsO0xqYXZhL21hdGgvTWF0aENvbnRleHQ7KUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZWdhdGUoKUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZWdhdGUoTGphdmEvbWF0aC9NYXRoQ29udGV4dDspTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXMoKUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKExqYXZhL21hdGgvTWF0aENvbnRleHQ7KUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3coSSlMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG93KElMamF2YS9tYXRoL01hdGhDb250ZXh0OylMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJlY2lzaW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtYWluZGVyKExqYXZhL21hdGgvQmlnRGVjaW1hbDspTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbWFpbmRlcihMamF2YS9tYXRoL0JpZ0RlY2ltYWw7TGphdmEvbWF0aC9NYXRoQ29udGV4dDspTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9InJvdW5kKExqYXZhL21hdGgvTWF0aENvbnRleHQ7KUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2FsZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNjYWxlQnlQb3dlck9mVGVuKEkpTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjYWxlKEkpTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjYWxlKElJKUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTY2FsZShJTGphdmEvbWF0aC9Sb3VuZGluZ01vZGU7KUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG9ydFZhbHVlRXhhY3QoKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaWdudW0oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdHJpcFRyYWlsaW5nWmVyb3MoKUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJ0cmFjdChMamF2YS9tYXRoL0JpZ0RlY2ltYWw7KUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJ0cmFjdChMamF2YS9tYXRoL0JpZ0RlY2ltYWw7TGphdmEvbWF0aC9NYXRoQ29udGV4dDspTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQmlnSW50ZWdlcigpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQmlnSW50ZWdlckV4YWN0KClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9FbmdpbmVlcmluZ1N0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9QbGFpblN0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idWxwKClMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5zY2FsZWRWYWx1ZSgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoRClMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihKKUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKEpJKUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPGZpZWxkIG5hbWU9Ik9ORSIvPgotCQk8ZmllbGQgbmFtZT0iUk9VTkRfQ0VJTElORyIvPgotCQk8ZmllbGQgbmFtZT0iUk9VTkRfRE9XTiIvPgotCQk8ZmllbGQgbmFtZT0iUk9VTkRfRkxPT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlJPVU5EX0hBTEZfRE9XTiIvPgotCQk8ZmllbGQgbmFtZT0iUk9VTkRfSEFMRl9FVkVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJST1VORF9IQUxGX1VQIi8+Ci0JCTxmaWVsZCBuYW1lPSJST1VORF9VTk5FQ0VTU0FSWSIvPgotCQk8ZmllbGQgbmFtZT0iUk9VTkRfVVAiLz4KLQkJPGZpZWxkIG5hbWU9IlRFTiIvPgotCQk8ZmllbGQgbmFtZT0iWkVSTyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbWF0aC9CaWdJbnRlZ2VyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9OdW1iZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlMamF2YS91dGlsL1JhbmRvbTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGphdmEvdXRpbC9SYW5kb207KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSVtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhYnMoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGQoTGphdmEvbWF0aC9CaWdJbnRlZ2VyOylMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYW5kKExqYXZhL21hdGgvQmlnSW50ZWdlcjspTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFuZE5vdChMamF2YS9tYXRoL0JpZ0ludGVnZXI7KUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaXRDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImJpdExlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQml0KEkpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS9tYXRoL0JpZ0ludGVnZXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXZpZGUoTGphdmEvbWF0aC9CaWdJbnRlZ2VyOylMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGl2aWRlQW5kUmVtYWluZGVyKExqYXZhL21hdGgvQmlnSW50ZWdlcjspW0xqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbGlwQml0KEkpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdjZChMamF2YS9tYXRoL0JpZ0ludGVnZXI7KUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb3dlc3RTZXRCaXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Byb2JhYmxlUHJpbWUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4KExqYXZhL21hdGgvQmlnSW50ZWdlcjspTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbihMamF2YS9tYXRoL0JpZ0ludGVnZXI7KUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtb2QoTGphdmEvbWF0aC9CaWdJbnRlZ2VyOylMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibW9kSW52ZXJzZShMamF2YS9tYXRoL0JpZ0ludGVnZXI7KUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtb2RQb3coTGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjspTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im11bHRpcGx5KExqYXZhL21hdGgvQmlnSW50ZWdlcjspTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5lZ2F0ZSgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRQcm9iYWJsZVByaW1lKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm90KClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3IoTGphdmEvbWF0aC9CaWdJbnRlZ2VyOylMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG93KEkpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9InByb2JhYmxlUHJpbWUoSUxqYXZhL3V0aWwvUmFuZG9tOylMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtYWluZGVyKExqYXZhL21hdGgvQmlnSW50ZWdlcjspTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJpdChJKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaGlmdExlZnQoSSlMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2hpZnRSaWdodChJKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaWdudW0oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJ0cmFjdChMamF2YS9tYXRoL0JpZ0ludGVnZXI7KUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0Qml0KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InRvQnl0ZUFycmF5KClbQiIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihKKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ4b3IoTGphdmEvbWF0aC9CaWdJbnRlZ2VyOylMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRFTiIvPgotCQk8ZmllbGQgbmFtZT0iWkVSTyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbWF0aC9NYXRoQ29udGV4dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGphdmEvbWF0aC9Sb3VuZGluZ01vZGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVjaXNpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3VuZGluZ01vZGUoKUxqYXZhL21hdGgvUm91bmRpbmdNb2RlOyIvPgotCQk8ZmllbGQgbmFtZT0iREVDSU1BTDEyOCIvPgotCQk8ZmllbGQgbmFtZT0iREVDSU1BTDMyIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUNJTUFMNjQiLz4KLQkJPGZpZWxkIG5hbWU9IlVOTElNSVRFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbWF0aC9Sb3VuZGluZ01vZGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKEkpTGphdmEvbWF0aC9Sb3VuZGluZ01vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbWF0aC9Sb3VuZGluZ01vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGphdmEvbWF0aC9Sb3VuZGluZ01vZGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRUlMSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJET1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJGTE9PUiIvPgotCQk8ZmllbGQgbmFtZT0iSEFMRl9ET1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJIQUxGX0VWRU4iLz4KLQkJPGZpZWxkIG5hbWU9IkhBTEZfVVAiLz4KLQkJPGZpZWxkIG5hbWU9IlVOTkVDRVNTQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJVUCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L0F1dGhlbnRpY2F0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhc3N3b3JkQXV0aGVudGljYXRpb24oKUxqYXZhL25ldC9QYXNzd29yZEF1dGhlbnRpY2F0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVlc3RpbmdIb3N0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXF1ZXN0aW5nUG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVlc3RpbmdQcm9tcHQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVlc3RpbmdQcm90b2NvbCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVxdWVzdGluZ1NjaGVtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVxdWVzdGluZ1NpdGUoKUxqYXZhL25ldC9JbmV0QWRkcmVzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXF1ZXN0aW5nVVJMKClMamF2YS9uZXQvVVJMOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVlc3RvclR5cGUoKUxqYXZhL25ldC9BdXRoZW50aWNhdG9yJFJlcXVlc3RvclR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFBhc3N3b3JkQXV0aGVudGljYXRpb24oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbmV0L0luZXRBZGRyZXNzO0lMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmV0L1Bhc3N3b3JkQXV0aGVudGljYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWVzdFBhc3N3b3JkQXV0aGVudGljYXRpb24oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbmV0L0luZXRBZGRyZXNzO0lMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9uZXQvVVJMO0xqYXZhL25ldC9BdXRoZW50aWNhdG9yJFJlcXVlc3RvclR5cGU7KUxqYXZhL25ldC9QYXNzd29yZEF1dGhlbnRpY2F0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVlc3RQYXNzd29yZEF1dGhlbnRpY2F0aW9uKExqYXZhL25ldC9JbmV0QWRkcmVzcztJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25ldC9QYXNzd29yZEF1dGhlbnRpY2F0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHQoTGphdmEvbmV0L0F1dGhlbnRpY2F0b3I7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9BdXRoZW50aWNhdG9yJFJlcXVlc3RvclR5cGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9uZXQvQXV0aGVudGljYXRvciRSZXF1ZXN0b3JUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL25ldC9BdXRoZW50aWNhdG9yJFJlcXVlc3RvclR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9YWSIvPgotCQk8ZmllbGQgbmFtZT0iU0VSVkVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvQmluZEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25ldC9Tb2NrZXRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9DYWNoZVJlcXVlc3QiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFib3J0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9keSgpTGphdmEvaW8vT3V0cHV0U3RyZWFtOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L0NhY2hlUmVzcG9uc2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvZHkoKUxqYXZhL2lvL0lucHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlYWRlcnMoKUxqYXZhL3V0aWwvTWFwOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L0Nvbm5lY3RFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uZXQvU29ja2V0RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvQ29udGVudEhhbmRsZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnQoTGphdmEvbmV0L1VSTENvbm5lY3Rpb247KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnQoTGphdmEvbmV0L1VSTENvbm5lY3Rpb247W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L0NvbnRlbnRIYW5kbGVyRmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ29udGVudEhhbmRsZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25ldC9Db250ZW50SGFuZGxlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9Db29raWVIYW5kbGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvbmV0L1VSSTtMamF2YS91dGlsL01hcDspTGphdmEvdXRpbC9NYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdCgpTGphdmEvbmV0L0Nvb2tpZUhhbmRsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL25ldC9VUkk7TGphdmEvdXRpbC9NYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0KExqYXZhL25ldC9Db29raWVIYW5kbGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvQ29va2llTWFuYWdlciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25ldC9Db29raWVIYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25ldC9Db29raWVTdG9yZTtMamF2YS9uZXQvQ29va2llUG9saWN5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29va2llU3RvcmUoKUxqYXZhL25ldC9Db29raWVTdG9yZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb29raWVQb2xpY3koTGphdmEvbmV0L0Nvb2tpZVBvbGljeTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L0Nvb2tpZVBvbGljeSIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2hvdWxkQWNjZXB0KExqYXZhL25ldC9VUkk7TGphdmEvbmV0L0h0dHBDb29raWU7KVoiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VQVF9BTEwiLz4KLQkJPGZpZWxkIG5hbWU9IkFDQ0VQVF9OT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ0NFUFRfT1JJR0lOQUxfU0VSVkVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvQ29va2llU3RvcmUiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMamF2YS9uZXQvVVJJO0xqYXZhL25ldC9IdHRwQ29va2llOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KExqYXZhL25ldC9VUkk7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb29raWVzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VVJJcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZShMamF2YS9uZXQvVVJJO0xqYXZhL25ldC9IdHRwQ29va2llOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQWxsKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvRGF0YWdyYW1QYWNrZXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQkkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQklJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0JJSUxqYXZhL25ldC9JbmV0QWRkcmVzcztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0JJSUxqYXZhL25ldC9Tb2NrZXRBZGRyZXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCSUxqYXZhL25ldC9JbmV0QWRkcmVzcztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0JJTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBZGRyZXNzKClMamF2YS9uZXQvSW5ldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPZmZzZXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3J0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U29ja2V0QWRkcmVzcygpTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWRkcmVzcyhMamF2YS9uZXQvSW5ldEFkZHJlc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhKFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhKFtCSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExlbmd0aChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb3J0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNvY2tldEFkZHJlc3MoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9EYXRhZ3JhbVNvY2tldCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9uZXQvSW5ldEFkZHJlc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmV0L0RhdGFncmFtU29ja2V0SW1wbDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvU29ja2V0QWRkcmVzczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmQoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGphdmEvbmV0L0luZXRBZGRyZXNzO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNjb25uZWN0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnJvYWRjYXN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhbm5lbCgpTGphdmEvbmlvL2NoYW5uZWxzL0RhdGFncmFtQ2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmV0QWRkcmVzcygpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsQWRkcmVzcygpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsUG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsU29ja2V0QWRkcmVzcygpTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlY2VpdmVCdWZmZXJTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVtb3RlU29ja2V0QWRkcmVzcygpTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmV1c2VBZGRyZXNzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VuZEJ1ZmZlclNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb1RpbWVvdXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFmZmljQ2xhc3MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JvdW5kKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDbG9zZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nvbm5lY3RlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlY2VpdmUoTGphdmEvbmV0L0RhdGFncmFtUGFja2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZChMamF2YS9uZXQvRGF0YWdyYW1QYWNrZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCcm9hZGNhc3QoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0YWdyYW1Tb2NrZXRJbXBsRmFjdG9yeShMamF2YS9uZXQvRGF0YWdyYW1Tb2NrZXRJbXBsRmFjdG9yeTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlY2VpdmVCdWZmZXJTaXplKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJldXNlQWRkcmVzcyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZW5kQnVmZmVyU2l6ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTb1RpbWVvdXQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJhZmZpY0NsYXNzKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L0RhdGFncmFtU29ja2V0SW1wbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmV0L1NvY2tldE9wdGlvbnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kKElMamF2YS9uZXQvSW5ldEFkZHJlc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGphdmEvbmV0L0luZXRBZGRyZXNzO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2Nvbm5lY3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWxlRGVzY3JpcHRvcigpTGphdmEvaW8vRmlsZURlc2NyaXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxQb3J0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VFRMKClCIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVUb0xpdmUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJqb2luKExqYXZhL25ldC9JbmV0QWRkcmVzczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImpvaW5Hcm91cChMamF2YS9uZXQvU29ja2V0QWRkcmVzcztMamF2YS9uZXQvTmV0d29ya0ludGVyZmFjZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxlYXZlKExqYXZhL25ldC9JbmV0QWRkcmVzczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxlYXZlR3JvdXAoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7TGphdmEvbmV0L05ldHdvcmtJbnRlcmZhY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZWVrKExqYXZhL25ldC9JbmV0QWRkcmVzczspSSIvPgotCQk8bWV0aG9kIG5hbWU9InBlZWtEYXRhKExqYXZhL25ldC9EYXRhZ3JhbVBhY2tldDspSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlY2VpdmUoTGphdmEvbmV0L0RhdGFncmFtUGFja2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZChMamF2YS9uZXQvRGF0YWdyYW1QYWNrZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUVEwoQilWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVUb0xpdmUoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJmZCIvPgotCQk8ZmllbGQgbmFtZT0ibG9jYWxQb3J0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvRGF0YWdyYW1Tb2NrZXRJbXBsRmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRGF0YWdyYW1Tb2NrZXRJbXBsKClMamF2YS9uZXQvRGF0YWdyYW1Tb2NrZXRJbXBsOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L0ZpbGVOYW1lTWFwIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50VHlwZUZvcihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvSHR0cENvb2tpZSIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb21haW5NYXRjaGVzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tbWVudCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29tbWVudFVSTCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzY2FyZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERvbWFpbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4QWdlKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGF0aCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9ydGxpc3QoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlY3VyZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbHVlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZXJzaW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRXhwaXJlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSHR0cE9ubHkoKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29tbWVudChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbW1lbnRVUkwoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaXNjYXJkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERvbWFpbihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEh0dHBPbmx5KFopViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4QWdlKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhdGgoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb3J0bGlzdChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlY3VyZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYWx1ZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZlcnNpb24oSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvSHR0cFJldHJ5RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSU9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2F0aW9uKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWFzb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc3BvbnNlQ29kZSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L0h0dHBVUkxDb25uZWN0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbmV0L1VSTENvbm5lY3Rpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmV0L1VSTDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc2Nvbm5lY3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcnJvclN0cmVhbSgpTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9sbG93UmVkaXJlY3RzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2VGb2xsb3dSZWRpcmVjdHMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXF1ZXN0TWV0aG9kKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNwb25zZUNvZGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNwb25zZU1lc3NhZ2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENodW5rZWRTdHJlYW1pbmdNb2RlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZpeGVkTGVuZ3RoU3RyZWFtaW5nTW9kZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaXhlZExlbmd0aFN0cmVhbWluZ01vZGUoSilWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb2xsb3dSZWRpcmVjdHMoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5zdGFuY2VGb2xsb3dSZWRpcmVjdHMoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVxdWVzdE1ldGhvZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InVzaW5nUHJveHkoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfQUNDRVBURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfQkFEX0dBVEVXQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfQkFEX01FVEhPRCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9CQURfUkVRVUVTVCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9DTElFTlRfVElNRU9VVCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9DT05GTElDVCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9DUkVBVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJIVFRQX0VOVElUWV9UT09fTEFSR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfRk9SQklEREVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJIVFRQX0dBVEVXQVlfVElNRU9VVCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9HT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJIVFRQX0lOVEVSTkFMX0VSUk9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJIVFRQX0xFTkdUSF9SRVFVSVJFRCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9NT1ZFRF9QRVJNIi8+Ci0JCTxmaWVsZCBuYW1lPSJIVFRQX01PVkVEX1RFTVAiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfTVVMVF9DSE9JQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfTk9UX0FDQ0VQVEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfTk9UX0FVVEhPUklUQVRJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfTk9UX0ZPVU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJIVFRQX05PVF9JTVBMRU1FTlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9OT1RfTU9ESUZJRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfTk9fQ09OVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9PSyIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9QQVJUSUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJIVFRQX1BBWU1FTlRfUkVRVUlSRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfUFJFQ09OX0ZBSUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9QUk9YWV9BVVRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJIVFRQX1JFUV9UT09fTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9SRVNFVCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9TRUVfT1RIRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfU0VSVkVSX0VSUk9SIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9VTkFVVEhPUklaRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfVU5BVkFJTEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfVU5TVVBQT1JURURfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9VU0VfUFJPWFkiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfVkVSU0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iY2h1bmtMZW5ndGgiLz4KLQkJPGZpZWxkIG5hbWU9ImZpeGVkQ29udGVudExlbmd0aCIvPgotCQk8ZmllbGQgbmFtZT0iZml4ZWRDb250ZW50TGVuZ3RoTG9uZyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpbnN0YW5jZUZvbGxvd1JlZGlyZWN0cyIvPgotCQk8ZmllbGQgbmFtZT0ibWV0aG9kIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXNwb25zZUNvZGUiLz4KLQkJPGZpZWxkIG5hbWU9InJlc3BvbnNlTWVzc2FnZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L0lETiIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9BU0NJSShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9BU0NJSShMamF2YS9sYW5nL1N0cmluZztJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvVW5pY29kZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9Vbmljb2RlKExqYXZhL2xhbmcvU3RyaW5nO0kpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTExPV19VTkFTU0lHTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJVU0VfU1REM19BU0NJSV9SVUxFUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L0luZXQ0QWRkcmVzcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25ldC9JbmV0QWRkcmVzcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L0luZXQ2QWRkcmVzcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25ldC9JbmV0QWRkcmVzcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5QWRkcmVzcyhMamF2YS9sYW5nL1N0cmluZztbQkkpTGphdmEvbmV0L0luZXQ2QWRkcmVzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeUFkZHJlc3MoTGphdmEvbGFuZy9TdHJpbmc7W0JMamF2YS9uZXQvTmV0d29ya0ludGVyZmFjZTspTGphdmEvbmV0L0luZXQ2QWRkcmVzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY29wZUlkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NvcGVkSW50ZXJmYWNlKClMamF2YS9uZXQvTmV0d29ya0ludGVyZmFjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0lQdjRDb21wYXRpYmxlQWRkcmVzcygpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L0luZXRBZGRyZXNzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBZGRyZXNzKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbEJ5TmFtZShMamF2YS9sYW5nL1N0cmluZzspW0xqYXZhL25ldC9JbmV0QWRkcmVzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeUFkZHJlc3MoTGphdmEvbGFuZy9TdHJpbmc7W0IpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5QWRkcmVzcyhbQilMamF2YS9uZXQvSW5ldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnlOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9uZXQvSW5ldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2Fub25pY2FsSG9zdE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvc3RBZGRyZXNzKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3N0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxIb3N0KClMamF2YS9uZXQvSW5ldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9vcGJhY2tBZGRyZXNzKClMamF2YS9uZXQvSW5ldEFkZHJlc3M7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FueUxvY2FsQWRkcmVzcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTGlua0xvY2FsQWRkcmVzcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG9vcGJhY2tBZGRyZXNzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNNQ0dsb2JhbCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTUNMaW5rTG9jYWwoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc01DTm9kZUxvY2FsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNNQ09yZ0xvY2FsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNNQ1NpdGVMb2NhbCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTXVsdGljYXN0QWRkcmVzcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVhY2hhYmxlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVhY2hhYmxlKExqYXZhL25ldC9OZXR3b3JrSW50ZXJmYWNlO0lJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NpdGVMb2NhbEFkZHJlc3MoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9JbmV0U29ja2V0QWRkcmVzcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25ldC9Tb2NrZXRBZGRyZXNzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmV0L0luZXRBZGRyZXNzO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVVucmVzb2x2ZWQoTGphdmEvbGFuZy9TdHJpbmc7SSlMamF2YS9uZXQvSW5ldFNvY2tldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWRkcmVzcygpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvc3ROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3N0U3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvcnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VucmVzb2x2ZWQoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9JbnRlcmZhY2VBZGRyZXNzIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBZGRyZXNzKClMamF2YS9uZXQvSW5ldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnJvYWRjYXN0KClMamF2YS9uZXQvSW5ldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV0d29ya1ByZWZpeExlbmd0aCgpUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L0phclVSTENvbm5lY3Rpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uZXQvVVJMQ29ubmVjdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvVVJMOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlcygpTGphdmEvdXRpbC9qYXIvQXR0cmlidXRlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZXJ0aWZpY2F0ZXMoKVtMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudHJ5TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SmFyRW50cnkoKUxqYXZhL3V0aWwvamFyL0phckVudHJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEphckZpbGUoKUxqYXZhL3V0aWwvamFyL0phckZpbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SmFyRmlsZVVSTCgpTGphdmEvbmV0L1VSTDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYWluQXR0cmlidXRlcygpTGphdmEvdXRpbC9qYXIvQXR0cmlidXRlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYW5pZmVzdCgpTGphdmEvdXRpbC9qYXIvTWFuaWZlc3Q7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJqYXJGaWxlVVJMQ29ubmVjdGlvbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L01hbGZvcm1lZFVSTEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0lPRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvTXVsdGljYXN0U29ja2V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbmV0L0RhdGFncmFtU29ja2V0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvU29ja2V0QWRkcmVzczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVyZmFjZSgpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvb3BiYWNrTW9kZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5ldHdvcmtJbnRlcmZhY2UoKUxqYXZhL25ldC9OZXR3b3JrSW50ZXJmYWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRUTCgpQiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lVG9MaXZlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iam9pbkdyb3VwKExqYXZhL25ldC9JbmV0QWRkcmVzczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImpvaW5Hcm91cChMamF2YS9uZXQvU29ja2V0QWRkcmVzcztMamF2YS9uZXQvTmV0d29ya0ludGVyZmFjZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxlYXZlR3JvdXAoTGphdmEvbmV0L0luZXRBZGRyZXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGVhdmVHcm91cChMamF2YS9uZXQvU29ja2V0QWRkcmVzcztMamF2YS9uZXQvTmV0d29ya0ludGVyZmFjZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmQoTGphdmEvbmV0L0RhdGFncmFtUGFja2V0O0IpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlcmZhY2UoTGphdmEvbmV0L0luZXRBZGRyZXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9vcGJhY2tNb2RlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5ldHdvcmtJbnRlcmZhY2UoTGphdmEvbmV0L05ldHdvcmtJbnRlcmZhY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUVEwoQilWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVUb0xpdmUoSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvTmV0UGVybWlzc2lvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0Jhc2ljUGVybWlzc2lvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L05ldHdvcmtJbnRlcmZhY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5SW5kZXgoSSlMamF2YS9uZXQvTmV0d29ya0ludGVyZmFjZTsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5SW5ldEFkZHJlc3MoTGphdmEvbmV0L0luZXRBZGRyZXNzOylMamF2YS9uZXQvTmV0d29ya0ludGVyZmFjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25ldC9OZXR3b3JrSW50ZXJmYWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIYXJkd2FyZUFkZHJlc3MoKVtCIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZGV4KClJIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmV0QWRkcmVzc2VzKClMamF2YS91dGlsL0VudW1lcmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVyZmFjZUFkZHJlc3NlcygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNVFUoKUkiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV0d29ya0ludGVyZmFjZXMoKUxqYXZhL3V0aWwvRW51bWVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50KClMamF2YS9uZXQvTmV0d29ya0ludGVyZmFjZTsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3ViSW50ZXJmYWNlcygpTGphdmEvdXRpbC9FbnVtZXJhdGlvbjsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMb29wYmFjaygpWiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1BvaW50VG9Qb2ludCgpWiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VwKClaIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmlydHVhbCgpWiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c011bHRpY2FzdCgpWiIgc2luY2U9IjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9Ob1JvdXRlVG9Ib3N0RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbmV0L1NvY2tldEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L1Bhc3N3b3JkQXV0aGVudGljYXRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztbQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFzc3dvcmQoKVtDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlck5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L1BvcnRVbnJlYWNoYWJsZUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25ldC9Tb2NrZXRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9Qcm90b2NvbEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0lPRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvUHJvdG9jb2xGYW1pbHkiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJuYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9Qcm94eSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25ldC9Qcm94eSRUeXBlO0xqYXZhL25ldC9Tb2NrZXRBZGRyZXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkcmVzcygpTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHlwZSgpTGphdmEvbmV0L1Byb3h5JFR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOT19QUk9YWSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L1Byb3h5JFR5cGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9uZXQvUHJveHkkVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS9uZXQvUHJveHkkVHlwZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUCIvPgotCQk8ZmllbGQgbmFtZT0iU09DS1MiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9Qcm94eVNlbGVjdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0RmFpbGVkKExqYXZhL25ldC9VUkk7TGphdmEvbmV0L1NvY2tldEFkZHJlc3M7TGphdmEvaW8vSU9FeGNlcHRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0KClMamF2YS9uZXQvUHJveHlTZWxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZWxlY3QoTGphdmEvbmV0L1VSSTspTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHQoTGphdmEvbmV0L1Byb3h5U2VsZWN0b3I7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9SZXNwb25zZUNhY2hlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvbmV0L1VSSTtMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL01hcDspTGphdmEvbmV0L0NhY2hlUmVzcG9uc2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdCgpTGphdmEvbmV0L1Jlc3BvbnNlQ2FjaGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL25ldC9VUkk7TGphdmEvbmV0L1VSTENvbm5lY3Rpb247KUxqYXZhL25ldC9DYWNoZVJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVmYXVsdChMamF2YS9uZXQvUmVzcG9uc2VDYWNoZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L1NlY3VyZUNhY2hlUmVzcG9uc2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uZXQvQ2FjaGVSZXNwb25zZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENpcGhlclN1aXRlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbENlcnRpZmljYXRlQ2hhaW4oKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbFByaW5jaXBhbCgpTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlZXJQcmluY2lwYWwoKUxqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2ZXJDZXJ0aWZpY2F0ZUNoYWluKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvU2VydmVyU29ja2V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUxqYXZhL25ldC9JbmV0QWRkcmVzczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvU29ja2V0SW1wbDspViIgcmVtb3ZlZD0iMiIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdCgpTGphdmEvbmV0L1NvY2tldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kKExqYXZhL25ldC9Tb2NrZXRBZGRyZXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZChMamF2YS9uZXQvU29ja2V0QWRkcmVzcztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYW5uZWwoKUxqYXZhL25pby9jaGFubmVscy9TZXJ2ZXJTb2NrZXRDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZXRBZGRyZXNzKClMamF2YS9uZXQvSW5ldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxQb3J0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxTb2NrZXRBZGRyZXNzKClMamF2YS9uZXQvU29ja2V0QWRkcmVzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWNlaXZlQnVmZmVyU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJldXNlQWRkcmVzcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvVGltZW91dCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImltcGxBY2NlcHQoTGphdmEvbmV0L1NvY2tldDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQm91bmQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nsb3NlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBlcmZvcm1hbmNlUHJlZmVyZW5jZXMoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWNlaXZlQnVmZmVyU2l6ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXVzZUFkZHJlc3MoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U29UaW1lb3V0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNvY2tldEZhY3RvcnkoTGphdmEvbmV0L1NvY2tldEltcGxGYWN0b3J5OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvU29ja2V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL25ldC9JbmV0QWRkcmVzcztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SVopViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmV0L0luZXRBZGRyZXNzO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvSW5ldEFkZHJlc3M7SUxqYXZhL25ldC9JbmV0QWRkcmVzcztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmV0L0luZXRBZGRyZXNzO0laKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25ldC9Qcm94eTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvU29ja2V0SW1wbDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmQoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0KExqYXZhL25ldC9Tb2NrZXRBZGRyZXNzO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYW5uZWwoKUxqYXZhL25pby9jaGFubmVscy9Tb2NrZXRDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZXRBZGRyZXNzKClMamF2YS9uZXQvSW5ldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRTdHJlYW0oKUxqYXZhL2lvL0lucHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtlZXBBbGl2ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsQWRkcmVzcygpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsUG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsU29ja2V0QWRkcmVzcygpTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T09CSW5saW5lKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3V0cHV0U3RyZWFtKClMamF2YS9pby9PdXRwdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlY2VpdmVCdWZmZXJTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVtb3RlU29ja2V0QWRkcmVzcygpTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmV1c2VBZGRyZXNzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VuZEJ1ZmZlclNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb0xpbmdlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvVGltZW91dCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRjcE5vRGVsYXkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFmZmljQ2xhc3MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JvdW5kKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDbG9zZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nvbm5lY3RlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSW5wdXRTaHV0ZG93bigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT3V0cHV0U2h1dGRvd24oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kVXJnZW50RGF0YShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZWVwQWxpdmUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T09CSW5saW5lKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBlcmZvcm1hbmNlUHJlZmVyZW5jZXMoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWNlaXZlQnVmZmVyU2l6ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXVzZUFkZHJlc3MoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VuZEJ1ZmZlclNpemUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U29MaW5nZXIoWkkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNvVGltZW91dChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTb2NrZXRJbXBsRmFjdG9yeShMamF2YS9uZXQvU29ja2V0SW1wbEZhY3Rvcnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUY3BOb0RlbGF5KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyYWZmaWNDbGFzcyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaHV0ZG93bklucHV0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2h1dGRvd25PdXRwdXQoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9Tb2NrZXRBZGRyZXNzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9Tb2NrZXRFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L1NvY2tldEltcGwiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25ldC9Tb2NrZXRPcHRpb25zIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjZXB0KExqYXZhL25ldC9Tb2NrZXRJbXBsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXZhaWxhYmxlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZChMamF2YS9uZXQvSW5ldEFkZHJlc3M7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGphdmEvbmV0L0luZXRBZGRyZXNzO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGVEZXNjcmlwdG9yKClMamF2YS9pby9GaWxlRGVzY3JpcHRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmV0QWRkcmVzcygpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0U3RyZWFtKClMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbFBvcnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRwdXRTdHJlYW0oKUxqYXZhL2lvL091dHB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3J0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGlzdGVuKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRVcmdlbnREYXRhKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBlcmZvcm1hbmNlUHJlZmVyZW5jZXMoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaHV0ZG93bklucHV0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2h1dGRvd25PdXRwdXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c1VyZ2VudERhdGEoKVoiLz4KLQkJPGZpZWxkIG5hbWU9ImFkZHJlc3MiLz4KLQkJPGZpZWxkIG5hbWU9ImZkIi8+Ci0JCTxmaWVsZCBuYW1lPSJsb2NhbHBvcnQiLz4KLQkJPGZpZWxkIG5hbWU9InBvcnQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9Tb2NrZXRJbXBsRmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU29ja2V0SW1wbCgpTGphdmEvbmV0L1NvY2tldEltcGw7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvU29ja2V0T3B0aW9uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHlwZSgpTGphdmEvbGFuZy9DbGFzczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9Tb2NrZXRPcHRpb25zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcHRpb24oSSlMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcHRpb24oSUxqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJJUF9NVUxUSUNBU1RfSUYiLz4KLQkJPGZpZWxkIG5hbWU9IklQX01VTFRJQ0FTVF9JRjIiLz4KLQkJPGZpZWxkIG5hbWU9IklQX01VTFRJQ0FTVF9MT09QIi8+Ci0JCTxmaWVsZCBuYW1lPSJJUF9UT1MiLz4KLQkJPGZpZWxkIG5hbWU9IlNPX0JJTkRBRERSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT19CUk9BRENBU1QiLz4KLQkJPGZpZWxkIG5hbWU9IlNPX0tFRVBBTElWRSIvPgotCQk8ZmllbGQgbmFtZT0iU09fTElOR0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT19PT0JJTkxJTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNPX1JDVkJVRiIvPgotCQk8ZmllbGQgbmFtZT0iU09fUkVVU0VBRERSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT19TTkRCVUYiLz4KLQkJPGZpZWxkIG5hbWU9IlNPX1RJTUVPVVQiLz4KLQkJPGZpZWxkIG5hbWU9IlRDUF9OT0RFTEFZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvU29ja2V0UGVybWlzc2lvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1Blcm1pc3Npb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9Tb2NrZXRUaW1lb3V0RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L1N0YW5kYXJkUHJvdG9jb2xGYW1pbHkiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmV0L1Byb3RvY29sRmFtaWx5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmV0L1N0YW5kYXJkUHJvdG9jb2xGYW1pbHk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGphdmEvbmV0L1N0YW5kYXJkUHJvdG9jb2xGYW1pbHk7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTkVUIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTkVUNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L1N0YW5kYXJkU29ja2V0T3B0aW9ucyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iSVBfTVVMVElDQVNUX0lGIi8+Ci0JCTxmaWVsZCBuYW1lPSJJUF9NVUxUSUNBU1RfTE9PUCIvPgotCQk8ZmllbGQgbmFtZT0iSVBfTVVMVElDQVNUX1RUTCIvPgotCQk8ZmllbGQgbmFtZT0iSVBfVE9TIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT19CUk9BRENBU1QiLz4KLQkJPGZpZWxkIG5hbWU9IlNPX0tFRVBBTElWRSIvPgotCQk8ZmllbGQgbmFtZT0iU09fTElOR0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT19SQ1ZCVUYiLz4KLQkJPGZpZWxkIG5hbWU9IlNPX1JFVVNFQUREUiIvPgotCQk8ZmllbGQgbmFtZT0iU09fU05EQlVGIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQ1BfTk9ERUxBWSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L1VSSSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS9uZXQvVVJJOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9uZXQvVVJJOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1dGhvcml0eSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RnJhZ21lbnQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvc3QoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhdGgoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvcnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWVyeSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmF3QXV0aG9yaXR5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSYXdGcmFnbWVudCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmF3UGF0aCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmF3UXVlcnkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJhd1NjaGVtZVNwZWNpZmljUGFydCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmF3VXNlckluZm8oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjaGVtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NoZW1lU3BlY2lmaWNQYXJ0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VySW5mbygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBYnNvbHV0ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT3BhcXVlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm9ybWFsaXplKClMamF2YS9uZXQvVVJJOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlU2VydmVyQXV0aG9yaXR5KClMamF2YS9uZXQvVVJJOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGF0aXZpemUoTGphdmEvbmV0L1VSSTspTGphdmEvbmV0L1VSSTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9uZXQvVVJJOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmUoTGphdmEvbmV0L1VSSTspTGphdmEvbmV0L1VSSTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0FTQ0lJU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1VSTCgpTGphdmEvbmV0L1VSTDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9VUklTeW50YXhFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWFzb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L1VSTCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbmV0L1VSTFN0cmVhbUhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmV0L1VSTDtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvVVJMO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL25ldC9VUkxTdHJlYW1IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0aG9yaXR5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50KFtMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0UG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvc3QoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhdGgoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvcnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm90b2NvbCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVlcnkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlZigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlckluZm8oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5Db25uZWN0aW9uKClMamF2YS9uZXQvVVJMQ29ubmVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuQ29ubmVjdGlvbihMamF2YS9uZXQvUHJveHk7KUxqYXZhL25ldC9VUkxDb25uZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5TdHJlYW0oKUxqYXZhL2lvL0lucHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InNhbWVGaWxlKExqYXZhL25ldC9VUkw7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiByZW1vdmVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHJlbW92ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VVJMU3RyZWFtSGFuZGxlckZhY3RvcnkoTGphdmEvbmV0L1VSTFN0cmVhbUhhbmRsZXJGYWN0b3J5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9FeHRlcm5hbEZvcm0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvVVJJKClMamF2YS9uZXQvVVJJOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L1VSTENsYXNzTG9hZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvU2VjdXJlQ2xhc3NMb2FkZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbTGphdmEvbmV0L1VSTDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbTGphdmEvbmV0L1VSTDtMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMamF2YS9uZXQvVVJMO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7TGphdmEvbmV0L1VSTFN0cmVhbUhhbmRsZXJGYWN0b3J5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVVJMKExqYXZhL25ldC9VUkw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWZpbmVQYWNrYWdlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvamFyL01hbmlmZXN0O0xqYXZhL25ldC9VUkw7KUxqYXZhL2xhbmcvUGFja2FnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVUkxzKClbTGphdmEvbmV0L1VSTDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShbTGphdmEvbmV0L1VSTDspTGphdmEvbmV0L1VSTENsYXNzTG9hZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKFtMamF2YS9uZXQvVVJMO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KUxqYXZhL25ldC9VUkxDbGFzc0xvYWRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9VUkxDb25uZWN0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmV0L1VSTDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFJlcXVlc3RQcm9wZXJ0eShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxvd1VzZXJJbnRlcmFjdGlvbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3RUaW1lb3V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudCgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudChbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudEVuY29kaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50TGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudExlbmd0aExvbmcoKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnRUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdEFsbG93VXNlckludGVyYWN0aW9uKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFJlcXVlc3RQcm9wZXJ0eShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRVc2VDYWNoZXMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb0lucHV0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG9PdXRwdXQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHBpcmF0aW9uKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsZU5hbWVNYXAoKUxqYXZhL25ldC9GaWxlTmFtZU1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWFkZXJGaWVsZChJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhlYWRlckZpZWxkKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWFkZXJGaWVsZERhdGUoTGphdmEvbGFuZy9TdHJpbmc7SilKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGVhZGVyRmllbGRJbnQoTGphdmEvbGFuZy9TdHJpbmc7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGVhZGVyRmllbGRLZXkoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWFkZXJGaWVsZExvbmcoTGphdmEvbGFuZy9TdHJpbmc7SilKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWFkZXJGaWVsZHMoKUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElmTW9kaWZpZWRTaW5jZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0U3RyZWFtKClMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXN0TW9kaWZpZWQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRwdXRTdHJlYW0oKUxqYXZhL2lvL091dHB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJtaXNzaW9uKClMamF2YS9zZWN1cml0eS9QZXJtaXNzaW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlYWRUaW1lb3V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVxdWVzdFByb3BlcnRpZXMoKUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVlc3RQcm9wZXJ0eShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VVJMKClMamF2YS9uZXQvVVJMOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZUNhY2hlcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imd1ZXNzQ29udGVudFR5cGVGcm9tTmFtZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ3Vlc3NDb250ZW50VHlwZUZyb21TdHJlYW0oTGphdmEvaW8vSW5wdXRTdHJlYW07KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFsbG93VXNlckludGVyYWN0aW9uKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbm5lY3RUaW1lb3V0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRIYW5kbGVyRmFjdG9yeShMamF2YS9uZXQvQ29udGVudEhhbmRsZXJGYWN0b3J5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVmYXVsdEFsbG93VXNlckludGVyYWN0aW9uKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHRSZXF1ZXN0UHJvcGVydHkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVmYXVsdFVzZUNhY2hlcyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREb0lucHV0KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERvT3V0cHV0KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZpbGVOYW1lTWFwKExqYXZhL25ldC9GaWxlTmFtZU1hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldElmTW9kaWZpZWRTaW5jZShKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWFkVGltZW91dChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXF1ZXN0UHJvcGVydHkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VDYWNoZXMoWilWIi8+Ci0JCTxmaWVsZCBuYW1lPSJhbGxvd1VzZXJJbnRlcmFjdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0iY29ubmVjdGVkIi8+Ci0JCTxmaWVsZCBuYW1lPSJkb0lucHV0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkb091dHB1dCIvPgotCQk8ZmllbGQgbmFtZT0iaWZNb2RpZmllZFNpbmNlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ1cmwiLz4KLQkJPGZpZWxkIG5hbWU9InVzZUNhY2hlcyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L1VSTERlY29kZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29kZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29kZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvVVJMRW5jb2RlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5jb2RlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5jb2RlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9VUkxTdHJlYW1IYW5kbGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoTGphdmEvbmV0L1VSTDtMamF2YS9uZXQvVVJMOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFBvcnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3N0QWRkcmVzcyhMamF2YS9uZXQvVVJMOylMamF2YS9uZXQvSW5ldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzaENvZGUoTGphdmEvbmV0L1VSTDspSSIvPgotCQk8bWV0aG9kIG5hbWU9Imhvc3RzRXF1YWwoTGphdmEvbmV0L1VSTDtMamF2YS9uZXQvVVJMOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkNvbm5lY3Rpb24oTGphdmEvbmV0L1VSTDspTGphdmEvbmV0L1VSTENvbm5lY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkNvbm5lY3Rpb24oTGphdmEvbmV0L1VSTDtMamF2YS9uZXQvUHJveHk7KUxqYXZhL25ldC9VUkxDb25uZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlVVJMKExqYXZhL25ldC9VUkw7TGphdmEvbGFuZy9TdHJpbmc7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNhbWVGaWxlKExqYXZhL25ldC9VUkw7TGphdmEvbmV0L1VSTDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVSTChMamF2YS9uZXQvVVJMO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVUkwoTGphdmEvbmV0L1VSTDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0V4dGVybmFsRm9ybShMamF2YS9uZXQvVVJMOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25ldC9VUkxTdHJlYW1IYW5kbGVyRmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVVJMU3RyZWFtSGFuZGxlcihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmV0L1VSTFN0cmVhbUhhbmRsZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uZXQvVW5rbm93bkhvc3RFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmV0L1Vua25vd25TZXJ2aWNlRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSU9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9CdWZmZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJSUkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXJyYXkoKUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcnJheU9mZnNldCgpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYXBhY2l0eSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClMamF2YS9uaW8vQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZsaXAoKUxqYXZhL25pby9CdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQXJyYXkoKVoiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzUmVtYWluaW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEaXJlY3QoKVoiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZWFkT25seSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImxpbWl0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGltaXQoSSlMamF2YS9uaW8vQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcmsoKUxqYXZhL25pby9CdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG9zaXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3NpdGlvbihJKUxqYXZhL25pby9CdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtYWluaW5nKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKUxqYXZhL25pby9CdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmV3aW5kKClMamF2YS9uaW8vQnVmZmVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL0J1ZmZlck92ZXJmbG93RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vQnVmZmVyVW5kZXJmbG93RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vQnl0ZUJ1ZmZlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9CdWZmZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsb2NhdGUoSSlMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxvY2F0ZURpcmVjdChJKUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFycmF5KClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImFycmF5T2Zmc2V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNDaGFyQnVmZmVyKClMamF2YS9uaW8vQ2hhckJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc0RvdWJsZUJ1ZmZlcigpTGphdmEvbmlvL0RvdWJsZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc0Zsb2F0QnVmZmVyKClMamF2YS9uaW8vRmxvYXRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXNJbnRCdWZmZXIoKUxqYXZhL25pby9JbnRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXNMb25nQnVmZmVyKClMamF2YS9uaW8vTG9uZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc1JlYWRPbmx5QnVmZmVyKClMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc1Nob3J0QnVmZmVyKClMamF2YS9uaW8vU2hvcnRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFjdCgpTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL25pby9CeXRlQnVmZmVyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHVwbGljYXRlKClMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoKUIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoSSlCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KFtCKUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChbQklJKUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXIoKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyKEkpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERvdWJsZSgpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERvdWJsZShJKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbG9hdCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsb2F0KEkpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZyhJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG9ydCgpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3J0KEkpUyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0FycmF5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEaXJlY3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcmRlcigpTGphdmEvbmlvL0J5dGVPcmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcmRlcihMamF2YS9uaW8vQnl0ZU9yZGVyOylMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoQilMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoSUIpTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL25pby9CeXRlQnVmZmVyOylMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoW0IpTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KFtCSUkpTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0Q2hhcihDKUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dENoYXIoSUMpTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RG91YmxlKEQpTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RG91YmxlKElEKUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEZsb2F0KEYpTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RmxvYXQoSUYpTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0SW50KEkpTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0SW50KElJKUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dExvbmcoSUopTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0TG9uZyhKKUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFNob3J0KElTKUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFNob3J0KFMpTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2xpY2UoKUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyYXAoW0IpTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JhcChbQklJKUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL0J5dGVPcmRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmF0aXZlT3JkZXIoKUxqYXZhL25pby9CeXRlT3JkZXI7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCSUdfRU5ESUFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJMSVRUTEVfRU5ESUFOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vQ2hhckJ1ZmZlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9CdWZmZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0FwcGVuZGFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NoYXJTZXF1ZW5jZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvUmVhZGFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsb2NhdGUoSSlMamF2YS9uaW8vQ2hhckJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoQylMamF2YS9uaW8vQ2hhckJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL25pby9DaGFyQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtJSSlMamF2YS9uaW8vQ2hhckJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcnJheSgpW0MiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcnJheU9mZnNldCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImFzUmVhZE9ubHlCdWZmZXIoKUxqYXZhL25pby9DaGFyQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhY3QoKUxqYXZhL25pby9DaGFyQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS9uaW8vQ2hhckJ1ZmZlcjspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImR1cGxpY2F0ZSgpTGphdmEvbmlvL0NoYXJCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KClDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KEkpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChbQylMamF2YS9uaW8vQ2hhckJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoW0NJSSlMamF2YS9uaW8vQ2hhckJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNBcnJheSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGlyZWN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3JkZXIoKUxqYXZhL25pby9CeXRlT3JkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KEMpTGphdmEvbmlvL0NoYXJCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KElDKUxqYXZhL25pby9DaGFyQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmlvL0NoYXJCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL2xhbmcvU3RyaW5nO0lJKUxqYXZhL25pby9DaGFyQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChMamF2YS9uaW8vQ2hhckJ1ZmZlcjspTGphdmEvbmlvL0NoYXJCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KFtDKUxqYXZhL25pby9DaGFyQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChbQ0lJKUxqYXZhL25pby9DaGFyQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNsaWNlKClMamF2YS9uaW8vQ2hhckJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJTZXF1ZW5jZShJSSlMamF2YS9uaW8vQ2hhckJ1ZmZlcjsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9IndyYXAoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL25pby9DaGFyQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyYXAoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SUkpTGphdmEvbmlvL0NoYXJCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JhcChbQylMamF2YS9uaW8vQ2hhckJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cmFwKFtDSUkpTGphdmEvbmlvL0NoYXJCdWZmZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vRG91YmxlQnVmZmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbmlvL0J1ZmZlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxvY2F0ZShJKUxqYXZhL25pby9Eb3VibGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXJyYXkoKVtEIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXJyYXlPZmZzZXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc1JlYWRPbmx5QnVmZmVyKClMamF2YS9uaW8vRG91YmxlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhY3QoKUxqYXZhL25pby9Eb3VibGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL25pby9Eb3VibGVCdWZmZXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdXBsaWNhdGUoKUxqYXZhL25pby9Eb3VibGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KEkpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChbRClMamF2YS9uaW8vRG91YmxlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChbRElJKUxqYXZhL25pby9Eb3VibGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQXJyYXkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RpcmVjdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9yZGVyKClMamF2YS9uaW8vQnl0ZU9yZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChEKUxqYXZhL25pby9Eb3VibGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KElEKUxqYXZhL25pby9Eb3VibGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL25pby9Eb3VibGVCdWZmZXI7KUxqYXZhL25pby9Eb3VibGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KFtEKUxqYXZhL25pby9Eb3VibGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KFtESUkpTGphdmEvbmlvL0RvdWJsZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzbGljZSgpTGphdmEvbmlvL0RvdWJsZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cmFwKFtEKUxqYXZhL25pby9Eb3VibGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JhcChbRElJKUxqYXZhL25pby9Eb3VibGVCdWZmZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vRmxvYXRCdWZmZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uaW8vQnVmZmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFsbG9jYXRlKEkpTGphdmEvbmlvL0Zsb2F0QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFycmF5KClbRiIvPgotCQk8bWV0aG9kIG5hbWU9ImFycmF5T2Zmc2V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNSZWFkT25seUJ1ZmZlcigpTGphdmEvbmlvL0Zsb2F0QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhY3QoKUxqYXZhL25pby9GbG9hdEJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHVwbGljYXRlKClMamF2YS9uaW8vRmxvYXRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KEkpRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChbRilMamF2YS9uaW8vRmxvYXRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KFtGSUkpTGphdmEvbmlvL0Zsb2F0QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0FycmF5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEaXJlY3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcmRlcigpTGphdmEvbmlvL0J5dGVPcmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoRilMamF2YS9uaW8vRmxvYXRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KElGKUxqYXZhL25pby9GbG9hdEJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylMamF2YS9uaW8vRmxvYXRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KFtGKUxqYXZhL25pby9GbG9hdEJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoW0ZJSSlMamF2YS9uaW8vRmxvYXRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2xpY2UoKUxqYXZhL25pby9GbG9hdEJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cmFwKFtGKUxqYXZhL25pby9GbG9hdEJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cmFwKFtGSUkpTGphdmEvbmlvL0Zsb2F0QnVmZmVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL0ludEJ1ZmZlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9CdWZmZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsb2NhdGUoSSlMamF2YS9uaW8vSW50QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFycmF5KClbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImFycmF5T2Zmc2V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNSZWFkT25seUJ1ZmZlcigpTGphdmEvbmlvL0ludEJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYWN0KClMamF2YS9uaW8vSW50QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS9uaW8vSW50QnVmZmVyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHVwbGljYXRlKClMamF2YS9uaW8vSW50QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoW0kpTGphdmEvbmlvL0ludEJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoW0lJSSlMamF2YS9uaW8vSW50QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0FycmF5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEaXJlY3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcmRlcigpTGphdmEvbmlvL0J5dGVPcmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoSSlMamF2YS9uaW8vSW50QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChJSSlMamF2YS9uaW8vSW50QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChMamF2YS9uaW8vSW50QnVmZmVyOylMamF2YS9uaW8vSW50QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChbSSlMamF2YS9uaW8vSW50QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChbSUlJKUxqYXZhL25pby9JbnRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2xpY2UoKUxqYXZhL25pby9JbnRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JhcChbSSlMamF2YS9uaW8vSW50QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyYXAoW0lJSSlMamF2YS9uaW8vSW50QnVmZmVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL0ludmFsaWRNYXJrRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9Mb25nQnVmZmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbmlvL0J1ZmZlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxvY2F0ZShJKUxqYXZhL25pby9Mb25nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFycmF5KClbSiIvPgotCQk8bWV0aG9kIG5hbWU9ImFycmF5T2Zmc2V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNSZWFkT25seUJ1ZmZlcigpTGphdmEvbmlvL0xvbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFjdCgpTGphdmEvbmlvL0xvbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL25pby9Mb25nQnVmZmVyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZHVwbGljYXRlKClMamF2YS9uaW8vTG9uZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KFtKKUxqYXZhL25pby9Mb25nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChbSklJKUxqYXZhL25pby9Mb25nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0FycmF5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEaXJlY3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcmRlcigpTGphdmEvbmlvL0J5dGVPcmRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoSUopTGphdmEvbmlvL0xvbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KEopTGphdmEvbmlvL0xvbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL25pby9Mb25nQnVmZmVyOylMamF2YS9uaW8vTG9uZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoW0opTGphdmEvbmlvL0xvbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KFtKSUkpTGphdmEvbmlvL0xvbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2xpY2UoKUxqYXZhL25pby9Mb25nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyYXAoW0opTGphdmEvbmlvL0xvbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JhcChbSklJKUxqYXZhL25pby9Mb25nQnVmZmVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL01hcHBlZEJ5dGVCdWZmZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uaW8vQnl0ZUJ1ZmZlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JjZSgpTGphdmEvbmlvL01hcHBlZEJ5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMb2FkZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkKClMamF2YS9uaW8vTWFwcGVkQnl0ZUJ1ZmZlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9SZWFkT25seUJ1ZmZlckV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9TaG9ydEJ1ZmZlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9CdWZmZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsb2NhdGUoSSlMamF2YS9uaW8vU2hvcnRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXJyYXkoKVtTIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXJyYXlPZmZzZXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc1JlYWRPbmx5QnVmZmVyKClMamF2YS9uaW8vU2hvcnRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFjdCgpTGphdmEvbmlvL1Nob3J0QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS9uaW8vU2hvcnRCdWZmZXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkdXBsaWNhdGUoKUxqYXZhL25pby9TaG9ydEJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoSSlTIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KFtTKUxqYXZhL25pby9TaG9ydEJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoW1NJSSlMamF2YS9uaW8vU2hvcnRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQXJyYXkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RpcmVjdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9yZGVyKClMamF2YS9uaW8vQnl0ZU9yZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChJUylMamF2YS9uaW8vU2hvcnRCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL25pby9TaG9ydEJ1ZmZlcjspTGphdmEvbmlvL1Nob3J0QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChTKUxqYXZhL25pby9TaG9ydEJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoW1MpTGphdmEvbmlvL1Nob3J0QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChbU0lJKUxqYXZhL25pby9TaG9ydEJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzbGljZSgpTGphdmEvbmlvL1Nob3J0QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyYXAoW1MpTGphdmEvbmlvL1Nob3J0QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyYXAoW1NJSSlMamF2YS9uaW8vU2hvcnRCdWZmZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvQWNjZXB0UGVuZGluZ0V4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0FscmVhZHlCb3VuZEV4Y2VwdGlvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0FscmVhZHlDb25uZWN0ZWRFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0FzeW5jaHJvbm91c0J5dGVDaGFubmVsIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0FzeW5jaHJvbm91c0NoYW5uZWwiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKExqYXZhL25pby9CeXRlQnVmZmVyOylMamF2YS91dGlsL2NvbmN1cnJlbnQvRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWQoTGphdmEvbmlvL0J5dGVCdWZmZXI7TGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbmlvL2NoYW5uZWxzL0NvbXBsZXRpb25IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7KUxqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7TGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbmlvL2NoYW5uZWxzL0NvbXBsZXRpb25IYW5kbGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvQXN5bmNocm9ub3VzQ2hhbm5lbCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9DaGFubmVsIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvQXN5bmNocm9ub3VzQ2hhbm5lbEdyb3VwIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25pby9jaGFubmVscy9zcGkvQXN5bmNocm9ub3VzQ2hhbm5lbFByb3ZpZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXdhaXRUZXJtaW5hdGlvbihKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTaHV0ZG93bigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVGVybWluYXRlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InByb3ZpZGVyKClMamF2YS9uaW8vY2hhbm5lbHMvc3BpL0FzeW5jaHJvbm91c0NoYW5uZWxQcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaHV0ZG93bigpViIvPgotCQk8bWV0aG9kIG5hbWU9InNodXRkb3duTm93KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aENhY2hlZFRocmVhZFBvb2woTGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yU2VydmljZTtJKUxqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNDaGFubmVsR3JvdXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aEZpeGVkVGhyZWFkUG9vbChJTGphdmEvdXRpbC9jb25jdXJyZW50L1RocmVhZEZhY3Rvcnk7KUxqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNDaGFubmVsR3JvdXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aFRocmVhZFBvb2woTGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yU2VydmljZTspTGphdmEvbmlvL2NoYW5uZWxzL0FzeW5jaHJvbm91c0NoYW5uZWxHcm91cDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNDbG9zZUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9DbG9zZWRDaGFubmVsRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvQXN5bmNocm9ub3VzRmlsZUNoYW5uZWwiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvQXN5bmNocm9ub3VzQ2hhbm5lbCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcmNlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvY2soKUxqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9jayhKSlopTGphdmEvdXRpbC9jb25jdXJyZW50L0Z1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2NrKEpKWkxqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL25pby9jaGFubmVscy9Db21wbGV0aW9uSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvY2soTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbmlvL2NoYW5uZWxzL0NvbXBsZXRpb25IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbihMamF2YS9uaW8vZmlsZS9QYXRoO0xqYXZhL3V0aWwvU2V0O0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvclNlcnZpY2U7W0xqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlQXR0cmlidXRlOylMamF2YS9uaW8vY2hhbm5lbHMvQXN5bmNocm9ub3VzRmlsZUNoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbihMamF2YS9uaW8vZmlsZS9QYXRoO1tMamF2YS9uaW8vZmlsZS9PcGVuT3B0aW9uOylMamF2YS9uaW8vY2hhbm5lbHMvQXN5bmNocm9ub3VzRmlsZUNoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZChMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtKKUxqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZChMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtKTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbmlvL2NoYW5uZWxzL0NvbXBsZXRpb25IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9InRydW5jYXRlKEopTGphdmEvbmlvL2NoYW5uZWxzL0FzeW5jaHJvbm91c0ZpbGVDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9InRyeUxvY2soKUxqYXZhL25pby9jaGFubmVscy9GaWxlTG9jazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlMb2NrKEpKWilMamF2YS9uaW8vY2hhbm5lbHMvRmlsZUxvY2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7SilMamF2YS91dGlsL2NvbmN1cnJlbnQvRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKExqYXZhL25pby9CeXRlQnVmZmVyO0pMamF2YS9sYW5nL09iamVjdDtMamF2YS9uaW8vY2hhbm5lbHMvQ29tcGxldGlvbkhhbmRsZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNTZXJ2ZXJTb2NrZXRDaGFubmVsIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0FzeW5jaHJvbm91c0NoYW5uZWwiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvTmV0d29ya0NoYW5uZWwiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmlvL2NoYW5uZWxzL3NwaS9Bc3luY2hyb25vdXNDaGFubmVsUHJvdmlkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHQoKUxqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjZXB0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL25pby9jaGFubmVscy9Db21wbGV0aW9uSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmQoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7KUxqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNTZXJ2ZXJTb2NrZXRDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmQoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7SSlMamF2YS9uaW8vY2hhbm5lbHMvQXN5bmNocm9ub3VzU2VydmVyU29ja2V0Q2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuKClMamF2YS9uaW8vY2hhbm5lbHMvQXN5bmNocm9ub3VzU2VydmVyU29ja2V0Q2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuKExqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNDaGFubmVsR3JvdXA7KUxqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNTZXJ2ZXJTb2NrZXRDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9InByb3ZpZGVyKClMamF2YS9uaW8vY2hhbm5lbHMvc3BpL0FzeW5jaHJvbm91c0NoYW5uZWxQcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcHRpb24oTGphdmEvbmV0L1NvY2tldE9wdGlvbjtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbmlvL2NoYW5uZWxzL0FzeW5jaHJvbm91c1NlcnZlclNvY2tldENoYW5uZWw7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvQXN5bmNocm9ub3VzU29ja2V0Q2hhbm5lbCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNCeXRlQ2hhbm5lbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9OZXR3b3JrQ2hhbm5lbCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uaW8vY2hhbm5lbHMvc3BpL0FzeW5jaHJvbm91c0NoYW5uZWxQcm92aWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmQoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7KUxqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNTb2NrZXRDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7KUxqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29ubmVjdChMamF2YS9uZXQvU29ja2V0QWRkcmVzcztMamF2YS9sYW5nL09iamVjdDtMamF2YS9uaW8vY2hhbm5lbHMvQ29tcGxldGlvbkhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZW1vdGVBZGRyZXNzKClMamF2YS9uZXQvU29ja2V0QWRkcmVzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuKClMamF2YS9uaW8vY2hhbm5lbHMvQXN5bmNocm9ub3VzU29ja2V0Q2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuKExqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNDaGFubmVsR3JvdXA7KUxqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNTb2NrZXRDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9InByb3ZpZGVyKClMamF2YS9uaW8vY2hhbm5lbHMvc3BpL0FzeW5jaHJvbm91c0NoYW5uZWxQcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKExqYXZhL25pby9CeXRlQnVmZmVyO0pMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7TGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbmlvL2NoYW5uZWxzL0NvbXBsZXRpb25IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZChbTGphdmEvbmlvL0J5dGVCdWZmZXI7SUlKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0O0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL25pby9jaGFubmVscy9Db21wbGV0aW9uSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9wdGlvbihMamF2YS9uZXQvU29ja2V0T3B0aW9uO0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9uaW8vY2hhbm5lbHMvQXN5bmNocm9ub3VzU29ja2V0Q2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaHV0ZG93bklucHV0KClMamF2YS9uaW8vY2hhbm5lbHMvQXN5bmNocm9ub3VzU29ja2V0Q2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaHV0ZG93bk91dHB1dCgpTGphdmEvbmlvL2NoYW5uZWxzL0FzeW5jaHJvbm91c1NvY2tldENoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7SkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDtMamF2YS9sYW5nL09iamVjdDtMamF2YS9uaW8vY2hhbm5lbHMvQ29tcGxldGlvbkhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZShbTGphdmEvbmlvL0J5dGVCdWZmZXI7SUlKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0O0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL25pby9jaGFubmVscy9Db21wbGV0aW9uSGFuZGxlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0J5dGVDaGFubmVsIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvUmVhZGFibGVCeXRlQ2hhbm5lbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9Xcml0YWJsZUJ5dGVDaGFubmVsIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvQ2FuY2VsbGVkS2V5RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9DaGFubmVsIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc09wZW4oKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9DaGFubmVscyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3Q2hhbm5lbChMamF2YS9pby9JbnB1dFN0cmVhbTspTGphdmEvbmlvL2NoYW5uZWxzL1JlYWRhYmxlQnl0ZUNoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3Q2hhbm5lbChMamF2YS9pby9PdXRwdXRTdHJlYW07KUxqYXZhL25pby9jaGFubmVscy9Xcml0YWJsZUJ5dGVDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0lucHV0U3RyZWFtKExqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNCeXRlQ2hhbm5lbDspTGphdmEvaW8vSW5wdXRTdHJlYW07IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnB1dFN0cmVhbShMamF2YS9uaW8vY2hhbm5lbHMvUmVhZGFibGVCeXRlQ2hhbm5lbDspTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3T3V0cHV0U3RyZWFtKExqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNCeXRlQ2hhbm5lbDspTGphdmEvaW8vT3V0cHV0U3RyZWFtOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3T3V0cHV0U3RyZWFtKExqYXZhL25pby9jaGFubmVscy9Xcml0YWJsZUJ5dGVDaGFubmVsOylMamF2YS9pby9PdXRwdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3UmVhZGVyKExqYXZhL25pby9jaGFubmVscy9SZWFkYWJsZUJ5dGVDaGFubmVsO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9pby9SZWFkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3UmVhZGVyKExqYXZhL25pby9jaGFubmVscy9SZWFkYWJsZUJ5dGVDaGFubmVsO0xqYXZhL25pby9jaGFyc2V0L0NoYXJzZXREZWNvZGVyO0kpTGphdmEvaW8vUmVhZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1dyaXRlcihMamF2YS9uaW8vY2hhbm5lbHMvV3JpdGFibGVCeXRlQ2hhbm5lbDtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvaW8vV3JpdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1dyaXRlcihMamF2YS9uaW8vY2hhbm5lbHMvV3JpdGFibGVCeXRlQ2hhbm5lbDtMamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0RW5jb2RlcjtJKUxqYXZhL2lvL1dyaXRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9DbG9zZWRCeUludGVycnVwdEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNDbG9zZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0Nsb3NlZENoYW5uZWxFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0Nsb3NlZFNlbGVjdG9yRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9Db21wbGV0aW9uSGFuZGxlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBsZXRlZChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZhaWxlZChMamF2YS9sYW5nL1Rocm93YWJsZTtMamF2YS9sYW5nL09iamVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0Nvbm5lY3Rpb25QZW5kaW5nRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9EYXRhZ3JhbUNoYW5uZWwiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvc3BpL0Fic3RyYWN0U2VsZWN0YWJsZUNoYW5uZWwiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvQnl0ZUNoYW5uZWwiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvR2F0aGVyaW5nQnl0ZUNoYW5uZWwiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvTXVsdGljYXN0Q2hhbm5lbCIgc2luY2U9IjI2Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL05ldHdvcmtDaGFubmVsIiBzaW5jZT0iMjQiIHJlbW92ZWQ9IjI2Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL1NjYXR0ZXJpbmdCeXRlQ2hhbm5lbCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uaW8vY2hhbm5lbHMvc3BpL1NlbGVjdG9yUHJvdmlkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kKExqYXZhL25ldC9Tb2NrZXRBZGRyZXNzOylMamF2YS9uaW8vY2hhbm5lbHMvRGF0YWdyYW1DaGFubmVsOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29ubmVjdChMamF2YS9uZXQvU29ja2V0QWRkcmVzczspTGphdmEvbmlvL2NoYW5uZWxzL0RhdGFncmFtQ2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNjb25uZWN0KClMamF2YS9uaW8vY2hhbm5lbHMvRGF0YWdyYW1DaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlbW90ZUFkZHJlc3MoKUxqYXZhL25ldC9Tb2NrZXRBZGRyZXNzOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb25uZWN0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuKClMamF2YS9uaW8vY2hhbm5lbHMvRGF0YWdyYW1DaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW4oTGphdmEvbmV0L1Byb3RvY29sRmFtaWx5OylMamF2YS9uaW8vY2hhbm5lbHMvRGF0YWdyYW1DaGFubmVsOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVjZWl2ZShMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2VuZChMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtMamF2YS9uZXQvU29ja2V0QWRkcmVzczspSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9wdGlvbihMamF2YS9uZXQvU29ja2V0T3B0aW9uO0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9uaW8vY2hhbm5lbHMvRGF0YWdyYW1DaGFubmVsOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic29ja2V0KClMamF2YS9uZXQvRGF0YWdyYW1Tb2NrZXQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvRmlsZUNoYW5uZWwiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvc3BpL0Fic3RyYWN0SW50ZXJydXB0aWJsZUNoYW5uZWwiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvQnl0ZUNoYW5uZWwiIHJlbW92ZWQ9IjI0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0dhdGhlcmluZ0J5dGVDaGFubmVsIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL1NjYXR0ZXJpbmdCeXRlQ2hhbm5lbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9TZWVrYWJsZUJ5dGVDaGFubmVsIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JjZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2NrKClMamF2YS9uaW8vY2hhbm5lbHMvRmlsZUxvY2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9jayhKSlopTGphdmEvbmlvL2NoYW5uZWxzL0ZpbGVMb2NrOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcChMamF2YS9uaW8vY2hhbm5lbHMvRmlsZUNoYW5uZWwkTWFwTW9kZTtKSilMamF2YS9uaW8vTWFwcGVkQnl0ZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvdXRpbC9TZXQ7W0xqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlQXR0cmlidXRlOylMamF2YS9uaW8vY2hhbm5lbHMvRmlsZUNoYW5uZWw7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuKExqYXZhL25pby9maWxlL1BhdGg7W0xqYXZhL25pby9maWxlL09wZW5PcHRpb247KUxqYXZhL25pby9jaGFubmVscy9GaWxlQ2hhbm5lbDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InBvc2l0aW9uKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9zaXRpb24oSilMamF2YS9uaW8vY2hhbm5lbHMvRmlsZUNoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZChMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtKKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaXplKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJhbnNmZXJGcm9tKExqYXZhL25pby9jaGFubmVscy9SZWFkYWJsZUJ5dGVDaGFubmVsO0pKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFuc2ZlclRvKEpKTGphdmEvbmlvL2NoYW5uZWxzL1dyaXRhYmxlQnl0ZUNoYW5uZWw7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnVuY2F0ZShKKUxqYXZhL25pby9jaGFubmVscy9GaWxlQ2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlMb2NrKClMamF2YS9uaW8vY2hhbm5lbHMvRmlsZUxvY2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5TG9jayhKSlopTGphdmEvbmlvL2NoYW5uZWxzL0ZpbGVMb2NrOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKExqYXZhL25pby9CeXRlQnVmZmVyO0opSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0ZpbGVDaGFubmVsJE1hcE1vZGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iUFJJVkFURSIvPgotCQk8ZmllbGQgbmFtZT0iUkVBRF9PTkxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFEX1dSSVRFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvRmlsZUxvY2siIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQXV0b0Nsb3NlYWJsZSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNGaWxlQ2hhbm5lbDtKSlopViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25pby9jaGFubmVscy9GaWxlQ2hhbm5lbDtKSlopViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjcXVpcmVkQnkoKUxqYXZhL25pby9jaGFubmVscy9DaGFubmVsOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hhbm5lbCgpTGphdmEvbmlvL2NoYW5uZWxzL0ZpbGVDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2hhcmVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYWxpZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im92ZXJsYXBzKEpKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3NpdGlvbigpSiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaXplKClKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvRmlsZUxvY2tJbnRlcnJ1cHRpb25FeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0dhdGhlcmluZ0J5dGVDaGFubmVsIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvV3JpdGFibGVCeXRlQ2hhbm5lbCIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKFtMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspSiIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKFtMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtJSSlKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvSWxsZWdhbEJsb2NraW5nTW9kZUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvSWxsZWdhbENoYW5uZWxHcm91cEV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0lsbGVnYWxTZWxlY3RvckV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvSW50ZXJydXB0ZWRCeVRpbWVvdXRFeGNlcHRpb24iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSU9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9JbnRlcnJ1cHRpYmxlQ2hhbm5lbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0NoYW5uZWwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9NZW1iZXJzaGlwS2V5IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmxvY2soTGphdmEvbmV0L0luZXRBZGRyZXNzOylMamF2YS9uaW8vY2hhbm5lbHMvTWVtYmVyc2hpcEtleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFubmVsKClMamF2YS9uaW8vY2hhbm5lbHMvTXVsdGljYXN0Q2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcm9wKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ3JvdXAoKUxqYXZhL25ldC9JbmV0QWRkcmVzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZhbGlkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV0d29ya0ludGVyZmFjZSgpTGphdmEvbmV0L05ldHdvcmtJbnRlcmZhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic291cmNlQWRkcmVzcygpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9InVuYmxvY2soTGphdmEvbmV0L0luZXRBZGRyZXNzOylMamF2YS9uaW8vY2hhbm5lbHMvTWVtYmVyc2hpcEtleTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9NdWx0aWNhc3RDaGFubmVsIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL05ldHdvcmtDaGFubmVsIi8+Ci0JCTxtZXRob2QgbmFtZT0iam9pbihMamF2YS9uZXQvSW5ldEFkZHJlc3M7TGphdmEvbmV0L05ldHdvcmtJbnRlcmZhY2U7KUxqYXZhL25pby9jaGFubmVscy9NZW1iZXJzaGlwS2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImpvaW4oTGphdmEvbmV0L0luZXRBZGRyZXNzO0xqYXZhL25ldC9OZXR3b3JrSW50ZXJmYWNlO0xqYXZhL25ldC9JbmV0QWRkcmVzczspTGphdmEvbmlvL2NoYW5uZWxzL01lbWJlcnNoaXBLZXk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvTmV0d29ya0NoYW5uZWwiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvQ2hhbm5lbCIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmQoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7KUxqYXZhL25pby9jaGFubmVscy9OZXR3b3JrQ2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbEFkZHJlc3MoKUxqYXZhL25ldC9Tb2NrZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9wdGlvbihMamF2YS9uZXQvU29ja2V0T3B0aW9uOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcHRpb24oTGphdmEvbmV0L1NvY2tldE9wdGlvbjtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbmlvL2NoYW5uZWxzL05ldHdvcmtDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRlZE9wdGlvbnMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL05vQ29ubmVjdGlvblBlbmRpbmdFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL05vblJlYWRhYmxlQ2hhbm5lbEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvTm9uV3JpdGFibGVDaGFubmVsRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9Ob3RZZXRCb3VuZEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvTm90WWV0Q29ubmVjdGVkRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9PdmVybGFwcGluZ0ZpbGVMb2NrRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9QaXBlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuKClMamF2YS9uaW8vY2hhbm5lbHMvUGlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaW5rKClMamF2YS9uaW8vY2hhbm5lbHMvUGlwZSRTaW5rQ2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzb3VyY2UoKUxqYXZhL25pby9jaGFubmVscy9QaXBlJFNvdXJjZUNoYW5uZWw7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvUGlwZSRTaW5rQ2hhbm5lbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9zcGkvQWJzdHJhY3RTZWxlY3RhYmxlQ2hhbm5lbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9HYXRoZXJpbmdCeXRlQ2hhbm5lbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9Xcml0YWJsZUJ5dGVDaGFubmVsIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25pby9jaGFubmVscy9zcGkvU2VsZWN0b3JQcm92aWRlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL1BpcGUkU291cmNlQ2hhbm5lbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9zcGkvQWJzdHJhY3RTZWxlY3RhYmxlQ2hhbm5lbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9SZWFkYWJsZUJ5dGVDaGFubmVsIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL1NjYXR0ZXJpbmdCeXRlQ2hhbm5lbCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uaW8vY2hhbm5lbHMvc3BpL1NlbGVjdG9yUHJvdmlkZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9SZWFkUGVuZGluZ0V4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL1JlYWRhYmxlQnl0ZUNoYW5uZWwiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9DaGFubmVsIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZChMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL1NjYXR0ZXJpbmdCeXRlQ2hhbm5lbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL1JlYWRhYmxlQnl0ZUNoYW5uZWwiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKFtMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspSiIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWQoW0xqYXZhL25pby9CeXRlQnVmZmVyO0lJKUoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9TZWVrYWJsZUJ5dGVDaGFubmVsIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0J5dGVDaGFubmVsIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9zaXRpb24oKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3NpdGlvbihKKUxqYXZhL25pby9jaGFubmVscy9TZWVrYWJsZUJ5dGVDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9InNpemUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnVuY2F0ZShKKUxqYXZhL25pby9jaGFubmVscy9TZWVrYWJsZUJ5dGVDaGFubmVsOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL1NlbGVjdGFibGVDaGFubmVsIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL3NwaS9BYnN0cmFjdEludGVycnVwdGlibGVDaGFubmVsIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmxvY2tpbmdMb2NrKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25maWd1cmVCbG9ja2luZyhaKUxqYXZhL25pby9jaGFubmVscy9TZWxlY3RhYmxlQ2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Jsb2NraW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZWdpc3RlcmVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5Rm9yKExqYXZhL25pby9jaGFubmVscy9TZWxlY3RvcjspTGphdmEvbmlvL2NoYW5uZWxzL1NlbGVjdGlvbktleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm92aWRlcigpTGphdmEvbmlvL2NoYW5uZWxzL3NwaS9TZWxlY3RvclByb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyKExqYXZhL25pby9jaGFubmVscy9TZWxlY3RvcjtJKUxqYXZhL25pby9jaGFubmVscy9TZWxlY3Rpb25LZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXIoTGphdmEvbmlvL2NoYW5uZWxzL1NlbGVjdG9yO0lMamF2YS9sYW5nL09iamVjdDspTGphdmEvbmlvL2NoYW5uZWxzL1NlbGVjdGlvbktleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWxpZE9wcygpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL1NlbGVjdGlvbktleSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXR0YWNoKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdHRhY2htZW50KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWwoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFubmVsKClMamF2YS9uaW8vY2hhbm5lbHMvU2VsZWN0YWJsZUNoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW50ZXJlc3RPcHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRlcmVzdE9wcyhJKUxqYXZhL25pby9jaGFubmVscy9TZWxlY3Rpb25LZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBY2NlcHRhYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb25uZWN0YWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVhZGFibGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZhbGlkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXcml0YWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWR5T3BzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VsZWN0b3IoKUxqYXZhL25pby9jaGFubmVscy9TZWxlY3RvcjsiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QX0FDQ0VQVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfQ09OTkVDVCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfUkVBRCIvPgotCQk8ZmllbGQgbmFtZT0iT1BfV1JJVEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9TZWxlY3RvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT3BlbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImtleXMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW4oKUxqYXZhL25pby9jaGFubmVscy9TZWxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm92aWRlcigpTGphdmEvbmlvL2NoYW5uZWxzL3NwaS9TZWxlY3RvclByb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNlbGVjdCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNlbGVjdChKKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZWxlY3ROb3coKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZWxlY3RlZEtleXMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9Indha2V1cCgpTGphdmEvbmlvL2NoYW5uZWxzL1NlbGVjdG9yOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL1NlcnZlclNvY2tldENoYW5uZWwiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvc3BpL0Fic3RyYWN0U2VsZWN0YWJsZUNoYW5uZWwiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvTmV0d29ya0NoYW5uZWwiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uaW8vY2hhbm5lbHMvc3BpL1NlbGVjdG9yUHJvdmlkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHQoKUxqYXZhL25pby9jaGFubmVscy9Tb2NrZXRDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJpbmQoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7KUxqYXZhL25pby9jaGFubmVscy9TZXJ2ZXJTb2NrZXRDaGFubmVsOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZChMamF2YS9uZXQvU29ja2V0QWRkcmVzcztJKUxqYXZhL25pby9jaGFubmVscy9TZXJ2ZXJTb2NrZXRDaGFubmVsOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbigpTGphdmEvbmlvL2NoYW5uZWxzL1NlcnZlclNvY2tldENoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3B0aW9uKExqYXZhL25ldC9Tb2NrZXRPcHRpb247TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL25pby9jaGFubmVscy9TZXJ2ZXJTb2NrZXRDaGFubmVsOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic29ja2V0KClMamF2YS9uZXQvU2VydmVyU29ja2V0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL1NodXRkb3duQ2hhbm5lbEdyb3VwRXhjZXB0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvU29ja2V0Q2hhbm5lbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9zcGkvQWJzdHJhY3RTZWxlY3RhYmxlQ2hhbm5lbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9CeXRlQ2hhbm5lbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9HYXRoZXJpbmdCeXRlQ2hhbm5lbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9OZXR3b3JrQ2hhbm5lbCIgc2luY2U9IjI0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL1NjYXR0ZXJpbmdCeXRlQ2hhbm5lbCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uaW8vY2hhbm5lbHMvc3BpL1NlbGVjdG9yUHJvdmlkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kKExqYXZhL25ldC9Tb2NrZXRBZGRyZXNzOylMamF2YS9uaW8vY2hhbm5lbHMvU29ja2V0Q2hhbm5lbDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3QoTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5pc2hDb25uZWN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVtb3RlQWRkcmVzcygpTGphdmEvbmV0L1NvY2tldEFkZHJlc3M7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nvbm5lY3RlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ29ubmVjdGlvblBlbmRpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuKClMamF2YS9uaW8vY2hhbm5lbHMvU29ja2V0Q2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuKExqYXZhL25ldC9Tb2NrZXRBZGRyZXNzOylMamF2YS9uaW8vY2hhbm5lbHMvU29ja2V0Q2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPcHRpb24oTGphdmEvbmV0L1NvY2tldE9wdGlvbjtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbmlvL2NoYW5uZWxzL1NvY2tldENoYW5uZWw7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaHV0ZG93bklucHV0KClMamF2YS9uaW8vY2hhbm5lbHMvU29ja2V0Q2hhbm5lbDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNodXRkb3duT3V0cHV0KClMamF2YS9uaW8vY2hhbm5lbHMvU29ja2V0Q2hhbm5lbDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNvY2tldCgpTGphdmEvbmV0L1NvY2tldDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9VbnJlc29sdmVkQWRkcmVzc0V4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvVW5zdXBwb3J0ZWRBZGRyZXNzVHlwZUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvV3JpdGFibGVCeXRlQ2hhbm5lbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL0NoYW5uZWwiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZShMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL1dyaXRlUGVuZGluZ0V4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL3NwaS9BYnN0cmFjdEludGVycnVwdGlibGVDaGFubmVsIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvQ2hhbm5lbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9JbnRlcnJ1cHRpYmxlQ2hhbm5lbCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJlZ2luKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5kKFopViIvPgotCQk8bWV0aG9kIG5hbWU9ImltcGxDbG9zZUNoYW5uZWwoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9zcGkvQWJzdHJhY3RTZWxlY3RhYmxlQ2hhbm5lbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9TZWxlY3RhYmxlQ2hhbm5lbCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uaW8vY2hhbm5lbHMvc3BpL1NlbGVjdG9yUHJvdmlkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbXBsQ2xvc2VTZWxlY3RhYmxlQ2hhbm5lbCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImltcGxDb25maWd1cmVCbG9ja2luZyhaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFubmVscy9zcGkvQWJzdHJhY3RTZWxlY3Rpb25LZXkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvU2VsZWN0aW9uS2V5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvc3BpL0Fic3RyYWN0U2VsZWN0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvU2VsZWN0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmlvL2NoYW5uZWxzL3NwaS9TZWxlY3RvclByb3ZpZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmVnaW4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWxsZWRLZXlzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXJlZ2lzdGVyKExqYXZhL25pby9jaGFubmVscy9zcGkvQWJzdHJhY3RTZWxlY3Rpb25LZXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbXBsQ2xvc2VTZWxlY3RvcigpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyKExqYXZhL25pby9jaGFubmVscy9zcGkvQWJzdHJhY3RTZWxlY3RhYmxlQ2hhbm5lbDtJTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL25pby9jaGFubmVscy9TZWxlY3Rpb25LZXk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhbm5lbHMvc3BpL0FzeW5jaHJvbm91c0NoYW5uZWxQcm92aWRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5Bc3luY2hyb25vdXNDaGFubmVsR3JvdXAoSUxqYXZhL3V0aWwvY29uY3VycmVudC9UaHJlYWRGYWN0b3J5OylMamF2YS9uaW8vY2hhbm5lbHMvQXN5bmNocm9ub3VzQ2hhbm5lbEdyb3VwOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5Bc3luY2hyb25vdXNDaGFubmVsR3JvdXAoTGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yU2VydmljZTtJKUxqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNDaGFubmVsR3JvdXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkFzeW5jaHJvbm91c1NlcnZlclNvY2tldENoYW5uZWwoTGphdmEvbmlvL2NoYW5uZWxzL0FzeW5jaHJvbm91c0NoYW5uZWxHcm91cDspTGphdmEvbmlvL2NoYW5uZWxzL0FzeW5jaHJvbm91c1NlcnZlclNvY2tldENoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkFzeW5jaHJvbm91c1NvY2tldENoYW5uZWwoTGphdmEvbmlvL2NoYW5uZWxzL0FzeW5jaHJvbm91c0NoYW5uZWxHcm91cDspTGphdmEvbmlvL2NoYW5uZWxzL0FzeW5jaHJvbm91c1NvY2tldENoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJvdmlkZXIoKUxqYXZhL25pby9jaGFubmVscy9zcGkvQXN5bmNocm9ub3VzQ2hhbm5lbFByb3ZpZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYW5uZWxzL3NwaS9TZWxlY3RvclByb3ZpZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmhlcml0ZWRDaGFubmVsKClMamF2YS9uaW8vY2hhbm5lbHMvQ2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuRGF0YWdyYW1DaGFubmVsKClMamF2YS9uaW8vY2hhbm5lbHMvRGF0YWdyYW1DaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5EYXRhZ3JhbUNoYW5uZWwoTGphdmEvbmV0L1Byb3RvY29sRmFtaWx5OylMamF2YS9uaW8vY2hhbm5lbHMvRGF0YWdyYW1DaGFubmVsOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlblBpcGUoKUxqYXZhL25pby9jaGFubmVscy9QaXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5TZWxlY3RvcigpTGphdmEvbmlvL2NoYW5uZWxzL3NwaS9BYnN0cmFjdFNlbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5TZXJ2ZXJTb2NrZXRDaGFubmVsKClMamF2YS9uaW8vY2hhbm5lbHMvU2VydmVyU29ja2V0Q2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuU29ja2V0Q2hhbm5lbCgpTGphdmEvbmlvL2NoYW5uZWxzL1NvY2tldENoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJvdmlkZXIoKUxqYXZhL25pby9jaGFubmVscy9zcGkvU2VsZWN0b3JQcm92aWRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9jaGFyc2V0L0NoYXJhY3RlckNvZGluZ0V4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0lPRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWxpYXNlcygpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXZhaWxhYmxlQ2hhcnNldHMoKUxqYXZhL3V0aWwvU29ydGVkTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbkVuY29kZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnMoTGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29kZShMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspTGphdmEvbmlvL0NoYXJCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVmYXVsdENoYXJzZXQoKUxqYXZhL25pby9jaGFyc2V0L0NoYXJzZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzcGxheU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3BsYXlOYW1lKExqYXZhL3V0aWwvTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmNvZGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuY29kZShMamF2YS9uaW8vQ2hhckJ1ZmZlcjspTGphdmEvbmlvL0J5dGVCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yTmFtZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlZ2lzdGVyZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N1cHBvcnRlZChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0RlY29kZXIoKUxqYXZhL25pby9jaGFyc2V0L0NoYXJzZXREZWNvZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0VuY29kZXIoKUxqYXZhL25pby9jaGFyc2V0L0NoYXJzZXRFbmNvZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldERlY29kZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0O0ZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdmVyYWdlQ2hhcnNQZXJCeXRlKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hhcnNldCgpTGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7KUxqYXZhL25pby9DaGFyQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29kZShMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtMamF2YS9uaW8vQ2hhckJ1ZmZlcjtaKUxqYXZhL25pby9jaGFyc2V0L0NvZGVyUmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29kZUxvb3AoTGphdmEvbmlvL0J5dGVCdWZmZXI7TGphdmEvbmlvL0NoYXJCdWZmZXI7KUxqYXZhL25pby9jaGFyc2V0L0NvZGVyUmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGVjdGVkQ2hhcnNldCgpTGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaChMamF2YS9uaW8vQ2hhckJ1ZmZlcjspTGphdmEvbmlvL2NoYXJzZXQvQ29kZXJSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW1wbEZsdXNoKExqYXZhL25pby9DaGFyQnVmZmVyOylMamF2YS9uaW8vY2hhcnNldC9Db2RlclJlc3VsdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbXBsT25NYWxmb3JtZWRJbnB1dChMamF2YS9uaW8vY2hhcnNldC9Db2RpbmdFcnJvckFjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImltcGxPblVubWFwcGFibGVDaGFyYWN0ZXIoTGphdmEvbmlvL2NoYXJzZXQvQ29kaW5nRXJyb3JBY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbXBsUmVwbGFjZVdpdGgoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbXBsUmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0F1dG9EZXRlY3RpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NoYXJzZXREZXRlY3RlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im1hbGZvcm1lZElucHV0QWN0aW9uKClMamF2YS9uaW8vY2hhcnNldC9Db2RpbmdFcnJvckFjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXhDaGFyc1BlckJ5dGUoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbk1hbGZvcm1lZElucHV0KExqYXZhL25pby9jaGFyc2V0L0NvZGluZ0Vycm9yQWN0aW9uOylMamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0RGVjb2RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblVubWFwcGFibGVDaGFyYWN0ZXIoTGphdmEvbmlvL2NoYXJzZXQvQ29kaW5nRXJyb3JBY3Rpb247KUxqYXZhL25pby9jaGFyc2V0L0NoYXJzZXREZWNvZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2VXaXRoKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0RGVjb2RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBsYWNlbWVudCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKUxqYXZhL25pby9jaGFyc2V0L0NoYXJzZXREZWNvZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InVubWFwcGFibGVDaGFyYWN0ZXJBY3Rpb24oKUxqYXZhL25pby9jaGFyc2V0L0NvZGluZ0Vycm9yQWN0aW9uOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldEVuY29kZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0O0ZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldDtGRltCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdmVyYWdlQnl0ZXNQZXJDaGFyKClGIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuRW5jb2RlKEMpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbkVuY29kZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNoYXJzZXQoKUxqYXZhL25pby9jaGFyc2V0L0NoYXJzZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5jb2RlKExqYXZhL25pby9DaGFyQnVmZmVyOylMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmNvZGUoTGphdmEvbmlvL0NoYXJCdWZmZXI7TGphdmEvbmlvL0J5dGVCdWZmZXI7WilMamF2YS9uaW8vY2hhcnNldC9Db2RlclJlc3VsdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmNvZGVMb29wKExqYXZhL25pby9DaGFyQnVmZmVyO0xqYXZhL25pby9CeXRlQnVmZmVyOylMamF2YS9uaW8vY2hhcnNldC9Db2RlclJlc3VsdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaChMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspTGphdmEvbmlvL2NoYXJzZXQvQ29kZXJSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW1wbEZsdXNoKExqYXZhL25pby9CeXRlQnVmZmVyOylMamF2YS9uaW8vY2hhcnNldC9Db2RlclJlc3VsdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbXBsT25NYWxmb3JtZWRJbnB1dChMamF2YS9uaW8vY2hhcnNldC9Db2RpbmdFcnJvckFjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImltcGxPblVubWFwcGFibGVDaGFyYWN0ZXIoTGphdmEvbmlvL2NoYXJzZXQvQ29kaW5nRXJyb3JBY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbXBsUmVwbGFjZVdpdGgoW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9ImltcGxSZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTGVnYWxSZXBsYWNlbWVudChbQilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFsZm9ybWVkSW5wdXRBY3Rpb24oKUxqYXZhL25pby9jaGFyc2V0L0NvZGluZ0Vycm9yQWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1heEJ5dGVzUGVyQ2hhcigpRiIvPgotCQk8bWV0aG9kIG5hbWU9Im9uTWFsZm9ybWVkSW5wdXQoTGphdmEvbmlvL2NoYXJzZXQvQ29kaW5nRXJyb3JBY3Rpb247KUxqYXZhL25pby9jaGFyc2V0L0NoYXJzZXRFbmNvZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uVW5tYXBwYWJsZUNoYXJhY3RlcihMamF2YS9uaW8vY2hhcnNldC9Db2RpbmdFcnJvckFjdGlvbjspTGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldEVuY29kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZVdpdGgoW0IpTGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldEVuY29kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZW1lbnQoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKUxqYXZhL25pby9jaGFyc2V0L0NoYXJzZXRFbmNvZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InVubWFwcGFibGVDaGFyYWN0ZXJBY3Rpb24oKUxqYXZhL25pby9jaGFyc2V0L0NvZGluZ0Vycm9yQWN0aW9uOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYXJzZXQvQ29kZXJNYWxmdW5jdGlvbkVycm9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FcnJvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0V4Y2VwdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYXJzZXQvQ29kZXJSZXN1bHQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFcnJvcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTWFsZm9ybWVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPdmVyZmxvdygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVW5kZXJmbG93KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNVbm1hcHBhYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFsZm9ybWVkRm9yTGVuZ3RoKEkpTGphdmEvbmlvL2NoYXJzZXQvQ29kZXJSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhyb3dFeGNlcHRpb24oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bm1hcHBhYmxlRm9yTGVuZ3RoKEkpTGphdmEvbmlvL2NoYXJzZXQvQ29kZXJSZXN1bHQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJPVkVSRkxPVyIvPgotCQk8ZmllbGQgbmFtZT0iVU5ERVJGTE9XIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhcnNldC9Db2RpbmdFcnJvckFjdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJR05PUkUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUExBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlJFUE9SVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYXJzZXQvSWxsZWdhbENoYXJzZXROYW1lRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyc2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhcnNldC9NYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9jaGFyc2V0L0NoYXJhY3RlckNvZGluZ0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dExlbmd0aCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYXJzZXQvU3RhbmRhcmRDaGFyc2V0cyIgc2luY2U9IjE5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iSVNPXzg4NTlfMSIvPgotCQk8ZmllbGQgbmFtZT0iVVNfQVNDSUkiLz4KLQkJPGZpZWxkIG5hbWU9IlVURl8xNiIvPgotCQk8ZmllbGQgbmFtZT0iVVRGXzE2QkUiLz4KLQkJPGZpZWxkIG5hbWU9IlVURl8xNkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJVVEZfOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYXJzZXQvVW5tYXBwYWJsZUNoYXJhY3RlckV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9jaGFyc2V0L0NoYXJhY3RlckNvZGluZ0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dExlbmd0aCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2NoYXJzZXQvVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyc2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vY2hhcnNldC9zcGkvQ2hhcnNldFByb3ZpZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFyc2V0Rm9yTmFtZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFyc2V0cygpTGphdmEvdXRpbC9JdGVyYXRvcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL0FjY2Vzc0RlbmllZEV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uaW8vZmlsZS9GaWxlU3lzdGVtRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9BY2Nlc3NNb2RlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25pby9maWxlL0FjY2Vzc01vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGphdmEvbmlvL2ZpbGUvQWNjZXNzTW9kZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkVYRUNVVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQUQiLz4KLQkJPGZpZWxkIG5hbWU9IldSSVRFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9BdG9taWNNb3ZlTm90U3VwcG9ydGVkRXhjZXB0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9maWxlL0ZpbGVTeXN0ZW1FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL0Nsb3NlZERpcmVjdG9yeVN0cmVhbUV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvQ2xvc2VkRmlsZVN5c3RlbUV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvQ2xvc2VkV2F0Y2hTZXJ2aWNlRXhjZXB0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9Db3B5T3B0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9EaXJlY3RvcnlJdGVyYXRvckV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0NvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSU9FeGNlcHRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYXVzZSgpTGphdmEvaW8vSU9FeGNlcHRpb247Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9EaXJlY3RvcnlOb3RFbXB0eUV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uaW8vZmlsZS9GaWxlU3lzdGVtRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9EaXJlY3RvcnlTdHJlYW0iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9DbG9zZWFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0l0ZXJhYmxlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9EaXJlY3RvcnlTdHJlYW0kRmlsdGVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjZXB0KExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9GaWxlQWxyZWFkeUV4aXN0c0V4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uaW8vZmlsZS9GaWxlU3lzdGVtRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9GaWxlU3RvcmUiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGVTdG9yZUF0dHJpYnV0ZVZpZXcoTGphdmEvbGFuZy9DbGFzczspTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVTdG9yZUF0dHJpYnV0ZVZpZXc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG90YWxTcGFjZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVuYWxsb2NhdGVkU3BhY2UoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2FibGVTcGFjZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVhZE9ubHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0ZpbGVBdHRyaWJ1dGVWaWV3KExqYXZhL2xhbmcvQ2xhc3M7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0ZpbGVBdHRyaWJ1dGVWaWV3KExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0idHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9GaWxlU3lzdGVtIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsZVN0b3JlcygpTGphdmEvbGFuZy9JdGVyYWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXRoKExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXRoTWF0Y2hlcihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmlvL2ZpbGUvUGF0aE1hdGNoZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um9vdERpcmVjdG9yaWVzKClMamF2YS9sYW5nL0l0ZXJhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcGFyYXRvcigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlclByaW5jaXBhbExvb2t1cFNlcnZpY2UoKUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9Vc2VyUHJpbmNpcGFsTG9va3VwU2VydmljZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc09wZW4oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlYWRPbmx5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3V2F0Y2hTZXJ2aWNlKClMamF2YS9uaW8vZmlsZS9XYXRjaFNlcnZpY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJvdmlkZXIoKUxqYXZhL25pby9maWxlL3NwaS9GaWxlU3lzdGVtUHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydGVkRmlsZUF0dHJpYnV0ZVZpZXdzKClMamF2YS91dGlsL1NldDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL0ZpbGVTeXN0ZW1BbHJlYWR5RXhpc3RzRXhjZXB0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvRmlsZVN5c3RlbUV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE90aGVyRmlsZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhc29uKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL0ZpbGVTeXN0ZW1Mb29wRXhjZXB0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25pby9maWxlL0ZpbGVTeXN0ZW1FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL0ZpbGVTeXN0ZW1Ob3RGb3VuZEV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL0ZpbGVTeXN0ZW1zIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdCgpTGphdmEvbmlvL2ZpbGUvRmlsZVN5c3RlbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWxlU3lzdGVtKExqYXZhL25ldC9VUkk7KUxqYXZhL25pby9maWxlL0ZpbGVTeXN0ZW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RmlsZVN5c3RlbShMamF2YS9uZXQvVVJJO0xqYXZhL3V0aWwvTWFwOylMamF2YS9uaW8vZmlsZS9GaWxlU3lzdGVtOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0ZpbGVTeXN0ZW0oTGphdmEvbmV0L1VSSTtMamF2YS91dGlsL01hcDtMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylMamF2YS9uaW8vZmlsZS9GaWxlU3lzdGVtOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0ZpbGVTeXN0ZW0oTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylMamF2YS9uaW8vZmlsZS9GaWxlU3lzdGVtOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvRmlsZVZpc2l0T3B0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25pby9maWxlL0ZpbGVWaXNpdE9wdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS9uaW8vZmlsZS9GaWxlVmlzaXRPcHRpb247Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT0xMT1dfTElOS1MiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL0ZpbGVWaXNpdFJlc3VsdCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9uaW8vZmlsZS9GaWxlVmlzaXRSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGphdmEvbmlvL2ZpbGUvRmlsZVZpc2l0UmVzdWx0OyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVElOVUUiLz4KLQkJPGZpZWxkIG5hbWU9IlNLSVBfU0lCTElOR1MiLz4KLQkJPGZpZWxkIG5hbWU9IlNLSVBfU1VCVFJFRSIvPgotCQk8ZmllbGQgbmFtZT0iVEVSTUlOQVRFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9GaWxlVmlzaXRvciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InBvc3RWaXNpdERpcmVjdG9yeShMamF2YS9sYW5nL09iamVjdDtMamF2YS9pby9JT0V4Y2VwdGlvbjspTGphdmEvbmlvL2ZpbGUvRmlsZVZpc2l0UmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9InByZVZpc2l0RGlyZWN0b3J5KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9CYXNpY0ZpbGVBdHRyaWJ1dGVzOylMamF2YS9uaW8vZmlsZS9GaWxlVmlzaXRSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmlzaXRGaWxlKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9CYXNpY0ZpbGVBdHRyaWJ1dGVzOylMamF2YS9uaW8vZmlsZS9GaWxlVmlzaXRSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmlzaXRGaWxlRmFpbGVkKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2lvL0lPRXhjZXB0aW9uOylMamF2YS9uaW8vZmlsZS9GaWxlVmlzaXRSZXN1bHQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9GaWxlcyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkoTGphdmEvaW8vSW5wdXRTdHJlYW07TGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvQ29weU9wdGlvbjspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkoTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS9pby9PdXRwdXRTdHJlYW07KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5KExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvQ29weU9wdGlvbjspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVEaXJlY3RvcmllcyhMamF2YS9uaW8vZmlsZS9QYXRoO1tMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZUF0dHJpYnV0ZTspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVEaXJlY3RvcnkoTGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVBdHRyaWJ1dGU7KUxqYXZhL25pby9maWxlL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRmlsZShMamF2YS9uaW8vZmlsZS9QYXRoO1tMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZUF0dHJpYnV0ZTspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVMaW5rKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbmlvL2ZpbGUvUGF0aDspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTeW1ib2xpY0xpbmsoTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS9uaW8vZmlsZS9QYXRoO1tMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZUF0dHJpYnV0ZTspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUZW1wRGlyZWN0b3J5KExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZUF0dHJpYnV0ZTspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUZW1wRGlyZWN0b3J5KExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlQXR0cmlidXRlOylMamF2YS9uaW8vZmlsZS9QYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVRlbXBGaWxlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZUF0dHJpYnV0ZTspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUZW1wRmlsZShMamF2YS9uaW8vZmlsZS9QYXRoO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZUF0dHJpYnV0ZTspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGUoTGphdmEvbmlvL2ZpbGUvUGF0aDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZUlmRXhpc3RzKExqYXZhL25pby9maWxlL1BhdGg7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGlzdHMoTGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvTGlua09wdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmQoTGphdmEvbmlvL2ZpbGUvUGF0aDtJTGphdmEvdXRpbC9mdW5jdGlvbi9CaVByZWRpY2F0ZTtbTGphdmEvbmlvL2ZpbGUvRmlsZVZpc2l0T3B0aW9uOylMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL25pby9maWxlL0xpbmtPcHRpb247KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGVBdHRyaWJ1dGVWaWV3KExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbGFuZy9DbGFzcztbTGphdmEvbmlvL2ZpbGUvTGlua09wdGlvbjspTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVBdHRyaWJ1dGVWaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGVTdG9yZShMamF2YS9uaW8vZmlsZS9QYXRoOylMamF2YS9uaW8vZmlsZS9GaWxlU3RvcmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFzdE1vZGlmaWVkVGltZShMamF2YS9uaW8vZmlsZS9QYXRoO1tMamF2YS9uaW8vZmlsZS9MaW5rT3B0aW9uOylMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3duZXIoTGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvTGlua09wdGlvbjspTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL1VzZXJQcmluY2lwYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zaXhGaWxlUGVybWlzc2lvbnMoTGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvTGlua09wdGlvbjspTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEaXJlY3RvcnkoTGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvTGlua09wdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRXhlY3V0YWJsZShMamF2YS9uaW8vZmlsZS9QYXRoOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNIaWRkZW4oTGphdmEvbmlvL2ZpbGUvUGF0aDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVhZGFibGUoTGphdmEvbmlvL2ZpbGUvUGF0aDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVndWxhckZpbGUoTGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvTGlua09wdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2FtZUZpbGUoTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS9uaW8vZmlsZS9QYXRoOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTeW1ib2xpY0xpbmsoTGphdmEvbmlvL2ZpbGUvUGF0aDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzV3JpdGFibGUoTGphdmEvbmlvL2ZpbGUvUGF0aDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImxpbmVzKExqYXZhL25pby9maWxlL1BhdGg7KUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsaW5lcyhMamF2YS9uaW8vZmlsZS9QYXRoO0xqYXZhL25pby9jaGFyc2V0L0NoYXJzZXQ7KUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsaXN0KExqYXZhL25pby9maWxlL1BhdGg7KUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtb3ZlKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvQ29weU9wdGlvbjspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdCdWZmZXJlZFJlYWRlcihMamF2YS9uaW8vZmlsZS9QYXRoOylMamF2YS9pby9CdWZmZXJlZFJlYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdCdWZmZXJlZFJlYWRlcihMamF2YS9uaW8vZmlsZS9QYXRoO0xqYXZhL25pby9jaGFyc2V0L0NoYXJzZXQ7KUxqYXZhL2lvL0J1ZmZlcmVkUmVhZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0J1ZmZlcmVkV3JpdGVyKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldDtbTGphdmEvbmlvL2ZpbGUvT3Blbk9wdGlvbjspTGphdmEvaW8vQnVmZmVyZWRXcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3QnVmZmVyZWRXcml0ZXIoTGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvT3Blbk9wdGlvbjspTGphdmEvaW8vQnVmZmVyZWRXcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3Qnl0ZUNoYW5uZWwoTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS91dGlsL1NldDtbTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVBdHRyaWJ1dGU7KUxqYXZhL25pby9jaGFubmVscy9TZWVrYWJsZUJ5dGVDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0J5dGVDaGFubmVsKExqYXZhL25pby9maWxlL1BhdGg7W0xqYXZhL25pby9maWxlL09wZW5PcHRpb247KUxqYXZhL25pby9jaGFubmVscy9TZWVrYWJsZUJ5dGVDaGFubmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0RpcmVjdG9yeVN0cmVhbShMamF2YS9uaW8vZmlsZS9QYXRoOylMamF2YS9uaW8vZmlsZS9EaXJlY3RvcnlTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RGlyZWN0b3J5U3RyZWFtKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25pby9maWxlL0RpcmVjdG9yeVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdEaXJlY3RvcnlTdHJlYW0oTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS9uaW8vZmlsZS9EaXJlY3RvcnlTdHJlYW0kRmlsdGVyOylMamF2YS9uaW8vZmlsZS9EaXJlY3RvcnlTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SW5wdXRTdHJlYW0oTGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvT3Blbk9wdGlvbjspTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3T3V0cHV0U3RyZWFtKExqYXZhL25pby9maWxlL1BhdGg7W0xqYXZhL25pby9maWxlL09wZW5PcHRpb247KUxqYXZhL2lvL091dHB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RFeGlzdHMoTGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvTGlua09wdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9InByb2JlQ29udGVudFR5cGUoTGphdmEvbmlvL2ZpbGUvUGF0aDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEFsbEJ5dGVzKExqYXZhL25pby9maWxlL1BhdGg7KVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEFsbExpbmVzKExqYXZhL25pby9maWxlL1BhdGg7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkQWxsTGluZXMoTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0OylMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEF0dHJpYnV0ZXMoTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS9sYW5nL0NsYXNzO1tMamF2YS9uaW8vZmlsZS9MaW5rT3B0aW9uOylMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQmFzaWNGaWxlQXR0cmlidXRlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkQXR0cmlidXRlcyhMamF2YS9uaW8vZmlsZS9QYXRoO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9uaW8vZmlsZS9MaW5rT3B0aW9uOylMamF2YS91dGlsL01hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkU3ltYm9saWNMaW5rKExqYXZhL25pby9maWxlL1BhdGg7KUxqYXZhL25pby9maWxlL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXR0cmlidXRlKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7W0xqYXZhL25pby9maWxlL0xpbmtPcHRpb247KUxqYXZhL25pby9maWxlL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGFzdE1vZGlmaWVkVGltZShMamF2YS9uaW8vZmlsZS9QYXRoO0xqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlVGltZTspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPd25lcihMamF2YS9uaW8vZmlsZS9QYXRoO0xqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9Vc2VyUHJpbmNpcGFsOylMamF2YS9uaW8vZmlsZS9QYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvc2l4RmlsZVBlcm1pc3Npb25zKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvdXRpbC9TZXQ7KUxqYXZhL25pby9maWxlL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZShMamF2YS9uaW8vZmlsZS9QYXRoOylKIi8+Ci0JCTxtZXRob2QgbmFtZT0id2FsayhMamF2YS9uaW8vZmlsZS9QYXRoO0lbTGphdmEvbmlvL2ZpbGUvRmlsZVZpc2l0T3B0aW9uOylMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2FsayhMamF2YS9uaW8vZmlsZS9QYXRoO1tMamF2YS9uaW8vZmlsZS9GaWxlVmlzaXRPcHRpb247KUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3YWxrRmlsZVRyZWUoTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS9uaW8vZmlsZS9GaWxlVmlzaXRvcjspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3YWxrRmlsZVRyZWUoTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS91dGlsL1NldDtJTGphdmEvbmlvL2ZpbGUvRmlsZVZpc2l0b3I7KUxqYXZhL25pby9maWxlL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS9sYW5nL0l0ZXJhYmxlO0xqYXZhL25pby9jaGFyc2V0L0NoYXJzZXQ7W0xqYXZhL25pby9maWxlL09wZW5PcHRpb247KUxqYXZhL25pby9maWxlL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS9sYW5nL0l0ZXJhYmxlO1tMamF2YS9uaW8vZmlsZS9PcGVuT3B0aW9uOylMamF2YS9uaW8vZmlsZS9QYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKExqYXZhL25pby9maWxlL1BhdGg7W0JbTGphdmEvbmlvL2ZpbGUvT3Blbk9wdGlvbjspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL0ludmFsaWRQYXRoRXhjZXB0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZGV4KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlYXNvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9MaW5rT3B0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9maWxlL0NvcHlPcHRpb24iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vZmlsZS9PcGVuT3B0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmlvL2ZpbGUvTGlua09wdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS9uaW8vZmlsZS9MaW5rT3B0aW9uOyIvPgotCQk8ZmllbGQgbmFtZT0iTk9GT0xMT1dfTElOS1MiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL0xpbmtQZXJtaXNzaW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0Jhc2ljUGVybWlzc2lvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvTm9TdWNoRmlsZUV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uaW8vZmlsZS9GaWxlU3lzdGVtRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9Ob3REaXJlY3RvcnlFeGNlcHRpb24iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbmlvL2ZpbGUvRmlsZVN5c3RlbUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvTm90TGlua0V4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9uaW8vZmlsZS9GaWxlU3lzdGVtRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9PcGVuT3B0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9QYXRoIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9JdGVyYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9maWxlL1dhdGNoYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS9uaW8vZmlsZS9QYXRoOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5kc1dpdGgoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRzV2l0aChMamF2YS9uaW8vZmlsZS9QYXRoOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsZU5hbWUoKUxqYXZhL25pby9maWxlL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsZVN5c3RlbSgpTGphdmEvbmlvL2ZpbGUvRmlsZVN5c3RlbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKEkpTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJlbnQoKUxqYXZhL25pby9maWxlL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um9vdCgpTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Fic29sdXRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm9ybWFsaXplKClMamF2YS9uaW8vZmlsZS9QYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGF0aXZpemUoTGphdmEvbmlvL2ZpbGUvUGF0aDspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9uaW8vZmlsZS9QYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmUoTGphdmEvbmlvL2ZpbGUvUGF0aDspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlU2libGluZyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmlvL2ZpbGUvUGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlU2libGluZyhMamF2YS9uaW8vZmlsZS9QYXRoOylMamF2YS9uaW8vZmlsZS9QYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0c1dpdGgoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydHNXaXRoKExqYXZhL25pby9maWxlL1BhdGg7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJwYXRoKElJKUxqYXZhL25pby9maWxlL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9BYnNvbHV0ZVBhdGgoKUxqYXZhL25pby9maWxlL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9GaWxlKClMamF2YS9pby9GaWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvUmVhbFBhdGgoW0xqYXZhL25pby9maWxlL0xpbmtPcHRpb247KUxqYXZhL25pby9maWxlL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9VcmkoKUxqYXZhL25ldC9VUkk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9QYXRoTWF0Y2hlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im1hdGNoZXMoTGphdmEvbmlvL2ZpbGUvUGF0aDspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvUGF0aHMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9uaW8vZmlsZS9QYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9uZXQvVVJJOylMamF2YS9uaW8vZmlsZS9QYXRoOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvUHJvdmlkZXJNaXNtYXRjaEV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvUHJvdmlkZXJOb3RGb3VuZEV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL1JlYWRPbmx5RmlsZVN5c3RlbUV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1Vuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9TZWN1cmVEaXJlY3RvcnlTdHJlYW0iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vZmlsZS9EaXJlY3RvcnlTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVEaXJlY3RvcnkoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVGaWxlKExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsZUF0dHJpYnV0ZVZpZXcoTGphdmEvbGFuZy9DbGFzczspTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVBdHRyaWJ1dGVWaWV3OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGVBdHRyaWJ1dGVWaWV3KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvQ2xhc3M7W0xqYXZhL25pby9maWxlL0xpbmtPcHRpb247KUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlQXR0cmlidXRlVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtb3ZlKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL25pby9maWxlL1NlY3VyZURpcmVjdG9yeVN0cmVhbTtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0J5dGVDaGFubmVsKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvU2V0O1tMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZUF0dHJpYnV0ZTspTGphdmEvbmlvL2NoYW5uZWxzL1NlZWthYmxlQnl0ZUNoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RGlyZWN0b3J5U3RyZWFtKExqYXZhL2xhbmcvT2JqZWN0O1tMamF2YS9uaW8vZmlsZS9MaW5rT3B0aW9uOylMamF2YS9uaW8vZmlsZS9TZWN1cmVEaXJlY3RvcnlTdHJlYW07Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9TaW1wbGVGaWxlVmlzaXRvciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9maWxlL0ZpbGVWaXNpdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9TdGFuZGFyZENvcHlPcHRpb24iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2ZpbGUvQ29weU9wdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25pby9maWxlL1N0YW5kYXJkQ29weU9wdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS9uaW8vZmlsZS9TdGFuZGFyZENvcHlPcHRpb247Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVE9NSUNfTU9WRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09QWV9BVFRSSUJVVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVBMQUNFX0VYSVNUSU5HIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9TdGFuZGFyZE9wZW5PcHRpb24iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2ZpbGUvT3Blbk9wdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25pby9maWxlL1N0YW5kYXJkT3Blbk9wdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS9uaW8vZmlsZS9TdGFuZGFyZE9wZW5PcHRpb247Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBUFBFTkQiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRUFURSIvPgotCQk8ZmllbGQgbmFtZT0iQ1JFQVRFX05FVyIvPgotCQk8ZmllbGQgbmFtZT0iREVMRVRFX09OX0NMT1NFIi8+Ci0JCTxmaWVsZCBuYW1lPSJEU1lOQyIvPgotCQk8ZmllbGQgbmFtZT0iUkVBRCIvPgotCQk8ZmllbGQgbmFtZT0iU1BBUlNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUlVOQ0FURV9FWElTVElORyIvPgotCQk8ZmllbGQgbmFtZT0iV1JJVEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL1N0YW5kYXJkV2F0Y2hFdmVudEtpbmRzIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTlRSWV9DUkVBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVOVFJZX0RFTEVURSIvPgotCQk8ZmllbGQgbmFtZT0iRU5UUllfTU9ESUZZIi8+Ci0JCTxmaWVsZCBuYW1lPSJPVkVSRkxPVyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvV2F0Y2hFdmVudCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRleHQoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ia2luZCgpTGphdmEvbmlvL2ZpbGUvV2F0Y2hFdmVudCRLaW5kOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvV2F0Y2hFdmVudCRLaW5kIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHlwZSgpTGphdmEvbGFuZy9DbGFzczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL1dhdGNoRXZlbnQkTW9kaWZpZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJuYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL1dhdGNoS2V5IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYWxpZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBvbGxFdmVudHMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9IndhdGNoYWJsZSgpTGphdmEvbmlvL2ZpbGUvV2F0Y2hhYmxlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvV2F0Y2hTZXJ2aWNlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9sbCgpTGphdmEvbmlvL2ZpbGUvV2F0Y2hLZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG9sbChKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylMamF2YS9uaW8vZmlsZS9XYXRjaEtleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0YWtlKClMamF2YS9uaW8vZmlsZS9XYXRjaEtleTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL1dhdGNoYWJsZSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyKExqYXZhL25pby9maWxlL1dhdGNoU2VydmljZTtbTGphdmEvbmlvL2ZpbGUvV2F0Y2hFdmVudCRLaW5kOylMamF2YS9uaW8vZmlsZS9XYXRjaEtleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlcihMamF2YS9uaW8vZmlsZS9XYXRjaFNlcnZpY2U7W0xqYXZhL25pby9maWxlL1dhdGNoRXZlbnQkS2luZDtbTGphdmEvbmlvL2ZpbGUvV2F0Y2hFdmVudCRNb2RpZmllcjspTGphdmEvbmlvL2ZpbGUvV2F0Y2hLZXk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQWNsRW50cnkiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9BY2xFbnRyeVR5cGU7TGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL1VzZXJQcmluY2lwYWw7TGphdmEvdXRpbC9TZXQ7TGphdmEvdXRpbC9TZXQ7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImZsYWdzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdCdWlsZGVyKClMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQWNsRW50cnkkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdCdWlsZGVyKExqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9BY2xFbnRyeTspTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0FjbEVudHJ5JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGVybWlzc2lvbnMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InByaW5jaXBhbCgpTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL1VzZXJQcmluY2lwYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHlwZSgpTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0FjbEVudHJ5VHlwZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9BY2xFbnRyeSRCdWlsZGVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQWNsRW50cnlUeXBlO0xqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9Vc2VyUHJpbmNpcGFsO0xqYXZhL3V0aWwvU2V0O0xqYXZhL3V0aWwvU2V0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0FjbEVudHJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZsYWdzKExqYXZhL3V0aWwvU2V0OylMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQWNsRW50cnkkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGbGFncyhbTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0FjbEVudHJ5RmxhZzspTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0FjbEVudHJ5JEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGVybWlzc2lvbnMoTGphdmEvdXRpbC9TZXQ7KUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9BY2xFbnRyeSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBlcm1pc3Npb25zKFtMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQWNsRW50cnlQZXJtaXNzaW9uOylMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQWNsRW50cnkkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmluY2lwYWwoTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL1VzZXJQcmluY2lwYWw7KUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9BY2xFbnRyeSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFR5cGUoTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0FjbEVudHJ5VHlwZTspTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0FjbEVudHJ5JEJ1aWxkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQWNsRW50cnlGbGFnIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9BY2xFbnRyeUZsYWc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0FjbEVudHJ5RmxhZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVE9SWV9JTkhFUklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUxFX0lOSEVSSVQiLz4KLQkJPGZpZWxkIG5hbWU9IklOSEVSSVRfT05MWSIvPgotCQk8ZmllbGQgbmFtZT0iTk9fUFJPUEFHQVRFX0lOSEVSSVQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9BY2xFbnRyeVBlcm1pc3Npb24iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0FjbEVudHJ5UGVybWlzc2lvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQWNsRW50cnlQZXJtaXNzaW9uOyIvPgotCQk8ZmllbGQgbmFtZT0iQUREX0ZJTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkFERF9TVUJESVJFQ1RPUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkFQUEVORF9EQVRBIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUxFVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTEVURV9DSElMRCIvPgotCQk8ZmllbGQgbmFtZT0iRVhFQ1VURSIvPgotCQk8ZmllbGQgbmFtZT0iTElTVF9ESVJFQ1RPUlkiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQURfQUNMIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFEX0FUVFJJQlVURVMiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQURfREFUQSIvPgotCQk8ZmllbGQgbmFtZT0iUkVBRF9OQU1FRF9BVFRSUyIvPgotCQk8ZmllbGQgbmFtZT0iU1lOQ0hST05JWkUiLz4KLQkJPGZpZWxkIG5hbWU9IldSSVRFX0FDTCIvPgotCQk8ZmllbGQgbmFtZT0iV1JJVEVfQVRUUklCVVRFUyIvPgotCQk8ZmllbGQgbmFtZT0iV1JJVEVfREFUQSIvPgotCQk8ZmllbGQgbmFtZT0iV1JJVEVfTkFNRURfQVRUUlMiLz4KLQkJPGZpZWxkIG5hbWU9IldSSVRFX09XTkVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQWNsRW50cnlUeXBlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9BY2xFbnRyeVR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0FjbEVudHJ5VHlwZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkFMQVJNIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTExPVyIvPgotCQk8ZmllbGQgbmFtZT0iQVVESVQiLz4KLQkJPGZpZWxkIG5hbWU9IkRFTlkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9BY2xGaWxlQXR0cmlidXRlVmlldyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlT3duZXJBdHRyaWJ1dGVWaWV3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWNsKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWNsKExqYXZhL3V0aWwvTGlzdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0F0dHJpYnV0ZVZpZXciIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJuYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9CYXNpY0ZpbGVBdHRyaWJ1dGVWaWV3IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVBdHRyaWJ1dGVWaWV3Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEF0dHJpYnV0ZXMoKUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9CYXNpY0ZpbGVBdHRyaWJ1dGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVzKExqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlVGltZTtMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZVRpbWU7TGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVUaW1lOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQmFzaWNGaWxlQXR0cmlidXRlcyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0aW9uVGltZSgpTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbGVLZXkoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGlyZWN0b3J5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPdGhlcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVndWxhckZpbGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N5bWJvbGljTGluaygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imxhc3RBY2Nlc3NUaW1lKClMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibGFzdE1vZGlmaWVkVGltZSgpTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InNpemUoKUoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9Eb3NGaWxlQXR0cmlidXRlVmlldyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9CYXNpY0ZpbGVBdHRyaWJ1dGVWaWV3Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEF0dHJpYnV0ZXMoKUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9Eb3NGaWxlQXR0cmlidXRlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBcmNoaXZlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhpZGRlbihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWFkT25seShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTeXN0ZW0oWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRG9zRmlsZUF0dHJpYnV0ZXMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQmFzaWNGaWxlQXR0cmlidXRlcyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXJjaGl2ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSGlkZGVuKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZWFkT25seSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3lzdGVtKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZUF0dHJpYnV0ZSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlQXR0cmlidXRlVmlldyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9BdHRyaWJ1dGVWaWV3Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZU93bmVyQXR0cmlidXRlVmlldyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlQXR0cmlidXRlVmlldyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE93bmVyKClMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvVXNlclByaW5jaXBhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPd25lcihMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvVXNlclByaW5jaXBhbDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVTdG9yZUF0dHJpYnV0ZVZpZXciIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQXR0cmlidXRlVmlldyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVUaW1lIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0O0xqYXZhL3RpbWUvSW5zdGFudDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlVGltZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb20oSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb20oTGphdmEvdGltZS9JbnN0YW50OylMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbU1pbGxpcyhKKUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0byhMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0luc3RhbnQoKUxqYXZhL3RpbWUvSW5zdGFudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b01pbGxpcygpSiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0dyb3VwUHJpbmNpcGFsIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL1VzZXJQcmluY2lwYWwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9Qb3NpeEZpbGVBdHRyaWJ1dGVWaWV3IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0Jhc2ljRmlsZUF0dHJpYnV0ZVZpZXciLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZU93bmVyQXR0cmlidXRlVmlldyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRBdHRyaWJ1dGVzKClMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvUG9zaXhGaWxlQXR0cmlidXRlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRHcm91cChMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvR3JvdXBQcmluY2lwYWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQZXJtaXNzaW9ucyhMamF2YS91dGlsL1NldDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL1Bvc2l4RmlsZUF0dHJpYnV0ZXMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvQmFzaWNGaWxlQXR0cmlidXRlcyIvPgotCQk8bWV0aG9kIG5hbWU9Imdyb3VwKClMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvR3JvdXBQcmluY2lwYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3duZXIoKUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9Vc2VyUHJpbmNpcGFsOyIvPgotCQk8bWV0aG9kIG5hbWU9InBlcm1pc3Npb25zKClMamF2YS91dGlsL1NldDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9Qb3NpeEZpbGVQZXJtaXNzaW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9Qb3NpeEZpbGVQZXJtaXNzaW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9Qb3NpeEZpbGVQZXJtaXNzaW9uOyIvPgotCQk8ZmllbGQgbmFtZT0iR1JPVVBfRVhFQ1VURSIvPgotCQk8ZmllbGQgbmFtZT0iR1JPVVBfUkVBRCIvPgotCQk8ZmllbGQgbmFtZT0iR1JPVVBfV1JJVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9USEVSU19FWEVDVVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPVEhFUlNfUkVBRCIvPgotCQk8ZmllbGQgbmFtZT0iT1RIRVJTX1dSSVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPV05FUl9FWEVDVVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJPV05FUl9SRUFEIi8+Ci0JCTxmaWVsZCBuYW1lPSJPV05FUl9XUklURSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL1Bvc2l4RmlsZVBlcm1pc3Npb25zIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNGaWxlQXR0cmlidXRlKExqYXZhL3V0aWwvU2V0OylMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZUF0dHJpYnV0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tU3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1N0cmluZyhMamF2YS91dGlsL1NldDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvVXNlckRlZmluZWRGaWxlQXR0cmlidXRlVmlldyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlQXR0cmlidXRlVmlldyIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Imxpc3QoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL25pby9CeXRlQnVmZmVyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZShMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL25pby9CeXRlQnVmZmVyOylJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvVXNlclByaW5jaXBhbCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL1VzZXJQcmluY2lwYWxMb29rdXBTZXJ2aWNlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9va3VwUHJpbmNpcGFsQnlHcm91cE5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9Hcm91cFByaW5jaXBhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb29rdXBQcmluY2lwYWxCeU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9Vc2VyUHJpbmNpcGFsOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL1VzZXJQcmluY2lwYWxOb3RGb3VuZEV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvbmlvL2ZpbGUvc3BpL0ZpbGVTeXN0ZW1Qcm92aWRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrQWNjZXNzKExqYXZhL25pby9maWxlL1BhdGg7W0xqYXZhL25pby9maWxlL0FjY2Vzc01vZGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5KExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvQ29weU9wdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZURpcmVjdG9yeShMamF2YS9uaW8vZmlsZS9QYXRoO1tMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZUF0dHJpYnV0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUxpbmsoTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS9uaW8vZmlsZS9QYXRoOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU3ltYm9saWNMaW5rKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVBdHRyaWJ1dGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGUoTGphdmEvbmlvL2ZpbGUvUGF0aDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZUlmRXhpc3RzKExqYXZhL25pby9maWxlL1BhdGg7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWxlQXR0cmlidXRlVmlldyhMamF2YS9uaW8vZmlsZS9QYXRoO0xqYXZhL2xhbmcvQ2xhc3M7W0xqYXZhL25pby9maWxlL0xpbmtPcHRpb247KUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlQXR0cmlidXRlVmlldzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWxlU3RvcmUoTGphdmEvbmlvL2ZpbGUvUGF0aDspTGphdmEvbmlvL2ZpbGUvRmlsZVN0b3JlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpbGVTeXN0ZW0oTGphdmEvbmV0L1VSSTspTGphdmEvbmlvL2ZpbGUvRmlsZVN5c3RlbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXRoKExqYXZhL25ldC9VUkk7KUxqYXZhL25pby9maWxlL1BhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NoZW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnN0YWxsZWRQcm92aWRlcnMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0hpZGRlbihMamF2YS9uaW8vZmlsZS9QYXRoOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTYW1lRmlsZShMamF2YS9uaW8vZmlsZS9QYXRoO0xqYXZhL25pby9maWxlL1BhdGg7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtb3ZlKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvQ29weU9wdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0FzeW5jaHJvbm91c0ZpbGVDaGFubmVsKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvdXRpbC9TZXQ7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yU2VydmljZTtbTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVBdHRyaWJ1dGU7KUxqYXZhL25pby9jaGFubmVscy9Bc3luY2hyb25vdXNGaWxlQ2hhbm5lbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdCeXRlQ2hhbm5lbChMamF2YS9uaW8vZmlsZS9QYXRoO0xqYXZhL3V0aWwvU2V0O1tMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZUF0dHJpYnV0ZTspTGphdmEvbmlvL2NoYW5uZWxzL1NlZWthYmxlQnl0ZUNoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RGlyZWN0b3J5U3RyZWFtKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbmlvL2ZpbGUvRGlyZWN0b3J5U3RyZWFtJEZpbHRlcjspTGphdmEvbmlvL2ZpbGUvRGlyZWN0b3J5U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0ZpbGVDaGFubmVsKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvdXRpbC9TZXQ7W0xqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlQXR0cmlidXRlOylMamF2YS9uaW8vY2hhbm5lbHMvRmlsZUNoYW5uZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RmlsZVN5c3RlbShMamF2YS9uZXQvVVJJO0xqYXZhL3V0aWwvTWFwOylMamF2YS9uaW8vZmlsZS9GaWxlU3lzdGVtOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0ZpbGVTeXN0ZW0oTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS91dGlsL01hcDspTGphdmEvbmlvL2ZpbGUvRmlsZVN5c3RlbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnB1dFN0cmVhbShMamF2YS9uaW8vZmlsZS9QYXRoO1tMamF2YS9uaW8vZmlsZS9PcGVuT3B0aW9uOylMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdPdXRwdXRTdHJlYW0oTGphdmEvbmlvL2ZpbGUvUGF0aDtbTGphdmEvbmlvL2ZpbGUvT3Blbk9wdGlvbjspTGphdmEvaW8vT3V0cHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRBdHRyaWJ1dGVzKExqYXZhL25pby9maWxlL1BhdGg7TGphdmEvbGFuZy9DbGFzcztbTGphdmEvbmlvL2ZpbGUvTGlua09wdGlvbjspTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0Jhc2ljRmlsZUF0dHJpYnV0ZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEF0dHJpYnV0ZXMoTGphdmEvbmlvL2ZpbGUvUGF0aDtMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbmlvL2ZpbGUvTGlua09wdGlvbjspTGphdmEvdXRpbC9NYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFN5bWJvbGljTGluayhMamF2YS9uaW8vZmlsZS9QYXRoOylMamF2YS9uaW8vZmlsZS9QYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF0dHJpYnV0ZShMamF2YS9uaW8vZmlsZS9QYXRoO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0O1tMamF2YS9uaW8vZmlsZS9MaW5rT3B0aW9uOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9uaW8vZmlsZS9zcGkvRmlsZVR5cGVEZXRlY3RvciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9InByb2JlQ29udGVudFR5cGUoTGphdmEvbmlvL2ZpbGUvUGF0aDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9BY2Nlc3NDb250cm9sQ29udGV4dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3NlY3VyaXR5L0FjY2Vzc0NvbnRyb2xDb250ZXh0O0xqYXZhL3NlY3VyaXR5L0RvbWFpbkNvbWJpbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMamF2YS9zZWN1cml0eS9Qcm90ZWN0aW9uRG9tYWluOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tQZXJtaXNzaW9uKExqYXZhL3NlY3VyaXR5L1Blcm1pc3Npb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb21haW5Db21iaW5lcigpTGphdmEvc2VjdXJpdHkvRG9tYWluQ29tYmluZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9BY2Nlc3NDb250cm9sRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9TZWN1cml0eUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9QZXJtaXNzaW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVybWlzc2lvbigpTGphdmEvc2VjdXJpdHkvUGVybWlzc2lvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0FjY2Vzc0NvbnRyb2xsZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrUGVybWlzc2lvbihMamF2YS9zZWN1cml0eS9QZXJtaXNzaW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9Qcml2aWxlZ2VkKExqYXZhL3NlY3VyaXR5L1ByaXZpbGVnZWRBY3Rpb247KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImRvUHJpdmlsZWdlZChMamF2YS9zZWN1cml0eS9Qcml2aWxlZ2VkQWN0aW9uO0xqYXZhL3NlY3VyaXR5L0FjY2Vzc0NvbnRyb2xDb250ZXh0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb1ByaXZpbGVnZWQoTGphdmEvc2VjdXJpdHkvUHJpdmlsZWdlZEV4Y2VwdGlvbkFjdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZG9Qcml2aWxlZ2VkKExqYXZhL3NlY3VyaXR5L1ByaXZpbGVnZWRFeGNlcHRpb25BY3Rpb247TGphdmEvc2VjdXJpdHkvQWNjZXNzQ29udHJvbENvbnRleHQ7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImRvUHJpdmlsZWdlZFdpdGhDb21iaW5lcihMamF2YS9zZWN1cml0eS9Qcml2aWxlZ2VkQWN0aW9uOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZG9Qcml2aWxlZ2VkV2l0aENvbWJpbmVyKExqYXZhL3NlY3VyaXR5L1ByaXZpbGVnZWRFeGNlcHRpb25BY3Rpb247KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZXh0KClMamF2YS9zZWN1cml0eS9BY2Nlc3NDb250cm9sQ29udGV4dDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0FsZ29yaXRobUNvbnN0cmFpbnRzIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGVybWl0cyhMamF2YS91dGlsL1NldDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9BbGdvcml0aG1QYXJhbWV0ZXJzOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVybWl0cyhMamF2YS91dGlsL1NldDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9LZXk7TGphdmEvc2VjdXJpdHkvQWxnb3JpdGhtUGFyYW1ldGVyczspWiIvPgotCQk8bWV0aG9kIG5hbWU9InBlcm1pdHMoTGphdmEvdXRpbC9TZXQ7TGphdmEvc2VjdXJpdHkvS2V5OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9BbGdvcml0aG1QYXJhbWV0ZXJHZW5lcmF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9zZWN1cml0eS9BbGdvcml0aG1QYXJhbWV0ZXJHZW5lcmF0b3JTcGk7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZVBhcmFtZXRlcnMoKUxqYXZhL3NlY3VyaXR5L0FsZ29yaXRobVBhcmFtZXRlcnM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxnb3JpdGhtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvQWxnb3JpdGhtUGFyYW1ldGVyR2VuZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9BbGdvcml0aG1QYXJhbWV0ZXJHZW5lcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7KUxqYXZhL3NlY3VyaXR5L0FsZ29yaXRobVBhcmFtZXRlckdlbmVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm92aWRlcigpTGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KElMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb207KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KExqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoTGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjO0xqYXZhL3NlY3VyaXR5L1NlY3VyZVJhbmRvbTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvQWxnb3JpdGhtUGFyYW1ldGVyR2VuZXJhdG9yU3BpIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZW5lcmF0ZVBhcmFtZXRlcnMoKUxqYXZhL3NlY3VyaXR5L0FsZ29yaXRobVBhcmFtZXRlcnM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChJTGphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChMamF2YS9zZWN1cml0eS9zcGVjL0FsZ29yaXRobVBhcmFtZXRlclNwZWM7TGphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9BbGdvcml0aG1QYXJhbWV0ZXJzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvQWxnb3JpdGhtUGFyYW1ldGVyc1NwaTtMamF2YS9zZWN1cml0eS9Qcm92aWRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsZ29yaXRobSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5jb2RlZCgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGVkKExqYXZhL2xhbmcvU3RyaW5nOylbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9BbGdvcml0aG1QYXJhbWV0ZXJzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9BbGdvcml0aG1QYXJhbWV0ZXJzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOylMamF2YS9zZWN1cml0eS9BbGdvcml0aG1QYXJhbWV0ZXJzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtZXRlclNwZWMoTGphdmEvbGFuZy9DbGFzczspTGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3ZpZGVyKClMamF2YS9zZWN1cml0eS9Qcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KExqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoW0JMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvQWxnb3JpdGhtUGFyYW1ldGVyc1NwaSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0RW5jb2RlZCgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZXRFbmNvZGVkKExqYXZhL2xhbmcvU3RyaW5nOylbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUdldFBhcmFtZXRlclNwZWMoTGphdmEvbGFuZy9DbGFzczspTGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUluaXQoTGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChbQkxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lVG9TdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvQWxsUGVybWlzc2lvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1Blcm1pc3Npb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0F1dGhQcm92aWRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0RMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZ2luKExqYXZheC9zZWN1cml0eS9hdXRoL1N1YmplY3Q7TGphdmF4L3NlY3VyaXR5L2F1dGgvY2FsbGJhY2svQ2FsbGJhY2tIYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9nb3V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2FsbGJhY2tIYW5kbGVyKExqYXZheC9zZWN1cml0eS9hdXRoL2NhbGxiYWNrL0NhbGxiYWNrSGFuZGxlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvQmFzaWNQZXJtaXNzaW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvUGVybWlzc2lvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvQ2VydGlmaWNhdGUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29kZShMamF2YS9pby9JbnB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuY29kZShMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JtYXQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEd1YXJhbnRvcigpTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW5jaXBhbCgpTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFB1YmxpY0tleSgpTGphdmEvc2VjdXJpdHkvUHVibGljS2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKFopTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9Db2RlU2lnbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aDtMamF2YS9zZWN1cml0eS9UaW1lc3RhbXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaWduZXJDZXJ0UGF0aCgpTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXAoKUxqYXZhL3NlY3VyaXR5L1RpbWVzdGFtcDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0NvZGVTb3VyY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvVVJMO1tMamF2YS9zZWN1cml0eS9Db2RlU2lnbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25ldC9VUkw7W0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZXJ0aWZpY2F0ZXMoKVtMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvZGVTaWduZXJzKClbTGphdmEvc2VjdXJpdHkvQ29kZVNpZ25lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhdGlvbigpTGphdmEvbmV0L1VSTDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbXBsaWVzKExqYXZhL3NlY3VyaXR5L0NvZGVTb3VyY2U7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0NyeXB0b1ByaW1pdGl2ZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9DcnlwdG9QcmltaXRpdmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGphdmEvc2VjdXJpdHkvQ3J5cHRvUHJpbWl0aXZlOyIvPgotCQk8ZmllbGQgbmFtZT0iQkxPQ0tfQ0lQSEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfQUdSRUVNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRVlfRU5DQVBTVUxBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX1dSQVAiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BQyIvPgotCQk8ZmllbGQgbmFtZT0iTUVTU0FHRV9ESUdFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IlBVQkxJQ19LRVlfRU5DUllQVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iU0VDVVJFX1JBTkRPTSIvPgotCQk8ZmllbGQgbmFtZT0iU0lHTkFUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJFQU1fQ0lQSEVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9EaWdlc3RFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9HZW5lcmFsU2VjdXJpdHlFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0RpZ2VzdElucHV0U3RyZWFtIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vRmlsdGVySW5wdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07TGphdmEvc2VjdXJpdHkvTWVzc2FnZURpZ2VzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lc3NhZ2VEaWdlc3QoKUxqYXZhL3NlY3VyaXR5L01lc3NhZ2VEaWdlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib24oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWVzc2FnZURpZ2VzdChMamF2YS9zZWN1cml0eS9NZXNzYWdlRGlnZXN0OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJkaWdlc3QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0RpZ2VzdE91dHB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0ZpbHRlck91dHB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07TGphdmEvc2VjdXJpdHkvTWVzc2FnZURpZ2VzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lc3NhZ2VEaWdlc3QoKUxqYXZhL3NlY3VyaXR5L01lc3NhZ2VEaWdlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib24oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWVzc2FnZURpZ2VzdChMamF2YS9zZWN1cml0eS9NZXNzYWdlRGlnZXN0OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJkaWdlc3QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0RvbWFpbkNvbWJpbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21iaW5lKFtMamF2YS9zZWN1cml0eS9Qcm90ZWN0aW9uRG9tYWluO1tMamF2YS9zZWN1cml0eS9Qcm90ZWN0aW9uRG9tYWluOylbTGphdmEvc2VjdXJpdHkvUHJvdGVjdGlvbkRvbWFpbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0RvbWFpbkxvYWRTdG9yZVBhcmFtZXRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L0tleVN0b3JlJExvYWRTdG9yZVBhcmFtZXRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvVVJJO0xqYXZhL3V0aWwvTWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uZmlndXJhdGlvbigpTGphdmEvbmV0L1VSSTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm90ZWN0aW9uUGFyYW1zKClMamF2YS91dGlsL01hcDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0dlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9HdWFyZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tHdWFyZChMamF2YS9sYW5nL09iamVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvR3VhcmRlZE9iamVjdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3NlY3VyaXR5L0d1YXJkOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2JqZWN0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0lkZW50aXR5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9QcmluY2lwYWwiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvSWRlbnRpdHlTY29wZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZENlcnRpZmljYXRlKExqYXZhL3NlY3VyaXR5L0NlcnRpZmljYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2VydGlmaWNhdGVzKClbTGphdmEvc2VjdXJpdHkvQ2VydGlmaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5mbygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHVibGljS2V5KClMamF2YS9zZWN1cml0eS9QdWJsaWNLZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NvcGUoKUxqYXZhL3NlY3VyaXR5L0lkZW50aXR5U2NvcGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaWRlbnRpdHlFcXVhbHMoTGphdmEvc2VjdXJpdHkvSWRlbnRpdHk7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVDZXJ0aWZpY2F0ZShMamF2YS9zZWN1cml0eS9DZXJ0aWZpY2F0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluZm8oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQdWJsaWNLZXkoTGphdmEvc2VjdXJpdHkvUHVibGljS2V5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoWilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0lkZW50aXR5U2NvcGUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9JZGVudGl0eSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9JZGVudGl0eVNjb3BlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSWRlbnRpdHkoTGphdmEvc2VjdXJpdHkvSWRlbnRpdHk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZGVudGl0eShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvSWRlbnRpdHk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWRlbnRpdHkoTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOylMamF2YS9zZWN1cml0eS9JZGVudGl0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZGVudGl0eShMamF2YS9zZWN1cml0eS9QdWJsaWNLZXk7KUxqYXZhL3NlY3VyaXR5L0lkZW50aXR5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5c3RlbVNjb3BlKClMamF2YS9zZWN1cml0eS9JZGVudGl0eVNjb3BlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlkZW50aXRpZXMoKUxqYXZhL3V0aWwvRW51bWVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlSWRlbnRpdHkoTGphdmEvc2VjdXJpdHkvSWRlbnRpdHk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTeXN0ZW1TY29wZShMamF2YS9zZWN1cml0eS9JZGVudGl0eVNjb3BlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvSW52YWxpZEFsZ29yaXRobVBhcmFtZXRlckV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0dlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvSW52YWxpZEtleUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0tleUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9LZXkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsZ29yaXRobSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5jb2RlZCgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JtYXQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8ZmllbGQgbmFtZT0ic2VyaWFsVmVyc2lvblVJRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvR2VuZXJhbFNlY3VyaXR5RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9LZXlGYWN0b3J5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvS2V5RmFjdG9yeVNwaTtMamF2YS9zZWN1cml0eS9Qcm92aWRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlUHJpdmF0ZShMamF2YS9zZWN1cml0eS9zcGVjL0tleVNwZWM7KUxqYXZhL3NlY3VyaXR5L1ByaXZhdGVLZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVQdWJsaWMoTGphdmEvc2VjdXJpdHkvc3BlYy9LZXlTcGVjOylMamF2YS9zZWN1cml0eS9QdWJsaWNLZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxnb3JpdGhtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvS2V5RmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvS2V5RmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9Qcm92aWRlcjspTGphdmEvc2VjdXJpdHkvS2V5RmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlTcGVjKExqYXZhL3NlY3VyaXR5L0tleTtMamF2YS9sYW5nL0NsYXNzOylMamF2YS9zZWN1cml0eS9zcGVjL0tleVNwZWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdmlkZXIoKUxqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InRyYW5zbGF0ZUtleShMamF2YS9zZWN1cml0eS9LZXk7KUxqYXZhL3NlY3VyaXR5L0tleTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0tleUZhY3RvcnlTcGkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUdlbmVyYXRlUHJpdmF0ZShMamF2YS9zZWN1cml0eS9zcGVjL0tleVNwZWM7KUxqYXZhL3NlY3VyaXR5L1ByaXZhdGVLZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2VuZXJhdGVQdWJsaWMoTGphdmEvc2VjdXJpdHkvc3BlYy9LZXlTcGVjOylMamF2YS9zZWN1cml0eS9QdWJsaWNLZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0S2V5U3BlYyhMamF2YS9zZWN1cml0eS9LZXk7TGphdmEvbGFuZy9DbGFzczspTGphdmEvc2VjdXJpdHkvc3BlYy9LZXlTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZVRyYW5zbGF0ZUtleShMamF2YS9zZWN1cml0eS9LZXk7KUxqYXZhL3NlY3VyaXR5L0tleTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0tleU1hbmFnZW1lbnRFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9LZXlFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0tleVBhaXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9zZWN1cml0eS9QdWJsaWNLZXk7TGphdmEvc2VjdXJpdHkvUHJpdmF0ZUtleTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaXZhdGUoKUxqYXZhL3NlY3VyaXR5L1ByaXZhdGVLZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHVibGljKClMamF2YS9zZWN1cml0eS9QdWJsaWNLZXk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9LZXlQYWlyR2VuZXJhdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5UGFpckdlbmVyYXRvclNwaSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbktleVBhaXIoKUxqYXZhL3NlY3VyaXR5L0tleVBhaXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxnb3JpdGhtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvS2V5UGFpckdlbmVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvS2V5UGFpckdlbmVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9Qcm92aWRlcjspTGphdmEvc2VjdXJpdHkvS2V5UGFpckdlbmVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm92aWRlcigpTGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdGlhbGl6ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0aWFsaXplKExqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5UGFpckdlbmVyYXRvclNwaSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVLZXlQYWlyKClMamF2YS9zZWN1cml0eS9LZXlQYWlyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXRpYWxpemUoSUxqYXZhL3NlY3VyaXR5L1NlY3VyZVJhbmRvbTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXRpYWxpemUoTGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjO0xqYXZhL3NlY3VyaXR5L1NlY3VyZVJhbmRvbTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5UmVwIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvS2V5UmVwJFR5cGU7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0IpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRSZXNvbHZlKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0tleVJlcCRUeXBlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvS2V5UmVwJFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGphdmEvc2VjdXJpdHkvS2V5UmVwJFR5cGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUklWQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQVUJMSUMiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQ1JFVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5U3RvcmUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9zZWN1cml0eS9LZXlTdG9yZVNwaTtMamF2YS9zZWN1cml0eS9Qcm92aWRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFsaWFzZXMoKUxqYXZhL3V0aWwvRW51bWVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnNBbGlhcyhMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZUVudHJ5KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW50cnlJbnN0YW5jZU9mKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3M7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZXJ0aWZpY2F0ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZXJ0aWZpY2F0ZUFsaWFzKExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlcnRpZmljYXRlQ2hhaW4oTGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENyZWF0aW9uRGF0ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbnRyeShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9LZXlTdG9yZSRQcm90ZWN0aW9uUGFyYW1ldGVyOylMamF2YS9zZWN1cml0eS9LZXlTdG9yZSRFbnRyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvS2V5U3RvcmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NlY3VyaXR5L0tleVN0b3JlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOylMamF2YS9zZWN1cml0eS9LZXlTdG9yZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXkoTGphdmEvbGFuZy9TdHJpbmc7W0MpTGphdmEvc2VjdXJpdHkvS2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3ZpZGVyKClMamF2YS9zZWN1cml0eS9Qcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NlcnRpZmljYXRlRW50cnkoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0tleUVudHJ5KExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZChMamF2YS9pby9JbnB1dFN0cmVhbTtbQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZChMamF2YS9zZWN1cml0eS9LZXlTdG9yZSRMb2FkU3RvcmVQYXJhbWV0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDZXJ0aWZpY2F0ZUVudHJ5KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbnRyeShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9LZXlTdG9yZSRFbnRyeTtMamF2YS9zZWN1cml0eS9LZXlTdG9yZSRQcm90ZWN0aW9uUGFyYW1ldGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2V5RW50cnkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvS2V5O1tDW0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRLZXlFbnRyeShMamF2YS9sYW5nL1N0cmluZztbQltMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3JlKExqYXZhL2lvL091dHB1dFN0cmVhbTtbQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcmUoTGphdmEvc2VjdXJpdHkvS2V5U3RvcmUkTG9hZFN0b3JlUGFyYW1ldGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9LZXlTdG9yZSRCdWlsZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlTdG9yZSgpTGphdmEvc2VjdXJpdHkvS2V5U3RvcmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdGVjdGlvblBhcmFtZXRlcihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvS2V5U3RvcmUkUHJvdGVjdGlvblBhcmFtZXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9Qcm92aWRlcjtMamF2YS9pby9GaWxlO0xqYXZhL3NlY3VyaXR5L0tleVN0b3JlJFByb3RlY3Rpb25QYXJhbWV0ZXI7KUxqYXZhL3NlY3VyaXR5L0tleVN0b3JlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7TGphdmEvc2VjdXJpdHkvS2V5U3RvcmUkUHJvdGVjdGlvblBhcmFtZXRlcjspTGphdmEvc2VjdXJpdHkvS2V5U3RvcmUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShMamF2YS9zZWN1cml0eS9LZXlTdG9yZTtMamF2YS9zZWN1cml0eS9LZXlTdG9yZSRQcm90ZWN0aW9uUGFyYW1ldGVyOylMamF2YS9zZWN1cml0eS9LZXlTdG9yZSRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5U3RvcmUkQ2FsbGJhY2tIYW5kbGVyUHJvdGVjdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5U3RvcmUkUHJvdGVjdGlvblBhcmFtZXRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YXgvc2VjdXJpdHkvYXV0aC9jYWxsYmFjay9DYWxsYmFja0hhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxsYmFja0hhbmRsZXIoKUxqYXZheC9zZWN1cml0eS9hdXRoL2NhbGxiYWNrL0NhbGxiYWNrSGFuZGxlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0tleVN0b3JlJEVudHJ5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVzKClMamF2YS91dGlsL1NldDsiIHNpbmNlPSIyNiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5U3RvcmUkRW50cnkkQXR0cmlidXRlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5U3RvcmUkTG9hZFN0b3JlUGFyYW1ldGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm90ZWN0aW9uUGFyYW1ldGVyKClMamF2YS9zZWN1cml0eS9LZXlTdG9yZSRQcm90ZWN0aW9uUGFyYW1ldGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5U3RvcmUkUGFzc3dvcmRQcm90ZWN0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9LZXlTdG9yZSRQcm90ZWN0aW9uUGFyYW1ldGVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmF4L3NlY3VyaXR5L2F1dGgvRGVzdHJveWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0MpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQ0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYzspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFzc3dvcmQoKVtDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdGVjdGlvbkFsZ29yaXRobSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm90ZWN0aW9uUGFyYW1ldGVycygpTGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOyIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9LZXlTdG9yZSRQcml2YXRlS2V5RW50cnkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L0tleVN0b3JlJEVudHJ5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3NlY3VyaXR5L1ByaXZhdGVLZXk7W0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvUHJpdmF0ZUtleTtbTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZTtMamF2YS91dGlsL1NldDspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VydGlmaWNhdGUoKUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VydGlmaWNhdGVDaGFpbigpW0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpdmF0ZUtleSgpTGphdmEvc2VjdXJpdHkvUHJpdmF0ZUtleTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0tleVN0b3JlJFByb3RlY3Rpb25QYXJhbWV0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5U3RvcmUkU2VjcmV0S2V5RW50cnkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L0tleVN0b3JlJEVudHJ5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZheC9jcnlwdG8vU2VjcmV0S2V5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZheC9jcnlwdG8vU2VjcmV0S2V5O0xqYXZhL3V0aWwvU2V0OylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWNyZXRLZXkoKUxqYXZheC9jcnlwdG8vU2VjcmV0S2V5OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5U3RvcmUkVHJ1c3RlZENlcnRpZmljYXRlRW50cnkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L0tleVN0b3JlJEVudHJ5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZTtMamF2YS91dGlsL1NldDspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJ1c3RlZENlcnRpZmljYXRlKClMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5U3RvcmVFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9HZW5lcmFsU2VjdXJpdHlFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0tleVN0b3JlU3BpIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVBbGlhc2VzKClMamF2YS91dGlsL0VudW1lcmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUNvbnRhaW5zQWxpYXMoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVEZWxldGVFbnRyeShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUVudHJ5SW5zdGFuY2VPZihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0Q2VydGlmaWNhdGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0Q2VydGlmaWNhdGVBbGlhcyhMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZXRDZXJ0aWZpY2F0ZUNoYWluKExqYXZhL2xhbmcvU3RyaW5nOylbTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZXRDcmVhdGlvbkRhdGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZXRFbnRyeShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9LZXlTdG9yZSRQcm90ZWN0aW9uUGFyYW1ldGVyOylMamF2YS9zZWN1cml0eS9LZXlTdG9yZSRFbnRyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZXRLZXkoTGphdmEvbGFuZy9TdHJpbmc7W0MpTGphdmEvc2VjdXJpdHkvS2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUlzQ2VydGlmaWNhdGVFbnRyeShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUlzS2V5RW50cnkoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVMb2FkKExqYXZhL2lvL0lucHV0U3RyZWFtO1tDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVMb2FkKExqYXZhL3NlY3VyaXR5L0tleVN0b3JlJExvYWRTdG9yZVBhcmFtZXRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZVNldENlcnRpZmljYXRlRW50cnkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZVNldEVudHJ5KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NlY3VyaXR5L0tleVN0b3JlJEVudHJ5O0xqYXZhL3NlY3VyaXR5L0tleVN0b3JlJFByb3RlY3Rpb25QYXJhbWV0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVTZXRLZXlFbnRyeShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9LZXk7W0NbTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZVNldEtleUVudHJ5KExqYXZhL2xhbmcvU3RyaW5nO1tCW0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lU3RvcmUoTGphdmEvaW8vT3V0cHV0U3RyZWFtO1tDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVTdG9yZShMamF2YS9zZWN1cml0eS9LZXlTdG9yZSRMb2FkU3RvcmVQYXJhbWV0ZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L01lc3NhZ2VEaWdlc3QiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9NZXNzYWdlRGlnZXN0U3BpIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlnZXN0KClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpZ2VzdChbQilbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpZ2VzdChbQklJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGdvcml0aG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpZ2VzdExlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9NZXNzYWdlRGlnZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9NZXNzYWdlRGlnZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOylMamF2YS9zZWN1cml0eS9NZXNzYWdlRGlnZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3ZpZGVyKClMamF2YS9zZWN1cml0eS9Qcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VxdWFsKFtCW0IpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlKEIpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZShMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZShbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlKFtCSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvTWVzc2FnZURpZ2VzdFNwaSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lRGlnZXN0KClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZURpZ2VzdChbQklJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZXREaWdlc3RMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVSZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZVVwZGF0ZShCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVVcGRhdGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVVcGRhdGUoW0JJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9HZW5lcmFsU2VjdXJpdHlFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L05vU3VjaFByb3ZpZGVyRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvR2VuZXJhbFNlY3VyaXR5RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9QS0NTMTJBdHRyaWJ1dGUiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9LZXlTdG9yZSRFbnRyeSRBdHRyaWJ1dGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY29kZWQoKVtCIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9QZXJtaXNzaW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9HdWFyZCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdGlvbnMoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImltcGxpZXMoTGphdmEvc2VjdXJpdHkvUGVybWlzc2lvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1Blcm1pc3Npb25Db2xsZWN0aW9uKClMamF2YS9zZWN1cml0eS9QZXJtaXNzaW9uQ29sbGVjdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1Blcm1pc3Npb25Db2xsZWN0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGQoTGphdmEvc2VjdXJpdHkvUGVybWlzc2lvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVsZW1lbnRzKClMamF2YS91dGlsL0VudW1lcmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImltcGxpZXMoTGphdmEvc2VjdXJpdHkvUGVybWlzc2lvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVhZE9ubHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWFkT25seSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvUGVybWlzc2lvbnMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9QZXJtaXNzaW9uQ29sbGVjdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvUG9saWN5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9Qb2xpY3kkUGFyYW1ldGVyczspTGphdmEvc2VjdXJpdHkvUG9saWN5OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9Qb2xpY3kkUGFyYW1ldGVycztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvUG9saWN5OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9Qb2xpY3kkUGFyYW1ldGVycztMamF2YS9zZWN1cml0eS9Qcm92aWRlcjspTGphdmEvc2VjdXJpdHkvUG9saWN5OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXJzKClMamF2YS9zZWN1cml0eS9Qb2xpY3kkUGFyYW1ldGVyczsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVybWlzc2lvbnMoTGphdmEvc2VjdXJpdHkvQ29kZVNvdXJjZTspTGphdmEvc2VjdXJpdHkvUGVybWlzc2lvbkNvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVybWlzc2lvbnMoTGphdmEvc2VjdXJpdHkvUHJvdGVjdGlvbkRvbWFpbjspTGphdmEvc2VjdXJpdHkvUGVybWlzc2lvbkNvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9saWN5KClMamF2YS9zZWN1cml0eS9Qb2xpY3k7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdmlkZXIoKUxqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW1wbGllcyhMamF2YS9zZWN1cml0eS9Qcm90ZWN0aW9uRG9tYWluO0xqYXZhL3NlY3VyaXR5L1Blcm1pc3Npb247KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWZyZXNoKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9saWN5KExqYXZhL3NlY3VyaXR5L1BvbGljeTspViIvPgotCQk8ZmllbGQgbmFtZT0iVU5TVVBQT1JURURfRU1QVFlfQ09MTEVDVElPTiIgc2luY2U9IjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1BvbGljeSRQYXJhbWV0ZXJzIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1BvbGljeVNwaSIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0UGVybWlzc2lvbnMoTGphdmEvc2VjdXJpdHkvQ29kZVNvdXJjZTspTGphdmEvc2VjdXJpdHkvUGVybWlzc2lvbkNvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0UGVybWlzc2lvbnMoTGphdmEvc2VjdXJpdHkvUHJvdGVjdGlvbkRvbWFpbjspTGphdmEvc2VjdXJpdHkvUGVybWlzc2lvbkNvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW1wbGllcyhMamF2YS9zZWN1cml0eS9Qcm90ZWN0aW9uRG9tYWluO0xqYXZhL3NlY3VyaXR5L1Blcm1pc3Npb247KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVSZWZyZXNoKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9QcmluY2lwYWwiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImltcGxpZXMoTGphdmF4L3NlY3VyaXR5L2F1dGgvU3ViamVjdDspWiIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9Qcml2YXRlS2V5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9LZXkiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YXgvc2VjdXJpdHkvYXV0aC9EZXN0cm95YWJsZSIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzZXJpYWxWZXJzaW9uVUlEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9Qcml2aWxlZ2VkQWN0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW4oKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvUHJpdmlsZWdlZEFjdGlvbkV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvRXhjZXB0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhjZXB0aW9uKClMamF2YS9sYW5nL0V4Y2VwdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1ByaXZpbGVnZWRFeGNlcHRpb25BY3Rpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InJ1bigpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9Qcm90ZWN0aW9uRG9tYWluIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvQ29kZVNvdXJjZTtMamF2YS9zZWN1cml0eS9QZXJtaXNzaW9uQ29sbGVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9zZWN1cml0eS9Db2RlU291cmNlO0xqYXZhL3NlY3VyaXR5L1Blcm1pc3Npb25Db2xsZWN0aW9uO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7W0xqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsYXNzTG9hZGVyKClMamF2YS9sYW5nL0NsYXNzTG9hZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvZGVTb3VyY2UoKUxqYXZhL3NlY3VyaXR5L0NvZGVTb3VyY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVybWlzc2lvbnMoKUxqYXZhL3NlY3VyaXR5L1Blcm1pc3Npb25Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW5jaXBhbHMoKVtMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW1wbGllcyhMamF2YS9zZWN1cml0eS9QZXJtaXNzaW9uOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9Qcm92aWRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvUHJvcGVydGllcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztETGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmZvKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2aWNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9Qcm92aWRlciRTZXJ2aWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZpY2VzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZXJzaW9uKClEIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0U2VydmljZShMamF2YS9zZWN1cml0eS9Qcm92aWRlciRTZXJ2aWNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlU2VydmljZShMamF2YS9zZWN1cml0eS9Qcm92aWRlciRTZXJ2aWNlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9Qcm92aWRlciRTZXJ2aWNlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9MaXN0O0xqYXZhL3V0aWwvTWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxnb3JpdGhtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsYXNzTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdmlkZXIoKUxqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c1BhcmFtZXRlcihMamF2YS9sYW5nL09iamVjdDspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvUHJvdmlkZXJFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1B1YmxpY0tleSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzZXJpYWxWZXJzaW9uVUlEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9TZWN1cmVDbGFzc0xvYWRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvQ2xhc3NMb2FkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DbGFzc0xvYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlZmluZUNsYXNzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL25pby9CeXRlQnVmZmVyO0xqYXZhL3NlY3VyaXR5L0NvZGVTb3VyY2U7KUxqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVmaW5lQ2xhc3MoTGphdmEvbGFuZy9TdHJpbmc7W0JJSUxqYXZhL3NlY3VyaXR5L0NvZGVTb3VyY2U7KUxqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVybWlzc2lvbnMoTGphdmEvc2VjdXJpdHkvQ29kZVNvdXJjZTspTGphdmEvc2VjdXJpdHkvUGVybWlzc2lvbkNvbGxlY3Rpb247Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb20iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL1JhbmRvbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb21TcGk7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlU2VlZChJKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxnb3JpdGhtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb207Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7KUxqYXZhL3NlY3VyaXR5L1NlY3VyZVJhbmRvbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZVN0cm9uZygpTGphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdmlkZXIoKUxqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlZWQoSSlbQiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlZWQoW0IpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tU3BpIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZW5lcmF0ZVNlZWQoSSlbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZU5leHRCeXRlcyhbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lU2V0U2VlZChbQilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9TZWN1cml0eSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUHJvdmlkZXIoTGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGdvcml0aG1Qcm9wZXJ0eShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsZ29yaXRobXMoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3BlcnR5KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm92aWRlcihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdmlkZXJzKClbTGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdmlkZXJzKExqYXZhL2xhbmcvU3RyaW5nOylbTGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdmlkZXJzKExqYXZhL3V0aWwvTWFwOylbTGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5zZXJ0UHJvdmlkZXJBdChMamF2YS9zZWN1cml0eS9Qcm92aWRlcjtJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVQcm92aWRlcihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3BlcnR5KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9TZWN1cml0eVBlcm1pc3Npb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9CYXNpY1Blcm1pc3Npb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1NpZ25hdHVyZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1NpZ25hdHVyZVNwaSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsZ29yaXRobSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NlY3VyaXR5L1NpZ25hdHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvU2lnbmF0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOylMamF2YS9zZWN1cml0eS9TaWduYXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1ldGVyKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1ldGVycygpTGphdmEvc2VjdXJpdHkvQWxnb3JpdGhtUGFyYW1ldGVyczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm92aWRlcigpTGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdFNpZ24oTGphdmEvc2VjdXJpdHkvUHJpdmF0ZUtleTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXRTaWduKExqYXZhL3NlY3VyaXR5L1ByaXZhdGVLZXk7TGphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdFZlcmlmeShMamF2YS9zZWN1cml0eS9QdWJsaWNLZXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0VmVyaWZ5KExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXJhbWV0ZXIoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyYW1ldGVyKExqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNpZ24oKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2lnbihbQklJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlKExqYXZhL25pby9CeXRlQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlKFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoW0JJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idmVyaWZ5KFtCKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2ZXJpZnkoW0JJSSlaIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSUdOIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklOSVRJQUxJWkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJWRVJJRlkiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9TaWduYXR1cmVFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9HZW5lcmFsU2VjdXJpdHlFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1NpZ25hdHVyZVNwaSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0UGFyYW1ldGVyKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0UGFyYW1ldGVycygpTGphdmEvc2VjdXJpdHkvQWxnb3JpdGhtUGFyYW1ldGVyczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVJbml0U2lnbihMamF2YS9zZWN1cml0eS9Qcml2YXRlS2V5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdFNpZ24oTGphdmEvc2VjdXJpdHkvUHJpdmF0ZUtleTtMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb207KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVJbml0VmVyaWZ5KExqYXZhL3NlY3VyaXR5L1B1YmxpY0tleTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZVNldFBhcmFtZXRlcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVTZXRQYXJhbWV0ZXIoTGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lU2lnbigpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVTaWduKFtCSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZVVwZGF0ZShCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVVcGRhdGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVVcGRhdGUoW0JJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lVmVyaWZ5KFtCKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVWZXJpZnkoW0JJSSlaIi8+Ci0JCTxmaWVsZCBuYW1lPSJhcHBSYW5kb20iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1NpZ25lZE9iamVjdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1NlcmlhbGl6YWJsZTtMamF2YS9zZWN1cml0eS9Qcml2YXRlS2V5O0xqYXZhL3NlY3VyaXR5L1NpZ25hdHVyZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsZ29yaXRobSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2JqZWN0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaWduYXR1cmUoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0idmVyaWZ5KExqYXZhL3NlY3VyaXR5L1B1YmxpY0tleTtMamF2YS9zZWN1cml0eS9TaWduYXR1cmU7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1NpZ25lciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0lkZW50aXR5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NlY3VyaXR5L0lkZW50aXR5U2NvcGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcml2YXRlS2V5KClMamF2YS9zZWN1cml0eS9Qcml2YXRlS2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEtleVBhaXIoTGphdmEvc2VjdXJpdHkvS2V5UGFpcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvVGltZXN0YW1wIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9EYXRlO0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGg7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaWduZXJDZXJ0UGF0aCgpTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXAoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1VucmVjb3ZlcmFibGVFbnRyeUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0dlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvVW5yZWNvdmVyYWJsZUtleUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0dlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbiIgcmVtb3ZlZD0iOSIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1VucmVjb3ZlcmFibGVFbnRyeUV4Y2VwdGlvbiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1VucmVzb2x2ZWRQZXJtaXNzaW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvUGVybWlzc2lvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVucmVzb2x2ZWRBY3Rpb25zKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVbnJlc29sdmVkQ2VydHMoKVtMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVucmVzb2x2ZWROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVbnJlc29sdmVkVHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9hY2wvQWNsIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9hY2wvT3duZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRFbnRyeShMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7TGphdmEvc2VjdXJpdHkvYWNsL0FjbEVudHJ5OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tQZXJtaXNzaW9uKExqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbDtMamF2YS9zZWN1cml0eS9hY2wvUGVybWlzc2lvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVudHJpZXMoKUxqYXZhL3V0aWwvRW51bWVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVybWlzc2lvbnMoTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOylMamF2YS91dGlsL0VudW1lcmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUVudHJ5KExqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbDtMamF2YS9zZWN1cml0eS9hY2wvQWNsRW50cnk7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYW1lKExqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbDtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvYWNsL0FjbEVudHJ5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFBlcm1pc3Npb24oTGphdmEvc2VjdXJpdHkvYWNsL1Blcm1pc3Npb247KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1Blcm1pc3Npb24oTGphdmEvc2VjdXJpdHkvYWNsL1Blcm1pc3Npb247KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmluY2lwYWwoKUxqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05lZ2F0aXZlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVybWlzc2lvbnMoKUxqYXZhL3V0aWwvRW51bWVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUGVybWlzc2lvbihMamF2YS9zZWN1cml0eS9hY2wvUGVybWlzc2lvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5lZ2F0aXZlUGVybWlzc2lvbnMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmluY2lwYWwoTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9hY2wvQWNsTm90Rm91bmRFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvYWNsL0dyb3VwIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9QcmluY2lwYWwiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRNZW1iZXIoTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNNZW1iZXIoTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWVtYmVycygpTGphdmEvdXRpbC9FbnVtZXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVNZW1iZXIoTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9hY2wvTGFzdE93bmVyRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2FjbC9Ob3RPd25lckV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9hY2wvT3duZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE93bmVyKExqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbDtMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVPd25lcihMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7TGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPd25lcihMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2FjbC9QZXJtaXNzaW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvQ1JMIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Jldm9rZWQoTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZTspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DUkxFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9HZW5lcmFsU2VjdXJpdHlFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvQ1JMUmVhc29uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ1JMUmVhc29uOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL3NlY3VyaXR5L2NlcnQvQ1JMUmVhc29uOyIvPgotCQk8ZmllbGQgbmFtZT0iQUFfQ09NUFJPTUlTRSIvPgotCQk8ZmllbGQgbmFtZT0iQUZGSUxJQVRJT05fQ0hBTkdFRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FfQ09NUFJPTUlTRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VSVElGSUNBVEVfSE9MRCIvPgotCQk8ZmllbGQgbmFtZT0iQ0VTU0FUSU9OX09GX09QRVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iS0VZX0NPTVBST01JU0UiLz4KLQkJPGZpZWxkIG5hbWU9IlBSSVZJTEVHRV9XSVRIRFJBV04iLz4KLQkJPGZpZWxkIG5hbWU9IlJFTU9WRV9GUk9NX0NSTCIvPgotCQk8ZmllbGQgbmFtZT0iU1VQRVJTRURFRCIvPgotCQk8ZmllbGQgbmFtZT0iVU5TUEVDSUZJRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlVOVVNFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DUkxTZWxlY3RvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaChMamF2YS9zZWN1cml0eS9jZXJ0L0NSTDspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VydGlmaWNhdGVzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5jb2RlZCgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGVkKExqYXZhL2xhbmcvU3RyaW5nOylbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY29kaW5ncygpTGphdmEvdXRpbC9JdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVJlcGxhY2UoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aCRDZXJ0UGF0aFJlcCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO1tCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkUmVzb2x2ZSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoQnVpbGRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhCdWlsZGVyU3BpO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aFBhcmFtZXRlcnM7KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhCdWlsZGVyUmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsZ29yaXRobSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFR5cGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3ZpZGVyKClMamF2YS9zZWN1cml0eS9Qcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXZvY2F0aW9uQ2hlY2tlcigpTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aENoZWNrZXI7IiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhCdWlsZGVyRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvR2VuZXJhbFNlY3VyaXR5RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoQnVpbGRlclJlc3VsdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZXJ0UGF0aCgpTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhCdWlsZGVyU3BpIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVCdWlsZChMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoUGFyYW1ldGVyczspTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aEJ1aWxkZXJSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0UmV2b2NhdGlvbkNoZWNrZXIoKUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhDaGVja2VyOyIgc2luY2U9IjI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoQ2hlY2tlciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrKExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KFopViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRm9yd2FyZENoZWNraW5nU3VwcG9ydGVkKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoUGFyYW1ldGVycyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhWYWxpZGF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoVmFsaWRhdG9yU3BpO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxnb3JpdGhtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0VHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhWYWxpZGF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhWYWxpZGF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhWYWxpZGF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdmlkZXIoKUxqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJldm9jYXRpb25DaGVja2VyKClMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoQ2hlY2tlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InZhbGlkYXRlKExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGg7TGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aFBhcmFtZXRlcnM7KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhWYWxpZGF0b3JSZXN1bHQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoVmFsaWRhdG9yRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvR2VuZXJhbFNlY3VyaXR5RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlO0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGg7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlO0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGg7SUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhWYWxpZGF0b3JFeGNlcHRpb24kUmVhc29uOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZXJ0UGF0aCgpTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlYXNvbigpTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aFZhbGlkYXRvckV4Y2VwdGlvbiRSZWFzb247IiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhWYWxpZGF0b3JFeGNlcHRpb24kQmFzaWNSZWFzb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aFZhbGlkYXRvckV4Y2VwdGlvbiRSZWFzb24iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoVmFsaWRhdG9yRXhjZXB0aW9uJEJhc2ljUmVhc29uOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhWYWxpZGF0b3JFeGNlcHRpb24kQmFzaWNSZWFzb247Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTEdPUklUSE1fQ09OU1RSQUlORUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYUElSRUQiLz4KLQkJPGZpZWxkIG5hbWU9IklOVkFMSURfU0lHTkFUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1RfWUVUX1ZBTElEIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVZPS0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTkRFVEVSTUlORURfUkVWT0NBVElPTl9TVEFUVVMiLz4KLQkJPGZpZWxkIG5hbWU9IlVOU1BFQ0lGSUVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoVmFsaWRhdG9yRXhjZXB0aW9uJFJlYXNvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aFZhbGlkYXRvclJlc3VsdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhWYWxpZGF0b3JTcGkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUdldFJldm9jYXRpb25DaGVja2VyKClMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoQ2hlY2tlcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZVZhbGlkYXRlKExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGg7TGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aFBhcmFtZXRlcnM7KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhWYWxpZGF0b3JSZXN1bHQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRTZWxlY3RvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaChMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRTdG9yZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFN0b3JlU3BpO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFN0b3JlUGFyYW1ldGVyczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENSTHMoTGphdmEvc2VjdXJpdHkvY2VydC9DUkxTZWxlY3RvcjspTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlcnRTdG9yZVBhcmFtZXRlcnMoKUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFN0b3JlUGFyYW1ldGVyczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZXJ0aWZpY2F0ZXMoTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0U2VsZWN0b3I7KUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0VHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0U3RvcmVQYXJhbWV0ZXJzOylMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRTdG9yZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRTdG9yZVBhcmFtZXRlcnM7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFN0b3JlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFN0b3JlUGFyYW1ldGVycztMamF2YS9zZWN1cml0eS9Qcm92aWRlcjspTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0U3RvcmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdmlkZXIoKUxqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0U3RvcmVFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9HZW5lcmFsU2VjdXJpdHlFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFN0b3JlUGFyYW1ldGVycyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFN0b3JlU3BpIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0U3RvcmVQYXJhbWV0ZXJzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0Q1JMcyhMamF2YS9zZWN1cml0eS9jZXJ0L0NSTFNlbGVjdG9yOylMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0Q2VydGlmaWNhdGVzKExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFNlbGVjdG9yOylMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGVkKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFB1YmxpY0tleSgpTGphdmEvc2VjdXJpdHkvUHVibGljS2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InZlcmlmeShMamF2YS9zZWN1cml0eS9QdWJsaWNLZXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2ZXJpZnkoTGphdmEvc2VjdXJpdHkvUHVibGljS2V5O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idmVyaWZ5KExqYXZhL3NlY3VyaXR5L1B1YmxpY0tleTtMamF2YS9zZWN1cml0eS9Qcm92aWRlcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVSZXBsYWNlKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGUkQ2VydGlmaWNhdGVSZXAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFJlc29sdmUoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZUVuY29kaW5nRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0dlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZUV4cGlyZWRFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlRmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGVGYWN0b3J5U3BpO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVDUkwoTGphdmEvaW8vSW5wdXRTdHJlYW07KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ1JMOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlQ1JMcyhMamF2YS9pby9JbnB1dFN0cmVhbTspTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlQ2VydFBhdGgoTGphdmEvaW8vSW5wdXRTdHJlYW07KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVDZXJ0UGF0aChMamF2YS9pby9JbnB1dFN0cmVhbTtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZUNlcnRQYXRoKExqYXZhL3V0aWwvTGlzdDspTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5lcmF0ZUNlcnRpZmljYXRlKExqYXZhL2lvL0lucHV0U3RyZWFtOylMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlQ2VydGlmaWNhdGVzKExqYXZhL2lvL0lucHV0U3RyZWFtOylMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VydFBhdGhFbmNvZGluZ3MoKUxqYXZhL3V0aWwvSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGVGYWN0b3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlRmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9Qcm92aWRlcjspTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZUZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdmlkZXIoKUxqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZUZhY3RvcnlTcGkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUdlbmVyYXRlQ1JMKExqYXZhL2lvL0lucHV0U3RyZWFtOylMamF2YS9zZWN1cml0eS9jZXJ0L0NSTDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZW5lcmF0ZUNSTHMoTGphdmEvaW8vSW5wdXRTdHJlYW07KUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZW5lcmF0ZUNlcnRQYXRoKExqYXZhL2lvL0lucHV0U3RyZWFtOylMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUdlbmVyYXRlQ2VydFBhdGgoTGphdmEvaW8vSW5wdXRTdHJlYW07TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2VuZXJhdGVDZXJ0UGF0aChMamF2YS91dGlsL0xpc3Q7KUxqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2VuZXJhdGVDZXJ0aWZpY2F0ZShMamF2YS9pby9JbnB1dFN0cmVhbTspTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZW5lcmF0ZUNlcnRpZmljYXRlcyhMamF2YS9pby9JbnB1dFN0cmVhbTspTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUdldENlcnRQYXRoRW5jb2RpbmdzKClMamF2YS91dGlsL0l0ZXJhdG9yOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZU5vdFlldFZhbGlkRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZVBhcnNpbmdFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlUmV2b2tlZEV4Y2VwdGlvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvRGF0ZTtMamF2YS9zZWN1cml0eS9jZXJ0L0NSTFJlYXNvbjtMamF2YXgvc2VjdXJpdHkvYXV0aC94NTAwL1g1MDBQcmluY2lwYWw7TGphdmEvdXRpbC9NYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRob3JpdHlOYW1lKClMamF2YXgvc2VjdXJpdHkvYXV0aC94NTAwL1g1MDBQcmluY2lwYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZW5zaW9ucygpTGphdmEvdXRpbC9NYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW52YWxpZGl0eURhdGUoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXZvY2F0aW9uRGF0ZSgpTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJldm9jYXRpb25SZWFzb24oKUxqYXZhL3NlY3VyaXR5L2NlcnQvQ1JMUmVhc29uOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9Db2xsZWN0aW9uQ2VydFN0b3JlUGFyYW1ldGVycyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0U3RvcmVQYXJhbWV0ZXJzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbGxlY3Rpb24oKUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvRXh0ZW5zaW9uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5jb2RlKExqYXZhL2lvL091dHB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NyaXRpY2FsKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0xEQVBDZXJ0U3RvcmVQYXJhbWV0ZXJzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRTdG9yZVBhcmFtZXRlcnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZlck5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9QS0lYQnVpbGRlclBhcmFtZXRlcnMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L1BLSVhQYXJhbWV0ZXJzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3NlY3VyaXR5L0tleVN0b3JlO0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFNlbGVjdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvU2V0O0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFNlbGVjdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4UGF0aExlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1heFBhdGhMZW5ndGgoSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L1BLSVhDZXJ0UGF0aEJ1aWxkZXJSZXN1bHQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L1BLSVhDZXJ0UGF0aFZhbGlkYXRvclJlc3VsdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhCdWlsZGVyUmVzdWx0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGg7TGphdmEvc2VjdXJpdHkvY2VydC9UcnVzdEFuY2hvcjtMamF2YS9zZWN1cml0eS9jZXJ0L1BvbGljeU5vZGU7TGphdmEvc2VjdXJpdHkvUHVibGljS2V5OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L1BLSVhDZXJ0UGF0aENoZWNrZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aENoZWNrZXIiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrKExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7TGphdmEvdXRpbC9Db2xsZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZvcndhcmRDaGVja2luZ1N1cHBvcnRlZCgpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9QS0lYQ2VydFBhdGhWYWxpZGF0b3JSZXN1bHQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFBhdGhWYWxpZGF0b3JSZXN1bHQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvY2VydC9UcnVzdEFuY2hvcjtMamF2YS9zZWN1cml0eS9jZXJ0L1BvbGljeU5vZGU7TGphdmEvc2VjdXJpdHkvUHVibGljS2V5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9saWN5VHJlZSgpTGphdmEvc2VjdXJpdHkvY2VydC9Qb2xpY3lOb2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFB1YmxpY0tleSgpTGphdmEvc2VjdXJpdHkvUHVibGljS2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRydXN0QW5jaG9yKClMamF2YS9zZWN1cml0eS9jZXJ0L1RydXN0QW5jaG9yOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9QS0lYUGFyYW1ldGVycyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aFBhcmFtZXRlcnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvS2V5U3RvcmU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9TZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRDZXJ0UGF0aENoZWNrZXIoTGphdmEvc2VjdXJpdHkvY2VydC9QS0lYQ2VydFBhdGhDaGVja2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQ2VydFN0b3JlKExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFN0b3JlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VydFBhdGhDaGVja2VycygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlcnRTdG9yZXMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlKClMamF2YS91dGlsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5pdGlhbFBvbGljaWVzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb2xpY3lRdWFsaWZpZXJzUmVqZWN0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaWdQcm92aWRlcigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFyZ2V0Q2VydENvbnN0cmFpbnRzKClMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRTZWxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcnVzdEFuY2hvcnMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQW55UG9saWN5SW5oaWJpdGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFeHBsaWNpdFBvbGljeVJlcXVpcmVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQb2xpY3lNYXBwaW5nSW5oaWJpdGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZXZvY2F0aW9uRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFueVBvbGljeUluaGliaXRlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDZXJ0UGF0aENoZWNrZXJzKExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENlcnRTdG9yZXMoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0ZShMamF2YS91dGlsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeHBsaWNpdFBvbGljeVJlcXVpcmVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluaXRpYWxQb2xpY2llcyhMamF2YS91dGlsL1NldDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvbGljeU1hcHBpbmdJbmhpYml0ZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9saWN5UXVhbGlmaWVyc1JlamVjdGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJldm9jYXRpb25FbmFibGVkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNpZ1Byb3ZpZGVyKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFyZ2V0Q2VydENvbnN0cmFpbnRzKExqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydFNlbGVjdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VHJ1c3RBbmNob3JzKExqYXZhL3V0aWwvU2V0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L1BLSVhSZWFzb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aFZhbGlkYXRvckV4Y2VwdGlvbiRSZWFzb24iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9jZXJ0L1BLSVhSZWFzb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGphdmEvc2VjdXJpdHkvY2VydC9QS0lYUmVhc29uOyIvPgotCQk8ZmllbGQgbmFtZT0iSU5WQUxJRF9LRVlfVVNBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IklOVkFMSURfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iSU5WQUxJRF9QT0xJQ1kiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTUVfQ0hBSU5JTkciLz4KLQkJPGZpZWxkIG5hbWU9Ik5PVF9DQV9DRVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19UUlVTVF9BTkNIT1IiLz4KLQkJPGZpZWxkIG5hbWU9IlBBVEhfVE9PX0xPTkciLz4KLQkJPGZpZWxkIG5hbWU9IlVOUkVDT0dOSVpFRF9DUklUX0VYVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9QS0lYUmV2b2NhdGlvbkNoZWNrZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9QS0lYQ2VydFBhdGhDaGVja2VyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmUoKUxqYXZhL3NlY3VyaXR5L2NlcnQvUEtJWFJldm9jYXRpb25DaGVja2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9jc3BFeHRlbnNpb25zKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2NzcFJlc3BvbmRlcigpTGphdmEvbmV0L1VSSTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPY3NwUmVzcG9uZGVyQ2VydCgpTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2NzcFJlc3BvbnNlcygpTGphdmEvdXRpbC9NYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3B0aW9ucygpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U29mdEZhaWxFeGNlcHRpb25zKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T2NzcEV4dGVuc2lvbnMoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T2NzcFJlc3BvbmRlcihMamF2YS9uZXQvVVJJOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T2NzcFJlc3BvbmRlckNlcnQoTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPY3NwUmVzcG9uc2VzKExqYXZhL3V0aWwvTWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3B0aW9ucyhMamF2YS91dGlsL1NldDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9QS0lYUmV2b2NhdGlvbkNoZWNrZXIkT3B0aW9uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NlY3VyaXR5L2NlcnQvUEtJWFJldm9jYXRpb25DaGVja2VyJE9wdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS9zZWN1cml0eS9jZXJ0L1BLSVhSZXZvY2F0aW9uQ2hlY2tlciRPcHRpb247Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOT19GQUxMQkFDSyIvPgotCQk8ZmllbGQgbmFtZT0iT05MWV9FTkRfRU5USVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUkVGRVJfQ1JMUyIvPgotCQk8ZmllbGQgbmFtZT0iU09GVF9GQUlMIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L1BvbGljeU5vZGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoaWxkcmVuKClMamF2YS91dGlsL0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlcHRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhwZWN0ZWRQb2xpY2llcygpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50KClMamF2YS9zZWN1cml0eS9jZXJ0L1BvbGljeU5vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9saWN5UXVhbGlmaWVycygpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsaWRQb2xpY3koKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ3JpdGljYWwoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvUG9saWN5UXVhbGlmaWVySW5mbyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGVkKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvbGljeVF1YWxpZmllcigpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb2xpY3lRdWFsaWZpZXJJZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L1RydXN0QW5jaG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvUHVibGljS2V5O1tCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7W0IpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YXgvc2VjdXJpdHkvYXV0aC94NTAwL1g1MDBQcmluY2lwYWw7TGphdmEvc2VjdXJpdHkvUHVibGljS2V5O1tCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDQSgpTGphdmF4L3NlY3VyaXR5L2F1dGgveDUwMC9YNTAwUHJpbmNpcGFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENBTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q0FQdWJsaWNLZXkoKUxqYXZhL3NlY3VyaXR5L1B1YmxpY0tleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lQ29uc3RyYWludHMoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJ1c3RlZENlcnQoKUxqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q1JMIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DUkwiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlFeHRlbnNpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGVkKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElzc3VlckROKClMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SXNzdWVyWDUwMFByaW5jaXBhbCgpTGphdmF4L3NlY3VyaXR5L2F1dGgveDUwMC9YNTAwUHJpbmNpcGFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5leHRVcGRhdGUoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXZva2VkQ2VydGlmaWNhdGUoTGphdmEvbWF0aC9CaWdJbnRlZ2VyOylMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDUkxFbnRyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXZva2VkQ2VydGlmaWNhdGUoTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7KUxqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUNSTEVudHJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJldm9rZWRDZXJ0aWZpY2F0ZXMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpZ0FsZ05hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpZ0FsZ09JRCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2lnQWxnUGFyYW1zKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpZ25hdHVyZSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUQlNDZXJ0TGlzdCgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaGlzVXBkYXRlKClMamF2YS91dGlsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVyc2lvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9InZlcmlmeShMamF2YS9zZWN1cml0eS9QdWJsaWNLZXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2ZXJpZnkoTGphdmEvc2VjdXJpdHkvUHVibGljS2V5O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idmVyaWZ5KExqYXZhL3NlY3VyaXR5L1B1YmxpY0tleTtMamF2YS9zZWN1cml0eS9Qcm92aWRlcjspViIgc2luY2U9IjI2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDUkxFbnRyeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9YNTA5RXh0ZW5zaW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VydGlmaWNhdGVJc3N1ZXIoKUxqYXZheC9zZWN1cml0eS9hdXRoL3g1MDAvWDUwMFByaW5jaXBhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGVkKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJldm9jYXRpb25EYXRlKClMamF2YS91dGlsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmV2b2NhdGlvblJlYXNvbigpTGphdmEvc2VjdXJpdHkvY2VydC9DUkxSZWFzb247IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJpYWxOdW1iZXIoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNFeHRlbnNpb25zKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDUkxTZWxlY3RvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9DUkxTZWxlY3RvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZElzc3VlcihMamF2YXgvc2VjdXJpdHkvYXV0aC94NTAwL1g1MDBQcmluY2lwYWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJc3N1ZXJOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSXNzdWVyTmFtZShbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VydGlmaWNhdGVDaGVja2luZygpTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZUFuZFRpbWUoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJc3N1ZXJOYW1lcygpTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElzc3VlcnMoKUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhDUkwoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5DUkwoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDZXJ0aWZpY2F0ZUNoZWNraW5nKExqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0ZUFuZFRpbWUoTGphdmEvdXRpbC9EYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SXNzdWVyTmFtZXMoTGphdmEvdXRpbC9Db2xsZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SXNzdWVycyhMamF2YS91dGlsL0NvbGxlY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhDUkxOdW1iZXIoTGphdmEvbWF0aC9CaWdJbnRlZ2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWluQ1JMTnVtYmVyKExqYXZhL21hdGgvQmlnSW50ZWdlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydFNlbGVjdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRTZWxlY3RvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFBhdGhUb05hbWUoSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUGF0aFRvTmFtZShJW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFN1YmplY3RBbHRlcm5hdGl2ZU5hbWUoSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkU3ViamVjdEFsdGVybmF0aXZlTmFtZShJW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1dGhvcml0eUtleUlkZW50aWZpZXIoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFzaWNDb25zdHJhaW50cygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlcnRpZmljYXRlKClMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDZXJ0aWZpY2F0ZVZhbGlkKClMamF2YS91dGlsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZW5kZWRLZXlVc2FnZSgpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SXNzdWVyKClMamF2YXgvc2VjdXJpdHkvYXV0aC94NTAwL1g1MDBQcmluY2lwYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SXNzdWVyQXNCeXRlcygpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJc3N1ZXJBc1N0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5VXNhZ2UoKVtaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF0Y2hBbGxTdWJqZWN0QWx0TmFtZXMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lQ29uc3RyYWludHMoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGF0aFRvTmFtZXMoKUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb2xpY3koKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaXZhdGVLZXlWYWxpZCgpTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcmlhbE51bWJlcigpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YmplY3QoKUxqYXZheC9zZWN1cml0eS9hdXRoL3g1MDAvWDUwMFByaW5jaXBhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJqZWN0QWx0ZXJuYXRpdmVOYW1lcygpTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YmplY3RBc0J5dGVzKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YmplY3RBc1N0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3ViamVjdEtleUlkZW50aWZpZXIoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3ViamVjdFB1YmxpY0tleSgpTGphdmEvc2VjdXJpdHkvUHVibGljS2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YmplY3RQdWJsaWNLZXlBbGdJRCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0aG9yaXR5S2V5SWRlbnRpZmllcihbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmFzaWNDb25zdHJhaW50cyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDZXJ0aWZpY2F0ZShMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENlcnRpZmljYXRlVmFsaWQoTGphdmEvdXRpbC9EYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXh0ZW5kZWRLZXlVc2FnZShMamF2YS91dGlsL1NldDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldElzc3VlcihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldElzc3VlcihMamF2YXgvc2VjdXJpdHkvYXV0aC94NTAwL1g1MDBQcmluY2lwYWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJc3N1ZXIoW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEtleVVzYWdlKFtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXRjaEFsbFN1YmplY3RBbHROYW1lcyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYW1lQ29uc3RyYWludHMoW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhdGhUb05hbWVzKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvbGljeShMamF2YS91dGlsL1NldDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByaXZhdGVLZXlWYWxpZChMamF2YS91dGlsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZXJpYWxOdW1iZXIoTGphdmEvbWF0aC9CaWdJbnRlZ2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3ViamVjdChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1YmplY3QoTGphdmF4L3NlY3VyaXR5L2F1dGgveDUwMC9YNTAwUHJpbmNpcGFsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3ViamVjdChbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3ViamVjdEFsdGVybmF0aXZlTmFtZXMoTGphdmEvdXRpbC9Db2xsZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3ViamVjdEtleUlkZW50aWZpZXIoW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN1YmplY3RQdWJsaWNLZXkoTGphdmEvc2VjdXJpdHkvUHVibGljS2V5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3ViamVjdFB1YmxpY0tleShbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3ViamVjdFB1YmxpY0tleUFsZ0lEKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlFeHRlbnNpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1ZhbGlkaXR5KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tWYWxpZGl0eShMamF2YS91dGlsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYXNpY0NvbnN0cmFpbnRzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZW5kZWRLZXlVc2FnZSgpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElzc3VlckFsdGVybmF0aXZlTmFtZXMoKUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJc3N1ZXJETigpTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElzc3VlclVuaXF1ZUlEKClbWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElzc3Vlclg1MDBQcmluY2lwYWwoKUxqYXZheC9zZWN1cml0eS9hdXRoL3g1MDAvWDUwMFByaW5jaXBhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlVc2FnZSgpW1oiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb3RBZnRlcigpTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5vdEJlZm9yZSgpTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcmlhbE51bWJlcigpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpZ0FsZ05hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpZ0FsZ09JRCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2lnQWxnUGFyYW1zKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpZ25hdHVyZSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJqZWN0QWx0ZXJuYXRpdmVOYW1lcygpTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YmplY3RETigpTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YmplY3RVbmlxdWVJRCgpW1oiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJqZWN0WDUwMFByaW5jaXBhbCgpTGphdmF4L3NlY3VyaXR5L2F1dGgveDUwMC9YNTAwUHJpbmNpcGFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRCU0NlcnRpZmljYXRlKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZlcnNpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2ZXJpZnkoTGphdmEvc2VjdXJpdHkvUHVibGljS2V5O0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOylWIiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUV4dGVuc2lvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3JpdGljYWxFeHRlbnNpb25PSURzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRlbnNpb25WYWx1ZShMamF2YS9sYW5nL1N0cmluZzspW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb25Dcml0aWNhbEV4dGVuc2lvbk9JRHMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1Vuc3VwcG9ydGVkQ3JpdGljYWxFeHRlbnNpb24oKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2ludGVyZmFjZXMvRFNBS2V5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbXMoKUxqYXZhL3NlY3VyaXR5L2ludGVyZmFjZXMvRFNBUGFyYW1zOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvaW50ZXJmYWNlcy9EU0FLZXlQYWlyR2VuZXJhdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0aWFsaXplKElaTGphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdGlhbGl6ZShMamF2YS9zZWN1cml0eS9pbnRlcmZhY2VzL0RTQVBhcmFtcztMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb207KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2ludGVyZmFjZXMvRFNBUGFyYW1zIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UCgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFEoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2ludGVyZmFjZXMvRFNBUHJpdmF0ZUtleSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvUHJpdmF0ZUtleSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L2ludGVyZmFjZXMvRFNBS2V5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WCgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8ZmllbGQgbmFtZT0ic2VyaWFsVmVyc2lvblVJRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvaW50ZXJmYWNlcy9EU0FQdWJsaWNLZXkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L1B1YmxpY0tleSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L2ludGVyZmFjZXMvRFNBS2V5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WSgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8ZmllbGQgbmFtZT0ic2VyaWFsVmVyc2lvblVJRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvaW50ZXJmYWNlcy9FQ0tleSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1zKClMamF2YS9zZWN1cml0eS9zcGVjL0VDUGFyYW1ldGVyU3BlYzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2ludGVyZmFjZXMvRUNQcml2YXRlS2V5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9Qcml2YXRlS2V5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvaW50ZXJmYWNlcy9FQ0tleSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFMoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPGZpZWxkIG5hbWU9InNlcmlhbFZlcnNpb25VSUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L2ludGVyZmFjZXMvRUNQdWJsaWNLZXkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L1B1YmxpY0tleSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L2ludGVyZmFjZXMvRUNLZXkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXKClMamF2YS9zZWN1cml0eS9zcGVjL0VDUG9pbnQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzZXJpYWxWZXJzaW9uVUlEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9pbnRlcmZhY2VzL1JTQUtleSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9kdWx1cygpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvaW50ZXJmYWNlcy9SU0FNdWx0aVByaW1lUHJpdmF0ZUNydEtleSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvaW50ZXJmYWNlcy9SU0FQcml2YXRlS2V5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3J0Q29lZmZpY2llbnQoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdGhlclByaW1lSW5mbygpW0xqYXZhL3NlY3VyaXR5L3NwZWMvUlNBT3RoZXJQcmltZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbWVFeHBvbmVudFAoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmltZUV4cG9uZW50USgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1lUCgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1lUSgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFB1YmxpY0V4cG9uZW50KClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzZXJpYWxWZXJzaW9uVUlEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9pbnRlcmZhY2VzL1JTQVByaXZhdGVDcnRLZXkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L2ludGVyZmFjZXMvUlNBUHJpdmF0ZUtleSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENydENvZWZmaWNpZW50KClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbWVFeHBvbmVudFAoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmltZUV4cG9uZW50USgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1lUCgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1lUSgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFB1YmxpY0V4cG9uZW50KClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzZXJpYWxWZXJzaW9uVUlEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9pbnRlcmZhY2VzL1JTQVByaXZhdGVLZXkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L1ByaXZhdGVLZXkiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9pbnRlcmZhY2VzL1JTQUtleSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaXZhdGVFeHBvbmVudCgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8ZmllbGQgbmFtZT0ic2VyaWFsVmVyc2lvblVJRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvaW50ZXJmYWNlcy9SU0FQdWJsaWNLZXkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L1B1YmxpY0tleSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L2ludGVyZmFjZXMvUlNBS2V5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHVibGljRXhwb25lbnQoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPGZpZWxkIG5hbWU9InNlcmlhbFZlcnNpb25VSUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL0RTQVBhcmFtZXRlclNwZWMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L2ludGVyZmFjZXMvRFNBUGFyYW1zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL0RTQVByaXZhdGVLZXlTcGVjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL0tleVNwZWMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RygpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFAoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WCgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9EU0FQdWJsaWNLZXlTcGVjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL0tleVNwZWMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RygpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFAoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WSgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9FQ0ZpZWxkIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWVsZFNpemUoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvRUNGaWVsZEYybSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9FQ0ZpZWxkIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGphdmEvbWF0aC9CaWdJbnRlZ2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pZFRlcm1zT2ZSZWR1Y3Rpb25Qb2x5bm9taWFsKClbSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlZHVjdGlvblBvbHlub21pYWwoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvRUNGaWVsZEZwIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL0VDRmllbGQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbWF0aC9CaWdJbnRlZ2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UCgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9FQ0dlblBhcmFtZXRlclNwZWMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9FQ1BhcmFtZXRlclNwZWMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9zZWN1cml0eS9zcGVjL0VsbGlwdGljQ3VydmU7TGphdmEvc2VjdXJpdHkvc3BlYy9FQ1BvaW50O0xqYXZhL21hdGgvQmlnSW50ZWdlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2ZhY3RvcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnZlKClMamF2YS9zZWN1cml0eS9zcGVjL0VsbGlwdGljQ3VydmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0R2VuZXJhdG9yKClMamF2YS9zZWN1cml0eS9zcGVjL0VDUG9pbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3JkZXIoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvRUNQb2ludCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBZmZpbmVYKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWZmaW5lWSgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8ZmllbGQgbmFtZT0iUE9JTlRfSU5GSU5JVFkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvRUNQcml2YXRlS2V5U3BlYyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9LZXlTcGVjIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9zZWN1cml0eS9zcGVjL0VDUGFyYW1ldGVyU3BlYzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtcygpTGphdmEvc2VjdXJpdHkvc3BlYy9FQ1BhcmFtZXRlclNwZWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UygpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9FQ1B1YmxpY0tleVNwZWMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvS2V5U3BlYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9zZWN1cml0eS9zcGVjL0VDUG9pbnQ7TGphdmEvc2VjdXJpdHkvc3BlYy9FQ1BhcmFtZXRlclNwZWM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbXMoKUxqYXZhL3NlY3VyaXR5L3NwZWMvRUNQYXJhbWV0ZXJTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFcoKUxqYXZhL3NlY3VyaXR5L3NwZWMvRUNQb2ludDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvRWxsaXB0aWNDdXJ2ZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3NlY3VyaXR5L3NwZWMvRUNGaWVsZDtMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3NlY3VyaXR5L3NwZWMvRUNGaWVsZDtMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyO1tCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QigpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpZWxkKClMamF2YS9zZWN1cml0eS9zcGVjL0VDRmllbGQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VlZCgpW0IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvRW5jb2RlZEtleVNwZWMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvS2V5U3BlYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5jb2RlZCgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JtYXQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9JbnZhbGlkS2V5U3BlY0V4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0dlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9JbnZhbGlkUGFyYW1ldGVyU3BlY0V4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0dlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9LZXlTcGVjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvTUdGMVBhcmFtZXRlclNwZWMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpZ2VzdEFsZ29yaXRobSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTSEExIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSEEyMjQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iU0hBMjU2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTSEEzODQiLz4KLQkJPGZpZWxkIG5hbWU9IlNIQTUxMiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9QS0NTOEVuY29kZWRLZXlTcGVjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9FbmNvZGVkS2V5U3BlYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL1BTU1BhcmFtZXRlclNwZWMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaWdlc3RBbGdvcml0aG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1HRkFsZ29yaXRobSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TUdGUGFyYW1ldGVycygpTGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNhbHRMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFpbGVyRmllbGQoKUkiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvUlNBS2V5R2VuUGFyYW1ldGVyU3BlYyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9tYXRoL0JpZ0ludGVnZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlzaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHVibGljRXhwb25lbnQoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPGZpZWxkIG5hbWU9IkYwIi8+Ci0JCTxmaWVsZCBuYW1lPSJGNCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9SU0FNdWx0aVByaW1lUHJpdmF0ZUNydEtleVNwZWMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL1JTQVByaXZhdGVLZXlTcGVjIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7W0xqYXZhL3NlY3VyaXR5L3NwZWMvUlNBT3RoZXJQcmltZUluZm87KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDcnRDb2VmZmljaWVudCgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE90aGVyUHJpbWVJbmZvKClbTGphdmEvc2VjdXJpdHkvc3BlYy9SU0FPdGhlclByaW1lSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmltZUV4cG9uZW50UCgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1lRXhwb25lbnRRKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbWVQKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbWVRKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHVibGljRXhwb25lbnQoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvUlNBT3RoZXJQcmltZUluZm8iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENydENvZWZmaWNpZW50KClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhwb25lbnQoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmltZSgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9SU0FQcml2YXRlQ3J0S2V5U3BlYyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvUlNBUHJpdmF0ZUtleVNwZWMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENydENvZWZmaWNpZW50KClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbWVFeHBvbmVudFAoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmltZUV4cG9uZW50USgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1lUCgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1lUSgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFB1YmxpY0V4cG9uZW50KClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL1JTQVByaXZhdGVLZXlTcGVjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL0tleVNwZWMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vZHVsdXMoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcml2YXRlRXhwb25lbnQoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvUlNBUHVibGljS2V5U3BlYyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9LZXlTcGVjIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2R1bHVzKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHVibGljRXhwb25lbnQoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvWDUwOUVuY29kZWRLZXlTcGVjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9FbmNvZGVkS2V5U3BlYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvQXJyYXkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImZyZWUoKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXJyYXkoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFycmF5KEpJKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFycmF5KEpJTGphdmEvdXRpbC9NYXA7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFycmF5KExqYXZhL3V0aWwvTWFwOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYXNlVHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhc2VUeXBlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzdWx0U2V0KClMamF2YS9zcWwvUmVzdWx0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3VsdFNldChKSSlMamF2YS9zcWwvUmVzdWx0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3VsdFNldChKSUxqYXZhL3V0aWwvTWFwOylMamF2YS9zcWwvUmVzdWx0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3VsdFNldChMamF2YS91dGlsL01hcDspTGphdmEvc3FsL1Jlc3VsdFNldDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9CYXRjaFVwZGF0ZUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NxbC9TUUxFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SVtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SVtJTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0lMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7W0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztbSUxqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbSUxqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVwZGF0ZUNvdW50cygpW0kiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9CbG9iIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcmVlKClWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpbmFyeVN0cmVhbSgpTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmluYXJ5U3RyZWFtKEpKKUxqYXZhL2lvL0lucHV0U3RyZWFtOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlcyhKSSlbQiIvPgotCQk8bWV0aG9kIG5hbWU9Imxlbmd0aCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9InBvc2l0aW9uKExqYXZhL3NxbC9CbG9iO0opSiIvPgotCQk8bWV0aG9kIG5hbWU9InBvc2l0aW9uKFtCSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmluYXJ5U3RyZWFtKEopTGphdmEvaW8vT3V0cHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJ5dGVzKEpbQilJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qnl0ZXMoSltCSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InRydW5jYXRlKEopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL0NhbGxhYmxlU3RhdGVtZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zcWwvUHJlcGFyZWRTdGF0ZW1lbnQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcnJheShJKUxqYXZhL3NxbC9BcnJheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBcnJheShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL0FycmF5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpZ0RlY2ltYWwoSSlMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmlnRGVjaW1hbChJSSlMamF2YS9tYXRoL0JpZ0RlY2ltYWw7IiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpZ0RlY2ltYWwoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCbG9iKEkpTGphdmEvc3FsL0Jsb2I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmxvYihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL0Jsb2I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9vbGVhbihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb29sZWFuKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qnl0ZShJKUIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlKExqYXZhL2xhbmcvU3RyaW5nOylCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qnl0ZXMoSSlbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5dGVzKExqYXZhL2xhbmcvU3RyaW5nOylbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJhY3RlclN0cmVhbShJKUxqYXZhL2lvL1JlYWRlcjsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhcmFjdGVyU3RyZWFtKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9pby9SZWFkZXI7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsb2IoSSlMamF2YS9zcWwvQ2xvYjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbG9iKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvQ2xvYjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlKEkpTGphdmEvc3FsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZShJTGphdmEvdXRpbC9DYWxlbmRhcjspTGphdmEvc3FsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0NhbGVuZGFyOylMamF2YS9zcWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb3VibGUoSSlEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG91YmxlKExqYXZhL2xhbmcvU3RyaW5nOylEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxvYXQoSSlGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxvYXQoTGphdmEvbGFuZy9TdHJpbmc7KUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50KExqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZyhJKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKExqYXZhL2xhbmcvU3RyaW5nOylKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TkNoYXJhY3RlclN0cmVhbShJKUxqYXZhL2lvL1JlYWRlcjsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TkNoYXJhY3RlclN0cmVhbShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvaW8vUmVhZGVyOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROQ2xvYihJKUxqYXZhL3NxbC9OQ2xvYjsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TkNsb2IoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9OQ2xvYjsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TlN0cmluZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROU3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2JqZWN0KEkpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2JqZWN0KElMamF2YS91dGlsL01hcDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2JqZWN0KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPYmplY3QoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9NYXA7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlZihJKUxqYXZhL3NxbC9SZWY7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVmKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvUmVmOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvd0lkKEkpTGphdmEvc3FsL1Jvd0lkOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3dJZChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL1Jvd0lkOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTUUxYTUwoSSlMamF2YS9zcWwvU1FMWE1MOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTUUxYTUwoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9TUUxYTUw7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3J0KEkpUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3J0KExqYXZhL2xhbmcvU3RyaW5nOylTIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lKEkpTGphdmEvc3FsL1RpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZShJTGphdmEvdXRpbC9DYWxlbmRhcjspTGphdmEvc3FsL1RpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL1RpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZShMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0NhbGVuZGFyOylMamF2YS9zcWwvVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXAoSSlMamF2YS9zcWwvVGltZXN0YW1wOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVzdGFtcChJTGphdmEvdXRpbC9DYWxlbmRhcjspTGphdmEvc3FsL1RpbWVzdGFtcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXAoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9UaW1lc3RhbXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZXN0YW1wKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvQ2FsZW5kYXI7KUxqYXZhL3NxbC9UaW1lc3RhbXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VVJMKEkpTGphdmEvbmV0L1VSTDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVUkwoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25ldC9VUkw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJPdXRQYXJhbWV0ZXIoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyT3V0UGFyYW1ldGVyKElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXJPdXRQYXJhbWV0ZXIoSUlMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyT3V0UGFyYW1ldGVyKExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyT3V0UGFyYW1ldGVyKExqYXZhL2xhbmcvU3RyaW5nO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3Rlck91dFBhcmFtZXRlcihMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBc2NpaVN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9JbnB1dFN0cmVhbTspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBc2NpaVN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9JbnB1dFN0cmVhbTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBc2NpaVN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9JbnB1dFN0cmVhbTtKKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmlnRGVjaW1hbChMamF2YS9sYW5nL1N0cmluZztMamF2YS9tYXRoL0JpZ0RlY2ltYWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCaW5hcnlTdHJlYW0oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vSW5wdXRTdHJlYW07KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmluYXJ5U3RyZWFtKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL0lucHV0U3RyZWFtO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJpbmFyeVN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9JbnB1dFN0cmVhbTtKKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmxvYihMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9JbnB1dFN0cmVhbTspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCbG9iKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL0lucHV0U3RyZWFtO0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCbG9iKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9CbG9iOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJvb2xlYW4oTGphdmEvbGFuZy9TdHJpbmc7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qnl0ZShMamF2YS9sYW5nL1N0cmluZztCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCeXRlcyhMamF2YS9sYW5nL1N0cmluZztbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hhcmFjdGVyU3RyZWFtKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL1JlYWRlcjspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGFyYWN0ZXJTdHJlYW0oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vUmVhZGVyO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoYXJhY3RlclN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7SilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENsb2IoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vUmVhZGVyOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENsb2IoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vUmVhZGVyO0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbG9iKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9DbG9iOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc3FsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9EYXRlO0xqYXZhL3V0aWwvQ2FsZW5kYXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREb3VibGUoTGphdmEvbGFuZy9TdHJpbmc7RClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmxvYXQoTGphdmEvbGFuZy9TdHJpbmc7RilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvbmcoTGphdmEvbGFuZy9TdHJpbmc7SilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TkNoYXJhY3RlclN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TkNoYXJhY3RlclN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7SilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5DbG9iKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL1JlYWRlcjspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROQ2xvYihMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7SilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5DbG9iKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9OQ2xvYjspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROU3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE51bGwoTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TnVsbChMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPYmplY3QoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPYmplY3QoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T2JqZWN0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0O0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSb3dJZChMamF2YS9sYW5nL1N0cmluZztMamF2YS9zcWwvUm93SWQ7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U1FMWE1MKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9TUUxYTUw7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hvcnQoTGphdmEvbGFuZy9TdHJpbmc7UylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zcWwvVGltZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc3FsL1RpbWU7TGphdmEvdXRpbC9DYWxlbmRhcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVzdGFtcChMamF2YS9sYW5nL1N0cmluZztMamF2YS9zcWwvVGltZXN0YW1wOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZXN0YW1wKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9UaW1lc3RhbXA7TGphdmEvdXRpbC9DYWxlbmRhcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVSTChMamF2YS9sYW5nL1N0cmluZztMamF2YS9uZXQvVVJMOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id2FzTnVsbCgpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL0NsaWVudEluZm9TdGF0dXMiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvQ2xpZW50SW5mb1N0YXR1czsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS9zcWwvQ2xpZW50SW5mb1N0YXR1czsiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFTT05fVU5LTk9XTl9QUk9QRVJUWSIvPgotCQk8ZmllbGQgbmFtZT0iUkVBU09OX1ZBTFVFX0lOVkFMSUQiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQVNPTl9WQUxVRV9UUlVOQ0FURUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9DbG9iIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcmVlKClWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFzY2lpU3RyZWFtKClMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyYWN0ZXJTdHJlYW0oKUxqYXZhL2lvL1JlYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyYWN0ZXJTdHJlYW0oSkopTGphdmEvaW8vUmVhZGVyOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJTdHJpbmcoSkkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibGVuZ3RoKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9zaXRpb24oTGphdmEvbGFuZy9TdHJpbmc7SilKIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9zaXRpb24oTGphdmEvc3FsL0Nsb2I7SilKIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXNjaWlTdHJlYW0oSilMamF2YS9pby9PdXRwdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hhcmFjdGVyU3RyZWFtKEopTGphdmEvaW8vV3JpdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cmluZyhKTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdHJpbmcoSkxqYXZhL2xhbmcvU3RyaW5nO0lJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnVuY2F0ZShKKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9Db25uZWN0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiIHNpbmNlPSIxOSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NxbC9XcmFwcGVyIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyV2FybmluZ3MoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbW1pdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUFycmF5T2YoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9zcWwvQXJyYXk7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUJsb2IoKUxqYXZhL3NxbC9CbG9iOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDbG9iKClMamF2YS9zcWwvQ2xvYjsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlTkNsb2IoKUxqYXZhL3NxbC9OQ2xvYjsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU1FMWE1MKClMamF2YS9zcWwvU1FMWE1MOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTdGF0ZW1lbnQoKUxqYXZhL3NxbC9TdGF0ZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU3RhdGVtZW50KElJKUxqYXZhL3NxbC9TdGF0ZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU3RhdGVtZW50KElJSSlMamF2YS9zcWwvU3RhdGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVN0cnVjdChMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3NxbC9TdHJ1Y3Q7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1dG9Db21taXQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYXRhbG9nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGllbnRJbmZvKClMamF2YS91dGlsL1Byb3BlcnRpZXM7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsaWVudEluZm8oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb2xkYWJpbGl0eSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldGFEYXRhKClMamF2YS9zcWwvRGF0YWJhc2VNZXRhRGF0YTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGVNYXAoKUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdhcm5pbmdzKClMamF2YS9zcWwvU1FMV2FybmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Nsb3NlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVhZE9ubHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZhbGlkKEkpWiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuYXRpdmVTUUwoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InByZXBhcmVDYWxsKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvQ2FsbGFibGVTdGF0ZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJlcGFyZUNhbGwoTGphdmEvbGFuZy9TdHJpbmc7SUkpTGphdmEvc3FsL0NhbGxhYmxlU3RhdGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InByZXBhcmVDYWxsKExqYXZhL2xhbmcvU3RyaW5nO0lJSSlMamF2YS9zcWwvQ2FsbGFibGVTdGF0ZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJlcGFyZVN0YXRlbWVudChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL1ByZXBhcmVkU3RhdGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InByZXBhcmVTdGF0ZW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7SSlMamF2YS9zcWwvUHJlcGFyZWRTdGF0ZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJlcGFyZVN0YXRlbWVudChMamF2YS9sYW5nL1N0cmluZztJSSlMamF2YS9zcWwvUHJlcGFyZWRTdGF0ZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJlcGFyZVN0YXRlbWVudChMamF2YS9sYW5nL1N0cmluZztJSUkpTGphdmEvc3FsL1ByZXBhcmVkU3RhdGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InByZXBhcmVTdGF0ZW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7W0kpTGphdmEvc3FsL1ByZXBhcmVkU3RhdGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InByZXBhcmVTdGF0ZW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvUHJlcGFyZWRTdGF0ZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZVNhdmVwb2ludChMamF2YS9zcWwvU2F2ZXBvaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icm9sbGJhY2soKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb2xsYmFjayhMamF2YS9zcWwvU2F2ZXBvaW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0b0NvbW1pdChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYXRhbG9nKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2xpZW50SW5mbyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbGllbnRJbmZvKExqYXZhL3V0aWwvUHJvcGVydGllczspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIb2xkYWJpbGl0eShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWFkT25seShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTYXZlcG9pbnQoKUxqYXZhL3NxbC9TYXZlcG9pbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2F2ZXBvaW50KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvU2F2ZXBvaW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFR5cGVNYXAoTGphdmEvdXRpbC9NYXA7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TQUNUSU9OX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQiLz4KLQkJPGZpZWxkIG5hbWU9IlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL0RhdGFUcnVuY2F0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc3FsL1NRTFdhcm5pbmciLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSVpaSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJWlpJSUxqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWFkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNmZXJTaXplKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvRGF0YWJhc2VNZXRhRGF0YSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc3FsL1dyYXBwZXIiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsUHJvY2VkdXJlc0FyZUNhbGxhYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsVGFibGVzQXJlU2VsZWN0YWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImF1dG9Db21taXRGYWlsdXJlQ2xvc2VzQWxsUmVzdWx0U2V0cygpWiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRhRGVmaW5pdGlvbkNhdXNlc1RyYW5zYWN0aW9uQ29tbWl0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0YURlZmluaXRpb25JZ25vcmVkSW5UcmFuc2FjdGlvbnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVzQXJlRGV0ZWN0ZWQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9lc01heFJvd1NpemVJbmNsdWRlQmxvYnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvUmVzdWx0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJlc3RSb3dJZGVudGlmaWVyKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0laKUxqYXZhL3NxbC9SZXN1bHRTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2F0YWxvZ1NlcGFyYXRvcigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2F0YWxvZ1Rlcm0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhdGFsb2dzKClMamF2YS9zcWwvUmVzdWx0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsaWVudEluZm9Qcm9wZXJ0aWVzKClMamF2YS9zcWwvUmVzdWx0U2V0OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2x1bW5Qcml2aWxlZ2VzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvUmVzdWx0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbHVtbnMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9SZXN1bHRTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ubmVjdGlvbigpTGphdmEvc3FsL0Nvbm5lY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3Jvc3NSZWZlcmVuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9SZXN1bHRTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0YWJhc2VNYWpvclZlcnNpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhYmFzZU1pbm9yVmVyc2lvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFiYXNlUHJvZHVjdE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGFiYXNlUHJvZHVjdFZlcnNpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRUcmFuc2FjdGlvbklzb2xhdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyaXZlck1ham9yVmVyc2lvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyaXZlck1pbm9yVmVyc2lvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyaXZlck5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERyaXZlclZlcnNpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4cG9ydGVkS2V5cyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL1Jlc3VsdFNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRyYU5hbWVDaGFyYWN0ZXJzKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGdW5jdGlvbkNvbHVtbnMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9SZXN1bHRTZXQ7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZ1bmN0aW9ucyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL1Jlc3VsdFNldDsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWRlbnRpZmllclF1b3RlU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbXBvcnRlZEtleXMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9SZXN1bHRTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXhJbmZvKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1paKUxqYXZhL3NxbC9SZXN1bHRTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SkRCQ01ham9yVmVyc2lvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEpEQkNNaW5vclZlcnNpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhCaW5hcnlMaXRlcmFsTGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4Q2F0YWxvZ05hbWVMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhDaGFyTGl0ZXJhbExlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heENvbHVtbk5hbWVMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhDb2x1bW5zSW5Hcm91cEJ5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4Q29sdW1uc0luSW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhDb2x1bW5zSW5PcmRlckJ5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4Q29sdW1uc0luU2VsZWN0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4Q29sdW1uc0luVGFibGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhDb25uZWN0aW9ucygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heEN1cnNvck5hbWVMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhJbmRleExlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFByb2NlZHVyZU5hbWVMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhSb3dTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4U2NoZW1hTmFtZUxlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFN0YXRlbWVudExlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFN0YXRlbWVudHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhUYWJsZU5hbWVMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhUYWJsZXNJblNlbGVjdCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFVzZXJOYW1lTGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtZXJpY0Z1bmN0aW9ucygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbWFyeUtleXMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9SZXN1bHRTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvY2VkdXJlQ29sdW1ucyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL1Jlc3VsdFNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9jZWR1cmVUZXJtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9jZWR1cmVzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvUmVzdWx0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3VsdFNldEhvbGRhYmlsaXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um93SWRMaWZldGltZSgpTGphdmEvc3FsL1Jvd0lkTGlmZXRpbWU7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNRTEtleXdvcmRzKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTUUxTdGF0ZVR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2hlbWFUZXJtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2hlbWFzKClMamF2YS9zcWwvUmVzdWx0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjaGVtYXMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9SZXN1bHRTZXQ7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlYXJjaFN0cmluZ0VzY2FwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nRnVuY3Rpb25zKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBlclRhYmxlcyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL1Jlc3VsdFNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBlclR5cGVzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvUmVzdWx0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5c3RlbUZ1bmN0aW9ucygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFibGVQcml2aWxlZ2VzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvUmVzdWx0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRhYmxlVHlwZXMoKUxqYXZhL3NxbC9SZXN1bHRTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFibGVzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL1Jlc3VsdFNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lRGF0ZUZ1bmN0aW9ucygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZUluZm8oKUxqYXZhL3NxbC9SZXN1bHRTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VURUcyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbSSlMamF2YS9zcWwvUmVzdWx0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVSTCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlck5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZlcnNpb25Db2x1bW5zKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvUmVzdWx0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydHNBcmVEZXRlY3RlZChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NhdGFsb2dBdFN0YXJ0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZWFkT25seSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvY2F0b3JzVXBkYXRlQ29weSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im51bGxQbHVzTm9uTnVsbElzTnVsbCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im51bGxzQXJlU29ydGVkQXRFbmQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJudWxsc0FyZVNvcnRlZEF0U3RhcnQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJudWxsc0FyZVNvcnRlZEhpZ2goKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJudWxsc0FyZVNvcnRlZExvdygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im90aGVyc0RlbGV0ZXNBcmVWaXNpYmxlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im90aGVyc0luc2VydHNBcmVWaXNpYmxlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im90aGVyc1VwZGF0ZXNBcmVWaXNpYmxlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im93bkRlbGV0ZXNBcmVWaXNpYmxlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im93bkluc2VydHNBcmVWaXNpYmxlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im93blVwZGF0ZXNBcmVWaXNpYmxlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3Jlc0xvd2VyQ2FzZUlkZW50aWZpZXJzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcmVzTG93ZXJDYXNlUXVvdGVkSWRlbnRpZmllcnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9yZXNNaXhlZENhc2VJZGVudGlmaWVycygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3Jlc01peGVkQ2FzZVF1b3RlZElkZW50aWZpZXJzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcmVzVXBwZXJDYXNlSWRlbnRpZmllcnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9yZXNVcHBlckNhc2VRdW90ZWRJZGVudGlmaWVycygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzQU5TSTkyRW50cnlMZXZlbFNRTCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzQU5TSTkyRnVsbFNRTCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzQU5TSTkySW50ZXJtZWRpYXRlU1FMKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNBbHRlclRhYmxlV2l0aEFkZENvbHVtbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzQWx0ZXJUYWJsZVdpdGhEcm9wQ29sdW1uKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNCYXRjaFVwZGF0ZXMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0NhdGFsb2dzSW5EYXRhTWFuaXB1bGF0aW9uKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNDYXRhbG9nc0luSW5kZXhEZWZpbml0aW9ucygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzQ2F0YWxvZ3NJblByaXZpbGVnZURlZmluaXRpb25zKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNDYXRhbG9nc0luUHJvY2VkdXJlQ2FsbHMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0NhdGFsb2dzSW5UYWJsZURlZmluaXRpb25zKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNDb2x1bW5BbGlhc2luZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzQ29udmVydCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzQ29udmVydChJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNDb3JlU1FMR3JhbW1hcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzQ29ycmVsYXRlZFN1YnF1ZXJpZXMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0RhdGFEZWZpbml0aW9uQW5kRGF0YU1hbmlwdWxhdGlvblRyYW5zYWN0aW9ucygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzRGF0YU1hbmlwdWxhdGlvblRyYW5zYWN0aW9uc09ubHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0RpZmZlcmVudFRhYmxlQ29ycmVsYXRpb25OYW1lcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzRXhwcmVzc2lvbnNJbk9yZGVyQnkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0V4dGVuZGVkU1FMR3JhbW1hcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzRnVsbE91dGVySm9pbnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0dldEdlbmVyYXRlZEtleXMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0dyb3VwQnkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0dyb3VwQnlCZXlvbmRTZWxlY3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0dyb3VwQnlVbnJlbGF0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0ludGVncml0eUVuaGFuY2VtZW50RmFjaWxpdHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0xpa2VFc2NhcGVDbGF1c2UoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c0xpbWl0ZWRPdXRlckpvaW5zKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNNaW5pbXVtU1FMR3JhbW1hcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzTWl4ZWRDYXNlSWRlbnRpZmllcnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c01peGVkQ2FzZVF1b3RlZElkZW50aWZpZXJzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNNdWx0aXBsZU9wZW5SZXN1bHRzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNNdWx0aXBsZVJlc3VsdFNldHMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c011bHRpcGxlVHJhbnNhY3Rpb25zKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNOYW1lZFBhcmFtZXRlcnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c05vbk51bGxhYmxlQ29sdW1ucygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzT3BlbkN1cnNvcnNBY3Jvc3NDb21taXQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c09wZW5DdXJzb3JzQWNyb3NzUm9sbGJhY2soKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c09wZW5TdGF0ZW1lbnRzQWNyb3NzQ29tbWl0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNPcGVuU3RhdGVtZW50c0Fjcm9zc1JvbGxiYWNrKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNPcmRlckJ5VW5yZWxhdGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNPdXRlckpvaW5zKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNQb3NpdGlvbmVkRGVsZXRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNQb3NpdGlvbmVkVXBkYXRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNSZXN1bHRTZXRDb25jdXJyZW5jeShJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNSZXN1bHRTZXRIb2xkYWJpbGl0eShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c1Jlc3VsdFNldFR5cGUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNTYXZlcG9pbnRzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNTY2hlbWFzSW5EYXRhTWFuaXB1bGF0aW9uKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNTY2hlbWFzSW5JbmRleERlZmluaXRpb25zKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNTY2hlbWFzSW5Qcml2aWxlZ2VEZWZpbml0aW9ucygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzU2NoZW1hc0luUHJvY2VkdXJlQ2FsbHMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c1NjaGVtYXNJblRhYmxlRGVmaW5pdGlvbnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c1NlbGVjdEZvclVwZGF0ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzU3RhdGVtZW50UG9vbGluZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzU3RvcmVkRnVuY3Rpb25zVXNpbmdDYWxsU3ludGF4KClaIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzU3RvcmVkUHJvY2VkdXJlcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzU3VicXVlcmllc0luQ29tcGFyaXNvbnMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwb3J0c1N1YnF1ZXJpZXNJbkV4aXN0cygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzU3VicXVlcmllc0luSW5zKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNTdWJxdWVyaWVzSW5RdWFudGlmaWVkcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzVGFibGVDb3JyZWxhdGlvbk5hbWVzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNUcmFuc2FjdGlvbklzb2xhdGlvbkxldmVsKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzVHJhbnNhY3Rpb25zKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcG9ydHNVbmlvbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBvcnRzVW5pb25BbGwoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVzQXJlRGV0ZWN0ZWQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0idXNlc0xvY2FsRmlsZVBlclRhYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0idXNlc0xvY2FsRmlsZXMoKVoiLz4KLQkJPGZpZWxkIG5hbWU9ImF0dHJpYnV0ZU5vTnVsbHMiLz4KLQkJPGZpZWxkIG5hbWU9ImF0dHJpYnV0ZU51bGxhYmxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJhdHRyaWJ1dGVOdWxsYWJsZVVua25vd24iLz4KLQkJPGZpZWxkIG5hbWU9ImJlc3RSb3dOb3RQc2V1ZG8iLz4KLQkJPGZpZWxkIG5hbWU9ImJlc3RSb3dQc2V1ZG8iLz4KLQkJPGZpZWxkIG5hbWU9ImJlc3RSb3dTZXNzaW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJiZXN0Um93VGVtcG9yYXJ5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJiZXN0Um93VHJhbnNhY3Rpb24iLz4KLQkJPGZpZWxkIG5hbWU9ImJlc3RSb3dVbmtub3duIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2x1bW5Ob051bGxzIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2x1bW5OdWxsYWJsZSIvPgotCQk8ZmllbGQgbmFtZT0iY29sdW1uTnVsbGFibGVVbmtub3duIi8+Ci0JCTxmaWVsZCBuYW1lPSJmdW5jdGlvbkNvbHVtbkluIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iZnVuY3Rpb25Db2x1bW5Jbk91dCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9ImZ1bmN0aW9uQ29sdW1uT3V0IiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iZnVuY3Rpb25Db2x1bW5SZXN1bHQiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmdW5jdGlvbkNvbHVtblVua25vd24iIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmdW5jdGlvbk5vTnVsbHMiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmdW5jdGlvbk5vVGFibGUiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmdW5jdGlvbk51bGxhYmxlIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iZnVuY3Rpb25OdWxsYWJsZVVua25vd24iIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmdW5jdGlvblJlc3VsdFVua25vd24iIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmdW5jdGlvblJldHVybiIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9ImZ1bmN0aW9uUmV0dXJuc1RhYmxlIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iaW1wb3J0ZWRLZXlDYXNjYWRlIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbXBvcnRlZEtleUluaXRpYWxseURlZmVycmVkIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbXBvcnRlZEtleUluaXRpYWxseUltbWVkaWF0ZSIvPgotCQk8ZmllbGQgbmFtZT0iaW1wb3J0ZWRLZXlOb0FjdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0iaW1wb3J0ZWRLZXlOb3REZWZlcnJhYmxlIi8+Ci0JCTxmaWVsZCBuYW1lPSJpbXBvcnRlZEtleVJlc3RyaWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJpbXBvcnRlZEtleVNldERlZmF1bHQiLz4KLQkJPGZpZWxkIG5hbWU9ImltcG9ydGVkS2V5U2V0TnVsbCIvPgotCQk8ZmllbGQgbmFtZT0icHJvY2VkdXJlQ29sdW1uSW4iLz4KLQkJPGZpZWxkIG5hbWU9InByb2NlZHVyZUNvbHVtbkluT3V0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9jZWR1cmVDb2x1bW5PdXQiLz4KLQkJPGZpZWxkIG5hbWU9InByb2NlZHVyZUNvbHVtblJlc3VsdCIvPgotCQk8ZmllbGQgbmFtZT0icHJvY2VkdXJlQ29sdW1uUmV0dXJuIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9jZWR1cmVDb2x1bW5Vbmtub3duIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9jZWR1cmVOb051bGxzIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm9jZWR1cmVOb1Jlc3VsdCIvPgotCQk8ZmllbGQgbmFtZT0icHJvY2VkdXJlTnVsbGFibGUiLz4KLQkJPGZpZWxkIG5hbWU9InByb2NlZHVyZU51bGxhYmxlVW5rbm93biIvPgotCQk8ZmllbGQgbmFtZT0icHJvY2VkdXJlUmVzdWx0VW5rbm93biIvPgotCQk8ZmllbGQgbmFtZT0icHJvY2VkdXJlUmV0dXJuc1Jlc3VsdCIvPgotCQk8ZmllbGQgbmFtZT0ic3FsU3RhdGVTUUwiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzcWxTdGF0ZVNRTDk5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzcWxTdGF0ZVhPcGVuIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0YWJsZUluZGV4Q2x1c3RlcmVkIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0YWJsZUluZGV4SGFzaGVkIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0YWJsZUluZGV4T3RoZXIiLz4KLQkJPGZpZWxkIG5hbWU9InRhYmxlSW5kZXhTdGF0aXN0aWMiLz4KLQkJPGZpZWxkIG5hbWU9InR5cGVOb051bGxzIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0eXBlTnVsbGFibGUiLz4KLQkJPGZpZWxkIG5hbWU9InR5cGVOdWxsYWJsZVVua25vd24iLz4KLQkJPGZpZWxkIG5hbWU9InR5cGVQcmVkQmFzaWMiLz4KLQkJPGZpZWxkIG5hbWU9InR5cGVQcmVkQ2hhciIvPgotCQk8ZmllbGQgbmFtZT0idHlwZVByZWROb25lIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0eXBlU2VhcmNoYWJsZSIvPgotCQk8ZmllbGQgbmFtZT0idmVyc2lvbkNvbHVtbk5vdFBzZXVkbyIvPgotCQk8ZmllbGQgbmFtZT0idmVyc2lvbkNvbHVtblBzZXVkbyIvPgotCQk8ZmllbGQgbmFtZT0idmVyc2lvbkNvbHVtblVua25vd24iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9EYXRlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9EYXRlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSSlWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvRGF0ZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9Ecml2ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdHNVUkwoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvUHJvcGVydGllczspTGphdmEvc3FsL0Nvbm5lY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFqb3JWZXJzaW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWlub3JWZXJzaW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvcGVydHlJbmZvKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvUHJvcGVydGllczspW0xqYXZhL3NxbC9Ecml2ZXJQcm9wZXJ0eUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iamRiY0NvbXBsaWFudCgpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL0RyaXZlck1hbmFnZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlcmVnaXN0ZXJEcml2ZXIoTGphdmEvc3FsL0RyaXZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb24oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9Db25uZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb24oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9Db25uZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb24oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Qcm9wZXJ0aWVzOylMamF2YS9zcWwvQ29ubmVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREcml2ZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9Ecml2ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RHJpdmVycygpTGphdmEvdXRpbC9FbnVtZXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2dTdHJlYW0oKUxqYXZhL2lvL1ByaW50U3RyZWFtOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2dXcml0ZXIoKUxqYXZhL2lvL1ByaW50V3JpdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvZ2luVGltZW91dCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InByaW50bG4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlckRyaXZlcihMamF2YS9zcWwvRHJpdmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9nU3RyZWFtKExqYXZhL2lvL1ByaW50U3RyZWFtOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvZ1dyaXRlcihMamF2YS9pby9QcmludFdyaXRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvZ2luVGltZW91dChJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9Ecml2ZXJQcm9wZXJ0eUluZm8iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8ZmllbGQgbmFtZT0iY2hvaWNlcyIvPgotCQk8ZmllbGQgbmFtZT0iZGVzY3JpcHRpb24iLz4KLQkJPGZpZWxkIG5hbWU9Im5hbWUiLz4KLQkJPGZpZWxkIG5hbWU9InJlcXVpcmVkIi8+Ci0JCTxmaWVsZCBuYW1lPSJ2YWx1ZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL05DbG9iIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zcWwvQ2xvYiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL1BhcmFtZXRlck1ldGFEYXRhIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zcWwvV3JhcHBlciIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXJDbGFzc05hbWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXJDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtZXRlck1vZGUoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1ldGVyVHlwZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXJUeXBlTmFtZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWNpc2lvbihJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2FsZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc051bGxhYmxlKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2lnbmVkKEkpWiIvPgotCQk8ZmllbGQgbmFtZT0icGFyYW1ldGVyTW9kZUluIi8+Ci0JCTxmaWVsZCBuYW1lPSJwYXJhbWV0ZXJNb2RlSW5PdXQiLz4KLQkJPGZpZWxkIG5hbWU9InBhcmFtZXRlck1vZGVPdXQiLz4KLQkJPGZpZWxkIG5hbWU9InBhcmFtZXRlck1vZGVVbmtub3duIi8+Ci0JCTxmaWVsZCBuYW1lPSJwYXJhbWV0ZXJOb051bGxzIi8+Ci0JCTxmaWVsZCBuYW1lPSJwYXJhbWV0ZXJOdWxsYWJsZSIvPgotCQk8ZmllbGQgbmFtZT0icGFyYW1ldGVyTnVsbGFibGVVbmtub3duIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvUHJlcGFyZWRTdGF0ZW1lbnQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NxbC9TdGF0ZW1lbnQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRCYXRjaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyUGFyYW1ldGVycygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWN1dGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdXRlUXVlcnkoKUxqYXZhL3NxbC9SZXN1bHRTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZVVwZGF0ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldGFEYXRhKClMamF2YS9zcWwvUmVzdWx0U2V0TWV0YURhdGE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1ldGVyTWV0YURhdGEoKUxqYXZhL3NxbC9QYXJhbWV0ZXJNZXRhRGF0YTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBcnJheShJTGphdmEvc3FsL0FycmF5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXNjaWlTdHJlYW0oSUxqYXZhL2lvL0lucHV0U3RyZWFtOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFzY2lpU3RyZWFtKElMamF2YS9pby9JbnB1dFN0cmVhbTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBc2NpaVN0cmVhbShJTGphdmEvaW8vSW5wdXRTdHJlYW07SilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJpZ0RlY2ltYWwoSUxqYXZhL21hdGgvQmlnRGVjaW1hbDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJpbmFyeVN0cmVhbShJTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmluYXJ5U3RyZWFtKElMamF2YS9pby9JbnB1dFN0cmVhbTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCaW5hcnlTdHJlYW0oSUxqYXZhL2lvL0lucHV0U3RyZWFtO0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCbG9iKElMamF2YS9pby9JbnB1dFN0cmVhbTspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCbG9iKElMamF2YS9pby9JbnB1dFN0cmVhbTtKKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmxvYihJTGphdmEvc3FsL0Jsb2I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCb29sZWFuKElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCeXRlKElCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCeXRlcyhJW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoYXJhY3RlclN0cmVhbShJTGphdmEvaW8vUmVhZGVyOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoYXJhY3RlclN0cmVhbShJTGphdmEvaW8vUmVhZGVyO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoYXJhY3RlclN0cmVhbShJTGphdmEvaW8vUmVhZGVyO0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbG9iKElMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2xvYihJTGphdmEvaW8vUmVhZGVyO0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbG9iKElMamF2YS9zcWwvQ2xvYjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGUoSUxqYXZhL3NxbC9EYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0ZShJTGphdmEvc3FsL0RhdGU7TGphdmEvdXRpbC9DYWxlbmRhcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERvdWJsZShJRClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmxvYXQoSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9uZyhJSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TkNoYXJhY3RlclN0cmVhbShJTGphdmEvaW8vUmVhZGVyOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5DaGFyYWN0ZXJTdHJlYW0oSUxqYXZhL2lvL1JlYWRlcjtKKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TkNsb2IoSUxqYXZhL2lvL1JlYWRlcjspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROQ2xvYihJTGphdmEvaW8vUmVhZGVyO0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROQ2xvYihJTGphdmEvc3FsL05DbG9iOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5TdHJpbmcoSUxqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE51bGwoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE51bGwoSUlMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9iamVjdChJTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPYmplY3QoSUxqYXZhL2xhbmcvT2JqZWN0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE9iamVjdChJTGphdmEvbGFuZy9PYmplY3Q7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlZihJTGphdmEvc3FsL1JlZjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJvd0lkKElMamF2YS9zcWwvUm93SWQ7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U1FMWE1MKElMamF2YS9zcWwvU1FMWE1MOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNob3J0KElTKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdHJpbmcoSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZShJTGphdmEvc3FsL1RpbWU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaW1lKElMamF2YS9zcWwvVGltZTtMamF2YS91dGlsL0NhbGVuZGFyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZXN0YW1wKElMamF2YS9zcWwvVGltZXN0YW1wOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZXN0YW1wKElMamF2YS9zcWwvVGltZXN0YW1wO0xqYXZhL3V0aWwvQ2FsZW5kYXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVUkwoSUxqYXZhL25ldC9VUkw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVbmljb2RlU3RyZWFtKElMamF2YS9pby9JbnB1dFN0cmVhbTtJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvUmVmIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYXNlVHlwZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iamVjdCgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2JqZWN0KExqYXZhL3V0aWwvTWFwOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPYmplY3QoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9SZXN1bHRTZXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQXV0b0Nsb3NlYWJsZSIgc2luY2U9IjE5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc3FsL1dyYXBwZXIiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWJzb2x1dGUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWZ0ZXJMYXN0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmVmb3JlRmlyc3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWxSb3dVcGRhdGVzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJXYXJuaW5ncygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVsZXRlUm93KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZENvbHVtbihMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZpcnN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXJyYXkoSSlMamF2YS9zcWwvQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9BcnJheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBc2NpaVN0cmVhbShJKUxqYXZhL2lvL0lucHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFzY2lpU3RyZWFtKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCaWdEZWNpbWFsKEkpTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpZ0RlY2ltYWwoSUkpTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCaWdEZWNpbWFsKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmlnRGVjaW1hbChMamF2YS9sYW5nL1N0cmluZztJKUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmluYXJ5U3RyZWFtKEkpTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmluYXJ5U3RyZWFtKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCbG9iKEkpTGphdmEvc3FsL0Jsb2I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmxvYihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL0Jsb2I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9vbGVhbihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCb29sZWFuKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qnl0ZShJKUIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlKExqYXZhL2xhbmcvU3RyaW5nOylCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qnl0ZXMoSSlbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5dGVzKExqYXZhL2xhbmcvU3RyaW5nOylbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJhY3RlclN0cmVhbShJKUxqYXZhL2lvL1JlYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyYWN0ZXJTdHJlYW0oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2lvL1JlYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbG9iKEkpTGphdmEvc3FsL0Nsb2I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xvYihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL0Nsb2I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29uY3VycmVuY3koKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJzb3JOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlKEkpTGphdmEvc3FsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZShJTGphdmEvdXRpbC9DYWxlbmRhcjspTGphdmEvc3FsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0NhbGVuZGFyOylMamF2YS9zcWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb3VibGUoSSlEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG91YmxlKExqYXZhL2xhbmcvU3RyaW5nOylEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmV0Y2hEaXJlY3Rpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGZXRjaFNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbG9hdChJKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGbG9hdChMamF2YS9sYW5nL1N0cmluZzspRiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvbGRhYmlsaXR5KClJIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnQoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKEkpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmcoTGphdmEvbGFuZy9TdHJpbmc7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXRhRGF0YSgpTGphdmEvc3FsL1Jlc3VsdFNldE1ldGFEYXRhOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5DaGFyYWN0ZXJTdHJlYW0oSSlMamF2YS9pby9SZWFkZXI7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5DaGFyYWN0ZXJTdHJlYW0oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2lvL1JlYWRlcjsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TkNsb2IoSSlMamF2YS9zcWwvTkNsb2I7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5DbG9iKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvTkNsb2I7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5TdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TlN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iamVjdChJKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iamVjdChJTGphdmEvdXRpbC9NYXA7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iamVjdChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2JqZWN0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTWFwOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWYoSSlMamF2YS9zcWwvUmVmOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL1JlZjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3coKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3dJZChJKUxqYXZhL3NxbC9Sb3dJZDsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um93SWQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9Sb3dJZDsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U1FMWE1MKEkpTGphdmEvc3FsL1NRTFhNTDsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U1FMWE1MKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvU1FMWE1MOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG9ydChJKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaG9ydChMamF2YS9sYW5nL1N0cmluZzspUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXRlbWVudCgpTGphdmEvc3FsL1N0YXRlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmcoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWUoSSlMamF2YS9zcWwvVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lKElMamF2YS91dGlsL0NhbGVuZGFyOylMamF2YS9zcWwvVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zcWwvVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvQ2FsZW5kYXI7KUxqYXZhL3NxbC9UaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVzdGFtcChJKUxqYXZhL3NxbC9UaW1lc3RhbXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZXN0YW1wKElMamF2YS91dGlsL0NhbGVuZGFyOylMamF2YS9zcWwvVGltZXN0YW1wOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVzdGFtcChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL1RpbWVzdGFtcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lc3RhbXAoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9DYWxlbmRhcjspTGphdmEvc3FsL1RpbWVzdGFtcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VVJMKEkpTGphdmEvbmV0L1VSTDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVUkwoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25ldC9VUkw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5pY29kZVN0cmVhbShJKUxqYXZhL2lvL0lucHV0U3RyZWFtOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVbmljb2RlU3RyZWFtKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9pby9JbnB1dFN0cmVhbTsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2FybmluZ3MoKUxqYXZhL3NxbC9TUUxXYXJuaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydFJvdygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWZ0ZXJMYXN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNCZWZvcmVGaXJzdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2xvc2VkKClaIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmlyc3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xhc3QoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXN0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibW92ZVRvQ3VycmVudFJvdygpViIvPgotCQk8bWV0aG9kIG5hbWU9Im1vdmVUb0luc2VydFJvdygpViIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmV2aW91cygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlZnJlc2hSb3coKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxhdGl2ZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb3dEZWxldGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icm93SW5zZXJ0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb3dVcGRhdGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmV0Y2hEaXJlY3Rpb24oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmV0Y2hTaXplKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUFycmF5KElMamF2YS9zcWwvQXJyYXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVBcnJheShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zcWwvQXJyYXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVBc2NpaVN0cmVhbShJTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQXNjaWlTdHJlYW0oSUxqYXZhL2lvL0lucHV0U3RyZWFtO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUFzY2lpU3RyZWFtKElMamF2YS9pby9JbnB1dFN0cmVhbTtKKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQXNjaWlTdHJlYW0oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vSW5wdXRTdHJlYW07KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQXNjaWlTdHJlYW0oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vSW5wdXRTdHJlYW07SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQXNjaWlTdHJlYW0oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vSW5wdXRTdHJlYW07SilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUJpZ0RlY2ltYWwoSUxqYXZhL21hdGgvQmlnRGVjaW1hbDspViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUJpZ0RlY2ltYWwoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbWF0aC9CaWdEZWNpbWFsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQmluYXJ5U3RyZWFtKElMamF2YS9pby9JbnB1dFN0cmVhbTspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVCaW5hcnlTdHJlYW0oSUxqYXZhL2lvL0lucHV0U3RyZWFtO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUJpbmFyeVN0cmVhbShJTGphdmEvaW8vSW5wdXRTdHJlYW07SilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUJpbmFyeVN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9JbnB1dFN0cmVhbTspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVCaW5hcnlTdHJlYW0oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vSW5wdXRTdHJlYW07SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQmluYXJ5U3RyZWFtKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL0lucHV0U3RyZWFtO0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVCbG9iKElMamF2YS9pby9JbnB1dFN0cmVhbTspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVCbG9iKElMamF2YS9pby9JbnB1dFN0cmVhbTtKKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQmxvYihJTGphdmEvc3FsL0Jsb2I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVCbG9iKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL0lucHV0U3RyZWFtOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUJsb2IoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vSW5wdXRTdHJlYW07SilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUJsb2IoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc3FsL0Jsb2I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVCb29sZWFuKElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVCb29sZWFuKExqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUJ5dGUoSUIpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUJ5dGUoTGphdmEvbGFuZy9TdHJpbmc7QilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQnl0ZXMoSVtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVCeXRlcyhMamF2YS9sYW5nL1N0cmluZztbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQ2hhcmFjdGVyU3RyZWFtKElMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQ2hhcmFjdGVyU3RyZWFtKElMamF2YS9pby9SZWFkZXI7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQ2hhcmFjdGVyU3RyZWFtKElMamF2YS9pby9SZWFkZXI7SilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUNoYXJhY3RlclN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQ2hhcmFjdGVyU3RyZWFtKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL1JlYWRlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVDaGFyYWN0ZXJTdHJlYW0oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vUmVhZGVyO0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVDbG9iKElMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQ2xvYihJTGphdmEvaW8vUmVhZGVyO0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVDbG9iKElMamF2YS9zcWwvQ2xvYjspViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUNsb2IoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vUmVhZGVyOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUNsb2IoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vUmVhZGVyO0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVDbG9iKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9DbG9iOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlRGF0ZShJTGphdmEvc3FsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVEYXRlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9EYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlRG91YmxlKElEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVEb3VibGUoTGphdmEvbGFuZy9TdHJpbmc7RClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlRmxvYXQoSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUZsb2F0KExqYXZhL2xhbmcvU3RyaW5nO0YpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUludChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlSW50KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUxvbmcoSUopViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUxvbmcoTGphdmEvbGFuZy9TdHJpbmc7SilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlTkNoYXJhY3RlclN0cmVhbShJTGphdmEvaW8vUmVhZGVyOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZU5DaGFyYWN0ZXJTdHJlYW0oSUxqYXZhL2lvL1JlYWRlcjtKKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlTkNoYXJhY3RlclN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlTkNoYXJhY3RlclN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7SilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZU5DbG9iKElMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlTkNsb2IoSUxqYXZhL2lvL1JlYWRlcjtKKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlTkNsb2IoSUxqYXZhL3NxbC9OQ2xvYjspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVOQ2xvYihMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlTkNsb2IoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vUmVhZGVyO0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVOQ2xvYihMamF2YS9sYW5nL1N0cmluZztMamF2YS9zcWwvTkNsb2I7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlTlN0cmluZyhJTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlTlN0cmluZyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVOdWxsKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZU51bGwoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVPYmplY3QoSUxqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlT2JqZWN0KElMamF2YS9sYW5nL09iamVjdDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVPYmplY3QoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVPYmplY3QoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlUmVmKElMamF2YS9zcWwvUmVmOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlUmVmKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9SZWY7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVSb3coKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVSb3dJZChJTGphdmEvc3FsL1Jvd0lkOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZVJvd0lkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9Sb3dJZDspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVTUUxYTUwoSUxqYXZhL3NxbC9TUUxYTUw7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlU1FMWE1MKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9TUUxYTUw7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlU2hvcnQoSVMpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZVNob3J0KExqYXZhL2xhbmcvU3RyaW5nO1MpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZVN0cmluZyhJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVUaW1lKElMamF2YS9zcWwvVGltZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZVRpbWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc3FsL1RpbWU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVUaW1lc3RhbXAoSUxqYXZhL3NxbC9UaW1lc3RhbXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVUaW1lc3RhbXAoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc3FsL1RpbWVzdGFtcDspViIvPgotCQk8bWV0aG9kIG5hbWU9Indhc051bGwoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkNMT1NFX0NVUlNPUlNfQVRfQ09NTUlUIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05DVVJfUkVBRF9PTkxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05DVVJfVVBEQVRBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRVRDSF9GT1JXQVJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRVRDSF9SRVZFUlNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRVRDSF9VTktOT1dOIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT0xEX0NVUlNPUlNfT1ZFUl9DT01NSVQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfRk9SV0FSRF9PTkxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJUWVBFX1NDUk9MTF9JTlNFTlNJVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iVFlQRV9TQ1JPTExfU0VOU0lUSVZFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvUmVzdWx0U2V0TWV0YURhdGEiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NxbC9XcmFwcGVyIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhdGFsb2dOYW1lKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sdW1uQ2xhc3NOYW1lKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sdW1uQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2x1bW5EaXNwbGF5U2l6ZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2x1bW5MYWJlbChJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbHVtbk5hbWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2x1bW5UeXBlKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbHVtblR5cGVOYW1lKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlY2lzaW9uKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjYWxlKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjaGVtYU5hbWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYWJsZU5hbWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0F1dG9JbmNyZW1lbnQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDYXNlU2Vuc2l0aXZlKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ3VycmVuY3koSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZWZpbml0ZWx5V3JpdGFibGUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOdWxsYWJsZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlYWRPbmx5KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2VhcmNoYWJsZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NpZ25lZChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1dyaXRhYmxlKEkpWiIvPgotCQk8ZmllbGQgbmFtZT0iY29sdW1uTm9OdWxscyIvPgotCQk8ZmllbGQgbmFtZT0iY29sdW1uTnVsbGFibGUiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbHVtbk51bGxhYmxlVW5rbm93biIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL1Jvd0lkIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlcygpW0IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9Sb3dJZExpZmV0aW1lIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL1Jvd0lkTGlmZXRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGphdmEvc3FsL1Jvd0lkTGlmZXRpbWU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJST1dJRF9VTlNVUFBPUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iUk9XSURfVkFMSURfRk9SRVZFUiIvPgotCQk8ZmllbGQgbmFtZT0iUk9XSURfVkFMSURfT1RIRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlJPV0lEX1ZBTElEX1NFU1NJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlJPV0lEX1ZBTElEX1RSQU5TQUNUSU9OIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvU1FMQ2xpZW50SW5mb0V4Y2VwdGlvbiIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NxbC9TUUxFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL3V0aWwvTWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS91dGlsL01hcDtMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL01hcDtMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL01hcDtMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL01hcDtMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZhaWxlZFByb3BlcnRpZXMoKUxqYXZhL3V0aWwvTWFwOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL1NRTERhdGEiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNRTFR5cGVOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkU1FMKExqYXZhL3NxbC9TUUxJbnB1dDtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlU1FMKExqYXZhL3NxbC9TUUxPdXRwdXQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9TUUxEYXRhRXhjZXB0aW9uIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc3FsL1NRTE5vblRyYW5zaWVudEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvU1FMRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0l0ZXJhYmxlIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVycm9yQ29kZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5leHRFeGNlcHRpb24oKUxqYXZhL3NxbC9TUUxFeGNlcHRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U1FMU3RhdGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5leHRFeGNlcHRpb24oTGphdmEvc3FsL1NRTEV4Y2VwdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL1NRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24iIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zcWwvU1FMTm9uVHJhbnNpZW50RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9TUUxJbnB1dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEFycmF5KClMamF2YS9zcWwvQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEFzY2lpU3RyZWFtKClMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkQmlnRGVjaW1hbCgpTGphdmEvbWF0aC9CaWdEZWNpbWFsOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRCaW5hcnlTdHJlYW0oKUxqYXZhL2lvL0lucHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRCbG9iKClMamF2YS9zcWwvQmxvYjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkQm9vbGVhbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRCeXRlKClCIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZEJ5dGVzKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRDaGFyYWN0ZXJTdHJlYW0oKUxqYXZhL2lvL1JlYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkQ2xvYigpTGphdmEvc3FsL0Nsb2I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZERhdGUoKUxqYXZhL3NxbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWREb3VibGUoKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkRmxvYXQoKUYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkSW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZExvbmcoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkTkNsb2IoKUxqYXZhL3NxbC9OQ2xvYjsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZE5TdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkT2JqZWN0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkUmVmKClMamF2YS9zcWwvUmVmOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRSb3dJZCgpTGphdmEvc3FsL1Jvd0lkOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkU1FMWE1MKClMamF2YS9zcWwvU1FMWE1MOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkU2hvcnQoKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkVGltZSgpTGphdmEvc3FsL1RpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZFRpbWVzdGFtcCgpTGphdmEvc3FsL1RpbWVzdGFtcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkVVJMKClMamF2YS9uZXQvVVJMOyIvPgotCQk8bWV0aG9kIG5hbWU9Indhc051bGwoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9TUUxJbnRlZ3JpdHlDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc3FsL1NRTE5vblRyYW5zaWVudEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvU1FMSW52YWxpZEF1dGhvcml6YXRpb25TcGVjRXhjZXB0aW9uIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc3FsL1NRTE5vblRyYW5zaWVudEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvU1FMTm9uVHJhbnNpZW50Q29ubmVjdGlvbkV4Y2VwdGlvbiIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NxbC9TUUxOb25UcmFuc2llbnRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL1NRTE5vblRyYW5zaWVudEV4Y2VwdGlvbiIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NxbC9TUUxFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL1NRTE91dHB1dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVBcnJheShMamF2YS9zcWwvQXJyYXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUFzY2lpU3RyZWFtKExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVCaWdEZWNpbWFsKExqYXZhL21hdGgvQmlnRGVjaW1hbDspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlQmluYXJ5U3RyZWFtKExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVCbG9iKExqYXZhL3NxbC9CbG9iOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVCb29sZWFuKFopViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlQnl0ZShCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUJ5dGVzKFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUNoYXJhY3RlclN0cmVhbShMamF2YS9pby9SZWFkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUNsb2IoTGphdmEvc3FsL0Nsb2I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZURhdGUoTGphdmEvc3FsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZURvdWJsZShEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZUZsb2F0KEYpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlSW50KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlTG9uZyhKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZU5DbG9iKExqYXZhL3NxbC9OQ2xvYjspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZU5TdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVPYmplY3QoTGphdmEvc3FsL1NRTERhdGE7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVJlZihMamF2YS9zcWwvUmVmOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVSb3dJZChMamF2YS9zcWwvUm93SWQ7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVTUUxYTUwoTGphdmEvc3FsL1NRTFhNTDspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVNob3J0KFMpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlU3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVTdHJ1Y3QoTGphdmEvc3FsL1N0cnVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVGltZShMamF2YS9zcWwvVGltZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVGltZXN0YW1wKExqYXZhL3NxbC9UaW1lc3RhbXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVVSTChMamF2YS9uZXQvVVJMOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvU1FMUGVybWlzc2lvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0Jhc2ljUGVybWlzc2lvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL1NRTFJlY292ZXJhYmxlRXhjZXB0aW9uIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc3FsL1NRTEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvU1FMU3ludGF4RXJyb3JFeGNlcHRpb24iIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zcWwvU1FMTm9uVHJhbnNpZW50RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9TUUxUaW1lb3V0RXhjZXB0aW9uIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc3FsL1NRTFRyYW5zaWVudEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvU1FMVHJhbnNhY3Rpb25Sb2xsYmFja0V4Y2VwdGlvbiIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NxbC9TUUxUcmFuc2llbnRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL1NRTFRyYW5zaWVudENvbm5lY3Rpb25FeGNlcHRpb24iIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zcWwvU1FMVHJhbnNpZW50RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9TUUxUcmFuc2llbnRFeGNlcHRpb24iIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zcWwvU1FMRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9TUUxXYXJuaW5nIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc3FsL1NRTEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5leHRXYXJuaW5nKClMamF2YS9zcWwvU1FMV2FybmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROZXh0V2FybmluZyhMamF2YS9zcWwvU1FMV2FybmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL1NRTFhNTCIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJlZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJpbmFyeVN0cmVhbSgpTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhcmFjdGVyU3RyZWFtKClMamF2YS9pby9SZWFkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U291cmNlKExqYXZhL2xhbmcvQ2xhc3M7KUxqYXZheC94bWwvdHJhbnNmb3JtL1NvdXJjZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJpbmFyeVN0cmVhbSgpTGphdmEvaW8vT3V0cHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoYXJhY3RlclN0cmVhbSgpTGphdmEvaW8vV3JpdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc3VsdChMamF2YS9sYW5nL0NsYXNzOylMamF2YXgveG1sL3RyYW5zZm9ybS9SZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvU2F2ZXBvaW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTYXZlcG9pbnRJZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNhdmVwb2ludE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL1N0YXRlbWVudCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9BdXRvQ2xvc2VhYmxlIiBzaW5jZT0iMTkiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zcWwvV3JhcHBlciIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRCYXRjaChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbmNlbCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQmF0Y2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcldhcm5pbmdzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdXRlKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZShMamF2YS9sYW5nL1N0cmluZztJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdXRlKExqYXZhL2xhbmcvU3RyaW5nO1tJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdXRlKExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWN1dGVCYXRjaCgpW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdXRlUXVlcnkoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3NxbC9SZXN1bHRTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZVVwZGF0ZShMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWN1dGVVcGRhdGUoTGphdmEvbGFuZy9TdHJpbmc7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZVVwZGF0ZShMamF2YS9sYW5nL1N0cmluZztbSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZVVwZGF0ZShMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25uZWN0aW9uKClMamF2YS9zcWwvQ29ubmVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGZXRjaERpcmVjdGlvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZldGNoU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdlbmVyYXRlZEtleXMoKUxqYXZhL3NxbC9SZXN1bHRTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4RmllbGRTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4Um93cygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vcmVSZXN1bHRzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9yZVJlc3VsdHMoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVlcnlUaW1lb3V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzdWx0U2V0KClMamF2YS9zcWwvUmVzdWx0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3VsdFNldENvbmN1cnJlbmN5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzdWx0U2V0SG9sZGFiaWxpdHkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXN1bHRTZXRUeXBlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXBkYXRlQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXYXJuaW5ncygpTGphdmEvc3FsL1NRTFdhcm5pbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDbG9zZWQoKVoiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQb29sYWJsZSgpWiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXJzb3JOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXNjYXBlUHJvY2Vzc2luZyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGZXRjaERpcmVjdGlvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGZXRjaFNpemUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4RmllbGRTaXplKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1heFJvd3MoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9vbGFibGUoWilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFF1ZXJ5VGltZW91dChJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNMT1NFX0FMTF9SRVNVTFRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTE9TRV9DVVJSRU5UX1JFU1VMVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhFQ1VURV9GQUlMRUQiLz4KLQkJPGZpZWxkIG5hbWU9IktFRVBfQ1VSUkVOVF9SRVNVTFQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX0dFTkVSQVRFRF9LRVlTIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRVRVUk5fR0VORVJBVEVEX0tFWVMiLz4KLQkJPGZpZWxkIG5hbWU9IlNVQ0NFU1NfTk9fSU5GTyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvc3FsL1N0cnVjdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlcygpW0xqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZXMoTGphdmEvdXRpbC9NYXA7KVtMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTUUxUeXBlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvVGltZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvRGF0ZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL1RpbWU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS9zcWwvVGltZXN0YW1wIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9EYXRlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJSUkpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWZ0ZXIoTGphdmEvc3FsL1RpbWVzdGFtcDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImJlZm9yZShMamF2YS9zcWwvVGltZXN0YW1wOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL3NxbC9UaW1lc3RhbXA7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoTGphdmEvc3FsL1RpbWVzdGFtcDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbm9zKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmFub3MoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL1RpbWVzdGFtcDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9UeXBlcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iQklHSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJCSU5BUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkJJVCIvPgotCQk8ZmllbGQgbmFtZT0iQkxPQiIvPgotCQk8ZmllbGQgbmFtZT0iQk9PTEVBTiIvPgotCQk8ZmllbGQgbmFtZT0iQ0hBUiIvPgotCQk8ZmllbGQgbmFtZT0iQ0xPQiIvPgotCQk8ZmllbGQgbmFtZT0iREFUQUxJTksiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRFQ0lNQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkRJU1RJTkNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJET1VCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IkZMT0FUIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlRFR0VSIi8+Ci0JCTxmaWVsZCBuYW1lPSJKQVZBX09CSkVDVCIvPgotCQk8ZmllbGQgbmFtZT0iTE9OR05WQVJDSEFSIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9OR1ZBUkJJTkFSWSIvPgotCQk8ZmllbGQgbmFtZT0iTE9OR1ZBUkNIQVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik5DSEFSIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iTkNMT0IiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOVUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVU1FUklDIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVkFSQ0hBUiIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9Ik9USEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUYiLz4KLQkJPGZpZWxkIG5hbWU9IlJPV0lEIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iU01BTExJTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNRTFhNTCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUlVDVCIvPgotCQk8ZmllbGQgbmFtZT0iVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iVElNRVNUQU1QIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU5ZSU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJWQVJCSU5BUlkiLz4KLQkJPGZpZWxkIG5hbWU9IlZBUkNIQVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3NxbC9XcmFwcGVyIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1dyYXBwZXJGb3IoTGphdmEvbGFuZy9DbGFzczspWiIvPgotCQk8bWV0aG9kIG5hbWU9InVud3JhcChMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RleHQvQW5ub3RhdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGV4dC9BdHRyaWJ1dGVkQ2hhcmFjdGVySXRlcmF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RleHQvQ2hhcmFjdGVySXRlcmF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGxBdHRyaWJ1dGVLZXlzKClMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGUoTGphdmEvdGV4dC9BdHRyaWJ1dGVkQ2hhcmFjdGVySXRlcmF0b3IkQXR0cmlidXRlOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVzKClMamF2YS91dGlsL01hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSdW5MaW1pdCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJ1bkxpbWl0KExqYXZhL3RleHQvQXR0cmlidXRlZENoYXJhY3Rlckl0ZXJhdG9yJEF0dHJpYnV0ZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJ1bkxpbWl0KExqYXZhL3V0aWwvU2V0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnVuU3RhcnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSdW5TdGFydChMamF2YS90ZXh0L0F0dHJpYnV0ZWRDaGFyYWN0ZXJJdGVyYXRvciRBdHRyaWJ1dGU7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSdW5TdGFydChMamF2YS91dGlsL1NldDspSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGV4dC9BdHRyaWJ1dGVkQ2hhcmFjdGVySXRlcmF0b3IkQXR0cmlidXRlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkUmVzb2x2ZSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlBVVF9NRVRIT0RfU0VHTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iTEFOR1VBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IlJFQURJTkciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RleHQvQXR0cmlidXRlZFN0cmluZyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3RleHQvQXR0cmlidXRlZENoYXJhY3Rlckl0ZXJhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3RleHQvQXR0cmlidXRlZENoYXJhY3Rlckl0ZXJhdG9yO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdGV4dC9BdHRyaWJ1dGVkQ2hhcmFjdGVySXRlcmF0b3I7SUlbTGphdmEvdGV4dC9BdHRyaWJ1dGVkQ2hhcmFjdGVySXRlcmF0b3IkQXR0cmlidXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQXR0cmlidXRlKExqYXZhL3RleHQvQXR0cmlidXRlZENoYXJhY3Rlckl0ZXJhdG9yJEF0dHJpYnV0ZTtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEF0dHJpYnV0ZShMamF2YS90ZXh0L0F0dHJpYnV0ZWRDaGFyYWN0ZXJJdGVyYXRvciRBdHRyaWJ1dGU7TGphdmEvbGFuZy9PYmplY3Q7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEF0dHJpYnV0ZXMoTGphdmEvdXRpbC9NYXA7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEl0ZXJhdG9yKClMamF2YS90ZXh0L0F0dHJpYnV0ZWRDaGFyYWN0ZXJJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJdGVyYXRvcihbTGphdmEvdGV4dC9BdHRyaWJ1dGVkQ2hhcmFjdGVySXRlcmF0b3IkQXR0cmlidXRlOylMamF2YS90ZXh0L0F0dHJpYnV0ZWRDaGFyYWN0ZXJJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJdGVyYXRvcihbTGphdmEvdGV4dC9BdHRyaWJ1dGVkQ2hhcmFjdGVySXRlcmF0b3IkQXR0cmlidXRlO0lJKUxqYXZhL3RleHQvQXR0cmlidXRlZENoYXJhY3Rlckl0ZXJhdG9yOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGV4dC9CaWRpIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3RleHQvQXR0cmlidXRlZENoYXJhY3Rlckl0ZXJhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtDSVtCSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiYXNlSXNMZWZ0VG9SaWdodCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUxpbmVCaWRpKElJKUxqYXZhL3RleHQvQmlkaTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYXNlTGV2ZWwoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZXZlbEF0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJ1bkNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnVuTGV2ZWwoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnVuTGltaXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnVuU3RhcnQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMZWZ0VG9SaWdodCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTWl4ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JpZ2h0VG9MZWZ0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVvcmRlclZpc3VhbGx5KFtCSVtMamF2YS9sYW5nL09iamVjdDtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWlyZXNCaWRpKFtDSUkpWiIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OX0RFRkFVTFRfTEVGVF9UT19SSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OX0RFRkFVTFRfUklHSFRfVE9fTEVGVCIvPgotCQk8ZmllbGQgbmFtZT0iRElSRUNUSU9OX0xFRlRfVE9fUklHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkRJUkVDVElPTl9SSUdIVF9UT19MRUZUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90ZXh0L0JyZWFrSXRlcmF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3VycmVudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZpcnN0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9sbG93aW5nKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUxvY2FsZXMoKVtMamF2YS91dGlsL0xvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyYWN0ZXJJbnN0YW5jZSgpTGphdmEvdGV4dC9CcmVha0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJhY3Rlckluc3RhbmNlKExqYXZhL3V0aWwvTG9jYWxlOylMamF2YS90ZXh0L0JyZWFrSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50KFtCSSlJIiByZW1vdmVkPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGluZUluc3RhbmNlKClMamF2YS90ZXh0L0JyZWFrSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGluZUluc3RhbmNlKExqYXZhL3V0aWwvTG9jYWxlOylMamF2YS90ZXh0L0JyZWFrSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9uZyhbQkkpSiIgcmVtb3ZlZD0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlbnRlbmNlSW5zdGFuY2UoKUxqYXZhL3RleHQvQnJlYWtJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZW50ZW5jZUluc3RhbmNlKExqYXZhL3V0aWwvTG9jYWxlOylMamF2YS90ZXh0L0JyZWFrSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvcnQoW0JJKVMiIHJlbW92ZWQ9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXh0KClMamF2YS90ZXh0L0NoYXJhY3Rlckl0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdvcmRJbnN0YW5jZSgpTGphdmEvdGV4dC9CcmVha0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdvcmRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGphdmEvdGV4dC9CcmVha0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQm91bmRhcnkoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGFzdCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InByZWNlZGluZyhJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmV2aW91cygpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0KExqYXZhL3RleHQvQ2hhcmFjdGVySXRlcmF0b3I7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRPTkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RleHQvQ2hhcmFjdGVySXRlcmF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3VycmVudCgpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpcnN0KClDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmVnaW5JbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuZEluZGV4KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXN0KClDIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dCgpQyIvPgotCQk8bWV0aG9kIG5hbWU9InByZXZpb3VzKClDIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5kZXgoSSlDIi8+Ci0JCTxmaWVsZCBuYW1lPSJET05FIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90ZXh0L0Nob2ljZUZvcm1hdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3RleHQvTnVtYmVyRm9ybWF0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtEW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlQYXR0ZXJuKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9ybWF0cygpW0xqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbWl0cygpW0QiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0RG91YmxlKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHREb3VibGUoRFopRCIvPgotCQk8bWV0aG9kIG5hbWU9InByZXZpb3VzRG91YmxlKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9InNldENob2ljZXMoW0RbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1BhdHRlcm4oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGV4dC9Db2xsYXRpb25FbGVtZW50SXRlcmF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGFuZHJvaWQvaWN1L3RleHQvQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhFeHBhbnNpb24oSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2Zmc2V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InByZXZpb3VzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJpbWFyeU9yZGVyKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2Vjb25kYXJ5T3JkZXIoSSlTIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T2Zmc2V0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRleHQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0KExqYXZhL3RleHQvQ2hhcmFjdGVySXRlcmF0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXJ0aWFyeU9yZGVyKEkpUyIvPgotCQk8ZmllbGQgbmFtZT0iTlVMTE9SREVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90ZXh0L0NvbGxhdGlvbktleSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS90ZXh0L0NvbGxhdGlvbktleTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvdXJjZVN0cmluZygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9CeXRlQXJyYXkoKVtCIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90ZXh0L0NvbGxhdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvQ29tcGFyYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVMb2NhbGVzKClbTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sbGF0aW9uS2V5KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS90ZXh0L0NvbGxhdGlvbktleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWNvbXBvc2l0aW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxqYXZhL3RleHQvQ29sbGF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL3RleHQvQ29sbGF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWNvbXBvc2l0aW9uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cmVuZ3RoKEkpViIvPgotCQk8ZmllbGQgbmFtZT0iQ0FOT05JQ0FMX0RFQ09NUE9TSVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkZVTExfREVDT01QT1NJVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iSURFTlRJQ0FMIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19ERUNPTVBPU0lUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklNQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNPTkRBUlkiLz4KLQkJPGZpZWxkIG5hbWU9IlRFUlRJQVJZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90ZXh0L0RhdGVGb3JtYXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS90ZXh0L0Zvcm1hdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS91dGlsL0RhdGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS91dGlsL0RhdGU7TGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7TGphdmEvdGV4dC9GaWVsZFBvc2l0aW9uOylMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVMb2NhbGVzKClbTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FsZW5kYXIoKUxqYXZhL3V0aWwvQ2FsZW5kYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZUluc3RhbmNlKClMamF2YS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZUluc3RhbmNlKEkpTGphdmEvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGVJbnN0YW5jZShJTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlVGltZUluc3RhbmNlKClMamF2YS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZVRpbWVJbnN0YW5jZShJSSlMamF2YS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF0ZVRpbWVJbnN0YW5jZShJSUxqYXZhL3V0aWwvTG9jYWxlOylMamF2YS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxqYXZhL3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1iZXJGb3JtYXQoKUxqYXZhL3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVJbnN0YW5jZSgpTGphdmEvdGV4dC9EYXRlRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVJbnN0YW5jZShJKUxqYXZhL3RleHQvRGF0ZUZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lSW5zdGFuY2UoSUxqYXZhL3V0aWwvTG9jYWxlOylMamF2YS90ZXh0L0RhdGVGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZVpvbmUoKUxqYXZhL3V0aWwvVGltZVpvbmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMZW5pZW50KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL1N0cmluZztMamF2YS90ZXh0L1BhcnNlUG9zaXRpb247KUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYWxlbmRhcihMamF2YS91dGlsL0NhbGVuZGFyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGVuaWVudChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROdW1iZXJGb3JtYXQoTGphdmEvdGV4dC9OdW1iZXJGb3JtYXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaW1lWm9uZShMamF2YS91dGlsL1RpbWVab25lOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTV9QTV9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iREFURV9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iREFZX09GX1dFRUtfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IkRBWV9PRl9XRUVLX0lOX01PTlRIX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVlfT0ZfWUVBUl9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVCIvPgotCQk8ZmllbGQgbmFtZT0iRVJBX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJGVUxMIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1VSMF9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUjFfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVVJfT0ZfREFZMF9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUl9PRl9EQVkxX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRURJVU0iLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTExJU0VDT05EX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5VVEVfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTlRIX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNPTkRfRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FWk9ORV9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS19PRl9NT05USF9GSUVMRCIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS19PRl9ZRUFSX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJZRUFSX0ZJRUxEIi8+Ci0JCTxmaWVsZCBuYW1lPSJjYWxlbmRhciIvPgotCQk8ZmllbGQgbmFtZT0ibnVtYmVyRm9ybWF0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90ZXh0L0RhdGVGb3JtYXQkRmllbGQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS90ZXh0L0Zvcm1hdCRGaWVsZCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxlbmRhckZpZWxkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZDYWxlbmRhckZpZWxkKEkpTGphdmEvdGV4dC9EYXRlRm9ybWF0JEZpZWxkOyIvPgotCQk8ZmllbGQgbmFtZT0iQU1fUE0iLz4KLQkJPGZpZWxkIG5hbWU9IkRBWV9PRl9NT05USCIvPgotCQk8ZmllbGQgbmFtZT0iREFZX09GX1dFRUsiLz4KLQkJPGZpZWxkIG5hbWU9IkRBWV9PRl9XRUVLX0lOX01PTlRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVlfT0ZfWUVBUiIvPgotCQk8ZmllbGQgbmFtZT0iRVJBIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1VSMCIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUjEiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVVJfT0ZfREFZMCIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUl9PRl9EQVkxIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUxMSVNFQ09ORCIvPgotCQk8ZmllbGQgbmFtZT0iTUlOVVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNT05USCIvPgotCQk8ZmllbGQgbmFtZT0iU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FX1pPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IldFRUtfT0ZfTU9OVEgiLz4KLQkJPGZpZWxkIG5hbWU9IldFRUtfT0ZfWUVBUiIvPgotCQk8ZmllbGQgbmFtZT0iWUVBUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGV4dC9EYXRlRm9ybWF0U3ltYm9scyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbVBtU3RyaW5ncygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUxvY2FsZXMoKVtMamF2YS91dGlsL0xvY2FsZTsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXJhcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKClMamF2YS90ZXh0L0RhdGVGb3JtYXRTeW1ib2xzOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGphdmEvdGV4dC9EYXRlRm9ybWF0U3ltYm9sczsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxQYXR0ZXJuQ2hhcnMoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vbnRocygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNob3J0TW9udGhzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hvcnRXZWVrZGF5cygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdlZWtkYXlzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Wm9uZVN0cmluZ3MoKVtbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QW1QbVN0cmluZ3MoW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXJhcyhbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2NhbFBhdHRlcm5DaGFycyhMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1vbnRocyhbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG9ydE1vbnRocyhbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaG9ydFdlZWtkYXlzKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdlZWtkYXlzKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFpvbmVTdHJpbmdzKFtbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RleHQvRGVjaW1hbEZvcm1hdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3RleHQvTnVtYmVyRm9ybWF0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3RleHQvRGVjaW1hbEZvcm1hdFN5bWJvbHM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseUxvY2FsaXplZFBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseVBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWNpbWFsRm9ybWF0U3ltYm9scygpTGphdmEvdGV4dC9EZWNpbWFsRm9ybWF0U3ltYm9sczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcm91cGluZ1NpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNdWx0aXBsaWVyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmVnYXRpdmVQcmVmaXgoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5lZ2F0aXZlU3VmZml4KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3NpdGl2ZVByZWZpeCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9zaXRpdmVTdWZmaXgoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQYXJzZUJpZ0RlY2ltYWwoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWNpbWFsRm9ybWF0U3ltYm9scyhMamF2YS90ZXh0L0RlY2ltYWxGb3JtYXRTeW1ib2xzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVjaW1hbFNlcGFyYXRvckFsd2F5c1Nob3duKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyb3VwaW5nU2l6ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNdWx0aXBsaWVyKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5lZ2F0aXZlUHJlZml4KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmVnYXRpdmVTdWZmaXgoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXJzZUJpZ0RlY2ltYWwoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UG9zaXRpdmVQcmVmaXgoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQb3NpdGl2ZVN1ZmZpeChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InRvTG9jYWxpemVkUGF0dGVybigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9QYXR0ZXJuKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RleHQvRGVjaW1hbEZvcm1hdFN5bWJvbHMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZhaWxhYmxlTG9jYWxlcygpW0xqYXZhL3V0aWwvTG9jYWxlOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW5jeSgpTGphdmEvdXRpbC9DdXJyZW5jeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW5jeVN5bWJvbCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVjaW1hbFNlcGFyYXRvcigpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpZ2l0KClDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhwb25lbnRTZXBhcmF0b3IoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcm91cGluZ1NlcGFyYXRvcigpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZmluaXR5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZSgpTGphdmEvdGV4dC9EZWNpbWFsRm9ybWF0U3ltYm9sczsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL3RleHQvRGVjaW1hbEZvcm1hdFN5bWJvbHM7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVybmF0aW9uYWxDdXJyZW5jeVN5bWJvbCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWludXNTaWduKClDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9uZXRhcnlEZWNpbWFsU2VwYXJhdG9yKClDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFOKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXR0ZXJuU2VwYXJhdG9yKClDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVyTWlsbCgpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlcmNlbnQoKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRaZXJvRGlnaXQoKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXJyZW5jeShMamF2YS91dGlsL0N1cnJlbmN5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VycmVuY3lTeW1ib2woTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWNpbWFsU2VwYXJhdG9yKEMpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERpZ2l0KEMpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4cG9uZW50U2VwYXJhdG9yKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyb3VwaW5nU2VwYXJhdG9yKEMpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluZmluaXR5KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW50ZXJuYXRpb25hbEN1cnJlbmN5U3ltYm9sKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWludXNTaWduKEMpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1vbmV0YXJ5RGVjaW1hbFNlcGFyYXRvcihDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYU4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXR0ZXJuU2VwYXJhdG9yKEMpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBlck1pbGwoQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGVyY2VudChDKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRaZXJvRGlnaXQoQylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90ZXh0L0ZpZWxkUG9zaXRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdGV4dC9Gb3JtYXQkRmllbGQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdGV4dC9Gb3JtYXQkRmllbGQ7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmVnaW5JbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuZEluZGV4KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmllbGQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWVsZEF0dHJpYnV0ZSgpTGphdmEvdGV4dC9Gb3JtYXQkRmllbGQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmVnaW5JbmRleChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmRJbmRleChJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RleHQvRm9ybWF0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvU3RyaW5nQnVmZmVyO0xqYXZhL3RleHQvRmllbGRQb3NpdGlvbjspTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0VG9DaGFyYWN0ZXJJdGVyYXRvcihMamF2YS9sYW5nL09iamVjdDspTGphdmEvdGV4dC9BdHRyaWJ1dGVkQ2hhcmFjdGVySXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VPYmplY3QoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlT2JqZWN0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3RleHQvUGFyc2VQb3NpdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90ZXh0L0Zvcm1hdCRGaWVsZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3RleHQvQXR0cmlidXRlZENoYXJhY3Rlckl0ZXJhdG9yJEF0dHJpYnV0ZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGV4dC9NZXNzYWdlRm9ybWF0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdGV4dC9Gb3JtYXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseVBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXQoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXQoW0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvU3RyaW5nQnVmZmVyO0xqYXZhL3RleHQvRmllbGRQb3NpdGlvbjspTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9ybWF0cygpW0xqYXZhL3RleHQvRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcm1hdHNCeUFyZ3VtZW50SW5kZXgoKVtMamF2YS90ZXh0L0Zvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbGUoKUxqYXZhL3V0aWwvTG9jYWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvU3RyaW5nOylbTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdGV4dC9QYXJzZVBvc2l0aW9uOylbTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9ybWF0KElMamF2YS90ZXh0L0Zvcm1hdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvcm1hdEJ5QXJndW1lbnRJbmRleChJTGphdmEvdGV4dC9Gb3JtYXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb3JtYXRzKFtMamF2YS90ZXh0L0Zvcm1hdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvcm1hdHNCeUFyZ3VtZW50SW5kZXgoW0xqYXZhL3RleHQvRm9ybWF0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9jYWxlKExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9QYXR0ZXJuKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RleHQvTWVzc2FnZUZvcm1hdCRGaWVsZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3RleHQvRm9ybWF0JEZpZWxkIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJBUkdVTUVOVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGV4dC9Ob3JtYWxpemVyIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05vcm1hbGl6ZWQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvdGV4dC9Ob3JtYWxpemVyJEZvcm07KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3JtYWxpemUoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvdGV4dC9Ob3JtYWxpemVyJEZvcm07KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGV4dC9Ob3JtYWxpemVyJEZvcm0iIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS90ZXh0L05vcm1hbGl6ZXIkRm9ybTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS90ZXh0L05vcm1hbGl6ZXIkRm9ybTsiLz4KLQkJPGZpZWxkIG5hbWU9Ik5GQyIvPgotCQk8ZmllbGQgbmFtZT0iTkZEIi8+Ci0JCTxmaWVsZCBuYW1lPSJORktDIi8+Ci0JCTxmaWVsZCBuYW1lPSJORktEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90ZXh0L051bWJlckZvcm1hdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3RleHQvRm9ybWF0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KEQpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KERMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjtMamF2YS90ZXh0L0ZpZWxkUG9zaXRpb247KUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChKKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChKTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7TGphdmEvdGV4dC9GaWVsZFBvc2l0aW9uOylMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVMb2NhbGVzKClbTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVuY3koKUxqYXZhL3V0aWwvQ3VycmVuY3k7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVuY3lJbnN0YW5jZSgpTGphdmEvdGV4dC9OdW1iZXJGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3VycmVuY3lJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGphdmEvdGV4dC9OdW1iZXJGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxqYXZhL3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL3V0aWwvTG9jYWxlOylMamF2YS90ZXh0L051bWJlckZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnRlZ2VySW5zdGFuY2UoKUxqYXZhL3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVnZXJJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGphdmEvdGV4dC9OdW1iZXJGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4aW11bUludGVnZXJEaWdpdHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5pbXVtRnJhY3Rpb25EaWdpdHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE51bWJlckluc3RhbmNlKClMamF2YS90ZXh0L051bWJlckZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1iZXJJbnN0YW5jZShMamF2YS91dGlsL0xvY2FsZTspTGphdmEvdGV4dC9OdW1iZXJGb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVyY2VudEluc3RhbmNlKClMamF2YS90ZXh0L051bWJlckZvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZXJjZW50SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL3RleHQvTnVtYmVyRm9ybWF0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvdW5kaW5nTW9kZSgpTGphdmEvbWF0aC9Sb3VuZGluZ01vZGU7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzR3JvdXBpbmdVc2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQYXJzZUludGVnZXJPbmx5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvTnVtYmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3RleHQvUGFyc2VQb3NpdGlvbjspTGphdmEvbGFuZy9OdW1iZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3VycmVuY3koTGphdmEvdXRpbC9DdXJyZW5jeTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEdyb3VwaW5nVXNlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4aW11bUludGVnZXJEaWdpdHMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWluaW11bUZyYWN0aW9uRGlnaXRzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhcnNlSW50ZWdlck9ubHkoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Um91bmRpbmdNb2RlKExqYXZhL21hdGgvUm91bmRpbmdNb2RlOylWIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iRlJBQ1RJT05fRklFTEQiLz4KLQkJPGZpZWxkIG5hbWU9IklOVEVHRVJfRklFTEQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RleHQvTnVtYmVyRm9ybWF0JEZpZWxkIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdGV4dC9Gb3JtYXQkRmllbGQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNVUlJFTkNZIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUNJTUFMX1NFUEFSQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iRVhQT05FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYUE9ORU5UX1NJR04iLz4KLQkJPGZpZWxkIG5hbWU9IkVYUE9ORU5UX1NZTUJPTCIvPgotCQk8ZmllbGQgbmFtZT0iRlJBQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdST1VQSU5HX1NFUEFSQVRPUiIvPgotCQk8ZmllbGQgbmFtZT0iSU5URUdFUiIvPgotCQk8ZmllbGQgbmFtZT0iUEVSQ0VOVCIvPgotCQk8ZmllbGQgbmFtZT0iUEVSTUlMTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNJR04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RleHQvUGFyc2VFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcnJvck9mZnNldCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGV4dC9QYXJzZVBvc2l0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXJyb3JJbmRleCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluZGV4KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXJyb3JJbmRleChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbmRleChJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RleHQvUnVsZUJhc2VkQ29sbGF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS90ZXh0L0NvbGxhdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS90ZXh0L0NvbGxhdGlvbkVsZW1lbnRJdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2xsYXRpb25FbGVtZW50SXRlcmF0b3IoTGphdmEvdGV4dC9DaGFyYWN0ZXJJdGVyYXRvcjspTGphdmEvdGV4dC9Db2xsYXRpb25FbGVtZW50SXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UnVsZXMoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGV4dC9TaW1wbGVEYXRlRm9ybWF0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdGV4dC9EYXRlRm9ybWF0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3RleHQvRGF0ZUZvcm1hdFN5bWJvbHM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseUxvY2FsaXplZFBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseVBhdHRlcm4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQyRGlnaXRZZWFyU3RhcnQoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlRm9ybWF0U3ltYm9scygpTGphdmEvdGV4dC9EYXRlRm9ybWF0U3ltYm9sczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQyRGlnaXRZZWFyU3RhcnQoTGphdmEvdXRpbC9EYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0ZUZvcm1hdFN5bWJvbHMoTGphdmEvdGV4dC9EYXRlRm9ybWF0U3ltYm9sczspViIvPgotCQk8bWV0aG9kIG5hbWU9InRvTG9jYWxpemVkUGF0dGVybigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9QYXR0ZXJuKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RleHQvU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RleHQvQ2hhcmFjdGVySXRlcmF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0lJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGV4dChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9DbG9jayIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpeGVkKExqYXZhL3RpbWUvSW5zdGFudDtMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9DbG9jazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRab25lKClMamF2YS90aW1lL1pvbmVJZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnN0YW50KClMamF2YS90aW1lL0luc3RhbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWlsbGlzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2Zmc2V0KExqYXZhL3RpbWUvQ2xvY2s7TGphdmEvdGltZS9EdXJhdGlvbjspTGphdmEvdGltZS9DbG9jazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzeXN0ZW0oTGphdmEvdGltZS9ab25lSWQ7KUxqYXZhL3RpbWUvQ2xvY2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3lzdGVtRGVmYXVsdFpvbmUoKUxqYXZhL3RpbWUvQ2xvY2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3lzdGVtVVRDKClMamF2YS90aW1lL0Nsb2NrOyIvPgotCQk8bWV0aG9kIG5hbWU9InRpY2soTGphdmEvdGltZS9DbG9jaztMamF2YS90aW1lL0R1cmF0aW9uOylMamF2YS90aW1lL0Nsb2NrOyIvPgotCQk8bWV0aG9kIG5hbWU9InRpY2tNaW51dGVzKExqYXZhL3RpbWUvWm9uZUlkOylMamF2YS90aW1lL0Nsb2NrOyIvPgotCQk8bWV0aG9kIG5hbWU9InRpY2tTZWNvbmRzKExqYXZhL3RpbWUvWm9uZUlkOylMamF2YS90aW1lL0Nsb2NrOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhab25lKExqYXZhL3RpbWUvWm9uZUlkOylMamF2YS90aW1lL0Nsb2NrOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9EYXRlVGltZUV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvRGF5T2ZXZWVrIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlciIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb20oTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yOylMamF2YS90aW1lL0RheU9mV2VlazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TmFtZShMamF2YS90aW1lL2Zvcm1hdC9UZXh0U3R5bGU7TGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbHVlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoSilMamF2YS90aW1lL0RheU9mV2VlazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJKUxqYXZhL3RpbWUvRGF5T2ZXZWVrOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXMoSilMamF2YS90aW1lL0RheU9mV2VlazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS90aW1lL0RheU9mV2VlazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS90aW1lL0RheU9mV2VlazsiLz4KLQkJPGZpZWxkIG5hbWU9IkZSSURBWSIvPgotCQk8ZmllbGQgbmFtZT0iTU9OREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQVRVUkRBWSIvPgotCQk8ZmllbGQgbmFtZT0iU1VOREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSFVSU0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iVFVFU0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iV0VETkVTREFZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL0R1cmF0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWJzKClMamF2YS90aW1lL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJldHdlZW4oTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbDtMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsOylMamF2YS90aW1lL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS90aW1lL0R1cmF0aW9uOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGl2aWRlZEJ5KEopTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFubygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlY29uZHMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05lZ2F0aXZlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNaZXJvKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoSkxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzKExqYXZhL3RpbWUvRHVyYXRpb247KUxqYXZhL3RpbWUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNEYXlzKEopTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c0hvdXJzKEopTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c01pbGxpcyhKKUxqYXZhL3RpbWUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNNaW51dGVzKEopTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c05hbm9zKEopTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c1NlY29uZHMoSilMamF2YS90aW1lL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im11bHRpcGxpZWRCeShKKUxqYXZhL3RpbWUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmVnYXRlZCgpTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihKTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KUxqYXZhL3RpbWUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZEYXlzKEopTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkhvdXJzKEopTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZk1pbGxpcyhKKUxqYXZhL3RpbWUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZNaW51dGVzKEopTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZk5hbm9zKEopTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZlNlY29uZHMoSilMamF2YS90aW1lL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mU2Vjb25kcyhKSilMamF2YS90aW1lL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS90aW1lL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXMoSkxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXMoTGphdmEvdGltZS9EdXJhdGlvbjspTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzRGF5cyhKKUxqYXZhL3RpbWUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c0hvdXJzKEopTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzTWlsbGlzKEopTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzTWludXRlcyhKKUxqYXZhL3RpbWUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c05hbm9zKEopTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzU2Vjb25kcyhKKUxqYXZhL3RpbWUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9EYXlzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9Ib3VycygpSiIvPgotCQk8bWV0aG9kIG5hbWU9InRvTWlsbGlzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9NaW51dGVzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9OYW5vcygpSiIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhOYW5vcyhJKUxqYXZhL3RpbWUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aFNlY29uZHMoSilMamF2YS90aW1lL0R1cmF0aW9uOyIvPgotCQk8ZmllbGQgbmFtZT0iWkVSTyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9JbnN0YW50IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXRPZmZzZXQoTGphdmEvdGltZS9ab25lT2Zmc2V0OylMamF2YS90aW1lL09mZnNldERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImF0Wm9uZShMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS90aW1lL0luc3RhbnQ7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspTGphdmEvdGltZS9JbnN0YW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVwb2NoU2Vjb25kKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFubygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWZ0ZXIoTGphdmEvdGltZS9JbnN0YW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNCZWZvcmUoTGphdmEvdGltZS9JbnN0YW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoSkxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL0luc3RhbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudDspTGphdmEvdGltZS9JbnN0YW50OyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzTWlsbGlzKEopTGphdmEvdGltZS9JbnN0YW50OyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzTmFub3MoSilMamF2YS90aW1lL0luc3RhbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNTZWNvbmRzKEopTGphdmEvdGltZS9JbnN0YW50OyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdygpTGphdmEvdGltZS9JbnN0YW50OyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdyhMamF2YS90aW1lL0Nsb2NrOylMamF2YS90aW1lL0luc3RhbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZFcG9jaE1pbGxpKEopTGphdmEvdGltZS9JbnN0YW50OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mRXBvY2hTZWNvbmQoSilMamF2YS90aW1lL0luc3RhbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZFcG9jaFNlY29uZChKSilMamF2YS90aW1lL0luc3RhbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL3RpbWUvSW5zdGFudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9JbnN0YW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXMoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudDspTGphdmEvdGltZS9JbnN0YW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNNaWxsaXMoSilMamF2YS90aW1lL0luc3RhbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c05hbm9zKEopTGphdmEvdGltZS9JbnN0YW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNTZWNvbmRzKEopTGphdmEvdGltZS9JbnN0YW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InRvRXBvY2hNaWxsaSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9InRydW5jYXRlZFRvKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL0luc3RhbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXI7KUxqYXZhL3RpbWUvSW5zdGFudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxGaWVsZDtKKUxqYXZhL3RpbWUvSW5zdGFudDsiLz4KLQkJPGZpZWxkIG5hbWU9IkVQT0NIIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9Mb2NhbERhdGUiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXRTdGFydE9mRGF5KClMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXRTdGFydE9mRGF5KExqYXZhL3RpbWUvWm9uZUlkOylMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXRUaW1lKElJKUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdFRpbWUoSUlJKUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdFRpbWUoSUlJSSlMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXRUaW1lKExqYXZhL3RpbWUvTG9jYWxUaW1lOylMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXRUaW1lKExqYXZhL3RpbWUvT2Zmc2V0VGltZTspTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hyb25vbG9neSgpTGphdmEvdGltZS9jaHJvbm8vSXNvQ2hyb25vbG9neTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXlPZk1vbnRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF5T2ZXZWVrKClMamF2YS90aW1lL0RheU9mV2VlazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXlPZlllYXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb250aCgpTGphdmEvdGltZS9Nb250aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb250aFZhbHVlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WWVhcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudDspTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNEYXlzKEopTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNNb250aHMoSilMamF2YS90aW1lL0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c1dlZWtzKEopTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNZZWFycyhKKUxqYXZhL3RpbWUvTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdygpTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KExqYXZhL3RpbWUvQ2xvY2s7KUxqYXZhL3RpbWUvTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdyhMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoSUlJKUxqYXZhL3RpbWUvTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKElMamF2YS90aW1lL01vbnRoO0kpTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZFcG9jaERheShKKUxqYXZhL3RpbWUvTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mWWVhckRheShJSSlMamF2YS90aW1lL0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXI7KUxqYXZhL3RpbWUvTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXMoSkxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNEYXlzKEopTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c01vbnRocyhKKUxqYXZhL3RpbWUvTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNXZWVrcyhKKUxqYXZhL3RpbWUvTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNZZWFycyhKKUxqYXZhL3RpbWUvTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InVudGlsKExqYXZhL3RpbWUvY2hyb25vL0Nocm9ub0xvY2FsRGF0ZTspTGphdmEvdGltZS9QZXJpb2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXI7KUxqYXZhL3RpbWUvTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkO0opTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aERheU9mTW9udGgoSSlMamF2YS90aW1lL0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoRGF5T2ZZZWFyKEkpTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aE1vbnRoKEkpTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aFllYXIoSSlMamF2YS90aW1lL0xvY2FsRGF0ZTsiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWCIvPgotCQk8ZmllbGQgbmFtZT0iTUlOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL0xvY2FsRGF0ZVRpbWUiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGVUaW1lIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdGltZS9Mb2NhbERhdGU7TGphdmEvdGltZS9Mb2NhbFRpbWU7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImF0T2Zmc2V0KExqYXZhL3RpbWUvWm9uZU9mZnNldDspTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdFpvbmUoTGphdmEvdGltZS9ab25lSWQ7KUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERheU9mTW9udGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXlPZldlZWsoKUxqYXZhL3RpbWUvRGF5T2ZXZWVrOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERheU9mWWVhcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvdXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW51dGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb250aCgpTGphdmEvdGltZS9Nb250aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb250aFZhbHVlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFubygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlY29uZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFllYXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51cyhKTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51cyhMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQW1vdW50OylMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNEYXlzKEopTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzSG91cnMoSilMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNNaW51dGVzKEopTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzTW9udGhzKEopTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzTmFub3MoSilMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNTZWNvbmRzKEopTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzV2Vla3MoSilMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNZZWFycyhKKUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3coKUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3coTGphdmEvdGltZS9DbG9jazspTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdyhMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKElJSUlJKUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJSUlJSUkpTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKElJSUlJSUkpTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKElMamF2YS90aW1lL01vbnRoO0lJSSlMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoSUxqYXZhL3RpbWUvTW9udGg7SUlJSSlMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoSUxqYXZhL3RpbWUvTW9udGg7SUlJSUkpTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL3RpbWUvTG9jYWxEYXRlO0xqYXZhL3RpbWUvTG9jYWxUaW1lOylMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZFcG9jaFNlY29uZChKSUxqYXZhL3RpbWUvWm9uZU9mZnNldDspTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mSW5zdGFudChMamF2YS90aW1lL0luc3RhbnQ7TGphdmEvdGltZS9ab25lSWQ7KUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyOylMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1cyhKTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzRGF5cyhKKUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzSG91cnMoSilMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c01pbnV0ZXMoSilMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c01vbnRocyhKKUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzTmFub3MoSilMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c1NlY29uZHMoSilMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c1dlZWtzKEopTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNZZWFycyhKKUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0xvY2FsRGF0ZSgpTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJ1bmNhdGVkVG8oTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlcjspTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkO0opTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhEYXlPZk1vbnRoKEkpTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhEYXlPZlllYXIoSSlMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aEhvdXIoSSlMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aE1pbnV0ZShJKUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoTW9udGgoSSlMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aE5hbm8oSSlMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aFNlY29uZChJKUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoWWVhcihJKUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWCIvPgotCQk8ZmllbGQgbmFtZT0iTUlOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL0xvY2FsVGltZSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWwiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXREYXRlKExqYXZhL3RpbWUvTG9jYWxEYXRlOylMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXRPZmZzZXQoTGphdmEvdGltZS9ab25lT2Zmc2V0OylMamF2YS90aW1lL09mZnNldFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL3RpbWUvTG9jYWxUaW1lOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SG91cigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbnV0ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbm8oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWNvbmQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FmdGVyKExqYXZhL3RpbWUvTG9jYWxUaW1lOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNCZWZvcmUoTGphdmEvdGltZS9Mb2NhbFRpbWU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51cyhKTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KUxqYXZhL3RpbWUvTG9jYWxUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvTG9jYWxUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzSG91cnMoSilMamF2YS90aW1lL0xvY2FsVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c01pbnV0ZXMoSilMamF2YS90aW1lL0xvY2FsVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c05hbm9zKEopTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNTZWNvbmRzKEopTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KClMamF2YS90aW1lL0xvY2FsVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3coTGphdmEvdGltZS9DbG9jazspTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KExqYXZhL3RpbWUvWm9uZUlkOylMamF2YS90aW1lL0xvY2FsVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJSSlMamF2YS90aW1lL0xvY2FsVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJSUkpTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoSUlJSSlMamF2YS90aW1lL0xvY2FsVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZk5hbm9PZkRheShKKUxqYXZhL3RpbWUvTG9jYWxUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mU2Vjb25kT2ZEYXkoSilMamF2YS90aW1lL0xvY2FsVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXI7KUxqYXZhL3RpbWUvTG9jYWxUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXMoSkxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL0xvY2FsVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvTG9jYWxUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNIb3VycyhKKUxqYXZhL3RpbWUvTG9jYWxUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNNaW51dGVzKEopTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c05hbm9zKEopTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c1NlY29uZHMoSilMamF2YS90aW1lL0xvY2FsVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b05hbm9PZkRheSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9InRvU2Vjb25kT2ZEYXkoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnVuY2F0ZWRUbyhMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXI7KUxqYXZhL3RpbWUvTG9jYWxUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkO0opTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aEhvdXIoSSlMamF2YS90aW1lL0xvY2FsVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoTWludXRlKEkpTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aE5hbm8oSSlMamF2YS90aW1lL0xvY2FsVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoU2Vjb25kKEkpTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQVgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JRE5JR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU4iLz4KLQkJPGZpZWxkIG5hbWU9Ik5PT04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvTW9udGgiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlyc3REYXlPZlllYXIoWilJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlyc3RNb250aE9mUXVhcnRlcigpTGphdmEvdGltZS9Nb250aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspTGphdmEvdGltZS9Nb250aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TmFtZShMamF2YS90aW1lL2Zvcm1hdC9UZXh0U3R5bGU7TGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbHVlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGVuZ3RoKFopSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1heExlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbkxlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzKEopTGphdmEvdGltZS9Nb250aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJKUxqYXZhL3RpbWUvTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1cyhKKUxqYXZhL3RpbWUvTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdGltZS9Nb250aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS90aW1lL01vbnRoOyIvPgotCQk8ZmllbGQgbmFtZT0iQVBSSUwiLz4KLQkJPGZpZWxkIG5hbWU9IkFVR1VTVCIvPgotCQk8ZmllbGQgbmFtZT0iREVDRU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQlJVQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJKQU5VQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJKVUxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJKVU5FIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVJDSCIvPgotCQk8ZmllbGQgbmFtZT0iTUFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1ZFTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iT0NUT0JFUiIvPgotCQk8ZmllbGQgbmFtZT0iU0VQVEVNQkVSIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL01vbnRoRGF5IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdFllYXIoSSlMamF2YS90aW1lL0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGphdmEvdGltZS9Nb250aERheTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL3RpbWUvTW9udGhEYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF5T2ZNb250aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vbnRoKClMamF2YS90aW1lL01vbnRoOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vbnRoVmFsdWUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FmdGVyKExqYXZhL3RpbWUvTW9udGhEYXk7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JlZm9yZShMamF2YS90aW1lL01vbnRoRGF5OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYWxpZFllYXIoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KClMamF2YS90aW1lL01vbnRoRGF5OyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdyhMamF2YS90aW1lL0Nsb2NrOylMamF2YS90aW1lL01vbnRoRGF5OyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdyhMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9Nb250aERheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJSSlMamF2YS90aW1lL01vbnRoRGF5OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL3RpbWUvTW9udGg7SSlMamF2YS90aW1lL01vbnRoRGF5OyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS90aW1lL01vbnRoRGF5OyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyOylMamF2YS90aW1lL01vbnRoRGF5OyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS9Nb250aDspTGphdmEvdGltZS9Nb250aERheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoRGF5T2ZNb250aChJKUxqYXZhL3RpbWUvTW9udGhEYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aE1vbnRoKEkpTGphdmEvdGltZS9Nb250aERheTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWUiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7TGphdmEvdGltZS9ab25lT2Zmc2V0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdFpvbmVTYW1lSW5zdGFudChMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImF0Wm9uZVNpbWlsYXJMb2NhbChMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS90aW1lL09mZnNldERhdGVUaW1lOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXlPZk1vbnRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF5T2ZXZWVrKClMamF2YS90aW1lL0RheU9mV2VlazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXlPZlllYXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3VyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWludXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9udGgoKUxqYXZhL3RpbWUvTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9udGhWYWx1ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbm8oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPZmZzZXQoKUxqYXZhL3RpbWUvWm9uZU9mZnNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWNvbmQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRZZWFyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBZnRlcihMamF2YS90aW1lL09mZnNldERhdGVUaW1lOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNCZWZvcmUoTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRXF1YWwoTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51cyhMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQW1vdW50OylMamF2YS90aW1lL09mZnNldERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzRGF5cyhKKUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNIb3VycyhKKUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNNaW51dGVzKEopTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c01vbnRocyhKKUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNOYW5vcyhKKUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNTZWNvbmRzKEopTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c1dlZWtzKEopTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c1llYXJzKEopTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3coKUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KExqYXZhL3RpbWUvQ2xvY2s7KUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KExqYXZhL3RpbWUvWm9uZUlkOylMamF2YS90aW1lL09mZnNldERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKElJSUlJSUlMamF2YS90aW1lL1pvbmVPZmZzZXQ7KUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoTGphdmEvdGltZS9Mb2NhbERhdGU7TGphdmEvdGltZS9Mb2NhbFRpbWU7TGphdmEvdGltZS9ab25lT2Zmc2V0OylMamF2YS90aW1lL09mZnNldERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTtMamF2YS90aW1lL1pvbmVPZmZzZXQ7KUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZJbnN0YW50KExqYXZhL3RpbWUvSW5zdGFudDtMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjspTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c0RheXMoSilMamF2YS90aW1lL09mZnNldERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNIb3VycyhKKUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c01pbnV0ZXMoSilMamF2YS90aW1lL09mZnNldERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNNb250aHMoSilMamF2YS90aW1lL09mZnNldERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNOYW5vcyhKKUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c1NlY29uZHMoSilMamF2YS90aW1lL09mZnNldERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNXZWVrcyhKKUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c1llYXJzKEopTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aW1lTGluZU9yZGVyKClMamF2YS91dGlsL0NvbXBhcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9FcG9jaFNlY29uZCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9InRvSW5zdGFudCgpTGphdmEvdGltZS9JbnN0YW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InRvTG9jYWxEYXRlKClMamF2YS90aW1lL0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0xvY2FsRGF0ZVRpbWUoKUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0xvY2FsVGltZSgpTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9PZmZzZXRUaW1lKClMamF2YS90aW1lL09mZnNldFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9ab25lZERhdGVUaW1lKClMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idHJ1bmNhdGVkVG8oTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXI7KUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7SilMamF2YS90aW1lL09mZnNldERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhEYXlPZk1vbnRoKEkpTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoRGF5T2ZZZWFyKEkpTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoSG91cihJKUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aE1pbnV0ZShJKUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aE1vbnRoKEkpTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoTmFubyhJKUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aE9mZnNldFNhbWVJbnN0YW50KExqYXZhL3RpbWUvWm9uZU9mZnNldDspTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoT2Zmc2V0U2FtZUxvY2FsKExqYXZhL3RpbWUvWm9uZU9mZnNldDspTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoU2Vjb25kKEkpTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoWWVhcihJKUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQVgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9PZmZzZXRUaW1lIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdGltZS9Mb2NhbFRpbWU7TGphdmEvdGltZS9ab25lT2Zmc2V0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdERhdGUoTGphdmEvdGltZS9Mb2NhbERhdGU7KUxqYXZhL3RpbWUvT2Zmc2V0RGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL3RpbWUvT2Zmc2V0VGltZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL3RpbWUvT2Zmc2V0VGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3VyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWludXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFubygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9mZnNldCgpTGphdmEvdGltZS9ab25lT2Zmc2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlY29uZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQWZ0ZXIoTGphdmEvdGltZS9PZmZzZXRUaW1lOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNCZWZvcmUoTGphdmEvdGltZS9PZmZzZXRUaW1lOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFcXVhbChMamF2YS90aW1lL09mZnNldFRpbWU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51cyhKTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KUxqYXZhL3RpbWUvT2Zmc2V0VGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51cyhMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQW1vdW50OylMamF2YS90aW1lL09mZnNldFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNIb3VycyhKKUxqYXZhL3RpbWUvT2Zmc2V0VGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c01pbnV0ZXMoSilMamF2YS90aW1lL09mZnNldFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNOYW5vcyhKKUxqYXZhL3RpbWUvT2Zmc2V0VGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c1NlY29uZHMoSilMamF2YS90aW1lL09mZnNldFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KClMamF2YS90aW1lL09mZnNldFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KExqYXZhL3RpbWUvQ2xvY2s7KUxqYXZhL3RpbWUvT2Zmc2V0VGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3coTGphdmEvdGltZS9ab25lSWQ7KUxqYXZhL3RpbWUvT2Zmc2V0VGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJSUlJTGphdmEvdGltZS9ab25lT2Zmc2V0OylMamF2YS90aW1lL09mZnNldFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoTGphdmEvdGltZS9Mb2NhbFRpbWU7TGphdmEvdGltZS9ab25lT2Zmc2V0OylMamF2YS90aW1lL09mZnNldFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZJbnN0YW50KExqYXZhL3RpbWUvSW5zdGFudDtMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9PZmZzZXRUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS90aW1lL09mZnNldFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXI7KUxqYXZhL3RpbWUvT2Zmc2V0VGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9PZmZzZXRUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXMoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudDspTGphdmEvdGltZS9PZmZzZXRUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNIb3VycyhKKUxqYXZhL3RpbWUvT2Zmc2V0VGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzTWludXRlcyhKKUxqYXZhL3RpbWUvT2Zmc2V0VGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzTmFub3MoSilMamF2YS90aW1lL09mZnNldFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c1NlY29uZHMoSilMamF2YS90aW1lL09mZnNldFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9Mb2NhbFRpbWUoKUxqYXZhL3RpbWUvTG9jYWxUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InRydW5jYXRlZFRvKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL09mZnNldFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXI7KUxqYXZhL3RpbWUvT2Zmc2V0VGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxGaWVsZDtKKUxqYXZhL3RpbWUvT2Zmc2V0VGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoSG91cihJKUxqYXZhL3RpbWUvT2Zmc2V0VGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoTWludXRlKEkpTGphdmEvdGltZS9PZmZzZXRUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhOYW5vKEkpTGphdmEvdGltZS9PZmZzZXRUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhPZmZzZXRTYW1lSW5zdGFudChMamF2YS90aW1lL1pvbmVPZmZzZXQ7KUxqYXZhL3RpbWUvT2Zmc2V0VGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoT2Zmc2V0U2FtZUxvY2FsKExqYXZhL3RpbWUvWm9uZU9mZnNldDspTGphdmEvdGltZS9PZmZzZXRUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhTZWNvbmQoSSlMamF2YS90aW1lL09mZnNldFRpbWU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQVgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9QZXJpb2QiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL2Nocm9uby9DaHJvbm9QZXJpb2QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSSlWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiZXR3ZWVuKExqYXZhL3RpbWUvTG9jYWxEYXRlO0xqYXZhL3RpbWUvTG9jYWxEYXRlOylMamF2YS90aW1lL1BlcmlvZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvUGVyaW9kOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENocm9ub2xvZ3koKUxqYXZhL3RpbWUvY2hyb25vL0lzb0Nocm9ub2xvZ3k7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF5cygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vbnRocygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFllYXJzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudDspTGphdmEvdGltZS9QZXJpb2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNEYXlzKEopTGphdmEvdGltZS9QZXJpb2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNNb250aHMoSilMamF2YS90aW1lL1BlcmlvZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c1llYXJzKEopTGphdmEvdGltZS9QZXJpb2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibXVsdGlwbGllZEJ5KEkpTGphdmEvdGltZS9QZXJpb2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmVnYXRlZCgpTGphdmEvdGltZS9QZXJpb2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm9ybWFsaXplZCgpTGphdmEvdGltZS9QZXJpb2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoSUlJKUxqYXZhL3RpbWUvUGVyaW9kOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mRGF5cyhJKUxqYXZhL3RpbWUvUGVyaW9kOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mTW9udGhzKEkpTGphdmEvdGltZS9QZXJpb2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZXZWVrcyhJKUxqYXZhL3RpbWUvUGVyaW9kOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mWWVhcnMoSSlMamF2YS90aW1lL1BlcmlvZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvdGltZS9QZXJpb2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1cyhMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQW1vdW50OylMamF2YS90aW1lL1BlcmlvZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzRGF5cyhKKUxqYXZhL3RpbWUvUGVyaW9kOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNNb250aHMoSilMamF2YS90aW1lL1BlcmlvZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzWWVhcnMoSilMamF2YS90aW1lL1BlcmlvZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1RvdGFsTW9udGhzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aERheXMoSSlMamF2YS90aW1lL1BlcmlvZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoTW9udGhzKEkpTGphdmEvdGltZS9QZXJpb2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aFllYXJzKEkpTGphdmEvdGltZS9QZXJpb2Q7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJaRVJPIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL1llYXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImF0RGF5KEkpTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXRNb250aChJKUxqYXZhL3RpbWUvWWVhck1vbnRoOyIvPgotCQk8bWV0aG9kIG5hbWU9ImF0TW9udGgoTGphdmEvdGltZS9Nb250aDspTGphdmEvdGltZS9ZZWFyTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXRNb250aERheShMamF2YS90aW1lL01vbnRoRGF5OylMamF2YS90aW1lL0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGphdmEvdGltZS9ZZWFyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspTGphdmEvdGltZS9ZZWFyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbHVlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBZnRlcihMamF2YS90aW1lL1llYXI7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JlZm9yZShMamF2YS90aW1lL1llYXI7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xlYXAoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xlYXAoSilaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYWxpZE1vbnRoRGF5KExqYXZhL3RpbWUvTW9udGhEYXk7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51cyhKTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KUxqYXZhL3RpbWUvWWVhcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51cyhMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQW1vdW50OylMamF2YS90aW1lL1llYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNZZWFycyhKKUxqYXZhL3RpbWUvWWVhcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3coKUxqYXZhL3RpbWUvWWVhcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3coTGphdmEvdGltZS9DbG9jazspTGphdmEvdGltZS9ZZWFyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdyhMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9ZZWFyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKEkpTGphdmEvdGltZS9ZZWFyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS90aW1lL1llYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXI7KUxqYXZhL3RpbWUvWWVhcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9ZZWFyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXMoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudDspTGphdmEvdGltZS9ZZWFyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNZZWFycyhKKUxqYXZhL3RpbWUvWWVhcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlcjspTGphdmEvdGltZS9ZZWFyOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkO0opTGphdmEvdGltZS9ZZWFyOyIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5fVkFMVUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvWWVhck1vbnRoIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXREYXkoSSlMamF2YS90aW1lL0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdEVuZE9mTW9udGgoKUxqYXZhL3RpbWUvTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS90aW1lL1llYXJNb250aDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL3RpbWUvWWVhck1vbnRoOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vbnRoKClMamF2YS90aW1lL01vbnRoOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1vbnRoVmFsdWUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRZZWFyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBZnRlcihMamF2YS90aW1lL1llYXJNb250aDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQmVmb3JlKExqYXZhL3RpbWUvWWVhck1vbnRoOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMZWFwWWVhcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmFsaWREYXkoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGVuZ3RoT2ZNb250aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imxlbmd0aE9mWWVhcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9ZZWFyTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudDspTGphdmEvdGltZS9ZZWFyTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXNNb250aHMoSilMamF2YS90aW1lL1llYXJNb250aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c1llYXJzKEopTGphdmEvdGltZS9ZZWFyTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KClMamF2YS90aW1lL1llYXJNb250aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3coTGphdmEvdGltZS9DbG9jazspTGphdmEvdGltZS9ZZWFyTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KExqYXZhL3RpbWUvWm9uZUlkOylMamF2YS90aW1lL1llYXJNb250aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJSSlMamF2YS90aW1lL1llYXJNb250aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJTGphdmEvdGltZS9Nb250aDspTGphdmEvdGltZS9ZZWFyTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL3RpbWUvWWVhck1vbnRoOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyOylMamF2YS90aW1lL1llYXJNb250aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9ZZWFyTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1cyhMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQW1vdW50OylMamF2YS90aW1lL1llYXJNb250aDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzTW9udGhzKEopTGphdmEvdGltZS9ZZWFyTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c1llYXJzKEopTGphdmEvdGltZS9ZZWFyTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXI7KUxqYXZhL3RpbWUvWWVhck1vbnRoOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkO0opTGphdmEvdGltZS9ZZWFyTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aE1vbnRoKEkpTGphdmEvdGltZS9ZZWFyTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aFllYXIoSSlMamF2YS90aW1lL1llYXJNb250aDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvWm9uZUlkIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL3RpbWUvWm9uZUlkOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZVpvbmVJZHMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKExqYXZhL3RpbWUvZm9ybWF0L1RleHRTdHlsZTtMamF2YS91dGlsL0xvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJ1bGVzKClMamF2YS90aW1lL3pvbmUvWm9uZVJ1bGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vcm1hbGl6ZWQoKUxqYXZhL3RpbWUvWm9uZUlkOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS90aW1lL1pvbmVJZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL01hcDspTGphdmEvdGltZS9ab25lSWQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZPZmZzZXQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdGltZS9ab25lT2Zmc2V0OylMamF2YS90aW1lL1pvbmVJZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzeXN0ZW1EZWZhdWx0KClMamF2YS90aW1lL1pvbmVJZDsiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUX0lEUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9ab25lT2Zmc2V0IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3RpbWUvWm9uZUlkIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVUbyhMamF2YS90aW1lL1pvbmVPZmZzZXQ7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspTGphdmEvdGltZS9ab25lT2Zmc2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdGFsU2Vjb25kcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS90aW1lL1pvbmVPZmZzZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZIb3VycyhJKUxqYXZhL3RpbWUvWm9uZU9mZnNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkhvdXJzTWludXRlcyhJSSlMamF2YS90aW1lL1pvbmVPZmZzZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZIb3Vyc01pbnV0ZXNTZWNvbmRzKElJSSlMamF2YS90aW1lL1pvbmVPZmZzZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZUb3RhbFNlY29uZHMoSSlMamF2YS90aW1lL1pvbmVPZmZzZXQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQVgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTiIvPgotCQk8ZmllbGQgbmFtZT0iVVRDIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL1pvbmVkRGF0ZVRpbWUiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL2Nocm9uby9DaHJvbm9ab25lZERhdGVUaW1lIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lO0xqYXZhL3RpbWUvWm9uZU9mZnNldDtMamF2YS90aW1lL1pvbmVJZDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXlPZk1vbnRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF5T2ZXZWVrKClMamF2YS90aW1lL0RheU9mV2VlazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXlPZlllYXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3VyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWludXRlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9udGgoKUxqYXZhL3RpbWUvTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9udGhWYWx1ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbm8oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZWNvbmQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRZZWFyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoSkxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudDspTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzRGF5cyhKKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c0hvdXJzKEopTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzTWludXRlcyhKKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c01vbnRocyhKKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c05hbm9zKEopTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzU2Vjb25kcyhKKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51c1dlZWtzKEopTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzWWVhcnMoSilMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KClMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KExqYXZhL3RpbWUvQ2xvY2s7KUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3coTGphdmEvdGltZS9ab25lSWQ7KUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJSUlJSUlJTGphdmEvdGltZS9ab25lSWQ7KUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihMamF2YS90aW1lL0xvY2FsRGF0ZTtMamF2YS90aW1lL0xvY2FsVGltZTtMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTtMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mSW5zdGFudChMamF2YS90aW1lL0luc3RhbnQ7TGphdmEvdGltZS9ab25lSWQ7KUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkluc3RhbnQoTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lO0xqYXZhL3RpbWUvWm9uZU9mZnNldDtMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mTG9jYWwoTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lO0xqYXZhL3RpbWUvWm9uZUlkO0xqYXZhL3RpbWUvWm9uZU9mZnNldDspTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mU3RyaWN0KExqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTtMamF2YS90aW1lL1pvbmVPZmZzZXQ7TGphdmEvdGltZS9ab25lSWQ7KUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyOylMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1cyhKTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzRGF5cyhKKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzSG91cnMoSilMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c01pbnV0ZXMoSilMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c01vbnRocyhKKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzTmFub3MoSilMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c1NlY29uZHMoSilMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1c1dlZWtzKEopTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXNZZWFycyhKKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0xvY2FsRGF0ZSgpTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9Mb2NhbERhdGVUaW1lKClMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9PZmZzZXREYXRlVGltZSgpTGphdmEvdGltZS9PZmZzZXREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnVuY2F0ZWRUbyhMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyOylMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7SilMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aERheU9mTW9udGgoSSlMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aERheU9mWWVhcihJKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoRWFybGllck9mZnNldEF0T3ZlcmxhcCgpTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhGaXhlZE9mZnNldFpvbmUoKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoSG91cihJKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoTGF0ZXJPZmZzZXRBdE92ZXJsYXAoKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoTWludXRlKEkpTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhNb250aChJKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoTmFubyhJKUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoU2Vjb25kKEkpTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhZZWFyKEkpTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhab25lU2FtZUluc3RhbnQoTGphdmEvdGltZS9ab25lSWQ7KUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoWm9uZVNhbWVMb2NhbChMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9jaHJvbm8vQWJzdHJhY3RDaHJvbm9sb2d5IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS9jaHJvbm8vQ2hyb25vbG9neSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlciIvPgotCQk8bWV0aG9kIG5hbWU9ImF0VGltZShMamF2YS90aW1lL0xvY2FsVGltZTspTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENocm9ub2xvZ3koKUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub2xvZ3k7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXJhKClMamF2YS90aW1lL2Nocm9uby9FcmE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBZnRlcihMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JlZm9yZShMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VxdWFsKExqYXZhL3RpbWUvY2hyb25vL0Nocm9ub0xvY2FsRGF0ZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTGVhcFllYXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsZW5ndGhPZk1vbnRoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGVuZ3RoT2ZZZWFyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoSkxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudDspTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXMoSkxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1cyhMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQW1vdW50OylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGltZUxpbmVPcmRlcigpTGphdmEvdXRpbC9Db21wYXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvRXBvY2hEYXkoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnRpbChMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGU7KUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub1BlcmlvZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlcjspTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkO0opTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlSW1wbCIgc2luY2U9IjI2IiByZW1vdmVkPSIyOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGVUaW1lIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlciIvPgotCQk8bWV0aG9kIG5hbWU9ImF0Wm9uZShMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlVGltZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hyb25vbG9neSgpTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vbG9neTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FmdGVyKExqYXZhL3RpbWUvY2hyb25vL0Nocm9ub0xvY2FsRGF0ZVRpbWU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JlZm9yZShMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGVUaW1lOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFcXVhbChMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGVUaW1lOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoSkxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1cyhKTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1cyhMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQW1vdW50OylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InRpbWVMaW5lT3JkZXIoKUxqYXZhL3V0aWwvQ29tcGFyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0Vwb2NoU2Vjb25kKExqYXZhL3RpbWUvWm9uZU9mZnNldDspSiIvPgotCQk8bWV0aG9kIG5hbWU9InRvSW5zdGFudChMamF2YS90aW1lL1pvbmVPZmZzZXQ7KUxqYXZhL3RpbWUvSW5zdGFudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0xvY2FsRGF0ZSgpTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvTG9jYWxUaW1lKClMamF2YS90aW1lL0xvY2FsVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlcjspTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxGaWVsZDtKKUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Nocm9uby9DaHJvbm9QZXJpb2QiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQW1vdW50Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmV0d2VlbihMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGU7TGphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlOylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9QZXJpb2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hyb25vbG9neSgpTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vbG9neTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05lZ2F0aXZlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNaZXJvKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudDspTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vUGVyaW9kOyIvPgotCQk8bWV0aG9kIG5hbWU9Im11bHRpcGxpZWRCeShJKUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub1BlcmlvZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZWdhdGVkKClMamF2YS90aW1lL2Nocm9uby9DaHJvbm9QZXJpb2Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm9ybWFsaXplZCgpTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vUGVyaW9kOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXMoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudDspTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vUGVyaW9kOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9jaHJvbm8vQ2hyb25vWm9uZWREYXRlVGltZSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ29tcGFyYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWwiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vWm9uZWREYXRlVGltZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hyb25vbG9neSgpTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vbG9neTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPZmZzZXQoKUxqYXZhL3RpbWUvWm9uZU9mZnNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRab25lKClMamF2YS90aW1lL1pvbmVJZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0FmdGVyKExqYXZhL3RpbWUvY2hyb25vL0Nocm9ub1pvbmVkRGF0ZVRpbWU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0JlZm9yZShMamF2YS90aW1lL2Nocm9uby9DaHJvbm9ab25lZERhdGVUaW1lOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFcXVhbChMamF2YS90aW1lL2Nocm9uby9DaHJvbm9ab25lZERhdGVUaW1lOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoSkxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1cyhKTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1cyhMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQW1vdW50OylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InRpbWVMaW5lT3JkZXIoKUxqYXZhL3V0aWwvQ29tcGFyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0Vwb2NoU2Vjb25kKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9JbnN0YW50KClMamF2YS90aW1lL0luc3RhbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9Mb2NhbERhdGUoKUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0xvY2FsRGF0ZVRpbWUoKUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub0xvY2FsRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9Mb2NhbFRpbWUoKUxqYXZhL3RpbWUvTG9jYWxUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyOylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9ab25lZERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkO0opTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoRWFybGllck9mZnNldEF0T3ZlcmxhcCgpTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoTGF0ZXJPZmZzZXRBdE92ZXJsYXAoKUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aFpvbmVTYW1lSW5zdGFudChMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vWm9uZWREYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoWm9uZVNhbWVMb2NhbChMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vWm9uZWREYXRlVGltZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvY2hyb25vL0Nocm9ub2xvZ3kiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vbG9neTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGUoSUlJKUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlKExqYXZhL3RpbWUvY2hyb25vL0VyYTtJSUkpTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGUoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yOylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZUVwb2NoRGF5KEopTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGVOb3coKUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlTm93KExqYXZhL3RpbWUvQ2xvY2s7KUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlTm93KExqYXZhL3RpbWUvWm9uZUlkOylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZVllYXJEYXkoSUkpTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGVZZWFyRGF5KExqYXZhL3RpbWUvY2hyb25vL0VyYTtJSSlMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXJhT2YoSSlMamF2YS90aW1lL2Nocm9uby9FcmE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXJhcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb20oTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yOylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9sb2d5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUNocm9ub2xvZ2llcygpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FsZW5kYXJUeXBlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TmFtZShMamF2YS90aW1lL2Zvcm1hdC9UZXh0U3R5bGU7TGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xlYXBZZWFyKEopWiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvY2FsRGF0ZVRpbWUoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yOylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9sb2d5OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mTG9jYWxlKExqYXZhL3V0aWwvTG9jYWxlOylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9sb2d5OyIvPgotCQk8bWV0aG9kIG5hbWU9InBlcmlvZChJSUkpTGphdmEvdGltZS9jaHJvbm8vQ2hyb25vUGVyaW9kOyIvPgotCQk8bWV0aG9kIG5hbWU9InByb2xlcHRpY1llYXIoTGphdmEvdGltZS9jaHJvbm8vRXJhO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJhbmdlKExqYXZhL3RpbWUvdGVtcG9yYWwvQ2hyb25vRmllbGQ7KUxqYXZhL3RpbWUvdGVtcG9yYWwvVmFsdWVSYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlRGF0ZShMamF2YS91dGlsL01hcDtMamF2YS90aW1lL2Zvcm1hdC9SZXNvbHZlclN0eWxlOylMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iem9uZWREYXRlVGltZShMamF2YS90aW1lL0luc3RhbnQ7TGphdmEvdGltZS9ab25lSWQ7KUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iem9uZWREYXRlVGltZShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL3RpbWUvY2hyb25vL0Nocm9ub1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Nocm9uby9FcmEiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3IiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TmFtZShMamF2YS90aW1lL2Zvcm1hdC9UZXh0U3R5bGU7TGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbHVlKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Nocm9uby9IaWpyYWhDaHJvbm9sb2d5IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3RpbWUvY2hyb25vL0Fic3RyYWN0Q2hyb25vbG9neSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGUoSUlJKUxqYXZhL3RpbWUvY2hyb25vL0hpanJhaERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZShMamF2YS90aW1lL2Nocm9uby9FcmE7SUlJKUxqYXZhL3RpbWUvY2hyb25vL0hpanJhaERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL3RpbWUvY2hyb25vL0hpanJhaERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZUVwb2NoRGF5KEopTGphdmEvdGltZS9jaHJvbm8vSGlqcmFoRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlTm93KClMamF2YS90aW1lL2Nocm9uby9IaWpyYWhEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGVOb3coTGphdmEvdGltZS9DbG9jazspTGphdmEvdGltZS9jaHJvbm8vSGlqcmFoRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlTm93KExqYXZhL3RpbWUvWm9uZUlkOylMamF2YS90aW1lL2Nocm9uby9IaWpyYWhEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGVZZWFyRGF5KElJKUxqYXZhL3RpbWUvY2hyb25vL0hpanJhaERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZVllYXJEYXkoTGphdmEvdGltZS9jaHJvbm8vRXJhO0lJKUxqYXZhL3RpbWUvY2hyb25vL0hpanJhaERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXJhT2YoSSlMamF2YS90aW1lL2Nocm9uby9IaWpyYWhFcmE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZURhdGUoTGphdmEvdXRpbC9NYXA7TGphdmEvdGltZS9mb3JtYXQvUmVzb2x2ZXJTdHlsZTspTGphdmEvdGltZS9jaHJvbm8vSGlqcmFoRGF0ZTsiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTkNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Nocm9uby9IaWpyYWhEYXRlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiBzaW5jZT0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGVJbXBsIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdGltZS9jaHJvbm8vSGlqcmFoQ2hyb25vbG9neTtKKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb20oTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yOylMamF2YS90aW1lL2Nocm9uby9IaWpyYWhEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENocm9ub2xvZ3koKUxqYXZhL3RpbWUvY2hyb25vL0hpanJhaENocm9ub2xvZ3k7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXJhKClMamF2YS90aW1lL2Nocm9uby9IaWpyYWhFcmE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoSkxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL2Nocm9uby9IaWpyYWhEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvY2hyb25vL0hpanJhaERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KClMamF2YS90aW1lL2Nocm9uby9IaWpyYWhEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdyhMamF2YS90aW1lL0Nsb2NrOylMamF2YS90aW1lL2Nocm9uby9IaWpyYWhEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdyhMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9jaHJvbm8vSGlqcmFoRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJSUkpTGphdmEvdGltZS9jaHJvbm8vSGlqcmFoRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9jaHJvbm8vSGlqcmFoRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvY2hyb25vL0hpanJhaERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXI7KUxqYXZhL3RpbWUvY2hyb25vL0hpanJhaERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7SilMamF2YS90aW1lL2Nocm9uby9IaWpyYWhEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhWYXJpYW50KExqYXZhL3RpbWUvY2hyb25vL0hpanJhaENocm9ub2xvZ3k7KUxqYXZhL3RpbWUvY2hyb25vL0hpanJhaERhdGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Nocm9uby9IaWpyYWhFcmEiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS9jaHJvbm8vRXJhIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoSSlMamF2YS90aW1lL2Nocm9uby9IaWpyYWhFcmE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdGltZS9jaHJvbm8vSGlqcmFoRXJhOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL3RpbWUvY2hyb25vL0hpanJhaEVyYTsiLz4KLQkJPGZpZWxkIG5hbWU9IkFIIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Nocm9uby9Jc29DaHJvbm9sb2d5IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3RpbWUvY2hyb25vL0Fic3RyYWN0Q2hyb25vbG9neSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGUoSUlJKUxqYXZhL3RpbWUvTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGUoTGphdmEvdGltZS9jaHJvbm8vRXJhO0lJSSlMamF2YS90aW1lL0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZUVwb2NoRGF5KEopTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZU5vdygpTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZU5vdyhMamF2YS90aW1lL0Nsb2NrOylMamF2YS90aW1lL0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlTm93KExqYXZhL3RpbWUvWm9uZUlkOylMamF2YS90aW1lL0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlWWVhckRheShJSSlMamF2YS90aW1lL0xvY2FsRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlWWVhckRheShMamF2YS90aW1lL2Nocm9uby9FcmE7SUkpTGphdmEvdGltZS9Mb2NhbERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXJhT2YoSSlMamF2YS90aW1lL2Nocm9uby9Jc29FcmE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9jYWxEYXRlVGltZShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZXJpb2QoSUlJKUxqYXZhL3RpbWUvUGVyaW9kOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmVEYXRlKExqYXZhL3V0aWwvTWFwO0xqYXZhL3RpbWUvZm9ybWF0L1Jlc29sdmVyU3R5bGU7KUxqYXZhL3RpbWUvTG9jYWxEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InpvbmVkRGF0ZVRpbWUoTGphdmEvdGltZS9JbnN0YW50O0xqYXZhL3RpbWUvWm9uZUlkOylMamF2YS90aW1lL1pvbmVkRGF0ZVRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iem9uZWREYXRlVGltZShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL3RpbWUvWm9uZWREYXRlVGltZTsiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTkNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Nocm9uby9Jc29FcmEiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS9jaHJvbm8vRXJhIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoSSlMamF2YS90aW1lL2Nocm9uby9Jc29FcmE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdGltZS9jaHJvbm8vSXNvRXJhOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL3RpbWUvY2hyb25vL0lzb0VyYTsiLz4KLQkJPGZpZWxkIG5hbWU9IkJDRSIvPgotCQk8ZmllbGQgbmFtZT0iQ0UiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvY2hyb25vL0phcGFuZXNlQ2hyb25vbG9neSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS90aW1lL2Nocm9uby9BYnN0cmFjdENocm9ub2xvZ3kiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlKElJSSlMamF2YS90aW1lL2Nocm9uby9KYXBhbmVzZURhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZShMamF2YS90aW1lL2Nocm9uby9FcmE7SUlJKUxqYXZhL3RpbWUvY2hyb25vL0phcGFuZXNlRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspTGphdmEvdGltZS9jaHJvbm8vSmFwYW5lc2VEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGVFcG9jaERheShKKUxqYXZhL3RpbWUvY2hyb25vL0phcGFuZXNlRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlTm93KClMamF2YS90aW1lL2Nocm9uby9KYXBhbmVzZURhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZU5vdyhMamF2YS90aW1lL0Nsb2NrOylMamF2YS90aW1lL2Nocm9uby9KYXBhbmVzZURhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZU5vdyhMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9jaHJvbm8vSmFwYW5lc2VEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGVZZWFyRGF5KElJKUxqYXZhL3RpbWUvY2hyb25vL0phcGFuZXNlRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlWWVhckRheShMamF2YS90aW1lL2Nocm9uby9FcmE7SUkpTGphdmEvdGltZS9jaHJvbm8vSmFwYW5lc2VEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVyYU9mKEkpTGphdmEvdGltZS9jaHJvbm8vSmFwYW5lc2VFcmE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZURhdGUoTGphdmEvdXRpbC9NYXA7TGphdmEvdGltZS9mb3JtYXQvUmVzb2x2ZXJTdHlsZTspTGphdmEvdGltZS9jaHJvbm8vSmFwYW5lc2VEYXRlOyIvPgotCQk8ZmllbGQgbmFtZT0iSU5TVEFOQ0UiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvY2hyb25vL0phcGFuZXNlRGF0ZSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgc2luY2U9IjI5Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlSW1wbCIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3RpbWUvTG9jYWxEYXRlOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspTGphdmEvdGltZS9jaHJvbm8vSmFwYW5lc2VEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENocm9ub2xvZ3koKUxqYXZhL3RpbWUvY2hyb25vL0phcGFuZXNlQ2hyb25vbG9neTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcmEoKUxqYXZhL3RpbWUvY2hyb25vL0phcGFuZXNlRXJhOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9jaHJvbm8vSmFwYW5lc2VEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvY2hyb25vL0phcGFuZXNlRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3coKUxqYXZhL3RpbWUvY2hyb25vL0phcGFuZXNlRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3coTGphdmEvdGltZS9DbG9jazspTGphdmEvdGltZS9jaHJvbm8vSmFwYW5lc2VEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdyhMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9jaHJvbm8vSmFwYW5lc2VEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKElJSSlMamF2YS90aW1lL2Nocm9uby9KYXBhbmVzZURhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoTGphdmEvdGltZS9jaHJvbm8vSmFwYW5lc2VFcmE7SUlJKUxqYXZhL3RpbWUvY2hyb25vL0phcGFuZXNlRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9jaHJvbm8vSmFwYW5lc2VEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InBsdXMoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudDspTGphdmEvdGltZS9jaHJvbm8vSmFwYW5lc2VEYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyOylMamF2YS90aW1lL2Nocm9uby9KYXBhbmVzZURhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7SilMamF2YS90aW1lL2Nocm9uby9KYXBhbmVzZURhdGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Nocm9uby9KYXBhbmVzZUVyYSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RpbWUvY2hyb25vL0VyYSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL3RpbWUvTG9jYWxEYXRlOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJKUxqYXZhL3RpbWUvY2hyb25vL0phcGFuZXNlRXJhOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3RpbWUvY2hyb25vL0phcGFuZXNlRXJhOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL3RpbWUvY2hyb25vL0phcGFuZXNlRXJhOyIvPgotCQk8ZmllbGQgbmFtZT0iSEVJU0VJIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRUlKSSIvPgotCQk8ZmllbGQgbmFtZT0iU0hPV0EiLz4KLQkJPGZpZWxkIG5hbWU9IlRBSVNITyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9jaHJvbm8vTWluZ3VvQ2hyb25vbG9neSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS90aW1lL2Nocm9uby9BYnN0cmFjdENocm9ub2xvZ3kiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlKElJSSlMamF2YS90aW1lL2Nocm9uby9NaW5ndW9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGUoTGphdmEvdGltZS9jaHJvbm8vRXJhO0lJSSlMamF2YS90aW1lL2Nocm9uby9NaW5ndW9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGUoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yOylMamF2YS90aW1lL2Nocm9uby9NaW5ndW9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGVFcG9jaERheShKKUxqYXZhL3RpbWUvY2hyb25vL01pbmd1b0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZU5vdygpTGphdmEvdGltZS9jaHJvbm8vTWluZ3VvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlTm93KExqYXZhL3RpbWUvQ2xvY2s7KUxqYXZhL3RpbWUvY2hyb25vL01pbmd1b0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZU5vdyhMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9jaHJvbm8vTWluZ3VvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlWWVhckRheShJSSlMamF2YS90aW1lL2Nocm9uby9NaW5ndW9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGVZZWFyRGF5KExqYXZhL3RpbWUvY2hyb25vL0VyYTtJSSlMamF2YS90aW1lL2Nocm9uby9NaW5ndW9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVyYU9mKEkpTGphdmEvdGltZS9jaHJvbm8vTWluZ3VvRXJhOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmVEYXRlKExqYXZhL3V0aWwvTWFwO0xqYXZhL3RpbWUvZm9ybWF0L1Jlc29sdmVyU3R5bGU7KUxqYXZhL3RpbWUvY2hyb25vL01pbmd1b0RhdGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTlNUQU5DRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9jaHJvbm8vTWluZ3VvRGF0ZSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgc2luY2U9IjI5Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdGltZS9jaHJvbm8vQ2hyb25vTG9jYWxEYXRlSW1wbCIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3RpbWUvTG9jYWxEYXRlOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspTGphdmEvdGltZS9jaHJvbm8vTWluZ3VvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaHJvbm9sb2d5KClMamF2YS90aW1lL2Nocm9uby9NaW5ndW9DaHJvbm9sb2d5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVyYSgpTGphdmEvdGltZS9jaHJvbm8vTWluZ3VvRXJhOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9jaHJvbm8vTWluZ3VvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51cyhMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQW1vdW50OylMamF2YS90aW1lL2Nocm9uby9NaW5ndW9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdygpTGphdmEvdGltZS9jaHJvbm8vTWluZ3VvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3coTGphdmEvdGltZS9DbG9jazspTGphdmEvdGltZS9jaHJvbm8vTWluZ3VvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3coTGphdmEvdGltZS9ab25lSWQ7KUxqYXZhL3RpbWUvY2hyb25vL01pbmd1b0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoSUlJKUxqYXZhL3RpbWUvY2hyb25vL01pbmd1b0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1cyhKTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KUxqYXZhL3RpbWUvY2hyb25vL01pbmd1b0RhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGx1cyhMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQW1vdW50OylMamF2YS90aW1lL2Nocm9uby9NaW5ndW9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyOylMamF2YS90aW1lL2Nocm9uby9NaW5ndW9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkO0opTGphdmEvdGltZS9jaHJvbm8vTWluZ3VvRGF0ZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvY2hyb25vL01pbmd1b0VyYSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS90aW1lL2Nocm9uby9FcmEiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJKUxqYXZhL3RpbWUvY2hyb25vL01pbmd1b0VyYTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS90aW1lL2Nocm9uby9NaW5ndW9FcmE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGphdmEvdGltZS9jaHJvbm8vTWluZ3VvRXJhOyIvPgotCQk8ZmllbGQgbmFtZT0iQkVGT1JFX1JPQyIvPgotCQk8ZmllbGQgbmFtZT0iUk9DIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Nocm9uby9UaGFpQnVkZGhpc3RDaHJvbm9sb2d5IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3RpbWUvY2hyb25vL0Fic3RyYWN0Q2hyb25vbG9neSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGUoSUlJKUxqYXZhL3RpbWUvY2hyb25vL1RoYWlCdWRkaGlzdERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZShMamF2YS90aW1lL2Nocm9uby9FcmE7SUlJKUxqYXZhL3RpbWUvY2hyb25vL1RoYWlCdWRkaGlzdERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL3RpbWUvY2hyb25vL1RoYWlCdWRkaGlzdERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZUVwb2NoRGF5KEopTGphdmEvdGltZS9jaHJvbm8vVGhhaUJ1ZGRoaXN0RGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlTm93KClMamF2YS90aW1lL2Nocm9uby9UaGFpQnVkZGhpc3REYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGVOb3coTGphdmEvdGltZS9DbG9jazspTGphdmEvdGltZS9jaHJvbm8vVGhhaUJ1ZGRoaXN0RGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkYXRlTm93KExqYXZhL3RpbWUvWm9uZUlkOylMamF2YS90aW1lL2Nocm9uby9UaGFpQnVkZGhpc3REYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRhdGVZZWFyRGF5KElJKUxqYXZhL3RpbWUvY2hyb25vL1RoYWlCdWRkaGlzdERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF0ZVllYXJEYXkoTGphdmEvdGltZS9jaHJvbm8vRXJhO0lJKUxqYXZhL3RpbWUvY2hyb25vL1RoYWlCdWRkaGlzdERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXJhT2YoSSlMamF2YS90aW1lL2Nocm9uby9UaGFpQnVkZGhpc3RFcmE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZURhdGUoTGphdmEvdXRpbC9NYXA7TGphdmEvdGltZS9mb3JtYXQvUmVzb2x2ZXJTdHlsZTspTGphdmEvdGltZS9jaHJvbm8vVGhhaUJ1ZGRoaXN0RGF0ZTsiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTkNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Nocm9uby9UaGFpQnVkZGhpc3REYXRlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiBzaW5jZT0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGVJbXBsIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdGltZS9Mb2NhbERhdGU7KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb20oTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yOylMamF2YS90aW1lL2Nocm9uby9UaGFpQnVkZGhpc3REYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENocm9ub2xvZ3koKUxqYXZhL3RpbWUvY2hyb25vL1RoYWlCdWRkaGlzdENocm9ub2xvZ3k7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXJhKClMamF2YS90aW1lL2Nocm9uby9UaGFpQnVkZGhpc3RFcmE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoSkxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylMamF2YS90aW1lL2Nocm9uby9UaGFpQnVkZGhpc3REYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbnVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvY2hyb25vL1RoYWlCdWRkaGlzdERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm93KClMamF2YS90aW1lL2Nocm9uby9UaGFpQnVkZGhpc3REYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdyhMamF2YS90aW1lL0Nsb2NrOylMamF2YS90aW1lL2Nocm9uby9UaGFpQnVkZGhpc3REYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdyhMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdGltZS9jaHJvbm8vVGhhaUJ1ZGRoaXN0RGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJSUkpTGphdmEvdGltZS9jaHJvbm8vVGhhaUJ1ZGRoaXN0RGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS9jaHJvbm8vVGhhaUJ1ZGRoaXN0RGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvY2hyb25vL1RoYWlCdWRkaGlzdERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXI7KUxqYXZhL3RpbWUvY2hyb25vL1RoYWlCdWRkaGlzdERhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7SilMamF2YS90aW1lL2Nocm9uby9UaGFpQnVkZGhpc3REYXRlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9jaHJvbm8vVGhhaUJ1ZGRoaXN0RXJhIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RpbWUvY2hyb25vL0VyYSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKEkpTGphdmEvdGltZS9jaHJvbm8vVGhhaUJ1ZGRoaXN0RXJhOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3RpbWUvY2hyb25vL1RoYWlCdWRkaGlzdEVyYTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS90aW1lL2Nocm9uby9UaGFpQnVkZGhpc3RFcmE7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCRSIvPgotCQk8ZmllbGQgbmFtZT0iQkVGT1JFX0JFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdFRvKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjtMamF2YS9sYW5nL0FwcGVuZGFibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaHJvbm9sb2d5KClMamF2YS90aW1lL2Nocm9uby9DaHJvbm9sb2d5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2ltYWxTdHlsZSgpTGphdmEvdGltZS9mb3JtYXQvRGVjaW1hbFN0eWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsZSgpTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzb2x2ZXJGaWVsZHMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc29sdmVyU3R5bGUoKUxqYXZhL3RpbWUvZm9ybWF0L1Jlc29sdmVyU3R5bGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Wm9uZSgpTGphdmEvdGltZS9ab25lSWQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZMb2NhbGl6ZWREYXRlKExqYXZhL3RpbWUvZm9ybWF0L0Zvcm1hdFN0eWxlOylMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkxvY2FsaXplZERhdGVUaW1lKExqYXZhL3RpbWUvZm9ybWF0L0Zvcm1hdFN0eWxlOylMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkxvY2FsaXplZERhdGVUaW1lKExqYXZhL3RpbWUvZm9ybWF0L0Zvcm1hdFN0eWxlO0xqYXZhL3RpbWUvZm9ybWF0L0Zvcm1hdFN0eWxlOylMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZkxvY2FsaXplZFRpbWUoTGphdmEvdGltZS9mb3JtYXQvRm9ybWF0U3R5bGU7KUxqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mUGF0dGVybihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZQYXR0ZXJuKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTG9jYWxlOylMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL3RleHQvUGFyc2VQb3NpdGlvbjspTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0xqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxRdWVyeTspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VCZXN0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO1tMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsUXVlcnk7KUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZVVucmVzb2x2ZWQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvdGV4dC9QYXJzZVBvc2l0aW9uOylMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VkRXhjZXNzRGF5cygpTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFF1ZXJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlZExlYXBTZWNvbmQoKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxRdWVyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0Zvcm1hdCgpTGphdmEvdGV4dC9Gb3JtYXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9Gb3JtYXQoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFF1ZXJ5OylMamF2YS90ZXh0L0Zvcm1hdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoQ2hyb25vbG9neShMamF2YS90aW1lL2Nocm9uby9DaHJvbm9sb2d5OylMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoRGVjaW1hbFN0eWxlKExqYXZhL3RpbWUvZm9ybWF0L0RlY2ltYWxTdHlsZTspTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aExvY2FsZShMamF2YS91dGlsL0xvY2FsZTspTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aFJlc29sdmVyRmllbGRzKExqYXZhL3V0aWwvU2V0OylMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoUmVzb2x2ZXJGaWVsZHMoW0xqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxGaWVsZDspTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aFJlc29sdmVyU3R5bGUoTGphdmEvdGltZS9mb3JtYXQvUmVzb2x2ZXJTdHlsZTspTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aFpvbmUoTGphdmEvdGltZS9ab25lSWQ7KUxqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyOyIvPgotCQk8ZmllbGQgbmFtZT0iQkFTSUNfSVNPX0RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19EQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fREFURV9USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fSU5TVEFOVCIvPgotCQk8ZmllbGQgbmFtZT0iSVNPX0xPQ0FMX0RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19MT0NBTF9EQVRFX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19MT0NBTF9USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fT0ZGU0VUX0RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19PRkZTRVRfREFURV9USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fT0ZGU0VUX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19PUkRJTkFMX0RBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IklTT19USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fV0VFS19EQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJU09fWk9ORURfREFURV9USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRkNfMTEyM19EQVRFX1RJTUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyQnVpbGRlciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjspTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZENocm9ub2xvZ3lJZCgpTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZENocm9ub2xvZ3lUZXh0KExqYXZhL3RpbWUvZm9ybWF0L1RleHRTdHlsZTspTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZEZyYWN0aW9uKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxGaWVsZDtJSVopTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZEluc3RhbnQoKUxqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRJbnN0YW50KEkpTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZExpdGVyYWwoQylMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlckJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kTGl0ZXJhbChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZExvY2FsaXplZChMamF2YS90aW1lL2Zvcm1hdC9Gb3JtYXRTdHlsZTtMamF2YS90aW1lL2Zvcm1hdC9Gb3JtYXRTdHlsZTspTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZExvY2FsaXplZE9mZnNldChMamF2YS90aW1lL2Zvcm1hdC9UZXh0U3R5bGU7KUxqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRPZmZzZXQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRPZmZzZXRJZCgpTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZE9wdGlvbmFsKExqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyOylMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlckJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kUGF0dGVybihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZFRleHQoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkOylMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlckJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kVGV4dChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7TGphdmEvdGltZS9mb3JtYXQvVGV4dFN0eWxlOylMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlckJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kVGV4dChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7TGphdmEvdXRpbC9NYXA7KUxqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRWYWx1ZShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7KUxqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRWYWx1ZShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7SSlMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlckJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kVmFsdWUoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkO0lJTGphdmEvdGltZS9mb3JtYXQvU2lnblN0eWxlOylMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlckJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kVmFsdWVSZWR1Y2VkKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxGaWVsZDtJSUkpTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZFZhbHVlUmVkdWNlZChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7SUlMamF2YS90aW1lL2Nocm9uby9DaHJvbm9Mb2NhbERhdGU7KUxqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRab25lSWQoKUxqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRab25lT3JPZmZzZXRJZCgpTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZFpvbmVSZWdpb25JZCgpTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZFpvbmVUZXh0KExqYXZhL3RpbWUvZm9ybWF0L1RleHRTdHlsZTspTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZFpvbmVUZXh0KExqYXZhL3RpbWUvZm9ybWF0L1RleHRTdHlsZTtMamF2YS91dGlsL1NldDspTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsaXplZERhdGVUaW1lUGF0dGVybihMamF2YS90aW1lL2Zvcm1hdC9Gb3JtYXRTdHlsZTtMamF2YS90aW1lL2Zvcm1hdC9Gb3JtYXRTdHlsZTtMamF2YS90aW1lL2Nocm9uby9DaHJvbm9sb2d5O0xqYXZhL3V0aWwvTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcHRpb25hbEVuZCgpTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wdGlvbmFsU3RhcnQoKUxqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYWROZXh0KEkpTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhZE5leHQoSUMpTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlQ2FzZUluc2Vuc2l0aXZlKClMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlckJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VDYXNlU2Vuc2l0aXZlKClMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlckJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VEZWZhdWx0aW5nKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxGaWVsZDtKKUxqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZUxlbmllbnQoKUxqYXZhL3RpbWUvZm9ybWF0L0RhdGVUaW1lRm9ybWF0dGVyQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZVN0cmljdCgpTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXJCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvRm9ybWF0dGVyKClMamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZUZvcm1hdHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0Zvcm1hdHRlcihMamF2YS91dGlsL0xvY2FsZTspTGphdmEvdGltZS9mb3JtYXQvRGF0ZVRpbWVGb3JtYXR0ZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Zvcm1hdC9EYXRlVGltZVBhcnNlRXhjZXB0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3RpbWUvRGF0ZVRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0lMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVycm9ySW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJzZWRTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9mb3JtYXQvRGVjaW1hbFN0eWxlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihDQ0NDKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUxvY2FsZXMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2ltYWxTZXBhcmF0b3IoKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZWdhdGl2ZVNpZ24oKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3NpdGl2ZVNpZ24oKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRaZXJvRGlnaXQoKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihMamF2YS91dGlsL0xvY2FsZTspTGphdmEvdGltZS9mb3JtYXQvRGVjaW1hbFN0eWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mRGVmYXVsdExvY2FsZSgpTGphdmEvdGltZS9mb3JtYXQvRGVjaW1hbFN0eWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhEZWNpbWFsU2VwYXJhdG9yKEMpTGphdmEvdGltZS9mb3JtYXQvRGVjaW1hbFN0eWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGhOZWdhdGl2ZVNpZ24oQylMamF2YS90aW1lL2Zvcm1hdC9EZWNpbWFsU3R5bGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2l0aFBvc2l0aXZlU2lnbihDKUxqYXZhL3RpbWUvZm9ybWF0L0RlY2ltYWxTdHlsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRoWmVyb0RpZ2l0KEMpTGphdmEvdGltZS9mb3JtYXQvRGVjaW1hbFN0eWxlOyIvPgotCQk8ZmllbGQgbmFtZT0iU1RBTkRBUkQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvZm9ybWF0L0Zvcm1hdFN0eWxlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3RpbWUvZm9ybWF0L0Zvcm1hdFN0eWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL3RpbWUvZm9ybWF0L0Zvcm1hdFN0eWxlOyIvPgotCQk8ZmllbGQgbmFtZT0iRlVMTCIvPgotCQk8ZmllbGQgbmFtZT0iTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iTUVESVVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJTSE9SVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9mb3JtYXQvUmVzb2x2ZXJTdHlsZSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS90aW1lL2Zvcm1hdC9SZXNvbHZlclN0eWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL3RpbWUvZm9ybWF0L1Jlc29sdmVyU3R5bGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMRU5JRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTTUFSVCIvPgotCQk8ZmllbGQgbmFtZT0iU1RSSUNUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL2Zvcm1hdC9TaWduU3R5bGUiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdGltZS9mb3JtYXQvU2lnblN0eWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL3RpbWUvZm9ybWF0L1NpZ25TdHlsZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkFMV0FZUyIvPgotCQk8ZmllbGQgbmFtZT0iRVhDRUVEU19QQUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5FVkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1JNQUwiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PVF9ORUdBVElWRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS9mb3JtYXQvVGV4dFN0eWxlIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9ImFzTm9ybWFsKClMamF2YS90aW1lL2Zvcm1hdC9UZXh0U3R5bGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXNTdGFuZGFsb25lKClMamF2YS90aW1lL2Zvcm1hdC9UZXh0U3R5bGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTdGFuZGFsb25lKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdGltZS9mb3JtYXQvVGV4dFN0eWxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL3RpbWUvZm9ybWF0L1RleHRTdHlsZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkZVTEwiLz4KLQkJPGZpZWxkIG5hbWU9IkZVTExfU1RBTkRBTE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iTkFSUk9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQVJST1dfU1RBTkRBTE9ORSIvPgotCQk8ZmllbGQgbmFtZT0iU0hPUlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUX1NUQU5EQUxPTkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvQ2hyb25vRmllbGQiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tWYWxpZEludFZhbHVlKEopSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrVmFsaWRWYWx1ZShKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS90aW1lL3RlbXBvcmFsL0Nocm9ub0ZpZWxkOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL3RpbWUvdGVtcG9yYWwvQ2hyb25vRmllbGQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTElHTkVEX0RBWV9PRl9XRUVLX0lOX01PTlRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTElHTkVEX0RBWV9PRl9XRUVLX0lOX1lFQVIiLz4KLQkJPGZpZWxkIG5hbWU9IkFMSUdORURfV0VFS19PRl9NT05USCIvPgotCQk8ZmllbGQgbmFtZT0iQUxJR05FRF9XRUVLX09GX1lFQVIiLz4KLQkJPGZpZWxkIG5hbWU9IkFNUE1fT0ZfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTE9DS19IT1VSX09GX0FNUE0iLz4KLQkJPGZpZWxkIG5hbWU9IkNMT0NLX0hPVVJfT0ZfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVlfT0ZfTU9OVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkRBWV9PRl9XRUVLIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVlfT0ZfWUVBUiIvPgotCQk8ZmllbGQgbmFtZT0iRVBPQ0hfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJFUkEiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVVJfT0ZfQU1QTSIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUl9PRl9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTlRfU0VDT05EUyIvPgotCQk8ZmllbGQgbmFtZT0iTUlDUk9fT0ZfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUNST19PRl9TRUNPTkQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTExJX09GX0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iTUlMTElfT0ZfU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5VVEVfT0ZfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5VVEVfT0ZfSE9VUiIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEhfT0ZfWUVBUiIvPgotCQk8ZmllbGQgbmFtZT0iTkFOT19PRl9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTk9fT0ZfU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJPRkZTRVRfU0VDT05EUyIvPgotCQk8ZmllbGQgbmFtZT0iUFJPTEVQVElDX01PTlRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNPTkRfT0ZfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNPTkRfT0ZfTUlOVVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJZRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJZRUFSX09GX0VSQSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9DaHJvbm9Vbml0IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdGltZS90ZW1wb3JhbC9DaHJvbm9Vbml0OyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL3RpbWUvdGVtcG9yYWwvQ2hyb25vVW5pdDsiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlRVUklFUyIvPgotCQk8ZmllbGQgbmFtZT0iREFZUyIvPgotCQk8ZmllbGQgbmFtZT0iREVDQURFUyIvPgotCQk8ZmllbGQgbmFtZT0iRVJBUyIvPgotCQk8ZmllbGQgbmFtZT0iRk9SRVZFUiIvPgotCQk8ZmllbGQgbmFtZT0iSEFMRl9EQVlTIi8+Ci0JCTxmaWVsZCBuYW1lPSJIT1VSUyIvPgotCQk8ZmllbGQgbmFtZT0iTUlDUk9TIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSUxMRU5OSUEiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTExJUyIvPgotCQk8ZmllbGQgbmFtZT0iTUlOVVRFUyIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEhTIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQU5PUyIvPgotCQk8ZmllbGQgbmFtZT0iU0VDT05EUyIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS1MiLz4KLQkJPGZpZWxkIG5hbWU9IllFQVJTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL0lzb0ZpZWxkcyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iREFZX09GX1FVQVJURVIiLz4KLQkJPGZpZWxkIG5hbWU9IlFVQVJURVJfT0ZfWUVBUiIvPgotCQk8ZmllbGQgbmFtZT0iUVVBUlRFUl9ZRUFSUyIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS19CQVNFRF9ZRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUVLX0JBU0VEX1lFQVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUVLX09GX1dFRUtfQkFTRURfWUVBUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9KdWxpYW5GaWVsZHMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkpVTElBTl9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PRElGSUVEX0pVTElBTl9EQVkiLz4KLQkJPGZpZWxkIG5hbWU9IlJBVEFfRElFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTdXBwb3J0ZWQoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW51cyhKTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7KUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWludXMoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudDspTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwbHVzKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBbW91bnQ7KUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW50aWwoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbDtMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsVW5pdDspSiIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyOylMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsOyIvPgotCQk8bWV0aG9kIG5hbWU9IndpdGgoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkO0opTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvciIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxGaWVsZDspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3VwcG9ydGVkKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxGaWVsZDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InF1ZXJ5KExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxRdWVyeTspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmFuZ2UoTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkOylMamF2YS90aW1lL3RlbXBvcmFsL1ZhbHVlUmFuZ2U7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXIiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGp1c3RJbnRvKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWw7KUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWw7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXJzIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGF5T2ZXZWVrSW5Nb250aChJTGphdmEvdGltZS9EYXlPZldlZWs7KUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaXJzdERheU9mTW9udGgoKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaXJzdERheU9mTmV4dE1vbnRoKClMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmlyc3REYXlPZk5leHRZZWFyKClMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmlyc3REYXlPZlllYXIoKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaXJzdEluTW9udGgoTGphdmEvdGltZS9EYXlPZldlZWs7KUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXN0RGF5T2ZNb250aCgpTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imxhc3REYXlPZlllYXIoKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXN0SW5Nb250aChMamF2YS90aW1lL0RheU9mV2VlazspTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHQoTGphdmEvdGltZS9EYXlPZldlZWs7KUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0T3JTYW1lKExqYXZhL3RpbWUvRGF5T2ZXZWVrOylMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZEYXRlQWRqdXN0ZXIoTGphdmEvdXRpbC9mdW5jdGlvbi9VbmFyeU9wZXJhdG9yOylMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWRqdXN0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJldmlvdXMoTGphdmEvdGltZS9EYXlPZldlZWs7KUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBZGp1c3RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmV2aW91c09yU2FtZShMamF2YS90aW1lL0RheU9mV2VlazspTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFkanVzdGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFtb3VudCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRvKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWw7KUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OylKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5pdHMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJ0cmFjdEZyb20oTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbDspTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxGaWVsZCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkanVzdEludG8oTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbDtKKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFzZVVuaXQoKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKExqYXZhL3V0aWwvTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGcm9tKExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJhbmdlVW5pdCgpTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbFVuaXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEYXRlQmFzZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N1cHBvcnRlZEJ5KExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVGltZUJhc2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmFuZ2UoKUxqYXZhL3RpbWUvdGVtcG9yYWwvVmFsdWVSYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyYW5nZVJlZmluZWRCeShMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7KUxqYXZhL3RpbWUvdGVtcG9yYWwvVmFsdWVSYW5nZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlKExqYXZhL3V0aWwvTWFwO0xqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxBY2Nlc3NvcjtMamF2YS90aW1lL2Zvcm1hdC9SZXNvbHZlclN0eWxlOylMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsQWNjZXNzb3I7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsUXVlcmllcyIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNocm9ub2xvZ3koKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxRdWVyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2NhbERhdGUoKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxRdWVyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2NhbFRpbWUoKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxRdWVyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZmZzZXQoKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxRdWVyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmVjaXNpb24oKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxRdWVyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ6b25lKClMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsUXVlcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iem9uZUlkKClMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsUXVlcnk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsUXVlcnkiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWVyeUZyb20oTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEFjY2Vzc29yOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxVbml0IiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVG8oTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbDtKKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmV0d2VlbihMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsO0xqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWw7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREdXJhdGlvbigpTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RhdGVCYXNlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRHVyYXRpb25Fc3RpbWF0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1N1cHBvcnRlZEJ5KExqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWw7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1RpbWVCYXNlZCgpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS90ZW1wb3JhbC9VbnN1cHBvcnRlZFRlbXBvcmFsVHlwZUV4Y2VwdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS90aW1lL0RhdGVUaW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1ZhbHVlUmFuZ2UiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpKSkopViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tWYWxpZEludFZhbHVlKEpMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1ZhbGlkVmFsdWUoSkxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxGaWVsZDspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhcmdlc3RNaW5pbXVtKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4aW11bSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbmltdW0oKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTbWFsbGVzdE1heGltdW0oKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZpeGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJbnRWYWx1ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmFsaWRJbnRWYWx1ZShKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZhbGlkVmFsdWUoSilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoSkopTGphdmEvdGltZS90ZW1wb3JhbC9WYWx1ZVJhbmdlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKEpKSilMamF2YS90aW1lL3RlbXBvcmFsL1ZhbHVlUmFuZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoSkpKSilMamF2YS90aW1lL3RlbXBvcmFsL1ZhbHVlUmFuZ2U7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS90aW1lL3RlbXBvcmFsL1dlZWtGaWVsZHMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3RpbWUvRGF5T2ZXZWVrO0kpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGF5T2ZXZWVrKClMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rmlyc3REYXlPZldlZWsoKUxqYXZhL3RpbWUvRGF5T2ZXZWVrOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihMamF2YS90aW1lL0RheU9mV2VlaztJKUxqYXZhL3RpbWUvdGVtcG9yYWwvV2Vla0ZpZWxkczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihMamF2YS91dGlsL0xvY2FsZTspTGphdmEvdGltZS90ZW1wb3JhbC9XZWVrRmllbGRzOyIvPgotCQk8bWV0aG9kIG5hbWU9IndlZWtCYXNlZFllYXIoKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxGaWVsZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3ZWVrT2ZNb250aCgpTGphdmEvdGltZS90ZW1wb3JhbC9UZW1wb3JhbEZpZWxkOyIvPgotCQk8bWV0aG9kIG5hbWU9IndlZWtPZldlZWtCYXNlZFllYXIoKUxqYXZhL3RpbWUvdGVtcG9yYWwvVGVtcG9yYWxGaWVsZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3ZWVrT2ZZZWFyKClMamF2YS90aW1lL3RlbXBvcmFsL1RlbXBvcmFsRmllbGQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJU08iLz4KLQkJPGZpZWxkIG5hbWU9IlNVTkRBWV9TVEFSVCIvPgotCQk8ZmllbGQgbmFtZT0iV0VFS19CQVNFRF9ZRUFSUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS96b25lL1pvbmVPZmZzZXRUcmFuc2l0aW9uIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7TGphdmEvdGltZS9ab25lT2Zmc2V0O0xqYXZhL3RpbWUvWm9uZU9mZnNldDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZVRvKExqYXZhL3RpbWUvem9uZS9ab25lT2Zmc2V0VHJhbnNpdGlvbjspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGVUaW1lQWZ0ZXIoKUxqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRlVGltZUJlZm9yZSgpTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldER1cmF0aW9uKClMamF2YS90aW1lL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbnQoKUxqYXZhL3RpbWUvSW5zdGFudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPZmZzZXRBZnRlcigpTGphdmEvdGltZS9ab25lT2Zmc2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9mZnNldEJlZm9yZSgpTGphdmEvdGltZS9ab25lT2Zmc2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzR2FwKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPdmVybGFwKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYWxpZE9mZnNldChMamF2YS90aW1lL1pvbmVPZmZzZXQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7TGphdmEvdGltZS9ab25lT2Zmc2V0O0xqYXZhL3RpbWUvWm9uZU9mZnNldDspTGphdmEvdGltZS96b25lL1pvbmVPZmZzZXRUcmFuc2l0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvRXBvY2hTZWNvbmQoKUoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvem9uZS9ab25lT2Zmc2V0VHJhbnNpdGlvblJ1bGUiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3RpbWUvTW9udGg7SUxqYXZhL3RpbWUvRGF5T2ZXZWVrO0xqYXZhL3RpbWUvTG9jYWxUaW1lO1pMamF2YS90aW1lL3pvbmUvWm9uZU9mZnNldFRyYW5zaXRpb25SdWxlJFRpbWVEZWZpbml0aW9uO0xqYXZhL3RpbWUvWm9uZU9mZnNldDtMamF2YS90aW1lL1pvbmVPZmZzZXQ7TGphdmEvdGltZS9ab25lT2Zmc2V0OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUcmFuc2l0aW9uKEkpTGphdmEvdGltZS96b25lL1pvbmVPZmZzZXRUcmFuc2l0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERheU9mTW9udGhJbmRpY2F0b3IoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXlPZldlZWsoKUxqYXZhL3RpbWUvRGF5T2ZXZWVrOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsVGltZSgpTGphdmEvdGltZS9Mb2NhbFRpbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9udGgoKUxqYXZhL3RpbWUvTW9udGg7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2Zmc2V0QWZ0ZXIoKUxqYXZhL3RpbWUvWm9uZU9mZnNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPZmZzZXRCZWZvcmUoKUxqYXZhL3RpbWUvWm9uZU9mZnNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGFuZGFyZE9mZnNldCgpTGphdmEvdGltZS9ab25lT2Zmc2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVEZWZpbml0aW9uKClMamF2YS90aW1lL3pvbmUvWm9uZU9mZnNldFRyYW5zaXRpb25SdWxlJFRpbWVEZWZpbml0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTWlkbmlnaHRFbmRPZkRheSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL3RpbWUvTW9udGg7SUxqYXZhL3RpbWUvRGF5T2ZXZWVrO0xqYXZhL3RpbWUvTG9jYWxUaW1lO1pMamF2YS90aW1lL3pvbmUvWm9uZU9mZnNldFRyYW5zaXRpb25SdWxlJFRpbWVEZWZpbml0aW9uO0xqYXZhL3RpbWUvWm9uZU9mZnNldDtMamF2YS90aW1lL1pvbmVPZmZzZXQ7TGphdmEvdGltZS9ab25lT2Zmc2V0OylMamF2YS90aW1lL3pvbmUvWm9uZU9mZnNldFRyYW5zaXRpb25SdWxlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdGltZS96b25lL1pvbmVPZmZzZXRUcmFuc2l0aW9uUnVsZSRUaW1lRGVmaW5pdGlvbiIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVEYXRlVGltZShMamF2YS90aW1lL0xvY2FsRGF0ZVRpbWU7TGphdmEvdGltZS9ab25lT2Zmc2V0O0xqYXZhL3RpbWUvWm9uZU9mZnNldDspTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3RpbWUvem9uZS9ab25lT2Zmc2V0VHJhbnNpdGlvblJ1bGUkVGltZURlZmluaXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGphdmEvdGltZS96b25lL1pvbmVPZmZzZXRUcmFuc2l0aW9uUnVsZSRUaW1lRGVmaW5pdGlvbjsiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQU5EQVJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJVVEMiLz4KLQkJPGZpZWxkIG5hbWU9IldBTEwiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvem9uZS9ab25lUnVsZXMiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3RpbWUvWm9uZU9mZnNldDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF5bGlnaHRTYXZpbmdzKExqYXZhL3RpbWUvSW5zdGFudDspTGphdmEvdGltZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPZmZzZXQoTGphdmEvdGltZS9JbnN0YW50OylMamF2YS90aW1lL1pvbmVPZmZzZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2Zmc2V0KExqYXZhL3RpbWUvTG9jYWxEYXRlVGltZTspTGphdmEvdGltZS9ab25lT2Zmc2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YW5kYXJkT2Zmc2V0KExqYXZhL3RpbWUvSW5zdGFudDspTGphdmEvdGltZS9ab25lT2Zmc2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYW5zaXRpb24oTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOylMamF2YS90aW1lL3pvbmUvWm9uZU9mZnNldFRyYW5zaXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNpdGlvblJ1bGVzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNpdGlvbnMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWxpZE9mZnNldHMoTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lOylMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEYXlsaWdodFNhdmluZ3MoTGphdmEvdGltZS9JbnN0YW50OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGaXhlZE9mZnNldCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmFsaWRPZmZzZXQoTGphdmEvdGltZS9Mb2NhbERhdGVUaW1lO0xqYXZhL3RpbWUvWm9uZU9mZnNldDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRUcmFuc2l0aW9uKExqYXZhL3RpbWUvSW5zdGFudDspTGphdmEvdGltZS96b25lL1pvbmVPZmZzZXRUcmFuc2l0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL3RpbWUvWm9uZU9mZnNldDspTGphdmEvdGltZS96b25lL1pvbmVSdWxlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihMamF2YS90aW1lL1pvbmVPZmZzZXQ7TGphdmEvdGltZS9ab25lT2Zmc2V0O0xqYXZhL3V0aWwvTGlzdDtMamF2YS91dGlsL0xpc3Q7TGphdmEvdXRpbC9MaXN0OylMamF2YS90aW1lL3pvbmUvWm9uZVJ1bGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9InByZXZpb3VzVHJhbnNpdGlvbihMamF2YS90aW1lL0luc3RhbnQ7KUxqYXZhL3RpbWUvem9uZS9ab25lT2Zmc2V0VHJhbnNpdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3RpbWUvem9uZS9ab25lUnVsZXNFeGNlcHRpb24iIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdGltZS9EYXRlVGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdENvbGxlY3Rpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvQ29sbGVjdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdExpc3QiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0Fic3RyYWN0Q29sbGVjdGlvbiIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvTGlzdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVJhbmdlKElJKVYiLz4KLQkJPGZpZWxkIG5hbWU9Im1vZENvdW50Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0Fic3RyYWN0TWFwIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL01hcCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdE1hcCRTaW1wbGVFbnRyeSIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9NYXAkRW50cnkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9NYXAkRW50cnk7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvQWJzdHJhY3RNYXAkU2ltcGxlSW1tdXRhYmxlRW50cnkiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvTWFwJEVudHJ5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTWFwJEVudHJ5OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0Fic3RyYWN0UXVldWUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0Fic3RyYWN0Q29sbGVjdGlvbiIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvUXVldWUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvQWJzdHJhY3RTZXF1ZW50aWFsTGlzdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvQWJzdHJhY3RMaXN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0Fic3RyYWN0U2V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdENvbGxlY3Rpb24iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL1NldCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9BcnJheURlcXVlIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdENvbGxlY3Rpb24iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvRGVxdWUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lKClMamF2YS91dGlsL0FycmF5RGVxdWU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0FycmF5TGlzdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvQWJzdHJhY3RMaXN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL1JhbmRvbUFjY2VzcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Db2xsZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5zdXJlQ2FwYWNpdHkoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJpbVRvU2l6ZSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9BcnJheXMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzTGlzdChbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0JCKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0JJSUIpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0NDKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0NJSUMpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0REKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0RJSUQpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0ZGKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0ZJSUYpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0lJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0lJSUkpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0pJSUopSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0pKKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0xqYXZhL2xhbmcvT2JqZWN0O0lJTGphdmEvbGFuZy9PYmplY3Q7KUkiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmluYXJ5U2VhcmNoKFtMamF2YS9sYW5nL09iamVjdDtJSUxqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvQ29tcGFyYXRvcjspSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluYXJ5U2VhcmNoKFtMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDtMamF2YS91dGlsL0NvbXBhcmF0b3I7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW1NJSVMpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goW1NTKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5T2YoW0JJKVtCIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlPZihbQ0kpW0MiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29weU9mKFtESSlbRCIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5T2YoW0ZJKVtGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlPZihbSUkpW0kiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29weU9mKFtKSSlbSiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5T2YoW0xqYXZhL2xhbmcvT2JqZWN0O0kpW0xqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5T2YoW0xqYXZhL2xhbmcvT2JqZWN0O0lMamF2YS9sYW5nL0NsYXNzOylbTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlPZihbU0kpW1MiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29weU9mKFtaSSlbWiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5T2ZSYW5nZShbQklJKVtCIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlPZlJhbmdlKFtDSUkpW0MiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29weU9mUmFuZ2UoW0RJSSlbRCIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5T2ZSYW5nZShbRklJKVtGIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlPZlJhbmdlKFtJSUkpW0kiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29weU9mUmFuZ2UoW0pJSSlbSiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5T2ZSYW5nZShbTGphdmEvbGFuZy9PYmplY3Q7SUkpW0xqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5T2ZSYW5nZShbTGphdmEvbGFuZy9PYmplY3Q7SUlMamF2YS9sYW5nL0NsYXNzOylbTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlPZlJhbmdlKFtTSUkpW1MiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29weU9mUmFuZ2UoW1pJSSlbWiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWVwRXF1YWxzKFtMamF2YS9sYW5nL09iamVjdDtbTGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWVwSGFzaENvZGUoW0xqYXZhL2xhbmcvT2JqZWN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVlcFRvU3RyaW5nKFtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXF1YWxzKFtCW0IpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVxdWFscyhbQ1tDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoW0RbRClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXF1YWxzKFtGW0YpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVxdWFscyhbSVtJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoW0pbSilaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXF1YWxzKFtMamF2YS9sYW5nL09iamVjdDtbTGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoW1NbUylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXF1YWxzKFtaW1opWiIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbGwoW0JCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWxsKFtCSUlCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWxsKFtDQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsbChbQ0lJQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsbChbREQpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbGwoW0RJSUQpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbGwoW0ZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWxsKFtGSUlGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWxsKFtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsbChbSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsbChbSklJSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsbChbSkopViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbGwoW0xqYXZhL2xhbmcvT2JqZWN0O0lJTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWxsKFtMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbGwoW1NJSVMpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbGwoW1NTKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWxsKFtaSUlaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWxsKFtaWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzaENvZGUoW0IpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc2hDb2RlKFtDKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNoQ29kZShbRClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzaENvZGUoW0YpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc2hDb2RlKFtJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNoQ29kZShbSilJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzaENvZGUoW0xqYXZhL2xhbmcvT2JqZWN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzaENvZGUoW1MpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc2hDb2RlKFtaKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJhbGxlbFByZWZpeChbRElJTGphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVCaW5hcnlPcGVyYXRvcjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYWxsZWxQcmVmaXgoW0RMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZUJpbmFyeU9wZXJhdG9yOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJhbGxlbFByZWZpeChbSUlJTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRCaW5hcnlPcGVyYXRvcjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYWxsZWxQcmVmaXgoW0lMamF2YS91dGlsL2Z1bmN0aW9uL0ludEJpbmFyeU9wZXJhdG9yOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJhbGxlbFByZWZpeChbSklJTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nQmluYXJ5T3BlcmF0b3I7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmFsbGVsUHJlZml4KFtKTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nQmluYXJ5T3BlcmF0b3I7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmFsbGVsUHJlZml4KFtMamF2YS9sYW5nL09iamVjdDtJSUxqYXZhL3V0aWwvZnVuY3Rpb24vQmluYXJ5T3BlcmF0b3I7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmFsbGVsUHJlZml4KFtMamF2YS9sYW5nL09iamVjdDtMamF2YS91dGlsL2Z1bmN0aW9uL0JpbmFyeU9wZXJhdG9yOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJhbGxlbFNldEFsbChbRExqYXZhL3V0aWwvZnVuY3Rpb24vSW50VG9Eb3VibGVGdW5jdGlvbjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYWxsZWxTZXRBbGwoW0lMamF2YS91dGlsL2Z1bmN0aW9uL0ludFVuYXJ5T3BlcmF0b3I7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmFsbGVsU2V0QWxsKFtKTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRUb0xvbmdGdW5jdGlvbjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYWxsZWxTZXRBbGwoW0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vSW50RnVuY3Rpb247KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmFsbGVsU29ydChbQilWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJhbGxlbFNvcnQoW0JJSSlWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJhbGxlbFNvcnQoW0MpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYWxsZWxTb3J0KFtDSUkpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYWxsZWxTb3J0KFtEKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmFsbGVsU29ydChbRElJKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmFsbGVsU29ydChbRilWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJhbGxlbFNvcnQoW0ZJSSlWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJhbGxlbFNvcnQoW0kpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYWxsZWxTb3J0KFtJSUkpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYWxsZWxTb3J0KFtKKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmFsbGVsU29ydChbSklJKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmFsbGVsU29ydChbTGphdmEvbGFuZy9Db21wYXJhYmxlOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJhbGxlbFNvcnQoW0xqYXZhL2xhbmcvQ29tcGFyYWJsZTtJSSlWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJhbGxlbFNvcnQoW0xqYXZhL2xhbmcvT2JqZWN0O0lJTGphdmEvdXRpbC9Db21wYXJhdG9yOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJhbGxlbFNvcnQoW0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvQ29tcGFyYXRvcjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYWxsZWxTb3J0KFtTKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmFsbGVsU29ydChbU0lJKVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFsbChbRExqYXZhL3V0aWwvZnVuY3Rpb24vSW50VG9Eb3VibGVGdW5jdGlvbjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxsKFtJTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRVbmFyeU9wZXJhdG9yOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGwoW0pMamF2YS91dGlsL2Z1bmN0aW9uL0ludFRvTG9uZ0Z1bmN0aW9uOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBbGwoW0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vSW50RnVuY3Rpb247KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNvcnQoW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9InNvcnQoW0JJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic29ydChbQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic29ydChbQ0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzb3J0KFtEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzb3J0KFtESUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNvcnQoW0YpViIvPgotCQk8bWV0aG9kIG5hbWU9InNvcnQoW0ZJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic29ydChbSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic29ydChbSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzb3J0KFtKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzb3J0KFtKSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNvcnQoW0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic29ydChbTGphdmEvbGFuZy9PYmplY3Q7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNvcnQoW0xqYXZhL2xhbmcvT2JqZWN0O0lJTGphdmEvdXRpbC9Db21wYXJhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic29ydChbTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvdXRpbC9Db21wYXJhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic29ydChbUylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic29ydChbU0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGxpdGVyYXRvcihbRClMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mRG91YmxlOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BsaXRlcmF0b3IoW0RJSSlMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mRG91YmxlOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BsaXRlcmF0b3IoW0kpTGphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkludDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0ZXJhdG9yKFtJSUkpTGphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkludDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0ZXJhdG9yKFtKKUxqYXZhL3V0aWwvU3BsaXRlcmF0b3IkT2ZMb25nOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BsaXRlcmF0b3IoW0pJSSlMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mTG9uZzsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0ZXJhdG9yKFtMamF2YS9sYW5nL09iamVjdDspTGphdmEvdXRpbC9TcGxpdGVyYXRvcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0ZXJhdG9yKFtMamF2YS9sYW5nL09iamVjdDtJSSlMamF2YS91dGlsL1NwbGl0ZXJhdG9yOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RyZWFtKFtEKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InN0cmVhbShbRElJKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InN0cmVhbShbSSlMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW07IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdHJlYW0oW0lJSSlMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW07IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdHJlYW0oW0opTGphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InN0cmVhbShbSklJKUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdHJlYW0oW0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdHJlYW0oW0xqYXZhL2xhbmcvT2JqZWN0O0lJKUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKFtCKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKFtDKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKFtEKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKFtGKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKFtJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKFtKKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKFtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoW1MpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoW1opTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0Jhc2U2NCIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY29kZXIoKUxqYXZhL3V0aWwvQmFzZTY0JERlY29kZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5jb2RlcigpTGphdmEvdXRpbC9CYXNlNjQkRW5jb2RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW1lRGVjb2RlcigpTGphdmEvdXRpbC9CYXNlNjQkRGVjb2RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW1lRW5jb2RlcigpTGphdmEvdXRpbC9CYXNlNjQkRW5jb2RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW1lRW5jb2RlcihJW0IpTGphdmEvdXRpbC9CYXNlNjQkRW5jb2RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmxEZWNvZGVyKClMamF2YS91dGlsL0Jhc2U2NCREZWNvZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVybEVuY29kZXIoKUxqYXZhL3V0aWwvQmFzZTY0JEVuY29kZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0Jhc2U2NCREZWNvZGVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihaWilWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGUoTGphdmEvbGFuZy9TdHJpbmc7KVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjb2RlKExqYXZhL25pby9CeXRlQnVmZmVyOylMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGUoW0IpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNvZGUoW0JbQilJIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JhcChMamF2YS9pby9JbnB1dFN0cmVhbTspTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0Jhc2U2NCRFbmNvZGVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihaW0JJWilWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmNvZGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7KUxqYXZhL25pby9CeXRlQnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuY29kZShbQilbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuY29kZShbQltCKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmNvZGVUb1N0cmluZyhbQilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aXRob3V0UGFkZGluZygpTGphdmEvdXRpbC9CYXNlNjQkRW5jb2RlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cmFwKExqYXZhL2lvL091dHB1dFN0cmVhbTspTGphdmEvaW8vT3V0cHV0U3RyZWFtOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9CaXRTZXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFuZChMamF2YS91dGlsL0JpdFNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFuZE5vdChMamF2YS91dGlsL0JpdFNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhcmRpbmFsaXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmxpcChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbGlwKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KElJKUxqYXZhL3V0aWwvQml0U2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImludGVyc2VjdHMoTGphdmEvdXRpbC9CaXRTZXQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VtcHR5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dENsZWFyQml0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRTZXRCaXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3IoTGphdmEvdXRpbC9CaXRTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmV2aW91c0NsZWFyQml0KEkpSSIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJldmlvdXNTZXRCaXQoSSlJIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoSUlaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoSVopViIvPgotCQk8bWV0aG9kIG5hbWU9InNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdHJlYW0oKUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InRvQnl0ZUFycmF5KClbQiIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9Mb25nQXJyYXkoKVtKIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL25pby9CeXRlQnVmZmVyOylMamF2YS91dGlsL0JpdFNldDsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbmlvL0xvbmdCdWZmZXI7KUxqYXZhL3V0aWwvQml0U2V0OyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihbQilMamF2YS91dGlsL0JpdFNldDsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoW0opTGphdmEvdXRpbC9CaXRTZXQ7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ4b3IoTGphdmEvdXRpbC9CaXRTZXQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvQ2FsZW5kYXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvVGltZVpvbmU7TGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFmdGVyKExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmVmb3JlKExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGphdmEvdXRpbC9DYWxlbmRhcjspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBsZXRlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcHV0ZUZpZWxkcygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXB1dGVUaW1lKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdHVhbE1heGltdW0oSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0dWFsTWluaW11bShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVDYWxlbmRhclR5cGVzKClMamF2YS91dGlsL1NldDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUxvY2FsZXMoKVtMamF2YS91dGlsL0xvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDYWxlbmRhclR5cGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoSUlMamF2YS91dGlsL0xvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lcyhJSUxqYXZhL3V0aWwvTG9jYWxlOylMamF2YS91dGlsL01hcDsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rmlyc3REYXlPZldlZWsoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHcmVhdGVzdE1pbmltdW0oSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoKUxqYXZhL3V0aWwvQ2FsZW5kYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL3V0aWwvQ2FsZW5kYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9UaW1lWm9uZTspTGphdmEvdXRpbC9DYWxlbmRhcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS91dGlsL1RpbWVab25lO0xqYXZhL3V0aWwvTG9jYWxlOylMamF2YS91dGlsL0NhbGVuZGFyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExlYXN0TWF4aW11bShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhpbXVtKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW5pbXVtKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWUoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lSW5NaWxsaXMoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lWm9uZSgpTGphdmEvdXRpbC9UaW1lWm9uZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWVrWWVhcigpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2Vla3NJbldlZWtZZWFyKClJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRlcm5hbEdldChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xlbmllbnQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NldChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1dlZWtEYXRlU3VwcG9ydGVkKClaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb2xsKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb2xsKElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldChJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldChJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KElJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rmlyc3REYXlPZldlZWsoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGVuaWVudChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWUoTGphdmEvdXRpbC9EYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZUluTWlsbGlzKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVab25lKExqYXZhL3V0aWwvVGltZVpvbmU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRXZWVrRGF0ZShJSUkpViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9JbnN0YW50KClMamF2YS90aW1lL0luc3RhbnQ7IiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkFMTF9TVFlMRVMiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTSIvPgotCQk8ZmllbGQgbmFtZT0iQU1fUE0iLz4KLQkJPGZpZWxkIG5hbWU9IkFQUklMIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVUdVU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRBWV9PRl9NT05USCIvPgotCQk8ZmllbGQgbmFtZT0iREFZX09GX1dFRUsiLz4KLQkJPGZpZWxkIG5hbWU9IkRBWV9PRl9XRUVLX0lOX01PTlRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVlfT0ZfWUVBUiIvPgotCQk8ZmllbGQgbmFtZT0iREVDRU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkRTVF9PRkZTRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVSQSIvPgotCQk8ZmllbGQgbmFtZT0iRkVCUlVBUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkZJRUxEX0NPVU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJGUklEQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVVIiLz4KLQkJPGZpZWxkIG5hbWU9IkhPVVJfT0ZfREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJKQU5VQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJKVUxZIi8+Ci0JCTxmaWVsZCBuYW1lPSJKVU5FIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT05HIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9OR19GT1JNQVQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTE9OR19TVEFOREFMT05FIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BUkNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJNQVkiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTExJU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJNSU5VVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PTkRBWSIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEgiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BUlJPV19GT1JNQVQiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTkFSUk9XX1NUQU5EQUxPTkUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iTk9WRU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9Ik9DVE9CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlBNIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQVRVUkRBWSIvPgotCQk8ZmllbGQgbmFtZT0iU0VDT05EIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVBURU1CRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iU0hPUlRfRk9STUFUIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IlNIT1JUX1NUQU5EQUxPTkUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iU1VOREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSFVSU0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iVFVFU0RBWSIvPgotCQk8ZmllbGQgbmFtZT0iVU5ERUNJTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iV0VETkVTREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUVLX09GX01PTlRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJXRUVLX09GX1lFQVIiLz4KLQkJPGZpZWxkIG5hbWU9IllFQVIiLz4KLQkJPGZpZWxkIG5hbWU9IlpPTkVfT0ZGU0VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJhcmVGaWVsZHNTZXQiLz4KLQkJPGZpZWxkIG5hbWU9ImZpZWxkcyIvPgotCQk8ZmllbGQgbmFtZT0iaXNTZXQiLz4KLQkJPGZpZWxkIG5hbWU9ImlzVGltZVNldCIvPgotCQk8ZmllbGQgbmFtZT0idGltZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9DYWxlbmRhciRCdWlsZGVyIiBzaW5jZT0iMjYiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxqYXZhL3V0aWwvQ2FsZW5kYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KElJKUxqYXZhL3V0aWwvQ2FsZW5kYXIkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYWxlbmRhclR5cGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvQ2FsZW5kYXIkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRlKElJSSlMamF2YS91dGlsL0NhbGVuZGFyJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmllbGRzKFtJKUxqYXZhL3V0aWwvQ2FsZW5kYXIkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnN0YW50KEopTGphdmEvdXRpbC9DYWxlbmRhciRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEluc3RhbnQoTGphdmEvdXRpbC9EYXRlOylMamF2YS91dGlsL0NhbGVuZGFyJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGVuaWVudChaKUxqYXZhL3V0aWwvQ2FsZW5kYXIkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2NhbGUoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL3V0aWwvQ2FsZW5kYXIkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaW1lT2ZEYXkoSUlJKUxqYXZhL3V0aWwvQ2FsZW5kYXIkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaW1lT2ZEYXkoSUlJSSlMamF2YS91dGlsL0NhbGVuZGFyJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZVpvbmUoTGphdmEvdXRpbC9UaW1lWm9uZTspTGphdmEvdXRpbC9DYWxlbmRhciRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdlZWtEYXRlKElJSSlMamF2YS91dGlsL0NhbGVuZGFyJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2Vla0RlZmluaXRpb24oSUkpTGphdmEvdXRpbC9DYWxlbmRhciRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9Db2xsZWN0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0l0ZXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQWxsKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnMoTGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWluc0FsbChMamF2YS91dGlsL0NvbGxlY3Rpb247KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VtcHR5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYWxsZWxTdHJlYW0oKUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZShMamF2YS9sYW5nL09iamVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUFsbChMamF2YS91dGlsL0NvbGxlY3Rpb247KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVJZihMamF2YS91dGlsL2Z1bmN0aW9uL1ByZWRpY2F0ZTspWiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmV0YWluQWxsKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdHJlYW0oKUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InRvQXJyYXkoKVtMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0FycmF5KFtMamF2YS9sYW5nL09iamVjdDspW0xqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9Db2xsZWN0aW9ucyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQWxsKExqYXZhL3V0aWwvQ29sbGVjdGlvbjtbTGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc0xpZm9RdWV1ZShMamF2YS91dGlsL0RlcXVlOylMamF2YS91dGlsL1F1ZXVlOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5hcnlTZWFyY2goTGphdmEvdXRpbC9MaXN0O0xqYXZhL2xhbmcvT2JqZWN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluYXJ5U2VhcmNoKExqYXZhL3V0aWwvTGlzdDtMamF2YS9sYW5nL09iamVjdDtMamF2YS91dGlsL0NvbXBhcmF0b3I7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja2VkQ29sbGVjdGlvbihMamF2YS91dGlsL0NvbGxlY3Rpb247TGphdmEvbGFuZy9DbGFzczspTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrZWRMaXN0KExqYXZhL3V0aWwvTGlzdDtMamF2YS9sYW5nL0NsYXNzOylMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tlZE1hcChMamF2YS91dGlsL01hcDtMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrZWROYXZpZ2FibGVNYXAoTGphdmEvdXRpbC9OYXZpZ2FibGVNYXA7TGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL0NsYXNzOylMamF2YS91dGlsL05hdmlnYWJsZU1hcDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrZWROYXZpZ2FibGVTZXQoTGphdmEvdXRpbC9OYXZpZ2FibGVTZXQ7TGphdmEvbGFuZy9DbGFzczspTGphdmEvdXRpbC9OYXZpZ2FibGVTZXQ7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja2VkUXVldWUoTGphdmEvdXRpbC9RdWV1ZTtMamF2YS9sYW5nL0NsYXNzOylMamF2YS91dGlsL1F1ZXVlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tlZFNldChMamF2YS91dGlsL1NldDtMamF2YS9sYW5nL0NsYXNzOylMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja2VkU29ydGVkTWFwKExqYXZhL3V0aWwvU29ydGVkTWFwO0xqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9DbGFzczspTGphdmEvdXRpbC9Tb3J0ZWRNYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tlZFNvcnRlZFNldChMamF2YS91dGlsL1NvcnRlZFNldDtMamF2YS9sYW5nL0NsYXNzOylMamF2YS91dGlsL1NvcnRlZFNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5KExqYXZhL3V0aWwvTGlzdDtMamF2YS91dGlsL0xpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXNqb2ludChMamF2YS91dGlsL0NvbGxlY3Rpb247TGphdmEvdXRpbC9Db2xsZWN0aW9uOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW1wdHlFbnVtZXJhdGlvbigpTGphdmEvdXRpbC9FbnVtZXJhdGlvbjsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImVtcHR5SXRlcmF0b3IoKUxqYXZhL3V0aWwvSXRlcmF0b3I7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbXB0eUxpc3QoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbXB0eUxpc3RJdGVyYXRvcigpTGphdmEvdXRpbC9MaXN0SXRlcmF0b3I7IiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbXB0eU1hcCgpTGphdmEvdXRpbC9NYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW1wdHlOYXZpZ2FibGVNYXAoKUxqYXZhL3V0aWwvTmF2aWdhYmxlTWFwOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW1wdHlOYXZpZ2FibGVTZXQoKUxqYXZhL3V0aWwvTmF2aWdhYmxlU2V0OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW1wdHlTZXQoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImVtcHR5U29ydGVkTWFwKClMamF2YS91dGlsL1NvcnRlZE1hcDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImVtcHR5U29ydGVkU2V0KClMamF2YS91dGlsL1NvcnRlZFNldDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImVudW1lcmF0aW9uKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspTGphdmEvdXRpbC9FbnVtZXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWxsKExqYXZhL3V0aWwvTGlzdDtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZyZXF1ZW5jeShMamF2YS91dGlsL0NvbGxlY3Rpb247TGphdmEvbGFuZy9PYmplY3Q7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmRleE9mU3ViTGlzdChMamF2YS91dGlsL0xpc3Q7TGphdmEvdXRpbC9MaXN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGFzdEluZGV4T2ZTdWJMaXN0KExqYXZhL3V0aWwvTGlzdDtMamF2YS91dGlsL0xpc3Q7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJsaXN0KExqYXZhL3V0aWwvRW51bWVyYXRpb247KUxqYXZhL3V0aWwvQXJyYXlMaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im1heChMamF2YS91dGlsL0NvbGxlY3Rpb247KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im1heChMamF2YS91dGlsL0NvbGxlY3Rpb247TGphdmEvdXRpbC9Db21wYXJhdG9yOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW4oTGphdmEvdXRpbC9Db2xsZWN0aW9uOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW4oTGphdmEvdXRpbC9Db2xsZWN0aW9uO0xqYXZhL3V0aWwvQ29tcGFyYXRvcjspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibkNvcGllcyhJTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdTZXRGcm9tTWFwKExqYXZhL3V0aWwvTWFwOylMamF2YS91dGlsL1NldDsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZUFsbChMamF2YS91dGlsL0xpc3Q7TGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXZlcnNlKExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InJldmVyc2VPcmRlcigpTGphdmEvdXRpbC9Db21wYXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InJldmVyc2VPcmRlcihMamF2YS91dGlsL0NvbXBhcmF0b3I7KUxqYXZhL3V0aWwvQ29tcGFyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyb3RhdGUoTGphdmEvdXRpbC9MaXN0O0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNodWZmbGUoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2h1ZmZsZShMamF2YS91dGlsL0xpc3Q7TGphdmEvdXRpbC9SYW5kb207KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaW5nbGV0b24oTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNpbmdsZXRvbkxpc3QoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaW5nbGV0b25NYXAoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9InNvcnQoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic29ydChMamF2YS91dGlsL0xpc3Q7TGphdmEvdXRpbC9Db21wYXJhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3dhcChMamF2YS91dGlsL0xpc3Q7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InN5bmNocm9uaXplZENvbGxlY3Rpb24oTGphdmEvdXRpbC9Db2xsZWN0aW9uOylMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3luY2hyb25pemVkTGlzdChMamF2YS91dGlsL0xpc3Q7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzeW5jaHJvbml6ZWRNYXAoTGphdmEvdXRpbC9NYXA7KUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9InN5bmNocm9uaXplZE5hdmlnYWJsZU1hcChMamF2YS91dGlsL05hdmlnYWJsZU1hcDspTGphdmEvdXRpbC9OYXZpZ2FibGVNYXA7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzeW5jaHJvbml6ZWROYXZpZ2FibGVTZXQoTGphdmEvdXRpbC9OYXZpZ2FibGVTZXQ7KUxqYXZhL3V0aWwvTmF2aWdhYmxlU2V0OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3luY2hyb25pemVkU2V0KExqYXZhL3V0aWwvU2V0OylMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzeW5jaHJvbml6ZWRTb3J0ZWRNYXAoTGphdmEvdXRpbC9Tb3J0ZWRNYXA7KUxqYXZhL3V0aWwvU29ydGVkTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9InN5bmNocm9uaXplZFNvcnRlZFNldChMamF2YS91dGlsL1NvcnRlZFNldDspTGphdmEvdXRpbC9Tb3J0ZWRTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5tb2RpZmlhYmxlQ29sbGVjdGlvbihMamF2YS91dGlsL0NvbGxlY3Rpb247KUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bm1vZGlmaWFibGVMaXN0KExqYXZhL3V0aWwvTGlzdDspTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InVubW9kaWZpYWJsZU1hcChMamF2YS91dGlsL01hcDspTGphdmEvdXRpbC9NYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5tb2RpZmlhYmxlTmF2aWdhYmxlTWFwKExqYXZhL3V0aWwvTmF2aWdhYmxlTWFwOylMamF2YS91dGlsL05hdmlnYWJsZU1hcDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InVubW9kaWZpYWJsZU5hdmlnYWJsZVNldChMamF2YS91dGlsL05hdmlnYWJsZVNldDspTGphdmEvdXRpbC9OYXZpZ2FibGVTZXQ7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bm1vZGlmaWFibGVTZXQoTGphdmEvdXRpbC9TZXQ7KUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InVubW9kaWZpYWJsZVNvcnRlZE1hcChMamF2YS91dGlsL1NvcnRlZE1hcDspTGphdmEvdXRpbC9Tb3J0ZWRNYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5tb2RpZmlhYmxlU29ydGVkU2V0KExqYXZhL3V0aWwvU29ydGVkU2V0OylMamF2YS91dGlsL1NvcnRlZFNldDsiLz4KLQkJPGZpZWxkIG5hbWU9IkVNUFRZX0xJU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkVNUFRZX01BUCIvPgotCQk8ZmllbGQgbmFtZT0iRU1QVFlfU0VUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0NvbXBhcmF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmUoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJpbmcoTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvdXRpbC9Db21wYXJhdG9yOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyaW5nKExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247TGphdmEvdXRpbC9Db21wYXJhdG9yOylMamF2YS91dGlsL0NvbXBhcmF0b3I7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJpbmdEb3VibGUoTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0RvdWJsZUZ1bmN0aW9uOylMamF2YS91dGlsL0NvbXBhcmF0b3I7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJpbmdJbnQoTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0ludEZ1bmN0aW9uOylMamF2YS91dGlsL0NvbXBhcmF0b3I7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJpbmdMb25nKExqYXZhL3V0aWwvZnVuY3Rpb24vVG9Mb25nRnVuY3Rpb247KUxqYXZhL3V0aWwvQ29tcGFyYXRvcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im5hdHVyYWxPcmRlcigpTGphdmEvdXRpbC9Db21wYXJhdG9yOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibnVsbHNGaXJzdChMamF2YS91dGlsL0NvbXBhcmF0b3I7KUxqYXZhL3V0aWwvQ29tcGFyYXRvcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im51bGxzTGFzdChMamF2YS91dGlsL0NvbXBhcmF0b3I7KUxqYXZhL3V0aWwvQ29tcGFyYXRvcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJldmVyc2VPcmRlcigpTGphdmEvdXRpbC9Db21wYXJhdG9yOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmV2ZXJzZWQoKUxqYXZhL3V0aWwvQ29tcGFyYXRvcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InRoZW5Db21wYXJpbmcoTGphdmEvdXRpbC9Db21wYXJhdG9yOylMamF2YS91dGlsL0NvbXBhcmF0b3I7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuQ29tcGFyaW5nKExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247KUxqYXZhL3V0aWwvQ29tcGFyYXRvcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InRoZW5Db21wYXJpbmcoTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjtMamF2YS91dGlsL0NvbXBhcmF0b3I7KUxqYXZhL3V0aWwvQ29tcGFyYXRvcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InRoZW5Db21wYXJpbmdEb3VibGUoTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0RvdWJsZUZ1bmN0aW9uOylMamF2YS91dGlsL0NvbXBhcmF0b3I7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuQ29tcGFyaW5nSW50KExqYXZhL3V0aWwvZnVuY3Rpb24vVG9JbnRGdW5jdGlvbjspTGphdmEvdXRpbC9Db21wYXJhdG9yOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlbkNvbXBhcmluZ0xvbmcoTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0xvbmdGdW5jdGlvbjspTGphdmEvdXRpbC9Db21wYXJhdG9yOyIgc2luY2U9IjI0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0NvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjE5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0N1cnJlbmN5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExhbmRyb2lkL2ljdS91dGlsL0N1cnJlbmN5OylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdmFpbGFibGVDdXJyZW5jaWVzKClMamF2YS91dGlsL1NldDsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEN1cnJlbmN5Q29kZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdEZyYWN0aW9uRGlnaXRzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvQ3VycmVuY3k7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL3V0aWwvQ3VycmVuY3k7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtZXJpY0NvZGUoKUkiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5bWJvbCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3ltYm9sKExqYXZhL3V0aWwvTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvRGF0ZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSUlJSSlWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iVVRDKElJSUlJSSlKIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFmdGVyKExqYXZhL3V0aWwvRGF0ZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImJlZm9yZShMamF2YS91dGlsL0RhdGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGphdmEvdXRpbC9EYXRlOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbShMamF2YS90aW1lL0luc3RhbnQ7KUxqYXZhL3V0aWwvRGF0ZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGUoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF5KClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvdXJzKClJIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbnV0ZXMoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9udGgoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vjb25kcygpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZXpvbmVPZmZzZXQoKUkiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WWVhcigpSSIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL1N0cmluZzspSiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRlKEkpViIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIb3VycyhJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWludXRlcyhJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TW9udGgoSSlWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlY29uZHMoSSlWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWUoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0WWVhcihJKVYiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9HTVRTdHJpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0luc3RhbnQoKUxqYXZhL3RpbWUvSW5zdGFudDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InRvTG9jYWxlU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiIGRlcHJlY2F0ZWQ9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0RlcXVlIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL1F1ZXVlIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkRmlyc3QoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRMYXN0KExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVzY2VuZGluZ0l0ZXJhdG9yKClMamF2YS91dGlsL0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpcnN0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXN0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZmZlckZpcnN0KExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZmZXJMYXN0KExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGVla0ZpcnN0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZWVrTGFzdCgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG9sbEZpcnN0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb2xsTGFzdCgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG9wKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXNoKExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlRmlyc3QoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUZpcnN0T2NjdXJyZW5jZShMamF2YS9sYW5nL09iamVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUxhc3QoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUxhc3RPY2N1cnJlbmNlKExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0RpY3Rpb25hcnkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVsZW1lbnRzKClMamF2YS91dGlsL0VudW1lcmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbXB0eSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImtleXMoKUxqYXZhL3V0aWwvRW51bWVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmUoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNpemUoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvRG91YmxlU3VtbWFyeVN0YXRpc3RpY3MiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZUNvbnN1bWVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tYmluZShMamF2YS91dGlsL0RvdWJsZVN1bW1hcnlTdGF0aXN0aWNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZlcmFnZSgpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvdW50KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4KClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluKClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VtKClEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0R1cGxpY2F0ZUZvcm1hdEZsYWdzRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9JbGxlZ2FsRm9ybWF0RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxhZ3MoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9FbXB0eVN0YWNrRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0VudW1NYXAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0Fic3RyYWN0TWFwIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DbGFzczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0VudW1NYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9NYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGphdmEvdXRpbC9FbnVtTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChMamF2YS9sYW5nL0VudW07TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9FbnVtU2V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdFNldCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NsYXNzO1tMamF2YS9sYW5nL0VudW07KVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImFsbE9mKExqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL3V0aWwvRW51bVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGphdmEvdXRpbC9FbnVtU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBsZW1lbnRPZihMamF2YS91dGlsL0VudW1TZXQ7KUxqYXZhL3V0aWwvRW51bVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5T2YoTGphdmEvdXRpbC9Db2xsZWN0aW9uOylMamF2YS91dGlsL0VudW1TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29weU9mKExqYXZhL3V0aWwvRW51bVNldDspTGphdmEvdXRpbC9FbnVtU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vbmVPZihMamF2YS9sYW5nL0NsYXNzOylMamF2YS91dGlsL0VudW1TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoTGphdmEvbGFuZy9FbnVtOylMamF2YS91dGlsL0VudW1TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoTGphdmEvbGFuZy9FbnVtO0xqYXZhL2xhbmcvRW51bTspTGphdmEvdXRpbC9FbnVtU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL2xhbmcvRW51bTtMamF2YS9sYW5nL0VudW07TGphdmEvbGFuZy9FbnVtOylMamF2YS91dGlsL0VudW1TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoTGphdmEvbGFuZy9FbnVtO0xqYXZhL2xhbmcvRW51bTtMamF2YS9sYW5nL0VudW07TGphdmEvbGFuZy9FbnVtOylMamF2YS91dGlsL0VudW1TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoTGphdmEvbGFuZy9FbnVtO0xqYXZhL2xhbmcvRW51bTtMamF2YS9sYW5nL0VudW07TGphdmEvbGFuZy9FbnVtO0xqYXZhL2xhbmcvRW51bTspTGphdmEvdXRpbC9FbnVtU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL2xhbmcvRW51bTtbTGphdmEvbGFuZy9FbnVtOylMamF2YS91dGlsL0VudW1TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmFuZ2UoTGphdmEvbGFuZy9FbnVtO0xqYXZhL2xhbmcvRW51bTspTGphdmEvdXRpbC9FbnVtU2V0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9FbnVtZXJhdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTW9yZUVsZW1lbnRzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dEVsZW1lbnQoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9FdmVudExpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvRXZlbnRMaXN0ZW5lclByb3h5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL0V2ZW50TGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9FdmVudExpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGlzdGVuZXIoKUxqYXZhL3V0aWwvRXZlbnRMaXN0ZW5lcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvRXZlbnRPYmplY3QiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvdXJjZSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzb3VyY2UiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvRm9ybWF0RmxhZ3NDb252ZXJzaW9uTWlzbWF0Y2hFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0lsbGVnYWxGb3JtYXRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7QylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udmVyc2lvbigpQyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsYWdzKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvRm9ybWF0dGFibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdFRvKExqYXZhL3V0aWwvRm9ybWF0dGVyO0lJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0Zvcm1hdHRhYmxlRmxhZ3MiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQUxURVJOQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJMRUZUX0pVU1RJRlkiLz4KLQkJPGZpZWxkIG5hbWU9IlVQUEVSQ0FTRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9Gb3JtYXR0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL0Nsb3NlYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL0ZsdXNoYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0ZpbGU7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTtMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0xvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vT3V0cHV0U3RyZWFtO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTtMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0xvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9QcmludFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0FwcGVuZGFibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9BcHBlbmRhYmxlO0xqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL09iamVjdDspTGphdmEvdXRpbC9Gb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL3V0aWwvTG9jYWxlO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL09iamVjdDspTGphdmEvdXRpbC9Gb3JtYXR0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW9FeGNlcHRpb24oKUxqYXZhL2lvL0lPRXhjZXB0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvY2FsZSgpTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3V0KClMamF2YS9sYW5nL0FwcGVuZGFibGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0Zvcm1hdHRlciRCaWdEZWNpbWFsTGF5b3V0Rm9ybSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvRm9ybWF0dGVyJEJpZ0RlY2ltYWxMYXlvdXRGb3JtOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZhL3V0aWwvRm9ybWF0dGVyJEJpZ0RlY2ltYWxMYXlvdXRGb3JtOyIvPgotCQk8ZmllbGQgbmFtZT0iREVDSU1BTF9GTE9BVCIvPgotCQk8ZmllbGQgbmFtZT0iU0NJRU5USUZJQyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9Gb3JtYXR0ZXJDbG9zZWRFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvQ2FsZW5kYXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL1RpbWVab25lOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvVGltZVpvbmU7TGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmcm9tKExqYXZhL3RpbWUvWm9uZWREYXRlVGltZTspTGphdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhcjsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdyZWdvcmlhbkNoYW5nZSgpTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTGVhcFllYXIoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0R3JlZ29yaWFuQ2hhbmdlKExqYXZhL3V0aWwvRGF0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InRvWm9uZWREYXRlVGltZSgpTGphdmEvdGltZS9ab25lZERhdGVUaW1lOyIgc2luY2U9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBRCIvPgotCQk8ZmllbGQgbmFtZT0iQkMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvSGFzaE1hcCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvQWJzdHJhY3RNYXAiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL01hcDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9IYXNoU2V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdFNldCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9IYXNodGFibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0RpY3Rpb25hcnkiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvTWFwIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnMoTGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWhhc2goKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvSWRlbnRpdHlIYXNoTWFwIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdE1hcCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL01hcDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9JbGxlZ2FsRm9ybWF0Q29kZVBvaW50RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9JbGxlZ2FsRm9ybWF0RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvZGVQb2ludCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9JbGxlZ2FsRm9ybWF0Q29udmVyc2lvbkV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvSWxsZWdhbEZvcm1hdEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihDTGphdmEvbGFuZy9DbGFzczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFyZ3VtZW50Q2xhc3MoKUxqYXZhL2xhbmcvQ2xhc3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udmVyc2lvbigpQyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9JbGxlZ2FsRm9ybWF0RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvSWxsZWdhbEZvcm1hdEZsYWdzRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9JbGxlZ2FsRm9ybWF0RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxhZ3MoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9JbGxlZ2FsRm9ybWF0UHJlY2lzaW9uRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9JbGxlZ2FsRm9ybWF0RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWNpc2lvbigpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9JbGxlZ2FsRm9ybWF0V2lkdGhFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0lsbGVnYWxGb3JtYXRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2lkdGgoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvSWxsZm9ybWVkTG9jYWxlRXhjZXB0aW9uIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcnJvckluZGV4KClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0lucHV0TWlzbWF0Y2hFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL05vU3VjaEVsZW1lbnRFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvSW50U3VtbWFyeVN0YXRpc3RpY3MiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0ludENvbnN1bWVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tYmluZShMamF2YS91dGlsL0ludFN1bW1hcnlTdGF0aXN0aWNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZlcmFnZSgpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvdW50KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VtKClKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0ludmFsaWRQcm9wZXJ0aWVzRm9ybWF0RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSU9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvSXRlcmF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hSZW1haW5pbmcoTGphdmEvdXRpbC9mdW5jdGlvbi9Db25zdW1lcjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTmV4dCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHQoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZSgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9MaW5rZWRIYXNoTWFwIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9IYXNoTWFwIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElGWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlRWxkZXN0RW50cnkoTGphdmEvdXRpbC9NYXAkRW50cnk7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvTGlua2VkSGFzaFNldCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvSGFzaFNldCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0NvbGxlY3Rpb247KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvTGlua2VkTGlzdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvQWJzdHJhY3RTZXF1ZW50aWFsTGlzdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9EZXF1ZSIgc2luY2U9IjkiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL1F1ZXVlIiByZW1vdmVkPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0NvbGxlY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRGaXJzdChMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZExhc3QoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaXJzdCgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFzdCgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlRmlyc3QoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUxhc3QoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9MaXN0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL0NvbGxlY3Rpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGQoSUxqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQWxsKElMamF2YS91dGlsL0NvbGxlY3Rpb247KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoSSlMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmRleE9mKExqYXZhL2xhbmcvT2JqZWN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGFzdEluZGV4T2YoTGphdmEvbGFuZy9PYmplY3Q7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJsaXN0SXRlcmF0b3IoKUxqYXZhL3V0aWwvTGlzdEl0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Imxpc3RJdGVyYXRvcihJKUxqYXZhL3V0aWwvTGlzdEl0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZShJKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2VBbGwoTGphdmEvdXRpbC9mdW5jdGlvbi9VbmFyeU9wZXJhdG9yOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoSUxqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzb3J0KExqYXZhL3V0aWwvQ29tcGFyYXRvcjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViTGlzdChJSSlMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0xpc3RJdGVyYXRvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9JdGVyYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1ByZXZpb3VzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dEluZGV4KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJldmlvdXMoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InByZXZpb3VzSW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvTGlzdFJlc291cmNlQnVuZGxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9SZXNvdXJjZUJ1bmRsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnRzKClbW0xqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9Mb2NhbGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsdGVyKExqYXZhL3V0aWwvTGlzdDtMamF2YS91dGlsL0NvbGxlY3Rpb247KUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbHRlcihMamF2YS91dGlsL0xpc3Q7TGphdmEvdXRpbC9Db2xsZWN0aW9uO0xqYXZhL3V0aWwvTG9jYWxlJEZpbHRlcmluZ01vZGU7KUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbHRlclRhZ3MoTGphdmEvdXRpbC9MaXN0O0xqYXZhL3V0aWwvQ29sbGVjdGlvbjspTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsdGVyVGFncyhMamF2YS91dGlsL0xpc3Q7TGphdmEvdXRpbC9Db2xsZWN0aW9uO0xqYXZhL3V0aWwvTG9jYWxlJEZpbHRlcmluZ01vZGU7KUxqYXZhL3V0aWwvTGlzdDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckxhbmd1YWdlVGFnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0xvY2FsZTsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF2YWlsYWJsZUxvY2FsZXMoKVtMamF2YS91dGlsL0xvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb3VudHJ5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0KClMamF2YS91dGlsL0xvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0KExqYXZhL3V0aWwvTG9jYWxlJENhdGVnb3J5OylMamF2YS91dGlsL0xvY2FsZTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlDb3VudHJ5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5Q291bnRyeShMamF2YS91dGlsL0xvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheUxhbmd1YWdlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TGFuZ3VhZ2UoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TmFtZShMamF2YS91dGlsL0xvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheVNjcmlwdCgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5U2NyaXB0KExqYXZhL3V0aWwvTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlWYXJpYW50KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5VmFyaWFudChMamF2YS91dGlsL0xvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0ZW5zaW9uKEMpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjEiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHRlbnNpb25LZXlzKClMamF2YS91dGlsL1NldDsiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElTTzNDb3VudHJ5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJU08zTGFuZ3VhZ2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElTT0NvdW50cmllcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElTT0xhbmd1YWdlcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhbmd1YWdlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY3JpcHQoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5pY29kZUxvY2FsZUF0dHJpYnV0ZXMoKUxqYXZhL3V0aWwvU2V0OyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5pY29kZUxvY2FsZUtleXMoKUxqYXZhL3V0aWwvU2V0OyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VW5pY29kZUxvY2FsZVR5cGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFyaWFudCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRXh0ZW5zaW9ucygpWiIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9va3VwKExqYXZhL3V0aWwvTGlzdDtMamF2YS91dGlsL0NvbGxlY3Rpb247KUxqYXZhL3V0aWwvTG9jYWxlOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9va3VwVGFnKExqYXZhL3V0aWwvTGlzdDtMamF2YS91dGlsL0NvbGxlY3Rpb247KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVmYXVsdChMamF2YS91dGlsL0xvY2FsZSRDYXRlZ29yeTtMamF2YS91dGlsL0xvY2FsZTspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVmYXVsdChMamF2YS91dGlsL0xvY2FsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0cmlwRXh0ZW5zaW9ucygpTGphdmEvdXRpbC9Mb2NhbGU7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0xhbmd1YWdlVGFnKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0FOQURBIi8+Ci0JCTxmaWVsZCBuYW1lPSJDQU5BREFfRlJFTkNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSElOQSIvPgotCQk8ZmllbGQgbmFtZT0iQ0hJTkVTRSIvPgotCQk8ZmllbGQgbmFtZT0iRU5HTElTSCIvPgotCQk8ZmllbGQgbmFtZT0iRlJBTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGUkVOQ0giLz4KLQkJPGZpZWxkIG5hbWU9IkdFUk1BTiIvPgotCQk8ZmllbGQgbmFtZT0iR0VSTUFOWSIvPgotCQk8ZmllbGQgbmFtZT0iSVRBTElBTiIvPgotCQk8ZmllbGQgbmFtZT0iSVRBTFkiLz4KLQkJPGZpZWxkIG5hbWU9IkpBUEFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJKQVBBTkVTRSIvPgotCQk8ZmllbGQgbmFtZT0iS09SRUEiLz4KLQkJPGZpZWxkIG5hbWU9IktPUkVBTiIvPgotCQk8ZmllbGQgbmFtZT0iUFJDIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklWQVRFX1VTRV9FWFRFTlNJT04iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iUk9PVCIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9IlNJTVBMSUZJRURfQ0hJTkVTRSIvPgotCQk8ZmllbGQgbmFtZT0iVEFJV0FOIi8+Ci0JCTxmaWVsZCBuYW1lPSJUUkFESVRJT05BTF9DSElORVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJVSyIvPgotCQk8ZmllbGQgbmFtZT0iVU5JQ09ERV9MT0NBTEVfRVhURU5TSU9OIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlVTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL0xvY2FsZSRCdWlsZGVyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVW5pY29kZUxvY2FsZUF0dHJpYnV0ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9Mb2NhbGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKUxqYXZhL3V0aWwvTG9jYWxlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJFeHRlbnNpb25zKClMamF2YS91dGlsL0xvY2FsZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVVuaWNvZGVMb2NhbGVBdHRyaWJ1dGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvTG9jYWxlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXh0ZW5zaW9uKENMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9Mb2NhbGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYW5ndWFnZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9Mb2NhbGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYW5ndWFnZVRhZyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9Mb2NhbGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2NhbGUoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL3V0aWwvTG9jYWxlJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVnaW9uKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0xvY2FsZSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjcmlwdChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9Mb2NhbGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVbmljb2RlTG9jYWxlS2V5d29yZChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9Mb2NhbGUkQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYXJpYW50KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0xvY2FsZSRCdWlsZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9Mb2NhbGUkQ2F0ZWdvcnkiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9Mb2NhbGUkQ2F0ZWdvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClbTGphdmEvdXRpbC9Mb2NhbGUkQ2F0ZWdvcnk7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJESVNQTEFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvTG9jYWxlJEZpbHRlcmluZ01vZGUiIHNpbmNlPSIyNiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9Mb2NhbGUkRmlsdGVyaW5nTW9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS91dGlsL0xvY2FsZSRGaWx0ZXJpbmdNb2RlOyIvPgotCQk8ZmllbGQgbmFtZT0iQVVUT1NFTEVDVF9GSUxURVJJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkVYVEVOREVEX0ZJTFRFUklORyIvPgotCQk8ZmllbGQgbmFtZT0iSUdOT1JFX0VYVEVOREVEX1JBTkdFUyIvPgotCQk8ZmllbGQgbmFtZT0iTUFQX0VYVEVOREVEX1JBTkdFUyIvPgotCQk8ZmllbGQgbmFtZT0iUkVKRUNUX0VYVEVOREVEX1JBTkdFUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9Mb2NhbGUkTGFuZ3VhZ2VSYW5nZSIgc2luY2U9IjI2Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSYW5nZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2VpZ2h0KClEIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFwRXF1aXZhbGVudHMoTGphdmEvdXRpbC9MaXN0O0xqYXZhL3V0aWwvTWFwOylMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL01hcDspTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1dFSUdIVCIvPgotCQk8ZmllbGQgbmFtZT0iTUlOX1dFSUdIVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9Mb25nU3VtbWFyeVN0YXRpc3RpY3MiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0ludENvbnN1bWVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9Mb25nQ29uc3VtZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21iaW5lKExqYXZhL3V0aWwvTG9uZ1N1bW1hcnlTdGF0aXN0aWNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZlcmFnZSgpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvdW50KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWluKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3VtKClKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL01hcCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vQmlGdW5jdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlSWZBYnNlbnQoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlSWZQcmVzZW50KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vQmlGdW5jdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb250YWluc0tleShMamF2YS9sYW5nL09iamVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zVmFsdWUoTGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbnRyeVNldCgpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaChMamF2YS91dGlsL2Z1bmN0aW9uL0JpQ29uc3VtZXI7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3JEZWZhdWx0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW1wdHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJrZXlTZXQoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im1lcmdlKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vQmlGdW5jdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEFsbChMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dElmQWJzZW50KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZShMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXBsYWNlKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2UoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2VBbGwoTGphdmEvdXRpbC9mdW5jdGlvbi9CaUZ1bmN0aW9uOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVzKClMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL01hcCRFbnRyeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyaW5nQnlLZXkoKUxqYXZhL3V0aWwvQ29tcGFyYXRvcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmluZ0J5S2V5KExqYXZhL3V0aWwvQ29tcGFyYXRvcjspTGphdmEvdXRpbC9Db21wYXJhdG9yOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyaW5nQnlWYWx1ZSgpTGphdmEvdXRpbC9Db21wYXJhdG9yOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyaW5nQnlWYWx1ZShMamF2YS91dGlsL0NvbXBhcmF0b3I7KUxqYXZhL3V0aWwvQ29tcGFyYXRvcjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZhbHVlKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvTWlzc2luZ0Zvcm1hdEFyZ3VtZW50RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9JbGxlZ2FsRm9ybWF0RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9ybWF0U3BlY2lmaWVyKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvTWlzc2luZ0Zvcm1hdFdpZHRoRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9JbGxlZ2FsRm9ybWF0RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Rm9ybWF0U3BlY2lmaWVyKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xhc3NOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9OYXZpZ2FibGVNYXAiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvU29ydGVkTWFwIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2VpbGluZ0VudHJ5KExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL01hcCRFbnRyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjZWlsaW5nS2V5KExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXNjZW5kaW5nS2V5U2V0KClMamF2YS91dGlsL05hdmlnYWJsZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXNjZW5kaW5nTWFwKClMamF2YS91dGlsL05hdmlnYWJsZU1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaXJzdEVudHJ5KClMamF2YS91dGlsL01hcCRFbnRyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbG9vckVudHJ5KExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL01hcCRFbnRyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbG9vcktleShMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGVhZE1hcChMamF2YS9sYW5nL09iamVjdDtaKUxqYXZhL3V0aWwvTmF2aWdhYmxlTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImhpZ2hlckVudHJ5KExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL01hcCRFbnRyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoaWdoZXJLZXkoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Imxhc3RFbnRyeSgpTGphdmEvdXRpbC9NYXAkRW50cnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG93ZXJFbnRyeShMamF2YS9sYW5nL09iamVjdDspTGphdmEvdXRpbC9NYXAkRW50cnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG93ZXJLZXkoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im5hdmlnYWJsZUtleVNldCgpTGphdmEvdXRpbC9OYXZpZ2FibGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG9sbEZpcnN0RW50cnkoKUxqYXZhL3V0aWwvTWFwJEVudHJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9InBvbGxMYXN0RW50cnkoKUxqYXZhL3V0aWwvTWFwJEVudHJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9InN1Yk1hcChMamF2YS9sYW5nL09iamVjdDtaTGphdmEvbGFuZy9PYmplY3Q7WilMamF2YS91dGlsL05hdmlnYWJsZU1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0YWlsTWFwKExqYXZhL2xhbmcvT2JqZWN0O1opTGphdmEvdXRpbC9OYXZpZ2FibGVNYXA7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL05hdmlnYWJsZVNldCIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9Tb3J0ZWRTZXQiLz4KLQkJPG1ldGhvZCBuYW1lPSJjZWlsaW5nKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXNjZW5kaW5nSXRlcmF0b3IoKUxqYXZhL3V0aWwvSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVzY2VuZGluZ1NldCgpTGphdmEvdXRpbC9OYXZpZ2FibGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmxvb3IoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImhlYWRTZXQoTGphdmEvbGFuZy9PYmplY3Q7WilMamF2YS91dGlsL05hdmlnYWJsZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoaWdoZXIoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Imxvd2VyKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb2xsRmlyc3QoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InBvbGxMYXN0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJTZXQoTGphdmEvbGFuZy9PYmplY3Q7WkxqYXZhL2xhbmcvT2JqZWN0O1opTGphdmEvdXRpbC9OYXZpZ2FibGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGFpbFNldChMamF2YS9sYW5nL09iamVjdDtaKUxqYXZhL3V0aWwvTmF2aWdhYmxlU2V0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL09iamVjdHMiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvQ29tcGFyYXRvcjspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImRlZXBFcXVhbHMoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcXVhbHMoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNoKFtMamF2YS9sYW5nL09iamVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc2hDb2RlKExqYXZhL2xhbmcvT2JqZWN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOdWxsKExqYXZhL2xhbmcvT2JqZWN0OylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJub25OdWxsKExqYXZhL2xhbmcvT2JqZWN0OylaIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1aXJlTm9uTnVsbChMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWlyZU5vbk51bGwoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcXVpcmVOb25OdWxsKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvT2JzZXJ2YWJsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkT2JzZXJ2ZXIoTGphdmEvdXRpbC9PYnNlcnZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQ2hhbmdlZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvdW50T2JzZXJ2ZXJzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVsZXRlT2JzZXJ2ZXIoTGphdmEvdXRpbC9PYnNlcnZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZU9ic2VydmVycygpViIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0NoYW5nZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlPYnNlcnZlcnMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3RpZnlPYnNlcnZlcnMoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGFuZ2VkKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL09ic2VydmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoTGphdmEvdXRpbC9PYnNlcnZhYmxlO0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL09wdGlvbmFsIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW1wdHkoKUxqYXZhL3V0aWwvT3B0aW9uYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsdGVyKExqYXZhL3V0aWwvZnVuY3Rpb24vUHJlZGljYXRlOylMamF2YS91dGlsL09wdGlvbmFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZsYXRNYXAoTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvdXRpbC9PcHRpb25hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlmUHJlc2VudChMamF2YS91dGlsL2Z1bmN0aW9uL0NvbnN1bWVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcmVzZW50KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWFwKExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247KUxqYXZhL3V0aWwvT3B0aW9uYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvT3B0aW9uYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZOdWxsYWJsZShMamF2YS9sYW5nL09iamVjdDspTGphdmEvdXRpbC9PcHRpb25hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvckVsc2UoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9yRWxzZUdldChMamF2YS91dGlsL2Z1bmN0aW9uL1N1cHBsaWVyOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvckVsc2VUaHJvdyhMamF2YS91dGlsL2Z1bmN0aW9uL1N1cHBsaWVyOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvT3B0aW9uYWxEb3VibGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbXB0eSgpTGphdmEvdXRpbC9PcHRpb25hbERvdWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBc0RvdWJsZSgpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImlmUHJlc2VudChMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZUNvbnN1bWVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcmVzZW50KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoRClMamF2YS91dGlsL09wdGlvbmFsRG91YmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9yRWxzZShEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvckVsc2VHZXQoTGphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVTdXBwbGllcjspRCIvPgotCQk8bWV0aG9kIG5hbWU9Im9yRWxzZVRocm93KExqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7KUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvT3B0aW9uYWxJbnQiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbXB0eSgpTGphdmEvdXRpbC9PcHRpb25hbEludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBc0ludCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlmUHJlc2VudChMamF2YS91dGlsL2Z1bmN0aW9uL0ludENvbnN1bWVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcmVzZW50KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoSSlMamF2YS91dGlsL09wdGlvbmFsSW50OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9yRWxzZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvckVsc2VHZXQoTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRTdXBwbGllcjspSSIvPgotCQk8bWV0aG9kIG5hbWU9Im9yRWxzZVRocm93KExqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7KUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvT3B0aW9uYWxMb25nIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW1wdHkoKUxqYXZhL3V0aWwvT3B0aW9uYWxMb25nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFzTG9uZygpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImlmUHJlc2VudChMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdDb25zdW1lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUHJlc2VudCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKEopTGphdmEvdXRpbC9PcHRpb25hbExvbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3JFbHNlKEopSiIvPgotCQk8bWV0aG9kIG5hbWU9Im9yRWxzZUdldChMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdTdXBwbGllcjspSiIvPgotCQk8bWV0aG9kIG5hbWU9Im9yRWxzZVRocm93KExqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7KUoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvUHJpbWl0aXZlSXRlcmF0b3IiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL0l0ZXJhdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaFJlbWFpbmluZyhMamF2YS9sYW5nL09iamVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9QcmltaXRpdmVJdGVyYXRvciRPZkRvdWJsZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvUHJpbWl0aXZlSXRlcmF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoUmVtYWluaW5nKExqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlQ29uc3VtZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0KClMamF2YS9sYW5nL0RvdWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0RG91YmxlKClEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL1ByaW1pdGl2ZUl0ZXJhdG9yJE9mSW50IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9QcmltaXRpdmVJdGVyYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hSZW1haW5pbmcoTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRDb25zdW1lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHQoKUxqYXZhL2xhbmcvSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0SW50KClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL1ByaW1pdGl2ZUl0ZXJhdG9yJE9mTG9uZyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvUHJpbWl0aXZlSXRlcmF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoUmVtYWluaW5nKExqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ0NvbnN1bWVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dCgpTGphdmEvbGFuZy9Mb25nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRMb25nKClKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL1ByaW9yaXR5UXVldWUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0Fic3RyYWN0UXVldWUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS91dGlsL0NvbXBhcmF0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Db2xsZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29tcGFyYXRvcjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvUHJpb3JpdHlRdWV1ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL1NvcnRlZFNldDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmF0b3IoKUxqYXZhL3V0aWwvQ29tcGFyYXRvcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvUHJvcGVydGllcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvSGFzaHRhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvUHJvcGVydGllczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3BlcnR5KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9wZXJ0eShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibGlzdChMamF2YS9pby9QcmludFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9Imxpc3QoTGphdmEvaW8vUHJpbnRXcml0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkKExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZChMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZEZyb21YTUwoTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm9wZXJ0eU5hbWVzKClMamF2YS91dGlsL0VudW1lcmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InNhdmUoTGphdmEvaW8vT3V0cHV0U3RyZWFtO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3BlcnR5KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9yZShMamF2YS9pby9PdXRwdXRTdHJlYW07TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9yZShMamF2YS9pby9Xcml0ZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RvcmVUb1hNTChMamF2YS9pby9PdXRwdXRTdHJlYW07TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdG9yZVRvWE1MKExqYXZhL2lvL091dHB1dFN0cmVhbTtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0cmluZ1Byb3BlcnR5TmFtZXMoKUxqYXZhL3V0aWwvU2V0OyIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9ImRlZmF1bHRzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL1Byb3BlcnR5UGVybWlzc2lvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0Jhc2ljUGVybWlzc2lvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9Qcm9wZXJ0eVJlc291cmNlQnVuZGxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9SZXNvdXJjZUJ1bmRsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL1F1ZXVlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL0NvbGxlY3Rpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSJlbGVtZW50KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZmZlcihMamF2YS9sYW5nL09iamVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InBlZWsoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InBvbGwoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL1JhbmRvbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEopViIvPgotCQk8bWV0aG9kIG5hbWU9ImRvdWJsZXMoKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImRvdWJsZXMoREQpTGphdmEvdXRpbC9zdHJlYW0vRG91YmxlU3RyZWFtOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZG91YmxlcyhKKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImRvdWJsZXMoSkREKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImludHMoKUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImludHMoSUkpTGphdmEvdXRpbC9zdHJlYW0vSW50U3RyZWFtOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW50cyhKKUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImludHMoSklJKUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImxvbmdzKClMamF2YS91dGlsL3N0cmVhbS9Mb25nU3RyZWFtOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9uZ3MoSilMamF2YS91dGlsL3N0cmVhbS9Mb25nU3RyZWFtOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9uZ3MoSkopTGphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImxvbmdzKEpKSilMamF2YS91dGlsL3N0cmVhbS9Mb25nU3RyZWFtOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0Qm9vbGVhbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRCeXRlcyhbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dERvdWJsZSgpRCIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRGbG9hdCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRHYXVzc2lhbigpRCIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRJbnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0SW50KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRMb25nKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VlZChKKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvUmFuZG9tQWNjZXNzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvUmVzb3VyY2VCdW5kbGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyQ2FjaGUoKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJDYWNoZShMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zS2V5KExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJhc2VCdW5kbGVOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1bmRsZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9SZXNvdXJjZUJ1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCdW5kbGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL3V0aWwvUmVzb3VyY2VCdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnVuZGxlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTG9jYWxlO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KUxqYXZhL3V0aWwvUmVzb3VyY2VCdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QnVuZGxlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTG9jYWxlO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7TGphdmEvdXRpbC9SZXNvdXJjZUJ1bmRsZSRDb250cm9sOylMamF2YS91dGlsL1Jlc291cmNlQnVuZGxlOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCdW5kbGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Mb2NhbGU7TGphdmEvdXRpbC9SZXNvdXJjZUJ1bmRsZSRDb250cm9sOylMamF2YS91dGlsL1Jlc291cmNlQnVuZGxlOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCdW5kbGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9SZXNvdXJjZUJ1bmRsZSRDb250cm9sOylMamF2YS91dGlsL1Jlc291cmNlQnVuZGxlOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlzKClMamF2YS91dGlsL0VudW1lcmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsZSgpTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T2JqZWN0KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpbmcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmluZ0FycmF5KExqYXZhL2xhbmcvU3RyaW5nOylbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlR2V0T2JqZWN0KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVLZXlTZXQoKUxqYXZhL3V0aWwvU2V0OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJrZXlTZXQoKUxqYXZhL3V0aWwvU2V0OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXJlbnQoTGphdmEvdXRpbC9SZXNvdXJjZUJ1bmRsZTspViIvPgotCQk8ZmllbGQgbmFtZT0icGFyZW50Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL1Jlc291cmNlQnVuZGxlJENvbnRyb2wiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhbmRpZGF0ZUxvY2FsZXMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250cm9sKExqYXZhL3V0aWwvTGlzdDspTGphdmEvdXRpbC9SZXNvdXJjZUJ1bmRsZSRDb250cm9sOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZhbGxiYWNrTG9jYWxlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTG9jYWxlOylMamF2YS91dGlsL0xvY2FsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JtYXRzKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Tm9GYWxsYmFja0NvbnRyb2woTGphdmEvdXRpbC9MaXN0OylMamF2YS91dGlsL1Jlc291cmNlQnVuZGxlJENvbnRyb2w7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZVRvTGl2ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL0xvY2FsZTspSiIvPgotCQk8bWV0aG9kIG5hbWU9Im5lZWRzUmVsb2FkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTG9jYWxlO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7TGphdmEvdXRpbC9SZXNvdXJjZUJ1bmRsZTtKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdCdW5kbGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9Mb2NhbGU7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DbGFzc0xvYWRlcjtaKUxqYXZhL3V0aWwvUmVzb3VyY2VCdW5kbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9CdW5kbGVOYW1lKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTG9jYWxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1Jlc291cmNlTmFtZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfQ0xBU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9ERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JNQVRfUFJPUEVSVElFUyIvPgotCQk8ZmllbGQgbmFtZT0iVFRMX0RPTlRfQ0FDSEUiLz4KLQkJPGZpZWxkIG5hbWU9IlRUTF9OT19FWFBJUkFUSU9OX0NPTlRST0wiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvU2Nhbm5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIiBzaW5jZT0iMTkiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL0l0ZXJhdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0ZpbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1JlYWRhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25pby9jaGFubmVscy9SZWFkYWJsZUJ5dGVDaGFubmVsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25pby9jaGFubmVscy9SZWFkYWJsZUJ5dGVDaGFubmVsO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25pby9maWxlL1BhdGg7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uaW8vZmlsZS9QYXRoO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGltaXRlcigpTGphdmEvdXRpbC9yZWdleC9QYXR0ZXJuOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRJbkxpbmUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRJbkxpbmUoTGphdmEvdXRpbC9yZWdleC9QYXR0ZXJuOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kV2l0aGluSG9yaXpvbihMamF2YS9sYW5nL1N0cmluZztJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRXaXRoaW5Ib3Jpem9uKExqYXZhL3V0aWwvcmVnZXgvUGF0dGVybjtJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc05leHQoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNOZXh0KExqYXZhL3V0aWwvcmVnZXgvUGF0dGVybjspWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc05leHRCaWdEZWNpbWFsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTmV4dEJpZ0ludGVnZXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNOZXh0QmlnSW50ZWdlcihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNOZXh0Qm9vbGVhbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc05leHRCeXRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTmV4dEJ5dGUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTmV4dERvdWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc05leHRGbG9hdCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc05leHRJbnQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNOZXh0SW50KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc05leHRMaW5lKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTmV4dExvbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNOZXh0TG9uZyhJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNOZXh0U2hvcnQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNOZXh0U2hvcnQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW9FeGNlcHRpb24oKUxqYXZhL2lvL0lPRXhjZXB0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvY2FsZSgpTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWF0Y2goKUxqYXZhL3V0aWwvcmVnZXgvTWF0Y2hSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dChMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRCaWdEZWNpbWFsKClMamF2YS9tYXRoL0JpZ0RlY2ltYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dEJpZ0ludGVnZXIoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0QmlnSW50ZWdlcihJKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0Qm9vbGVhbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRCeXRlKClCIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dEJ5dGUoSSlCIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dERvdWJsZSgpRCIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRGbG9hdCgpRiIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRJbnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0SW50KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRMaW5lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0TG9uZygpSiIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRMb25nKEkpSiIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRTaG9ydCgpUyIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRTaG9ydChJKVMiLz4KLQkJPG1ldGhvZCBuYW1lPSJyYWRpeCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClMamF2YS91dGlsL1NjYW5uZXI7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNraXAoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvU2Nhbm5lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJza2lwKExqYXZhL3V0aWwvcmVnZXgvUGF0dGVybjspTGphdmEvdXRpbC9TY2FubmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InVzZURlbGltaXRlcihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9TY2FubmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InVzZURlbGltaXRlcihMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47KUxqYXZhL3V0aWwvU2Nhbm5lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1c2VMb2NhbGUoTGphdmEvdXRpbC9Mb2NhbGU7KUxqYXZhL3V0aWwvU2Nhbm5lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1c2VSYWRpeChJKUxqYXZhL3V0aWwvU2Nhbm5lcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvU2VydmljZUNvbmZpZ3VyYXRpb25FcnJvciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXJyb3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvU2VydmljZUxvYWRlciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9JdGVyYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWIiBzaW5jZT0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkKExqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL3V0aWwvU2VydmljZUxvYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9DbGFzc0xvYWRlcjspTGphdmEvdXRpbC9TZXJ2aWNlTG9hZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRJbnN0YWxsZWQoTGphdmEvbGFuZy9DbGFzczspTGphdmEvdXRpbC9TZXJ2aWNlTG9hZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbG9hZCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9TZXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvQ29sbGVjdGlvbiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9TaW1wbGVUaW1lWm9uZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvVGltZVpvbmUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9sYW5nL1N0cmluZztJSUlJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9sYW5nL1N0cmluZztJSUlJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGphdmEvbGFuZy9TdHJpbmc7SUlJSUlJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERTVFNhdmluZ3MoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5kUnVsZShJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuZFJ1bGUoSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5kUnVsZShJSUlJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RhcnRSdWxlKElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RhcnRSdWxlKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXJ0UnVsZShJSUlJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RhcnRZZWFyKEkpViIvPgotCQk8ZmllbGQgbmFtZT0iU1RBTkRBUkRfVElNRSIvPgotCQk8ZmllbGQgbmFtZT0iVVRDX1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IldBTExfVElNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9Tb3J0ZWRNYXAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvTWFwIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyYXRvcigpTGphdmEvdXRpbC9Db21wYXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpcnN0S2V5KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoZWFkTWFwKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL1NvcnRlZE1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXN0S2V5KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJNYXAoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvU29ydGVkTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9InRhaWxNYXAoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvU29ydGVkTWFwOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9Tb3J0ZWRTZXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvU2V0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyYXRvcigpTGphdmEvdXRpbC9Db21wYXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpcnN0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoZWFkU2V0KExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL1NvcnRlZFNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXN0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJTZXQoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvU29ydGVkU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InRhaWxTZXQoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvU29ydGVkU2V0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9TcGxpdGVyYXRvciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNoYXJhY3RlcmlzdGljcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImVzdGltYXRlU2l6ZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hSZW1haW5pbmcoTGphdmEvdXRpbC9mdW5jdGlvbi9Db25zdW1lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbXBhcmF0b3IoKUxqYXZhL3V0aWwvQ29tcGFyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeGFjdFNpemVJZktub3duKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQ2hhcmFjdGVyaXN0aWNzKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InRyeUFkdmFuY2UoTGphdmEvdXRpbC9mdW5jdGlvbi9Db25zdW1lcjspWiIvPgotCQk8bWV0aG9kIG5hbWU9InRyeVNwbGl0KClMamF2YS91dGlsL1NwbGl0ZXJhdG9yOyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OQ1VSUkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRElTVElOQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IklNTVVUQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iTk9OTlVMTCIvPgotCQk8ZmllbGQgbmFtZT0iT1JERVJFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0laRUQiLz4KLQkJPGZpZWxkIG5hbWU9IlNPUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iU1VCU0laRUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvU3BsaXRlcmF0b3IkT2ZEb3VibGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mUHJpbWl0aXZlIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaFJlbWFpbmluZyhMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZUNvbnN1bWVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5QWR2YW5jZShMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZUNvbnN1bWVyOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5U3BsaXQoKUxqYXZhL3V0aWwvU3BsaXRlcmF0b3IkT2ZEb3VibGU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mSW50IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9TcGxpdGVyYXRvciRPZlByaW1pdGl2ZSIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hSZW1haW5pbmcoTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRDb25zdW1lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InRyeUFkdmFuY2UoTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRDb25zdW1lcjspWiIvPgotCQk8bWV0aG9kIG5hbWU9InRyeVNwbGl0KClMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mSW50OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkxvbmciIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mUHJpbWl0aXZlIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaFJlbWFpbmluZyhMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdDb25zdW1lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InRyeUFkdmFuY2UoTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nQ29uc3VtZXI7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlTcGxpdCgpTGphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkxvbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mUHJpbWl0aXZlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9TcGxpdGVyYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hSZW1haW5pbmcoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlBZHZhbmNlKExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5U3BsaXQoKUxqYXZhL3V0aWwvU3BsaXRlcmF0b3IkT2ZQcmltaXRpdmU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL1NwbGl0ZXJhdG9ycyIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVtcHR5RG91YmxlU3BsaXRlcmF0b3IoKUxqYXZhL3V0aWwvU3BsaXRlcmF0b3IkT2ZEb3VibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW1wdHlJbnRTcGxpdGVyYXRvcigpTGphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbXB0eUxvbmdTcGxpdGVyYXRvcigpTGphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkxvbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW1wdHlTcGxpdGVyYXRvcigpTGphdmEvdXRpbC9TcGxpdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpdGVyYXRvcihMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mRG91YmxlOylMamF2YS91dGlsL1ByaW1pdGl2ZUl0ZXJhdG9yJE9mRG91YmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9Iml0ZXJhdG9yKExqYXZhL3V0aWwvU3BsaXRlcmF0b3IkT2ZJbnQ7KUxqYXZhL3V0aWwvUHJpbWl0aXZlSXRlcmF0b3IkT2ZJbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXRlcmF0b3IoTGphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkxvbmc7KUxqYXZhL3V0aWwvUHJpbWl0aXZlSXRlcmF0b3IkT2ZMb25nOyIvPgotCQk8bWV0aG9kIG5hbWU9Iml0ZXJhdG9yKExqYXZhL3V0aWwvU3BsaXRlcmF0b3I7KUxqYXZhL3V0aWwvSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BsaXRlcmF0b3IoTGphdmEvdXRpbC9Db2xsZWN0aW9uO0kpTGphdmEvdXRpbC9TcGxpdGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGxpdGVyYXRvcihMamF2YS91dGlsL0l0ZXJhdG9yO0pJKUxqYXZhL3V0aWwvU3BsaXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BsaXRlcmF0b3IoTGphdmEvdXRpbC9QcmltaXRpdmVJdGVyYXRvciRPZkRvdWJsZTtKSSlMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mRG91YmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0ZXJhdG9yKExqYXZhL3V0aWwvUHJpbWl0aXZlSXRlcmF0b3IkT2ZJbnQ7SkkpTGphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGxpdGVyYXRvcihMamF2YS91dGlsL1ByaW1pdGl2ZUl0ZXJhdG9yJE9mTG9uZztKSSlMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mTG9uZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGxpdGVyYXRvcihbREkpTGphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkRvdWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGxpdGVyYXRvcihbRElJSSlMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mRG91YmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0ZXJhdG9yKFtJSSlMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mSW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0ZXJhdG9yKFtJSUlJKUxqYXZhL3V0aWwvU3BsaXRlcmF0b3IkT2ZJbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BsaXRlcmF0b3IoW0pJKUxqYXZhL3V0aWwvU3BsaXRlcmF0b3IkT2ZMb25nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0ZXJhdG9yKFtKSUlJKUxqYXZhL3V0aWwvU3BsaXRlcmF0b3IkT2ZMb25nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0ZXJhdG9yKFtMamF2YS9sYW5nL09iamVjdDtJKUxqYXZhL3V0aWwvU3BsaXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BsaXRlcmF0b3IoW0xqYXZhL2xhbmcvT2JqZWN0O0lJSSlMamF2YS91dGlsL1NwbGl0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0ZXJhdG9yVW5rbm93blNpemUoTGphdmEvdXRpbC9JdGVyYXRvcjtJKUxqYXZhL3V0aWwvU3BsaXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BsaXRlcmF0b3JVbmtub3duU2l6ZShMamF2YS91dGlsL1ByaW1pdGl2ZUl0ZXJhdG9yJE9mRG91YmxlO0kpTGphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkRvdWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGxpdGVyYXRvclVua25vd25TaXplKExqYXZhL3V0aWwvUHJpbWl0aXZlSXRlcmF0b3IkT2ZJbnQ7SSlMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mSW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0ZXJhdG9yVW5rbm93blNpemUoTGphdmEvdXRpbC9QcmltaXRpdmVJdGVyYXRvciRPZkxvbmc7SSlMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mTG9uZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvU3BsaXRlcmF0b3JzJEFic3RyYWN0RG91YmxlU3BsaXRlcmF0b3IiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mRG91YmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvU3BsaXRlcmF0b3JzJEFic3RyYWN0SW50U3BsaXRlcmF0b3IiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mSW50Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEpJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvU3BsaXRlcmF0b3JzJEFic3RyYWN0TG9uZ1NwbGl0ZXJhdG9yIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkxvbmciLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9TcGxpdGVyYXRvcnMkQWJzdHJhY3RTcGxpdGVyYXRvciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvU3BsaXRlcmF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9TcGxpdHRhYmxlUmFuZG9tIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEopViIvPgotCQk8bWV0aG9kIG5hbWU9ImRvdWJsZXMoKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb3VibGVzKEREKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb3VibGVzKEopTGphdmEvdXRpbC9zdHJlYW0vRG91YmxlU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRvdWJsZXMoSkREKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRzKClMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW50cyhJSSlMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW50cyhKKUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRzKEpJSSlMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9uZ3MoKUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9uZ3MoSilMamF2YS91dGlsL3N0cmVhbS9Mb25nU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxvbmdzKEpKKUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9uZ3MoSkpKKUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dEJvb2xlYW4oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0RG91YmxlKClEIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dERvdWJsZShEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0RG91YmxlKEREKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0SW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dEludChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0SW50KElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0TG9uZygpSiIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRMb25nKEopSiIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRMb25nKEpKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGxpdCgpTGphdmEvdXRpbC9TcGxpdHRhYmxlUmFuZG9tOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9TdGFjayIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvVmVjdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW1wdHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZWVrKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3AoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1c2goTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNlYXJjaChMamF2YS9sYW5nL09iamVjdDspSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9TdHJpbmdKb2luZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7TGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGQoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL3V0aWwvU3RyaW5nSm9pbmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Imxlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im1lcmdlKExqYXZhL3V0aWwvU3RyaW5nSm9pbmVyOylMamF2YS91dGlsL1N0cmluZ0pvaW5lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbXB0eVZhbHVlKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS91dGlsL1N0cmluZ0pvaW5lcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvU3RyaW5nVG9rZW5pemVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL0VudW1lcmF0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvdW50VG9rZW5zKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzTW9yZVRva2VucygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRUb2tlbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dFRva2VuKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvVGltZVpvbmUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZhaWxhYmxlSURzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXZhaWxhYmxlSURzKEkpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERTVFNhdmluZ3MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0KClMamF2YS91dGlsL1RpbWVab25lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERpc3BsYXlOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREaXNwbGF5TmFtZShMamF2YS91dGlsL0xvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoWkkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlzcGxheU5hbWUoWklMamF2YS91dGlsL0xvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SUQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9mZnNldChJSUlJSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9mZnNldChKKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSYXdPZmZzZXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lWm9uZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9UaW1lWm9uZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lWm9uZShMamF2YS90aW1lL1pvbmVJZDspTGphdmEvdXRpbC9UaW1lWm9uZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1NhbWVSdWxlcyhMamF2YS91dGlsL1RpbWVab25lOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5EYXlsaWdodFRpbWUoTGphdmEvdXRpbC9EYXRlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2JzZXJ2ZXNEYXlsaWdodFRpbWUoKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHQoTGphdmEvdXRpbC9UaW1lWm9uZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldElEKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmF3T2Zmc2V0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InRvWm9uZUlkKClMamF2YS90aW1lL1pvbmVJZDsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InVzZURheWxpZ2h0VGltZSgpWiIvPgotCQk8ZmllbGQgbmFtZT0iTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iU0hPUlQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvVGltZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHVyZ2UoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2hlZHVsZShMamF2YS91dGlsL1RpbWVyVGFzaztKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2hlZHVsZShMamF2YS91dGlsL1RpbWVyVGFzaztKSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2NoZWR1bGUoTGphdmEvdXRpbC9UaW1lclRhc2s7TGphdmEvdXRpbC9EYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2NoZWR1bGUoTGphdmEvdXRpbC9UaW1lclRhc2s7TGphdmEvdXRpbC9EYXRlO0opViIvPgotCQk8bWV0aG9kIG5hbWU9InNjaGVkdWxlQXRGaXhlZFJhdGUoTGphdmEvdXRpbC9UaW1lclRhc2s7SkopViIvPgotCQk8bWV0aG9kIG5hbWU9InNjaGVkdWxlQXRGaXhlZFJhdGUoTGphdmEvdXRpbC9UaW1lclRhc2s7TGphdmEvdXRpbC9EYXRlO0opViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9UaW1lclRhc2siIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvUnVubmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYW5jZWwoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2hlZHVsZWRFeGVjdXRpb25UaW1lKClKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL1Rvb01hbnlMaXN0ZW5lcnNFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9UcmVlTWFwIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdE1hcCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9OYXZpZ2FibGVNYXAiIHNpbmNlPSI5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9Tb3J0ZWRNYXAiIHJlbW92ZWQ9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29tcGFyYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL1NvcnRlZE1hcDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9UcmVlU2V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdFNldCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9OYXZpZ2FibGVTZXQiIHNpbmNlPSI5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9Tb3J0ZWRTZXQiIHJlbW92ZWQ9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Db2xsZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29tcGFyYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL1NvcnRlZFNldDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9VVUlEIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0NvbXBhcmFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSkopViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb2NrU2VxdWVuY2UoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG8oTGphdmEvdXRpbC9VVUlEOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZnJvbVN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9VVUlEOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExlYXN0U2lnbmlmaWNhbnRCaXRzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9zdFNpZ25pZmljYW50Qml0cygpSiIvPgotCQk8bWV0aG9kIG5hbWU9Im5hbWVVVUlERnJvbUJ5dGVzKFtCKUxqYXZhL3V0aWwvVVVJRDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub2RlKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0icmFuZG9tVVVJRCgpTGphdmEvdXRpbC9VVUlEOyIvPgotCQk8bWV0aG9kIG5hbWU9InRpbWVzdGFtcCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9InZhcmlhbnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2ZXJzaW9uKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL1Vua25vd25Gb3JtYXRDb252ZXJzaW9uRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9JbGxlZ2FsRm9ybWF0RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udmVyc2lvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL1Vua25vd25Gb3JtYXRGbGFnc0V4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvSWxsZWdhbEZvcm1hdEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZsYWdzKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvVmVjdG9yIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdExpc3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvUmFuZG9tQWNjZXNzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEVsZW1lbnQoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYXBhY2l0eSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlJbnRvKFtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVsZW1lbnRBdChJKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImVsZW1lbnRzKClMamF2YS91dGlsL0VudW1lcmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuc3VyZUNhcGFjaXR5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpcnN0RWxlbWVudCgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5kZXhPZihMamF2YS9sYW5nL09iamVjdDtJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnRFbGVtZW50QXQoTGphdmEvbGFuZy9PYmplY3Q7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGFzdEVsZW1lbnQoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Imxhc3RJbmRleE9mKExqYXZhL2xhbmcvT2JqZWN0O0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUFsbEVsZW1lbnRzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlRWxlbWVudChMamF2YS9sYW5nL09iamVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUVsZW1lbnRBdChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbGVtZW50QXQoTGphdmEvbGFuZy9PYmplY3Q7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2l6ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmltVG9TaXplKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJjYXBhY2l0eUluY3JlbWVudCIvPgotCQk8ZmllbGQgbmFtZT0iZWxlbWVudENvdW50Ii8+Ci0JCTxmaWVsZCBuYW1lPSJlbGVtZW50RGF0YSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9XZWFrSGFzaE1hcCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvQWJzdHJhY3RNYXAiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9NYXA7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9BYnN0cmFjdEV4ZWN1dG9yU2VydmljZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yU2VydmljZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1Rhc2tGb3IoTGphdmEvbGFuZy9SdW5uYWJsZTtMamF2YS9sYW5nL09iamVjdDspTGphdmEvdXRpbC9jb25jdXJyZW50L1J1bm5hYmxlRnV0dXJlOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdUYXNrRm9yKExqYXZhL3V0aWwvY29uY3VycmVudC9DYWxsYWJsZTspTGphdmEvdXRpbC9jb25jdXJyZW50L1J1bm5hYmxlRnV0dXJlOyIgc2luY2U9IjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9BcnJheUJsb2NraW5nUXVldWUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0Fic3RyYWN0UXVldWUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvQmxvY2tpbmdRdWV1ZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSVopViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJWkxqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0Jsb2NraW5nRGVxdWUiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvRGVxdWUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvQmxvY2tpbmdRdWV1ZSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mZmVyRmlyc3QoTGphdmEvbGFuZy9PYmplY3Q7SkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9mZmVyTGFzdChMamF2YS9sYW5nL09iamVjdDtKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icG9sbEZpcnN0KEpMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InBvbGxMYXN0KEpMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEZpcnN0KExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0TGFzdChMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InRha2VGaXJzdCgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGFrZUxhc3QoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0Jsb2NraW5nUXVldWUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvUXVldWUiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmFpblRvKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWluVG8oTGphdmEvdXRpbC9Db2xsZWN0aW9uO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im9mZmVyKExqYXZhL2xhbmcvT2JqZWN0O0pMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb2xsKEpMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbWFpbmluZ0NhcGFjaXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0idGFrZSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvQnJva2VuQmFycmllckV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbGwoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0NhbmNlbGxhdGlvbkV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0Z1dHVyZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdEVpdGhlcihMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL3V0aWwvZnVuY3Rpb24vQ29uc3VtZXI7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0YWJsZUZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHRFaXRoZXJBc3luYyhMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL3V0aWwvZnVuY3Rpb24vQ29uc3VtZXI7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0YWJsZUZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHRFaXRoZXJBc3luYyhMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL3V0aWwvZnVuY3Rpb24vQ29uc3VtZXI7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsT2YoW0xqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0YWJsZUZ1dHVyZTspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFueU9mKFtMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0YWJsZUZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseVRvRWl0aGVyKExqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7TGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5VG9FaXRoZXJBc3luYyhMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0YWJsZUZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseVRvRWl0aGVyQXN5bmMoTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTtMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uO0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBsZXRlKExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGxldGVFeGNlcHRpb25hbGx5KExqYXZhL2xhbmcvVGhyb3dhYmxlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGxldGVkRnV0dXJlKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhjZXB0aW9uYWxseShMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Tm93KExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROdW1iZXJPZkRlcGVuZGVudHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGUoTGphdmEvdXRpbC9mdW5jdGlvbi9CaUZ1bmN0aW9uOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlQXN5bmMoTGphdmEvdXRpbC9mdW5jdGlvbi9CaUZ1bmN0aW9uOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlQXN5bmMoTGphdmEvdXRpbC9mdW5jdGlvbi9CaUZ1bmN0aW9uO0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ29tcGxldGVkRXhjZXB0aW9uYWxseSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImpvaW4oKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9idHJ1ZGVFeGNlcHRpb24oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvYnRydWRlVmFsdWUoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5BZnRlckJvdGgoTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTtMamF2YS9sYW5nL1J1bm5hYmxlOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icnVuQWZ0ZXJCb3RoQXN5bmMoTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTtMamF2YS9sYW5nL1J1bm5hYmxlOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icnVuQWZ0ZXJCb3RoQXN5bmMoTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTtMamF2YS9sYW5nL1J1bm5hYmxlO0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJ1bkFmdGVyRWl0aGVyKExqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7TGphdmEvbGFuZy9SdW5uYWJsZTspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJ1bkFmdGVyRWl0aGVyQXN5bmMoTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTtMamF2YS9sYW5nL1J1bm5hYmxlOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icnVuQWZ0ZXJFaXRoZXJBc3luYyhMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL2xhbmcvUnVubmFibGU7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icnVuQXN5bmMoTGphdmEvbGFuZy9SdW5uYWJsZTspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJ1bkFzeW5jKExqYXZhL2xhbmcvUnVubmFibGU7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3VwcGx5QXN5bmMoTGphdmEvdXRpbC9mdW5jdGlvbi9TdXBwbGllcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InN1cHBseUFzeW5jKExqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlbkFjY2VwdChMamF2YS91dGlsL2Z1bmN0aW9uL0NvbnN1bWVyOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlbkFjY2VwdEFzeW5jKExqYXZhL3V0aWwvZnVuY3Rpb24vQ29uc3VtZXI7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0YWJsZUZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuQWNjZXB0QXN5bmMoTGphdmEvdXRpbC9mdW5jdGlvbi9Db25zdW1lcjtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0YWJsZUZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuQWNjZXB0Qm90aChMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL3V0aWwvZnVuY3Rpb24vQmlDb25zdW1lcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRoZW5BY2NlcHRCb3RoQXN5bmMoTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTtMamF2YS91dGlsL2Z1bmN0aW9uL0JpQ29uc3VtZXI7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0YWJsZUZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuQWNjZXB0Qm90aEFzeW5jKExqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7TGphdmEvdXRpbC9mdW5jdGlvbi9CaUNvbnN1bWVyO0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRoZW5BcHBseShMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlbkFwcGx5QXN5bmMoTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRoZW5BcHBseUFzeW5jKExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlbkNvbWJpbmUoTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTtMamF2YS91dGlsL2Z1bmN0aW9uL0JpRnVuY3Rpb247KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0YWJsZUZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuQ29tYmluZUFzeW5jKExqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7TGphdmEvdXRpbC9mdW5jdGlvbi9CaUZ1bmN0aW9uOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlbkNvbWJpbmVBc3luYyhMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL3V0aWwvZnVuY3Rpb24vQmlGdW5jdGlvbjtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0YWJsZUZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuQ29tcG9zZShMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlbkNvbXBvc2VBc3luYyhMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlbkNvbXBvc2VBc3luYyhMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uO0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRoZW5SdW4oTGphdmEvbGFuZy9SdW5uYWJsZTspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRoZW5SdW5Bc3luYyhMamF2YS9sYW5nL1J1bm5hYmxlOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlblJ1bkFzeW5jKExqYXZhL2xhbmcvUnVubmFibGU7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGFibGVGdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2hlbkNvbXBsZXRlKExqYXZhL3V0aWwvZnVuY3Rpb24vQmlDb25zdW1lcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndoZW5Db21wbGV0ZUFzeW5jKExqYXZhL3V0aWwvZnVuY3Rpb24vQmlDb25zdW1lcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRhYmxlRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndoZW5Db21wbGV0ZUFzeW5jKExqYXZhL3V0aWwvZnVuY3Rpb24vQmlDb25zdW1lcjtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0YWJsZUZ1dHVyZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0YWJsZUZ1dHVyZSRBc3luY2hyb25vdXNDb21wbGV0aW9uVGFzayIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25FeGNlcHRpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblNlcnZpY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InBvbGwoKUxqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG9sbChKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylMamF2YS91dGlsL2NvbmN1cnJlbnQvRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InN1Ym1pdChMamF2YS9sYW5nL1J1bm5hYmxlO0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL2NvbmN1cnJlbnQvRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InN1Ym1pdChMamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGU7KUxqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGFrZSgpTGphdmEvdXRpbC9jb25jdXJyZW50L0Z1dHVyZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2UiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHRFaXRoZXIoTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTtMamF2YS91dGlsL2Z1bmN0aW9uL0NvbnN1bWVyOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdEVpdGhlckFzeW5jKExqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7TGphdmEvdXRpbC9mdW5jdGlvbi9Db25zdW1lcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHRFaXRoZXJBc3luYyhMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL3V0aWwvZnVuY3Rpb24vQ29uc3VtZXI7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5VG9FaXRoZXIoTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTtMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5VG9FaXRoZXJBc3luYyhMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlUb0VpdGhlckFzeW5jKExqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7TGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhjZXB0aW9uYWxseShMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZShMamF2YS91dGlsL2Z1bmN0aW9uL0JpRnVuY3Rpb247KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlQXN5bmMoTGphdmEvdXRpbC9mdW5jdGlvbi9CaUZ1bmN0aW9uOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZUFzeW5jKExqYXZhL3V0aWwvZnVuY3Rpb24vQmlGdW5jdGlvbjtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icnVuQWZ0ZXJCb3RoKExqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7TGphdmEvbGFuZy9SdW5uYWJsZTspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5BZnRlckJvdGhBc3luYyhMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL2xhbmcvUnVubmFibGU7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icnVuQWZ0ZXJCb3RoQXN5bmMoTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTtMamF2YS9sYW5nL1J1bm5hYmxlO0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5BZnRlckVpdGhlcihMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL2xhbmcvUnVubmFibGU7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icnVuQWZ0ZXJFaXRoZXJBc3luYyhMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL2xhbmcvUnVubmFibGU7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icnVuQWZ0ZXJFaXRoZXJBc3luYyhMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL2xhbmcvUnVubmFibGU7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRoZW5BY2NlcHQoTGphdmEvdXRpbC9mdW5jdGlvbi9Db25zdW1lcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuQWNjZXB0QXN5bmMoTGphdmEvdXRpbC9mdW5jdGlvbi9Db25zdW1lcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuQWNjZXB0QXN5bmMoTGphdmEvdXRpbC9mdW5jdGlvbi9Db25zdW1lcjtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlbkFjY2VwdEJvdGgoTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTtMamF2YS91dGlsL2Z1bmN0aW9uL0JpQ29uc3VtZXI7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlbkFjY2VwdEJvdGhBc3luYyhMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL3V0aWwvZnVuY3Rpb24vQmlDb25zdW1lcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuQWNjZXB0Qm90aEFzeW5jKExqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7TGphdmEvdXRpbC9mdW5jdGlvbi9CaUNvbnN1bWVyO0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuQXBwbHkoTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuQXBwbHlBc3luYyhMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRoZW5BcHBseUFzeW5jKExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRoZW5Db21iaW5lKExqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7TGphdmEvdXRpbC9mdW5jdGlvbi9CaUZ1bmN0aW9uOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRoZW5Db21iaW5lQXN5bmMoTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTtMamF2YS91dGlsL2Z1bmN0aW9uL0JpRnVuY3Rpb247KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlbkNvbWJpbmVBc3luYyhMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlO0xqYXZhL3V0aWwvZnVuY3Rpb24vQmlGdW5jdGlvbjtMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlbkNvbXBvc2UoTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuQ29tcG9zZUFzeW5jKExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlbkNvbXBvc2VBc3luYyhMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uO0xqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aGVuUnVuKExqYXZhL2xhbmcvUnVubmFibGU7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlblJ1bkFzeW5jKExqYXZhL2xhbmcvUnVubmFibGU7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0aW9uU3RhZ2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhlblJ1bkFzeW5jKExqYXZhL2xhbmcvUnVubmFibGU7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQ29tcGxldGFibGVGdXR1cmUoKUxqYXZhL3V0aWwvY29uY3VycmVudC9Db21wbGV0YWJsZUZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aGVuQ29tcGxldGUoTGphdmEvdXRpbC9mdW5jdGlvbi9CaUNvbnN1bWVyOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlOyIvPgotCQk8bWV0aG9kIG5hbWU9IndoZW5Db21wbGV0ZUFzeW5jKExqYXZhL3V0aWwvZnVuY3Rpb24vQmlDb25zdW1lcjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TdGFnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3aGVuQ29tcGxldGVBc3luYyhMamF2YS91dGlsL2Z1bmN0aW9uL0JpQ29uc3VtZXI7TGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29tcGxldGlvblN0YWdlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0NvbmN1cnJlbnRIYXNoTWFwIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdE1hcCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Db25jdXJyZW50TWFwIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJRilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zKExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWxlbWVudHMoKUxqYXZhL3V0aWwvRW51bWVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaChKTGphdmEvdXRpbC9mdW5jdGlvbi9CaUNvbnN1bWVyOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoKEpMamF2YS91dGlsL2Z1bmN0aW9uL0JpRnVuY3Rpb247TGphdmEvdXRpbC9mdW5jdGlvbi9Db25zdW1lcjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaEVudHJ5KEpMamF2YS91dGlsL2Z1bmN0aW9uL0NvbnN1bWVyOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoRW50cnkoSkxqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247TGphdmEvdXRpbC9mdW5jdGlvbi9Db25zdW1lcjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaEtleShKTGphdmEvdXRpbC9mdW5jdGlvbi9Db25zdW1lcjspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaEtleShKTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjtMamF2YS91dGlsL2Z1bmN0aW9uL0NvbnN1bWVyOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoVmFsdWUoSkxqYXZhL3V0aWwvZnVuY3Rpb24vQ29uc3VtZXI7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2hWYWx1ZShKTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjtMamF2YS91dGlsL2Z1bmN0aW9uL0NvbnN1bWVyOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJrZXlTZXQoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Db25jdXJyZW50SGFzaE1hcCRLZXlTZXRWaWV3OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5cygpTGphdmEvdXRpbC9FbnVtZXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXBwaW5nQ291bnQoKUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0tleVNldCgpTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbmN1cnJlbnRIYXNoTWFwJEtleVNldFZpZXc7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdLZXlTZXQoSSlMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29uY3VycmVudEhhc2hNYXAkS2V5U2V0VmlldzsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlZHVjZShKTGphdmEvdXRpbC9mdW5jdGlvbi9CaUZ1bmN0aW9uO0xqYXZhL3V0aWwvZnVuY3Rpb24vQmlGdW5jdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWR1Y2VFbnRyaWVzKEpMamF2YS91dGlsL2Z1bmN0aW9uL0JpRnVuY3Rpb247KUxqYXZhL3V0aWwvTWFwJEVudHJ5OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVkdWNlRW50cmllcyhKTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjtMamF2YS91dGlsL2Z1bmN0aW9uL0JpRnVuY3Rpb247KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVkdWNlRW50cmllc1RvRG91YmxlKEpMamF2YS91dGlsL2Z1bmN0aW9uL1RvRG91YmxlRnVuY3Rpb247RExqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlQmluYXJ5T3BlcmF0b3I7KUQiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlZHVjZUVudHJpZXNUb0ludChKTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0ludEZ1bmN0aW9uO0lMamF2YS91dGlsL2Z1bmN0aW9uL0ludEJpbmFyeU9wZXJhdG9yOylJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWR1Y2VFbnRyaWVzVG9Mb25nKEpMamF2YS91dGlsL2Z1bmN0aW9uL1RvTG9uZ0Z1bmN0aW9uO0pMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdCaW5hcnlPcGVyYXRvcjspSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVkdWNlS2V5cyhKTGphdmEvdXRpbC9mdW5jdGlvbi9CaUZ1bmN0aW9uOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlZHVjZUtleXMoSkxqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247TGphdmEvdXRpbC9mdW5jdGlvbi9CaUZ1bmN0aW9uOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlZHVjZUtleXNUb0RvdWJsZShKTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0RvdWJsZUZ1bmN0aW9uO0RMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZUJpbmFyeU9wZXJhdG9yOylEIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWR1Y2VLZXlzVG9JbnQoSkxqYXZhL3V0aWwvZnVuY3Rpb24vVG9JbnRGdW5jdGlvbjtJTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRCaW5hcnlPcGVyYXRvcjspSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVkdWNlS2V5c1RvTG9uZyhKTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0xvbmdGdW5jdGlvbjtKTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nQmluYXJ5T3BlcmF0b3I7KUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlZHVjZVRvRG91YmxlKEpMamF2YS91dGlsL2Z1bmN0aW9uL1RvRG91YmxlQmlGdW5jdGlvbjtETGphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVCaW5hcnlPcGVyYXRvcjspRCIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVkdWNlVG9JbnQoSkxqYXZhL3V0aWwvZnVuY3Rpb24vVG9JbnRCaUZ1bmN0aW9uO0lMamF2YS91dGlsL2Z1bmN0aW9uL0ludEJpbmFyeU9wZXJhdG9yOylJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWR1Y2VUb0xvbmcoSkxqYXZhL3V0aWwvZnVuY3Rpb24vVG9Mb25nQmlGdW5jdGlvbjtKTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nQmluYXJ5T3BlcmF0b3I7KUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlZHVjZVZhbHVlcyhKTGphdmEvdXRpbC9mdW5jdGlvbi9CaUZ1bmN0aW9uOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InJlZHVjZVZhbHVlcyhKTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjtMamF2YS91dGlsL2Z1bmN0aW9uL0JpRnVuY3Rpb247KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVkdWNlVmFsdWVzVG9Eb3VibGUoSkxqYXZhL3V0aWwvZnVuY3Rpb24vVG9Eb3VibGVGdW5jdGlvbjtETGphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVCaW5hcnlPcGVyYXRvcjspRCIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVkdWNlVmFsdWVzVG9JbnQoSkxqYXZhL3V0aWwvZnVuY3Rpb24vVG9JbnRGdW5jdGlvbjtJTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRCaW5hcnlPcGVyYXRvcjspSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVkdWNlVmFsdWVzVG9Mb25nKEpMamF2YS91dGlsL2Z1bmN0aW9uL1RvTG9uZ0Z1bmN0aW9uO0pMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdCaW5hcnlPcGVyYXRvcjspSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2VhcmNoKEpMamF2YS91dGlsL2Z1bmN0aW9uL0JpRnVuY3Rpb247KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2VhcmNoRW50cmllcyhKTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZWFyY2hLZXlzKEpMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNlYXJjaFZhbHVlcyhKTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iMjQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Db25jdXJyZW50SGFzaE1hcCRDb2xsZWN0aW9uVmlldyIgc2luY2U9IjI0IiByZW1vdmVkPSIyOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL0NvbGxlY3Rpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXAoKUxqYXZhL3V0aWwvY29uY3VycmVudC9Db25jdXJyZW50SGFzaE1hcDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Db25jdXJyZW50SGFzaE1hcCRLZXlTZXRWaWV3IiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0IiBzaW5jZT0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvQ29uY3VycmVudEhhc2hNYXAkQ29sbGVjdGlvblZpZXciIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9TZXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvY29uY3VycmVudC9Db25jdXJyZW50SGFzaE1hcDtMamF2YS9sYW5nL09iamVjdDspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWFwcGVkVmFsdWUoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0NvbmN1cnJlbnRMaW5rZWREZXF1ZSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0Fic3RyYWN0Q29sbGVjdGlvbiIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvRGVxdWUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Db2xsZWN0aW9uOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvQ29uY3VycmVudExpbmtlZFF1ZXVlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdFF1ZXVlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0NvbmN1cnJlbnRNYXAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvTWFwIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0SWZBYnNlbnQoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZShMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2UoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2UoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Db25jdXJyZW50TmF2aWdhYmxlTWFwIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL05hdmlnYWJsZU1hcCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Db25jdXJyZW50TWFwIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVzY2VuZGluZ01hcCgpTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbmN1cnJlbnROYXZpZ2FibGVNYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGVhZE1hcChMamF2YS9sYW5nL09iamVjdDspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbmN1cnJlbnROYXZpZ2FibGVNYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGVhZE1hcChMamF2YS9sYW5nL09iamVjdDtaKUxqYXZhL3V0aWwvY29uY3VycmVudC9Db25jdXJyZW50TmF2aWdhYmxlTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImtleVNldCgpTGphdmEvdXRpbC9OYXZpZ2FibGVTZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3ViTWFwKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29uY3VycmVudE5hdmlnYWJsZU1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJNYXAoTGphdmEvbGFuZy9PYmplY3Q7WkxqYXZhL2xhbmcvT2JqZWN0O1opTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbmN1cnJlbnROYXZpZ2FibGVNYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGFpbE1hcChMamF2YS9sYW5nL09iamVjdDspTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbmN1cnJlbnROYXZpZ2FibGVNYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGFpbE1hcChMamF2YS9sYW5nL09iamVjdDtaKUxqYXZhL3V0aWwvY29uY3VycmVudC9Db25jdXJyZW50TmF2aWdhYmxlTWFwOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0NvbmN1cnJlbnRTa2lwTGlzdE1hcCIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvQWJzdHJhY3RNYXAiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Db25jdXJyZW50TmF2aWdhYmxlTWFwIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29tcGFyYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL1NvcnRlZE1hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb25lKClMamF2YS91dGlsL2NvbmN1cnJlbnQvQ29uY3VycmVudFNraXBMaXN0TWFwOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0NvbmN1cnJlbnRTa2lwTGlzdFNldCIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvQWJzdHJhY3RTZXQiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvTmF2aWdhYmxlU2V0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0NvbXBhcmF0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Tb3J0ZWRTZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9uZSgpTGphdmEvdXRpbC9jb25jdXJyZW50L0NvbmN1cnJlbnRTa2lwTGlzdFNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoZWFkU2V0KExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL05hdmlnYWJsZVNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJTZXQoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvTmF2aWdhYmxlU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9InRhaWxTZXQoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvTmF2aWdhYmxlU2V0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0NvcHlPbldyaXRlQXJyYXlMaXN0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvTGlzdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvUmFuZG9tQWNjZXNzIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBbGxBYnNlbnQoTGphdmEvdXRpbC9Db2xsZWN0aW9uOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSWZBYnNlbnQoTGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmRleE9mKExqYXZhL2xhbmcvT2JqZWN0O0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9Imxhc3RJbmRleE9mKExqYXZhL2xhbmcvT2JqZWN0O0kpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0NvcHlPbldyaXRlQXJyYXlTZXQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0Fic3RyYWN0U2V0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0NvdW50RG93bkxhdGNoIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXdhaXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhd2FpdChKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY291bnREb3duKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q291bnQoKUoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Db3VudGVkQ29tcGxldGVyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblRhc2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9jb25jdXJyZW50L0NvdW50ZWRDb21wbGV0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9jb25jdXJyZW50L0NvdW50ZWRDb21wbGV0ZXI7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVG9QZW5kaW5nQ291bnQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZUFuZFNldFBlbmRpbmdDb3VudChJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcHV0ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY3JlbWVudFBlbmRpbmdDb3VudFVubGVzc1plcm8oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaXJzdENvbXBsZXRlKClMamF2YS91dGlsL2NvbmN1cnJlbnQvQ291bnRlZENvbXBsZXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wbGV0ZXIoKUxqYXZhL3V0aWwvY29uY3VycmVudC9Db3VudGVkQ29tcGxldGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlbmRpbmdDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvb3QoKUxqYXZhL3V0aWwvY29uY3VycmVudC9Db3VudGVkQ29tcGxldGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImhlbHBDb21wbGV0ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0Q29tcGxldGUoKUxqYXZhL3V0aWwvY29uY3VycmVudC9Db3VudGVkQ29tcGxldGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9uQ29tcGxldGlvbihMamF2YS91dGlsL2NvbmN1cnJlbnQvQ291bnRlZENvbXBsZXRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9uRXhjZXB0aW9uYWxDb21wbGV0aW9uKExqYXZhL2xhbmcvVGhyb3dhYmxlO0xqYXZhL3V0aWwvY29uY3VycmVudC9Db3VudGVkQ29tcGxldGVyOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJvcGFnYXRlQ29tcGxldGlvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9InF1aWV0bHlDb21wbGV0ZVJvb3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQZW5kaW5nQ291bnQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5Q29tcGxldGUoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9DeWNsaWNCYXJyaWVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS9sYW5nL1J1bm5hYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXdhaXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhd2FpdChKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TnVtYmVyV2FpdGluZygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcnRpZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Jyb2tlbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvRGVsYXlRdWV1ZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvQWJzdHJhY3RRdWV1ZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9CbG9ja2luZ1F1ZXVlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMamF2YS91dGlsL2NvbmN1cnJlbnQvRGVsYXllZDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9mZmVyKExqYXZhL3V0aWwvY29uY3VycmVudC9EZWxheWVkOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib2ZmZXIoTGphdmEvdXRpbC9jb25jdXJyZW50L0RlbGF5ZWQ7SkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InBlZWsoKUxqYXZhL3V0aWwvY29uY3VycmVudC9EZWxheWVkOyIvPgotCQk8bWV0aG9kIG5hbWU9InBvbGwoKUxqYXZhL3V0aWwvY29uY3VycmVudC9EZWxheWVkOyIvPgotCQk8bWV0aG9kIG5hbWU9InBvbGwoSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspTGphdmEvdXRpbC9jb25jdXJyZW50L0RlbGF5ZWQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KExqYXZhL3V0aWwvY29uY3VycmVudC9EZWxheWVkOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idGFrZSgpTGphdmEvdXRpbC9jb25jdXJyZW50L0RlbGF5ZWQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvRGVsYXllZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9Db21wYXJhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVsYXkoTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvRXhjaGFuZ2VyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGNoYW5nZShMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhjaGFuZ2UoTGphdmEvbGFuZy9PYmplY3Q7SkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0aW9uRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZShMamF2YS9sYW5nL1J1bm5hYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3JDb21wbGV0aW9uU2VydmljZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0NvbXBsZXRpb25TZXJ2aWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3I7TGphdmEvdXRpbC9jb25jdXJyZW50L0Jsb2NraW5nUXVldWU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvclNlcnZpY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvciIvPgotCQk8bWV0aG9kIG5hbWU9ImF3YWl0VGVybWluYXRpb24oSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Imludm9rZUFsbChMamF2YS91dGlsL0NvbGxlY3Rpb247KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZva2VBbGwoTGphdmEvdXRpbC9Db2xsZWN0aW9uO0pMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZva2VBbnkoTGphdmEvdXRpbC9Db2xsZWN0aW9uOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZva2VBbnkoTGphdmEvdXRpbC9Db2xsZWN0aW9uO0pMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2h1dGRvd24oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Rlcm1pbmF0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaHV0ZG93bigpViIvPgotCQk8bWV0aG9kIG5hbWU9InNodXRkb3duTm93KClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3VibWl0KExqYXZhL2xhbmcvUnVubmFibGU7KUxqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3VibWl0KExqYXZhL2xhbmcvUnVubmFibGU7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3VibWl0KExqYXZhL3V0aWwvY29uY3VycmVudC9DYWxsYWJsZTspTGphdmEvdXRpbC9jb25jdXJyZW50L0Z1dHVyZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvcnMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbGxhYmxlKExqYXZhL2xhbmcvUnVubmFibGU7KUxqYXZhL3V0aWwvY29uY3VycmVudC9DYWxsYWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYWxsYWJsZShMamF2YS9sYW5nL1J1bm5hYmxlO0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FsbGFibGUoTGphdmEvc2VjdXJpdHkvUHJpdmlsZWdlZEFjdGlvbjspTGphdmEvdXRpbC9jb25jdXJyZW50L0NhbGxhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNhbGxhYmxlKExqYXZhL3NlY3VyaXR5L1ByaXZpbGVnZWRFeGNlcHRpb25BY3Rpb247KUxqYXZhL3V0aWwvY29uY3VycmVudC9DYWxsYWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWZhdWx0VGhyZWFkRmFjdG9yeSgpTGphdmEvdXRpbC9jb25jdXJyZW50L1RocmVhZEZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3Q2FjaGVkVGhyZWFkUG9vbCgpTGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yU2VydmljZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdDYWNoZWRUaHJlYWRQb29sKExqYXZhL3V0aWwvY29uY3VycmVudC9UaHJlYWRGYWN0b3J5OylMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3JTZXJ2aWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0ZpeGVkVGhyZWFkUG9vbChJKUxqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvclNlcnZpY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3Rml4ZWRUaHJlYWRQb29sKElMamF2YS91dGlsL2NvbmN1cnJlbnQvVGhyZWFkRmFjdG9yeTspTGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yU2VydmljZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdTY2hlZHVsZWRUaHJlYWRQb29sKEkpTGphdmEvdXRpbC9jb25jdXJyZW50L1NjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdTY2hlZHVsZWRUaHJlYWRQb29sKElMamF2YS91dGlsL2NvbmN1cnJlbnQvVGhyZWFkRmFjdG9yeTspTGphdmEvdXRpbC9jb25jdXJyZW50L1NjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdTaW5nbGVUaHJlYWRFeGVjdXRvcigpTGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yU2VydmljZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdTaW5nbGVUaHJlYWRFeGVjdXRvcihMamF2YS91dGlsL2NvbmN1cnJlbnQvVGhyZWFkRmFjdG9yeTspTGphdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dG9yU2VydmljZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdTaW5nbGVUaHJlYWRTY2hlZHVsZWRFeGVjdXRvcigpTGphdmEvdXRpbC9jb25jdXJyZW50L1NjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdTaW5nbGVUaHJlYWRTY2hlZHVsZWRFeGVjdXRvcihMamF2YS91dGlsL2NvbmN1cnJlbnQvVGhyZWFkRmFjdG9yeTspTGphdmEvdXRpbC9jb25jdXJyZW50L1NjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdXb3JrU3RlYWxpbmdQb29sKClMamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3JTZXJ2aWNlOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3V29ya1N0ZWFsaW5nUG9vbChJKUxqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvclNlcnZpY2U7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcml2aWxlZ2VkQ2FsbGFibGUoTGphdmEvdXRpbC9jb25jdXJyZW50L0NhbGxhYmxlOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJpdmlsZWdlZENhbGxhYmxlVXNpbmdDdXJyZW50Q2xhc3NMb2FkZXIoTGphdmEvdXRpbC9jb25jdXJyZW50L0NhbGxhYmxlOylMamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJpdmlsZWdlZFRocmVhZEZhY3RvcnkoKUxqYXZhL3V0aWwvY29uY3VycmVudC9UaHJlYWRGYWN0b3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9InVuY29uZmlndXJhYmxlRXhlY3V0b3JTZXJ2aWNlKExqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvclNlcnZpY2U7KUxqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRvclNlcnZpY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5jb25maWd1cmFibGVTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UoTGphdmEvdXRpbC9jb25jdXJyZW50L1NjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTspTGphdmEvdXRpbC9jb25jdXJyZW50L1NjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblBvb2wiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0Fic3RyYWN0RXhlY3V0b3JTZXJ2aWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJTGphdmEvdXRpbC9jb25jdXJyZW50L0ZvcmtKb2luUG9vbCRGb3JrSm9pbldvcmtlclRocmVhZEZhY3Rvcnk7TGphdmEvbGFuZy9UaHJlYWQkVW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyO1opViIvPgotCQk8bWV0aG9kIG5hbWU9ImF3YWl0UXVpZXNjZW5jZShKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tbW9uUG9vbCgpTGphdmEvdXRpbC9jb25jdXJyZW50L0ZvcmtKb2luUG9vbDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImRyYWluVGFza3NUbyhMamF2YS91dGlsL0NvbGxlY3Rpb247KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdXRlKExqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblRhc2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY3RpdmVUaHJlYWRDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFzeW5jTW9kZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbW1vblBvb2xQYXJhbGxlbGlzbSgpSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmFjdG9yeSgpTGphdmEvdXRpbC9jb25jdXJyZW50L0ZvcmtKb2luUG9vbCRGb3JrSm9pbldvcmtlclRocmVhZEZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYWxsZWxpc20oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb29sU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFF1ZXVlZFN1Ym1pc3Npb25Db3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFF1ZXVlZFRhc2tDb3VudCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJ1bm5pbmdUaHJlYWRDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0ZWFsQ291bnQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVbmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIoKUxqYXZhL2xhbmcvVGhyZWFkJFVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNRdWV1ZWRTdWJtaXNzaW9ucygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imludm9rZShMamF2YS91dGlsL2NvbmN1cnJlbnQvRm9ya0pvaW5UYXNrOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1F1aWVzY2VudCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVGVybWluYXRpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYW5hZ2VkQmxvY2soTGphdmEvdXRpbC9jb25jdXJyZW50L0ZvcmtKb2luUG9vbCRNYW5hZ2VkQmxvY2tlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InBvbGxTdWJtaXNzaW9uKClMamF2YS91dGlsL2NvbmN1cnJlbnQvRm9ya0pvaW5UYXNrOyIvPgotCQk8bWV0aG9kIG5hbWU9InN1Ym1pdChMamF2YS9sYW5nL1J1bm5hYmxlOylMamF2YS91dGlsL2NvbmN1cnJlbnQvRm9ya0pvaW5UYXNrOyIvPgotCQk8bWV0aG9kIG5hbWU9InN1Ym1pdChMamF2YS9sYW5nL1J1bm5hYmxlO0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL2NvbmN1cnJlbnQvRm9ya0pvaW5UYXNrOyIvPgotCQk8bWV0aG9kIG5hbWU9InN1Ym1pdChMamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGU7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblRhc2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3VibWl0KExqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblRhc2s7KUxqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblRhc2s7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJkZWZhdWx0Rm9ya0pvaW5Xb3JrZXJUaHJlYWRGYWN0b3J5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvRm9ya0pvaW5Qb29sJEZvcmtKb2luV29ya2VyVGhyZWFkRmFjdG9yeSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1RocmVhZChMamF2YS91dGlsL2NvbmN1cnJlbnQvRm9ya0pvaW5Qb29sOylMamF2YS91dGlsL2NvbmN1cnJlbnQvRm9ya0pvaW5Xb3JrZXJUaHJlYWQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvRm9ya0pvaW5Qb29sJE1hbmFnZWRCbG9ja2VyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmxvY2soKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlbGVhc2FibGUoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblRhc2siIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvRnV0dXJlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRhcHQoTGphdmEvbGFuZy9SdW5uYWJsZTspTGphdmEvdXRpbC9jb25jdXJyZW50L0ZvcmtKb2luVGFzazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGFwdChMamF2YS9sYW5nL1J1bm5hYmxlO0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL2NvbmN1cnJlbnQvRm9ya0pvaW5UYXNrOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkYXB0KExqYXZhL3V0aWwvY29uY3VycmVudC9DYWxsYWJsZTspTGphdmEvdXRpbC9jb25jdXJyZW50L0ZvcmtKb2luVGFzazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlQW5kU2V0Rm9ya0pvaW5UYXNrVGFnKFNTKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBsZXRlKExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGxldGVFeGNlcHRpb25hbGx5KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlYygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcmsoKUxqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblRhc2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhjZXB0aW9uKClMamF2YS9sYW5nL1Rocm93YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JrSm9pblRhc2tUYWcoKVMiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvb2woKUxqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblBvb2w7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVldWVkVGFza0NvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmF3UmVzdWx0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXJwbHVzUXVldWVkVGFza0NvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGVscFF1aWVzY2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbkZvcmtKb2luUG9vbCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imludm9rZSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW52b2tlQWxsKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Imludm9rZUFsbChMamF2YS91dGlsL2NvbmN1cnJlbnQvRm9ya0pvaW5UYXNrO0xqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblRhc2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZva2VBbGwoW0xqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblRhc2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbXBsZXRlZEFibm9ybWFsbHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbXBsZXRlZE5vcm1hbGx5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iam9pbigpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGVla05leHRMb2NhbFRhc2soKUxqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblRhc2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG9sbE5leHRMb2NhbFRhc2soKUxqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblRhc2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icG9sbFRhc2soKUxqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblRhc2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVpZXRseUNvbXBsZXRlKClWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWlldGx5SW52b2tlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icXVpZXRseUpvaW4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWluaXRpYWxpemUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGb3JrSm9pblRhc2tUYWcoUylTIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSYXdSZXN1bHQoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlVbmZvcmsoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pbldvcmtlclRocmVhZCIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL1RocmVhZCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL2NvbmN1cnJlbnQvRm9ya0pvaW5Qb29sOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9vbCgpTGphdmEvdXRpbC9jb25jdXJyZW50L0ZvcmtKb2luUG9vbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb29sSW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvblN0YXJ0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib25UZXJtaW5hdGlvbihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0Z1dHVyZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2FuY2VsKFopWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldCgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KEpMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQ2FuY2VsbGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEb25lKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvRnV0dXJlVGFzayIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9SdW5uYWJsZSIgcmVtb3ZlZD0iOSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmUiIHJlbW92ZWQ9IjkiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvUnVubmFibGVGdXR1cmUiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvUnVubmFibGU7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9jb25jdXJyZW50L0NhbGxhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9uZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJ1bkFuZFJlc2V0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXhjZXB0aW9uKExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvTGlua2VkQmxvY2tpbmdEZXF1ZSIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvQWJzdHJhY3RRdWV1ZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9CbG9ja2luZ0RlcXVlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0NvbGxlY3Rpb247KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9MaW5rZWRCbG9ja2luZ1F1ZXVlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdFF1ZXVlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0Jsb2NraW5nUXVldWUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0xpbmtlZFRyYW5zZmVyUXVldWUiIHNpbmNlPSIyMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdFF1ZXVlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L1RyYW5zZmVyUXVldWUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Db2xsZWN0aW9uOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvUGhhc2VyIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL2NvbmN1cnJlbnQvUGhhc2VyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvY29uY3VycmVudC9QaGFzZXI7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXJyaXZlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXJyaXZlQW5kQXdhaXRBZHZhbmNlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXJyaXZlQW5kRGVyZWdpc3RlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImF3YWl0QWR2YW5jZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJhd2FpdEFkdmFuY2VJbnRlcnJ1cHRpYmx5KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImF3YWl0QWR2YW5jZUludGVycnVwdGlibHkoSUpMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWxrUmVnaXN0ZXIoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yY2VUZXJtaW5hdGlvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFycml2ZWRQYXJ0aWVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50KClMamF2YS91dGlsL2NvbmN1cnJlbnQvUGhhc2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBoYXNlKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVnaXN0ZXJlZFBhcnRpZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb290KClMamF2YS91dGlsL2NvbmN1cnJlbnQvUGhhc2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVuYXJyaXZlZFBhcnRpZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Rlcm1pbmF0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvbkFkdmFuY2UoSUkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvUHJpb3JpdHlCbG9ja2luZ1F1ZXVlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9BYnN0cmFjdFF1ZXVlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L0Jsb2NraW5nUXVldWUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS91dGlsL0NvbXBhcmF0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Db2xsZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyYXRvcigpTGphdmEvdXRpbC9Db21wYXJhdG9yOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L1JlY3Vyc2l2ZUFjdGlvbiIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvRm9ya0pvaW5UYXNrIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcHV0ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJhd1Jlc3VsdCgpTGphdmEvbGFuZy9Wb2lkOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJhd1Jlc3VsdChMamF2YS9sYW5nL1ZvaWQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9SZWN1cnNpdmVUYXNrIiBzaW5jZT0iMjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9Gb3JrSm9pblRhc2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wdXRlKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9SZWplY3RlZEV4ZWN1dGlvbkV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L1JlamVjdGVkRXhlY3V0aW9uSGFuZGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVqZWN0ZWRFeGVjdXRpb24oTGphdmEvbGFuZy9SdW5uYWJsZTtMamF2YS91dGlsL2NvbmN1cnJlbnQvVGhyZWFkUG9vbEV4ZWN1dG9yOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvUnVubmFibGVGdXR1cmUiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvUnVubmFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvRnV0dXJlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvUnVubmFibGVTY2hlZHVsZWRGdXR1cmUiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9SdW5uYWJsZUZ1dHVyZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9TY2hlZHVsZWRGdXR1cmUiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1BlcmlvZGljKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvRXhlY3V0b3JTZXJ2aWNlIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2NoZWR1bGUoTGphdmEvbGFuZy9SdW5uYWJsZTtKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylMamF2YS91dGlsL2NvbmN1cnJlbnQvU2NoZWR1bGVkRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNjaGVkdWxlKExqYXZhL3V0aWwvY29uY3VycmVudC9DYWxsYWJsZTtKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylMamF2YS91dGlsL2NvbmN1cnJlbnQvU2NoZWR1bGVkRnV0dXJlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNjaGVkdWxlQXRGaXhlZFJhdGUoTGphdmEvbGFuZy9SdW5uYWJsZTtKSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspTGphdmEvdXRpbC9jb25jdXJyZW50L1NjaGVkdWxlZEZ1dHVyZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzY2hlZHVsZVdpdGhGaXhlZERlbGF5KExqYXZhL2xhbmcvUnVubmFibGU7SkpMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUxqYXZhL3V0aWwvY29uY3VycmVudC9TY2hlZHVsZWRGdXR1cmU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvU2NoZWR1bGVkRnV0dXJlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvRGVsYXllZCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9TY2hlZHVsZWRUaHJlYWRQb29sRXhlY3V0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvVGhyZWFkUG9vbEV4ZWN1dG9yIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L1NjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL3V0aWwvY29uY3VycmVudC9SZWplY3RlZEV4ZWN1dGlvbkhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL3V0aWwvY29uY3VycmVudC9UaHJlYWRGYWN0b3J5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElMamF2YS91dGlsL2NvbmN1cnJlbnQvVGhyZWFkRmFjdG9yeTtMamF2YS91dGlsL2NvbmN1cnJlbnQvUmVqZWN0ZWRFeGVjdXRpb25IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjb3JhdGVUYXNrKExqYXZhL2xhbmcvUnVubmFibGU7TGphdmEvdXRpbC9jb25jdXJyZW50L1J1bm5hYmxlU2NoZWR1bGVkRnV0dXJlOylMamF2YS91dGlsL2NvbmN1cnJlbnQvUnVubmFibGVTY2hlZHVsZWRGdXR1cmU7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY29yYXRlVGFzayhMamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGU7TGphdmEvdXRpbC9jb25jdXJyZW50L1J1bm5hYmxlU2NoZWR1bGVkRnV0dXJlOylMamF2YS91dGlsL2NvbmN1cnJlbnQvUnVubmFibGVTY2hlZHVsZWRGdXR1cmU7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRpbnVlRXhpc3RpbmdQZXJpb2RpY1Rhc2tzQWZ0ZXJTaHV0ZG93blBvbGljeSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4ZWN1dGVFeGlzdGluZ0RlbGF5ZWRUYXNrc0FmdGVyU2h1dGRvd25Qb2xpY3koKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZW1vdmVPbkNhbmNlbFBvbGljeSgpWiIgc2luY2U9IjIxIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29udGludWVFeGlzdGluZ1BlcmlvZGljVGFza3NBZnRlclNodXRkb3duUG9saWN5KFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4ZWN1dGVFeGlzdGluZ0RlbGF5ZWRUYXNrc0FmdGVyU2h1dGRvd25Qb2xpY3koWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVtb3ZlT25DYW5jZWxQb2xpY3koWilWIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9TZW1hcGhvcmUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSVopViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjcXVpcmUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3F1aXJlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjcXVpcmVVbmludGVycnVwdGlibHkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3F1aXJlVW5pbnRlcnJ1cHRpYmx5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImF2YWlsYWJsZVBlcm1pdHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkcmFpblBlcm1pdHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWV1ZUxlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFF1ZXVlZFRocmVhZHMoKUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNRdWV1ZWRUaHJlYWRzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGYWlyKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVkdWNlUGVybWl0cyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlBY3F1aXJlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5QWNxdWlyZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlBY3F1aXJlKElKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5QWNxdWlyZShKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvU3luY2hyb25vdXNRdWV1ZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvQWJzdHJhY3RRdWV1ZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9CbG9ja2luZ1F1ZXVlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L1RocmVhZEZhY3RvcnkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1RocmVhZChMamF2YS9sYW5nL1J1bm5hYmxlOylMamF2YS9sYW5nL1RocmVhZDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9UaHJlYWRMb2NhbFJhbmRvbSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL1JhbmRvbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImN1cnJlbnQoKUxqYXZhL3V0aWwvY29uY3VycmVudC9UaHJlYWRMb2NhbFJhbmRvbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0RG91YmxlKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHREb3VibGUoREQpRCIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRJbnQoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRMb25nKEopSiIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRMb25nKEpKKUoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9UaHJlYWRQb29sRXhlY3V0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvQWJzdHJhY3RFeGVjdXRvclNlcnZpY2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0O0xqYXZhL3V0aWwvY29uY3VycmVudC9CbG9ja2luZ1F1ZXVlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDtMamF2YS91dGlsL2NvbmN1cnJlbnQvQmxvY2tpbmdRdWV1ZTtMamF2YS91dGlsL2NvbmN1cnJlbnQvUmVqZWN0ZWRFeGVjdXRpb25IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDtMamF2YS91dGlsL2NvbmN1cnJlbnQvQmxvY2tpbmdRdWV1ZTtMamF2YS91dGlsL2NvbmN1cnJlbnQvVGhyZWFkRmFjdG9yeTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJSUpMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7TGphdmEvdXRpbC9jb25jdXJyZW50L0Jsb2NraW5nUXVldWU7TGphdmEvdXRpbC9jb25jdXJyZW50L1RocmVhZEZhY3Rvcnk7TGphdmEvdXRpbC9jb25jdXJyZW50L1JlamVjdGVkRXhlY3V0aW9uSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFmdGVyRXhlY3V0ZShMamF2YS9sYW5nL1J1bm5hYmxlO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsb3dDb3JlVGhyZWFkVGltZU91dChaKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWxsb3dzQ29yZVRocmVhZFRpbWVPdXQoKVoiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYmVmb3JlRXhlY3V0ZShMamF2YS9sYW5nL1RocmVhZDtMamF2YS9sYW5nL1J1bm5hYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWN0aXZlQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wbGV0ZWRUYXNrQ291bnQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb3JlUG9vbFNpemUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZWVwQWxpdmVUaW1lKExqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhcmdlc3RQb29sU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heGltdW1Qb29sU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvb2xTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVldWUoKUxqYXZhL3V0aWwvY29uY3VycmVudC9CbG9ja2luZ1F1ZXVlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlamVjdGVkRXhlY3V0aW9uSGFuZGxlcigpTGphdmEvdXRpbC9jb25jdXJyZW50L1JlamVjdGVkRXhlY3V0aW9uSGFuZGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYXNrQ291bnQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaHJlYWRGYWN0b3J5KClMamF2YS91dGlsL2NvbmN1cnJlbnQvVGhyZWFkRmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Rlcm1pbmF0aW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJlc3RhcnRBbGxDb3JlVGhyZWFkcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9InByZXN0YXJ0Q29yZVRocmVhZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InB1cmdlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlKExqYXZhL2xhbmcvUnVubmFibGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb3JlUG9vbFNpemUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2VlcEFsaXZlVGltZShKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4aW11bVBvb2xTaXplKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlamVjdGVkRXhlY3V0aW9uSGFuZGxlcihMamF2YS91dGlsL2NvbmN1cnJlbnQvUmVqZWN0ZWRFeGVjdXRpb25IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGhyZWFkRmFjdG9yeShMamF2YS91dGlsL2NvbmN1cnJlbnQvVGhyZWFkRmFjdG9yeTspViIvPgotCQk8bWV0aG9kIG5hbWU9InRlcm1pbmF0ZWQoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9UaHJlYWRQb29sRXhlY3V0b3IkQWJvcnRQb2xpY3kiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9SZWplY3RlZEV4ZWN1dGlvbkhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9UaHJlYWRQb29sRXhlY3V0b3IkQ2FsbGVyUnVuc1BvbGljeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L1JlamVjdGVkRXhlY3V0aW9uSGFuZGxlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L1RocmVhZFBvb2xFeGVjdXRvciREaXNjYXJkT2xkZXN0UG9saWN5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvUmVqZWN0ZWRFeGVjdXRpb25IYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvVGhyZWFkUG9vbEV4ZWN1dG9yJERpc2NhcmRQb2xpY3kiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9SZWplY3RlZEV4ZWN1dGlvbkhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnZlcnQoSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspSiIvPgotCQk8bWV0aG9kIG5hbWU9InNsZWVwKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InRpbWVkSm9pbihMamF2YS9sYW5nL1RocmVhZDtKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aW1lZFdhaXQoTGphdmEvbGFuZy9PYmplY3Q7SilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9EYXlzKEopSiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0hvdXJzKEopSiIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b01pY3JvcyhKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b01pbGxpcyhKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b01pbnV0ZXMoSilKIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InRvTmFub3MoSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0idG9TZWNvbmRzKEopSiIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJEQVlTIiBzaW5jZT0iOSIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUlMiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNSUNST1NFQ09ORFMiLz4KLQkJPGZpZWxkIG5hbWU9Ik1JTExJU0VDT05EUyIvPgotCQk8ZmllbGQgbmFtZT0iTUlOVVRFUyIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTk9TRUNPTkRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRUNPTkRTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZW91dEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvVHJhbnNmZXJRdWV1ZSIgc2luY2U9IjIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9CbG9ja2luZ1F1ZXVlIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2FpdGluZ0NvbnN1bWVyQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNXYWl0aW5nQ29uc3VtZXIoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFuc2ZlcihMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InRyeVRyYW5zZmVyKExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5VHJhbnNmZXIoTGphdmEvbGFuZy9PYmplY3Q7SkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2F0b21pYy9BdG9taWNCb29sZWFuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZUFuZFNldChaWilaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kU2V0KFopWiIvPgotCQk8bWV0aG9kIG5hbWU9ImxhenlTZXQoWilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3ZWFrQ29tcGFyZUFuZFNldChaWilaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvYXRvbWljL0F0b21pY0ludGVnZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL051bWJlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2N1bXVsYXRlQW5kR2V0KElMamF2YS91dGlsL2Z1bmN0aW9uL0ludEJpbmFyeU9wZXJhdG9yOylJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBbmRHZXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZUFuZFNldChJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjcmVtZW50QW5kR2V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kQWNjdW11bGF0ZShJTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRCaW5hcnlPcGVyYXRvcjspSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kQWRkKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZERlY3JlbWVudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZEluY3JlbWVudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZFNldChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmRVcGRhdGUoTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRVbmFyeU9wZXJhdG9yOylJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmNyZW1lbnRBbmRHZXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXp5U2V0KEkpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQW5kR2V0KExqYXZhL3V0aWwvZnVuY3Rpb24vSW50VW5hcnlPcGVyYXRvcjspSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2Vha0NvbXBhcmVBbmRTZXQoSUkpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2F0b21pYy9BdG9taWNJbnRlZ2VyQXJyYXkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY3VtdWxhdGVBbmRHZXQoSUlMamF2YS91dGlsL2Z1bmN0aW9uL0ludEJpbmFyeU9wZXJhdG9yOylJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBbmRHZXQoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVBbmRTZXQoSUlJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNyZW1lbnRBbmRHZXQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZEFjY3VtdWxhdGUoSUlMamF2YS91dGlsL2Z1bmN0aW9uL0ludEJpbmFyeU9wZXJhdG9yOylJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmRBZGQoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZERlY3JlbWVudChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmRJbmNyZW1lbnQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kU2V0KElJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmRVcGRhdGUoSUxqYXZhL3V0aWwvZnVuY3Rpb24vSW50VW5hcnlPcGVyYXRvcjspSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5jcmVtZW50QW5kR2V0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImxhenlTZXQoSUkpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJsZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUFuZEdldChJTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRVbmFyeU9wZXJhdG9yOylJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3ZWFrQ29tcGFyZUFuZFNldChJSUkpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2F0b21pYy9BdG9taWNJbnRlZ2VyRmllbGRVcGRhdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2N1bXVsYXRlQW5kR2V0KExqYXZhL2xhbmcvT2JqZWN0O0lMamF2YS91dGlsL2Z1bmN0aW9uL0ludEJpbmFyeU9wZXJhdG9yOylJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBbmRHZXQoTGphdmEvbGFuZy9PYmplY3Q7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZUFuZFNldChMamF2YS9sYW5nL09iamVjdDtJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjcmVtZW50QW5kR2V0KExqYXZhL2xhbmcvT2JqZWN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KExqYXZhL2xhbmcvT2JqZWN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kQWNjdW11bGF0ZShMamF2YS9sYW5nL09iamVjdDtJTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRCaW5hcnlPcGVyYXRvcjspSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kQWRkKExqYXZhL2xhbmcvT2JqZWN0O0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZERlY3JlbWVudChMamF2YS9sYW5nL09iamVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZEluY3JlbWVudChMamF2YS9sYW5nL09iamVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZFNldChMamF2YS9sYW5nL09iamVjdDtJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmRVcGRhdGUoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvdXRpbC9mdW5jdGlvbi9JbnRVbmFyeU9wZXJhdG9yOylJIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmNyZW1lbnRBbmRHZXQoTGphdmEvbGFuZy9PYmplY3Q7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXp5U2V0KExqYXZhL2xhbmcvT2JqZWN0O0kpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdVcGRhdGVyKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvY29uY3VycmVudC9hdG9taWMvQXRvbWljSW50ZWdlckZpZWxkVXBkYXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGphdmEvbGFuZy9PYmplY3Q7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQW5kR2V0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vSW50VW5hcnlPcGVyYXRvcjspSSIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2Vha0NvbXBhcmVBbmRTZXQoTGphdmEvbGFuZy9PYmplY3Q7SUkpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2F0b21pYy9BdG9taWNMb25nIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9OdW1iZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjdW11bGF0ZUFuZEdldChKTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nQmluYXJ5T3BlcmF0b3I7KUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEFuZEdldChKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlQW5kU2V0KEpKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNyZW1lbnRBbmRHZXQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmRBY2N1bXVsYXRlKEpMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdCaW5hcnlPcGVyYXRvcjspSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kQWRkKEopSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZERlY3JlbWVudCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZEluY3JlbWVudCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZFNldChKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmRVcGRhdGUoTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nVW5hcnlPcGVyYXRvcjspSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5jcmVtZW50QW5kR2V0KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGF6eVNldChKKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0KEopViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUFuZEdldChMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdVbmFyeU9wZXJhdG9yOylKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3ZWFrQ29tcGFyZUFuZFNldChKSilaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvYXRvbWljL0F0b21pY0xvbmdBcnJheSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjdW11bGF0ZUFuZEdldChJSkxqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ0JpbmFyeU9wZXJhdG9yOylKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBbmRHZXQoSUopSiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVBbmRTZXQoSUpKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWNyZW1lbnRBbmRHZXQoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KEkpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZEFjY3VtdWxhdGUoSUpMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdCaW5hcnlPcGVyYXRvcjspSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kQWRkKElKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmREZWNyZW1lbnQoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kSW5jcmVtZW50KEkpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZFNldChJSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kVXBkYXRlKElMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdVbmFyeU9wZXJhdG9yOylKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmNyZW1lbnRBbmRHZXQoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGF6eVNldChJSilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9Imxlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldChJSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQW5kR2V0KElMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdVbmFyeU9wZXJhdG9yOylKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3ZWFrQ29tcGFyZUFuZFNldChJSkopWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2F0b21pYy9BdG9taWNMb25nRmllbGRVcGRhdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2N1bXVsYXRlQW5kR2V0KExqYXZhL2xhbmcvT2JqZWN0O0pMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdCaW5hcnlPcGVyYXRvcjspSiIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQW5kR2V0KExqYXZhL2xhbmcvT2JqZWN0O0opSiIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVBbmRTZXQoTGphdmEvbGFuZy9PYmplY3Q7SkopWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRlY3JlbWVudEFuZEdldChMamF2YS9sYW5nL09iamVjdDspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL09iamVjdDspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZEFjY3VtdWxhdGUoTGphdmEvbGFuZy9PYmplY3Q7SkxqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ0JpbmFyeU9wZXJhdG9yOylKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmRBZGQoTGphdmEvbGFuZy9PYmplY3Q7SilKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kRGVjcmVtZW50KExqYXZhL2xhbmcvT2JqZWN0OylKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kSW5jcmVtZW50KExqYXZhL2xhbmcvT2JqZWN0OylKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kU2V0KExqYXZhL2xhbmcvT2JqZWN0O0opSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZFVwZGF0ZShMamF2YS9sYW5nL09iamVjdDtMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdVbmFyeU9wZXJhdG9yOylKIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmNyZW1lbnRBbmRHZXQoTGphdmEvbGFuZy9PYmplY3Q7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXp5U2V0KExqYXZhL2xhbmcvT2JqZWN0O0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdVcGRhdGVyKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvY29uY3VycmVudC9hdG9taWMvQXRvbWljTG9uZ0ZpZWxkVXBkYXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGphdmEvbGFuZy9PYmplY3Q7SilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlQW5kR2V0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ1VuYXJ5T3BlcmF0b3I7KUoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9IndlYWtDb21wYXJlQW5kU2V0KExqYXZhL2xhbmcvT2JqZWN0O0pKKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9hdG9taWMvQXRvbWljTWFya2FibGVSZWZlcmVuY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL09iamVjdDtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdHRlbXB0TWFyayhMamF2YS9sYW5nL09iamVjdDtaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlQW5kU2V0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0O1paKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoW1opTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVmZXJlbmNlKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc01hcmtlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldChMamF2YS9sYW5nL09iamVjdDtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3ZWFrQ29tcGFyZUFuZFNldChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDtaWilaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvYXRvbWljL0F0b21pY1JlZmVyZW5jZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjdW11bGF0ZUFuZEdldChMamF2YS9sYW5nL09iamVjdDtMamF2YS91dGlsL2Z1bmN0aW9uL0JpbmFyeU9wZXJhdG9yOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVBbmRTZXQoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZEFjY3VtdWxhdGUoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvdXRpbC9mdW5jdGlvbi9CaW5hcnlPcGVyYXRvcjspTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmRTZXQoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZFVwZGF0ZShMamF2YS91dGlsL2Z1bmN0aW9uL1VuYXJ5T3BlcmF0b3I7KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibGF6eVNldChMamF2YS9sYW5nL09iamVjdDspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVBbmRHZXQoTGphdmEvdXRpbC9mdW5jdGlvbi9VbmFyeU9wZXJhdG9yOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9IndlYWtDb21wYXJlQW5kU2V0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvYXRvbWljL0F0b21pY1JlZmVyZW5jZUFycmF5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY3VtdWxhdGVBbmRHZXQoSUxqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vQmluYXJ5T3BlcmF0b3I7KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZUFuZFNldChJTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoSSlMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbmRBY2N1bXVsYXRlKElMamF2YS9sYW5nL09iamVjdDtMamF2YS91dGlsL2Z1bmN0aW9uL0JpbmFyeU9wZXJhdG9yOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZFNldChJTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZFVwZGF0ZShJTGphdmEvdXRpbC9mdW5jdGlvbi9VbmFyeU9wZXJhdG9yOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImxhenlTZXQoSUxqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9Imxlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InNldChJTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVBbmRHZXQoSUxqYXZhL3V0aWwvZnVuY3Rpb24vVW5hcnlPcGVyYXRvcjspTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3ZWFrQ29tcGFyZUFuZFNldChJTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9hdG9taWMvQXRvbWljUmVmZXJlbmNlRmllbGRVcGRhdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2N1bXVsYXRlQW5kR2V0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vQmluYXJ5T3BlcmF0b3I7KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZUFuZFNldChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kQWNjdW11bGF0ZShMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDtMamF2YS91dGlsL2Z1bmN0aW9uL0JpbmFyeU9wZXJhdG9yOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFuZFNldChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QW5kVXBkYXRlKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vVW5hcnlPcGVyYXRvcjspTGphdmEvbGFuZy9PYmplY3Q7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXp5U2V0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1VwZGF0ZXIoTGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL2NvbmN1cnJlbnQvYXRvbWljL0F0b21pY1JlZmVyZW5jZUZpZWxkVXBkYXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVBbmRHZXQoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvdXRpbC9mdW5jdGlvbi9VbmFyeU9wZXJhdG9yOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9IndlYWtDb21wYXJlQW5kU2V0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvYXRvbWljL0F0b21pY1N0YW1wZWRSZWZlcmVuY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL09iamVjdDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdHRlbXB0U3RhbXAoTGphdmEvbGFuZy9PYmplY3Q7SSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZUFuZFNldChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDtJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KFtJKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlZmVyZW5jZSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhbXAoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXQoTGphdmEvbGFuZy9PYmplY3Q7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0id2Vha0NvbXBhcmVBbmRTZXQoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7SUkpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2F0b21pYy9Eb3VibGVBY2N1bXVsYXRvciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL051bWJlciIgc2luY2U9IjI5Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2F0b21pYy9TdHJpcGVkNjQiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlQmluYXJ5T3BlcmF0b3I7RClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjdW11bGF0ZShEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXQoKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaGVuUmVzZXQoKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2F0b21pYy9Eb3VibGVBZGRlciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL051bWJlciIgc2luY2U9IjI5Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2F0b21pYy9TdHJpcGVkNjQiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKEQpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VtKClEIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VtVGhlblJlc2V0KClEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvYXRvbWljL0xvbmdBY2N1bXVsYXRvciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL051bWJlciIgc2luY2U9IjI5Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2F0b21pYy9TdHJpcGVkNjQiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ0JpbmFyeU9wZXJhdG9yO0opViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY3VtdWxhdGUoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGhlblJlc2V0KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9hdG9taWMvTG9uZ0FkZGVyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvTnVtYmVyIiBzaW5jZT0iMjkiLz4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvYXRvbWljL1N0cmlwZWQ2NCIgcmVtb3ZlZD0iMjkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGQoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjcmVtZW50KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5jcmVtZW50KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdW0oKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdW1UaGVuUmVzZXQoKUoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9hdG9taWMvU3RyaXBlZDY0IiBzaW5jZT0iMjQiIHJlbW92ZWQ9IjI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL051bWJlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0Fic3RyYWN0T3duYWJsZVN5bmNocm9uaXplciIgc2luY2U9IjUiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhjbHVzaXZlT3duZXJUaHJlYWQoKUxqYXZhL2xhbmcvVGhyZWFkOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4Y2x1c2l2ZU93bmVyVGhyZWFkKExqYXZhL2xhbmcvVGhyZWFkOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvQWJzdHJhY3RRdWV1ZWRMb25nU3luY2hyb25pemVyIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0Fic3RyYWN0T3duYWJsZVN5bmNocm9uaXplciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjcXVpcmUoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWNxdWlyZUludGVycnVwdGlibHkoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWNxdWlyZVNoYXJlZChKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3F1aXJlU2hhcmVkSW50ZXJydXB0aWJseShKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlQW5kU2V0U3RhdGUoSkopWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4Y2x1c2l2ZVF1ZXVlZFRocmVhZHMoKUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaXJzdFF1ZXVlZFRocmVhZCgpTGphdmEvbGFuZy9UaHJlYWQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVldWVMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWV1ZWRUaHJlYWRzKClMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2hhcmVkUXVldWVkVGhyZWFkcygpTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXRlKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2FpdFF1ZXVlTGVuZ3RoKExqYXZhL3V0aWwvY29uY3VycmVudC9sb2Nrcy9BYnN0cmFjdFF1ZXVlZExvbmdTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2FpdGluZ1RocmVhZHMoTGphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0Fic3RyYWN0UXVldWVkTG9uZ1N5bmNocm9uaXplciRDb25kaXRpb25PYmplY3Q7KUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNDb250ZW5kZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNRdWV1ZWRQcmVkZWNlc3NvcnMoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1F1ZXVlZFRocmVhZHMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNXYWl0ZXJzKExqYXZhL3V0aWwvY29uY3VycmVudC9sb2Nrcy9BYnN0cmFjdFF1ZXVlZExvbmdTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNIZWxkRXhjbHVzaXZlbHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1F1ZXVlZChMamF2YS9sYW5nL1RocmVhZDspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im93bnMoTGphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0Fic3RyYWN0UXVldWVkTG9uZ1N5bmNocm9uaXplciRDb25kaXRpb25PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlKEopWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2VTaGFyZWQoSilaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RhdGUoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5QWNxdWlyZShKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlBY3F1aXJlTmFub3MoSkopWiIvPgotCQk8bWV0aG9kIG5hbWU9InRyeUFjcXVpcmVTaGFyZWQoSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5QWNxdWlyZVNoYXJlZE5hbm9zKEpKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlSZWxlYXNlKEopWiIvPgotCQk8bWV0aG9kIG5hbWU9InRyeVJlbGVhc2VTaGFyZWQoSilaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvQWJzdHJhY3RRdWV1ZWRMb25nU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdCIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0NvbmRpdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvQWJzdHJhY3RRdWV1ZWRMb25nU3luY2hyb25pemVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2FpdFF1ZXVlTGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2FpdGluZ1RocmVhZHMoKUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNXYWl0ZXJzKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIgcmVtb3ZlZD0iNSIvPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9sb2Nrcy9BYnN0cmFjdE93bmFibGVTeW5jaHJvbml6ZXIiIHNpbmNlPSI1Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWNxdWlyZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3F1aXJlSW50ZXJydXB0aWJseShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY3F1aXJlU2hhcmVkKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjcXVpcmVTaGFyZWRJbnRlcnJ1cHRpYmx5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmVBbmRTZXRTdGF0ZShJSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhjbHVzaXZlUXVldWVkVGhyZWFkcygpTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpcnN0UXVldWVkVGhyZWFkKClMamF2YS9sYW5nL1RocmVhZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWV1ZUxlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFF1ZXVlZFRocmVhZHMoKUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaGFyZWRRdWV1ZWRUaHJlYWRzKClMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXYWl0UXVldWVMZW5ndGgoTGphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0Fic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdhaXRpbmdUaHJlYWRzKExqYXZhL3V0aWwvY29uY3VycmVudC9sb2Nrcy9BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplciRDb25kaXRpb25PYmplY3Q7KUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNDb250ZW5kZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNRdWV1ZWRQcmVkZWNlc3NvcnMoKVoiIHNpbmNlPSIyMSIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1F1ZXVlZFRocmVhZHMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNXYWl0ZXJzKExqYXZhL3V0aWwvY29uY3VycmVudC9sb2Nrcy9BYnN0cmFjdFF1ZXVlZFN5bmNocm9uaXplciRDb25kaXRpb25PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0hlbGRFeGNsdXNpdmVseSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUXVldWVkKExqYXZhL2xhbmcvVGhyZWFkOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3ducyhMamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXIkQ29uZGl0aW9uT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxlYXNlU2hhcmVkKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXRlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InRyeUFjcXVpcmUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5QWNxdWlyZU5hbm9zKElKKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlBY3F1aXJlU2hhcmVkKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9InRyeUFjcXVpcmVTaGFyZWROYW5vcyhJSilaIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5UmVsZWFzZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlSZWxlYXNlU2hhcmVkKEkpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0Fic3RyYWN0UXVldWVkU3luY2hyb25pemVyJENvbmRpdGlvbk9iamVjdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0NvbmRpdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvQWJzdHJhY3RRdWV1ZWRTeW5jaHJvbml6ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXYWl0UXVldWVMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXYWl0aW5nVGhyZWFkcygpTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1dhaXRlcnMoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9sb2Nrcy9Db25kaXRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImF3YWl0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXdhaXQoSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImF3YWl0TmFub3MoSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXdhaXRVbmludGVycnVwdGlibHkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhd2FpdFVudGlsKExqYXZhL3V0aWwvRGF0ZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNpZ25hbCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNpZ25hbEFsbCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0xvY2siIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImxvY2soKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2NrSW50ZXJydXB0aWJseSgpViIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0NvbmRpdGlvbigpTGphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0NvbmRpdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlMb2NrKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5TG9jayhKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5sb2NrKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvTG9ja1N1cHBvcnQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJsb2NrZXIoTGphdmEvbGFuZy9UaHJlYWQ7KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJrKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyayhMamF2YS9sYW5nL09iamVjdDspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJrTmFub3MoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFya05hbm9zKExqYXZhL2xhbmcvT2JqZWN0O0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJrVW50aWwoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFya1VudGlsKExqYXZhL2xhbmcvT2JqZWN0O0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bnBhcmsoTGphdmEvbGFuZy9UaHJlYWQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9sb2Nrcy9SZWFkV3JpdGVMb2NrIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkTG9jaygpTGphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0xvY2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVMb2NrKClMamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvTG9jazsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9sb2Nrcy9SZWVudHJhbnRMb2NrIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvTG9jayIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb2xkQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPd25lcigpTGphdmEvbGFuZy9UaHJlYWQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVldWVMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWV1ZWRUaHJlYWRzKClMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2FpdFF1ZXVlTGVuZ3RoKExqYXZhL3V0aWwvY29uY3VycmVudC9sb2Nrcy9Db25kaXRpb247KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXYWl0aW5nVGhyZWFkcyhMamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvQ29uZGl0aW9uOylMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzUXVldWVkVGhyZWFkKExqYXZhL2xhbmcvVGhyZWFkOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzUXVldWVkVGhyZWFkcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1dhaXRlcnMoTGphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0NvbmRpdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRmFpcigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSGVsZEJ5Q3VycmVudFRocmVhZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG9ja2VkKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvUmVlbnRyYW50UmVhZFdyaXRlTG9jayIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL1JlYWRXcml0ZUxvY2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3duZXIoKUxqYXZhL2xhbmcvVGhyZWFkOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFF1ZXVlTGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVldWVkUmVhZGVyVGhyZWFkcygpTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFF1ZXVlZFRocmVhZHMoKUxqYXZhL3V0aWwvQ29sbGVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRRdWV1ZWRXcml0ZXJUaHJlYWRzKClMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhZEhvbGRDb3VudCgpSSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWFkTG9ja0NvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2FpdFF1ZXVlTGVuZ3RoKExqYXZhL3V0aWwvY29uY3VycmVudC9sb2Nrcy9Db25kaXRpb247KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXYWl0aW5nVGhyZWFkcyhMamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvQ29uZGl0aW9uOylMamF2YS91dGlsL0NvbGxlY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V3JpdGVIb2xkQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNRdWV1ZWRUaHJlYWQoTGphdmEvbGFuZy9UaHJlYWQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNRdWV1ZWRUaHJlYWRzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzV2FpdGVycyhMamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvQ29uZGl0aW9uOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGYWlyKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXcml0ZUxvY2tlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzV3JpdGVMb2NrZWRCeUN1cnJlbnRUaHJlYWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkTG9jaygpTGphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL1JlZW50cmFudFJlYWRXcml0ZUxvY2skUmVhZExvY2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVMb2NrKClMamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvUmVlbnRyYW50UmVhZFdyaXRlTG9jayRXcml0ZUxvY2s7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvUmVlbnRyYW50UmVhZFdyaXRlTG9jayRSZWFkTG9jayIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0xvY2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL1JlZW50cmFudFJlYWRXcml0ZUxvY2s7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvY29uY3VycmVudC9sb2Nrcy9SZWVudHJhbnRSZWFkV3JpdGVMb2NrJFdyaXRlTG9jayIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0xvY2siLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL1JlZW50cmFudFJlYWRXcml0ZUxvY2s7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb2xkQ291bnQoKUkiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNIZWxkQnlDdXJyZW50VGhyZWFkKClaIiBzaW5jZT0iOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL1N0YW1wZWRMb2NrIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNSZWFkTG9jaygpTGphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0xvY2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXNSZWFkV3JpdGVMb2NrKClMamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvUmVhZFdyaXRlTG9jazsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc1dyaXRlTG9jaygpTGphdmEvdXRpbC9jb25jdXJyZW50L2xvY2tzL0xvY2s7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhZExvY2tDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVhZExvY2tlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzV3JpdGVMb2NrZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkTG9jaygpSiIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRMb2NrSW50ZXJydXB0aWJseSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9InRyeUNvbnZlcnRUb09wdGltaXN0aWNSZWFkKEopSiIvPgotCQk8bWV0aG9kIG5hbWU9InRyeUNvbnZlcnRUb1JlYWRMb2NrKEopSiIvPgotCQk8bWV0aG9kIG5hbWU9InRyeUNvbnZlcnRUb1dyaXRlTG9jayhKKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlPcHRpbWlzdGljUmVhZCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9InRyeVJlYWRMb2NrKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJ5UmVhZExvY2soSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspSiIvPgotCQk8bWV0aG9kIG5hbWU9InRyeVVubG9ja1JlYWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cnlVbmxvY2tXcml0ZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InRyeVdyaXRlTG9jaygpSiIvPgotCQk8bWV0aG9kIG5hbWU9InRyeVdyaXRlTG9jayhKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylKIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5sb2NrKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InVubG9ja1JlYWQoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5sb2NrV3JpdGUoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsaWRhdGUoSilaIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVMb2NrKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVMb2NrSW50ZXJydXB0aWJseSgpSiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9CaUNvbnN1bWVyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjZXB0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYW5kVGhlbihMamF2YS91dGlsL2Z1bmN0aW9uL0JpQ29uc3VtZXI7KUxqYXZhL3V0aWwvZnVuY3Rpb24vQmlDb25zdW1lcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vQmlGdW5jdGlvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFuZFRoZW4oTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvdXRpbC9mdW5jdGlvbi9CaUZ1bmN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vQmlQcmVkaWNhdGUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbmQoTGphdmEvdXRpbC9mdW5jdGlvbi9CaVByZWRpY2F0ZTspTGphdmEvdXRpbC9mdW5jdGlvbi9CaVByZWRpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZWdhdGUoKUxqYXZhL3V0aWwvZnVuY3Rpb24vQmlQcmVkaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3IoTGphdmEvdXRpbC9mdW5jdGlvbi9CaVByZWRpY2F0ZTspTGphdmEvdXRpbC9mdW5jdGlvbi9CaVByZWRpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0JpbmFyeU9wZXJhdG9yIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9CaUZ1bmN0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4QnkoTGphdmEvdXRpbC9Db21wYXJhdG9yOylMamF2YS91dGlsL2Z1bmN0aW9uL0JpbmFyeU9wZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbkJ5KExqYXZhL3V0aWwvQ29tcGFyYXRvcjspTGphdmEvdXRpbC9mdW5jdGlvbi9CaW5hcnlPcGVyYXRvcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vQm9vbGVhblN1cHBsaWVyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXNCb29sZWFuKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0NvbnN1bWVyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjZXB0KExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYW5kVGhlbihMamF2YS91dGlsL2Z1bmN0aW9uL0NvbnN1bWVyOylMamF2YS91dGlsL2Z1bmN0aW9uL0NvbnN1bWVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVCaW5hcnlPcGVyYXRvciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5QXNEb3VibGUoREQpRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVDb25zdW1lciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdChEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbmRUaGVuKExqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlQ29uc3VtZXI7KUxqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlQ29uc3VtZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZUZ1bmN0aW9uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHkoRClMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlUHJlZGljYXRlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYW5kKExqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlUHJlZGljYXRlOylMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZVByZWRpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZWdhdGUoKUxqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlUHJlZGljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9yKExqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlUHJlZGljYXRlOylMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZVByZWRpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0KEQpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVTdXBwbGllciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFzRG91YmxlKClEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZVRvSW50RnVuY3Rpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseUFzSW50KEQpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVUb0xvbmdGdW5jdGlvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5QXNMb25nKEQpSiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVVbmFyeU9wZXJhdG9yIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYW5kVGhlbihMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZVVuYXJ5T3BlcmF0b3I7KUxqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlVW5hcnlPcGVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseUFzRG91YmxlKEQpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBvc2UoTGphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVVbmFyeU9wZXJhdG9yOylMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZVVuYXJ5T3BlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaWRlbnRpdHkoKUxqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlVW5hcnlPcGVyYXRvcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbmRUaGVuKExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247KUxqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHkoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBvc2UoTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpZGVudGl0eSgpTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vSW50QmluYXJ5T3BlcmF0b3IiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseUFzSW50KElJKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vSW50Q29uc3VtZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYW5kVGhlbihMamF2YS91dGlsL2Z1bmN0aW9uL0ludENvbnN1bWVyOylMamF2YS91dGlsL2Z1bmN0aW9uL0ludENvbnN1bWVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9JbnRGdW5jdGlvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5KEkpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0ludFByZWRpY2F0ZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFuZChMamF2YS91dGlsL2Z1bmN0aW9uL0ludFByZWRpY2F0ZTspTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRQcmVkaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmVnYXRlKClMamF2YS91dGlsL2Z1bmN0aW9uL0ludFByZWRpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcihMamF2YS91dGlsL2Z1bmN0aW9uL0ludFByZWRpY2F0ZTspTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRQcmVkaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGVzdChJKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vSW50U3VwcGxpZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBc0ludCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9JbnRUb0RvdWJsZUZ1bmN0aW9uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlBc0RvdWJsZShJKUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vSW50VG9Mb25nRnVuY3Rpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseUFzTG9uZyhJKUoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vSW50VW5hcnlPcGVyYXRvciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFuZFRoZW4oTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRVbmFyeU9wZXJhdG9yOylMamF2YS91dGlsL2Z1bmN0aW9uL0ludFVuYXJ5T3BlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlBc0ludChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wb3NlKExqYXZhL3V0aWwvZnVuY3Rpb24vSW50VW5hcnlPcGVyYXRvcjspTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRVbmFyeU9wZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlkZW50aXR5KClMamF2YS91dGlsL2Z1bmN0aW9uL0ludFVuYXJ5T3BlcmF0b3I7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdCaW5hcnlPcGVyYXRvciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5QXNMb25nKEpKKUoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ0NvbnN1bWVyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjZXB0KEopViIvPgotCQk8bWV0aG9kIG5hbWU9ImFuZFRoZW4oTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nQ29uc3VtZXI7KUxqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ0NvbnN1bWVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9Mb25nRnVuY3Rpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseShKKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9Mb25nUHJlZGljYXRlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYW5kKExqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ1ByZWRpY2F0ZTspTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nUHJlZGljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5lZ2F0ZSgpTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nUHJlZGljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9yKExqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ1ByZWRpY2F0ZTspTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nUHJlZGljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRlc3QoSilaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdTdXBwbGllciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFzTG9uZygpSiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9Mb25nVG9Eb3VibGVGdW5jdGlvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5QXNEb3VibGUoSilEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdUb0ludEZ1bmN0aW9uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlBc0ludChKKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ1VuYXJ5T3BlcmF0b3IiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbmRUaGVuKExqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ1VuYXJ5T3BlcmF0b3I7KUxqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ1VuYXJ5T3BlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlBc0xvbmcoSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcG9zZShMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdVbmFyeU9wZXJhdG9yOylMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdVbmFyeU9wZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlkZW50aXR5KClMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdVbmFyeU9wZXJhdG9yOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9PYmpEb3VibGVDb25zdW1lciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdChMamF2YS9sYW5nL09iamVjdDtEKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vT2JqSW50Q29uc3VtZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHQoTGphdmEvbGFuZy9PYmplY3Q7SSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL09iakxvbmdDb25zdW1lciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY2VwdChMamF2YS9sYW5nL09iamVjdDtKKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vUHJlZGljYXRlIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYW5kKExqYXZhL3V0aWwvZnVuY3Rpb24vUHJlZGljYXRlOylMamF2YS91dGlsL2Z1bmN0aW9uL1ByZWRpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VxdWFsKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL2Z1bmN0aW9uL1ByZWRpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZWdhdGUoKUxqYXZhL3V0aWwvZnVuY3Rpb24vUHJlZGljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9yKExqYXZhL3V0aWwvZnVuY3Rpb24vUHJlZGljYXRlOylMamF2YS91dGlsL2Z1bmN0aW9uL1ByZWRpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0KExqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL1N1cHBsaWVyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KClMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vVG9Eb3VibGVCaUZ1bmN0aW9uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlBc0RvdWJsZShMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9Ub0RvdWJsZUZ1bmN0aW9uIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwbHlBc0RvdWJsZShMamF2YS9sYW5nL09iamVjdDspRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9Ub0ludEJpRnVuY3Rpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseUFzSW50KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL1RvSW50RnVuY3Rpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseUFzSW50KExqYXZhL2xhbmcvT2JqZWN0OylJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL1RvTG9uZ0JpRnVuY3Rpb24iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBseUFzTG9uZyhMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspSiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9mdW5jdGlvbi9Ub0xvbmdGdW5jdGlvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGx5QXNMb25nKExqYXZhL2xhbmcvT2JqZWN0OylKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL1VuYXJ5T3BlcmF0b3IiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iaWRlbnRpdHkoKUxqYXZhL3V0aWwvZnVuY3Rpb24vVW5hcnlPcGVyYXRvcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvamFyL0F0dHJpYnV0ZXMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9NYXAiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvamFyL0F0dHJpYnV0ZXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoTGphdmEvdXRpbC9qYXIvQXR0cmlidXRlcyROYW1lOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRWYWx1ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJtYXAiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvamFyL0F0dHJpYnV0ZXMkTmFtZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDTEFTU19QQVRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVEVOU0lPTl9JTlNUQUxMQVRJT04iIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRFTlNJT05fTElTVCIvPgotCQk8ZmllbGQgbmFtZT0iRVhURU5TSU9OX05BTUUiLz4KLQkJPGZpZWxkIG5hbWU9IklNUExFTUVOVEFUSU9OX1RJVExFIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBMRU1FTlRBVElPTl9VUkwiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJJTVBMRU1FTlRBVElPTl9WRU5ET1IiLz4KLQkJPGZpZWxkIG5hbWU9IklNUExFTUVOVEFUSU9OX1ZFTkRPUl9JRCIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IklNUExFTUVOVEFUSU9OX1ZFUlNJT04iLz4KLQkJPGZpZWxkIG5hbWU9Ik1BSU5fQ0xBU1MiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BTklGRVNUX1ZFUlNJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNFQUxFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0lHTkFUVVJFX1ZFUlNJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNQRUNJRklDQVRJT05fVElUTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNQRUNJRklDQVRJT05fVkVORE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJTUEVDSUZJQ0FUSU9OX1ZFUlNJT04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvamFyL0phckVudHJ5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC96aXAvWmlwRW50cnkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9qYXIvSmFyRW50cnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC96aXAvWmlwRW50cnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVzKClMamF2YS91dGlsL2phci9BdHRyaWJ1dGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlcnRpZmljYXRlcygpW0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29kZVNpZ25lcnMoKVtMamF2YS9zZWN1cml0eS9Db2RlU2lnbmVyOyIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOQVRUIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkFUWCIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5DT00iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOQ1JDIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkRTSyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5FWFQiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VORkxHIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkhEUiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5IT1ciIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOTEVOIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTk5BTSIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5PRkYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOU0lHIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlNJWiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5USU0iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVkVNIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlZFUiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRDT00iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRU5ESERSIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVORE9GRiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRTSUciIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EU0laIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVORFNVQiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRUT1QiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUQ1JDIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVEhEUiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRMRU4iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUU0lHIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFNJWiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NDUkMiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DRVhUIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0ZMRyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NIRFIiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DSE9XIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0xFTiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NOQU0iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DU0lHIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ1NJWiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NUSU0iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DVkVSIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvamFyL0phckV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvemlwL1ppcEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9qYXIvSmFyRmlsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvemlwL1ppcEZpbGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlO1opViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlO1pJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SmFyRW50cnkoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvamFyL0phckVudHJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hbmlmZXN0KClMamF2YS91dGlsL2phci9NYW5pZmVzdDsiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkFUVCIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5BVFgiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOQ09NIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkNSQyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5EU0siIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VORVhUIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkZMRyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5IRFIiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOSE9XIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkxFTiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5OQU0iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOT0ZGIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlNJRyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5TSVoiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVElNIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlZFTSIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5WRVIiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EQ09NIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVOREhEUiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRPRkYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EU0lHIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVORFNJWiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRTVUIiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EVE9UIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVENSQyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRIRFIiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUTEVOIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFNJRyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRTSVoiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQ1JDIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0VYVCIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NGTEciIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DSERSIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0hPVyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NMRU4iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DTkFNIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ1NJRyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NTSVoiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DVElNIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ1ZFUiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNQU5JRkVTVF9OQU1FIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2phci9KYXJJbnB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvemlwL1ppcElucHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0lucHV0U3RyZWFtO1opViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hbmlmZXN0KClMamF2YS91dGlsL2phci9NYW5pZmVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZXh0SmFyRW50cnkoKUxqYXZhL3V0aWwvamFyL0phckVudHJ5OyIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOQVRUIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkFUWCIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5DT00iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOQ1JDIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkRTSyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5FWFQiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VORkxHIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkhEUiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5IT1ciIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOTEVOIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTk5BTSIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5PRkYiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOU0lHIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlNJWiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5USU0iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVkVNIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlZFUiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRDT00iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRU5ESERSIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVORE9GRiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRTSUciIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EU0laIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVORFNVQiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRUT1QiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUQ1JDIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVEhEUiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRMRU4iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUU0lHIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFNJWiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NDUkMiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DRVhUIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0ZMRyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NIRFIiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DSE9XIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0xFTiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NOQU0iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DU0lHIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ1NJWiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NUSU0iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DVkVSIiBzaW5jZT0iMjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvamFyL0phck91dHB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvemlwL1ppcE91dHB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vT3V0cHV0U3RyZWFtO0xqYXZhL3V0aWwvamFyL01hbmlmZXN0OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5BVFQiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOQVRYIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkNPTSIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5DUkMiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VORFNLIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkVYVCIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5GTEciIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOSERSIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkhPVyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5MRU4iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOTkFNIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTk9GRiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5TSUciIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOU0laIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlRJTSIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5WRU0iIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVkVSIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVORENPTSIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRIRFIiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRU5ET0ZGIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVORFNJRyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRTSVoiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EU1VCIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVORFRPVCIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRDUkMiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUSERSIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVExFTiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRTSUciIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUU0laIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0NSQyIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NFWFQiIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DRkxHIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0hEUiIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NIT1ciIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DTEVOIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ05BTSIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NTSUciIHNpbmNlPSIyOSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DU0laIiBzaW5jZT0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ1RJTSIgc2luY2U9IjI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NWRVIiIHNpbmNlPSIyOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9qYXIvTWFuaWZlc3QiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvamFyL01hbmlmZXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVzKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL2phci9BdHRyaWJ1dGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudHJpZXMoKUxqYXZhL3V0aWwvTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1haW5BdHRyaWJ1dGVzKClMamF2YS91dGlsL2phci9BdHRyaWJ1dGVzOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWQoTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZShMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvamFyL1BhY2syMDAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1BhY2tlcigpTGphdmEvdXRpbC9qYXIvUGFjazIwMCRQYWNrZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3VW5wYWNrZXIoKUxqYXZhL3V0aWwvamFyL1BhY2syMDAkVW5wYWNrZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2phci9QYWNrMjAwJFBhY2tlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihMamF2YS9iZWFucy9Qcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOylWIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYWNrKExqYXZhL3V0aWwvamFyL0phckZpbGU7TGphdmEvaW8vT3V0cHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFjayhMamF2YS91dGlsL2phci9KYXJJbnB1dFN0cmVhbTtMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm9wZXJ0aWVzKClMamF2YS91dGlsL1NvcnRlZE1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKExqYXZhL2JlYW5zL1Byb3BlcnR5Q2hhbmdlTGlzdGVuZXI7KVYiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0iQ0xBU1NfQVRUUklCVVRFX1BGWCIvPgotCQk8ZmllbGQgbmFtZT0iQ09ERV9BVFRSSUJVVEVfUEZYIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZMQVRFX0hJTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkVGRk9SVCIvPgotCQk8ZmllbGQgbmFtZT0iRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkZBTFNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUVMRF9BVFRSSUJVVEVfUEZYIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRUVQIi8+Ci0JCTxmaWVsZCBuYW1lPSJLRUVQX0ZJTEVfT1JERVIiLz4KLQkJPGZpZWxkIG5hbWU9IkxBVEVTVCIvPgotCQk8ZmllbGQgbmFtZT0iTUVUSE9EX0FUVFJJQlVURV9QRlgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1PRElGSUNBVElPTl9USU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVNTX0ZJTEVfUEZYIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9HUkVTUyIvPgotCQk8ZmllbGQgbmFtZT0iU0VHTUVOVF9MSU1JVCIvPgotCQk8ZmllbGQgbmFtZT0iU1RSSVAiLz4KLQkJPGZpZWxkIG5hbWU9IlRSVUUiLz4KLQkJPGZpZWxkIG5hbWU9IlVOS05PV05fQVRUUklCVVRFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2phci9QYWNrMjAwJFVucGFja2VyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKExqYXZhL2JlYW5zL1Byb3BlcnR5Q2hhbmdlTGlzdGVuZXI7KVYiIHNpbmNlPSIzIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InByb3BlcnRpZXMoKUxqYXZhL3V0aWwvU29ydGVkTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoTGphdmEvYmVhbnMvUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcjspViIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5wYWNrKExqYXZhL2lvL0ZpbGU7TGphdmEvdXRpbC9qYXIvSmFyT3V0cHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5wYWNrKExqYXZhL2lvL0lucHV0U3RyZWFtO0xqYXZhL3V0aWwvamFyL0phck91dHB1dFN0cmVhbTspViIvPgotCQk8ZmllbGQgbmFtZT0iREVGTEFURV9ISU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJGQUxTRSIvPgotCQk8ZmllbGQgbmFtZT0iS0VFUCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPR1JFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IlRSVUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvbG9nZ2luZy9Db25zb2xlSGFuZGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvbG9nZ2luZy9TdHJlYW1IYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2xvZ2dpbmcvRXJyb3JNYW5hZ2VyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlcnJvcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0V4Y2VwdGlvbjtJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNMT1NFX0ZBSUxVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkZMVVNIX0ZBSUxVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkZPUk1BVF9GQUlMVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHRU5FUklDX0ZBSUxVUkUiLz4KLQkJPGZpZWxkIG5hbWU9Ik9QRU5fRkFJTFVSRSIvPgotCQk8ZmllbGQgbmFtZT0iV1JJVEVfRkFJTFVSRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9sb2dnaW5nL0ZpbGVIYW5kbGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9sb2dnaW5nL1N0cmVhbUhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJSVopViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvbG9nZ2luZy9GaWx0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG9nZ2FibGUoTGphdmEvdXRpbC9sb2dnaW5nL0xvZ1JlY29yZDspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9sb2dnaW5nL0Zvcm1hdHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0KExqYXZhL3V0aWwvbG9nZ2luZy9Mb2dSZWNvcmQ7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdE1lc3NhZ2UoTGphdmEvdXRpbC9sb2dnaW5nL0xvZ1JlY29yZDspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGVhZChMamF2YS91dGlsL2xvZ2dpbmcvSGFuZGxlcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFpbChMamF2YS91dGlsL2xvZ2dpbmcvSGFuZGxlcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2xvZ2dpbmcvSGFuZGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY29kaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcnJvck1hbmFnZXIoKUxqYXZhL3V0aWwvbG9nZ2luZy9FcnJvck1hbmFnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsdGVyKClMamF2YS91dGlsL2xvZ2dpbmcvRmlsdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvcm1hdHRlcigpTGphdmEvdXRpbC9sb2dnaW5nL0Zvcm1hdHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZXZlbCgpTGphdmEvdXRpbC9sb2dnaW5nL0xldmVsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG9nZ2FibGUoTGphdmEvdXRpbC9sb2dnaW5nL0xvZ1JlY29yZDspWiIvPgotCQk8bWV0aG9kIG5hbWU9InB1Ymxpc2goTGphdmEvdXRpbC9sb2dnaW5nL0xvZ1JlY29yZDspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcG9ydEVycm9yKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvRXhjZXB0aW9uO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuY29kaW5nKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXJyb3JNYW5hZ2VyKExqYXZhL3V0aWwvbG9nZ2luZy9FcnJvck1hbmFnZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGaWx0ZXIoTGphdmEvdXRpbC9sb2dnaW5nL0ZpbHRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZvcm1hdHRlcihMamF2YS91dGlsL2xvZ2dpbmcvRm9ybWF0dGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGV2ZWwoTGphdmEvdXRpbC9sb2dnaW5nL0xldmVsOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2xvZ2dpbmcvTGV2ZWwiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxpemVkTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzb3VyY2VCdW5kbGVOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRWYWx1ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL2xvZ2dpbmcvTGV2ZWw7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBTEwiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTkZJRyIvPgotCQk8ZmllbGQgbmFtZT0iRklORSIvPgotCQk8ZmllbGQgbmFtZT0iRklORVIiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTkVTVCIvPgotCQk8ZmllbGQgbmFtZT0iSU5GTyIvPgotCQk8ZmllbGQgbmFtZT0iT0ZGIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVZFUkUiLz4KLQkJPGZpZWxkIG5hbWU9IldBUk5JTkciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvbG9nZ2luZy9Mb2dNYW5hZ2VyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRMb2dnZXIoTGphdmEvdXRpbC9sb2dnaW5nL0xvZ2dlcjspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoTGphdmEvYmVhbnMvUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcjspViIgc2luY2U9IjMiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tBY2Nlc3MoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2dNYW5hZ2VyKClMamF2YS91dGlsL2xvZ2dpbmcvTG9nTWFuYWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2dnZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvbG9nZ2luZy9Mb2dnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9nZ2VyTmFtZXMoKUxqYXZhL3V0aWwvRW51bWVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9nZ2luZ01YQmVhbigpTGphdmEvdXRpbC9sb2dnaW5nL0xvZ2dpbmdNWEJlYW47IiBzaW5jZT0iMyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3BlcnR5KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWFkQ29uZmlndXJhdGlvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRDb25maWd1cmF0aW9uKExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihMamF2YS9iZWFucy9Qcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOylWIiBzaW5jZT0iMyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCQk8ZmllbGQgbmFtZT0iTE9HR0lOR19NWEJFQU5fTkFNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9sb2dnaW5nL0xvZ1JlY29yZCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvbG9nZ2luZy9MZXZlbDtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExldmVsKClMamF2YS91dGlsL2xvZ2dpbmcvTGV2ZWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9nZ2VyTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVzc2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWlsbGlzKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1ldGVycygpW0xqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc291cmNlQnVuZGxlKClMamF2YS91dGlsL1Jlc291cmNlQnVuZGxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc291cmNlQnVuZGxlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VxdWVuY2VOdW1iZXIoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb3VyY2VDbGFzc05hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvdXJjZU1ldGhvZE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRocmVhZElEKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGhyb3duKClMamF2YS9sYW5nL1Rocm93YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMZXZlbChMamF2YS91dGlsL2xvZ2dpbmcvTGV2ZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2dnZXJOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWVzc2FnZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1pbGxpcyhKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXJhbWV0ZXJzKFtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc291cmNlQnVuZGxlKExqYXZhL3V0aWwvUmVzb3VyY2VCdW5kbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXNvdXJjZUJ1bmRsZU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZXF1ZW5jZU51bWJlcihKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTb3VyY2VDbGFzc05hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTb3VyY2VNZXRob2ROYW1lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGhyZWFkSUQoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGhyb3duKExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2xvZ2dpbmcvTG9nZ2VyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRIYW5kbGVyKExqYXZhL3V0aWwvbG9nZ2luZy9IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29uZmlnKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29uZmlnKExqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImVudGVyaW5nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW50ZXJpbmcoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbnRlcmluZyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGl0aW5nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhpdGluZyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5lKExqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmVyKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZXIoTGphdmEvdXRpbC9mdW5jdGlvbi9TdXBwbGllcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZXN0KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZXN0KExqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFub255bW91c0xvZ2dlcigpTGphdmEvdXRpbC9sb2dnaW5nL0xvZ2dlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbm9ueW1vdXNMb2dnZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvbG9nZ2luZy9Mb2dnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmlsdGVyKClMamF2YS91dGlsL2xvZ2dpbmcvRmlsdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEdsb2JhbCgpTGphdmEvdXRpbC9sb2dnaW5nL0xvZ2dlcjsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhhbmRsZXJzKClbTGphdmEvdXRpbC9sb2dnaW5nL0hhbmRsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGV2ZWwoKUxqYXZhL3V0aWwvbG9nZ2luZy9MZXZlbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2dnZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvbG9nZ2luZy9Mb2dnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9nZ2VyKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL2xvZ2dpbmcvTG9nZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmVudCgpTGphdmEvdXRpbC9sb2dnaW5nL0xvZ2dlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNvdXJjZUJ1bmRsZSgpTGphdmEvdXRpbC9SZXNvdXJjZUJ1bmRsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNvdXJjZUJ1bmRsZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZVBhcmVudEhhbmRsZXJzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5mbyhMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImluZm8oTGphdmEvdXRpbC9mdW5jdGlvbi9TdXBwbGllcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNMb2dnYWJsZShMamF2YS91dGlsL2xvZ2dpbmcvTGV2ZWw7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2coTGphdmEvdXRpbC9sb2dnaW5nL0xldmVsO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9nKExqYXZhL3V0aWwvbG9nZ2luZy9MZXZlbDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZyhMamF2YS91dGlsL2xvZ2dpbmcvTGV2ZWw7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2coTGphdmEvdXRpbC9sb2dnaW5nL0xldmVsO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZyhMamF2YS91dGlsL2xvZ2dpbmcvTGV2ZWw7TGphdmEvbGFuZy9UaHJvd2FibGU7TGphdmEvdXRpbC9mdW5jdGlvbi9TdXBwbGllcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9nKExqYXZhL3V0aWwvbG9nZ2luZy9MZXZlbDtMamF2YS91dGlsL2Z1bmN0aW9uL1N1cHBsaWVyOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2coTGphdmEvdXRpbC9sb2dnaW5nL0xvZ1JlY29yZDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZ3AoTGphdmEvdXRpbC9sb2dnaW5nL0xldmVsO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9ncChMamF2YS91dGlsL2xvZ2dpbmcvTGV2ZWw7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2dwKExqYXZhL3V0aWwvbG9nZ2luZy9MZXZlbDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZ3AoTGphdmEvdXRpbC9sb2dnaW5nL0xldmVsO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZ3AoTGphdmEvdXRpbC9sb2dnaW5nL0xldmVsO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlO0xqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZ3AoTGphdmEvdXRpbC9sb2dnaW5nL0xldmVsO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZ3JiKExqYXZhL3V0aWwvbG9nZ2luZy9MZXZlbDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2dyYihMamF2YS91dGlsL2xvZ2dpbmcvTGV2ZWw7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9ncmIoTGphdmEvdXRpbC9sb2dnaW5nL0xldmVsO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBkZXByZWNhdGVkPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZ3JiKExqYXZhL3V0aWwvbG9nZ2luZy9MZXZlbDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9PYmplY3Q7KVYiIGRlcHJlY2F0ZWQ9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9ncmIoTGphdmEvdXRpbC9sb2dnaW5nL0xldmVsO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvUmVzb3VyY2VCdW5kbGU7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvZ3JiKExqYXZhL3V0aWwvbG9nZ2luZy9MZXZlbDtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS91dGlsL1Jlc291cmNlQnVuZGxlO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL09iamVjdDspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlSGFuZGxlcihMamF2YS91dGlsL2xvZ2dpbmcvSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZpbHRlcihMamF2YS91dGlsL2xvZ2dpbmcvRmlsdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGV2ZWwoTGphdmEvdXRpbC9sb2dnaW5nL0xldmVsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyZW50KExqYXZhL3V0aWwvbG9nZ2luZy9Mb2dnZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXNvdXJjZUJ1bmRsZShMamF2YS91dGlsL1Jlc291cmNlQnVuZGxlOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VQYXJlbnRIYW5kbGVycyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXZlcmUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXZlcmUoTGphdmEvdXRpbC9mdW5jdGlvbi9TdXBwbGllcjspViIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGhyb3dpbmcoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3YXJuaW5nKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id2FybmluZyhMamF2YS91dGlsL2Z1bmN0aW9uL1N1cHBsaWVyOylWIiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMT0JBTF9MT0dHRVJfTkFNRSIgc2luY2U9IjkiLz4KLQkJPGZpZWxkIG5hbWU9Imdsb2JhbCIgZGVwcmVjYXRlZD0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvbG9nZ2luZy9Mb2dnaW5nTVhCZWFuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2dnZXJMZXZlbChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9nZ2VyTmFtZXMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJlbnRMb2dnZXJOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2dnZXJMZXZlbChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9sb2dnaW5nL0xvZ2dpbmdQZXJtaXNzaW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvQmFzaWNQZXJtaXNzaW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2xvZ2dpbmcvTWVtb3J5SGFuZGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvbG9nZ2luZy9IYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvbG9nZ2luZy9IYW5kbGVyO0lMamF2YS91dGlsL2xvZ2dpbmcvTGV2ZWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQdXNoTGV2ZWwoKUxqYXZhL3V0aWwvbG9nZ2luZy9MZXZlbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXNoKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHVzaExldmVsKExqYXZhL3V0aWwvbG9nZ2luZy9MZXZlbDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9sb2dnaW5nL1NpbXBsZUZvcm1hdHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvbG9nZ2luZy9Gb3JtYXR0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvbG9nZ2luZy9Tb2NrZXRIYW5kbGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9sb2dnaW5nL1N0cmVhbUhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL2xvZ2dpbmcvU3RyZWFtSGFuZGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvbG9nZ2luZy9IYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTtMamF2YS91dGlsL2xvZ2dpbmcvRm9ybWF0dGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3V0cHV0U3RyZWFtKExqYXZhL2lvL091dHB1dFN0cmVhbTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9sb2dnaW5nL1hNTEZvcm1hdHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvbG9nZ2luZy9Gb3JtYXR0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvcHJlZnMvQWJzdHJhY3RQcmVmZXJlbmNlcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvcHJlZnMvUHJlZmVyZW5jZXMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9wcmVmcy9BYnN0cmFjdFByZWZlcmVuY2VzO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2FjaGVkQ2hpbGRyZW4oKVtMamF2YS91dGlsL3ByZWZzL0Fic3RyYWN0UHJlZmVyZW5jZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hpbGRTcGkoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvcHJlZnMvQWJzdHJhY3RQcmVmZXJlbmNlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGlsZHJlbk5hbWVzU3BpKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmx1c2hTcGkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGlsZChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9wcmVmcy9BYnN0cmFjdFByZWZlcmVuY2VzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNwaShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZW1vdmVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5c1NwaSgpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dFNwaShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU5vZGVTcGkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVTcGkoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzeW5jU3BpKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJsb2NrIi8+Ci0JCTxmaWVsZCBuYW1lPSJuZXdOb2RlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3ByZWZzL0JhY2tpbmdTdG9yZUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3ByZWZzL0ludmFsaWRQcmVmZXJlbmNlc0Zvcm1hdEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3ByZWZzL05vZGVDaGFuZ2VFdmVudCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvRXZlbnRPYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9wcmVmcy9QcmVmZXJlbmNlcztMamF2YS91dGlsL3ByZWZzL1ByZWZlcmVuY2VzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hpbGQoKUxqYXZhL3V0aWwvcHJlZnMvUHJlZmVyZW5jZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50KClMamF2YS91dGlsL3ByZWZzL1ByZWZlcmVuY2VzOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9wcmVmcy9Ob2RlQ2hhbmdlTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvRXZlbnRMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9ImNoaWxkQWRkZWQoTGphdmEvdXRpbC9wcmVmcy9Ob2RlQ2hhbmdlRXZlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGlsZFJlbW92ZWQoTGphdmEvdXRpbC9wcmVmcy9Ob2RlQ2hhbmdlRXZlbnQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvcHJlZnMvUHJlZmVyZW5jZUNoYW5nZUV2ZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9FdmVudE9iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL3ByZWZzL1ByZWZlcmVuY2VzO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZXdWYWx1ZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Tm9kZSgpTGphdmEvdXRpbC9wcmVmcy9QcmVmZXJlbmNlczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvcHJlZnMvUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL0V2ZW50TGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcmVmZXJlbmNlQ2hhbmdlKExqYXZhL3V0aWwvcHJlZnMvUHJlZmVyZW5jZUNoYW5nZUV2ZW50OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3ByZWZzL1ByZWZlcmVuY2VzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhYnNvbHV0ZVBhdGgoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZE5vZGVDaGFuZ2VMaXN0ZW5lcihMamF2YS91dGlsL3ByZWZzL05vZGVDaGFuZ2VMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcihMamF2YS91dGlsL3ByZWZzL1ByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoaWxkcmVuTmFtZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImV4cG9ydE5vZGUoTGphdmEvaW8vT3V0cHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXhwb3J0U3VidHJlZShMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9vbGVhbihMamF2YS9sYW5nL1N0cmluZztaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlQXJyYXkoTGphdmEvbGFuZy9TdHJpbmc7W0IpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb3VibGUoTGphdmEvbGFuZy9TdHJpbmc7RClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmxvYXQoTGphdmEvbGFuZy9TdHJpbmc7RilGIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50KExqYXZhL2xhbmcvU3RyaW5nO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmcoTGphdmEvbGFuZy9TdHJpbmc7SilKIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW1wb3J0UHJlZmVyZW5jZXMoTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1VzZXJOb2RlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5cygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vZGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvcHJlZnMvUHJlZmVyZW5jZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibm9kZUV4aXN0cyhMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmVudCgpTGphdmEvdXRpbC9wcmVmcy9QcmVmZXJlbmNlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRCb29sZWFuKExqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEJ5dGVBcnJheShMamF2YS9sYW5nL1N0cmluZztbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHV0RG91YmxlKExqYXZhL2xhbmcvU3RyaW5nO0QpViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEZsb2F0KExqYXZhL2xhbmcvU3RyaW5nO0YpViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dEludChMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRMb25nKExqYXZhL2xhbmcvU3RyaW5nO0opViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU5vZGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVOb2RlQ2hhbmdlTGlzdGVuZXIoTGphdmEvdXRpbC9wcmVmcy9Ob2RlQ2hhbmdlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVQcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXIoTGphdmEvdXRpbC9wcmVmcy9QcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzeW5jKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3lzdGVtTm9kZUZvclBhY2thZ2UoTGphdmEvbGFuZy9DbGFzczspTGphdmEvdXRpbC9wcmVmcy9QcmVmZXJlbmNlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzeXN0ZW1Sb290KClMamF2YS91dGlsL3ByZWZzL1ByZWZlcmVuY2VzOyIvPgotCQk8bWV0aG9kIG5hbWU9InVzZXJOb2RlRm9yUGFja2FnZShMamF2YS9sYW5nL0NsYXNzOylMamF2YS91dGlsL3ByZWZzL1ByZWZlcmVuY2VzOyIvPgotCQk8bWV0aG9kIG5hbWU9InVzZXJSb290KClMamF2YS91dGlsL3ByZWZzL1ByZWZlcmVuY2VzOyIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX0tFWV9MRU5HVEgiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9OQU1FX0xFTkdUSCIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1ZBTFVFX0xFTkdUSCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9wcmVmcy9QcmVmZXJlbmNlc0ZhY3RvcnkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InN5c3RlbVJvb3QoKUxqYXZhL3V0aWwvcHJlZnMvUHJlZmVyZW5jZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idXNlclJvb3QoKUxqYXZhL3V0aWwvcHJlZnMvUHJlZmVyZW5jZXM7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3JlZ2V4L01hdGNoUmVzdWx0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ3JvdXAoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Imdyb3VwKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ3JvdXBDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnQoSSlJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3JlZ2V4L01hdGNoZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvcmVnZXgvTWF0Y2hSZXN1bHQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvcmVnZXgvUGF0dGVybjtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kUmVwbGFjZW1lbnQoTGphdmEvbGFuZy9TdHJpbmdCdWZmZXI7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvcmVnZXgvTWF0Y2hlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRUYWlsKExqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOylMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmQoTGphdmEvbGFuZy9TdHJpbmc7KUkiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imdyb3VwKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc0FuY2hvcmluZ0JvdW5kcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1RyYW5zcGFyZW50Qm91bmRzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGl0RW5kKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9va2luZ0F0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF0Y2hlcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhdHRlcm4oKUxqYXZhL3V0aWwvcmVnZXgvUGF0dGVybjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdW90ZVJlcGxhY2VtZW50KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpb24oSUkpTGphdmEvdXRpbC9yZWdleC9NYXRjaGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lvbkVuZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lvblN0YXJ0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZUFsbChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZUZpcnN0KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1aXJlRW5kKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKUxqYXZhL3V0aWwvcmVnZXgvTWF0Y2hlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvdXRpbC9yZWdleC9NYXRjaGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0KExqYXZhL2xhbmcvU3RyaW5nOylJIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b01hdGNoUmVzdWx0KClMamF2YS91dGlsL3JlZ2V4L01hdGNoUmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9InVzZUFuY2hvcmluZ0JvdW5kcyhaKUxqYXZhL3V0aWwvcmVnZXgvTWF0Y2hlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1c2VQYXR0ZXJuKExqYXZhL3V0aWwvcmVnZXgvUGF0dGVybjspTGphdmEvdXRpbC9yZWdleC9NYXRjaGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InVzZVRyYW5zcGFyZW50Qm91bmRzKFopTGphdmEvdXRpbC9yZWdleC9NYXRjaGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9yZWdleC9QYXR0ZXJuIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiIHJlbW92ZWQ9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIgc2luY2U9IjI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXNQcmVkaWNhdGUoKUxqYXZhL3V0aWwvZnVuY3Rpb24vUHJlZGljYXRlOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGlsZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9yZWdleC9QYXR0ZXJuOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBpbGUoTGphdmEvbGFuZy9TdHJpbmc7SSlMamF2YS91dGlsL3JlZ2V4L1BhdHRlcm47Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmxhZ3MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaGVyKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS91dGlsL3JlZ2V4L01hdGNoZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWF0Y2hlcyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhdHRlcm4oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InF1b3RlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGxpdChMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0KExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlO0kpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0QXNTdHJlYW0oTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiIHNpbmNlPSIyNCIvPgotCQk8ZmllbGQgbmFtZT0iQ0FOT05fRVEiLz4KLQkJPGZpZWxkIG5hbWU9IkNBU0VfSU5TRU5TSVRJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTU1FTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJET1RBTEwiLz4KLQkJPGZpZWxkIG5hbWU9IkxJVEVSQUwiLz4KLQkJPGZpZWxkIG5hbWU9Ik1VTFRJTElORSIvPgotCQk8ZmllbGQgbmFtZT0iVU5JQ09ERV9DQVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTklDT0RFX0NIQVJBQ1RFUl9DTEFTUyIgc2luY2U9IjI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJVTklYX0xJTkVTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3JlZ2V4L1BhdHRlcm5TeW50YXhFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXNjcmlwdGlvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXR0ZXJuKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvc3RyZWFtL0Jhc2VTdHJlYW0iIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0F1dG9DbG9zZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1BhcmFsbGVsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXRlcmF0b3IoKUxqYXZhL3V0aWwvSXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib25DbG9zZShMamF2YS9sYW5nL1J1bm5hYmxlOylMamF2YS91dGlsL3N0cmVhbS9CYXNlU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcmFsbGVsKClMamF2YS91dGlsL3N0cmVhbS9CYXNlU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InNlcXVlbnRpYWwoKUxqYXZhL3V0aWwvc3RyZWFtL0Jhc2VTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3BsaXRlcmF0b3IoKUxqYXZhL3V0aWwvU3BsaXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idW5vcmRlcmVkKClMamF2YS91dGlsL3N0cmVhbS9CYXNlU3RyZWFtOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjdW11bGF0b3IoKUxqYXZhL3V0aWwvZnVuY3Rpb24vQmlDb25zdW1lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGFyYWN0ZXJpc3RpY3MoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbWJpbmVyKClMamF2YS91dGlsL2Z1bmN0aW9uL0JpbmFyeU9wZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaGVyKClMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7TGphdmEvdXRpbC9mdW5jdGlvbi9CaUNvbnN1bWVyO0xqYXZhL3V0aWwvZnVuY3Rpb24vQmluYXJ5T3BlcmF0b3I7TGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjtbTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yJENoYXJhY3RlcmlzdGljczspTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7TGphdmEvdXRpbC9mdW5jdGlvbi9CaUNvbnN1bWVyO0xqYXZhL3V0aWwvZnVuY3Rpb24vQmluYXJ5T3BlcmF0b3I7W0xqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvciRDaGFyYWN0ZXJpc3RpY3M7KUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdXBwbGllcigpTGphdmEvdXRpbC9mdW5jdGlvbi9TdXBwbGllcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvciRDaGFyYWN0ZXJpc3RpY3MiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yJENoYXJhY3RlcmlzdGljczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3IkQ2hhcmFjdGVyaXN0aWNzOyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OQ1VSUkVOVCIvPgotCQk8ZmllbGQgbmFtZT0iSURFTlRJVFlfRklOSVNIIi8+Ci0JCTxmaWVsZCBuYW1lPSJVTk9SREVSRUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcnMiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdmVyYWdpbmdEb3VibGUoTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0RvdWJsZUZ1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXZlcmFnaW5nSW50KExqYXZhL3V0aWwvZnVuY3Rpb24vVG9JbnRGdW5jdGlvbjspTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImF2ZXJhZ2luZ0xvbmcoTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0xvbmdGdW5jdGlvbjspTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbGxlY3RpbmdBbmRUaGVuKExqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjtMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY291bnRpbmcoKUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJncm91cGluZ0J5KExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247KUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJncm91cGluZ0J5KExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247TGphdmEvdXRpbC9mdW5jdGlvbi9TdXBwbGllcjtMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7KUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJncm91cGluZ0J5KExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247TGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOylMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ3JvdXBpbmdCeUNvbmN1cnJlbnQoTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Imdyb3VwaW5nQnlDb25jdXJyZW50KExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247TGphdmEvdXRpbC9mdW5jdGlvbi9TdXBwbGllcjtMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7KUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJncm91cGluZ0J5Q29uY3VycmVudChMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uO0xqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjspTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImpvaW5pbmcoKUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJqb2luaW5nKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iam9pbmluZyhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTtMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTspTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcHBpbmcoTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjtMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7KUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXhCeShMamF2YS91dGlsL0NvbXBhcmF0b3I7KUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW5CeShMamF2YS91dGlsL0NvbXBhcmF0b3I7KUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJ0aXRpb25pbmdCeShMamF2YS91dGlsL2Z1bmN0aW9uL1ByZWRpY2F0ZTspTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnRpdGlvbmluZ0J5KExqYXZhL3V0aWwvZnVuY3Rpb24vUHJlZGljYXRlO0xqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjspTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZHVjaW5nKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vQmluYXJ5T3BlcmF0b3I7KUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWR1Y2luZyhMamF2YS9sYW5nL09iamVjdDtMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uO0xqYXZhL3V0aWwvZnVuY3Rpb24vQmluYXJ5T3BlcmF0b3I7KUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWR1Y2luZyhMamF2YS91dGlsL2Z1bmN0aW9uL0JpbmFyeU9wZXJhdG9yOylMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3VtbWFyaXppbmdEb3VibGUoTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0RvdWJsZUZ1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3VtbWFyaXppbmdJbnQoTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0ludEZ1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3VtbWFyaXppbmdMb25nKExqYXZhL3V0aWwvZnVuY3Rpb24vVG9Mb25nRnVuY3Rpb247KUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdW1taW5nRG91YmxlKExqYXZhL3V0aWwvZnVuY3Rpb24vVG9Eb3VibGVGdW5jdGlvbjspTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InN1bW1pbmdJbnQoTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0ludEZ1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3VtbWluZ0xvbmcoTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0xvbmdGdW5jdGlvbjspTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQ29sbGVjdGlvbihMamF2YS91dGlsL2Z1bmN0aW9uL1N1cHBsaWVyOylMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9Db25jdXJyZW50TWFwKExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247TGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQ29uY3VycmVudE1hcChMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uO0xqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247TGphdmEvdXRpbC9mdW5jdGlvbi9CaW5hcnlPcGVyYXRvcjspTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQ29uY3VycmVudE1hcChMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uO0xqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247TGphdmEvdXRpbC9mdW5jdGlvbi9CaW5hcnlPcGVyYXRvcjtMamF2YS91dGlsL2Z1bmN0aW9uL1N1cHBsaWVyOylMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9MaXN0KClMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9NYXAoTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjtMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9NYXAoTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjtMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uO0xqYXZhL3V0aWwvZnVuY3Rpb24vQmluYXJ5T3BlcmF0b3I7KUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b01hcChMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uO0xqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247TGphdmEvdXRpbC9mdW5jdGlvbi9CaW5hcnlPcGVyYXRvcjtMamF2YS91dGlsL2Z1bmN0aW9uL1N1cHBsaWVyOylMamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9TZXQoKUxqYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvc3RyZWFtL0Jhc2VTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxNYXRjaChMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZVByZWRpY2F0ZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImFueU1hdGNoKExqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlUHJlZGljYXRlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXZlcmFnZSgpTGphdmEvdXRpbC9PcHRpb25hbERvdWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJib3hlZCgpTGphdmEvdXRpbC9zdHJlYW0vU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkZXIoKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbGxlY3QoTGphdmEvdXRpbC9mdW5jdGlvbi9TdXBwbGllcjtMamF2YS91dGlsL2Z1bmN0aW9uL09iakRvdWJsZUNvbnN1bWVyO0xqYXZhL3V0aWwvZnVuY3Rpb24vQmlDb25zdW1lcjspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29uY2F0KExqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTtMamF2YS91dGlsL3N0cmVhbS9Eb3VibGVTdHJlYW07KUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3VudCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3RpbmN0KClMamF2YS91dGlsL3N0cmVhbS9Eb3VibGVTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW1wdHkoKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWx0ZXIoTGphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVQcmVkaWNhdGU7KUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kQW55KClMamF2YS91dGlsL09wdGlvbmFsRG91YmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRGaXJzdCgpTGphdmEvdXRpbC9PcHRpb25hbERvdWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbGF0TWFwKExqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlRnVuY3Rpb247KUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoKExqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlQ29uc3VtZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoT3JkZXJlZChMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZUNvbnN1bWVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGUoTGphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVTdXBwbGllcjspTGphdmEvdXRpbC9zdHJlYW0vRG91YmxlU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9Iml0ZXJhdGUoRExqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlVW5hcnlPcGVyYXRvcjspTGphdmEvdXRpbC9zdHJlYW0vRG91YmxlU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9Iml0ZXJhdG9yKClMamF2YS91dGlsL1ByaW1pdGl2ZUl0ZXJhdG9yJE9mRG91YmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxpbWl0KEopTGphdmEvdXRpbC9zdHJlYW0vRG91YmxlU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcChMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZVVuYXJ5T3BlcmF0b3I7KUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXBUb0ludChMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZVRvSW50RnVuY3Rpb247KUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXBUb0xvbmcoTGphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVUb0xvbmdGdW5jdGlvbjspTGphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXBUb09iaihMamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZUZ1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4KClMamF2YS91dGlsL09wdGlvbmFsRG91YmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbigpTGphdmEvdXRpbC9PcHRpb25hbERvdWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub25lTWF0Y2goTGphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVQcmVkaWNhdGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihEKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihbRClMamF2YS91dGlsL3N0cmVhbS9Eb3VibGVTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYWxsZWwoKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZWVrKExqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlQ29uc3VtZXI7KUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWR1Y2UoRExqYXZhL3V0aWwvZnVuY3Rpb24vRG91YmxlQmluYXJ5T3BlcmF0b3I7KUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWR1Y2UoTGphdmEvdXRpbC9mdW5jdGlvbi9Eb3VibGVCaW5hcnlPcGVyYXRvcjspTGphdmEvdXRpbC9PcHRpb25hbERvdWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXF1ZW50aWFsKClMamF2YS91dGlsL3N0cmVhbS9Eb3VibGVTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2tpcChKKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzb3J0ZWQoKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGxpdGVyYXRvcigpTGphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkRvdWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdW0oKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdW1tYXJ5U3RhdGlzdGljcygpTGphdmEvdXRpbC9Eb3VibGVTdW1tYXJ5U3RhdGlzdGljczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b0FycmF5KClbRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9zdHJlYW0vRG91YmxlU3RyZWFtJEJ1aWxkZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0RvdWJsZUNvbnN1bWVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKEQpTGphdmEvdXRpbC9zdHJlYW0vRG91YmxlU3RyZWFtJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGQoKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvc3RyZWFtL0Jhc2VTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxNYXRjaChMamF2YS91dGlsL2Z1bmN0aW9uL0ludFByZWRpY2F0ZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImFueU1hdGNoKExqYXZhL3V0aWwvZnVuY3Rpb24vSW50UHJlZGljYXRlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNEb3VibGVTdHJlYW0oKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc0xvbmdTdHJlYW0oKUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXZlcmFnZSgpTGphdmEvdXRpbC9PcHRpb25hbERvdWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJib3hlZCgpTGphdmEvdXRpbC9zdHJlYW0vU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1aWxkZXIoKUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbSRCdWlsZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbGxlY3QoTGphdmEvdXRpbC9mdW5jdGlvbi9TdXBwbGllcjtMamF2YS91dGlsL2Z1bmN0aW9uL09iakludENvbnN1bWVyO0xqYXZhL3V0aWwvZnVuY3Rpb24vQmlDb25zdW1lcjspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29uY2F0KExqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTtMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW07KUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3VudCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3RpbmN0KClMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW1wdHkoKUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWx0ZXIoTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRQcmVkaWNhdGU7KUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kQW55KClMamF2YS91dGlsL09wdGlvbmFsSW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRGaXJzdCgpTGphdmEvdXRpbC9PcHRpb25hbEludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbGF0TWFwKExqYXZhL3V0aWwvZnVuY3Rpb24vSW50RnVuY3Rpb247KUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoKExqYXZhL3V0aWwvZnVuY3Rpb24vSW50Q29uc3VtZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoT3JkZXJlZChMamF2YS91dGlsL2Z1bmN0aW9uL0ludENvbnN1bWVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGUoTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRTdXBwbGllcjspTGphdmEvdXRpbC9zdHJlYW0vSW50U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9Iml0ZXJhdGUoSUxqYXZhL3V0aWwvZnVuY3Rpb24vSW50VW5hcnlPcGVyYXRvcjspTGphdmEvdXRpbC9zdHJlYW0vSW50U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9Iml0ZXJhdG9yKClMamF2YS91dGlsL1ByaW1pdGl2ZUl0ZXJhdG9yJE9mSW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImxpbWl0KEopTGphdmEvdXRpbC9zdHJlYW0vSW50U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcChMamF2YS91dGlsL2Z1bmN0aW9uL0ludFVuYXJ5T3BlcmF0b3I7KUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXBUb0RvdWJsZShMamF2YS91dGlsL2Z1bmN0aW9uL0ludFRvRG91YmxlRnVuY3Rpb247KUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXBUb0xvbmcoTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRUb0xvbmdGdW5jdGlvbjspTGphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXBUb09iaihMamF2YS91dGlsL2Z1bmN0aW9uL0ludEZ1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4KClMamF2YS91dGlsL09wdGlvbmFsSW50OyIvPgotCQk8bWV0aG9kIG5hbWU9Im1pbigpTGphdmEvdXRpbC9PcHRpb25hbEludDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJub25lTWF0Y2goTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRQcmVkaWNhdGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihJKUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihbSSlMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyYWxsZWwoKUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZWVrKExqYXZhL3V0aWwvZnVuY3Rpb24vSW50Q29uc3VtZXI7KUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyYW5nZShJSSlMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmFuZ2VDbG9zZWQoSUkpTGphdmEvdXRpbC9zdHJlYW0vSW50U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZHVjZShJTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRCaW5hcnlPcGVyYXRvcjspSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlZHVjZShMamF2YS91dGlsL2Z1bmN0aW9uL0ludEJpbmFyeU9wZXJhdG9yOylMamF2YS91dGlsL09wdGlvbmFsSW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InNlcXVlbnRpYWwoKUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJza2lwKEopTGphdmEvdXRpbC9zdHJlYW0vSW50U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InNvcnRlZCgpTGphdmEvdXRpbC9zdHJlYW0vSW50U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0ZXJhdG9yKClMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mSW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InN1bSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InN1bW1hcnlTdGF0aXN0aWNzKClMamF2YS91dGlsL0ludFN1bW1hcnlTdGF0aXN0aWNzOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQXJyYXkoKVtJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW0kQnVpbGRlciIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvZnVuY3Rpb24vSW50Q29uc3VtZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGQoSSlMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW0kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGphdmEvdXRpbC9zdHJlYW0vSW50U3RyZWFtOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvc3RyZWFtL0Jhc2VTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxNYXRjaChMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdQcmVkaWNhdGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbnlNYXRjaChMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdQcmVkaWNhdGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc0RvdWJsZVN0cmVhbSgpTGphdmEvdXRpbC9zdHJlYW0vRG91YmxlU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImF2ZXJhZ2UoKUxqYXZhL3V0aWwvT3B0aW9uYWxEb3VibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYm94ZWQoKUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZGVyKClMamF2YS91dGlsL3N0cmVhbS9Mb25nU3RyZWFtJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29sbGVjdChMamF2YS91dGlsL2Z1bmN0aW9uL1N1cHBsaWVyO0xqYXZhL3V0aWwvZnVuY3Rpb24vT2JqTG9uZ0NvbnN1bWVyO0xqYXZhL3V0aWwvZnVuY3Rpb24vQmlDb25zdW1lcjspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29uY2F0KExqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07TGphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbTspTGphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3VudCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImRpc3RpbmN0KClMamF2YS91dGlsL3N0cmVhbS9Mb25nU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVtcHR5KClMamF2YS91dGlsL3N0cmVhbS9Mb25nU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbHRlcihMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdQcmVkaWNhdGU7KUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEFueSgpTGphdmEvdXRpbC9PcHRpb25hbExvbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEZpcnN0KClMamF2YS91dGlsL09wdGlvbmFsTG9uZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbGF0TWFwKExqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ0Z1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9Mb25nU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvckVhY2goTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nQ29uc3VtZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JFYWNoT3JkZXJlZChMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdDb25zdW1lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlKExqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ1N1cHBsaWVyOylMamF2YS91dGlsL3N0cmVhbS9Mb25nU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9Iml0ZXJhdGUoSkxqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ1VuYXJ5T3BlcmF0b3I7KUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXRlcmF0b3IoKUxqYXZhL3V0aWwvUHJpbWl0aXZlSXRlcmF0b3IkT2ZMb25nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxpbWl0KEopTGphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXAoTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nVW5hcnlPcGVyYXRvcjspTGphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXBUb0RvdWJsZShMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdUb0RvdWJsZUZ1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9Eb3VibGVTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWFwVG9JbnQoTGphdmEvdXRpbC9mdW5jdGlvbi9Mb25nVG9JbnRGdW5jdGlvbjspTGphdmEvdXRpbC9zdHJlYW0vSW50U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcFRvT2JqKExqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ0Z1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4KClMamF2YS91dGlsL09wdGlvbmFsTG9uZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW4oKUxqYXZhL3V0aWwvT3B0aW9uYWxMb25nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vbmVNYXRjaChMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdQcmVkaWNhdGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvZihKKUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoW0opTGphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJhbGxlbCgpTGphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwZWVrKExqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ0NvbnN1bWVyOylMamF2YS91dGlsL3N0cmVhbS9Mb25nU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InJhbmdlKEpKKUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmFuZ2VDbG9zZWQoSkopTGphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWR1Y2UoSkxqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ0JpbmFyeU9wZXJhdG9yOylKIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVkdWNlKExqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ0JpbmFyeU9wZXJhdG9yOylMamF2YS91dGlsL09wdGlvbmFsTG9uZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXF1ZW50aWFsKClMamF2YS91dGlsL3N0cmVhbS9Mb25nU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InNraXAoSilMamF2YS91dGlsL3N0cmVhbS9Mb25nU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InNvcnRlZCgpTGphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzcGxpdGVyYXRvcigpTGphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkxvbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3VtKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3VtbWFyeVN0YXRpc3RpY3MoKUxqYXZhL3V0aWwvTG9uZ1N1bW1hcnlTdGF0aXN0aWNzOyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQXJyYXkoKVtKIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3N0cmVhbS9Mb25nU3RyZWFtJEJ1aWxkZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdDb25zdW1lciIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChKKUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW0kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGphdmEvdXRpbC9zdHJlYW0vTG9uZ1N0cmVhbTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvc3RyZWFtL0Jhc2VTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxNYXRjaChMamF2YS91dGlsL2Z1bmN0aW9uL1ByZWRpY2F0ZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImFueU1hdGNoKExqYXZhL3V0aWwvZnVuY3Rpb24vUHJlZGljYXRlOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnVpbGRlcigpTGphdmEvdXRpbC9zdHJlYW0vU3RyZWFtJEJ1aWxkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29sbGVjdChMamF2YS91dGlsL2Z1bmN0aW9uL1N1cHBsaWVyO0xqYXZhL3V0aWwvZnVuY3Rpb24vQmlDb25zdW1lcjtMamF2YS91dGlsL2Z1bmN0aW9uL0JpQ29uc3VtZXI7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbGxlY3QoTGphdmEvdXRpbC9zdHJlYW0vQ29sbGVjdG9yOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25jYXQoTGphdmEvdXRpbC9zdHJlYW0vU3RyZWFtO0xqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTspTGphdmEvdXRpbC9zdHJlYW0vU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNvdW50KClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGlzdGluY3QoKUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbXB0eSgpTGphdmEvdXRpbC9zdHJlYW0vU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbHRlcihMamF2YS91dGlsL2Z1bmN0aW9uL1ByZWRpY2F0ZTspTGphdmEvdXRpbC9zdHJlYW0vU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRBbnkoKUxqYXZhL3V0aWwvT3B0aW9uYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEZpcnN0KClMamF2YS91dGlsL09wdGlvbmFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZsYXRNYXAoTGphdmEvdXRpbC9mdW5jdGlvbi9GdW5jdGlvbjspTGphdmEvdXRpbC9zdHJlYW0vU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZsYXRNYXBUb0RvdWJsZShMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9Eb3VibGVTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmxhdE1hcFRvSW50KExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247KUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbGF0TWFwVG9Mb25nKExqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247KUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaChMamF2YS91dGlsL2Z1bmN0aW9uL0NvbnN1bWVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yRWFjaE9yZGVyZWQoTGphdmEvdXRpbC9mdW5jdGlvbi9Db25zdW1lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlKExqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7KUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpdGVyYXRlKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vVW5hcnlPcGVyYXRvcjspTGphdmEvdXRpbC9zdHJlYW0vU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImxpbWl0KEopTGphdmEvdXRpbC9zdHJlYW0vU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9Im1hcChMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWFwVG9Eb3VibGUoTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0RvdWJsZUZ1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9Eb3VibGVTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWFwVG9JbnQoTGphdmEvdXRpbC9mdW5jdGlvbi9Ub0ludEZ1bmN0aW9uOylMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWFwVG9Mb25nKExqYXZhL3V0aWwvZnVuY3Rpb24vVG9Mb25nRnVuY3Rpb247KUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWF4KExqYXZhL3V0aWwvQ29tcGFyYXRvcjspTGphdmEvdXRpbC9PcHRpb25hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtaW4oTGphdmEvdXRpbC9Db21wYXJhdG9yOylMamF2YS91dGlsL09wdGlvbmFsOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vbmVNYXRjaChMamF2YS91dGlsL2Z1bmN0aW9uL1ByZWRpY2F0ZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9mKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib2YoW0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGVlayhMamF2YS91dGlsL2Z1bmN0aW9uL0NvbnN1bWVyOylMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVkdWNlKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vQmlGdW5jdGlvbjtMamF2YS91dGlsL2Z1bmN0aW9uL0JpbmFyeU9wZXJhdG9yOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWR1Y2UoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvdXRpbC9mdW5jdGlvbi9CaW5hcnlPcGVyYXRvcjspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVkdWNlKExqYXZhL3V0aWwvZnVuY3Rpb24vQmluYXJ5T3BlcmF0b3I7KUxqYXZhL3V0aWwvT3B0aW9uYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2tpcChKKUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzb3J0ZWQoKUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzb3J0ZWQoTGphdmEvdXRpbC9Db21wYXJhdG9yOylMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9BcnJheSgpW0xqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InRvQXJyYXkoTGphdmEvdXRpbC9mdW5jdGlvbi9JbnRGdW5jdGlvbjspW0xqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9zdHJlYW0vU3RyZWFtJEJ1aWxkZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL2Z1bmN0aW9uL0NvbnN1bWVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS91dGlsL3N0cmVhbS9TdHJlYW0kQnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWlsZCgpTGphdmEvdXRpbC9zdHJlYW0vU3RyZWFtOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC9zdHJlYW0vU3RyZWFtU3VwcG9ydCIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRvdWJsZVN0cmVhbShMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mRG91YmxlO1opTGphdmEvdXRpbC9zdHJlYW0vRG91YmxlU3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImRvdWJsZVN0cmVhbShMamF2YS91dGlsL2Z1bmN0aW9uL1N1cHBsaWVyO0laKUxqYXZhL3V0aWwvc3RyZWFtL0RvdWJsZVN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRTdHJlYW0oTGphdmEvdXRpbC9TcGxpdGVyYXRvciRPZkludDtaKUxqYXZhL3V0aWwvc3RyZWFtL0ludFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRTdHJlYW0oTGphdmEvdXRpbC9mdW5jdGlvbi9TdXBwbGllcjtJWilMamF2YS91dGlsL3N0cmVhbS9JbnRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9uZ1N0cmVhbShMamF2YS91dGlsL1NwbGl0ZXJhdG9yJE9mTG9uZztaKUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9uZ1N0cmVhbShMamF2YS91dGlsL2Z1bmN0aW9uL1N1cHBsaWVyO0laKUxqYXZhL3V0aWwvc3RyZWFtL0xvbmdTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RyZWFtKExqYXZhL3V0aWwvU3BsaXRlcmF0b3I7WilMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic3RyZWFtKExqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI7SVopTGphdmEvdXRpbC9zdHJlYW0vU3RyZWFtOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC96aXAvQWRsZXIzMiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC96aXAvQ2hlY2tzdW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZShbQilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3ppcC9DUkMzMiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC96aXAvQ2hlY2tzdW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7KVYiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZShbQilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3ppcC9DaGVja2VkSW5wdXRTdHJlYW0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9GaWx0ZXJJbnB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTtMamF2YS91dGlsL3ppcC9DaGVja3N1bTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoZWNrc3VtKClMamF2YS91dGlsL3ppcC9DaGVja3N1bTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvemlwL0NoZWNrZWRPdXRwdXRTdHJlYW0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9GaWx0ZXJPdXRwdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vT3V0cHV0U3RyZWFtO0xqYXZhL3V0aWwvemlwL0NoZWNrc3VtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hlY2tzdW0oKUxqYXZhL3V0aWwvemlwL0NoZWNrc3VtOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC96aXAvQ2hlY2tzdW0iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbHVlKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlKFtCSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC96aXAvRGF0YUZvcm1hdEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3ppcC9EZWZsYXRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVmbGF0ZShbQilJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVmbGF0ZShbQklJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWZsYXRlKFtCSUlJKUkiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWRsZXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlc1JlYWQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlc1dyaXR0ZW4oKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3RhbEluKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VG90YWxPdXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZWVkc0lucHV0KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaWN0aW9uYXJ5KFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaWN0aW9uYXJ5KFtCSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldElucHV0KFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dChbQklJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMZXZlbChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdHJhdGVneShJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkJFU1RfQ09NUFJFU1NJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkJFU1RfU1BFRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfQ09NUFJFU1NJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfU1RSQVRFR1kiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkxBVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUxURVJFRCIvPgotCQk8ZmllbGQgbmFtZT0iRlVMTF9GTFVTSCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIVUZGTUFOX09OTFkiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX0NPTVBSRVNTSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19GTFVTSCIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTWU5DX0ZMVVNIIiBzaW5jZT0iMTkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvemlwL0RlZmxhdGVySW5wdXRTdHJlYW0iIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9GaWx0ZXJJbnB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTtMamF2YS91dGlsL3ppcC9EZWZsYXRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTtMamF2YS91dGlsL3ppcC9EZWZsYXRlcjtJKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImJ1ZiIvPgotCQk8ZmllbGQgbmFtZT0iZGVmIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3ppcC9EZWZsYXRlck91dHB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0ZpbHRlck91dHB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vT3V0cHV0U3RyZWFtO0xqYXZhL3V0aWwvemlwL0RlZmxhdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTtMamF2YS91dGlsL3ppcC9EZWZsYXRlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vT3V0cHV0U3RyZWFtO0xqYXZhL3V0aWwvemlwL0RlZmxhdGVyO0laKVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07TGphdmEvdXRpbC96aXAvRGVmbGF0ZXI7WilWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vT3V0cHV0U3RyZWFtO1opViIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVmbGF0ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmlzaCgpViIvPgotCQk8ZmllbGQgbmFtZT0iYnVmIi8+Ci0JCTxmaWVsZCBuYW1lPSJkZWYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvemlwL0daSVBJbnB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvemlwL0luZmxhdGVySW5wdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07SSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJHWklQX01BR0lDIi8+Ci0JCTxmaWVsZCBuYW1lPSJjcmMiLz4KLQkJPGZpZWxkIG5hbWU9ImVvcyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC96aXAvR1pJUE91dHB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvemlwL0RlZmxhdGVyT3V0cHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTtJWilWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vT3V0cHV0U3RyZWFtO1opViIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJjcmMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvemlwL0luZmxhdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5kKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluaXNoZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBZGxlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5dGVzUmVhZCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5dGVzV3JpdHRlbigpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlbWFpbmluZygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRvdGFsSW4oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUb3RhbE91dCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImluZmxhdGUoW0IpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImluZmxhdGUoW0JJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmVlZHNEaWN0aW9uYXJ5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmVlZHNJbnB1dCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGljdGlvbmFyeShbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGljdGlvbmFyeShbQklJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dChbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5wdXQoW0JJSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3ppcC9JbmZsYXRlcklucHV0U3RyZWFtIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vRmlsdGVySW5wdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07TGphdmEvdXRpbC96aXAvSW5mbGF0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07TGphdmEvdXRpbC96aXAvSW5mbGF0ZXI7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsbCgpViIvPgotCQk8ZmllbGQgbmFtZT0iYnVmIi8+Ci0JCTxmaWVsZCBuYW1lPSJjbG9zZWQiIHNpbmNlPSIyNCIgZGVwcmVjYXRlZD0iMjkiLz4KLQkJPGZpZWxkIG5hbWU9ImluZiIvPgotCQk8ZmllbGQgbmFtZT0ibGVuIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3ppcC9JbmZsYXRlck91dHB1dFN0cmVhbSIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0ZpbHRlck91dHB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vT3V0cHV0U3RyZWFtO0xqYXZhL3V0aWwvemlwL0luZmxhdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTtMamF2YS91dGlsL3ppcC9JbmZsYXRlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5pc2goKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImJ1ZiIvPgotCQk8ZmllbGQgbmFtZT0iaW5mIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3ppcC9aaXBFbnRyeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC96aXAvWmlwRW50cnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21tZW50KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21wcmVzc2VkU2l6ZSgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENyYygpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENyZWF0aW9uVGltZSgpTGphdmEvbmlvL2ZpbGUvYXR0cmlidXRlL0ZpbGVUaW1lOyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXh0cmEoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFzdEFjY2Vzc1RpbWUoKUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlVGltZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExhc3RNb2RpZmllZFRpbWUoKUxqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlVGltZTsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldGhvZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpemUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEaXJlY3RvcnkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb21tZW50KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29tcHJlc3NlZFNpemUoSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3JjKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENyZWF0aW9uVGltZShMamF2YS9uaW8vZmlsZS9hdHRyaWJ1dGUvRmlsZVRpbWU7KUxqYXZhL3V0aWwvemlwL1ppcEVudHJ5OyIgc2luY2U9IjI2Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXh0cmEoW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExhc3RBY2Nlc3NUaW1lKExqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlVGltZTspTGphdmEvdXRpbC96aXAvWmlwRW50cnk7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMYXN0TW9kaWZpZWRUaW1lKExqYXZhL25pby9maWxlL2F0dHJpYnV0ZS9GaWxlVGltZTspTGphdmEvdXRpbC96aXAvWmlwRW50cnk7IiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNZXRob2QoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2l6ZShKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaW1lKEopViIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOQVRUIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkFUWCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5DT00iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOQ1JDIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkRTSyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5FWFQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VORkxHIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkhEUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5IT1ciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOTEVOIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTk5BTSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5PRkYiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOU0lHIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlNJWiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5USU0iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVkVNIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlZFUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZMQVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iRU5EQ09NIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVOREhEUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRPRkYiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EU0lHIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVORFNJWiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRTVUIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EVE9UIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVENSQyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRIRFIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUTEVOIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFNJRyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRTSVoiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQ1JDIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0VYVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NGTEciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DSERSIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0hPVyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NMRU4iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DTkFNIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ1NJRyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NTSVoiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DVElNIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ1ZFUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVE9SRUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvemlwL1ppcEVycm9yIiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9JbnRlcm5hbEVycm9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3ppcC9aaXBFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmEvdXRpbC96aXAvWmlwRmlsZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vQ2xvc2VhYmxlIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlO0lMamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0OylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTtMamF2YS9uaW8vY2hhcnNldC9DaGFyc2V0OylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldDspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2UoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbnRyaWVzKClMamF2YS91dGlsL0VudW1lcmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbW1lbnQoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjE5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW50cnkoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvemlwL1ppcEVudHJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0U3RyZWFtKExqYXZhL3V0aWwvemlwL1ppcEVudHJ5OylMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RyZWFtKClMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07IiBzaW5jZT0iMjYiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkFUVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5BVFgiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOQ09NIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkNSQyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5EU0siIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VORVhUIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkZMRyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5IRFIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOSE9XIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkxFTiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5OQU0iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOT0ZGIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlNJRyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5TSVoiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVElNIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlZFTSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5WRVIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EQ09NIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVOREhEUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRPRkYiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EU0lHIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVORFNJWiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRTVUIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EVE9UIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVENSQyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRIRFIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUTEVOIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFNJRyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRTSVoiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DQ1JDIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0VYVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NGTEciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DSERSIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0hPVyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NMRU4iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DTkFNIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ1NJRyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NTSVoiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DVElNIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ1ZFUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJPUEVOX0RFTEVURSIvPgotCQk8ZmllbGQgbmFtZT0iT1BFTl9SRUFEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YS91dGlsL3ppcC9aaXBJbnB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvemlwL0luZmxhdGVySW5wdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vSW5wdXRTdHJlYW07TGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldDspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2VFbnRyeSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVppcEVudHJ5KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL3ppcC9aaXBFbnRyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZXh0RW50cnkoKUxqYXZhL3V0aWwvemlwL1ppcEVudHJ5OyIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOQVRUIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkFUWCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5DT00iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOQ1JDIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkRTSyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5FWFQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VORkxHIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkhEUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5IT1ciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOTEVOIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTk5BTSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5PRkYiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOU0lHIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlNJWiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5USU0iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVkVNIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlZFUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRDT00iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRU5ESERSIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVORE9GRiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRTSUciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EU0laIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVORFNVQiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRUT1QiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUQ1JDIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVEhEUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRMRU4iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUU0lHIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFNJWiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NDUkMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DRVhUIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0ZMRyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NIRFIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DSE9XIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0xFTiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NOQU0iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DU0lHIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ1NJWiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NUSU0iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DVkVSIiBzaW5jZT0iMjEiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZhL3V0aWwvemlwL1ppcE91dHB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvemlwL0RlZmxhdGVyT3V0cHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07TGphdmEvbmlvL2NoYXJzZXQvQ2hhcnNldDspViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2VFbnRyeSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InB1dE5leHRFbnRyeShMamF2YS91dGlsL3ppcC9aaXBFbnRyeTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMZXZlbChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNZXRob2QoSSlWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5BVFQiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOQVRYIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkNPTSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5DUkMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VORFNLIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkVYVCIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5GTEciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOSERSIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTkhPVyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5MRU4iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOTkFNIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTk9GRiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5TSUciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOU0laIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkNFTlRJTSIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJDRU5WRU0iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iQ0VOVkVSIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkxBVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRDT00iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRU5ESERSIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVORE9GRiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRTSUciIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRU5EU0laIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVORFNVQiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRUT1QiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUQ1JDIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVEhEUiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFRMRU4iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iRVhUU0lHIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkVYVFNJWiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NDUkMiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DRVhUIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0ZMRyIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NIRFIiIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DSE9XIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0xFTiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NOQU0iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DU0lHIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ1NJWiIgc2luY2U9IjIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJMT0NUSU0iIHNpbmNlPSIyMSIvPgotCQk8ZmllbGQgbmFtZT0iTE9DVkVSIiBzaW5jZT0iMjEiLz4KLQkJPGZpZWxkIG5hbWU9IlNUT1JFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9BRUFEQmFkVGFnRXhjZXB0aW9uIiBzaW5jZT0iMTkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZheC9jcnlwdG8vQmFkUGFkZGluZ0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9CYWRQYWRkaW5nRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvR2VuZXJhbFNlY3VyaXR5RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL0NpcGhlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZheC9jcnlwdG8vQ2lwaGVyU3BpO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9GaW5hbCgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb0ZpbmFsKExqYXZhL25pby9CeXRlQnVmZmVyO0xqYXZhL25pby9CeXRlQnVmZmVyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9GaW5hbChbQilbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImRvRmluYWwoW0JJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb0ZpbmFsKFtCSUkpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb0ZpbmFsKFtCSUlbQilJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9GaW5hbChbQklJW0JJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGdvcml0aG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJsb2NrU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4ZW1wdGlvbk1lY2hhbmlzbSgpTGphdmF4L2NyeXB0by9FeGVtcHRpb25NZWNoYW5pc207Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SVYoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZheC9jcnlwdG8vQ2lwaGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgvY3J5cHRvL0NpcGhlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9Qcm92aWRlcjspTGphdmF4L2NyeXB0by9DaXBoZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4QWxsb3dlZEtleUxlbmd0aChMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heEFsbG93ZWRQYXJhbWV0ZXJTcGVjKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9zcGVjL0FsZ29yaXRobVBhcmFtZXRlclNwZWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3V0cHV0U2l6ZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXJzKClMamF2YS9zZWN1cml0eS9BbGdvcml0aG1QYXJhbWV0ZXJzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3ZpZGVyKClMamF2YS9zZWN1cml0eS9Qcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KElMamF2YS9zZWN1cml0eS9LZXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KElMamF2YS9zZWN1cml0eS9LZXk7TGphdmEvc2VjdXJpdHkvQWxnb3JpdGhtUGFyYW1ldGVyczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoSUxqYXZhL3NlY3VyaXR5L0tleTtMamF2YS9zZWN1cml0eS9BbGdvcml0aG1QYXJhbWV0ZXJzO0xqYXZhL3NlY3VyaXR5L1NlY3VyZVJhbmRvbTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoSUxqYXZhL3NlY3VyaXR5L0tleTtMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb207KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KElMamF2YS9zZWN1cml0eS9LZXk7TGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdChJTGphdmEvc2VjdXJpdHkvS2V5O0xqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYztMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb207KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KElMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdChJTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZTtMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb207KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bndyYXAoW0JMamF2YS9sYW5nL1N0cmluZztJKUxqYXZhL3NlY3VyaXR5L0tleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7TGphdmEvbmlvL0J5dGVCdWZmZXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoW0IpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGUoW0JJSSlbQiIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZShbQklJW0IpSSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZShbQklJW0JJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVBQUQoTGphdmEvbmlvL0J5dGVCdWZmZXI7KVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZUFBRChbQilWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVBQUQoW0JJSSlWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cmFwKExqYXZhL3NlY3VyaXR5L0tleTspW0IiLz4KLQkJPGZpZWxkIG5hbWU9IkRFQ1JZUFRfTU9ERSIvPgotCQk8ZmllbGQgbmFtZT0iRU5DUllQVF9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUklWQVRFX0tFWSIvPgotCQk8ZmllbGQgbmFtZT0iUFVCTElDX0tFWSIvPgotCQk8ZmllbGQgbmFtZT0iU0VDUkVUX0tFWSIvPgotCQk8ZmllbGQgbmFtZT0iVU5XUkFQX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IldSQVBfTU9ERSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9DaXBoZXJJbnB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0ZpbHRlcklucHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0lucHV0U3RyZWFtO0xqYXZheC9jcnlwdG8vQ2lwaGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL0NpcGhlck91dHB1dFN0cmVhbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0ZpbHRlck91dHB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9PdXRwdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vT3V0cHV0U3RyZWFtO0xqYXZheC9jcnlwdG8vQ2lwaGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL0NpcGhlclNwaSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lRG9GaW5hbChMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZURvRmluYWwoW0JJSSlbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZURvRmluYWwoW0JJSVtCSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0QmxvY2tTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0SVYoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0S2V5U2l6ZShMamF2YS9zZWN1cml0eS9LZXk7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZXRPdXRwdXRTaXplKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUdldFBhcmFtZXRlcnMoKUxqYXZhL3NlY3VyaXR5L0FsZ29yaXRobVBhcmFtZXRlcnM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChJTGphdmEvc2VjdXJpdHkvS2V5O0xqYXZhL3NlY3VyaXR5L0FsZ29yaXRobVBhcmFtZXRlcnM7TGphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChJTGphdmEvc2VjdXJpdHkvS2V5O0xqYXZhL3NlY3VyaXR5L1NlY3VyZVJhbmRvbTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUluaXQoSUxqYXZhL3NlY3VyaXR5L0tleTtMamF2YS9zZWN1cml0eS9zcGVjL0FsZ29yaXRobVBhcmFtZXRlclNwZWM7TGphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lU2V0TW9kZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZVNldFBhZGRpbmcoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVVbndyYXAoW0JMamF2YS9sYW5nL1N0cmluZztJKUxqYXZhL3NlY3VyaXR5L0tleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVVcGRhdGUoTGphdmEvbmlvL0J5dGVCdWZmZXI7TGphdmEvbmlvL0J5dGVCdWZmZXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVVcGRhdGUoW0JJSSlbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZVVwZGF0ZShbQklJW0JJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVVcGRhdGVBQUQoTGphdmEvbmlvL0J5dGVCdWZmZXI7KVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZVVwZGF0ZUFBRChbQklJKVYiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZVdyYXAoTGphdmEvc2VjdXJpdHkvS2V5OylbQiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9FbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO1tCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvQWxnb3JpdGhtUGFyYW1ldGVycztbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGdOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGdQYXJhbWV0ZXJzKClMamF2YS9zZWN1cml0eS9BbGdvcml0aG1QYXJhbWV0ZXJzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY29kZWQoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5jcnlwdGVkRGF0YSgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlTcGVjKExqYXZhL3NlY3VyaXR5L0tleTspTGphdmEvc2VjdXJpdHkvc3BlYy9QS0NTOEVuY29kZWRLZXlTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleVNwZWMoTGphdmEvc2VjdXJpdHkvS2V5O0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9zcGVjL1BLQ1M4RW5jb2RlZEtleVNwZWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5U3BlYyhMamF2YS9zZWN1cml0eS9LZXk7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7KUxqYXZhL3NlY3VyaXR5L3NwZWMvUEtDUzhFbmNvZGVkS2V5U3BlYzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXlTcGVjKExqYXZheC9jcnlwdG8vQ2lwaGVyOylMamF2YS9zZWN1cml0eS9zcGVjL1BLQ1M4RW5jb2RlZEtleVNwZWM7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL0V4ZW1wdGlvbk1lY2hhbmlzbSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZheC9jcnlwdG8vRXhlbXB0aW9uTWVjaGFuaXNtU3BpO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuRXhlbXB0aW9uQmxvYigpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5FeGVtcHRpb25CbG9iKFtCKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZW5FeGVtcHRpb25CbG9iKFtCSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZheC9jcnlwdG8vRXhlbXB0aW9uTWVjaGFuaXNtOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgvY3J5cHRvL0V4ZW1wdGlvbk1lY2hhbmlzbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9Qcm92aWRlcjspTGphdmF4L2NyeXB0by9FeGVtcHRpb25NZWNoYW5pc207Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3V0cHV0U2l6ZShJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm92aWRlcigpTGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdChMamF2YS9zZWN1cml0eS9LZXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KExqYXZhL3NlY3VyaXR5L0tleTtMamF2YS9zZWN1cml0eS9BbGdvcml0aG1QYXJhbWV0ZXJzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdChMamF2YS9zZWN1cml0eS9LZXk7TGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDcnlwdG9BbGxvd2VkKExqYXZhL3NlY3VyaXR5L0tleTspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9FeGVtcHRpb25NZWNoYW5pc21FeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9HZW5lcmFsU2VjdXJpdHlFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9jcnlwdG8vRXhlbXB0aW9uTWVjaGFuaXNtU3BpIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZW5FeGVtcHRpb25CbG9iKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUdlbkV4ZW1wdGlvbkJsb2IoW0JJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZXRPdXRwdXRTaXplKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUluaXQoTGphdmEvc2VjdXJpdHkvS2V5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChMamF2YS9zZWN1cml0eS9LZXk7TGphdmEvc2VjdXJpdHkvQWxnb3JpdGhtUGFyYW1ldGVyczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUluaXQoTGphdmEvc2VjdXJpdHkvS2V5O0xqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9JbGxlZ2FsQmxvY2tTaXplRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvR2VuZXJhbFNlY3VyaXR5RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL0tleUFncmVlbWVudCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZheC9jcnlwdG8vS2V5QWdyZWVtZW50U3BpO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9QaGFzZShMamF2YS9zZWN1cml0eS9LZXk7WilMamF2YS9zZWN1cml0eS9LZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVTZWNyZXQoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVTZWNyZXQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZheC9jcnlwdG8vU2VjcmV0S2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlU2VjcmV0KFtCSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxnb3JpdGhtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZzspTGphdmF4L2NyeXB0by9LZXlBZ3JlZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZheC9jcnlwdG8vS2V5QWdyZWVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOylMamF2YXgvY3J5cHRvL0tleUFncmVlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm92aWRlcigpTGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdChMamF2YS9zZWN1cml0eS9LZXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KExqYXZhL3NlY3VyaXR5L0tleTtMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb207KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KExqYXZhL3NlY3VyaXR5L0tleTtMamF2YS9zZWN1cml0eS9zcGVjL0FsZ29yaXRobVBhcmFtZXRlclNwZWM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KExqYXZhL3NlY3VyaXR5L0tleTtMamF2YS9zZWN1cml0eS9zcGVjL0FsZ29yaXRobVBhcmFtZXRlclNwZWM7TGphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL0tleUFncmVlbWVudFNwaSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lRG9QaGFzZShMamF2YS9zZWN1cml0eS9LZXk7WilMamF2YS9zZWN1cml0eS9LZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2VuZXJhdGVTZWNyZXQoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2VuZXJhdGVTZWNyZXQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZheC9jcnlwdG8vU2VjcmV0S2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUdlbmVyYXRlU2VjcmV0KFtCSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChMamF2YS9zZWN1cml0eS9LZXk7TGphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChMamF2YS9zZWN1cml0eS9LZXk7TGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjO0xqYXZhL3NlY3VyaXR5L1NlY3VyZVJhbmRvbTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9LZXlHZW5lcmF0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YXgvY3J5cHRvL0tleUdlbmVyYXRvclNwaTtMamF2YS9zZWN1cml0eS9Qcm92aWRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlS2V5KClMamF2YXgvY3J5cHRvL1NlY3JldEtleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGdvcml0aG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgvY3J5cHRvL0tleUdlbmVyYXRvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmF4L2NyeXB0by9LZXlHZW5lcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7KUxqYXZheC9jcnlwdG8vS2V5R2VuZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3ZpZGVyKClMamF2YS9zZWN1cml0eS9Qcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoSUxqYXZhL3NlY3VyaXR5L1NlY3VyZVJhbmRvbTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoTGphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdChMamF2YS9zZWN1cml0eS9zcGVjL0FsZ29yaXRobVBhcmFtZXRlclNwZWM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KExqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYztMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb207KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9jcnlwdG8vS2V5R2VuZXJhdG9yU3BpIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZW5lcmF0ZUtleSgpTGphdmF4L2NyeXB0by9TZWNyZXRLZXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChJTGphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb207KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVJbml0KExqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYztMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb207KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9jcnlwdG8vTWFjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YXgvY3J5cHRvL01hY1NwaTtMamF2YS9zZWN1cml0eS9Qcm92aWRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRvRmluYWwoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9GaW5hbChbQilbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImRvRmluYWwoW0JJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGdvcml0aG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgvY3J5cHRvL01hYzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmF4L2NyeXB0by9NYWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7KUxqYXZheC9jcnlwdG8vTWFjOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hY0xlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3ZpZGVyKClMamF2YS9zZWN1cml0eS9Qcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KExqYXZhL3NlY3VyaXR5L0tleTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoTGphdmEvc2VjdXJpdHkvS2V5O0xqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlKEIpViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZShMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZShbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlKFtCSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9NYWNTcGkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZURvRmluYWwoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0TWFjTGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChMamF2YS9zZWN1cml0eS9LZXk7TGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lUmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVVcGRhdGUoQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lVXBkYXRlKExqYXZhL25pby9CeXRlQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lVXBkYXRlKFtCSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9Ob1N1Y2hQYWRkaW5nRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvR2VuZXJhbFNlY3VyaXR5RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL051bGxDaXBoZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YXgvY3J5cHRvL0NpcGhlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9TZWFsZWRPYmplY3QiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9TZXJpYWxpemFibGU7TGphdmF4L2NyeXB0by9DaXBoZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmF4L2NyeXB0by9TZWFsZWRPYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGdvcml0aG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iamVjdChMamF2YS9zZWN1cml0eS9LZXk7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iamVjdChMamF2YS9zZWN1cml0eS9LZXk7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9iamVjdChMamF2YXgvY3J5cHRvL0NpcGhlcjspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJlbmNvZGVkUGFyYW1zIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL1NlY3JldEtleSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvS2V5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmF4L3NlY3VyaXR5L2F1dGgvRGVzdHJveWFibGUiIHNpbmNlPSIyNiIvPgotCQk8ZmllbGQgbmFtZT0ic2VyaWFsVmVyc2lvblVJRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9TZWNyZXRLZXlGYWN0b3J5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmF4L2NyeXB0by9TZWNyZXRLZXlGYWN0b3J5U3BpO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2VuZXJhdGVTZWNyZXQoTGphdmEvc2VjdXJpdHkvc3BlYy9LZXlTcGVjOylMamF2YXgvY3J5cHRvL1NlY3JldEtleTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGdvcml0aG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgvY3J5cHRvL1NlY3JldEtleUZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZheC9jcnlwdG8vU2VjcmV0S2V5RmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9Qcm92aWRlcjspTGphdmF4L2NyeXB0by9TZWNyZXRLZXlGYWN0b3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleVNwZWMoTGphdmF4L2NyeXB0by9TZWNyZXRLZXk7TGphdmEvbGFuZy9DbGFzczspTGphdmEvc2VjdXJpdHkvc3BlYy9LZXlTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3ZpZGVyKClMamF2YS9zZWN1cml0eS9Qcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFuc2xhdGVLZXkoTGphdmF4L2NyeXB0by9TZWNyZXRLZXk7KUxqYXZheC9jcnlwdG8vU2VjcmV0S2V5OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9TZWNyZXRLZXlGYWN0b3J5U3BpIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZW5lcmF0ZVNlY3JldChMamF2YS9zZWN1cml0eS9zcGVjL0tleVNwZWM7KUxqYXZheC9jcnlwdG8vU2VjcmV0S2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUdldEtleVNwZWMoTGphdmF4L2NyeXB0by9TZWNyZXRLZXk7TGphdmEvbGFuZy9DbGFzczspTGphdmEvc2VjdXJpdHkvc3BlYy9LZXlTcGVjOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZVRyYW5zbGF0ZUtleShMamF2YXgvY3J5cHRvL1NlY3JldEtleTspTGphdmF4L2NyeXB0by9TZWNyZXRLZXk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL1Nob3J0QnVmZmVyRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvR2VuZXJhbFNlY3VyaXR5RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL2ludGVyZmFjZXMvREhLZXkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtcygpTGphdmF4L2NyeXB0by9zcGVjL0RIUGFyYW1ldGVyU3BlYzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9jcnlwdG8vaW50ZXJmYWNlcy9ESFByaXZhdGVLZXkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L1ByaXZhdGVLZXkiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YXgvY3J5cHRvL2ludGVyZmFjZXMvREhLZXkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRYKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJzZXJpYWxWZXJzaW9uVUlEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL2ludGVyZmFjZXMvREhQdWJsaWNLZXkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L1B1YmxpY0tleSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC9jcnlwdG8vaW50ZXJmYWNlcy9ESEtleSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFkoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPGZpZWxkIG5hbWU9InNlcmlhbFZlcnNpb25VSUQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9jcnlwdG8vaW50ZXJmYWNlcy9QQkVLZXkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC9jcnlwdG8vU2VjcmV0S2V5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SXRlcmF0aW9uQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXNzd29yZCgpW0MiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTYWx0KClbQiIvPgotCQk8ZmllbGQgbmFtZT0ic2VyaWFsVmVyc2lvblVJRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9zcGVjL0RFU0tleVNwZWMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvS2V5U3BlYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5KClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGFyaXR5QWRqdXN0ZWQoW0JJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1dlYWsoW0JJKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkRFU19LRVlfTEVOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL3NwZWMvREVTZWRlS2V5U3BlYyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9LZXlTcGVjIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0JJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRLZXkoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQYXJpdHlBZGp1c3RlZChbQkkpWiIvPgotCQk8ZmllbGQgbmFtZT0iREVTX0VERV9LRVlfTEVOIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL3NwZWMvREhHZW5QYXJhbWV0ZXJTcGVjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL0FsZ29yaXRobVBhcmFtZXRlclNwZWMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4cG9uZW50U2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW1lU2l6ZSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9zcGVjL0RIUGFyYW1ldGVyU3BlYyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFAoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9jcnlwdG8vc3BlYy9ESFByaXZhdGVLZXlTcGVjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL0tleVNwZWMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UCgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFgoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9jcnlwdG8vc3BlYy9ESFB1YmxpY0tleVNwZWMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvS2V5U3BlYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEcoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WSgpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9zcGVjL0dDTVBhcmFtZXRlclNwZWMiIHNpbmNlPSIxOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL0FsZ29yaXRobVBhcmFtZXRlclNwZWMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSVtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSVtCSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElWKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRMZW4oKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9jcnlwdG8vc3BlYy9JdlBhcmFtZXRlclNwZWMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElWKClbQiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L2NyeXB0by9zcGVjL09BRVBQYXJhbWV0ZXJTcGVjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL0FsZ29yaXRobVBhcmFtZXRlclNwZWMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjO0xqYXZheC9jcnlwdG8vc3BlYy9QU291cmNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGlnZXN0QWxnb3JpdGhtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNR0ZBbGdvcml0aG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1HRlBhcmFtZXRlcnMoKUxqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQU291cmNlKClMamF2YXgvY3J5cHRvL3NwZWMvUFNvdXJjZTsiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9jcnlwdG8vc3BlYy9QQkVLZXlTcGVjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL0tleVNwZWMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0MpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQ1tCSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtDW0JJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJQYXNzd29yZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEl0ZXJhdGlvbkNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2V5TGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFzc3dvcmQoKVtDIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2FsdCgpW0IiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9jcnlwdG8vc3BlYy9QQkVQYXJhbWV0ZXJTcGVjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zZWN1cml0eS9zcGVjL0FsZ29yaXRobVBhcmFtZXRlclNwZWMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0JJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0JJTGphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjOylWIiBzaW5jZT0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJdGVyYXRpb25Db3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtZXRlclNwZWMoKUxqYXZhL3NlY3VyaXR5L3NwZWMvQWxnb3JpdGhtUGFyYW1ldGVyU3BlYzsiIHNpbmNlPSIyNiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNhbHQoKVtCIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL3NwZWMvUFNvdXJjZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxnb3JpdGhtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9jcnlwdG8vc3BlYy9QU291cmNlJFBTcGVjaWZpZWQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YXgvY3J5cHRvL3NwZWMvUFNvdXJjZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoKVtCIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL3NwZWMvUkMyUGFyYW1ldGVyU3BlYyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJW0JJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFZmZlY3RpdmVLZXlCaXRzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SVYoKVtCIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvY3J5cHRvL3NwZWMvUkM1UGFyYW1ldGVyU3BlYyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9BbGdvcml0aG1QYXJhbWV0ZXJTcGVjIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJSVtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlJW0JJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJVigpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3VuZHMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZXJzaW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V29yZFNpemUoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9jcnlwdG8vc3BlYy9TZWNyZXRLZXlTcGVjIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiIHJlbW92ZWQ9IjI0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvc3BlYy9LZXlTcGVjIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmF4L2NyeXB0by9TZWNyZXRLZXkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0JJSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMMTAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsQ2hvb3NlQ29uZmlnKExqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMRGlzcGxheTtbSVtMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTENvbmZpZztJW0kpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbENvcHlCdWZmZXJzKExqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMRGlzcGxheTtMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTFN1cmZhY2U7TGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xDcmVhdGVDb250ZXh0KExqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMRGlzcGxheTtMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTENvbmZpZztMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTENvbnRleHQ7W0kpTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xDb250ZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKExqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMRGlzcGxheTtMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTENvbmZpZztbSSlMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTFN1cmZhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZShMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTERpc3BsYXk7TGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xDb25maWc7TGphdmEvbGFuZy9PYmplY3Q7W0kpTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xTdXJmYWNlOyIgZGVwcmVjYXRlZD0iMjYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKExqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMRGlzcGxheTtMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTENvbmZpZztMamF2YS9sYW5nL09iamVjdDtbSSlMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTFN1cmZhY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsRGVzdHJveUNvbnRleHQoTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xEaXNwbGF5O0xqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMQ29udGV4dDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbERlc3Ryb3lTdXJmYWNlKExqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMRGlzcGxheTtMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTFN1cmZhY2U7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xHZXRDb25maWdBdHRyaWIoTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xEaXNwbGF5O0xqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMQ29uZmlnO0lbSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsR2V0Q29uZmlncyhMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTERpc3BsYXk7W0xqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMQ29uZmlnO0lbSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsR2V0Q3VycmVudENvbnRleHQoKUxqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xHZXRDdXJyZW50RGlzcGxheSgpTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xEaXNwbGF5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbEdldEN1cnJlbnRTdXJmYWNlKEkpTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xTdXJmYWNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbEdldERpc3BsYXkoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMRGlzcGxheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xHZXRFcnJvcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbEluaXRpYWxpemUoTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xEaXNwbGF5O1tJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xNYWtlQ3VycmVudChMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTERpc3BsYXk7TGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xTdXJmYWNlO0xqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMU3VyZmFjZTtMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTENvbnRleHQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xRdWVyeUNvbnRleHQoTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xEaXNwbGF5O0xqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMQ29udGV4dDtJW0kpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbFF1ZXJ5U3RyaW5nKExqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMRGlzcGxheTtJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbFF1ZXJ5U3VyZmFjZShMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTERpc3BsYXk7TGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xTdXJmYWNlO0lbSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZWdsU3dhcEJ1ZmZlcnMoTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xEaXNwbGF5O0xqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMU3VyZmFjZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImVnbFRlcm1pbmF0ZShMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTERpc3BsYXk7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xXYWl0R0woKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJlZ2xXYWl0TmF0aXZlKElMamF2YS9sYW5nL09iamVjdDspWiIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0FMUEhBX0ZPUk1BVCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0FMUEhBX01BU0tfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0FMUEhBX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9CQURfQUNDRVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfQkFEX0FMTE9DIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfQkFEX0FUVFJJQlVURSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0JBRF9DT05GSUciLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9CQURfQ09OVEVYVCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0JBRF9DVVJSRU5UX1NVUkZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9CQURfRElTUExBWSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0JBRF9NQVRDSCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0JBRF9OQVRJVkVfUElYTUFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfQkFEX05BVElWRV9XSU5ET1ciLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9CQURfUEFSQU1FVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfQkFEX1NVUkZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9CTFVFX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9CVUZGRVJfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0NPTE9SU1BBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9DT0xPUl9CVUZGRVJfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0NPTkZJR19DQVZFQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9DT05GSUdfSUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9DT1JFX05BVElWRV9FTkdJTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9ERUZBVUxUX0RJU1BMQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9ERVBUSF9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfRE9OVF9DQVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfRFJBVyIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX0VYVEVOU0lPTlMiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9HUkVFTl9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfSEVJR0hUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfSE9SSVpPTlRBTF9SRVNPTFVUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfTEFSR0VTVF9QQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfTEVWRUwiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9MVU1JTkFOQ0VfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfTFVNSU5BTkNFX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9NQVhfUEJVRkZFUl9IRUlHSFQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9NQVhfUEJVRkZFUl9QSVhFTFMiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9NQVhfUEJVRkZFUl9XSURUSCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX05BVElWRV9SRU5ERVJBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfTkFUSVZFX1ZJU1VBTF9JRCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX05BVElWRV9WSVNVQUxfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX05PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9OT05fQ09ORk9STUFOVF9DT05GSUciLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9OT1RfSU5JVElBTElaRUQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9OT19DT05URVhUIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfTk9fRElTUExBWSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX05PX1NVUkZBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9QQlVGRkVSX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1BJWEVMX0FTUEVDVF9SQVRJTyIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1BJWE1BUF9CSVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9SRUFEIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfUkVEX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9SRU5ERVJBQkxFX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9SRU5ERVJfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfUkdCX0JVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1NBTVBMRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9TQU1QTEVfQlVGRkVSUyIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1NJTkdMRV9CVUZGRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9TTE9XX0NPTkZJRyIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1NURU5DSUxfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1NVQ0NFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9TVVJGQUNFX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9UUkFOU1BBUkVOVF9CTFVFX1ZBTFVFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfVFJBTlNQQVJFTlRfR1JFRU5fVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9UUkFOU1BBUkVOVF9SRURfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9UUkFOU1BBUkVOVF9SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9UUkFOU1BBUkVOVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfVkVORE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJFR0xfVkVSU0lPTiIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1ZFUlRJQ0FMX1JFU09MVVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9XSURUSCIvPgotCQk8ZmllbGQgbmFtZT0iRUdMX1dJTkRPV19CSVQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMMTEiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMMTAiLz4KLQkJPGZpZWxkIG5hbWU9IkVHTF9DT05URVhUX0xPU1QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMQ29uZmlnIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMQ29udGV4dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RUdMKClMamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3MvZWdsL0VHTDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRHTCgpTGphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL29wZW5nbGVzL0dMOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL2VnbC9FR0xEaXNwbGF5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9lZ2wvRUdMU3VyZmFjZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3Mvb3BlbmdsZXMvR0wiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL29wZW5nbGVzL0dMMTAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9vcGVuZ2xlcy9HTCIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQWN0aXZlVGV4dHVyZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEFscGhhRnVuYyhJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xBbHBoYUZ1bmN4KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJpbmRUZXh0dXJlKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJsZW5kRnVuYyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDbGVhcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsZWFyQ29sb3IoRkZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDbGVhckNvbG9yeChJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENsZWFyRGVwdGhmKEYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xlYXJEZXB0aHgoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDbGVhclN0ZW5jaWwoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDbGllbnRBY3RpdmVUZXh0dXJlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29sb3I0ZihGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvbG9yNHgoSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDb2xvck1hc2soWlpaWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDb2xvclBvaW50ZXIoSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29tcHJlc3NlZFRleEltYWdlMkQoSUlJSUlJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKElJSUlJSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29weVRleEltYWdlMkQoSUlJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29weVRleFN1YkltYWdlMkQoSUlJSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ3VsbEZhY2UoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZWxldGVUZXh0dXJlcyhJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVsZXRlVGV4dHVyZXMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZXB0aEZ1bmMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZXB0aE1hc2soWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZXB0aFJhbmdlZihGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZXB0aFJhbmdleChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEaXNhYmxlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGlzYWJsZUNsaWVudFN0YXRlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd0FycmF5cyhJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd0VsZW1lbnRzKElJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEVuYWJsZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEVuYWJsZUNsaWVudFN0YXRlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRmluaXNoKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGbHVzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRm9nZihJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGb2dmdihJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGb2dmdihJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEZvZ3goSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRm9neHYoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEZvZ3h2KElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRnJvbnRGYWNlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRnJ1c3R1bWYoRkZGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEZydXN0dW14KElJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZW5UZXh0dXJlcyhJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2VuVGV4dHVyZXMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRFcnJvcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0SW50ZWdlcnYoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEludGVnZXJ2KElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0U3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xIaW50KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpZ2h0TW9kZWxmKElGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpZ2h0TW9kZWxmdihJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xMaWdodE1vZGVsZnYoSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xMaWdodE1vZGVseChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xMaWdodE1vZGVseHYoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpZ2h0TW9kZWx4dihJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpZ2h0ZihJSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTGlnaHRmdihJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTGlnaHRmdihJSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xMaWdodHgoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpZ2h0eHYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xMaWdodHh2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpbmVXaWR0aChGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExpbmVXaWR0aHgoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xMb2FkSWRlbnRpdHkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExvYWRNYXRyaXhmKExqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTG9hZE1hdHJpeGYoW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExvYWRNYXRyaXh4KExqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExvYWRNYXRyaXh4KFtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xMb2dpY09wKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTWF0ZXJpYWxmKElJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xNYXRlcmlhbGZ2KElJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xNYXRlcmlhbGZ2KElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE1hdGVyaWFseChJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTWF0ZXJpYWx4dihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE1hdGVyaWFseHYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTWF0cml4TW9kZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE11bHRNYXRyaXhmKExqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTXVsdE1hdHJpeGYoW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE11bHRNYXRyaXh4KExqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE11bHRNYXRyaXh4KFtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xNdWx0aVRleENvb3JkNGYoSUZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTXVsdGlUZXhDb29yZDR4KElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE5vcm1hbDNmKEZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xOb3JtYWwzeChJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTm9ybWFsUG9pbnRlcihJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE9ydGhvZihGRkZGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsT3J0aG94KElJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQaXhlbFN0b3JlaShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb2ludFNpemUoRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb2ludFNpemV4KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUG9seWdvbk9mZnNldChGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb2x5Z29uT2Zmc2V0eChJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb3BNYXRyaXgoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFB1c2hNYXRyaXgoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFJlYWRQaXhlbHMoSUlJSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUm90YXRlZihGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFJvdGF0ZXgoSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTYW1wbGVDb3ZlcmFnZShGWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTYW1wbGVDb3ZlcmFnZXgoSVopViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU2NhbGVmKEZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTY2FsZXgoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFNjaXNzb3IoSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xTaGFkZU1vZGVsKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU3RlbmNpbEZ1bmMoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFN0ZW5jaWxNYXNrKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU3RlbmNpbE9wKElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhDb29yZFBvaW50ZXIoSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4RW52ZihJSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4RW52ZnYoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEVudmZ2KElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEVudngoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEVudnh2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4RW52eHYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4SW1hZ2UyRChJSUlJSUlJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcmYoSUlGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcngoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFN1YkltYWdlMkQoSUlJSUlJSUlMamF2YS9uaW8vQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUcmFuc2xhdGVmKEZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUcmFuc2xhdGV4KElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xWZXJ0ZXhQb2ludGVyKElJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFZpZXdwb3J0KElJSUkpViIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUREIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FMUEhBX0JJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FMUEhBX1RFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FMV0FZUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQU1CSUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQU1CSUVOVF9BTkRfRElGRlVTRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTkRfSU5WRVJURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FORF9SRVZFUlNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CQUNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTEVORCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQkxVRV9CSVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CWVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DQ1ciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NMQU1QX1RPX0VER0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NMRUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQlVGRkVSX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfTE9HSUNfT1AiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX01BVEVSSUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09OU1RBTlRfQVRURU5VQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPUFkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPUFlfSU5WRVJURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NVTExfRkFDRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ1ciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFQ0FMIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUNSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9CSVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9CVUZGRVJfQklUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9URVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ESUZGVVNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ESVRIRVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RPTlRfQ0FSRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRFNUX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9EU1RfQ09MT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0VNSVNTSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9FUVVBTCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRVFVSVYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0VYUCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRVhQMiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRVhURU5TSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRkFMU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZBU1RFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZJWEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GTEFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GTE9BVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRk9HIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GT0dfQ09MT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZPR19ERU5TSVRZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GT0dfRU5EIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GT0dfSElOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRk9HX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZPR19TVEFSVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJPTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZST05UX0FORF9CQUNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9HRVFVQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0dSRUFURVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0dSRUVOX0JJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5DUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5WQUxJRF9FTlVNIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9JTlZBTElEX09QRVJBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5WQUxJRF9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5WRVJUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9LRUVQIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MRVFVQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJR0hUMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElHSFQxIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSUdIVDIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJR0hUMyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElHSFQ0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSUdIVDUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJR0hUNiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElHSFQ3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSUdIVElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElHSFRfTU9ERUxfQU1CSUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElHSFRfTU9ERUxfVFdPX1NJREUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJTkVBUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElORUFSX0FUVEVOVUFUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElORUFSX01JUE1BUF9ORUFSRVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSU5FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElORV9MT09QIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MSU5FX1NNT09USCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElORV9TTU9PVEhfSElOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTElORV9TVFJJUCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTFVNSU5BTkNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9MVU1JTkFOQ0VfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9FTEVNRU5UU19JTkRJQ0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfRUxFTUVOVFNfVkVSVElDRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9MSUdIVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9NT0RFTFZJRVdfU1RBQ0tfREVQVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9QUk9KRUNUSU9OX1NUQUNLX0RFUFRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVEVYVFVSRV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfVEVYVFVSRV9TVEFDS19ERVBUSCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1RFWFRVUkVfVU5JVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9WSUVXUE9SVF9ESU1TIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NT0RFTFZJRVciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01PRFVMQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NVUxUSVNBTVBMRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTkFORCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTkVBUkVTVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ORVZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTklDRVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9OT09QIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9OT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05PUk1BTElaRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTk9STUFMX0FSUkFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9OT1RFUVVBTCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTk9fRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT05FIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PTkVfTUlOVVNfRFNUX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PTkVfTUlOVVNfRFNUX0NPTE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PTkVfTUlOVVNfU1JDX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PTkVfTUlOVVNfU1JDX0NPTE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT1JfSU5WRVJURUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX09SX1JFVkVSU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX09VVF9PRl9NRU1PUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BBQ0tfQUxJR05NRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QQUxFVFRFNF9SNV9HNl9CNV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BBTEVUVEU0X1JHQjVfQTFfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QQUxFVFRFNF9SR0I4X09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUEFMRVRURTRfUkdCQTRfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QQUxFVFRFNF9SR0JBOF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BBTEVUVEU4X1I1X0c2X0I1X09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUEFMRVRURThfUkdCNV9BMV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BBTEVUVEU4X1JHQjhfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QQUxFVFRFOF9SR0JBNF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BBTEVUVEU4X1JHQkE4X09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUEVSU1BFQ1RJVkVfQ09SUkVDVElPTl9ISU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0lOVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPSU5UX0ZBREVfVEhSRVNIT0xEX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPSU5UX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPSU5UX1NNT09USCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9JTlRfU01PT1RIX0hJTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPTFlHT05fU01PT1RIX0hJTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPU0lUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QUk9KRUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9RVUFEUkFUSUNfQVRURU5VQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFRF9CSVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRU5ERVJFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVQRUFUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRVBMQUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRVNDQUxFX05PUk1BTCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkdCIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0JBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRV9BTFBIQV9UT19PTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRV9DT1ZFUkFHRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0NJU1NPUl9URVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NISU5JTkVTUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0hPUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NNT09USCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU01PT1RIX0xJTkVfV0lEVEhfUkFOR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NNT09USF9QT0lOVF9TSVpFX1JBTkdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TUEVDVUxBUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1BPVF9DVVRPRkYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NQT1RfRElSRUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TUE9UX0VYUE9ORU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TUkNfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NSQ19BTFBIQV9TQVRVUkFURSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1JDX0NPTE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEFDS19PVkVSRkxPVyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RBQ0tfVU5ERVJGTE9XIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX0JJVFMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfQlVGRkVSX0JJVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9URVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVUJQSVhFTF9CSVRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUxMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTExIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMTIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUxMyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTE0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMTUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUxNiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTE3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMTgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUxOSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUyMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTIxIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMjIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUyMyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTI0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMjUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUyNiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTI3Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFMjgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUyOSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkUzMCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTMxIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFNCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkU2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFNyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRTgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkU5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFXzJEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NPT1JEX0FSUkFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0VOViIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9FTlZfQ09MT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfRU5WX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfTUFHX0ZJTFRFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9NSU5fRklMVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX1dSQVBfUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9XUkFQX1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RSSUFOR0xFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVFJJQU5HTEVfRkFOIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9UUklBTkdMRV9TVFJJUCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVFJVRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5QQUNLX0FMSUdOTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfQllURSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVU5TSUdORURfU0hPUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1VOU0lHTkVEX1NIT1JUXzVfNl81Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9WRU5ET1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZFUlNJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZFUlRFWF9BUlJBWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfWE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9aRVJPIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3Mvb3BlbmdsZXMvR0wxMEV4dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL29wZW5nbGVzL0dMIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xRdWVyeU1hdHJpeHhPRVMoTGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xRdWVyeU1hdHJpeHhPRVMoW0lJW0lJKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9vcGVuZ2xlcy9HTDExIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3Mvb3BlbmdsZXMvR0wxMCIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmluZEJ1ZmZlcihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xCdWZmZXJEYXRhKElJTGphdmEvbmlvL0J1ZmZlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJ1ZmZlclN1YkRhdGEoSUlJTGphdmEvbmlvL0J1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xpcFBsYW5lZihJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDbGlwUGxhbmVmKElbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xpcFBsYW5leChJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2xpcFBsYW5leChJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvbG9yNHViKEJCQkIpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ29sb3JQb2ludGVyKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVsZXRlQnVmZmVycyhJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRGVsZXRlQnVmZmVycyhJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdFbGVtZW50cyhJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdlbkJ1ZmZlcnMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdlbkJ1ZmZlcnMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRCb29sZWFudihJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0Qm9vbGVhbnYoSVtaSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEJ1ZmZlclBhcmFtZXRlcml2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldENsaXBQbGFuZWYoSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0Q2xpcFBsYW5lZihJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldENsaXBQbGFuZXgoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldENsaXBQbGFuZXgoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRGaXhlZHYoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEZpeGVkdihJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEZsb2F0dihJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRGbG9hdHYoSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRMaWdodGZ2KElJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRMaWdodGZ2KElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldExpZ2h0eHYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRMaWdodHh2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldE1hdGVyaWFsZnYoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldE1hdGVyaWFsZnYoSUlbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0TWF0ZXJpYWx4dihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldE1hdGVyaWFseHYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0UG9pbnRlcnYoSVtMamF2YS9uaW8vQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhFbnZpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleEVudml2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleEVudnh2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4RW52eHYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4UGFyYW1ldGVyZnYoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleFBhcmFtZXRlcmZ2KElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleFBhcmFtZXRlcml2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4UGFyYW1ldGVyaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4UGFyYW1ldGVyeHYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhQYXJhbWV0ZXJ4dihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xJc0J1ZmZlcihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbElzRW5hYmxlZChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbElzVGV4dHVyZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbE5vcm1hbFBvaW50ZXIoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBvaW50UGFyYW1ldGVyZihJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb2ludFBhcmFtZXRlcmZ2KElMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBvaW50UGFyYW1ldGVyZnYoSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xQb2ludFBhcmFtZXRlcngoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUG9pbnRQYXJhbWV0ZXJ4dihJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsUG9pbnRQYXJhbWV0ZXJ4dihJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFBvaW50U2l6ZVBvaW50ZXJPRVMoSUlMamF2YS9uaW8vQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhDb29yZFBvaW50ZXIoSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhFbnZpKElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhFbnZpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEVudml2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcmZ2KElJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhQYXJhbWV0ZXJmdihJSVtGSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhQYXJhbWV0ZXJpKElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhQYXJhbWV0ZXJpdihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcml2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcnh2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4UGFyYW1ldGVyeHYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVmVydGV4UG9pbnRlcihJSUlJKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0FDVElWRV9URVhUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BRERfU0lHTkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTFBIQV9TQ0FMRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQUxQSEFfVEVTVF9GVU5DIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BTFBIQV9URVNUX1JFRiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQVJSQVlfQlVGRkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9BUlJBWV9CVUZGRVJfQklORElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQkxFTkRfRFNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTEVORF9TUkMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JVRkZFUl9BQ0NFU1MiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JVRkZFUl9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CVUZGRVJfVVNBR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NMSUVOVF9BQ1RJVkVfVEVYVFVSRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ0xJUF9QTEFORTAiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NMSVBfUExBTkUxIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DTElQX1BMQU5FMiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ0xJUF9QTEFORTMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NMSVBfUExBTkU0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DTElQX1BMQU5FNSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVJSQVlfQlVGRkVSX0JJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0FSUkFZX1BPSU5URVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0FSUkFZX1NJWkUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0FSUkFZX1NUUklERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVJSQVlfVFlQRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQ0xFQVJfVkFMVUUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX1dSSVRFTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NQklORSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NQklORV9BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09NQklORV9SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTlNUQU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT09SRF9SRVBMQUNFX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ1VMTF9GQUNFX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NVUlJFTlRfQ09MT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NVUlJFTlRfTk9STUFMIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DVVJSRU5UX1RFWFRVUkVfQ09PUkRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9DTEVBUl9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVQVEhfRlVOQyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVQVEhfUkFOR0UiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIX1dSSVRFTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRE9UM19SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RPVDNfUkdCQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRFlOQU1JQ19EUkFXIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJPTlRfRkFDRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfR0VORVJBVEVfTUlQTUFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9HRU5FUkFURV9NSVBNQVBfSElOVCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5URVJQT0xBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xJTkVfV0lEVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0xPR0lDX09QX01PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BVFJJWF9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ0xJUF9QTEFORVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01PREVMVklFV19NQVRSSVgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01PREVMVklFV19NQVRSSVhfRkxPQVRfQVNfSU5UX0JJVFNfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NT0RFTFZJRVdfU1RBQ0tfREVQVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05PUk1BTF9BUlJBWV9CVUZGRVJfQklORElORyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTk9STUFMX0FSUkFZX1BPSU5URVIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05PUk1BTF9BUlJBWV9TVFJJREUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05PUk1BTF9BUlJBWV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PUEVSQU5EMF9BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT1BFUkFORDBfUkdCIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PUEVSQU5EMV9BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT1BFUkFORDFfUkdCIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9PUEVSQU5EMl9BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfT1BFUkFORDJfUkdCIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0lOVF9ESVNUQU5DRV9BVFRFTlVBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9JTlRfRkFERV9USFJFU0hPTERfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9JTlRfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9JTlRfU0laRV9BUlJBWV9CVUZGRVJfQklORElOR19PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPSU5UX1NJWkVfQVJSQVlfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0lOVF9TSVpFX0FSUkFZX1BPSU5URVJfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0lOVF9TSVpFX0FSUkFZX1NUUklERV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPSU5UX1NJWkVfQVJSQVlfVFlQRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BPSU5UX1NJWkVfTUFYIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0lOVF9TSVpFX01JTiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9JTlRfU1BSSVRFX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QT0xZR09OX09GRlNFVF9VTklUUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUFJFVklPVVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BSSU1BUllfQ09MT1IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BST0pFQ1RJT05fTUFUUklYIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9QUk9KRUNUSU9OX01BVFJJWF9GTE9BVF9BU19JTlRfQklUU19PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1BST0pFQ1RJT05fU1RBQ0tfREVQVEgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JHQl9TQ0FMRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0FNUExFX0JVRkZFUlMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU0NJU1NPUl9CT1giLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NIQURFX01PREVMIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TUkMwX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TUkMwX1JHQiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1JDMV9BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1JDMV9SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NSQzJfQUxQSEEiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NSQzJfUkdCIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEFUSUNfRFJBVyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9GQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX0ZVTkMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9SRUYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfVkFMVUVfTUFTSyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9XUklURU1BU0siLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NVQlRSQUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0JJTkRJTkdfMkQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQ09PUkRfQVJSQVlfQlVGRkVSX0JJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQ09PUkRfQVJSQVlfUE9JTlRFUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DT09SRF9BUlJBWV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NPT1JEX0FSUkFZX1NUUklERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DT09SRF9BUlJBWV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX01BVFJJWCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9NQVRSSVhfRkxPQVRfQVNfSU5UX0JJVFNfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX1NUQUNLX0RFUFRIIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9WRVJURVhfQVJSQVlfQlVGRkVSX0JJTkRJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZFUlRFWF9BUlJBWV9QT0lOVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9WRVJURVhfQVJSQVlfU0laRSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSVEVYX0FSUkFZX1NUUklERSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVkVSVEVYX0FSUkFZX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1ZJRVdQT1JUIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9XUklURV9PTkxZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbWljcm9lZGl0aW9uL2tocm9ub3Mvb3BlbmdsZXMvR0wxMUV4dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL29wZW5nbGVzL0dMIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDdXJyZW50UGFsZXR0ZU1hdHJpeE9FUyhJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdUZXhmT0VTKEZGRkZGKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdUZXhmdk9FUyhMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdUZXhmdk9FUyhbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd1RleGlPRVMoSUlJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd1RleGl2T0VTKExqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERyYXdUZXhpdk9FUyhbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd1RleHNPRVMoU1NTU1MpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd1RleHN2T0VTKExqYXZhL25pby9TaG9ydEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd1RleHN2T0VTKFtTSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3VGV4eE9FUyhJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEcmF3VGV4eHZPRVMoTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsRHJhd1RleHh2T0VTKFtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xFbmFibGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xFbmFibGVDbGllbnRTdGF0ZShJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbExvYWRQYWxldHRlRnJvbU1vZGVsVmlld01hdHJpeE9FUygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTWF0cml4SW5kZXhQb2ludGVyT0VTKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsTWF0cml4SW5kZXhQb2ludGVyT0VTKElJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcmZ2KElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFdlaWdodFBvaW50ZXJPRVMoSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xXZWlnaHRQb2ludGVyT0VTKElJSUxqYXZhL25pby9CdWZmZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BVFJJWF9JTkRFWF9BUlJBWV9CVUZGRVJfQklORElOR19PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BVFJJWF9JTkRFWF9BUlJBWV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BVFJJWF9JTkRFWF9BUlJBWV9QT0lOVEVSX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFUUklYX0lOREVYX0FSUkFZX1NJWkVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVRSSVhfSU5ERVhfQVJSQVlfU1RSSURFX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFUUklYX0lOREVYX0FSUkFZX1RZUEVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVRSSVhfUEFMRVRURV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX01BWF9QQUxFVFRFX01BVFJJQ0VTX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfTUFYX1ZFUlRFWF9VTklUU19PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQ1JPUF9SRUNUX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfV0VJR0hUX0FSUkFZX0JVRkZFUl9CSU5ESU5HX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfV0VJR0hUX0FSUkFZX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfV0VJR0hUX0FSUkFZX1BPSU5URVJfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9XRUlHSFRfQVJSQVlfU0laRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1dFSUdIVF9BUlJBWV9TVFJJREVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9XRUlHSFRfQVJSQVlfVFlQRV9PRVMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9taWNyb2VkaXRpb24va2hyb25vcy9vcGVuZ2xlcy9HTDExRXh0ZW5zaW9uUGFjayIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmF4L21pY3JvZWRpdGlvbi9raHJvbm9zL29wZW5nbGVzL0dMIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xCaW5kRnJhbWVidWZmZXJPRVMoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmluZFJlbmRlcmJ1ZmZlck9FUyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xCaW5kVGV4dHVyZShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xCbGVuZEVxdWF0aW9uKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEJsZW5kRnVuY1NlcGFyYXRlKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c09FUyhJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbENvbXByZXNzZWRUZXhJbWFnZTJEKElJSUlJSUlMamF2YS9uaW8vQnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xDb3B5VGV4SW1hZ2UyRChJSUlJSUlJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xEZWxldGVGcmFtZWJ1ZmZlcnNPRVMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZUZyYW1lYnVmZmVyc09FUyhJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNPRVMoSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNPRVMoSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xFbmFibGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlck9FUyhJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEZyYW1lYnVmZmVyVGV4dHVyZTJET0VTKElJSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdlbkZyYW1lYnVmZmVyc09FUyhJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2VuRnJhbWVidWZmZXJzT0VTKElbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2VuUmVuZGVyYnVmZmVyc09FUyhJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2VuUmVuZGVyYnVmZmVyc09FUyhJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdlbmVyYXRlTWlwbWFwT0VTKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZPRVMoSUlJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZPRVMoSUlJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldEludGVnZXJ2KElMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRJbnRlZ2VydihJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2T0VTKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZPRVMoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4R2VuZnYoSUlMamF2YS9uaW8vRmxvYXRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleEdlbmZ2KElJW0ZJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbEdldFRleEdlbml2KElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4R2VuaXYoSUlbSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsR2V0VGV4R2VueHYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xHZXRUZXhHZW54dihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xJc0ZyYW1lYnVmZmVyT0VTKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdsSXNSZW5kZXJidWZmZXJPRVMoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xSZW5kZXJidWZmZXJTdG9yYWdlT0VTKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsU3RlbmNpbE9wKElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhFbnZmKElJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhFbnZmdihJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4RW52ZnYoSUlbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4RW52eChJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4RW52eHYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhFbnZ4dihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhHZW5mKElJRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhHZW5mdihJSUxqYXZhL25pby9GbG9hdEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4R2VuZnYoSUlbRkkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4R2VuaShJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdsVGV4R2VuaXYoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhHZW5pdihJSVtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhHZW54KElJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2xUZXhHZW54dihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleEdlbnh2KElJW0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnbFRleFBhcmFtZXRlcmYoSUlGKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JMRU5EX0RTVF9BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQkxFTkRfRFNUX1JHQiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQkxFTkRfRVFVQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9CTEVORF9FUVVBVElPTl9SR0IiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0JMRU5EX1NSQ19BTFBIQSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQkxFTkRfU1JDX1JHQiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVRUQUNITUVOVDBfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UMTBfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UMTFfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UMTJfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UMTNfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UMTRfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UMV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0FUVEFDSE1FTlQyX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVRUQUNITUVOVDNfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UNF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0FUVEFDSE1FTlQ1X09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVRUQUNITUVOVDZfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9DT0xPUl9BVFRBQ0hNRU5UN19PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0NPTE9SX0FUVEFDSE1FTlQ4X09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfQ09MT1JfQVRUQUNITUVOVDlfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERUNSX1dSQVAiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIX0FUVEFDSE1FTlRfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9DT01QT05FTlQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0RFUFRIX0NPTVBPTkVOVDE2Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9ERVBUSF9DT01QT05FTlQyNCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfREVQVEhfQ09NUE9ORU5UMzIiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0VfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUxfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9CSU5ESU5HX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlRfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlNfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RSQVdfQlVGRkVSX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9GT1JNQVRTX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlRfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX1JFQURfQlVGRkVSX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfRlJBTUVCVUZGRVJfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZVTkNfQUREIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0ZVTkNfU1VCVFJBQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX0lOQ1JfV1JBUCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT05fT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ09MT1JfQVRUQUNITUVOVFNfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9NSVJST1JFRF9SRVBFQVQiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX05PUk1BTF9NQVAiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFRkxFQ1RJT05fTUFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRU5ERVJCVUZGRVJfQUxQSEFfU0laRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVOREVSQlVGRkVSX0JMVUVfU0laRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUl9ERVBUSF9TSVpFX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVOREVSQlVGRkVSX0dSRUVOX1NJWkVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRU5ERVJCVUZGRVJfSEVJR0hUX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUl9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUl9SRURfU0laRV9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1JFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SRU5ERVJCVUZGRVJfV0lEVEhfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0I1NjVfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0I1X0ExIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0I4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9SR0JBNCIvPgotCQk8ZmllbGQgbmFtZT0iR0xfUkdCQTgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfQVRUQUNITUVOVF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfSU5ERVgiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NURU5DSUxfSU5ERVgxX09FUyIvPgotCQk8ZmllbGQgbmFtZT0iR0xfU1RFTkNJTF9JTkRFWDRfT0VTIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9TVEVOQ0lMX0lOREVYOF9PRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1NUUiIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NVQkVfTUFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1giLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1giLz4KLQkJPGZpZWxkIG5hbWU9IkdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSIvPgotCQk8ZmllbGQgbmFtZT0iR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0dFTl9NT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJHTF9URVhUVVJFX0dFTl9TVFIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvU2VydmVyU29ja2V0RmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU2VydmVyU29ja2V0KClMamF2YS9uZXQvU2VydmVyU29ja2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVNlcnZlclNvY2tldChJKUxqYXZhL25ldC9TZXJ2ZXJTb2NrZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU2VydmVyU29ja2V0KElJKUxqYXZhL25ldC9TZXJ2ZXJTb2NrZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU2VydmVyU29ja2V0KElJTGphdmEvbmV0L0luZXRBZGRyZXNzOylMamF2YS9uZXQvU2VydmVyU29ja2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHQoKUxqYXZheC9uZXQvU2VydmVyU29ja2V0RmFjdG9yeTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvU29ja2V0RmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU29ja2V0KClMamF2YS9uZXQvU29ja2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVNvY2tldChMamF2YS9sYW5nL1N0cmluZztJKUxqYXZhL25ldC9Tb2NrZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU29ja2V0KExqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9uZXQvSW5ldEFkZHJlc3M7SSlMamF2YS9uZXQvU29ja2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVNvY2tldChMamF2YS9uZXQvSW5ldEFkZHJlc3M7SSlMamF2YS9uZXQvU29ja2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVNvY2tldChMamF2YS9uZXQvSW5ldEFkZHJlc3M7SUxqYXZhL25ldC9JbmV0QWRkcmVzcztJKUxqYXZhL25ldC9Tb2NrZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdCgpTGphdmF4L25ldC9Tb2NrZXRGYWN0b3J5OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L25ldC9zc2wvQ2VydFBhdGhUcnVzdE1hbmFnZXJQYXJhbWV0ZXJzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YXgvbmV0L3NzbC9NYW5hZ2VyRmFjdG9yeVBhcmFtZXRlcnMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvc2VjdXJpdHkvY2VydC9DZXJ0UGF0aFBhcmFtZXRlcnM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXJzKClMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRQYXRoUGFyYW1ldGVyczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL0V4dGVuZGVkU1NMU2Vzc2lvbiIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC9uZXQvc3NsL1NTTFNlc3Npb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbFN1cHBvcnRlZFNpZ25hdHVyZUFsZ29yaXRobXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZWVyU3VwcG9ydGVkU2lnbmF0dXJlQWxnb3JpdGhtcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVlc3RlZFNlcnZlck5hbWVzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9IYW5kc2hha2VDb21wbGV0ZWRFdmVudCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3V0aWwvRXZlbnRPYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmF4L25ldC9zc2wvU1NMU29ja2V0O0xqYXZheC9uZXQvc3NsL1NTTFNlc3Npb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaXBoZXJTdWl0ZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxDZXJ0aWZpY2F0ZXMoKVtMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsUHJpbmNpcGFsKClMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVlckNlcnRpZmljYXRlQ2hhaW4oKVtMamF2YXgvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVlckNlcnRpZmljYXRlcygpW0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVlclByaW5jaXBhbCgpTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlc3Npb24oKUxqYXZheC9uZXQvc3NsL1NTTFNlc3Npb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U29ja2V0KClMamF2YXgvbmV0L3NzbC9TU0xTb2NrZXQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9IYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9FdmVudExpc3RlbmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZHNoYWtlQ29tcGxldGVkKExqYXZheC9uZXQvc3NsL0hhbmRzaGFrZUNvbXBsZXRlZEV2ZW50OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9Ib3N0bmFtZVZlcmlmaWVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2ZXJpZnkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmF4L25ldC9zc2wvU1NMU2Vzc2lvbjspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L25ldC9zc2wvSHR0cHNVUkxDb25uZWN0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbmV0L0h0dHBVUkxDb25uZWN0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25ldC9VUkw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaXBoZXJTdWl0ZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdEhvc3RuYW1lVmVyaWZpZXIoKUxqYXZheC9uZXQvc3NsL0hvc3RuYW1lVmVyaWZpZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFNTTFNvY2tldEZhY3RvcnkoKUxqYXZheC9uZXQvc3NsL1NTTFNvY2tldEZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SG9zdG5hbWVWZXJpZmllcigpTGphdmF4L25ldC9zc2wvSG9zdG5hbWVWZXJpZmllcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhbENlcnRpZmljYXRlcygpW0xqYXZhL3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxQcmluY2lwYWwoKUxqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZWVyUHJpbmNpcGFsKClMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U1NMU29ja2V0RmFjdG9yeSgpTGphdmF4L25ldC9zc2wvU1NMU29ja2V0RmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2ZXJDZXJ0aWZpY2F0ZXMoKVtMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHRIb3N0bmFtZVZlcmlmaWVyKExqYXZheC9uZXQvc3NsL0hvc3RuYW1lVmVyaWZpZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0U1NMU29ja2V0RmFjdG9yeShMamF2YXgvbmV0L3NzbC9TU0xTb2NrZXRGYWN0b3J5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG9zdG5hbWVWZXJpZmllcihMamF2YXgvbmV0L3NzbC9Ib3N0bmFtZVZlcmlmaWVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U1NMU29ja2V0RmFjdG9yeShMamF2YXgvbmV0L3NzbC9TU0xTb2NrZXRGYWN0b3J5OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJob3N0bmFtZVZlcmlmaWVyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9LZXlNYW5hZ2VyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL0tleU1hbmFnZXJGYWN0b3J5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmF4L25ldC9zc2wvS2V5TWFuYWdlckZhY3RvcnlTcGk7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGdvcml0aG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRBbGdvcml0aG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgvbmV0L3NzbC9LZXlNYW5hZ2VyRmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmF4L25ldC9zc2wvS2V5TWFuYWdlckZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7KUxqYXZheC9uZXQvc3NsL0tleU1hbmFnZXJGYWN0b3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEtleU1hbmFnZXJzKClbTGphdmF4L25ldC9zc2wvS2V5TWFuYWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm92aWRlcigpTGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdChMamF2YS9zZWN1cml0eS9LZXlTdG9yZTtbQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdChMamF2YXgvbmV0L3NzbC9NYW5hZ2VyRmFjdG9yeVBhcmFtZXRlcnM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL0tleU1hbmFnZXJGYWN0b3J5U3BpIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZXRLZXlNYW5hZ2VycygpW0xqYXZheC9uZXQvc3NsL0tleU1hbmFnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChMamF2YS9zZWN1cml0eS9LZXlTdG9yZTtbQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChMamF2YXgvbmV0L3NzbC9NYW5hZ2VyRmFjdG9yeVBhcmFtZXRlcnM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL0tleVN0b3JlQnVpbGRlclBhcmFtZXRlcnMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC9uZXQvc3NsL01hbmFnZXJGYWN0b3J5UGFyYW1ldGVycyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9zZWN1cml0eS9LZXlTdG9yZSRCdWlsZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtZXRlcnMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL01hbmFnZXJGYWN0b3J5UGFyYW1ldGVycyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9TTklIb3N0TmFtZSIgc2luY2U9IjI0Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YXgvbmV0L3NzbC9TTklTZXJ2ZXJOYW1lIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTTklNYXRjaGVyKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgvbmV0L3NzbC9TTklNYXRjaGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFzY2lpTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9TTklNYXRjaGVyIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaGVzKExqYXZheC9uZXQvc3NsL1NOSVNlcnZlck5hbWU7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL1NOSVNlcnZlck5hbWUiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSVtCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGVkKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL1NTTENvbnRleHQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YXgvbmV0L3NzbC9TU0xDb250ZXh0U3BpO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU1NMRW5naW5lKClMamF2YXgvbmV0L3NzbC9TU0xFbmdpbmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU1NMRW5naW5lKExqYXZhL2xhbmcvU3RyaW5nO0kpTGphdmF4L25ldC9zc2wvU1NMRW5naW5lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsaWVudFNlc3Npb25Db250ZXh0KClMamF2YXgvbmV0L3NzbC9TU0xTZXNzaW9uQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0KClMamF2YXgvbmV0L3NzbC9TU0xDb250ZXh0OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0U1NMUGFyYW1ldGVycygpTGphdmF4L25ldC9zc2wvU1NMUGFyYW1ldGVyczsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZheC9uZXQvc3NsL1NTTENvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZheC9uZXQvc3NsL1NTTENvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7KUxqYXZheC9uZXQvc3NsL1NTTENvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdG9jb2woKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3ZpZGVyKClMamF2YS9zZWN1cml0eS9Qcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2ZXJTZXNzaW9uQ29udGV4dCgpTGphdmF4L25ldC9zc2wvU1NMU2Vzc2lvbkNvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2VydmVyU29ja2V0RmFjdG9yeSgpTGphdmF4L25ldC9zc2wvU1NMU2VydmVyU29ja2V0RmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb2NrZXRGYWN0b3J5KClMamF2YXgvbmV0L3NzbC9TU0xTb2NrZXRGYWN0b3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZFNTTFBhcmFtZXRlcnMoKUxqYXZheC9uZXQvc3NsL1NTTFBhcmFtZXRlcnM7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoW0xqYXZheC9uZXQvc3NsL0tleU1hbmFnZXI7W0xqYXZheC9uZXQvc3NsL1RydXN0TWFuYWdlcjtMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb207KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0KExqYXZheC9uZXQvc3NsL1NTTENvbnRleHQ7KVYiIHNpbmNlPSI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9TU0xDb250ZXh0U3BpIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVDcmVhdGVTU0xFbmdpbmUoKUxqYXZheC9uZXQvc3NsL1NTTEVuZ2luZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVDcmVhdGVTU0xFbmdpbmUoTGphdmEvbGFuZy9TdHJpbmc7SSlMamF2YXgvbmV0L3NzbC9TU0xFbmdpbmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0Q2xpZW50U2Vzc2lvbkNvbnRleHQoKUxqYXZheC9uZXQvc3NsL1NTTFNlc3Npb25Db250ZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUdldERlZmF1bHRTU0xQYXJhbWV0ZXJzKClMamF2YXgvbmV0L3NzbC9TU0xQYXJhbWV0ZXJzOyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZXRTZXJ2ZXJTZXNzaW9uQ29udGV4dCgpTGphdmF4L25ldC9zc2wvU1NMU2Vzc2lvbkNvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0U2VydmVyU29ja2V0RmFjdG9yeSgpTGphdmF4L25ldC9zc2wvU1NMU2VydmVyU29ja2V0RmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVHZXRTb2NrZXRGYWN0b3J5KClMamF2YXgvbmV0L3NzbC9TU0xTb2NrZXRGYWN0b3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUdldFN1cHBvcnRlZFNTTFBhcmFtZXRlcnMoKUxqYXZheC9uZXQvc3NsL1NTTFBhcmFtZXRlcnM7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZ2luZUluaXQoW0xqYXZheC9uZXQvc3NsL0tleU1hbmFnZXI7W0xqYXZheC9uZXQvc3NsL1RydXN0TWFuYWdlcjtMamF2YS9zZWN1cml0eS9TZWN1cmVSYW5kb207KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL1NTTEVuZ2luZSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJlZ2luSGFuZHNoYWtlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2VJbmJvdW5kKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2VPdXRib3VuZCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlbGVnYXRlZFRhc2soKUxqYXZhL2xhbmcvUnVubmFibGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5hYmxlU2Vzc2lvbkNyZWF0aW9uKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5hYmxlZENpcGhlclN1aXRlcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuYWJsZWRQcm90b2NvbHMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIYW5kc2hha2VTZXNzaW9uKClMamF2YXgvbmV0L3NzbC9TU0xTZXNzaW9uOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGFuZHNoYWtlU3RhdHVzKClMamF2YXgvbmV0L3NzbC9TU0xFbmdpbmVSZXN1bHQkSGFuZHNoYWtlU3RhdHVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5lZWRDbGllbnRBdXRoKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGVlckhvc3QoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlZXJQb3J0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U1NMUGFyYW1ldGVycygpTGphdmF4L25ldC9zc2wvU1NMUGFyYW1ldGVyczsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vzc2lvbigpTGphdmF4L25ldC9zc2wvU1NMU2Vzc2lvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRDaXBoZXJTdWl0ZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRQcm90b2NvbHMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VDbGllbnRNb2RlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2FudENsaWVudEF1dGgoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0luYm91bmREb25lKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNPdXRib3VuZERvbmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmFibGVTZXNzaW9uQ3JlYXRpb24oWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5hYmxlZENpcGhlclN1aXRlcyhbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmFibGVkUHJvdG9jb2xzKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5lZWRDbGllbnRBdXRoKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNTTFBhcmFtZXRlcnMoTGphdmF4L25ldC9zc2wvU1NMUGFyYW1ldGVyczspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VDbGllbnRNb2RlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdhbnRDbGllbnRBdXRoKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InVud3JhcChMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspTGphdmF4L25ldC9zc2wvU1NMRW5naW5lUmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9InVud3JhcChMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtbTGphdmEvbmlvL0J5dGVCdWZmZXI7KUxqYXZheC9uZXQvc3NsL1NTTEVuZ2luZVJlc3VsdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1bndyYXAoTGphdmEvbmlvL0J5dGVCdWZmZXI7W0xqYXZhL25pby9CeXRlQnVmZmVyO0lJKUxqYXZheC9uZXQvc3NsL1NTTEVuZ2luZVJlc3VsdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cmFwKExqYXZhL25pby9CeXRlQnVmZmVyO0xqYXZhL25pby9CeXRlQnVmZmVyOylMamF2YXgvbmV0L3NzbC9TU0xFbmdpbmVSZXN1bHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JhcChbTGphdmEvbmlvL0J5dGVCdWZmZXI7SUlMamF2YS9uaW8vQnl0ZUJ1ZmZlcjspTGphdmF4L25ldC9zc2wvU1NMRW5naW5lUmVzdWx0OyIvPgotCQk8bWV0aG9kIG5hbWU9IndyYXAoW0xqYXZhL25pby9CeXRlQnVmZmVyO0xqYXZhL25pby9CeXRlQnVmZmVyOylMamF2YXgvbmV0L3NzbC9TU0xFbmdpbmVSZXN1bHQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9TU0xFbmdpbmVSZXN1bHQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YXgvbmV0L3NzbC9TU0xFbmdpbmVSZXN1bHQkU3RhdHVzO0xqYXZheC9uZXQvc3NsL1NTTEVuZ2luZVJlc3VsdCRIYW5kc2hha2VTdGF0dXM7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ5dGVzQ29uc3VtZWQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJieXRlc1Byb2R1Y2VkKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGFuZHNoYWtlU3RhdHVzKClMamF2YXgvbmV0L3NzbC9TU0xFbmdpbmVSZXN1bHQkSGFuZHNoYWtlU3RhdHVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXR1cygpTGphdmF4L25ldC9zc2wvU1NMRW5naW5lUmVzdWx0JFN0YXR1czsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL1NTTEVuZ2luZVJlc3VsdCRIYW5kc2hha2VTdGF0dXMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgvbmV0L3NzbC9TU0xFbmdpbmVSZXN1bHQkSGFuZHNoYWtlU3RhdHVzOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZheC9uZXQvc3NsL1NTTEVuZ2luZVJlc3VsdCRIYW5kc2hha2VTdGF0dXM7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGSU5JU0hFRCIvPgotCQk8ZmllbGQgbmFtZT0iTkVFRF9UQVNLIi8+Ci0JCTxmaWVsZCBuYW1lPSJORUVEX1VOV1JBUCIvPgotCQk8ZmllbGQgbmFtZT0iTkVFRF9XUkFQIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1RfSEFORFNIQUtJTkciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL1NTTEVuZ2luZVJlc3VsdCRTdGF0dXMiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0VudW0iLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZU9mKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgvbmV0L3NzbC9TU0xFbmdpbmVSZXN1bHQkU3RhdHVzOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xqYXZheC9uZXQvc3NsL1NTTEVuZ2luZVJlc3VsdCRTdGF0dXM7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJCVUZGRVJfT1ZFUkZMT1ciLz4KLQkJPGZpZWxkIG5hbWU9IkJVRkZFUl9VTkRFUkZMT1ciLz4KLQkJPGZpZWxkIG5hbWU9IkNMT1NFRCIvPgotCQk8ZmllbGQgbmFtZT0iT0siLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL1NTTEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0lPRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9TU0xIYW5kc2hha2VFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YXgvbmV0L3NzbC9TU0xFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL1NTTEtleUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZheC9uZXQvc3NsL1NTTEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L25ldC9zc2wvU1NMUGFyYW1ldGVycyIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxnb3JpdGhtQ29uc3RyYWludHMoKUxqYXZhL3NlY3VyaXR5L0FsZ29yaXRobUNvbnN0cmFpbnRzOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2lwaGVyU3VpdGVzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5kcG9pbnRJZGVudGlmaWNhdGlvbkFsZ29yaXRobSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZWVkQ2xpZW50QXV0aCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3RvY29scygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNOSU1hdGNoZXJzKClMamF2YS91dGlsL0NvbGxlY3Rpb247IiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJ2ZXJOYW1lcygpTGphdmEvdXRpbC9MaXN0OyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlQ2lwaGVyU3VpdGVzT3JkZXIoKVoiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdhbnRDbGllbnRBdXRoKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxnb3JpdGhtQ29uc3RyYWludHMoTGphdmEvc2VjdXJpdHkvQWxnb3JpdGhtQ29uc3RyYWludHM7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldENpcGhlclN1aXRlcyhbTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmRwb2ludElkZW50aWZpY2F0aW9uQWxnb3JpdGhtKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROZWVkQ2xpZW50QXV0aChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm90b2NvbHMoW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U05JTWF0Y2hlcnMoTGphdmEvdXRpbC9Db2xsZWN0aW9uOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZXJ2ZXJOYW1lcyhMamF2YS91dGlsL0xpc3Q7KVYiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZUNpcGhlclN1aXRlc09yZGVyKFopViIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2FudENsaWVudEF1dGgoWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9TU0xQZWVyVW52ZXJpZmllZEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZheC9uZXQvc3NsL1NTTEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L25ldC9zc2wvU1NMUGVybWlzc2lvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L0Jhc2ljUGVybWlzc2lvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L25ldC9zc2wvU1NMUHJvdG9jb2xFeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YXgvbmV0L3NzbC9TU0xFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL1NTTFNlcnZlclNvY2tldCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL25ldC9TZXJ2ZXJTb2NrZXQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUlMamF2YS9uZXQvSW5ldEFkZHJlc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmFibGVTZXNzaW9uQ3JlYXRpb24oKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmFibGVkQ2lwaGVyU3VpdGVzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5hYmxlZFByb3RvY29scygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5lZWRDbGllbnRBdXRoKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U1NMUGFyYW1ldGVycygpTGphdmF4L25ldC9zc2wvU1NMUGFyYW1ldGVyczsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZENpcGhlclN1aXRlcygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1cHBvcnRlZFByb3RvY29scygpW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZUNsaWVudE1vZGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXYW50Q2xpZW50QXV0aCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuYWJsZVNlc3Npb25DcmVhdGlvbihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmFibGVkQ2lwaGVyU3VpdGVzKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuYWJsZWRQcm90b2NvbHMoW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmVlZENsaWVudEF1dGgoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U1NMUGFyYW1ldGVycyhMamF2YXgvbmV0L3NzbC9TU0xQYXJhbWV0ZXJzOylWIiBzaW5jZT0iMjQiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VDbGllbnRNb2RlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdhbnRDbGllbnRBdXRoKFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L25ldC9zc2wvU1NMU2VydmVyU29ja2V0RmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZheC9uZXQvU2VydmVyU29ja2V0RmFjdG9yeSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRDaXBoZXJTdWl0ZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRDaXBoZXJTdWl0ZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL1NTTFNlc3Npb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFwcGxpY2F0aW9uQnVmZmVyU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENpcGhlclN1aXRlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDcmVhdGlvblRpbWUoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJZCgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXN0QWNjZXNzZWRUaW1lKClKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxDZXJ0aWZpY2F0ZXMoKVtMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsUHJpbmNpcGFsKClMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFja2V0QnVmZmVyU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlZXJDZXJ0aWZpY2F0ZUNoYWluKClbTGphdmF4L3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlZXJDZXJ0aWZpY2F0ZXMoKVtMamF2YS9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlZXJIb3N0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQZWVyUG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBlZXJQcmluY2lwYWwoKUxqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm90b2NvbCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vzc2lvbkNvbnRleHQoKUxqYXZheC9uZXQvc3NsL1NTTFNlc3Npb25Db250ZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbHVlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZU5hbWVzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW52YWxpZGF0ZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmFsaWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXRWYWx1ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVZhbHVlKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9TU0xTZXNzaW9uQmluZGluZ0V2ZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9FdmVudE9iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YXgvbmV0L3NzbC9TU0xTZXNzaW9uO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vzc2lvbigpTGphdmF4L25ldC9zc2wvU1NMU2Vzc2lvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL1NTTFNlc3Npb25CaW5kaW5nTGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvRXZlbnRMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlQm91bmQoTGphdmF4L25ldC9zc2wvU1NMU2Vzc2lvbkJpbmRpbmdFdmVudDspViIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlVW5ib3VuZChMamF2YXgvbmV0L3NzbC9TU0xTZXNzaW9uQmluZGluZ0V2ZW50OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9TU0xTZXNzaW9uQ29udGV4dCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SWRzKClMamF2YS91dGlsL0VudW1lcmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlc3Npb24oW0IpTGphdmF4L25ldC9zc2wvU1NMU2Vzc2lvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXNzaW9uQ2FjaGVTaXplKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vzc2lvblRpbWVvdXQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTZXNzaW9uQ2FjaGVTaXplKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlc3Npb25UaW1lb3V0KEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L25ldC9zc2wvU1NMU29ja2V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbmV0L1NvY2tldCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL25ldC9JbmV0QWRkcmVzcztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmV0L0luZXRBZGRyZXNzO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvSW5ldEFkZHJlc3M7SUxqYXZhL25ldC9JbmV0QWRkcmVzcztJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRIYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lcihMamF2YXgvbmV0L3NzbC9IYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuYWJsZVNlc3Npb25DcmVhdGlvbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuYWJsZWRDaXBoZXJTdWl0ZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmFibGVkUHJvdG9jb2xzKClbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SGFuZHNoYWtlU2Vzc2lvbigpTGphdmF4L25ldC9zc2wvU1NMU2Vzc2lvbjsiIHNpbmNlPSIyNCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5lZWRDbGllbnRBdXRoKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U1NMUGFyYW1ldGVycygpTGphdmF4L25ldC9zc2wvU1NMUGFyYW1ldGVyczsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vzc2lvbigpTGphdmF4L25ldC9zc2wvU1NMU2Vzc2lvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRDaXBoZXJTdWl0ZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRQcm90b2NvbHMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VDbGllbnRNb2RlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2FudENsaWVudEF1dGgoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVIYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lcihMamF2YXgvbmV0L3NzbC9IYW5kc2hha2VDb21wbGV0ZWRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuYWJsZVNlc3Npb25DcmVhdGlvbihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmFibGVkQ2lwaGVyU3VpdGVzKFtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuYWJsZWRQcm90b2NvbHMoW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmVlZENsaWVudEF1dGgoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U1NMUGFyYW1ldGVycyhMamF2YXgvbmV0L3NzbC9TU0xQYXJhbWV0ZXJzOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZUNsaWVudE1vZGUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2FudENsaWVudEF1dGgoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRIYW5kc2hha2UoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL1NTTFNvY2tldEZhY3RvcnkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YXgvbmV0L1NvY2tldEZhY3RvcnkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTb2NrZXQoTGphdmEvbmV0L1NvY2tldDtMamF2YS9sYW5nL1N0cmluZztJWilMamF2YS9uZXQvU29ja2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRDaXBoZXJTdWl0ZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdXBwb3J0ZWRDaXBoZXJTdWl0ZXMoKVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL1N0YW5kYXJkQ29uc3RhbnRzIiBzaW5jZT0iMjQiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJTTklfSE9TVF9OQU1FIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9UcnVzdE1hbmFnZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L25ldC9zc2wvVHJ1c3RNYW5hZ2VyRmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZheC9uZXQvc3NsL1RydXN0TWFuYWdlckZhY3RvcnlTcGk7TGphdmEvc2VjdXJpdHkvUHJvdmlkZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBbGdvcml0aG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRBbGdvcml0aG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgvbmV0L3NzbC9UcnVzdE1hbmFnZXJGYWN0b3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgvbmV0L3NzbC9UcnVzdE1hbmFnZXJGYWN0b3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NlY3VyaXR5L1Byb3ZpZGVyOylMamF2YXgvbmV0L3NzbC9UcnVzdE1hbmFnZXJGYWN0b3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3ZpZGVyKClMamF2YS9zZWN1cml0eS9Qcm92aWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUcnVzdE1hbmFnZXJzKClbTGphdmF4L25ldC9zc2wvVHJ1c3RNYW5hZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoTGphdmEvc2VjdXJpdHkvS2V5U3RvcmU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0KExqYXZheC9uZXQvc3NsL01hbmFnZXJGYWN0b3J5UGFyYW1ldGVyczspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L25ldC9zc2wvVHJ1c3RNYW5hZ2VyRmFjdG9yeVNwaSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lR2V0VHJ1c3RNYW5hZ2VycygpW0xqYXZheC9uZXQvc3NsL1RydXN0TWFuYWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmdpbmVJbml0KExqYXZhL3NlY3VyaXR5L0tleVN0b3JlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5naW5lSW5pdChMamF2YXgvbmV0L3NzbC9NYW5hZ2VyRmFjdG9yeVBhcmFtZXRlcnM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9uZXQvc3NsL1g1MDlFeHRlbmRlZEtleU1hbmFnZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC9uZXQvc3NsL1g1MDlLZXlNYW5hZ2VyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hvb3NlRW5naW5lQ2xpZW50QWxpYXMoW0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7TGphdmF4L25ldC9zc2wvU1NMRW5naW5lOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaG9vc2VFbmdpbmVTZXJ2ZXJBbGlhcyhMamF2YS9sYW5nL1N0cmluZztbTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsO0xqYXZheC9uZXQvc3NsL1NTTEVuZ2luZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvbmV0L3NzbC9YNTA5RXh0ZW5kZWRUcnVzdE1hbmFnZXIiIHNpbmNlPSIyNCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YXgvbmV0L3NzbC9YNTA5VHJ1c3RNYW5hZ2VyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tDbGllbnRUcnVzdGVkKFtMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZTtMamF2YS9sYW5nL1N0cmluZztMamF2YS9uZXQvU29ja2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tDbGllbnRUcnVzdGVkKFtMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZTtMamF2YS9sYW5nL1N0cmluZztMamF2YXgvbmV0L3NzbC9TU0xFbmdpbmU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1NlcnZlclRydXN0ZWQoW0xqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL25ldC9Tb2NrZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1NlcnZlclRydXN0ZWQoW0xqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZheC9uZXQvc3NsL1NTTEVuZ2luZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L25ldC9zc2wvWDUwOUtleU1hbmFnZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC9uZXQvc3NsL0tleU1hbmFnZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaG9vc2VDbGllbnRBbGlhcyhbTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbDtMamF2YS9uZXQvU29ja2V0OylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaG9vc2VTZXJ2ZXJBbGlhcyhMamF2YS9sYW5nL1N0cmluZztbTGphdmEvc2VjdXJpdHkvUHJpbmNpcGFsO0xqYXZhL25ldC9Tb2NrZXQ7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENlcnRpZmljYXRlQ2hhaW4oTGphdmEvbGFuZy9TdHJpbmc7KVtMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDbGllbnRBbGlhc2VzKExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7KVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcml2YXRlS2V5KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9zZWN1cml0eS9Qcml2YXRlS2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlcnZlckFsaWFzZXMoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbDspW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L25ldC9zc2wvWDUwOVRydXN0TWFuYWdlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmF4L25ldC9zc2wvVHJ1c3RNYW5hZ2VyIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tDbGllbnRUcnVzdGVkKFtMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZTtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrU2VydmVyVHJ1c3RlZChbTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBY2NlcHRlZElzc3VlcnMoKVtMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zZWN1cml0eS9hdXRoL0F1dGhQZXJtaXNzaW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvc2VjdXJpdHkvQmFzaWNQZXJtaXNzaW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc2VjdXJpdHkvYXV0aC9EZXN0cm95RmFpbGVkRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zZWN1cml0eS9hdXRoL0Rlc3Ryb3lhYmxlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXN0cm95KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZXN0cm95ZWQoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zZWN1cml0eS9hdXRoL1ByaXZhdGVDcmVkZW50aWFsUGVybWlzc2lvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL3NlY3VyaXR5L1Blcm1pc3Npb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDcmVkZW50aWFsQ2xhc3MoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaW5jaXBhbHMoKVtbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc2VjdXJpdHkvYXV0aC9TdWJqZWN0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oWkxqYXZhL3V0aWwvU2V0O0xqYXZhL3V0aWwvU2V0O0xqYXZhL3V0aWwvU2V0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9BcyhMamF2YXgvc2VjdXJpdHkvYXV0aC9TdWJqZWN0O0xqYXZhL3NlY3VyaXR5L1ByaXZpbGVnZWRBY3Rpb247KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImRvQXMoTGphdmF4L3NlY3VyaXR5L2F1dGgvU3ViamVjdDtMamF2YS9zZWN1cml0eS9Qcml2aWxlZ2VkRXhjZXB0aW9uQWN0aW9uOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb0FzUHJpdmlsZWdlZChMamF2YXgvc2VjdXJpdHkvYXV0aC9TdWJqZWN0O0xqYXZhL3NlY3VyaXR5L1ByaXZpbGVnZWRBY3Rpb247TGphdmEvc2VjdXJpdHkvQWNjZXNzQ29udHJvbENvbnRleHQ7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImRvQXNQcml2aWxlZ2VkKExqYXZheC9zZWN1cml0eS9hdXRoL1N1YmplY3Q7TGphdmEvc2VjdXJpdHkvUHJpdmlsZWdlZEV4Y2VwdGlvbkFjdGlvbjtMamF2YS9zZWN1cml0eS9BY2Nlc3NDb250cm9sQ29udGV4dDspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbmNpcGFscygpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJpbmNpcGFscyhMamF2YS9sYW5nL0NsYXNzOylMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcml2YXRlQ3JlZGVudGlhbHMoKUxqYXZhL3V0aWwvU2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByaXZhdGVDcmVkZW50aWFscyhMamF2YS9sYW5nL0NsYXNzOylMamF2YS91dGlsL1NldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQdWJsaWNDcmVkZW50aWFscygpTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHVibGljQ3JlZGVudGlhbHMoTGphdmEvbGFuZy9DbGFzczspTGphdmEvdXRpbC9TZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3ViamVjdChMamF2YS9zZWN1cml0eS9BY2Nlc3NDb250cm9sQ29udGV4dDspTGphdmF4L3NlY3VyaXR5L2F1dGgvU3ViamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlYWRPbmx5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVhZE9ubHkoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zZWN1cml0eS9hdXRoL1N1YmplY3REb21haW5Db21iaW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvRG9tYWluQ29tYmluZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmF4L3NlY3VyaXR5L2F1dGgvU3ViamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN1YmplY3QoKUxqYXZheC9zZWN1cml0eS9hdXRoL1N1YmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc2VjdXJpdHkvYXV0aC9jYWxsYmFjay9DYWxsYmFjayIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc2VjdXJpdHkvYXV0aC9jYWxsYmFjay9DYWxsYmFja0hhbmRsZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZShbTGphdmF4L3NlY3VyaXR5L2F1dGgvY2FsbGJhY2svQ2FsbGJhY2s7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zZWN1cml0eS9hdXRoL2NhbGxiYWNrL1Bhc3N3b3JkQ2FsbGJhY2siIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC9zZWN1cml0eS9hdXRoL2NhbGxiYWNrL0NhbGxiYWNrIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyUGFzc3dvcmQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXNzd29yZCgpW0MiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9tcHQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRWNob09uKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFzc3dvcmQoW0MpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3NlY3VyaXR5L2F1dGgvY2FsbGJhY2svVW5zdXBwb3J0ZWRDYWxsYmFja0V4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZheC9zZWN1cml0eS9hdXRoL2NhbGxiYWNrL0NhbGxiYWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZheC9zZWN1cml0eS9hdXRoL2NhbGxiYWNrL0NhbGxiYWNrO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2FsbGJhY2soKUxqYXZheC9zZWN1cml0eS9hdXRoL2NhbGxiYWNrL0NhbGxiYWNrOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3NlY3VyaXR5L2F1dGgvbG9naW4vTG9naW5FeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9zZWN1cml0eS9HZW5lcmFsU2VjdXJpdHlFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zZWN1cml0eS9hdXRoL3g1MDAvWDUwMFByaW5jaXBhbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvUHJpbmNpcGFsIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTWFwOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5jb2RlZCgpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvTWFwOylMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDQU5PTklDQUwiLz4KLQkJPGZpZWxkIG5hbWU9IlJGQzE3NzkiLz4KLQkJPGZpZWxkIG5hbWU9IlJGQzIyNTMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGVkKClbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFB1YmxpY0tleSgpTGphdmEvc2VjdXJpdHkvUHVibGljS2V5OyIvPgotCQk8bWV0aG9kIG5hbWU9InZlcmlmeShMamF2YS9zZWN1cml0eS9QdWJsaWNLZXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2ZXJpZnkoTGphdmEvc2VjdXJpdHkvUHVibGljS2V5O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZUVuY29kaW5nRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmF4L3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlRXhwaXJlZEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZheC9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZU5vdFlldFZhbGlkRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmF4L3NlY3VyaXR5L2NlcnQvQ2VydGlmaWNhdGVFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlUGFyc2luZ0V4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZheC9zZWN1cml0eS9jZXJ0L0NlcnRpZmljYXRlRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGUiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YXgvc2VjdXJpdHkvY2VydC9DZXJ0aWZpY2F0ZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrVmFsaWRpdHkoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja1ZhbGlkaXR5KExqYXZhL3V0aWwvRGF0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEluc3RhbmNlKExqYXZhL2lvL0lucHV0U3RyZWFtOylMamF2YXgvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5zdGFuY2UoW0IpTGphdmF4L3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElzc3VlckROKClMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Tm90QWZ0ZXIoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb3RCZWZvcmUoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZXJpYWxOdW1iZXIoKUxqYXZhL21hdGgvQmlnSW50ZWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaWdBbGdOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTaWdBbGdPSUQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpZ0FsZ1BhcmFtcygpW0IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdWJqZWN0RE4oKUxqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZXJzaW9uKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc3FsL0NvbW1vbkRhdGFTb3VyY2UiIHNpbmNlPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvZ1dyaXRlcigpTGphdmEvaW8vUHJpbnRXcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9naW5UaW1lb3V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50TG9nZ2VyKClMamF2YS91dGlsL2xvZ2dpbmcvTG9nZ2VyOyIgc2luY2U9IjI0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9nV3JpdGVyKExqYXZhL2lvL1ByaW50V3JpdGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9naW5UaW1lb3V0KEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3NxbC9Db25uZWN0aW9uRXZlbnQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0V2ZW50T2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZheC9zcWwvUG9vbGVkQ29ubmVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YXgvc3FsL1Bvb2xlZENvbm5lY3Rpb247TGphdmEvc3FsL1NRTEV4Y2VwdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNRTEV4Y2VwdGlvbigpTGphdmEvc3FsL1NRTEV4Y2VwdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zcWwvQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvRXZlbnRMaXN0ZW5lciIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3Rpb25DbG9zZWQoTGphdmF4L3NxbC9Db25uZWN0aW9uRXZlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChMamF2YXgvc3FsL0Nvbm5lY3Rpb25FdmVudDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3NxbC9Db25uZWN0aW9uUG9vbERhdGFTb3VyY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC9zcWwvQ29tbW9uRGF0YVNvdXJjZSIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2dXcml0ZXIoKUxqYXZhL2lvL1ByaW50V3JpdGVyOyIgcmVtb3ZlZD0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvZ2luVGltZW91dCgpSSIgcmVtb3ZlZD0iOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvb2xlZENvbm5lY3Rpb24oKUxqYXZheC9zcWwvUG9vbGVkQ29ubmVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb29sZWRDb25uZWN0aW9uKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgvc3FsL1Bvb2xlZENvbm5lY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9nV3JpdGVyKExqYXZhL2lvL1ByaW50V3JpdGVyOylWIiByZW1vdmVkPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9naW5UaW1lb3V0KEkpViIgcmVtb3ZlZD0iOSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3NxbC9EYXRhU291cmNlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zcWwvV3JhcHBlciIgc2luY2U9IjkiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YXgvc3FsL0NvbW1vbkRhdGFTb3VyY2UiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ubmVjdGlvbigpTGphdmEvc3FsL0Nvbm5lY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ubmVjdGlvbihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvc3FsL0Nvbm5lY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9nV3JpdGVyKClMamF2YS9pby9QcmludFdyaXRlcjsiIHJlbW92ZWQ9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2dpblRpbWVvdXQoKUkiIHJlbW92ZWQ9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2dXcml0ZXIoTGphdmEvaW8vUHJpbnRXcml0ZXI7KVYiIHJlbW92ZWQ9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2dpblRpbWVvdXQoSSlWIiByZW1vdmVkPSI5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc3FsL1Bvb2xlZENvbm5lY3Rpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyKExqYXZheC9zcWwvQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRTdGF0ZW1lbnRFdmVudExpc3RlbmVyKExqYXZheC9zcWwvU3RhdGVtZW50RXZlbnRMaXN0ZW5lcjspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb24oKUxqYXZhL3NxbC9Db25uZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyKExqYXZheC9zcWwvQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVTdGF0ZW1lbnRFdmVudExpc3RlbmVyKExqYXZheC9zcWwvU3RhdGVtZW50RXZlbnRMaXN0ZW5lcjspViIgc2luY2U9IjkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zcWwvUm93U2V0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zcWwvUmVzdWx0U2V0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUm93U2V0TGlzdGVuZXIoTGphdmF4L3NxbC9Sb3dTZXRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyUGFyYW1ldGVycygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWN1dGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21tYW5kKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhU291cmNlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXNjYXBlUHJvY2Vzc2luZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heEZpZWxkU2l6ZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heFJvd3MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXNzd29yZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UXVlcnlUaW1lb3V0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlTWFwKClMamF2YS91dGlsL01hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmwoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJuYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlYWRPbmx5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUm93U2V0TGlzdGVuZXIoTGphdmF4L3NxbC9Sb3dTZXRMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFycmF5KElMamF2YS9zcWwvQXJyYXk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBc2NpaVN0cmVhbShJTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXNjaWlTdHJlYW0oSUxqYXZhL2lvL0lucHV0U3RyZWFtO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFzY2lpU3RyZWFtKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL0lucHV0U3RyZWFtOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEFzY2lpU3RyZWFtKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL0lucHV0U3RyZWFtO0kpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCaWdEZWNpbWFsKElMamF2YS9tYXRoL0JpZ0RlY2ltYWw7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCaWdEZWNpbWFsKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL21hdGgvQmlnRGVjaW1hbDspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCaW5hcnlTdHJlYW0oSUxqYXZhL2lvL0lucHV0U3RyZWFtOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJpbmFyeVN0cmVhbShJTGphdmEvaW8vSW5wdXRTdHJlYW07SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmluYXJ5U3RyZWFtKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL0lucHV0U3RyZWFtOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJpbmFyeVN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9JbnB1dFN0cmVhbTtJKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmxvYihJTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmxvYihJTGphdmEvaW8vSW5wdXRTdHJlYW07SilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJsb2IoSUxqYXZhL3NxbC9CbG9iOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QmxvYihMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9JbnB1dFN0cmVhbTspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCbG9iKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2lvL0lucHV0U3RyZWFtO0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCbG9iKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9CbG9iOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJvb2xlYW4oSVopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJvb2xlYW4oTGphdmEvbGFuZy9TdHJpbmc7WilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJ5dGUoSUIpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJ5dGUoTGphdmEvbGFuZy9TdHJpbmc7QilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJ5dGVzKElbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qnl0ZXMoTGphdmEvbGFuZy9TdHJpbmc7W0IpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGFyYWN0ZXJTdHJlYW0oSUxqYXZhL2lvL1JlYWRlcjspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGFyYWN0ZXJTdHJlYW0oSUxqYXZhL2lvL1JlYWRlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGFyYWN0ZXJTdHJlYW0oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vUmVhZGVyOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoYXJhY3RlclN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7SSlWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENsb2IoSUxqYXZhL2lvL1JlYWRlcjspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDbG9iKElMamF2YS9pby9SZWFkZXI7SilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENsb2IoSUxqYXZhL3NxbC9DbG9iOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2xvYihMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2xvYihMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7SilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENsb2IoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc3FsL0Nsb2I7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29tbWFuZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbmN1cnJlbmN5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGFTb3VyY2VOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0ZShJTGphdmEvc3FsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRlKElMamF2YS9zcWwvRGF0ZTtMamF2YS91dGlsL0NhbGVuZGFyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zcWwvRGF0ZTspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9EYXRlO0xqYXZhL3V0aWwvQ2FsZW5kYXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RG91YmxlKElEKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREb3VibGUoTGphdmEvbGFuZy9TdHJpbmc7RClWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVzY2FwZVByb2Nlc3NpbmcoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmxvYXQoSUYpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZsb2F0KExqYXZhL2xhbmcvU3RyaW5nO0YpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnQoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEludChMamF2YS9sYW5nL1N0cmluZztJKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9uZyhJSilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9uZyhMamF2YS9sYW5nL1N0cmluZztKKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4RmllbGRTaXplKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1heFJvd3MoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TkNoYXJhY3RlclN0cmVhbShJTGphdmEvaW8vUmVhZGVyOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5DaGFyYWN0ZXJTdHJlYW0oSUxqYXZhL2lvL1JlYWRlcjtKKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TkNoYXJhY3RlclN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TkNoYXJhY3RlclN0cmVhbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7SilWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5DbG9iKElMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TkNsb2IoSUxqYXZhL2lvL1JlYWRlcjtKKVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TkNsb2IoSUxqYXZhL3NxbC9OQ2xvYjspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROQ2xvYihMamF2YS9sYW5nL1N0cmluZztMamF2YS9pby9SZWFkZXI7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TkNsb2IoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvaW8vUmVhZGVyO0opViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROQ2xvYihMamF2YS9sYW5nL1N0cmluZztMamF2YS9zcWwvTkNsb2I7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TlN0cmluZyhJTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TlN0cmluZyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROdWxsKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROdWxsKElJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROdWxsKExqYXZhL2xhbmcvU3RyaW5nO0kpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROdWxsKExqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPYmplY3QoSUxqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T2JqZWN0KElMamF2YS9sYW5nL09iamVjdDtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPYmplY3QoSUxqYXZhL2xhbmcvT2JqZWN0O0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPYmplY3QoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T2JqZWN0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0O0kpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPYmplY3QoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7SUkpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXNzd29yZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFF1ZXJ5VGltZW91dChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWFkT25seShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWYoSUxqYXZhL3NxbC9SZWY7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSb3dJZChJTGphdmEvc3FsL1Jvd0lkOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJvd0lkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9Sb3dJZDspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTUUxYTUwoSUxqYXZhL3NxbC9TUUxYTUw7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U1FMWE1MKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9TUUxYTUw7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2hvcnQoSVMpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNob3J0KExqYXZhL2xhbmcvU3RyaW5nO1MpViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdHJpbmcoSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWUoSUxqYXZhL3NxbC9UaW1lOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZShJTGphdmEvc3FsL1RpbWU7TGphdmEvdXRpbC9DYWxlbmRhcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc3FsL1RpbWU7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zcWwvVGltZTtMamF2YS91dGlsL0NhbGVuZGFyOylWIiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVzdGFtcChJTGphdmEvc3FsL1RpbWVzdGFtcDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVzdGFtcChJTGphdmEvc3FsL1RpbWVzdGFtcDtMamF2YS91dGlsL0NhbGVuZGFyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZXN0YW1wKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9UaW1lc3RhbXA7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZXN0YW1wKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3NxbC9UaW1lc3RhbXA7TGphdmEvdXRpbC9DYWxlbmRhcjspViIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUeXBlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFR5cGVNYXAoTGphdmEvdXRpbC9NYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVUkwoSUxqYXZhL25ldC9VUkw7KVYiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXJsKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VXNlcm5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zcWwvUm93U2V0RXZlbnQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS91dGlsL0V2ZW50T2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZheC9zcWwvUm93U2V0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc3FsL1Jvd1NldEludGVybmFsIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25uZWN0aW9uKClMamF2YS9zcWwvQ29ubmVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmlnaW5hbCgpTGphdmEvc3FsL1Jlc3VsdFNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmlnaW5hbFJvdygpTGphdmEvc3FsL1Jlc3VsdFNldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbXMoKVtMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNZXRhRGF0YShMamF2YXgvc3FsL1Jvd1NldE1ldGFEYXRhOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc3FsL1Jvd1NldExpc3RlbmVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL0V2ZW50TGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSJjdXJzb3JNb3ZlZChMamF2YXgvc3FsL1Jvd1NldEV2ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icm93Q2hhbmdlZChMamF2YXgvc3FsL1Jvd1NldEV2ZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icm93U2V0Q2hhbmdlZChMamF2YXgvc3FsL1Jvd1NldEV2ZW50OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc3FsL1Jvd1NldE1ldGFEYXRhIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9zcWwvUmVzdWx0U2V0TWV0YURhdGEiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdXRvSW5jcmVtZW50KElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYXNlU2Vuc2l0aXZlKElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDYXRhbG9nTmFtZShJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2x1bW5Db3VudChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2x1bW5EaXNwbGF5U2l6ZShJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sdW1uTGFiZWwoSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sdW1uTmFtZShJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2x1bW5UeXBlKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb2x1bW5UeXBlTmFtZShJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDdXJyZW5jeShJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TnVsbGFibGUoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZWNpc2lvbihJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2NhbGUoSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNjaGVtYU5hbWUoSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2VhcmNoYWJsZShJWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2lnbmVkKElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUYWJsZU5hbWUoSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc3FsL1Jvd1NldFJlYWRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZERhdGEoTGphdmF4L3NxbC9Sb3dTZXRJbnRlcm5hbDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3NxbC9Sb3dTZXRXcml0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlRGF0YShMamF2YXgvc3FsL1Jvd1NldEludGVybmFsOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgvc3FsL1N0YXRlbWVudEV2ZW50IiBzaW5jZT0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvdXRpbC9FdmVudE9iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YXgvc3FsL1Bvb2xlZENvbm5lY3Rpb247TGphdmEvc3FsL1ByZXBhcmVkU3RhdGVtZW50OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZheC9zcWwvUG9vbGVkQ29ubmVjdGlvbjtMamF2YS9zcWwvUHJlcGFyZWRTdGF0ZW1lbnQ7TGphdmEvc3FsL1NRTEV4Y2VwdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNRTEV4Y2VwdGlvbigpTGphdmEvc3FsL1NRTEV4Y2VwdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0ZW1lbnQoKUxqYXZhL3NxbC9QcmVwYXJlZFN0YXRlbWVudDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC9zcWwvU3RhdGVtZW50RXZlbnRMaXN0ZW5lciIgc2luY2U9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9FdmVudExpc3RlbmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhdGVtZW50Q2xvc2VkKExqYXZheC9zcWwvU3RhdGVtZW50RXZlbnQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGF0ZW1lbnRFcnJvck9jY3VycmVkKExqYXZheC9zcWwvU3RhdGVtZW50RXZlbnQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwvWE1MQ29uc3RhbnRzIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfTlNfUFJFRklYIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1NFQ1VSRV9QUk9DRVNTSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVUxMX05TX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iUkVMQVhOR19OU19VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IlczQ19YTUxfU0NIRU1BX0lOU1RBTkNFX05TX1VSSSIvPgotCQk8ZmllbGQgbmFtZT0iVzNDX1hNTF9TQ0hFTUFfTlNfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJXM0NfWFBBVEhfREFUQVRZUEVfTlNfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJYTUxOU19BVFRSSUJVVEUiLz4KLQkJPGZpZWxkIG5hbWU9IlhNTE5TX0FUVFJJQlVURV9OU19VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IlhNTF9EVERfTlNfVVJJIi8+Ci0JCTxmaWVsZCBuYW1lPSJYTUxfTlNfUFJFRklYIi8+Ci0JCTxmaWVsZCBuYW1lPSJYTUxfTlNfVVJJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL2RhdGF0eXBlL0RhdGF0eXBlQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL2RhdGF0eXBlL0RhdGF0eXBlQ29uc3RhbnRzIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFQUklMIi8+Ci0JCTxmaWVsZCBuYW1lPSJBVUdVU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkRBVEVUSU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVlTIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUNFTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iRFVSQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkRVUkFUSU9OX0RBWVRJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IkRVUkFUSU9OX1lFQVJNT05USCIvPgotCQk8ZmllbGQgbmFtZT0iRVFVQUwiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQlJVQVJZIi8+Ci0JCTxmaWVsZCBuYW1lPSJGSUVMRF9VTkRFRklORUQiLz4KLQkJPGZpZWxkIG5hbWU9IkdEQVkiLz4KLQkJPGZpZWxkIG5hbWU9IkdNT05USCIvPgotCQk8ZmllbGQgbmFtZT0iR01PTlRIREFZIi8+Ci0JCTxmaWVsZCBuYW1lPSJHUkVBVEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJHWUVBUiIvPgotCQk8ZmllbGQgbmFtZT0iR1lFQVJNT05USCIvPgotCQk8ZmllbGQgbmFtZT0iSE9VUlMiLz4KLQkJPGZpZWxkIG5hbWU9IklOREVURVJNSU5BVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkpBTlVBUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkpVTFkiLz4KLQkJPGZpZWxkIG5hbWU9IkpVTkUiLz4KLQkJPGZpZWxkIG5hbWU9IkxFU1NFUiIvPgotCQk8ZmllbGQgbmFtZT0iTUFSQ0giLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9USU1FWk9ORV9PRkZTRVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWSIvPgotCQk8ZmllbGQgbmFtZT0iTUlOVVRFUyIvPgotCQk8ZmllbGQgbmFtZT0iTUlOX1RJTUVaT05FX09GRlNFVCIvPgotCQk8ZmllbGQgbmFtZT0iTU9OVEhTIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT1ZFTUJFUiIvPgotCQk8ZmllbGQgbmFtZT0iT0NUT0JFUiIvPgotCQk8ZmllbGQgbmFtZT0iU0VDT05EUyIvPgotCQk8ZmllbGQgbmFtZT0iU0VQVEVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJUSU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJZRUFSUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC9kYXRhdHlwZS9EYXRhdHlwZUNvbnN0YW50cyRGaWVsZCIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIiByZW1vdmVkPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJKVYiIHNpbmNlPSIyOSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElkKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL2RhdGF0eXBlL0RhdGF0eXBlRmFjdG9yeSIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RHVyYXRpb24oSilMamF2YXgveG1sL2RhdGF0eXBlL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0R1cmF0aW9uKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgveG1sL2RhdGF0eXBlL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0R1cmF0aW9uKFpJSUlJSUkpTGphdmF4L3htbC9kYXRhdHlwZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdEdXJhdGlvbihaTGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0RlY2ltYWw7KUxqYXZheC94bWwvZGF0YXR5cGUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RHVyYXRpb25EYXlUaW1lKEopTGphdmF4L3htbC9kYXRhdHlwZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdEdXJhdGlvbkRheVRpbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZheC94bWwvZGF0YXR5cGUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RHVyYXRpb25EYXlUaW1lKFpJSUlJKUxqYXZheC94bWwvZGF0YXR5cGUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RHVyYXRpb25EYXlUaW1lKFpMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyO0xqYXZhL21hdGgvQmlnSW50ZWdlcjtMamF2YS9tYXRoL0JpZ0ludGVnZXI7KUxqYXZheC94bWwvZGF0YXR5cGUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RHVyYXRpb25ZZWFyTW9udGgoSilMamF2YXgveG1sL2RhdGF0eXBlL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0R1cmF0aW9uWWVhck1vbnRoKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgveG1sL2RhdGF0eXBlL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0R1cmF0aW9uWWVhck1vbnRoKFpJSSlMamF2YXgveG1sL2RhdGF0eXBlL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0R1cmF0aW9uWWVhck1vbnRoKFpMamF2YS9tYXRoL0JpZ0ludGVnZXI7TGphdmEvbWF0aC9CaWdJbnRlZ2VyOylMamF2YXgveG1sL2RhdGF0eXBlL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKClMamF2YXgveG1sL2RhdGF0eXBlL0RhdGF0eXBlRmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylMamF2YXgveG1sL2RhdGF0eXBlL0RhdGF0eXBlRmFjdG9yeTsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoKUxqYXZheC94bWwvZGF0YXR5cGUvWE1MR3JlZ29yaWFuQ2FsZW5kYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoSUlJSUlJSUkpTGphdmF4L3htbC9kYXRhdHlwZS9YTUxHcmVnb3JpYW5DYWxlbmRhcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdYTUxHcmVnb3JpYW5DYWxlbmRhcihMamF2YS9sYW5nL1N0cmluZzspTGphdmF4L3htbC9kYXRhdHlwZS9YTUxHcmVnb3JpYW5DYWxlbmRhcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdYTUxHcmVnb3JpYW5DYWxlbmRhcihMamF2YS9tYXRoL0JpZ0ludGVnZXI7SUlJSUlMamF2YS9tYXRoL0JpZ0RlY2ltYWw7SSlMamF2YXgveG1sL2RhdGF0eXBlL1hNTEdyZWdvcmlhbkNhbGVuZGFyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1hNTEdyZWdvcmlhbkNhbGVuZGFyKExqYXZhL3V0aWwvR3JlZ29yaWFuQ2FsZW5kYXI7KUxqYXZheC94bWwvZGF0YXR5cGUvWE1MR3JlZ29yaWFuQ2FsZW5kYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXJEYXRlKElJSUkpTGphdmF4L3htbC9kYXRhdHlwZS9YTUxHcmVnb3JpYW5DYWxlbmRhcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdYTUxHcmVnb3JpYW5DYWxlbmRhclRpbWUoSUlJSSlMamF2YXgveG1sL2RhdGF0eXBlL1hNTEdyZWdvcmlhbkNhbGVuZGFyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1hNTEdyZWdvcmlhbkNhbGVuZGFyVGltZShJSUlJSSlMamF2YXgveG1sL2RhdGF0eXBlL1hNTEdyZWdvcmlhbkNhbGVuZGFyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1hNTEdyZWdvcmlhbkNhbGVuZGFyVGltZShJSUlMamF2YS9tYXRoL0JpZ0RlY2ltYWw7SSlMamF2YXgveG1sL2RhdGF0eXBlL1hNTEdyZWdvcmlhbkNhbGVuZGFyOyIvPgotCQk8ZmllbGQgbmFtZT0iREFUQVRZUEVGQUNUT1JZX0lNUExFTUVOVEFUSU9OX0NMQVNTIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRBVFlQRUZBQ1RPUllfUFJPUEVSVFkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwvZGF0YXR5cGUvRHVyYXRpb24iIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMamF2YXgveG1sL2RhdGF0eXBlL0R1cmF0aW9uOylMamF2YXgveG1sL2RhdGF0eXBlL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRvKExqYXZhL3V0aWwvQ2FsZW5kYXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRUbyhMamF2YS91dGlsL0RhdGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlKExqYXZheC94bWwvZGF0YXR5cGUvRHVyYXRpb247KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXlzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmllbGQoTGphdmF4L3htbC9kYXRhdHlwZS9EYXRhdHlwZUNvbnN0YW50cyRGaWVsZDspTGphdmEvbGFuZy9OdW1iZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SG91cnMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW51dGVzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TW9udGhzKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2Vjb25kcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNpZ24oKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lSW5NaWxsaXMoTGphdmEvdXRpbC9DYWxlbmRhcjspSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVJbk1pbGxpcyhMamF2YS91dGlsL0RhdGU7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRYTUxTY2hlbWFUeXBlKClMamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRZZWFycygpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTG9uZ2VyVGhhbihMamF2YXgveG1sL2RhdGF0eXBlL0R1cmF0aW9uOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTZXQoTGphdmF4L3htbC9kYXRhdHlwZS9EYXRhdHlwZUNvbnN0YW50cyRGaWVsZDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2hvcnRlclRoYW4oTGphdmF4L3htbC9kYXRhdHlwZS9EdXJhdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im11bHRpcGx5KEkpTGphdmF4L3htbC9kYXRhdHlwZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtdWx0aXBseShMamF2YS9tYXRoL0JpZ0RlY2ltYWw7KUxqYXZheC94bWwvZGF0YXR5cGUvRHVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmVnYXRlKClMamF2YXgveG1sL2RhdGF0eXBlL0R1cmF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vcm1hbGl6ZVdpdGgoTGphdmEvdXRpbC9DYWxlbmRhcjspTGphdmF4L3htbC9kYXRhdHlwZS9EdXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdWJ0cmFjdChMamF2YXgveG1sL2RhdGF0eXBlL0R1cmF0aW9uOylMamF2YXgveG1sL2RhdGF0eXBlL0R1cmF0aW9uOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC9kYXRhdHlwZS9YTUxHcmVnb3JpYW5DYWxlbmRhciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGQoTGphdmF4L3htbC9kYXRhdHlwZS9EdXJhdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZShMamF2YXgveG1sL2RhdGF0eXBlL1hNTEdyZWdvcmlhbkNhbGVuZGFyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGF5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW9uKClMamF2YS9tYXRoL0JpZ0ludGVnZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW9uQW5kWWVhcigpTGphdmEvbWF0aC9CaWdJbnRlZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyYWN0aW9uYWxTZWNvbmQoKUxqYXZhL21hdGgvQmlnRGVjaW1hbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3VyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWlsbGlzZWNvbmQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNaW51dGUoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb250aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNlY29uZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVab25lKEkpTGphdmEvdXRpbC9UaW1lWm9uZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUaW1lem9uZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFhNTFNjaGVtYVR5cGUoKUxqYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFllYXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZhbGlkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibm9ybWFsaXplKClMamF2YXgveG1sL2RhdGF0eXBlL1hNTEdyZWdvcmlhbkNhbGVuZGFyOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZyYWN0aW9uYWxTZWNvbmQoTGphdmEvbWF0aC9CaWdEZWNpbWFsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SG91cihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNaWxsaXNlY29uZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNaW51dGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TW9udGgoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2Vjb25kKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWUoSUlJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUaW1lKElJSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWUoSUlJTGphdmEvbWF0aC9CaWdEZWNpbWFsOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZXpvbmUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0WWVhcihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRZZWFyKExqYXZhL21hdGgvQmlnSW50ZWdlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InRvR3JlZ29yaWFuQ2FsZW5kYXIoKUxqYXZhL3V0aWwvR3JlZ29yaWFuQ2FsZW5kYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9HcmVnb3JpYW5DYWxlbmRhcihMamF2YS91dGlsL1RpbWVab25lO0xqYXZhL3V0aWwvTG9jYWxlO0xqYXZheC94bWwvZGF0YXR5cGUvWE1MR3JlZ29yaWFuQ2FsZW5kYXI7KUxqYXZhL3V0aWwvR3JlZ29yaWFuQ2FsZW5kYXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9YTUxGb3JtYXQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC9uYW1lc3BhY2UvTmFtZXNwYWNlQ29udGV4dCIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZXNwYWNlVVJJKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVmaXgoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWZpeGVzKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0l0ZXJhdG9yOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsUGFydCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZXNwYWNlVVJJKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVmaXgoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC9wYXJzZXJzL0RvY3VtZW50QnVpbGRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RE9NSW1wbGVtZW50YXRpb24oKUxvcmcvdzNjL2RvbS9ET01JbXBsZW1lbnRhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2hlbWEoKUxqYXZheC94bWwvdmFsaWRhdGlvbi9TY2hlbWE7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTmFtZXNwYWNlQXdhcmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1ZhbGlkYXRpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1hJbmNsdWRlQXdhcmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdEb2N1bWVudCgpTG9yZy93M2MvZG9tL0RvY3VtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2lvL0ZpbGU7KUxvcmcvdzNjL2RvbS9Eb2N1bWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9pby9JbnB1dFN0cmVhbTspTG9yZy93M2MvZG9tL0RvY3VtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2lvL0lucHV0U3RyZWFtO0xqYXZhL2xhbmcvU3RyaW5nOylMb3JnL3czYy9kb20vRG9jdW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9Eb2N1bWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMb3JnL3htbC9zYXgvSW5wdXRTb3VyY2U7KUxvcmcvdzNjL2RvbS9Eb2N1bWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVudGl0eVJlc29sdmVyKExvcmcveG1sL3NheC9FbnRpdHlSZXNvbHZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVycm9ySGFuZGxlcihMb3JnL3htbC9zYXgvRXJyb3JIYW5kbGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL3BhcnNlcnMvRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGZWF0dXJlKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NoZW1hKClMamF2YXgveG1sL3ZhbGlkYXRpb24vU2NoZW1hOyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvYWxlc2NpbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0V4cGFuZEVudGl0eVJlZmVyZW5jZXMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0lnbm9yaW5nQ29tbWVudHMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0lnbm9yaW5nRWxlbWVudENvbnRlbnRXaGl0ZXNwYWNlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOYW1lc3BhY2VBd2FyZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmFsaWRhdGluZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzWEluY2x1ZGVBd2FyZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0RvY3VtZW50QnVpbGRlcigpTGphdmF4L3htbC9wYXJzZXJzL0RvY3VtZW50QnVpbGRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZSgpTGphdmF4L3htbC9wYXJzZXJzL0RvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DbGFzc0xvYWRlcjspTGphdmF4L3htbC9wYXJzZXJzL0RvY3VtZW50QnVpbGRlckZhY3Rvcnk7IiBzaW5jZT0iOSIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF0dHJpYnV0ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvYWxlc2NpbmcoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXhwYW5kRW50aXR5UmVmZXJlbmNlcyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGZWF0dXJlKExqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9InNldElnbm9yaW5nQ29tbWVudHMoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWdub3JpbmdFbGVtZW50Q29udGVudFdoaXRlc3BhY2UoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmFtZXNwYWNlQXdhcmUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2NoZW1hKExqYXZheC94bWwvdmFsaWRhdGlvbi9TY2hlbWE7KVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFsaWRhdGluZyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRYSW5jbHVkZUF3YXJlKFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC9wYXJzZXJzL0ZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0Vycm9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvRXhjZXB0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvRXhjZXB0aW9uO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhjZXB0aW9uKClMamF2YS9sYW5nL0V4Y2VwdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwvcGFyc2Vycy9QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwvcGFyc2Vycy9TQVhQYXJzZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcnNlcigpTG9yZy94bWwvc2F4L1BhcnNlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9wZXJ0eShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NoZW1hKClMamF2YXgveG1sL3ZhbGlkYXRpb24vU2NoZW1hOyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRYTUxSZWFkZXIoKUxvcmcveG1sL3NheC9YTUxSZWFkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOYW1lc3BhY2VBd2FyZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmFsaWRhdGluZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzWEluY2x1ZGVBd2FyZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2lvL0ZpbGU7TG9yZy94bWwvc2F4L0hhbmRsZXJCYXNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvaW8vRmlsZTtMb3JnL3htbC9zYXgvaGVscGVycy9EZWZhdWx0SGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2lvL0lucHV0U3RyZWFtO0xvcmcveG1sL3NheC9IYW5kbGVyQmFzZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2lvL0lucHV0U3RyZWFtO0xvcmcveG1sL3NheC9IYW5kbGVyQmFzZTtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExqYXZhL2lvL0lucHV0U3RyZWFtO0xvcmcveG1sL3NheC9oZWxwZXJzL0RlZmF1bHRIYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvaW8vSW5wdXRTdHJlYW07TG9yZy94bWwvc2F4L2hlbHBlcnMvRGVmYXVsdEhhbmRsZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL1N0cmluZztMb3JnL3htbC9zYXgvSGFuZGxlckJhc2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9sYW5nL1N0cmluZztMb3JnL3htbC9zYXgvaGVscGVycy9EZWZhdWx0SGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExvcmcveG1sL3NheC9JbnB1dFNvdXJjZTtMb3JnL3htbC9zYXgvSGFuZGxlckJhc2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMb3JnL3htbC9zYXgvSW5wdXRTb3VyY2U7TG9yZy94bWwvc2F4L2hlbHBlcnMvRGVmYXVsdEhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3BlcnR5KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL3BhcnNlcnMvU0FYUGFyc2VyRmFjdG9yeSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmVhdHVyZShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjaGVtYSgpTGphdmF4L3htbC92YWxpZGF0aW9uL1NjaGVtYTsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNOYW1lc3BhY2VBd2FyZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVmFsaWRhdGluZygpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzWEluY2x1ZGVBd2FyZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKClMamF2YXgveG1sL3BhcnNlcnMvU0FYUGFyc2VyRmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylMamF2YXgveG1sL3BhcnNlcnMvU0FYUGFyc2VyRmFjdG9yeTsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3U0FYUGFyc2VyKClMamF2YXgveG1sL3BhcnNlcnMvU0FYUGFyc2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZlYXR1cmUoTGphdmEvbGFuZy9TdHJpbmc7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TmFtZXNwYWNlQXdhcmUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U2NoZW1hKExqYXZheC94bWwvdmFsaWRhdGlvbi9TY2hlbWE7KVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmFsaWRhdGluZyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRYSW5jbHVkZUF3YXJlKFopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vRXJyb3JMaXN0ZW5lciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXJyb3IoTGphdmF4L3htbC90cmFuc2Zvcm0vVHJhbnNmb3JtZXJFeGNlcHRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmYXRhbEVycm9yKExqYXZheC94bWwvdHJhbnNmb3JtL1RyYW5zZm9ybWVyRXhjZXB0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id2FybmluZyhMamF2YXgveG1sL3RyYW5zZm9ybS9UcmFuc2Zvcm1lckV4Y2VwdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vT3V0cHV0S2V5cyIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJDREFUQV9TRUNUSU9OX0VMRU1FTlRTIi8+Ci0JCTxmaWVsZCBuYW1lPSJET0NUWVBFX1BVQkxJQyIvPgotCQk8ZmllbGQgbmFtZT0iRE9DVFlQRV9TWVNURU0iLz4KLQkJPGZpZWxkIG5hbWU9IkVOQ09ESU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTkRFTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FRElBX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEhPRCIvPgotCQk8ZmllbGQgbmFtZT0iT01JVF9YTUxfREVDTEFSQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNUQU5EQUxPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlZFUlNJT04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwvdHJhbnNmb3JtL1Jlc3VsdCIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lzdGVtSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN5c3RlbUlkKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJQSV9ESVNBQkxFX09VVFBVVF9FU0NBUElORyIvPgotCQk8ZmllbGQgbmFtZT0iUElfRU5BQkxFX09VVFBVVF9FU0NBUElORyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vU291cmNlIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1JZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3lzdGVtSWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwvdHJhbnNmb3JtL1NvdXJjZUxvY2F0b3IiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbHVtbk51bWJlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmVOdW1iZXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQdWJsaWNJZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lzdGVtSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vVGVtcGxhdGVzIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRwdXRQcm9wZXJ0aWVzKClMamF2YS91dGlsL1Byb3BlcnRpZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3VHJhbnNmb3JtZXIoKUxqYXZheC94bWwvdHJhbnNmb3JtL1RyYW5zZm9ybWVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vVHJhbnNmb3JtZXIiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyUGFyYW1ldGVycygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVycm9yTGlzdGVuZXIoKUxqYXZheC94bWwvdHJhbnNmb3JtL0Vycm9yTGlzdGVuZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3V0cHV0UHJvcGVydGllcygpTGphdmEvdXRpbC9Qcm9wZXJ0aWVzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE91dHB1dFByb3BlcnR5KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVSSVJlc29sdmVyKClMamF2YXgveG1sL3RyYW5zZm9ybS9VUklSZXNvbHZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVycm9yTGlzdGVuZXIoTGphdmF4L3htbC90cmFuc2Zvcm0vRXJyb3JMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE91dHB1dFByb3BlcnRpZXMoTGphdmEvdXRpbC9Qcm9wZXJ0aWVzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3V0cHV0UHJvcGVydHkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQYXJhbWV0ZXIoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVUklSZXNvbHZlcihMamF2YXgveG1sL3RyYW5zZm9ybS9VUklSZXNvbHZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InRyYW5zZm9ybShMamF2YXgveG1sL3RyYW5zZm9ybS9Tb3VyY2U7TGphdmF4L3htbC90cmFuc2Zvcm0vUmVzdWx0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL3RyYW5zZm9ybS9UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24iIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YXgveG1sL3RyYW5zZm9ybS9UcmFuc2Zvcm1lckV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YXgveG1sL3RyYW5zZm9ybS9Tb3VyY2VMb2NhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZheC94bWwvdHJhbnNmb3JtL1NvdXJjZUxvY2F0b3I7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwvdHJhbnNmb3JtL1RyYW5zZm9ybWVyRXhjZXB0aW9uIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmF4L3htbC90cmFuc2Zvcm0vU291cmNlTG9jYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YXgveG1sL3RyYW5zZm9ybS9Tb3VyY2VMb2NhdG9yO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhjZXB0aW9uKClMamF2YS9sYW5nL1Rocm93YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhdGlvbkFzU3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhdG9yKClMamF2YXgveG1sL3RyYW5zZm9ybS9Tb3VyY2VMb2NhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1lc3NhZ2VBbmRMb2NhdGlvbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9jYXRvcihMamF2YXgveG1sL3RyYW5zZm9ybS9Tb3VyY2VMb2NhdG9yOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL3RyYW5zZm9ybS9UcmFuc2Zvcm1lckZhY3RvcnkiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFzc29jaWF0ZWRTdHlsZXNoZWV0KExqYXZheC94bWwvdHJhbnNmb3JtL1NvdXJjZTtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmF4L3htbC90cmFuc2Zvcm0vU291cmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXJyb3JMaXN0ZW5lcigpTGphdmF4L3htbC90cmFuc2Zvcm0vRXJyb3JMaXN0ZW5lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGZWF0dXJlKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VVJJUmVzb2x2ZXIoKUxqYXZheC94bWwvdHJhbnNmb3JtL1VSSVJlc29sdmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKClMamF2YXgveG1sL3RyYW5zZm9ybS9UcmFuc2Zvcm1lckZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9DbGFzc0xvYWRlcjspTGphdmF4L3htbC90cmFuc2Zvcm0vVHJhbnNmb3JtZXJGYWN0b3J5OyIgc2luY2U9IjkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdUZW1wbGF0ZXMoTGphdmF4L3htbC90cmFuc2Zvcm0vU291cmNlOylMamF2YXgveG1sL3RyYW5zZm9ybS9UZW1wbGF0ZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3VHJhbnNmb3JtZXIoKUxqYXZheC94bWwvdHJhbnNmb3JtL1RyYW5zZm9ybWVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1RyYW5zZm9ybWVyKExqYXZheC94bWwvdHJhbnNmb3JtL1NvdXJjZTspTGphdmF4L3htbC90cmFuc2Zvcm0vVHJhbnNmb3JtZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXR0cmlidXRlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXJyb3JMaXN0ZW5lcihMamF2YXgveG1sL3RyYW5zZm9ybS9FcnJvckxpc3RlbmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmVhdHVyZShMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVUklSZXNvbHZlcihMamF2YXgveG1sL3RyYW5zZm9ybS9VUklSZXNvbHZlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FcnJvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0V4Y2VwdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0V4Y2VwdGlvbjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4Y2VwdGlvbigpTGphdmEvbGFuZy9FeGNlcHRpb247Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL3RyYW5zZm9ybS9VUklSZXNvbHZlciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmF4L3htbC90cmFuc2Zvcm0vU291cmNlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vZG9tL0RPTUxvY2F0b3IiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC94bWwvdHJhbnNmb3JtL1NvdXJjZUxvY2F0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPcmlnaW5hdGluZ05vZGUoKUxvcmcvdzNjL2RvbS9Ob2RlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vZG9tL0RPTVJlc3VsdCIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vUmVzdWx0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvdzNjL2RvbS9Ob2RlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvdzNjL2RvbS9Ob2RlO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvdzNjL2RvbS9Ob2RlO0xvcmcvdzNjL2RvbS9Ob2RlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvdzNjL2RvbS9Ob2RlO0xvcmcvdzNjL2RvbS9Ob2RlO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmV4dFNpYmxpbmcoKUxvcmcvdzNjL2RvbS9Ob2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5vZGUoKUxvcmcvdzNjL2RvbS9Ob2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5leHRTaWJsaW5nKExvcmcvdzNjL2RvbS9Ob2RlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Tm9kZShMb3JnL3czYy9kb20vTm9kZTspViIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vZG9tL0RPTVNvdXJjZSIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vU291cmNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvdzNjL2RvbS9Ob2RlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvdzNjL2RvbS9Ob2RlO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Tm9kZSgpTG9yZy93M2MvZG9tL05vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Tm9kZShMb3JnL3czYy9kb20vTm9kZTspViIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vc2F4L1NBWFJlc3VsdCIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vUmVzdWx0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcveG1sL3NheC9Db250ZW50SGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhhbmRsZXIoKUxvcmcveG1sL3NheC9Db250ZW50SGFuZGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZXhpY2FsSGFuZGxlcigpTG9yZy94bWwvc2F4L2V4dC9MZXhpY2FsSGFuZGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIYW5kbGVyKExvcmcveG1sL3NheC9Db250ZW50SGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExleGljYWxIYW5kbGVyKExvcmcveG1sL3NheC9leHQvTGV4aWNhbEhhbmRsZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwvdHJhbnNmb3JtL3NheC9TQVhTb3VyY2UiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC94bWwvdHJhbnNmb3JtL1NvdXJjZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL3htbC9zYXgvSW5wdXRTb3VyY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy94bWwvc2F4L1hNTFJlYWRlcjtMb3JnL3htbC9zYXgvSW5wdXRTb3VyY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dFNvdXJjZSgpTG9yZy94bWwvc2F4L0lucHV0U291cmNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFhNTFJlYWRlcigpTG9yZy94bWwvc2F4L1hNTFJlYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnB1dFNvdXJjZShMb3JnL3htbC9zYXgvSW5wdXRTb3VyY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRYTUxSZWFkZXIoTG9yZy94bWwvc2F4L1hNTFJlYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNvdXJjZVRvSW5wdXRTb3VyY2UoTGphdmF4L3htbC90cmFuc2Zvcm0vU291cmNlOylMb3JnL3htbC9zYXgvSW5wdXRTb3VyY2U7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL3RyYW5zZm9ybS9zYXgvU0FYVHJhbnNmb3JtZXJGYWN0b3J5IiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vVHJhbnNmb3JtZXJGYWN0b3J5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3VGVtcGxhdGVzSGFuZGxlcigpTGphdmF4L3htbC90cmFuc2Zvcm0vc2F4L1RlbXBsYXRlc0hhbmRsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3VHJhbnNmb3JtZXJIYW5kbGVyKClMamF2YXgveG1sL3RyYW5zZm9ybS9zYXgvVHJhbnNmb3JtZXJIYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1RyYW5zZm9ybWVySGFuZGxlcihMamF2YXgveG1sL3RyYW5zZm9ybS9Tb3VyY2U7KUxqYXZheC94bWwvdHJhbnNmb3JtL3NheC9UcmFuc2Zvcm1lckhhbmRsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3VHJhbnNmb3JtZXJIYW5kbGVyKExqYXZheC94bWwvdHJhbnNmb3JtL1RlbXBsYXRlczspTGphdmF4L3htbC90cmFuc2Zvcm0vc2F4L1RyYW5zZm9ybWVySGFuZGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdYTUxGaWx0ZXIoTGphdmF4L3htbC90cmFuc2Zvcm0vU291cmNlOylMb3JnL3htbC9zYXgvWE1MRmlsdGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1hNTEZpbHRlcihMamF2YXgveG1sL3RyYW5zZm9ybS9UZW1wbGF0ZXM7KUxvcmcveG1sL3NheC9YTUxGaWx0ZXI7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1hNTEZJTFRFUiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vc2F4L1RlbXBsYXRlc0hhbmRsZXIiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcveG1sL3NheC9Db250ZW50SGFuZGxlciIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5c3RlbUlkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZW1wbGF0ZXMoKUxqYXZheC94bWwvdHJhbnNmb3JtL1RlbXBsYXRlczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTeXN0ZW1JZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC90cmFuc2Zvcm0vc2F4L1RyYW5zZm9ybWVySGFuZGxlciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L0NvbnRlbnRIYW5kbGVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L0RUREhhbmRsZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3htbC9zYXgvZXh0L0xleGljYWxIYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lzdGVtSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRyYW5zZm9ybWVyKClMamF2YXgveG1sL3RyYW5zZm9ybS9UcmFuc2Zvcm1lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXN1bHQoTGphdmF4L3htbC90cmFuc2Zvcm0vUmVzdWx0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3lzdGVtSWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwvdHJhbnNmb3JtL3N0cmVhbS9TdHJlYW1SZXN1bHQiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC94bWwvdHJhbnNmb3JtL1Jlc3VsdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL091dHB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9Xcml0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPdXRwdXRTdHJlYW0oKUxqYXZhL2lvL091dHB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXcml0ZXIoKUxqYXZhL2lvL1dyaXRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRPdXRwdXRTdHJlYW0oTGphdmEvaW8vT3V0cHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3lzdGVtSWQoTGphdmEvaW8vRmlsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFdyaXRlcihMamF2YS9pby9Xcml0ZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwvdHJhbnNmb3JtL3N0cmVhbS9TdHJlYW1Tb3VyY2UiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZheC94bWwvdHJhbnNmb3JtL1NvdXJjZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9GaWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL0lucHV0U3RyZWFtO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1JlYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9SZWFkZXI7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dFN0cmVhbSgpTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHVibGljSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlYWRlcigpTGphdmEvaW8vUmVhZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldElucHV0U3RyZWFtKExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHVibGljSWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWFkZXIoTGphdmEvaW8vUmVhZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3lzdGVtSWQoTGphdmEvaW8vRmlsZTspViIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC92YWxpZGF0aW9uL1NjaGVtYSIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3VmFsaWRhdG9yKClMamF2YXgveG1sL3ZhbGlkYXRpb24vVmFsaWRhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1ZhbGlkYXRvckhhbmRsZXIoKUxqYXZheC94bWwvdmFsaWRhdGlvbi9WYWxpZGF0b3JIYW5kbGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC92YWxpZGF0aW9uL1NjaGVtYUZhY3RvcnkiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVycm9ySGFuZGxlcigpTG9yZy94bWwvc2F4L0Vycm9ySGFuZGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGZWF0dXJlKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvcGVydHkoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc291cmNlUmVzb2x2ZXIoKUxvcmcvdzNjL2RvbS9scy9MU1Jlc291cmNlUmVzb2x2ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTY2hlbWFMYW5ndWFnZVN1cHBvcnRlZChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YXgveG1sL3ZhbGlkYXRpb24vU2NoZW1hRmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylMamF2YXgveG1sL3ZhbGlkYXRpb24vU2NoZW1hRmFjdG9yeTsiIHNpbmNlPSI5Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3U2NoZW1hKClMamF2YXgveG1sL3ZhbGlkYXRpb24vU2NoZW1hOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1NjaGVtYShMamF2YS9pby9GaWxlOylMamF2YXgveG1sL3ZhbGlkYXRpb24vU2NoZW1hOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1NjaGVtYShMamF2YS9uZXQvVVJMOylMamF2YXgveG1sL3ZhbGlkYXRpb24vU2NoZW1hOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1NjaGVtYShMamF2YXgveG1sL3RyYW5zZm9ybS9Tb3VyY2U7KUxqYXZheC94bWwvdmFsaWRhdGlvbi9TY2hlbWE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3U2NoZW1hKFtMamF2YXgveG1sL3RyYW5zZm9ybS9Tb3VyY2U7KUxqYXZheC94bWwvdmFsaWRhdGlvbi9TY2hlbWE7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXJyb3JIYW5kbGVyKExvcmcveG1sL3NheC9FcnJvckhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGZWF0dXJlKExqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3BlcnR5KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVzb3VyY2VSZXNvbHZlcihMb3JnL3czYy9kb20vbHMvTFNSZXNvdXJjZVJlc29sdmVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL3ZhbGlkYXRpb24vU2NoZW1hRmFjdG9yeUxvYWRlciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3RmFjdG9yeShMamF2YS9sYW5nL1N0cmluZzspTGphdmF4L3htbC92YWxpZGF0aW9uL1NjaGVtYUZhY3Rvcnk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL3ZhbGlkYXRpb24vVHlwZUluZm9Qcm92aWRlciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlVHlwZUluZm8oSSlMb3JnL3czYy9kb20vVHlwZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RWxlbWVudFR5cGVJbmZvKClMb3JnL3czYy9kb20vVHlwZUluZm87Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJZEF0dHJpYnV0ZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NwZWNpZmllZChJKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwvdmFsaWRhdGlvbi9WYWxpZGF0b3IiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVycm9ySGFuZGxlcigpTG9yZy94bWwvc2F4L0Vycm9ySGFuZGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGZWF0dXJlKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvcGVydHkoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc291cmNlUmVzb2x2ZXIoKUxvcmcvdzNjL2RvbS9scy9MU1Jlc291cmNlUmVzb2x2ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFcnJvckhhbmRsZXIoTG9yZy94bWwvc2F4L0Vycm9ySGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZlYXR1cmUoTGphdmEvbGFuZy9TdHJpbmc7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvcGVydHkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXNvdXJjZVJlc29sdmVyKExvcmcvdzNjL2RvbS9scy9MU1Jlc291cmNlUmVzb2x2ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWxpZGF0ZShMamF2YXgveG1sL3RyYW5zZm9ybS9Tb3VyY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWxpZGF0ZShMamF2YXgveG1sL3RyYW5zZm9ybS9Tb3VyY2U7TGphdmF4L3htbC90cmFuc2Zvcm0vUmVzdWx0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL3ZhbGlkYXRpb24vVmFsaWRhdG9ySGFuZGxlciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L0NvbnRlbnRIYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29udGVudEhhbmRsZXIoKUxvcmcveG1sL3NheC9Db250ZW50SGFuZGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFcnJvckhhbmRsZXIoKUxvcmcveG1sL3NheC9FcnJvckhhbmRsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmVhdHVyZShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3BlcnR5KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXNvdXJjZVJlc29sdmVyKClMb3JnL3czYy9kb20vbHMvTFNSZXNvdXJjZVJlc29sdmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGVJbmZvUHJvdmlkZXIoKUxqYXZheC94bWwvdmFsaWRhdGlvbi9UeXBlSW5mb1Byb3ZpZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRIYW5kbGVyKExvcmcveG1sL3NheC9Db250ZW50SGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVycm9ySGFuZGxlcihMb3JnL3htbC9zYXgvRXJyb3JIYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmVhdHVyZShMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9wZXJ0eShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlc291cmNlUmVzb2x2ZXIoTG9yZy93M2MvZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC94cGF0aC9YUGF0aCIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGlsZShMamF2YS9sYW5nL1N0cmluZzspTGphdmF4L3htbC94cGF0aC9YUGF0aEV4cHJlc3Npb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXZhbHVhdGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImV2YWx1YXRlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJldmFsdWF0ZShMamF2YS9sYW5nL1N0cmluZztMb3JnL3htbC9zYXgvSW5wdXRTb3VyY2U7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImV2YWx1YXRlKExqYXZhL2xhbmcvU3RyaW5nO0xvcmcveG1sL3NheC9JbnB1dFNvdXJjZTtMamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZTspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZXNwYWNlQ29udGV4dCgpTGphdmF4L3htbC9uYW1lc3BhY2UvTmFtZXNwYWNlQ29udGV4dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRYUGF0aEZ1bmN0aW9uUmVzb2x2ZXIoKUxqYXZheC94bWwveHBhdGgvWFBhdGhGdW5jdGlvblJlc29sdmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFhQYXRoVmFyaWFibGVSZXNvbHZlcigpTGphdmF4L3htbC94cGF0aC9YUGF0aFZhcmlhYmxlUmVzb2x2ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYW1lc3BhY2VDb250ZXh0KExqYXZheC94bWwvbmFtZXNwYWNlL05hbWVzcGFjZUNvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRYUGF0aEZ1bmN0aW9uUmVzb2x2ZXIoTGphdmF4L3htbC94cGF0aC9YUGF0aEZ1bmN0aW9uUmVzb2x2ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRYUGF0aFZhcmlhYmxlUmVzb2x2ZXIoTGphdmF4L3htbC94cGF0aC9YUGF0aFZhcmlhYmxlUmVzb2x2ZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwveHBhdGgvWFBhdGhDb25zdGFudHMiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iQk9PTEVBTiIvPgotCQk8ZmllbGQgbmFtZT0iRE9NX09CSkVDVF9NT0RFTCIvPgotCQk8ZmllbGQgbmFtZT0iTk9ERSIvPgotCQk8ZmllbGQgbmFtZT0iTk9ERVNFVCIvPgotCQk8ZmllbGQgbmFtZT0iTlVNQkVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVFJJTkciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwveHBhdGgvWFBhdGhFeGNlcHRpb24iIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC94cGF0aC9YUGF0aEV4cHJlc3Npb24iIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImV2YWx1YXRlKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJldmFsdWF0ZShMamF2YS9sYW5nL09iamVjdDtMamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZTspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXZhbHVhdGUoTG9yZy94bWwvc2F4L0lucHV0U291cmNlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJldmFsdWF0ZShMb3JnL3htbC9zYXgvSW5wdXRTb3VyY2U7TGphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWU7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC94cGF0aC9YUGF0aEV4cHJlc3Npb25FeGNlcHRpb24iIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YXgveG1sL3hwYXRoL1hQYXRoRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL3hwYXRoL1hQYXRoRmFjdG9yeSIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RmVhdHVyZShMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT2JqZWN0TW9kZWxTdXBwb3J0ZWQoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZSgpTGphdmF4L3htbC94cGF0aC9YUGF0aEZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SW5zdGFuY2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZheC94bWwveHBhdGgvWFBhdGhGYWN0b3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KUxqYXZheC94bWwveHBhdGgvWFBhdGhGYWN0b3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1hQYXRoKClMamF2YXgveG1sL3hwYXRoL1hQYXRoOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZlYXR1cmUoTGphdmEvbGFuZy9TdHJpbmc7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0WFBhdGhGdW5jdGlvblJlc29sdmVyKExqYXZheC94bWwveHBhdGgvWFBhdGhGdW5jdGlvblJlc29sdmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0WFBhdGhWYXJpYWJsZVJlc29sdmVyKExqYXZheC94bWwveHBhdGgvWFBhdGhWYXJpYWJsZVJlc29sdmVyOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX09CSkVDVF9NT0RFTF9VUkkiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfUFJPUEVSVFlfTkFNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC94cGF0aC9YUGF0aEZhY3RvcnlDb25maWd1cmF0aW9uRXhjZXB0aW9uIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmF4L3htbC94cGF0aC9YUGF0aEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC94cGF0aC9YUGF0aEZ1bmN0aW9uIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJldmFsdWF0ZShMamF2YS91dGlsL0xpc3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9ImphdmF4L3htbC94cGF0aC9YUGF0aEZ1bmN0aW9uRXhjZXB0aW9uIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmF4L3htbC94cGF0aC9YUGF0aEV4cHJlc3Npb25FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqYXZheC94bWwveHBhdGgvWFBhdGhGdW5jdGlvblJlc29sdmVyIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlRnVuY3Rpb24oTGphdmF4L3htbC9uYW1lc3BhY2UvUU5hbWU7SSlMamF2YXgveG1sL3hwYXRoL1hQYXRoRnVuY3Rpb247Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0iamF2YXgveG1sL3hwYXRoL1hQYXRoVmFyaWFibGVSZXNvbHZlciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZVZhcmlhYmxlKExqYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqdW5pdC9mcmFtZXdvcmsvQXNzZXJ0IiBzaW5jZT0iMSIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0RXF1YWxzKEJCKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRFcXVhbHMoQ0MpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVxdWFscyhEREQpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVxdWFscyhGRkYpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVxdWFscyhJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0RXF1YWxzKEpKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRFcXVhbHMoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRFcXVhbHMoTGphdmEvbGFuZy9TdHJpbmc7QkIpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVxdWFscyhMamF2YS9sYW5nL1N0cmluZztDQylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0RXF1YWxzKExqYXZhL2xhbmcvU3RyaW5nO0RERClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0RXF1YWxzKExqYXZhL2xhbmcvU3RyaW5nO0ZGRilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0RXF1YWxzKExqYXZhL2xhbmcvU3RyaW5nO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRFcXVhbHMoTGphdmEvbGFuZy9TdHJpbmc7SkopViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVxdWFscyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVxdWFscyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVxdWFscyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVxdWFscyhMamF2YS9sYW5nL1N0cmluZztTUylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0RXF1YWxzKExqYXZhL2xhbmcvU3RyaW5nO1paKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRFcXVhbHMoU1MpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEVxdWFscyhaWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0RmFsc2UoTGphdmEvbGFuZy9TdHJpbmc7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0RmFsc2UoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0Tm90TnVsbChMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydE5vdE51bGwoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnROb3RTYW1lKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0Tm90U2FtZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydE51bGwoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnROdWxsKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0U2FtZShMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydFNhbWUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRUcnVlKExqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydFRydWUoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmFpbCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZhaWwoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmYWlsTm90RXF1YWxzKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmYWlsTm90U2FtZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspViIgc2luY2U9IjE2Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZmFpbFNhbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqdW5pdC9mcmFtZXdvcmsvQXNzZXJ0aW9uRmFpbGVkRXJyb3IiIHNpbmNlPSIxIiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9Bc3NlcnRpb25FcnJvciIgc2luY2U9IjE2Ii8+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FcnJvciIgcmVtb3ZlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqdW5pdC9mcmFtZXdvcmsvQ29tcGFyaXNvbkZhaWx1cmUiIHNpbmNlPSIxIiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9Imp1bml0L2ZyYW1ld29yay9Bc3NlcnRpb25GYWlsZWRFcnJvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFjdHVhbCgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFeHBlY3RlZCgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iMTYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqdW5pdC9mcmFtZXdvcmsvUHJvdGVjdGFibGUiIHNpbmNlPSIxIiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm90ZWN0KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ianVuaXQvZnJhbWV3b3JrL1Rlc3QiIHNpbmNlPSIxIiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3VudFRlc3RDYXNlcygpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJ1bihManVuaXQvZnJhbWV3b3JrL1Rlc3RSZXN1bHQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqdW5pdC9mcmFtZXdvcmsvVGVzdENhc2UiIHNpbmNlPSIxIiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9Imp1bml0L2ZyYW1ld29yay9Bc3NlcnQiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ianVuaXQvZnJhbWV3b3JrL1Rlc3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVSZXN1bHQoKUxqdW5pdC9mcmFtZXdvcmsvVGVzdFJlc3VsdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW4oKUxqdW5pdC9mcmFtZXdvcmsvVGVzdFJlc3VsdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5CYXJlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icnVuVGVzdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVcCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InRlYXJEb3duKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ianVuaXQvZnJhbWV3b3JrL1Rlc3RGYWlsdXJlIiBzaW5jZT0iMSIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqdW5pdC9mcmFtZXdvcmsvVGVzdDtMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImV4Y2VwdGlvbk1lc3NhZ2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZhaWxlZFRlc3QoKUxqdW5pdC9mcmFtZXdvcmsvVGVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0ZhaWx1cmUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0aHJvd25FeGNlcHRpb24oKUxqYXZhL2xhbmcvVGhyb3dhYmxlOyIvPgotCQk8bWV0aG9kIG5hbWU9InRyYWNlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9ImZGYWlsZWRUZXN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJmVGhyb3duRXhjZXB0aW9uIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ianVuaXQvZnJhbWV3b3JrL1Rlc3RMaXN0ZW5lciIgc2luY2U9IjEiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEVycm9yKExqdW5pdC9mcmFtZXdvcmsvVGVzdDtMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEZhaWx1cmUoTGp1bml0L2ZyYW1ld29yay9UZXN0O0xqdW5pdC9mcmFtZXdvcmsvQXNzZXJ0aW9uRmFpbGVkRXJyb3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRUZXN0KExqdW5pdC9mcmFtZXdvcmsvVGVzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0VGVzdChManVuaXQvZnJhbWV3b3JrL1Rlc3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqdW5pdC9mcmFtZXdvcmsvVGVzdFJlc3VsdCIgc2luY2U9IjEiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEVycm9yKExqdW5pdC9mcmFtZXdvcmsvVGVzdDtMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEZhaWx1cmUoTGp1bml0L2ZyYW1ld29yay9UZXN0O0xqdW5pdC9mcmFtZXdvcmsvQXNzZXJ0aW9uRmFpbGVkRXJyb3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRMaXN0ZW5lcihManVuaXQvZnJhbWV3b3JrL1Rlc3RMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZFRlc3QoTGp1bml0L2ZyYW1ld29yay9UZXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXJyb3JDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImVycm9ycygpTGphdmEvdXRpbC9FbnVtZXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmYWlsdXJlQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmYWlsdXJlcygpTGphdmEvdXRpbC9FbnVtZXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVMaXN0ZW5lcihManVuaXQvZnJhbWV3b3JrL1Rlc3RMaXN0ZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InJ1bihManVuaXQvZnJhbWV3b3JrL1Rlc3RDYXNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icnVuQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5Qcm90ZWN0ZWQoTGp1bml0L2ZyYW1ld29yay9UZXN0O0xqdW5pdC9mcmFtZXdvcmsvUHJvdGVjdGFibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG91bGRTdG9wKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRUZXN0KExqdW5pdC9mcmFtZXdvcmsvVGVzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0b3AoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3YXNTdWNjZXNzZnVsKClaIi8+Ci0JCTxmaWVsZCBuYW1lPSJmRXJyb3JzIi8+Ci0JCTxmaWVsZCBuYW1lPSJmRmFpbHVyZXMiLz4KLQkJPGZpZWxkIG5hbWU9ImZMaXN0ZW5lcnMiLz4KLQkJPGZpZWxkIG5hbWU9ImZSdW5UZXN0cyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Imp1bml0L2ZyYW1ld29yay9UZXN0U3VpdGUiIHNpbmNlPSIxIiByZW1vdmVkPSIyOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ianVuaXQvZnJhbWV3b3JrL1Rlc3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9DbGFzczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMamF2YS9sYW5nL0NsYXNzOylWIiBzaW5jZT0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0xqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7KVYiIHNpbmNlPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZFRlc3QoTGp1bml0L2ZyYW1ld29yay9UZXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkVGVzdFN1aXRlKExqYXZhL2xhbmcvQ2xhc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUZXN0KExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7KUxqdW5pdC9mcmFtZXdvcmsvVGVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUZXN0Q29uc3RydWN0b3IoTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InJ1blRlc3QoTGp1bml0L2ZyYW1ld29yay9UZXN0O0xqdW5pdC9mcmFtZXdvcmsvVGVzdFJlc3VsdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0QXQoSSlManVuaXQvZnJhbWV3b3JrL1Rlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idGVzdENvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0idGVzdHMoKUxqYXZhL3V0aWwvRW51bWVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0id2FybmluZyhMamF2YS9sYW5nL1N0cmluZzspTGp1bml0L2ZyYW1ld29yay9UZXN0OyIgc2luY2U9IjE2Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ianVuaXQvcnVubmVyL0Jhc2VUZXN0UnVubmVyIiBzaW5jZT0iMSIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Imp1bml0L2ZyYW1ld29yay9UZXN0TGlzdGVuZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhclN0YXR1cygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVsYXBzZWRUaW1lQXNTdHJpbmcoSilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJleHRyYWN0Q2xhc3NOYW1lKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWx0ZXJlZFRyYWNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWx0ZXJlZFRyYWNlKExqYXZhL2xhbmcvVGhyb3dhYmxlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2FkZXIoKUxqdW5pdC9ydW5uZXIvVGVzdFN1aXRlTG9hZGVyOyIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVmZXJlbmNlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVmZXJlbmNlKExqYXZhL2xhbmcvU3RyaW5nO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWZlcmVuY2VzKClMamF2YS91dGlsL1Byb3BlcnRpZXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGVzdChMamF2YS9sYW5nL1N0cmluZzspTGp1bml0L2ZyYW1ld29yay9UZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImluVkFKYXZhKClaIiBkZXByZWNhdGVkPSIxNiIvPgotCQk8bWV0aG9kIG5hbWU9ImxvYWRTdWl0ZUNsYXNzKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0NsYXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9InByb2Nlc3NBcmd1bWVudHMoW0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJydW5GYWlsZWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzYXZlUHJlZmVyZW5jZXMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2FkaW5nKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByZWZlcmVuY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmVmZXJlbmNlcyhMamF2YS91dGlsL1Byb3BlcnRpZXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaG93U3RhY2tSYXcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0RW5kZWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0RmFpbGVkKElManVuaXQvZnJhbWV3b3JrL1Rlc3Q7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0ZXN0U3RhcnRlZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InRydW5jYXRlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1c2VSZWxvYWRpbmdUZXN0U3VpdGVMb2FkZXIoKVoiLz4KLQkJPGZpZWxkIG5hbWU9IlNVSVRFX01FVEhPRE5BTUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqdW5pdC9ydW5uZXIvVGVzdFN1aXRlTG9hZGVyIiBzaW5jZT0iMSIgcmVtb3ZlZD0iMjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9DbGFzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWxvYWQoTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9DbGFzczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJqdW5pdC9ydW5uZXIvVmVyc2lvbiIgc2luY2U9IjEiIHJlbW92ZWQ9IjI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2NvbW1vbnMvbG9nZ2luZy9Mb2ciIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVidWcoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWJ1ZyhMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVycm9yKExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXJyb3IoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmYXRhbChMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZhdGFsKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5mbyhMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImluZm8oTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RlYnVnRW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRXJyb3JFbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGYXRhbEVuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0luZm9FbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUcmFjZUVuYWJsZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1dhcm5FbmFibGVkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0idHJhY2UoTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0cmFjZShMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9Indhcm4oTGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3YXJuKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0Nvbm5lY3Rpb25DbG9zZWRFeGNlcHRpb24iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0lPRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0Nvbm5lY3Rpb25SZXVzZVN0cmF0ZWd5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImtlZXBBbGl2ZShMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZTtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0Zvcm1hdHRlZEhlYWRlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0hlYWRlciIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ1ZmZlcigpTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZVBvcygpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IZWFkZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RWxlbWVudHMoKVtMb3JnL2FwYWNoZS9odHRwL0hlYWRlckVsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IZWFkZXJFbGVtZW50IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtZXRlcihJKUxvcmcvYXBhY2hlL2h0dHAvTmFtZVZhbHVlUGFpcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXJCeU5hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvYXBhY2hlL2h0dHAvTmFtZVZhbHVlUGFpcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXJDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtZXRlcnMoKVtMb3JnL2FwYWNoZS9odHRwL05hbWVWYWx1ZVBhaXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IZWFkZXJFbGVtZW50SXRlcmF0b3IiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9JdGVyYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRFbGVtZW50KClMb3JnL2FwYWNoZS9odHRwL0hlYWRlckVsZW1lbnQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0hlYWRlckl0ZXJhdG9yIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvSXRlcmF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0SGVhZGVyKClMb3JnL2FwYWNoZS9odHRwL0hlYWRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cENsaWVudENvbm5lY3Rpb24iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwQ29ubmVjdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9ImZsdXNoKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZXNwb25zZUF2YWlsYWJsZShJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWNlaXZlUmVzcG9uc2VFbnRpdHkoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWNlaXZlUmVzcG9uc2VIZWFkZXIoKUxvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNlbmRSZXF1ZXN0RW50aXR5KExvcmcvYXBhY2hlL2h0dHAvSHR0cEVudGl0eUVuY2xvc2luZ1JlcXVlc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kUmVxdWVzdEhlYWRlcihMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBDb25uZWN0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0cmljcygpTG9yZy9hcGFjaGUvaHR0cC9IdHRwQ29ubmVjdGlvbk1ldHJpY3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U29ja2V0VGltZW91dCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzT3BlbigpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3RhbGUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTb2NrZXRUaW1lb3V0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNodXRkb3duKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBDb25uZWN0aW9uTWV0cmljcyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNZXRyaWMoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlY2VpdmVkQnl0ZXNDb3VudCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVlc3RDb3VudCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3BvbnNlQ291bnQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTZW50Qnl0ZXNDb3VudCgpSiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBFbnRpdHkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29uc3VtZUNvbnRlbnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50KClMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50RW5jb2RpbmcoKUxvcmcvYXBhY2hlL2h0dHAvSGVhZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnRMZW5ndGgoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50VHlwZSgpTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDaHVua2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZXBlYXRhYmxlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTdHJlYW1pbmcoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZVRvKExqYXZhL2lvL091dHB1dFN0cmVhbTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwRW50aXR5RW5jbG9zaW5nUmVxdWVzdCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhwZWN0Q29udGludWUoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbnRpdHkoKUxvcmcvYXBhY2hlL2h0dHAvSHR0cEVudGl0eTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbnRpdHkoTG9yZy9hcGFjaGUvaHR0cC9IdHRwRW50aXR5OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBFeGNlcHRpb24iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBIb3N0IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvc3ROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3J0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NoZW1lTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9Ib3N0U3RyaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1VSSSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1NDSEVNRV9OQU1FIi8+Ci0JCTxmaWVsZCBuYW1lPSJob3N0bmFtZSIvPgotCQk8ZmllbGQgbmFtZT0ibGNIb3N0bmFtZSIvPgotCQk8ZmllbGQgbmFtZT0icG9ydCIvPgotCQk8ZmllbGQgbmFtZT0ic2NoZW1lTmFtZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwSW5ldENvbm5lY3Rpb24iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwQ29ubmVjdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsQWRkcmVzcygpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsUG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlbW90ZUFkZHJlc3MoKUxqYXZhL25ldC9JbmV0QWRkcmVzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZW1vdGVQb3J0KClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBNZXNzYWdlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEhlYWRlcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEhlYWRlcihMb3JnL2FwYWNoZS9odHRwL0hlYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zSGVhZGVyKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QWxsSGVhZGVycygpW0xvcmcvYXBhY2hlL2h0dHAvSGVhZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpcnN0SGVhZGVyKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2FwYWNoZS9odHRwL0hlYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWFkZXJzKExqYXZhL2xhbmcvU3RyaW5nOylbTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFzdEhlYWRlcihMamF2YS9sYW5nL1N0cmluZzspTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1zKClMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3RvY29sVmVyc2lvbigpTG9yZy9hcGFjaGUvaHR0cC9Qcm90b2NvbFZlcnNpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGVhZGVySXRlcmF0b3IoKUxvcmcvYXBhY2hlL2h0dHAvSGVhZGVySXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGVhZGVySXRlcmF0b3IoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvYXBhY2hlL2h0dHAvSGVhZGVySXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlSGVhZGVyKExvcmcvYXBhY2hlL2h0dHAvSGVhZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlSGVhZGVycyhMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhlYWRlcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhlYWRlcihMb3JnL2FwYWNoZS9odHRwL0hlYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhlYWRlcnMoW0xvcmcvYXBhY2hlL2h0dHAvSGVhZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyYW1zKExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3QiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwTWVzc2FnZSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVlc3RMaW5lKClMb3JnL2FwYWNoZS9odHRwL1JlcXVlc3RMaW5lOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdEZhY3RvcnkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SHR0cFJlcXVlc3QoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SHR0cFJlcXVlc3QoTG9yZy9hcGFjaGUvaHR0cC9SZXF1ZXN0TGluZTspTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3RJbnRlcmNlcHRvciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm9jZXNzKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3Q7TG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2UiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwTWVzc2FnZSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudGl0eSgpTG9yZy9hcGFjaGUvaHR0cC9IdHRwRW50aXR5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsZSgpTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdHVzTGluZSgpTG9yZy9hcGFjaGUvaHR0cC9TdGF0dXNMaW5lOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVudGl0eShMb3JnL2FwYWNoZS9odHRwL0h0dHBFbnRpdHk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2NhbGUoTGphdmEvdXRpbC9Mb2NhbGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWFzb25QaHJhc2UoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGF0dXNDb2RlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXR1c0xpbmUoTG9yZy9hcGFjaGUvaHR0cC9Qcm90b2NvbFZlcnNpb247SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RhdHVzTGluZShMb3JnL2FwYWNoZS9odHRwL1Byb3RvY29sVmVyc2lvbjtJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdGF0dXNMaW5lKExvcmcvYXBhY2hlL2h0dHAvU3RhdHVzTGluZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2VGYWN0b3J5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0h0dHBSZXNwb25zZShMb3JnL2FwYWNoZS9odHRwL1Byb3RvY29sVmVyc2lvbjtJTG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SHR0cFJlc3BvbnNlKExvcmcvYXBhY2hlL2h0dHAvU3RhdHVzTGluZTtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlSW50ZXJjZXB0b3IiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHJvY2VzcyhMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZTtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBTZXJ2ZXJDb25uZWN0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cENvbm5lY3Rpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlY2VpdmVSZXF1ZXN0RW50aXR5KExvcmcvYXBhY2hlL2h0dHAvSHR0cEVudGl0eUVuY2xvc2luZ1JlcXVlc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWNlaXZlUmVxdWVzdEhlYWRlcigpTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kUmVzcG9uc2VFbnRpdHkoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZW5kUmVzcG9uc2VIZWFkZXIoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2U7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFN0YXR1cyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IlNDX0FDQ0VQVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19CQURfR0FURVdBWSIvPgotCQk8ZmllbGQgbmFtZT0iU0NfQkFEX1JFUVVFU1QiLz4KLQkJPGZpZWxkIG5hbWU9IlNDX0NPTkZMSUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19DT05USU5VRSIvPgotCQk8ZmllbGQgbmFtZT0iU0NfQ1JFQVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0NfRVhQRUNUQVRJT05fRkFJTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19GQUlMRURfREVQRU5ERU5DWSIvPgotCQk8ZmllbGQgbmFtZT0iU0NfRk9SQklEREVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19HQVRFV0FZX1RJTUVPVVQiLz4KLQkJPGZpZWxkIG5hbWU9IlNDX0dPTkUiLz4KLQkJPGZpZWxkIG5hbWU9IlNDX0hUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19JTlNVRkZJQ0lFTlRfU1BBQ0VfT05fUkVTT1VSQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlNDX0lOU1VGRklDSUVOVF9TVE9SQUdFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19JTlRFUk5BTF9TRVJWRVJfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNDX0xFTkdUSF9SRVFVSVJFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0NfTE9DS0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19NRVRIT0RfRkFJTFVSRSIvPgotCQk8ZmllbGQgbmFtZT0iU0NfTUVUSE9EX05PVF9BTExPV0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19NT1ZFRF9QRVJNQU5FTlRMWSIvPgotCQk8ZmllbGQgbmFtZT0iU0NfTU9WRURfVEVNUE9SQVJJTFkiLz4KLQkJPGZpZWxkIG5hbWU9IlNDX01VTFRJUExFX0NIT0lDRVMiLz4KLQkJPGZpZWxkIG5hbWU9IlNDX01VTFRJX1NUQVRVUyIvPgotCQk8ZmllbGQgbmFtZT0iU0NfTk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNDX05PVF9BQ0NFUFRBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19OT1RfRk9VTkQiLz4KLQkJPGZpZWxkIG5hbWU9IlNDX05PVF9JTVBMRU1FTlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0NfTk9UX01PRElGSUVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19OT19DT05URU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19PSyIvPgotCQk8ZmllbGQgbmFtZT0iU0NfUEFSVElBTF9DT05URU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19QQVlNRU5UX1JFUVVJUkVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19QUkVDT05ESVRJT05fRkFJTEVEIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19QUk9DRVNTSU5HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19QUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0NfUkVRVUVTVEVEX1JBTkdFX05PVF9TQVRJU0ZJQUJMRSIvPgotCQk8ZmllbGQgbmFtZT0iU0NfUkVRVUVTVF9USU1FT1VUIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19SRVFVRVNUX1RPT19MT05HIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19SRVFVRVNUX1VSSV9UT09fTE9ORyIvPgotCQk8ZmllbGQgbmFtZT0iU0NfUkVTRVRfQ09OVEVOVCIvPgotCQk8ZmllbGQgbmFtZT0iU0NfU0VFX09USEVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19TRVJWSUNFX1VOQVZBSUxBQkxFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19TV0lUQ0hJTkdfUFJPVE9DT0xTIi8+Ci0JCTxmaWVsZCBuYW1lPSJTQ19URU1QT1JBUllfUkVESVJFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IlNDX1VOQVVUSE9SSVpFRCIvPgotCQk8ZmllbGQgbmFtZT0iU0NfVU5QUk9DRVNTQUJMRV9FTlRJVFkiLz4KLQkJPGZpZWxkIG5hbWU9IlNDX1VOU1VQUE9SVEVEX01FRElBX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNDX1VTRV9QUk9YWSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwVmVyc2lvbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9Qcm90b2NvbFZlcnNpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUkpViIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF8wXzkiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfMV8wIi8+Ci0JCTxmaWVsZCBuYW1lPSJIVFRQXzFfMSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9NYWxmb3JtZWRDaHVua0NvZGluZ0V4Y2VwdGlvbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSU9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvTWV0aG9kTm90U3VwcG9ydGVkRXhjZXB0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvTmFtZVZhbHVlUGFpciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL05vSHR0cFJlc3BvbnNlRXhjZXB0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9QYXJzZUV4Y2VwdGlvbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL1Byb3RvY29sRXhjZXB0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvUHJvdG9jb2xWZXJzaW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlVG9WZXJzaW9uKExvcmcvYXBhY2hlL2h0dHAvUHJvdG9jb2xWZXJzaW9uOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZm9yVmVyc2lvbihJSSlMb3JnL2FwYWNoZS9odHRwL1Byb3RvY29sVmVyc2lvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYWpvcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1pbm9yKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdG9jb2woKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdyZWF0ZXJFcXVhbHMoTG9yZy9hcGFjaGUvaHR0cC9Qcm90b2NvbFZlcnNpb247KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbXBhcmFibGUoTG9yZy9hcGFjaGUvaHR0cC9Qcm90b2NvbFZlcnNpb247KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsZXNzRXF1YWxzKExvcmcvYXBhY2hlL2h0dHAvUHJvdG9jb2xWZXJzaW9uOylaIi8+Ci0JCTxmaWVsZCBuYW1lPSJtYWpvciIvPgotCQk8ZmllbGQgbmFtZT0ibWlub3IiLz4KLQkJPGZpZWxkIG5hbWU9InByb3RvY29sIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL1JlYXNvblBocmFzZUNhdGFsb2ciIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhc29uKElMamF2YS91dGlsL0xvY2FsZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL1JlcXVlc3RMaW5lIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldGhvZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvdG9jb2xWZXJzaW9uKClMb3JnL2FwYWNoZS9odHRwL1Byb3RvY29sVmVyc2lvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcmkoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9TdGF0dXNMaW5lIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3RvY29sVmVyc2lvbigpTG9yZy9hcGFjaGUvaHR0cC9Qcm90b2NvbFZlcnNpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhc29uUGhyYXNlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0dXNDb2RlKClJIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL1Rva2VuSXRlcmF0b3IiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvdXRpbC9JdGVyYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRUb2tlbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL1Vuc3VwcG9ydGVkSHR0cFZlcnNpb25FeGNlcHRpb24iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvUHJvdG9jb2xFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvYXV0aC9BVVRIIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8ZmllbGQgbmFtZT0iUFJPWFlfQVVUSCIvPgotCQk8ZmllbGQgbmFtZT0iUFJPWFlfQVVUSF9SRVNQIi8+Ci0JCTxmaWVsZCBuYW1lPSJXV1dfQVVUSCIvPgotCQk8ZmllbGQgbmFtZT0iV1dXX0FVVEhfUkVTUCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9hdXRoL0F1dGhTY2hlbWUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXV0aGVudGljYXRlKExvcmcvYXBhY2hlL2h0dHAvYXV0aC9DcmVkZW50aWFscztMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0OylMb3JnL2FwYWNoZS9odHRwL0hlYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbWV0ZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlYWxtKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2hlbWVOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0NvbXBsZXRlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb25uZWN0aW9uQmFzZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm9jZXNzQ2hhbGxlbmdlKExvcmcvYXBhY2hlL2h0dHAvSGVhZGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2F1dGgvQXV0aFNjaGVtZUZhY3RvcnkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SW5zdGFuY2UoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspTG9yZy9hcGFjaGUvaHR0cC9hdXRoL0F1dGhTY2hlbWU7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2F1dGgvQXV0aFNjaGVtZVJlZ2lzdHJ5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF1dGhTY2hlbWUoTGphdmEvbGFuZy9TdHJpbmc7TG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspTG9yZy9hcGFjaGUvaHR0cC9hdXRoL0F1dGhTY2hlbWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NoZW1lTmFtZXMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlcihMamF2YS9sYW5nL1N0cmluZztMb3JnL2FwYWNoZS9odHRwL2F1dGgvQXV0aFNjaGVtZUZhY3Rvcnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJdGVtcyhMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXIoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvYXV0aC9BdXRoU2NvcGUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvYXV0aC9BdXRoU2NvcGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3N0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3J0KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhbG0oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjaGVtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWF0Y2goTG9yZy9hcGFjaGUvaHR0cC9hdXRoL0F1dGhTY29wZTspSSIvPgotCQk8ZmllbGQgbmFtZT0iQU5ZIi8+Ci0JCTxmaWVsZCBuYW1lPSJBTllfSE9TVCIvPgotCQk8ZmllbGQgbmFtZT0iQU5ZX1BPUlQiLz4KLQkJPGZpZWxkIG5hbWU9IkFOWV9SRUFMTSIvPgotCQk8ZmllbGQgbmFtZT0iQU5ZX1NDSEVNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9hdXRoL0F1dGhTdGF0ZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRoU2NoZW1lKClMb3JnL2FwYWNoZS9odHRwL2F1dGgvQXV0aFNjaGVtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRoU2NvcGUoKUxvcmcvYXBhY2hlL2h0dHAvYXV0aC9BdXRoU2NvcGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3JlZGVudGlhbHMoKUxvcmcvYXBhY2hlL2h0dHAvYXV0aC9DcmVkZW50aWFsczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnZhbGlkYXRlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYWxpZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dGhTY2hlbWUoTG9yZy9hcGFjaGUvaHR0cC9hdXRoL0F1dGhTY2hlbWU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdXRoU2NvcGUoTG9yZy9hcGFjaGUvaHR0cC9hdXRoL0F1dGhTY29wZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENyZWRlbnRpYWxzKExvcmcvYXBhY2hlL2h0dHAvYXV0aC9DcmVkZW50aWFsczspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9hdXRoL0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL1Byb3RvY29sRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2F1dGgvQmFzaWNVc2VyUHJpbmNpcGFsIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3NlY3VyaXR5L1ByaW5jaXBhbCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9hdXRoL0NyZWRlbnRpYWxzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhc3N3b3JkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyUHJpbmNpcGFsKClMamF2YS9zZWN1cml0eS9QcmluY2lwYWw7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2F1dGgvSW52YWxpZENyZWRlbnRpYWxzRXhjZXB0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2F1dGgvQXV0aGVudGljYXRpb25FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvYXV0aC9NYWxmb3JtZWRDaGFsbGVuZ2VFeGNlcHRpb24iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvUHJvdG9jb2xFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvYXV0aC9OVENyZWRlbnRpYWxzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvYXV0aC9DcmVkZW50aWFscyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERvbWFpbigpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlck5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdvcmtzdGF0aW9uKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvYXV0aC9OVFVzZXJQcmluY2lwYWwiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvc2VjdXJpdHkvUHJpbmNpcGFsIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG9tYWluKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VybmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2F1dGgvVXNlcm5hbWVQYXNzd29yZENyZWRlbnRpYWxzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvYXV0aC9DcmVkZW50aWFscyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJOYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvYXV0aC9wYXJhbXMvQXV0aFBOYW1lcyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRURFTlRJQUxfQ0hBUlNFVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9hdXRoL3BhcmFtcy9BdXRoUGFyYW1CZWFuIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwQWJzdHJhY3RQYXJhbUJlYW4iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENyZWRlbnRpYWxDaGFyc2V0KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2F1dGgvcGFyYW1zL0F1dGhQYXJhbXMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q3JlZGVudGlhbENoYXJzZXQoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3JlZGVudGlhbENoYXJzZXQoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtcztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvQXV0aGVudGljYXRpb25IYW5kbGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYWxsZW5nZXMoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2U7TG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspTGphdmEvdXRpbC9NYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBdXRoZW50aWNhdGlvblJlcXVlc3RlZChMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZTtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2VsZWN0U2NoZW1lKExqYXZhL3V0aWwvTWFwO0xvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlO0xvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7KUxvcmcvYXBhY2hlL2h0dHAvYXV0aC9BdXRoU2NoZW1lOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvQ2lyY3VsYXJSZWRpcmVjdEV4Y2VwdGlvbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvUmVkaXJlY3RFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0NsaWVudFByb3RvY29sRXhjZXB0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JT0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvQ29va2llU3RvcmUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQ29va2llKExvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJFeHBpcmVkKExqYXZhL3V0aWwvRGF0ZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvb2tpZXMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0NyZWRlbnRpYWxzUHJvdmlkZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDcmVkZW50aWFscyhMb3JnL2FwYWNoZS9odHRwL2F1dGgvQXV0aFNjb3BlOylMb3JnL2FwYWNoZS9odHRwL2F1dGgvQ3JlZGVudGlhbHM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q3JlZGVudGlhbHMoTG9yZy9hcGFjaGUvaHR0cC9hdXRoL0F1dGhTY29wZTtMb3JnL2FwYWNoZS9odHRwL2F1dGgvQ3JlZGVudGlhbHM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0h0dHBDbGllbnQiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZShMb3JnL2FwYWNoZS9odHRwL0h0dHBIb3N0O0xvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3Q7KUxvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWN1dGUoTG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDtMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0O0xvcmcvYXBhY2hlL2h0dHAvY2xpZW50L1Jlc3BvbnNlSGFuZGxlcjspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZShMb3JnL2FwYWNoZS9odHRwL0h0dHBIb3N0O0xvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3Q7TG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvUmVzcG9uc2VIYW5kbGVyO0xvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWN1dGUoTG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDtMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0O0xvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7KUxvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImV4ZWN1dGUoTG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvbWV0aG9kcy9IdHRwVXJpUmVxdWVzdDspTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZShMb3JnL2FwYWNoZS9odHRwL2NsaWVudC9tZXRob2RzL0h0dHBVcmlSZXF1ZXN0O0xvcmcvYXBhY2hlL2h0dHAvY2xpZW50L1Jlc3BvbnNlSGFuZGxlcjspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXhlY3V0ZShMb3JnL2FwYWNoZS9odHRwL2NsaWVudC9tZXRob2RzL0h0dHBVcmlSZXF1ZXN0O0xvcmcvYXBhY2hlL2h0dHAvY2xpZW50L1Jlc3BvbnNlSGFuZGxlcjtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdXRlKExvcmcvYXBhY2hlL2h0dHAvY2xpZW50L21ldGhvZHMvSHR0cFVyaVJlcXVlc3Q7TG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ubmVjdGlvbk1hbmFnZXIoKUxvcmcvYXBhY2hlL2h0dHAvY29ubi9DbGllbnRDb25uZWN0aW9uTWFuYWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXJhbXMoKUxvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9IdHRwUmVxdWVzdFJldHJ5SGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXRyeVJlcXVlc3QoTGphdmEvaW8vSU9FeGNlcHRpb247SUxvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0h0dHBSZXNwb25zZUV4Y2VwdGlvbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvQ2xpZW50UHJvdG9jb2xFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RhdHVzQ29kZSgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvTm9uUmVwZWF0YWJsZVJlcXVlc3RFeGNlcHRpb24iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvUHJvdG9jb2xFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L1JlZGlyZWN0RXhjZXB0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL1Byb3RvY29sRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9SZWRpcmVjdEhhbmRsZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYXRpb25VUkkoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2U7TG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspTGphdmEvbmV0L1VSSTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1JlZGlyZWN0UmVxdWVzdGVkKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlO0xvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L1JlcXVlc3REaXJlY3RvciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdXRlKExvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7TG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdDtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L1Jlc3BvbnNlSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVSZXNwb25zZShMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZTspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9Vc2VyVG9rZW5IYW5kbGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJUb2tlbihMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylMamF2YS9sYW5nL09iamVjdDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L2VudGl0eS9VcmxFbmNvZGVkRm9ybUVudGl0eSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvU3RyaW5nRW50aXR5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvTGlzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS91dGlsL0xpc3Q7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L21ldGhvZHMvQWJvcnRhYmxlSHR0cFJlcXVlc3QiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWJvcnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb25uZWN0aW9uUmVxdWVzdChMb3JnL2FwYWNoZS9odHRwL2Nvbm4vQ2xpZW50Q29ubmVjdGlvblJlcXVlc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWxlYXNlVHJpZ2dlcihMb3JnL2FwYWNoZS9odHRwL2Nvbm4vQ29ubmVjdGlvblJlbGVhc2VUcmlnZ2VyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9tZXRob2RzL0h0dHBEZWxldGUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L21ldGhvZHMvSHR0cFJlcXVlc3RCYXNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25ldC9VUkk7KVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEhPRF9OQU1FIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9tZXRob2RzL0h0dHBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0QmFzZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvbWV0aG9kcy9IdHRwUmVxdWVzdEJhc2UiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9tZXRob2RzL0h0dHBHZXQiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L21ldGhvZHMvSHR0cFJlcXVlc3RCYXNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL25ldC9VUkk7KVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEhPRF9OQU1FIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9tZXRob2RzL0h0dHBIZWFkIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9tZXRob2RzL0h0dHBSZXF1ZXN0QmFzZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvVVJJOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRIT0RfTkFNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvbWV0aG9kcy9IdHRwT3B0aW9ucyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvbWV0aG9kcy9IdHRwUmVxdWVzdEJhc2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmV0L1VSSTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbG93ZWRNZXRob2RzKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlOylMamF2YS91dGlsL1NldDsiLz4KLQkJPGZpZWxkIG5hbWU9Ik1FVEhPRF9OQU1FIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9tZXRob2RzL0h0dHBQb3N0IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9tZXRob2RzL0h0dHBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0QmFzZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvVVJJOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRIT0RfTkFNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvbWV0aG9kcy9IdHRwUHV0IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9tZXRob2RzL0h0dHBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0QmFzZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvVVJJOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJNRVRIT0RfTkFNRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvbWV0aG9kcy9IdHRwUmVxdWVzdEJhc2UiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9BYnN0cmFjdEh0dHBNZXNzYWdlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9tZXRob2RzL0Fib3J0YWJsZUh0dHBSZXF1ZXN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvbWV0aG9kcy9IdHRwVXJpUmVxdWVzdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVSSShMamF2YS9uZXQvVVJJOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9tZXRob2RzL0h0dHBUcmFjZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvbWV0aG9kcy9IdHRwUmVxdWVzdEJhc2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmV0L1VSSTspViIvPgotCQk8ZmllbGQgbmFtZT0iTUVUSE9EX05BTUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L21ldGhvZHMvSHR0cFVyaVJlcXVlc3QiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFib3J0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0aG9kKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVUkkoKUxqYXZhL25ldC9VUkk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBYm9ydGVkKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9wYXJhbXMvQWxsQ2xpZW50UE5hbWVzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvYXV0aC9wYXJhbXMvQXV0aFBOYW1lcyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L3BhcmFtcy9DbGllbnRQTmFtZXMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vcGFyYW1zL0Nvbm5Db25uZWN0aW9uUE5hbWVzIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3BhcmFtcy9Db25uTWFuYWdlclBOYW1lcyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9wYXJhbXMvQ29ublJvdXRlUE5hbWVzIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb29raWUvcGFyYW1zL0Nvb2tpZVNwZWNQTmFtZXMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3BhcmFtcy9Db3JlQ29ubmVjdGlvblBOYW1lcyIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0NvcmVQcm90b2NvbFBOYW1lcyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvcGFyYW1zL0F1dGhQb2xpY3kiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJCQVNJQyIvPgotCQk8ZmllbGQgbmFtZT0iRElHRVNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJOVExNIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9wYXJhbXMvQ2xpZW50UE5hbWVzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iQUxMT1dfQ0lSQ1VMQVJfUkVESVJFQ1RTIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05ORUNUSU9OX01BTkFHRVJfRkFDVE9SWSIvPgotCQk8ZmllbGQgbmFtZT0iQ09OTkVDVElPTl9NQU5BR0VSX0ZBQ1RPUllfQ0xBU1NfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iQ09PS0lFX1BPTElDWSIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9IRUFERVJTIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX0hPU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkhBTkRMRV9BVVRIRU5USUNBVElPTiIvPgotCQk8ZmllbGQgbmFtZT0iSEFORExFX1JFRElSRUNUUyIvPgotCQk8ZmllbGQgbmFtZT0iTUFYX1JFRElSRUNUUyIvPgotCQk8ZmllbGQgbmFtZT0iUkVKRUNUX1JFTEFUSVZFX1JFRElSRUNUIi8+Ci0JCTxmaWVsZCBuYW1lPSJWSVJUVUFMX0hPU1QiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L3BhcmFtcy9DbGllbnRQYXJhbUJlYW4iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBBYnN0cmFjdFBhcmFtQmVhbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QWxsb3dDaXJjdWxhclJlZGlyZWN0cyhaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb25uZWN0aW9uTWFuYWdlckZhY3RvcnkoTG9yZy9hcGFjaGUvaHR0cC9jb25uL0NsaWVudENvbm5lY3Rpb25NYW5hZ2VyRmFjdG9yeTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbm5lY3Rpb25NYW5hZ2VyRmFjdG9yeUNsYXNzTmFtZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvb2tpZVBvbGljeShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHRIZWFkZXJzKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHRIb3N0KExvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIYW5kbGVBdXRoZW50aWNhdGlvbihaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIYW5kbGVSZWRpcmVjdHMoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4UmVkaXJlY3RzKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJlamVjdFJlbGF0aXZlUmVkaXJlY3QoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmlydHVhbEhvc3QoTG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvcGFyYW1zL0Nvb2tpZVBvbGljeSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkJFU1RfTUFUQ0giLz4KLQkJPGZpZWxkIG5hbWU9IkJST1dTRVJfQ09NUEFUSUJJTElUWSIvPgotCQk8ZmllbGQgbmFtZT0iTkVUU0NBUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlJGQ18yMTA5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJSRkNfMjk2NSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvcGFyYW1zL0h0dHBDbGllbnRQYXJhbXMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29va2llUG9saWN5KExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzQXV0aGVudGljYXRpbmcoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVkaXJlY3RpbmcoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dGhlbnRpY2F0aW5nKExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29va2llUG9saWN5KExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZWRpcmVjdGluZyhMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zO1opViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvcHJvdG9jb2wvQ2xpZW50Q29udGV4dCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVEhTQ0hFTUVfUkVHSVNUUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkFVVEhfU0NIRU1FX1BSRUYiLz4KLQkJPGZpZWxkIG5hbWU9IkNPT0tJRVNQRUNfUkVHSVNUUlkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPT0tJRV9PUklHSU4iLz4KLQkJPGZpZWxkIG5hbWU9IkNPT0tJRV9TUEVDIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT09LSUVfU1RPUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNSRURTX1BST1ZJREVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9YWV9BVVRIX1NUQVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQVJHRVRfQVVUSF9TVEFURSIvPgotCQk8ZmllbGQgbmFtZT0iVVNFUl9UT0tFTiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvcHJvdG9jb2wvQ2xpZW50Q29udGV4dENvbmZpZ3VyZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvcHJvdG9jb2wvQ2xpZW50Q29udGV4dCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0aFNjaGVtZVByZWYoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXV0aFNjaGVtZVJlZ2lzdHJ5KExvcmcvYXBhY2hlL2h0dHAvYXV0aC9BdXRoU2NoZW1lUmVnaXN0cnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb29raWVTcGVjUmVnaXN0cnkoTG9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llU3BlY1JlZ2lzdHJ5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29va2llU3RvcmUoTG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvQ29va2llU3RvcmU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDcmVkZW50aWFsc1Byb3ZpZGVyKExvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0NyZWRlbnRpYWxzUHJvdmlkZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L3Byb3RvY29sL1JlcXVlc3RBZGRDb29raWVzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3RJbnRlcmNlcHRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvcHJvdG9jb2wvUmVxdWVzdERlZmF1bHRIZWFkZXJzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3RJbnRlcmNlcHRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvcHJvdG9jb2wvUmVxdWVzdFByb3h5QXV0aGVudGljYXRpb24iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdEludGVyY2VwdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9wcm90b2NvbC9SZXF1ZXN0VGFyZ2V0QXV0aGVudGljYXRpb24iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdEludGVyY2VwdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9wcm90b2NvbC9SZXNwb25zZVByb2Nlc3NDb29raWVzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlSW50ZXJjZXB0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L3V0aWxzL0Nsb25lVXRpbHMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmUoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvdXRpbHMvVVJJVXRpbHMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVVJJKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbmV0L1VSSTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlKExqYXZhL25ldC9VUkk7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25ldC9VUkk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZShMamF2YS9uZXQvVVJJO0xqYXZhL25ldC9VUkk7KUxqYXZhL25ldC9VUkk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmV3cml0ZVVSSShMamF2YS9uZXQvVVJJO0xvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7KUxqYXZhL25ldC9VUkk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmV3cml0ZVVSSShMamF2YS9uZXQvVVJJO0xvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7WilMamF2YS9uZXQvVVJJOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jbGllbnQvdXRpbHMvVVJMRW5jb2RlZFV0aWxzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdChMamF2YS91dGlsL0xpc3Q7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW5jb2RlZChMb3JnL2FwYWNoZS9odHRwL0h0dHBFbnRpdHk7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMamF2YS9uZXQvVVJJO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvdXRpbC9MaXN0O0xqYXZhL3V0aWwvU2Nhbm5lcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExvcmcvYXBhY2hlL2h0dHAvSHR0cEVudGl0eTspTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8ZmllbGQgbmFtZT0iQ09OVEVOVF9UWVBFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vQmFzaWNFb2ZTZW5zb3JXYXRjaGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9Fb2ZTZW5zb3JXYXRjaGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvY29ubi9NYW5hZ2VkQ2xpZW50Q29ubmVjdGlvbjtaKVYiLz4KLQkJPGZpZWxkIG5hbWU9ImF0dGVtcHRSZXVzZSIvPgotCQk8ZmllbGQgbmFtZT0ibWFuYWdlZENvbm4iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9CYXNpY01hbmFnZWRFbnRpdHkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvZW50aXR5L0h0dHBFbnRpdHlXcmFwcGVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL0Nvbm5lY3Rpb25SZWxlYXNlVHJpZ2dlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9Fb2ZTZW5zb3JXYXRjaGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvSHR0cEVudGl0eTtMb3JnL2FwYWNoZS9odHRwL2Nvbm4vTWFuYWdlZENsaWVudENvbm5lY3Rpb247WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZU1hbmFnZWRDb25uZWN0aW9uKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJhdHRlbXB0UmV1c2UiLz4KLQkJPGZpZWxkIG5hbWU9Im1hbmFnZWRDb25uIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vQ2xpZW50Q29ubmVjdGlvbk1hbmFnZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2VFeHBpcmVkQ29ubmVjdGlvbnMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZUlkbGVDb25uZWN0aW9ucyhKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NoZW1lUmVnaXN0cnkoKUxvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvU2NoZW1lUmVnaXN0cnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVsZWFzZUNvbm5lY3Rpb24oTG9yZy9hcGFjaGUvaHR0cC9jb25uL01hbmFnZWRDbGllbnRDb25uZWN0aW9uO0pMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0Q29ubmVjdGlvbihMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGU7TGphdmEvbGFuZy9PYmplY3Q7KUxvcmcvYXBhY2hlL2h0dHAvY29ubi9DbGllbnRDb25uZWN0aW9uUmVxdWVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaHV0ZG93bigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL0NsaWVudENvbm5lY3Rpb25NYW5hZ2VyRmFjdG9yeSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zO0xvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvU2NoZW1lUmVnaXN0cnk7KUxvcmcvYXBhY2hlL2h0dHAvY29ubi9DbGllbnRDb25uZWN0aW9uTWFuYWdlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9DbGllbnRDb25uZWN0aW9uT3BlcmF0b3IiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ29ubmVjdGlvbigpTG9yZy9hcGFjaGUvaHR0cC9jb25uL09wZXJhdGVkQ2xpZW50Q29ubmVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuQ29ubmVjdGlvbihMb3JnL2FwYWNoZS9odHRwL2Nvbm4vT3BlcmF0ZWRDbGllbnRDb25uZWN0aW9uO0xvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7TGphdmEvbmV0L0luZXRBZGRyZXNzO0xvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7TG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InVwZGF0ZVNlY3VyZUNvbm5lY3Rpb24oTG9yZy9hcGFjaGUvaHR0cC9jb25uL09wZXJhdGVkQ2xpZW50Q29ubmVjdGlvbjtMb3JnL2FwYWNoZS9odHRwL0h0dHBIb3N0O0xvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7TG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL0NsaWVudENvbm5lY3Rpb25SZXF1ZXN0IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFib3J0UmVxdWVzdCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb24oSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspTG9yZy9hcGFjaGUvaHR0cC9jb25uL01hbmFnZWRDbGllbnRDb25uZWN0aW9uOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL0Nvbm5lY3RUaW1lb3V0RXhjZXB0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0ludGVycnVwdGVkSU9FeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9Db25uZWN0aW9uS2VlcEFsaXZlU3RyYXRlZ3kiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0S2VlcEFsaXZlRHVyYXRpb24oTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2U7TG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspSiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL0Nvbm5lY3Rpb25Qb29sVGltZW91dEV4Y2VwdGlvbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL0Nvbm5lY3RUaW1lb3V0RXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vQ29ubmVjdGlvblJlbGVhc2VUcmlnZ2VyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFib3J0Q29ubmVjdGlvbigpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2VDb25uZWN0aW9uKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vRW9mU2Vuc29ySW5wdXRTdHJlYW0iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0lucHV0U3RyZWFtIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL0Nvbm5lY3Rpb25SZWxlYXNlVHJpZ2dlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTtMb3JnL2FwYWNoZS9odHRwL2Nvbm4vRW9mU2Vuc29yV2F0Y2hlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNoZWNrQWJvcnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjaGVja0Nsb3NlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hlY2tFT0YoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZWFkQWxsb3dlZCgpWiIvPgotCQk8ZmllbGQgbmFtZT0id3JhcHBlZFN0cmVhbSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL0VvZlNlbnNvcldhdGNoZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZW9mRGV0ZWN0ZWQoTGphdmEvaW8vSW5wdXRTdHJlYW07KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdHJlYW1BYm9ydChMamF2YS9pby9JbnB1dFN0cmVhbTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InN0cmVhbUNsb3NlZChMamF2YS9pby9JbnB1dFN0cmVhbTspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL0h0dHBIb3N0Q29ubmVjdEV4Y2VwdGlvbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbmV0L0Nvbm5lY3RFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDtMamF2YS9uZXQvQ29ubmVjdEV4Y2VwdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvc3QoKUxvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vTWFuYWdlZENsaWVudENvbm5lY3Rpb24iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwQ2xpZW50Q29ubmVjdGlvbiIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cEluZXRDb25uZWN0aW9uIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL0Nvbm5lY3Rpb25SZWxlYXNlVHJpZ2dlciIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJvdXRlKClMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U1NMU2Vzc2lvbigpTGphdmF4L25ldC9zc2wvU1NMU2Vzc2lvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdGF0ZSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNNYXJrZWRSZXVzYWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2VjdXJlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGF5ZXJQcm90b2NvbChMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0O0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXJrUmV1c2FibGUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcGVuKExvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0O0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJZGxlRHVyYXRpb24oSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXRlKExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idHVubmVsUHJveHkoTG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDtaTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InR1bm5lbFRhcmdldChaTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InVubWFya1JldXNhYmxlKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vTXVsdGlob21lUGxhaW5Tb2NrZXRGYWN0b3J5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvU29ja2V0RmFjdG9yeSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvY2tldEZhY3RvcnkoKUxvcmcvYXBhY2hlL2h0dHAvY29ubi9NdWx0aWhvbWVQbGFpblNvY2tldEZhY3Rvcnk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vT3BlcmF0ZWRDbGllbnRDb25uZWN0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cENsaWVudENvbm5lY3Rpb24iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBJbmV0Q29ubmVjdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvY2tldCgpTGphdmEvbmV0L1NvY2tldDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYXJnZXRIb3N0KClMb3JnL2FwYWNoZS9odHRwL0h0dHBIb3N0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2VjdXJlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3BlbkNvbXBsZXRlZChaTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW5pbmcoTGphdmEvbmV0L1NvY2tldDtMb3JnL2FwYWNoZS9odHRwL0h0dHBIb3N0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlKExqYXZhL25ldC9Tb2NrZXQ7TG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDtaTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3BhcmFtcy9Db25uQ29ubmVjdGlvblBOYW1lcyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9TVEFUVVNfTElORV9HQVJCQUdFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vcGFyYW1zL0Nvbm5Db25uZWN0aW9uUGFyYW1CZWFuIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwQWJzdHJhY3RQYXJhbUJlYW4iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1heFN0YXR1c0xpbmVHYXJiYWdlKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3BhcmFtcy9Db25uTWFuYWdlclBOYW1lcyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9DT05ORUNUSU9OU19QRVJfUk9VVEUiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9UT1RBTF9DT05ORUNUSU9OUyIvPgotCQk8ZmllbGQgbmFtZT0iVElNRU9VVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3BhcmFtcy9Db25uTWFuYWdlclBhcmFtQmVhbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cEFic3RyYWN0UGFyYW1CZWFuIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb25uZWN0aW9uc1BlclJvdXRlKExvcmcvYXBhY2hlL2h0dHAvY29ubi9wYXJhbXMvQ29ublBlclJvdXRlQmVhbjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1heFRvdGFsQ29ubmVjdGlvbnMoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGltZW91dChKKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9wYXJhbXMvQ29ubk1hbmFnZXJQYXJhbXMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3BhcmFtcy9Db25uTWFuYWdlclBOYW1lcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heENvbm5lY3Rpb25zUGVyUm91dGUoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspTG9yZy9hcGFjaGUvaHR0cC9jb25uL3BhcmFtcy9Db25uUGVyUm91dGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWF4VG90YWxDb25uZWN0aW9ucyhMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGltZW91dChMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylKIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4Q29ubmVjdGlvbnNQZXJSb3V0ZShMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zO0xvcmcvYXBhY2hlL2h0dHAvY29ubi9wYXJhbXMvQ29ublBlclJvdXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWF4VG90YWxDb25uZWN0aW9ucyhMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFRpbWVvdXQoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtcztKKVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfTUFYX1RPVEFMX0NPTk5FQ1RJT05TIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vcGFyYW1zL0Nvbm5QZXJSb3V0ZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNYXhGb3JSb3V0ZShMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGU7KUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9wYXJhbXMvQ29ublBlclJvdXRlQmVhbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vcGFyYW1zL0Nvbm5QZXJSb3V0ZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0TWF4KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGVmYXVsdE1heFBlclJvdXRlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1heEZvclJvdXRlKExvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRNYXhGb3JSb3V0ZXMoTGphdmEvdXRpbC9NYXA7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfTUFYX0NPTk5FQ1RJT05TX1BFUl9ST1VURSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3BhcmFtcy9Db25uUm91dGVQTmFtZXMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1BST1hZIi8+Ci0JCTxmaWVsZCBuYW1lPSJGT1JDRURfUk9VVEUiLz4KLQkJPGZpZWxkIG5hbWU9IkxPQ0FMX0FERFJFU1MiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9wYXJhbXMvQ29ublJvdXRlUGFyYW1CZWFuIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwQWJzdHJhY3RQYXJhbUJlYW4iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlZmF1bHRQcm94eShMb3JnL2FwYWNoZS9odHRwL0h0dHBIb3N0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9yY2VkUm91dGUoTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9jYWxBZGRyZXNzKExqYXZhL25ldC9JbmV0QWRkcmVzczspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3BhcmFtcy9Db25uUm91dGVQYXJhbXMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3BhcmFtcy9Db25uUm91dGVQTmFtZXMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0UHJveHkoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspTG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGb3JjZWRSb3V0ZShMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TG9jYWxBZGRyZXNzKExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUxqYXZhL25ldC9JbmV0QWRkcmVzczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREZWZhdWx0UHJveHkoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtcztMb3JnL2FwYWNoZS9odHRwL0h0dHBIb3N0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Rm9yY2VkUm91dGUoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtcztMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMb2NhbEFkZHJlc3MoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtcztMamF2YS9uZXQvSW5ldEFkZHJlc3M7KVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX0hPU1QiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PX1JPVVRFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9CYXNpY1JvdXRlRGlyZWN0b3IiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlRGlyZWN0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkaXJlY3RTdGVwKExvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL1JvdXRlSW5mbztMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9Sb3V0ZUluZm87KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaXJzdFN0ZXAoTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvUm91dGVJbmZvOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJveGllZFN0ZXAoTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvUm91dGVJbmZvO0xvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL1JvdXRlSW5mbzspSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvUm91dGVJbmZvIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDtMamF2YS9uZXQvSW5ldEFkZHJlc3M7TG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDtaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDtMamF2YS9uZXQvSW5ldEFkZHJlc3M7TG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDtaTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvUm91dGVJbmZvJFR1bm5lbFR5cGU7TG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvUm91dGVJbmZvJExheWVyVHlwZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL0h0dHBIb3N0O0xqYXZhL25ldC9JbmV0QWRkcmVzcztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDtMamF2YS9uZXQvSW5ldEFkZHJlc3M7W0xvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7WkxvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL1JvdXRlSW5mbyRUdW5uZWxUeXBlO0xvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL1JvdXRlSW5mbyRMYXllclR5cGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZURpcmVjdG9yIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRTdGVwKExvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL1JvdXRlSW5mbztMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9Sb3V0ZUluZm87KUkiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTVBMRVRFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05ORUNUX1BST1hZIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05ORUNUX1RBUkdFVCIvPgotCQk8ZmllbGQgbmFtZT0iTEFZRVJfUFJPVE9DT0wiLz4KLQkJPGZpZWxkIG5hbWU9IlRVTk5FTF9QUk9YWSIvPgotCQk8ZmllbGQgbmFtZT0iVFVOTkVMX1RBUkdFVCIvPgotCQk8ZmllbGQgbmFtZT0iVU5SRUFDSEFCTEUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZVBsYW5uZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGV0ZXJtaW5lUm91dGUoTG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDtMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0O0xvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7KUxvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL1JvdXRlSW5mbyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIb3BDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvcFRhcmdldChJKUxvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGF5ZXJUeXBlKClMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9Sb3V0ZUluZm8kTGF5ZXJUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsQWRkcmVzcygpTGphdmEvbmV0L0luZXRBZGRyZXNzOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3h5SG9zdCgpTG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUYXJnZXRIb3N0KClMb3JnL2FwYWNoZS9odHRwL0h0dHBIb3N0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR1bm5lbFR5cGUoKUxvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL1JvdXRlSW5mbyRUdW5uZWxUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTGF5ZXJlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2VjdXJlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNUdW5uZWxsZWQoKVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL1JvdXRlSW5mbyRMYXllclR5cGUiIHNpbmNlPSIxIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9FbnVtIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWVPZihMamF2YS9sYW5nL1N0cmluZzspTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvUm91dGVJbmZvJExheWVyVHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZXMoKVtMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9Sb3V0ZUluZm8kTGF5ZXJUeXBlOyIvPgotCQk8ZmllbGQgbmFtZT0iTEFZRVJFRCIvPgotCQk8ZmllbGQgbmFtZT0iUExBSU4iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL1JvdXRlSW5mbyRUdW5uZWxUeXBlIiBzaW5jZT0iMSIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRW51bSIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlT2YoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL1JvdXRlSW5mbyRUdW5uZWxUeXBlOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlcygpW0xvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL1JvdXRlSW5mbyRUdW5uZWxUeXBlOyIvPgotCQk8ZmllbGQgbmFtZT0iUExBSU4iLz4KLQkJPGZpZWxkIG5hbWU9IlRVTk5FTExFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvUm91dGVUcmFja2VyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvUm91dGVJbmZvIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7TGphdmEvbmV0L0luZXRBZGRyZXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3RQcm94eShMb3JnL2FwYWNoZS9odHRwL0h0dHBIb3N0O1opViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbm5lY3RUYXJnZXQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNDb25uZWN0ZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXllclByb3RvY29sKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InRvUm91dGUoKUxvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0dW5uZWxQcm94eShMb3JnL2FwYWNoZS9odHRwL0h0dHBIb3N0O1opViIvPgotCQk8bWV0aG9kIG5hbWU9InR1bm5lbFRhcmdldChaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvSG9zdE5hbWVSZXNvbHZlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InJlc29sdmUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL25ldC9JbmV0QWRkcmVzczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvTGF5ZXJlZFNvY2tldEZhY3RvcnkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vc2NoZW1lL1NvY2tldEZhY3RvcnkiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTb2NrZXQoTGphdmEvbmV0L1NvY2tldDtMamF2YS9sYW5nL1N0cmluZztJWilMamF2YS9uZXQvU29ja2V0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3NjaGVtZS9QbGFpblNvY2tldEZhY3RvcnkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3NjaGVtZS9Tb2NrZXRGYWN0b3J5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvSG9zdE5hbWVSZXNvbHZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvY2tldEZhY3RvcnkoKUxvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvUGxhaW5Tb2NrZXRGYWN0b3J5OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3NjaGVtZS9TY2hlbWUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvU29ja2V0RmFjdG9yeTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0UG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvY2tldEZhY3RvcnkoKUxvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvU29ja2V0RmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0xheWVyZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlUG9ydChJKUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvU2NoZW1lUmVnaXN0cnkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0KExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2FwYWNoZS9odHRwL2Nvbm4vc2NoZW1lL1NjaGVtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2hlbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvU2NoZW1lOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNjaGVtZShMb3JnL2FwYWNoZS9odHRwL0h0dHBIb3N0OylMb3JnL2FwYWNoZS9odHRwL2Nvbm4vc2NoZW1lL1NjaGVtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2hlbWVOYW1lcygpTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyKExvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvU2NoZW1lOylMb3JnL2FwYWNoZS9odHRwL2Nvbm4vc2NoZW1lL1NjaGVtZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJdGVtcyhMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvU2NoZW1lOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3NjaGVtZS9Tb2NrZXRGYWN0b3J5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29ubmVjdFNvY2tldChMamF2YS9uZXQvU29ja2V0O0xqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9uZXQvSW5ldEFkZHJlc3M7SUxvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUxqYXZhL25ldC9Tb2NrZXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU29ja2V0KClMamF2YS9uZXQvU29ja2V0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2VjdXJlKExqYXZhL25ldC9Tb2NrZXQ7KVoiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9zc2wvQWJzdHJhY3RWZXJpZmllciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9zc2wvWDUwOUhvc3RuYW1lVmVyaWZpZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhY2NlcHRhYmxlQ291bnRyeVdpbGRjYXJkKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY291bnREb3RzKExqYXZhL2xhbmcvU3RyaW5nOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q05zKExqYXZhL3NlY3VyaXR5L2NlcnQvWDUwOUNlcnRpZmljYXRlOylbTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RE5TU3ViamVjdEFsdHMoTGphdmEvc2VjdXJpdHkvY2VydC9YNTA5Q2VydGlmaWNhdGU7KVtMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2ZXJpZnkoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9zc2wvQWxsb3dBbGxIb3N0bmFtZVZlcmlmaWVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9zc2wvQWJzdHJhY3RWZXJpZmllciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3NzbC9Ccm93c2VyQ29tcGF0SG9zdG5hbWVWZXJpZmllciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vc3NsL0Fic3RyYWN0VmVyaWZpZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9zc2wvU1NMU29ja2V0RmFjdG9yeSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvTGF5ZXJlZFNvY2tldEZhY3RvcnkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvS2V5U3RvcmU7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvc2VjdXJpdHkvS2V5U3RvcmU7TGphdmEvc2VjdXJpdHkvU2VjdXJlUmFuZG9tO0xvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvSG9zdE5hbWVSZXNvbHZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9zZWN1cml0eS9LZXlTdG9yZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9zZWN1cml0eS9LZXlTdG9yZTtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9zZWN1cml0eS9LZXlTdG9yZTtMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9LZXlTdG9yZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEhvc3RuYW1lVmVyaWZpZXIoKUxvcmcvYXBhY2hlL2h0dHAvY29ubi9zc2wvWDUwOUhvc3RuYW1lVmVyaWZpZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U29ja2V0RmFjdG9yeSgpTG9yZy9hcGFjaGUvaHR0cC9jb25uL3NzbC9TU0xTb2NrZXRGYWN0b3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhvc3RuYW1lVmVyaWZpZXIoTG9yZy9hcGFjaGUvaHR0cC9jb25uL3NzbC9YNTA5SG9zdG5hbWVWZXJpZmllcjspViIvPgotCQk8ZmllbGQgbmFtZT0iQUxMT1dfQUxMX0hPU1ROQU1FX1ZFUklGSUVSIi8+Ci0JCTxmaWVsZCBuYW1lPSJCUk9XU0VSX0NPTVBBVElCTEVfSE9TVE5BTUVfVkVSSUZJRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNTTCIvPgotCQk8ZmllbGQgbmFtZT0iU1NMVjIiLz4KLQkJPGZpZWxkIG5hbWU9IlNUUklDVF9IT1NUTkFNRV9WRVJJRklFUiIvPgotCQk8ZmllbGQgbmFtZT0iVExTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vc3NsL1N0cmljdEhvc3RuYW1lVmVyaWZpZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3NzbC9BYnN0cmFjdFZlcmlmaWVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vc3NsL1g1MDlIb3N0bmFtZVZlcmlmaWVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmF4L25ldC9zc2wvSG9zdG5hbWVWZXJpZmllciIvPgotCQk8bWV0aG9kIG5hbWU9InZlcmlmeShMamF2YS9sYW5nL1N0cmluZztMamF2YS9zZWN1cml0eS9jZXJ0L1g1MDlDZXJ0aWZpY2F0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InZlcmlmeShMamF2YS9sYW5nL1N0cmluZztMamF2YXgvbmV0L3NzbC9TU0xTb2NrZXQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2ZXJpZnkoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3V0aWwvSW5ldEFkZHJlc3NVdGlscyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0lQdjRBZGRyZXNzKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJUHY2QWRkcmVzcyhMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSVB2NkhleENvbXByZXNzZWRBZGRyZXNzKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJUHY2U3RkQWRkcmVzcyhMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ2xpZW50Q29va2llIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZSIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zQXR0cmlidXRlKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTU1FTlRVUkxfQVRUUiIvPgotCQk8ZmllbGQgbmFtZT0iQ09NTUVOVF9BVFRSIi8+Ci0JCTxmaWVsZCBuYW1lPSJESVNDQVJEX0FUVFIiLz4KLQkJPGZpZWxkIG5hbWU9IkRPTUFJTl9BVFRSIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFBJUkVTX0FUVFIiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9BR0VfQVRUUiIvPgotCQk8ZmllbGQgbmFtZT0iUEFUSF9BVFRSIi8+Ci0JCTxmaWVsZCBuYW1lPSJQT1JUX0FUVFIiLz4KLQkJPGZpZWxkIG5hbWU9IlNFQ1VSRV9BVFRSIi8+Ci0JCTxmaWVsZCBuYW1lPSJWRVJTSU9OX0FUVFIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21tZW50KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb21tZW50VVJMKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb21haW4oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4cGlyeURhdGUoKUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQYXRoKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3J0cygpW0kiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVyc2lvbigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRXhwaXJlZChMamF2YS91dGlsL0RhdGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1BlcnNpc3RlbnQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NlY3VyZSgpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llQXR0cmlidXRlSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaChMb3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWU7TG9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llT3JpZ2luOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTG9yZy9hcGFjaGUvaHR0cC9jb29raWUvU2V0Q29va2llO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idmFsaWRhdGUoTG9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llO0xvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZU9yaWdpbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llSWRlbnRpdHlDb21wYXJhdG9yIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2lvL1NlcmlhbGl6YWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL3V0aWwvQ29tcGFyYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbXBhcmUoTG9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llO0xvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZTspSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llT3JpZ2luIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztJTGphdmEvbGFuZy9TdHJpbmc7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SG9zdCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGF0aCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9ydCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2VjdXJlKClaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVQYXRoQ29tcGFyYXRvciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9pby9TZXJpYWxpemFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS91dGlsL0NvbXBhcmF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb21wYXJlKExvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZTtMb3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWU7KUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZVNwZWMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0Q29va2llcyhMamF2YS91dGlsL0xpc3Q7KUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWZXJzaW9uKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVyc2lvbkhlYWRlcigpTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWF0Y2goTG9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llO0xvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZU9yaWdpbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKExvcmcvYXBhY2hlL2h0dHAvSGVhZGVyO0xvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZU9yaWdpbjspTGphdmEvdXRpbC9MaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbGlkYXRlKExvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZTtMb3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVPcmlnaW47KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZVNwZWNGYWN0b3J5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld0luc3RhbmNlKExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUxvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZVNwZWM7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVTcGVjUmVnaXN0cnkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29va2llU3BlYyhMamF2YS9sYW5nL1N0cmluZzspTG9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llU3BlYzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb29raWVTcGVjKExqYXZhL2xhbmcvU3RyaW5nO0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUxvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZVNwZWM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3BlY05hbWVzKClMamF2YS91dGlsL0xpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXIoTGphdmEvbGFuZy9TdHJpbmc7TG9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llU3BlY0ZhY3Rvcnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJdGVtcyhMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXIoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL01hbGZvcm1lZENvb2tpZUV4Y2VwdGlvbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9Qcm90b2NvbEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb29raWUvU00iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT09LSUUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPT0tJRTIiLz4KLQkJPGZpZWxkIG5hbWU9IlNFVF9DT09LSUUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFVF9DT09LSUUyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9TZXRDb29raWUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29tbWVudChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERvbWFpbihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEV4cGlyeURhdGUoTGphdmEvdXRpbC9EYXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGF0aChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNlY3VyZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYWx1ZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZlcnNpb24oSSlWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9TZXRDb29raWUyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL1NldENvb2tpZSIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbW1lbnRVUkwoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREaXNjYXJkKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBvcnRzKFtJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL3BhcmFtcy9Db29raWVTcGVjUE5hbWVzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iREFURV9QQVRURVJOUyIvPgotCQk8ZmllbGQgbmFtZT0iU0lOR0xFX0NPT0tJRV9IRUFERVIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL3BhcmFtcy9Db29raWVTcGVjUGFyYW1CZWFuIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwQWJzdHJhY3RQYXJhbUJlYW4iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERhdGVQYXR0ZXJucyhMamF2YS91dGlsL0NvbGxlY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTaW5nbGVIZWFkZXIoWilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2VudGl0eS9BYnN0cmFjdEh0dHBFbnRpdHkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwRW50aXR5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2h1bmtlZChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50RW5jb2RpbmcoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50RW5jb2RpbmcoTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50VHlwZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnRUeXBlKExvcmcvYXBhY2hlL2h0dHAvSGVhZGVyOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJjaHVua2VkIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb250ZW50RW5jb2RpbmciLz4KLQkJPGZpZWxkIG5hbWU9ImNvbnRlbnRUeXBlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2VudGl0eS9CYXNpY0h0dHBFbnRpdHkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvZW50aXR5L0Fic3RyYWN0SHR0cEVudGl0eSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbnRlbnQoTGphdmEvaW8vSW5wdXRTdHJlYW07KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50TGVuZ3RoKEopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvQnVmZmVyZWRIdHRwRW50aXR5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2VudGl0eS9IdHRwRW50aXR5V3JhcHBlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL0h0dHBFbnRpdHk7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvZW50aXR5L0J5dGVBcnJheUVudGl0eSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvQWJzdHJhY3RIdHRwRW50aXR5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0IpViIvPgotCQk8ZmllbGQgbmFtZT0iY29udGVudCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvQ29udGVudExlbmd0aFN0cmF0ZWd5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGVybWluZUxlbmd0aChMb3JnL2FwYWNoZS9odHRwL0h0dHBNZXNzYWdlOylKIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSFVOS0VEIi8+Ci0JCTxmaWVsZCBuYW1lPSJJREVOVElUWSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvQ29udGVudFByb2R1Y2VyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlVG8oTGphdmEvaW8vT3V0cHV0U3RyZWFtOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2VudGl0eS9FbnRpdHlUZW1wbGF0ZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvQWJzdHJhY3RIdHRwRW50aXR5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvZW50aXR5L0NvbnRlbnRQcm9kdWNlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvRmlsZUVudGl0eSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvQWJzdHJhY3RIdHRwRW50aXR5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvaW8vRmlsZTtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8ZmllbGQgbmFtZT0iZmlsZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvSHR0cEVudGl0eVdyYXBwZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwRW50aXR5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvSHR0cEVudGl0eTspViIvPgotCQk8ZmllbGQgbmFtZT0id3JhcHBlZEVudGl0eSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvSW5wdXRTdHJlYW1FbnRpdHkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvZW50aXR5L0Fic3RyYWN0SHR0cEVudGl0eSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTtKKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvZW50aXR5L1NlcmlhbGl6YWJsZUVudGl0eSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvQWJzdHJhY3RIdHRwRW50aXR5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2lvL1NlcmlhbGl6YWJsZTtaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvZW50aXR5L1N0cmluZ0VudGl0eSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvQWJzdHJhY3RIdHRwRW50aXR5Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbnRlbnQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9BYnN0cmFjdEh0dHBDbGllbnRDb25uZWN0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cENsaWVudENvbm5lY3Rpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRPcGVuKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRW50aXR5RGVzZXJpYWxpemVyKClMb3JnL2FwYWNoZS9odHRwL2ltcGwvZW50aXR5L0VudGl0eURlc2VyaWFsaXplcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVFbnRpdHlTZXJpYWxpemVyKClMb3JnL2FwYWNoZS9odHRwL2ltcGwvZW50aXR5L0VudGl0eVNlcmlhbGl6ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSHR0cFJlc3BvbnNlRmFjdG9yeSgpTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2VGYWN0b3J5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVJlcXVlc3RXcml0ZXIoTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uT3V0cHV0QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUxvcmcvYXBhY2hlL2h0dHAvaW8vSHR0cE1lc3NhZ2VXcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlUmVzcG9uc2VQYXJzZXIoTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uSW5wdXRCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2VGYWN0b3J5O0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUxvcmcvYXBhY2hlL2h0dHAvaW8vSHR0cE1lc3NhZ2VQYXJzZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZG9GbHVzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uSW5wdXRCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uT3V0cHV0QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9BYnN0cmFjdEh0dHBTZXJ2ZXJDb25uZWN0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFNlcnZlckNvbm5lY3Rpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnRPcGVuKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRW50aXR5RGVzZXJpYWxpemVyKClMb3JnL2FwYWNoZS9odHRwL2ltcGwvZW50aXR5L0VudGl0eURlc2VyaWFsaXplcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVFbnRpdHlTZXJpYWxpemVyKClMb3JnL2FwYWNoZS9odHRwL2ltcGwvZW50aXR5L0VudGl0eVNlcmlhbGl6ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSHR0cFJlcXVlc3RGYWN0b3J5KClMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0RmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVSZXF1ZXN0UGFyc2VyKExvcmcvYXBhY2hlL2h0dHAvaW8vU2Vzc2lvbklucHV0QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3RGYWN0b3J5O0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUxvcmcvYXBhY2hlL2h0dHAvaW8vSHR0cE1lc3NhZ2VQYXJzZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlUmVzcG9uc2VXcml0ZXIoTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uT3V0cHV0QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUxvcmcvYXBhY2hlL2h0dHAvaW8vSHR0cE1lc3NhZ2VXcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZG9GbHVzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uSW5wdXRCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uT3V0cHV0QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9EZWZhdWx0Q29ubmVjdGlvblJldXNlU3RyYXRlZ3kiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9Db25uZWN0aW9uUmV1c2VTdHJhdGVneSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVRva2VuSXRlcmF0b3IoTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXJJdGVyYXRvcjspTG9yZy9hcGFjaGUvaHR0cC9Ub2tlbkl0ZXJhdG9yOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL0RlZmF1bHRIdHRwQ2xpZW50Q29ubmVjdGlvbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL1NvY2tldEh0dHBDbGllbnRDb25uZWN0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvRGVmYXVsdEh0dHBSZXF1ZXN0RmFjdG9yeSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0RmFjdG9yeSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL0RlZmF1bHRIdHRwUmVzcG9uc2VGYWN0b3J5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlRmFjdG9yeSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL1JlYXNvblBocmFzZUNhdGFsb2c7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZXRlcm1pbmVMb2NhbGUoTG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspTGphdmEvdXRpbC9Mb2NhbGU7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJyZWFzb25DYXRhbG9nIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvRGVmYXVsdEh0dHBTZXJ2ZXJDb25uZWN0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvU29ja2V0SHR0cFNlcnZlckNvbm5lY3Rpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9FbmdsaXNoUmVhc29uUGhyYXNlQ2F0YWxvZyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL1JlYXNvblBocmFzZUNhdGFsb2ciLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPGZpZWxkIG5hbWU9IklOU1RBTkNFIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvSHR0cENvbm5lY3Rpb25NZXRyaWNzSW1wbCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBDb25uZWN0aW9uTWV0cmljcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL2lvL0h0dHBUcmFuc3BvcnRNZXRyaWNzO0xvcmcvYXBhY2hlL2h0dHAvaW8vSHR0cFRyYW5zcG9ydE1ldHJpY3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmNyZW1lbnRSZXF1ZXN0Q291bnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmNyZW1lbnRSZXNwb25zZUNvdW50KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TWV0cmljKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJSRUNFSVZFRF9CWVRFU19DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iUkVRVUVTVF9DT1VOVCIvPgotCQk8ZmllbGQgbmFtZT0iUkVTUE9OU0VfQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFTlRfQllURVNfQ09VTlQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9Ob0Nvbm5lY3Rpb25SZXVzZVN0cmF0ZWd5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvQ29ubmVjdGlvblJldXNlU3RyYXRlZ3kiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9Tb2NrZXRIdHRwQ2xpZW50Q29ubmVjdGlvbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL0Fic3RyYWN0SHR0cENsaWVudENvbm5lY3Rpb24iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBJbmV0Q29ubmVjdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydE5vdE9wZW4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJiaW5kKExqYXZhL25ldC9Tb2NrZXQ7TG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVNlc3Npb25JbnB1dEJ1ZmZlcihMamF2YS9uZXQvU29ja2V0O0lMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylMb3JnL2FwYWNoZS9odHRwL2lvL1Nlc3Npb25JbnB1dEJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVTZXNzaW9uT3V0cHV0QnVmZmVyKExqYXZhL25ldC9Tb2NrZXQ7SUxvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUxvcmcvYXBhY2hlL2h0dHAvaW8vU2Vzc2lvbk91dHB1dEJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb2NrZXQoKUxqYXZhL25ldC9Tb2NrZXQ7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvU29ja2V0SHR0cFNlcnZlckNvbm5lY3Rpb24iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9BYnN0cmFjdEh0dHBTZXJ2ZXJDb25uZWN0aW9uIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwSW5ldENvbm5lY3Rpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnROb3RPcGVuKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmluZChMamF2YS9uZXQvU29ja2V0O0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVIdHRwRGF0YVJlY2VpdmVyKExqYXZhL25ldC9Tb2NrZXQ7SUxvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUxvcmcvYXBhY2hlL2h0dHAvaW8vU2Vzc2lvbklucHV0QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUh0dHBEYXRhVHJhbnNtaXR0ZXIoTGphdmEvbmV0L1NvY2tldDtJTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uT3V0cHV0QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvY2tldCgpTGphdmEvbmV0L1NvY2tldDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9hdXRoL0F1dGhTY2hlbWVCYXNlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvYXV0aC9BdXRoU2NoZW1lIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQcm94eSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlQ2hhbGxlbmdlKExvcmcvYXBhY2hlL2h0dHAvdXRpbC9DaGFyQXJyYXlCdWZmZXI7SUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2F1dGgvQmFzaWNTY2hlbWUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9hdXRoL1JGQzI2MTdTY2hlbWUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdXRoZW50aWNhdGUoTG9yZy9hcGFjaGUvaHR0cC9hdXRoL0NyZWRlbnRpYWxzO0xqYXZhL2xhbmcvU3RyaW5nO1opTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvYXV0aC9CYXNpY1NjaGVtZUZhY3RvcnkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9hdXRoL0F1dGhTY2hlbWVGYWN0b3J5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvYXV0aC9EaWdlc3RTY2hlbWUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9hdXRoL1JGQzI2MTdTY2hlbWUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDbm9uY2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im92ZXJyaWRlUGFyYW10ZXIoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9hdXRoL0RpZ2VzdFNjaGVtZUZhY3RvcnkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9hdXRoL0F1dGhTY2hlbWVGYWN0b3J5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvYXV0aC9OVExNRW5naW5lIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlVHlwZTFNc2coTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdlbmVyYXRlVHlwZTNNc2coTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2F1dGgvTlRMTUVuZ2luZUV4Y2VwdGlvbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9hdXRoL0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvYXV0aC9OVExNU2NoZW1lIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvYXV0aC9BdXRoU2NoZW1lQmFzZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL2ltcGwvYXV0aC9OVExNRW5naW5lOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvYXV0aC9SRkMyNjE3U2NoZW1lIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvYXV0aC9BdXRoU2NoZW1lQmFzZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtZXRlcnMoKUxqYXZhL3V0aWwvTWFwOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2F1dGgvVW5zdXBwb3J0ZWREaWdlc3RBbGdvcml0aG1FeGNlcHRpb24iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2NsaWVudC9BYnN0cmFjdEF1dGhlbnRpY2F0aW9uSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9BdXRoZW50aWNhdGlvbkhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdXRoUHJlZmVyZW5jZXMoKUxqYXZhL3V0aWwvTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZUNoYWxsZW5nZXMoW0xvcmcvYXBhY2hlL2h0dHAvSGVhZGVyOylMamF2YS91dGlsL01hcDsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jbGllbnQvQWJzdHJhY3RIdHRwQ2xpZW50IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0h0dHBDbGllbnQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9jb25uL0NsaWVudENvbm5lY3Rpb25NYW5hZ2VyO0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSZXF1ZXN0SW50ZXJjZXB0b3IoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdEludGVyY2VwdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUmVxdWVzdEludGVyY2VwdG9yKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3RJbnRlcmNlcHRvcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSZXNwb25zZUludGVyY2VwdG9yKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlSW50ZXJjZXB0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSZXNwb25zZUludGVyY2VwdG9yKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlSW50ZXJjZXB0b3I7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJSZXF1ZXN0SW50ZXJjZXB0b3JzKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJSZXNwb25zZUludGVyY2VwdG9ycygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUF1dGhTY2hlbWVSZWdpc3RyeSgpTG9yZy9hcGFjaGUvaHR0cC9hdXRoL0F1dGhTY2hlbWVSZWdpc3RyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDbGllbnRDb25uZWN0aW9uTWFuYWdlcigpTG9yZy9hcGFjaGUvaHR0cC9jb25uL0NsaWVudENvbm5lY3Rpb25NYW5hZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUNsaWVudFJlcXVlc3REaXJlY3RvcihMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBSZXF1ZXN0RXhlY3V0b3I7TG9yZy9hcGFjaGUvaHR0cC9jb25uL0NsaWVudENvbm5lY3Rpb25NYW5hZ2VyO0xvcmcvYXBhY2hlL2h0dHAvQ29ubmVjdGlvblJldXNlU3RyYXRlZ3k7TG9yZy9hcGFjaGUvaHR0cC9jb25uL0Nvbm5lY3Rpb25LZWVwQWxpdmVTdHJhdGVneTtMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGVQbGFubmVyO0xvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cFByb2Nlc3NvcjtMb3JnL2FwYWNoZS9odHRwL2NsaWVudC9IdHRwUmVxdWVzdFJldHJ5SGFuZGxlcjtMb3JnL2FwYWNoZS9odHRwL2NsaWVudC9SZWRpcmVjdEhhbmRsZXI7TG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvQXV0aGVudGljYXRpb25IYW5kbGVyO0xvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0F1dGhlbnRpY2F0aW9uSGFuZGxlcjtMb3JnL2FwYWNoZS9odHRwL2NsaWVudC9Vc2VyVG9rZW5IYW5kbGVyO0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUxvcmcvYXBhY2hlL2h0dHAvY2xpZW50L1JlcXVlc3REaXJlY3RvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDb25uZWN0aW9uS2VlcEFsaXZlU3RyYXRlZ3koKUxvcmcvYXBhY2hlL2h0dHAvY29ubi9Db25uZWN0aW9uS2VlcEFsaXZlU3RyYXRlZ3k7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ29ubmVjdGlvblJldXNlU3RyYXRlZ3koKUxvcmcvYXBhY2hlL2h0dHAvQ29ubmVjdGlvblJldXNlU3RyYXRlZ3k7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ29va2llU3BlY1JlZ2lzdHJ5KClMb3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVTcGVjUmVnaXN0cnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ29va2llU3RvcmUoKUxvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0Nvb2tpZVN0b3JlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUNyZWRlbnRpYWxzUHJvdmlkZXIoKUxvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0NyZWRlbnRpYWxzUHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSHR0cENvbnRleHQoKUxvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSHR0cFBhcmFtcygpTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVIdHRwUHJvY2Vzc29yKClMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0Jhc2ljSHR0cFByb2Nlc3NvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVIdHRwUmVxdWVzdFJldHJ5SGFuZGxlcigpTG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvSHR0cFJlcXVlc3RSZXRyeUhhbmRsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSHR0cFJvdXRlUGxhbm5lcigpTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlUGxhbm5lcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVQcm94eUF1dGhlbnRpY2F0aW9uSGFuZGxlcigpTG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvQXV0aGVudGljYXRpb25IYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVJlZGlyZWN0SGFuZGxlcigpTG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvUmVkaXJlY3RIYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVJlcXVlc3RFeGVjdXRvcigpTG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwUmVxdWVzdEV4ZWN1dG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVRhcmdldEF1dGhlbnRpY2F0aW9uSGFuZGxlcigpTG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvQXV0aGVudGljYXRpb25IYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVVzZXJUb2tlbkhhbmRsZXIoKUxvcmcvYXBhY2hlL2h0dHAvY2xpZW50L1VzZXJUb2tlbkhhbmRsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGV0ZXJtaW5lUGFyYW1zKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3Q7KUxvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXV0aFNjaGVtZXMoKUxvcmcvYXBhY2hlL2h0dHAvYXV0aC9BdXRoU2NoZW1lUmVnaXN0cnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ubmVjdGlvbktlZXBBbGl2ZVN0cmF0ZWd5KClMb3JnL2FwYWNoZS9odHRwL2Nvbm4vQ29ubmVjdGlvbktlZXBBbGl2ZVN0cmF0ZWd5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb25SZXVzZVN0cmF0ZWd5KClMb3JnL2FwYWNoZS9odHRwL0Nvbm5lY3Rpb25SZXVzZVN0cmF0ZWd5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvb2tpZVNwZWNzKClMb3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVTcGVjUmVnaXN0cnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29va2llU3RvcmUoKUxvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0Nvb2tpZVN0b3JlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENyZWRlbnRpYWxzUHJvdmlkZXIoKUxvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0NyZWRlbnRpYWxzUHJvdmlkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SHR0cFByb2Nlc3NvcigpTG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9CYXNpY0h0dHBQcm9jZXNzb3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SHR0cFJlcXVlc3RSZXRyeUhhbmRsZXIoKUxvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0h0dHBSZXF1ZXN0UmV0cnlIYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3h5QXV0aGVudGljYXRpb25IYW5kbGVyKClMb3JnL2FwYWNoZS9odHRwL2NsaWVudC9BdXRoZW50aWNhdGlvbkhhbmRsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVkaXJlY3RIYW5kbGVyKClMb3JnL2FwYWNoZS9odHRwL2NsaWVudC9SZWRpcmVjdEhhbmRsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVxdWVzdEV4ZWN1dG9yKClMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBSZXF1ZXN0RXhlY3V0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVxdWVzdEludGVyY2VwdG9yKEkpTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdEludGVyY2VwdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVlc3RJbnRlcmNlcHRvckNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzcG9uc2VJbnRlcmNlcHRvcihJKUxvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlSW50ZXJjZXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzcG9uc2VJbnRlcmNlcHRvckNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um91dGVQbGFubmVyKClMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGVQbGFubmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRhcmdldEF1dGhlbnRpY2F0aW9uSGFuZGxlcigpTG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvQXV0aGVudGljYXRpb25IYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVzZXJUb2tlbkhhbmRsZXIoKUxvcmcvYXBhY2hlL2h0dHAvY2xpZW50L1VzZXJUb2tlbkhhbmRsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUmVxdWVzdEludGVyY2VwdG9yQnlDbGFzcyhMamF2YS9sYW5nL0NsYXNzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUmVzcG9uc2VJbnRlcmNlcHRvckJ5Q2xhc3MoTGphdmEvbGFuZy9DbGFzczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF1dGhTY2hlbWVzKExvcmcvYXBhY2hlL2h0dHAvYXV0aC9BdXRoU2NoZW1lUmVnaXN0cnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb29raWVTcGVjcyhMb3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVTcGVjUmVnaXN0cnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb29raWVTdG9yZShMb3JnL2FwYWNoZS9odHRwL2NsaWVudC9Db29raWVTdG9yZTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENyZWRlbnRpYWxzUHJvdmlkZXIoTG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvQ3JlZGVudGlhbHNQcm92aWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEh0dHBSZXF1ZXN0UmV0cnlIYW5kbGVyKExvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0h0dHBSZXF1ZXN0UmV0cnlIYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0S2VlcEFsaXZlU3RyYXRlZ3koTG9yZy9hcGFjaGUvaHR0cC9jb25uL0Nvbm5lY3Rpb25LZWVwQWxpdmVTdHJhdGVneTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhcmFtcyhMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJveHlBdXRoZW50aWNhdGlvbkhhbmRsZXIoTG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvQXV0aGVudGljYXRpb25IYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UmVkaXJlY3RIYW5kbGVyKExvcmcvYXBhY2hlL2h0dHAvY2xpZW50L1JlZGlyZWN0SGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJldXNlU3RyYXRlZ3koTG9yZy9hcGFjaGUvaHR0cC9Db25uZWN0aW9uUmV1c2VTdHJhdGVneTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFJvdXRlUGxhbm5lcihMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGVQbGFubmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGFyZ2V0QXV0aGVudGljYXRpb25IYW5kbGVyKExvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0F1dGhlbnRpY2F0aW9uSGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZXJUb2tlbkhhbmRsZXIoTG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvVXNlclRva2VuSGFuZGxlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2NsaWVudC9CYXNpY0Nvb2tpZVN0b3JlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0Nvb2tpZVN0b3JlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkQ29va2llcyhbTG9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY2xpZW50L0Jhc2ljQ3JlZGVudGlhbHNQcm92aWRlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9DcmVkZW50aWFsc1Byb3ZpZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY2xpZW50L0Jhc2ljUmVzcG9uc2VIYW5kbGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L1Jlc3BvbnNlSGFuZGxlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZVJlc3BvbnNlKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jbGllbnQvQ2xpZW50UGFyYW1zU3RhY2siIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0Fic3RyYWN0SHR0cFBhcmFtcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL2ltcGwvY2xpZW50L0NsaWVudFBhcmFtc1N0YWNrOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvaW1wbC9jbGllbnQvQ2xpZW50UGFyYW1zU3RhY2s7TG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtcztMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zO0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7TG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zO0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7TG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtcztMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXBwbGljYXRpb25QYXJhbXMoKUxvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2xpZW50UGFyYW1zKClMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE92ZXJyaWRlUGFyYW1zKClMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlcXVlc3RQYXJhbXMoKUxvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJhcHBsaWNhdGlvblBhcmFtcyIvPgotCQk8ZmllbGQgbmFtZT0iY2xpZW50UGFyYW1zIi8+Ci0JCTxmaWVsZCBuYW1lPSJvdmVycmlkZVBhcmFtcyIvPgotCQk8ZmllbGQgbmFtZT0icmVxdWVzdFBhcmFtcyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2NsaWVudC9EZWZhdWx0Q29ubmVjdGlvbktlZXBBbGl2ZVN0cmF0ZWd5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9Db25uZWN0aW9uS2VlcEFsaXZlU3RyYXRlZ3kiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jbGllbnQvRGVmYXVsdEh0dHBDbGllbnQiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jbGllbnQvQWJzdHJhY3RIdHRwQ2xpZW50Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvY29ubi9DbGllbnRDb25uZWN0aW9uTWFuYWdlcjtMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jbGllbnQvRGVmYXVsdEh0dHBSZXF1ZXN0UmV0cnlIYW5kbGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0h0dHBSZXF1ZXN0UmV0cnlIYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXRyeUNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNSZXF1ZXN0U2VudFJldHJ5RW5hYmxlZCgpWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2NsaWVudC9EZWZhdWx0UHJveHlBdXRoZW50aWNhdGlvbkhhbmRsZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jbGllbnQvQWJzdHJhY3RBdXRoZW50aWNhdGlvbkhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jbGllbnQvRGVmYXVsdFJlZGlyZWN0SGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9SZWRpcmVjdEhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jbGllbnQvRGVmYXVsdFJlcXVlc3REaXJlY3RvciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9SZXF1ZXN0RGlyZWN0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwUmVxdWVzdEV4ZWN1dG9yO0xvcmcvYXBhY2hlL2h0dHAvY29ubi9DbGllbnRDb25uZWN0aW9uTWFuYWdlcjtMb3JnL2FwYWNoZS9odHRwL0Nvbm5lY3Rpb25SZXVzZVN0cmF0ZWd5O0xvcmcvYXBhY2hlL2h0dHAvY29ubi9Db25uZWN0aW9uS2VlcEFsaXZlU3RyYXRlZ3k7TG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlUGxhbm5lcjtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBQcm9jZXNzb3I7TG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvSHR0cFJlcXVlc3RSZXRyeUhhbmRsZXI7TG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvUmVkaXJlY3RIYW5kbGVyO0xvcmcvYXBhY2hlL2h0dHAvY2xpZW50L0F1dGhlbnRpY2F0aW9uSGFuZGxlcjtMb3JnL2FwYWNoZS9odHRwL2NsaWVudC9BdXRoZW50aWNhdGlvbkhhbmRsZXI7TG9yZy9hcGFjaGUvaHR0cC9jbGllbnQvVXNlclRva2VuSGFuZGxlcjtMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ29ubmVjdFJlcXVlc3QoTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlO0xvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7KUxvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVHVubmVsVG9Qcm94eShMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGU7SUxvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUdW5uZWxUb1RhcmdldChMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGU7TG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGVybWluZVJvdXRlKExvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7TG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdDtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXN0YWJsaXNoUm91dGUoTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlO0xvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVSZXNwb25zZShMb3JnL2FwYWNoZS9odHRwL2ltcGwvY2xpZW50L1JvdXRlZFJlcXVlc3Q7TG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2U7TG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2NsaWVudC9Sb3V0ZWRSZXF1ZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbGVhc2VDb25uZWN0aW9uKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmV3cml0ZVJlcXVlc3RVUkkoTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2NsaWVudC9SZXF1ZXN0V3JhcHBlcjtMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbm5NYW5hZ2VyIi8+Ci0JCTxmaWVsZCBuYW1lPSJodHRwUHJvY2Vzc29yIi8+Ci0JCTxmaWVsZCBuYW1lPSJrZWVwQWxpdmVTdHJhdGVneSIvPgotCQk8ZmllbGQgbmFtZT0ibWFuYWdlZENvbm4iLz4KLQkJPGZpZWxkIG5hbWU9InBhcmFtcyIvPgotCQk8ZmllbGQgbmFtZT0icmVkaXJlY3RIYW5kbGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXF1ZXN0RXhlYyIvPgotCQk8ZmllbGQgbmFtZT0icmV0cnlIYW5kbGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXVzZVN0cmF0ZWd5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJyb3V0ZVBsYW5uZXIiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jbGllbnQvRGVmYXVsdFRhcmdldEF1dGhlbnRpY2F0aW9uSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2NsaWVudC9BYnN0cmFjdEF1dGhlbnRpY2F0aW9uSGFuZGxlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2NsaWVudC9EZWZhdWx0VXNlclRva2VuSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2NsaWVudC9Vc2VyVG9rZW5IYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY2xpZW50L0VudGl0eUVuY2xvc2luZ1JlcXVlc3RXcmFwcGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY2xpZW50L1JlcXVlc3RXcmFwcGVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwRW50aXR5RW5jbG9zaW5nUmVxdWVzdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL0h0dHBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY2xpZW50L1JlZGlyZWN0TG9jYXRpb25zIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZChMamF2YS9uZXQvVVJJOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnMoTGphdmEvbmV0L1VSSTspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZShMamF2YS9uZXQvVVJJOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY2xpZW50L1JlcXVlc3RXcmFwcGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvQWJzdHJhY3RIdHRwTWVzc2FnZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY2xpZW50L21ldGhvZHMvSHR0cFVyaVJlcXVlc3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4ZWNDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE9yaWdpbmFsKClMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImluY3JlbWVudEV4ZWNDb3VudCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUmVwZWF0YWJsZSgpWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlc2V0SGVhZGVycygpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE1ldGhvZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3RvY29sVmVyc2lvbihMb3JnL2FwYWNoZS9odHRwL1Byb3RvY29sVmVyc2lvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVSSShMamF2YS9uZXQvVVJJOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY2xpZW50L1JvdXRlZFJlcXVlc3QiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvaW1wbC9jbGllbnQvUmVxdWVzdFdyYXBwZXI7TG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVxdWVzdCgpTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2NsaWVudC9SZXF1ZXN0V3JhcHBlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3V0ZSgpTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlOyIvPgotCQk8ZmllbGQgbmFtZT0icmVxdWVzdCIvPgotCQk8ZmllbGQgbmFtZT0icm91dGUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jbGllbnQvVHVubmVsUmVmdXNlZEV4Y2VwdGlvbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVzcG9uc2UoKUxvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vQWJzdHJhY3RDbGllbnRDb25uQWRhcHRlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vTWFuYWdlZENsaWVudENvbm5lY3Rpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9jb25uL0NsaWVudENvbm5lY3Rpb25NYW5hZ2VyO0xvcmcvYXBhY2hlL2h0dHAvY29ubi9PcGVyYXRlZENsaWVudENvbm5lY3Rpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhc3NlcnROb3RBYm9ydGVkKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0VmFsaWQoTG9yZy9hcGFjaGUvaHR0cC9jb25uL09wZXJhdGVkQ2xpZW50Q29ubmVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRldGFjaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1hbmFnZXIoKUxvcmcvYXBhY2hlL2h0dHAvY29ubi9DbGllbnRDb25uZWN0aW9uTWFuYWdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXcmFwcGVkQ29ubmVjdGlvbigpTG9yZy9hcGFjaGUvaHR0cC9jb25uL09wZXJhdGVkQ2xpZW50Q29ubmVjdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL0Fic3RyYWN0UG9vbEVudHJ5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL2Nvbm4vQ2xpZW50Q29ubmVjdGlvbk9wZXJhdG9yO0xvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0YXRlKClMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsYXllclByb3RvY29sKExvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7TG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9Im9wZW4oTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlO0xvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7TG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YXRlKExqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2h1dGRvd25FbnRyeSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InR1bm5lbFByb3h5KExvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7WkxvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0dW5uZWxUYXJnZXQoWkxvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbm5PcGVyYXRvciIvPgotCQk8ZmllbGQgbmFtZT0iY29ubmVjdGlvbiIvPgotCQk8ZmllbGQgbmFtZT0icm91dGUiLz4KLQkJPGZpZWxkIG5hbWU9InN0YXRlIi8+Ci0JCTxmaWVsZCBuYW1lPSJ0cmFja2VyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9BYnN0cmFjdFBvb2xlZENvbm5BZGFwdGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9BYnN0cmFjdENsaWVudENvbm5BZGFwdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvY29ubi9DbGllbnRDb25uZWN0aW9uTWFuYWdlcjtMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9BYnN0cmFjdFBvb2xFbnRyeTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFzc2VydEF0dGFjaGVkKClWIi8+Ci0JCTxmaWVsZCBuYW1lPSJwb29sRW50cnkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL0RlZmF1bHRDbGllbnRDb25uZWN0aW9uIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvU29ja2V0SHR0cENsaWVudENvbm5lY3Rpb24iLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vT3BlcmF0ZWRDbGllbnRDb25uZWN0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9EZWZhdWx0Q2xpZW50Q29ubmVjdGlvbk9wZXJhdG9yIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29ubi9DbGllbnRDb25uZWN0aW9uT3BlcmF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9jb25uL3NjaGVtZS9TY2hlbWVSZWdpc3RyeTspViIvPgotCQk8bWV0aG9kIG5hbWU9InByZXBhcmVTb2NrZXQoTGphdmEvbmV0L1NvY2tldDtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0O0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPGZpZWxkIG5hbWU9InNjaGVtZVJlZ2lzdHJ5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9EZWZhdWx0SHR0cFJvdXRlUGxhbm5lciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGVQbGFubmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvU2NoZW1lUmVnaXN0cnk7KVYiLz4KLQkJPGZpZWxkIG5hbWU9InNjaGVtZVJlZ2lzdHJ5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9EZWZhdWx0UmVzcG9uc2VQYXJzZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9pby9BYnN0cmFjdE1lc3NhZ2VQYXJzZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uSW5wdXRCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0xpbmVQYXJzZXI7TG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2VGYWN0b3J5O0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL0lkbGVDb25uZWN0aW9uSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGQoTG9yZy9hcGFjaGUvaHR0cC9IdHRwQ29ubmVjdGlvbjtKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2VFeHBpcmVkQ29ubmVjdGlvbnMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZUlkbGVDb25uZWN0aW9ucyhKKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmUoTG9yZy9hcGFjaGUvaHR0cC9IdHRwQ29ubmVjdGlvbjspWiIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUFsbCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vTG9nZ2luZ1Nlc3Npb25JbnB1dEJ1ZmZlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2lvL1Nlc3Npb25JbnB1dEJ1ZmZlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL2lvL1Nlc3Npb25JbnB1dEJ1ZmZlcjtMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9XaXJlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9Mb2dnaW5nU2Vzc2lvbk91dHB1dEJ1ZmZlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2lvL1Nlc3Npb25PdXRwdXRCdWZmZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uT3V0cHV0QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL1dpcmU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL1Byb3h5U2VsZWN0b3JSb3V0ZVBsYW5uZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlUGxhbm5lciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL2Nvbm4vc2NoZW1lL1NjaGVtZVJlZ2lzdHJ5O0xqYXZhL25ldC9Qcm94eVNlbGVjdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2hvb3NlUHJveHkoTGphdmEvdXRpbC9MaXN0O0xvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7TG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdDtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylMamF2YS9uZXQvUHJveHk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGV0ZXJtaW5lUHJveHkoTG9yZy9hcGFjaGUvaHR0cC9IdHRwSG9zdDtMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0O0xvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7KUxvcmcvYXBhY2hlL2h0dHAvSHR0cEhvc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SG9zdChMamF2YS9uZXQvSW5ldFNvY2tldEFkZHJlc3M7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByb3h5U2VsZWN0b3IoKUxqYXZhL25ldC9Qcm94eVNlbGVjdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3h5U2VsZWN0b3IoTGphdmEvbmV0L1Byb3h5U2VsZWN0b3I7KVYiLz4KLQkJPGZpZWxkIG5hbWU9InByb3h5U2VsZWN0b3IiLz4KLQkJPGZpZWxkIG5hbWU9InNjaGVtZVJlZ2lzdHJ5Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9TaW5nbGVDbGllbnRDb25uTWFuYWdlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vQ2xpZW50Q29ubmVjdGlvbk1hbmFnZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtcztMb3JnL2FwYWNoZS9odHRwL2Nvbm4vc2NoZW1lL1NjaGVtZVJlZ2lzdHJ5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXNzZXJ0U3RpbGxVcCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUNvbm5lY3Rpb25PcGVyYXRvcihMb3JnL2FwYWNoZS9odHRwL2Nvbm4vc2NoZW1lL1NjaGVtZVJlZ2lzdHJ5OylMb3JnL2FwYWNoZS9odHRwL2Nvbm4vQ2xpZW50Q29ubmVjdGlvbk9wZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb24oTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlO0xqYXZhL2xhbmcvT2JqZWN0OylMb3JnL2FwYWNoZS9odHRwL2Nvbm4vTWFuYWdlZENsaWVudENvbm5lY3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmV2b2tlQ29ubmVjdGlvbigpViIvPgotCQk8ZmllbGQgbmFtZT0iTUlTVVNFX01FU1NBR0UiLz4KLQkJPGZpZWxkIG5hbWU9ImFsd2F5c1NodXREb3duIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb25uT3BlcmF0b3IiLz4KLQkJPGZpZWxkIG5hbWU9ImNvbm5lY3Rpb25FeHBpcmVzVGltZSIvPgotCQk8ZmllbGQgbmFtZT0iaXNTaHV0RG93biIvPgotCQk8ZmllbGQgbmFtZT0ibGFzdFJlbGVhc2VUaW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJtYW5hZ2VkQ29ubiIvPgotCQk8ZmllbGQgbmFtZT0ic2NoZW1lUmVnaXN0cnkiLz4KLQkJPGZpZWxkIG5hbWU9InVuaXF1ZVBvb2xFbnRyeSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vU2luZ2xlQ2xpZW50Q29ubk1hbmFnZXIkQ29ubkFkYXB0ZXIiIHNpbmNlPSIxIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vQWJzdHJhY3RQb29sZWRDb25uQWRhcHRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9TaW5nbGVDbGllbnRDb25uTWFuYWdlcjtMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9TaW5nbGVDbGllbnRDb25uTWFuYWdlciRQb29sRW50cnk7TG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9TaW5nbGVDbGllbnRDb25uTWFuYWdlciRQb29sRW50cnkiIHNpbmNlPSIxIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vQWJzdHJhY3RQb29sRW50cnkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vU2luZ2xlQ2xpZW50Q29ubk1hbmFnZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZSgpViIvPgotCQk8bWV0aG9kIG5hbWU9InNodXRkb3duKClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9XaXJlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9jb21tb25zL2xvZ2dpbmcvTG9nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlucHV0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlucHV0KExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5wdXQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnB1dChbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5wdXQoW0JJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3V0cHV0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9Im91dHB1dChMamF2YS9pby9JbnB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9Im91dHB1dChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9Im91dHB1dChbQilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3V0cHV0KFtCSUkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vQWJzdHJhY3RDb25uUG9vbCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi90c2NjbS9SZWZRdWV1ZUhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbG9zZUNvbm5lY3Rpb24oTG9yZy9hcGFjaGUvaHR0cC9jb25uL09wZXJhdGVkQ2xpZW50Q29ubmVjdGlvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsb3NlRXhwaXJlZENvbm5lY3Rpb25zKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvc2VJZGxlQ29ubmVjdGlvbnMoSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlbGV0ZUNsb3NlZENvbm5lY3Rpb25zKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5hYmxlQ29ubmVjdGlvbkdDKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZnJlZUVudHJ5KExvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL3RzY2NtL0Jhc2ljUG9vbEVudHJ5O1pKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW50cnkoTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlO0xqYXZhL2xhbmcvT2JqZWN0O0pMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUxvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL3RzY2NtL0Jhc2ljUG9vbEVudHJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZUxvc3RFbnRyeShMb3JnL2FwYWNoZS9odHRwL2Nvbm4vcm91dGluZy9IdHRwUm91dGU7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXF1ZXN0UG9vbEVudHJ5KExvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTtMamF2YS9sYW5nL09iamVjdDspTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vUG9vbEVudHJ5UmVxdWVzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaHV0ZG93bigpViIvPgotCQk8ZmllbGQgbmFtZT0iaWRsZUNvbm5IYW5kbGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJpc1NodXREb3duIi8+Ci0JCTxmaWVsZCBuYW1lPSJpc3N1ZWRDb25uZWN0aW9ucyIvPgotCQk8ZmllbGQgbmFtZT0ibnVtQ29ubmVjdGlvbnMiLz4KLQkJPGZpZWxkIG5hbWU9InBvb2xMb2NrIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZWZRdWV1ZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vQmFzaWNQb29sRW50cnkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL0Fic3RyYWN0UG9vbEVudHJ5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvY29ubi9DbGllbnRDb25uZWN0aW9uT3BlcmF0b3I7TG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlO0xqYXZhL2xhbmcvcmVmL1JlZmVyZW5jZVF1ZXVlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29ubmVjdGlvbigpTG9yZy9hcGFjaGUvaHR0cC9jb25uL09wZXJhdGVkQ2xpZW50Q29ubmVjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQbGFubmVkUm91dGUoKUxvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRXZWFrUmVmKClMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi90c2NjbS9CYXNpY1Bvb2xFbnRyeVJlZjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL3RzY2NtL0Jhc2ljUG9vbEVudHJ5UmVmIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL3JlZi9XZWFrUmVmZXJlbmNlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL3RzY2NtL0Jhc2ljUG9vbEVudHJ5O0xqYXZhL2xhbmcvcmVmL1JlZmVyZW5jZVF1ZXVlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um91dGUoKUxvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL3RzY2NtL0Jhc2ljUG9vbGVkQ29ubkFkYXB0ZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL0Fic3RyYWN0UG9vbGVkQ29ubkFkYXB0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vVGhyZWFkU2FmZUNsaWVudENvbm5NYW5hZ2VyO0xvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL0Fic3RyYWN0UG9vbEVudHJ5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9vbEVudHJ5KClMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi9BYnN0cmFjdFBvb2xFbnRyeTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL3RzY2NtL0Nvbm5Qb29sQnlSb3V0ZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vQWJzdHJhY3RDb25uUG9vbCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL2Nvbm4vQ2xpZW50Q29ubmVjdGlvbk9wZXJhdG9yO0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVFbnRyeShMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi90c2NjbS9Sb3V0ZVNwZWNpZmljUG9vbDtMb3JnL2FwYWNoZS9odHRwL2Nvbm4vQ2xpZW50Q29ubmVjdGlvbk9wZXJhdG9yOylMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi90c2NjbS9CYXNpY1Bvb2xFbnRyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVGcmVlQ29ublF1ZXVlKClMamF2YS91dGlsL1F1ZXVlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZVJvdXRlVG9Qb29sTWFwKClMamF2YS91dGlsL01hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVXYWl0aW5nVGhyZWFkUXVldWUoKUxqYXZhL3V0aWwvUXVldWU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZGVsZXRlRW50cnkoTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vQmFzaWNQb29sRW50cnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVMZWFzdFVzZWRFbnRyeSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb25zSW5Qb29sKExvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudHJ5QmxvY2tpbmcoTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlO0xqYXZhL2xhbmcvT2JqZWN0O0pMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7TG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vV2FpdGluZ1RocmVhZEFib3J0ZXI7KUxvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL3RzY2NtL0Jhc2ljUG9vbEVudHJ5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZyZWVFbnRyeShMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi90c2NjbS9Sb3V0ZVNwZWNpZmljUG9vbDtMamF2YS9sYW5nL09iamVjdDspTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vQmFzaWNQb29sRW50cnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Um91dGVQb29sKExvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTtaKUxvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL3RzY2NtL1JvdXRlU3BlY2lmaWNQb29sOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5ld1JvdXRlU3BlY2lmaWNQb29sKExvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTspTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vUm91dGVTcGVjaWZpY1Bvb2w7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3V2FpdGluZ1RocmVhZChMamF2YS91dGlsL2NvbmN1cnJlbnQvbG9ja3MvQ29uZGl0aW9uO0xvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL3RzY2NtL1JvdXRlU3BlY2lmaWNQb29sOylMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi90c2NjbS9XYWl0aW5nVGhyZWFkOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGlmeVdhaXRpbmdUaHJlYWQoTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vUm91dGVTcGVjaWZpY1Bvb2w7KVYiLz4KLQkJPGZpZWxkIG5hbWU9ImZyZWVDb25uZWN0aW9ucyIvPgotCQk8ZmllbGQgbmFtZT0ibWF4VG90YWxDb25uZWN0aW9ucyIvPgotCQk8ZmllbGQgbmFtZT0ib3BlcmF0b3IiLz4KLQkJPGZpZWxkIG5hbWU9InJvdXRlVG9Qb29sIi8+Ci0JCTxmaWVsZCBuYW1lPSJ3YWl0aW5nVGhyZWFkcyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vUG9vbEVudHJ5UmVxdWVzdCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhYm9ydFJlcXVlc3QoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb29sRW50cnkoSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vQmFzaWNQb29sRW50cnk7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi90c2NjbS9SZWZRdWV1ZUhhbmRsZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlUmVmZXJlbmNlKExqYXZhL2xhbmcvcmVmL1JlZmVyZW5jZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vUmVmUXVldWVXb3JrZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9SdW5uYWJsZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL3JlZi9SZWZlcmVuY2VRdWV1ZTtMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi90c2NjbS9SZWZRdWV1ZUhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzaHV0ZG93bigpViIvPgotCQk8ZmllbGQgbmFtZT0icmVmSGFuZGxlciIvPgotCQk8ZmllbGQgbmFtZT0icmVmUXVldWUiLz4KLQkJPGZpZWxkIG5hbWU9IndvcmtlclRocmVhZCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vUm91dGVTcGVjaWZpY1Bvb2wiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhbGxvY0VudHJ5KExqYXZhL2xhbmcvT2JqZWN0OylMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi90c2NjbS9CYXNpY1Bvb2xFbnRyeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVkRW50cnkoTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vQmFzaWNQb29sRW50cnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVFbnRyeShMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi90c2NjbS9CYXNpY1Bvb2xFbnRyeTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRyb3BFbnRyeSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZyZWVFbnRyeShMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi90c2NjbS9CYXNpY1Bvb2xFbnRyeTspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENhcGFjaXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW50cnlDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1heEVudHJpZXMoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSb3V0ZSgpTG9yZy9hcGFjaGUvaHR0cC9jb25uL3JvdXRpbmcvSHR0cFJvdXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1RocmVhZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzVW51c2VkKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dFRocmVhZCgpTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vV2FpdGluZ1RocmVhZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJxdWV1ZVRocmVhZChMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi90c2NjbS9XYWl0aW5nVGhyZWFkOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlVGhyZWFkKExvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL3RzY2NtL1dhaXRpbmdUaHJlYWQ7KVYiLz4KLQkJPGZpZWxkIG5hbWU9ImZyZWVFbnRyaWVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJtYXhFbnRyaWVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJudW1FbnRyaWVzIi8+Ci0JCTxmaWVsZCBuYW1lPSJyb3V0ZSIvPgotCQk8ZmllbGQgbmFtZT0id2FpdGluZ1RocmVhZHMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL3RzY2NtL1RocmVhZFNhZmVDbGllbnRDb25uTWFuYWdlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvbm4vQ2xpZW50Q29ubmVjdGlvbk1hbmFnZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtcztMb3JnL2FwYWNoZS9odHRwL2Nvbm4vc2NoZW1lL1NjaGVtZVJlZ2lzdHJ5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ29ubmVjdGlvbk9wZXJhdG9yKExvcmcvYXBhY2hlL2h0dHAvY29ubi9zY2hlbWUvU2NoZW1lUmVnaXN0cnk7KUxvcmcvYXBhY2hlL2h0dHAvY29ubi9DbGllbnRDb25uZWN0aW9uT3BlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQ29ubmVjdGlvblBvb2woTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vQWJzdHJhY3RDb25uUG9vbDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25uZWN0aW9uc0luUG9vbCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbm5lY3Rpb25zSW5Qb29sKExvcmcvYXBhY2hlL2h0dHAvY29ubi9yb3V0aW5nL0h0dHBSb3V0ZTspSSIvPgotCQk8ZmllbGQgbmFtZT0iY29ubk9wZXJhdG9yIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb25uZWN0aW9uUG9vbCIvPgotCQk8ZmllbGQgbmFtZT0ic2NoZW1lUmVnaXN0cnkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL3RzY2NtL1dhaXRpbmdUaHJlYWQiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL3V0aWwvY29uY3VycmVudC9sb2Nrcy9Db25kaXRpb247TG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vUm91dGVTcGVjaWZpY1Bvb2w7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhd2FpdChMamF2YS91dGlsL0RhdGU7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25kaXRpb24oKUxqYXZhL3V0aWwvY29uY3VycmVudC9sb2Nrcy9Db25kaXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UG9vbCgpTG9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvbm4vdHNjY20vUm91dGVTcGVjaWZpY1Bvb2w7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGhyZWFkKClMamF2YS9sYW5nL1RocmVhZDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnRlcnJ1cHQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3YWtldXAoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb25uL3RzY2NtL1dhaXRpbmdUaHJlYWRBYm9ydGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFib3J0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0V2FpdGluZ1RocmVhZChMb3JnL2FwYWNoZS9odHRwL2ltcGwvY29ubi90c2NjbS9XYWl0aW5nVGhyZWFkOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL0Fic3RyYWN0Q29va2llQXR0cmlidXRlSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVBdHRyaWJ1dGVIYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL0Fic3RyYWN0Q29va2llU3BlYyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVTcGVjIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZEF0dHJpYkhhbmRsZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZUF0dHJpYnV0ZUhhbmRsZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmliSGFuZGxlcihMamF2YS9sYW5nL1N0cmluZzspTG9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llQXR0cmlidXRlSGFuZGxlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJIYW5kbGVycygpTGphdmEvdXRpbC9Db2xsZWN0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlZ2lzdGVyQXR0cmliSGFuZGxlcihMamF2YS9sYW5nL1N0cmluZztMb3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVBdHRyaWJ1dGVIYW5kbGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL0Jhc2ljQ2xpZW50Q29va2llIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ2xpZW50Q29va2llIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb29raWUvU2V0Q29va2llIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXR0cmlidXRlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL0Jhc2ljQ2xpZW50Q29va2llMiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvb2tpZS9CYXNpY0NsaWVudENvb2tpZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL1NldENvb2tpZTIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvQmFzaWNDb21tZW50SGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvb2tpZS9BYnN0cmFjdENvb2tpZUF0dHJpYnV0ZUhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvQmFzaWNEb21haW5IYW5kbGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZUF0dHJpYnV0ZUhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvQmFzaWNFeHBpcmVzSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvb2tpZS9BYnN0cmFjdENvb2tpZUF0dHJpYnV0ZUhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL0Jhc2ljTWF4QWdlSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvb2tpZS9BYnN0cmFjdENvb2tpZUF0dHJpYnV0ZUhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvQmFzaWNQYXRoSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVBdHRyaWJ1dGVIYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL0Jhc2ljU2VjdXJlSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvb2tpZS9BYnN0cmFjdENvb2tpZUF0dHJpYnV0ZUhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvQmVzdE1hdGNoU3BlYyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVTcGVjIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvQmVzdE1hdGNoU3BlY0ZhY3RvcnkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llU3BlY0ZhY3RvcnkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvQnJvd3NlckNvbXBhdFNwZWMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvQ29va2llU3BlY0Jhc2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFX1BBVFRFUk5TIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL0Jyb3dzZXJDb21wYXRTcGVjRmFjdG9yeSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVTcGVjRmFjdG9yeSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvb2tpZS9Db29raWVTcGVjQmFzZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvb2tpZS9BYnN0cmFjdENvb2tpZVNwZWMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0RG9tYWluKExvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZU9yaWdpbjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVmYXVsdFBhdGgoTG9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llT3JpZ2luOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShbTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXJFbGVtZW50O0xvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZU9yaWdpbjspTGphdmEvdXRpbC9MaXN0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvb2tpZS9EYXRlUGFyc2VFeGNlcHRpb24iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL0RhdGVVdGlscyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXREYXRlKExqYXZhL3V0aWwvRGF0ZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0RGF0ZShMamF2YS91dGlsL0RhdGU7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlRGF0ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlRGF0ZShMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvRGF0ZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZURhdGUoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL3V0aWwvRGF0ZTspTGphdmEvdXRpbC9EYXRlOyIvPgotCQk8ZmllbGQgbmFtZT0iR01UIi8+Ci0JCTxmaWVsZCBuYW1lPSJQQVRURVJOX0FTQ1RJTUUiLz4KLQkJPGZpZWxkIG5hbWU9IlBBVFRFUk5fUkZDMTAzNiIvPgotCQk8ZmllbGQgbmFtZT0iUEFUVEVSTl9SRkMxMTIzIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL05ldHNjYXBlRG9tYWluSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvb2tpZS9CYXNpY0RvbWFpbkhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvTmV0c2NhcGVEcmFmdEhlYWRlclBhcnNlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZUhlYWRlcihMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9QYXJzZXJDdXJzb3I7KUxvcmcvYXBhY2hlL2h0dHAvSGVhZGVyRWxlbWVudDsiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvTmV0c2NhcGVEcmFmdFNwZWMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvQ29va2llU3BlY0Jhc2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJFWFBJUkVTX1BBVFRFUk4iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvTmV0c2NhcGVEcmFmdFNwZWNGYWN0b3J5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZVNwZWNGYWN0b3J5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL1JGQzIxMDlEb21haW5IYW5kbGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZUF0dHJpYnV0ZUhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvUkZDMjEwOVNwZWMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvQ29va2llU3BlY0Jhc2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oW0xqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdENvb2tpZUFzVmVyKExvcmcvYXBhY2hlL2h0dHAvdXRpbC9DaGFyQXJyYXlCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdFBhcmFtQXNWZXIoTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvUkZDMjEwOVNwZWNGYWN0b3J5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZVNwZWNGYWN0b3J5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL1JGQzIxMDlWZXJzaW9uSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2Nvb2tpZS9BYnN0cmFjdENvb2tpZUF0dHJpYnV0ZUhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvUkZDMjk2NUNvbW1lbnRVcmxBdHRyaWJ1dGVIYW5kbGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZUF0dHJpYnV0ZUhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvUkZDMjk2NURpc2NhcmRBdHRyaWJ1dGVIYW5kbGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZUF0dHJpYnV0ZUhhbmRsZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvUkZDMjk2NURvbWFpbkF0dHJpYnV0ZUhhbmRsZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9jb29raWUvQ29va2llQXR0cmlidXRlSGFuZGxlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRvbWFpbk1hdGNoKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL1JGQzI5NjVQb3J0QXR0cmlidXRlSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVBdHRyaWJ1dGVIYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL1JGQzI5NjVTcGVjIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL1JGQzIxMDlTcGVjIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9jb29raWUvUkZDMjk2NVNwZWNGYWN0b3J5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvY29va2llL0Nvb2tpZVNwZWNGYWN0b3J5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvY29va2llL1JGQzI5NjVWZXJzaW9uQXR0cmlidXRlSGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2Nvb2tpZS9Db29raWVBdHRyaWJ1dGVIYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvZW50aXR5L0VudGl0eURlc2VyaWFsaXplciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvQ29udGVudExlbmd0aFN0cmF0ZWd5OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVzZXJpYWxpemUoTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uSW5wdXRCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9IdHRwTWVzc2FnZTspTG9yZy9hcGFjaGUvaHR0cC9IdHRwRW50aXR5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImRvRGVzZXJpYWxpemUoTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uSW5wdXRCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9IdHRwTWVzc2FnZTspTG9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvQmFzaWNIdHRwRW50aXR5OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2VudGl0eS9FbnRpdHlTZXJpYWxpemVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL2VudGl0eS9Db250ZW50TGVuZ3RoU3RyYXRlZ3k7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb1NlcmlhbGl6ZShMb3JnL2FwYWNoZS9odHRwL2lvL1Nlc3Npb25PdXRwdXRCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9IdHRwTWVzc2FnZTspTGphdmEvaW8vT3V0cHV0U3RyZWFtOyIvPgotCQk8bWV0aG9kIG5hbWU9InNlcmlhbGl6ZShMb3JnL2FwYWNoZS9odHRwL2lvL1Nlc3Npb25PdXRwdXRCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9IdHRwTWVzc2FnZTtMb3JnL2FwYWNoZS9odHRwL0h0dHBFbnRpdHk7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9lbnRpdHkvTGF4Q29udGVudExlbmd0aFN0cmF0ZWd5IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvZW50aXR5L0NvbnRlbnRMZW5ndGhTdHJhdGVneSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2VudGl0eS9TdHJpY3RDb250ZW50TGVuZ3RoU3RyYXRlZ3kiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9lbnRpdHkvQ29udGVudExlbmd0aFN0cmF0ZWd5Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvaW8vQWJzdHJhY3RNZXNzYWdlUGFyc2VyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW8vSHR0cE1lc3NhZ2VQYXJzZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uSW5wdXRCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0xpbmVQYXJzZXI7TG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlSGVhZChMb3JnL2FwYWNoZS9odHRwL2lvL1Nlc3Npb25JbnB1dEJ1ZmZlcjspTG9yZy9hcGFjaGUvaHR0cC9IdHRwTWVzc2FnZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZUhlYWRlcnMoTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uSW5wdXRCdWZmZXI7SUlMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvTGluZVBhcnNlcjspW0xvcmcvYXBhY2hlL2h0dHAvSGVhZGVyOyIvPgotCQk8ZmllbGQgbmFtZT0ibGluZVBhcnNlciIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2lvL0Fic3RyYWN0TWVzc2FnZVdyaXRlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2lvL0h0dHBNZXNzYWdlV3JpdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvaW8vU2Vzc2lvbk91dHB1dEJ1ZmZlcjtMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvTGluZUZvcm1hdHRlcjtMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVIZWFkTGluZShMb3JnL2FwYWNoZS9odHRwL0h0dHBNZXNzYWdlOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJsaW5lQnVmIi8+Ci0JCTxmaWVsZCBuYW1lPSJsaW5lRm9ybWF0dGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJzZXNzaW9uQnVmZmVyIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvaW8vQWJzdHJhY3RTZXNzaW9uSW5wdXRCdWZmZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uSW5wdXRCdWZmZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaWxsQnVmZmVyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQnVmZmVyZWREYXRhKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5pdChMamF2YS9pby9JbnB1dFN0cmVhbTtJTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2lvL0Fic3RyYWN0U2Vzc2lvbk91dHB1dEJ1ZmZlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2lvL1Nlc3Npb25PdXRwdXRCdWZmZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaEJ1ZmZlcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXQoTGphdmEvaW8vT3V0cHV0U3RyZWFtO0lMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvaW8vQ2h1bmtlZElucHV0U3RyZWFtIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9JbnB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL2lvL1Nlc3Npb25JbnB1dEJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZvb3RlcnMoKVtMb3JnL2FwYWNoZS9odHRwL0hlYWRlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9pby9DaHVua2VkT3V0cHV0U3RyZWFtIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9pby9PdXRwdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uT3V0cHV0QnVmZmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvaW8vU2Vzc2lvbk91dHB1dEJ1ZmZlcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5pc2goKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaENhY2hlKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmx1c2hDYWNoZVdpdGhBcHBlbmQoW0JJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVDbG9zaW5nQ2h1bmsoKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9pby9Db250ZW50TGVuZ3RoSW5wdXRTdHJlYW0iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL0lucHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvaW8vU2Vzc2lvbklucHV0QnVmZmVyO0opViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2lvL0NvbnRlbnRMZW5ndGhPdXRwdXRTdHJlYW0iIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2lvL091dHB1dFN0cmVhbSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL2lvL1Nlc3Npb25PdXRwdXRCdWZmZXI7SilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvaW8vSHR0cFJlcXVlc3RQYXJzZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9pby9BYnN0cmFjdE1lc3NhZ2VQYXJzZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uSW5wdXRCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0xpbmVQYXJzZXI7TG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdEZhY3Rvcnk7TG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2lvL0h0dHBSZXF1ZXN0V3JpdGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvaW8vQWJzdHJhY3RNZXNzYWdlV3JpdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvaW8vU2Vzc2lvbk91dHB1dEJ1ZmZlcjtMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvTGluZUZvcm1hdHRlcjtMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvaW8vSHR0cFJlc3BvbnNlUGFyc2VyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvaW8vQWJzdHJhY3RNZXNzYWdlUGFyc2VyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvaW8vU2Vzc2lvbklucHV0QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9MaW5lUGFyc2VyO0xvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlRmFjdG9yeTtMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvaW8vSHR0cFJlc3BvbnNlV3JpdGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvaW8vQWJzdHJhY3RNZXNzYWdlV3JpdGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvaW8vU2Vzc2lvbk91dHB1dEJ1ZmZlcjtMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvTGluZUZvcm1hdHRlcjtMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvaW8vSHR0cFRyYW5zcG9ydE1ldHJpY3NJbXBsIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW8vSHR0cFRyYW5zcG9ydE1ldHJpY3MiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbmNyZW1lbnRCeXRlc1RyYW5zZmVycmVkKEopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJ5dGVzVHJhbnNmZXJyZWQoSilWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvaW8vSWRlbnRpdHlJbnB1dFN0cmVhbSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vSW5wdXRTdHJlYW0iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uSW5wdXRCdWZmZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW1wbC9pby9JZGVudGl0eU91dHB1dFN0cmVhbSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvaW8vT3V0cHV0U3RyZWFtIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvaW8vU2Vzc2lvbk91dHB1dEJ1ZmZlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2lvL1NvY2tldElucHV0QnVmZmVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2ltcGwvaW8vQWJzdHJhY3RTZXNzaW9uSW5wdXRCdWZmZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbmV0L1NvY2tldDtJTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2lvL1NvY2tldE91dHB1dEJ1ZmZlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pbXBsL2lvL0Fic3RyYWN0U2Vzc2lvbk91dHB1dEJ1ZmZlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9uZXQvU29ja2V0O0lMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2lvL0h0dHBNZXNzYWdlUGFyc2VyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlKClMb3JnL2FwYWNoZS9odHRwL0h0dHBNZXNzYWdlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pby9IdHRwTWVzc2FnZVdyaXRlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3cml0ZShMb3JnL2FwYWNoZS9odHRwL0h0dHBNZXNzYWdlOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL2lvL0h0dHBUcmFuc3BvcnRNZXRyaWNzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJ5dGVzVHJhbnNmZXJyZWQoKUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNldCgpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9pby9TZXNzaW9uSW5wdXRCdWZmZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWV0cmljcygpTG9yZy9hcGFjaGUvaHR0cC9pby9IdHRwVHJhbnNwb3J0TWV0cmljczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0RhdGFBdmFpbGFibGUoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWQoW0IpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWQoW0JJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVhZExpbmUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlYWRMaW5lKExvcmcvYXBhY2hlL2h0dHAvdXRpbC9DaGFyQXJyYXlCdWZmZXI7KUkiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvaW8vU2Vzc2lvbk91dHB1dEJ1ZmZlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJmbHVzaCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE1ldHJpY3MoKUxvcmcvYXBhY2hlL2h0dHAvaW8vSHR0cFRyYW5zcG9ydE1ldHJpY3M7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoW0IpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlKFtCSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlTGluZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IndyaXRlTGluZShMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvQWJzdHJhY3RIdHRwTWVzc2FnZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBNZXNzYWdlIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPGZpZWxkIG5hbWU9ImhlYWRlcmdyb3VwIi8+Ci0JCTxmaWVsZCBuYW1lPSJwYXJhbXMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9CYXNpY0hlYWRlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSGVhZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvQmFzaWNIZWFkZXJFbGVtZW50IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IZWFkZXJFbGVtZW50Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tMb3JnL2FwYWNoZS9odHRwL05hbWVWYWx1ZVBhaXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9CYXNpY0hlYWRlckVsZW1lbnRJdGVyYXRvciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0hlYWRlckVsZW1lbnRJdGVyYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL0hlYWRlckl0ZXJhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvSGVhZGVySXRlcmF0b3I7TG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0hlYWRlclZhbHVlUGFyc2VyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvQmFzaWNIZWFkZXJJdGVyYXRvciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0hlYWRlckl0ZXJhdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFtMb3JnL2FwYWNoZS9odHRwL0hlYWRlcjtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbHRlckhlYWRlcihJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kTmV4dChJKUkiLz4KLQkJPGZpZWxkIG5hbWU9ImFsbEhlYWRlcnMiLz4KLQkJPGZpZWxkIG5hbWU9ImN1cnJlbnRJbmRleCIvPgotCQk8ZmllbGQgbmFtZT0iaGVhZGVyTmFtZSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0Jhc2ljSGVhZGVyVmFsdWVGb3JtYXR0ZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0hlYWRlclZhbHVlRm9ybWF0dGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9Gb3JtYXRWYWx1ZShMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyO0xqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9ImVzdGltYXRlRWxlbWVudHNMZW4oW0xvcmcvYXBhY2hlL2h0dHAvSGVhZGVyRWxlbWVudDspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImVzdGltYXRlSGVhZGVyRWxlbWVudExlbihMb3JnL2FwYWNoZS9odHRwL0hlYWRlckVsZW1lbnQ7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJlc3RpbWF0ZU5hbWVWYWx1ZVBhaXJMZW4oTG9yZy9hcGFjaGUvaHR0cC9OYW1lVmFsdWVQYWlyOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXN0aW1hdGVQYXJhbWV0ZXJzTGVuKFtMb3JnL2FwYWNoZS9odHRwL05hbWVWYWx1ZVBhaXI7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRFbGVtZW50cyhbTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXJFbGVtZW50O1pMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvSGVhZGVyVmFsdWVGb3JtYXR0ZXI7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdEhlYWRlckVsZW1lbnQoTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXJFbGVtZW50O1pMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvSGVhZGVyVmFsdWVGb3JtYXR0ZXI7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdE5hbWVWYWx1ZVBhaXIoTG9yZy9hcGFjaGUvaHR0cC9OYW1lVmFsdWVQYWlyO1pMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvSGVhZGVyVmFsdWVGb3JtYXR0ZXI7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdFBhcmFtZXRlcnMoW0xvcmcvYXBhY2hlL2h0dHAvTmFtZVZhbHVlUGFpcjtaTG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0hlYWRlclZhbHVlRm9ybWF0dGVyOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NlcGFyYXRvcihDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Vuc2FmZShDKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFQiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUEFSQVRPUlMiLz4KLQkJPGZpZWxkIG5hbWU9IlVOU0FGRV9DSEFSUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0Jhc2ljSGVhZGVyVmFsdWVQYXJzZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0hlYWRlclZhbHVlUGFyc2VyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlSGVhZGVyRWxlbWVudChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTG9yZy9hcGFjaGUvaHR0cC9OYW1lVmFsdWVQYWlyOylMb3JnL2FwYWNoZS9odHRwL0hlYWRlckVsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlTmFtZVZhbHVlUGFpcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTG9yZy9hcGFjaGUvaHR0cC9OYW1lVmFsdWVQYWlyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlRWxlbWVudHMoTGphdmEvbGFuZy9TdHJpbmc7TG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0hlYWRlclZhbHVlUGFyc2VyOylbTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXJFbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlSGVhZGVyRWxlbWVudChMamF2YS9sYW5nL1N0cmluZztMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvSGVhZGVyVmFsdWVQYXJzZXI7KUxvcmcvYXBhY2hlL2h0dHAvSGVhZGVyRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZU5hbWVWYWx1ZVBhaXIoTGphdmEvbGFuZy9TdHJpbmc7TG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0hlYWRlclZhbHVlUGFyc2VyOylMb3JnL2FwYWNoZS9odHRwL05hbWVWYWx1ZVBhaXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VOYW1lVmFsdWVQYWlyKExvcmcvYXBhY2hlL2h0dHAvdXRpbC9DaGFyQXJyYXlCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL1BhcnNlckN1cnNvcjtbQylMb3JnL2FwYWNoZS9odHRwL05hbWVWYWx1ZVBhaXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VQYXJhbWV0ZXJzKExqYXZhL2xhbmcvU3RyaW5nO0xvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9IZWFkZXJWYWx1ZVBhcnNlcjspW0xvcmcvYXBhY2hlL2h0dHAvTmFtZVZhbHVlUGFpcjsiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9CYXNpY0h0dHBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvQmFzaWNIdHRwUmVxdWVzdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cEVudGl0eUVuY2xvc2luZ1JlcXVlc3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TG9yZy9hcGFjaGUvaHR0cC9Qcm90b2NvbFZlcnNpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9SZXF1ZXN0TGluZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0Jhc2ljSHR0cFJlcXVlc3QiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9BYnN0cmFjdEh0dHBNZXNzYWdlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMb3JnL2FwYWNoZS9odHRwL1Byb3RvY29sVmVyc2lvbjspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL1JlcXVlc3RMaW5lOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvQmFzaWNIdHRwUmVzcG9uc2UiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9BYnN0cmFjdEh0dHBNZXNzYWdlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2UiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9Qcm90b2NvbFZlcnNpb247SUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvU3RhdHVzTGluZTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL1N0YXR1c0xpbmU7TG9yZy9hcGFjaGUvaHR0cC9SZWFzb25QaHJhc2VDYXRhbG9nO0xqYXZhL3V0aWwvTG9jYWxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVhc29uKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvQmFzaWNMaW5lRm9ybWF0dGVyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9MaW5lRm9ybWF0dGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9Gb3JtYXRIZWFkZXIoTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjtMb3JnL2FwYWNoZS9odHRwL0hlYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImRvRm9ybWF0UmVxdWVzdExpbmUoTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjtMb3JnL2FwYWNoZS9odHRwL1JlcXVlc3RMaW5lOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZG9Gb3JtYXRTdGF0dXNMaW5lKExvcmcvYXBhY2hlL2h0dHAvdXRpbC9DaGFyQXJyYXlCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9TdGF0dXNMaW5lOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXN0aW1hdGVQcm90b2NvbFZlcnNpb25MZW4oTG9yZy9hcGFjaGUvaHR0cC9Qcm90b2NvbFZlcnNpb247KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRIZWFkZXIoTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXI7TG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0xpbmVGb3JtYXR0ZXI7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdFByb3RvY29sVmVyc2lvbihMb3JnL2FwYWNoZS9odHRwL1Byb3RvY29sVmVyc2lvbjtMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvTGluZUZvcm1hdHRlcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0UmVxdWVzdExpbmUoTG9yZy9hcGFjaGUvaHR0cC9SZXF1ZXN0TGluZTtMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvTGluZUZvcm1hdHRlcjspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0U3RhdHVzTGluZShMb3JnL2FwYWNoZS9odHRwL1N0YXR1c0xpbmU7TG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0xpbmVGb3JtYXR0ZXI7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImluaXRCdWZmZXIoTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjspTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjsiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9CYXNpY0xpbmVQYXJzZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0xpbmVQYXJzZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9Qcm90b2NvbFZlcnNpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVQcm90b2NvbFZlcnNpb24oSUkpTG9yZy9hcGFjaGUvaHR0cC9Qcm90b2NvbFZlcnNpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlUmVxdWVzdExpbmUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TG9yZy9hcGFjaGUvaHR0cC9Qcm90b2NvbFZlcnNpb247KUxvcmcvYXBhY2hlL2h0dHAvUmVxdWVzdExpbmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlU3RhdHVzTGluZShMb3JnL2FwYWNoZS9odHRwL1Byb3RvY29sVmVyc2lvbjtJTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvYXBhY2hlL2h0dHAvU3RhdHVzTGluZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZUhlYWRlcihMamF2YS9sYW5nL1N0cmluZztMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvTGluZVBhcnNlcjspTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VQcm90b2NvbFZlcnNpb24oTGphdmEvbGFuZy9TdHJpbmc7TG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0xpbmVQYXJzZXI7KUxvcmcvYXBhY2hlL2h0dHAvUHJvdG9jb2xWZXJzaW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlUmVxdWVzdExpbmUoTGphdmEvbGFuZy9TdHJpbmc7TG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0xpbmVQYXJzZXI7KUxvcmcvYXBhY2hlL2h0dHAvUmVxdWVzdExpbmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VTdGF0dXNMaW5lKExqYXZhL2xhbmcvU3RyaW5nO0xvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9MaW5lUGFyc2VyOylMb3JnL2FwYWNoZS9odHRwL1N0YXR1c0xpbmU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2tpcFdoaXRlc3BhY2UoTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjtMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvUGFyc2VyQ3Vyc29yOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcm90b2NvbCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0Jhc2ljTGlzdEhlYWRlckl0ZXJhdG9yIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSGVhZGVySXRlcmF0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9MaXN0O0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmlsdGVySGVhZGVyKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmROZXh0KEkpSSIvPgotCQk8ZmllbGQgbmFtZT0iYWxsSGVhZGVycyIvPgotCQk8ZmllbGQgbmFtZT0iY3VycmVudEluZGV4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJoZWFkZXJOYW1lIi8+Ci0JCTxmaWVsZCBuYW1lPSJsYXN0SW5kZXgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9CYXNpY05hbWVWYWx1ZVBhaXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL05hbWVWYWx1ZVBhaXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9CYXNpY1JlcXVlc3RMaW5lIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJqYXZhL2xhbmcvQ2xvbmVhYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9SZXF1ZXN0TGluZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMb3JnL2FwYWNoZS9odHRwL1Byb3RvY29sVmVyc2lvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0Jhc2ljU3RhdHVzTGluZSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0iamF2YS9sYW5nL0Nsb25lYWJsZSIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvU3RhdHVzTGluZSIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL1Byb3RvY29sVmVyc2lvbjtJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9CYXNpY1Rva2VuSXRlcmF0b3IiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9Ub2tlbkl0ZXJhdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvSGVhZGVySXRlcmF0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVUb2tlbihMamF2YS9sYW5nL1N0cmluZztJSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kTmV4dChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJmaW5kVG9rZW5FbmQoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmluZFRva2VuU2VwYXJhdG9yKEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImZpbmRUb2tlblN0YXJ0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzSHR0cFNlcGFyYXRvcihDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Rva2VuQ2hhcihDKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1Rva2VuU2VwYXJhdG9yKEMpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzV2hpdGVzcGFjZShDKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfU0VQQVJBVE9SUyIvPgotCQk8ZmllbGQgbmFtZT0iY3VycmVudEhlYWRlciIvPgotCQk8ZmllbGQgbmFtZT0iY3VycmVudFRva2VuIi8+Ci0JCTxmaWVsZCBuYW1lPSJoZWFkZXJJdCIvPgotCQk8ZmllbGQgbmFtZT0ic2VhcmNoUG9zIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvQnVmZmVyZWRIZWFkZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0Zvcm1hdHRlZEhlYWRlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvSGVhZGVyR3JvdXAiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRIZWFkZXIoTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zSGVhZGVyKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29weSgpTG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL0hlYWRlckdyb3VwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFsbEhlYWRlcnMoKVtMb3JnL2FwYWNoZS9odHRwL0hlYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25kZW5zZWRIZWFkZXIoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvYXBhY2hlL2h0dHAvSGVhZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZpcnN0SGVhZGVyKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2FwYWNoZS9odHRwL0hlYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRIZWFkZXJzKExqYXZhL2xhbmcvU3RyaW5nOylbTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGFzdEhlYWRlcihMamF2YS9sYW5nL1N0cmluZzspTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXRlcmF0b3IoKUxvcmcvYXBhY2hlL2h0dHAvSGVhZGVySXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXRlcmF0b3IoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvYXBhY2hlL2h0dHAvSGVhZGVySXRlcmF0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlSGVhZGVyKExvcmcvYXBhY2hlL2h0dHAvSGVhZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SGVhZGVycyhbTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ1cGRhdGVIZWFkZXIoTG9yZy9hcGFjaGUvaHR0cC9IZWFkZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9IZWFkZXJWYWx1ZUZvcm1hdHRlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRFbGVtZW50cyhMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyO1tMb3JnL2FwYWNoZS9odHRwL0hlYWRlckVsZW1lbnQ7WilMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdEhlYWRlckVsZW1lbnQoTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjtMb3JnL2FwYWNoZS9odHRwL0hlYWRlckVsZW1lbnQ7WilMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdE5hbWVWYWx1ZVBhaXIoTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjtMb3JnL2FwYWNoZS9odHRwL05hbWVWYWx1ZVBhaXI7WilMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImZvcm1hdFBhcmFtZXRlcnMoTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjtbTG9yZy9hcGFjaGUvaHR0cC9OYW1lVmFsdWVQYWlyO1opTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9IZWFkZXJWYWx1ZVBhcnNlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZUVsZW1lbnRzKExvcmcvYXBhY2hlL2h0dHAvdXRpbC9DaGFyQXJyYXlCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL1BhcnNlckN1cnNvcjspW0xvcmcvYXBhY2hlL2h0dHAvSGVhZGVyRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZUhlYWRlckVsZW1lbnQoTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjtMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvUGFyc2VyQ3Vyc29yOylMb3JnL2FwYWNoZS9odHRwL0hlYWRlckVsZW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VOYW1lVmFsdWVQYWlyKExvcmcvYXBhY2hlL2h0dHAvdXRpbC9DaGFyQXJyYXlCdWZmZXI7TG9yZy9hcGFjaGUvaHR0cC9tZXNzYWdlL1BhcnNlckN1cnNvcjspTG9yZy9hcGFjaGUvaHR0cC9OYW1lVmFsdWVQYWlyOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlUGFyYW1ldGVycyhMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9QYXJzZXJDdXJzb3I7KVtMb3JnL2FwYWNoZS9odHRwL05hbWVWYWx1ZVBhaXI7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvTGluZUZvcm1hdHRlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRQcm90b2NvbFZlcnNpb24oTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjtMb3JnL2FwYWNoZS9odHRwL1Byb3RvY29sVmVyc2lvbjspTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRIZWFkZXIoTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjtMb3JnL2FwYWNoZS9odHRwL0hlYWRlcjspTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJmb3JtYXRSZXF1ZXN0TGluZShMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvUmVxdWVzdExpbmU7KUxvcmcvYXBhY2hlL2h0dHAvdXRpbC9DaGFyQXJyYXlCdWZmZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZm9ybWF0U3RhdHVzTGluZShMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvU3RhdHVzTGluZTspTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9MaW5lUGFyc2VyIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Imhhc1Byb3RvY29sVmVyc2lvbihMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9QYXJzZXJDdXJzb3I7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZUhlYWRlcihMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyOylMb3JnL2FwYWNoZS9odHRwL0hlYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZVByb3RvY29sVmVyc2lvbihMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9QYXJzZXJDdXJzb3I7KUxvcmcvYXBhY2hlL2h0dHAvUHJvdG9jb2xWZXJzaW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlUmVxdWVzdExpbmUoTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjtMb3JnL2FwYWNoZS9odHRwL21lc3NhZ2UvUGFyc2VyQ3Vyc29yOylMb3JnL2FwYWNoZS9odHRwL1JlcXVlc3RMaW5lOyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlU3RhdHVzTGluZShMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyO0xvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9QYXJzZXJDdXJzb3I7KUxvcmcvYXBhY2hlL2h0dHAvU3RhdHVzTGluZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvbWVzc2FnZS9QYXJzZXJDdXJzb3IiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdEVuZCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvd2VyQm91bmQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQb3MoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVcHBlckJvdW5kKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0idXBkYXRlUG9zKEkpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvQWJzdHJhY3RIdHRwUGFyYW1zIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0Jhc2ljSHR0cFBhcmFtcyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvQWJzdHJhY3RIdHRwUGFyYW1zIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvaW8vU2VyaWFsaXphYmxlIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHlQYXJhbXMoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzUGFyYW1ldGVyU2V0KExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQYXJhbWV0ZXJTZXRMb2NhbGx5KExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyYW1ldGVycyhbTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0NvcmVDb25uZWN0aW9uUE5hbWVzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJDT05ORUNUSU9OX1RJTUVPVVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9IRUFERVJfQ09VTlQiLz4KLQkJPGZpZWxkIG5hbWU9Ik1BWF9MSU5FX0xFTkdUSCIvPgotCQk8ZmllbGQgbmFtZT0iU09DS0VUX0JVRkZFUl9TSVpFIi8+Ci0JCTxmaWVsZCBuYW1lPSJTT19MSU5HRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNPX1RJTUVPVVQiLz4KLQkJPGZpZWxkIG5hbWU9IlNUQUxFX0NPTk5FQ1RJT05fQ0hFQ0siLz4KLQkJPGZpZWxkIG5hbWU9IlRDUF9OT0RFTEFZIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3BhcmFtcy9Db3JlUHJvdG9jb2xQTmFtZXMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxmaWVsZCBuYW1lPSJIVFRQX0NPTlRFTlRfQ0hBUlNFVCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9FTEVNRU5UX0NIQVJTRVQiLz4KLQkJPGZpZWxkIG5hbWU9Ik9SSUdJTl9TRVJWRVIiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1RPQ09MX1ZFUlNJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNUUklDVF9UUkFOU0ZFUl9FTkNPRElORyIvPgotCQk8ZmllbGQgbmFtZT0iVVNFUl9BR0VOVCIvPgotCQk8ZmllbGQgbmFtZT0iVVNFX0VYUEVDVF9DT05USU5VRSIvPgotCQk8ZmllbGQgbmFtZT0iV0FJVF9GT1JfQ09OVElOVUUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0RlZmF1bHRlZEh0dHBQYXJhbXMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0Fic3RyYWN0SHR0cFBhcmFtcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zO0xvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZWZhdWx0cygpTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBBYnN0cmFjdFBhcmFtQmVhbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspViIvPgotCQk8ZmllbGQgbmFtZT0icGFyYW1zIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwQ29ubmVjdGlvblBhcmFtQmVhbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cEFic3RyYWN0UGFyYW1CZWFuIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb25uZWN0aW9uVGltZW91dChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMaW5nZXIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U29UaW1lb3V0KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFNvY2tldEJ1ZmZlclNpemUoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U3RhbGVDaGVja2luZ0VuYWJsZWQoWilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGNwTm9EZWxheShaKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBDb25uZWN0aW9uUGFyYW1zIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvQ29yZUNvbm5lY3Rpb25QTmFtZXMiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb25uZWN0aW9uVGltZW91dChMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGluZ2VyKExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTb1RpbWVvdXQoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNvY2tldEJ1ZmZlclNpemUoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRjcE5vRGVsYXkoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3RhbGVDaGVja2luZ0VuYWJsZWQoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspWiIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbm5lY3Rpb25UaW1lb3V0KExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGluZ2VyKExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U29UaW1lb3V0KExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0U29ja2V0QnVmZmVyU2l6ZShMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zO0kpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0YWxlQ2hlY2tpbmdFbmFibGVkKExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VGNwTm9EZWxheShMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zO1opViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtcyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvcHkoKUxvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9vbGVhblBhcmFtZXRlcihMamF2YS9sYW5nL1N0cmluZztaKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb3VibGVQYXJhbWV0ZXIoTGphdmEvbGFuZy9TdHJpbmc7RClEIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW50UGFyYW1ldGVyKExqYXZhL2xhbmcvU3RyaW5nO0kpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvbmdQYXJhbWV0ZXIoTGphdmEvbGFuZy9TdHJpbmc7SilKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1ldGVyKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1BhcmFtZXRlckZhbHNlKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNQYXJhbWV0ZXJUcnVlKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlUGFyYW1ldGVyKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Qm9vbGVhblBhcmFtZXRlcihMamF2YS9sYW5nL1N0cmluZztaKUxvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RG91YmxlUGFyYW1ldGVyKExqYXZhL2xhbmcvU3RyaW5nO0QpTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRQYXJhbWV0ZXIoTGphdmEvbGFuZy9TdHJpbmc7SSlMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvbmdQYXJhbWV0ZXIoTGphdmEvbGFuZy9TdHJpbmc7SilMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhcmFtZXRlcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQcm90b2NvbFBhcmFtQmVhbiIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cEFic3RyYWN0UGFyYW1CZWFuIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50Q2hhcnNldChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEh0dHBFbGVtZW50Q2hhcnNldChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZUV4cGVjdENvbnRpbnVlKFopViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZXJBZ2VudChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZlcnNpb24oTG9yZy9hcGFjaGUvaHR0cC9IdHRwVmVyc2lvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFByb3RvY29sUGFyYW1zIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0NvcmVQcm90b2NvbFBOYW1lcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnRDaGFyc2V0KExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEh0dHBFbGVtZW50Q2hhcnNldChMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVc2VyQWdlbnQoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmVyc2lvbihMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOylMb3JnL2FwYWNoZS9odHRwL1Byb3RvY29sVmVyc2lvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50Q2hhcnNldChMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SHR0cEVsZW1lbnRDaGFyc2V0KExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VFeHBlY3RDb250aW51ZShMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zO1opViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFVzZXJBZ2VudChMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VmVyc2lvbihMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zO0xvcmcvYXBhY2hlL2h0dHAvUHJvdG9jb2xWZXJzaW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idXNlRXhwZWN0Q29udGludWUoTG9yZy9hcGFjaGUvaHR0cC9wYXJhbXMvSHR0cFBhcmFtczspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9CYXNpY0h0dHBDb250ZXh0IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9CYXNpY0h0dHBQcm9jZXNzb3IiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9ImphdmEvbGFuZy9DbG9uZWFibGUiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBQcm9jZXNzb3IiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBSZXF1ZXN0SW50ZXJjZXB0b3JMaXN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwUmVzcG9uc2VJbnRlcmNlcHRvckxpc3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJbnRlcmNlcHRvcihMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0SW50ZXJjZXB0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRJbnRlcmNlcHRvcihMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0SW50ZXJjZXB0b3I7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkSW50ZXJjZXB0b3IoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2VJbnRlcmNlcHRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEludGVyY2VwdG9yKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlSW50ZXJjZXB0b3I7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJJbnRlcmNlcHRvcnMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5KClMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0Jhc2ljSHR0cFByb2Nlc3NvcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjb3B5SW50ZXJjZXB0b3JzKExvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvQmFzaWNIdHRwUHJvY2Vzc29yOylWIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXF1ZXN0SW50ZXJjZXB0b3JzIi8+Ci0JCTxmaWVsZCBuYW1lPSJyZXNwb25zZUludGVyY2VwdG9ycyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9EZWZhdWx0ZWRIdHRwQ29udGV4dCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7TG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlZmF1bHRzKClMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9FeGVjdXRpb25Db250ZXh0IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9DT05ORUNUSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJIVFRQX1BST1hZX0hPU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkhUVFBfUkVRVUVTVCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9SRVFfU0VOVCIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9SRVNQT05TRSIvPgotCQk8ZmllbGQgbmFtZT0iSFRUUF9UQVJHRVRfSE9TVCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IVFRQIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImlzV2hpdGVzcGFjZShDKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkFTQ0lJIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSEFSU0VUX1BBUkFNIi8+Ci0JCTxmaWVsZCBuYW1lPSJDSFVOS19DT0RJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkNPTk5fQ0xPU0UiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTk5fRElSRUNUSVZFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05OX0tFRVBfQUxJVkUiLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfRU5DT0RJTkciLz4KLQkJPGZpZWxkIG5hbWU9IkNPTlRFTlRfTEVOIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT05URU5UX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IkNSIi8+Ci0JCTxmaWVsZCBuYW1lPSJEQVRFX0hFQURFUiIvPgotCQk8ZmllbGQgbmFtZT0iREVGQVVMVF9DT05URU5UX0NIQVJTRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkRFRkFVTFRfQ09OVEVOVF9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJERUZBVUxUX1BST1RPQ09MX0NIQVJTRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkVYUEVDVF9DT05USU5VRSIvPgotCQk8ZmllbGQgbmFtZT0iRVhQRUNUX0RJUkVDVElWRSIvPgotCQk8ZmllbGQgbmFtZT0iSFQiLz4KLQkJPGZpZWxkIG5hbWU9IklERU5USVRZX0NPRElORyIvPgotCQk8ZmllbGQgbmFtZT0iSVNPXzg4NTlfMSIvPgotCQk8ZmllbGQgbmFtZT0iTEYiLz4KLQkJPGZpZWxkIG5hbWU9Ik9DVEVUX1NUUkVBTV9UWVBFIi8+Ci0JCTxmaWVsZCBuYW1lPSJQTEFJTl9URVhUX1RZUEUiLz4KLQkJPGZpZWxkIG5hbWU9IlNFUlZFUl9IRUFERVIiLz4KLQkJPGZpZWxkIG5hbWU9IlNQIi8+Ci0JCTxmaWVsZCBuYW1lPSJUQVJHRVRfSE9TVCIvPgotCQk8ZmllbGQgbmFtZT0iVFJBTlNGRVJfRU5DT0RJTkciLz4KLQkJPGZpZWxkIG5hbWU9IlVTRVJfQUdFTlQiLz4KLQkJPGZpZWxkIG5hbWU9IlVTX0FTQ0lJIi8+Ci0JCTxmaWVsZCBuYW1lPSJVVEZfMTYiLz4KLQkJPGZpZWxkIG5hbWU9IlVURl84Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQXR0cmlidXRlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdHRyaWJ1dGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IlJFU0VSVkVEX1BSRUZJWCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwRGF0ZUdlbmVyYXRvciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDdXJyZW50RGF0ZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJHTVQiLz4KLQkJPGZpZWxkIG5hbWU9IlBBVFRFUk5fUkZDMTEyMyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwRXhwZWN0YXRpb25WZXJpZmllciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2ZXJpZnkoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdDtMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZTtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBQcm9jZXNzb3IiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdEludGVyY2VwdG9yIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2VJbnRlcmNlcHRvciIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwUmVxdWVzdEV4ZWN1dG9yIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImNhblJlc3BvbnNlSGF2ZUJvZHkoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdDtMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZTspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImRvUmVjZWl2ZVJlc3BvbnNlKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3Q7TG9yZy9hcGFjaGUvaHR0cC9IdHRwQ2xpZW50Q29ubmVjdGlvbjtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb1NlbmRSZXF1ZXN0KExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3Q7TG9yZy9hcGFjaGUvaHR0cC9IdHRwQ2xpZW50Q29ubmVjdGlvbjtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJleGVjdXRlKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3Q7TG9yZy9hcGFjaGUvaHR0cC9IdHRwQ2xpZW50Q29ubmVjdGlvbjtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3N0UHJvY2VzcyhMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZTtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBQcm9jZXNzb3I7TG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9InByZVByb2Nlc3MoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdDtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBQcm9jZXNzb3I7TG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwUmVxdWVzdEhhbmRsZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFuZGxlKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3Q7TG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2U7TG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwUmVxdWVzdEhhbmRsZXJSZWdpc3RyeSIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBSZXF1ZXN0SGFuZGxlclJlc29sdmVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibWF0Y2hVcmlSZXF1ZXN0UGF0dGVybihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspWiIgZGVwcmVjYXRlZD0iMTYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZWdpc3RlcihMamF2YS9sYW5nL1N0cmluZztMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBSZXF1ZXN0SGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEhhbmRsZXJzKExqYXZhL3V0aWwvTWFwOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0idW5yZWdpc3RlcihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwUmVxdWVzdEhhbmRsZXJSZXNvbHZlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb29rdXAoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cFJlcXVlc3RIYW5kbGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwUmVxdWVzdEludGVyY2VwdG9yTGlzdCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSZXF1ZXN0SW50ZXJjZXB0b3IoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdEludGVyY2VwdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYWRkUmVxdWVzdEludGVyY2VwdG9yKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3RJbnRlcmNlcHRvcjtJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhclJlcXVlc3RJbnRlcmNlcHRvcnMoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZXF1ZXN0SW50ZXJjZXB0b3IoSSlMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0SW50ZXJjZXB0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVxdWVzdEludGVyY2VwdG9yQ291bnQoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVSZXF1ZXN0SW50ZXJjZXB0b3JCeUNsYXNzKExqYXZhL2xhbmcvQ2xhc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlcmNlcHRvcnMoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBSZXNwb25zZUludGVyY2VwdG9yTGlzdCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSZXNwb25zZUludGVyY2VwdG9yKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlSW50ZXJjZXB0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRSZXNwb25zZUludGVyY2VwdG9yKExvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlSW50ZXJjZXB0b3I7SSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXJSZXNwb25zZUludGVyY2VwdG9ycygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3BvbnNlSW50ZXJjZXB0b3IoSSlMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZUludGVyY2VwdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlc3BvbnNlSW50ZXJjZXB0b3JDb3VudCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZVJlc3BvbnNlSW50ZXJjZXB0b3JCeUNsYXNzKExqYXZhL2xhbmcvQ2xhc3M7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJbnRlcmNlcHRvcnMoTGphdmEvdXRpbC9MaXN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBTZXJ2aWNlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBQcm9jZXNzb3I7TG9yZy9hcGFjaGUvaHR0cC9Db25uZWN0aW9uUmV1c2VTdHJhdGVneTtMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZUZhY3Rvcnk7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb1NlcnZpY2UoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdDtMb3JnL2FwYWNoZS9odHRwL0h0dHBSZXNwb25zZTtMb3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL0h0dHBDb250ZXh0OylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1zKClMb3JnL2FwYWNoZS9odHRwL3BhcmFtcy9IdHRwUGFyYW1zOyIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZUV4Y2VwdGlvbihMb3JnL2FwYWNoZS9odHRwL0h0dHBFeGNlcHRpb247TG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYW5kbGVSZXF1ZXN0KExvcmcvYXBhY2hlL2h0dHAvSHR0cFNlcnZlckNvbm5lY3Rpb247TG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwQ29udGV4dDspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENvbm5SZXVzZVN0cmF0ZWd5KExvcmcvYXBhY2hlL2h0dHAvQ29ubmVjdGlvblJldXNlU3RyYXRlZ3k7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFeHBlY3RhdGlvblZlcmlmaWVyKExvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cEV4cGVjdGF0aW9uVmVyaWZpZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIYW5kbGVyUmVzb2x2ZXIoTG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwUmVxdWVzdEhhbmRsZXJSZXNvbHZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEh0dHBQcm9jZXNzb3IoTG9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9IdHRwUHJvY2Vzc29yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UGFyYW1zKExvcmcvYXBhY2hlL2h0dHAvcGFyYW1zL0h0dHBQYXJhbXM7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRSZXNwb25zZUZhY3RvcnkoTG9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2VGYWN0b3J5OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL1JlcXVlc3RDb25uQ29udHJvbCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL2FwYWNoZS9odHRwL0h0dHBSZXF1ZXN0SW50ZXJjZXB0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvUmVxdWVzdENvbnRlbnQiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdEludGVyY2VwdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL1JlcXVlc3REYXRlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3RJbnRlcmNlcHRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9SZXF1ZXN0RXhwZWN0Q29udGludWUiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwUmVxdWVzdEludGVyY2VwdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3Byb3RvY29sL1JlcXVlc3RUYXJnZXRIb3N0IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3RJbnRlcmNlcHRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9SZXF1ZXN0VXNlckFnZW50IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFJlcXVlc3RJbnRlcmNlcHRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9SZXNwb25zZUNvbm5Db250cm9sIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlSW50ZXJjZXB0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvUmVzcG9uc2VDb250ZW50IiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlSW50ZXJjZXB0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvUmVzcG9uc2VEYXRlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvSHR0cFJlc3BvbnNlSW50ZXJjZXB0b3IiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvUmVzcG9uc2VTZXJ2ZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9IdHRwUmVzcG9uc2VJbnRlcmNlcHRvciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9TeW5jQmFzaWNIdHRwQ29udGV4dCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC9wcm90b2NvbC9CYXNpY0h0dHBDb250ZXh0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvSHR0cENvbnRleHQ7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvcHJvdG9jb2wvVXJpUGF0dGVybk1hdGNoZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0ibG9va3VwKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJtYXRjaFVyaVJlcXVlc3RQYXR0ZXJuKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVnaXN0ZXIoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRIYW5kbGVycyhMamF2YS91dGlsL01hcDspViIvPgotCQk8bWV0aG9kIG5hbWU9InVucmVnaXN0ZXIoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvdXRpbC9CeXRlQXJyYXlCdWZmZXIiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjtJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKFtCSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChbQ0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJidWZmZXIoKVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iYnl0ZUF0KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNhcGFjaXR5KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iY2xlYXIoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0VtcHR5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNGdWxsKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TGVuZ3RoKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InRvQnl0ZUFycmF5KClbQiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKEMpViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMb3JnL2FwYWNoZS9odHRwL3V0aWwvQnl0ZUFycmF5QnVmZmVyO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoTG9yZy9hcGFjaGUvaHR0cC91dGlsL0NoYXJBcnJheUJ1ZmZlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZChMb3JnL2FwYWNoZS9odHRwL3V0aWwvQ2hhckFycmF5QnVmZmVyO0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmQoW0JJSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYXBwZW5kKFtDSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImJ1ZmZlcigpW0MiLz4KLQkJPG1ldGhvZCBuYW1lPSJjYXBhY2l0eSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImNoYXJBdChJKUMiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuc3VyZUNhcGFjaXR5KEkpViIvPgotCQk8bWV0aG9kIG5hbWU9ImluZGV4T2YoSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW5kZXhPZihJSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW1wdHkoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc0Z1bGwoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRMZW5ndGgoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3Vic3RyaW5nKElJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InN1YnN0cmluZ1RyaW1tZWQoSUkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9DaGFyQXJyYXkoKVtDIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2FwYWNoZS9odHRwL3V0aWwvRW5jb2RpbmdVdGlscyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBc2NpaUJ5dGVzKExqYXZhL2xhbmcvU3RyaW5nOylbQiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFzY2lpU3RyaW5nKFtCKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEFzY2lpU3RyaW5nKFtCSUkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qnl0ZXMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVtCIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nKFtCSUlMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nKFtCTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC91dGlsL0VudGl0eVV0aWxzIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbnRlbnRDaGFyU2V0KExvcmcvYXBhY2hlL2h0dHAvSHR0cEVudGl0eTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9CeXRlQXJyYXkoTG9yZy9hcGFjaGUvaHR0cC9IdHRwRW50aXR5OylbQiIvPgotCQk8bWV0aG9kIG5hbWU9InRvU3RyaW5nKExvcmcvYXBhY2hlL2h0dHAvSHR0cEVudGl0eTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9TdHJpbmcoTG9yZy9hcGFjaGUvaHR0cC9IdHRwRW50aXR5O0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvdXRpbC9FeGNlcHRpb25VdGlscyIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjIyIiByZW1vdmVkPSIyMyI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbml0Q2F1c2UoTGphdmEvbGFuZy9UaHJvd2FibGU7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvYXBhY2hlL2h0dHAvdXRpbC9MYW5nVXRpbHMiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSIyMiIgcmVtb3ZlZD0iMjMiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXF1YWxzKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXF1YWxzKFtMamF2YS9sYW5nL09iamVjdDtbTGphdmEvbGFuZy9PYmplY3Q7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNoQ29kZShJSSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzaENvZGUoSUxqYXZhL2xhbmcvT2JqZWN0OylJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzaENvZGUoSVopSSIvPgotCQk8ZmllbGQgbmFtZT0iSEFTSF9PRkZTRVQiLz4KLQkJPGZpZWxkIG5hbWU9IkhBU0hfU0VFRCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9hcGFjaGUvaHR0cC91dGlsL1ZlcnNpb25JbmZvIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iMjIiIHJlbW92ZWQ9IjIzIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZyb21NYXAoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvdXRpbC9NYXA7TGphdmEvbGFuZy9DbGFzc0xvYWRlcjspTG9yZy9hcGFjaGUvaHR0cC91dGlsL1ZlcnNpb25JbmZvOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENsYXNzbG9hZGVyKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRNb2R1bGUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhY2thZ2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlbGVhc2UoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRpbWVzdGFtcCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibG9hZFZlcnNpb25JbmZvKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KUxvcmcvYXBhY2hlL2h0dHAvdXRpbC9WZXJzaW9uSW5mbzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb2FkVmVyc2lvbkluZm8oW0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KVtMb3JnL2FwYWNoZS9odHRwL3V0aWwvVmVyc2lvbkluZm87Ii8+Ci0JCTxmaWVsZCBuYW1lPSJQUk9QRVJUWV9NT0RVTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1BFUlRZX1JFTEVBU0UiLz4KLQkJPGZpZWxkIG5hbWU9IlBST1BFUlRZX1RJTUVTVEFNUCIvPgotCQk8ZmllbGQgbmFtZT0iVU5BVkFJTEFCTEUiLz4KLQkJPGZpZWxkIG5hbWU9IlZFUlNJT05fUFJPUEVSVFlfRklMRSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9qc29uL0pTT05BcnJheSIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvT2JqZWN0OylWIiBzaW5jZT0iMTkiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9Db2xsZWN0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvanNvbi9KU09OVG9rZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChJKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEJvb2xlYW4oSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG91YmxlKEkpRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRKU09OQXJyYXkoSSlMb3JnL2pzb24vSlNPTkFycmF5OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEpTT05PYmplY3QoSSlMb3JnL2pzb24vSlNPTk9iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKEkpSiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN0cmluZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTnVsbChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJqb2luKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJsZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcHQoSSlMamF2YS9sYW5nL09iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcHRCb29sZWFuKEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wdEJvb2xlYW4oSVopWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wdERvdWJsZShJKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcHREb3VibGUoSUQpRCIvPgotCQk8bWV0aG9kIG5hbWU9Im9wdEludChJKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcHRJbnQoSUkpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im9wdEpTT05BcnJheShJKUxvcmcvanNvbi9KU09OQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3B0SlNPTk9iamVjdChJKUxvcmcvanNvbi9KU09OT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wdExvbmcoSSlKIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3B0TG9uZyhJSilKIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3B0U3RyaW5nKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3B0U3RyaW5nKElMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KEQpTG9yZy9qc29uL0pTT05BcnJheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoSSlMb3JnL2pzb24vSlNPTkFycmF5OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChJRClMb3JnL2pzb24vSlNPTkFycmF5OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChJSSlMb3JnL2pzb24vSlNPTkFycmF5OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChJSilMb3JnL2pzb24vSlNPTkFycmF5OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChJTGphdmEvbGFuZy9PYmplY3Q7KUxvcmcvanNvbi9KU09OQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KElaKUxvcmcvanNvbi9KU09OQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KEopTG9yZy9qc29uL0pTT05BcnJheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoTGphdmEvbGFuZy9PYmplY3Q7KUxvcmcvanNvbi9KU09OQXJyYXk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icHV0KFopTG9yZy9qc29uL0pTT05BcnJheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmUoSSlMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSIxOSIvPgotCQk8bWV0aG9kIG5hbWU9InRvSlNPTk9iamVjdChMb3JnL2pzb24vSlNPTkFycmF5OylMb3JnL2pzb24vSlNPTk9iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1N0cmluZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy9qc29uL0pTT05FeGNlcHRpb24iIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL0V4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1Rocm93YWJsZTspViIgc2luY2U9IjI3Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvVGhyb3dhYmxlOylWIiBzaW5jZT0iMjciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvanNvbi9KU09OT2JqZWN0IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvdXRpbC9NYXA7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy9qc29uL0pTT05PYmplY3Q7W0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcvanNvbi9KU09OVG9rZW5lcjspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFjY3VtdWxhdGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KUxvcmcvanNvbi9KU09OT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldChMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qm9vbGVhbihMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERvdWJsZShMamF2YS9sYW5nL1N0cmluZzspRCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludChMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEpTT05BcnJheShMamF2YS9sYW5nL1N0cmluZzspTG9yZy9qc29uL0pTT05BcnJheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRKU09OT2JqZWN0KExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2pzb24vSlNPTk9iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb25nKExqYXZhL2xhbmcvU3RyaW5nOylKIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXMoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc051bGwoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJrZXlzKClMamF2YS91dGlsL0l0ZXJhdG9yOyIvPgotCQk8bWV0aG9kIG5hbWU9Imxlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5hbWVzKClMb3JnL2pzb24vSlNPTkFycmF5OyIvPgotCQk8bWV0aG9kIG5hbWU9Im51bWJlclRvU3RyaW5nKExqYXZhL2xhbmcvTnVtYmVyOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcHQoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wdEJvb2xlYW4oTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcHRCb29sZWFuKExqYXZhL2xhbmcvU3RyaW5nO1opWiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wdERvdWJsZShMamF2YS9sYW5nL1N0cmluZzspRCIvPgotCQk8bWV0aG9kIG5hbWU9Im9wdERvdWJsZShMamF2YS9sYW5nL1N0cmluZztEKUQiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcHRJbnQoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcHRJbnQoTGphdmEvbGFuZy9TdHJpbmc7SSlJIi8+Ci0JCTxtZXRob2QgbmFtZT0ib3B0SlNPTkFycmF5KExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2pzb24vSlNPTkFycmF5OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wdEpTT05PYmplY3QoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvanNvbi9KU09OT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9Im9wdExvbmcoTGphdmEvbGFuZy9TdHJpbmc7KUoiLz4KLQkJPG1ldGhvZCBuYW1lPSJvcHRMb25nKExqYXZhL2xhbmcvU3RyaW5nO0opSiIvPgotCQk8bWV0aG9kIG5hbWU9Im9wdFN0cmluZyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ib3B0U3RyaW5nKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoTGphdmEvbGFuZy9TdHJpbmc7RClMb3JnL2pzb24vSlNPTk9iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoTGphdmEvbGFuZy9TdHJpbmc7SSlMb3JnL2pzb24vSlNPTk9iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoTGphdmEvbGFuZy9TdHJpbmc7SilMb3JnL2pzb24vSlNPTk9iamVjdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwdXQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KUxvcmcvanNvbi9KU09OT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dChMamF2YS9sYW5nL1N0cmluZztaKUxvcmcvanNvbi9KU09OT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InB1dE9wdChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspTG9yZy9qc29uL0pTT05PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icXVvdGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idG9KU09OQXJyYXkoTG9yZy9qc29uL0pTT05BcnJheTspTG9yZy9qc29uL0pTT05BcnJheTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ0b1N0cmluZyhJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9IndyYXAoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjE5Ii8+Ci0JCTxmaWVsZCBuYW1lPSJOVUxMIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL2pzb24vSlNPTlN0cmluZ2VyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcnJheSgpTG9yZy9qc29uL0pTT05TdHJpbmdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRBcnJheSgpTG9yZy9qc29uL0pTT05TdHJpbmdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRPYmplY3QoKUxvcmcvanNvbi9KU09OU3RyaW5nZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ia2V5KExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2pzb24vSlNPTlN0cmluZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9Im9iamVjdCgpTG9yZy9qc29uL0pTT05TdHJpbmdlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJ2YWx1ZShEKUxvcmcvanNvbi9KU09OU3RyaW5nZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0idmFsdWUoSilMb3JnL2pzb24vSlNPTlN0cmluZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlKExqYXZhL2xhbmcvT2JqZWN0OylMb3JnL2pzb24vSlNPTlN0cmluZ2VyOyIvPgotCQk8bWV0aG9kIG5hbWU9InZhbHVlKFopTG9yZy9qc29uL0pTT05TdHJpbmdlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvanNvbi9KU09OVG9rZW5lciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iYmFjaygpViIvPgotCQk8bWV0aG9kIG5hbWU9ImRlaGV4Y2hhcihDKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJtb3JlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dCgpQyIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHQoQylDIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dChJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRDbGVhbigpQyIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRTdHJpbmcoQylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0VG8oQylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0VG8oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRWYWx1ZSgpTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2tpcFBhc3QoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJza2lwVG8oQylDIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3ludGF4RXJyb3IoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvanNvbi9KU09ORXhjZXB0aW9uOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL0F0dHIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvdzNjL2RvbS9Ob2RlIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0T3duZXJFbGVtZW50KClMb3JnL3czYy9kb20vRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTY2hlbWFUeXBlSW5mbygpTG9yZy93M2MvZG9tL1R5cGVJbmZvOyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTcGVjaWZpZWQoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNJZCgpWiIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYWx1ZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL0NEQVRBU2VjdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy93M2MvZG9tL1RleHQiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvdzNjL2RvbS9DaGFyYWN0ZXJEYXRhIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3czYy9kb20vTm9kZSIvPgotCQk8bWV0aG9kIG5hbWU9ImFwcGVuZERhdGEoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkZWxldGVEYXRhKElJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREYXRhKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMZW5ndGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJpbnNlcnREYXRhKElMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlcGxhY2VEYXRhKElJTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREYXRhKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3Vic3RyaW5nRGF0YShJSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvdzNjL2RvbS9Db21tZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3czYy9kb20vQ2hhcmFjdGVyRGF0YSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL0RPTUNvbmZpZ3VyYXRpb24iIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNhblNldFBhcmFtZXRlcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBhcmFtZXRlcihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyYW1ldGVyTmFtZXMoKUxvcmcvdzNjL2RvbS9ET01TdHJpbmdMaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhcmFtZXRlcihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL0RPTUVycm9yIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMb2NhdGlvbigpTG9yZy93M2MvZG9tL0RPTUxvY2F0b3I7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TWVzc2FnZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UmVsYXRlZERhdGEoKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFJlbGF0ZWRFeGNlcHRpb24oKUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFNldmVyaXR5KClTIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJTRVZFUklUWV9FUlJPUiIvPgotCQk8ZmllbGQgbmFtZT0iU0VWRVJJVFlfRkFUQUxfRVJST1IiLz4KLQkJPGZpZWxkIG5hbWU9IlNFVkVSSVRZX1dBUk5JTkciLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvdzNjL2RvbS9ET01FcnJvckhhbmRsZXIiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZUVycm9yKExvcmcvdzNjL2RvbS9ET01FcnJvcjspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL0RPTUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihTTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkRPTVNUUklOR19TSVpFX0VSUiIvPgotCQk8ZmllbGQgbmFtZT0iSElFUkFSQ0hZX1JFUVVFU1RfRVJSIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTkRFWF9TSVpFX0VSUiIvPgotCQk8ZmllbGQgbmFtZT0iSU5VU0VfQVRUUklCVVRFX0VSUiIvPgotCQk8ZmllbGQgbmFtZT0iSU5WQUxJRF9BQ0NFU1NfRVJSIi8+Ci0JCTxmaWVsZCBuYW1lPSJJTlZBTElEX0NIQVJBQ1RFUl9FUlIiLz4KLQkJPGZpZWxkIG5hbWU9IklOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUiIvPgotCQk8ZmllbGQgbmFtZT0iSU5WQUxJRF9TVEFURV9FUlIiLz4KLQkJPGZpZWxkIG5hbWU9Ik5BTUVTUEFDRV9FUlIiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PVF9GT1VORF9FUlIiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PVF9TVVBQT1JURURfRVJSIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19EQVRBX0FMTE9XRURfRVJSIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIiLz4KLQkJPGZpZWxkIG5hbWU9IlNZTlRBWF9FUlIiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVfTUlTTUFUQ0hfRVJSIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iVkFMSURBVElPTl9FUlIiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJXUk9OR19ET0NVTUVOVF9FUlIiLz4KLQkJPGZpZWxkIG5hbWU9ImNvZGUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvdzNjL2RvbS9ET01JbXBsZW1lbnRhdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlRG9jdW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TG9yZy93M2MvZG9tL0RvY3VtZW50VHlwZTspTG9yZy93M2MvZG9tL0RvY3VtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZURvY3VtZW50VHlwZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTG9yZy93M2MvZG9tL0RvY3VtZW50VHlwZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGZWF0dXJlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzRmVhdHVyZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL0RPTUltcGxlbWVudGF0aW9uTGlzdCIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXRlbShJKUxvcmcvdzNjL2RvbS9ET01JbXBsZW1lbnRhdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvdzNjL2RvbS9ET01JbXBsZW1lbnRhdGlvblNvdXJjZSIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RE9NSW1wbGVtZW50YXRpb24oTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9ET01JbXBsZW1lbnRhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRET01JbXBsZW1lbnRhdGlvbkxpc3QoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9ET01JbXBsZW1lbnRhdGlvbkxpc3Q7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3czYy9kb20vRE9NTG9jYXRvciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qnl0ZU9mZnNldCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbHVtbk51bWJlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmVOdW1iZXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRSZWxhdGVkTm9kZSgpTG9yZy93M2MvZG9tL05vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXJpKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVdGYxNk9mZnNldCgpSSIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL0RPTVN0cmluZ0xpc3QiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXRlbShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL0RvY3VtZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3czYy9kb20vTm9kZSIvPgotCQk8bWV0aG9kIG5hbWU9ImFkb3B0Tm9kZShMb3JnL3czYy9kb20vTm9kZTspTG9yZy93M2MvZG9tL05vZGU7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUF0dHJpYnV0ZShMamF2YS9sYW5nL1N0cmluZzspTG9yZy93M2MvZG9tL0F0dHI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlQXR0cmlidXRlTlMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9BdHRyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUNEQVRBU2VjdGlvbihMamF2YS9sYW5nL1N0cmluZzspTG9yZy93M2MvZG9tL0NEQVRBU2VjdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVDb21tZW50KExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL3czYy9kb20vQ29tbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVEb2N1bWVudEZyYWdtZW50KClMb3JnL3czYy9kb20vRG9jdW1lbnRGcmFnbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVFbGVtZW50KExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL3czYy9kb20vRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVFbGVtZW50TlMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9FbGVtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9ImNyZWF0ZUVudGl0eVJlZmVyZW5jZShMamF2YS9sYW5nL1N0cmluZzspTG9yZy93M2MvZG9tL0VudGl0eVJlZmVyZW5jZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlVGV4dE5vZGUoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9UZXh0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERvY3R5cGUoKUxvcmcvdzNjL2RvbS9Eb2N1bWVudFR5cGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG9jdW1lbnRFbGVtZW50KClMb3JnL3czYy9kb20vRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREb2N1bWVudFVSSSgpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERvbUNvbmZpZygpTG9yZy93M2MvZG9tL0RPTUNvbmZpZ3VyYXRpb247IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVsZW1lbnRCeUlkKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL3czYy9kb20vRWxlbWVudDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbGVtZW50c0J5VGFnTmFtZShMamF2YS9sYW5nL1N0cmluZzspTG9yZy93M2MvZG9tL05vZGVMaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVsZW1lbnRzQnlUYWdOYW1lTlMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9Ob2RlTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbXBsZW1lbnRhdGlvbigpTG9yZy93M2MvZG9tL0RPTUltcGxlbWVudGF0aW9uOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldElucHV0RW5jb2RpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTdHJpY3RFcnJvckNoZWNraW5nKClaIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFhtbEVuY29kaW5nKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0WG1sU3RhbmRhbG9uZSgpWiIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRYbWxWZXJzaW9uKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaW1wb3J0Tm9kZShMb3JnL3czYy9kb20vTm9kZTtaKUxvcmcvdzNjL2RvbS9Ob2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9Im5vcm1hbGl6ZURvY3VtZW50KClWIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InJlbmFtZU5vZGUoTG9yZy93M2MvZG9tL05vZGU7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9Ob2RlOyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREb2N1bWVudFVSSShMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTdHJpY3RFcnJvckNoZWNraW5nKFopViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRYbWxTdGFuZGFsb25lKFopViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRYbWxWZXJzaW9uKExqYXZhL2xhbmcvU3RyaW5nOylWIiBzaW5jZT0iOCIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL0RvY3VtZW50RnJhZ21lbnQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvdzNjL2RvbS9Ob2RlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3czYy9kb20vRG9jdW1lbnRUeXBlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3czYy9kb20vTm9kZSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudGl0aWVzKClMb3JnL3czYy9kb20vTmFtZWROb2RlTWFwOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEludGVybmFsU3Vic2V0KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROb3RhdGlvbnMoKUxvcmcvdzNjL2RvbS9OYW1lZE5vZGVNYXA7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHVibGljSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5c3RlbUlkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvdzNjL2RvbS9FbGVtZW50IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3czYy9kb20vTm9kZSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlTlMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZU5vZGUoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9BdHRyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZU5vZGVOUyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTG9yZy93M2MvZG9tL0F0dHI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RWxlbWVudHNCeVRhZ05hbWUoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9Ob2RlTGlzdDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbGVtZW50c0J5VGFnTmFtZU5TKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMb3JnL3czYy9kb20vTm9kZUxpc3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U2NoZW1hVHlwZUluZm8oKUxvcmcvdzNjL2RvbS9UeXBlSW5mbzsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VGFnTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQXR0cmlidXRlKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQXR0cmlidXRlTlMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBdHRyaWJ1dGUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVBdHRyaWJ1dGVOUyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUF0dHJpYnV0ZU5vZGUoTG9yZy93M2MvZG9tL0F0dHI7KUxvcmcvdzNjL2RvbS9BdHRyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF0dHJpYnV0ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF0dHJpYnV0ZU5TKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXR0cmlidXRlTm9kZShMb3JnL3czYy9kb20vQXR0cjspTG9yZy93M2MvZG9tL0F0dHI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0QXR0cmlidXRlTm9kZU5TKExvcmcvdzNjL2RvbS9BdHRyOylMb3JnL3czYy9kb20vQXR0cjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRJZEF0dHJpYnV0ZShMamF2YS9sYW5nL1N0cmluZztaKVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWRBdHRyaWJ1dGVOUyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztaKVYiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SWRBdHRyaWJ1dGVOb2RlKExvcmcvdzNjL2RvbS9BdHRyO1opViIgc2luY2U9IjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvdzNjL2RvbS9FbnRpdHkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvdzNjL2RvbS9Ob2RlIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5wdXRFbmNvZGluZygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5vdGF0aW9uTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHVibGljSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5c3RlbUlkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRYbWxFbmNvZGluZygpTGphdmEvbGFuZy9TdHJpbmc7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFhtbFZlcnNpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjgiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvdzNjL2RvbS9FbnRpdHlSZWZlcmVuY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvdzNjL2RvbS9Ob2RlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3czYy9kb20vTmFtZUxpc3QiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbnRhaW5zKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iY29udGFpbnNOUyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lc3BhY2VVUkkoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvdzNjL2RvbS9OYW1lZE5vZGVNYXAiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWVkSXRlbShMamF2YS9sYW5nL1N0cmluZzspTG9yZy93M2MvZG9tL05vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZWRJdGVtTlMoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9Ob2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9Iml0ZW0oSSlMb3JnL3czYy9kb20vTm9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVOYW1lZEl0ZW0oTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9Ob2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZU5hbWVkSXRlbU5TKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMb3JnL3czYy9kb20vTm9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYW1lZEl0ZW0oTG9yZy93M2MvZG9tL05vZGU7KUxvcmcvdzNjL2RvbS9Ob2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldE5hbWVkSXRlbU5TKExvcmcvdzNjL2RvbS9Ob2RlOylMb3JnL3czYy9kb20vTm9kZTsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvdzNjL2RvbS9Ob2RlIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhcHBlbmRDaGlsZChMb3JnL3czYy9kb20vTm9kZTspTG9yZy93M2MvZG9tL05vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2xvbmVOb2RlKFopTG9yZy93M2MvZG9tL05vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tcGFyZURvY3VtZW50UG9zaXRpb24oTG9yZy93M2MvZG9tL05vZGU7KVMiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlcygpTG9yZy93M2MvZG9tL05hbWVkTm9kZU1hcDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCYXNlVVJJKClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hpbGROb2RlcygpTG9yZy93M2MvZG9tL05vZGVMaXN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZlYXR1cmUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaXJzdENoaWxkKClMb3JnL3czYy9kb20vTm9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMYXN0Q2hpbGQoKUxvcmcvdzNjL2RvbS9Ob2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZXNwYWNlVVJJKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZXh0U2libGluZygpTG9yZy93M2MvZG9tL05vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Tm9kZU5hbWUoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5vZGVUeXBlKClTIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Tm9kZVZhbHVlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRPd25lckRvY3VtZW50KClMb3JnL3czYy9kb20vRG9jdW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50Tm9kZSgpTG9yZy93M2MvZG9tL05vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlZml4KClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmV2aW91c1NpYmxpbmcoKUxvcmcvdzNjL2RvbS9Ob2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRDb250ZW50KClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VXNlckRhdGEoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJoYXNBdHRyaWJ1dGVzKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaGFzQ2hpbGROb2RlcygpWiIvPgotCQk8bWV0aG9kIG5hbWU9Imluc2VydEJlZm9yZShMb3JnL3czYy9kb20vTm9kZTtMb3JnL3czYy9kb20vTm9kZTspTG9yZy93M2MvZG9tL05vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZWZhdWx0TmFtZXNwYWNlKExqYXZhL2xhbmcvU3RyaW5nOylaIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRXF1YWxOb2RlKExvcmcvdzNjL2RvbS9Ob2RlOylaIiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU2FtZU5vZGUoTG9yZy93M2MvZG9tL05vZGU7KVoiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNTdXBwb3J0ZWQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb29rdXBOYW1lc3BhY2VVUkkoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJsb29rdXBQcmVmaXgoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJub3JtYWxpemUoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZW1vdmVDaGlsZChMb3JnL3czYy9kb20vTm9kZTspTG9yZy93M2MvZG9tL05vZGU7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZUNoaWxkKExvcmcvdzNjL2RvbS9Ob2RlO0xvcmcvdzNjL2RvbS9Ob2RlOylMb3JnL3czYy9kb20vTm9kZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROb2RlVmFsdWUoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmVmaXgoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRUZXh0Q29udGVudChMamF2YS9sYW5nL1N0cmluZzspViIgc2luY2U9IjgiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRVc2VyRGF0YShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDtMb3JnL3czYy9kb20vVXNlckRhdGFIYW5kbGVyOylMamF2YS9sYW5nL09iamVjdDsiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJBVFRSSUJVVEVfTk9ERSIvPgotCQk8ZmllbGQgbmFtZT0iQ0RBVEFfU0VDVElPTl9OT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJDT01NRU5UX05PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkRPQ1VNRU5UX05PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSIgc2luY2U9IjgiLz4KLQkJPGZpZWxkIG5hbWU9IkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HIiBzaW5jZT0iOCIvPgotCQk8ZmllbGQgbmFtZT0iRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUMiIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkciIHNpbmNlPSI4Ii8+Ci0JCTxmaWVsZCBuYW1lPSJET0NVTUVOVF9UWVBFX05PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkVMRU1FTlRfTk9ERSIvPgotCQk8ZmllbGQgbmFtZT0iRU5USVRZX05PREUiLz4KLQkJPGZpZWxkIG5hbWU9IkVOVElUWV9SRUZFUkVOQ0VfTk9ERSIvPgotCQk8ZmllbGQgbmFtZT0iTk9UQVRJT05fTk9ERSIvPgotCQk8ZmllbGQgbmFtZT0iUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFIi8+Ci0JCTxmaWVsZCBuYW1lPSJURVhUX05PREUiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvdzNjL2RvbS9Ob2RlTGlzdCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGVuZ3RoKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXRlbShJKUxvcmcvdzNjL2RvbS9Ob2RlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL05vdGF0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3czYy9kb20vTm9kZSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFB1YmxpY0lkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1JZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3czYy9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3czYy9kb20vTm9kZSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERhdGEoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRhcmdldCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RGF0YShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL1RleHQiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcvdzNjL2RvbS9DaGFyYWN0ZXJEYXRhIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0V2hvbGVUZXh0KClMamF2YS9sYW5nL1N0cmluZzsiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNFbGVtZW50Q29udGVudFdoaXRlc3BhY2UoKVoiIHNpbmNlPSI4Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVwbGFjZVdob2xlVGV4dChMamF2YS9sYW5nL1N0cmluZzspTG9yZy93M2MvZG9tL1RleHQ7IiBzaW5jZT0iOCIvPgotCQk8bWV0aG9kIG5hbWU9InNwbGl0VGV4dChJKUxvcmcvdzNjL2RvbS9UZXh0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL1R5cGVJbmZvIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlTmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZU5hbWVzcGFjZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZXJpdmVkRnJvbShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJKVoiLz4KLQkJPGZpZWxkIG5hbWU9IkRFUklWQVRJT05fRVhURU5TSU9OIi8+Ci0JCTxmaWVsZCBuYW1lPSJERVJJVkFUSU9OX0xJU1QiLz4KLQkJPGZpZWxkIG5hbWU9IkRFUklWQVRJT05fUkVTVFJJQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IkRFUklWQVRJT05fVU5JT04iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvdzNjL2RvbS9Vc2VyRGF0YUhhbmRsZXIiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImhhbmRsZShTTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7TG9yZy93M2MvZG9tL05vZGU7TG9yZy93M2MvZG9tL05vZGU7KVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PREVfQURPUFRFRCIvPgotCQk8ZmllbGQgbmFtZT0iTk9ERV9DTE9ORUQiLz4KLQkJPGZpZWxkIG5hbWU9Ik5PREVfREVMRVRFRCIvPgotCQk8ZmllbGQgbmFtZT0iTk9ERV9JTVBPUlRFRCIvPgotCQk8ZmllbGQgbmFtZT0iTk9ERV9SRU5BTUVEIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3czYy9kb20vbHMvRE9NSW1wbGVtZW50YXRpb25MUyIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlTFNJbnB1dCgpTG9yZy93M2MvZG9tL2xzL0xTSW5wdXQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlTFNPdXRwdXQoKUxvcmcvdzNjL2RvbS9scy9MU091dHB1dDsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVMU1BhcnNlcihTTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9scy9MU1BhcnNlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVMU1NlcmlhbGl6ZXIoKUxvcmcvdzNjL2RvbS9scy9MU1NlcmlhbGl6ZXI7Ii8+Ci0JCTxmaWVsZCBuYW1lPSJNT0RFX0FTWU5DSFJPTk9VUyIvPgotCQk8ZmllbGQgbmFtZT0iTU9ERV9TWU5DSFJPTk9VUyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL2xzL0xTRXhjZXB0aW9uIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KFNMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8ZmllbGQgbmFtZT0iUEFSU0VfRVJSIi8+Ci0JCTxmaWVsZCBuYW1lPSJTRVJJQUxJWkVfRVJSIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2RlIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3czYy9kb20vbHMvTFNJbnB1dCIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QmFzZVVSSSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Qnl0ZVN0cmVhbSgpTGphdmEvaW8vSW5wdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2VydGlmaWVkVGV4dCgpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENoYXJhY3RlclN0cmVhbSgpTGphdmEvaW8vUmVhZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY29kaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQdWJsaWNJZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3RyaW5nRGF0YSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lzdGVtSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEJhc2VVUkkoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCeXRlU3RyZWFtKExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2VydGlmaWVkVGV4dChaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDaGFyYWN0ZXJTdHJlYW0oTGphdmEvaW8vUmVhZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5jb2RpbmcoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQdWJsaWNJZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN0cmluZ0RhdGEoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTeXN0ZW1JZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL2xzL0xTT3V0cHV0IiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlU3RyZWFtKClMamF2YS9pby9PdXRwdXRTdHJlYW07Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q2hhcmFjdGVyU3RyZWFtKClMamF2YS9pby9Xcml0ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RW5jb2RpbmcoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5c3RlbUlkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCeXRlU3RyZWFtKExqYXZhL2lvL091dHB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldENoYXJhY3RlclN0cmVhbShMamF2YS9pby9Xcml0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbmNvZGluZyhMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFN5c3RlbUlkKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3czYy9kb20vbHMvTFNQYXJzZXIiIHNpbmNlPSI4Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImFib3J0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXN5bmMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCdXN5KClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG9tQ29uZmlnKClMb3JnL3czYy9kb20vRE9NQ29uZmlndXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGaWx0ZXIoKUxvcmcvdzNjL2RvbS9scy9MU1BhcnNlckZpbHRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMb3JnL3czYy9kb20vbHMvTFNJbnB1dDspTG9yZy93M2MvZG9tL0RvY3VtZW50OyIvPgotCQk8bWV0aG9kIG5hbWU9InBhcnNlVVJJKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL3czYy9kb20vRG9jdW1lbnQ7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2VXaXRoQ29udGV4dChMb3JnL3czYy9kb20vbHMvTFNJbnB1dDtMb3JnL3czYy9kb20vTm9kZTtTKUxvcmcvdzNjL2RvbS9Ob2RlOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZpbHRlcihMb3JnL3czYy9kb20vbHMvTFNQYXJzZXJGaWx0ZXI7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9BUFBFTkRfQVNfQ0hJTERSRU4iLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9JTlNFUlRfQUZURVIiLz4KLQkJPGZpZWxkIG5hbWU9IkFDVElPTl9JTlNFUlRfQkVGT1JFIi8+Ci0JCTxmaWVsZCBuYW1lPSJBQ1RJT05fUkVQTEFDRSIvPgotCQk8ZmllbGQgbmFtZT0iQUNUSU9OX1JFUExBQ0VfQ0hJTERSRU4iLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcvdzNjL2RvbS9scy9MU1BhcnNlckZpbHRlciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYWNjZXB0Tm9kZShMb3JnL3czYy9kb20vTm9kZTspUyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFdoYXRUb1Nob3coKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEVsZW1lbnQoTG9yZy93M2MvZG9tL0VsZW1lbnQ7KVMiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTFRFUl9BQ0NFUFQiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTFRFUl9JTlRFUlJVUFQiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTFRFUl9SRUpFQ1QiLz4KLQkJPGZpZWxkIG5hbWU9IkZJTFRFUl9TS0lQIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3czYy9kb20vbHMvTFNSZXNvdXJjZVJlc29sdmVyIiBzaW5jZT0iOCI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJyZXNvbHZlUmVzb3VyY2UoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvdzNjL2RvbS9scy9MU0lucHV0OyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy93M2MvZG9tL2xzL0xTU2VyaWFsaXplciIgc2luY2U9IjgiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RG9tQ29uZmlnKClMb3JnL3czYy9kb20vRE9NQ29uZmlndXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROZXdMaW5lKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROZXdMaW5lKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGUoTG9yZy93M2MvZG9tL05vZGU7TG9yZy93M2MvZG9tL2xzL0xTT3V0cHV0OylaIi8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVUb1N0cmluZyhMb3JnL3czYy9kb20vTm9kZTspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0id3JpdGVUb1VSSShMb3JnL3czYy9kb20vTm9kZTtMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L0F0dHJpYnV0ZUxpc3QiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRUeXBlKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRWYWx1ZShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3htbC9zYXgvQXR0cmlidXRlcyIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0SW5kZXgoTGphdmEvbGFuZy9TdHJpbmc7KUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbmRleChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExlbmd0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExvY2FsTmFtZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFFOYW1lKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VHlwZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFR5cGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFVSSShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbHVlKEkpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0VmFsdWUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFZhbHVlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcveG1sL3NheC9Db250ZW50SGFuZGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hhcmFjdGVycyhbQ0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmREb2N1bWVudCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZEVsZW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRQcmVmaXhNYXBwaW5nKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaWdub3JhYmxlV2hpdGVzcGFjZShbQ0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREb2N1bWVudExvY2F0b3IoTG9yZy94bWwvc2F4L0xvY2F0b3I7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJza2lwcGVkRW50aXR5KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnREb2N1bWVudCgpViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0RWxlbWVudChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMb3JnL3htbC9zYXgvQXR0cmlidXRlczspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0UHJlZml4TWFwcGluZyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L0RUREhhbmRsZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9Im5vdGF0aW9uRGVjbChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InVucGFyc2VkRW50aXR5RGVjbChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L0RvY3VtZW50SGFuZGxlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY2hhcmFjdGVycyhbQ0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmREb2N1bWVudCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZEVsZW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJpZ25vcmFibGVXaGl0ZXNwYWNlKFtDSUkpViIvPgotCQk8bWV0aG9kIG5hbWU9InByb2Nlc3NpbmdJbnN0cnVjdGlvbihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERvY3VtZW50TG9jYXRvcihMb3JnL3htbC9zYXgvTG9jYXRvcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0RG9jdW1lbnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEVsZW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7TG9yZy94bWwvc2F4L0F0dHJpYnV0ZUxpc3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcveG1sL3NheC9FbnRpdHlSZXNvbHZlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZUVudGl0eShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTG9yZy94bWwvc2F4L0lucHV0U291cmNlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L0Vycm9ySGFuZGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZXJyb3IoTG9yZy94bWwvc2F4L1NBWFBhcnNlRXhjZXB0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZmF0YWxFcnJvcihMb3JnL3htbC9zYXgvU0FYUGFyc2VFeGNlcHRpb247KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJ3YXJuaW5nKExvcmcveG1sL3NheC9TQVhQYXJzZUV4Y2VwdGlvbjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L0hhbmRsZXJCYXNlIiBzaW5jZT0iMSIgZGVwcmVjYXRlZD0iOSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3htbC9zYXgvRFRESGFuZGxlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcveG1sL3NheC9Eb2N1bWVudEhhbmRsZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3htbC9zYXgvRW50aXR5UmVzb2x2ZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3htbC9zYXgvRXJyb3JIYW5kbGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3htbC9zYXgvSW5wdXRTb3VyY2UiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9JbnB1dFN0cmVhbTspViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9pby9SZWFkZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRCeXRlU3RyZWFtKClMamF2YS9pby9JbnB1dFN0cmVhbTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDaGFyYWN0ZXJTdHJlYW0oKUxqYXZhL2lvL1JlYWRlcjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRFbmNvZGluZygpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHVibGljSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFN5c3RlbUlkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRCeXRlU3RyZWFtKExqYXZhL2lvL0lucHV0U3RyZWFtOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q2hhcmFjdGVyU3RyZWFtKExqYXZhL2lvL1JlYWRlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEVuY29kaW5nKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHVibGljSWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTeXN0ZW1JZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L0xvY2F0b3IiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImdldENvbHVtbk51bWJlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldExpbmVOdW1iZXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQdWJsaWNJZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0U3lzdGVtSWQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L1BhcnNlciIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMb3JnL3htbC9zYXgvSW5wdXRTb3VyY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREVERIYW5kbGVyKExvcmcveG1sL3NheC9EVERIYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RG9jdW1lbnRIYW5kbGVyKExvcmcveG1sL3NheC9Eb2N1bWVudEhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFbnRpdHlSZXNvbHZlcihMb3JnL3htbC9zYXgvRW50aXR5UmVzb2x2ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRFcnJvckhhbmRsZXIoTG9yZy94bWwvc2F4L0Vycm9ySGFuZGxlcjspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExvY2FsZShMamF2YS91dGlsL0xvY2FsZTspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L1NBWEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvRXhjZXB0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvRXhjZXB0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXhjZXB0aW9uKClMamF2YS9sYW5nL0V4Y2VwdGlvbjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcveG1sL3NheC9TQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy94bWwvc2F4L1NBWEV4Y2VwdGlvbiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L1NBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcveG1sL3NheC9TQVhFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcveG1sL3NheC9TQVhQYXJzZUV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcveG1sL3NheC9TQVhFeGNlcHRpb24iLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7SUkpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJSUxqYXZhL2xhbmcvRXhjZXB0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xvcmcveG1sL3NheC9Mb2NhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xvcmcveG1sL3NheC9Mb2NhdG9yO0xqYXZhL2xhbmcvRXhjZXB0aW9uOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sdW1uTnVtYmVyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TGluZU51bWJlcigpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFB1YmxpY0lkKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRTeXN0ZW1JZCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3htbC9zYXgvWE1MRmlsdGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3htbC9zYXgvWE1MUmVhZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UGFyZW50KClMb3JnL3htbC9zYXgvWE1MUmVhZGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InNldFBhcmVudChMb3JnL3htbC9zYXgvWE1MUmVhZGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3htbC9zYXgvWE1MUmVhZGVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb250ZW50SGFuZGxlcigpTG9yZy94bWwvc2F4L0NvbnRlbnRIYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERUREhhbmRsZXIoKUxvcmcveG1sL3NheC9EVERIYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVudGl0eVJlc29sdmVyKClMb3JnL3htbC9zYXgvRW50aXR5UmVzb2x2ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RXJyb3JIYW5kbGVyKClMb3JnL3htbC9zYXgvRXJyb3JIYW5kbGVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZlYXR1cmUoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9wZXJ0eShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icGFyc2UoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZShMb3JnL3htbC9zYXgvSW5wdXRTb3VyY2U7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRDb250ZW50SGFuZGxlcihMb3JnL3htbC9zYXgvQ29udGVudEhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXREVERIYW5kbGVyKExvcmcveG1sL3NheC9EVERIYW5kbGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW50aXR5UmVzb2x2ZXIoTG9yZy94bWwvc2F4L0VudGl0eVJlc29sdmVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RXJyb3JIYW5kbGVyKExvcmcveG1sL3NheC9FcnJvckhhbmRsZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGZWF0dXJlKExqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFByb3BlcnR5KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0OylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3htbC9zYXgvZXh0L0F0dHJpYnV0ZXMyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3htbC9zYXgvQXR0cmlidXRlcyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGVjbGFyZWQoSSlaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNEZWNsYXJlZChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRGVjbGFyZWQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NwZWNpZmllZChJKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc1NwZWNpZmllZChMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzU3BlY2lmaWVkKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3htbC9zYXgvZXh0L0F0dHJpYnV0ZXMySW1wbCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcveG1sL3NheC9oZWxwZXJzL0F0dHJpYnV0ZXNJbXBsIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L2V4dC9BdHRyaWJ1dGVzMiIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL3htbC9zYXgvQXR0cmlidXRlczspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldERlY2xhcmVkKElaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTcGVjaWZpZWQoSVopViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L2V4dC9EZWNsSGFuZGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iYXR0cmlidXRlRGVjbChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImVsZW1lbnREZWNsKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZXh0ZXJuYWxFbnRpdHlEZWNsKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iaW50ZXJuYWxFbnRpdHlEZWNsKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3htbC9zYXgvZXh0L0RlZmF1bHRIYW5kbGVyMiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJvcmcveG1sL3NheC9oZWxwZXJzL0RlZmF1bHRIYW5kbGVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L2V4dC9EZWNsSGFuZGxlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcveG1sL3NheC9leHQvRW50aXR5UmVzb2x2ZXIyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L2V4dC9MZXhpY2FsSGFuZGxlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L2V4dC9FbnRpdHlSZXNvbHZlcjIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcveG1sL3NheC9FbnRpdHlSZXNvbHZlciIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV4dGVybmFsU3Vic2V0KExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMb3JnL3htbC9zYXgvSW5wdXRTb3VyY2U7Ii8+Ci0JCTxtZXRob2QgbmFtZT0icmVzb2x2ZUVudGl0eShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspTG9yZy94bWwvc2F4L0lucHV0U291cmNlOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L2V4dC9MZXhpY2FsSGFuZGxlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY29tbWVudChbQ0lJKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRDREFUQSgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZERURCgpViIvPgotCQk8bWV0aG9kIG5hbWU9ImVuZEVudGl0eShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0Q0RBVEEoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydERURChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0RW50aXR5KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3htbC9zYXgvZXh0L0xvY2F0b3IyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3htbC9zYXgvTG9jYXRvciIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEVuY29kaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRYTUxWZXJzaW9uKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcveG1sL3NheC9leHQvTG9jYXRvcjJJbXBsIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9Im9yZy94bWwvc2F4L2hlbHBlcnMvTG9jYXRvckltcGwiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3htbC9zYXgvZXh0L0xvY2F0b3IyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcveG1sL3NheC9Mb2NhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RW5jb2RpbmcoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRYTUxWZXJzaW9uKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3htbC9zYXgvaGVscGVycy9BdHRyaWJ1dGVMaXN0SW1wbCIgc2luY2U9IjEiIGRlcHJlY2F0ZWQ9IjkiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L0F0dHJpYnV0ZUxpc3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy94bWwvc2F4L0F0dHJpYnV0ZUxpc3Q7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJhZGRBdHRyaWJ1dGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjbGVhcigpViIvPgotCQk8bWV0aG9kIG5hbWU9InJlbW92ZUF0dHJpYnV0ZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF0dHJpYnV0ZUxpc3QoTG9yZy94bWwvc2F4L0F0dHJpYnV0ZUxpc3Q7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcveG1sL3NheC9oZWxwZXJzL0F0dHJpYnV0ZXNJbXBsIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3htbC9zYXgvQXR0cmlidXRlcyIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL3htbC9zYXgvQXR0cmlidXRlczspViIvPgotCQk8bWV0aG9kIG5hbWU9ImFkZEF0dHJpYnV0ZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNsZWFyKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVtb3ZlQXR0cmlidXRlKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEF0dHJpYnV0ZShJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRBdHRyaWJ1dGVzKExvcmcveG1sL3NheC9BdHRyaWJ1dGVzOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0TG9jYWxOYW1lKElMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFFOYW1lKElMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFR5cGUoSUxqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0VVJJKElMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldFZhbHVlKElMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L2hlbHBlcnMvRGVmYXVsdEhhbmRsZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcveG1sL3NheC9Db250ZW50SGFuZGxlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcveG1sL3NheC9EVERIYW5kbGVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L0VudGl0eVJlc29sdmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L0Vycm9ySGFuZGxlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L2hlbHBlcnMvTG9jYXRvckltcGwiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcveG1sL3NheC9Mb2NhdG9yIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcveG1sL3NheC9Mb2NhdG9yOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0Q29sdW1uTnVtYmVyKEkpViIvPgotCQk8bWV0aG9kIG5hbWU9InNldExpbmVOdW1iZXIoSSlWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHVibGljSWQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRTeXN0ZW1JZChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L2hlbHBlcnMvTmFtZXNwYWNlU3VwcG9ydCIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZGVjbGFyZVByZWZpeChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspWiIvPgotCQk8bWV0aG9kIG5hbWU9ImdldERlY2xhcmVkUHJlZml4ZXMoKUxqYXZhL3V0aWwvRW51bWVyYXRpb247Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJlZml4KExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVmaXhlcygpTGphdmEvdXRpbC9FbnVtZXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVmaXhlcyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9FbnVtZXJhdGlvbjsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRVUkkoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImlzTmFtZXNwYWNlRGVjbFVyaXMoKVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJwb3BDb250ZXh0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icHJvY2Vzc05hbWUoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO1opW0xqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9InB1c2hDb250ZXh0KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVzZXQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYW1lc3BhY2VEZWNsVXJpcyhaKVYiLz4KLQkJPGZpZWxkIG5hbWU9Ik5TREVDTCIvPgotCQk8ZmllbGQgbmFtZT0iWE1MTlMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcveG1sL3NheC9oZWxwZXJzL1BhcnNlckFkYXB0ZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcveG1sL3NheC9Eb2N1bWVudEhhbmRsZXIiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3htbC9zYXgvWE1MUmVhZGVyIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExvcmcveG1sL3NheC9QYXJzZXI7KVYiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcveG1sL3NheC9oZWxwZXJzL1BhcnNlckZhY3RvcnkiIHNpbmNlPSIxIiBkZXByZWNhdGVkPSI5Ij4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9Im1ha2VQYXJzZXIoKUxvcmcveG1sL3NheC9QYXJzZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibWFrZVBhcnNlcihMamF2YS9sYW5nL1N0cmluZzspTG9yZy94bWwvc2F4L1BhcnNlcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcveG1sL3NheC9oZWxwZXJzL1hNTEZpbHRlckltcGwiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcveG1sL3NheC9Db250ZW50SGFuZGxlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcveG1sL3NheC9EVERIYW5kbGVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L0VudGl0eVJlc29sdmVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L0Vycm9ySGFuZGxlciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcveG1sL3NheC9YTUxGaWx0ZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy94bWwvc2F4L1hNTFJlYWRlcjspViIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWwvc2F4L2hlbHBlcnMvWE1MUmVhZGVyQWRhcHRlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L0NvbnRlbnRIYW5kbGVyIi8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L1BhcnNlciIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PihMb3JnL3htbC9zYXgvWE1MUmVhZGVyOylWIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3htbC9zYXgvaGVscGVycy9YTUxSZWFkZXJGYWN0b3J5IiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJjcmVhdGVYTUxSZWFkZXIoKUxvcmcveG1sL3NheC9YTUxSZWFkZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iY3JlYXRlWE1MUmVhZGVyKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL3htbC9zYXgvWE1MUmVhZGVyOyIvPgotCTwvY2xhc3M+Ci0JPGNsYXNzIG5hbWU9Im9yZy94bWxwdWxsL3YxL1htbFB1bGxQYXJzZXIiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9ImRlZmluZUVudGl0eVJlcGxhY2VtZW50VGV4dChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZUNvdW50KClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0QXR0cmlidXRlTmFtZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZU5hbWVzcGFjZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZVByZWZpeChJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZVR5cGUoSSlMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRBdHRyaWJ1dGVWYWx1ZShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEF0dHJpYnV0ZVZhbHVlKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRDb2x1bW5OdW1iZXIoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXREZXB0aCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEV2ZW50VHlwZSgpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZlYXR1cmUoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRJbnB1dEVuY29kaW5nKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lTnVtYmVyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZXNwYWNlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXROYW1lc3BhY2UoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWVzcGFjZUNvdW50KEkpSSIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWVzcGFjZVByZWZpeChJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldE5hbWVzcGFjZVVyaShJKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFBvc2l0aW9uRGVzY3JpcHRpb24oKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFByZWZpeCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0UHJvcGVydHkoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHQoKUxqYXZhL2xhbmcvU3RyaW5nOyIvPgotCQk8bWV0aG9kIG5hbWU9ImdldFRleHRDaGFyYWN0ZXJzKFtJKVtDIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNBdHRyaWJ1dGVEZWZhdWx0KEkpWiIvPgotCQk8bWV0aG9kIG5hbWU9ImlzRW1wdHlFbGVtZW50VGFnKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNXaGl0ZXNwYWNlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dCgpSSIvPgotCQk8bWV0aG9kIG5hbWU9Im5leHRUYWcoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXh0VGV4dCgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV4dFRva2VuKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0icmVxdWlyZShJTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRGZWF0dXJlKExqYXZhL2xhbmcvU3RyaW5nO1opViIvPgotCQk8bWV0aG9kIG5hbWU9InNldElucHV0KExqYXZhL2lvL0lucHV0U3RyZWFtO0xqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0SW5wdXQoTGphdmEvaW8vUmVhZGVyOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0UHJvcGVydHkoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9PYmplY3Q7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkNEU0VDVCIvPgotCQk8ZmllbGQgbmFtZT0iQ09NTUVOVCIvPgotCQk8ZmllbGQgbmFtZT0iRE9DREVDTCIvPgotCQk8ZmllbGQgbmFtZT0iRU5EX0RPQ1VNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTkRfVEFHIi8+Ci0JCTxmaWVsZCBuYW1lPSJFTlRJVFlfUkVGIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1BST0NFU1NfRE9DREVDTCIvPgotCQk8ZmllbGQgbmFtZT0iRkVBVFVSRV9QUk9DRVNTX05BTUVTUEFDRVMiLz4KLQkJPGZpZWxkIG5hbWU9IkZFQVRVUkVfUkVQT1JUX05BTUVTUEFDRV9BVFRSSUJVVEVTIi8+Ci0JCTxmaWVsZCBuYW1lPSJGRUFUVVJFX1ZBTElEQVRJT04iLz4KLQkJPGZpZWxkIG5hbWU9IklHTk9SQUJMRV9XSElURVNQQUNFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOT19OQU1FU1BBQ0UiLz4KLQkJPGZpZWxkIG5hbWU9IlBST0NFU1NJTkdfSU5TVFJVQ1RJT04iLz4KLQkJPGZpZWxkIG5hbWU9IlNUQVJUX0RPQ1VNRU5UIi8+Ci0JCTxmaWVsZCBuYW1lPSJTVEFSVF9UQUciLz4KLQkJPGZpZWxkIG5hbWU9IlRFWFQiLz4KLQkJPGZpZWxkIG5hbWU9IlRZUEVTIi8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3htbHB1bGwvdjEvWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvRXhjZXB0aW9uIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iJmx0O2luaXQ+KExqYXZhL2xhbmcvU3RyaW5nO0xvcmcveG1scHVsbC92MS9YbWxQdWxsUGFyc2VyO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0Q29sdW1uTnVtYmVyKClJIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGV0YWlsKClMamF2YS9sYW5nL1Rocm93YWJsZTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRMaW5lTnVtYmVyKClJIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb2x1bW4iLz4KLQkJPGZpZWxkIG5hbWU9ImRldGFpbCIvPgotCQk8ZmllbGQgbmFtZT0icm93Ii8+Ci0JPC9jbGFzcz4KLQk8Y2xhc3MgbmFtZT0ib3JnL3htbHB1bGwvdjEvWG1sUHVsbFBhcnNlckZhY3RvcnkiIHNpbmNlPSIxIj4KLQkJPGV4dGVuZHMgbmFtZT0iamF2YS9sYW5nL09iamVjdCIvPgotCQk8bWV0aG9kIG5hbWU9IiZsdDtpbml0PigpViIvPgotCQk8bWV0aG9kIG5hbWU9ImdldEZlYXR1cmUoTGphdmEvbGFuZy9TdHJpbmc7KVoiLz4KLQkJPG1ldGhvZCBuYW1lPSJpc05hbWVzcGFjZUF3YXJlKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0iaXNWYWxpZGF0aW5nKClaIi8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3SW5zdGFuY2UoKUxvcmcveG1scHVsbC92MS9YbWxQdWxsUGFyc2VyRmFjdG9yeTsiLz4KLQkJPG1ldGhvZCBuYW1lPSJuZXdJbnN0YW5jZShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzOylMb3JnL3htbHB1bGwvdjEvWG1sUHVsbFBhcnNlckZhY3Rvcnk7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3UHVsbFBhcnNlcigpTG9yZy94bWxwdWxsL3YxL1htbFB1bGxQYXJzZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ibmV3U2VyaWFsaXplcigpTG9yZy94bWxwdWxsL3YxL1htbFNlcmlhbGl6ZXI7Ii8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0RmVhdHVyZShMamF2YS9sYW5nL1N0cmluZztaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXROYW1lc3BhY2VBd2FyZShaKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRWYWxpZGF0aW5nKFopViIvPgotCQk8ZmllbGQgbmFtZT0iUFJPUEVSVFlfTkFNRSIvPgotCQk8ZmllbGQgbmFtZT0iY2xhc3NOYW1lc0xvY2F0aW9uIi8+Ci0JCTxmaWVsZCBuYW1lPSJmZWF0dXJlcyIvPgotCQk8ZmllbGQgbmFtZT0icGFyc2VyQ2xhc3NlcyIvPgotCQk8ZmllbGQgbmFtZT0ic2VyaWFsaXplckNsYXNzZXMiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcveG1scHVsbC92MS9YbWxTZXJpYWxpemVyIiBzaW5jZT0iMSI+Ci0JCTxleHRlbmRzIG5hbWU9ImphdmEvbGFuZy9PYmplY3QiLz4KLQkJPG1ldGhvZCBuYW1lPSJhdHRyaWJ1dGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxvcmcveG1scHVsbC92MS9YbWxTZXJpYWxpemVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImNkc2VjdChMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImNvbW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJkb2NkZWNsKExqYXZhL2xhbmcvU3RyaW5nOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZW5kRG9jdW1lbnQoKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJlbmRUYWcoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxvcmcveG1scHVsbC92MS9YbWxTZXJpYWxpemVyOyIvPgotCQk8bWV0aG9kIG5hbWU9ImVudGl0eVJlZihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9ImZsdXNoKClWIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0RGVwdGgoKUkiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRGZWF0dXJlKExqYXZhL2xhbmcvU3RyaW5nOylaIi8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZSgpTGphdmEvbGFuZy9TdHJpbmc7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iZ2V0TmFtZXNwYWNlKClMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcmVmaXgoTGphdmEvbGFuZy9TdHJpbmc7WilMamF2YS9sYW5nL1N0cmluZzsiLz4KLQkJPG1ldGhvZCBuYW1lPSJnZXRQcm9wZXJ0eShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9PYmplY3Q7Ii8+Ci0JCTxtZXRob2QgbmFtZT0iaWdub3JhYmxlV2hpdGVzcGFjZShMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InByb2Nlc3NpbmdJbnN0cnVjdGlvbihMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldEZlYXR1cmUoTGphdmEvbGFuZy9TdHJpbmc7WilWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic2V0T3V0cHV0KExqYXZhL2lvL091dHB1dFN0cmVhbTtMamF2YS9sYW5nL1N0cmluZzspViIvPgotCQk8bWV0aG9kIG5hbWU9InNldE91dHB1dChMamF2YS9pby9Xcml0ZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcmVmaXgoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzZXRQcm9wZXJ0eShMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspViIvPgotCQk8bWV0aG9kIG5hbWU9InN0YXJ0RG9jdW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9Cb29sZWFuOylWIi8+Ci0JCTxtZXRob2QgbmFtZT0ic3RhcnRUYWcoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUxvcmcveG1scHVsbC92MS9YbWxTZXJpYWxpemVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InRleHQoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcveG1scHVsbC92MS9YbWxTZXJpYWxpemVyOyIvPgotCQk8bWV0aG9kIG5hbWU9InRleHQoW0NJSSlMb3JnL3htbHB1bGwvdjEvWG1sU2VyaWFsaXplcjsiLz4KLQk8L2NsYXNzPgotCTxjbGFzcyBuYW1lPSJvcmcveG1scHVsbC92MS9zYXgyL0RyaXZlciIgc2luY2U9IjEiPgotCQk8ZXh0ZW5kcyBuYW1lPSJqYXZhL2xhbmcvT2JqZWN0Ii8+Ci0JCTxpbXBsZW1lbnRzIG5hbWU9Im9yZy94bWwvc2F4L0F0dHJpYnV0ZXMiLz4KLQkJPGltcGxlbWVudHMgbmFtZT0ib3JnL3htbC9zYXgvTG9jYXRvciIvPgotCQk8aW1wbGVtZW50cyBuYW1lPSJvcmcveG1sL3NheC9YTUxSZWFkZXIiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oKVYiLz4KLQkJPG1ldGhvZCBuYW1lPSImbHQ7aW5pdD4oTG9yZy94bWxwdWxsL3YxL1htbFB1bGxQYXJzZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJwYXJzZVN1YlRyZWUoTG9yZy94bWxwdWxsL3YxL1htbFB1bGxQYXJzZXI7KVYiLz4KLQkJPG1ldGhvZCBuYW1lPSJzdGFydEVsZW1lbnQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiLz4KLQkJPGZpZWxkIG5hbWU9IkFQQUNIRV9EWU5BTUlDX1ZBTElEQVRJT05fRkVBVFVSRSIvPgotCQk8ZmllbGQgbmFtZT0iQVBBQ0hFX1NDSEVNQV9WQUxJREFUSU9OX0ZFQVRVUkUiLz4KLQkJPGZpZWxkIG5hbWU9IkRFQ0xBUkFUSU9OX0hBTkRMRVJfUFJPUEVSVFkiLz4KLQkJPGZpZWxkIG5hbWU9IkxFWElDQUxfSEFORExFUl9QUk9QRVJUWSIvPgotCQk8ZmllbGQgbmFtZT0iTkFNRVNQQUNFU19GRUFUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJOQU1FU1BBQ0VfUFJFRklYRVNfRkVBVFVSRSIvPgotCQk8ZmllbGQgbmFtZT0iVkFMSURBVElPTl9GRUFUVVJFIi8+Ci0JCTxmaWVsZCBuYW1lPSJjb250ZW50SGFuZGxlciIvPgotCQk8ZmllbGQgbmFtZT0iZXJyb3JIYW5kbGVyIi8+Ci0JCTxmaWVsZCBuYW1lPSJwcCIvPgotCQk8ZmllbGQgbmFtZT0ic3lzdGVtSWQiLz4KLQk8L2NsYXNzPgotPC9hcGk+CmRpZmYgLS1naXQgYS9kbXRyYWNlZHVtcCBiL2RtdHJhY2VkdW1wCmluZGV4IDEzMDBjNmUuLjkzNDRlOGQgMTAwNzU1Ci0tLSBhL2RtdHJhY2VkdW1wCisrKyBiL2RtdHJhY2VkdW1wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNkcm9pZCBiL2UyZnNkcm9pZApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjNmZTU5YS4uMDAwMDAwMAotLS0gYS9lMmZzZHJvaWQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ldGMxdG9vbCBiL2V0YzF0b29sCmluZGV4IDFiOGJlZDUuLjVlOWExZjMgMTAwNzU1Ci0tLSBhL2V0YzF0b29sCisrKyBiL2V0YzF0b29sCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Zhc3Rib290IGIvZmFzdGJvb3QKaW5kZXggN2RiYjQ0MS4uZTZmMmQ2NiAxMDA3NTUKLS0tIGEvZmFzdGJvb3QKKysrIGIvZmFzdGJvb3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaHByb2YtY29udiBiL2hwcm9mLWNvbnYKaW5kZXggY2JmZTc4Yi4uNDkxYzRhNSAxMDA3NTUKLS0tIGEvaHByb2YtY29udgorKysgYi9ocHJvZi1jb252CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYjY0L2xpYmMrKy5zbyBiL2xpYjY0L2xpYmMrKy5zbwppbmRleCBmNmYyNDkzLi5kNTg1YzljIDEwMDc1NQotLS0gYS9saWI2NC9saWJjKysuc28KKysrIGIvbGliNjQvbGliYysrLnNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ha2VfZjJmcyBiL21ha2VfZjJmcwppbmRleCBkNjBiNGM2Li4yZDBlNjM2IDEwMDc1NQotLS0gYS9tYWtlX2YyZnMKKysrIGIvbWFrZV9mMmZzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ha2VfZjJmc19jYXNlZm9sZCBiL21ha2VfZjJmc19jYXNlZm9sZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNjA3ZWIwCi0tLSAvZGV2L251bGwKKysrIGIvbWFrZV9mMmZzX2Nhc2Vmb2xkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21rZTJmcyBiL21rZTJmcwppbmRleCAwNDdiMjI1Li4xMTgxYWVmIDEwMDc1NQotLS0gYS9ta2UyZnMKKysrIGIvbWtlMmZzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21rZTJmcy5jb25mIGIvbWtlMmZzLmNvbmYKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCBhYmYwZGFlLi44ZWE5NjBkCi0tLSBhL21rZTJmcy5jb25mCisrKyBiL21rZTJmcy5jb25mCkBAIC0xLDUgKzEsNSBAQAogW2RlZmF1bHRzXQotICAgIGJhc2VfZmVhdHVyZXMgPSBzcGFyc2Vfc3VwZXIsbGFyZ2VfZmlsZSxmaWxldHlwZSxyZXNpemVfaW5vZGUsZGlyX2luZGV4LGV4dF9hdHRyCisgICAgYmFzZV9mZWF0dXJlcyA9IHNwYXJzZV9zdXBlcixsYXJnZV9maWxlLGZpbGV0eXBlLGRpcl9pbmRleCxleHRfYXR0cgogICAgIGRlZmF1bHRfbW50b3B0cyA9IGFjbCx1c2VyX3hhdHRyCiAgICAgZW5hYmxlX3BlcmlvZGljX2ZzY2sgPSAwCiAgICAgYmxvY2tzaXplID0gNDA5NgpkaWZmIC0tZ2l0IGEvcGFja2FnZS54bWwgYi9wYWNrYWdlLnhtbAppbmRleCBhNTU2MDc1Li4zMzAxOTE5IDEwMDY0NAotLS0gYS9wYWNrYWdlLnhtbAorKysgYi9wYWNrYWdlLnhtbApAQCAtMSw0ICsxLDQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz48bnMyOnJlcG9zaXRvcnkgeG1sbnM6bnMyPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9yZXBvc2l0b3J5L2FuZHJvaWQvY29tbW9uLzAxIiB4bWxuczpuczM9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Nkay9hbmRyb2lkL3JlcG8vYWRkb24yLzAxIiB4bWxuczpuczQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Nkay9hbmRyb2lkL3JlcG8vc3lzLWltZzIvMDEiIHhtbG5zOm5zNT0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vcmVwb3NpdG9yeS9hbmRyb2lkL2dlbmVyaWMvMDEiIHhtbG5zOm5zNj0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vc2RrL2FuZHJvaWQvcmVwby9yZXBvc2l0b3J5Mi8wMSI+PGxpY2Vuc2UgaWQ9ImFuZHJvaWQtc2RrLWxpY2Vuc2UiIHR5cGU9InRleHQiPlRlcm1zIGFuZCBDb25kaXRpb25zCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+PG5zMjpyZXBvc2l0b3J5IHhtbG5zOm5zMj0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vcmVwb3NpdG9yeS9hbmRyb2lkL2NvbW1vbi8wMiIgeG1sbnM6bnMzPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9yZXBvc2l0b3J5L2FuZHJvaWQvY29tbW9uLzAxIiB4bWxuczpuczQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3JlcG9zaXRvcnkvYW5kcm9pZC9nZW5lcmljLzAxIiB4bWxuczpuczU9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3JlcG9zaXRvcnkvYW5kcm9pZC9nZW5lcmljLzAyIiB4bWxuczpuczY9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Nkay9hbmRyb2lkL3JlcG8vYWRkb24yLzAxIiB4bWxuczpuczc9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Nkay9hbmRyb2lkL3JlcG8vYWRkb24yLzAyIiB4bWxuczpuczg9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Nkay9hbmRyb2lkL3JlcG8vYWRkb24yLzAzIiB4bWxuczpuczk9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Nkay9hbmRyb2lkL3JlcG8vcmVwb3NpdG9yeTIvMDEiIHhtbG5zOm5zMTA9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Nkay9hbmRyb2lkL3JlcG8vcmVwb3NpdG9yeTIvMDIiIHhtbG5zOm5zMTE9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Nkay9hbmRyb2lkL3JlcG8vcmVwb3NpdG9yeTIvMDMiIHhtbG5zOm5zMTI9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Nkay9hbmRyb2lkL3JlcG8vc3lzLWltZzIvMDQiIHhtbG5zOm5zMTM9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Nkay9hbmRyb2lkL3JlcG8vc3lzLWltZzIvMDMiIHhtbG5zOm5zMTQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Nkay9hbmRyb2lkL3JlcG8vc3lzLWltZzIvMDIiIHhtbG5zOm5zMTU9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Nkay9hbmRyb2lkL3JlcG8vc3lzLWltZzIvMDEiPjxsaWNlbnNlIGlkPSJhbmRyb2lkLXNkay1saWNlbnNlIiB0eXBlPSJ0ZXh0Ij5UZXJtcyBhbmQgQ29uZGl0aW9ucwogCiBUaGlzIGlzIHRoZSBBbmRyb2lkIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCBMaWNlbnNlIEFncmVlbWVudAogCkBAIC0zMiw3ICszMiw3IEBACiAKIDMuMyBZb3UgYWdyZWUgdGhhdCBHb29nbGUgb3IgdGhpcmQgcGFydGllcyBvd24gYWxsIGxlZ2FsIHJpZ2h0LCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBTREssIGluY2x1ZGluZyBhbnkgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyB0aGF0IHN1YnNpc3QgaW4gdGhlIFNESy4gIkludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMiIG1lYW5zIGFueSBhbmQgYWxsIHJpZ2h0cyB1bmRlciBwYXRlbnQgbGF3LCBjb3B5cmlnaHQgbGF3LCB0cmFkZSBzZWNyZXQgbGF3LCB0cmFkZW1hcmsgbGF3LCBhbmQgYW55IGFuZCBhbGwgb3RoZXIgcHJvcHJpZXRhcnkgcmlnaHRzLiBHb29nbGUgcmVzZXJ2ZXMgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdG8geW91LgogCi0zLjQgWW91IG1heSBub3QgdXNlIHRoZSBTREsgZm9yIGFueSBwdXJwb3NlIG5vdCBleHByZXNzbHkgcGVybWl0dGVkIGJ5IHRoZSBMaWNlbnNlIEFncmVlbWVudC4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSB0aGlyZCBwYXJ0eSBsaWNlbnNlcywgeW91IG1heSBub3Q6IChhKSBjb3B5IChleGNlcHQgZm9yIGJhY2t1cCBwdXJwb3NlcyksIG1vZGlmeSwgYWRhcHQsIHJlZGlzdHJpYnV0ZSwgZGVjb21waWxlLCByZXZlcnNlIGVuZ2luZWVyLCBkaXNhc3NlbWJsZSwgb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNESyBvciBhbnkgcGFydCBvZiB0aGUgU0RLOyBvciAoYikgbG9hZCBhbnkgcGFydCBvZiB0aGUgU0RLIG9udG8gYSBtb2JpbGUgaGFuZHNldCBvciBhbnkgb3RoZXIgaGFyZHdhcmUgZGV2aWNlIGV4Y2VwdCBhIHBlcnNvbmFsIGNvbXB1dGVyLCBjb21iaW5lIGFueSBwYXJ0IG9mIHRoZSBTREsgd2l0aCBvdGhlciBzb2Z0d2FyZSwgb3IgZGlzdHJpYnV0ZSBhbnkgc29mdHdhcmUgb3IgZGV2aWNlIGluY29ycG9yYXRpbmcgYSBwYXJ0IG9mIHRoZSBTREsuCiszLjQgWW91IG1heSBub3QgdXNlIHRoZSBTREsgZm9yIGFueSBwdXJwb3NlIG5vdCBleHByZXNzbHkgcGVybWl0dGVkIGJ5IHRoZSBMaWNlbnNlIEFncmVlbWVudC4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSB0aGlyZCBwYXJ0eSBsaWNlbnNlcywgeW91IG1heSBub3QgY29weSAoZXhjZXB0IGZvciBiYWNrdXAgcHVycG9zZXMpLCBtb2RpZnksIGFkYXB0LCByZWRpc3RyaWJ1dGUsIGRlY29tcGlsZSwgcmV2ZXJzZSBlbmdpbmVlciwgZGlzYXNzZW1ibGUsIG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTREsgb3IgYW55IHBhcnQgb2YgdGhlIFNESy4KIAogMy41IFVzZSwgcmVwcm9kdWN0aW9uIGFuZCBkaXN0cmlidXRpb24gb2YgY29tcG9uZW50cyBvZiB0aGUgU0RLIGxpY2Vuc2VkIHVuZGVyIGFuIG9wZW4gc291cmNlIHNvZnR3YXJlIGxpY2Vuc2UgYXJlIGdvdmVybmVkIHNvbGVseSBieSB0aGUgdGVybXMgb2YgdGhhdCBvcGVuIHNvdXJjZSBzb2Z0d2FyZSBsaWNlbnNlIGFuZCBub3QgdGhlIExpY2Vuc2UgQWdyZWVtZW50LgogCkBAIC04Myw3ICs4Myw3IEBACiAKIDguMS4xIElmIHlvdSB1c2UgYW55IEFQSSB0byByZXRyaWV2ZSBkYXRhIGZyb20gR29vZ2xlLCB5b3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgZGF0YSBtYXkgYmUgcHJvdGVjdGVkIGJ5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgd2hpY2ggYXJlIG93bmVkIGJ5IEdvb2dsZSBvciB0aG9zZSBwYXJ0aWVzIHRoYXQgcHJvdmlkZSB0aGUgZGF0YSAob3IgYnkgb3RoZXIgcGVyc29ucyBvciBjb21wYW5pZXMgb24gdGhlaXIgYmVoYWxmKS4gWW91ciB1c2Ugb2YgYW55IHN1Y2ggQVBJIG1heSBiZSBzdWJqZWN0IHRvIGFkZGl0aW9uYWwgVGVybXMgb2YgU2VydmljZS4gWW91IG1heSBub3QgbW9kaWZ5LCByZW50LCBsZWFzZSwgbG9hbiwgc2VsbCwgZGlzdHJpYnV0ZSBvciBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGlzIGRhdGEgKGVpdGhlciBpbiB3aG9sZSBvciBpbiBwYXJ0KSB1bmxlc3MgYWxsb3dlZCBieSB0aGUgcmVsZXZhbnQgVGVybXMgb2YgU2VydmljZS4KIAotOC4xLjIgSWYgeW91IHVzZSBhbnkgQVBJIHRvIHJldHJpZXZlIGEgdXNlcidzIGRhdGEgZnJvbSBHb29nbGUsIHlvdSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB5b3Ugc2hhbGwgcmV0cmlldmUgZGF0YSBvbmx5IHdpdGggdGhlIHVzZXIncyBleHBsaWNpdCBjb25zZW50IGFuZCBvbmx5IHdoZW4sIGFuZCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZXMgZm9yIHdoaWNoLCB0aGUgdXNlciBoYXMgZ2l2ZW4geW91IHBlcm1pc3Npb24gdG8gZG8gc28uCis4LjEuMiBJZiB5b3UgdXNlIGFueSBBUEkgdG8gcmV0cmlldmUgYSB1c2VyJ3MgZGF0YSBmcm9tIEdvb2dsZSwgeW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHlvdSBzaGFsbCByZXRyaWV2ZSBkYXRhIG9ubHkgd2l0aCB0aGUgdXNlcidzIGV4cGxpY2l0IGNvbnNlbnQgYW5kIG9ubHkgd2hlbiwgYW5kIGZvciB0aGUgbGltaXRlZCBwdXJwb3NlcyBmb3Igd2hpY2gsIHRoZSB1c2VyIGhhcyBnaXZlbiB5b3UgcGVybWlzc2lvbiB0byBkbyBzby4gSWYgeW91IHVzZSB0aGUgQW5kcm9pZCBSZWNvZ25pdGlvbiBTZXJ2aWNlIEFQSSwgZG9jdW1lbnRlZCBhdCB0aGUgZm9sbG93aW5nIFVSTDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvc3BlZWNoL1JlY29nbml0aW9uU2VydmljZSwgYXMgdXBkYXRlZCBmcm9tIHRpbWUgdG8gdGltZSwgeW91IGFja25vd2xlZGdlIHRoYXQgdGhlIHVzZSBvZiB0aGUgQVBJIGlzIHN1YmplY3QgdG8gdGhlIERhdGEgUHJvY2Vzc2luZyBBZGRlbmR1bSBmb3IgUHJvZHVjdHMgd2hlcmUgR29vZ2xlIGlzIGEgRGF0YSBQcm9jZXNzb3IsIHdoaWNoIGlzIGxvY2F0ZWQgYXQgdGhlIGZvbGxvd2luZyBVUkw6IGh0dHBzOi8vcHJpdmFjeS5nb29nbGUuY29tL2J1c2luZXNzZXMvZ2RwcnByb2Nlc3NvcnRlcm1zLywgYXMgdXBkYXRlZCBmcm9tIHRpbWUgdG8gdGltZS4gQnkgY2xpY2tpbmcgdG8gYWNjZXB0LCB5b3UgaGVyZWJ5IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGUgRGF0YSBQcm9jZXNzaW5nIEFkZGVuZHVtIGZvciBQcm9kdWN0cyB3aGVyZSBHb29nbGUgaXMgYSBEYXRhIFByb2Nlc3Nvci4KIAogCiA5LiBUZXJtaW5hdGluZyB0aGUgTGljZW5zZSBBZ3JlZW1lbnQKQEAgLTEzOCw0ICsxMzgsNCBAQAogMTQuNyBUaGUgTGljZW5zZSBBZ3JlZW1lbnQsIGFuZCB5b3VyIHJlbGF0aW9uc2hpcCB3aXRoIEdvb2dsZSB1bmRlciB0aGUgTGljZW5zZSBBZ3JlZW1lbnQsIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhIHdpdGhvdXQgcmVnYXJkIHRvIGl0cyBjb25mbGljdCBvZiBsYXdzIHByb3Zpc2lvbnMuIFlvdSBhbmQgR29vZ2xlIGFncmVlIHRvIHN1Ym1pdCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIGxvY2F0ZWQgd2l0aGluIHRoZSBjb3VudHkgb2YgU2FudGEgQ2xhcmEsIENhbGlmb3JuaWEgdG8gcmVzb2x2ZSBhbnkgbGVnYWwgbWF0dGVyIGFyaXNpbmcgZnJvbSB0aGUgTGljZW5zZSBBZ3JlZW1lbnQuIE5vdHdpdGhzdGFuZGluZyB0aGlzLCB5b3UgYWdyZWUgdGhhdCBHb29nbGUgc2hhbGwgc3RpbGwgYmUgYWxsb3dlZCB0byBhcHBseSBmb3IgaW5qdW5jdGl2ZSByZW1lZGllcyAob3IgYW4gZXF1aXZhbGVudCB0eXBlIG9mIHVyZ2VudCBsZWdhbCByZWxpZWYpIGluIGFueSBqdXJpc2RpY3Rpb24uCiAKIAotTm92ZW1iZXIgMjAsIDIwMTU8L2xpY2Vuc2U+PGxvY2FsUGFja2FnZSBwYXRoPSJwbGF0Zm9ybS10b29scyIgb2Jzb2xldGU9ImZhbHNlIj48dHlwZS1kZXRhaWxzIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTp0eXBlPSJuczU6Z2VuZXJpY0RldGFpbHNUeXBlIi8+PHJldmlzaW9uPjxtYWpvcj4yODwvbWFqb3I+PG1pbm9yPjA8L21pbm9yPjxtaWNybz4wPC9taWNybz48L3JldmlzaW9uPjxkaXNwbGF5LW5hbWU+QW5kcm9pZCBTREsgUGxhdGZvcm0tVG9vbHMgMjg8L2Rpc3BsYXktbmFtZT48dXNlcy1saWNlbnNlIHJlZj0iYW5kcm9pZC1zZGstbGljZW5zZSIvPjwvbG9jYWxQYWNrYWdlPjwvbnMyOnJlcG9zaXRvcnk+CitKYW51YXJ5IDE2LCAyMDE5PC9saWNlbnNlPjxsb2NhbFBhY2thZ2UgcGF0aD0icGxhdGZvcm0tdG9vbHMiIG9ic29sZXRlPSJmYWxzZSI+PHR5cGUtZGV0YWlscyB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ibnM1OmdlbmVyaWNEZXRhaWxzVHlwZSIvPjxyZXZpc2lvbj48bWFqb3I+MzU8L21ham9yPjxtaW5vcj4wPC9taW5vcj48bWljcm8+MDwvbWljcm8+PC9yZXZpc2lvbj48ZGlzcGxheS1uYW1lPkFuZHJvaWQgU0RLIFBsYXRmb3JtLVRvb2xzPC9kaXNwbGF5LW5hbWU+PHVzZXMtbGljZW5zZSByZWY9ImFuZHJvaWQtc2RrLWxpY2Vuc2UiLz48L2xvY2FsUGFja2FnZT48L25zMjpyZXBvc2l0b3J5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Nsb2FkX2YyZnMgYi9zbG9hZF9mMmZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkMjFjYjliLi4wMDAwMDAwCi0tLSBhL3Nsb2FkX2YyZnMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zb3VyY2UucHJvcGVydGllcyBiL3NvdXJjZS5wcm9wZXJ0aWVzCmluZGV4IDJmNmI3YjAuLjNjNDNlZjIgMTAwNjQ0Ci0tLSBhL3NvdXJjZS5wcm9wZXJ0aWVzCisrKyBiL3NvdXJjZS5wcm9wZXJ0aWVzCkBAIC0xLDIgKzEsMiBAQAogUGtnLlVzZXJTcmM9ZmFsc2UKLVBrZy5SZXZpc2lvbj0yOC4wLjEKK1BrZy5SZXZpc2lvbj0zNS4wLjAKZGlmZiAtLWdpdCBhL3NxbGl0ZTMgYi9zcWxpdGUzCmluZGV4IGM1YTRlNWUuLmRjYWFjZDcgMTAwNzU1Ci0tLSBhL3NxbGl0ZTMKKysrIGIvc3FsaXRlMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9OT1RJQ0UgYi9zeXN0cmFjZS9OT1RJQ0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNGI2ZGEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvTk9USUNFCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KLQotICAgMS4gRGVmaW5pdGlvbnMuCi0KLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KLQotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgotICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQotICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KLQotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCi0gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAotICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAotICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgotCi0gICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCi0gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwotICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCi0gICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAotICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQotICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0Ci0gICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCi0KLSAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KLQotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0gICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCi0KLSAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwotICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKLSAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL1VQU1RSRUFNX1JFVklTSU9OIGIvc3lzdHJhY2UvVVBTVFJFQU1fUkVWSVNJT04KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MmNjNjUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvVVBTVFJFQU1fUkVWSVNJT04KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0zZmU2NWM2MGUwMzE0MjEyNzMwZjNlNTM2M2E1OGRmZGE5NDlkNzYxCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vYmF0dG9yL2JhdHRvci9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9iYXR0b3IvYmF0dG9yL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMThmMzMwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9iYXR0b3IvYmF0dG9yL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLWRlZiBfSm9pblBhdGgoKnBhdGhfcGFydHMpOgotICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbigqcGF0aF9wYXJ0cykpCi0KLQotZGVmIF9BZGREaXJUb1B5dGhvblBhdGgoKnBhdGhfcGFydHMpOgotICBwYXRoID0gX0pvaW5QYXRoKCpwYXRoX3BhcnRzKQotICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpIGFuZCBwYXRoIG5vdCBpbiBzeXMucGF0aDoKLSAgICAjIFNvbWUgY2FsbCBzaXRlcyB0aGF0IHVzZSBUZWxlbWV0cnkgYXNzdW1lIHRoYXQgc3lzLnBhdGhbMF0gaXMgdGhlCi0gICAgIyBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc2NyaXB0LCBzbyB3ZSBhZGQgdGhlc2UgZXh0cmEgcGF0aHMgdG8gcmlnaHQKLSAgICAjIGFmdGVyIHN5cy5wYXRoWzBdLgotICAgIHN5cy5wYXRoLmluc2VydCgxLCBwYXRoKQotCi1fQ0FUQVBVTFRfRElSID0gb3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwKLSAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5wYXJkaXIsIG9zLnBhdGgucGFyZGlyLCBvcy5wYXRoLnBhcmRpcikKLQotX0FkZERpclRvUHl0aG9uUGF0aChfQ0FUQVBVTFRfRElSLCAnY29tbW9uJywgJ2JhdHRvcicpCi1fQWRkRGlyVG9QeXRob25QYXRoKF9DQVRBUFVMVF9ESVIsICdjb21tb24nLCAncHlfdXRpbHMnKQotX0FkZERpclRvUHl0aG9uUGF0aChfQ0FUQVBVTFRfRElSLCAnZGVwZW5kZW5jeV9tYW5hZ2VyJykKLV9BZGREaXJUb1B5dGhvblBhdGgoX0NBVEFQVUxUX0RJUiwgJ2RldmlsJykKLV9BZGREaXJUb1B5dGhvblBhdGgoX0NBVEFQVUxUX0RJUiwgJ3RoaXJkX3BhcnR5JywgJ3B5c2VyaWFsJykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9iYXR0b3IvYmF0dG9yL2JhdHRvcl9iaW5hcnlfZGVwZW5kZW5jaWVzLmpzb24gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vYmF0dG9yL2JhdHRvci9iYXR0b3JfYmluYXJ5X2RlcGVuZGVuY2llcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2JlMWEzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9iYXR0b3IvYmF0dG9yL2JhdHRvcl9iaW5hcnlfZGVwZW5kZW5jaWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotewotICAiY29uZmlnX3R5cGUiOiAiQmFzZUNvbmZpZyIsCi0gICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgImF2cmR1ZGVfYmluYXJ5IjogewotICAgICAgImNsb3VkX3N0b3JhZ2VfYmFzZV9mb2xkZXIiOiAiYmluYXJ5X2RlcGVuZGVuY2llcy9iYXR0b3IiLAotICAgICAgImNsb3VkX3N0b3JhZ2VfYnVja2V0IjogImNocm9taXVtLXRlbGVtZXRyeSIsCi0gICAgICAiZmlsZV9pbmZvIjogewotICAgICAgICAibWFjX3g4Nl82NCI6IHsKLSAgICAgICAgICAiY2xvdWRfc3RvcmFnZV9oYXNoIjogIjZkZTYzMjRjMjc5ZWE3NWM3OWM2OGNhYjRjMmRkY2M2OGRhMWIyODYiLAotICAgICAgICAgICJkb3dubG9hZF9wYXRoIjogIi4uL2Jpbi9kYXJ3aW4veDg2XzY0L2F2cmR1ZGUiLAotICAgICAgICAgICJsb2NhbF9wYXRocyI6IFsKLSAgICAgICAgICAgICIuLi9iaW4vb3ZlcnJpZGUvYXZyZHVkZSIKLSAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgICJsaW51eF94ODZfNjQiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICJkYjI5NTI2NjA1ZjZmOTVhNzVhYjMzZjQwNjBiOGMzMzAxNTJkZTY5IiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICIuLi9iaW4vbGludXgveDg2XzY0L2F2cmR1ZGUiLAotICAgICAgICAgICJsb2NhbF9wYXRocyI6IFsKLSAgICAgICAgICAgICIuLi9iaW4vb3ZlcnJpZGUvYXZyZHVkZSIKLSAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgICJ3aW5fQU1ENjQiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICI1MTdhYTczYjA5M2UyNTQwMDcwNzZjZjVhYzdhZmI5NDE1MWRmMmVkIiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICIuLi9iaW4vd2luL3g4Nl82NC9hdnJkdWRlLmV4ZSIsCi0gICAgICAgICAgImxvY2FsX3BhdGhzIjogWwotICAgICAgICAgICAgIi4uL2Jpbi9vdmVycmlkZS9hdnJkdWRlLmV4ZSIKLSAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgICJ3aW5feDg2IjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiNTE3YWE3M2IwOTNlMjU0MDA3MDc2Y2Y1YWM3YWZiOTQxNTFkZjJlZCIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiLi4vYmluL3dpbi94ODZfNjQvYXZyZHVkZS5leGUiLAotICAgICAgICAgICJsb2NhbF9wYXRocyI6IFsKLSAgICAgICAgICAgICIuLi9iaW4vb3ZlcnJpZGUvYXZyZHVkZS5leGUiCi0gICAgICAgICAgXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiYXZyZHVkZV9jb25maWciOiB7Ci0gICAgICAiY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlciI6ICJiaW5hcnlfZGVwZW5kZW5jaWVzL2JhdHRvciIsCi0gICAgICAiY2xvdWRfc3RvcmFnZV9idWNrZXQiOiAiY2hyb21pdW0tdGVsZW1ldHJ5IiwKLSAgICAgICJmaWxlX2luZm8iOiB7Ci0gICAgICAgICJkZWZhdWx0IjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiY2NkZmExMjc0MzQyOWI4YjkyYjYxYTIwMTYzZDYzMTFhYjU1YTRmYSIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiLi4vYmluL2JhdHRvci9hdnJkdWRlLmNvbmYiLAotICAgICAgICAgICJsb2NhbF9wYXRocyI6IFsKLSAgICAgICAgICAgICIuLi9iaW4vb3ZlcnJpZGUvYXZyZHVkZS5jb25mIgotICAgICAgICAgIF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImJhdHRvcl9hZ2VudF9iaW5hcnkiOiB7Ci0gICAgICAiY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlciI6ICJiaW5hcnlfZGVwZW5kZW5jaWVzL2JhdHRvciIsCi0gICAgICAiY2xvdWRfc3RvcmFnZV9idWNrZXQiOiAiY2hyb21pdW0tdGVsZW1ldHJ5IiwKLSAgICAgICJmaWxlX2luZm8iOiB7Ci0gICAgICAgICJtYWNfeDg2XzY0IjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiMTU0NjEzODA0YTE4NTVhNDg3MTQyMmJmOTlhYThlMGRkMGQ3ZjYyZSIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiLi4vYmluL2Rhcndpbi94ODZfNjQvYmF0dG9yX2FnZW50IiwKLSAgICAgICAgICAibG9jYWxfcGF0aHMiOiBbCi0gICAgICAgICAgICAiLi4vYmluL292ZXJyaWRlL2JhdHRvcl9hZ2VudCIKLSAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgICJsaW51eF94ODZfNjQiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICJmNTNlMTViOTczMDFlOWRhYjAwZTg5MzgwMGVjNjdhOThlOWYxM2VhIiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICIuLi9iaW4vbGludXgveDg2XzY0L2JhdHRvcl9hZ2VudCIsCi0gICAgICAgICAgImxvY2FsX3BhdGhzIjogWwotICAgICAgICAgICAgIi4uL2Jpbi9vdmVycmlkZS9iYXR0b3JfYWdlbnQiCi0gICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICAid2luX0FNRDY0IjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiNDA5NWE5MTU5ZGQxODllYzU5MTY3OWU0M2IxNGQzNGFlMzAzMzVlYiIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiLi4vYmluL3dpbi94ODZfNjQvYmF0dG9yX2FnZW50LmV4ZSIsCi0gICAgICAgICAgImxvY2FsX3BhdGhzIjogWwotICAgICAgICAgICAgIi4uL2Jpbi9vdmVycmlkZS9iYXR0b3JfYWdlbnQuZXhlIgotICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgIndpbl94ODYiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICI0MDk1YTkxNTlkZDE4OWVjNTkxNjc5ZTQzYjE0ZDM0YWUzMDMzNWViIiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICIuLi9iaW4vd2luL3g4Nl82NC9iYXR0b3JfYWdlbnQuZXhlIiwKLSAgICAgICAgICAibG9jYWxfcGF0aHMiOiBbCi0gICAgICAgICAgICAiLi4vYmluL292ZXJyaWRlL2JhdHRvcl9hZ2VudC5leGUiCi0gICAgICAgICAgXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiYmF0dG9yX2Zpcm13YXJlIjogewotICAgICAgImNsb3VkX3N0b3JhZ2VfYmFzZV9mb2xkZXIiOiAiYmluYXJ5X2RlcGVuZGVuY2llcy9iYXR0b3IiLAotICAgICAgImNsb3VkX3N0b3JhZ2VfYnVja2V0IjogImNocm9taXVtLXRlbGVtZXRyeSIsCi0gICAgICAiZmlsZV9pbmZvIjogewotICAgICAgICAiZGVmYXVsdCI6IHsKLSAgICAgICAgICAiY2xvdWRfc3RvcmFnZV9oYXNoIjogIjA2NDk2NTVmNzg2OTgzNjhhMTZhNGU5ZWMzNzk2N2I4MDUyOGZkYmYiLAotICAgICAgICAgICJkb3dubG9hZF9wYXRoIjogIi4uL2Jpbi9iYXR0b3IvYmF0dG9yX2Zpcm13YXJlLmhleCIsCi0gICAgICAgICAgImxvY2FsX3BhdGhzIjogWwotICAgICAgICAgICAgIi4uL2Jpbi9vdmVycmlkZS9iYXR0b3JfZmlybXdhcmUuaGV4IgotICAgICAgICAgIF0sCi0gICAgICAgICAgInZlcnNpb25faW5fY3MiOiAiZGUwNTQ1OCIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2JhdHRvci9iYXR0b3IvYmF0dG9yX2Vycm9yLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2JhdHRvci9iYXR0b3IvYmF0dG9yX2Vycm9yLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWE2ZWZjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9iYXR0b3IvYmF0dG9yL2JhdHRvcl9lcnJvci5weQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1mcm9tIGRldmlsIGltcG9ydCBiYXNlX2Vycm9yCi0KLWNsYXNzIEJhdHRPckVycm9yKGJhc2VfZXJyb3IuQmFzZUVycm9yKToKLSAgcGFzcwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2JhdHRvci9iYXR0b3IvYmF0dG9yX3dyYXBwZXIucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vYmF0dG9yL2JhdHRvci9iYXR0b3Jfd3JhcHBlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNhZWQ4Yi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vYmF0dG9yL2JhdHRvci9iYXR0b3Jfd3JhcHBlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDQzNiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBkYXRldGltZQotaW1wb3J0IG9zCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHBsYXRmb3JtCi1pbXBvcnQgcmFuZG9tCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgdGltZQotCi1mcm9tIGJhdHRvciBpbXBvcnQgYmF0dG9yX2Vycm9yCi1pbXBvcnQgcHlfdXRpbHMKLWZyb20gcHlfdXRpbHMgaW1wb3J0IGF0ZXhpdF93aXRoX2xvZwotZnJvbSBweV91dGlscyBpbXBvcnQgY2xvdWRfc3RvcmFnZQotaW1wb3J0IGRlcGVuZGVuY3lfbWFuYWdlcgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgYmF0dG9yX2RldmljZV9tYXBwaW5nCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBmaW5kX3VzYl9kZXZpY2VzCi0KLWltcG9ydCBzZXJpYWwKLWZyb20gc2VyaWFsLnRvb2xzIGltcG9ydCBsaXN0X3BvcnRzCi0KLQotREVGQVVMVF9TSEVMTF9DTE9TRV9USU1FT1VUX1MgPSA2MAotCi0KLWRlZiBJc0JhdHRPckNvbm5lY3RlZCgqYXJncywgKiprd2FyZ3MpOgotICAiIiJSZXR1cm5zIFRydWUgaWYgQmF0dE9yIGlzIGRldGVjdGVkLgotCi0gIFNlZSBfSXNCYXR0T3JDb25uZWN0ZWQgYmVsb3cgZm9yIGFyZ3VtZW50cy4KLSAgIiIiCi0gIGlzX2Nvbm5lY3RlZCA9IF9Jc0JhdHRPckNvbm5lY3RlZCgqYXJncywgKiprd2FyZ3MpCi0gIGlmIGlzX2Nvbm5lY3RlZDoKLSAgICBsb2dnaW5nLmluZm8oJ0JhdHRPciBwb3dlciBtb25pdG9yIGlzIGNvbm5lY3RlZC4nKQotICBlbHNlOgotICAgIGxvZ2dpbmcuaW5mbygnQmF0dE9yIHBvd2VyIG1vbml0b3IgaXMgbm90IGNvbm5lY3RlZC4nKQotICByZXR1cm4gaXNfY29ubmVjdGVkCi0KLQotZGVmIF9Jc0JhdHRPckNvbm5lY3RlZCh0ZXN0X3BsYXRmb3JtLCBhbmRyb2lkX2RldmljZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWRfZGV2aWNlX21hcD1Ob25lLCBhbmRyb2lkX2RldmljZV9maWxlPU5vbmUpOgotICAiIiJSZXR1cm5zIFRydWUgaWYgQmF0dE9yIGlzIGRldGVjdGVkLiIiIgotICBpZiB0ZXN0X3BsYXRmb3JtID09ICdhbmRyb2lkJzoKLSAgICBpZiBub3QgYW5kcm9pZF9kZXZpY2U6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCdNdXN0IHBhc3MgYW5kcm9pZCBkZXZpY2Ugc2VyaWFsIHdoZW4gZGV0ZXJtaW5pbmcgJwotICAgICAgICAgICAgICAgICAgICAgICAnc3VwcG9ydCBvbiBhbmRyb2lkIHBsYXRmb3JtJykKLQotICAgIGlmIG5vdCBhbmRyb2lkX2RldmljZV9tYXA6Ci0gICAgICBkZXZpY2VfdHJlZSA9IGZpbmRfdXNiX2RldmljZXMuR2V0QnVzTnVtYmVyVG9EZXZpY2VUcmVlTWFwKCkKLSAgICAgIGlmIGRldmljZV90cmVlOgotICAgICAgICBmb3IgXywgbm9kZSBpbiBzb3J0ZWQoZGV2aWNlX3RyZWUuaXRlcml0ZW1zKCkpOgotICAgICAgICAgIG5vZGUuRGlzcGxheSgpCi0gICAgICBpZiBsZW4oYmF0dG9yX2RldmljZV9tYXBwaW5nLkdldEJhdHRPckxpc3QoZGV2aWNlX3RyZWUpKSA9PSAxOgotICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgaWYgYW5kcm9pZF9kZXZpY2VfZmlsZToKLSAgICAgICAgYW5kcm9pZF9kZXZpY2VfbWFwID0gYmF0dG9yX2RldmljZV9tYXBwaW5nLlJlYWRTZXJpYWxNYXBGaWxlKAotICAgICAgICAgICAgYW5kcm9pZF9kZXZpY2VfZmlsZSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICBhbmRyb2lkX2RldmljZV9tYXAgPSBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2VuZXJhdGVTZXJpYWxNYXAoKQotICAgICAgICBleGNlcHQgYmF0dG9yX2Vycm9yLkJhdHRPckVycm9yOgotICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgIyBJZiBuZWl0aGVyIGlmIHN0YXRlbWVudCBhYm92ZSBpcyB0cmlnZ2VyZWQsIGl0IG1lYW5zIHRoYXQgYW4KLSAgICAjIGFuZHJvaWRfZGV2aWNlX21hcCB3YXMgcGFzc2VkIGluIGFuZCB3aWxsIGJlIHVzZWQuCi0gICAgcmV0dXJuIHN0cihhbmRyb2lkX2RldmljZSkgaW4gYW5kcm9pZF9kZXZpY2VfbWFwCi0KLSAgZWxpZiB0ZXN0X3BsYXRmb3JtID09ICd3aW4nOgotICAgIGZvciAoXzEsIGRlc2MsIF8yKSBpbiBzZXJpYWwudG9vbHMubGlzdF9wb3J0cy5jb21wb3J0cygpOgotICAgICAgaWYgJ1VTQiBTZXJpYWwgUG9ydCcgaW4gZGVzYzoKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICBsb2dnaW5nLmluZm8oJ05vIHVzYiBzZXJpYWwgcG9ydCBkaXNjb3ZlcmVkLiBBdmFpbGFibGUgb25lcyBhcmU6ICVzJyAlCi0gICAgICAgICAgICAgICAgIGxpc3Qoc2VyaWFsLnRvb2xzLmxpc3RfcG9ydHMuY29tcG9ydHMoKSkpCi0gICAgcmV0dXJuIEZhbHNlCi0KLSAgZWxpZiB0ZXN0X3BsYXRmb3JtID09ICdtYWMnOgotICAgIGZvciAoXzEsIGRlc2MsIF8yKSBpbiBzZXJpYWwudG9vbHMubGlzdF9wb3J0cy5jb21wb3J0cygpOgotICAgICAgaWYgJ0JhdHRPcicgaW4gZGVzYzoKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICByZXR1cm4gRmFsc2UKLQotICBlbGlmIHRlc3RfcGxhdGZvcm0gPT0gJ2xpbnV4JzoKLSAgICBkZXZpY2VfdHJlZSA9IGZpbmRfdXNiX2RldmljZXMuR2V0QnVzTnVtYmVyVG9EZXZpY2VUcmVlTWFwKGZhc3Q9VHJ1ZSkKLSAgICByZXR1cm4gYm9vbChiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2V0QmF0dE9yTGlzdChkZXZpY2VfdHJlZSkpCi0KLSAgcmV0dXJuIEZhbHNlCi0KLQotY2xhc3MgQmF0dE9yV3JhcHBlcihvYmplY3QpOgotICAiIiJBIGNsYXNzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggYSBCYXR0T3IgaW4gcHl0aG9uLiIiIgotICBfRVhJVF9DTUQgPSAnRXhpdCcKLSAgX0dFVF9GSVJNV0FSRV9HSVRfSEFTSF9DTUQgPSAnR2V0RmlybXdhcmVHaXRIYXNoJwotICBfU1RBUlRfVFJBQ0lOR19DTUQgPSAnU3RhcnRUcmFjaW5nJwotICBfU1RPUF9UUkFDSU5HX0NNRCA9ICdTdG9wVHJhY2luZycKLSAgX1NVUFBPUlRTX0NMT0NLU1lOQ19DTUQgPSAnU3VwcG9ydHNFeHBsaWNpdENsb2NrU3luYycKLSAgX1JFQ09SRF9DTE9DS1NZTkNfQ01EID0gJ1JlY29yZENsb2NrU3luY01hcmtlcicKLSAgX1NVUFBPUlRFRF9QTEFURk9STVMgPSBbJ2FuZHJvaWQnLCAnY2hyb21lb3MnLCAnbGludXgnLCAnbWFjJywgJ3dpbiddCi0KLSAgX0JBVFRPUl9QQVJUTk8gPSAneDE5MmEzdScKLSAgX0JBVFRPUl9QUk9HUkFNTUVSID0gJ2F2cjEwOScKLSAgX0JBVFRPUl9CQVVEUkFURSA9ICcxMTUyMDAnCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHRhcmdldF9wbGF0Zm9ybSwgYW5kcm9pZF9kZXZpY2U9Tm9uZSwgYmF0dG9yX3BhdGg9Tm9uZSwKLSAgICAgICAgICAgICAgIGJhdHRvcl9tYXBfZmlsZT1Ob25lLCBiYXR0b3JfbWFwPU5vbmUsIHNlcmlhbF9sb2dfYnVja2V0PU5vbmUsCi0gICAgICAgICAgICAgICBhdXRvZmxhc2g9VHJ1ZSk6Ci0gICAgIiIiQ29uc3RydWN0b3IuCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0X3BsYXRmb3JtOiBQbGF0Zm9ybSBCYXR0T3IgaXMgYXR0YWNoZWQgdG8uCi0gICAgICBhbmRyb2lkX2RldmljZTogU2VyaWFsIG51bWJlciBvZiBBbmRyb2lkIGRldmljZS4KLSAgICAgIGJhdHRvcl9wYXRoOiBQYXRoIHRvIEJhdHRPciBkZXZpY2UuCi0gICAgICBiYXR0b3JfbWFwX2ZpbGU6IEZpbGUgZ2l2aW5nIG1hcCBvZiBbZGV2aWNlIHNlcmlhbDogQmF0dE9yIHBhdGhdCi0gICAgICBiYXR0b3JfbWFwOiBNYXAgb2YgW2RldmljZSBzZXJpYWw6IEJhdHRPciBwYXRoXQotICAgICAgc2VyaWFsX2xvZ19idWNrZXQ6IFRoZSBjbG91ZCBzdG9yYWdlIGJ1Y2tldCB0byB3aGljaCBCYXR0T3IgYWdlbnQgc2VyaWFsCi0gICAgICAgIGxvZ3MgYXJlIHVwbG9hZGVkIG9uIGZhaWx1cmUuCi0KLSAgICBBdHRyaWJ1dGVzOgotICAgICAgX2JhdHRvcl9wYXRoOiBQYXRoIHRvIEJhdHRPci4gVHlwaWNhbGx5IHNpbWlsYXIgdG8gL3R0eS9VU0IwLgotICAgICAgX2JhdHRvcl9hZ2VudF9iaW5hcnk6IFBhdGggdG8gdGhlIEJhdHRPciBhZ2VudCBiaW5hcnkgdXNlZCB0byBjb21tdW5pY2F0ZQotICAgICAgICB3aXRoIHRoZSBCYXR0T3IuCi0gICAgICBfdHJhY2luZzogQSBib29sIHNheWluZyBpZiB0cmFjaW5nIGhhcyBiZWVuIHN0YXJ0ZWQuCi0gICAgICBfYmF0dG9yX3NoZWxsOiBBIHN1YnByb2Nlc3MgcnVubmluZyB0aGUgYmF0dG9yX2FnZW50X2JpbmFyeQotICAgICAgX3RyYWNlX3Jlc3VsdHNfcGF0aDogUGF0aCB0byBCYXR0T3IgdHJhY2UgcmVzdWx0cyBmaWxlLgotICAgICAgX3NlcmlhbF9sb2dfYnVja2V0OiBDbG91ZCBzdG9yYWdlIGJ1Y2tldCB0byB3aGljaCBCYXR0T3IgYWdlbnQgc2VyaWFsIGxvZ3MKLSAgICAgICAgYXJlIHVwbG9hZGVkIG9uIGZhaWx1cmUuCi0gICAgICBfc2VyaWFsX2xvZ19maWxlOiBUZW1wIGZpbGUgZm9yIHRoZSBCYXR0T3IgYWdlbnQgc2VyaWFsIGxvZy4KLSAgICAiIiIKLSAgICBzZWxmLl9iYXR0b3JfcGF0aCA9IHNlbGYuX0dldEJhdHRPclBhdGgodGFyZ2V0X3BsYXRmb3JtLCBhbmRyb2lkX2RldmljZSwKLSAgICAgICAgYmF0dG9yX3BhdGgsIGJhdHRvcl9tYXBfZmlsZSwgYmF0dG9yX21hcCkKLSAgICBjb25maWcgPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwKLSAgICAgICAgJ2JhdHRvcl9iaW5hcnlfZGVwZW5kZW5jaWVzLmpzb24nKQotCi0gICAgc2VsZi5fZG0gPSBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeU1hbmFnZXIoCi0gICAgICAgIFtkZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZyhjb25maWcpXSkKLSAgICBzZWxmLl9iYXR0b3JfYWdlbnRfYmluYXJ5ID0gc2VsZi5fZG0uRmV0Y2hQYXRoKAotICAgICAgICAnYmF0dG9yX2FnZW50X2JpbmFyeScsCi0gICAgICAgICclc18lcycgJSAocHlfdXRpbHMuR2V0SG9zdE9zTmFtZSgpLCBweV91dGlscy5HZXRIb3N0QXJjaE5hbWUoKSkpCi0KLSAgICBzZWxmLl9hdXRvZmxhc2ggPSBhdXRvZmxhc2gKLSAgICBzZWxmLl9zZXJpYWxfbG9nX2J1Y2tldCA9IHNlcmlhbF9sb2dfYnVja2V0Ci0gICAgc2VsZi5fdHJhY2luZyA9IEZhbHNlCi0gICAgc2VsZi5fYmF0dG9yX3NoZWxsID0gTm9uZQotICAgIHNlbGYuX3RyYWNlX3Jlc3VsdHNfcGF0aCA9IE5vbmUKLSAgICBzZWxmLl9zdGFydF90cmFjaW5nX3RpbWUgPSBOb25lCi0gICAgc2VsZi5fc3RvcF90cmFjaW5nX3RpbWUgPSBOb25lCi0gICAgc2VsZi5fdHJhY2VfcmVzdWx0cyA9IE5vbmUKLSAgICBzZWxmLl9zZXJpYWxfbG9nX2ZpbGUgPSBOb25lCi0gICAgc2VsZi5fdGFyZ2V0X3BsYXRmb3JtID0gdGFyZ2V0X3BsYXRmb3JtCi0gICAgc2VsZi5fZ2l0X2hhc2ggPSBOb25lCi0KLSAgICBhdGV4aXRfd2l0aF9sb2cuUmVnaXN0ZXIoc2VsZi5LaWxsQmF0dE9yU2hlbGwpCi0KLSAgZGVmIF9GbGFzaEJhdHRPcihzZWxmKToKLSAgICBhc3NlcnQgc2VsZi5fYmF0dG9yX3NoZWxsLCAoCi0gICAgICAgICdNdXN0IHN0YXJ0IHNoZWxsIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGZsYXNoIEJhdHRPcicpCi0KLSAgICB0cnk6Ci0gICAgICBkZXZpY2VfZ2l0X2hhc2ggPSBzZWxmLkdldEZpcm13YXJlR2l0SGFzaCgpCi0gICAgICBiYXR0b3JfZmlybXdhcmUsIGNzX2dpdF9oYXNoID0gc2VsZi5fZG0uRmV0Y2hQYXRoV2l0aFZlcnNpb24oCi0gICAgICAgICAgJ2JhdHRvcl9maXJtd2FyZScsICdkZWZhdWx0JykKLSAgICAgIGlmIGNzX2dpdF9oYXNoICE9IGRldmljZV9naXRfaGFzaDoKLSAgICAgICAgbG9nZ2luZy5pbmZvKAotICAgICAgICAgICAgJ0ZsYXNoaW5nIEJhdHRPciB3aXRoIG9sZCBmaXJtd2FyZSB2ZXJzaW9uIDwlcz4gd2l0aCBuZXcgJwotICAgICAgICAgICAgJ3ZlcnNpb24gPCVzPi4nLCBkZXZpY2VfZ2l0X2hhc2gsIGNzX2dpdF9oYXNoKQotICAgICAgICBhdnJkdWRlX2NvbmZpZyA9IHNlbGYuX2RtLkZldGNoUGF0aCgnYXZyZHVkZV9jb25maWcnLCAnZGVmYXVsdCcpCi0gICAgICAgIHNlbGYuU3RvcFNoZWxsKCkKLSAgICAgICAgcmV0dXJuIHNlbGYuRmxhc2hGaXJtd2FyZShiYXR0b3JfZmlybXdhcmUsIGF2cmR1ZGVfY29uZmlnKQotICAgICAgcmV0dXJuIEZhbHNlCi0gICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICBsb2dnaW5nLmV4Y2VwdGlvbignR2l0IGhhc2ggcmV0dXJuZWQgZnJvbSBCYXR0T3Igd2FzIG5vdCBhcyBleHBlY3RlZDogJXMnCi0gICAgICAgICAgICAgICAgICAgICAgICAlIHNlbGYuX2dpdF9oYXNoKQotICAgICAgc2VsZi5TdG9wU2hlbGwoKQotCi0gICAgZmluYWxseToKLSAgICAgIGlmIG5vdCBzZWxmLl9iYXR0b3Jfc2hlbGw6Ci0gICAgICAgICMgVE9ETyhjaGFybGllYSk6IE9uY2Ugd2UgdW5kZXJzdGFuZCB3aHkgQmF0dE9ycyBhcmUgY3Jhc2hpbmcsIHJlbW92ZQotICAgICAgICAjIHRoaXMgbG9nLgotICAgICAgICAjIGh0dHA6Ly9jcmJ1Zy5jb20vNjk5NTgxCi0gICAgICAgIGxvZ2dpbmcuaW5mbygnX0ZsYXNoQmF0dE9yIHNlcmlhbCBsb2c6JykKLSAgICAgICAgc2VsZi5fVXBsb2FkU2VyaWFsTG9nVG9DbG91ZFN0b3JhZ2UoKQotICAgICAgICBzZWxmLl9zZXJpYWxfbG9nX2ZpbGUgPSBOb25lCi0KLSAgICAgICAgc2VsZi5TdGFydFNoZWxsKCkKLQotICBkZWYgS2lsbEJhdHRPclNoZWxsKHNlbGYpOgotICAgIGlmIHNlbGYuX2JhdHRvcl9zaGVsbDoKLSAgICAgIGxvZ2dpbmcuY3JpdGljYWwoJ0JhdHRPciBzaGVsbCB3YXMgbm90IHByb3Blcmx5IGNsb3NlZC4gS2lsbGluZyBub3cuJykKLSAgICAgIHNlbGYuX2JhdHRvcl9zaGVsbC5raWxsKCkKLQotICBkZWYgR2V0U2hlbGxSZXR1cm5Db2RlKHNlbGYpOgotICAgICIiIkdldHMgdGhlIHJldHVybiBjb2RlIG9mIHRoZSBCYXR0T3IgYWdlbnQgc2hlbGwuIiIiCi0gICAgcmMgPSBzZWxmLl9iYXR0b3Jfc2hlbGwucG9sbCgpCi0gICAgcmV0dXJuIHJjCi0KLSAgZGVmIFN0YXJ0U2hlbGwoc2VsZik6Ci0gICAgIiIiU3RhcnQgQmF0dE9yIGJpbmFyeSBzaGVsbC4iIiIKLSAgICBhc3NlcnQgbm90IHNlbGYuX2JhdHRvcl9zaGVsbCwgJ0F0dGVtcHRpbmcgdG8gc3RhcnQgcnVubmluZyBCYXR0T3Igc2hlbGwuJwotCi0gICAgYmF0dG9yX2NtZCA9IFtzZWxmLl9iYXR0b3JfYWdlbnRfYmluYXJ5XQotICAgIGlmIHNlbGYuX3NlcmlhbF9sb2dfYnVja2V0OgotICAgICAgIyBDcmVhdGUgYW5kIGltbWVkaWF0ZWx5IGNsb3NlIGEgdGVtcCBmaWxlIGluIG9yZGVyIHRvIGdldCBhIGZpbGVuYW1lCi0gICAgICAjIGZvciB0aGUgc2VyaWFsIGxvZy4KLSAgICAgIHNlbGYuX3NlcmlhbF9sb2dfZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpCi0gICAgICBzZWxmLl9zZXJpYWxfbG9nX2ZpbGUuY2xvc2UoKQotICAgICAgYmF0dG9yX2NtZC5hcHBlbmQoJy0tYmF0dG9yLXNlcmlhbC1sb2c9JXMnICUgc2VsZi5fc2VyaWFsX2xvZ19maWxlLm5hbWUpCi0gICAgaWYgc2VsZi5fYmF0dG9yX3BhdGg6Ci0gICAgICBiYXR0b3JfY21kLmFwcGVuZCgnLS1iYXR0b3ItcGF0aD0lcycgJSBzZWxmLl9iYXR0b3JfcGF0aCkKLSAgICBzZWxmLl9iYXR0b3Jfc2hlbGwgPSBzZWxmLl9TdGFydFNoZWxsSW1wbChiYXR0b3JfY21kKQotICAgIGFzc2VydCBzZWxmLkdldFNoZWxsUmV0dXJuQ29kZSgpIGlzIE5vbmUsICdTaGVsbCBmYWlsZWQgdG8gc3RhcnQuJwotCi0gIGRlZiBTdG9wU2hlbGwoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAiIiJTdG9wIEJhdHRPciBiaW5hcnkgc2hlbGwuIiIiCi0gICAgYXNzZXJ0IHNlbGYuX2JhdHRvcl9zaGVsbCwgJ0F0dGVtcHRpbmcgdG8gc3RvcCBhIG5vbi1ydW5uaW5nIEJhdHRPciBzaGVsbC4nCi0gICAgYXNzZXJ0IG5vdCBzZWxmLl90cmFjaW5nLCAnQXR0ZW1wdGluZyB0byBzdG9wIGEgQmF0dE9yIHNoZWxsIHdoaWxlIHRyYWNpbmcuJwotICAgIHRpbWVvdXQgPSB0aW1lb3V0IGlmIHRpbWVvdXQgZWxzZSBERUZBVUxUX1NIRUxMX0NMT1NFX1RJTUVPVVRfUwotCi0gICAgdHJ5OgotICAgICAgc2VsZi5fU2VuZEJhdHRPckNvbW1hbmQoc2VsZi5fRVhJVF9DTUQsIGNoZWNrX3JldHVybj1GYWxzZSkKLSAgICAgIHB5X3V0aWxzLldhaXRGb3IobGFtYmRhOiBzZWxmLkdldFNoZWxsUmV0dXJuQ29kZSgpICE9IE5vbmUsIHRpbWVvdXQpCi0gICAgZXhjZXB0OgotICAgICAgIyBJZiBncmFjZWZ1bCBzaHV0ZG93biBmYWlsZWQsIHJlc29ydCB0byBhIHNpbXBsZSBraWxsIGNvbW1hbmQuCi0gICAgICBzZWxmLktpbGxCYXR0T3JTaGVsbCgpCi0gICAgZmluYWxseToKLSAgICAgIHNlbGYuX2JhdHRvcl9zaGVsbCA9IE5vbmUKLQotICBkZWYgU3RhcnRUcmFjaW5nKHNlbGYpOgotICAgICIiIlN0YXJ0IHRyYWNpbmcgb24gdGhlIEJhdHRPci4iIiIKLSAgICBhc3NlcnQgc2VsZi5fYmF0dG9yX3NoZWxsLCAnTXVzdCBzdGFydCBzaGVsbCBiZWZvcmUgdHJhY2luZycKLSAgICBhc3NlcnQgbm90IHNlbGYuX3RyYWNpbmcsICdUcmFjaW5nIGFscmVhZHkgc3RhcnRlZC4nCi0gICAgc2VsZi5fRmxhc2hCYXR0T3IoKQotICAgIHNlbGYuX1NlbmRCYXR0T3JDb21tYW5kKHNlbGYuX1NUQVJUX1RSQUNJTkdfQ01EKQotICAgIHNlbGYuX3RyYWNpbmcgPSBUcnVlCi0gICAgc2VsZi5fc3RhcnRfdHJhY2luZ190aW1lID0gaW50KHRpbWUudGltZSgpKQotCi0gIGRlZiBTdG9wVHJhY2luZyhzZWxmKToKLSAgICAiIiJTdG9wIHRyYWNpbmcgb24gdGhlIEJhdHRPci4iIiIKLSAgICBhc3NlcnQgc2VsZi5fdHJhY2luZywgJ011c3QgcnVuIFN0YXJ0VHJhY2luZyBiZWZvcmUgU3RvcFRyYWNpbmcnCi0gICAgIyBDcmVhdGUgdGVtcCBmaWxlIHRvIHJlc2VydmUgbG9jYXRpb24gZm9yIHNhdmluZyByZXN1bHRzLgotICAgIHRlbXBfZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpCi0gICAgc2VsZi5fdHJhY2VfcmVzdWx0c19wYXRoID0gdGVtcF9maWxlLm5hbWUKLSAgICB0ZW1wX2ZpbGUuY2xvc2UoKQotICAgIHNlbGYuX1NlbmRCYXR0T3JDb21tYW5kKAotICAgICAgICAnJXMgJXMnICUgKHNlbGYuX1NUT1BfVFJBQ0lOR19DTUQsIHNlbGYuX3RyYWNlX3Jlc3VsdHNfcGF0aCkpCi0gICAgc2VsZi5fdHJhY2luZyA9IEZhbHNlCi0gICAgc2VsZi5fc3RvcF90cmFjaW5nX3RpbWUgPSBpbnQodGltZS50aW1lKCkpCi0KLSAgZGVmIENvbGxlY3RUcmFjZURhdGEoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAiIiJDb2xsZWN0IHRyYWNlIGRhdGEgZnJvbSBiYXR0b3IuCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgZm9yIHdhaXRpbmcgb24gdGhlIEJhdHRPciBwcm9jZXNzIHRvIHRlcm1pbmF0ZSBpbgotICAgICAgICBzZWNvbmRzLgotICAgIFJldHVybnM6IFRyYWNlIGRhdGEgaW4gZm9ybSBvZiBhIGxpc3QuCi0gICAgIiIiCi0gICAgaWYgbm90IHNlbGYuX3N0b3BfdHJhY2luZ190aW1lIG9yIG5vdCBzZWxmLl9zdGFydF90cmFjaW5nX3RpbWU6Ci0gICAgICByYWlzZSBiYXR0b3JfZXJyb3IuQmF0dE9yRXJyb3IoCi0gICAgICAgICAgJ05vIHN0YXJ0IG9yIHN0b3AgdGltZSBkZXRlY3RlZCB3aGVuIGNvbGxlY3RpbmcgQmF0dE9yIHRyYWNlLlxuJwotICAgICAgICAgICdTdGFydDogJXMgXG4gU3RvcDogJXMnICUgKHNlbGYuX3N0YXJ0X3RyYWNpbmdfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdG9wX3RyYWNpbmdfdGltZSkpCi0KLSAgICAjIFRoZSBCYXR0T3Igc2hlbGwgdGVybWluYXRlcyBhZnRlciByZXR1cm5pbmcgdGhlIHJlc3VsdHMuCi0gICAgaWYgdGltZW91dCBpcyBOb25lOgotICAgICAgdGltZW91dCA9IHNlbGYuX3N0b3BfdHJhY2luZ190aW1lIC0gc2VsZi5fc3RhcnRfdHJhY2luZ190aW1lCi0gICAgcHlfdXRpbHMuV2FpdEZvcihsYW1iZGE6IHNlbGYuR2V0U2hlbGxSZXR1cm5Db2RlKCkgIT0gTm9uZSwgdGltZW91dCkKLQotICAgICMgVE9ETyhjaGFybGllYSk6IE9uY2Ugd2UgdW5kZXJzdGFuZCB3aHkgQmF0dE9ycyBhcmUgY3Jhc2hpbmcsIG9ubHkgZG8KLSAgICAjIHRoaXMgb24gZmFpbHVyZS4KLSAgICAjIGh0dHA6Ly9jcmJ1Zy5jb20vNjk5NTgxCi0gICAgbG9nZ2luZy5pbmZvKCdDb2xsZWN0VHJhY2VEYXRhIHNlcmlhbCBsb2c6JykKLSAgICBzZWxmLl9VcGxvYWRTZXJpYWxMb2dUb0Nsb3VkU3RvcmFnZSgpCi0KLSAgICB3aXRoIG9wZW4oc2VsZi5fdHJhY2VfcmVzdWx0c19wYXRoKSBhcyByZXN1bHRzOgotICAgICAgc2VsZi5fdHJhY2VfcmVzdWx0cyA9IHJlc3VsdHMucmVhZCgpCi0gICAgc2VsZi5fYmF0dG9yX3NoZWxsID0gTm9uZQotICAgIHNlbGYuX3NlcmlhbF9sb2dfZmlsZSA9IE5vbmUKLSAgICByZXR1cm4gc2VsZi5fdHJhY2VfcmVzdWx0cwotCi0gIGRlZiBTdXBwb3J0c0V4cGxpY2l0Q2xvY2tTeW5jKHNlbGYpOgotICAgICIiIlJldHVybnMgaWYgQmF0dE9yIHN1cHBvcnRzIENsb2NrIFN5bmMgZXZlbnRzLiIiIgotICAgIHJldHVybiBib29sKGludChzZWxmLl9TZW5kQmF0dE9yQ29tbWFuZChzZWxmLl9TVVBQT1JUU19DTE9DS1NZTkNfQ01ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19yZXR1cm49RmFsc2UpKSkKLQotICBkZWYgUmVjb3JkQ2xvY2tTeW5jTWFya2VyKHNlbGYsIHN5bmNfaWQpOgotICAgICIiIlJlY29yZCBjbG9jayBzeW5jIGV2ZW50IG9uIEJhdHRPci4iIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzeW5jX2lkLCBiYXNlc3RyaW5nKToKLSAgICAgIHJhaXNlIFR5cGVFcnJvcignc3luY19pZCBtdXN0IGJlIGEgc3RyaW5nLicpCi0gICAgc2VsZi5fU2VuZEJhdHRPckNvbW1hbmQoJyVzICVzJyAlIChzZWxmLl9SRUNPUkRfQ0xPQ0tTWU5DX0NNRCwgc3luY19pZCkpCi0KLSAgZGVmIF9HZXRCYXR0T3JQYXRoKHNlbGYsIHRhcmdldF9wbGF0Zm9ybSwgYW5kcm9pZF9kZXZpY2U9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgIGJhdHRvcl9wYXRoPU5vbmUsIGJhdHRvcl9tYXBfZmlsZT1Ob25lLCBiYXR0b3JfbWFwPU5vbmUpOgotICAgICIiIkRldGVybWluZXMgbW9zdCBsaWtlbHkgcGF0aCB0byB0aGUgY29ycmVjdCBCYXR0T3IuIiIiCi0gICAgaWYgdGFyZ2V0X3BsYXRmb3JtIG5vdCBpbiBzZWxmLl9TVVBQT1JURURfUExBVEZPUk1TOgotICAgICAgcmFpc2UgYmF0dG9yX2Vycm9yLkJhdHRPckVycm9yKAotICAgICAgICAgICclcyBpcyBhbiB1bnN1cHBvcnRlZCBwbGF0Zm9ybS4nICUgdGFyZ2V0X3BsYXRmb3JtKQotICAgIGlmIHRhcmdldF9wbGF0Zm9ybSBpbiBbJ3dpbiddOgotICAgICAgIyBSaWdodCBub3csIHRoZSBCYXR0T3IgYWdlbnQgYmluYXJ5IGlzbid0IGFibGUgdG8gYXV0b21hdGljYWxseSBkZXRlY3QKLSAgICAgICMgdGhlIEJhdHRPciBwb3J0IG9uIFdpbmRvd3MuIFRvIGdldCBhcm91bmQgdGhpcywgd2Uga25vdyB0aGF0IHRoZSBCYXR0T3IKLSAgICAgICMgc2hvd3MgdXAgd2l0aCBhIG5hbWUgb2YgJ1VTQiBTZXJpYWwgUG9ydCcsIHNvIHVzZSB0aGUgQ09NIHBvcnQgdGhhdAotICAgICAgIyBjb3JyZXNwb25kcyB0byBhIGRldmljZSB3aXRoIHRoYXQgbmFtZS4KLSAgICAgIGZvciAocG9ydCwgZGVzYywgXykgaW4gc2VyaWFsLnRvb2xzLmxpc3RfcG9ydHMuY29tcG9ydHMoKToKLSAgICAgICAgaWYgJ1VTQiBTZXJpYWwgUG9ydCcgaW4gZGVzYzoKLSAgICAgICAgICByZXR1cm4gcG9ydAotICAgICAgcmFpc2UgYmF0dG9yX2Vycm9yLkJhdHRPckVycm9yKAotICAgICAgICAgICdDb3VsZCBub3QgZmluZCBCYXR0T3IgYXR0YWNoZWQgdG8gbWFjaGluZS4nKQotICAgIGlmIHRhcmdldF9wbGF0Zm9ybSBpbiBbJ21hYyddOgotICAgICAgZm9yIChwb3J0LCBkZXNjLCBfKSBpbiBzZXJpYWwudG9vbHMubGlzdF9wb3J0cy5jb21wb3J0cygpOgotICAgICAgICBpZiAnQmF0dE9yJyBpbiBkZXNjOgotICAgICAgICAgIHJldHVybiBwb3J0Ci0KLSAgICBpZiB0YXJnZXRfcGxhdGZvcm0gaW4gWydhbmRyb2lkJywgJ2xpbnV4J106Ci0gICAgICBpZiBiYXR0b3JfcGF0aDoKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYmF0dG9yX3BhdGgsIGJhc2VzdHJpbmcpOgotICAgICAgICAgIHJhaXNlIGJhdHRvcl9lcnJvci5CYXR0T3JFcnJvcigKLSAgICAgICAgICAgICAgJ0FuIGludmFsaWQgQmF0dE9yIHBhdGggd2FzIHNwZWNpZmllZC4nKQotICAgICAgICByZXR1cm4gYmF0dG9yX3BhdGgKLQotICAgICAgaWYgdGFyZ2V0X3BsYXRmb3JtID09ICdhbmRyb2lkJzoKLSAgICAgICAgaWYgbm90IGFuZHJvaWRfZGV2aWNlOgotICAgICAgICAgIHJhaXNlIGJhdHRvcl9lcnJvci5CYXR0T3JFcnJvcigKLSAgICAgICAgICAgICAgJ011c3Qgc3BlY2lmeSBkZXZpY2UgZm9yIEFuZHJvaWQgcGxhdGZvcm0uJykKLSAgICAgICAgaWYgbm90IGJhdHRvcl9tYXBfZmlsZSBhbmQgbm90IGJhdHRvcl9tYXA6Ci0gICAgICAgICAgIyBObyBtYXAgd2FzIHBhc3NlZCwgc28gbXVzdCBjcmVhdGUgb25lLgotICAgICAgICAgIGJhdHRvcl9tYXAgPSBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2VuZXJhdGVTZXJpYWxNYXAoKQotCi0gICAgICAgIHJldHVybiBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2V0QmF0dE9yUGF0aEZyb21QaG9uZVNlcmlhbCgKLSAgICAgICAgICAgIHN0cihhbmRyb2lkX2RldmljZSksIHNlcmlhbF9tYXBfZmlsZT1iYXR0b3JfbWFwX2ZpbGUsCi0gICAgICAgICAgICBzZXJpYWxfbWFwPWJhdHRvcl9tYXApCi0KLSAgICAgICMgTm90IEFuZHJvaWQgYW5kIG5vIGV4cGxpY2l0bHkgcGFzc2VkIEJhdHRPci4KLSAgICAgIGRldmljZV90cmVlID0gZmluZF91c2JfZGV2aWNlcy5HZXRCdXNOdW1iZXJUb0RldmljZVRyZWVNYXAoZmFzdD1UcnVlKQotICAgICAgYmF0dG9ycyA9IGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZXRCYXR0T3JMaXN0KGRldmljZV90cmVlKQotICAgICAgaWYgbGVuKGJhdHRvcnMpICE9IDE6Ci0gICAgICAgIHJhaXNlIGJhdHRvcl9lcnJvci5CYXR0T3JFcnJvcigKLSAgICAgICAgICAgICdGb3Igbm9uLUFuZHJvaWQgcGxhdGZvcm1zLCBleGFjdGx5IG9uZSBCYXR0T3IgbXVzdCBiZSAnCi0gICAgICAgICAgICAnYXR0YWNoZWQgdW5sZXNzIGFkZHJlc3MgaXMgZXhwbGljaXRseSBnaXZlbi4nKQotICAgICAgcmV0dXJuICcvZGV2LyVzJyAlIGJhdHRvcnMucG9wKCkKLQotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCi0gICAgICAgICdCYXR0T3IgV3JhcHBlciBub3QgaW1wbGVtZW50ZWQgZm9yIGdpdmVuIHBsYXRmb3JtJykKLQotICBkZWYgX1NlbmRCYXR0T3JDb21tYW5kSW1wbChzZWxmLCBjbWQpOgotICAgICIiIlNlbmRzIGNvbW1hbmQgdG8gdGhlIEJhdHRPci4iIiIKLSAgICBzZWxmLl9iYXR0b3Jfc2hlbGwuc3RkaW4ud3JpdGUoJyVzXG4nICUgY21kKQotICAgIHNlbGYuX2JhdHRvcl9zaGVsbC5zdGRpbi5mbHVzaCgpCi0gICAgcmV0dXJuIHNlbGYuX2JhdHRvcl9zaGVsbC5zdGRvdXQucmVhZGxpbmUoKQotCi0gIGRlZiBfU2VuZEJhdHRPckNvbW1hbmQoc2VsZiwgY21kLCBjaGVja19yZXR1cm49VHJ1ZSk6Ci0gICAgc3RhdHVzID0gc2VsZi5fU2VuZEJhdHRPckNvbW1hbmRJbXBsKGNtZCkKLQotICAgIGlmIGNoZWNrX3JldHVybiBhbmQgbm90ICdEb25lLicgaW4gc3RhdHVzOgotICAgICAgc2VsZi5LaWxsQmF0dE9yU2hlbGwoKQotICAgICAgc2VsZi5fVXBsb2FkU2VyaWFsTG9nVG9DbG91ZFN0b3JhZ2UoKQotICAgICAgc2VsZi5fc2VyaWFsX2xvZ19maWxlID0gTm9uZQotICAgICAgcmFpc2UgYmF0dG9yX2Vycm9yLkJhdHRPckVycm9yKAotICAgICAgICAgICdCYXR0T3IgZGlkIG5vdCBjb21wbGV0ZSBjb21tYW5kIFwnJXNcJyBjb3JyZWN0bHkuXG4nCi0gICAgICAgICAgJ091dHB1dHRlZDogJXMnICUgKGNtZCwgc3RhdHVzKSkKLSAgICByZXR1cm4gc3RhdHVzCi0KLSAgZGVmIF9TdGFydFNoZWxsSW1wbChzZWxmLCBiYXR0b3JfY21kKToKLSAgICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbigKLSAgICAgICAgYmF0dG9yX2NtZCwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPUZhbHNlKQotCi0gIGRlZiBfVXBsb2FkU2VyaWFsTG9nVG9DbG91ZFN0b3JhZ2Uoc2VsZik6Ci0gICAgIiIiVXBsb2FkcyB0aGUgQmF0dE9yIHNlcmlhbCBsb2cgdG8gY2xvdWQgc3RvcmFnZS4iIiIKLSAgICBpZiBub3Qgc2VsZi5fc2VyaWFsX2xvZ19maWxlIG9yIG5vdCBjbG91ZF9zdG9yYWdlLklzTmV0d29ya0lPRW5hYmxlZCgpOgotICAgICAgcmV0dXJuCi0KLSAgICByZW1vdGVfcGF0aCA9ICgnYmF0dG9yLXNlcmlhbC1sb2ctJXMtJWQudHh0JyAlICgKLSAgICAgICAgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoJyVZLSVtLSVkXyVILSVNLnR4dCcpLAotICAgICAgICByYW5kb20ucmFuZGludCgxLCAxMDAwMDApKSkKLQotICAgIHRyeToKLSAgICAgIGNsb3VkX3VybCA9IGNsb3VkX3N0b3JhZ2UuSW5zZXJ0KAotICAgICAgICAgIHNlbGYuX3NlcmlhbF9sb2dfYnVja2V0LCByZW1vdGVfcGF0aCwgc2VsZi5fc2VyaWFsX2xvZ19maWxlLm5hbWUpCi0gICAgICBzeXMuc3RkZXJyLndyaXRlKCdWaWV3IEJhdHRPciBzZXJpYWwgbG9nIGF0ICVzXG4nICUgY2xvdWRfdXJsKQotICAgIGV4Y2VwdCBjbG91ZF9zdG9yYWdlLlBlcm1pc3Npb25FcnJvciBhcyBlOgotICAgICAgbG9nZ2luZy5lcnJvcignQ2Fubm90IHVwbG9hZCBCYXR0T3Igc2VyaWFsIGxvZyBmaWxlIHRvIGNsb3VkIHN0b3JhZ2UgZHVlICcKLSAgICAgICAgICAgICAgICAgICAgJ3RvIHBlcm1pc3Npb24gZXJyb3I6ICVzJyAlIGUubWVzc2FnZSkKLQotICBkZWYgR2V0RmlybXdhcmVHaXRIYXNoKHNlbGYpOgotICAgICIiIkdldHMgdGhlIGdpdCBoYXNoIGZvciB0aGUgQmF0dE9yIGZpcm13YXJlLgotCi0gICAgUmV0dXJuczogR2l0IGhhc2ggZm9yIGZpcm13YXJlIGN1cnJlbnRseSBvbiB0aGUgQmF0dE9yLgotICAgICAgICBBbHNvIHNldHMgc2VsZi5fZ2l0X2hhc2ggdG8gdGhpcyB2YWx1ZS4KLQotICAgIFJhaXNlczogVmFsdWVFeGNlcHRpb24gaWYgdGhlIGdpdCBoYXNoIGlzIG5vdCBpbiBoZXguCi0gICAgIiIiCi0gICAgYXNzZXJ0IHNlbGYuX2JhdHRvcl9zaGVsbCwgKCdNdXN0IHN0YXJ0IHNoZWxsIGJlZm9yZSBnZXR0aW5nIGZpcm13YXJlIGdpdCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYXNoJykKLSAgICBzZWxmLl9naXRfaGFzaCA9IHNlbGYuX1NlbmRCYXR0T3JDb21tYW5kKHNlbGYuX0dFVF9GSVJNV0FSRV9HSVRfSEFTSF9DTUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19yZXR1cm49RmFsc2UpLnN0cmlwKCkKLSAgICAjIFdlIGV4cGVjdCB0aGUgZ2l0IGhhc2ggdG8gYmUgYSB2YWxpZCA2IGNoYXJhY3RlciBoZXhzdHJpbmcuIFRoaXMgd2lsbAotICAgICMgdGhyb3cgYSBWYWx1ZUVycm9yIGV4Y2VwdGlvbiBvdGhlcndpc2UuCi0gICAgaW50KHNlbGYuX2dpdF9oYXNoLCAxNikKLSAgICByZXR1cm4gc2VsZi5fZ2l0X2hhc2gKLQotICBkZWYgRmxhc2hGaXJtd2FyZShzZWxmLCBoZXhfcGF0aCwgYXZyZHVkZV9jb25maWdfcGF0aCk6Ci0gICAgIiIiRmxhc2hlcyB0aGUgQmF0dE9yIHVzaW5nIGFuIGF2cmR1ZGUgY29uZmlnIGF0IGNvbmZpZ19wYXRoIHdpdGggdGhlIG5ldwotICAgICAgIGZpcm13YXJlIGF0IGhleF9wYXRoLgotICAgICIiIgotICAgIGFzc2VydCBub3Qgc2VsZi5fYmF0dG9yX3NoZWxsLCAnQ2Fubm90IGZsYXNoIEJhdHRPciB3aXRoIG9wZW4gc2hlbGwnCi0KLSAgICBhdnJkdWRlX2JpbmFyeSA9IHNlbGYuX2RtLkZldGNoUGF0aCgKLSAgICAgICAgJ2F2cmR1ZGVfYmluYXJ5JywgJyVzXyVzJyAlIChzeXMucGxhdGZvcm0sIHBsYXRmb3JtLm1hY2hpbmUoKSkpCi0gICAgIyBTYW5pdGl6ZSBoZXggZmlsZSBwYXRoIGZvciB3aW5kb3dzLiBJdCBjb250YWlucyA8ZHJpdmU+Oi8gd2hpY2ggYXZyZHVkZQotICAgICMgaXMgbm90IGNhcGFibGUgb2YgaGFuZGxpbmcuCi0gICAgXywgaGV4X3BhdGggPSBvcy5wYXRoLnNwbGl0ZHJpdmUoaGV4X3BhdGgpCi0gICAgYXZyX2NtZCA9IFsKLSAgICAgICAgYXZyZHVkZV9iaW5hcnksCi0gICAgICAgICctZScsICAjIFNwZWNpZnkgdG8gZXJhc2UgZGF0YSBvbiBjaGlwLgotICAgICAgICAnLXAnLCBzZWxmLl9CQVRUT1JfUEFSVE5PLCAgIyBTcGVjaWZ5IEFWUiBkZXZpY2UuCi0gICAgICAgICMgU3BlY2lmeSB3aGljaCBtaWNyb2NvbnRyb2xsZXIgcHJvZ3JhbW1lciB0byB1c2UuCi0gICAgICAgICctYycsIHNlbGYuX0JBVFRPUl9QUk9HUkFNTUVSLAotICAgICAgICAnLWInLCBzZWxmLl9CQVRUT1JfQkFVRFJBVEUsICAjIFNwZWNpZnkgdGhlIGJhdWQgcmF0ZSB0byBjb21tdW5pY2F0ZSBhdC4KLSAgICAgICAgJy1QJywgc2VsZi5fYmF0dG9yX3BhdGgsICAjIFNlcmlhbCBwYXRoIHRvIHRoZSBiYXR0b3IuCi0gICAgICAgICMgQ29tbWFuZCB0byBleGVjdXRlIHdpdGggaGV4IGZpbGUgYW5kIHBhdGggdG8gaGV4IGZpbGUuCi0gICAgICAgICctVScsICdmbGFzaDp3OiVzJyAlIGhleF9wYXRoLAotICAgICAgICAnLUMnLCBhdnJkdWRlX2NvbmZpZ19wYXRoLCAjIEFWUmR1ZGUgY29uZmlnIGZpbGUgcGF0aC4KLSAgICAgICAgJzI+JjEnICAjIEFsbCBvdXRwdXQgZ29lcyB0byBzdGRlcnIgZm9yIHNvbWUgcmVhc29uLgotICAgIF0KLSAgICB0cnk6Ci0gICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhdnJfY21kKQotICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgotICAgICAgcmFpc2UgQmF0dE9yRmxhc2hFcnJvcignQmF0dE9yIGZsYXNoIGZhaWxlZCB3aXRoIHJldHVybiBjb2RlICVzLicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBlLnJldHVybmNvZGUpCi0KLSAgICBzZWxmLl9naXRfaGFzaCA9IE5vbmUKLSAgICByZXR1cm4gVHJ1ZQotCi0KLWNsYXNzIEJhdHRPckZsYXNoRXJyb3IoRXhjZXB0aW9uKToKLSAgcGFzcwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2JhdHRvci9iYXR0b3IvYmF0dG9yX3dyYXBwZXJfZGV2aWNldGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9iYXR0b3IvYmF0dG9yL2JhdHRvcl93cmFwcGVyX2RldmljZXRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YzM2ZTcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2JhdHRvci9iYXR0b3IvYmF0dG9yX3dyYXBwZXJfZGV2aWNldGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgcGxhdGZvcm0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHRpbWUKLWltcG9ydCB1bml0dGVzdAotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMucGF0aC5hcHBlbmQoCi0gICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJykpCi0KLWZyb20gYmF0dG9yIGltcG9ydCBiYXR0b3Jfd3JhcHBlcgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgYmF0dG9yX2RldmljZV9tYXBwaW5nCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBmaW5kX3VzYl9kZXZpY2VzCi1pbXBvcnQgcHlfdXRpbHMKLWZyb20gcHlfdXRpbHMgaW1wb3J0IGNsb3VkX3N0b3JhZ2UKLQotCi1fU1VQUE9SVEVEX0NRX1BMQVRGT1JNUyA9IFsnd2luJywgJ2xpbnV4JywgJ21hYyddCi0KLWNsYXNzIEJhdHRPcldyYXBwZXJEZXZpY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHNlbGYuX3BsYXRmb3JtID0gcHlfdXRpbHMuR2V0SG9zdE9zTmFtZSgpCi0gICAgc2VsZi5fYmF0dG9yX2xpc3QgPSBOb25lCi0KLSAgICBpZiBzZWxmLl9wbGF0Zm9ybSA9PSAnbGludXgnOgotICAgICAgZGV2aWNlX3RyZWUgID0gZmluZF91c2JfZGV2aWNlcy5HZXRCdXNOdW1iZXJUb0RldmljZVRyZWVNYXAoKQotICAgICAgc2VsZi5fYmF0dG9yX2xpc3QgPSBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2V0QmF0dE9yTGlzdChkZXZpY2VfdHJlZSkKLQotICAgIGlmIG5vdCBiYXR0b3Jfd3JhcHBlci5Jc0JhdHRPckNvbm5lY3RlZChzZWxmLl9wbGF0Zm9ybSk6Ci0gICAgICBzZWxmLl9iYXR0b3JfbGlzdCA9IFtdCi0KLSAgZGVmIHRlc3RGdWxsUnVuKHNlbGYpOgotICAgICMgSWYgYmF0dG9yX2xpc3QgaXMgYW4gZW1wdHkgbGlzdCwgYSBCYXR0T3Igd2FzIGV4cGVjdGVkIGJ1dCBub3QgZm91bmQuCi0gICAgaWYgc2VsZi5fYmF0dG9yX2xpc3QgaXMgbm90IE5vbmUgYW5kIG5vdCBzZWxmLl9iYXR0b3JfbGlzdDoKLSAgICAgIGxvZ2dpbmcuY3JpdGljYWwoJ05vIEJhdHRPcnMgYXR0YWNoZWQuIENhbm5vdCBydW4gdGVzdHMuJykKLSAgICAgIHJldHVybgotCi0gICAgaWYgc2VsZi5fcGxhdGZvcm0gbm90IGluIF9TVVBQT1JURURfQ1FfUExBVEZPUk1TOgotICAgICAgbG9nZ2luZy5jcml0aWNhbCgnUGxhdGZvcm0gJXMgaXMgbm90IHN1cHBvcnRlZCBvbiBDUS4nICUgc2VsZi5fcGxhdGZvcm0pCi0gICAgICByZXR1cm4KLQotCi0gICAgYmF0dG9yX3BhdGggPSAoTm9uZSBpZiBub3Qgc2VsZi5fYmF0dG9yX2xpc3QKLSAgICAgICAgICAgICAgICAgICBlbHNlICcvZGV2LyVzJyAlIHNlbGYuX2JhdHRvcl9saXN0WzBdKQotICAgIGJhdHRvciA9IGJhdHRvcl93cmFwcGVyLkJhdHRPcldyYXBwZXIoCi0gICAgICAgIHNlbGYuX3BsYXRmb3JtLCBiYXR0b3JfcGF0aD1iYXR0b3JfcGF0aCwKLSAgICAgICAgc2VyaWFsX2xvZ19idWNrZXQ9Y2xvdWRfc3RvcmFnZS5URUxFTUVUUllfT1VUUFVUKQotICAgIHRyeToKLSAgICAgIGJhdHRvci5TdGFydFNoZWxsKCkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGJhdHRvci5HZXRGaXJtd2FyZUdpdEhhc2goKSwgYmFzZXN0cmluZykpCi0gICAgICAjIFdlIGV4cGVjdCB0aGUgZ2l0IGhhc2ggdG8gYmUgYSB2YWxpZCA2IGNoYXJhY3RlciBoZXhzdHJpbmcuIFRoaXMgd2lsbAotICAgICAgIyB0aHJvdyBhIFZhbHVlRXJyb3IgZXhjZXB0aW9uIG90aGVyd2lzZS4KLSAgICAgIGludChiYXR0b3IuR2V0RmlybXdhcmVHaXRIYXNoKCksIDE2KQotICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihiYXR0b3IuR2V0RmlybXdhcmVHaXRIYXNoKCkpID09IDcpCi0gICAgICBiYXR0b3IuU3RvcFNoZWxsKCkKLQotICAgICAgYmF0dG9yLlN0YXJ0U2hlbGwoKQotICAgICAgYmF0dG9yLlN0YXJ0VHJhY2luZygpCi0gICAgICAjIFRPRE8ocm5lcGhldyk6IFRoaXMgc2xlZXAgaXMgcmVxdWlyZWQgZm9yIG5vdyBiZWNhdXNlIGNyYnVnLmNvbS82MDIyNjYKLSAgICAgICMgY2F1c2VzIHRoZSBCYXR0T3IgdG8gY3Jhc2ggd2hlbiB0aGUgdHJhY2UgdGltZSBpcyB0b28gc2hvcnQuIE9uY2UgdGhhdAotICAgICAgIyBidWcgaXMgZml4ZWQsIHdlIHNob3VsZCByZW1vdmUgdGhpcyBkZWxheS4KLSAgICAgIHRpbWUuc2xlZXAoMSkKLSAgICAgIGJhdHRvci5SZWNvcmRDbG9ja1N5bmNNYXJrZXIoJ2FiYycpCi0gICAgICAjIFNsZWVwIGhlcmUgYmVjYXVzZSBjbG9jayBzeW5jIG1hcmtlciB3aWxsIGJlIGZsYWt5IGlmIG5vdC4KLSAgICAgIHRpbWUuc2xlZXAoMSkKLSAgICAgIGJhdHRvci5TdG9wVHJhY2luZygpCi0KLSAgICAgICMgQmVsb3cgaXMgYSB3b3JrIGFyb3VuZCBmb3IgY3JidWcuY29tLzYwMzMwOS4gT24gdGhpcyBzaG9ydCBvZiBhIHRyYWNlLCA1Ci0gICAgICAjIHNlY29uZHMgaXMgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRoZSB0cmFjZSB3aWxsIGZpbmlzaCBmbHVzaGluZyB0byB0aGUKLSAgICAgICMgZmlsZS4gVGhlIHByb2Nlc3MgaXMgdGhlbiBraWxsZWQgc28gdGhhdCBCYXR0T3JXcmFwcGVyIGtub3dzIHRoYXQgdGhlCi0gICAgICAjIHByb2Nlc3MgaGFzIGJlZW4gY2xvc2VkIGFmdGVyIHRyYWNpbmcgc3RvcHMuCi0gICAgICBpZiBzZWxmLl9wbGF0Zm9ybSA9PSAnd2luJzoKLSAgICAgICAgdGltZS5zbGVlcCg1KQotICAgICAgICBiYXR0b3IuX2JhdHRvcl9zaGVsbC5raWxsKCkKLSAgICAgIHJlc3VsdHMgPSBiYXR0b3IuQ29sbGVjdFRyYWNlRGF0YSgpLnNwbGl0bGluZXMoKQotICAgIGV4Y2VwdDoKLSAgICAgIGlmIGJhdHRvci5fYmF0dG9yX3NoZWxsIGlzIG5vdCBOb25lOgotICAgICAgICBiYXR0b3IuX2JhdHRvcl9zaGVsbC5raWxsKCkKLSAgICAgICAgYmF0dG9yLl9iYXR0b3Jfc2hlbGwgPSBOb25lCi0gICAgICByYWlzZQotCi0gICAgc2VsZi5hc3NlcnRUcnVlKCcjIEJhdHRPcicgaW4gcmVzdWx0c1swXSkKLSAgICBzZWxmLmFzc2VydFRydWUoJyMgdm9sdGFnZV9yYW5nZScgaW4gcmVzdWx0c1sxXSkKLSAgICBzZWxmLmFzc2VydFRydWUoJyMgY3VycmVudF9yYW5nZScgaW4gcmVzdWx0c1syXSkKLSAgICBzZWxmLmFzc2VydFRydWUoJyMgc2FtcGxlX3JhdGUnIGluIHJlc3VsdHNbM10pCi0gICAgIyBGaXJzdCBsaW5lIHdpdGggcmVzdWx0cy4gU2hvdWxkIGJlIDMgJ3dvcmRzJy4KLSAgICBzZWxmLmFzc2VydFRydWUobGVuKHJlc3VsdHNbNF0uc3BsaXQoKSkgPT0gMykKLSAgICBjbG9ja19zeW5jX2ZvdW5kID0gRmFsc2UKLSAgICBmb3IgZW50cnkgaW4gcmVzdWx0czoKLSAgICAgIGlmICc8YWJjPicgaW4gZW50cnk6Ci0gICAgICAgIGNsb2NrX3N5bmNfZm91bmQgPSBUcnVlCi0gICAgICAgIGJyZWFrCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNsb2NrX3N5bmNfZm91bmQsICdCYXR0T3IgRGF0YTolc1xuJyAlIHJlcHIocmVzdWx0cykpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgbG9nZ2luZy5nZXRMb2dnZXIoKS5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2JhdHRvci9iYXR0b3IvYmF0dG9yX3dyYXBwZXJfdW5pdHRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vYmF0dG9yL2JhdHRvci9iYXR0b3Jfd3JhcHBlcl91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UxNGMzNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vYmF0dG9yL2JhdHRvci9iYXR0b3Jfd3JhcHBlcl91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM4NyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBkZXBlbmRlbmN5X21hbmFnZXIKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgbW9jawotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIGJhdHRvciBpbXBvcnQgYmF0dG9yX2Vycm9yCi1mcm9tIGJhdHRvciBpbXBvcnQgYmF0dG9yX3dyYXBwZXIKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGJhdHRvcl9kZXZpY2VfbWFwcGluZwotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgZmluZF91c2JfZGV2aWNlcwotCi1pbXBvcnQgc2VyaWFsCi1mcm9tIHNlcmlhbC50b29scyBpbXBvcnQgbGlzdF9wb3J0cwotCi0KLWNsYXNzIERlcGVuZGVuY3lNYW5hZ2VyTW9jayhvYmplY3QpOgotICBkZWYgX19pbml0X18oc2VsZiwgXyk6Ci0gICAgc2VsZi5fZmV0Y2hfcmV0dXJuID0gJ3BhdGgnCi0gICAgc2VsZi5fdmVyc2lvbl9yZXR1cm4gPSAnY2JhYTg0MycKLQotICBkZWYgRmV0Y2hQYXRoKHNlbGYsIF8sICp1bnVzZWQpOgotICAgIGRlbCB1bnVzZWQKLSAgICByZXR1cm4gc2VsZi5fZmV0Y2hfcmV0dXJuCi0KLSAgZGVmIEZldGNoUGF0aFdpdGhWZXJzaW9uKHNlbGYsIF8sICp1bnVzZWQpOgotICAgIGRlbCB1bnVzZWQKLSAgICByZXR1cm4gc2VsZi5fZmV0Y2hfcmV0dXJuLCBzZWxmLl92ZXJzaW9uX3JldHVybgotCi1jbGFzcyBQb3Blbk1vY2sob2JqZWN0KToKLSAgZGVmIF9faW5pdF9fKHNlbGYsICp1bnVzZWQpOgotICAgIHBhc3MKLQotICBkZWYgcG9sbChzZWxmKToKLSAgICBwYXNzCi0KLSAgZGVmIGtpbGwoc2VsZik6Ci0gICAgcGFzcwotCi0KLWNsYXNzIElzQmF0dE9yQ29ubmVjdGVkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gIGRlZiBzZXRVcChzZWxmKToKLSAgICAjIFdpbmRvd3MgbW9ua2V5IHBhdGNoZXMuCi0gICAgc2VsZi5fc2VyaWFsX3Rvb2xzX3JldHVybiA9IFtdCi0gICAgc2VsZi5fY29tcG9ydHMgPSBzZXJpYWwudG9vbHMubGlzdF9wb3J0cy5jb21wb3J0cwotICAgIHNlcmlhbC50b29scy5saXN0X3BvcnRzLmNvbXBvcnRzID0gbGFtYmRhOiBzZWxmLl9zZXJpYWxfdG9vbHNfcmV0dXJuCi0KLSAgICAjIExpbnV4L0FuZHJvaWQgbW9ua2V5IHBhdGNoZXMuCi0gICAgc2VsZi5fZ2VuZXJhdGVfc2VyaWFsX21hcF9yZXR1cm4gPSB7fQotICAgIHNlbGYuX2dlbmVyYXRlX3NlcmlhbF9tYXAgPSBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2VuZXJhdGVTZXJpYWxNYXAKLSAgICBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2VuZXJhdGVTZXJpYWxNYXAgPSAoCi0gICAgICAgIGxhbWJkYTogc2VsZi5fZ2VuZXJhdGVfc2VyaWFsX21hcF9yZXR1cm4pCi0KLSAgICBzZWxmLl9yZWFkX3NlcmlhbF9tYXBfZmlsZV9yZXR1cm4gPSB7fQotICAgIHNlbGYuX3JlYWRfc2VyaWFsX21hcF9maWxlID0gYmF0dG9yX2RldmljZV9tYXBwaW5nLlJlYWRTZXJpYWxNYXBGaWxlCi0gICAgYmF0dG9yX2RldmljZV9tYXBwaW5nLlJlYWRTZXJpYWxNYXBGaWxlID0gKAotICAgICAgICBsYW1iZGEgZjogc2VsZi5fcmVhZF9zZXJpYWxfbWFwX2ZpbGVfcmV0dXJuKQotCi0gICAgc2VsZi5fZ2V0X2J1c19udW1iZXJfdG9fZGV2aWNlX3RyZWVfbWFwID0gKAotICAgICAgICBmaW5kX3VzYl9kZXZpY2VzLkdldEJ1c051bWJlclRvRGV2aWNlVHJlZU1hcCkKLSAgICBmaW5kX3VzYl9kZXZpY2VzLkdldEJ1c051bWJlclRvRGV2aWNlVHJlZU1hcCA9IGxhbWJkYSBmYXN0PU5vbmU6IHt9Ci0KLSAgICBzZWxmLl9nZXRfYmF0dG9yX2xpc3RfcmV0dXJuID0gW10KLSAgICBzZWxmLl9nZXRfYmF0dG9yX2xpc3QgPSBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2V0QmF0dE9yTGlzdAotICAgIGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZXRCYXR0T3JMaXN0ID0gbGFtYmRhIHg6IHNlbGYuX2dldF9iYXR0b3JfbGlzdF9yZXR1cm4KLQotICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgc2VyaWFsLnRvb2xzLmxpc3RfcG9ydHMuY29tcG9ydHMgPSBzZWxmLl9jb21wb3J0cwotICAgIGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZW5lcmF0ZVNlcmlhbE1hcCA9IHNlbGYuX2dlbmVyYXRlX3NlcmlhbF9tYXAKLSAgICBiYXR0b3JfZGV2aWNlX21hcHBpbmcuUmVhZFNlcmlhbE1hcEZpbGUgPSBzZWxmLl9yZWFkX3NlcmlhbF9tYXBfZmlsZQotICAgIGZpbmRfdXNiX2RldmljZXMuR2V0QnVzTnVtYmVyVG9EZXZpY2VUcmVlTWFwID0gKAotICAgICAgICBzZWxmLl9nZXRfYnVzX251bWJlcl90b19kZXZpY2VfdHJlZV9tYXApCi0gICAgYmF0dG9yX2RldmljZV9tYXBwaW5nLkdldEJhdHRPckxpc3QgPSBzZWxmLl9nZXRfYmF0dG9yX2xpc3QKLQotICBkZWYgZm9yY2VFeGNlcHRpb24oc2VsZik6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gIGRlZiB0ZXN0QW5kcm9pZFdpdGhCYXR0T3Ioc2VsZik6Ci0gICAgc2VsZi5fZ2VuZXJhdGVfc2VyaWFsX21hcF9yZXR1cm4gPSB7J2FiYyc6ICcxMjMnfQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXR0b3Jfd3JhcHBlci5Jc0JhdHRPckNvbm5lY3RlZCgnYW5kcm9pZCcsICdhYmMnKSkKLQotICBkZWYgdGVzdEFuZHJvaWRXaXRob3V0TWF0Y2hpbmdCYXR0T3Ioc2VsZik6Ci0gICAgc2VsZi5fZ2VuZXJhdGVfc2VyaWFsX21hcF9yZXR1cm4gPSB7J25vdGFiYyc6ICdub3QxMjMnfQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmF0dG9yX3dyYXBwZXIuSXNCYXR0T3JDb25uZWN0ZWQoJ2FuZHJvaWQnLCAnYWJjJykpCi0KLSAgZGVmIHRlc3RBbmRyb2lkTm9EZXZpY2VQYXNzZWQoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgIGJhdHRvcl93cmFwcGVyLklzQmF0dE9yQ29ubmVjdGVkKCdhbmRyb2lkJykKLQotICBkZWYgdGVzdEFuZHJvaWRXaXRoTWFwQW5kRmlsZShzZWxmKToKLSAgICBkZXZpY2VfbWFwID0geydhYmMnOiAnMTIzJ30KLSAgICBiYXR0b3JfZGV2aWNlX21hcHBpbmcuUmVhZFNlcmlhbE1hcEZpbGUgPSBzZWxmLmZvcmNlRXhjZXB0aW9uCi0gICAgc2VsZi5hc3NlcnRUcnVlKAotICAgICAgICBiYXR0b3Jfd3JhcHBlci5Jc0JhdHRPckNvbm5lY3RlZCgnYW5kcm9pZCcsIGFuZHJvaWRfZGV2aWNlPSdhYmMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWRfZGV2aWNlX21hcD1kZXZpY2VfbWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWRfZGV2aWNlX2ZpbGU9J2ZpbGUnKSkKLQotICBkZWYgdGVzdEFuZHJvaWRXaXRoTWFwKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgYmF0dG9yX3dyYXBwZXIuSXNCYXR0T3JDb25uZWN0ZWQoJ2FuZHJvaWQnLCBhbmRyb2lkX2RldmljZT0nYWJjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkX2RldmljZV9tYXA9eydhYmMnLCAnMTIzJ30pKQotCi0gIGRlZiB0ZXN0QW5kcm9pZFdpdGhGaWxlKHNlbGYpOgotICAgIHNlbGYuX3JlYWRfc2VyaWFsX21hcF9maWxlX3JldHVybiA9IHsnYWJjJzogJzEyMyd9Ci0gICAgc2VsZi5hc3NlcnRUcnVlKAotICAgICAgYmF0dG9yX3dyYXBwZXIuSXNCYXR0T3JDb25uZWN0ZWQoJ2FuZHJvaWQnLCBhbmRyb2lkX2RldmljZT0nYWJjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZF9kZXZpY2VfZmlsZT0nZmlsZScpKQotCi0gIGRlZiB0ZXN0TGludXhXaXRoQmF0dE9yKHNlbGYpOgotICAgIHNlbGYuX2dldF9iYXR0b3JfbGlzdF9yZXR1cm4gPSBbJ2JhdHRvciddCi0gICAgc2VsZi5hc3NlcnRUcnVlKGJhdHRvcl93cmFwcGVyLklzQmF0dE9yQ29ubmVjdGVkKCdsaW51eCcpKQotCi0gIGRlZiB0ZXN0TGludXhXaXRob3V0QmF0dE9yKHNlbGYpOgotICAgIHNlbGYuX2dldF9iYXR0b3JfbGlzdF9yZXR1cm4gPSBbXQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmF0dG9yX3dyYXBwZXIuSXNCYXR0T3JDb25uZWN0ZWQoJ2xpbnV4JykpCi0KLSAgZGVmIHRlc3RNYWNXaXRoQmF0dE9yKHNlbGYpOgotICAgIHNlbGYuX3NlcmlhbF90b29sc19yZXR1cm4gPSBbKCcvZGV2L3R0eS51c2JzZXJpYWwtTUFBJywgJ0JhdHRPciB2My4zJywgJycpXQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXR0b3Jfd3JhcHBlci5Jc0JhdHRPckNvbm5lY3RlZCgnbWFjJykpCi0KLSAgZGVmIHRlc3RNYWNXaXRob3V0QmF0dE9yKHNlbGYpOgotICAgIHNlbGYuX3NlcmlhbF90b29sc19yZXR1cm4gPSBbKCcvZGV2L3R0eS51c2JzZXJpYWwtTUFBJywgJ25vdF9vbmUnLCAnJyldCi0gICAgc2VsZi5hc3NlcnRGYWxzZShiYXR0b3Jfd3JhcHBlci5Jc0JhdHRPckNvbm5lY3RlZCgnbWFjJykpCi0KLSAgZGVmIHRlc3RXaW5XaXRoQmF0dE9yKHNlbGYpOgotICAgIHNlbGYuX3NlcmlhbF90b29sc19yZXR1cm4gPSBbKCdDT000JywgJ1VTQiBTZXJpYWwgUG9ydCcsICcnKV0KLSAgICBzZWxmLmFzc2VydFRydWUoYmF0dG9yX3dyYXBwZXIuSXNCYXR0T3JDb25uZWN0ZWQoJ3dpbicpKQotCi0gIGRlZiB0ZXN0V2luV2l0aG91dEJhdHRPcihzZWxmKToKLSAgICBzZWxmLl9nZXRfYmF0dG9yX2xpc3RfcmV0dXJuID0gW10KLSAgICBzZWxmLmFzc2VydEZhbHNlKGJhdHRvcl93cmFwcGVyLklzQmF0dE9yQ29ubmVjdGVkKCd3aW4nKSkKLQotCi1jbGFzcyBCYXR0T3JXcmFwcGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzZWxmLl9iYXR0b3IgPSBOb25lCi0gICAgc2VsZi5faXNfYmF0dG9yID0gVHJ1ZQotICAgIHNlbGYuX2JhdHRvcl9saXN0ID0gWydiYXR0b3IxJ10KLSAgICBzZWxmLl9zaG91bGRfcGFzcyA9IFRydWUKLSAgICBzZWxmLl9mYWtlX21hcCA9IHsnYmF0dG9yMSc6ICdkZXZpY2UxJ30KLSAgICBzZWxmLl9mYWtlX3JldHVybl9jb2RlID0gTm9uZQotICAgIHNlbGYuX2Zha2VfYmF0dG9yX3JldHVybiA9ICdEb25lLlxuJwotCi0gICAgc2VsZi5fZ2V0X2JhdHRvcl9wYXRoX2Zyb21fcGhvbmVfc2VyaWFsID0gKAotICAgICAgICBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2V0QmF0dE9yUGF0aEZyb21QaG9uZVNlcmlhbCkKLSAgICBzZWxmLl9nZXRfYnVzX251bWJlcl90b19kZXZpY2VfdHJlZV9tYXAgPSAoCi0gICAgICAgIGZpbmRfdXNiX2RldmljZXMuR2V0QnVzTnVtYmVyVG9EZXZpY2VUcmVlTWFwKQotICAgIHNlbGYuX2RlcGVuZGVuY3lfbWFuYWdlciA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5TWFuYWdlcgotICAgIHNlbGYuX2dldF9iYXR0b3JfbGlzdCA9IGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZXRCYXR0T3JMaXN0Ci0gICAgc2VsZi5faXNfYmF0dG9yID0gYmF0dG9yX2RldmljZV9tYXBwaW5nLklzQmF0dE9yCi0gICAgc2VsZi5fZ2VuZXJhdGVfc2VyaWFsX21hcCA9IGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZW5lcmF0ZVNlcmlhbE1hcAotICAgIHNlbGYuX3NlcmlhbF90b29scyA9IHNlcmlhbC50b29scy5saXN0X3BvcnRzLmNvbXBvcnRzCi0KLSAgICBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2V0QmF0dE9yUGF0aEZyb21QaG9uZVNlcmlhbCA9ICgKLSAgICAgICAgbGFtYmRhIHgsIHNlcmlhbF9tYXBfZmlsZT1Ob25lLCBzZXJpYWxfbWFwPU5vbmU6IHggKyAnX2JhdHRvcicpCi0gICAgZmluZF91c2JfZGV2aWNlcy5HZXRCdXNOdW1iZXJUb0RldmljZVRyZWVNYXAgPSBsYW1iZGEgZmFzdD1GYWxzZTogVHJ1ZQotICAgIGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5TWFuYWdlciA9IERlcGVuZGVuY3lNYW5hZ2VyTW9jawotICAgIGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZXRCYXR0T3JMaXN0ID0gbGFtYmRhIHg6IHNlbGYuX2JhdHRvcl9saXN0Ci0gICAgYmF0dG9yX2RldmljZV9tYXBwaW5nLklzQmF0dE9yID0gbGFtYmRhIHgsIHk6IHNlbGYuX2lzX2JhdHRvcgotICAgIGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZW5lcmF0ZVNlcmlhbE1hcCA9IGxhbWJkYTogc2VsZi5fZmFrZV9tYXAKLSAgICBzZXJpYWwudG9vbHMubGlzdF9wb3J0cy5jb21wb3J0cyA9IGxhbWJkYTogWygnQ09NNCcsICdVU0IgU2VyaWFsIFBvcnQnLCAnJyldCi0KLSAgICBzZWxmLl9zdWJwcm9jZXNzX2NoZWNrX291dHB1dF9jb2RlID0gMAotICAgIGRlZiBzdWJwcm9jZXNzX2NoZWNrX291dHB1dF9tb2NrKCp1bnVzZWQpOgotICAgICAgaWYgc2VsZi5fc3VicHJvY2Vzc19jaGVja19vdXRwdXRfY29kZSAhPSAwOgotICAgICAgICByYWlzZSBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcihOb25lLCBOb25lKQotICAgICAgcmV0dXJuIDAKLSAgICBzZWxmLl9zdWJwcm9jZXNzX2NoZWNrX291dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0Ci0gICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQgPSBzdWJwcm9jZXNzX2NoZWNrX291dHB1dF9tb2NrCi0KLSAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgIGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZXRCYXR0T3JQYXRoRnJvbVBob25lU2VyaWFsID0gKAotICAgICAgICBzZWxmLl9nZXRfYmF0dG9yX3BhdGhfZnJvbV9waG9uZV9zZXJpYWwpCi0gICAgZmluZF91c2JfZGV2aWNlcy5HZXRCdXNOdW1iZXJUb0RldmljZVRyZWVNYXAgPSAoCi0gICAgICAgIHNlbGYuX2dldF9idXNfbnVtYmVyX3RvX2RldmljZV90cmVlX21hcCkKLSAgICBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeU1hbmFnZXIgPSBzZWxmLl9kZXBlbmRlbmN5X21hbmFnZXIKLSAgICBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2V0QmF0dE9yTGlzdCA9IHNlbGYuX2dldF9iYXR0b3JfbGlzdAotICAgIGJhdHRvcl9kZXZpY2VfbWFwcGluZy5Jc0JhdHRPciA9IHNlbGYuX2lzX2JhdHRvcgotICAgIGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZW5lcmF0ZVNlcmlhbE1hcCA9IHNlbGYuX2dlbmVyYXRlX3NlcmlhbF9tYXAKLSAgICBzZXJpYWwudG9vbHMubGlzdF9wb3J0cy5jb21wb3J0cyA9IHNlbGYuX3NlcmlhbF90b29scwotICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0ID0gc2VsZi5fc3VicHJvY2Vzc19jaGVja19vdXRwdXQKLQotICBkZWYgX0RlZmF1bHRCYXR0T3JSZXBsYWNlbWVudHMoc2VsZik6Ci0gICAgYmF0dG9yX3dyYXBwZXIuREVGQVVMVF9TSEVMTF9DTE9TRV9USU1FT1VUX1MgPSAuMQotICAgIHNlbGYuX2JhdHRvci5fU3RhcnRTaGVsbEltcGwgPSBsYW1iZGEgKnVudXNlZDogUG9wZW5Nb2NrKCkKLSAgICBzZWxmLl9iYXR0b3IuR2V0U2hlbGxSZXR1cm5Db2RlID0gbGFtYmRhICp1bnVzZWQ6IHNlbGYuX2Zha2VfcmV0dXJuX2NvZGUKLSAgICBzZWxmLl9iYXR0b3IuX1NlbmRCYXR0T3JDb21tYW5kSW1wbCA9IGxhbWJkYSB4OiBzZWxmLl9mYWtlX2JhdHRvcl9yZXR1cm4KLSAgICBzZWxmLl9iYXR0b3IuX1N0b3BUcmFjaW5nSW1wbCA9IGxhbWJkYSAqdW51c2VkOiAoc2VsZi5fZmFrZV9iYXR0b3JfcmV0dXJuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lKQotCi0gIGRlZiB0ZXN0QmFkUGxhdGZvcm0oc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhiYXR0b3JfZXJyb3IuQmF0dE9yRXJyb3IpOgotICAgICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcigndW5rbm93bicpCi0KLSAgZGVmIHRlc3RJbml0QW5kcm9pZFdpdGhCYXR0T3Ioc2VsZik6Ci0gICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcignYW5kcm9pZCcsIGFuZHJvaWRfZGV2aWNlPSdhYmMnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2JhdHRvci5fYmF0dG9yX3BhdGgsICdhYmNfYmF0dG9yJykKLQotICBkZWYgdGVzdEluaXRBbmRyb2lkV2l0aG91dEJhdHRPcihzZWxmKToKLSAgICBzZWxmLl9iYXR0b3JfbGlzdCA9IFtdCi0gICAgc2VsZi5fZmFrZV9tYXAgPSB7fQotICAgIGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZXRCYXR0T3JQYXRoRnJvbVBob25lU2VyaWFsID0gKAotICAgICAgICBzZWxmLl9nZXRfYmF0dG9yX3BhdGhfZnJvbV9waG9uZV9zZXJpYWwpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhiYXR0b3JfZXJyb3IuQmF0dE9yRXJyb3IpOgotICAgICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcignYW5kcm9pZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWRfZGV2aWNlPSdhYmMnKQotCi0gIGRlZiB0ZXN0SW5pdEJhdHRPclBhdGhJc0JhdHRPcihzZWxmKToKLSAgICBiYXR0b3JfcGF0aCA9ICdiYXR0b3IvcGF0aC9oZXJlJwotICAgIHNlbGYuX2JhdHRvciA9IGJhdHRvcl93cmFwcGVyLkJhdHRPcldyYXBwZXIoCi0gICAgICAgICdhbmRyb2lkJywgYW5kcm9pZF9kZXZpY2U9J2FiYycsIGJhdHRvcl9wYXRoPWJhdHRvcl9wYXRoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2JhdHRvci5fYmF0dG9yX3BhdGgsIGJhdHRvcl9wYXRoKQotCi0gIGRlZiB0ZXN0SW5pdE5vbkFuZHJvaWRXaXRoQmF0dE9yKHNlbGYpOgotICAgIHNlbGYuX2JhdHRvciA9IGJhdHRvcl93cmFwcGVyLkJhdHRPcldyYXBwZXIoJ3dpbicpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5fYmF0dG9yLl9iYXR0b3JfcGF0aCwgJ0NPTTQnKQotCi0gIGRlZiB0ZXN0SW5pdE5vbkFuZHJvaWRXaXRoTXVsdGlwbGVCYXR0T3Ioc2VsZik6Ci0gICAgc2VsZi5fYmF0dG9yX2xpc3QuYXBwZW5kKCdiYXR0b3IyJykKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGJhdHRvcl9lcnJvci5CYXR0T3JFcnJvcik6Ci0gICAgICBzZWxmLl9iYXR0b3IgPSBiYXR0b3Jfd3JhcHBlci5CYXR0T3JXcmFwcGVyKCdsaW51eCcpCi0KLSAgZGVmIHRlc3RJbml0Tm9uQW5kcm9pZFdpdGhvdXRCYXR0T3Ioc2VsZik6Ci0gICAgc2VsZi5fYmF0dG9yX2xpc3QgPSBbXQotICAgIHNlcmlhbC50b29scy5saXN0X3BvcnRzLmNvbXBvcnRzID0gbGFtYmRhOiBbKCdDT000JywgJ05vbmUnLCAnJyldCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhiYXR0b3JfZXJyb3IuQmF0dE9yRXJyb3IpOgotICAgICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcignd2luJykKLQotICBkZWYgdGVzdFN0YXJ0U2hlbGxQYXNzKHNlbGYpOgotICAgIHNlbGYuX2JhdHRvciA9IGJhdHRvcl93cmFwcGVyLkJhdHRPcldyYXBwZXIoJ3dpbicpCi0gICAgc2VsZi5fRGVmYXVsdEJhdHRPclJlcGxhY2VtZW50cygpCi0gICAgc2VsZi5fYmF0dG9yLlN0YXJ0U2hlbGwoKQotICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHNlbGYuX2JhdHRvci5fYmF0dG9yX3NoZWxsKQotCi0gIGRlZiB0ZXN0U3RhcnRTaGVsbERvdWJsZVN0YXJ0KHNlbGYpOgotICAgIHNlbGYuX2JhdHRvciA9IGJhdHRvcl93cmFwcGVyLkJhdHRPcldyYXBwZXIoJ3dpbicpCi0gICAgc2VsZi5fRGVmYXVsdEJhdHRPclJlcGxhY2VtZW50cygpCi0gICAgc2VsZi5fYmF0dG9yLlN0YXJ0U2hlbGwoKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgotICAgICAgc2VsZi5fYmF0dG9yLlN0YXJ0U2hlbGwoKQotCi0gIGRlZiB0ZXN0U3RhcnRTaGVsbEZhaWwoc2VsZik6Ci0gICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcignd2luJykKLSAgICBzZWxmLl9EZWZhdWx0QmF0dE9yUmVwbGFjZW1lbnRzKCkKLSAgICBzZWxmLl9iYXR0b3IuR2V0U2hlbGxSZXR1cm5Db2RlID0gbGFtYmRhICp1bnVzZWQ6IDEKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKLSAgICAgIHNlbGYuX2JhdHRvci5TdGFydFNoZWxsKCkKLQotICBkZWYgdGVzdFN0YXJ0VHJhY2luZ1Bhc3Moc2VsZik6Ci0gICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcignd2luJykKLSAgICBzZWxmLl9EZWZhdWx0QmF0dE9yUmVwbGFjZW1lbnRzKCkKLSAgICBzZWxmLl9iYXR0b3IuU3RhcnRTaGVsbCgpCi0gICAgc2VsZi5fYmF0dG9yLlN0YXJ0VHJhY2luZygpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuX2JhdHRvci5fdHJhY2luZykKLQotICBkZWYgdGVzdFN0YXJ0VHJhY2luZ0RvdWJsZVN0YXJ0KHNlbGYpOgotICAgIHNlbGYuX2JhdHRvciA9IGJhdHRvcl93cmFwcGVyLkJhdHRPcldyYXBwZXIoJ3dpbicpCi0gICAgc2VsZi5fRGVmYXVsdEJhdHRPclJlcGxhY2VtZW50cygpCi0gICAgc2VsZi5fYmF0dG9yLlN0YXJ0U2hlbGwoKQotICAgIHNlbGYuX2JhdHRvci5TdGFydFRyYWNpbmcoKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgotICAgICAgc2VsZi5fYmF0dG9yLlN0YXJ0VHJhY2luZygpCi0KLSAgZGVmIHRlc3RTdGFydFRyYWNpbmdDb21tYW5kRmFpbHMoc2VsZik6Ci0gICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcignd2luJykKLSAgICBzZWxmLl9EZWZhdWx0QmF0dE9yUmVwbGFjZW1lbnRzKCkKLSAgICBzZWxmLl9iYXR0b3IuX1NlbmRCYXR0T3JDb21tYW5kSW1wbCA9IGxhbWJkYSAqdW51c2VkOiAnRmFpbC5cbicKLSAgICBzZWxmLl9iYXR0b3IuU3RhcnRTaGVsbCgpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhiYXR0b3JfZXJyb3IuQmF0dE9yRXJyb3IpOgotICAgICAgc2VsZi5fYmF0dG9yLlN0YXJ0VHJhY2luZygpCi0KLSAgZGVmIHRlc3RTdG9wVHJhY2luZ1Bhc3Moc2VsZik6Ci0gICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcignd2luJykKLSAgICBzZWxmLl9EZWZhdWx0QmF0dE9yUmVwbGFjZW1lbnRzKCkKLSAgICBzZWxmLl9iYXR0b3IuU3RhcnRTaGVsbCgpCi0gICAgc2VsZi5fYmF0dG9yLlN0YXJ0VHJhY2luZygpCi0gICAgc2VsZi5fYmF0dG9yLkdldFNoZWxsUmV0dXJuQ29kZSA9IGxhbWJkYSAqdW51c2VkOiAwCi0gICAgc2VsZi5fYmF0dG9yLlN0b3BUcmFjaW5nKCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuX2JhdHRvci5fdHJhY2luZykKLQotICBkZWYgdGVzdFN0b3BUcmFjaW5nTm90UnVubmluZyhzZWxmKToKLSAgICBzZWxmLl9iYXR0b3IgPSBiYXR0b3Jfd3JhcHBlci5CYXR0T3JXcmFwcGVyKCd3aW4nKQotICAgIHNlbGYuX0RlZmF1bHRCYXR0T3JSZXBsYWNlbWVudHMoKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgotICAgICAgc2VsZi5fYmF0dG9yLlN0b3BUcmFjaW5nKCkKLQotICBkZWYgdGVzdEZsYXNoRmlybXdhcmVQYXNzKHNlbGYpOgotICAgIHNlbGYuX2JhdHRvciA9IGJhdHRvcl93cmFwcGVyLkJhdHRPcldyYXBwZXIoJ2xpbnV4JykKLSAgICBzZWxmLl9EZWZhdWx0QmF0dE9yUmVwbGFjZW1lbnRzKCkKLSAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5fYmF0dG9yLkZsYXNoRmlybXdhcmUoJ2hleF9wYXRoJywgJ2NvbmZpZ19wYXRoJykpCi0KLSAgZGVmIHRlc3RGbGFzaEZpcm13YXJlRmFpbChzZWxmKToKLSAgICBzZWxmLl9iYXR0b3IgPSBiYXR0b3Jfd3JhcHBlci5CYXR0T3JXcmFwcGVyKCdsaW51eCcpCi0gICAgc2VsZi5fRGVmYXVsdEJhdHRPclJlcGxhY2VtZW50cygpCi0gICAgc2VsZi5fc3VicHJvY2Vzc19jaGVja19vdXRwdXRfY29kZSA9IDEKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGJhdHRvcl93cmFwcGVyLkJhdHRPckZsYXNoRXJyb3IpOgotICAgICAgc2VsZi5fYmF0dG9yLkZsYXNoRmlybXdhcmUoJ2hleF9wYXRoJywgJ2NvbmZpZ19wYXRoJykKLQotICBkZWYgdGVzdEZsYXNoRmlybXdhcmVTaGVsbFJ1bm5pbmcoc2VsZik6Ci0gICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcignbGludXgnKQotICAgIHNlbGYuX0RlZmF1bHRCYXR0T3JSZXBsYWNlbWVudHMoKQotICAgIHNlbGYuX2JhdHRvci5TdGFydFNoZWxsKCkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKLSAgICAgIHNlbGYuX2JhdHRvci5GbGFzaEZpcm13YXJlKCdoZXhfcGF0aCcsICdjb25maWdfcGF0aCcpCi0KLSAgZGVmIHRlc3RHZXRGaXJtd2FyZUdpdEhhc2hOb3RSdW5uaW5nKHNlbGYpOgotICAgIHNlbGYuX2JhdHRvciA9IGJhdHRvcl93cmFwcGVyLkJhdHRPcldyYXBwZXIoJ3dpbicpCi0gICAgc2VsZi5fRGVmYXVsdEJhdHRPclJlcGxhY2VtZW50cygpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6Ci0gICAgICBzZWxmLl9iYXR0b3IuR2V0RmlybXdhcmVHaXRIYXNoKCkKLQotICBkZWYgdGVzdEdldEZpcm13YXJlR2l0SGFzaFBhc3Moc2VsZik6Ci0gICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcignd2luJykKLSAgICBzZWxmLl9EZWZhdWx0QmF0dE9yUmVwbGFjZW1lbnRzKCkKLSAgICBzZWxmLl9iYXR0b3IuU3RhcnRTaGVsbCgpCi0gICAgc2VsZi5fYmF0dG9yLkdldEZpcm13YXJlR2l0SGFzaCA9IGxhbWJkYTogJ2NiYWE4NDMnCi0gICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5fYmF0dG9yLkdldEZpcm13YXJlR2l0SGFzaCgpLCBiYXNlc3RyaW5nKSkKLQotICBkZWYgdGVzdFN0b3BTaGVsbFBhc3Moc2VsZik6Ci0gICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcignd2luJykKLSAgICBzZWxmLl9EZWZhdWx0QmF0dE9yUmVwbGFjZW1lbnRzKCkKLSAgICBzZWxmLl9iYXR0b3IuU3RhcnRTaGVsbCgpCi0gICAgc2VsZi5fZmFrZV9yZXR1cm5fY29kZSA9IDAKLSAgICBzZWxmLl9iYXR0b3IuU3RvcFNoZWxsKCkKLSAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLl9iYXR0b3IuX2JhdHRvcl9zaGVsbCkKLQotICBAbW9jay5wYXRjaCgndGltZS5zbGVlcCcsIG1vY2suTW9jaykKLSAgZGVmIHRlc3RTdG9wU2hlbGxUaW1lT3V0QW5kS2lsbChzZWxmKToKLSAgICBzZWxmLl9iYXR0b3IgPSBiYXR0b3Jfd3JhcHBlci5CYXR0T3JXcmFwcGVyKCd3aW4nKQotICAgIHNlbGYuX0RlZmF1bHRCYXR0T3JSZXBsYWNlbWVudHMoKQotICAgIHNlbGYuX2JhdHRvci5TdGFydFNoZWxsKCkKLSAgICBzZWxmLl9iYXR0b3IuU3RvcFNoZWxsKCkKLSAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLl9iYXR0b3IuX2JhdHRvcl9zaGVsbCkKLQotICBkZWYgdGVzdFN0b3BTaGVsbE5vdFN0YXJ0ZWQoc2VsZik6Ci0gICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcignd2luJykKLSAgICBzZWxmLl9EZWZhdWx0QmF0dE9yUmVwbGFjZW1lbnRzKCkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKLSAgICAgIHNlbGYuX2JhdHRvci5TdG9wU2hlbGwoKQotCi0gIEBtb2NrLnBhdGNoKCd0aW1lLnNsZWVwJywgbW9jay5Nb2NrKQotICBkZWYgdGVzdEZsYXNoQmF0dE9yU2FtZUdpdEhhc2goc2VsZik6Ci0gICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcignbGludXgnKQotICAgIHNlbGYuX0RlZmF1bHRCYXR0T3JSZXBsYWNlbWVudHMoKQotICAgIHNlbGYuX2JhdHRvci5TdGFydFNoZWxsKCkKLSAgICBzZWxmLl9iYXR0b3IuR2V0RmlybXdhcmVHaXRIYXNoID0gbGFtYmRhOiAnY2JhYTg0MycKLSAgICBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeU1hbmFnZXIuX3ZlcnNpb25fcmV0dXJuID0gJ2NiYWE4NDMnCi0gICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLl9iYXR0b3IuX0ZsYXNoQmF0dE9yKCkpCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2spCi0gIGRlZiB0ZXN0Rmxhc2hCYXR0T3JEaWZmZXJlbnRHaXRIYXNoKHNlbGYpOgotICAgIHNlbGYuX2JhdHRvciA9IGJhdHRvcl93cmFwcGVyLkJhdHRPcldyYXBwZXIoJ2xpbnV4JykKLSAgICBzZWxmLl9EZWZhdWx0QmF0dE9yUmVwbGFjZW1lbnRzKCkKLSAgICBzZWxmLl9iYXR0b3IuU3RhcnRTaGVsbCgpCi0gICAgc2VsZi5fYmF0dG9yLkdldEZpcm13YXJlR2l0SGFzaCA9IGxhbWJkYTogJ2Jheno3MzInCi0gICAgZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lNYW5hZ2VyLl92ZXJzaW9uX3JldHVybiA9ICdjYmFhODQzJwotICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLl9iYXR0b3IuX0ZsYXNoQmF0dE9yKCkpCi0KLSAgZGVmIHRlc3RDb2xsZWN0VHJhY2VEYXRhTm9TdGFydFRpbWUoc2VsZik6Ci0gICAgc2VsZi5fYmF0dG9yID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcignbGludXgnKQotICAgIHNlbGYuX0RlZmF1bHRCYXR0T3JSZXBsYWNlbWVudHMoKQotICAgIHNlbGYuX2JhdHRvci5TdGFydFNoZWxsKCkKLSAgICBzZWxmLl9iYXR0b3IuU3RhcnRUcmFjaW5nKCkKLSAgICBzZWxmLl9iYXR0b3IuR2V0U2hlbGxSZXR1cm5Db2RlID0gbGFtYmRhICp1bnVzZWQ6IDAKLSAgICBzZWxmLl9iYXR0b3IuU3RvcFRyYWNpbmcoKQotICAgIHNlbGYuX2JhdHRvci5fc3RhcnRfdHJhY2luZ190aW1lID0gTm9uZQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYmF0dG9yX2Vycm9yLkJhdHRPckVycm9yKToKLSAgICAgIHNlbGYuX2JhdHRvci5Db2xsZWN0VHJhY2VEYXRhKCkKLQotICBkZWYgdGVzdENvbGxlY3RUcmFjZURhdGFOb1N0b3BUaW1lKHNlbGYpOgotICAgIHNlbGYuX2JhdHRvciA9IGJhdHRvcl93cmFwcGVyLkJhdHRPcldyYXBwZXIoJ2xpbnV4JykKLSAgICBzZWxmLl9EZWZhdWx0QmF0dE9yUmVwbGFjZW1lbnRzKCkKLSAgICBzZWxmLl9iYXR0b3IuU3RhcnRTaGVsbCgpCi0gICAgc2VsZi5fYmF0dG9yLlN0YXJ0VHJhY2luZygpCi0gICAgc2VsZi5fYmF0dG9yLkdldFNoZWxsUmV0dXJuQ29kZSA9IGxhbWJkYSAqdW51c2VkOiAwCi0gICAgc2VsZi5fYmF0dG9yLlN0b3BUcmFjaW5nKCkKLSAgICBzZWxmLl9iYXR0b3IuX3N0b3BfdHJhY2luZ190aW1lID0gTm9uZQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYmF0dG9yX2Vycm9yLkJhdHRPckVycm9yKToKLSAgICAgIHNlbGYuX2JhdHRvci5Db2xsZWN0VHJhY2VEYXRhKCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBsb2dnaW5nLmdldExvZ2dlcigpLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0gIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vYmF0dG9yL2Jpbi9ydW5fcHlfdGVzdHMgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vYmF0dG9yL2Jpbi9ydW5fcHlfdGVzdHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDYxMTAzYmQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2JhdHRvci9iaW4vcnVuX3B5X3Rlc3RzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1fQ0FUQVBVTFRfUEFUSCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oCi0gICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJy4uJywgJy4uJykpCi1fQkFUVE9SX1BBVEggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicpKQotCi1zeXMucGF0aC5hcHBlbmQoX0NBVEFQVUxUX1BBVEgpCi1mcm9tIGNhdGFwdWx0X2J1aWxkIGltcG9ydCBydW5fd2l0aF90eXAKLQotCi1kZWYgbWFpbigpOgotICByZXR1cm4gcnVuX3dpdGhfdHlwLlJ1bih0b3BfbGV2ZWxfZGlyPV9CQVRUT1JfUEFUSCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vYmF0dG9yL2Jpbi91cGxvYWRfYmF0dG9yX2JpbmFyaWVzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2JhdHRvci9iaW4vdXBsb2FkX2JhdHRvcl9iaW5hcmllcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODkwMWNmYy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vYmF0dG9yL2Jpbi91cGxvYWRfYmF0dG9yX2JpbmFyaWVzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBhcmdwYXJzZQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLXN5cy5wYXRoLmFwcGVuZCgKLSAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4nLCAnLi4nLCAnLi4nLCAnZGVwZW5kZW5jeV9tYW5hZ2VyJykpKQotZnJvbSBkZXBlbmRlbmN5X21hbmFnZXIgaW1wb3J0IGJhc2VfY29uZmlnICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotCi0KLV9TVVBQT1JURURfQVJDSFMgPSBbCi0gICAgJ2xpbnV4Ml94ODZfNjQnLCAnZGFyd2luX3g4Nl82NCcsICd3aW5fQU1ENjQnLCAnd2luMzJfQU1ENjQnLCAnd2luMzJfeDg2JywKLSAgICAnZGVmYXVsdCcKLV0KLV9ERUZBVUxUX0RFUCA9ICdiYXR0b3JfYWdlbnRfYmluYXJ5JwotX0RFRkFVTFRfQ09ORklHID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICdiYXR0b3InLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXR0b3JfYmluYXJ5X2RlcGVuZGVuY2llcy5qc29uJykKLQotCi1kZWYgVXBsb2FkQmluYXJ5KGFyY2gsIHBhdGgsIGNvbmZpZywgZGVwKToKLSAgcHJpbnQgJ1VwbG9hZGluZyBiaW5hcnk6JwotICBwcmludCAnICBhcmNoOiAlcycgJSBhcmNoCi0gIHByaW50ICcgIHBhdGg6ICVzJyAlIHBhdGgKLSAgcHJpbnQgJyAgY29uZmlnOiAlcycgJSBjb25maWcKLSAgcHJpbnQgJyAgZGVwOiAlcycgJSBkZXAKLSAgYyA9IGJhc2VfY29uZmlnLkJhc2VDb25maWcoY29uZmlnLCB3cml0YWJsZT1UcnVlKQotICBjLkFkZENsb3VkU3RvcmFnZURlcGVuZGVuY3lVcGRhdGVKb2IoCi0gICAgICBkZXAsIGFyY2gsIHBhdGgsIHZlcnNpb249Tm9uZSwgZXhlY3V0ZV9qb2I9VHJ1ZSkKLSAgcHJpbnQgJ1VwbG9hZCBjb21wbGV0ZS4nCi0KLQotZGVmIG1haW4oKToKLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWFyY2gnLCAnLS1hcmNoaXRlY3R1cmUnLCByZXF1aXJlZD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0FyY2hpdGVjdHVyZSBiaW5hcnkgaXMgYnVpbHQgZm9yLicpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcGF0aCcsIHJlcXVpcmVkPVRydWUsIGhlbHA9J1BhdGggdG8gYmluYXJ5LicpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY29uZmlnJywgZGVmYXVsdD1fREVGQVVMVF9DT05GSUcsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGF0aCB0byBkZXBlbmRlbmN5IG1hbmFnZXIgY29uZmlnJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kZXAnLCBkZWZhdWx0PV9ERUZBVUxUX0RFUCwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdOYW1lIG9mIGRlcGVuZGVuY3kgdG8gdXBkYXRlLicpCi0gIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCi0gIGlmIGFyZ3MuYXJjaCBub3QgaW4gX1NVUFBPUlRFRF9BUkNIUzoKLSAgICBwcmludCAnQXJjaCBtdXN0IGJlIG9uZSBvZjogJXMnICUgX1NVUFBPUlRFRF9BUkNIUwotICAgIHJldHVybiAxCi0gIFVwbG9hZEJpbmFyeShhcmdzLmFyY2gsIGFyZ3MucGF0aCwgYXJncy5jb25maWcsIGFyZ3MuZGVwKQotICByZXR1cm4gMAotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vYmluL3J1bl90ZXN0cyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9iaW4vcnVuX3Rlc3RzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzMDIxNzU1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9iaW4vcnVuX3Rlc3RzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoYykgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotX0NBVEFQVUxUX1BBVEggPSBvcy5wYXRoLmFic3BhdGgoCi0gICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICcuLicpKQotCi1fUFlfVVRJTFNfUEFUSCA9IG9zLnBhdGguYWJzcGF0aCgKLSAgICBvcy5wYXRoLmpvaW4oX0NBVEFQVUxUX1BBVEgsICdjb21tb24nLCAncHlfdXRpbHMnKSkKLQotCi1kZWYgX1J1blRlc3RzT3JEaWUodG9wX2xldmVsX2Rpcik6Ci0gIGV4aXRfY29kZSA9IHJ1bl93aXRoX3R5cC5SdW4odG9wX2xldmVsX2RpciwgcGF0aD1bX1BZX1VUSUxTX1BBVEhdKQotICBpZiBleGl0X2NvZGU6Ci0gICAgc3lzLmV4aXQoZXhpdF9jb2RlKQotCi0KLWRlZiBfQWRkVG9QYXRoSWZOZWVkZWQocGF0aCk6Ci0gIGlmIHBhdGggbm90IGluIHN5cy5wYXRoOgotICAgIHN5cy5wYXRoLmluc2VydCgwLCBwYXRoKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIF9BZGRUb1BhdGhJZk5lZWRlZChfQ0FUQVBVTFRfUEFUSCkKLQotICBmcm9tIGhvb2tzIGltcG9ydCBpbnN0YWxsCi0gIGlmICctLW5vLWluc3RhbGwtaG9va3MnIGluIHN5cy5hcmd2OgotICAgIHN5cy5hcmd2LnJlbW92ZSgnLS1uby1pbnN0YWxsLWhvb2tzJykKLSAgZWxzZToKLSAgICBpbnN0YWxsLkluc3RhbGxIb29rcygpCi0KLSAgZnJvbSBjYXRhcHVsdF9idWlsZCBpbXBvcnQgcnVuX3dpdGhfdHlwCi0gIF9SdW5UZXN0c09yRGllKF9QWV9VVElMU19QQVRIKQotICBzeXMuZXhpdCgwKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2Jpbi91cGRhdGVfY2hyb21lX3JlZmVyZW5jZV9iaW5hcmllcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9iaW4vdXBkYXRlX2Nocm9tZV9yZWZlcmVuY2VfYmluYXJpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDY0MWZkYzQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2Jpbi91cGRhdGVfY2hyb21lX3JlZmVyZW5jZV9iaW5hcmllcworKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiVXBkYXRlcyB0aGUgQ2hyb21lIHJlZmVyZW5jZSBidWlsZHMuCi0KLVVzYWdlOgotICAkIC9wYXRoL3RvL3VwZGF0ZV9yZWZlcmVuY2VfYnVpbGQucHkKLSAgJCBnaXQgY29tbWl0IC1hCi0gICQgZ2l0IGNsIHVwbG9hZAotIiIiCi0KLWltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKLWltcG9ydCB1cmxsaWIyCi1pbXBvcnQgemlwZmlsZQotCi1zeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICdweV91dGlscycpKQotCi1mcm9tIHB5X3V0aWxzIGltcG9ydCBjbG91ZF9zdG9yYWdlCi1mcm9tIGRlcGVuZGVuY3lfbWFuYWdlciBpbXBvcnQgYmFzZV9jb25maWcKLQotCi1kZWYgQnVpbGROb3RGb3VuZEVycm9yKGVycm9yX3N0cmluZyk6Ci0gIHJhaXNlIFZhbHVlRXJyb3IoZXJyb3Jfc3RyaW5nKQotCi0KLV9DSFJPTUVfQklOQVJJRVNfQ09ORklHID0gb3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgJy4uJywgJy4uJywgJ2NvbW1vbicsCi0gICAgJ3B5X3V0aWxzJywgJ3B5X3V0aWxzJywgJ2Nocm9tZV9iaW5hcmllcy5qc29uJykKLQotQ0hST01FX0dTX0JVQ0tFVCA9ICdjaHJvbWUtdW5zaWduZWQnCi0KLQotIyBSZW1vdmUgYSBwbGF0Zm9ybSBuYW1lIGZyb20gdGhpcyBsaXN0IHRvIGRpc2FibGUgdXBkYXRpbmcgaXQuCi0jIEFkZCBvbmUgdG8gZW5hYmxlIHVwZGF0aW5nIGl0LiAoTXVzdCBhbHNvIHVwZGF0ZSBfUExBVEZPUk1fTUFQLikKLV9QTEFURk9STVNfVE9fVVBEQVRFID0gWydtYWNfeDg2XzY0JywgJ3dpbl94ODYnLCAnd2luX0FNRDY0JywgJ2xpbnV4X3g4Nl82NCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnYW5kcm9pZF9rX2FybWVhYmktdjdhJywgJ2FuZHJvaWRfbF9hcm02NC12OGEnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZHJvaWRfbF9hcm1lYWJpLXY3YSddCi0KLSMgUmVtb3ZlIGEgY2hhbm5hbCBuYW1lIGZyb20gdGhpcyBsaXN0IHRvIGRpc2FibGUgdXBkYXRpbmcgaXQuCi0jIEFkZCBvbmUgdG8gZW5hYmxlIHVwZGF0aW5nIGl0LgotX0NIQU5ORUxTX1RPX1VQREFURSA9IFsnc3RhYmxlJ10gIyAnY2FuYXJ5JywgJ2RldicKLQotCi0jIE9tYWhhIGlzIENocm9tZSdzIGF1dG91cGRhdGUgc2VydmVyLiBJdCByZXBvcnRzIHRoZSBjdXJyZW50IHZlcnNpb25zIHVzZWQKLSMgYnkgZWFjaCBwbGF0Zm9ybSBvbiBlYWNoIGNoYW5uZWwuCi1fT01BSEFfUExBVEZPUk1TID0geyAnc3RhYmxlJzogIFsnbWFjJywgJ2xpbnV4JywgJ3dpbicsICdhbmRyb2lkJ10sCi0gICAgICAgICAgICAgICAgICAgICdkZXYnOiAgWydsaW51eCddLCAnY2FuYXJ5JzogWydtYWMnLCAnd2luJ119Ci0KLQotIyBBbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggcGxhdGZvcm0uCi0jICAgb21haGE6IG5hbWUgb21haGEgdXNlcyBmb3IgdGhlIHBsYWZ0b3Jtcy4KLSMgICB6aXBfbmFtZTogbmFtZSBvZiB0aGUgemlwIGZpbGUgdG8gYmUgcmV0cmlldmVkIGZyb20gY2xvdWQgc3RvcmFnZS4KLSMgICBnc19idWlsZDogbmFtZSBvZiB0aGUgQ2hyb21lIGJ1aWxkIHBsYXRmb3JtIHVzZWQgaW4gY2xvdWQgc3RvcmFnZS4KLSMgICBkZXN0aW5hdGlvbjogTmFtZSBvZiB0aGUgZm9sZGVyIHRvIGRvd25sb2FkIHRoZSByZWZlcmVuY2UgYnVpbGQgdG8uCi1VcGRhdGVJbmZvID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgnVXBkYXRlSW5mbycsCi0gICAgJ29tYWhhLCBnc19mb2xkZXIsIGdzX2J1aWxkLCB6aXBfbmFtZScpCi1fUExBVEZPUk1fTUFQID0geyAnbWFjX3g4Nl82NCc6IFVwZGF0ZUluZm8ob21haGE9J21hYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NfZm9sZGVyPSdkZXNrdG9wLSonLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzX2J1aWxkPSdtYWM2NCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwX25hbWU9J2Nocm9tZS1tYWMuemlwJyksCi0gICAgICAgICAgICAgICAgICAnd2luX3g4Nic6IFVwZGF0ZUluZm8ob21haGE9J3dpbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NfZm9sZGVyPSdkZXNrdG9wLSonLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzX2J1aWxkPSd3aW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcF9uYW1lPSdjaHJvbWUtd2luLnppcCcpLAotICAgICAgICAgICAgICAgICAgJ3dpbl9BTUQ2NCc6IFVwZGF0ZUluZm8ob21haGE9J3dpbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc19mb2xkZXI9J2Rlc2t0b3AtKicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc19idWlsZD0nd2luNjQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwX25hbWU9J2Nocm9tZS13aW42NC56aXAnKSwKLSAgICAgICAgICAgICAgICAgICdsaW51eF94ODZfNjQnOiBVcGRhdGVJbmZvKG9tYWhhPSdsaW51eCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc19mb2xkZXI9J2Rlc2t0b3AtKicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc19idWlsZD0nbGludXg2NCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBfbmFtZT0nY2hyb21lLWxpbnV4NjQuemlwJyksCi0gICAgICAgICAgICAgICAgICAnYW5kcm9pZF9rX2FybWVhYmktdjdhJzogVXBkYXRlSW5mbyhvbWFoYT0nYW5kcm9pZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc19mb2xkZXI9J2FuZHJvaWQtKicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc19idWlsZD0nYXJtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcF9uYW1lPSdDaHJvbWUuYXBrJyksCi0gICAgICAgICAgICAgICAgICAnYW5kcm9pZF9sX2FybTY0LXY4YSc6IFVwZGF0ZUluZm8ob21haGE9J2FuZHJvaWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzX2ZvbGRlcj0nYW5kcm9pZC0qJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc19idWlsZD0nYXJtXzY0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBfbmFtZT0nQ2hyb21lTW9kZXJuLmFwaycpLAotICAgICAgICAgICAgICAgICAgJ2FuZHJvaWRfbF9hcm1lYWJpLXY3YSc6IFVwZGF0ZUluZm8ob21haGE9J2FuZHJvaWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NfZm9sZGVyPSdhbmRyb2lkLSonLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NfYnVpbGQ9J2FybScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBfbmFtZT0nQ2hyb21lLmFwaycpLAotfQotCi0KLWRlZiBfQ2hhbm5lbFZlcnNpb25zTWFwKGNoYW5uZWwpOgotICByb3dzID0gX09tYWhhUmVwb3J0VmVyc2lvbkluZm8oY2hhbm5lbCkKLSAgb21haGFfdmVyc2lvbnNfbWFwID0gX09tYWhhVmVyc2lvbnNNYXAocm93cywgY2hhbm5lbCkKLSAgY2hhbm5lbF92ZXJzaW9uc19tYXAgPSB7fQotICBmb3IgcGxhdGZvcm0gaW4gX1BMQVRGT1JNU19UT19VUERBVEU6Ci0gICAgb21haGFfcGxhdGZvcm0gPSBfUExBVEZPUk1fTUFQW3BsYXRmb3JtXS5vbWFoYQotICAgIGlmIG9tYWhhX3BsYXRmb3JtIGluIG9tYWhhX3ZlcnNpb25zX21hcDoKLSAgICAgIGNoYW5uZWxfdmVyc2lvbnNfbWFwW3BsYXRmb3JtXSA9IG9tYWhhX3ZlcnNpb25zX21hcFtvbWFoYV9wbGF0Zm9ybV0KLSAgcmV0dXJuIGNoYW5uZWxfdmVyc2lvbnNfbWFwCi0KLQotZGVmIF9PbWFoYVJlcG9ydFZlcnNpb25JbmZvKGNoYW5uZWwpOgotICB1cmwgPSdodHRwczovL29tYWhhcHJveHkuYXBwc3BvdC5jb20vYWxsP2NoYW5uZWw9JXMnICUgY2hhbm5lbAotICBsaW5lcyA9IHVybGxpYjIudXJsb3Blbih1cmwpLnJlYWRsaW5lcygpCi0gIHJldHVybiBbbC5zcGxpdCgnLCcpIGZvciBsIGluIGxpbmVzXQotCi0KLWRlZiBfT21haGFWZXJzaW9uc01hcChyb3dzLCBjaGFubmVsKToKLSAgcGxhdGZvcm1zID0gX09NQUhBX1BMQVRGT1JNUy5nZXQoY2hhbm5lbCwgW10pCi0gIGlmIChsZW4ocm93cykgPCAxIG9yCi0gICAgICBub3Qgcm93c1swXVswOjNdID09IFsnb3MnLCAnY2hhbm5lbCcsICdjdXJyZW50X3ZlcnNpb24nXSk6Ci0gICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgJ09tYWhhIHJlcG9ydCBpcyBub3QgaW4gdGhlIGV4cGVjdGVkIGZvcm06ICVzLicgJSByb3dzKQotICB2ZXJzaW9uc19tYXAgPSB7fQotICBmb3Igcm93IGluIHJvd3NbMTpdOgotICAgIGlmIHJvd1sxXSAhPSBjaGFubmVsOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgICAnT21haGEgcmVwb3J0IGNvbnRhaW5zIGEgbGluZSB3aXRoIHRoZSBjaGFubmVsICVzJyAlIHJvd1sxXSkKLSAgICBpZiByb3dbMF0gaW4gcGxhdGZvcm1zOgotICAgICAgdmVyc2lvbnNfbWFwW3Jvd1swXV0gPSByb3dbMl0KLSAgbG9nZ2luZy53YXJuKCd2ZXJzaW9ucyBtYXA6ICVzJyAlIHZlcnNpb25zX21hcCkKLSAgaWYgbm90IGFsbChwbGF0Zm9ybSBpbiB2ZXJzaW9uc19tYXAgZm9yIHBsYXRmb3JtIGluIHBsYXRmb3Jtcyk6Ci0gICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgJ09tYWhhIHJlcG9ydCBkaWQgbm90IGNvbnRhaW4gYWxsIGRlc2lyZWQgcGxhdGZvcm1zIGZvciBjaGFubmVsICVzJyAlIGNoYW5uZWwpCi0gIHJldHVybiB2ZXJzaW9uc19tYXAKLQotCi1kZWYgX1F1ZXVlUGxhdGZvcm1VcGRhdGUocGxhdGZvcm0sIHZlcnNpb24sIGNvbmZpZywgY2hhbm5lbCk6Ci0gICIiIiBwbGF0Zm9ybTogdGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtIGZvciB0aGUgYnJvd3NlciB0bwotICAgICAgYmUgZG93bmxvYWRlZCAmIHVwZGF0ZWQgZnJvbSBjbG91ZCBzdG9yYWdlLiAiIiIKLSAgcGxhdGZvcm1faW5mbyA9IF9QTEFURk9STV9NQVBbcGxhdGZvcm1dCi0gIGZpbGVuYW1lID0gcGxhdGZvcm1faW5mby56aXBfbmFtZQotICAjIHJlbW90ZV9wYXRoIGV4YW1wbGU6IGRlc2t0b3AtKi8zMC4wLjE1OTUuMC9wcmVjaXNlMzIvY2hyb21lLXByZWNpc2UzMi56aXAKLSAgcmVtb3RlX3BhdGggPSAnJXMvJXMvJXMvJXMnICUgKAotICAgICAgcGxhdGZvcm1faW5mby5nc19mb2xkZXIsIHZlcnNpb24sIHBsYXRmb3JtX2luZm8uZ3NfYnVpbGQsIGZpbGVuYW1lKQotICBpZiBub3QgY2xvdWRfc3RvcmFnZS5FeGlzdHMoQ0hST01FX0dTX0JVQ0tFVCwgcmVtb3RlX3BhdGgpOgotICAgIHJhaXNlIEJ1aWxkTm90Rm91bmRFcnJvcigKLSAgICAgICAgJ0ZhaWxlZCB0byBmaW5kICVzIGJ1aWxkIGZvciB2ZXJzaW9uICVzIGF0IHBhdGggJXMuJyAlIChwbGF0Zm9ybSwgdmVyc2lvbiwgcmVtb3RlX3BhdGgpKQotICByZWZlcmVuY2VfYnVpbGRzX2ZvbGRlciA9IG9zLnBhdGguam9pbigKLSAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgJ2Nocm9tZV90ZWxlbWV0cnlfYnVpbGQnLAotICAgICAgJ3JlZmVyZW5jZV9idWlsZHMnLCBjaGFubmVsKQotICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmVmZXJlbmNlX2J1aWxkc19mb2xkZXIpOgotICAgIG9zLm1ha2VkaXJzKHJlZmVyZW5jZV9idWlsZHNfZm9sZGVyKQotICBsb2NhbF9kZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4ocmVmZXJlbmNlX2J1aWxkc19mb2xkZXIsIGZpbGVuYW1lKQotICBjbG91ZF9zdG9yYWdlLkdldChDSFJPTUVfR1NfQlVDS0VULCByZW1vdGVfcGF0aCwgbG9jYWxfZGVzdF9wYXRoKQotICBjb25maWcuQWRkQ2xvdWRTdG9yYWdlRGVwZW5kZW5jeVVwZGF0ZUpvYigKLSAgICAgICdjaHJvbWVfJXMnICUgY2hhbm5lbCwgcGxhdGZvcm0sIGxvY2FsX2Rlc3RfcGF0aCwgdmVyc2lvbj12ZXJzaW9uLAotICAgICAgZXhlY3V0ZV9qb2I9RmFsc2UpCi0KLQotZGVmIFVwZGF0ZUJ1aWxkcygpOgotICBjb25maWcgPSBiYXNlX2NvbmZpZy5CYXNlQ29uZmlnKF9DSFJPTUVfQklOQVJJRVNfQ09ORklHLCB3cml0YWJsZT1UcnVlKQotICBmb3IgY2hhbm5lbCBpbiBfQ0hBTk5FTFNfVE9fVVBEQVRFOgotICAgIGNoYW5uZWxfdmVyc2lvbnNfbWFwID0gX0NoYW5uZWxWZXJzaW9uc01hcChjaGFubmVsKQotICAgIGZvciBwbGF0Zm9ybSBpbiBjaGFubmVsX3ZlcnNpb25zX21hcDoKLSAgICAgIHByaW50ICdEb3dubG9hZGluZyBDaHJvbWUgKCVzIGNoYW5uZWwpIG9uICVzJyAlIChjaGFubmVsLCBwbGF0Zm9ybSkKLSAgICAgIGN1cnJlbnRfdmVyc2lvbiA9IGNvbmZpZy5HZXRWZXJzaW9uKCdjaHJvbWVfJXMnICUgY2hhbm5lbCwgcGxhdGZvcm0pCi0gICAgICBjaGFubmVsX3ZlcnNpb24gPSAgY2hhbm5lbF92ZXJzaW9uc19tYXAuZ2V0KHBsYXRmb3JtKQotICAgICAgcHJpbnQgJ2N1cnJlbnQ6ICVzLCBjaGFubmVsOiAlcycgJSAoY3VycmVudF92ZXJzaW9uLCBjaGFubmVsX3ZlcnNpb24pCi0gICAgICBpZiBjdXJyZW50X3ZlcnNpb24gYW5kIGN1cnJlbnRfdmVyc2lvbiA9PSBjaGFubmVsX3ZlcnNpb246Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICBfUXVldWVQbGF0Zm9ybVVwZGF0ZShwbGF0Zm9ybSwgY2hhbm5lbF92ZXJzaW9uLCBjb25maWcsIGNoYW5uZWwpCi0gICAgIyBUT0RPOiBtb3ZlIGV4ZWN1dGUgdXBkYXRlIGpvYnMgaGVyZSwgYW5kIGFkZCBjb21taXR0aW5nL3VwbG9hZGluZyB0aGUgY2wuCi0KLSAgcHJpbnQgJ1VwZGF0aW5nIGNocm9tZSBidWlsZHMgd2l0aCBkb3dubG9hZGVkIGJpbmFyaWVzJwotICBjb25maWcuRXhlY3V0ZVVwZGF0ZUpvYnMoZm9yY2U9VHJ1ZSkKLQotCi1kZWYgbWFpbigpOgotICBsb2dnaW5nLmdldExvZ2dlcigpLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0gICNUT0RPKGFpb2xvcyk6IGFsZXJ0IHNoZXJpZmZzIHZpYSBlbWFpbCB3aGVuIGFuIGVycm9yIGlzIHNlZW4uCi0gICNUaGlzIHNob3VsZCBiZSBhZGRlZCB3aGVuIGFsZXJ0cyBhcmUgYWRkZWQgd2hlbiB1cGRhdGluZyB0aGUgYnVpbGQuCi0gIFVwZGF0ZUJ1aWxkcygpCi0gICMgVE9ETyhhaW9sb3MpOiBBZGQgLS1jb21taXQgZmxhZy4gY3JidWcuY29tLzU0NzIyOQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBtYWluKCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9lc2xpbnQvTElDRU5TRSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9lc2xpbnQvTElDRU5TRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0MzQ0Ny4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vZXNsaW50L0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1FU0xpbnQKLUNvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLCBodHRwczovL2pxdWVyeS5vcmcvCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLW9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi1pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi10byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi1jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLWZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi1hbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLUlNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi1BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi1MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotVEhFIFNPRlRXQVJFLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9lc2xpbnQvUkVBRE1FLm1kIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2VzbGludC9SRUFETUUubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYTViNjMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2VzbGludC9SRUFETUUubWQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBDYXRhcHVsdCBlc2xpbnQgY29uZmlnLCBjdXN0b20gQ2F0YXB1bHQgZXNsaW50IHJ1bGVzLAotYW5kIHRlc3RzIGZvciB0aG9zZSBydWxlcy4KLQotU29tZSBvZiBvdXIgY3VzdG9tIHJ1bGVzIGFyZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aG9zZSBpbmNsdWRlZCB3aXRoIGVzbGludCwgYXMKLXN1Z2dlc3RlZCBpbiBodHRwczovL2dvby5nbC91QXhGSHEuCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vZXNsaW50L2Jpbi9ydW5fZXNsaW50IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2VzbGludC9iaW4vcnVuX2VzbGludApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOTMzNDE1Yi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vZXNsaW50L2Jpbi9ydW5fZXNsaW50CisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBhcmdwYXJzZQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLQotX0NBVEFQVUxUX1BBVEggPSBvcy5wYXRoLmFic3BhdGgoCi0gICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCi0gICAgICAgICAgICAgICAgIG9zLnBhdGgucGFyZGlyLCBvcy5wYXRoLnBhcmRpciwgb3MucGF0aC5wYXJkaXIpKQotCi0KLV9FU0xJTlRfUEFUSCA9IG9zLnBhdGguYWJzcGF0aCgKLSAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgb3MucGF0aC5wYXJkaXIpKQotCi0KLURJUkVDVE9SSUVTX1RPX0xJTlQgPSBbCi0gIG9zLnBhdGguam9pbihfQ0FUQVBVTFRfUEFUSCwgJ2Rhc2hib2FyZCcsICdkYXNoYm9hcmQnKSwKLSAgb3MucGF0aC5qb2luKF9DQVRBUFVMVF9QQVRILCAndHJhY2luZycsICd0cmFjaW5nJykKLV0KLQotCi1kZWYgX0FkZFRvUGF0aElmTmVlZGVkKHBhdGgpOgotICBpZiBwYXRoIG5vdCBpbiBzeXMucGF0aDoKLSAgICBzeXMucGF0aC5pbnNlcnQoMCwgcGF0aCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBfQWRkVG9QYXRoSWZOZWVkZWQoX0VTTElOVF9QQVRIKQotICBpbXBvcnQgZXNsaW50Ci0KLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCi0gICAgICBkZXNjcmlwdGlvbj0nV3JhcHBlciBzY3JpcHQgdG8gcnVuIGVzbGludCBvbiBDYXRhcHVsdCBjb2RlJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1wYXRocycsICctcCcsIGRlZmF1bHQ9Tm9uZSwgbmFyZ3M9JysnLCBtZXRhdmFyPSdQQVRIJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdMaXN0IG9mIHBhdGhzIHRvIGxpbnQnKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWFsbCcsIGRlZmF1bHQ9Tm9uZSwgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSdW5zIGVzbGludCBvbiBhbGwgYXBwbGljYWJsZSBDYXRhcHVsdCBjb2RlJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1leHRyYS1hcmdzJywgZGVmYXVsdD1Ob25lLCB0eXBlPXN0ciwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdBIHN0cmluZyBvZiBleHRyYSBhcmd1bWVudHMgdG8gcGFzcyB0byBlc2xpbnQnKQotCi0gIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndlsxOl0pCi0gIGlmICgoYXJncy5wYXRocyBpcyBub3QgTm9uZSBhbmQgYXJncy5hbGwgaXMgbm90IE5vbmUpIG9yCi0gICAgICAoYXJncy5wYXRocyBpcyBOb25lIGFuZCBhcmdzLmFsbCBpcyBOb25lKSk6Ci0gICAgcHJpbnQgJ0VpdGhlciAtLXBhdGhzIG9yIC0tYWxsIG11c3QgYmUgdXNlZCwgYnV0IG5vdCBib3RoLlxuJwotICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICBzeXMuZXhpdCgxKQotCi0gIHBhdGhzID0gRElSRUNUT1JJRVNfVE9fTElOVCBpZiBhcmdzLmFsbCBlbHNlIGFyZ3MucGF0aHMKLSAgc3VjY2Vzcywgb3V0cHV0ID0gZXNsaW50LlJ1bkVzbGludChwYXRocywgZXh0cmFfYXJncz1hcmdzLmV4dHJhX2FyZ3MpCi0gIHByaW50IG91dHB1dAotICBzeXMuZXhpdChub3Qgc3VjY2VzcykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9lc2xpbnQvYmluL3J1bl90ZXN0cyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9lc2xpbnQvYmluL3J1bl90ZXN0cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZGIxMDY3OS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vZXNsaW50L2Jpbi9ydW5fdGVzdHMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLQotX0NBVEFQVUxUX1BBVEggPSBvcy5wYXRoLmFic3BhdGgoCi0gICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCi0gICAgb3MucGF0aC5wYXJkaXIsIG9zLnBhdGgucGFyZGlyLCBvcy5wYXRoLnBhcmRpcikpCi0KLQotX0VTTElOVF9QQVRIID0gb3MucGF0aC5hYnNwYXRoKAotICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBvcy5wYXRoLnBhcmRpcikpCi0KLQotZGVmIF9SdW5UZXN0c09yRGllKHRvcF9sZXZlbF9kaXIpOgotICBleGl0X2NvZGUgPSBydW5fd2l0aF90eXAuUnVuKHRvcF9sZXZlbF9kaXIsIHBhdGg9W19FU0xJTlRfUEFUSF0pCi0gIGlmIGV4aXRfY29kZToKLSAgICBzeXMuZXhpdChleGl0X2NvZGUpCi0KLQotZGVmIF9BZGRUb1BhdGhJZk5lZWRlZChwYXRoKToKLSAgaWYgcGF0aCBub3QgaW4gc3lzLnBhdGg6Ci0gICAgc3lzLnBhdGguaW5zZXJ0KDAsIHBhdGgpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgX0FkZFRvUGF0aElmTmVlZGVkKF9DQVRBUFVMVF9QQVRIKQotCi0gIGZyb20gY2F0YXB1bHRfYnVpbGQgaW1wb3J0IHJ1bl93aXRoX3R5cAotCi0gIF9SdW5UZXN0c09yRGllKG9zLnBhdGguam9pbihfRVNMSU5UX1BBVEgsICdlc2xpbnQnKSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9lc2xpbnQvZXNsaW50L19faW5pdF9fLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2VzbGludC9lc2xpbnQvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MjE3OGEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2VzbGludC9lc2xpbnQvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKLQotCi1fQ0FUQVBVTFRfUEFUSCA9IG9zLnBhdGguam9pbigKLSAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksCi0gICAgb3MucGF0aC5wYXJkaXIsIG9zLnBhdGgucGFyZGlyLCBvcy5wYXRoLnBhcmRpcikKLQotCi1kZWYgX0FkZFRvUGF0aElmTmVlZGVkKHBhdGgpOgotICBpZiBwYXRoIG5vdCBpbiBzeXMucGF0aDoKLSAgICBzeXMucGF0aC5pbnNlcnQoMCwgcGF0aCkKLQotCi1kZWYgX1VwZGF0ZVN5c1BhdGhJZk5lZWRlZCgpOgotICBfQWRkVG9QYXRoSWZOZWVkZWQob3MucGF0aC5qb2luKF9DQVRBUFVMVF9QQVRILCAnY29tbW9uJywgJ25vZGVfcnVubmVyJykpCi0gIF9BZGRUb1BhdGhJZk5lZWRlZChvcy5wYXRoLmpvaW4oX0NBVEFQVUxUX1BBVEgsICdjb21tb24nLCAncHlfdXRpbHMnKSkKLQotCi1fVXBkYXRlU3lzUGF0aElmTmVlZGVkKCkKLQotCi1pbXBvcnQgcHlfdXRpbHMKLWZyb20gbm9kZV9ydW5uZXIgaW1wb3J0IG5vZGVfdXRpbAotCi0KLUJBU0VfRVNMSU5UX0NNRCA9IFsKLSAgbm9kZV91dGlsLkdldE5vZGVQYXRoKCksCi0gIG9zLnBhdGguam9pbihub2RlX3V0aWwuR2V0Tm9kZU1vZHVsZXNQYXRoKCksICdlc2xpbnQnLCAnYmluJywgJ2VzbGludC5qcycpLAotICAnLS1jb2xvcicKLV0KLQotCi1ERUZBVUxUX0VTTElOVF9SVUxFU19ESVIgPSBvcy5wYXRoLmpvaW4oCi0gICAgcHlfdXRpbHMuR2V0Q2F0YXB1bHREaXIoKSwgJ2NvbW1vbicsICdlc2xpbnQnLCAncnVsZXMnKQotCi0KLWRlZiBfQ3JlYXRlRXNsaW50Q29tbWFuZChydWxlc2RpciwgZXh0cmFfYXJncyk6Ci0gIGVzbGludF9jbWQgPSBCQVNFX0VTTElOVF9DTUQgKyBbCi0gICAgICAnLS1ydWxlc2RpcicsIHJ1bGVzZGlyLCAnLS1leHQnLCAnLmpzLC5odG1sJwotICBdCi0gIGlmIGV4dHJhX2FyZ3M6Ci0gICAgZXNsaW50X2NtZC5leHRlbmQoZXh0cmFfYXJncy5zdHJpcCgpLnNwbGl0KCcgJykpCi0gIHJldHVybiBlc2xpbnRfY21kCi0KLQotZGVmIFJ1bkVzbGludChwYXRocywgcnVsZXNfZGlyPURFRkFVTFRfRVNMSU5UX1JVTEVTX0RJUiwgZXh0cmFfYXJncz1Ob25lKToKLSAgIiIiUnVucyBlc2xpbnQgb24gYSBsaXN0IG9mIHBhdGhzLgotCi0gIEFyZ3M6Ci0gICAgcGF0aHM6IEEgbGlzdCBvZiBwYXRocyB0byBydW4gZXNsaW50IG9uLgotICAgIHJ1bGVzX2RpcjogQSBkaXJlY3Rvcnkgb2YgY3VzdG9tIGVzbGludCBydWxlcy4KLSAgICBleHRyYV9hcmdzOiBBIHN0cmluZyB0byBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZXNsaW50IGNvbW1hbmQuCi0gICIiIgotICBpZiB0eXBlKHBhdGhzKSBpcyBub3QgbGlzdCBvciBsZW4ocGF0aHMpID09IDA6Ci0gICAgcmFpc2UgVmFsdWVFcnJvcignTXVzdCBzcGVjaWZ5IGEgbm9uLWVtcHR5IGxpc3Qgb2YgcGF0aHMgdG8gbGludC4nKQotCi0gIHRyeToKLSAgICBlc2xpbnRfY21kID0gX0NyZWF0ZUVzbGludENvbW1hbmQocnVsZXNfZGlyLCBleHRyYV9hcmdzKQotICAgIHJldHVybiBUcnVlLCBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChlc2xpbnRfY21kICsgcGF0aHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkucnN0cmlwKCkKLSAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6Ci0gICAgcmV0dXJuIEZhbHNlLCBlLm91dHB1dC5yc3RyaXAoKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2VzbGludC9lc2xpbnQvc21va2VfdGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9lc2xpbnQvZXNsaW50L3Ntb2tlX3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMGY0NDIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2VzbGludC9lc2xpbnQvc21va2VfdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGVzbGludAotaW1wb3J0IG9zCi1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCB1bml0dGVzdAotCi0KLV9URU1QX0ZJTEVfQ09OVEVOVFMgPSAnJyc8IURPQ1RZUEUgaHRtbD4KLTwhLS0KLUNvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS0tPgotPHNjcmlwdD4KLS8vIFRoaXMgc2hvdWxkIGNhdXNlIGEgbGludGVyIGVycm9yIGJlY2F1c2Ugd2UgcmVxdWlyZSBjYW1lbENhc2UuCi12YXIgbm9uX2NhbWVsX2Nhc2UgPSAwOwotPC9zY3JpcHQ+Ci0nJycKLQotCi1jbGFzcyBTbW9rZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICBkZWYgdGVzdEVzbGludEZpbmRzRXJyb3Ioc2VsZik6Ci0gICAgdHJ5OgotICAgICAgdG1wX2ZpbGUgPSAgdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKAotICAgICAgICAgIGRlbGV0ZT1GYWxzZSwgZGlyPW9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIHN1ZmZpeD0iLmh0bWwiKQotICAgICAgdG1wX2ZpbGUud3JpdGUoX1RFTVBfRklMRV9DT05URU5UUykKLSAgICAgIHRtcF9maWxlLmNsb3NlKCkKLQotICAgICAgc3VjY2Vzcywgb3V0cHV0ID0gZXNsaW50LlJ1bkVzbGludChbdG1wX2ZpbGUubmFtZV0pCi0gICAgICBzZWxmLmFzc2VydEZhbHNlKHN1Y2Nlc3MpCi0gICAgICBzZWxmLmFzc2VydFRydWUoJ2lzIG5vdCBpbiBjYW1lbCBjYXNlJyBpbiBvdXRwdXQpCi0gICAgZmluYWxseToKLSAgICAgIG9zLnJlbW92ZSh0bXBfZmlsZS5uYW1lKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2VzbGludC9ydWxlcy9jYXRhcHVsdC1jYW1lbGNhc2UuanMgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vZXNsaW50L3J1bGVzL2NhdGFwdWx0LWNhbWVsY2FzZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzMTA1Mi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vZXNsaW50L3J1bGVzL2NhdGFwdWx0LWNhbWVsY2FzZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vKiBlc2xpbnQtZGlzYWJsZSAqLwotCi0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIG5vbi1jYW1lbGNhc2VkIGlkZW50aWZpZXJzCi0gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCi0gKi8KLQotJ3VzZSBzdHJpY3QnOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IHsKLSAgICBtZXRhOiB7Ci0gICAgICAgIGRvY3M6IHsKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiZW5mb3JjZSBDYXRhcHVsdCBjYW1lbGNhc2UgbmFtaW5nIGNvbnZlbnRpb24iLAotICAgICAgICAgICAgY2F0ZWdvcnk6ICJTdHlsaXN0aWMgSXNzdWVzIiwKLSAgICAgICAgICAgIHJlY29tbWVuZGVkOiBmYWxzZQotICAgICAgICB9LAotCi0gICAgICAgIHNjaGVtYTogWwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHR5cGU6ICJvYmplY3QiLAotICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogewotICAgICAgICAgICAgICAgICAgICAgICAgZW51bTogWyJhbHdheXMiLCAibmV2ZXIiXQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UKLSAgICAgICAgICAgIH0KLSAgICAgICAgXQotICAgIH0sCi0KLSAgICBjcmVhdGUoY29udGV4dCkgewotCi0gICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgLy8gSGVscGVycwotICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgLy8gY29udGFpbnMgcmVwb3J0ZWQgbm9kZXMgdG8gYXZvaWQgcmVwb3J0aW5nIHR3aWNlIG9uIGRlc3RydWN0dXJpbmcgd2l0aCBzaG9ydGhhbmQgbm90YXRpb24KLSAgICAgICAgdmFyIHJlcG9ydGVkID0gW107Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENoZWNrcyBpZiBhIHN0cmluZyBjb250YWlucyBhbiB1bmRlcnNjb3JlIGFuZCBpc24ndCBhbGwgdXBwZXItY2FzZQotICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgc3RyaW5nIHRvIGNoZWNrLgotICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgdGhlIHN0cmluZyBpcyB1bmRlcnNjb3JlZAotICAgICAgICAgKiBAcHJpdmF0ZQotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gaXNVbmRlcnNjb3JlZChuYW1lKSB7Ci0KLSAgICAgICAgICAgIC8vIGlmIHRoZXJlJ3MgYW4gdW5kZXJzY29yZSwgaXQgbWlnaHQgYmUgQV9WQVJBTlQsIHdoaWNoIGlzIG9rYXkKLSAgICAgICAgICAgIHJldHVybiBuYW1lLmluZGV4T2YoIl8iKSA+IC0xICYmIG5hbWUgIT09IG5hbWUudG9VcHBlckNhc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXBvcnRzIGFuIEFTVCBub2RlIGFzIGEgcnVsZSB2aW9sYXRpb24uCi0gICAgICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZXBvcnQuCi0gICAgICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAgICAgKiBAcHJpdmF0ZQotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChyZXBvcnRlZC5pbmRleE9mKG5vZGUpIDwgMCkgewotICAgICAgICAgICAgICAgIHJlcG9ydGVkLnB1c2gobm9kZSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIklkZW50aWZpZXIgJ3t7bmFtZX19JyBpcyBub3QgaW4gY2FtZWwgY2FzZS4iLCB7IG5hbWU6IG5vZGUubmFtZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhciBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9OwotICAgICAgICBsZXQgcHJvcGVydGllcyA9IG9wdGlvbnMucHJvcGVydGllcyB8fCAiIjsKLQotICAgICAgICBpZiAocHJvcGVydGllcyAhPT0gImFsd2F5cyIgJiYgcHJvcGVydGllcyAhPT0gIm5ldmVyIikgewotICAgICAgICAgICAgcHJvcGVydGllcyA9ICJhbHdheXMiOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHsKLQotICAgICAgICAgICAgSWRlbnRpZmllcihub2RlKSB7Ci0KLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIExlYWRpbmcgYW5kIHRyYWlsaW5nIHVuZGVyc2NvcmVzIGFyZSBjb21tb25seSB1c2VkIHRvIGZsYWcKLSAgICAgICAgICAgICAgICAgKiBwcml2YXRlL3Byb3RlY3RlZCBpZGVudGlmaWVycywgc3RyaXAgdGhlbS4KLSAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAqIE5PVEU6IFRoaXMgaGFzIGZvdXIgQ2F0YXB1bHQtc3BlY2lmaWMgc3R5bGUgZXhjZXB0aW9uczoKLSAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAqICAgLSBUaGUgcHJlZml4IG9wdF8KLSAgICAgICAgICAgICAgICAgKiAgIC0gVGhlIHByZWZpeCBnXwotICAgICAgICAgICAgICAgICAqICAgLSBUaGUgc3VmZml4IF9zbWFsbGVySXNCZXR0ZXIKLSAgICAgICAgICAgICAgICAgKiAgIC0gVGhlIHN1ZmZpeCBfYmlnZ2VySXNCZXR0ZXIKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG5vZGUubmFtZS5yZXBsYWNlKC8oPzpeb3B0Xyl8Xig/Ol5nXyl8Xl8rfF8rJHwoPzpfc21hbGxlcklzQmV0dGVyKSR8KD86X2JpZ2dlcklzQmV0dGVyKSQvZywgIiIpLAotICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVQYXJlbnQgPSAobm9kZS5wYXJlbnQudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSA/IG5vZGUucGFyZW50LnBhcmVudCA6IG5vZGUucGFyZW50OwotCi0gICAgICAgICAgICAgICAgLy8gTWVtYmVyRXhwcmVzc2lvbnMgZ2V0IHNwZWNpYWwgcnVsZXMKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gIm5ldmVyIiBjaGVjayBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzID09PSAibmV2ZXIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgcmVwb3J0IHVuZGVyc2NvcmVkIG9iamVjdCBuYW1lcwotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQub2JqZWN0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50Lm9iamVjdC5uYW1lID09PSBub2RlLm5hbWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1VuZGVyc2NvcmVkKG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQobm9kZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gUmVwb3J0IEFzc2lnbm1lbnRFeHByZXNzaW9ucyBvbmx5IGlmIHRoZXkgYXJlIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGFzc2lnbm1lbnQKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlZmZlY3RpdmVQYXJlbnQudHlwZSA9PT0gIkFzc2lnbm1lbnRFeHByZXNzaW9uIiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVW5kZXJzY29yZWQobmFtZSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWZmZWN0aXZlUGFyZW50LnJpZ2h0LnR5cGUgIT09ICJNZW1iZXJFeHByZXNzaW9uIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVBhcmVudC5sZWZ0LnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVBhcmVudC5sZWZ0LnByb3BlcnR5Lm5hbWUgPT09IG5vZGUubmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydChub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gUHJvcGVydGllcyBoYXZlIHRoZWlyIG93biBydWxlcwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5wYXJlbnQudHlwZSA9PT0gIlByb3BlcnR5IikgewotCi0gICAgICAgICAgICAgICAgICAgIC8vICJuZXZlciIgY2hlY2sgcHJvcGVydGllcwotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcyA9PT0gIm5ldmVyIikgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50LnBhcmVudCAmJiBub2RlLnBhcmVudC5wYXJlbnQudHlwZSA9PT0gIk9iamVjdFBhdHRlcm4iICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQua2V5ID09PSBub2RlICYmIG5vZGUucGFyZW50LnZhbHVlICE9PSBub2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlcnNjb3JlZChuYW1lKSAmJiBlZmZlY3RpdmVQYXJlbnQudHlwZSAhPT0gIkNhbGxFeHByZXNzaW9uIikgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGltcG9ydCBzcGVjaWZpZXIKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFsiSW1wb3J0U3BlY2lmaWVyIiwgIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciIsICJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIl0uaW5kZXhPZihub2RlLnBhcmVudC50eXBlKSA+PSAwKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gUmVwb3J0IG9ubHkgaWYgdGhlIGxvY2FsIGltcG9ydGVkIGlkZW50aWZpZXIgaXMgdW5kZXJzY29yZWQKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50LmxvY2FsICYmIG5vZGUucGFyZW50LmxvY2FsLm5hbWUgPT09IG5vZGUubmFtZSAmJiBpc1VuZGVyc2NvcmVkKG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFJlcG9ydCBhbnl0aGluZyB0aGF0IGlzIHVuZGVyc2NvcmVkIHRoYXQgaXNuJ3QgYSBDYWxsRXhwcmVzc2lvbgotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNVbmRlcnNjb3JlZChuYW1lKSAmJiBlZmZlY3RpdmVQYXJlbnQudHlwZSAhPT0gIkNhbGxFeHByZXNzaW9uIikgewotICAgICAgICAgICAgICAgICAgICByZXBvcnQobm9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH07Ci0KLSAgICB9Ci19OwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2VzbGludC90ZXN0cy9jYXRhcHVsdC1jYW1lbGNhc2UuanMgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vZXNsaW50L3Rlc3RzL2NhdGFwdWx0LWNhbWVsY2FzZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBiZGIzNy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vZXNsaW50L3Rlc3RzL2NhdGFwdWx0LWNhbWVsY2FzZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDMyNCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vKiBlc2xpbnQtZGlzYWJsZSAqLwotCi0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgVGVzdHMgZm9yIGNhbWVsY2FzZSBydWxlLgotICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwotICovCi0KLSd1c2Ugc3RyaWN0JzsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlcXVpcmVtZW50cwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdmFyIHJ1bGUgPSByZXF1aXJlKCIuLi9ydWxlcy9jYXRhcHVsdC1jYW1lbGNhc2UiKSwKLSAgICBSdWxlVGVzdGVyID0gcmVxdWlyZSgiLi4vLi4vbm9kZV9ydW5uZXIvbm9kZV9ydW5uZXIvbm9kZV9tb2R1bGVzL2VzbGludC9saWIvdGVzdGVycy9ydWxlLXRlc3RlciIpOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVGVzdHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZhciBydWxlVGVzdGVyID0gbmV3IFJ1bGVUZXN0ZXIoKTsKLQotcnVsZVRlc3Rlci5ydW4oImNhbWVsY2FzZSIsIHJ1bGUsIHsKLSAgICB2YWxpZDogWwotICAgICAgICAiZmlyc3ROYW1lID0gXCJOaWNob2xhc1wiIiwKLSAgICAgICAgIkZJUlNUX05BTUUgPSBcIk5pY2hvbGFzXCIiLAotICAgICAgICAiX19teVByaXZhdGVWYXJpYWJsZSA9IFwiUGF0cmlja1wiIiwKLSAgICAgICAgIm15UHJpdmF0ZVZhcmlhYmxlXyA9IFwiUGF0cmlja1wiIiwKLSAgICAgICAgImZ1bmN0aW9uIGRvU29tZXRoaW5nKCl7fSIsCi0gICAgICAgICJkb19zb21ldGhpbmcoKSIsCi0gICAgICAgICJmb28uZG9fc29tZXRoaW5nKCkiLAotICAgICAgICAidmFyIGZvbyA9IGJhci5iYXpfYm9vbTsiLAotICAgICAgICAidmFyIGZvbyA9IGJhci5iYXpfYm9vbS5zb21ldGhpbmc7IiwKLSAgICAgICAgImZvby5ib29tX3Bvdy5xdXggPSBiYXIuYmF6X2Jvb20uc29tZXRoaW5nOyIsCi0gICAgICAgICJpZiAoYmFyLmJhel9ib29tKSB7fSIsCi0gICAgICAgICJ2YXIgb2JqID0geyBrZXk6IGZvby5iYXJfYmF6IH07IiwKLSAgICAgICAgInZhciBhcnIgPSBbZm9vLmJhcl9iYXpdOyIsCi0gICAgICAgICJbZm9vLmJhcl9iYXpdIiwKLSAgICAgICAgInZhciBhcnIgPSBbZm9vLmJhcl9iYXoucXV4XTsiLAotICAgICAgICAiW2Zvby5iYXJfYmF6Lm5lc3RpbmddIiwKLSAgICAgICAgImlmIChmb28uYmFyX2JheiA9PT0gYm9vbS5iYW1fcG93KSB7IFtmb28uYmF6X2Jvb21dIH0iLAotICAgICAgICAvLyBUaGVzZSB0ZXN0cyBhcmUgZm9yIENhdGFwdWx0LXNwZWNpZmljIGV4Y2VwdGlvbnMuCi0gICAgICAgICJvcHRfZmlyc3ROYW1lID0gXCJOaWNob2xhc1wiIiwKLSAgICAgICAgImdfZmlyc3ROYW1lID0gXCJOaWNob2xhc1wiIiwKLSAgICAgICAgInNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlciA9IFwiTmljaG9sYXNcIiIsCi0gICAgICAgICJzaXplSW5CeXRlc19iaWdnZXJJc0JldHRlciA9IFwiTmljaG9sYXNcIiIsCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvZGU6ICJ2YXIgbyA9IHtrZXk6IDF9IiwKLSAgICAgICAgICAgIG9wdGlvbnM6IFt7cHJvcGVydGllczogImFsd2F5cyJ9XQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAidmFyIG8gPSB7YmFyX2JhejogMX0iLAotICAgICAgICAgICAgb3B0aW9uczogW3twcm9wZXJ0aWVzOiAibmV2ZXIifV0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgY29kZTogIm9iai5hX2IgPSAyOyIsCi0gICAgICAgICAgICBvcHRpb25zOiBbe3Byb3BlcnRpZXM6ICJuZXZlciJ9XQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAidmFyIG9iaiA9IHtcbiBhX2E6IDEgXG59O1xuIG9iai5hX2IgPSAyOyIsCi0gICAgICAgICAgICBvcHRpb25zOiBbe3Byb3BlcnRpZXM6ICJuZXZlciJ9XQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAib2JqLmZvb19iYXIgPSBmdW5jdGlvbigpe307IiwKLSAgICAgICAgICAgIG9wdGlvbnM6IFt7cHJvcGVydGllczogIm5ldmVyIn1dCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvZGU6ICJ2YXIgeyBjYXRlZ29yeV9pZDogY2F0ZWdvcnkgfSA9IHF1ZXJ5OyIsCi0gICAgICAgICAgICBwYXJzZXJPcHRpb25zOiB7IGVjbWFWZXJzaW9uOiA2IH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgY29kZTogInZhciB7IGNhdGVnb3J5X2lkOiBjYXRlZ29yeSB9ID0gcXVlcnk7IiwKLSAgICAgICAgICAgIHBhcnNlck9wdGlvbnM6IHsgZWNtYVZlcnNpb246IDYgfSwKLSAgICAgICAgICAgIG9wdGlvbnM6IFt7cHJvcGVydGllczogIm5ldmVyIn1dCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvZGU6ICJpbXBvcnQgeyBjYW1lbENhc2VkIH0gZnJvbSBcImV4dGVybmFsIG1vZHVsZVwiOyIsCi0gICAgICAgICAgICBwYXJzZXJPcHRpb25zOiB7IGVjbWFWZXJzaW9uOiA2LCBzb3VyY2VUeXBlOiAibW9kdWxlIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvZGU6ICJpbXBvcnQgeyBub19jYW1lbGNhc2VkIGFzIGNhbWVsQ2FzZWQgfSBmcm9tIFwiZXh0ZXJuYWwtbW9kdWxlXCI7IiwKLSAgICAgICAgICAgIHBhcnNlck9wdGlvbnM6IHsgZWNtYVZlcnNpb246IDYsIHNvdXJjZVR5cGU6ICJtb2R1bGUiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgY29kZTogImltcG9ydCB7IG5vX2NhbWVsY2FzZWQgYXMgY2FtZWxDYXNlZCwgYW5vdGVyQ2FtZWxDYXNlZCB9IGZyb20gXCJleHRlcm5hbC1tb2R1bGVcIjsiLAotICAgICAgICAgICAgcGFyc2VyT3B0aW9uczogeyBlY21hVmVyc2lvbjogNiwgc291cmNlVHlwZTogIm1vZHVsZSIgfQotICAgICAgICB9Ci0gICAgXSwKLSAgICBpbnZhbGlkOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvZGU6ICJmaXJzdF9uYW1lID0gXCJOaWNob2xhc1wiIiwKLSAgICAgICAgICAgIGVycm9yczogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogIklkZW50aWZpZXIgJ2ZpcnN0X25hbWUnIGlzIG5vdCBpbiBjYW1lbCBjYXNlLiIsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICJJZGVudGlmaWVyIgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgY29kZTogIl9fcHJpdmF0ZV9maXJzdF9uYW1lID0gXCJQYXRyaWNrXCIiLAotICAgICAgICAgICAgZXJyb3JzOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAiSWRlbnRpZmllciAnX19wcml2YXRlX2ZpcnN0X25hbWUnIGlzIG5vdCBpbiBjYW1lbCBjYXNlLiIsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICJJZGVudGlmaWVyIgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgY29kZTogImZ1bmN0aW9uIGZvb19iYXIoKXt9IiwKLSAgICAgICAgICAgIGVycm9yczogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogIklkZW50aWZpZXIgJ2Zvb19iYXInIGlzIG5vdCBpbiBjYW1lbCBjYXNlLiIsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICJJZGVudGlmaWVyIgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgY29kZTogIm9iai5mb29fYmFyID0gZnVuY3Rpb24oKXt9OyIsCi0gICAgICAgICAgICBlcnJvcnM6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICJJZGVudGlmaWVyICdmb29fYmFyJyBpcyBub3QgaW4gY2FtZWwgY2FzZS4iLAotICAgICAgICAgICAgICAgICAgICB0eXBlOiAiSWRlbnRpZmllciIKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvZGU6ICJiYXJfYmF6LmZvbyA9IGZ1bmN0aW9uKCl7fTsiLAotICAgICAgICAgICAgZXJyb3JzOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAiSWRlbnRpZmllciAnYmFyX2JheicgaXMgbm90IGluIGNhbWVsIGNhc2UuIiwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogIklkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAiW2Zvb19iYXIuYmF6XSIsCi0gICAgICAgICAgICBlcnJvcnM6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICJJZGVudGlmaWVyICdmb29fYmFyJyBpcyBub3QgaW4gY2FtZWwgY2FzZS4iLAotICAgICAgICAgICAgICAgICAgICB0eXBlOiAiSWRlbnRpZmllciIKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvZGU6ICJpZiAoZm9vLmJhcl9iYXogPT09IGJvb20uYmFtX3BvdykgeyBbZm9vX2Jhci5iYXpdIH0iLAotICAgICAgICAgICAgZXJyb3JzOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAiSWRlbnRpZmllciAnZm9vX2JhcicgaXMgbm90IGluIGNhbWVsIGNhc2UuIiwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogIklkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAiZm9vLmJhcl9iYXogPSBib29tLmJhbV9wb3ciLAotICAgICAgICAgICAgZXJyb3JzOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAiSWRlbnRpZmllciAnYmFyX2JheicgaXMgbm90IGluIGNhbWVsIGNhc2UuIiwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogIklkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAidmFyIGZvbyA9IHsgYmFyX2JhejogYm9vbS5iYW1fcG93IH0iLAotICAgICAgICAgICAgZXJyb3JzOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAiSWRlbnRpZmllciAnYmFyX2JheicgaXMgbm90IGluIGNhbWVsIGNhc2UuIiwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogIklkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAiZm9vLnF1eC5ib29tX3BvdyA9IHsgYmFyOiBib29tLmJhbV9wb3cgfSIsCi0gICAgICAgICAgICBlcnJvcnM6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICJJZGVudGlmaWVyICdib29tX3BvdycgaXMgbm90IGluIGNhbWVsIGNhc2UuIiwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogIklkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAidmFyIG8gPSB7YmFyX2JhejogMX0iLAotICAgICAgICAgICAgb3B0aW9uczogW3twcm9wZXJ0aWVzOiAiYWx3YXlzIn1dLAotICAgICAgICAgICAgZXJyb3JzOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAiSWRlbnRpZmllciAnYmFyX2JheicgaXMgbm90IGluIGNhbWVsIGNhc2UuIiwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogIklkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAib2JqLmFfYiA9IDI7IiwKLSAgICAgICAgICAgIG9wdGlvbnM6IFt7cHJvcGVydGllczogImFsd2F5cyJ9XSwKLSAgICAgICAgICAgIGVycm9yczogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogIklkZW50aWZpZXIgJ2FfYicgaXMgbm90IGluIGNhbWVsIGNhc2UuIiwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogIklkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAib2JqLmFfYiA9IDI7IiwKLSAgICAgICAgICAgIG9wdGlvbnM6IFt7cHJvcGVydGllczogImFsd2F5cyJ9XSwKLSAgICAgICAgICAgIGVycm9yczogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogIklkZW50aWZpZXIgJ2FfYicgaXMgbm90IGluIGNhbWVsIGNhc2UuIiwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogIklkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAidmFyIHsgY2F0ZWdvcnlfaWQ6IGNhdGVnb3J5X2lkIH0gPSBxdWVyeTsiLAotICAgICAgICAgICAgcGFyc2VyT3B0aW9uczogeyBlY21hVmVyc2lvbjogNiB9LAotICAgICAgICAgICAgZXJyb3JzOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAiSWRlbnRpZmllciAnY2F0ZWdvcnlfaWQnIGlzIG5vdCBpbiBjYW1lbCBjYXNlLiIsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICJJZGVudGlmaWVyIgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgY29kZTogInZhciB7IGNhdGVnb3J5X2lkIH0gPSBxdWVyeTsiLAotICAgICAgICAgICAgcGFyc2VyT3B0aW9uczogeyBlY21hVmVyc2lvbjogNiB9LAotICAgICAgICAgICAgZXJyb3JzOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAiSWRlbnRpZmllciAnY2F0ZWdvcnlfaWQnIGlzIG5vdCBpbiBjYW1lbCBjYXNlLiIsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICJJZGVudGlmaWVyIgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgY29kZTogImltcG9ydCBub19jYW1lbGNhc2VkIGZyb20gXCJleHRlcm5hbC1tb2R1bGVcIjsiLAotICAgICAgICAgICAgcGFyc2VyT3B0aW9uczogeyBlY21hVmVyc2lvbjogNiwgc291cmNlVHlwZTogIm1vZHVsZSIgfSwKLSAgICAgICAgICAgIGVycm9yczogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogIklkZW50aWZpZXIgJ25vX2NhbWVsY2FzZWQnIGlzIG5vdCBpbiBjYW1lbCBjYXNlLiIsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICJJZGVudGlmaWVyIgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgY29kZTogImltcG9ydCAqIGFzIG5vX2NhbWVsY2FzZWQgZnJvbSBcImV4dGVybmFsLW1vZHVsZVwiOyIsCi0gICAgICAgICAgICBwYXJzZXJPcHRpb25zOiB7IGVjbWFWZXJzaW9uOiA2LCBzb3VyY2VUeXBlOiAibW9kdWxlIiB9LAotICAgICAgICAgICAgZXJyb3JzOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAiSWRlbnRpZmllciAnbm9fY2FtZWxjYXNlZCcgaXMgbm90IGluIGNhbWVsIGNhc2UuIiwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogIklkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAiaW1wb3J0IHsgbm9fY2FtZWxjYXNlZCB9IGZyb20gXCJleHRlcm5hbC1tb2R1bGVcIjsiLAotICAgICAgICAgICAgcGFyc2VyT3B0aW9uczogeyBlY21hVmVyc2lvbjogNiwgc291cmNlVHlwZTogIm1vZHVsZSIgfSwKLSAgICAgICAgICAgIGVycm9yczogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogIklkZW50aWZpZXIgJ25vX2NhbWVsY2FzZWQnIGlzIG5vdCBpbiBjYW1lbCBjYXNlLiIsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICJJZGVudGlmaWVyIgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgY29kZTogImltcG9ydCB7IG5vX2NhbWVsY2FzZWQgYXMgbm9fY2FtZWxfY2FzZWQgfSBmcm9tIFwiZXh0ZXJuYWwgbW9kdWxlXCI7IiwKLSAgICAgICAgICAgIHBhcnNlck9wdGlvbnM6IHsgZWNtYVZlcnNpb246IDYsIHNvdXJjZVR5cGU6ICJtb2R1bGUiIH0sCi0gICAgICAgICAgICBlcnJvcnM6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICJJZGVudGlmaWVyICdub19jYW1lbF9jYXNlZCcgaXMgbm90IGluIGNhbWVsIGNhc2UuIiwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogIklkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAiaW1wb3J0IHsgY2FtZWxDYXNlZCBhcyBub19jYW1lbF9jYXNlZCB9IGZyb20gXCJleHRlcm5hbCBtb2R1bGVcIjsiLAotICAgICAgICAgICAgcGFyc2VyT3B0aW9uczogeyBlY21hVmVyc2lvbjogNiwgc291cmNlVHlwZTogIm1vZHVsZSIgfSwKLSAgICAgICAgICAgIGVycm9yczogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogIklkZW50aWZpZXIgJ25vX2NhbWVsX2Nhc2VkJyBpcyBub3QgaW4gY2FtZWwgY2FzZS4iLAotICAgICAgICAgICAgICAgICAgICB0eXBlOiAiSWRlbnRpZmllciIKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvZGU6ICJpbXBvcnQgeyBjYW1lbENhc2VkLCBub19jYW1lbGNhc2VkIH0gZnJvbSBcImV4dGVybmFsLW1vZHVsZVwiOyIsCi0gICAgICAgICAgICBwYXJzZXJPcHRpb25zOiB7IGVjbWFWZXJzaW9uOiA2LCBzb3VyY2VUeXBlOiAibW9kdWxlIiB9LAotICAgICAgICAgICAgZXJyb3JzOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAiSWRlbnRpZmllciAnbm9fY2FtZWxjYXNlZCcgaXMgbm90IGluIGNhbWVsIGNhc2UuIiwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogIklkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlOiAiaW1wb3J0IHsgbm9fY2FtZWxjYXNlZCBhcyBjYW1lbENhc2VkLCBhbm90aGVyX25vX2NhbWVsY2FzZWQgfSBmcm9tIFwiZXh0ZXJuYWwtbW9kdWxlXCI7IiwKLSAgICAgICAgICAgIHBhcnNlck9wdGlvbnM6IHsgZWNtYVZlcnNpb246IDYsIHNvdXJjZVR5cGU6ICJtb2R1bGUiIH0sCi0gICAgICAgICAgICBlcnJvcnM6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICJJZGVudGlmaWVyICdhbm90aGVyX25vX2NhbWVsY2FzZWQnIGlzIG5vdCBpbiBjYW1lbCBjYXNlLiIsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICJJZGVudGlmaWVyIgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgY29kZTogImltcG9ydCBjYW1lbENhc2VkLCB7IG5vX2NhbWVsY2FzZWQgfSBmcm9tIFwiZXh0ZXJuYWwtbW9kdWxlXCI7IiwKLSAgICAgICAgICAgIHBhcnNlck9wdGlvbnM6IHsgZWNtYVZlcnNpb246IDYsIHNvdXJjZVR5cGU6ICJtb2R1bGUiIH0sCi0gICAgICAgICAgICBlcnJvcnM6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICJJZGVudGlmaWVyICdub19jYW1lbGNhc2VkJyBpcyBub3QgaW4gY2FtZWwgY2FzZS4iLAotICAgICAgICAgICAgICAgICAgICB0eXBlOiAiSWRlbnRpZmllciIKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvZGU6ICJpbXBvcnQgbm9fY2FtZWxjYXNlZCwgeyBhbm90aGVyX25vX2NhbWVsY2FzZWQgYXMgY2FtZWxDYXNlZCB9IGZyb20gXCJleHRlcm5hbC1tb2R1bGVcIjsiLAotICAgICAgICAgICAgcGFyc2VyT3B0aW9uczogeyBlY21hVmVyc2lvbjogNiwgc291cmNlVHlwZTogIm1vZHVsZSIgfSwKLSAgICAgICAgICAgIGVycm9yczogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogIklkZW50aWZpZXIgJ25vX2NhbWVsY2FzZWQnIGlzIG5vdCBpbiBjYW1lbCBjYXNlLiIsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICJJZGVudGlmaWVyIgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0pOwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2xhYi9jb21taXRzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2xhYi9jb21taXRzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjZTAyZWUzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9sYWIvY29tbWl0cy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiUHJpbnQgc3RhdGlzdGljcyBhYm91dCB0aGUgcmF0ZSBvZiBjb21taXRzIHRvIGEgcmVwb3NpdG9yeS4iIiIKLQotaW1wb3J0IGRhdGV0aW1lCi1pbXBvcnQgaXRlcnRvb2xzCi1pbXBvcnQganNvbgotaW1wb3J0IG1hdGgKLWltcG9ydCB1cmxsaWIKLWltcG9ydCB1cmxsaWIyCi0KLQotX0JBU0VfVVJMID0gJ2h0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbScKLSMgQ2FuIGJlIHVwIHRvIDEwLDAwMC4KLV9SRVZJU0lPTl9DT1VOVCA9IDEwMDAKLQotX1JFUE9TSVRPUklFUyA9IFsKLSAgICAnY2hyb21pdW0vc3JjJywKLSAgICAnYW5nbGUvYW5nbGUnLAotICAgICdza2lhJywKLSAgICAndjgvdjgnLAotXQotCi0KLWRlZiBQYWlyd2lzZShpdGVyYWJsZSk6Ci0gICIiInMgLT4gKHMwLHMxKSwgKHMxLHMyKSwgKHMyLCBzMyksIC4uLiIiIgotICBhLCBiID0gaXRlcnRvb2xzLnRlZShpdGVyYWJsZSkKLSAgbmV4dChiLCBOb25lKQotICByZXR1cm4gaXRlcnRvb2xzLml6aXAoYSwgYikKLQotCi1kZWYgUGVyY2VudGlsZShkYXRhLCBwZXJjZW50aWxlKToKLSAgIiIiRmluZCBhIHBlcmNlbnRpbGUgb2YgYSBsaXN0IG9mIHZhbHVlcy4KLQotICBQYXJhbWV0ZXJzOgotICAgIGRhdGE6IEEgc29ydGVkIGxpc3Qgb2YgdmFsdWVzLgotICAgIHBlcmNlbnRpbGU6IFRoZSBwZXJjZW50aWxlIHRvIGxvb2sgdXAsIGZyb20gMC4wIHRvIDEuMC4KLQotICBSZXR1cm5zOgotICAgIFRoZSBwZXJjZW50aWxlLgotCi0gIFJhaXNlczoKLSAgICBWYWx1ZUVycm9yOiBJZiBkYXRhIGlzIGVtcHR5LgotICAiIiIKLSAgaWYgbm90IGRhdGE6Ci0gICAgcmFpc2UgVmFsdWVFcnJvcigpCi0KLSAgayA9IChsZW4oZGF0YSkgLSAxKSAqIHBlcmNlbnRpbGUKLSAgZiA9IG1hdGguZmxvb3IoaykKLSAgYyA9IG1hdGguY2VpbChrKQotCi0gIGlmIGYgPT0gYzoKLSAgICByZXR1cm4gZGF0YVtpbnQoayldCi0gIHJldHVybiBkYXRhW2ludChmKV0gKiAoYyAtIGspICsgZGF0YVtpbnQoYyldICogKGsgLSBmKQotCi0KLWRlZiBDb21taXRUaW1lcyhyZXBvc2l0b3J5LCByZXZpc2lvbl9jb3VudCk6Ci0gIHBhcmFtZXRlcnMgPSB1cmxsaWIudXJsZW5jb2RlKCgoJ24nLCByZXZpc2lvbl9jb3VudCksICgnZm9ybWF0JywgJ0pTT04nKSkpCi0gIHVybCA9ICclcy8lcy8rbG9nPyVzJyAlIChfQkFTRV9VUkwsIHVybGxpYi5xdW90ZShyZXBvc2l0b3J5KSwgcGFyYW1ldGVycykKLSAgZGF0YSA9IGpzb24ubG9hZHMoJycuam9pbih1cmxsaWIyLnVybG9wZW4odXJsKS5yZWFkKCkuc3BsaXRsaW5lcygpWzE6XSkpCi0KLSAgY29tbWl0X3RpbWVzID0gW10KLSAgZm9yIHJldmlzaW9uIGluIGRhdGFbJ2xvZyddOgotICAgIGNvbW1pdF90aW1lX3N0cmluZyA9IHJldmlzaW9uWydjb21taXR0ZXInXVsndGltZSddCi0gICAgY29tbWl0X3RpbWUgPSBkYXRldGltZS5kYXRldGltZS5zdHJwdGltZSgKLSAgICAgICAgY29tbWl0X3RpbWVfc3RyaW5nLCAnJWEgJWIgJWQgJUg6JU06JVMgJVknKQotICAgIGNvbW1pdF90aW1lcy5hcHBlbmQoY29tbWl0X3RpbWUpCi0KLSAgcmV0dXJuIGNvbW1pdF90aW1lcwotCi0KLWRlZiBtYWluKCk6Ci0gIGZvciByZXBvc2l0b3J5IGluIF9SRVBPU0lUT1JJRVM6Ci0gICAgY29tbWl0X3RpbWVzID0gQ29tbWl0VGltZXMocmVwb3NpdG9yeSwgX1JFVklTSU9OX0NPVU5UKQotCi0gICAgY29tbWl0X2R1cmF0aW9ucyA9IFtdCi0gICAgZm9yIHRpbWUxLCB0aW1lMiBpbiBQYWlyd2lzZShjb21taXRfdGltZXMpOgotICAgICAgY29tbWl0X2R1cmF0aW9ucy5hcHBlbmQoKHRpbWUxIC0gdGltZTIpLnRvdGFsX3NlY29uZHMoKSkKLSAgICBjb21taXRfZHVyYXRpb25zLnNvcnQoKQotCi0gICAgcHJpbnQgJ1JFUE9TSVRPUlk6JywgcmVwb3NpdG9yeQotICAgIHByaW50ICdTdGFydCBEYXRlOicsIG1pbihjb21taXRfdGltZXMpCi0gICAgcHJpbnQgJyAgRW5kIERhdGU6JywgbWF4KGNvbW1pdF90aW1lcykKLSAgICBwcmludCAnICBEdXJhdGlvbjonLCBtYXgoY29tbWl0X3RpbWVzKSAtIG1pbihjb21taXRfdGltZXMpCi0gICAgcHJpbnQgJyAgICAgICAgIG46JywgbGVuKGNvbW1pdF90aW1lcykKLQotICAgIGZvciBwIGluICgwLjAwLCAwLjA1LCAwLjI1LCAwLjUwLCAwLjc1LCAwLjk1LCAxLjAwKToKLSAgICAgIHBlcmNlbnRpbGUgPSBQZXJjZW50aWxlKGNvbW1pdF9kdXJhdGlvbnMsIHApCi0gICAgICBwcmludCAnJTNkJSUgY29tbWl0IGR1cmF0aW9uOicgJSAocCAqIDEwMCksICclNmRzJyAlIHBlcmNlbnRpbGUKLSAgICBtZWFuID0gbWF0aC5mc3VtKGNvbW1pdF9kdXJhdGlvbnMpIC8gbGVuKGNvbW1pdF9kdXJhdGlvbnMpCi0gICAgcHJpbnQgJyBNaW4gY29tbWl0IGR1cmF0aW9uOicsICclNmRzJyAlIG1pbihjb21taXRfZHVyYXRpb25zKQotICAgIHByaW50ICdNZWFuIGNvbW1pdCBkdXJhdGlvbjonLCAnJTZkcycgJSBtZWFuCi0gICAgcHJpbnQgJyBNYXggY29tbWl0IGR1cmF0aW9uOicsICclNmRzJyAlIG1heChjb21taXRfZHVyYXRpb25zKQotICAgIHByaW50Ci0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgbWFpbigpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vbGFiL2hhcmR3YXJlLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL2xhYi9oYXJkd2FyZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNWU0OWM1Yy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vbGFiL2hhcmR3YXJlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlF1ZXJ5IGJ1aWxkIHNsYXZlIGhhcmR3YXJlIGluZm8sIGFuZCBwcmludCBpdCB0byBzdGRvdXQgYXMgY3N2LiIiIgotCi1pbXBvcnQgY3N2Ci1pbXBvcnQganNvbgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBzeXMKLWltcG9ydCB1cmxsaWIyCi0KLQotX01BU1RFUlMgPSBbCi0gICAgJ2Nocm9taXVtLnBlcmYnLAotICAgICdjaHJvbWl1bS5wZXJmLmZ5aScsCi0gICAgJ2NsaWVudC5jYXRhcHVsdCcsCi0gICAgJ3RyeXNlcnZlci5jaHJvbWl1bS5wZXJmJywKLSAgICAndHJ5c2VydmVyLmNsaWVudC5jYXRhcHVsdCcsCi1dCi0KLQotX0tFWVMgPSBbCi0gICAgJ21hc3RlcicsICdidWlsZGVyJywgJ2hvc3RuYW1lJywKLQotICAgICdvcyBmYW1pbHknLCAnb3MgdmVyc2lvbicsICdiaXRuZXNzICh1c2VybGFuZCknLAotCi0gICAgJ3Byb2R1Y3QgbmFtZScsICdhcmNoaXRlY3R1cmUnLCAncHJvY2Vzc29yIGNvdW50JywgJ3Byb2Nlc3NvciB0eXBlJywKLSAgICAnbWVtb3J5IHRvdGFsJywKLQotICAgICdmYWN0ZXIgdmVyc2lvbicsICdnaXQgdmVyc2lvbicsICdwdXBwZXQgdmVyc2lvbicsICdweXRob24gdmVyc2lvbicsCi0gICAgJ3J1YnkgdmVyc2lvbicsCi0KLSAgICAnYW5kcm9pZCBkZXZpY2UgMScsICdhbmRyb2lkIGRldmljZSAyJywgJ2FuZHJvaWQgZGV2aWNlIDMnLAotICAgICdhbmRyb2lkIGRldmljZSA0JywgJ2FuZHJvaWQgZGV2aWNlIDUnLCAnYW5kcm9pZCBkZXZpY2UgNicsCi0gICAgJ2FuZHJvaWQgZGV2aWNlIDcnLCAnYW5kcm9pZCBkZXZpY2UgOCcsCi1dCi1fRVhDTFVERURfS0VZUyA9IGZyb3plbnNldChbCi0gICAgJ2FyY2hpdGVjdHVyZSAodXNlcmxhbmQpJywKLSAgICAnYiBkaXJlY3RvcnknLAotICAgICdsYXN0IHB1cHBldCBydW4nLAotICAgICd1cHRpbWUnLAotICAgICd3aW5kb3dzIHZlcnNpb24nLAotXSkKLQotCi1kZWYgbWFpbigpOgotICB3cml0ZXIgPSBjc3YuRGljdFdyaXRlcihzeXMuc3Rkb3V0LCBfS0VZUykKLSAgd3JpdGVyLndyaXRlaGVhZGVyKCkKLQotICBmb3IgbWFzdGVyX25hbWUgaW4gX01BU1RFUlM6Ci0gICAgbWFzdGVyX2RhdGEgPSBqc29uLmxvYWQodXJsbGliMi51cmxvcGVuKAotICAgICAgICAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9wLyVzL2pzb24vc2xhdmVzJyAlIG1hc3Rlcl9uYW1lKSkKLQotICAgIHNsYXZlcyA9IHNvcnRlZChtYXN0ZXJfZGF0YS5pdGVyaXRlbXMoKSwKLSAgICAgICAgICAgICAgICAgICAga2V5PWxhbWJkYSB4OiAoeFsxXVsnYnVpbGRlcnMnXS5rZXlzKCksIHhbMF0pKQotICAgIGZvciBzbGF2ZV9uYW1lLCBzbGF2ZV9kYXRhIGluIHNsYXZlczoKLSAgICAgIGZvciBidWlsZGVyX25hbWUgaW4gc2xhdmVfZGF0YVsnYnVpbGRlcnMnXToKLSAgICAgICAgcm93ID0gewotICAgICAgICAgICAgJ21hc3Rlcic6IG1hc3Rlcl9uYW1lLAotICAgICAgICAgICAgJ2J1aWxkZXInOiBidWlsZGVyX25hbWUsCi0gICAgICAgICAgICAnaG9zdG5hbWUnOiBzbGF2ZV9uYW1lLAotICAgICAgICB9Ci0KLSAgICAgICAgaG9zdF9kYXRhID0gc2xhdmVfZGF0YVsnaG9zdCddCi0gICAgICAgIGlmIGhvc3RfZGF0YToKLSAgICAgICAgICBob3N0X2RhdGEgPSBob3N0X2RhdGEuc3BsaXRsaW5lcygpCi0gICAgICAgICAgaWYgbGVuKGhvc3RfZGF0YSkgPiAxOgotICAgICAgICAgICAgZm9yIGxpbmUgaW4gaG9zdF9kYXRhOgotICAgICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICBrZXksIHZhbHVlID0gbGluZS5zcGxpdCgnOiAnKQotICAgICAgICAgICAgICBpZiBrZXkgaW4gX0VYQ0xVREVEX0tFWVM6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgcm93W2tleV0gPSB2YWx1ZQotCi0gICAgICAgICMgTXVuZ2Uga2V5cy4KLSAgICAgICAgcm93ID0ge2tleS5yZXBsYWNlKCdfJywgJyAnKTogdmFsdWUgZm9yIGtleSwgdmFsdWUgaW4gcm93Lml0ZXJpdGVtcygpfQotICAgICAgICBpZiAnb3NmYW1pbHknIGluIHJvdzoKLSAgICAgICAgICByb3dbJ29zIGZhbWlseSddID0gcm93LnBvcCgnb3NmYW1pbHknKQotICAgICAgICBpZiAncHJvZHVjdCBuYW1lJyBub3QgaW4gcm93IGFuZCBzbGF2ZV9uYW1lLnN0YXJ0c3dpdGgoJ3NsYXZlJyk6Ci0gICAgICAgICAgcm93Wydwcm9kdWN0IG5hbWUnXSA9ICdHb29nbGUgQ29tcHV0ZSBFbmdpbmUnCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhyb3cpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgIGxvZ2dpbmcuZXJyb3Iocm93KQotICAgICAgICAgIHJhaXNlCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgbWFpbigpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vbGFiL2tleWNoYWluX3VubG9jay5zaCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9sYWIva2V5Y2hhaW5fdW5sb2NrLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlNTUwZjhkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9sYWIva2V5Y2hhaW5fdW5sb2NrLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyEvYmluL3NoCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0jCi0jIFNjcmlwdCB0byBTU0ggaW50byBhIGxpc3Qgb2YgYm90cyBhbmQgc2V0IHVwIHRoZWlyIGtleWNoYWlucyBmb3IgVGVsZW1ldHJ5LgotIyBodHRwczovL3d3dy5jaHJvbWl1bS5vcmcvZGV2ZWxvcGVycy90ZWxlbWV0cnkvdGVsZW1ldHJ5LW1hYy1rZXljaGFpbi1zZXR1cAotCi1mb3IgaG9zdG5hbWUgaW4gIiRAIgotZG8KLSAgc3NoIC10ICIkaG9zdG5hbWUiICdzZWN1cml0eSB1bmxvY2sta2V5Y2hhaW4gbG9naW4ua2V5Y2hhaW4KLXNlY3VyaXR5IGRlbGV0ZS1nZW5lcmljLXBhc3N3b3JkIC1zICJDaHJvbWUgU2FmZSBTdG9yYWdlIiBsb2dpbi5rZXljaGFpbgotc2VjdXJpdHkgYWRkLWdlbmVyaWMtcGFzc3dvcmQgLWEgQ2hyb21lIC13ICIrTlRjbE92UjR3TE1nUmxMSUw5YkhRPT0iIFwKLSAgLXMgIkNocm9tZSBTYWZlIFN0b3JhZ2UiIC1BIGxvZ2luLmtleWNoYWluJwotZG9uZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL25vZGVfcnVubmVyL25vZGVfcnVubmVyL19faW5pdF9fLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL25vZGVfcnVubmVyL25vZGVfcnVubmVyL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTMzZTA1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9ub2RlX3J1bm5lci9ub2RlX3J1bm5lci9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vbm9kZV9ydW5uZXIvbm9kZV9ydW5uZXIvbm9kZV9iaW5hcmllcy5qc29uIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL25vZGVfcnVubmVyL25vZGVfcnVubmVyL25vZGVfYmluYXJpZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0NTI0OS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vbm9kZV9ydW5uZXIvbm9kZV9ydW5uZXIvbm9kZV9iaW5hcmllcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotewotICAiY29uZmlnX3R5cGUiOiAiQmFzZUNvbmZpZyIsCi0gICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgIm5vZGUiOiB7Ci0gICAgICAiY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlciI6ICJiaW5hcnlfZGVwZW5kZW5jaWVzIiwKLSAgICAgICJjbG91ZF9zdG9yYWdlX2J1Y2tldCI6ICJjaHJvbWl1bS10ZWxlbWV0cnkiLAotICAgICAgImZpbGVfaW5mbyI6IHsKLSAgICAgICAgImxpbnV4X3g4Nl82NCI6IHsKLSAgICAgICAgICAiY2xvdWRfc3RvcmFnZV9oYXNoIjogIjU3NTBlOTY4OTc1ZTdmNWFiOGNiNjk0ZjVlOTJhMzRhODkwZTEyOWQiLAotICAgICAgICAgICJkb3dubG9hZF9wYXRoIjogImJpbi9ub2RlL25vZGUtbGludXg2NC56aXAiLAotICAgICAgICAgICJwYXRoX3dpdGhpbl9hcmNoaXZlIjogIm5vZGUtdjYuNy4wLWxpbnV4LXg2NC9iaW4vbm9kZSIsCi0gICAgICAgICAgInZlcnNpb25faW5fY3MiOiAiNi43LjAiCi0gICAgICAgIH0sCi0gICAgICAgICJtYWNfeDg2XzY0IjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiMWFmN2MyMjFlNTMwMTY1YWY4YTZhYjhmZjdjY2IxZjJkZDU0MDM2ZCIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiYmluL25vZGUvbm9kZS1tYWM2NC56aXAiLAotICAgICAgICAgICJwYXRoX3dpdGhpbl9hcmNoaXZlIjogIm5vZGUtdjYuNy4wLWRhcndpbi14NjQvYmluL25vZGUiLAotICAgICAgICAgICJ2ZXJzaW9uX2luX2NzIjogIjYuNy4wIgotICAgICAgICB9LAotICAgICAgICAid2luX0FNRDY0IjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiMjNmMjFiZmIyZWRmODc0YThiNmJkYjZjMWFjYjQwOGJjN2VkZWNlZCIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiYmluL25vZGUvbm9kZS13aW42NC56aXAiLAotICAgICAgICAgICJwYXRoX3dpdGhpbl9hcmNoaXZlIjogIm5vZGUtdjYuNy4wLXdpbi14NjQvbm9kZS5leGUiLAotICAgICAgICAgICJ2ZXJzaW9uX2luX2NzIjogIjYuNy4wIgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibnBtIjogewotICAgICAgImNsb3VkX3N0b3JhZ2VfYmFzZV9mb2xkZXIiOiAiYmluYXJ5X2RlcGVuZGVuY2llcyIsCi0gICAgICAiY2xvdWRfc3RvcmFnZV9idWNrZXQiOiAiY2hyb21pdW0tdGVsZW1ldHJ5IiwKLSAgICAgICJmaWxlX2luZm8iOiB7Ci0gICAgICAgICJsaW51eF94ODZfNjQiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICI1NzUwZTk2ODk3NWU3ZjVhYjhjYjY5NGY1ZTkyYTM0YTg5MGUxMjlkIiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICJiaW4vbm9kZS9ub2RlLWxpbnV4NjQuemlwIiwKLSAgICAgICAgICAicGF0aF93aXRoaW5fYXJjaGl2ZSI6ICJub2RlLXY2LjcuMC1saW51eC14NjQvbGliL25vZGVfbW9kdWxlcy9ucG0vYmluL25wbS1jbGkuanMiLAotICAgICAgICAgICJ2ZXJzaW9uX2luX2NzIjogIjYuNy4wIgotICAgICAgICB9LAotICAgICAgICAibWFjX3g4Nl82NCI6IHsKLSAgICAgICAgICAiY2xvdWRfc3RvcmFnZV9oYXNoIjogIjFhZjdjMjIxZTUzMDE2NWFmOGE2YWI4ZmY3Y2NiMWYyZGQ1NDAzNmQiLAotICAgICAgICAgICJkb3dubG9hZF9wYXRoIjogImJpbi9ub2RlL25vZGUtbWFjNjQuemlwIiwKLSAgICAgICAgICAicGF0aF93aXRoaW5fYXJjaGl2ZSI6ICJub2RlLXY2LjcuMC1kYXJ3aW4teDY0L2xpYi9ub2RlX21vZHVsZXMvbnBtL2Jpbi9ucG0tY2xpLmpzIiwKLSAgICAgICAgICAidmVyc2lvbl9pbl9jcyI6ICI2LjcuMCIKLSAgICAgICAgfSwKLSAgICAgICAgIndpbl9BTUQ2NCI6IHsKLSAgICAgICAgICAiY2xvdWRfc3RvcmFnZV9oYXNoIjogIjIzZjIxYmZiMmVkZjg3NGE4YjZiZGI2YzFhY2I0MDhiYzdlZGVjZWQiLAotICAgICAgICAgICJkb3dubG9hZF9wYXRoIjogImJpbi9ub2RlL25vZGUtd2luNjQuemlwIiwKLSAgICAgICAgICAicGF0aF93aXRoaW5fYXJjaGl2ZSI6ICJub2RlLXY2LjcuMC13aW4teDY0XFxub2RlX21vZHVsZXNcXG5wbVxcYmluXFxucG0tY2xpLmpzIiwKLSAgICAgICAgICAidmVyc2lvbl9pbl9jcyI6ICI2LjcuMCIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL25vZGVfcnVubmVyL25vZGVfcnVubmVyL25vZGVfdXRpbC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9ub2RlX3J1bm5lci9ub2RlX3J1bm5lci9ub2RlX3V0aWwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZDAwODQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL25vZGVfcnVubmVyL25vZGVfcnVubmVyL25vZGVfdXRpbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotCi1pbXBvcnQgcHlfdXRpbHMKLWZyb20gcHlfdXRpbHMgaW1wb3J0IGJpbmFyeV9tYW5hZ2VyCi1mcm9tIHB5X3V0aWxzIGltcG9ydCBkZXBlbmRlbmN5X3V0aWwKLQotCi1kZWYgX05vZGVCaW5hcmllc0NvbmZpZ1BhdGgoKToKLSAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKAotICAgICAgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLCAnbm9kZV9iaW5hcmllcy5qc29uJykpCi0KLQotY2xhc3MgX05vZGVNYW5hZ2VyKG9iamVjdCk6Ci0gIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICBzZWxmLmJtID0gYmluYXJ5X21hbmFnZXIuQmluYXJ5TWFuYWdlcigKLSAgICAgICAgW19Ob2RlQmluYXJpZXNDb25maWdQYXRoKCldKQotICAgIHNlbGYub3NfbmFtZSA9IGRlcGVuZGVuY3lfdXRpbC5HZXRPU05hbWVGb3JDdXJyZW50RGVza3RvcFBsYXRmb3JtKCkKLSAgICBzZWxmLmFyY2hfbmFtZSA9IGRlcGVuZGVuY3lfdXRpbC5HZXRBcmNoRm9yQ3VycmVudERlc2t0b3BQbGF0Zm9ybSgKLSAgICAgICAgc2VsZi5vc19uYW1lKQotICAgIHNlbGYubm9kZV9wYXRoID0gc2VsZi5ibS5GZXRjaFBhdGgoJ25vZGUnLCBzZWxmLm9zX25hbWUsIHNlbGYuYXJjaF9uYW1lKQotICAgIHNlbGYubnBtX3BhdGggPSBzZWxmLmJtLkZldGNoUGF0aCgnbnBtJywgc2VsZi5vc19uYW1lLCBzZWxmLmFyY2hfbmFtZSkKLQotICAgIHNlbGYubm9kZV9pbml0aWFsaXplZCA9IEZhbHNlCi0KLSAgZGVmIEluaXROb2RlKHNlbGYpOgotICAgIGlmIHNlbGYubm9kZV9pbml0aWFsaXplZDoKLSAgICAgIHJldHVybiAgIyBTbyB3ZSBvbmx5IGluaXQgb25jZSBwZXIgcnVuCi0gICAgc2VsZi5ub2RlX2luaXRpYWxpemVkID0gVHJ1ZQotICAgIG9sZF9kaXIgPSBvcy5wYXRoLmFic3BhdGgob3MuY3VyZGlyKQotICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgoCi0gICAgICAgIHB5X3V0aWxzLkdldENhdGFwdWx0RGlyKCkpLCAnY29tbW9uJywgJ25vZGVfcnVubmVyJywgJ25vZGVfcnVubmVyJykpCi0gICAgc3VicHJvY2Vzcy5jYWxsKFtzZWxmLm5vZGVfcGF0aCwgc2VsZi5ucG1fcGF0aCwgJ2luc3RhbGwnXSkKLSAgICBvcy5jaGRpcihvbGRfZGlyKQotCi0KLV9OT0RFX01BTkFHRVIgPSBfTm9kZU1hbmFnZXIoKQotCi0KLWRlZiBJbml0Tm9kZSgpOgotICBfTk9ERV9NQU5BR0VSLkluaXROb2RlKCkKLQotCi1kZWYgR2V0Tm9kZVBhdGgoKToKLSAgcmV0dXJuIF9OT0RFX01BTkFHRVIubm9kZV9wYXRoCi0KLQotZGVmIEdldE5vZGVNb2R1bGVzUGF0aCgpOgotICBfTk9ERV9NQU5BR0VSLkluaXROb2RlKCkKLSAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vZGVfbW9kdWxlcycpKQotICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgIyBFc2NhcGUgcGF0aCBvbiBXaW5kb3dzIGJlY2F1c2UgaXQncyB2ZXJ5IGxvbmcgYW5kIG11c3QgYmUgcGFzc2VkIHRvIE5URlMuCi0gICAgcGF0aCA9IHUnXFxcXD9cXCcgKyBwYXRoCi0gIHJldHVybiBwYXRoCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vbm9kZV9ydW5uZXIvbm9kZV9ydW5uZXIvcGFja2FnZS5qc29uIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL25vZGVfcnVubmVyL25vZGVfcnVubmVyL3BhY2thZ2UuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdkMDMyNS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vbm9kZV9ydW5uZXIvbm9kZV9ydW5uZXIvcGFja2FnZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotewotICAibmFtZSI6ICJjYXRhcHVsdF9iYXNlIiwKLSAgInZlcnNpb24iOiAiMS4wLjAiLAotICAiZGVzY3JpcHRpb24iOiAiQ2F0YXB1bHQgcHJvamVjdCBiYXNlIiwKLSAgInJlcG9zaXRvcnkiOiB7Ci0gICAgInR5cGUiOiAiZ2l0IiwKLSAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jYXRhcHVsdC1wcm9qZWN0L2NhdGFwdWx0L3RyZWUvbWFzdGVyL2NhdGFwdWx0X2Jhc2UiCi0gIH0sCi0gICJtYWluIjogImluZGV4LmpzIiwKLSAgInNjcmlwdHMiOiB7Ci0gICAgInRlc3QiOiAiZWNobyBcIkVycm9yOiBubyB0ZXN0IHNwZWNpZmllZFwiICYmIGV4aXQgMSIKLSAgfSwKLSAgImF1dGhvciI6ICJUaGUgQ2hyb21pdW0gQXV0aG9ycyIsCi0gICJsaWNlbnNlIjogIkJTRC0yLUNsYXVzZSIsCi0gICJneXBmaWxlIjogZmFsc2UsCi0gICJwcml2YXRlIjogdHJ1ZSwKLSAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAiZXNsaW50IjogIl4zLjE0LjEiLAotICAgICJlc2xpbnQtY29uZmlnLWdvb2dsZSI6ICJeMC42LjAiLAotICAgICJlc2xpbnQtcGx1Z2luLWh0bWwiOiAiXjIuMC4wIgotICB9Ci19CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvUkVBRE1FLnR4dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjBkMzNkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9SRUFETUUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1weV90cmFjZV9ldmVudCBhbGxvd3MgbG93LW92ZXJoZWFkIGluc3RydW1lbnRhdGlvbiBvZiBhIG11bHRpLXRocmVhZGVkLAotbXVsdGktcHJvY2VzcyBhcHBsaWNhdGlvbiBpbiBvcmRlciB0byBzdHVkeSBpdHMgZ2xvYmFsIHBlcmZvcm1hbmNlCi1jaGFyYWN0ZXJpc3RpY3MuIEl0IHVzZXMgdGhlIHRyYWNlIGV2ZW50IGZvcm1hdCB1c2VkIGluIENocm9taXVtL0Nocm9tZSdzCi1hYm91dDp0cmFjaW5nIHN5c3RlbS4KLQotVHJhY2UgZmlsZXMgZ2VuZXJhdGVkIGJ5IHB5X3RyYWNlX2V2ZW50IGNhbiBiZSB2aWV3ZWQgYW5kIG1hbmlwdWxhdGVkIGJ5Ci10cmFjZV9ldmVudF92aWV3ZXIuCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvX19pbml0X18ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YjY2MzAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotU0NSSVBUX0RJUiA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQotUFlfVVRJTFMgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKFNDUklQVF9ESVIsICcuLicsICcuLicsICdweV91dGlscycpKQotc3lzLnBhdGguYXBwZW5kKFBZX1VUSUxTKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L3J1bl90ZXN0cyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC9ydW5fdGVzdHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDdmOTY3M2QuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L3J1bl90ZXN0cworKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCBvcwotaW1wb3J0IHBsYXRmb3JtCi1pbXBvcnQgcmUKLWltcG9ydCBzeXMKLWltcG9ydCB0eXBlcwotaW1wb3J0IHRyYWNlYmFjawotaW1wb3J0IHVuaXR0ZXN0Ci0KLQotZGVmIGRpc2NvdmVyKGRpciwgZmlsdGVycyk6Ci0gIGlmIGhhc2F0dHIodW5pdHRlc3QuVGVzdExvYWRlciwgJ2Rpc2NvdmVyJyk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RMb2FkZXIoKS5kaXNjb3ZlcihkaXIsICcqJykKLQotICAjIHBvb3IgbWFucyB1bml0dGVzdC5kaXNjb3ZlcgotICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgc3Vic3VpdGVzID0gW10KLQotICBmb3IgKGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMpIGluIG9zLndhbGsoZGlyKToKLSAgICBmb3IgZmlsZW5hbWUgaW4gW3ggZm9yIHggaW4gZmlsZW5hbWVzIGlmIHJlLm1hdGNoKCcuKl90ZXN0XC5weSQnLCB4KV06Ci0gICAgICBpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCcuJykgb3IgZmlsZW5hbWUuc3RhcnRzd2l0aCgnXycpOgotICAgICAgICBjb250aW51ZQotICAgICAgZnFuID0gZGlycGF0aC5yZXBsYWNlKAotICAgICAgICAgICcvJywgJy4nKSArICcuJyArIHJlLm1hdGNoKCcoLispXC5weSQnLCBmaWxlbmFtZSkuZ3JvdXAoMSkKLQotICAgICAgIyBsb2FkIHRoZSB0ZXN0Ci0gICAgICB0cnk6Ci0gICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18oZnFuLGZyb21saXN0PVtUcnVlXSkKLSAgICAgIGV4Y2VwdDoKLSAgICAgICAgcHJpbnQgIldoaWxlIGltcG9ydGluZyBbJXNdXG4iICUgZnFuCi0gICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQotICAgICAgICBjb250aW51ZQotCi0gICAgICBkZWYgdGVzdF9pc19zZWxlY3RlZChuYW1lKToKLSAgICAgICAgZm9yIGYgaW4gZmlsdGVyczoKLSAgICAgICAgICBpZiByZS5zZWFyY2goZixuYW1lKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICBpZiBoYXNhdHRyKG1vZHVsZSwgJ3N1aXRlJyk6Ci0gICAgICAgIGJhc2Vfc3VpdGUgPSBtb2R1bGUuc3VpdGUoKQotICAgICAgZWxzZToKLSAgICAgICAgYmFzZV9zdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSkKLSAgICAgIG5ld19zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgICBmb3IgdCBpbiBiYXNlX3N1aXRlOgotICAgICAgICBpZiBpc2luc3RhbmNlKHQsIHVuaXR0ZXN0LlRlc3RTdWl0ZSk6Ci0gICAgICAgICAgZm9yIGkgaW4gdDoKLSAgICAgICAgICAgIGlmIHRlc3RfaXNfc2VsZWN0ZWQoaS5pZCgpKToKLSAgICAgICAgICAgICAgbmV3X3N1aXRlLmFkZFRlc3QoaSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHQsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICBpZiB0ZXN0X2lzX3NlbGVjdGVkKHQuaWQoKSk6Ci0gICAgICAgICAgICBuZXdfc3VpdGUuYWRkVGVzdCh0KQotICAgICAgICBlbHNlOgotICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiV3RmLCBleHBlY3RlZCBUZXN0U3VpdGUgb3IgVGVzdENhc2UsIGdvdCAlcyIgJSB0KQotCi0gICAgICBpZiBuZXdfc3VpdGUuY291bnRUZXN0Q2FzZXMoKToKLSAgICAgICAgc3Vic3VpdGVzLmFwcGVuZChuZXdfc3VpdGUpCi0KLSAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZShzdWJzdWl0ZXMpCi0KLQotZGVmIG1haW4oKToKLSAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKLSAgcGFyc2VyLmFkZF9vcHRpb24oCi0gICAgICAnLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdjb3VudCcsIGRlZmF1bHQ9MCwKLSAgICAgIGhlbHA9J0luY3JlYXNlIHZlcmJvc2l0eSBsZXZlbCAocmVwZWF0IGFzIG5lZWRlZCknKQotICBwYXJzZXIuYWRkX29wdGlvbignLS1kZWJ1ZycsIGRlc3Q9J2RlYnVnJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgaGVscD0nQnJlYWsgaW50byBwZGIgd2hlbiBhbiBhc3NlcnRpb24gZmFpbHMnKQotICBwYXJzZXIuYWRkX29wdGlvbignLS1pbmNyZW1lbnRhbCcsIGRlc3Q9J2luY3JlbWVudGFsJywgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0nUnVuIHRlc3RzIG9uZSBhdCBhIHRpbWUuJykKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy0tc3RvcCcsIGRlc3Q9J3N0b3Bfb25fZXJyb3InLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSdTdG9wIHJ1bm5pbmcgdGVzdHMgb24gZXJyb3IuJykKLSAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQotCi0gIGlmIG9wdGlvbnMudmVyYm9zZSA+PSAyOgotICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5ERUJVRykKLSAgZWxpZiBvcHRpb25zLnZlcmJvc2U6Ci0gICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLklORk8pCi0gIGVsc2U6Ci0gICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLldBUk5JTkcpCi0KLSAgIyBpbnN0YWxsIGhvb2sgb24gc2V0X3RyYWNlIGlmIC0tZGVidWcKLSAgaWYgb3B0aW9ucy5kZWJ1ZzoKLSAgICBpbXBvcnQgZXhjZXB0aW9ucwotICAgIGNsYXNzIERlYnVnZ2luZ0Fzc2VydGlvbkVycm9yKGV4Y2VwdGlvbnMuQXNzZXJ0aW9uRXJyb3IpOgotICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgZXhjZXB0aW9ucy5Bc3NlcnRpb25FcnJvci5fX2luaXRfXyhzZWxmLCAqYXJncykKLSAgICAgICAgcHJpbnQgIkFzc2VydGlvbiBmYWlsZWQsIGVudGVyaW5nIFBEQi4uLiIKLSAgICAgICAgaW1wb3J0IHBkYgotICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ19nZXRmcmFtZScpOgotICAgICAgICAgIHBkYi5QZGIoKS5zZXRfdHJhY2Uoc3lzLl9nZXRmcmFtZSgpLmZfYmFjay5mX2JhY2spCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcGRiLnNldF90cmFjZSgpCi0gICAgdW5pdHRlc3QuVGVzdENhc2UuZmFpbHVyZUV4Y2VwdGlvbiA9IERlYnVnZ2luZ0Fzc2VydGlvbkVycm9yCi0KLSAgICBkZWYgaG9vaygqYXJncyk6Ci0gICAgICBpbXBvcnQgdHJhY2ViYWNrLCBwZGIKLSAgICAgIHRyYWNlYmFjay5wcmludF9leGNlcHRpb24oKmFyZ3MpCi0gICAgICBwZGIucG0oKQotICAgIHN5cy5leGNlcHRob29rID0gaG9vawotCi0gICAgaW1wb3J0IGJyb3dzZXIKLSAgICBicm93c2VyLmRlYnVnX21vZGUgPSBUcnVlCi0KLSAgZWxzZToKLSAgICBkZWYgaG9vayhleGMsIHZhbHVlLCB0Yik6Ci0gICAgICBpbXBvcnQgdHJhY2ViYWNrCi0gICAgICBpZiBub3Qgc3RyKHZhbHVlKS5zdGFydHN3aXRoKCJfbm9wcmludCIpOgotICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uKGV4YywgdmFsdWUsIHRiKQotICAgICAgaW1wb3J0IHNyYy5tZXNzYWdlX2xvb3AKLSAgICAgIGlmIHNyYy5tZXNzYWdlX2xvb3AuaXNfbWFpbl9sb29wX3J1bm5pbmcoKToKLSAgICAgICAgaWYgbm90IHN0cih2YWx1ZSkuc3RhcnRzd2l0aCgiX25vcHJpbnQiKToKLSAgICAgICAgICBwcmludCAiVW50cmFwcGVkIGV4Y2VwdGlvbiEgRXhpdGluZyBtZXNzYWdlIGxvb3Agd2l0aCBleGNlcHRpb24uIgotICAgICAgICBzcmMubWVzc2FnZV9sb29wLnF1aXRfbWFpbl9sb29wKHF1aXRfd2l0aF9leGNlcHRpb249VHJ1ZSkKLQotICAgIHN5cy5leGNlcHRob29rID0gaG9vawotCi0gICMgbWFrZSBzdXJlIGN3ZCBpcyB0aGUgYmFzZSBkaXJlY3RvcnkhCi0gIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCi0KLSAgaWYgbGVuKGFyZ3MpID4gMDoKLSAgICBzdWl0ZXMgPSBkaXNjb3ZlcigndHJhY2VfZXZlbnRfaW1wbCcsIGFyZ3MpCi0gIGVsc2U6Ci0gICAgc3VpdGVzID0gZGlzY292ZXIoJ3RyYWNlX2V2ZW50X2ltcGwnLCBbJy4qJ10pCi0KLSAgciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKCkKLSAgaWYgbm90IG9wdGlvbnMuaW5jcmVtZW50YWw6Ci0gICAgcmVzID0gci5ydW4oc3VpdGVzKQotICAgIGlmIHJlcy53YXNTdWNjZXNzZnVsKCk6Ci0gICAgICByZXR1cm4gMAotICAgIHJldHVybiAyNTUKLSAgZWxzZToKLSAgICBvayA9IFRydWUKLSAgICBmb3IgcyBpbiBzdWl0ZXM6Ci0gICAgICBpZiBpc2luc3RhbmNlKHMsIHVuaXR0ZXN0LlRlc3RTdWl0ZSk6Ci0gICAgICAgIGZvciB0IGluIHM6Ci0gICAgICAgICAgcHJpbnQgJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJwotICAgICAgICAgIHByaW50ICdSdW5uaW5nICVzJyAlIHN0cih0KQotICAgICAgICAgIHJlcyA9IHIucnVuKHQpCi0gICAgICAgICAgaWYgbm90IHJlcy53YXNTdWNjZXNzZnVsKCk6Ci0gICAgICAgICAgICBvayA9IEZhbHNlCi0gICAgICAgICAgICBpZiBvcHRpb25zLnN0b3Bfb25fZXJyb3I6Ci0gICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIG9rID09IEZhbHNlIGFuZCBvcHRpb25zLnN0b3Bfb25fZXJyb3I6Ci0gICAgICAgICAgYnJlYWsKLSAgICAgIGVsc2U6Ci0gICAgICAgIHJlcyA9IHIucnVuKHMpCi0gICAgICAgIGlmIG5vdCByZXMud2FzU3VjY2Vzc2Z1bCgpOgotICAgICAgICAgIG9rID0gRmFsc2UKLSAgICAgICAgICBpZiBvcHRpb25zLnN0b3Bfb25fZXJyb3I6Ci0gICAgICAgICAgICBicmVhawotICAgIGlmIG9rOgotICAgICAgcmV0dXJuIDAKLSAgICByZXR1cm4gMjU1Ci0KLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L3NldHVwLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L3NldHVwLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjAwNzBhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC9zZXR1cC5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKLXNldHVwKAotICAgIG5hbWU9J3B5X3RyYWNlX2V2ZW50JywKLSAgICBwYWNrYWdlcz1bJ3RyYWNlX2V2ZW50X2ltcGwnXSwKLSAgICB2ZXJzaW9uPScwLjEuMCcsCi0gICAgZGVzY3JpcHRpb249J1BlcmZvcm1hbmNlIHRyYWNpbmcgZm9yIHB5dGhvbicsCi0gICAgYXV0aG9yPSdOYXQgRHVjYScKLSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc0NTk2My4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyODIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotZnJvbSBweV90cmFjZV9ldmVudCBpbXBvcnQgdHJhY2VfdGltZQotCi0KLXIiIiJJbnN0cnVtZW50YXRpb24tYmFzZWQgcHJvZmlsaW5nIGZvciBQeXRob24uCi0KLXRyYWNlX2V2ZW50IGFsbG93cyB5b3UgdG8gaGFuZC1pbnN0cnVtZW50IHlvdXIgY29kZSB3aXRoIGFyZWFzIG9mIGludGVyZXN0LgotV2hlbiBlbmFibGVkLCB0cmFjZV9ldmVudCBsb2dzIHRoZSBzdGFydCBhbmQgc3RvcCB0aW1lcyBvZiB0aGVzZSBldmVudHMgdG8gYQotbG9nZmlsZS4gVGhlc2UgcmVzdWx0aW5nIGxvZ2ZpbGVzIGNhbiBiZSB2aWV3ZWQgd2l0aCBlaXRoZXIgQ2hyb21lJ3MKLWFib3V0OnRyYWNpbmcgVUkgb3Igd2l0aCB0aGUgc3RhbmRhbG9uZSB0cmFjZV9ldmVudF92aWV3ZXIgYXZhaWxhYmxlIGF0Ci0gIGh0dHA6Ly93d3cuZ2l0aHViLmNvbS9uYXRkdWNhL3RyYWNlX2V2ZW50X3ZpZXdlci8KLQotVG8gdXNlIHRyYWNlIGV2ZW50LCBjYWxsIHRyYWNlX2V2ZW50X2VuYWJsZSBhbmQgc3RhcnQgaW5zdHJ1bWVudGluZyB5b3VyIGNvZGU6Ci0gICBmcm9tIHRyYWNlX2V2ZW50IGltcG9ydCAqCi0KLSAgIGlmICItLXRyYWNlIiBpbiBzeXMuYXJndjoKLSAgICAgdHJhY2VfZW5hYmxlKCJteWZpbGUudHJhY2UiKQotCi0gICBAdHJhY2VkCi0gICBkZWYgZm9vKCk6Ci0gICAgIC4uLgotCi0gICBjbGFzcyBNeUZvbyhvYmplY3QpOgotICAgICBAdHJhY2VkCi0gICAgIGRlZiBiYXIoc2VsZik6Ci0gICAgICAgLi4uCi0KLXRyYWNlX2V2ZW50IHJlY29yZHMgdHJhY2UgZXZlbnRzIHRvIGFuIGluLW1lbW9yeSBidWZmZXIuIElmIHlvdXIgYXBwbGljYXRpb24gaXMKLWxvbmcgcnVubmluZyBhbmQgeW91IHdhbnQgdG8gc2VlIHRoZSByZXN1bHRzIG9mIGEgdHJhY2UgYmVmb3JlIGl0IGV4aXRzLCB5b3UgY2FuCi1jYWxsIHRyYWNlX2ZsdXNoIHRvIHdyaXRlIGFueSBpbi1tZW1vcnkgZXZlbnRzIHRvIGRpc2suCi0KLVRvIGhlbHAgaW50cmVncmF0aW5nIHRyYWNlX2V2ZW50IGludG8gZXhpc3RpbmcgY29kZWJhc2VzIHRoYXQgZG9udCB3YW50IHRvIGFkZAotdHJhY2VfZXZlbnQgYXMgYSBkZXBlbmRhbmN5LCB0cmFjZV9ldmVudCBpcyBzcGxpdCBpbnRvIGFuIGltcG9ydCBzaGltCi0odHJhY2VfZXZlbnQucHkpIGFuZCBhbiBpbXBsZW1lbnRhaXRvbiAodHJhY2VfZXZlbnRfaW1wbC8qKS4gWW91IGNhbiBjb3B5IHRoZQotc2hpbSwgdHJhY2VfZXZlbnQucHksIGRpcmVjdGx5IGludG8geW91ciBpbmNsdWRpbmcgY29kZWJhc2UuIElmIHRoZQotdHJhY2VfZXZlbnRfaW1wbCBpcyBub3QgZm91bmQsIHRoZSBzaGltIHdpbGwgc2ltcGx5IG5vb3AuCi0KLXRyYWNlX2V2ZW50IGlzIHNhZmUgd2l0aCByZWdhcmQgdG8gUHl0aG9uIHRocmVhZHMuIFNpbXBseSB0cmFjZSBhcyB5b3Ugbm9ybWFsbHkKLXdvdWxkIGFuZCBlYWNoIHRocmVhZCdzIHRpbWluZyB3aWxsIHNob3cgdXAgaW4gdGhlIHRyYWNlIGZpbGUuCi0KLU11bHRpcGxlIHByb2Nlc3NlcyBjYW4gc2FmZWx5IG91dHB1dCBpbnRvIGEgc2luZ2xlIHRyYWNlX2V2ZW50IGxvZ2ZpbGUuIElmIHlvdQotZm9yayBhZnRlciBlbmFibGluZyB0cmFjaW5nLCB0aGUgY2hpbGQgcHJvY2VzcyB3aWxsIGNvbnRpbnVlIG91dHB1dHRpbmcgdG8gdGhlCi1sb2dmaWxlLiBVc2Ugb2YgdGhlIG11bHRpcHJvY2Vzc2luZyBtb2R1bGUgd2lsbCB3b3JrIGFzIHdlbGwuIEluIGJvdGggY2FzZXMsCi1ob3dldmVyLCBub3RlIHRoYXQgZGlzYWJsaW5nIHRyYWNpbmcgaW4gdGhlIHBhcmVudCBwcm9jZXNzIHdpbGwgbm90IHN0b3AgdHJhY2luZwotaW4gdGhlIGNoaWxkIHByb2Nlc3Nlcy4KLSIiIgotCi10cnk6Ci0gIGltcG9ydCB0cmFjZV9ldmVudF9pbXBsCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gIHRyYWNlX2V2ZW50X2ltcGwgPSBOb25lCi0KLQotZGVmIHRyYWNlX2Nhbl9lbmFibGUoKToKLSAgIiIiCi0gIFJldHVybnMgVHJ1ZSBpZiBhIHRyYWNlX2V2ZW50X2ltcGwgd2FzIGZvdW5kLiBJZiBmYWxzZSwKLSAgdHJhY2VfZW5hYmxlIHdpbGwgZmFpbC4gUmVndWxhciB0cmFjaW5nIG1ldGhvZHMsIGluY2x1ZGluZwotICB0cmFjZV9iZWdpbiBhbmQgdHJhY2VfZW5kLCB3aWxsIHNpbXBseSBiZSBuby1vcHMuCi0gICIiIgotICByZXR1cm4gdHJhY2VfZXZlbnRfaW1wbCAhPSBOb25lCi0KLSMgRGVmYXVsdCBUcmFjZWRNZXRhQ2xhc3MgdG8gdHlwZSBpbmNhc2UgdHJhY2VfZXZlbnRfaW1wbCBpcyBub3QgZGVmaW5lZC4KLSMgVGhpcyBpcyB0byBhdm9pZCBleGNlcHRpb24gZHVyaW5nIGltcG9ydCB0aW1lIHNpbmNlIFRyYWNlZE1ldGFDbGFzcyB0eXBpY2FsbHkKLSMgdXNlZCBpbiBjbGFzcyBkZWZpbml0aW9uIHNjb3BlLgotVHJhY2VkTWV0YUNsYXNzID0gdHlwZQotCi1pZiB0cmFjZV9ldmVudF9pbXBsOgotICBpbXBvcnQgdGltZQotCi0KLSAgZGVmIHRyYWNlX2lzX2VuYWJsZWQoKToKLSAgICByZXR1cm4gdHJhY2VfZXZlbnRfaW1wbC50cmFjZV9pc19lbmFibGVkKCkKLQotICBkZWYgdHJhY2VfZW5hYmxlKGxvZ2ZpbGUpOgotICAgIHJldHVybiB0cmFjZV9ldmVudF9pbXBsLnRyYWNlX2VuYWJsZShsb2dmaWxlKQotCi0gIGRlZiB0cmFjZV9kaXNhYmxlKCk6Ci0gICAgcmV0dXJuIHRyYWNlX2V2ZW50X2ltcGwudHJhY2VfZGlzYWJsZSgpCi0KLSAgZGVmIHRyYWNlX2ZsdXNoKCk6Ci0gICAgdHJhY2VfZXZlbnRfaW1wbC50cmFjZV9mbHVzaCgpCi0KLSAgZGVmIHRyYWNlX2JlZ2luKG5hbWUsICoqa3dhcmdzKToKLSAgICBhcmdzX3RvX2xvZyA9IHtrZXk6IHJlcHIodmFsdWUpIGZvciBrZXksIHZhbHVlIGluIGt3YXJncy5pdGVyaXRlbXMoKX0KLSAgICB0cmFjZV9ldmVudF9pbXBsLmFkZF90cmFjZV9ldmVudCgiQiIsIHRyYWNlX3RpbWUuTm93KCksICJweXRob24iLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NfdG9fbG9nKQotCi0gIGRlZiB0cmFjZV9lbmQobmFtZSk6Ci0gICAgdHJhY2VfZXZlbnRfaW1wbC5hZGRfdHJhY2VfZXZlbnQoIkUiLCB0cmFjZV90aW1lLk5vdygpLCAicHl0aG9uIiwgbmFtZSkKLQotICBkZWYgdHJhY2Vfc2V0X3RocmVhZF9uYW1lKHRocmVhZF9uYW1lKToKLSAgICB0cmFjZV9ldmVudF9pbXBsLmFkZF90cmFjZV9ldmVudCgiTSIsIHRyYWNlX3RpbWUuTm93KCksICJfX21ldGFkYXRhIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhyZWFkX25hbWUiLCB7Im5hbWUiOiB0aHJlYWRfbmFtZX0pCi0KLSAgZGVmIHRyYWNlKG5hbWUsICoqa3dhcmdzKToKLSAgICByZXR1cm4gdHJhY2VfZXZlbnRfaW1wbC50cmFjZShuYW1lLCAqKmt3YXJncykKLQotICBUcmFjZWRNZXRhQ2xhc3MgPSB0cmFjZV9ldmVudF9pbXBsLlRyYWNlZE1ldGFDbGFzcwotCi0gIGRlZiB0cmFjZWQoZm4pOgotICAgIHJldHVybiB0cmFjZV9ldmVudF9pbXBsLnRyYWNlZChmbikKLQotICBkZWYgY2xvY2tfc3luYyhzeW5jX2lkLCBpc3N1ZV90cz1Ob25lKToKLSAgICAnJycKLSAgICBBZGQgYSBjbG9jayBzeW5jIGV2ZW50IHRvIHRoZSB0cmFjZSBsb2cuCi0KLSAgICBBcmdzOgotICAgICAgc3luY19pZDogSUQgb2YgY2xvY2sgc3luYyBldmVudC4KLSAgICAgIGlzc3VlX3RzOiBUaW1lIGF0IHdoaWNoIGNsb2NrIHN5bmMgd2FzIGlzc3VlZCwgaW4gbWljcm9zZWNvbmRzLgotICAgICcnJwotICAgIHRpbWVfc3RhbXAgPSB0cmFjZV90aW1lLk5vdygpCi0gICAgYXJnc190b19sb2cgPSB7J3N5bmNfaWQnOiBzeW5jX2lkfQotICAgIGlmIGlzc3VlX3RzOiAjIElzc3VlciBpZiBpc3N1ZV90cyBpcyBzZXQsIGVsc2UgcmVjaWV2ZXIuCi0gICAgICBhc3NlcnQgaXNzdWVfdHMgPD0gdGltZV9zdGFtcAotICAgICAgYXJnc190b19sb2dbJ2lzc3VlX3RzJ10gPSBpc3N1ZV90cwotICAgIHRyYWNlX2V2ZW50X2ltcGwuYWRkX3RyYWNlX2V2ZW50KAotICAgICAgICAiYyIsIHRpbWVfc3RhbXAsICJweXRob24iLCAiY2xvY2tfc3luYyIsIGFyZ3NfdG9fbG9nKQotCi0gIGRlZiBpc190cmFjaW5nX2NvbnRyb2xsYWJsZSgpOgotICAgIHJldHVybiB0cmFjZV9ldmVudF9pbXBsLmlzX3RyYWNpbmdfY29udHJvbGxhYmxlKCkKLQotZWxzZToKLSAgaW1wb3J0IGNvbnRleHRsaWIKLQotICBkZWYgdHJhY2VfZW5hYmxlKCk6Ci0gICAgcmFpc2UgVHJhY2VFeGNlcHRpb24oCi0gICAgICAgICJDYW5ub3QgZW5hYmxlIHRyYWNlX2V2ZW50LiBObyB0cmFjZV9ldmVudF9pbXBsIG1vZHVsZSBmb3VuZC4iKQotCi0gIGRlZiB0cmFjZV9kaXNhYmxlKCk6Ci0gICAgcGFzcwotCi0gIGRlZiB0cmFjZV9pc19lbmFibGVkKCk6Ci0gICAgcmV0dXJuIEZhbHNlCi0KLSAgZGVmIHRyYWNlX2ZsdXNoKCk6Ci0gICAgcGFzcwotCi0gIGRlZiB0cmFjZV9iZWdpbihuYW1lLCAqKmt3YXJncyk6Ci0gICAgZGVsIG5hbWUgIyB1bnVzZWQuCi0gICAgZGVsIGt3YXJncyAjIHVudXNlZC4KLSAgICBwYXNzCi0KLSAgZGVmIHRyYWNlX2VuZChuYW1lKToKLSAgICBkZWwgbmFtZSAjIHVudXNlZC4KLSAgICBwYXNzCi0KLSAgZGVmIHRyYWNlX3NldF90aHJlYWRfbmFtZSh0aHJlYWRfbmFtZSk6Ci0gICAgZGVsIHRocmVhZF9uYW1lICMgdW51c2VkLgotICAgIHBhc3MKLQotICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotICBkZWYgdHJhY2UobmFtZSwgKiprd2FyZ3MpOgotICAgIGRlbCBuYW1lICMgdW51c2VkCi0gICAgZGVsIGt3YXJncyAjIHVudXNlZAotICAgIHlpZWxkCi0KLSAgZGVmIHRyYWNlZChmbik6Ci0gICAgcmV0dXJuIGZuCi0KLSAgZGVmIGNsb2NrX3N5bmMoc3luY19pZCwgaXNzdWVfdHM9Tm9uZSk6Ci0gICAgZGVsIHN5bmNfaWQgIyB1bnVzZWQuCi0gICAgcGFzcwotCi0gIGRlZiBpc190cmFjaW5nX2NvbnRyb2xsYWJsZSgpOgotICAgIHJldHVybiBGYWxzZQotCi10cmFjZV9lbmFibGUuX19kb2NfXyA9ICIiIkVuYWJsZXMgdHJhY2luZy4KLQotICBPbmNlIGVuYWJsZWQsIHRoZSBlbmFibGVkIGJpdCBwcm9wYWdhdGVzIHRvIGZvcmtlZCBwcm9jZXNzZXMgYW5kCi0gIG11bHRpcHJvY2Vzc2luZyBzdWJwcm9jZXNzZXMuIFJlZ3VsYXIgY2hpbGQgcHJvY2Vzc2VzLCBlLmcuIHRob3NlIGNyZWF0ZWQgdmlhCi0gIG9zLnN5c3RlbS9wb3Blbiwgb3Igc3VicHJvY2Vzcy5Qb3BlbiBpbnN0YW5jZXMsIHdpbGwgbm90IGdldCB0cmFjZWQuIFlvdSBjYW4sCi0gIGhvd2V2ZXIsIGVuYWJsZSB0cmFjaW5nIG9uIHRob3NlIHN1YnByb2Nlc3MgbWFudWFsbHkuCi0KLSAgVHJhY2UgZmlsZXMgYXJlIG11bHRpcHJvY2VzcyBzYWZlLCBzbyB5b3UgY2FuIGhhdmUgbXVsdGlwbGUgcHJvY2Vzc2VzCi0gIG91dHB1dHRpbmcgdG8gdGhlIHNhbWUgdHJhY2Vsb2cgYXQgb25jZS4KLQotICBsb2dfZmlsZSBjYW4gYmUgb25lIG9mIHRocmVlIHRoaW5nczoKLQotICAgIE5vbmU6IGEgbG9nZmlsZSBpcyBvcGVuZWQgYmFzZWQgb24gc3lzW2FyZ3ZdLCBuYW1lbHkKLSAgICAgICAgICAiLi8iICsgc3lzLmFyZ3ZbMF0gKyAiLmpzb24iCi0KLSAgICBzdHJpbmc6IGEgbG9nZmlsZSBvZiB0aGUgZ2l2ZW4gbmFtZSBpcyBvcGVuZWQuCi0KLSAgICBmaWxlLWxpa2Ugb2JqZWN0OiB0aGUgZmlsZW5vKCkgaXMgaXMgdXNlZC4gVGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yCi0gICAgICAgICAgICAgICAgICAgICAgbXVzdCBzdXBwb3J0IGZjbnRsLmxvY2tmKCkgb3BlcmF0aW9ucy4KLSAgIiIiCi0KLXRyYWNlX2Rpc2FibGUuX19kb2NfXyA9ICIiIkRpc2FibGVzIHRyYWNpbmcsIGlmIGVuYWJsZWQuCi0KLSAgV2lsbCBub3QgZGlzYWJsZSB0cmFjaW5nIG9uIGFueSBleGlzdGluZyBjaGlsZCBwcm9jZXNlcyB0aGF0IHdlcmUgZm9ya2VkCi0gIGZyb20gdGhpcyBwcm9jZXNzLiBZb3UgbXVzdCBkaXNhYmxlIHRoZW0geW91cnNlbGYuCi0gICIiIgotCi10cmFjZV9mbHVzaC5fX2RvY19fID0gIiIiRmx1c2hlcyBhbnkgY3VycmVudGx5LXJlY29yZGVkIHRyYWNlIGRhdGEgdG8gZGlzay4KLQotICB0cmFjZV9ldmVudCByZWNvcmRzIHRyYWNlcyBpbnRvIGFuIGluLW1lbW9yeSBidWZmZXIgZm9yIGVmZmljaWVuY3kuIEZsdXNoaW5nCi0gIGlzIG9ubHkgZG9uZSBhdCBwcm9jZXNzIGV4aXQgb3Igd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCi0gICIiIgotCi10cmFjZV9pc19lbmFibGVkLl9fZG9jX18gPSAiIiJSZXR1cm5zIHdoZXRoZXIgdHJhY2luZyBpcyBlbmFibGVkLgotICAiIiIKLQotdHJhY2VfYmVnaW4uX19kb2NfXyA9ICIiIlJlY29yZHMgdGhlIGJlZ2lubmluZyBvZiBhbiBldmVudCBvZiB0aGUgZ2l2ZW4gbmFtZS4KLQotICBUaGUgYnVpbGRpbmcgYmxvY2sgZm9yIHBlcmZvcm1hbmNlIHRyYWNpbmcuIEEgdHlwaWNhbCBleGFtcGxlIGlzOgotICAgICBmcm9tIHRyYWNlX2V2ZW50IGltcG9ydCAqCi0gICAgIGRlZiBzb21ldGhpbmdfaGVhdnkoKToKLSAgICAgICAgdHJhY2VfYmVnaW4oInNvbWV0aGluZ19oZWF2eSIpCi0KLSAgICAgICAgdHJhY2VfYmVnaW4oInJlYWQiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgbGluZXMgPSBvcGVuKCkucmVhZGxpbmVzKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICB0cmFjZV9lbmQoInJlYWQiKQotCi0gICAgICAgIHRyYWNlX2JlZ2luKCJwYXJzZSIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICBwYXJzZShsaW5lcykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICB0cmFjZV9lbmQoInBhcnNlIikKLQotICAgICAgICB0cmFjZV9lbmQoInNvbWV0aGluZ19oZWF2eSIpCi0KLSAgTm90ZSB0aGF0IGEgdHJhY2VfZW5kIGNhbGwgbXVzdCBiZSBpc3N1ZWQgZm9yIGV2ZXJ5IHRyYWNlX2JlZ2luIGNhbGwuIFdoZW4KLSAgdHJhY2luZyBhcm91bmQgYmxvY2tzIHRoYXQgbWlnaHQgdGhyb3cgZXhjZXB0aW9ucywgeW91IHNob3VsZCB1c2UgdGhlIHRyYWNlCi0gIGZ1bmN0aW9uLCBvciBhIHRyeS1maW5hbGx5IHBhdHRlcm4gdG8gZW5zdXJlIHRoYXQgdGhlIHRyYWNlX2VuZCBtZXRob2QgaXMKLSAgY2FsbGVkLgotCi0gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIEB0cmFjZWQgZGVjb3JhdG9yIGZvciBhIHNpbXBsZXIgd2F5IHRvCi0gIGluc3RydW1lbnQgZnVuY3Rpb25zIGFuZCBtZXRob2RzLgotICAiIiIKLQotdHJhY2VfZW5kLl9fZG9jX18gPSAiIiJSZWNvcmRzIHRoZSBlbmQgb2YgYW4gZXZlbnQgb2YgdGhlIGdpdmVuIG5hbWUuCi0KLSAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0cmFjZV9iZWdpbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotICBNYWtlIHN1cmUgdG8gaXNzdWUgYSB0cmFjZV9lbmQgZm9yIGV2ZXJ5IHRyYWNlX2JlZ2luIGlzc3VlZC4gRmFpbHVyZSB0byBwYWlyCi0gIHRoZXNlIGNhbGxzIHdpbGwgbGVhZCB0byBiaXphcnJlbHkgdGFsbCBsb29raW5nIHRyYWNlcyBpbiB0aGUKLSAgdHJhY2VfZXZlbnRfdmlld2VyIFVJLgotICAiIiIKLQotdHJhY2Vfc2V0X3RocmVhZF9uYW1lLl9fZG9jX18gPSAiIiJTZXRzIHRoZSB0cmFjZSdzIG5hbWUgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4KLSAgIiIiCi0KLXRyYWNlLl9fZG9jX18gPSAiIiJUcmFjZXMgYSBibG9jayBvZiBjb2RlIHVzaW5nIGEgd2l0aCBzdGF0ZW1lbnQuCi0KLSAgRXhhbXBsZSB1c2FnZToKLSAgICBmcm9tIHRyYWNlX2V2ZW50IGltcG9ydCAqCi0gICAgZGVmIHNvbWV0aGluZ19oZWF2eShsaW5lcyk6Ci0gICAgICB3aXRoIHRyYWNlKCJwYXJzZV9saW5lcyIsIGxpbmVzPWxpbmVzKToKLSAgICAgICAgcGFyc2UobGluZXMpCi0KLSAgSWYgdHJhY2luZyBhbiBlbnRpcmUgZnVuY3Rpb24gY2FsbCwgcHJlZmVyIHRoZSBAdHJhY2VkIGRlY29yYXRvci4KLSAgIiIiCi0KLXRyYWNlZC5fX2RvY19fID0gIiIiCi0gIFRyYWNlcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24sIHVzaW5nIHRoZSBmdW5jdGlvbiBuYW1lIGZvciB0aGUgYWN0dWFsIGdlbmVyYXRlZAotICBldmVudC4KLQotICBQcmVmZXIgdGhpcyBkZWNvcmF0b3Igb3ZlciB0aGUgZXhwbGljaXQgdHJhY2VfYmVnaW4gYW5kIHRyYWNlX2VuZCBmdW5jdGlvbnMKLSAgd2hlbmV2ZXIgeW91IGFyZSB0cmFjaW5nIHRoZSBzdGFydCBhbmQgc3RvcCBvZiBhIGZ1bmN0aW9uLiBJdCBhdXRvbWF0aWNhbGx5Ci0gIGlzc3VlcyB0cmFjZV9iZWdpbi9lbmQgZXZlbnRzLCBldmVuIHdoZW4gdGhlIHdyYXBwZWQgZnVuY3Rpb24gdGhyb3dzLgotCi0gIFlvdSBjYW4gYWxzbyBwYXNzIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50IG5hbWVzIHRvIHRyYWNlZCwgYW5kIHRoZSBhcmd1bWVudAotICB2YWx1ZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgdHJhY2UuIEV4YW1wbGUgdXNhZ2U6Ci0gICAgZnJvbSB0cmFjZV9ldmVudCBpbXBvcnQgKgotICAgIEB0cmFjZWQoInVybCIpCi0gICAgZGVmIHNlbmRfcmVxdWVzdCh1cmwpOgotICAgICAgdXJsbGliMi51cmxvcGVuKHVybCkucmVhZCgpCi0gICIiIgotCi1jbG9ja19zeW5jLl9fZG9jX18gPSAiIiIKLSAgSXNzdWVzIGEgY2xvY2sgc3luYyBtYXJrZXIgZXZlbnQuCi0KLSAgQ2xvY2sgc3luYyBtYXJrZXJzIGFyZSB1c2VkIHRvIHN5bmNocm9uaXplIHRoZSBjbG9jayBkb21haW5zIG9mIGRpZmZlcmVudAotICB0cmFjZXMgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIHRvZ2V0aGVyLiBJdCB0YWtlcyBhIHN5bmNfaWQsIGFuZCBpZiBpdCBpcwotICB0aGUgaXNzdWVyIG9mIGEgY2xvY2sgc3luYyBldmVudCBpdCB3aWxsIGFsc28gcmVxdWlyZSBhbiBpc3N1ZV90cy4gVGhlCi0gIGlzc3VlX3RzIGlzIGEgdGltZXN0YW1wIGZyb20gd2hlbiB0aGUgY2xvY2tzeW5jIHdhcyBmaXJzdCBpc3N1ZWQuIFRoaXMgaXMgdXNlZAotICB0byBjYWxjdWxhdGUgdGhlIHRpbWUgZGlmZmVyZW5jZSBiZXR3ZWVuIGNsb2NrIGRvbWFpbnMuCi0gICIiIgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50X2ltcGwvX19pbml0X18ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfaW1wbC9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI1MGUwMy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfaW1wbC9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotZnJvbSBsb2cgaW1wb3J0ICoKLWZyb20gZGVjb3JhdG9ycyBpbXBvcnQgKgotZnJvbSBtZXRhX2NsYXNzIGltcG9ydCAqCi1pbXBvcnQgbXVsdGlwcm9jZXNzaW5nX3NoaW0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsL2RlY29yYXRvcnMucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfaW1wbC9kZWNvcmF0b3JzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzc1M2YxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsL2RlY29yYXRvcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi1pbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IGluc3BlY3QKLWltcG9ydCB0aW1lCi1pbXBvcnQgZnVuY3Rvb2xzCi0KLWltcG9ydCBsb2cKLWZyb20gcHlfdHJhY2VfZXZlbnQgaW1wb3J0IHRyYWNlX3RpbWUKLQotCi1AY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotZGVmIHRyYWNlKG5hbWUsICoqa3dhcmdzKToKLSAgY2F0ZWdvcnkgPSAicHl0aG9uIgotICBzdGFydCA9IHRyYWNlX3RpbWUuTm93KCkKLSAgYXJnc190b19sb2cgPSB7a2V5OiByZXByKHZhbHVlKSBmb3Iga2V5LCB2YWx1ZSBpbiBrd2FyZ3MuaXRlcml0ZW1zKCl9Ci0gIGxvZy5hZGRfdHJhY2VfZXZlbnQoIkIiLCBzdGFydCwgY2F0ZWdvcnksIG5hbWUsIGFyZ3NfdG9fbG9nKQotICB0cnk6Ci0gICAgeWllbGQKLSAgZmluYWxseToKLSAgICBlbmQgPSB0cmFjZV90aW1lLk5vdygpCi0gICAgbG9nLmFkZF90cmFjZV9ldmVudCgiRSIsIGVuZCwgY2F0ZWdvcnksIG5hbWUpCi0KLWRlZiB0cmFjZWQoKmFyZ3MpOgotICBkZWYgZ2V0X3dyYXBwZXIoZnVuYyk6Ci0gICAgaWYgaW5zcGVjdC5pc2dlbmVyYXRvcmZ1bmN0aW9uKGZ1bmMpOgotICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDYW4gbm90IHRyYWNlIGdlbmVyYXRvcnMuIikKLQotICAgIGNhdGVnb3J5ID0gInB5dGhvbiIKLQotICAgIGFyZ19zcGVjID0gaW5zcGVjdC5nZXRhcmdzcGVjKGZ1bmMpCi0gICAgaXNfbWV0aG9kID0gYXJnX3NwZWMuYXJncyBhbmQgYXJnX3NwZWMuYXJnc1swXSA9PSAic2VsZiIKLQotICAgIGRlZiBhcmdfc3BlY190dXBsZShuYW1lKToKLSAgICAgIGFyZ19pbmRleCA9IGFyZ19zcGVjLmFyZ3MuaW5kZXgobmFtZSkKLSAgICAgIGRlZmF1bHRzX2xlbmd0aCA9IGxlbihhcmdfc3BlYy5kZWZhdWx0cykgaWYgYXJnX3NwZWMuZGVmYXVsdHMgZWxzZSAwCi0gICAgICBkZWZhdWx0X2luZGV4ID0gYXJnX2luZGV4ICsgZGVmYXVsdHNfbGVuZ3RoIC0gbGVuKGFyZ19zcGVjLmFyZ3MpCi0gICAgICBpZiBkZWZhdWx0X2luZGV4ID49IDA6Ci0gICAgICAgIGRlZmF1bHQgPSBhcmdfc3BlYy5kZWZhdWx0c1tkZWZhdWx0X2luZGV4XQotICAgICAgZWxzZToKLSAgICAgICAgZGVmYXVsdCA9IE5vbmUKLSAgICAgIHJldHVybiAobmFtZSwgYXJnX2luZGV4LCBkZWZhdWx0KQotCi0gICAgYXJnc190b19sb2cgPSBtYXAoYXJnX3NwZWNfdHVwbGUsIGFyZ19uYW1lcykKLQotICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKLSAgICBkZWYgdHJhY2VkX2Z1bmN0aW9uKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAjIEV2ZXJ5dGhpbmcgb3V0c2lkZSB0cmFjZWRfZnVuY3Rpb24gaXMgZG9uZSBhdCBkZWNvcmF0aW9uLXRpbWUuCi0gICAgICAjIEV2ZXJ5dGhpbmcgaW5zaWRlIHRyYWNlZF9mdW5jdGlvbiBpcyBkb25lIGF0IHJ1bi10aW1lIGFuZCBtdXN0IGJlIGZhc3QuCi0gICAgICBpZiBub3QgbG9nLl9lbmFibGVkOiAgIyBUaGlzIGNoZWNrIG11c3QgYmUgYXQgcnVuLXRpbWUuCi0gICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncykKLQotICAgICAgZGVmIGdldF9hcmdfdmFsdWUobmFtZSwgaW5kZXgsIGRlZmF1bHQpOgotICAgICAgICBpZiBuYW1lIGluIGt3YXJnczoKLSAgICAgICAgICByZXR1cm4ga3dhcmdzW25hbWVdCi0gICAgICAgIGVsaWYgaW5kZXggPCBsZW4oYXJncyk6Ci0gICAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcmV0dXJuIGRlZmF1bHQKLQotICAgICAgaWYgaXNfbWV0aG9kOgotICAgICAgICBuYW1lID0gIiVzLiVzIiAlIChhcmdzWzBdLl9fY2xhc3NfXy5fX25hbWVfXywgZnVuYy5fX25hbWVfXykKLSAgICAgIGVsc2U6Ci0gICAgICAgIG5hbWUgPSAiJXMuJXMiICUgKGZ1bmMuX19tb2R1bGVfXywgZnVuYy5fX25hbWVfXykKLQotICAgICAgIyBCZSBzdXJlIHRvIHJlcHIgYmVmb3JlIGNhbGxpbmcgZnVuYy4gQXJndW1lbnQgdmFsdWVzIG1heSBjaGFuZ2UuCi0gICAgICBhcmdfdmFsdWVzID0gewotICAgICAgICAgIG5hbWU6IHJlcHIoZ2V0X2FyZ192YWx1ZShuYW1lLCBpbmRleCwgZGVmYXVsdCkpCi0gICAgICAgICAgZm9yIG5hbWUsIGluZGV4LCBkZWZhdWx0IGluIGFyZ3NfdG9fbG9nfQotCi0gICAgICBzdGFydCA9IHRyYWNlX3RpbWUuTm93KCkKLSAgICAgIGxvZy5hZGRfdHJhY2VfZXZlbnQoIkIiLCBzdGFydCwgY2F0ZWdvcnksIG5hbWUsIGFyZ192YWx1ZXMpCi0gICAgICB0cnk6Ci0gICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncykKLSAgICAgIGZpbmFsbHk6Ci0gICAgICAgIGVuZCA9IHRyYWNlX3RpbWUuTm93KCkKLSAgICAgICAgbG9nLmFkZF90cmFjZV9ldmVudCgiRSIsIGVuZCwgY2F0ZWdvcnksIG5hbWUpCi0gICAgcmV0dXJuIHRyYWNlZF9mdW5jdGlvbgotCi0gIG5vX2RlY29yYXRvcl9hcmd1bWVudHMgPSBsZW4oYXJncykgPT0gMSBhbmQgY2FsbGFibGUoYXJnc1swXSkKLSAgaWYgbm9fZGVjb3JhdG9yX2FyZ3VtZW50czoKLSAgICBhcmdfbmFtZXMgPSAoKQotICAgIHJldHVybiBnZXRfd3JhcHBlcihhcmdzWzBdKQotICBlbHNlOgotICAgIGFyZ19uYW1lcyA9IGFyZ3MKLSAgICByZXR1cm4gZ2V0X3dyYXBwZXIKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsL2RlY29yYXRvcnNfdGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsL2RlY29yYXRvcnNfdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJiMTNhZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfaW1wbC9kZWNvcmF0b3JzX3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLWltcG9ydCBkZWNvcmF0b3JzCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gdHJhY2VfdGVzdCBpbXBvcnQgVHJhY2VUZXN0Ci0jZnJvbSAudHJhY2VfdGVzdCBpbXBvcnQgVHJhY2VUZXN0Ci0KLWRlZiBnZW5lcmF0b3IoKToKLSAgeWllbGQgMQotICB5aWVsZCAyCi0KLWNsYXNzIERlY29yYXRvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgZGVmIHRlc3RfdHJhY2luZ19vYmplY3RfZmFpbHMoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBsYW1iZGE6IGRlY29yYXRvcnMudHJhY2UoMSkpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBsYW1iZGE6IGRlY29yYXRvcnMudHJhY2UoIiIpKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgbGFtYmRhOiBkZWNvcmF0b3JzLnRyYWNlKFtdKSkKLQotICBkZWYgdGVzdF90cmFjaW5nX2dlbmVyYXRvcnNfZmFpbChzZWxmKToKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIGxhbWJkYTogZGVjb3JhdG9ycy50cmFjZShnZW5lcmF0b3IpKQotCi1jbGFzcyBDbGFzc1RvVGVzdChvYmplY3QpOgotICBAZGVjb3JhdG9ycy50cmFjZWQKLSAgZGVmIG1ldGhvZDEoc2VsZik6Ci0gICAgcmV0dXJuIDEKLQotICBAZGVjb3JhdG9ycy50cmFjZWQKLSAgZGVmIG1ldGhvZDIoc2VsZik6Ci0gICAgcmV0dXJuIDEKLQotQGRlY29yYXRvcnMudHJhY2VkCi1kZWYgdHJhY2VkX2Z1bmMoKToKLSAgcmV0dXJuIDEKLQotY2xhc3MgRGVjb3JhdG9yVGVzdHMoVHJhY2VUZXN0KToKLSAgZGVmIF9nZXRfZGVjb3JhdGVkX21ldGhvZF9uYW1lKHNlbGYsIGYpOgotICAgIHJlcyA9IHNlbGYuZ28oZikKLSAgICBldmVudHMgPSByZXMuZmluZEV2ZW50c09uVGhyZWFkKHJlcy5maW5kVGhyZWFkSWRzKClbMF0pCi0KLSAgICAjIFNhbml0eSBjaGVja3MuCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMiwgbGVuKGV2ZW50cykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoZXZlbnRzWzBdWyJuYW1lIl0sIGV2ZW50c1sxXVsibmFtZSJdKQotICAgIHJldHVybiBldmVudHNbMV1bIm5hbWUiXQotCi0KLSAgZGVmIHRlc3RfZnVuY19uYW1lc193b3JrKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdfX21haW5fXy50cmFjZWRfZnVuYycsCi0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X2RlY29yYXRlZF9tZXRob2RfbmFtZSh0cmFjZWRfZnVuYykpCi0KLSAgZGVmIHRlc3RfbWV0aG9kX25hbWVzX3dvcmsoc2VsZik6Ci0gICAgY3R0ID0gQ2xhc3NUb1Rlc3QoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdDbGFzc1RvVGVzdC5tZXRob2QxJywKLSAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9nZXRfZGVjb3JhdGVkX21ldGhvZF9uYW1lKGN0dC5tZXRob2QxKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscygnQ2xhc3NUb1Rlc3QubWV0aG9kMicsCi0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X2RlY29yYXRlZF9tZXRob2RfbmFtZShjdHQubWV0aG9kMikpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKLSAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsL2xvZy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsL2xvZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ2OWYwOC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfaW1wbC9sb2cucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotaW1wb3J0IGF0ZXhpdAotaW1wb3J0IGpzb24KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHRpbWUKLWltcG9ydCB0aHJlYWRpbmcKLQotZnJvbSBweV90cmFjZV9ldmVudCBpbXBvcnQgdHJhY2VfdGltZQotCi1mcm9tIHB5X3V0aWxzIGltcG9ydCBsb2NrCi0KLQotX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0KLV9lbmFibGVkID0gRmFsc2UKLV9sb2dfZmlsZSA9IE5vbmUKLQotX2N1cl9ldmVudHMgPSBbXSAjIGV2ZW50cyB0aGF0IGhhdmUgeWV0IHRvIGJlIGJ1ZmZlcmVkCi0KLV90bHMgPSB0aHJlYWRpbmcubG9jYWwoKSAjIHRscyB1c2VkIHRvIGRldGVjdCBmb3JraW5nL2V0YwotX2F0ZXhpdF9yZWdzaXRlcmVkX2Zvcl9waWQgPSBOb25lCi0KLV9jb250cm9sX2FsbG93ZWQgPSBUcnVlCi0KLQotY2xhc3MgVHJhY2VFeGNlcHRpb24oRXhjZXB0aW9uKToKLSAgcGFzcwotCi1kZWYgX25vdGUobXNnLCAqYXJncyk6Ci0gIHBhc3MKLSMgIHByaW50ICIlaTogJXMiICUgKG9zLmdldHBpZCgpLCBtc2cpCi0KLQotZGVmIF9sb2NrZWQoZm4pOgotICBkZWYgbG9ja2VkX2ZuKCphcmdzLCoqa3dhcmdzKToKLSAgICBfbG9jay5hY3F1aXJlKCkKLSAgICB0cnk6Ci0gICAgICByZXQgPSBmbigqYXJncywqKmt3YXJncykKLSAgICBmaW5hbGx5OgotICAgICAgX2xvY2sucmVsZWFzZSgpCi0gICAgcmV0dXJuIHJldAotICByZXR1cm4gbG9ja2VkX2ZuCi0KLWRlZiBfZGlzYWxsb3dfdHJhY2luZ19jb250cm9sKCk6Ci0gIGdsb2JhbCBfY29udHJvbF9hbGxvd2VkCi0gIF9jb250cm9sX2FsbG93ZWQgPSBGYWxzZQotCi1kZWYgdHJhY2VfZW5hYmxlKGxvZ19maWxlPU5vbmUpOgotICBfdHJhY2VfZW5hYmxlKGxvZ19maWxlKQotCi1AX2xvY2tlZAotZGVmIF90cmFjZV9lbmFibGUobG9nX2ZpbGU9Tm9uZSk6Ci0gIGdsb2JhbCBfZW5hYmxlZAotICBpZiBfZW5hYmxlZDoKLSAgICByYWlzZSBUcmFjZUV4Y2VwdGlvbigiQWxyZWFkeSBlbmFibGVkIikKLSAgaWYgbm90IF9jb250cm9sX2FsbG93ZWQ6Ci0gICAgcmFpc2UgVHJhY2VFeGNlcHRpb24oIlRyYWNpbmcgY29udHJvbCBub3QgYWxsb3dlZCBpbiBjaGlsZCBwcm9jZXNzZXMuIikKLSAgX2VuYWJsZWQgPSBUcnVlCi0gIGdsb2JhbCBfbG9nX2ZpbGUKLSAgaWYgbG9nX2ZpbGUgPT0gTm9uZToKLSAgICBpZiBzeXMuYXJndlswXSA9PSAnJzoKLSAgICAgIG4gPSAndHJhY2VfZXZlbnQnCi0gICAgZWxzZToKLSAgICAgIG4gPSBzeXMuYXJndlswXQotICAgIGxvZ19maWxlID0gb3BlbigiJXMuanNvbiIgJSBuLCAiYWIiLCBGYWxzZSkKLSAgICBfbm90ZSgidHJhY2VfZXZlbnQ6IHRyYWNlbG9nIG5hbWUgaXMgJXMuanNvbiIgJSBuKQotICBlbGlmIGlzaW5zdGFuY2UobG9nX2ZpbGUsIGJhc2VzdHJpbmcpOgotICAgIF9ub3RlKCJ0cmFjZV9ldmVudDogdHJhY2Vsb2cgbmFtZSBpcyAlcyIgJSBsb2dfZmlsZSkKLSAgICBsb2dfZmlsZSA9IG9wZW4oIiVzIiAlIGxvZ19maWxlLCAiYWIiLCBGYWxzZSkKLSAgZWxpZiBub3QgaGFzYXR0cihsb2dfZmlsZSwgJ2ZpbGVubycpOgotICAgIHJhaXNlIFRyYWNlRXhjZXB0aW9uKAotICAgICAgICAiTG9nIGZpbGUgbXVzdCBiZSBOb25lLCBhIHN0cmluZywgb3IgZmlsZS1saWtlIG9iamVjdCB3aXRoIGEgZmlsZW5vKCkiKQotCi0gIF9sb2dfZmlsZSA9IGxvZ19maWxlCi0gIHdpdGggbG9jay5GaWxlTG9jayhfbG9nX2ZpbGUsIGxvY2suTE9DS19FWCk6Ci0gICAgX2xvZ19maWxlLnNlZWsoMCwgb3MuU0VFS19FTkQpCi0KLSAgICBsYXN0cG9zID0gX2xvZ19maWxlLnRlbGwoKQotICAgIGNyZWF0b3IgPSBsYXN0cG9zID09IDAKLSAgICBpZiBjcmVhdG9yOgotICAgICAgX25vdGUoInRyYWNlX2V2ZW50OiBPcGVuZWQgbmV3IHRyYWNlbG9nLCBsYXN0cG9zPSVpIiwgbGFzdHBvcykKLSAgICAgIF9sb2dfZmlsZS53cml0ZSgnWycpCi0KLSAgICAgIHRpZCA9IHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLmlkZW50Ci0gICAgICBpZiBub3QgdGlkOgotICAgICAgICB0aWQgPSBvcy5nZXRwaWQoKQotICAgICAgeCA9IHsicGgiOiAiTSIsICJjYXRlZ29yeSI6ICJwcm9jZXNzX2FyZ3YiLAotICAgICAgICAgICAicGlkIjogb3MuZ2V0cGlkKCksICJ0aWQiOiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5pZGVudCwKLSAgICAgICAgICAgInRzIjogdHJhY2VfdGltZS5Ob3coKSwKLSAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc19hcmd2IiwgImFyZ3MiOiB7ImFyZ3YiOiBzeXMuYXJndn19Ci0gICAgICBfbG9nX2ZpbGUud3JpdGUoIiVzXG4iICUganNvbi5kdW1wcyh4KSkKLSAgICBlbHNlOgotICAgICAgX25vdGUoInRyYWNlX2V2ZW50OiBPcGVuZWQgZXhpc3RpbmcgdHJhY2Vsb2ciKQotICAgIF9sb2dfZmlsZS5mbHVzaCgpCi0KLUBfbG9ja2VkCi1kZWYgdHJhY2VfZmx1c2goKToKLSAgaWYgX2VuYWJsZWQ6Ci0gICAgX2ZsdXNoKCkKLQotQF9sb2NrZWQKLWRlZiB0cmFjZV9kaXNhYmxlKCk6Ci0gIGdsb2JhbCBfZW5hYmxlZAotICBpZiBub3QgX2NvbnRyb2xfYWxsb3dlZDoKLSAgICByYWlzZSBUcmFjZUV4Y2VwdGlvbigiVHJhY2luZyBjb250cm9sIG5vdCBhbGxvd2VkIGluIGNoaWxkIHByb2Nlc3Nlcy4iKQotICBpZiBub3QgX2VuYWJsZWQ6Ci0gICAgcmV0dXJuCi0gIF9lbmFibGVkID0gRmFsc2UKLSAgX2ZsdXNoKGNsb3NlPVRydWUpCi0KLWRlZiBfZmx1c2goY2xvc2U9RmFsc2UpOgotICBnbG9iYWwgX2xvZ19maWxlCi0gIHdpdGggbG9jay5GaWxlTG9jayhfbG9nX2ZpbGUsIGxvY2suTE9DS19FWCk6Ci0gICAgX2xvZ19maWxlLnNlZWsoMCwgb3MuU0VFS19FTkQpCi0gICAgaWYgbGVuKF9jdXJfZXZlbnRzKToKLSAgICAgIF9sb2dfZmlsZS53cml0ZSgiLFxuIikKLSAgICAgIF9sb2dfZmlsZS53cml0ZSgiLFxuIi5qb2luKFtqc29uLmR1bXBzKGUpIGZvciBlIGluIF9jdXJfZXZlbnRzXSkpCi0gICAgICBkZWwgX2N1cl9ldmVudHNbOl0KLQotICAgIGlmIGNsb3NlOgotICAgICAgIyBXZSBtaWdodCBub3QgYmUgdGhlIG9ubHkgcHJvY2VzcyB3cml0aW5nIHRvIHRoaXMgbG9nZmlsZS4gU28sCi0gICAgICAjIHdlIHdpbGwgc2ltcGx5IGNsb3NlIHRoZSBmaWxlIHJhdGhlciB0aGFuIHdyaXRpZ24gdGhlIHRyYWlsaW5nIF0gdGhhdAotICAgICAgIyBpdCB0ZWNobmljYWxseSByZXF1aXJlcy4gVGhlIHRyYWNlIHZpZXdlciB1bmRlcnN0YW5kcyB0aGF0IHRoaXMgbWF5Ci0gICAgICAjIGhhcHBlbiBhbmQgd2lsbCBpbnNlcnQgYSB0cmFpbGluZyBdIGR1cmluZyBsb2FkaW5nLgotICAgICAgcGFzcwotICAgIF9sb2dfZmlsZS5mbHVzaCgpCi0KLSAgaWYgY2xvc2U6Ci0gICAgX25vdGUoInRyYWNlX2V2ZW50OiBDbG9zZWQiKQotICAgIF9sb2dfZmlsZS5jbG9zZSgpCi0gICAgX2xvZ19maWxlID0gTm9uZQotICBlbHNlOgotICAgIF9ub3RlKCJ0cmFjZV9ldmVudDogRmx1c2hlZCIpCi0KLUBfbG9ja2VkCi1kZWYgdHJhY2VfaXNfZW5hYmxlZCgpOgotICByZXR1cm4gX2VuYWJsZWQKLQotQF9sb2NrZWQKLWRlZiBhZGRfdHJhY2VfZXZlbnQocGgsIHRzLCBjYXRlZ29yeSwgbmFtZSwgYXJncz1Ob25lKToKLSAgZ2xvYmFsIF9lbmFibGVkCi0gIGlmIG5vdCBfZW5hYmxlZDoKLSAgICByZXR1cm4KLSAgaWYgbm90IGhhc2F0dHIoX3RscywgJ3BpZCcpIG9yIF90bHMucGlkICE9IG9zLmdldHBpZCgpOgotICAgIF90bHMucGlkID0gb3MuZ2V0cGlkKCkKLSAgICBnbG9iYWwgX2F0ZXhpdF9yZWdzaXRlcmVkX2Zvcl9waWQKLSAgICBpZiBfdGxzLnBpZCAhPSBfYXRleGl0X3JlZ3NpdGVyZWRfZm9yX3BpZDoKLSAgICAgIF9hdGV4aXRfcmVnc2l0ZXJlZF9mb3JfcGlkID0gX3Rscy5waWQKLSAgICAgIGF0ZXhpdC5yZWdpc3RlcihfdHJhY2VfZGlzYWJsZV9hdGV4aXQpCi0gICAgICBfdGxzLnBpZCA9IG9zLmdldHBpZCgpCi0gICAgICBkZWwgX2N1cl9ldmVudHNbOl0gIyB3ZSBmb3JrZWQsIGNsZWFyIHRoZSBldmVudCBidWZmZXIhCi0gICAgdGlkID0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQKLSAgICBpZiBub3QgdGlkOgotICAgICAgdGlkID0gb3MuZ2V0cGlkKCkKLSAgICBfdGxzLnRpZCA9IHRpZAotCi0gIF9jdXJfZXZlbnRzLmFwcGVuZCh7InBoIjogcGgsCi0gICAgICAgICAgICAgICAgICAgICAgImNhdGVnb3J5IjogY2F0ZWdvcnksCi0gICAgICAgICAgICAgICAgICAgICAgInBpZCI6IF90bHMucGlkLAotICAgICAgICAgICAgICAgICAgICAgICJ0aWQiOiBfdGxzLnRpZCwKLSAgICAgICAgICAgICAgICAgICAgICAidHMiOiB0cywKLSAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6IG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgImFyZ3MiOiBhcmdzIG9yIHt9fSk7Ci0KLWRlZiB0cmFjZV9iZWdpbihuYW1lLCBhcmdzPU5vbmUpOgotICBhZGRfdHJhY2VfZXZlbnQoIkIiLCB0cmFjZV90aW1lLk5vdygpLCAicHl0aG9uIiwgbmFtZSwgYXJncykKLQotZGVmIHRyYWNlX2VuZChuYW1lLCBhcmdzPU5vbmUpOgotICBhZGRfdHJhY2VfZXZlbnQoIkUiLCB0cmFjZV90aW1lLk5vdygpLCAicHl0aG9uIiwgbmFtZSwgYXJncykKLQotZGVmIHRyYWNlX3NldF90aHJlYWRfbmFtZSh0aHJlYWRfbmFtZSk6Ci0gIGFkZF90cmFjZV9ldmVudCgiTSIsIHRyYWNlX3RpbWUuTm93KCksICJfX21ldGFkYXRhIiwgInRocmVhZF9uYW1lIiwKLSAgICAgICAgICAgICAgICAgIHsibmFtZSI6IHRocmVhZF9uYW1lfSkKLQotZGVmIF90cmFjZV9kaXNhYmxlX2F0ZXhpdCgpOgotICB0cmFjZV9kaXNhYmxlKCkKLQotZGVmIGlzX3RyYWNpbmdfY29udHJvbGxhYmxlKCk6Ci0gIGdsb2JhbCBfY29udHJvbF9hbGxvd2VkCi0gIHJldHVybiBfY29udHJvbF9hbGxvd2VkCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfaW1wbC9sb2dfaW9fdGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsL2xvZ19pb190ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWEwNjIxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsL2xvZ19pb190ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIGxvZyBpbXBvcnQgKgotZnJvbSBwYXJzZWRfdHJhY2VfZXZlbnRzIGltcG9ydCAqCi0KLQotY2xhc3MgTG9nSU9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgZGVmIHRlc3RfZW5hYmxlX3dpdGhfZmlsZShzZWxmKToKLSAgICBmaWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKLSAgICB0cmFjZV9lbmFibGUob3BlbihmaWxlLm5hbWUsICd3KycpKQotICAgIHRyYWNlX2Rpc2FibGUoKQotICAgIGUgPSBQYXJzZWRUcmFjZUV2ZW50cyh0cmFjZV9maWxlbmFtZSA9IGZpbGUubmFtZSkKLSAgICBmaWxlLmNsb3NlKCkKLSAgICBzZWxmLmFzc2VydFRydWUobGVuKGUpID4gMCkKLQotICBkZWYgdGVzdF9lbmFibGVfd2l0aF9maWxlbmFtZShzZWxmKToKLSAgICBmaWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKLSAgICB0cmFjZV9lbmFibGUoZmlsZS5uYW1lKQotICAgIHRyYWNlX2Rpc2FibGUoKQotICAgIGUgPSBQYXJzZWRUcmFjZUV2ZW50cyh0cmFjZV9maWxlbmFtZSA9IGZpbGUubmFtZSkKLSAgICBmaWxlLmNsb3NlKCkKLSAgICBzZWxmLmFzc2VydFRydWUobGVuKGUpID4gMCkKLQotICBkZWYgdGVzdF9lbmFibGVfd2l0aF9pbXBsaWNpdF9maWxlbmFtZShzZWxmKToKLSAgICBleHBlY3RlZF9maWxlbmFtZSA9ICIlcy5qc29uIiAlIHN5cy5hcmd2WzBdCi0gICAgZGVmIGRvX3dvcmsoKToKLSAgICAgIGZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQotICAgICAgdHJhY2VfZW5hYmxlKCkKLSAgICAgIHRyYWNlX2Rpc2FibGUoKQotICAgICAgZSA9IFBhcnNlZFRyYWNlRXZlbnRzKHRyYWNlX2ZpbGVuYW1lID0gZXhwZWN0ZWRfZmlsZW5hbWUpCi0gICAgICBmaWxlLmNsb3NlKCkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZSkgPiAwKQotICAgIHRyeToKLSAgICAgIGRvX3dvcmsoKQotICAgIGZpbmFsbHk6Ci0gICAgICBpZiBvcy5wYXRoLmV4aXN0cyhleHBlY3RlZF9maWxlbmFtZSk6Ci0gICAgICAgIG9zLnVubGluayhleHBlY3RlZF9maWxlbmFtZSkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgbG9nZ2luZy5nZXRMb2dnZXIoKS5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfaW1wbC9tZXRhX2NsYXNzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50X2ltcGwvbWV0YV9jbGFzcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVkZTc5Yi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfaW1wbC9tZXRhX2NsYXNzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgdHlwZXMKLQotZnJvbSBweV90cmFjZV9ldmVudC50cmFjZV9ldmVudF9pbXBsIGltcG9ydCBkZWNvcmF0b3JzCi0KLQotY2xhc3MgVHJhY2VkTWV0YUNsYXNzKHR5cGUpOgotICBkZWYgX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycyk6Ci0gICAgZm9yIGF0dHJfbmFtZSwgYXR0cl92YWx1ZSBpbiBhdHRycy5pdGVyaXRlbXMoKToKLSAgICAgIGlmIGlzaW5zdGFuY2UoYXR0cl92YWx1ZSwgdHlwZXMuRnVuY3Rpb25UeXBlKToKLSAgICAgICAgYXR0cnNbYXR0cl9uYW1lXSA9IGRlY29yYXRvcnMudHJhY2VkKGF0dHJfdmFsdWUpCi0KLSAgICByZXR1cm4gc3VwZXIoVHJhY2VkTWV0YUNsYXNzLCBjbHMpLl9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgYXR0cnMpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfaW1wbC9tdWx0aXByb2Nlc3Npbmdfc2hpbS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsL211bHRpcHJvY2Vzc2luZ19zaGltLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Nzk2YmRmLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsL211bHRpcHJvY2Vzc2luZ19zaGltLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotaW1wb3J0IGxvZwotaW1wb3J0IHRpbWUKLQotCi1fUmVhbFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcwotX19hbGxfXyA9IFtdCi0KLQotY2xhc3MgUHJvY2Vzc1N1YmNsYXNzKF9SZWFsUHJvY2Vzcyk6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBzaGltLCAqYXJncywgKiprd2FyZHMpOgotICAgIF9SZWFsUHJvY2Vzcy5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZHMpCi0gICAgc2VsZi5fc2hpbSA9IHNoaW0KLQotICBkZWYgcnVuKHNlbGYsKmFyZ3MsKiprd2FyZ3MpOgotICAgIGxvZy5fZGlzYWxsb3dfdHJhY2luZ19jb250cm9sKCkKLSAgICB0cnk6Ci0gICAgICByID0gX1JlYWxQcm9jZXNzLnJ1bihzZWxmLCAqYXJncywgKiprd2FyZ3MpCi0gICAgZmluYWxseToKLSAgICAgIGlmIGxvZy50cmFjZV9pc19lbmFibGVkKCk6Ci0gICAgICAgIGxvZy50cmFjZV9mbHVzaCgpICMgdG9kbywgcmVkdWNlIG5lZWQgZm9yIHRoaXMuLi4KLSAgICByZXR1cm4gcgotCi1jbGFzcyBQcm9jZXNzU2hpbSgpOgotICBkZWYgX19pbml0X18oc2VsZiwgZ3JvdXA9Tm9uZSwgdGFyZ2V0PU5vbmUsIG5hbWU9Tm9uZSwgYXJncz0oKSwga3dhcmdzPXt9KToKLSAgICBzZWxmLl9wcm9jID0gUHJvY2Vzc1N1YmNsYXNzKHNlbGYsIGdyb3VwLCB0YXJnZXQsIG5hbWUsIGFyZ3MsIGt3YXJncykKLSAgICAjIGhpbnQgdG8gdGVzdGluZyBjb2RlIHRoYXQgdGhlIHNoaW1taW5nIHdvcmtlZAotICAgIHNlbGYuX3NoaW1tZWRfYnlfdHJhY2VfZXZlbnQgPSBUcnVlCi0KLSAgZGVmIHJ1bihzZWxmKToKLSAgICBzZWxmLl9wcm9jLnJ1bigpCi0KLSAgZGVmIHN0YXJ0KHNlbGYpOgotICAgIHNlbGYuX3Byb2Muc3RhcnQoKQotCi0gIGRlZiB0ZXJtaW5hdGUoc2VsZik6Ci0gICAgaWYgbG9nLnRyYWNlX2lzX2VuYWJsZWQoKToKLSAgICAgICMgZ2l2ZSB0aGUgZmx1c2ggYSBjaGFuY2UgdG8gZmluaXNoIC0tPiBUT0RPOiBmaW5kIHNvbWUgb3RoZXIgd2F5LgotICAgICAgdGltZS5zbGVlcCgwLjI1KQotICAgIHNlbGYuX3Byb2MudGVybWluYXRlKCkKLQotICBkZWYgam9pbihzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgIHNlbGYuX3Byb2Muam9pbiggdGltZW91dCkKLQotICBkZWYgaXNfYWxpdmUoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX3Byb2MuaXNfYWxpdmUoKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgbmFtZShzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fcHJvYy5uYW1lCi0KLSAgQG5hbWUuc2V0dGVyCi0gIGRlZiBuYW1lKHNlbGYsIG5hbWUpOgotICAgIHNlbGYuX3Byb2MubmFtZSA9IG5hbWUKLQotICBAcHJvcGVydHkKLSAgZGVmIGRhZW1vbihzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fcHJvYy5kYWVtb24KLQotICBAZGFlbW9uLnNldHRlcgotICBkZWYgZGFlbW9uKHNlbGYsIGRhZW1vbmljKToKLSAgICBzZWxmLl9wcm9jLmRhZW1vbiA9IGRhZW1vbmljCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBhdXRoa2V5KHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9wcm9jLl9hdXRoa2V5Ci0KLSAgQGF1dGhrZXkuc2V0dGVyCi0gIGRlZiBhdXRoa2V5KHNlbGYsIGF1dGhrZXkpOgotICAgIHNlbGYuX3Byb2MuYXV0aGtleSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBleGl0Y29kZShzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fcHJvYy5leGl0Y29kZQotCi0gIEBwcm9wZXJ0eQotICBkZWYgaWRlbnQoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX3Byb2MuaWRlbnQKLQotICBAcHJvcGVydHkKLSAgZGVmIHBpZChzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fcHJvYy5waWQKLQotICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX3Byb2MuX19yZXByX18oKQotCi0jIE1vbmtleXBhdGNoIGluIG91ciBwcm9jZXNzIHJlcGxhY2VtZW50LgotaWYgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MgIT0gUHJvY2Vzc1NoaW06Ci0gIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzID0gUHJvY2Vzc1NoaW0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsL3BhcnNlZF90cmFjZV9ldmVudHMucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfaW1wbC9wYXJzZWRfdHJhY2VfZXZlbnRzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGM3NTE0Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsL3BhcnNlZF90cmFjZV9ldmVudHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi1pbXBvcnQgbWF0aAotaW1wb3J0IGpzb24KLQotCi1jbGFzcyBQYXJzZWRUcmFjZUV2ZW50cyhvYmplY3QpOgotICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRzID0gTm9uZSwgdHJhY2VfZmlsZW5hbWUgPSBOb25lKToKLSAgICAiIiIKLSAgICBVdGlsaXR5IGNsYXNzIGZvciBmaWx0ZXJpbmcgYW5kIG1hbmlwdWxhdGluZyB0cmFjZSBkYXRhLgotCi0gICAgZXZlbnRzIC0tIEFuIGl0ZXJhYmxlIG9iamVjdCBjb250YWluaW5nIHRyYWNlIGV2ZW50cwotICAgIHRyYWNlX2ZpbGVuYW1lIC0tIEEgZmlsZSBvYmplY3QgdGhhdCBjb250YWlucyBhIGNvbXBsZXRlIHRyYWNlLgotCi0gICAgIiIiCi0gICAgaWYgdHJhY2VfZmlsZW5hbWUgYW5kIGV2ZW50czoKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbigiUHJvdmlkZSBlaXRoZXIgYSB0cmFjZSBmaWxlIG9yIGV2ZW50IGxpc3QiKQotICAgIGlmIG5vdCB0cmFjZV9maWxlbmFtZSBhbmQgZXZlbnRzID09IE5vbmU6Ci0gICAgICByYWlzZSBFeGNlcHRpb24oIlByb3ZpZGUgZWl0aGVyIGEgdHJhY2UgZmlsZSBvciBldmVudCBsaXN0IikKLQotICAgIGlmIHRyYWNlX2ZpbGVuYW1lOgotICAgICAgZiA9IG9wZW4odHJhY2VfZmlsZW5hbWUsICdyJykKLSAgICAgIHQgPSBmLnJlYWQoKQotICAgICAgZi5jbG9zZSgpCi0KLSAgICAgICMgSWYgdGhlIGV2ZW50IGRhdGEgYmVnaW5zIHdpdGggYSBbLCB0aGVuIHdlIGtub3cgaXQgc2hvdWxkIGVuZCB3aXRoIGEgXS4KLSAgICAgICMgVGhlIHJlYXNvbiB3ZSBjaGVjayBmb3IgdGhpcyBpcyBiZWNhdXNlIHNvbWUgdHJhY2luZyBpbXBsZW1lbnRhdGlvbnMKLSAgICAgICMgY2Fubm90IGd1YXJhbnRlZSB0aGF0IGEgJ10nIGdldHMgd3JpdHRlbiB0byB0aGUgdHJhY2UgZmlsZS4gU28sIHdlIGFyZQotICAgICAgIyBmb3JnaXZpbmcgYW5kIGlmIHRoaXMgaXMgb2J2aW91c2x5IHRoZSBjYXNlLCB3ZSBmaXggaXQgdXAgYmVmb3JlCi0gICAgICAjIHRocm93aW5nIHRoZSBzdHJpbmcgYXQgSlNPTi5wYXJzZS4KLSAgICAgIGlmIHRbMF0gPT0gJ1snOgotICAgICAgICBuID0gbGVuKHQpOwotICAgICAgICBpZiB0W24gLSAxXSAhPSAnXScgYW5kIHRbbiAtIDFdICE9ICdcbic6Ci0gICAgICAgICAgdCA9IHQgKyAnXScKLSAgICAgICAgZWxpZiB0W24gLSAyXSAhPSAnXScgYW5kIHRbbiAtIDFdID09ICdcbic6Ci0gICAgICAgICAgdCA9IHQgKyAnXScKLSAgICAgICAgZWxpZiB0W24gLSAzXSAhPSAnXScgYW5kIHRbbiAtIDJdID09ICdccicgYW5kIHRbbiAtIDFdID09ICdcbic6Ci0gICAgICAgICAgdCA9IHQgKyAnXScKLQotICAgICAgdHJ5OgotICAgICAgICBldmVudHMgPSBqc29uLmxvYWRzKHQpCi0gICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb3JydXB0IHRyYWNlLCBkaWQgbm90IHBhcnNlLiBWYWx1ZTogJXMiICUgdCkKLQotICAgICAgaWYgJ3RyYWNlRXZlbnRzJyBpbiBldmVudHM6Ci0gICAgICAgIGV2ZW50cyA9IGV2ZW50c1sndHJhY2VFdmVudHMnXQotCi0gICAgaWYgbm90IGhhc2F0dHIoZXZlbnRzLCAnX19pdGVyX18nKToKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbiwgJ2V2ZW50cyBtdXN0IGJlIGl0ZXJhYWJsZS4nCi0gICAgc2VsZi5ldmVudHMgPSBldmVudHMKLSAgICBzZWxmLnBpZHMgPSBOb25lCi0gICAgc2VsZi50aWRzID0gTm9uZQotCi0gIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgIHJldHVybiBsZW4oc2VsZi5ldmVudHMpCi0KLSAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgotICAgIHJldHVybiBzZWxmLmV2ZW50c1tpXQotCi0gIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpLCB2KToKLSAgICBzZWxmLmV2ZW50c1tpXSA9IHYKLQotICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgcmV0dXJuICJbJXNdIiAlICIsXG4gIi5qb2luKFtyZXByKGUpIGZvciBlIGluIHNlbGYuZXZlbnRzXSkKLQotICBkZWYgZmluZFByb2Nlc3NJZHMoc2VsZik6Ci0gICAgaWYgc2VsZi5waWRzOgotICAgICAgcmV0dXJuIHNlbGYucGlkcwotICAgIHBpZHMgPSBzZXQoKQotICAgIGZvciBlIGluIHNlbGYuZXZlbnRzOgotICAgICAgaWYgInBpZCIgaW4gZSBhbmQgZVsicGlkIl06Ci0gICAgICAgIHBpZHMuYWRkKGVbInBpZCJdKQotICAgIHNlbGYucGlkcyA9IGxpc3QocGlkcykKLSAgICByZXR1cm4gc2VsZi5waWRzCi0KLSAgZGVmIGZpbmRUaHJlYWRJZHMoc2VsZik6Ci0gICAgaWYgc2VsZi50aWRzOgotICAgICAgcmV0dXJuIHNlbGYudGlkcwotICAgIHRpZHMgPSBzZXQoKQotICAgIGZvciBlIGluIHNlbGYuZXZlbnRzOgotICAgICAgaWYgInRpZCIgaW4gZSBhbmQgZVsidGlkIl06Ci0gICAgICAgIHRpZHMuYWRkKGVbInRpZCJdKQotICAgIHNlbGYudGlkcyA9IGxpc3QodGlkcykKLSAgICByZXR1cm4gc2VsZi50aWRzCi0KLSAgZGVmIGZpbmRFdmVudHNPblByb2Nlc3Moc2VsZiwgcGlkKToKLSAgICByZXR1cm4gUGFyc2VkVHJhY2VFdmVudHMoW2UgZm9yIGUgaW4gc2VsZi5ldmVudHMgaWYgZVsicGlkIl0gPT0gcGlkXSkKLQotICBkZWYgZmluZEV2ZW50c09uVGhyZWFkKHNlbGYsIHRpZCk6Ci0gICAgcmV0dXJuIFBhcnNlZFRyYWNlRXZlbnRzKAotICAgICAgICBbZSBmb3IgZSBpbiBzZWxmLmV2ZW50cyBpZiBlWyJwaCJdICE9ICJNIiBhbmQgZVsidGlkIl0gPT0gdGlkXSkKLQotICBkZWYgZmluZEJ5UGhhc2Uoc2VsZiwgcGgpOgotICAgIHJldHVybiBQYXJzZWRUcmFjZUV2ZW50cyhbZSBmb3IgZSBpbiBzZWxmLmV2ZW50cyBpZiBlWyJwaCJdID09IHBoXSkKLQotICBkZWYgZmluZEJ5TmFtZShzZWxmLCBuKToKLSAgICByZXR1cm4gUGFyc2VkVHJhY2VFdmVudHMoW2UgZm9yIGUgaW4gc2VsZi5ldmVudHMgaWYgZVsibmFtZSJdID09IG5dKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50X2ltcGwvdHJhY2VfdGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsL3RyYWNlX3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNDdlMGUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50X2ltcGwvdHJhY2VfdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHVuaXR0ZXN0Ci0KLSNmcm9tIC5sb2cgaW1wb3J0ICoKLSNmcm9tIC5wYXJzZWRfdHJhY2VfZXZlbnRzIGltcG9ydCAqCi0KLWZyb20gbG9nIGltcG9ydCAqCi1mcm9tIHBhcnNlZF90cmFjZV9ldmVudHMgaW1wb3J0ICoKLQotY2xhc3MgVHJhY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKLSAgICAiIiIKLSAgICBJbmZyYXN0cnVjdHVyZSBmb3IgcnVubmluZyB0ZXN0cyBvZiB0aGUgdHJhY2luZyBzeXN0ZW0uCi0KLSAgICBEb2VzIG5vdCBhY3R1YWxseSBydW4gYW55IHRlc3RzLiBMb29rIGF0IHN1YmNsYXNzZXMgZm9yIHRob3NlLgotICAgICIiIgotICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzKQotICAgIHNlbGYuX2ZpbGUgPSBOb25lCi0KLSAgZGVmIGdvKHNlbGYsIGNiKToKLSAgICAiIiIKLSAgICBFbmFibGVzIHRyYWNpbmcsIHJ1bnMgdGhlIHByb3ZpZGVkIGNhbGxiYWNrLCBhbmQgaWYgc3VjY2Vzc2Z1bCwgcmV0dXJucyBhCi0gICAgVHJhY2VFdmVudHMgb2JqZWN0IHdpdGggdGhlIHJlc3VsdHMuCi0gICAgIiIiCi0gICAgc2VsZi5fZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCi0gICAgdHJhY2VfZW5hYmxlKG9wZW4oc2VsZi5fZmlsZS5uYW1lLCAnYSsnKSkKLQotICAgIHRyeToKLSAgICAgIGNiKCkKLSAgICBmaW5hbGx5OgotICAgICAgdHJhY2VfZGlzYWJsZSgpCi0gICAgZSA9IFBhcnNlZFRyYWNlRXZlbnRzKHRyYWNlX2ZpbGVuYW1lID0gc2VsZi5fZmlsZS5uYW1lKQotICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQotICAgIHNlbGYuX2ZpbGUgPSBOb25lCi0gICAgcmV0dXJuIGUKLQotICBAcHJvcGVydHkKLSAgZGVmIHRyYWNlX2ZpbGVuYW1lKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9maWxlLm5hbWUKLQotICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgaWYgdHJhY2VfaXNfZW5hYmxlZCgpOgotICAgICAgdHJhY2VfZGlzYWJsZSgpCi0gICAgaWYgc2VsZi5fZmlsZToKLSAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50X3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50X3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODhlZjk1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV9ldmVudF91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQyMyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLWltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQganNvbgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBtYXRoCi1pbXBvcnQgbXVsdGlwcm9jZXNzaW5nCi1pbXBvcnQgb3MKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHRpbWUKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHB5X3RyYWNlX2V2ZW50IGltcG9ydCB0cmFjZV9ldmVudAotZnJvbSBweV90cmFjZV9ldmVudCBpbXBvcnQgdHJhY2VfdGltZQotZnJvbSBweV90cmFjZV9ldmVudC50cmFjZV9ldmVudF9pbXBsIGltcG9ydCBsb2cKLQotCi1jbGFzcyBUcmFjZUV2ZW50VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiBzZXRVcChzZWxmKToKLSAgICB0ZiA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpCi0gICAgc2VsZi5fbG9nX3BhdGggPSB0Zi5uYW1lCi0gICAgdGYuY2xvc2UoKQotCi0gIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9sb2dfcGF0aCk6Ci0gICAgICBvcy5yZW1vdmUoc2VsZi5fbG9nX3BhdGgpCi0KLSAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLSAgZGVmIF90ZXN0X3RyYWNlKHNlbGYsIGRpc2FibGU9VHJ1ZSk6Ci0gICAgdHJ5OgotICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZW5hYmxlKHNlbGYuX2xvZ19wYXRoKQotICAgICAgeWllbGQKLSAgICBmaW5hbGx5OgotICAgICAgaWYgZGlzYWJsZToKLSAgICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZGlzYWJsZSgpCi0KLSAgZGVmIHRlc3ROb0ltcGwoc2VsZik6Ci0gICAgb3JpZ19pbXBsID0gdHJhY2VfZXZlbnQudHJhY2VfZXZlbnRfaW1wbAotICAgIHRyeToKLSAgICAgIHRyYWNlX2V2ZW50LnRyYWNlX2V2ZW50X2ltcGwgPSBOb25lCi0gICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYWNlX2V2ZW50LnRyYWNlX2Nhbl9lbmFibGUoKSkKLSAgICBmaW5hbGx5OgotICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZXZlbnRfaW1wbCA9IG9yaWdfaW1wbAotCi0gIGRlZiB0ZXN0SW1wbChzZWxmKToKLSAgICBzZWxmLmFzc2VydFRydWUodHJhY2VfZXZlbnQudHJhY2VfY2FuX2VuYWJsZSgpKQotCi0gIGRlZiB0ZXN0SXNFbmFibGVkRmFsc2Uoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFjZV9ldmVudC50cmFjZV9pc19lbmFibGVkKCkpCi0KLSAgZGVmIHRlc3RJc0VuYWJsZWRUcnVlKHNlbGYpOgotICAgIHdpdGggc2VsZi5fdGVzdF90cmFjZSgpOgotICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYWNlX2V2ZW50LnRyYWNlX2lzX2VuYWJsZWQoKSkKLQotICBkZWYgdGVzdEVuYWJsZShzZWxmKToKLSAgICB3aXRoIHNlbGYuX3Rlc3RfdHJhY2UoKToKLSAgICAgIHdpdGggb3BlbihzZWxmLl9sb2dfcGF0aCwgJ3InKSBhcyBmOgotICAgICAgICBsb2dfb3V0cHV0ID0ganNvbi5sb2FkcyhmLnJlYWQoKSArICddJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGxvZ19vdXRwdXQpLCAxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhY2VfZXZlbnQudHJhY2VfaXNfZW5hYmxlZCgpKQotICAgICAgICBsb2dfb3V0cHV0ID0gbG9nX291dHB1dC5wb3AoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsb2dfb3V0cHV0WydjYXRlZ29yeSddLCAncHJvY2Vzc19hcmd2JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG9nX291dHB1dFsnbmFtZSddLCAncHJvY2Vzc19hcmd2JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvZ19vdXRwdXRbJ2FyZ3MnXVsnYXJndiddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsb2dfb3V0cHV0WydwaCddLCAnTScpCi0KLSAgZGVmIHRlc3REb3VibGVFbmFibGUoc2VsZik6Ci0gICAgdHJ5OgotICAgICAgd2l0aCBzZWxmLl90ZXN0X3RyYWNlKCk6Ci0gICAgICAgIHdpdGggc2VsZi5fdGVzdF90cmFjZSgpOgotICAgICAgICAgIHBhc3MKLSAgICBleGNlcHQgbG9nLlRyYWNlRXhjZXB0aW9uOgotICAgICAgcmV0dXJuCi0gICAgYXNzZXJ0IEZhbHNlCi0KLSAgZGVmIHRlc3REaXNhYmxlKHNlbGYpOgotICAgIHdpdGggc2VsZi5fdGVzdF90cmFjZShkaXNhYmxlPUZhbHNlKToKLSAgICAgIHdpdGggb3BlbihzZWxmLl9sb2dfcGF0aCwgJ3InKSBhcyBmOgotICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhY2VfZXZlbnQudHJhY2VfaXNfZW5hYmxlZCgpKQotICAgICAgICB0cmFjZV9ldmVudC50cmFjZV9kaXNhYmxlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGpzb24ubG9hZHMoZi5yZWFkKCkgKyAnXScpKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFjZV9ldmVudC50cmFjZV9pc19lbmFibGVkKCkpCi0KLSAgZGVmIHRlc3REb3VibGVEaXNhYmxlKHNlbGYpOgotICAgIHdpdGggc2VsZi5fdGVzdF90cmFjZSgpOgotICAgICAgcGFzcwotICAgIHRyYWNlX2V2ZW50LnRyYWNlX2Rpc2FibGUoKQotCi0gIGRlZiB0ZXN0Rmx1c2hDaGFuZ2VzKHNlbGYpOgotICAgIHdpdGggc2VsZi5fdGVzdF90cmFjZSgpOgotICAgICAgd2l0aCBvcGVuKHNlbGYuX2xvZ19wYXRoLCAncicpIGFzIGY6Ci0gICAgICAgIHRyYWNlX2V2ZW50LmNsb2NrX3N5bmMoJzEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oanNvbi5sb2FkcyhmLnJlYWQoKSArICddJykpLCAxKQotICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZmx1c2goKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oanNvbi5sb2FkcyhmLnJlYWQoKSArICddJykpLCAyKQotCi0gIGRlZiB0ZXN0Rmx1c2hOb0NoYW5nZXMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLl90ZXN0X3RyYWNlKCk6Ci0gICAgICB3aXRoIG9wZW4oc2VsZi5fbG9nX3BhdGgsICdyJykgYXMgZjoKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGpzb24ubG9hZHMoZi5yZWFkKCkgKyAnXScpKSwxKQotICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZmx1c2goKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oanNvbi5sb2FkcyhmLnJlYWQoKSArICddJykpLCAxKQotCi0gIGRlZiB0ZXN0RG91YmxlRmx1c2goc2VsZik6Ci0gICAgd2l0aCBzZWxmLl90ZXN0X3RyYWNlKCk6Ci0gICAgICB3aXRoIG9wZW4oc2VsZi5fbG9nX3BhdGgsICdyJykgYXMgZjoKLSAgICAgICAgdHJhY2VfZXZlbnQuY2xvY2tfc3luYygnMScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihqc29uLmxvYWRzKGYucmVhZCgpICsgJ10nKSksIDEpCi0gICAgICAgIGYuc2VlaygwKQotICAgICAgICB0cmFjZV9ldmVudC50cmFjZV9mbHVzaCgpCi0gICAgICAgIHRyYWNlX2V2ZW50LnRyYWNlX2ZsdXNoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGpzb24ubG9hZHMoZi5yZWFkKCkgKyAnXScpKSwgMikKLQotICBkZWYgdGVzdFRyYWNlQmVnaW4oc2VsZik6Ci0gICAgd2l0aCBzZWxmLl90ZXN0X3RyYWNlKCk6Ci0gICAgICB3aXRoIG9wZW4oc2VsZi5fbG9nX3BhdGgsICdyJykgYXMgZjoKLSAgICAgICAgdHJhY2VfZXZlbnQudHJhY2VfYmVnaW4oJ3Rlc3RfZXZlbnQnLCB0aGlzPSd0aGF0JykKLSAgICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZmx1c2goKQotICAgICAgICBsb2dfb3V0cHV0ID0ganNvbi5sb2FkcyhmLnJlYWQoKSArICddJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGxvZ19vdXRwdXQpLCAyKQotICAgICAgICBjdXJyZW50X2VudHJ5ID0gbG9nX291dHB1dC5wb3AoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsnY2F0ZWdvcnknXSwgJ3Byb2Nlc3NfYXJndicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ25hbWUnXSwgJ3Byb2Nlc3NfYXJndicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggY3VycmVudF9lbnRyeVsnYXJncyddWydhcmd2J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCBjdXJyZW50X2VudHJ5WydwaCddLCAnTScpCi0gICAgICAgIGN1cnJlbnRfZW50cnkgPSBsb2dfb3V0cHV0LnBvcCgwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjdXJyZW50X2VudHJ5WydjYXRlZ29yeSddLCAncHl0aG9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsnbmFtZSddLCAndGVzdF9ldmVudCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ2FyZ3MnXVsndGhpcyddLCAnXCd0aGF0XCcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjdXJyZW50X2VudHJ5WydwaCddLCAnQicpCi0KLSAgZGVmIHRlc3RUcmFjZUVuZChzZWxmKToKLSAgICB3aXRoIHNlbGYuX3Rlc3RfdHJhY2UoKToKLSAgICAgIHdpdGggb3BlbihzZWxmLl9sb2dfcGF0aCwgJ3InKSBhcyBmOgotICAgICAgICB0cmFjZV9ldmVudC50cmFjZV9lbmQoJ3Rlc3RfZXZlbnQnKQotICAgICAgICB0cmFjZV9ldmVudC50cmFjZV9mbHVzaCgpCi0gICAgICAgIGxvZ19vdXRwdXQgPSBqc29uLmxvYWRzKGYucmVhZCgpICsgJ10nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obG9nX291dHB1dCksIDIpCi0gICAgICAgIGN1cnJlbnRfZW50cnkgPSBsb2dfb3V0cHV0LnBvcCgwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjdXJyZW50X2VudHJ5WydjYXRlZ29yeSddLCAncHJvY2Vzc19hcmd2JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsnbmFtZSddLCAncHJvY2Vzc19hcmd2JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN1cnJlbnRfZW50cnlbJ2FyZ3MnXVsnYXJndiddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjdXJyZW50X2VudHJ5WydwaCddLCAnTScpCi0gICAgICAgIGN1cnJlbnRfZW50cnkgPSBsb2dfb3V0cHV0LnBvcCgwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjdXJyZW50X2VudHJ5WydjYXRlZ29yeSddLCAncHl0aG9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsnbmFtZSddLCAndGVzdF9ldmVudCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ2FyZ3MnXSwge30pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ3BoJ10sICdFJykKLQotICBkZWYgdGVzdFRyYWNlKHNlbGYpOgotICAgd2l0aCBzZWxmLl90ZXN0X3RyYWNlKCk6Ci0gICAgICB3aXRoIHRyYWNlX2V2ZW50LnRyYWNlKCd0ZXN0X2V2ZW50JywgdGhpcz0ndGhhdCcpOgotICAgICAgICBwYXNzCi0gICAgICB0cmFjZV9ldmVudC50cmFjZV9mbHVzaCgpCi0gICAgICB3aXRoIG9wZW4oc2VsZi5fbG9nX3BhdGgsICdyJykgYXMgZjoKLSAgICAgICAgbG9nX291dHB1dCA9IGpzb24ubG9hZHMoZi5yZWFkKCkgKyAnXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsb2dfb3V0cHV0KSwgMykKLSAgICAgICAgY3VycmVudF9lbnRyeSA9IGxvZ19vdXRwdXQucG9wKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ2NhdGVnb3J5J10sICdwcm9jZXNzX2FyZ3YnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjdXJyZW50X2VudHJ5WyduYW1lJ10sICdwcm9jZXNzX2FyZ3YnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY3VycmVudF9lbnRyeVsnYXJncyddWydhcmd2J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ3BoJ10sICdNJykKLSAgICAgICAgY3VycmVudF9lbnRyeSA9IGxvZ19vdXRwdXQucG9wKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ2NhdGVnb3J5J10sICdweXRob24nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjdXJyZW50X2VudHJ5WyduYW1lJ10sICd0ZXN0X2V2ZW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsnYXJncyddWyd0aGlzJ10sICdcJ3RoYXRcJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ3BoJ10sICdCJykKLSAgICAgICAgY3VycmVudF9lbnRyeSA9IGxvZ19vdXRwdXQucG9wKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ2NhdGVnb3J5J10sICdweXRob24nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjdXJyZW50X2VudHJ5WyduYW1lJ10sICd0ZXN0X2V2ZW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsnYXJncyddLCB7fSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsncGgnXSwgJ0UnKQotCi0gIGRlZiB0ZXN0VHJhY2VkRGVjb3JhdG9yKHNlbGYpOgotICAgIEB0cmFjZV9ldmVudC50cmFjZWQoInRoaXMiKQotICAgIGRlZiB0ZXN0X2RlY29yYXRvcih0aGlzPSJ0aGF0Iik6Ci0gICAgICBwYXNzCi0KLSAgICB3aXRoIHNlbGYuX3Rlc3RfdHJhY2UoKToKLSAgICAgIHRlc3RfZGVjb3JhdG9yKCkKLSAgICAgIHRyYWNlX2V2ZW50LnRyYWNlX2ZsdXNoKCkKLSAgICAgIHdpdGggb3BlbihzZWxmLl9sb2dfcGF0aCwgJ3InKSBhcyBmOgotICAgICAgICBsb2dfb3V0cHV0ID0ganNvbi5sb2FkcyhmLnJlYWQoKSArICddJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGxvZ19vdXRwdXQpLCAzKQotICAgICAgICBjdXJyZW50X2VudHJ5ID0gbG9nX291dHB1dC5wb3AoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsnY2F0ZWdvcnknXSwgJ3Byb2Nlc3NfYXJndicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ25hbWUnXSwgJ3Byb2Nlc3NfYXJndicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdXJyZW50X2VudHJ5WydhcmdzJ11bJ2FyZ3YnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsncGgnXSwgJ00nKQotICAgICAgICBjdXJyZW50X2VudHJ5ID0gbG9nX291dHB1dC5wb3AoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsnY2F0ZWdvcnknXSwgJ3B5dGhvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ25hbWUnXSwgJ19fbWFpbl9fLnRlc3RfZGVjb3JhdG9yJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsnYXJncyddWyd0aGlzJ10sICdcJ3RoYXRcJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ3BoJ10sICdCJykKLSAgICAgICAgY3VycmVudF9lbnRyeSA9IGxvZ19vdXRwdXQucG9wKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ2NhdGVnb3J5J10sICdweXRob24nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjdXJyZW50X2VudHJ5WyduYW1lJ10sICdfX21haW5fXy50ZXN0X2RlY29yYXRvcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ2FyZ3MnXSwge30pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ3BoJ10sICdFJykKLQotICBkZWYgdGVzdENsb2NrU3luY1dpdGhUcyhzZWxmKToKLSAgICB3aXRoIHNlbGYuX3Rlc3RfdHJhY2UoKToKLSAgICAgIHdpdGggb3BlbihzZWxmLl9sb2dfcGF0aCwgJ3InKSBhcyBmOgotICAgICAgICB0cmFjZV9ldmVudC5jbG9ja19zeW5jKCdpZCcsIGlzc3VlX3RzPXRyYWNlX3RpbWUuTm93KCkpCi0gICAgICAgIHRyYWNlX2V2ZW50LnRyYWNlX2ZsdXNoKCkKLSAgICAgICAgbG9nX291dHB1dCA9IGpzb24ubG9hZHMoZi5yZWFkKCkgKyAnXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsb2dfb3V0cHV0KSwgMikKLSAgICAgICAgY3VycmVudF9lbnRyeSA9IGxvZ19vdXRwdXQucG9wKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ2NhdGVnb3J5J10sICdwcm9jZXNzX2FyZ3YnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjdXJyZW50X2VudHJ5WyduYW1lJ10sICdwcm9jZXNzX2FyZ3YnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY3VycmVudF9lbnRyeVsnYXJncyddWydhcmd2J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ3BoJ10sICdNJykKLSAgICAgICAgY3VycmVudF9lbnRyeSA9IGxvZ19vdXRwdXQucG9wKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ2NhdGVnb3J5J10sICdweXRob24nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjdXJyZW50X2VudHJ5WyduYW1lJ10sICdjbG9ja19zeW5jJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN1cnJlbnRfZW50cnlbJ2FyZ3MnXVsnaXNzdWVfdHMnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsncGgnXSwgJ2MnKQotCi0gIGRlZiB0ZXN0Q2xvY2tTeW5jV2l0aG91dFRzKHNlbGYpOgotICAgIHdpdGggc2VsZi5fdGVzdF90cmFjZSgpOgotICAgICAgd2l0aCBvcGVuKHNlbGYuX2xvZ19wYXRoLCAncicpIGFzIGY6Ci0gICAgICAgIHRyYWNlX2V2ZW50LmNsb2NrX3N5bmMoJ2lkJykKLSAgICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZmx1c2goKQotICAgICAgICBsb2dfb3V0cHV0ID0ganNvbi5sb2FkcyhmLnJlYWQoKSArICddJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGxvZ19vdXRwdXQpLCAyKQotICAgICAgICBjdXJyZW50X2VudHJ5ID0gbG9nX291dHB1dC5wb3AoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsnY2F0ZWdvcnknXSwgJ3Byb2Nlc3NfYXJndicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ25hbWUnXSwgJ3Byb2Nlc3NfYXJndicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdXJyZW50X2VudHJ5WydhcmdzJ11bJ2FyZ3YnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsncGgnXSwgJ00nKQotICAgICAgICBjdXJyZW50X2VudHJ5ID0gbG9nX291dHB1dC5wb3AoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3VycmVudF9lbnRyeVsnY2F0ZWdvcnknXSwgJ3B5dGhvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ25hbWUnXSwgJ2Nsb2NrX3N5bmMnKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGN1cnJlbnRfZW50cnlbJ2FyZ3MnXS5nZXQoJ2lzc3VlX3RzJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGN1cnJlbnRfZW50cnlbJ3BoJ10sICdjJykKLQotICBkZWYgdGVzdFRpbWUoc2VsZik6Ci0gICAgYWN0dWFsX2RpZmYgPSBbXQotICAgIGRlZiBmdW5jMSgpOgotICAgICAgdHJhY2VfYmVnaW4oImZ1bmMxIikKLSAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKLSAgICAgIHRpbWUuc2xlZXAoMC4yNSkKLSAgICAgIGVuZCA9IHRpbWUudGltZSgpCi0gICAgICBhY3R1YWxfZGlmZi5hcHBlbmQoZW5kLXN0YXJ0KSAjIFBhc3MgdmlhIGFycmF5IGJlY2F1c2Ugb2YgUHl0aG9uIHNjb3BpbmcKLSAgICAgIHRyYWNlX2VuZCgiZnVuYzEiKQotCi0gICAgd2l0aCBzZWxmLl90ZXN0X3RyYWNlKCk6Ci0gICAgICBzdGFydF90cyA9IHRpbWUudGltZSgpCi0gICAgICB0cmFjZV9ldmVudC50cmFjZV9iZWdpbigndGVzdCcpCi0gICAgICBlbmRfdHMgPSB0aW1lLnRpbWUoKQotICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZW5kKCd0ZXN0JykKLSAgICAgIHRyYWNlX2V2ZW50LnRyYWNlX2ZsdXNoKCkKLSAgICAgIHdpdGggb3BlbihzZWxmLl9sb2dfcGF0aCwgJ3InKSBhcyBmOgotICAgICAgICBsb2dfb3V0cHV0ID0ganNvbi5sb2FkcyhmLnJlYWQoKSArICddJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGxvZ19vdXRwdXQpLCAzKQotICAgICAgICBtZXRhX2RhdGEgPSBsb2dfb3V0cHV0WzBdCi0gICAgICAgIG9wZW5fZGF0YSA9IGxvZ19vdXRwdXRbMV0KLSAgICAgICAgY2xvc2VfZGF0YSA9IGxvZ19vdXRwdXRbMl0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0YV9kYXRhWydjYXRlZ29yeSddLCAncHJvY2Vzc19hcmd2JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0YV9kYXRhWyduYW1lJ10sICdwcm9jZXNzX2FyZ3YnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0YV9kYXRhWydhcmdzJ11bJ2FyZ3YnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0YV9kYXRhWydwaCddLCAnTScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wZW5fZGF0YVsnY2F0ZWdvcnknXSwgJ3B5dGhvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wZW5fZGF0YVsnbmFtZSddLCAndGVzdCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wZW5fZGF0YVsncGgnXSwgJ0InKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjbG9zZV9kYXRhWydjYXRlZ29yeSddLCAncHl0aG9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xvc2VfZGF0YVsnbmFtZSddLCAndGVzdCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNsb3NlX2RhdGFbJ3BoJ10sICdFJykKLSAgICAgICAgZXZlbnRfdGltZV9kaWZmID0gY2xvc2VfZGF0YVsndHMnXSAtIG9wZW5fZGF0YVsndHMnXQotICAgICAgICByZWNvcmRlZF90aW1lX2RpZmYgPSAoZW5kX3RzIC0gc3RhcnRfdHMpICogMTAwMDAwMAotICAgICAgICBzZWxmLmFzc2VydExlc3MobWF0aC5mYWJzKGV2ZW50X3RpbWVfZGlmZiAtIHJlY29yZGVkX3RpbWVfZGlmZiksIDEwMDApCi0KLSAgZGVmIHRlc3ROZXN0ZWRDYWxscyhzZWxmKToKLSAgICB3aXRoIHNlbGYuX3Rlc3RfdHJhY2UoKToKLSAgICAgIHRyYWNlX2V2ZW50LnRyYWNlX2JlZ2luKCdvbmUnKQotICAgICAgdHJhY2VfZXZlbnQudHJhY2VfYmVnaW4oJ3R3bycpCi0gICAgICB0cmFjZV9ldmVudC50cmFjZV9lbmQoJ3R3bycpCi0gICAgICB0cmFjZV9ldmVudC50cmFjZV9lbmQoJ29uZScpCi0gICAgICB0cmFjZV9ldmVudC50cmFjZV9mbHVzaCgpCi0gICAgICB3aXRoIG9wZW4oc2VsZi5fbG9nX3BhdGgsICdyJykgYXMgZjoKLSAgICAgICAgbG9nX291dHB1dCA9IGpzb24ubG9hZHMoZi5yZWFkKCkgKyAnXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsb2dfb3V0cHV0KSwgNSkKLSAgICAgICAgbWV0YV9kYXRhID0gbG9nX291dHB1dFswXQotICAgICAgICBvbmVfb3BlbiA9IGxvZ19vdXRwdXRbMV0KLSAgICAgICAgdHdvX29wZW4gPSBsb2dfb3V0cHV0WzJdCi0gICAgICAgIHR3b19jbG9zZSA9IGxvZ19vdXRwdXRbM10KLSAgICAgICAgb25lX2Nsb3NlID0gbG9nX291dHB1dFs0XQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXRhX2RhdGFbJ2NhdGVnb3J5J10sICdwcm9jZXNzX2FyZ3YnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXRhX2RhdGFbJ25hbWUnXSwgJ3Byb2Nlc3NfYXJndicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXRhX2RhdGFbJ2FyZ3MnXVsnYXJndiddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXRhX2RhdGFbJ3BoJ10sICdNJykKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvbmVfb3BlblsnY2F0ZWdvcnknXSwgJ3B5dGhvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9uZV9vcGVuWyduYW1lJ10sICdvbmUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvbmVfb3BlblsncGgnXSwgJ0InKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvbmVfY2xvc2VbJ2NhdGVnb3J5J10sICdweXRob24nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvbmVfY2xvc2VbJ25hbWUnXSwgJ29uZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9uZV9jbG9zZVsncGgnXSwgJ0UnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHR3b19vcGVuWydjYXRlZ29yeSddLCAncHl0aG9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHdvX29wZW5bJ25hbWUnXSwgJ3R3bycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHR3b19vcGVuWydwaCddLCAnQicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHR3b19jbG9zZVsnY2F0ZWdvcnknXSwgJ3B5dGhvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHR3b19jbG9zZVsnbmFtZSddLCAndHdvJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHdvX2Nsb3NlWydwaCddLCAnRScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwob25lX29wZW5bJ3RzJ10sIHR3b19vcGVuWyd0cyddKQotICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChvbmVfY2xvc2VbJ3RzJ10sIHR3b19jbG9zZVsndHMnXSkKLQotICBkZWYgdGVzdEludGVybGVhdmVkQ2FsbHMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLl90ZXN0X3RyYWNlKCk6Ci0gICAgICB0cmFjZV9ldmVudC50cmFjZV9iZWdpbignb25lJykKLSAgICAgIHRyYWNlX2V2ZW50LnRyYWNlX2JlZ2luKCd0d28nKQotICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZW5kKCdvbmUnKQotICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZW5kKCd0d28nKQotICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZmx1c2goKQotICAgICAgd2l0aCBvcGVuKHNlbGYuX2xvZ19wYXRoLCAncicpIGFzIGY6Ci0gICAgICAgIGxvZ19vdXRwdXQgPSBqc29uLmxvYWRzKGYucmVhZCgpICsgJ10nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obG9nX291dHB1dCksIDUpCi0gICAgICAgIG1ldGFfZGF0YSA9IGxvZ19vdXRwdXRbMF0KLSAgICAgICAgb25lX29wZW4gPSBsb2dfb3V0cHV0WzFdCi0gICAgICAgIHR3b19vcGVuID0gbG9nX291dHB1dFsyXQotICAgICAgICB0d29fY2xvc2UgPSBsb2dfb3V0cHV0WzRdCi0gICAgICAgIG9uZV9jbG9zZSA9IGxvZ19vdXRwdXRbM10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0YV9kYXRhWydjYXRlZ29yeSddLCAncHJvY2Vzc19hcmd2JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0YV9kYXRhWyduYW1lJ10sICdwcm9jZXNzX2FyZ3YnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0YV9kYXRhWydhcmdzJ11bJ2FyZ3YnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0YV9kYXRhWydwaCddLCAnTScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob25lX29wZW5bJ2NhdGVnb3J5J10sICdweXRob24nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvbmVfb3BlblsnbmFtZSddLCAnb25lJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob25lX29wZW5bJ3BoJ10sICdCJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob25lX2Nsb3NlWydjYXRlZ29yeSddLCAncHl0aG9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob25lX2Nsb3NlWyduYW1lJ10sICdvbmUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvbmVfY2xvc2VbJ3BoJ10sICdFJykKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0d29fb3BlblsnY2F0ZWdvcnknXSwgJ3B5dGhvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHR3b19vcGVuWyduYW1lJ10sICd0d28nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0d29fb3BlblsncGgnXSwgJ0InKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0d29fY2xvc2VbJ2NhdGVnb3J5J10sICdweXRob24nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0d29fY2xvc2VbJ25hbWUnXSwgJ3R3bycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHR3b19jbG9zZVsncGgnXSwgJ0UnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG9uZV9vcGVuWyd0cyddLCB0d29fb3BlblsndHMnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwob25lX2Nsb3NlWyd0cyddLCB0d29fY2xvc2VbJ3RzJ10pCi0KLSAgZGVmIHRlc3RNdWx0aXByb2Nlc3Moc2VsZik6Ci0gICAgZGVmIGNoaWxkX2Z1bmN0aW9uKCk6Ci0gICAgICB3aXRoIHRyYWNlX2V2ZW50LnRyYWNlKCdjaGlsZF9ldmVudCcpOgotICAgICAgICBwYXNzCi0KLSAgICB3aXRoIHNlbGYuX3Rlc3RfdHJhY2UoKToKLSAgICAgIHRyYWNlX2V2ZW50LnRyYWNlX2JlZ2luKCdwYXJlbnRfZXZlbnQnKQotICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZmx1c2goKQotICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1jaGlsZF9mdW5jdGlvbikKLSAgICAgIHAuc3RhcnQoKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocCwgIl9zaGltbWVkX2J5X3RyYWNlX2V2ZW50IikpCi0gICAgICBwLmpvaW4oKQotICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZW5kKCdwYXJlbnRfZXZlbnQnKQotICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZmx1c2goKQotICAgICAgd2l0aCBvcGVuKHNlbGYuX2xvZ19wYXRoLCAncicpIGFzIGY6Ci0gICAgICAgIGxvZ19vdXRwdXQgPSBqc29uLmxvYWRzKGYucmVhZCgpICsgJ10nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obG9nX291dHB1dCksIDUpCi0gICAgICAgIG1ldGFfZGF0YSA9IGxvZ19vdXRwdXRbMF0KLSAgICAgICAgcGFyZW50X29wZW4gPSBsb2dfb3V0cHV0WzFdCi0gICAgICAgIGNoaWxkX29wZW4gPSBsb2dfb3V0cHV0WzJdCi0gICAgICAgIGNoaWxkX2Nsb3NlID0gbG9nX291dHB1dFszXQotICAgICAgICBwYXJlbnRfY2xvc2UgPSBsb2dfb3V0cHV0WzRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1ldGFfZGF0YVsnY2F0ZWdvcnknXSwgJ3Byb2Nlc3NfYXJndicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1ldGFfZGF0YVsnbmFtZSddLCAncHJvY2Vzc19hcmd2JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ldGFfZGF0YVsnYXJncyddWydhcmd2J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1ldGFfZGF0YVsncGgnXSwgJ00nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmVudF9vcGVuWydjYXRlZ29yeSddLCAncHl0aG9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyZW50X29wZW5bJ25hbWUnXSwgJ3BhcmVudF9ldmVudCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmVudF9vcGVuWydwaCddLCAnQicpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2hpbGRfb3BlblsnY2F0ZWdvcnknXSwgJ3B5dGhvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNoaWxkX29wZW5bJ25hbWUnXSwgJ2NoaWxkX2V2ZW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2hpbGRfb3BlblsncGgnXSwgJ0InKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNoaWxkX2Nsb3NlWydjYXRlZ29yeSddLCAncHl0aG9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2hpbGRfY2xvc2VbJ25hbWUnXSwgJ2NoaWxkX2V2ZW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2hpbGRfY2xvc2VbJ3BoJ10sICdFJykKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJlbnRfY2xvc2VbJ2NhdGVnb3J5J10sICdweXRob24nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJlbnRfY2xvc2VbJ25hbWUnXSwgJ3BhcmVudF9ldmVudCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmVudF9jbG9zZVsncGgnXSwgJ0UnKQotCi0gIGRlZiB0ZXN0TXVsdGlwcm9jZXNzRXhjZXB0aW9uSW5DaGlsZChzZWxmKToKLSAgICBkZWYgYmFkX2NoaWxkKCk6Ci0gICAgICB0cmFjZV9ldmVudC50cmFjZV9kaXNhYmxlKCkKLQotICAgIHdpdGggc2VsZi5fdGVzdF90cmFjZSgpOgotICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDEpCi0gICAgICB0cmFjZV9ldmVudC50cmFjZV9iZWdpbigncGFyZW50JykKLSAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgbGFtYmRhOiBwLmFwcGx5KGJhZF9jaGlsZCwgKCkpKQotICAgICAgcC5jbG9zZSgpCi0gICAgICBwLnRlcm1pbmF0ZSgpCi0gICAgICBwLmpvaW4oKQotICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZW5kKCdwYXJlbnQnKQotICAgICAgdHJhY2VfZXZlbnQudHJhY2VfZmx1c2goKQotICAgICAgd2l0aCBvcGVuKHNlbGYuX2xvZ19wYXRoLCAncicpIGFzIGY6Ci0gICAgICAgIGxvZ19vdXRwdXQgPSBqc29uLmxvYWRzKGYucmVhZCgpICsgJ10nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obG9nX291dHB1dCksIDMpCi0gICAgICAgIG1ldGFfZGF0YSA9IGxvZ19vdXRwdXRbMF0KLSAgICAgICAgcGFyZW50X29wZW4gPSBsb2dfb3V0cHV0WzFdCi0gICAgICAgIHBhcmVudF9jbG9zZSA9IGxvZ19vdXRwdXRbMl0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyZW50X29wZW5bJ2NhdGVnb3J5J10sICdweXRob24nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJlbnRfb3BlblsnbmFtZSddLCAncGFyZW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyZW50X29wZW5bJ3BoJ10sICdCJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyZW50X2Nsb3NlWydjYXRlZ29yeSddLCAncHl0aG9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyZW50X2Nsb3NlWyduYW1lJ10sICdwYXJlbnQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJlbnRfY2xvc2VbJ3BoJ10sICdFJykKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgbG9nZ2luZy5nZXRMb2dnZXIoKS5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L3RyYWNlX3RpbWUucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvdHJhY2VfdGltZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVlM2ZlMS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdHJhY2VfZXZlbnQvcHlfdHJhY2VfZXZlbnQvdHJhY2VfdGltZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBjdHlwZXMKLWltcG9ydCBjdHlwZXMudXRpbAotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHBsYXRmb3JtCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGltZQotaW1wb3J0IHRocmVhZGluZwotCi0KLUdFVF9USUNLX0NPVU5UX0xBU1RfTk9XID0gMAotIyBJZiBHRVRfVElDS19DT1VOVEVSX0xBU1RfTk9XIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCB0aW1lLCB0aGUgY2xvY2sgaGFzCi0jIHJvbGxlZCBvdmVyLCBhbmQgdGhpcyBuZWVkcyB0byBiZSBhY2NvdW50ZWQgZm9yLgotR0VUX1RJQ0tfQ09VTlRfV1JBUEFST1VORFMgPSAwCi0jIFRoZSBjdXJyZW50IGRldGVjdGVkIHBsYXRmb3JtCi1fQ0xPQ0sgPSBOb25lCi1fTk9XX0ZVTkNUSU9OID0gTm9uZQotIyBNYXBwaW5nIG9mIHN1cHBvcnRlZCBwbGF0Zm9ybXMgYW5kIHdoYXQgaXMgcmV0dXJuZWQgYnkgc3lzLnBsYXRmb3JtLgotX1BMQVRGT1JNUyA9IHsKLSAgICAnbWFjJzogJ2RhcndpbicsCi0gICAgJ2xpbnV4JzogJ2xpbnV4JywKLSAgICAnd2luZG93cyc6ICd3aW4zMicsCi0gICAgJ2N5Z3dpbic6ICdjeWd3aW4nLAotICAgICdmcmVlYnNkJzogJ2ZyZWVic2QnLAotICAgICdzdW5vcyc6ICdzdW5vczUnLAotICAgICdic2QnOiAnYnNkJwotfQotIyBNYXBwaW5nIG9mIHdoYXQgdG8gcGFzcyBnZXRfY2xvY2t0aW1lIGJhc2VkIG9uIHBsYXRmb3JtLgotX0NMT0NLX01PTk9UT05JQyA9IHsKLSAgICAnbGludXgnOiAxLAotICAgICdmcmVlYnNkJzogNCwKLSAgICAnYnNkJzogMywKLSAgICAnc3Vub3M1JzogNAotfQotCi1fTElOVVhfQ0xPQ0sgPSAnTElOVVhfQ0xPQ0tfTU9OT1RPTklDJwotX01BQ19DTE9DSyA9ICdNQUNfTUFDSF9BQlNPTFVURV9USU1FJwotX1dJTl9ISVJFUyA9ICdXSU5fUVBDJwotX1dJTl9MT1JFUyA9ICdXSU5fUk9MTE9WRVJfUFJPVEVDVEVEX1RJTUVfR0VUX1RJTUUnCi0KLWRlZiBJbml0aWFsaXplTWFjTm93RnVuY3Rpb24ocGxhdCk6Ci0gICIiIlNldHMgYSBtb25vdG9uaWMgY2xvY2sgZm9yIHRoZSBNYWMgcGxhdGZvcm0uCi0KLSAgICBBcmdzOgotICAgICAgcGxhdDogUGxhdGZvcm0gdGhhdCBpcyBiZWluZyBydW4gb24uIFVudXNlZCBpbiBHZXRNYWNOb3dGdW5jdGlvbi4gUGFzc2VkCi0gICAgICAgIGZvciBjb25zaXN0ZW5jeSBiZXR3ZWVuIGluaXRpbGFpemVycy4KLSAgIiIiCi0gIGRlbCBwbGF0ICAjIFVudXNlZAotICBnbG9iYWwgX0NMT0NLICAjIHB5bGludDogZGlzYWJsZT1nbG9iYWwtc3RhdGVtZW50Ci0gIGdsb2JhbCBfTk9XX0ZVTkNUSU9OICAjIHB5bGludDogZGlzYWJsZT1nbG9iYWwtc3RhdGVtZW50Ci0gIF9DTE9DSyA9IF9NQUNfQ0xPQ0sKLSAgbGliYyA9IGN0eXBlcy5DRExMKCcvdXNyL2xpYi9saWJjLmR5bGliJywgdXNlX2Vycm5vPVRydWUpCi0gIGNsYXNzIE1hY2hUaW1lYmFzZUluZm9EYXRhKGN0eXBlcy5TdHJ1Y3R1cmUpOgotICAgICIiIlN5c3RlbSB0aW1lYmFzZSBpbmZvLiBEZWZpbmVkIGluIDxtYWNoL21hY2hfdGltZS5oPi4iIiIKLSAgICBfZmllbGRzXyA9ICgoJ251bWVyJywgY3R5cGVzLmNfdWludDMyKSwKLSAgICAgICAgICAgICAgICAoJ2Rlbm9tJywgY3R5cGVzLmNfdWludDMyKSkKLQotICBtYWNoX2Fic29sdXRlX3RpbWUgPSBsaWJjLm1hY2hfYWJzb2x1dGVfdGltZQotICBtYWNoX2Fic29sdXRlX3RpbWUucmVzdHlwZSA9IGN0eXBlcy5jX3VpbnQ2NAotCi0gIHRpbWViYXNlID0gTWFjaFRpbWViYXNlSW5mb0RhdGEoKQotICBsaWJjLm1hY2hfdGltZWJhc2VfaW5mbyhjdHlwZXMuYnlyZWYodGltZWJhc2UpKQotICB0aWNrc19wZXJfc2Vjb25kID0gdGltZWJhc2UubnVtZXIgLyB0aW1lYmFzZS5kZW5vbSAqIDEuMGU5Ci0KLSAgZGVmIE1hY05vd0Z1bmN0aW9uSW1wbCgpOgotICAgIHJldHVybiBtYWNoX2Fic29sdXRlX3RpbWUoKSAvIHRpY2tzX3Blcl9zZWNvbmQKLSAgX05PV19GVU5DVElPTiA9IE1hY05vd0Z1bmN0aW9uSW1wbAotCi0KLWRlZiBHZXRDbG9ja0dldFRpbWVDbG9ja051bWJlcihwbGF0KToKLSAgZm9yIGtleSBpbiBfQ0xPQ0tfTU9OT1RPTklDOgotICAgIGlmIHBsYXQuc3RhcnRzd2l0aChrZXkpOgotICAgICAgcmV0dXJuIF9DTE9DS19NT05PVE9OSUNba2V5XQotICByYWlzZSBMb29rdXBFcnJvcignUGxhdGZvcm0gbm90IGluIGNsb2NrIGRpY2l0b25hcnknKQotCi1kZWYgSW5pdGlhbGl6ZUxpbnV4Tm93RnVuY3Rpb24ocGxhdCk6Ci0gICIiIlNldHMgYSBtb25vdG9uaWMgY2xvY2sgZm9yIGxpbnV4IHBsYXRmb3Jtcy4KLQotICAgIEFyZ3M6Ci0gICAgICBwbGF0OiBQbGF0Zm9ybSB0aGF0IGlzIGJlaW5nIHJ1biBvbi4KLSAgIiIiCi0gIGdsb2JhbCBfQ0xPQ0sgICMgcHlsaW50OiBkaXNhYmxlPWdsb2JhbC1zdGF0ZW1lbnQKLSAgZ2xvYmFsIF9OT1dfRlVOQ1RJT04gICMgcHlsaW50OiBkaXNhYmxlPWdsb2JhbC1zdGF0ZW1lbnQKLSAgX0NMT0NLID0gX0xJTlVYX0NMT0NLCi0gIGNsb2NrX21vbm90b25pYyA9IEdldENsb2NrR2V0VGltZUNsb2NrTnVtYmVyKHBsYXQpCi0gIHRyeToKLSAgICAjIEF0dGVtcHQgdG8gZmluZCBjbG9ja19nZXR0aW1lIGluIHRoZSBDIGxpYnJhcnkuCi0gICAgY2xvY2tfZ2V0dGltZSA9IGN0eXBlcy5DRExMKGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgnYycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfZXJybm89VHJ1ZSkuY2xvY2tfZ2V0dGltZQotICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgIyBJZiBub3QgYWJsZSB0byBmaW5kIGludCBpbiB0aGUgQyBsaWJyYXJ5LCBsb29rIGluIHJ0IGxpYnJhcnkuCi0gICAgY2xvY2tfZ2V0dGltZSA9IGN0eXBlcy5DRExMKGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgncnQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2Vycm5vPVRydWUpLmNsb2NrX2dldHRpbWUKLQotICBjbGFzcyBUaW1lc3BlYyhjdHlwZXMuU3RydWN0dXJlKToKLSAgICAiIiJUaW1lIHNwZWNpZmljYXRpb24sIGFzIGRlc2NyaWJlZCBpbiBjbG9ja19nZXR0aW1lKDMpLiIiIgotICAgIF9maWVsZHNfID0gKCgndHZfc2VjJywgY3R5cGVzLmNfbG9uZyksCi0gICAgICAgICAgICAgICAgKCd0dl9uc2VjJywgY3R5cGVzLmNfbG9uZykpCi0KLSAgZGVmIExpbnV4Tm93RnVuY3Rpb25JbXBsKCk6Ci0gICAgdHMgPSBUaW1lc3BlYygpCi0gICAgaWYgY2xvY2tfZ2V0dGltZShjbG9ja19tb25vdG9uaWMsIGN0eXBlcy5wb2ludGVyKHRzKSk6Ci0gICAgICBlcnJubyA9IGN0eXBlcy5nZXRfZXJybm8oKQotICAgICAgcmFpc2UgT1NFcnJvcihlcnJubywgb3Muc3RyZXJyb3IoZXJybm8pKQotICAgIHJldHVybiB0cy50dl9zZWMgKyB0cy50dl9uc2VjIC8gMS4wZTkKLQotICBfTk9XX0ZVTkNUSU9OID0gTGludXhOb3dGdW5jdGlvbkltcGwKLQotCi1kZWYgSXNRUENVc2FibGUoKToKLSAgIiIiRGV0ZXJtaW5lcyBpZiBzeXN0ZW0gY2FuIHF1ZXJ5IHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyLgotICAgIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIGlzIGEgaGlnaCByZXNvbHV0aW9uIHRpbWVyIG9uIHdpbmRvd3Mgc3lzdGVtcy4KLSAgICBTb21lIGNoaXBzZXRzIGhhdmUgdW5yZWxpYWJsZSBwZXJmb3JtYW5jZSBjb3VudGVycywgc28gdGhpcyBjaGVja3MgdGhhdCBvbmUKLSAgICBvZiB0aG9zZSBjaGlwc2V0cyBpcyBub3QgcHJlc2VudC4KLQotICAgIFJldHVybnM6Ci0gICAgICBUcnVlIGlmIFFQQyBpcyB1c2VhYmxlLCBmYWxzZSBvdGhlcndpc2UuCi0gICIiIgotCi0gICMgU2FtcGxlIG91dHB1dDogJ0ludGVsNjQgRmFtaWx5IDYgTW9kZWwgMjMgU3RlcHBpbmcgNiwgR2VudWluZUludGVsJwotICBpbmZvID0gcGxhdGZvcm0ucHJvY2Vzc29yKCkKLSAgaWYgJ0F1dGhlbnRpY0FNRCcgaW4gaW5mbyBhbmQgJ0ZhbWlseSAxNScgaW4gaW5mbzoKLSAgICByZXR1cm4gRmFsc2UKLSAgaWYgbm90IGhhc2F0dHIoY3R5cGVzLCAnd2luZGxsJyk6Ci0gICAgcmV0dXJuIEZhbHNlCi0gIHRyeTogICMgSWYgYW55dGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgdGhpcywgYXNzdW1lIFFQQyBpc24ndCBhdmFpbGFibGUuCi0gICAgZnJlcXVlbmN5ID0gY3R5cGVzLmNfaW50NjQoKQotICAgIGN0eXBlcy53aW5kbGwuS2VybmVsMzIuUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSgKLSAgICAgICAgY3R5cGVzLmJ5cmVmKGZyZXF1ZW5jeSkpCi0gICAgaWYgZmxvYXQoZnJlcXVlbmN5LnZhbHVlKSA8PSAwOgotICAgICAgcmV0dXJuIEZhbHNlCi0gIGV4Y2VwdCBFeGNlcHRpb246ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKLSAgICBsb2dnaW5nLmV4Y2VwdGlvbignRXJyb3Igd2hlbiBkZXRlcm1pbmluZyBpZiBRUEMgaXMgdXNhYmxlLicpCi0gICAgcmV0dXJuIEZhbHNlCi0gIHJldHVybiBUcnVlCi0KLQotZGVmIEluaXRpYWxpemVXaW5Ob3dGdW5jdGlvbihwbGF0KToKLSAgIiIiU2V0cyBhIG1vbm90b25pYyBjbG9jayBmb3Igd2luZG93cyBwbGF0Zm9ybXMuCi0KLSAgICBBcmdzOgotICAgICAgcGxhdDogUGxhdGZvcm0gdGhhdCBpcyBiZWluZyBydW4gb24uCi0gICIiIgotICBnbG9iYWwgX0NMT0NLICAjIHB5bGludDogZGlzYWJsZT1nbG9iYWwtc3RhdGVtZW50Ci0gIGdsb2JhbCBfTk9XX0ZVTkNUSU9OICAjIHB5bGludDogZGlzYWJsZT1nbG9iYWwtc3RhdGVtZW50Ci0KLSAgaWYgSXNRUENVc2FibGUoKToKLSAgICBfQ0xPQ0sgPSBfV0lOX0hJUkVTCi0gICAgcXBjX3JldHVybiA9IGN0eXBlcy5jX2ludDY0KCkKLSAgICBxcGNfZnJlcXVlbmN5ID0gY3R5cGVzLmNfaW50NjQoKQotICAgIGN0eXBlcy53aW5kbGwuS2VybmVsMzIuUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSgKLSAgICAgICAgY3R5cGVzLmJ5cmVmKHFwY19mcmVxdWVuY3kpKQotICAgIHFwY19mcmVxdWVuY3kgPSBmbG9hdChxcGNfZnJlcXVlbmN5LnZhbHVlKQotICAgIHFwYyA9IGN0eXBlcy53aW5kbGwuS2VybmVsMzIuUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIKLQotICAgIGRlZiBXaW5Ob3dGdW5jdGlvbkltcGwoKToKLSAgICAgIHFwYyhjdHlwZXMuYnlyZWYocXBjX3JldHVybikpCi0gICAgICByZXR1cm4gcXBjX3JldHVybi52YWx1ZSAvIHFwY19mcmVxdWVuY3kKLQotICBlbHNlOgotICAgIF9DTE9DSyA9IF9XSU5fTE9SRVMKLSAgICBrZXJuZWwzMiA9IChjdHlwZXMuY2RsbC5rZXJuZWwzMgotICAgICAgICAgICAgICAgIGlmIHBsYXQuc3RhcnRzd2l0aChfUExBVEZPUk1TWydjeWd3aW4nXSkKLSAgICAgICAgICAgICAgICBlbHNlIGN0eXBlcy53aW5kbGwua2VybmVsMzIpCi0gICAgZ2V0X3RpY2tfY291bnRfNjQgPSBnZXRhdHRyKGtlcm5lbDMyLCAnR2V0VGlja0NvdW50NjQnLCBOb25lKQotCi0gICAgIyBXaW5kb3dzIFZpc3RhIG9yIG5ld2VyCi0gICAgaWYgZ2V0X3RpY2tfY291bnRfNjQ6Ci0gICAgICBnZXRfdGlja19jb3VudF82NC5yZXN0eXBlID0gY3R5cGVzLmNfdWxvbmdsb25nCi0KLSAgICAgIGRlZiBXaW5Ob3dGdW5jdGlvbkltcGwoKToKLSAgICAgICAgcmV0dXJuIGdldF90aWNrX2NvdW50XzY0KCkgLyAxMDAwLjAKLQotICAgIGVsc2U6ICAjIFByZSBWaXN0YS4KLSAgICAgIGdldF90aWNrX2NvdW50ID0ga2VybmVsMzIuR2V0VGlja0NvdW50Ci0gICAgICBnZXRfdGlja19jb3VudC5yZXN0eXBlID0gY3R5cGVzLmNfdWludDMyCi0gICAgICBnZXRfdGlja19jb3VudF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQotCi0gICAgICBkZWYgV2luTm93RnVuY3Rpb25JbXBsKCk6Ci0gICAgICAgIGdsb2JhbCBHRVRfVElDS19DT1VOVF9MQVNUX05PVyAgIyBweWxpbnQ6IGRpc2FibGU9Z2xvYmFsLXN0YXRlbWVudAotICAgICAgICBnbG9iYWwgR0VUX1RJQ0tfQ09VTlRfV1JBUEFST1VORFMgICMgcHlsaW50OiBkaXNhYmxlPWdsb2JhbC1zdGF0ZW1lbnQKLSAgICAgICAgd2l0aCBnZXRfdGlja19jb3VudF9sb2NrOgotICAgICAgICAgIGN1cnJlbnRfc2FtcGxlID0gZ2V0X3RpY2tfY291bnQoKQotICAgICAgICAgIGlmIGN1cnJlbnRfc2FtcGxlIDwgR0VUX1RJQ0tfQ09VTlRfTEFTVF9OT1c6Ci0gICAgICAgICAgICBHRVRfVElDS19DT1VOVF9XUkFQQVJPVU5EUyArPSAxCi0gICAgICAgICAgR0VUX1RJQ0tfQ09VTlRfTEFTVF9OT1cgPSBjdXJyZW50X3NhbXBsZQotICAgICAgICAgIGZpbmFsX21zID0gR0VUX1RJQ0tfQ09VTlRfV1JBUEFST1VORFMgPDwgMzIKLSAgICAgICAgICBmaW5hbF9tcyArPSBHRVRfVElDS19DT1VOVF9MQVNUX05PVwotICAgICAgICAgIHJldHVybiBmaW5hbF9tcyAvIDEwMDAuMAotCi0gIF9OT1dfRlVOQ1RJT04gPSBXaW5Ob3dGdW5jdGlvbkltcGwKLQotCi1kZWYgSW5pdGlhbGl6ZU5vd0Z1bmN0aW9uKHBsYXQpOgotICAiIiJTZXRzIGEgbW9ub3RvbmljIGNsb2NrIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS4KLQotICAgIEFyZ3M6Ci0gICAgICBwbGF0OiBQbGF0Zm9ybSB0aGF0IGlzIGJlaW5nIHJ1biBvbi4KLSAgIiIiCi0gIGlmIHBsYXQuc3RhcnRzd2l0aChfUExBVEZPUk1TWydtYWMnXSk6Ci0gICAgSW5pdGlhbGl6ZU1hY05vd0Z1bmN0aW9uKHBsYXQpCi0KLSAgZWxpZiAocGxhdC5zdGFydHN3aXRoKF9QTEFURk9STVNbJ2xpbnV4J10pCi0gICAgICAgIG9yIHBsYXQuc3RhcnRzd2l0aChfUExBVEZPUk1TWydmcmVlYnNkJ10pCi0gICAgICAgIG9yIHBsYXQuc3RhcnRzd2l0aChfUExBVEZPUk1TWydic2QnXSkKLSAgICAgICAgb3IgcGxhdC5zdGFydHN3aXRoKF9QTEFURk9STVNbJ3N1bm9zJ10pKToKLSAgICBJbml0aWFsaXplTGludXhOb3dGdW5jdGlvbihwbGF0KQotCi0gIGVsaWYgKHBsYXQuc3RhcnRzd2l0aChfUExBVEZPUk1TWyd3aW5kb3dzJ10pCi0gICAgICAgIG9yIHBsYXQuc3RhcnRzd2l0aChfUExBVEZPUk1TWydjeWd3aW4nXSkpOgotICAgIEluaXRpYWxpemVXaW5Ob3dGdW5jdGlvbihwbGF0KQotCi0gIGVsc2U6Ci0gICAgcmFpc2UgUnVudGltZUVycm9yKCclcyBpcyBub3QgYSBzdXBwb3J0ZWQgcGxhdGZvcm0uJyAlIHBsYXQpCi0KLSAgZ2xvYmFsIF9OT1dfRlVOQ1RJT04KLSAgZ2xvYmFsIF9DTE9DSwotICBhc3NlcnQgX05PV19GVU5DVElPTiwgJ05vdyBmdW5jdGlvbiBub3QgcHJvcGVybHkgc2V0IGR1cmluZyBpbml0aWFsaXphdGlvbi4nCi0gIGFzc2VydCBfQ0xPQ0ssICdDbG9jayBub3QgcHJvcGVybHkgc2V0IGR1cmluZyBpbml0aWFsaXphdGlvbi4nCi0KLQotZGVmIE5vdygpOgotICByZXR1cm4gX05PV19GVU5DVElPTigpICogMWU2ICAjIGNvbnZlcnQgZnJvbSBzZWNvbmRzIHRvIG1pY3Jvc2Vjb25kcwotCi0KLWRlZiBHZXRDbG9jaygpOgotICByZXR1cm4gX0NMT0NLCi0KLQotSW5pdGlhbGl6ZU5vd0Z1bmN0aW9uKHN5cy5wbGF0Zm9ybSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV90cmFjZV9ldmVudC9weV90cmFjZV9ldmVudC90cmFjZV90aW1lX3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L3RyYWNlX3RpbWVfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNTRiZDYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3RyYWNlX2V2ZW50L3B5X3RyYWNlX2V2ZW50L3RyYWNlX3RpbWVfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBwbGF0Zm9ybQotaW1wb3J0IHN5cwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gcHlfdHJhY2VfZXZlbnQgaW1wb3J0IHRyYWNlX3RpbWUKLQotCi1jbGFzcyBUaW1lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAjIEhlbHBlciBtZXRob2RzLgotICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotICBkZWYgUmVwbGFjZVBsYXRmb3JtUHJvY2Vzc29yQ2FsbChzZWxmLCBmKToKLSAgICB0cnk6Ci0gICAgICBvbGRfcHJvYyA9IHBsYXRmb3JtLnByb2Nlc3NvcgotICAgICAgcGxhdGZvcm0ucHJvY2Vzc29yID0gZgotICAgICAgeWllbGQKLSAgICBmaW5hbGx5OgotICAgICAgcGxhdGZvcm0ucHJvY2Vzc29yID0gb2xkX3Byb2MKLQotICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotICBkZWYgUmVwbGFjZVFQQ0NoZWNrKHNlbGYsIGYpOgotICAgIHRyeToKLSAgICAgIG9sZF9xcGMgPSB0cmFjZV90aW1lLklzUVBDVXNhYmxlCi0gICAgICB0cmFjZV90aW1lLklzUVBDVXNhYmxlID0gZgotICAgICAgeWllbGQKLSAgICBmaW5hbGx5OgotICAgICAgdHJhY2VfdGltZS5Jc1FQQ1VzYWJsZSA9IG9sZF9xcGMKLQotICAjIFBsYXRmb3JtIGRldGVjdGlvbiB0ZXN0cy4KLSAgZGVmIHRlc3RJbml0aWFsaXplTm93RnVuY3Rpb25fcGxhdGZvcm1Ob3RTdXBwb3J0ZWQoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgotICAgICAgdHJhY2VfdGltZS5Jbml0aWFsaXplTm93RnVuY3Rpb24oJ2ludmFsaWRfcGxhdGZvcm0nKQotCi0gIGRlZiB0ZXN0SW5pdGlhbGl6ZU5vd0Z1bmN0aW9uX3dpbmRvd3Moc2VsZik6Ci0gICAgaWYgbm90IChzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCh0cmFjZV90aW1lLl9QTEFURk9STVNbJ3dpbmRvd3MnXSkKLSAgICAgICAgICAgIG9yIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKHRyYWNlX3RpbWUuX1BMQVRGT1JNU1snY3lnd2luJ10pKToKLSAgICAgIHJldHVybiBUcnVlCi0gICAgdHJhY2VfdGltZS5Jbml0aWFsaXplTm93RnVuY3Rpb24oc3lzLnBsYXRmb3JtKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFjZV90aW1lLkdldENsb2NrKCkgPT0gdHJhY2VfdGltZS5fV0lOX0hJUkVTCi0gICAgICAgICAgICAgICAgICAgIG9yIHRyYWNlX3RpbWUuR2V0Q2xvY2soKSA9PSB0cmFjZV90aW1lLl9XSU5fTE9SRVMpCi0KLSAgZGVmIHRlc3RJbml0aWFsaXplTm93RnVuY3Rpb25fbGludXgoc2VsZik6Ci0gICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKHRyYWNlX3RpbWUuX1BMQVRGT1JNU1snbGludXgnXSk6Ci0gICAgICByZXR1cm4gVHJ1ZQotICAgIHRyYWNlX3RpbWUuSW5pdGlhbGl6ZU5vd0Z1bmN0aW9uKHN5cy5wbGF0Zm9ybSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlX3RpbWUuR2V0Q2xvY2soKSwgdHJhY2VfdGltZS5fTElOVVhfQ0xPQ0spCi0KLSAgZGVmIHRlc3RJbml0aWFsaXplTm93RnVuY3Rpb25fbWFjKHNlbGYpOgotICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCh0cmFjZV90aW1lLl9QTEFURk9STVNbJ21hYyddKToKLSAgICAgIHJldHVybiBUcnVlCi0gICAgdHJhY2VfdGltZS5Jbml0aWFsaXplTm93RnVuY3Rpb24oc3lzLnBsYXRmb3JtKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2VfdGltZS5HZXRDbG9jaygpLCB0cmFjZV90aW1lLl9NQUNfQ0xPQ0spCi0KLSAgIyBXaW5kb3dzIFRlc3RzCi0gIGRlZiB0ZXN0SXNRUENVc2FibGVfYnVnZ3lBdGhsb25Qcm9jUmV0dXJuc0ZhbHNlKHNlbGYpOgotICAgIGlmIG5vdCAoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgodHJhY2VfdGltZS5fUExBVEZPUk1TWyd3aW5kb3dzJ10pCi0gICAgICAgICAgICBvciBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCh0cmFjZV90aW1lLl9QTEFURk9STVNbJ2N5Z3dpbiddKSk6Ci0gICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIEJ1Z2d5QXRobG9uUHJvYygpOgotICAgICAgcmV0dXJuICdBTUQ2NCBGYW1pbHkgMTUgTW9kZWwgMjMgU3RlcHBpbmcgNiwgQXV0aGVudGljQU1EJwotCi0gICAgd2l0aCBzZWxmLlJlcGxhY2VQbGF0Zm9ybVByb2Nlc3NvckNhbGwoQnVnZ3lBdGhsb25Qcm9jKToKLSAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhY2VfdGltZS5Jc1FQQ1VzYWJsZSgpKQotCi0gIGRlZiB0ZXN0SXNRUENVc2FibGVfcmV0dXJuc1RydWVPbldpbmRvd3Moc2VsZik6Ci0gICAgaWYgbm90IChzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCh0cmFjZV90aW1lLl9QTEFURk9STVNbJ3dpbmRvd3MnXSkKLSAgICAgICAgICAgIG9yIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKHRyYWNlX3RpbWUuX1BMQVRGT1JNU1snY3lnd2luJ10pKToKLSAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgUHJvYygpOgotICAgICAgcmV0dXJuICdJbnRlbDY0IEZhbWlseSAxNSBNb2RlbCAyMyBTdGVwcGluZyA2LCBHZW51aW5lSW50ZWwnCi0KLSAgICB3aXRoIHNlbGYuUmVwbGFjZVBsYXRmb3JtUHJvY2Vzc29yQ2FsbChQcm9jKToKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFjZV90aW1lLklzUVBDVXNhYmxlKCkpCi0KLSAgZGVmIHRlc3RHZXRXaW5Ob3dGdW5jdGlvbl9RUEMoc2VsZik6Ci0gICAgaWYgbm90IChzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCh0cmFjZV90aW1lLl9QTEFURk9STVNbJ3dpbmRvd3MnXSkKLSAgICAgICAgICAgIG9yIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKHRyYWNlX3RpbWUuX1BMQVRGT1JNU1snY3lnd2luJ10pKToKLSAgICAgIHJldHVybiBUcnVlCi0gICAgIyBUZXN0IHJlcXVpcmVzIFFQQyB0byBiZSBhdmFpbGFibGUgb24gcGxhdGZvcm0uCi0gICAgaWYgbm90IHRyYWNlX3RpbWUuSXNRUENVc2FibGUoKToKLSAgICAgIHJldHVybiBUcnVlCi0gICAgc2VsZi5hc3NlcnRHcmVhdGVyKHRyYWNlX3RpbWUubW9ub3RvbmljKCksIDApCi0KLSAgIyBXb3JrcyBldmVuIGlmIFFQQyB3b3VsZCB3b3JrLgotICBkZWYgdGVzdEdldFdpbk5vd0Z1bmN0aW9uX0dldFRpY2tDb3VudChzZWxmKToKLSAgICBpZiBub3QgKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKHRyYWNlX3RpbWUuX1BMQVRGT1JNU1snd2luZG93cyddKQotICAgICAgICAgICAgb3Igc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgodHJhY2VfdGltZS5fUExBVEZPUk1TWydjeWd3aW4nXSkpOgotICAgICAgcmV0dXJuIFRydWUKLSAgICB3aXRoIHNlbGYuUmVwbGFjZVFQQ0NoZWNrKGxhbWJkYTogRmFsc2UpOgotICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHRyYWNlX3RpbWUubW9ub3RvbmljKCksIDApCi0KLSAgIyBMaW51eCB0ZXN0cy4KLSAgZGVmIHRlc3RHZXRDbG9ja0dldFRpbWVDbG9ja051bWJlcl9saW51eChzZWxmKToKLSAgICBzZWxmLmFzc2VydEVxdWFscyh0cmFjZV90aW1lLkdldENsb2NrR2V0VGltZUNsb2NrTnVtYmVyKCdsaW51eCcpLCAxKQotCi0gIGRlZiB0ZXN0R2V0Q2xvY2tHZXRUaW1lQ2xvY2tOdW1iZXJfZnJlZWJzZChzZWxmKToKLSAgICBzZWxmLmFzc2VydEVxdWFscyh0cmFjZV90aW1lLkdldENsb2NrR2V0VGltZUNsb2NrTnVtYmVyKCdmcmVlYnNkJyksIDQpCi0KLSAgZGVmIHRlc3RHZXRDbG9ja0dldFRpbWVDbG9ja051bWJlcl9ic2Qoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbHModHJhY2VfdGltZS5HZXRDbG9ja0dldFRpbWVDbG9ja051bWJlcignYnNkJyksIDMpCi0KLSAgZGVmIHRlc3RHZXRDbG9ja0dldFRpbWVDbG9ja051bWJlcl9zdW5vcyhzZWxmKToKLSAgICBzZWxmLmFzc2VydEVxdWFscyh0cmFjZV90aW1lLkdldENsb2NrR2V0VGltZUNsb2NrTnVtYmVyKCdzdW5vczUnKSwgNCkKLQotICAjIFNtb2tlIFRlc3QuCi0gIGRlZiB0ZXN0TW9ub3RvbmljKHNlbGYpOgotICAgIHRpbWVfb25lID0gdHJhY2VfdGltZS5Ob3coKQotICAgIGZvciBfIGluIHhyYW5nZSgxMDAwKToKLSAgICAgIHRpbWVfdHdvID0gdHJhY2VfdGltZS5Ob3coKQotICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwodGltZV9vbmUsIHRpbWVfdHdvKQotICAgICAgdGltZV9vbmUgPSB0aW1lX3R3bwotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKLSAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9QUkVTVUJNSVQucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvUFJFU1VCTUlULnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWQ5MmZlLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9QUkVTVUJNSVQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLQotZGVmIENoZWNrQ2hhbmdlT25VcGxvYWQoaW5wdXRfYXBpLCBvdXRwdXRfYXBpKToKLSAgcmV0dXJuIF9Db21tb25DaGVja3MoaW5wdXRfYXBpLCBvdXRwdXRfYXBpKQotCi0KLWRlZiBDaGVja0NoYW5nZU9uQ29tbWl0KGlucHV0X2FwaSwgb3V0cHV0X2FwaSk6Ci0gIHJldHVybiBfQ29tbW9uQ2hlY2tzKGlucHV0X2FwaSwgb3V0cHV0X2FwaSkKLQotCi1kZWYgX0NvbW1vbkNoZWNrcyhpbnB1dF9hcGksIG91dHB1dF9hcGkpOgotICByZXN1bHRzID0gW10KLSAgcmVzdWx0cyArPSBpbnB1dF9hcGkuUnVuVGVzdHMoaW5wdXRfYXBpLmNhbm5lZF9jaGVja3MuR2V0UHlsaW50KAotICAgICAgaW5wdXRfYXBpLCBvdXRwdXRfYXBpLCBleHRyYV9wYXRoc19saXN0PV9HZXRQYXRoc1RvUHJlcGVuZChpbnB1dF9hcGkpLAotICAgICAgcHlsaW50cmM9Jy4uLy4uL3B5bGludHJjJykpCi0gIHJldHVybiByZXN1bHRzCi0KLQotZGVmIF9HZXRQYXRoc1RvUHJlcGVuZChpbnB1dF9hcGkpOgotICBwcm9qZWN0X2RpciA9IGlucHV0X2FwaS5QcmVzdWJtaXRMb2NhbFBhdGgoKQotICBjYXRhcHVsdF9kaXIgPSBpbnB1dF9hcGkub3NfcGF0aC5qb2luKHByb2plY3RfZGlyLCAnLi4nLCAnLi4nKQotICByZXR1cm4gWwotICAgICAgcHJvamVjdF9kaXIsCi0gICAgICBpbnB1dF9hcGkub3NfcGF0aC5qb2luKGNhdGFwdWx0X2RpciwgJ2RlcGVuZGVuY3lfbWFuYWdlcicpLAotICAgICAgaW5wdXRfYXBpLm9zX3BhdGguam9pbihjYXRhcHVsdF9kaXIsICdkZXZpbCcpLAotICAgICAgaW5wdXRfYXBpLm9zX3BhdGguam9pbihjYXRhcHVsdF9kaXIsICd0aGlyZF9wYXJ0eScsICdtb2NrJyksCi0gICAgICBpbnB1dF9hcGkub3NfcGF0aC5qb2luKGNhdGFwdWx0X2RpciwgJ3RoaXJkX3BhcnR5JywgJ3B5ZmFrZWZzJyksCi0gIF0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJhMDg5Ny4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBmdW5jdG9vbHMKLWltcG9ydCBpbnNwZWN0Ci1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi1pbXBvcnQgcGxhdGZvcm0KLQotCi1kZWYgR2V0Q2F0YXB1bHREaXIoKToKLSAgcmV0dXJuIG9zLnBhdGgubm9ybXBhdGgoCi0gICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJy4uJywgJy4uJykpCi0KLQotZGVmIElzUnVubmluZ09uQ3Jvc0RldmljZSgpOgotICAiIiJSZXR1cm5zIFRydWUgaWYgd2UncmUgb24gYSBDaHJvbWVPUyBkZXZpY2UuIiIiCi0gIGxzYl9yZWxlYXNlID0gJy9ldGMvbHNiLXJlbGVhc2UnCi0gIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdsaW51eCcpIGFuZCBvcy5wYXRoLmV4aXN0cyhsc2JfcmVsZWFzZSk6Ci0gICAgd2l0aCBvcGVuKGxzYl9yZWxlYXNlLCAncicpIGFzIGY6Ci0gICAgICByZXMgPSBmLnJlYWQoKQotICAgICAgaWYgcmVzLmNvdW50KCdDSFJPTUVPU19SRUxFQVNFX05BTUUnKToKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgcmV0dXJuIEZhbHNlCi0KLQotZGVmIEdldEhvc3RPc05hbWUoKToKLSAgaWYgSXNSdW5uaW5nT25Dcm9zRGV2aWNlKCk6Ci0gICAgcmV0dXJuICdjaHJvbWVvcycKLSAgZWxpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKToKLSAgICByZXR1cm4gJ2xpbnV4JwotICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICByZXR1cm4gJ21hYycKLSAgZWxpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICByZXR1cm4gJ3dpbicKLQotCi1kZWYgR2V0SG9zdEFyY2hOYW1lKCk6Ci0gIHJldHVybiBwbGF0Zm9ybS5tYWNoaW5lKCkKLQotCi1kZWYgX0V4ZWN1dGFibGVFeHRlbnNpb25zKCk6Ci0gICMgcGF0aGV4dCBpcywgZS5nLiAnLmNvbTsuZXhlOy5iYXQ7LmNtZCcKLSAgZXh0cyA9IG9zLmdldGVudignUEFUSEVYVCcpLnNwbGl0KCc7JykgI2UuZy4gWycuY29tJywnLmV4ZScsJy5iYXQnLCcuY21kJ10KLSAgcmV0dXJuIFt4WzE6XS51cHBlcigpIGZvciB4IGluIGV4dHNdICNlLmcuIFsnQ09NJywnRVhFJywnQkFUJywnQ01EJ10KLQotCi1kZWYgSXNFeGVjdXRhYmxlKHBhdGgpOgotICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKToKLSAgICBpZiBoYXNhdHRyKG9zLCAnbmFtZScpIGFuZCBvcy5uYW1lID09ICdudCc6Ci0gICAgICByZXR1cm4gcGF0aC5zcGxpdCgnLicpWy0xXS51cHBlcigpIGluIF9FeGVjdXRhYmxlRXh0ZW5zaW9ucygpCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBvcy5hY2Nlc3MocGF0aCwgb3MuWF9PSykKLSAgZWxzZToKLSAgICByZXR1cm4gRmFsc2UKLQotCi1kZWYgX0FkZERpclRvUHl0aG9uUGF0aCgqcGF0aF9wYXJ0cyk6Ci0gIHBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKCpwYXRoX3BhcnRzKSkKLSAgaWYgb3MucGF0aC5pc2RpcihwYXRoKSBhbmQgcGF0aCBub3QgaW4gc3lzLnBhdGg6Ci0gICAgIyBTb21lIGNhbGxzaXRlIHRoYXQgdXNlIHRlbGVtZXRyeSBhc3N1bWVzIHRoYXQgc3lzLnBhdGhbMF0gaXMgdGhlIGRpcmVjdG9yeQotICAgICMgY29udGFpbmluZyB0aGUgc2NyaXB0LCBzbyB3ZSBhZGQgdGhlc2UgZXh0cmEgcGF0aHMgdG8gcmlnaHQgYWZ0ZXIgaXQuCi0gICAgc3lzLnBhdGguaW5zZXJ0KDEsIHBhdGgpCi0KLV9BZGREaXJUb1B5dGhvblBhdGgob3MucGF0aC5qb2luKEdldENhdGFwdWx0RGlyKCksICdkZXZpbCcpKQotX0FkZERpclRvUHl0aG9uUGF0aChvcy5wYXRoLmpvaW4oR2V0Q2F0YXB1bHREaXIoKSwgJ2RlcGVuZGVuY3lfbWFuYWdlcicpKQotX0FkZERpclRvUHl0aG9uUGF0aChvcy5wYXRoLmpvaW4oR2V0Q2F0YXB1bHREaXIoKSwgJ3RoaXJkX3BhcnR5JywgJ21vY2snKSkKLSMgbW94MyBpcyBuZWVkZWQgZm9yIHB5ZmFrZWZzIHVzYWdlLCBidXQgbm90IGZvciBweWxpbnQuCi1fQWRkRGlyVG9QeXRob25QYXRoKG9zLnBhdGguam9pbihHZXRDYXRhcHVsdERpcigpLCAndGhpcmRfcGFydHknLCAnbW94MycpKQotX0FkZERpclRvUHl0aG9uUGF0aCgKLSAgICBvcy5wYXRoLmpvaW4oR2V0Q2F0YXB1bHREaXIoKSwgJ3RoaXJkX3BhcnR5JywgJ3B5ZmFrZWZzJykpCi0KLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHRpbWVvdXRfcmV0cnkKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHJlcmFpc2VyX3RocmVhZAotCi0KLSMgRGVjb3JhdG9yIHRoYXQgYWRkcyB0aW1lb3V0IGZ1bmN0aW9uYWxpdHkgdG8gYSBmdW5jdGlvbi4KLWRlZiBUaW1lb3V0KGRlZmF1bHRfdGltZW91dCk6Ci0gIHJldHVybiBsYW1iZGEgZnVuYzogVGltZW91dERlY28oZnVuYywgZGVmYXVsdF90aW1lb3V0KQotCi0jIE5vdGU6IEV2ZW4gdGhvdWdoIHRoZSAidGltZW91dCIga2V5d29yZCBhcmd1bWVudCBpcyB0aGUgb25seQotIyBrZXl3b3JkIGFyZ3VtZW50IHRoYXQgd2lsbCBuZWVkIHRvIGJlIGdpdmVuIHRvIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24sCi0jIHdlIHN0aWxsIGhhdmUgdG8gdXNlIHRoZSAqKmt3YXJncyBzeW50YXgsIGJlY2F1c2Ugd2UgaGF2ZSB0byB1c2UKLSMgdGhlICphcmdzIHN5bnRheCBoZXJlIGJlZm9yZSAoc2luY2UgdGhlIGRlY29yYXRvciBkZWNvcmF0ZXMgZnVuY3Rpb25zCi0jIHdpdGggZGlmZmVyZW50IG51bWJlcnMgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMpIGFuZCBQeXRob24gZG9lc24ndCBhbGxvdwotIyBhIHNpbmdsZSBuYW1lZCBrZXl3b3JkIGFyZ3VtZW50IGFmdGVyICphcmdzLgotIyAoZS5nLiwgJ2RlZiBmb28oKmFyZ3MsIGJhcj00Mik6JyBpcyBhIHN5bnRheCBlcnJvcikKLQotZGVmIFRpbWVvdXREZWNvKGZ1bmMsIGRlZmF1bHRfdGltZW91dCk6Ci0gIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKLSAgZGVmIFJ1bldpdGhUaW1lb3V0KCphcmdzLCAqKmt3YXJncyk6Ci0gICAgaWYgJ3RpbWVvdXQnIGluIGt3YXJnczoKLSAgICAgIHRpbWVvdXQgPSBrd2FyZ3NbJ3RpbWVvdXQnXQotICAgIGVsc2U6Ci0gICAgICB0aW1lb3V0ID0gZGVmYXVsdF90aW1lb3V0Ci0gICAgdHJ5OgotICAgICAgcmV0dXJuIHRpbWVvdXRfcmV0cnkuUnVuKGZ1bmMsIHRpbWVvdXQsIDAsIGFyZ3M9YXJncykKLSAgICBleGNlcHQgcmVyYWlzZXJfdGhyZWFkLlRpbWVvdXRFcnJvcjoKLSAgICAgIHByaW50ICclcyB0aW1lZCBvdXQuJyAlIGZ1bmMuX19uYW1lX18KLSAgICAgIHJldHVybiBGYWxzZQotICByZXR1cm4gUnVuV2l0aFRpbWVvdXQKLQotCi1NSU5fUE9MTF9JTlRFUlZBTF9JTl9TRUNPTkRTID0gMC4xCi1NQVhfUE9MTF9JTlRFUlZBTF9JTl9TRUNPTkRTID0gNQotT1VUUFVUX0lOVEVSVkFMX0lOX1NFQ09ORFMgPSAzMDAKLQotZGVmIFdhaXRGb3IoY29uZGl0aW9uLCB0aW1lb3V0KToKLSAgIiIiV2FpdHMgZm9yIHVwIHRvIHx0aW1lb3V0fCBzZWNzIGZvciB0aGUgZnVuY3Rpb24gfGNvbmRpdGlvbnwgdG8gcmV0dXJuIFRydWUuCi0KLSAgUG9sbGluZyBmcmVxdWVuY3kgaXMgKGVsYXBzZWRfdGltZSAvIDEwKSwgd2l0aCBhIG1pbiBvZiAuMXMgYW5kIG1heCBvZiA1cy4KLQotICBSZXR1cm5zOgotICAgIFJlc3VsdCBvZiB8Y29uZGl0aW9ufCBmdW5jdGlvbiAoaWYgcHJlc2VudCkuCi0gICIiIgotICBkZWYgR2V0Q29uZGl0aW9uU3RyaW5nKCk6Ci0gICAgaWYgY29uZGl0aW9uLl9fbmFtZV9fID09ICc8bGFtYmRhPic6Ci0gICAgICB0cnk6Ci0gICAgICAgIHJldHVybiBpbnNwZWN0LmdldHNvdXJjZShjb25kaXRpb24pLnN0cmlwKCkKLSAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICBwYXNzCi0gICAgcmV0dXJuIGNvbmRpdGlvbi5fX25hbWVfXwotCi0gICMgRG8gYW4gaW5pdGlhbCBjaGVjayB0byBzZWUgaWYgaXRzIHRydWUuCi0gIHJlcyA9IGNvbmRpdGlvbigpCi0gIGlmIHJlczoKLSAgICByZXR1cm4gcmVzCi0gIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICBsYXN0X291dHB1dF90aW1lID0gc3RhcnRfdGltZQotICBlbGFwc2VkX3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKLSAgd2hpbGUgZWxhcHNlZF90aW1lIDwgdGltZW91dDoKLSAgICByZXMgPSBjb25kaXRpb24oKQotICAgIGlmIHJlczoKLSAgICAgIHJldHVybiByZXMKLSAgICBub3cgPSB0aW1lLnRpbWUoKQotICAgIGVsYXBzZWRfdGltZSA9IG5vdyAtIHN0YXJ0X3RpbWUKLSAgICBsYXN0X291dHB1dF9lbGFwc2VkX3RpbWUgPSBub3cgLSBsYXN0X291dHB1dF90aW1lCi0gICAgaWYgbGFzdF9vdXRwdXRfZWxhcHNlZF90aW1lID4gT1VUUFVUX0lOVEVSVkFMX0lOX1NFQ09ORFM6Ci0gICAgICBsYXN0X291dHB1dF90aW1lID0gdGltZS50aW1lKCkKLSAgICBwb2xsX2ludGVydmFsID0gbWluKG1heChlbGFwc2VkX3RpbWUgLyAxMC4sIE1JTl9QT0xMX0lOVEVSVkFMX0lOX1NFQ09ORFMpLAotICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1BPTExfSU5URVJWQUxfSU5fU0VDT05EUykKLSAgICB0aW1lLnNsZWVwKHBvbGxfaW50ZXJ2YWwpCi0gIHJhaXNlIFRpbWVvdXRFeGNlcHRpb24oJ1RpbWVkIG91dCB3aGlsZSB3YWl0aW5nICVkcyBmb3IgJXMuJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHRpbWVvdXQsIEdldENvbmRpdGlvblN0cmluZygpKSkKLQotY2xhc3MgVGltZW91dEV4Y2VwdGlvbihFeGNlcHRpb24pOgotICAiIiJUaGUgb3BlcmF0aW9uIGZhaWxlZCB0byBjb21wbGV0ZSBiZWNhdXNlIG9mIGEgdGltZW91dC4KLQotICBJdCBpcyBwb3NzaWJsZSB0aGF0IHdhaXRpbmcgZm9yIGEgbG9uZ2VyIHBlcmlvZCBvZiB0aW1lIHdvdWxkIHJlc3VsdCBpbiBhCi0gIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uLgotICAiIiIKLSAgcGFzcwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2F0ZXhpdF93aXRoX2xvZy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9hdGV4aXRfd2l0aF9sb2cucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMTdjMDkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2F0ZXhpdF93aXRoX2xvZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGF0ZXhpdAotaW1wb3J0IGxvZ2dpbmcKLQotCi1kZWYgX1dyYXBGdW5jdGlvbihmdW5jdGlvbik6Ci0gIGRlZiBfV3JhcHBlZEZuKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgbG9nZ2luZy5kZWJ1ZygnVHJ5IHJ1bm5pbmcgJXMnLCByZXByKGZ1bmN0aW9uKSkKLSAgICB0cnk6Ci0gICAgICBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpCi0gICAgICBsb2dnaW5nLmRlYnVnKCdEaWQgcnVuICVzJywgcmVwcihmdW5jdGlvbikpCi0gICAgZXhjZXB0IEV4Y2VwdGlvbjogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAotICAgICAgbG9nZ2luZy5leGNlcHRpb24oJ0V4Y2VwdGlvbiBydW5uaW5nICVzJywgcmVwcihmdW5jdGlvbikpCi0gIHJldHVybiBfV3JhcHBlZEZuCi0KLQotZGVmIFJlZ2lzdGVyKGZ1bmN0aW9uLCAqYXJncywgKiprd2FyZ3MpOgotICBhdGV4aXQucmVnaXN0ZXIoX1dyYXBGdW5jdGlvbihmdW5jdGlvbiksICphcmdzLCAqKmt3YXJncykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9iaW5hcnlfbWFuYWdlci5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9iaW5hcnlfbWFuYWdlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFmMDhjZi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvYmluYXJ5X21hbmFnZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBsb2dnaW5nCi0KLWltcG9ydCBkZXBlbmRlbmN5X21hbmFnZXIKLQotCi1jbGFzcyBCaW5hcnlNYW5hZ2VyKG9iamVjdCk6Ci0gICIiIiBUaGlzIGNsYXNzIGlzIGVmZmVjdGl2ZWx5IGEgc3ViY2xhc3Mgb2YgZGVwZW5kZW5jeV9tYW5hZ2VyLCBidXQgdXNlcyBhCi0gICAgICBkaWZmZXJlbnQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgRmV0Y2hQYXRoIGFuZCBMb2NhbFBhdGguCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWdfZmlsZXMpOgotICAgIGlmIG5vdCBjb25maWdfZmlsZXMgb3IgdHlwZShjb25maWdfZmlsZXMpICE9IGxpc3Q6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKAotICAgICAgICAgICdNdXN0IHN1cHBseSBhIGxpc3Qgb2YgY29uZmlnIGZpbGVzIHRvIHRoZSBCaW5hcnlNYW5hZ2VyJykKLSAgICBjb25maWdzID0gW2RlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnKGNvbmZpZykgZm9yIGNvbmZpZyBpbiBjb25maWdfZmlsZXNdCi0gICAgc2VsZi5fZGVwZW5kZW5jeV9tYW5hZ2VyID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lNYW5hZ2VyKGNvbmZpZ3MpCi0KLSAgZGVmIEZldGNoUGF0aFdpdGhWZXJzaW9uKHNlbGYsIGJpbmFyeV9uYW1lLCBvc19uYW1lLCBhcmNoLCBvc192ZXJzaW9uPU5vbmUpOgotICAgICIiIiBSZXR1cm4gYSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlIGZvciA8YmluYXJ5X25hbWU+LCBvciBOb25lIGlmIG5vdCBmb3VuZC4KLQotICAgIFdpbGwgYXR0ZW1wdCB0byBkb3dubG9hZCBmcm9tIGNsb3VkIHN0b3JhZ2UgaWYgbmVlZGVkLgotICAgICIiIgotICAgIHJldHVybiBzZWxmLl9XcmFwRGVwZW5kZW5jeU1hbmFnZXJGdW5jdGlvbigKLSAgICAgICAgc2VsZi5fZGVwZW5kZW5jeV9tYW5hZ2VyLkZldGNoUGF0aFdpdGhWZXJzaW9uLCBiaW5hcnlfbmFtZSwgb3NfbmFtZSwKLSAgICAgICAgYXJjaCwgb3NfdmVyc2lvbikKLQotICBkZWYgRmV0Y2hQYXRoKHNlbGYsIGJpbmFyeV9uYW1lLCBvc19uYW1lLCBhcmNoLCBvc192ZXJzaW9uPU5vbmUpOgotICAgICIiIiBSZXR1cm4gYSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlIGZvciA8YmluYXJ5X25hbWU+LCBvciBOb25lIGlmIG5vdCBmb3VuZC4KLQotICAgIFdpbGwgYXR0ZW1wdCB0byBkb3dubG9hZCBmcm9tIGNsb3VkIHN0b3JhZ2UgaWYgbmVlZGVkLgotICAgICIiIgotICAgIHJldHVybiBzZWxmLl9XcmFwRGVwZW5kZW5jeU1hbmFnZXJGdW5jdGlvbigKLSAgICAgICAgc2VsZi5fZGVwZW5kZW5jeV9tYW5hZ2VyLkZldGNoUGF0aCwgYmluYXJ5X25hbWUsIG9zX25hbWUsIGFyY2gsCi0gICAgICAgIG9zX3ZlcnNpb24pCi0KLSAgZGVmIExvY2FsUGF0aChzZWxmLCBiaW5hcnlfbmFtZSwgb3NfbmFtZSwgYXJjaCwgb3NfdmVyc2lvbj1Ob25lKToKLSAgICAiIiIgUmV0dXJuIGEgbG9jYWwgcGF0aCB0byB0aGUgZ2l2ZW4gYmluYXJ5IG5hbWUsIG9yIE5vbmUgaWYgbm90IGZvdW5kLgotCi0gICAgV2lsbCBub3QgZG93bmxvYWQgZnJvbSBjbG91ZF9zdG9yYWdlLgotICAgICIiIgotICAgIHJldHVybiBzZWxmLl9XcmFwRGVwZW5kZW5jeU1hbmFnZXJGdW5jdGlvbigKLSAgICAgICAgc2VsZi5fZGVwZW5kZW5jeV9tYW5hZ2VyLkxvY2FsUGF0aCwgYmluYXJ5X25hbWUsIG9zX25hbWUsIGFyY2gsCi0gICAgICAgIG9zX3ZlcnNpb24pCi0KLSAgZGVmIF9XcmFwRGVwZW5kZW5jeU1hbmFnZXJGdW5jdGlvbigKLSAgICAgIHNlbGYsIGZ1bmN0aW9uLCBiaW5hcnlfbmFtZSwgb3NfbmFtZSwgYXJjaCwgb3NfdmVyc2lvbik6Ci0gICAgcGxhdGZvcm0gPSAnJXNfJXMnICUgKG9zX25hbWUsIGFyY2gpCi0gICAgaWYgb3NfdmVyc2lvbjoKLSAgICAgIHRyeToKLSAgICAgICAgdmVyc2lvbmVkX3BsYXRmb3JtID0gJyVzXyVzXyVzJyAlIChvc19uYW1lLCBvc192ZXJzaW9uLCBhcmNoKQotICAgICAgICByZXR1cm4gZnVuY3Rpb24oYmluYXJ5X25hbWUsIHZlcnNpb25lZF9wbGF0Zm9ybSkKLSAgICAgIGV4Y2VwdCBkZXBlbmRlbmN5X21hbmFnZXIuTm9QYXRoRm91bmRFcnJvcjoKLSAgICAgICAgbG9nZ2luZy53YXJuaW5nKAotICAgICAgICAgICAgJ0Nhbm5vdCBmaW5kIHBhdGggZm9yICVzIG9uIHBsYXRmb3JtICVzLiBGYWxsaW5nIGJhY2sgdG8gJXMuJywKLSAgICAgICAgICAgIGJpbmFyeV9uYW1lLCB2ZXJzaW9uZWRfcGxhdGZvcm0sIHBsYXRmb3JtKQotICAgIHJldHVybiBmdW5jdGlvbihiaW5hcnlfbmFtZSwgcGxhdGZvcm0pCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9iaW5hcnlfbWFuYWdlcl91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9iaW5hcnlfbWFuYWdlcl91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NmMjFhZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvYmluYXJ5X21hbmFnZXJfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQganNvbgotaW1wb3J0IG9zCi0KLWZyb20gcHlmYWtlZnMgaW1wb3J0IGZha2VfZmlsZXN5c3RlbV91bml0dGVzdAotZnJvbSBkZXBlbmRlbmN5X21hbmFnZXIgaW1wb3J0IGV4Y2VwdGlvbnMKLQotZnJvbSBweV91dGlscyBpbXBvcnQgYmluYXJ5X21hbmFnZXIKLQotY2xhc3MgQmluYXJ5TWFuYWdlclRlc3QoZmFrZV9maWxlc3lzdGVtX3VuaXR0ZXN0LlRlc3RDYXNlKToKLSAgIyBUT0RPKGFpb2xvcyk6IGRpc2FibGUgY2xvdWQgc3RvcmFnZSB1c2UgZHVyaW5nIHRoaXMgdGVzdC4KLQotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5zZXRVcFB5ZmFrZWZzKCkKLSAgICAjIHB5bGludDogZGlzYWJsZT1iYWQtY29udGludWF0aW9uCi0gICAgc2VsZi5leHBlY3RlZF9kZXBlbmRlbmNpZXMgPSB7Ci0gICAgICAgICdkZXBfMSc6IHsKLSAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlcic6ICdkZXBlbmRlbmNpZXMvZmFrZV9jb25maWcnLAotICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2J1Y2tldCc6ICdjaHJvbWUtdGVsJywKLSAgICAgICAgICAnZmlsZV9pbmZvJzogewotICAgICAgICAgICAgJ2xpbnV4X3g4Nl82NCc6IHsKLSAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICc2NjFjZTkzNmIzMjc2ZjdlYzNkNjg3YWI2MmJlMDViOTZkNzk2ZjIxJywKLSAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnYmluL2xpbnV4L3g4Nl82NC9kZXBfMScKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnbWFjX3g4Nl82NCc6IHsKLSAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdjN2IxYmZjNjM5OWRjNjgzMDU4ZTg4ZGFjMWVmMGY4NzdlZGVhNzRiJywKLSAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnYmluL21hYy94ODZfNjQvZGVwXzEnCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ3dpbl9BTUQ2NCc6IHsKLSAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdhYzRmZWU4OWE1MTY2MmI5ZDkyMGJjZTQ0M2MxOWI5YjI5MjliMTk4JywKLSAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnYmluL3dpbi9BTUQ2NC9kZXBfMS5leGUnCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ3dpbl94ODYnOiB7Ci0gICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnZTI0NmUxODM1NTNlYTI2OTY3ZDdiMzIzZWEyNjllMzM1N2I5YzgzNycsCi0gICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJ2Jpbi93aW4veDg2L2RlcF8xLmV4ZScKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICdkZXBfMic6IHsKLSAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlcic6ICdkZXBlbmRlbmNpZXMvZmFrZV9jb25maWcnLAotICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2J1Y2tldCc6ICdjaHJvbWUtdGVsJywKLSAgICAgICAgICAnZmlsZV9pbmZvJzogewotICAgICAgICAgICAgJ2xpbnV4X3g4Nl82NCc6IHsKLSAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICcxM2E1N2VmYWU5YTY4MGFjMGYxNjBiMzU2N2UwMmU4MWY0YWM0OTNjJywKLSAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnYmluL2xpbnV4L3g4Nl82NC9kZXBfMicsCi0gICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsKLSAgICAgICAgICAgICAgICAgICcuLi8uLi9leGFtcGxlL2xvY2F0aW9uL2xpbnV4L2RlcF8yJywKLSAgICAgICAgICAgICAgICAgICcuLi8uLi9leGFtcGxlL2xvY2F0aW9uMi9saW51eC9kZXBfMicKLSAgICAgICAgICAgICAgXQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdtYWNfeDg2XzY0JzogewotICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9oYXNoJzogJ2QxMGMwZGRhYTg1ODZiMjA0NDllOTUxMjE2YmVlODUyZmEwZjg4NTAnLAotICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICdiaW4vbWFjL3g4Nl82NC9kZXBfMicsCi0gICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsKLSAgICAgICAgICAgICAgICAgICcuLi8uLi9leGFtcGxlL2xvY2F0aW9uL21hYy9kZXBfMicsCi0gICAgICAgICAgICAgICAgICAnLi4vLi4vZXhhbXBsZS9sb2NhdGlvbjIvbWFjL2RlcF8yJwotICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ3dpbl9BTUQ2NCc6IHsKLSAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdmZDViNDE3Zjc4YzdmN2Q5MTkyYTk4OTY3MDU4NzA5ZGVkMWQzOTlkJywKLSAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnYmluL3dpbi9BTUQ2NC9kZXBfMi5leGUnLAotICAgICAgICAgICAgICAnbG9jYWxfcGF0aHMnOiBbCi0gICAgICAgICAgICAgICAgICAnLi4vLi4vZXhhbXBsZS9sb2NhdGlvbi93aW42NC9kZXBfMicsCi0gICAgICAgICAgICAgICAgICAnLi4vLi4vZXhhbXBsZS9sb2NhdGlvbjIvd2luNjQvZGVwXzInCi0gICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnd2luX3g4Nic6IHsKLSAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdjZjVjOGZlOTIwMzc4Y2UzMGQwNTdlNzY1OTFkNTdmNjNmZDMxYzFhJywKLSAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnYmluL3dpbi94ODYvZGVwXzIuZXhlJywKLSAgICAgICAgICAgICAgJ2xvY2FsX3BhdGhzJzogWwotICAgICAgICAgICAgICAgICAgJy4uLy4uL2V4YW1wbGUvbG9jYXRpb24vd2luMzIvZGVwXzInLAotICAgICAgICAgICAgICAgICAgJy4uLy4uL2V4YW1wbGUvbG9jYXRpb24yL3dpbjMyL2RlcF8yJwotICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ2FuZHJvaWRfa194NjQnOiB7Ci0gICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnMDkxNzdiZTJmZWQwMGI0NGRmMGU3Nzc5MzI4Mjg0MjU0NDBiMjNiMycsCi0gICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJ2Jpbi9hbmRyb2lkL3g2NC9rL2RlcF8yLmFwaycsCi0gICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsKLSAgICAgICAgICAgICAgICAgICcuLi8uLi9leGFtcGxlL2xvY2F0aW9uL2FuZHJvaWRfeDY0L2svZGVwXzInLAotICAgICAgICAgICAgICAgICAgJy4uLy4uL2V4YW1wbGUvbG9jYXRpb24yL2FuZHJvaWRfeDY0L2svZGVwXzInCi0gICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnYW5kcm9pZF9sX3g2NCc6IHsKLSAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICcwOTE3N2JlMmZlZDAwYjQ0ZGYwZTc3NzkzMjgyODQyNTQ0MGIyM2IzJywKLSAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnYmluL2FuZHJvaWQveDY0L2wvZGVwXzIuYXBrJywKLSAgICAgICAgICAgICAgJ2xvY2FsX3BhdGhzJzogWwotICAgICAgICAgICAgICAgICAgJy4uLy4uL2V4YW1wbGUvbG9jYXRpb24vYW5kcm9pZF94NjQvbC9kZXBfMicsCi0gICAgICAgICAgICAgICAgICAnLi4vLi4vZXhhbXBsZS9sb2NhdGlvbjIvYW5kcm9pZF94NjQvbC9kZXBfMicKLSAgICAgICAgICAgICAgXQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdhbmRyb2lkX2tfeDg2JzogewotICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9oYXNoJzogJ2JjZjAyYWYwMzk3MTNhNDhiNjliODliZDdmMGY5YzgxZWQ4MTgzYTQnLAotICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICdiaW4vYW5kcm9pZC94ODYvay9kZXBfMi5hcGsnLAotICAgICAgICAgICAgICAnbG9jYWxfcGF0aHMnOiBbCi0gICAgICAgICAgICAgICAgICAnLi4vLi4vZXhhbXBsZS9sb2NhdGlvbi9hbmRyb2lkX3g4Ni9rL2RlcF8yJywKLSAgICAgICAgICAgICAgICAgICcuLi8uLi9leGFtcGxlL2xvY2F0aW9uMi9hbmRyb2lkX3g4Ni9rL2RlcF8yJwotICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ2FuZHJvaWRfbF94ODYnOiB7Ci0gICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnMTJhNzRjZWMwNzEwMTdiYTExNjU1YjU3NDBiOGE1OGUyZjUyYTIxOScsCi0gICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJ2Jpbi9hbmRyb2lkL3g4Ni9sL2RlcF8yLmFwaycsCi0gICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsKLSAgICAgICAgICAgICAgICAgICcuLi8uLi9leGFtcGxlL2xvY2F0aW9uL2FuZHJvaWRfeDg2L2wvZGVwXzInLAotICAgICAgICAgICAgICAgICAgJy4uLy4uL2V4YW1wbGUvbG9jYXRpb24yL2FuZHJvaWRfeDg2L2wvZGVwXzInCi0gICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICdkZXBfMyc6IHsKLSAgICAgICAgICAnZmlsZV9pbmZvJzogewotICAgICAgICAgICAgJ2xpbnV4X3g4Nl82NCc6IHsKLSAgICAgICAgICAgICAgJ2xvY2FsX3BhdGhzJzogWwotICAgICAgICAgICAgICAgICAgJy4uLy4uL2V4YW1wbGUvbG9jYXRpb24vbGludXgvZGVwXzMnLAotICAgICAgICAgICAgICAgICAgJy4uLy4uL2V4YW1wbGUvbG9jYXRpb24yL2xpbnV4L2RlcF8zJwotICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ21hY194ODZfNjQnOiB7Ci0gICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsKLSAgICAgICAgICAgICAgICAgICcuLi8uLi9leGFtcGxlL2xvY2F0aW9uL21hYy9kZXBfMycsCi0gICAgICAgICAgICAgICAgICAnLi4vLi4vZXhhbXBsZS9sb2NhdGlvbjIvbWFjL2RlcF8zJwotICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ3dpbl9BTUQ2NCc6IHsKLSAgICAgICAgICAgICAgJ2xvY2FsX3BhdGhzJzogWwotICAgICAgICAgICAgICAgICAgJy4uLy4uL2V4YW1wbGUvbG9jYXRpb24vd2luNjQvZGVwXzMnLAotICAgICAgICAgICAgICAgICAgJy4uLy4uL2V4YW1wbGUvbG9jYXRpb24yL3dpbjY0L2RlcF8zJwotICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ3dpbl94ODYnOiB7Ci0gICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsKLSAgICAgICAgICAgICAgICAgICcuLi8uLi9leGFtcGxlL2xvY2F0aW9uL3dpbjMyL2RlcF8zJywKLSAgICAgICAgICAgICAgICAgICcuLi8uLi9leGFtcGxlL2xvY2F0aW9uMi93aW4zMi9kZXBfMycKLSAgICAgICAgICAgICAgXQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAjIHB5bGludDogZW5hYmxlPWJhZC1jb250aW51YXRpb24KLSAgICBmYWtlX2NvbmZpZyA9IHsKLSAgICAgICAgJ2NvbmZpZ190eXBlJzogJ0Jhc2VDb25maWcnLAotICAgICAgICAnZGVwZW5kZW5jaWVzJzogc2VsZi5leHBlY3RlZF9kZXBlbmRlbmNpZXMKLSAgICB9Ci0KLSAgICBzZWxmLmJhc2VfY29uZmlnID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhhbXBsZV9jb25maWcuanNvbicpCi0gICAgc2VsZi5mcy5DcmVhdGVGaWxlKHNlbGYuYmFzZV9jb25maWcsIGNvbnRlbnRzPWpzb24uZHVtcHMoZmFrZV9jb25maWcpKQotICAgIGxpbnV4X2ZpbGUgPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgIG9zLnBhdGguZGlybmFtZShzZWxmLmJhc2VfY29uZmlnKSwKLSAgICAgICAgb3MucGF0aC5qb2luKCcuLicsICcuLicsICdleGFtcGxlJywgJ2xvY2F0aW9uMicsICdsaW51eCcsICdkZXBfMicpKQotICAgIGFuZHJvaWRfZmlsZSA9IG9zLnBhdGguam9pbigKLSAgICAgICAgb3MucGF0aC5kaXJuYW1lKHNlbGYuYmFzZV9jb25maWcpLAotICAgICAgICAnLi4nLCAnLi4nLCAnZXhhbXBsZScsICdsb2NhdGlvbicsICdhbmRyb2lkX3g4NicsICdsJywgJ2RlcF8yJykKLSAgICBzZWxmLmV4cGVjdGVkX2RlcDJfbGludXhfZmlsZSA9IG9zLnBhdGguYWJzcGF0aChsaW51eF9maWxlKQotICAgIHNlbGYuZXhwZWN0ZWRfZGVwMl9hbmRyb2lkX2ZpbGUgPSBvcy5wYXRoLmFic3BhdGgoYW5kcm9pZF9maWxlKQotICAgIHNlbGYuZnMuQ3JlYXRlRmlsZShzZWxmLmV4cGVjdGVkX2RlcDJfbGludXhfZmlsZSkKLSAgICBzZWxmLmZzLkNyZWF0ZUZpbGUoc2VsZi5leHBlY3RlZF9kZXAyX2FuZHJvaWRfZmlsZSkKLQotICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgc2VsZi50ZWFyRG93blB5ZmFrZWZzKCkKLQotICBkZWYgdGVzdEluaXRpYWxpemF0aW9uTm9Db25maWcoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgIGJpbmFyeV9tYW5hZ2VyLkJpbmFyeU1hbmFnZXIoTm9uZSkKLQotICBkZWYgdGVzdEluaXRpYWxpemF0aW9uTWlzc2luZ0NvbmZpZyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgYmluYXJ5X21hbmFnZXIuQmluYXJ5TWFuYWdlcihvcy5wYXRoLmpvaW4oJ21pc3NpbmcnLCAncGF0aCcpKQotCi0gIGRlZiB0ZXN0SW5pdGlhbGl6YXRpb25XaXRoQ29uZmlnKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICBtYW5hZ2VyID0gYmluYXJ5X21hbmFnZXIuQmluYXJ5TWFuYWdlcihzZWxmLmJhc2VfY29uZmlnKQotICAgIG1hbmFnZXIgPSBiaW5hcnlfbWFuYWdlci5CaW5hcnlNYW5hZ2VyKFtzZWxmLmJhc2VfY29uZmlnXSkKLSAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc2VsZi5leHBlY3RlZF9kZXBlbmRlbmNpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZXIuX2RlcGVuZGVuY3lfbWFuYWdlci5fbG9va3VwX2RpY3QpCi0KLSAgZGVmIHRlc3RTdWNjZXNzZnVsRmV0Y2hQYXRoTm9Pc1ZlcnNpb24oc2VsZik6Ci0gICAgbWFuYWdlciA9IGJpbmFyeV9tYW5hZ2VyLkJpbmFyeU1hbmFnZXIoW3NlbGYuYmFzZV9jb25maWddKQotICAgIGZvdW5kX3BhdGggPSBtYW5hZ2VyLkZldGNoUGF0aCgnZGVwXzInLCAnbGludXgnLCAneDg2XzY0JykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZXhwZWN0ZWRfZGVwMl9saW51eF9maWxlLCBmb3VuZF9wYXRoKQotCi0gIGRlZiB0ZXN0U3VjY2Vzc2Z1bEZldGNoUGF0aE9zVmVyc2lvbihzZWxmKToKLSAgICBtYW5hZ2VyID0gYmluYXJ5X21hbmFnZXIuQmluYXJ5TWFuYWdlcihbc2VsZi5iYXNlX2NvbmZpZ10pCi0gICAgZm91bmRfcGF0aCA9IG1hbmFnZXIuRmV0Y2hQYXRoKCdkZXBfMicsICdhbmRyb2lkJywgJ3g4NicsICdsJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZXhwZWN0ZWRfZGVwMl9hbmRyb2lkX2ZpbGUsIGZvdW5kX3BhdGgpCi0KLSAgZGVmIHRlc3RTdWNjZXNzZnVsRmV0Y2hQYXRoRmFsbGJhY2tUb05vT3NWZXJzaW9uKHNlbGYpOgotICAgIG1hbmFnZXIgPSBiaW5hcnlfbWFuYWdlci5CaW5hcnlNYW5hZ2VyKFtzZWxmLmJhc2VfY29uZmlnXSkKLSAgICBmb3VuZF9wYXRoID0gbWFuYWdlci5GZXRjaFBhdGgoJ2RlcF8yJywgJ2xpbnV4JywgJ3g4Nl82NCcsICdmYWtlX3ZlcnNpb24nKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5leHBlY3RlZF9kZXAyX2xpbnV4X2ZpbGUsIGZvdW5kX3BhdGgpCi0KLSAgZGVmIHRlc3RGYWlsZWRGZXRjaFBhdGhNaXNzaW5nRGVwKHNlbGYpOgotICAgIG1hbmFnZXIgPSBiaW5hcnlfbWFuYWdlci5CaW5hcnlNYW5hZ2VyKFtzZWxmLmJhc2VfY29uZmlnXSkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4Y2VwdGlvbnMuTm9QYXRoRm91bmRFcnJvcik6Ci0gICAgICBtYW5hZ2VyLkZldGNoUGF0aCgnbWlzc2luZ19kZXAnLCAnbGludXgnLCAneDg2XzY0JykKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4Y2VwdGlvbnMuTm9QYXRoRm91bmRFcnJvcik6Ci0gICAgICBtYW5hZ2VyLkZldGNoUGF0aCgnbWlzc2luZ19kZXAnLCAnYW5kcm9pZCcsICd4ODYnLCAnbCcpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhleGNlcHRpb25zLk5vUGF0aEZvdW5kRXJyb3IpOgotICAgICAgbWFuYWdlci5GZXRjaFBhdGgoJ2RlcF8xJywgJ2xpbnV4JywgJ2JhZF9hcmNoJykKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4Y2VwdGlvbnMuTm9QYXRoRm91bmRFcnJvcik6Ci0gICAgICBtYW5hZ2VyLkZldGNoUGF0aCgnZGVwXzEnLCAnYmFkX29zJywgJ3g4NicpCi0KLSAgZGVmIHRlc3RTdWNjZXNzZnVsTG9jYWxQYXRoTm9Pc1ZlcnNpb24oc2VsZik6Ci0gICAgbWFuYWdlciA9IGJpbmFyeV9tYW5hZ2VyLkJpbmFyeU1hbmFnZXIoW3NlbGYuYmFzZV9jb25maWddKQotICAgIGZvdW5kX3BhdGggPSBtYW5hZ2VyLkxvY2FsUGF0aCgnZGVwXzInLCAnbGludXgnLCAneDg2XzY0JykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZXhwZWN0ZWRfZGVwMl9saW51eF9maWxlLCBmb3VuZF9wYXRoKQotCi0gIGRlZiB0ZXN0U3VjY2Vzc2Z1bExvY2FsUGF0aE9zVmVyc2lvbihzZWxmKToKLSAgICBtYW5hZ2VyID0gYmluYXJ5X21hbmFnZXIuQmluYXJ5TWFuYWdlcihbc2VsZi5iYXNlX2NvbmZpZ10pCi0gICAgZm91bmRfcGF0aCA9IG1hbmFnZXIuTG9jYWxQYXRoKCdkZXBfMicsICdhbmRyb2lkJywgJ3g4NicsICdsJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZXhwZWN0ZWRfZGVwMl9hbmRyb2lkX2ZpbGUsIGZvdW5kX3BhdGgpCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9jYW1lbF9jYXNlLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2NhbWVsX2Nhc2UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNzY4OTAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2NhbWVsX2Nhc2UucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCByZQotCi0KLWRlZiBUb1VuZGVyc2NvcmUob2JqKToKLSAgIiIiQ29udmVydHMgYSBzdHJpbmcsIGxpc3QsIG9yIGRpY3QgZnJvbSBjYW1lbENhc2UgdG8gbG93ZXJfd2l0aF91bmRlcnNjb3Jlcy4KLQotICBEZXNjZW5kcyByZWN1cnNpdmVseSBpbnRvIGxpc3RzIGFuZCBkaWN0cywgY29udmVydGluZyBhbGwgZGljdCBrZXlzLgotICBSZXR1cm5zIGEgbmV3bHkgYWxsb2NhdGVkIG9iamVjdCBvZiB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIGlucHV0LgotICAiIiIKLSAgaWYgaXNpbnN0YW5jZShvYmosIGJhc2VzdHJpbmcpOgotICAgIHJldHVybiByZS5zdWIoJyg/IV4pKFtBLVpdKyknLCByJ19cMScsIG9iaikubG93ZXIoKQotCi0gIGVsaWYgaXNpbnN0YW5jZShvYmosIGxpc3QpOgotICAgIHJldHVybiBbVG9VbmRlcnNjb3JlKGl0ZW0pIGZvciBpdGVtIGluIG9ial0KLQotICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBkaWN0KToKLSAgICBvdXRwdXQgPSB7fQotICAgIGZvciBrLCB2IGluIG9iai5pdGVyaXRlbXMoKToKLSAgICAgIGlmIGlzaW5zdGFuY2UodiwgbGlzdCkgb3IgaXNpbnN0YW5jZSh2LCBkaWN0KToKLSAgICAgICAgb3V0cHV0W1RvVW5kZXJzY29yZShrKV0gPSBUb1VuZGVyc2NvcmUodikKLSAgICAgIGVsc2U6Ci0gICAgICAgIG91dHB1dFtUb1VuZGVyc2NvcmUoayldID0gdgotICAgIHJldHVybiBvdXRwdXQKLQotICBlbHNlOgotICAgIHJldHVybiBvYmoKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9jYW1lbF9jYXNlX3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2NhbWVsX2Nhc2VfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NDhiYTIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2NhbWVsX2Nhc2VfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHB5X3V0aWxzIGltcG9ydCBjYW1lbF9jYXNlCi0KLQotY2xhc3MgQ2FtZWxDYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RTdHJpbmcoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChjYW1lbF9jYXNlLlRvVW5kZXJzY29yZSgnY2FtZWxDYXNlJyksICdjYW1lbF9jYXNlJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGNhbWVsX2Nhc2UuVG9VbmRlcnNjb3JlKCdDYW1lbENhc2UnKSwgJ2NhbWVsX2Nhc2UnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FtZWxfY2FzZS5Ub1VuZGVyc2NvcmUoJ0NhbWVsMkNhc2UnKSwgJ2NhbWVsMl9jYXNlJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGNhbWVsX2Nhc2UuVG9VbmRlcnNjb3JlKCdDYW1lbDJDYXNlMicpLCAnY2FtZWwyX2Nhc2UyJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGNhbWVsX2Nhc2UuVG9VbmRlcnNjb3JlKCcyMDEyUTMnKSwgJzIwMTJfcTMnKQotCi0gIGRlZiB0ZXN0TGlzdChzZWxmKToKLSAgICBjYW1lbF9jYXNlX2xpc3QgPSBbJ0NhbWVsQ2FzZScsIFsnTmVzdGVkTGlzdCddXQotICAgIHVuZGVyc2NvcmVfbGlzdCA9IFsnY2FtZWxfY2FzZScsIFsnbmVzdGVkX2xpc3QnXV0KLSAgICBzZWxmLmFzc2VydEVxdWFsKGNhbWVsX2Nhc2UuVG9VbmRlcnNjb3JlKGNhbWVsX2Nhc2VfbGlzdCksIHVuZGVyc2NvcmVfbGlzdCkKLQotICBkZWYgdGVzdERpY3Qoc2VsZik6Ci0gICAgY2FtZWxfY2FzZV9kaWN0ID0gewotICAgICAgICAnZ3B1JzogewotICAgICAgICAgICAgJ3ZlbmRvcklkJzogMTAwMCwKLSAgICAgICAgICAgICdkZXZpY2VJZCc6IDIwMDAsCi0gICAgICAgICAgICAndmVuZG9yU3RyaW5nJzogJ2FTdHJpbmcnLAotICAgICAgICAgICAgJ2RldmljZVN0cmluZyc6ICdiU3RyaW5nJ30sCi0gICAgICAgICdzZWNvbmRhcnlHcHVzJzogWwotICAgICAgICAgICAgeyd2ZW5kb3JJZCc6IDMwMDAsICdkZXZpY2VJZCc6IDQwMDAsCi0gICAgICAgICAgICAgJ3ZlbmRvclN0cmluZyc6ICdrJywgJ2RldmljZVN0cmluZyc6ICdsJ30KLSAgICAgICAgXQotICAgIH0KLSAgICB1bmRlcnNjb3JlX2RpY3QgPSB7Ci0gICAgICAgICdncHUnOiB7Ci0gICAgICAgICAgICAndmVuZG9yX2lkJzogMTAwMCwKLSAgICAgICAgICAgICdkZXZpY2VfaWQnOiAyMDAwLAotICAgICAgICAgICAgJ3ZlbmRvcl9zdHJpbmcnOiAnYVN0cmluZycsCi0gICAgICAgICAgICAnZGV2aWNlX3N0cmluZyc6ICdiU3RyaW5nJ30sCi0gICAgICAgICdzZWNvbmRhcnlfZ3B1cyc6IFsKLSAgICAgICAgICAgIHsndmVuZG9yX2lkJzogMzAwMCwgJ2RldmljZV9pZCc6IDQwMDAsCi0gICAgICAgICAgICAgJ3ZlbmRvcl9zdHJpbmcnOiAnaycsICdkZXZpY2Vfc3RyaW5nJzogJ2wnfQotICAgICAgICBdCi0gICAgfQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FtZWxfY2FzZS5Ub1VuZGVyc2NvcmUoY2FtZWxfY2FzZV9kaWN0KSwgdW5kZXJzY29yZV9kaWN0KQotCi0gIGRlZiB0ZXN0T3RoZXIoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChjYW1lbF9jYXNlLlRvVW5kZXJzY29yZShzZWxmKSwgc2VsZikKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9jaHJvbWVfYmluYXJpZXMuanNvbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9jaHJvbWVfYmluYXJpZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UzNTdjNy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvY2hyb21lX2JpbmFyaWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi17Ci0gICJjb25maWdfdHlwZSI6ICJCYXNlQ29uZmlnIiwKLSAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAiY2hyb21lX2NhbmFyeSI6IHsKLSAgICAgICJjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyIjogImJpbmFyeV9kZXBlbmRlbmNpZXMiLAotICAgICAgImNsb3VkX3N0b3JhZ2VfYnVja2V0IjogImNocm9tZS10ZWxlbWV0cnkiLAotICAgICAgImZpbGVfaW5mbyI6IHsKLSAgICAgICAgIm1hY194ODZfNjQiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICJiMzIxYTAxYjJjOThmZTYyYjE4NzY2NTViMTA0MzZjMjIyNmIxYjc2IiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICJiaW4vcmVmZXJlbmNlX2J1aWxkcy9jaHJvbWUtbWFjNjQuemlwIiwKLSAgICAgICAgICAicGF0aF93aXRoaW5fYXJjaGl2ZSI6ICJjaHJvbWUtbWFjL0dvb2dsZSBDaHJvbWUuYXBwL0NvbnRlbnRzL01hY09TL0dvb2dsZSBDaHJvbWUiLAotICAgICAgICAgICJ2ZXJzaW9uX2luX2NzIjogIjYyLjAuMzE5NC4wIgotICAgICAgICB9LAotICAgICAgICAid2luX0FNRDY0IjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiMmRhMWM3ODYxNzQ1YWIwZThmNjY2ZjExOWVlYjU4YzE0MTA3MTBjYyIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiYmluXFxyZWZlcmVuY2VfYnVpbGRcXGNocm9tZS13aW42NC1wZ28uemlwIiwKLSAgICAgICAgICAicGF0aF93aXRoaW5fYXJjaGl2ZSI6ICJjaHJvbWUtd2luNjQtcGdvXFxjaHJvbWUuZXhlIiwKLSAgICAgICAgICAidmVyc2lvbl9pbl9jcyI6ICI2Mi4wLjMxOTQuMCIKLSAgICAgICAgfSwKLSAgICAgICAgIndpbl94ODYiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICIyNzBhYmQxMTYyMTM4NmJlNjEyYWYwMmI3MDc4NDRjYmEwNmMwZGJkIiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICJiaW5cXHJlZmVyZW5jZV9idWlsZFxcY2hyb21lLXdpbjMyLXBnby56aXAiLAotICAgICAgICAgICJwYXRoX3dpdGhpbl9hcmNoaXZlIjogImNocm9tZS13aW4zMi1wZ29cXGNocm9tZS5leGUiLAotICAgICAgICAgICJ2ZXJzaW9uX2luX2NzIjogIjYyLjAuMzE5NC4wIgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiY2hyb21lX2RldiI6IHsKLSAgICAgICJjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyIjogImJpbmFyeV9kZXBlbmRlbmNpZXMiLAotICAgICAgImNsb3VkX3N0b3JhZ2VfYnVja2V0IjogImNocm9tZS10ZWxlbWV0cnkiLAotICAgICAgImZpbGVfaW5mbyI6IHsKLSAgICAgICAgImxpbnV4X3g4Nl82NCI6IHsKLSAgICAgICAgICAiY2xvdWRfc3RvcmFnZV9oYXNoIjogIjI1OTJlYzZmOGRkNTYyMjdjM2MyODFlM2NjY2VjZDZjOWJhNzJjYWQiLAotICAgICAgICAgICJkb3dubG9hZF9wYXRoIjogImJpbi9yZWZlcmVuY2VfYnVpbGQvY2hyb21lLWxpbnV4NjQuemlwIiwKLSAgICAgICAgICAicGF0aF93aXRoaW5fYXJjaGl2ZSI6ICJjaHJvbWUtbGludXg2NC9jaHJvbWUiLAotICAgICAgICAgICJ2ZXJzaW9uX2luX2NzIjogIjYyLjAuMzE5Mi4wIgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiY2hyb21lX3N0YWJsZSI6IHsKLSAgICAgICJjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyIjogImJpbmFyeV9kZXBlbmRlbmNpZXMiLAotICAgICAgImNsb3VkX3N0b3JhZ2VfYnVja2V0IjogImNocm9tZS10ZWxlbWV0cnkiLAotICAgICAgImZpbGVfaW5mbyI6IHsKLSAgICAgICAgImFuZHJvaWRfa19hcm1lYWJpLXY3YSI6IHsKLSAgICAgICAgICAiY2xvdWRfc3RvcmFnZV9oYXNoIjogIjk0OGM3NzYzMzVkM2EzOGQ2ZThkZTBkYmE1NzZlMTA5YzZiNTcyNGMiLAotICAgICAgICAgICJkb3dubG9hZF9wYXRoIjogImJpbi9yZWZlcmVuY2VfYnVpbGQvYW5kcm9pZF9rX2FybWVhYmktdjdhL0Nocm9tZVN0YWJsZS5hcGsiLAotICAgICAgICAgICJ2ZXJzaW9uX2luX2NzIjogIjYzLjAuMzIzOS4xMTEiCi0gICAgICAgIH0sCi0gICAgICAgICJhbmRyb2lkX2xfYXJtNjQtdjhhIjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiYTI1NjYzYWFkNzM5NzAwMmY2ZGZlNDRmYjk3MDg3ZmRkNzdkZjExOSIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiYmluL3JlZmVyZW5jZV9idWlsZC9hbmRyb2lkX2xfYXJtNjQtdjhhL0Nocm9tZVN0YWJsZS5hcGsiLAotICAgICAgICAgICJ2ZXJzaW9uX2luX2NzIjogIjYzLjAuMzIzOS4xMTEiCi0gICAgICAgIH0sCi0gICAgICAgICJhbmRyb2lkX2xfYXJtZWFiaS12N2EiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICI5NDhjNzc2MzM1ZDNhMzhkNmU4ZGUwZGJhNTc2ZTEwOWM2YjU3MjRjIiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICJiaW4vcmVmZXJlbmNlX2J1aWxkL2FuZHJvaWRfbF9hcm1lYWJpLXY3YS9DaHJvbWVTdGFibGUuYXBrIiwKLSAgICAgICAgICAidmVyc2lvbl9pbl9jcyI6ICI2My4wLjMyMzkuMTExIgotICAgICAgICB9LAotICAgICAgICAibGludXhfeDg2XzY0IjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiYjA1MDZlNDNkMjY4ZWFkYjg4N2NjYzg0NzY5NTY3NGY5ZDJlNTFhNSIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiYmluL3JlZmVyZW5jZV9idWlsZC9jaHJvbWUtbGludXg2NC56aXAiLAotICAgICAgICAgICJwYXRoX3dpdGhpbl9hcmNoaXZlIjogImNocm9tZS1saW51eDY0L2Nocm9tZSIsCi0gICAgICAgICAgInZlcnNpb25faW5fY3MiOiAiNjMuMC4zMjM5LjEwOCIKLSAgICAgICAgfSwKLSAgICAgICAgIm1hY194ODZfNjQiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICI1NmEzZGU0NWIzN2I3ZWI1NjMwMDZjMzBhNTQ4YTQ4OTI4Y2ZmYjM5IiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICJiaW4vcmVmZXJlbmNlX2J1aWxkcy9jaHJvbWUtbWFjNjQuemlwIiwKLSAgICAgICAgICAicGF0aF93aXRoaW5fYXJjaGl2ZSI6ICJjaHJvbWUtbWFjL0dvb2dsZSBDaHJvbWUuYXBwL0NvbnRlbnRzL01hY09TL0dvb2dsZSBDaHJvbWUiLAotICAgICAgICAgICJ2ZXJzaW9uX2luX2NzIjogIjYzLjAuMzIzOS4xMDgiCi0gICAgICAgIH0sCi0gICAgICAgICJ3aW5fQU1ENjQiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICJkMTUxMTMzNDA1NWM4OGZkOWZhNWU2ZTYzZmVlNjY2ZDliZThjNDMzIiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICJiaW5cXHJlZmVyZW5jZV9idWlsZFxcY2hyb21lLXdpbjY0LnppcCIsCi0gICAgICAgICAgInBhdGhfd2l0aGluX2FyY2hpdmUiOiAiY2hyb21lLXdpbjY0XFxjaHJvbWUuZXhlIiwKLSAgICAgICAgICAidmVyc2lvbl9pbl9jcyI6ICI2My4wLjMyMzkuMTA4IgotICAgICAgICB9LAotICAgICAgICAid2luX3g4NiI6IHsKLSAgICAgICAgICAiY2xvdWRfc3RvcmFnZV9oYXNoIjogIjllODY5YjNiMjVlZTdiNjgyNzEyY2RlNmVhZGRjMmQ3ZmE4NGNjOTAiLAotICAgICAgICAgICJkb3dubG9hZF9wYXRoIjogImJpblxccmVmZXJlbmNlX2J1aWxkXFxjaHJvbWUtd2luMzIuemlwIiwKLSAgICAgICAgICAicGF0aF93aXRoaW5fYXJjaGl2ZSI6ICJjaHJvbWUtd2luMzJcXGNocm9tZS5leGUiLAotICAgICAgICAgICJ2ZXJzaW9uX2luX2NzIjogIjYzLjAuMzIzOS4xMDgiCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9jbGFzc191dGlsLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2NsYXNzX3V0aWwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZWM0MzAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2NsYXNzX3V0aWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBpbnNwZWN0Ci0KLWRlZiBJc01ldGhvZE92ZXJyaWRkZW4ocGFyZW50X2NscywgY2hpbGRfY2xzLCBtZXRob2RfbmFtZSk6Ci0gIGFzc2VydCBpbnNwZWN0LmlzY2xhc3MocGFyZW50X2NscyksICclcyBzaG91bGQgYmUgYSBjbGFzcycgJSBwYXJlbnRfY2xzCi0gIGFzc2VydCBpbnNwZWN0LmlzY2xhc3MoY2hpbGRfY2xzKSwgJyVzIHNob3VsZCBiZSBhIGNsYXNzJyAlIGNoaWxkX2NscwotICBhc3NlcnQgcGFyZW50X2Nscy5fX2RpY3RfXy5nZXQobWV0aG9kX25hbWUpLCAnJXMgaGFzIG5vIG1ldGhvZCAlcycgJSAoCi0gICAgICBwYXJlbnRfY2xzLCBtZXRob2RfbmFtZSkKLQotICBpZiBjaGlsZF9jbHMuX19kaWN0X18uZ2V0KG1ldGhvZF9uYW1lKToKLSAgICAjIEl0J3Mgb3ZlcnJpZGRlbgotICAgIHJldHVybiBUcnVlCi0KLSAgaWYgcGFyZW50X2NscyBpbiBjaGlsZF9jbHMuX19iYXNlc19fOgotICAgICMgVGhlIHBhcmVudCBpcyB0aGUgYmFzZSBjbGFzcyBvZiB0aGUgY2hpbGQsIHdlIGRpZCBub3QgZmluZCB0aGUKLSAgICAjIG92ZXJyaWRkZW4gbWV0aG9kLgotICAgIHJldHVybiBGYWxzZQotCi0gICMgRm9yIGFsbCB0aGUgYmFzZSBjbGFzc2VzIG9mIHRoaXMgY2xhc3MgdGhhdCBhcmUgbm90IG9iamVjdCwgY2hlY2sgaWYKLSAgIyB0aGV5IG92ZXJyaWRlIHRoZSBtZXRob2QuCi0gIGJhc2VfY2xzID0gW2NscyBmb3IgY2xzIGluIGNoaWxkX2Nscy5fX2Jhc2VzX18gaWYgY2xzIGFuZCBjbHMgIT0gb2JqZWN0XQotICByZXR1cm4gYW55KAotICAgICAgSXNNZXRob2RPdmVycmlkZGVuKHBhcmVudF9jbHMsIGJhc2UsIG1ldGhvZF9uYW1lKSBmb3IgYmFzZSBpbiBiYXNlX2NscykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9jbGFzc191dGlsX3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2NsYXNzX3V0aWxfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOGJjZGMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2NsYXNzX3V0aWxfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBweV91dGlscyBpbXBvcnQgY2xhc3NfdXRpbAotCi0KLWNsYXNzIENsYXNzVXRpbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiB0ZXN0Q2xhc3NPdmVycmlkZGVuKHNlbGYpOgotICAgIGNsYXNzIFBhcmVudChvYmplY3QpOgotICAgICAgZGVmIE1ldGhvZFNob3VsZEJlT3ZlcnJpZGRlbihzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgY2xhc3MgQ2hpbGQoUGFyZW50KToKLSAgICAgIGRlZiBNZXRob2RTaG91bGRCZU92ZXJyaWRkZW4oc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbGFzc191dGlsLklzTWV0aG9kT3ZlcnJpZGRlbigKLSAgICAgICAgUGFyZW50LCBDaGlsZCwgJ01ldGhvZFNob3VsZEJlT3ZlcnJpZGRlbicpKQotCi0gIGRlZiB0ZXN0R3JhbmRjaGlsZE92ZXJyaWRkZW4oc2VsZik6Ci0gICAgY2xhc3MgUGFyZW50KG9iamVjdCk6Ci0gICAgICBkZWYgTWV0aG9kU2hvdWxkQmVPdmVycmlkZGVuKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBjbGFzcyBDaGlsZChQYXJlbnQpOgotICAgICAgcGFzcwotCi0gICAgY2xhc3MgR3JhbmRjaGlsZChDaGlsZCk6Ci0gICAgICBkZWYgTWV0aG9kU2hvdWxkQmVPdmVycmlkZGVuKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBzZWxmLmFzc2VydFRydWUoY2xhc3NfdXRpbC5Jc01ldGhvZE92ZXJyaWRkZW4oCi0gICAgICAgIFBhcmVudCwgR3JhbmRjaGlsZCwgJ01ldGhvZFNob3VsZEJlT3ZlcnJpZGRlbicpKQotCi0gIGRlZiB0ZXN0Q2xhc3NOb3RPdmVycmlkZGVuKHNlbGYpOgotICAgIGNsYXNzIFBhcmVudChvYmplY3QpOgotICAgICAgZGVmIE1ldGhvZFNob3VsZEJlT3ZlcnJpZGRlbihzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgY2xhc3MgQ2hpbGQoUGFyZW50KToKLSAgICAgIGRlZiBTb21lT3RoZXJNZXRob2Qoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2xhc3NfdXRpbC5Jc01ldGhvZE92ZXJyaWRkZW4oCi0gICAgICAgIFBhcmVudCwgQ2hpbGQsICdNZXRob2RTaG91bGRCZU92ZXJyaWRkZW4nKSkKLQotICBkZWYgdGVzdEdyYW5kY2hpbGROb3RPdmVycmlkZGVuKHNlbGYpOgotICAgIGNsYXNzIFBhcmVudChvYmplY3QpOgotICAgICAgZGVmIE1ldGhvZFNob3VsZEJlT3ZlcnJpZGRlbihzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgY2xhc3MgQ2hpbGQoUGFyZW50KToKLSAgICAgIGRlZiBNZXRob2RTaG91bGRCZU92ZXJyaWRkZW4oc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGNsYXNzIEdyYW5kY2hpbGQoQ2hpbGQpOgotICAgICAgZGVmIFNvbWVPdGhlck1ldGhvZChzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNsYXNzX3V0aWwuSXNNZXRob2RPdmVycmlkZGVuKAotICAgICAgICBQYXJlbnQsIEdyYW5kY2hpbGQsICdNZXRob2RTaG91bGRCZU92ZXJyaWRkZW4nKSkKLQotICBkZWYgdGVzdENsYXNzTm90UHJlc2VudEluUGFyZW50KHNlbGYpOgotICAgIGNsYXNzIFBhcmVudChvYmplY3QpOgotICAgICAgZGVmIE1ldGhvZFNob3VsZEJlT3ZlcnJpZGRlbihzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgY2xhc3MgQ2hpbGQoUGFyZW50KToKLSAgICAgIGRlZiBNZXRob2RTaG91bGRCZU92ZXJyaWRkZW4oc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICBBc3NlcnRpb25FcnJvciwgY2xhc3NfdXRpbC5Jc01ldGhvZE92ZXJyaWRkZW4sCi0gICAgICAgIFBhcmVudCwgQ2hpbGQsICdXcm9uZ01ldGhvZCcpCi0KLSAgZGVmIHRlc3RJbnZhbGlkQ2xhc3Moc2VsZik6Ci0gICAgY2xhc3MgRm9vKG9iamVjdCk6Ci0gICAgICBkZWYgQmFyKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIGNsYXNzX3V0aWwuSXNNZXRob2RPdmVycmlkZGVuLCAnaW52YWxpZCcsIEZvbywgJ0JhcicpCi0KLSAgICBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIGNsYXNzX3V0aWwuSXNNZXRob2RPdmVycmlkZGVuLCBGb28sICdpbnZhbGlkJywgJ0JhcicpCi0KLSAgZGVmIHRlc3RNdWx0aXBsZUluaGVyaXRhbmNlKHNlbGYpOgotICAgIGNsYXNzIEFhYShvYmplY3QpOgotICAgICAgZGVmIE9uZShzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgY2xhc3MgQmJiKG9iamVjdCk6Ci0gICAgICBkZWYgVHdvKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBjbGFzcyBDY2MoQWFhLCBCYmIpOgotICAgICAgcGFzcwotCi0gICAgY2xhc3MgRGRkKG9iamVjdCk6Ci0gICAgICBkZWYgVGhyZWUoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGNsYXNzIEVlZShEZGQpOgotICAgICAgZGVmIFRocmVlKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBjbGFzcyBGZmYoQ2NjLCBFZWUpOgotICAgICAgZGVmIE9uZShzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgY2xhc3MgR2dnKG9iamVjdCk6Ci0gICAgICBkZWYgRm91cihzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgY2xhc3MgSGhoKEZmZiwgR2dnKToKLSAgICAgIGRlZiBUd28oc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGNsYXNzIElpaShIaGgpOgotICAgICAgcGFzcwotCi0gICAgY2xhc3MgSmpqKElpaSk6Ci0gICAgICBwYXNzCi0KLSAgICBzZWxmLmFzc2VydEZhbHNlKGNsYXNzX3V0aWwuSXNNZXRob2RPdmVycmlkZGVuKEFhYSwgQ2NjLCAnT25lJykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNsYXNzX3V0aWwuSXNNZXRob2RPdmVycmlkZGVuKEFhYSwgRmZmLCAnT25lJykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNsYXNzX3V0aWwuSXNNZXRob2RPdmVycmlkZGVuKEFhYSwgSGhoLCAnT25lJykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNsYXNzX3V0aWwuSXNNZXRob2RPdmVycmlkZGVuKEFhYSwgSmpqLCAnT25lJykpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjbGFzc191dGlsLklzTWV0aG9kT3ZlcnJpZGRlbihCYmIsIENjYywgJ1R3bycpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbGFzc191dGlsLklzTWV0aG9kT3ZlcnJpZGRlbihCYmIsIEhoaCwgJ1R3bycpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbGFzc191dGlsLklzTWV0aG9kT3ZlcnJpZGRlbihCYmIsIEpqaiwgJ1R3bycpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2xhc3NfdXRpbC5Jc01ldGhvZE92ZXJyaWRkZW4oRWVlLCBGZmYsICdUaHJlZScpKQotCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9jbG91ZF9zdG9yYWdlLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2Nsb3VkX3N0b3JhZ2UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MDEzODAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2Nsb3VkX3N0b3JhZ2UucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0OTcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJXcmFwcGVycyBmb3IgZ3N1dGlsLCBmb3IgYmFzaWMgaW50ZXJhY3Rpb24gd2l0aCBHb29nbGUgQ2xvdWQgU3RvcmFnZS4iIiIKLQotaW1wb3J0IGNvbGxlY3Rpb25zCi1pbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IGhhc2hsaWIKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBzaHV0aWwKLWltcG9ydCBzdGF0Ci1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCB0aW1lCi0KLWltcG9ydCBweV91dGlscwotZnJvbSBweV91dGlscyBpbXBvcnQgbG9jawotCi0jIERvIGEgbm8tb3AgaW1wb3J0IGhlcmUgc28gdGhhdCBjbG91ZF9zdG9yYWdlX2dsb2JhbF9sb2NrIGRlcCBpcyBwaWNrZWQgdXAKLSMgYnkgaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL2J1aWxkL2FuZHJvaWQvdGVzdF9ydW5uZXIucHlkZXBzLgotIyBUT0RPKG5lZG4sIGpidWRvcmljayk6IGZpZ3VyZSBvdXQgYSB3YXkgdG8gZ2V0IHJpZCBvZiB0aGlzIHVnbHkgaGFjay4KLWZyb20gcHlfdXRpbHMgaW1wb3J0IGNsb3VkX3N0b3JhZ2VfZ2xvYmFsX2xvY2sgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKLQotCi1QVUJMSUNfQlVDS0VUID0gJ2Nocm9taXVtLXRlbGVtZXRyeScKLVBBUlRORVJfQlVDS0VUID0gJ2Nocm9tZS1wYXJ0bmVyLXRlbGVtZXRyeScKLUlOVEVSTkFMX0JVQ0tFVCA9ICdjaHJvbWUtdGVsZW1ldHJ5JwotVEVMRU1FVFJZX09VVFBVVCA9ICdjaHJvbWUtdGVsZW1ldHJ5LW91dHB1dCcKLQotIyBVc2VzIG9yZGVyZWQgZGljdCB0byBtYWtlIHN1cmUgdGhhdCBidWNrZXQncyBrZXktdmFsdWUgaXRlbXMgYXJlIG9yZGVyZWQgZnJvbQotIyB0aGUgbW9zdCBvcGVuIHRvIHRoZSBtb3N0IHJlc3RyaWN0aXZlLgotQlVDS0VUX0FMSUFTRVMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgoCi0gICAgKCdwdWJsaWMnLCBQVUJMSUNfQlVDS0VUKSwKLSAgICAoJ3BhcnRuZXInLCBQQVJUTkVSX0JVQ0tFVCksCi0gICAgKCdpbnRlcm5hbCcsIElOVEVSTkFMX0JVQ0tFVCksCi0gICAgKCdvdXRwdXQnLCBURUxFTUVUUllfT1VUUFVUKSwKLSkpCi0KLUJVQ0tFVF9BTElBU19OQU1FUyA9IEJVQ0tFVF9BTElBU0VTLmtleXMoKQotCi0KLV9HU1VUSUxfUEFUSCA9IG9zLnBhdGguam9pbihweV91dGlscy5HZXRDYXRhcHVsdERpcigpLCAndGhpcmRfcGFydHknLCAnZ3N1dGlsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3N1dGlsJykKLQotIyBUT0RPKHRiYXJ6aWMpOiBBIHdvcmthcm91bmQgZm9yIGh0dHA6Ly9jcmJ1Zy5jb20vMzg2NDE2IGFuZAotIyAgICAgaHR0cDovL2NyYnVnLmNvbS8zNTkyOTMuIFNlZSB8X1J1bkNvbW1hbmR8LgotX0NST1NfR1NVVElMX0hPTUVfV0FSID0gJy9ob21lL2Nocm9tZW9zLXRlc3QvJwotCi0KLSMgSWYgRW52aXJvbm1lbnQgdmFyaWFibGVzIGhhcyBESVNBQkxFX0NMT1VEX1NUT1JBR0VfSU8gc2V0IHRvICcxJywgYW55IG1ldGhvZAotIyBjYWxscyB0aGF0IGludm9rZSBjbG91ZCBzdG9yYWdlIG5ldHdvcmsgaW8gd2lsbCB0aHJvdyBleGNlcHRpb25zLgotRElTQUJMRV9DTE9VRF9TVE9SQUdFX0lPID0gJ0RJU0FCTEVfQ0xPVURfU1RPUkFHRV9JTycKLQotIyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IHRvIGFjcXVpcmUgdGhlIHBzZXVkbyBsb2NrIGZvciBhIGNsb3VkCi0jIHN0b3JhZ2UgZmlsZSBiZWZvcmUgcmFpc2luZyBhbiBleGNlcHRpb24uCi1MT0NLX0FDUVVJU0lUSU9OX1RJTUVPVVQgPSAxMAotCi0KLWNsYXNzIENsb3VkU3RvcmFnZUVycm9yKEV4Y2VwdGlvbik6Ci0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgX0dldENvbmZpZ0luc3RydWN0aW9ucygpOgotICAgIGNvbW1hbmQgPSBfR1NVVElMX1BBVEgKLSAgICBpZiBweV91dGlscy5Jc1J1bm5pbmdPbkNyb3NEZXZpY2UoKToKLSAgICAgIGNvbW1hbmQgPSAnSE9NRT0lcyAlcycgJSAoX0NST1NfR1NVVElMX0hPTUVfV0FSLCBfR1NVVElMX1BBVEgpCi0gICAgcmV0dXJuICgnVG8gY29uZmlndXJlIHlvdXIgY3JlZGVudGlhbHM6XG4nCi0gICAgICAgICAgICAnICAxLiBSdW4gIiVzIGNvbmZpZyIgYW5kIGZvbGxvdyBpdHMgaW5zdHJ1Y3Rpb25zLlxuJwotICAgICAgICAgICAgJyAgMi4gSWYgeW91IGhhdmUgYSBAZ29vZ2xlLmNvbSBhY2NvdW50LCB1c2UgdGhhdCBhY2NvdW50LlxuJwotICAgICAgICAgICAgJyAgMy4gRm9yIHRoZSBwcm9qZWN0LWlkLCBqdXN0IGVudGVyIDAuJyAlIGNvbW1hbmQpCi0KLQotY2xhc3MgUGVybWlzc2lvbkVycm9yKENsb3VkU3RvcmFnZUVycm9yKToKLQotICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgc3VwZXIoUGVybWlzc2lvbkVycm9yLCBzZWxmKS5fX2luaXRfXygKLSAgICAgICAgJ0F0dGVtcHRlZCB0byBhY2Nlc3MgYSBmaWxlIGZyb20gQ2xvdWQgU3RvcmFnZSBidXQgeW91IGRvblwndCAnCi0gICAgICAgICdoYXZlIHBlcm1pc3Npb24uICcgKyBzZWxmLl9HZXRDb25maWdJbnN0cnVjdGlvbnMoKSkKLQotCi1jbGFzcyBDcmVkZW50aWFsc0Vycm9yKENsb3VkU3RvcmFnZUVycm9yKToKLQotICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgc3VwZXIoQ3JlZGVudGlhbHNFcnJvciwgc2VsZikuX19pbml0X18oCi0gICAgICAgICdBdHRlbXB0ZWQgdG8gYWNjZXNzIGEgZmlsZSBmcm9tIENsb3VkIFN0b3JhZ2UgYnV0IHlvdSBoYXZlIG5vICcKLSAgICAgICAgJ2NvbmZpZ3VyZWQgY3JlZGVudGlhbHMuICcgKyBzZWxmLl9HZXRDb25maWdJbnN0cnVjdGlvbnMoKSkKLQotCi1jbGFzcyBDbG91ZFN0b3JhZ2VJT0Rpc2FibGVkKENsb3VkU3RvcmFnZUVycm9yKToKLSAgcGFzcwotCi0KLWNsYXNzIE5vdEZvdW5kRXJyb3IoQ2xvdWRTdG9yYWdlRXJyb3IpOgotICBwYXNzCi0KLQotY2xhc3MgU2VydmVyRXJyb3IoQ2xvdWRTdG9yYWdlRXJyb3IpOgotICBwYXNzCi0KLQotIyBUT0RPKHRvbnlnL2R0dSk6IENhbiB0aGlzIGJlIHJlcGxhY2VkIHdpdGggZGlzdHV0aWxzLnNwYXduLmZpbmRfZXhlY3V0YWJsZSgpPwotZGVmIF9GaW5kRXhlY3V0YWJsZUluUGF0aChyZWxhdGl2ZV9leGVjdXRhYmxlX3BhdGgsICpleHRyYV9zZWFyY2hfcGF0aHMpOgotICBzZWFyY2hfcGF0aHMgPSBsaXN0KGV4dHJhX3NlYXJjaF9wYXRocykgKyBvcy5lbnZpcm9uWydQQVRIJ10uc3BsaXQob3MucGF0aHNlcCkKLSAgZm9yIHNlYXJjaF9wYXRoIGluIHNlYXJjaF9wYXRoczoKLSAgICBleGVjdXRhYmxlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VhcmNoX3BhdGgsIHJlbGF0aXZlX2V4ZWN1dGFibGVfcGF0aCkKLSAgICBpZiBweV91dGlscy5Jc0V4ZWN1dGFibGUoZXhlY3V0YWJsZV9wYXRoKToKLSAgICAgIHJldHVybiBleGVjdXRhYmxlX3BhdGgKLSAgcmV0dXJuIE5vbmUKLQotCi1kZWYgX0Vuc3VyZUV4ZWN1dGFibGUoZ3N1dGlsKToKLSAgIiIiY2htb2QgK3ggaWYgZ3N1dGlsIGlzIG5vdCBleGVjdXRhYmxlLiIiIgotICBzdCA9IG9zLnN0YXQoZ3N1dGlsKQotICBpZiBub3Qgc3Quc3RfbW9kZSAmIHN0YXQuU19JRVhFQzoKLSAgICBvcy5jaG1vZChnc3V0aWwsIHN0LnN0X21vZGUgfCBzdGF0LlNfSUVYRUMpCi0KLQotZGVmIF9SdW5Db21tYW5kKGFyZ3MpOgotICAjIE9uIGNyb3MgZGV2aWNlLCBhcyB0ZWxlbWV0cnkgaXMgcnVubmluZyBhcyByb290LCBob21lIHdpbGwgYmUgc2V0IHRvIC9yb290LywKLSAgIyB3aGljaCBpcyBub3Qgd3JpdGFibGUuIGdzdXRpbCB3aWxsIGF0dGVtcHQgdG8gY3JlYXRlIGEgZG93bmxvYWQgdHJhY2tlciBkaXIKLSAgIyBpbiBob21lIGRpciBhbmQgZmFpbC4gVG8gYXZvaWQgdGhpcywgb3ZlcnJpZGUgSE9NRSBkaXIgdG8gc29tZXRoaW5nIHdyaXRhYmxlCi0gICMgd2hlbiBydW5uaW5nIG9uIGNyb3MgZGV2aWNlLgotICAjCi0gICMgVE9ETyh0YmFyemljKTogRmlndXJlIG91dCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIGdzdXRpbCBvbiBjcm9zLgotICAjICAgICBodHRwOi8vY3JidWcuY29tLzM4NjQxNiwgaHR0cDovL2NyYnVnLmNvbS8zNTkyOTMuCi0gIGdzdXRpbF9lbnYgPSBOb25lCi0gIGlmIHB5X3V0aWxzLklzUnVubmluZ09uQ3Jvc0RldmljZSgpOgotICAgIGdzdXRpbF9lbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQotICAgIGdzdXRpbF9lbnZbJ0hPTUUnXSA9IF9DUk9TX0dTVVRJTF9IT01FX1dBUgotCi0gIGlmIG9zLm5hbWUgPT0gJ250JzoKLSAgICAjIElmIFdpbmRvd3MsIHByZXBlbmQgcHl0aG9uLiBQeXRob24gc2NyaXB0cyBhcmVuJ3QgZGlyZWN0bHkgZXhlY3V0YWJsZS4KLSAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCBfR1NVVElMX1BBVEhdICsgYXJncwotICBlbHNlOgotICAgICMgRG9uJ3QgZG8gaXQgb24gUE9TSVgsIGluIGNhc2Ugc29tZW9uZSBpcyB1c2luZyBhIHNoZWxsIHNjcmlwdCB0byByZWRpcmVjdC4KLSAgICBhcmdzID0gW19HU1VUSUxfUEFUSF0gKyBhcmdzCi0gICAgX0Vuc3VyZUV4ZWN1dGFibGUoX0dTVVRJTF9QQVRIKQotCi0gIGlmIGFyZ3NbMF0gbm90IGluICgnaGVscCcsICdoYXNoJywgJ3ZlcnNpb24nKSBhbmQgbm90IElzTmV0d29ya0lPRW5hYmxlZCgpOgotICAgIHJhaXNlIENsb3VkU3RvcmFnZUlPRGlzYWJsZWQoCi0gICAgICAgICJFbnZpcm9ubWVudCB2YXJpYWJsZSBESVNBQkxFX0NMT1VEX1NUT1JBR0VfSU8gaXMgc2V0IHRvIDEuICIKLSAgICAgICAgJ0NvbW1hbmQgJXMgaXMgbm90IGFsbG93ZWQgdG8gcnVuJyAlIGFyZ3MpCi0KLSAgZ3N1dGlsID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIGVudj1nc3V0aWxfZW52KQotICBzdGRvdXQsIHN0ZGVyciA9IGdzdXRpbC5jb21tdW5pY2F0ZSgpCi0KLSAgaWYgZ3N1dGlsLnJldHVybmNvZGU6Ci0gICAgcmFpc2UgR2V0RXJyb3JPYmplY3RGb3JDbG91ZFN0b3JhZ2VTdGRlcnIoc3RkZXJyKQotCi0gIHJldHVybiBzdGRvdXQKLQotCi1kZWYgR2V0RXJyb3JPYmplY3RGb3JDbG91ZFN0b3JhZ2VTdGRlcnIoc3RkZXJyKToKLSAgaWYgKHN0ZGVyci5zdGFydHN3aXRoKCgKLSAgICAgICdZb3UgYXJlIGF0dGVtcHRpbmcgdG8gYWNjZXNzIHByb3RlY3RlZCBkYXRhIHdpdGggbm8gY29uZmlndXJlZCcsCi0gICAgICAnRmFpbHVyZTogTm8gaGFuZGxlciB3YXMgcmVhZHkgdG8gYXV0aGVudGljYXRlLicpKSBvcgotICAgICAgcmUubWF0Y2goJy4qNDAxLipkb2VzIG5vdCBoYXZlIC4qIGFjY2VzcyB0byAuKicsIHN0ZGVycikpOgotICAgIHJldHVybiBDcmVkZW50aWFsc0Vycm9yKCkKLSAgaWYgKCdzdGF0dXM9NDAzJyBpbiBzdGRlcnIgb3IgJ3N0YXR1cyA0MDMnIGluIHN0ZGVyciBvcgotICAgICAgJzQwMyBGb3JiaWRkZW4nIGluIHN0ZGVyciBvcgotICAgICAgcmUubWF0Y2goJy4qNDAzLipkb2VzIG5vdCBoYXZlIC4qIGFjY2VzcyB0byAuKicsIHN0ZGVycikpOgotICAgIHJldHVybiBQZXJtaXNzaW9uRXJyb3IoKQotICBpZiAoc3RkZXJyLnN0YXJ0c3dpdGgoJ0ludmFsaWRVcmlFcnJvcicpIG9yICdObyBzdWNoIG9iamVjdCcgaW4gc3RkZXJyIG9yCi0gICAgICAnTm8gVVJMcyBtYXRjaGVkJyBpbiBzdGRlcnIgb3IgJ09uZSBvciBtb3JlIFVSTHMgbWF0Y2hlZCBubycgaW4gc3RkZXJyKToKLSAgICByZXR1cm4gTm90Rm91bmRFcnJvcihzdGRlcnIpCi0gIGlmICc1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yJyBpbiBzdGRlcnI6Ci0gICAgcmV0dXJuIFNlcnZlckVycm9yKHN0ZGVycikKLSAgcmV0dXJuIENsb3VkU3RvcmFnZUVycm9yKHN0ZGVycikKLQotCi1kZWYgSXNOZXR3b3JrSU9FbmFibGVkKCk6Ci0gICIiIlJldHVybnMgdHJ1ZSBpZiBjbG91ZCBzdG9yYWdlIGlzIGVuYWJsZWQuIiIiCi0gIGRpc2FibGVfY2xvdWRfc3RvcmFnZV9lbnZfdmFsID0gb3MuZ2V0ZW52KERJU0FCTEVfQ0xPVURfU1RPUkFHRV9JTykKLQotICBpZiBkaXNhYmxlX2Nsb3VkX3N0b3JhZ2VfZW52X3ZhbCBhbmQgZGlzYWJsZV9jbG91ZF9zdG9yYWdlX2Vudl92YWwgIT0gJzEnOgotICAgIGxvZ2dlci5lcnJvcigKLSAgICAgICAgJ1Vuc3VwcG9ydGVkIHZhbHVlIG9mIGVudmlyb25tZW50IHZhcmlhYmxlICcKLSAgICAgICAgJ0RJU0FCTEVfQ0xPVURfU1RPUkFHRV9JTy4gRXhwZWN0ZWQgTm9uZSBvciBcJzFcJyBidXQgZ290ICVzLicsCi0gICAgICAgIGRpc2FibGVfY2xvdWRfc3RvcmFnZV9lbnZfdmFsKQotCi0gIHJldHVybiBkaXNhYmxlX2Nsb3VkX3N0b3JhZ2VfZW52X3ZhbCAhPSAnMScKLQotCi1kZWYgTGlzdChidWNrZXQpOgotICBxdWVyeSA9ICdnczovLyVzLycgJSBidWNrZXQKLSAgc3Rkb3V0ID0gX1J1bkNvbW1hbmQoWydscycsIHF1ZXJ5XSkKLSAgcmV0dXJuIFt1cmxbbGVuKHF1ZXJ5KTpdIGZvciB1cmwgaW4gc3Rkb3V0LnNwbGl0bGluZXMoKV0KLQotCi1kZWYgRXhpc3RzKGJ1Y2tldCwgcmVtb3RlX3BhdGgpOgotICB0cnk6Ci0gICAgX1J1bkNvbW1hbmQoWydscycsICdnczovLyVzLyVzJyAlIChidWNrZXQsIHJlbW90ZV9wYXRoKV0pCi0gICAgcmV0dXJuIFRydWUKLSAgZXhjZXB0IE5vdEZvdW5kRXJyb3I6Ci0gICAgcmV0dXJuIEZhbHNlCi0KLQotZGVmIE1vdmUoYnVja2V0MSwgYnVja2V0MiwgcmVtb3RlX3BhdGgpOgotICB1cmwxID0gJ2dzOi8vJXMvJXMnICUgKGJ1Y2tldDEsIHJlbW90ZV9wYXRoKQotICB1cmwyID0gJ2dzOi8vJXMvJXMnICUgKGJ1Y2tldDIsIHJlbW90ZV9wYXRoKQotICBsb2dnZXIuaW5mbygnTW92aW5nICVzIHRvICVzJywgdXJsMSwgdXJsMikKLSAgX1J1bkNvbW1hbmQoWydtdicsIHVybDEsIHVybDJdKQotCi0KLWRlZiBDb3B5KGJ1Y2tldF9mcm9tLCBidWNrZXRfdG8sIHJlbW90ZV9wYXRoX2Zyb20sIHJlbW90ZV9wYXRoX3RvKToKLSAgIiIiQ29weSBhIGZpbGUgZnJvbSBvbmUgbG9jYXRpb24gaW4gQ2xvdWRTdG9yYWdlIHRvIGFub3RoZXIuCi0KLSAgQXJnczoKLSAgICAgIGJ1Y2tldF9mcm9tOiBUaGUgY2xvdWQgc3RvcmFnZSBidWNrZXQgd2hlcmUgdGhlIGZpbGUgaXMgY3VycmVudGx5IGxvY2F0ZWQuCi0gICAgICBidWNrZXRfdG86IFRoZSBjbG91ZCBzdG9yYWdlIGJ1Y2tldCBpdCBpcyBiZWluZyBjb3BpZWQgdG8uCi0gICAgICByZW1vdGVfcGF0aF9mcm9tOiBUaGUgZmlsZSBwYXRoIHdoZXJlIHRoZSBmaWxlIGlzIGxvY2F0ZWQgaW4gYnVja2V0X2Zyb20uCi0gICAgICByZW1vdGVfcGF0aF90bzogVGhlIGZpbGUgcGF0aCBpdCBpcyBiZWluZyBjb3BpZWQgdG8gaW4gYnVja2V0X3RvLgotCi0gIEl0IHNob3VsZDogY2F1c2Ugbm8gY2hhbmdlcyBsb2NhbGx5IG9yIHRvIHRoZSBzdGFydGluZyBmaWxlLCBhbmQgd2lsbAotICBvdmVyd3JpdGUgYW55IGV4aXN0aW5nIGZpbGVzIGluIHRoZSBkZXN0aW5hdGlvbiBsb2NhdGlvbi4KLSAgIiIiCi0gIHVybDEgPSAnZ3M6Ly8lcy8lcycgJSAoYnVja2V0X2Zyb20sIHJlbW90ZV9wYXRoX2Zyb20pCi0gIHVybDIgPSAnZ3M6Ly8lcy8lcycgJSAoYnVja2V0X3RvLCByZW1vdGVfcGF0aF90bykKLSAgbG9nZ2VyLmluZm8oJ0NvcHlpbmcgJXMgdG8gJXMnLCB1cmwxLCB1cmwyKQotICBfUnVuQ29tbWFuZChbJ2NwJywgdXJsMSwgdXJsMl0pCi0KLQotZGVmIERlbGV0ZShidWNrZXQsIHJlbW90ZV9wYXRoKToKLSAgdXJsID0gJ2dzOi8vJXMvJXMnICUgKGJ1Y2tldCwgcmVtb3RlX3BhdGgpCi0gIGxvZ2dlci5pbmZvKCdEZWxldGluZyAlcycsIHVybCkKLSAgX1J1bkNvbW1hbmQoWydybScsIHVybF0pCi0KLQotZGVmIEdldChidWNrZXQsIHJlbW90ZV9wYXRoLCBsb2NhbF9wYXRoKToKLSAgd2l0aCBfRmlsZUxvY2sobG9jYWxfcGF0aCk6Ci0gICAgX0dldExvY2tlZChidWNrZXQsIHJlbW90ZV9wYXRoLCBsb2NhbF9wYXRoKQotCi0KLV9DTE9VRF9TVE9SQUdFX0dMT0JBTF9MT0NLID0gb3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgJ2Nsb3VkX3N0b3JhZ2VfZ2xvYmFsX2xvY2sucHknKQotCi0KLUBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi1kZWYgX0ZpbGVMb2NrKGJhc2VfcGF0aCk6Ci0gIHBzZXVkb19sb2NrX3BhdGggPSAnJXMucHNldWRvX2xvY2snICUgYmFzZV9wYXRoCi0gIF9DcmVhdGVEaXJlY3RvcnlJZk5lY2Vzc2FyeShvcy5wYXRoLmRpcm5hbWUocHNldWRvX2xvY2tfcGF0aCkpCi0KLSAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBndWFyZCB0aGUgY3JlYXRpb24sIGFjcXVpc2l0aW9uLCByZWxlYXNlLCBhbmQgcmVtb3ZhbCBvZgotICAjIHRoZSBwc2V1ZG8gbG9jayBhbGwgd2l0aCB0aGUgc2FtZSBndWFyZCAoX0NMT1VEX1NUT1JBR0VfR0xPQkFMX0xPQ0spLgotICAjIE90aGVyd2lzZSwgd2UgY2FuIGdldCBuYXN0eSBpbnRlcmxlYXZpbmdzIHRoYXQgcmVzdWx0IGluIG11bHRpcGxlIHByb2Nlc3NlcwotICAjIHRoaW5raW5nIHRoZXkgaGF2ZSBhbiBleGNsdXNpdmUgbG9jaywgbGlrZToKLSAgIwotICAjIChQcm9jZXNzIDEpIENyZWF0ZSBhbmQgYWNxdWlyZSB0aGUgcHNldWRvIGxvY2sKLSAgIyAoUHJvY2VzcyAxKSBSZWxlYXNlIHRoZSBwc2V1ZG8gbG9jawotICAjIChQcm9jZXNzIDEpIFJlbGVhc2UgdGhlIGZpbGUgbG9jawotICAjIChQcm9jZXNzIDIpIE9wZW4gYW5kIGFjcXVpcmUgdGhlIGV4aXN0aW5nIHBzZXVkbyBsb2NrCi0gICMgKFByb2Nlc3MgMSkgRGVsZXRlIHRoZSAoZXhpc3RpbmcpIHBzZXVkbyBsb2NrCi0gICMgKFByb2Nlc3MgMykgQ3JlYXRlIGFuZCBhY3F1aXJlIGEgbmV3IHBzZXVkbyBsb2NrCi0gICMKLSAgIyBVc2luZyB0aGUgc2FtZSBndWFyZCBmb3IgY3JlYXRpb24gYW5kIHJlbW92YWwgb2YgdGhlIHBzZXVkbyBsb2NrIGd1YXJhbnRlZXMKLSAgIyB0aGF0IGFsbCBwcm9jZXNzZXMgYXJlIHJlZmVycmluZyB0byB0aGUgc2FtZSBsb2NrLgotICBwc2V1ZG9fbG9ja19mZCA9IE5vbmUKLSAgcHNldWRvX2xvY2tfZmRfcmV0dXJuID0gW10KLSAgcHlfdXRpbHMuV2FpdEZvcihsYW1iZGE6IF9BdHRlbXB0UHNldWRvTG9ja0FjcXVpc2l0aW9uKHBzZXVkb19sb2NrX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG9fbG9ja19mZF9yZXR1cm4pLAotICAgICAgICAgICAgICAgICAgIExPQ0tfQUNRVUlTSVRJT05fVElNRU9VVCkKLSAgcHNldWRvX2xvY2tfZmQgPSBwc2V1ZG9fbG9ja19mZF9yZXR1cm5bMF0KLQotICB0cnk6Ci0gICAgeWllbGQKLSAgZmluYWxseToKLSAgICBweV91dGlscy5XYWl0Rm9yKGxhbWJkYTogX0F0dGVtcHRQc2V1ZG9Mb2NrUmVsZWFzZShwc2V1ZG9fbG9ja19mZCksCi0gICAgICAgICAgICAgICAgICAgICBMT0NLX0FDUVVJU0lUSU9OX1RJTUVPVVQpCi0KLWRlZiBfQXR0ZW1wdFBzZXVkb0xvY2tBY3F1aXNpdGlvbihwc2V1ZG9fbG9ja19wYXRoLCBwc2V1ZG9fbG9ja19mZF9yZXR1cm4pOgotICAiIiJUcnkgdG8gYWNxdWlyZSB0aGUgbG9jayBhbmQgcmV0dXJuIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGF0dGVtcHQKLSAgd2FzIHN1Y2Nlc3NmdWwuIElmIHRoZSBhdHRlbXB0IHdhcyBzdWNjZXNzZnVsLCBwc2V1ZG9fbG9ja19mZF9yZXR1cm4sIHdoaWNoCi0gIHNob3VsZCBiZSBhbiBlbXB0eSBhcnJheSwgd2lsbCBiZSBtb2RpZmllZCB0byBjb250YWluIGEgc2luZ2xlIGVudHJ5OiB0aGUgZmlsZQotICBkZXNjcmlwdG9yIG9mIHRoZSAobm93IGFjcXVpcmVkKSBsb2NrIGZpbGUuCi0KLSAgVGhpcyB3aG9sZSBvcGVyYXRpb24gaXMgZ3VhcmRlZCB3aXRoIHRoZSBnbG9iYWwgY2xvdWQgc3RvcmFnZSBsb2NrLCB3aGljaAotICBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBvdGhlcndpc2UgY2F1c2UgbXVsdGlwbGUgcHJvY2Vzc2VzIHRvCi0gIGJlbGlldmUgdGhleSBob2xkIHRoZSBzYW1lIHBzZXVkbyBsb2NrIChzZWUgX0ZpbGVMb2NrIGZvciBtb3JlIGRldGFpbHMpLgotICAiIiIKLSAgcHNldWRvX2xvY2tfZmQgPSBOb25lCi0gIHRyeToKLSAgICB3aXRoIG9wZW4oX0NMT1VEX1NUT1JBR0VfR0xPQkFMX0xPQ0spIGFzIGdsb2JhbF9maWxlOgotICAgICAgd2l0aCBsb2NrLkZpbGVMb2NrKGdsb2JhbF9maWxlLCBsb2NrLkxPQ0tfRVggfCBsb2NrLkxPQ0tfTkIpOgotICAgICAgICAjIEF0dGVtcHQgdG8gYWNxdWlyZSB0aGUgbG9jayBpbiBhIG5vbi1ibG9ja2luZyBtYW5uZXIuIElmIHdlIGJsb2NrLAotICAgICAgICAjIHRoZW4gd2UnbGwgY2F1c2UgZGVhZGxvY2sgYmVjYXVzZSBhbm90aGVyIHByb2Nlc3Mgd2lsbCBiZSB1bmFibGUgdG8KLSAgICAgICAgIyBhY3F1aXJlIHRoZSBjbG91ZCBzdG9yYWdlIGdsb2JhbCBsb2NrIGluIG9yZGVyIHRvIHJlbGVhc2UgdGhlIHBzZXVkbwotICAgICAgICAjIGxvY2suCi0gICAgICAgIHBzZXVkb19sb2NrX2ZkID0gb3Blbihwc2V1ZG9fbG9ja19wYXRoLCAndycpCi0gICAgICAgIGxvY2suQWNxdWlyZUZpbGVMb2NrKHBzZXVkb19sb2NrX2ZkLCBsb2NrLkxPQ0tfRVggfCBsb2NrLkxPQ0tfTkIpCi0gICAgICAgIHBzZXVkb19sb2NrX2ZkX3JldHVybi5hcHBlbmQocHNldWRvX2xvY2tfZmQpCi0gICAgICAgIHJldHVybiBUcnVlCi0gIGV4Y2VwdCAobG9jay5Mb2NrRXhjZXB0aW9uLCBJT0Vycm9yKToKLSAgICAjIFdlIGZhaWxlZCB0byBhY3F1aXJlIGVpdGhlciB0aGUgZ2xvYmFsIGNsb3VkIHN0b3JhZ2UgbG9jayBvciB0aGUgcHNldWRvCi0gICAgIyBsb2NrLgotICAgIGlmIHBzZXVkb19sb2NrX2ZkOgotICAgICAgcHNldWRvX2xvY2tfZmQuY2xvc2UoKQotICAgIHJldHVybiBGYWxzZQotCi0KLWRlZiBfQXR0ZW1wdFBzZXVkb0xvY2tSZWxlYXNlKHBzZXVkb19sb2NrX2ZkKToKLSAgIiIiVHJ5IHRvIHJlbGVhc2UgdGhlIHBzZXVkbyBsb2NrIGFuZCByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlcgotICB0aGUgcmVsZWFzZSB3YXMgc3VjY2VzZnVsLgotCi0gIFRoaXMgd2hvbGUgb3BlcmF0aW9uIGlzIGd1YXJkZWQgd2l0aCB0aGUgZ2xvYmFsIGNsb3VkIHN0b3JhZ2UgbG9jaywgd2hpY2gKLSAgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgb3RoZXJ3aXNlIGNhdXNlIG11bHRpcGxlIHByb2Nlc3NlcyB0bwotICBiZWxpZXZlIHRoZXkgaG9sZCB0aGUgc2FtZSBwc2V1ZG8gbG9jayAoc2VlIF9GaWxlTG9jayBmb3IgbW9yZSBkZXRhaWxzKS4KLSAgIiIiCi0gIHBzZXVkb19sb2NrX3BhdGggPSBwc2V1ZG9fbG9ja19mZC5uYW1lCi0gIHRyeToKLSAgICB3aXRoIG9wZW4oX0NMT1VEX1NUT1JBR0VfR0xPQkFMX0xPQ0spIGFzIGdsb2JhbF9maWxlOgotICAgICAgd2l0aCBsb2NrLkZpbGVMb2NrKGdsb2JhbF9maWxlLCBsb2NrLkxPQ0tfRVggfCBsb2NrLkxPQ0tfTkIpOgotICAgICAgICBsb2NrLlJlbGVhc2VGaWxlTG9jayhwc2V1ZG9fbG9ja19mZCkKLSAgICAgICAgcHNldWRvX2xvY2tfZmQuY2xvc2UoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgb3MucmVtb3ZlKHBzZXVkb19sb2NrX3BhdGgpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICMgV2UgZG9uJ3QgY2FyZSBpZiB0aGUgcHNldWRvIGxvY2sgZ2V0cyByZW1vdmVkIGVsc2V3aGVyZSBiZWZvcmUKLSAgICAgICAgICAjIHdlIGhhdmUgYSBjaGFuY2UgdG8gZG8gc28uCi0gICAgICAgICAgcGFzcwotICAgICAgICByZXR1cm4gVHJ1ZQotICBleGNlcHQgKGxvY2suTG9ja0V4Y2VwdGlvbiwgSU9FcnJvcik6Ci0gICAgIyBXZSBmYWlsZWQgdG8gYWNxdWlyZSB0aGUgZ2xvYmFsIGNsb3VkIHN0b3JhZ2UgbG9jayBhbmQgYXJlIHRodXMgdW5hYmxlIHRvCi0gICAgIyByZWxlYXNlIHRoZSBwc2V1ZG8gbG9jay4KLSAgICByZXR1cm4gRmFsc2UKLQotCi1kZWYgX0NyZWF0ZURpcmVjdG9yeUlmTmVjZXNzYXJ5KGRpcmVjdG9yeSk6Ci0gIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RvcnkpOgotICAgIG9zLm1ha2VkaXJzKGRpcmVjdG9yeSkKLQotCi1kZWYgX0dldExvY2tlZChidWNrZXQsIHJlbW90ZV9wYXRoLCBsb2NhbF9wYXRoKToKLSAgdXJsID0gJ2dzOi8vJXMvJXMnICUgKGJ1Y2tldCwgcmVtb3RlX3BhdGgpCi0gIGxvZ2dlci5pbmZvKCdEb3dubG9hZGluZyAlcyB0byAlcycsIHVybCwgbG9jYWxfcGF0aCkKLSAgX0NyZWF0ZURpcmVjdG9yeUlmTmVjZXNzYXJ5KG9zLnBhdGguZGlybmFtZShsb2NhbF9wYXRoKSkKLSAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoCi0gICAgICBkaXI9b3MucGF0aC5kaXJuYW1lKGxvY2FsX3BhdGgpLAotICAgICAgZGVsZXRlPUZhbHNlKSBhcyBwYXJ0aWFsX2Rvd25sb2FkX3BhdGg6Ci0gICAgdHJ5OgotICAgICAgIyBXaW5kb3dzIHdvbid0IGRvd25sb2FkIHRvIGFuIG9wZW4gZmlsZS4KLSAgICAgIHBhcnRpYWxfZG93bmxvYWRfcGF0aC5jbG9zZSgpCi0gICAgICB0cnk6Ci0gICAgICAgIF9SdW5Db21tYW5kKFsnY3AnLCB1cmwsIHBhcnRpYWxfZG93bmxvYWRfcGF0aC5uYW1lXSkKLSAgICAgIGV4Y2VwdCBTZXJ2ZXJFcnJvcjoKLSAgICAgICAgbG9nZ2VyLmluZm8oJ0Nsb3VkIFN0b3JhZ2Ugc2VydmVyIGVycm9yLCByZXRyeWluZyBkb3dubG9hZCcpCi0gICAgICAgIF9SdW5Db21tYW5kKFsnY3AnLCB1cmwsIHBhcnRpYWxfZG93bmxvYWRfcGF0aC5uYW1lXSkKLSAgICAgIHNodXRpbC5tb3ZlKHBhcnRpYWxfZG93bmxvYWRfcGF0aC5uYW1lLCBsb2NhbF9wYXRoKQotICAgIGZpbmFsbHk6Ci0gICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXJ0aWFsX2Rvd25sb2FkX3BhdGgubmFtZSk6Ci0gICAgICAgIG9zLnJlbW92ZShwYXJ0aWFsX2Rvd25sb2FkX3BhdGgubmFtZSkKLQotCi1kZWYgSW5zZXJ0KGJ1Y2tldCwgcmVtb3RlX3BhdGgsIGxvY2FsX3BhdGgsIHB1YmxpY2x5X3JlYWRhYmxlPUZhbHNlKToKLSAgIiIiIFVwbG9hZCBmaWxlIGluIHxsb2NhbF9wYXRofCB0byBjbG91ZCBzdG9yYWdlLgotICBBcmdzOgotICAgIGJ1Y2tldDogdGhlIGdvb2dsZSBjbG91ZCBzdG9yYWdlIGJ1Y2tldCBuYW1lLgotICAgIHJlbW90ZV9wYXRoOiB0aGUgcmVtb3RlIGZpbGUgcGF0aCBpbiB8YnVja2V0fC4KLSAgICBsb2NhbF9wYXRoOiBwYXRoIG9mIHRoZSBsb2NhbCBmaWxlIHRvIGJlIHVwbG9hZGVkLgotICAgIHB1YmxpY2x5X3JlYWRhYmxlOiB3aGV0aGVyIHRoZSB1cGxvYWRlZCBmaWxlIGhhcyBwdWJsaWNseSByZWFkYWJsZQotICAgIHBlcm1pc3Npb24uCi0KLSAgUmV0dXJuczoKLSAgICBUaGUgdXJsIHdoZXJlIHRoZSBmaWxlIGlzIHVwbG9hZGVkIHRvLgotICAiIiIKLSAgdXJsID0gJ2dzOi8vJXMvJXMnICUgKGJ1Y2tldCwgcmVtb3RlX3BhdGgpCi0gIGNvbW1hbmRfYW5kX2FyZ3MgPSBbJ2NwJ10KLSAgZXh0cmFfaW5mbyA9ICcnCi0gIGlmIHB1YmxpY2x5X3JlYWRhYmxlOgotICAgIGNvbW1hbmRfYW5kX2FyZ3MgKz0gWyctYScsICdwdWJsaWMtcmVhZCddCi0gICAgZXh0cmFfaW5mbyA9ICcgKHB1YmxpY2x5IHJlYWRhYmxlKScKLSAgY29tbWFuZF9hbmRfYXJncyArPSBbbG9jYWxfcGF0aCwgdXJsXQotICBsb2dnZXIuaW5mbygnVXBsb2FkaW5nICVzIHRvICVzJXMnLCBsb2NhbF9wYXRoLCB1cmwsIGV4dHJhX2luZm8pCi0gIF9SdW5Db21tYW5kKGNvbW1hbmRfYW5kX2FyZ3MpCi0gIHJldHVybiAnaHR0cHM6Ly9jb25zb2xlLmRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tL2Nsb3Vkc3RvcmFnZS9iLyVzL28vJXMnICUgKAotICAgICAgYnVja2V0LCByZW1vdGVfcGF0aCkKLQotCi1kZWYgR2V0SWZIYXNoQ2hhbmdlZChjc19wYXRoLCBkb3dubG9hZF9wYXRoLCBidWNrZXQsIGZpbGVfaGFzaCk6Ci0gICIiIkRvd25sb2FkcyB8ZG93bmxvYWRfcGF0aHwgdG8gfGZpbGVfcGF0aHwgaWYgfGZpbGVfcGF0aHwgZG9lc24ndCBleGlzdCBvcgotICAgICBpdCdzIGhhc2ggZG9lc24ndCBtYXRjaCB8ZmlsZV9oYXNofC4KLQotICBSZXR1cm5zOgotICAgIFRydWUgaWYgdGhlIGJpbmFyeSB3YXMgY2hhbmdlZC4KLSAgUmFpc2VzOgotICAgIENyZWRlbnRpYWxzRXJyb3IgaWYgdGhlIHVzZXIgaGFzIG5vIGNvbmZpZ3VyZWQgY3JlZGVudGlhbHMuCi0gICAgUGVybWlzc2lvbkVycm9yIGlmIHRoZSB1c2VyIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIGJ1Y2tldC4KLSAgICBOb3RGb3VuZEVycm9yIGlmIHRoZSBmaWxlIGlzIG5vdCBpbiB0aGUgZ2l2ZW4gYnVja2V0IGluIGNsb3VkX3N0b3JhZ2UuCi0gICIiIgotICB3aXRoIF9GaWxlTG9jayhkb3dubG9hZF9wYXRoKToKLSAgICBpZiAob3MucGF0aC5leGlzdHMoZG93bmxvYWRfcGF0aCkgYW5kCi0gICAgICAgIENhbGN1bGF0ZUhhc2goZG93bmxvYWRfcGF0aCkgPT0gZmlsZV9oYXNoKToKLSAgICAgIHJldHVybiBGYWxzZQotICAgIF9HZXRMb2NrZWQoYnVja2V0LCBjc19wYXRoLCBkb3dubG9hZF9wYXRoKQotICAgIHJldHVybiBUcnVlCi0KLQotZGVmIEdldElmQ2hhbmdlZChmaWxlX3BhdGgsIGJ1Y2tldCk6Ci0gICIiIkdldHMgdGhlIGZpbGUgYXQgZmlsZV9wYXRoIGlmIGl0IGhhcyBhIGhhc2ggZmlsZSB0aGF0IGRvZXNuJ3QgbWF0Y2ggb3IKLSAgaWYgdGhlcmUgaXMgbm8gbG9jYWwgY29weSBvZiBmaWxlX3BhdGgsIGJ1dCB0aGVyZSBpcyBhIGhhc2ggZmlsZSBmb3IgaXQuCi0KLSAgUmV0dXJuczoKLSAgICBUcnVlIGlmIHRoZSBiaW5hcnkgd2FzIGNoYW5nZWQuCi0gIFJhaXNlczoKLSAgICBDcmVkZW50aWFsc0Vycm9yIGlmIHRoZSB1c2VyIGhhcyBubyBjb25maWd1cmVkIGNyZWRlbnRpYWxzLgotICAgIFBlcm1pc3Npb25FcnJvciBpZiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSBidWNrZXQuCi0gICAgTm90Rm91bmRFcnJvciBpZiB0aGUgZmlsZSBpcyBub3QgaW4gdGhlIGdpdmVuIGJ1Y2tldCBpbiBjbG91ZF9zdG9yYWdlLgotICAiIiIKLSAgd2l0aCBfRmlsZUxvY2soZmlsZV9wYXRoKToKLSAgICBoYXNoX3BhdGggPSBmaWxlX3BhdGggKyAnLnNoYTEnCi0gICAgZmV0Y2hfdHNfcGF0aCA9IGZpbGVfcGF0aCArICcuZmV0Y2h0cycKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaGFzaF9wYXRoKToKLSAgICAgIGxvZ2dlci53YXJuaW5nKCdIYXNoIGZpbGUgbm90IGZvdW5kOiAlcycsIGhhc2hfcGF0aCkKLSAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZXhwZWN0ZWRfaGFzaCA9IFJlYWRIYXNoKGhhc2hfcGF0aCkKLQotICAgICMgVG8gc2F2ZSB0aGUgdGltZSByZXF1aXJlZCBjb21wdXRpbmcgYmluYXJ5IGhhc2ggKHdoaWNoIGlzIGFuIGV4cGVuc2l2ZQotICAgICMgb3BlcmF0aW9uLCBzZWUgY3JidWcuY29tLzc5MzYwOSNjMiBmb3IgZGV0YWlscyksIGFueSB0aW1lIHdlIGZldGNoIGEgbmV3Ci0gICAgIyBiaW5hcnksIHdlIHNhdmUgbm90IG9ubHkgdGhhdCBiaW5hcnkgYnV0IHRoZSB0aW1lIG9mIHRoZSBmZXRjaCBpbgotICAgICMgfGZldGNoX3RzX3BhdGh8LiBBbnl0aW1lIHRoZSBmaWxlIG5lZWRzIHVwZGF0ZWQgKGl0cwotICAgICMgaGFzaCBpbiB8aGFzaF9wYXRofCBjaGFuZ2UpLCB3ZSBjYW4ganVzdCBuZWVkIHRvIGNvbXBhcmUgdGhlIHRpbWVzdGFtcCBvZgotICAgICMgfGhhc2hfcGF0aHwgd2l0aCB0aGUgdGltZXN0YW1wIGluIHxmZXRjaF90c19wYXRofCB0byBmaWd1cmUgb3V0Ci0gICAgIyBpZiB0aGUgdXBkYXRlIG9wZXJhdGlvbiBoYXMgYmVlbiBkb25lLgotICAgICMKLSAgICAjIE5vdGVzOiBmb3IgdGhpcyB0byB3b3JrLCB3ZSBtYWtlIHRoZSBhc3N1bXB0aW9uIHRoYXQgb25seQotICAgICMgY2xvdWRfc3RvcmFnZS5HZXRJZkNoYW5nZWQgbW9kaWZpZXMgdGhlIGxvY2FsIHxmaWxlX3BhdGh8IGJpbmFyeS4KLQotICAgIGlmIG9zLnBhdGguZXhpc3RzKGZldGNoX3RzX3BhdGgpIGFuZCBvcy5wYXRoLmV4aXN0cyhmaWxlX3BhdGgpOgotICAgICAgd2l0aCBvcGVuKGZldGNoX3RzX3BhdGgpIGFzIGY6Ci0gICAgICAgIGRhdGEgPSBmLnJlYWQoKS5zdHJpcCgpCi0gICAgICAgIGxhc3RfYmluYXJ5X2ZldGNoX3RzID0gZmxvYXQoZGF0YSkKLQotICAgICAgaWYgbGFzdF9iaW5hcnlfZmV0Y2hfdHMgPiBvcy5wYXRoLmdldG10aW1lKGhhc2hfcGF0aCk6Ci0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgIyBXaGV0aGVyIHRoZSBiaW5hcnkgc3RvcmVkIGluIGxvY2FsIGFscmVhZHkgaGFzIGhhc2ggbWF0Y2hlZAotICAgICMgZXhwZWN0ZWRfaGFzaCBvciB3ZSBuZWVkIHRvIGZldGNoIG5ldyBiaW5hcnkgZnJvbSBjbG91ZCwgdXBkYXRlIHRoZQotICAgICMgdGltZXN0YW1wIGluIHxmZXRjaF90c19wYXRofCB3aXRoIGN1cnJlbnQgdGltZSBhbnl3YXkgc2luY2UgaXQgaXMKLSAgICAjIG91dGRhdGVkIGNvbXBhcmVkIHdpdGggc2hhMSdzIGxhc3QgbW9kaWZpZWQgdGltZS4KLSAgICB3aXRoIG9wZW4oZmV0Y2hfdHNfcGF0aCwgJ3cnKSBhcyBmOgotICAgICAgZi53cml0ZShzdHIodGltZS50aW1lKCkpKQotCi0gICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKSBhbmQgQ2FsY3VsYXRlSGFzaChmaWxlX3BhdGgpID09IGV4cGVjdGVkX2hhc2g6Ci0gICAgICByZXR1cm4gRmFsc2UKLSAgICBfR2V0TG9ja2VkKGJ1Y2tldCwgZXhwZWN0ZWRfaGFzaCwgZmlsZV9wYXRoKQotICAgIGlmIENhbGN1bGF0ZUhhc2goZmlsZV9wYXRoKSAhPSBleHBlY3RlZF9oYXNoOgotICAgICAgb3MucmVtb3ZlKGZldGNoX3RzX3BhdGgpCi0gICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgJ0JpbmFyeSBzdG9yZWQgaW4gY2xvdWQgc3RvcmFnZSBkb2VzIG5vdCBoYXZlIGhhc2ggbWF0Y2hpbmcgLnNoYTEgJwotICAgICAgICAgICdmaWxlLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIGJpbmFyeSBmaWxlIGlzIHVwbG9hZGVkIHVzaW5nICcKLSAgICAgICAgICAnZGVwb3RfdG9vbHMvdXBsb2FkX3RvX2dvb2dsZV9zdG9yYWdlLnB5IHNjcmlwdCBvciB0aHJvdWdoIGF1dG9tYXRpYyAnCi0gICAgICAgICAgJ2ZyYW1ld29yay4nKQotICAgIHJldHVybiBUcnVlCi0KLQotZGVmIEdldEZpbGVzSW5EaXJlY3RvcnlJZkNoYW5nZWQoZGlyZWN0b3J5LCBidWNrZXQpOgotICAiIiIgU2NhbiB0aGUgZGlyZWN0b3J5IGZvciAuc2hhMSBmaWxlcywgYW5kIGRvd25sb2FkIHRoZW0gZnJvbSB0aGUgZ2l2ZW4KLSAgYnVja2V0IGluIGNsb3VkIHN0b3JhZ2UgaWYgdGhlIGxvY2FsIGFuZCByZW1vdGUgaGFzaCBkb24ndCBtYXRjaCBvcgotICB0aGVyZSBpcyBubyBsb2NhbCBjb3B5LgotICAiIiIKLSAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGlyZWN0b3J5KToKLSAgICByYWlzZSBWYWx1ZUVycm9yKAotICAgICAgICAnJXMgZG9lcyBub3QgZXhpc3QuIE11c3QgcHJvdmlkZSBhIHZhbGlkIGRpcmVjdG9yeSBwYXRoLicgJSBkaXJlY3RvcnkpCi0gICMgRG9uJ3QgYWxsb3cgdGhlIHJvb3QgZGlyZWN0b3J5IHRvIGJlIGEgc2VydmluZ19kaXIuCi0gIGlmIGRpcmVjdG9yeSA9PSBvcy5wYXRoLmFic3BhdGgob3Muc2VwKToKLSAgICByYWlzZSBWYWx1ZUVycm9yKCdUcnlpbmcgdG8gc2VydmUgcm9vdCBkaXJlY3RvcnkgZnJvbSBIVFRQIHNlcnZlci4nKQotICBmb3IgZGlycGF0aCwgXywgZmlsZW5hbWVzIGluIG9zLndhbGsoZGlyZWN0b3J5KToKLSAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgotICAgICAgcGF0aF9uYW1lLCBleHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KAotICAgICAgICAgIG9zLnBhdGguam9pbihkaXJwYXRoLCBmaWxlbmFtZSkpCi0gICAgICBpZiBleHRlbnNpb24gIT0gJy5zaGExJzoKLSAgICAgICAgY29udGludWUKLSAgICAgIEdldElmQ2hhbmdlZChwYXRoX25hbWUsIGJ1Y2tldCkKLQotCi1kZWYgQ2FsY3VsYXRlSGFzaChmaWxlX3BhdGgpOgotICAiIiJDYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBmaWxlIGF0IGZpbGVfcGF0aC4iIiIKLSAgc2hhMSA9IGhhc2hsaWIuc2hhMSgpCi0gIHdpdGggb3BlbihmaWxlX3BhdGgsICdyYicpIGFzIGY6Ci0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICMgUmVhZCBpbiAxbWIgY2h1bmtzLCBzbyBpdCBkb2Vzbid0IGFsbCBoYXZlIHRvIGJlIGxvYWRlZCBpbnRvIG1lbW9yeS4KLSAgICAgIGNodW5rID0gZi5yZWFkKDEwMjQgKiAxMDI0KQotICAgICAgaWYgbm90IGNodW5rOgotICAgICAgICBicmVhawotICAgICAgc2hhMS51cGRhdGUoY2h1bmspCi0gIHJldHVybiBzaGExLmhleGRpZ2VzdCgpCi0KLQotZGVmIFJlYWRIYXNoKGhhc2hfcGF0aCk6Ci0gIHdpdGggb3BlbihoYXNoX3BhdGgsICdyYicpIGFzIGY6Ci0gICAgcmV0dXJuIGYucmVhZCgxMDI0KS5yc3RyaXAoKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2Nsb3VkX3N0b3JhZ2VfZ2xvYmFsX2xvY2sucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvY2xvdWRfc3RvcmFnZV9nbG9iYWxfbG9jay5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcxOGUxMC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvY2xvdWRfc3RvcmFnZV9nbG9iYWxfbG9jay5weQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIFRoaXMgZmlsZSBpcyB1c2VkIGJ5IGNsb3VkX3N0b3JhZ2UuX0ZpbGVMb2NrIGltcGxlbWVudGF0aW9uLCBkb24ndCBkZWxldGUgaXQhCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvY2xvdWRfc3RvcmFnZV91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9jbG91ZF9zdG9yYWdlX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTJmNzQ4Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9jbG91ZF9zdG9yYWdlX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzc0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCB1bml0dGVzdAotCi1pbXBvcnQgbW9jawotZnJvbSBweWZha2VmcyBpbXBvcnQgZmFrZV9maWxlc3lzdGVtX3VuaXR0ZXN0Ci0KLWltcG9ydCBweV91dGlscwotZnJvbSBweV91dGlscyBpbXBvcnQgY2xvdWRfc3RvcmFnZQotZnJvbSBweV91dGlscyBpbXBvcnQgbG9jawotCi1fQ0xPVURfU1RPUkFHRV9HTE9CQUxfTE9DS19QQVRIID0gb3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdjbG91ZF9zdG9yYWdlX2dsb2JhbF9sb2NrLnB5JykKLQotZGVmIF9GYWtlUmVhZEhhc2goXyk6Ci0gIHJldHVybiAnaGFzaHRoaXMhJwotCi0KLWRlZiBfRmFrZUNhbHVsYXRlSGFzaE1hdGNoZXNSZWFkKF8pOgotICByZXR1cm4gJ2hhc2h0aGlzIScKLQotCi1kZWYgX0Zha2VDYWx1bGF0ZUhhc2hOZXdIYXNoKF8pOgotICByZXR1cm4gJ29tZ25ld2hhc2gnCi0KLQotY2xhc3MgQmFzZUZha2VGc1VuaXRUZXN0KGZha2VfZmlsZXN5c3RlbV91bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHNlbGYub3JpZ2luYWxfZW52aXJvbiA9IG9zLmVudmlyb24uY29weSgpCi0gICAgb3MuZW52aXJvblsnRElTQUJMRV9DTE9VRF9TVE9SQUdFX0lPJ10gPSAnJwotICAgIHNlbGYuc2V0VXBQeWZha2VmcygpCi0gICAgc2VsZi5mcy5DcmVhdGVGaWxlKAotICAgICAgICBvcy5wYXRoLmpvaW4ocHlfdXRpbHMuR2V0Q2F0YXB1bHREaXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICd0aGlyZF9wYXJ0eScsICdnc3V0aWwnLCAnZ3N1dGlsJykpCi0KLSAgZGVmIENyZWF0ZUZpbGVzKHNlbGYsIGZpbGVfcGF0aHMpOgotICAgIGZvciBmIGluIGZpbGVfcGF0aHM6Ci0gICAgICBzZWxmLmZzLkNyZWF0ZUZpbGUoZikKLQotICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgc2VsZi50ZWFyRG93blB5ZmFrZWZzKCkKLSAgICBvcy5lbnZpcm9uID0gc2VsZi5vcmlnaW5hbF9lbnZpcm9uCi0KLSAgZGVmIF9GYWtlUnVuQ29tbWFuZChzZWxmLCBjbWQpOgotICAgIHBhc3MKLQotICBkZWYgX0Zha2VHZXQoc2VsZiwgYnVja2V0LCByZW1vdGVfcGF0aCwgbG9jYWxfcGF0aCk6Ci0gICAgcGFzcwotCi0KLWNsYXNzIENsb3VkU3RvcmFnZUZha2VGc1VuaXRUZXN0KEJhc2VGYWtlRnNVbml0VGVzdCk6Ci0KLSAgZGVmIF9Bc3NlcnRSdW5Db21tYW5kUmFpc2VzRXJyb3Ioc2VsZiwgY29tbXVuaWNhdGVfc3RycywgZXJyb3IpOgotICAgIHdpdGggbW9jay5wYXRjaCgncHlfdXRpbHMuY2xvdWRfc3RvcmFnZS5zdWJwcm9jZXNzLlBvcGVuJykgYXMgcG9wZW46Ci0gICAgICBwX21vY2sgPSBtb2NrLk1vY2soKQotICAgICAgcG9wZW4ucmV0dXJuX3ZhbHVlID0gcF9tb2NrCi0gICAgICBwX21vY2sucmV0dXJuY29kZSA9IDEKLSAgICAgIGZvciBzdGRlcnIgaW4gY29tbXVuaWNhdGVfc3RyczoKLSAgICAgICAgcF9tb2NrLmNvbW11bmljYXRlLnJldHVybl92YWx1ZSA9ICgnJywgc3RkZXJyKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgY2xvdWRfc3RvcmFnZS5fUnVuQ29tbWFuZCwgW10pCi0KLSAgZGVmIHRlc3RSdW5Db21tYW5kQ3JlZGVudGlhbHNFcnJvcihzZWxmKToKLSAgICBzdHJzID0gWydZb3UgYXJlIGF0dGVtcHRpbmcgdG8gYWNjZXNzIHByb3RlY3RlZCBkYXRhIHdpdGggbm8gY29uZmlndXJlZCcsCi0gICAgICAgICAgICAnRmFpbHVyZTogTm8gaGFuZGxlciB3YXMgcmVhZHkgdG8gYXV0aGVudGljYXRlLiddCi0gICAgc2VsZi5fQXNzZXJ0UnVuQ29tbWFuZFJhaXNlc0Vycm9yKHN0cnMsIGNsb3VkX3N0b3JhZ2UuQ3JlZGVudGlhbHNFcnJvcikKLQotICBkZWYgdGVzdFJ1bkNvbW1hbmRQZXJtaXNzaW9uRXJyb3Ioc2VsZik6Ci0gICAgc3RycyA9IFsnc3RhdHVzPTQwMycsICdzdGF0dXMgNDAzJywgJzQwMyBGb3JiaWRkZW4nXQotICAgIHNlbGYuX0Fzc2VydFJ1bkNvbW1hbmRSYWlzZXNFcnJvcihzdHJzLCBjbG91ZF9zdG9yYWdlLlBlcm1pc3Npb25FcnJvcikKLQotICBkZWYgdGVzdFJ1bkNvbW1hbmROb3RGb3VuZEVycm9yKHNlbGYpOgotICAgIHN0cnMgPSBbJ0ludmFsaWRVcmlFcnJvcicsICdObyBzdWNoIG9iamVjdCcsICdObyBVUkxzIG1hdGNoZWQnLAotICAgICAgICAgICAgJ09uZSBvciBtb3JlIFVSTHMgbWF0Y2hlZCBubycsICdJbnZhbGlkVXJpRXJyb3InXQotICAgIHNlbGYuX0Fzc2VydFJ1bkNvbW1hbmRSYWlzZXNFcnJvcihzdHJzLCBjbG91ZF9zdG9yYWdlLk5vdEZvdW5kRXJyb3IpCi0KLSAgZGVmIHRlc3RSdW5Db21tYW5kU2VydmVyRXJyb3Ioc2VsZik6Ci0gICAgc3RycyA9IFsnNTAwIEludGVybmFsIFNlcnZlciBFcnJvciddCi0gICAgc2VsZi5fQXNzZXJ0UnVuQ29tbWFuZFJhaXNlc0Vycm9yKHN0cnMsIGNsb3VkX3N0b3JhZ2UuU2VydmVyRXJyb3IpCi0KLSAgZGVmIHRlc3RSdW5Db21tYW5kR2VuZXJpY0Vycm9yKHNlbGYpOgotICAgIHN0cnMgPSBbJ1JhbmRvbSBzdHJpbmcnXQotICAgIHNlbGYuX0Fzc2VydFJ1bkNvbW1hbmRSYWlzZXNFcnJvcihzdHJzLCBjbG91ZF9zdG9yYWdlLkNsb3VkU3RvcmFnZUVycm9yKQotCi0gIGRlZiB0ZXN0SW5zZXJ0Q3JlYXRlc1ZhbGlkQ2xvdWRVcmwoc2VsZik6Ci0gICAgb3JpZ19ydW5fY29tbWFuZCA9IGNsb3VkX3N0b3JhZ2UuX1J1bkNvbW1hbmQKLSAgICB0cnk6Ci0gICAgICBjbG91ZF9zdG9yYWdlLl9SdW5Db21tYW5kID0gc2VsZi5fRmFrZVJ1bkNvbW1hbmQKLSAgICAgIHJlbW90ZV9wYXRoID0gJ3Rlc3QtcmVtb3RlLXBhdGguaHRtbCcKLSAgICAgIGxvY2FsX3BhdGggPSAndGVzdC1sb2NhbC1wYXRoLmh0bWwnCi0gICAgICBjbG91ZF91cmwgPSBjbG91ZF9zdG9yYWdlLkluc2VydChjbG91ZF9zdG9yYWdlLlBVQkxJQ19CVUNLRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVfcGF0aCwgbG9jYWxfcGF0aCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2h0dHBzOi8vY29uc29sZS5kZXZlbG9wZXJzLmdvb2dsZS5jb20vbS9jbG91ZHN0b3JhZ2UnCi0gICAgICAgICAgICAgICAgICAgICAgICcvYi9jaHJvbWl1bS10ZWxlbWV0cnkvby90ZXN0LXJlbW90ZS1wYXRoLmh0bWwnLAotICAgICAgICAgICAgICAgICAgICAgICBjbG91ZF91cmwpCi0gICAgZmluYWxseToKLSAgICAgIGNsb3VkX3N0b3JhZ2UuX1J1bkNvbW1hbmQgPSBvcmlnX3J1bl9jb21tYW5kCi0KLSAgQG1vY2sucGF0Y2goJ3B5X3V0aWxzLmNsb3VkX3N0b3JhZ2Uuc3VicHJvY2VzcycpCi0gIGRlZiB0ZXN0RXhpc3RzUmV0dXJuc0ZhbHNlKHNlbGYsIHN1YnByb2Nlc3NfbW9jayk6Ci0gICAgcF9tb2NrID0gbW9jay5Nb2NrKCkKLSAgICBzdWJwcm9jZXNzX21vY2suUG9wZW4ucmV0dXJuX3ZhbHVlID0gcF9tb2NrCi0gICAgcF9tb2NrLmNvbW11bmljYXRlLnJldHVybl92YWx1ZSA9ICgKLSAgICAgICAgJycsCi0gICAgICAgICdDb21tYW5kRXhjZXB0aW9uOiBPbmUgb3IgbW9yZSBVUkxzIG1hdGNoZWQgbm8gb2JqZWN0cy5cbicpCi0gICAgcF9tb2NrLnJldHVybmNvZGVfcmVzdWx0ID0gMQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2xvdWRfc3RvcmFnZS5FeGlzdHMoJ2Zha2UgYnVja2V0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWtlIHJlbW90ZSBwYXRoJykpCi0KLSAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksCi0gICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9jYXRhcHVsdC1wcm9qZWN0L2NhdGFwdWx0L2lzc3Vlcy8xODYxJykKLSAgZGVmIHRlc3RHZXRGaWxlc0luRGlyZWN0b3J5SWZDaGFuZ2VkKHNlbGYpOgotICAgIHNlbGYuQ3JlYXRlRmlsZXMoWwotICAgICAgICAncmVhbF9kaXJfcGF0aC9kaXIxLzFmaWxlMS5zaGExJywKLSAgICAgICAgJ3JlYWxfZGlyX3BhdGgvZGlyMS8xZmlsZTIudHh0JywKLSAgICAgICAgJ3JlYWxfZGlyX3BhdGgvZGlyMS8xZmlsZTMuc2hhMScsCi0gICAgICAgICdyZWFsX2Rpcl9wYXRoL2RpcjIvMmZpbGUudHh0JywKLSAgICAgICAgJ3JlYWxfZGlyX3BhdGgvZGlyMy8zZmlsZTEuc2hhMSddKQotCi0gICAgZGVmIEluY3JlbWVudEZpbGVzVXBkYXRlZCgqXyk6Ci0gICAgICBJbmNyZW1lbnRGaWxlc1VwZGF0ZWQuZmlsZXNfdXBkYXRlZCArPSAxCi0gICAgSW5jcmVtZW50RmlsZXNVcGRhdGVkLmZpbGVzX3VwZGF0ZWQgPSAwCi0gICAgb3JpZ19nZXRfaWZfY2hhbmdlZCA9IGNsb3VkX3N0b3JhZ2UuR2V0SWZDaGFuZ2VkCi0gICAgY2xvdWRfc3RvcmFnZS5HZXRJZkNoYW5nZWQgPSBJbmNyZW1lbnRGaWxlc1VwZGF0ZWQKLSAgICB0cnk6Ci0gICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjbG91ZF9zdG9yYWdlLkdldEZpbGVzSW5EaXJlY3RvcnlJZkNoYW5nZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgob3Muc2VwKSwgY2xvdWRfc3RvcmFnZS5QVUJMSUNfQlVDS0VUKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBJbmNyZW1lbnRGaWxlc1VwZGF0ZWQuZmlsZXNfdXBkYXRlZCkKLSAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNsb3VkX3N0b3JhZ2UuR2V0RmlsZXNJbkRpcmVjdG9yeUlmQ2hhbmdlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICdmYWtlX2Rpcl9wYXRoJywgY2xvdWRfc3RvcmFnZS5QVUJMSUNfQlVDS0VUKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBJbmNyZW1lbnRGaWxlc1VwZGF0ZWQuZmlsZXNfdXBkYXRlZCkKLSAgICAgIGNsb3VkX3N0b3JhZ2UuR2V0RmlsZXNJbkRpcmVjdG9yeUlmQ2hhbmdlZCgncmVhbF9kaXJfcGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvdWRfc3RvcmFnZS5QVUJMSUNfQlVDS0VUKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBJbmNyZW1lbnRGaWxlc1VwZGF0ZWQuZmlsZXNfdXBkYXRlZCkKLSAgICBmaW5hbGx5OgotICAgICAgY2xvdWRfc3RvcmFnZS5HZXRJZkNoYW5nZWQgPSBvcmlnX2dldF9pZl9jaGFuZ2VkCi0KLSAgZGVmIHRlc3RDb3B5KHNlbGYpOgotICAgIG9yaWdfcnVuX2NvbW1hbmQgPSBjbG91ZF9zdG9yYWdlLl9SdW5Db21tYW5kCi0KLSAgICBkZWYgQXNzZXJ0Q29ycmVjdFJ1bkNvbW1hbmRBcmdzKGFyZ3MpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9hcmdzLCBhcmdzKQotICAgIGNsb3VkX3N0b3JhZ2UuX1J1bkNvbW1hbmQgPSBBc3NlcnRDb3JyZWN0UnVuQ29tbWFuZEFyZ3MKLSAgICBleHBlY3RlZF9hcmdzID0gWydjcCcsICdnczovL2J1Y2tldDEvcmVtb3RlX3BhdGgxJywKLSAgICAgICAgICAgICAgICAgICAgICdnczovL2J1Y2tldDIvcmVtb3RlX3BhdGgyJ10KLSAgICB0cnk6Ci0gICAgICBjbG91ZF9zdG9yYWdlLkNvcHkoJ2J1Y2tldDEnLCAnYnVja2V0MicsICdyZW1vdGVfcGF0aDEnLCAncmVtb3RlX3BhdGgyJykKLSAgICBmaW5hbGx5OgotICAgICAgY2xvdWRfc3RvcmFnZS5fUnVuQ29tbWFuZCA9IG9yaWdfcnVuX2NvbW1hbmQKLQotICBAbW9jay5wYXRjaCgncHlfdXRpbHMuY2xvdWRfc3RvcmFnZS5fRmlsZUxvY2snKQotICBkZWYgdGVzdERpc2FibGVDbG91ZFN0b3JhZ2VJbyhzZWxmLCB1bnVzZWRfbG9ja19tb2NrKToKLSAgICBvcy5lbnZpcm9uWydESVNBQkxFX0NMT1VEX1NUT1JBR0VfSU8nXSA9ICcxJwotICAgIGRpcl9wYXRoID0gJ3JlYWxfZGlyX3BhdGgnCi0gICAgc2VsZi5mcy5DcmVhdGVEaXJlY3RvcnkoZGlyX3BhdGgpCi0gICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGRpcl9wYXRoLCAnZmlsZTEnKQotICAgIGZpbGVfcGF0aF9zaGEgPSBmaWxlX3BhdGggKyAnLnNoYTEnCi0KLSAgICBkZWYgQ2xlYW5UaW1lU3RhbXBGaWxlKCk6Ci0gICAgICBvcy5yZW1vdmUoZmlsZV9wYXRoICsgJy5mZXRjaHRzJykKLQotICAgIHNlbGYuQ3JlYXRlRmlsZXMoW2ZpbGVfcGF0aCwgZmlsZV9wYXRoX3NoYV0pCi0gICAgd2l0aCBvcGVuKGZpbGVfcGF0aF9zaGEsICd3JykgYXMgZjoKLSAgICAgIGYud3JpdGUoJ2hhc2gxMjM0JykKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlSU9EaXNhYmxlZCk6Ci0gICAgICBjbG91ZF9zdG9yYWdlLkNvcHkoJ2J1Y2tldDEnLCAnYnVja2V0MicsICdyZW1vdGVfcGF0aDEnLCAncmVtb3RlX3BhdGgyJykKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlSU9EaXNhYmxlZCk6Ci0gICAgICBjbG91ZF9zdG9yYWdlLkdldCgnYnVja2V0JywgJ2ZvbycsIGZpbGVfcGF0aCkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlSU9EaXNhYmxlZCk6Ci0gICAgICBjbG91ZF9zdG9yYWdlLkdldElmQ2hhbmdlZChmaWxlX3BhdGgsICdmb28nKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoY2xvdWRfc3RvcmFnZS5DbG91ZFN0b3JhZ2VJT0Rpc2FibGVkKToKLSAgICAgIGNsb3VkX3N0b3JhZ2UuR2V0SWZIYXNoQ2hhbmdlZCgnYmFyJywgZmlsZV9wYXRoLCAnYnVja2V0JywgJ2hhc2gxMjM0JykKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlSU9EaXNhYmxlZCk6Ci0gICAgICBjbG91ZF9zdG9yYWdlLkluc2VydCgnYnVja2V0JywgJ2ZvbycsIGZpbGVfcGF0aCkKLQotICAgIENsZWFuVGltZVN0YW1wRmlsZSgpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjbG91ZF9zdG9yYWdlLkNsb3VkU3RvcmFnZUlPRGlzYWJsZWQpOgotICAgICAgY2xvdWRfc3RvcmFnZS5HZXRGaWxlc0luRGlyZWN0b3J5SWZDaGFuZ2VkKGRpcl9wYXRoLCAnYnVja2V0JykKLQotCi1jbGFzcyBHZXRJZkNoYW5nZWRUZXN0cyhCYXNlRmFrZUZzVW5pdFRlc3QpOgotCi0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzdXBlcihHZXRJZkNoYW5nZWRUZXN0cywgc2VsZikuc2V0VXAoKQotICAgIHNlbGYuX29yaWdfcmVhZF9oYXNoID0gY2xvdWRfc3RvcmFnZS5SZWFkSGFzaAotICAgIHNlbGYuX29yaWdfY2FsY3VsYXRlX2hhc2ggPSBjbG91ZF9zdG9yYWdlLkNhbGN1bGF0ZUhhc2gKLQotICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgc3VwZXIoR2V0SWZDaGFuZ2VkVGVzdHMsIHNlbGYpLnRlYXJEb3duKCkKLSAgICBjbG91ZF9zdG9yYWdlLkNhbGN1bGF0ZUhhc2ggPSBzZWxmLl9vcmlnX2NhbGN1bGF0ZV9oYXNoCi0gICAgY2xvdWRfc3RvcmFnZS5SZWFkSGFzaCA9IHNlbGYuX29yaWdfcmVhZF9oYXNoCi0KLSAgQG1vY2sucGF0Y2goJ3B5X3V0aWxzLmNsb3VkX3N0b3JhZ2UuX0ZpbGVMb2NrJykKLSAgQG1vY2sucGF0Y2goJ3B5X3V0aWxzLmNsb3VkX3N0b3JhZ2UuX0dldExvY2tlZCcpCi0gIGRlZiB0ZXN0SGFzaFBhdGhEb2VzTm90RXhpc3RzKHNlbGYsIHVudXNlZF9nZXRfbG9ja2VkLCB1bnVzZWRfbG9ja19tb2NrKToKLSAgICBjbG91ZF9zdG9yYWdlLlJlYWRIYXNoID0gX0Zha2VSZWFkSGFzaAotICAgIGNsb3VkX3N0b3JhZ2UuQ2FsY3VsYXRlSGFzaCA9IF9GYWtlQ2FsdWxhdGVIYXNoTWF0Y2hlc1JlYWQKLSAgICBmaWxlX3BhdGggPSAndGVzdC1maWxlLXBhdGgud3ByJwotCi0gICAgY2xvdWRfc3RvcmFnZS5fR2V0TG9ja2VkID0gc2VsZi5fRmFrZUdldAotICAgICMgaGFzaF9wYXRoIGRvZXNuJ3QgZXhpc3QuCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjbG91ZF9zdG9yYWdlLkdldElmQ2hhbmdlZChmaWxlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG91ZF9zdG9yYWdlLlBVQkxJQ19CVUNLRVQpKQotCi0gIEBtb2NrLnBhdGNoKCdweV91dGlscy5jbG91ZF9zdG9yYWdlLl9GaWxlTG9jaycpCi0gIEBtb2NrLnBhdGNoKCdweV91dGlscy5jbG91ZF9zdG9yYWdlLl9HZXRMb2NrZWQnKQotICBkZWYgdGVzdEhhc2hQYXRoRXhpc3RzQnV0RmlsZVBhdGhEb2VzTm90KAotICAgICAgc2VsZiwgdW51c2VkX2dldF9sb2NrZWQsIHVudXNlZF9sb2NrX21vY2spOgotICAgIGNsb3VkX3N0b3JhZ2UuUmVhZEhhc2ggPSBfRmFrZVJlYWRIYXNoCi0gICAgY2xvdWRfc3RvcmFnZS5DYWxjdWxhdGVIYXNoID0gX0Zha2VDYWx1bGF0ZUhhc2hNYXRjaGVzUmVhZAotICAgIGZpbGVfcGF0aCA9ICd0ZXN0LWZpbGUtcGF0aC53cHInCi0gICAgaGFzaF9wYXRoID0gZmlsZV9wYXRoICsgJy5zaGExJwotCi0gICAgIyBoYXNoX3BhdGggZXhpc3RzLCBidXQgZmlsZV9wYXRoIGRvZXNuJ3QuCi0gICAgc2VsZi5DcmVhdGVGaWxlcyhbaGFzaF9wYXRoXSkKLSAgICBzZWxmLmFzc2VydFRydWUoY2xvdWRfc3RvcmFnZS5HZXRJZkNoYW5nZWQoZmlsZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG91ZF9zdG9yYWdlLlBVQkxJQ19CVUNLRVQpKQotCi0gIEBtb2NrLnBhdGNoKCdweV91dGlscy5jbG91ZF9zdG9yYWdlLl9GaWxlTG9jaycpCi0gIEBtb2NrLnBhdGNoKCdweV91dGlscy5jbG91ZF9zdG9yYWdlLl9HZXRMb2NrZWQnKQotICBkZWYgdGVzdEhhc2hQYXRoQW5kRmlsZUhhc2hFeGlzdFdpdGhTYW1lSGFzaCgKLSAgICAgIHNlbGYsIHVudXNlZF9nZXRfbG9ja2VkLCB1bnVzZWRfbG9ja19tb2NrKToKLSAgICBjbG91ZF9zdG9yYWdlLlJlYWRIYXNoID0gX0Zha2VSZWFkSGFzaAotICAgIGNsb3VkX3N0b3JhZ2UuQ2FsY3VsYXRlSGFzaCA9IF9GYWtlQ2FsdWxhdGVIYXNoTWF0Y2hlc1JlYWQKLSAgICBmaWxlX3BhdGggPSAndGVzdC1maWxlLXBhdGgud3ByJwotCi0gICAgIyBoYXNoX3BhdGggYW5kIGZpbGVfcGF0aCBleGlzdCwgYW5kIGhhdmUgc2FtZSBoYXNoLgotICAgIHNlbGYuQ3JlYXRlRmlsZXMoW2ZpbGVfcGF0aF0pCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjbG91ZF9zdG9yYWdlLkdldElmQ2hhbmdlZChmaWxlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG91ZF9zdG9yYWdlLlBVQkxJQ19CVUNLRVQpKQotCi0gIEBtb2NrLnBhdGNoKCdweV91dGlscy5jbG91ZF9zdG9yYWdlLl9GaWxlTG9jaycpCi0gIEBtb2NrLnBhdGNoKCdweV91dGlscy5jbG91ZF9zdG9yYWdlLl9HZXRMb2NrZWQnKQotICBkZWYgdGVzdEhhc2hQYXRoQW5kRmlsZUhhc2hFeGlzdFdpdGhEaWZmZXJlbnRIYXNoKAotICAgICAgc2VsZiwgbW9ja19nZXRfbG9ja2VkLCB1bnVzZWRfZ2V0X2xvY2tlZCk6Ci0gICAgY2xvdWRfc3RvcmFnZS5SZWFkSGFzaCA9IF9GYWtlUmVhZEhhc2gKLSAgICBjbG91ZF9zdG9yYWdlLkNhbGN1bGF0ZUhhc2ggPSBfRmFrZUNhbHVsYXRlSGFzaE5ld0hhc2gKLSAgICBmaWxlX3BhdGggPSAndGVzdC1maWxlLXBhdGgud3ByJwotICAgIGhhc2hfcGF0aCA9IGZpbGVfcGF0aCArICcuc2hhMScKLQotICAgIGRlZiBfRmFrZUdldExvY2tlZChidWNrZXQsIGV4cGVjdGVkX2hhc2gsIGZpbGVfcGF0aCk6Ci0gICAgICBkZWwgYnVja2V0LCBleHBlY3RlZF9oYXNoLCBmaWxlX3BhdGggICMgdW51c2VkCi0gICAgICBjbG91ZF9zdG9yYWdlLkNhbGN1bGF0ZUhhc2ggPSBfRmFrZUNhbHVsYXRlSGFzaE1hdGNoZXNSZWFkCi0KLSAgICBtb2NrX2dldF9sb2NrZWQuc2lkZV9lZmZlY3QgPSBfRmFrZUdldExvY2tlZAotCi0gICAgc2VsZi5DcmVhdGVGaWxlcyhbZmlsZV9wYXRoLCBoYXNoX3BhdGhdKQotICAgICMgaGFzaF9wYXRoIGFuZCBmaWxlX3BhdGggZXhpc3QsIGFuZCBoYXZlIGRpZmZlcmVudCBoYXNoZXMuCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNsb3VkX3N0b3JhZ2UuR2V0SWZDaGFuZ2VkKGZpbGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvdWRfc3RvcmFnZS5QVUJMSUNfQlVDS0VUKSkKLQotICBAbW9jay5wYXRjaCgncHlfdXRpbHMuY2xvdWRfc3RvcmFnZS5fRmlsZUxvY2snKQotICBAbW9jay5wYXRjaCgncHlfdXRpbHMuY2xvdWRfc3RvcmFnZS5DYWxjdWxhdGVIYXNoJykKLSAgQG1vY2sucGF0Y2goJ3B5X3V0aWxzLmNsb3VkX3N0b3JhZ2UuX0dldExvY2tlZCcpCi0gIGRlZiB0ZXN0Tm9IYXNoQ29tcHV0YXRpb25OZWVkZWRVcG9uU2Vjb25kQ2FsbCgKLSAgICAgIHNlbGYsIG1vY2tfZ2V0X2xvY2tlZCwgbW9ja19jYWxjdWxhdGVfaGFzaCwgdW51c2VkX2dldF9sb2NrZWQpOgotICAgIG1vY2tfY2FsY3VsYXRlX2hhc2guc2lkZV9lZmZlY3QgPSBfRmFrZUNhbHVsYXRlSGFzaE5ld0hhc2gKLSAgICBjbG91ZF9zdG9yYWdlLlJlYWRIYXNoID0gX0Zha2VSZWFkSGFzaAotICAgIGZpbGVfcGF0aCA9ICd0ZXN0LWZpbGUtcGF0aC53cHInCi0gICAgaGFzaF9wYXRoID0gZmlsZV9wYXRoICsgJy5zaGExJwotCi0gICAgZGVmIF9GYWtlR2V0TG9ja2VkKGJ1Y2tldCwgZXhwZWN0ZWRfaGFzaCwgZmlsZV9wYXRoKToKLSAgICAgIGRlbCBidWNrZXQsIGV4cGVjdGVkX2hhc2gsIGZpbGVfcGF0aCAgIyB1bnVzZWQKLSAgICAgIGNsb3VkX3N0b3JhZ2UuQ2FsY3VsYXRlSGFzaCA9IF9GYWtlQ2FsdWxhdGVIYXNoTWF0Y2hlc1JlYWQKLQotICAgIG1vY2tfZ2V0X2xvY2tlZC5zaWRlX2VmZmVjdCA9IF9GYWtlR2V0TG9ja2VkCi0KLSAgICBzZWxmLkNyZWF0ZUZpbGVzKFtmaWxlX3BhdGgsIGhhc2hfcGF0aF0pCi0gICAgIyBoYXNoX3BhdGggYW5kIGZpbGVfcGF0aCBleGlzdCwgYW5kIGhhdmUgZGlmZmVyZW50IGhhc2hlcy4gVGhpcyBmaXJzdCBjYWxsCi0gICAgIyB3aWxsIGludm9rZSBhIGZldGNoLgotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbG91ZF9zdG9yYWdlLkdldElmQ2hhbmdlZChmaWxlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3VkX3N0b3JhZ2UuUFVCTElDX0JVQ0tFVCkpCi0KLSAgICAjIFRoZSBmZXRjaCBsZWZ0IGEgLmZldGNodHMgZmlsZSBvbiBtYWNoaW5lLgotICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmaWxlX3BhdGggKyAnLmZldGNodHMnKSkKLQotICAgICMgU3Vic2VxdWVudCBpbnZvY2F0aW9ucyBvZiBHZXRJZkNoYW5nZWQgc2hvdWxkIG5vdCBpbnZva2UgQ2FsY3VsYXRlSGFzaC4KLSAgICBtb2NrX2NhbGN1bGF0ZV9oYXNoLmFzc2VydF9ub3RfY2FsbGVkKCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGNsb3VkX3N0b3JhZ2UuR2V0SWZDaGFuZ2VkKGZpbGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3VkX3N0b3JhZ2UuUFVCTElDX0JVQ0tFVCkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjbG91ZF9zdG9yYWdlLkdldElmQ2hhbmdlZChmaWxlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG91ZF9zdG9yYWdlLlBVQkxJQ19CVUNLRVQpKQotCi0gIEBtb2NrLnBhdGNoKCdweV91dGlscy5jbG91ZF9zdG9yYWdlLl9GaWxlTG9jaycpCi0gIEBtb2NrLnBhdGNoKCdweV91dGlscy5jbG91ZF9zdG9yYWdlLkNhbGN1bGF0ZUhhc2gnKQotICBAbW9jay5wYXRjaCgncHlfdXRpbHMuY2xvdWRfc3RvcmFnZS5fR2V0TG9ja2VkJykKLSAgZGVmIHRlc3RSZWZldGNoaW5nRmlsZVVwb25IYXNoRmlsZUNoYW5nZSgKLSAgICAgIHNlbGYsIG1vY2tfZ2V0X2xvY2tlZCwgbW9ja19jYWxjdWxhdGVfaGFzaCwgdW51c2VkX2dldF9sb2NrZWQpOgotICAgIG1vY2tfY2FsY3VsYXRlX2hhc2guc2lkZV9lZmZlY3QgPSBfRmFrZUNhbHVsYXRlSGFzaE5ld0hhc2gKLSAgICBjbG91ZF9zdG9yYWdlLlJlYWRIYXNoID0gX0Zha2VSZWFkSGFzaAotICAgIGZpbGVfcGF0aCA9ICd0ZXN0LWZpbGUtcGF0aC53cHInCi0gICAgaGFzaF9wYXRoID0gZmlsZV9wYXRoICsgJy5zaGExJwotCi0gICAgZGVmIF9GYWtlR2V0TG9ja2VkKGJ1Y2tldCwgZXhwZWN0ZWRfaGFzaCwgZmlsZV9wYXRoKToKLSAgICAgIGRlbCBidWNrZXQsIGV4cGVjdGVkX2hhc2gsIGZpbGVfcGF0aCAgIyB1bnVzZWQKLSAgICAgIGNsb3VkX3N0b3JhZ2UuQ2FsY3VsYXRlSGFzaCA9IF9GYWtlQ2FsdWxhdGVIYXNoTWF0Y2hlc1JlYWQKLQotICAgIG1vY2tfZ2V0X2xvY2tlZC5zaWRlX2VmZmVjdCA9IF9GYWtlR2V0TG9ja2VkCi0KLSAgICBzZWxmLkNyZWF0ZUZpbGVzKFtmaWxlX3BhdGgsIGhhc2hfcGF0aF0pCi0gICAgIyBoYXNoX3BhdGggYW5kIGZpbGVfcGF0aCBleGlzdCwgYW5kIGhhdmUgZGlmZmVyZW50IGhhc2hlcy4gVGhpcyBmaXJzdCBjYWxsCi0gICAgIyB3aWxsIGludm9rZSBhIGZldGNoLgotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbG91ZF9zdG9yYWdlLkdldElmQ2hhbmdlZChmaWxlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3VkX3N0b3JhZ2UuUFVCTElDX0JVQ0tFVCkpCi0KLSAgICAjIFRoZSBmZXRjaCBsZWZ0IGEgLmZldGNodHMgZmlsZSBvbiBtYWNoaW5lLgotICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmaWxlX3BhdGggKyAnLmZldGNodHMnKSkKLQotICAgIHdpdGggb3BlbihmaWxlX3BhdGggKyAnLmZldGNodHMnKSBhcyBmOgotICAgICAgZmV0Y2h0cyA9IGZsb2F0KGYucmVhZCgpKQotCi0gICAgIyBVcGRhdGluZyB0aGUgLnNoYTEgaGFzaF9wYXRoIGZpbGUgd2l0aCB0aGUgbmV3IGhhc2ggYWZ0ZXIgLmZldGNodHMKLSAgICAjIGlzIGNyZWF0ZWQuCi0gICAgZmlsZV9vYmogPSBzZWxmLmZzLkdldE9iamVjdChoYXNoX3BhdGgpCi0gICAgZmlsZV9vYmouU2V0TVRpbWUoZmV0Y2h0cyArIDEwMCkKLQotICAgIGNsb3VkX3N0b3JhZ2UuUmVhZEhhc2ggPSBsYW1iZGEgXzogJ2hhc2hOZVcnCi0gICAgZGVmIF9GYWtlR2V0TG9ja2VkTmV3SGFzaChidWNrZXQsIGV4cGVjdGVkX2hhc2gsIGZpbGVfcGF0aCk6Ci0gICAgICBkZWwgYnVja2V0LCBleHBlY3RlZF9oYXNoLCBmaWxlX3BhdGggICMgdW51c2VkCi0gICAgICBjbG91ZF9zdG9yYWdlLkNhbGN1bGF0ZUhhc2ggPSBsYW1iZGEgXzogJ2hhc2hOZVcnCi0KLSAgICBtb2NrX2dldF9sb2NrZWQuc2lkZV9lZmZlY3QgPSBfRmFrZUdldExvY2tlZE5ld0hhc2gKLQotICAgICMgaGFzaF9wYXRoIGFuZCBmaWxlX3BhdGggZXhpc3QsIGFuZCBoYXZlIGRpZmZlcmVudCBoYXNoZXMuIFRoaXMgZmlyc3QgY2FsbAotICAgICMgd2lsbCBpbnZva2UgYSBmZXRjaC4KLSAgICBzZWxmLmFzc2VydFRydWUoY2xvdWRfc3RvcmFnZS5HZXRJZkNoYW5nZWQoZmlsZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG91ZF9zdG9yYWdlLlBVQkxJQ19CVUNLRVQpKQotCi0KLWNsYXNzIENsb3VkU3RvcmFnZVJlYWxGc1VuaXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5vcmlnaW5hbF9lbnZpcm9uID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICBvcy5lbnZpcm9uWydESVNBQkxFX0NMT1VEX1NUT1JBR0VfSU8nXSA9ICcnCi0KLSAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgIG9zLmVudmlyb24gPSBzZWxmLm9yaWdpbmFsX2Vudmlyb24KLQotICBAbW9jay5wYXRjaCgncHlfdXRpbHMuY2xvdWRfc3RvcmFnZS5MT0NLX0FDUVVJU0lUSU9OX1RJTUVPVVQnLCAuMDA1KQotICBkZWYgdGVzdEdldFBzZXVkb0xvY2tVbmF2YWlsYWJsZUNhdXNlc1RpbWVvdXQoc2VsZik6Ci0gICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoc3VmZml4PScucHNldWRvX2xvY2snKSBhcyBwc2V1ZG9fbG9ja19mZDoKLSAgICAgIHdpdGggbG9jay5GaWxlTG9jayhwc2V1ZG9fbG9ja19mZCwgbG9jay5MT0NLX0VYIHwgbG9jay5MT0NLX05CKToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhweV91dGlscy5UaW1lb3V0RXhjZXB0aW9uKToKLSAgICAgICAgICBmaWxlX3BhdGggPSBwc2V1ZG9fbG9ja19mZC5uYW1lLnJlcGxhY2UoJy5wc2V1ZG9fbG9jaycsICcnKQotICAgICAgICAgIGNsb3VkX3N0b3JhZ2UuR2V0SWZDaGFuZ2VkKGZpbGVfcGF0aCwgY2xvdWRfc3RvcmFnZS5QVUJMSUNfQlVDS0VUKQotCi0gIEBtb2NrLnBhdGNoKCdweV91dGlscy5jbG91ZF9zdG9yYWdlLkxPQ0tfQUNRVUlTSVRJT05fVElNRU9VVCcsIC4wMDUpCi0gIGRlZiB0ZXN0R2V0R2xvYmFsTG9ja1VuYXZhaWxhYmxlQ2F1c2VzVGltZW91dChzZWxmKToKLSAgICB3aXRoIG9wZW4oX0NMT1VEX1NUT1JBR0VfR0xPQkFMX0xPQ0tfUEFUSCkgYXMgZ2xvYmFsX2xvY2tfZmQ6Ci0gICAgICB3aXRoIGxvY2suRmlsZUxvY2soZ2xvYmFsX2xvY2tfZmQsIGxvY2suTE9DS19FWCB8IGxvY2suTE9DS19OQik6Ci0gICAgICAgIHRtcF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnZm9vJykKLSAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHB5X3V0aWxzLlRpbWVvdXRFeGNlcHRpb24pOgotICAgICAgICAgICAgY2xvdWRfc3RvcmFnZS5HZXRJZkNoYW5nZWQoZmlsZV9wYXRoLCBjbG91ZF9zdG9yYWdlLlBVQkxJQ19CVUNLRVQpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgc2h1dGlsLnJtdHJlZSh0bXBfZGlyKQotCi0KLWNsYXNzIENsb3VkU3RvcmFnZUVycm9ySGFuZGxpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgZGVmIHJ1blRlc3Qoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNsb3VkX3N0b3JhZ2UuR2V0RXJyb3JPYmplY3RGb3JDbG91ZFN0b3JhZ2VTdGRlcnIoCi0gICAgICAgICdTZXJ2aWNlRXhjZXB0aW9uOiA0MDEgQW5vbnltb3VzIHVzZXJzIGRvZXMgbm90IGhhdmUgJwotICAgICAgICAnc3RvcmFnZS5vYmplY3RzLmdldCBhY2Nlc3MgdG8gb2JqZWN0IGNocm9tZS1wYXJ0bmVyLXRlbGVtZXRyeScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjbG91ZF9zdG9yYWdlLkNyZWRlbnRpYWxzRXJyb3IpCi0gICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNsb3VkX3N0b3JhZ2UuR2V0RXJyb3JPYmplY3RGb3JDbG91ZFN0b3JhZ2VTdGRlcnIoCi0gICAgICAgICc0MDMgQ2FsbGVyIGRvZXMgbm90IGhhdmUgc3RvcmFnZS5vYmplY3RzLmxpc3QgYWNjZXNzIHRvIGJ1Y2tldCAnCi0gICAgICAgICdjaHJvbWUtdGVsZW1ldHJ5JyksIGNsb3VkX3N0b3JhZ2UuUGVybWlzc2lvbkVycm9yKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2NvbnRleHRsaWJfZXh0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2NvbnRleHRsaWJfZXh0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjJkMjdkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9jb250ZXh0bGliX2V4dC5weQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotCi1jbGFzcyBfT3B0aW9uYWxDb250ZXh0TWFuYWdlcihvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBtYW5hZ2VyLCBjb25kaXRpb24pOgotICAgIHNlbGYuX21hbmFnZXIgPSBtYW5hZ2VyCi0gICAgc2VsZi5fY29uZGl0aW9uID0gY29uZGl0aW9uCi0KLSAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICBpZiBzZWxmLl9jb25kaXRpb246Ci0gICAgICByZXR1cm4gc2VsZi5fbWFuYWdlci5fX2VudGVyX18oKQotICAgIHJldHVybiBOb25lCi0KLSAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgotICAgIGlmIHNlbGYuX2NvbmRpdGlvbjoKLSAgICAgIHJldHVybiBzZWxmLl9tYW5hZ2VyLl9fZXhpdF9fKGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpCi0gICAgcmV0dXJuIE5vbmUKLQotCi1kZWYgT3B0aW9uYWwobWFuYWdlciwgY29uZGl0aW9uKToKLSAgIiIiV3JhcHMgdGhlIHByb3ZpZGVkIGNvbnRleHQgbWFuYWdlciBhbmQgcnVucyBpdCBpZiBjb25kaXRpb24gaXMgVHJ1ZS4KLQotICBBcmdzOgotICAgIG1hbmFnZXI6IEEgY29udGV4dCBtYW5hZ2VyIHRvIGNvbmRpdGlvbmFsbHkgcnVuLgotICAgIGNvbmRpdGlvbjogSWYgdHJ1ZSwgcnVucyB0aGUgZ2l2ZW4gY29udGV4dCBtYW5hZ2VyLgotICBSZXR1cm5zOgotICAgIEEgY29udGV4dCBtYW5hZ2VyIHRoYXQgY29uZGl0aW9uYWxseSBleGVjdXRlcyB0aGUgZ2l2ZW4gbWFuYWdlci4KLSAgIiIiCi0gIHJldHVybiBfT3B0aW9uYWxDb250ZXh0TWFuYWdlcihtYW5hZ2VyLCBjb25kaXRpb24pCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9jb250ZXh0bGliX2V4dF91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9jb250ZXh0bGliX2V4dF91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgzZTdlNS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvY29udGV4dGxpYl9leHRfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHB5X3V0aWxzIGltcG9ydCBjb250ZXh0bGliX2V4dAotCi0KLWNsYXNzIE9wdGlvbmFsVW5pdHRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGNsYXNzIFNhbXBsZUNvbnRleHRNZ3Iob2JqZWN0KToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgIHNlbGYuZW50ZXJlZCA9IEZhbHNlCi0gICAgICBzZWxmLmV4aXRlZCA9IEZhbHNlCi0KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgc2VsZi5lbnRlcmVkID0gVHJ1ZQotCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgotICAgICAgc2VsZi5leGl0ZWQgPSBUcnVlCi0KLSAgZGVmIHRlc3RDb25kaXRpb25UcnVlKHNlbGYpOgotICAgIGMgPSBzZWxmLlNhbXBsZUNvbnRleHRNZ3IoKQotICAgIHdpdGggY29udGV4dGxpYl9leHQuT3B0aW9uYWwoYywgVHJ1ZSk6Ci0gICAgICBzZWxmLmFzc2VydFRydWUoYy5lbnRlcmVkKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmV4aXRlZCkKLQotICBkZWYgdGVzdENvbmRpdGlvbkZhbHNlKHNlbGYpOgotICAgIGMgPSBzZWxmLlNhbXBsZUNvbnRleHRNZ3IoKQotICAgIHdpdGggY29udGV4dGxpYl9leHQuT3B0aW9uYWwoYywgRmFsc2UpOgotICAgICAgc2VsZi5hc3NlcnRGYWxzZShjLmVudGVyZWQpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjLmV4aXRlZCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9kZXBlbmRlbmN5X3V0aWwucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvZGVwZW5kZW5jeV91dGlsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2NmZTg5Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9kZXBlbmRlbmN5X3V0aWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHBsYXRmb3JtCi1pbXBvcnQgc3lzCi0KLWltcG9ydCBweV91dGlscwotCi1kZWYgR2V0T1NBbmRBcmNoRm9yQ3VycmVudERlc2t0b3BQbGF0Zm9ybSgpOgotICBvc19uYW1lID0gR2V0T1NOYW1lRm9yQ3VycmVudERlc2t0b3BQbGF0Zm9ybSgpCi0gIHJldHVybiBvc19uYW1lLCBHZXRBcmNoRm9yQ3VycmVudERlc2t0b3BQbGF0Zm9ybShvc19uYW1lKQotCi0KLWRlZiBHZXRPU05hbWVGb3JDdXJyZW50RGVza3RvcFBsYXRmb3JtKCk6Ci0gIGlmIHB5X3V0aWxzLklzUnVubmluZ09uQ3Jvc0RldmljZSgpOgotICAgIHJldHVybiAnY2hyb21lb3MnCi0gIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdsaW51eCcpOgotICAgIHJldHVybiAnbGludXgnCi0gIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICByZXR1cm4gJ21hYycKLSAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgcmV0dXJuICd3aW4nCi0gIHJldHVybiBzeXMucGxhdGZvcm0KLQotCi1kZWYgR2V0QXJjaEZvckN1cnJlbnREZXNrdG9wUGxhdGZvcm0ob3NfbmFtZSk6Ci0gIGlmIG9zX25hbWUgPT0gJ2Nocm9tZW9zJzoKLSAgICAjIEN1cnJlbnQgdGVzdHMgb3V0c2lkZSBvZiB0ZWxlbWV0cnkgZG9uJ3QgcnVuIG9uIGNocm9tZW9zLCBhbmQKLSAgICAjIHBsYXRmb3JtLm1hY2hpbmUgaXMgbm90IHRoZSB3YXkgdGVsZW1ldHJ5IGdldHMgdGhlIGFyY2ggbmFtZSBvbiBjaHJvbWVvcy4KLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKLSAgcmV0dXJuIHBsYXRmb3JtLm1hY2hpbmUoKQotCi0KLWRlZiBHZXRDaHJvbWVBcGtPc1ZlcnNpb24odmVyc2lvbl9uYW1lKToKLSAgdmVyc2lvbiA9IHZlcnNpb25fbmFtZVswXQotICBhc3NlcnQgdmVyc2lvbi5pc3VwcGVyKCksICgKLSAgICAgICdGaXJzdCBjaGFyYWN0ZXIgb2YgdmVyc2lvbnMgbmFtZSAlcyB3YXMgbm90IGFuIHVwcGVyY2FzZSBsZXR0ZXIuJykKLSAgaWYgdmVyc2lvbiA8ICdMJzoKLSAgICByZXR1cm4gJ2snCi0gIGVsaWYgdmVyc2lvbiA+ICdNJzoKLSAgICByZXR1cm4gJ24nCi0gIHJldHVybiAnbCcKLQotCi1kZWYgQ2hyb21lQmluYXJpZXNDb25maWdQYXRoKCk6Ci0gIHJldHVybiBvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbigKLSAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgJ2Nocm9tZV9iaW5hcmllcy5qc29uJykpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvZGlzY292ZXIucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvZGlzY292ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ZDVjNWUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2Rpc2NvdmVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGZubWF0Y2gKLWltcG9ydCBpbXBvcnRsaWIKLWltcG9ydCBpbnNwZWN0Ci1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IHN5cwotCi1mcm9tIHB5X3V0aWxzIGltcG9ydCBjYW1lbF9jYXNlCi0KLQotZGVmIERpc2NvdmVyTW9kdWxlcyhzdGFydF9kaXIsIHRvcF9sZXZlbF9kaXIsIHBhdHRlcm49JyonKToKLSAgIiIiRGlzY292ZXIgYWxsIG1vZHVsZXMgaW4gfHN0YXJ0X2Rpcnwgd2hpY2ggbWF0Y2ggfHBhdHRlcm58LgotCi0gIEFyZ3M6Ci0gICAgc3RhcnRfZGlyOiBUaGUgZGlyZWN0b3J5IHRvIHJlY3Vyc2l2ZWx5IHNlYXJjaC4KLSAgICB0b3BfbGV2ZWxfZGlyOiBUaGUgdG9wIGxldmVsIG9mIHRoZSBwYWNrYWdlLCBmb3IgaW1wb3J0aW5nLgotICAgIHBhdHRlcm46IFVuaXggc2hlbGwtc3R5bGUgcGF0dGVybiBmb3IgZmlsdGVyaW5nIHRoZSBmaWxlbmFtZXMgdG8gaW1wb3J0LgotCi0gIFJldHVybnM6Ci0gICAgbGlzdCBvZiBtb2R1bGVzLgotICAiIiIKLSAgIyBzdGFydF9kaXIgYW5kIHRvcF9sZXZlbF9kaXIgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggZWFjaCBvdGhlci4KLSAgc3RhcnRfZGlyID0gb3MucGF0aC5yZWFscGF0aChzdGFydF9kaXIpCi0gIHRvcF9sZXZlbF9kaXIgPSBvcy5wYXRoLnJlYWxwYXRoKHRvcF9sZXZlbF9kaXIpCi0KLSAgbW9kdWxlcyA9IFtdCi0gIHN1Yl9wYXRocyA9IGxpc3Qob3Mud2FsayhzdGFydF9kaXIpKQotICAjIFdlIHNvcnQgdGhlIGRpcmVjdG9yaWVzICYgZmlsZSBwYXRocyB0byBlbnN1cmUgYSBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIHdoZW4KLSAgIyB0cmF2ZXJzaW5nIHx0b3BfbGV2ZWxfZGlyfC4KLSAgc3ViX3BhdGhzLnNvcnQoa2V5PWxhbWJkYSBwYXRoc190dXBsZTogcGF0aHNfdHVwbGVbMF0pCi0gIGZvciBkaXJfcGF0aCwgXywgZmlsZW5hbWVzIGluIHN1Yl9wYXRoczoKLSAgICAjIFNvcnQgdGhlIGRpcmVjdG9yaWVzIHRvIHdhbGsgcmVjdXJzaXZlbHkgYnkgdGhlIGRpcmVjdG9yeSBwYXRoLgotICAgIGZpbGVuYW1lcy5zb3J0KCkKLSAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgotICAgICAgIyBGaWx0ZXIgb3V0IHVud2FudGVkIGZpbGVuYW1lcy4KLSAgICAgIGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoJy4nKSBvciBmaWxlbmFtZS5zdGFydHN3aXRoKCdfJyk6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICBpZiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVsxXSAhPSAnLnB5JzoKLSAgICAgICAgY29udGludWUKLSAgICAgIGlmIG5vdCBmbm1hdGNoLmZubWF0Y2goZmlsZW5hbWUsIHBhdHRlcm4pOgotICAgICAgICBjb250aW51ZQotCi0gICAgICAjIEZpbmQgdGhlIG1vZHVsZS4KLSAgICAgIG1vZHVsZV9yZWxfcGF0aCA9IG9zLnBhdGgucmVscGF0aCgKLSAgICAgICAgICBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsIGZpbGVuYW1lKSwgdG9wX2xldmVsX2RpcikKLSAgICAgIG1vZHVsZV9uYW1lID0gcmUuc3ViKHInWy9cXF0nLCAnLicsIG9zLnBhdGguc3BsaXRleHQobW9kdWxlX3JlbF9wYXRoKVswXSkKLQotICAgICAgIyBJbXBvcnQgdGhlIG1vZHVsZS4KLSAgICAgIHRyeToKLSAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0b3BfbGV2ZWxfZGlyIGlzIHRoZSBmaXJzdCBwYXRoIGluIHRoZSBzeXMucGF0aCBpbiBjYXNlCi0gICAgICAgICMgdGhlcmUgYXJlIG5hbWluZyBjb25mbGljdCBpbiBtb2R1bGUgcGFydHMuCi0gICAgICAgIG9yaWdpbmFsX3N5c19wYXRoID0gc3lzLnBhdGhbOl0KLSAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHRvcF9sZXZlbF9kaXIpCi0gICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG1vZHVsZV9uYW1lKQotICAgICAgICBtb2R1bGVzLmFwcGVuZChtb2R1bGUpCi0gICAgICBmaW5hbGx5OgotICAgICAgICBzeXMucGF0aCA9IG9yaWdpbmFsX3N5c19wYXRoCi0gIHJldHVybiBtb2R1bGVzCi0KLQotZGVmIEFzc2VydE5vS2V5Q29uZmxpY3RzKGNsYXNzZXNfYnlfa2V5XzEsIGNsYXNzZXNfYnlfa2V5XzIpOgotICBmb3IgayBpbiBjbGFzc2VzX2J5X2tleV8xOgotICAgIGlmIGsgaW4gY2xhc3Nlc19ieV9rZXlfMjoKLSAgICAgIGFzc2VydCBjbGFzc2VzX2J5X2tleV8xW2tdIGlzIGNsYXNzZXNfYnlfa2V5XzJba10sICgKLSAgICAgICAgICAnRm91bmQgY29uZmxpY3RpbmcgY2xhc3NlcyBmb3IgdGhlIHNhbWUga2V5OiAnCi0gICAgICAgICAgJ2tleT0lcywgY2xhc3NfMT0lcywgY2xhc3NfMj0lcycgJSAoCi0gICAgICAgICAgICAgIGssIGNsYXNzZXNfYnlfa2V5XzFba10sIGNsYXNzZXNfYnlfa2V5XzJba10pKQotCi0KLSMgVE9ETyhkdHUpOiBOb3JtYWxpemUgYWxsIGRpc2NvdmVyYWJsZSBjbGFzc2VzIHRvIGhhdmUgY29ycmVzcG9uZGluZyBtb2R1bGUKLSMgYW5kIGNsYXNzIG5hbWVzLCB0aGVuIGFsd2F5cyBpbmRleCBieSBjbGFzcyBuYW1lLgotZGVmIERpc2NvdmVyQ2xhc3NlcyhzdGFydF9kaXIsCi0gICAgICAgICAgICAgICAgICAgIHRvcF9sZXZlbF9kaXIsCi0gICAgICAgICAgICAgICAgICAgIGJhc2VfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIHBhdHRlcm49JyonLAotICAgICAgICAgICAgICAgICAgICBpbmRleF9ieV9jbGFzc19uYW1lPVRydWUsCi0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5X2NvbnN0cnVjdGFibGU9RmFsc2UpOgotICAiIiJEaXNjb3ZlciBhbGwgY2xhc3NlcyBpbiB8c3RhcnRfZGlyfCB3aGljaCBzdWJjbGFzcyB8YmFzZV9jbGFzc3wuCi0KLSAgQmFzZSBjbGFzc2VzIHRoYXQgY29udGFpbiBzdWJjbGFzc2VzIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQuCi0KLSAgQXJnczoKLSAgICBzdGFydF9kaXI6IFRoZSBkaXJlY3RvcnkgdG8gcmVjdXJzaXZlbHkgc2VhcmNoLgotICAgIHRvcF9sZXZlbF9kaXI6IFRoZSB0b3AgbGV2ZWwgb2YgdGhlIHBhY2thZ2UsIGZvciBpbXBvcnRpbmcuCi0gICAgYmFzZV9jbGFzczogVGhlIGJhc2UgY2xhc3MgdG8gc2VhcmNoIGZvci4KLSAgICBwYXR0ZXJuOiBVbml4IHNoZWxsLXN0eWxlIHBhdHRlcm4gZm9yIGZpbHRlcmluZyB0aGUgZmlsZW5hbWVzIHRvIGltcG9ydC4KLSAgICBpbmRleF9ieV9jbGFzc19uYW1lOiBJZiBUcnVlLCB1c2UgY2xhc3MgbmFtZSBjb252ZXJ0ZWQgdG8KLSAgICAgICAgbG93ZXJjYXNlX3dpdGhfdW5kZXJzY29yZXMgaW5zdGVhZCBvZiBtb2R1bGUgbmFtZSBpbiByZXR1cm4gZGljdCBrZXlzLgotICAgIGRpcmVjdGx5X2NvbnN0cnVjdGFibGU6IElmIFRydWUsIHdpbGwgb25seSByZXR1cm4gY2xhc3NlcyB0aGF0IGNhbiBiZQotICAgICAgICBjb25zdHJ1Y3RlZCB3aXRob3V0IGFyZ3VtZW50cwotCi0gIFJldHVybnM6Ci0gICAgZGljdCBvZiB7bW9kdWxlX25hbWU6IGNsYXNzfSBvciB7dW5kZXJzY29yZWRfY2xhc3NfbmFtZTogY2xhc3N9Ci0gICIiIgotICBtb2R1bGVzID0gRGlzY292ZXJNb2R1bGVzKHN0YXJ0X2RpciwgdG9wX2xldmVsX2RpciwgcGF0dGVybikKLSAgY2xhc3NlcyA9IHt9Ci0gIGZvciBtb2R1bGUgaW4gbW9kdWxlczoKLSAgICBuZXdfY2xhc3NlcyA9IERpc2NvdmVyQ2xhc3Nlc0luTW9kdWxlKAotICAgICAgICBtb2R1bGUsIGJhc2VfY2xhc3MsIGluZGV4X2J5X2NsYXNzX25hbWUsIGRpcmVjdGx5X2NvbnN0cnVjdGFibGUpCi0gICAgIyBUT0RPKG5lZG5ndXllbik6IHdlIHNob3VsZCByZW1vdmUgaW5kZXhfYnlfY2xhc3NfbmFtZSBvbmNlCi0gICAgIyBiZW5jaG1hcmtfc21va2VfdW5pdHRlc3QgaW4gY2hyb21pdW0vc3JjL3Rvb2xzL3BlcmYgbm8gbG9uZ2VyIHJlbGllZAotICAgICMgbmFtaW5nIGNvbGxpc2lvbnMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc21va2VkIGJlbmNobWFyayB0ZXN0cy4KLSAgICAjIGNyYnVnLmNvbS81NDg2NTIKLSAgICBpZiBpbmRleF9ieV9jbGFzc19uYW1lOgotICAgICAgQXNzZXJ0Tm9LZXlDb25mbGljdHMoY2xhc3NlcywgbmV3X2NsYXNzZXMpCi0gICAgY2xhc3NlcyA9IGRpY3QoY2xhc3Nlcy5pdGVtcygpICsgbmV3X2NsYXNzZXMuaXRlbXMoKSkKLSAgcmV0dXJuIGNsYXNzZXMKLQotCi0jIFRPRE8obmVkbmd1eWVuKTogd2Ugc2hvdWxkIHJlbW92ZSBpbmRleF9ieV9jbGFzc19uYW1lIG9uY2UKLSMgYmVuY2htYXJrX3Ntb2tlX3VuaXR0ZXN0IGluIGNocm9taXVtL3NyYy90b29scy9wZXJmIG5vIGxvbmdlciByZWxpZWQKLSMgbmFtaW5nIGNvbGxpc2lvbnMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc21va2VkIGJlbmNobWFyayB0ZXN0cy4KLSMgY3JidWcuY29tLzU0ODY1MgotZGVmIERpc2NvdmVyQ2xhc3Nlc0luTW9kdWxlKG1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2NsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X2J5X2NsYXNzX25hbWU9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHlfY29uc3RydWN0YWJsZT1GYWxzZSk6Ci0gICIiIkRpc2NvdmVyIGFsbCBjbGFzc2VzIGluIHxtb2R1bGV8IHdoaWNoIHN1YmNsYXNzIHxiYXNlX2NsYXNzfC4KLQotICBCYXNlIGNsYXNzZXMgdGhhdCBjb250YWluIHN1YmNsYXNzZXMgYXJlIGlnbm9yZWQgYnkgZGVmYXVsdC4KLQotICBBcmdzOgotICAgIG1vZHVsZTogVGhlIG1vZHVsZSB0byBzZWFyY2guCi0gICAgYmFzZV9jbGFzczogVGhlIGJhc2UgY2xhc3MgdG8gc2VhcmNoIGZvci4KLSAgICBpbmRleF9ieV9jbGFzc19uYW1lOiBJZiBUcnVlLCB1c2UgY2xhc3MgbmFtZSBjb252ZXJ0ZWQgdG8KLSAgICAgICAgbG93ZXJjYXNlX3dpdGhfdW5kZXJzY29yZXMgaW5zdGVhZCBvZiBtb2R1bGUgbmFtZSBpbiByZXR1cm4gZGljdCBrZXlzLgotCi0gIFJldHVybnM6Ci0gICAgZGljdCBvZiB7bW9kdWxlX25hbWU6IGNsYXNzfSBvciB7dW5kZXJzY29yZWRfY2xhc3NfbmFtZTogY2xhc3N9Ci0gICIiIgotICBjbGFzc2VzID0ge30KLSAgZm9yIF8sIG9iaiBpbiBpbnNwZWN0LmdldG1lbWJlcnMobW9kdWxlKToKLSAgICAjIEVuc3VyZSBvYmplY3QgaXMgYSBjbGFzcy4KLSAgICBpZiBub3QgaW5zcGVjdC5pc2NsYXNzKG9iaik6Ci0gICAgICBjb250aW51ZQotICAgICMgSW5jbHVkZSBvbmx5IHN1YmNsYXNzZXMgb2YgYmFzZV9jbGFzcy4KLSAgICBpZiBub3QgaXNzdWJjbGFzcyhvYmosIGJhc2VfY2xhc3MpOgotICAgICAgY29udGludWUKLSAgICAjIEV4Y2x1ZGUgdGhlIGJhc2VfY2xhc3MgaXRzZWxmLgotICAgIGlmIG9iaiBpcyBiYXNlX2NsYXNzOgotICAgICAgY29udGludWUKLSAgICAjIEV4Y2x1ZGUgcHJvdGVjdGVkIG9yIHByaXZhdGUgY2xhc3Nlcy4KLSAgICBpZiBvYmouX19uYW1lX18uc3RhcnRzd2l0aCgnXycpOgotICAgICAgY29udGludWUKLSAgICAjIEluY2x1ZGUgb25seSB0aGUgbW9kdWxlIGluIHdoaWNoIHRoZSBjbGFzcyBpcyBkZWZpbmVkLgotICAgICMgSWYgYSBjbGFzcyBpcyBpbXBvcnRlZCBieSBhbm90aGVyIG1vZHVsZSwgZXhjbHVkZSB0aG9zZSBkdXBsaWNhdGVzLgotICAgIGlmIG9iai5fX21vZHVsZV9fICE9IG1vZHVsZS5fX25hbWVfXzoKLSAgICAgIGNvbnRpbnVlCi0KLSAgICBpZiBpbmRleF9ieV9jbGFzc19uYW1lOgotICAgICAga2V5X25hbWUgPSBjYW1lbF9jYXNlLlRvVW5kZXJzY29yZShvYmouX19uYW1lX18pCi0gICAgZWxzZToKLSAgICAgIGtleV9uYW1lID0gbW9kdWxlLl9fbmFtZV9fLnNwbGl0KCcuJylbLTFdCi0gICAgaWYgbm90IGRpcmVjdGx5X2NvbnN0cnVjdGFibGUgb3IgSXNEaXJlY3RseUNvbnN0cnVjdGFibGUob2JqKToKLSAgICAgIGlmIGtleV9uYW1lIGluIGNsYXNzZXMgYW5kIGluZGV4X2J5X2NsYXNzX25hbWU6Ci0gICAgICAgIGFzc2VydCBjbGFzc2VzW2tleV9uYW1lXSBpcyBvYmosICgKLSAgICAgICAgICAgICdEdXBsaWNhdGUga2V5X25hbWUgd2l0aCBkaWZmZXJlbnQgb2JqcyBkZXRlY3RlZDogJwotICAgICAgICAgICAgJ2tleT0lcywgb2JqMT0lcywgb2JqMj0lcycgJSAoa2V5X25hbWUsIGNsYXNzZXNba2V5X25hbWVdLCBvYmopKQotICAgICAgZWxzZToKLSAgICAgICAgY2xhc3Nlc1trZXlfbmFtZV0gPSBvYmoKLQotICByZXR1cm4gY2xhc3NlcwotCi0KLWRlZiBJc0RpcmVjdGx5Q29uc3RydWN0YWJsZShjbHMpOgotICAiIiJSZXR1cm5zIFRydWUgaWYgaW5zdGFuY2Ugb2YgfGNsc3wgY2FuIGJlIGNvbnN0cnVjdCB3aXRob3V0IGFyZ3VtZW50cy4iIiIKLSAgYXNzZXJ0IGluc3BlY3QuaXNjbGFzcyhjbHMpCi0gIGlmIG5vdCBoYXNhdHRyKGNscywgJ19faW5pdF9fJyk6Ci0gICAgIyBDYXNlIHxjbGFzcyBBOiBwYXNzfC4KLSAgICByZXR1cm4gVHJ1ZQotICBpZiBjbHMuX19pbml0X18gaXMgb2JqZWN0Ll9faW5pdF9fOgotICAgICMgQ2FzZSB8Y2xhc3MgQShvYmplY3QpOiBwYXNzfC4KLSAgICByZXR1cm4gVHJ1ZQotICAjIENhc2UgfGNsYXNzIChvYmplY3QpOnwgd2l0aCB8X19pbml0X198IG90aGVyIHRoYW4gfG9iamVjdC5fX2luaXRfX3wuCi0gIGFyZ3MsIF8sIF8sIGRlZmF1bHRzID0gaW5zcGVjdC5nZXRhcmdzcGVjKGNscy5fX2luaXRfXykKLSAgaWYgZGVmYXVsdHMgaXMgTm9uZToKLSAgICBkZWZhdWx0cyA9ICgpCi0gICMgUmV0dXJuIHRydWUgaWYgfHNlbGZ8IGlzIG9ubHkgYXJnIHdpdGhvdXQgYSBkZWZhdWx0LgotICByZXR1cm4gbGVuKGFyZ3MpID09IGxlbihkZWZhdWx0cykgKyAxCi0KLQotX0NPVU5URVIgPSBbMF0KLQotCi1kZWYgX0dldFVuaXF1ZU1vZHVsZU5hbWUoKToKLSAgX0NPVU5URVJbMF0gKz0gMQotICByZXR1cm4gIm1vZHVsZV8iICsgc3RyKF9DT1VOVEVSWzBdKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2Rpc2NvdmVyX3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2Rpc2NvdmVyX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzdkODVmLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9kaXNjb3Zlcl91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHB5X3V0aWxzIGltcG9ydCBkaXNjb3ZlcgotCi0KLWNsYXNzIERpc2NvdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHNlbGYuX2Jhc2VfZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICd0ZXN0X2RhdGEnKQotICAgIHNlbGYuX3N0YXJ0X2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9iYXNlX2RpciwgJ2Rpc2NvdmVyYWJsZV9jbGFzc2VzJykKLSAgICBzZWxmLl9iYXNlX2NsYXNzID0gRXhjZXB0aW9uCi0KLSAgZGVmIHRlc3REaXNjb3ZlckNsYXNzZXNXaXRoSW5kZXhCeU1vZHVsZU5hbWUoc2VsZik6Ci0gICAgY2xhc3NlcyA9IGRpc2NvdmVyLkRpc2NvdmVyQ2xhc3NlcyhzZWxmLl9zdGFydF9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9iYXNlX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Jhc2VfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleF9ieV9jbGFzc19uYW1lPUZhbHNlKQotCi0gICAgYWN0dWFsX2NsYXNzZXMgPSBkaWN0KChuYW1lLCBjbHMuX19uYW1lX18pCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lLCBjbHMgaW4gY2xhc3Nlcy5pdGVyaXRlbXMoKSkKLSAgICBleHBlY3RlZF9jbGFzc2VzID0gewotICAgICAgICAnYW5vdGhlcl9kaXNjb3Zlcl9kdW1teWNsYXNzJzogJ0R1bW15RXhjZXB0aW9uV2l0aFBhcmFtZXRlckltcGwxJywKLSAgICAgICAgJ2Rpc2NvdmVyX2R1bW15Y2xhc3MnOiAnRHVtbXlFeGNlcHRpb24nLAotICAgICAgICAncGFyYW1ldGVyX2Rpc2NvdmVyX2R1bW15Y2xhc3MnOiAnRHVtbXlFeGNlcHRpb25XaXRoUGFyYW1ldGVySW1wbDInCi0gICAgfQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX2NsYXNzZXMsIGV4cGVjdGVkX2NsYXNzZXMpCi0KLSAgZGVmIHRlc3REaXNjb3ZlckRpcmVjdGx5Q29uc3RydWN0YWJsZUNsYXNzZXNXaXRoSW5kZXhCeUNsYXNzTmFtZShzZWxmKToKLSAgICBjbGFzc2VzID0gZGlzY292ZXIuRGlzY292ZXJDbGFzc2VzKHNlbGYuX3N0YXJ0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Jhc2VfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmFzZV9jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5X2NvbnN0cnVjdGFibGU9VHJ1ZSkKLQotICAgIGFjdHVhbF9jbGFzc2VzID0gZGljdCgobmFtZSwgY2xzLl9fbmFtZV9fKQotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSwgY2xzIGluIGNsYXNzZXMuaXRlcml0ZW1zKCkpCi0gICAgZXhwZWN0ZWRfY2xhc3NlcyA9IHsKLSAgICAgICAgJ2R1bW15X2V4Y2VwdGlvbic6ICdEdW1teUV4Y2VwdGlvbicsCi0gICAgICAgICdkdW1teV9leGNlcHRpb25faW1wbDEnOiAnRHVtbXlFeGNlcHRpb25JbXBsMScsCi0gICAgICAgICdkdW1teV9leGNlcHRpb25faW1wbDInOiAnRHVtbXlFeGNlcHRpb25JbXBsMicsCi0gICAgfQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX2NsYXNzZXMsIGV4cGVjdGVkX2NsYXNzZXMpCi0KLSAgZGVmIHRlc3REaXNjb3ZlckNsYXNzZXNXaXRoSW5kZXhCeUNsYXNzTmFtZShzZWxmKToKLSAgICBjbGFzc2VzID0gZGlzY292ZXIuRGlzY292ZXJDbGFzc2VzKHNlbGYuX3N0YXJ0X2Rpciwgc2VsZi5fYmFzZV9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9iYXNlX2NsYXNzKQotCi0gICAgYWN0dWFsX2NsYXNzZXMgPSBkaWN0KChuYW1lLCBjbHMuX19uYW1lX18pCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lLCBjbHMgaW4gY2xhc3Nlcy5pdGVyaXRlbXMoKSkKLSAgICBleHBlY3RlZF9jbGFzc2VzID0gewotICAgICAgICAnZHVtbXlfZXhjZXB0aW9uJzogJ0R1bW15RXhjZXB0aW9uJywKLSAgICAgICAgJ2R1bW15X2V4Y2VwdGlvbl9pbXBsMSc6ICdEdW1teUV4Y2VwdGlvbkltcGwxJywKLSAgICAgICAgJ2R1bW15X2V4Y2VwdGlvbl9pbXBsMic6ICdEdW1teUV4Y2VwdGlvbkltcGwyJywKLSAgICAgICAgJ2R1bW15X2V4Y2VwdGlvbl93aXRoX3BhcmFtZXRlcl9pbXBsMSc6Ci0gICAgICAgICAgICAnRHVtbXlFeGNlcHRpb25XaXRoUGFyYW1ldGVySW1wbDEnLAotICAgICAgICAnZHVtbXlfZXhjZXB0aW9uX3dpdGhfcGFyYW1ldGVyX2ltcGwyJzoKLSAgICAgICAgICAgICdEdW1teUV4Y2VwdGlvbldpdGhQYXJhbWV0ZXJJbXBsMicKLSAgICB9Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfY2xhc3NlcywgZXhwZWN0ZWRfY2xhc3NlcykKLQotICBkZWYgdGVzdERpc2NvdmVyQ2xhc3Nlc1dpdGhQYXR0ZXJuQW5kSW5kZXhCeU1vZHVsZShzZWxmKToKLSAgICBjbGFzc2VzID0gZGlzY292ZXIuRGlzY292ZXJDbGFzc2VzKHNlbGYuX3N0YXJ0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Jhc2VfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmFzZV9jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49J2Fub3RoZXIqJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X2J5X2NsYXNzX25hbWU9RmFsc2UpCi0KLSAgICBhY3R1YWxfY2xhc3NlcyA9IGRpY3QoKG5hbWUsIGNscy5fX25hbWVfXykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG5hbWUsIGNscyBpbiBjbGFzc2VzLml0ZXJpdGVtcygpKQotICAgIGV4cGVjdGVkX2NsYXNzZXMgPSB7Ci0gICAgICAgICdhbm90aGVyX2Rpc2NvdmVyX2R1bW15Y2xhc3MnOiAnRHVtbXlFeGNlcHRpb25XaXRoUGFyYW1ldGVySW1wbDEnCi0gICAgfQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX2NsYXNzZXMsIGV4cGVjdGVkX2NsYXNzZXMpCi0KLSAgZGVmIHRlc3REaXNjb3ZlckRpcmVjdGx5Q29uc3RydWN0YWJsZUNsYXNzZXNXaXRoUGF0dGVybkFuZEluZGV4QnlDbGFzc05hbWUoCi0gICAgICBzZWxmKToKLSAgICBjbGFzc2VzID0gZGlzY292ZXIuRGlzY292ZXJDbGFzc2VzKHNlbGYuX3N0YXJ0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Jhc2VfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmFzZV9jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49J2Fub3RoZXIqJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5X2NvbnN0cnVjdGFibGU9VHJ1ZSkKLQotICAgIGFjdHVhbF9jbGFzc2VzID0gZGljdCgobmFtZSwgY2xzLl9fbmFtZV9fKQotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSwgY2xzIGluIGNsYXNzZXMuaXRlcml0ZW1zKCkpCi0gICAgZXhwZWN0ZWRfY2xhc3NlcyA9IHsKLSAgICAgICAgJ2R1bW15X2V4Y2VwdGlvbl9pbXBsMSc6ICdEdW1teUV4Y2VwdGlvbkltcGwxJywKLSAgICAgICAgJ2R1bW15X2V4Y2VwdGlvbl9pbXBsMic6ICdEdW1teUV4Y2VwdGlvbkltcGwyJywKLSAgICB9Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfY2xhc3NlcywgZXhwZWN0ZWRfY2xhc3NlcykKLQotICBkZWYgdGVzdERpc2NvdmVyQ2xhc3Nlc1dpdGhQYXR0ZXJuQW5kSW5kZXhCeUNsYXNzTmFtZShzZWxmKToKLSAgICBjbGFzc2VzID0gZGlzY292ZXIuRGlzY292ZXJDbGFzc2VzKHNlbGYuX3N0YXJ0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Jhc2VfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmFzZV9jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49J2Fub3RoZXIqJykKLQotICAgIGFjdHVhbF9jbGFzc2VzID0gZGljdCgobmFtZSwgY2xzLl9fbmFtZV9fKQotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSwgY2xzIGluIGNsYXNzZXMuaXRlcml0ZW1zKCkpCi0gICAgZXhwZWN0ZWRfY2xhc3NlcyA9IHsKLSAgICAgICAgJ2R1bW15X2V4Y2VwdGlvbl9pbXBsMSc6ICdEdW1teUV4Y2VwdGlvbkltcGwxJywKLSAgICAgICAgJ2R1bW15X2V4Y2VwdGlvbl9pbXBsMic6ICdEdW1teUV4Y2VwdGlvbkltcGwyJywKLSAgICAgICAgJ2R1bW15X2V4Y2VwdGlvbl93aXRoX3BhcmFtZXRlcl9pbXBsMSc6Ci0gICAgICAgICAgICAnRHVtbXlFeGNlcHRpb25XaXRoUGFyYW1ldGVySW1wbDEnLAotICAgIH0KLSAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9jbGFzc2VzLCBleHBlY3RlZF9jbGFzc2VzKQotCi0KLWNsYXNzIENsYXNzV2l0aG91dEluaXREZWZPbmU6ICAjIHB5bGludDogZGlzYWJsZT1vbGQtc3R5bGUtY2xhc3MsIG5vLWluaXQKLSAgcGFzcwotCi0KLWNsYXNzIENsYXNzV2l0aG91dEluaXREZWZUd28ob2JqZWN0KToKLSAgcGFzcwotCi0KLWNsYXNzIENsYXNzV2hvc2VJbml0T25seUhhc1NlbGYob2JqZWN0KToKLSAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgIHBhc3MKLQotCi1jbGFzcyBDbGFzc1dob3NlSW5pdFdpdGhEZWZhdWx0QXJndW1lbnRzKG9iamVjdCk6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBkb2c9MSwgY2F0PU5vbmUsIGNvdz1Ob25lLCBmdWQ9J2EnKToKLSAgICBwYXNzCi0KLQotY2xhc3MgQ2xhc3NXaG9zZUluaXRXaXRoRGVmYXVsdEFyZ3VtZW50c0FuZE5vbkRlZmF1bHRBcmd1bWVudHMob2JqZWN0KToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIHgsIGRvZz0xLCBjYXQ9Tm9uZSwgZmlzaD1Ob25lLCBmdWQ9J2EnKToKLSAgICBwYXNzCi0KLQotY2xhc3MgSXNEaXJlY3RseUNvbnN0cnVjdGFibGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdElzRGlyZWN0bHlDb25zdHJ1Y3RhYmxlUmV0dXJuc1RydWUoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRUcnVlKGRpc2NvdmVyLklzRGlyZWN0bHlDb25zdHJ1Y3RhYmxlKENsYXNzV2l0aG91dEluaXREZWZPbmUpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXNjb3Zlci5Jc0RpcmVjdGx5Q29uc3RydWN0YWJsZShDbGFzc1dpdGhvdXRJbml0RGVmVHdvKSkKLSAgICBzZWxmLmFzc2VydFRydWUoZGlzY292ZXIuSXNEaXJlY3RseUNvbnN0cnVjdGFibGUoQ2xhc3NXaG9zZUluaXRPbmx5SGFzU2VsZikpCi0gICAgc2VsZi5hc3NlcnRUcnVlKAotICAgICAgICBkaXNjb3Zlci5Jc0RpcmVjdGx5Q29uc3RydWN0YWJsZShDbGFzc1dob3NlSW5pdFdpdGhEZWZhdWx0QXJndW1lbnRzKSkKLQotICBkZWYgdGVzdElzRGlyZWN0bHlDb25zdHJ1Y3RhYmxlUmV0dXJuc0ZhbHNlKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0RmFsc2UoCi0gICAgICAgIGRpc2NvdmVyLklzRGlyZWN0bHlDb25zdHJ1Y3RhYmxlKAotICAgICAgICAgICAgQ2xhc3NXaG9zZUluaXRXaXRoRGVmYXVsdEFyZ3VtZW50c0FuZE5vbkRlZmF1bHRBcmd1bWVudHMpKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2V4cGVjdGF0aW9uc19wYXJzZXIucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvZXhwZWN0YXRpb25zX3BhcnNlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZhOTQwNy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvZXhwZWN0YXRpb25zX3BhcnNlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCByZQotCi0KLWNsYXNzIFBhcnNlRXJyb3IoRXhjZXB0aW9uKToKLSAgcGFzcwotCi0KLWNsYXNzIEV4cGVjdGF0aW9uKG9iamVjdCk6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCByZWFzb24sIHRlc3QsIGNvbmRpdGlvbnMsIHJlc3VsdHMpOgotICAgICIiIkNvbnN0cnVjdG9yIGZvciBleHBlY3RhdGlvbnMuCi0KLSAgICBBcmdzOgotICAgICAgcmVhc29uOiBTdHJpbmcgdGhhdCBpbmRpY2F0ZXMgdGhlIHJlYXNvbiBmb3IgZGlzYWJsaW5nLgotICAgICAgdGVzdDogU3RyaW5nIGluZGljYXRpbmcgd2hpY2ggdGVzdCBpcyBiZWluZyBkaXNhYmxlZC4KLSAgICAgIGNvbmRpdGlvbnM6IExpc3Qgb2YgdGFncyBpbmRpY2F0aW5nIHdoaWNoIGNvbmRpdGlvbnMgdG8gZGlzYWJsZSBmb3IuCi0gICAgICAgICAgQ29uZGl0aW9ucyBhcmUgY29tYmluZWQgdXNpbmcgbG9naWNhbCBhbmQuIEV4YW1wbGU6IFsnTWFjJywgJ0RlYnVnJ10KLSAgICAgIHJlc3VsdHM6IExpc3Qgb2Ygb3V0Y29tZXMgZm9yIHRlc3QuIEV4YW1wbGU6IFsnU2tpcCcsICdQYXNzJ10KLSAgICAiIiIKLSAgICBhc3NlcnQgaXNpbnN0YW5jZShyZWFzb24sIGJhc2VzdHJpbmcpIG9yIHJlYXNvbiBpcyBOb25lCi0gICAgc2VsZi5fcmVhc29uID0gcmVhc29uCi0gICAgYXNzZXJ0IGlzaW5zdGFuY2UodGVzdCwgYmFzZXN0cmluZykKLSAgICBzZWxmLl90ZXN0ID0gdGVzdAotICAgIGFzc2VydCBpc2luc3RhbmNlKGNvbmRpdGlvbnMsIGxpc3QpCi0gICAgc2VsZi5fY29uZGl0aW9ucyA9IGNvbmRpdGlvbnMKLSAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHRzLCBsaXN0KQotICAgIHNlbGYuX3Jlc3VsdHMgPSByZXN1bHRzCi0KLSAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgcmV0dXJuIChzZWxmLnJlYXNvbiA9PSBvdGhlci5yZWFzb24gYW5kCi0gICAgICAgICAgICBzZWxmLnRlc3QgPT0gb3RoZXIudGVzdCBhbmQKLSAgICAgICAgICAgIHNlbGYuY29uZGl0aW9ucyA9PSBvdGhlci5jb25kaXRpb25zIGFuZAotICAgICAgICAgICAgc2VsZi5yZXN1bHRzID09IG90aGVyLnJlc3VsdHMpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiByZWFzb24oc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX3JlYXNvbgotCi0gIEBwcm9wZXJ0eQotICBkZWYgdGVzdChzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fdGVzdAotCi0gIEBwcm9wZXJ0eQotICBkZWYgY29uZGl0aW9ucyhzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fY29uZGl0aW9ucwotCi0gIEBwcm9wZXJ0eQotICBkZWYgcmVzdWx0cyhzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fcmVzdWx0cwotCi0KLWNsYXNzIFRlc3RFeHBlY3RhdGlvblBhcnNlcihvYmplY3QpOgotICAiIiJQYXJzZSBleHBlY3RhdGlvbnMgZGF0YSBpbiBUQS9EQSBmb3JtYXQuCi0KLSAgVGhpcyBwYXJzZXIgY292ZXJzIHRoZSAndGFnZ2VkJyB0ZXN0IGxpc3RzIGZvcm1hdCBpbjoKLSAgICAgIGJpdC5seS9jaHJvbWl1bS10ZXN0LWxpc3QtZm9ybWF0Ci0KLSAgVGFrZXMgcmF3IGV4cGVjdGF0aW9ucyBkYXRhIGFzIGEgc3RyaW5nIHJlYWQgZnJvbSB0aGUgVEEvREEgZXhwZWN0YXRpb24gZmlsZQotICBpbiB0aGUgZm9ybWF0OgotCi0gICAgIyBUaGlzIGlzIGFuIGV4YW1wbGUgZXhwZWN0YXRpb24gZmlsZS4KLSAgICAjCi0gICAgIyB0YWdzOiBNYWMgTWFjMTAuMTAgTWFjMTAuMTEKLSAgICAjIHRhZ3M6IFdpbiBXaW44Ci0KLSAgICBjcmJ1Zy5jb20vMTIzIFsgV2luIF0gYmVuY2htYXJrL3N0b3J5IFsgU2tpcCBdCi0gICAgLi4uCi0gICIiIgotCi0gIFRBR19UT0tFTiA9ICcjIHRhZ3M6JwotICBfTUFUQ0hfU1RSSU5HID0gcideKD86KGNyYnVnLmNvbS9cZCspICk/JyAgIyBUaGUgYnVnIGZpZWxkIChvcHRpb25hbCkuCi0gIF9NQVRDSF9TVFJJTkcgKz0gcicoPzpcWyAoLispIFxdICk/JyAjIFRoZSBsYWJlbCBmaWVsZCAob3B0aW9uYWwpLgotICBfTUFUQ0hfU1RSSU5HICs9IHInKFxTKykgJyAjIFRoZSB0ZXN0IHBhdGggZmllbGQuCi0gIF9NQVRDSF9TVFJJTkcgKz0gcidcWyAoW15cWy5dKykgXF0nICAjIFRoZSBleHBlY3RhdGlvbiBmaWVsZC4KLSAgX01BVENIX1NUUklORyArPSByJyhccysjLiopPyQnICMgRW5kIGNvbW1lbnQgKG9wdGlvbmFsKS4KLSAgTUFUQ0hFUiA9IHJlLmNvbXBpbGUoX01BVENIX1NUUklORykKLQotICBkZWYgX19pbml0X18oc2VsZiwgcmF3X2RhdGEpOgotICAgIHNlbGYuX3RhZ3MgPSBbXQotICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IFtdCi0gICAgc2VsZi5fUGFyc2VSYXdFeHBlY3RhdGlvbkRhdGEocmF3X2RhdGEpCi0KLSAgZGVmIF9QYXJzZVJhd0V4cGVjdGF0aW9uRGF0YShzZWxmLCByYXdfZGF0YSk6Ci0gICAgZm9yIGNvdW50LCBsaW5lIGluIGxpc3QoZW51bWVyYXRlKHJhd19kYXRhLnNwbGl0bGluZXMoKSwgc3RhcnQ9MSkpOgotICAgICAgIyBIYW5kbGUgbWV0YWRhdGEgYW5kIGNvbW1lbnRzLgotICAgICAgaWYgbGluZS5zdGFydHN3aXRoKHNlbGYuVEFHX1RPS0VOKToKLSAgICAgICAgZm9yIHdvcmQgaW4gbGluZVtsZW4oc2VsZi5UQUdfVE9LRU4pOl0uc3BsaXQoKToKLSAgICAgICAgICAjIEV4cGVjdGF0aW9ucyBtdXN0IGJlIGFmdGVyIGFsbCB0YWdzIGFyZSBkZWNsYXJlZC4KLSAgICAgICAgICBpZiBzZWxmLl9leHBlY3RhdGlvbnM6Ci0gICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKCdUYWcgZm91bmQgYWZ0ZXIgZmlyc3QgZXhwZWN0YXRpb24uJykKLSAgICAgICAgICBzZWxmLl90YWdzLmFwcGVuZCh3b3JkKQotICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKSBvciBub3QgbGluZToKLSAgICAgICAgY29udGludWUgICMgSWdub3JlLCBpdCBpcyBqdXN0IGEgY29tbWVudCBvciBlbXB0eS4KLSAgICAgIGVsc2U6Ci0gICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucy5hcHBlbmQoCi0gICAgICAgICAgICBzZWxmLl9QYXJzZUV4cGVjdGF0aW9uTGluZShjb3VudCwgbGluZSwgc2VsZi5fdGFncykpCi0KLSAgZGVmIF9QYXJzZUV4cGVjdGF0aW9uTGluZShzZWxmLCBsaW5lX251bWJlciwgbGluZSwgdGFncyk6Ci0gICAgbWF0Y2ggPSBzZWxmLk1BVENIRVIubWF0Y2gobGluZSkKLSAgICBpZiBub3QgbWF0Y2g6Ci0gICAgICByYWlzZSBQYXJzZUVycm9yKAotICAgICAgICAgICdFeHBlY3RhdGlvbiBoYXMgaW52YWxpZCBzeW50YXggb24gbGluZSAlZDogJXMnCi0gICAgICAgICAgJSAobGluZV9udW1iZXIsIGxpbmUpKQotICAgICMgVW51c2VkIGdyb3VwIGlzIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnQuCi0gICAgcmVhc29uLCByYXdfY29uZGl0aW9ucywgdGVzdCwgcmVzdWx0cywgXyA9IG1hdGNoLmdyb3VwcygpCi0gICAgY29uZGl0aW9ucyA9IFtjIGZvciBjIGluIHJhd19jb25kaXRpb25zLnNwbGl0KCldIGlmIHJhd19jb25kaXRpb25zIGVsc2UgW10KLQotICAgIGZvciBjIGluIGNvbmRpdGlvbnM6Ci0gICAgICBpZiBjIG5vdCBpbiB0YWdzOgotICAgICAgICByYWlzZSBQYXJzZUVycm9yKAotICAgICAgICAgICAgJ0NvbmRpdGlvbiAlcyBub3QgZm91bmQgaW4gZXhwZWN0YXRpb25zIHRhZyBkYXRhLiBMaW5lICVkJwotICAgICAgICAgICAgJSAoYywgbGluZV9udW1iZXIpKQotICAgIHJldHVybiBFeHBlY3RhdGlvbihyZWFzb24sIHRlc3QsIGNvbmRpdGlvbnMsIFtyIGZvciByIGluIHJlc3VsdHMuc3BsaXQoKV0pCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBleHBlY3RhdGlvbnMoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucwotCi0gIEBwcm9wZXJ0eQotICBkZWYgdGFncyhzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fdGFncwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2V4cGVjdGF0aW9uc19wYXJzZXJfdW5pdHRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvZXhwZWN0YXRpb25zX3BhcnNlcl91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg0MmM0Yy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvZXhwZWN0YXRpb25zX3BhcnNlcl91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gcHlfdXRpbHMgaW1wb3J0IGV4cGVjdGF0aW9uc19wYXJzZXIKLQotCi1jbGFzcyBUZXN0RXhwZWN0YXRpb25QYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdEluaXRXaXRoR29vZERhdGEoc2VsZik6Ci0gICAgZ29vZF9kYXRhID0gIiIiCi0jIFRoaXMgaXMgYSB0ZXN0IGV4cGVjdGF0aW9uIGZpbGUuCi0jCi0jIHRhZ3M6IHRhZzEgdGFnMiB0YWczCi0jIHRhZ3M6IHRhZzQgTWFjIFdpbiBEZWJ1ZwotCi1jcmJ1Zy5jb20vMTIzNDUgWyBNYWMgXSBiMS9zMSBbIFNraXAgXQotY3JidWcuY29tLzIzNDU2IFsgTWFjIERlYnVnIF0gYjEvczIgWyBTa2lwIF0KLSIiIgotICAgIHBhcnNlciA9IGV4cGVjdGF0aW9uc19wYXJzZXIuVGVzdEV4cGVjdGF0aW9uUGFyc2VyKGdvb2RfZGF0YSkKLSAgICB0YWdzID0gWyd0YWcxJywgJ3RhZzInLCAndGFnMycsICd0YWc0JywgJ01hYycsICdXaW4nLCAnRGVidWcnXQotICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnRhZ3MsIHRhZ3MpCi0gICAgZXhwZWN0ZWRfb3V0Y29tZSA9IFsKLSAgICAgICAgZXhwZWN0YXRpb25zX3BhcnNlci5FeHBlY3RhdGlvbigKLSAgICAgICAgICAgICdjcmJ1Zy5jb20vMTIzNDUnLCAnYjEvczEnLCBbJ01hYyddLCBbJ1NraXAnXSksCi0gICAgICAgIGV4cGVjdGF0aW9uc19wYXJzZXIuRXhwZWN0YXRpb24oCi0gICAgICAgICAgICAnY3JidWcuY29tLzIzNDU2JywgJ2IxL3MyJywgWydNYWMnLCAnRGVidWcnXSwgWydTa2lwJ10pCi0gICAgXQotICAgIGZvciBpIGluIHJhbmdlKGxlbihwYXJzZXIuZXhwZWN0YXRpb25zKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5leHBlY3RhdGlvbnNbaV0sIGV4cGVjdGVkX291dGNvbWVbaV0pCi0KLSAgZGVmIHRlc3RJbml0V2l0aEJhZERhdGEoc2VsZik6Ci0gICAgYmFkX2RhdGEgPSAiIiIKLSMgVGhpcyBpcyBhIHRlc3QgZXhwZWN0YXRpb24gZmlsZS4KLSMKLSMgdGFnczogdGFnMSB0YWcyIHRhZzMKLSMgdGFnczogdGFnNAotCi1jcmJ1Zy5jb20vMTIzNDUgWyBNYWMgYjEvczEgWyBTa2lwIF0KLSIiIgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhwZWN0YXRpb25zX3BhcnNlci5QYXJzZUVycm9yKToKLSAgICAgIGV4cGVjdGF0aW9uc19wYXJzZXIuVGVzdEV4cGVjdGF0aW9uUGFyc2VyKGJhZF9kYXRhKQotCi0gIGRlZiB0ZXN0VGFnQWZ0ZXJFeHBlY3RhdGlvbnNTdGFydChzZWxmKToKLSAgICBiYWRfZGF0YSA9ICIiIgotIyBUaGlzIGlzIGEgdGVzdCBleHBlY3RhdGlvbiBmaWxlLgotIwotIyB0YWdzOiB0YWcxIHRhZzIgdGFnMwotCi1jcmJ1Zy5jb20vMTIzNDUgWyB0YWcxIF0gYjEvczEgWyBTa2lwIF0KLQotIyB0YWdzOiB0YWc0Ci0iIiIKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGVjdGF0aW9uc19wYXJzZXIuUGFyc2VFcnJvcik6Ci0gICAgICBleHBlY3RhdGlvbnNfcGFyc2VyLlRlc3RFeHBlY3RhdGlvblBhcnNlcihiYWRfZGF0YSkKLQotICBkZWYgdGVzdFBhcnNlRXhwZWN0YXRpb25MaW5lRXZlcnl0aGluZ1RoZXJlKHNlbGYpOgotICAgIHJhd19kYXRhID0gJyMgdGFnczogTWFjXG5jcmJ1Zy5jb20vMjM0NTYgWyBNYWMgXSBiMS9zMiBbIFNraXAgXScKLSAgICBwYXJzZXIgPSBleHBlY3RhdGlvbnNfcGFyc2VyLlRlc3RFeHBlY3RhdGlvblBhcnNlcihyYXdfZGF0YSkKLSAgICBleHBlY3RlZF9vdXRjb21lID0gWwotICAgICAgICBleHBlY3RhdGlvbnNfcGFyc2VyLkV4cGVjdGF0aW9uKAotICAgICAgICAgICAgJ2NyYnVnLmNvbS8yMzQ1NicsICdiMS9zMicsIFsnTWFjJ10sIFsnU2tpcCddKQotICAgIF0KLSAgICBmb3IgaSBpbiByYW5nZShsZW4ocGFyc2VyLmV4cGVjdGF0aW9ucykpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZXhwZWN0YXRpb25zW2ldLCBleHBlY3RlZF9vdXRjb21lW2ldKQotCi0gIGRlZiB0ZXN0UGFyc2VFeHBlY3RhdGlvbkxpbmVCYWRUYWcoc2VsZik6Ci0gICAgcmF3X2RhdGEgPSAnIyB0YWdzOiBOb25lXG5jcmJ1Zy5jb20vMjM0NTYgWyBNYWMgXSBiMS9zMiBbIFNraXAgXScKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGVjdGF0aW9uc19wYXJzZXIuUGFyc2VFcnJvcik6Ci0gICAgICBleHBlY3RhdGlvbnNfcGFyc2VyLlRlc3RFeHBlY3RhdGlvblBhcnNlcihyYXdfZGF0YSkKLQotICBkZWYgdGVzdFBhcnNlRXhwZWN0YXRpb25MaW5lTm9Db25kaXRpb25zKHNlbGYpOgotICAgIHJhd19kYXRhID0gJyMgdGFnczogQWxsXG5jcmJ1Zy5jb20vMTIzNDUgYjEvczEgWyBTa2lwIF0nCi0gICAgcGFyc2VyID0gZXhwZWN0YXRpb25zX3BhcnNlci5UZXN0RXhwZWN0YXRpb25QYXJzZXIocmF3X2RhdGEpCi0gICAgZXhwZWN0ZWRfb3V0Y29tZSA9IFsKLSAgICAgICAgZXhwZWN0YXRpb25zX3BhcnNlci5FeHBlY3RhdGlvbigKLSAgICAgICAgICAgICdjcmJ1Zy5jb20vMTIzNDUnLCAnYjEvczEnLCBbXSwgWydTa2lwJ10pLAotICAgIF0KLSAgICBmb3IgaSBpbiByYW5nZShsZW4ocGFyc2VyLmV4cGVjdGF0aW9ucykpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZXhwZWN0YXRpb25zW2ldLCBleHBlY3RlZF9vdXRjb21lW2ldKQotCi0gIGRlZiB0ZXN0UGFyc2VFeHBlY3RhdGlvbkxpbmVOb0J1ZyhzZWxmKToKLSAgICByYXdfZGF0YSA9ICcjIHRhZ3M6IEFsbFxuWyBBbGwgXSBiMS9zMSBbIFNraXAgXScKLSAgICBwYXJzZXIgPSBleHBlY3RhdGlvbnNfcGFyc2VyLlRlc3RFeHBlY3RhdGlvblBhcnNlcihyYXdfZGF0YSkKLSAgICBleHBlY3RlZF9vdXRjb21lID0gWwotICAgICAgICBleHBlY3RhdGlvbnNfcGFyc2VyLkV4cGVjdGF0aW9uKAotICAgICAgICAgICAgTm9uZSwgJ2IxL3MxJywgWydBbGwnXSwgWydTa2lwJ10pLAotICAgIF0KLSAgICBmb3IgaSBpbiByYW5nZShsZW4ocGFyc2VyLmV4cGVjdGF0aW9ucykpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZXhwZWN0YXRpb25zW2ldLCBleHBlY3RlZF9vdXRjb21lW2ldKQotCi0gIGRlZiB0ZXN0UGFyc2VFeHBlY3RhdGlvbkxpbmVOb0J1Z05vQ29uZGl0aW9ucyhzZWxmKToKLSAgICByYXdfZGF0YSA9ICcjIHRhZ3M6IEFsbFxuYjEvczEgWyBTa2lwIF0nCi0gICAgcGFyc2VyID0gZXhwZWN0YXRpb25zX3BhcnNlci5UZXN0RXhwZWN0YXRpb25QYXJzZXIocmF3X2RhdGEpCi0gICAgZXhwZWN0ZWRfb3V0Y29tZSA9IFsKLSAgICAgICAgZXhwZWN0YXRpb25zX3BhcnNlci5FeHBlY3RhdGlvbigKLSAgICAgICAgICAgIE5vbmUsICdiMS9zMScsIFtdLCBbJ1NraXAnXSksCi0gICAgXQotICAgIGZvciBpIGluIHJhbmdlKGxlbihwYXJzZXIuZXhwZWN0YXRpb25zKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5leHBlY3RhdGlvbnNbaV0sIGV4cGVjdGVkX291dGNvbWVbaV0pCi0KLSAgZGVmIHRlc3RQYXJzZUV4cGVjdGF0aW9uTGluZU11bHRpcGxlQ29uZGl0aW9ucyhzZWxmKToKLSAgICByYXdfZGF0YSA9ICgnIyB0YWdzOkFsbCBOb25lIEJhdG1hblxuJwotICAgICAgICAgICAgICAgICdjcmJ1Zy5jb20vMTIzIFsgQWxsIE5vbmUgQmF0bWFuIF0gYjEvczEgWyBTa2lwIF0nKQotICAgIHBhcnNlciA9IGV4cGVjdGF0aW9uc19wYXJzZXIuVGVzdEV4cGVjdGF0aW9uUGFyc2VyKHJhd19kYXRhKQotICAgIGV4cGVjdGVkX291dGNvbWUgPSBbCi0gICAgICAgIGV4cGVjdGF0aW9uc19wYXJzZXIuRXhwZWN0YXRpb24oCi0gICAgICAgICAgICAnY3JidWcuY29tLzEyMycsICdiMS9zMScsIFsnQWxsJywgJ05vbmUnLCAnQmF0bWFuJ10sIFsnU2tpcCddKSwKLSAgICBdCi0gICAgZm9yIGkgaW4gcmFuZ2UobGVuKHBhcnNlci5leHBlY3RhdGlvbnMpKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmV4cGVjdGF0aW9uc1tpXSwgZXhwZWN0ZWRfb3V0Y29tZVtpXSkKLQotICBkZWYgdGVzdFBhcnNlRXhwZWN0YXRpb25MaW5lQmFkQ29uZGl0aW9uQnJhY2tldChzZWxmKToKLSAgICByYXdfZGF0YSA9ICcjIHRhZ3M6IE1hY1xuY3JidWcuY29tLzIzNDU2IF0gTWFjIF0gYjEvczIgWyBTa2lwIF0nCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhleHBlY3RhdGlvbnNfcGFyc2VyLlBhcnNlRXJyb3IpOgotICAgICAgZXhwZWN0YXRpb25zX3BhcnNlci5UZXN0RXhwZWN0YXRpb25QYXJzZXIocmF3X2RhdGEpCi0KLSAgZGVmIHRlc3RQYXJzZUV4cGVjdGF0aW9uTGluZUJhZFJlc3VsdEJyYWNrZXQoc2VsZik6Ci0gICAgcmF3X2RhdGEgPSAnIyB0YWdzOiBNYWNcbmNyYnVnLmNvbS8yMzQ1NiBdIE1hYyBdIGIxL3MyIF0gU2tpcCBdJwotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhwZWN0YXRpb25zX3BhcnNlci5QYXJzZUVycm9yKToKLSAgICAgIGV4cGVjdGF0aW9uc19wYXJzZXIuVGVzdEV4cGVjdGF0aW9uUGFyc2VyKHJhd19kYXRhKQotCi0gIGRlZiB0ZXN0UGFyc2VFeHBlY3RhdGlvbkxpbmVCYWRDb25kaXRpb25CcmFja2V0U3BhY2luZyhzZWxmKToKLSAgICByYXdfZGF0YSA9ICcjIHRhZ3M6IE1hY1xuY3JidWcuY29tLzIzNDUgW01hY10gYjEvczEgWyBTa2lwIF0nCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhleHBlY3RhdGlvbnNfcGFyc2VyLlBhcnNlRXJyb3IpOgotICAgICAgZXhwZWN0YXRpb25zX3BhcnNlci5UZXN0RXhwZWN0YXRpb25QYXJzZXIocmF3X2RhdGEpCi0KLSAgZGVmIHRlc3RQYXJzZUV4cGVjdGF0aW9uTGluZUJhZFJlc3VsdEJyYWNrZXRTcGFjaW5nKHNlbGYpOgotICAgIHJhd19kYXRhID0gJyMgdGFnczogTWFjXG5jcmJ1Zy5jb20vMjM0NSBbIE1hYyBdIGIxL3MxIFtTa2lwXScKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGVjdGF0aW9uc19wYXJzZXIuUGFyc2VFcnJvcik6Ci0gICAgICBleHBlY3RhdGlvbnNfcGFyc2VyLlRlc3RFeHBlY3RhdGlvblBhcnNlcihyYXdfZGF0YSkKLQotICBkZWYgdGVzdFBhcnNlRXhwZWN0YXRpb25MaW5lTm9DbG9zaW5nQ29uZGl0aW9uQnJhY2tldChzZWxmKToKLSAgICByYXdfZGF0YSA9ICcjIHRhZ3M6IE1hY1xuY3JidWcuY29tLzIzNDUgWyBNYWMgYjEvczEgWyBTa2lwIF0nCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhleHBlY3RhdGlvbnNfcGFyc2VyLlBhcnNlRXJyb3IpOgotICAgICAgZXhwZWN0YXRpb25zX3BhcnNlci5UZXN0RXhwZWN0YXRpb25QYXJzZXIocmF3X2RhdGEpCi0KLSAgZGVmIHRlc3RQYXJzZUV4cGVjdGF0aW9uTGluZU5vQ2xvc2luZ1Jlc3VsdEJyYWNrZXQoc2VsZik6Ci0gICAgcmF3X2RhdGEgPSAnIyB0YWdzOiBNYWNcbmNyYnVnLmNvbS8yMzQ1IFsgTWFjIF0gYjEvczEgWyBTa2lwJwotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhwZWN0YXRpb25zX3BhcnNlci5QYXJzZUVycm9yKToKLSAgICAgIGV4cGVjdGF0aW9uc19wYXJzZXIuVGVzdEV4cGVjdGF0aW9uUGFyc2VyKHJhd19kYXRhKQotCi0gIGRlZiB0ZXN0UGFyc2VFeHBlY3RhdGlvbkxpbmVVcmxJblRlc3ROYW1lKHNlbGYpOgotICAgIHJhd19kYXRhID0gKAotICAgICAgICAnIyB0YWdzOiBNYWNcbmNyYnVnLmNvbS8xMjMgWyBNYWMgXSBiLjEvaHR0cDovL2dvb2dsZS5jb20gWyBTa2lwIF0nKQotICAgIGV4cGVjdGVkX291dGNvbWVzID0gWwotICAgICAgICBleHBlY3RhdGlvbnNfcGFyc2VyLkV4cGVjdGF0aW9uKAotICAgICAgICAgICAgJ2NyYnVnLmNvbS8xMjMnLCAnYi4xL2h0dHA6Ly9nb29nbGUuY29tJywgWydNYWMnXSwgWydTa2lwJ10pCi0gICAgXQotICAgIHBhcnNlciA9IGV4cGVjdGF0aW9uc19wYXJzZXIuVGVzdEV4cGVjdGF0aW9uUGFyc2VyKHJhd19kYXRhKQotICAgIGZvciBpIGluIHJhbmdlKGxlbihwYXJzZXIuZXhwZWN0YXRpb25zKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5leHBlY3RhdGlvbnNbaV0sIGV4cGVjdGVkX291dGNvbWVzW2ldKQotCi0gIGRlZiB0ZXN0UGFyc2VFeHBlY3RhdGlvbkxpbmVFbmRpbmdDb21tZW50KHNlbGYpOgotICAgIHJhd19kYXRhID0gJyMgdGFnczogTWFjXG5jcmJ1Zy5jb20vMjM0NTYgWyBNYWMgXSBiMS9zMiBbIFNraXAgXSAjIGFiYyAxMjMnCi0gICAgcGFyc2VyID0gZXhwZWN0YXRpb25zX3BhcnNlci5UZXN0RXhwZWN0YXRpb25QYXJzZXIocmF3X2RhdGEpCi0gICAgZXhwZWN0ZWRfb3V0Y29tZSA9IFsKLSAgICAgICAgZXhwZWN0YXRpb25zX3BhcnNlci5FeHBlY3RhdGlvbigKLSAgICAgICAgICAgICdjcmJ1Zy5jb20vMjM0NTYnLCAnYjEvczInLCBbJ01hYyddLCBbJ1NraXAnXSkKLSAgICBdCi0gICAgZm9yIGkgaW4gcmFuZ2UobGVuKHBhcnNlci5leHBlY3RhdGlvbnMpKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmV4cGVjdGF0aW9uc1tpXSwgZXhwZWN0ZWRfb3V0Y29tZVtpXSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9sb2NrLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2xvY2sucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhOWEwOTUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2xvY2sucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IG9zCi0KLUxPQ0tfRVggPSBOb25lICAjIEV4Y2x1c2l2ZSBsb2NrCi1MT0NLX1NIID0gTm9uZSAgIyBTaGFyZWQgbG9jawotTE9DS19OQiA9IE5vbmUgICMgTm9uLWJsb2NraW5nIChMb2NrRXhjZXB0aW9uIGlzIHJhaXNlZCBpZiByZXNvdXJjZSBpcyBsb2NrZWQpCi0KLQotY2xhc3MgTG9ja0V4Y2VwdGlvbihFeGNlcHRpb24pOgotICBwYXNzCi0KLQotaWYgb3MubmFtZSA9PSAnbnQnOgotICBpbXBvcnQgd2luMzJjb24gICAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCi0gIGltcG9ydCB3aW4zMmZpbGUgICAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3IKLSAgaW1wb3J0IHB5d2ludHlwZXMgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotICBMT0NLX0VYID0gd2luMzJjb24uTE9DS0ZJTEVfRVhDTFVTSVZFX0xPQ0sKLSAgTE9DS19TSCA9IDAgICMgdGhlIGRlZmF1bHQKLSAgTE9DS19OQiA9IHdpbjMyY29uLkxPQ0tGSUxFX0ZBSUxfSU1NRURJQVRFTFkKLSAgX09WRVJMQVBQRUQgPSBweXdpbnR5cGVzLk9WRVJMQVBQRUQoKQotZWxpZiBvcy5uYW1lID09ICdwb3NpeCc6Ci0gIGltcG9ydCBmY250bCAgICAgICAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3IKLSAgTE9DS19FWCA9IGZjbnRsLkxPQ0tfRVgKLSAgTE9DS19TSCA9IGZjbnRsLkxPQ0tfU0gKLSAgTE9DS19OQiA9IGZjbnRsLkxPQ0tfTkIKLQotCi1AY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotZGVmIEZpbGVMb2NrKHRhcmdldF9maWxlLCBmbGFncyk6Ci0gICIiIiBMb2NrIHRoZSB0YXJnZXQgZmlsZS4gU2ltaWxhciB0byBBY3F1aXJlRmlsZUxvY2sgYnV0IGFsbG93IHVzZXIgdG8gd3JpdGU6Ci0gICAgICAgIHdpdGggRmlsZUxvY2soZiwgTE9DS19FWCk6Ci0gICAgICAgICAgIC4uLmRvIHN0dWZmIG9uIGZpbGUgZiB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHJhY2UgY29uZGl0aW9uCi0gICAgQXJnczogc2VlIEFjcXVpcmVGaWxlTG9jaydzIGRvY3VtZW50YXRpb24uCi0gICIiIgotICBBY3F1aXJlRmlsZUxvY2sodGFyZ2V0X2ZpbGUsIGZsYWdzKQotICB0cnk6Ci0gICAgeWllbGQKLSAgZmluYWxseToKLSAgICBSZWxlYXNlRmlsZUxvY2sodGFyZ2V0X2ZpbGUpCi0KLQotZGVmIEFjcXVpcmVGaWxlTG9jayh0YXJnZXRfZmlsZSwgZmxhZ3MpOgotICAiIiIgTG9jayB0aGUgdGFyZ2V0IGZpbGUuIE5vdGUgdGhhdCBpZiB8dGFyZ2V0X2ZpbGV8IGlzIGNsb3NlZCwgdGhlIGxvY2sgaXMKLSAgICBhdXRvbWF0aWNhbGx5IHJlbGVhc2VkLgotICBBcmdzOgotICAgIHRhcmdldF9maWxlOiBmaWxlIGhhbmRsZSBvZiB0aGUgZmlsZSB0byBhY3F1aXJlIGxvY2suCi0gICAgZmxhZ3M6IGNhbiBiZSBhbnkgb2YgdGhlIHR5cGUgTE9DS19FWCwgTE9DS19TSCwgTE9DS19OQiwgb3IgYSBiaXR3aXNlCi0gICAgICBPUiBjb21iaW5hdGlvbiBvZiBmbGFncy4KLSAgIiIiCi0gIGFzc2VydCBmbGFncyBpbiAoCi0gICAgICBMT0NLX0VYLCBMT0NLX1NILCBMT0NLX05CLCBMT0NLX0VYIHwgTE9DS19OQiwgTE9DS19TSCB8IExPQ0tfTkIpCi0gIGlmIG9zLm5hbWUgPT0gJ250JzoKLSAgICBfTG9ja0ltcGxXaW4odGFyZ2V0X2ZpbGUsIGZsYWdzKQotICBlbGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKLSAgICBfTG9ja0ltcGxQb3NpeCh0YXJnZXRfZmlsZSwgZmxhZ3MpCi0gIGVsc2U6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignJXMgaXMgbm90IHN1cHBvcnRlZCcgJSBvcy5uYW1lKQotCi0KLWRlZiBSZWxlYXNlRmlsZUxvY2sodGFyZ2V0X2ZpbGUpOgotICAiIiIgVW5sb2NrIHRoZSB0YXJnZXQgZmlsZS4KLSAgQXJnczoKLSAgICB0YXJnZXRfZmlsZTogZmlsZSBoYW5kbGUgb2YgdGhlIGZpbGUgdG8gcmVsZWFzZSB0aGUgbG9jay4KLSAgIiIiCi0gIGlmIG9zLm5hbWUgPT0gJ250JzoKLSAgICBfVW5sb2NrSW1wbFdpbih0YXJnZXRfZmlsZSkKLSAgZWxpZiBvcy5uYW1lID09ICdwb3NpeCc6Ci0gICAgX1VubG9ja0ltcGxQb3NpeCh0YXJnZXRfZmlsZSkKLSAgZWxzZToKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCclcyBpcyBub3Qgc3VwcG9ydGVkJyAlIG9zLm5hbWUpCi0KLSMgVGhlc2UgaW1wbGVtZW50YXRpb25zIGFyZSBiYXNlZCBvbgotIyBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy82NTIwMy8KLQotZGVmIF9Mb2NrSW1wbFdpbih0YXJnZXRfZmlsZSwgZmxhZ3MpOgotICBoZmlsZSA9IHdpbjMyZmlsZS5fZ2V0X29zZmhhbmRsZSh0YXJnZXRfZmlsZS5maWxlbm8oKSkKLSAgdHJ5OgotICAgIHdpbjMyZmlsZS5Mb2NrRmlsZUV4KGhmaWxlLCBmbGFncywgMCwgLTB4MTAwMDAsIF9PVkVSTEFQUEVEKQotICBleGNlcHQgcHl3aW50eXBlcy5lcnJvciwgZXhjX3ZhbHVlOgotICAgIGlmIGV4Y192YWx1ZVswXSA9PSAzMzoKLSAgICAgIHJhaXNlIExvY2tFeGNlcHRpb24oJ0Vycm9yIHRyeWluZyBhY3F1aXJpbmcgbG9jayBvZiAlczogJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldF9maWxlLm5hbWUsIGV4Y192YWx1ZVsyXSkpCi0gICAgZWxzZToKLSAgICAgIHJhaXNlCi0KLQotZGVmIF9VbmxvY2tJbXBsV2luKHRhcmdldF9maWxlKToKLSAgaGZpbGUgPSB3aW4zMmZpbGUuX2dldF9vc2ZoYW5kbGUodGFyZ2V0X2ZpbGUuZmlsZW5vKCkpCi0gIHRyeToKLSAgICB3aW4zMmZpbGUuVW5sb2NrRmlsZUV4KGhmaWxlLCAwLCAtMHgxMDAwMCwgX09WRVJMQVBQRUQpCi0gIGV4Y2VwdCBweXdpbnR5cGVzLmVycm9yLCBleGNfdmFsdWU6Ci0gICAgaWYgZXhjX3ZhbHVlWzBdID09IDE1ODoKLSAgICAgICMgZXJyb3I6ICgxNTgsICdVbmxvY2tGaWxlRXgnLCAnVGhlIHNlZ21lbnQgaXMgYWxyZWFkeSB1bmxvY2tlZC4nKQotICAgICAgIyBUbyBtYXRjaCB0aGUgJ3Bvc2l4JyBpbXBsZW1lbnRhdGlvbiwgc2lsZW50bHkgaWdub3JlIHRoaXMgZXJyb3IKLSAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgIyBROiAgQXJlIHRoZXJlIGV4Y2VwdGlvbnMvY29kZXMgd2Ugc2hvdWxkIGJlIGRlYWxpbmcgd2l0aCBoZXJlPwotICAgICAgcmFpc2UKLQotCi1kZWYgX0xvY2tJbXBsUG9zaXgodGFyZ2V0X2ZpbGUsIGZsYWdzKToKLSAgdHJ5OgotICAgIGZjbnRsLmZsb2NrKHRhcmdldF9maWxlLmZpbGVubygpLCBmbGFncykKLSAgZXhjZXB0IElPRXJyb3IsIGV4Y192YWx1ZToKLSAgICBpZiBleGNfdmFsdWVbMF0gPT0gMTEgb3IgZXhjX3ZhbHVlWzBdID09IDM1OgotICAgICAgcmFpc2UgTG9ja0V4Y2VwdGlvbignRXJyb3IgdHJ5aW5nIGFjcXVpcmluZyBsb2NrIG9mICVzOiAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0X2ZpbGUubmFtZSwgZXhjX3ZhbHVlWzFdKSkKLSAgICBlbHNlOgotICAgICAgcmFpc2UKLQotCi1kZWYgX1VubG9ja0ltcGxQb3NpeCh0YXJnZXRfZmlsZSk6Ci0gIGZjbnRsLmZsb2NrKHRhcmdldF9maWxlLmZpbGVubygpLCBmY250bC5MT0NLX1VOKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2xvY2tfdW5pdHRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvbG9ja191bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI2MDYyMS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvbG9ja191bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWltcG9ydCBvcwotaW1wb3J0IHRpbWUKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IHRlbXBmaWxlCi0KLQotZnJvbSBweV91dGlscyBpbXBvcnQgbG9jawotCi0KLWRlZiBfQXBwZW5kVGV4dFRvRmlsZShmaWxlX25hbWUpOgotICB3aXRoIG9wZW4oZmlsZV9uYW1lLCAnYScpIGFzIGY6Ci0gICAgbG9jay5BY3F1aXJlRmlsZUxvY2soZiwgbG9jay5MT0NLX0VYKQotICAgICMgU2xlZXAgMTAwIG1zIHRvIGluY3JlYXNlIHRoZSBjaGFuY2Ugb2YgYW5vdGhlciBwcm9jZXNzIHRyeWluZyB0byBhY3F1aXJlCi0gICAgIyB0aGUgbG9jayBvZiBmaWxlIGFzIHRoZSBzYW1lIHRpbWUuCi0gICAgdGltZS5zbGVlcCgwLjEpCi0gICAgZi53cml0ZSgnU3RhcnQnKQotICAgIGZvciBfIGluIHJhbmdlKDEwMDAwKToKLSAgICAgIGYud3JpdGUoJyonKQotICAgIGYud3JpdGUoJ0VuZCcpCi0KLQotZGVmIF9SZWFkRmlsZVdpdGhTaGFyZWRMb2NrQmxvY2tpbmdUaGVuV3JpdGUocmVhZF9maWxlLCB3cml0ZV9maWxlKToKLSAgd2l0aCBvcGVuKHJlYWRfZmlsZSwgJ3InKSBhcyBmOgotICAgIGxvY2suQWNxdWlyZUZpbGVMb2NrKGYsIGxvY2suTE9DS19TSCkKLSAgICBjb250ZW50ID0gZi5yZWFkKCkKLSAgICB3aXRoIG9wZW4od3JpdGVfZmlsZSwgJ2EnKSBhcyBmMjoKLSAgICAgIGxvY2suQWNxdWlyZUZpbGVMb2NrKGYyLCBsb2NrLkxPQ0tfRVgpCi0gICAgICBmMi53cml0ZShjb250ZW50KQotCi0KLWRlZiBfUmVhZEZpbGVXaXRoRXhjbHVzaXZlTG9ja05vbkJsb2NraW5nKHRhcmdldF9maWxlLCBzdGF0dXNfZmlsZSk6Ci0gIHdpdGggb3Blbih0YXJnZXRfZmlsZSwgJ3InKSBhcyBmOgotICAgIHRyeToKLSAgICAgIGxvY2suQWNxdWlyZUZpbGVMb2NrKGYsIGxvY2suTE9DS19FWCB8IGxvY2suTE9DS19OQikKLSAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSwgJ3cnKSBhcyBmMjoKLSAgICAgICAgZjIud3JpdGUoJ0xvY2tFeGNlcHRpb24gd2FzIG5vdCByYWlzZWQnKQotICAgIGV4Y2VwdCBsb2NrLkxvY2tFeGNlcHRpb246Ci0gICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUsICd3JykgYXMgZjI6Ci0gICAgICAgIGYyLndyaXRlKCdMb2NrRXhjZXB0aW9uIHJhaXNlZCcpCi0KLQotY2xhc3MgRmlsZUxvY2tUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHRmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkKLSAgICB0Zi5jbG9zZSgpCi0gICAgc2VsZi50ZW1wX2ZpbGVfcGF0aCA9IHRmLm5hbWUKLQotICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgb3MucmVtb3ZlKHNlbGYudGVtcF9maWxlX3BhdGgpCi0KLSAgZGVmIHRlc3RFeGNsdXNpdmVMb2NrKHNlbGYpOgotICAgIHByb2Nlc3Nlc3MgPSBbXQotICAgIGZvciBfIGluIHJhbmdlKDEwKToKLSAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcygKLSAgICAgICAgICB0YXJnZXQ9X0FwcGVuZFRleHRUb0ZpbGUsIGFyZ3M9KHNlbGYudGVtcF9maWxlX3BhdGgsKSkKLSAgICAgIHAuc3RhcnQoKQotICAgICAgcHJvY2Vzc2Vzcy5hcHBlbmQocCkKLSAgICBmb3IgcCBpbiBwcm9jZXNzZXNzOgotICAgICAgcC5qb2luKCkKLQotICAgICMgSWYgdGhlIGZpbGUgbG9jayB3b3JrcyBhcyBleHBlY3RlZCwgdGhlcmUgc2hvdWxkIGJlIDEwIGF0b21pYyB3cml0ZXMgb2YKLSAgICAjICdTdGFydCoqKi4uLioqKkVuZCcgdG8gdGhlIGZpbGUgaW4gc29tZSBvcmRlciwgd2hpY2ggbGVhZCB0byB0aGUgZmluYWwKLSAgICAjIGZpbGUgY29udGVudCBhcyBiZWxvdy4KLSAgICBleHBlY3RlZF9maWxlX2NvbnRlbnQgPSAnJy5qb2luKChbJ1N0YXJ0J10gKyBbJyonXSoxMDAwMCArIFsnRW5kJ10pICogMTApCi0gICAgd2l0aCBvcGVuKHNlbGYudGVtcF9maWxlX3BhdGgsICdyJykgYXMgZjoKLSAgICAgICMgVXNlIGFzc2VydFRydWUgaW5zdGVhZCBvZiBhc3NlcnRFcXVhbHMgc2luY2UgdGhlIHN0cmluZ3MgYXJlIGJpZywgaGVuY2UKLSAgICAgICMgYXNzZXJ0RXF1YWxzJ3MgYXNzZXJ0aW9uIGZhaWx1cmUgd2lsbCBjb250YWluIGh1Z2Ugc3RyaW5ncy4KLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZF9maWxlX2NvbnRlbnQgPT0gZi5yZWFkKCkpCi0KLSAgZGVmIHRlc3RTaGFyZWRMb2NrKHNlbGYpOgotICAgIHRmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkKLSAgICB0Zi5jbG9zZSgpCi0gICAgdGVtcF93cml0ZV9maWxlID0gdGYubmFtZQotICAgIHRyeToKLSAgICAgIHdpdGggb3BlbihzZWxmLnRlbXBfZmlsZV9wYXRoLCAndycpIGFzIGY6Ci0gICAgICAgIGYud3JpdGUoJzAxMjM0NTY3ODknKQotICAgICAgd2l0aCBvcGVuKHNlbGYudGVtcF9maWxlX3BhdGgsICdyJykgYXMgZjoKLSAgICAgICAgIyBGaXJzdCwgYWNxdWlyZSBhIHNoYXJlZCBsb2NrIG9uIHRlbXBfZmlsZV9wYXRoCi0gICAgICAgIGxvY2suQWNxdWlyZUZpbGVMb2NrKGYsIGxvY2suTE9DS19TSCkKLQotICAgICAgICBwcm9jZXNzZXNzID0gW10KLSAgICAgICAgIyBDcmVhdGUgMTAgcHJvY2Vzc2VzIHRoYXQgYWxzbyB0cnkgdG8gYWNxdWlyZSBzaGFyZWQgbG9jayBmcm9tCi0gICAgICAgICMgdGVtcF9maWxlX3BhdGggdGhlbiBhcHBlbmQgdGVtcF9maWxlX3BhdGgncyBjb250ZW50IHRvIHRlbXBfd3JpdGVfZmlsZQotICAgICAgICBmb3IgXyBpbiByYW5nZSgxMCk6Ci0gICAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKAotICAgICAgICAgICAgICB0YXJnZXQ9X1JlYWRGaWxlV2l0aFNoYXJlZExvY2tCbG9ja2luZ1RoZW5Xcml0ZSwKLSAgICAgICAgICAgICAgYXJncz0oc2VsZi50ZW1wX2ZpbGVfcGF0aCwgdGVtcF93cml0ZV9maWxlKSkKLSAgICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgICBwcm9jZXNzZXNzLmFwcGVuZChwKQotICAgICAgICBmb3IgcCBpbiBwcm9jZXNzZXNzOgotICAgICAgICAgIHAuam9pbigpCi0KLSAgICAgICMgdGVtcF93cml0ZV9maWxlIHNob3VsZCBjb250YWlucyAxMCBjb3B5IG9mIHRlbXBfZmlsZV9wYXRoJ3MgY29udGVudC4KLSAgICAgIHdpdGggb3Blbih0ZW1wX3dyaXRlX2ZpbGUsICdyJykgYXMgZjoKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJzAxMjM0NTY3ODknKjEwLCBmLnJlYWQoKSkKLSAgICBmaW5hbGx5OgotICAgICAgb3MucmVtb3ZlKHRlbXBfd3JpdGVfZmlsZSkKLQotICBkZWYgdGVzdE5vbkJsb2NraW5nTG9ja0FjcXVpcmluZyhzZWxmKToKLSAgICB0ZiA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpCi0gICAgdGYuY2xvc2UoKQotICAgIHRlbXBfc3RhdHVzX2ZpbGUgPSB0Zi5uYW1lCi0gICAgdHJ5OgotICAgICAgd2l0aCBvcGVuKHNlbGYudGVtcF9maWxlX3BhdGgsICd3JykgYXMgZjoKLSAgICAgICAgbG9jay5BY3F1aXJlRmlsZUxvY2soZiwgbG9jay5MT0NLX0VYKQotICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MoCi0gICAgICAgICAgICB0YXJnZXQ9X1JlYWRGaWxlV2l0aEV4Y2x1c2l2ZUxvY2tOb25CbG9ja2luZywKLSAgICAgICAgICAgIGFyZ3M9KHNlbGYudGVtcF9maWxlX3BhdGgsIHRlbXBfc3RhdHVzX2ZpbGUpKQotICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgcC5qb2luKCkKLSAgICAgIHdpdGggb3Blbih0ZW1wX3N0YXR1c19maWxlLCAncicpIGFzIGY6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdMb2NrRXhjZXB0aW9uIHJhaXNlZCcsIGYucmVhZCgpKQotICAgIGZpbmFsbHk6Ci0gICAgICBvcy5yZW1vdmUodGVtcF9zdGF0dXNfZmlsZSkKLQotICBkZWYgdGVzdFVubG9ja0JlZm9yZUNsb3NpbmdGaWxlKHNlbGYpOgotICAgIHRmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkKLSAgICB0Zi5jbG9zZSgpCi0gICAgdGVtcF9zdGF0dXNfZmlsZSA9IHRmLm5hbWUKLSAgICB0cnk6Ci0gICAgICB3aXRoIG9wZW4oc2VsZi50ZW1wX2ZpbGVfcGF0aCwgJ3InKSBhcyBmOgotICAgICAgICBsb2NrLkFjcXVpcmVGaWxlTG9jayhmLCBsb2NrLkxPQ0tfU0gpCi0gICAgICAgIGxvY2suUmVsZWFzZUZpbGVMb2NrKGYpCi0gICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcygKLSAgICAgICAgICAgIHRhcmdldD1fUmVhZEZpbGVXaXRoRXhjbHVzaXZlTG9ja05vbkJsb2NraW5nLAotICAgICAgICAgICAgYXJncz0oc2VsZi50ZW1wX2ZpbGVfcGF0aCwgdGVtcF9zdGF0dXNfZmlsZSkpCi0gICAgICAgIHAuc3RhcnQoKQotICAgICAgICBwLmpvaW4oKQotICAgICAgd2l0aCBvcGVuKHRlbXBfc3RhdHVzX2ZpbGUsICdyJykgYXMgZjoKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ0xvY2tFeGNlcHRpb24gd2FzIG5vdCByYWlzZWQnLCBmLnJlYWQoKSkKLSAgICBmaW5hbGx5OgotICAgICAgb3MucmVtb3ZlKHRlbXBfc3RhdHVzX2ZpbGUpCi0KLSAgZGVmIHRlc3RDb250ZXh0dWFsTG9jayhzZWxmKToKLSAgICB0ZiA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpCi0gICAgdGYuY2xvc2UoKQotICAgIHRlbXBfc3RhdHVzX2ZpbGUgPSB0Zi5uYW1lCi0gICAgdHJ5OgotICAgICAgd2l0aCBvcGVuKHNlbGYudGVtcF9maWxlX3BhdGgsICdyJykgYXMgZjoKLSAgICAgICAgd2l0aCBsb2NrLkZpbGVMb2NrKGYsIGxvY2suTE9DS19FWCk6Ci0gICAgICAgICAgIyBXaXRoaW4gdGhpcyBibG9jaywgYWNjZXNzaW5nIHNlbGYudGVtcF9maWxlX3BhdGggZnJvbSBhbm90aGVyCi0gICAgICAgICAgIyBwcm9jZXNzIHNob3VsZCByYWlzZSBleGNlcHRpb24uCi0gICAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKAotICAgICAgICAgICAgICB0YXJnZXQ9X1JlYWRGaWxlV2l0aEV4Y2x1c2l2ZUxvY2tOb25CbG9ja2luZywKLSAgICAgICAgICAgICAgYXJncz0oc2VsZi50ZW1wX2ZpbGVfcGF0aCwgdGVtcF9zdGF0dXNfZmlsZSkpCi0gICAgICAgICAgcC5zdGFydCgpCi0gICAgICAgICAgcC5qb2luKCkKLSAgICAgICAgICB3aXRoIG9wZW4odGVtcF9zdGF0dXNfZmlsZSwgJ3InKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ0xvY2tFeGNlcHRpb24gcmFpc2VkJywgZi5yZWFkKCkpCi0KLSAgICAgICAgIyBBY2Nlc3Npbmcgc2VsZi50ZW1wX2ZpbGVfcGF0aCBoZXJlIHNob3VsZCBub3QgcmFpc2UgZXhjZXB0aW9uLgotICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MoCi0gICAgICAgICAgICB0YXJnZXQ9X1JlYWRGaWxlV2l0aEV4Y2x1c2l2ZUxvY2tOb25CbG9ja2luZywKLSAgICAgICAgICAgIGFyZ3M9KHNlbGYudGVtcF9maWxlX3BhdGgsIHRlbXBfc3RhdHVzX2ZpbGUpKQotICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgcC5qb2luKCkKLSAgICAgIHdpdGggb3Blbih0ZW1wX3N0YXR1c19maWxlLCAncicpIGFzIGY6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdMb2NrRXhjZXB0aW9uIHdhcyBub3QgcmFpc2VkJywgZi5yZWFkKCkpCi0gICAgZmluYWxseToKLSAgICAgIG9zLnJlbW92ZSh0ZW1wX3N0YXR1c19maWxlKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2xvZ2dpbmdfdXRpbC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9sb2dnaW5nX3V0aWwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNTc4NTEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2xvZ2dpbmdfdXRpbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLSIiIkxvZ2dpbmcgdXRpbCBmdW5jdGlvbnMuCi0KLUl0IHdvdWxkIGJlIG5hbWVkIGxvZ2dpbmcsIGJ1dCBvdGhlciBtb2R1bGVzIGluIHRoaXMgZGlyZWN0b3J5IHVzZSB0aGUgZGVmYXVsdAotbG9nZ2luZyBtb2R1bGUsIHNvIHRoYXQgd291bGQgYnJlYWsgdGhlbS4KLSIiIgotCi1pbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IGxvZ2dpbmcKLQotQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLWRlZiBDYXB0dXJlTG9ncyhmaWxlX3N0cmVhbSk6Ci0gIGlmIG5vdCBmaWxlX3N0cmVhbToKLSAgICAjIE5vIGZpbGUgc3RyZWFtIGdpdmVuLCBqdXN0IGRvbid0IGNhcHR1cmUgbG9ncy4KLSAgICB5aWVsZAotICAgIHJldHVybgotCi0gIGZoID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKGZpbGVfc3RyZWFtKQotCi0gIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKLSAgIyBUcnkgdG8gY29weSB0aGUgY3VycmVudCBsb2cgZm9ybWF0LCBpZiBvbmUgaXMgc2V0LgotICBpZiBsb2dnZXIuaGFuZGxlcnMgYW5kIGhhc2F0dHIobG9nZ2VyLmhhbmRsZXJzWzBdLCAnZm9ybWF0dGVyJyk6Ci0gICAgZmguZm9ybWF0dGVyID0gbG9nZ2VyLmhhbmRsZXJzWzBdLmZvcm1hdHRlcgotICBlbHNlOgotICAgIGZoLnNldEZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcigKLSAgICAgICAgJyglKGxldmVsbmFtZSlzKSAlKGFzY3RpbWUpcyAlKG1lc3NhZ2UpcycpKQotICBsb2dnZXIuYWRkSGFuZGxlcihmaCkKLQotICB0cnk6Ci0gICAgeWllbGQKLSAgZmluYWxseToKLSAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCi0gICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoZmgpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvbG9nZ2luZ191dGlsX3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL2xvZ2dpbmdfdXRpbF91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk1NzcwNS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvbG9nZ2luZ191dGlsX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBTdHJpbmdJTwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gcHlfdXRpbHMgaW1wb3J0IGxvZ2dpbmdfdXRpbAotCi0KLWNsYXNzIExvZ2dpbmdVdGlsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gIGRlZiB0ZXN0Q2FwdHVyZShzZWxmKToKLSAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICAgIHdpdGggbG9nZ2luZ191dGlsLkNhcHR1cmVMb2dzKHMpOgotICAgICAgbG9nZ2luZy5mYXRhbCgndGVzdCcpCi0KLSAgICAjIE9ubHkgYXNzZXJ0IGVuZHMgd2l0aCwgc2luY2UgdGhlIGxvZ2dpbmcgbWVzc2FnZSBieSBkZWZhdWx0IGhhcyB0aGUgZGF0ZQotICAgICMgaW4gaXQuCi0gICAgc2VsZi5hc3NlcnRUcnVlKHMuZ2V0dmFsdWUoKS5lbmRzd2l0aCgndGVzdFxuJykpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvbWVtb3J5X2RlYnVnLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL21lbW9yeV9kZWJ1Zy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODY0NzI1ZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvbWVtb3J5X2RlYnVnLnB5CisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBoZWFwcQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHBzdXRpbAotaW1wb3J0IHN5cwotCi0KLUJZVEVfVU5JVFMgPSBbJ0InLCAnS2lCJywgJ01pQicsICdHaUInXQotCi0KLWRlZiBGb3JtYXRCeXRlcyh2YWx1ZSk6Ci0gIGRlZiBHZXRWYWx1ZUFuZFVuaXQodmFsdWUpOgotICAgIGZvciB1bml0IGluIEJZVEVfVU5JVFNbOi0xXToKLSAgICAgIGlmIGFicyh2YWx1ZSkgPCAxMDI0LjA6Ci0gICAgICAgIHJldHVybiB2YWx1ZSwgdW5pdAotICAgICAgdmFsdWUgLz0gMTAyNC4wCi0gICAgcmV0dXJuIHZhbHVlLCBCWVRFX1VOSVRTWy0xXQotCi0gIGlmIHZhbHVlIGlzIG5vdCBOb25lOgotICAgIHJldHVybiAnJS4xZiAlcycgJSBHZXRWYWx1ZUFuZFVuaXQodmFsdWUpCi0gIGVsc2U6Ci0gICAgcmV0dXJuICdOL0EnCi0KLQotZGVmIF9HZXRQcm9jZXNzSW5mbyhwKToKLSAgcGluZm8gPSBwLmFzX2RpY3QoYXR0cnM9WydwaWQnLCAnbmFtZScsICdtZW1vcnlfaW5mbyddKQotICBwaW5mb1snbWVtX3JzcyddID0gZ2V0YXR0cihwaW5mb1snbWVtb3J5X2luZm8nXSwgJ3JzcycsIDApCi0gIHJldHVybiBwaW5mbwotCi0KLWRlZiBfTG9nUHJvY2Vzc0luZm8ocGluZm8sIGxldmVsKToKLSAgcGluZm9bJ21lbV9yc3NfZm10J10gPSBGb3JtYXRCeXRlcyhwaW5mb1snbWVtX3JzcyddKQotICBsb2dnaW5nLmxvZyhsZXZlbCwgJyUobWVtX3Jzc19mbXQpcyAocGlkPSUocGlkKXMpJywgcGluZm8pCi0KLQotZGVmIExvZ0hvc3RNZW1vcnlVc2FnZSh0b3Bfbj0xMCwgbGV2ZWw9bG9nZ2luZy5JTkZPKToKLSAgaWYgcHN1dGlsLnZlcnNpb25faW5mbyA8ICgyLCAwKToKLSAgICBsb2dnaW5nLndhcm5pbmcoJ3BzdXRpbCAlcyB0b28gb2xkLCB1cGdyYWRlIHRvIHZlcnNpb24gMi4wIG9yIGhpZ2hlcicKLSAgICAgICAgICAgICAgICAgICAgJyBmb3IgbWVtb3J5IHVzYWdlIGluZm9ybWF0aW9uLicsIHBzdXRpbC5fX3ZlcnNpb25fXykKLSAgICByZXR1cm4KLQotICAjIFRPRE8oY3JidWcuY29tLzc3Nzg2NSk6IFJlbW92ZSB0aGUgZm9sbG93aW5nIHB5bGludCBkaXNhYmxlLiBFdmVuIGlmIHdlCi0gICMgY2hlY2sgZm9yIGEgcmVjZW50IGVub3VnaCBwc3V0aWwgdmVyc2lvbiBhYm92ZSwgdGhlIGNhdGFwdWx0IHByZXN1Ym1pdAotICAjIGJ1aWxkZXIgKHN0aWxsIHJ1bm5pbmcgc29tZSBvbGQgcHN1dGlsKSBmYWlscyBweWxpbnQgY2hlY2tzIGR1ZSB0byBBUEkKLSAgIyBjaGFuZ2VzIGluIHBzdXRpbC4KLSAgIyBweWxpbnQ6IGRpc2FibGU9bm8tbWVtYmVyCi0gIG1lbSA9IHBzdXRpbC52aXJ0dWFsX21lbW9yeSgpCi0gIGxvZ2dpbmcubG9nKGxldmVsLCAnVXNlZCAlcyBvdXQgb2YgJXMgbWVtb3J5IGF2YWlsYWJsZS4nLAotICAgICAgICAgICAgICBGb3JtYXRCeXRlcyhtZW0udXNlZCksIEZvcm1hdEJ5dGVzKG1lbS50b3RhbCkpCi0gIGxvZ2dpbmcubG9nKGxldmVsLCAnTWVtb3J5IHVzYWdlIG9mIHRvcCAlaSBwcm9jZXNzZXMgZ3JvdXBzJywgdG9wX24pCi0gIHBpbmZvc19ieV9uYW1lcyA9IHt9Ci0gIGZvciBwIGluIHBzdXRpbC5wcm9jZXNzX2l0ZXIoKToKLSAgICBwaW5mbyA9IF9HZXRQcm9jZXNzSW5mbyhwKQotICAgIHBuYW1lID0gcGluZm9bJ25hbWUnXQotICAgIGlmIHBuYW1lIG5vdCBpbiBwaW5mb3NfYnlfbmFtZXM6Ci0gICAgICBwaW5mb3NfYnlfbmFtZXNbcG5hbWVdID0geyduYW1lJzogcG5hbWUsICd0b3RhbF9tZW1fcnNzJzogMCwgJ3BpZHMnOiBbXX0KLSAgICBwaW5mb3NfYnlfbmFtZXNbcG5hbWVdWyd0b3RhbF9tZW1fcnNzJ10gKz0gcGluZm9bJ21lbV9yc3MnXQotICAgIHBpbmZvc19ieV9uYW1lc1twbmFtZV1bJ3BpZHMnXS5hcHBlbmQoc3RyKHBpbmZvWydwaWQnXSkpCi0KLSAgc29ydGVkX3BpbmZvX2dyb3VwcyA9IGhlYXBxLm5sYXJnZXN0KAotICAgICAgdG9wX24sIHBpbmZvc19ieV9uYW1lcy52YWx1ZXMoKSwga2V5PWxhbWJkYSBpdGVtOiBpdGVtWyd0b3RhbF9tZW1fcnNzJ10pCi0gIGZvciBncm91cCBpbiBzb3J0ZWRfcGluZm9fZ3JvdXBzOgotICAgIGdyb3VwWyd0b3RhbF9tZW1fcnNzX2ZtdCddID0gRm9ybWF0Qnl0ZXMoZ3JvdXBbJ3RvdGFsX21lbV9yc3MnXSkKLSAgICBncm91cFsncGlkc19mbXQnXSA9ICcsICcuam9pbihncm91cFsncGlkcyddKQotICAgIGxvZ2dpbmcubG9nKAotICAgICAgICBsZXZlbCwgJy0gJShuYW1lKXMgLSAlKHRvdGFsX21lbV9yc3NfZm10KXMgLSBwaWRzOiAlKHBpZHMpcycsIGdyb3VwKQotICBsb2dnaW5nLmxvZyhsZXZlbCwgJ0N1cnJlbnQgcHJvY2VzczonKQotICBwaW5mbyA9IF9HZXRQcm9jZXNzSW5mbyhwc3V0aWwuUHJvY2Vzcyhvcy5nZXRwaWQoKSkpCi0gIF9Mb2dQcm9jZXNzSW5mbyhwaW5mbywgbGV2ZWwpCi0KLQotZGVmIG1haW4oKToKLSAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLklORk8pCi0gIExvZ0hvc3RNZW1vcnlVc2FnZSgpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3B5X3V0aWxzX3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3B5X3V0aWxzX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODhhNWQ1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9weV91dGlsc191bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWltcG9ydCBweV91dGlscwotCi0KLWNsYXNzIFBhdGhUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdElzRXhlY3V0YWJsZShzZWxmKToKLSAgICBzZWxmLmFzc2VydEZhbHNlKHB5X3V0aWxzLklzRXhlY3V0YWJsZSgnbm9uZXhpc3RlbnRfZmlsZScpKQotICAgICMgV2UgdXNlIGFjdHVhbCBmaWxlcyBvbiBkaXNrIGluc3RlYWQgb2YgcHlmYWtlZnMgYmVjYXVzZSB0aGUgZXhlY3V0YWJsZSBpcwotICAgICMgc2V0IGRpZmZlcmVudCBvbiB3aW4gdGhhdCBwb3NpeCBwbGF0Zm9ybXMgYW5kIHB5ZmFrZWZzIGRvZXNuJ3Qgc3VwcG9ydAotICAgICMgd2luIHBsYXRmb3JtIHdlbGwuCi0gICAgc2VsZi5hc3NlcnRGYWxzZShweV91dGlscy5Jc0V4ZWN1dGFibGUoX0dldEZpbGVJblRlc3REaXIoJ2Zvby50eHQnKSkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHB5X3V0aWxzLklzRXhlY3V0YWJsZShzeXMuZXhlY3V0YWJsZSkpCi0KLQotZGVmIF9HZXRGaWxlSW5UZXN0RGlyKGZpbGVfbmFtZSk6Ci0gIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ3Rlc3RfZGF0YScsIGZpbGVfbmFtZSkKLQotCi1jbGFzcyBXYWl0Rm9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RXYWl0Rm9yVHJ1ZShzZWxmKToKLSAgICBkZWYgUmV0dXJuVHJ1ZSgpOgotICAgICAgcmV0dXJuIFRydWUKLSAgICBzZWxmLmFzc2VydFRydWUocHlfdXRpbHMuV2FpdEZvcihSZXR1cm5UcnVlLCAuMSkpCi0KLSAgZGVmIHRlc3RXYWl0Rm9yRmFsc2Uoc2VsZik6Ci0gICAgZGVmIFJldHVybkZhbHNlKCk6Ci0gICAgICByZXR1cm4gRmFsc2UKLQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMocHlfdXRpbHMuVGltZW91dEV4Y2VwdGlvbik6Ci0gICAgICBweV91dGlscy5XYWl0Rm9yKFJldHVybkZhbHNlLCAuMSkKLQotICBkZWYgdGVzdFdhaXRGb3JFdmVudHVhbGx5VHJ1ZShzZWxmKToKLSAgICAjIFVzZSBsaXN0IHRvIHBhc3MgdG8gaW5uZXIgZnVuY3Rpb24gaW4gb3JkZXIgdG8gYWxsb3cgbW9kaWZ5aW5nIHRoZQotICAgICMgdmFyaWFibGUgZnJvbSB0aGUgb3V0ZXIgc2NvcGUuCi0gICAgYyA9IFswXQotICAgIGRlZiBSZXR1cm5Db3VudGVyQmFzZWRWYWx1ZSgpOgotICAgICAgY1swXSArPSAxCi0gICAgICByZXR1cm4gY1swXSA+IDIKLQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShweV91dGlscy5XYWl0Rm9yKFJldHVybkNvdW50ZXJCYXNlZFZhbHVlLCAuNSkpCi0KLSAgZGVmIHRlc3RXYWl0Rm9yVHJ1ZUxhbWJkYShzZWxmKToKLSAgICBzZWxmLmFzc2VydFRydWUocHlfdXRpbHMuV2FpdEZvcihsYW1iZGE6IFRydWUsIC4xKSkKLQotICBkZWYgdGVzdFdhaXRGb3JGYWxzZUxhbWJkYShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHB5X3V0aWxzLlRpbWVvdXRFeGNlcHRpb24pOgotICAgICAgcHlfdXRpbHMuV2FpdEZvcihsYW1iZGE6IEZhbHNlLCAuMSkKLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3JlZmFjdG9yL19faW5pdF9fLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3JlZmFjdG9yL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2ZiYjVmLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZWZhY3Rvci9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiU3R5bGUtcHJlc2VydmluZyBQeXRob24gY29kZSB0cmFuc2Zvcm1zLgotCi1UaGlzIG1vZHVsZSBwcm92aWRlcyBjb21wb25lbnRzIGZvciBtb2RpZnlpbmcgYW5kIHF1ZXJ5aW5nIFB5dGhvbiBjb2RlLiBUaGV5IGNhbgotYmUgdXNlZCB0byBidWlsZCBjdXN0b20gcmVmYWN0b3JpbmdzIGFuZCBsaW50ZXJzLgotIiIiCi0KLWltcG9ydCBmdW5jdG9vbHMKLWltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLQotIyBweWxpbnQ6IGRpc2FibGU9d2lsZGNhcmQtaW1wb3J0Ci1mcm9tIHB5X3V0aWxzLnJlZmFjdG9yLmFubm90YXRlZF9zeW1ib2wgaW1wb3J0ICoKLWZyb20gcHlfdXRpbHMucmVmYWN0b3IubW9kdWxlIGltcG9ydCBNb2R1bGUKLQotCi1kZWYgX1RyYW5zZm9ybUZpbGUodHJhbnNmb3JtLCBmaWxlX3BhdGgpOgotICBtb2R1bGUgPSBNb2R1bGUoZmlsZV9wYXRoKQotICByZXN1bHQgPSB0cmFuc2Zvcm0obW9kdWxlKQotICBtb2R1bGUuV3JpdGUoKQotICByZXR1cm4gcmVzdWx0Ci0KLQotZGVmIFRyYW5zZm9ybSh0cmFuc2Zvcm0sIGZpbGVfcGF0aHMpOgotICB0cmFuc2Zvcm0gPSBmdW5jdG9vbHMucGFydGlhbChfVHJhbnNmb3JtRmlsZSwgdHJhbnNmb3JtKQotICByZXR1cm4gbXVsdGlwcm9jZXNzaW5nLlBvb2woKS5tYXAodHJhbnNmb3JtLCBmaWxlX3BhdGhzKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3JlZmFjdG9yL2Fubm90YXRlZF9zeW1ib2wvX19pbml0X18ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmVmYWN0b3IvYW5ub3RhdGVkX3N5bWJvbC9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEwYmMxNS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmVmYWN0b3IvYW5ub3RhdGVkX3N5bWJvbC9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIyBweWxpbnQ6IGRpc2FibGU9d2lsZGNhcmQtaW1wb3J0Ci1mcm9tIHB5X3V0aWxzLnJlZmFjdG9yLmFubm90YXRlZF9zeW1ib2wuY2xhc3NfZGVmaW5pdGlvbiBpbXBvcnQgKgotZnJvbSBweV91dGlscy5yZWZhY3Rvci5hbm5vdGF0ZWRfc3ltYm9sLmZ1bmN0aW9uX2RlZmluaXRpb24gaW1wb3J0ICoKLWZyb20gcHlfdXRpbHMucmVmYWN0b3IuYW5ub3RhdGVkX3N5bWJvbC5pbXBvcnRfc3RhdGVtZW50IGltcG9ydCAqCi1mcm9tIHB5X3V0aWxzLnJlZmFjdG9yLmFubm90YXRlZF9zeW1ib2wucmVmZXJlbmNlIGltcG9ydCAqCi1mcm9tIHB5X3V0aWxzLnJlZmFjdG9yIGltcG9ydCBzbmlwcGV0Ci0KLQotX19hbGxfXyA9IFsKLSAgICAnQW5ub3RhdGUnLAotCi0gICAgJ0NsYXNzJywKLSAgICAnRnVuY3Rpb24nLAotICAgICdJbXBvcnQnLAotICAgICdSZWZlcmVuY2UnLAotXQotCi0KLSMgU3BlY2lmaWMgc3ltYm9sIHR5cGVzIHdpdGggZXh0cmEgbWV0aG9kcyBmb3IgbWFuaXB1bGF0aW5nIHRoZW0uCi0jIFB5dGhvbidzIGZ1bGwgZ3JhbW1hciBpcyBoZXJlOgotIyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9ncmFtbWFyLmh0bWwKLQotIyBBbm5vdGF0ZWQgU3ltYm9scyBoYXZlIGFuIEFubm90YXRlIGNsYXNzbWV0aG9kIHRoYXQgdGFrZXMgYSBzeW1ib2wgdHlwZSBhbmQKLSMgbGlzdCBvZiBjaGlsZHJlbiwgYW5kIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhhdCBhbm5vdGF0ZWQgU3ltYm9sLgotCi1BTk5PVEFURURfU1lNQk9MUyA9ICgKLSAgICBBc05hbWUsCi0gICAgQ2xhc3MsCi0gICAgRG90dGVkTmFtZSwKLSAgICBJbXBvcnRGcm9tLAotICAgIEltcG9ydE5hbWUsCi0gICAgRnVuY3Rpb24sCi0pCi0KLQotIyBVbmZvcnR1bmF0ZWx5LCBzb21lIGxvZ2ljYWwgZ3JvdXBpbmdzIGFyZSBub3QgcmVwcmVzZW50ZWQgYnkgYSBub2RlIGluIHRoZQotIyBwYXJzZSB0cmVlLiBUbyB3b3JrIGFyb3VuZCB0aGlzLCBzb21lIGFubm90YXRlZCBTeW1ib2xzIGhhdmUgYW4gQW5ub3RhdGUKLSMgY2xhc3NtZXRob2QgdGhhdCB0YWtlcyBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgU25pcHBldHMgaW5zdGVhZC4KLQotQU5OT1RBVEVEX0dST1VQSU5HUyA9ICgKLSAgICBSZWZlcmVuY2UsCi0pCi0KLQotZGVmIEFubm90YXRlKGYpOgotICAiIiJSZXR1cm4gdGhlIHN5bnRheCB0cmVlIG9mIHRoZSBnaXZlbiBmaWxlLiIiIgotICByZXR1cm4gX0Fubm90YXRlTm9kZShzbmlwcGV0LlNuaXBwZXRpemUoZikpCi0KLQotZGVmIF9Bbm5vdGF0ZU5vZGUobm9kZSk6Ci0gIGlmIG5vdCBpc2luc3RhbmNlKG5vZGUsIHNuaXBwZXQuU3ltYm9sKToKLSAgICByZXR1cm4gbm9kZQotCi0gIGNoaWxkcmVuID0gbWFwKF9Bbm5vdGF0ZU5vZGUsIG5vZGUuY2hpbGRyZW4pCi0KLSAgZm9yIHN5bWJvbF90eXBlIGluIEFOTk9UQVRFRF9HUk9VUElOR1M6Ci0gICAgYW5ub3RhdGVkX2dyb3VwaW5nID0gc3ltYm9sX3R5cGUuQW5ub3RhdGUoY2hpbGRyZW4pCi0gICAgaWYgYW5ub3RhdGVkX2dyb3VwaW5nOgotICAgICAgY2hpbGRyZW4gPSBhbm5vdGF0ZWRfZ3JvdXBpbmcKLSAgICAgIGJyZWFrCi0KLSAgZm9yIHN5bWJvbF90eXBlIGluIEFOTk9UQVRFRF9TWU1CT0xTOgotICAgIGFubm90YXRlZF9zeW1ib2wgPSBzeW1ib2xfdHlwZS5Bbm5vdGF0ZShub2RlLnR5cGUsIGNoaWxkcmVuKQotICAgIGlmIGFubm90YXRlZF9zeW1ib2w6Ci0gICAgICByZXR1cm4gYW5ub3RhdGVkX3N5bWJvbAotCi0gIHJldHVybiBzbmlwcGV0LlN5bWJvbChub2RlLnR5cGUsIGNoaWxkcmVuKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3JlZmFjdG9yL2Fubm90YXRlZF9zeW1ib2wvYmFzZV9zeW1ib2wucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmVmYWN0b3IvYW5ub3RhdGVkX3N5bWJvbC9iYXNlX3N5bWJvbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUyOGU4OS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmVmYWN0b3IvYW5ub3RhdGVkX3N5bWJvbC9iYXNlX3N5bWJvbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotZnJvbSBweV91dGlscy5yZWZhY3RvciBpbXBvcnQgc25pcHBldAotCi0KLWNsYXNzIEFubm90YXRlZFN5bWJvbChzbmlwcGV0LlN5bWJvbCk6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBzeW1ib2xfdHlwZSwgY2hpbGRyZW4pOgotICAgIHN1cGVyKEFubm90YXRlZFN5bWJvbCwgc2VsZikuX19pbml0X18oc3ltYm9sX3R5cGUsIGNoaWxkcmVuKQotICAgIHNlbGYuX21vZGlmaWVkID0gRmFsc2UKLQotICBAcHJvcGVydHkKLSAgZGVmIG1vZGlmaWVkKHNlbGYpOgotICAgIGlmIHNlbGYuX21vZGlmaWVkOgotICAgICAgcmV0dXJuIFRydWUKLSAgICByZXR1cm4gc3VwZXIoQW5ub3RhdGVkU3ltYm9sLCBzZWxmKS5tb2RpZmllZAotCi0gIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSk6Ci0gICAgaWYgKGhhc2F0dHIoc2VsZi5fX2NsYXNzX18sIG5hbWUpIGFuZAotICAgICAgICBpc2luc3RhbmNlKGdldGF0dHIoc2VsZi5fX2NsYXNzX18sIG5hbWUpLCBwcm9wZXJ0eSkpOgotICAgICAgc2VsZi5fbW9kaWZpZWQgPSBUcnVlCi0gICAgcmV0dXJuIHN1cGVyKEFubm90YXRlZFN5bWJvbCwgc2VsZikuX19zZXRhdHRyX18obmFtZSwgdmFsdWUpCi0KLSAgZGVmIEN1dChzZWxmLCBjaGlsZCk6Ci0gICAgZm9yIGkgaW4geHJhbmdlKGxlbihzZWxmLl9jaGlsZHJlbikpOgotICAgICAgaWYgc2VsZi5fY2hpbGRyZW5baV0gPT0gY2hpbGQ6Ci0gICAgICAgIHNlbGYuX21vZGlmaWVkID0gVHJ1ZQotICAgICAgICBkZWwgc2VsZi5fY2hpbGRyZW5baV0KLSAgICAgICAgYnJlYWsKLSAgICBlbHNlOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcignJXMgaXMgbm90IGluICVzLicgJSAoY2hpbGQsIHNlbGYpKQotCi0gIGRlZiBQYXN0ZShzZWxmLCBjaGlsZCk6Ci0gICAgc2VsZi5fbW9kaWZpZWQgPSBUcnVlCi0gICAgc2VsZi5fY2hpbGRyZW4uYXBwZW5kKGNoaWxkKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3JlZmFjdG9yL2Fubm90YXRlZF9zeW1ib2wvY2xhc3NfZGVmaW5pdGlvbi5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZWZhY3Rvci9hbm5vdGF0ZWRfc3ltYm9sL2NsYXNzX2RlZmluaXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNDk1OGYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3JlZmFjdG9yL2Fubm90YXRlZF9zeW1ib2wvY2xhc3NfZGVmaW5pdGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IHN5bWJvbAotCi1mcm9tIHB5X3V0aWxzLnJlZmFjdG9yLmFubm90YXRlZF9zeW1ib2wgaW1wb3J0IGJhc2Vfc3ltYm9sCi0KLQotX19hbGxfXyA9IFsKLSAgICAnQ2xhc3MnLAotXQotCi0KLWNsYXNzIENsYXNzKGJhc2Vfc3ltYm9sLkFubm90YXRlZFN5bWJvbCk6Ci0gICMgcHlsaW50OiBkaXNhYmxlPWFic3RyYWN0LWNsYXNzLW5vdC11c2VkCi0KLSAgQGNsYXNzbWV0aG9kCi0gIGRlZiBBbm5vdGF0ZShjbHMsIHN5bWJvbF90eXBlLCBjaGlsZHJlbik6Ci0gICAgaWYgc3ltYm9sX3R5cGUgIT0gc3ltYm9sLnN0bXQ6Ci0gICAgICByZXR1cm4gTm9uZQotCi0gICAgY29tcG91bmRfc3RhdGVtZW50ID0gY2hpbGRyZW5bMF0KLSAgICBpZiBjb21wb3VuZF9zdGF0ZW1lbnQudHlwZSAhPSBzeW1ib2wuY29tcG91bmRfc3RtdDoKLSAgICAgIHJldHVybiBOb25lCi0KLSAgICBzdGF0ZW1lbnQgPSBjb21wb3VuZF9zdGF0ZW1lbnQuY2hpbGRyZW5bMF0KLSAgICBpZiBzdGF0ZW1lbnQudHlwZSA9PSBzeW1ib2wuY2xhc3NkZWY6Ci0gICAgICByZXR1cm4gY2xzKHN0YXRlbWVudC50eXBlLCBzdGF0ZW1lbnQuY2hpbGRyZW4pCi0gICAgZWxpZiAoc3RhdGVtZW50LnR5cGUgPT0gc3ltYm9sLmRlY29yYXRlZCBhbmQKLSAgICAgICAgICBzdGF0ZW1lbnQuY2hpbGRyZW5bLTFdLnR5cGUgPT0gc3ltYm9sLmNsYXNzZGVmKToKLSAgICAgIHJldHVybiBjbHMoc3RhdGVtZW50LnR5cGUsIHN0YXRlbWVudC5jaGlsZHJlbikKLSAgICBlbHNlOgotICAgICAgcmV0dXJuIE5vbmUKLQotICBAcHJvcGVydHkKLSAgZGVmIHN1aXRlKHNlbGYpOgotICAgICMgVE9ETzogQ29tcGxldGUuCi0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLSAgZGVmIEZpbmRDaGlsZChzZWxmLCBzbmlwcGV0X3R5cGUsICoqa3dhcmdzKToKLSAgICByZXR1cm4gc2VsZi5zdWl0ZS5GaW5kQ2hpbGQoc25pcHBldF90eXBlLCAqKmt3YXJncykKLQotICBkZWYgRmluZENoaWxkcmVuKHNlbGYsIHNuaXBwZXRfdHlwZSk6Ci0gICAgcmV0dXJuIHNlbGYuc3VpdGUuRmluZENoaWxkcmVuKHNuaXBwZXRfdHlwZSkKLQotICBkZWYgQ3V0KHNlbGYsIGNoaWxkKToKLSAgICBzZWxmLnN1aXRlLkN1dChjaGlsZCkKLQotICBkZWYgUGFzdGUoc2VsZiwgY2hpbGQpOgotICAgIHNlbGYuc3VpdGUuUGFzdGUoY2hpbGQpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmVmYWN0b3IvYW5ub3RhdGVkX3N5bWJvbC9mdW5jdGlvbl9kZWZpbml0aW9uLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3JlZmFjdG9yL2Fubm90YXRlZF9zeW1ib2wvZnVuY3Rpb25fZGVmaW5pdGlvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBhMTY3Mi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmVmYWN0b3IvYW5ub3RhdGVkX3N5bWJvbC9mdW5jdGlvbl9kZWZpbml0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgc3ltYm9sCi0KLWZyb20gcHlfdXRpbHMucmVmYWN0b3IuYW5ub3RhdGVkX3N5bWJvbCBpbXBvcnQgYmFzZV9zeW1ib2wKLQotCi1fX2FsbF9fID0gWwotICAgICdGdW5jdGlvbicsCi1dCi0KLQotY2xhc3MgRnVuY3Rpb24oYmFzZV9zeW1ib2wuQW5ub3RhdGVkU3ltYm9sKToKLSAgIyBweWxpbnQ6IGRpc2FibGU9YWJzdHJhY3QtY2xhc3Mtbm90LXVzZWQKLQotICBAY2xhc3NtZXRob2QKLSAgZGVmIEFubm90YXRlKGNscywgc3ltYm9sX3R5cGUsIGNoaWxkcmVuKToKLSAgICBpZiBzeW1ib2xfdHlwZSAhPSBzeW1ib2wuc3RtdDoKLSAgICAgIHJldHVybiBOb25lCi0KLSAgICBjb21wb3VuZF9zdGF0ZW1lbnQgPSBjaGlsZHJlblswXQotICAgIGlmIGNvbXBvdW5kX3N0YXRlbWVudC50eXBlICE9IHN5bWJvbC5jb21wb3VuZF9zdG10OgotICAgICAgcmV0dXJuIE5vbmUKLQotICAgIHN0YXRlbWVudCA9IGNvbXBvdW5kX3N0YXRlbWVudC5jaGlsZHJlblswXQotICAgIGlmIHN0YXRlbWVudC50eXBlID09IHN5bWJvbC5mdW5jZGVmOgotICAgICAgcmV0dXJuIGNscyhzdGF0ZW1lbnQudHlwZSwgc3RhdGVtZW50LmNoaWxkcmVuKQotICAgIGVsaWYgKHN0YXRlbWVudC50eXBlID09IHN5bWJvbC5kZWNvcmF0ZWQgYW5kCi0gICAgICAgICAgc3RhdGVtZW50LmNoaWxkcmVuWy0xXS50eXBlID09IHN5bWJvbC5mdW5jZGVmKToKLSAgICAgIHJldHVybiBjbHMoc3RhdGVtZW50LnR5cGUsIHN0YXRlbWVudC5jaGlsZHJlbikKLSAgICBlbHNlOgotICAgICAgcmV0dXJuIE5vbmUKLQotICBAcHJvcGVydHkKLSAgZGVmIHN1aXRlKHNlbGYpOgotICAgICMgVE9ETzogQ29tcGxldGUuCi0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLSAgZGVmIEZpbmRDaGlsZChzZWxmLCBzbmlwcGV0X3R5cGUsICoqa3dhcmdzKToKLSAgICByZXR1cm4gc2VsZi5zdWl0ZS5GaW5kQ2hpbGQoc25pcHBldF90eXBlLCAqKmt3YXJncykKLQotICBkZWYgRmluZENoaWxkcmVuKHNlbGYsIHNuaXBwZXRfdHlwZSk6Ci0gICAgcmV0dXJuIHNlbGYuc3VpdGUuRmluZENoaWxkcmVuKHNuaXBwZXRfdHlwZSkKLQotICBkZWYgQ3V0KHNlbGYsIGNoaWxkKToKLSAgICBzZWxmLnN1aXRlLkN1dChjaGlsZCkKLQotICBkZWYgUGFzdGUoc2VsZiwgY2hpbGQpOgotICAgIHNlbGYuc3VpdGUuUGFzdGUoY2hpbGQpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmVmYWN0b3IvYW5ub3RhdGVkX3N5bWJvbC9pbXBvcnRfc3RhdGVtZW50LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3JlZmFjdG9yL2Fubm90YXRlZF9zeW1ib2wvaW1wb3J0X3N0YXRlbWVudC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMzOGMxMC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmVmYWN0b3IvYW5ub3RhdGVkX3N5bWJvbC9pbXBvcnRfc3RhdGVtZW50LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzIyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGl0ZXJ0b29scwotaW1wb3J0IGtleXdvcmQKLWltcG9ydCBzeW1ib2wKLWltcG9ydCB0b2tlbgotCi1mcm9tIHB5X3V0aWxzLnJlZmFjdG9yLmFubm90YXRlZF9zeW1ib2wgaW1wb3J0IGJhc2Vfc3ltYm9sCi1mcm9tIHB5X3V0aWxzLnJlZmFjdG9yIGltcG9ydCBzbmlwcGV0Ci0KLQotX19hbGxfXyA9IFsKLSAgICAnQXNOYW1lJywKLSAgICAnRG90dGVkTmFtZScsCi0gICAgJ0ltcG9ydCcsCi0gICAgJ0ltcG9ydEZyb20nLAotICAgICdJbXBvcnROYW1lJywKLV0KLQotCi1jbGFzcyBEb3R0ZWROYW1lKGJhc2Vfc3ltYm9sLkFubm90YXRlZFN5bWJvbCk6Ci0gIEBjbGFzc21ldGhvZAotICBkZWYgQW5ub3RhdGUoY2xzLCBzeW1ib2xfdHlwZSwgY2hpbGRyZW4pOgotICAgIGlmIHN5bWJvbF90eXBlICE9IHN5bWJvbC5kb3R0ZWRfbmFtZToKLSAgICAgIHJldHVybiBOb25lCi0gICAgcmV0dXJuIGNscyhzeW1ib2xfdHlwZSwgY2hpbGRyZW4pCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiB2YWx1ZShzZWxmKToKLSAgICByZXR1cm4gJycuam9pbih0b2tlbl9zbmlwcGV0LnZhbHVlIGZvciB0b2tlbl9zbmlwcGV0IGluIHNlbGYuX2NoaWxkcmVuKQotCi0gIEB2YWx1ZS5zZXR0ZXIKLSAgZGVmIHZhbHVlKHNlbGYsIHZhbHVlKToKLSAgICB2YWx1ZV9wYXJ0cyA9IHZhbHVlLnNwbGl0KCcuJykKLSAgICBmb3IgdmFsdWVfcGFydCBpbiB2YWx1ZV9wYXJ0czoKLSAgICAgIGlmIGtleXdvcmQuaXNrZXl3b3JkKHZhbHVlX3BhcnQpOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCclcyBpcyBhIHJlc2VydmVkIGtleXdvcmQuJyAlIHZhbHVlX3BhcnQpCi0KLSAgICAjIElmIHdlIGhhdmUgdG9vIG1hbnkgY2hpbGRyZW4sIGN1dCB0aGUgbGlzdCBkb3duIHRvIHNpemUuCi0gICAgc2VsZi5fY2hpbGRyZW4gPSBzZWxmLl9jaGlsZHJlbls6bGVuKHZhbHVlX3BhcnRzKSoyLTFdCi0KLSAgICAjIFVwZGF0ZSBjaGlsZCBub2Rlcy4KLSAgICBmb3IgY2hpbGQsIHZhbHVlX3BhcnQgaW4gaXRlcnRvb2xzLml6aXBfbG9uZ2VzdCgKLSAgICAgICAgc2VsZi5fY2hpbGRyZW5bOjoyXSwgdmFsdWVfcGFydHMpOgotICAgICAgaWYgY2hpbGQ6Ci0gICAgICAgICMgTW9kaWZ5IGV4aXN0aW5nIGNoaWxkcmVuLiBUaGlzIGhlbHBzIHByZXNlcnZlIGNvbW1lbnRzIGFuZCBzcGFjZXMuCi0gICAgICAgIGNoaWxkLnZhbHVlID0gdmFsdWVfcGFydAotICAgICAgZWxzZToKLSAgICAgICAgIyBBZGQgY2hpbGRyZW4gYXMgbmVlZGVkLgotICAgICAgICBzZWxmLl9jaGlsZHJlbi5hcHBlbmQoc25pcHBldC5Ub2tlblNuaXBwZXQuQ3JlYXRlKHRva2VuLkRPVCwgJy4nKSkKLSAgICAgICAgc2VsZi5fY2hpbGRyZW4uYXBwZW5kKAotICAgICAgICAgICAgc25pcHBldC5Ub2tlblNuaXBwZXQuQ3JlYXRlKHRva2VuLk5BTUUsIHZhbHVlX3BhcnQpKQotCi0KLWNsYXNzIEFzTmFtZShiYXNlX3N5bWJvbC5Bbm5vdGF0ZWRTeW1ib2wpOgotICBAY2xhc3NtZXRob2QKLSAgZGVmIEFubm90YXRlKGNscywgc3ltYm9sX3R5cGUsIGNoaWxkcmVuKToKLSAgICBpZiAoc3ltYm9sX3R5cGUgIT0gc3ltYm9sLmRvdHRlZF9hc19uYW1lIGFuZAotICAgICAgICBzeW1ib2xfdHlwZSAhPSBzeW1ib2wuaW1wb3J0X2FzX25hbWUpOgotICAgICAgcmV0dXJuIE5vbmUKLSAgICByZXR1cm4gY2xzKHN5bWJvbF90eXBlLCBjaGlsZHJlbikKLQotICBAcHJvcGVydHkKLSAgZGVmIG5hbWUoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuY2hpbGRyZW5bMF0udmFsdWUKLQotICBAbmFtZS5zZXR0ZXIKLSAgZGVmIG5hbWUoc2VsZiwgdmFsdWUpOgotICAgIHNlbGYuY2hpbGRyZW5bMF0udmFsdWUgPSB2YWx1ZQotCi0gIEBwcm9wZXJ0eQotICBkZWYgYWxpYXMoc2VsZik6Ci0gICAgaWYgbGVuKHNlbGYuY2hpbGRyZW4pIDwgMzoKLSAgICAgIHJldHVybiBOb25lCi0gICAgcmV0dXJuIHNlbGYuY2hpbGRyZW5bMl0udmFsdWUKLQotICBAYWxpYXMuc2V0dGVyCi0gIGRlZiBhbGlhcyhzZWxmLCB2YWx1ZSk6Ci0gICAgaWYga2V5d29yZC5pc2tleXdvcmQodmFsdWUpOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcignJXMgaXMgYSByZXNlcnZlZCBrZXl3b3JkLicgJSB2YWx1ZSkKLQotICAgIGlmIHZhbHVlOgotICAgICAgaWYgbGVuKHNlbGYuY2hpbGRyZW4pIDwgMzoKLSAgICAgICAgIyBJZiB3ZSBjdXJyZW50bHkgaGF2ZSBubyBhbGlhcywgYWRkIG9uZS4KLSAgICAgICAgc2VsZi5jaGlsZHJlbi5hcHBlbmQoCi0gICAgICAgICAgICBzbmlwcGV0LlRva2VuU25pcHBldC5DcmVhdGUodG9rZW4uTkFNRSwgJ2FzJywgKDAsIDEpKSkKLSAgICAgICAgc2VsZi5jaGlsZHJlbi5hcHBlbmQoCi0gICAgICAgICAgICBzbmlwcGV0LlRva2VuU25pcHBldC5DcmVhdGUodG9rZW4uTkFNRSwgdmFsdWUsICgwLCAxKSkpCi0gICAgICBlbHNlOgotICAgICAgICAjIFdlIGFscmVhZHkgaGF2ZSBhbiBhbGlhcy4gSnVzdCB1cGRhdGUgdGhlIHZhbHVlLgotICAgICAgICBzZWxmLmNoaWxkcmVuWzJdLnZhbHVlID0gdmFsdWUKLSAgICBlbHNlOgotICAgICAgIyBSZW1vdmluZyB0aGUgYWxpYXMuIFN0cmlwIHRoZSAiYXMgZm9vIi4KLSAgICAgIHNlbGYuY2hpbGRyZW4gPSBbc2VsZi5jaGlsZHJlblswXV0KLQotCi1jbGFzcyBJbXBvcnQoYmFzZV9zeW1ib2wuQW5ub3RhdGVkU3ltYm9sKToKLSAgIiIiQW4gaW1wb3J0IHN0YXRlbWVudC4KLQotICBFeGFtcGxlOgotICAgIGltcG9ydCBhLmIuYyBhcyBkCi0gICAgZnJvbSBhLmIgaW1wb3J0IGMgYXMgZAotCi0gIEluIHRoZXNlIGV4YW1wbGVzLAotICAgIHBhdGggPT0gJ2EuYi5jJwotICAgIGFsaWFzID09ICdkJwotICAgIHJvb3QgPT0gJ2EuYicgKG9ubHkgZm9yICJmcm9tIiBpbXBvcnRzKQotICAgIG1vZHVsZSA9PSAnYycgKG9ubHkgZm9yICJmcm9tIiBpbXBvcnRzKQotICAgIG5hbWUgKHJlYWQtb25seSkgPT0gdGhlIG5hbWUgdXNlZCBieSByZWZlcmVuY2VzIHRvIHRoZSBtb2R1bGUsIHdoaWNoIGlzIHRoZQotICAgIGFsaWFzIGlmIHRoZXJlIGlzIG9uZSwgdGhlIGZ1bGwgbW9kdWxlIHBhdGggaW4gImZ1bGwiIGltcG9ydHMsIGFuZCB0aGUKLSAgICBtb2R1bGUgbmFtZSBpbiAiZnJvbSIgaW1wb3J0cy4KLSAgIiIiCi0gIEBwcm9wZXJ0eQotICBkZWYgaGFzX2Zyb20oc2VsZik6Ci0gICAgIiIiUmV0dXJucyBUcnVlIGlmZiB0aGUgaW1wb3J0IHN0YXRtZW50IGlzIG9mIHRoZSBmb3JtICJmcm9tIHggaW1wb3J0IHkiLiIiIgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgdmFsdWVzKHNlbGYpOgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgcGF0aHMoc2VsZik6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBhbGlhc2VzKHNlbGYpOgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgcGF0aChzZWxmKToKLSAgICAiIiJUaGUgZnVsbCBkb3R0ZWQgcGF0aCBvZiB0aGUgbW9kdWxlLiIiIgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQotCi0gIEBwYXRoLnNldHRlcgotICBkZWYgcGF0aChzZWxmLCB2YWx1ZSk6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBhbGlhcyhzZWxmKToKLSAgICAiIiJUaGUgYWxpYXMsIGlmIHRoZSBtb2R1bGUgaXMgcmVuYW1lZCB3aXRoICJhcyIuIE5vbmUgb3RoZXJ3aXNlLiIiIgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQotCi0gIEBhbGlhcy5zZXR0ZXIKLSAgZGVmIGFsaWFzKHNlbGYsIHZhbHVlKToKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKLQotICBAcHJvcGVydHkKLSAgZGVmIG5hbWUoc2VsZik6Ci0gICAgIiIiVGhlIG5hbWUgdXNlZCB0byByZWZlcmVuY2UgdGhpcyBpbXBvcnQncyBtb2R1bGUuIiIiCi0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLQotY2xhc3MgSW1wb3J0TmFtZShJbXBvcnQpOgotICBAY2xhc3NtZXRob2QKLSAgZGVmIEFubm90YXRlKGNscywgc3ltYm9sX3R5cGUsIGNoaWxkcmVuKToKLSAgICBpZiBzeW1ib2xfdHlwZSAhPSBzeW1ib2wuaW1wb3J0X3N0bXQ6Ci0gICAgICByZXR1cm4gTm9uZQotICAgIGlmIGNoaWxkcmVuWzBdLnR5cGUgIT0gc3ltYm9sLmltcG9ydF9uYW1lOgotICAgICAgcmV0dXJuIE5vbmUKLSAgICBhc3NlcnQgbGVuKGNoaWxkcmVuKSA9PSAxCi0gICAgcmV0dXJuIGNscyhzeW1ib2xfdHlwZSwgY2hpbGRyZW5bMF0uY2hpbGRyZW4pCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBoYXNfZnJvbShzZWxmKToKLSAgICByZXR1cm4gRmFsc2UKLQotICBAcHJvcGVydHkKLSAgZGVmIHZhbHVlcyhzZWxmKToKLSAgICBkb3R0ZWRfYXNfbmFtZXMgPSBzZWxmLmNoaWxkcmVuWzFdCi0gICAgcmV0dXJuIHR1cGxlKChkb3R0ZWRfYXNfbmFtZS5uYW1lLCBkb3R0ZWRfYXNfbmFtZS5hbGlhcykKLSAgICAgICAgICAgICAgICAgZm9yIGRvdHRlZF9hc19uYW1lIGluIGRvdHRlZF9hc19uYW1lcy5jaGlsZHJlbls6OjJdKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgcGF0aHMoc2VsZik6Ci0gICAgcmV0dXJuIHR1cGxlKHBhdGggZm9yIHBhdGgsIF8gaW4gc2VsZi52YWx1ZXMpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBhbGlhc2VzKHNlbGYpOgotICAgIHJldHVybiB0dXBsZShhbGlhcyBmb3IgXywgYWxpYXMgaW4gc2VsZi52YWx1ZXMpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBfZG90dGVkX2FzX25hbWUoc2VsZik6Ci0gICAgZG90dGVkX2FzX25hbWVzID0gc2VsZi5jaGlsZHJlblsxXQotICAgIGlmIGxlbihkb3R0ZWRfYXNfbmFtZXMuY2hpbGRyZW4pICE9IDE6Ci0gICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAotICAgICAgICAgICdUaGlzIG1ldGhvZCBvbmx5IHdvcmtzIGlmIHRoZSBzdGF0ZW1lbnQgaGFzIG9uZSBpbXBvcnQuJykKLSAgICByZXR1cm4gZG90dGVkX2FzX25hbWVzLmNoaWxkcmVuWzBdCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBwYXRoKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9kb3R0ZWRfYXNfbmFtZS5uYW1lCi0KLSAgQHBhdGguc2V0dGVyCi0gIGRlZiBwYXRoKHNlbGYsIHZhbHVlKTogICMgcHlsaW50OiBkaXNhYmxlPWFyZ3VtZW50cy1kaWZmZXIKLSAgICBzZWxmLl9kb3R0ZWRfYXNfbmFtZS5uYW1lID0gdmFsdWUKLQotICBAcHJvcGVydHkKLSAgZGVmIGFsaWFzKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9kb3R0ZWRfYXNfbmFtZS5hbGlhcwotCi0gIEBhbGlhcy5zZXR0ZXIKLSAgZGVmIGFsaWFzKHNlbGYsIHZhbHVlKTogICMgcHlsaW50OiBkaXNhYmxlPWFyZ3VtZW50cy1kaWZmZXIKLSAgICBzZWxmLl9kb3R0ZWRfYXNfbmFtZS5hbGlhcyA9IHZhbHVlCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBuYW1lKHNlbGYpOgotICAgIGlmIHNlbGYuYWxpYXM6Ci0gICAgICByZXR1cm4gc2VsZi5hbGlhcwotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gc2VsZi5wYXRoCi0KLQotY2xhc3MgSW1wb3J0RnJvbShJbXBvcnQpOgotICBAY2xhc3NtZXRob2QKLSAgZGVmIEFubm90YXRlKGNscywgc3ltYm9sX3R5cGUsIGNoaWxkcmVuKToKLSAgICBpZiBzeW1ib2xfdHlwZSAhPSBzeW1ib2wuaW1wb3J0X3N0bXQ6Ci0gICAgICByZXR1cm4gTm9uZQotICAgIGlmIGNoaWxkcmVuWzBdLnR5cGUgIT0gc3ltYm9sLmltcG9ydF9mcm9tOgotICAgICAgcmV0dXJuIE5vbmUKLSAgICBhc3NlcnQgbGVuKGNoaWxkcmVuKSA9PSAxCi0gICAgcmV0dXJuIGNscyhzeW1ib2xfdHlwZSwgY2hpbGRyZW5bMF0uY2hpbGRyZW4pCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBoYXNfZnJvbShzZWxmKToKLSAgICByZXR1cm4gVHJ1ZQotCi0gIEBwcm9wZXJ0eQotICBkZWYgdmFsdWVzKHNlbGYpOgotICAgIHRyeToKLSAgICAgIGltcG9ydF9hc19uYW1lcyA9IHNlbGYuRmluZENoaWxkKHN5bWJvbC5pbXBvcnRfYXNfbmFtZXMpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICByZXR1cm4gKCgnKicsIE5vbmUpLCkKLQotICAgIHJldHVybiB0dXBsZSgoaW1wb3J0X2FzX25hbWUubmFtZSwgaW1wb3J0X2FzX25hbWUuYWxpYXMpCi0gICAgICAgICAgICAgICAgIGZvciBpbXBvcnRfYXNfbmFtZSBpbiBpbXBvcnRfYXNfbmFtZXMuY2hpbGRyZW5bOjoyXSkKLQotICBAcHJvcGVydHkKLSAgZGVmIHBhdGhzKHNlbGYpOgotICAgIG1vZHVsZSA9IHNlbGYubW9kdWxlCi0gICAgcmV0dXJuIHR1cGxlKCcuJy5qb2luKChtb2R1bGUsIG5hbWUpKSBmb3IgbmFtZSwgXyBpbiBzZWxmLnZhbHVlcykKLQotICBAcHJvcGVydHkKLSAgZGVmIGFsaWFzZXMoc2VsZik6Ci0gICAgcmV0dXJuIHR1cGxlKGFsaWFzIGZvciBfLCBhbGlhcyBpbiBzZWxmLnZhbHVlcykKLQotICBAcHJvcGVydHkKLSAgZGVmIHJvb3Qoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuRmluZENoaWxkKHN5bWJvbC5kb3R0ZWRfbmFtZSkudmFsdWUKLQotICBAcm9vdC5zZXR0ZXIKLSAgZGVmIHJvb3Qoc2VsZiwgdmFsdWUpOgotICAgIHNlbGYuRmluZENoaWxkKHN5bWJvbC5kb3R0ZWRfbmFtZSkudmFsdWUgPSB2YWx1ZQotCi0gIEBwcm9wZXJ0eQotICBkZWYgX2ltcG9ydF9hc19uYW1lKHNlbGYpOgotICAgIHRyeToKLSAgICAgIGltcG9ydF9hc19uYW1lcyA9IHNlbGYuRmluZENoaWxkKHN5bWJvbC5pbXBvcnRfYXNfbmFtZXMpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICByZXR1cm4gTm9uZQotCi0gICAgaWYgbGVuKGltcG9ydF9hc19uYW1lcy5jaGlsZHJlbikgIT0gMToKLSAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCi0gICAgICAgICAgJ1RoaXMgbWV0aG9kIG9ubHkgd29ya3MgaWYgdGhlIHN0YXRlbWVudCBoYXMgb25lIGltcG9ydC4nKQotCi0gICAgcmV0dXJuIGltcG9ydF9hc19uYW1lcy5jaGlsZHJlblswXQotCi0gIEBwcm9wZXJ0eQotICBkZWYgbW9kdWxlKHNlbGYpOgotICAgIGltcG9ydF9hc19uYW1lID0gc2VsZi5faW1wb3J0X2FzX25hbWUKLSAgICBpZiBpbXBvcnRfYXNfbmFtZToKLSAgICAgIHJldHVybiBpbXBvcnRfYXNfbmFtZS5uYW1lCi0gICAgZWxzZToKLSAgICAgIHJldHVybiAnKicKLQotICBAbW9kdWxlLnNldHRlcgotICBkZWYgbW9kdWxlKHNlbGYsIHZhbHVlKToKLSAgICBpZiBrZXl3b3JkLmlza2V5d29yZCh2YWx1ZSk6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCclcyBpcyBhIHJlc2VydmVkIGtleXdvcmQuJyAlIHZhbHVlKQotCi0gICAgaW1wb3J0X2FzX25hbWUgPSBzZWxmLl9pbXBvcnRfYXNfbmFtZQotICAgIGlmIHZhbHVlID09ICcqJzoKLSAgICAgICMgVE9ETzogSW1wbGVtZW50IHRoaXMuCi0gICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKLSAgICBlbHNlOgotICAgICAgaWYgaW1wb3J0X2FzX25hbWU6Ci0gICAgICAgIGltcG9ydF9hc19uYW1lLm5hbWUgPSB2YWx1ZQotICAgICAgZWxzZToKLSAgICAgICAgIyBUT0RPOiBJbXBsZW1lbnQgdGhpcy4KLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBwYXRoKHNlbGYpOgotICAgIHJldHVybiAnLicuam9pbigoc2VsZi5yb290LCBzZWxmLm1vZHVsZSkpCi0KLSAgQHBhdGguc2V0dGVyCi0gIGRlZiBwYXRoKHNlbGYsIHZhbHVlKTogICMgcHlsaW50OiBkaXNhYmxlPWFyZ3VtZW50cy1kaWZmZXIKLSAgICBzZWxmLnJvb3QsIF8sIHNlbGYubW9kdWxlID0gdmFsdWUucnBhcnRpdGlvbignLicpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBhbGlhcyhzZWxmKToKLSAgICBpbXBvcnRfYXNfbmFtZSA9IHNlbGYuX2ltcG9ydF9hc19uYW1lCi0gICAgaWYgaW1wb3J0X2FzX25hbWU6Ci0gICAgICByZXR1cm4gaW1wb3J0X2FzX25hbWUuYWxpYXMKLSAgICBlbHNlOgotICAgICAgcmV0dXJuIE5vbmUKLQotICBAYWxpYXMuc2V0dGVyCi0gIGRlZiBhbGlhcyhzZWxmLCB2YWx1ZSk6ICAjIHB5bGludDogZGlzYWJsZT1hcmd1bWVudHMtZGlmZmVyCi0gICAgaW1wb3J0X2FzX25hbWUgPSBzZWxmLl9pbXBvcnRfYXNfbmFtZQotICAgIGlmIG5vdCBpbXBvcnRfYXNfbmFtZToKLSAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0Nhbm5vdCBjaGFuZ2UgYWxpYXMgZm9yICJpbXBvcnQgKiIuJykKLSAgICBpbXBvcnRfYXNfbmFtZS5hbGlhcyA9IHZhbHVlCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBuYW1lKHNlbGYpOgotICAgIGlmIHNlbGYuYWxpYXM6Ci0gICAgICByZXR1cm4gc2VsZi5hbGlhcwotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gc2VsZi5tb2R1bGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZWZhY3Rvci9hbm5vdGF0ZWRfc3ltYm9sL3JlZmVyZW5jZS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZWZhY3Rvci9hbm5vdGF0ZWRfc3ltYm9sL3JlZmVyZW5jZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU3YzU3Zi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmVmYWN0b3IvYW5ub3RhdGVkX3N5bWJvbC9yZWZlcmVuY2UucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBpdGVydG9vbHMKLWltcG9ydCBzeW1ib2wKLWltcG9ydCB0b2tlbgotCi1mcm9tIHB5X3V0aWxzLnJlZmFjdG9yLmFubm90YXRlZF9zeW1ib2wgaW1wb3J0IGJhc2Vfc3ltYm9sCi1mcm9tIHB5X3V0aWxzLnJlZmFjdG9yIGltcG9ydCBzbmlwcGV0Ci0KLQotX19hbGxfXyA9IFsKLSAgICAnUmVmZXJlbmNlJywKLV0KLQotCi1jbGFzcyBSZWZlcmVuY2UoYmFzZV9zeW1ib2wuQW5ub3RhdGVkU3ltYm9sKToKLSAgQGNsYXNzbWV0aG9kCi0gIGRlZiBBbm5vdGF0ZShjbHMsIG5vZGVzKToKLSAgICBpZiBub3Qgbm9kZXM6Ci0gICAgICByZXR1cm4gTm9uZQotICAgIGlmIG5vZGVzWzBdLnR5cGUgIT0gc3ltYm9sLmF0b206Ci0gICAgICByZXR1cm4gTm9uZQotICAgIGlmIG5vdCBub2Rlc1swXS5jaGlsZHJlbiBvciBub2Rlc1swXS5jaGlsZHJlblswXS50eXBlICE9IHRva2VuLk5BTUU6Ci0gICAgICByZXR1cm4gTm9uZQotCi0gICAgZm9yIGkgaW4geHJhbmdlKDEsIGxlbihub2RlcykpOgotICAgICAgaWYgbm90IG5vZGVzOgotICAgICAgICBicmVhawotICAgICAgaWYgbm9kZXNbaV0udHlwZSAhPSBzeW1ib2wudHJhaWxlcjoKLSAgICAgICAgYnJlYWsKLSAgICAgIGlmIGxlbihub2Rlc1tpXS5jaGlsZHJlbikgIT0gMjoKLSAgICAgICAgYnJlYWsKLSAgICAgIGlmIChub2Rlc1tpXS5jaGlsZHJlblswXS50eXBlICE9IHRva2VuLkRPVCBvcgotICAgICAgICAgIG5vZGVzW2ldLmNoaWxkcmVuWzFdLnR5cGUgIT0gdG9rZW4uTkFNRSk6Ci0gICAgICAgIGJyZWFrCi0gICAgZWxzZToKLSAgICAgIGkgPSBsZW4obm9kZXMpCi0KLSAgICByZXR1cm4gW2Nscyhub2Rlc1s6aV0pXSArIG5vZGVzW2k6XQotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBjaGlsZHJlbik6Ci0gICAgc3VwZXIoUmVmZXJlbmNlLCBzZWxmKS5fX2luaXRfXygtMSwgY2hpbGRyZW4pCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiB0eXBlX25hbWUoc2VsZik6Ci0gICAgcmV0dXJuICdhdHRyaWJ1dGVfcmVmZXJlbmNlJwotCi0gIEBwcm9wZXJ0eQotICBkZWYgdmFsdWUoc2VsZik6Ci0gICAgcmV0dXJuICcnLmpvaW4odG9rZW5fc25pcHBldC52YWx1ZQotICAgICAgICAgICAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuCi0gICAgICAgICAgICAgICAgICAgZm9yIHRva2VuX3NuaXBwZXQgaW4gY2hpbGQuY2hpbGRyZW4pCi0KLSAgQHZhbHVlLnNldHRlcgotICBkZWYgdmFsdWUoc2VsZiwgdmFsdWUpOgotICAgIHZhbHVlX3BhcnRzID0gdmFsdWUuc3BsaXQoJy4nKQotCi0gICAgIyBJZiB3ZSBoYXZlIHRvbyBtYW55IGNoaWxkcmVuLCBjdXQgdGhlIGxpc3QgZG93biB0byBzaXplLgotICAgIHNlbGYuX2NoaWxkcmVuID0gc2VsZi5fY2hpbGRyZW5bOmxlbih2YWx1ZV9wYXJ0cyldCi0KLSAgICAjIFVwZGF0ZSBjaGlsZCBub2Rlcy4KLSAgICBmb3IgY2hpbGQsIHZhbHVlX3BhcnQgaW4gaXRlcnRvb2xzLml6aXBfbG9uZ2VzdCgKLSAgICAgICAgc2VsZi5fY2hpbGRyZW4sIHZhbHVlX3BhcnRzKToKLSAgICAgIGlmIGNoaWxkOgotICAgICAgICAjIE1vZGlmeSBleGlzdGluZyBjaGlsZHJlbi4gVGhpcyBoZWxwcyBwcmVzZXJ2ZSBjb21tZW50cyBhbmQgc3BhY2VzLgotICAgICAgICBjaGlsZC5jaGlsZHJlblstMV0udmFsdWUgPSB2YWx1ZV9wYXJ0Ci0gICAgICBlbHNlOgotICAgICAgICAjIEFkZCBjaGlsZHJlbiBhcyBuZWVkZWQuCi0gICAgICAgIHRva2VuX3NuaXBwZXRzID0gWwotICAgICAgICAgICAgc25pcHBldC5Ub2tlblNuaXBwZXQuQ3JlYXRlKHRva2VuLkRPVCwgJy4nKSwKLSAgICAgICAgICAgIHNuaXBwZXQuVG9rZW5TbmlwcGV0LkNyZWF0ZSh0b2tlbi5OQU1FLCB2YWx1ZV9wYXJ0KSwKLSAgICAgICAgXQotICAgICAgICBzZWxmLl9jaGlsZHJlbi5hcHBlbmQoc25pcHBldC5TeW1ib2woc3ltYm9sLnRyYWlsZXIsIHRva2VuX3NuaXBwZXRzKSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZWZhY3Rvci9tb2R1bGUucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmVmYWN0b3IvbW9kdWxlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmVhZTAwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZWZhY3Rvci9tb2R1bGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWZyb20gcHlfdXRpbHMucmVmYWN0b3IgaW1wb3J0IGFubm90YXRlZF9zeW1ib2wKLQotCi1jbGFzcyBNb2R1bGUob2JqZWN0KToKLQotICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9wYXRoKToKLSAgICBzZWxmLl9maWxlX3BhdGggPSBmaWxlX3BhdGgKLQotICAgIHdpdGggb3BlbihzZWxmLl9maWxlX3BhdGgsICdyJykgYXMgZjoKLSAgICAgIHNlbGYuX3NuaXBwZXQgPSBhbm5vdGF0ZWRfc3ltYm9sLkFubm90YXRlKGYpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBmaWxlX3BhdGgoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX2ZpbGVfcGF0aAotCi0gIEBwcm9wZXJ0eQotICBkZWYgbW9kaWZpZWQoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX3NuaXBwZXQubW9kaWZpZWQKLQotICBkZWYgRmluZEFsbChzZWxmLCBzbmlwcGV0X3R5cGUpOgotICAgIHJldHVybiBzZWxmLl9zbmlwcGV0LkZpbmRBbGwoc25pcHBldF90eXBlKQotCi0gIGRlZiBGaW5kQ2hpbGRyZW4oc2VsZiwgc25pcHBldF90eXBlKToKLSAgICByZXR1cm4gc2VsZi5fc25pcHBldC5GaW5kQ2hpbGRyZW4oc25pcHBldF90eXBlKQotCi0gIGRlZiBXcml0ZShzZWxmKToKLSAgICAiIiJXcml0ZSBtb2RpZmljYXRpb25zIHRvIHRoZSBmaWxlLiIiIgotICAgIGlmIG5vdCBzZWxmLm1vZGlmaWVkOgotICAgICAgcmV0dXJuCi0KLSAgICAjIFN0cmluZ2lmeSBiZWZvcmUgb3BlbmluZyB0aGUgZmlsZSBmb3Igd3JpdGluZy4KLSAgICAjIElmIHdlIGZhaWwsIHdlIHdvbid0IHRydW5jYXRlIHRoZSBmaWxlLgotICAgIHN0cmluZyA9IHN0cihzZWxmLl9zbmlwcGV0KQotICAgIHdpdGggb3BlbihzZWxmLl9maWxlX3BhdGgsICd3JykgYXMgZjoKLSAgICAgIGYud3JpdGUoc3RyaW5nKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3JlZmFjdG9yL29mZnNldF90b2tlbi5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZWZhY3Rvci9vZmZzZXRfdG9rZW4ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYTk1M2UuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3JlZmFjdG9yL29mZnNldF90b2tlbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IGl0ZXJ0b29scwotaW1wb3J0IHRva2VuCi1pbXBvcnQgdG9rZW5pemUKLQotCi1kZWYgX1BhaXJ3aXNlKGl0ZXJhYmxlKToKLSAgIiIicyAtPiAoTm9uZSwgczApLCAoczAsIHMxKSwgKHMxLCBzMiksIChzMiwgczMpLCAuLi4iIiIKLSAgYSwgYiA9IGl0ZXJ0b29scy50ZWUoaXRlcmFibGUpCi0gIGEgPSBpdGVydG9vbHMuY2hhaW4oKE5vbmUsKSwgYSkKLSAgcmV0dXJuIGl0ZXJ0b29scy5pemlwKGEsIGIpCi0KLQotY2xhc3MgT2Zmc2V0VG9rZW4ob2JqZWN0KToKLSAgIiIiQSBQeXRob24gdG9rZW4gd2l0aCBhIHJlbGF0aXZlIHBvc2l0aW9uLgotCi0gIEEgdG9rZW4gaXMgcmVwcmVzZW50ZWQgYnkgYSB0eXBlIGRlZmluZWQgaW4gUHl0aG9uJ3MgdG9rZW4gbW9kdWxlLCBhIHN0cmluZwotICByZXByZXNlbnRpbmcgdGhlIGNvbnRlbnQsIGFuZCBhbiBvZmZzZXQuIFVzaW5nIHJlbGF0aXZlIHBvc2l0aW9ucyBtYWtlcyBpdAotICBlYXN5IHRvIGluc2VydCBhbmQgcmVtb3ZlIHRva2Vucy4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHRva2VuX3R5cGUsIHN0cmluZywgb2Zmc2V0KToKLSAgICBzZWxmLl90eXBlID0gdG9rZW5fdHlwZQotICAgIHNlbGYuX3N0cmluZyA9IHN0cmluZwotICAgIHNlbGYuX29mZnNldCA9IG9mZnNldAotCi0gIEBwcm9wZXJ0eQotICBkZWYgdHlwZShzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fdHlwZQotCi0gIEBwcm9wZXJ0eQotICBkZWYgdHlwZV9uYW1lKHNlbGYpOgotICAgIHJldHVybiB0b2tlbi50b2tfbmFtZVtzZWxmLl90eXBlXQotCi0gIEBwcm9wZXJ0eQotICBkZWYgc3RyaW5nKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9zdHJpbmcKLQotICBAc3RyaW5nLnNldHRlcgotICBkZWYgc3RyaW5nKHNlbGYsIHZhbHVlKToKLSAgICBzZWxmLl9zdHJpbmcgPSB2YWx1ZQotCi0gIEBwcm9wZXJ0eQotICBkZWYgb2Zmc2V0KHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9vZmZzZXQKLQotICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICByZXR1cm4gc3RyKChzZWxmLnR5cGVfbmFtZSwgc2VsZi5zdHJpbmcsIHNlbGYub2Zmc2V0KSkKLQotCi1kZWYgVG9rZW5pemUoZik6Ci0gICIiIlJlYWQgdG9rZW5zIGZyb20gYSBmaWxlLWxpa2Ugb2JqZWN0LgotCi0gIEFyZ3M6Ci0gICAgZjogQW55IG9iamVjdCB0aGF0IGhhcyBhIHJlYWRsaW5lIG1ldGhvZC4KLQotICBSZXR1cm5zOgotICAgIEEgY29sbGVjdGlvbnMuZGVxdWUgY29udGFpbmluZyBPZmZzZXRUb2tlbnMuIERlcXVlcyBhcmUgY2hlYXBlciBhbmQgZWFzaWVyCi0gICAgdG8gbWFuaXB1bGF0ZSBzZXF1ZW50aWFsbHkgdGhhbiBsaXN0cy4KLSAgIiIiCi0gIGYuc2VlaygwKQotICB0b2tlbml6ZV90b2tlbnMgPSB0b2tlbml6ZS5nZW5lcmF0ZV90b2tlbnMoZi5yZWFkbGluZSkKLQotICBvZmZzZXRfdG9rZW5zID0gY29sbGVjdGlvbnMuZGVxdWUoKQotICBmb3IgcHJldl90b2tlbiwgbmV4dF90b2tlbiBpbiBfUGFpcndpc2UodG9rZW5pemVfdG9rZW5zKToKLSAgICB0b2tlbl90eXBlLCBzdHJpbmcsIChzcm93LCBzY29sKSwgXywgXyA9IG5leHRfdG9rZW4KLSAgICBpZiBub3QgcHJldl90b2tlbjoKLSAgICAgIG9mZnNldF90b2tlbnMuYXBwZW5kKE9mZnNldFRva2VuKHRva2VuX3R5cGUsIHN0cmluZywgKDAsIDApKSkKLSAgICBlbHNlOgotICAgICAgZXJvdywgZWNvbCA9IHByZXZfdG9rZW5bM10KLSAgICAgIGlmIGVyb3cgPT0gc3JvdzoKLSAgICAgICAgb2Zmc2V0X3Rva2Vucy5hcHBlbmQoT2Zmc2V0VG9rZW4odG9rZW5fdHlwZSwgc3RyaW5nLCAoMCwgc2NvbCAtIGVjb2wpKSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIG9mZnNldF90b2tlbnMuYXBwZW5kKE9mZnNldFRva2VuKAotICAgICAgICAgICAgdG9rZW5fdHlwZSwgc3RyaW5nLCAoc3JvdyAtIGVyb3csIHNjb2wpKSkKLQotICByZXR1cm4gb2Zmc2V0X3Rva2VucwotCi0KLWRlZiBVbnRva2VuaXplKG9mZnNldF90b2tlbnMpOgotICAiIiJSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpdGVyYWJsZSBvZiBPZmZzZXRUb2tlbnMuIiIiCi0gICMgTWFrZSBhIGNvcHkuIERvbid0IG1vZGlmeSB0aGUgb3JpZ2luYWwuCi0gIG9mZnNldF90b2tlbnMgPSBjb2xsZWN0aW9ucy5kZXF1ZShvZmZzZXRfdG9rZW5zKQotCi0gICMgU3RyaXAgbGVhZGluZyBOTCB0b2tlbnMuCi0gIHdoaWxlIG9mZnNldF90b2tlbnNbMF0udHlwZSA9PSB0b2tlbml6ZS5OTDoKLSAgICBvZmZzZXRfdG9rZW5zLnBvcGxlZnQoKQotCi0gICMgU3RyaXAgbGVhZGluZyB2ZXJ0aWNhbCB3aGl0ZXNwYWNlLgotICBmaXJzdF90b2tlbiA9IG9mZnNldF90b2tlbnMucG9wbGVmdCgpCi0gICMgVGFrZSBjYXJlIG5vdCB0byBtb2RpZnkgdGhlIGV4aXN0aW5nIHRva2VuLiBDcmVhdGUgYSBuZXcgb25lIGluIGl0cyBwbGFjZS4KLSAgZmlyc3RfdG9rZW4gPSBPZmZzZXRUb2tlbihmaXJzdF90b2tlbi50eXBlLCBmaXJzdF90b2tlbi5zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIGZpcnN0X3Rva2VuLm9mZnNldFsxXSkpCi0gIG9mZnNldF90b2tlbnMuYXBwZW5kbGVmdChmaXJzdF90b2tlbikKLQotICAjIENvbnZlcnQgT2Zmc2V0VG9rZW5zIHRvIHRva2VuaXplIHRva2Vucy4KLSAgdG9rZW5pemVfdG9rZW5zID0gW10KLSAgcm93ID0gMQotICBjb2wgPSAwCi0gIGZvciB0IGluIG9mZnNldF90b2tlbnM6Ci0gICAgb2Zmc2V0X3Jvdywgb2Zmc2V0X2NvbCA9IHQub2Zmc2V0Ci0gICAgaWYgb2Zmc2V0X3JvdyA9PSAwOgotICAgICAgY29sICs9IG9mZnNldF9jb2wKLSAgICBlbHNlOgotICAgICAgcm93ICs9IG9mZnNldF9yb3cKLSAgICAgIGNvbCA9IG9mZnNldF9jb2wKLSAgICB0b2tlbml6ZV90b2tlbnMuYXBwZW5kKCh0LnR5cGUsIHQuc3RyaW5nLCAocm93LCBjb2wpLCAocm93LCBjb2wpLCBOb25lKSkKLQotICAjIHRva2VuaXplIGNhbid0IGhhbmRsZSB3aGl0ZXNwYWNlIGJlZm9yZSBsaW5lIGNvbnRpbnVhdGlvbnMuCi0gICMgU28gYWRkIGEgc3BhY2UuCi0gIHJldHVybiB0b2tlbml6ZS51bnRva2VuaXplKHRva2VuaXplX3Rva2VucykucmVwbGFjZSgnXFxcbicsICcgXFxcbicpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmVmYWN0b3Ivc25pcHBldC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZWZhY3Rvci9zbmlwcGV0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTg1NjFhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZWZhY3Rvci9zbmlwcGV0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IHBhcnNlcgotaW1wb3J0IHN5bWJvbAotaW1wb3J0IHN5cwotaW1wb3J0IHRva2VuCi1pbXBvcnQgdG9rZW5pemUKLQotZnJvbSBweV91dGlscy5yZWZhY3RvciBpbXBvcnQgb2Zmc2V0X3Rva2VuCi0KLQotY2xhc3MgU25pcHBldChvYmplY3QpOgotICAiIiJBIG5vZGUgaW4gdGhlIFB5dGhvbiBwYXJzZSB0cmVlLgotCi0gIFRoZSBQeXRob24gZ3JhbW1hciBpcyBkZWZpbmVkIGF0OgotICBodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL3JlZmVyZW5jZS9ncmFtbWFyLmh0bWwKLQotICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIFNuaXBwZXRzOgotICAgIFRva2VuU25pcHBldHMgYXJlIGxlYWYgbm9kZXMgY29udGFpbmluZyBhY3R1YWwgdGV4dC4KLSAgICBTeW1ib2xzIGFyZSBpbnRlcm5hbCBub2RlcyByZXByZXNlbnRpbmcgaGlnaGVyLWxldmVsIGdyb3VwaW5ncywgYW5kIGFyZQotICAgICAgICBkZWZpbmVkIGJ5IHRoZSBsZWZ0LWhhbmQgc2lkZXMgb2YgdGhlIEJORnMgaW4gdGhlIGFib3ZlIGxpbmsuCi0gICIiIgotICBAcHJvcGVydHkKLSAgZGVmIHR5cGUoc2VsZik6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiB0eXBlX25hbWUoc2VsZik6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBjaGlsZHJlbihzZWxmKToKLSAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIHRoaXMgbm9kZSdzIGNoaWxkcmVuLiIiIgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgdG9rZW5zKHNlbGYpOgotICAgICIiIlJldHVybiBhIHR1cGxlIG9mIHRoZSB0b2tlbnMgdGhpcyBTbmlwcGV0IGNvbnRhaW5zLiIiIgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQotCi0gIGRlZiBQcmludFRyZWUoc2VsZiwgaW5kZW50PTAsIHN0cmVhbT1zeXMuc3Rkb3V0KToKLSAgICAiIiJTcGV3IGEgcHJldHR5LXByaW50ZWQgcGFyc2UgdHJlZS4gTW9zdGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiIiIgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQotCi0gIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgIHJldHVybiBvZmZzZXRfdG9rZW4uVW50b2tlbml6ZShzZWxmLnRva2VucykKLQotICBkZWYgRmluZEFsbChzZWxmLCBzbmlwcGV0X3R5cGUpOgotICAgIGlmIGlzaW5zdGFuY2Uoc25pcHBldF90eXBlLCBpbnQpOgotICAgICAgaWYgc2VsZi50eXBlID09IHNuaXBwZXRfdHlwZToKLSAgICAgICAgeWllbGQgc2VsZgotICAgIGVsc2U6Ci0gICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIHNuaXBwZXRfdHlwZSk6Ci0gICAgICAgIHlpZWxkIHNlbGYKLQotICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgotICAgICAgZm9yIHNuaXBwZXQgaW4gY2hpbGQuRmluZEFsbChzbmlwcGV0X3R5cGUpOgotICAgICAgICB5aWVsZCBzbmlwcGV0Ci0KLSAgZGVmIEZpbmRDaGlsZChzZWxmLCBzbmlwcGV0X3R5cGUsICoqa3dhcmdzKToKLSAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKLSAgICAgIGlmIGlzaW5zdGFuY2Uoc25pcHBldF90eXBlLCBpbnQpOgotICAgICAgICBpZiBjaGlsZC50eXBlICE9IHNuaXBwZXRfdHlwZToKLSAgICAgICAgICBjb250aW51ZQotICAgICAgZWxzZToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY2hpbGQsIHNuaXBwZXRfdHlwZSk6Ci0gICAgICAgICAgY29udGludWUKLQotICAgICAgZm9yIGF0dHJpYnV0ZSwgdmFsdWUgaW4ga3dhcmdzOgotICAgICAgICBpZiBnZXRhdHRyKGNoaWxkLCBhdHRyaWJ1dGUpICE9IHZhbHVlOgotICAgICAgICAgIGJyZWFrCi0gICAgICBlbHNlOgotICAgICAgICByZXR1cm4gY2hpbGQKLSAgICByYWlzZSBWYWx1ZUVycm9yKCclcyBpcyBub3QgaW4gJXMuIENoaWxkcmVuIGFyZTogJXMnICUKLSAgICAgICAgICAgICAgICAgICAgIChzbmlwcGV0X3R5cGUsIHNlbGYsIHNlbGYuY2hpbGRyZW4pKQotCi0gIGRlZiBGaW5kQ2hpbGRyZW4oc2VsZiwgc25pcHBldF90eXBlKToKLSAgICBpZiBpc2luc3RhbmNlKHNuaXBwZXRfdHlwZSwgaW50KToKLSAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgotICAgICAgICBpZiBjaGlsZC50eXBlID09IHNuaXBwZXRfdHlwZToKLSAgICAgICAgICB5aWVsZCBjaGlsZAotICAgIGVsc2U6Ci0gICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKLSAgICAgICAgaWYgaXNpbnN0YW5jZShjaGlsZCwgc25pcHBldF90eXBlKToKLSAgICAgICAgICB5aWVsZCBjaGlsZAotCi0KLWNsYXNzIFRva2VuU25pcHBldChTbmlwcGV0KToKLSAgIiIiQSBTbmlwcGV0IGNvbnRhaW5pbmcgYSBsaXN0IG9mIHRva2Vucy4KLQotICBBIGxpc3Qgb2YgdG9rZW5zIG1heSBzdGFydCB3aXRoIGFueSBudW1iZXIgb2YgY29tbWVudHMgYW5kIG5vbi10ZXJtaW5hdGluZwotICBuZXdsaW5lcywgYnV0IG11c3QgZW5kIHdpdGggYSBzeW50YWN0aWNhbGx5IG1lYW5pbmdmdWwgdG9rZW4uCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCB0b2tlbl90eXBlLCB0b2tlbnMpOgotICAgICMgRm9yIG9wZXJhdG9ycyBhbmQgZGVsaW1pdGVycywgdGhlIFRva2VuU25pcHBldCdzIHR5cGUgbWF5IGJlIG1vcmUgc3BlY2lmaWMKLSAgICAjIHRoYW4gdGhlIHR5cGUgb2YgdGhlIGNvbnN0aXR1ZW50IHRva2VuLiBFLmcuIHRoZSBUb2tlblNuaXBwZXQgdHlwZSBpcwotICAgICMgdG9rZW4uRE9ULCBidXQgdGhlIHRva2VuIHR5cGUgaXMgdG9rZW4uT1AuIFRoaXMgaXMgYmVjYXVzZSB0aGUgcGFyc2VyCi0gICAgIyBoYXMgbW9yZSBjb250ZXh0IHRoYW4gdGhlIHRva2VuaXplci4KLSAgICBzZWxmLl90eXBlID0gdG9rZW5fdHlwZQotICAgIHNlbGYuX3Rva2VucyA9IHRva2VucwotICAgIHNlbGYuX21vZGlmaWVkID0gRmFsc2UKLQotICBAY2xhc3NtZXRob2QKLSAgZGVmIENyZWF0ZShjbHMsIHRva2VuX3R5cGUsIHN0cmluZywgb2Zmc2V0PSgwLCAwKSk6Ci0gICAgcmV0dXJuIGNscyh0b2tlbl90eXBlLAotICAgICAgICAgICAgICAgW29mZnNldF90b2tlbi5PZmZzZXRUb2tlbih0b2tlbl90eXBlLCBzdHJpbmcsIG9mZnNldCldKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgdHlwZShzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fdHlwZQotCi0gIEBwcm9wZXJ0eQotICBkZWYgdHlwZV9uYW1lKHNlbGYpOgotICAgIHJldHVybiB0b2tlbi50b2tfbmFtZVtzZWxmLnR5cGVdCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiB2YWx1ZShzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fdG9rZW5zWy0xXS5zdHJpbmcKLQotICBAdmFsdWUuc2V0dGVyCi0gIGRlZiB2YWx1ZShzZWxmLCB2YWx1ZSk6Ci0gICAgc2VsZi5fdG9rZW5zWy0xXS5zdHJpbmcgPSB2YWx1ZQotICAgIHNlbGYuX21vZGlmaWVkID0gVHJ1ZQotCi0gIEBwcm9wZXJ0eQotICBkZWYgY2hpbGRyZW4oc2VsZik6Ci0gICAgcmV0dXJuIFtdCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiB0b2tlbnMoc2VsZik6Ci0gICAgcmV0dXJuIHR1cGxlKHNlbGYuX3Rva2VucykKLQotICBAcHJvcGVydHkKLSAgZGVmIG1vZGlmaWVkKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9tb2RpZmllZAotCi0gIGRlZiBQcmludFRyZWUoc2VsZiwgaW5kZW50PTAsIHN0cmVhbT1zeXMuc3Rkb3V0KToKLSAgICBzdHJlYW0ud3JpdGUoJyAnICogaW5kZW50KQotICAgIGlmIG5vdCBzZWxmLnRva2VuczoKLSAgICAgIHByaW50ID4+IHN0cmVhbSwgc2VsZi50eXBlX25hbWUKLSAgICAgIHJldHVybgotCi0gICAgcHJpbnQgPj4gc3RyZWFtLCAnJS00cycgJSBzZWxmLnR5cGVfbmFtZSwgcmVwcihzZWxmLnRva2Vuc1swXS5zdHJpbmcpCi0gICAgZm9yIHRvayBpbiBzZWxmLnRva2Vuc1sxOl06Ci0gICAgICBzdHJlYW0ud3JpdGUoJyAnICogaW5kZW50KQotICAgICAgcHJpbnQgPj4gc3RyZWFtLCAnICcgKiBtYXgobGVuKHNlbGYudHlwZV9uYW1lKSwgNCksIHJlcHIodG9rLnN0cmluZykKLQotCi1jbGFzcyBTeW1ib2woU25pcHBldCk6Ci0gICIiIkEgU25pcHBldCBjb250YWluaW5nIHN1Yi1TbmlwcGV0cy4KLQotICBUaGUgcG9zc2libGUgdHlwZXMgYW5kIHR5cGVfbmFtZXMgYXJlIGRlZmluZWQgaW4gUHl0aG9uJ3Mgc3ltYm9sIG1vZHVsZS4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgc3ltYm9sX3R5cGUsIGNoaWxkcmVuKToKLSAgICBzZWxmLl90eXBlID0gc3ltYm9sX3R5cGUKLSAgICBzZWxmLl9jaGlsZHJlbiA9IGNoaWxkcmVuCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiB0eXBlKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl90eXBlCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiB0eXBlX25hbWUoc2VsZik6Ci0gICAgcmV0dXJuIHN5bWJvbC5zeW1fbmFtZVtzZWxmLnR5cGVdCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBjaGlsZHJlbihzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fY2hpbGRyZW4KLQotICBAY2hpbGRyZW4uc2V0dGVyCi0gIGRlZiBjaGlsZHJlbihzZWxmLCB2YWx1ZSk6ICAjIHB5bGludDogZGlzYWJsZT1hcmd1bWVudHMtZGlmZmVyCi0gICAgc2VsZi5fY2hpbGRyZW4gPSB2YWx1ZQotCi0gIEBwcm9wZXJ0eQotICBkZWYgdG9rZW5zKHNlbGYpOgotICAgIHRva2VucyA9IFtdCi0gICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICB0b2tlbnMgKz0gY2hpbGQudG9rZW5zCi0gICAgcmV0dXJuIHR1cGxlKHRva2VucykKLQotICBAcHJvcGVydHkKLSAgZGVmIG1vZGlmaWVkKHNlbGYpOgotICAgIHJldHVybiBhbnkoY2hpbGQubW9kaWZpZWQgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW4pCi0KLSAgZGVmIFByaW50VHJlZShzZWxmLCBpbmRlbnQ9MCwgc3RyZWFtPXN5cy5zdGRvdXQpOgotICAgIHN0cmVhbS53cml0ZSgnICcgKiBpbmRlbnQpCi0KLSAgICAjIElmIHRoZXJlJ3Mgb25seSBvbmUgY2hpbGQsIGNvbGxhcHNlIGl0IG9udG8gdGhlIHNhbWUgbGluZS4KLSAgICBub2RlID0gc2VsZgotICAgIHdoaWxlIGxlbihub2RlLmNoaWxkcmVuKSA9PSAxIGFuZCBsZW4obm9kZS5jaGlsZHJlblswXS5jaGlsZHJlbikgPT0gMToKLSAgICAgIHByaW50ID4+IHN0cmVhbSwgbm9kZS50eXBlX25hbWUsCi0gICAgICBub2RlID0gbm9kZS5jaGlsZHJlblswXQotCi0gICAgcHJpbnQgPj4gc3RyZWFtLCBub2RlLnR5cGVfbmFtZQotICAgIGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgotICAgICAgY2hpbGQuUHJpbnRUcmVlKGluZGVudCArIDIsIHN0cmVhbSkKLQotCi1kZWYgU25pcHBldGl6ZShmKToKLSAgIiIiUmV0dXJuIHRoZSBzeW50YXggdHJlZSBvZiB0aGUgZ2l2ZW4gZmlsZS4iIiIKLSAgZi5zZWVrKDApCi0gIHN5bnRheF90cmVlID0gcGFyc2VyLnN0Mmxpc3QocGFyc2VyLnN1aXRlKGYucmVhZCgpKSkKLSAgdG9rZW5zID0gb2Zmc2V0X3Rva2VuLlRva2VuaXplKGYpCi0KLSAgc25pcHBldCA9IF9TbmlwcGV0aXplTm9kZShzeW50YXhfdHJlZSwgdG9rZW5zKQotICBhc3NlcnQgbm90IHRva2VucwotICByZXR1cm4gc25pcHBldAotCi0KLWRlZiBfU25pcHBldGl6ZU5vZGUobm9kZSwgdG9rZW5zKToKLSAgIyBUaGUgcGFyc2VyIG1vZHVsZSBnaXZlcyBhIHN5bnRheCB0cmVlIHRoYXQgZGlzY2FyZHMgY29tbWVudHMsCi0gICMgbm9uLXRlcm1pbmF0aW5nIG5ld2xpbmVzLCBhbmQgd2hpdGVzcGFjZSBpbmZvcm1hdGlvbi4gVXNlIHRoZSB0b2tlbnMgZ2l2ZW4KLSAgIyBieSB0aGUgdG9rZW5pemUgbW9kdWxlIHRvIGFubm90YXRlIHRoZSBzeW50YXggdHJlZSB3aXRoIHRoZSBpbmZvcm1hdGlvbgotICAjIG5lZWRlZCB0byBleGFjdGx5IHJlcHJvZHVjZSB0aGUgb3JpZ2luYWwgc291cmNlIGNvZGUuCi0gIG5vZGVfdHlwZSA9IG5vZGVbMF0KLQotICBpZiBub2RlX3R5cGUgPj0gdG9rZW4uTlRfT0ZGU0VUOgotICAgICMgU3ltYm9sLgotICAgIGNoaWxkcmVuID0gdHVwbGUoX1NuaXBwZXRpemVOb2RlKGNoaWxkLCB0b2tlbnMpIGZvciBjaGlsZCBpbiBub2RlWzE6XSkKLSAgICByZXR1cm4gU3ltYm9sKG5vZGVfdHlwZSwgY2hpbGRyZW4pCi0gIGVsc2U6Ci0gICAgIyBUb2tlbi4KLSAgICBncmFiYmVkX3Rva2VucyA9IFtdCi0gICAgd2hpbGUgdG9rZW5zIGFuZCAoCi0gICAgICAgIHRva2Vuc1swXS50eXBlID09IHRva2VuaXplLkNPTU1FTlQgb3IgdG9rZW5zWzBdLnR5cGUgPT0gdG9rZW5pemUuTkwpOgotICAgICAgZ3JhYmJlZF90b2tlbnMuYXBwZW5kKHRva2Vucy5wb3BsZWZ0KCkpCi0KLSAgICAjIHBhcnNlciBoYXMgMiBORVdMSU5FcyByaWdodCBiZWZvcmUgdGhlIGVuZC4KLSAgICAjIHRva2VuaXplIGhhcyAwIG9yIDEgZGVwZW5kaW5nIG9uIGlmIHRoZSBmaWxlIGhhcyBvbmUuCi0gICAgIyBDcmVhdGUgZXh0cmEgbm9kZXMgd2l0aG91dCBjb25zdW1pbmcgdG9rZW5zIHRvIGFjY291bnQgZm9yIHRoaXMuCi0gICAgaWYgbm9kZV90eXBlID09IHRva2VuLk5FV0xJTkU6Ci0gICAgICBmb3IgdG9rIGluIHRva2VuczoKLSAgICAgICAgaWYgdG9rLnR5cGUgPT0gdG9rZW4uRU5ETUFSS0VSOgotICAgICAgICAgIHJldHVybiBUb2tlblNuaXBwZXQobm9kZV90eXBlLCBncmFiYmVkX3Rva2VucykKLSAgICAgICAgaWYgdG9rLnR5cGUgIT0gdG9rZW4uREVERU5UOgotICAgICAgICAgIGJyZWFrCi0KLSAgICBhc3NlcnQgdG9rZW5zWzBdLnR5cGUgPT0gdG9rZW4uT1Agb3Igbm9kZV90eXBlID09IHRva2Vuc1swXS50eXBlCi0KLSAgICBncmFiYmVkX3Rva2Vucy5hcHBlbmQodG9rZW5zLnBvcGxlZnQoKSkKLSAgICByZXR1cm4gVG9rZW5TbmlwcGV0KG5vZGVfdHlwZSwgZ3JhYmJlZF90b2tlbnMpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmVmYWN0b3JfdXRpbC9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZWZhY3Rvcl91dGlsL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZWZhY3Rvcl91dGlsL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZWZhY3Rvcl91dGlsL21vdmUucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmVmYWN0b3JfdXRpbC9tb3ZlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjhmOTNiLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZWZhY3Rvcl91dGlsL21vdmUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgZnVuY3Rvb2xzCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotZnJvbSBweV91dGlscyBpbXBvcnQgcmVmYWN0b3IKLQotCi1kZWYgUnVuKHNvdXJjZXMsIHRhcmdldCwgZmlsZXNfdG9fdXBkYXRlKToKLSAgIiIiTW92ZSBtb2R1bGVzIGFuZCB1cGRhdGUgaW1wb3J0cy4KLQotICBBcmdzOgotICAgIHNvdXJjZXM6IExpc3Qgb2Ygc291cmNlIG1vZHVsZSBvciBwYWNrYWdlIHBhdGhzLgotICAgIHRhcmdldDogRGVzdGluYXRpb24gbW9kdWxlIG9yIHBhY2thZ2UgcGF0aC4KLSAgICBmaWxlc190b191cGRhdGU6IE1vZHVsZXMgd2hvc2UgaW1wb3J0cyB3ZSBzaG91bGQgY2hlY2sgZm9yIGNoYW5nZXMuCi0gICIiIgotICAjIFRPRE8oZHR1KTogU3VwcG9ydCBtb3ZpbmcgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLgotICBtb3ZlcyA9IHR1cGxlKF9Nb3ZlKHNvdXJjZSwgdGFyZ2V0KSBmb3Igc291cmNlIGluIHNvdXJjZXMpCi0KLSAgIyBVcGRhdGUgaW1wb3J0cyBhbmQgcmVmZXJlbmNlcy4KLSAgcmVmYWN0b3IuVHJhbnNmb3JtKGZ1bmN0b29scy5wYXJ0aWFsKF9VcGRhdGUsIG1vdmVzKSwgZmlsZXNfdG9fdXBkYXRlKQotCi0gICMgTW92ZSBmaWxlcy4KLSAgZm9yIG1vdmUgaW4gbW92ZXM6Ci0gICAgb3MucmVuYW1lKG1vdmUuc291cmNlX3BhdGgsIG1vdmUudGFyZ2V0X3BhdGgpCi0KLQotZGVmIF9VcGRhdGUobW92ZXMsIG1vZHVsZSk6Ci0gIGZvciBpbXBvcnRfc3RhdGVtZW50IGluIG1vZHVsZS5GaW5kQWxsKHJlZmFjdG9yLkltcG9ydCk6Ci0gICAgZm9yIG1vdmUgaW4gbW92ZXM6Ci0gICAgICB0cnk6Ci0gICAgICAgIGlmIG1vdmUuVXBkYXRlSW1wb3J0QW5kUmVmZXJlbmNlcyhtb2R1bGUsIGltcG9ydF9zdGF0ZW1lbnQpOgotICAgICAgICAgIGJyZWFrCi0gICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvciBhcyBlOgotICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAnRXJyb3IgdXBkYXRpbmcgJXM6ICVzJyAlIChtb2R1bGUuZmlsZV9wYXRoLCBlKQotCi0KLWNsYXNzIF9Nb3ZlKG9iamVjdCk6Ci0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgdGFyZ2V0KToKLSAgICBzZWxmLl9zb3VyY2VfcGF0aCA9IG9zLnBhdGgucmVhbHBhdGgoc291cmNlKQotICAgIHNlbGYuX3RhcmdldF9wYXRoID0gb3MucGF0aC5yZWFscGF0aCh0YXJnZXQpCi0KLSAgICBpZiBvcy5wYXRoLmlzZGlyKHNlbGYuX3RhcmdldF9wYXRoKToKLSAgICAgIHNlbGYuX3RhcmdldF9wYXRoID0gb3MucGF0aC5qb2luKAotICAgICAgICAgIHNlbGYuX3RhcmdldF9wYXRoLCBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuX3NvdXJjZV9wYXRoKSkKLQotICBAcHJvcGVydHkKLSAgZGVmIHNvdXJjZV9wYXRoKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9zb3VyY2VfcGF0aAotCi0gIEBwcm9wZXJ0eQotICBkZWYgdGFyZ2V0X3BhdGgoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX3RhcmdldF9wYXRoCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBzb3VyY2VfbW9kdWxlX3BhdGgoc2VsZik6Ci0gICAgcmV0dXJuIF9Nb2R1bGVQYXRoKHNlbGYuX3NvdXJjZV9wYXRoKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgdGFyZ2V0X21vZHVsZV9wYXRoKHNlbGYpOgotICAgIHJldHVybiBfTW9kdWxlUGF0aChzZWxmLl90YXJnZXRfcGF0aCkKLQotICBkZWYgVXBkYXRlSW1wb3J0QW5kUmVmZXJlbmNlcyhzZWxmLCBtb2R1bGUsIGltcG9ydF9zdGF0ZW1lbnQpOgotICAgICIiIlVwZGF0ZSBhbiBpbXBvcnQgc3RhdGVtZW50IGluIGEgbW9kdWxlIGFuZCBhbGwgaXRzIHJlZmVyZW5jZXMuLgotCi0gICAgQXJnczoKLSAgICAgIG1vZHVsZTogVGhlIHJlZmFjdG9yLk1vZHVsZSB0byB1cGRhdGUuCi0gICAgICBpbXBvcnRfc3RhdGVtZW50OiAgVGhlIHJlZmFjdG9yLkltcG9ydCB0byB1cGRhdGUuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSBpZiB0aGUgaW1wb3J0IHN0YXRlbWVudCB3YXMgdXBkYXRlZCwgb3IgRmFsc2UgaWYgdGhlIGltcG9ydCBzdGF0ZW1lbnQKLSAgICAgIG5lZWRlZCBubyB1cGRhdGluZy4KLSAgICAiIiIKLSAgICBzdGF0ZW1lbnRfcGF0aF9wYXJ0cyA9IGltcG9ydF9zdGF0ZW1lbnQucGF0aC5zcGxpdCgnLicpCi0gICAgc291cmNlX3BhdGhfcGFydHMgPSBzZWxmLnNvdXJjZV9tb2R1bGVfcGF0aC5zcGxpdCgnLicpCi0gICAgaWYgc291cmNlX3BhdGhfcGFydHMgIT0gc3RhdGVtZW50X3BhdGhfcGFydHNbOmxlbihzb3VyY2VfcGF0aF9wYXJ0cyldOgotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAjIFVwZGF0ZSBpbXBvcnQgc3RhdGVtZW50LgotICAgIG9sZF9uYW1lX3BhcnRzID0gaW1wb3J0X3N0YXRlbWVudC5uYW1lLnNwbGl0KCcuJykKLSAgICBuZXdfbmFtZV9wYXJ0cyA9IChbc2VsZi50YXJnZXRfbW9kdWxlX3BhdGhdICsKLSAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRfcGF0aF9wYXJ0c1tsZW4oc291cmNlX3BhdGhfcGFydHMpOl0pCi0gICAgaW1wb3J0X3N0YXRlbWVudC5wYXRoID0gJy4nLmpvaW4obmV3X25hbWVfcGFydHMpCi0gICAgbmV3X25hbWUgPSBpbXBvcnRfc3RhdGVtZW50Lm5hbWUKLQotICAgICMgVXBkYXRlIHJlZmVyZW5jZXMuCi0gICAgZm9yIHJlZmVyZW5jZSBpbiBtb2R1bGUuRmluZEFsbChyZWZhY3Rvci5SZWZlcmVuY2UpOgotICAgICAgcmVmZXJlbmNlX3BhcnRzID0gcmVmZXJlbmNlLnZhbHVlLnNwbGl0KCcuJykKLSAgICAgIGlmIG9sZF9uYW1lX3BhcnRzICE9IHJlZmVyZW5jZV9wYXJ0c1s6bGVuKG9sZF9uYW1lX3BhcnRzKV06Ci0gICAgICAgIGNvbnRpbnVlCi0KLSAgICAgIG5ld19yZWZlcmVuY2VfcGFydHMgPSBbbmV3X25hbWVdICsgcmVmZXJlbmNlX3BhcnRzW2xlbihvbGRfbmFtZV9wYXJ0cyk6XQotICAgICAgcmVmZXJlbmNlLnZhbHVlID0gJy4nLmpvaW4obmV3X3JlZmVyZW5jZV9wYXJ0cykKLQotICAgIHJldHVybiBUcnVlCi0KLQotZGVmIF9CYXNlRGlyKG1vZHVsZV9wYXRoKToKLSAgaWYgbm90IG9zLnBhdGguaXNkaXIobW9kdWxlX3BhdGgpOgotICAgIG1vZHVsZV9wYXRoID0gb3MucGF0aC5kaXJuYW1lKG1vZHVsZV9wYXRoKQotCi0gIHdoaWxlICdfX2luaXRfXy5weScgaW4gb3MubGlzdGRpcihtb2R1bGVfcGF0aCk6Ci0gICAgbW9kdWxlX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUobW9kdWxlX3BhdGgpCi0KLSAgcmV0dXJuIG1vZHVsZV9wYXRoCi0KLQotZGVmIF9Nb2R1bGVQYXRoKG1vZHVsZV9wYXRoKToKLSAgaWYgb3MucGF0aC5zcGxpdChtb2R1bGVfcGF0aClbMV0gPT0gJ19faW5pdF9fLnB5JzoKLSAgICBtb2R1bGVfcGF0aCA9IG9zLnBhdGguZGlybmFtZShtb2R1bGVfcGF0aCkKLSAgcmVsX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgobW9kdWxlX3BhdGgsIF9CYXNlRGlyKG1vZHVsZV9wYXRoKSkKLSAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQocmVsX3BhdGgpWzBdLnJlcGxhY2Uob3Muc2VwLCAnLicpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvcmV0cnlfdXRpbC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZXRyeV91dGlsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTgyNmNhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZXRyeV91dGlsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotaW1wb3J0IGZ1bmN0b29scwotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCB0aW1lCi0KLQotZGVmIFJldHJ5T25FeGNlcHRpb24oZXhjX3R5cGUsIHJldHJpZXMpOgotICAiIiJEZWNvcmF0b3IgdG8gcmV0cnkgcnVubmluZyBhIGZ1bmN0aW9uIGlmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQuCi0KLSAgSW1wbGVtZW50cyBleHBvbmVudGlhbCBiYWNrb2ZmIHRvIHdhaXQgYmV0d2VlbiBlYWNoIHJldHJ5IGF0dGVtcHQsIHN0YXJ0aW5nCi0gIHdpdGggMSBzZWNvbmQuCi0KLSAgTm90ZTogdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHJldHJpZXMgaXMgZGVmaW5lZCBvbiB0aGUgZGVjb3JhdG9yLCB0aGUgZGVjb3JhdGVkCi0gIGZ1bmN0aW9uICptdXN0KiBhbHNvIHJlY2VpdmUgYSAicmV0cmllcyIgYXJndW1lbnQgKGFsdGhvdWdoIGl0cyBhc3NpZ25lZAotICBkZWZhdWx0IHZhbHVlIGlzIGlnbm9yZWQpLCBhbmQgY2xpZW50cyBvZiB0aGUgZnVudGlvbiBtYXkgb3ZlcnJpZGUgdGhlIGFjdHVhbAotICBudW1iZXIgb2YgcmV0cmllcyBhdCB0aGUgY2FsbCBzaXRlLgotCi0gIFRoZSAidW51c2VkIiByZXRyaWVzIGFyZ3VtZW50IG9uIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gbXVzdCBiZSBnaXZlbiB0bwotICBrZWVwIHB5bGludCBoYXBweSBhbmQgdG8gYXZvaWQgYnJlYWtpbmcgdGhlIFByaW5jaXBsZSBvZiBMZWFzdCBBc3RvbmlzaG1lbnQKLSAgaWYgdGhlIGRlY29yYXRvciB3ZXJlIHRvIGNoYW5nZSB0aGUgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbi4KLQotICBGb3IgZXhhbXBsZToKLQotICAgIEByZXRyeV91dGlsLlJldHJ5T25FeGNlcHRpb24oT1NFcnJvciwgcmV0cmllcz0zKSAgIyBkZWZhdWx0IG5vLiBvZiByZXRyaWVzCi0gICAgZGVmIFByb2Nlc3NTb21ldGhpbmcodGhpbmcsIHJldHJpZXM9Tm9uZSk6ICAjIHRoaXMgZGVmYXVsdCB2YWx1ZSBpcyBpZ25vcmVkCi0gICAgICBkZWwgcmV0cmllcyAgIyBVbnVzZWQuIEhhbmRsZWQgYnkgdGhlIGRlY29yYXRvci4KLSAgICAgICMgRG8geW91ciB0aGluZyBwcm9jZXNzaW5nIGhlcmUsIG1heWJlIHNvbWV0aW1lcyByYWlzaW5nIGV4ZXB0aW9ucy4KLQotICAgIFByb2Nlc3NTb21ldGhpbmcoYV90aGluZykgICMgcmV0cmllcyAzIHRpbWVzLgotICAgIFByb2Nlc3NTb21ldGhpbmcoYl90aGluZywgcmV0cmllcz01KSAgIyByZXRyaWVzIDUgdGltZXMuCi0KLSAgQXJnczoKLSAgICBleGNfdHlwZTogQW4gZXhjZXB0aW9uIHR5cGUgKG9yIGEgdHVwbGUgb2YgdGhlbSksIG9uIHdoaWNoIHRvIHJldHJ5LgotICAgIHJldHJpZXM6IERlZmF1bHQgbnVtYmVyIG9mIGV4dHJhIGF0dGVtcHRzIHRvIHRyeSwgdGhlIGNhbGxlciBtYXkgYWxzbwotICAgICAgb3ZlcnJpZGUgdGhpcyBudW1iZXIuIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgZHVyaW5nIHRoZSBsYXN0IHRyeSwKLSAgICAgIHRoZW4gdGhlIGV4Y2VwdGlvbiBpcyBub3QgY2F1Z2h0IGFuZCBwYXNzZWQgYmFjayB0byB0aGUgY2FsbGVyLgotICAiIiIKLSAgZGVmIERlY29yYXRvcihmKToKLSAgICBAZnVuY3Rvb2xzLndyYXBzKGYpCi0gICAgZGVmIFdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgIHdhaXQgPSAxCi0gICAgICBrd2FyZ3Muc2V0ZGVmYXVsdCgncmV0cmllcycsIHJldHJpZXMpCi0gICAgICBmb3IgXyBpbiB4cmFuZ2Uoa3dhcmdzWydyZXRyaWVzJ10pOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgcmV0dXJuIGYoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBleGNlcHQgZXhjX3R5cGUgYXMgZXhjOgotICAgICAgICAgIGxvZ2dpbmcud2FybmluZygKLSAgICAgICAgICAgICAgJyVzIHJhaXNlZCAlcywgd2lsbCByZXRyeSBpbiAlZCBzZWNvbmQlcyAuLi4nLAotICAgICAgICAgICAgICBmLl9fbmFtZV9fLCB0eXBlKGV4YykuX19uYW1lX18sIHdhaXQsICcnIGlmIHdhaXQgPT0gMSBlbHNlICdzJykKLSAgICAgICAgICB0aW1lLnNsZWVwKHdhaXQpCi0gICAgICAgICAgd2FpdCAqPSAyCi0gICAgICAjIExhc3QgdHJ5IHdpdGggbm8gZXhjZXB0aW9uIGNhdGNoaW5nLgotICAgICAgcmV0dXJuIGYoKmFyZ3MsICoqa3dhcmdzKQotICAgIHJldHVybiBXcmFwcGVyCi0gIHJldHVybiBEZWNvcmF0b3IKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9yZXRyeV91dGlsX3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3JldHJ5X3V0aWxfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MWY4OGUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3JldHJ5X3V0aWxfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotaW1wb3J0IG1vY2sKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHB5X3V0aWxzIGltcG9ydCByZXRyeV91dGlsCi0KLQotY2xhc3MgUmV0cnlPbkV4Y2VwdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5udW1fY2FsbHMgPSAwCi0gICAgIyBQYXRjaCB0aW1lLnNsZWVwIHRvIG1ha2UgdGVzdHMgcnVuIGZhc3RlciAoc2tpcCB3YWl0cykgYW5kIGFsc28gY2hlY2sKLSAgICAjIHRoYXQgZXhwb25lbnRpYWwgYmFja29mZiBpcyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuCi0gICAgcGF0Y2hlciA9IG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnKQotICAgIHNlbGYudGltZV9zbGVlcCA9IHBhdGNoZXIuc3RhcnQoKQotICAgIHNlbGYuYWRkQ2xlYW51cChwYXRjaGVyLnN0b3ApCi0KLSAgZGVmIHRlc3ROb0V4Y2VwdGlvbnNSZXR1cm5JbW1lZGlhdGVseShzZWxmKToKLSAgICBAcmV0cnlfdXRpbC5SZXRyeU9uRXhjZXB0aW9uKEV4Y2VwdGlvbiwgcmV0cmllcz0zKQotICAgIGRlZiBUZXN0KHJldHJpZXM9Tm9uZSk6Ci0gICAgICBkZWwgcmV0cmllcwotICAgICAgc2VsZi5udW1fY2FsbHMgKz0gMQotICAgICAgcmV0dXJuICdPSyEnCi0KLSAgICAjIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBhbmQgcmV0dXJucyB0aGUgZXhwZWN0ZWQgdmFsdWUuCi0gICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0KCksICdPSyEnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5udW1fY2FsbHMsIDEpCi0KLSAgZGVmIHRlc3RSYWlzZXNFeGNlcHRpb25JZkFsd2F5c0ZhaWxpbmcoc2VsZik6Ci0gICAgQHJldHJ5X3V0aWwuUmV0cnlPbkV4Y2VwdGlvbihLZXlFcnJvciwgcmV0cmllcz01KQotICAgIGRlZiBUZXN0KHJldHJpZXM9Tm9uZSk6Ci0gICAgICBkZWwgcmV0cmllcwotICAgICAgc2VsZi5udW1fY2FsbHMgKz0gMQotICAgICAgcmFpc2UgS2V5RXJyb3IoJ29vcHMhJykKLQotICAgICMgVGhlIGV4Y2VwdGlvbiBpcyBldmVudHVhbGx5IHJhaXNlZC4KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKLSAgICAgIFRlc3QoKQotICAgICMgVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHRpbWVzLgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5udW1fY2FsbHMsIDYpCi0gICAgIyBXYWl0cyBiZXR3ZWVuIHJldHJpZXMgZG8gZm9sbG93IGV4cG9uZW50aWFsIGJhY2tvZmYuCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgc2VsZi50aW1lX3NsZWVwLmNhbGxfYXJnc19saXN0LAotICAgICAgICBbbW9jay5jYWxsKGkpIGZvciBpIGluICgxLCAyLCA0LCA4LCAxNildKQotCi0gIGRlZiB0ZXN0T3RoZXJFeGNlcHRpb25zQXJlTm90Q2F1Z2h0KHNlbGYpOgotICAgIEByZXRyeV91dGlsLlJldHJ5T25FeGNlcHRpb24oS2V5RXJyb3IsIHJldHJpZXM9MykKLSAgICBkZWYgVGVzdChyZXRyaWVzPU5vbmUpOgotICAgICAgZGVsIHJldHJpZXMKLSAgICAgIHNlbGYubnVtX2NhbGxzICs9IDEKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ29vcHMhJykKLQotICAgICMgVGhlIGV4Y2VwdGlvbiBpcyByYWlzZWQgaW1tZWRpYXRlbHkgb24gdGhlIGZpcnN0IHRyeS4KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgVGVzdCgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm51bV9jYWxscywgMSkKLQotICBkZWYgdGVzdENhbGxlck1heU92ZXJyaWRlUmV0cmllcyhzZWxmKToKLSAgICBAcmV0cnlfdXRpbC5SZXRyeU9uRXhjZXB0aW9uKEtleUVycm9yLCByZXRyaWVzPTMpCi0gICAgZGVmIFRlc3QocmV0cmllcz1Ob25lKToKLSAgICAgIGRlbCByZXRyaWVzCi0gICAgICBzZWxmLm51bV9jYWxscyArPSAxCi0gICAgICByYWlzZSBLZXlFcnJvcignb29wcyEnKQotCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICBUZXN0KHJldHJpZXM9MTApCi0gICAgIyBUaGUgdmFsdWUgb24gdGhlIGNhbGxlciBvdmVycmlkZXMgdGhlIGRlZmF1bHQgb24gdGhlIGRlY29yYXRvci4KLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubnVtX2NhbGxzLCAxMSkKLQotICBkZWYgdGVzdENhbkV2ZW50dWFsbHlTdWNjZWVkKHNlbGYpOgotICAgIEByZXRyeV91dGlsLlJldHJ5T25FeGNlcHRpb24oS2V5RXJyb3IsIHJldHJpZXM9NSkKLSAgICBkZWYgVGVzdChyZXRyaWVzPU5vbmUpOgotICAgICAgZGVsIHJldHJpZXMKLSAgICAgIHNlbGYubnVtX2NhbGxzICs9IDEKLSAgICAgIGlmIHNlbGYubnVtX2NhbGxzIDwgMzoKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ29vcHMhJykKLSAgICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiAnT0shJwotCi0gICAgIyBUaGUgdmFsdWUgaXMgcmV0dXJuZWQgYWZ0ZXIgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBjYWxscy4KLSAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QoKSwgJ09LIScpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm51bV9jYWxscywgMykKLQotICBkZWYgdGVzdFJldHJpZXNDYW5CZVN3aXRjaGVkT2ZmKHNlbGYpOgotICAgIEByZXRyeV91dGlsLlJldHJ5T25FeGNlcHRpb24oS2V5RXJyb3IsIHJldHJpZXM9NSkKLSAgICBkZWYgVGVzdChyZXRyaWVzPU5vbmUpOgotICAgICAgZGVsIHJldHJpZXMKLSAgICAgIHNlbGYubnVtX2NhbGxzICs9IDEKLSAgICAgIGlmIHNlbGYubnVtX2NhbGxzIDwgMzoKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ29vcHMhJykKLSAgICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiAnT0shJwotCi0gICAgIyBXZSBmYWlsIGltbWVkaWF0ZWx5IG9uIHRoZSBmaXJzdCB0cnkuCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICBUZXN0KHJldHJpZXM9MCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubnVtX2NhbGxzLCAxKQotCi0gIGRlZiB0ZXN0Q2FuUmV0cnlPbk11bHRpcGxlRXhjZXB0aW9ucyhzZWxmKToKLSAgICBAcmV0cnlfdXRpbC5SZXRyeU9uRXhjZXB0aW9uKChLZXlFcnJvciwgVmFsdWVFcnJvciksIHJldHJpZXM9MykKLSAgICBkZWYgVGVzdChyZXRyaWVzPU5vbmUpOgotICAgICAgZGVsIHJldHJpZXMKLSAgICAgIHNlbGYubnVtX2NhbGxzICs9IDEKLSAgICAgIGlmIHNlbGYubnVtX2NhbGxzID09IDE6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yKCdvb3BzIScpCi0gICAgICBlbGlmIHNlbGYubnVtX2NhbGxzID09IDI6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3VoIG9oIScpCi0gICAgICBlbHNlOgotICAgICAgICByZXR1cm4gJ09LIScKLQotICAgICMgQ2FsbCBldmVudHVhbGx5IHN1Y2NlZWRzIGFmdGVyIGVub3VnaCB0cmllcy4KLSAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QocmV0cmllcz01KSwgJ09LIScpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm51bV9jYWxscywgMykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9zaGVsbF91dGlsLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3NoZWxsX3V0aWwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNTI5YzguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3NoZWxsX3V0aWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0jCi0jIFNoZWxsIHNjcmlwdGluZyBoZWxwZXJzIChjcmVhdGVkIGZvciBUZWxlbWV0cnkgZGVwZW5kZW5jeSByb2xsIHNjcmlwdHMpLgotCi1pbXBvcnQgb3MgYXMgX29zCi1pbXBvcnQgc2h1dGlsIGFzIF9zaHV0aWwKLWltcG9ydCBzdWJwcm9jZXNzIGFzIF9zdWJwcm9jZXNzCi1pbXBvcnQgdGVtcGZpbGUgYXMgX3RlbXBmaWxlCi1mcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyIGFzIF9jb250ZXh0bWFuYWdlcgotCi1AX2NvbnRleHRtYW5hZ2VyCi1kZWYgU2NvcGVkQ2hhbmdlRGlyKG5ld19wYXRoKToKLSAgb2xkX3BhdGggPSBfb3MuZ2V0Y3dkKCkKLSAgX29zLmNoZGlyKG5ld19wYXRoKQotICBwcmludCAnPiBjZCcsIF9vcy5nZXRjd2QoKQotICB0cnk6Ci0gICAgeWllbGQKLSAgZmluYWxseToKLSAgICBfb3MuY2hkaXIob2xkX3BhdGgpCi0gICAgcHJpbnQgJz4gY2QnLCBvbGRfcGF0aAotCi1AX2NvbnRleHRtYW5hZ2VyCi1kZWYgU2NvcGVkVGVtcERpcigpOgotICB0ZW1wX2RpciA9IF90ZW1wZmlsZS5ta2R0ZW1wKCkKLSAgdHJ5OgotICAgIHdpdGggU2NvcGVkQ2hhbmdlRGlyKHRlbXBfZGlyKToKLSAgICAgIHlpZWxkCi0gIGZpbmFsbHk6Ci0gICAgX3NodXRpbC5ybXRyZWUodGVtcF9kaXIpCi0KLWRlZiBDYWxsUHJvZ3JhbShwYXRoX3BhcnRzLCAqYXJncywgKiprd2FyZ3MpOgotICAnJydDYWxsIGFuIGV4ZWN1dGFibGUgb3MucGF0aC5qb2luKCpwYXRoX3BhcnRzKSB3aXRoIHRoZSBhcmd1bWVudHMgc3BlY2lmaWVkCi0gIGJ5ICphcmdzLiBBbnkga2V5d29yZCBhcmd1bWVudHMgYXJlIHBhc3NlZCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuJycnCi0gIGFyZ3MgPSBbX29zLnBhdGguam9pbigqcGF0aF9wYXJ0cyldICsgbGlzdChhcmdzKQotICBlbnYgPSBkaWN0KF9vcy5lbnZpcm9uKQotICBlbnYudXBkYXRlKGt3YXJncykKLSAgcHJpbnQgJz4nLCAnICcuam9pbihhcmdzKQotICBfc3VicHJvY2Vzcy5jaGVja19jYWxsKGFyZ3MsIGVudj1lbnYpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvc2xvdHNfbWV0YWNsYXNzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3Nsb3RzX21ldGFjbGFzcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUzNmM2Ny4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvc2xvdHNfbWV0YWNsYXNzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1jbGFzcyBTbG90c01ldGFjbGFzcyh0eXBlKToKLSAgIiIiVGhpcyBtZXRhY2xhc3MgcmVxdWlyZXMgYWxsIHN1YmNsYXNzZXMgdG8gZGVmaW5lIF9fc2xvdHNfXy4KLQotICBVc2FnZToKLSAgICBjbGFzcyBGb28ob2JqZWN0KToKLSAgICAgIF9fbWV0YWNsYXNzX18gPSBzbG90c19tZXRhY2xhc3MuU2xvdHNNZXRhY2xhc3MKLSAgICAgIF9fc2xvdHNfXyA9ICdfcHJvcGVydHkwJywgJ19wcm9wZXJ0eTEnLAotCi0gIF9fc2xvdHNfXyBtdXN0IGJlIGEgdHVwbGUgY29udGFpbmluZyBzdHJpbmcgbmFtZXMgb2YgYWxsIHByb3BlcnRpZXMgdGhhdCB0aGUKLSAgY2xhc3MgY29udGFpbnMuCi0gIERlZmluaW5nIF9fc2xvdHNfXyByZWR1Y2VzIG1lbW9yeSB1c2FnZSwgYWNjZWxlcmF0ZXMgcHJvcGVydHkgYWNjZXNzLCBhbmQKLSAgcHJldmVudHMgZHluYW1pY2FsbHkgYWRkaW5nIHVubGlzdGVkIHByb3BlcnRpZXMuCi0gIElmIHlvdSBuZWVkIHRvIGR5bmFtaWNhbGx5IGFkZCB1bmxpc3RlZCBwcm9wZXJ0aWVzIHRvIGEgY2xhc3Mgd2l0aCB0aGlzCi0gIG1ldGFjbGFzcywgdGhlbiB0YWtlIGEgc3RlcCBiYWNrIGFuZCByZXRoaW5rIHlvdXIgZ29hbHMuIElmIHlvdSByZWFsbHkgcmVhbGx5Ci0gIG5lZWQgdG8gZHluYW1pY2FsbHkgYWRkIHVubGlzdGVkIHByb3BlcnRpZXMgdG8gYSBjbGFzcyB3aXRoIHRoaXMgbWV0YWNsYXNzLAotICBhZGQgJ19fZGljdF9fJyB0byBpdHMgX19zbG90c19fLgotICAiIiIKLQotICBkZWYgX19uZXdfXyhtY3MsIG5hbWUsIGJhc2VzLCBhdHRycyk6Ci0gICAgYXNzZXJ0ICdfX3Nsb3RzX18nIGluIGF0dHJzLCAnQ2xhc3MgIiVzIiBtdXN0IGRlZmluZSBfX3Nsb3RzX18nICUgbmFtZQotICAgIGFzc2VydCBpc2luc3RhbmNlKGF0dHJzWydfX3Nsb3RzX18nXSwgdHVwbGUpLCAnX19zbG90c19fIG11c3QgYmUgYSB0dXBsZScKLQotICAgIHJldHVybiBzdXBlcihTbG90c01ldGFjbGFzcywgbWNzKS5fX25ld19fKG1jcywgbmFtZSwgYmFzZXMsIGF0dHJzKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3Nsb3RzX21ldGFjbGFzc191bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy9zbG90c19tZXRhY2xhc3NfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YmIzNDMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3Nsb3RzX21ldGFjbGFzc191bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gcHlfdXRpbHMgaW1wb3J0IHNsb3RzX21ldGFjbGFzcwotCi1jbGFzcyBTbG90c01ldGFjbGFzc1VuaXR0ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdFNsb3RzTWV0YWNsYXNzKHNlbGYpOgotICAgIGNsYXNzIE5pY2VDbGFzcyhvYmplY3QpOgotICAgICAgX19tZXRhY2xhc3NfXyA9IHNsb3RzX21ldGFjbGFzcy5TbG90c01ldGFjbGFzcwotICAgICAgX19zbG90c19fID0gJ19uaWNlJywKLQotICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5pY2UpOgotICAgICAgICBzZWxmLl9uaWNlID0gbmljZQotCi0gICAgTmljZUNsYXNzKDQyKQotCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6Ci0gICAgICBjbGFzcyBOYXVnaHR5Q2xhc3MoTmljZUNsYXNzKToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hdWdodHkpOgotICAgICAgICAgIHN1cGVyKE5hdWdodHlDbGFzcywgc2VsZikuX19pbml0X18oNDIpCi0gICAgICAgICAgc2VsZi5fbmF1Z2h0eSA9IG5hdWdodHkKLQotICAgICAgIyBNZXRhY2xhc3NlcyBhcmUgY2FsbGVkIHdoZW4gdGhlIGNsYXNzIGlzIGRlZmluZWQsIHNvIG5vIG5lZWQgdG8KLSAgICAgICMgaW5zdGFudGlhdGUgaXQuCi0KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKLSAgICAgIGNsYXNzIE5hdWdodHlDbGFzczIoTmljZUNsYXNzKToKLSAgICAgICAgX19zbG90c19fID0gKCkKLQotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmF1Z2h0eSk6Ci0gICAgICAgICAgc3VwZXIoTmF1Z2h0eUNsYXNzMiwgc2VsZikuX19pbml0X18oNDIpCi0gICAgICAgICAgc2VsZi5fbmF1Z2h0eSA9IG5hdWdodHkgICMgcHlsaW50OiBkaXNhYmxlPWFzc2lnbmluZy1ub24tc2xvdAotCi0gICAgICAjIFNsb3RzTWV0YWNsYXNzIGlzIGhhcHB5IHRoYXQgX19zbG90c19fIGlzIGRlZmluZWQsIGJ1dCBweXRob24gd29uJ3QgYmUKLSAgICAgICMgaGFwcHkgYWJvdXQgYXNzaWduaW5nIF9uYXVnaHR5IHdoZW4gdGhlIGNsYXNzIGlzIGluc3RhbnRpYXRlZCBiZWNhdXNlIGl0Ci0gICAgICAjIGlzbid0IGxpc3RlZCBpbiBfX3Nsb3RzX18sIGV2ZW4gaWYgeW91IGRpc2FibGUgdGhlIHB5bGludCBlcnJvci4KLSAgICAgIE5hdWdodHlDbGFzczIoNjY2KQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3RlbXBmaWxlX2V4dC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy90ZW1wZmlsZV9leHQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NGFkNWIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3RlbXBmaWxlX2V4dC5weQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotCi1pbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IHNodXRpbAotaW1wb3J0IHRlbXBmaWxlCi0KLQotQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLWRlZiBOYW1lZFRlbXBvcmFyeURpcmVjdG9yeShzdWZmaXg9JycsIHByZWZpeD0ndG1wJywgZGlyPU5vbmUpOgotICAiIiJBIGNvbnRleHQgbWFuYWdlciB0aGF0IG1hbmFnZXMgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgotCi0gIFRoaXMgaXMgYSBjb250ZXh0IG1hbmFnZXIgdmVyc2lvbiBvZiB0ZW1wZmlsZS5ta2R0ZW1wLiBUaGUgYXJndW1lbnRzIHRvIHRoaXMKLSAgZnVuY3Rpb24gYXJlIHRoZSBzYW1lIGFzIHRoZSBhcmd1bWVudHMgZm9yIHRoYXQgb25lLgotCi0gIFRoaXMgY2FuIGJlIHVzZWQgdG8gYXV0b21hdGljYWxseSBtYW5hZ2UgdGhlIGxpZmV0aW1lIG9mIGEgdGVtcG9yYXJ5IGZpbGUKLSAgd2l0aG91dCBtYWludGFpbmluZyBhbiBvcGVuIGZpbGUgaGFuZGxlIG9uIGl0LiBEb2luZyBzbyBjYW4gYmUgdXNlZnVsIGluCi0gIHNjZW5hcmlvcyB3aGVyZSBhIHBhcmVudCBwcm9jZXNzIGNhbGxzIGEgY2hpbGQgcHJvY2VzcyB0byBjcmVhdGUgYSB0ZW1wb3JhcnkKLSAgZmlsZSBhbmQgdGhlbiBkb2VzIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRpbmcgZmlsZS4KLSAgIiIiCi0gICMgVGhpcyB1c2VzIHxkaXJ8IGFzIGEgcGFyYW1ldGVyIG5hbWUgZm9yIGNvbnNpc3RlbmN5IHdpdGggbWtkdGVtcC4KLSAgIyBweWxpbnQ6IGRpc2FibGU9cmVkZWZpbmVkLWJ1aWx0aW4KLQotICBkID0gdGVtcGZpbGUubWtkdGVtcChzdWZmaXg9c3VmZml4LCBwcmVmaXg9cHJlZml4LCBkaXI9ZGlyKQotICB0cnk6Ci0gICAgeWllbGQgZAotICBmaW5hbGx5OgotICAgIHNodXRpbC5ybXRyZWUoZCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy90ZW1wZmlsZV9leHRfdW5pdHRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvdGVtcGZpbGVfZXh0X3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODQ0NjIzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy90ZW1wZmlsZV9leHRfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotCi1mcm9tIHB5X3V0aWxzIGltcG9ydCB0ZW1wZmlsZV9leHQKLWZyb20gcHlmYWtlZnMgaW1wb3J0IGZha2VfZmlsZXN5c3RlbV91bml0dGVzdAotCi0KLWNsYXNzIE5hbWVkVGVtcG9yYXJ5RGlyZWN0b3J5VGVzdChmYWtlX2ZpbGVzeXN0ZW1fdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzZWxmLnNldFVwUHlmYWtlZnMoKQotCi0gIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICBzZWxmLnRlYXJEb3duUHlmYWtlZnMoKQotCi0gIGRlZiB0ZXN0QmFzaWMoc2VsZik6Ci0gICAgd2l0aCB0ZW1wZmlsZV9leHQuTmFtZWRUZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyBkOgotICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGQpKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIoZCkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhkKSkKLQotICBkZWYgdGVzdFN1ZmZpeChzZWxmKToKLSAgICB0ZXN0X3N1ZmZpeCA9ICdmb28nCi0gICAgd2l0aCB0ZW1wZmlsZV9leHQuTmFtZWRUZW1wb3JhcnlEaXJlY3Rvcnkoc3VmZml4PXRlc3Rfc3VmZml4KSBhcyBkOgotICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguYmFzZW5hbWUoZCkuZW5kc3dpdGgodGVzdF9zdWZmaXgpKQotCi0gIGRlZiB0ZXN0UHJlZml4KHNlbGYpOgotICAgIHRlc3RfcHJlZml4ID0gJ2JhcicKLSAgICB3aXRoIHRlbXBmaWxlX2V4dC5OYW1lZFRlbXBvcmFyeURpcmVjdG9yeShwcmVmaXg9dGVzdF9wcmVmaXgpIGFzIGQ6Ci0gICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5iYXNlbmFtZShkKS5zdGFydHN3aXRoKHRlc3RfcHJlZml4KSkKLQotICBkZWYgdGVzdERpcihzZWxmKToKLSAgICB0ZXN0X2RpciA9ICcvYmF6JwotICAgIHNlbGYuZnMuQ3JlYXRlRGlyZWN0b3J5KHRlc3RfZGlyKQotICAgIHdpdGggdGVtcGZpbGVfZXh0Lk5hbWVkVGVtcG9yYXJ5RGlyZWN0b3J5KGRpcj10ZXN0X2RpcikgYXMgZDoKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRlc3RfZGlyLCBvcy5wYXRoLmRpcm5hbWUoZCkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvdGVzdF9kYXRhL2Rpc2NvdmVyYWJsZV9jbGFzc2VzL19faW5pdF9fLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3Rlc3RfZGF0YS9kaXNjb3ZlcmFibGVfY2xhc3Nlcy9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIyOGRmOC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvdGVzdF9kYXRhL2Rpc2NvdmVyYWJsZV9jbGFzc2VzL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvdGVzdF9kYXRhL2Rpc2NvdmVyYWJsZV9jbGFzc2VzL2Fub3RoZXJfZGlzY292ZXJfZHVtbXljbGFzcy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy90ZXN0X2RhdGEvZGlzY292ZXJhYmxlX2NsYXNzZXMvYW5vdGhlcl9kaXNjb3Zlcl9kdW1teWNsYXNzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDU5Y2NmLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy90ZXN0X2RhdGEvZGlzY292ZXJhYmxlX2NsYXNzZXMvYW5vdGhlcl9kaXNjb3Zlcl9kdW1teWNsYXNzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJNb3JlIGR1bW15IGV4Y2VwdGlvbiBzdWJjbGFzc2VzIHVzZWQgYnkgY29yZS9kaXNjb3Zlci5weSdzIHVuaXQgdGVzdHMuIiIiCi0KLSMgSW1wb3J0IGNsYXNzIGluc3RlYWQgb2YgbW9kdWxlIGV4cGxpY2l0bHkgc28gdGhhdCBpbnNwZWN0LmdldG1lbWJlcnMoKSByZXR1cm5zCi0jIHR3byBFeGNlcHRpb24gc3ViY2xhc3NlcyBpbiB0aGlzIGN1cnJlbnQgZmlsZS4KLSMgU3VwcHJlc3MgY29tcGxhaW50cyBhYm91dCB1bmFibGUgdG8gaW1wb3J0IGNsYXNzLiAgVGhlIGRpcmVjdG9yeSBwYXRoIGlzCi0jIGFkZGVkIGF0IHJ1bnRpbWUgYnkgdGVsZW1ldHJ5IHRlc3QgcnVubmVyLgotI3B5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3IKLWZyb20gZGlzY292ZXJhYmxlX2NsYXNzZXMgaW1wb3J0IGRpc2NvdmVyX2R1bW15Y2xhc3MKLQotCi1jbGFzcyBfUHJpdmF0ZUR1bW15RXhjZXB0aW9uKGRpc2NvdmVyX2R1bW15Y2xhc3MuRHVtbXlFeGNlcHRpb24pOgotICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgc3VwZXIoX1ByaXZhdGVEdW1teUV4Y2VwdGlvbiwgc2VsZikuX19pbml0X18oKQotCi0KLWNsYXNzIER1bW15RXhjZXB0aW9uSW1wbDEoX1ByaXZhdGVEdW1teUV4Y2VwdGlvbik6Ci0gIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICBzdXBlcihEdW1teUV4Y2VwdGlvbkltcGwxLCBzZWxmKS5fX2luaXRfXygpCi0KLQotY2xhc3MgRHVtbXlFeGNlcHRpb25JbXBsMihfUHJpdmF0ZUR1bW15RXhjZXB0aW9uKToKLSAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgIHN1cGVyKER1bW15RXhjZXB0aW9uSW1wbDIsIHNlbGYpLl9faW5pdF9fKCkKLQotCi1jbGFzcyBEdW1teUV4Y2VwdGlvbldpdGhQYXJhbWV0ZXJJbXBsMShfUHJpdmF0ZUR1bW15RXhjZXB0aW9uKToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmFtZXRlcik6Ci0gICAgc3VwZXIoRHVtbXlFeGNlcHRpb25XaXRoUGFyYW1ldGVySW1wbDEsIHNlbGYpLl9faW5pdF9fKCkKLSAgICBkZWwgcGFyYW1ldGVyCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvdGVzdF9kYXRhL2Rpc2NvdmVyYWJsZV9jbGFzc2VzL2Rpc2NvdmVyX2R1bW15Y2xhc3MucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvdGVzdF9kYXRhL2Rpc2NvdmVyYWJsZV9jbGFzc2VzL2Rpc2NvdmVyX2R1bW15Y2xhc3MucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZGNiMzUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3Rlc3RfZGF0YS9kaXNjb3ZlcmFibGVfY2xhc3Nlcy9kaXNjb3Zlcl9kdW1teWNsYXNzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIkEgZHVtbXkgZXhjZXB0aW9uIHN1YmNsYXNzIHVzZWQgYnkgY29yZS9kaXNjb3Zlci5weSdzIHVuaXQgdGVzdHMuIiIiCi0KLWNsYXNzIER1bW15RXhjZXB0aW9uKEV4Y2VwdGlvbik6Ci0gIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICBzdXBlcihEdW1teUV4Y2VwdGlvbiwgc2VsZikuX19pbml0X18oKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3Rlc3RfZGF0YS9kaXNjb3ZlcmFibGVfY2xhc3Nlcy9wYXJhbWV0ZXJfZGlzY292ZXJfZHVtbXljbGFzcy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV91dGlscy9weV91dGlscy90ZXN0X2RhdGEvZGlzY292ZXJhYmxlX2NsYXNzZXMvcGFyYW1ldGVyX2Rpc2NvdmVyX2R1bW15Y2xhc3MucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzN2Y0YTkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3Rlc3RfZGF0YS9kaXNjb3ZlcmFibGVfY2xhc3Nlcy9wYXJhbWV0ZXJfZGlzY292ZXJfZHVtbXljbGFzcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiQSBkdW1teSBleGNlcHRpb24gc3ViY2xhc3MgdXNlZCBieSBjb3JlL2Rpc2NvdmVyLnB5J3MgdW5pdCB0ZXN0cy4iIiIKLWZyb20gZGlzY292ZXJhYmxlX2NsYXNzZXMgaW1wb3J0IGRpc2NvdmVyX2R1bW15Y2xhc3MKLQotY2xhc3MgRHVtbXlFeGNlcHRpb25XaXRoUGFyYW1ldGVySW1wbDIoZGlzY292ZXJfZHVtbXljbGFzcy5EdW1teUV4Y2VwdGlvbik6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyKToKLSAgICBzdXBlcihEdW1teUV4Y2VwdGlvbldpdGhQYXJhbWV0ZXJJbXBsMiwgc2VsZikuX19pbml0X18oKQotICAgIGRlbCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvdGVzdF9kYXRhL2Zvby50eHQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMvdGVzdF9kYXRhL2Zvby50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5Y2FjM2UuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3Rlc3RfZGF0YS9mb28udHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotVGhpcyBmaWxlIGlzIG5vdCBleGVjdXRhYmxlLgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3V0aWxzL3B5X3V0aWxzL3h2ZmIucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMveHZmYi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA5ZjNlMy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdXRpbHMvcHlfdXRpbHMveHZmYi5weQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotaW1wb3J0IG9zCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBwbGF0Zm9ybQotaW1wb3J0IHRpbWUKLQotCi1kZWYgU2hvdWxkU3RhcnRYdmZiKCk6Ci0gIHJldHVybiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnTGludXgnCi0KLQotZGVmIFN0YXJ0WHZmYigpOgotICBkaXNwbGF5ID0gJzo5OScKLSAgeHZmYl9jb21tYW5kID0gWydYdmZiJywgZGlzcGxheSwgJy1zY3JlZW4nLCAnMCcsICcxMDI0eDc2OXgyNCcsICctYWMnXQotICB4dmZiX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKAotICAgICAgeHZmYl9jb21tYW5kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0gIHRpbWUuc2xlZXAoMC4yKQotICByZXR1cm5jb2RlID0geHZmYl9wcm9jZXNzLnBvbGwoKQotICBpZiByZXR1cm5jb2RlIGlzIE5vbmU6Ci0gICAgb3MuZW52aXJvblsnRElTUExBWSddID0gZGlzcGxheQotICBlbHNlOgotICAgIGxvZ2dpbmcuZXJyb3IoJ1h2ZmIgZGlkIG5vdCBzdGFydCwgcmV0dXJuY29kZTogJXMsIHN0ZG91dDpcbiVzJywKLSAgICAgICAgICAgICAgICAgIHJldHVybmNvZGUsIHh2ZmJfcHJvY2Vzcy5zdGRvdXQucmVhZCgpKQotICAgIHh2ZmJfcHJvY2VzcyA9IE5vbmUKLSAgcmV0dXJuIHh2ZmJfcHJvY2VzcwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9SRUFETUUuY2hyb21pdW0gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL1JFQURNRS5jaHJvbWl1bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIzMjc2MS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL1JFQURNRS5jaHJvbWl1bQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotTmFtZTogcHlfdnVsY2FuaXplCi1VUkw6IE4vQQotVmVyc2lvbjogTi9BCi0KLURlc2NyaXB0aW9uOgotUHktdnVsY2FuaXplLCBmb3JtZXJseSBrbm93biBhcyBUVkNNICh0cmFjZS12aWV3ZXIgY29tcG9uZW50IG1vZGVsKS4KLVRoaXMgY29kZSBkb2Vzbid0IGFjdHVhbGx5IGxpdmUgYW55d2hlcmUgZWxzZSBjdXJyZW50bHksIGJ1dCBpdCBtYXkKLWJlIHNwbGl0IG91dCBpbnRvIGEgc2VwYXJhdGUgcmVwb3NpdG9yeSBpbiB0aGUgZnV0dXJlLgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9iaW4vcnVuX3B5X3Rlc3RzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9iaW4vcnVuX3B5X3Rlc3RzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5MDRjMjEzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvYmluL3J1bl9weV90ZXN0cworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotX0NBVEFQVUxUID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbigKLSAgICBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBvcy5wYXRoLnBhcmRpciwgb3MucGF0aC5wYXJkaXIsIG9zLnBhdGgucGFyZGlyKSkKLQotCi1kZWYgX0FkZFRvUGF0aElmTmVlZGVkKHBhdGgpOgotICBpZiBwYXRoIG5vdCBpbiBzeXMucGF0aDoKLSAgICBzeXMucGF0aC5pbnNlcnQoMCwgcGF0aCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBfQWRkVG9QYXRoSWZOZWVkZWQoX0NBVEFQVUxUKQotCi0gIGZyb20gaG9va3MgaW1wb3J0IGluc3RhbGwKLSAgaWYgJy0tbm8taW5zdGFsbC1ob29rcycgaW4gc3lzLmFyZ3Y6Ci0gICAgc3lzLmFyZ3YucmVtb3ZlKCctLW5vLWluc3RhbGwtaG9va3MnKQotICBlbHNlOgotICAgIGluc3RhbGwuSW5zdGFsbEhvb2tzKCkKLQotICBmcm9tIGNhdGFwdWx0X2J1aWxkIGltcG9ydCBydW5fd2l0aF90eXAKLSAgc3lzLmV4aXQocnVuX3dpdGhfdHlwLlJ1bigKLSAgICAgIG9zLnBhdGguam9pbihfQ0FUQVBVTFQsICdjb21tb24nLCAncHlfdnVsY2FuaXplJykpKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvX19pbml0X18ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNhNGJkMS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlRyYWNlLXZpZXdlciBjb21wb25lbnQgbW9kZWwuCi0KLVRoaXMgbW9kdWxlIGltcGxlbWVudHMgdHJhY2Utdmlld2VyJ3MgY29tcG9uZW50IG1vZGVsLgotIiIiCi0KLWZyb20gcHlfdnVsY2FuaXplLmdlbmVyYXRlIGltcG9ydCAqICAjIHB5bGludDogZGlzYWJsZT13aWxkY2FyZC1pbXBvcnQKLWZyb20gcHlfdnVsY2FuaXplLnByb2plY3QgaW1wb3J0IFByb2plY3QKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2Zha2VfZnMucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9mYWtlX2ZzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmNiNWU2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2Zha2VfZnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgY29kZWNzCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IFN0cmluZ0lPCi0KLQotY2xhc3MgV2l0aGFibGVTdHJpbmdJTyhTdHJpbmdJTy5TdHJpbmdJTyk6Ci0KLSAgZGVmIF9fZW50ZXJfXyhzZWxmLCAqYXJncyk6Ci0gICAgcmV0dXJuIHNlbGYKLQotICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgotICAgIHBhc3MKLQotCi1jbGFzcyBGYWtlRlMob2JqZWN0KToKLQotICBkZWYgX19pbml0X18oc2VsZiwgaW5pdGlhbF9maWxlbmFtZXNfYW5kX2NvbnRlbnRzPU5vbmUpOgotICAgIHNlbGYuX2ZpbGVfY29udGVudHMgPSB7fQotICAgIGlmIGluaXRpYWxfZmlsZW5hbWVzX2FuZF9jb250ZW50czoKLSAgICAgIGZvciBrLCB2IGluIGluaXRpYWxfZmlsZW5hbWVzX2FuZF9jb250ZW50cy5pdGVyaXRlbXMoKToKLSAgICAgICAgc2VsZi5fZmlsZV9jb250ZW50c1trXSA9IHYKLQotICAgIHNlbGYuX2JvdW5kID0gRmFsc2UKLSAgICBzZWxmLl9yZWFsX2NvZGVjc19vcGVuID0gY29kZWNzLm9wZW4KLSAgICBzZWxmLl9yZWFsX29wZW4gPSBzeXMubW9kdWxlc1snX19idWlsdGluX18nXS5vcGVuCi0gICAgc2VsZi5fcmVhbF9hYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoCi0gICAgc2VsZi5fcmVhbF9leGlzdHMgPSBvcy5wYXRoLmV4aXN0cwotICAgIHNlbGYuX3JlYWxfd2FsayA9IG9zLndhbGsKLSAgICBzZWxmLl9yZWFsX2xpc3RkaXIgPSBvcy5saXN0ZGlyCi0KLSAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICBzZWxmLkJpbmQoKQotICAgIHJldHVybiBzZWxmCi0KLSAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKLSAgICBzZWxmLlVuYmluZCgpCi0KLSAgZGVmIEJpbmQoc2VsZik6Ci0gICAgYXNzZXJ0IG5vdCBzZWxmLl9ib3VuZAotICAgIGNvZGVjcy5vcGVuID0gc2VsZi5fRmFrZUNvZGVjc09wZW4KLSAgICBzeXMubW9kdWxlc1snX19idWlsdGluX18nXS5vcGVuID0gc2VsZi5fRmFrZU9wZW4KLSAgICBvcy5wYXRoLmFic3BhdGggPSBzZWxmLl9GYWtlQWJzcGF0aAotICAgIG9zLnBhdGguZXhpc3RzID0gc2VsZi5fRmFrZUV4aXN0cwotICAgIG9zLndhbGsgPSBzZWxmLl9GYWtlV2FsawotICAgIG9zLmxpc3RkaXIgPSBzZWxmLl9GYWtlTGlzdERpcgotICAgIHNlbGYuX2JvdW5kID0gVHJ1ZQotCi0gIGRlZiBVbmJpbmQoc2VsZik6Ci0gICAgYXNzZXJ0IHNlbGYuX2JvdW5kCi0gICAgY29kZWNzLm9wZW4gPSBzZWxmLl9yZWFsX2NvZGVjc19vcGVuCi0gICAgc3lzLm1vZHVsZXNbJ19fYnVpbHRpbl9fJ10ub3BlbiA9IHNlbGYuX3JlYWxfb3BlbgotICAgIG9zLnBhdGguYWJzcGF0aCA9IHNlbGYuX3JlYWxfYWJzcGF0aAotICAgIG9zLnBhdGguZXhpc3RzID0gc2VsZi5fcmVhbF9leGlzdHMKLSAgICBvcy53YWxrID0gc2VsZi5fcmVhbF93YWxrCi0gICAgb3MubGlzdGRpciA9IHNlbGYuX3JlYWxfbGlzdGRpcgotICAgIHNlbGYuX2JvdW5kID0gRmFsc2UKLQotICBkZWYgQWRkRmlsZShzZWxmLCBwYXRoLCBjb250ZW50cyk6Ci0gICAgYXNzZXJ0IHBhdGggbm90IGluIHNlbGYuX2ZpbGVfY29udGVudHMKLSAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKQotICAgIHNlbGYuX2ZpbGVfY29udGVudHNbcGF0aF0gPSBjb250ZW50cwotCi0gIGRlZiBfRmFrZU9wZW4oc2VsZiwgcGF0aCwgbW9kZT1Ob25lKToKLSAgICBpZiBtb2RlIGlzIE5vbmU6Ci0gICAgICBtb2RlID0gJ3InCi0gICAgaWYgbW9kZSA9PSAncicgb3IgbW9kZSA9PSAnclUnIG9yIG1vZGUgPT0gJ3JiJzoKLSAgICAgIGlmIHBhdGggbm90IGluIHNlbGYuX2ZpbGVfY29udGVudHM6Ci0gICAgICAgIHJldHVybiBzZWxmLl9yZWFsX29wZW4ocGF0aCwgbW9kZSkKLSAgICAgIHJldHVybiBXaXRoYWJsZVN0cmluZ0lPKHNlbGYuX2ZpbGVfY29udGVudHNbcGF0aF0pCi0KLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKLQotICBkZWYgX0Zha2VDb2RlY3NPcGVuKHNlbGYsIHBhdGgsIG1vZGU9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1Ob25lKTogICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAotICAgIGlmIG1vZGUgaXMgTm9uZToKLSAgICAgIG1vZGUgPSAncicKLSAgICBpZiBtb2RlID09ICdyJyBvciBtb2RlID09ICdyVScgb3IgbW9kZSA9PSAncmInOgotICAgICAgaWYgcGF0aCBub3QgaW4gc2VsZi5fZmlsZV9jb250ZW50czoKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfb3BlbihwYXRoLCBtb2RlKQotICAgICAgcmV0dXJuIFdpdGhhYmxlU3RyaW5nSU8oc2VsZi5fZmlsZV9jb250ZW50c1twYXRoXSkKLQotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQotCi0gIGRlZiBfRmFrZUFic3BhdGgoc2VsZiwgcGF0aCk6Ci0gICAgIiIiTm9ybWFsaXplIHRoZSBwYXRoIGFuZCBlbnN1cmUgaXQgc3RhcnRzIHdpdGggb3MucGF0aC5zZXAuCi0KLSAgICBUaGUgdGVzdHMgYWxsIGFzc3VtZSBwYXRocyBzdGFydCB3aXRoIHRoaW5ncyBsaWtlICcvbXkvcHJvamVjdCcsCi0gICAgYW5kIHRoaXMgYWJzcGF0aCBpbXBsZW1lbnRhaW9uIG1ha2VzIHRoYXQgYXNzdW1wdGlvbiB3b3JrIGNvcnJlY3RseQotICAgIG9uIFdpbmRvd3MuCi0gICAgIiIiCi0gICAgbm9ybXBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCi0gICAgaWYgbm90IG5vcm1wYXRoLnN0YXJ0c3dpdGgob3MucGF0aC5zZXApOgotICAgICAgbm9ybXBhdGggPSBvcy5wYXRoLnNlcCArIG5vcm1wYXRoCi0gICAgcmV0dXJuIG5vcm1wYXRoCi0KLSAgZGVmIF9GYWtlRXhpc3RzKHNlbGYsIHBhdGgpOgotICAgIGlmIHBhdGggaW4gc2VsZi5fZmlsZV9jb250ZW50czoKLSAgICAgIHJldHVybiBUcnVlCi0gICAgcmV0dXJuIHNlbGYuX3JlYWxfZXhpc3RzKHBhdGgpCi0KLSAgZGVmIF9GYWtlV2FsayhzZWxmLCB0b3ApOgotICAgIGFzc2VydCBvcy5wYXRoLmlzYWJzKHRvcCkKLSAgICBhbGxfZmlsZW5hbWVzID0gc2VsZi5fZmlsZV9jb250ZW50cy5rZXlzKCkKLSAgICBwZW5kaW5nX3ByZWZpeGVzID0gY29sbGVjdGlvbnMuZGVxdWUoKQotICAgIHBlbmRpbmdfcHJlZml4ZXMuYXBwZW5kKHRvcCkKLSAgICB2aXNpdGVkX3ByZWZpeGVzID0gc2V0KCkKLSAgICB3aGlsZSBsZW4ocGVuZGluZ19wcmVmaXhlcyk6Ci0gICAgICBwcmVmaXggPSBwZW5kaW5nX3ByZWZpeGVzLnBvcGxlZnQoKQotICAgICAgaWYgcHJlZml4IGluIHZpc2l0ZWRfcHJlZml4ZXM6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICB2aXNpdGVkX3ByZWZpeGVzLmFkZChwcmVmaXgpCi0gICAgICBpZiBwcmVmaXguZW5kc3dpdGgob3MucGF0aC5zZXApOgotICAgICAgICBwcmVmaXhfd2l0aF90cmFpbGluZ19zZXAgPSBwcmVmaXgKLSAgICAgIGVsc2U6Ci0gICAgICAgIHByZWZpeF93aXRoX3RyYWlsaW5nX3NlcCA9IHByZWZpeCArIG9zLnBhdGguc2VwCi0KLSAgICAgIGRpcnMgPSBzZXQoKQotICAgICAgZmlsZXMgPSBbXQotICAgICAgZm9yIGZpbGVuYW1lIGluIGFsbF9maWxlbmFtZXM6Ci0gICAgICAgIGlmIG5vdCBmaWxlbmFtZS5zdGFydHN3aXRoKHByZWZpeF93aXRoX3RyYWlsaW5nX3NlcCk6Ci0gICAgICAgICAgY29udGludWUKLSAgICAgICAgcmVsYXRpdmVfdG9fcHJlZml4ID0gb3MucGF0aC5yZWxwYXRoKGZpbGVuYW1lLCBwcmVmaXgpCi0KLSAgICAgICAgZGlycGFydCA9IG9zLnBhdGguZGlybmFtZShyZWxhdGl2ZV90b19wcmVmaXgpCi0gICAgICAgIGlmIGxlbihkaXJwYXJ0KSA9PSAwOgotICAgICAgICAgIGZpbGVzLmFwcGVuZChyZWxhdGl2ZV90b19wcmVmaXgpCi0gICAgICAgICAgY29udGludWUKLSAgICAgICAgcGFydHMgPSBkaXJwYXJ0LnNwbGl0KG9zLnNlcCkKLSAgICAgICAgaWYgbGVuKHBhcnRzKSA9PSAwOgotICAgICAgICAgIGRpcnMuYWRkKGRpcnBhcnQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcGVuZGluZyA9IG9zLnBhdGguam9pbihwcmVmaXgsIHBhcnRzWzBdKQotICAgICAgICAgIGRpcnMuYWRkKHBhcnRzWzBdKQotICAgICAgICAgIHBlbmRpbmdfcHJlZml4ZXMuYXBwZW5kbGVmdChwZW5kaW5nKQotCi0gICAgICBkaXJzID0gc29ydGVkKGRpcnMpCi0gICAgICB5aWVsZCBwcmVmaXgsIGRpcnMsIGZpbGVzCi0KLSAgZGVmIF9GYWtlTGlzdERpcihzZWxmLCBkaXJuYW1lKToKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2Zha2VfZnNfdW5pdHRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9mYWtlX2ZzX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODI1MDEzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2Zha2VfZnNfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gcHlfdnVsY2FuaXplIGltcG9ydCBmYWtlX2ZzCi0KLQotY2xhc3MgRmFrZUZTVW5pdHRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiB0ZXN0QmFzaWMoc2VsZik6Ci0gICAgZnMgPSBmYWtlX2ZzLkZha2VGUygpCi0gICAgZnMuQWRkRmlsZSgnL2JsYWgveCcsICdmb29iYXInKQotICAgIHdpdGggZnM6Ci0gICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMob3MucGF0aC5ub3JtcGF0aCgnL2JsYWgveCcpKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgJ2Zvb2JhcicsCi0gICAgICAgICAgb3Blbihvcy5wYXRoLm5vcm1wYXRoKCcvYmxhaC94JyksICdyJykucmVhZCgpKQotCi0gIGRlZiB0ZXN0V2l0aGFibGVPcGVuKHNlbGYpOgotICAgIGZzID0gZmFrZV9mcy5GYWtlRlMoKQotICAgIGZzLkFkZEZpbGUoJy9ibGFoL3gnLCAnZm9vYmFyJykKLSAgICB3aXRoIGZzOgotICAgICAgd2l0aCBvcGVuKG9zLnBhdGgubm9ybXBhdGgoJy9ibGFoL3gnKSwgJ3InKSBhcyBmOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnZm9vYmFyJywgZi5yZWFkKCkpCi0KLSAgZGVmIHRlc3RXYWxrKHNlbGYpOgotICAgIGZzID0gZmFrZV9mcy5GYWtlRlMoKQotICAgIGZzLkFkZEZpbGUoJy94L3cyL3czL3ozLnR4dCcsICcnKQotICAgIGZzLkFkZEZpbGUoJy94L3cvei50eHQnLCAnJykKLSAgICBmcy5BZGRGaWxlKCcveC95LnR4dCcsICcnKQotICAgIGZzLkFkZEZpbGUoJy9hLnR4dCcsICdmb29iYXInKQotICAgIHdpdGggZnM6Ci0gICAgICBnZW4gPSBvcy53YWxrKG9zLnBhdGgubm9ybXBhdGgoJy8nKSkKLSAgICAgIHIgPSBnZW4ubmV4dCgpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygob3MucGF0aC5ub3JtcGF0aCgnLycpLCBbJ3gnXSwgWydhLnR4dCddKSwgcikKLQotICAgICAgciA9IGdlbi5uZXh0KCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChvcy5wYXRoLm5vcm1wYXRoKCcveCcpLCBbJ3cnLCAndzInXSwgWyd5LnR4dCddKSwgcikKLQotICAgICAgciA9IGdlbi5uZXh0KCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKChvcy5wYXRoLm5vcm1wYXRoKCcveC93JyksIFtdLCBbJ3oudHh0J10pLCByKQotCi0gICAgICByID0gZ2VuLm5leHQoKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKG9zLnBhdGgubm9ybXBhdGgoJy94L3cyJyksIFsndzMnXSwgW10pLCByKQotCi0gICAgICByID0gZ2VuLm5leHQoKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKG9zLnBhdGgubm9ybXBhdGgoJy94L3cyL3czJyksIFtdLCBbJ3ozLnR4dCddKSwgcikKLQotICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgZ2VuLm5leHQpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9nZW5lcmF0ZS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2dlbmVyYXRlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzY4MzgwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2dlbmVyYXRlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IFN0cmluZ0lPCi0KLWZyb20gcHlfdnVsY2FuaXplIGltcG9ydCBodG1sX2dlbmVyYXRpb25fY29udHJvbGxlcgotCi0KLWh0bWxfd2FybmluZ19tZXNzYWdlID0gIiIiCi0KLQotPCEtLQotV0FSTklORzogVGhpcyBmaWxlIGlzIGF1dG8gZ2VuZXJhdGVkLgotCi0gICAgICAgICBEbyBub3QgZWRpdCBkaXJlY3RseS4KLS0tPgotIiIiCi0KLWpzX3dhcm5pbmdfbWVzc2FnZSA9ICIiIgotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0vKiBXQVJOSU5HOiBUaGlzIGZpbGUgaXMgYXV0byBnZW5lcmF0ZWQuCi0gKgotICogRG8gbm90IGVkaXQgZGlyZWN0bHkuCi0gKi8KLSIiIgotCi1jc3Nfd2FybmluZ19tZXNzYWdlID0gIiIiCi0vKiBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuICovCi0KLS8qIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZC4KLSAqCi0gKiBEbyBub3QgZWRpdCBkaXJlY3RseS4KLSAqLwotIiIiCi0KLQotZGVmIF9Bc3NlcnRJc1VURjgoZik6Ci0gIGlmIGlzaW5zdGFuY2UoZiwgU3RyaW5nSU8uU3RyaW5nSU8pOgotICAgIHJldHVybgotICBhc3NlcnQgZi5lbmNvZGluZyA9PSAndXRmLTgnCi0KLQotZGVmIF9NaW5pZnlKUyhpbnB1dF9qcyk6Ci0gIHB5X3Z1bGNhbml6ZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbigKLSAgICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicpKQotICByanNtaW5fcGF0aCA9IG9zLnBhdGguYWJzcGF0aCgKLSAgICAgIG9zLnBhdGguam9pbihweV92dWxjYW5pemVfcGF0aCwgJ3RoaXJkX3BhcnR5JywgJ3Jqc21pbicsICdyanNtaW4ucHknKSkKLQotICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIF86Ci0gICAgYXJncyA9IFsKLSAgICAgICAgJ3B5dGhvbicsCi0gICAgICAgIHJqc21pbl9wYXRoCi0gICAgXQotICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICByZXMgPSBwLmNvbW11bmljYXRlKGlucHV0PWlucHV0X2pzKQotICAgIGVycm9yY29kZSA9IHAud2FpdCgpCi0gICAgaWYgZXJyb3Jjb2RlICE9IDA6Ci0gICAgICBzeXMuc3RkZXJyLndyaXRlKCdySlNtaW4gZXhpdGVkIHdpdGggZXJyb3IgY29kZSAlZCcgJSBlcnJvcmNvZGUpCi0gICAgICBzeXMuc3RkZXJyLndyaXRlKHJlc1sxXSkKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIG1pbmlmeSwgb21nYWgnKQotICAgIHJldHVybiByZXNbMF0KLQotCi1kZWYgR2VuZXJhdGVKUyhsb2FkX3NlcXVlbmNlLAotICAgICAgICAgICAgICAgdXNlX2luY2x1ZGVfdGFnc19mb3Jfc2NyaXB0cz1GYWxzZSwKLSAgICAgICAgICAgICAgIGRpcl9mb3JfaW5jbHVkZV90YWdfcm9vdD1Ob25lLAotICAgICAgICAgICAgICAgbWluaWZ5PUZhbHNlLAotICAgICAgICAgICAgICAgcmVwb3J0X3NpemVzPUZhbHNlKToKLSAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLSAgR2VuZXJhdGVKU1RvRmlsZShmLAotICAgICAgICAgICAgICAgICAgIGxvYWRfc2VxdWVuY2UsCi0gICAgICAgICAgICAgICAgICAgdXNlX2luY2x1ZGVfdGFnc19mb3Jfc2NyaXB0cywKLSAgICAgICAgICAgICAgICAgICBkaXJfZm9yX2luY2x1ZGVfdGFnX3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgbWluaWZ5PW1pbmlmeSwKLSAgICAgICAgICAgICAgICAgICByZXBvcnRfc2l6ZXM9cmVwb3J0X3NpemVzKQotCi0gIHJldHVybiBmLmdldHZhbHVlKCkKLQotCi1kZWYgR2VuZXJhdGVKU1RvRmlsZShmLAotICAgICAgICAgICAgICAgICAgICAgbG9hZF9zZXF1ZW5jZSwKLSAgICAgICAgICAgICAgICAgICAgIHVzZV9pbmNsdWRlX3RhZ3NfZm9yX3NjcmlwdHM9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICBkaXJfZm9yX2luY2x1ZGVfdGFnX3Jvb3Q9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgIG1pbmlmeT1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgIHJlcG9ydF9zaXplcz1GYWxzZSk6Ci0gIF9Bc3NlcnRJc1VURjgoZikKLSAgaWYgdXNlX2luY2x1ZGVfdGFnc19mb3Jfc2NyaXB0cyBhbmQgZGlyX2Zvcl9pbmNsdWRlX3RhZ19yb290IGlzIE5vbmU6Ci0gICAgcmFpc2UgRXhjZXB0aW9uKCdNdXN0IHByb3ZpZGUgZGlyX2Zvcl9pbmNsdWRlX3RhZ19yb290JykKLQotICBmLndyaXRlKGpzX3dhcm5pbmdfbWVzc2FnZSkKLSAgZi53cml0ZSgnXG4nKQotCi0gIGlmIG5vdCBtaW5pZnk6Ci0gICAgZmxhdHRlbl90b19maWxlID0gZgotICBlbHNlOgotICAgIGZsYXR0ZW5fdG9fZmlsZSA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLQotICBmb3IgbW9kdWxlIGluIGxvYWRfc2VxdWVuY2U6Ci0gICAgbW9kdWxlLkFwcGVuZEpTQ29udGVudHNUb0ZpbGUoZmxhdHRlbl90b19maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9pbmNsdWRlX3RhZ3NfZm9yX3NjcmlwdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyX2Zvcl9pbmNsdWRlX3RhZ19yb290KQotICBpZiBtaW5pZnk6Ci0gICAganMgPSBmbGF0dGVuX3RvX2ZpbGUuZ2V0dmFsdWUoKQotICAgIG1pbmlmaWVkX2pzID0gX01pbmlmeUpTKGpzKQotICAgIGYud3JpdGUobWluaWZpZWRfanMpCi0gICAgZi53cml0ZSgnXG4nKQotCi0gIGlmIHJlcG9ydF9zaXplczoKLSAgICBmb3IgbW9kdWxlIGluIGxvYWRfc2VxdWVuY2U6Ci0gICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICAgICAgbW9kdWxlLkFwcGVuZEpTQ29udGVudHNUb0ZpbGUocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9pbmNsdWRlX3RhZ3NfZm9yX3NjcmlwdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJfZm9yX2luY2x1ZGVfdGFnX3Jvb3QpCi0KLSAgICAgICMgQWRkIG1pbmlmaWVkIHNpemUgaW5mby4KLSAgICAgIGpzID0gcy5nZXR2YWx1ZSgpCi0gICAgICBtaW5fanNfc2l6ZSA9IHN0cihsZW4oX01pbmlmeUpTKGpzKSkpCi0KLSAgICAgICMgUHJpbnQgbmFtZXMgZm9yIHRoaXMgbW9kdWxlLiBTb21lIGRvbWFpbi1zcGVjaWZpYyBzaW1wbGlmaWNhdGlvbnMKLSAgICAgICMgYXJlIGluY2x1ZGVkIHRvIG1ha2UgcGl2b3RpbmcgbW9yZSBvYnZpb3VzLgotICAgICAgcGFydHMgPSBtb2R1bGUubmFtZS5zcGxpdCgnLicpCi0gICAgICBpZiBwYXJ0c1s6Ml0gPT0gWydiYXNlJywgJ3VpJ106Ci0gICAgICAgIHBhcnRzID0gWydiYXNlX3VpJ10gKyBwYXJ0c1syOl0KLSAgICAgIGlmIHBhcnRzWzoyXSA9PSBbJ3RyYWNpbmcnLCAnaW1wb3J0ZXInXToKLSAgICAgICAgcGFydHMgPSBbJ2ltcG9ydGVyJ10gKyBwYXJ0c1syOl0KLSAgICAgIHRsbiA9IHBhcnRzWzBdCi0gICAgICBzbG4gPSAnLicuam9pbihwYXJ0c1s6Ml0pCi0KLSAgICAgICMgT3V0cHV0Ci0gICAgICBwcmludCAnJWlcdCVzXHQlc1x0JXNcdCVzJyAlIChsZW4oanMpLCBtaW5fanNfc2l6ZSwgbW9kdWxlLm5hbWUsIHRsbiwgc2xuKQotICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0KLQotY2xhc3MgRXh0cmFTY3JpcHQob2JqZWN0KToKLQotICBkZWYgX19pbml0X18oc2VsZiwgc2NyaXB0X2lkPU5vbmUsIHRleHRfY29udGVudD1Ob25lLCBjb250ZW50X3R5cGU9Tm9uZSk6Ci0gICAgaWYgc2NyaXB0X2lkIGlzIG5vdCBOb25lOgotICAgICAgYXNzZXJ0IHNjcmlwdF9pZFswXSAhPSAnIycKLSAgICBzZWxmLnNjcmlwdF9pZCA9IHNjcmlwdF9pZAotICAgIHNlbGYudGV4dF9jb250ZW50ID0gdGV4dF9jb250ZW50Ci0gICAgc2VsZi5jb250ZW50X3R5cGUgPSBjb250ZW50X3R5cGUKLQotICBkZWYgV3JpdGVUb0ZpbGUoc2VsZiwgb3V0cHV0X2ZpbGUpOgotICAgIF9Bc3NlcnRJc1VURjgob3V0cHV0X2ZpbGUpCi0gICAgYXR0cnMgPSBbXQotICAgIGlmIHNlbGYuc2NyaXB0X2lkOgotICAgICAgYXR0cnMuYXBwZW5kKCdpZD0iJXMiJyAlIHNlbGYuc2NyaXB0X2lkKQotICAgIGlmIHNlbGYuY29udGVudF90eXBlOgotICAgICAgYXR0cnMuYXBwZW5kKCdjb250ZW50LXR5cGU9IiVzIicgJSBzZWxmLmNvbnRlbnRfdHlwZSkKLQotICAgIGlmIGxlbihhdHRycykgPiAwOgotICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoJzxzY3JpcHQgJXM+XG4nICUgJyAnLmpvaW4oYXR0cnMpKQotICAgIGVsc2U6Ci0gICAgICBvdXRwdXRfZmlsZS53cml0ZSgnPHNjcmlwdD5cbicpCi0gICAgaWYgc2VsZi50ZXh0X2NvbnRlbnQ6Ci0gICAgICBvdXRwdXRfZmlsZS53cml0ZShzZWxmLnRleHRfY29udGVudCkKLSAgICBvdXRwdXRfZmlsZS53cml0ZSgnPC9zY3JpcHQ+XG4nKQotCi0KLWRlZiBfTWluaWZ5Q1NTKGNzc190ZXh0KToKLSAgcHlfdnVsY2FuaXplX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKAotICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJykpCi0gIHJjc3NtaW5fcGF0aCA9IG9zLnBhdGguYWJzcGF0aCgKLSAgICAgIG9zLnBhdGguam9pbihweV92dWxjYW5pemVfcGF0aCwgJ3RoaXJkX3BhcnR5JywgJ3Jjc3NtaW4nLCAncmNzc21pbi5weScpKQotCi0gIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgXzoKLSAgICByY3NzbWluX2FyZ3MgPSBbJ3B5dGhvbicsIHJjc3NtaW5fcGF0aF0KLSAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihyY3NzbWluX2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICByZXMgPSBwLmNvbW11bmljYXRlKGlucHV0PWNzc190ZXh0KQotICAgIGVycm9yY29kZSA9IHAud2FpdCgpCi0gICAgaWYgZXJyb3Jjb2RlICE9IDA6Ci0gICAgICBzeXMuc3RkZXJyLndyaXRlKCdyQ1NTbWluIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJWQnICUgZXJyb3Jjb2RlKQotICAgICAgc3lzLnN0ZGVyci53cml0ZShyZXNbMV0pCi0gICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBnZW5lcmF0ZSBjc3MgZm9yICVzLicgJSBjc3NfdGV4dCkKLSAgICByZXR1cm4gcmVzWzBdCi0KLQotZGVmIEdlbmVyYXRlU3RhbmRhbG9uZUhUTUxBc1N0cmluZygqYXJncywgKiprd2FyZ3MpOgotICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICBHZW5lcmF0ZVN0YW5kYWxvbmVIVE1MVG9GaWxlKGYsICphcmdzLCAqKmt3YXJncykKLSAgcmV0dXJuIGYuZ2V0dmFsdWUoKQotCi0KLWRlZiBHZW5lcmF0ZVN0YW5kYWxvbmVIVE1MVG9GaWxlKG91dHB1dF9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZF9zZXF1ZW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF0dGVuZWRfanNfdXJsPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9zY3JpcHRzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pZnk9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRfc2l6ZXM9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaHRtbF9oZWFkX2FuZF9ib2R5PVRydWUpOgotICAiIiJXcml0ZXMgYSBIVE1MIGZpbGUgd2l0aCB0aGUgY29udGVudCBvZiBhbGwgbW9kdWxlcyBpbiBhIGxvYWQgc2VxdWVuY2UuCi0KLSAgVGhlIGxvYWRfc2VxdWVuY2UgaXMgYSBsaXN0IG9mIChIVE1MIG9yIEpTKSBNb2R1bGUgb2JqZWN0czsgdGhlIG9yZGVyIHRoYXQKLSAgdGhleSdyZSBpbnNlcnRlZCBpbnRvIHRoZSBmaWxlIGRlcGVuZHMgb24gdGhlaXIgdHlwZSBhbmQgcG9zaXRpb24gaW4gdGhlIGxvYWQKLSAgc2VxdWVuY2UuCi0gICIiIgotICBfQXNzZXJ0SXNVVEY4KG91dHB1dF9maWxlKQotICBleHRyYV9zY3JpcHRzID0gZXh0cmFfc2NyaXB0cyBvciBbXQotCi0gIGlmIG91dHB1dF9odG1sX2hlYWRfYW5kX2JvZHk6Ci0gICAgb3V0cHV0X2ZpbGUud3JpdGUoCi0gICAgICAgICc8IURPQ1RZUEUgaHRtbD5cbicKLSAgICAgICAgJzxodG1sPlxuJwotICAgICAgICAnICA8aGVhZCBpMThuLXZhbHVlcz0iZGlyOnRleHRkaXJlY3Rpb247Ij5cbicKLSAgICAgICAgJyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7JwotICAgICAgICAnY2hhcnNldD11dGYtOCI+XG4nKQotICAgIGlmIHRpdGxlOgotICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoJyAgPHRpdGxlPiVzPC90aXRsZT5cbiAgJyAlIHRpdGxlKQotICBlbHNlOgotICAgIGFzc2VydCB0aXRsZSBpcyBOb25lCi0KLSAgbG9hZGVyID0gbG9hZF9zZXF1ZW5jZVswXS5sb2FkZXIKLQotICB3cml0dGVuX3N0eWxlX3NoZWV0cyA9IHNldCgpCi0KLSAgY2xhc3MgSFRNTEdlbmVyYXRpb25Db250cm9sbGVyKAotICAgICAgaHRtbF9nZW5lcmF0aW9uX2NvbnRyb2xsZXIuSFRNTEdlbmVyYXRpb25Db250cm9sbGVyKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGUpOgotICAgICAgc2VsZi5tb2R1bGUgPSBtb2R1bGUKLQotICAgIGRlZiBHZXRIVE1MRm9yU3R5bGVzaGVldEhSZWYoc2VsZiwgaHJlZik6Ci0gICAgICByZXNvdXJjZSA9IHNlbGYubW9kdWxlLkhSZWZUb1Jlc291cmNlKAotICAgICAgICAgIGhyZWYsICc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IiVzIj4nICUgaHJlZikKLSAgICAgIHN0eWxlX3NoZWV0ID0gbG9hZGVyLkxvYWRTdHlsZVNoZWV0KHJlc291cmNlLm5hbWUpCi0KLSAgICAgIGlmIHN0eWxlX3NoZWV0IGluIHdyaXR0ZW5fc3R5bGVfc2hlZXRzOgotICAgICAgICByZXR1cm4gTm9uZQotICAgICAgd3JpdHRlbl9zdHlsZV9zaGVldHMuYWRkKHN0eWxlX3NoZWV0KQotCi0gICAgICB0ZXh0ID0gc3R5bGVfc2hlZXQuY29udGVudHNfd2l0aF9pbmxpbmVkX2ltYWdlcwotICAgICAgaWYgbWluaWZ5OgotICAgICAgICB0ZXh0ID0gX01pbmlmeUNTUyh0ZXh0KQotICAgICAgcmV0dXJuICc8c3R5bGU+XG4lc1xuPC9zdHlsZT4nICUgdGV4dAotCi0gIGZvciBtb2R1bGUgaW4gbG9hZF9zZXF1ZW5jZToKLSAgICBjb250cm9sbGVyID0gSFRNTEdlbmVyYXRpb25Db250cm9sbGVyKG1vZHVsZSkKLSAgICBtb2R1bGUuQXBwZW5kSFRNTENvbnRlbnRzVG9GaWxlKG91dHB1dF9maWxlLCBjb250cm9sbGVyLCBtaW5pZnk9bWluaWZ5KQotCi0gIGlmIGZsYXR0ZW5lZF9qc191cmw6Ci0gICAgb3V0cHV0X2ZpbGUud3JpdGUoJzxzY3JpcHQgc3JjPSIlcyI+PC9zY3JpcHQ+XG4nICUgZmxhdHRlbmVkX2pzX3VybCkKLSAgZWxzZToKLSAgICBvdXRwdXRfZmlsZS53cml0ZSgnPHNjcmlwdD5cbicpCi0gICAganMgPSBHZW5lcmF0ZUpTKGxvYWRfc2VxdWVuY2UsIG1pbmlmeT1taW5pZnksIHJlcG9ydF9zaXplcz1yZXBvcnRfc2l6ZXMpCi0gICAgb3V0cHV0X2ZpbGUud3JpdGUoanMpCi0gICAgb3V0cHV0X2ZpbGUud3JpdGUoJzwvc2NyaXB0PlxuJykKLQotICBmb3IgZXh0cmFfc2NyaXB0IGluIGV4dHJhX3NjcmlwdHM6Ci0gICAgZXh0cmFfc2NyaXB0LldyaXRlVG9GaWxlKG91dHB1dF9maWxlKQotCi0gIGlmIG91dHB1dF9odG1sX2hlYWRfYW5kX2JvZHk6Ci0gICAgb3V0cHV0X2ZpbGUud3JpdGUoJzwvaGVhZD5cbiAgPGJvZHk+XG4gIDwvYm9keT5cbjwvaHRtbD5cbicpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9nZW5lcmF0ZV91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2dlbmVyYXRlX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTgzY2I0Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2dlbmVyYXRlX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IGdlbmVyYXRlCi1mcm9tIHB5X3Z1bGNhbml6ZSBpbXBvcnQgZmFrZV9mcwotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IHByb2plY3QgYXMgcHJvamVjdF9tb2R1bGUKLQotCi1jbGFzcyBHZW5lcmF0ZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5mcyA9IGZha2VfZnMuRmFrZUZTKCkKLSAgICBzZWxmLmZzLkFkZEZpbGUoCi0gICAgICAgICcveC9mb28vbXlfbW9kdWxlLmh0bWwnLAotICAgICAgICAoJzwhRE9DVFlQRSBodG1sPlxuJwotICAgICAgICAgJzxsaW5rIHJlbD0iaW1wb3J0IiBocmVmPSIvZm9vL290aGVyX21vZHVsZS5odG1sIj5cbicpKQotICAgIHNlbGYuZnMuQWRkRmlsZSgKLSAgICAgICAgJy94L2Zvby9vdGhlcl9tb2R1bGUuaHRtbCcsCi0gICAgICAgICgnPCFET0NUWVBFIGh0bWw+XG4nCi0gICAgICAgICAnPHNjcmlwdCBzcmM9Ii9mb28vcmF3L3Jhd19zY3JpcHQuanMiPjwvc2NyaXB0PlxuJwotICAgICAgICAgJzxzY3JpcHQ+XG4nCi0gICAgICAgICAnICBcJ3VzZSBzdHJpY3RcJztcbicKLSAgICAgICAgICcgIEhlbGxvV29ybGQoKTtcbicKLSAgICAgICAgICc8L3NjcmlwdD5cbicpKQotICAgIHNlbGYuZnMuQWRkRmlsZSgnL3gvZm9vL3Jhdy9yYXdfc2NyaXB0LmpzJywgJ1xuLyogcmF3IHNjcmlwdCAqL1xuJykKLSAgICBzZWxmLmZzLkFkZEZpbGUoJy94L2NvbXBvbmVudHMvcG9seW1lci9wb2x5bWVyLm1pbi5qcycsICdcbicpCi0KLSAgICBzZWxmLmZzLkFkZEZpbGUoJy94L2Zvby9leHRlcm5hbF9zY3JpcHQuanMnLCAnRXh0ZXJuYWwoKScpCi0gICAgc2VsZi5mcy5BZGRGaWxlKCcveC9mb28vaW5saW5lX2FuZF9leHRlcm5hbF9tb2R1bGUuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICgnPCFET0NUWVBFIGh0bWw+XG4nCi0gICAgICAgICAgICAgICAgICAgICc8c2NyaXB0PlNjcmlwdDEoKTwvc2NyaXB0PicKLSAgICAgICAgICAgICAgICAgICAgJzxzY3JpcHQgc3JjPS9mb28vZXh0ZXJuYWxfc2NyaXB0LmpzPjwvc2NyaXB0PicKLSAgICAgICAgICAgICAgICAgICAgJzxzY3JpcHQ+U2NyaXB0MigpPC9zY3JpcHQ+JykpCi0KLSAgICBzZWxmLnByb2plY3QgPSBwcm9qZWN0X21vZHVsZS5Qcm9qZWN0KFtvcy5wYXRoLm5vcm1wYXRoKCcveCcpXSkKLQotICBkZWYgdGVzdEpTR2VuZXJhdGlvbihzZWxmKToKLSAgICB3aXRoIHNlbGYuZnM6Ci0gICAgICBsb2FkX3NlcXVlbmNlID0gc2VsZi5wcm9qZWN0LkNhbGNMb2FkU2VxdWVuY2VGb3JNb2R1bGVOYW1lcygKLSAgICAgICAgICBbb3MucGF0aC5ub3JtcGF0aCgnZm9vLm15X21vZHVsZScpXSkKLSAgICAgIGdlbmVyYXRlLkdlbmVyYXRlSlMobG9hZF9zZXF1ZW5jZSkKLQotICBkZWYgdGVzdEhUTUxHZW5lcmF0aW9uKHNlbGYpOgotICAgIHdpdGggc2VsZi5mczoKLSAgICAgIGxvYWRfc2VxdWVuY2UgPSBzZWxmLnByb2plY3QuQ2FsY0xvYWRTZXF1ZW5jZUZvck1vZHVsZU5hbWVzKAotICAgICAgICAgIFtvcy5wYXRoLm5vcm1wYXRoKCdmb28ubXlfbW9kdWxlJyldKQotICAgICAgcmVzdWx0ID0gZ2VuZXJhdGUuR2VuZXJhdGVTdGFuZGFsb25lSFRNTEFzU3RyaW5nKGxvYWRfc2VxdWVuY2UpCi0gICAgICBzZWxmLmFzc2VydEluKCdIZWxsb1dvcmxkKCk7JywgcmVzdWx0KQotCi0gIGRlZiB0ZXN0RXh0cmFTY3JpcHRXaXRoV3JpdGVDb250ZW50c0Z1bmMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmZzOgotICAgICAgbG9hZF9zZXF1ZW5jZSA9IHNlbGYucHJvamVjdC5DYWxjTG9hZFNlcXVlbmNlRm9yTW9kdWxlTmFtZXMoCi0gICAgICAgICAgW29zLnBhdGgubm9ybXBhdGgoJ2Zvby5teV9tb2R1bGUnKV0pCi0KLSAgICAgIGNsYXNzIEV4dHJhU2NyaXB0KGdlbmVyYXRlLkV4dHJhU2NyaXB0KToKLQotICAgICAgICBkZWYgV3JpdGVUb0ZpbGUoc2VsZiwgZik6Ci0gICAgICAgICAgZi53cml0ZSgnPHNjcmlwdD5FeHRyYVNjcmlwdCE8L3NjcmlwdD4nKQotCi0gICAgICByZXN1bHQgPSBnZW5lcmF0ZS5HZW5lcmF0ZVN0YW5kYWxvbmVIVE1MQXNTdHJpbmcoCi0gICAgICAgICAgbG9hZF9zZXF1ZW5jZSwgdGl0bGU9J1RpdGxlJywgZXh0cmFfc2NyaXB0cz1bRXh0cmFTY3JpcHQoKV0pCi0gICAgICBzZWxmLmFzc2VydEluKCdFeHRyYVNjcmlwdCcsIHJlc3VsdCkKLQotICBkZWYgdGVzdFNjcmlwdE9yZGVyaW5nKHNlbGYpOgotICAgIHdpdGggc2VsZi5mczoKLSAgICAgIGxvYWRfc2VxdWVuY2UgPSBzZWxmLnByb2plY3QuQ2FsY0xvYWRTZXF1ZW5jZUZvck1vZHVsZU5hbWVzKAotICAgICAgICAgIFtvcy5wYXRoLm5vcm1wYXRoKCdmb28uaW5saW5lX2FuZF9leHRlcm5hbF9tb2R1bGUnKV0pCi0gICAgICByZXN1bHQgPSBnZW5lcmF0ZS5HZW5lcmF0ZVN0YW5kYWxvbmVIVE1MQXNTdHJpbmcobG9hZF9zZXF1ZW5jZSkKLSAgICAgIHNjcmlwdDFfcG9zID0gcmVzdWx0LmluZGV4KCdTY3JpcHQxKCknKQotICAgICAgc2NyaXB0Ml9wb3MgPSByZXN1bHQuaW5kZXgoJ1NjcmlwdDIoKScpCi0gICAgICBleHRlcm5hbF9wb3MgPSByZXN1bHQuaW5kZXgoJ0V4dGVybmFsKCknKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKHNjcmlwdDFfcG9zIDwgZXh0ZXJuYWxfcG9zIDwgc2NyaXB0Ml9wb3MpCi0KLSAgZGVmIHRlc3RTY3JpcHRPcmRlcmluZ1dpdGhJbmNsdWRlVGFnKHNlbGYpOgotICAgIHdpdGggc2VsZi5mczoKLSAgICAgIGxvYWRfc2VxdWVuY2UgPSBzZWxmLnByb2plY3QuQ2FsY0xvYWRTZXF1ZW5jZUZvck1vZHVsZU5hbWVzKAotICAgICAgICAgIFtvcy5wYXRoLm5vcm1wYXRoKCdmb28uaW5saW5lX2FuZF9leHRlcm5hbF9tb2R1bGUnKV0pCi0gICAgICByZXN1bHQgPSBnZW5lcmF0ZS5HZW5lcmF0ZUpTKGxvYWRfc2VxdWVuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9pbmNsdWRlX3RhZ3NfZm9yX3NjcmlwdHMgPSBUcnVlLAotICAgICAgZGlyX2Zvcl9pbmNsdWRlX3RhZ19yb290PScveC8nKQotICAgICAgc2NyaXB0MV9wb3MgPSByZXN1bHQuaW5kZXgoJ1NjcmlwdDEoKScpCi0gICAgICBzY3JpcHQyX3BvcyA9IHJlc3VsdC5pbmRleCgnU2NyaXB0MigpJykKLSAgICAgIGV4dGVybmFsX3BhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdleHRlcm5hbF9zY3JpcHQuanMnKQotICAgICAgZXh0ZXJuYWxfcG9zID0gcmVzdWx0LmluZGV4KCc8aW5jbHVkZSBzcmM9InswfSI+Jy5mb3JtYXQoZXh0ZXJuYWxfcGF0aCkpCi0gICAgICBzZWxmLmFzc2VydFRydWUoc2NyaXB0MV9wb3MgPCBleHRlcm5hbF9wb3MgPCBzY3JpcHQyX3BvcykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2h0bWxfZ2VuZXJhdGlvbl9jb250cm9sbGVyLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvaHRtbF9nZW5lcmF0aW9uX2NvbnRyb2xsZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MDRmZTguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvaHRtbF9nZW5lcmF0aW9uX2NvbnRyb2xsZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHJlCi1mcm9tIHB5X3Z1bGNhbml6ZSBpbXBvcnQgc3R5bGVfc2hlZXQKLQotCi1jbGFzcyBIVE1MR2VuZXJhdGlvbkNvbnRyb2xsZXIob2JqZWN0KToKLQotICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgc2VsZi5jdXJyZW50X21vZHVsZSA9IE5vbmUKLQotICBkZWYgR2V0SFRNTEZvclN0eWxlc2hlZXRIUmVmKHNlbGYsIGhyZWYpOiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci0gICAgcmV0dXJuIE5vbmUKLQotICBkZWYgR2V0SFRNTEZvcklubGluZVN0eWxlc2hlZXQoc2VsZiwgY29udGVudHMpOgotICAgIGlmIHNlbGYuY3VycmVudF9tb2R1bGUgaXMgTm9uZToKLSAgICAgIGlmIHJlLnNlYXJjaCgndXJsXCguK1wpJywgY29udGVudHMpOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oCi0gICAgICAgICAgICAnRGVmYXVsdCBIVE1MR2VuZXJhdGlvbkNvbnRyb2xsZXIgY2Fubm90IGhhbmRsZSBpbmxpbmUgc3R5bGUgdXJscycpCi0gICAgICByZXR1cm4gY29udGVudHMKLQotICAgIG1vZHVsZV9kaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKHNlbGYuY3VycmVudF9tb2R1bGUucmVzb3VyY2UuYWJzb2x1dGVfcGF0aCkKLSAgICBzcyA9IHN0eWxlX3NoZWV0LlBhcnNlZFN0eWxlU2hlZXQoCi0gICAgICAgIHNlbGYuY3VycmVudF9tb2R1bGUubG9hZGVyLCBtb2R1bGVfZGlybmFtZSwgY29udGVudHMpCi0gICAgcmV0dXJuIHNzLmNvbnRlbnRzX3dpdGhfaW5saW5lZF9pbWFnZXMKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2h0bWxfbW9kdWxlLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvaHRtbF9tb2R1bGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMWM3NTQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvaHRtbF9tb2R1bGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3MKLWltcG9ydCByZQotCi1mcm9tIHB5X3Z1bGNhbml6ZSBpbXBvcnQganNfdXRpbHMKLWZyb20gcHlfdnVsY2FuaXplIGltcG9ydCBtb2R1bGUKLWZyb20gcHlfdnVsY2FuaXplIGltcG9ydCBwYXJzZV9odG1sX2RlcHMKLWZyb20gcHlfdnVsY2FuaXplIGltcG9ydCBzdHlsZV9zaGVldAotCi0KLWRlZiBJc0hUTUxSZXNvdXJjZVRoZU1vZHVsZUdpdmVuQ29uZmxpY3RpbmdSZXNvdXJjZU5hbWVzKAotICAgIGpzX3Jlc291cmNlLCBodG1sX3Jlc291cmNlKTogICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAotICByZXR1cm4gJ3BvbHltZXItZWxlbWVudCcgaW4gaHRtbF9yZXNvdXJjZS5jb250ZW50cwotCi0KLWNsYXNzIEhUTUxNb2R1bGUobW9kdWxlLk1vZHVsZSk6Ci0KLSAgQHByb3BlcnR5Ci0gIGRlZiBfbW9kdWxlX2Rpcl9uYW1lKHNlbGYpOgotICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUoc2VsZi5yZXNvdXJjZS5hYnNvbHV0ZV9wYXRoKQotCi0gIGRlZiBQYXJzZShzZWxmLCBleGNsdWRlZF9zY3JpcHRzKToKLSAgICB0cnk6Ci0gICAgICBwYXJzZXJfcmVzdWx0cyA9IHBhcnNlX2h0bWxfZGVwcy5IVE1MTW9kdWxlUGFyc2VyKCkuUGFyc2Uoc2VsZi5jb250ZW50cykKLSAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgotICAgICAgcmFpc2UgRXhjZXB0aW9uKCdXaGlsZSBwYXJzaW5nICVzOiAlcycgJSAoc2VsZi5uYW1lLCBzdHIoZXgpKSkKLQotICAgIHNlbGYuZGVwZW5kZW5jeV9tZXRhZGF0YSA9IFBhcnNlKHNlbGYubG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tb2R1bGVfZGlyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5Jc1RoaXJkUGFydHlDb21wb25lbnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXJfcmVzdWx0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlZF9zY3JpcHRzKQotICAgIHNlbGYuX3BhcnNlcl9yZXN1bHRzID0gcGFyc2VyX3Jlc3VsdHMKLSAgICBzZWxmLnNjcmlwdHMgPSBwYXJzZXJfcmVzdWx0cy5zY3JpcHRzCi0KLSAgZGVmIExvYWQoc2VsZiwgZXhjbHVkZWRfc2NyaXB0cyk6Ci0gICAgc3VwZXIoSFRNTE1vZHVsZSwgc2VsZikuTG9hZChleGNsdWRlZF9zY3JpcHRzPWV4Y2x1ZGVkX3NjcmlwdHMpCi0KLSAgICByZWFjaGFibGVfbmFtZXMgPSBzZXQoW20ubmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG0gaW4gc2VsZi5hbGxfZGVwZW5kZW50X21vZHVsZXNfcmVjdXJzaXZlXSkKLSAgICBpZiAndHIuZXhwb3J0VG8nIGluIHNlbGYuY29udGVudHM6Ci0gICAgICBpZiAndHJhY2luZy5iYXNlLmJhc2UnIG5vdCBpbiByZWFjaGFibGVfbmFtZXM6Ci0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbignJXM6IERvZXMgbm90IGhhdmUgYSBkZXBlbmRlbmN5IG9uIGJhc2UnICUKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGgucmVscGF0aChzZWxmLnJlc291cmNlLmFic29sdXRlX3BhdGgpKQotCi0gICAgZm9yIHNjcmlwdCBpbiBzZWxmLnNjcmlwdHM6Ci0gICAgICBpZiBzY3JpcHQuaXNfZXh0ZXJuYWw6Ci0gICAgICAgIGlmIGV4Y2x1ZGVkX3NjcmlwdHMgYW5kIGFueShyZS5tYXRjaChwYXR0ZXJuLCBzY3JpcHQuc3JjKSBmb3IKLSAgICAgICAgICAgIHBhdHRlcm4gaW4gZXhjbHVkZWRfc2NyaXB0cyk6Ci0gICAgICAgICAgY29udGludWUKLQotICAgICAgICByZXNvdXJjZSA9IF9IUmVmVG9SZXNvdXJjZShzZWxmLmxvYWRlciwgc2VsZi5uYW1lLCBzZWxmLl9tb2R1bGVfZGlyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5zcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ19mb3JfZXJyX21zZz0nPHNjcmlwdCBzcmM9IiVzIj4nICUgc2NyaXB0LnNyYykKLSAgICAgICAgcGF0aCA9IHJlc291cmNlLnVuaXhfc3R5bGVfcmVsYXRpdmVfcGF0aAotICAgICAgICByYXdfc2NyaXB0ID0gc2VsZi5sb2FkZXIuTG9hZFJhd1NjcmlwdChwYXRoKQotICAgICAgICBzZWxmLmRlcGVuZGVudF9yYXdfc2NyaXB0cy5hcHBlbmQocmF3X3NjcmlwdCkKLSAgICAgICAgc2NyaXB0LmxvYWRlZF9yYXdfc2NyaXB0ID0gcmF3X3NjcmlwdAotCi0gIGRlZiBHZXRUVkNNRGVwc01vZHVsZVR5cGUoc2VsZik6Ci0gICAgcmV0dXJuICdweV92dWxjYW5pemUuSFRNTF9NT0RVTEVfVFlQRScKLQotICBkZWYgQXBwZW5kSFRNTENvbnRlbnRzVG9GaWxlKHNlbGYsIGYsIGN0bCwgbWluaWZ5PUZhbHNlKToKLSAgICBzdXBlcihIVE1MTW9kdWxlLCBzZWxmKS5BcHBlbmRIVE1MQ29udGVudHNUb0ZpbGUoZiwgY3RsKQotCi0gICAgY3RsLmN1cnJlbnRfbW9kdWxlID0gc2VsZgotICAgIHRyeToKLSAgICAgIGZvciBwaWVjZSBpbiBzZWxmLl9wYXJzZXJfcmVzdWx0cy5ZaWVsZEhUTUxJblBpZWNlcyhjdGwsIG1pbmlmeT1taW5pZnkpOgotICAgICAgICBmLndyaXRlKHBpZWNlKQotICAgIGZpbmFsbHk6Ci0gICAgICBjdGwuY3VycmVudF9tb2R1bGUgPSBOb25lCi0KLSAgZGVmIEhSZWZUb1Jlc291cmNlKHNlbGYsIGhyZWYsIHRhZ19mb3JfZXJyX21zZyk6Ci0gICAgcmV0dXJuIF9IUmVmVG9SZXNvdXJjZShzZWxmLmxvYWRlciwgc2VsZi5uYW1lLCBzZWxmLl9tb2R1bGVfZGlyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmLCB0YWdfZm9yX2Vycl9tc2cpCi0KLSAgZGVmIEFwcGVuZERpcmVjdGx5RGVwZW5kZW50RmlsZW5hbWVzVG8oCi0gICAgICBzZWxmLCBkZXBlbmRlbnRfZmlsZW5hbWVzLCBpbmNsdWRlX3Jhd19zY3JpcHRzPVRydWUpOgotICAgIHN1cGVyKEhUTUxNb2R1bGUsIHNlbGYpLkFwcGVuZERpcmVjdGx5RGVwZW5kZW50RmlsZW5hbWVzVG8oCi0gICAgICAgIGRlcGVuZGVudF9maWxlbmFtZXMsIGluY2x1ZGVfcmF3X3NjcmlwdHMpCi0gICAgZm9yIGNvbnRlbnRzIGluIHNlbGYuX3BhcnNlcl9yZXN1bHRzLmlubGluZV9zdHlsZXNoZWV0czoKLSAgICAgIG1vZHVsZV9kaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKHNlbGYucmVzb3VyY2UuYWJzb2x1dGVfcGF0aCkKLSAgICAgIHNzID0gc3R5bGVfc2hlZXQuUGFyc2VkU3R5bGVTaGVldCgKLSAgICAgICAgICBzZWxmLmxvYWRlciwgbW9kdWxlX2Rpcm5hbWUsIGNvbnRlbnRzKQotICAgICAgc3MuQXBwZW5kRGlyZWN0bHlEZXBlbmRlbnRGaWxlbmFtZXNUbyhkZXBlbmRlbnRfZmlsZW5hbWVzKQotCi1kZWYgX0hSZWZUb1Jlc291cmNlKAotICAgIGxvYWRlciwgbW9kdWxlX25hbWUsIG1vZHVsZV9kaXJfbmFtZSwgaHJlZiwgdGFnX2Zvcl9lcnJfbXNnKToKLSAgaWYgaHJlZlswXSA9PSAnLyc6Ci0gICAgcmVzb3VyY2UgPSBsb2FkZXIuRmluZFJlc291cmNlR2l2ZW5SZWxhdGl2ZVBhdGgoCi0gICAgICAgIG9zLnBhdGgubm9ybXBhdGgoaHJlZlsxOl0pKQotICBlbHNlOgotICAgIGFic3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihtb2R1bGVfZGlyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGgubm9ybXBhdGgoaHJlZikpKQotICAgIHJlc291cmNlID0gbG9hZGVyLkZpbmRSZXNvdXJjZUdpdmVuQWJzb2x1dGVQYXRoKGFic3BhdGgpCi0KLSAgaWYgbm90IHJlc291cmNlOgotICAgIHJhaXNlIG1vZHVsZS5EZXBzRXhjZXB0aW9uKAotICAgICAgICAnSW4gJXMsIHRoZSAlcyBjYW5ub3QgYmUgbG9hZGVkIGJlY2F1c2UgJwotICAgICAgICAnaXQgaXMgbm90IGluIHRoZSBzZWFyY2ggcGF0aCcgJSAobW9kdWxlX25hbWUsIHRhZ19mb3JfZXJyX21zZykpCi0gIHRyeToKLSAgICByZXNvdXJjZS5jb250ZW50cwotICBleGNlcHQ6Ci0gICAgcmFpc2UgbW9kdWxlLkRlcHNFeGNlcHRpb24oJ0luICVzLCAlcyBwb2ludHMgYXQgYSBub25leGlzdGVudCBmaWxlICcgJSAoCi0gICAgICAgIG1vZHVsZV9uYW1lLCB0YWdfZm9yX2Vycl9tc2cpKQotICByZXR1cm4gcmVzb3VyY2UKLQotCi1kZWYgUGFyc2UobG9hZGVyLCBtb2R1bGVfbmFtZSwgbW9kdWxlX2Rpcl9uYW1lLCBpc19jb21wb25lbnQsIHBhcnNlcl9yZXN1bHRzLAotICAgICAgICAgIGV4Y2x1ZGVfc2NyaXB0cz1Ob25lKToKLSAgcmVzID0gbW9kdWxlLk1vZHVsZURlcGVuZGVuY3lNZXRhZGF0YSgpCi0gIGlmIGlzX2NvbXBvbmVudDoKLSAgICByZXR1cm4gcmVzCi0KLSAgIyBFeHRlcm5hbCBzY3JpcHQgcmVmZXJlbmNlcy4KLSAgZm9yIGhyZWYgaW4gcGFyc2VyX3Jlc3VsdHMuc2NyaXB0c19leHRlcm5hbDoKLSAgICBpZiBleGNsdWRlX3NjcmlwdHMgYW5kIGFueShyZS5tYXRjaChwYXR0ZXJuLCBocmVmKSBmb3IKLSAgICAgICAgcGF0dGVybiBpbiBleGNsdWRlX3NjcmlwdHMpOgotICAgICAgY29udGludWUKLQotICAgIHJlc291cmNlID0gX0hSZWZUb1Jlc291cmNlKGxvYWRlciwgbW9kdWxlX25hbWUsIG1vZHVsZV9kaXJfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ19mb3JfZXJyX21zZz0nPHNjcmlwdCBzcmM9IiVzIj4nICUgaHJlZikKLSAgICByZXMuZGVwZW5kZW50X3Jhd19zY3JpcHRfcmVsYXRpdmVfcGF0aHMuYXBwZW5kKAotICAgICAgICByZXNvdXJjZS51bml4X3N0eWxlX3JlbGF0aXZlX3BhdGgpCi0KLSAgIyBFeHRlcm5hbCBpbXBvcnRzLiBNb3N0bHkgdGhlIHNhbWUgYXMgPHNjcmlwdD4sIGJ1dCB3ZSBrbm93IGl0cyBhIG1vZHVsZS4KLSAgZm9yIGhyZWYgaW4gcGFyc2VyX3Jlc3VsdHMuaW1wb3J0czoKLSAgICBpZiBleGNsdWRlX3NjcmlwdHMgYW5kIGFueShyZS5tYXRjaChwYXR0ZXJuLCBocmVmKSBmb3IKLSAgICAgICAgcGF0dGVybiBpbiBleGNsdWRlX3NjcmlwdHMpOgotICAgICAgY29udGludWUKLQotICAgIGlmIG5vdCBocmVmLmVuZHN3aXRoKCcuaHRtbCcpOgotICAgICAgcmFpc2UgRXhjZXB0aW9uKAotICAgICAgICAgICdJbiAlcywgdGhlIDxsaW5rIHJlbD0iaW1wb3J0IiBocmVmPSIlcyI+IG11c3QgcG9pbnQgYXQgYSAnCi0gICAgICAgICAgJ2ZpbGUgd2l0aCBhbiBodG1sIHN1ZmZpeCcgJSAobW9kdWxlX25hbWUsIGhyZWYpKQotCi0gICAgcmVzb3VyY2UgPSBfSFJlZlRvUmVzb3VyY2UoCi0gICAgICAgIGxvYWRlciwgbW9kdWxlX25hbWUsIG1vZHVsZV9kaXJfbmFtZSwgaHJlZiwKLSAgICAgICAgdGFnX2Zvcl9lcnJfbXNnPSc8bGluayByZWw9ImltcG9ydCIgaHJlZj0iJXMiPicgJSBocmVmKQotICAgIHJlcy5kZXBlbmRlbnRfbW9kdWxlX25hbWVzLmFwcGVuZChyZXNvdXJjZS5uYW1lKQotCi0gICMgU3R5bGUgc2hlZXRzLgotICBmb3IgaHJlZiBpbiBwYXJzZXJfcmVzdWx0cy5zdHlsZXNoZWV0czoKLSAgICByZXNvdXJjZSA9IF9IUmVmVG9SZXNvdXJjZSgKLSAgICAgICAgbG9hZGVyLCBtb2R1bGVfbmFtZSwgbW9kdWxlX2Rpcl9uYW1lLCBocmVmLAotICAgICAgICB0YWdfZm9yX2Vycl9tc2c9JzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iJXMiPicgJSBocmVmKQotICAgIHJlcy5zdHlsZV9zaGVldF9uYW1lcy5hcHBlbmQocmVzb3VyY2UubmFtZSkKLQotICByZXR1cm4gcmVzCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9odG1sX21vZHVsZV91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2h0bWxfbW9kdWxlX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjRhZjE2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2h0bWxfbW9kdWxlX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzIxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBTdHJpbmdJTwotCi1mcm9tIHB5X3Z1bGNhbml6ZSBpbXBvcnQgZmFrZV9mcwotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IGdlbmVyYXRlCi1mcm9tIHB5X3Z1bGNhbml6ZSBpbXBvcnQgaHRtbF9nZW5lcmF0aW9uX2NvbnRyb2xsZXIKLWZyb20gcHlfdnVsY2FuaXplIGltcG9ydCBodG1sX21vZHVsZQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IHBhcnNlX2h0bWxfZGVwcwotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IHByb2plY3QgYXMgcHJvamVjdF9tb2R1bGUKLWZyb20gcHlfdnVsY2FuaXplIGltcG9ydCByZXNvdXJjZQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IHJlc291cmNlX2xvYWRlciBhcyByZXNvdXJjZV9sb2FkZXIKLQotCi1jbGFzcyBSZXNvdXJjZVdpdGhGYWtlQ29udGVudHMocmVzb3VyY2UuUmVzb3VyY2UpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCB0b3BsZXZlbF9kaXIsIGFic29sdXRlX3BhdGgsIGZha2VfY29udGVudHMpOgotICAgICIiIkEgcmVzb3VyY2Ugd2l0aCBleHBsaWNpdGx5IHByb3ZpZGVkIGNvbnRlbnRzLgotCi0gICAgSWYgdGhlIHJlc291cmNlIGRvZXMgbm90IGV4aXN0LCB0aGVuIHBhc3MgZmFrZV9jb250ZW50cz1Ob25lLiBUaGlzIHdpbGwKLSAgICBjYXVzZSBhY2Nlc3NpbmcgdGhlIHJlc291cmNlIGNvbnRlbnRzIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiBtaW1pY2tpbmcgdGhlCi0gICAgYmVoYXZpb3Igb2YgcmVndWxhciByZXNvdXJjZXMuIiIiCi0gICAgc3VwZXIoUmVzb3VyY2VXaXRoRmFrZUNvbnRlbnRzLCBzZWxmKS5fX2luaXRfXyh0b3BsZXZlbF9kaXIsIGFic29sdXRlX3BhdGgpCi0gICAgc2VsZi5fZmFrZV9jb250ZW50cyA9IGZha2VfY29udGVudHMKLQotICBAcHJvcGVydHkKLSAgZGVmIGNvbnRlbnRzKHNlbGYpOgotICAgIGlmIHNlbGYuX2Zha2VfY29udGVudHMgaXMgTm9uZToKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmlsZSBub3QgZm91bmQnKQotICAgIHJldHVybiBzZWxmLl9mYWtlX2NvbnRlbnRzCi0KLQotY2xhc3MgRmFrZUxvYWRlcihvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2VfcGF0aHMsIGluaXRpYWxfZmlsZW5hbWVzX2FuZF9jb250ZW50cz1Ob25lKToKLSAgICBzZWxmLl9zb3VyY2VfcGF0aHMgPSBzb3VyY2VfcGF0aHMKLSAgICBzZWxmLl9maWxlX2NvbnRlbnRzID0ge30KLSAgICBpZiBpbml0aWFsX2ZpbGVuYW1lc19hbmRfY29udGVudHM6Ci0gICAgICBmb3IgaywgdiBpbiBpbml0aWFsX2ZpbGVuYW1lc19hbmRfY29udGVudHMuaXRlcml0ZW1zKCk6Ci0gICAgICAgIHNlbGYuX2ZpbGVfY29udGVudHNba10gPSB2Ci0KLSAgZGVmIEZpbmRSZXNvdXJjZUdpdmVuQWJzb2x1dGVQYXRoKHNlbGYsIGFic29sdXRlX3BhdGgpOgotICAgIGNhbmRpZGF0ZV9wYXRocyA9IFtdCi0gICAgZm9yIHNvdXJjZV9wYXRoIGluIHNlbGYuX3NvdXJjZV9wYXRoczoKLSAgICAgIGlmIGFic29sdXRlX3BhdGguc3RhcnRzd2l0aChzb3VyY2VfcGF0aCk6Ci0gICAgICAgIGNhbmRpZGF0ZV9wYXRocy5hcHBlbmQoc291cmNlX3BhdGgpCi0gICAgaWYgbGVuKGNhbmRpZGF0ZV9wYXRocykgPT0gMDoKLSAgICAgIHJldHVybiBOb25lCi0KLSAgICAjIFNvcnQgYnkgbGVuZ3RoLiBMb25nZXN0IG1hdGNoIHdpbnMuCi0gICAgY2FuZGlkYXRlX3BhdGhzLnNvcnQobGFtYmRhIHgsIHk6IGxlbih4KSAtIGxlbih5KSkKLSAgICBsb25nZXN0X2NhbmRpZGF0ZSA9IGNhbmRpZGF0ZV9wYXRoc1stMV0KLQotICAgIHJldHVybiBSZXNvdXJjZVdpdGhGYWtlQ29udGVudHMoCi0gICAgICAgIGxvbmdlc3RfY2FuZGlkYXRlLCBhYnNvbHV0ZV9wYXRoLAotICAgICAgICBzZWxmLl9maWxlX2NvbnRlbnRzLmdldChhYnNvbHV0ZV9wYXRoLCBOb25lKSkKLQotICBkZWYgRmluZFJlc291cmNlR2l2ZW5SZWxhdGl2ZVBhdGgoc2VsZiwgcmVsYXRpdmVfcGF0aCk6Ci0gICAgYWJzb2x1dGVfcGF0aCA9IE5vbmUKLSAgICBmb3Igc2NyaXB0X3BhdGggaW4gc2VsZi5fc291cmNlX3BhdGhzOgotICAgICAgYWJzb2x1dGVfcGF0aCA9IG9zLnBhdGguam9pbihzY3JpcHRfcGF0aCwgcmVsYXRpdmVfcGF0aCkKLSAgICAgIGlmIGFic29sdXRlX3BhdGggaW4gc2VsZi5fZmlsZV9jb250ZW50czoKLSAgICAgICAgcmV0dXJuIFJlc291cmNlV2l0aEZha2VDb250ZW50cyhzY3JpcHRfcGF0aCwgYWJzb2x1dGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlX2NvbnRlbnRzW2Fic29sdXRlX3BhdGhdKQotICAgIHJldHVybiBOb25lCi0KLQotY2xhc3MgUGFyc2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RWYWxpZEV4dGVybmFsU2NyaXB0UmVmZXJlbmNlVG9SYXdTY3JpcHQoc2VsZik6Ci0gICAgcGFyc2VfcmVzdWx0cyA9IHBhcnNlX2h0bWxfZGVwcy5IVE1MTW9kdWxlUGFyc2VyUmVzdWx0cygiIiI8IURPQ1RZUEUgaHRtbD4KLSAgICAgIDxzY3JpcHQgc3JjPSIuLi9mb28uanMiPgotICAgICAgIiIiKQotCi0gICAgZmlsZV9jb250ZW50cyA9IHt9Ci0gICAgZmlsZV9jb250ZW50c1tvcy5wYXRoLm5vcm1wYXRoKCcvdG1wL2EvZm9vLmpzJyldID0gIiIiCi0naSBhbSBqdXN0IHNvbWUgcmF3IHNjcmlwdCc7Ci0iIiIKLQotICAgIG1ldGFkYXRhID0gaHRtbF9tb2R1bGUuUGFyc2UoCi0gICAgICAgIEZha2VMb2FkZXIoW29zLnBhdGgubm9ybXBhdGgoJy90bXAnKV0sIGZpbGVfY29udGVudHMpLAotICAgICAgICAnYS5iLnN0YXJ0JywKLSAgICAgICAgJy90bXAvYS9iLycsCi0gICAgICAgIGlzX2NvbXBvbmVudD1GYWxzZSwKLSAgICAgICAgcGFyc2VyX3Jlc3VsdHM9cGFyc2VfcmVzdWx0cykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwgbWV0YWRhdGEuZGVwZW5kZW50X21vZHVsZV9uYW1lcykKLSAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgWydhL2Zvby5qcyddLCBtZXRhZGF0YS5kZXBlbmRlbnRfcmF3X3NjcmlwdF9yZWxhdGl2ZV9wYXRocykKLQotICBkZWYgdGVzdEV4dGVybmFsU2NyaXB0UmVmZXJlbmNlVG9Nb2R1bGVPdXRzaWRlU2NyaXB0UGF0aChzZWxmKToKLSAgICBwYXJzZV9yZXN1bHRzID0gcGFyc2VfaHRtbF9kZXBzLkhUTUxNb2R1bGVQYXJzZXJSZXN1bHRzKCIiIjwhRE9DVFlQRSBodG1sPgotICAgICAgPHNjcmlwdCBzcmM9Ii9mb28uanMiPgotICAgICAgIiIiKQotCi0gICAgZmlsZV9jb250ZW50cyA9IHt9Ci0gICAgZmlsZV9jb250ZW50c1tvcy5wYXRoLm5vcm1wYXRoKCcvZm9vLmpzJyldID0gJycKLQotICAgIGRlZiBEb0l0KCk6Ci0gICAgICBodG1sX21vZHVsZS5QYXJzZShGYWtlTG9hZGVyKFtvcy5wYXRoLm5vcm1wYXRoKCcvdG1wJyldLCBmaWxlX2NvbnRlbnRzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdhLmIuc3RhcnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgJy90bXAvYS9iLycsCi0gICAgICAgICAgICAgICAgICAgICAgICBpc19jb21wb25lbnQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXJfcmVzdWx0cz1wYXJzZV9yZXN1bHRzKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgRG9JdCkKLQotICBkZWYgdGVzdEV4dGVybmFsU2NyaXB0UmVmZXJlbmNlVG9GaWxlVGhhdERvZXNudEV4aXN0KHNlbGYpOgotICAgIHBhcnNlX3Jlc3VsdHMgPSBwYXJzZV9odG1sX2RlcHMuSFRNTE1vZHVsZVBhcnNlclJlc3VsdHMoIiIiPCFET0NUWVBFIGh0bWw+Ci0gICAgICA8c2NyaXB0IHNyYz0iL2Zvby5qcyI+Ci0gICAgICAiIiIpCi0KLSAgICBmaWxlX2NvbnRlbnRzID0ge30KLQotICAgIGRlZiBEb0l0KCk6Ci0gICAgICBodG1sX21vZHVsZS5QYXJzZShGYWtlTG9hZGVyKFtvcy5wYXRoLm5vcm1wYXRoKCcvdG1wJyldLCBmaWxlX2NvbnRlbnRzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdhLmIuc3RhcnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgJy90bXAvYS9iLycsCi0gICAgICAgICAgICAgICAgICAgICAgICBpc19jb21wb25lbnQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXJfcmVzdWx0cz1wYXJzZV9yZXN1bHRzKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgRG9JdCkKLQotICBkZWYgdGVzdFZhbGlkSW1wb3J0T2ZNb2R1bGUoc2VsZik6Ci0gICAgcGFyc2VfcmVzdWx0cyA9IHBhcnNlX2h0bWxfZGVwcy5IVE1MTW9kdWxlUGFyc2VyUmVzdWx0cygiIiI8IURPQ1RZUEUgaHRtbD4KLSAgICAgIDxsaW5rIHJlbD0iaW1wb3J0IiBocmVmPSIuLi9mb28uaHRtbCI+Ci0gICAgICAiIiIpCi0KLSAgICBmaWxlX2NvbnRlbnRzID0ge30KLSAgICBmaWxlX2NvbnRlbnRzW29zLnBhdGgubm9ybXBhdGgoJy90bXAvYS9mb28uaHRtbCcpXSA9ICIiIgotIiIiCi0KLSAgICBtZXRhZGF0YSA9IGh0bWxfbW9kdWxlLlBhcnNlKAotICAgICAgICBGYWtlTG9hZGVyKFtvcy5wYXRoLm5vcm1wYXRoKCcvdG1wJyldLCBmaWxlX2NvbnRlbnRzKSwKLSAgICAgICAgJ2EuYi5zdGFydCcsCi0gICAgICAgICcvdG1wL2EvYi8nLAotICAgICAgICBpc19jb21wb25lbnQ9RmFsc2UsCi0gICAgICAgIHBhcnNlcl9yZXN1bHRzPXBhcnNlX3Jlc3VsdHMpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoWydhLmZvbyddLCBtZXRhZGF0YS5kZXBlbmRlbnRfbW9kdWxlX25hbWVzKQotCi0gIGRlZiB0ZXN0U3R5bGVTaGVldEltcG9ydChzZWxmKToKLSAgICBwYXJzZV9yZXN1bHRzID0gcGFyc2VfaHRtbF9kZXBzLkhUTUxNb2R1bGVQYXJzZXJSZXN1bHRzKCIiIjwhRE9DVFlQRSBodG1sPgotICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mb28uY3NzIj4KLSAgICAgICIiIikKLQotICAgIGZpbGVfY29udGVudHMgPSB7fQotICAgIGZpbGVfY29udGVudHNbb3MucGF0aC5ub3JtcGF0aCgnL3RtcC9hL2Zvby5jc3MnKV0gPSAiIiIKLSIiIgotICAgIG1ldGFkYXRhID0gaHRtbF9tb2R1bGUuUGFyc2UoCi0gICAgICAgIEZha2VMb2FkZXIoW29zLnBhdGgubm9ybXBhdGgoJy90bXAnKV0sIGZpbGVfY29udGVudHMpLAotICAgICAgICAnYS5iLnN0YXJ0JywKLSAgICAgICAgJy90bXAvYS9iLycsCi0gICAgICAgIGlzX2NvbXBvbmVudD1GYWxzZSwKLSAgICAgICAgcGFyc2VyX3Jlc3VsdHM9cGFyc2VfcmVzdWx0cykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwgbWV0YWRhdGEuZGVwZW5kZW50X21vZHVsZV9uYW1lcykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbJ2EuZm9vJ10sIG1ldGFkYXRhLnN0eWxlX3NoZWV0X25hbWVzKQotCi0gIGRlZiB0ZXN0VXNpbmdBYnNvbHV0ZUhyZWYoc2VsZik6Ci0gICAgcGFyc2VfcmVzdWx0cyA9IHBhcnNlX2h0bWxfZGVwcy5IVE1MTW9kdWxlUGFyc2VyUmVzdWx0cygiIiI8IURPQ1RZUEUgaHRtbD4KLSAgICAgIDxzY3JpcHQgc3JjPSIvZm9vLmpzIj4KLSAgICAgICIiIikKLQotICAgIGZpbGVfY29udGVudHMgPSB7fQotICAgIGZpbGVfY29udGVudHNbb3MucGF0aC5ub3JtcGF0aCgnL3NyYy9mb28uanMnKV0gPSAnJwotCi0gICAgbWV0YWRhdGEgPSBodG1sX21vZHVsZS5QYXJzZSgKLSAgICAgICAgRmFrZUxvYWRlcihbb3MucGF0aC5ub3JtcGF0aCgiL3RtcCIpLCBvcy5wYXRoLm5vcm1wYXRoKCIvc3JjIildLAotICAgICAgICAgICAgICAgICAgIGZpbGVfY29udGVudHMpLAotICAgICAgICAiYS5iLnN0YXJ0IiwKLSAgICAgICAgIi90bXAvYS9iLyIsCi0gICAgICAgIGlzX2NvbXBvbmVudD1GYWxzZSwKLSAgICAgICAgcGFyc2VyX3Jlc3VsdHM9cGFyc2VfcmVzdWx0cykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbJ2Zvby5qcyddLCBtZXRhZGF0YS5kZXBlbmRlbnRfcmF3X3NjcmlwdF9yZWxhdGl2ZV9wYXRocykKLQotCi1jbGFzcyBIVE1MTW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiB0ZXN0QmFzaWNNb2R1bGVHZW5lcmF0aW9uKHNlbGYpOgotICAgIGZpbGVfY29udGVudHMgPSB7fQotICAgIGZpbGVfY29udGVudHNbb3MucGF0aC5ub3JtcGF0aCgnL3RtcC9hL2Ivc3RhcnQuaHRtbCcpXSA9ICIiIgotPCFET0NUWVBFIGh0bWw+Ci08bGluayByZWw9ImltcG9ydCIgaHJlZj0iL3dpZGdldC5odG1sIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vY29tbW9uLmNzcyI+Ci08c2NyaXB0IHNyYz0iL3Jhd19zY3JpcHQuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii9leGNsdWRlZF9zY3JpcHQuanMiPjwvc2NyaXB0PgotPGRvbS1tb2R1bGUgaWQ9InN0YXJ0Ij4KLSAgPHRlbXBsYXRlPgotICA8L3RlbXBsYXRlPgotICA8c2NyaXB0PgotICAgICd1c2Ugc3RyaWN0JzsKLSAgICBjb25zb2xlLmxvZygnaW5saW5lIHNjcmlwdCBmb3Igc3RhcnQuaHRtbCBnb3Qgd3JpdHRlbicpOwotICA8L3NjcmlwdD4KLTwvZG9tLW1vZHVsZT4KLSIiIgotICAgIGZpbGVfY29udGVudHNbb3MucGF0aC5ub3JtcGF0aCgnL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUuaHRtbCcpXSA9ICIiIjwhRE9DVFlQRSBodG1sPgotIiIiCi0gICAgZmlsZV9jb250ZW50c1tvcy5wYXRoLm5vcm1wYXRoKCcvY29tcG9uZW50cy93aWRnZXQuaHRtbCcpXSA9ICIiIgotPCFET0NUWVBFIGh0bWw+Ci08bGluayByZWw9ImltcG9ydCIgaHJlZj0iL3B5X3Z1bGNhbml6ZS5odG1sIj4KLTx3aWRnZXQgbmFtZT0id2lkZ2V0Lmh0bWwiPjwvd2lkZ2V0PgotPHNjcmlwdD4KLSd1c2Ugc3RyaWN0JzsKLWNvbnNvbGUubG9nKCdpbmxpbmUgc2NyaXB0IGZvciB3aWRnZXQuaHRtbCcpOwotPC9zY3JpcHQ+Ci0iIiIKLSAgICBmaWxlX2NvbnRlbnRzW29zLnBhdGgubm9ybXBhdGgoJy90bXAvYS9jb21tb24uY3NzJyldID0gIiIiCi0vKiAvdG1wL2EvY29tbW9uLmNzcyB3YXMgd3JpdHRlbiAqLwotIiIiCi0gICAgZmlsZV9jb250ZW50c1tvcy5wYXRoLm5vcm1wYXRoKCcvcmF3L3Jhd19zY3JpcHQuanMnKV0gPSAiIiIKLWNvbnNvbGUubG9nKCcvcmF3L3Jhd19zY3JpcHQuanMgd2FzIHdyaXR0ZW4nKTsKLSIiIgotICAgIGZpbGVfY29udGVudHNbb3MucGF0aC5ub3JtcGF0aCgKLSAgICAgICAgJy9yYXcvY29tcG9uZW50cy9wb2x5bWVyL3BvbHltZXIubWluLmpzJyldID0gIiIiCi0iIiIKLQotICAgIHdpdGggZmFrZV9mcy5GYWtlRlMoZmlsZV9jb250ZW50cyk6Ci0gICAgICBwcm9qZWN0ID0gcHJvamVjdF9tb2R1bGUuUHJvamVjdCgKLSAgICAgICAgICBbb3MucGF0aC5ub3JtcGF0aCgnL3B5X3Z1bGNhbml6ZS8nKSwKLSAgICAgICAgICAgb3MucGF0aC5ub3JtcGF0aCgnL3RtcC8nKSwKLSAgICAgICAgICAgb3MucGF0aC5ub3JtcGF0aCgnL2NvbXBvbmVudHMvJyksCi0gICAgICAgICAgIG9zLnBhdGgubm9ybXBhdGgoJy9yYXcvJyldKQotICAgICAgbG9hZGVyID0gcmVzb3VyY2VfbG9hZGVyLlJlc291cmNlTG9hZGVyKHByb2plY3QpCi0gICAgICBhX2Jfc3RhcnRfbW9kdWxlID0gbG9hZGVyLkxvYWRNb2R1bGUoCi0gICAgICAgICAgbW9kdWxlX25hbWU9J2EuYi5zdGFydCcsIGV4Y2x1ZGVkX3NjcmlwdHM9WydcL2V4Y2x1ZGVkX3NjcmlwdC5qcyddKQotICAgICAgbG9hZF9zZXF1ZW5jZSA9IHByb2plY3QuQ2FsY0xvYWRTZXF1ZW5jZUZvck1vZHVsZXMoW2FfYl9zdGFydF9tb2R1bGVdKQotCi0gICAgICAjIENoZWNrIGxvYWQgc2VxdWVuY2UgbmFtZXMuCi0gICAgICBsb2FkX3NlcXVlbmNlX25hbWVzID0gW3gubmFtZSBmb3IgeCBpbiBsb2FkX3NlcXVlbmNlXQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydweV92dWxjYW5pemUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICd3aWRnZXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdhLmIuc3RhcnQnXSwgbG9hZF9zZXF1ZW5jZV9uYW1lcykKLQotICAgICAgIyBDaGVjayBtb2R1bGVfZGVwcyBvbiBhX2Jfc3RhcnRfbW9kdWxlCi0gICAgICBkZWYgSGFzRGVwZW5kZW50TW9kdWxlKG1vZHVsZSwgbmFtZSk6Ci0gICAgICAgIHJldHVybiBbeCBmb3IgeCBpbiBtb2R1bGUuZGVwZW5kZW50X21vZHVsZXMKLSAgICAgICAgICAgICAgICBpZiB4Lm5hbWUgPT0gbmFtZV0KLSAgICAgIGFzc2VydCBIYXNEZXBlbmRlbnRNb2R1bGUoYV9iX3N0YXJ0X21vZHVsZSwgJ3dpZGdldCcpCi0KLSAgICAgICMgQ2hlY2sgSlMgZ2VuZXJhdGlvbi4KLSAgICAgIGpzID0gZ2VuZXJhdGUuR2VuZXJhdGVKUyhsb2FkX3NlcXVlbmNlKQotICAgICAgYXNzZXJ0ICdpbmxpbmUgc2NyaXB0IGZvciBzdGFydC5odG1sJyBpbiBqcwotICAgICAgYXNzZXJ0ICdpbmxpbmUgc2NyaXB0IGZvciB3aWRnZXQuaHRtbCcgaW4ganMKLSAgICAgIGFzc2VydCAnL3Jhdy9yYXdfc2NyaXB0LmpzJyBpbiBqcwotICAgICAgYXNzZXJ0ICdleGNsdWRlZF9zY3JpcHQuanMnIG5vdCBpbiBqcwotCi0gICAgICAjIENoZWNrIEhUTUwgZ2VuZXJhdGlvbi4KLSAgICAgIGh0bWwgPSBnZW5lcmF0ZS5HZW5lcmF0ZVN0YW5kYWxvbmVIVE1MQXNTdHJpbmcoCi0gICAgICAgICAgbG9hZF9zZXF1ZW5jZSwgdGl0bGU9JycsIGZsYXR0ZW5lZF9qc191cmw9Jy9ibGFoLmpzJykKLSAgICAgIGFzc2VydCAnPGRvbS1tb2R1bGUgaWQ9InN0YXJ0Ij4nIGluIGh0bWwKLSAgICAgIGFzc2VydCAnaW5saW5lIHNjcmlwdCBmb3Igd2lkZ2V0Lmh0bWwnIG5vdCBpbiBodG1sCi0gICAgICBhc3NlcnQgJ2NvbW1vbi5jc3MnIGluIGh0bWwKLQotICBkZWYgdGVzdFBvbHltZXJDb252ZXJzaW9uKHNlbGYpOgotICAgIGZpbGVfY29udGVudHMgPSB7fQotICAgIGZpbGVfY29udGVudHNbb3MucGF0aC5ub3JtcGF0aCgnL3RtcC9hL2IvbXlfY29tcG9uZW50Lmh0bWwnKV0gPSAiIiIKLTwhRE9DVFlQRSBodG1sPgotPGRvbS1tb2R1bGUgaWQ9Im15LWNvbXBvbmVudCI+Ci0gIDx0ZW1wbGF0ZT4KLSAgPC90ZW1wbGF0ZT4KLSAgPHNjcmlwdD4KLSAgICAndXNlIHN0cmljdCc7Ci0gICAgUG9seW1lciAoIHsKLSAgICAgIGlzOiAibXktY29tcG9uZW50IgotICAgIH0pOwotICA8L3NjcmlwdD4KLTwvZG9tLW1vZHVsZT4KLSIiIgotICAgIHdpdGggZmFrZV9mcy5GYWtlRlMoZmlsZV9jb250ZW50cyk6Ci0gICAgICBwcm9qZWN0ID0gcHJvamVjdF9tb2R1bGUuUHJvamVjdChbCi0gICAgICAgICAgb3MucGF0aC5ub3JtcGF0aCgnL3B5X3Z1bGNhbml6ZS8nKSwgb3MucGF0aC5ub3JtcGF0aCgnL3RtcC8nKV0pCi0gICAgICBsb2FkZXIgPSByZXNvdXJjZV9sb2FkZXIuUmVzb3VyY2VMb2FkZXIocHJvamVjdCkKLSAgICAgIG15X2NvbXBvbmVudCA9IGxvYWRlci5Mb2FkTW9kdWxlKG1vZHVsZV9uYW1lPSdhLmIubXlfY29tcG9uZW50JykKLQotICAgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLSAgICAgIG15X2NvbXBvbmVudC5BcHBlbmRKU0NvbnRlbnRzVG9GaWxlKAotICAgICAgICAgIGYsCi0gICAgICAgICAgdXNlX2luY2x1ZGVfdGFnc19mb3Jfc2NyaXB0cz1GYWxzZSwKLSAgICAgICAgICBkaXJfZm9yX2luY2x1ZGVfdGFnX3Jvb3Q9Tm9uZSkKLSAgICAgIGpzID0gZi5nZXR2YWx1ZSgpLnJzdHJpcCgpCi0gICAgICBleHBlY3RlZF9qcyA9ICIiIgotICAgICd1c2Ugc3RyaWN0JzsKLSAgICBQb2x5bWVyICggewotICAgICAgaXM6ICJteS1jb21wb25lbnQiCi0gICAgfSk7Ci0iIiIucnN0cmlwKCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkX2pzLCBqcykKLQotICBkZWYgdGVzdElubGluZVN0eWxlc2hlZXRVUkxzKHNlbGYpOgotICAgIGZpbGVfY29udGVudHMgPSB7fQotICAgIGZpbGVfY29udGVudHNbb3MucGF0aC5ub3JtcGF0aCgnL3RtcC9hL2IvbXlfY29tcG9uZW50Lmh0bWwnKV0gPSAiIiIKLTwhRE9DVFlQRSBodG1sPgotPHN0eWxlPgotLnNvbWUtcnVsZSB7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi9zb21ldGhpbmcuanBnJyk7Ci19Ci08L3N0eWxlPgotIiIiCi0gICAgZmlsZV9jb250ZW50c1tvcy5wYXRoLm5vcm1wYXRoKCcvdG1wL2Evc29tZXRoaW5nLmpwZycpXSA9ICdqcGdkYXRhJwotICAgIHdpdGggZmFrZV9mcy5GYWtlRlMoZmlsZV9jb250ZW50cyk6Ci0gICAgICBwcm9qZWN0ID0gcHJvamVjdF9tb2R1bGUuUHJvamVjdChbCi0gICAgICAgICAgb3MucGF0aC5ub3JtcGF0aCgnL3B5X3Z1bGNhbml6ZS8nKSwgb3MucGF0aC5ub3JtcGF0aCgnL3RtcC8nKV0pCi0gICAgICBsb2FkZXIgPSByZXNvdXJjZV9sb2FkZXIuUmVzb3VyY2VMb2FkZXIocHJvamVjdCkKLSAgICAgIG15X2NvbXBvbmVudCA9IGxvYWRlci5Mb2FkTW9kdWxlKG1vZHVsZV9uYW1lPSdhLmIubXlfY29tcG9uZW50JykKLQotICAgICAgY29tcHV0ZWRfZGVwcyA9IFtdCi0gICAgICBteV9jb21wb25lbnQuQXBwZW5kRGlyZWN0bHlEZXBlbmRlbnRGaWxlbmFtZXNUbyhjb21wdXRlZF9kZXBzKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2V0KGNvbXB1dGVkX2RlcHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFtvcy5wYXRoLm5vcm1wYXRoKCcvdG1wL2EvYi9teV9jb21wb25lbnQuaHRtbCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLm5vcm1wYXRoKCcvdG1wL2Evc29tZXRoaW5nLmpwZycpXSkpCi0KLSAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygpCi0gICAgICBjdGwgPSBodG1sX2dlbmVyYXRpb25fY29udHJvbGxlci5IVE1MR2VuZXJhdGlvbkNvbnRyb2xsZXIoKQotICAgICAgbXlfY29tcG9uZW50LkFwcGVuZEhUTUxDb250ZW50c1RvRmlsZShmLCBjdGwpCi0gICAgICBodG1sID0gZi5nZXR2YWx1ZSgpLnJzdHJpcCgpCi0gICAgICAjIEZJWE1FOiBUaGlzIGlzIGFwcGFyZW50bHkgbm90IHVzZWQuCi0gICAgICBleHBlY3RlZF9odG1sID0gIiIiCi0uc29tZS1ydWxlIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9qcGc7YmFzZTY0LGFuQm5aR0YwWVE9PSk7Ci19Ci0iIiIucnN0cmlwKCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2pzX3V0aWxzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvanNfdXRpbHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlNmNhOWQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvanNfdXRpbHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotCi1kZWYgRXNjYXBlSlNJZk5lZWRlZChqcyk6Ci0gIHJldHVybiBqcy5yZXBsYWNlKCc8L3NjcmlwdD4nLCAnPFwvc2NyaXB0PicpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9qc191dGlsc191bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2pzX3V0aWxzX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjgwMjVjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL2pzX3V0aWxzX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IGpzX3V0aWxzCi0KLQotY2xhc3MgVmFsaWRhdGVTdHJpY3RNb2RlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiB0ZXN0RXNjYXBlSlNJZk5lZWRlZChzZWxmKToKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAnPHNjcmlwdD52YXIgZm9vOzxcL3NjcmlwdD4nLAotICAgICAgICBqc191dGlscy5Fc2NhcGVKU0lmTmVlZGVkKCc8c2NyaXB0PnZhciBmb287PC9zY3JpcHQ+JykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgJzxzY3JpcHQ+dmFyIGZvbzs8XC9zY3JpcHQ+JywKLSAgICAgICAganNfdXRpbHMuRXNjYXBlSlNJZk5lZWRlZCgnPHNjcmlwdD52YXIgZm9vOzxcL3NjcmlwdD4nKSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL21vZHVsZS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL21vZHVsZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ2YTY4Zi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9tb2R1bGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNjIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgTW9kdWxlIGNsYXNzIGFuZCBvdGhlciBjbGFzc2VzIGZvciByZXNvdXJjZXMuCi0KLVRoZSBNb2R1bGUgY2xhc3MgcmVwcmVzZW50cyBhIG1vZHVsZSBpbiB0aGUgdHJhY2Ugdmlld2VyIHN5c3RlbS4gQSBtb2R1bGUgaGFzCi1hIG5hbWUsIGFuZCBtYXkgcmVxdWlyZSBhIHZhcmlldHkgb2Ygb3RoZXIgcmVzb3VyY2VzLCBzdWNoIGFzIHN0eWxlc2hlZXRzLAotdGVtcGxhdGUgb2JqZWN0cywgcmF3IEphdmFTY3JpcHQsIG9yIG90aGVyIG1vZHVsZXMuCi0KLU90aGVyIHJlc291cmNlcyBpbmNsdWRlIEhUTUwgdGVtcGxhdGVzLCByYXcgSmF2YVNjcmlwdCBmaWxlcywgYW5kIHN0eWxlc2hlZXRzLgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IGluc3BlY3QKLWltcG9ydCBjb2RlY3MKLQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IGpzX3V0aWxzCi0KLQotY2xhc3MgRGVwc0V4Y2VwdGlvbihFeGNlcHRpb24pOgotICAiIiJFeGNlcHRpb25zIHJlbGF0ZWQgdG8gbW9kdWxlIGRlcGVuZGVuY3kgcmVzb2x1dGlvbi4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgZm10LCAqYXJncyk6Ci0gICAgZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IHN0eWxlX3NoZWV0IGFzIHN0eWxlX3NoZWV0X21vZHVsZQotICAgIGNvbnRleHQgPSBbXQotICAgIGZyYW1lID0gaW5zcGVjdC5jdXJyZW50ZnJhbWUoKQotICAgIHdoaWxlIGZyYW1lOgotICAgICAgZnJhbWVfbG9jYWxzID0gZnJhbWUuZl9sb2NhbHMKLQotICAgICAgbW9kdWxlX25hbWUgPSBOb25lCi0gICAgICBpZiAnc2VsZicgaW4gZnJhbWVfbG9jYWxzOgotICAgICAgICBzID0gZnJhbWVfbG9jYWxzWydzZWxmJ10KLSAgICAgICAgaWYgaXNpbnN0YW5jZShzLCBNb2R1bGUpOgotICAgICAgICAgIG1vZHVsZV9uYW1lID0gcy5uYW1lCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uocywgc3R5bGVfc2hlZXRfbW9kdWxlLlN0eWxlU2hlZXQpOgotICAgICAgICAgIG1vZHVsZV9uYW1lID0gcy5uYW1lICsgJy5jc3MnCi0gICAgICBpZiBub3QgbW9kdWxlX25hbWU6Ci0gICAgICAgIGlmICdtb2R1bGUnIGluIGZyYW1lX2xvY2FsczoKLSAgICAgICAgICBtb2R1bGUgPSBmcmFtZV9sb2NhbHNbJ21vZHVsZSddCi0gICAgICAgICAgaWYgaXNpbnN0YW5jZShzLCBNb2R1bGUpOgotICAgICAgICAgICAgbW9kdWxlX25hbWUgPSBtb2R1bGUubmFtZQotICAgICAgICBlbGlmICdtJyBpbiBmcmFtZV9sb2NhbHM6Ci0gICAgICAgICAgbW9kdWxlID0gZnJhbWVfbG9jYWxzWydtJ10KLSAgICAgICAgICBpZiBpc2luc3RhbmNlKHMsIE1vZHVsZSk6Ci0gICAgICAgICAgICBtb2R1bGVfbmFtZSA9IG1vZHVsZS5uYW1lCi0KLSAgICAgIGlmIG1vZHVsZV9uYW1lOgotICAgICAgICBpZiBsZW4oY29udGV4dCk6Ci0gICAgICAgICAgaWYgY29udGV4dFstMV0gIT0gbW9kdWxlX25hbWU6Ci0gICAgICAgICAgICBjb250ZXh0LmFwcGVuZChtb2R1bGVfbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICBjb250ZXh0LmFwcGVuZChtb2R1bGVfbmFtZSkKLQotICAgICAgZnJhbWUgPSBmcmFtZS5mX2JhY2sKLQotICAgIGNvbnRleHQucmV2ZXJzZSgpCi0gICAgc2VsZi5jb250ZXh0ID0gY29udGV4dAotICAgIGNvbnRleHRfc3RyID0gJ1xuJy5qb2luKCcgICVzJyAlIHggZm9yIHggaW4gY29udGV4dCkKLSAgICBFeGNlcHRpb24uX19pbml0X18oCi0gICAgICAgIHNlbGYsICdXaGlsZSBsb2FkaW5nOlxuJXNcbkdvdDogJXMnICUgKGNvbnRleHRfc3RyLCAoZm10ICUgYXJncykpKQotCi0KLWNsYXNzIE1vZHVsZURlcGVuZGVuY3lNZXRhZGF0YShvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICBzZWxmLmRlcGVuZGVudF9tb2R1bGVfbmFtZXMgPSBbXQotICAgIHNlbGYuZGVwZW5kZW50X3Jhd19zY3JpcHRfcmVsYXRpdmVfcGF0aHMgPSBbXQotICAgIHNlbGYuc3R5bGVfc2hlZXRfbmFtZXMgPSBbXQotCi0gIGRlZiBBcHBlbmRNZXRkYXRhKHNlbGYsIG90aGVyKToKLSAgICBzZWxmLmRlcGVuZGVudF9tb2R1bGVfbmFtZXMgKz0gb3RoZXIuZGVwZW5kZW50X21vZHVsZV9uYW1lcwotICAgIHNlbGYuZGVwZW5kZW50X3Jhd19zY3JpcHRfcmVsYXRpdmVfcGF0aHMgKz0gXAotICAgICAgICBvdGhlci5kZXBlbmRlbnRfcmF3X3NjcmlwdF9yZWxhdGl2ZV9wYXRocwotICAgIHNlbGYuc3R5bGVfc2hlZXRfbmFtZXMgKz0gb3RoZXIuc3R5bGVfc2hlZXRfbmFtZXMKLQotCi1fbmV4dF9tb2R1bGVfaWQgPSAxCi0KLQotY2xhc3MgTW9kdWxlKG9iamVjdCk6Ci0gICIiIlJlcHJlc2VudHMgYSBKYXZhU2NyaXB0IG1vZHVsZS4KLQotICBJbnRlcmVzdGluZyBwcm9wZXJ0aWVzIGluY2x1ZGU6Ci0gICAgbmFtZTogTW9kdWxlIG5hbWUsIG1heSBpbmNsdWRlIGEgbmFtZXNwYWNlLCBlLmcuICdweV92dWxjYW5pemUuZm9vJy4KLSAgICBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBhY3R1YWwgbW9kdWxlLgotICAgIGNvbnRlbnRzOiBUaGUgdGV4dCBjb250ZW50cyBvZiB0aGUgbW9kdWxlLgotICAgIGRlcGVuZGVudF9tb2R1bGVzOiBPdGhlciBtb2R1bGVzIHRoYXQgdGhpcyBtb2R1bGUgZGVwZW5kcyBvbi4KLQotICBJbiBhZGRpdGlvbiB0byB0aGVzZSBwcm9wZXJ0aWVzLCBhIE1vZHVsZSBhbHNvIGNvbnRhaW5zIGxpc3RzIG9mIG90aGVyCi0gIHJlc291cmNlcyB0aGF0IGl0IGRlcGVuZHMgb24uCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBsb2FkZXIsIG5hbWUsIHJlc291cmNlLCBsb2FkX3Jlc291cmNlPVRydWUpOgotICAgIGFzc2VydCBpc2luc3RhbmNlKG5hbWUsIGJhc2VzdHJpbmcpLCAnR290ICVzIGluc3RlYWQnICUgcmVwcihuYW1lKQotCi0gICAgZ2xvYmFsIF9uZXh0X21vZHVsZV9pZAotICAgIHNlbGYuX2lkID0gX25leHRfbW9kdWxlX2lkCi0gICAgX25leHRfbW9kdWxlX2lkICs9IDEKLQotICAgIHNlbGYubG9hZGVyID0gbG9hZGVyCi0gICAgc2VsZi5uYW1lID0gbmFtZQotICAgIHNlbGYucmVzb3VyY2UgPSByZXNvdXJjZQotCi0gICAgaWYgbG9hZF9yZXNvdXJjZToKLSAgICAgIGYgPSBjb2RlY3Mub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlPSdyJywgZW5jb2Rpbmc9J3V0Zi04JykKLSAgICAgIHNlbGYuY29udGVudHMgPSBmLnJlYWQoKQotICAgICAgZi5jbG9zZSgpCi0gICAgZWxzZToKLSAgICAgIHNlbGYuY29udGVudHMgPSBOb25lCi0KLSAgICAjIERlcGVuZGVuY3kgbWV0YWRhdGEsIHNldCB1cCBkdXJpbmcgUGFyc2UoKS4KLSAgICBzZWxmLmRlcGVuZGVuY3lfbWV0YWRhdGEgPSBOb25lCi0KLSAgICAjIEFjdHVhbCBkZXBlbmRlbmNpZXMsIHNldCB1cCBkdXJpbmcgbG9hZCgpLgotICAgIHNlbGYuZGVwZW5kZW50X21vZHVsZXMgPSBbXQotICAgIHNlbGYuZGVwZW5kZW50X3Jhd19zY3JpcHRzID0gW10KLSAgICBzZWxmLnNjcmlwdHMgPSBbXQotICAgIHNlbGYuc3R5bGVfc2hlZXRzID0gW10KLQotICAgICMgQ2FjaGVzLgotICAgIHNlbGYuX2FsbF9kZXBlbmRlbnRfbW9kdWxlc19yZWN1cnNpdmUgPSBOb25lCi0KLSAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgIHJldHVybiAnJXMoJXMpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5uYW1lKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgaWQoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX2lkCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBmaWxlbmFtZShzZWxmKToKLSAgICByZXR1cm4gc2VsZi5yZXNvdXJjZS5hYnNvbHV0ZV9wYXRoCi0KLSAgZGVmIElzVGhpcmRQYXJ0eUNvbXBvbmVudChzZWxmKToKLSAgICAiIiJDaGVja3Mgd2hldGhlciB0aGlzIG1vZHVsZSBpcyBhIHRoaXJkLXBhcnR5IFBvbHltZXIgY29tcG9uZW50LiIiIgotICAgIGlmIG9zLnBhdGguam9pbigndGhpcmRfcGFydHknLCAnY29tcG9uZW50cycpIGluIHNlbGYuZmlsZW5hbWU6Ci0gICAgICByZXR1cm4gVHJ1ZQotICAgIGlmIG9zLnBhdGguam9pbigndGhpcmRfcGFydHknLCAncG9seW1lcicsICdjb21wb25lbnRzJykgaW4gc2VsZi5maWxlbmFtZToKLSAgICAgIHJldHVybiBUcnVlCi0gICAgcmV0dXJuIEZhbHNlCi0KLSAgZGVmIFBhcnNlKHNlbGYsIGV4Y2x1ZGVkX3NjcmlwdHMpOgotICAgICIiIlBhcnNlcyBzZWxmLmNvbnRlbnRzIGFuZCBmaWxscyBpbiB0aGUgbW9kdWxlJ3MgZGVwZW5kZW5jeSBtZXRhZGF0YS4iIiIKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKLQotICBkZWYgR2V0VFZDTURlcHNNb2R1bGVUeXBlKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIHB5X3Z1bGNhbml6ZS5zZXRNb2R1bGVJbmZvIHR5cGUgZm9yIHRoaXMgbW9kdWxlIiIiCi0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLSAgZGVmIEFwcGVuZEpTQ29udGVudHNUb0ZpbGUoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2luY2x1ZGVfdGFnc19mb3Jfc2NyaXB0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyX2Zvcl9pbmNsdWRlX3RhZ19yb290KToKLSAgICAiIiJBcHBlbmRzIHRoZSBqcyBmb3IgdGhpcyBtb2R1bGUgdG8gdGhlIHByb3ZpZGVkIGZpbGUuIiIiCi0gICAgZm9yIHNjcmlwdCBpbiBzZWxmLnNjcmlwdHM6Ci0gICAgICBzY3JpcHQuQXBwZW5kSlNDb250ZW50c1RvRmlsZShmLCB1c2VfaW5jbHVkZV90YWdzX2Zvcl9zY3JpcHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyX2Zvcl9pbmNsdWRlX3RhZ19yb290KQotCi0gIGRlZiBBcHBlbmRIVE1MQ29udGVudHNUb0ZpbGUoc2VsZiwgZiwgY3RsLCBtaW5pZnk9RmFsc2UpOgotICAgICIiIkFwcGVuZHMgdGhlIEhUTUwgZm9yIHRoaXMgbW9kdWxlIFt3aXRob3V0IGxpbmtzXSB0byB0aGUgcHJvdmlkZWQgZmlsZS4iIiIKLSAgICBwYXNzCi0KLSAgZGVmIExvYWQoc2VsZiwgZXhjbHVkZWRfc2NyaXB0cz1Ob25lKToKLSAgICAiIiJMb2FkcyB0aGUgc3ViLXJlc291cmNlcyB0aGF0IHRoaXMgbW9kdWxlIGRlcGVuZHMgb24gZnJvbSBpdHMgZGVwZW5kZW5jeQotICAgIG1ldGFkYXRhLgotCi0gICAgUmFpc2VzOgotICAgICAgRGVwc0V4Y2VwdGlvbjogVGhlcmUgd2FzIGEgcHJvYmxlbSBmaW5kaW5nIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzLgotICAgICAgRXhjZXB0aW9uOiBUaGVyZSB3YXMgYSBwcm9ibGVtIHBhcnNpbmcgYSBtb2R1bGUgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIG9uLgotICAgICIiIgotICAgIGFzc2VydCBzZWxmLm5hbWUsICdNb2R1bGUgbmFtZSBtdXN0IGJlIHNldCBiZWZvcmUgZGVwIHJlc29sdXRpb24uJwotICAgIGFzc2VydCBzZWxmLmZpbGVuYW1lLCAnTW9kdWxlIGZpbGVuYW1lIG11c3QgYmUgc2V0IGJlZm9yZSBkZXAgcmVzb2x1dGlvbi4nCi0gICAgYXNzZXJ0IHNlbGYubmFtZSBpbiBzZWxmLmxvYWRlci5sb2FkZWRfbW9kdWxlcywgKAotICAgICAgICAnTW9kdWxlIG11c3QgYmUgcmVnaXN0ZXJlZCBpbiByZXNvdXJjZSBsb2FkZXIgYmVmb3JlIGxvYWRpbmcuJykKLQotICAgIG1ldGFkYXRhID0gc2VsZi5kZXBlbmRlbmN5X21ldGFkYXRhCi0gICAgZm9yIG5hbWUgaW4gbWV0YWRhdGEuZGVwZW5kZW50X21vZHVsZV9uYW1lczoKLSAgICAgIG1vZHVsZSA9IHNlbGYubG9hZGVyLkxvYWRNb2R1bGUobW9kdWxlX25hbWU9bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZWRfc2NyaXB0cz1leGNsdWRlZF9zY3JpcHRzKQotICAgICAgc2VsZi5kZXBlbmRlbnRfbW9kdWxlcy5hcHBlbmQobW9kdWxlKQotCi0gICAgZm9yIG5hbWUgaW4gbWV0YWRhdGEuc3R5bGVfc2hlZXRfbmFtZXM6Ci0gICAgICBzdHlsZV9zaGVldCA9IHNlbGYubG9hZGVyLkxvYWRTdHlsZVNoZWV0KG5hbWUpCi0gICAgICBzZWxmLnN0eWxlX3NoZWV0cy5hcHBlbmQoc3R5bGVfc2hlZXQpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBhbGxfZGVwZW5kZW50X21vZHVsZXNfcmVjdXJzaXZlKHNlbGYpOgotICAgIGlmIHNlbGYuX2FsbF9kZXBlbmRlbnRfbW9kdWxlc19yZWN1cnNpdmU6Ci0gICAgICByZXR1cm4gc2VsZi5fYWxsX2RlcGVuZGVudF9tb2R1bGVzX3JlY3Vyc2l2ZQotCi0gICAgc2VsZi5fYWxsX2RlcGVuZGVudF9tb2R1bGVzX3JlY3Vyc2l2ZSA9IHNldChzZWxmLmRlcGVuZGVudF9tb2R1bGVzKQotICAgIGZvciBkZXBlbmRlbnRfbW9kdWxlIGluIHNlbGYuZGVwZW5kZW50X21vZHVsZXM6Ci0gICAgICBzZWxmLl9hbGxfZGVwZW5kZW50X21vZHVsZXNfcmVjdXJzaXZlLnVwZGF0ZSgKLSAgICAgICAgICBkZXBlbmRlbnRfbW9kdWxlLmFsbF9kZXBlbmRlbnRfbW9kdWxlc19yZWN1cnNpdmUpCi0gICAgcmV0dXJuIHNlbGYuX2FsbF9kZXBlbmRlbnRfbW9kdWxlc19yZWN1cnNpdmUKLQotICBkZWYgQ29tcHV0ZUxvYWRTZXF1ZW5jZVJlY3Vyc2l2ZShzZWxmLCBsb2FkX3NlcXVlbmNlLCBhbHJlYWR5X2xvYWRlZF9zZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoPTApOgotICAgICIiIlJlY3Vyc2l2ZWx5IGJ1aWxkcyB1cCBhIGxvYWQgc2VxdWVuY2UgbGlzdC4KLQotICAgIEFyZ3M6Ci0gICAgICBsb2FkX3NlcXVlbmNlOiBBIGxpc3Qgd2hpY2ggd2lsbCBiZSBpbmNyZW1lbnRhbGx5IGJ1aWx0IHVwLgotICAgICAgYWxyZWFkeV9sb2FkZWRfc2V0OiBBIHNldCBvZiBtb2R1bGVzIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUKLSAgICAgICAgICBsb2FkIHNlcXVlbmNlIGxpc3QuCi0gICAgICBkZXB0aDogVGhlIGRlcHRoIG9mIHJlY3Vyc2lvbi4gSWYgaXQgdG9vIGRlZXAsIHRoYXQgaW5kaWNhdGVzIGEgbG9vcC4KLSAgICAiIiIKLSAgICBpZiBkZXB0aCA+IDMyOgotICAgICAgcmFpc2UgRXhjZXB0aW9uKCdJbmNsdWRlIGxvb3AgZGV0ZWN0ZWQgb24gJXMnLCBzZWxmLm5hbWUpCi0gICAgZm9yIGRlcGVuZGVudF9tb2R1bGUgaW4gc2VsZi5kZXBlbmRlbnRfbW9kdWxlczoKLSAgICAgIGlmIGRlcGVuZGVudF9tb2R1bGUubmFtZSBpbiBhbHJlYWR5X2xvYWRlZF9zZXQ6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICBkZXBlbmRlbnRfbW9kdWxlLkNvbXB1dGVMb2FkU2VxdWVuY2VSZWN1cnNpdmUoCi0gICAgICAgICAgbG9hZF9zZXF1ZW5jZSwgYWxyZWFkeV9sb2FkZWRfc2V0LCBkZXB0aCArIDEpCi0gICAgaWYgc2VsZi5uYW1lIG5vdCBpbiBhbHJlYWR5X2xvYWRlZF9zZXQ6Ci0gICAgICBhbHJlYWR5X2xvYWRlZF9zZXQuYWRkKHNlbGYubmFtZSkKLSAgICAgIGxvYWRfc2VxdWVuY2UuYXBwZW5kKHNlbGYpCi0KLSAgZGVmIEdldEFsbERlcGVuZGVudEZpbGVuYW1lc1JlY3Vyc2l2ZShzZWxmLCBpbmNsdWRlX3Jhd19zY3JpcHRzPVRydWUpOgotICAgIGRlcGVuZGVudF9maWxlbmFtZXMgPSBbXQotCi0gICAgdmlzaXRlZF9tb2R1bGVzID0gc2V0KCkKLQotICAgIGRlZiBHZXQobW9kdWxlKToKLSAgICAgIG1vZHVsZS5BcHBlbmREaXJlY3RseURlcGVuZGVudEZpbGVuYW1lc1RvKAotICAgICAgICAgIGRlcGVuZGVudF9maWxlbmFtZXMsIGluY2x1ZGVfcmF3X3NjcmlwdHMpCi0gICAgICB2aXNpdGVkX21vZHVsZXMuYWRkKG1vZHVsZSkKLSAgICAgIGZvciBtIGluIG1vZHVsZS5kZXBlbmRlbnRfbW9kdWxlczoKLSAgICAgICAgaWYgbSBpbiB2aXNpdGVkX21vZHVsZXM6Ci0gICAgICAgICAgY29udGludWUKLSAgICAgICAgR2V0KG0pCi0KLSAgICBHZXQoc2VsZikKLSAgICByZXR1cm4gZGVwZW5kZW50X2ZpbGVuYW1lcwotCi0gIGRlZiBBcHBlbmREaXJlY3RseURlcGVuZGVudEZpbGVuYW1lc1RvKAotICAgICAgc2VsZiwgZGVwZW5kZW50X2ZpbGVuYW1lcywgaW5jbHVkZV9yYXdfc2NyaXB0cz1UcnVlKToKLSAgICBkZXBlbmRlbnRfZmlsZW5hbWVzLmFwcGVuZChzZWxmLnJlc291cmNlLmFic29sdXRlX3BhdGgpCi0gICAgaWYgaW5jbHVkZV9yYXdfc2NyaXB0czoKLSAgICAgIGZvciByYXdfc2NyaXB0IGluIHNlbGYuZGVwZW5kZW50X3Jhd19zY3JpcHRzOgotICAgICAgICBkZXBlbmRlbnRfZmlsZW5hbWVzLmFwcGVuZChyYXdfc2NyaXB0LnJlc291cmNlLmFic29sdXRlX3BhdGgpCi0gICAgZm9yIHN0eWxlX3NoZWV0IGluIHNlbGYuc3R5bGVfc2hlZXRzOgotICAgICAgc3R5bGVfc2hlZXQuQXBwZW5kRGlyZWN0bHlEZXBlbmRlbnRGaWxlbmFtZXNUbyhkZXBlbmRlbnRfZmlsZW5hbWVzKQotCi0KLWNsYXNzIFJhd1NjcmlwdChvYmplY3QpOgotICAiIiJSZXByZXNlbnRzIGEgcmF3IHNjcmlwdCByZXNvdXJjZSByZWZlcmVuY2VkIGJ5IGEgbW9kdWxlIHZpYSB0aGUKLSAgcHlfdnVsY2FuaXplLnJlcXVpcmVSYXdTY3JpcHQoeHh4KSBkaXJlY3RpdmUuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc291cmNlKToKLSAgICBzZWxmLnJlc291cmNlID0gcmVzb3VyY2UKLQotICBAcHJvcGVydHkKLSAgZGVmIGZpbGVuYW1lKHNlbGYpOgotICAgIHJldHVybiBzZWxmLnJlc291cmNlLmFic29sdXRlX3BhdGgKLQotICBAcHJvcGVydHkKLSAgZGVmIGNvbnRlbnRzKHNlbGYpOgotICAgIHJldHVybiBzZWxmLnJlc291cmNlLmNvbnRlbnRzCi0KLSAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgIHJldHVybiAnUmF3U2NyaXB0KCVzKScgJSBzZWxmLmZpbGVuYW1lCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9tb2R1bGVfdW5pdHRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9tb2R1bGVfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkOTJkYjMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvbW9kdWxlX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJUZXN0cyBmb3IgdGhlIG1vZHVsZSBtb2R1bGUsIHdoaWNoIGNvbnRhaW5zIE1vZHVsZSBhbmQgcmVsYXRlZCBjbGFzc2VzLiIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHB5X3Z1bGNhbml6ZSBpbXBvcnQgZmFrZV9mcwotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IG1vZHVsZQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IHJlc291cmNlX2xvYWRlcgotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IHByb2plY3QgYXMgcHJvamVjdF9tb2R1bGUKLQotCi1jbGFzcyBNb2R1bGVJbnRlZ3JhdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6Ci0gICAgZnMgPSBmYWtlX2ZzLkZha2VGUygpCi0gICAgZnMuQWRkRmlsZSgnL3NyYy94Lmh0bWwnLCAiIiIKLTwhRE9DVFlQRSBodG1sPgotPGxpbmsgcmVsPSJpbXBvcnQiIGhyZWY9Ii95Lmh0bWwiPgotPGxpbmsgcmVsPSJpbXBvcnQiIGhyZWY9Ii96Lmh0bWwiPgotPHNjcmlwdD4KLSd1c2Ugc3RyaWN0JzsKLTwvc2NyaXB0PgotIiIiKQotICAgIGZzLkFkZEZpbGUoJy9zcmMveS5odG1sJywgIiIiCi08IURPQ1RZUEUgaHRtbD4KLTxsaW5rIHJlbD0iaW1wb3J0IiBocmVmPSIvei5odG1sIj4KLSIiIikKLSAgICBmcy5BZGRGaWxlKCcvc3JjL3ouaHRtbCcsICIiIgotPCFET0NUWVBFIGh0bWw+Ci0iIiIpCi0gICAgZnMuQWRkRmlsZSgnL3NyYy9weV92dWxjYW5pemUuaHRtbCcsICc8IURPQ1RZUEUgaHRtbD4nKQotICAgIHdpdGggZnM6Ci0gICAgICBwcm9qZWN0ID0gcHJvamVjdF9tb2R1bGUuUHJvamVjdChbb3MucGF0aC5ub3JtcGF0aCgnL3NyYy8nKV0pCi0gICAgICBsb2FkZXIgPSByZXNvdXJjZV9sb2FkZXIuUmVzb3VyY2VMb2FkZXIocHJvamVjdCkKLSAgICAgIHhfbW9kdWxlID0gbG9hZGVyLkxvYWRNb2R1bGUoJ3gnKQotCi0gICAgICBzZWxmLmFzc2VydEVxdWFscyhbbG9hZGVyLmxvYWRlZF9tb2R1bGVzWyd5J10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRlZF9tb2R1bGVzWyd6J11dLAotICAgICAgICAgICAgICAgICAgICAgICAgeF9tb2R1bGUuZGVwZW5kZW50X21vZHVsZXMpCi0KLSAgICAgIGFscmVhZHlfbG9hZGVkX3NldCA9IHNldCgpCi0gICAgICBsb2FkX3NlcXVlbmNlID0gW10KLSAgICAgIHhfbW9kdWxlLkNvbXB1dGVMb2FkU2VxdWVuY2VSZWN1cnNpdmUobG9hZF9zZXF1ZW5jZSwgYWxyZWFkeV9sb2FkZWRfc2V0KQotCi0gICAgICBzZWxmLmFzc2VydEVxdWFscyhbbG9hZGVyLmxvYWRlZF9tb2R1bGVzWyd6J10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRlZF9tb2R1bGVzWyd5J10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeF9tb2R1bGVdLAotICAgICAgICAgICAgICAgICAgICAgICAgbG9hZF9zZXF1ZW5jZSkKLQotICBkZWYgdGVzdEJhc2ljKHNlbGYpOgotICAgIGZzID0gZmFrZV9mcy5GYWtlRlMoKQotICAgIGZzLkFkZEZpbGUoJy94L3NyYy9teV9tb2R1bGUuaHRtbCcsICIiIgotPCFET0NUWVBFIGh0bWw+Ci08bGluayByZWw9ImltcG9ydCIgaHJlZj0iL3B5X3Z1bGNhbml6ZS9mb28uaHRtbCI+Ci19KTsKLSIiIikKLSAgICBmcy5BZGRGaWxlKCcveC9weV92dWxjYW5pemUvZm9vLmh0bWwnLCAiIiIKLTwhRE9DVFlQRSBodG1sPgotfSk7Ci0iIiIpCi0gICAgcHJvamVjdCA9IHByb2plY3RfbW9kdWxlLlByb2plY3QoW29zLnBhdGgubm9ybXBhdGgoJy94JyldKQotICAgIGxvYWRlciA9IHJlc291cmNlX2xvYWRlci5SZXNvdXJjZUxvYWRlcihwcm9qZWN0KQotICAgIHdpdGggZnM6Ci0gICAgICBteV9tb2R1bGUgPSBsb2FkZXIuTG9hZE1vZHVsZShtb2R1bGVfbmFtZT0nc3JjLm15X21vZHVsZScpCi0gICAgICBkZXBfbmFtZXMgPSBbeC5uYW1lIGZvciB4IGluIG15X21vZHVsZS5kZXBlbmRlbnRfbW9kdWxlc10KLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncHlfdnVsY2FuaXplLmZvbyddLCBkZXBfbmFtZXMpCi0KLSAgZGVmIHRlc3REZXBzRXhjZXB0aW9uQ29udGV4dChzZWxmKToKLSAgICBmcyA9IGZha2VfZnMuRmFrZUZTKCkKLSAgICBmcy5BZGRGaWxlKCcveC9zcmMvbXlfbW9kdWxlLmh0bWwnLCAiIiIKLTwhRE9DVFlQRSBodG1sPgotPGxpbmsgcmVsPSJpbXBvcnQiIGhyZWY9Ii9weV92dWxjYW5pemUvZm9vLmh0bWwiPgotIiIiKQotICAgIGZzLkFkZEZpbGUoJy94L3B5X3Z1bGNhbml6ZS9mb28uaHRtbCcsICIiIgotPCFET0NUWVBFIGh0bWw+Ci08bGluayByZWw9ImltcG9ydCIgaHJlZj0ibWlzc2luZy5odG1sIj4KLSIiIikKLSAgICBwcm9qZWN0ID0gcHJvamVjdF9tb2R1bGUuUHJvamVjdChbb3MucGF0aC5ub3JtcGF0aCgnL3gnKV0pCi0gICAgbG9hZGVyID0gcmVzb3VyY2VfbG9hZGVyLlJlc291cmNlTG9hZGVyKHByb2plY3QpCi0gICAgd2l0aCBmczoKLSAgICAgIGV4YyA9IE5vbmUKLSAgICAgIHRyeToKLSAgICAgICAgbG9hZGVyLkxvYWRNb2R1bGUobW9kdWxlX25hbWU9J3NyYy5teV9tb2R1bGUnKQotICAgICAgICBhc3NlcnQgRmFsc2UsICdFeHBlY3RlZCBhbiBleGNlcHRpb24nCi0gICAgICBleGNlcHQgbW9kdWxlLkRlcHNFeGNlcHRpb24gYXMgZToKLSAgICAgICAgZXhjID0gZQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgWydzcmMubXlfbW9kdWxlJywgJ3B5X3Z1bGNhbml6ZS5mb28nXSwKLSAgICAgICAgICBleGMuY29udGV4dCkKLQotICBkZWYgdGVzdEdldEFsbERlcGVuZGVudEZpbGVuYW1lc1JlY3Vyc2l2ZShzZWxmKToKLSAgICBmcyA9IGZha2VfZnMuRmFrZUZTKCkKLSAgICBmcy5BZGRGaWxlKCcveC95L3ovZm9vLmh0bWwnLCAiIiIKLTwhRE9DVFlQRSBodG1sPgotPGxpbmsgcmVsPSJpbXBvcnQiIGhyZWY9Ii96L2ZvbzIuaHRtbCI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii96L2Zvby5jc3MiPgotPHNjcmlwdCBzcmM9Ii9iYXIuanMiPjwvc2NyaXB0PgotIiIiKQotICAgIGZzLkFkZEZpbGUoJy94L3kvei9mb28uY3NzJywgIiIiCi0ueCAueSB7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGZvby5qcGVnKTsKLX0KLSIiIikKLSAgICBmcy5BZGRGaWxlKCcveC95L3ovZm9vLmpwZWcnLCAnJykKLSAgICBmcy5BZGRGaWxlKCcveC95L3ovZm9vMi5odG1sJywgIiIiCi08IURPQ1RZUEUgaHRtbD4KLSIiIikKLSAgICBmcy5BZGRGaWxlKCcveC9yYXcvYmFyLmpzJywgJ2hlbGxvJykKLSAgICBwcm9qZWN0ID0gcHJvamVjdF9tb2R1bGUuUHJvamVjdChbCi0gICAgICAgIG9zLnBhdGgubm9ybXBhdGgoJy94L3knKSwgb3MucGF0aC5ub3JtcGF0aCgnL3gvcmF3LycpXSkKLSAgICBsb2FkZXIgPSByZXNvdXJjZV9sb2FkZXIuUmVzb3VyY2VMb2FkZXIocHJvamVjdCkKLSAgICB3aXRoIGZzOgotICAgICAgbXlfbW9kdWxlID0gbG9hZGVyLkxvYWRNb2R1bGUobW9kdWxlX25hbWU9J3ouZm9vJykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGxlbihteV9tb2R1bGUuZGVwZW5kZW50X3Jhd19zY3JpcHRzKSkKLQotICAgICAgZGVwZW5kZW50X2ZpbGVuYW1lcyA9IG15X21vZHVsZS5HZXRBbGxEZXBlbmRlbnRGaWxlbmFtZXNSZWN1cnNpdmUoKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgWwotICAgICAgICAgICAgICBvcy5wYXRoLm5vcm1wYXRoKCcveC95L3ovZm9vLmh0bWwnKSwKLSAgICAgICAgICAgICAgb3MucGF0aC5ub3JtcGF0aCgnL3gvcmF3L2Jhci5qcycpLAotICAgICAgICAgICAgICBvcy5wYXRoLm5vcm1wYXRoKCcveC95L3ovZm9vLmNzcycpLAotICAgICAgICAgICAgICBvcy5wYXRoLm5vcm1wYXRoKCcveC95L3ovZm9vLmpwZWcnKSwKLSAgICAgICAgICAgICAgb3MucGF0aC5ub3JtcGF0aCgnL3gveS96L2ZvbzIuaHRtbCcpLAotICAgICAgICAgIF0sCi0gICAgICAgICAgZGVwZW5kZW50X2ZpbGVuYW1lcykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL3BhcnNlX2h0bWxfZGVwcy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL3BhcnNlX2h0bWxfZGVwcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEwODg4Yy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9wYXJzZV9odG1sX2RlcHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLWZyb20gcHlfdnVsY2FuaXplIGltcG9ydCBqc191dGlscwotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IG1vZHVsZQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IHN0cmlwX2pzX2NvbW1lbnRzCi1mcm9tIHB5X3Z1bGNhbml6ZSBpbXBvcnQgaHRtbF9nZW5lcmF0aW9uX2NvbnRyb2xsZXIKLQotCi1kZWYgX0FkZFRvUGF0aElmTmVlZGVkKHBhdGgpOgotICBpZiBwYXRoIG5vdCBpbiBzeXMucGF0aDoKLSAgICBzeXMucGF0aC5pbnNlcnQoMCwgcGF0aCkKLQotCi1kZWYgX0luaXRCZWF1dGlmdWxTb3VwKCk6Ci0gIGNhdGFwdWx0X3BhdGggPSBvcy5wYXRoLmFic3BhdGgoCi0gICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKLSAgICAgICAgICAgICAgICAgICBvcy5wYXRoLnBhcmRpciwgb3MucGF0aC5wYXJkaXIsIG9zLnBhdGgucGFyZGlyKSkKLSAgYnNfcGF0aCA9IG9zLnBhdGguam9pbihjYXRhcHVsdF9wYXRoLCAndGhpcmRfcGFydHknLCAnYmVhdXRpZnVsc291cDQnKQotICBfQWRkVG9QYXRoSWZOZWVkZWQoYnNfcGF0aCkKLQotICBodG1sNWxpYl9wYXRoID0gb3MucGF0aC5qb2luKGNhdGFwdWx0X3BhdGgsICd0aGlyZF9wYXJ0eScsICdodG1sNWxpYi1weXRob24nKQotICBfQWRkVG9QYXRoSWZOZWVkZWQoaHRtbDVsaWJfcGF0aCkKLQotICBzaXhfcGF0aCA9IG9zLnBhdGguam9pbihjYXRhcHVsdF9wYXRoLCAndGhpcmRfcGFydHknLCAnc2l4JykKLSAgX0FkZFRvUGF0aElmTmVlZGVkKHNpeF9wYXRoKQotCi0KLV9Jbml0QmVhdXRpZnVsU291cCgpCi1pbXBvcnQgYnM0Ci0KLWNsYXNzIFNjcmlwdChvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VwKToKLSAgICBpZiBub3Qgc291cDoKLSAgICAgIHJhaXNlIG1vZHVsZS5EZXBzRXhjZXB0aW9uKCdTY3JpcHQgb2JqZWN0IGNyZWF0ZWQgd2l0aG91dCBzb3VwJykKLSAgICBzZWxmLl9zb3VwID0gc291cAotCi0gIGRlZiBBcHBlbmRKU0NvbnRlbnRzVG9GaWxlKHNlbGYsIGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLWNsYXNzIElubGluZVNjcmlwdChTY3JpcHQpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VwKToKLSAgICBzdXBlcihJbmxpbmVTY3JpcHQsIHNlbGYpLl9faW5pdF9fKHNvdXApCi0gICAgc2VsZi5fc3RyaXBwZWRfY29udGVudHMgPSBOb25lCi0gICAgc2VsZi5fb3Blbl90YWdzID0gTm9uZQotICAgIHNlbGYuaXNfZXh0ZXJuYWwgPSBGYWxzZQotCi0gIEBwcm9wZXJ0eQotICBkZWYgY29udGVudHMoc2VsZik6Ci0gICAgcmV0dXJuIHVuaWNvZGUoc2VsZi5fc291cC5zdHJpbmcpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBzdHJpcHBlZF9jb250ZW50cyhzZWxmKToKLSAgICBpZiBub3Qgc2VsZi5fc3RyaXBwZWRfY29udGVudHM6Ci0gICAgICBzZWxmLl9zdHJpcHBlZF9jb250ZW50cyA9IHN0cmlwX2pzX2NvbW1lbnRzLlN0cmlwSlNDb21tZW50cygKLSAgICAgICAgICBzZWxmLmNvbnRlbnRzKQotICAgIHJldHVybiBzZWxmLl9zdHJpcHBlZF9jb250ZW50cwotCi0gIEBwcm9wZXJ0eQotICBkZWYgb3Blbl90YWdzKHNlbGYpOgotICAgIGlmIHNlbGYuX29wZW5fdGFnczoKLSAgICAgIHJldHVybiBzZWxmLl9vcGVuX3RhZ3MKLSAgICBvcGVuX3RhZ3MgPSBbXQotICAgIGN1ciA9IHNlbGYuX3NvdXAucGFyZW50Ci0gICAgd2hpbGUgY3VyOgotICAgICAgaWYgaXNpbnN0YW5jZShjdXIsIGJzNC5CZWF1dGlmdWxTb3VwKToKLSAgICAgICAgYnJlYWsKLQotICAgICAgb3Blbl90YWdzLmFwcGVuZChfVGFnKGN1ci5uYW1lLCBjdXIuYXR0cnMpKQotICAgICAgY3VyID0gY3VyLnBhcmVudAotCi0gICAgb3Blbl90YWdzLnJldmVyc2UoKQotICAgIGFzc2VydCBvcGVuX3RhZ3NbLTFdLnRhZyA9PSAnc2NyaXB0JwotICAgIGRlbCBvcGVuX3RhZ3NbLTFdCi0KLSAgICBzZWxmLl9vcGVuX3RhZ3MgPSBvcGVuX3RhZ3MKLSAgICByZXR1cm4gc2VsZi5fb3Blbl90YWdzCi0KLSAgZGVmIEFwcGVuZEpTQ29udGVudHNUb0ZpbGUoc2VsZiwgZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICBqcyA9IHNlbGYuY29udGVudHMKLSAgICBlc2NhcGVkX2pzID0ganNfdXRpbHMuRXNjYXBlSlNJZk5lZWRlZChqcykKLSAgICBmLndyaXRlKGVzY2FwZWRfanMpCi0gICAgZi53cml0ZSgnXG4nKQotCi1jbGFzcyBFeHRlcm5hbFNjcmlwdChTY3JpcHQpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VwKToKLSAgICBzdXBlcihFeHRlcm5hbFNjcmlwdCwgc2VsZikuX19pbml0X18oc291cCkKLSAgICBpZiAnc3JjJyBub3QgaW4gc291cC5hdHRyczoKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbigiezB9IGlzIG5vdCBhbiBleHRlcm5hbCBzY3JpcHQuIi5mb3JtYXQoc291cCkpCi0gICAgc2VsZi5pc19leHRlcm5hbCA9IFRydWUKLSAgICBzZWxmLl9sb2FkZWRfcmF3X3NjcmlwdCA9IE5vbmUKLQotICBAcHJvcGVydHkKLSAgZGVmIGxvYWRlZF9yYXdfc2NyaXB0KHNlbGYpOgotICAgIGlmIHNlbGYuX2xvYWRlZF9yYXdfc2NyaXB0OgotICAgICAgcmV0dXJuIHNlbGYuX2xvYWRlZF9yYXdfc2NyaXB0Ci0KLSAgICByZXR1cm4gTm9uZQotCi0gIEBsb2FkZWRfcmF3X3NjcmlwdC5zZXR0ZXIKLSAgZGVmIGxvYWRlZF9yYXdfc2NyaXB0KHNlbGYsIHZhbHVlKToKLSAgICBzZWxmLl9sb2FkZWRfcmF3X3NjcmlwdCA9IHZhbHVlCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBzcmMoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX3NvdXAuYXR0cnNbJ3NyYyddCi0KLSAgZGVmIEFwcGVuZEpTQ29udGVudHNUb0ZpbGUoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2luY2x1ZGVfdGFnc19mb3Jfc2NyaXB0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyX2Zvcl9pbmNsdWRlX3RhZ19yb290KToKLSAgICByYXdfc2NyaXB0ID0gc2VsZi5sb2FkZWRfcmF3X3NjcmlwdAotICAgIGlmIG5vdCByYXdfc2NyaXB0OgotICAgICAgcmV0dXJuCi0KLSAgICBpZiB1c2VfaW5jbHVkZV90YWdzX2Zvcl9zY3JpcHRzOgotICAgICAgcmVsX2ZpbGVuYW1lID0gb3MucGF0aC5yZWxwYXRoKHJhd19zY3JpcHQuZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJfZm9yX2luY2x1ZGVfdGFnX3Jvb3QpCi0gICAgICBmLndyaXRlKCIiIjxpbmNsdWRlIHNyYz0iJXMiPlxuIiIiICUgcmVsX2ZpbGVuYW1lKQotICAgIGVsc2U6Ci0gICAgICBmLndyaXRlKGpzX3V0aWxzLkVzY2FwZUpTSWZOZWVkZWQocmF3X3NjcmlwdC5jb250ZW50cykpCi0gICAgICBmLndyaXRlKCdcbicpCi0KLWRlZiBfQ3JlYXRlU291cFdpdGhvdXRIZWFkT3JCb2R5KGh0bWwpOgotICBzb3VwQ29weSA9IGJzNC5CZWF1dGlmdWxTb3VwKGh0bWwsICdodG1sNWxpYicpCi0gIHNvdXAgPSBiczQuQmVhdXRpZnVsU291cCgpCi0gIHNvdXAucmVzZXQoKQotICBpZiBzb3VwQ29weS5oZWFkOgotICAgIGZvciBuIGluIHNvdXBDb3B5LmhlYWQuY29udGVudHM6Ci0gICAgICBuLmV4dHJhY3QoKQotICAgICAgc291cC5hcHBlbmQobikKLSAgaWYgc291cENvcHkuYm9keToKLSAgICBmb3IgbiBpbiBzb3VwQ29weS5ib2R5LmNvbnRlbnRzOgotICAgICAgbi5leHRyYWN0KCkKLSAgICAgIHNvdXAuYXBwZW5kKG4pCi0gIHJldHVybiBzb3VwCi0KLQotY2xhc3MgSFRNTE1vZHVsZVBhcnNlclJlc3VsdHMob2JqZWN0KToKLQotICBkZWYgX19pbml0X18oc2VsZiwgaHRtbCk6Ci0gICAgc2VsZi5fc291cCA9IGJzNC5CZWF1dGlmdWxTb3VwKGh0bWwsICdodG1sNWxpYicpCi0gICAgc2VsZi5faW5saW5lX3NjcmlwdHMgPSBOb25lCi0gICAgc2VsZi5fc2NyaXB0cyA9IE5vbmUKLQotICBAcHJvcGVydHkKLSAgZGVmIHNjcmlwdHNfZXh0ZXJuYWwoc2VsZik6Ci0gICAgdGFncyA9IHNlbGYuX3NvdXAuZmluZEFsbCgnc2NyaXB0Jywgc3JjPVRydWUpCi0gICAgcmV0dXJuIFt0WydzcmMnXSBmb3IgdCBpbiB0YWdzXQotCi0gIEBwcm9wZXJ0eQotICBkZWYgaW5saW5lX3NjcmlwdHMoc2VsZik6Ci0gICAgaWYgbm90IHNlbGYuX2lubGluZV9zY3JpcHRzOgotICAgICAgdGFncyA9IHNlbGYuX3NvdXAuZmluZEFsbCgnc2NyaXB0Jywgc3JjPU5vbmUpCi0gICAgICBzZWxmLl9pbmxpbmVfc2NyaXB0cyA9IFtJbmxpbmVTY3JpcHQodC5zdHJpbmcpIGZvciB0IGluIHRhZ3NdCi0gICAgcmV0dXJuIHNlbGYuX2lubGluZV9zY3JpcHRzCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBzY3JpcHRzKHNlbGYpOgotICAgIGlmIG5vdCBzZWxmLl9zY3JpcHRzOgotICAgICAgc2VsZi5fc2NyaXB0cyA9IFtdCi0gICAgICBzY3JpcHRfZWxlbWVudHMgPSBzZWxmLl9zb3VwLmZpbmRBbGwoJ3NjcmlwdCcpCi0gICAgICBmb3IgZWxlbWVudCBpbiBzY3JpcHRfZWxlbWVudHM6Ci0gICAgICAgIGlmICdzcmMnIGluIGVsZW1lbnQuYXR0cnM6Ci0gICAgICAgICAgc2VsZi5fc2NyaXB0cy5hcHBlbmQoRXh0ZXJuYWxTY3JpcHQoZWxlbWVudCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgc2VsZi5fc2NyaXB0cy5hcHBlbmQoSW5saW5lU2NyaXB0KGVsZW1lbnQpKQotICAgIHJldHVybiBzZWxmLl9zY3JpcHRzCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBpbXBvcnRzKHNlbGYpOgotICAgIHRhZ3MgPSBzZWxmLl9zb3VwLmZpbmRBbGwoJ2xpbmsnLCByZWw9J2ltcG9ydCcpCi0gICAgcmV0dXJuIFt0WydocmVmJ10gZm9yIHQgaW4gdGFnc10KLQotICBAcHJvcGVydHkKLSAgZGVmIHN0eWxlc2hlZXRzKHNlbGYpOgotICAgIHRhZ3MgPSBzZWxmLl9zb3VwLmZpbmRBbGwoJ2xpbmsnLCByZWw9J3N0eWxlc2hlZXQnKQotICAgIHJldHVybiBbdFsnaHJlZiddIGZvciB0IGluIHRhZ3NdCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBpbmxpbmVfc3R5bGVzaGVldHMoc2VsZik6Ci0gICAgdGFncyA9IHNlbGYuX3NvdXAuZmluZEFsbCgnc3R5bGUnKQotICAgIHJldHVybiBbdW5pY29kZSh0LnN0cmluZykgZm9yIHQgaW4gdGFnc10KLQotICBkZWYgWWllbGRIVE1MSW5QaWVjZXMoc2VsZiwgY29udHJvbGxlciwgbWluaWZ5PUZhbHNlKToKLSAgICB5aWVsZCBzZWxmLkdlbmVyYXRlSFRNTChjb250cm9sbGVyLCBtaW5pZnkpCi0KLSAgZGVmIEdlbmVyYXRlSFRNTChzZWxmLCBjb250cm9sbGVyLCBtaW5pZnk9RmFsc2UsIHByZXR0aWZ5PUZhbHNlKToKLSAgICBzb3VwID0gX0NyZWF0ZVNvdXBXaXRob3V0SGVhZE9yQm9keSh1bmljb2RlKHNlbGYuX3NvdXApKQotCi0gICAgIyBSZW1vdmUgZGVjbGFyYXRpb24uCi0gICAgZm9yIHggaW4gc291cC5jb250ZW50czoKLSAgICAgIGlmIGlzaW5zdGFuY2UoeCwgYnM0LkRvY3R5cGUpOgotICAgICAgICB4LmV4dHJhY3QoKQotCi0gICAgIyBSZW1vdmUgZGVjbGFyYXRpb24uCi0gICAgZm9yIHggaW4gc291cC5jb250ZW50czoKLSAgICAgIGlmIGlzaW5zdGFuY2UoeCwgYnM0LkRlY2xhcmF0aW9uKToKLSAgICAgICAgeC5leHRyYWN0KCkKLQotICAgICMgUmVtb3ZlIGFsbCBpbXBvcnRzLgotICAgIGltcG9ydHMgPSBzb3VwLmZpbmRBbGwoJ2xpbmsnLCByZWw9J2ltcG9ydCcpCi0gICAgZm9yIGltcCBpbiBpbXBvcnRzOgotICAgICAgaW1wLmV4dHJhY3QoKQotCi0gICAgIyBSZW1vdmUgYWxsIHNjcmlwdCBsaW5rcy4KLSAgICBzY3JpcHRzX2V4dGVybmFsID0gc291cC5maW5kQWxsKCdzY3JpcHQnLCBzcmM9VHJ1ZSkKLSAgICBmb3Igc2NyaXB0IGluIHNjcmlwdHNfZXh0ZXJuYWw6Ci0gICAgICBzY3JpcHQuZXh0cmFjdCgpCi0KLSAgICAjIFJlbW92ZSBhbGwgaW4tbGluZSBzY3JpcHRzLgotICAgIHNjcmlwdHNfZXh0ZXJuYWwgPSBzb3VwLmZpbmRBbGwoJ3NjcmlwdCcsIHNyYz1Ob25lKQotICAgIGZvciBzY3JpcHQgaW4gc2NyaXB0c19leHRlcm5hbDoKLSAgICAgIHNjcmlwdC5leHRyYWN0KCkKLQotICAgICMgUHJvY2VzcyBhbGwgaW4tbGluZSBzdHlsZXMuCi0gICAgaW5saW5lX3N0eWxlcyA9IHNvdXAuZmluZEFsbCgnc3R5bGUnKQotICAgIGZvciBzdHlsZSBpbiBpbmxpbmVfc3R5bGVzOgotICAgICAgaHRtbCA9IGNvbnRyb2xsZXIuR2V0SFRNTEZvcklubGluZVN0eWxlc2hlZXQodW5pY29kZShzdHlsZS5zdHJpbmcpKQotICAgICAgaWYgaHRtbDoKLSAgICAgICAgbnMgPSBzb3VwLm5ld190YWcoJ3N0eWxlJykKLSAgICAgICAgbnMuYXBwZW5kKGJzNC5OYXZpZ2FibGVTdHJpbmcoaHRtbCkpCi0gICAgICAgIHN0eWxlLnJlcGxhY2VXaXRoKG5zKQotICAgICAgZWxzZToKLSAgICAgICAgc3R5bGUuZXh0cmFjdCgpCi0KLSAgICAjIFJld3JpdGUgYWxsIGV4dGVybmFsIHN0eWxlc2hlZXQgaHJlZnMgb3IgcmVtb3ZlLCBhcyBuZWVkZWQuCi0gICAgc3R5bGVzaGVldF9saW5rcyA9IHNvdXAuZmluZEFsbCgnbGluaycsIHJlbD0nc3R5bGVzaGVldCcpCi0gICAgZm9yIHN0eWxlc2hlZXRfbGluayBpbiBzdHlsZXNoZWV0X2xpbmtzOgotICAgICAgaHRtbCA9IGNvbnRyb2xsZXIuR2V0SFRNTEZvclN0eWxlc2hlZXRIUmVmKHN0eWxlc2hlZXRfbGlua1snaHJlZiddKQotICAgICAgaWYgaHRtbDoKLSAgICAgICAgdG1wID0gYnM0LkJlYXV0aWZ1bFNvdXAoaHRtbCwgJ2h0bWw1bGliJykuZmluZEFsbCgnc3R5bGUnKQotICAgICAgICBhc3NlcnQgbGVuKHRtcCkgPT0gMQotICAgICAgICBzdHlsZXNoZWV0X2xpbmsucmVwbGFjZVdpdGgodG1wWzBdKQotICAgICAgZWxzZToKLSAgICAgICAgc3R5bGVzaGVldF9saW5rLmV4dHJhY3QoKQotCi0gICAgIyBSZW1vdmUgY29tbWVudHMgaWYgbWluaWZ5aW5nLgotICAgIGlmIG1pbmlmeToKLSAgICAgIGNvbW1lbnRzID0gc291cC5maW5kQWxsKAotICAgICAgICAgIHRleHQ9bGFtYmRhIHRleHQ6IGlzaW5zdGFuY2UodGV4dCwgYnM0LkNvbW1lbnQpKQotICAgICAgZm9yIGNvbW1lbnQgaW4gY29tbWVudHM6Ci0gICAgICAgIGNvbW1lbnQuZXh0cmFjdCgpCi0gICAgaWYgcHJldHRpZnk6Ci0gICAgICByZXR1cm4gc291cC5wcmV0dGlmeSgndXRmLTgnKS5zdHJpcCgpCi0KLSAgICAjIFdlIGFyZSBkb25lLgotICAgIHJldHVybiB1bmljb2RlKHNvdXApLnN0cmlwKCkKLQotICBAcHJvcGVydHkKLSAgZGVmIGh0bWxfY29udGVudHNfd2l0aG91dF9saW5rc19hbmRfc2NyaXB0KHNlbGYpOgotICAgIHJldHVybiBzZWxmLkdlbmVyYXRlSFRNTCgKLSAgICAgICAgaHRtbF9nZW5lcmF0aW9uX2NvbnRyb2xsZXIuSFRNTEdlbmVyYXRpb25Db250cm9sbGVyKCkpCi0KLQotY2xhc3MgX1RhZyhvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCB0YWcsIGF0dHJzKToKLSAgICBzZWxmLnRhZyA9IHRhZwotICAgIHNlbGYuYXR0cnMgPSBhdHRycwotCi0gIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICBhdHRyX3N0cmluZyA9ICcgJy5qb2luKCclcz0iJXMiJyAlICh4WzBdLCB4WzFdKSBmb3IgeCBpbiBzZWxmLmF0dHJzKQotICAgIHJldHVybiAnPCVzICVzPicgJSAoc2VsZi50YWcsIGF0dHJfc3RyaW5nKQotCi0KLWNsYXNzIEhUTUxNb2R1bGVQYXJzZXIoKToKLQotICBkZWYgUGFyc2Uoc2VsZiwgaHRtbCk6Ci0gICAgaWYgaHRtbCBpcyBOb25lOgotICAgICAgaHRtbCA9ICcnCi0gICAgZWxzZToKLSAgICAgIGlmIGh0bWwuZmluZCgnPCAvc2NyaXB0PicpICE9IC0xOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0VzY2FwZSBzY3JpcHQgdGFncyB3aXRoIDxcL3NjcmlwdD4nKQotCi0gICAgcmV0dXJuIEhUTUxNb2R1bGVQYXJzZXJSZXN1bHRzKGh0bWwpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9wYXJzZV9odG1sX2RlcHNfdW5pdHRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9wYXJzZV9odG1sX2RlcHNfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDJhMzBhMjkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvcGFyc2VfaHRtbF9kZXBzX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjkyICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IHJlCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IHBhcnNlX2h0bWxfZGVwcwotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IGh0bWxfZ2VuZXJhdGlvbl9jb250cm9sbGVyCi0KLQotY2xhc3MgUGFyc2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RfcGFyc2VfZW1wdHkoc2VsZik6Ci0gICAgcGFyc2VyID0gcGFyc2VfaHRtbF9kZXBzLkhUTUxNb2R1bGVQYXJzZXIoKQotICAgIG1vZHVsZSA9IHBhcnNlci5QYXJzZSgnJykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwgbW9kdWxlLnNjcmlwdHNfZXh0ZXJuYWwpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoW10sIG1vZHVsZS5pbmxpbmVfc2NyaXB0cykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwgbW9kdWxlLnN0eWxlc2hlZXRzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtdLCBtb2R1bGUuaW1wb3J0cykKLQotICBkZWYgdGVzdF9wYXJzZV9ub25lKHNlbGYpOgotICAgIHBhcnNlciA9IHBhcnNlX2h0bWxfZGVwcy5IVE1MTW9kdWxlUGFyc2VyKCkKLSAgICBtb2R1bGUgPSBwYXJzZXIuUGFyc2UoTm9uZSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwgbW9kdWxlLnNjcmlwdHNfZXh0ZXJuYWwpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoW10sIG1vZHVsZS5pbmxpbmVfc2NyaXB0cykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwgbW9kdWxlLnN0eWxlc2hlZXRzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtdLCBtb2R1bGUuaW1wb3J0cykKLQotICBkZWYgdGVzdF9wYXJzZV9zY3JpcHRfc3JjX2Jhc2ljKHNlbGYpOgotICAgIGh0bWwgPSAiIiI8IURPQ1RZUEUgaHRtbD4KLSAgICAgICAgICAgICAgPGh0bWw+Ci0gICAgICAgICAgICAgICAgPGhlYWQ+Ci0gICAgICAgICAgICAgICAgICA8c2NyaXB0IHNyYz0icG9seW1lci5taW4uanMiPjwvc2NyaXB0PgotICAgICAgICAgICAgICAgICAgPHNjcmlwdCBzcmM9ImZvby5qcyI+PC9zY3JpcHQ+Ci0gICAgICAgICAgICAgICAgPC9oZWFkPgotICAgICAgICAgICAgICAgIDxib2R5PgotICAgICAgICAgICAgICAgIDwvYm9keT4KLSAgICAgICAgICAgICAgPC9odG1sPiIiIgotICAgIHBhcnNlciA9IHBhcnNlX2h0bWxfZGVwcy5IVE1MTW9kdWxlUGFyc2VyKCkKLSAgICBtb2R1bGUgPSBwYXJzZXIuUGFyc2UoaHRtbCkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbJ3BvbHltZXIubWluLmpzJywgJ2Zvby5qcyddLCBtb2R1bGUuc2NyaXB0c19leHRlcm5hbCkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwgbW9kdWxlLmlubGluZV9zY3JpcHRzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtdLCBtb2R1bGUuc3R5bGVzaGVldHMpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoW10sIG1vZHVsZS5pbXBvcnRzKQotICAgIHNlbGYuYXNzZXJ0Tm90SW4oCi0gICAgICAgICdET0NUWVBFIGh0bWwnLAotICAgICAgICBtb2R1bGUuaHRtbF9jb250ZW50c193aXRob3V0X2xpbmtzX2FuZF9zY3JpcHQpCi0KLSAgZGVmIHRlc3RfcGFyc2VfbGlua19yZWxfaW1wb3J0KHNlbGYpOgotICAgIGh0bWwgPSAiIiI8IURPQ1RZUEUgaHRtbD4KLSAgICAgICAgICAgICAgPGh0bWw+Ci0gICAgICAgICAgICAgICAgPGhlYWQ+Ci0gICAgICAgICAgICAgICAgICA8bGluayByZWw9ImltcG9ydCIgaHJlZj0ieC1mb28uaHRtbCI+Ci0gICAgICAgICAgICAgICAgPC9oZWFkPgotICAgICAgICAgICAgICAgIDxib2R5PgotICAgICAgICAgICAgICAgIDwvYm9keT4KLSAgICAgICAgICAgICAgPC9odG1sPiIiIgotICAgIHBhcnNlciA9IHBhcnNlX2h0bWxfZGVwcy5IVE1MTW9kdWxlUGFyc2VyKCkKLSAgICBtb2R1bGUgPSBwYXJzZXIuUGFyc2UoaHRtbCkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwgbW9kdWxlLnNjcmlwdHNfZXh0ZXJuYWwpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoW10sIG1vZHVsZS5pbmxpbmVfc2NyaXB0cykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwgbW9kdWxlLnN0eWxlc2hlZXRzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsneC1mb28uaHRtbCddLCBtb2R1bGUuaW1wb3J0cykKLQotICBkZWYgdGVzdF9wYXJzZV9zY3JpcHRfaW5saW5lKHNlbGYpOgotICAgIGh0bWwgPSAiIiI8cG9seW1lci1lbGVtZW50IG5hbWU9InRrLWVsZW1lbnQtcHJvdG8iPgotICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KLSAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICAgICAgICAgIDxzY3JpcHQ+Ci0gICAgICAgICAgICAgICAgICBweV92dWxjYW5pemUucmVxdWlyZSgiZm9vIik7Ci0gICAgICAgICAgICAgICAgICBweV92dWxjYW5pemUucmVxdWlyZSgnYmFyJyk7Ci0gICAgICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgICAgIDwvcG9seW1lci1lbGVtZW50PiIiIgotCi0gICAgcGFyc2VyID0gcGFyc2VfaHRtbF9kZXBzLkhUTUxNb2R1bGVQYXJzZXIoKQotICAgIG1vZHVsZSA9IHBhcnNlci5QYXJzZShodG1sKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtdLCBtb2R1bGUuc2NyaXB0c19leHRlcm5hbCkKLSAgICBzZWxmLmFzc2VydEVxdWFscygxLCBsZW4obW9kdWxlLmlubGluZV9zY3JpcHRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwgbW9kdWxlLnN0eWxlc2hlZXRzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtdLCBtb2R1bGUuaW1wb3J0cykKLQotICAgIHNjcmlwdDAgPSBtb2R1bGUuaW5saW5lX3NjcmlwdHNbMF0KLSAgICB2YWwgPSByZS5zdWIocidccysnLCAnJywgc2NyaXB0MC5jb250ZW50cykKLSAgICBpbm5lcl9zY3JpcHQgPSAiIiJweV92dWxjYW5pemUucmVxdWlyZSgiZm9vIik7cHlfdnVsY2FuaXplLnJlcXVpcmUoJ2JhcicpOyIiIgotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGlubmVyX3NjcmlwdCwgdmFsKQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMywgbGVuKHNjcmlwdDAub3Blbl90YWdzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscygncG9seW1lci1lbGVtZW50Jywgc2NyaXB0MC5vcGVuX3RhZ3NbMl0udGFnKQotCi0gICAgc2VsZi5hc3NlcnROb3RJbigKLSAgICAgICAgJ3B5X3Z1bGNhbml6ZS5yZXF1aXJlKCJmb28iKTsnLAotICAgICAgICBtb2R1bGUuaHRtbF9jb250ZW50c193aXRob3V0X2xpbmtzX2FuZF9zY3JpcHQpCi0KLSAgZGVmIHRlc3RfcGFyc2Vfc2NyaXB0X2lubGluZV9hbmRfZXh0ZXJuYWwoc2VsZik6Ci0gICAgaHRtbCA9ICIiIjxwb2x5bWVyLWVsZW1lbnQgbmFtZT0idGstZWxlbWVudC1wcm90byI+Ci0gICAgICAgICAgICAgICAgPHRlbXBsYXRlPgotICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgICAgICAgPHNjcmlwdD53aW5kb3cgPSB7fTwvc2NyaXB0PgotICAgICAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJmb28uanMiPjwvc2NyaXB0PgotICAgICAgICAgICAgICAgIDxzY3JpcHQ+d2luZG93ID0gdW5kZWZpbmVkPC9zY3JpcHQ+Ci0gICAgICAgICAgICAgIDwvcG9seW1lci1lbGVtZW50PiIiIgotCi0gICAgcGFyc2VyID0gcGFyc2VfaHRtbF9kZXBzLkhUTUxNb2R1bGVQYXJzZXIoKQotICAgIG1vZHVsZSA9IHBhcnNlci5QYXJzZShodG1sKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDMsIGxlbihtb2R1bGUuc2NyaXB0cykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJ3dpbmRvdyA9IHt9JywgbW9kdWxlLnNjcmlwdHNbMF0uY29udGVudHMpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoImZvby5qcyIsbW9kdWxlLnNjcmlwdHNbMV0uc3JjKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2R1bGUuc2NyaXB0c1sxXS5pc19leHRlcm5hbCkKLSAgICBzZWxmLmFzc2VydEVxdWFscygnd2luZG93ID0gdW5kZWZpbmVkJywgbW9kdWxlLnNjcmlwdHNbMl0uY29udGVudHMpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoW10sIG1vZHVsZS5pbXBvcnRzKQotCi0gIGRlZiB0ZXN0X3BhcnNlX3NjcmlwdF9zcmNfc3JpcHBpbmcoc2VsZik6Ci0gICAgaHRtbCA9ICIiIgotPHNjcmlwdCBzcmM9ImJsYWguanMiPjwvc2NyaXB0PgotIiIiCi0gICAgbW9kdWxlID0gcGFyc2VfaHRtbF9kZXBzLkhUTUxNb2R1bGVQYXJzZXIoKS5QYXJzZShodG1sKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcnLAotICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5odG1sX2NvbnRlbnRzX3dpdGhvdXRfbGlua3NfYW5kX3NjcmlwdCkKLQotICBkZWYgdGVzdF9wYXJzZV9saW5rX3JlbF9zdHlsZXNoZWV0KHNlbGYpOgotICAgIGh0bWwgPSAiIiI8cG9seW1lci1lbGVtZW50IG5hbWU9ImhpIj4KLSAgICAgICAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImZyYW1ld29ya3N0eWxlcy5jc3MiPgotICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICAgICAgICAgIDwvcG9seW1lci1lbGVtZW50PiIiIgotICAgIHBhcnNlciA9IHBhcnNlX2h0bWxfZGVwcy5IVE1MTW9kdWxlUGFyc2VyKCkKLSAgICBtb2R1bGUgPSBwYXJzZXIuUGFyc2UoaHRtbCkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwgbW9kdWxlLnNjcmlwdHNfZXh0ZXJuYWwpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoW10sIG1vZHVsZS5pbmxpbmVfc2NyaXB0cykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbJ2ZyYW1ld29ya3N0eWxlcy5jc3MnXSwgbW9kdWxlLnN0eWxlc2hlZXRzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtdLCBtb2R1bGUuaW1wb3J0cykKLQotICAgIGNsYXNzIEN0bChodG1sX2dlbmVyYXRpb25fY29udHJvbGxlci5IVE1MR2VuZXJhdGlvbkNvbnRyb2xsZXIpOgotCi0gICAgICBkZWYgR2V0SFRNTEZvclN0eWxlc2hlZXRIUmVmKHNlbGYsIGhyZWYpOgotICAgICAgICBpZiBocmVmID09ICdmcmFtZXdvcmtzdHlsZXMuY3NzJzoKLSAgICAgICAgICByZXR1cm4gJzxzdHlsZT5GUkFNRVdPUks8L3N0eWxlPicKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGdlbl9odG1sID0gbW9kdWxlLkdlbmVyYXRlSFRNTChDdGwoKSkKLSAgICBnaHRtID0gIiIiPHBvbHltZXItZWxlbWVudCBuYW1lPSJoaSI+Ci0gICAgICAgICAgICAgICAgPHRlbXBsYXRlPgotICAgICAgICAgICAgICAgICAgPHN0eWxlPkZSQU1FV09SSzwvc3R5bGU+Ci0gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICAgICAgPC9wb2x5bWVyLWVsZW1lbnQ+IiIiCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoZ2h0bSwgZ2VuX2h0bWwpCi0KLSAgZGVmIHRlc3RfcGFyc2VfaW5saW5lX3N0eWxlKHNlbGYpOgotICAgIGh0bWwgPSAiIiI8c3R5bGU+Ci0gIGhlbGxvCi08L3N0eWxlPiIiIgotICAgIG1vZHVsZSA9IHBhcnNlX2h0bWxfZGVwcy5IVE1MTW9kdWxlUGFyc2VyKCkuUGFyc2UoaHRtbCkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhodG1sLCBtb2R1bGUuaHRtbF9jb250ZW50c193aXRob3V0X2xpbmtzX2FuZF9zY3JpcHQpCi0KLSAgICBjbGFzcyBDdGwoaHRtbF9nZW5lcmF0aW9uX2NvbnRyb2xsZXIuSFRNTEdlbmVyYXRpb25Db250cm9sbGVyKToKLQotICAgICAgZGVmIEdldEhUTUxGb3JJbmxpbmVTdHlsZXNoZWV0KHNlbGYsIGNvbnRlbnRzKToKLSAgICAgICAgaWYgY29udGVudHMgPT0gJ1xuICBoZWxsb1xuJzoKLSAgICAgICAgICByZXR1cm4gJ1xuICBIRUxMT1xuJwotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZ2VuX2h0bWwgPSBtb2R1bGUuR2VuZXJhdGVIVE1MKEN0bCgpKQotICAgIGdodG0gPSAiIiI8c3R5bGU+Ci0gIEhFTExPCi08L3N0eWxlPiIiIgotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdodG0sIGdlbl9odG1sKQotCi0gIGRlZiB0ZXN0X3BhcnNlX3N0eWxlX2ltcG9ydChzZWxmKToKLSAgICBodG1sID0gIiIiPHBvbHltZXItZWxlbWVudCBuYW1lPSJ4LWJsaW5rIj4KLSAgICAgICAgICAgICAgICA8dGVtcGxhdGU+Ci0gICAgICAgICAgICAgICAgICA8c3R5bGU+Ci0gICAgICAgICAgICAgICAgICAgIEBpbXBvcnQgdXJsKGF3ZXNvbWUuY3NzKTsKLSAgICAgICAgICAgICAgICAgIDwvc3R5bGU+Ci0gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICAgICAgPC9wb2x5bWVyLWVsZW1lbnQ+IiIiCi0gICAgcGFyc2VyID0gcGFyc2VfaHRtbF9kZXBzLkhUTUxNb2R1bGVQYXJzZXIoKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGxhbWJkYTogcGFyc2VyLlBhcnNlKGh0bWwpKQotCi0gIGRlZiB0ZXN0X25lc3RlZF90ZW1wbGF0ZXMoc2VsZik6Ci0gICAgb3JpZ19odG1sID0gIiIiPHRlbXBsYXRlPgotICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlPgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJmb28iPjwvZGl2PgotICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPiIiIgotICAgIHBhcnNlciA9IHBhcnNlX2h0bWxfZGVwcy5IVE1MTW9kdWxlUGFyc2VyKCkKLSAgICByZXMgPSBwYXJzZXIuUGFyc2Uob3JpZ19odG1sKQotICAgIGh0bWwgPSByZXMuaHRtbF9jb250ZW50c193aXRob3V0X2xpbmtzX2FuZF9zY3JpcHQKLSAgICBzZWxmLmFzc2VydEVxdWFscyhodG1sLCBvcmlnX2h0bWwpCi0KLSAgZGVmIHRlc3RfaHRtbF9jb250ZW50c19iYXNpYyhzZWxmKToKLSAgICBodG1sID0gIiIiPGEgYj0iYyI+ZDwvYT4iIiIKLSAgICBwYXJzZXIgPSBwYXJzZV9odG1sX2RlcHMuSFRNTE1vZHVsZVBhcnNlcigpCi0gICAgbW9kdWxlID0gcGFyc2VyLlBhcnNlKGh0bWwpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoaHRtbCwgbW9kdWxlLmh0bWxfY29udGVudHNfd2l0aG91dF9saW5rc19hbmRfc2NyaXB0KQotCi0gIGRlZiB0ZXN0X2h0bWxfY29udGVudHNfd2l0aF9lbnRpdHkoc2VsZik6Ci0gICAgaHRtbCA9ICIiIjxhPiZyYXJyOzwvYT4iIiIKLSAgICBwYXJzZXIgPSBwYXJzZV9odG1sX2RlcHMuSFRNTE1vZHVsZVBhcnNlcigpCi0gICAgbW9kdWxlID0gcGFyc2VyLlBhcnNlKGh0bWwpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHModSc8YT5cdTIxOTI8L2E+JywKLSAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuaHRtbF9jb250ZW50c193aXRob3V0X2xpbmtzX2FuZF9zY3JpcHQpCi0KLSAgZGVmIHRlc3RfaHRtbF9jb250ZW50X3dpdGhfY2hhcnJlZihzZWxmKToKLSAgICBodG1sID0gIiIiPGE+JiM2Mjs8L2E+IiIiCi0gICAgcGFyc2VyID0gcGFyc2VfaHRtbF9kZXBzLkhUTUxNb2R1bGVQYXJzZXIoKQotICAgIG1vZHVsZSA9IHBhcnNlci5QYXJzZShodG1sKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCc8YT4mZ3Q7PC9hPicsCi0gICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmh0bWxfY29udGVudHNfd2l0aG91dF9saW5rc19hbmRfc2NyaXB0KQotCi0gIGRlZiB0ZXN0X2h0bWxfY29udGVudF9zdGFydF9lbmRfYnIoc2VsZik6Ci0gICAgaHRtbCA9ICIiIjxhPjxiciAvPjwvYT4iIiIKLSAgICBwYXJzZXIgPSBwYXJzZV9odG1sX2RlcHMuSFRNTE1vZHVsZVBhcnNlcigpCi0gICAgbW9kdWxlID0gcGFyc2VyLlBhcnNlKGh0bWwpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJzxhPjxici8+PC9hPicsCi0gICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmh0bWxfY29udGVudHNfd2l0aG91dF9saW5rc19hbmRfc2NyaXB0KQotCi0gIGRlZiB0ZXN0X2h0bWxfY29udGVudF9zdGFydF9lbmRfaW1nKHNlbGYpOgotICAgIGh0bWwgPSAiIiI8YT48aW1nIHNyYz0iZm9vLnBuZyIgaWQ9ImJhciIgLz48L2E+IiIiCi0gICAgcGFyc2VyID0gcGFyc2VfaHRtbF9kZXBzLkhUTUxNb2R1bGVQYXJzZXIoKQotICAgIG1vZHVsZSA9IHBhcnNlci5QYXJzZShodG1sKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCc8YT48aW1nIGlkPSJiYXIiIHNyYz0iZm9vLnBuZyIvPjwvYT4nLAotICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5odG1sX2NvbnRlbnRzX3dpdGhvdXRfbGlua3NfYW5kX3NjcmlwdCkKLQotICBkZWYgdGVzdF9odG1sX2NvbnRlbnRzX3dpdGhfbGlua19zdHJpcHBpbmcoc2VsZik6Ci0gICAgaHRtbCA9ICIiIjxhIGI9ImMiPmQ8L2E+Ci0gICAgICAgICAgICAgIDxsaW5rIHJlbD0iaW1wb3J0IiBocmVmPSJ4LWZvby5odG1sIj4iIiIKLSAgICBwYXJzZXIgPSBwYXJzZV9odG1sX2RlcHMuSFRNTE1vZHVsZVBhcnNlcigpCi0gICAgbW9kdWxlID0gcGFyc2VyLlBhcnNlKGh0bWwpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoIiIiPGEgYj0iYyI+ZDwvYT4iIiIsCi0gICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmh0bWxfY29udGVudHNfd2l0aG91dF9saW5rc19hbmRfc2NyaXB0LnN0cmlwKCkpCi0KLSAgZGVmIHRlc3RfaHRtbF9jb250ZW50c193aXRoX3N0eWxlX2xpbmtfc3RyaXBwaW5nKHNlbGYpOgotICAgIGh0bWwgPSAiIiI8YSBiPSJjIj5kPC9hPgotICAgICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImZyYW1ld29ya3N0eWxlcy5jc3MiPiIiIgotICAgIHBhcnNlciA9IHBhcnNlX2h0bWxfZGVwcy5IVE1MTW9kdWxlUGFyc2VyKCkKLSAgICBtb2R1bGUgPSBwYXJzZXIuUGFyc2UoaHRtbCkKLSAgICBzZWxmLmFzc2VydEVxdWFscygiIiI8YSBiPSJjIj5kPC9hPiIiIiwKLSAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuaHRtbF9jb250ZW50c193aXRob3V0X2xpbmtzX2FuZF9zY3JpcHQuc3RyaXAoKSkKLQotICBkZWYgdGVzdF9icl9kb2VzX25vdF9yYWlzZShzZWxmKToKLSAgICBodG1sID0gIiIiPGRpdj48YnIvPjwvZGl2PiIiIgotICAgIHBhcnNlciA9IHBhcnNlX2h0bWxfZGVwcy5IVE1MTW9kdWxlUGFyc2VyKCkKLSAgICBwYXJzZXIuUGFyc2UoaHRtbCkKLQotICBkZWYgdGVzdF9wX2RvZXNfbm90X3JhaXNlcyhzZWxmKToKLSAgICBodG1sID0gIiIiPGRpdj48L3A+PC9kaXY+IiIiCi0gICAgcGFyc2VyID0gcGFyc2VfaHRtbF9kZXBzLkhUTUxNb2R1bGVQYXJzZXIoKQotICAgIHBhcnNlci5QYXJzZShodG1sKQotCi0gIGRlZiB0ZXN0X2xpbmtfZW5kbGlua19kb2VzX25vdF9yYWlzZShzZWxmKToKLSAgICBodG1sID0gIiIiPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJmb28uY3NzIj48L2xpbms+IiIiCi0gICAgcGFyc2VyID0gcGFyc2VfaHRtbF9kZXBzLkhUTUxNb2R1bGVQYXJzZXIoKQotICAgIHBhcnNlci5QYXJzZShodG1sKQotCi0gIGRlZiB0ZXN0X2xpbmtfc2NyaXB0X2RvZXNfbm90X3JhaXNlKHNlbGYpOgotICAgIGh0bWwgPSAiIiI8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImZvby5jc3MiPgotICAgICAgICAgICAgICA8c2NyaXB0PgotICAgICAgICAgICAgICA8L3NjcmlwdD4iIiIKLSAgICBwYXJzZXIgPSBwYXJzZV9odG1sX2RlcHMuSFRNTE1vZHVsZVBhcnNlcigpCi0gICAgcGFyc2VyLlBhcnNlKGh0bWwpCi0KLSAgZGVmIHRlc3Rfc2NyaXB0X3dpdGhfc2NyaXB0X2luc2lkZV9hc19qcyhzZWxmKToKLSAgICBodG1sID0gIiIiPHNjcmlwdD4KLSAgICAgICAgICAgICAgdmFyIGh0bWxfbGluZXMgPSBbCi0gICAgICAgICAgICAgICAgJzxzY3JpcHQ+JywKLSAgICAgICAgICAgICAgICAnPFwvc2NyaXB0PicsCi0gICAgICAgICAgICAgIF07Ci0gICAgICAgICAgICAgIDwvc2NyaXB0PiIiIgotICAgIHBhcnNlciA9IHBhcnNlX2h0bWxfZGVwcy5IVE1MTW9kdWxlUGFyc2VyKCkKLSAgICBwYXJzZXIuUGFyc2UoaHRtbCkKLQotICBkZWYgdGVzdF9pbnZhbGlkX3NjcmlwdF9lc2NhcGluZ19yYWlzZXMoc2VsZik6Ci0gICAgaHRtbCA9ICIiIjxzY3JpcHQ+Ci0gICAgICAgICAgICAgIHZhciBodG1sX2xpbmVzID0gWwotICAgICAgICAgICAgICAgICc8c2NyaXB0PicsCi0gICAgICAgICAgICAgICAgJzwgL3NjcmlwdD4nLAotICAgICAgICAgICAgICBdOwotICAgICAgICAgICAgICA8L3NjcmlwdD4iIiIKLSAgICBwYXJzZXIgPSBwYXJzZV9odG1sX2RlcHMuSFRNTE1vZHVsZVBhcnNlcigpCi0KLSAgICBkZWYgRG9JdCgpOgotICAgICAgcGFyc2VyLlBhcnNlKGh0bWwpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBEb0l0KQotCi0gIGRlZiB0ZXN0X3NjcmlwdF93aXRoX2NkYXRhKHNlbGYpOgotICAgIGh0bWwgPSAiIiI8c2NyaXB0PjwvaDI+PC9zY3JpcHQ+IiIiCi0gICAgcGFyc2VyID0gcGFyc2VfaHRtbF9kZXBzLkhUTUxNb2R1bGVQYXJzZXIoKQotICAgIG1vZHVsZSA9IHBhcnNlci5QYXJzZShodG1sKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGxlbihtb2R1bGUuaW5saW5lX3NjcmlwdHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCc8L2gyPicsIG1vZHVsZS5pbmxpbmVfc2NyaXB0c1swXS5jb250ZW50cykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL3Byb2plY3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9wcm9qZWN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGY5Y2E0Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL3Byb2plY3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBvcwotaW1wb3J0IGNTdHJpbmdJTwotCi1mcm9tIHB5X3Z1bGNhbml6ZSBpbXBvcnQgcmVzb3VyY2VfbG9hZGVyCi0KLQotZGVmIF9GaW5kQWxsRmlsZXNSZWN1cnNpdmUoc291cmNlX3BhdGhzKToKLSAgYWxsX2ZpbGVuYW1lcyA9IHNldCgpCi0gIGZvciBzb3VyY2VfcGF0aCBpbiBzb3VyY2VfcGF0aHM6Ci0gICAgZm9yIGRpcnBhdGgsIF8sIGZpbGVuYW1lcyBpbiBvcy53YWxrKHNvdXJjZV9wYXRoKToKLSAgICAgIGZvciBmIGluIGZpbGVuYW1lczoKLSAgICAgICAgaWYgZi5zdGFydHN3aXRoKCcuJyk6Ci0gICAgICAgICAgY29udGludWUKLSAgICAgICAgeCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oZGlycGF0aCwgZikpCi0gICAgICAgIGFsbF9maWxlbmFtZXMuYWRkKHgpCi0gIHJldHVybiBhbGxfZmlsZW5hbWVzCi0KLQotY2xhc3MgQWJzRmlsZW5hbWVMaXN0KG9iamVjdCk6Ci0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbGxEaXJ0eUNhbGxiYWNrKToKLSAgICBzZWxmLl93aWxsRGlydHlDYWxsYmFjayA9IHdpbGxEaXJ0eUNhbGxiYWNrCi0gICAgc2VsZi5fZmlsZW5hbWVzID0gW10KLSAgICBzZWxmLl9maWxlbmFtZXNfc2V0ID0gc2V0KCkKLQotICBkZWYgX1dpbGxCZWNvbWVEaXJ0eShzZWxmKToKLSAgICBpZiBzZWxmLl93aWxsRGlydHlDYWxsYmFjazoKLSAgICAgIHNlbGYuX3dpbGxEaXJ0eUNhbGxiYWNrKCkKLQotICBkZWYgYXBwZW5kKHNlbGYsIGZpbGVuYW1lKToKLSAgICBhc3NlcnQgb3MucGF0aC5pc2FicyhmaWxlbmFtZSkKLSAgICBzZWxmLl9XaWxsQmVjb21lRGlydHkoKQotICAgIHNlbGYuX2ZpbGVuYW1lcy5hcHBlbmQoZmlsZW5hbWUpCi0gICAgc2VsZi5fZmlsZW5hbWVzX3NldC5hZGQoZmlsZW5hbWUpCi0KLSAgZGVmIGV4dGVuZChzZWxmLCBpdGVyYWJsZSk6Ci0gICAgc2VsZi5fV2lsbEJlY29tZURpcnR5KCkKLSAgICBmb3IgZmlsZW5hbWUgaW4gaXRlcmFibGU6Ci0gICAgICBhc3NlcnQgb3MucGF0aC5pc2FicyhmaWxlbmFtZSkKLSAgICAgIHNlbGYuX2ZpbGVuYW1lcy5hcHBlbmQoZmlsZW5hbWUpCi0gICAgICBzZWxmLl9maWxlbmFtZXNfc2V0LmFkZChmaWxlbmFtZSkKLQotICBkZWYgYXBwZW5kUmVsKHNlbGYsIGJhc2VkaXIsIGZpbGVuYW1lKToKLSAgICBhc3NlcnQgb3MucGF0aC5pc2FicyhiYXNlZGlyKQotICAgIHNlbGYuX1dpbGxCZWNvbWVEaXJ0eSgpCi0gICAgbiA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oYmFzZWRpciwgZmlsZW5hbWUpKQotICAgIHNlbGYuX2ZpbGVuYW1lcy5hcHBlbmQobikKLSAgICBzZWxmLl9maWxlbmFtZXNfc2V0LmFkZChuKQotCi0gIGRlZiBleHRlbmRSZWwoc2VsZiwgYmFzZWRpciwgaXRlcmFibGUpOgotICAgIHNlbGYuX1dpbGxCZWNvbWVEaXJ0eSgpCi0gICAgYXNzZXJ0IG9zLnBhdGguaXNhYnMoYmFzZWRpcikKLSAgICBmb3IgZmlsZW5hbWUgaW4gaXRlcmFibGU6Ci0gICAgICBuID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihiYXNlZGlyLCBmaWxlbmFtZSkpCi0gICAgICBzZWxmLl9maWxlbmFtZXMuYXBwZW5kKG4pCi0gICAgICBzZWxmLl9maWxlbmFtZXNfc2V0LmFkZChuKQotCi0gIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgeCk6Ci0gICAgcmV0dXJuIHggaW4gc2VsZi5fZmlsZW5hbWVzX3NldAotCi0gIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9maWxlbmFtZXMuX19sZW5fXygpCi0KLSAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgIHJldHVybiBpdGVyKHNlbGYuX2ZpbGVuYW1lcykKLQotICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgcmV0dXJuIHJlcHIoc2VsZi5fZmlsZW5hbWVzKQotCi0gIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgIHJldHVybiBzdHIoc2VsZi5fZmlsZW5hbWVzKQotCi0KLWNsYXNzIFByb2plY3Qob2JqZWN0KToKLQotICBweV92dWxjYW5pemVfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oCi0gICAgICBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nKSkKLQotICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlX3BhdGhzPU5vbmUpOgotICAgICIiIgotICAgIHNvdXJjZV9wYXRoczogQSBsaXN0IG9mIHRvcC1sZXZlbCBkaXJlY3RvcmllcyBpbiB3aGljaCBtb2R1bGVzIGFuZCByYXcKLSAgICAgICAgc2NyaXB0cyBjYW4gYmUgZm91bmQuIE1vZHVsZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlc2UgZGlyZWN0b3JpZXMuCi0gICAgIiIiCi0gICAgc2VsZi5fbG9hZGVyID0gTm9uZQotICAgIHNlbGYuX2Zyb3plbiA9IEZhbHNlCi0gICAgc2VsZi5zb3VyY2VfcGF0aHMgPSBBYnNGaWxlbmFtZUxpc3Qoc2VsZi5fV2lsbFBhcnRPZlBhdGhDaGFuZ2UpCi0KLSAgICBpZiBzb3VyY2VfcGF0aHMgaXMgbm90IE5vbmU6Ci0gICAgICBzZWxmLnNvdXJjZV9wYXRocy5leHRlbmQoc291cmNlX3BhdGhzKQotCi0gIGRlZiBGcmVlemUoc2VsZik6Ci0gICAgc2VsZi5fZnJvemVuID0gVHJ1ZQotCi0gIGRlZiBfV2lsbFBhcnRPZlBhdGhDaGFuZ2Uoc2VsZik6Ci0gICAgaWYgc2VsZi5fZnJvemVuOgotICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUaGUgcHJvamVjdCBpcyBmcm96ZW4uIFlvdSBjYW5ub3QgZWRpdCBpdCBub3cnKQotICAgIHNlbGYuX2xvYWRlciA9IE5vbmUKLQotICBAc3RhdGljbWV0aG9kCi0gIGRlZiBGcm9tRGljdChkKToKLSAgICByZXR1cm4gUHJvamVjdChkWydzb3VyY2VfcGF0aHMnXSkKLQotICBkZWYgQXNEaWN0KHNlbGYpOgotICAgIHJldHVybiB7Ci0gICAgICAgICdzb3VyY2VfcGF0aHMnOiBsaXN0KHNlbGYuc291cmNlX3BhdGhzKQotICAgIH0KLQotICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgcmV0dXJuICJQcm9qZWN0KCVzKSIgJSByZXByKHNlbGYuc291cmNlX3BhdGhzKQotCi0gIGRlZiBBZGRTb3VyY2VQYXRoKHNlbGYsIHBhdGgpOgotICAgIHNlbGYuc291cmNlX3BhdGhzLmFwcGVuZChwYXRoKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgbG9hZGVyKHNlbGYpOgotICAgIGlmIHNlbGYuX2xvYWRlciBpcyBOb25lOgotICAgICAgc2VsZi5fbG9hZGVyID0gcmVzb3VyY2VfbG9hZGVyLlJlc291cmNlTG9hZGVyKHNlbGYpCi0gICAgcmV0dXJuIHNlbGYuX2xvYWRlcgotCi0gIGRlZiBSZXNldExvYWRlcihzZWxmKToKLSAgICBzZWxmLl9sb2FkZXIgPSBOb25lCi0KLSAgZGVmIF9Mb2FkKHNlbGYsIGZpbGVuYW1lcyk6Ci0gICAgcmV0dXJuIFtzZWxmLmxvYWRlci5Mb2FkTW9kdWxlKG1vZHVsZV9maWxlbmFtZT1maWxlbmFtZSkgZm9yCi0gICAgICAgICAgICBmaWxlbmFtZSBpbiBmaWxlbmFtZXNdCi0KLSAgZGVmIExvYWRNb2R1bGUoc2VsZiwgbW9kdWxlX25hbWU9Tm9uZSwgbW9kdWxlX2ZpbGVuYW1lPU5vbmUpOgotICAgIHJldHVybiBzZWxmLmxvYWRlci5Mb2FkTW9kdWxlKG1vZHVsZV9uYW1lPW1vZHVsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9maWxlbmFtZT1tb2R1bGVfZmlsZW5hbWUpCi0KLSAgZGVmIENhbGNMb2FkU2VxdWVuY2VGb3JNb2R1bGVOYW1lcyhzZWxmLCBtb2R1bGVfbmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZWRfc2NyaXB0cz1Ob25lKToKLSAgICBtb2R1bGVzID0gW3NlbGYubG9hZGVyLkxvYWRNb2R1bGUobW9kdWxlX25hbWU9bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZWRfc2NyaXB0cz1leGNsdWRlZF9zY3JpcHRzKSBmb3IKLSAgICAgICAgICAgICAgIG5hbWUgaW4gbW9kdWxlX25hbWVzXQotICAgIHJldHVybiBzZWxmLkNhbGNMb2FkU2VxdWVuY2VGb3JNb2R1bGVzKG1vZHVsZXMpCi0KLSAgZGVmIENhbGNMb2FkU2VxdWVuY2VGb3JNb2R1bGVzKHNlbGYsIG1vZHVsZXMpOgotICAgIGFscmVhZHlfbG9hZGVkX3NldCA9IHNldCgpCi0gICAgbG9hZF9zZXF1ZW5jZSA9IFtdCi0gICAgZm9yIG0gaW4gbW9kdWxlczoKLSAgICAgIG0uQ29tcHV0ZUxvYWRTZXF1ZW5jZVJlY3Vyc2l2ZShsb2FkX3NlcXVlbmNlLCBhbHJlYWR5X2xvYWRlZF9zZXQpCi0gICAgcmV0dXJuIGxvYWRfc2VxdWVuY2UKLQotICBkZWYgR2V0RGVwc0dyYXBoRnJvbU1vZHVsZU5hbWVzKHNlbGYsIG1vZHVsZV9uYW1lcyk6Ci0gICAgbW9kdWxlcyA9IFtzZWxmLmxvYWRlci5Mb2FkTW9kdWxlKG1vZHVsZV9uYW1lPW5hbWUpIGZvcgotICAgICAgICAgICAgICAgbmFtZSBpbiBtb2R1bGVfbmFtZXNdCi0gICAgcmV0dXJuIHNlbGYuR2V0RGVwc0dyYXBoRnJvbU1vZHVsZXMobW9kdWxlcykKLQotICBkZWYgR2V0RGVwc0dyYXBoRnJvbU1vZHVsZXMoc2VsZiwgbW9kdWxlcyk6Ci0gICAgbG9hZF9zZXF1ZW5jZSA9IHNlbGYuQ2FsY0xvYWRTZXF1ZW5jZUZvck1vZHVsZXMobW9kdWxlcykKLSAgICBnID0gX0dyYXBoKCkKLSAgICBmb3IgbSBpbiBsb2FkX3NlcXVlbmNlOgotICAgICAgZy5BZGRNb2R1bGUobSkKLQotICAgICAgZm9yIGRlcCBpbiBtLmRlcGVuZGVudF9tb2R1bGVzOgotICAgICAgICBnLkFkZEVkZ2UobSwgZGVwLmlkKQotCi0gICAgIyBGSVhNRTogX0dldEdyYXBoIGlzIG5vdCBkZWZpbmVkLiBNYXliZSBgcmV0dXJuIGdgIGlzIGludGVuZGVkPwotICAgIHJldHVybiBfR2V0R3JhcGgobG9hZF9zZXF1ZW5jZSkKLQotICBkZWYgR2V0RG9taW5hdG9yR3JhcGhGb3JNb2R1bGVzTmFtZWQoc2VsZiwgbW9kdWxlX25hbWVzLCBsb2FkX3NlcXVlbmNlKToKLSAgICBtb2R1bGVzID0gW3NlbGYubG9hZGVyLkxvYWRNb2R1bGUobW9kdWxlX25hbWU9bmFtZSkKLSAgICAgICAgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZV9uYW1lc10KLSAgICByZXR1cm4gc2VsZi5HZXREb21pbmF0b3JHcmFwaEZvck1vZHVsZXMobW9kdWxlcywgbG9hZF9zZXF1ZW5jZSkKLQotICBkZWYgR2V0RG9taW5hdG9yR3JhcGhGb3JNb2R1bGVzKHNlbGYsIHN0YXJ0X21vZHVsZXMsIGxvYWRfc2VxdWVuY2UpOgotICAgIG1vZHVsZXNfYnlfaWQgPSB7fQotICAgIGZvciBtIGluIGxvYWRfc2VxdWVuY2U6Ci0gICAgICBtb2R1bGVzX2J5X2lkW20uaWRdID0gbQotCi0gICAgbW9kdWxlX3JlZmVycmVycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCi0gICAgZm9yIG0gaW4gbG9hZF9zZXF1ZW5jZToKLSAgICAgIGZvciBkZXAgaW4gbS5kZXBlbmRlbnRfbW9kdWxlczoKLSAgICAgICAgbW9kdWxlX3JlZmVycmVyc1tkZXBdLmFwcGVuZChtKQotCi0gICAgIyBOb3cgc3RhcnQgYXQgdGhlIHRvcCBtb2R1bGUgYW5kIHJldmVyc2UuCi0gICAgdmlzaXRlZCA9IHNldCgpCi0gICAgZyA9IF9HcmFwaCgpCi0KLSAgICBwZW5kaW5nID0gY29sbGVjdGlvbnMuZGVxdWUoKQotICAgIHBlbmRpbmcuZXh0ZW5kKHN0YXJ0X21vZHVsZXMpCi0gICAgd2hpbGUgbGVuKHBlbmRpbmcpOgotICAgICAgY3VyID0gcGVuZGluZy5wb3AoKQotCi0gICAgICBnLkFkZE1vZHVsZShjdXIpCi0gICAgICB2aXNpdGVkLmFkZChjdXIpCi0KLSAgICAgIGZvciBvdXRfZGVwIGluIG1vZHVsZV9yZWZlcnJlcnNbY3VyXToKLSAgICAgICAgaWYgb3V0X2RlcCBpbiB2aXNpdGVkOgotICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGcuQWRkRWRnZShvdXRfZGVwLCBjdXIpCi0gICAgICAgIHZpc2l0ZWQuYWRkKG91dF9kZXApCi0gICAgICAgIHBlbmRpbmcuYXBwZW5kKG91dF9kZXApCi0KLSAgICAjIFZpc2l0ZWQgLT4gRG90Ci0gICAgcmV0dXJuIGcuR2V0RG90KCkKLQotCi1jbGFzcyBfR3JhcGgob2JqZWN0KToKLQotICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgc2VsZi5ub2RlcyA9IFtdCi0gICAgc2VsZi5lZGdlcyA9IFtdCi0KLSAgZGVmIEFkZE1vZHVsZShzZWxmLCBtKToKLSAgICBmID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKLSAgICBtLkFwcGVuZEpTQ29udGVudHNUb0ZpbGUoZiwgRmFsc2UsIE5vbmUpCi0KLSAgICBhdHRycyA9IHsKLSAgICAgICAgJ2xhYmVsJzogJyVzICglaSknICUgKG0ubmFtZSwgZi50ZWxsKCkpCi0gICAgfQotCi0gICAgZi5jbG9zZSgpCi0KLSAgICBhdHRyX2l0ZW1zID0gWyclcz0iJXMiJyAlICh4LCB5KSBmb3IgeCwgeSBpbiBhdHRycy5pdGVyaXRlbXMoKV0KLSAgICBub2RlID0gJ00laSBbJXNdOycgJSAobS5pZCwgJywnLmpvaW4oYXR0cl9pdGVtcykpCi0gICAgc2VsZi5ub2Rlcy5hcHBlbmQobm9kZSkKLQotICBkZWYgQWRkRWRnZShzZWxmLCBtRnJvbSwgbVRvKToKLSAgICBlZGdlID0gJ00laSAtPiBNJWk7JyAlIChtRnJvbS5pZCwgbVRvLmlkKQotICAgIHNlbGYuZWRnZXMuYXBwZW5kKGVkZ2UpCi0KLSAgZGVmIEdldERvdChzZWxmKToKLSAgICByZXR1cm4gJ2RpZ3JhcGggZGVwcyB7XG5cbiVzXG5cbiVzXG59XG4nICUgKAotICAgICAgICAnXG4nLmpvaW4oc2VsZi5ub2RlcyksICdcbicuam9pbihzZWxmLmVkZ2VzKSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL3Jlc291cmNlLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvcmVzb3VyY2UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1M2RmZjkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvcmVzb3VyY2UucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIkEgUmVzb3VyY2UgaXMgYSBmaWxlIGFuZCBpdHMgdmFyaW91cyBhc3NvY2lhdGVkIGNhbm9uaWNhbCBuYW1lcy4iIiIKLQotaW1wb3J0IGNvZGVjcwotaW1wb3J0IG9zCi0KLQotY2xhc3MgUmVzb3VyY2Uob2JqZWN0KToKLSAgIiIiUmVwcmVzZW50cyBhIGZpbGUgZm91bmQgdmlhIGEgcGF0aCBzZWFyY2guIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHRvcGxldmVsX2RpciwgYWJzb2x1dGVfcGF0aCwgYmluYXJ5PUZhbHNlKToKLSAgICBzZWxmLnRvcGxldmVsX2RpciA9IHRvcGxldmVsX2RpcgotICAgIHNlbGYuYWJzb2x1dGVfcGF0aCA9IGFic29sdXRlX3BhdGgKLSAgICBzZWxmLl9jb250ZW50cyA9IE5vbmUKLSAgICBzZWxmLl9iaW5hcnkgPSBiaW5hcnkKLQotICBAcHJvcGVydHkKLSAgZGVmIHJlbGF0aXZlX3BhdGgoc2VsZik6Ci0gICAgIiIiVGhlIHBhdGggdG8gdGhlIGZpbGUgZnJvbSB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSIiIgotICAgIHJldHVybiBvcy5wYXRoLnJlbHBhdGgoc2VsZi5hYnNvbHV0ZV9wYXRoLCBzZWxmLnRvcGxldmVsX2RpcikKLQotICBAcHJvcGVydHkKLSAgZGVmIHVuaXhfc3R5bGVfcmVsYXRpdmVfcGF0aChzZWxmKToKLSAgICByZXR1cm4gc2VsZi5yZWxhdGl2ZV9wYXRoLnJlcGxhY2Uob3Muc2VwLCAnLycpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBuYW1lKHNlbGYpOgotICAgICIiIlRoZSBkb3R0ZWQgbmFtZSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpdHMgcmVsYXRpdmUgcGF0aC4iIiIKLSAgICByZXR1cm4gc2VsZi5uYW1lX2Zyb21fcmVsYXRpdmVfcGF0aChzZWxmLnJlbGF0aXZlX3BhdGgpCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgbmFtZV9mcm9tX3JlbGF0aXZlX3BhdGgocmVsYXRpdmVfcGF0aCk6Ci0gICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShyZWxhdGl2ZV9wYXRoKQotICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShyZWxhdGl2ZV9wYXRoKQotICAgIG1vZG5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGJhc2VuYW1lKVswXQotICAgIGlmIGxlbihkaXJuYW1lKToKLSAgICAgIG5hbWUgPSBkaXJuYW1lLnJlcGxhY2Uob3MucGF0aC5zZXAsICcuJykgKyAnLicgKyBtb2RuYW1lCi0gICAgZWxzZToKLSAgICAgIG5hbWUgPSBtb2RuYW1lCi0gICAgcmV0dXJuIG5hbWUKLQotICBAcHJvcGVydHkKLSAgZGVmIGNvbnRlbnRzKHNlbGYpOgotICAgIGlmIHNlbGYuX2NvbnRlbnRzOgotICAgICAgcmV0dXJuIHNlbGYuX2NvbnRlbnRzCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuYWJzb2x1dGVfcGF0aCk6Ci0gICAgICByYWlzZSBFeGNlcHRpb24oJyVzIG5vdCBmb3VuZC4nICUgc2VsZi5hYnNvbHV0ZV9wYXRoKQotICAgIGlmIHNlbGYuX2JpbmFyeToKLSAgICAgIGYgPSBvcGVuKHNlbGYuYWJzb2x1dGVfcGF0aCwgbW9kZT0ncmInKQotICAgIGVsc2U6Ci0gICAgICBmID0gY29kZWNzLm9wZW4oc2VsZi5hYnNvbHV0ZV9wYXRoLCBtb2RlPSdyJywgZW5jb2Rpbmc9J3V0Zi04JykKLSAgICBzZWxmLl9jb250ZW50cyA9IGYucmVhZCgpCi0gICAgZi5jbG9zZSgpCi0gICAgcmV0dXJuIHNlbGYuX2NvbnRlbnRzCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9yZXNvdXJjZV9sb2FkZXIucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9yZXNvdXJjZV9sb2FkZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNWFkYWEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvcmVzb3VyY2VfbG9hZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlJlc291cmNlRmluZGVyIGlzIGEgaGVscGVyIGNsYXNzIGZvciBmaW5kaW5nIHJlc291cmNlcyBnaXZlbiB0aGVpciBuYW1lLiIiIgotCi1pbXBvcnQgY29kZWNzCi1pbXBvcnQgb3MKLQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IG1vZHVsZQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IHN0eWxlX3NoZWV0IGFzIHN0eWxlX3NoZWV0X21vZHVsZQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IHJlc291cmNlIGFzIHJlc291cmNlX21vZHVsZQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IGh0bWxfbW9kdWxlCi1mcm9tIHB5X3Z1bGNhbml6ZSBpbXBvcnQgc3RyaXBfanNfY29tbWVudHMKLQotCi1jbGFzcyBSZXNvdXJjZUxvYWRlcihvYmplY3QpOgotICAiIiJNYW5nZXMgbG9hZGluZyBtb2R1bGVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgZnJvbSBmaWxlcy4KLQotICBNb2R1bGVzIGhhbmRsZSBwYXJzaW5nIGFuZCB0aGUgY29uc3RydWN0aW9uIG9mIHRoZWlyIGluZGl2aWR1YWwgZGVwZW5kZW5jeQotICBwb2ludGVycy4gVGhlIGxvYWRlciBkZWFscyB3aXRoIGJvb2trZWVwaW5nIG9mIHdoYXQgaGFzIGJlZW4gbG9hZGVkLCBhbmQKLSAgbWFwcGluZyBuYW1lcyB0byBmaWxlIHJlc291cmNlcy4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3QpOgotICAgIHNlbGYucHJvamVjdCA9IHByb2plY3QKLSAgICBzZWxmLnN0cmlwcGVkX2pzX2J5X2ZpbGVuYW1lID0ge30KLSAgICBzZWxmLmxvYWRlZF9tb2R1bGVzID0ge30KLSAgICBzZWxmLmxvYWRlZF9yYXdfc2NyaXB0cyA9IHt9Ci0gICAgc2VsZi5sb2FkZWRfc3R5bGVfc2hlZXRzID0ge30KLSAgICBzZWxmLmxvYWRlZF9pbWFnZXMgPSB7fQotCi0gIEBwcm9wZXJ0eQotICBkZWYgc291cmNlX3BhdGhzKHNlbGYpOgotICAgICIiIkEgbGlzdCBvZiBiYXNlIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgbW9kdWxlcyB1bmRlci4iIiIKLSAgICByZXR1cm4gc2VsZi5wcm9qZWN0LnNvdXJjZV9wYXRocwotCi0gIGRlZiBGaW5kUmVzb3VyY2Uoc2VsZiwgc29tZV9wYXRoLCBiaW5hcnk9RmFsc2UpOgotICAgICIiIkZpbmRzIGEgUmVzb3VyY2UgZm9yIHRoZSBnaXZlbiBwYXRoLgotCi0gICAgQXJnczoKLSAgICAgIHNvbWVfcGF0aDogQSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoIHRvIGEgZmlsZS4KLQotICAgIFJldHVybnM6Ci0gICAgICBBIFJlc291cmNlIG9yIE5vbmUuCi0gICAgIiIiCi0gICAgaWYgb3MucGF0aC5pc2Ficyhzb21lX3BhdGgpOgotICAgICAgcmV0dXJuIHNlbGYuRmluZFJlc291cmNlR2l2ZW5BYnNvbHV0ZVBhdGgoc29tZV9wYXRoLCBiaW5hcnkpCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBzZWxmLkZpbmRSZXNvdXJjZUdpdmVuUmVsYXRpdmVQYXRoKHNvbWVfcGF0aCwgYmluYXJ5KQotCi0gIGRlZiBGaW5kUmVzb3VyY2VHaXZlbkFic29sdXRlUGF0aChzZWxmLCBhYnNvbHV0ZV9wYXRoLCBiaW5hcnk9RmFsc2UpOgotICAgICIiIlJldHVybnMgYSBSZXNvdXJjZSBmb3IgdGhlIGdpdmVuIGFic29sdXRlIHBhdGguIiIiCi0gICAgY2FuZGlkYXRlX3BhdGhzID0gW10KLSAgICBmb3Igc291cmNlX3BhdGggaW4gc2VsZi5zb3VyY2VfcGF0aHM6Ci0gICAgICBpZiBhYnNvbHV0ZV9wYXRoLnN0YXJ0c3dpdGgoc291cmNlX3BhdGgpOgotICAgICAgICBjYW5kaWRhdGVfcGF0aHMuYXBwZW5kKHNvdXJjZV9wYXRoKQotICAgIGlmIGxlbihjYW5kaWRhdGVfcGF0aHMpID09IDA6Ci0gICAgICByZXR1cm4gTm9uZQotCi0gICAgIyBTb3J0IGJ5IGxlbmd0aC4gTG9uZ2VzdCBtYXRjaCB3aW5zLgotICAgIGNhbmRpZGF0ZV9wYXRocy5zb3J0KGxhbWJkYSB4LCB5OiBsZW4oeCkgLSBsZW4oeSkpCi0gICAgbG9uZ2VzdF9jYW5kaWRhdGUgPSBjYW5kaWRhdGVfcGF0aHNbLTFdCi0gICAgcmV0dXJuIHJlc291cmNlX21vZHVsZS5SZXNvdXJjZShsb25nZXN0X2NhbmRpZGF0ZSwgYWJzb2x1dGVfcGF0aCwgYmluYXJ5KQotCi0gIGRlZiBGaW5kUmVzb3VyY2VHaXZlblJlbGF0aXZlUGF0aChzZWxmLCByZWxhdGl2ZV9wYXRoLCBiaW5hcnk9RmFsc2UpOgotICAgICIiIlJldHVybnMgYSBSZXNvdXJjZSBmb3IgdGhlIGdpdmVuIHJlbGF0aXZlIHBhdGguIiIiCi0gICAgYWJzb2x1dGVfcGF0aCA9IE5vbmUKLSAgICBmb3Igc2NyaXB0X3BhdGggaW4gc2VsZi5zb3VyY2VfcGF0aHM6Ci0gICAgICBhYnNvbHV0ZV9wYXRoID0gb3MucGF0aC5qb2luKHNjcmlwdF9wYXRoLCByZWxhdGl2ZV9wYXRoKQotICAgICAgaWYgb3MucGF0aC5leGlzdHMoYWJzb2x1dGVfcGF0aCk6Ci0gICAgICAgIHJldHVybiByZXNvdXJjZV9tb2R1bGUuUmVzb3VyY2Uoc2NyaXB0X3BhdGgsIGFic29sdXRlX3BhdGgsIGJpbmFyeSkKLSAgICByZXR1cm4gTm9uZQotCi0gIGRlZiBfRmluZFJlc291cmNlR2l2ZW5OYW1lQW5kU3VmZml4KAotICAgICAgICBzZWxmLCByZXF1ZXN0ZWRfbmFtZSwgZXh0ZW5zaW9uLCByZXR1cm5fcmVzb3VyY2U9RmFsc2UpOgotICAgICIiIlNlYXJjaGVzIGZvciBhIGZpbGUgYW5kIHJlYWRzIGl0cyBjb250ZW50cy4KLQotICAgIEFyZ3M6Ci0gICAgICByZXF1ZXN0ZWRfbmFtZTogVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRoYXQgd2FzIHJlcXVlc3RlZC4KLSAgICAgIGV4dGVuc2lvbjogVGhlIGV4dGVuc2lvbiBmb3IgdGhpcyByZXF1ZXN0ZWQgcmVzb3VyY2UuCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSAocGF0aCwgY29udGVudHMpIHBhaXIuCi0gICAgIiIiCi0gICAgcGF0aHlfbmFtZSA9IHJlcXVlc3RlZF9uYW1lLnJlcGxhY2UoJy4nLCBvcy5zZXApCi0gICAgZmlsZW5hbWUgPSBwYXRoeV9uYW1lICsgZXh0ZW5zaW9uCi0KLSAgICByZXNvdXJjZSA9IHNlbGYuRmluZFJlc291cmNlR2l2ZW5SZWxhdGl2ZVBhdGgoZmlsZW5hbWUpCi0gICAgaWYgcmV0dXJuX3Jlc291cmNlOgotICAgICAgcmV0dXJuIHJlc291cmNlCi0gICAgaWYgbm90IHJlc291cmNlOgotICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKLSAgICByZXR1cm4gX3JlYWRfZmlsZShyZXNvdXJjZS5hYnNvbHV0ZV9wYXRoKQotCi0gIGRlZiBGaW5kTW9kdWxlUmVzb3VyY2Uoc2VsZiwgcmVxdWVzdGVkX21vZHVsZV9uYW1lKToKLSAgICAiIiJGaW5kcyBhIG1vZHVsZSBqYXZhc2NyaXB0IGZpbGUgYW5kIHJldHVybnMgYSBSZXNvdXJjZSwgb3Igbm9uZS4iIiIKLSAgICBqc19yZXNvdXJjZSA9IHNlbGYuX0ZpbmRSZXNvdXJjZUdpdmVuTmFtZUFuZFN1ZmZpeCgKLSAgICAgICAgcmVxdWVzdGVkX21vZHVsZV9uYW1lLCAnLmpzJywgcmV0dXJuX3Jlc291cmNlPVRydWUpCi0gICAgaHRtbF9yZXNvdXJjZSA9IHNlbGYuX0ZpbmRSZXNvdXJjZUdpdmVuTmFtZUFuZFN1ZmZpeCgKLSAgICAgICAgcmVxdWVzdGVkX21vZHVsZV9uYW1lLCAnLmh0bWwnLCByZXR1cm5fcmVzb3VyY2U9VHJ1ZSkKLSAgICBpZiBqc19yZXNvdXJjZSBhbmQgaHRtbF9yZXNvdXJjZToKLSAgICAgIGlmIGh0bWxfbW9kdWxlLklzSFRNTFJlc291cmNlVGhlTW9kdWxlR2l2ZW5Db25mbGljdGluZ1Jlc291cmNlTmFtZXMoCi0gICAgICAgICAganNfcmVzb3VyY2UsIGh0bWxfcmVzb3VyY2UpOgotICAgICAgICByZXR1cm4gaHRtbF9yZXNvdXJjZQotICAgICAgcmV0dXJuIGpzX3Jlc291cmNlCi0gICAgZWxpZiBqc19yZXNvdXJjZToKLSAgICAgIHJldHVybiBqc19yZXNvdXJjZQotICAgIHJldHVybiBodG1sX3Jlc291cmNlCi0KLSAgZGVmIExvYWRNb2R1bGUoc2VsZiwgbW9kdWxlX25hbWU9Tm9uZSwgbW9kdWxlX2ZpbGVuYW1lPU5vbmUsCi0gICAgICAgICAgICAgICAgIGV4Y2x1ZGVkX3NjcmlwdHM9Tm9uZSk6Ci0gICAgYXNzZXJ0IGJvb2wobW9kdWxlX25hbWUpIF4gYm9vbChtb2R1bGVfZmlsZW5hbWUpLCAoCi0gICAgICAgICdNdXN0IHByb3ZpZGUgZWl0aGVyIG1vZHVsZV9uYW1lIG9yIG1vZHVsZV9maWxlbmFtZS4nKQotICAgIGlmIG1vZHVsZV9maWxlbmFtZToKLSAgICAgIHJlc291cmNlID0gc2VsZi5GaW5kUmVzb3VyY2UobW9kdWxlX2ZpbGVuYW1lKQotICAgICAgaWYgbm90IHJlc291cmNlOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0NvdWxkIG5vdCBmaW5kICVzIGluICVzJyAlICgKLSAgICAgICAgICAgIG1vZHVsZV9maWxlbmFtZSwgcmVwcihzZWxmLnNvdXJjZV9wYXRocykpKQotICAgICAgbW9kdWxlX25hbWUgPSByZXNvdXJjZS5uYW1lCi0gICAgZWxzZToKLSAgICAgIHJlc291cmNlID0gTm9uZSAgIyBXaWxsIGJlIHNldCBpZiB3ZSBlbmQgdXAgbmVlZGluZyB0byBsb2FkLgotCi0gICAgaWYgbW9kdWxlX25hbWUgaW4gc2VsZi5sb2FkZWRfbW9kdWxlczoKLSAgICAgIGFzc2VydCBzZWxmLmxvYWRlZF9tb2R1bGVzW21vZHVsZV9uYW1lXS5jb250ZW50cwotICAgICAgcmV0dXJuIHNlbGYubG9hZGVkX21vZHVsZXNbbW9kdWxlX25hbWVdCi0KLSAgICBpZiBub3QgcmVzb3VyY2U6ICAjIGhhcHBlbnMgd2hlbiBtb2R1bGVfbmFtZSB3YXMgZ2l2ZW4KLSAgICAgIHJlc291cmNlID0gc2VsZi5GaW5kTW9kdWxlUmVzb3VyY2UobW9kdWxlX25hbWUpCi0gICAgICBpZiBub3QgcmVzb3VyY2U6Ci0gICAgICAgIHJhaXNlIG1vZHVsZS5EZXBzRXhjZXB0aW9uKCdObyByZXNvdXJjZSBmb3IgbW9kdWxlICIlcyInICUgbW9kdWxlX25hbWUpCi0KLSAgICBtID0gaHRtbF9tb2R1bGUuSFRNTE1vZHVsZShzZWxmLCBtb2R1bGVfbmFtZSwgcmVzb3VyY2UpCi0gICAgc2VsZi5sb2FkZWRfbW9kdWxlc1ttb2R1bGVfbmFtZV0gPSBtCi0KLSAgICAjIEZha2UgaXQsIHRoaXMgaXMgcHJvYmFibHkgZWl0aGVyIHBvbHltZXIubWluLmpzIG9yIHBsYXRmb3JtLmpzIHdoaWNoIGFyZQotICAgICMgYWN0dWFsbHkgLmpzIGZpbGVzLi4uLgotICAgIGlmIHJlc291cmNlLmFic29sdXRlX3BhdGguZW5kc3dpdGgoJy5qcycpOgotICAgICAgcmV0dXJuIG0KLQotICAgIG0uUGFyc2UoZXhjbHVkZWRfc2NyaXB0cykKLSAgICBtLkxvYWQoZXhjbHVkZWRfc2NyaXB0cykKLSAgICByZXR1cm4gbQotCi0gIGRlZiBMb2FkUmF3U2NyaXB0KHNlbGYsIHJlbGF0aXZlX3Jhd19zY3JpcHRfcGF0aCk6Ci0gICAgcmVzb3VyY2UgPSBOb25lCi0gICAgZm9yIHNvdXJjZV9wYXRoIGluIHNlbGYuc291cmNlX3BhdGhzOgotICAgICAgcG9zc2libGVfYWJzb2x1dGVfcGF0aCA9IG9zLnBhdGguam9pbigKLSAgICAgICAgICBzb3VyY2VfcGF0aCwgb3MucGF0aC5ub3JtcGF0aChyZWxhdGl2ZV9yYXdfc2NyaXB0X3BhdGgpKQotICAgICAgaWYgb3MucGF0aC5leGlzdHMocG9zc2libGVfYWJzb2x1dGVfcGF0aCk6Ci0gICAgICAgIHJlc291cmNlID0gcmVzb3VyY2VfbW9kdWxlLlJlc291cmNlKAotICAgICAgICAgICAgc291cmNlX3BhdGgsIHBvc3NpYmxlX2Fic29sdXRlX3BhdGgpCi0gICAgICAgIGJyZWFrCi0gICAgaWYgbm90IHJlc291cmNlOgotICAgICAgcmFpc2UgbW9kdWxlLkRlcHNFeGNlcHRpb24oCi0gICAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIGEgZmlsZSBmb3IgcmF3IHNjcmlwdCAlcyBpbiAlcycgJQotICAgICAgICAgIChyZWxhdGl2ZV9yYXdfc2NyaXB0X3BhdGgsIHNlbGYuc291cmNlX3BhdGhzKSkKLSAgICBhc3NlcnQgcmVsYXRpdmVfcmF3X3NjcmlwdF9wYXRoID09IHJlc291cmNlLnVuaXhfc3R5bGVfcmVsYXRpdmVfcGF0aCwgKAotICAgICAgICAnRXhwZWN0ZWQgJXMgPT0gJXMnICUgKHJlbGF0aXZlX3Jhd19zY3JpcHRfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS51bml4X3N0eWxlX3JlbGF0aXZlX3BhdGgpKQotCi0gICAgaWYgcmVzb3VyY2UuYWJzb2x1dGVfcGF0aCBpbiBzZWxmLmxvYWRlZF9yYXdfc2NyaXB0czoKLSAgICAgIHJldHVybiBzZWxmLmxvYWRlZF9yYXdfc2NyaXB0c1tyZXNvdXJjZS5hYnNvbHV0ZV9wYXRoXQotCi0gICAgcmF3X3NjcmlwdCA9IG1vZHVsZS5SYXdTY3JpcHQocmVzb3VyY2UpCi0gICAgc2VsZi5sb2FkZWRfcmF3X3NjcmlwdHNbcmVzb3VyY2UuYWJzb2x1dGVfcGF0aF0gPSByYXdfc2NyaXB0Ci0gICAgcmV0dXJuIHJhd19zY3JpcHQKLQotICBkZWYgTG9hZFN0eWxlU2hlZXQoc2VsZiwgbmFtZSk6Ci0gICAgaWYgbmFtZSBpbiBzZWxmLmxvYWRlZF9zdHlsZV9zaGVldHM6Ci0gICAgICByZXR1cm4gc2VsZi5sb2FkZWRfc3R5bGVfc2hlZXRzW25hbWVdCi0KLSAgICByZXNvdXJjZSA9IHNlbGYuX0ZpbmRSZXNvdXJjZUdpdmVuTmFtZUFuZFN1ZmZpeCgKLSAgICAgICAgbmFtZSwgJy5jc3MnLCByZXR1cm5fcmVzb3VyY2U9VHJ1ZSkKLSAgICBpZiBub3QgcmVzb3VyY2U6Ci0gICAgICByYWlzZSBtb2R1bGUuRGVwc0V4Y2VwdGlvbigKLSAgICAgICAgICAnQ291bGQgbm90IGZpbmQgYSBmaWxlIGZvciBzdHlsZXNoZWV0ICVzJyAlIG5hbWUpCi0KLSAgICBzdHlsZV9zaGVldCA9IHN0eWxlX3NoZWV0X21vZHVsZS5TdHlsZVNoZWV0KHNlbGYsIG5hbWUsIHJlc291cmNlKQotICAgIHN0eWxlX3NoZWV0LmxvYWQoKQotICAgIHNlbGYubG9hZGVkX3N0eWxlX3NoZWV0c1tuYW1lXSA9IHN0eWxlX3NoZWV0Ci0gICAgcmV0dXJuIHN0eWxlX3NoZWV0Ci0KLSAgZGVmIExvYWRJbWFnZShzZWxmLCBhYnNfcGF0aCk6Ci0gICAgaWYgYWJzX3BhdGggaW4gc2VsZi5sb2FkZWRfaW1hZ2VzOgotICAgICAgcmV0dXJuIHNlbGYubG9hZGVkX2ltYWdlc1thYnNfcGF0aF0KLQotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhYnNfcGF0aCk6Ci0gICAgICByYWlzZSBtb2R1bGUuRGVwc0V4Y2VwdGlvbigidXJsKCclcycpIGRpZCBub3QgZXhpc3QiICUgYWJzX3BhdGgpCi0KLSAgICByZXMgPSBzZWxmLkZpbmRSZXNvdXJjZUdpdmVuQWJzb2x1dGVQYXRoKGFic19wYXRoLCBiaW5hcnk9VHJ1ZSkKLSAgICBpZiByZXMgaXMgTm9uZToKLSAgICAgIHJhaXNlIG1vZHVsZS5EZXBzRXhjZXB0aW9uKCJ1cmwoJyVzJykgd2FzIG5vdCBpbiBzZWFyY2ggcGF0aCIgJSBhYnNfcGF0aCkKLQotICAgIGltYWdlID0gc3R5bGVfc2hlZXRfbW9kdWxlLkltYWdlKHJlcykKLSAgICBzZWxmLmxvYWRlZF9pbWFnZXNbYWJzX3BhdGhdID0gaW1hZ2UKLSAgICByZXR1cm4gaW1hZ2UKLQotICBkZWYgR2V0U3RyaXBwZWRKU0ZvckZpbGVuYW1lKHNlbGYsIGZpbGVuYW1lLCBlYXJseV9vdXRfaWZfbm9fcHlfdnVsY2FuaXplKToKLSAgICBpZiBmaWxlbmFtZSBpbiBzZWxmLnN0cmlwcGVkX2pzX2J5X2ZpbGVuYW1lOgotICAgICAgcmV0dXJuIHNlbGYuc3RyaXBwZWRfanNfYnlfZmlsZW5hbWVbZmlsZW5hbWVdCi0KLSAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgZjoKLSAgICAgIGNvbnRlbnRzID0gZi5yZWFkKDQwOTYpCi0gICAgaWYgZWFybHlfb3V0X2lmX25vX3B5X3Z1bGNhbml6ZSBhbmQgKCdweV92dWxjYW5pemUnIG5vdCBpbiBjb250ZW50cyk6Ci0gICAgICByZXR1cm4gTm9uZQotCi0gICAgcyA9IHN0cmlwX2pzX2NvbW1lbnRzLlN0cmlwSlNDb21tZW50cyhjb250ZW50cykKLSAgICBzZWxmLnN0cmlwcGVkX2pzX2J5X2ZpbGVuYW1lW2ZpbGVuYW1lXSA9IHMKLSAgICByZXR1cm4gcwotCi0KLWRlZiBfcmVhZF9maWxlKGFic29sdXRlX3BhdGgpOgotICAiIiJSZWFkcyBhIGZpbGUgYW5kIHJldHVybnMgYSAocGF0aCwgY29udGVudHMpIHBhaXIuCi0KLSAgQXJnczoKLSAgICBhYnNvbHV0ZV9wYXRoOiBBYnNvbHV0ZSBwYXRoIHRvIGEgZmlsZS4KLQotICBSYWlzZXM6Ci0gICAgRXhjZXB0aW9uOiBUaGUgZ2l2ZW4gZmlsZSBkb2Vzbid0IGV4aXN0LgotICAgIElPRXJyb3I6IFRoZXJlIHdhcyBhIHByb2JsZW0gb3BlbmluZyBvciByZWFkaW5nIHRoZSBmaWxlLgotICAiIiIKLSAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFic29sdXRlX3BhdGgpOgotICAgIHJhaXNlIEV4Y2VwdGlvbignJXMgbm90IGZvdW5kLicgJSBhYnNvbHV0ZV9wYXRoKQotICBmID0gY29kZWNzLm9wZW4oYWJzb2x1dGVfcGF0aCwgbW9kZT0ncicsIGVuY29kaW5nPSd1dGYtOCcpCi0gIGNvbnRlbnRzID0gZi5yZWFkKCkKLSAgZi5jbG9zZSgpCi0gIHJldHVybiBhYnNvbHV0ZV9wYXRoLCBjb250ZW50cwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvcmVzb3VyY2VfdW5pdHRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9yZXNvdXJjZV91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRhMjM1NS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9yZXNvdXJjZV91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IHJlc291cmNlCi0KLQotY2xhc3MgUmVzb3VyY2VVbml0dGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RCYXNpYyhzZWxmKToKLSAgICByID0gcmVzb3VyY2UuUmVzb3VyY2UoJy9hJywgJy9hL2IvYy5qcycpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2IuYycsIHIubmFtZSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhvcy5wYXRoLmpvaW4oJ2InLCAnYy5qcycpLCByLnJlbGF0aXZlX3BhdGgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2IvYy5qcycsIHIudW5peF9zdHlsZV9yZWxhdGl2ZV9wYXRoKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvc3RyaXBfanNfY29tbWVudHMucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9zdHJpcF9qc19jb21tZW50cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYzYzY2Ny4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9zdHJpcF9qc19jb21tZW50cy5weQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiVXRpbGl0eSBmdW5jdGlvbiBmb3Igc3RyaXBwaW5nIGNvbW1lbnRzIG91dCBvZiBKYXZhU2NyaXB0IHNvdXJjZSBjb2RlLiIiIgotCi1pbXBvcnQgcmUKLQotCi1kZWYgX1Rva2VuaXplSlModGV4dCk6Ci0gICIiIlNwbGl0cyBzb3VyY2UgY29kZSB0ZXh0IGludG8gc2VnbWVudHMgaW4gcHJlcGFyYXRpb24gZm9yIGNvbW1lbnQgc3RyaXBwaW5nLgotCi0gIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgdG9rZW5pemUgZm9yIHBhcnNpbmcuIFRoZXJlIGlzIG5vIG5vdGlvbiBvZiBzdGF0ZW1lbnRzLAotICB2YXJpYWJsZXMsIGV0Yy4gVGhlIG9ubHkgdG9rZW5zIG9mIGludGVyZXN0IGFyZSBjb21tZW50LXJlbGF0ZWQgdG9rZW5zLgotCi0gIEFyZ3M6Ci0gICAgdGV4dDogVGhlIGNvbnRlbnRzIG9mIGEgSmF2YVNjcmlwdCBmaWxlLgotCi0gIFlpZWxkczoKLSAgICBBIHN1Y2Nlc3Npb24gb2Ygc3RyaW5ncyBpbiB0aGUgZmlsZSwgaW5jbHVkaW5nIGFsbCBjb21tZW50LXJlbGF0ZWQgc3ltYm9scy4KLSAgIiIiCi0gIHJlc3QgPSB0ZXh0Ci0gIHRva2VucyA9IFsnLy8nLCAnLyonLCAnKi8nLCAnXG4nXQotICBuZXh0X3RvayA9IHJlLmNvbXBpbGUoJ3wnLmpvaW4ocmUuZXNjYXBlKHgpIGZvciB4IGluIHRva2VucykpCi0gIHdoaWxlIGxlbihyZXN0KToKLSAgICBtID0gbmV4dF90b2suc2VhcmNoKHJlc3QpCi0gICAgaWYgbm90IG06Ci0gICAgICAjIGVuZCBvZiBzdHJpbmcKLSAgICAgIHlpZWxkIHJlc3QKLSAgICAgIHJldHVybgotICAgIG1pbl9pbmRleCA9IG0uc3RhcnQoKQotICAgIGVuZF9pbmRleCA9IG0uZW5kKCkKLQotICAgIGlmIG1pbl9pbmRleCA+IDA6Ci0gICAgICB5aWVsZCByZXN0WzptaW5faW5kZXhdCi0KLSAgICB5aWVsZCByZXN0W21pbl9pbmRleDplbmRfaW5kZXhdCi0gICAgcmVzdCA9IHJlc3RbZW5kX2luZGV4Ol0KLQotCi1kZWYgU3RyaXBKU0NvbW1lbnRzKHRleHQpOgotICAiIiJTdHJpcHMgY29tbWVudHMgb3V0IG9mIEphdmFTY3JpcHQgc291cmNlIGNvZGUuCi0KLSAgQXJnczoKLSAgICB0ZXh0OiBKYXZhU2NyaXB0IHNvdXJjZSB0ZXh0LgotCi0gIFJldHVybnM6Ci0gICAgSmF2YVNjcmlwdCBzb3VyY2UgdGV4dCB3aXRoIGNvbW1lbnRzIHN0cmlwcGVkIG91dC4KLSAgIiIiCi0gIHJlc3VsdF90b2tlbnMgPSBbXQotICB0b2tlbl9zdHJlYW0gPSBfVG9rZW5pemVKUyh0ZXh0KS5fX2l0ZXJfXygpCi0gIHdoaWxlIFRydWU6Ci0gICAgdHJ5OgotICAgICAgdCA9IHRva2VuX3N0cmVhbS5uZXh0KCkKLSAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgIGJyZWFrCi0KLSAgICBpZiB0ID09ICcvLyc6Ci0gICAgICB3aGlsZSBUcnVlOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgdDIgPSB0b2tlbl9zdHJlYW0ubmV4dCgpCi0gICAgICAgICAgaWYgdDIgPT0gJ1xuJzoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgIGJyZWFrCi0gICAgZWxpZiB0ID09ICcvKic6Ci0gICAgICBuZXN0aW5nID0gMQotICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgIHQyID0gdG9rZW5fc3RyZWFtLm5leHQoKQotICAgICAgICAgIGlmIHQyID09ICcvKic6Ci0gICAgICAgICAgICBuZXN0aW5nICs9IDEKLSAgICAgICAgICBlbGlmIHQyID09ICcqLyc6Ci0gICAgICAgICAgICBuZXN0aW5nIC09IDEKLSAgICAgICAgICAgIGlmIG5lc3RpbmcgPT0gMDoKLSAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgYnJlYWsKLSAgICBlbHNlOgotICAgICAgcmVzdWx0X3Rva2Vucy5hcHBlbmQodCkKLSAgcmV0dXJuICcnLmpvaW4ocmVzdWx0X3Rva2VucykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL3N0cmlwX2pzX2NvbW1lbnRzX3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvc3RyaXBfanNfY29tbWVudHNfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NWNiODIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvc3RyaXBfanNfY29tbWVudHNfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlRlc3RzIGZvciBzdHJpcF9qc19jb21tZW50cyBtb2R1bGUuIiIiCi0KLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHB5X3Z1bGNhbml6ZSBpbXBvcnQgc3RyaXBfanNfY29tbWVudHMKLQotCi0jIFRoaXMgdGVzdCBjYXNlIHRlc3RzIGEgcHJvdGVjdGVkIG1ldGhvZC4KLSMgcHlsaW50OiBkaXNhYmxlPVcwMjEyCi1jbGFzcyBKYXZhU2NyaXB0U3RyaXBDb21tZW50VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAiIiJUZXN0IGNhc2UgZm9yIF9zdHJpcF9qc19jb21tZW50cyBhbmQgX1Rva2VuaXplSlMuIiIiCi0KLSAgZGVmIHRlc3Rfc3RyaXBfY29tbWVudHMoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICdBICcsIHN0cmlwX2pzX2NvbW1lbnRzLlN0cmlwSlNDb21tZW50cygnQSAvLyBmb28nKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgJ0EgYmFyJywgc3RyaXBfanNfY29tbWVudHMuU3RyaXBKU0NvbW1lbnRzKCdBIC8vIGZvb1xuYmFyJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICdBICBiJywgc3RyaXBfanNfY29tbWVudHMuU3RyaXBKU0NvbW1lbnRzKCdBIC8qIGZvbyAqLyBiJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICdBICBiJywgc3RyaXBfanNfY29tbWVudHMuU3RyaXBKU0NvbW1lbnRzKCdBIC8qIGZvb1xuICovIGInKSkKLQotICBkZWYgdGVzdF90b2tlbml6ZV9lbXB0eShzZWxmKToKLSAgICB0b2tlbnMgPSBsaXN0KHN0cmlwX2pzX2NvbW1lbnRzLl9Ub2tlbml6ZUpTKCcnKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwgdG9rZW5zKQotCi0gIGRlZiB0ZXN0X3Rva2VuaXplX25sKHNlbGYpOgotICAgIHRva2VucyA9IGxpc3Qoc3RyaXBfanNfY29tbWVudHMuX1Rva2VuaXplSlMoJ1xuJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoWydcbiddLCB0b2tlbnMpCi0KLSAgZGVmIHRlc3RfdG9rZW5pemVfc2xhc2hzbGFzaF9jb21tZW50KHNlbGYpOgotICAgIHRva2VucyA9IGxpc3Qoc3RyaXBfanNfY29tbWVudHMuX1Rva2VuaXplSlMoJ0EgLy8gZm9vJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoWydBICcsICcvLycsICcgZm9vJ10sIHRva2VucykKLQotICBkZWYgdGVzdF90b2tlbml6ZV9zbGFzaHNsYXNoX2NvbW1lbnRfdGhlbl9uZXdsaW5lKHNlbGYpOgotICAgIHRva2VucyA9IGxpc3Qoc3RyaXBfanNfY29tbWVudHMuX1Rva2VuaXplSlMoJ0EgLy8gZm9vXG5iYXInKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhbJ0EgJywgJy8vJywgJyBmb28nLCAnXG4nLCAnYmFyJ10sIHRva2VucykKLQotICBkZWYgdGVzdF90b2tlbml6ZV9jc3R5bGVfY29tbWVudF9vbmVfbGluZShzZWxmKToKLSAgICB0b2tlbnMgPSBsaXN0KHN0cmlwX2pzX2NvbW1lbnRzLl9Ub2tlbml6ZUpTKCdBIC8qIGZvbyAqLycpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnQSAnLCAnLyonLCAnIGZvbyAnLCAnKi8nXSwgdG9rZW5zKQotCi0gIGRlZiB0ZXN0X3Rva2VuaXplX2NzdHlsZV9jb21tZW50X211bHRpX2xpbmUoc2VsZik6Ci0gICAgdG9rZW5zID0gbGlzdChzdHJpcF9qc19jb21tZW50cy5fVG9rZW5pemVKUygnQSAvKiBmb29cbipiYXJcbiovJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoWydBICcsICcvKicsICcgZm9vJywgJ1xuJywgJypiYXInLCAnXG4nLCAnKi8nXSwgdG9rZW5zKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS9weV92dWxjYW5pemUvc3R5bGVfc2hlZXQucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9zdHlsZV9zaGVldC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMzODc2Mi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9zdHlsZV9zaGVldC5weQorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBiYXNlNjQKLWltcG9ydCBvcwotaW1wb3J0IHJlCi0KLQotY2xhc3MgSW1hZ2Uob2JqZWN0KToKLQotICBkZWYgX19pbml0X18oc2VsZiwgcmVzb3VyY2UpOgotICAgIHNlbGYucmVzb3VyY2UgPSByZXNvdXJjZQotICAgIHNlbGYuYWxpYXNlcyA9IFtdCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiByZWxhdGl2ZV9wYXRoKHNlbGYpOgotICAgIHJldHVybiBzZWxmLnJlc291cmNlLnJlbGF0aXZlX3BhdGgKLQotICBAcHJvcGVydHkKLSAgZGVmIGFic29sdXRlX3BhdGgoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYucmVzb3VyY2UuYWJzb2x1dGVfcGF0aAotCi0gIEBwcm9wZXJ0eQotICBkZWYgY29udGVudHMoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYucmVzb3VyY2UuY29udGVudHMKLQotCi1jbGFzcyBQYXJzZWRTdHlsZVNoZWV0KG9iamVjdCk6Ci0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGxvYWRlciwgY29udGFpbmluZ19kaXJuYW1lLCBjb250ZW50cyk6Ci0gICAgc2VsZi5sb2FkZXIgPSBsb2FkZXIKLSAgICBzZWxmLmNvbnRlbnRzID0gY29udGVudHMKLSAgICBzZWxmLl9pbWFnZXMgPSBOb25lCi0gICAgc2VsZi5fTG9hZChjb250YWluaW5nX2Rpcm5hbWUpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBpbWFnZXMoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX2ltYWdlcwotCi0gIGRlZiBBcHBlbmREaXJlY3RseURlcGVuZGVudEZpbGVuYW1lc1RvKHNlbGYsIGRlcGVuZGVudF9maWxlbmFtZXMpOgotICAgIGZvciBpIGluIHNlbGYuaW1hZ2VzOgotICAgICAgZGVwZW5kZW50X2ZpbGVuYW1lcy5hcHBlbmQoaS5yZXNvdXJjZS5hYnNvbHV0ZV9wYXRoKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgY29udGVudHNfd2l0aF9pbmxpbmVkX2ltYWdlcyhzZWxmKToKLSAgICBpbWFnZXNfYnlfdXJsID0ge30KLSAgICBmb3IgaSBpbiBzZWxmLmltYWdlczoKLSAgICAgIGZvciBhIGluIGkuYWxpYXNlczoKLSAgICAgICAgaW1hZ2VzX2J5X3VybFthXSA9IGkKLQotICAgIGRlZiBJbmxpbmVVcmwobSk6Ci0gICAgICB1cmwgPSBtLmdyb3VwKCd1cmwnKQotICAgICAgaW1hZ2UgPSBpbWFnZXNfYnlfdXJsW3VybF0KLQotICAgICAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChpbWFnZS5hYnNvbHV0ZV9wYXRoKVsxXQotICAgICAgZGF0YSA9IGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoaW1hZ2UuY29udGVudHMpCi0KLSAgICAgIHJldHVybiAndXJsKGRhdGE6aW1hZ2UvJXM7YmFzZTY0LCVzKScgJSAoZXh0WzE6XSwgZGF0YSkKLQotICAgICMgSSdtIGFzc3VtaW5nIHdlIG9ubHkgaGF2ZSB1cmwoKSdzIGFzc29jaWF0ZWQgd2l0aCBpbWFnZXMKLSAgICByZXR1cm4gcmUuc3ViKCd1cmxcKCg/UDxxdW90ZT4ifFwnfCkoP1A8dXJsPlteIlwnKCldKikoP1A9cXVvdGUpXCknLAotICAgICAgICAgICAgICAgICAgSW5saW5lVXJsLCBzZWxmLmNvbnRlbnRzKQotCi0gIGRlZiBBcHBlbmREaXJlY3RseURlcGVuZGVudEZpbGVuYW1lc1RvKHNlbGYsIGRlcGVuZGVudF9maWxlbmFtZXMpOgotICAgIGZvciBpIGluIHNlbGYuaW1hZ2VzOgotICAgICAgZGVwZW5kZW50X2ZpbGVuYW1lcy5hcHBlbmQoaS5yZXNvdXJjZS5hYnNvbHV0ZV9wYXRoKQotCi0gIGRlZiBfTG9hZChzZWxmLCBjb250YWluaW5nX2Rpcm5hbWUpOgotICAgIGlmIHNlbGYuY29udGVudHMuZmluZCgnQGltcG9ydCcpICE9IC0xOgotICAgICAgcmFpc2UgRXhjZXB0aW9uKCdAaW1wb3J0cyBhcmUgbm90IHN1cHBvcnRlZCcpCi0KLSAgICBtYXRjaGVzID0gcmUuZmluZGFsbCgKLSAgICAgICAgJ3VybFwoKD86WyJ8XCddPykoW14iXCcoKV0qKSg/OlsifFwnXT8pXCknLAotICAgICAgICBzZWxmLmNvbnRlbnRzKQotCi0gICAgZGVmIHJlc29sdmVfdXJsKHVybCk6Ci0gICAgICBpZiBvcy5wYXRoLmlzYWJzKHVybCk6Ci0gICAgICAgICMgRklYTUU6IG1vZHVsZSBpcyB1c2VkIGhlcmUsIGJ1dCBweV92dWxjYW5pemUubW9kdWxlIGlzIG5ldmVyIGltcG9ydGVkLgotICAgICAgICAjIEhvd2V2ZXIsIHB5X3Z1bGNhbml6ZS5tb2R1bGUgY2Fubm90IGJlIGltcG9ydGVkIHNpbmNlIHB5X3Z1bGNhbml6ZS5tb2R1bGUgbWF5IGltcG9ydAotICAgICAgICAjIHN0eWxlX3NoZWV0LCBsZWFkaW5nIHRvIGFuIGltcG9ydCBsb29wLgotICAgICAgICByYWlzZSBtb2R1bGUuRGVwc0V4Y2VwdGlvbignVVJMIHJlZmVyZW5jZXMgbXVzdCBiZSByZWxhdGl2ZScpCi0gICAgICAjIFVSTFMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgbW9kdWxlJ3MgZGlyZWN0b3J5Ci0gICAgICBhYnNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oY29udGFpbmluZ19kaXJuYW1lLCB1cmwpKQotICAgICAgaW1hZ2UgPSBzZWxmLmxvYWRlci5Mb2FkSW1hZ2UoYWJzX3BhdGgpCi0gICAgICBpbWFnZS5hbGlhc2VzLmFwcGVuZCh1cmwpCi0gICAgICByZXR1cm4gaW1hZ2UKLQotICAgIHNlbGYuX2ltYWdlcyA9IFtyZXNvbHZlX3VybCh4KSBmb3IgeCBpbiBtYXRjaGVzXQotCi0KLWNsYXNzIFN0eWxlU2hlZXQob2JqZWN0KToKLSAgIiIiUmVwcmVzZW50cyBhIHN0eWxlc2hlZXQgcmVzb3VyY2UgcmVmZXJlbmNlZCBieSBhIG1vZHVsZSB2aWEgdGhlCi0gIGJhc2UucmVxdWlyZVN0eWxlc2hlZXQoeHh4KSBkaXJlY3RpdmUuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGxvYWRlciwgbmFtZSwgcmVzb3VyY2UpOgotICAgIHNlbGYubG9hZGVyID0gbG9hZGVyCi0gICAgc2VsZi5uYW1lID0gbmFtZQotICAgIHNlbGYucmVzb3VyY2UgPSByZXNvdXJjZQotICAgIHNlbGYuX3BhcnNlZF9zdHlsZV9zaGVldCA9IE5vbmUKLQotICBAcHJvcGVydHkKLSAgZGVmIGZpbGVuYW1lKHNlbGYpOgotICAgIHJldHVybiBzZWxmLnJlc291cmNlLmFic29sdXRlX3BhdGgKLQotICBAcHJvcGVydHkKLSAgZGVmIGNvbnRlbnRzKHNlbGYpOgotICAgIHJldHVybiBzZWxmLnJlc291cmNlLmNvbnRlbnRzCi0KLSAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgIHJldHVybiAnU3R5bGVTaGVldCglcyknICUgc2VsZi5uYW1lCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBpbWFnZXMoc2VsZik6Ci0gICAgc2VsZi5fSW5pdFBhcnNlZFN0eWxlU2hlZXRJZk5lZWRlZCgpCi0gICAgcmV0dXJuIHNlbGYuX3BhcnNlZF9zdHlsZV9zaGVldC5pbWFnZXMKLQotICBkZWYgQXBwZW5kRGlyZWN0bHlEZXBlbmRlbnRGaWxlbmFtZXNUbyhzZWxmLCBkZXBlbmRlbnRfZmlsZW5hbWVzKToKLSAgICBzZWxmLl9Jbml0UGFyc2VkU3R5bGVTaGVldElmTmVlZGVkKCkKLQotICAgIGRlcGVuZGVudF9maWxlbmFtZXMuYXBwZW5kKHNlbGYucmVzb3VyY2UuYWJzb2x1dGVfcGF0aCkKLSAgICBzZWxmLl9wYXJzZWRfc3R5bGVfc2hlZXQuQXBwZW5kRGlyZWN0bHlEZXBlbmRlbnRGaWxlbmFtZXNUbygKLSAgICAgICAgZGVwZW5kZW50X2ZpbGVuYW1lcykKLQotICBAcHJvcGVydHkKLSAgZGVmIGNvbnRlbnRzX3dpdGhfaW5saW5lZF9pbWFnZXMoc2VsZik6Ci0gICAgc2VsZi5fSW5pdFBhcnNlZFN0eWxlU2hlZXRJZk5lZWRlZCgpCi0gICAgcmV0dXJuIHNlbGYuX3BhcnNlZF9zdHlsZV9zaGVldC5jb250ZW50c193aXRoX2lubGluZWRfaW1hZ2VzCi0KLSAgZGVmIGxvYWQoc2VsZik6Ci0gICAgc2VsZi5fSW5pdFBhcnNlZFN0eWxlU2hlZXRJZk5lZWRlZCgpCi0KLSAgZGVmIF9Jbml0UGFyc2VkU3R5bGVTaGVldElmTmVlZGVkKHNlbGYpOgotICAgIGlmIHNlbGYuX3BhcnNlZF9zdHlsZV9zaGVldDoKLSAgICAgIHJldHVybgotICAgIG1vZHVsZV9kaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKHNlbGYucmVzb3VyY2UuYWJzb2x1dGVfcGF0aCkKLSAgICBzZWxmLl9wYXJzZWRfc3R5bGVfc2hlZXQgPSBQYXJzZWRTdHlsZVNoZWV0KAotICAgICAgICBzZWxmLmxvYWRlciwgbW9kdWxlX2Rpcm5hbWUsIHNlbGYuY29udGVudHMpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3B5X3Z1bGNhbml6ZS9zdHlsZV9zaGVldF91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL3N0eWxlX3NoZWV0X3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWJjNzFkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvcHlfdnVsY2FuaXplL3N0eWxlX3NoZWV0X3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgYmFzZTY0Ci1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHB5X3Z1bGNhbml6ZSBpbXBvcnQgcHJvamVjdCBhcyBwcm9qZWN0X21vZHVsZQotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IHJlc291cmNlX2xvYWRlcgotZnJvbSBweV92dWxjYW5pemUgaW1wb3J0IGZha2VfZnMKLWZyb20gcHlfdnVsY2FuaXplIGltcG9ydCBtb2R1bGUKLQotCi1jbGFzcyBTdHlsZVNoZWV0VW5pdHRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiB0ZXN0SW1hZ2VzKHNlbGYpOgotICAgIGZzID0gZmFrZV9mcy5GYWtlRlMoKQotICAgIGZzLkFkZEZpbGUoJy9zcmMvZm9vL3guY3NzJywgIiIiCi0ueCAueSB7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9iYXIuanBlZyk7Ci19Ci0iIiIpCi0gICAgZnMuQWRkRmlsZSgnL3NyYy9pbWFnZXMvYmFyLmpwZWcnLCAnaGVsbG8gd29ybGQnKQotICAgIHdpdGggZnM6Ci0gICAgICBwcm9qZWN0ID0gcHJvamVjdF9tb2R1bGUuUHJvamVjdChbb3MucGF0aC5ub3JtcGF0aCgnL3NyYy8nKV0pCi0gICAgICBsb2FkZXIgPSByZXNvdXJjZV9sb2FkZXIuUmVzb3VyY2VMb2FkZXIocHJvamVjdCkKLQotICAgICAgZm9vX3ggPSBsb2FkZXIuTG9hZFN0eWxlU2hlZXQoJ2Zvby54JykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGxlbihmb29feC5pbWFnZXMpKQotCi0gICAgICByMCA9IGZvb194LmltYWdlc1swXQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3MucGF0aC5ub3JtcGF0aCgnL3NyYy9pbWFnZXMvYmFyLmpwZWcnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHIwLmFic29sdXRlX3BhdGgpCi0KLSAgICAgIGlubGluZWQgPSBmb29feC5jb250ZW50c193aXRoX2lubGluZWRfaW1hZ2VzCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygiIiIKLS54IC55IHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwlcyk7Ci19Ci0iIiIgJSBiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKCdoZWxsbyB3b3JsZCcpLCBpbmxpbmVkKQotCi0gIGRlZiB0ZXN0VVJMUmVzb2x2ZUZhaWxzKHNlbGYpOgotICAgIGZzID0gZmFrZV9mcy5GYWtlRlMoKQotICAgIGZzLkFkZEZpbGUoJy9zcmMvZm9vL3guY3NzJywgIiIiCi0ueCAueSB7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9taXNzaW5nLmpwZWcpOwotfQotIiIiKQotICAgIHdpdGggZnM6Ci0gICAgICBwcm9qZWN0ID0gcHJvamVjdF9tb2R1bGUuUHJvamVjdChbb3MucGF0aC5ub3JtcGF0aCgnL3NyYycpXSkKLSAgICAgIGxvYWRlciA9IHJlc291cmNlX2xvYWRlci5SZXNvdXJjZUxvYWRlcihwcm9qZWN0KQotCi0gICAgICBzZWxmLmFzc2VydFJhaXNlcyhtb2R1bGUuRGVwc0V4Y2VwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogbG9hZGVyLkxvYWRTdHlsZVNoZWV0KCdmb28ueCcpKQotCi0gIGRlZiB0ZXN0SW1wb3J0c0NhdXNlRmFpbHVyZShzZWxmKToKLSAgICBmcyA9IGZha2VfZnMuRmFrZUZTKCkKLSAgICBmcy5BZGRGaWxlKCcvc3JjL2Zvby94LmNzcycsICIiIgotQGltcG9ydCB1cmwoYXdlc29tZS5jc3MpOwotIiIiKQotICAgIHdpdGggZnM6Ci0gICAgICBwcm9qZWN0ID0gcHJvamVjdF9tb2R1bGUuUHJvamVjdChbb3MucGF0aC5ub3JtcGF0aCgnL3NyYycpXSkKLSAgICAgIGxvYWRlciA9IHJlc291cmNlX2xvYWRlci5SZXNvdXJjZUxvYWRlcihwcm9qZWN0KQotCi0gICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IGxvYWRlci5Mb2FkU3R5bGVTaGVldCgnZm9vLngnKSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9MSUNFTlNFIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL0xJQ0VOU0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MWVlYjkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKLSAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KLQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCi0KLSAgIDEuIERlZmluaXRpb25zLgotCi0gICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAotICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCi0KLSAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5Ci0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKLSAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KLSAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCi0gICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKLSAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCi0gICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKLSAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCi0KLSAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCi0KLSAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAotICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgotICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLQotICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKLSAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKLSAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKLSAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KLQotICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKLSAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKLSAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawotICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KLQotICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAotICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQotICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucwotICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKLSAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgotICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAotICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KLQotICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKLSAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQotICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgotICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCi0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKLSAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKLSAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCi0gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAotICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKLSAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAotICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKLSAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgotCi0gICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCi0gICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KLQotICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCi0gICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKLSAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCi0KLSAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAotICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCi0gICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQotICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKLSAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKLSAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91Ci0gICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQotICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawotICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKLSAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKLSAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQotICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgotCi0gICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0Ci0gICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQotICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLSAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCi0gICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKLQotICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAotCi0gICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKLSAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKLSAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCi0gICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAotCi0gICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKLSAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0Ci0gICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCi0gICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90Ci0gICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCi0gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKLSAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCi0gICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAotICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwotICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKLSAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgotICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCi0gICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCi0gICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCi0gICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKLSAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKLSAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAotICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCi0gICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgotCi0gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCi0gICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKLSAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KLSAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKLSAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCi0gICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCi0KLSAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKLSAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKLSAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQotICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCi0KLSAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgotICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAotICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCi0gICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCi0gICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKLSAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQotICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgotCi0gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKLSAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAotICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKLSAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCi0gICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCi0gICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKLSAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKLSAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKLSAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCi0gICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCi0gICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCi0KLSAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKLSAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCi0gICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAotICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKLSAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5Ci0gICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgotICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAotICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5Ci0gICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCi0gICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KLQotICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0KLSAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KLQotICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKLSAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKLSAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCi0gICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQotICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCi0gICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCi0gICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKLSAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KLQotICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCi0KLSAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vTUFOSUZFU1QgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vTUFOSUZFU1QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMzg0ZDkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL01BTklGRVNUCisrKyAvZGV2L251bGwKQEAgLTEsMzU0ICswLDAgQEAKLUxJQ0VOU0UKLU1BTklGRVNUCi1QS0ctSU5GTwotUkVBRE1FLnJzdAotX3NldHVwL19faW5pdF9fLnB5Ci1fc2V0dXAvaW5jbHVkZS9jZXh0LmgKLV9zZXR1cC9weTIvX19pbml0X18ucHkKLV9zZXR1cC9weTIvY29tbWFuZHMucHkKLV9zZXR1cC9weTIvZGF0YS5weQotX3NldHVwL3B5Mi9kaXN0LnB5Ci1fc2V0dXAvcHkyL2V4dC5weQotX3NldHVwL3B5Mi9zZXR1cC5weQotX3NldHVwL3B5Mi9zaGVsbC5weQotX3NldHVwL3B5Mi90ZXJtL19faW5pdF9fLnB5Ci1fc2V0dXAvcHkyL3Rlcm0vX3Rlcm0ucHkKLV9zZXR1cC9weTIvdXRpbC5weQotX3NldHVwL3B5My9fX2luaXRfXy5weQotX3NldHVwL3B5My9jb21tYW5kcy5weQotX3NldHVwL3B5My9kYXRhLnB5Ci1fc2V0dXAvcHkzL2Rpc3QucHkKLV9zZXR1cC9weTMvZXh0LnB5Ci1fc2V0dXAvcHkzL3NldHVwLnB5Ci1fc2V0dXAvcHkzL3NoZWxsLnB5Ci1fc2V0dXAvcHkzL3Rlcm0vX19pbml0X18ucHkKLV9zZXR1cC9weTMvdGVybS9fdGVybS5weQotX3NldHVwL3B5My91dGlsLnB5Ci1iZW5jaAotYmVuY2guc2gKLWJlbmNoL0xJQ0VOU0UuY3NzbWluCi1iZW5jaC9fX2luaXRfXy5weQotYmVuY2gvY3NzbWluLnB5Ci1iZW5jaC9tYWluLnB5Ci1iZW5jaC93aWtpcGVkaWEuY3NzCi1iZW5jaC93aWtpcGVkaWEubWluLmNzcwotYmVuY2gvd3JpdGUucHkKLWRvY3MvQkVOQ0hNQVJLUwotZG9jcy9DSEFOR0VTCi1kb2NzL0NMQVNTSUZJRVJTCi1kb2NzL0RFU0NSSVBUSU9OCi1kb2NzL1BST1ZJREVTCi1kb2NzL1NVTU1BUlkKLWRvY3MvYXBpZG9jL2FwaS1vYmplY3RzLnR4dAotZG9jcy9hcGlkb2MvY3JhcnIucG5nCi1kb2NzL2FwaWRvYy9lcHlkb2MuY3NzCi1kb2NzL2FwaWRvYy9lcHlkb2MuanMKLWRvY3MvYXBpZG9jL2hlbHAuaHRtbAotZG9jcy9hcGlkb2MvaWRlbnRpZmllci1pbmRleC5odG1sCi1kb2NzL2FwaWRvYy9pbmRleC5odG1sCi1kb2NzL2FwaWRvYy9tb2R1bGUtdHJlZS5odG1sCi1kb2NzL2FwaWRvYy9yY3NzbWluLW1vZHVsZS5odG1sCi1kb2NzL2FwaWRvYy9yY3NzbWluLXB5c3JjLmh0bWwKLWRvY3MvYXBpZG9jL3JlZGlyZWN0Lmh0bWwKLXBhY2thZ2UuY2ZnCi1yY3NzbWluLmMKLXJjc3NtaW4ucHkKLXJ1bl90ZXN0cy5weQotc2V0dXAucHkKLXRlc3RzCi10ZXN0cy9tYWluL2F0Z3JvdXBfMDAuY3NzCi10ZXN0cy9tYWluL2F0Z3JvdXBfMDEuY3NzCi10ZXN0cy9tYWluL2F0Z3JvdXBfMDIuY3NzCi10ZXN0cy9tYWluL2F0Z3JvdXBfMDMuY3NzCi10ZXN0cy9tYWluL2F0Z3JvdXBfMDQuY3NzCi10ZXN0cy9tYWluL2F0Z3JvdXBfMDUuY3NzCi10ZXN0cy9tYWluL2F0Z3JvdXBfMDYuY3NzCi10ZXN0cy9tYWluL2F0Z3JvdXBfMDcuY3NzCi10ZXN0cy9tYWluL2F0Z3JvdXBfMDguY3NzCi10ZXN0cy9tYWluL2F0Z3JvdXBfMDkuY3NzCi10ZXN0cy9tYWluL2F0Z3JvdXBfMTAuY3NzCi10ZXN0cy9tYWluL2F0Z3JvdXBfMTEuY3NzCi10ZXN0cy9tYWluL2NvbW1lbnRfMDAuY3NzCi10ZXN0cy9tYWluL2NvbW1lbnRfMDEuY3NzCi10ZXN0cy9tYWluL2NvbW1lbnRfMDIuY3NzCi10ZXN0cy9tYWluL2NvbW1lbnRfMDMuY3NzCi10ZXN0cy9tYWluL2NvbW1lbnRfMDQuY3NzCi10ZXN0cy9tYWluL2VzY2FwZV8wMC5jc3MKLXRlc3RzL21haW4vZXNjYXBlXzAxLmNzcwotdGVzdHMvbWFpbi9lc2NhcGVfMDIuY3NzCi10ZXN0cy9tYWluL2VzY2FwZV8wMy5jc3MKLXRlc3RzL21haW4vZXNjYXBlXzA0LmNzcwotdGVzdHMvbWFpbi9lc2NhcGVfMDUuY3NzCi10ZXN0cy9tYWluL2VzY2FwZV8wNi5jc3MKLXRlc3RzL21haW4vZmlyc3RfMDAuY3NzCi10ZXN0cy9tYWluL2ZpcnN0XzAxLmNzcwotdGVzdHMvbWFpbi9maXJzdF8wMi5jc3MKLXRlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDAub3V0Ci10ZXN0cy9tYWluL291dC9hdGdyb3VwXzAwLm91dC5iCi10ZXN0cy9tYWluL291dC9hdGdyb3VwXzAxLm91dAotdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wMS5vdXQuYgotdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wMi5vdXQKLXRlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDIub3V0LmIKLXRlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDMub3V0Ci10ZXN0cy9tYWluL291dC9hdGdyb3VwXzAzLm91dC5iCi10ZXN0cy9tYWluL291dC9hdGdyb3VwXzA0Lm91dAotdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wNC5vdXQuYgotdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wNS5vdXQKLXRlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDUub3V0LmIKLXRlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDYub3V0Ci10ZXN0cy9tYWluL291dC9hdGdyb3VwXzA2Lm91dC5iCi10ZXN0cy9tYWluL291dC9hdGdyb3VwXzA3Lm91dAotdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wNy5vdXQuYgotdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wOC5vdXQKLXRlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDgub3V0LmIKLXRlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDkub3V0Ci10ZXN0cy9tYWluL291dC9hdGdyb3VwXzA5Lm91dC5iCi10ZXN0cy9tYWluL291dC9hdGdyb3VwXzEwLm91dAotdGVzdHMvbWFpbi9vdXQvYXRncm91cF8xMC5vdXQuYgotdGVzdHMvbWFpbi9vdXQvYXRncm91cF8xMS5vdXQKLXRlc3RzL21haW4vb3V0L2F0Z3JvdXBfMTEub3V0LmIKLXRlc3RzL21haW4vb3V0L2NvbW1lbnRfMDAub3V0Ci10ZXN0cy9tYWluL291dC9jb21tZW50XzAwLm91dC5iCi10ZXN0cy9tYWluL291dC9jb21tZW50XzAxLm91dAotdGVzdHMvbWFpbi9vdXQvY29tbWVudF8wMS5vdXQuYgotdGVzdHMvbWFpbi9vdXQvY29tbWVudF8wMi5vdXQKLXRlc3RzL21haW4vb3V0L2NvbW1lbnRfMDIub3V0LmIKLXRlc3RzL21haW4vb3V0L2NvbW1lbnRfMDMub3V0Ci10ZXN0cy9tYWluL291dC9jb21tZW50XzAzLm91dC5iCi10ZXN0cy9tYWluL291dC9jb21tZW50XzA0Lm91dAotdGVzdHMvbWFpbi9vdXQvY29tbWVudF8wNC5vdXQuYgotdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzAwLm91dAotdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzAwLm91dC5iCi10ZXN0cy9tYWluL291dC9lc2NhcGVfMDEub3V0Ci10ZXN0cy9tYWluL291dC9lc2NhcGVfMDEub3V0LmIKLXRlc3RzL21haW4vb3V0L2VzY2FwZV8wMi5vdXQKLXRlc3RzL21haW4vb3V0L2VzY2FwZV8wMi5vdXQuYgotdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzAzLm91dAotdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzAzLm91dC5iCi10ZXN0cy9tYWluL291dC9lc2NhcGVfMDQub3V0Ci10ZXN0cy9tYWluL291dC9lc2NhcGVfMDQub3V0LmIKLXRlc3RzL21haW4vb3V0L2VzY2FwZV8wNS5vdXQKLXRlc3RzL21haW4vb3V0L2VzY2FwZV8wNS5vdXQuYgotdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzA2Lm91dAotdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzA2Lm91dC5iCi10ZXN0cy9tYWluL291dC9maXJzdF8wMC5vdXQKLXRlc3RzL21haW4vb3V0L2ZpcnN0XzAwLm91dC5iCi10ZXN0cy9tYWluL291dC9maXJzdF8wMS5vdXQKLXRlc3RzL21haW4vb3V0L2ZpcnN0XzAxLm91dC5iCi10ZXN0cy9tYWluL291dC9maXJzdF8wMi5vdXQKLXRlc3RzL21haW4vb3V0L2ZpcnN0XzAyLm91dC5iCi10ZXN0cy9tYWluL291dC91cmxfMDAub3V0Ci10ZXN0cy9tYWluL291dC91cmxfMDAub3V0LmIKLXRlc3RzL21haW4vb3V0L3VybF8wMS5vdXQKLXRlc3RzL21haW4vb3V0L3VybF8wMS5vdXQuYgotdGVzdHMvbWFpbi9vdXQvdXJsXzAyLm91dAotdGVzdHMvbWFpbi9vdXQvdXJsXzAyLm91dC5iCi10ZXN0cy9tYWluL291dC91cmxfMDMub3V0Ci10ZXN0cy9tYWluL291dC91cmxfMDMub3V0LmIKLXRlc3RzL21haW4vb3V0L3VybF8wNC5vdXQKLXRlc3RzL21haW4vb3V0L3VybF8wNC5vdXQuYgotdGVzdHMvbWFpbi9vdXQvdXJsXzA1Lm91dAotdGVzdHMvbWFpbi9vdXQvdXJsXzA1Lm91dC5iCi10ZXN0cy9tYWluL291dC91cmxfMDYub3V0Ci10ZXN0cy9tYWluL291dC91cmxfMDYub3V0LmIKLXRlc3RzL21haW4vb3V0L3VybF8wNy5vdXQKLXRlc3RzL21haW4vb3V0L3VybF8wNy5vdXQuYgotdGVzdHMvbWFpbi9vdXQvdXJsXzA4Lm91dAotdGVzdHMvbWFpbi9vdXQvdXJsXzA4Lm91dC5iCi10ZXN0cy9tYWluL291dC91cmxfMDkub3V0Ci10ZXN0cy9tYWluL291dC91cmxfMDkub3V0LmIKLXRlc3RzL21haW4vdXJsXzAwLmNzcwotdGVzdHMvbWFpbi91cmxfMDEuY3NzCi10ZXN0cy9tYWluL3VybF8wMi5jc3MKLXRlc3RzL21haW4vdXJsXzAzLmNzcwotdGVzdHMvbWFpbi91cmxfMDQuY3NzCi10ZXN0cy9tYWluL3VybF8wNS5jc3MKLXRlc3RzL21haW4vdXJsXzA2LmNzcwotdGVzdHMvbWFpbi91cmxfMDcuY3NzCi10ZXN0cy9tYWluL3VybF8wOC5jc3MKLXRlc3RzL21haW4vdXJsXzA5LmNzcwotdGVzdHMveXVpL1JFQURNRQotdGVzdHMveXVpL2JhY2tncm91bmQtcG9zaXRpb24uY3NzCi10ZXN0cy95dWkvYmFja2dyb3VuZC1wb3NpdGlvbi5jc3MubWluCi10ZXN0cy95dWkvYm9yZGVyLW5vbmUuY3NzCi10ZXN0cy95dWkvYm9yZGVyLW5vbmUuY3NzLm1pbgotdGVzdHMveXVpL2JveC1tb2RlbC1oYWNrLmNzcwotdGVzdHMveXVpL2JveC1tb2RlbC1oYWNrLmNzcy5taW4KLXRlc3RzL3l1aS9idWcyNTI3OTc0LmNzcwotdGVzdHMveXVpL2J1ZzI1Mjc5NzQuY3NzLm1pbgotdGVzdHMveXVpL2J1ZzI1Mjc5OTEuY3NzCi10ZXN0cy95dWkvYnVnMjUyNzk5MS5jc3MubWluCi10ZXN0cy95dWkvYnVnMjUyNzk5OC5jc3MKLXRlc3RzL3l1aS9idWcyNTI3OTk4LmNzcy5taW4KLXRlc3RzL3l1aS9idWcyNTI4MDM0LmNzcwotdGVzdHMveXVpL2J1ZzI1MjgwMzQuY3NzLm1pbgotdGVzdHMveXVpL2NoYXJzZXQtbWVkaWEuY3NzCi10ZXN0cy95dWkvY2hhcnNldC1tZWRpYS5jc3MubWluCi10ZXN0cy95dWkvY29sb3Itc2ltcGxlLmNzcwotdGVzdHMveXVpL2NvbG9yLXNpbXBsZS5jc3MubWluCi10ZXN0cy95dWkvY29sb3IuY3NzCi10ZXN0cy95dWkvY29sb3IuY3NzLm1pbgotdGVzdHMveXVpL2NvbW1lbnQuY3NzCi10ZXN0cy95dWkvY29tbWVudC5jc3MubWluCi10ZXN0cy95dWkvY29uY2F0LWNoYXJzZXQuY3NzCi10ZXN0cy95dWkvY29uY2F0LWNoYXJzZXQuY3NzLm1pbgotdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LWRvdWJsZXF1b3Rlcy5jc3MKLXRlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1kb3VibGVxdW90ZXMuY3NzLm1pbgotdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LWVvZi5jc3MKLXRlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1lb2YuY3NzLm1pbgotdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LWxpbmVicmVha2luZGF0YS5jc3MKLXRlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1saW5lYnJlYWtpbmRhdGEuY3NzLm1pbgotdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LW5vcXVvdGVzLmNzcwotdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LW5vcXVvdGVzLmNzcy5taW4KLXRlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1zaW5nbGVxdW90ZXMuY3NzCi10ZXN0cy95dWkvZGF0YXVybC1iYXNlNjQtc2luZ2xlcXVvdGVzLmNzcy5taW4KLXRlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC10d291cmxzLmNzcwotdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LXR3b3VybHMuY3NzLm1pbgotdGVzdHMveXVpL2RhdGF1cmwtZGJxdW90ZS1mb250LmNzcwotdGVzdHMveXVpL2RhdGF1cmwtZGJxdW90ZS1mb250LmNzcy5taW4KLXRlc3RzL3l1aS9kYXRhdXJsLW5vbmJhc2U2NC1kb3VibGVxdW90ZXMuY3NzCi10ZXN0cy95dWkvZGF0YXVybC1ub25iYXNlNjQtZG91YmxlcXVvdGVzLmNzcy5taW4KLXRlc3RzL3l1aS9kYXRhdXJsLW5vbmJhc2U2NC1ub3F1b3Rlcy5jc3MKLXRlc3RzL3l1aS9kYXRhdXJsLW5vbmJhc2U2NC1ub3F1b3Rlcy5jc3MubWluCi10ZXN0cy95dWkvZGF0YXVybC1ub25iYXNlNjQtc2luZ2xlcXVvdGVzLmNzcwotdGVzdHMveXVpL2RhdGF1cmwtbm9uYmFzZTY0LXNpbmdsZXF1b3Rlcy5jc3MubWluCi10ZXN0cy95dWkvZGF0YXVybC1ub3F1b3RlLW11bHRpbGluZS1mb250LmNzcwotdGVzdHMveXVpL2RhdGF1cmwtbm9xdW90ZS1tdWx0aWxpbmUtZm9udC5jc3MubWluCi10ZXN0cy95dWkvZGF0YXVybC1yZWFsZGF0YS1kb3VibGVxdW90ZXMuY3NzCi10ZXN0cy95dWkvZGF0YXVybC1yZWFsZGF0YS1kb3VibGVxdW90ZXMuY3NzLm1pbgotdGVzdHMveXVpL2RhdGF1cmwtcmVhbGRhdGEtbm9xdW90ZXMuY3NzCi10ZXN0cy95dWkvZGF0YXVybC1yZWFsZGF0YS1ub3F1b3Rlcy5jc3MubWluCi10ZXN0cy95dWkvZGF0YXVybC1yZWFsZGF0YS1zaW5nbGVxdW90ZXMuY3NzCi10ZXN0cy95dWkvZGF0YXVybC1yZWFsZGF0YS1zaW5nbGVxdW90ZXMuY3NzLm1pbgotdGVzdHMveXVpL2RhdGF1cmwtcmVhbGRhdGEteXVpYXBwLmNzcwotdGVzdHMveXVpL2RhdGF1cmwtcmVhbGRhdGEteXVpYXBwLmNzcy5taW4KLXRlc3RzL3l1aS9kYXRhdXJsLXNpbmdsZXF1b3RlLWZvbnQuY3NzCi10ZXN0cy95dWkvZGF0YXVybC1zaW5nbGVxdW90ZS1mb250LmNzcy5taW4KLXRlc3RzL3l1aS9kZWNpbWFscy5jc3MKLXRlc3RzL3l1aS9kZWNpbWFscy5jc3MubWluCi10ZXN0cy95dWkvZG9sbGFyLWhlYWRlci5jc3MKLXRlc3RzL3l1aS9kb2xsYXItaGVhZGVyLmNzcy5taW4KLXRlc3RzL3l1aS9mb250LWZhY2UuY3NzCi10ZXN0cy95dWkvZm9udC1mYWNlLmNzcy5taW4KLXRlc3RzL3l1aS9pZTVtYWMuY3NzCi10ZXN0cy95dWkvaWU1bWFjLmNzcy5taW4KLXRlc3RzL3l1aS9tZWRpYS1lbXB0eS1jbGFzcy5jc3MKLXRlc3RzL3l1aS9tZWRpYS1lbXB0eS1jbGFzcy5jc3MubWluCi10ZXN0cy95dWkvbWVkaWEtbXVsdGkuY3NzCi10ZXN0cy95dWkvbWVkaWEtbXVsdGkuY3NzLm1pbgotdGVzdHMveXVpL21lZGlhLXRlc3QuY3NzCi10ZXN0cy95dWkvbWVkaWEtdGVzdC5jc3MubWluCi10ZXN0cy95dWkvb3BhY2l0eS1maWx0ZXIuY3NzCi10ZXN0cy95dWkvb3BhY2l0eS1maWx0ZXIuY3NzLm1pbgotdGVzdHMveXVpL291dC9iYWNrZ3JvdW5kLXBvc2l0aW9uLm91dAotdGVzdHMveXVpL291dC9iYWNrZ3JvdW5kLXBvc2l0aW9uLm91dC5iCi10ZXN0cy95dWkvb3V0L2JvcmRlci1ub25lLm91dAotdGVzdHMveXVpL291dC9ib3JkZXItbm9uZS5vdXQuYgotdGVzdHMveXVpL291dC9ib3gtbW9kZWwtaGFjay5vdXQKLXRlc3RzL3l1aS9vdXQvYm94LW1vZGVsLWhhY2sub3V0LmIKLXRlc3RzL3l1aS9vdXQvYnVnMjUyNzk3NC5vdXQKLXRlc3RzL3l1aS9vdXQvYnVnMjUyNzk3NC5vdXQuYgotdGVzdHMveXVpL291dC9idWcyNTI3OTkxLm91dAotdGVzdHMveXVpL291dC9idWcyNTI3OTkxLm91dC5iCi10ZXN0cy95dWkvb3V0L2J1ZzI1Mjc5OTgub3V0Ci10ZXN0cy95dWkvb3V0L2J1ZzI1Mjc5OTgub3V0LmIKLXRlc3RzL3l1aS9vdXQvYnVnMjUyODAzNC5vdXQKLXRlc3RzL3l1aS9vdXQvYnVnMjUyODAzNC5vdXQuYgotdGVzdHMveXVpL291dC9jaGFyc2V0LW1lZGlhLm91dAotdGVzdHMveXVpL291dC9jaGFyc2V0LW1lZGlhLm91dC5iCi10ZXN0cy95dWkvb3V0L2NvbG9yLXNpbXBsZS5vdXQKLXRlc3RzL3l1aS9vdXQvY29sb3Itc2ltcGxlLm91dC5iCi10ZXN0cy95dWkvb3V0L2NvbG9yLm91dAotdGVzdHMveXVpL291dC9jb2xvci5vdXQuYgotdGVzdHMveXVpL291dC9jb21tZW50Lm91dAotdGVzdHMveXVpL291dC9jb21tZW50Lm91dC5iCi10ZXN0cy95dWkvb3V0L2NvbmNhdC1jaGFyc2V0Lm91dAotdGVzdHMveXVpL291dC9jb25jYXQtY2hhcnNldC5vdXQuYgotdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC1kb3VibGVxdW90ZXMub3V0Ci10ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LWRvdWJsZXF1b3Rlcy5vdXQuYgotdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC1lb2Yub3V0Ci10ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LWVvZi5vdXQuYgotdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC1saW5lYnJlYWtpbmRhdGEub3V0Ci10ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LWxpbmVicmVha2luZGF0YS5vdXQuYgotdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC1ub3F1b3Rlcy5vdXQKLXRlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtbm9xdW90ZXMub3V0LmIKLXRlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtc2luZ2xlcXVvdGVzLm91dAotdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC1zaW5nbGVxdW90ZXMub3V0LmIKLXRlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtdHdvdXJscy5vdXQKLXRlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtdHdvdXJscy5vdXQuYgotdGVzdHMveXVpL291dC9kYXRhdXJsLWRicXVvdGUtZm9udC5vdXQKLXRlc3RzL3l1aS9vdXQvZGF0YXVybC1kYnF1b3RlLWZvbnQub3V0LmIKLXRlc3RzL3l1aS9vdXQvZGF0YXVybC1ub25iYXNlNjQtZG91YmxlcXVvdGVzLm91dAotdGVzdHMveXVpL291dC9kYXRhdXJsLW5vbmJhc2U2NC1kb3VibGVxdW90ZXMub3V0LmIKLXRlc3RzL3l1aS9vdXQvZGF0YXVybC1ub25iYXNlNjQtbm9xdW90ZXMub3V0Ci10ZXN0cy95dWkvb3V0L2RhdGF1cmwtbm9uYmFzZTY0LW5vcXVvdGVzLm91dC5iCi10ZXN0cy95dWkvb3V0L2RhdGF1cmwtbm9uYmFzZTY0LXNpbmdsZXF1b3Rlcy5vdXQKLXRlc3RzL3l1aS9vdXQvZGF0YXVybC1ub25iYXNlNjQtc2luZ2xlcXVvdGVzLm91dC5iCi10ZXN0cy95dWkvb3V0L2RhdGF1cmwtbm9xdW90ZS1tdWx0aWxpbmUtZm9udC5vdXQKLXRlc3RzL3l1aS9vdXQvZGF0YXVybC1ub3F1b3RlLW11bHRpbGluZS1mb250Lm91dC5iCi10ZXN0cy95dWkvb3V0L2RhdGF1cmwtcmVhbGRhdGEtZG91YmxlcXVvdGVzLm91dAotdGVzdHMveXVpL291dC9kYXRhdXJsLXJlYWxkYXRhLWRvdWJsZXF1b3Rlcy5vdXQuYgotdGVzdHMveXVpL291dC9kYXRhdXJsLXJlYWxkYXRhLW5vcXVvdGVzLm91dAotdGVzdHMveXVpL291dC9kYXRhdXJsLXJlYWxkYXRhLW5vcXVvdGVzLm91dC5iCi10ZXN0cy95dWkvb3V0L2RhdGF1cmwtcmVhbGRhdGEtc2luZ2xlcXVvdGVzLm91dAotdGVzdHMveXVpL291dC9kYXRhdXJsLXJlYWxkYXRhLXNpbmdsZXF1b3Rlcy5vdXQuYgotdGVzdHMveXVpL291dC9kYXRhdXJsLXJlYWxkYXRhLXl1aWFwcC5vdXQKLXRlc3RzL3l1aS9vdXQvZGF0YXVybC1yZWFsZGF0YS15dWlhcHAub3V0LmIKLXRlc3RzL3l1aS9vdXQvZGF0YXVybC1zaW5nbGVxdW90ZS1mb250Lm91dAotdGVzdHMveXVpL291dC9kYXRhdXJsLXNpbmdsZXF1b3RlLWZvbnQub3V0LmIKLXRlc3RzL3l1aS9vdXQvZGVjaW1hbHMub3V0Ci10ZXN0cy95dWkvb3V0L2RlY2ltYWxzLm91dC5iCi10ZXN0cy95dWkvb3V0L2RvbGxhci1oZWFkZXIub3V0Ci10ZXN0cy95dWkvb3V0L2RvbGxhci1oZWFkZXIub3V0LmIKLXRlc3RzL3l1aS9vdXQvZm9udC1mYWNlLm91dAotdGVzdHMveXVpL291dC9mb250LWZhY2Uub3V0LmIKLXRlc3RzL3l1aS9vdXQvaWU1bWFjLm91dAotdGVzdHMveXVpL291dC9pZTVtYWMub3V0LmIKLXRlc3RzL3l1aS9vdXQvbWVkaWEtZW1wdHktY2xhc3Mub3V0Ci10ZXN0cy95dWkvb3V0L21lZGlhLWVtcHR5LWNsYXNzLm91dC5iCi10ZXN0cy95dWkvb3V0L21lZGlhLW11bHRpLm91dAotdGVzdHMveXVpL291dC9tZWRpYS1tdWx0aS5vdXQuYgotdGVzdHMveXVpL291dC9tZWRpYS10ZXN0Lm91dAotdGVzdHMveXVpL291dC9tZWRpYS10ZXN0Lm91dC5iCi10ZXN0cy95dWkvb3V0L29wYWNpdHktZmlsdGVyLm91dAotdGVzdHMveXVpL291dC9vcGFjaXR5LWZpbHRlci5vdXQuYgotdGVzdHMveXVpL291dC9wcmVzZXJ2ZS1jYXNlLm91dAotdGVzdHMveXVpL291dC9wcmVzZXJ2ZS1jYXNlLm91dC5iCi10ZXN0cy95dWkvb3V0L3ByZXNlcnZlLW5ldy1saW5lLm91dAotdGVzdHMveXVpL291dC9wcmVzZXJ2ZS1uZXctbGluZS5vdXQuYgotdGVzdHMveXVpL291dC9wcmVzZXJ2ZS1zdHJpbmdzLm91dAotdGVzdHMveXVpL291dC9wcmVzZXJ2ZS1zdHJpbmdzLm91dC5iCi10ZXN0cy95dWkvb3V0L3BzZXVkby1maXJzdC5vdXQKLXRlc3RzL3l1aS9vdXQvcHNldWRvLWZpcnN0Lm91dC5iCi10ZXN0cy95dWkvb3V0L3BzZXVkby5vdXQKLXRlc3RzL3l1aS9vdXQvcHNldWRvLm91dC5iCi10ZXN0cy95dWkvb3V0L3NwZWNpYWwtY29tbWVudHMub3V0Ci10ZXN0cy95dWkvb3V0L3NwZWNpYWwtY29tbWVudHMub3V0LmIKLXRlc3RzL3l1aS9vdXQvc3Rhci11bmRlcnNjb3JlLWhhY2tzLm91dAotdGVzdHMveXVpL291dC9zdGFyLXVuZGVyc2NvcmUtaGFja3Mub3V0LmIKLXRlc3RzL3l1aS9vdXQvc3RyaW5nLWluLWNvbW1lbnQub3V0Ci10ZXN0cy95dWkvb3V0L3N0cmluZy1pbi1jb21tZW50Lm91dC5iCi10ZXN0cy95dWkvb3V0L3dlYmtpdC10cmFuc2Zvcm0ub3V0Ci10ZXN0cy95dWkvb3V0L3dlYmtpdC10cmFuc2Zvcm0ub3V0LmIKLXRlc3RzL3l1aS9vdXQvemVyb3Mub3V0Ci10ZXN0cy95dWkvb3V0L3plcm9zLm91dC5iCi10ZXN0cy95dWkvcHJlc2VydmUtY2FzZS5jc3MKLXRlc3RzL3l1aS9wcmVzZXJ2ZS1jYXNlLmNzcy5taW4KLXRlc3RzL3l1aS9wcmVzZXJ2ZS1uZXctbGluZS5jc3MKLXRlc3RzL3l1aS9wcmVzZXJ2ZS1uZXctbGluZS5jc3MubWluCi10ZXN0cy95dWkvcHJlc2VydmUtc3RyaW5ncy5jc3MKLXRlc3RzL3l1aS9wcmVzZXJ2ZS1zdHJpbmdzLmNzcy5taW4KLXRlc3RzL3l1aS9wc2V1ZG8tZmlyc3QuY3NzCi10ZXN0cy95dWkvcHNldWRvLWZpcnN0LmNzcy5taW4KLXRlc3RzL3l1aS9wc2V1ZG8uY3NzCi10ZXN0cy95dWkvcHNldWRvLmNzcy5taW4KLXRlc3RzL3l1aS9zcGVjaWFsLWNvbW1lbnRzLmNzcwotdGVzdHMveXVpL3NwZWNpYWwtY29tbWVudHMuY3NzLm1pbgotdGVzdHMveXVpL3N0YXItdW5kZXJzY29yZS1oYWNrcy5jc3MKLXRlc3RzL3l1aS9zdGFyLXVuZGVyc2NvcmUtaGFja3MuY3NzLm1pbgotdGVzdHMveXVpL3N0cmluZy1pbi1jb21tZW50LmNzcwotdGVzdHMveXVpL3N0cmluZy1pbi1jb21tZW50LmNzcy5taW4KLXRlc3RzL3l1aS93ZWJraXQtdHJhbnNmb3JtLmNzcwotdGVzdHMveXVpL3dlYmtpdC10cmFuc2Zvcm0uY3NzLm1pbgotdGVzdHMveXVpL3plcm9zLmNzcwotdGVzdHMveXVpL3plcm9zLmNzcy5taW4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9QS0ctSU5GTyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9QS0ctSU5GTwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRlZTg2Ni4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vUEtHLUlORk8KKysrIC9kZXYvbnVsbApAQCAtMSwzMTYgKzAsMCBAQAotTWV0YWRhdGEtVmVyc2lvbjogMS4xCi1OYW1lOiByY3NzbWluCi1WZXJzaW9uOiAxLjAuNQotU3VtbWFyeTogQ1NTIE1pbmlmaWVyCi1Ib21lLXBhZ2U6IGh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yY3NzbWluLwotQXV0aG9yOiBBbmRyw6kgTWFsbwotQXV0aG9yLWVtYWlsOiBuZEBwZXJsaWcuZGUKLUxpY2Vuc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0Ci0gICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCi0KLSAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgotCi0gICAxLiBEZWZpbml0aW9ucy4KLQotICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKLSAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgotCi0gICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQotICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCi0gICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCi0gICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAotICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCi0gICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgotICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCi0gICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgotCi0gICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgotCi0gICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKLSAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KLSAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0KLSAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCi0gICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0Ci0gICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCi0gICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCi0KLSAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCi0gICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCi0gICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKLSAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCi0KLSAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKLSAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKLSAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKLSAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCi0gICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KLSAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKLSAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCi0KLSAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCi0gICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCi0gICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKLSAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKLSAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgotICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCi0gICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50Ci0gICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bwotICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKLSAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCi0gICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKLSAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCi0gICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKLQotICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAotICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCi0KLSAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAotICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCi0gICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgotCi0gICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKLSAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAotICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKLSAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCi0gICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCi0gICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQotICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKLSAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKLSAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0Ci0gICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCi0gICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKLSAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KLQotICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKLSAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAotICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKLSAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi0gICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgotICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCi0KLSAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKLSAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKLQotICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCi0gICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAotICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCi0gICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgotICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKLQotICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCi0gICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAotICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAotICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAotICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQotICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCi0gICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgotICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAotICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKLSAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKLSAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCi0gICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KLSAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQotICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAotICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAotICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KLQotICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCi0gICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCi0gICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKLSAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAotICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KLQotICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAotICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCi0gICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCi0gICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5Ci0gICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAotICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgotCi0gICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCi0gICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCi0gICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKLSAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgotCi0gICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKLSAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKLSAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0gICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwotICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQotICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCi0gICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKLSAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KLQotICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCi0gICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKLSAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5Ci0gICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQotICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAotICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCi0gICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCi0gICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCi0gICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAotICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgotICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgotCi0gICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCi0gICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAotICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKLSAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCi0gICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQotICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKLSAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKLSAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQotICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgotICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCi0KLSAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwotCi0gICBBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmsuCi0KLSAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCi0gICAgICBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyAiW10iCi0gICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZQotICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKLSAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQotICAgICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZQotICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCi0gICAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCi0KLSAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotRG93bmxvYWQtVVJMOiBodHRwOi8vc3RvcmFnZS5wZXJsaWcuZGUvcmNzc21pbi8KLURlc2NyaXB0aW9uOiA9PT09PT09PT09PT09PQotICAgICAgICAgQ1NTIE1pbmlmaWVyCi0gICAgICAgID09PT09PT09PT09PT09Ci0gICAgICAgIAotICAgICAgICBSQ1NTbWluIGlzIGEgQ1NTIG1pbmlmaWVyLgotICAgICAgICAKLSAgICAgICAgVGhlIG1pbmlmaWVyIGlzIGJhc2VkIG9uIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGBZVUkgY29tcHJlc3NvcmBfXCwgd2hpY2ggaXRzZWxmCi0gICAgICAgIGlzIGJhc2VkIG9uIGB0aGUgcnVsZSBsaXN0IGJ5IElzYWFjIFNjaGx1ZXRlcmBfXC4KLSAgICAgICAgCi0gICAgICAgIFRoaXMgbW9kdWxlIGlzIGEgcmUtaW1wbGVtZW50YXRpb24gYWltaW5nIGZvciBzcGVlZCBpbnN0ZWFkIG9mIG1heGltdW0KLSAgICAgICAgY29tcHJlc3Npb24sIHNvIGl0IGNhbiBiZSB1c2VkIGF0IHJ1bnRpbWUgKHJhdGhlciB0aGFuIGR1cmluZyBhIHByZXByb2Nlc3NpbmcKLSAgICAgICAgc3RlcCkuIFJDU1NtaW4gZG9lcyBzeW50YWN0aWNhbCBjb21wcmVzc2lvbiBvbmx5IChyZW1vdmluZyBzcGFjZXMsIGNvbW1lbnRzCi0gICAgICAgIGFuZCBwb3NzaWJseSBzZW1pY29sb25zKS4gSXQgZG9lcyBub3QgcHJvdmlkZSBzZW1hbnRpYyBjb21wcmVzc2lvbiAobGlrZQotICAgICAgICByZW1vdmluZyBlbXB0eSBibG9ja3MsIGNvbGxhcHNpbmcgcmVkdW5kYW50IHByb3BlcnRpZXMgZXRjKS4gSXQgZG9lcywgaG93ZXZlciwKLSAgICAgICAgc3VwcG9ydCB2YXJpb3VzIENTUyBoYWNrcyAoYnkga2VlcGluZyB0aGVtIHdvcmtpbmcgYXMgaW50ZW5kZWQpLgotICAgICAgICAKLSAgICAgICAgSGVyZSdzIGEgZmVhdHVyZSBsaXN0OgotICAgICAgICAKLSAgICAgICAgLSBTdHJpbmdzIGFyZSBrZXB0LCBleGNlcHQgdGhhdCBlc2NhcGVkIG5ld2xpbmVzIGFyZSBzdHJpcHBlZAotICAgICAgICAtIFNwYWNlL0NvbW1lbnRzIGJlZm9yZSB0aGUgdmVyeSBlbmQgb3IgYmVmb3JlIHZhcmlvdXMgY2hhcmFjdGVycyBhcmUKLSAgICAgICAgICBzdHJpcHBlZDogYGA6e30pOz0+K10sIWBgIChUaGUgY29sb24gKGBgOmBgKSBpcyBhIHNwZWNpYWwgY2FzZSwgYSBzaW5nbGUKLSAgICAgICAgICBzcGFjZSBpcyBrZXB0IGlmIGl0J3Mgb3V0c2lkZSBhIHJ1bGVzZXQuKQotICAgICAgICAtIFNwYWNlL0NvbW1lbnRzIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvciBhZnRlciB2YXJpb3VzIGNoYXJhY3RlcnMgYXJlCi0gICAgICAgICAgc3RyaXBwZWQ6IGBge30oPTo+K1ssIWBgCi0gICAgICAgIC0gT3B0aW9uYWwgc3BhY2UgYWZ0ZXIgdW5pY29kZSBlc2NhcGVzIGlzIGtlcHQsIHJlc3AuIHJlcGxhY2VkIGJ5IGEgc2ltcGxlCi0gICAgICAgICAgc3BhY2UKLSAgICAgICAgLSB3aGl0ZXNwYWNlcyBpbnNpZGUgYGB1cmwoKWBgIGRlZmluaXRpb25zIGFyZSBzdHJpcHBlZAotICAgICAgICAtIENvbW1lbnRzIHN0YXJ0aW5nIHdpdGggYW4gZXhjbGFtYXRpb24gbWFyayAoYGAhYGApIGNhbiBiZSBrZXB0IG9wdGlvbmFsbHkuCi0gICAgICAgIC0gQWxsIG90aGVyIGNvbW1lbnRzIGFuZC9vciB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkIGJ5IGEgc2luZ2xlCi0gICAgICAgICAgc3BhY2UuCi0gICAgICAgIC0gTXVsdGlwbGUgY29uc2VjdXRpdmUgc2VtaWNvbG9ucyBhcmUgcmVkdWNlZCB0byBvbmUKLSAgICAgICAgLSBUaGUgbGFzdCBzZW1pY29sb24gd2l0aGluIGEgcnVsZXNldCBpcyBzdHJpcHBlZAotICAgICAgICAtIENTUyBIYWNrcyBzdXBwb3J0ZWQ6Ci0gICAgICAgIAotICAgICAgICAgIC0gSUU3IGhhY2sgKGBgPi8qKi9gYCkKLSAgICAgICAgICAtIE1hYy1JRTUgaGFjayAoYGAvKlwqLy4uLi8qKi9gYCkKLSAgICAgICAgICAtIFRoZSBib3htb2RlbGhhY2sgaXMgc3VwcG9ydGVkIG5hdHVyYWxseSBiZWNhdXNlIGl0IHJlbGllcyBvbiB2YWxpZCBDU1MyCi0gICAgICAgICAgICBzdHJpbmdzCi0gICAgICAgICAgLSBCZXR3ZWVuIGBgOmZpcnN0LWxpbmVgYCBhbmQgdGhlIGZvbGxvd2luZyBjb21tYSBvciBjdXJseSBicmFjZSBhIHNwYWNlIGlzCi0gICAgICAgICAgICBpbnNlcnRlZC4gKGFwcGFyZW50bHkgaXQncyBuZWVkZWQgZm9yIElFNikKLSAgICAgICAgICAtIFNhbWUgZm9yIGBgOmZpcnN0LWxldHRlcmBgCi0gICAgICAgIAotICAgICAgICByY3NzbWluLmMgaXMgYSByZWltcGxlbWVudGF0aW9uIG9mIHJjc3NtaW4ucHkgaW4gQyBhbmQgaW1wcm92ZXMgcnVudGltZSB1cCB0bwotICAgICAgICBmYWN0b3IgMTAwIG9yIHNvIChkZXBlbmRpbmcgb24gdGhlIGlucHV0KS4gZG9jcy9CRU5DSE1BUktTIGluIHRoZSBzb3VyY2UKLSAgICAgICAgZGlzdHJpYnV0aW9uIGNvbnRhaW5zIHRoZSBkZXRhaWxzLgotICAgICAgICAKLSAgICAgICAgQm90aCBweXRob24gMiAoPj0gMi40KSBhbmQgcHl0aG9uIDMgYXJlIHN1cHBvcnRlZC4KLSAgICAgICAgCi0gICAgICAgIC4uIF9ZVUkgY29tcHJlc3NvcjogaHR0cHM6Ly9naXRodWIuY29tL3l1aS95dWljb21wcmVzc29yLwotICAgICAgICAKLSAgICAgICAgLi4gX3RoZSBydWxlIGxpc3QgYnkgSXNhYWMgU2NobHVldGVyOiBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL2Nzc21pbi8KLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICBDb3B5cmlnaHQgYW5kIExpY2Vuc2UKLSAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0gICAgICAgIAotICAgICAgICBDb3B5cmlnaHQgMjAxMSAtIDIwMTQKLSAgICAgICAgQW5kcsOpIE1hbG8gb3IgaGlzIGxpY2Vuc29ycywgYXMgYXBwbGljYWJsZS4KLSAgICAgICAgCi0gICAgICAgIFRoZSB3aG9sZSBwYWNrYWdlIChleGNlcHQgZm9yIHRoZSBmaWxlcyBpbiB0aGUgYmVuY2gvIGRpcmVjdG9yeSkgaXMKLSAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLiBZb3UnbGwgZmluZCBhIGNvcHkgaW4gdGhlCi0gICAgICAgIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBkaXN0cmlidXRpb24gb3Igb25saW5lIGF0OgotICAgICAgICA8aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPi4KLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICBCdWdzCi0gICAgICAgIH5+fn4KLSAgICAgICAgCi0gICAgICAgIE5vIGJ1Z3MsIG9mIGNvdXJzZS4gOy0pCi0gICAgICAgIEJ1dCBpZiB5b3UndmUgZm91bmQgb25lIG9yIGhhdmUgYW4gaWRlYSBob3cgdG8gaW1wcm92ZSByY3NzbWluLCBmZWVsIGZyZWUKLSAgICAgICAgdG8gc2VuZCBhIHB1bGwgcmVxdWVzdCBvbiBgZ2l0aHViIDxodHRwczovL2dpdGh1Yi5jb20vbmRwYXJrZXIvcmNzc21pbj5gXwotICAgICAgICBvciBzZW5kIGEgbWFpbCB0byA8cmNzc21pbi1idWdzQHBlcmxpZy5kZT4uCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgQXV0aG9yIEluZm9ybWF0aW9uCi0gICAgICAgIH5+fn5+fn5+fn5+fn5+fn5+fgotICAgICAgICAKLSAgICAgICAgQW5kcsOpICJuZCIgTWFsbyA8bmQgcGVybGlnLmRlPgotICAgICAgICBHUEc6IDB4ODEwM0EzN0UKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAgICAgSWYgR29kIGludGVuZGVkIHBlb3BsZSB0byBiZSBuYWtlZCwgdGhleSB3b3VsZCBiZSBib3JuIHRoYXQgd2F5LgotICAgICAgICAgICAgLS0gT3NjYXIgV2lsZGUKLSAgICAgICAgCi0gICAgICAgIC4uIHZpbTp0dz03MiBzeW50YXg9cmVzdAotS2V5d29yZHM6IENTUyxNaW5pbWl6YXRpb24KLVBsYXRmb3JtOiBVTktOT1dOCi1DbGFzc2lmaWVyOiBEZXZlbG9wbWVudCBTdGF0dXMgOjogNSAtIFByb2R1Y3Rpb24vU3RhYmxlCi1DbGFzc2lmaWVyOiBFbnZpcm9ubWVudCA6OiBXZWIgRW52aXJvbm1lbnQKLUNsYXNzaWZpZXI6IEludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMKLUNsYXNzaWZpZXI6IExpY2Vuc2UgOjogT1NJIEFwcHJvdmVkCi1DbGFzc2lmaWVyOiBMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLUNsYXNzaWZpZXI6IE9wZXJhdGluZyBTeXN0ZW0gOjogT1MgSW5kZXBlbmRlbnQKLUNsYXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IEMKLUNsYXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbgotQ2xhc3NpZmllcjogUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIKLUNsYXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzCi1DbGFzc2lmaWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogSW1wbGVtZW50YXRpb24gOjogQ1B5dGhvbgotQ2xhc3NpZmllcjogUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IEltcGxlbWVudGF0aW9uIDo6IEp5dGhvbgotQ2xhc3NpZmllcjogUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IEltcGxlbWVudGF0aW9uIDo6IFB5UHkKLUNsYXNzaWZpZXI6IFRvcGljIDo6IEludGVybmV0IDo6IFdXVy9IVFRQIDo6IER5bmFtaWMgQ29udGVudAotQ2xhc3NpZmllcjogVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzCi1DbGFzc2lmaWVyOiBUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMgOjogUHl0aG9uIE1vZHVsZXMKLUNsYXNzaWZpZXI6IFRvcGljIDo6IFRleHQgUHJvY2Vzc2luZwotQ2xhc3NpZmllcjogVG9waWMgOjogVGV4dCBQcm9jZXNzaW5nIDo6IEZpbHRlcnMKLUNsYXNzaWZpZXI6IFRvcGljIDo6IFV0aWxpdGllcwotUHJvdmlkZXM6IHJjc3NtaW4gKDEuMCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9SRUFETUUuY2hyb21pdW0gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vUkVBRE1FLmNocm9taXVtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTM1MGZjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9SRUFETUUuY2hyb21pdW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1OYW1lOiByQ1NTbWluCi1TaG9ydCBOYW1lOiByY3NzbWluCi1VUkw6IGh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yY3NzbWluLwotVmVyc2lvbjogMS4wLjUKLUxpY2Vuc2U6IEFwYWNoZSAyLjAKLUxpY2Vuc2UgRmlsZTogTk9UX1NISVBQRUQKLVNlY3VyaXR5IENyaXRpY2FsOiBubwotCi1EZXNjcmlwdGlvbjoKLXJDU1NtaW4gaXMgYSBDU1MgbWluaWZpZXIgd3JpdHRlbiBpbiBweXRob24uCi1UaGUgbWluaWZpZXIgaXMgYmFzZWQgb24gdGhlIHNlbWFudGljcyBvZiB0aGUgWVVJIGNvbXByZXNzb3IsIHdoaWNoIGl0c2VsZiBpcwotYmFzZWQgb24gdGhlIHJ1bGUgbGlzdCBieSBJc2FhYyBTY2hsdWV0ZXIuCi0KLU1vZGlmaWNhdGlvbnMgbWFkZToKLSAtIFJlbW92ZWQgdGhlIGJlbmNoLnNoIHNpbmNlIHRoZSBmaWxlIGRvZXNuJ3QgaGF2ZSB0aGUgbGljZW5zaW5nIGluZm8gYW5kCi0gICBjYXVzZWQgbGljZW5zZSBjaGVja2VyIHRvIGZhaWwuCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vUkVBRE1FLnJzdCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9SRUFETUUucnN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWZiMzA4Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9SRUFETUUucnN0CisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS4uIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gckNTU21pbiAtIEEgQ1NTIE1pbmlmaWVyIEZvciBQeXRob24KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVEFCTEUgT0YgQ09OVEVOVFMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTEuIEludHJvZHVjdGlvbgotMi4gQ29weXJpZ2h0IGFuZCBMaWNlbnNlCi0zLiBTeXN0ZW0gUmVxdWlyZW1lbnRzCi00LiBJbnN0YWxsYXRpb24KLTUuIERvY3VtZW50YXRpb24KLTYuIEJ1Z3MKLTcuIEF1dGhvciBJbmZvcm1hdGlvbgotCi0KLUlOVFJPRFVDVElPTgotLS0tLS0tLS0tLS0tCi0KLVJDU1NtaW4gaXMgYSBDU1MgbWluaWZpZXIgd3JpdHRlbiBpbiBweXRob24uCi0KLVRoZSBtaW5pZmllciBpcyBiYXNlZCBvbiB0aGUgc2VtYW50aWNzIG9mIHRoZSBgWVVJIGNvbXByZXNzb3JgX1wsIHdoaWNoIGl0c2VsZgotaXMgYmFzZWQgb24gYHRoZSBydWxlIGxpc3QgYnkgSXNhYWMgU2NobHVldGVyYF9cLgotCi1UaGlzIG1vZHVsZSBpcyBhIHJlLWltcGxlbWVudGF0aW9uIGFpbWluZyBmb3Igc3BlZWQgaW5zdGVhZCBvZiBtYXhpbXVtCi1jb21wcmVzc2lvbiwgc28gaXQgY2FuIGJlIHVzZWQgYXQgcnVudGltZSAocmF0aGVyIHRoYW4gZHVyaW5nIGEgcHJlcHJvY2Vzc2luZwotc3RlcCkuIFJDU1NtaW4gZG9lcyBzeW50YWN0aWNhbCBjb21wcmVzc2lvbiBvbmx5IChyZW1vdmluZyBzcGFjZXMsIGNvbW1lbnRzCi1hbmQgcG9zc2libHkgc2VtaWNvbG9ucykuIEl0IGRvZXMgbm90IHByb3ZpZGUgc2VtYW50aWMgY29tcHJlc3Npb24gKGxpa2UKLXJlbW92aW5nIGVtcHR5IGJsb2NrcywgY29sbGFwc2luZyByZWR1bmRhbnQgcHJvcGVydGllcyBldGMpLiBJdCBkb2VzLCBob3dldmVyLAotc3VwcG9ydCB2YXJpb3VzIENTUyBoYWNrcyAoYnkga2VlcGluZyB0aGVtIHdvcmtpbmcgYXMgaW50ZW5kZWQpLgotCi1IZXJlJ3MgYSBmZWF0dXJlIGxpc3Q6Ci0KLS0gU3RyaW5ncyBhcmUga2VwdCwgZXhjZXB0IHRoYXQgZXNjYXBlZCBuZXdsaW5lcyBhcmUgc3RyaXBwZWQKLS0gU3BhY2UvQ29tbWVudHMgYmVmb3JlIHRoZSB2ZXJ5IGVuZCBvciBiZWZvcmUgdmFyaW91cyBjaGFyYWN0ZXJzIGFyZQotICBzdHJpcHBlZDogYGA6e30pOz0+K10sIWBgIChUaGUgY29sb24gKGBgOmBgKSBpcyBhIHNwZWNpYWwgY2FzZSwgYSBzaW5nbGUKLSAgc3BhY2UgaXMga2VwdCBpZiBpdCdzIG91dHNpZGUgYSBydWxlc2V0LikKLS0gU3BhY2UvQ29tbWVudHMgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9yIGFmdGVyIHZhcmlvdXMgY2hhcmFjdGVycyBhcmUKLSAgc3RyaXBwZWQ6IGBge30oPTo+K1ssIWBgCi0tIE9wdGlvbmFsIHNwYWNlIGFmdGVyIHVuaWNvZGUgZXNjYXBlcyBpcyBrZXB0LCByZXNwLiByZXBsYWNlZCBieSBhIHNpbXBsZQotICBzcGFjZQotLSB3aGl0ZXNwYWNlcyBpbnNpZGUgYGB1cmwoKWBgIGRlZmluaXRpb25zIGFyZSBzdHJpcHBlZAotLSBDb21tZW50cyBzdGFydGluZyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmsgKGBgIWBgKSBjYW4gYmUga2VwdCBvcHRpb25hbGx5LgotLSBBbGwgb3RoZXIgY29tbWVudHMgYW5kL29yIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgYnkgYSBzaW5nbGUKLSAgc3BhY2UuCi0tIE11bHRpcGxlIGNvbnNlY3V0aXZlIHNlbWljb2xvbnMgYXJlIHJlZHVjZWQgdG8gb25lCi0tIFRoZSBsYXN0IHNlbWljb2xvbiB3aXRoaW4gYSBydWxlc2V0IGlzIHN0cmlwcGVkCi0tIENTUyBIYWNrcyBzdXBwb3J0ZWQ6Ci0KLSAgLSBJRTcgaGFjayAoYGA+LyoqL2BgKQotICAtIE1hYy1JRTUgaGFjayAoYGAvKlwqLy4uLi8qKi9gYCkKLSAgLSBUaGUgYm94bW9kZWxoYWNrIGlzIHN1cHBvcnRlZCBuYXR1cmFsbHkgYmVjYXVzZSBpdCByZWxpZXMgb24gdmFsaWQgQ1NTMgotICAgIHN0cmluZ3MKLSAgLSBCZXR3ZWVuIGBgOmZpcnN0LWxpbmVgYCBhbmQgdGhlIGZvbGxvd2luZyBjb21tYSBvciBjdXJseSBicmFjZSBhIHNwYWNlIGlzCi0gICAgaW5zZXJ0ZWQuIChhcHBhcmVudGx5IGl0J3MgbmVlZGVkIGZvciBJRTYpCi0gIC0gU2FtZSBmb3IgYGA6Zmlyc3QtbGV0dGVyYGAKLQotcmNzc21pbi5jIGlzIGEgcmVpbXBsZW1lbnRhdGlvbiBvZiByY3NzbWluLnB5IGluIEMgYW5kIGltcHJvdmVzIHJ1bnRpbWUgdXAgdG8KLWZhY3RvciAxMDAgb3Igc28gKGRlcGVuZGluZyBvbiB0aGUgaW5wdXQpLiBkb2NzL0JFTkNITUFSS1MgaW4gdGhlIHNvdXJjZQotZGlzdHJpYnV0aW9uIGNvbnRhaW5zIHRoZSBkZXRhaWxzLgotCi0uLiBfWVVJIGNvbXByZXNzb3I6IGh0dHBzOi8vZ2l0aHViLmNvbS95dWkveXVpY29tcHJlc3Nvci8KLQotLi4gX3RoZSBydWxlIGxpc3QgYnkgSXNhYWMgU2NobHVldGVyOiBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL2Nzc21pbi8KLQotCi1DT1BZUklHSFQgQU5EIExJQ0VOU0UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Db3B5cmlnaHQgMjAxMSAtIDIwMTQKLUFuZHLDqSBNYWxvIG9yIGhpcyBsaWNlbnNvcnMsIGFzIGFwcGxpY2FibGUuCi0KLVRoZSB3aG9sZSBwYWNrYWdlIChleGNlcHQgZm9yIHRoZSBmaWxlcyBpbiB0aGUgYmVuY2gvIGRpcmVjdG9yeSkKLWlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMC4gWW91J2xsIGZpbmQgYSBjb3B5IGluIHRoZQotcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGRpc3RyaWJ1dGlvbiBvciBvbmxpbmUgYXQ6Ci08aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPi4KLQotCi1TWVNURU0gUkVRVUlSRU1FTlRTCi0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUJvdGggcHl0aG9uIDIgKD49Mi40KSBhbmQgcHl0aG9uIDMgYXJlIHN1cHBvcnRlZC4KLQotCi1JTlNUQUxMQVRJT04KLS0tLS0tLS0tLS0tLQotCi1Vc2luZyBwaXAKLX5+fn5+fn5+fgotIAotJCBwaXAgaW5zdGFsbCByY3NzbWluCi0gCi0KLVVzaW5nIGRpc3R1dGlscwotfn5+fn5+fn5+fn5+fn5+Ci0gCi0kIHB5dGhvbiBzZXR1cC5weSBpbnN0YWxsCi0gCi1UaGUgZm9sbG93aW5nIGV4dHJhIG9wdGlvbnMgdG8gdGhlIGluc3RhbGwgY29tbWFuZCBtYXkgYmUgb2YgaW50ZXJlc3Q6Ci0gCi0gICAtLXdpdGhvdXQtYy1leHRlbnNpb25zICBEb24ndCBpbnN0YWxsIEMgZXh0ZW5zaW9ucwotICAgLS13aXRob3V0LWRvY3MgICAgICAgICAgRG8gbm90IGluc3RhbGwgZG9jdW1lbnRhdGlvbiBmaWxlcwotIAotCi1Ecm9wLWluCi1+fn5+fn5+Ci0gCi1yQ1NTbWluIGVmZmVjdGl2ZWx5IGNvbnNpc3RzIG9mIHR3byBmaWxlczogcmNzc21pbi5weSBhbmQgcmNzc21pbi5jLCB0aGUKLWxhdHRlciBiZWluZyBlbnRpcmVseSBvcHRpb25hbC4gU28sIGZvciBzaW1wbGUgaW50ZWdyYXRpb24geW91IGNhbiBqdXN0Ci1jb3B5IHJjc3NtaW4ucHkgaW50byB5b3VyIHByb2plY3QgYW5kIHVzZSBpdC4KLQotCi1ET0NVTUVOVEFUSU9OCi0tLS0tLS0tLS0tLS0tCi0KLUEgZ2VuZXJhdGVkIEFQSSBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgZG9jcy9hcGlkb2MvIGRpcmVjdG9yeS4KLUJ1dCB5b3UgY2FuIGp1c3QgbG9vayBpbnRvIHRoZSBtb2R1bGUuIEl0IHByb3ZpZGVzIGEgc2ltcGxlIGZ1bmN0aW9uLAotY2FsbGVkIGNzc21pbiB3aGljaCB0YWtlcyB0aGUgQ1NTIGFzIGEgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSBtaW5pZmllZAotQ1NTIGFzIGEgc3RyaW5nLgotCi1UaGUgbW9kdWxlIGFkZGl0aW9uYWxseSBwcm92aWRlcyBhICJzdHJlYW15IiBpbnRlcmZhY2U6Ci0KLSQgcHl0aG9uIC1tcmNzc21pbiA8Y3NzID5taW5pZmllZAotCi1JdCB0YWtlcyB0d28gb3B0aW9uczoKLQotICAtYiAgS2VlcCBiYW5nLWNvbW1lbnRzIChDb21tZW50cyBzdGFydGluZyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmspCi0gIC1wICBGb3JjZSB1c2luZyB0aGUgcHl0aG9uIGltcGxlbWVudGF0aW9uIChub3QgdGhlIEMgaW1wbGVtZW50YXRpb24pCi0KLVRoZSBsYXRlc3QgZG9jdW1lbnRhdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBvbmxpbmUgYXQKLTxodHRwOi8vb3BlbnNvdXJjZS5wZXJsaWcuZGUvcmNzc21pbi8+LgotCi0KLUJVR1MKLS0tLS0KLQotTm8gYnVncywgb2YgY291cnNlLiA7LSkKLUJ1dCBpZiB5b3UndmUgZm91bmQgb25lIG9yIGhhdmUgYW4gaWRlYSBob3cgdG8gaW1wcm92ZSByY3NzbWluLCBmZWVsIGZyZWUgdG8KLXNlbmQgYSBwdWxsIHJlcXVlc3Qgb24gYGdpdGh1YiA8aHR0cHM6Ly9naXRodWIuY29tL25kcGFya2VyL3Jjc3NtaW4+YF8gb3IKLXNlbmQgYSBtYWlsIHRvIDxyY3NzbWluLWJ1Z3NAcGVybGlnLmRlPi4KLQotCi1BVVRIT1IgSU5GT1JNQVRJT04KLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BbmRyw6kgIm5kIiBNYWxvIDxuZEBwZXJsaWcuZGU+Ci1HUEc6IDB4ODEwM0EzN0UKLQotCi0gIElmIEdvZCBpbnRlbmRlZCBwZW9wbGUgdG8gYmUgbmFrZWQsIHRoZXkgd291bGQgYmUgYm9ybiB0aGF0IHdheS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIE9zY2FyIFdpbGRlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vYmVuY2gvTElDRU5TRS5jc3NtaW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vYmVuY2gvTElDRU5TRS5jc3NtaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMGNjYjAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2JlbmNoL0xJQ0VOU0UuY3NzbWluCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotYGNzc21pbi5weWAgLSBBIFB5dGhvbiBwb3J0IG9mIHRoZSBZVUkgQ1NTIGNvbXByZXNzb3IuCi0KLUNvcHlyaWdodCAoYykgMjAxMCBaYWNoYXJ5IFZvYXNlCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCi1vYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgotZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAotcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCi1jb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi1Tb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwotY29uZGl0aW9uczoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLWluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLUVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUwotT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLU5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCi1IT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKLVdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgc29mdHdhcmUgY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIFlVSSBDU1MgQ29tcHJlc3Nvciwgbm90YWJseSBzb21lIHJlZ3VsYXIKLWV4cHJlc3Npb25zIGZvciByZWR1Y2luZyB0aGUgc2l6ZSBvZiBDU1MuIFRoZSBZVUkgQ29tcHJlc3NvciBzb3VyY2UgY29kZSBjYW4gYmUKLWZvdW5kIGF0IDxodHRwOi8vZ2l0aHViLmNvbS95dWkveXVpY29tcHJlc3Nvcj4sIGFuZCBpcyBsaWNlbnNlZCBhcyBmb2xsb3dzOgotCi0+IFlVSSBDb21wcmVzc29yIENvcHlyaWdodCBMaWNlbnNlIEFncmVlbWVudCAoQlNEIExpY2Vuc2UpCi0+IAotPiBDb3B5cmlnaHQgKGMpIDIwMDksIFlhaG9vISBJbmMuCi0+IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0+IAotPiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsCi0+IHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCi0+IGNvbmRpdGlvbnMgYXJlIG1ldDoKLT4gCi0+ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotPiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUKLT4gICBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLT4gCi0+ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotPiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUKLT4gICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIKLT4gICBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotPiAKLT4gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFlhaG9vISBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0+ICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotPiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKLT4gICB3cml0dGVuIHBlcm1pc3Npb24gb2YgWWFob28hIEluYy4KLT4gCi0+IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotPiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0+IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotPiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLT4gRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLT4gREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLT4gU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLT4gQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLT4gT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLT4gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9iZW5jaC9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9iZW5jaC9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA1ZGQwYy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vYmVuY2gvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIC0qLSBjb2Rpbmc6IGFzY2lpIC0qLQotciIiIgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gQmVuY2htYXJrIGNzc21pbiBpbXBsZW1lbnRhdGlvbnMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1CZW5jaG1hcmsgY3NzbWluIGltcGxlbWVudGF0aW9ucy4KLQotOkNvcHlyaWdodDoKLQotIENvcHlyaWdodCAyMDExIC0gMjAxNAotIEFuZHJceGU5IE1hbG8gb3IgaGlzIGxpY2Vuc29ycywgYXMgYXBwbGljYWJsZQotCi06TGljZW5zZToKLQotIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIiIiCi1pZiBfX2RvY19fOgotICAgIF9fZG9jX18gPSBfX2RvY19fLmVuY29kZSgnYXNjaWknKS5kZWNvZGUoJ3VuaWNvZGVfZXNjYXBlJykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9iZW5jaC9jc3NtaW4ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vYmVuY2gvY3NzbWluLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmZiZjhkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9iZW5jaC9jc3NtaW4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNDYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQotCi0iIiJgY3NzbWluYCAtIEEgUHl0aG9uIHBvcnQgb2YgdGhlIFlVSSBDU1MgY29tcHJlc3Nvci4KLQotOkNvcHlyaWdodDoKLQotIENvcHlyaWdodCAyMDExIC0gMjAxNAotIEFuZHJceGU5IE1hbG8gb3IgaGlzIGxpY2Vuc29ycywgYXMgYXBwbGljYWJsZQotCi06TGljZW5zZToKLQotIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIiIiCi0KLXRyeToKLSAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTyAjIFRoZSBwdXJlLVB5dGhvbiBTdHJpbmdJTyBzdXBwb3J0cyB1bmljb2RlLgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCi1pbXBvcnQgcmUKLQotCi1fX3ZlcnNpb25fXyA9ICcwLjIuMCcKLQotCi1kZWYgcmVtb3ZlX2NvbW1lbnRzKGNzcyk6Ci0gICAgIiIiUmVtb3ZlIGFsbCBDU1MgY29tbWVudCBibG9ja3MuIiIiCi0KLSAgICBpZW1hYyA9IEZhbHNlCi0gICAgcHJlc2VydmUgPSBGYWxzZQotICAgIGNvbW1lbnRfc3RhcnQgPSBjc3MuZmluZCgiLyoiKQotICAgIHdoaWxlIGNvbW1lbnRfc3RhcnQgPj0gMDoKLSAgICAgICAgIyBQcmVzZXJ2ZSBjb21tZW50cyB0aGF0IGxvb2sgbGlrZSBgLyohLi4uKi9gLgotICAgICAgICAjIFNsaWNpbmcgaXMgdXNlZCB0byBtYWtlIHN1cmUgd2UgZG9uInQgZ2V0IGFuIEluZGV4RXJyb3IuCi0gICAgICAgIHByZXNlcnZlID0gY3NzW2NvbW1lbnRfc3RhcnQgKyAyOmNvbW1lbnRfc3RhcnQgKyAzXSA9PSAiISIKLQotICAgICAgICBjb21tZW50X2VuZCA9IGNzcy5maW5kKCIqLyIsIGNvbW1lbnRfc3RhcnQgKyAyKQotICAgICAgICBpZiBjb21tZW50X2VuZCA8IDA6Ci0gICAgICAgICAgICBpZiBub3QgcHJlc2VydmU6Ci0gICAgICAgICAgICAgICAgY3NzID0gY3NzWzpjb21tZW50X3N0YXJ0XQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVsaWYgY29tbWVudF9lbmQgPj0gKGNvbW1lbnRfc3RhcnQgKyAyKToKLSAgICAgICAgICAgIGlmIGNzc1tjb21tZW50X2VuZCAtIDFdID09ICJcXCI6Ci0gICAgICAgICAgICAgICAgIyBUaGlzIGlzIGFuIElFIE1hYy1zcGVjaWZpYyBjb21tZW50OyBsZWF2ZSB0aGlzIG9uZSBhbmQgdGhlCi0gICAgICAgICAgICAgICAgIyBmb2xsb3dpbmcgb25lIGFsb25lLgotICAgICAgICAgICAgICAgIGNvbW1lbnRfc3RhcnQgPSBjb21tZW50X2VuZCArIDIKLSAgICAgICAgICAgICAgICBpZW1hYyA9IFRydWUKLSAgICAgICAgICAgIGVsaWYgaWVtYWM6Ci0gICAgICAgICAgICAgICAgY29tbWVudF9zdGFydCA9IGNvbW1lbnRfZW5kICsgMgotICAgICAgICAgICAgICAgIGllbWFjID0gRmFsc2UKLSAgICAgICAgICAgIGVsaWYgbm90IHByZXNlcnZlOgotICAgICAgICAgICAgICAgIGNzcyA9IGNzc1s6Y29tbWVudF9zdGFydF0gKyBjc3NbY29tbWVudF9lbmQgKyAyOl0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY29tbWVudF9zdGFydCA9IGNvbW1lbnRfZW5kICsgMgotICAgICAgICBjb21tZW50X3N0YXJ0ID0gY3NzLmZpbmQoIi8qIiwgY29tbWVudF9zdGFydCkKLQotICAgIHJldHVybiBjc3MKLQotCi1kZWYgcmVtb3ZlX3VubmVjZXNzYXJ5X3doaXRlc3BhY2UoY3NzKToKLSAgICAiIiJSZW1vdmUgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLiIiIgotCi0gICAgZGVmIHBzZXVkb2NsYXNzY29sb24oY3NzKToKLQotICAgICAgICAiIiIKLSAgICAgICAgUHJldmVudHMgJ3AgOmxpbmsnIGZyb20gYmVjb21pbmcgJ3A6bGluaycuCi0KLSAgICAgICAgVHJhbnNsYXRlcyAncCA6bGluaycgaW50byAncCBfX19QU0VVRE9DTEFTU0NPTE9OX19fbGluayc7IHRoaXMgaXMKLSAgICAgICAgdHJhbnNsYXRlZCBiYWNrIGFnYWluIGxhdGVyLgotICAgICAgICAiIiIKLQotICAgICAgICByZWdleCA9IHJlLmNvbXBpbGUociIoXnxcfSkoKFteXHtcOl0pK1w6KSsoW15ce10qXHspIikKLSAgICAgICAgbWF0Y2ggPSByZWdleC5zZWFyY2goY3NzKQotICAgICAgICB3aGlsZSBtYXRjaDoKLSAgICAgICAgICAgIGNzcyA9ICcnLmpvaW4oWwotICAgICAgICAgICAgICAgIGNzc1s6bWF0Y2guc3RhcnQoKV0sCi0gICAgICAgICAgICAgICAgbWF0Y2guZ3JvdXAoKS5yZXBsYWNlKCI6IiwgIl9fX1BTRVVET0NMQVNTQ09MT05fX18iKSwKLSAgICAgICAgICAgICAgICBjc3NbbWF0Y2guZW5kKCk6XV0pCi0gICAgICAgICAgICBtYXRjaCA9IHJlZ2V4LnNlYXJjaChjc3MpCi0gICAgICAgIHJldHVybiBjc3MKLQotICAgIGNzcyA9IHBzZXVkb2NsYXNzY29sb24oY3NzKQotICAgICMgUmVtb3ZlIHNwYWNlcyBmcm9tIGJlZm9yZSB0aGluZ3MuCi0gICAgY3NzID0gcmUuc3ViKHIiXHMrKFshe307Oj4rXChcKVxdLF0pIiwgciJcMSIsIGNzcykKLQotICAgICMgSWYgdGhlcmUgaXMgYSBgQGNoYXJzZXRgLCB0aGVuIG9ubHkgYWxsb3cgb25lLCBhbmQgbW92ZSB0byB0aGUgYmVnaW5uaW5nLgotICAgIGNzcyA9IHJlLnN1YihyIl4oLiopKEBjaGFyc2V0IFwiW15cIl0qXCI7KSIsIHIiXDJcMSIsIGNzcykKLSAgICBjc3MgPSByZS5zdWIociJeKFxzKkBjaGFyc2V0IFteO10rO1xzKikrIiwgciJcMSIsIGNzcykKLQotICAgICMgUHV0IHRoZSBzcGFjZSBiYWNrIGluIGZvciBhIGZldyBjYXNlcywgc3VjaCBhcyBgQG1lZGlhIHNjcmVlbmAgYW5kCi0gICAgIyBgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKWAuCi0gICAgY3NzID0gcmUuc3ViKHIiXGJhbmRcKCIsICJhbmQgKCIsIGNzcykKLQotICAgICMgUHV0IHRoZSBjb2xvbnMgYmFjay4KLSAgICBjc3MgPSBjc3MucmVwbGFjZSgnX19fUFNFVURPQ0xBU1NDT0xPTl9fXycsICc6JykKLQotICAgICMgUmVtb3ZlIHNwYWNlcyBmcm9tIGFmdGVyIHRoaW5ncy4KLSAgICBjc3MgPSByZS5zdWIociIoWyF7fTo7PitcKFxbLF0pXHMrIiwgciJcMSIsIGNzcykKLQotICAgIHJldHVybiBjc3MKLQotCi1kZWYgcmVtb3ZlX3VubmVjZXNzYXJ5X3NlbWljb2xvbnMoY3NzKToKLSAgICAiIiJSZW1vdmUgdW5uZWNlc3Nhcnkgc2VtaWNvbG9ucy4iIiIKLQotICAgIHJldHVybiByZS5zdWIociI7K1x9IiwgIn0iLCBjc3MpCi0KLQotZGVmIHJlbW92ZV9lbXB0eV9ydWxlcyhjc3MpOgotICAgICIiIlJlbW92ZSBlbXB0eSBydWxlcy4iIiIKLQotICAgIHJldHVybiByZS5zdWIociJbXlx9XHtdK1x7XH0iLCAiIiwgY3NzKQotCi0KLWRlZiBub3JtYWxpemVfcmdiX2NvbG9yc190b19oZXgoY3NzKToKLSAgICAiIiJDb252ZXJ0IGByZ2IoNTEsMTAyLDE1MylgIHRvIGAjMzM2Njk5YC4iIiIKLQotICAgIHJlZ2V4ID0gcmUuY29tcGlsZShyInJnYlxzKlwoXHMqKFswLTksXHNdKylccypcKSIpCi0gICAgbWF0Y2ggPSByZWdleC5zZWFyY2goY3NzKQotICAgIHdoaWxlIG1hdGNoOgotICAgICAgICBjb2xvcnMgPSBtYXAobGFtYmRhIHM6IHMuc3RyaXAoKSwgbWF0Y2guZ3JvdXAoMSkuc3BsaXQoIiwiKSkKLSAgICAgICAgaGV4Y29sb3IgPSAnIyUuMnglLjJ4JS4yeCcgJSB0dXBsZShtYXAoaW50LCBjb2xvcnMpKQotICAgICAgICBjc3MgPSBjc3MucmVwbGFjZShtYXRjaC5ncm91cCgpLCBoZXhjb2xvcikKLSAgICAgICAgbWF0Y2ggPSByZWdleC5zZWFyY2goY3NzKQotICAgIHJldHVybiBjc3MKLQotCi1kZWYgY29uZGVuc2VfemVyb191bml0cyhjc3MpOgotICAgICIiIlJlcGxhY2UgYDAocHgsIGVtLCAlLCBldGMpYCB3aXRoIGAwYC4iIiIKLQotICAgIHJldHVybiByZS5zdWIociIoW1xzOl0pKDApKHB4fGVtfCV8aW58Y218bW18cGN8cHR8ZXgpIiwgciJcMVwyIiwgY3NzKQotCi0KLWRlZiBjb25kZW5zZV9tdWx0aWRpbWVuc2lvbmFsX3plcm9zKGNzcyk6Ci0gICAgIiIiUmVwbGFjZSBgOjAgMCAwIDA7YCwgYDowIDAgMDtgIGV0Yy4gd2l0aCBgOjA7YC4iIiIKLQotICAgIGNzcyA9IGNzcy5yZXBsYWNlKCI6MCAwIDAgMDsiLCAiOjA7IikKLSAgICBjc3MgPSBjc3MucmVwbGFjZSgiOjAgMCAwOyIsICI6MDsiKQotICAgIGNzcyA9IGNzcy5yZXBsYWNlKCI6MCAwOyIsICI6MDsiKQotCi0gICAgIyBSZXZlcnQgYGJhY2tncm91bmQtcG9zaXRpb246MDtgIHRvIHRoZSB2YWxpZCBgYmFja2dyb3VuZC1wb3NpdGlvbjowIDA7YC4KLSAgICBjc3MgPSBjc3MucmVwbGFjZSgiYmFja2dyb3VuZC1wb3NpdGlvbjowOyIsICJiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDsiKQotCi0gICAgcmV0dXJuIGNzcwotCi0KLWRlZiBjb25kZW5zZV9mbG9hdGluZ19wb2ludHMoY3NzKToKLSAgICAiIiJSZXBsYWNlIGAwLjZgIHdpdGggYC42YCB3aGVyZSBwb3NzaWJsZS4iIiIKLQotICAgIHJldHVybiByZS5zdWIociIoOnxccykwK1wuKFxkKykiLCByIlwxLlwyIiwgY3NzKQotCi0KLWRlZiBjb25kZW5zZV9oZXhfY29sb3JzKGNzcyk6Ci0gICAgIiIiU2hvcnRlbiBjb2xvcnMgZnJvbSAjQUFCQkNDIHRvICNBQkMgd2hlcmUgcG9zc2libGUuIiIiCi0KLSAgICByZWdleCA9IHJlLmNvbXBpbGUociIoW15cIic9XHNdKShccyopIyhbMC05YS1mQS1GXSkoWzAtOWEtZkEtRl0pKFswLTlhLWZBLUZdKShbMC05YS1mQS1GXSkoWzAtOWEtZkEtRl0pKFswLTlhLWZBLUZdKSIpCi0gICAgbWF0Y2ggPSByZWdleC5zZWFyY2goY3NzKQotICAgIHdoaWxlIG1hdGNoOgotICAgICAgICBmaXJzdCA9IG1hdGNoLmdyb3VwKDMpICsgbWF0Y2guZ3JvdXAoNSkgKyBtYXRjaC5ncm91cCg3KQotICAgICAgICBzZWNvbmQgPSBtYXRjaC5ncm91cCg0KSArIG1hdGNoLmdyb3VwKDYpICsgbWF0Y2guZ3JvdXAoOCkKLSAgICAgICAgaWYgZmlyc3QubG93ZXIoKSA9PSBzZWNvbmQubG93ZXIoKToKLSAgICAgICAgICAgIGNzcyA9IGNzcy5yZXBsYWNlKG1hdGNoLmdyb3VwKCksIG1hdGNoLmdyb3VwKDEpICsgbWF0Y2guZ3JvdXAoMikgKyAnIycgKyBmaXJzdCkKLSAgICAgICAgICAgIG1hdGNoID0gcmVnZXguc2VhcmNoKGNzcywgbWF0Y2guZW5kKCkgLSAzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbWF0Y2ggPSByZWdleC5zZWFyY2goY3NzLCBtYXRjaC5lbmQoKSkKLSAgICByZXR1cm4gY3NzCi0KLQotZGVmIGNvbmRlbnNlX3doaXRlc3BhY2UoY3NzKToKLSAgICAiIiJDb25kZW5zZSBtdWx0aXBsZSBhZGphY2VudCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW50byBvbmUuIiIiCi0KLSAgICByZXR1cm4gcmUuc3ViKHIiXHMrIiwgIiAiLCBjc3MpCi0KLQotZGVmIGNvbmRlbnNlX3NlbWljb2xvbnMoY3NzKToKLSAgICAiIiJDb25kZW5zZSBtdWx0aXBsZSBhZGphY2VudCBzZW1pY29sb24gY2hhcmFjdGVycyBpbnRvIG9uZS4iIiIKLQotICAgIHJldHVybiByZS5zdWIociI7OysiLCAiOyIsIGNzcykKLQotCi1kZWYgd3JhcF9jc3NfbGluZXMoY3NzLCBsaW5lX2xlbmd0aCk6Ci0gICAgIiIiV3JhcCB0aGUgbGluZXMgb2YgdGhlIGdpdmVuIENTUyB0byBhbiBhcHByb3hpbWF0ZSBsZW5ndGguIiIiCi0KLSAgICBsaW5lcyA9IFtdCi0gICAgbGluZV9zdGFydCA9IDAKLSAgICBmb3IgaSwgY2hhciBpbiBlbnVtZXJhdGUoY3NzKToKLSAgICAgICAgIyBJdCdzIHNhZmUgdG8gYnJlYWsgYWZ0ZXIgYH1gIGNoYXJhY3RlcnMuCi0gICAgICAgIGlmIGNoYXIgPT0gJ30nIGFuZCAoaSAtIGxpbmVfc3RhcnQgPj0gbGluZV9sZW5ndGgpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKGNzc1tsaW5lX3N0YXJ0OmkgKyAxXSkKLSAgICAgICAgICAgIGxpbmVfc3RhcnQgPSBpICsgMQotCi0gICAgaWYgbGluZV9zdGFydCA8IGxlbihjc3MpOgotICAgICAgICBsaW5lcy5hcHBlbmQoY3NzW2xpbmVfc3RhcnQ6XSkKLSAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0KLWRlZiBjc3NtaW4oY3NzLCB3cmFwPU5vbmUpOgotICAgIGNzcyA9IHJlbW92ZV9jb21tZW50cyhjc3MpCi0gICAgY3NzID0gY29uZGVuc2Vfd2hpdGVzcGFjZShjc3MpCi0gICAgIyBBIHBzZXVkbyBjbGFzcyBmb3IgdGhlIEJveCBNb2RlbCBIYWNrCi0gICAgIyAoc2VlIGh0dHA6Ly90YW50ZWsuY29tL0NTUy9FeGFtcGxlcy9ib3htb2RlbGhhY2suaHRtbCkKLSAgICBjc3MgPSBjc3MucmVwbGFjZSgnIlxcIn1cXCIiJywgIl9fX1BTRVVET0NMQVNTQk1IX19fIikKLSAgICBjc3MgPSByZW1vdmVfdW5uZWNlc3Nhcnlfd2hpdGVzcGFjZShjc3MpCi0gICAgY3NzID0gcmVtb3ZlX3VubmVjZXNzYXJ5X3NlbWljb2xvbnMoY3NzKQotICAgIGNzcyA9IGNvbmRlbnNlX3plcm9fdW5pdHMoY3NzKQotICAgIGNzcyA9IGNvbmRlbnNlX211bHRpZGltZW5zaW9uYWxfemVyb3MoY3NzKQotICAgIGNzcyA9IGNvbmRlbnNlX2Zsb2F0aW5nX3BvaW50cyhjc3MpCi0gICAgY3NzID0gbm9ybWFsaXplX3JnYl9jb2xvcnNfdG9faGV4KGNzcykKLSAgICBjc3MgPSBjb25kZW5zZV9oZXhfY29sb3JzKGNzcykKLSAgICBpZiB3cmFwIGlzIG5vdCBOb25lOgotICAgICAgICBjc3MgPSB3cmFwX2Nzc19saW5lcyhjc3MsIHdyYXApCi0gICAgY3NzID0gY3NzLnJlcGxhY2UoIl9fX1BTRVVET0NMQVNTQk1IX19fIiwgJyJcXCJ9XFwiIicpCi0gICAgY3NzID0gY29uZGVuc2Vfc2VtaWNvbG9ucyhjc3MpCi0gICAgcmV0dXJuIGNzcy5zdHJpcCgpCi0KLQotZGVmIG1haW4oKToKLSAgICBpbXBvcnQgb3B0cGFyc2UKLSAgICBpbXBvcnQgc3lzCi0KLSAgICBwID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAotICAgICAgICBwcm9nPSJjc3NtaW4iLCB2ZXJzaW9uPV9fdmVyc2lvbl9fLAotICAgICAgICB1c2FnZT0iJXByb2cgWy0td3JhcCBOXSIsCi0gICAgICAgIGRlc2NyaXB0aW9uPSIiIlJlYWRzIHJhdyBDU1MgZnJvbSBzdGRpbiwgYW5kIHdyaXRlcyBjb21wcmVzc2VkIENTUyB0byBzdGRvdXQuIiIiKQotCi0gICAgcC5hZGRfb3B0aW9uKAotICAgICAgICAnLXcnLCAnLS13cmFwJywgdHlwZT0naW50JywgZGVmYXVsdD1Ob25lLCBtZXRhdmFyPSdOJywKLSAgICAgICAgaGVscD0iV3JhcCBvdXRwdXQgdG8gYXBwcm94aW1hdGVseSBOIGNoYXJzIHBlciBsaW5lLiIpCi0KLSAgICBvcHRpb25zLCBhcmdzID0gcC5wYXJzZV9hcmdzKCkKLSAgICBzeXMuc3Rkb3V0LndyaXRlKGNzc21pbihzeXMuc3RkaW4ucmVhZCgpLCB3cmFwPW9wdGlvbnMud3JhcCkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9iZW5jaC9tYWluLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2JlbmNoL21haW4ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ODE1MDYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2JlbmNoL21haW4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMzYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIC0qLSBjb2Rpbmc6IGFzY2lpIC0qLQotciIiIgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIEJlbmNobWFyayBjc3NtaW4gaW1wbGVtZW50YXRpb25zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUJlbmNobWFyayBjc3NtaW4gaW1wbGVtZW50YXRpb25zLgotCi06Q29weXJpZ2h0OgotCi0gQ29weXJpZ2h0IDIwMTEgLSAyMDE0Ci0gQW5kclx4ZTkgTWFsbyBvciBoaXMgbGljZW5zb3JzLCBhcyBhcHBsaWNhYmxlCi0KLTpMaWNlbnNlOgotCi0gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1Vc2FnZTo6Ci0KLSAgICBweXRob24gLW1iZW5jaC5tYWluIFstYyBDT1VOVF0gWy1wIGZpbGVdIGNzc2ZpbGUgLi4uCi0KLSAgICAtYyBDT1VOVCAgbnVtYmVyIG9mIHJ1bnMgcGVyIGNzc2ZpbGUgYW5kIG1pbmlmaWVyLiBEZWZhdWx0cyB0byAxMC4KLSAgICAtcCBmaWxlICAgRmlsZSB0byB3cml0ZSB0aGUgYmVuY2htYXJrIHJlc3VsdHMgaW4gKHBpY2tsZWQpCi0KLSIiIgotaWYgX19kb2NfXzoKLSAgICBfX2RvY19fID0gX19kb2NfXy5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpCi1fX2F1dGhvcl9fID0gciJBbmRyXHhlOSBNYWxvIi5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpCi1fX2RvY2Zvcm1hdF9fID0gInJlc3RydWN0dXJlZHRleHQgZW4iCi1fX2xpY2Vuc2VfXyA9ICJBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAiCi1fX3ZlcnNpb25fXyA9ICIxLjAuMCIKLQotaW1wb3J0IHN5cyBhcyBfc3lzCi1pbXBvcnQgdGltZSBhcyBfdGltZQotCi1pbXBvcnRfbm90ZXMgPSBbXQotY2xhc3MgX3BfMDJfX3Jjc3NtaW4ob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIGltcG9ydCByY3NzbWluCi0gICAgICAgIGNzc21pbiA9IHJjc3NtaW4uX21ha2VfY3NzbWluKHB5dGhvbl9vbmx5PVRydWUpCi0gICAgICAgIHNlbGYuY3NzbWluID0gbGFtYmRhIHg6IGNzc21pbih4LCBrZWVwX2JhbmdfY29tbWVudHM9VHJ1ZSkKLQotY2xhc3MgX3BfMDNfX3Jjc3NtaW4ob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIGltcG9ydCBfcmNzc21pbgotICAgICAgICBjc3NtaW4gPSBfcmNzc21pbi5jc3NtaW4KLSAgICAgICAgc2VsZi5jc3NtaW4gPSBsYW1iZGEgeDogY3NzbWluKHgsIGtlZXBfYmFuZ19jb21tZW50cz1UcnVlKQotCi1jbGFzcyBjc3NtaW5zKG9iamVjdCk6Ci0gICAgZnJvbSBiZW5jaCBpbXBvcnQgY3NzbWluIGFzIHBfMDFfY3NzbWluCi0gICAgcF8wMl9yY3NzbWluID0gX3BfMDJfX3Jjc3NtaW4oKQotICAgIHRyeToKLSAgICAgICAgcF8wM19fcmNzc21pbiA9IF9wXzAzX19yY3NzbWluKCkKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIGltcG9ydF9ub3Rlcy5hcHBlbmQoIl9yY3NzbWluIChDLVBvcnQpIG5vdCBhdmFpbGFibGUiKQotICAgICAgICBwcmludChpbXBvcnRfbm90ZXNbLTFdKQotCi1wcmludCgiUHl0aG9uIFJlbGVhc2U6ICVzIiAlICIuIi5qb2luKG1hcChzdHIsIF9zeXMudmVyc2lvbl9pbmZvWzozXSkpKQotcHJpbnQoIiIpCi0KLQotZGVmIHNsdXJwKGZpbGVuYW1lKToKLSAgICAiIiIgTG9hZCBhIGZpbGUgIiIiCi0gICAgZnAgPSBvcGVuKGZpbGVuYW1lKQotICAgIHRyeToKLSAgICAgICAgcmV0dXJuIGZwLnJlYWQoKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGZwLmNsb3NlKCkKLQotCi1kZWYgcHJpbnRfKCp2YWx1ZSwgKiprd2FyZ3MpOgotICAgICIiIiBQcmludCBzdHVmZiAiIiIKLSAgICAoa3dhcmdzLmdldCgnZmlsZScpIG9yIF9zeXMuc3Rkb3V0KS53cml0ZSgKLSAgICAgICAgJycuam9pbih2YWx1ZSkgKyBrd2FyZ3MuZ2V0KCdlbmQnLCAnXG4nKQotICAgICkKLQotCi1kZWYgYmVuY2goZmlsZW5hbWVzLCBjb3VudCk6Ci0gICAgIiIiCi0gICAgQmVuY2htYXJrIHRoZSBtaW5pZmllcnMgd2l0aCBnaXZlbiBjc3Mgc2FtcGxlcwotCi0gICAgOlBhcmFtZXRlcnM6Ci0gICAgICBgZmlsZW5hbWVzYCA6IHNlcXVlbmNlCi0gICAgICAgIExpc3Qgb2YgZmlsZW5hbWVzCi0KLSAgICAgIGBjb3VudGAgOiBgYGludGBgCi0gICAgICAgIE51bWJlciBvZiBydW5zIHBlciBjc3MgZmlsZSBhbmQgbWluaWZpZXIKLQotICAgIDpFeGNlcHRpb25zOgotICAgICAgLSBgUnVudGltZUVycm9yYCA6IGVtcHR5IGZpbGVuYW1lcyBzZXF1ZW5jZQotICAgICIiIgotICAgIGlmIG5vdCBmaWxlbmFtZXM6Ci0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiTWlzc2luZyBmaWxlcyB0byBiZW5jaG1hcmsiKQotICAgIHRyeToKLSAgICAgICAgeHJhbmdlCi0gICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgeHJhbmdlID0gcmFuZ2UKLSAgICB0cnk6Ci0gICAgICAgIGNtcAotICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgIGNtcCA9IGxhbWJkYSBhLCBiOiAoYSA+IGIpIC0gKGEgPCBiKQotCi0gICAgcG9ydHMgPSBbaXRlbSBmb3IgaXRlbSBpbiBkaXIoY3NzbWlucykgaWYgaXRlbS5zdGFydHN3aXRoKCdwXycpXQotICAgIHBvcnRzLnNvcnQoKQotICAgIHNwYWNlID0gbWF4KG1hcChsZW4sIHBvcnRzKSkgLSA0Ci0gICAgcG9ydHMgPSBbKGl0ZW1bNTpdLCBnZXRhdHRyKGNzc21pbnMsIGl0ZW0pLmNzc21pbikgZm9yIGl0ZW0gaW4gcG9ydHNdCi0gICAgZmx1c2ggPSBfc3lzLnN0ZG91dC5mbHVzaAotCi0gICAgc3RydWN0ID0gW10KLSAgICBpbnB1dHMgPSBbKGZpbGVuYW1lLCBzbHVycChmaWxlbmFtZSkpIGZvciBmaWxlbmFtZSBpbiBmaWxlbmFtZXNdCi0gICAgZm9yIGZpbGVuYW1lLCBzdHlsZSBpbiBpbnB1dHM6Ci0gICAgICAgIHByaW50XygiQmVuY2htYXJraW5nICVyLi4uIiAlIGZpbGVuYW1lLCBlbmQ9IiAiKQotICAgICAgICBmbHVzaCgpCi0gICAgICAgIG91dHB1dHMgPSBbXQotICAgICAgICBmb3IgXywgY3NzbWluIGluIHBvcnRzOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGNzc21pbihzdHlsZSkpCi0gICAgICAgICAgICBleGNlcHQgKFN5c3RlbUV4aXQsIEtleWJvYXJkSW50ZXJydXB0KToKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKE5vbmUpCi0gICAgICAgIHN0cnVjdC5hcHBlbmQoZGljdCgKLSAgICAgICAgICAgIGZpbGVuYW1lPWZpbGVuYW1lLAotICAgICAgICAgICAgc2l6ZXM9WwotICAgICAgICAgICAgICAgIChpdGVtIGlzIG5vdCBOb25lIGFuZCBsZW4oaXRlbSkgb3IgTm9uZSkgZm9yIGl0ZW0gaW4gb3V0cHV0cwotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIHNpemU9bGVuKHN0eWxlKSwKLSAgICAgICAgICAgIG1lc3NhZ2VzPVtdLAotICAgICAgICAgICAgdGltZXM9W10sCi0gICAgICAgICkpCi0gICAgICAgIHByaW50XygiKCUuMWYgS2lCKSIgJSAoc3RydWN0Wy0xXVsnc2l6ZSddIC8gMTAyNC4wLCkpCi0gICAgICAgIGZsdXNoKCkKLSAgICAgICAgdGltZXMgPSBbXQotICAgICAgICBmb3IgaWR4LCAobmFtZSwgY3NzbWluKSBpbiBlbnVtZXJhdGUocG9ydHMpOgotICAgICAgICAgICAgaWYgb3V0cHV0c1tpZHhdIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcHJpbnRfKCIgIEZBSUxFRCAlcyIgJSAobmFtZSwpKQotICAgICAgICAgICAgICAgIHN0cnVjdFstMV1bJ3RpbWVzJ10uYXBwZW5kKChuYW1lLCBOb25lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnRfKCIgIFRpbWluZyAlcyVzLi4uICglNS4xZiBLaUIgJXMpIiAlICgKLSAgICAgICAgICAgICAgICAgICAgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIiAiICogKHNwYWNlIC0gbGVuKG5hbWUpKSwKLSAgICAgICAgICAgICAgICAgICAgbGVuKG91dHB1dHNbaWR4XSkgLyAxMDI0LjAsCi0gICAgICAgICAgICAgICAgICAgIGlkeCA9PSAwIGFuZCAnKicgb3IgWyc9JywgJz4nLCAnPCddWwotICAgICAgICAgICAgICAgICAgICAgICAgY21wKGxlbihvdXRwdXRzW2lkeF0pLCBsZW4ob3V0cHV0c1swXSkpCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgKSwgZW5kPSIgIikKLSAgICAgICAgICAgICAgICBmbHVzaCgpCi0KLSAgICAgICAgICAgICAgICB4Y291bnQgPSBjb3VudAotICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50ZWQgPSBbTm9uZSBmb3IgXyBpbiB4cmFuZ2UoeGNvdW50KV0KLSAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBfdGltZS50aW1lKCkKLSAgICAgICAgICAgICAgICAgICAgZm9yIF8gaW4gY291bnRlZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNzc21pbihzdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgZW5kID0gX3RpbWUudGltZSgpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IChlbmQgLSBzdGFydCkgKiAxMDAwCi0gICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdCA8IDEwOiAjIGF2b2lkIG1lYXN1cmluZyB3aXRoaW4gdGhlIGVycm9yIHJhbmdlCi0gICAgICAgICAgICAgICAgICAgICAgICB4Y291bnQgKj0gMTAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHRpbWVzLmFwcGVuZChyZXN1bHQgLyB4Y291bnQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgICAgICBwcmludF8oIiU4LjJmIG1zIiAlIHRpbWVzWy0xXSwgZW5kPSIgIikKLSAgICAgICAgICAgICAgICBmbHVzaCgpCi0gICAgICAgICAgICAgICAgaWYgbGVuKHRpbWVzKSA8PSAxOgotICAgICAgICAgICAgICAgICAgICBwcmludF8oKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50XygiKGZhY3RvcjogJXMpIiAlICgnLCAnLmpvaW4oWwotICAgICAgICAgICAgICAgICAgICAgICAgJyUuMmYnICUgKHRpbWVkIC8gdGltZXNbLTFdKSBmb3IgdGltZWQgaW4gdGltZXNbOi0xXQotICAgICAgICAgICAgICAgICAgICBdKSkpCi0gICAgICAgICAgICAgICAgc3RydWN0Wy0xXVsndGltZXMnXS5hcHBlbmQoKG5hbWUsIHRpbWVzWy0xXSkpCi0KLSAgICAgICAgICAgIGZsdXNoKCkKLSAgICAgICAgcHJpbnRfKCkKLQotICAgIHJldHVybiBzdHJ1Y3QKLQotCi1kZWYgbWFpbihhcmd2PU5vbmUpOgotICAgICIiIiBNYWluICIiIgotICAgIGltcG9ydCBnZXRvcHQgYXMgX2dldG9wdAotICAgIGltcG9ydCBvcyBhcyBfb3MKLSAgICBpbXBvcnQgcGlja2xlIGFzIF9waWNrbGUKLQotICAgIGlmIGFyZ3YgaXMgTm9uZToKLSAgICAgICAgYXJndiA9IF9zeXMuYXJndlsxOl0KLSAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBfZ2V0b3B0LmdldG9wdChhcmd2LCAiaGM6cDoiLCBbImhlbHAiXSkKLSAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yOgotICAgICAgICBlID0gX3N5cy5leGNfaW5mbygpWzBdKF9zeXMuZXhjX2luZm8oKVsxXSkKLSAgICAgICAgcHJpbnQgPj4gX3N5cy5zdGRlcnIsICIlc1xuVHJ5ICVzIC1tYmVuY2gubWFpbiAtLWhlbHAiICUgKAotICAgICAgICAgICAgZSwKLSAgICAgICAgICAgIF9vcy5wYXRoLmJhc2VuYW1lKF9zeXMuZXhlY3V0YWJsZSksCi0gICAgICAgICkKLSAgICAgICAgX3N5cy5leGl0KDIpCi0KLSAgICBjb3VudCwgcGlja2xlID0gMTAsIE5vbmUKLSAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvcHRzOgotICAgICAgICBpZiBrZXkgaW4gKCItaCIsICItLWhlbHAiKToKLSAgICAgICAgICAgIHByaW50ID4+IF9zeXMuc3RkZXJyLCAoCi0gICAgICAgICAgICAgICAgIiVzIC1tYmVuY2gubWFpbiBbLWMgY291bnRdIFstcCBmaWxlXSBjc3NmaWxlIC4uLiIgJSAoCi0gICAgICAgICAgICAgICAgICAgIF9vcy5wYXRoLmJhc2VuYW1lKF9zeXMuZXhlY3V0YWJsZSksCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgKQotICAgICAgICAgICAgX3N5cy5leGl0KDApCi0gICAgICAgIGVsaWYga2V5ID09ICctYyc6Ci0gICAgICAgICAgICBjb3VudCA9IGludCh2YWx1ZSkKLSAgICAgICAgZWxpZiBrZXkgPT0gJy1wJzoKLSAgICAgICAgICAgIHBpY2tsZSA9IHN0cih2YWx1ZSkKLQotICAgIHN0cnVjdCA9IGJlbmNoKGFyZ3MsIGNvdW50KQotICAgIGlmIHBpY2tsZToKLSAgICAgICAgZnAgPSBvcGVuKHBpY2tsZSwgJ3diJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnAud3JpdGUoX3BpY2tsZS5kdW1wcygoCi0gICAgICAgICAgICAgICAgIi4iLmpvaW4obWFwKHN0ciwgX3N5cy52ZXJzaW9uX2luZm9bOjNdKSksCi0gICAgICAgICAgICAgICAgaW1wb3J0X25vdGVzLAotICAgICAgICAgICAgICAgIHN0cnVjdCwKLSAgICAgICAgICAgICksIDApKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vYmVuY2gvd2lraXBlZGlhLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9iZW5jaC93aWtpcGVkaWEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzA3OWUzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9iZW5jaC93aWtpcGVkaWEuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMzg2MSArMCwwIEBACi0vKgotICogVGhpcyBDU1MgaXMgdGFrZW4gZnJvbSB3aWtpcGVkaWEgLyBtZWRpYXdpa2ksIGl0J3MgdGhlIGNvbWJpbmVkIGZpbGVzIG9mCi0gKiB0aGUgdmVjdG9yIHNraW4gZGVzY3JpYmVkIGF0OgotICoKLSAqIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2lraXBlZGlhOkNhdGFsb2d1ZV9vZl9DU1NfY2xhc3NlcwotICovCi0KLS8qCi0gKiBBbnkgcnVsZXMgd2hpY2ggc2hvdWxkIG5vdCBiZSBmbGlwcGVkIGF1dG9tYXRpY2FsbHkgaW4gcmlnaHQtdG8tbGVmdCBzaXR1YXRpb25zIHNob3VsZCBiZQotICogcHJlcGVuZGVkIHdpdGggQG5vZmxpcCBpbiBhIGNvbW1lbnQgYmxvY2suIEltYWdlcyB0aGF0IHNob3VsZCBiZSBlbWJlZGRlZCBhcyBiYXNlNjQgZGF0YS1VUkxzCi0gKiBzaG91bGQgYmUgcHJlcGVuZGVkIHdpdGggQGVtYmVkIGluIGEgY29tbWVudCBibG9jay4KLSAqCi0gKiBUaGlzIHN0eWxlLXNoZWV0IGVtcGxveXMgYSBmZXcgQ1NTIHRyaWNrIHRvIGFjY29tcGxpc2ggY29tcGF0aWJpbGl0eSB3aXRoIGEgd2lkZSByYW5nZSBvZiB3ZWIKLSAqIGJyb3dzZXJzLiBUaGUgbW9zdCBjb21tb24gdHJpY2sgaXMgdG8gdXNlIHNvbWUgc3R5bGVzIGluIElFNiBvbmx5LiBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSB1c2luZwotICogYSBydWxlIHRoYXQgbWFrZXMgdGhpbmdzIHdvcmsgaW4gSUU2LCBhbmQgdGhlbiBmb2xsb3dpbmcgaXQgd2l0aCBhIHJ1bGUgdGhhdCBiZWdpbnMgd2l0aAotICogImh0bWwgPiBib2R5IiBvciB1c2UgYSBjaGlsZCBzZWxlY3RvciAiPiIsIHdoaWNoIGlzIGlnbm9yZWQgYnkgSUU2IGJlY2F1c2UgaXQgZG9lcyBub3Qgc3VwcG9ydAotICogdGhlIGNoaWxkIHNlbGVjdG9yLiBZb3UgY2FuIHNwb3QgdGhpcyBieSBsb29raW5nIGZvciB0aGUgIk9WRVJSSURERU4gQlkgQ09NUExJQU5UIEJST1dTRVJTIiBhbmQKLSAqICJJR05PUkVEIEJZIElFNiIgY29tbWVudHMuCi0gKi8KLQotLyogRnJhbWV3b3JrICovCi1odG1sLAotYm9keSB7Ci0JaGVpZ2h0OiAxMDAlOwotCW1hcmdpbjogMDsKLQlwYWRkaW5nOiAwOwotCWZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwotCWZvbnQtc2l6ZTogMWVtOwotfQotYm9keSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMzsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3BhZ2UtYmFzZS5wbmcpOwotfQotLyogQ29udGVudCAqLwotZGl2I2NvbnRlbnQgewotCW1hcmdpbi1sZWZ0OiAxMGVtOwotCXBhZGRpbmc6IDFlbTsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL2JvcmRlci5wbmcpOwotCWJhY2tncm91bmQtcG9zaXRpb246IHRvcCBsZWZ0OwotCWJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteTsKLQliYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLQljb2xvcjogYmxhY2s7Ci0JZGlyZWN0aW9uOiBsdHI7Ci19Ci0vKiBIZWFkICovCi0jbXctcGFnZS1iYXNlIHsKLQloZWlnaHQ6IDVlbTsKLQliYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3BhZ2UtZmFkZS5wbmcpOwotCWJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSBsZWZ0OwotCWJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKLX0KLSNtdy1oZWFkLWJhc2UgewotCW1hcmdpbi10b3A6IC01ZW07Ci0JbWFyZ2luLWxlZnQ6IDEwZW07Ci0JaGVpZ2h0OiA1ZW07Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy9ib3JkZXIucG5nKTsKLQliYWNrZ3JvdW5kLXBvc2l0aW9uOiBib3R0b20gbGVmdDsKLQliYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Ci19Ci1kaXYjbXctaGVhZCB7Ci0JcG9zaXRpb246IGFic29sdXRlOwotCXRvcDogMDsKLQlyaWdodDogMDsKLQl3aWR0aDogMTAwJTsKLX0KLWRpdiNtdy1oZWFkIGg1IHsKLQltYXJnaW46IDA7Ci0JcGFkZGluZzogMDsKLX0KLS8qIEhpZGUgZW1wdHkgcG9ydGxldHMgKi8KLWRpdi5lbXB0eVBvcnRsZXQgewotCQlkaXNwbGF5OiBub25lOwotfQotLyogUGVyc29uYWwgKi8KLSNwLXBlcnNvbmFsIHsKLQlwb3NpdGlvbjogYWJzb2x1dGU7Ci0JdG9wOiAwOwotCXJpZ2h0OiAwLjc1ZW07Ci19Ci0jcC1wZXJzb25hbCBoNSB7Ci0JZGlzcGxheTogbm9uZTsKLX0KLSNwLXBlcnNvbmFsIHVsIHsKLQlsaXN0LXN0eWxlOiBub25lOwotCW1hcmdpbjogMDsKLQlwYWRkaW5nLWxlZnQ6IDEwZW07IC8qIEtlZXAgZnJvbSBvdmVybGFwcGluZyBsb2dvICovCi19Ci0vKiBAbm9mbGlwICovCi0jcC1wZXJzb25hbCBsaSB7Ci0JbGluZS1oZWlnaHQ6IDEuMTI1ZW07Ci0JZmxvYXQ6IGxlZnQ7Ci19Ci0vKiBUaGlzIG9uZSBmbGlwcyEgKi8KLSNwLXBlcnNvbmFsIGxpIHsKLQltYXJnaW4tbGVmdDogMC43NWVtOwotCW1hcmdpbi10b3A6IDAuNWVtOwotCWZvbnQtc2l6ZTogMC43NWVtOwotCXdoaXRlLXNwYWNlOiBub3dyYXA7Ci19Ci0vKiBOYXZpZ2F0aW9uIENvbnRhaW5lcnMgKi8KLSNsZWZ0LW5hdmlnYXRpb24gewotCXBvc2l0aW9uOiBhYnNvbHV0ZTsKLQlsZWZ0OiAxMGVtOwotCXRvcDogMi41ZW07Ci19Ci0jcmlnaHQtbmF2aWdhdGlvbiB7Ci0JZmxvYXQ6IHJpZ2h0OwotCW1hcmdpbi10b3A6IDIuNWVtOwotfQotLyogTmF2aWdhdGlvbiBMYWJlbHMgKi8KLWRpdi52ZWN0b3JUYWJzIGg1LAotZGl2LnZlY3Rvck1lbnUgaDUgc3BhbiB7Ci0JZGlzcGxheTogbm9uZTsKLX0KLS8qIE5hbWVzcGFjZXMgYW5kIFZpZXdzICovCi0vKiBAbm9mbGlwICovCi1kaXYudmVjdG9yVGFicyB7Ci0JZmxvYXQ6IGxlZnQ7Ci0JaGVpZ2h0OiAyLjVlbTsKLX0KLWRpdi52ZWN0b3JUYWJzIHsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3RhYi1icmVhay5wbmcpOwotCWJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSBsZWZ0OwotCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Ci0JcGFkZGluZy1sZWZ0OiAxcHg7Ci19Ci0vKiBAbm9mbGlwICovCi1kaXYudmVjdG9yVGFicyB1bCB7Ci0JZmxvYXQ6IGxlZnQ7Ci19Ci1kaXYudmVjdG9yVGFicyB1bCB7Ci0JaGVpZ2h0OiAxMDAlOwotCWxpc3Qtc3R5bGU6IG5vbmU7Ci0JbWFyZ2luOiAwOwotCXBhZGRpbmc6IDA7Ci19Ci0vKiBAbm9mbGlwICovCi1kaXYudmVjdG9yVGFicyB1bCBsaSB7Ci0JZmxvYXQ6IGxlZnQ7Ci19Ci0vKiBPVkVSUklEREVOIEJZIENPTVBMSUFOVCBCUk9XU0VSUyAqLwotZGl2LnZlY3RvclRhYnMgdWwgbGkgewotCWxpbmUtaGVpZ2h0OiAxLjEyNWVtOwotCWRpc3BsYXk6IGlubGluZS1ibG9jazsKLQloZWlnaHQ6IDEwMCU7Ci0JbWFyZ2luOiAwOwotCXBhZGRpbmc6IDA7Ci0JYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMzsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3RhYi1ub3JtYWwtZmFkZS5wbmcpOwotCWJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSBsZWZ0OwotCWJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKLQl3aGl0ZS1zcGFjZTpub3dyYXA7Ci19Ci0vKiBJR05PUkVEIEJZIElFNiAqLwotZGl2LnZlY3RvclRhYnMgdWwgPiBsaSB7Ci0JZGlzcGxheTogYmxvY2s7Ci19Ci1kaXYudmVjdG9yVGFicyBsaS5zZWxlY3RlZCB7Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy90YWItY3VycmVudC1mYWRlLnBuZyk7Ci19Ci0vKiBPVkVSUklEREVOIEJZIENPTVBMSUFOVCBCUk9XU0VSUyAqLwotZGl2LnZlY3RvclRhYnMgbGkgYSB7Ci0JZGlzcGxheTogaW5saW5lLWJsb2NrOwotCWhlaWdodDogMS45ZW07Ci0JcGFkZGluZy1sZWZ0OiAwLjVlbTsKLQlwYWRkaW5nLXJpZ2h0OiAwLjVlbTsKLQljb2xvcjogIzA2NDVhZDsKLQljdXJzb3I6IHBvaW50ZXI7Ci0JZm9udC1zaXplOiAwLjhlbTsKLX0KLS8qIElHTk9SRUQgQlkgSUU2ICovCi1kaXYudmVjdG9yVGFicyBsaSA+IGEgewotCWRpc3BsYXk6IGJsb2NrOwotfQotZGl2LnZlY3RvclRhYnMgbGkuaWNvbiBhIHsKLQliYWNrZ3JvdW5kLXBvc2l0aW9uOiBib3R0b20gcmlnaHQ7Ci0JYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLX0KLS8qIE9WRVJSSURERU4gQlkgQ09NUExJQU5UIEJST1dTRVJTICovCi1kaXYudmVjdG9yVGFicyBzcGFuIGEgIHsKLQlkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0JcGFkZGluZy10b3A6IDEuMjVlbTsKLX0KLS8qIElHTk9SRUQgQlkgSUU2ICovCi0vKiBAbm9mbGlwICovCi1kaXYudmVjdG9yVGFicyBzcGFuID4gYSB7Ci0JZmxvYXQ6IGxlZnQ7Ci0JZGlzcGxheTogYmxvY2s7Ci19Ci1kaXYudmVjdG9yVGFicyBzcGFuIHsKLQlkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy90YWItYnJlYWsucG5nKTsKLQliYWNrZ3JvdW5kLXBvc2l0aW9uOiBib3R0b20gcmlnaHQ7Ci0JYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLX0KLWRpdi52ZWN0b3JUYWJzIGxpLnNlbGVjdGVkIGEsCi1kaXYudmVjdG9yVGFicyBsaS5zZWxlY3RlZCBhOnZpc2l0ZWR7Ci0JY29sb3I6ICMzMzMzMzM7Ci0JdGV4dC1kZWNvcmF0aW9uOiBub25lOwotfQotZGl2LnZlY3RvclRhYnMgbGkubmV3IGEsCi1kaXYudmVjdG9yVGFicyBsaS5uZXcgYTp2aXNpdGVkewotCWNvbG9yOiAjYTU1ODU4OwotfQotLyogVmFyaWFudHMgYW5kIEFjdGlvbnMgKi8KLS8qIEBub2ZsaXAgKi8KLWRpdi52ZWN0b3JNZW51IHsKLQlkaXJlY3Rpb246IGx0cjsKLQlmbG9hdDogbGVmdDsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL2Fycm93LWRvd24taWNvbi5wbmcpOwotCWJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgNjAlOwotCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Ci0JY3Vyc29yOiBwb2ludGVyOwotfQotZGl2LnZlY3Rvck1lbnVGb2N1cyB7Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy9hcnJvdy1kb3duLWZvY3VzLWljb24ucG5nKTsKLQliYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDYwJTsKLX0KLS8qIEBub2ZsaXAgKi8KLWJvZHkucnRsIGRpdi52ZWN0b3JNZW51IHsKLQlkaXJlY3Rpb246IHJ0bDsKLX0KLS8qIE9WRVJSSURERU4gQlkgQ09NUExJQU5UIEJST1dTRVJTICovCi0vKiBAbm9mbGlwICovCi1kaXYjbXctaGVhZCBkaXYudmVjdG9yTWVudSBoNSB7Ci0JZmxvYXQ6IGxlZnQ7Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy90YWItYnJlYWsucG5nKTsKLQliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwotfQotLyogVGhpcyB3aWxsIGJlIGZsaXBwZWQgLSB1bmxpa2UgdGhlIG9uZSBhYm92ZSBpdCAqLwotZGl2I213LWhlYWQgZGl2LnZlY3Rvck1lbnUgaDUgewotCWJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSBsZWZ0OwotCW1hcmdpbi1sZWZ0OiAtMXB4OwotfQotLyogSUdOT1JFRCBCWSBJRTYgKi8KLWRpdiNtdy1oZWFkIGRpdi52ZWN0b3JNZW51ID4gaDUgewotCWJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Ci19Ci1kaXYjbXctaGVhZCBkaXYudmVjdG9yTWVudSBoNCB7Ci0JZGlzcGxheTogaW5saW5lLWJsb2NrOwotCWZsb2F0OiBsZWZ0OwotCWZvbnQtc2l6ZTogMC44ZW07Ci0JcGFkZGluZy1sZWZ0OiAwLjVlbTsKLQlwYWRkaW5nLXRvcDogMS4zNzVlbTsKLQlmb250LXdlaWdodDogbm9ybWFsOwotCWJvcmRlcjogbm9uZTsKLX0KLS8qIE9WRVJSSURERU4gQlkgQ09NUExJQU5UIEJST1dTRVJTICovCi0vKiBAbm9mbGlwICovCi1kaXYudmVjdG9yTWVudSBoNSBhIHsKLQlkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0Jd2lkdGg6IDI0cHg7Ci0JaGVpZ2h0OiAyLjVlbTsKLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy90YWItYnJlYWsucG5nKTsKLQliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwotfQotLyogVGhpcyB3aWxsIGJlIGZsaXBwZWQgLSB1bmxpa2UgdGhlIG9uZSBhYm92ZSBpdCAqLwotZGl2LnZlY3Rvck1lbnUgaDUgYSB7Ci0JYmFja2dyb3VuZC1wb3NpdGlvbjogYm90dG9tIHJpZ2h0OwotfQotLyogSUdOT1JFRCBCWSBJRTYgKi8KLWRpdi52ZWN0b3JNZW51IGg1ID4gYSB7Ci0JZGlzcGxheTogYmxvY2s7Ci19Ci1kaXYudmVjdG9yTWVudSBkaXYubWVudSB7Ci0JcG9zaXRpb246IHJlbGF0aXZlOwotCWRpc3BsYXk6IG5vbmU7Ci0JY2xlYXI6IGJvdGg7Ci0JdGV4dC1hbGlnbjogbGVmdDsKLX0KLS8qIE9WRVJSSURERU4gQlkgQ09NUExJQU5UIEJST1dTRVJTICovCi0vKiBAbm9mbGlwICovCi1ib2R5LnJ0bCBkaXYudmVjdG9yTWVudSBkaXYubWVudSB7Ci0JbWFyZ2luLWxlZnQ6IDI0cHg7Ci19Ci0vKiBJR05PUkVEIEJZIElFNiAqLwotLyogQG5vZmxpcCAqLwotYm9keS5ydGwgZGl2LnZlY3Rvck1lbnUgPiBkaXYubWVudSB7Ci0JbWFyZ2luLWxlZnQ6IGF1dG87Ci19Ci0vKiBJR05PUkVEIEJZIElFNiAqLwotLyogQWxzbyBmaXhlcyBvbGQgdmVyc2lvbnMgb2YgRmlyZUZveCAqLwotLyogQG5vZmxpcCAqLwotYm9keS5ydGwgZGl2LnZlY3Rvck1lbnUgPiBkaXYubWVudSwKLXg6LW1vei1hbnktbGluayB7Ci0JbWFyZ2luLWxlZnQ6IDIzcHg7Ci19Ci0vKiBFbmFibGUgZm9yY2luZyBzaG93aW5nIG9mIHRoZSBtZW51IGZvciBhY2Nlc3NpYmlsaXR5ICovCi1kaXYudmVjdG9yTWVudTpob3ZlciBkaXYubWVudSwKLWRpdi52ZWN0b3JNZW51IGRpdi5tZW51Rm9yY2VTaG93IHsKLQlkaXNwbGF5OiBibG9jazsKLX0KLWRpdi52ZWN0b3JNZW51IHVsIHsKLQlwb3NpdGlvbjogYWJzb2x1dGU7Ci0JYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0JYm9yZGVyOiBzb2xpZCAxcHggc2lsdmVyOwotCWJvcmRlci10b3Atd2lkdGg6IDA7Ci0JbGlzdC1zdHlsZTogbm9uZTsKLQlsaXN0LXN0eWxlLWltYWdlOiBub25lOwotCWxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKLQlwYWRkaW5nOiAwOwotCW1hcmdpbjogMDsKLQltYXJnaW4tbGVmdDogLTFweDsKLQl0ZXh0LWFsaWduOiBsZWZ0OwotfQotLyogRml4ZXMgb2xkIHZlcnNpb25zIG9mIEZpcmVGb3ggKi8KLWRpdi52ZWN0b3JNZW51IHVsLAoteDotbW96LWFueS1saW5rIHsKLQltaW4td2lkdGg6IDVlbTsKLX0KLS8qIFJldHVybnMgdGhpbmdzIGJhY2sgdG8gbm9ybWFsIGluIG1vZGVybiB2ZXJzaW9ucyBvZiBGaXJlRm94ICovCi1kaXYudmVjdG9yTWVudSB1bCwKLXg6LW1vei1hbnktbGluaywKLXg6ZGVmYXVsdCB7Ci0JbWluLXdpZHRoOiAwOwotfQotZGl2LnZlY3Rvck1lbnUgbGkgewotCXBhZGRpbmc6IDA7Ci0JbWFyZ2luOiAwOwotCXRleHQtYWxpZ246IGxlZnQ7Ci0JbGluZS1oZWlnaHQ6IDFlbTsKLX0KLS8qIE9WRVJSSURERU4gQlkgQ09NUExJQU5UIEJST1dTRVJTICovCi1kaXYudmVjdG9yTWVudSBsaSBhIHsKLQlkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0JcGFkZGluZzogMC41ZW07Ci0Jd2hpdGUtc3BhY2U6IG5vd3JhcDsKLQljb2xvcjogIzA2NDVhZDsKLQljdXJzb3I6IHBvaW50ZXI7Ci0JZm9udC1zaXplOiAwLjhlbTsKLX0KLS8qIElHTk9SRUQgQlkgSUU2ICovCi1kaXYudmVjdG9yTWVudSBsaSA+IGEgewotCWRpc3BsYXk6IGJsb2NrOwotfQotZGl2LnZlY3Rvck1lbnUgbGkuc2VsZWN0ZWQgYSwKLWRpdi52ZWN0b3JNZW51IGxpLnNlbGVjdGVkIGE6dmlzaXRlZCB7Ci0JY29sb3I6ICMzMzMzMzM7Ci0JdGV4dC1kZWNvcmF0aW9uOiBub25lOwotfQotLyogU2VhcmNoICovCi0jcC1zZWFyY2ggaDUgewotCWRpc3BsYXk6IG5vbmU7Ci19Ci0vKiBAbm9mbGlwICovCi0jcC1zZWFyY2ggewotCWZsb2F0OiBsZWZ0OwotfQotI3Atc2VhcmNoIHsKLQltYXJnaW4tcmlnaHQ6IDAuNWVtOwotCW1hcmdpbi1sZWZ0OiAwLjVlbTsKLX0KLSNwLXNlYXJjaCBmb3JtLAotI3Atc2VhcmNoIGlucHV0IHsKLQltYXJnaW46IDA7Ci0JbWFyZ2luLXRvcDogMC40ZW07Ci19Ci1kaXYjc2ltcGxlU2VhcmNoIHsKLQlkaXNwbGF5OiBibG9jazsKLQl3aWR0aDogMTRlbTsKLQloZWlnaHQ6IDEuNGVtOwotCW1hcmdpbi10b3A6IDAuNjVlbTsKLQlwb3NpdGlvbjogcmVsYXRpdmU7Ci0JbWluLWhlaWdodDogMXB4OyAvKiBHb3R0YSB0cmlnZ2VyIGhhc0xheW91dCBmb3IgSUU3ICovCi0JYm9yZGVyOiBzb2xpZCAxcHggI0FBQUFBQTsKLQljb2xvcjogYmxhY2s7Ci0JYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy9zZWFyY2gtZmFkZS5wbmcpOwotCWJhY2tncm91bmQtcG9zaXRpb246IHRvcCBsZWZ0OwotCWJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKLX0KLWRpdiNzaW1wbGVTZWFyY2ggbGFiZWwgewotCS8qCi0JICogRE9OJ1QgUEFOSUMhIEJyb3dzZXJzIHRoYXQgd29uJ3Qgc2NhbGUgdGhpcyBwcm9wZXJseSBhcmUgdGhlIHNhbWUgYnJvd3NlcnMgdGhhdCBoYXZlIEpTIGlzc3VlcyB0aGF0IHByZXZlbnQKLQkgKiB0aGlzIGZyb20gZXZlciBiZWluZyBzaG93biBhbnl3YXlzLgotCSovCi0JZm9udC1zaXplOiAxM3B4OwotCXRvcDogMC4yNWVtOwotCWRpcmVjdGlvbjogbHRyOwotfQotZGl2I3NpbXBsZVNlYXJjaCBpbnB1dCB7Ci0JY29sb3I6IGJsYWNrOwotCWRpcmVjdGlvbjogbHRyOwotfQotZGl2I3NpbXBsZVNlYXJjaCBpbnB1dDpmb2N1cyB7Ci0Jb3V0bGluZTogbm9uZTsKLX0KLWRpdiNzaW1wbGVTZWFyY2ggaW5wdXQucGxhY2Vob2xkZXIgewotCWNvbG9yOiAjOTk5OTk5OwotfQotZGl2I3NpbXBsZVNlYXJjaCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7Ci0JY29sb3I6ICM5OTk5OTk7Ci19Ci1kaXYjc2ltcGxlU2VhcmNoIGlucHV0I3NlYXJjaElucHV0IHsKLQlwb3NpdGlvbjogYWJzb2x1dGU7Ci0JdG9wOiAwOwotCWxlZnQ6IDA7Ci0Jd2lkdGg6IDkwJTsKLQltYXJnaW46IDA7Ci0JcGFkZGluZzogMDsKLQlwYWRkaW5nLWxlZnQ6IDAuMmVtOwotCXBhZGRpbmctdG9wOiAwLjJlbTsKLQlwYWRkaW5nLWJvdHRvbTogMC4yZW07Ci0Jb3V0bGluZTogbm9uZTsKLQlib3JkZXI6IG5vbmU7Ci0JLyoKLQkgKiBET04nVCBQQU5JQyEgQnJvd3NlcnMgdGhhdCB3b24ndCBzY2FsZSB0aGlzIHByb3Blcmx5IGFyZSB0aGUgc2FtZSBicm93c2VycyB0aGF0IGhhdmUgSlMgaXNzdWVzIHRoYXQgcHJldmVudAotCSAqIHRoaXMgZnJvbSBldmVyIGJlaW5nIHNob3duIGFueXdheXMuCi0JKi8KLQlmb250LXNpemU6IDEzcHg7Ci0JYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci0JZGlyZWN0aW9uOiBsdHI7Ci19Ci1kaXYjc2ltcGxlU2VhcmNoIGJ1dHRvbiNzZWFyY2hCdXR0b24gewotCXBvc2l0aW9uOiBhYnNvbHV0ZTsKLQl3aWR0aDogMTAlOwotCXJpZ2h0OiAwOwotCXRvcDogMDsKLQlwYWRkaW5nOiAwOwotCXBhZGRpbmctdG9wOiAwLjNlbTsKLQlwYWRkaW5nLWJvdHRvbTogMC4yZW07Ci0JcGFkZGluZy1yaWdodDogMC40ZW07Ci0JbWFyZ2luOiAwOwotCWJvcmRlcjogbm9uZTsKLQljdXJzb3I6IHBvaW50ZXI7Ci0JYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci0JYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKLX0KLS8qIE9WRVJSSURERU4gQlkgQ09NUExJQU5UIEJST1dTRVJTICovCi1kaXYjc2ltcGxlU2VhcmNoIGJ1dHRvbiNzZWFyY2hCdXR0b24gaW1nIHsKLQlib3JkZXI6IG5vbmU7Ci0JbWFyZ2luOiAwOwotCW1hcmdpbi10b3A6IC0zcHg7Ci0JcGFkZGluZzogMDsKLX0KLS8qIElHTk9SRUQgQlkgSUU2ICovCi1kaXYjc2ltcGxlU2VhcmNoIGJ1dHRvbiNzZWFyY2hCdXR0b24gPiBpbWcgewotCW1hcmdpbjogMDsKLX0KLS8qIFBhbmVsICovCi1kaXYjbXctcGFuZWwgewotCXBvc2l0aW9uOiBhYnNvbHV0ZTsKLQl0b3A6IDE2MHB4OwotCXBhZGRpbmctdG9wOiAxZW07Ci0Jd2lkdGg6IDEwZW07Ci0JbGVmdDogMDsKLX0KLWRpdiNtdy1wYW5lbCBkaXYucG9ydGFsIHsKLQlwYWRkaW5nLWJvdHRvbTogMS41ZW07Ci0JZGlyZWN0aW9uOiBsdHI7Ci19Ci1kaXYjbXctcGFuZWwgZGl2LnBvcnRhbCBoNSB7Ci0JZm9udC13ZWlnaHQ6IG5vcm1hbDsKLQljb2xvcjogIzQ0NDQ0NDsKLQlwYWRkaW5nOiAwLjI1ZW07Ci0JcGFkZGluZy10b3A6IDA7Ci0JcGFkZGluZy1sZWZ0OiAxLjc1ZW07Ci0JY3Vyc29yOiBkZWZhdWx0OwotCWJvcmRlcjogbm9uZTsKLQlmb250LXNpemU6IDAuNzVlbTsKLX0KLWRpdiNtdy1wYW5lbCBkaXYucG9ydGFsIGRpdi5ib2R5IHsKLQltYXJnaW46IDA7Ci0JcGFkZGluZy10b3A6IDAuNWVtOwotCW1hcmdpbi1sZWZ0OiAxLjI1ZW07Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy9wb3J0YWwtYnJlYWsucG5nKTsKLQliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwotCWJhY2tncm91bmQtcG9zaXRpb246IHRvcCBsZWZ0OwotfQotZGl2I213LXBhbmVsIGRpdi5wb3J0YWwgZGl2LmJvZHkgdWwgewotCWxpc3Qtc3R5bGU6IG5vbmU7Ci0JbGlzdC1zdHlsZS1pbWFnZTogbm9uZTsKLQlsaXN0LXN0eWxlLXR5cGU6IG5vbmU7Ci0JcGFkZGluZzogMDsKLQltYXJnaW46IDA7Ci19Ci1kaXYjbXctcGFuZWwgZGl2LnBvcnRhbCBkaXYuYm9keSB1bCBsaSB7Ci0JbGluZS1oZWlnaHQ6IDEuMTI1ZW07Ci0JcGFkZGluZzogMDsKLQlwYWRkaW5nLWJvdHRvbTogMC41ZW07Ci0JbWFyZ2luOiAwOwotCW92ZXJmbG93OiBoaWRkZW47Ci0JZm9udC1zaXplOiAwLjc1ZW07Ci19Ci1kaXYjbXctcGFuZWwgZGl2LnBvcnRhbCBkaXYuYm9keSB1bCBsaSBhIHsKLQljb2xvcjogIzA2NDVhZDsKLX0KLWRpdiNtdy1wYW5lbCBkaXYucG9ydGFsIGRpdi5ib2R5IHVsIGxpIGE6dmlzaXRlZCB7Ci0JY29sb3I6ICMwYjAwODA7Ci19Ci0vKiBGb290ZXIgKi8KLWRpdiNmb290ZXIgewotCW1hcmdpbi1sZWZ0OiAxMGVtOwotCW1hcmdpbi10b3A6IDA7Ci0JcGFkZGluZzogMC43NWVtOwotCS8qIEBlbWJlZCAqLwotCWJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvYm9yZGVyLnBuZyk7Ci0JYmFja2dyb3VuZC1wb3NpdGlvbjogdG9wIGxlZnQ7Ci0JYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OwotCWRpcmVjdGlvbjogbHRyOwotfQotZGl2I2Zvb3RlciB1bCB7Ci0JbGlzdC1zdHlsZTogbm9uZTsKLQlsaXN0LXN0eWxlLWltYWdlOiBub25lOwotCWxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKLQltYXJnaW46IDA7Ci0JcGFkZGluZzogMDsKLX0KLWRpdiNmb290ZXIgdWwgbGkgewotCW1hcmdpbjogMDsKLQlwYWRkaW5nOiAwOwotCXBhZGRpbmctdG9wOiAwLjVlbTsKLQlwYWRkaW5nLWJvdHRvbTogMC41ZW07Ci0JY29sb3I6ICMzMzMzMzM7Ci0JZm9udC1zaXplOiAwLjdlbTsKLX0KLWRpdiNmb290ZXIgI2Zvb3Rlci1pY29ucyB7Ci0JZmxvYXQ6IHJpZ2h0OwotfQotLyogQG5vZmxpcCAqLwotYm9keS5sdHIgZGl2I2Zvb3RlciAjZm9vdGVyLXBsYWNlcyB7Ci0JZmxvYXQ6IGxlZnQ7Ci19Ci1kaXYjZm9vdGVyICNmb290ZXItaW5mbyBsaSB7Ci0JbGluZS1oZWlnaHQ6IDEuNGVtOwotfQotZGl2I2Zvb3RlciAjZm9vdGVyLWljb25zIGxpIHsKLQlmbG9hdDogbGVmdDsKLQltYXJnaW4tbGVmdDogMC41ZW07Ci0JbGluZS1oZWlnaHQ6IDJlbTsKLQl0ZXh0LWFsaWduOiByaWdodDsKLX0KLWRpdiNmb290ZXIgI2Zvb3Rlci1wbGFjZXMgbGkgewotCWZsb2F0OiBsZWZ0OwotCW1hcmdpbi1yaWdodDogMWVtOwotCWxpbmUtaGVpZ2h0OiAyZW07Ci19Ci0vKiBMb2dvICovCi0jcC1sb2dvIHsKLQlwb3NpdGlvbjogYWJzb2x1dGU7Ci0JdG9wOiAtMTYwcHg7Ci0JbGVmdDogMDsKLQl3aWR0aDogMTBlbTsKLQloZWlnaHQ6IDE2MHB4OwotfQotI3AtbG9nbyBhIHsKLQlkaXNwbGF5OiBibG9jazsKLQl3aWR0aDogMTBlbTsKLQloZWlnaHQ6IDE2MHB4OwotCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Ci0JYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsKLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci19Ci0KLS8qCi0gKgotICogVGhlIGZvbGxvd2luZyBjb2RlIGlzIGhpZ2hseSBtb2RpZmllZCBmcm9tIG1vbm9ib29rLiBJdCB3b3VsZCBiZSBuaWNlIGlmIHRoZQotICogcHJlZnRvYyBpZCB3YXMgbW9yZSBodW1hbiByZWFkYWJsZSBsaWtlIHByZWZlcmVuY2VzLXRvYyBmb3IgaW5zdGFuY2UsCi0gKiBob3dlcnZlciB0aGlzIHdvdWxkIHJlcXVpcmUgYmFja3BvcnRpbmcgdGhlIG90aGVyIHNraW5zLgotICovCi0KLS8qIFByZWZlcmVuY2VzICovCi0jcHJlZnRvYyB7Ci0JLyogVGFicyAqLwotCXdpZHRoOiAxMDAlOwotCWZsb2F0OiBsZWZ0OwotCWNsZWFyOiBib3RoOwotCW1hcmdpbjogMCAhaW1wb3J0YW50OwotCXBhZGRpbmc6IDAgIWltcG9ydGFudDsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3ByZWZlcmVuY2VzLWJyZWFrLnBuZyk7Ci0JYmFja2dyb3VuZC1wb3NpdGlvbjogYm90dG9tIGxlZnQ7Ci0JYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLX0KLQkjcHJlZnRvYyBsaSB7Ci0JCS8qIFRhYiAqLwotCQlmbG9hdDogbGVmdDsKLQkJbWFyZ2luOiAwOwotCQlwYWRkaW5nOiAwOwotCQlwYWRkaW5nLXJpZ2h0OiAxcHg7Ci0JCWhlaWdodDogMi4yNWVtOwotCQl3aGl0ZS1zcGFjZTogbm93cmFwOwotCQlsaXN0LXN0eWxlLXR5cGU6IG5vbmU7Ci0JCWxpc3Qtc3R5bGUtaW1hZ2U6IG5vbmU7Ci0JCS8qIEBlbWJlZCAqLwotCQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3ByZWZlcmVuY2VzLWJyZWFrLnBuZyk7Ci0JCWJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSByaWdodDsKLQkJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLQl9Ci0JLyogU2FkbHksIElFNiB3b24ndCB1bmRlcnN0YW5kIHRoaXMgKi8KLQkjcHJlZnRvYyBsaTpmaXJzdC1jaGlsZCB7Ci0JCW1hcmdpbi1sZWZ0OiAxcHg7Ci0JfQotCSNwcmVmdG9jIGEsCi0JI3ByZWZ0b2MgYTphY3RpdmUgewotCQlkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0JCXBvc2l0aW9uOiByZWxhdGl2ZTsKLQkJY29sb3I6ICMwNjQ1YWQ7Ci0JCXBhZGRpbmc6IDAuNWVtOwotCQl0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0JCWJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Ci0JCWZvbnQtc2l6ZTogMC45ZW07Ci0JfQotCSNwcmVmdG9jIGE6aG92ZXIsCi0JI3ByZWZ0b2MgYTpmb2N1cyB7Ci0JCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwotCX0KLQkjcHJlZnRvYyBsaS5zZWxlY3RlZCBhIHsKLQkJLyogQGVtYmVkICovCi0JCWJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvcHJlZmVyZW5jZXMtZmFkZS5wbmcpOwotCQliYWNrZ3JvdW5kLXBvc2l0aW9uOiBib3R0b207Ci0JCWJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKLQkJY29sb3I6ICMzMzMzMzM7Ci0JCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKLQl9Ci0jcHJlZmVyZW5jZXMgewotCWZsb2F0OiBsZWZ0OwotCXdpZHRoOiAxMDAlOwotCW1hcmdpbjogMDsKLQltYXJnaW4tdG9wOiAtMnB4OwotCWNsZWFyOiBib3RoOwotCWJvcmRlcjogc29saWQgMXB4ICNjY2NjY2M7Ci0JYmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3ByZWZlcmVuY2VzLWJhc2UucG5nKTsKLX0KLSNwcmVmZXJlbmNlcyBmaWVsZHNldCB7Ci0JYm9yZGVyOiBub25lOwotCWJvcmRlci10b3A6IHNvbGlkIDFweCAjY2NjY2NjOwotfQotI3ByZWZlcmVuY2VzIGZpZWxkc2V0LnByZWZzZWN0aW9uIHsKLQlib3JkZXI6IG5vbmU7Ci0JcGFkZGluZzogMDsKLQltYXJnaW46IDFlbTsKLX0KLSNwcmVmZXJlbmNlcyBsZWdlbmQgewotCWNvbG9yOiAjNjY2NjY2OwotfQotI3ByZWZlcmVuY2VzIGZpZWxkc2V0LnByZWZzZWN0aW9uIGxlZ2VuZC5tYWluTGVnZW5kIHsKLQlkaXNwbGF5OiBub25lOwotfQotI3ByZWZlcmVuY2VzIHRkIHsKLQlwYWRkaW5nLWxlZnQ6IDAuNWVtOwotCXBhZGRpbmctcmlnaHQ6IDAuNWVtOwotfQotI3ByZWZlcmVuY2VzIHRkLmh0bWxmb3JtLXRpcCB7Ci0JZm9udC1zaXplOiB4LXNtYWxsOwotCXBhZGRpbmc6IC4yZW0gMmVtOwotCWNvbG9yOiAjNjY2NjY2OwotfQotI3ByZWZlcmVuY2VzIGRpdi5tdy1wcmVmcy1idXR0b25zIHsKLQlwYWRkaW5nOiAxZW07Ci19Ci0jcHJlZmVyZW5jZXMgZGl2Lm13LXByZWZzLWJ1dHRvbnMgaW5wdXQgewotCW1hcmdpbi1yaWdodDogMC4yNWVtOwotfQotCi0vKioKLSAqIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBzbGlnaHRseSBtb2RpZmllZCBmcm9tIG1vbm9ib29rCi0gKi8KLWRpdiNjb250ZW50IHsKLQlsaW5lLWhlaWdodDogMS41ZW07Ci19Ci0jYm9keUNvbnRlbnQgewotCWZvbnQtc2l6ZTogMC44ZW07Ci19Ci0KLS5lZGl0c2VjdGlvbiB7Ci0JZmxvYXQ6IHJpZ2h0OwotfQotCi11bCB7Ci0JLyogQGVtYmVkICovCi0JbGlzdC1zdHlsZS1pbWFnZTogdXJsKGltYWdlcy9idWxsZXQtaWNvbi5wbmcpOwotfQotCi1wcmUgewotCWxpbmUtaGVpZ2h0OiAxLjNlbTsKLX0KLQotLyogU2l0ZSBOb3RpY2UgKGluY2x1ZGVzIG5vdGljZXMgZnJvbSBDZW50cmFsTm90aWNlIGV4dGVuc2lvbikgKi8KLSNzaXRlTm90aWNlIHsKLQlmb250LXNpemU6IDAuOGVtOwotfQotI2ZpcnN0SGVhZGluZyB7Ci0JcGFkZGluZy10b3A6IDA7Ci0JbWFyZ2luLXRvcDogMDsKLQlwYWRkaW5nLXRvcDogMDsKLQlmb250LXNpemU6IDEuNmVtOwotfQotZGl2I2NvbnRlbnQgYS5leHRlcm5hbCwKLWRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiBePSJnb3BoZXI6Ly8iXSB7Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZDogdXJsKGltYWdlcy9leHRlcm5hbC1saW5rLWx0ci1pY29uLnBuZykgY2VudGVyIHJpZ2h0IG5vLXJlcGVhdDsKLQlwYWRkaW5nLXJpZ2h0OiAxM3B4OwotfQotZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmIF49Imh0dHBzOi8vIl0sCi0ubGluay1odHRwcyB7Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZDogdXJsKGltYWdlcy9sb2NrLWljb24ucG5nKSBjZW50ZXIgcmlnaHQgbm8tcmVwZWF0OwotCXBhZGRpbmctcmlnaHQ6IDEzcHg7Ci19Ci1kaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgXj0ibWFpbHRvOiJdLAotLmxpbmstbWFpbHRvIHsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kOiB1cmwoaW1hZ2VzL21haWwtaWNvbi5wbmcpIGNlbnRlciByaWdodCBuby1yZXBlYXQ7Ci0JcGFkZGluZy1yaWdodDogMTNweDsKLX0KLWRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiBePSJuZXdzOiJdIHsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kOiB1cmwoaW1hZ2VzL25ld3MtaWNvbi5wbmcpIGNlbnRlciByaWdodCBuby1yZXBlYXQ7Ci0JcGFkZGluZy1yaWdodDogMTNweDsKLX0KLWRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiBePSJmdHA6Ly8iXSwKLS5saW5rLWZ0cCB7Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZDogdXJsKGltYWdlcy9maWxlLWljb24ucG5nKSBjZW50ZXIgcmlnaHQgbm8tcmVwZWF0OwotCXBhZGRpbmctcmlnaHQ6IDEzcHg7Ci19Ci1kaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgXj0iaXJjOi8vIl0sCi1kaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgXj0iaXJjczovLyJdLAotLmxpbmstaXJjIHsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kOiB1cmwoaW1hZ2VzL3RhbGstaWNvbi5wbmcpIGNlbnRlciByaWdodCBuby1yZXBlYXQ7Ci0JcGFkZGluZy1yaWdodDogMTNweDsKLX0KLWRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIub2dnIl0sIGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIuT0dHIl0sCi1kaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgJD0iLm1pZCJdLCBkaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgJD0iLk1JRCJdLAotZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5taWRpIl0sIGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIuTUlESSJdLAotZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5tcDMiXSwgZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5NUDMiXSwKLWRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIud2F2Il0sIGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIuV0FWIl0sCi1kaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgJD0iLndtYSJdLCBkaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgJD0iLldNQSJdLAotLmxpbmstYXVkaW8gewotCS8qIEBlbWJlZCAqLwotCWJhY2tncm91bmQ6IHVybChpbWFnZXMvYXVkaW8taWNvbi5wbmcpIGNlbnRlciByaWdodCBuby1yZXBlYXQ7Ci0JcGFkZGluZy1yaWdodDogMTNweDsKLX0KLWRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIub2dtIl0sIGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIuT0dNIl0sCi1kaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgJD0iLmF2aSJdLCBkaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgJD0iLkFWSSJdLAotZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5tcGVnIl0sIGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIuTVBFRyJdLAotZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5tcGciXSwgZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5NUEciXSwKLS5saW5rLXZpZGVvIHsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kOiB1cmwoaW1hZ2VzL3ZpZGVvLWljb24ucG5nKSBjZW50ZXIgcmlnaHQgbm8tcmVwZWF0OwotCXBhZGRpbmctcmlnaHQ6IDEzcHg7Ci19Ci1kaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgJD0iLnBkZiJdLCBkaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgJD0iLlBERiJdLAotZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICo9Ii5wZGYjIl0sIGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAqPSIuUERGIyJdLAotZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICo9Ii5wZGY/Il0sIGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAqPSIuUERGPyJdLAotLmxpbmstZG9jdW1lbnQgewotCS8qIEBlbWJlZCAqLwotCWJhY2tncm91bmQ6IHVybChpbWFnZXMvZG9jdW1lbnQtaWNvbi5wbmcpIGNlbnRlciByaWdodCBuby1yZXBlYXQ7Ci0JcGFkZGluZy1yaWdodDogMTNweDsKLX0KLQotLyogSWNvbiBmb3IgVXNlcm5hbWVzICovCi0jcHQtdXNlcnBhZ2UsCi0jcHQtYW5vbnVzZXJwYWdlLAotI3B0LWxvZ2luIHsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kOiB1cmwoaW1hZ2VzL3VzZXItaWNvbi5wbmcpIGxlZnQgdG9wIG5vLXJlcGVhdDsKLQlwYWRkaW5nLWxlZnQ6IDE1cHggIWltcG9ydGFudDsKLQl0ZXh0LXRyYW5zZm9ybTogbm9uZTsKLX0KLQotLnJlZGlyZWN0VGV4dCB7Ci0JZm9udC1zaXplOiAxNDAlOwotfQotCi0ucmVkaXJlY3RNc2cgaW1nIHsKLQl2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207Ci19Ci0KLSNib2R5Q29udGVudCB7Ci0JcG9zaXRpb246IHJlbGF0aXZlOwotCXdpZHRoOiAxMDAlOwotfQotI213LWpzLW1lc3NhZ2UgewotCWZvbnQtc2l6ZTogMC44ZW07Ci19Ci1kaXYjYm9keUNvbnRlbnQgewotCWxpbmUtaGVpZ2h0OiAxLjVlbTsKLX0KLQotLyogV2F0Y2gvVW53YXRjaCBJY29uIFN0eWxpbmcgKi8KLSNjYS11bndhdGNoLmljb24gYSwKLSNjYS13YXRjaC5pY29uIGEgewotCW1hcmdpbjogMDsKLQlwYWRkaW5nOiAwOwotCW91dGxpbmU6IG5vbmU7Ci0JZGlzcGxheTogYmxvY2s7Ci0Jd2lkdGg6IDI2cHg7Ci0JLyogVGhpcyBoaWRlcyB0aGUgdGV4dCBidXQgc2hvd3MgdGhlIGJhY2tncm91bmQgaW1hZ2UgKi8KLQlwYWRkaW5nLXRvcDogMy4xZW07Ci0JbWFyZ2luLXRvcDogMDsKLQkvKiBPbmx5IGFwcGxpZWQgaW4gSUU2ICovCi0JbWFyZ2luLXRvcDogLTAuOGVtICFpZTsKLQloZWlnaHQ6IDA7Ci0Jb3ZlcmZsb3c6IGhpZGRlbjsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3dhdGNoLWljb25zLnBuZyk7Ci19Ci0jY2EtdW53YXRjaC5pY29uIGEgewotCWJhY2tncm91bmQtcG9zaXRpb246IC00M3B4IDYwJTsKLX0KLSNjYS13YXRjaC5pY29uIGEgewotCWJhY2tncm91bmQtcG9zaXRpb246IDVweCA2MCU7Ci19Ci0jY2EtdW53YXRjaC5pY29uIGE6aG92ZXIsCi0jY2EtdW53YXRjaC5pY29uIGE6Zm9jdXMgewotCWJhY2tncm91bmQtcG9zaXRpb246IC02N3B4IDYwJTsKLX0KLSNjYS13YXRjaC5pY29uIGE6aG92ZXIsCi0jY2Etd2F0Y2guaWNvbiBhOmZvY3VzIHsKLQliYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTlweCA2MCU7Ci19Ci0jY2EtdW53YXRjaC5pY29uIGEubG9hZGluZywKLSNjYS13YXRjaC5pY29uIGEubG9hZGluZyB7Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy93YXRjaC1pY29uLWxvYWRpbmcuZ2lmKTsKLQliYWNrZ3JvdW5kLXBvc2l0aW9uOiA1cHggNjAlOwotfQotI2NhLXVud2F0Y2guaWNvbiBhIHNwYW4sCi0jY2Etd2F0Y2guaWNvbiBhIHNwYW4gewotCWRpc3BsYXk6IG5vbmU7Ci19Ci1kaXYudmVjdG9yVGFicyB1bCB7Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3RhYi1icmVhay5wbmcpOwotCWJhY2tncm91bmQtcG9zaXRpb246cmlnaHQgYm90dG9tOwotCWJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsKLX0KLQotLyogVG9vbHRpcHMgYXJlIG91dHNpZGUgb2YgdGhlIG5vcm1hbCBib2R5IGNvZGUsIHNvIHRoaXMgaGVscHMgbWFrZSB0aGUgc2l6ZSBvZiB0aGUgdGV4dCBzZW5zaWJsZSAqLwotLnRpcHN5IHsKLQlmb250LXNpemU6IDAuOGVtOwotfQotLyoqCi0gKiBDU1MgaW4gdGhpcyBmaWxlIGlzIHVzZWQgYnkgKmFsbCogc2tpbnMgKHRoYXQgaGF2ZSBhbnkgQ1NTIGF0IGFsbCkuIEJlCi0gKiBjYXJlZnVsIHdoYXQgeW91IHB1dCBpbiBoZXJlLCBzaW5jZSB3aGF0IGxvb2tzIGdvb2QgaW4gb25lIHNraW4gbWF5IG5vdCBpbgotICogYW5vdGhlciwgYnV0IGRvbid0IGlnbm9yZSB0aGUgcG9vciBwcmUtTW9ub2Jvb2sgdXNlcnMgZWl0aGVyLgotICovCi0KLS8qIEdFTkVSQUwgQ0xBU1NFUyBGT1IgRElSRUNUSU9OQUxJVFkgU1VQUE9SVCAqLwotCi0vKioKLSAqIFRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIHVzZWQgZm9yIHRleHQgZGVwZW5kaW5nIG9uIHRoZSBjb250ZW50IGRpcmVjdGlvbi4KLSAqIENvbnRlbnQgc3R1ZmYgbGlrZSBlZGl0c2VjdGlvbiwgdWwvb2wgYW5kIFRPQyBkZXBlbmQgb24gdGhpcy4KLSAqLwotLm13LWNvbnRlbnQtbHRyIHsKLQkvKiBAbm9mbGlwICovCi0JZGlyZWN0aW9uOiBsdHI7Ci19Ci0ubXctY29udGVudC1ydGwgewotCS8qIEBub2ZsaXAgKi8KLQlkaXJlY3Rpb246IHJ0bDsKLX0KLQotLyogTW9zdCBpbnB1dCBmaWVsZHMgc2hvdWxkIGJlIGluIHNpdGUgZGlyZWN0aW9uICovCi0uc2l0ZWRpci1sdHIgdGV4dGFyZWEsCi0uc2l0ZWRpci1sdHIgaW5wdXQgewotCS8qIEBub2ZsaXAgKi8KLQlkaXJlY3Rpb246IGx0cjsKLX0KLS5zaXRlZGlyLXJ0bCB0ZXh0YXJlYSwKLS5zaXRlZGlyLXJ0bCBpbnB1dCB7Ci0JLyogQG5vZmxpcCAqLwotCWRpcmVjdGlvbjogcnRsOwotfQotCi0vKiBJbnB1dCB0eXBlcyB0aGF0IHNob3VsZCBmb2xsb3cgdXNlciBkaXJlY3Rpb24sIGxpa2UgYnV0dG9ucyAqLwotLyogVE9ETzogV2hhdCBhYm91dCBidXR0b25zIGluIHdpa2lwYWdlIGNvbnRlbnQgPyAqLwotaW5wdXRbdHlwZT0ic3VibWl0Il0sCi1pbnB1dFt0eXBlPSJidXR0b24iXSwKLWlucHV0W3R5cGU9InJlc2V0Il0sCi1pbnB1dFt0eXBlPSJmaWxlIl0gewotCWRpcmVjdGlvbjogbHRyOwotfQotCi0vKiBPdmVycmlkZSBkZWZhdWx0IHZhbHVlcyAqLwotdGV4dGFyZWFbZGlyPSJsdHIiXSwKLWlucHV0W2Rpcj0ibHRyIl0gewotCS8qIEBub2ZsaXAgKi8KLQlkaXJlY3Rpb246IGx0cjsKLX0KLXRleHRhcmVhW2Rpcj0icnRsIl0sCi1pbnB1dFtkaXI9InJ0bCJdIHsKLQkvKiBAbm9mbGlwICovCi0JZGlyZWN0aW9uOiBydGw7Ci19Ci0KLS8qIERlZmF1bHQgc3R5bGUgZm9yIHNlbWFudGljIHRhZ3MgKi8KLWFiYnIsCi1hY3JvbnltLAotLmV4cGxhaW4gewotCWJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQ7Ci0JY3Vyc29yOiBoZWxwOwotfQotCi0vKiBDb2xvcmVkIHdhdGNobGlzdCBhbmQgcmVjZW50IGNoYW5nZXMgbnVtYmVycyAqLwotLm13LXBsdXNtaW51cy1wb3MgewotCWNvbG9yOiAjMDA2NDAwOyAvKiBkYXJrIGdyZWVuICovCi19Ci0ubXctcGx1c21pbnVzLW5lZyB7Ci0JY29sb3I6ICM4YjAwMDA7IC8qIGRhcmsgcmVkICovCi19Ci0ubXctcGx1c21pbnVzLW51bGwgewotCWNvbG9yOiAjYWFhOyAvKiBncmF5ICovCi19Ci0KLS8qKgotICogTGlua3MgdG8gcmVkaXJlY3RzIGFwcGVhciBpdGFsaWNpemVkIG9uIFtbU3BlY2lhbDpBbGxQYWdlc11dLCBbW1NwZWNpYWw6UHJlZml4SW5kZXhdXSwKLSAqIFtbU3BlY2lhbDpXYXRjaGxpc3QvZWRpdF1dIGFuZCBpbiBjYXRlZ29yeSBsaXN0aW5ncy4KLSAqLwotLmFsbHBhZ2VzcmVkaXJlY3QsCi0ucmVkaXJlY3QtaW4tY2F0ZWdvcnksCi0ud2F0Y2hsaXN0cmVkaXIgewotCWZvbnQtc3R5bGU6IGl0YWxpYzsKLX0KLQotLyogQ29tbWVudCBhbmQgdXNlcm5hbWUgcG9ydGlvbnMgb2YgUkMgZW50cmllcyAqLwotc3Bhbi5jb21tZW50IHsKLQlmb250LXN0eWxlOiBpdGFsaWM7Ci19Ci0KLXNwYW4uY2hhbmdlZGJ5IHsKLQlmb250LXNpemU6IDk1JTsKLX0KLQotLyogTWF0aCAqLwotLnRleHZjIHsKLQlkaXJlY3Rpb246IGx0cjsKLQl1bmljb2RlLWJpZGk6IGVtYmVkOwotfQotaW1nLnRleCB7Ci0JdmVydGljYWwtYWxpZ246IG1pZGRsZTsKLX0KLXNwYW4udGV4aHRtbCB7Ci0JZm9udC1mYW1pbHk6IHNlcmlmOwotfQotCi0vKioKLSAqIEFkZCBhIGJpdCBvZiBtYXJnaW4gc3BhY2UgYmV0d2VlbiB0aGUgcHJldmlldyBhbmQgdGhlIHRvb2xiYXIuCi0gKiBUaGlzIHJlcGxhY2VzIHRoZSB1Z2x5IDxwPjxiciAvPjwvcD4gd2UgdXNlZCB0byBpbnNlcnQgaW50byB0aGUgcGFnZSBzb3VyY2UKLSAqLwotI3dpa2lQcmV2aWV3Lm9udG9wIHsKLQltYXJnaW4tYm90dG9tOiAxZW07Ci19Ci0KLS8qIFN0b3AgZmxvYXRzIGZyb20gaW50cnVkaW5nIGludG8gZWRpdCBhcmVhIGluIHByZXZpZXdzICovCi0jZWRpdGZvcm0sCi0jdG9vbGJhciwKLSN3cFRleHRib3gxIHsKLQljbGVhcjogYm90aDsKLX0KLSN0b29sYmFyIGltZyB7Ci0JY3Vyc29yOiBwb2ludGVyOwotfQotZGl2I213LWpzLW1lc3NhZ2UgewotCW1hcmdpbjogMWVtIDUlOwotCXBhZGRpbmc6IDAuNWVtIDIuNSU7Ci0JYm9yZGVyOiBzb2xpZCAxcHggI2RkZDsKLQliYWNrZ3JvdW5kLWNvbG9yOiAjZmNmY2ZjOwotfQotCi0vKiBFZGl0IHNlY3Rpb24gbGlua3MgKi8KLS5lZGl0c2VjdGlvbiB7Ci0JZmxvYXQ6IHJpZ2h0OwotCW1hcmdpbi1sZWZ0OiA1cHg7Ci19Ci0vKiBDb3JyZWN0IGRpcmVjdGlvbmFsaXR5IHdoZW4gcGFnZSBkaXIgaXMgZGlmZmVyZW50IGZyb20gc2l0ZS91c2VyIGRpciAqLwotLm13LWNvbnRlbnQtbHRyIC5lZGl0c2VjdGlvbiwKLS5tdy1jb250ZW50LXJ0bCAubXctY29udGVudC1sdHIgLmVkaXRzZWN0aW9uIHsKLQkvKiBAbm9mbGlwICovCi0JZmxvYXQ6IHJpZ2h0OwotfQotLm13LWNvbnRlbnQtcnRsIC5lZGl0c2VjdGlvbiwKLS5tdy1jb250ZW50LWx0ciAubXctY29udGVudC1ydGwgLmVkaXRzZWN0aW9uIHsKLQkvKiBAbm9mbGlwICovCi0JZmxvYXQ6IGxlZnQ7Ci19Ci0KLS8qKgotICogRmlsZSBkZXNjcmlwdGlvbiBwYWdlCi0gKi8KLQotZGl2Lm13LWZpbGVwYWdlLXJlc29sdXRpb25pbmZvIHsKLQlmb250LXNpemU6IHNtYWxsZXI7Ci19Ci0KLS8qKgotICogRmlsZSBoaXN0b3JpZXMKLSAqLwotaDIjZmlsZWhpc3RvcnkgewotCWNsZWFyOiBib3RoOwotfQotCi10YWJsZS5maWxlaGlzdG9yeSB0aCwKLXRhYmxlLmZpbGVoaXN0b3J5IHRkIHsKLQl2ZXJ0aWNhbC1hbGlnbjogdG9wOwotfQotdGFibGUuZmlsZWhpc3RvcnkgdGggewotCXRleHQtYWxpZ246IGxlZnQ7Ci19Ci10YWJsZS5maWxlaGlzdG9yeSB0ZC5tdy1pbWFnZXBhZ2UtZmlsZXNpemUsCi10YWJsZS5maWxlaGlzdG9yeSB0aC5tdy1pbWFnZXBhZ2UtZmlsZXNpemUgewotCXdoaXRlLXNwYWNlOiBub3dyYXA7Ci19Ci0KLXRhYmxlLmZpbGVoaXN0b3J5IHRkLmZpbGVoaXN0b3J5LXNlbGVjdGVkIHsKLQlmb250LXdlaWdodDogYm9sZDsKLX0KLQotLyoqCi0gKiBBZGQgYSBjaGVja2VyZWQgYmFja2dyb3VuZCBpbWFnZSBvbiBob3ZlciBmb3IgZmlsZQotICogZGVzY3JpcHRpb24gcGFnZXMuIChidWcgMjY0NzApCi0gKi8KLS5maWxlaGlzdG9yeSBhIGltZywKLSNmaWxlIGltZzpob3ZlciB7Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZDogd2hpdGUgdXJsKGltYWdlcy9DaGVja2VyLTE2eDE2LnBuZykgcmVwZWF0OwotfQotCi0vKioKLSAqIHJldl9kZWxldGVkIHN0dWZmCi0gKi8KLWxpIHNwYW4uZGVsZXRlZCwKLXNwYW4uaGlzdG9yeS1kZWxldGVkIHsKLQl0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKLQljb2xvcjogIzg4ODsKLQlmb250LXN0eWxlOiBpdGFsaWM7Ci19Ci0KLS8qKgotICogUGF0cm9sIHN0dWZmCi0gKi8KLS5ub3QtcGF0cm9sbGVkIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiAjZmZhOwotfQotCi0udW5wYXRyb2xsZWQgewotCWZvbnQtd2VpZ2h0OiBib2xkOwotCWNvbG9yOiByZWQ7Ci19Ci0KLWRpdi5wYXRyb2xsaW5rIHsKLQlmb250LXNpemU6IDc1JTsKLQl0ZXh0LWFsaWduOiByaWdodDsKLX0KLQotLyoqCi0gKiBGb3JtcwotICovCi10ZC5tdy1sYWJlbCB7Ci0JdGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci10ZC5tdy1pbnB1dCB7Ci0JdGV4dC1hbGlnbjogbGVmdDsKLX0KLXRkLm13LXN1Ym1pdCB7Ci0JdGV4dC1hbGlnbjogbGVmdDsKLX0KLQotdGQubXctbGFiZWwgewotCXZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci0ucHJlZnNlY3Rpb24gdGQubXctbGFiZWwgewotCXdpZHRoOiAyMCU7Ci19Ci0ucHJlZnNlY3Rpb24gdGFibGUgewotCXdpZHRoOiAxMDAlOwotfQotdGQubXctc3VibWl0IHsKLQl3aGl0ZS1zcGFjZTogbm93cmFwOwotfQotCi10YWJsZS5tdy1odG1sZm9ybS1ub2xhYmVsIHRkLm13LWxhYmVsIHsKLQl3aWR0aDogMXB4OwotfQotCi10ci5tdy1odG1sZm9ybS12ZXJ0aWNhbC1sYWJlbCB0ZC5tdy1sYWJlbCB7Ci0JdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50OwotfQotCi0ubXctaHRtbGZvcm0taW52YWxpZC1pbnB1dCB0ZC5tdy1pbnB1dCBpbnB1dCB7Ci0JYm9yZGVyLWNvbG9yOiByZWQ7Ci19Ci0KLS5tdy1odG1sZm9ybS1mbGF0bGlzdCBkaXYubXctaHRtbGZvcm0tZmxhdGxpc3QtaXRlbSB7Ci0JZGlzcGxheTogaW5saW5lOwotCW1hcmdpbi1yaWdodDogMWVtOwotCXdoaXRlLXNwYWNlOiBub3dyYXA7Ci19Ci0KLWlucHV0I3dwU3VtbWFyeSB7Ci0Jd2lkdGg6IDgwJTsKLX0KLQotLyoqCi0gKiBJbWFnZSBjYXB0aW9ucwotICovCi0udGh1bWJjYXB0aW9uIHsKLQl0ZXh0LWFsaWduOiBsZWZ0OwotfQotLm1hZ25pZnkgewotCWZsb2F0OiByaWdodDsKLX0KLQotLyoqCi0gKiBDYXRlZ29yaWVzCi0gKi8KLSNjYXRsaW5rcyB7Ci0JLyoqCi0JICogT3ZlcnJpZGVzIHRleHQganVzdGlmaWNhdGlvbiAodXNlciBwcmVmZXJlbmNlKQotCSAqIFNlZSBidWcgMzE5OTAKLQkgKi8KLQl0ZXh0LWFsaWduOiBsZWZ0OwotfQotLmNhdGxpbmtzIHVsIHsKLQlkaXNwbGF5OiBpbmxpbmU7Ci0JbWFyZ2luOiAwOwotCXBhZGRpbmc6IDA7Ci0JbGlzdC1zdHlsZTogbm9uZTsKLQlsaXN0LXN0eWxlLXR5cGU6IG5vbmU7Ci0JbGlzdC1zdHlsZS1pbWFnZTogbm9uZTsKLQl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpZTsKLX0KLQotLmNhdGxpbmtzIGxpIHsKLQlkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0JbGluZS1oZWlnaHQ6IDEuMjVlbTsKLQlib3JkZXItbGVmdDogMXB4IHNvbGlkICNBQUE7Ci0JbWFyZ2luOiAwLjEyNWVtIDA7Ci0JcGFkZGluZzogMCAwLjVlbTsKLQl6b29tOiAxOwotCWRpc3BsYXk6IGlubGluZSAhaWU7Ci19Ci0KLS5jYXRsaW5rcyBsaTpmaXJzdC1jaGlsZCB7Ci0JcGFkZGluZy1sZWZ0OiAwLjI1ZW07Ci0JYm9yZGVyLWxlZnQ6IG5vbmU7Ci19Ci0vKioKLSAqIEhpZGRlbiBjYXRlZ29yaWVzCi0gKi8KLS5tdy1oaWRkZW4tY2F0cy1oaWRkZW4gewotCWRpc3BsYXk6IG5vbmU7Ci19Ci0uY2F0bGlua3MtYWxsaGlkZGVuIHsKLQlkaXNwbGF5OiBub25lOwotfQotCi0vKiBDb252ZW5pZW5jZSBsaW5rcyB0byBlZGl0IGJsb2NrLCBkZWxldGUgYW5kIHByb3RlY3QgcmVhc29ucyAqLwotcC5tdy1pcGItY29udmVuaWVuY2VsaW5rcywKLXAubXctcHJvdGVjdC1lZGl0cmVhc29ucywKLXAubXctZmlsZWRlbGV0ZS1lZGl0cmVhc29ucywKLXAubXctZGVsZXRlLWVkaXRyZWFzb25zLAotcC5tdy1yZXZkZWwtZWRpdHJlYXNvbnMgewotCWZvbnQtc2l6ZTogOTAlOwotCXRleHQtYWxpZ246IHJpZ2h0OwotfQotCi0vKioKLSAqIE9wZW5TZWFyY2ggYWpheCBzdWdnZXN0aW9ucwotICovCi0ub3Mtc3VnZ2VzdCB7Ci0Jb3ZlcmZsb3c6IGF1dG87Ci0Jb3ZlcmZsb3cteDogaGlkZGVuOwotCXBvc2l0aW9uOiBhYnNvbHV0ZTsKLQl0b3A6IDA7Ci0JbGVmdDogMDsKLQl3aWR0aDogMDsKLQliYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLQlib3JkZXItc3R5bGU6IHNvbGlkOwotCWJvcmRlci1jb2xvcjogI0FBQUFBQTsKLQlib3JkZXItd2lkdGg6IDFweDsKLQl6LWluZGV4Ojk5OwotCWZvbnQtc2l6ZTo5NSU7Ci19Ci0KLXRhYmxlLm9zLXN1Z2dlc3QtcmVzdWx0cyB7Ci0JZm9udC1zaXplOiA5NSU7Ci0JY3Vyc29yOiBwb2ludGVyOwotCWJvcmRlcjogMDsKLQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotCXdpZHRoOiAxMDAlOwotfQotCi0ub3Mtc3VnZ2VzdC1yZXN1bHQsCi0ub3Mtc3VnZ2VzdC1yZXN1bHQtaGwgewotCXdoaXRlLXNwYWNlOiBub3dyYXA7Ci0JYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0JY29sb3I6IGJsYWNrOwotCXBhZGRpbmc6IDJweDsKLX0KLS5vcy1zdWdnZXN0LXJlc3VsdC1obCwKLS5vcy1zdWdnZXN0LXJlc3VsdC1obC13ZWJraXQgewotCWJhY2tncm91bmQtY29sb3I6ICM0QzU5QTY7Ci0JY29sb3I6IHdoaXRlOwotfQotCi0ub3Mtc3VnZ2VzdC10b2dnbGUgewotCXBvc2l0aW9uOiByZWxhdGl2ZTsKLQlsZWZ0OiAxZXg7Ci0JZm9udC1zaXplOiA2NSU7Ci19Ci0ub3Mtc3VnZ2VzdC10b2dnbGUtZGVmIHsKLQlwb3NpdGlvbjogYWJzb2x1dGU7Ci0JdG9wOiAwOwotCWxlZnQ6IDA7Ci0JZm9udC1zaXplOiA2NSU7Ci0JdmlzaWJpbGl0eTogaGlkZGVuOwotfQotCi0vKiBQYWdlIGhpc3Rvcnkgc3R5bGluZyAqLwotCi0vKiBUaGUgYXV0by1nZW5lcmF0ZWQgZWRpdCBjb21tZW50cyAqLwotLmF1dG9jb21tZW50IHsKLQljb2xvcjogZ3JheTsKLX0KLSNwYWdlaGlzdG9yeSAuaGlzdG9yeS11c2VyIHsKLQltYXJnaW4tbGVmdDogMC40ZW07Ci0JbWFyZ2luLXJpZ2h0OiAwLjJlbTsKLX0KLSNwYWdlaGlzdG9yeSBzcGFuLm1pbm9yIHsKLQlmb250LXdlaWdodDogYm9sZDsKLX0KLSNwYWdlaGlzdG9yeSBsaSB7Ci0JYm9yZGVyOiAxcHggc29saWQgd2hpdGU7Ci19Ci0jcGFnZWhpc3RvcnkgbGkuc2VsZWN0ZWQgewotCWJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7Ci0JYm9yZGVyOiAxcHggZGFzaGVkICNhYWE7Ci19Ci0KLS5tdy1oaXN0b3J5LXJldmlzaW9uZGVsZXRlLWJ1dHRvbiwgI213LWZpbGVkdXBsaWNhdGVzZWFyY2gtaWNvbiB7Ci0JZmxvYXQ6IHJpZ2h0OwotfQotCi0vKiogR2VuZXJpYyBtaW5vci9ib3QvbmV3cGFnZSBzdHlsaW5nIChyZWNlbnQgY2hhbmdlcykgKi8KLS5uZXdwYWdlLAotLm1pbm9yZWRpdCwKLS5ib3RlZGl0IHsKLQlmb250LXdlaWdodDogYm9sZDsKLX0KLQotI3NoYXJlZC1pbWFnZS1kdXAsCi0jc2hhcmVkLWltYWdlLWNvbmZsaWN0IHsKLQlmb250LXN0eWxlOiBpdGFsaWM7Ci19Ci0KLS8qKgotICogUmVjcmVhdGluZyBkZWxldGVkIHBhZ2Ugd2FybmluZwotICogUmV1cGxvYWQgZmlsZSB3YXJuaW5nCi0gKiBQYWdlIHByb3RlY3Rpb24gd2FybmluZwotICogaW5jbC4gbG9nIGVudHJpZXMgZm9yIHRoZXNlIHdhcm5pbmdzCi0gKi8KLWRpdi5tdy13YXJuaW5nLXdpdGgtbG9nZXhjZXJwdCB7Ci0JcGFkZGluZzogM3B4OwotCW1hcmdpbi1ib3R0b206IDNweDsKLQlib3JkZXI6IDJweCBzb2xpZCAjMkY2RkFCOwotCWNsZWFyOiBib3RoOwotfQotZGl2Lm13LXdhcm5pbmctd2l0aC1sb2dleGNlcnB0IHVsIGxpIHsKLQlmb250LXNpemU6IDkwJTsKLX0KLQotLyogKHNob3cvaGlkZSkgcmV2aXNpb24gZGVsZXRpb24gbGlua3MgKi8KLXNwYW4ubXctcmV2ZGVsdW5kZWwtbGluaywKLXN0cm9uZy5tdy1yZXZkZWx1bmRlbC1saW5rIHsKLQlmb250LXNpemU6IDkwJTsKLX0KLXNwYW4ubXctcmV2ZGVsdW5kZWwtaGlkZGVuLAotaW5wdXQubXctcmV2ZGVsdW5kZWwtaGlkZGVuIHsKLQl2aXNpYmlsaXR5OiBoaWRkZW47Ci19Ci0KLXRkLm13LXJldmRlbC1jaGVja2JveCwKLXRoLm13LXJldmRlbC1jaGVja2JveCB7Ci0JcGFkZGluZy1yaWdodDogMTBweDsKLQl0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLS8qIGZlZWQgbGlua3MgKi8KLWEuZmVlZGxpbmsgewotCS8qIEBlbWJlZCAqLwotCWJhY2tncm91bmQ6IHVybChpbWFnZXMvZmVlZC1pY29uLnBuZykgY2VudGVyIGxlZnQgbm8tcmVwZWF0OwotCXBhZGRpbmctbGVmdDogMTZweDsKLX0KLQotLyogUGxhaW5saW5rcyAtIHRoaXMgY2FuIGJlIHVzZWQgdG8gc3dpdGNoCi0gKiBvZmYgc3BlY2lhbCBleHRlcm5hbCBsaW5rIHN0eWxpbmcgKi8KLS5wbGFpbmxpbmtzIGEgewotCWJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKLQlwYWRkaW5nOiAwICFpbXBvcnRhbnQ7Ci19Ci0vKiBFeHRlcm5hbCBVUkxzIHNob3VsZCBhbHdheXMgYmUgdHJlYXRlZCBhcyBMVFIgKGJ1ZyA0MzMwKSAqLwotLyogQG5vZmxpcCAqLyAucnRsIGEuZXh0ZXJuYWwuZnJlZSwKLS5ydGwgYS5leHRlcm5hbC5hdXRvbnVtYmVyIHsKLQlkaXJlY3Rpb246IGx0cjsKLQl1bmljb2RlLWJpZGk6IGVtYmVkOwotfQotCi0vKioKLSAqIHdpa2l0YWJsZSBjbGFzcyBmb3Igc2tpbm5pbmcgbm9ybWFsIHRhYmxlcwotICoga2VlcCBpbiBzeW5jIHdpdGggY29tbW9uUHJpbnQuY3NzCi0gKi8KLXRhYmxlLndpa2l0YWJsZSB7Ci0JbWFyZ2luOiAxZW0gMWVtIDFlbSAwOwotCWJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7Ci0JYm9yZGVyOiAxcHggI2FhYSBzb2xpZDsKLQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotCWNvbG9yOiBibGFjazsKLX0KLXRhYmxlLndpa2l0YWJsZSA+IHRyID4gdGgsCi10YWJsZS53aWtpdGFibGUgPiB0ciA+IHRkLAotdGFibGUud2lraXRhYmxlID4gKiA+IHRyID4gdGgsCi10YWJsZS53aWtpdGFibGUgPiAqID4gdHIgPiB0ZCB7Ci0JYm9yZGVyOiAxcHggI2FhYSBzb2xpZDsKLQlwYWRkaW5nOiAwLjJlbTsKLX0KLXRhYmxlLndpa2l0YWJsZSA+IHRyID4gdGgsCi10YWJsZS53aWtpdGFibGUgPiAqID4gdHIgPiB0aCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsKLQl0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci10YWJsZS53aWtpdGFibGUgPiBjYXB0aW9uIHsKLQlmb250LXdlaWdodDogYm9sZDsKLX0KLQotLyogaGlkZSBpbml0aWFsbHkgY29sbGFwc2VkIGNvbGxhcHNhYmxlIHRhYmxlcyAqLwotdGFibGUuY29sbGFwc2VkIHRyLmNvbGxhcHNhYmxlIHsKLQlkaXNwbGF5OiBub25lOwotfQotCi0vKiBzdWNjZXNzIGFuZCBlcnJvciBtZXNzYWdlcyAqLwotLnN1Y2Nlc3MgewotCWNvbG9yOiBncmVlbjsKLQlmb250LXNpemU6IGxhcmdlcjsKLX0KLS53YXJuaW5nIHsKLQljb2xvcjogI0ZGQTUwMDsgLyogb3JhbmdlICovCi0JZm9udC1zaXplOiBsYXJnZXI7Ci19Ci0uZXJyb3IgewotCWNvbG9yOiByZWQ7Ci0JZm9udC1zaXplOiBsYXJnZXI7Ci19Ci0uZXJyb3Jib3gsCi0ud2FybmluZ2JveCwKLS5zdWNjZXNzYm94IHsKLQlmb250LXNpemU6IGxhcmdlcjsKLQlib3JkZXI6IDJweCBzb2xpZDsKLQlwYWRkaW5nOiAuNWVtIDFlbTsKLQlmbG9hdDogbGVmdDsKLQltYXJnaW4tYm90dG9tOiAyZW07Ci0JY29sb3I6ICMwMDA7Ci19Ci0uZXJyb3Jib3ggewotCWJvcmRlci1jb2xvcjogcmVkOwotCWJhY2tncm91bmQtY29sb3I6ICNmZmYyZjI7Ci19Ci0ud2FybmluZ2JveCB7Ci0JYm9yZGVyLWNvbG9yOiAjRkY4QzAwOyAvKiBkYXJrb3JhbmdlICovCi0JYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZDMDsKLX0KLS5zdWNjZXNzYm94IHsKLQlib3JkZXItY29sb3I6IGdyZWVuOwotCWJhY2tncm91bmQtY29sb3I6ICNkZmQ7Ci19Ci0uZXJyb3Jib3ggaDIsCi0ud2FybmluZ2JveCBoMiwKLS5zdWNjZXNzYm94IGgyIHsKLQlmb250LXNpemU6IDFlbTsKLQlmb250LXdlaWdodDogYm9sZDsKLQlkaXNwbGF5OiBpbmxpbmU7Ci0JbWFyZ2luOiAwIC41ZW0gMCAwOwotCWJvcmRlcjogbm9uZTsKLX0KLQotLyogZ2VuZXJhbCBpbmZvL3dhcm5pbmcgYm94IGZvciBTUCAqLwotLm13LWluZm9ib3ggewotCWJvcmRlcjogMnB4IHNvbGlkICNmZjdmMDA7Ci0JbWFyZ2luOiAwLjVlbTsKLQljbGVhcjogbGVmdDsKLQlvdmVyZmxvdzogaGlkZGVuOwotfQotCi0ubXctaW5mb2JveC1sZWZ0IHsKLQltYXJnaW46IDdweDsKLQlmbG9hdDogbGVmdDsKLQl3aWR0aDogMzVweDsKLX0KLQotLm13LWluZm9ib3gtcmlnaHQgewotCW1hcmdpbjogMC41ZW0gMC41ZW0gMC41ZW0gNDlweDsKLX0KLQotLyogTm90ZSBvbiBwcmV2aWV3IHBhZ2UgKi8KLS5wcmV2aWV3bm90ZSB7Ci0JY29sb3I6ICNjMDA7Ci0JbWFyZ2luLWJvdHRvbTogMWVtOwotfQotCi0ucHJldmlld25vdGUgcCB7Ci0JdGV4dC1pbmRlbnQ6IDNlbTsKLQltYXJnaW46IDAuOGVtIDA7Ci19Ci0KLS52aXN1YWxDbGVhciB7Ci0JY2xlYXI6IGJvdGg7Ci19Ci0KLSNtd190cmFja2JhY2tzIHsKLQlib3JkZXI6IHNvbGlkIDFweCAjYmJiYmZmOwotCWJhY2tncm91bmQtY29sb3I6ICNlZWVlZmY7Ci0JcGFkZGluZzogMC4yZW07Ci19Ci0KLS8qKgotICogRGF0YSB0YWJsZSBzdHlsZQotICoKLSAqIFRyYW5zcGFyZW50IHRhYmxlIHdpdGggc3VkZGxlIGJvcmRlcnMKLSAqIGFuZCBibHVlIHJvdy1oaWdobGlnaHRpbmcuCi0gKi8KLS5tdy1kYXRhdGFibGUgewotCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci19Ci0ubXctZGF0YXRhYmxlLAotLm13LWRhdGF0YWJsZSB0ZCwKLS5tdy1kYXRhdGFibGUgdGggewotCWJvcmRlcjogMXB4IHNvbGlkICNhYWFhYWE7Ci0JcGFkZGluZzogMCAwLjE1ZW0gMCAwLjE1ZW07Ci19Ci0ubXctZGF0YXRhYmxlIHRoIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiAjZGRkZGZmOwotfQotLm13LWRhdGF0YWJsZSB0ZCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKLX0KLS5tdy1kYXRhdGFibGUgdHI6aG92ZXIgdGQgewotCWJhY2tncm91bmQtY29sb3I6ICNlZWVlZmY7Ci19Ci0KLQotLyoqCi0gKiBUYWJsZVBhZ2VyIHRhYmxlcyBnZW5lcmF0ZWQgYnkgdGhlIFRhYmxlUGFnZXIgUEhQIGNsYXNzCi0gKiBpbiBNZWRpYVdpa2kgKGUuZy4gU3BlY2lhbDpMaXN0RmlsZXMpLgotICovCi0uVGFibGVQYWdlciB7Ci0JbWluLXdpZHRoOiA4MCU7Ci19Ci0uVGFibGVQYWdlcl9uYXYgewotCW1hcmdpbjogMCBhdXRvOwotfQotLlRhYmxlUGFnZXJfbmF2IHRkIHsKLQlwYWRkaW5nOiAzcHg7Ci0JdGV4dC1hbGlnbjogY2VudGVyOwotfQotLlRhYmxlUGFnZXJfbmF2IGEgewotCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKLX0KLQotLmltYWdlbGlzdCB0ZCwKLS5pbWFnZWxpc3QgdGggewotCXdoaXRlLXNwYWNlOiBub3dyYXA7Ci19Ci0uaW1hZ2VsaXN0IC5UYWJsZVBhZ2VyX2NvbF9saW5rcyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogI2VlZWVmZjsKLX0KLS5pbWFnZWxpc3QgLlRhYmxlUGFnZXJfY29sX2ltZ19kZXNjcmlwdGlvbiB7Ci0Jd2hpdGUtc3BhY2U6IG5vcm1hbDsKLX0KLS5pbWFnZWxpc3QgdGguVGFibGVQYWdlcl9zb3J0IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiAjY2NjY2ZmOwotfQotCi0vKiBmaWxldG9jICovCi11bCNmaWxldG9jIHsKLQl0ZXh0LWFsaWduOiBjZW50ZXI7Ci0JYm9yZGVyOiAxcHggc29saWQgI2FhYWFhYTsKLQliYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5OwotCXBhZGRpbmc6IDVweDsKLQlmb250LXNpemU6IDk1JTsKLQltYXJnaW4tYm90dG9tOiAwLjVlbTsKLQltYXJnaW4tbGVmdDogMDsKLQltYXJnaW4tcmlnaHQ6IDA7Ci19Ci0KLSNmaWxldG9jIGxpIHsKLQlkaXNwbGF5OiBpbmxpbmU7Ci0JbGlzdC1zdHlsZS10eXBlOiBub25lOwotCXBhZGRpbmctcmlnaHQ6IDJlbTsKLX0KLQotLyogQ2xhc3NlcyBmb3IgRVhJRiBkYXRhIGRpc3BsYXkgKi8KLXRhYmxlLm13X21ldGFkYXRhIHsKLQlmb250LXNpemU6IDAuOGVtOwotCW1hcmdpbi1sZWZ0OiAwLjVlbTsKLQltYXJnaW4tYm90dG9tOiAwLjVlbTsKLQl3aWR0aDogNDAwcHg7Ci19Ci0KLXRhYmxlLm13X21ldGFkYXRhIGNhcHRpb24gewotCWZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi10YWJsZS5td19tZXRhZGF0YSB0aCB7Ci0JZm9udC13ZWlnaHQ6IG5vcm1hbDsKLX0KLQotdGFibGUubXdfbWV0YWRhdGEgdGQgewotCXBhZGRpbmc6IDAuMWVtOwotfQotCi10YWJsZS5td19tZXRhZGF0YSB7Ci0JYm9yZGVyOiBub25lOwotCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci19Ci0KLXRhYmxlLm13X21ldGFkYXRhIHRkLAotdGFibGUubXdfbWV0YWRhdGEgdGggewotCXRleHQtYWxpZ246IGNlbnRlcjsKLQlib3JkZXI6IDFweCBzb2xpZCAjYWFhYWFhOwotCXBhZGRpbmctbGVmdDogNXB4OwotCXBhZGRpbmctcmlnaHQ6IDVweDsKLX0KLQotdGFibGUubXdfbWV0YWRhdGEgdGggewotCWJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7Ci19Ci0KLXRhYmxlLm13X21ldGFkYXRhIHRkIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiAjZmNmY2ZjOwotfQotCi10YWJsZS5td19tZXRhZGF0YSB1bC5tZXRhZGF0YS1sYW5nbGlzdCB7Ci0JbGlzdC1zdHlsZS10eXBlOiBub25lOwotCWxpc3Qtc3R5bGUtaW1hZ2U6IG5vbmU7Ci0JcGFkZGluZy1yaWdodDogNXB4OwotCXBhZGRpbmctbGVmdDogNXB4OwotCW1hcmdpbjogMDsKLX0KLQotLyogQ29ycmVjdCBkaXJlY3Rpb25hbGl0eSB3aGVuIHBhZ2UgZGlyIGlzIGRpZmZlcmVudCBmcm9tIHNpdGUvdXNlciBkaXIgKi8KLS5tdy1jb250ZW50LWx0ciB1bCwKLS5tdy1jb250ZW50LXJ0bCAubXctY29udGVudC1sdHIgdWwgewotCS8qIEBub2ZsaXAgKi8KLQltYXJnaW46IDAuM2VtIDAgMCAxLjZlbTsKLQlwYWRkaW5nOiAwOwotfQotLm13LWNvbnRlbnQtcnRsIHVsLAotLm13LWNvbnRlbnQtbHRyIC5tdy1jb250ZW50LXJ0bCB1bCB7Ci0JLyogQG5vZmxpcCAqLwotCW1hcmdpbjogMC4zZW0gMS42ZW0gMCAwOwotCXBhZGRpbmc6IDA7Ci19Ci0ubXctY29udGVudC1sdHIgb2wsCi0ubXctY29udGVudC1ydGwgLm13LWNvbnRlbnQtbHRyIG9sIHsKLQkvKiBAbm9mbGlwICovCi0JbWFyZ2luOiAwLjNlbSAwIDAgMy4yZW07Ci0JcGFkZGluZzogMDsKLX0KLS5tdy1jb250ZW50LXJ0bCBvbCwKLS5tdy1jb250ZW50LWx0ciAubXctY29udGVudC1ydGwgb2wgewotCS8qIEBub2ZsaXAgKi8KLQltYXJnaW46IDAuM2VtIDMuMmVtIDAgMDsKLQlwYWRkaW5nOiAwOwotfQotLyogQG5vZmxpcCAqLwotLm13LWNvbnRlbnQtbHRyIGRkLAotLm13LWNvbnRlbnQtcnRsIC5tdy1jb250ZW50LWx0ciBkZCB7Ci0JbWFyZ2luLWxlZnQ6IDEuNmVtOwotCW1hcmdpbi1yaWdodDogMDsKLX0KLS8qIEBub2ZsaXAgKi8KLS5tdy1jb250ZW50LXJ0bCBkZCwKLS5tdy1jb250ZW50LWx0ciAubXctY29udGVudC1ydGwgZGQgewotCW1hcmdpbi1yaWdodDogMS42ZW07Ci0JbWFyZ2luLWxlZnQ6IDA7Ci19Ci0KLS8qIEdhbGxlcmllcyAqLwotLyogVGhlc2UgZGlzcGxheSBhdHRyaWJ1dGVzIGxvb2sgbm9uc2Vuc2ljYWwsIGJ1dCBhcmUgbmVlZGVkIHRvIHN1cHBvcnQgSUUgYW5kIEZGMiAqLwotLyogRG9uJ3QgZm9yZ2V0IHRvIHVwZGF0ZSBjb21tb25QcmludC5jc3MgKi8KLWxpLmdhbGxlcnlib3ggewotCXZlcnRpY2FsLWFsaWduOiB0b3A7Ci0JYm9yZGVyOiBzb2xpZCAycHggd2hpdGU7Ci0JZGlzcGxheTogLW1vei1pbmxpbmUtYm94OwotCWRpc3BsYXk6IGlubGluZS1ibG9jazsKLX0KLQotdWwuZ2FsbGVyeSwKLWxpLmdhbGxlcnlib3ggewotCXpvb206IDE7Ci0JKmRpc3BsYXk6IGlubGluZTsKLX0KLQotdWwuZ2FsbGVyeSB7Ci0JbWFyZ2luOiAycHg7Ci0JcGFkZGluZzogMnB4OwotCWRpc3BsYXk6IGJsb2NrOwotfQotCi1saS5nYWxsZXJ5Y2FwdGlvbiB7Ci0JZm9udC13ZWlnaHQ6IGJvbGQ7Ci0JdGV4dC1hbGlnbjogY2VudGVyOwotCWRpc3BsYXk6IGJsb2NrOwotCXdvcmQtd3JhcDogYnJlYWstd29yZDsKLX0KLQotbGkuZ2FsbGVyeWJveCBkaXYudGh1bWIgewotCXRleHQtYWxpZ246IGNlbnRlcjsKLQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwotCWJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7Ci0JbWFyZ2luOiAycHg7Ci19Ci0KLWxpLmdhbGxlcnlib3ggZGl2LnRodW1iIGltZyB7Ci0JZGlzcGxheTogYmxvY2s7Ci0JbWFyZ2luOiAwIGF1dG87Ci19Ci0KLWRpdi5nYWxsZXJ5dGV4dCB7Ci0Jb3ZlcmZsb3c6IGhpZGRlbjsKLQlmb250LXNpemU6IDk0JTsKLQlwYWRkaW5nOiAycHggNHB4OwotCXdvcmQtd3JhcDogYnJlYWstd29yZDsKLX0KLQotLm13LWFqYXgtbG9hZGVyIHsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL2FqYXgtbG9hZGVyLmdpZik7Ci0JYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsKLQliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwotCXBhZGRpbmc6IDE2cHg7Ci0JcG9zaXRpb246IHJlbGF0aXZlOwotCXRvcDogLTE2cHg7Ci19Ci0KLS5tdy1zbWFsbC1zcGlubmVyIHsKLQlwYWRkaW5nOiAxMHB4ICFpbXBvcnRhbnQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjZlbTsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3NwaW5uZXIuZ2lmKTsKLQliYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOwotCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Ci19Ci0KLS8qIExhbmd1YWdlIHNwZWNpZmljIGhlaWdodCBjb3JyZWN0aW9uIGZvciB0aXRsZXMuIFJlZiBCdWcgMjk0MDUgYW5kIEJ1ZyAzMDgwOSAqLwotLyogTGFuZ3VhZ2VzIGxpa2UgaGkgb3IgbWwgcmVxdWlyZSBzbGlnaHRseSBtb3JlIHZlcnRpY2FsIHNwYWNlIHRvIHNob3cgZGlhY3JpdGljcyBwcm9wZXJseSAqLwotaDE6bGFuZyhhcyksCi1oMTpsYW5nKGJoKSwgLyogTWFjcm9sYW5ndWFnZSwgdXNlZCBvbiBiaC53aWtpcGVkaWEub3JnLCBzaG91bGQgYmUgcmVtb3ZlZCBvbmUgZGF5ICovCi1oMTpsYW5nKGJobyksCi1oMTpsYW5nKGJuKSwKLWgxOmxhbmcoZ3UpLAotaDE6bGFuZyhoaSksCi1oMTpsYW5nKGtuKSwKLWgxOmxhbmcobWwpLAotaDE6bGFuZyhtciksCi1oMTpsYW5nKG9yKSwKLWgxOmxhbmcocGEpLAotaDE6bGFuZyhzYSksCi1oMTpsYW5nKHRhKSwKLWgxOmxhbmcodGUpIHsKLQlsaW5lLWhlaWdodDogMS41ZW0gIWltcG9ydGFudDsKLX0KLWgyOmxhbmcoYXMpLCBoMzpsYW5nKGFzKSwgaDQ6bGFuZyhhcyksIGg1OmxhbmcoYXMpLCBoNjpsYW5nKGFzKSwKLWgyOmxhbmcoYmhvKSwgaDM6bGFuZyhiaG8pLCBoNDpsYW5nKGJobyksIGg1OmxhbmcoYmhvKSwgaDY6bGFuZyhiaG8pLAotaDI6bGFuZyhiaCksIGgzOmxhbmcoYmgpLCBoNDpsYW5nKGJoKSwgaDU6bGFuZyhiaCksIGg2OmxhbmcoYmgpLAotaDI6bGFuZyhibiksIGgzOmxhbmcoYm4pLCBoNDpsYW5nKGJuKSwgaDU6bGFuZyhibiksIGg2OmxhbmcoYm4pLAotaDI6bGFuZyhndSksIGgzOmxhbmcoZ3UpLCBoNDpsYW5nKGd1KSwgaDU6bGFuZyhndSksIGg2OmxhbmcoZ3UpLAotaDI6bGFuZyhoaSksIGgzOmxhbmcoaGkpLCBoNDpsYW5nKGhpKSwgaDU6bGFuZyhoaSksIGg2OmxhbmcoaGkpLAotaDI6bGFuZyhrbiksIGgzOmxhbmcoa24pLCBoNDpsYW5nKGtuKSwgaDU6bGFuZyhrbiksIGg2Omxhbmcoa24pLAotaDI6bGFuZyhtbCksIGgzOmxhbmcobWwpLCBoNDpsYW5nKG1sKSwgaDU6bGFuZyhtbCksIGg2OmxhbmcobWwpLAotaDI6bGFuZyhtciksIGgzOmxhbmcobXIpLCBoNDpsYW5nKG1yKSwgaDU6bGFuZyhtciksIGg2OmxhbmcobXIpLAotaDI6bGFuZyhvciksIGgzOmxhbmcob3IpLCBoNDpsYW5nKG9yKSwgaDU6bGFuZyhvciksIGg2Omxhbmcob3IpLAotaDI6bGFuZyhwYSksIGgzOmxhbmcocGEpLCBoNDpsYW5nKHBhKSwgaDU6bGFuZyhwYSksIGg2OmxhbmcocGEpLAotaDI6bGFuZyhzYSksIGgzOmxhbmcoc2EpLCBoNDpsYW5nKHNhKSwgaDU6bGFuZyhzYSksIGg2Omxhbmcoc2EpLAotaDI6bGFuZyh0YSksIGgzOmxhbmcodGEpLCBoNDpsYW5nKHRhKSwgaDU6bGFuZyh0YSksIGg2OmxhbmcodGEpLAotaDI6bGFuZyh0ZSksIGgzOmxhbmcodGUpLCBoNDpsYW5nKHRlKSwgaDU6bGFuZyh0ZSksIGg2OmxhbmcodGUpIHsKLQlsaW5lLWhlaWdodDogMS4yZW07Ci19Ci0KLS8qIExvY2FsaXNlZCBvcmRlcmVkIGxpc3QgbnVtYmVyaW5nIGZvciBzb21lIGxhbmd1YWdlcyAqLwotb2w6bGFuZyhiY2MpIGxpLAotb2w6bGFuZyhicWkpIGxpLAotb2w6bGFuZyhmYSkgbGksCi1vbDpsYW5nKGdsaykgbGksCi1vbDpsYW5nKGtrLWFyYWIpIGxpLAotb2w6bGFuZyhtem4pIGxpIHsKLQlsaXN0LXN0eWxlLXR5cGU6IC1tb3otcGVyc2lhbjsKLQlsaXN0LXN0eWxlLXR5cGU6IHBlcnNpYW47Ci19Ci0KLW9sOmxhbmcoY2tiKSBsaSB7Ci0JbGlzdC1zdHlsZS10eXBlOiAtbW96LWFyYWJpYy1pbmRpYzsKLQlsaXN0LXN0eWxlLXR5cGU6IGFyYWJpYy1pbmRpYzsKLX0KLQotb2w6bGFuZyhoaSkgbGksCi1vbDpsYW5nKG1yKSBsaSB7Ci0JbGlzdC1zdHlsZS10eXBlOiAtbW96LWRldmFuYWdhcmk7Ci0JbGlzdC1zdHlsZS10eXBlOiBkZXZhbmFnYXJpOwotfQotCi1vbDpsYW5nKGFzKSBsaSwKLW9sOmxhbmcoYm4pIGxpIHsKLQlsaXN0LXN0eWxlLXR5cGU6IC1tb3otYmVuZ2FsaTsKLQlsaXN0LXN0eWxlLXR5cGU6IGJlbmdhbGk7Ci19Ci0KLW9sOmxhbmcob3IpIGxpIHsKLQlsaXN0LXN0eWxlLXR5cGU6IC1tb3otb3JpeWE7Ci0JbGlzdC1zdHlsZS10eXBlOiBvcml5YTsKLX0KLQotI3RvYyB1bCwgLnRvYyB1bCB7Ci0JbWFyZ2luOiAuM2VtIDA7Ci19Ci0KLS8qIENvcnJlY3QgZGlyZWN0aW9uYWxpdHkgd2hlbiBwYWdlIGRpciBpcyBkaWZmZXJlbnQgZnJvbSBzaXRlL3VzZXIgZGlyICovCi0vKiBAbm9mbGlwICovIC5tdy1jb250ZW50LWx0ciAudG9jIHVsLAotLm13LWNvbnRlbnQtbHRyICN0b2MgdWwsCi0ubXctY29udGVudC1ydGwgLm13LWNvbnRlbnQtbHRyIC50b2MgdWwsCi0ubXctY29udGVudC1ydGwgLm13LWNvbnRlbnQtbHRyICN0b2MgdWwgewotCXRleHQtYWxpZ246IGxlZnQ7Ci19Ci0vKiBAbm9mbGlwICovIC5tdy1jb250ZW50LXJ0bCAudG9jIHVsLAotLm13LWNvbnRlbnQtcnRsICN0b2MgdWwsCi0ubXctY29udGVudC1sdHIgLm13LWNvbnRlbnQtcnRsIC50b2MgdWwsCi0ubXctY29udGVudC1sdHIgLm13LWNvbnRlbnQtcnRsICN0b2MgdWwgewotCXRleHQtYWxpZ246IHJpZ2h0OwotfQotLyogQG5vZmxpcCAqLyAubXctY29udGVudC1sdHIgLnRvYyB1bCB1bCwKLS5tdy1jb250ZW50LWx0ciAjdG9jIHVsIHVsLAotLm13LWNvbnRlbnQtcnRsIC5tdy1jb250ZW50LWx0ciAudG9jIHVsIHVsLAotLm13LWNvbnRlbnQtcnRsIC5tdy1jb250ZW50LWx0ciAjdG9jIHVsIHVsIHsKLQltYXJnaW46IDAgMCAwIDJlbTsKLX0KLS8qIEBub2ZsaXAgKi8gLm13LWNvbnRlbnQtcnRsIC50b2MgdWwgdWwsCi0ubXctY29udGVudC1ydGwgI3RvYyB1bCB1bCwKLS5tdy1jb250ZW50LWx0ciAubXctY29udGVudC1ydGwgLnRvYyB1bCB1bCwKLS5tdy1jb250ZW50LWx0ciAubXctY29udGVudC1ydGwgI3RvYyB1bCB1bCB7Ci0JbWFyZ2luOiAwIDJlbSAwIDA7Ci19Ci0KLSN0b2MgI3RvY3RpdGxlLAotLnRvYyAjdG9jdGl0bGUsCi0jdG9jIC50b2N0aXRsZSwKLS50b2MgLnRvY3RpdGxlIHsKLQlkaXJlY3Rpb246IGx0cjsKLX0KLQotLyogdG9vbHRpcCBzdHlsZXMgKi8KLS5tdy1oZWxwLWZpZWxkLWhpbnQgewotCWRpc3BsYXk6IG5vbmU7Ci0JbWFyZ2luLWxlZnQ6IDJweDsKLQltYXJnaW4tYm90dG9tOiAtOHB4OwotCXBhZGRpbmc6IDAgMCAwIDE1cHg7Ci0JLyogQGVtYmVkICovCi0JYmFja2dyb3VuZC1pbWFnZTogdXJsKCdpbWFnZXMvaGVscC1xdWVzdGlvbi5naWYnKTsKLQliYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjsKLQliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwotCWN1cnNvcjogcG9pbnRlcjsKLQlmb250LXNpemU6IC44ZW07Ci0JdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci0JY29sb3I6ICMwNjQ1YWQ7Ci19Ci0ubXctaGVscC1maWVsZC1oaW50OmhvdmVyIHsKLQkvKiBAZW1iZWQgKi8KLQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2ltYWdlcy9oZWxwLXF1ZXN0aW9uLWhvdmVyLmdpZicpOwotfQotLm13LWhlbHAtZmllbGQtZGF0YSB7Ci0JZGlzcGxheTogYmxvY2s7Ci0JYmFja2dyb3VuZC1jb2xvcjogI2Q2ZjNmZjsKLQlwYWRkaW5nOjVweCA4cHggNHB4IDhweDsKLQlib3JkZXI6IDFweCBzb2xpZCAjNWRjOWY0OwotCW1hcmdpbi1sZWZ0OiAyMHB4OwotfQotLnRpcHN5IHsKLQlwYWRkaW5nOiA1cHggNXB4IDEwcHg7Ci0JZm9udC1zaXplOiAxMnB4OwotCXBvc2l0aW9uOiBhYnNvbHV0ZTsKLQl6LWluZGV4OiAxMDAwMDA7Ci0Jb3ZlcmZsb3c6IHZpc2libGU7Ci19Ci0udGlwc3ktaW5uZXIgewotCXBhZGRpbmc6IDVweCA4cHggNHB4IDhweDsKLQliYWNrZ3JvdW5kLWNvbG9yOiAjZDZmM2ZmOwotCWNvbG9yOiBibGFjazsKLQlib3JkZXI6IDFweCBzb2xpZCAjNWRjOWY0OwotCW1heC13aWR0aDogMzAwcHg7Ci0JdGV4dC1hbGlnbjogbGVmdDsKLX0KLS50aXBzeS1hcnJvdyB7Ci0JcG9zaXRpb246IGFic29sdXRlOwotCS8qIEBlbWJlZCAqLwotCWJhY2tncm91bmQ6IHVybChpbWFnZXMvdGlwc3ktYXJyb3cuZ2lmKSBuby1yZXBlYXQgdG9wIGxlZnQ7Ci0Jd2lkdGg6IDEzcHg7Ci0JaGVpZ2h0OiAxM3B4OwotfQotLnRpcHN5LXNlIC50aXBzeS1hcnJvdyB7Ci0JYm90dG9tOiAtMnB4OwotCXJpZ2h0OiAxMHB4OwotCWJhY2tncm91bmQtcG9zaXRpb246IDAlIDEwMCU7Ci19Ci0KLSNtdy1jbGVhcnlvdXJjYWNoZSwKLSNtdy1zaXRlY3NzcHJldmlldywKLSNtdy1zaXRlanNwcmV2aWV3LAotI213LXVzZXJjc3NwcmV2aWV3LAotI213LXVzZXJqc3ByZXZpZXcgewotCWRpcmVjdGlvbjogbHRyOwotCXVuaWNvZGUtYmlkaTogZW1iZWQ7Ci19Ci0KLS8qIENvcnJlY3QgdXNlciAmIGNvbnRlbnQgZGlyZWN0aW9uYWxpdHkgd2hlbiB2aWV3aW5nIGEgZGlmZiAqLwotLmRpZmYtY3VycmVudHZlcnNpb24tdGl0bGUsCi0uZGlmZiB7Ci0JZGlyZWN0aW9uOiBsdHI7Ci0JdW5pY29kZS1iaWRpOiBlbWJlZDsKLX0KLS8qIEBub2ZsaXAgKi8gLmRpZmYtY29udGVudGFsaWduLXJpZ2h0IHRkIHsKLQlkaXJlY3Rpb246IHJ0bDsKLQl1bmljb2RlLWJpZGk6IGVtYmVkOwotfQotLyogQG5vZmxpcCAqLyAuZGlmZi1jb250ZW50YWxpZ24tbGVmdCB0ZCB7Ci0JZGlyZWN0aW9uOiBsdHI7Ci0JdW5pY29kZS1iaWRpOiBlbWJlZDsKLX0KLS5kaWZmLW90aXRsZSwKLS5kaWZmLW50aXRsZSwKLS5kaWZmLWxpbmVubyB7Ci0JZGlyZWN0aW9uOiBsdHIgIWltcG9ydGFudDsKLQl1bmljb2RlLWJpZGk6IGVtYmVkOwotfQotCi0jbXctcmV2aXNpb24taW5mbywKLSNtdy1yZXZpc2lvbi1pbmZvLWN1cnJlbnQsCi0jbXctcmV2aXNpb24tbmF2IHsKLQlkaXJlY3Rpb246IGx0cjsKLQlkaXNwbGF5OiBpbmxpbmU7Ci19Ci0KLS8qIEltYWdlcyAqLwotCi0vKiBAbm9mbGlwICovIGRpdi50cmlnaHQsCi1kaXYuZmxvYXRyaWdodCwKLXRhYmxlLmZsb2F0cmlnaHQgewotCWNsZWFyOiByaWdodDsKLQlmbG9hdDogcmlnaHQ7Ci19Ci0vKiBAbm9mbGlwICovIGRpdi50bGVmdCwKLWRpdi5mbG9hdGxlZnQsCi10YWJsZS5mbG9hdGxlZnQgewotCWZsb2F0OiBsZWZ0OwotCWNsZWFyOiBsZWZ0OwotfQotZGl2LmZsb2F0cmlnaHQsCi10YWJsZS5mbG9hdHJpZ2h0LAotZGl2LmZsb2F0bGVmdCwKLXRhYmxlLmZsb2F0bGVmdCB7Ci0JcG9zaXRpb246IHJlbGF0aXZlOwotfQotCi0vKiBidWcgMTIyMDUgKi8KLSNtdy1jcmVkaXRzIGEgewotCXVuaWNvZGUtYmlkaTogZW1iZWQ7Ci19Ci0KLS8qIEFjY2Vzc2liaWxpdHkgKi8KLS5tdy1qdW1wLAotI2p1bXAtdG8tbmF2IHsKLQlvdmVyZmxvdzogaGlkZGVuOwotCWhlaWdodDogMDsKLQl6b29tOiAxOyAvKiBodHRwOi8vd2ViYWltLm9yZy90ZWNobmlxdWVzL3NraXBuYXYvI2llcXVpcmsgKi8KLX0KLQotLyogUHJpbnQgZm9vdGVyIHNob3VsZCBiZSBoaWRkZW4gYnkgZGVmYXVsdCBpbiBzY3JlZW4uICovCi0ucHJpbnRmb290ZXIgewotCWRpc3BsYXk6IG5vbmU7Ci19Ci0KLS8qIEZvciBkZXZlbG9wcGVycyAqLwotLnhkZWJ1Zy1lcnJvciB7Ci0JcG9zaXRpb246IGFic29sdXRlOwotCXotaW5kZXg6IDk5OwotfQotCi0uZWRpdHNlY3Rpb24sIC50b2N0b2dnbGUgewotICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKLSAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7Ci0gICAgdXNlci1zZWxlY3Q6IG5vbmU7Ci19Ci0vKioKLSAqIE1lZGlhV2lraSBQcmludCBzdHlsZSBzaGVldCBmb3IgQ1NTMi1jYXBhYmxlIGJyb3dzZXJzLgotICogQ29weXJpZ2h0IEdhYnJpZWwgV2lja2UsIGh0dHA6Ly93d3cuYXVsaW54LmRlLwotICoKLSAqIERlcml2ZWQgZnJvbSB0aGUgcGxvbmUgKGh0dHA6Ly9wbG9uZS5vcmcvKSBzdHlsZXMKLSAqIENvcHlyaWdodCBBbGV4YW5kZXIgTGltaQotICovCi0KLS8qIFRoYW5rcyB0byBBIExpc3QgQXBhcnQgKGh0dHA6Ly9hbGlzdGFwYXJ0LmNvbS8pIGZvciB1c2VmdWwgZXh0cmFzICovCi1hLnN0dWIsCi1hLm5ldyB7Ci0JY29sb3I6ICNiYTAwMDA7Ci0JdGV4dC1kZWNvcmF0aW9uOiBub25lOwotfQotCi0jdG9jIHsKLQlib3JkZXI6IDFweCBzb2xpZCAjYWFhYWFhOwotCWJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7Ci0JcGFkZGluZzogNXB4OwotfQotCi0vKiBpbWFnZXMgKi8KLWRpdi5mbG9hdHJpZ2h0IHsKLQlmbG9hdDogcmlnaHQ7Ci0JY2xlYXI6IHJpZ2h0OwotCXBvc2l0aW9uOiByZWxhdGl2ZTsKLQltYXJnaW46IDAuNWVtIDAgMC44ZW0gMS40ZW07Ci19Ci1kaXYuZmxvYXRyaWdodCBwIHsKLQlmb250LXN0eWxlOiBpdGFsaWM7Ci19Ci1kaXYuZmxvYXRsZWZ0IHsKLQlmbG9hdDogbGVmdDsKLQljbGVhcjogbGVmdDsKLQlwb3NpdGlvbjogcmVsYXRpdmU7Ci0JbWFyZ2luOiAwLjVlbSAxLjRlbSAwLjhlbSAwOwotfQotZGl2LmZsb2F0bGVmdCBwIHsKLQlmb250LXN0eWxlOiBpdGFsaWM7Ci19Ci1kaXYuY2VudGVyIHsKLQl0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLS8qIHRodW1ibmFpbHMgKi8KLWRpdi50aHVtYiB7Ci0JYm9yZGVyOiBub25lOwotCXdpZHRoOiBhdXRvOwotCW1hcmdpbi10b3A6IDAuNWVtOwotCW1hcmdpbi1ib3R0b206IDAuOGVtOwotCWJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwotfQotZGl2LnRodW1iaW5uZXIgewotCWJvcmRlcjoxcHggc29saWQgI2NjY2NjYzsKLQlwYWRkaW5nOiAzcHggIWltcG9ydGFudDsKLQliYWNrZ3JvdW5kLWNvbG9yOiBXaGl0ZTsKLQlmb250LXNpemU6IDk0JTsKLQl0ZXh0LWFsaWduOiBjZW50ZXI7Ci0Jb3ZlcmZsb3c6IGhpZGRlbjsKLX0KLWh0bWwgLnRodW1iaW1hZ2UgewotCWJvcmRlcjogMXB4IHNvbGlkICNjY2NjY2M7Ci19Ci1odG1sIC50aHVtYmNhcHRpb24gewotCWJvcmRlcjogbm9uZTsKLQl0ZXh0LWFsaWduOiBsZWZ0OwotCWxpbmUtaGVpZ2h0OiAxLjRlbTsKLQlwYWRkaW5nOiAzcHggIWltcG9ydGFudDsKLQlmb250LXNpemU6IDk0JTsKLX0KLQotZGl2Lm1hZ25pZnkgewotCWRpc3BsYXk6IG5vbmU7Ci19Ci0vKiBAbm9mbGlwICovCi1kaXYudHJpZ2h0IHsKLQlmbG9hdDogcmlnaHQ7Ci0JY2xlYXI6IHJpZ2h0OwotCW1hcmdpbjogMC41ZW0gMCAwLjhlbSAxLjRlbTsKLX0KLS8qIEBub2ZsaXAgKi8KLWRpdi50bGVmdCB7Ci0JZmxvYXQ6IGxlZnQ7Ci0JY2xlYXI6IGxlZnQ7Ci0JbWFyZ2luOiAwLjVlbSAxLjRlbSAwLjhlbSAwOwotfQotaW1nLnRodW1iYm9yZGVyIHsKLQlib3JkZXI6IDFweCBzb2xpZCAjZGRkZGRkOwotfQotCi0vKiB0YWJsZSBzdGFuZGFyZHMgKi8KLXRhYmxlLnJpbWFnZSB7Ci0JZmxvYXQ6IHJpZ2h0OwotCXdpZHRoOiAxcHQ7Ci0JcG9zaXRpb246IHJlbGF0aXZlOwotCW1hcmdpbi1sZWZ0OiAxZW07Ci0JbWFyZ2luLWJvdHRvbTogMWVtOwotCXRleHQtYWxpZ246IGNlbnRlcjsKLX0KLQotYm9keSB7Ci0JYmFja2dyb3VuZDogd2hpdGU7Ci0JY29sb3I6IGJsYWNrOwotCW1hcmdpbjogMDsKLQlwYWRkaW5nOiAwOwotfQotCi0ubm9wcmludCwKLWRpdiNqdW1wLXRvLW5hdiwKLS5tdy1qdW1wLAotZGl2LnRvcCwKLWRpdiNjb2x1bW4tb25lLAotI2NvbG9waG9uLAotLmVkaXRzZWN0aW9uLAotLnRvY3RvZ2dsZSwKLS50b2NoaWRkZW4sCi1kaXYjZi1wb3dlcmVkYnlpY28sCi1kaXYjZi1jb3B5cmlnaHRpY28sCi1saSN2aWV3Y291bnQsCi1saSNhYm91dCwKLWxpI2Rpc2NsYWltZXIsCi1saSNtb2JpbGV2aWV3LAotbGkjcHJpdmFjeSwKLSNmb290ZXItcGxhY2VzLAotLm13LWhpZGRlbi1jYXRsaW5rcywKLXRyLm13LW1ldGFkYXRhLXNob3ctaGlkZS1leHRlbmRlZCwKLXNwYW4ubXctZmlsZXBhZ2Utb3RoZXItcmVzb2x1dGlvbnMsCi0jZmlsZXRvYyB7Ci0JLyogSGlkZXMgYWxsIHRoZSBlbGVtZW50cyBpcnJlbGV2YW50IGZvciBwcmludGluZyAqLwotCWRpc3BsYXk6IG5vbmU7Ci19Ci0KLXVsIHsKLQlsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTsKLX0KLQotI2NvbnRlbnQgewotCWJhY2tncm91bmQ6IG5vbmU7Ci0JYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7Ci0JcGFkZGluZzogMCAhaW1wb3J0YW50OwotCW1hcmdpbjogMCAhaW1wb3J0YW50OwotCWRpcmVjdGlvbjogbHRyOwotfQotI2Zvb3RlciB7Ci0JYmFja2dyb3VuZCA6IHdoaXRlOwotCWNvbG9yIDogYmxhY2s7Ci0JbWFyZ2luLXRvcDogMWVtOwotCWJvcmRlci10b3A6IDFweCBzb2xpZCAjQUFBOwotCWRpcmVjdGlvbjogbHRyOwotfQotCi1oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHsKLQlmb250LXdlaWdodDogYm9sZDsKLX0KLQotcCB7Ci0JbWFyZ2luOiAxZW0gMDsKLQlsaW5lLWhlaWdodDogMS4yZW07Ci19Ci0KLXByZSB7Ci0JYm9yZGVyOiAxcHQgZGFzaGVkIGJsYWNrOwotCXdoaXRlLXNwYWNlOiBwcmU7Ci0JZm9udC1zaXplOiA4cHQ7Ci0Jb3ZlcmZsb3c6IGF1dG87Ci0JcGFkZGluZzogMWVtIDA7Ci0JYmFja2dyb3VuZDogd2hpdGU7Ci0JY29sb3I6IGJsYWNrOwotfQotCi10YWJsZS5saXN0aW5nLAotdGFibGUubGlzdGluZyB0ZCB7Ci0JYm9yZGVyOiAxcHQgc29saWQgYmxhY2s7Ci0JYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKLX0KLQotYSB7Ci0JY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Ci0JYmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50OwotCXBhZGRpbmc6IDAgIWltcG9ydGFudDsKLX0KLQotYTpsaW5rLCBhOnZpc2l0ZWQgewotCWNvbG9yOiAjNTIwOwotCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwotCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwotfQotCi0jY29udGVudCBhLmV4dGVybmFsLnRleHQ6YWZ0ZXIsCi0jY29udGVudCBhLmV4dGVybmFsLmF1dG9udW1iZXI6YWZ0ZXIgewotCS8qIEV4cGFuZCBVUkxzIGZvciBwcmludGluZyAqLwotCWNvbnRlbnQ6ICIgKCIgYXR0cihocmVmKSAiKSAiOwotfQotCi0jZ2xvYmFsV3JhcHBlciB7Ci0Jd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKLQltaW4td2lkdGg6IDAgIWltcG9ydGFudDsKLX0KLQotI2NvbnRlbnQgewotCWJhY2tncm91bmQ6IHdoaXRlOwotCWNvbG9yOiBibGFjazsKLX0KLQotI2NvbHVtbi1jb250ZW50IHsKLQltYXJnaW46IDAgIWltcG9ydGFudDsKLX0KLQotI2NvbHVtbi1jb250ZW50ICNjb250ZW50IHsKLQlwYWRkaW5nOiAxZW07Ci0JbWFyZ2luOiAwICFpbXBvcnRhbnQ7Ci19Ci0KLS8qIE1TSUUvV2luIGRvZXNuJ3QgdW5kZXJzdGFuZCAnaW5oZXJpdCcgKi8KLWEsCi1hLmV4dGVybmFsLAotYS5uZXcsCi1hLnN0dWIgewotCWNvbG9yOiBibGFjayAhaW1wb3J0YW50OwotCXRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OwotfQotCi0vKiBDb250aW51ZSAuLi4gKi8KLWEsCi1hLmV4dGVybmFsLAotYS5uZXcsCi1hLnN0dWIgewotCWNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7Ci0JdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0ICFpbXBvcnRhbnQ7Ci19Ci0KLWltZyB7Ci0JYm9yZGVyOiBub25lOwotCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci19Ci0KLS8qIG1hdGggKi8KLXNwYW4udGV4aHRtbCB7Ci0JZm9udC1mYW1pbHk6IHNlcmlmOwotfQotCi0jc2l0ZU5vdGljZSB7Ci0JZGlzcGxheTogbm9uZTsKLX0KLQotLyogR2FsbGVyaWVzIChzZWUgc2hhcmVkLmNzcyBmb3IgbW9yZSBpbmZvKSAqLwotbGkuZ2FsbGVyeWJveCB7Ci0JdmVydGljYWwtYWxpZ246IHRvcDsKLQlib3JkZXI6IHNvbGlkIDJweCB3aGl0ZTsKLQlkaXNwbGF5OiAtbW96LWlubGluZS1ib3g7Ci0JZGlzcGxheTogaW5saW5lLWJsb2NrOwotfQotCi11bC5nYWxsZXJ5LCBsaS5nYWxsZXJ5Ym94IHsKLQl6b29tOiAxOwotCSpkaXNwbGF5OiBpbmxpbmU7Ci19Ci0KLXVsLmdhbGxlcnkgewotCW1hcmdpbjogMnB4OwotCXBhZGRpbmc6IDJweDsKLQlkaXNwbGF5OiBibG9jazsKLX0KLQotbGkuZ2FsbGVyeWNhcHRpb24gewotCWZvbnQtd2VpZ2h0OiBib2xkOwotCXRleHQtYWxpZ246IGNlbnRlcjsKLQlkaXNwbGF5OiBibG9jazsKLQl3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ci19Ci0KLWxpLmdhbGxlcnlib3ggZGl2LnRodW1iIHsKLQl0ZXh0LWFsaWduOiBjZW50ZXI7Ci0JYm9yZGVyOiAxcHggc29saWQgI2NjYzsKLQltYXJnaW46IDJweDsKLX0KLQotZGl2LmdhbGxlcnl0ZXh0IHsKLQlvdmVyZmxvdzogaGlkZGVuOwotCWZvbnQtc2l6ZTogOTQlOwotCXBhZGRpbmc6IDJweCA0cHg7Ci0Jd29yZC13cmFwOiBicmVhay13b3JkOwotfQotCi0vKioKLSAqIERpZmYgcmVuZGVyaW5nCi0gKi8KLXRhYmxlLmRpZmYgewotCWJhY2tncm91bmQ6IHdoaXRlOwotfQotdGQuZGlmZi1vdGl0bGUgewotCWJhY2tncm91bmQ6ICNmZmZmZmY7Ci19Ci10ZC5kaWZmLW50aXRsZSB7Ci0JYmFja2dyb3VuZDogI2ZmZmZmZjsKLX0KLXRkLmRpZmYtYWRkZWRsaW5lIHsKLQliYWNrZ3JvdW5kOiAjY2NmZmNjOwotCWZvbnQtc2l6ZTogc21hbGxlcjsKLQlib3JkZXI6IHNvbGlkIDJweCBibGFjazsKLX0KLXRkLmRpZmYtZGVsZXRlZGxpbmUgewotCWJhY2tncm91bmQ6ICNmZmZmYWE7Ci0JZm9udC1zaXplOiBzbWFsbGVyOwotCWJvcmRlcjogZG90dGVkIDJweCBibGFjazsKLX0KLXRkLmRpZmYtY29udGV4dCB7Ci0JYmFja2dyb3VuZDogI2VlZWVlZTsKLQlmb250LXNpemU6IHNtYWxsZXI7Ci19Ci0uZGlmZmNoYW5nZSB7Ci0JY29sb3I6IHNpbHZlcjsKLQlmb250LXdlaWdodDogYm9sZDsKLQl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKLX0KLQotLyoqCi0gKiBUYWJsZSByZW5kZXJpbmcKLSAqIEFzIG9uIHNoYXJlZC5jc3MgYnV0IHdpdGggd2hpdGUgYmFja2dyb3VuZC4KLSAqLwotdGFibGUud2lraXRhYmxlLAotdGFibGUubXdfbWV0YWRhdGEgewotCW1hcmdpbjogMWVtIDFlbSAxZW0gMDsKLQlib3JkZXI6IDFweCAjYWFhIHNvbGlkOwotCWJhY2tncm91bmQ6IHdoaXRlOwotCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci19Ci10YWJsZS53aWtpdGFibGUgPiB0ciA+IHRoLCB0YWJsZS53aWtpdGFibGUgPiB0ciA+IHRkLAotdGFibGUud2lraXRhYmxlID4gKiA+IHRyID4gdGgsIHRhYmxlLndpa2l0YWJsZSA+ICogPiB0ciA+IHRkLAotLm13X21ldGFkYXRhIHRoLCAubXdfbWV0YWRhdGEgdGQgewotCWJvcmRlcjogMXB4ICNhYWEgc29saWQ7Ci0JcGFkZGluZzogMC4yZW07Ci19Ci10YWJsZS53aWtpdGFibGUgPiB0ciA+IHRoLAotdGFibGUud2lraXRhYmxlID4gKiA+IHRyID4gdGgsCi0ubXdfbWV0YWRhdGEgdGggewotCXRleHQtYWxpZ246IGNlbnRlcjsKLQliYWNrZ3JvdW5kOiB3aGl0ZTsKLQlmb250LXdlaWdodDogYm9sZDsKLX0KLXRhYmxlLndpa2l0YWJsZSA+IGNhcHRpb24sCi0ubXdfbWV0YWRhdGEgY2FwdGlvbiB7Ci0JZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLWEuc29ydGhlYWRlciB7Ci0JbWFyZ2luOiAwIDAuM2VtOwotfQotCi0vKiBTb21lIHBhZ2luYXRpb24gb3B0aW9ucyAqLwotLndpa2l0YWJsZSwgLnRodW1iLCBpbWcgewotCXBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKLX0KLWgyLCBoMywgaDQsIGg1LCBoNiwgaDcgewotCXBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOwotfQotcCB7Ci0Jd2lkb3dzOiAzOwotCW9ycGhhbnM6IDM7Ci19Ci0KLS8qKgotICogQ2F0ZWdvcmllcwotICovCi0uY2F0bGlua3MgdWwgewotCWRpc3BsYXk6IGlubGluZTsKLQltYXJnaW46IDA7Ci0JcGFkZGluZzogMDsKLQlsaXN0LXN0eWxlOiBub25lOwotCWxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKLQlsaXN0LXN0eWxlLWltYWdlOiBub25lOwotCXZlcnRpY2FsLWFsaWduOiBtaWRkbGUgIWllOwotfQotCi0uY2F0bGlua3MgbGkgewotCWRpc3BsYXk6IGlubGluZS1ibG9jazsKLQlsaW5lLWhlaWdodDogMS4xNWVtOwotCXBhZGRpbmc6IDAgLjRlbTsKLQlib3JkZXItbGVmdDogMXB4IHNvbGlkICNBQUE7Ci0JbWFyZ2luOiAwLjFlbSAwOwotCXpvb206IDE7Ci0JZGlzcGxheTogaW5saW5lICFpZTsKLX0KLQotLmNhdGxpbmtzIGxpOmZpcnN0LWNoaWxkIHsKLQlwYWRkaW5nLWxlZnQ6IC4yZW07Ci0JYm9yZGVyLWxlZnQ6IG5vbmU7Ci19Ci0vKiBEZWZhdWx0IHN0eWxpbmcgZm9yIEhUTUwgZWxlbWVudHMgKi8KLWRmbiB7Ci0gICAgZm9udC1zdHlsZTogaW5oZXJpdDsgIC8qIFJlc2V0IGRlZmF1bHQgc3R5bGluZyBmb3IgPGRmbj4gKi8KLX0KLXN1cCwgc3ViIHsKLSAgICBsaW5lLWhlaWdodDogMWVtOyAgICAgLyogUmVkdWNlIGxpbmUtaGVpZ2h0IGZvciA8c3VwPiBhbmQgPHN1Yj4gKi8KLX0KLSAKLS8qIE1haW4gcGFnZSBmaXhlcyAqLwotI2ludGVyd2lraS1jb21wbGV0ZWxpc3QgewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotYm9keS5wYWdlLU1haW5fUGFnZSAjY2EtZGVsZXRlIHsKLSAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Ci19Ci1ib2R5LnBhZ2UtTWFpbl9QYWdlICNtcC10b3BiYW5uZXIgewotICAgIGNsZWFyOiBib3RoOwotfQotIAotLyogRWRpdCB3aW5kb3cgdG9vbGJhciAqLwotI3Rvb2xiYXIgewotICAgIGhlaWdodDogMjJweDsKLSAgICBtYXJnaW4tYm90dG9tOiA2cHg7Ci19Ci0gCi0vKiBIaWdobGlnaHQgZGF0YSBwb2ludHMgaW4gdGhlIGluZm8gYWN0aW9uIGlmIHNwZWNpZmllZCBpbiB0aGUgVVJMICovCi1ib2R5LmFjdGlvbi1pbmZvIDp0YXJnZXQgewotICAgIGJhY2tncm91bmQ6ICNERUY7Ci19Ci0gCi0vKiBNYWtlIHRoZSBsaXN0IG9mIHJlZmVyZW5jZXMgc21hbGxlciAqLwotb2wucmVmZXJlbmNlcywKLWRpdi5yZWZsaXN0LAotZGl2LnJlZmJlZ2luIHsKLSAgICBmb250LXNpemU6IDkwJTsgICAgICAgICAgICAvKiBEZWZhdWx0IGZvbnQtc2l6ZSAqLwotICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwotfQotZGl2LnJlZmJlZ2luLTEwMCB7Ci0gICAgZm9udC1zaXplOiAxMDAlOyAgICAgICAgICAgLyogT3B0aW9uIGZvciBub3JtYWwgZm9udHNpemUgaW4ge3tyZWZiZWdpbn19ICovCi19Ci1kaXYucmVmbGlzdCBvbC5yZWZlcmVuY2VzIHsKLSAgICBmb250LXNpemU6IDEwMCU7ICAgICAgICAgICAvKiBSZXNldCBmb250LXNpemUgd2hlbiBuZXN0ZWQgaW4gZGl2LnJlZmxpc3QgKi8KLSAgICBsaXN0LXN0eWxlLXR5cGU6IGluaGVyaXQ7ICAvKiBFbmFibGUgY3VzdG9tIGxpc3Qgc3R5bGUgdHlwZXMgKi8KLX0KLSAKLS8qIFJlc2V0IHRvcCBtYXJnaW4gZm9yIGxpc3RzIGVtYmVkZGVkIGluIGNvbHVtbnMgKi8KLWRpdi5jb2x1bW5zIHsKLSAgICBtYXJnaW4tdG9wOiAwLjNlbTsKLX0KLWRpdi5jb2x1bW5zIGRsLAotZGl2LmNvbHVtbnMgb2wsCi1kaXYuY29sdW1ucyB1bCB7Ci0gICAgbWFyZ2luLXRvcDogMDsKLX0KLSAKLS8qIEF2b2lkIGxpc3QgaXRlbXMgZnJvbSBicmVha2luZyBiZXR3ZWVuIGNvbHVtbnMgKi8KLWRpdi5jb2x1bW5zIGxpLAotZGl2LmNvbHVtbnMgZGQgZGQgewotICAgIC13ZWJraXQtY29sdW1uLWJyZWFrLWluc2lkZTogYXZvaWQ7Ci0gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOwotICAgIGJyZWFrLWluc2lkZTogYXZvaWQtY29sdW1uOwotfQotIAotLyogSGlnaGxpZ2h0IGNsaWNrZWQgcmVmZXJlbmNlIGluIGJsdWUgdG8gaGVscCBuYXZpZ2F0aW9uICovCi1vbC5yZWZlcmVuY2VzIGxpOnRhcmdldCwKLXN1cC5yZWZlcmVuY2U6dGFyZ2V0LAotc3Bhbi5jaXRhdGlvbjp0YXJnZXQgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNERUY7Ci19Ci0gCi0vKiBFbnN1cmUgcmVmcyBpbiB0YWJsZSBoZWFkZXJzIGFuZCB0aGUgbGlrZSBhcmVuJ3QgYm9sZCBvciBpdGFsaWMgKi8KLXN1cC5yZWZlcmVuY2UgewotICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgZm9udC1zdHlsZTogbm9ybWFsOwotfQotIAotLyogQWxsb3cgaGlkZGVuIHJlZiBlcnJvcnMgdG8gYmUgc2hvd24gYnkgdXNlciBDU1MgKi8KLXNwYW4uYnJva2VucmVmIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotIAotLyogU3R5bGluZyBmb3IgY2l0YXRpb25zIChDU1MzKS4gQnJlYWtzIGxvbmcgdXJscywgZXRjLiwgcmF0aGVyIHRoYW4gb3ZlcmZsb3dpbmcgYm94ICovCi0uY2l0YXRpb24gewotICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKLX0KLSAKLS8qIEZvciBsaW5rZWQgY2l0YXRpb24gbnVtYmVycyBhbmQgZG9jdW1lbnQgSURzLCB3aGVyZQotICAgdGhlIG51bWJlciBuZWVkIG5vdCBiZSBzaG93biBvbiBhIHNjcmVlbiBvciBhIGhhbmRoZWxkLAotICAgYnV0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgcHJpbnRlZCB2ZXJzaW9uICovCi1AbWVkaWEgc2NyZWVuLCBoYW5kaGVsZCB7Ci0gICAgLmNpdGF0aW9uICoucHJpbnRvbmx5IHsKLSAgICAgICAgZGlzcGxheTogbm9uZTsKLSAgICB9Ci19Ci0gCi0vKiBTdHlsZSBmb3IgW1tUZW1wbGF0ZTpGbG93bGlzdF1dIHRoYXQgTGV0cyBsaXN0cyBmbG93IGFyb3VuZCBmbG9hdGluZyBvYmplY3MgKi8KLS5mbG93bGlzdCB1bCB7Ci0gICAgb3ZlcmZsb3cteDogaGlkZGVuOwotICAgIG1hcmdpbi1sZWZ0OiAwZW07Ci0gICAgcGFkZGluZy1sZWZ0OiAxLjZlbTsKLX0KLS5mbG93bGlzdCBvbCB7Ci0gICAgb3ZlcmZsb3cteDogaGlkZGVuOwotICAgIG1hcmdpbi1sZWZ0OiAwZW07Ci0gICAgcGFkZGluZy1sZWZ0OiAzLjJlbTsKLX0KLS5mbG93bGlzdCBkbCB7Ci0gICAgb3ZlcmZsb3cteDogaGlkZGVuOwotfQotIAotLyogU3R5bGUgZm9yIGhvcml6b250YWwgbGlzdHMgKHNlcGFyYXRvciBmb2xsb3dpbmcgaXRlbSkuCi0gICBJRTgtc3BlY2lmaWMgY2xhc3NlcyBhcmUgYXNzaWduZWQgaW4gW1tNZWRpYVdpa2k6Q29tbW9uLmpzL0lFRml4ZXMuanNdXS4KLSAgIEBzb3VyY2UgbWVkaWF3aWtpLm9yZy93aWtpL1NuaXBwZXRzL0hvcml6b250YWxfbGlzdHMKLSAgIEByZXZpc2lvbiA0LjMgKDIwMTQtMDEtMDYpCi0gICBAYXV0aG9yIFtbVXNlcjpFZG9rdGVyXV0KLSAqLwotLmhsaXN0IGRsLAotLmhsaXN0IG9sLAotLmhsaXN0IHVsIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzogMDsKLX0KLS8qIERpc3BsYXkgbGlzdCBpdGVtcyBpbmxpbmUgKi8KLS5obGlzdCBkZCwKLS5obGlzdCBkdCwKLS5obGlzdCBsaSB7Ci0gICAgbWFyZ2luOiAwOwotICAgIGRpc3BsYXk6IGlubGluZTsKLX0KLS8qIERpc3BsYXkgbmVzdGVkIGxpc3RzIGlubGluZSAqLwotLmhsaXN0IGRsIGRsLCAuaGxpc3QgZGwgb2wsIC5obGlzdCBkbCB1bCwKLS5obGlzdCBvbCBkbCwgLmhsaXN0IG9sIG9sLCAuaGxpc3Qgb2wgdWwsCi0uaGxpc3QgdWwgZGwsIC5obGlzdCB1bCBvbCwgLmhsaXN0IHVsIHVsIHsKLSAgICBkaXNwbGF5OiBpbmxpbmU7Ci19Ci0vKiBHZW5lcmF0ZSBpbnRlcnB1bmN0cyAqLwotLmhsaXN0IGR0OmFmdGVyIHsKLSAgICBjb250ZW50OiAiOiAiOwotfQotLmhsaXN0IGRkOmFmdGVyLAotLmhsaXN0IGxpOmFmdGVyIHsKLSAgICBjb250ZW50OiAiIMK3ICI7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0uaGxpc3QgZGQ6bGFzdC1jaGlsZDphZnRlciwKLS5obGlzdCBkdDpsYXN0LWNoaWxkOmFmdGVyLAotLmhsaXN0IGxpOmxhc3QtY2hpbGQ6YWZ0ZXIgewotICAgIGNvbnRlbnQ6IG5vbmU7Ci19Ci0vKiBGb3IgSUU4ICovCi0uaGxpc3QgZGQuaGxpc3QtbGFzdC1jaGlsZDphZnRlciwKLS5obGlzdCBkdC5obGlzdC1sYXN0LWNoaWxkOmFmdGVyLAotLmhsaXN0IGxpLmhsaXN0LWxhc3QtY2hpbGQ6YWZ0ZXIgewotICAgIGNvbnRlbnQ6IG5vbmU7Ci19Ci0vKiBBZGQgcGFyZW50aGVzZXMgYXJvdW5kIG5lc3RlZCBsaXN0cyAqLwotLmhsaXN0IGRkIGRkOmZpcnN0LWNoaWxkOmJlZm9yZSwgLmhsaXN0IGRkIGR0OmZpcnN0LWNoaWxkOmJlZm9yZSwgLmhsaXN0IGRkIGxpOmZpcnN0LWNoaWxkOmJlZm9yZSwKLS5obGlzdCBkdCBkZDpmaXJzdC1jaGlsZDpiZWZvcmUsIC5obGlzdCBkdCBkdDpmaXJzdC1jaGlsZDpiZWZvcmUsIC5obGlzdCBkdCBsaTpmaXJzdC1jaGlsZDpiZWZvcmUsCi0uaGxpc3QgbGkgZGQ6Zmlyc3QtY2hpbGQ6YmVmb3JlLCAuaGxpc3QgbGkgZHQ6Zmlyc3QtY2hpbGQ6YmVmb3JlLCAuaGxpc3QgbGkgbGk6Zmlyc3QtY2hpbGQ6YmVmb3JlIHsKLSAgICBjb250ZW50OiAiICgiOwotICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci19Ci0uaGxpc3QgZGQgZGQ6bGFzdC1jaGlsZDphZnRlciwgLmhsaXN0IGRkIGR0Omxhc3QtY2hpbGQ6YWZ0ZXIsIC5obGlzdCBkZCBsaTpsYXN0LWNoaWxkOmFmdGVyLAotLmhsaXN0IGR0IGRkOmxhc3QtY2hpbGQ6YWZ0ZXIsIC5obGlzdCBkdCBkdDpsYXN0LWNoaWxkOmFmdGVyLCAuaGxpc3QgZHQgbGk6bGFzdC1jaGlsZDphZnRlciwKLS5obGlzdCBsaSBkZDpsYXN0LWNoaWxkOmFmdGVyLCAuaGxpc3QgbGkgZHQ6bGFzdC1jaGlsZDphZnRlciwgLmhsaXN0IGxpIGxpOmxhc3QtY2hpbGQ6YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICIpICI7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLX0KLS8qIEZvciBJRTggKi8KLS5obGlzdCBkZCBkZC5obGlzdC1sYXN0LWNoaWxkOmFmdGVyLCAuaGxpc3QgZGQgZHQuaGxpc3QtbGFzdC1jaGlsZDphZnRlciwgLmhsaXN0IGRkIGxpLmhsaXN0LWxhc3QtY2hpbGQ6YWZ0ZXIsCi0uaGxpc3QgZHQgZGQuaGxpc3QtbGFzdC1jaGlsZDphZnRlciwgLmhsaXN0IGR0IGR0LmhsaXN0LWxhc3QtY2hpbGQ6YWZ0ZXIsIC5obGlzdCBkdCBsaS5obGlzdC1sYXN0LWNoaWxkOmFmdGVyLAotLmhsaXN0IGxpIGRkLmhsaXN0LWxhc3QtY2hpbGQ6YWZ0ZXIsIC5obGlzdCBsaSBkdC5obGlzdC1sYXN0LWNoaWxkOmFmdGVyLCAuaGxpc3QgbGkgbGkuaGxpc3QtbGFzdC1jaGlsZDphZnRlciB7Ci0gICAgY29udGVudDogIikgIjsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotfQotLyogUHV0IG9yZGluYWxzIGluIGZyb250IG9mIG9yZGVyZWQgbGlzdCBpdGVtcyAqLwotLmhsaXN0IG9sIHsKLSAgICBjb3VudGVyLXJlc2V0OiBsaXN0aXRlbTsKLX0KLS5obGlzdCBvbCA+IGxpIHsKLSAgICBjb3VudGVyLWluY3JlbWVudDogbGlzdGl0ZW07Ci19Ci0uaGxpc3Qgb2wgPiBsaTpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICIgIiBjb3VudGVyKGxpc3RpdGVtKSAiICI7Ci19Ci0uaGxpc3QgZGQgb2wgPiBsaTpmaXJzdC1jaGlsZDpiZWZvcmUsCi0uaGxpc3QgZHQgb2wgPiBsaTpmaXJzdC1jaGlsZDpiZWZvcmUsCi0uaGxpc3QgbGkgb2wgPiBsaTpmaXJzdC1jaGlsZDpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICIgKCIgY291bnRlcihsaXN0aXRlbSkgIiAiOwotfQotIAotLyogVW5idWxsZXRlZCBsaXN0cyAqLwotLnBsYWlubGlzdCB1bCB7Ci0gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7Ci0gICAgbGlzdC1zdHlsZTogbm9uZSBub25lOwotICAgIG1hcmdpbjogMDsKLX0KLS5wbGFpbmxpc3QgdWwgbGkgewotICAgIG1hcmdpbi1ib3R0b206IDA7Ci19Ci0gCi0vKiBEZWZhdWx0IHN0eWxlIGZvciBuYXZpZ2F0aW9uIGJveGVzICovCi0ubmF2Ym94IHsgICAgICAgICAgICAgICAgICAgICAvKiBOYXZib3ggY29udGFpbmVyIHN0eWxlICovCi0gICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBtYXJnaW46IGF1dG87Ci0gICAgY2xlYXI6IGJvdGg7Ci0gICAgZm9udC1zaXplOiA4OCU7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAgIHBhZGRpbmc6IDFweDsKLX0KLS5uYXZib3gtaW5uZXIsCi0ubmF2Ym94LXN1Ymdyb3VwIHsKLSAgICB3aWR0aDogMTAwJTsKLX0KLS5uYXZib3gtZ3JvdXAsCi0ubmF2Ym94LXRpdGxlLAotLm5hdmJveC1hYm92ZWJlbG93IHsKLSAgICBwYWRkaW5nOiAwLjI1ZW0gMWVtOyAgICAgIC8qIFRpdGxlLCBncm91cCBhbmQgYWJvdmUvYmVsb3cgc3R5bGVzICovCi0gICAgbGluZS1oZWlnaHQ6IDEuNWVtOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLXRoLm5hdmJveC1ncm91cCB7ICAgICAgICAgICAgIC8qIEdyb3VwIHN0eWxlICovCi0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci0ubmF2Ym94LAotLm5hdmJveC1zdWJncm91cCB7Ci0gICAgYmFja2dyb3VuZDogI2ZkZmRmZDsgICAgICAvKiBCYWNrZ3JvdW5kIGNvbG9yICovCi19Ci0ubmF2Ym94LWxpc3QgewotICAgIGxpbmUtaGVpZ2h0OiAxLjhlbTsKLSAgICBib3JkZXItY29sb3I6ICNmZGZkZmQ7ICAgIC8qIE11c3QgbWF0Y2ggYmFja2dyb3VuZCBjb2xvciAqLwotfQotLm5hdmJveCB0aCwKLS5uYXZib3gtdGl0bGUgewotICAgIGJhY2tncm91bmQ6ICNjY2NjZmY7ICAgICAgLyogTGV2ZWwgMSBjb2xvciAqLwotfQotLm5hdmJveC1hYm92ZWJlbG93LAotdGgubmF2Ym94LWdyb3VwLAotLm5hdmJveC1zdWJncm91cCAubmF2Ym94LXRpdGxlIHsKLSAgICBiYWNrZ3JvdW5kOiAjZGRkZGZmOyAgICAgIC8qIExldmVsIDIgY29sb3IgKi8KLX0KLS5uYXZib3gtc3ViZ3JvdXAgLm5hdmJveC1ncm91cCwKLS5uYXZib3gtc3ViZ3JvdXAgLm5hdmJveC1hYm92ZWJlbG93IHsKLSAgICBiYWNrZ3JvdW5kOiAjZTZlNmZmOyAgICAgIC8qIExldmVsIDMgY29sb3IgKi8KLX0KLS5uYXZib3gtZXZlbiB7Ci0gICAgYmFja2dyb3VuZDogI2Y3ZjdmNzsgICAgICAvKiBFdmVuIHJvdyBzdHJpcGluZyAqLwotfQotLm5hdmJveC1vZGQgewotICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyAgLyogT2RkIHJvdyBzdHJpcGluZyAqLwotfQotdGFibGUubmF2Ym94ICsgdGFibGUubmF2Ym94IHsgIC8qIFNpbmdsZSBwaXhlbCBib3JkZXIgYmV0d2VlbiBhZGphY2VudCBuYXZib3hlcyAqLwotICAgIG1hcmdpbi10b3A6IC0xcHg7ICAgICAgICAgIC8qIChkb2Vzbid0IHdvcmsgZm9yIElFNiwgYnV0IHRoYXQncyBva2F5KSAgICAgICAqLwotfQotLm5hdmJveCAuaGxpc3QgdGQgZGwsCi0ubmF2Ym94IC5obGlzdCB0ZCBvbCwKLS5uYXZib3ggLmhsaXN0IHRkIHVsLAotLm5hdmJveCB0ZC5obGlzdCBkbCwKLS5uYXZib3ggdGQuaGxpc3Qgb2wsCi0ubmF2Ym94IHRkLmhsaXN0IHVsIHsKLSAgICBwYWRkaW5nOiAwLjEyNWVtIDA7ICAgICAgIC8qIEFkanVzdCBobGlzdCBwYWRkaW5nIGluIG5hdmJveGVzICovCi19Ci1vbCArIHRhYmxlLm5hdmJveCwKLXVsICsgdGFibGUubmF2Ym94IHsKLSAgICBtYXJnaW4tdG9wOiAwLjVlbTsgICAgICAgIC8qIFByZXZlbnQgbGlzdHMgZnJvbSBjbGluZ2luZyB0byBuYXZib3hlcyAqLwotfQotIAotLyogRGVmYXVsdCBzdHlsaW5nIGZvciBOYXZiYXIgdGVtcGxhdGUgKi8KLS5uYXZiYXIgewotICAgIGRpc3BsYXk6IGlubGluZTsKLSAgICBmb250LXNpemU6IDg4JTsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotfQotLm5hdmJhciB1bCB7Ci0gICAgZGlzcGxheTogaW5saW5lOwotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci19Ci0ubmF2YmFyIGxpIHsKLSAgICB3b3JkLXNwYWNpbmc6IC0wLjEyNWVtOwotfQotLm5hdmJhci5taW5pIGxpIHNwYW4gewotICBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHM7Ci19Ci0vKiBOYXZiYXIgc3R5bGluZyB3aGVuIG5lc3RlZCBpbiBpbmZvYm94IGFuZCBuYXZib3ggKi8KLS5pbmZvYm94IC5uYXZiYXIgewotICAgIGZvbnQtc2l6ZTogMTAwJTsKLX0KLS5uYXZib3ggLm5hdmJhciB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgZm9udC1zaXplOiAxMDAlOwotfQotLm5hdmJveC10aXRsZSAubmF2YmFyIHsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIHRleHQtYWxpZ246IGxlZnQ7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIG1hcmdpbi1yaWdodDogMC41ZW07Ci0gICAgd2lkdGg6IDZlbTsKLX0KLSAKLS8qICdzaG93Jy8naGlkZScgYnV0dG9ucyBjcmVhdGVkIGR5bmFtaWNhbGx5IGJ5IHRoZSBDb2xsYXBzaWJsZVRhYmxlcyBqYXZhc2NyaXB0Ci0gICBpbiBbW01lZGlhV2lraTpDb21tb24uanNdXSBhcmUgc3R5bGVkIGhlcmUgc28gdGhleSBjYW4gYmUgY3VzdG9taXNlZC4gKi8KLS5jb2xsYXBzZUJ1dHRvbiB7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIGZsb2F0OiByaWdodDsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBtYXJnaW4tbGVmdDogMC41ZW07Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotICAgIHdpZHRoOiBhdXRvOwotfQotLyogSW4gbmF2Ym94ZXMsIHRoZSBzaG93L2hpZGUgYnV0dG9uIGJhbGFuY2VzIHRoZSB2wrdkwrdlIGxpbmtzCi0gICBmcm9tIFtbVGVtcGxhdGU6TmF2YmFyXV0sIHNvIHRoZXkgbmVlZCB0byBiZSB0aGUgc2FtZSB3aWR0aC4gKi8KLS5uYXZib3ggLmNvbGxhcHNlQnV0dG9uIHsKLSAgICB3aWR0aDogNmVtOwotfQotIAotLyogU3R5bGluZyBmb3IgSlF1ZXJ5IG1ha2VDb2xsYXBzaWJsZSwgbWF0Y2hpbmcgdGhhdCBvZiBjb2xsYXBzZUJ1dHRvbiAqLwotLm13LWNvbGxhcHNpYmxlLXRvZ2dsZSB7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci0ubmF2Ym94IC5tdy1jb2xsYXBzaWJsZS10b2dnbGUgewotICAgIHdpZHRoOiA2ZW07Ci19Ci0gCi0vKiBJbmZvYm94IHRlbXBsYXRlIHN0eWxlICovCi0uaW5mb2JveCB7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5OwotICAgIGNvbG9yOiBibGFjazsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgbWFyZ2luOiAwLjVlbSAwIDAuNWVtIDFlbTsKLSAgICBwYWRkaW5nOiAwLjJlbTsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgZmxvYXQ6IHJpZ2h0OwotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBjbGVhcjogcmlnaHQ7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIHRleHQtYWxpZ246IGxlZnQ7Ci0gICAgZm9udC1zaXplOiA4OCU7Ci0gICAgbGluZS1oZWlnaHQ6IDEuNWVtOwotfQotLmluZm9ib3ggY2FwdGlvbiB7Ci0gICAgZm9udC1zaXplOiAxMjUlOwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotLmluZm9ib3ggdGQsCi0uaW5mb2JveCB0aCB7Ci0gICAgdmVydGljYWwtYWxpZ246IHRvcDsKLX0KLS5pbmZvYm94LmJvcmRlcmVkIHsKLSAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotfQotLmluZm9ib3guYm9yZGVyZWQgdGQsCi0uaW5mb2JveC5ib3JkZXJlZCB0aCB7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKLX0KLS5pbmZvYm94LmJvcmRlcmVkIC5ib3JkZXJsZXNzIHRkLAotLmluZm9ib3guYm9yZGVyZWQgLmJvcmRlcmxlc3MgdGggewotICAgIGJvcmRlcjogMDsKLX0KLSAKLS5pbmZvYm94LnNpc3RlcnByb2plY3QgewotICAgIHdpZHRoOiAyMGVtOwotICAgIGZvbnQtc2l6ZTogOTAlOwotfQotIAotLmluZm9ib3guc3RhbmRhcmQtdGFsayB7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzA5MDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhlYWJhOwotfQotLmluZm9ib3guc3RhbmRhcmQtdGFsay5ib3JkZXJlZCB0ZCwKLS5pbmZvYm94LnN0YW5kYXJkLXRhbGsuYm9yZGVyZWQgdGggewotICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwOTA7Ci19Ci0gCi0vKiBzdHlsZXMgZm9yIGJvcmRlcmVkIGluZm9ib3ggd2l0aCBtZXJnZWQgcm93cyAqLwotLmluZm9ib3guYm9yZGVyZWQgLm1lcmdlZHRvcHJvdyB0ZCwKLS5pbmZvYm94LmJvcmRlcmVkIC5tZXJnZWR0b3Byb3cgdGggewotICAgIGJvcmRlcjogMDsKLSAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2FhYTsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2FhYTsKLX0KLSAKLS5pbmZvYm94LmJvcmRlcmVkIC5tZXJnZWRyb3cgdGQsCi0uaW5mb2JveC5ib3JkZXJlZCAubWVyZ2Vkcm93IHRoIHsKLSAgICBib3JkZXI6IDA7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNhYWE7Ci19Ci0gCi0vKiBTdHlsZXMgZm9yIGdlb2dyYXBoeSBpbmZvYm94ZXMsIGVnIGNvdW50cmllcywKLSAgIGNvdW50cnkgc3ViZGl2aXNpb25zLCBjaXRpZXMsIGV0Yy4gICAgICAgICAgICAqLwotLmluZm9ib3guZ2VvZ3JhcGh5IHsKLSAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICAgIGxpbmUtaGVpZ2h0OiAxLjJlbTsKLSAgICBmb250LXNpemU6IDkwJTsKLX0KLSAKLS5pbmZvYm94Lmdlb2dyYXBoeSAgdGQsCi0uaW5mb2JveC5nZW9ncmFwaHkgIHRoIHsKLSAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2FhYTsKLSAgICBwYWRkaW5nOiAwLjRlbSAwLjZlbSAwLjRlbSAwLjZlbTsKLX0KLS5pbmZvYm94Lmdlb2dyYXBoeSAubWVyZ2VkdG9wcm93IHRkLAotLmluZm9ib3guZ2VvZ3JhcGh5IC5tZXJnZWR0b3Byb3cgdGggewotICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjYWFhOwotICAgIHBhZGRpbmc6IDAuNGVtIDAuNmVtIDAuMmVtIDAuNmVtOwotfQotIAotLmluZm9ib3guZ2VvZ3JhcGh5IC5tZXJnZWRyb3cgdGQsCi0uaW5mb2JveC5nZW9ncmFwaHkgLm1lcmdlZHJvdyB0aCB7Ci0gICAgYm9yZGVyOiAwOwotICAgIHBhZGRpbmc6IDAgMC42ZW0gMC4yZW0gMC42ZW07Ci19Ci0gCi0uaW5mb2JveC5nZW9ncmFwaHkgLm1lcmdlZGJvdHRvbXJvdyB0ZCwKLS5pbmZvYm94Lmdlb2dyYXBoeSAubWVyZ2VkYm90dG9tcm93IHRoIHsKLSAgICBib3JkZXItdG9wOiAwOwotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYWFhOwotICAgIHBhZGRpbmc6IDAgMC42ZW0gMC40ZW0gMC42ZW07Ci19Ci0gCi0uaW5mb2JveC5nZW9ncmFwaHkgLm1hcHRhYmxlIHRkLAotLmluZm9ib3guZ2VvZ3JhcGh5IC5tYXB0YWJsZSB0aCB7Ci0gICAgYm9yZGVyOiAwOwotICAgIHBhZGRpbmc6IDA7Ci19Ci0gCi0vKiBOb3JtYWwgZm9udCBzdHlsaW5nIGZvciB0YWJsZSByb3cgaGVhZGVycyB3aXRoIHNjb3BlPSJyb3ciIHRhZyAqLwotLndpa2l0YWJsZS5wbGFpbnJvd2hlYWRlcnMgdGhbc2NvcGU9cm93XSB7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgdGV4dC1hbGlnbjogbGVmdDsKLX0KLSAKLS8qIExpc3RzIGluIGRhdGEgY2VsbHMgYXJlIGFsd2F5cyBsZWZ0LWFsaWduZWQgKi8KLS53aWtpdGFibGUgdGQgdWwsCi0ud2lraXRhYmxlIHRkIG9sLAotLndpa2l0YWJsZSB0ZCBkbCB7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIHRleHQtYWxpZ246IGxlZnQ7Ci19Ci0vKiAuLi51bmxlc3MgdGhleSBhbHNvIHVzZSB0aGUgaGxpc3QgY2xhc3MgKi8KLS53aWtpdGFibGUuaGxpc3QgdGQgdWwsCi0ud2lraXRhYmxlLmhsaXN0IHRkIG9sLAotLndpa2l0YWJsZS5obGlzdCB0ZCBkbCB7Ci0gICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKLX0KLSAKLS8qIEljb25zIGZvciBtZWRpYWxpc3QgdGVtcGxhdGVzIFtbVGVtcGxhdGU6TGlzdGVuXV0sCi0gICBbW1RlbXBsYXRlOk11bHRpLWxpc3Rlbl9zdGFydF1dLCBbW1RlbXBsYXRlOlZpZGVvXV0sCi0gICBbW1RlbXBsYXRlOk11bHRpLXZpZGVvX3N0YXJ0XV0gKi8KLWRpdi5saXN0ZW5saXN0IHsKLSAgICBiYWNrZ3JvdW5kOiB1cmwoIi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvNC80Ny9Tb3VuZC1pY29uLnN2ZyIpIG5vLXJlcGVhdCBzY3JvbGwgMCUgMCUgdHJhbnNwYXJlbnQ7Ci0gICAgYmFja2dyb3VuZC1zaXplOiAzMHB4OwotICAgIHBhZGRpbmctbGVmdDogNDBweDsKLX0KLSAKLS8qIEZpeCBmb3IgaGllcm9nbHlwaHMgc3BlY2lmaWNhbGl0eSBpc3N1ZSBpbiBpbmZvYm94ZXMgKFtbQnVnemlsbGE6NDE4NjldXSkgKi8KLXRhYmxlLm13LWhpZXJvLXRhYmxlIHRkIHsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwotfQotIAotLyogU3R5bGUgcnVsZXMgZm9yIG1lZGlhIGxpc3QgdGVtcGxhdGVzICovCi1kaXYubWVkaWFsaXN0IHsKLSAgICBtaW4taGVpZ2h0OiA1MHB4OwotICAgIG1hcmdpbjogMWVtOwotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3AgbGVmdDsKLSAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwotfQotZGl2Lm1lZGlhbGlzdCB1bCB7Ci0gICAgbGlzdC1zdHlsZS10eXBlOiBub25lOwotICAgIGxpc3Qtc3R5bGUtaW1hZ2U6IG5vbmU7Ci0gICAgbWFyZ2luOiAwOwotfQotZGl2Lm1lZGlhbGlzdCB1bCBsaSB7Ci0gICAgcGFkZGluZy1ib3R0b206IDAuNWVtOwotfQotZGl2Lm1lZGlhbGlzdCB1bCBsaSBsaSB7Ci0gICAgZm9udC1zaXplOiA5MSU7Ci0gICAgcGFkZGluZy1ib3R0b206IDA7Ci19Ci0gCi0vKiBDaGFuZ2UgdGhlIGV4dGVybmFsIGxpbmsgaWNvbiB0byBhbiBBZG9iZSBpY29uIGZvciBhbGwgUERGIGZpbGVzCi0gICBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgdGhlc2UgQ1NTIHNlbGVjdG9ycywgbGlrZSBNb3ppbGxhIGFuZCBPcGVyYSAqLwotZGl2I2NvbnRlbnQgYVtocmVmJD0iLnBkZiJdLmV4dGVybmFsLAotZGl2I2NvbnRlbnQgYVtocmVmKj0iLnBkZj8iXS5leHRlcm5hbCwKLWRpdiNjb250ZW50IGFbaHJlZio9Ii5wZGYjIl0uZXh0ZXJuYWwsCi1kaXYjY29udGVudCBhW2hyZWYkPSIuUERGIl0uZXh0ZXJuYWwsCi1kaXYjY29udGVudCBhW2hyZWYqPSIuUERGPyJdLmV4dGVybmFsLAotZGl2I2NvbnRlbnQgYVtocmVmKj0iLlBERiMiXS5leHRlcm5hbCwKLWRpdiNtd19jb250ZW50IGFbaHJlZiQ9Ii5wZGYiXS5leHRlcm5hbCwKLWRpdiNtd19jb250ZW50IGFbaHJlZio9Ii5wZGY/Il0uZXh0ZXJuYWwsCi1kaXYjbXdfY29udGVudCBhW2hyZWYqPSIucGRmIyJdLmV4dGVybmFsLAotZGl2I213X2NvbnRlbnQgYVtocmVmJD0iLlBERiJdLmV4dGVybmFsLAotZGl2I213X2NvbnRlbnQgYVtocmVmKj0iLlBERj8iXS5leHRlcm5hbCwKLWRpdiNtd19jb250ZW50IGFbaHJlZio9Ii5QREYjIl0uZXh0ZXJuYWwgewotICAgIGJhY2tncm91bmQ6IHVybCgiLy91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy8yLzIzL0ljb25zLW1pbmktZmlsZV9hY3JvYmF0LmdpZiIpIG5vLXJlcGVhdCByaWdodDsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgcGFkZGluZy1yaWdodDogMThweDsKLX0KLSAKLS8qIENoYW5nZSB0aGUgZXh0ZXJuYWwgbGluayBpY29uIHRvIGFuIEFkb2JlIGljb24gYW55d2hlcmUgdGhlIFBERmxpbmsgY2xhc3MKLSAgIGlzIHVzZWQgKG5vdGFibHkgVGVtcGxhdGU6UERGbGluaykuIFRoaXMgd29ya3MgaW4gSUUsIHVubGlrZSB0aGUgYWJvdmUuICovCi1kaXYjY29udGVudCBzcGFuLlBERmxpbmsgYSwKLWRpdiNtd19jb250ZW50IHNwYW4uUERGbGluayBhIHsKLSAgICBiYWNrZ3JvdW5kOiB1cmwoIi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvMi8yMy9JY29ucy1taW5pLWZpbGVfYWNyb2JhdC5naWYiKSBuby1yZXBlYXQgcmlnaHQ7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIHBhZGRpbmctcmlnaHQ6IDE4cHg7Ci19Ci0gCi0vKiBDb250ZW50IGluIGNvbHVtbnMgd2l0aCBDU1MgaW5zdGVhZCBvZiB0YWJsZXMgKFtbVGVtcGxhdGU6Q29sdW1uc11dKSAqLwotZGl2LmNvbHVtbnMtMiBkaXYuY29sdW1uIHsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgd2lkdGg6IDUwJTsKLSAgICBtaW4td2lkdGg6IDMwMHB4OwotfQotZGl2LmNvbHVtbnMtMyBkaXYuY29sdW1uIHsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgd2lkdGg6IDMzLjMlOwotICAgIG1pbi13aWR0aDogMjAwcHg7Ci19Ci1kaXYuY29sdW1ucy00IGRpdi5jb2x1bW4gewotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBmbG9hdDogbGVmdDsKLSAgICB3aWR0aDogMjUlOwotICAgIG1pbi13aWR0aDogMTUwcHg7Ci19Ci1kaXYuY29sdW1ucy01IGRpdi5jb2x1bW4gewotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBmbG9hdDogbGVmdDsKLSAgICB3aWR0aDogMjAlOwotICAgIG1pbi13aWR0aDogMTIwcHg7Ci19Ci0gCi0vKiBNZXNzYWdlYm94IHRlbXBsYXRlcyAqLwotLm1lc3NhZ2Vib3ggewotICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTsKLSAgICB3aWR0aDogODAlOwotICAgIG1hcmdpbjogMCBhdXRvIDFlbSBhdXRvOwotICAgIHBhZGRpbmc6IC4yZW07Ci19Ci0ubWVzc2FnZWJveC5tZXJnZSB7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2MwYjhjYzsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNWZmOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLS5tZXNzYWdlYm94LmNsZWFudXAgewotICAgIGJvcmRlcjogMXB4IHNvbGlkICM5ZjlmZmY7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2VmZWZmZjsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0ubWVzc2FnZWJveC5zdGFuZGFyZC10YWxrIHsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMDkwOwotICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGVhYmE7Ci0gICAgbWFyZ2luOiA0cHggYXV0bzsKLX0KLS8qIEZvciBvbGQgV2lraVByb2plY3QgYmFubmVycyBpbnNpZGUgYmFubmVyIHNoZWxscy4gKi8KLS5tYm94LWluc2lkZSAuc3RhbmRhcmQtdGFsaywKLS5tZXNzYWdlYm94Lm5lc3RlZC10YWxrIHsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMDkwOwotICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGVhYmE7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgbWFyZ2luOiAycHggMDsKLSAgICBwYWRkaW5nOiAycHg7Ci19Ci0ubWVzc2FnZWJveC5zbWFsbCB7Ci0gICAgd2lkdGg6IDIzOHB4OwotICAgIGZvbnQtc2l6ZTogODUlOwotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBmbG9hdDogcmlnaHQ7Ci0gICAgY2xlYXI6IGJvdGg7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIG1hcmdpbjogMCAwIDFlbSAxZW07Ci0gICAgbGluZS1oZWlnaHQ6IDEuMjVlbTsKLX0KLS5tZXNzYWdlYm94LnNtYWxsLXRhbGsgewotICAgIHdpZHRoOiAyMzhweDsKLSAgICBmb250LXNpemU6IDg1JTsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgZmxvYXQ6IHJpZ2h0OwotICAgIGNsZWFyOiBib3RoOwotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBtYXJnaW46IDAgMCAxZW0gMWVtOwotICAgIGxpbmUtaGVpZ2h0OiAxLjI1ZW07Ci0gICAgYmFja2dyb3VuZDogI0Y4RUFCQTsKLX0KLSAKLS8qIENlbGwgc2l6ZXMgZm9yIGFtYm94L3RtYm94L2ltYm94L2NtYm94L29tYm94L2ZtYm94L2RtYm94IG1lc3NhZ2UgYm94ZXMgKi8KLXRoLm1ib3gtdGV4dCwgdGQubWJveC10ZXh0IHsgICAvKiBUaGUgbWVzc2FnZSBib2R5IGNlbGwocykgKi8KLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIHBhZGRpbmc6IDAuMjVlbSAwLjllbTsgICAgIC8qIDAuOWVtIGxlZnQvcmlnaHQgKi8KLSAgICB3aWR0aDogMTAwJTsgICAgICAgICAgICAgICAvKiBNYWtlIGFsbCBtYm94ZXMgdGhlIHNhbWUgd2lkdGggcmVnYXJkbGVzcyBvZiB0ZXh0IGxlbmd0aCAqLwotfQotdGQubWJveC1pbWFnZSB7ICAgICAgICAgICAgICAgIC8qIFRoZSBsZWZ0IGltYWdlIGNlbGwgKi8KLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIHBhZGRpbmc6IDJweCAwIDJweCAwLjllbTsgIC8qIDAuOWVtIGxlZnQsIDBweCByaWdodCAqLwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLXRkLm1ib3gtaW1hZ2VyaWdodCB7ICAgICAgICAgICAvKiBUaGUgcmlnaHQgaW1hZ2UgY2VsbCAqLwotICAgIGJvcmRlcjogbm9uZTsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgcGFkZGluZzogMnB4IDAuOWVtIDJweCAwOyAgLyogMHB4IGxlZnQsIDAuOWVtIHJpZ2h0ICovCi0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotdGQubWJveC1lbXB0eS1jZWxsIHsgICAgICAgICAgIC8qIEFuIGVtcHR5IG5hcnJvdyBjZWxsICovCi0gICAgYm9yZGVyOiBub25lOwotICAgIHBhZGRpbmc6IDBweDsKLSAgICB3aWR0aDogMXB4OwotfQotIAotLyogQXJ0aWNsZSBtZXNzYWdlIGJveCBzdHlsZXMgKi8KLXRhYmxlLmFtYm94IHsKLSAgICBtYXJnaW46IDBweCAxMCU7ICAgICAgICAgICAgICAgICAgLyogMTAlID0gV2lsbCBub3Qgb3ZlcmxhcCB3aXRoIG90aGVyIGVsZW1lbnRzICovCi0gICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgYm9yZGVyLWxlZnQ6IDEwcHggc29saWQgIzFlOTBmZjsgIC8qIERlZmF1bHQgIm5vdGljZSIgYmx1ZSAqLwotICAgIGJhY2tncm91bmQ6ICNmYmZiZmI7Ci19Ci10YWJsZS5hbWJveCArIHRhYmxlLmFtYm94IHsgICAgICAvKiBTaW5nbGUgYm9yZGVyIGJldHdlZW4gc3RhY2tlZCBib3hlcy4gKi8KLSAgICBtYXJnaW4tdG9wOiAtMXB4OwotfQotLmFtYm94IHRoLm1ib3gtdGV4dCwKLS5hbWJveCB0ZC5tYm94LXRleHQgeyAgICAgICAgICAgIC8qIFRoZSBtZXNzYWdlIGJvZHkgY2VsbChzKSAqLwotICAgIHBhZGRpbmc6IDAuMjVlbSAwLjVlbTsgICAgICAgLyogMC41ZW0gbGVmdC9yaWdodCAqLwotfQotLmFtYm94IHRkLm1ib3gtaW1hZ2UgeyAgICAgICAgICAgLyogVGhlIGxlZnQgaW1hZ2UgY2VsbCAqLwotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBwYWRkaW5nOiAycHggMCAycHggMC41ZW07ICAgIC8qIDAuNWVtIGxlZnQsIDBweCByaWdodCAqLwotfQotLmFtYm94IHRkLm1ib3gtaW1hZ2VyaWdodCB7ICAgICAgLyogVGhlIHJpZ2h0IGltYWdlIGNlbGwgKi8KLSAgICAvKiBAbm9mbGlwICovCi0gICAgcGFkZGluZzogMnB4IDAuNWVtIDJweCAwOyAgICAvKiAwcHggbGVmdCwgMC41ZW0gcmlnaHQgKi8KLX0KLSAKLXRhYmxlLmFtYm94LW5vdGljZSB7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIGJvcmRlci1sZWZ0OiAxMHB4IHNvbGlkICMxZTkwZmY7ICAgIC8qIEJsdWUgKi8KLX0KLXRhYmxlLmFtYm94LXNwZWVkeSB7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIGJvcmRlci1sZWZ0OiAxMHB4IHNvbGlkICNiMjIyMjI7ICAgIC8qIFJlZCAqLwotICAgIGJhY2tncm91bmQ6ICNmZWU7ICAgICAgICAgICAgICAgICAgIC8qIFBpbmsgKi8KLX0KLXRhYmxlLmFtYm94LWRlbGV0ZSB7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIGJvcmRlci1sZWZ0OiAxMHB4IHNvbGlkICNiMjIyMjI7ICAgIC8qIFJlZCAqLwotfQotdGFibGUuYW1ib3gtY29udGVudCB7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIGJvcmRlci1sZWZ0OiAxMHB4IHNvbGlkICNmMjg1MDA7ICAgIC8qIE9yYW5nZSAqLwotfQotdGFibGUuYW1ib3gtc3R5bGUgewotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBib3JkZXItbGVmdDogMTBweCBzb2xpZCAjZjRjNDMwOyAgICAvKiBZZWxsb3cgKi8KLX0KLXRhYmxlLmFtYm94LW1vdmUgewotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBib3JkZXItbGVmdDogMTBweCBzb2xpZCAjOTkzMmNjOyAgICAvKiBQdXJwbGUgKi8KLX0KLXRhYmxlLmFtYm94LXByb3RlY3Rpb24gewotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBib3JkZXItbGVmdDogMTBweCBzb2xpZCAjYmJhOyAgICAgICAvKiBHcmF5LWdvbGQgKi8KLX0KLSAKLS8qIEltYWdlIG1lc3NhZ2UgYm94IHN0eWxlcyAqLwotdGFibGUuaW1ib3ggewotICAgIG1hcmdpbjogNHB4IDEwJTsKLSAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICAgIGJvcmRlcjogM3B4IHNvbGlkICMxZTkwZmY7ICAgIC8qIERlZmF1bHQgIm5vdGljZSIgYmx1ZSAqLwotICAgIGJhY2tncm91bmQ6ICNmYmZiZmI7Ci19Ci0uaW1ib3ggLm1ib3gtdGV4dCAuaW1ib3ggeyAgLyogRm9yIGltYm94ZXMgaW5zaWRlIGltYm94LXRleHQgY2VsbHMuICovCi0gICAgbWFyZ2luOiAwIC0wLjVlbTsgICAgICAgLyogMC45IC0gMC41ID0gMC40ZW0gbGVmdC9yaWdodC4gICAgICAgICovCi0gICAgZGlzcGxheTogYmxvY2s7ICAgICAgICAgLyogRml4IGZvciB3ZWJraXQgdG8gZm9yY2UgMTAwJSB3aWR0aC4gICovCi19Ci0ubWJveC1pbnNpZGUgLmltYm94IHsgICAgICAgLyogRm9yIGltYm94ZXMgaW5zaWRlIG90aGVyIHRlbXBsYXRlcy4gICovCi0gICAgbWFyZ2luOiA0cHg7Ci19Ci0gCi10YWJsZS5pbWJveC1ub3RpY2UgewotICAgIGJvcmRlcjogM3B4IHNvbGlkICMxZTkwZmY7ICAgIC8qIEJsdWUgKi8KLX0KLXRhYmxlLmltYm94LXNwZWVkeSB7Ci0gICAgYm9yZGVyOiAzcHggc29saWQgI2IyMjIyMjsgICAgLyogUmVkICovCi0gICAgYmFja2dyb3VuZDogI2ZlZTsgICAgICAgICAgICAgLyogUGluayAqLwotfQotdGFibGUuaW1ib3gtZGVsZXRlIHsKLSAgICBib3JkZXI6IDNweCBzb2xpZCAjYjIyMjIyOyAgICAvKiBSZWQgKi8KLX0KLXRhYmxlLmltYm94LWNvbnRlbnQgewotICAgIGJvcmRlcjogM3B4IHNvbGlkICNmMjg1MDA7ICAgIC8qIE9yYW5nZSAqLwotfQotdGFibGUuaW1ib3gtc3R5bGUgewotICAgIGJvcmRlcjogM3B4IHNvbGlkICNmNGM0MzA7ICAgIC8qIFllbGxvdyAqLwotfQotdGFibGUuaW1ib3gtbW92ZSB7Ci0gICAgYm9yZGVyOiAzcHggc29saWQgIzk5MzJjYzsgICAgLyogUHVycGxlICovCi19Ci10YWJsZS5pbWJveC1wcm90ZWN0aW9uIHsKLSAgICBib3JkZXI6IDNweCBzb2xpZCAjYmJhOyAgICAgICAvKiBHcmF5LWdvbGQgKi8KLX0KLXRhYmxlLmltYm94LWxpY2Vuc2UgewotICAgIGJvcmRlcjogM3B4IHNvbGlkICM4OGE7ICAgICAgIC8qIERhcmsgZ3JheSAqLwotICAgIGJhY2tncm91bmQ6ICNmN2Y4ZmY7ICAgICAgICAgIC8qIExpZ2h0IGdyYXkgKi8KLX0KLXRhYmxlLmltYm94LWZlYXR1cmVkIHsKLSAgICBib3JkZXI6IDNweCBzb2xpZCAjY2JhMTM1OyAgICAvKiBCcm93bi1nb2xkICovCi19Ci0gCi0vKiBDYXRlZ29yeSBtZXNzYWdlIGJveCBzdHlsZXMgKi8KLXRhYmxlLmNtYm94IHsKLSAgICBtYXJnaW46IDNweCAxMCU7Ci0gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOwotICAgIGJhY2tncm91bmQ6ICNERkU4RkY7ICAgIC8qIERlZmF1bHQgIm5vdGljZSIgYmx1ZSAqLwotfQotIAotdGFibGUuY21ib3gtbm90aWNlIHsKLSAgICBiYWNrZ3JvdW5kOiAjRDhFOEZGOyAgICAvKiBCbHVlICovCi19Ci10YWJsZS5jbWJveC1zcGVlZHkgewotICAgIG1hcmdpbi10b3A6IDRweDsKLSAgICBtYXJnaW4tYm90dG9tOiA0cHg7Ci0gICAgYm9yZGVyOiA0cHggc29saWQgI2IyMjIyMjsgICAgLyogUmVkICovCi0gICAgYmFja2dyb3VuZDogI0ZGREJEQjsgICAgICAgICAgLyogUGluayAqLwotfQotdGFibGUuY21ib3gtZGVsZXRlIHsKLSAgICBiYWNrZ3JvdW5kOiAjRkZEQkRCOyAgICAvKiBSZWQgKi8KLX0KLXRhYmxlLmNtYm94LWNvbnRlbnQgewotICAgIGJhY2tncm91bmQ6ICNGRkU3Q0U7ICAgIC8qIE9yYW5nZSAqLwotfQotdGFibGUuY21ib3gtc3R5bGUgewotICAgIGJhY2tncm91bmQ6ICNGRkY5REI7ICAgIC8qIFllbGxvdyAqLwotfQotdGFibGUuY21ib3gtbW92ZSB7Ci0gICAgYmFja2dyb3VuZDogI0U0RDhGRjsgICAgLyogUHVycGxlICovCi19Ci10YWJsZS5jbWJveC1wcm90ZWN0aW9uIHsKLSAgICBiYWNrZ3JvdW5kOiAjRUZFRkUxOyAgICAvKiBHcmF5LWdvbGQgKi8KLX0KLSAKLS8qIE90aGVyIHBhZ2VzIG1lc3NhZ2UgYm94IHN0eWxlcyAqLwotdGFibGUub21ib3ggewotICAgIG1hcmdpbjogNHB4IDEwJTsKLSAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7ICAgICAgIC8qIERlZmF1bHQgIm5vdGljZSIgZ3JheSAqLwotICAgIGJhY2tncm91bmQ6ICNmOWY5Zjk7Ci19Ci0gCi10YWJsZS5vbWJveC1ub3RpY2UgewotICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7ICAgICAgIC8qIEdyYXkgKi8KLX0KLXRhYmxlLm9tYm94LXNwZWVkeSB7Ci0gICAgYm9yZGVyOiAycHggc29saWQgI2IyMjIyMjsgICAgLyogUmVkICovCi0gICAgYmFja2dyb3VuZDogI2ZlZTsgICAgICAgICAgICAgLyogUGluayAqLwotfQotdGFibGUub21ib3gtZGVsZXRlIHsKLSAgICBib3JkZXI6IDJweCBzb2xpZCAjYjIyMjIyOyAgICAvKiBSZWQgKi8KLX0KLXRhYmxlLm9tYm94LWNvbnRlbnQgewotICAgIGJvcmRlcjogMXB4IHNvbGlkICNmMjg1MDA7ICAgIC8qIE9yYW5nZSAqLwotfQotdGFibGUub21ib3gtc3R5bGUgewotICAgIGJvcmRlcjogMXB4IHNvbGlkICNmNGM0MzA7ICAgIC8qIFllbGxvdyAqLwotfQotdGFibGUub21ib3gtbW92ZSB7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgIzk5MzJjYzsgICAgLyogUHVycGxlICovCi19Ci10YWJsZS5vbWJveC1wcm90ZWN0aW9uIHsKLSAgICBib3JkZXI6IDJweCBzb2xpZCAjYmJhOyAgICAgICAvKiBHcmF5LWdvbGQgKi8KLX0KLSAKLS8qIFRhbGsgcGFnZSBtZXNzYWdlIGJveCBzdHlsZXMgKi8KLXRhYmxlLnRtYm94IHsKLSAgICBtYXJnaW46IDRweCAxMCU7Ci0gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMDkwOyAgICAvKiBEZWZhdWx0ICJub3RpY2UiIGdyYXktYnJvd24gKi8KLSAgICBiYWNrZ3JvdW5kOiAjZjhlYWJhOwotfQotLm1lZGlhd2lraSAubWJveC1pbnNpZGUgLnRtYm94IHsgLyogRm9yIHRtYm94ZXMgaW5zaWRlIG90aGVyIHRlbXBsYXRlcy4gVGhlICJtZWRpYXdpa2kiIGNsYXNzIGVuc3VyZXMgdGhhdCAqLwotICAgIG1hcmdpbjogMnB4IDA7ICAgICAgICAgICAgICAgLyogdGhpcyBkZWNsYXJhdGlvbiBvdmVycmlkZXMgb3RoZXIgc3R5bGVzIChpbmNsdWRpbmcgbWJveC1zbWFsbCBhYm92ZSkgICAqLwotICAgIHdpZHRoOiAxMDAlOyAgICAgICAgICAgICAgICAgLyogRm9yIFNhZmFyaSBhbmQgT3BlcmEgKi8KLX0KLS5tYm94LWluc2lkZSAudG1ib3gubWJveC1zbWFsbCB7IC8qICJzbWFsbCIgdG1ib3hlcyBzaG91bGQgbm90IGJlIHNtYWxsIHdoZW4gICovCi0gICAgbGluZS1oZWlnaHQ6IDEuNWVtOyAgICAgICAgICAvKiBhbHNvICJuZXN0ZWQiLCBzbyByZXNldCBzdHlsZXMgdGhhdCBhcmUgICAqLwotICAgIGZvbnQtc2l6ZTogMTAwJTsgICAgICAgICAgICAgLyogc2V0IGluICJtYm94LXNtYWxsIiBhYm92ZS4gICAgICAgICAgICAgICAgKi8KLX0KLSAKLXRhYmxlLnRtYm94LXNwZWVkeSB7Ci0gICAgYm9yZGVyOiAycHggc29saWQgI2IyMjIyMjsgICAgLyogUmVkICovCi0gICAgYmFja2dyb3VuZDogI2ZlZTsgICAgICAgICAgICAgLyogUGluayAqLwotfQotdGFibGUudG1ib3gtZGVsZXRlIHsKLSAgICBib3JkZXI6IDJweCBzb2xpZCAjYjIyMjIyOyAgICAvKiBSZWQgKi8KLX0KLXRhYmxlLnRtYm94LWNvbnRlbnQgewotICAgIGJvcmRlcjogMnB4IHNvbGlkICNmMjg1MDA7ICAgIC8qIE9yYW5nZSAqLwotfQotdGFibGUudG1ib3gtc3R5bGUgewotICAgIGJvcmRlcjogMnB4IHNvbGlkICNmNGM0MzA7ICAgIC8qIFllbGxvdyAqLwotfQotdGFibGUudG1ib3gtbW92ZSB7Ci0gICAgYm9yZGVyOiAycHggc29saWQgIzk5MzJjYzsgICAgLyogUHVycGxlICovCi19Ci10YWJsZS50bWJveC1wcm90ZWN0aW9uLAotdGFibGUudG1ib3gtbm90aWNlIHsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMDkwOyAgICAvKiBHcmF5LWJyb3duICovCi19Ci0gCi0vKiBEaXNhbWJpZyBhbmQgc2V0IGluZGV4IGJveCBzdHlsZXMgKi8KLXRhYmxlLmRtYm94IHsKLSAgICBjbGVhcjogYm90aDsKLSAgICBtYXJnaW46IDAuOWVtIDFlbTsKLSAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsKLSAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYzsKLSAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKLX0KLSAKLS8qIEZvb3RlciBhbmQgaGVhZGVyIG1lc3NhZ2UgYm94IHN0eWxlcyAqLwotdGFibGUuZm1ib3ggewotICAgIGNsZWFyOiBib3RoOwotICAgIG1hcmdpbjogMC4yZW0gMDsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOwotICAgIGJhY2tncm91bmQ6ICNmOWY5Zjk7ICAgICAvKiBEZWZhdWx0ICJzeXN0ZW0iIGdyYXkgKi8KLX0KLXRhYmxlLmZtYm94LXN5c3RlbSB7Ci0gICAgYmFja2dyb3VuZDogI2Y5ZjlmOTsKLX0KLXRhYmxlLmZtYm94LXdhcm5pbmcgewotICAgIGJvcmRlcjogMXB4IHNvbGlkICNiYjcwNzA7ICAvKiBEYXJrIHBpbmsgKi8KLSAgICBiYWNrZ3JvdW5kOiAjZmZkYmRiOyAgICAgICAgLyogUGluayAqLwotfQotdGFibGUuZm1ib3gtZWRpdG5vdGljZSB7Ci0gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ci19Ci0vKiBEaXYgYmFzZWQgIndhcm5pbmciIHN0eWxlIGZtYm94IG1lc3NhZ2VzLiAqLwotZGl2Lm13LXdhcm5pbmctd2l0aC1sb2dleGNlcnB0LAotZGl2Lm13LWxhZy13YXJuLWhpZ2gsCi1kaXYubXctY2FzY2FkZXByb3RlY3RlZHdhcm5pbmcsCi1kaXYjbXctcHJvdGVjdC1jYXNjYWRlb24gewotICAgIGNsZWFyOiBib3RoOwotICAgIG1hcmdpbjogMC4yZW0gMDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjYmI3MDcwOwotICAgIGJhY2tncm91bmQ6ICNmZmRiZGI7Ci0gICAgcGFkZGluZzogMC4yNWVtIDAuOWVtOwotfQotLyogRGl2IGJhc2VkICJzeXN0ZW0iIHN0eWxlIGZtYm94IG1lc3NhZ2VzLgotICAgVXNlZCBpbiBbW01lZGlhV2lraTpSZWFkb25seSBsYWddXS4gKi8KLWRpdi5tdy1sYWctd2Fybi1ub3JtYWwsCi1kaXYuZm1ib3gtc3lzdGVtIHsKLSAgICBjbGVhcjogYm90aDsKLSAgICBtYXJnaW46IDAuMmVtIDA7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKLSAgICBiYWNrZ3JvdW5kOiAjZjlmOWY5OwotICAgIHBhZGRpbmc6IDAuMjVlbSAwLjllbTsKLX0KLSAKLS8qIFRoZXNlIG1ib3gtc21hbGwgY2xhc3NlcyBtdXN0IGJlIHBsYWNlZCBhZnRlciBhbGwgb3RoZXIKLSAgIGFtYm94L3RtYm94L29tYm94IGV0YyBjbGFzc2VzLiAiYm9keS5tZWRpYXdpa2kiIGlzIHNvCi0gICB0aGV5IG92ZXJyaWRlICJ0YWJsZS5hbWJveCArIHRhYmxlLmFtYm94IiBhYm92ZS4gKi8KLWJvZHkubWVkaWF3aWtpIHRhYmxlLm1ib3gtc21hbGwgeyAgIC8qIEZvciB0aGUgInNtYWxsPXllcyIgb3B0aW9uLiAqLwotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBjbGVhcjogcmlnaHQ7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIGZsb2F0OiByaWdodDsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgbWFyZ2luOiA0cHggMCA0cHggMWVtOwotICAgIHdpZHRoOiAyMzhweDsKLSAgICBmb250LXNpemU6IDg4JTsKLSAgICBsaW5lLWhlaWdodDogMS4yNWVtOwotfQotYm9keS5tZWRpYXdpa2kgdGFibGUubWJveC1zbWFsbC1sZWZ0IHsgICAvKiBGb3IgdGhlICJzbWFsbD1sZWZ0IiBvcHRpb24uICovCi0gICAgLyogQG5vZmxpcCAqLwotICAgIG1hcmdpbjogNHB4IDFlbSA0cHggMDsKLSAgICB3aWR0aDogMjM4cHg7Ci0gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKLSAgICBmb250LXNpemU6IDg4JTsKLSAgICBsaW5lLWhlaWdodDogMS4yNWVtOwotfQotIAotLyogU3R5bGUgZm9yIGNvbXBhY3QgYW1ib3ggKi8KLS8qIEhpZGUgdGhlIGltYWdlcyAqLwotLmNvbXBhY3QtYW1ib3ggdGFibGUgLm1ib3gtaW1hZ2UsCi0uY29tcGFjdC1hbWJveCB0YWJsZSAubWJveC1pbWFnZXJpZ2h0LAotLmNvbXBhY3QtYW1ib3ggdGFibGUgLm1ib3gtZW1wdHktY2VsbCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLS8qIFJlbW92ZSBib3JkZXJzLCBiYWNrZ3JvdW5kcywgcGFkZGluZywgZXRjLiAqLwotLmNvbXBhY3QtYW1ib3ggdGFibGUuYW1ib3ggewotICAgIGJvcmRlcjogbm9uZTsKLSAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwotICAgIG1hcmdpbjogMCAwIDAgMS42ZW0gIWltcG9ydGFudDsKLSAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7Ci0gICAgd2lkdGg6IGF1dG87Ci0gICAgZGlzcGxheTogYmxvY2s7Ci19Ci1ib2R5Lm1lZGlhd2lraSAuY29tcGFjdC1hbWJveCB0YWJsZS5tYm94LXNtYWxsLWxlZnQgewotICAgIGZvbnQtc2l6ZTogMTAwJTsKLSAgICB3aWR0aDogYXV0bzsKLSAgICBtYXJnaW46IDA7Ci19Ci0vKiBTdHlsZSB0aGUgdGV4dCBjZWxsIGFzIGEgbGlzdCBpdGVtIGFuZCByZW1vdmUgaXRzIHBhZGRpbmcgKi8KLS5jb21wYWN0LWFtYm94IHRhYmxlIC5tYm94LXRleHQgewotICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKLSAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKLX0KLS5jb21wYWN0LWFtYm94IHRhYmxlIC5tYm94LXRleHQtc3BhbiB7Ci0gICAgZGlzcGxheTogbGlzdC1pdGVtOwotICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKLSAgICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTsKLSAgICBsaXN0LXN0eWxlLWltYWdlOiB1cmwoLy9iaXRzLndpa2ltZWRpYS5vcmcvc2tpbnMvY29tbW9uL2ltYWdlcy9idWxsZXQuZ2lmKTsKLX0KLS5za2luLXZlY3RvciAuY29tcGFjdC1hbWJveCB0YWJsZSAubWJveC10ZXh0LXNwYW4gewotICAgIGxpc3Qtc3R5bGUtdHlwZTogY2lyY2xlOwotICAgIGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCgvL2JpdHMud2lraW1lZGlhLm9yZy9za2lucy92ZWN0b3IvaW1hZ2VzL2J1bGxldC1pY29uLnBuZykKLX0KLS8qIEFsbG93IGZvciBoaWRpbmcgdGV4dCBpbiBjb21wYWN0IGZvcm0gKi8KLS5jb21wYWN0LWFtYm94IC5oaWRlLXdoZW4tY29tcGFjdCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLSAKLS8qIFJlbW92ZSBkZWZhdWx0IHN0eWxlcyBmb3IgW1tNZWRpYVdpa2k6Tm9hcnRpY2xldGV4dF1dLiAqLwotZGl2Lm5vYXJ0aWNsZXRleHQgewotICAgIGJvcmRlcjogbm9uZTsKLSAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKLSAgICBwYWRkaW5nOiAwOwotfQotIAotLyogSGlkZSAoZm9ybWF0dGluZykgZWxlbWVudHMgZnJvbSBzY3JlZW4sIGJ1dCBub3QgZnJvbSBzY3JlZW5yZWFkZXJzICovCi0udmlzdWFsaGlkZSB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGxlZnQ6IC0xMDAwMHB4OwotICAgIHRvcDogYXV0bzsKLSAgICB3aWR0aDogMXB4OwotICAgIGhlaWdodDogMXB4OwotICAgIG92ZXJmbG93OiBoaWRkZW47Ci19Ci0gCi0vKiBCb2xkIHNhdmUgYnV0dG9uICovCi0jd3BTYXZlIHsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLX0KLSAKLS8qIGNsYXNzIGhpZGRlblN0cnVjdHVyZSBpcyBkZWZ1bmN0LiBTZWUgW1tXaWtpcGVkaWE6aGlkZGVuU3RydWN0dXJlXV0gKi8KLS5oaWRkZW5TdHJ1Y3R1cmUgewotICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OwotICAgIGNvbG9yOiAjZjAwOwotICAgIGJhY2tncm91bmQtY29sb3I6ICMwZjA7Ci19Ci0gCi0vKiBzdXBwcmVzcyBtaXNzaW5nIGludGVyd2lraSBpbWFnZSBsaW5rcyB3aGVyZSAjaWZleGlzdCBjYW5ub3QKLSAgIGJlIHVzZWQgZHVlIHRvIGhpZ2ggbnVtYmVyIG9mIHJlcXVlc3RzIHNlZSAuaGlkZGVuLXJlZGxpbmsgb24KLSAgIFtbbTpNZWRpYVdpa2k6Q29tbW9uLmNzc11dICovCi0uY2hlY2staWNvbiBhLm5ldyB7Ci0gICAgZGlzcGxheTogbm9uZTsKLSAgICBzcGVhazogbm9uZTsKLX0KLSAKLS8qIFJlbW92ZXMgdW5kZXJsaW5lcyBmcm9tIGNlcnRhaW4gbGlua3MgKi8KLS5ub3VuZGVybGluZXMgYSwKLS5JUEEgYTpsaW5rLCAuSVBBIGE6dmlzaXRlZCB7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7Ci19Ci0gCi0vKiBTdGFuZGFyZCBOYXZpZ2F0aW9uc2xlaXN0ZW4sIGFrYSBib3ggaGlkaW5nIHRoaW5neQotICAgZnJvbSAuZGUuICBEb2N1bWVudGF0aW9uIGF0IFtbV2lraXBlZGlhOk5hdkZyYW1lXV0uICovCi1kaXYuTmF2RnJhbWUgewotICAgIG1hcmdpbjogMDsKLSAgICBwYWRkaW5nOiA0cHg7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKLSAgICBmb250LXNpemU6IDk1JTsKLX0KLWRpdi5OYXZGcmFtZSArIGRpdi5OYXZGcmFtZSB7Ci0gICAgYm9yZGVyLXRvcC1zdHlsZTogbm9uZTsKLSAgICBib3JkZXItdG9wLXN0eWxlOiBoaWRkZW47Ci19Ci1kaXYuTmF2UGljIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwotICAgIG1hcmdpbjogMDsKLSAgICBwYWRkaW5nOiAycHg7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIGZsb2F0OiBsZWZ0OwotfQotZGl2Lk5hdkZyYW1lIGRpdi5OYXZIZWFkIHsKLSAgICBoZWlnaHQ6IDEuNmVtOwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2Y7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotfQotZGl2Lk5hdkZyYW1lIHAsCi1kaXYuTmF2RnJhbWUgZGl2Lk5hdkNvbnRlbnQsCi1kaXYuTmF2RnJhbWUgZGl2Lk5hdkNvbnRlbnQgcCB7Ci0gICAgZm9udC1zaXplOiAxMDAlOwotfQotZGl2Lk5hdkVuZCB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci0gICAgbGluZS1oZWlnaHQ6IDFweDsKLSAgICBjbGVhcjogYm90aDsKLX0KLWEuTmF2VG9nZ2xlIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIC8qIEBub2ZsaXAgKi8KLSAgICByaWdodDogM3B4OwotICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgZm9udC1zaXplOiA5MCU7Ci19Ci0gCi0vKiBIYXRub3RlcyBhbmQgZGlzYW1iaWd1YXRpb24gbm90aWNlcyAqLwotLnJlbGxpbmssCi0uZGFibGluayB7Ci0gICAgZm9udC1zdHlsZTogaXRhbGljOwotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBwYWRkaW5nLWxlZnQ6IDEuNmVtOwotICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwotfQotLnJlbGxpbmsgaSwKLS5kYWJsaW5rIGkgewotICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKLX0KLSAKLS8qIEFsbG93IHRyYW5zY2x1ZGVkIHBhZ2VzIHRvIGRpc3BsYXkgaW4gbGlzdHMgcmF0aGVyIHRoYW4gYSB0YWJsZS4KLSAgIENvbXBhdGlibGUgaW4gRmlyZWZveDsgaW5jb21wYXRpYmxlIGluIElFNi4gKi8KLS5saXN0aWZ5IHRkICAgIHsgZGlzcGxheTogbGlzdC1pdGVtOyB9Ci0ubGlzdGlmeSB0ciAgICB7IGRpc3BsYXk6IGJsb2NrOyB9Ci0ubGlzdGlmeSB0YWJsZSB7IGRpc3BsYXk6IGJsb2NrOyB9Ci0gCi0vKiBHZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMgZGVmYXVsdHMuIFNlZSBbW1RlbXBsYXRlOkNvb3JkL2xpbmtdXQotICAgZm9yIGhvdyB0aGVzZSBhcmUgdXNlZC4gVGhlIGNsYXNzZXMgImdlbyIsICJsb25naXR1ZGUiLCBhbmQKLSAgICJsYXRpdHVkZSIgYXJlIHVzZWQgYnkgdGhlIFtbR2VvIG1pY3JvZm9ybWF0XV0uICovCi0uZ2VvLWRlZmF1bHQsIC5nZW8tZG1zLCAuZ2VvLWRlYyAgeyBkaXNwbGF5OiBpbmxpbmU7IH0KLS5nZW8tbm9uZGVmYXVsdCwgLmdlby1tdWx0aS1wdW5jdCB7IGRpc3BsYXk6IG5vbmU7IH0KLS5sb25naXR1ZGUsIC5sYXRpdHVkZSAgICAgICAgICAgICB7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH0KLSAKLS8qIFdoZW4gPGRpdiBjbGFzcz0ibm9udW10b2MiPiBpcyB1c2VkIG9uIHRoZSB0YWJsZSBvZiBjb250ZW50cywKLSAgIHRoZSBUb0Mgd2lsbCBkaXNwbGF5IHdpdGhvdXQgbnVtYmVycyAqLwotLm5vbnVtdG9jIC50b2NudW1iZXIgeyBkaXNwbGF5OiBub25lOyB9Ci0ubm9udW10b2MgI3RvYyB1bCwKLS5ub251bXRvYyAudG9jIHVsIHsKLSAgICBsaW5lLWhlaWdodDogMS41ZW07Ci0gICAgbGlzdC1zdHlsZTogbm9uZSBub25lOwotICAgIG1hcmdpbjogLjNlbSAwIDA7Ci0gICAgcGFkZGluZzogMDsKLX0KLS5ub251bXRvYyAjdG9jIHVsIHVsLAotLm5vbnVtdG9jIC50b2MgdWwgdWwgewotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBtYXJnaW46IDAgMCAwIDJlbTsKLX0KLSAKLS8qIEFsbG93IGxpbWl0aW5nIG9mIHdoaWNoIGhlYWRlciBsZXZlbHMgYXJlIHNob3duIGluIGEgVE9DOwotICAgPGRpdiBjbGFzcz0idG9jbGltaXQtMyI+LCBmb3IgaW5zdGFuY2UsIHdpbGwgbGltaXQgdG8KLSAgIHNob3dpbmcgPT1oZWFkaW5ncz09IGFuZCA9PT1oZWFkaW5ncz09PSBidXQgbm8gZnVydGhlcgotICAgKGFzIGxvbmcgYXMgdGhlcmUgYXJlIG5vID1oZWFkaW5ncz0gb24gdGhlIHBhZ2UsIHdoaWNoCi0gICB0aGVyZSBzaG91bGRuJ3QgYmUgYWNjb3JkaW5nIHRvIHRoZSBNb1MpLiAqLwotLnRvY2xpbWl0LTIgLnRvY2xldmVsLTEgdWwsCi0udG9jbGltaXQtMyAudG9jbGV2ZWwtMiB1bCwKLS50b2NsaW1pdC00IC50b2NsZXZlbC0zIHVsLAotLnRvY2xpbWl0LTUgLnRvY2xldmVsLTQgdWwsCi0udG9jbGltaXQtNiAudG9jbGV2ZWwtNSB1bCwKLS50b2NsaW1pdC03IC50b2NsZXZlbC02IHVsIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotIAotLyogU3R5bGluZyBmb3IgVGVtcGxhdGU6UXVvdGUgKi8KLWJsb2NrcXVvdGUudGVtcGxhdGVxdW90ZSB7Ci0gICAgIG1hcmdpbi10b3A6IDA7Ci19Ci1ibG9ja3F1b3RlLnRlbXBsYXRlcXVvdGUgZGl2LnRlbXBsYXRlcXVvdGVjaXRlIHsKLSAgICBsaW5lLWhlaWdodDogMWVtOwotICAgIC8qIEBub2ZsaXAgKi8KLSAgICB0ZXh0LWFsaWduOiBsZWZ0OwotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBwYWRkaW5nLWxlZnQ6IDJlbTsKLSAgICBtYXJnaW4tdG9wOiAwOwotfQotYmxvY2txdW90ZS50ZW1wbGF0ZXF1b3RlIGRpdi50ZW1wbGF0ZXF1b3RlY2l0ZSBjaXRlIHsKLSAgICBmb250LXNpemU6IDg1JTsKLX0KLSAKLS8qIFVzZXIgYmxvY2sgbWVzc2FnZXMgKi8KLWRpdi51c2VyLWJsb2NrIHsKLSAgICBwYWRkaW5nOiA1cHg7Ci0gICAgbWFyZ2luLWJvdHRvbTogMC41ZW07Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI0E5QTlBOTsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZFRkQ1OwotfQotIAotLyogUHJldmVudCBsaW5lIGJyZWFrcyBpbiBzaWxseSBwbGFjZXM6Ci0gICAxKSBXaGVyZSBkZXNpcmVkCi0gICAyKSBMaW5rcyB3aGVuIHdlIGRvbid0IHdhbnQgdGhlbSB0bwotICAgMykgQm9sZCAibGlua3MiIHRvIHRoZSBwYWdlIGl0c2VsZgotICAgNCkgUmVmIHRhZ3Mgd2l0aCBncm91cCBuYW1lcyA8cmVmIGdyb3VwPSJOb3RlIj4gLS0+ICJbTm90ZSAxXSIgKi8KLS5ub3dyYXAsCi0ubm93cmFwbGlua3MgYSwKLS5ub3dyYXBsaW5rcyAuc2VsZmxpbmssCi1zdXAucmVmZXJlbmNlIGEgewotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci19Ci0vKiBCdXQgYWxsb3cgd3JhcHBpbmcgd2hlcmUgZGVzaXJlZDogKi8KLS53cmFwLAotLndyYXBsaW5rcyBhIHsKLSAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwotfQotIAotLyogRm9yIHRlbXBsYXRlIGRvY3VtZW50YXRpb24gKi8KLS50ZW1wbGF0ZS1kb2N1bWVudGF0aW9uIHsKLSAgICBjbGVhcjogYm90aDsKLSAgICBtYXJnaW46IDFlbSAwIDAgMDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOwotICAgIGJhY2tncm91bmQtY29sb3I6ICNlY2ZjZjQ7Ci0gICAgcGFkZGluZzogMWVtOwotfQotIAotLyogSW5saW5lIGRpdnMgaW4gSW1hZ2VNYXBzIChjb2RlIGJvcnJvd2VkIGZyb20gZGUud2lraSkgKi8KLS5pbWFnZW1hcC1pbmxpbmUgZGl2IHsKLSAgICBkaXNwbGF5OiBpbmxpbmU7Ci19Ci0gCi0vKiBJbmNyZWFzZSB0aGUgaGVpZ2h0IG9mIHRoZSBpbWFnZSB1cGxvYWQgYm94ICovCi0jd3BVcGxvYWREZXNjcmlwdGlvbiB7Ci0gICAgaGVpZ2h0OiAxM2VtOwotfQotIAotLyogTWluaW11bSB0aHVtYiB3aWR0aCAqLwotLnRodW1iaW5uZXIgewotICAgIG1pbi13aWR0aDogMTAwcHg7Ci19Ci0gCi0vKiBNYWtlcyB0aGUgYmFja2dyb3VuZCBvZiBhIGZyYW1lZCBpbWFnZSB3aGl0ZSBpbnN0ZWFkIG9mIGdyYXkuCi0gICBPbmx5IHZpc2libGUgd2l0aCB0cmFuc3BhcmVudCBpbWFnZXMuICovCi1kaXYudGh1bWIgLnRodW1iaW1hZ2UgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7Ci19Ci0gCi0vKiBUaGUgYmFja2dyb3VuZHMgZm9yIGdhbGxlcmllcy4gKi8KLWRpdiNjb250ZW50IC5nYWxsZXJ5Ym94IGRpdi50aHVtYiB7Ci0gICAgLyogTGlnaHQgZ3JheSBwYWRkaW5nICovCi0gICAgYmFja2dyb3VuZC1jb2xvcjogI0Y5RjlGOTsKLX0KLS8qIFB1dCBhIGNoZXF1ZXJlZCBiYWNrZ3JvdW5kIGJlaGluZCBpbWFnZXMsIG9ubHkgdmlzaWJsZSBpZiB0aGV5IGhhdmUgdHJhbnNwYXJlbmN5LgotICAgJy5maWxlaGlzdG9yeSBhIGltZycgYW5kICcjZmlsZSBpbWc6aG92ZXInIGFyZSBoYW5kbGVkIGJ5IE1lZGlhV2lraSBjb3JlIChhcyBvZiAxLjE5KSAqLwotLmdhbGxlcnlib3ggLnRodW1iIGltZyB7Ci0gICAgYmFja2dyb3VuZDogI2ZmZiB1cmwoLy9iaXRzLndpa2ltZWRpYS5vcmcvc2tpbnMvY29tbW9uL2ltYWdlcy9DaGVja2VyLTE2eDE2LnBuZykgcmVwZWF0OwotfQotLyogQnV0IG5vdCBvbiBhcnRpY2xlcywgdXNlciBwYWdlcywgcG9ydGFscyBvciB3aXRoIG9wdC1vdXQuICovCi0ubnMtMCAuZ2FsbGVyeWJveCAudGh1bWIgaW1nLAotLm5zLTIgLmdhbGxlcnlib3ggLnRodW1iIGltZywKLS5ucy0xMDAgLmdhbGxlcnlib3ggLnRodW1iIGltZywKLS5ub2NoZWNrZXIgLmdhbGxlcnlib3ggLnRodW1iIGltZyB7Ci0gICAgYmFja2dyb3VuZDogI2ZmZjsKLX0KLSAKLS8qIFByZXZlbnQgZmxvYXRpbmcgYm94ZXMgZnJvbSBvdmVybGFwcGluZyBhbnkgY2F0ZWdvcnkgbGlzdGluZ3MsCi0gICBmaWxlIGhpc3RvcmllcywgZWRpdCBwcmV2aWV3cywgYW5kIGVkaXQgW1Nob3cgY2hhbmdlc10gdmlld3MuICovCi0jbXctc3ViY2F0ZWdvcmllcywgI213LXBhZ2VzLCAjbXctY2F0ZWdvcnktbWVkaWEsCi0jZmlsZWhpc3RvcnksICN3aWtpUHJldmlldywgI3dpa2lEaWZmIHsKLSAgICBjbGVhcjogYm90aDsKLX0KLSAKLWJvZHkucnRsICNtdy1hcnRpY2xlZmVlZGJhY2t2NSwgYm9keS5ydGwgI213LWFydGljbGVmZWVkYmFjayB7Ci0gICAgZGlzcGxheTogYmxvY2s7ICAgLyogT3ZlcnJpZGUgaW5saW5lIGJsb2NrIG1vZGUgKi8KLSAgICBtYXJnaW4tYm90dG9tOiAxZW07Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIGNsZWFyOiByaWdodDsgICAgIC8qIENsZWFyIGFueSBpbmZvIGJveGVzIHRoYXQgc3RpY2sgb3V0ICovCi0gICAgLyogQG5vZmxpcCAqLwotICAgIGZsb2F0OiByaWdodDsgICAgIC8qIFByZXZlbnRzIG1hcmdpbiBjb2xsYXBzaW5nICovCi19Ci0gCi0vKiBTZWxlY3RpdmVseSBoaWRlIGhlYWRlcnMgaW4gV2lraVByb2plY3QgYmFubmVycyAqLwotLndwYiAud3BiLWhlYWRlciAgICAgICAgICAgICB7IGRpc3BsYXk6IG5vbmU7IH0KLS53cGJzLWlubmVyIC53cGIgLndwYi1oZWFkZXIgeyBkaXNwbGF5OiBibG9jazsgfSAgICAgLyogZm9yIElFICovCi0ud3Bicy1pbm5lciAud3BiIC53cGItaGVhZGVyIHsgZGlzcGxheTogdGFibGUtcm93OyB9IC8qIGZvciByZWFsIGJyb3dzZXJzICovCi0ud3Bicy1pbm5lciAud3BiLW91dHNpZGUgICAgIHsgZGlzcGxheTogbm9uZTsgfSAgICAgIC8qIGhpZGUgdGhpbmdzIHRoYXQgc2hvdWxkIG9ubHkgZGlzcGxheSBvdXRzaWRlIHNoZWxscyAqLwotIAotLyogU3R5bGluZyBmb3IgQWJ1c2UgRmlsdGVyIHRhZ3MgKi8KLS5tdy10YWctbWFya2VycyB7Ci0gICAgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsKLSAgICBmb250LXN0eWxlOml0YWxpYzsKLSAgICBmb250LXNpemU6OTAlOwotfQotIAotLyogSGlkZSBzdHVmZiBtZWFudCBmb3IgYWNjb3VudHMgd2l0aCBzcGVjaWFsIHBlcm1pc3Npb25zLiBNYWRlIHZpc2libGUgYWdhaW4gaW4KLSAgIFtbTWVkaWFXaWtpOkdyb3VwLXN5c29wLmNzc11dLCBbW01lZGlhV2lraTpHcm91cC1hY2NvdW50Y3JlYXRvci5jc3NdXSwKLSAgIFtbTWVkaWFXaWtpOkdyb3VwLXRlbXBsYXRlZWRpdG9yLmNzc11dIGFuZCBbW01lZGlhd2lraTpHcm91cC1hdXRvY29uZmlybWVkLmNzc11dLiAqLwotLnN5c29wLXNob3csCi0uYWNjb3VudGNyZWF0b3Itc2hvdywKLS50ZW1wbGF0ZWVkaXRvci1zaG93LAotLmF1dG9jb25maXJtZWQtc2hvdyB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLSAKLS8qKgotICogSGlkZSB0aGUgcmVkbGluayBnZW5lcmF0ZWQgYnkge3tFZGl0bm90aWNlfX0sCi0gKiB0aGlzIG92ZXJyaWRlcyB0aGUgIi5zeXNvcC1zaG93IHsgZGlzcGxheTogbm9uZTsgfSIgYWJvdmUgdGhhdCBhcHBsaWVzCi0gKiB0byB0aGUgc2FtZSBsaW5rIGFzIHdlbGwuCi0gKi8KLS52ZS1pbml0LW13LXZpZXdQYWdlVGFyZ2V0LXRvb2xiYXItZWRpdE5vdGljZXMtbm90aWNlIC5lZGl0bm90aWNlLXJlZGxpbmsgewotICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKLX0KLSAKLS8qIFJlbW92ZSBidWxsZXRzIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGVkaXQgcGFnZSB3YXJuaW5ncyAqLwotdWwucGVybWlzc2lvbnMtZXJyb3JzID4gbGkgewotICAgIGxpc3Qtc3R5bGU6IG5vbmUgbm9uZTsKLX0KLXVsLnBlcm1pc3Npb25zLWVycm9ycyB7Ci0gICAgbWFyZ2luOiAwOwotfQotIAotLyogTm8gbGluZXdyYXAgb24gdGhlIGxhYmVscyBvZiB0aGUgbG9naW4vc2lnbnVwIHBhZ2UgKi8KLWJvZHkucGFnZS1TcGVjaWFsX1VzZXJMb2dpbiAubXctbGFiZWwgbGFiZWwsCi1ib2R5LnBhZ2UtU3BlY2lhbF9Vc2VyTG9naW5fc2lnbnVwIC5tdy1sYWJlbCBsYWJlbCB7Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLX0KLSAKLS8qIFBpZSBjaGFydCB0ZXN0OiBUcmFuc3BhcmVudCBib3JkZXJzICovCi0udHJhbnNib3JkZXIgewotICAgIGJvcmRlcjogc29saWQgdHJhbnNwYXJlbnQ7Ci19Ci0qIGh0bWwgLnRyYW5zYm9yZGVyIHsgIC8qIElFNiAqLwotICAgIGJvcmRlcjogc29saWQgIzAwMDAwMTsKLSAgICBmaWx0ZXI6IGNocm9tYShjb2xvcj0jMDAwMDAxKTsKLX0KLSAKLS8qIFN0eWxpbmcgZm9yIHVwZGF0ZWQgbWFya2VycyBvbiB3YXRjaGxpc3QsIGhpc3RvcnkgYW5kIHJlY2VudC9yZWxhdGVkIGNoYW5nZXMuCi0gICBCdWxsZXRzIGFyZSBoYW5kbGVkIGluIHNraW4tc3BlY2lmaWMgc3R5bGVzaGVldHMuICovCi0udXBkYXRlZG1hcmtlciB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci0gICAgY29sb3I6ICMwMDY0MDA7Ci19Ci1saS5tdy1jaGFuZ2VzbGlzdC1saW5lLXdhdGNoZWQgLm13LXRpdGxlLAotdGFibGUubXctY2hhbmdlc2xpc3QtbGluZS13YXRjaGVkIC5tdy10aXRsZSwKLXRhYmxlLm13LWVuaGFuY2VkLXdhdGNoIC5tdy1lbmhhbmNlZC1yY3RpbWUgewotICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci19Ci0gCi0vKiBBZGp1c3QgZm9udCBmb3IgaW5saW5lIEhUTUwgZ2VuZXJhdGVkIGZvcm11bGFlICovCi1zcGFuLnRleGh0bWwgewotICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgIk5pbWJ1cyBSb21hbiBObzkgTCIsIFRpbWVzLCBzZXJpZjsKLSAgICBmb250LXNpemU6IDExOCU7Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLX0KLXNwYW4udGV4aHRtbCBzcGFuLnRleGh0bWwgewotICAgIGZvbnQtc2l6ZTogMTAwJTsKLX0KLSAKLS8qIEZpeCBzbyA8c3ludGF4aGlnaGxpZ2h0PiB0YWdzIGFuZCAuY3NzIGFuZCAuanMgcGFnZXMgZ2V0IG5vcm1hbCB0ZXh0IHNpemUuCi0gICBbW0J1Z3ppbGxhOjI2MjA0XV0uIFNlZSBhbHNvIFtbV2lraXBlZGlhOlR5cG9ncmFwaHkjVGhlIG1vbm9zcGFjZSAnYnVnJ11dICovCi1kaXYubXctZ2VzaGkgZGl2LAotZGl2Lm13LWdlc2hpIGRpdiBwcmUsCi1zcGFuLm13LWdlc2hpLAotcHJlLnNvdXJjZS1jc3MsCi1wcmUuc291cmNlLWphdmFzY3JpcHQsCi1wcmUuc291cmNlLWx1YSB7Ci0gICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgQ291cmllciAhaW1wb3J0YW50OwotfQotIAotLyogRml4IHN0eWxpbmcgb2YgdHJhbnNjbHVkZWQgcHJlZmluZGV4IHRhYmxlcyAqLwotdGFibGUjbXctcHJlZml4aW5kZXgtbGlzdC10YWJsZSwKLXRhYmxlI213LXByZWZpeGluZGV4LW5hdi10YWJsZSB7Ci0gICAgd2lkdGg6IDk4JTsKLX0KLSAKLS8qIEZvciBwb3J0YWxzLCBhZGRlZCAyMDExLTEyLTA3IC1idgotICAgT24gd2lkZSBzY3JlZW5zLCBzaG93IHRoZXNlIGFzIHR3byBjb2x1bW5zCi0gICBPbiBuYXJyb3cgYW5kIG1vYmlsZSBzY3JlZW5zLCBsZXQgdGhlbSBjb2xsYXBzZSBpbnRvIGEgc2luZ2xlIGNvbHVtbiAqLwotLnBvcnRhbC1jb2x1bW4tbGVmdCB7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgd2lkdGg6IDUwJTsKLX0KLS5wb3J0YWwtY29sdW1uLXJpZ2h0IHsKLSAgICBmbG9hdDogcmlnaHQ7Ci0gICAgd2lkdGg6IDQ5JTsKLX0KLS5wb3J0YWwtY29sdW1uLWxlZnQtd2lkZSB7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgd2lkdGg6IDYwJTsKLX0KLS5wb3J0YWwtY29sdW1uLXJpZ2h0LW5hcnJvdyB7Ci0gICAgZmxvYXQ6IHJpZ2h0OwotICAgIHdpZHRoOiAzOSU7Ci19Ci0ucG9ydGFsLWNvbHVtbi1sZWZ0LWV4dHJhLXdpZGUgewotICAgIGZsb2F0OiBsZWZ0OwotICAgIHdpZHRoOiA3MCU7Ci19Ci0ucG9ydGFsLWNvbHVtbi1yaWdodC1leHRyYS1uYXJyb3cgewotICAgIGZsb2F0OiByaWdodDsKLSAgICB3aWR0aDogMjklOwotfQotQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA4MDBweCkgewotICAgIC8qIERlY291cGxlIHRoZSBjb2x1bW5zIG9uIG5hcnJvdyBzY3JlZW5zICovCi0gICAgLnBvcnRhbC1jb2x1bW4tbGVmdCwKLSAgICAucG9ydGFsLWNvbHVtbi1yaWdodCwKLSAgICAucG9ydGFsLWNvbHVtbi1sZWZ0LXdpZGUsCi0gICAgLnBvcnRhbC1jb2x1bW4tcmlnaHQtbmFycm93LAotICAgIC5wb3J0YWwtY29sdW1uLWxlZnQtZXh0cmEtd2lkZSwKLSAgICAucG9ydGFsLWNvbHVtbi1yaWdodC1leHRyYS1uYXJyb3cgewotICAgICAgICBmbG9hdDogaW5oZXJpdDsKLSAgICAgICAgd2lkdGg6IGluaGVyaXQ7Ci0gICAgfQotfQotIAotLyogRm9yIGFubm91bmNlbWVudHMgKi8KLSNib2R5Q29udGVudCAubGV0dGVyaGVhZCB7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJy8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvZS9lMC9UYW4tcGFnZS1jb3JuZXIucG5nJyk7Ci0gICAgYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OwotICAgIHBhZGRpbmc6IDJlbTsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmOWYyOwotfQotIAotLyogVHJlZSBzdHlsZSBsaXN0cyAqLwotLnRyZWV2aWV3IHVsIHsKLSAgICBwYWRkaW5nOiAwOwotICAgIG1hcmdpbjogMDsKLX0KLS50cmVldmlldyBsaSB7Ci0gICAgcGFkZGluZzogMDsKLSAgICBtYXJnaW46IDA7Ci0gICAgbGlzdC1zdHlsZS10eXBlOiBub25lOwotICAgIGxpc3Qtc3R5bGUtaW1hZ2U6IG5vbmU7Ci0gICAgem9vbTogMTsgLyogQkUgS0lORCBUTyBJRTYgKi87Ci19Ci0udHJlZXZpZXcgbGkgbGkgewotICAgIGJhY2tncm91bmQ6IHVybCgiLy91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy9mL2YyL1RyZWV2aWV3LWdyZXktbGluZS5wbmciKSBuby1yZXBlYXQgMCAtMjk4MXB4OwotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7Ci0gICAgdGV4dC1pbmRlbnQ6IDAuM2VtOwotfQotLnRyZWV2aWV3IGxpIGxpLmxhc3RsaW5lIHsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC01OTcxcHgKLX0KLS50cmVldmlldyBsaS5lbXB0eWxpbmUgPiB1bCB7Ci0gICAgLyogQG5vZmxpcCAqLwotICAgIG1hcmdpbi1sZWZ0OiAtMXB4OwotfQotLnRyZWV2aWV3IGxpLmVtcHR5bGluZSA+IHVsID4gbGk6Zmlyc3QtY2hpbGQgewotICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgOXB4Ci19Ci0gCi0vKiBoaWRkZW4gc29ydGtleSBmb3IgdGFibGVzb3J0ZXIgKi8KLXRkIC5zb3J0a2V5LAotdGggLnNvcnRrZXkgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgc3BlYWs6IG5vbmU7Ci19Ci0gCi0vKiBNYWtlIGl0IHBvc3NpYmxlIHRvIGhpZGUgY2hlY2tib3hlcyBpbiA8aW5wdXRib3g+ICovCi0uaW5wdXRib3gtaGlkZWNoZWNrYm94ZXMgZm9ybSAuaW5wdXRib3gtZWxlbWVudCB7Ci0gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwotfQotIAotLyogSGlkZSBjaGFyaW5zZXJ0IGJhc2UgZm9yIHRob3NlIG5vdCB1c2luZyB0aGUgZ2FkZ2V0ICovCi0jZWRpdHBhZ2Utc3BlY2lhbGNoYXJzIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotIAotLyogd29yay1hcm91bmQgZm9yIFtbYnVnemlsbGE6MjM5NjVdXSAoS2FsdHVyYSBhZHZlcnRpc2VtZW50KSAqLwotLmstcGxheWVyIC5rLWF0dHJpYnV0aW9uIHsKLSAgICB2aXNpYmlsaXR5OiBoaWRkZW47Ci19Ci0gCi0vKiBbW01lZGlhWmlsbGE6MzUzMzddXSAqLwotQG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDEuNSksIChtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86IDEuNSksIChtaW4tcmVzb2x1dGlvbjogMS41ZHBweCksIChtaW4tcmVzb2x1dGlvbjogMTQ0ZHBpKSB7Ci0gICAgICAgICNwLWxvZ28gYSB7Ci0gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCIvL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iL2IvYjMvV2lraXBlZGlhLWxvZ28tdjItZW4uc3ZnLzIwNHB4LVdpa2lwZWRpYS1sb2dvLXYyLWVuLnN2Zy5wbmciKSAhaW1wb3J0YW50OwotICAgICAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTM2cHggYXV0bzsKLSAgICAgICAgfQotfQotQG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCAobWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgKG1pbi1yZXNvbHV0aW9uOiAyZHBweCksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSB7Ci0gICAgICAgICNwLWxvZ28gYSB7Ci0gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCIvL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iL2IvYjMvV2lraXBlZGlhLWxvZ28tdjItZW4uc3ZnLzI3MHB4LVdpa2lwZWRpYS1sb2dvLXYyLWVuLnN2Zy5wbmciKSAhaW1wb3J0YW50OwotICAgICAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTM1cHggYXV0bzsKLSAgICAgICAgfQotfQotLyogRG8gbm90IHByaW50OgotICAgMTogV2hlbiBpbiBtYWluc3BhY2U6IEFydGljbGUgbWVzc2FnZSBib3hlcywKLSAgICAgIG5hdmJveGVzLCBzaXN0ZXIgcHJvamVjdCBib3hlcywgZGlzYW1iaWcgbGlua3MsCi0gICAgICBhbmQgaXRlbXMgbWFya2VkIGFzIG1ldGFkYXRhLgotICAgMjogc2VjdGlvbiBlZGl0IGxpbmtzLgotICAgMzogbmF2YmFyIGxpbmtzLgotICAgNDogU2hvdy9oaWRlIHRvZ2dsZXMgZm9yIGNvbGxhcHNpYmxlIGl0ZW1zLgotKi8KLS5ucy0wIC5hbWJveCwgCi0ubnMtMCAubmF2Ym94LCAKLS5ucy0wIC52ZXJ0aWNhbC1uYXZib3gsIAotLm5zLTAgLmluZm9ib3guc2lzdGVycHJvamVjdCwgCi0ubnMtMCAuZGFibGluaywgCi0ubnMtMCAubWV0YWRhdGEsCi0uZWRpdGxpbmssCi0ubmF2YmFyLAotYS5OYXZUb2dnbGUsIHNwYW4uY29sbGFwc2VCdXR0b24sIHNwYW4ubXctY29sbGFwc2libGUtdG9nZ2xlLAotdGggLnNvcnRrZXksIHRkIC5zb3J0a2V5IHsKLSAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Ci19Ci0gCi0vKiBBZGQgZm9ybWF0dGluZyB0byBtYWtlIHN1cmUgdGhhdCAiZXh0ZXJuYWwgcmVmZXJlbmNlcyIgZnJvbSB0ZW1wbGF0ZXMKLSAgIGxpa2UgW1tUZW1wbGF0ZTpSZWZdXSBkbyBub3QgZ2V0IFVSTCBleHBhbnNpb24sIG5vdCBldmVuIHdoZW4gcHJpbnRlZC4KLSAgIFRoZSBhbmNob3IgaXRzZWxmIGhhcyBjbGFzcyAiZXh0ZXJuYWwgYXV0b251bWJlciIgYW5kIHRoZSB1cmwgZXhwYW5zaW9uCi0gICBpcyBpbnNlcnRlZCB3aGVuIHByaW50aW5nIChzZWUgdGhlIGNvbW1vbiBwcmludGluZyBzdHlsZSBzaGVldCBhdAotICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvc2tpbnMtMS41L2NvbW1vbi9jb21tb25QcmludC5jc3MpIHVzaW5nIHRoZQotICAgIjphZnRlciIgcHNldWRvLWVsZW1lbnQgb2YgQ1NTLiBBbHNvIGhpZGUgaW4gPGNpdGU+IGVsZW1lbnRzLgotKi8KLSNjb250ZW50IGNpdGUgYS5leHRlcm5hbC50ZXh0OmFmdGVyLAotLm5vdXJsZXhwYW5zaW9uIGEuZXh0ZXJuYWwudGV4dDphZnRlciwKLS5ub3VybGV4cGFuc2lvbiBhLmV4dGVybmFsLmF1dG9udW1iZXI6YWZ0ZXIgewotICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKLX0KLSAKLS8qIFVuY29sbGFwc2UgY29sbGFwc2libGUgdGFibGVzL2RpdnMuCi0gICBUaGUgcHJvcGVyIHdheSB0byBkbyB0aGlzIGZvciB0YWJsZXMgaXMgdG8gdXNlIGRpc3BsYXk6dGFibGUtcm93LAotICAgYnV0IHRoaXMgaXMgbm90IHN1cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMsIHNvIHVzZSBkaXNwbGF5OmJsb2NrIGFzIGZhbGxiYWNrLgotKi8KLXRhYmxlLmNvbGxhcHNpYmxlIHRyLCBkaXYuTmF2UGljLCBkaXYuTmF2Q29udGVudCB7Ci0gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKLX0KLXRhYmxlLmNvbGxhcHNpYmxlIHRyIHsKLSAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDsKLX0KLSAKLS8qIE9uIHdlYnNpdGVzIHdpdGggc2l0ZVN1YiB2aXNpYmxlLCB0aGUgbWFyZ2luIG9uIHRoZSBmaXJzdEhlYWRpbmcgaXMgbm90IG5lZWRlZC4gKi8KLSNmaXJzdEhlYWRpbmcgewotICAgIG1hcmdpbjogMHB4OwotfQotIAotLyogV2UgZG9uJ3Qgd2FudCB2ZXJ5IGxvbmcgVVJMcyAodGhhdCBhcmUgYWRkZWQgdG8gdGhlIGNvbnRlbnQgaW4gcHJpbnQpIHRvIHdpZGVuIHRoZSBjYW52YXMgKi8KLSNjb250ZW50IGEuZXh0ZXJuYWwudGV4dDphZnRlciwKLSNjb250ZW50IGEuZXh0ZXJuYWwuYXV0b251bWJlcjphZnRlciB7Ci0Jd29yZC13cmFwOiBicmVhay13b3JkOwotfQotLyogRG9uJ3QgZGlzcGxheSBzb21lIHN0dWZmIG9uIHRoZSBtYWluIHBhZ2UgKi8KLWJvZHkucGFnZS1NYWluX1BhZ2UgI2RlbGV0ZWNvbmZpcm0sCi1ib2R5LnBhZ2UtTWFpbl9QYWdlICN0LWNpdGUsCi1ib2R5LnBhZ2UtTWFpbl9QYWdlICNmb290ZXItaW5mby1sYXN0bW9kLAotYm9keS5hY3Rpb24tdmlldy5wYWdlLU1haW5fUGFnZSAjc2l0ZVN1YiwKLWJvZHkuYWN0aW9uLXZpZXcucGFnZS1NYWluX1BhZ2UgI2NvbnRlbnRTdWIsCi1ib2R5LmFjdGlvbi12aWV3LnBhZ2UtTWFpbl9QYWdlIGgxLmZpcnN0SGVhZGluZyB7Ci0gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwotfQotIAotLyogUG9zaXRpb24gTWFpbiBQYWdlIHRvcCBiYW5uZXIgKi8KLWJvZHkucGFnZS1NYWluX1BhZ2UgI21wLXRvcGJhbm5lciB7Ci0gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKLX0KLSAKLS8qIFBvc2l0aW9uIGNvb3JkaW5hdGVzICovCi0jY29vcmRpbmF0ZXMgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDBlbTsKLSAgICByaWdodDogMGVtOwotICAgIGZsb2F0OiByaWdodDsKLSAgICBtYXJnaW46IDBlbTsKLSAgICBwYWRkaW5nOiAwZW07Ci0gICAgbGluZS1oZWlnaHQ6IDEuNWVtOwotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotICAgIHRleHQtaW5kZW50OiAwOwotICAgIGZvbnQtc2l6ZTogODUlOwotICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci19Ci0gCi0vKiBGb3IgcG9zaXRpb25pbmcgaWNvbnMgYXQgdG9wLXJpZ2h0LCB1c2VkIGluIFRlbXBsYXRlcwotICAgIlNwb2tlbiBBcnRpY2xlIiBhbmQgIkZlYXR1cmVkIEFydGljbGUiICovCi1kaXYudG9waWNvbiB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogLTJlbTsKLSAgICBtYXJnaW4tcmlnaHQ6IC0xMHB4OwotICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7Ci19Ci0gCi0vKiBGUiB0b3BpY29uIHBvc2l0aW9uICovCi1kaXYuZmxhZ2dlZHJldnNfc2hvcnQgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IC0zZW07Ci0gICAgcmlnaHQ6IDgwcHg7Ci0gICAgei1pbmRleDogMTsKLSAgICBtYXJnaW4tbGVmdDogMDsKLSAgICAvKiBCZWNhdXNlIHRoaXMgaXMgbm90IHlldCBhIHRvcGljb24sIHdlIGVtdWxhdGUgaXQncyBiZWhhdmlvciwKLSAgICAgICB0aGlzIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggZWRpdCBsZWFkIHNlY3Rpb24gZ2FkZ2V0LiAqLwotICAgIG1hcmdpbi1yaWdodDogLTEwcHg7Ci19Ci0gCi0vKiBPbiBydGwgaW50ZXJmYWNlcywgd2UgbmVlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMuCi0gICBJdCBpcyBjb250ZW50IGluY2x1ZGVkIChzbyBsdHIpLCBidXQgcG9zaXRpb25lZCBpbiBwYXJ0IG9mIHRoZSBydGwgaW50ZXJmYWNlLiAqLwotYm9keS5ydGwgI3Byb3RlY3RlZC1pY29uIHsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgbGVmdDogNTVweDsKLX0KLWJvZHkucnRsICNzcG9rZW4taWNvbiwKLWJvZHkucnRsICNjb21tb25zLWljb24gewotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBsZWZ0OiAzMHB4OwotfQotYm9keS5ydGwgI2ZlYXR1cmVkLXN0YXIgewotICAgIC8qIEBub2ZsaXAgKi8KLSAgICBsZWZ0OiAxMHB4OwotfQotIAotLyogTWVudSBvdmVyIEZSIGJveCAqLwotZGl2LnZlY3Rvck1lbnUgZGl2IHsKLSAgICB6LWluZGV4OiAyOwotfQotIAotLyogRGlzcGxheSAiRnJvbSBXaWtpcGVkaWEsIHRoZSBmcmVlIGVuY3ljbG9wZWRpYSIgKi8KLSNzaXRlU3ViIHsKLSAgICBkaXNwbGF5OiBpbmxpbmU7Ci0gICAgZm9udC1zaXplOiA5MiU7Ci19Ci0gCi0vKiBCdWxsZXRzIGZvciBHb29kIGFuZCBGZWF0dXJlZCBpbnRlcndpa2kgbGlua3MgKi8KLWxpLkdBIHsKLSAgICBsaXN0LXN0eWxlLWltYWdlOiB1cmwoLy91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy80LzQyL01vbm9ib29rLWJ1bGxldC1nYS5wbmcpOwotfQotbGkuRkEgewotICAgIGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCgvL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL2QvZDQvTW9ub2Jvb2stYnVsbGV0LXN0YXIucG5nKTsKLX0KLSAKLS8qIFN0eWxpbmcgZm9yIHVwZGF0ZWQgbWFya2VycyBvbiB3YXRjaGxpc3QsIGhpc3RvcnkgYW5kIHJlY2VudC9yZWxhdGVkIGNoYW5nZXMgKi8KLWxpLm13LWNoYW5nZXNsaXN0LWxpbmUtd2F0Y2hlZCwKLWxpLm13LWhpc3RvcnktbGluZS11cGRhdGVkIHsKLSAgICBsaXN0LXN0eWxlLWltYWdlOiB1cmwoLy91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy9jL2MyL0NoYW5nZWRCdWxsZXRWZWN0b3IucG5nKTsKLX0KLSAKLS8qIEJsdWUgaW5zdGVhZCBvZiB5ZWxsb3cgcGFkbG9jayBmb3Igc2VjdXJlIGxpbmtzLiAqLwotI2JvZHlDb250ZW50IGEuZXh0ZXJuYWxbaHJlZiBePSJodHRwczovLyJdLAotLmxpbmstaHR0cHMgewotICAgIGJhY2tncm91bmQ6IHVybCgvL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9lbi8wLzAwL0xvY2tfaWNvbl9ibHVlLmdpZikgY2VudGVyIHJpZ2h0IG5vLXJlcGVhdDsKLSAgICAvKiBAbm9mbGlwICovCi0gICAgcGFkZGluZy1yaWdodDogMTZweDsKLX0KLSAKLS8qIChTb2Z0KSByZWRpcmVjdCBzdHlsaW5nIChidWc6MjY1NDQpICovCi1kaXYucmVkaXJlY3RNc2cgaW1nIHsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207Ci19Ci0ucmVkaXJlY3RUZXh0IHsKLSAgICBmb250LXNpemU6IDE1MCU7Ci0gICAgbWFyZ2luOiA1cHg7Ci19CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vYmVuY2gvd2lraXBlZGlhLm1pbi5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vYmVuY2gvd2lraXBlZGlhLm1pbi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlY2ZjOTEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2JlbmNoL3dpa2lwZWRpYS5taW4uY3NzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotaHRtbCxib2R5e2hlaWdodDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MDtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxZW19Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOiNmM2YzZjM7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3BhZ2UtYmFzZS5wbmcpfWRpdiNjb250ZW50e21hcmdpbi1sZWZ0OjEwZW07cGFkZGluZzoxZW07YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL2JvcmRlci5wbmcpO2JhY2tncm91bmQtcG9zaXRpb246dG9wIGxlZnQ7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXk7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTtjb2xvcjpibGFjaztkaXJlY3Rpb246bHRyfSNtdy1wYWdlLWJhc2V7aGVpZ2h0OjVlbTtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy9wYWdlLWZhZGUucG5nKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmJvdHRvbSBsZWZ0O2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fSNtdy1oZWFkLWJhc2V7bWFyZ2luLXRvcDotNWVtO21hcmdpbi1sZWZ0OjEwZW07aGVpZ2h0OjVlbTtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvYm9yZGVyLnBuZyk7YmFja2dyb3VuZC1wb3NpdGlvbjpib3R0b20gbGVmdDtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH1kaXYjbXctaGVhZHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO3dpZHRoOjEwMCV9ZGl2I213LWhlYWQgaDV7bWFyZ2luOjA7cGFkZGluZzowfWRpdi5lbXB0eVBvcnRsZXR7ZGlzcGxheTpub25lfSNwLXBlcnNvbmFse3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0Oi43NWVtfSNwLXBlcnNvbmFsIGg1e2Rpc3BsYXk6bm9uZX0jcC1wZXJzb25hbCB1bHtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZy1sZWZ0OjEwZW19I3AtcGVyc29uYWwgbGl7bGluZS1oZWlnaHQ6MS4xMjVlbTtmbG9hdDpsZWZ0fSNwLXBlcnNvbmFsIGxpe21hcmdpbi1sZWZ0Oi43NWVtO21hcmdpbi10b3A6LjVlbTtmb250LXNpemU6Ljc1ZW07d2hpdGUtc3BhY2U6bm93cmFwfSNsZWZ0LW5hdmlnYXRpb257cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMGVtO3RvcDoyLjVlbX0jcmlnaHQtbmF2aWdhdGlvbntmbG9hdDpyaWdodDttYXJnaW4tdG9wOjIuNWVtfWRpdi52ZWN0b3JUYWJzIGg1LGRpdi52ZWN0b3JNZW51IGg1IHNwYW57ZGlzcGxheTpub25lfWRpdi52ZWN0b3JUYWJze2Zsb2F0OmxlZnQ7aGVpZ2h0OjIuNWVtfWRpdi52ZWN0b3JUYWJze2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWItYnJlYWsucG5nKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmJvdHRvbSBsZWZ0O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtwYWRkaW5nLWxlZnQ6MXB4fWRpdi52ZWN0b3JUYWJzIHVse2Zsb2F0OmxlZnR9ZGl2LnZlY3RvclRhYnMgdWx7aGVpZ2h0OjEwMCU7bGlzdC1zdHlsZTpub25lO21hcmdpbjowO3BhZGRpbmc6MH1kaXYudmVjdG9yVGFicyB1bCBsaXtmbG9hdDpsZWZ0fWRpdi52ZWN0b3JUYWJzIHVsIGxpe2xpbmUtaGVpZ2h0OjEuMTI1ZW07ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7bWFyZ2luOjA7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6I2YzZjNmMztiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiLW5vcm1hbC1mYWRlLnBuZyk7YmFja2dyb3VuZC1wb3NpdGlvbjpib3R0b20gbGVmdDtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDt3aGl0ZS1zcGFjZTpub3dyYXB9ZGl2LnZlY3RvclRhYnMgdWw+bGl7ZGlzcGxheTpibG9ja31kaXYudmVjdG9yVGFicyBsaS5zZWxlY3RlZHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiLWN1cnJlbnQtZmFkZS5wbmcpfWRpdi52ZWN0b3JUYWJzIGxpIGF7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEuOWVtO3BhZGRpbmctbGVmdDouNWVtO3BhZGRpbmctcmlnaHQ6LjVlbTtjb2xvcjojMDY0NWFkO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTouOGVtfWRpdi52ZWN0b3JUYWJzIGxpPmF7ZGlzcGxheTpibG9ja31kaXYudmVjdG9yVGFicyBsaS5pY29uIGF7YmFja2dyb3VuZC1wb3NpdGlvbjpib3R0b20gcmlnaHQ7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fWRpdi52ZWN0b3JUYWJzIHNwYW4gYXtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nLXRvcDoxLjI1ZW19ZGl2LnZlY3RvclRhYnMgc3Bhbj5he2Zsb2F0OmxlZnQ7ZGlzcGxheTpibG9ja31kaXYudmVjdG9yVGFicyBzcGFue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWItYnJlYWsucG5nKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmJvdHRvbSByaWdodDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9ZGl2LnZlY3RvclRhYnMgbGkuc2VsZWN0ZWQgYSxkaXYudmVjdG9yVGFicyBsaS5zZWxlY3RlZCBhOnZpc2l0ZWR7Y29sb3I6IzMzMzt0ZXh0LWRlY29yYXRpb246bm9uZX1kaXYudmVjdG9yVGFicyBsaS5uZXcgYSxkaXYudmVjdG9yVGFicyBsaS5uZXcgYTp2aXNpdGVke2NvbG9yOiNhNTU4NTh9ZGl2LnZlY3Rvck1lbnV7ZGlyZWN0aW9uOmx0cjtmbG9hdDpsZWZ0O2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy9hcnJvdy1kb3duLWljb24ucG5nKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgNjAlO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtjdXJzb3I6cG9pbnRlcn1kaXYudmVjdG9yTWVudUZvY3Vze2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy9hcnJvdy1kb3duLWZvY3VzLWljb24ucG5nKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgNjAlfWJvZHkucnRsIGRpdi52ZWN0b3JNZW51e2RpcmVjdGlvbjpydGx9ZGl2I213LWhlYWQgZGl2LnZlY3Rvck1lbnUgaDV7ZmxvYXQ6bGVmdDtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiLWJyZWFrLnBuZyk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fWRpdiNtdy1oZWFkIGRpdi52ZWN0b3JNZW51IGg1e2JhY2tncm91bmQtcG9zaXRpb246Ym90dG9tIGxlZnQ7bWFyZ2luLWxlZnQ6LTFweH1kaXYjbXctaGVhZCBkaXYudmVjdG9yTWVudT5oNXtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9ZGl2I213LWhlYWQgZGl2LnZlY3Rvck1lbnUgaDR7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6bGVmdDtmb250LXNpemU6LjhlbTtwYWRkaW5nLWxlZnQ6LjVlbTtwYWRkaW5nLXRvcDoxLjM3NWVtO2ZvbnQtd2VpZ2h0Om5vcm1hbDtib3JkZXI6bm9uZX1kaXYudmVjdG9yTWVudSBoNSBhe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjI0cHg7aGVpZ2h0OjIuNWVtO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy90YWItYnJlYWsucG5nKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9ZGl2LnZlY3Rvck1lbnUgaDUgYXtiYWNrZ3JvdW5kLXBvc2l0aW9uOmJvdHRvbSByaWdodH1kaXYudmVjdG9yTWVudSBoNT5he2Rpc3BsYXk6YmxvY2t9ZGl2LnZlY3Rvck1lbnUgZGl2Lm1lbnV7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lO2NsZWFyOmJvdGg7dGV4dC1hbGlnbjpsZWZ0fWJvZHkucnRsIGRpdi52ZWN0b3JNZW51IGRpdi5tZW51e21hcmdpbi1sZWZ0OjI0cHh9Ym9keS5ydGwgZGl2LnZlY3Rvck1lbnU+ZGl2Lm1lbnV7bWFyZ2luLWxlZnQ6YXV0b31ib2R5LnJ0bCBkaXYudmVjdG9yTWVudT5kaXYubWVudSx4Oi1tb3otYW55LWxpbmt7bWFyZ2luLWxlZnQ6MjNweH1kaXYudmVjdG9yTWVudTpob3ZlciBkaXYubWVudSxkaXYudmVjdG9yTWVudSBkaXYubWVudUZvcmNlU2hvd3tkaXNwbGF5OmJsb2NrfWRpdi52ZWN0b3JNZW51IHVse3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQtY29sb3I6d2hpdGU7Ym9yZGVyOnNvbGlkIDFweCBzaWx2ZXI7Ym9yZGVyLXRvcC13aWR0aDowO2xpc3Qtc3R5bGU6bm9uZTtsaXN0LXN0eWxlLWltYWdlOm5vbmU7bGlzdC1zdHlsZS10eXBlOm5vbmU7cGFkZGluZzowO21hcmdpbjowO21hcmdpbi1sZWZ0Oi0xcHg7dGV4dC1hbGlnbjpsZWZ0fWRpdi52ZWN0b3JNZW51IHVsLHg6LW1vei1hbnktbGlua3ttaW4td2lkdGg6NWVtfWRpdi52ZWN0b3JNZW51IHVsLHg6LW1vei1hbnktbGluayx4OmRlZmF1bHR7bWluLXdpZHRoOjB9ZGl2LnZlY3Rvck1lbnUgbGl7cGFkZGluZzowO21hcmdpbjowO3RleHQtYWxpZ246bGVmdDtsaW5lLWhlaWdodDoxZW19ZGl2LnZlY3Rvck1lbnUgbGkgYXtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOi41ZW07d2hpdGUtc3BhY2U6bm93cmFwO2NvbG9yOiMwNjQ1YWQ7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOi44ZW19ZGl2LnZlY3Rvck1lbnUgbGk+YXtkaXNwbGF5OmJsb2NrfWRpdi52ZWN0b3JNZW51IGxpLnNlbGVjdGVkIGEsZGl2LnZlY3Rvck1lbnUgbGkuc2VsZWN0ZWQgYTp2aXNpdGVke2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9I3Atc2VhcmNoIGg1e2Rpc3BsYXk6bm9uZX0jcC1zZWFyY2h7ZmxvYXQ6bGVmdH0jcC1zZWFyY2h7bWFyZ2luLXJpZ2h0Oi41ZW07bWFyZ2luLWxlZnQ6LjVlbX0jcC1zZWFyY2ggZm9ybSwjcC1zZWFyY2ggaW5wdXR7bWFyZ2luOjA7bWFyZ2luLXRvcDouNGVtfWRpdiNzaW1wbGVTZWFyY2h7ZGlzcGxheTpibG9jazt3aWR0aDoxNGVtO2hlaWdodDoxLjRlbTttYXJnaW4tdG9wOi42NWVtO3Bvc2l0aW9uOnJlbGF0aXZlO21pbi1oZWlnaHQ6MXB4O2JvcmRlcjpzb2xpZCAxcHggI0FBQTtjb2xvcjpibGFjaztiYWNrZ3JvdW5kLWNvbG9yOndoaXRlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy9zZWFyY2gtZmFkZS5wbmcpO2JhY2tncm91bmQtcG9zaXRpb246dG9wIGxlZnQ7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9ZGl2I3NpbXBsZVNlYXJjaCBsYWJlbHtmb250LXNpemU6MTNweDt0b3A6LjI1ZW07ZGlyZWN0aW9uOmx0cn1kaXYjc2ltcGxlU2VhcmNoIGlucHV0e2NvbG9yOmJsYWNrO2RpcmVjdGlvbjpsdHJ9ZGl2I3NpbXBsZVNlYXJjaCBpbnB1dDpmb2N1c3tvdXRsaW5lOm5vbmV9ZGl2I3NpbXBsZVNlYXJjaCBpbnB1dC5wbGFjZWhvbGRlcntjb2xvcjojOTk5fWRpdiNzaW1wbGVTZWFyY2ggaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX1kaXYjc2ltcGxlU2VhcmNoIGlucHV0I3NlYXJjaElucHV0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDo5MCU7bWFyZ2luOjA7cGFkZGluZzowO3BhZGRpbmctbGVmdDouMmVtO3BhZGRpbmctdG9wOi4yZW07cGFkZGluZy1ib3R0b206LjJlbTtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjEzcHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtkaXJlY3Rpb246bHRyfWRpdiNzaW1wbGVTZWFyY2ggYnV0dG9uI3NlYXJjaEJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMCU7cmlnaHQ6MDt0b3A6MDtwYWRkaW5nOjA7cGFkZGluZy10b3A6LjNlbTtwYWRkaW5nLWJvdHRvbTouMmVtO3BhZGRpbmctcmlnaHQ6LjRlbTttYXJnaW46MDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZX1kaXYjc2ltcGxlU2VhcmNoIGJ1dHRvbiNzZWFyY2hCdXR0b24gaW1ne2JvcmRlcjpub25lO21hcmdpbjowO21hcmdpbi10b3A6LTNweDtwYWRkaW5nOjB9ZGl2I3NpbXBsZVNlYXJjaCBidXR0b24jc2VhcmNoQnV0dG9uPmltZ3ttYXJnaW46MH1kaXYjbXctcGFuZWx7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2MHB4O3BhZGRpbmctdG9wOjFlbTt3aWR0aDoxMGVtO2xlZnQ6MH1kaXYjbXctcGFuZWwgZGl2LnBvcnRhbHtwYWRkaW5nLWJvdHRvbToxLjVlbTtkaXJlY3Rpb246bHRyfWRpdiNtdy1wYW5lbCBkaXYucG9ydGFsIGg1e2ZvbnQtd2VpZ2h0Om5vcm1hbDtjb2xvcjojNDQ0O3BhZGRpbmc6LjI1ZW07cGFkZGluZy10b3A6MDtwYWRkaW5nLWxlZnQ6MS43NWVtO2N1cnNvcjpkZWZhdWx0O2JvcmRlcjpub25lO2ZvbnQtc2l6ZTouNzVlbX1kaXYjbXctcGFuZWwgZGl2LnBvcnRhbCBkaXYuYm9keXttYXJnaW46MDtwYWRkaW5nLXRvcDouNWVtO21hcmdpbi1sZWZ0OjEuMjVlbTtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvcG9ydGFsLWJyZWFrLnBuZyk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246dG9wIGxlZnR9ZGl2I213LXBhbmVsIGRpdi5wb3J0YWwgZGl2LmJvZHkgdWx7bGlzdC1zdHlsZTpub25lO2xpc3Qtc3R5bGUtaW1hZ2U6bm9uZTtsaXN0LXN0eWxlLXR5cGU6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjB9ZGl2I213LXBhbmVsIGRpdi5wb3J0YWwgZGl2LmJvZHkgdWwgbGl7bGluZS1oZWlnaHQ6MS4xMjVlbTtwYWRkaW5nOjA7cGFkZGluZy1ib3R0b206LjVlbTttYXJnaW46MDtvdmVyZmxvdzpoaWRkZW47Zm9udC1zaXplOi43NWVtfWRpdiNtdy1wYW5lbCBkaXYucG9ydGFsIGRpdi5ib2R5IHVsIGxpIGF7Y29sb3I6IzA2NDVhZH1kaXYjbXctcGFuZWwgZGl2LnBvcnRhbCBkaXYuYm9keSB1bCBsaSBhOnZpc2l0ZWR7Y29sb3I6IzBiMDA4MH1kaXYjZm9vdGVye21hcmdpbi1sZWZ0OjEwZW07bWFyZ2luLXRvcDowO3BhZGRpbmc6Ljc1ZW07YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL2JvcmRlci5wbmcpO2JhY2tncm91bmQtcG9zaXRpb246dG9wIGxlZnQ7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZGlyZWN0aW9uOmx0cn1kaXYjZm9vdGVyIHVse2xpc3Qtc3R5bGU6bm9uZTtsaXN0LXN0eWxlLWltYWdlOm5vbmU7bGlzdC1zdHlsZS10eXBlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowfWRpdiNmb290ZXIgdWwgbGl7bWFyZ2luOjA7cGFkZGluZzowO3BhZGRpbmctdG9wOi41ZW07cGFkZGluZy1ib3R0b206LjVlbTtjb2xvcjojMzMzO2ZvbnQtc2l6ZTouN2VtfWRpdiNmb290ZXIgI2Zvb3Rlci1pY29uc3tmbG9hdDpyaWdodH1ib2R5Lmx0ciBkaXYjZm9vdGVyICNmb290ZXItcGxhY2Vze2Zsb2F0OmxlZnR9ZGl2I2Zvb3RlciAjZm9vdGVyLWluZm8gbGl7bGluZS1oZWlnaHQ6MS40ZW19ZGl2I2Zvb3RlciAjZm9vdGVyLWljb25zIGxpe2Zsb2F0OmxlZnQ7bWFyZ2luLWxlZnQ6LjVlbTtsaW5lLWhlaWdodDoyZW07dGV4dC1hbGlnbjpyaWdodH1kaXYjZm9vdGVyICNmb290ZXItcGxhY2VzIGxpe2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0OjFlbTtsaW5lLWhlaWdodDoyZW19I3AtbG9nb3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTE2MHB4O2xlZnQ6MDt3aWR0aDoxMGVtO2hlaWdodDoxNjBweH0jcC1sb2dvIGF7ZGlzcGxheTpibG9jazt3aWR0aDoxMGVtO2hlaWdodDoxNjBweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lfSNwcmVmdG9je3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdDtjbGVhcjpib3RoO21hcmdpbjowIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50O2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy9wcmVmZXJlbmNlcy1icmVhay5wbmcpO2JhY2tncm91bmQtcG9zaXRpb246Ym90dG9tIGxlZnQ7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fSNwcmVmdG9jIGxpe2Zsb2F0OmxlZnQ7bWFyZ2luOjA7cGFkZGluZzowO3BhZGRpbmctcmlnaHQ6MXB4O2hlaWdodDoyLjI1ZW07d2hpdGUtc3BhY2U6bm93cmFwO2xpc3Qtc3R5bGUtdHlwZTpub25lO2xpc3Qtc3R5bGUtaW1hZ2U6bm9uZTtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvcHJlZmVyZW5jZXMtYnJlYWsucG5nKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmJvdHRvbSByaWdodDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9I3ByZWZ0b2MgbGk6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MXB4fSNwcmVmdG9jIGEsI3ByZWZ0b2MgYTphY3RpdmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6IzA2NDVhZDtwYWRkaW5nOi41ZW07dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1pbWFnZTpub25lO2ZvbnQtc2l6ZTouOWVtfSNwcmVmdG9jIGE6aG92ZXIsI3ByZWZ0b2MgYTpmb2N1c3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfSNwcmVmdG9jIGxpLnNlbGVjdGVkIGF7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3ByZWZlcmVuY2VzLWZhZGUucG5nKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmJvdHRvbTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lfSNwcmVmZXJlbmNlc3tmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7bWFyZ2luOjA7bWFyZ2luLXRvcDotMnB4O2NsZWFyOmJvdGg7Ym9yZGVyOnNvbGlkIDFweCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvcHJlZmVyZW5jZXMtYmFzZS5wbmcpfSNwcmVmZXJlbmNlcyBmaWVsZHNldHtib3JkZXI6bm9uZTtib3JkZXItdG9wOnNvbGlkIDFweCAjY2NjfSNwcmVmZXJlbmNlcyBmaWVsZHNldC5wcmVmc2VjdGlvbntib3JkZXI6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjFlbX0jcHJlZmVyZW5jZXMgbGVnZW5ke2NvbG9yOiM2NjZ9I3ByZWZlcmVuY2VzIGZpZWxkc2V0LnByZWZzZWN0aW9uIGxlZ2VuZC5tYWluTGVnZW5ke2Rpc3BsYXk6bm9uZX0jcHJlZmVyZW5jZXMgdGR7cGFkZGluZy1sZWZ0Oi41ZW07cGFkZGluZy1yaWdodDouNWVtfSNwcmVmZXJlbmNlcyB0ZC5odG1sZm9ybS10aXB7Zm9udC1zaXplOngtc21hbGw7cGFkZGluZzouMmVtIDJlbTtjb2xvcjojNjY2fSNwcmVmZXJlbmNlcyBkaXYubXctcHJlZnMtYnV0dG9uc3twYWRkaW5nOjFlbX0jcHJlZmVyZW5jZXMgZGl2Lm13LXByZWZzLWJ1dHRvbnMgaW5wdXR7bWFyZ2luLXJpZ2h0Oi4yNWVtfWRpdiNjb250ZW50e2xpbmUtaGVpZ2h0OjEuNWVtfSNib2R5Q29udGVudHtmb250LXNpemU6LjhlbX0uZWRpdHNlY3Rpb257ZmxvYXQ6cmlnaHR9dWx7bGlzdC1zdHlsZS1pbWFnZTp1cmwoaW1hZ2VzL2J1bGxldC1pY29uLnBuZyl9cHJle2xpbmUtaGVpZ2h0OjEuM2VtfSNzaXRlTm90aWNle2ZvbnQtc2l6ZTouOGVtfSNmaXJzdEhlYWRpbmd7cGFkZGluZy10b3A6MDttYXJnaW4tdG9wOjA7cGFkZGluZy10b3A6MDtmb250LXNpemU6MS42ZW19ZGl2I2NvbnRlbnQgYS5leHRlcm5hbCxkaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgXj0iZ29waGVyOi8vIl17YmFja2dyb3VuZDp1cmwoaW1hZ2VzL2V4dGVybmFsLWxpbmstbHRyLWljb24ucG5nKSBjZW50ZXIgcmlnaHQgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MTNweH1kaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgXj0iaHR0cHM6Ly8iXSwubGluay1odHRwc3tiYWNrZ3JvdW5kOnVybChpbWFnZXMvbG9jay1pY29uLnBuZykgY2VudGVyIHJpZ2h0IG5vLXJlcGVhdDtwYWRkaW5nLXJpZ2h0OjEzcHh9ZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmIF49Im1haWx0bzoiXSwubGluay1tYWlsdG97YmFja2dyb3VuZDp1cmwoaW1hZ2VzL21haWwtaWNvbi5wbmcpIGNlbnRlciByaWdodCBuby1yZXBlYXQ7cGFkZGluZy1yaWdodDoxM3B4fWRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiBePSJuZXdzOiJde2JhY2tncm91bmQ6dXJsKGltYWdlcy9uZXdzLWljb24ucG5nKSBjZW50ZXIgcmlnaHQgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MTNweH1kaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgXj0iZnRwOi8vIl0sLmxpbmstZnRwe2JhY2tncm91bmQ6dXJsKGltYWdlcy9maWxlLWljb24ucG5nKSBjZW50ZXIgcmlnaHQgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MTNweH1kaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgXj0iaXJjOi8vIl0sZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmIF49ImlyY3M6Ly8iXSwubGluay1pcmN7YmFja2dyb3VuZDp1cmwoaW1hZ2VzL3RhbGstaWNvbi5wbmcpIGNlbnRlciByaWdodCBuby1yZXBlYXQ7cGFkZGluZy1yaWdodDoxM3B4fWRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIub2dnIl0sZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5PR0ciXSxkaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgJD0iLm1pZCJdLGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIuTUlEIl0sZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5taWRpIl0sZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5NSURJIl0sZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5tcDMiXSxkaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgJD0iLk1QMyJdLGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIud2F2Il0sZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5XQVYiXSxkaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgJD0iLndtYSJdLGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIuV01BIl0sLmxpbmstYXVkaW97YmFja2dyb3VuZDp1cmwoaW1hZ2VzL2F1ZGlvLWljb24ucG5nKSBjZW50ZXIgcmlnaHQgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MTNweH1kaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgJD0iLm9nbSJdLGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIuT0dNIl0sZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5hdmkiXSxkaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgJD0iLkFWSSJdLGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIubXBlZyJdLGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIuTVBFRyJdLGRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIubXBnIl0sZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5NUEciXSwubGluay12aWRlb3tiYWNrZ3JvdW5kOnVybChpbWFnZXMvdmlkZW8taWNvbi5wbmcpIGNlbnRlciByaWdodCBuby1yZXBlYXQ7cGFkZGluZy1yaWdodDoxM3B4fWRpdiNjb250ZW50IGEuZXh0ZXJuYWxbaHJlZiAkPSIucGRmIl0sZGl2I2NvbnRlbnQgYS5leHRlcm5hbFtocmVmICQ9Ii5QREYiXSxkaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgKj0iLnBkZiMiXSxkaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgKj0iLlBERiMiXSxkaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgKj0iLnBkZj8iXSxkaXYjY29udGVudCBhLmV4dGVybmFsW2hyZWYgKj0iLlBERj8iXSwubGluay1kb2N1bWVudHtiYWNrZ3JvdW5kOnVybChpbWFnZXMvZG9jdW1lbnQtaWNvbi5wbmcpIGNlbnRlciByaWdodCBuby1yZXBlYXQ7cGFkZGluZy1yaWdodDoxM3B4fSNwdC11c2VycGFnZSwjcHQtYW5vbnVzZXJwYWdlLCNwdC1sb2dpbntiYWNrZ3JvdW5kOnVybChpbWFnZXMvdXNlci1pY29uLnBuZykgbGVmdCB0b3Agbm8tcmVwZWF0O3BhZGRpbmctbGVmdDoxNXB4IWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lfS5yZWRpcmVjdFRleHR7Zm9udC1zaXplOjE0MCV9LnJlZGlyZWN0TXNnIGltZ3t2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX0jYm9keUNvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0jbXctanMtbWVzc2FnZXtmb250LXNpemU6LjhlbX1kaXYjYm9keUNvbnRlbnR7bGluZS1oZWlnaHQ6MS41ZW19I2NhLXVud2F0Y2guaWNvbiBhLCNjYS13YXRjaC5pY29uIGF7bWFyZ2luOjA7cGFkZGluZzowO291dGxpbmU6bm9uZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjI2cHg7cGFkZGluZy10b3A6My4xZW07bWFyZ2luLXRvcDowO21hcmdpbi10b3A6LTAuOGVtIWllO2hlaWdodDowO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvd2F0Y2gtaWNvbnMucG5nKX0jY2EtdW53YXRjaC5pY29uIGF7YmFja2dyb3VuZC1wb3NpdGlvbjotNDNweCA2MCV9I2NhLXdhdGNoLmljb24gYXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjVweCA2MCV9I2NhLXVud2F0Y2guaWNvbiBhOmhvdmVyLCNjYS11bndhdGNoLmljb24gYTpmb2N1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02N3B4IDYwJX0jY2Etd2F0Y2guaWNvbiBhOmhvdmVyLCNjYS13YXRjaC5pY29uIGE6Zm9jdXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTlweCA2MCV9I2NhLXVud2F0Y2guaWNvbiBhLmxvYWRpbmcsI2NhLXdhdGNoLmljb24gYS5sb2FkaW5ne2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy93YXRjaC1pY29uLWxvYWRpbmcuZ2lmKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjVweCA2MCV9I2NhLXVud2F0Y2guaWNvbiBhIHNwYW4sI2NhLXdhdGNoLmljb24gYSBzcGFue2Rpc3BsYXk6bm9uZX1kaXYudmVjdG9yVGFicyB1bHtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdGFiLWJyZWFrLnBuZyk7YmFja2dyb3VuZC1wb3NpdGlvbjpyaWdodCBib3R0b207YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS50aXBzeXtmb250LXNpemU6LjhlbX0ubXctY29udGVudC1sdHJ7ZGlyZWN0aW9uOmx0cn0ubXctY29udGVudC1ydGx7ZGlyZWN0aW9uOnJ0bH0uc2l0ZWRpci1sdHIgdGV4dGFyZWEsLnNpdGVkaXItbHRyIGlucHV0e2RpcmVjdGlvbjpsdHJ9LnNpdGVkaXItcnRsIHRleHRhcmVhLC5zaXRlZGlyLXJ0bCBpbnB1dHtkaXJlY3Rpb246cnRsfWlucHV0W3R5cGU9InN1Ym1pdCJdLGlucHV0W3R5cGU9ImJ1dHRvbiJdLGlucHV0W3R5cGU9InJlc2V0Il0saW5wdXRbdHlwZT0iZmlsZSJde2RpcmVjdGlvbjpsdHJ9dGV4dGFyZWFbZGlyPSJsdHIiXSxpbnB1dFtkaXI9Imx0ciJde2RpcmVjdGlvbjpsdHJ9dGV4dGFyZWFbZGlyPSJydGwiXSxpbnB1dFtkaXI9InJ0bCJde2RpcmVjdGlvbjpydGx9YWJicixhY3JvbnltLC5leHBsYWlue2JvcmRlci1ib3R0b206MXB4IGRvdHRlZDtjdXJzb3I6aGVscH0ubXctcGx1c21pbnVzLXBvc3tjb2xvcjojMDA2NDAwfS5tdy1wbHVzbWludXMtbmVne2NvbG9yOiM4YjAwMDB9Lm13LXBsdXNtaW51cy1udWxse2NvbG9yOiNhYWF9LmFsbHBhZ2VzcmVkaXJlY3QsLnJlZGlyZWN0LWluLWNhdGVnb3J5LC53YXRjaGxpc3RyZWRpcntmb250LXN0eWxlOml0YWxpY31zcGFuLmNvbW1lbnR7Zm9udC1zdHlsZTppdGFsaWN9c3Bhbi5jaGFuZ2VkYnl7Zm9udC1zaXplOjk1JX0udGV4dmN7ZGlyZWN0aW9uOmx0cjt1bmljb2RlLWJpZGk6ZW1iZWR9aW1nLnRleHt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9c3Bhbi50ZXhodG1se2ZvbnQtZmFtaWx5OnNlcmlmfSN3aWtpUHJldmlldy5vbnRvcHttYXJnaW4tYm90dG9tOjFlbX0jZWRpdGZvcm0sI3Rvb2xiYXIsI3dwVGV4dGJveDF7Y2xlYXI6Ym90aH0jdG9vbGJhciBpbWd7Y3Vyc29yOnBvaW50ZXJ9ZGl2I213LWpzLW1lc3NhZ2V7bWFyZ2luOjFlbSA1JTtwYWRkaW5nOi41ZW0gMi41JTtib3JkZXI6c29saWQgMXB4ICNkZGQ7YmFja2dyb3VuZC1jb2xvcjojZmNmY2ZjfS5lZGl0c2VjdGlvbntmbG9hdDpyaWdodDttYXJnaW4tbGVmdDo1cHh9Lm13LWNvbnRlbnQtbHRyIC5lZGl0c2VjdGlvbiwubXctY29udGVudC1ydGwgLm13LWNvbnRlbnQtbHRyIC5lZGl0c2VjdGlvbntmbG9hdDpyaWdodH0ubXctY29udGVudC1ydGwgLmVkaXRzZWN0aW9uLC5tdy1jb250ZW50LWx0ciAubXctY29udGVudC1ydGwgLmVkaXRzZWN0aW9ue2Zsb2F0OmxlZnR9ZGl2Lm13LWZpbGVwYWdlLXJlc29sdXRpb25pbmZve2ZvbnQtc2l6ZTpzbWFsbGVyfWgyI2ZpbGVoaXN0b3J5e2NsZWFyOmJvdGh9dGFibGUuZmlsZWhpc3RvcnkgdGgsdGFibGUuZmlsZWhpc3RvcnkgdGR7dmVydGljYWwtYWxpZ246dG9wfXRhYmxlLmZpbGVoaXN0b3J5IHRoe3RleHQtYWxpZ246bGVmdH10YWJsZS5maWxlaGlzdG9yeSB0ZC5tdy1pbWFnZXBhZ2UtZmlsZXNpemUsdGFibGUuZmlsZWhpc3RvcnkgdGgubXctaW1hZ2VwYWdlLWZpbGVzaXple3doaXRlLXNwYWNlOm5vd3JhcH10YWJsZS5maWxlaGlzdG9yeSB0ZC5maWxlaGlzdG9yeS1zZWxlY3RlZHtmb250LXdlaWdodDpib2xkfS5maWxlaGlzdG9yeSBhIGltZywjZmlsZSBpbWc6aG92ZXJ7YmFja2dyb3VuZDp3aGl0ZSB1cmwoaW1hZ2VzL0NoZWNrZXItMTZ4MTYucG5nKSByZXBlYXR9bGkgc3Bhbi5kZWxldGVkLHNwYW4uaGlzdG9yeS1kZWxldGVke3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7Y29sb3I6Izg4ODtmb250LXN0eWxlOml0YWxpY30ubm90LXBhdHJvbGxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmF9LnVucGF0cm9sbGVke2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6cmVkfWRpdi5wYXRyb2xsaW5re2ZvbnQtc2l6ZTo3NSU7dGV4dC1hbGlnbjpyaWdodH10ZC5tdy1sYWJlbHt0ZXh0LWFsaWduOnJpZ2h0fXRkLm13LWlucHV0e3RleHQtYWxpZ246bGVmdH10ZC5tdy1zdWJtaXR7dGV4dC1hbGlnbjpsZWZ0fXRkLm13LWxhYmVse3ZlcnRpY2FsLWFsaWduOnRvcH0ucHJlZnNlY3Rpb24gdGQubXctbGFiZWx7d2lkdGg6MjAlfS5wcmVmc2VjdGlvbiB0YWJsZXt3aWR0aDoxMDAlfXRkLm13LXN1Ym1pdHt3aGl0ZS1zcGFjZTpub3dyYXB9dGFibGUubXctaHRtbGZvcm0tbm9sYWJlbCB0ZC5tdy1sYWJlbHt3aWR0aDoxcHh9dHIubXctaHRtbGZvcm0tdmVydGljYWwtbGFiZWwgdGQubXctbGFiZWx7dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH0ubXctaHRtbGZvcm0taW52YWxpZC1pbnB1dCB0ZC5tdy1pbnB1dCBpbnB1dHtib3JkZXItY29sb3I6cmVkfS5tdy1odG1sZm9ybS1mbGF0bGlzdCBkaXYubXctaHRtbGZvcm0tZmxhdGxpc3QtaXRlbXtkaXNwbGF5OmlubGluZTttYXJnaW4tcmlnaHQ6MWVtO3doaXRlLXNwYWNlOm5vd3JhcH1pbnB1dCN3cFN1bW1hcnl7d2lkdGg6ODAlfS50aHVtYmNhcHRpb257dGV4dC1hbGlnbjpsZWZ0fS5tYWduaWZ5e2Zsb2F0OnJpZ2h0fSNjYXRsaW5rc3t0ZXh0LWFsaWduOmxlZnR9LmNhdGxpbmtzIHVse2Rpc3BsYXk6aW5saW5lO21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmU7bGlzdC1zdHlsZS10eXBlOm5vbmU7bGlzdC1zdHlsZS1pbWFnZTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZSFpZX0uY2F0bGlua3MgbGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MS4yNWVtO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjQUFBO21hcmdpbjouMTI1ZW0gMDtwYWRkaW5nOjAgLjVlbTt6b29tOjE7ZGlzcGxheTppbmxpbmUhaWV9LmNhdGxpbmtzIGxpOmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDouMjVlbTtib3JkZXItbGVmdDpub25lfS5tdy1oaWRkZW4tY2F0cy1oaWRkZW57ZGlzcGxheTpub25lfS5jYXRsaW5rcy1hbGxoaWRkZW57ZGlzcGxheTpub25lfXAubXctaXBiLWNvbnZlbmllbmNlbGlua3MscC5tdy1wcm90ZWN0LWVkaXRyZWFzb25zLHAubXctZmlsZWRlbGV0ZS1lZGl0cmVhc29ucyxwLm13LWRlbGV0ZS1lZGl0cmVhc29ucyxwLm13LXJldmRlbC1lZGl0cmVhc29uc3tmb250LXNpemU6OTAlO3RleHQtYWxpZ246cmlnaHR9Lm9zLXN1Z2dlc3R7b3ZlcmZsb3c6YXV0bztvdmVyZmxvdy14OmhpZGRlbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6I0FBQTtib3JkZXItd2lkdGg6MXB4O3otaW5kZXg6OTk7Zm9udC1zaXplOjk1JX10YWJsZS5vcy1zdWdnZXN0LXJlc3VsdHN7Zm9udC1zaXplOjk1JTtjdXJzb3I6cG9pbnRlcjtib3JkZXI6MDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7d2lkdGg6MTAwJX0ub3Mtc3VnZ2VzdC1yZXN1bHQsLm9zLXN1Z2dlc3QtcmVzdWx0LWhse3doaXRlLXNwYWNlOm5vd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlO2NvbG9yOmJsYWNrO3BhZGRpbmc6MnB4fS5vcy1zdWdnZXN0LXJlc3VsdC1obCwub3Mtc3VnZ2VzdC1yZXN1bHQtaGwtd2Via2l0e2JhY2tncm91bmQtY29sb3I6IzRDNTlBNjtjb2xvcjp3aGl0ZX0ub3Mtc3VnZ2VzdC10b2dnbGV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxZXg7Zm9udC1zaXplOjY1JX0ub3Mtc3VnZ2VzdC10b2dnbGUtZGVme3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtmb250LXNpemU6NjUlO3Zpc2liaWxpdHk6aGlkZGVufS5hdXRvY29tbWVudHtjb2xvcjpncmF5fSNwYWdlaGlzdG9yeSAuaGlzdG9yeS11c2Vye21hcmdpbi1sZWZ0Oi40ZW07bWFyZ2luLXJpZ2h0Oi4yZW19I3BhZ2VoaXN0b3J5IHNwYW4ubWlub3J7Zm9udC13ZWlnaHQ6Ym9sZH0jcGFnZWhpc3RvcnkgbGl7Ym9yZGVyOjFweCBzb2xpZCB3aGl0ZX0jcGFnZWhpc3RvcnkgbGkuc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggZGFzaGVkICNhYWF9Lm13LWhpc3RvcnktcmV2aXNpb25kZWxldGUtYnV0dG9uLCNtdy1maWxlZHVwbGljYXRlc2VhcmNoLWljb257ZmxvYXQ6cmlnaHR9Lm5ld3BhZ2UsLm1pbm9yZWRpdCwuYm90ZWRpdHtmb250LXdlaWdodDpib2xkfSNzaGFyZWQtaW1hZ2UtZHVwLCNzaGFyZWQtaW1hZ2UtY29uZmxpY3R7Zm9udC1zdHlsZTppdGFsaWN9ZGl2Lm13LXdhcm5pbmctd2l0aC1sb2dleGNlcnB0e3BhZGRpbmc6M3B4O21hcmdpbi1ib3R0b206M3B4O2JvcmRlcjoycHggc29saWQgIzJGNkZBQjtjbGVhcjpib3RofWRpdi5tdy13YXJuaW5nLXdpdGgtbG9nZXhjZXJwdCB1bCBsaXtmb250LXNpemU6OTAlfXNwYW4ubXctcmV2ZGVsdW5kZWwtbGluayxzdHJvbmcubXctcmV2ZGVsdW5kZWwtbGlua3tmb250LXNpemU6OTAlfXNwYW4ubXctcmV2ZGVsdW5kZWwtaGlkZGVuLGlucHV0Lm13LXJldmRlbHVuZGVsLWhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn10ZC5tdy1yZXZkZWwtY2hlY2tib3gsdGgubXctcmV2ZGVsLWNoZWNrYm94e3BhZGRpbmctcmlnaHQ6MTBweDt0ZXh0LWFsaWduOmNlbnRlcn1hLmZlZWRsaW5re2JhY2tncm91bmQ6dXJsKGltYWdlcy9mZWVkLWljb24ucG5nKSBjZW50ZXIgbGVmdCBuby1yZXBlYXQ7cGFkZGluZy1sZWZ0OjE2cHh9LnBsYWlubGlua3MgYXtiYWNrZ3JvdW5kOm5vbmUhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnR9LnJ0bCBhLmV4dGVybmFsLmZyZWUsLnJ0bCBhLmV4dGVybmFsLmF1dG9udW1iZXJ7ZGlyZWN0aW9uOmx0cjt1bmljb2RlLWJpZGk6ZW1iZWR9dGFibGUud2lraXRhYmxle21hcmdpbjoxZW0gMWVtIDFlbSAwO2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXI6MXB4ICNhYWEgc29saWQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2NvbG9yOmJsYWNrfXRhYmxlLndpa2l0YWJsZT50cj50aCx0YWJsZS53aWtpdGFibGU+dHI+dGQsdGFibGUud2lraXRhYmxlPio+dHI+dGgsdGFibGUud2lraXRhYmxlPio+dHI+dGR7Ym9yZGVyOjFweCAjYWFhIHNvbGlkO3BhZGRpbmc6LjJlbX10YWJsZS53aWtpdGFibGU+dHI+dGgsdGFibGUud2lraXRhYmxlPio+dHI+dGh7YmFja2dyb3VuZC1jb2xvcjojZjJmMmYyO3RleHQtYWxpZ246Y2VudGVyfXRhYmxlLndpa2l0YWJsZT5jYXB0aW9ue2ZvbnQtd2VpZ2h0OmJvbGR9dGFibGUuY29sbGFwc2VkIHRyLmNvbGxhcHNhYmxle2Rpc3BsYXk6bm9uZX0uc3VjY2Vzc3tjb2xvcjpncmVlbjtmb250LXNpemU6bGFyZ2VyfS53YXJuaW5ne2NvbG9yOiNGRkE1MDA7Zm9udC1zaXplOmxhcmdlcn0uZXJyb3J7Y29sb3I6cmVkO2ZvbnQtc2l6ZTpsYXJnZXJ9LmVycm9yYm94LC53YXJuaW5nYm94LC5zdWNjZXNzYm94e2ZvbnQtc2l6ZTpsYXJnZXI7Ym9yZGVyOjJweCBzb2xpZDtwYWRkaW5nOi41ZW0gMWVtO2Zsb2F0OmxlZnQ7bWFyZ2luLWJvdHRvbToyZW07Y29sb3I6IzAwMH0uZXJyb3Jib3h7Ym9yZGVyLWNvbG9yOnJlZDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYyZjJ9Lndhcm5pbmdib3h7Ym9yZGVyLWNvbG9yOiNGRjhDMDA7YmFja2dyb3VuZC1jb2xvcjojRkZGRkMwfS5zdWNjZXNzYm94e2JvcmRlci1jb2xvcjpncmVlbjtiYWNrZ3JvdW5kLWNvbG9yOiNkZmR9LmVycm9yYm94IGgyLC53YXJuaW5nYm94IGgyLC5zdWNjZXNzYm94IGgye2ZvbnQtc2l6ZToxZW07Zm9udC13ZWlnaHQ6Ym9sZDtkaXNwbGF5OmlubGluZTttYXJnaW46MCAuNWVtIDAgMDtib3JkZXI6bm9uZX0ubXctaW5mb2JveHtib3JkZXI6MnB4IHNvbGlkICNmZjdmMDA7bWFyZ2luOi41ZW07Y2xlYXI6bGVmdDtvdmVyZmxvdzpoaWRkZW59Lm13LWluZm9ib3gtbGVmdHttYXJnaW46N3B4O2Zsb2F0OmxlZnQ7d2lkdGg6MzVweH0ubXctaW5mb2JveC1yaWdodHttYXJnaW46LjVlbSAuNWVtIC41ZW0gNDlweH0ucHJldmlld25vdGV7Y29sb3I6I2MwMDttYXJnaW4tYm90dG9tOjFlbX0ucHJldmlld25vdGUgcHt0ZXh0LWluZGVudDozZW07bWFyZ2luOi44ZW0gMH0udmlzdWFsQ2xlYXJ7Y2xlYXI6Ym90aH0jbXdfdHJhY2tiYWNrc3tib3JkZXI6c29saWQgMXB4ICNiYmY7YmFja2dyb3VuZC1jb2xvcjojZWVmO3BhZGRpbmc6LjJlbX0ubXctZGF0YXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0ubXctZGF0YXRhYmxlLC5tdy1kYXRhdGFibGUgdGQsLm13LWRhdGF0YWJsZSB0aHtib3JkZXI6MXB4IHNvbGlkICNhYWE7cGFkZGluZzowIC4xNWVtIDAgLjE1ZW19Lm13LWRhdGF0YWJsZSB0aHtiYWNrZ3JvdW5kLWNvbG9yOiNkZGZ9Lm13LWRhdGF0YWJsZSB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm13LWRhdGF0YWJsZSB0cjpob3ZlciB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWZ9LlRhYmxlUGFnZXJ7bWluLXdpZHRoOjgwJX0uVGFibGVQYWdlcl9uYXZ7bWFyZ2luOjAgYXV0b30uVGFibGVQYWdlcl9uYXYgdGR7cGFkZGluZzozcHg7dGV4dC1hbGlnbjpjZW50ZXJ9LlRhYmxlUGFnZXJfbmF2IGF7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmltYWdlbGlzdCB0ZCwuaW1hZ2VsaXN0IHRoe3doaXRlLXNwYWNlOm5vd3JhcH0uaW1hZ2VsaXN0IC5UYWJsZVBhZ2VyX2NvbF9saW5rc3tiYWNrZ3JvdW5kLWNvbG9yOiNlZWZ9LmltYWdlbGlzdCAuVGFibGVQYWdlcl9jb2xfaW1nX2Rlc2NyaXB0aW9ue3doaXRlLXNwYWNlOm5vcm1hbH0uaW1hZ2VsaXN0IHRoLlRhYmxlUGFnZXJfc29ydHtiYWNrZ3JvdW5kLWNvbG9yOiNjY2Z9dWwjZmlsZXRvY3t0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkICNhYWE7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O3BhZGRpbmc6NXB4O2ZvbnQtc2l6ZTo5NSU7bWFyZ2luLWJvdHRvbTouNWVtO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9I2ZpbGV0b2MgbGl7ZGlzcGxheTppbmxpbmU7bGlzdC1zdHlsZS10eXBlOm5vbmU7cGFkZGluZy1yaWdodDoyZW19dGFibGUubXdfbWV0YWRhdGF7Zm9udC1zaXplOi44ZW07bWFyZ2luLWxlZnQ6LjVlbTttYXJnaW4tYm90dG9tOi41ZW07d2lkdGg6NDAwcHh9dGFibGUubXdfbWV0YWRhdGEgY2FwdGlvbntmb250LXdlaWdodDpib2xkfXRhYmxlLm13X21ldGFkYXRhIHRoe2ZvbnQtd2VpZ2h0Om5vcm1hbH10YWJsZS5td19tZXRhZGF0YSB0ZHtwYWRkaW5nOi4xZW19dGFibGUubXdfbWV0YWRhdGF7Ym9yZGVyOm5vbmU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfXRhYmxlLm13X21ldGFkYXRhIHRkLHRhYmxlLm13X21ldGFkYXRhIHRoe3RleHQtYWxpZ246Y2VudGVyO2JvcmRlcjoxcHggc29saWQgI2FhYTtwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6NXB4fXRhYmxlLm13X21ldGFkYXRhIHRoe2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOX10YWJsZS5td19tZXRhZGF0YSB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmY2ZjZmN9dGFibGUubXdfbWV0YWRhdGEgdWwubWV0YWRhdGEtbGFuZ2xpc3R7bGlzdC1zdHlsZS10eXBlOm5vbmU7bGlzdC1zdHlsZS1pbWFnZTpub25lO3BhZGRpbmctcmlnaHQ6NXB4O3BhZGRpbmctbGVmdDo1cHg7bWFyZ2luOjB9Lm13LWNvbnRlbnQtbHRyIHVsLC5tdy1jb250ZW50LXJ0bCAubXctY29udGVudC1sdHIgdWx7bWFyZ2luOi4zZW0gMCAwIDEuNmVtO3BhZGRpbmc6MH0ubXctY29udGVudC1ydGwgdWwsLm13LWNvbnRlbnQtbHRyIC5tdy1jb250ZW50LXJ0bCB1bHttYXJnaW46LjNlbSAxLjZlbSAwIDA7cGFkZGluZzowfS5tdy1jb250ZW50LWx0ciBvbCwubXctY29udGVudC1ydGwgLm13LWNvbnRlbnQtbHRyIG9se21hcmdpbjouM2VtIDAgMCAzLjJlbTtwYWRkaW5nOjB9Lm13LWNvbnRlbnQtcnRsIG9sLC5tdy1jb250ZW50LWx0ciAubXctY29udGVudC1ydGwgb2x7bWFyZ2luOi4zZW0gMy4yZW0gMCAwO3BhZGRpbmc6MH0ubXctY29udGVudC1sdHIgZGQsLm13LWNvbnRlbnQtcnRsIC5tdy1jb250ZW50LWx0ciBkZHttYXJnaW4tbGVmdDoxLjZlbTttYXJnaW4tcmlnaHQ6MH0ubXctY29udGVudC1ydGwgZGQsLm13LWNvbnRlbnQtbHRyIC5tdy1jb250ZW50LXJ0bCBkZHttYXJnaW4tcmlnaHQ6MS42ZW07bWFyZ2luLWxlZnQ6MH1saS5nYWxsZXJ5Ym94e3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXI6c29saWQgMnB4IHdoaXRlO2Rpc3BsYXk6LW1vei1pbmxpbmUtYm94O2Rpc3BsYXk6aW5saW5lLWJsb2NrfXVsLmdhbGxlcnksbGkuZ2FsbGVyeWJveHt6b29tOjE7KmRpc3BsYXk6aW5saW5lfXVsLmdhbGxlcnl7bWFyZ2luOjJweDtwYWRkaW5nOjJweDtkaXNwbGF5OmJsb2NrfWxpLmdhbGxlcnljYXB0aW9ue2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpibG9jazt3b3JkLXdyYXA6YnJlYWstd29yZH1saS5nYWxsZXJ5Ym94IGRpdi50aHVtYnt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O21hcmdpbjoycHh9bGkuZ2FsbGVyeWJveCBkaXYudGh1bWIgaW1ne2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjAgYXV0b31kaXYuZ2FsbGVyeXRleHR7b3ZlcmZsb3c6aGlkZGVuO2ZvbnQtc2l6ZTo5NCU7cGFkZGluZzoycHggNHB4O3dvcmQtd3JhcDpicmVhay13b3JkfS5tdy1hamF4LWxvYWRlcntiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvYWpheC1sb2FkZXIuZ2lmKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O3BhZGRpbmc6MTZweDtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTE2cHh9Lm13LXNtYWxsLXNwaW5uZXJ7cGFkZGluZzoxMHB4IWltcG9ydGFudDttYXJnaW4tcmlnaHQ6LjZlbTtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvc3Bpbm5lci5naWYpO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9aDE6bGFuZyhhcyksaDE6bGFuZyhiaCksaDE6bGFuZyhiaG8pLGgxOmxhbmcoYm4pLGgxOmxhbmcoZ3UpLGgxOmxhbmcoaGkpLGgxOmxhbmcoa24pLGgxOmxhbmcobWwpLGgxOmxhbmcobXIpLGgxOmxhbmcob3IpLGgxOmxhbmcocGEpLGgxOmxhbmcoc2EpLGgxOmxhbmcodGEpLGgxOmxhbmcodGUpe2xpbmUtaGVpZ2h0OjEuNWVtIWltcG9ydGFudH1oMjpsYW5nKGFzKSxoMzpsYW5nKGFzKSxoNDpsYW5nKGFzKSxoNTpsYW5nKGFzKSxoNjpsYW5nKGFzKSxoMjpsYW5nKGJobyksaDM6bGFuZyhiaG8pLGg0OmxhbmcoYmhvKSxoNTpsYW5nKGJobyksaDY6bGFuZyhiaG8pLGgyOmxhbmcoYmgpLGgzOmxhbmcoYmgpLGg0OmxhbmcoYmgpLGg1OmxhbmcoYmgpLGg2OmxhbmcoYmgpLGgyOmxhbmcoYm4pLGgzOmxhbmcoYm4pLGg0OmxhbmcoYm4pLGg1OmxhbmcoYm4pLGg2OmxhbmcoYm4pLGgyOmxhbmcoZ3UpLGgzOmxhbmcoZ3UpLGg0OmxhbmcoZ3UpLGg1OmxhbmcoZ3UpLGg2OmxhbmcoZ3UpLGgyOmxhbmcoaGkpLGgzOmxhbmcoaGkpLGg0OmxhbmcoaGkpLGg1OmxhbmcoaGkpLGg2OmxhbmcoaGkpLGgyOmxhbmcoa24pLGgzOmxhbmcoa24pLGg0Omxhbmcoa24pLGg1Omxhbmcoa24pLGg2Omxhbmcoa24pLGgyOmxhbmcobWwpLGgzOmxhbmcobWwpLGg0OmxhbmcobWwpLGg1OmxhbmcobWwpLGg2OmxhbmcobWwpLGgyOmxhbmcobXIpLGgzOmxhbmcobXIpLGg0OmxhbmcobXIpLGg1OmxhbmcobXIpLGg2OmxhbmcobXIpLGgyOmxhbmcob3IpLGgzOmxhbmcob3IpLGg0Omxhbmcob3IpLGg1Omxhbmcob3IpLGg2Omxhbmcob3IpLGgyOmxhbmcocGEpLGgzOmxhbmcocGEpLGg0OmxhbmcocGEpLGg1OmxhbmcocGEpLGg2OmxhbmcocGEpLGgyOmxhbmcoc2EpLGgzOmxhbmcoc2EpLGg0Omxhbmcoc2EpLGg1Omxhbmcoc2EpLGg2Omxhbmcoc2EpLGgyOmxhbmcodGEpLGgzOmxhbmcodGEpLGg0OmxhbmcodGEpLGg1OmxhbmcodGEpLGg2OmxhbmcodGEpLGgyOmxhbmcodGUpLGgzOmxhbmcodGUpLGg0OmxhbmcodGUpLGg1OmxhbmcodGUpLGg2OmxhbmcodGUpe2xpbmUtaGVpZ2h0OjEuMmVtfW9sOmxhbmcoYmNjKSBsaSxvbDpsYW5nKGJxaSkgbGksb2w6bGFuZyhmYSkgbGksb2w6bGFuZyhnbGspIGxpLG9sOmxhbmcoa2stYXJhYikgbGksb2w6bGFuZyhtem4pIGxpe2xpc3Qtc3R5bGUtdHlwZTotbW96LXBlcnNpYW47bGlzdC1zdHlsZS10eXBlOnBlcnNpYW59b2w6bGFuZyhja2IpIGxpe2xpc3Qtc3R5bGUtdHlwZTotbW96LWFyYWJpYy1pbmRpYztsaXN0LXN0eWxlLXR5cGU6YXJhYmljLWluZGljfW9sOmxhbmcoaGkpIGxpLG9sOmxhbmcobXIpIGxpe2xpc3Qtc3R5bGUtdHlwZTotbW96LWRldmFuYWdhcmk7bGlzdC1zdHlsZS10eXBlOmRldmFuYWdhcml9b2w6bGFuZyhhcykgbGksb2w6bGFuZyhibikgbGl7bGlzdC1zdHlsZS10eXBlOi1tb3otYmVuZ2FsaTtsaXN0LXN0eWxlLXR5cGU6YmVuZ2FsaX1vbDpsYW5nKG9yKSBsaXtsaXN0LXN0eWxlLXR5cGU6LW1vei1vcml5YTtsaXN0LXN0eWxlLXR5cGU6b3JpeWF9I3RvYyB1bCwudG9jIHVse21hcmdpbjouM2VtIDB9Lm13LWNvbnRlbnQtbHRyIC50b2MgdWwsLm13LWNvbnRlbnQtbHRyICN0b2MgdWwsLm13LWNvbnRlbnQtcnRsIC5tdy1jb250ZW50LWx0ciAudG9jIHVsLC5tdy1jb250ZW50LXJ0bCAubXctY29udGVudC1sdHIgI3RvYyB1bHt0ZXh0LWFsaWduOmxlZnR9Lm13LWNvbnRlbnQtcnRsIC50b2MgdWwsLm13LWNvbnRlbnQtcnRsICN0b2MgdWwsLm13LWNvbnRlbnQtbHRyIC5tdy1jb250ZW50LXJ0bCAudG9jIHVsLC5tdy1jb250ZW50LWx0ciAubXctY29udGVudC1ydGwgI3RvYyB1bHt0ZXh0LWFsaWduOnJpZ2h0fS5tdy1jb250ZW50LWx0ciAudG9jIHVsIHVsLC5tdy1jb250ZW50LWx0ciAjdG9jIHVsIHVsLC5tdy1jb250ZW50LXJ0bCAubXctY29udGVudC1sdHIgLnRvYyB1bCB1bCwubXctY29udGVudC1ydGwgLm13LWNvbnRlbnQtbHRyICN0b2MgdWwgdWx7bWFyZ2luOjAgMCAwIDJlbX0ubXctY29udGVudC1ydGwgLnRvYyB1bCB1bCwubXctY29udGVudC1ydGwgI3RvYyB1bCB1bCwubXctY29udGVudC1sdHIgLm13LWNvbnRlbnQtcnRsIC50b2MgdWwgdWwsLm13LWNvbnRlbnQtbHRyIC5tdy1jb250ZW50LXJ0bCAjdG9jIHVsIHVse21hcmdpbjowIDJlbSAwIDB9I3RvYyAjdG9jdGl0bGUsLnRvYyAjdG9jdGl0bGUsI3RvYyAudG9jdGl0bGUsLnRvYyAudG9jdGl0bGV7ZGlyZWN0aW9uOmx0cn0ubXctaGVscC1maWVsZC1oaW50e2Rpc3BsYXk6bm9uZTttYXJnaW4tbGVmdDoycHg7bWFyZ2luLWJvdHRvbTotOHB4O3BhZGRpbmc6MCAwIDAgMTVweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgnaW1hZ2VzL2hlbHAtcXVlc3Rpb24uZ2lmJyk7YmFja2dyb3VuZC1wb3NpdGlvbjpsZWZ0IGNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOi44ZW07dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjojMDY0NWFkfS5tdy1oZWxwLWZpZWxkLWhpbnQ6aG92ZXJ7YmFja2dyb3VuZC1pbWFnZTp1cmwoJ2ltYWdlcy9oZWxwLXF1ZXN0aW9uLWhvdmVyLmdpZicpfS5tdy1oZWxwLWZpZWxkLWRhdGF7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kLWNvbG9yOiNkNmYzZmY7cGFkZGluZzo1cHggOHB4IDRweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjNWRjOWY0O21hcmdpbi1sZWZ0OjIwcHh9LnRpcHN5e3BhZGRpbmc6NXB4IDVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDAwO292ZXJmbG93OnZpc2libGV9LnRpcHN5LWlubmVye3BhZGRpbmc6NXB4IDhweCA0cHggOHB4O2JhY2tncm91bmQtY29sb3I6I2Q2ZjNmZjtjb2xvcjpibGFjaztib3JkZXI6MXB4IHNvbGlkICM1ZGM5ZjQ7bWF4LXdpZHRoOjMwMHB4O3RleHQtYWxpZ246bGVmdH0udGlwc3ktYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp1cmwoaW1hZ2VzL3RpcHN5LWFycm93LmdpZikgbm8tcmVwZWF0IHRvcCBsZWZ0O3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LnRpcHN5LXNlIC50aXBzeS1hcnJvd3tib3R0b206LTJweDtyaWdodDoxMHB4O2JhY2tncm91bmQtcG9zaXRpb246MCAxMDAlfSNtdy1jbGVhcnlvdXJjYWNoZSwjbXctc2l0ZWNzc3ByZXZpZXcsI213LXNpdGVqc3ByZXZpZXcsI213LXVzZXJjc3NwcmV2aWV3LCNtdy11c2VyanNwcmV2aWV3e2RpcmVjdGlvbjpsdHI7dW5pY29kZS1iaWRpOmVtYmVkfS5kaWZmLWN1cnJlbnR2ZXJzaW9uLXRpdGxlLC5kaWZme2RpcmVjdGlvbjpsdHI7dW5pY29kZS1iaWRpOmVtYmVkfS5kaWZmLWNvbnRlbnRhbGlnbi1yaWdodCB0ZHtkaXJlY3Rpb246cnRsO3VuaWNvZGUtYmlkaTplbWJlZH0uZGlmZi1jb250ZW50YWxpZ24tbGVmdCB0ZHtkaXJlY3Rpb246bHRyO3VuaWNvZGUtYmlkaTplbWJlZH0uZGlmZi1vdGl0bGUsLmRpZmYtbnRpdGxlLC5kaWZmLWxpbmVub3tkaXJlY3Rpb246bHRyIWltcG9ydGFudDt1bmljb2RlLWJpZGk6ZW1iZWR9I213LXJldmlzaW9uLWluZm8sI213LXJldmlzaW9uLWluZm8tY3VycmVudCwjbXctcmV2aXNpb24tbmF2e2RpcmVjdGlvbjpsdHI7ZGlzcGxheTppbmxpbmV9ZGl2LnRyaWdodCxkaXYuZmxvYXRyaWdodCx0YWJsZS5mbG9hdHJpZ2h0e2NsZWFyOnJpZ2h0O2Zsb2F0OnJpZ2h0fWRpdi50bGVmdCxkaXYuZmxvYXRsZWZ0LHRhYmxlLmZsb2F0bGVmdHtmbG9hdDpsZWZ0O2NsZWFyOmxlZnR9ZGl2LmZsb2F0cmlnaHQsdGFibGUuZmxvYXRyaWdodCxkaXYuZmxvYXRsZWZ0LHRhYmxlLmZsb2F0bGVmdHtwb3NpdGlvbjpyZWxhdGl2ZX0jbXctY3JlZGl0cyBhe3VuaWNvZGUtYmlkaTplbWJlZH0ubXctanVtcCwjanVtcC10by1uYXZ7b3ZlcmZsb3c6aGlkZGVuO2hlaWdodDowO3pvb206MX0ucHJpbnRmb290ZXJ7ZGlzcGxheTpub25lfS54ZGVidWctZXJyb3J7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo5OX0uZWRpdHNlY3Rpb24sLnRvY3RvZ2dsZXstbW96LXVzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9YS5zdHViLGEubmV3e2NvbG9yOiNiYTAwMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmV9I3RvY3tib3JkZXI6MXB4IHNvbGlkICNhYWE7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O3BhZGRpbmc6NXB4fWRpdi5mbG9hdHJpZ2h0e2Zsb2F0OnJpZ2h0O2NsZWFyOnJpZ2h0O3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjouNWVtIDAgLjhlbSAxLjRlbX1kaXYuZmxvYXRyaWdodCBwe2ZvbnQtc3R5bGU6aXRhbGljfWRpdi5mbG9hdGxlZnR7ZmxvYXQ6bGVmdDtjbGVhcjpsZWZ0O3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjouNWVtIDEuNGVtIC44ZW0gMH1kaXYuZmxvYXRsZWZ0IHB7Zm9udC1zdHlsZTppdGFsaWN9ZGl2LmNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn1kaXYudGh1bWJ7Ym9yZGVyOm5vbmU7d2lkdGg6YXV0bzttYXJnaW4tdG9wOi41ZW07bWFyZ2luLWJvdHRvbTouOGVtO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9ZGl2LnRodW1iaW5uZXJ7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6M3B4IWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOldoaXRlO2ZvbnQtc2l6ZTo5NCU7dGV4dC1hbGlnbjpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVufWh0bWwgLnRodW1iaW1hZ2V7Ym9yZGVyOjFweCBzb2xpZCAjY2NjfWh0bWwgLnRodW1iY2FwdGlvbntib3JkZXI6bm9uZTt0ZXh0LWFsaWduOmxlZnQ7bGluZS1oZWlnaHQ6MS40ZW07cGFkZGluZzozcHghaW1wb3J0YW50O2ZvbnQtc2l6ZTo5NCV9ZGl2Lm1hZ25pZnl7ZGlzcGxheTpub25lfWRpdi50cmlnaHR7ZmxvYXQ6cmlnaHQ7Y2xlYXI6cmlnaHQ7bWFyZ2luOi41ZW0gMCAuOGVtIDEuNGVtfWRpdi50bGVmdHtmbG9hdDpsZWZ0O2NsZWFyOmxlZnQ7bWFyZ2luOi41ZW0gMS40ZW0gLjhlbSAwfWltZy50aHVtYmJvcmRlcntib3JkZXI6MXB4IHNvbGlkICNkZGR9dGFibGUucmltYWdle2Zsb2F0OnJpZ2h0O3dpZHRoOjFwdDtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tbGVmdDoxZW07bWFyZ2luLWJvdHRvbToxZW07dGV4dC1hbGlnbjpjZW50ZXJ9Ym9keXtiYWNrZ3JvdW5kOndoaXRlO2NvbG9yOmJsYWNrO21hcmdpbjowO3BhZGRpbmc6MH0ubm9wcmludCxkaXYjanVtcC10by1uYXYsLm13LWp1bXAsZGl2LnRvcCxkaXYjY29sdW1uLW9uZSwjY29sb3Bob24sLmVkaXRzZWN0aW9uLC50b2N0b2dnbGUsLnRvY2hpZGRlbixkaXYjZi1wb3dlcmVkYnlpY28sZGl2I2YtY29weXJpZ2h0aWNvLGxpI3ZpZXdjb3VudCxsaSNhYm91dCxsaSNkaXNjbGFpbWVyLGxpI21vYmlsZXZpZXcsbGkjcHJpdmFjeSwjZm9vdGVyLXBsYWNlcywubXctaGlkZGVuLWNhdGxpbmtzLHRyLm13LW1ldGFkYXRhLXNob3ctaGlkZS1leHRlbmRlZCxzcGFuLm13LWZpbGVwYWdlLW90aGVyLXJlc29sdXRpb25zLCNmaWxldG9je2Rpc3BsYXk6bm9uZX11bHtsaXN0LXN0eWxlLXR5cGU6c3F1YXJlfSNjb250ZW50e2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZSFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDttYXJnaW46MCFpbXBvcnRhbnQ7ZGlyZWN0aW9uOmx0cn0jZm9vdGVye2JhY2tncm91bmQ6d2hpdGU7Y29sb3I6YmxhY2s7bWFyZ2luLXRvcDoxZW07Ym9yZGVyLXRvcDoxcHggc29saWQgI0FBQTtkaXJlY3Rpb246bHRyfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtd2VpZ2h0OmJvbGR9cHttYXJnaW46MWVtIDA7bGluZS1oZWlnaHQ6MS4yZW19cHJle2JvcmRlcjoxcHQgZGFzaGVkIGJsYWNrO3doaXRlLXNwYWNlOnByZTtmb250LXNpemU6OHB0O292ZXJmbG93OmF1dG87cGFkZGluZzoxZW0gMDtiYWNrZ3JvdW5kOndoaXRlO2NvbG9yOmJsYWNrfXRhYmxlLmxpc3RpbmcsdGFibGUubGlzdGluZyB0ZHtib3JkZXI6MXB0IHNvbGlkIGJsYWNrO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX1he2NvbG9yOmJsYWNrIWltcG9ydGFudDtiYWNrZ3JvdW5kOm5vbmUhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnR9YTpsaW5rLGE6dmlzaXRlZHtjb2xvcjojNTIwO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0jY29udGVudCBhLmV4dGVybmFsLnRleHQ6YWZ0ZXIsI2NvbnRlbnQgYS5leHRlcm5hbC5hdXRvbnVtYmVyOmFmdGVye2NvbnRlbnQ6IigiIGF0dHIoaHJlZikgIikgIn0jZ2xvYmFsV3JhcHBlcnt3aWR0aDoxMDAlIWltcG9ydGFudDttaW4td2lkdGg6MCFpbXBvcnRhbnR9I2NvbnRlbnR7YmFja2dyb3VuZDp3aGl0ZTtjb2xvcjpibGFja30jY29sdW1uLWNvbnRlbnR7bWFyZ2luOjAhaW1wb3J0YW50fSNjb2x1bW4tY29udGVudCAjY29udGVudHtwYWRkaW5nOjFlbTttYXJnaW46MCFpbXBvcnRhbnR9YSxhLmV4dGVybmFsLGEubmV3LGEuc3R1Yntjb2xvcjpibGFjayFpbXBvcnRhbnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmUhaW1wb3J0YW50fWEsYS5leHRlcm5hbCxhLm5ldyxhLnN0dWJ7Y29sb3I6aW5oZXJpdCFpbXBvcnRhbnQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXQhaW1wb3J0YW50fWltZ3tib3JkZXI6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9c3Bhbi50ZXhodG1se2ZvbnQtZmFtaWx5OnNlcmlmfSNzaXRlTm90aWNle2Rpc3BsYXk6bm9uZX1saS5nYWxsZXJ5Ym94e3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXI6c29saWQgMnB4IHdoaXRlO2Rpc3BsYXk6LW1vei1pbmxpbmUtYm94O2Rpc3BsYXk6aW5saW5lLWJsb2NrfXVsLmdhbGxlcnksbGkuZ2FsbGVyeWJveHt6b29tOjE7KmRpc3BsYXk6aW5saW5lfXVsLmdhbGxlcnl7bWFyZ2luOjJweDtwYWRkaW5nOjJweDtkaXNwbGF5OmJsb2NrfWxpLmdhbGxlcnljYXB0aW9ue2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpibG9jazt3b3JkLXdyYXA6YnJlYWstd29yZH1saS5nYWxsZXJ5Ym94IGRpdi50aHVtYnt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkICNjY2M7bWFyZ2luOjJweH1kaXYuZ2FsbGVyeXRleHR7b3ZlcmZsb3c6aGlkZGVuO2ZvbnQtc2l6ZTo5NCU7cGFkZGluZzoycHggNHB4O3dvcmQtd3JhcDpicmVhay13b3JkfXRhYmxlLmRpZmZ7YmFja2dyb3VuZDp3aGl0ZX10ZC5kaWZmLW90aXRsZXtiYWNrZ3JvdW5kOiNmZmZ9dGQuZGlmZi1udGl0bGV7YmFja2dyb3VuZDojZmZmfXRkLmRpZmYtYWRkZWRsaW5le2JhY2tncm91bmQ6I2NmYztmb250LXNpemU6c21hbGxlcjtib3JkZXI6c29saWQgMnB4IGJsYWNrfXRkLmRpZmYtZGVsZXRlZGxpbmV7YmFja2dyb3VuZDojZmZhO2ZvbnQtc2l6ZTpzbWFsbGVyO2JvcmRlcjpkb3R0ZWQgMnB4IGJsYWNrfXRkLmRpZmYtY29udGV4dHtiYWNrZ3JvdW5kOiNlZWU7Zm9udC1zaXplOnNtYWxsZXJ9LmRpZmZjaGFuZ2V7Y29sb3I6c2lsdmVyO2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX10YWJsZS53aWtpdGFibGUsdGFibGUubXdfbWV0YWRhdGF7bWFyZ2luOjFlbSAxZW0gMWVtIDA7Ym9yZGVyOjFweCAjYWFhIHNvbGlkO2JhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfXRhYmxlLndpa2l0YWJsZT50cj50aCx0YWJsZS53aWtpdGFibGU+dHI+dGQsdGFibGUud2lraXRhYmxlPio+dHI+dGgsdGFibGUud2lraXRhYmxlPio+dHI+dGQsLm13X21ldGFkYXRhIHRoLC5td19tZXRhZGF0YSB0ZHtib3JkZXI6MXB4ICNhYWEgc29saWQ7cGFkZGluZzouMmVtfXRhYmxlLndpa2l0YWJsZT50cj50aCx0YWJsZS53aWtpdGFibGU+Kj50cj50aCwubXdfbWV0YWRhdGEgdGh7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDp3aGl0ZTtmb250LXdlaWdodDpib2xkfXRhYmxlLndpa2l0YWJsZT5jYXB0aW9uLC5td19tZXRhZGF0YSBjYXB0aW9ue2ZvbnQtd2VpZ2h0OmJvbGR9YS5zb3J0aGVhZGVye21hcmdpbjowIC4zZW19Lndpa2l0YWJsZSwudGh1bWIsaW1ne3BhZ2UtYnJlYWstaW5zaWRlOmF2b2lkfWgyLGgzLGg0LGg1LGg2LGg3e3BhZ2UtYnJlYWstYWZ0ZXI6YXZvaWR9cHt3aWRvd3M6MztvcnBoYW5zOjN9LmNhdGxpbmtzIHVse2Rpc3BsYXk6aW5saW5lO21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmU7bGlzdC1zdHlsZS10eXBlOm5vbmU7bGlzdC1zdHlsZS1pbWFnZTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZSFpZX0uY2F0bGlua3MgbGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MS4xNWVtO3BhZGRpbmc6MCAuNGVtO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjQUFBO21hcmdpbjouMWVtIDA7em9vbToxO2Rpc3BsYXk6aW5saW5lIWllfS5jYXRsaW5rcyBsaTpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6LjJlbTtib3JkZXItbGVmdDpub25lfWRmbntmb250LXN0eWxlOmluaGVyaXR9c3VwLHN1YntsaW5lLWhlaWdodDoxZW19I2ludGVyd2lraS1jb21wbGV0ZWxpc3R7Zm9udC13ZWlnaHQ6Ym9sZH1ib2R5LnBhZ2UtTWFpbl9QYWdlICNjYS1kZWxldGV7ZGlzcGxheTpub25lIWltcG9ydGFudH1ib2R5LnBhZ2UtTWFpbl9QYWdlICNtcC10b3BiYW5uZXJ7Y2xlYXI6Ym90aH0jdG9vbGJhcntoZWlnaHQ6MjJweDttYXJnaW4tYm90dG9tOjZweH1ib2R5LmFjdGlvbi1pbmZvIDp0YXJnZXR7YmFja2dyb3VuZDojREVGfW9sLnJlZmVyZW5jZXMsZGl2LnJlZmxpc3QsZGl2LnJlZmJlZ2lue2ZvbnQtc2l6ZTo5MCU7bWFyZ2luLWJvdHRvbTouNWVtfWRpdi5yZWZiZWdpbi0xMDB7Zm9udC1zaXplOjEwMCV9ZGl2LnJlZmxpc3Qgb2wucmVmZXJlbmNlc3tmb250LXNpemU6MTAwJTtsaXN0LXN0eWxlLXR5cGU6aW5oZXJpdH1kaXYuY29sdW1uc3ttYXJnaW4tdG9wOi4zZW19ZGl2LmNvbHVtbnMgZGwsZGl2LmNvbHVtbnMgb2wsZGl2LmNvbHVtbnMgdWx7bWFyZ2luLXRvcDowfWRpdi5jb2x1bW5zIGxpLGRpdi5jb2x1bW5zIGRkIGRkey13ZWJraXQtY29sdW1uLWJyZWFrLWluc2lkZTphdm9pZDtwYWdlLWJyZWFrLWluc2lkZTphdm9pZDticmVhay1pbnNpZGU6YXZvaWQtY29sdW1ufW9sLnJlZmVyZW5jZXMgbGk6dGFyZ2V0LHN1cC5yZWZlcmVuY2U6dGFyZ2V0LHNwYW4uY2l0YXRpb246dGFyZ2V0e2JhY2tncm91bmQtY29sb3I6I0RFRn1zdXAucmVmZXJlbmNle2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0eWxlOm5vcm1hbH1zcGFuLmJyb2tlbnJlZntkaXNwbGF5Om5vbmV9LmNpdGF0aW9ue3dvcmQtd3JhcDpicmVhay13b3JkfUBtZWRpYSBzY3JlZW4saGFuZGhlbGR7LmNpdGF0aW9uICoucHJpbnRvbmx5e2Rpc3BsYXk6bm9uZX19LmZsb3dsaXN0IHVse292ZXJmbG93LXg6aGlkZGVuO21hcmdpbi1sZWZ0OjA7cGFkZGluZy1sZWZ0OjEuNmVtfS5mbG93bGlzdCBvbHtvdmVyZmxvdy14OmhpZGRlbjttYXJnaW4tbGVmdDowO3BhZGRpbmctbGVmdDozLjJlbX0uZmxvd2xpc3QgZGx7b3ZlcmZsb3cteDpoaWRkZW59LmhsaXN0IGRsLC5obGlzdCBvbCwuaGxpc3QgdWx7bWFyZ2luOjA7cGFkZGluZzowfS5obGlzdCBkZCwuaGxpc3QgZHQsLmhsaXN0IGxpe21hcmdpbjowO2Rpc3BsYXk6aW5saW5lfS5obGlzdCBkbCBkbCwuaGxpc3QgZGwgb2wsLmhsaXN0IGRsIHVsLC5obGlzdCBvbCBkbCwuaGxpc3Qgb2wgb2wsLmhsaXN0IG9sIHVsLC5obGlzdCB1bCBkbCwuaGxpc3QgdWwgb2wsLmhsaXN0IHVsIHVse2Rpc3BsYXk6aW5saW5lfS5obGlzdCBkdDphZnRlcntjb250ZW50OiI6In0uaGxpc3QgZGQ6YWZ0ZXIsLmhsaXN0IGxpOmFmdGVye2NvbnRlbnQ6IiDCtyAiO2ZvbnQtd2VpZ2h0OmJvbGR9LmhsaXN0IGRkOmxhc3QtY2hpbGQ6YWZ0ZXIsLmhsaXN0IGR0Omxhc3QtY2hpbGQ6YWZ0ZXIsLmhsaXN0IGxpOmxhc3QtY2hpbGQ6YWZ0ZXJ7Y29udGVudDpub25lfS5obGlzdCBkZC5obGlzdC1sYXN0LWNoaWxkOmFmdGVyLC5obGlzdCBkdC5obGlzdC1sYXN0LWNoaWxkOmFmdGVyLC5obGlzdCBsaS5obGlzdC1sYXN0LWNoaWxkOmFmdGVye2NvbnRlbnQ6bm9uZX0uaGxpc3QgZGQgZGQ6Zmlyc3QtY2hpbGQ6YmVmb3JlLC5obGlzdCBkZCBkdDpmaXJzdC1jaGlsZDpiZWZvcmUsLmhsaXN0IGRkIGxpOmZpcnN0LWNoaWxkOmJlZm9yZSwuaGxpc3QgZHQgZGQ6Zmlyc3QtY2hpbGQ6YmVmb3JlLC5obGlzdCBkdCBkdDpmaXJzdC1jaGlsZDpiZWZvcmUsLmhsaXN0IGR0IGxpOmZpcnN0LWNoaWxkOmJlZm9yZSwuaGxpc3QgbGkgZGQ6Zmlyc3QtY2hpbGQ6YmVmb3JlLC5obGlzdCBsaSBkdDpmaXJzdC1jaGlsZDpiZWZvcmUsLmhsaXN0IGxpIGxpOmZpcnN0LWNoaWxkOmJlZm9yZXtjb250ZW50OiIoIjtmb250LXdlaWdodDpub3JtYWx9LmhsaXN0IGRkIGRkOmxhc3QtY2hpbGQ6YWZ0ZXIsLmhsaXN0IGRkIGR0Omxhc3QtY2hpbGQ6YWZ0ZXIsLmhsaXN0IGRkIGxpOmxhc3QtY2hpbGQ6YWZ0ZXIsLmhsaXN0IGR0IGRkOmxhc3QtY2hpbGQ6YWZ0ZXIsLmhsaXN0IGR0IGR0Omxhc3QtY2hpbGQ6YWZ0ZXIsLmhsaXN0IGR0IGxpOmxhc3QtY2hpbGQ6YWZ0ZXIsLmhsaXN0IGxpIGRkOmxhc3QtY2hpbGQ6YWZ0ZXIsLmhsaXN0IGxpIGR0Omxhc3QtY2hpbGQ6YWZ0ZXIsLmhsaXN0IGxpIGxpOmxhc3QtY2hpbGQ6YWZ0ZXJ7Y29udGVudDoiKSAiO2ZvbnQtd2VpZ2h0Om5vcm1hbH0uaGxpc3QgZGQgZGQuaGxpc3QtbGFzdC1jaGlsZDphZnRlciwuaGxpc3QgZGQgZHQuaGxpc3QtbGFzdC1jaGlsZDphZnRlciwuaGxpc3QgZGQgbGkuaGxpc3QtbGFzdC1jaGlsZDphZnRlciwuaGxpc3QgZHQgZGQuaGxpc3QtbGFzdC1jaGlsZDphZnRlciwuaGxpc3QgZHQgZHQuaGxpc3QtbGFzdC1jaGlsZDphZnRlciwuaGxpc3QgZHQgbGkuaGxpc3QtbGFzdC1jaGlsZDphZnRlciwuaGxpc3QgbGkgZGQuaGxpc3QtbGFzdC1jaGlsZDphZnRlciwuaGxpc3QgbGkgZHQuaGxpc3QtbGFzdC1jaGlsZDphZnRlciwuaGxpc3QgbGkgbGkuaGxpc3QtbGFzdC1jaGlsZDphZnRlcntjb250ZW50OiIpICI7Zm9udC13ZWlnaHQ6bm9ybWFsfS5obGlzdCBvbHtjb3VudGVyLXJlc2V0Omxpc3RpdGVtfS5obGlzdCBvbD5saXtjb3VudGVyLWluY3JlbWVudDpsaXN0aXRlbX0uaGxpc3Qgb2w+bGk6YmVmb3Jle2NvbnRlbnQ6IiAiIGNvdW50ZXIobGlzdGl0ZW0pICIgIn0uaGxpc3QgZGQgb2w+bGk6Zmlyc3QtY2hpbGQ6YmVmb3JlLC5obGlzdCBkdCBvbD5saTpmaXJzdC1jaGlsZDpiZWZvcmUsLmhsaXN0IGxpIG9sPmxpOmZpcnN0LWNoaWxkOmJlZm9yZXtjb250ZW50OiIoIiBjb3VudGVyKGxpc3RpdGVtKSAiICJ9LnBsYWlubGlzdCB1bHtsaW5lLWhlaWdodDppbmhlcml0O2xpc3Qtc3R5bGU6bm9uZSBub25lO21hcmdpbjowfS5wbGFpbmxpc3QgdWwgbGl7bWFyZ2luLWJvdHRvbTowfS5uYXZib3h7Ym9yZGVyOjFweCBzb2xpZCAjYWFhO3dpZHRoOjEwMCU7bWFyZ2luOmF1dG87Y2xlYXI6Ym90aDtmb250LXNpemU6ODglO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MXB4fS5uYXZib3gtaW5uZXIsLm5hdmJveC1zdWJncm91cHt3aWR0aDoxMDAlfS5uYXZib3gtZ3JvdXAsLm5hdmJveC10aXRsZSwubmF2Ym94LWFib3ZlYmVsb3d7cGFkZGluZzouMjVlbSAxZW07bGluZS1oZWlnaHQ6MS41ZW07dGV4dC1hbGlnbjpjZW50ZXJ9dGgubmF2Ym94LWdyb3Vwe3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOnJpZ2h0fS5uYXZib3gsLm5hdmJveC1zdWJncm91cHtiYWNrZ3JvdW5kOiNmZGZkZmR9Lm5hdmJveC1saXN0e2xpbmUtaGVpZ2h0OjEuOGVtO2JvcmRlci1jb2xvcjojZmRmZGZkfS5uYXZib3ggdGgsLm5hdmJveC10aXRsZXtiYWNrZ3JvdW5kOiNjY2Z9Lm5hdmJveC1hYm92ZWJlbG93LHRoLm5hdmJveC1ncm91cCwubmF2Ym94LXN1Ymdyb3VwIC5uYXZib3gtdGl0bGV7YmFja2dyb3VuZDojZGRmfS5uYXZib3gtc3ViZ3JvdXAgLm5hdmJveC1ncm91cCwubmF2Ym94LXN1Ymdyb3VwIC5uYXZib3gtYWJvdmViZWxvd3tiYWNrZ3JvdW5kOiNlNmU2ZmZ9Lm5hdmJveC1ldmVue2JhY2tncm91bmQ6I2Y3ZjdmN30ubmF2Ym94LW9kZHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fXRhYmxlLm5hdmJveCt0YWJsZS5uYXZib3h7bWFyZ2luLXRvcDotMXB4fS5uYXZib3ggLmhsaXN0IHRkIGRsLC5uYXZib3ggLmhsaXN0IHRkIG9sLC5uYXZib3ggLmhsaXN0IHRkIHVsLC5uYXZib3ggdGQuaGxpc3QgZGwsLm5hdmJveCB0ZC5obGlzdCBvbCwubmF2Ym94IHRkLmhsaXN0IHVse3BhZGRpbmc6LjEyNWVtIDB9b2wrdGFibGUubmF2Ym94LHVsK3RhYmxlLm5hdmJveHttYXJnaW4tdG9wOi41ZW19Lm5hdmJhcntkaXNwbGF5OmlubGluZTtmb250LXNpemU6ODglO2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubmF2YmFyIHVse2Rpc3BsYXk6aW5saW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubmF2YmFyIGxpe3dvcmQtc3BhY2luZzotMC4xMjVlbX0ubmF2YmFyLm1pbmkgbGkgc3Bhbntmb250LXZhcmlhbnQ6c21hbGwtY2Fwc30uaW5mb2JveCAubmF2YmFye2ZvbnQtc2l6ZToxMDAlfS5uYXZib3ggLm5hdmJhcntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMDAlfS5uYXZib3gtdGl0bGUgLm5hdmJhcntmbG9hdDpsZWZ0O3RleHQtYWxpZ246bGVmdDttYXJnaW4tcmlnaHQ6LjVlbTt3aWR0aDo2ZW19LmNvbGxhcHNlQnV0dG9ue2Zsb2F0OnJpZ2h0O2ZvbnQtd2VpZ2h0Om5vcm1hbDttYXJnaW4tbGVmdDouNWVtO3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6YXV0b30ubmF2Ym94IC5jb2xsYXBzZUJ1dHRvbnt3aWR0aDo2ZW19Lm13LWNvbGxhcHNpYmxlLXRvZ2dsZXtmb250LXdlaWdodDpub3JtYWw7dGV4dC1hbGlnbjpyaWdodH0ubmF2Ym94IC5tdy1jb2xsYXBzaWJsZS10b2dnbGV7d2lkdGg6NmVtfS5pbmZvYm94e2JvcmRlcjoxcHggc29saWQgI2FhYTtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Y29sb3I6YmxhY2s7bWFyZ2luOi41ZW0gMCAuNWVtIDFlbTtwYWRkaW5nOi4yZW07ZmxvYXQ6cmlnaHQ7Y2xlYXI6cmlnaHQ7dGV4dC1hbGlnbjpsZWZ0O2ZvbnQtc2l6ZTo4OCU7bGluZS1oZWlnaHQ6MS41ZW19LmluZm9ib3ggY2FwdGlvbntmb250LXNpemU6MTI1JTtmb250LXdlaWdodDpib2xkfS5pbmZvYm94IHRkLC5pbmZvYm94IHRoe3ZlcnRpY2FsLWFsaWduOnRvcH0uaW5mb2JveC5ib3JkZXJlZHtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9LmluZm9ib3guYm9yZGVyZWQgdGQsLmluZm9ib3guYm9yZGVyZWQgdGh7Ym9yZGVyOjFweCBzb2xpZCAjYWFhfS5pbmZvYm94LmJvcmRlcmVkIC5ib3JkZXJsZXNzIHRkLC5pbmZvYm94LmJvcmRlcmVkIC5ib3JkZXJsZXNzIHRoe2JvcmRlcjowfS5pbmZvYm94LnNpc3RlcnByb2plY3R7d2lkdGg6MjBlbTtmb250LXNpemU6OTAlfS5pbmZvYm94LnN0YW5kYXJkLXRhbGt7Ym9yZGVyOjFweCBzb2xpZCAjYzBjMDkwO2JhY2tncm91bmQtY29sb3I6I2Y4ZWFiYX0uaW5mb2JveC5zdGFuZGFyZC10YWxrLmJvcmRlcmVkIHRkLC5pbmZvYm94LnN0YW5kYXJkLXRhbGsuYm9yZGVyZWQgdGh7Ym9yZGVyOjFweCBzb2xpZCAjYzBjMDkwfS5pbmZvYm94LmJvcmRlcmVkIC5tZXJnZWR0b3Byb3cgdGQsLmluZm9ib3guYm9yZGVyZWQgLm1lcmdlZHRvcHJvdyB0aHtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjYWFhO2JvcmRlci1yaWdodDoxcHggc29saWQgI2FhYX0uaW5mb2JveC5ib3JkZXJlZCAubWVyZ2Vkcm93IHRkLC5pbmZvYm94LmJvcmRlcmVkIC5tZXJnZWRyb3cgdGh7Ym9yZGVyOjA7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjYWFhfS5pbmZvYm94Lmdlb2dyYXBoeXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7bGluZS1oZWlnaHQ6MS4yZW07Zm9udC1zaXplOjkwJX0uaW5mb2JveC5nZW9ncmFwaHkgdGQsLmluZm9ib3guZ2VvZ3JhcGh5IHRoe2JvcmRlci10b3A6MXB4IHNvbGlkICNhYWE7cGFkZGluZzouNGVtIC42ZW0gLjRlbSAuNmVtfS5pbmZvYm94Lmdlb2dyYXBoeSAubWVyZ2VkdG9wcm93IHRkLC5pbmZvYm94Lmdlb2dyYXBoeSAubWVyZ2VkdG9wcm93IHRoe2JvcmRlci10b3A6MXB4IHNvbGlkICNhYWE7cGFkZGluZzouNGVtIC42ZW0gLjJlbSAuNmVtfS5pbmZvYm94Lmdlb2dyYXBoeSAubWVyZ2Vkcm93IHRkLC5pbmZvYm94Lmdlb2dyYXBoeSAubWVyZ2Vkcm93IHRoe2JvcmRlcjowO3BhZGRpbmc6MCAuNmVtIC4yZW0gLjZlbX0uaW5mb2JveC5nZW9ncmFwaHkgLm1lcmdlZGJvdHRvbXJvdyB0ZCwuaW5mb2JveC5nZW9ncmFwaHkgLm1lcmdlZGJvdHRvbXJvdyB0aHtib3JkZXItdG9wOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2FhYTtwYWRkaW5nOjAgLjZlbSAuNGVtIC42ZW19LmluZm9ib3guZ2VvZ3JhcGh5IC5tYXB0YWJsZSB0ZCwuaW5mb2JveC5nZW9ncmFwaHkgLm1hcHRhYmxlIHRoe2JvcmRlcjowO3BhZGRpbmc6MH0ud2lraXRhYmxlLnBsYWlucm93aGVhZGVycyB0aFtzY29wZT1yb3dde2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOmxlZnR9Lndpa2l0YWJsZSB0ZCB1bCwud2lraXRhYmxlIHRkIG9sLC53aWtpdGFibGUgdGQgZGx7dGV4dC1hbGlnbjpsZWZ0fS53aWtpdGFibGUuaGxpc3QgdGQgdWwsLndpa2l0YWJsZS5obGlzdCB0ZCBvbCwud2lraXRhYmxlLmhsaXN0IHRkIGRse3RleHQtYWxpZ246aW5oZXJpdH1kaXYubGlzdGVubGlzdHtiYWNrZ3JvdW5kOnVybCgiLy91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy80LzQ3L1NvdW5kLWljb24uc3ZnIikgbm8tcmVwZWF0IHNjcm9sbCAwIDAgdHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1zaXplOjMwcHg7cGFkZGluZy1sZWZ0OjQwcHh9dGFibGUubXctaGllcm8tdGFibGUgdGR7dmVydGljYWwtYWxpZ246bWlkZGxlfWRpdi5tZWRpYWxpc3R7bWluLWhlaWdodDo1MHB4O21hcmdpbjoxZW07YmFja2dyb3VuZC1wb3NpdGlvbjp0b3AgbGVmdDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9ZGl2Lm1lZGlhbGlzdCB1bHtsaXN0LXN0eWxlLXR5cGU6bm9uZTtsaXN0LXN0eWxlLWltYWdlOm5vbmU7bWFyZ2luOjB9ZGl2Lm1lZGlhbGlzdCB1bCBsaXtwYWRkaW5nLWJvdHRvbTouNWVtfWRpdi5tZWRpYWxpc3QgdWwgbGkgbGl7Zm9udC1zaXplOjkxJTtwYWRkaW5nLWJvdHRvbTowfWRpdiNjb250ZW50IGFbaHJlZiQ9Ii5wZGYiXS5leHRlcm5hbCxkaXYjY29udGVudCBhW2hyZWYqPSIucGRmPyJdLmV4dGVybmFsLGRpdiNjb250ZW50IGFbaHJlZio9Ii5wZGYjIl0uZXh0ZXJuYWwsZGl2I2NvbnRlbnQgYVtocmVmJD0iLlBERiJdLmV4dGVybmFsLGRpdiNjb250ZW50IGFbaHJlZio9Ii5QREY/Il0uZXh0ZXJuYWwsZGl2I2NvbnRlbnQgYVtocmVmKj0iLlBERiMiXS5leHRlcm5hbCxkaXYjbXdfY29udGVudCBhW2hyZWYkPSIucGRmIl0uZXh0ZXJuYWwsZGl2I213X2NvbnRlbnQgYVtocmVmKj0iLnBkZj8iXS5leHRlcm5hbCxkaXYjbXdfY29udGVudCBhW2hyZWYqPSIucGRmIyJdLmV4dGVybmFsLGRpdiNtd19jb250ZW50IGFbaHJlZiQ9Ii5QREYiXS5leHRlcm5hbCxkaXYjbXdfY29udGVudCBhW2hyZWYqPSIuUERGPyJdLmV4dGVybmFsLGRpdiNtd19jb250ZW50IGFbaHJlZio9Ii5QREYjIl0uZXh0ZXJuYWx7YmFja2dyb3VuZDp1cmwoIi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvMi8yMy9JY29ucy1taW5pLWZpbGVfYWNyb2JhdC5naWYiKSBuby1yZXBlYXQgcmlnaHQ7cGFkZGluZy1yaWdodDoxOHB4fWRpdiNjb250ZW50IHNwYW4uUERGbGluayBhLGRpdiNtd19jb250ZW50IHNwYW4uUERGbGluayBhe2JhY2tncm91bmQ6dXJsKCIvL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zLzIvMjMvSWNvbnMtbWluaS1maWxlX2Fjcm9iYXQuZ2lmIikgbm8tcmVwZWF0IHJpZ2h0O3BhZGRpbmctcmlnaHQ6MThweH1kaXYuY29sdW1ucy0yIGRpdi5jb2x1bW57ZmxvYXQ6bGVmdDt3aWR0aDo1MCU7bWluLXdpZHRoOjMwMHB4fWRpdi5jb2x1bW5zLTMgZGl2LmNvbHVtbntmbG9hdDpsZWZ0O3dpZHRoOjMzLjMlO21pbi13aWR0aDoyMDBweH1kaXYuY29sdW1ucy00IGRpdi5jb2x1bW57ZmxvYXQ6bGVmdDt3aWR0aDoyNSU7bWluLXdpZHRoOjE1MHB4fWRpdi5jb2x1bW5zLTUgZGl2LmNvbHVtbntmbG9hdDpsZWZ0O3dpZHRoOjIwJTttaW4td2lkdGg6MTIwcHh9Lm1lc3NhZ2Vib3h7Ym9yZGVyOjFweCBzb2xpZCAjYWFhO2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTt3aWR0aDo4MCU7bWFyZ2luOjAgYXV0byAxZW0gYXV0bztwYWRkaW5nOi4yZW19Lm1lc3NhZ2Vib3gubWVyZ2V7Ym9yZGVyOjFweCBzb2xpZCAjYzBiOGNjO2JhY2tncm91bmQtY29sb3I6I2YwZTVmZjt0ZXh0LWFsaWduOmNlbnRlcn0ubWVzc2FnZWJveC5jbGVhbnVwe2JvcmRlcjoxcHggc29saWQgIzlmOWZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlZmVmZmY7dGV4dC1hbGlnbjpjZW50ZXJ9Lm1lc3NhZ2Vib3guc3RhbmRhcmQtdGFsa3tib3JkZXI6MXB4IHNvbGlkICNjMGMwOTA7YmFja2dyb3VuZC1jb2xvcjojZjhlYWJhO21hcmdpbjo0cHggYXV0b30ubWJveC1pbnNpZGUgLnN0YW5kYXJkLXRhbGssLm1lc3NhZ2Vib3gubmVzdGVkLXRhbGt7Ym9yZGVyOjFweCBzb2xpZCAjYzBjMDkwO2JhY2tncm91bmQtY29sb3I6I2Y4ZWFiYTt3aWR0aDoxMDAlO21hcmdpbjoycHggMDtwYWRkaW5nOjJweH0ubWVzc2FnZWJveC5zbWFsbHt3aWR0aDoyMzhweDtmb250LXNpemU6ODUlO2Zsb2F0OnJpZ2h0O2NsZWFyOmJvdGg7bWFyZ2luOjAgMCAxZW0gMWVtO2xpbmUtaGVpZ2h0OjEuMjVlbX0ubWVzc2FnZWJveC5zbWFsbC10YWxre3dpZHRoOjIzOHB4O2ZvbnQtc2l6ZTo4NSU7ZmxvYXQ6cmlnaHQ7Y2xlYXI6Ym90aDttYXJnaW46MCAwIDFlbSAxZW07bGluZS1oZWlnaHQ6MS4yNWVtO2JhY2tncm91bmQ6I0Y4RUFCQX10aC5tYm94LXRleHQsdGQubWJveC10ZXh0e2JvcmRlcjpub25lO3BhZGRpbmc6LjI1ZW0gLjllbTt3aWR0aDoxMDAlfXRkLm1ib3gtaW1hZ2V7Ym9yZGVyOm5vbmU7cGFkZGluZzoycHggMCAycHggLjllbTt0ZXh0LWFsaWduOmNlbnRlcn10ZC5tYm94LWltYWdlcmlnaHR7Ym9yZGVyOm5vbmU7cGFkZGluZzoycHggLjllbSAycHggMDt0ZXh0LWFsaWduOmNlbnRlcn10ZC5tYm94LWVtcHR5LWNlbGx7Ym9yZGVyOm5vbmU7cGFkZGluZzowO3dpZHRoOjFweH10YWJsZS5hbWJveHttYXJnaW46MCAxMCU7Ym9yZGVyOjFweCBzb2xpZCAjYWFhO2JvcmRlci1sZWZ0OjEwcHggc29saWQgIzFlOTBmZjtiYWNrZ3JvdW5kOiNmYmZiZmJ9dGFibGUuYW1ib3grdGFibGUuYW1ib3h7bWFyZ2luLXRvcDotMXB4fS5hbWJveCB0aC5tYm94LXRleHQsLmFtYm94IHRkLm1ib3gtdGV4dHtwYWRkaW5nOi4yNWVtIC41ZW19LmFtYm94IHRkLm1ib3gtaW1hZ2V7cGFkZGluZzoycHggMCAycHggLjVlbX0uYW1ib3ggdGQubWJveC1pbWFnZXJpZ2h0e3BhZGRpbmc6MnB4IC41ZW0gMnB4IDB9dGFibGUuYW1ib3gtbm90aWNle2JvcmRlci1sZWZ0OjEwcHggc29saWQgIzFlOTBmZn10YWJsZS5hbWJveC1zcGVlZHl7Ym9yZGVyLWxlZnQ6MTBweCBzb2xpZCAjYjIyMjIyO2JhY2tncm91bmQ6I2ZlZX10YWJsZS5hbWJveC1kZWxldGV7Ym9yZGVyLWxlZnQ6MTBweCBzb2xpZCAjYjIyMjIyfXRhYmxlLmFtYm94LWNvbnRlbnR7Ym9yZGVyLWxlZnQ6MTBweCBzb2xpZCAjZjI4NTAwfXRhYmxlLmFtYm94LXN0eWxle2JvcmRlci1sZWZ0OjEwcHggc29saWQgI2Y0YzQzMH10YWJsZS5hbWJveC1tb3Zle2JvcmRlci1sZWZ0OjEwcHggc29saWQgIzk5MzJjY310YWJsZS5hbWJveC1wcm90ZWN0aW9ue2JvcmRlci1sZWZ0OjEwcHggc29saWQgI2JiYX10YWJsZS5pbWJveHttYXJnaW46NHB4IDEwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyOjNweCBzb2xpZCAjMWU5MGZmO2JhY2tncm91bmQ6I2ZiZmJmYn0uaW1ib3ggLm1ib3gtdGV4dCAuaW1ib3h7bWFyZ2luOjAgLTAuNWVtO2Rpc3BsYXk6YmxvY2t9Lm1ib3gtaW5zaWRlIC5pbWJveHttYXJnaW46NHB4fXRhYmxlLmltYm94LW5vdGljZXtib3JkZXI6M3B4IHNvbGlkICMxZTkwZmZ9dGFibGUuaW1ib3gtc3BlZWR5e2JvcmRlcjozcHggc29saWQgI2IyMjIyMjtiYWNrZ3JvdW5kOiNmZWV9dGFibGUuaW1ib3gtZGVsZXRle2JvcmRlcjozcHggc29saWQgI2IyMjIyMn10YWJsZS5pbWJveC1jb250ZW50e2JvcmRlcjozcHggc29saWQgI2YyODUwMH10YWJsZS5pbWJveC1zdHlsZXtib3JkZXI6M3B4IHNvbGlkICNmNGM0MzB9dGFibGUuaW1ib3gtbW92ZXtib3JkZXI6M3B4IHNvbGlkICM5OTMyY2N9dGFibGUuaW1ib3gtcHJvdGVjdGlvbntib3JkZXI6M3B4IHNvbGlkICNiYmF9dGFibGUuaW1ib3gtbGljZW5zZXtib3JkZXI6M3B4IHNvbGlkICM4OGE7YmFja2dyb3VuZDojZjdmOGZmfXRhYmxlLmltYm94LWZlYXR1cmVke2JvcmRlcjozcHggc29saWQgI2NiYTEzNX10YWJsZS5jbWJveHttYXJnaW46M3B4IDEwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyOjFweCBzb2xpZCAjYWFhO2JhY2tncm91bmQ6I0RGRThGRn10YWJsZS5jbWJveC1ub3RpY2V7YmFja2dyb3VuZDojRDhFOEZGfXRhYmxlLmNtYm94LXNwZWVkeXttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweDtib3JkZXI6NHB4IHNvbGlkICNiMjIyMjI7YmFja2dyb3VuZDojRkZEQkRCfXRhYmxlLmNtYm94LWRlbGV0ZXtiYWNrZ3JvdW5kOiNGRkRCREJ9dGFibGUuY21ib3gtY29udGVudHtiYWNrZ3JvdW5kOiNGRkU3Q0V9dGFibGUuY21ib3gtc3R5bGV7YmFja2dyb3VuZDojRkZGOURCfXRhYmxlLmNtYm94LW1vdmV7YmFja2dyb3VuZDojRTREOEZGfXRhYmxlLmNtYm94LXByb3RlY3Rpb257YmFja2dyb3VuZDojRUZFRkUxfXRhYmxlLm9tYm94e21hcmdpbjo0cHggMTAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXI6MXB4IHNvbGlkICNhYWE7YmFja2dyb3VuZDojZjlmOWY5fXRhYmxlLm9tYm94LW5vdGljZXtib3JkZXI6MXB4IHNvbGlkICNhYWF9dGFibGUub21ib3gtc3BlZWR5e2JvcmRlcjoycHggc29saWQgI2IyMjIyMjtiYWNrZ3JvdW5kOiNmZWV9dGFibGUub21ib3gtZGVsZXRle2JvcmRlcjoycHggc29saWQgI2IyMjIyMn10YWJsZS5vbWJveC1jb250ZW50e2JvcmRlcjoxcHggc29saWQgI2YyODUwMH10YWJsZS5vbWJveC1zdHlsZXtib3JkZXI6MXB4IHNvbGlkICNmNGM0MzB9dGFibGUub21ib3gtbW92ZXtib3JkZXI6MXB4IHNvbGlkICM5OTMyY2N9dGFibGUub21ib3gtcHJvdGVjdGlvbntib3JkZXI6MnB4IHNvbGlkICNiYmF9dGFibGUudG1ib3h7bWFyZ2luOjRweCAxMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlcjoxcHggc29saWQgI2MwYzA5MDtiYWNrZ3JvdW5kOiNmOGVhYmF9Lm1lZGlhd2lraSAubWJveC1pbnNpZGUgLnRtYm94e21hcmdpbjoycHggMDt3aWR0aDoxMDAlfS5tYm94LWluc2lkZSAudG1ib3gubWJveC1zbWFsbHtsaW5lLWhlaWdodDoxLjVlbTtmb250LXNpemU6MTAwJX10YWJsZS50bWJveC1zcGVlZHl7Ym9yZGVyOjJweCBzb2xpZCAjYjIyMjIyO2JhY2tncm91bmQ6I2ZlZX10YWJsZS50bWJveC1kZWxldGV7Ym9yZGVyOjJweCBzb2xpZCAjYjIyMjIyfXRhYmxlLnRtYm94LWNvbnRlbnR7Ym9yZGVyOjJweCBzb2xpZCAjZjI4NTAwfXRhYmxlLnRtYm94LXN0eWxle2JvcmRlcjoycHggc29saWQgI2Y0YzQzMH10YWJsZS50bWJveC1tb3Zle2JvcmRlcjoycHggc29saWQgIzk5MzJjY310YWJsZS50bWJveC1wcm90ZWN0aW9uLHRhYmxlLnRtYm94LW5vdGljZXtib3JkZXI6MXB4IHNvbGlkICNjMGMwOTB9dGFibGUuZG1ib3h7Y2xlYXI6Ym90aDttYXJnaW46LjllbSAxZW07Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjYztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjO2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9dGFibGUuZm1ib3h7Y2xlYXI6Ym90aDttYXJnaW46LjJlbSAwO3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjYWFhO2JhY2tncm91bmQ6I2Y5ZjlmOX10YWJsZS5mbWJveC1zeXN0ZW17YmFja2dyb3VuZDojZjlmOWY5fXRhYmxlLmZtYm94LXdhcm5pbmd7Ym9yZGVyOjFweCBzb2xpZCAjYmI3MDcwO2JhY2tncm91bmQ6I2ZmZGJkYn10YWJsZS5mbWJveC1lZGl0bm90aWNle2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9ZGl2Lm13LXdhcm5pbmctd2l0aC1sb2dleGNlcnB0LGRpdi5tdy1sYWctd2Fybi1oaWdoLGRpdi5tdy1jYXNjYWRlcHJvdGVjdGVkd2FybmluZyxkaXYjbXctcHJvdGVjdC1jYXNjYWRlb257Y2xlYXI6Ym90aDttYXJnaW46LjJlbSAwO2JvcmRlcjoxcHggc29saWQgI2JiNzA3MDtiYWNrZ3JvdW5kOiNmZmRiZGI7cGFkZGluZzouMjVlbSAuOWVtfWRpdi5tdy1sYWctd2Fybi1ub3JtYWwsZGl2LmZtYm94LXN5c3RlbXtjbGVhcjpib3RoO21hcmdpbjouMmVtIDA7Ym9yZGVyOjFweCBzb2xpZCAjYWFhO2JhY2tncm91bmQ6I2Y5ZjlmOTtwYWRkaW5nOi4yNWVtIC45ZW19Ym9keS5tZWRpYXdpa2kgdGFibGUubWJveC1zbWFsbHtjbGVhcjpyaWdodDtmbG9hdDpyaWdodDttYXJnaW46NHB4IDAgNHB4IDFlbTt3aWR0aDoyMzhweDtmb250LXNpemU6ODglO2xpbmUtaGVpZ2h0OjEuMjVlbX1ib2R5Lm1lZGlhd2lraSB0YWJsZS5tYm94LXNtYWxsLWxlZnR7bWFyZ2luOjRweCAxZW0gNHB4IDA7d2lkdGg6MjM4cHg7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2ZvbnQtc2l6ZTo4OCU7bGluZS1oZWlnaHQ6MS4yNWVtfS5jb21wYWN0LWFtYm94IHRhYmxlIC5tYm94LWltYWdlLC5jb21wYWN0LWFtYm94IHRhYmxlIC5tYm94LWltYWdlcmlnaHQsLmNvbXBhY3QtYW1ib3ggdGFibGUgLm1ib3gtZW1wdHktY2VsbHtkaXNwbGF5Om5vbmV9LmNvbXBhY3QtYW1ib3ggdGFibGUuYW1ib3h7Ym9yZGVyOm5vbmU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7bWFyZ2luOjAgMCAwIDEuNmVtIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50O3dpZHRoOmF1dG87ZGlzcGxheTpibG9ja31ib2R5Lm1lZGlhd2lraSAuY29tcGFjdC1hbWJveCB0YWJsZS5tYm94LXNtYWxsLWxlZnR7Zm9udC1zaXplOjEwMCU7d2lkdGg6YXV0bzttYXJnaW46MH0uY29tcGFjdC1hbWJveCB0YWJsZSAubWJveC10ZXh0e3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjAhaW1wb3J0YW50fS5jb21wYWN0LWFtYm94IHRhYmxlIC5tYm94LXRleHQtc3BhbntkaXNwbGF5Omxpc3QtaXRlbTtsaW5lLWhlaWdodDoxLjVlbTtsaXN0LXN0eWxlLXR5cGU6c3F1YXJlO2xpc3Qtc3R5bGUtaW1hZ2U6dXJsKC8vYml0cy53aWtpbWVkaWEub3JnL3NraW5zL2NvbW1vbi9pbWFnZXMvYnVsbGV0LmdpZil9LnNraW4tdmVjdG9yIC5jb21wYWN0LWFtYm94IHRhYmxlIC5tYm94LXRleHQtc3BhbntsaXN0LXN0eWxlLXR5cGU6Y2lyY2xlO2xpc3Qtc3R5bGUtaW1hZ2U6dXJsKC8vYml0cy53aWtpbWVkaWEub3JnL3NraW5zL3ZlY3Rvci9pbWFnZXMvYnVsbGV0LWljb24ucG5nKX0uY29tcGFjdC1hbWJveCAuaGlkZS13aGVuLWNvbXBhY3R7ZGlzcGxheTpub25lfWRpdi5ub2FydGljbGV0ZXh0e2JvcmRlcjpub25lO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7cGFkZGluZzowfS52aXN1YWxoaWRle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTEwMDAwcHg7dG9wOmF1dG87d2lkdGg6MXB4O2hlaWdodDoxcHg7b3ZlcmZsb3c6aGlkZGVufSN3cFNhdmV7Zm9udC13ZWlnaHQ6Ym9sZH0uaGlkZGVuU3RydWN0dXJle2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudDtjb2xvcjojZjAwO2JhY2tncm91bmQtY29sb3I6IzBmMH0uY2hlY2staWNvbiBhLm5ld3tkaXNwbGF5Om5vbmU7c3BlYWs6bm9uZX0ubm91bmRlcmxpbmVzIGEsLklQQSBhOmxpbmssLklQQSBhOnZpc2l0ZWR7dGV4dC1kZWNvcmF0aW9uOm5vbmUhaW1wb3J0YW50fWRpdi5OYXZGcmFtZXttYXJnaW46MDtwYWRkaW5nOjRweDtib3JkZXI6MXB4IHNvbGlkICNhYWE7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2ZvbnQtc2l6ZTo5NSV9ZGl2Lk5hdkZyYW1lK2Rpdi5OYXZGcmFtZXtib3JkZXItdG9wLXN0eWxlOm5vbmU7Ym9yZGVyLXRvcC1zdHlsZTpoaWRkZW59ZGl2Lk5hdlBpY3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7bWFyZ2luOjA7cGFkZGluZzoycHg7ZmxvYXQ6bGVmdH1kaXYuTmF2RnJhbWUgZGl2Lk5hdkhlYWR7aGVpZ2h0OjEuNmVtO2ZvbnQtd2VpZ2h0OmJvbGQ7YmFja2dyb3VuZC1jb2xvcjojY2NmO3Bvc2l0aW9uOnJlbGF0aXZlfWRpdi5OYXZGcmFtZSBwLGRpdi5OYXZGcmFtZSBkaXYuTmF2Q29udGVudCxkaXYuTmF2RnJhbWUgZGl2Lk5hdkNvbnRlbnQgcHtmb250LXNpemU6MTAwJX1kaXYuTmF2RW5ke21hcmdpbjowO3BhZGRpbmc6MDtsaW5lLWhlaWdodDoxcHg7Y2xlYXI6Ym90aH1hLk5hdlRvZ2dsZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDozcHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZTo5MCV9LnJlbGxpbmssLmRhYmxpbmt7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZy1sZWZ0OjEuNmVtO21hcmdpbi1ib3R0b206LjVlbX0ucmVsbGluayBpLC5kYWJsaW5rIGl7Zm9udC1zdHlsZTpub3JtYWx9Lmxpc3RpZnkgdGR7ZGlzcGxheTpsaXN0LWl0ZW19Lmxpc3RpZnkgdHJ7ZGlzcGxheTpibG9ja30ubGlzdGlmeSB0YWJsZXtkaXNwbGF5OmJsb2NrfS5nZW8tZGVmYXVsdCwuZ2VvLWRtcywuZ2VvLWRlY3tkaXNwbGF5OmlubGluZX0uZ2VvLW5vbmRlZmF1bHQsLmdlby1tdWx0aS1wdW5jdHtkaXNwbGF5Om5vbmV9LmxvbmdpdHVkZSwubGF0aXR1ZGV7d2hpdGUtc3BhY2U6bm93cmFwfS5ub251bXRvYyAudG9jbnVtYmVye2Rpc3BsYXk6bm9uZX0ubm9udW10b2MgI3RvYyB1bCwubm9udW10b2MgLnRvYyB1bHtsaW5lLWhlaWdodDoxLjVlbTtsaXN0LXN0eWxlOm5vbmUgbm9uZTttYXJnaW46LjNlbSAwIDA7cGFkZGluZzowfS5ub251bXRvYyAjdG9jIHVsIHVsLC5ub251bXRvYyAudG9jIHVsIHVse21hcmdpbjowIDAgMCAyZW19LnRvY2xpbWl0LTIgLnRvY2xldmVsLTEgdWwsLnRvY2xpbWl0LTMgLnRvY2xldmVsLTIgdWwsLnRvY2xpbWl0LTQgLnRvY2xldmVsLTMgdWwsLnRvY2xpbWl0LTUgLnRvY2xldmVsLTQgdWwsLnRvY2xpbWl0LTYgLnRvY2xldmVsLTUgdWwsLnRvY2xpbWl0LTcgLnRvY2xldmVsLTYgdWx7ZGlzcGxheTpub25lfWJsb2NrcXVvdGUudGVtcGxhdGVxdW90ZXttYXJnaW4tdG9wOjB9YmxvY2txdW90ZS50ZW1wbGF0ZXF1b3RlIGRpdi50ZW1wbGF0ZXF1b3RlY2l0ZXtsaW5lLWhlaWdodDoxZW07dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmctbGVmdDoyZW07bWFyZ2luLXRvcDowfWJsb2NrcXVvdGUudGVtcGxhdGVxdW90ZSBkaXYudGVtcGxhdGVxdW90ZWNpdGUgY2l0ZXtmb250LXNpemU6ODUlfWRpdi51c2VyLWJsb2Nre3BhZGRpbmc6NXB4O21hcmdpbi1ib3R0b206LjVlbTtib3JkZXI6MXB4IHNvbGlkICNBOUE5QTk7YmFja2dyb3VuZC1jb2xvcjojRkZFRkQ1fS5ub3dyYXAsLm5vd3JhcGxpbmtzIGEsLm5vd3JhcGxpbmtzIC5zZWxmbGluayxzdXAucmVmZXJlbmNlIGF7d2hpdGUtc3BhY2U6bm93cmFwfS53cmFwLC53cmFwbGlua3MgYXt3aGl0ZS1zcGFjZTpub3JtYWx9LnRlbXBsYXRlLWRvY3VtZW50YXRpb257Y2xlYXI6Ym90aDttYXJnaW46MWVtIDAgMCAwO2JvcmRlcjoxcHggc29saWQgI2FhYTtiYWNrZ3JvdW5kLWNvbG9yOiNlY2ZjZjQ7cGFkZGluZzoxZW19LmltYWdlbWFwLWlubGluZSBkaXZ7ZGlzcGxheTppbmxpbmV9I3dwVXBsb2FkRGVzY3JpcHRpb257aGVpZ2h0OjEzZW19LnRodW1iaW5uZXJ7bWluLXdpZHRoOjEwMHB4fWRpdi50aHVtYiAudGh1bWJpbWFnZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9ZGl2I2NvbnRlbnQgLmdhbGxlcnlib3ggZGl2LnRodW1ie2JhY2tncm91bmQtY29sb3I6I0Y5RjlGOX0uZ2FsbGVyeWJveCAudGh1bWIgaW1ne2JhY2tncm91bmQ6I2ZmZiB1cmwoLy9iaXRzLndpa2ltZWRpYS5vcmcvc2tpbnMvY29tbW9uL2ltYWdlcy9DaGVja2VyLTE2eDE2LnBuZykgcmVwZWF0fS5ucy0wIC5nYWxsZXJ5Ym94IC50aHVtYiBpbWcsLm5zLTIgLmdhbGxlcnlib3ggLnRodW1iIGltZywubnMtMTAwIC5nYWxsZXJ5Ym94IC50aHVtYiBpbWcsLm5vY2hlY2tlciAuZ2FsbGVyeWJveCAudGh1bWIgaW1ne2JhY2tncm91bmQ6I2ZmZn0jbXctc3ViY2F0ZWdvcmllcywjbXctcGFnZXMsI213LWNhdGVnb3J5LW1lZGlhLCNmaWxlaGlzdG9yeSwjd2lraVByZXZpZXcsI3dpa2lEaWZme2NsZWFyOmJvdGh9Ym9keS5ydGwgI213LWFydGljbGVmZWVkYmFja3Y1LGJvZHkucnRsICNtdy1hcnRpY2xlZmVlZGJhY2t7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjFlbTtjbGVhcjpyaWdodDtmbG9hdDpyaWdodH0ud3BiIC53cGItaGVhZGVye2Rpc3BsYXk6bm9uZX0ud3Bicy1pbm5lciAud3BiIC53cGItaGVhZGVye2Rpc3BsYXk6YmxvY2t9LndwYnMtaW5uZXIgLndwYiAud3BiLWhlYWRlcntkaXNwbGF5OnRhYmxlLXJvd30ud3Bicy1pbm5lciAud3BiLW91dHNpZGV7ZGlzcGxheTpub25lfS5tdy10YWctbWFya2Vyc3tmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtc2l6ZTo5MCV9LnN5c29wLXNob3csLmFjY291bnRjcmVhdG9yLXNob3csLnRlbXBsYXRlZWRpdG9yLXNob3csLmF1dG9jb25maXJtZWQtc2hvd3tkaXNwbGF5Om5vbmV9LnZlLWluaXQtbXctdmlld1BhZ2VUYXJnZXQtdG9vbGJhci1lZGl0Tm90aWNlcy1ub3RpY2UgLmVkaXRub3RpY2UtcmVkbGlua3tkaXNwbGF5Om5vbmUhaW1wb3J0YW50fXVsLnBlcm1pc3Npb25zLWVycm9ycz5saXtsaXN0LXN0eWxlOm5vbmUgbm9uZX11bC5wZXJtaXNzaW9ucy1lcnJvcnN7bWFyZ2luOjB9Ym9keS5wYWdlLVNwZWNpYWxfVXNlckxvZ2luIC5tdy1sYWJlbCBsYWJlbCxib2R5LnBhZ2UtU3BlY2lhbF9Vc2VyTG9naW5fc2lnbnVwIC5tdy1sYWJlbCBsYWJlbHt3aGl0ZS1zcGFjZTpub3dyYXB9LnRyYW5zYm9yZGVye2JvcmRlcjpzb2xpZCB0cmFuc3BhcmVudH0qIGh0bWwgLnRyYW5zYm9yZGVye2JvcmRlcjpzb2xpZCAjMDAwMDAxO2ZpbHRlcjpjaHJvbWEoY29sb3I9IzAwMDAwMSl9LnVwZGF0ZWRtYXJrZXJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMDA2NDAwfWxpLm13LWNoYW5nZXNsaXN0LWxpbmUtd2F0Y2hlZCAubXctdGl0bGUsdGFibGUubXctY2hhbmdlc2xpc3QtbGluZS13YXRjaGVkIC5tdy10aXRsZSx0YWJsZS5tdy1lbmhhbmNlZC13YXRjaCAubXctZW5oYW5jZWQtcmN0aW1le2ZvbnQtd2VpZ2h0Om5vcm1hbH1zcGFuLnRleGh0bWx7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsIk5pbWJ1cyBSb21hbiBObzkgTCIsVGltZXMsc2VyaWY7Zm9udC1zaXplOjExOCU7d2hpdGUtc3BhY2U6bm93cmFwfXNwYW4udGV4aHRtbCBzcGFuLnRleGh0bWx7Zm9udC1zaXplOjEwMCV9ZGl2Lm13LWdlc2hpIGRpdixkaXYubXctZ2VzaGkgZGl2IHByZSxzcGFuLm13LWdlc2hpLHByZS5zb3VyY2UtY3NzLHByZS5zb3VyY2UtamF2YXNjcmlwdCxwcmUuc291cmNlLWx1YXtmb250LWZhbWlseTptb25vc3BhY2UsQ291cmllciFpbXBvcnRhbnR9dGFibGUjbXctcHJlZml4aW5kZXgtbGlzdC10YWJsZSx0YWJsZSNtdy1wcmVmaXhpbmRleC1uYXYtdGFibGV7d2lkdGg6OTglfS5wb3J0YWwtY29sdW1uLWxlZnR7ZmxvYXQ6bGVmdDt3aWR0aDo1MCV9LnBvcnRhbC1jb2x1bW4tcmlnaHR7ZmxvYXQ6cmlnaHQ7d2lkdGg6NDklfS5wb3J0YWwtY29sdW1uLWxlZnQtd2lkZXtmbG9hdDpsZWZ0O3dpZHRoOjYwJX0ucG9ydGFsLWNvbHVtbi1yaWdodC1uYXJyb3d7ZmxvYXQ6cmlnaHQ7d2lkdGg6MzklfS5wb3J0YWwtY29sdW1uLWxlZnQtZXh0cmEtd2lkZXtmbG9hdDpsZWZ0O3dpZHRoOjcwJX0ucG9ydGFsLWNvbHVtbi1yaWdodC1leHRyYS1uYXJyb3d7ZmxvYXQ6cmlnaHQ7d2lkdGg6MjklfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo4MDBweCl7LnBvcnRhbC1jb2x1bW4tbGVmdCwucG9ydGFsLWNvbHVtbi1yaWdodCwucG9ydGFsLWNvbHVtbi1sZWZ0LXdpZGUsLnBvcnRhbC1jb2x1bW4tcmlnaHQtbmFycm93LC5wb3J0YWwtY29sdW1uLWxlZnQtZXh0cmEtd2lkZSwucG9ydGFsLWNvbHVtbi1yaWdodC1leHRyYS1uYXJyb3d7ZmxvYXQ6aW5oZXJpdDt3aWR0aDppbmhlcml0fX0jYm9keUNvbnRlbnQgLmxldHRlcmhlYWR7YmFja2dyb3VuZC1pbWFnZTp1cmwoJy8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvZS9lMC9UYW4tcGFnZS1jb3JuZXIucG5nJyk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O3BhZGRpbmc6MmVtO2JhY2tncm91bmQtY29sb3I6I2ZhZjlmMn0udHJlZXZpZXcgdWx7cGFkZGluZzowO21hcmdpbjowfS50cmVldmlldyBsaXtwYWRkaW5nOjA7bWFyZ2luOjA7bGlzdC1zdHlsZS10eXBlOm5vbmU7bGlzdC1zdHlsZS1pbWFnZTpub25lO3pvb206MX0udHJlZXZpZXcgbGkgbGl7YmFja2dyb3VuZDp1cmwoIi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvZi9mMi9UcmVldmlldy1ncmV5LWxpbmUucG5nIikgbm8tcmVwZWF0IDAgLTI5ODFweDtwYWRkaW5nLWxlZnQ6MjBweDt0ZXh0LWluZGVudDouM2VtfS50cmVldmlldyBsaSBsaS5sYXN0bGluZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTU5NzFweH0udHJlZXZpZXcgbGkuZW1wdHlsaW5lPnVse21hcmdpbi1sZWZ0Oi0xcHh9LnRyZWV2aWV3IGxpLmVtcHR5bGluZT51bD5saTpmaXJzdC1jaGlsZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgOXB4fXRkIC5zb3J0a2V5LHRoIC5zb3J0a2V5e2Rpc3BsYXk6bm9uZTtzcGVhazpub25lfS5pbnB1dGJveC1oaWRlY2hlY2tib3hlcyBmb3JtIC5pbnB1dGJveC1lbGVtZW50e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9I2VkaXRwYWdlLXNwZWNpYWxjaGFyc3tkaXNwbGF5Om5vbmV9LmstcGxheWVyIC5rLWF0dHJpYnV0aW9ue3Zpc2liaWxpdHk6aGlkZGVufUBtZWRpYSgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MS41KSwobWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOjEuNSksKG1pbi1yZXNvbHV0aW9uOjEuNWRwcHgpLChtaW4tcmVzb2x1dGlvbjoxNDRkcGkpeyNwLWxvZ28gYXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiLy91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi9iL2IzL1dpa2lwZWRpYS1sb2dvLXYyLWVuLnN2Zy8yMDRweC1XaWtpcGVkaWEtbG9nby12Mi1lbi5zdmcucG5nIikhaW1wb3J0YW50O2JhY2tncm91bmQtc2l6ZToxMzZweCBhdXRvfX1AbWVkaWEoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjIpLChtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86MiksKG1pbi1yZXNvbHV0aW9uOjJkcHB4KSwobWluLXJlc29sdXRpb246MTkyZHBpKXsjcC1sb2dvIGF7YmFja2dyb3VuZC1pbWFnZTp1cmwoIi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvYi9iMy9XaWtpcGVkaWEtbG9nby12Mi1lbi5zdmcvMjcwcHgtV2lraXBlZGlhLWxvZ28tdjItZW4uc3ZnLnBuZyIpIWltcG9ydGFudDtiYWNrZ3JvdW5kLXNpemU6MTM1cHggYXV0b319Lm5zLTAgLmFtYm94LC5ucy0wIC5uYXZib3gsLm5zLTAgLnZlcnRpY2FsLW5hdmJveCwubnMtMCAuaW5mb2JveC5zaXN0ZXJwcm9qZWN0LC5ucy0wIC5kYWJsaW5rLC5ucy0wIC5tZXRhZGF0YSwuZWRpdGxpbmssLm5hdmJhcixhLk5hdlRvZ2dsZSxzcGFuLmNvbGxhcHNlQnV0dG9uLHNwYW4ubXctY29sbGFwc2libGUtdG9nZ2xlLHRoIC5zb3J0a2V5LHRkIC5zb3J0a2V5e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9I2NvbnRlbnQgY2l0ZSBhLmV4dGVybmFsLnRleHQ6YWZ0ZXIsLm5vdXJsZXhwYW5zaW9uIGEuZXh0ZXJuYWwudGV4dDphZnRlciwubm91cmxleHBhbnNpb24gYS5leHRlcm5hbC5hdXRvbnVtYmVyOmFmdGVye2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9dGFibGUuY29sbGFwc2libGUgdHIsZGl2Lk5hdlBpYyxkaXYuTmF2Q29udGVudHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH10YWJsZS5jb2xsYXBzaWJsZSB0cntkaXNwbGF5OnRhYmxlLXJvdyFpbXBvcnRhbnR9I2ZpcnN0SGVhZGluZ3ttYXJnaW46MH0jY29udGVudCBhLmV4dGVybmFsLnRleHQ6YWZ0ZXIsI2NvbnRlbnQgYS5leHRlcm5hbC5hdXRvbnVtYmVyOmFmdGVye3dvcmQtd3JhcDpicmVhay13b3JkfWJvZHkucGFnZS1NYWluX1BhZ2UgI2RlbGV0ZWNvbmZpcm0sYm9keS5wYWdlLU1haW5fUGFnZSAjdC1jaXRlLGJvZHkucGFnZS1NYWluX1BhZ2UgI2Zvb3Rlci1pbmZvLWxhc3Rtb2QsYm9keS5hY3Rpb24tdmlldy5wYWdlLU1haW5fUGFnZSAjc2l0ZVN1Yixib2R5LmFjdGlvbi12aWV3LnBhZ2UtTWFpbl9QYWdlICNjb250ZW50U3ViLGJvZHkuYWN0aW9uLXZpZXcucGFnZS1NYWluX1BhZ2UgaDEuZmlyc3RIZWFkaW5ne2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9Ym9keS5wYWdlLU1haW5fUGFnZSAjbXAtdG9wYmFubmVye21hcmdpbi10b3A6MCFpbXBvcnRhbnR9I2Nvb3JkaW5hdGVze3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7ZmxvYXQ6cmlnaHQ7bWFyZ2luOjA7cGFkZGluZzowO2xpbmUtaGVpZ2h0OjEuNWVtO3RleHQtYWxpZ246cmlnaHQ7dGV4dC1pbmRlbnQ6MDtmb250LXNpemU6ODUlO3RleHQtdHJhbnNmb3JtOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRpdi50b3BpY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMmVtO21hcmdpbi1yaWdodDotMTBweDtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH1kaXYuZmxhZ2dlZHJldnNfc2hvcnR7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0zZW07cmlnaHQ6ODBweDt6LWluZGV4OjE7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6LTEwcHh9Ym9keS5ydGwgI3Byb3RlY3RlZC1pY29ue2xlZnQ6NTVweH1ib2R5LnJ0bCAjc3Bva2VuLWljb24sYm9keS5ydGwgI2NvbW1vbnMtaWNvbntsZWZ0OjMwcHh9Ym9keS5ydGwgI2ZlYXR1cmVkLXN0YXJ7bGVmdDoxMHB4fWRpdi52ZWN0b3JNZW51IGRpdnt6LWluZGV4OjJ9I3NpdGVTdWJ7ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjkyJX1saS5HQXtsaXN0LXN0eWxlLWltYWdlOnVybCgvL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zLzQvNDIvTW9ub2Jvb2stYnVsbGV0LWdhLnBuZyl9bGkuRkF7bGlzdC1zdHlsZS1pbWFnZTp1cmwoLy91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy9kL2Q0L01vbm9ib29rLWJ1bGxldC1zdGFyLnBuZyl9bGkubXctY2hhbmdlc2xpc3QtbGluZS13YXRjaGVkLGxpLm13LWhpc3RvcnktbGluZS11cGRhdGVke2xpc3Qtc3R5bGUtaW1hZ2U6dXJsKC8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvYy9jMi9DaGFuZ2VkQnVsbGV0VmVjdG9yLnBuZyl9I2JvZHlDb250ZW50IGEuZXh0ZXJuYWxbaHJlZiBePSJodHRwczovLyJdLC5saW5rLWh0dHBze2JhY2tncm91bmQ6dXJsKC8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2VuLzAvMDAvTG9ja19pY29uX2JsdWUuZ2lmKSBjZW50ZXIgcmlnaHQgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MTZweH1kaXYucmVkaXJlY3RNc2cgaW1ne3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfS5yZWRpcmVjdFRleHR7Zm9udC1zaXplOjE1MCU7bWFyZ2luOjVweH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vYmVuY2gvd3JpdGUucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vYmVuY2gvd3JpdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOWUxMWQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2JlbmNoL3dyaXRlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzQ0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyAtKi0gY29kaW5nOiBhc2NpaSAtKi0KLXIiIiIKLT09PT09PT09PT09PT09PT09PT09PT09PT0KLSBXcml0ZSBiZW5jaG1hcmsgcmVzdWx0cwotPT09PT09PT09PT09PT09PT09PT09PT09PQotCi1Xcml0ZSBiZW5jaG1hcmsgcmVzdWx0cy4KLQotOkNvcHlyaWdodDoKLQotIENvcHlyaWdodCAyMDE0Ci0gQW5kclx4ZTkgTWFsbyBvciBoaXMgbGljZW5zb3JzLCBhcyBhcHBsaWNhYmxlCi0KLTpMaWNlbnNlOgotCi0gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1Vc2FnZTo6Ci0KLSAgICBweXRob24gLW1iZW5jaC53cml0ZSBbLXAgcGxhaW5dIFstdCB0YWJsZV0gPHBpY2tsZWQKLQotICAgIC1wIHBsYWluICBQbGFpbiBmaWxlIHRvIHdyaXRlIHRvIChsaWtlIGRvY3MvQkVOQ0hNQVJLUykuCi0gICAgLXQgdGFibGUgIFRhYmxlIGZpbGUgdG8gd3JpdGUgdG8gKGxpa2UgZG9jcy9fdXNlcmRvYy9iZW5jaG1hcmsudHh0KS4KLQotIiIiCi1pZiBfX2RvY19fOgotICAgIF9fZG9jX18gPSBfX2RvY19fLmVuY29kZSgnYXNjaWknKS5kZWNvZGUoJ3VuaWNvZGVfZXNjYXBlJykKLV9fYXV0aG9yX18gPSByIkFuZHJceGU5IE1hbG8iLmVuY29kZSgnYXNjaWknKS5kZWNvZGUoJ3VuaWNvZGVfZXNjYXBlJykKLV9fZG9jZm9ybWF0X18gPSAicmVzdHJ1Y3R1cmVkdGV4dCBlbiIKLV9fbGljZW5zZV9fID0gIkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCIKLV9fdmVyc2lvbl9fID0gIjEuMC4wIgotCi1pbXBvcnQgb3MgYXMgX29zCi1pbXBvcnQgcmUgYXMgX3JlCi1pbXBvcnQgc3lzIGFzIF9zeXMKLQotCi10cnk6Ci0gICAgdW5pY29kZQotZXhjZXB0IE5hbWVFcnJvcjoKLSAgICBkZWYgdW5pKHYpOgotICAgICAgICBpZiBoYXNhdHRyKHYsICdkZWNvZGUnKToKLSAgICAgICAgICAgIHJldHVybiB2LmRlY29kZSgnbGF0aW4tMScpCi0gICAgICAgIHJldHVybiBzdHIodikKLWVsc2U6Ci0gICAgZGVmIHVuaSh2KToKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCB1bmljb2RlKToKLSAgICAgICAgICAgIHJldHVybiB2LmVuY29kZSgndXRmLTgnKQotICAgICAgICByZXR1cm4gc3RyKHYpCi0KLQotZGVmIHdyaXRlX3RhYmxlKGZpbGVuYW1lLCByZXN1bHRzKToKLSAgICAiIiIKLSAgICBPdXRwdXQgdGFibGVkIGJlbmNobWFyayByZXN1bHRzCi0KLSAgICA6UGFyYW1ldGVyczoKLSAgICAgIGBmaWxlbmFtZWAgOiBgYHN0cmBgCi0gICAgICAgIEZpbGVuYW1lIHRvIHdyaXRlIHRvCi0KLSAgICAgIGByZXN1bHRzYCA6IGBgbGlzdGBgCi0gICAgICAgIFJlc3VsdHMKLSAgICAiIiIKLSAgICB0cnk6Ci0gICAgICAgIG5leHQKLSAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICBuZXh0ID0gbGFtYmRhIGk6IChnZXRhdHRyKGksICduZXh0JywgTm9uZSkgb3IgaS5fX25leHRfXykoKQotICAgIHRyeToKLSAgICAgICAgY21wCi0gICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgY21wID0gbGFtYmRhIGEsIGI6IChhID4gYikgLSAoYSA8IGIpCi0KLSAgICBuYW1lcyA9IFsKLSAgICAgICAgKCdjc3NtaW4nLCAnWVVJIFBvcnQnKSwKLSAgICAgICAgKCdyY3NzbWluJywgJ3xyY3NzbWlufCcpLAotICAgICAgICAoJ19yY3NzbWluJywgcidfXCB8cmNzc21pbnwnKSwKLSAgICBdCi0gICAgYmVuY2hlZF9wZXJfdGFibGUgPSAyCi0KLSAgICByZXN1bHRzID0gc29ydGVkKHJlc3VsdHMsIHJldmVyc2U9VHJ1ZSkKLQotICAgICMgRmlyc3Qgd2UgdHJhbnNmb3JtIG91ciBkYXRhIGludG8gYSB0YWJsZSAobGlzdCBvZiBsaXN0cykKLSAgICBweXRob25zLCB3aWR0aHMgPSBbXSwgWzBdICogKGJlbmNoZWRfcGVyX3RhYmxlICsgMSkKLSAgICBsYXN0X3ZlcnNpb24gPSBOb25lCi0gICAgZm9yIHZlcnNpb24sIF8sIHJlc3VsdCBpbiByZXN1bHRzOgotICAgICAgICB2ZXJzaW9uID0gdW5pKHZlcnNpb24pCi0gICAgICAgIGlmIG5vdChsYXN0X3ZlcnNpb24gaXMgTm9uZSBvciB2ZXJzaW9uLnN0YXJ0c3dpdGgoJzIuJykpOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgbGFzdF92ZXJzaW9uID0gdmVyc2lvbgotCi0gICAgICAgIG5hbWVzdWIgPSBfcmUuY29tcGlsZShyJyg/Oi1cZCsoPzpcLlxkKykqKT9cLmNzcyQnKS5zdWIKLSAgICAgICAgcmVzdWx0ID0gaXRlcihyZXN1bHQpCi0gICAgICAgIHRhYmxlcyA9IFtdCi0KLSAgICAgICAgIyBnaXZlbiBvdXIgZGF0YSBpdCdzIGVhc2llciB0byBjcmVhdGUgdGhlIHRhYmxlIHRyYW5zcG9zZWQuLi4KLSAgICAgICAgZm9yIGJlbmNoZWQgaW4gcmVzdWx0OgotICAgICAgICAgICAgcm93cyA9IFtbJ05hbWUnXSArIFtkZXNjIGZvciBfLCBkZXNjIGluIG5hbWVzXV0KLSAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKGJlbmNoZWRfcGVyX3RhYmxlKToKLSAgICAgICAgICAgICAgICBpZiBfOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBiZW5jaGVkID0gbmV4dChyZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5hcHBlbmQoWycnXSArIFsnJyBmb3IgXyBpbiBuYW1lc10pCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICAgICAgdGltZXMgPSBkaWN0KCgKLSAgICAgICAgICAgICAgICAgICAgdW5pKHBvcnQpLCAodGltZSwgYmVuY2hlZFsnc2l6ZXMnXVtpZHhdKQotICAgICAgICAgICAgICAgICkgZm9yIGlkeCwgKHBvcnQsIHRpbWUpIGluIGVudW1lcmF0ZShiZW5jaGVkWyd0aW1lcyddKSkKLSAgICAgICAgICAgICAgICBjb2x1bW5zID0gWyclcyAoJS4xZiknICUgKAotICAgICAgICAgICAgICAgICAgICBuYW1lc3ViKCcnLCBfb3MucGF0aC5iYXNlbmFtZSh1bmkoYmVuY2hlZFsnZmlsZW5hbWUnXSkpKSwKLSAgICAgICAgICAgICAgICAgICAgYmVuY2hlZFsnc2l6ZSddIC8gMTAyNC4wLAotICAgICAgICAgICAgICAgICldCi0gICAgICAgICAgICAgICAgZm9yIGlkeCwgKHBvcnQsIF8pIGluIGVudW1lcmF0ZShuYW1lcyk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHBvcnQgbm90IGluIHRpbWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5hcHBlbmQoJ24vYScpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICB0aW1lLCBzaXplID0gdGltZXNbcG9ydF0KLSAgICAgICAgICAgICAgICAgICAgaWYgdGltZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5hcHBlbmQoJyhmYWlsZWQpJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMuYXBwZW5kKCclcyUuMmYgbXMgKCUuMWYgJXMpJyAlICgKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9PSAwIGFuZCAnICcgb3IgJycsCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSAvIDEwMjQuMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9PSAwIGFuZCAnXFwqJyBvciBbJz0nLCAnPicsICc8J11bCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY21wKHNpemUsIGJlbmNoZWRbJ3NpemVzJ11bMF0pCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICApKQotICAgICAgICAgICAgICAgIHJvd3MuYXBwZW5kKGNvbHVtbnMpCi0KLSAgICAgICAgICAgICMgY2FsY3VsYXRlIGNvbHVtbiB3aWR0aHMgKGdsb2JhbCBmb3IgYWxsIHRhYmxlcykKLSAgICAgICAgICAgIGZvciBpZHgsIHJvdyBpbiBlbnVtZXJhdGUocm93cyk6Ci0gICAgICAgICAgICAgICAgd2lkdGhzW2lkeF0gPSBtYXgod2lkdGhzW2lkeF0sIG1heChtYXAobGVuLCByb3cpKSkKLQotICAgICAgICAgICAgIyAuLi4gYW5kIHRyYW5zcG9zZSBpdCBiYWNrLgotICAgICAgICAgICAgdGFibGVzLmFwcGVuZCh6aXAoKnJvd3MpKQotICAgICAgICBweXRob25zLmFwcGVuZCgodmVyc2lvbiwgdGFibGVzKSkKLQotICAgICAgICBpZiBsYXN0X3ZlcnNpb24uc3RhcnRzd2l0aCgnMi4nKToKLSAgICAgICAgICAgIGJyZWFrCi0KLSAgICAjIFNlY29uZCB3ZSBjcmVhdGUgYSByZXN0IHRhYmxlIGZyb20gaXQKLSAgICBsaW5lcyA9IFtdCi0gICAgc2VwYXJhdG9yID0gbGFtYmRhIGM9Jy0nOiAnKycuam9pbihbJyddICsgWwotICAgICAgICBjICogKHdpZHRoICsgMikgZm9yIHdpZHRoIGluIHdpZHRocwotICAgIF0gKyBbJyddKQotCi0gICAgZm9yIGlkeCwgKHZlcnNpb24sIHRhYmxlcykgaW4gZW51bWVyYXRlKHB5dGhvbnMpOgotICAgICAgICBpZiBpZHg6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0KLSAgICAgICAgbGluZSA9ICdQeXRob24gJXMnICUgKHZlcnNpb24sKQotICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd+JyAqIGxlbihsaW5lKSkKLQotICAgICAgICBmb3IgdGFibGUgaW4gdGFibGVzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcuLiByc3QtY2xhc3M6OiBiZW5jaG1hcmsnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotCi0gICAgICAgICAgICBmb3IgaWR4LCByb3cgaW4gZW51bWVyYXRlKHRhYmxlKToKLSAgICAgICAgICAgICAgICBpZiBpZHggPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgIyBoZWFkZXIKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlcGFyYXRvcigpKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3wnLmpvaW4oWycnXSArIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICcgJXMlKnMgJyAlIChjb2wsIGxlbihjb2wpIC0gd2lkdGgsICcnKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHdpZHRoLCBjb2wgaW4gemlwKHdpZHRocywgcm93KQotICAgICAgICAgICAgICAgICAgICBdICsgWycnXSkpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZXBhcmF0b3IoJz0nKSkKLSAgICAgICAgICAgICAgICBlbHNlOiAjIGRhdGEKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd8Jy5qb2luKFsnJ10gKyBbCi0gICAgICAgICAgICAgICAgICAgICAgICBqID09IDAgYW5kICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICVzJSpzICcgJSAoY29sLCBsZW4oY29sKSAtIHdpZHRoc1tqXSwgJycpCi0gICAgICAgICAgICAgICAgICAgICAgICApIG9yICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyUqcyAgJywgJyAlKnMgJ11baWR4ID09IDFdICUgKHdpZHRoc1tqXSwgY29sKQotICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGosIGNvbCBpbiBlbnVtZXJhdGUocm93KQotICAgICAgICAgICAgICAgICAgICBdICsgWycnXSkpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZXBhcmF0b3IoKSkKLQotICAgIGZwbGluZXMgPSBbXQotICAgIGZwID0gb3BlbihmaWxlbmFtZSkKLSAgICB0cnk6Ci0gICAgICAgIGZwaXRlciA9IGl0ZXIoZnApCi0gICAgICAgIGZvciBsaW5lIGluIGZwaXRlcjoKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCi0gICAgICAgICAgICBpZiBsaW5lID09ICcuLiBiZWdpbiB0YWJsZXMnOgotICAgICAgICAgICAgICAgIGJ1ZiA9IFtdCi0gICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZnBpdGVyOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQotICAgICAgICAgICAgICAgICAgICBpZiBsaW5lID09ICcuLiBlbmQgdGFibGVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwbGluZXMuYXBwZW5kKCcuLiBiZWdpbiB0YWJsZXMnKQotICAgICAgICAgICAgICAgICAgICAgICAgZnBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICAgICAgICAgICAgICBmcGxpbmVzLmV4dGVuZChsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAgICAgICAgICAgICAgZnBsaW5lcy5hcHBlbmQoJy4uIGVuZCB0YWJsZXMnKQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gW10KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGxpbmUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZnBsaW5lcy5leHRlbmQoYnVmKQotICAgICAgICAgICAgICAgICAgICBfc3lzLnN0ZGVyci53cml0ZSgiUGxhY2Vob2xkZXIgY29udGFpbmVyIG5vdCBmb3VuZCFcbiIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZwbGluZXMuYXBwZW5kKGxpbmUpCi0gICAgZmluYWxseToKLSAgICAgICAgZnAuY2xvc2UoKQotCi0gICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAndycpCi0gICAgdHJ5OgotICAgICAgICBmcC53cml0ZSgnXG4nLmpvaW4oZnBsaW5lcykgKyAnXG4nKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGZwLmNsb3NlKCkKLQotCi1kZWYgd3JpdGVfcGxhaW4oZmlsZW5hbWUsIHJlc3VsdHMpOgotICAgICIiIgotICAgIE91dHB1dCBwbGFpbiBiZW5jaG1hcmsgcmVzdWx0cwotCi0gICAgOlBhcmFtZXRlcnM6Ci0gICAgICBgZmlsZW5hbWVgIDogYGBzdHJgYAotICAgICAgICBGaWxlbmFtZSB0byB3cml0ZSB0bwotCi0gICAgICBgcmVzdWx0c2AgOiBgYGxpc3RgYAotICAgICAgICBSZXN1bHRzCi0gICAgIiIiCi0gICAgbGluZXMgPSBbXQotICAgIHJlc3VsdHMgPSBzb3J0ZWQocmVzdWx0cywgcmV2ZXJzZT1UcnVlKQotICAgIGZvciBpZHgsICh2ZXJzaW9uLCBpbXBvcnRfbm90ZXMsIHJlc3VsdCkgaW4gZW51bWVyYXRlKHJlc3VsdHMpOgotICAgICAgICBpZiBpZHg6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCckIHB5dGhvbiVzIC1PTyBiZW5jaC9tYWluLnB5IGJlbmNoLyouY3NzJyAlICgKLSAgICAgICAgICAgICcuJy5qb2luKHZlcnNpb24uc3BsaXQoJy4nKVs6Ml0pCi0gICAgICAgICkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnficgKiA3MikKLSAgICAgICAgZm9yIG5vdGUgaW4gaW1wb3J0X25vdGVzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKHVuaShub3RlKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdQeXRob24gUmVsZWFzZTogJXMnICUgKHZlcnNpb24sKSkKLQotICAgICAgICBmb3Igc2luZ2xlIGluIHJlc3VsdDoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQmVuY2htYXJraW5nICVyLi4uICglLjFmIEtpQiknICUgKAotICAgICAgICAgICAgICAgIHVuaShzaW5nbGVbJ2ZpbGVuYW1lJ10pLCBzaW5nbGVbJ3NpemUnXSAvIDEwMjQuMAotICAgICAgICAgICAgKSkKLSAgICAgICAgICAgIGZvciBtc2cgaW4gc2luZ2xlWydtZXNzYWdlcyddOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChtc2cpCi0gICAgICAgICAgICB0aW1lcyA9IFtdCi0gICAgICAgICAgICBzcGFjZSA9IG1heChbbGVuKHVuaShwb3J0KSkgZm9yIHBvcnQsIF8gaW4gc2luZ2xlWyd0aW1lcyddXSkKLSAgICAgICAgICAgIGZvciBpZHgsIChwb3J0LCB0aW1lKSBpbiBlbnVtZXJhdGUoc2luZ2xlWyd0aW1lcyddKToKLSAgICAgICAgICAgICAgICBwb3J0ID0gdW5pKHBvcnQpCi0gICAgICAgICAgICAgICAgaWYgdGltZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgRkFJTEVEICVzIiAlIChwb3J0LCkpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdGltZXMuYXBwZW5kKHRpbWUpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICIgIFRpbWluZyAlcyVzIC4uLiAoJTUuMWYgS2lCICVzKSAlOC4yZiBtcyIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKiAoc3BhY2UgLSBsZW4ocG9ydCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVsnc2l6ZXMnXVtpZHhdIC8gMTAyNC4wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9PSAwIGFuZCAnKicgb3IgWyc9JywgJz4nLCAnPCddWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXAoc2luZ2xlWydzaXplcyddW2lkeF0sIHNpbmdsZVsnc2l6ZXMnXVswXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICBpZiBsZW4odGltZXMpID4gMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzWy0xXSArPSAiIChmYWN0b3I6ICVzKSIgJSAoJywgJy5qb2luKFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJS4yZicgJSAodGltZWQgLyB0aW1lKSBmb3IgdGltZWQgaW4gdGltZXNbOi0xXQotICAgICAgICAgICAgICAgICAgICAgICAgXSkpCi0KLSAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgbGluZXMuYXBwZW5kKCcnKQotICAgIGxpbmVzLmFwcGVuZCgnIyB2aW06IG5vd3JhcCcpCi0gICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAndycpCi0gICAgdHJ5OgotICAgICAgICBmcC53cml0ZSgnXG4nLmpvaW4obGluZXMpICsgJ1xuJykKLSAgICBmaW5hbGx5OgotICAgICAgICBmcC5jbG9zZSgpCi0KLQotZGVmIG1haW4oYXJndj1Ob25lKToKLSAgICAiIiIgTWFpbiAiIiIKLSAgICBpbXBvcnQgZ2V0b3B0IGFzIF9nZXRvcHQKLSAgICBpbXBvcnQgcGlja2xlIGFzIF9waWNrbGUKLQotICAgIGlmIGFyZ3YgaXMgTm9uZToKLSAgICAgICAgYXJndiA9IF9zeXMuYXJndlsxOl0KLSAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBfZ2V0b3B0LmdldG9wdChhcmd2LCAiaHA6dDoiLCBbImhlbHAiXSkKLSAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yOgotICAgICAgICBlID0gX3N5cy5leGNfaW5mbygpWzBdKF9zeXMuZXhjX2luZm8oKVsxXSkKLSAgICAgICAgcHJpbnQgPj4gX3N5cy5zdGRlcnIsICIlc1xuVHJ5ICVzIC1tYmVuY2gud3JpdGUgLS1oZWxwIiAlICgKLSAgICAgICAgICAgIGUsCi0gICAgICAgICAgICBfb3MucGF0aC5iYXNlbmFtZShfc3lzLmV4ZWN1dGFibGUpLAotICAgICAgICApCi0gICAgICAgIF9zeXMuZXhpdCgyKQotCi0gICAgcGxhaW4sIHRhYmxlID0gTm9uZSwgTm9uZQotICAgIGZvciBrZXksIHZhbHVlIGluIG9wdHM6Ci0gICAgICAgIGlmIGtleSBpbiAoIi1oIiwgIi0taGVscCIpOgotICAgICAgICAgICAgcHJpbnQgPj4gX3N5cy5zdGRlcnIsICgKLSAgICAgICAgICAgICAgICAiJXMgLW1iZW5jaC53cml0ZSBbLXAgcGxhaW5dIFstdCB0YWJsZV0gPHBpY2tsZWQiICUgKAotICAgICAgICAgICAgICAgICAgICBfb3MucGF0aC5iYXNlbmFtZShfc3lzLmV4ZWN1dGFibGUpLAotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIF9zeXMuZXhpdCgwKQotICAgICAgICBlbGlmIGtleSA9PSAnLXAnOgotICAgICAgICAgICAgcGxhaW4gPSBzdHIodmFsdWUpCi0gICAgICAgIGVsaWYga2V5ID09ICctdCc6Ci0gICAgICAgICAgICB0YWJsZSA9IHN0cih2YWx1ZSkKLQotICAgIHN0cnVjdCA9IFtdCi0gICAgX3N5cy5zdGRpbiA9IGdldGF0dHIoX3N5cy5zdGRpbiwgJ2RldGFjaCcsIGxhbWJkYTogX3N5cy5zdGRpbikoKQotICAgIHRyeToKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHZlcnNpb24sIGltcG9ydF9ub3RlcywgcmVzdWx0ID0gX3BpY2tsZS5sb2FkKF9zeXMuc3RkaW4pCi0gICAgICAgICAgICBpZiBoYXNhdHRyKHZlcnNpb24sICdkZWNvZGUnKToKLSAgICAgICAgICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbi5kZWNvZGUoJ2xhdGluLTEnKQotICAgICAgICAgICAgc3RydWN0LmFwcGVuZCgodmVyc2lvbiwgaW1wb3J0X25vdGVzLCByZXN1bHQpKQotICAgIGV4Y2VwdCBFT0ZFcnJvcjoKLSAgICAgICAgcGFzcwotCi0gICAgaWYgcGxhaW46Ci0gICAgICAgIHdyaXRlX3BsYWluKHBsYWluLCBzdHJ1Y3QpCi0KLSAgICBpZiB0YWJsZToKLSAgICAgICAgd3JpdGVfdGFibGUodGFibGUsIHN0cnVjdCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvQkVOQ0hNQVJLUyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL0JFTkNITUFSS1MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNDllOWIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvQkVOQ0hNQVJLUworKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLSQgcHl0aG9uMy40IC1PTyBiZW5jaC9tYWluLnB5IGJlbmNoLyouY3NzCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLVB5dGhvbiBSZWxlYXNlOiAzLjQuMgotCi1CZW5jaG1hcmtpbmcgJ2JlbmNoL3dpa2lwZWRpYS5jc3MnLi4uICg4MS4wIEtpQikKLSAgVGltaW5nIGNzc21pbiAgIC4uLiAoIDQ5LjQgS2lCICopICAgMTYzLjExIG1zCi0gIFRpbWluZyByY3NzbWluICAuLi4gKCA0OS42IEtpQiA+KSAgICA0NS40OCBtcyAoZmFjdG9yOiAzLjU5KQotICBUaW1pbmcgX3Jjc3NtaW4gLi4uICggNDkuNiBLaUIgPikgICAgIDAuNDMgbXMgKGZhY3RvcjogMzc4LjkzLCAxMDUuNjYpCi0KLUJlbmNobWFya2luZyAnYmVuY2gvd2lraXBlZGlhLm1pbi5jc3MnLi4uICg0OS40IEtpQikKLSAgVGltaW5nIGNzc21pbiAgIC4uLiAoIDQ5LjQgS2lCICopICAgMTE5LjAwIG1zCi0gIFRpbWluZyByY3NzbWluICAuLi4gKCA0OS40IEtpQiA9KSAgICAyMC45NCBtcyAoZmFjdG9yOiA1LjY4KQotICBUaW1pbmcgX3Jjc3NtaW4gLi4uICggNDkuNCBLaUIgPSkgICAgIDAuMjYgbXMgKGZhY3RvcjogNDU0LjQ1LCA3OS45OCkKLQotCi0kIHB5dGhvbjMuMyAtT08gYmVuY2gvbWFpbi5weSBiZW5jaC8qLmNzcwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1QeXRob24gUmVsZWFzZTogMy4zLjUKLQotQmVuY2htYXJraW5nICdiZW5jaC93aWtpcGVkaWEuY3NzJy4uLiAoODEuMCBLaUIpCi0gIFRpbWluZyBjc3NtaW4gICAuLi4gKCA0OS40IEtpQiAqKSAgIDE4NS4wMSBtcwotICBUaW1pbmcgcmNzc21pbiAgLi4uICggNDkuNiBLaUIgPikgICAgNTkuMzAgbXMgKGZhY3RvcjogMy4xMikKLSAgVGltaW5nIF9yY3NzbWluIC4uLiAoIDQ5LjYgS2lCID4pICAgICAwLjUyIG1zIChmYWN0b3I6IDM1Ni4zOCwgMTE0LjIzKQotCi1CZW5jaG1hcmtpbmcgJ2JlbmNoL3dpa2lwZWRpYS5taW4uY3NzJy4uLiAoNDkuNCBLaUIpCi0gIFRpbWluZyBjc3NtaW4gICAuLi4gKCA0OS40IEtpQiAqKSAgIDEzNi4yNiBtcwotICBUaW1pbmcgcmNzc21pbiAgLi4uICggNDkuNCBLaUIgPSkgICAgMjUuNTEgbXMgKGZhY3RvcjogNS4zNCkKLSAgVGltaW5nIF9yY3NzbWluIC4uLiAoIDQ5LjQgS2lCID0pICAgICAwLjI2IG1zIChmYWN0b3I6IDUxNS4yNCwgOTYuNDcpCi0KLQotJCBweXRob24zLjIgLU9PIGJlbmNoL21haW4ucHkgYmVuY2gvKi5jc3MKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotUHl0aG9uIFJlbGVhc2U6IDMuMi41Ci0KLUJlbmNobWFya2luZyAnYmVuY2gvd2lraXBlZGlhLmNzcycuLi4gKDgxLjAgS2lCKQotICBUaW1pbmcgY3NzbWluICAgLi4uICggNDkuNCBLaUIgKikgICAyMjUuMzIgbXMKLSAgVGltaW5nIHJjc3NtaW4gIC4uLiAoIDQ5LjYgS2lCID4pICAgIDU3LjUxIG1zIChmYWN0b3I6IDMuOTIpCi0gIFRpbWluZyBfcmNzc21pbiAuLi4gKCA0OS42IEtpQiA+KSAgICAgMC40MyBtcyAoZmFjdG9yOiA1MjcuOTgsIDEzNC43NykKLQotQmVuY2htYXJraW5nICdiZW5jaC93aWtpcGVkaWEubWluLmNzcycuLi4gKDQ5LjQgS2lCKQotICBUaW1pbmcgY3NzbWluICAgLi4uICggNDkuNCBLaUIgKikgICAxMjkuNDMgbXMKLSAgVGltaW5nIHJjc3NtaW4gIC4uLiAoIDQ5LjQgS2lCID0pICAgIDI0LjQ1IG1zIChmYWN0b3I6IDUuMjkpCi0gIFRpbWluZyBfcmNzc21pbiAuLi4gKCA0OS40IEtpQiA9KSAgICAgMC4yNSBtcyAoZmFjdG9yOiA1MjYuOTQsIDk5LjU1KQotCi0KLSQgcHl0aG9uMi43IC1PTyBiZW5jaC9tYWluLnB5IGJlbmNoLyouY3NzCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLVB5dGhvbiBSZWxlYXNlOiAyLjcuNwotCi1CZW5jaG1hcmtpbmcgJ2JlbmNoL3dpa2lwZWRpYS5jc3MnLi4uICg4MS4wIEtpQikKLSAgVGltaW5nIGNzc21pbiAgIC4uLiAoIDQ5LjQgS2lCICopICAgMTc1Ljk4IG1zCi0gIFRpbWluZyByY3NzbWluICAuLi4gKCA0OS42IEtpQiA+KSAgICA0Ni4yMiBtcyAoZmFjdG9yOiAzLjgxKQotICBUaW1pbmcgX3Jjc3NtaW4gLi4uICggNDkuNiBLaUIgPikgICAgIDAuNDUgbXMgKGZhY3RvcjogMzkwLjk1LCAxMDIuNjgpCi0KLUJlbmNobWFya2luZyAnYmVuY2gvd2lraXBlZGlhLm1pbi5jc3MnLi4uICg0OS40IEtpQikKLSAgVGltaW5nIGNzc21pbiAgIC4uLiAoIDQ5LjQgS2lCICopICAgMTI2LjE5IG1zCi0gIFRpbWluZyByY3NzbWluICAuLi4gKCA0OS40IEtpQiA9KSAgICAxOS45MiBtcyAoZmFjdG9yOiA2LjMzKQotICBUaW1pbmcgX3Jjc3NtaW4gLi4uICggNDkuNCBLaUIgPSkgICAgIDAuMjcgbXMgKGZhY3RvcjogNDY5Ljc4LCA3NC4xNykKLQotCi0jIHZpbTogbm93cmFwCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9DSEFOR0VTIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvQ0hBTkdFUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE3OWRjZS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9DSEFOR0VTCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotQ2hhbmdlcyB3aXRoIHZlcnNpb24gMS4wLjUKLQotICopIEFkZGVkIHN1cHBvcnQgZm9yIHB5cHkgMi4yCi0KLSAqKSBVcGRhdGVkIGJlbmNobWFya3MKLQotICopIFJlbGludCB3aXRoIG5ld2VyIHB5bGludAotCi0gKikgRml4IGxvY2FsZSBwcm9ibGVtIHdpdGggdGhlIHNldHVwIHNjcmlwdCBvbiBweXRob24zLgotICAgIFN1Ym1pdHRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vc3ZlbnN0YXJvCi0KLQotQ2hhbmdlcyB3aXRoIHZlcnNpb24gMS4wLjQKLQotICopIERvY3VtZW50YXRpb24gYW5kIGJlbmNobWFyayB1cGRhdGVzCi0KLQotQ2hhbmdlcyB3aXRoIHZlcnNpb24gMS4wLjMKLQotICopIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgZ3JvdXBpbmcgQC1ydWxlczoKLSAgICBAc3VwcG9ydHMsIEBkb2N1bWVudCwgQGtleWZyYW1lcwotCi0gKikgQWRkZWQgc3VwcG9ydCBmb3IgUHl0aG9uIDMuNCBhbmQgSnl0aG9uIDIuNwotCi0KLUNoYW5nZXMgd2l0aCB2ZXJzaW9uIDEuMC4yCi0KLSAqKSBBZGRlZCBjb21wYXQgb3B0aW9uIHRvIHNldHVwLnB5IHN1cHBvcnRpbmcgdGhlIHBpcCBpbnN0YWxsZXIKLQotICopIEFkZGVkIHN1cHBvcnQgZm9yIHB5cHkgKDEuOSwgMi4wKQotCi0gKikgQWRkZWQgc3VwcG9ydCBmb3Iganl0aG9uICgyLjUpCi0KLQotQ2hhbmdlcyB3aXRoIHZlcnNpb24gMS4wLjEKLQotICopIEFkZGVkIHN1cHBvcnQgZm9yIFB5dGhvbiAzLjMKLQotCi1DaGFuZ2VzIHdpdGggdmVyc2lvbiAxLjAuMAotCi0gKikgRmlyc3Qgc3RhYmxlIHJlbGVhc2UuCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9DTEFTU0lGSUVSUyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL0NMQVNTSUZJRVJTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGQ1OTY1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL0NMQVNTSUZJRVJTCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDUgLSBQcm9kdWN0aW9uL1N0YWJsZQotRW52aXJvbm1lbnQgOjogV2ViIEVudmlyb25tZW50Ci1JbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzCi1MaWNlbnNlIDo6IE9TSSBBcHByb3ZlZAotTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi1PcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50Ci1Qcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBDCi1Qcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24KLVByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyCi1Qcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMwotUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IEltcGxlbWVudGF0aW9uIDo6IENQeXRob24KLVByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiBJbXBsZW1lbnRhdGlvbiA6OiBKeXRob24KLVByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiBJbXBsZW1lbnRhdGlvbiA6OiBQeVB5Ci1Ub3BpYyA6OiBJbnRlcm5ldCA6OiBXV1cvSFRUUCA6OiBEeW5hbWljIENvbnRlbnQKLVRvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcwotVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzIDo6IFB5dGhvbiBNb2R1bGVzCi1Ub3BpYyA6OiBUZXh0IFByb2Nlc3NpbmcKLVRvcGljIDo6IFRleHQgUHJvY2Vzc2luZyA6OiBGaWx0ZXJzCi1Ub3BpYyA6OiBVdGlsaXRpZXMKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL0RFU0NSSVBUSU9OIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvREVTQ1JJUFRJT04KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MWE3ZmQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvREVTQ1JJUFRJT04KKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi09PT09PT09PT09PT09PQotIENTUyBNaW5pZmllcgotPT09PT09PT09PT09PT0KLQotUkNTU21pbiBpcyBhIENTUyBtaW5pZmllci4KLQotVGhlIG1pbmlmaWVyIGlzIGJhc2VkIG9uIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGBZVUkgY29tcHJlc3NvcmBfXCwgd2hpY2ggaXRzZWxmCi1pcyBiYXNlZCBvbiBgdGhlIHJ1bGUgbGlzdCBieSBJc2FhYyBTY2hsdWV0ZXJgX1wuCi0KLVRoaXMgbW9kdWxlIGlzIGEgcmUtaW1wbGVtZW50YXRpb24gYWltaW5nIGZvciBzcGVlZCBpbnN0ZWFkIG9mIG1heGltdW0KLWNvbXByZXNzaW9uLCBzbyBpdCBjYW4gYmUgdXNlZCBhdCBydW50aW1lIChyYXRoZXIgdGhhbiBkdXJpbmcgYSBwcmVwcm9jZXNzaW5nCi1zdGVwKS4gUkNTU21pbiBkb2VzIHN5bnRhY3RpY2FsIGNvbXByZXNzaW9uIG9ubHkgKHJlbW92aW5nIHNwYWNlcywgY29tbWVudHMKLWFuZCBwb3NzaWJseSBzZW1pY29sb25zKS4gSXQgZG9lcyBub3QgcHJvdmlkZSBzZW1hbnRpYyBjb21wcmVzc2lvbiAobGlrZQotcmVtb3ZpbmcgZW1wdHkgYmxvY2tzLCBjb2xsYXBzaW5nIHJlZHVuZGFudCBwcm9wZXJ0aWVzIGV0YykuIEl0IGRvZXMsIGhvd2V2ZXIsCi1zdXBwb3J0IHZhcmlvdXMgQ1NTIGhhY2tzIChieSBrZWVwaW5nIHRoZW0gd29ya2luZyBhcyBpbnRlbmRlZCkuCi0KLUhlcmUncyBhIGZlYXR1cmUgbGlzdDoKLQotLSBTdHJpbmdzIGFyZSBrZXB0LCBleGNlcHQgdGhhdCBlc2NhcGVkIG5ld2xpbmVzIGFyZSBzdHJpcHBlZAotLSBTcGFjZS9Db21tZW50cyBiZWZvcmUgdGhlIHZlcnkgZW5kIG9yIGJlZm9yZSB2YXJpb3VzIGNoYXJhY3RlcnMgYXJlCi0gIHN0cmlwcGVkOiBgYDp7fSk7PT4rXSwhYGAgKFRoZSBjb2xvbiAoYGA6YGApIGlzIGEgc3BlY2lhbCBjYXNlLCBhIHNpbmdsZQotICBzcGFjZSBpcyBrZXB0IGlmIGl0J3Mgb3V0c2lkZSBhIHJ1bGVzZXQuKQotLSBTcGFjZS9Db21tZW50cyBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb3IgYWZ0ZXIgdmFyaW91cyBjaGFyYWN0ZXJzIGFyZQotICBzdHJpcHBlZDogYGB7fSg9Oj4rWywhYGAKLS0gT3B0aW9uYWwgc3BhY2UgYWZ0ZXIgdW5pY29kZSBlc2NhcGVzIGlzIGtlcHQsIHJlc3AuIHJlcGxhY2VkIGJ5IGEgc2ltcGxlCi0gIHNwYWNlCi0tIHdoaXRlc3BhY2VzIGluc2lkZSBgYHVybCgpYGAgZGVmaW5pdGlvbnMgYXJlIHN0cmlwcGVkCi0tIENvbW1lbnRzIHN0YXJ0aW5nIHdpdGggYW4gZXhjbGFtYXRpb24gbWFyayAoYGAhYGApIGNhbiBiZSBrZXB0IG9wdGlvbmFsbHkuCi0tIEFsbCBvdGhlciBjb21tZW50cyBhbmQvb3Igd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCBieSBhIHNpbmdsZQotICBzcGFjZS4KLS0gTXVsdGlwbGUgY29uc2VjdXRpdmUgc2VtaWNvbG9ucyBhcmUgcmVkdWNlZCB0byBvbmUKLS0gVGhlIGxhc3Qgc2VtaWNvbG9uIHdpdGhpbiBhIHJ1bGVzZXQgaXMgc3RyaXBwZWQKLS0gQ1NTIEhhY2tzIHN1cHBvcnRlZDoKLQotICAtIElFNyBoYWNrIChgYD4vKiovYGApCi0gIC0gTWFjLUlFNSBoYWNrIChgYC8qXCovLi4uLyoqL2BgKQotICAtIFRoZSBib3htb2RlbGhhY2sgaXMgc3VwcG9ydGVkIG5hdHVyYWxseSBiZWNhdXNlIGl0IHJlbGllcyBvbiB2YWxpZCBDU1MyCi0gICAgc3RyaW5ncwotICAtIEJldHdlZW4gYGA6Zmlyc3QtbGluZWBgIGFuZCB0aGUgZm9sbG93aW5nIGNvbW1hIG9yIGN1cmx5IGJyYWNlIGEgc3BhY2UgaXMKLSAgICBpbnNlcnRlZC4gKGFwcGFyZW50bHkgaXQncyBuZWVkZWQgZm9yIElFNikKLSAgLSBTYW1lIGZvciBgYDpmaXJzdC1sZXR0ZXJgYAotCi1yY3NzbWluLmMgaXMgYSByZWltcGxlbWVudGF0aW9uIG9mIHJjc3NtaW4ucHkgaW4gQyBhbmQgaW1wcm92ZXMgcnVudGltZSB1cCB0bwotZmFjdG9yIDEwMCBvciBzbyAoZGVwZW5kaW5nIG9uIHRoZSBpbnB1dCkuIGRvY3MvQkVOQ0hNQVJLUyBpbiB0aGUgc291cmNlCi1kaXN0cmlidXRpb24gY29udGFpbnMgdGhlIGRldGFpbHMuCi0KLUJvdGggcHl0aG9uIDIgKD49IDIuNCkgYW5kIHB5dGhvbiAzIGFyZSBzdXBwb3J0ZWQuCi0KLS4uIF9ZVUkgY29tcHJlc3NvcjogaHR0cHM6Ly9naXRodWIuY29tL3l1aS95dWljb21wcmVzc29yLwotCi0uLiBfdGhlIHJ1bGUgbGlzdCBieSBJc2FhYyBTY2hsdWV0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3MvY3NzbWluLwotCi0KLUNvcHlyaWdodCBhbmQgTGljZW5zZQotfn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLUNvcHlyaWdodCAyMDExIC0gMjAxNAotQW5kcsOpIE1hbG8gb3IgaGlzIGxpY2Vuc29ycywgYXMgYXBwbGljYWJsZS4KLQotVGhlIHdob2xlIHBhY2thZ2UgKGV4Y2VwdCBmb3IgdGhlIGZpbGVzIGluIHRoZSBiZW5jaC8gZGlyZWN0b3J5KSBpcwotZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLiBZb3UnbGwgZmluZCBhIGNvcHkgaW4gdGhlCi1yb290IGRpcmVjdG9yeSBvZiB0aGUgZGlzdHJpYnV0aW9uIG9yIG9ubGluZSBhdDoKLTxodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA+LgotCi0KLUJ1Z3MKLX5+fn4KLQotTm8gYnVncywgb2YgY291cnNlLiA7LSkKLUJ1dCBpZiB5b3UndmUgZm91bmQgb25lIG9yIGhhdmUgYW4gaWRlYSBob3cgdG8gaW1wcm92ZSByY3NzbWluLCBmZWVsIGZyZWUKLXRvIHNlbmQgYSBwdWxsIHJlcXVlc3Qgb24gYGdpdGh1YiA8aHR0cHM6Ly9naXRodWIuY29tL25kcGFya2VyL3Jjc3NtaW4+YF8KLW9yIHNlbmQgYSBtYWlsIHRvIDxyY3NzbWluLWJ1Z3NAcGVybGlnLmRlPi4KLQotCi1BdXRob3IgSW5mb3JtYXRpb24KLX5+fn5+fn5+fn5+fn5+fn5+fgotCi1BbmRyw6kgIm5kIiBNYWxvIDxuZCBwZXJsaWcuZGU+Ci1HUEc6IDB4ODEwM0EzN0UKLQotCi0gICAgSWYgR29kIGludGVuZGVkIHBlb3BsZSB0byBiZSBuYWtlZCwgdGhleSB3b3VsZCBiZSBib3JuIHRoYXQgd2F5LgotICAgIC0tIE9zY2FyIFdpbGRlCi0KLS4uIHZpbTp0dz03MiBzeW50YXg9cmVzdApkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvUFJPVklERVMgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9QUk9WSURFUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZkNGU5ZS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9QUk9WSURFUworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXJjc3NtaW4gKDEuMCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL1NVTU1BUlkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9TVU1NQVJZCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTBlNTM3Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL1NVTU1BUlkKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1DU1MgTWluaWZpZXIKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL2FwaWRvYy9hcGktb2JqZWN0cy50eHQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9hcGlkb2MvYXBpLW9iamVjdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGVkMjIzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL2FwaWRvYy9hcGktb2JqZWN0cy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLXJjc3NtaW4JcmNzc21pbi1tb2R1bGUuaHRtbAotcmNzc21pbi5fX2xpY2Vuc2VfXwlyY3NzbWluLW1vZHVsZS5odG1sI19fbGljZW5zZV9fCi1yY3NzbWluLl9tYWtlX2Nzc21pbglyY3NzbWluLW1vZHVsZS5odG1sI19tYWtlX2Nzc21pbgotcmNzc21pbi5fX2RvY19fCXJjc3NtaW4tbW9kdWxlLmh0bWwjX19kb2NfXwotcmNzc21pbi5fX3BhY2thZ2VfXwlyY3NzbWluLW1vZHVsZS5odG1sI19fcGFja2FnZV9fCi1yY3NzbWluLmNzc21pbglyY3NzbWluLW1vZHVsZS5odG1sI2Nzc21pbgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvYXBpZG9jL2NyYXJyLnBuZyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL2FwaWRvYy9jcmFyci5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2YjQzYzUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvYXBpZG9jL2NyYXJyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL2FwaWRvYy9lcHlkb2MuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvYXBpZG9jL2VweWRvYy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZDQxNzAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvYXBpZG9jL2VweWRvYy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotCi0KLS8qIEVweWRvYyBDU1MgU3R5bGVzaGVldAotICoKLSAqIFRoaXMgc3R5bGVzaGVldCBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUgdGhlIGFwcGVhcmFuY2Ugb2YgZXB5ZG9jJ3MKLSAqIEhUTUwgb3V0cHV0LgotICoKLSAqLwotCi0vKiBEZWZhdWx0IENvbG9ycyAmIFN0eWxlcwotICogICAtIFNldCB0aGUgZGVmYXVsdCBmb3JlZ3JvdW5kICYgYmFja2dyb3VuZCBjb2xvciB3aXRoICdib2R5JzsgYW5kIAotICogICAgIGxpbmsgY29sb3JzIHdpdGggJ2E6bGluaycgYW5kICdhOnZpc2l0ZWQnLgotICogICAtIFVzZSBib2xkIGZvciBkZWNpc2lvbiBsaXN0IHRlcm1zLgotICogICAtIFRoZSBoZWFkaW5nIHN0eWxlcyBkZWZpbmVkIGhlcmUgYXJlIHVzZWQgZm9yIGhlYWRpbmdzICp3aXRoaW4qCi0gKiAgICAgZG9jc3RyaW5nIGRlc2NyaXB0aW9ucy4gIEFsbCBoZWFkaW5ncyB1c2VkIGJ5IGVweWRvYyBpdHNlbGYgdXNlCi0gKiAgICAgZWl0aGVyIGNsYXNzPSdlcHlkb2MnIG9yIGNsYXNzPSd0b2MnIChDU1Mgc3R5bGVzIGZvciBib3RoCi0gKiAgICAgZGVmaW5lZCBiZWxvdykuCi0gKi8KLWJvZHkgICAgICAgICAgICAgICAgICAgICAgICB7IGJhY2tncm91bmQ6ICNmZmZmZmY7IGNvbG9yOiAjMDAwMDAwOyB9Ci1wICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBtYXJnaW4tdG9wOiAwLjVlbTsgbWFyZ2luLWJvdHRvbTogMC41ZW07IH0KLWE6bGluayAgICAgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDAwMGZmOyB9Ci1hOnZpc2l0ZWQgICAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzIwNDA4MDsgfQotZHQgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLWgxICAgICAgICAgICAgICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogKzE0MCU7IGZvbnQtc3R5bGU6IGl0YWxpYzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci1oMiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBmb250LXNpemU6ICsxMjUlOyBmb250LXN0eWxlOiBpdGFsaWM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsgfQotaDMgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiArMTEwJTsgZm9udC1zdHlsZTogaXRhbGljOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQotY29kZSAgICAgICAgICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAxMDAlOyB9Ci0vKiBOLkIuOiBjbGFzcywgbm90IHBzZXVkb2NsYXNzICovCi1hLmxpbmsgICAgICAgICAgICAgICAgICAgICAgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOyB9Ci0gCi0vKiBQYWdlIEhlYWRlciAmIEZvb3RlcgotICogICAtIFRoZSBzdGFuZGFyZCBwYWdlIGhlYWRlciBjb25zaXN0cyBvZiBhIG5hdmlnYXRpb24gYmFyICh3aXRoCi0gKiAgICAgcG9pbnRlcnMgdG8gc3RhbmRhcmQgcGFnZXMgc3VjaCBhcyAnaG9tZScgYW5kICd0cmVlcycpOyBhCi0gKiAgICAgYnJlYWRjcnVtYnMgbGlzdCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbmF2aWdhdGUgdG8gY29udGFpbmluZwotICogICAgIGNsYXNzZXMgb3IgbW9kdWxlczsgb3B0aW9ucyBsaW5rcywgdG8gc2hvdy9oaWRlIHByaXZhdGUKLSAqICAgICB2YXJpYWJsZXMgYW5kIHRvIHNob3cvaGlkZSBmcmFtZXM7IGFuZCBhIHBhZ2UgdGl0bGUgKHVzaW5nCi0gKiAgICAgPGgxPikuICBUaGUgcGFnZSB0aXRsZSBtYXkgYmUgZm9sbG93ZWQgYnkgYSBsaW5rIHRvIHRoZQotICogICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUgKHVzaW5nICdzcGFuLmNvZGVsaW5rJykuCi0gKiAgIC0gVGhlIGZvb3RlciBjb25zaXN0cyBvZiBhIG5hdmlnYXRpb24gYmFyLCBhIHRpbWVzdGFtcCwgYW5kIGEKLSAqICAgICBwb2ludGVyIHRvIGVweWRvYydzIGhvbWVwYWdlLgotICovIAotaDEuZXB5ZG9jICAgICAgICAgICAgICAgICAgIHsgbWFyZ2luOiAwOyBmb250LXNpemU6ICsxNDAlOyBmb250LXdlaWdodDogYm9sZDsgfQotaDIuZXB5ZG9jICAgICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiArMTMwJTsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLWgzLmVweWRvYyAgICAgICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogKzExNSU7IGZvbnQtd2VpZ2h0OiBib2xkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMC4yZW07IH0KLXRkIGgzLmVweWRvYyAgICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogKzExNSU7IGZvbnQtd2VpZ2h0OiBib2xkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfQotdGFibGUubmF2YmFyICAgICAgICAgICAgICAgIHsgYmFja2dyb3VuZDogI2EwYzBmZjsgY29sb3I6ICMwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBncm9vdmUgI2MwZDBkMDsgfQotdGFibGUubmF2YmFyIHRhYmxlICAgICAgICAgIHsgY29sb3I6ICMwMDAwMDA7IH0KLXRoLm5hdmJhci1zZWxlY3QgICAgICAgICAgICB7IGJhY2tncm91bmQ6ICM3MGIwZmY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzAwMDAwMDsgfSAKLXRhYmxlLm5hdmJhciBhICAgICAgICAgICAgICB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfSAgCi10YWJsZS5uYXZiYXIgYTpsaW5rICAgICAgICAgeyBjb2xvcjogIzAwMDBmZjsgfQotdGFibGUubmF2YmFyIGE6dmlzaXRlZCAgICAgIHsgY29sb3I6ICMyMDQwODA7IH0KLXNwYW4uYnJlYWRjcnVtYnMgICAgICAgICAgICB7IGZvbnQtc2l6ZTogODUlOyBmb250LXdlaWdodDogYm9sZDsgfQotc3Bhbi5vcHRpb25zICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiA3MCU7IH0KLXNwYW4uY29kZWxpbmsgICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogODUlOyB9Ci10ZC5mb290ZXIgICAgICAgICAgICAgICAgICAgeyBmb250LXNpemU6IDg1JTsgfQotCi0vKiBUYWJsZSBIZWFkZXJzCi0gKiAgIC0gRWFjaCBzdW1tYXJ5IHRhYmxlIGFuZCBkZXRhaWxzIHNlY3Rpb24gYmVnaW5zIHdpdGggYSAnaGVhZGVyJwotICogICAgIHJvdy4gIFRoaXMgcm93IGNvbnRhaW5zIGEgc2VjdGlvbiB0aXRsZSAobWFya2VkIGJ5Ci0gKiAgICAgJ3NwYW4udGFibGUtaGVhZGVyJykgYXMgd2VsbCBhcyBhIHNob3cvaGlkZSBwcml2YXRlIGxpbmsKLSAqICAgICAobWFya2VkIGJ5ICdzcGFuLm9wdGlvbnMnLCBkZWZpbmVkIGFib3ZlKS4KLSAqICAgLSBTdW1tYXJ5IHRhYmxlcyB0aGF0IGNvbnRhaW4gdXNlci1kZWZpbmVkIGdyb3VwcyBtYXJrIHRob3NlCi0gKiAgICAgZ3JvdXBzIHVzaW5nICdncm91cCBoZWFkZXInIHJvd3MuCi0gKi8KLXRkLnRhYmxlLWhlYWRlciAgICAgICAgICAgICB7IGJhY2tncm91bmQ6ICM3MGIwZmY7IGNvbG9yOiAjMDAwMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzYwODA5MDsgfQotdGQudGFibGUtaGVhZGVyIHRhYmxlICAgICAgIHsgY29sb3I6ICMwMDAwMDA7IH0KLXRkLnRhYmxlLWhlYWRlciB0YWJsZSBhOmxpbmsgICAgICB7IGNvbG9yOiAjMDAwMGZmOyB9Ci10ZC50YWJsZS1oZWFkZXIgdGFibGUgYTp2aXNpdGVkICAgeyBjb2xvcjogIzIwNDA4MDsgfQotc3Bhbi50YWJsZS1oZWFkZXIgICAgICAgICAgIHsgZm9udC1zaXplOiAxMjAlOyBmb250LXdlaWdodDogYm9sZDsgfQotdGguZ3JvdXAtaGVhZGVyICAgICAgICAgICAgIHsgYmFja2dyb3VuZDogI2MwZTBmODsgY29sb3I6ICMwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyBmb250LXN0eWxlOiBpdGFsaWM7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxMTUlOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM2MDgwOTA7IH0KLQotLyogU3VtbWFyeSBUYWJsZXMgKGZ1bmN0aW9ucywgdmFyaWFibGVzLCBldGMpCi0gKiAgIC0gRWFjaCBvYmplY3QgaXMgZGVzY3JpYmVkIGJ5IGEgc2luZ2xlIHJvdyBvZiB0aGUgdGFibGUgd2l0aAotICogICAgIHR3byBjZWxscy4gIFRoZSBsZWZ0IGNlbGwgZ2l2ZXMgdGhlIG9iamVjdCdzIHR5cGUsIGFuZCBpcwotICogICAgIG1hcmtlZCB3aXRoICdjb2RlLnN1bW1hcnktdHlwZScuICBUaGUgcmlnaHQgY2VsbCBnaXZlcyB0aGUKLSAqICAgICBvYmplY3QncyBuYW1lIGFuZCBhIHN1bW1hcnkgZGVzY3JpcHRpb24uCi0gKiAgIC0gQ1NTIHN0eWxlcyBmb3IgdGhlIHRhYmxlJ3MgaGVhZGVyIGFuZCBncm91cCBoZWFkZXJzIGFyZQotICogICAgIGRlZmluZWQgYWJvdmUsIHVuZGVyICdUYWJsZSBIZWFkZXJzJwotICovCi10YWJsZS5zdW1tYXJ5ICAgICAgICAgICAgICAgeyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2U4ZjBmODsgY29sb3I6ICMwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNjA4MDkwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07IH0KLXRkLnN1bW1hcnkgICAgICAgICAgICAgICAgICB7IGJvcmRlcjogMXB4IHNvbGlkICM2MDgwOTA7IH0KLWNvZGUuc3VtbWFyeS10eXBlICAgICAgICAgICB7IGZvbnQtc2l6ZTogODUlOyB9Ci10YWJsZS5zdW1tYXJ5IGE6bGluayAgICAgICAgeyBjb2xvcjogIzAwMDBmZjsgfQotdGFibGUuc3VtbWFyeSBhOnZpc2l0ZWQgICAgIHsgY29sb3I6ICMyMDQwODA7IH0KLQotCi0vKiBEZXRhaWxzIFRhYmxlcyAoZnVuY3Rpb25zLCB2YXJpYWJsZXMsIGV0YykKLSAqICAgLSBFYWNoIG9iamVjdCBpcyBkZXNjcmliZWQgaW4gaXRzIG93biBkaXYuCi0gKiAgIC0gQSBzaW5nbGUtcm93IHN1bW1hcnkgdGFibGUgdy8gdGFibGUtaGVhZGVyIGlzIHVzZWQgYXMKLSAqICAgICBhIGhlYWRlciBmb3IgZWFjaCBkZXRhaWxzIHNlY3Rpb24gKENTUyBzdHlsZSBmb3IgdGFibGUtaGVhZGVyCi0gKiAgICAgaXMgZGVmaW5lZCBhYm92ZSwgdW5kZXIgJ1RhYmxlIEhlYWRlcnMnKS4KLSAqLwotdGFibGUuZGV0YWlscyAgICAgICAgICAgICAgIHsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlOGYwZjg7IGNvbG9yOiAjMDAwMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzYwODA5MDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogLjJlbSAwIDAgMDsgfQotdGFibGUuZGV0YWlscyB0YWJsZSAgICAgICAgIHsgY29sb3I6ICMwMDAwMDA7IH0KLXRhYmxlLmRldGFpbHMgYTpsaW5rICAgICAgICB7IGNvbG9yOiAjMDAwMGZmOyB9Ci10YWJsZS5kZXRhaWxzIGE6dmlzaXRlZCAgICAgeyBjb2xvcjogIzIwNDA4MDsgfQotCi0vKiBGaWVsZHMgKi8KLWRsLmZpZWxkcyAgICAgICAgICAgICAgICAgICB7IG1hcmdpbi1sZWZ0OiAyZW07IG1hcmdpbi10b3A6IDFlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTsgfQotZGwuZmllbGRzIGRkIHVsICAgICAgICAgICAgIHsgbWFyZ2luLWxlZnQ6IDBlbTsgcGFkZGluZy1sZWZ0OiAwZW07IH0KLWRsLmZpZWxkcyBkZCB1bCBsaSB1bCAgICAgICB7IG1hcmdpbi1sZWZ0OiAyZW07IHBhZGRpbmctbGVmdDogMGVtOyB9Ci1kaXYuZmllbGRzICAgICAgICAgICAgICAgICAgeyBtYXJnaW4tbGVmdDogMmVtOyB9Ci1kaXYuZmllbGRzIHAgICAgICAgICAgICAgICAgeyBtYXJnaW4tYm90dG9tOiAwLjVlbTsgfQotCi0vKiBJbmRleCB0YWJsZXMgKGlkZW50aWZpZXIgaW5kZXgsIHRlcm0gaW5kZXgsIGV0YykKLSAqICAgLSBsaW5rLWluZGV4IGlzIHVzZWQgZm9yIGluZGljZXMgY29udGFpbmluZyBsaXN0cyBvZiBsaW5rcwotICogICAgIChuYW1lbHksIHRoZSBpZGVudGlmaWVyIGluZGV4ICYgdGVybSBpbmRleCkuCi0gKiAgIC0gaW5kZXgtd2hlcmUgaXMgdXNlZCBpbiBsaW5rIGluZGljZXMgZm9yIHRoZSB0ZXh0IGluZGljYXRpbmcKLSAqICAgICB0aGUgY29udGFpbmVyL3NvdXJjZSBmb3IgZWFjaCBsaW5rLgotICogICAtIG1ldGFkYXRhLWluZGV4IGlzIHVzZWQgZm9yIGluZGljZXMgY29udGFpbmluZyBtZXRhZGF0YQotICogICAgIGV4dHJhY3RlZCBmcm9tIGZpZWxkcyAobmFtZWx5LCB0aGUgYnVnIGluZGV4ICYgdG9kbyBpbmRleCkuCi0gKi8KLXRhYmxlLmxpbmstaW5kZXggICAgICAgICAgICB7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZThmMGY4OyBjb2xvcjogIzAwMDAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM2MDgwOTA7IH0KLXRkLmxpbmstaW5kZXggICAgICAgICAgICAgICB7IGJvcmRlci13aWR0aDogMHB4OyB9Ci10YWJsZS5saW5rLWluZGV4IGE6bGluayAgICAgeyBjb2xvcjogIzAwMDBmZjsgfQotdGFibGUubGluay1pbmRleCBhOnZpc2l0ZWQgIHsgY29sb3I6ICMyMDQwODA7IH0KLXNwYW4uaW5kZXgtd2hlcmUgICAgICAgICAgICB7IGZvbnQtc2l6ZTogNzAlOyB9Ci10YWJsZS5tZXRhZGF0YS1pbmRleCAgICAgICAgeyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2U4ZjBmODsgY29sb3I6ICMwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNjA4MDkwOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogLjJlbSAwIDAgMDsgfQotdGQubWV0YWRhdGEtaW5kZXggICAgICAgICAgIHsgYm9yZGVyLXdpZHRoOiAxcHg7IGJvcmRlci1zdHlsZTogc29saWQ7IH0KLXRhYmxlLm1ldGFkYXRhLWluZGV4IGE6bGluayB7IGNvbG9yOiAjMDAwMGZmOyB9Ci10YWJsZS5tZXRhZGF0YS1pbmRleCBhOnZpc2l0ZWQgIHsgY29sb3I6ICMyMDQwODA7IH0KLQotLyogRnVuY3Rpb24gc2lnbmF0dXJlcwotICogICAtIHNpZyogaXMgdXNlZCBmb3IgdGhlIHNpZ25hdHVyZSBpbiB0aGUgZGV0YWlscyBzZWN0aW9uLgotICogICAtIC5zdW1tYXJ5LXNpZyogaXMgdXNlZCBmb3IgdGhlIHNpZ25hdHVyZSBpbiB0aGUgc3VtbWFyeSAKLSAqICAgICB0YWJsZSwgYW5kIHdoZW4gbGlzdGluZyBwcm9wZXJ0eSBhY2Nlc3NvciBmdW5jdGlvbnMuCi0gKiAqLwotLnNpZy1uYW1lICAgICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDYwODA7IH0KLS5zaWctYXJnICAgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDA4MDYwOyB9Ci0uc2lnLWRlZmF1bHQgICAgICAgICAgICAgICAgeyBjb2xvcjogIzYwMjAwMDsgfQotLnN1bW1hcnktc2lnICAgICAgICAgICAgICAgIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgfQotLnN1bW1hcnktc2lnLW5hbWUgICAgICAgICAgIHsgY29sb3I6ICMwMDYwODA7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci10YWJsZS5zdW1tYXJ5IGEuc3VtbWFyeS1zaWctbmFtZTpsaW5rCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzAwNjA4MDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLXRhYmxlLnN1bW1hcnkgYS5zdW1tYXJ5LXNpZy1uYW1lOnZpc2l0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDA2MDgwOyBmb250LXdlaWdodDogYm9sZDsgfQotLnN1bW1hcnktc2lnLWFyZyAgICAgICAgICAgIHsgY29sb3I6ICMwMDYwNDA7IH0KLS5zdW1tYXJ5LXNpZy1kZWZhdWx0ICAgICAgICB7IGNvbG9yOiAjNTAxODAwOyB9Ci0KLS8qIFN1YmNsYXNzIGxpc3QKLSAqLwotdWwuc3ViY2xhc3MtbGlzdCB7IGRpc3BsYXk6IGlubGluZTsgfQotdWwuc3ViY2xhc3MtbGlzdCBsaSB7IGRpc3BsYXk6IGlubGluZTsgfQotCi0vKiBUbyByZW5kZXIgdmFyaWFibGVzLCBjbGFzc2VzIGV0Yy4gbGlrZSBmdW5jdGlvbnMgKi8KLXRhYmxlLnN1bW1hcnkgLnN1bW1hcnktbmFtZSB7IGNvbG9yOiAjMDA2MDgwOyBmb250LXdlaWdodDogYm9sZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IH0KLXRhYmxlLnN1bW1hcnkKLSAgICAgYS5zdW1tYXJ5LW5hbWU6bGluayAgICB7IGNvbG9yOiAjMDA2MDgwOyBmb250LXdlaWdodDogYm9sZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IH0KLXRhYmxlLnN1bW1hcnkKLSAgICBhLnN1bW1hcnktbmFtZTp2aXNpdGVkICB7IGNvbG9yOiAjMDA2MDgwOyBmb250LXdlaWdodDogYm9sZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IH0KLQotLyogVmFyaWFibGUgdmFsdWVzCi0gKiAgIC0gSW4gdGhlICd2YXJpYWJsZSBkZXRhaWxzJyBzZWN0aW9ucywgZWFjaCB2YXJhaWJsZSdzIHZhbHVlIGlzCi0gKiAgICAgbGlzdGVkIGluIGEgJ3ByZS52YXJpYWJsZScgYm94LiAgVGhlIHdpZHRoIG9mIHRoaXMgYm94IGlzCi0gKiAgICAgcmVzdHJpY3RlZCB0byA4MCBjaGFyczsgaWYgdGhlIHZhbHVlJ3MgcmVwciBpcyBsb25nZXIgdGhhbgotICogICAgIHRoaXMgaXQgd2lsbCBiZSB3cmFwcGVkLCB1c2luZyBhIGJhY2tzbGFzaCBtYXJrZWQgd2l0aAotICogICAgIGNsYXNzICd2YXJpYWJsZS1saW5ld3JhcCcuICBJZiB0aGUgdmFsdWUncyByZXByIGlzIGxvbmdlcgotICogICAgIHRoYW4gMyBsaW5lcywgdGhlIHJlc3Qgd2lsbCBiZSBlbGxpZGVkOyBhbmQgYW4gZWxsaXBzaXMKLSAqICAgICBtYXJrZXIgKCcuLi4nIG1hcmtlZCB3aXRoICd2YXJpYWJsZS1lbGxpcHNpcycpIHdpbGwgYmUgdXNlZC4KLSAqICAgLSBJZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcsIGl0cyBxdW90ZSBtYXJrcyB3aWxsIGJlIG1hcmtlZAotICogICAgIHdpdGggJ3ZhcmlhYmxlLXF1b3RlJy4KLSAqICAgLSBJZiB0aGUgdmFyaWFibGUgaXMgYSByZWdleHAsIGl0IGlzIHN5bnRheC1oaWdobGlnaHRlZCB1c2luZwotICogICAgIHRoZSByZSogQ1NTIGNsYXNzZXMuCi0gKi8KLXByZS52YXJpYWJsZSAgICAgICAgICAgICAgICB7IHBhZGRpbmc6IC41ZW07IG1hcmdpbjogMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNkY2U0ZWM7IGNvbG9yOiAjMDAwMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzcwODg5MDsgfQotLnZhcmlhYmxlLWxpbmV3cmFwICAgICAgICAgIHsgY29sb3I6ICM2MDQwMDA7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci0udmFyaWFibGUtZWxsaXBzaXMgICAgICAgICAgeyBjb2xvcjogIzYwNDAwMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLS52YXJpYWJsZS1xdW90ZSAgICAgICAgICAgICB7IGNvbG9yOiAjNjA0MDAwOyBmb250LXdlaWdodDogYm9sZDsgfQotLnZhcmlhYmxlLWdyb3VwICAgICAgICAgICAgIHsgY29sb3I6ICMwMDgwMDA7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci0udmFyaWFibGUtb3AgICAgICAgICAgICAgICAgeyBjb2xvcjogIzYwNDAwMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLS52YXJpYWJsZS1zdHJpbmcgICAgICAgICAgICB7IGNvbG9yOiAjMDA2MDMwOyB9Ci0udmFyaWFibGUtdW5rbm93biAgICAgICAgICAgeyBjb2xvcjogI2EwMDAwMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLS5yZSAgICAgICAgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDAwMDAwOyB9Ci0ucmUtY2hhciAgICAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzAwNjAzMDsgfQotLnJlLW9wICAgICAgICAgICAgICAgICAgICAgIHsgY29sb3I6ICM2MDAwMDA7IH0KLS5yZS1ncm91cCAgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDAzMDYwOyB9Ci0ucmUtcmVmICAgICAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzQwNDA0MDsgfQotCi0vKiBCYXNlIHRyZWUKLSAqICAgLSBVc2VkIGJ5IGNsYXNzIHBhZ2VzIHRvIGRpc3BsYXkgdGhlIGJhc2UgY2xhc3MgaGllcmFyY2h5LgotICovCi1wcmUuYmFzZS10cmVlICAgICAgICAgICAgICAgeyBmb250LXNpemU6IDgwJTsgbWFyZ2luOiAwOyB9Ci0KLS8qIEZyYW1lcy1iYXNlZCB0YWJsZSBvZiBjb250ZW50cyBoZWFkZXJzCi0gKiAgIC0gQ29uc2lzdHMgb2YgdHdvIGZyYW1lczogb25lIGZvciBzZWxlY3RpbmcgbW9kdWxlczsgYW5kCi0gKiAgICAgdGhlIG90aGVyIGxpc3RpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBzZWxlY3RlZCBtb2R1bGUuCi0gKiAgIC0gaDEudG9jIGlzIHVzZWQgZm9yIGVhY2ggZnJhbWUncyBoZWFkaW5nCi0gKiAgIC0gaDIudG9jIGlzIHVzZWQgZm9yIHN1YmhlYWRpbmdzIHdpdGhpbiBlYWNoIGZyYW1lLgotICovCi1oMS50b2MgICAgICAgICAgICAgICAgICAgICAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZTogMTA1JTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOyB9Ci1oMi50b2MgICAgICAgICAgICAgICAgICAgICAgeyBmb250LXNpemU6IDEwMCU7IGZvbnQtd2VpZ2h0OiBib2xkOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMC41ZW0gMCAwIC0wLjNlbTsgfQotCi0vKiBTeW50YXggSGlnaGxpZ2h0aW5nIGZvciBTb3VyY2UgQ29kZQotICogICAtIGRvY3Rlc3QgZXhhbXBsZXMgYXJlIGRpc3BsYXllZCBpbiBhICdwcmUucHktZG9jdGVzdCcgYmxvY2suCi0gKiAgICAgSWYgdGhlIGV4YW1wbGUgaXMgaW4gYSBkZXRhaWxzIHRhYmxlIGVudHJ5LCB0aGVuIGl0IHdpbGwgdXNlCi0gKiAgICAgdGhlIGNvbG9ycyBzcGVjaWZpZWQgYnkgdGhlICd0YWJsZSBwcmUucHktZG9jdGVzdCcgbGluZS4KLSAqICAgLSBTb3VyY2UgY29kZSBsaXN0aW5ncyBhcmUgZGlzcGxheWVkIGluIGEgJ3ByZS5weS1zcmMnIGJsb2NrLgotICogICAgIEVhY2ggbGluZSBpcyBtYXJrZWQgd2l0aCAnc3Bhbi5weS1saW5lJyAodXNlZCB0byBkcmF3IGEgbGluZQotICogICAgIGRvd24gdGhlIGxlZnQgbWFyZ2luLCBzZXBhcmF0aW5nIHRoZSBjb2RlIGZyb20gdGhlIGxpbmUKLSAqICAgICBudW1iZXJzKS4gIExpbmUgbnVtYmVycyBhcmUgZGlzcGxheWVkIHdpdGggJ3NwYW4ucHktbGluZW5vJy4KLSAqICAgICBUaGUgZXhwYW5kL2NvbGxhcHNlIGJsb2NrIHRvZ2dsZSBidXR0b24gaXMgZGlzcGxheWVkIHdpdGgKLSAqICAgICAnYS5weS10b2dnbGUnIChOb3RlOiB0aGUgQ1NTIHN0eWxlIGZvciAnYS5weS10b2dnbGUnIHNob3VsZCBub3QKLSAqICAgICBtb2RpZnkgdGhlIGZvbnQgc2l6ZSBvZiB0aGUgdGV4dC4pCi0gKiAgIC0gSWYgYSBzb3VyY2UgY29kZSBwYWdlIGlzIG9wZW5lZCB3aXRoIGFuIGFuY2hvciwgdGhlbiB0aGUKLSAqICAgICBjb3JyZXNwb25kaW5nIGNvZGUgYmxvY2sgd2lsbCBiZSBoaWdobGlnaHRlZC4gIFRoZSBjb2RlCi0gKiAgICAgYmxvY2sncyBoZWFkZXIgaXMgaGlnaGxpZ2h0ZWQgd2l0aCAncHktaGlnaGxpZ2h0LWhkcic7IGFuZAotICogICAgIHRoZSBjb2RlIGJsb2NrJ3MgYm9keSBpcyBoaWdobGlnaHRlZCB3aXRoICdweS1oaWdobGlnaHQnLgotICogICAtIFRoZSByZW1haW5pbmcgcHktKiBjbGFzc2VzIGFyZSB1c2VkIHRvIHBlcmZvcm0gc3ludGF4Ci0gKiAgICAgaGlnaGxpZ2h0aW5nIChweS1zdHJpbmcgZm9yIHN0cmluZyBsaXRlcmFscywgcHktbmFtZSBmb3IgbmFtZXMsCi0gKiAgICAgZXRjLikKLSAqLwotcHJlLnB5LWRvY3Rlc3QgICAgICAgICAgICAgIHsgcGFkZGluZzogLjVlbTsgbWFyZ2luOiAxZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZThmMGY4OyBjb2xvcjogIzAwMDAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM3MDg4OTA7IH0KLXRhYmxlIHByZS5weS1kb2N0ZXN0ICAgICAgICB7IGJhY2tncm91bmQ6ICNkY2U0ZWM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzAwMDAwMDsgfQotcHJlLnB5LXNyYyAgICAgICAgICAgICAgICAgIHsgYm9yZGVyOiAycHggc29saWQgIzAwMDAwMDsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjBmMGYwOyBjb2xvcjogIzAwMDAwMDsgfQotLnB5LWxpbmUgICAgICAgICAgICAgICAgICAgIHsgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjMDAwMDAwOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAuMmVtOyBwYWRkaW5nLWxlZnQ6IC40ZW07IH0KLS5weS1saW5lbm8gICAgICAgICAgICAgICAgICB7IGZvbnQtc3R5bGU6IGl0YWxpYzsgZm9udC1zaXplOiA5MCU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IC41ZW07IH0KLWEucHktdG9nZ2xlICAgICAgICAgICAgICAgICB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQotZGl2LnB5LWhpZ2hsaWdodC1oZHIgICAgICAgIHsgYm9yZGVyLXRvcDogMnB4IHNvbGlkICMwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzAwMDAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNkOGU4ZTg7IH0KLWRpdi5weS1oaWdobGlnaHQgICAgICAgICAgICB7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjMDAwMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2QwZTBlMDsgfQotLnB5LXByb21wdCAgICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDUwNTA7IGZvbnQtd2VpZ2h0OiBib2xkO30KLS5weS1tb3JlICAgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDA1MDUwOyBmb250LXdlaWdodDogYm9sZDt9Ci0ucHktc3RyaW5nICAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzAwNjAzMDsgfQotLnB5LWNvbW1lbnQgICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDMwNjA7IH0KLS5weS1rZXl3b3JkICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjNjAwMDAwOyB9Ci0ucHktb3V0cHV0ICAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzQwNDA0MDsgfQotLnB5LW5hbWUgICAgICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDAwNTA7IH0KLS5weS1uYW1lOmxpbmsgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDAwMDUwICFpbXBvcnRhbnQ7IH0KLS5weS1uYW1lOnZpc2l0ZWQgICAgICAgICAgICB7IGNvbG9yOiAjMDAwMDUwICFpbXBvcnRhbnQ7IH0KLS5weS1udW1iZXIgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDA1MDAwOyB9Ci0ucHktZGVmbmFtZSAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzAwMDA2MDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLS5weS1kZWYtbmFtZSAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDAwMDYwOyBmb250LXdlaWdodDogYm9sZDsgfQotLnB5LWJhc2UtY2xhc3MgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDAwNjA7IH0KLS5weS1wYXJhbSAgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDAwMDYwOyB9Ci0ucHktZG9jc3RyaW5nICAgICAgICAgICAgICAgeyBjb2xvcjogIzAwNjAzMDsgfQotLnB5LWRlY29yYXRvciAgICAgICAgICAgICAgIHsgY29sb3I6ICM4MDQwMjA7IH0KLS8qIFVzZSB0aGlzIGlmIHlvdSBkb24ndCB3YW50IGxpbmtzIHRvIG5hbWVzIHVuZGVybGluZWQ6ICovCi0vKmEucHktbmFtZSAgICAgICAgICAgICAgICAgICB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfSovCi0KLS8qIEdyYXBocyAmIERpYWdyYW1zCi0gKiAgIC0gVGhlc2UgQ1NTIHN0eWxlcyBhcmUgdXNlZCBmb3IgZ3JhcGhzICYgZGlhZ3JhbXMgZ2VuZXJhdGVkIHVzaW5nCi0gKiAgICAgR3JhcGh2aXogZG90LiAgJ2ltZy5ncmFwaC13aXRob3V0LXRpdGxlJyBpcyB1c2VkIGZvciBiYXJlCi0gKiAgICAgZGlhZ3JhbXMgKHRvIHJlbW92ZSB0aGUgYm9yZGVyIGNyZWF0ZWQgYnkgbWFraW5nIHRoZSBpbWFnZQotICogICAgIGNsaWNrYWJsZSkuCi0gKi8KLWltZy5ncmFwaC13aXRob3V0LXRpdGxlICAgICB7IGJvcmRlcjogbm9uZTsgfQotaW1nLmdyYXBoLXdpdGgtdGl0bGUgICAgICAgIHsgYm9yZGVyOiAxcHggc29saWQgIzAwMDAwMDsgfQotc3Bhbi5ncmFwaC10aXRsZSAgICAgICAgICAgIHsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLXNwYW4uZ3JhcGgtY2FwdGlvbiAgICAgICAgICB7IH0KLQotLyogR2VuZXJhbC1wdXJwb3NlIGNsYXNzZXMKLSAqICAgLSAncC5pbmRlbnQtd3JhcHBlZC1saW5lcycgZGVmaW5lcyBhIHBhcmFncmFwaCB3aG9zZSBmaXJzdCBsaW5lCi0gKiAgICAgaXMgbm90IGluZGVudGVkLCBidXQgd2hvc2Ugc3Vic2VxdWVudCBsaW5lcyBhcmUuCi0gKiAgIC0gVGhlICdub21hcmdpbi10b3AnIGNsYXNzIGlzIHVzZWQgdG8gcmVtb3ZlIHRoZSB0b3AgbWFyZ2luIChlLmcuCi0gKiAgICAgZnJvbSBsaXN0cykuICBUaGUgJ25vbWFyZ2luJyBjbGFzcyBpcyB1c2VkIHRvIHJlbW92ZSBib3RoIHRoZQotICogICAgIHRvcCBhbmQgYm90dG9tIG1hcmdpbiAoYnV0IG5vdCB0aGUgbGVmdCBvciByaWdodCBtYXJnaW4gLS0KLSAqICAgICBmb3IgbGlzdHMsIHRoYXQgd291bGQgY2F1c2UgdGhlIGJ1bGxldHMgdG8gZGlzYXBwZWFyLikKLSAqLwotcC5pbmRlbnQtd3JhcHBlZC1saW5lcyAgICAgIHsgcGFkZGluZzogMCAwIDAgN2VtOyB0ZXh0LWluZGVudDogLTdlbTsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7IH0KLS5ub21hcmdpbi10b3AgICAgICAgICAgICAgICB7IG1hcmdpbi10b3A6IDA7IH0KLS5ub21hcmdpbiAgICAgICAgICAgICAgICAgICB7IG1hcmdpbi10b3A6IDA7IG1hcmdpbi1ib3R0b206IDA7IH0KLQotLyogSFRNTCBMb2cgKi8KLWRpdi5sb2ctYmxvY2sgICAgICAgICAgICAgICB7IHBhZGRpbmc6IDA7IG1hcmdpbjogLjVlbSAwIC41ZW0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlOGYwZjg7IGNvbG9yOiAjMDAwMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzAwMDAwMDsgfQotZGl2LmxvZy1lcnJvciAgICAgICAgICAgICAgIHsgcGFkZGluZzogLjFlbSAuM2VtIC4xZW0gLjNlbTsgbWFyZ2luOiA0cHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZiMGIwOyBjb2xvcjogIzAwMDAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDAwMDA7IH0KLWRpdi5sb2ctd2FybmluZyAgICAgICAgICAgICB7IHBhZGRpbmc6IC4xZW0gLjNlbSAuMWVtIC4zZW07IG1hcmdpbjogNHB4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZiMDsgY29sb3I6ICMwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwOyB9Ci1kaXYubG9nLWluZm8gICAgICAgICAgICAgICB7IHBhZGRpbmc6IC4xZW0gLjNlbSAuMWVtIC4zZW07IG1hcmdpbjogNHB4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2IwZmZiMDsgY29sb3I6ICMwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwOyB9Ci1oMi5sb2ctaGRyICAgICAgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kOiAjNzBiMGZmOyBjb2xvcjogIzAwMDAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDsgcGFkZGluZzogMGVtIDAuNWVtIDBlbSAwLjVlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMDAwMDAwOyBmb250LXNpemU6IDExMCU7IH0KLXAubG9nICAgICAgICAgICAgICAgICAgICAgICB7IGZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW46IC41ZW0gMCAuNWVtIDA7IH0KLXRyLm9wdC1jaGFuZ2VkICAgICAgICAgICAgICB7IGNvbG9yOiAjMDAwMDAwOyBmb250LXdlaWdodDogYm9sZDsgfQotdHIub3B0LWRlZmF1bHQgICAgICAgICAgICAgIHsgY29sb3I6ICM2MDYwNjA7IH0KLXByZS5sb2cgICAgICAgICAgICAgICAgICAgICB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgcGFkZGluZy1sZWZ0OiAxZW07IH0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL2FwaWRvYy9lcHlkb2MuanMgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9hcGlkb2MvZXB5ZG9jLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzg3ZGJjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL2FwaWRvYy9lcHlkb2MuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTMgKzAsMCBAQAotZnVuY3Rpb24gdG9nZ2xlX3ByaXZhdGUoKSB7Ci0gICAgICAgIC8vIFNlYXJjaCBmb3IgYW55IHByaXZhdGUvcHVibGljIGxpbmtzIG9uIHRoaXMgcGFnZS4gIFN0b3JlCi0gICAgICAgIC8vIHRoZWlyIG9sZCB0ZXh0IGluICJjbWQsIiBzbyB3ZSB3aWxsIGtub3cgd2hhdCBhY3Rpb24gdG8KLSAgICAgICAgLy8gdGFrZTsgYW5kIGNoYW5nZSB0aGVpciB0ZXh0IHRvIHRoZSBvcHBvc2l0ZSBhY3Rpb24uCi0gICAgICAgIHZhciBjbWQgPSAiPyI7Ci0gICAgICAgIHZhciBlbHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKTsKLSAgICAgICAgZm9yKHZhciBpPTA7IGk8ZWx0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIGlmIChlbHRzW2ldLmNsYXNzTmFtZSA9PSAicHJpdmF0ZWxpbmsiKSB7Ci0gICAgICAgICAgICBjbWQgPSBlbHRzW2ldLmlubmVySFRNTDsKLSAgICAgICAgICAgIGVsdHNbaV0uaW5uZXJIVE1MID0gKChjbWQgJiYgY21kLnN1YnN0cigwLDQpPT0ic2hvdyIpPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhpZGUmbmJzcDtwcml2YXRlIjoic2hvdyZuYnNwO3ByaXZhdGUiKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVXBkYXRlIGFsbCBESVZzIGNvbnRhaW5pbmcgcHJpdmF0ZSBvYmplY3RzLgotICAgICAgICB2YXIgZWx0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkaXYiKTsKLSAgICAgICAgZm9yKHZhciBpPTA7IGk8ZWx0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIGlmIChlbHRzW2ldLmNsYXNzTmFtZSA9PSAicHJpdmF0ZSIpIHsKLSAgICAgICAgICAgIGVsdHNbaV0uc3R5bGUuZGlzcGxheSA9ICgoY21kICYmIGNtZC5zdWJzdHIoMCw0KT09ImhpZGUiKT8ibm9uZSI6ImJsb2NrIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGVsdHNbaV0uY2xhc3NOYW1lID09ICJwdWJsaWMiKSB7Ci0gICAgICAgICAgICBlbHRzW2ldLnN0eWxlLmRpc3BsYXkgPSAoKGNtZCAmJiBjbWQuc3Vic3RyKDAsNCk9PSJoaWRlIik/ImJsb2NrIjoibm9uZSIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBVcGRhdGUgYWxsIHRhYmxlIHJvd3MgY29udGFpbmluZyBwcml2YXRlIG9iamVjdHMuICBOb3RlLCB3ZQotICAgICAgICAvLyB1c2UgIiIgaW5zdGVhZCBvZiAiYmxvY2siIGJlY2F1ZSBJRSAmIGZpcmVmb3ggZGlzYWdyZWUgb24gd2hhdAotICAgICAgICAvLyB0aGlzIHNob3VsZCBiZSAoYmxvY2sgdnMgdGFibGUtcm93KSwgYW5kICIiIGp1c3QgZ2l2ZXMgdGhlCi0gICAgICAgIC8vIGRlZmF1bHQgZm9yIGJvdGggYnJvd3NlcnMuCi0gICAgICAgIHZhciBlbHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRyIik7Ci0gICAgICAgIGZvcih2YXIgaT0wOyBpPGVsdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBpZiAoZWx0c1tpXS5jbGFzc05hbWUgPT0gInByaXZhdGUiKSB7Ci0gICAgICAgICAgICBlbHRzW2ldLnN0eWxlLmRpc3BsYXkgPSAoKGNtZCAmJiBjbWQuc3Vic3RyKDAsNCk9PSJoaWRlIik/Im5vbmUiOiIiKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVXBkYXRlIGFsbCBsaXN0IGl0ZW1zIGNvbnRhaW5pbmcgcHJpdmF0ZSBvYmplY3RzLgotICAgICAgICB2YXIgZWx0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaSIpOwotICAgICAgICBmb3IodmFyIGk9MDsgaTxlbHRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgaWYgKGVsdHNbaV0uY2xhc3NOYW1lID09ICJwcml2YXRlIikgewotICAgICAgICAgICAgZWx0c1tpXS5zdHlsZS5kaXNwbGF5ID0gKChjbWQgJiYgY21kLnN1YnN0cigwLDQpPT0iaGlkZSIpPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub25lIjoiIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFVwZGF0ZSBhbGwgbGlzdCBpdGVtcyBjb250YWluaW5nIHByaXZhdGUgb2JqZWN0cy4KLSAgICAgICAgdmFyIGVsdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidWwiKTsKLSAgICAgICAgZm9yKHZhciBpPTA7IGk8ZWx0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIGlmIChlbHRzW2ldLmNsYXNzTmFtZSA9PSAicHJpdmF0ZSIpIHsKLSAgICAgICAgICAgIGVsdHNbaV0uc3R5bGUuZGlzcGxheSA9ICgoY21kICYmIGNtZC5zdWJzdHIoMCw0KT09ImhpZGUiKT8ibm9uZSI6ImJsb2NrIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFNldCBhIGNvb2tpZSB0byByZW1lbWJlciB0aGUgY3VycmVudCBvcHRpb24uCi0gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9ICJFcHlkb2NQcml2YXRlPSIrY21kOwotICAgICAgfQotZnVuY3Rpb24gc2hvd19wcml2YXRlKCkgewotICAgICAgICB2YXIgZWx0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIik7Ci0gICAgICAgIGZvcih2YXIgaT0wOyBpPGVsdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBpZiAoZWx0c1tpXS5jbGFzc05hbWUgPT0gInByaXZhdGVsaW5rIikgewotICAgICAgICAgICAgY21kID0gZWx0c1tpXS5pbm5lckhUTUw7Ci0gICAgICAgICAgICBpZiAoY21kICYmIGNtZC5zdWJzdHIoMCw0KT09InNob3ciKQotICAgICAgICAgICAgICAgIHRvZ2dsZV9wcml2YXRlKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci1mdW5jdGlvbiBnZXRDb29raWUobmFtZSkgewotICAgICAgICB2YXIgZGMgPSBkb2N1bWVudC5jb29raWU7Ci0gICAgICAgIHZhciBwcmVmaXggPSBuYW1lICsgIj0iOwotICAgICAgICB2YXIgYmVnaW4gPSBkYy5pbmRleE9mKCI7ICIgKyBwcmVmaXgpOwotICAgICAgICBpZiAoYmVnaW4gPT0gLTEpIHsKLSAgICAgICAgICBiZWdpbiA9IGRjLmluZGV4T2YocHJlZml4KTsKLSAgICAgICAgICBpZiAoYmVnaW4gIT0gMCkgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICB7IGJlZ2luICs9IDI7IH0KLSAgICAgICAgdmFyIGVuZCA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKCI7IiwgYmVnaW4pOwotICAgICAgICBpZiAoZW5kID09IC0xKQotICAgICAgICB7IGVuZCA9IGRjLmxlbmd0aDsgfQotICAgICAgICByZXR1cm4gdW5lc2NhcGUoZGMuc3Vic3RyaW5nKGJlZ2luICsgcHJlZml4Lmxlbmd0aCwgZW5kKSk7Ci0gICAgICB9Ci1mdW5jdGlvbiBzZXRGcmFtZSh1cmwxLCB1cmwyKSB7Ci0gICAgICAgICAgcGFyZW50LmZyYW1lc1sxXS5sb2NhdGlvbi5ocmVmID0gdXJsMTsKLSAgICAgICAgICBwYXJlbnQuZnJhbWVzWzJdLmxvY2F0aW9uLmhyZWYgPSB1cmwyOwotICAgICAgfQotZnVuY3Rpb24gY2hlY2tDb29raWUoKSB7Ci0gICAgICAgIHZhciBjbWQ9Z2V0Q29va2llKCJFcHlkb2NQcml2YXRlIik7Ci0gICAgICAgIGlmIChjbWQgJiYgY21kLnN1YnN0cigwLDQpIT0ic2hvdyIgJiYgbG9jYXRpb24uaHJlZi5pbmRleE9mKCIjXyIpIDwgMCkKLSAgICAgICAgICAgIHRvZ2dsZV9wcml2YXRlKCk7Ci0gICAgICB9Ci1mdW5jdGlvbiB0b2dnbGVDYWxsR3JhcGgoaWQpIHsKLSAgICAgICAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKLSAgICAgICAgaWYgKGVsdC5zdHlsZS5kaXNwbGF5ID09ICJub25lIikKLSAgICAgICAgICAgIGVsdC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZWx0LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICB9Ci1mdW5jdGlvbiBleHBhbmQoaWQpIHsKLSAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKyItZXhwYW5kZWQiKTsKLSAgaWYgKGVsdCkgZWx0LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwotICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQrIi1leHBhbmRlZC1saW5lbnVtcyIpOwotICBpZiAoZWx0KSBlbHQuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7Ci0gIHZhciBlbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCsiLWNvbGxhcHNlZCIpOwotICBpZiAoZWx0KSB7IGVsdC5pbm5lckhUTUwgPSAiIjsgZWx0LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7IH0KLSAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKyItY29sbGFwc2VkLWxpbmVudW1zIik7Ci0gIGlmIChlbHQpIHsgZWx0LmlubmVySFRNTCA9ICIiOyBlbHQuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgfQotICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQrIi10b2dnbGUiKTsKLSAgaWYgKGVsdCkgeyBlbHQuaW5uZXJIVE1MID0gIi0iOyB9Ci19Ci0KLWZ1bmN0aW9uIGNvbGxhcHNlKGlkKSB7Ci0gIHZhciBlbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCsiLWV4cGFuZGVkIik7Ci0gIGlmIChlbHQpIGVsdC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQrIi1leHBhbmRlZC1saW5lbnVtcyIpOwotICBpZiAoZWx0KSBlbHQuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKyItY29sbGFwc2VkLWxpbmVudW1zIik7Ci0gIGlmIChlbHQpIHsgZWx0LmlubmVySFRNTCA9ICI8YnIgLz4iOyBlbHQuc3R5bGUuZGlzcGxheT0iYmxvY2siOyB9Ci0gIHZhciBlbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCsiLXRvZ2dsZSIpOwotICBpZiAoZWx0KSB7IGVsdC5pbm5lckhUTUwgPSAiKyI7IH0KLSAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKyItY29sbGFwc2VkIik7Ci0gIGlmIChlbHQpIHsKLSAgICBlbHQuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7Ci0gICAgCi0gICAgdmFyIGluZGVudCA9IGVsdC5nZXRBdHRyaWJ1dGUoImluZGVudCIpOwotICAgIHZhciBwYWQgPSBlbHQuZ2V0QXR0cmlidXRlKCJwYWQiKTsKLSAgICB2YXIgcyA9ICI8dHQgY2xhc3M9J3B5LWxpbmVubyc+IjsKLSAgICBmb3IgKHZhciBpPTA7IGk8cGFkLmxlbmd0aDsgaSsrKSB7IHMgKz0gIiZuYnNwOyIgfQotICAgIHMgKz0gIjwvdHQ+IjsKLSAgICBzICs9ICImbmJzcDsmbmJzcDs8dHQgY2xhc3M9J3B5LWxpbmUnPiI7Ci0gICAgZm9yICh2YXIgaT0wOyBpPGluZGVudC5sZW5ndGg7IGkrKykgeyBzICs9ICImbmJzcDsiIH0KLSAgICBzICs9ICI8YSBocmVmPScjJyBvbmNsaWNrPSdleHBhbmQoXCIiICsgaWQ7Ci0gICAgcyArPSAiXCIpO3JldHVybiBmYWxzZSc+Li4uPC9hPjwvdHQ+PGJyIC8+IjsKLSAgICBlbHQuaW5uZXJIVE1MID0gczsKLSAgfQotfQotCi1mdW5jdGlvbiB0b2dnbGUoaWQpIHsKLSAgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQrIi10b2dnbGUiKTsKLSAgaWYgKGVsdC5pbm5lckhUTUwgPT0gIi0iKQotICAgICAgY29sbGFwc2UoaWQpOyAKLSAgZWxzZQotICAgICAgZXhwYW5kKGlkKTsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1mdW5jdGlvbiBoaWdobGlnaHQoaWQpIHsKLSAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKyItZGVmIik7Ci0gIGlmIChlbHQpIGVsdC5jbGFzc05hbWUgPSAicHktaGlnaGxpZ2h0LWhkciI7Ci0gIHZhciBlbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCsiLWV4cGFuZGVkIik7Ci0gIGlmIChlbHQpIGVsdC5jbGFzc05hbWUgPSAicHktaGlnaGxpZ2h0IjsKLSAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKyItY29sbGFwc2VkIik7Ci0gIGlmIChlbHQpIGVsdC5jbGFzc05hbWUgPSAicHktaGlnaGxpZ2h0IjsKLX0KLQotZnVuY3Rpb24gbnVtX2xpbmVzKHMpIHsKLSAgdmFyIG4gPSAxOwotICB2YXIgcG9zID0gcy5pbmRleE9mKCJcbiIpOwotICB3aGlsZSAoIHBvcyA+IDApIHsKLSAgICBuICs9IDE7Ci0gICAgcG9zID0gcy5pbmRleE9mKCJcbiIsIHBvcysxKTsKLSAgfQotICByZXR1cm4gbjsKLX0KLQotLy8gQ29sbGFwc2UgYWxsIGJsb2NrcyB0aGF0IG1hdmUgbW9yZSB0aGFuIGBtaW5fbGluZXNgIGxpbmVzLgotZnVuY3Rpb24gY29sbGFwc2VfYWxsKG1pbl9saW5lcykgewotICB2YXIgZWx0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkaXYiKTsKLSAgZm9yICh2YXIgaT0wOyBpPGVsdHMubGVuZ3RoOyBpKyspIHsKLSAgICB2YXIgZWx0ID0gZWx0c1tpXTsKLSAgICB2YXIgc3BsaXQgPSBlbHQuaWQuaW5kZXhPZigiLSIpOwotICAgIGlmIChzcGxpdCA+IDApCi0gICAgICBpZiAoZWx0LmlkLnN1YnN0cmluZyhzcGxpdCwgZWx0LmlkLmxlbmd0aCkgPT0gIi1leHBhbmRlZCIpCi0gICAgICAgIGlmIChudW1fbGluZXMoZWx0LmlubmVySFRNTCkgPiBtaW5fbGluZXMpCi0gICAgICAgICAgY29sbGFwc2UoZWx0LmlkLnN1YnN0cmluZygwLCBzcGxpdCkpOwotICB9Ci19Ci0KLWZ1bmN0aW9uIGV4cGFuZHRvKGhyZWYpIHsKLSAgdmFyIHN0YXJ0ID0gaHJlZi5pbmRleE9mKCIjIikrMTsKLSAgaWYgKHN0YXJ0ICE9IDAgJiYgc3RhcnQgIT0gaHJlZi5sZW5ndGgpIHsKLSAgICBpZiAoaHJlZi5zdWJzdHJpbmcoc3RhcnQsIGhyZWYubGVuZ3RoKSAhPSAiLSIpIHsKLSAgICAgIGNvbGxhcHNlX2FsbCg0KTsKLSAgICAgIHBvcyA9IGhyZWYuaW5kZXhPZigiLiIsIHN0YXJ0KTsKLSAgICAgIHdoaWxlIChwb3MgIT0gLTEpIHsKLSAgICAgICAgdmFyIGlkID0gaHJlZi5zdWJzdHJpbmcoc3RhcnQsIHBvcyk7Ci0gICAgICAgIGV4cGFuZChpZCk7Ci0gICAgICAgIHBvcyA9IGhyZWYuaW5kZXhPZigiLiIsIHBvcysxKTsKLSAgICAgIH0KLSAgICAgIHZhciBpZCA9IGhyZWYuc3Vic3RyaW5nKHN0YXJ0LCBocmVmLmxlbmd0aCk7Ci0gICAgICBleHBhbmQoaWQpOwotICAgICAgaGlnaGxpZ2h0KGlkKTsKLSAgICB9Ci0gIH0KLX0KLQotZnVuY3Rpb24ga2lsbF9kb2NsaW5rKGlkKSB7Ci0gIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Ci0gIHBhcmVudC5yZW1vdmVDaGlsZChwYXJlbnQuY2hpbGROb2Rlcy5pdGVtKDApKTsKLX0KLWZ1bmN0aW9uIGF1dG9fa2lsbF9kb2NsaW5rKGV2KSB7Ci0gIGlmICghZXYpIHZhciBldiA9IHdpbmRvdy5ldmVudDsKLSAgaWYgKCF0aGlzLmNvbnRhaW5zKGV2LnRvRWxlbWVudCkpIHsKLSAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5wYXJlbnRJRCk7Ci0gICAgcGFyZW50LnJlbW92ZUNoaWxkKHBhcmVudC5jaGlsZE5vZGVzLml0ZW0oMCkpOwotICB9Ci19Ci0KLWZ1bmN0aW9uIGRvY2xpbmsoaWQsIG5hbWUsIHRhcmdldHNfaWQpIHsKLSAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKLQotICAvLyBJZiB3ZSBhbHJlYWR5IG9wZW5lZCB0aGUgYm94LCB0aGVuIGRlc3Ryb3kgaXQuCi0gIC8vIChUaGlzIGNhc2Ugc2hvdWxkIG5ldmVyIG9jY3VyLCBidXQgbGVhdmUgaXQgaW4ganVzdCBpbiBjYXNlLikKLSAgaWYgKGVsdC5jaGlsZE5vZGVzLmxlbmd0aCA+IDEpIHsKLSAgICBlbHQucmVtb3ZlQ2hpbGQoZWx0LmNoaWxkTm9kZXMuaXRlbSgwKSk7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgLy8gVGhlIG91dGVyIGJveDogcmVsYXRpdmUgKyBpbmxpbmUgcG9zaXRpb25pbmcuCi0gICAgdmFyIGJveDEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBib3gxLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKLSAgICBib3gxLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsKLSAgICBib3gxLnN0eWxlLnRvcCA9IDA7Ci0gICAgYm94MS5zdHlsZS5sZWZ0ID0gMDsKLSAgCi0gICAgLy8gQSBzaGFkb3cgZm9yIGZ1bgotICAgIHZhciBzaGFkb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBzaGFkb3cuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwotICAgIHNoYWRvdy5zdHlsZS5sZWZ0ID0gIi0xLjNlbSI7Ci0gICAgc2hhZG93LnN0eWxlLnRvcCA9ICItMS4zZW0iOwotICAgIHNoYWRvdy5zdHlsZS5iYWNrZ3JvdW5kID0gIiM0MDQwNDAiOwotICAgIAotICAgIC8vIFRoZSBpbm5lciBib3g6IGFic29sdXRlIHBvc2l0aW9uaW5nLgotICAgIHZhciBib3gyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgYm94Mi5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7Ci0gICAgYm94Mi5zdHlsZS5ib3JkZXIgPSAiMXB4IHNvbGlkICNhMGEwYTAiOwotICAgIGJveDIuc3R5bGUubGVmdCA9ICItLjJlbSI7Ci0gICAgYm94Mi5zdHlsZS50b3AgPSAiLS4yZW0iOwotICAgIGJveDIuc3R5bGUuYmFja2dyb3VuZCA9ICJ3aGl0ZSI7Ci0gICAgYm94Mi5zdHlsZS5wYWRkaW5nID0gIi4zZW0gLjRlbSAuM2VtIC40ZW0iOwotICAgIGJveDIuc3R5bGUuZm9udFN0eWxlID0gIm5vcm1hbCI7Ci0gICAgYm94Mi5vbm1vdXNlb3V0PWF1dG9fa2lsbF9kb2NsaW5rOwotICAgIGJveDIucGFyZW50SUQgPSBpZDsKLQotICAgIC8vIEdldCB0aGUgdGFyZ2V0cwotICAgIHZhciB0YXJnZXRzX2VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldHNfaWQpOwotICAgIHZhciB0YXJnZXRzID0gdGFyZ2V0c19lbHQuZ2V0QXR0cmlidXRlKCJ0YXJnZXRzIik7Ci0gICAgdmFyIGxpbmtzID0gIiI7Ci0gICAgdGFyZ2V0X2xpc3QgPSB0YXJnZXRzLnNwbGl0KCIsIik7Ci0gICAgZm9yICh2YXIgaT0wOyBpPHRhcmdldF9saXN0Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhciB0YXJnZXQgPSB0YXJnZXRfbGlzdFtpXS5zcGxpdCgiPSIpOwotICAgICAgICBsaW5rcyArPSAiPGxpPjxhIGhyZWY9JyIgKyB0YXJnZXRbMV0gKyAKLSAgICAgICAgICAgICAgICInIHN0eWxlPSd0ZXh0LWRlY29yYXRpb246bm9uZSc+IiArCi0gICAgICAgICAgICAgICB0YXJnZXRbMF0gKyAiPC9hPjwvbGk+IjsKLSAgICB9Ci0gIAotICAgIC8vIFB1dCBpdCBhbGwgdG9nZXRoZXIuCi0gICAgZWx0Lmluc2VydEJlZm9yZShib3gxLCBlbHQuY2hpbGROb2Rlcy5pdGVtKDApKTsKLSAgICAvL2JveDEuYXBwZW5kQ2hpbGQoYm94Mik7Ci0gICAgYm94MS5hcHBlbmRDaGlsZChzaGFkb3cpOwotICAgIHNoYWRvdy5hcHBlbmRDaGlsZChib3gyKTsKLSAgICBib3gyLmlubmVySFRNTCA9Ci0gICAgICAgICJXaGljaCA8Yj4iK25hbWUrIjwvYj4gZG8geW91IHdhbnQgdG8gc2VlIGRvY3VtZW50YXRpb24gZm9yPyIgKwotICAgICAgICAiPHVsIHN0eWxlPSdtYXJnaW4tYm90dG9tOiAwOyc+IiArCi0gICAgICAgIGxpbmtzICsgCi0gICAgICAgICI8bGk+PGEgaHJlZj0nIycgc3R5bGU9J3RleHQtZGVjb3JhdGlvbjpub25lJyAiICsKLSAgICAgICAgIm9uY2xpY2s9J2tpbGxfZG9jbGluayhcIiIraWQrIlwiKTtyZXR1cm4gZmFsc2U7Jz4iKwotICAgICAgICAiPGk+Tm9uZSBvZiB0aGUgYWJvdmU8L2k+PC9hPjwvbGk+PC91bD4iOwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotZnVuY3Rpb24gZ2V0X2FuY2hvcigpIHsKLSAgICAgICAgICB2YXIgaHJlZiA9IGxvY2F0aW9uLmhyZWY7Ci0gICAgICAgICAgdmFyIHN0YXJ0ID0gaHJlZi5pbmRleE9mKCIjIikrMTsKLSAgICAgICAgICBpZiAoKHN0YXJ0ICE9IDApICYmIChzdGFydCAhPSBocmVmLmxlbmd0aCkpCi0gICAgICAgICAgICAgIHJldHVybiBocmVmLnN1YnN0cmluZyhzdGFydCwgaHJlZi5sZW5ndGgpOwotICAgICAgfQotZnVuY3Rpb24gcmVkaXJlY3RfdXJsKGRvdHRlZE5hbWUpIHsKLSAgICAgICAgICAvLyBTY2FuIHRocm91Z2ggZWFjaCBlbGVtZW50IG9mIHRoZSAicGFnZXMiIGxpc3QsIGFuZCBjaGVjawotICAgICAgICAgIC8vIGlmICJuYW1lIiBtYXRjaGVzIHdpdGggYW55IG9mIHRoZW0uCi0gICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHBhZ2VzLmxlbmd0aDsgaSsrKSB7Ci0KLSAgICAgICAgICAgICAgLy8gRWFjaCBwYWdlIGhhcyB0aGUgZm9ybSAiPHBhZ2VuYW1lPi1tIiBvciAiPHBhZ2VuYW1lPi1jIjsKLSAgICAgICAgICAgICAgLy8gZXh0cmFjdCB0aGUgPHBhZ2VuYW1lPiBwb3J0aW9uICYgY29tcGFyZSBpdCB0byBkb3R0ZWROYW1lLgotICAgICAgICAgICAgICB2YXIgcGFnZW5hbWUgPSBwYWdlc1tpXS5zdWJzdHJpbmcoMCwgcGFnZXNbaV0ubGVuZ3RoLTIpOwotICAgICAgICAgICAgICBpZiAocGFnZW5hbWUgPT0gZG90dGVkTmFtZS5zdWJzdHJpbmcoMCxwYWdlbmFtZS5sZW5ndGgpKSB7Ci0KLSAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGZvdW5kIGEgcGFnZSB0aGF0IG1hdGNoZXMgYGRvdHRlZE5hbWVgOwotICAgICAgICAgICAgICAgICAgLy8gY29uc3RydWN0IGl0cyBVUkwsIHVzaW5nIGxlZnRvdmVyIGBkb3R0ZWROYW1lYAotICAgICAgICAgICAgICAgICAgLy8gY29udGVudCB0byBmb3JtIGFuIGFuY2hvci4KLSAgICAgICAgICAgICAgICAgIHZhciBwYWdldHlwZSA9IHBhZ2VzW2ldLmNoYXJBdChwYWdlc1tpXS5sZW5ndGgtMSk7Ci0gICAgICAgICAgICAgICAgICB2YXIgdXJsID0gcGFnZW5hbWUgKyAoKHBhZ2V0eXBlPT0ibSIpPyItbW9kdWxlLmh0bWwiOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWNsYXNzLmh0bWwiKTsKLSAgICAgICAgICAgICAgICAgIGlmIChkb3R0ZWROYW1lLmxlbmd0aCA+IHBhZ2VuYW1lLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gIiMiICsgZG90dGVkTmFtZS5zdWJzdHJpbmcocGFnZW5hbWUubGVuZ3RoKzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdHRlZE5hbWUubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiB1cmw7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICB9CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9hcGlkb2MvaGVscC5odG1sIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvYXBpZG9jL2hlbHAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFiZjFjOC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9hcGlkb2MvaGVscC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9ImFzY2lpIj8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAgICJEVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci0gIDx0aXRsZT5IZWxwPC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJlcHlkb2MuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLSAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZXB5ZG9jLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSJibHVlIiB2bGluaz0iIzIwNDA4MCIKLSAgICAgIGFsaW5rPSIjMjA0MDgwIj4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT0gTkFWSUdBVElPTiBCQVIgPT09PT09PT09PT09PT09PT09PT0gLS0+Ci08dGFibGUgY2xhc3M9Im5hdmJhciIgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiCi0gICAgICAgYmdjb2xvcj0iI2EwYzBmZiIgY2VsbHNwYWNpbmc9IjAiPgotICA8dHIgdmFsaWduPSJtaWRkbGUiPgotICA8IS0tIEhvbWUgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJyY3NzbWluLW1vZHVsZS5odG1sIj5Ib21lPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBUcmVlIGxpbmsgLS0+Ci0gICAgICA8dGg+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEKLSAgICAgICAgaHJlZj0ibW9kdWxlLXRyZWUuaHRtbCI+VHJlZXM8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEluZGV4IGxpbmsgLS0+Ci0gICAgICA8dGg+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEKLSAgICAgICAgaHJlZj0iaWRlbnRpZmllci1pbmRleC5odG1sIj5JbmRpY2VzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBIZWxwIGxpbmsgLS0+Ci0gICAgICA8dGggYmdjb2xvcj0iIzcwYjBmMCIgY2xhc3M9Im5hdmJhci1zZWxlY3QiCi0gICAgICAgICAgPiZuYnNwOyZuYnNwOyZuYnNwO0hlbHAmbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gUHJvamVjdCBob21lcGFnZSAtLT4KLSAgICAgIDx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0icmlnaHQiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgICA8dHI+PHRoIGNsYXNzPSJuYXZiYXIiIGFsaWduPSJjZW50ZXIiCi0gICAgICAgICAgICA+PGEgaHJlZj0iaHR0cDovL29wZW5zb3VyY2UucGVybGlnLmRlL3Jjc3NtaW4vIiB0YXJnZXQ9Il90b3AiPlZpc2l0IHJjc3NtaW4gT25saW5lPC9hPjwvdGg+Ci0gICAgICAgICAgPC90cj48L3RhYmxlPjwvdGg+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICA8dHIgdmFsaWduPSJ0b3AiPgotICAgIDx0ZCB3aWR0aD0iMTAwJSI+Jm5ic3A7PC90ZD4KLSAgICA8dGQ+Ci0gICAgICA8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgPCEtLSBoaWRlL3Nob3cgcHJpdmF0ZSAtLT4KLSAgICAgIDwvdGFibGU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxoMSBjbGFzcz0iZXB5ZG9jIj4gQVBJIERvY3VtZW50YXRpb24gPC9oMT4KLQotPHA+IFRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIEFQSSAoQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlKQotZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBwcm9qZWN0LiAgRG9jdW1lbnRhdGlvbiBmb3IgdGhlIFB5dGhvbgotb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBwcm9qZWN0IGlzIGRpdmlkZWQgaW50byBzZXBhcmF0ZSBwYWdlcyBmb3IgZWFjaAotcGFja2FnZSwgbW9kdWxlLCBhbmQgY2xhc3MuICBUaGUgQVBJIGRvY3VtZW50YXRpb24gYWxzbyBpbmNsdWRlcyB0d28KLXBhZ2VzIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2plY3QgYXMgYSB3aG9sZTogYSB0cmVlcwotcGFnZSwgYW5kIGFuIGluZGV4IHBhZ2UuICA8L3A+Ci0KLTxoMj4gT2JqZWN0IERvY3VtZW50YXRpb24gPC9oMj4KLQotICA8cD5FYWNoIDxzdHJvbmc+UGFja2FnZSBEb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhZ2UgY29udGFpbnM6IDwvcD4KLSAgPHVsPgotICAgIDxsaT4gQSBkZXNjcmlwdGlvbiBvZiB0aGUgcGFja2FnZS4gPC9saT4KLSAgICA8bGk+IEEgbGlzdCBvZiB0aGUgbW9kdWxlcyBhbmQgc3ViLXBhY2thZ2VzIGNvbnRhaW5lZCBieSB0aGUKLSAgICBwYWNrYWdlLiAgPC9saT4KLSAgICA8bGk+IEEgc3VtbWFyeSBvZiB0aGUgY2xhc3NlcyBkZWZpbmVkIGJ5IHRoZSBwYWNrYWdlLiA8L2xpPgotICAgIDxsaT4gQSBzdW1tYXJ5IG9mIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBieSB0aGUgcGFja2FnZS4gPC9saT4KLSAgICA8bGk+IEEgc3VtbWFyeSBvZiB0aGUgdmFyaWFibGVzIGRlZmluZWQgYnkgdGhlIHBhY2thZ2UuIDwvbGk+Ci0gICAgPGxpPiBBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGVhY2ggZnVuY3Rpb24gZGVmaW5lZCBieSB0aGUKLSAgICBwYWNrYWdlLiA8L2xpPgotICAgIDxsaT4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBlYWNoIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlCi0gICAgcGFja2FnZS4gPC9saT4KLSAgPC91bD4KLSAgCi0gIDxwPkVhY2ggPHN0cm9uZz5Nb2R1bGUgRG9jdW1lbnRhdGlvbjwvc3Ryb25nPiBwYWdlIGNvbnRhaW5zOjwvcD4KLSAgPHVsPgotICAgIDxsaT4gQSBkZXNjcmlwdGlvbiBvZiB0aGUgbW9kdWxlLiA8L2xpPgotICAgIDxsaT4gQSBzdW1tYXJ5IG9mIHRoZSBjbGFzc2VzIGRlZmluZWQgYnkgdGhlIG1vZHVsZS4gPC9saT4KLSAgICA8bGk+IEEgc3VtbWFyeSBvZiB0aGUgZnVuY3Rpb25zIGRlZmluZWQgYnkgdGhlIG1vZHVsZS4gPC9saT4KLSAgICA8bGk+IEEgc3VtbWFyeSBvZiB0aGUgdmFyaWFibGVzIGRlZmluZWQgYnkgdGhlIG1vZHVsZS4gPC9saT4KLSAgICA8bGk+IEEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgZWFjaCBmdW5jdGlvbiBkZWZpbmVkIGJ5IHRoZQotICAgIG1vZHVsZS4gPC9saT4KLSAgICA8bGk+IEEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgZWFjaCB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZQotICAgIG1vZHVsZS4gPC9saT4KLSAgPC91bD4KLSAgCi0gIDxwPkVhY2ggPHN0cm9uZz5DbGFzcyBEb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhZ2UgY29udGFpbnM6IDwvcD4KLSAgPHVsPgotICAgIDxsaT4gQSBjbGFzcyBpbmhlcml0YW5jZSBkaWFncmFtLiA8L2xpPgotICAgIDxsaT4gQSBsaXN0IG9mIGtub3duIHN1YmNsYXNzZXMuIDwvbGk+Ci0gICAgPGxpPiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjbGFzcy4gPC9saT4KLSAgICA8bGk+IEEgc3VtbWFyeSBvZiB0aGUgbWV0aG9kcyBkZWZpbmVkIGJ5IHRoZSBjbGFzcy4gPC9saT4KLSAgICA8bGk+IEEgc3VtbWFyeSBvZiB0aGUgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgdGhlIGNsYXNzLiA8L2xpPgotICAgIDxsaT4gQSBzdW1tYXJ5IG9mIHRoZSBjbGFzcyAoc3RhdGljKSB2YXJpYWJsZXMgZGVmaW5lZCBieSB0aGUKLSAgICBjbGFzcy4gPC9saT4gCi0gICAgPGxpPiBBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGVhY2ggbWV0aG9kIGRlZmluZWQgYnkgdGhlCi0gICAgY2xhc3MuIDwvbGk+Ci0gICAgPGxpPiBBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGVhY2ggaW5zdGFuY2UgdmFyaWFibGUgZGVmaW5lZCBieSB0aGUKLSAgICBjbGFzcy4gPC9saT4gCi0gICAgPGxpPiBBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGVhY2ggY2xhc3MgKHN0YXRpYykgdmFyaWFibGUgZGVmaW5lZAotICAgIGJ5IHRoZSBjbGFzcy4gPC9saT4gCi0gIDwvdWw+Ci0KLTxoMj4gUHJvamVjdCBEb2N1bWVudGF0aW9uIDwvaDI+Ci0KLSAgPHA+IFRoZSA8c3Ryb25nPlRyZWVzPC9zdHJvbmc+IHBhZ2UgY29udGFpbnMgdGhlIG1vZHVsZSBhbmQgY2xhc3MgaGllcmFyY2hpZXM6IDwvcD4KLSAgPHVsPgotICAgIDxsaT4gVGhlIDxlbT5tb2R1bGUgaGllcmFyY2h5PC9lbT4gbGlzdHMgZXZlcnkgcGFja2FnZSBhbmQgbW9kdWxlLCB3aXRoCi0gICAgbW9kdWxlcyBncm91cGVkIGludG8gcGFja2FnZXMuICBBdCB0aGUgdG9wIGxldmVsLCBhbmQgd2l0aGluIGVhY2gKLSAgICBwYWNrYWdlLCBtb2R1bGVzIGFuZCBzdWItcGFja2FnZXMgYXJlIGxpc3RlZCBhbHBoYWJldGljYWxseS4gPC9saT4KLSAgICA8bGk+IFRoZSA8ZW0+Y2xhc3MgaGllcmFyY2h5PC9lbT4gbGlzdHMgZXZlcnkgY2xhc3MsIGdyb3VwZWQgYnkgYmFzZQotICAgIGNsYXNzLiAgSWYgYSBjbGFzcyBoYXMgbW9yZSB0aGFuIG9uZSBiYXNlIGNsYXNzLCB0aGVuIGl0IHdpbGwgYmUKLSAgICBsaXN0ZWQgdW5kZXIgZWFjaCBiYXNlIGNsYXNzLiAgQXQgdGhlIHRvcCBsZXZlbCwgYW5kIHVuZGVyIGVhY2ggYmFzZQotICAgIGNsYXNzLCBjbGFzc2VzIGFyZSBsaXN0ZWQgYWxwaGFiZXRpY2FsbHkuIDwvbGk+Ci0gIDwvdWw+Ci0gIAotICA8cD4gVGhlIDxzdHJvbmc+SW5kZXg8L3N0cm9uZz4gcGFnZSBjb250YWlucyBpbmRpY2VzIG9mIHRlcm1zIGFuZAotICBpZGVudGlmaWVyczogPC9wPgotICA8dWw+Ci0gICAgPGxpPiBUaGUgPGVtPnRlcm0gaW5kZXg8L2VtPiBsaXN0cyBldmVyeSB0ZXJtIGluZGV4ZWQgYnkgYW55IG9iamVjdCdzCi0gICAgZG9jdW1lbnRhdGlvbi4gIEZvciBlYWNoIHRlcm0sIHRoZSBpbmRleCBwcm92aWRlcyBsaW5rcyB0byBlYWNoCi0gICAgcGxhY2Ugd2hlcmUgdGhlIHRlcm0gaXMgaW5kZXhlZC4gPC9saT4KLSAgICA8bGk+IFRoZSA8ZW0+aWRlbnRpZmllciBpbmRleDwvZW0+IGxpc3RzIHRoZSAoc2hvcnQpIG5hbWUgb2YgZXZlcnkgcGFja2FnZSwKLSAgICBtb2R1bGUsIGNsYXNzLCBtZXRob2QsIGZ1bmN0aW9uLCB2YXJpYWJsZSwgYW5kIHBhcmFtZXRlci4gIEZvciBlYWNoCi0gICAgaWRlbnRpZmllciwgdGhlIGluZGV4IHByb3ZpZGVzIGEgc2hvcnQgZGVzY3JpcHRpb24sIGFuZCBhIGxpbmsgdG8KLSAgICBpdHMgZG9jdW1lbnRhdGlvbi4gPC9saT4KLSAgPC91bD4KLQotPGgyPiBUaGUgVGFibGUgb2YgQ29udGVudHMgPC9oMj4KLQotPHA+IFRoZSB0YWJsZSBvZiBjb250ZW50cyBvY2N1cGllcyB0aGUgdHdvIGZyYW1lcyBvbiB0aGUgbGVmdCBzaWRlIG9mCi10aGUgd2luZG93LiAgVGhlIHVwcGVyLWxlZnQgZnJhbWUgZGlzcGxheXMgdGhlIDxlbT5wcm9qZWN0Ci1jb250ZW50czwvZW0+LCBhbmQgdGhlIGxvd2VyLWxlZnQgZnJhbWUgZGlzcGxheXMgdGhlIDxlbT5tb2R1bGUKLWNvbnRlbnRzPC9lbT46IDwvcD4KLQotPHRhYmxlIGNsYXNzPSJoZWxwIHN1bW1hcnkiIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KLSAgPHRyIHN0eWxlPSJoZWlnaHQ6IDMwJSI+Ci0gICAgPHRkIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJmb250LXNpemU6IHNtYWxsIj4KLSAgICAgICBQcm9qZWN0PGJyIC8+Q29udGVudHM8aHIgLz4uLi48L3RkPgotICAgIDx0ZCBhbGlnbj0iY2VudGVyIiBzdHlsZT0iZm9udC1zaXplOiBzbWFsbCIgcm93c3Bhbj0iMiIgd2lkdGg9IjcwJSI+Ci0gICAgICBBUEk8YnIgLz5Eb2N1bWVudGF0aW9uPGJyIC8+RnJhbWU8YnIgLz48YnIgLz48YnIgLz4KLSAgICA8L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJmb250LXNpemU6IHNtYWxsIj4KLSAgICAgIE1vZHVsZTxiciAvPkNvbnRlbnRzPGhyIC8+Jm5ic3A7PGJyIC8+Li4uPGJyIC8+Jm5ic3A7Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+PGJyIC8+Ci0KLTxwPiBUaGUgPHN0cm9uZz5wcm9qZWN0IGNvbnRlbnRzIGZyYW1lPC9zdHJvbmc+IGNvbnRhaW5zIGEgbGlzdCBvZiBhbGwgcGFja2FnZXMKLWFuZCBtb2R1bGVzIHRoYXQgYXJlIGRlZmluZWQgYnkgdGhlIHByb2plY3QuICBDbGlja2luZyBvbiBhbiBlbnRyeQotd2lsbCBkaXNwbGF5IGl0cyBjb250ZW50cyBpbiB0aGUgbW9kdWxlIGNvbnRlbnRzIGZyYW1lLiAgQ2xpY2tpbmcgb24gYQotc3BlY2lhbCBlbnRyeSwgbGFiZWxlZCAiRXZlcnl0aGluZywiIHdpbGwgZGlzcGxheSB0aGUgY29udGVudHMgb2YKLXRoZSBlbnRpcmUgcHJvamVjdC4gPC9wPgotCi08cD4gVGhlIDxzdHJvbmc+bW9kdWxlIGNvbnRlbnRzIGZyYW1lPC9zdHJvbmc+IGNvbnRhaW5zIGEgbGlzdCBvZiBldmVyeQotc3VibW9kdWxlLCBjbGFzcywgdHlwZSwgZXhjZXB0aW9uLCBmdW5jdGlvbiwgYW5kIHZhcmlhYmxlIGRlZmluZWQgYnkgYQotbW9kdWxlIG9yIHBhY2thZ2UuICBDbGlja2luZyBvbiBhbiBlbnRyeSB3aWxsIGRpc3BsYXkgaXRzCi1kb2N1bWVudGF0aW9uIGluIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmcmFtZS4gIENsaWNraW5nIG9uIHRoZSBuYW1lIG9mCi10aGUgbW9kdWxlLCBhdCB0aGUgdG9wIG9mIHRoZSBmcmFtZSwgd2lsbCBkaXNwbGF5IHRoZSBkb2N1bWVudGF0aW9uCi1mb3IgdGhlIG1vZHVsZSBpdHNlbGYuIDwvcD4KLQotPHA+IFRoZSAiPHN0cm9uZz5mcmFtZXM8L3N0cm9uZz4iIGFuZCAiPHN0cm9uZz5ubyBmcmFtZXM8L3N0cm9uZz4iIGJ1dHRvbnMgYmVsb3cgdGhlIHRvcAotbmF2aWdhdGlvbiBiYXIgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB3aGV0aGVyIHRoZSB0YWJsZSBvZiBjb250ZW50cyBpcwotZGlzcGxheWVkIG9yIG5vdC4gPC9wPgotCi08aDI+IFRoZSBOYXZpZ2F0aW9uIEJhciA8L2gyPgotCi08cD4gQSBuYXZpZ2F0aW9uIGJhciBpcyBsb2NhdGVkIGF0IHRoZSB0b3AgYW5kIGJvdHRvbSBvZiBldmVyeSBwYWdlLgotSXQgaW5kaWNhdGVzIHdoYXQgdHlwZSBvZiBwYWdlIHlvdSBhcmUgY3VycmVudGx5IHZpZXdpbmcsIGFuZCBhbGxvd3MKLXlvdSB0byBnbyB0byByZWxhdGVkIHBhZ2VzLiAgVGhlIGZvbGxvd2luZyB0YWJsZSBkZXNjcmliZXMgdGhlIGxhYmVscwotb24gdGhlIG5hdmlnYXRpb24gYmFyLiAgTm90ZSB0aGF0IG5vdCBzb21lIGxhYmVscyAoc3VjaCBhcwotW1BhcmVudF0pIGFyZSBub3QgZGlzcGxheWVkIG9uIGFsbCBwYWdlcy4gPC9wPgotCi08dGFibGUgY2xhc3M9InN1bW1hcnkiIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIiB3aWR0aD0iMTAwJSI+Ci08dHIgY2xhc3M9InN1bW1hcnkiPgotICA8dGg+TGFiZWw8L3RoPgotICA8dGg+SGlnaGxpZ2h0ZWQgd2hlbi4uLjwvdGg+Ci0gIDx0aD5MaW5rcyB0by4uLjwvdGg+Ci08L3RyPgotICA8dHI+PHRkIHZhbGlnbj0idG9wIj48c3Ryb25nPltQYXJlbnRdPC9zdHJvbmc+PC90ZD4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+PGVtPihuZXZlciBoaWdobGlnaHRlZCk8L2VtPjwvdGQ+Ci0gICAgICA8dGQgdmFsaWduPSJ0b3AiPiB0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50IHBhY2thZ2UgPC90ZD48L3RyPgotICA8dHI+PHRkIHZhbGlnbj0idG9wIj48c3Ryb25nPltQYWNrYWdlXTwvc3Ryb25nPjwvdGQ+Ci0gICAgICA8dGQgdmFsaWduPSJ0b3AiPnZpZXdpbmcgYSBwYWNrYWdlPC90ZD4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+dGhlIHBhY2thZ2UgY29udGFpbmluZyB0aGUgY3VycmVudCBvYmplY3QKLSAgICAgIDwvdGQ+PC90cj4KLSAgPHRyPjx0ZCB2YWxpZ249InRvcCI+PHN0cm9uZz5bTW9kdWxlXTwvc3Ryb25nPjwvdGQ+Ci0gICAgICA8dGQgdmFsaWduPSJ0b3AiPnZpZXdpbmcgYSBtb2R1bGU8L3RkPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj50aGUgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgb2JqZWN0Ci0gICAgICA8L3RkPjwvdHI+IAotICA8dHI+PHRkIHZhbGlnbj0idG9wIj48c3Ryb25nPltDbGFzc108L3N0cm9uZz48L3RkPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj52aWV3aW5nIGEgY2xhc3MgPC90ZD4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+dGhlIGNsYXNzIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgb2JqZWN0PC90ZD48L3RyPgotICA8dHI+PHRkIHZhbGlnbj0idG9wIj48c3Ryb25nPltUcmVlc108L3N0cm9uZz48L3RkPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj52aWV3aW5nIHRoZSB0cmVlcyBwYWdlPC90ZD4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+IHRoZSB0cmVlcyBwYWdlIDwvdGQ+PC90cj4KLSAgPHRyPjx0ZCB2YWxpZ249InRvcCI+PHN0cm9uZz5bSW5kZXhdPC9zdHJvbmc+PC90ZD4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+dmlld2luZyB0aGUgaW5kZXggcGFnZTwvdGQ+Ci0gICAgICA8dGQgdmFsaWduPSJ0b3AiPiB0aGUgaW5kZXggcGFnZSA8L3RkPjwvdHI+Ci0gIDx0cj48dGQgdmFsaWduPSJ0b3AiPjxzdHJvbmc+W0hlbHBdPC9zdHJvbmc+PC90ZD4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+dmlld2luZyB0aGUgaGVscCBwYWdlPC90ZD4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+IHRoZSBoZWxwIHBhZ2UgPC90ZD48L3RyPgotPC90YWJsZT4KLQotPHA+IFRoZSAiPHN0cm9uZz5zaG93IHByaXZhdGU8L3N0cm9uZz4iIGFuZCAiPHN0cm9uZz5oaWRlIHByaXZhdGU8L3N0cm9uZz4iIGJ1dHRvbnMgYmVsb3cKLXRoZSB0b3AgbmF2aWdhdGlvbiBiYXIgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB3aGV0aGVyIGRvY3VtZW50YXRpb24KLWZvciBwcml2YXRlIG9iamVjdHMgaXMgZGlzcGxheWVkLiAgUHJpdmF0ZSBvYmplY3RzIGFyZSB1c3VhbGx5IGRlZmluZWQKLWFzIG9iamVjdHMgd2hvc2UgKHNob3J0KSBuYW1lcyBiZWdpbiB3aXRoIGEgc2luZ2xlIHVuZGVyc2NvcmUsIGJ1dCBkbwotbm90IGVuZCB3aXRoIGFuIHVuZGVyc2NvcmUuICBGb3IgZXhhbXBsZSwgIjxjb2RlPl94PC9jb2RlPiIsCi0iPGNvZGU+X19wcHJpbnQ8L2NvZGU+IiwgYW5kICI8Y29kZT5lcHlkb2MuZXB5dGV4dC5fdG9rZW5pemU8L2NvZGU+IgotYXJlIHByaXZhdGUgb2JqZWN0czsgYnV0ICI8Y29kZT5yZS5zdWI8L2NvZGU+IiwKLSI8Y29kZT5fX2luaXRfXzwvY29kZT4iLCBhbmQgIjxjb2RlPnR5cGVfPC9jb2RlPiIgYXJlIG5vdC4gIEhvd2V2ZXIsCi1pZiBhIG1vZHVsZSBkZWZpbmVzIHRoZSAiPGNvZGU+X19hbGxfXzwvY29kZT4iIHZhcmlhYmxlLCB0aGVuIGl0cwotY29udGVudHMgYXJlIHVzZWQgdG8gZGVjaWRlIHdoaWNoIG9iamVjdHMgYXJlIHByaXZhdGUuIDwvcD4KLQotPHA+IEEgdGltZXN0YW1wIGJlbG93IHRoZSBib3R0b20gbmF2aWdhdGlvbiBiYXIgaW5kaWNhdGVzIHdoZW4gZWFjaAotcGFnZSB3YXMgbGFzdCB1cGRhdGVkLiA8L3A+Ci08IS0tID09PT09PT09PT09PT09PT09PT09IE5BVklHQVRJT04gQkFSID09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhYmxlIGNsYXNzPSJuYXZiYXIiIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIgotICAgICAgIGJnY29sb3I9IiNhMGMwZmYiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0ibWlkZGxlIj4KLSAgPCEtLSBIb21lIGxpbmsgLS0+Ci0gICAgICA8dGg+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEKLSAgICAgICAgaHJlZj0icmNzc21pbi1tb2R1bGUuaHRtbCI+SG9tZTwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gVHJlZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9Im1vZHVsZS10cmVlLmh0bWwiPlRyZWVzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBJbmRleCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImlkZW50aWZpZXItaW5kZXguaHRtbCI+SW5kaWNlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSGVscCBsaW5rIC0tPgotICAgICAgPHRoIGJnY29sb3I9IiM3MGIwZjAiIGNsYXNzPSJuYXZiYXItc2VsZWN0IgotICAgICAgICAgID4mbmJzcDsmbmJzcDsmbmJzcDtIZWxwJm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFByb2plY3QgaG9tZXBhZ2UgLS0+Ci0gICAgICA8dGggY2xhc3M9Im5hdmJhciIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMTAwJSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgICAgPHRyPjx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgPjxhIGhyZWY9Imh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yY3NzbWluLyIgdGFyZ2V0PSJfdG9wIj5WaXNpdCByY3NzbWluIE9ubGluZTwvYT48L3RoPgotICAgICAgICAgIDwvdHI+PC90YWJsZT48L3RoPgotICA8L3RyPgotPC90YWJsZT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIC8vIFByaXZhdGUgb2JqZWN0cyBhcmUgaW5pdGlhbGx5IGRpc3BsYXllZCAoYmVjYXVzZSBpZgotICAvLyBqYXZhc2NyaXB0IGlzIHR1cm5lZCBvZmYgdGhlbiB3ZSB3YW50IHRoZW0gdG8gYmUKLSAgLy8gdmlzaWJsZSk7IGJ1dCBieSBkZWZhdWx0LCB3ZSB3YW50IHRvIGhpZGUgdGhlbS4gIFNvIGhpZGUKLSAgLy8gdGhlbSB1bmxlc3Mgd2UgaGF2ZSBhIGNvb2tpZSB0aGF0IHNheXMgdG8gc2hvdyB0aGVtLgotICBjaGVja0Nvb2tpZSgpOwotICAvLyAtLT4KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvYXBpZG9jL2lkZW50aWZpZXItaW5kZXguaHRtbCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL2FwaWRvYy9pZGVudGlmaWVyLWluZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYWNhZmQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvYXBpZG9jL2lkZW50aWZpZXItaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJhc2NpaSI/PgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAgICAgICAiRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotICA8dGl0bGU+SWRlbnRpZmllciBJbmRleDwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZXB5ZG9jLmNzcyIgdHlwZT0idGV4dC9jc3MiIC8+Ci0gIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImVweWRvYy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iYmx1ZSIgdmxpbms9IiMyMDQwODAiCi0gICAgICBhbGluaz0iIzIwNDA4MCI+Ci08IS0tID09PT09PT09PT09PT09PT09PT09IE5BVklHQVRJT04gQkFSID09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhYmxlIGNsYXNzPSJuYXZiYXIiIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIgotICAgICAgIGJnY29sb3I9IiNhMGMwZmYiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0ibWlkZGxlIj4KLSAgPCEtLSBIb21lIGxpbmsgLS0+Ci0gICAgICA8dGg+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEKLSAgICAgICAgaHJlZj0icmNzc21pbi1tb2R1bGUuaHRtbCI+SG9tZTwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gVHJlZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9Im1vZHVsZS10cmVlLmh0bWwiPlRyZWVzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBJbmRleCBsaW5rIC0tPgotICAgICAgPHRoIGJnY29sb3I9IiM3MGIwZjAiIGNsYXNzPSJuYXZiYXItc2VsZWN0IgotICAgICAgICAgID4mbmJzcDsmbmJzcDsmbmJzcDtJbmRpY2VzJm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEhlbHAgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJoZWxwLmh0bWwiPkhlbHA8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFByb2plY3QgaG9tZXBhZ2UgLS0+Ci0gICAgICA8dGggY2xhc3M9Im5hdmJhciIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMTAwJSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgICAgPHRyPjx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgPjxhIGhyZWY9Imh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yY3NzbWluLyIgdGFyZ2V0PSJfdG9wIj5WaXNpdCByY3NzbWluIE9ubGluZTwvYT48L3RoPgotICAgICAgICAgIDwvdHI+PC90YWJsZT48L3RoPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0idG9wIj4KLSAgICA8dGQgd2lkdGg9IjEwMCUiPiZuYnNwOzwvdGQ+Ci0gICAgPHRkPgotICAgICAgPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgIDwhLS0gaGlkZS9zaG93IHByaXZhdGUgLS0+Ci0gICAgICA8L3RhYmxlPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPgotPHRyIHZhbGlnbj0iYm90dG9tIj48dGQ+Ci08aDEgY2xhc3M9ImVweWRvYyI+SWRlbnRpZmllciBJbmRleDwvaDE+Ci08L3RkPjx0ZD4KLVsKLSAgQQotICBCCi0gPGEgaHJlZj0iI0MiPkM8L2E+Ci0gIEQKLSAgRQotICBGCi0gIEcKLSAgSAotICBJCi0gIEoKLSAgSwotICBMCi0gIE0KLSAgTgotICBPCi0gIFAKLSAgUQotIDxhIGhyZWY9IiNSIj5SPC9hPgotICBTCi0gIFQKLSAgVQotICBWCi0gIFcKLSAgWAotICBZCi0gIFoKLSA8YSBocmVmPSIjXyI+XzwvYT4KLV0KLTwvdGQ+PC90YWJsZT4KLTx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIj4KLTx0ciB2YWxpZ249InRvcCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMSUiPjxoMiBjbGFzcz0iZXB5ZG9jIj48YSBuYW1lPSJDIj5DPC9hPjwvaDI+PC90ZD4KLTx0ZCB2YWxpZ249InRvcCI+Ci08dGFibGUgY2xhc3M9ImxpbmstaW5kZXgiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPgotPHRyPgotPHRkIHdpZHRoPSIzMyUiIGNsYXNzPSJsaW5rLWluZGV4Ij48YSBocmVmPSJyY3NzbWluLW1vZHVsZS5odG1sI2Nzc21pbiI+Y3NzbWluKCk8L2E+PGJyIC8+Ci08c3BhbiBjbGFzcz0iaW5kZXgtd2hlcmUiPihpbiZuYnNwOzxhIGhyZWY9InJjc3NtaW4tbW9kdWxlLmh0bWwiPnJjc3NtaW48L2E+KTwvc3Bhbj48L3RkPgotPHRkIHdpZHRoPSIzMyUiIGNsYXNzPSJsaW5rLWluZGV4Ij4mbmJzcDs8L3RkPgotPHRkIHdpZHRoPSIzMyUiIGNsYXNzPSJsaW5rLWluZGV4Ij4mbmJzcDs8L3RkPgotPC90cj4KLTx0cj48dGQgY2xhc3M9ImxpbmstaW5kZXgiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJsaW5rLWluZGV4Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibGluay1pbmRleCI+Jm5ic3A7PC90ZD48L3RyPgotPC90YWJsZT4KLTwvdGQ+PC90cj4KLTx0ciB2YWxpZ249InRvcCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMSUiPjxoMiBjbGFzcz0iZXB5ZG9jIj48YSBuYW1lPSJSIj5SPC9hPjwvaDI+PC90ZD4KLTx0ZCB2YWxpZ249InRvcCI+Ci08dGFibGUgY2xhc3M9ImxpbmstaW5kZXgiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPgotPHRyPgotPHRkIHdpZHRoPSIzMyUiIGNsYXNzPSJsaW5rLWluZGV4Ij48YSBocmVmPSJyY3NzbWluLW1vZHVsZS5odG1sIj5yY3NzbWluPC9hPjwvdGQ+Ci08dGQgd2lkdGg9IjMzJSIgY2xhc3M9ImxpbmstaW5kZXgiPiZuYnNwOzwvdGQ+Ci08dGQgd2lkdGg9IjMzJSIgY2xhc3M9ImxpbmstaW5kZXgiPiZuYnNwOzwvdGQ+Ci08L3RyPgotPHRyPjx0ZCBjbGFzcz0ibGluay1pbmRleCI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImxpbmstaW5kZXgiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJsaW5rLWluZGV4Ij4mbmJzcDs8L3RkPjwvdHI+Ci08L3RhYmxlPgotPC90ZD48L3RyPgotPHRyIHZhbGlnbj0idG9wIj48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxJSI+PGgyIGNsYXNzPSJlcHlkb2MiPjxhIG5hbWU9Il8iPl88L2E+PC9oMj48L3RkPgotPHRkIHZhbGlnbj0idG9wIj4KLTx0YWJsZSBjbGFzcz0ibGluay1pbmRleCIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+Ci08dHI+Ci08dGQgd2lkdGg9IjMzJSIgY2xhc3M9ImxpbmstaW5kZXgiPjxhIGhyZWY9InJjc3NtaW4tbW9kdWxlLmh0bWwjX19kb2NfXyI+X19kb2NfXzwvYT48YnIgLz4KLTxzcGFuIGNsYXNzPSJpbmRleC13aGVyZSI+KGluJm5ic3A7PGEgaHJlZj0icmNzc21pbi1tb2R1bGUuaHRtbCI+cmNzc21pbjwvYT4pPC9zcGFuPjwvdGQ+Ci08dGQgd2lkdGg9IjMzJSIgY2xhc3M9ImxpbmstaW5kZXgiPjxhIGhyZWY9InJjc3NtaW4tbW9kdWxlLmh0bWwjX19saWNlbnNlX18iPl9fbGljZW5zZV9fPC9hPjxiciAvPgotPHNwYW4gY2xhc3M9ImluZGV4LXdoZXJlIj4oaW4mbmJzcDs8YSBocmVmPSJyY3NzbWluLW1vZHVsZS5odG1sIj5yY3NzbWluPC9hPik8L3NwYW4+PC90ZD4KLTx0ZCB3aWR0aD0iMzMlIiBjbGFzcz0ibGluay1pbmRleCI+PGEgaHJlZj0icmNzc21pbi1tb2R1bGUuaHRtbCNfX3BhY2thZ2VfXyI+X19wYWNrYWdlX188L2E+PGJyIC8+Ci08c3BhbiBjbGFzcz0iaW5kZXgtd2hlcmUiPihpbiZuYnNwOzxhIGhyZWY9InJjc3NtaW4tbW9kdWxlLmh0bWwiPnJjc3NtaW48L2E+KTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj48dGQgY2xhc3M9ImxpbmstaW5kZXgiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJsaW5rLWluZGV4Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibGluay1pbmRleCI+Jm5ic3A7PC90ZD48L3RyPgotPC90YWJsZT4KLTwvdGQ+PC90cj4KLTwvdGFibGU+Ci08YnIgLz48YnIgLz48IS0tID09PT09PT09PT09PT09PT09PT09IE5BVklHQVRJT04gQkFSID09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhYmxlIGNsYXNzPSJuYXZiYXIiIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIgotICAgICAgIGJnY29sb3I9IiNhMGMwZmYiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0ibWlkZGxlIj4KLSAgPCEtLSBIb21lIGxpbmsgLS0+Ci0gICAgICA8dGg+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEKLSAgICAgICAgaHJlZj0icmNzc21pbi1tb2R1bGUuaHRtbCI+SG9tZTwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gVHJlZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9Im1vZHVsZS10cmVlLmh0bWwiPlRyZWVzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBJbmRleCBsaW5rIC0tPgotICAgICAgPHRoIGJnY29sb3I9IiM3MGIwZjAiIGNsYXNzPSJuYXZiYXItc2VsZWN0IgotICAgICAgICAgID4mbmJzcDsmbmJzcDsmbmJzcDtJbmRpY2VzJm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEhlbHAgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJoZWxwLmh0bWwiPkhlbHA8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFByb2plY3QgaG9tZXBhZ2UgLS0+Ci0gICAgICA8dGggY2xhc3M9Im5hdmJhciIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMTAwJSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgICAgPHRyPjx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgPjxhIGhyZWY9Imh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yY3NzbWluLyIgdGFyZ2V0PSJfdG9wIj5WaXNpdCByY3NzbWluIE9ubGluZTwvYT48L3RoPgotICAgICAgICAgIDwvdHI+PC90YWJsZT48L3RoPgotICA8L3RyPgotPC90YWJsZT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIC8vIFByaXZhdGUgb2JqZWN0cyBhcmUgaW5pdGlhbGx5IGRpc3BsYXllZCAoYmVjYXVzZSBpZgotICAvLyBqYXZhc2NyaXB0IGlzIHR1cm5lZCBvZmYgdGhlbiB3ZSB3YW50IHRoZW0gdG8gYmUKLSAgLy8gdmlzaWJsZSk7IGJ1dCBieSBkZWZhdWx0LCB3ZSB3YW50IHRvIGhpZGUgdGhlbS4gIFNvIGhpZGUKLSAgLy8gdGhlbSB1bmxlc3Mgd2UgaGF2ZSBhIGNvb2tpZSB0aGF0IHNheXMgdG8gc2hvdyB0aGVtLgotICBjaGVja0Nvb2tpZSgpOwotICAvLyAtLT4KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvYXBpZG9jL2luZGV4Lmh0bWwgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9hcGlkb2MvaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRmZmRkZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9hcGlkb2MvaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJhc2NpaSI/PgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAgICAgICAiRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotICA8dGl0bGU+cmNzc21pbjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZXB5ZG9jLmNzcyIgdHlwZT0idGV4dC9jc3MiIC8+Ci0gIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImVweWRvYy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iYmx1ZSIgdmxpbms9IiMyMDQwODAiCi0gICAgICBhbGluaz0iIzIwNDA4MCI+Ci08IS0tID09PT09PT09PT09PT09PT09PT09IE5BVklHQVRJT04gQkFSID09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhYmxlIGNsYXNzPSJuYXZiYXIiIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIgotICAgICAgIGJnY29sb3I9IiNhMGMwZmYiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0ibWlkZGxlIj4KLSAgPCEtLSBIb21lIGxpbmsgLS0+Ci0gICAgICA8dGggYmdjb2xvcj0iIzcwYjBmMCIgY2xhc3M9Im5hdmJhci1zZWxlY3QiCi0gICAgICAgICAgPiZuYnNwOyZuYnNwOyZuYnNwO0hvbWUmbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gVHJlZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9Im1vZHVsZS10cmVlLmh0bWwiPlRyZWVzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBJbmRleCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImlkZW50aWZpZXItaW5kZXguaHRtbCI+SW5kaWNlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSGVscCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImhlbHAuaHRtbCI+SGVscDwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gUHJvamVjdCBob21lcGFnZSAtLT4KLSAgICAgIDx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0icmlnaHQiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgICA8dHI+PHRoIGNsYXNzPSJuYXZiYXIiIGFsaWduPSJjZW50ZXIiCi0gICAgICAgICAgICA+PGEgaHJlZj0iaHR0cDovL29wZW5zb3VyY2UucGVybGlnLmRlL3Jjc3NtaW4vIiB0YXJnZXQ9Il90b3AiPlZpc2l0IHJjc3NtaW4gT25saW5lPC9hPjwvdGg+Ci0gICAgICAgICAgPC90cj48L3RhYmxlPjwvdGg+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICA8dHIgdmFsaWduPSJ0b3AiPgotICAgIDx0ZCB3aWR0aD0iMTAwJSI+Ci0gICAgICA8c3BhbiBjbGFzcz0iYnJlYWRjcnVtYnMiPgotICAgICAgICBNb2R1bGUmbmJzcDtyY3NzbWluCi0gICAgICA8L3NwYW4+Ci0gICAgPC90ZD4KLSAgICA8dGQ+Ci0gICAgICA8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgPCEtLSBoaWRlL3Nob3cgcHJpdmF0ZSAtLT4KLSAgICAgIDwvdGFibGU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08IS0tID09PT09PT09PT09PT09PT09PT09IE1PRFVMRSBERVNDUklQVElPTiA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTxoMSBjbGFzcz0iZXB5ZG9jIj5Nb2R1bGUgcmNzc21pbjwvaDE+PHAgY2xhc3M9Im5vbWFyZ2luLXRvcCI+PHNwYW4gY2xhc3M9ImNvZGVsaW5rIj48YSBocmVmPSJyY3NzbWluLXB5c3JjLmh0bWwiPnNvdXJjZSZuYnNwO2NvZGU8L2E+PC9zcGFuPjwvcD4KLTxwPkNTUyBNaW5pZmllci48L3A+Ci08cD5UaGUgbWluaWZpZXIgaXMgYmFzZWQgb24gdGhlIHNlbWFudGljcyBvZiB0aGUgPGEgY2xhc3M9InJzdC1yZWZlcmVuY2UgZXh0ZXJuYWwiIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS95dWkveXVpY29tcHJlc3Nvci8iIHRhcmdldD0iX3RvcCI+WVVJIGNvbXByZXNzb3I8L2E+LCB3aGljaAotaXRzZWxmIGlzIGJhc2VkIG9uIDxhIGNsYXNzPSJyc3QtcmVmZXJlbmNlIGV4dGVybmFsIiBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL2Nzc21pbi8iIHRhcmdldD0iX3RvcCI+dGhlIHJ1bGUgbGlzdCBieSBJc2FhYyBTY2hsdWV0ZXI8L2E+LjwvcD4KLTxwPlRoaXMgbW9kdWxlIGlzIGEgcmUtaW1wbGVtZW50YXRpb24gYWltaW5nIGZvciBzcGVlZCBpbnN0ZWFkIG9mIG1heGltdW0KLWNvbXByZXNzaW9uLCBzbyBpdCBjYW4gYmUgdXNlZCBhdCBydW50aW1lIChyYXRoZXIgdGhhbiBkdXJpbmcgYSBwcmVwcm9jZXNzaW5nCi1zdGVwKS4gUkNTU21pbiBkb2VzIHN5bnRhY3RpY2FsIGNvbXByZXNzaW9uIG9ubHkgKHJlbW92aW5nIHNwYWNlcywgY29tbWVudHMKLWFuZCBwb3NzaWJseSBzZW1pY29sb25zKS4gSXQgZG9lcyBub3QgcHJvdmlkZSBzZW1hbnRpYyBjb21wcmVzc2lvbiAobGlrZQotcmVtb3ZpbmcgZW1wdHkgYmxvY2tzLCBjb2xsYXBzaW5nIHJlZHVuZGFudCBwcm9wZXJ0aWVzIGV0YykuIEl0IGRvZXMsIGhvd2V2ZXIsCi1zdXBwb3J0IHZhcmlvdXMgQ1NTIGhhY2tzIChieSBrZWVwaW5nIHRoZW0gd29ya2luZyBhcyBpbnRlbmRlZCkuPC9wPgotPHA+SGVyZSdzIGEgZmVhdHVyZSBsaXN0OjwvcD4KLTx1bCBjbGFzcz0icnN0LXNpbXBsZSI+Ci08bGk+U3RyaW5ncyBhcmUga2VwdCwgZXhjZXB0IHRoYXQgZXNjYXBlZCBuZXdsaW5lcyBhcmUgc3RyaXBwZWQ8L2xpPgotPGxpPlNwYWNlL0NvbW1lbnRzIGJlZm9yZSB0aGUgdmVyeSBlbmQgb3IgYmVmb3JlIHZhcmlvdXMgY2hhcmFjdGVycyBhcmUKLXN0cmlwcGVkOiA8dHQgY2xhc3M9InJzdC1kb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj46e30pOz0mZ3Q7K10sITwvc3Bhbj48L3R0PiAoVGhlIGNvbG9uICg8dHQgY2xhc3M9InJzdC1kb2N1dGlscyBsaXRlcmFsIj46PC90dD4pIGlzIGEgc3BlY2lhbCBjYXNlLCBhIHNpbmdsZQotc3BhY2UgaXMga2VwdCBpZiBpdCdzIG91dHNpZGUgYSBydWxlc2V0Lik8L2xpPgotPGxpPlNwYWNlL0NvbW1lbnRzIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvciBhZnRlciB2YXJpb3VzIGNoYXJhY3RlcnMgYXJlCi1zdHJpcHBlZDogPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+e30oPTomZ3Q7K1ssITwvc3Bhbj48L3R0PjwvbGk+Ci08bGk+T3B0aW9uYWwgc3BhY2UgYWZ0ZXIgdW5pY29kZSBlc2NhcGVzIGlzIGtlcHQsIHJlc3AuIHJlcGxhY2VkIGJ5IGEgc2ltcGxlCi1zcGFjZTwvbGk+Ci08bGk+d2hpdGVzcGFjZXMgaW5zaWRlIDx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPnVybCgpPC90dD4gZGVmaW5pdGlvbnMgYXJlIHN0cmlwcGVkPC9saT4KLTxsaT5Db21tZW50cyBzdGFydGluZyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmsgKDx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPiE8L3R0PikgY2FuIGJlIGtlcHQgb3B0aW9uYWxseS48L2xpPgotPGxpPkFsbCBvdGhlciBjb21tZW50cyBhbmQvb3Igd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCBieSBhIHNpbmdsZQotc3BhY2UuPC9saT4KLTxsaT5NdWx0aXBsZSBjb25zZWN1dGl2ZSBzZW1pY29sb25zIGFyZSByZWR1Y2VkIHRvIG9uZTwvbGk+Ci08bGk+VGhlIGxhc3Qgc2VtaWNvbG9uIHdpdGhpbiBhIHJ1bGVzZXQgaXMgc3RyaXBwZWQ8L2xpPgotPGxpPkNTUyBIYWNrcyBzdXBwb3J0ZWQ6PHVsPgotPGxpPklFNyBoYWNrICg8dHQgY2xhc3M9InJzdC1kb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj4mZ3Q7LyoqLzwvc3Bhbj48L3R0Pik8L2xpPgotPGxpPk1hYy1JRTUgaGFjayAoPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+LypcKi8uLi4vKiovPC9zcGFuPjwvdHQ+KTwvbGk+Ci08bGk+VGhlIGJveG1vZGVsaGFjayBpcyBzdXBwb3J0ZWQgbmF0dXJhbGx5IGJlY2F1c2UgaXQgcmVsaWVzIG9uIHZhbGlkIENTUzIKLXN0cmluZ3M8L2xpPgotPGxpPkJldHdlZW4gPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+OmZpcnN0LWxpbmU8L3NwYW4+PC90dD4gYW5kIHRoZSBmb2xsb3dpbmcgY29tbWEgb3IgY3VybHkgYnJhY2UgYSBzcGFjZSBpcwotaW5zZXJ0ZWQuIChhcHBhcmVudGx5IGl0J3MgbmVlZGVkIGZvciBJRTYpPC9saT4KLTxsaT5TYW1lIGZvciA8dHQgY2xhc3M9InJzdC1kb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj46Zmlyc3QtbGV0dGVyPC9zcGFuPjwvdHQ+PC9saT4KLTwvdWw+Ci08L2xpPgotPC91bD4KLTxwPnJjc3NtaW4uYyBpcyBhIHJlaW1wbGVtZW50YXRpb24gb2YgcmNzc21pbi5weSBpbiBDIGFuZCBpbXByb3ZlcyBydW50aW1lIHVwIHRvCi1mYWN0b3IgMTAwIG9yIHNvIChkZXBlbmRpbmcgb24gdGhlIGlucHV0KS4gZG9jcy9CRU5DSE1BUktTIGluIHRoZSBzb3VyY2UKLWRpc3RyaWJ1dGlvbiBjb250YWlucyB0aGUgZGV0YWlscy48L3A+Ci08cD5Cb3RoIHB5dGhvbiAyICgmZ3Q7PSAyLjQpIGFuZCBweXRob24gMyBhcmUgc3VwcG9ydGVkLjwvcD4KLQotPGhyIC8+Ci08ZGl2IGNsYXNzPSJmaWVsZHMiPiAgICAgIDxwPjxzdHJvbmc+Q29weXJpZ2h0Ojwvc3Ryb25nPgotICAgICAgICBDb3B5cmlnaHQgMjAxMSAtIDIwMTQKLUFuZHImIzIzMzsgTWFsbyBvciBoaXMgbGljZW5zb3JzLCBhcyBhcHBsaWNhYmxlCi0gICAgICA8L3A+Ci0gICAgICA8cD48c3Ryb25nPkxpY2Vuc2U6PC9zdHJvbmc+Ci0gICAgICAgIDxwPkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAmcXVvdDtMaWNlbnNlJnF1b3Q7KTsKLXlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLVlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDwvcD4KLTxibG9ja3F1b3RlPgotPGEgY2xhc3M9InJzdC1yZWZlcmVuY2UgZXh0ZXJuYWwiIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+PC9ibG9ja3F1b3RlPgotPHA+VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsCi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLVNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLWxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLjwvcD4KLSAgICAgIDwvcD4KLSAgICAgIDxwPjxzdHJvbmc+VmVyc2lvbjo8L3N0cm9uZz4KLSAgICAgICAgMS4wLjUKLSAgICAgIDwvcD4KLSAgICAgIDxwPjxzdHJvbmc+QXV0aG9yOjwvc3Ryb25nPgotICAgICAgICBBbmRyJiMyMzM7IE1hbG8KLSAgICAgIDwvcD4KLTwvZGl2PjwhLS0gPT09PT09PT09PT09PT09PT09PT0gRlVOQ1RJT05TID09PT09PT09PT09PT09PT09PT09IC0tPgotPGEgbmFtZT0ic2VjdGlvbi1GdW5jdGlvbnMiPjwvYT4KLTx0YWJsZSBjbGFzcz0ic3VtbWFyeSIgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMyIKLSAgICAgICBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IndoaXRlIj4KLTx0ciBiZ2NvbG9yPSIjNzBiMGYwIiBjbGFzcz0idGFibGUtaGVhZGVyIj4KLSAgPHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSIyIiBjbGFzcz0idGFibGUtaGVhZGVyIj4KLSAgICA8c3BhbiBjbGFzcz0idGFibGUtaGVhZGVyIj5GdW5jdGlvbnM8L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci0gICAgPHRkIHdpZHRoPSIxNSUiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiIGNsYXNzPSJzdW1tYXJ5Ij4KLSAgICAgIDxzcGFuIGNsYXNzPSJzdW1tYXJ5LXR5cGUiPjx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPnN0cjwvdHQ+PC9zcGFuPgotICAgIDwvdGQ+PHRkIGNsYXNzPSJzdW1tYXJ5Ij4KLSAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkPjxzcGFuIGNsYXNzPSJzdW1tYXJ5LXNpZyI+PGEgaHJlZj0icmNzc21pbi1tb2R1bGUuaHRtbCNjc3NtaW4iIGNsYXNzPSJzdW1tYXJ5LXNpZy1uYW1lIj5jc3NtaW48L2E+KDxzcGFuIGNsYXNzPSJzdW1tYXJ5LXNpZy1hcmciPnN0eWxlPC9zcGFuPiwKLSAgICAgICAgPHNwYW4gY2xhc3M9InN1bW1hcnktc2lnLWFyZyI+a2VlcF9iYW5nX2NvbW1lbnRzPC9zcGFuPj08c3BhbiBjbGFzcz0ic3VtbWFyeS1zaWctZGVmYXVsdCI+RmFsc2U8L3NwYW4+KTwvc3Bhbj48YnIgLz4KLSAgICAgIE1pbmlmeSBDU1MuPC90ZD4KLSAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29kZWxpbmsiPjxhIGhyZWY9InJjc3NtaW4tcHlzcmMuaHRtbCNjc3NtaW4iPnNvdXJjZSZuYnNwO2NvZGU8L2E+PC9zcGFuPgotICAgICAgICAgICAgCi0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICAKLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT0gRlVOQ1RJT04gREVUQUlMUyA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTxhIG5hbWU9InNlY3Rpb24tRnVuY3Rpb25EZXRhaWxzIj48L2E+Ci08dGFibGUgY2xhc3M9ImRldGFpbHMiIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjMiCi0gICAgICAgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSJ3aGl0ZSI+Ci08dHIgYmdjb2xvcj0iIzcwYjBmMCIgY2xhc3M9InRhYmxlLWhlYWRlciI+Ci0gIDx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMiIgY2xhc3M9InRhYmxlLWhlYWRlciI+Ci0gICAgPHNwYW4gY2xhc3M9InRhYmxlLWhlYWRlciI+RnVuY3Rpb24gRGV0YWlsczwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08YSBuYW1lPSJjc3NtaW4iPjwvYT4KLTxkaXY+Ci08dGFibGUgY2xhc3M9ImRldGFpbHMiIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjMiCi0gICAgICAgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSJ3aGl0ZSI+Ci08dHI+PHRkPgotICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIj4KLSAgPHRyIHZhbGlnbj0idG9wIj48dGQ+Ci0gIDxoMyBjbGFzcz0iZXB5ZG9jIj48c3BhbiBjbGFzcz0ic2lnIj48c3BhbiBjbGFzcz0ic2lnLW5hbWUiPmNzc21pbjwvc3Bhbj4oPHNwYW4gY2xhc3M9InNpZy1hcmciPnN0eWxlPC9zcGFuPiwKLSAgICAgICAgPHNwYW4gY2xhc3M9InNpZy1hcmciPmtlZXBfYmFuZ19jb21tZW50czwvc3Bhbj49PHNwYW4gY2xhc3M9InNpZy1kZWZhdWx0Ij5GYWxzZTwvc3Bhbj4pPC9zcGFuPgotICA8L2gzPgotICA8L3RkPjx0ZCBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIgotICAgID48c3BhbiBjbGFzcz0iY29kZWxpbmsiPjxhIGhyZWY9InJjc3NtaW4tcHlzcmMuaHRtbCNjc3NtaW4iPnNvdXJjZSZuYnNwO2NvZGU8L2E+PC9zcGFuPiZuYnNwOwotICAgIDwvdGQ+Ci0gIDwvdHI+PC90YWJsZT4KLSAgCi0gIE1pbmlmeSBDU1MuCi0gIDxkbCBjbGFzcz0iZmllbGRzIj4KLSAgICA8ZHQ+UGFyYW1ldGVyczo8L2R0PgotICAgIDxkZD48dWwgY2xhc3M9Im5vbWFyZ2luLXRvcCI+Ci0gICAgICAgIDxsaT48c3Ryb25nIGNsYXNzPSJwbmFtZSI+PGNvZGU+c3R5bGU8L2NvZGU+PC9zdHJvbmc+ICg8dHQgY2xhc3M9InJzdC1kb2N1dGlscyBsaXRlcmFsIj5zdHI8L3R0PikgLSBDU1MgdG8gbWluaWZ5PC9saT4KLSAgICAgICAgPGxpPjxzdHJvbmcgY2xhc3M9InBuYW1lIj48Y29kZT5rZWVwX2JhbmdfY29tbWVudHM8L2NvZGU+PC9zdHJvbmc+ICg8dHQgY2xhc3M9InJzdC1kb2N1dGlscyBsaXRlcmFsIj5ib29sPC90dD4pIC0gS2VlcCBjb21tZW50cyBzdGFydGluZyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcms/ICg8dHQgY2xhc3M9InJzdC1kb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj4vKiEuLi4qLzwvc3Bhbj48L3R0Pik8L2xpPgotICAgIDwvdWw+PC9kZD4KLSAgICA8ZHQ+UmV0dXJuczogPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+c3RyPC90dD48L2R0PgotICAgICAgICA8ZGQ+TWluaWZpZWQgc3R5bGU8L2RkPgotICA8L2RsPgotPC90ZD48L3RyPjwvdGFibGU+Ci08L2Rpdj4KLTxiciAvPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PSBOQVZJR0FUSU9OIEJBUiA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YWJsZSBjbGFzcz0ibmF2YmFyIiBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIKLSAgICAgICBiZ2NvbG9yPSIjYTBjMGZmIiBjZWxsc3BhY2luZz0iMCI+Ci0gIDx0ciB2YWxpZ249Im1pZGRsZSI+Ci0gIDwhLS0gSG9tZSBsaW5rIC0tPgotICAgICAgPHRoIGJnY29sb3I9IiM3MGIwZjAiIGNsYXNzPSJuYXZiYXItc2VsZWN0IgotICAgICAgICAgID4mbmJzcDsmbmJzcDsmbmJzcDtIb21lJm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFRyZWUgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJtb2R1bGUtdHJlZS5odG1sIj5UcmVlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSW5kZXggbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJpZGVudGlmaWVyLWluZGV4Lmh0bWwiPkluZGljZXM8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEhlbHAgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJoZWxwLmh0bWwiPkhlbHA8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFByb2plY3QgaG9tZXBhZ2UgLS0+Ci0gICAgICA8dGggY2xhc3M9Im5hdmJhciIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMTAwJSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgICAgPHRyPjx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgPjxhIGhyZWY9Imh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yY3NzbWluLyIgdGFyZ2V0PSJfdG9wIj5WaXNpdCByY3NzbWluIE9ubGluZTwvYT48L3RoPgotICAgICAgICAgIDwvdHI+PC90YWJsZT48L3RoPgotICA8L3RyPgotPC90YWJsZT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIC8vIFByaXZhdGUgb2JqZWN0cyBhcmUgaW5pdGlhbGx5IGRpc3BsYXllZCAoYmVjYXVzZSBpZgotICAvLyBqYXZhc2NyaXB0IGlzIHR1cm5lZCBvZmYgdGhlbiB3ZSB3YW50IHRoZW0gdG8gYmUKLSAgLy8gdmlzaWJsZSk7IGJ1dCBieSBkZWZhdWx0LCB3ZSB3YW50IHRvIGhpZGUgdGhlbS4gIFNvIGhpZGUKLSAgLy8gdGhlbSB1bmxlc3Mgd2UgaGF2ZSBhIGNvb2tpZSB0aGF0IHNheXMgdG8gc2hvdyB0aGVtLgotICBjaGVja0Nvb2tpZSgpOwotICAvLyAtLT4KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvYXBpZG9jL21vZHVsZS10cmVlLmh0bWwgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9hcGlkb2MvbW9kdWxlLXRyZWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUyMmRkMS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9hcGlkb2MvbW9kdWxlLXRyZWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9ImFzY2lpIj8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAgICJEVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci0gIDx0aXRsZT5Nb2R1bGUgSGllcmFyY2h5PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJlcHlkb2MuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLSAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZXB5ZG9jLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSJibHVlIiB2bGluaz0iIzIwNDA4MCIKLSAgICAgIGFsaW5rPSIjMjA0MDgwIj4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT0gTkFWSUdBVElPTiBCQVIgPT09PT09PT09PT09PT09PT09PT0gLS0+Ci08dGFibGUgY2xhc3M9Im5hdmJhciIgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiCi0gICAgICAgYmdjb2xvcj0iI2EwYzBmZiIgY2VsbHNwYWNpbmc9IjAiPgotICA8dHIgdmFsaWduPSJtaWRkbGUiPgotICA8IS0tIEhvbWUgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJyY3NzbWluLW1vZHVsZS5odG1sIj5Ib21lPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBUcmVlIGxpbmsgLS0+Ci0gICAgICA8dGggYmdjb2xvcj0iIzcwYjBmMCIgY2xhc3M9Im5hdmJhci1zZWxlY3QiCi0gICAgICAgICAgPiZuYnNwOyZuYnNwOyZuYnNwO1RyZWVzJm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEluZGV4IGxpbmsgLS0+Ci0gICAgICA8dGg+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEKLSAgICAgICAgaHJlZj0iaWRlbnRpZmllci1pbmRleC5odG1sIj5JbmRpY2VzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBIZWxwIGxpbmsgLS0+Ci0gICAgICA8dGg+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEKLSAgICAgICAgaHJlZj0iaGVscC5odG1sIj5IZWxwPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBQcm9qZWN0IGhvbWVwYWdlIC0tPgotICAgICAgPHRoIGNsYXNzPSJuYXZiYXIiIGFsaWduPSJyaWdodCIgd2lkdGg9IjEwMCUiPgotICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgICAgICAgIDx0cj48dGggY2xhc3M9Im5hdmJhciIgYWxpZ249ImNlbnRlciIKLSAgICAgICAgICAgID48YSBocmVmPSJodHRwOi8vb3BlbnNvdXJjZS5wZXJsaWcuZGUvcmNzc21pbi8iIHRhcmdldD0iX3RvcCI+VmlzaXQgcmNzc21pbiBPbmxpbmU8L2E+PC90aD4KLSAgICAgICAgICA8L3RyPjwvdGFibGU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gIDx0ciB2YWxpZ249InRvcCI+Ci0gICAgPHRkIHdpZHRoPSIxMDAlIj4mbmJzcDs8L3RkPgotICAgIDx0ZD4KLSAgICAgIDx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgICAgICA8IS0tIGhpZGUvc2hvdyBwcml2YXRlIC0tPgotICAgICAgPC90YWJsZT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxoMSBjbGFzcz0iZXB5ZG9jIj5Nb2R1bGUgSGllcmFyY2h5PC9oMT4KLTx1bCBjbGFzcz0ibm9tYXJnaW4tdG9wIj4KLSAgICA8bGk+IDxzdHJvbmcgY2xhc3M9InVpZGxpbmsiPjxhIGhyZWY9InJjc3NtaW4tbW9kdWxlLmh0bWwiPnJjc3NtaW48L2E+PC9zdHJvbmc+OiA8ZW0gY2xhc3M9InN1bW1hcnkiPkNTUyBNaW5pZmllci48L2VtPiAgICA8L2xpPgotPC91bD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT0gTkFWSUdBVElPTiBCQVIgPT09PT09PT09PT09PT09PT09PT0gLS0+Ci08dGFibGUgY2xhc3M9Im5hdmJhciIgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiCi0gICAgICAgYmdjb2xvcj0iI2EwYzBmZiIgY2VsbHNwYWNpbmc9IjAiPgotICA8dHIgdmFsaWduPSJtaWRkbGUiPgotICA8IS0tIEhvbWUgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJyY3NzbWluLW1vZHVsZS5odG1sIj5Ib21lPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBUcmVlIGxpbmsgLS0+Ci0gICAgICA8dGggYmdjb2xvcj0iIzcwYjBmMCIgY2xhc3M9Im5hdmJhci1zZWxlY3QiCi0gICAgICAgICAgPiZuYnNwOyZuYnNwOyZuYnNwO1RyZWVzJm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEluZGV4IGxpbmsgLS0+Ci0gICAgICA8dGg+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEKLSAgICAgICAgaHJlZj0iaWRlbnRpZmllci1pbmRleC5odG1sIj5JbmRpY2VzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBIZWxwIGxpbmsgLS0+Ci0gICAgICA8dGg+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEKLSAgICAgICAgaHJlZj0iaGVscC5odG1sIj5IZWxwPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBQcm9qZWN0IGhvbWVwYWdlIC0tPgotICAgICAgPHRoIGNsYXNzPSJuYXZiYXIiIGFsaWduPSJyaWdodCIgd2lkdGg9IjEwMCUiPgotICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgICAgICAgIDx0cj48dGggY2xhc3M9Im5hdmJhciIgYWxpZ249ImNlbnRlciIKLSAgICAgICAgICAgID48YSBocmVmPSJodHRwOi8vb3BlbnNvdXJjZS5wZXJsaWcuZGUvcmNzc21pbi8iIHRhcmdldD0iX3RvcCI+VmlzaXQgcmNzc21pbiBPbmxpbmU8L2E+PC90aD4KLSAgICAgICAgICA8L3RyPjwvdGFibGU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICAvLyBQcml2YXRlIG9iamVjdHMgYXJlIGluaXRpYWxseSBkaXNwbGF5ZWQgKGJlY2F1c2UgaWYKLSAgLy8gamF2YXNjcmlwdCBpcyB0dXJuZWQgb2ZmIHRoZW4gd2Ugd2FudCB0aGVtIHRvIGJlCi0gIC8vIHZpc2libGUpOyBidXQgYnkgZGVmYXVsdCwgd2Ugd2FudCB0byBoaWRlIHRoZW0uICBTbyBoaWRlCi0gIC8vIHRoZW0gdW5sZXNzIHdlIGhhdmUgYSBjb29raWUgdGhhdCBzYXlzIHRvIHNob3cgdGhlbS4KLSAgY2hlY2tDb29raWUoKTsKLSAgLy8gLS0+Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL2FwaWRvYy9yY3NzbWluLW1vZHVsZS5odG1sIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvYXBpZG9jL3Jjc3NtaW4tbW9kdWxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZmZkZGQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL2RvY3MvYXBpZG9jL3Jjc3NtaW4tbW9kdWxlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iYXNjaWkiPz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgICAgICAgIkRURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLSAgPHRpdGxlPnJjc3NtaW48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImVweWRvYy5jc3MiIHR5cGU9InRleHQvY3NzIiAvPgotICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJlcHlkb2MuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9ImJsdWUiIHZsaW5rPSIjMjA0MDgwIgotICAgICAgYWxpbms9IiMyMDQwODAiPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PSBOQVZJR0FUSU9OIEJBUiA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YWJsZSBjbGFzcz0ibmF2YmFyIiBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIKLSAgICAgICBiZ2NvbG9yPSIjYTBjMGZmIiBjZWxsc3BhY2luZz0iMCI+Ci0gIDx0ciB2YWxpZ249Im1pZGRsZSI+Ci0gIDwhLS0gSG9tZSBsaW5rIC0tPgotICAgICAgPHRoIGJnY29sb3I9IiM3MGIwZjAiIGNsYXNzPSJuYXZiYXItc2VsZWN0IgotICAgICAgICAgID4mbmJzcDsmbmJzcDsmbmJzcDtIb21lJm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFRyZWUgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJtb2R1bGUtdHJlZS5odG1sIj5UcmVlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSW5kZXggbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJpZGVudGlmaWVyLWluZGV4Lmh0bWwiPkluZGljZXM8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEhlbHAgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJoZWxwLmh0bWwiPkhlbHA8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFByb2plY3QgaG9tZXBhZ2UgLS0+Ci0gICAgICA8dGggY2xhc3M9Im5hdmJhciIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMTAwJSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgICAgPHRyPjx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgPjxhIGhyZWY9Imh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yY3NzbWluLyIgdGFyZ2V0PSJfdG9wIj5WaXNpdCByY3NzbWluIE9ubGluZTwvYT48L3RoPgotICAgICAgICAgIDwvdHI+PC90YWJsZT48L3RoPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0idG9wIj4KLSAgICA8dGQgd2lkdGg9IjEwMCUiPgotICAgICAgPHNwYW4gY2xhc3M9ImJyZWFkY3J1bWJzIj4KLSAgICAgICAgTW9kdWxlJm5ic3A7cmNzc21pbgotICAgICAgPC9zcGFuPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgIDwhLS0gaGlkZS9zaG93IHByaXZhdGUgLS0+Ci0gICAgICA8L3RhYmxlPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PSBNT0RVTEUgREVTQ1JJUFRJT04gPT09PT09PT09PT09PT09PT09PT0gLS0+Ci08aDEgY2xhc3M9ImVweWRvYyI+TW9kdWxlIHJjc3NtaW48L2gxPjxwIGNsYXNzPSJub21hcmdpbi10b3AiPjxzcGFuIGNsYXNzPSJjb2RlbGluayI+PGEgaHJlZj0icmNzc21pbi1weXNyYy5odG1sIj5zb3VyY2UmbmJzcDtjb2RlPC9hPjwvc3Bhbj48L3A+Ci08cD5DU1MgTWluaWZpZXIuPC9wPgotPHA+VGhlIG1pbmlmaWVyIGlzIGJhc2VkIG9uIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIDxhIGNsYXNzPSJyc3QtcmVmZXJlbmNlIGV4dGVybmFsIiBocmVmPSJodHRwczovL2dpdGh1Yi5jb20veXVpL3l1aWNvbXByZXNzb3IvIiB0YXJnZXQ9Il90b3AiPllVSSBjb21wcmVzc29yPC9hPiwgd2hpY2gKLWl0c2VsZiBpcyBiYXNlZCBvbiA8YSBjbGFzcz0icnN0LXJlZmVyZW5jZSBleHRlcm5hbCIgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9jc3NtaW4vIiB0YXJnZXQ9Il90b3AiPnRoZSBydWxlIGxpc3QgYnkgSXNhYWMgU2NobHVldGVyPC9hPi48L3A+Ci08cD5UaGlzIG1vZHVsZSBpcyBhIHJlLWltcGxlbWVudGF0aW9uIGFpbWluZyBmb3Igc3BlZWQgaW5zdGVhZCBvZiBtYXhpbXVtCi1jb21wcmVzc2lvbiwgc28gaXQgY2FuIGJlIHVzZWQgYXQgcnVudGltZSAocmF0aGVyIHRoYW4gZHVyaW5nIGEgcHJlcHJvY2Vzc2luZwotc3RlcCkuIFJDU1NtaW4gZG9lcyBzeW50YWN0aWNhbCBjb21wcmVzc2lvbiBvbmx5IChyZW1vdmluZyBzcGFjZXMsIGNvbW1lbnRzCi1hbmQgcG9zc2libHkgc2VtaWNvbG9ucykuIEl0IGRvZXMgbm90IHByb3ZpZGUgc2VtYW50aWMgY29tcHJlc3Npb24gKGxpa2UKLXJlbW92aW5nIGVtcHR5IGJsb2NrcywgY29sbGFwc2luZyByZWR1bmRhbnQgcHJvcGVydGllcyBldGMpLiBJdCBkb2VzLCBob3dldmVyLAotc3VwcG9ydCB2YXJpb3VzIENTUyBoYWNrcyAoYnkga2VlcGluZyB0aGVtIHdvcmtpbmcgYXMgaW50ZW5kZWQpLjwvcD4KLTxwPkhlcmUncyBhIGZlYXR1cmUgbGlzdDo8L3A+Ci08dWwgY2xhc3M9InJzdC1zaW1wbGUiPgotPGxpPlN0cmluZ3MgYXJlIGtlcHQsIGV4Y2VwdCB0aGF0IGVzY2FwZWQgbmV3bGluZXMgYXJlIHN0cmlwcGVkPC9saT4KLTxsaT5TcGFjZS9Db21tZW50cyBiZWZvcmUgdGhlIHZlcnkgZW5kIG9yIGJlZm9yZSB2YXJpb3VzIGNoYXJhY3RlcnMgYXJlCi1zdHJpcHBlZDogPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Ont9KTs9Jmd0OytdLCE8L3NwYW4+PC90dD4gKFRoZSBjb2xvbiAoPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+OjwvdHQ+KSBpcyBhIHNwZWNpYWwgY2FzZSwgYSBzaW5nbGUKLXNwYWNlIGlzIGtlcHQgaWYgaXQncyBvdXRzaWRlIGEgcnVsZXNldC4pPC9saT4KLTxsaT5TcGFjZS9Db21tZW50cyBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb3IgYWZ0ZXIgdmFyaW91cyBjaGFyYWN0ZXJzIGFyZQotc3RyaXBwZWQ6IDx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnt9KD06Jmd0OytbLCE8L3NwYW4+PC90dD48L2xpPgotPGxpPk9wdGlvbmFsIHNwYWNlIGFmdGVyIHVuaWNvZGUgZXNjYXBlcyBpcyBrZXB0LCByZXNwLiByZXBsYWNlZCBieSBhIHNpbXBsZQotc3BhY2U8L2xpPgotPGxpPndoaXRlc3BhY2VzIGluc2lkZSA8dHQgY2xhc3M9InJzdC1kb2N1dGlscyBsaXRlcmFsIj51cmwoKTwvdHQ+IGRlZmluaXRpb25zIGFyZSBzdHJpcHBlZDwvbGk+Ci08bGk+Q29tbWVudHMgc3RhcnRpbmcgd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrICg8dHQgY2xhc3M9InJzdC1kb2N1dGlscyBsaXRlcmFsIj4hPC90dD4pIGNhbiBiZSBrZXB0IG9wdGlvbmFsbHkuPC9saT4KLTxsaT5BbGwgb3RoZXIgY29tbWVudHMgYW5kL29yIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgYnkgYSBzaW5nbGUKLXNwYWNlLjwvbGk+Ci08bGk+TXVsdGlwbGUgY29uc2VjdXRpdmUgc2VtaWNvbG9ucyBhcmUgcmVkdWNlZCB0byBvbmU8L2xpPgotPGxpPlRoZSBsYXN0IHNlbWljb2xvbiB3aXRoaW4gYSBydWxlc2V0IGlzIHN0cmlwcGVkPC9saT4KLTxsaT5DU1MgSGFja3Mgc3VwcG9ydGVkOjx1bD4KLTxsaT5JRTcgaGFjayAoPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Jmd0Oy8qKi88L3NwYW4+PC90dD4pPC9saT4KLTxsaT5NYWMtSUU1IGhhY2sgKDx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPi8qXCovLi4uLyoqLzwvc3Bhbj48L3R0Pik8L2xpPgotPGxpPlRoZSBib3htb2RlbGhhY2sgaXMgc3VwcG9ydGVkIG5hdHVyYWxseSBiZWNhdXNlIGl0IHJlbGllcyBvbiB2YWxpZCBDU1MyCi1zdHJpbmdzPC9saT4KLTxsaT5CZXR3ZWVuIDx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPjpmaXJzdC1saW5lPC9zcGFuPjwvdHQ+IGFuZCB0aGUgZm9sbG93aW5nIGNvbW1hIG9yIGN1cmx5IGJyYWNlIGEgc3BhY2UgaXMKLWluc2VydGVkLiAoYXBwYXJlbnRseSBpdCdzIG5lZWRlZCBmb3IgSUU2KTwvbGk+Ci08bGk+U2FtZSBmb3IgPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+OmZpcnN0LWxldHRlcjwvc3Bhbj48L3R0PjwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08cD5yY3NzbWluLmMgaXMgYSByZWltcGxlbWVudGF0aW9uIG9mIHJjc3NtaW4ucHkgaW4gQyBhbmQgaW1wcm92ZXMgcnVudGltZSB1cCB0bwotZmFjdG9yIDEwMCBvciBzbyAoZGVwZW5kaW5nIG9uIHRoZSBpbnB1dCkuIGRvY3MvQkVOQ0hNQVJLUyBpbiB0aGUgc291cmNlCi1kaXN0cmlidXRpb24gY29udGFpbnMgdGhlIGRldGFpbHMuPC9wPgotPHA+Qm90aCBweXRob24gMiAoJmd0Oz0gMi40KSBhbmQgcHl0aG9uIDMgYXJlIHN1cHBvcnRlZC48L3A+Ci0KLTxociAvPgotPGRpdiBjbGFzcz0iZmllbGRzIj4gICAgICA8cD48c3Ryb25nPkNvcHlyaWdodDo8L3N0cm9uZz4KLSAgICAgICAgQ29weXJpZ2h0IDIwMTEgLSAyMDE0Ci1BbmRyJiMyMzM7IE1hbG8gb3IgaGlzIGxpY2Vuc29ycywgYXMgYXBwbGljYWJsZQotICAgICAgPC9wPgotICAgICAgPHA+PHN0cm9uZz5MaWNlbnNlOjwvc3Ryb25nPgotICAgICAgICA8cD5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJnF1b3Q7TGljZW5zZSZxdW90Oyk7Ci15b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi1Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ8L3A+Ci08YmxvY2txdW90ZT4KLTxhIGNsYXNzPSJyc3QtcmVmZXJlbmNlIGV4dGVybmFsIiBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPjwvYmxvY2txdW90ZT4KLTxwPlVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLAotV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi1TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi1saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS48L3A+Ci0gICAgICA8L3A+Ci0gICAgICA8cD48c3Ryb25nPlZlcnNpb246PC9zdHJvbmc+Ci0gICAgICAgIDEuMC41Ci0gICAgICA8L3A+Ci0gICAgICA8cD48c3Ryb25nPkF1dGhvcjo8L3N0cm9uZz4KLSAgICAgICAgQW5kciYjMjMzOyBNYWxvCi0gICAgICA8L3A+Ci08L2Rpdj48IS0tID09PT09PT09PT09PT09PT09PT09IEZVTkNUSU9OUyA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTxhIG5hbWU9InNlY3Rpb24tRnVuY3Rpb25zIj48L2E+Ci08dGFibGUgY2xhc3M9InN1bW1hcnkiIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjMiCi0gICAgICAgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSJ3aGl0ZSI+Ci08dHIgYmdjb2xvcj0iIzcwYjBmMCIgY2xhc3M9InRhYmxlLWhlYWRlciI+Ci0gIDx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMiIgY2xhc3M9InRhYmxlLWhlYWRlciI+Ci0gICAgPHNwYW4gY2xhc3M9InRhYmxlLWhlYWRlciI+RnVuY3Rpb25zPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotICAgIDx0ZCB3aWR0aD0iMTUlIiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIiBjbGFzcz0ic3VtbWFyeSI+Ci0gICAgICA8c3BhbiBjbGFzcz0ic3VtbWFyeS10eXBlIj48dHQgY2xhc3M9InJzdC1kb2N1dGlscyBsaXRlcmFsIj5zdHI8L3R0Pjwvc3Bhbj4KLSAgICA8L3RkPjx0ZCBjbGFzcz0ic3VtbWFyeSI+Ci0gICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZD48c3BhbiBjbGFzcz0ic3VtbWFyeS1zaWciPjxhIGhyZWY9InJjc3NtaW4tbW9kdWxlLmh0bWwjY3NzbWluIiBjbGFzcz0ic3VtbWFyeS1zaWctbmFtZSI+Y3NzbWluPC9hPig8c3BhbiBjbGFzcz0ic3VtbWFyeS1zaWctYXJnIj5zdHlsZTwvc3Bhbj4sCi0gICAgICAgIDxzcGFuIGNsYXNzPSJzdW1tYXJ5LXNpZy1hcmciPmtlZXBfYmFuZ19jb21tZW50czwvc3Bhbj49PHNwYW4gY2xhc3M9InN1bW1hcnktc2lnLWRlZmF1bHQiPkZhbHNlPC9zcGFuPik8L3NwYW4+PGJyIC8+Ci0gICAgICBNaW5pZnkgQ1NTLjwvdGQ+Ci0gICAgICAgICAgPHRkIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvZGVsaW5rIj48YSBocmVmPSJyY3NzbWluLXB5c3JjLmh0bWwjY3NzbWluIj5zb3VyY2UmbmJzcDtjb2RlPC9hPjwvc3Bhbj4KLSAgICAgICAgICAgIAotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgCi0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08IS0tID09PT09PT09PT09PT09PT09PT09IEZVTkNUSU9OIERFVEFJTFMgPT09PT09PT09PT09PT09PT09PT0gLS0+Ci08YSBuYW1lPSJzZWN0aW9uLUZ1bmN0aW9uRGV0YWlscyI+PC9hPgotPHRhYmxlIGNsYXNzPSJkZXRhaWxzIiBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIzIgotICAgICAgIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0id2hpdGUiPgotPHRyIGJnY29sb3I9IiM3MGIwZjAiIGNsYXNzPSJ0YWJsZS1oZWFkZXIiPgotICA8dGQgYWxpZ249ImxlZnQiIGNvbHNwYW49IjIiIGNsYXNzPSJ0YWJsZS1oZWFkZXIiPgotICAgIDxzcGFuIGNsYXNzPSJ0YWJsZS1oZWFkZXIiPkZ1bmN0aW9uIERldGFpbHM8L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPGEgbmFtZT0iY3NzbWluIj48L2E+Ci08ZGl2PgotPHRhYmxlIGNsYXNzPSJkZXRhaWxzIiBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIzIgotICAgICAgIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0id2hpdGUiPgotPHRyPjx0ZD4KLSAgPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCI+Ci0gIDx0ciB2YWxpZ249InRvcCI+PHRkPgotICA8aDMgY2xhc3M9ImVweWRvYyI+PHNwYW4gY2xhc3M9InNpZyI+PHNwYW4gY2xhc3M9InNpZy1uYW1lIj5jc3NtaW48L3NwYW4+KDxzcGFuIGNsYXNzPSJzaWctYXJnIj5zdHlsZTwvc3Bhbj4sCi0gICAgICAgIDxzcGFuIGNsYXNzPSJzaWctYXJnIj5rZWVwX2JhbmdfY29tbWVudHM8L3NwYW4+PTxzcGFuIGNsYXNzPSJzaWctZGVmYXVsdCI+RmFsc2U8L3NwYW4+KTwvc3Bhbj4KLSAgPC9oMz4KLSAgPC90ZD48dGQgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCIKLSAgICA+PHNwYW4gY2xhc3M9ImNvZGVsaW5rIj48YSBocmVmPSJyY3NzbWluLXB5c3JjLmh0bWwjY3NzbWluIj5zb3VyY2UmbmJzcDtjb2RlPC9hPjwvc3Bhbj4mbmJzcDsKLSAgICA8L3RkPgotICA8L3RyPjwvdGFibGU+Ci0gIAotICBNaW5pZnkgQ1NTLgotICA8ZGwgY2xhc3M9ImZpZWxkcyI+Ci0gICAgPGR0PlBhcmFtZXRlcnM6PC9kdD4KLSAgICA8ZGQ+PHVsIGNsYXNzPSJub21hcmdpbi10b3AiPgotICAgICAgICA8bGk+PHN0cm9uZyBjbGFzcz0icG5hbWUiPjxjb2RlPnN0eWxlPC9jb2RlPjwvc3Ryb25nPiAoPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+c3RyPC90dD4pIC0gQ1NTIHRvIG1pbmlmeTwvbGk+Ci0gICAgICAgIDxsaT48c3Ryb25nIGNsYXNzPSJwbmFtZSI+PGNvZGU+a2VlcF9iYW5nX2NvbW1lbnRzPC9jb2RlPjwvc3Ryb25nPiAoPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+Ym9vbDwvdHQ+KSAtIEtlZXAgY29tbWVudHMgc3RhcnRpbmcgd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrPyAoPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+LyohLi4uKi88L3NwYW4+PC90dD4pPC9saT4KLSAgICA8L3VsPjwvZGQ+Ci0gICAgPGR0PlJldHVybnM6IDx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPnN0cjwvdHQ+PC9kdD4KLSAgICAgICAgPGRkPk1pbmlmaWVkIHN0eWxlPC9kZD4KLSAgPC9kbD4KLTwvdGQ+PC90cj48L3RhYmxlPgotPC9kaXY+Ci08YnIgLz4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT0gTkFWSUdBVElPTiBCQVIgPT09PT09PT09PT09PT09PT09PT0gLS0+Ci08dGFibGUgY2xhc3M9Im5hdmJhciIgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiCi0gICAgICAgYmdjb2xvcj0iI2EwYzBmZiIgY2VsbHNwYWNpbmc9IjAiPgotICA8dHIgdmFsaWduPSJtaWRkbGUiPgotICA8IS0tIEhvbWUgbGluayAtLT4KLSAgICAgIDx0aCBiZ2NvbG9yPSIjNzBiMGYwIiBjbGFzcz0ibmF2YmFyLXNlbGVjdCIKLSAgICAgICAgICA+Jm5ic3A7Jm5ic3A7Jm5ic3A7SG9tZSZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBUcmVlIGxpbmsgLS0+Ci0gICAgICA8dGg+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEKLSAgICAgICAgaHJlZj0ibW9kdWxlLXRyZWUuaHRtbCI+VHJlZXM8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEluZGV4IGxpbmsgLS0+Ci0gICAgICA8dGg+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEKLSAgICAgICAgaHJlZj0iaWRlbnRpZmllci1pbmRleC5odG1sIj5JbmRpY2VzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBIZWxwIGxpbmsgLS0+Ci0gICAgICA8dGg+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEKLSAgICAgICAgaHJlZj0iaGVscC5odG1sIj5IZWxwPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBQcm9qZWN0IGhvbWVwYWdlIC0tPgotICAgICAgPHRoIGNsYXNzPSJuYXZiYXIiIGFsaWduPSJyaWdodCIgd2lkdGg9IjEwMCUiPgotICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgICAgICAgIDx0cj48dGggY2xhc3M9Im5hdmJhciIgYWxpZ249ImNlbnRlciIKLSAgICAgICAgICAgID48YSBocmVmPSJodHRwOi8vb3BlbnNvdXJjZS5wZXJsaWcuZGUvcmNzc21pbi8iIHRhcmdldD0iX3RvcCI+VmlzaXQgcmNzc21pbiBPbmxpbmU8L2E+PC90aD4KLSAgICAgICAgICA8L3RyPjwvdGFibGU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICAvLyBQcml2YXRlIG9iamVjdHMgYXJlIGluaXRpYWxseSBkaXNwbGF5ZWQgKGJlY2F1c2UgaWYKLSAgLy8gamF2YXNjcmlwdCBpcyB0dXJuZWQgb2ZmIHRoZW4gd2Ugd2FudCB0aGVtIHRvIGJlCi0gIC8vIHZpc2libGUpOyBidXQgYnkgZGVmYXVsdCwgd2Ugd2FudCB0byBoaWRlIHRoZW0uICBTbyBoaWRlCi0gIC8vIHRoZW0gdW5sZXNzIHdlIGhhdmUgYSBjb29raWUgdGhhdCBzYXlzIHRvIHNob3cgdGhlbS4KLSAgY2hlY2tDb29raWUoKTsKLSAgLy8gLS0+Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL2FwaWRvYy9yY3NzbWluLXB5c3JjLmh0bWwgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9hcGlkb2MvcmNzc21pbi1weXNyYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODU2YmFjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL2FwaWRvYy9yY3NzbWluLXB5c3JjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iYXNjaWkiPz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgICAgICAgIkRURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLSAgPHRpdGxlPnJjc3NtaW48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImVweWRvYy5jc3MiIHR5cGU9InRleHQvY3NzIiAvPgotICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJlcHlkb2MuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9ImJsdWUiIHZsaW5rPSIjMjA0MDgwIgotICAgICAgYWxpbms9IiMyMDQwODAiPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PSBOQVZJR0FUSU9OIEJBUiA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YWJsZSBjbGFzcz0ibmF2YmFyIiBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIKLSAgICAgICBiZ2NvbG9yPSIjYTBjMGZmIiBjZWxsc3BhY2luZz0iMCI+Ci0gIDx0ciB2YWxpZ249Im1pZGRsZSI+Ci0gIDwhLS0gSG9tZSBsaW5rIC0tPgotICAgICAgPHRoIGJnY29sb3I9IiM3MGIwZjAiIGNsYXNzPSJuYXZiYXItc2VsZWN0IgotICAgICAgICAgID4mbmJzcDsmbmJzcDsmbmJzcDtIb21lJm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFRyZWUgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJtb2R1bGUtdHJlZS5odG1sIj5UcmVlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSW5kZXggbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJpZGVudGlmaWVyLWluZGV4Lmh0bWwiPkluZGljZXM8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEhlbHAgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJoZWxwLmh0bWwiPkhlbHA8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFByb2plY3QgaG9tZXBhZ2UgLS0+Ci0gICAgICA8dGggY2xhc3M9Im5hdmJhciIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMTAwJSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgICAgPHRyPjx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgPjxhIGhyZWY9Imh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yY3NzbWluLyIgdGFyZ2V0PSJfdG9wIj5WaXNpdCByY3NzbWluIE9ubGluZTwvYT48L3RoPgotICAgICAgICAgIDwvdHI+PC90YWJsZT48L3RoPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0idG9wIj4KLSAgICA8dGQgd2lkdGg9IjEwMCUiPgotICAgICAgPHNwYW4gY2xhc3M9ImJyZWFkY3J1bWJzIj4KLSAgICAgICAgTW9kdWxlJm5ic3A7cmNzc21pbgotICAgICAgPC9zcGFuPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgIDwhLS0gaGlkZS9zaG93IHByaXZhdGUgLS0+Ci0gICAgICA8L3RhYmxlPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPGgxIGNsYXNzPSJlcHlkb2MiPlNvdXJjZSBDb2RlIGZvciA8YSBocmVmPSJyY3NzbWluLW1vZHVsZS5odG1sIj5Nb2R1bGUgcmNzc21pbjwvYT48L2gxPgotPHByZSBjbGFzcz0icHktc3JjIj4KLTxhIG5hbWU9IkwxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAgMTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktY29tbWVudCI+IyEvdXNyL2Jpbi9lbnYgcHl0aG9uPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAgMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktY29tbWVudCI+IyAtKi0gY29kaW5nOiBhc2NpaSAtKi08L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+ICAzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPnIiIiI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+ICA0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPj09PT09PT09PT09PT09PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAgNTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gQ1NTIE1pbmlmaWVyPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAgNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj49PT09PT09PT09PT09PTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gIDc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAgODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj5DU1MgTWluaWZpZXIuPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAgOTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAxMDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj5UaGUgbWluaWZpZXIgaXMgYmFzZWQgb24gdGhlIHNlbWFudGljcyBvZiB0aGUgYFlVSSBjb21wcmVzc29yYF9cXCwgd2hpY2g8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDExIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAxMTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj5pdHNlbGYgaXMgYmFzZWQgb24gYHRoZSBydWxlIGxpc3QgYnkgSXNhYWMgU2NobHVldGVyYF9cXC48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAxMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAxMzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj46Q29weXJpZ2h0OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDE0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDE1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiBDb3B5cmlnaHQgMjAxMSAtIDIwMTQ8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAxNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gQW5kclx4ZTkgTWFsbyBvciBoaXMgbGljZW5zb3JzLCBhcyBhcHBsaWNhYmxlPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMTc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9IkwxOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMTg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+OkxpY2Vuc2U6PC90dD4gPC90dD4KLTxhIG5hbWU9IkwxOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMTk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMjA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDIxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMjI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDIzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDI0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMjU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMjY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmU8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAyNzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyw8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAyODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMjk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQ8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAzMDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMzE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMzI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+VGhpcyBtb2R1bGUgaXMgYSByZS1pbXBsZW1lbnRhdGlvbiBhaW1pbmcgZm9yIHNwZWVkIGluc3RlYWQgb2YgbWF4aW11bTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDMzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPmNvbXByZXNzaW9uLCBzbyBpdCBjYW4gYmUgdXNlZCBhdCBydW50aW1lIChyYXRoZXIgdGhhbiBkdXJpbmcgYSBwcmVwcm9jZXNzaW5nPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMzQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+c3RlcCkuIFJDU1NtaW4gZG9lcyBzeW50YWN0aWNhbCBjb21wcmVzc2lvbiBvbmx5IChyZW1vdmluZyBzcGFjZXMsIGNvbW1lbnRzPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMzU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+YW5kIHBvc3NpYmx5IHNlbWljb2xvbnMpLiBJdCBkb2VzIG5vdCBwcm92aWRlIHNlbWFudGljIGNvbXByZXNzaW9uIChsaWtlPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMzY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+cmVtb3ZpbmcgZW1wdHkgYmxvY2tzLCBjb2xsYXBzaW5nIHJlZHVuZGFudCBwcm9wZXJ0aWVzIGV0YykuIEl0IGRvZXMsIGhvd2V2ZXIsPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMzc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+c3VwcG9ydCB2YXJpb3VzIENTUyBoYWNrcyAoYnkga2VlcGluZyB0aGVtIHdvcmtpbmcgYXMgaW50ZW5kZWQpLjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDM4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDM5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPkhlcmUncyBhIGZlYXR1cmUgbGlzdDo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA0MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA0MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4tIFN0cmluZ3MgYXJlIGtlcHQsIGV4Y2VwdCB0aGF0IGVzY2FwZWQgbmV3bGluZXMgYXJlIHN0cmlwcGVkPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNDI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+LSBTcGFjZS9Db21tZW50cyBiZWZvcmUgdGhlIHZlcnkgZW5kIG9yIGJlZm9yZSB2YXJpb3VzIGNoYXJhY3RlcnMgYXJlPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNDM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICBzdHJpcHBlZDogYGA6e30pOz0mZ3Q7K10sIWBgIChUaGUgY29sb24gKGBgOmBgKSBpcyBhIHNwZWNpYWwgY2FzZSwgYSBzaW5nbGU8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA0NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gIHNwYWNlIGlzIGtlcHQgaWYgaXQncyBvdXRzaWRlIGEgcnVsZXNldC4pPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNDU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+LSBTcGFjZS9Db21tZW50cyBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb3IgYWZ0ZXIgdmFyaW91cyBjaGFyYWN0ZXJzIGFyZTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDQ2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgc3RyaXBwZWQ6IGBge30oPTomZ3Q7K1ssIWBgPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNDc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+LSBPcHRpb25hbCBzcGFjZSBhZnRlciB1bmljb2RlIGVzY2FwZXMgaXMga2VwdCwgcmVzcC4gcmVwbGFjZWQgYnkgYSBzaW1wbGU8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA0ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gIHNwYWNlPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNDk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+LSB3aGl0ZXNwYWNlcyBpbnNpZGUgYGB1cmwoKWBgIGRlZmluaXRpb25zIGFyZSBzdHJpcHBlZDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNTAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDUwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPi0gQ29tbWVudHMgc3RhcnRpbmcgd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrIChgYCFgYCkgY2FuIGJlIGtlcHQgb3B0aW9uYWxseS48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDUxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA1MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4tIEFsbCBvdGhlciBjb21tZW50cyBhbmQvb3Igd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCBieSBhIHNpbmdsZTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNTIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDUyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgc3BhY2UuPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNTM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+LSBNdWx0aXBsZSBjb25zZWN1dGl2ZSBzZW1pY29sb25zIGFyZSByZWR1Y2VkIHRvIG9uZTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNTQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDU0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPi0gVGhlIGxhc3Qgc2VtaWNvbG9uIHdpdGhpbiBhIHJ1bGVzZXQgaXMgc3RyaXBwZWQ8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDU1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA1NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4tIENTUyBIYWNrcyBzdXBwb3J0ZWQ6PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNTY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNTc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAtIElFNyBoYWNrIChgYCZndDsvKiovYGApPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNTg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAtIE1hYy1JRTUgaGFjayAoYGAvKlxcKi8uLi4vKiovYGApPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNTk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAtIFRoZSBib3htb2RlbGhhY2sgaXMgc3VwcG9ydGVkIG5hdHVyYWxseSBiZWNhdXNlIGl0IHJlbGllcyBvbiB2YWxpZCBDU1MyPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw2MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNjA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgIHN0cmluZ3M8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDYxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA2MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gIC0gQmV0d2VlbiBgYDpmaXJzdC1saW5lYGAgYW5kIHRoZSBmb2xsb3dpbmcgY29tbWEgb3IgY3VybHkgYnJhY2UgYSBzcGFjZSBpczwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNjIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDYyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICBpbnNlcnRlZC4gKGFwcGFyZW50bHkgaXQncyBuZWVkZWQgZm9yIElFNik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDYzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA2MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gIC0gU2FtZSBmb3IgYGA6Zmlyc3QtbGV0dGVyYGA8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDY0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA2NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDY1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA2NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj5yY3NzbWluLmMgaXMgYSByZWltcGxlbWVudGF0aW9uIG9mIHJjc3NtaW4ucHkgaW4gQyBhbmQgaW1wcm92ZXMgcnVudGltZSB1cCB0bzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNjYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDY2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPmZhY3RvciAxMDAgb3Igc28gKGRlcGVuZGluZyBvbiB0aGUgaW5wdXQpLiBkb2NzL0JFTkNITUFSS1MgaW4gdGhlIHNvdXJjZTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNjciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDY3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPmRpc3RyaWJ1dGlvbiBjb250YWlucyB0aGUgZGV0YWlscy48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDY4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA2ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDY5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA2OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj5Cb3RoIHB5dGhvbiAyICgmZ3Q7PSAyLjQpIGFuZCBweXRob24gMyBhcmUgc3VwcG9ydGVkLjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNzAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDcwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNzEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDcxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPi4uIF9ZVUkgY29tcHJlc3NvcjogaHR0cHM6Ly9naXRodWIuY29tL3l1aS95dWljb21wcmVzc29yLzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNzIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDcyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNzMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDczPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPi4uIF90aGUgcnVsZSBsaXN0IGJ5IElzYWFjIFNjaGx1ZXRlcjogaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9jc3NtaW4vPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw3NCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNzQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IiIiPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw3NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNzU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGlkPSJsaW5rLTAiIGNsYXNzPSJweS1uYW1lIiB0YXJnZXRzPSJWYXJpYWJsZSByY3NzbWluLl9fZG9jX189cmNzc21pbi1tb2R1bGUuaHRtbCNfX2RvY19fIj48YSB0aXRsZT0icmNzc21pbi5fX2RvY19fIiBjbGFzcz0icHktbmFtZSIgaHJlZj0iIyIgb25jbGljaz0icmV0dXJuIGRvY2xpbmsoJ2xpbmstMCcsICdfX2RvY19fJywgJ2xpbmstMCcpOyI+X19kb2NfXzwvYT48L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDc2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA3NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgcHlsaW50OiBkaXNhYmxlID0gVzA2MjI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDc3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA3NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgaWQ9ImxpbmstMSIgY2xhc3M9InB5LW5hbWUiPjxhIHRpdGxlPSJyY3NzbWluLl9fZG9jX18iIGNsYXNzPSJweS1uYW1lIiBocmVmPSIjIiBvbmNsaWNrPSJyZXR1cm4gZG9jbGluaygnbGluay0xJywgJ19fZG9jX18nLCAnbGluay0wJyk7Ij5fX2RvY19fPC9hPjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgaWQ9ImxpbmstMiIgY2xhc3M9InB5LW5hbWUiPjxhIHRpdGxlPSJyY3NzbWluLl9fZG9jX18iIGNsYXNzPSJweS1uYW1lIiBocmVmPSIjIiBvbmNsaWNrPSJyZXR1cm4gZG9jbGluaygnbGluay0yJywgJ19fZG9jX18nLCAnbGluay0wJyk7Ij5fX2RvY19fPC9hPjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5lbmNvZGU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktc3RyaW5nIj4nYXNjaWknPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmRlY29kZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1zdHJpbmciPid1bmljb2RlX2VzY2FwZSc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDc4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA3ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktbmFtZSI+X19hdXRob3JfXzwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+ciJBbmRyXHhlOSBNYWxvIjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5lbmNvZGU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktc3RyaW5nIj4nYXNjaWknPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmRlY29kZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1zdHJpbmciPid1bmljb2RlX2VzY2FwZSc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDc5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA3OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktbmFtZSI+X19kb2Nmb3JtYXRfXzwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+InJlc3RydWN0dXJlZHRleHQgZW4iPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw4MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gODA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgaWQ9ImxpbmstMyIgY2xhc3M9InB5LW5hbWUiIHRhcmdldHM9IlZhcmlhYmxlIHJjc3NtaW4uX19saWNlbnNlX189cmNzc21pbi1tb2R1bGUuaHRtbCNfX2xpY2Vuc2VfXyI+PGEgdGl0bGU9InJjc3NtaW4uX19saWNlbnNlX18iIGNsYXNzPSJweS1uYW1lIiBocmVmPSIjIiBvbmNsaWNrPSJyZXR1cm4gZG9jbGluaygnbGluay0zJywgJ19fbGljZW5zZV9fJywgJ2xpbmstMycpOyI+X19saWNlbnNlX188L2E+PC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4iQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMODEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDgxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1uYW1lIj5fX3ZlcnNpb25fXzwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+JzEuMC41JzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMODIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDgyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1uYW1lIj5fX2FsbF9fPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktc3RyaW5nIj4nY3NzbWluJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMODMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDgzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMODQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDg0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pbXBvcnQ8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPnJlPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5hczwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+X3JlPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw4NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gODU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9Ikw4NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gODY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9Il9tYWtlX2Nzc21pbiI+PC9hPjxkaXYgaWQ9Il9tYWtlX2Nzc21pbi1kZWYiPjxhIG5hbWU9Ikw4NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gODc8L3R0PiA8YSBjbGFzcz0icHktdG9nZ2xlIiBocmVmPSIjIiBpZD0iX21ha2VfY3NzbWluLXRvZ2dsZSIgb25jbGljaz0icmV0dXJuIHRvZ2dsZSgnX21ha2VfY3NzbWluJyk7Ij4tPC9hPjx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1rZXl3b3JkIj5kZWY8L3R0PiA8YSBjbGFzcz0icHktZGVmLW5hbWUiIGhyZWY9InJjc3NtaW4tbW9kdWxlLmh0bWwjX21ha2VfY3NzbWluIj5fbWFrZV9jc3NtaW48L2E+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1wYXJhbSI+cHl0aG9uX29ubHk8L3R0Pjx0dCBjbGFzcz0icHktb3AiPj08L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+RmFsc2U8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPC9kaXY+PGRpdiBpZD0iX21ha2VfY3NzbWluLWNvbGxhcHNlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiIHBhZD0iKysrIiBpbmRlbnQ9IisrKysiPjwvZGl2PjxkaXYgaWQ9Il9tYWtlX2Nzc21pbi1leHBhbmRlZCI+PGEgbmFtZT0iTDg4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA4ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IiIiPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw4OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gODk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgIEdlbmVyYXRlIENTUyBtaW5pZmllci48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDkwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA5MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDkxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA5MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgOlBhcmFtZXRlcnM6PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw5MiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gOTI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICAgYHB5dGhvbl9vbmx5YCA6IGBgYm9vbGBgPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw5MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gOTM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICAgICBVc2Ugb25seSB0aGUgcHl0aG9uIHZhcmlhbnQuIElmIHRydWUsIHRoZSBjIGV4dGVuc2lvbiBpcyBub3QgZXZlbjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMOTQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDk0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgICAgdHJpZWQgdG8gYmUgbG9hZGVkLjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMOTUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDk1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMOTYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDk2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICA6UmV0dXJuOiBNaW5pZmllcjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMOTciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDk3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICA6UnR5cGU6IGBgY2FsbGFibGVgYDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMOTgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDk4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAiIiI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDk5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA5OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgcHlsaW50OiBkaXNhYmxlID0gUjA5MTIsIFIwOTE0LCBXMDYxMjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTAwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEwMDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDEwMSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMDE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pZjwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+bm90PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5weXRob25fb25seTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTAyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEwMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj50cnk8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEwMyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMDM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmltcG9ydDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+X3Jjc3NtaW48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEwNCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMDQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+ZXhjZXB0PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5JbXBvcnRFcnJvcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTA1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEwNTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cGFzczwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTA2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEwNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5lbHNlPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMDciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTA3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5yZXR1cm48L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPl9yY3NzbWluPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgaWQ9ImxpbmstNCIgY2xhc3M9InB5LW5hbWUiIHRhcmdldHM9IkZ1bmN0aW9uIHJjc3NtaW4uY3NzbWluKCk9cmNzc21pbi1tb2R1bGUuaHRtbCNjc3NtaW4iPjxhIHRpdGxlPSJyY3NzbWluLmNzc21pbiIgY2xhc3M9InB5LW5hbWUiIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBkb2NsaW5rKCdsaW5rLTQnLCAnY3NzbWluJywgJ2xpbmstNCcpOyI+Y3NzbWluPC9hPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTA4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEwODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDEwOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMDk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5ubDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzpbXG5cZl18XHJcbj8pJzwvdHQ+ICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgcHlsaW50OiBkaXNhYmxlID0gQzAxMDM8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDExMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMTA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5zcGFjZWNoYXI8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPnInW1xyXG5cZlwwNDBcdF0nPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMTEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTExPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMTEyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjExMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnVuaWNvZGVkPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1swLTlhLWZBLUZdezEsNn0oPzpbXDA0MFxuXHRcZl18XHJcbj8pPyc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDExMyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMTM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5lc2NhcGVkPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1teXG5cclxmMC05YS1mQS1GXSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDExNCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMTQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5lc2NhcGU8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKD86XFwoPzolKHVuaWNvZGVkKXN8JShlc2NhcGVkKXMpKSc8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4lPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5sb2NhbHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDExNSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMTU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwxMTYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTE2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+bm1jaGFyPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1teXDAwMC1cMDU0XDA1NlwwNTdcMDcyLVwxMDBcMTMzLVwxMzZcMTQwXDE3My1cMTc3XSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDExNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMTc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jbm1zdGFydCA9IHInW15cMDAwLVwxMDBcMTMzLVwxMzZcMTQwXDE3My1cMTc3XSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDExOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMTg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jaWRlbnQgPSAocicoPzonPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMTkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTE5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyAgICByJy0/KD86JShubXN0YXJ0KXN8JShlc2NhcGUpcyklKG5tY2hhcilzKig/OiUoZXNjYXBlKXMlKG5tY2hhcilzKikqJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTIwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEyMDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiNyJyknKSAlIGxvY2FscygpPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMjEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTIxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMTIyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEyMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmNvbW1lbnQ8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEyMyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMjM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwxMjQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTI0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyBvbmx5IGZvciBzcGVjaWZpYyBwdXJwb3Nlcy4gVGhlIGJhbmcgaXMgZ3JvdXBlZDo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEyNSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMjU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5fYmFuZ19jb21tZW50PC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/Oi9cKighPylbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTI2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEyNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDEyNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMjc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5zdHJpbmcxPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IFwgPC90dD4KLTxhIG5hbWU9IkwxMjgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTI4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzpcMDQ3W15cMDQ3XFxcclxuXGZdKig/OlxcW15cclxuXGZdW15cMDQ3XFxcclxuXGZdKikqXDA0NyknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMjkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTI5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+c3RyaW5nMjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzoiW14iXFxcclxuXGZdKig/OlxcW15cclxuXGZdW14iXFxcclxuXGZdKikqIiknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMzAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTMwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+c3RyaW5nczwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzolc3wlcyknPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+JTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+c3RyaW5nMTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+c3RyaW5nMjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTMxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEzMTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDEzMiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMzI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5ubF9zdHJpbmcxPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IFwgPC90dD4KLTxhIG5hbWU9IkwxMzMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTMzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzpcMDQ3W15cMDQ3XFxcclxuXGZdKig/OlxcKD86W15ccl18XHJcbj8pW15cMDQ3XFxcclxuXGZdKikqXDA0NyknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMzQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTM0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+bmxfc3RyaW5nMjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzoiW14iXFxcclxuXGZdKig/OlxcKD86W15ccl18XHJcbj8pW14iXFxcclxuXGZdKikqIiknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMzUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTM1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+bmxfc3RyaW5nczwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzolc3wlcyknPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+JTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+bmxfc3RyaW5nMTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bmxfc3RyaW5nMjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTM2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEzNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDEzNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMzc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj51cmlfbmxfc3RyaW5nMTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzpcMDQ3W15cMDQ3XFxdKig/OlxcKD86W15ccl18XHJcbj8pW15cMDQ3XFxdKikqXDA0NyknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMzgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTM4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+dXJpX25sX3N0cmluZzI8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKD86IlteIlxcXSooPzpcXCg/OlteXHJdfFxyXG4/KVteIlxcXSopKiIpJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTM5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEzOTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnVyaV9ubF9zdHJpbmdzPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/OiVzfCVzKSc8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4lPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj51cmlfbmxfc3RyaW5nMTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+dXJpX25sX3N0cmluZzI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE0MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNDA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwxNDEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTQxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+bmxfZXNjYXBlZDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzpcXCUobmwpcyknPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+JTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bG9jYWxzPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNDIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTQyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMTQzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE0MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/OiUoc3BhY2VjaGFyKXN8JShjb21tZW50KXMpJzwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiU8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmxvY2FsczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTQ0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE0NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDE0NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNDU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5pZTdoYWNrPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/OiZndDsvXCpcKi8pJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTQ2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE0NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDE0NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNDc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj51cmk8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1zdHJpbmciPnInKD86JzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTQ4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE0ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIG5vcWEgcHlsaW50OiBkaXNhYmxlID0gQzAzMzA8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE0OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNDk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/OlteXDAwMC1cMDQwIlwwNDcoKVxcXDE3N10qJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTUwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE1MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/OiUoZXNjYXBlKXNbXlwwMDAtXDA0MCJcMDQ3KClcXFwxNzddKikqKSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE1MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNTE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/Oic8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE1MiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNTI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzolKHNwYWNlY2hhcilzK3wlKG5sX2VzY2FwZWQpcyspJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTUzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE1MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/Oic8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE1NCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNTQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKD86W15cMDAwLVwwNDAiXDA0NygpXFxcMTc3XXwlKGVzY2FwZSlzfCUobmxfZXNjYXBlZClzKSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE1NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNTU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInW15cMDAwLVwwNDAiXDA0NygpXFxcMTc3XSonPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNTYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTU2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/OiUoZXNjYXBlKXNbXlwwMDAtXDA0MCJcMDQ3KClcXFwxNzddKikqJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTU3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE1NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJykrJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTU4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE1ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKSonPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNTkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTU5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyknPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+JTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bG9jYWxzPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNjAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTYwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMTYxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE2MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW5hbWUiPm5sX3VuZXNjX3N1YjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPl9yZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5jb21waWxlPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPm5sX2VzY2FwZWQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+c3ViPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNjIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTYyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMTYzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE2MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnVyaV9zcGFjZV9zdWI8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5fcmU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+Y29tcGlsZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTY0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE2NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKCUoZXNjYXBlKXMrKXwlKHNwYWNlY2hhcilzK3wlKG5sX2VzY2FwZWQpcysnPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNjUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTY1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4lPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5sb2NhbHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+c3ViPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNjYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTY2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+dXJpX3NwYWNlX3N1YmJlcjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmxhbWJkYTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4wPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5vcjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTY3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE2NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDE2OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNjg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5zcGFjZV9zdWJfc2ltcGxlPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+X3JlPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmNvbXBpbGU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE2OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNjk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1tcclxuXGZcMDQwXHQ7XSt8KCUoY29tbWVudClzKyknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNzAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTcwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4lPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5sb2NhbHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+c3ViPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNzEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTcxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+c3BhY2Vfc3ViX2JhbmdlZDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPl9yZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5jb21waWxlPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNzIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTcyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cidbXHJcblxmXDA0MFx0O10rfCglKF9iYW5nX2NvbW1lbnQpcyspJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTczIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE3MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+JTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bG9jYWxzPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnN1YjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTc0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE3NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDE3NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNzU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5wb3N0X2VzY19zdWI8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5fcmU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+Y29tcGlsZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1zdHJpbmciPnInW1xyXG5cZlx0XSsnPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnN1YjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTc2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE3NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDE3NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNzc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5tYWluX3N1YjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPl9yZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5jb21waWxlPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNzgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTc4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgbm9xYSBweWxpbnQ6IGRpc2FibGUgPSBDMDMzMDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTc5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE3OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKFteXFwiXDA0N3UmZ3Q7QFxyXG5cZlwwNDBcdC87Ont9XSspJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTgwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE4MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfCg/Jmx0Oz1be30oPTomZ3Q7K1ssIV0pKCUoc3BhY2UpcyspJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTgxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE4MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfF4oJShzcGFjZSlzKyknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxODIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTgyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cid8KCUoc3BhY2UpcyspKD89KChbOnt9KTs9Jmd0OytcXSwhXSl8JCk/KSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE4MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xODM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ3w7KCUoc3BhY2UpcyooPzo7JShzcGFjZSlzKikqKSg/PShcfSk/KSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE4NCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xODQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ3woXHspJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTg1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE4NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfChcfSknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxODYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTg2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cid8KCUoc3RyaW5ncylzKSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE4NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xODc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ3woPyZsdDshJShubWNoYXIpcyl1cmxcKCUoc3BhY2VjaGFyKXMqKCc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE4OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xODg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInJSh1cmlfbmxfc3RyaW5ncylzJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTg5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE4OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cid8JSh1cmkpcyc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE5MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xOTA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicpJShzcGFjZWNoYXIpcypcKSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE5MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xOTE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ3woQCg/Oic8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE5MiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xOTI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1ttTV1bZUVdW2REXVtpSV1bYUFdJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTkzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE5MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfFtzU11bdVVdW3BQXVtwUF1bb09dW3JSXVt0VF1bc1NdJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTk0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE5NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfFtkRF1bb09dW2NDXVt1VV1bbU1dW2VFXVtuTl1bdFRdJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTk1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE5NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfCg/Oi0oPzonPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxOTYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTk2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInW3dXXVtlRV1bYkJdW2tLXVtpSV1bdFRdfFttTV1bb09dW3paXXxbb09dfFttTV1bc1NdJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTk3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE5NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicpLSk/JzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTk4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE5ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cidba0tdW2VFXVt5WV1bZkZdW3JSXVthQV1bbU1dW2VFXVtzU10nPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxOTkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTk5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKSkoPyElKG5tY2hhcilzKSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIwMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMDA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ3woJShpZTdoYWNrKXMpKCUoc3BhY2UpcyopJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjAxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIwMTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfCg6W2ZGXVtpSV1bclJdW3NTXVt0VF0tW2xMXSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIwMiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMDI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzpbaUldW25OXVtlRV18W2VFXVt0VF1bdFRdW2VFXVtyUl0pKSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIwMyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMDM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoJShzcGFjZSlzKikoPz1beyxdKSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIwNCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMDQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ3woJShubF9zdHJpbmdzKXMpJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjA1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIwNTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfCglKGVzY2FwZSlzW15cXCJcMDQ3dSZndDtAXHJcblxmXDA0MFx0Lzs6e31dKiknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMDYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjA2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4lPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5sb2NhbHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+c3ViPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMDciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjA3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMjA4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIwODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiNwcmludCBtYWluX3N1Yi5fX3NlbGZfXy5wYXR0ZXJuPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMDkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjA5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMjEwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIxMDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmRlZjwvdHQ+IDx0dCBjbGFzcz0icHktZGVmLW5hbWUiPm1haW5fc3ViYmVyPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXBhcmFtIj5rZWVwX2JhbmdfY29tbWVudHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIxMSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMTE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4iIiIgTWFrZSBtYWluIHN1YmJlciAiIiI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIxMiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMTI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+aW5fbWFjaWU1PC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5pbl9ydWxlPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5hdF9ncm91cDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4wPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIxMyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMTM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwyMTQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjE0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwX2JhbmdfY29tbWVudHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIxNSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMTU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX3N1YjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX3N1Yl9iYW5nZWQ8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIxNiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMTY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwyMTciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjE3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5kZWY8L3R0PiA8dHQgY2xhc3M9InB5LWRlZi1uYW1lIj5zcGFjZV9zdWJiZXI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktcGFyYW0iPm1hdGNoPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMTgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjE4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4iIiIgU3BhY2V8Q29tbWVudCBzdWJiZXIgIiIiPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMTkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjE5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+aWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPm1hdGNoPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmxhc3RpbmRleDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjIwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIyMDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cDE8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwMjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPm1hdGNoPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbnVtYmVyIj4yPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMjEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjIxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cDI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIyMiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMjI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cDE8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+ZW5kc3dpdGg8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1wqLyc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIyMyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMjM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5pbl9tYWNpZTU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4wPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktbnVtYmVyIj4xPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMjQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjI0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5lbHNlPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMjUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjI1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+aW5fbWFjaWU1PC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjI2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIyNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cDE8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIyNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMjc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+ZWxpZjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXAxPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMjgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjI4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pZjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXAxPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmVuZHN3aXRoPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXN0cmluZyI+cidcKi8nPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMjkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjI5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+aWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmluX21hY2llNTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIzMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMzA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicnPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMzEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjMxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+aW5fbWFjaWU1PC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW51bWJlciI+MTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjMyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIzMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJy8qXCovJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjMzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIzMzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+ZWxpZjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+aW5fbWFjaWU1PC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjM0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIzNDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmluX21hY2llNTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIzNSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMzU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5yZXR1cm48L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jy8qKi8nPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMzYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjM2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicnPC90dD4gPC90dD4KLTwvZGl2PjxhIG5hbWU9IkwyMzciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjM3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmVsc2U8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIzOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMzg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX3N1YjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX3N1Yl9zaW1wbGU8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIzOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMzk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwyNDAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjQwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5kZWY8L3R0PiA8dHQgY2xhc3M9InB5LWRlZi1uYW1lIj5zcGFjZV9zdWJiZXI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktcGFyYW0iPm1hdGNoPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNDEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjQxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4iIiIgU3BhY2V8Q29tbWVudCBzdWJiZXIgIiIiPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNDIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjQyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+aWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPm1hdGNoPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmxhc3RpbmRleDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjQzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI0MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pZjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bWF0Y2g8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmVuZHN3aXRoPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXN0cmluZyI+cidcKi8nPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNDQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjQ0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pZjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+aW5fbWFjaWU1PC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjQ1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI0NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjQ2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI0NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+aW5fbWFjaWU1PC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW51bWJlciI+MTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjQ3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI0NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPnInLypcKi8nPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNDgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjQ4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmVsaWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmluX21hY2llNTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI0OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNDk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmluX21hY2llNTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI1MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNTA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nLyoqLyc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI1MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNTE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5yZXR1cm48L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jyc8L3R0PiA8L3R0PgotPC9kaXY+PGEgbmFtZT0iTDI1MiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNTI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwyNTMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjUzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmRlZjwvdHQ+IDx0dCBjbGFzcz0icHktZGVmLW5hbWUiPmZuX3NwYWNlX3Bvc3Q8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktcGFyYW0iPmdyb3VwPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNTQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjU0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiIiIiBzcGFjZSB3aXRoIHRva2VuIGFmdGVyICIiIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjU1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI1NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+aWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+NTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+aXM8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPk5vbmU8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjU2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI1NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjY8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nOic8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmFuZDwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+bm90PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5pbl9ydWxlPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+YW5kPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5ub3Q8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmF0X2dyb3VwPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjU3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI1NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nICc8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4rPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5zcGFjZV9zdWI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+c3BhY2Vfc3ViYmVyPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI1OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNTg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+c3BhY2Vfc3ViPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX3N1YmJlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj40PC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTwvZGl2PjxhIG5hbWU9IkwyNTkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjU5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMjYwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI2MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5kZWY8L3R0PiA8dHQgY2xhc3M9InB5LWRlZi1uYW1lIj5mbl9zZW1pY29sb248L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktcGFyYW0iPmdyb3VwPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNjEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjYxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiIiIiA7IGhhbmRsZXIgIiIiPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNjIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjYyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5yZXR1cm48L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+JzsnPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KzwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+c3BhY2Vfc3ViPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX3N1YmJlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj43PC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTwvZGl2PjxhIG5hbWU9IkwyNjMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjYzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMjY0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI2NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5kZWY8L3R0PiA8dHQgY2xhc3M9InB5LWRlZi1uYW1lIj5mbl9zZW1pY29sb24yPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXBhcmFtIj5ncm91cDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjY1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI2NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4iIiIgOyBoYW5kbGVyICIiIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjY2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI2NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+aWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmluX3J1bGU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4wPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNjciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjY3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5zcGFjZV9zdWI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+c3BhY2Vfc3ViYmVyPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI2OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNjg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nOyc8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4rPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5zcGFjZV9zdWI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+c3BhY2Vfc3ViYmVyPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPC9kaXY+PGEgbmFtZT0iTDI2OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNjk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwyNzAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjcwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmRlZjwvdHQ+IDx0dCBjbGFzcz0icHktZGVmLW5hbWUiPmZuX29wZW48L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktcGFyYW0iPl88L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI3MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNzE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IiIiIHsgaGFuZGxlciAiIiI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI3MiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNzI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5hdF9ncm91cDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI3MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNzM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5hdF9ncm91cDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4tPTwvdHQ+IDx0dCBjbGFzcz0icHktbnVtYmVyIj4xPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNzQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjc0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5lbHNlPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNzUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjc1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+aW5fcnVsZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1udW1iZXIiPjE8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI3NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNzY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4neyc8L3R0PiA8L3R0PgotPC9kaXY+PGEgbmFtZT0iTDI3NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNzc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwyNzgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjc4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmRlZjwvdHQ+IDx0dCBjbGFzcz0icHktZGVmLW5hbWUiPmZuX2Nsb3NlPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXBhcmFtIj5fPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNzkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjc5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiIiIiB9IGhhbmRsZXIgIiIiPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyODAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjgwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5pbl9ydWxlPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjgxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI4MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPid9JzwvdHQ+IDwvdHQ+Ci08L2Rpdj48YSBuYW1lPSJMMjgyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI4MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDI4MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yODM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+ZGVmPC90dD4gPHR0IGNsYXNzPSJweS1kZWYtbmFtZSI+Zm5fYXRfZ3JvdXA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktcGFyYW0iPmdyb3VwPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyODQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjg0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiIiIiBAeHh4IGdyb3VwIGhhbmRsZXIgIiIiPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyODUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjg1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5hdF9ncm91cDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4rPTwvdHQ+IDx0dCBjbGFzcz0icHktbnVtYmVyIj4xPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyODYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjg2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5yZXR1cm48L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPC9kaXY+PGEgbmFtZT0iTDI4NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yODc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwyODgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjg4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmRlZjwvdHQ+IDx0dCBjbGFzcz0icHktZGVmLW5hbWUiPmZuX2llN2hhY2s8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktcGFyYW0iPmdyb3VwPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyODkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjg5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiIiIiBJRTcgSGFjayBoYW5kbGVyICIiIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjkwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI5MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+aWY8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm5vdDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+aW5fcnVsZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmFuZDwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+bm90PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5hdF9ncm91cDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI5MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yOTE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5pbl9tYWNpZTU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4wPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktbnVtYmVyIj4wPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyOTIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjkyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjE0PC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KzwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+c3BhY2Vfc3ViPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX3N1YmJlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xNTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjkzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI5MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicmZ3Q7JzwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPis8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX3N1YjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5zcGFjZV9zdWJiZXI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPC9kaXY+PGEgbmFtZT0iTDI5NCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yOTQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwyOTUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjk1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnRhYmxlPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPig8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI5NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yOTY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgbm9xYSBweWxpbnQ6IGRpc2FibGUgPSBDMDMzMDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjk3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI5NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Tm9uZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjk4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI5ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Tm9uZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjk5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI5OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Tm9uZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzAwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMwMDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Tm9uZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzAxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMwMTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Zm5fc3BhY2VfcG9zdDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+ICAgICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgc3BhY2Ugd2l0aCB0b2tlbiBhZnRlcjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzAyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMwMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Zm5fc3BhY2VfcG9zdDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+ICAgICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgc3BhY2Ugd2l0aCB0b2tlbiBhZnRlcjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzAzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMwMzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Zm5fc3BhY2VfcG9zdDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+ICAgICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgc3BhY2Ugd2l0aCB0b2tlbiBhZnRlcjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzA0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMwNDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Zm5fc2VtaWNvbG9uPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gICAgICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgc2VtaWNvbG9uPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMDUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzA1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5mbl9zZW1pY29sb24yPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyBzZW1pY29sb248L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMwNiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMDY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmZuX29wZW48L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIHs8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMwNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMDc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmZuX2Nsb3NlPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIH08L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMwOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMDg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmxhbWJkYTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+ZzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+ZzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjExPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgc3RyaW5nPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMDkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzA5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5sYW1iZGE8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+J3VybCglcyknPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+JTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+dXJpX3NwYWNlX3N1YjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj51cmlfc3BhY2Vfc3ViYmVyPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5nPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMxMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMTA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIHVybCguLi4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMTEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzExPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5mbl9hdF9ncm91cDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+ICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyBAeHh4IGV4cGVjdGluZyB7Li4ufTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzEyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMxMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Tm9uZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzEzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMxMzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Zm5faWU3aGFjazwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+ICAgICAgICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgaWU3aGFjazwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzE0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMxNDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Tm9uZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzE1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMxNTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+bGFtYmRhPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5nPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5nPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTY8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4rPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicgJzwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPis8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX3N1YjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5zcGFjZV9zdWJiZXI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xNzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzE2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMxNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgOmZpcnN0LWxpbmV8bGV0dGVyIGZvbGxvd2VkPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMTciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzE3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyBieSBbeyxdIChhcHBhcmVudGx5IHNwYWNlPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMTgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzE4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyBuZWVkZWQgZm9yIElFNik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMxOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMTk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmxhbWJkYTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+ZzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bmxfdW5lc2Nfc3ViPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXN0cmluZyI+Jyc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xODwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+ICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIG5sX3N0cmluZzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzIwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMyMDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+bGFtYmRhPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5nPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5wb3N0X2VzY19zdWI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktc3RyaW5nIj4nICc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xOTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+ICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgZXNjYXBlPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMjEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzIxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMjIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzIyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMzIzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMyMzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5kZWY8L3R0PiA8dHQgY2xhc3M9InB5LWRlZi1uYW1lIj5mdW5jPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXBhcmFtIj5tYXRjaDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzI0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMyNDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4iIiIgTWFpbiBzdWJiZXIgIiIiPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMjUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzI1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5pZHg8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bWF0Y2g8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+bGFzdGluZGV4PC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5tYXRjaDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzI2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMyNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+aWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmlkeDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiZndDs8L3R0PiA8dHQgY2xhc3M9InB5LW51bWJlciI+MzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzI3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMyNzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+dGFibGU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+aWR4PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMjgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzI4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMzI5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMyOTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyBzaG9ydGN1dHMgZm9yIGZyZXF1ZW50IG9wZXJhdGlvbnMgYmVsb3c6PC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMzAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzMwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5lbGlmPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5pZHg8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PTwvdHQ+IDx0dCBjbGFzcz0icHktbnVtYmVyIj4xPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyBub3QgaW50ZXJlc3Rpbmc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMzMSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMzE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5yZXR1cm48L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzMyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMzMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+I2Vsc2U6ICMgc3BhY2Ugd2l0aCB0b2tlbiBiZWZvcmUgb3IgYXQgdGhlIGJlZ2lubmluZzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzMzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMzMzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5zcGFjZV9zdWI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+c3BhY2Vfc3ViYmVyPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5pZHg8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPC9kaXY+PGEgbmFtZT0iTDMzNCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMzQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwzMzUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzM1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+ZnVuYzwvdHQ+IDwvdHQ+Ci08L2Rpdj48YSBuYW1lPSJMMzM2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMzNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDMzNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMzc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5kZWY8L3R0PiA8dHQgY2xhc3M9InB5LWRlZi1uYW1lIj5jc3NtaW48L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktcGFyYW0iPnN0eWxlPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1wYXJhbSI+a2VlcF9iYW5nX2NvbW1lbnRzPC90dD48dHQgY2xhc3M9InB5LW9wIj49PC90dD48dHQgY2xhc3M9InB5LW5hbWUiPkZhbHNlPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyBweWxpbnQ6IGRpc2FibGUgPSBXMDYyMTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzM4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMzODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiIiIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzM5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMzOTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICAgIE1pbmlmeSBDU1MuPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNDAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzQwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzQxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM0MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICAgIDpQYXJhbWV0ZXJzOjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzQyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM0MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICAgICAgYHN0eWxlYCA6IGBgc3RyYGA8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM0MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNDM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICAgICAgICAgQ1NTIHRvIG1pbmlmeTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzQ0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM0NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM0NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNDU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICAgICAgIGBrZWVwX2JhbmdfY29tbWVudHNgIDogYGBib29sYGA8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM0NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNDY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICAgICAgICAgS2VlcCBjb21tZW50cyBzdGFydGluZyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcms/IChgYC8qIS4uLiovYGApPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNDciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzQ3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzQ4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM0ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICAgIDpSZXR1cm46IE1pbmlmaWVkIHN0eWxlPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNDkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzQ5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgICAgOlJ0eXBlOiBgYHN0cmBgPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNTAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzUwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgICAgIiIiPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNTEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzUxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bWFpbl9zdWI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+bWFpbl9zdWJiZXI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+a2VlcF9iYW5nX2NvbW1lbnRzPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5zdHlsZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08L2Rpdj48YSBuYW1lPSJMMzUyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM1MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDM1MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNTM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5yZXR1cm48L3R0PiA8dHQgaWQ9ImxpbmstNSIgY2xhc3M9InB5LW5hbWUiPjxhIHRpdGxlPSJyY3NzbWluLmNzc21pbiIgY2xhc3M9InB5LW5hbWUiIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBkb2NsaW5rKCdsaW5rLTUnLCAnY3NzbWluJywgJ2xpbmstNCcpOyI+Y3NzbWluPC9hPjwvdHQ+IDwvdHQ+Ci08L2Rpdj48YSBuYW1lPSJMMzU0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM1NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDM1NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNTU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgaWQ9ImxpbmstNiIgY2xhc3M9InB5LW5hbWUiPjxhIHRpdGxlPSJyY3NzbWluLmNzc21pbiIgY2xhc3M9InB5LW5hbWUiIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBkb2NsaW5rKCdsaW5rLTYnLCAnY3NzbWluJywgJ2xpbmstNCcpOyI+Y3NzbWluPC9hPjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPl9tYWtlX2Nzc21pbjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzU2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM1NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDM1NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNTc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwzNTgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzU4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pZjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+X19uYW1lX188L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nX19tYWluX18nPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9Im1haW4iPjwvYT48ZGl2IGlkPSJtYWluLWRlZiI+PGEgbmFtZT0iTDM1OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNTk8L3R0PiA8YSBjbGFzcz0icHktdG9nZ2xlIiBocmVmPSIjIiBpZD0ibWFpbi10b2dnbGUiIG9uY2xpY2s9InJldHVybiB0b2dnbGUoJ21haW4nKTsiPi08L2E+PHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5kZWY8L3R0PiA8YSBjbGFzcz0icHktZGVmLW5hbWUiIGhyZWY9InJjc3NtaW4tbW9kdWxlLmh0bWwjbWFpbiI+bWFpbjwvYT48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTwvZGl2PjxkaXYgaWQ9Im1haW4tY29sbGFwc2VkIiBzdHlsZT0iZGlzcGxheTpub25lOyIgcGFkPSIrKysiIGluZGVudD0iKysrKysrKysiPjwvZGl2PjxkaXYgaWQ9Im1haW4tZXhwYW5kZWQiPjxhIG5hbWU9IkwzNjAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzYwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IiIiIE1haW4gIiIiPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNjEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzYxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmltcG9ydDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+c3lzPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5hczwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+X3N5czwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzYyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM2MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwX2JhbmdfY29tbWVudHM8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzYzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM2MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj4nLWInPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pbjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+X3N5czwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5hcmd2PC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzY0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM2NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jy1icCc8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmluPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5fc3lzPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmFyZ3Y8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNjUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzY1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5vcjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nLXBiJzwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+aW48L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPl9zeXM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+YXJndjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjE8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM2NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNjY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM2NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNjc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+aWY8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jy1wJzwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+aW48L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPl9zeXM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+YXJndjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjE8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPictYnAnPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pbjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+X3N5czwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5hcmd2PC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IFwgPC90dD4KLTxhIG5hbWU9IkwzNjgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzY4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jy1wYic8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmluPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5fc3lzPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmFyZ3Y8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNjkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzY5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5nbG9iYWw8L3R0PiA8dHQgaWQ9ImxpbmstNyIgY2xhc3M9InB5LW5hbWUiPjxhIHRpdGxlPSJyY3NzbWluLmNzc21pbiIgY2xhc3M9InB5LW5hbWUiIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBkb2NsaW5rKCdsaW5rLTcnLCAnY3NzbWluJywgJ2xpbmstNCcpOyI+Y3NzbWluPC9hPjwvdHQ+ICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgcHlsaW50OiBkaXNhYmxlID0gVzA2MDM8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM3MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNzA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgaWQ9ImxpbmstOCIgY2xhc3M9InB5LW5hbWUiPjxhIHRpdGxlPSJyY3NzbWluLmNzc21pbiIgY2xhc3M9InB5LW5hbWUiIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBkb2NsaW5rKCdsaW5rLTgnLCAnY3NzbWluJywgJ2xpbmstNCcpOyI+Y3NzbWluPC9hPjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPl9tYWtlX2Nzc21pbjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5weXRob25fb25seTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5UcnVlPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNzEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzcxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPl9zeXM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+c3Rkb3V0PC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPndyaXRlPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgaWQ9ImxpbmstOSIgY2xhc3M9InB5LW5hbWUiPjxhIHRpdGxlPSJyY3NzbWluLmNzc21pbiIgY2xhc3M9InB5LW5hbWUiIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBkb2NsaW5rKCdsaW5rLTknLCAnY3NzbWluJywgJ2xpbmstNCcpOyI+Y3NzbWluPC9hPjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzcyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM3MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+X3N5czwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5zdGRpbjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5yZWFkPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwX2JhbmdfY29tbWVudHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPj08L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+a2VlcF9iYW5nX2NvbW1lbnRzPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNzMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzczPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTwvZGl2PjxhIG5hbWU9IkwzNzQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mzc0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+bWFpbjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzc1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM3NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLTwhLS0KLWV4cGFuZHRvKGxvY2F0aW9uLmhyZWYpOwotLy8gLS0+Ci08L3NjcmlwdD4KLTwvcHJlPgotPGJyIC8+Ci08IS0tID09PT09PT09PT09PT09PT09PT09IE5BVklHQVRJT04gQkFSID09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhYmxlIGNsYXNzPSJuYXZiYXIiIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIgotICAgICAgIGJnY29sb3I9IiNhMGMwZmYiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0ibWlkZGxlIj4KLSAgPCEtLSBIb21lIGxpbmsgLS0+Ci0gICAgICA8dGggYmdjb2xvcj0iIzcwYjBmMCIgY2xhc3M9Im5hdmJhci1zZWxlY3QiCi0gICAgICAgICAgPiZuYnNwOyZuYnNwOyZuYnNwO0hvbWUmbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gVHJlZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9Im1vZHVsZS10cmVlLmh0bWwiPlRyZWVzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBJbmRleCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImlkZW50aWZpZXItaW5kZXguaHRtbCI+SW5kaWNlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSGVscCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImhlbHAuaHRtbCI+SGVscDwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gUHJvamVjdCBob21lcGFnZSAtLT4KLSAgICAgIDx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0icmlnaHQiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgICA8dHI+PHRoIGNsYXNzPSJuYXZiYXIiIGFsaWduPSJjZW50ZXIiCi0gICAgICAgICAgICA+PGEgaHJlZj0iaHR0cDovL29wZW5zb3VyY2UucGVybGlnLmRlL3Jjc3NtaW4vIiB0YXJnZXQ9Il90b3AiPlZpc2l0IHJjc3NtaW4gT25saW5lPC9hPjwvdGg+Ci0gICAgICAgICAgPC90cj48L3RhYmxlPjwvdGg+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgLy8gUHJpdmF0ZSBvYmplY3RzIGFyZSBpbml0aWFsbHkgZGlzcGxheWVkIChiZWNhdXNlIGlmCi0gIC8vIGphdmFzY3JpcHQgaXMgdHVybmVkIG9mZiB0aGVuIHdlIHdhbnQgdGhlbSB0byBiZQotICAvLyB2aXNpYmxlKTsgYnV0IGJ5IGRlZmF1bHQsIHdlIHdhbnQgdG8gaGlkZSB0aGVtLiAgU28gaGlkZQotICAvLyB0aGVtIHVubGVzcyB3ZSBoYXZlIGEgY29va2llIHRoYXQgc2F5cyB0byBzaG93IHRoZW0uCi0gIGNoZWNrQ29va2llKCk7Ci0gIC8vIC0tPgotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vZG9jcy9hcGlkb2MvcmVkaXJlY3QuaHRtbCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL2FwaWRvYy9yZWRpcmVjdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTcyOGZkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9kb2NzL2FwaWRvYy9yZWRpcmVjdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPGh0bWw+PGhlYWQ+PHRpdGxlPkVweWRvYyBSZWRpcmVjdCBQYWdlPC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9ImNhY2hlLWNvbnRyb2wiIGNvbnRlbnQ9Im5vLWNhY2hlIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iZXhwaXJlcyIgY29udGVudD0iMCIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9InByYWdtYSIgY29udGVudD0ibm8tY2FjaGUiIC8+Ci0gIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImVweWRvYy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLTwhLS0KLXZhciBwYWdlcyA9IFsicmNzc21pbi1tIl07Ci12YXIgZG90dGVkTmFtZSA9IGdldF9hbmNob3IoKTsKLWlmIChkb3R0ZWROYW1lKSB7Ci0gICAgdmFyIHRhcmdldCA9IHJlZGlyZWN0X3VybChkb3R0ZWROYW1lKTsKLSAgICBpZiAodGFyZ2V0KSB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh0YXJnZXQpOwotfQotLy8gLS0+Ci08L3NjcmlwdD4KLQotPGgzPkVweWRvYyBBdXRvLXJlZGlyZWN0IHBhZ2U8L2gzPgotCi08cD5XaGVuIGphdmFzY3JpcHQgaXMgZW5hYmxlZCwgdGhpcyBwYWdlIHdpbGwgcmVkaXJlY3QgVVJMcyBvZgotdGhlIGZvcm0gPHR0PnJlZGlyZWN0Lmh0bWwjPGk+ZG90dGVkLm5hbWU8L2k+PC90dD4gdG8gdGhlCi1kb2N1bWVudGF0aW9uIGZvciB0aGUgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGZ1bGx5LXF1YWxpZmllZAotZG90dGVkIG5hbWUuPC9wPgotPHA+PGEgaWQ9Im1lc3NhZ2UiPiAmbmJzcDsgPC9hPjwvcD4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotPCEtLQotaWYgKGRvdHRlZE5hbWUpIHsKLSAgICB2YXIgbXNnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lc3NhZ2UiKTsKLSAgICBtc2cuaW5uZXJIVE1MID0gIk5vIGRvY3VtZW50YXRpb24gZm91bmQgZm9yIDx0dD4iKwotICAgICAgICAgICAgICAgICAgICBkb3R0ZWROYW1lKyI8L3R0PiI7Ci19Ci0vLyAtLT4KLTwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vcGFja2FnZS5jZmcgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vcGFja2FnZS5jZmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwOWJiZDAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3BhY2thZ2UuY2ZnCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KLSMKLSMgQ29weXJpZ2h0IDIwMDkgLSAyMDE0Ci0jIEFuZHLDqSBNYWxvIG9yIGhpcyBsaWNlbnNvcnMsIGFzIGFwcGxpY2FibGUKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotW3BhY2thZ2VdCi1uYW1lID0gcmNzc21pbgotCi1weXRob24ubWluID0gMi4zCi1weXRob24ubWF4ID0gMy40Ci1weXB5Lm1pbiA9IDEuOQotcHlweS5tYXggPSAyLjIKLWp5dGhvbi5taW4gPSAyLjUKLWp5dGhvbi5tYXggPSAyLjcKLQotdmVyc2lvbi5udW1iZXIgPSAxLjAuNQotCi1hdXRob3IubmFtZSA9IEFuZHLDqSBNYWxvCi1hdXRob3IuZW1haWwgPSBuZEBwZXJsaWcuZGUKLSNtYWludGFpbmVyLm5hbWUgPQotI21haW50YWluZXIuZW1haWwgPSAKLXVybC5ob21lcGFnZSA9IGh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yY3NzbWluLwotdXJsLmRvd25sb2FkID0gaHR0cDovL3N0b3JhZ2UucGVybGlnLmRlL3Jjc3NtaW4vCi0KLQotW2RvY3NdCi1tZXRhLmNsYXNzaWZpZXJzID0gZG9jcy9DTEFTU0lGSUVSUwotbWV0YS5kZXNjcmlwdGlvbiA9IGRvY3MvREVTQ1JJUFRJT04KLW1ldGEuc3VtbWFyeSA9IGRvY3MvU1VNTUFSWQotbWV0YS5wcm92aWRlcyA9IGRvY3MvUFJPVklERVMKLW1ldGEubGljZW5zZSA9IExJQ0VOU0UKLW1ldGEua2V5d29yZHMgPQotICAgIENTUwotICAgIE1pbmltaXphdGlvbgotCi1hcGlkb2MuZGlyID0gZG9jcy9hcGlkb2MKLWFwaWRvYy5zdHJpcCA9IDEKLSNhcGlkb2MuaWdub3JlID0KLQotI3VzZXJkb2MuZGlyID0gZG9jcy91c2VyZG9jCi0jdXNlcmRvYy5zdHJpcCA9IDEKLSN1c2VyZG9jLmlnbm9yZSA9Ci0jICAgIC5idWlsZGluZm8KLQotI2V4YW1wbGVzLmRpciA9IGRvY3MvZXhhbXBsZXMKLSNleGFtcGxlcy5zdHJpcCA9IDEKLSNleGFtcGxlcy5pZ25vcmUgPQotCi0jbWFuID0KLQotZXh0cmEgPQotICAgIFJFQURNRS5yc3QKLSAgICBkb2NzL0NIQU5HRVMKLSAgICBkb2NzL0JFTkNITUFSS1MKLQotCi1bbWFuaWZlc3RdCi0jcGFja2FnZXMubGliID0gLgotI3BhY2thZ2VzLmNvbGxlY3QgPQotbW9kdWxlcyA9IHJjc3NtaW4KLQotcGFja2FnZXMuZXh0cmEgPQotICAgIF9zZXR1cC5weTIudGVybQotICAgIF9zZXR1cC5weTMudGVybQotCi0jc2NyaXB0cyA9Ci0KLWRpc3QgPQotICAgIHRlc3RzCi0gICAgcnVuX3Rlc3RzLnB5Ci0gICAgYmVuY2gKLSAgICBiZW5jaC5zaApkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Jjc3NtaW4uYyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9yY3NzbWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MjJmYzIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Jjc3NtaW4uYworKysgL2Rldi9udWxsCkBAIC0xLDExNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExIC0gMjAxNAotICogQW5kclx4ZTkgTWFsbyBvciBoaXMgbGljZW5zb3JzLCBhcyBhcHBsaWNhYmxlCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgImNleHQuaCIKLUVYVF9JTklUX0ZVTkM7Ci0KLSNpZmRlZiBFWFQzCi10eXBlZGVmIFB5X1VOSUNPREUgcmNoYXI7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHJjaGFyOwotI2VuZGlmCi0jZGVmaW5lIFUoYykgKChyY2hhcikoYykpCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBjb25zdCByY2hhciAqc3RhcnQ7Ci0gICAgY29uc3QgcmNoYXIgKnNlbnRpbmVsOwotICAgIGNvbnN0IHJjaGFyICp0c2VudGluZWw7Ci0gICAgUHlfc3NpemVfdCBhdF9ncm91cDsKLSAgICBpbnQgaW5fbWFjaWU1OwotICAgIGludCBpbl9ydWxlOwotICAgIGludCBrZWVwX2JhbmdfY29tbWVudHM7Ci19IHJjc3NtaW5fY3R4X3Q7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gICAgTkVFRF9TUEFDRV9NQVlCRSA9IDAsCi0gICAgTkVFRF9TUEFDRV9ORVZFUgotfSBuZWVkX3NwYWNlX2ZsYWc7Ci0KLQotI2RlZmluZSBSQ1NTTUlOX0RVTExfQklUICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgUkNTU01JTl9IRVhfQklUICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIFJDU1NNSU5fRVNDX0JJVCAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBSQ1NTTUlOX1NQQUNFX0JJVCAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgUkNTU01JTl9TVFJJTkdfRFVMTF9CSVQgICgxIDw8IDQpCi0jZGVmaW5lIFJDU1NNSU5fTk1DSEFSX0JJVCAgICAgICAoMSA8PCA1KQotI2RlZmluZSBSQ1NTTUlOX1VSSV9EVUxMX0JJVCAgICAgKDEgPDwgNikKLSNkZWZpbmUgUkNTU01JTl9QUkVfQ0hBUl9CSVQgICAgICgxIDw8IDcpCi0jZGVmaW5lIFJDU1NNSU5fUE9TVF9DSEFSX0JJVCAgICAoMSA8PCA4KQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgcmNzc21pbl9jaGFybWFza1sxMjhdID0gewotICAgICAyMSwgIDIxLCAgMjEsICAyMSwgIDIxLCAgMjEsICAyMSwgIDIxLAotICAgICAyMSwgIDI4LCAgIDgsICAyMSwgICA4LCAgIDgsICAyMSwgIDIxLAotICAgICAyMSwgIDIxLCAgMjEsICAyMSwgIDIxLCAgMjEsICAyMSwgIDIxLAotICAgICAyMSwgIDIxLCAgMjEsICAyMSwgIDIxLCAgMjEsICAyMSwgIDIxLAotICAgICAyOCwgNDY5LCAgIDQsICA4NSwgIDg1LCAgODUsICA4NSwgICA0LAotICAgIDE0OSwgMjc3LCAgODUsIDQ2OSwgNDY5LCAxMTcsICA4NSwgIDg0LAotICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LAotICAgIDExNSwgMTE1LCA0NjgsIDM0MCwgIDg1LCA0NjksIDQ2OCwgIDg1LAotICAgICA4NCwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE3LAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LAotICAgIDExNywgMTE3LCAxMTcsIDIxMywgICA0LCAzNDEsICA4NSwgMTE3LAotICAgICA4NSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE3LAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTYsIDExNywgMTE3LAotICAgIDExNywgMTE3LCAxMTcsIDQ2OCwgIDg1LCA0NjgsICA4NSwgIDIxCi19OwotCi0jZGVmaW5lIFJDU1NNSU5fSVNfRFVMTChjKSAoKFUoYykgPiAxMjcpIHx8IFwKLSAgICAocmNzc21pbl9jaGFybWFza1tVKGMpICYgMHg3Rl0gJiBSQ1NTTUlOX0RVTExfQklUKSkKLQotI2RlZmluZSBSQ1NTTUlOX0lTX0hFWChjKSAoKFUoYykgPD0gMTI3KSAmJiBcCi0gICAgKHJjc3NtaW5fY2hhcm1hc2tbVShjKSAmIDB4N0ZdICYgUkNTU01JTl9IRVhfQklUKSkKLQotI2RlZmluZSBSQ1NTTUlOX0lTX0VTQyhjKSAoKFUoYykgPiAxMjcpIHx8IFwKLSAgICAocmNzc21pbl9jaGFybWFza1tVKGMpICYgMHg3Rl0gJiBSQ1NTTUlOX0VTQ19CSVQpKQotCi0jZGVmaW5lIFJDU1NNSU5fSVNfU1BBQ0UoYykgKChVKGMpIDw9IDEyNykgJiYgXAotICAgIChyY3NzbWluX2NoYXJtYXNrW1UoYykgJiAweDdGXSAmIFJDU1NNSU5fU1BBQ0VfQklUKSkKLQotI2RlZmluZSBSQ1NTTUlOX0lTX1NUUklOR19EVUxMKGMpICgoVShjKSA+IDEyNykgfHwgXAotICAgIChyY3NzbWluX2NoYXJtYXNrW1UoYykgJiAweDdGXSAmIFJDU1NNSU5fU1RSSU5HX0RVTExfQklUKSkKLQotI2RlZmluZSBSQ1NTTUlOX0lTX05NQ0hBUihjKSAoKFUoYykgPiAxMjcpIHx8IFwKLSAgICAocmNzc21pbl9jaGFybWFza1tVKGMpICYgMHg3Rl0gJiBSQ1NTTUlOX05NQ0hBUl9CSVQpKQotCi0jZGVmaW5lIFJDU1NNSU5fSVNfVVJJX0RVTEwoYykgKChVKGMpID4gMTI3KSB8fCBcCi0gICAgKHJjc3NtaW5fY2hhcm1hc2tbVShjKSAmIDB4N0ZdICYgUkNTU01JTl9VUklfRFVMTF9CSVQpKQotCi0jZGVmaW5lIFJDU1NNSU5fSVNfUFJFX0NIQVIoYykgKChVKGMpIDw9IDEyNykgJiYgXAotICAgIChyY3NzbWluX2NoYXJtYXNrW1UoYykgJiAweDdGXSAmIFJDU1NNSU5fUFJFX0NIQVJfQklUKSkKLQotI2RlZmluZSBSQ1NTTUlOX0lTX1BPU1RfQ0hBUihjKSAoKFUoYykgPD0gMTI3KSAmJiBcCi0gICAgKHJjc3NtaW5fY2hhcm1hc2tbVShjKSAmIDB4N0ZdICYgUkNTU01JTl9QT1NUX0NIQVJfQklUKSkKLQotCi1zdGF0aWMgY29uc3QgcmNoYXIgcGF0dGVybl91cmxbXSA9IHsKLSAgICAvKlUoJ3UnKSwqLyBVKCdyJyksIFUoJ2wnKSwgVSgnKCcpCi19OwotCi1zdGF0aWMgY29uc3QgcmNoYXIgcGF0dGVybl9pZTdbXSA9IHsKLSAgICAvKlUoJz4nKSwqLyBVKCcvJyksIFUoJyonKSwgVSgnKicpLCBVKCcvJykKLX07Ci0KLXN0YXRpYyBjb25zdCByY2hhciBwYXR0ZXJuX21lZGlhW10gPSB7Ci0gICAgVSgnbScpLCBVKCdlJyksIFUoJ2QnKSwgVSgnaScpLCBVKCdhJyksCi0gICAgVSgnTScpLCBVKCdFJyksIFUoJ0QnKSwgVSgnSScpLCBVKCdBJykKLX07Ci0KLXN0YXRpYyBjb25zdCByY2hhciBwYXR0ZXJuX2RvY3VtZW50W10gPSB7Ci0gICAgVSgnZCcpLCBVKCdvJyksIFUoJ2MnKSwgVSgndScpLCBVKCdtJyksIFUoJ2UnKSwgVSgnbicpLCBVKCd0JyksCi0gICAgVSgnRCcpLCBVKCdPJyksIFUoJ0MnKSwgVSgnVScpLCBVKCdNJyksIFUoJ0UnKSwgVSgnTicpLCBVKCdUJykKLX07Ci0KLXN0YXRpYyBjb25zdCByY2hhciBwYXR0ZXJuX3N1cHBvcnRzW10gPSB7Ci0gICAgVSgncycpLCBVKCd1JyksIFUoJ3AnKSwgVSgncCcpLCBVKCdvJyksIFUoJ3InKSwgVSgndCcpLCBVKCdzJyksCi0gICAgVSgnUycpLCBVKCdVJyksIFUoJ1AnKSwgVSgnUCcpLCBVKCdPJyksIFUoJ1InKSwgVSgnVCcpLCBVKCdTJykKLX07Ci0KLXN0YXRpYyBjb25zdCByY2hhciBwYXR0ZXJuX2tleWZyYW1lc1tdID0gewotICAgIFUoJ2snKSwgVSgnZScpLCBVKCd5JyksIFUoJ2YnKSwgVSgncicpLCBVKCdhJyksIFUoJ20nKSwgVSgnZScpLCBVKCdzJyksCi0gICAgVSgnSycpLCBVKCdFJyksIFUoJ1knKSwgVSgnRicpLCBVKCdSJyksIFUoJ0EnKSwgVSgnTScpLCBVKCdFJyksIFUoJ1MnKQotfTsKLQotc3RhdGljIGNvbnN0IHJjaGFyIHBhdHRlcm5fdmVuZG9yX29bXSA9IHsKLSAgICBVKCctJyksIFUoJ28nKSwgVSgnLScpLAotICAgIFUoJy0nKSwgVSgnTycpLCBVKCctJykKLX07Ci0KLXN0YXRpYyBjb25zdCByY2hhciBwYXR0ZXJuX3ZlbmRvcl9tb3pbXSA9IHsKLSAgICBVKCctJyksIFUoJ20nKSwgVSgnbycpLCBVKCd6JyksIFUoJy0nKSwKLSAgICBVKCctJyksIFUoJ00nKSwgVSgnTycpLCBVKCdaJyksIFUoJy0nKQotfTsKLQotc3RhdGljIGNvbnN0IHJjaGFyIHBhdHRlcm5fdmVuZG9yX3dlYmtpdFtdID0gewotICAgIFUoJy0nKSwgVSgndycpLCBVKCdlJyksIFUoJ2InKSwgVSgnaycpLCBVKCdpJyksIFUoJ3QnKSwgVSgnLScpLAotICAgIFUoJy0nKSwgVSgnVycpLCBVKCdFJyksIFUoJ0InKSwgVSgnSycpLCBVKCdJJyksIFUoJ1QnKSwgVSgnLScpCi19OwotCi1zdGF0aWMgY29uc3QgcmNoYXIgcGF0dGVybl92ZW5kb3JfbXNbXSA9IHsKLSAgICBVKCctJyksIFUoJ20nKSwgVSgncycpLCBVKCctJyksCi0gICAgVSgnLScpLCBVKCdNJyksIFUoJ1MnKSwgVSgnLScpCi19OwotCi1zdGF0aWMgY29uc3QgcmNoYXIgcGF0dGVybl9maXJzdFtdID0gewotICAgIFUoJ2YnKSwgVSgnaScpLCBVKCdyJyksIFUoJ3MnKSwgVSgndCcpLCBVKCctJyksIFUoJ2wnKSwKLSAgICBVKCdGJyksIFUoJ0knKSwgVSgnUicpLCBVKCdTJyksIFUoJ1QnKSwgVSgnLScpLCBVKCdMJykKLX07Ci0KLXN0YXRpYyBjb25zdCByY2hhciBwYXR0ZXJuX2xpbmVbXSA9IHsKLSAgICBVKCdpJyksIFUoJ24nKSwgVSgnZScpLAotICAgIFUoJ0knKSwgVSgnTicpLCBVKCdFJyksCi19OwotCi1zdGF0aWMgY29uc3QgcmNoYXIgcGF0dGVybl9sZXR0ZXJbXSA9IHsKLSAgICBVKCdlJyksIFUoJ3QnKSwgVSgndCcpLCBVKCdlJyksIFUoJ3InKSwKLSAgICBVKCdFJyksIFUoJ1QnKSwgVSgnVCcpLCBVKCdFJyksIFUoJ1InKQotfTsKLQotc3RhdGljIGNvbnN0IHJjaGFyIHBhdHRlcm5fbWFjaWU1X2luaXRbXSA9IHsKLSAgICBVKCcvJyksIFUoJyonKSwgVSgnXFwnKSwgVSgnKicpLCBVKCcvJykKLX07Ci0KLXN0YXRpYyBjb25zdCByY2hhciBwYXR0ZXJuX21hY2llNV9leGl0W10gPSB7Ci0gICAgVSgnLycpLCBVKCcqJyksIFUoJyonKSwgVSgnLycpCi19OwotCi0vKgotICogTWF0Y2ggYSBwYXR0ZXJuIChhbmQgY29weSBpbW1lZGlhdGVseSB0byB0YXJnZXQpCi0gKi8KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDYpKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3RyaWN0LW92ZXJmbG93IgotI2VuZGlmCi1zdGF0aWMgaW50Ci1jb3B5X21hdGNoKGNvbnN0IHJjaGFyICpwYXR0ZXJuLCBjb25zdCByY2hhciAqcHNlbnRpbmVsLAotICAgICAgICAgICBjb25zdCByY2hhciAqKnNvdXJjZV8sIHJjaGFyICoqdGFyZ2V0XywgcmNzc21pbl9jdHhfdCAqY3R4KQotewotICAgIGNvbnN0IHJjaGFyICpzb3VyY2UgPSAqc291cmNlXzsKLSAgICByY2hhciAqdGFyZ2V0ID0gKnRhcmdldF87Ci0gICAgcmNoYXIgYzsKLQotICAgIHdoaWxlIChwYXR0ZXJuIDwgcHNlbnRpbmVsCi0gICAgICAgICAgICYmIHNvdXJjZSA8IGN0eC0+c2VudGluZWwgJiYgdGFyZ2V0IDwgY3R4LT50c2VudGluZWwKLSAgICAgICAgICAgJiYgKChjID0gKnNvdXJjZSsrKSA9PSAqcGF0dGVybisrKSkKLSAgICAgICAgKnRhcmdldCsrID0gYzsKLQotICAgICpzb3VyY2VfID0gc291cmNlOwotICAgICp0YXJnZXRfID0gdGFyZ2V0OwotCi0gICAgcmV0dXJuIChwYXR0ZXJuID09IHBzZW50aW5lbCk7Ci19Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA2KSkKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKLQotI2RlZmluZSBNQVRDSChQQVQsIHNvdXJjZSwgdGFyZ2V0LCBjdHgpICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY29weV9tYXRjaChwYXR0ZXJuXyMjUEFULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgIHBhdHRlcm5fIyNQQVQgKyBzaXplb2YocGF0dGVybl8jI1BBVCkgLyBzaXplb2YocmNoYXIpLCAgXAotICAgICAgICAgICAgICAgc291cmNlLCB0YXJnZXQsIGN0eCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0pCi0KLQotLyoKLSAqIE1hdGNoIGEgcGF0dGVybiAoYW5kIGNvcHkgaW1tZWRpYXRlbHkgdG8gdGFyZ2V0KSAtIENJIHZlcnNpb24KLSAqLwotc3RhdGljIGludAotY29weV9pbWF0Y2goY29uc3QgcmNoYXIgKnBhdHRlcm4sIGNvbnN0IHJjaGFyICpwc2VudGluZWwsCi0gICAgICAgICAgICBjb25zdCByY2hhciAqKnNvdXJjZV8sIHJjaGFyICoqdGFyZ2V0XywgcmNzc21pbl9jdHhfdCAqY3R4KQotewotICAgIGNvbnN0IHJjaGFyICpzb3VyY2UgPSAqc291cmNlXywgKnBzdGFydCA9IHBhdHRlcm47Ci0gICAgcmNoYXIgKnRhcmdldCA9ICp0YXJnZXRfOwotICAgIHJjaGFyIGM7Ci0KLSAgICB3aGlsZSAocGF0dGVybiA8IHBzZW50aW5lbAotICAgICAgICAgICAmJiBzb3VyY2UgPCBjdHgtPnNlbnRpbmVsICYmIHRhcmdldCA8IGN0eC0+dHNlbnRpbmVsCi0gICAgICAgICAgICYmICgoYyA9ICpzb3VyY2UrKykgPT0gKnBhdHRlcm4KLSAgICAgICAgICAgICAgIHx8IGMgPT0gcHN0YXJ0WyhwYXR0ZXJuIC0gcHN0YXJ0KSArIChwc2VudGluZWwgLSBwc3RhcnQpXSkpIHsKLSAgICAgICAgKytwYXR0ZXJuOwotICAgICAgICAqdGFyZ2V0KysgPSBjOwotICAgIH0KLQotICAgICpzb3VyY2VfID0gc291cmNlOwotICAgICp0YXJnZXRfID0gdGFyZ2V0OwotCi0gICAgcmV0dXJuIChwYXR0ZXJuID09IHBzZW50aW5lbCk7Ci19Ci0KLSNkZWZpbmUgSU1BVENIKFBBVCwgc291cmNlLCB0YXJnZXQsIGN0eCkgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY29weV9pbWF0Y2gocGF0dGVybl8jI1BBVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHBhdHRlcm5fIyNQQVQgKyBzaXplb2YocGF0dGVybl8jI1BBVCkgLyBzaXplb2YocmNoYXIpIC8gMiwgIFwKLSAgICAgICAgICAgICAgICBzb3VyY2UsIHRhcmdldCwgY3R4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0pCi0KLQotLyoKLSAqIENvcHkgY2hhcmFjdGVycwotICovCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA2KSkKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3N0cmljdC1vdmVyZmxvdyIKLSNlbmRpZgotc3RhdGljIGludAotY29weShjb25zdCByY2hhciAqc291cmNlLCBjb25zdCByY2hhciAqc2VudGluZWwsIHJjaGFyICoqdGFyZ2V0XywKLSAgICAgcmNzc21pbl9jdHhfdCAqY3R4KQotewotICAgIHJjaGFyICp0YXJnZXQgPSAqdGFyZ2V0XzsKLQotICAgIHdoaWxlIChzb3VyY2UgPCBzZW50aW5lbCAmJiB0YXJnZXQgPCBjdHgtPnRzZW50aW5lbCkKLSAgICAgICAgKnRhcmdldCsrID0gKnNvdXJjZSsrOwotCi0gICAgKnRhcmdldF8gPSB0YXJnZXQ7Ci0KLSAgICByZXR1cm4gKHNvdXJjZSA9PSBzZW50aW5lbCk7Ci19Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA2KSkKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKLQotI2RlZmluZSBDT1BZX1BBVChQQVQsIHRhcmdldCwgY3R4KSAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY29weShwYXR0ZXJuXyMjUEFULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIHBhdHRlcm5fIyNQQVQgKyBzaXplb2YocGF0dGVybl8jI1BBVCkgLyBzaXplb2YocmNoYXIpLCAgXAotICAgICAgICAgdGFyZ2V0LCBjdHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0pCi0KLQotLyoKLSAqIFRoZSBBQk9SVCBtYWNyb3Mgd29yayB3aXRoIGtub3duIGxvY2FsIHZhcmlhYmxlcyEKLSAqLwotI2RlZmluZSBBQk9SVF8oUkVUKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHNvdXJjZSA8IGN0eC0+c2VudGluZWwgJiYgISh0YXJnZXQgPCBjdHgtPnRzZW50aW5lbCkpIHsgIFwKLSAgICAgICAgKnNvdXJjZV8gPSBzb3VyY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAqdGFyZ2V0XyA9IHRhcmdldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gUkVUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSgwKQotCi0KLSNkZWZpbmUgQ1JBUFBZX0M5MF9DT01QQVRJQkxFX0VNUFRZCi0jZGVmaW5lIEFCT1JUIEFCT1JUXyhDUkFQUFlfQzkwX0NPTVBBVElCTEVfRU1QVFkpCi0jZGVmaW5lIFJBQk9SVChSRVQpIEFCT1JUXygoUkVUKSkKLQotCi0vKgotICogQ29weSBlc2NhcGUKLSAqLwotc3RhdGljIHZvaWQKLWNvcHlfZXNjYXBlKGNvbnN0IHJjaGFyICoqc291cmNlXywgcmNoYXIgKip0YXJnZXRfLCByY3NzbWluX2N0eF90ICpjdHgpCi17Ci0gICAgY29uc3QgcmNoYXIgKnNvdXJjZSA9ICpzb3VyY2VfLCAqaHNlbnRpbmVsOwotICAgIHJjaGFyICp0YXJnZXQgPSAqdGFyZ2V0XzsKLSAgICByY2hhciBjOwotCi0gICAgKnRhcmdldCsrID0gVSgnXFwnKTsKLSAgICAqdGFyZ2V0XyA9IHRhcmdldDsKLQotICAgIGlmIChzb3VyY2UgPCBjdHgtPnNlbnRpbmVsICYmIHRhcmdldCA8IGN0eC0+dHNlbnRpbmVsKSB7Ci0gICAgICAgIGMgPSAqc291cmNlKys7Ci0gICAgICAgIGlmIChSQ1NTTUlOX0lTX0VTQyhjKSkgewotICAgICAgICAgICAgKnRhcmdldCsrID0gYzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChSQ1NTTUlOX0lTX0hFWChjKSkgewotICAgICAgICAgICAgKnRhcmdldCsrID0gYzsKLQotICAgICAgICAgICAgLyogNiBoZXggY2hhcnMgbWF4LCBvbmUgd2UgZ290IGFscmVhZHkgKi8KLSAgICAgICAgICAgIGlmIChjdHgtPnNlbnRpbmVsIC0gc291cmNlID4gNSkKLSAgICAgICAgICAgICAgICBoc2VudGluZWwgPSBzb3VyY2UgKyA1OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGhzZW50aW5lbCA9IGN0eC0+c2VudGluZWw7Ci0KLSAgICAgICAgICAgIHdoaWxlIChzb3VyY2UgPCBoc2VudGluZWwgJiYgdGFyZ2V0IDwgY3R4LT50c2VudGluZWwKLSAgICAgICAgICAgICAgICAgICAmJiAoYyA9ICpzb3VyY2UsIFJDU1NNSU5fSVNfSEVYKGMpKSkgewotICAgICAgICAgICAgICAgICsrc291cmNlOwotICAgICAgICAgICAgICAgICp0YXJnZXQrKyA9IGM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIE9uZSBvcHRpb25hbCBzcGFjZSBhZnRlciAqLwotICAgICAgICAgICAgaWYgKHNvdXJjZSA8IGN0eC0+c2VudGluZWwgJiYgdGFyZ2V0IDwgY3R4LT50c2VudGluZWwpIHsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlID09IGhzZW50aW5lbCkKLSAgICAgICAgICAgICAgICAgICAgYyA9ICpzb3VyY2U7Ci0gICAgICAgICAgICAgICAgaWYgKFJDU1NNSU5fSVNfU1BBQ0UoYykpIHsKLSAgICAgICAgICAgICAgICAgICAgKytzb3VyY2U7Ci0gICAgICAgICAgICAgICAgICAgICp0YXJnZXQrKyA9IFUoJyAnKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gVSgnXHInKSAmJiBzb3VyY2UgPCBjdHgtPnNlbnRpbmVsCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAqc291cmNlID09IFUoJ1xuJykpCi0gICAgICAgICAgICAgICAgICAgICAgICArK3NvdXJjZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqdGFyZ2V0XyA9IHRhcmdldDsKLSAgICAqc291cmNlXyA9IHNvdXJjZTsKLX0KLQotCi0vKgotICogQ29weSBzdHJpbmcKLSAqLwotc3RhdGljIHZvaWQKLWNvcHlfc3RyaW5nKGNvbnN0IHJjaGFyICoqc291cmNlXywgcmNoYXIgKip0YXJnZXRfLCByY3NzbWluX2N0eF90ICpjdHgpCi17Ci0gICAgY29uc3QgcmNoYXIgKnNvdXJjZSA9ICpzb3VyY2VfOwotICAgIHJjaGFyICp0YXJnZXQgPSAqdGFyZ2V0XzsKLSAgICByY2hhciBjLCBxdW90ZSA9IHNvdXJjZVstMV07Ci0KLSAgICAqdGFyZ2V0KysgPSBxdW90ZTsKLSAgICAqdGFyZ2V0XyA9IHRhcmdldDsKLQotICAgIHdoaWxlIChzb3VyY2UgPCBjdHgtPnNlbnRpbmVsICYmIHRhcmdldCA8IGN0eC0+dHNlbnRpbmVsKSB7Ci0gICAgICAgIGMgPSAqdGFyZ2V0KysgPSAqc291cmNlKys7Ci0gICAgICAgIGlmIChSQ1NTTUlOX0lTX1NUUklOR19EVUxMKGMpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgIGNhc2UgVSgnXCcnKTogY2FzZSBVKCciJyk6Ci0gICAgICAgICAgICBpZiAoYyA9PSBxdW90ZSkgewotICAgICAgICAgICAgICAgICp0YXJnZXRfID0gdGFyZ2V0OwotICAgICAgICAgICAgICAgICpzb3VyY2VfID0gc291cmNlOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNhc2UgVSgnXFwnKToKLSAgICAgICAgICAgIGlmIChzb3VyY2UgPCBjdHgtPnNlbnRpbmVsICYmIHRhcmdldCA8IGN0eC0+dHNlbnRpbmVsKSB7Ci0gICAgICAgICAgICAgICAgYyA9ICpzb3VyY2UrKzsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFUoJ1xyJyk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgPCBjdHgtPnNlbnRpbmVsICYmICpzb3VyY2UgPT0gVSgnXG4nKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICsrc291cmNlOwotICAgICAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgVSgnXG4nKTogY2FzZSBVKCdcZicpOgotICAgICAgICAgICAgICAgICAgICAtLXRhcmdldDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAqdGFyZ2V0KysgPSBjOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOyAvKiBmb3JiaWRkZW4gY2hhcmFjdGVycyAqLwotICAgIH0KLQotICAgIEFCT1JUOwotfQotCi0KLS8qCi0gKiBDb3B5IFVSSSBzdHJpbmcKLSAqLwotc3RhdGljIGludAotY29weV91cmlfc3RyaW5nKGNvbnN0IHJjaGFyICoqc291cmNlXywgcmNoYXIgKip0YXJnZXRfLCByY3NzbWluX2N0eF90ICpjdHgpCi17Ci0gICAgY29uc3QgcmNoYXIgKnNvdXJjZSA9ICpzb3VyY2VfOwotICAgIHJjaGFyICp0YXJnZXQgPSAqdGFyZ2V0XzsKLSAgICByY2hhciBjLCBxdW90ZSA9IHNvdXJjZVstMV07Ci0KLSAgICAqdGFyZ2V0KysgPSBxdW90ZTsKLSAgICAqdGFyZ2V0XyA9IHRhcmdldDsKLQotICAgIHdoaWxlIChzb3VyY2UgPCBjdHgtPnNlbnRpbmVsICYmIHRhcmdldCA8IGN0eC0+dHNlbnRpbmVsKSB7Ci0gICAgICAgIGMgPSAqc291cmNlKys7Ci0gICAgICAgIGlmIChSQ1NTTUlOX0lTX1NQQUNFKGMpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICp0YXJnZXQrKyA9IGM7Ci0gICAgICAgIGlmIChSQ1NTTUlOX0lTX1NUUklOR19EVUxMKGMpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgIGNhc2UgVSgnXCcnKTogY2FzZSBVKCciJyk6Ci0gICAgICAgICAgICBpZiAoYyA9PSBxdW90ZSkgewotICAgICAgICAgICAgICAgICp0YXJnZXRfID0gdGFyZ2V0OwotICAgICAgICAgICAgICAgICpzb3VyY2VfID0gc291cmNlOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY2FzZSBVKCdcXCcpOgotICAgICAgICAgICAgaWYgKHNvdXJjZSA8IGN0eC0+c2VudGluZWwgJiYgdGFyZ2V0IDwgY3R4LT50c2VudGluZWwpIHsKLSAgICAgICAgICAgICAgICBjID0gKnNvdXJjZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFUoJ1xyJyk6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoc291cmNlICsgMSkgPCBjdHgtPnNlbnRpbmVsICYmIHNvdXJjZVsxXSA9PSBVKCdcbicpKQotICAgICAgICAgICAgICAgICAgICAgICAgKytzb3VyY2U7Ci0gICAgICAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotCi0gICAgICAgICAgICAgICAgY2FzZSBVKCdcbicpOiBjYXNlIFUoJ1xmJyk6Ci0gICAgICAgICAgICAgICAgICAgIC0tdGFyZ2V0OwotICAgICAgICAgICAgICAgICAgICArK3NvdXJjZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAtLXRhcmdldDsKLSAgICAgICAgICAgICAgICAgICAgY29weV9lc2NhcGUoJnNvdXJjZSwgJnRhcmdldCwgY3R4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJyZWFrOyAvKiBmb3JiaWRkZW4gY2hhcmFjdGVycyAqLwotICAgIH0KLQotICAgIFJBQk9SVCgtMSk7Ci19Ci0KLQotLyoKLSAqIENvcHkgVVJJICh1bnF1b3RlZCkKLSAqLwotc3RhdGljIGludAotY29weV91cmlfdW5xdW90ZWQoY29uc3QgcmNoYXIgKipzb3VyY2VfLCByY2hhciAqKnRhcmdldF8sIHJjc3NtaW5fY3R4X3QgKmN0eCkKLXsKLSAgICBjb25zdCByY2hhciAqc291cmNlID0gKnNvdXJjZV87Ci0gICAgcmNoYXIgKnRhcmdldCA9ICp0YXJnZXRfOwotICAgIHJjaGFyIGM7Ci0KLSAgICAqdGFyZ2V0KysgPSBzb3VyY2VbLTFdOwotICAgICp0YXJnZXRfID0gdGFyZ2V0OwotCi0gICAgd2hpbGUgKHNvdXJjZSA8IGN0eC0+c2VudGluZWwgJiYgdGFyZ2V0IDwgY3R4LT50c2VudGluZWwpIHsKLSAgICAgICAgYyA9ICpzb3VyY2UrKzsKLSAgICAgICAgaWYgKFJDU1NNSU5fSVNfU1BBQ0UoYykpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgKnRhcmdldCsrID0gYzsKLSAgICAgICAgaWYgKFJDU1NNSU5fSVNfVVJJX0RVTEwoYykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBzd2l0Y2ggKGMpIHsKLQotICAgICAgICBjYXNlIFUoJyknKToKLSAgICAgICAgICAgICp0YXJnZXRfID0gdGFyZ2V0IC0gMTsKLSAgICAgICAgICAgICpzb3VyY2VfID0gc291cmNlIC0gMTsKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGNhc2UgVSgnXFwnKToKLSAgICAgICAgICAgIGlmIChzb3VyY2UgPCBjdHgtPnNlbnRpbmVsICYmIHRhcmdldCA8IGN0eC0+dHNlbnRpbmVsKSB7Ci0gICAgICAgICAgICAgICAgYyA9ICpzb3VyY2U7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBVKCdccicpOgotICAgICAgICAgICAgICAgICAgICBpZiAoKHNvdXJjZSArIDEpIDwgY3R4LT5zZW50aW5lbCAmJiBzb3VyY2VbMV0gPT0gVSgnXG4nKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICsrc291cmNlOwotICAgICAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgVSgnXG4nKTogY2FzZSBVKCdcZicpOgotICAgICAgICAgICAgICAgICAgICAtLXRhcmdldDsKLSAgICAgICAgICAgICAgICAgICAgKytzb3VyY2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLS10YXJnZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvcHlfZXNjYXBlKCZzb3VyY2UsICZ0YXJnZXQsIGN0eCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBicmVhazsgLyogZm9yYmlkZGVuIGNoYXJhY3RlcnMgKi8KLSAgICB9Ci0KLSAgICBSQUJPUlQoLTEpOwotfQotCi0KLS8qCi0gKiBDb3B5IHVybAotICovCi1zdGF0aWMgdm9pZAotY29weV91cmwoY29uc3QgcmNoYXIgKipzb3VyY2VfLCByY2hhciAqKnRhcmdldF8sIHJjc3NtaW5fY3R4X3QgKmN0eCkKLXsKLSAgICBjb25zdCByY2hhciAqc291cmNlID0gKnNvdXJjZV87Ci0gICAgcmNoYXIgKnRhcmdldCA9ICp0YXJnZXRfOwotICAgIHJjaGFyIGM7Ci0KLSAgICAqdGFyZ2V0KysgPSBVKCd1Jyk7Ci0gICAgKnRhcmdldF8gPSB0YXJnZXQ7Ci0KLSAgICAvKiBNdXN0IG5vdCBiZSBpbnNpZGUgYW4gaWRlbnRpZmllciAqLwotICAgIGlmICgoc291cmNlICE9IGN0eC0+c3RhcnQgKyAxKSAmJiBSQ1NTTUlOX0lTX05NQ0hBUihzb3VyY2VbLTJdKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFNQVRDSCh1cmwsICZzb3VyY2UsICZ0YXJnZXQsIGN0eCkKLSAgICAgICAgfHwgIShzb3VyY2UgPCBjdHgtPnNlbnRpbmVsICYmIHRhcmdldCA8IGN0eC0+dHNlbnRpbmVsKSkKLSAgICAgICAgQUJPUlQ7Ci0KLSAgICB3aGlsZSAoc291cmNlIDwgY3R4LT5zZW50aW5lbCAmJiBSQ1NTTUlOX0lTX1NQQUNFKCpzb3VyY2UpKQotICAgICAgICArK3NvdXJjZTsKLQotICAgIGlmICghKHNvdXJjZSA8IGN0eC0+c2VudGluZWwpKQotICAgICAgICBBQk9SVDsKLQotICAgIGMgPSAqc291cmNlKys7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgY2FzZSBVKCciJyk6IGNhc2UgVSgnXCcnKToKLSAgICAgICAgaWYgKGNvcHlfdXJpX3N0cmluZygmc291cmNlLCAmdGFyZ2V0LCBjdHgpID09IC0xKQotICAgICAgICAgICAgQUJPUlQ7Ci0KLSAgICAgICAgd2hpbGUgKHNvdXJjZSA8IGN0eC0+c2VudGluZWwgJiYgUkNTU01JTl9JU19TUEFDRSgqc291cmNlKSkKLSAgICAgICAgICAgICsrc291cmNlOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChjb3B5X3VyaV91bnF1b3RlZCgmc291cmNlLCAmdGFyZ2V0LCBjdHgpID09IC0xKQotICAgICAgICAgICAgQUJPUlQ7Ci0gICAgfQotCi0gICAgaWYgKCEoc291cmNlIDwgY3R4LT5zZW50aW5lbCAmJiB0YXJnZXQgPCBjdHgtPnRzZW50aW5lbCkpCi0gICAgICAgIEFCT1JUOwotCi0gICAgaWYgKCgqdGFyZ2V0KysgPSAqc291cmNlKyspICE9IFUoJyknKSkKLSAgICAgICAgQUJPUlQ7Ci0KLSAgICAqdGFyZ2V0XyA9IHRhcmdldDsKLSAgICAqc291cmNlXyA9IHNvdXJjZTsKLX0KLQotCi0vKgotICogQ29weSBALWdyb3VwCi0gKi8KLXN0YXRpYyB2b2lkCi1jb3B5X2F0X2dyb3VwKGNvbnN0IHJjaGFyICoqc291cmNlXywgcmNoYXIgKip0YXJnZXRfLCByY3NzbWluX2N0eF90ICpjdHgpCi17Ci0gICAgY29uc3QgcmNoYXIgKnNvdXJjZSA9ICpzb3VyY2VfOwotICAgIHJjaGFyICp0YXJnZXQgPSAqdGFyZ2V0XzsKLQotICAgICp0YXJnZXQrKyA9IFUoJ0AnKTsKLSAgICAqdGFyZ2V0XyA9IHRhcmdldDsKLQotI2RlZmluZSBSRU1BVENIKHdoYXQpICggXAotICAgIHNvdXJjZSA9ICpzb3VyY2VfLCBcCi0gICAgdGFyZ2V0ID0gKnRhcmdldF8sIFwKLSAgICBJTUFUQ0god2hhdCwgJnNvdXJjZSwgJnRhcmdldCwgY3R4KSBcCi0pCi0jZGVmaW5lIENNQVRDSCh3aGF0KSBJTUFUQ0god2hhdCwgJnNvdXJjZSwgJnRhcmdldCwgY3R4KQotCi0gICAgaWYgKCggICFDTUFUQ0gobWVkaWEpCi0gICAgICAgICYmICFSRU1BVENIKHN1cHBvcnRzKQotICAgICAgICAmJiAhUkVNQVRDSChkb2N1bWVudCkKLSAgICAgICAgJiYgIVJFTUFUQ0goa2V5ZnJhbWVzKQotICAgICAgICAmJiAhKFJFTUFUQ0godmVuZG9yX3dlYmtpdCkgJiYgQ01BVENIKGtleWZyYW1lcykpCi0gICAgICAgICYmICEoUkVNQVRDSCh2ZW5kb3JfbW96KSAmJiBDTUFUQ0goa2V5ZnJhbWVzKSkKLSAgICAgICAgJiYgIShSRU1BVENIKHZlbmRvcl9vKSAmJiBDTUFUQ0goa2V5ZnJhbWVzKSkKLSAgICAgICAgJiYgIShSRU1BVENIKHZlbmRvcl9tcykgJiYgQ01BVENIKGtleWZyYW1lcykpKQotICAgICAgICB8fCAhKHNvdXJjZSA8IGN0eC0+c2VudGluZWwgJiYgdGFyZ2V0IDwgY3R4LT50c2VudGluZWwpCi0gICAgICAgIHx8IFJDU1NNSU5fSVNfTk1DSEFSKCpzb3VyY2UpKQotICAgICAgICBBQk9SVDsKLQotI3VuZGVmIENNQVRDSAotI3VuZGVmIFJFTUFUQ0gKLQotICAgICsrY3R4LT5hdF9ncm91cDsKLQotICAgICp0YXJnZXRfID0gdGFyZ2V0OwotICAgICpzb3VyY2VfID0gc291cmNlOwotfQotCi0KLS8qCi0gKiBTa2lwIHNwYWNlCi0gKi8KLXN0YXRpYyBjb25zdCByY2hhciAqCi1za2lwX3NwYWNlKGNvbnN0IHJjaGFyICpzb3VyY2UsIHJjc3NtaW5fY3R4X3QgKmN0eCkKLXsKLSAgICBjb25zdCByY2hhciAqYmVnaW4gPSBzb3VyY2U7Ci0gICAgaW50IHJlczsKLSAgICByY2hhciBjOwotCi0gICAgd2hpbGUgKHNvdXJjZSA8IGN0eC0+c2VudGluZWwpIHsKLSAgICAgICAgYyA9ICpzb3VyY2U7Ci0gICAgICAgIGlmIChSQ1NTTUlOX0lTX1NQQUNFKGMpKSB7Ci0gICAgICAgICAgICArK3NvdXJjZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGMgPT0gVSgnLycpKSB7Ci0gICAgICAgICAgICArK3NvdXJjZTsKLSAgICAgICAgICAgIGlmICghKHNvdXJjZSA8IGN0eC0+c2VudGluZWwgJiYgKnNvdXJjZSA9PSBVKCcqJykpKSB7Ci0gICAgICAgICAgICAgICAgLS1zb3VyY2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICArK3NvdXJjZTsKLSAgICAgICAgICAgIHJlcyA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoc291cmNlIDwgY3R4LT5zZW50aW5lbCkgewotICAgICAgICAgICAgICAgIGMgPSAqc291cmNlKys7Ci0gICAgICAgICAgICAgICAgaWYgKGMgIT0gVSgnKicpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoIShzb3VyY2UgPCBjdHgtPnNlbnRpbmVsKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJlZ2luOwotICAgICAgICAgICAgICAgIGlmICgqc291cmNlICE9IFUoJy8nKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAvKiBDb21tZW50IGNvbXBsZXRlICovCi0gICAgICAgICAgICAgICAgKytzb3VyY2U7Ci0gICAgICAgICAgICAgICAgcmVzID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcmVzKQotICAgICAgICAgICAgICAgIHJldHVybiBiZWdpbjsKLQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gc291cmNlOwotfQotCi0KLS8qCi0gKiBDb3B5IHNwYWNlCi0gKi8KLXN0YXRpYyB2b2lkCi1jb3B5X3NwYWNlKGNvbnN0IHJjaGFyICoqc291cmNlXywgcmNoYXIgKip0YXJnZXRfLCByY3NzbWluX2N0eF90ICpjdHgsCi0gICAgICAgICAgIG5lZWRfc3BhY2VfZmxhZyBuZWVkX3NwYWNlKQotewotICAgIGNvbnN0IHJjaGFyICpzb3VyY2UgPSAqc291cmNlXywgKmVuZCwgKmNvbW1lbnQ7Ci0gICAgcmNoYXIgKnRhcmdldCA9ICp0YXJnZXRfOwotICAgIGludCByZXM7Ci0gICAgcmNoYXIgYzsKLQotICAgIC0tc291cmNlOwotICAgIGlmIChuZWVkX3NwYWNlID09IE5FRURfU1BBQ0VfTUFZQkUKLSAgICAgICAgJiYgc291cmNlID4gY3R4LT5zdGFydAotICAgICAgICAmJiAhUkNTU01JTl9JU19QUkVfQ0hBUihzb3VyY2VbLTFdKQotICAgICAgICAmJiAoZW5kID0gc2tpcF9zcGFjZShzb3VyY2UsIGN0eCkpIDwgY3R4LT5zZW50aW5lbAotICAgICAgICAmJiAoIVJDU1NNSU5fSVNfUE9TVF9DSEFSKCplbmQpCi0gICAgICAgICAgICB8fCAoKmVuZCA9PSBVKCc6JykgJiYgIWN0eC0+aW5fcnVsZSAmJiAhY3R4LT5hdF9ncm91cCkpKSB7Ci0KLSAgICAgICAgaWYgKCEodGFyZ2V0IDwgY3R4LT50c2VudGluZWwpKQotICAgICAgICAgICAgQUJPUlQ7Ci0gICAgICAgICp0YXJnZXQrKyA9IFUoJyAnKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoc291cmNlIDwgY3R4LT5zZW50aW5lbCkgewotICAgICAgICBzd2l0Y2ggKGMgPSAqc291cmNlKSB7Ci0KLSAgICAgICAgLyogY29tbWVudCAqLwotICAgICAgICBjYXNlIFUoJy8nKToKLSAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2UrKzsKLSAgICAgICAgICAgIGlmICghKChzb3VyY2UgPCBjdHgtPnNlbnRpbmVsICYmICpzb3VyY2UgPT0gVSgnKicpKSkpIHsKLSAgICAgICAgICAgICAgICAtLXNvdXJjZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsrc291cmNlOwotICAgICAgICAgICAgcmVzID0gMDsKLSAgICAgICAgICAgIHdoaWxlIChzb3VyY2UgPCBjdHgtPnNlbnRpbmVsKSB7Ci0gICAgICAgICAgICAgICAgYyA9ICpzb3VyY2UrKzsKLSAgICAgICAgICAgICAgICBpZiAoYyAhPSBVKCcqJykpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmICghKHNvdXJjZSA8IGN0eC0+c2VudGluZWwpKQotICAgICAgICAgICAgICAgICAgICBBQk9SVDsKLSAgICAgICAgICAgICAgICBpZiAoKnNvdXJjZSAhPSBVKCcvJykpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgLyogQ29tbWVudCBjb21wbGV0ZSAqLwotICAgICAgICAgICAgICAgICsrc291cmNlOwotICAgICAgICAgICAgICAgIHJlcyA9IDE7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY3R4LT5rZWVwX2JhbmdfY29tbWVudHMgJiYgY29tbWVudFsyXSA9PSBVKCchJykpIHsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5pbl9tYWNpZTUgPSAoc291cmNlWy0zXSA9PSBVKCdcXCcpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb3B5KGNvbW1lbnQsIHNvdXJjZSwgJnRhcmdldCwgY3R4KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIEFCT1JUOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VbLTNdID09IFUoJ1xcJykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjdHgtPmluX21hY2llNSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFDT1BZX1BBVChtYWNpZTVfaW5pdCwgJnRhcmdldCwgY3R4KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQk9SVDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjdHgtPmluX21hY2llNSA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN0eC0+aW5fbWFjaWU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghQ09QWV9QQVQobWFjaWU1X2V4aXQsICZ0YXJnZXQsIGN0eCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBBQk9SVDsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5pbl9tYWNpZTUgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBlbHNlIGRvbid0IGNvcHkgYW55dGhpbmcgKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcmVzKQotICAgICAgICAgICAgICAgIEFCT1JUOwotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogc3BhY2UgKi8KLSAgICAgICAgY2FzZSBVKCcgJyk6IGNhc2UgVSgnXHQnKTogY2FzZSBVKCdccicpOiBjYXNlIFUoJ1xuJyk6IGNhc2UgVSgnXGYnKToKLSAgICAgICAgICAgICsrc291cmNlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAqc291cmNlXyA9IHNvdXJjZTsKLSAgICAqdGFyZ2V0XyA9IHRhcmdldDsKLX0KLQotCi0vKgotICogQ29weSBzcGFjZSBpZiBjb21tZW50Ci0gKi8KLXN0YXRpYyBpbnQKLWNvcHlfc3BhY2VfY29tbWVudChjb25zdCByY2hhciAqKnNvdXJjZV8sIHJjaGFyICoqdGFyZ2V0XywKLSAgICAgICAgICAgICAgICAgICByY3NzbWluX2N0eF90ICpjdHgsIG5lZWRfc3BhY2VfZmxhZyBuZWVkX3NwYWNlKQotewotICAgIGNvbnN0IHJjaGFyICpzb3VyY2UgPSAqc291cmNlXzsKLSAgICByY2hhciAqdGFyZ2V0ID0gKnRhcmdldF87Ci0KLSAgICBpZiAoc291cmNlIDwgY3R4LT5zZW50aW5lbCAmJiAqc291cmNlID09IFUoJyonKSkgewotICAgICAgICBjb3B5X3NwYWNlKHNvdXJjZV8sIHRhcmdldF8sIGN0eCwgbmVlZF9zcGFjZSk7Ci0gICAgICAgIGlmICgqc291cmNlXyA+IHNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoISh0YXJnZXQgPCBjdHgtPnRzZW50aW5lbCkpCi0gICAgICAgIFJBQk9SVCgtMSk7Ci0KLSAgICAqdGFyZ2V0KysgPSBzb3VyY2VbLTFdOwotCi0gICAgLyogKnNvdXJjZV8gPSBzb3VyY2U7IDwtLSB1bmNoYW5nZWQgKi8KLSAgICAqdGFyZ2V0XyA9IHRhcmdldDsKLQotICAgIHJldHVybiAtMTsKLX0KLQotCi0vKgotICogQ29weSBzcGFjZSBpZiBleGlzdHMKLSAqLwotc3RhdGljIGludAotY29weV9zcGFjZV9vcHRpb25hbChjb25zdCByY2hhciAqKnNvdXJjZV8sIHJjaGFyICoqdGFyZ2V0XywKLSAgICAgICAgICAgICAgICAgICAgcmNzc21pbl9jdHhfdCAqY3R4KQotewotICAgIGNvbnN0IHJjaGFyICpzb3VyY2UgPSAqc291cmNlXzsKLQotICAgIGlmICghKHNvdXJjZSA8IGN0eC0+c2VudGluZWwpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAoKnNvdXJjZSA9PSBVKCcvJykpIHsKLSAgICAgICAgKnNvdXJjZV8gPSBzb3VyY2UgKyAxOwotICAgICAgICByZXR1cm4gY29weV9zcGFjZV9jb21tZW50KHNvdXJjZV8sIHRhcmdldF8sIGN0eCwgTkVFRF9TUEFDRV9ORVZFUik7Ci0gICAgfQotICAgIGVsc2UgaWYgKFJDU1NNSU5fSVNfU1BBQ0UoKnNvdXJjZSkpIHsKLSAgICAgICAgKnNvdXJjZV8gPSBzb3VyY2UgKyAxOwotICAgICAgICBjb3B5X3NwYWNlKHNvdXJjZV8sIHRhcmdldF8sIGN0eCwgTkVFRF9TUEFDRV9ORVZFUik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotCi0vKgotICogQ29weSA6Zmlyc3QtbGluZXxsZXR0ZXIKLSAqLwotc3RhdGljIHZvaWQKLWNvcHlfZmlyc3QoY29uc3QgcmNoYXIgKipzb3VyY2VfLCByY2hhciAqKnRhcmdldF8sIHJjc3NtaW5fY3R4X3QgKmN0eCkKLXsKLSAgICBjb25zdCByY2hhciAqc291cmNlID0gKnNvdXJjZV8sICpuZXh0LCAqc291cmNlX2Zvcms7Ci0gICAgcmNoYXIgKnRhcmdldCA9ICp0YXJnZXRfLCAqdGFyZ2V0X2Zvcms7Ci0KLSAgICAqdGFyZ2V0KysgPSBVKCc6Jyk7Ci0gICAgKnRhcmdldF8gPSB0YXJnZXQ7Ci0KLSAgICBpZiAoIUlNQVRDSChmaXJzdCwgJnNvdXJjZSwgJnRhcmdldCwgY3R4KQotICAgICAgICB8fCAhKHNvdXJjZSA8IGN0eC0+c2VudGluZWwgJiYgdGFyZ2V0IDwgY3R4LT50c2VudGluZWwpKQotICAgICAgICBBQk9SVDsKLQotICAgIHNvdXJjZV9mb3JrID0gc291cmNlOwotICAgIHRhcmdldF9mb3JrID0gdGFyZ2V0OwotCi0gICAgaWYgKCFJTUFUQ0gobGluZSwgJnNvdXJjZSwgJnRhcmdldCwgY3R4KSkgewotICAgICAgICBzb3VyY2UgPSBzb3VyY2VfZm9yazsKLSAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0X2Zvcms7Ci0KLSAgICAgICAgaWYgKCFJTUFUQ0gobGV0dGVyLCAmc291cmNlLCAmdGFyZ2V0LCBjdHgpCi0gICAgICAgICAgICB8fCAhKHNvdXJjZSA8IGN0eC0+c2VudGluZWwgJiYgdGFyZ2V0IDwgY3R4LT50c2VudGluZWwpKQotICAgICAgICAgICAgQUJPUlQ7Ci0gICAgfQotCi0gICAgbmV4dCA9IHNraXBfc3BhY2Uoc291cmNlLCBjdHgpOwotICAgIGlmICghKG5leHQgPCBjdHgtPnNlbnRpbmVsICYmIHRhcmdldCA8IGN0eC0+dHNlbnRpbmVsCi0gICAgICAgICYmICgqbmV4dCA9PSBVKCd7JykgfHwgKm5leHQgPT0gVSgnLCcpKSkpCi0gICAgICAgIEFCT1JUOwotCi0gICAgKnRhcmdldCsrID0gVSgnICcpOwotICAgICp0YXJnZXRfID0gdGFyZ2V0OwotICAgICpzb3VyY2VfID0gc291cmNlOwotICAgICh2b2lkKWNvcHlfc3BhY2Vfb3B0aW9uYWwoc291cmNlXywgdGFyZ2V0XywgY3R4KTsKLX0KLQotCi0vKgotICogQ29weSBJRTcgaGFjawotICovCi1zdGF0aWMgdm9pZAotY29weV9pZTdoYWNrKGNvbnN0IHJjaGFyICoqc291cmNlXywgcmNoYXIgKip0YXJnZXRfLCByY3NzbWluX2N0eF90ICpjdHgpCi17Ci0gICAgY29uc3QgcmNoYXIgKnNvdXJjZSA9ICpzb3VyY2VfOwotICAgIHJjaGFyICp0YXJnZXQgPSAqdGFyZ2V0XzsKLQotICAgICp0YXJnZXQrKyA9IFUoJz4nKTsKLSAgICAqdGFyZ2V0XyA9IHRhcmdldDsKLQotICAgIGlmIChjdHgtPmluX3J1bGUgfHwgY3R4LT5hdF9ncm91cCkKLSAgICAgICAgcmV0dXJuOyAvKiBhYm9ydCAqLwotCi0gICAgaWYgKCFNQVRDSChpZTcsICZzb3VyY2UsICZ0YXJnZXQsIGN0eCkpCi0gICAgICAgIEFCT1JUOwotCi0gICAgY3R4LT5pbl9tYWNpZTUgPSAwOwotCi0gICAgKnRhcmdldF8gPSB0YXJnZXQ7Ci0gICAgKnNvdXJjZV8gPSBzb3VyY2U7Ci0KLSAgICAodm9pZCljb3B5X3NwYWNlX29wdGlvbmFsKHNvdXJjZV8sIHRhcmdldF8sIGN0eCk7Ci19Ci0KLQotLyoKLSAqIENvcHkgc2VtaWNvbG9uOyBtaXNzIG91dCBkdXBsaWNhdGVzIG9yIGV2ZW4gdGhpcyBvbmUgKGJlZm9yZSAnfScpCi0gKi8KLXN0YXRpYyB2b2lkCi1jb3B5X3NlbWljb2xvbihjb25zdCByY2hhciAqKnNvdXJjZV8sIHJjaGFyICoqdGFyZ2V0XywgcmNzc21pbl9jdHhfdCAqY3R4KQotewotICAgIGNvbnN0IHJjaGFyICpzb3VyY2UgPSAqc291cmNlXywgKmJlZ2luLCAqZW5kOwotICAgIHJjaGFyICp0YXJnZXQgPSAqdGFyZ2V0XzsKLQotICAgIGJlZ2luID0gc291cmNlOwotICAgIHdoaWxlIChzb3VyY2UgPCBjdHgtPnNlbnRpbmVsKSB7Ci0gICAgICAgIGVuZCA9IHNraXBfc3BhY2Uoc291cmNlLCBjdHgpOwotICAgICAgICBpZiAoIShlbmQgPCBjdHgtPnNlbnRpbmVsKSkgewotICAgICAgICAgICAgaWYgKCEodGFyZ2V0IDwgY3R4LT50c2VudGluZWwpKQotICAgICAgICAgICAgICAgIEFCT1JUOwotICAgICAgICAgICAgKnRhcmdldCsrID0gVSgnOycpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoICgqZW5kKSB7Ci0gICAgICAgIGNhc2UgVSgnOycpOgotICAgICAgICAgICAgc291cmNlID0gZW5kICsgMTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNhc2UgVSgnfScpOgotICAgICAgICAgICAgaWYgKGN0eC0+aW5fcnVsZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoISh0YXJnZXQgPCBjdHgtPnRzZW50aW5lbCkpCi0gICAgICAgICAgICAgICAgQUJPUlQ7Ci0gICAgICAgICAgICAqdGFyZ2V0KysgPSBVKCc7Jyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHNvdXJjZSA9IGJlZ2luOwotICAgICp0YXJnZXRfID0gdGFyZ2V0OwotICAgIHdoaWxlIChzb3VyY2UgPCBjdHgtPnNlbnRpbmVsKSB7Ci0gICAgICAgIGlmICgqc291cmNlID09IFUoJzsnKSkgewotICAgICAgICAgICAgKytzb3VyY2U7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb3B5X3NwYWNlX29wdGlvbmFsKCZzb3VyY2UsIHRhcmdldF8sIGN0eCkgPT0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgICpzb3VyY2VfID0gc291cmNlOwotfQotCi0KLS8qCi0gKiBNYWluIGZ1bmN0aW9uCi0gKgotICogVGhlIHJldHVybiB2YWx1ZSBkZXRlcm1pbmVzIHRoZSByZXN1bHQgbGVuZ3RoIChrZXB0IGluIHRoZSB0YXJnZXQgYnVmZmVyKS4KLSAqIEhvd2V2ZXIsIGlmIHRoZSB0YXJnZXQgYnVmZmVyIGlzIHRvbyBzbWFsbCwgdGhlIHJldHVybiB2YWx1ZSBpcyBncmVhdGVyCi0gKiB0aGFuIHRsZW5ndGguIFRoZSBkaWZmZXJlbmNlIHRvIHRsZW5ndGggaXMgdGhlIG51bWJlciBvZiB1bmNvbnN1bWVkIHNvdXJjZQotICogY2hhcmFjdGVycyBhdCB0aGUgdGltZSB0aGUgYnVmZmVyIHdhcyBmdWxsLiBJbiB0aGlzIGNhc2UgeW91IHNob3VsZCByZXNpemUKLSAqIHRoZSB0YXJnZXQgYnVmZmVyIHRvIHRoZSByZXR1cm4gdmFsdWUgYW5kIGNhbGwgcmNzc21pbiBhZ2Fpbi4gUmVwZWF0IGFzCi0gKiBvZnRlbiBhcyBuZWVkZWQuCi0gKi8KLXN0YXRpYyBQeV9zc2l6ZV90Ci1yY3NzbWluKGNvbnN0IHJjaGFyICpzb3VyY2UsIHJjaGFyICp0YXJnZXQsIFB5X3NzaXplX3Qgc2xlbmd0aCwKLSAgICAgICAgUHlfc3NpemVfdCB0bGVuZ3RoLCBpbnQga2VlcF9iYW5nX2NvbW1lbnRzKQotewotICAgIHJjc3NtaW5fY3R4X3QgY3R4XywgKmN0eCA9ICZjdHhfOwotICAgIGNvbnN0IHJjaGFyICp0c3RhcnQgPSB0YXJnZXQ7Ci0gICAgcmNoYXIgYzsKLQotICAgIGN0eC0+c3RhcnQgPSBzb3VyY2U7Ci0gICAgY3R4LT5zZW50aW5lbCA9IHNvdXJjZSArIHNsZW5ndGg7Ci0gICAgY3R4LT50c2VudGluZWwgPSB0YXJnZXQgKyB0bGVuZ3RoOwotICAgIGN0eC0+YXRfZ3JvdXAgPSAwOwotICAgIGN0eC0+aW5fbWFjaWU1ID0gMDsKLSAgICBjdHgtPmluX3J1bGUgPSAwOwotICAgIGN0eC0+a2VlcF9iYW5nX2NvbW1lbnRzID0ga2VlcF9iYW5nX2NvbW1lbnRzOwotCi0gICAgd2hpbGUgKHNvdXJjZSA8IGN0eC0+c2VudGluZWwgJiYgdGFyZ2V0IDwgY3R4LT50c2VudGluZWwpIHsKLSAgICAgICAgYyA9ICpzb3VyY2UrKzsKLSAgICAgICAgaWYgKFJDU1NNSU5fSVNfRFVMTChjKSkgewotICAgICAgICAgICAgKnRhcmdldCsrID0gYzsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKFJDU1NNSU5fSVNfU1BBQ0UoYykpIHsKLSAgICAgICAgICAgIGNvcHlfc3BhY2UoJnNvdXJjZSwgJnRhcmdldCwgY3R4LCBORUVEX1NQQUNFX01BWUJFKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0KLSAgICAgICAgLyogRXNjYXBlICovCi0gICAgICAgIGNhc2UgVSgnXFwnKToKLSAgICAgICAgICAgIGNvcHlfZXNjYXBlKCZzb3VyY2UsICZ0YXJnZXQsIGN0eCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvKiBTdHJpbmcgKi8KLSAgICAgICAgY2FzZSBVKCciJyk6IGNhc2UgVSgnXCcnKToKLSAgICAgICAgICAgIGNvcHlfc3RyaW5nKCZzb3VyY2UsICZ0YXJnZXQsIGN0eCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvKiBVUkwgKi8KLSAgICAgICAgY2FzZSBVKCd1Jyk6Ci0gICAgICAgICAgICBjb3B5X3VybCgmc291cmNlLCAmdGFyZ2V0LCBjdHgpOwotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogSUU3aGFjayAqLwotICAgICAgICBjYXNlIFUoJz4nKToKLSAgICAgICAgICAgIGNvcHlfaWU3aGFjaygmc291cmNlLCAmdGFyZ2V0LCBjdHgpOwotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogQC1ncm91cCAqLwotICAgICAgICBjYXNlIFUoJ0AnKToKLSAgICAgICAgICAgIGNvcHlfYXRfZ3JvdXAoJnNvdXJjZSwgJnRhcmdldCwgY3R4KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8qIDsgKi8KLSAgICAgICAgY2FzZSBVKCc7Jyk6Ci0gICAgICAgICAgICBjb3B5X3NlbWljb2xvbigmc291cmNlLCAmdGFyZ2V0LCBjdHgpOwotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogOmZpcnN0LWxpbmV8bGV0dGVyIGZvbGxvd2VkIGJ5IFt7LF0gKi8KLSAgICAgICAgLyogKGFwcGFyZW50bHkgbmVlZGVkIGZvciBJRTYpICovCi0gICAgICAgIGNhc2UgVSgnOicpOgotICAgICAgICAgICAgY29weV9maXJzdCgmc291cmNlLCAmdGFyZ2V0LCBjdHgpOwotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogeyAqLwotICAgICAgICBjYXNlIFUoJ3snKToKLSAgICAgICAgICAgIGlmIChjdHgtPmF0X2dyb3VwKQotICAgICAgICAgICAgICAgIC0tY3R4LT5hdF9ncm91cDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICArK2N0eC0+aW5fcnVsZTsKLSAgICAgICAgICAgICp0YXJnZXQrKyA9IGM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvKiB9ICovCi0gICAgICAgIGNhc2UgVSgnfScpOgotICAgICAgICAgICAgaWYgKGN0eC0+aW5fcnVsZSkKLSAgICAgICAgICAgICAgICAtLWN0eC0+aW5fcnVsZTsKLSAgICAgICAgICAgICp0YXJnZXQrKyA9IGM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvKiBzcGFjZSBzdGFydGluZyB3aXRoIGNvbW1lbnQgKi8KLSAgICAgICAgY2FzZSBVKCcvJyk6Ci0gICAgICAgICAgICAodm9pZCljb3B5X3NwYWNlX2NvbW1lbnQoJnNvdXJjZSwgJnRhcmdldCwgY3R4LCBORUVEX1NQQUNFX01BWUJFKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8qIEZhbGxiYWNrOiBjb3B5IGNoYXJhY3Rlci4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS4gU2hvdWxkIG5vdCBiZQotICAgICAgICAgKiByZWFjaGVkLCB0aG91Z2ggKi8KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICp0YXJnZXQrKyA9IGM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybgotICAgICAgICAoUHlfc3NpemVfdCkodGFyZ2V0IC0gdHN0YXJ0KSArIChQeV9zc2l6ZV90KShjdHgtPnNlbnRpbmVsIC0gc291cmNlKTsKLX0KLQotCi1QeURvY19TVFJWQVIocmNzc21pbl9jc3NtaW5fX2RvY19fLAotImNzc21pbihzdHlsZSwga2VlcF9iYW5nX2NvbW1lbnRzPUZhbHNlKVxuXAotXG5cCi1NaW5pZnkgQ1NTLlxuXAotXG5cCi06Tm90ZTogVGhpcyBpcyBhIGhhbmQgY3JhZnRlZCBDIGltcGxlbWVudGF0aW9uIGJ1aWx0IG9uIHRoZSByZWdleFxuXAotICAgICAgIHNlbWFudGljcy5cblwKLVxuXAotOlBhcmFtZXRlcnM6XG5cCi0gIGBzdHlsZWAgOiBgYHN0cmBgXG5cCi0gICAgQ1NTIHRvIG1pbmlmeVxuXAotXG5cCi06UmV0dXJuOiBNaW5pZmllZCBzdHlsZVxuXAotOlJ0eXBlOiBgYHN0cmBgIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1yY3NzbWluX2Nzc21pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQotewotICAgIFB5T2JqZWN0ICpzdHlsZSwgKmtlZXBfYmFuZ19jb21tZW50c18gPSBOVUxMLCAqcmVzdWx0OwotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic3R5bGUiLCAia2VlcF9iYW5nX2NvbW1lbnRzIiwgTlVMTH07Ci0gICAgUHlfc3NpemVfdCBybGVuZ3RoLCBzbGVuZ3RoLCBsZW5ndGg7Ci0gICAgaW50IGtlZXBfYmFuZ19jb21tZW50czsKLSNpZmRlZiBFWFQyCi0gICAgaW50IHVuaTsKLSNkZWZpbmUgVU9CSiAiTyIKLSNlbmRpZgotI2lmZGVmIEVYVDMKLSNkZWZpbmUgVU9CSiAiVSIKLSNlbmRpZgotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgVU9CSiAifE8iLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlLCAma2VlcF9iYW5nX2NvbW1lbnRzXykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKCFrZWVwX2JhbmdfY29tbWVudHNfKQotICAgICAgICBrZWVwX2JhbmdfY29tbWVudHMgPSAwOwotICAgIGVsc2UgewotICAgICAgICBrZWVwX2JhbmdfY29tbWVudHMgPSBQeU9iamVjdF9Jc1RydWUoa2VlcF9iYW5nX2NvbW1lbnRzXyk7Ci0gICAgICAgIGlmIChrZWVwX2JhbmdfY29tbWVudHMgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSNpZmRlZiBFWFQyCi0gICAgaWYgKFB5VW5pY29kZV9DaGVjayhzdHlsZSkpIHsKLSAgICAgICAgaWYgKCEoc3R5bGUgPSBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nKHN0eWxlKSkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgdW5pID0gMTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghKHN0eWxlID0gUHlPYmplY3RfU3RyKHN0eWxlKSkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgdW5pID0gMDsKLSAgICB9Ci0jZW5kaWYKLQotI2lmZGVmIEVYVDMKLSAgICBQeV9JTkNSRUYoc3R5bGUpOwotI2RlZmluZSBQeVN0cmluZ19HRVRfU0laRSBQeVVuaWNvZGVfR0VUX1NJWkUKLSNkZWZpbmUgUHlTdHJpbmdfQVNfU1RSSU5HIFB5VW5pY29kZV9BU19VTklDT0RFCi0jZGVmaW5lIF9QeVN0cmluZ19SZXNpemUgUHlVbmljb2RlX1Jlc2l6ZQotI2RlZmluZSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUKLSNlbmRpZgotCi0gICAgcmxlbmd0aCA9IHNsZW5ndGggPSBQeVN0cmluZ19HRVRfU0laRShzdHlsZSk7Ci0KLWFnYWluOgotICAgIGlmICghKHJlc3VsdCA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHJsZW5ndGgpKSkgewotICAgICAgICBQeV9ERUNSRUYoc3R5bGUpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGxlbmd0aCA9IHJjc3NtaW4oKHJjaGFyICopUHlTdHJpbmdfQVNfU1RSSU5HKHN0eWxlKSwKLSAgICAgICAgICAgICAgICAgICAgIChyY2hhciAqKVB5U3RyaW5nX0FTX1NUUklORyhyZXN1bHQpLAotICAgICAgICAgICAgICAgICAgICAgc2xlbmd0aCwgcmxlbmd0aCwga2VlcF9iYW5nX2NvbW1lbnRzKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKGxlbmd0aCA+IHJsZW5ndGgpIHsKLSAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7Ci0gICAgICAgIHJsZW5ndGggPSBsZW5ndGg7Ci0gICAgICAgIGdvdG8gYWdhaW47Ci0gICAgfQotCi0gICAgUHlfREVDUkVGKHN0eWxlKTsKLSAgICBpZiAobGVuZ3RoIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmIChsZW5ndGggIT0gcmxlbmd0aCAmJiBfUHlTdHJpbmdfUmVzaXplKCZyZXN1bHQsIGxlbmd0aCkgPT0gLTEpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0jaWZkZWYgRVhUMgotICAgIGlmICh1bmkpIHsKLSAgICAgICAgc3R5bGUgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChQeVN0cmluZ19BU19TVFJJTkcocmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19HRVRfU0laRShyZXN1bHQpLCAic3RyaWN0Iik7Ci0gICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgICAgICBpZiAoIXN0eWxlKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJlc3VsdCA9IHN0eWxlOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTiBNT0RVTEUgREVGSU5JVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotRVhUX01FVEhPRFMgPSB7Ci0gICAgeyJjc3NtaW4iLAotICAgICAgICAoUHlDRnVuY3Rpb24pcmNzc21pbl9jc3NtaW4sIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgIHJjc3NtaW5fY3NzbWluX19kb2NfX30sCi0KLSAgICB7TlVMTH0gIC8qIFNlbnRpbmVsICovCi19OwotCi1QeURvY19TVFJWQVIoRVhUX0RPQ1NfVkFSLAotIkMgaW1wbGVtZW50YXRpb24gb2YgcmNzc21pblxuXAotPT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cCi1cblwKLUMgaW1wbGVtZW50YXRpb24gb2YgcmNzc21pbi4iKTsKLQotCi1FWFRfREVGSU5FKEVYVF9NT0RVTEVfTkFNRSwgRVhUX01FVEhPRFNfVkFSLCBFWFRfRE9DU19WQVIpOwotCi1FWFRfSU5JVF9GVU5DIHsKLSAgICBQeU9iamVjdCAqbTsKLQotICAgIC8qIENyZWF0ZSB0aGUgbW9kdWxlIGFuZCBwb3B1bGF0ZSBzdHVmZiAqLwotICAgIGlmICghKG0gPSBFWFRfQ1JFQVRFKCZFWFRfREVGSU5FX1ZBUikpKQotICAgICAgICBFWFRfSU5JVF9FUlJPUihOVUxMKTsKLQotICAgIEVYVF9BRERfVU5JQ09ERShtLCAiX19hdXRob3JfXyIsICJBbmRyXHhlOSBNYWxvIiwgImxhdGluLTEiKTsKLSAgICBFWFRfQUREX1NUUklORyhtLCAiX19kb2Nmb3JtYXRfXyIsICJyZXN0cnVjdHVyZWR0ZXh0IGVuIik7Ci0KLSAgICBFWFRfSU5JVF9SRVRVUk4obSk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EIE1PRFVMRSBERUZJTklUSU9OIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9yY3NzbWluLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Jjc3NtaW4ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMWNlZmMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Jjc3NtaW4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNzQgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIC0qLSBjb2Rpbmc6IGFzY2lpIC0qLQotciIiIgotPT09PT09PT09PT09PT0KLSBDU1MgTWluaWZpZXIKLT09PT09PT09PT09PT09Ci0KLUNTUyBNaW5pZmllci4KLQotVGhlIG1pbmlmaWVyIGlzIGJhc2VkIG9uIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGBZVUkgY29tcHJlc3NvcmBfXFwsIHdoaWNoCi1pdHNlbGYgaXMgYmFzZWQgb24gYHRoZSBydWxlIGxpc3QgYnkgSXNhYWMgU2NobHVldGVyYF9cXC4KLQotOkNvcHlyaWdodDoKLQotIENvcHlyaWdodCAyMDExIC0gMjAxNAotIEFuZHJceGU5IE1hbG8gb3IgaGlzIGxpY2Vuc29ycywgYXMgYXBwbGljYWJsZQotCi06TGljZW5zZToKLQotIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotVGhpcyBtb2R1bGUgaXMgYSByZS1pbXBsZW1lbnRhdGlvbiBhaW1pbmcgZm9yIHNwZWVkIGluc3RlYWQgb2YgbWF4aW11bQotY29tcHJlc3Npb24sIHNvIGl0IGNhbiBiZSB1c2VkIGF0IHJ1bnRpbWUgKHJhdGhlciB0aGFuIGR1cmluZyBhIHByZXByb2Nlc3NpbmcKLXN0ZXApLiBSQ1NTbWluIGRvZXMgc3ludGFjdGljYWwgY29tcHJlc3Npb24gb25seSAocmVtb3Zpbmcgc3BhY2VzLCBjb21tZW50cwotYW5kIHBvc3NpYmx5IHNlbWljb2xvbnMpLiBJdCBkb2VzIG5vdCBwcm92aWRlIHNlbWFudGljIGNvbXByZXNzaW9uIChsaWtlCi1yZW1vdmluZyBlbXB0eSBibG9ja3MsIGNvbGxhcHNpbmcgcmVkdW5kYW50IHByb3BlcnRpZXMgZXRjKS4gSXQgZG9lcywgaG93ZXZlciwKLXN1cHBvcnQgdmFyaW91cyBDU1MgaGFja3MgKGJ5IGtlZXBpbmcgdGhlbSB3b3JraW5nIGFzIGludGVuZGVkKS4KLQotSGVyZSdzIGEgZmVhdHVyZSBsaXN0OgotCi0tIFN0cmluZ3MgYXJlIGtlcHQsIGV4Y2VwdCB0aGF0IGVzY2FwZWQgbmV3bGluZXMgYXJlIHN0cmlwcGVkCi0tIFNwYWNlL0NvbW1lbnRzIGJlZm9yZSB0aGUgdmVyeSBlbmQgb3IgYmVmb3JlIHZhcmlvdXMgY2hhcmFjdGVycyBhcmUKLSAgc3RyaXBwZWQ6IGBgOnt9KTs9PitdLCFgYCAoVGhlIGNvbG9uIChgYDpgYCkgaXMgYSBzcGVjaWFsIGNhc2UsIGEgc2luZ2xlCi0gIHNwYWNlIGlzIGtlcHQgaWYgaXQncyBvdXRzaWRlIGEgcnVsZXNldC4pCi0tIFNwYWNlL0NvbW1lbnRzIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvciBhZnRlciB2YXJpb3VzIGNoYXJhY3RlcnMgYXJlCi0gIHN0cmlwcGVkOiBgYHt9KD06PitbLCFgYAotLSBPcHRpb25hbCBzcGFjZSBhZnRlciB1bmljb2RlIGVzY2FwZXMgaXMga2VwdCwgcmVzcC4gcmVwbGFjZWQgYnkgYSBzaW1wbGUKLSAgc3BhY2UKLS0gd2hpdGVzcGFjZXMgaW5zaWRlIGBgdXJsKClgYCBkZWZpbml0aW9ucyBhcmUgc3RyaXBwZWQKLS0gQ29tbWVudHMgc3RhcnRpbmcgd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrIChgYCFgYCkgY2FuIGJlIGtlcHQgb3B0aW9uYWxseS4KLS0gQWxsIG90aGVyIGNvbW1lbnRzIGFuZC9vciB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkIGJ5IGEgc2luZ2xlCi0gIHNwYWNlLgotLSBNdWx0aXBsZSBjb25zZWN1dGl2ZSBzZW1pY29sb25zIGFyZSByZWR1Y2VkIHRvIG9uZQotLSBUaGUgbGFzdCBzZW1pY29sb24gd2l0aGluIGEgcnVsZXNldCBpcyBzdHJpcHBlZAotLSBDU1MgSGFja3Mgc3VwcG9ydGVkOgotCi0gIC0gSUU3IGhhY2sgKGBgPi8qKi9gYCkKLSAgLSBNYWMtSUU1IGhhY2sgKGBgLypcXCovLi4uLyoqL2BgKQotICAtIFRoZSBib3htb2RlbGhhY2sgaXMgc3VwcG9ydGVkIG5hdHVyYWxseSBiZWNhdXNlIGl0IHJlbGllcyBvbiB2YWxpZCBDU1MyCi0gICAgc3RyaW5ncwotICAtIEJldHdlZW4gYGA6Zmlyc3QtbGluZWBgIGFuZCB0aGUgZm9sbG93aW5nIGNvbW1hIG9yIGN1cmx5IGJyYWNlIGEgc3BhY2UgaXMKLSAgICBpbnNlcnRlZC4gKGFwcGFyZW50bHkgaXQncyBuZWVkZWQgZm9yIElFNikKLSAgLSBTYW1lIGZvciBgYDpmaXJzdC1sZXR0ZXJgYAotCi1yY3NzbWluLmMgaXMgYSByZWltcGxlbWVudGF0aW9uIG9mIHJjc3NtaW4ucHkgaW4gQyBhbmQgaW1wcm92ZXMgcnVudGltZSB1cCB0bwotZmFjdG9yIDEwMCBvciBzbyAoZGVwZW5kaW5nIG9uIHRoZSBpbnB1dCkuIGRvY3MvQkVOQ0hNQVJLUyBpbiB0aGUgc291cmNlCi1kaXN0cmlidXRpb24gY29udGFpbnMgdGhlIGRldGFpbHMuCi0KLUJvdGggcHl0aG9uIDIgKD49IDIuNCkgYW5kIHB5dGhvbiAzIGFyZSBzdXBwb3J0ZWQuCi0KLS4uIF9ZVUkgY29tcHJlc3NvcjogaHR0cHM6Ly9naXRodWIuY29tL3l1aS95dWljb21wcmVzc29yLwotCi0uLiBfdGhlIHJ1bGUgbGlzdCBieSBJc2FhYyBTY2hsdWV0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3MvY3NzbWluLwotIiIiCi1pZiBfX2RvY19fOgotICAgICMgcHlsaW50OiBkaXNhYmxlID0gVzA2MjIKLSAgICBfX2RvY19fID0gX19kb2NfXy5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpCi1fX2F1dGhvcl9fID0gciJBbmRyXHhlOSBNYWxvIi5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpCi1fX2RvY2Zvcm1hdF9fID0gInJlc3RydWN0dXJlZHRleHQgZW4iCi1fX2xpY2Vuc2VfXyA9ICJBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAiCi1fX3ZlcnNpb25fXyA9ICcxLjAuNScKLV9fYWxsX18gPSBbJ2Nzc21pbiddCi0KLWltcG9ydCByZSBhcyBfcmUKLQotCi1kZWYgX21ha2VfY3NzbWluKHB5dGhvbl9vbmx5PUZhbHNlKToKLSAgICAiIiIKLSAgICBHZW5lcmF0ZSBDU1MgbWluaWZpZXIuCi0KLSAgICA6UGFyYW1ldGVyczoKLSAgICAgIGBweXRob25fb25seWAgOiBgYGJvb2xgYAotICAgICAgICBVc2Ugb25seSB0aGUgcHl0aG9uIHZhcmlhbnQuIElmIHRydWUsIHRoZSBjIGV4dGVuc2lvbiBpcyBub3QgZXZlbgotICAgICAgICB0cmllZCB0byBiZSBsb2FkZWQuCi0KLSAgICA6UmV0dXJuOiBNaW5pZmllcgotICAgIDpSdHlwZTogYGBjYWxsYWJsZWBgCi0gICAgIiIiCi0gICAgIyBweWxpbnQ6IGRpc2FibGUgPSBSMDkxMiwgUjA5MTQsIFcwNjEyCi0KLSAgICBpZiBub3QgcHl0aG9uX29ubHk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGltcG9ydCBfcmNzc21pbgotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gX3Jjc3NtaW4uY3NzbWluCi0KLSAgICBubCA9IHInKD86W1xuXGZdfFxyXG4/KScgICMgcHlsaW50OiBkaXNhYmxlID0gQzAxMDMKLSAgICBzcGFjZWNoYXIgPSByJ1tcclxuXGZcMDQwXHRdJwotCi0gICAgdW5pY29kZWQgPSByJ1swLTlhLWZBLUZdezEsNn0oPzpbXDA0MFxuXHRcZl18XHJcbj8pPycKLSAgICBlc2NhcGVkID0gcidbXlxuXHJcZjAtOWEtZkEtRl0nCi0gICAgZXNjYXBlID0gcicoPzpcXCg/OiUodW5pY29kZWQpc3wlKGVzY2FwZWQpcykpJyAlIGxvY2FscygpCi0KLSAgICBubWNoYXIgPSByJ1teXDAwMC1cMDU0XDA1NlwwNTdcMDcyLVwxMDBcMTMzLVwxMzZcMTQwXDE3My1cMTc3XScKLSAgICAjbm1zdGFydCA9IHInW15cMDAwLVwxMDBcMTMzLVwxMzZcMTQwXDE3My1cMTc3XScKLSAgICAjaWRlbnQgPSAocicoPzonCi0gICAgIyAgICByJy0/KD86JShubXN0YXJ0KXN8JShlc2NhcGUpcyklKG5tY2hhcilzKig/OiUoZXNjYXBlKXMlKG5tY2hhcilzKikqJwotICAgICNyJyknKSAlIGxvY2FscygpCi0KLSAgICBjb21tZW50ID0gcicoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pJwotCi0gICAgIyBvbmx5IGZvciBzcGVjaWZpYyBwdXJwb3Nlcy4gVGhlIGJhbmcgaXMgZ3JvdXBlZDoKLSAgICBfYmFuZ19jb21tZW50ID0gcicoPzovXCooIT8pW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKScKLQotICAgIHN0cmluZzEgPSBcCi0gICAgICAgIHInKD86XDA0N1teXDA0N1xcXHJcblxmXSooPzpcXFteXHJcblxmXVteXDA0N1xcXHJcblxmXSopKlwwNDcpJwotICAgIHN0cmluZzIgPSByJyg/OiJbXiJcXFxyXG5cZl0qKD86XFxbXlxyXG5cZl1bXiJcXFxyXG5cZl0qKSoiKScKLSAgICBzdHJpbmdzID0gcicoPzolc3wlcyknICUgKHN0cmluZzEsIHN0cmluZzIpCi0KLSAgICBubF9zdHJpbmcxID0gXAotICAgICAgICByJyg/OlwwNDdbXlwwNDdcXFxyXG5cZl0qKD86XFwoPzpbXlxyXXxcclxuPylbXlwwNDdcXFxyXG5cZl0qKSpcMDQ3KScKLSAgICBubF9zdHJpbmcyID0gcicoPzoiW14iXFxcclxuXGZdKig/OlxcKD86W15ccl18XHJcbj8pW14iXFxcclxuXGZdKikqIiknCi0gICAgbmxfc3RyaW5ncyA9IHInKD86JXN8JXMpJyAlIChubF9zdHJpbmcxLCBubF9zdHJpbmcyKQotCi0gICAgdXJpX25sX3N0cmluZzEgPSByJyg/OlwwNDdbXlwwNDdcXF0qKD86XFwoPzpbXlxyXXxcclxuPylbXlwwNDdcXF0qKSpcMDQ3KScKLSAgICB1cmlfbmxfc3RyaW5nMiA9IHInKD86IlteIlxcXSooPzpcXCg/OlteXHJdfFxyXG4/KVteIlxcXSopKiIpJwotICAgIHVyaV9ubF9zdHJpbmdzID0gcicoPzolc3wlcyknICUgKHVyaV9ubF9zdHJpbmcxLCB1cmlfbmxfc3RyaW5nMikKLQotICAgIG5sX2VzY2FwZWQgPSByJyg/OlxcJShubClzKScgJSBsb2NhbHMoKQotCi0gICAgc3BhY2UgPSByJyg/OiUoc3BhY2VjaGFyKXN8JShjb21tZW50KXMpJyAlIGxvY2FscygpCi0KLSAgICBpZTdoYWNrID0gcicoPzo+L1wqXCovKScKLQotICAgIHVyaSA9IChyJyg/OicKLSAgICAgICAgIyBub3FhIHB5bGludDogZGlzYWJsZSA9IEMwMzMwCi0gICAgICAgIHInKD86W15cMDAwLVwwNDAiXDA0NygpXFxcMTc3XSonCi0gICAgICAgICAgICByJyg/OiUoZXNjYXBlKXNbXlwwMDAtXDA0MCJcMDQ3KClcXFwxNzddKikqKScKLSAgICAgICAgcicoPzonCi0gICAgICAgICAgICByJyg/OiUoc3BhY2VjaGFyKXMrfCUobmxfZXNjYXBlZClzKyknCi0gICAgICAgICAgICByJyg/OicKLSAgICAgICAgICAgICAgICByJyg/OlteXDAwMC1cMDQwIlwwNDcoKVxcXDE3N118JShlc2NhcGUpc3wlKG5sX2VzY2FwZWQpcyknCi0gICAgICAgICAgICAgICAgcidbXlwwMDAtXDA0MCJcMDQ3KClcXFwxNzddKicKLSAgICAgICAgICAgICAgICByJyg/OiUoZXNjYXBlKXNbXlwwMDAtXDA0MCJcMDQ3KClcXFwxNzddKikqJwotICAgICAgICAgICAgcicpKycKLSAgICAgICAgcicpKicKLSAgICByJyknKSAlIGxvY2FscygpCi0KLSAgICBubF91bmVzY19zdWIgPSBfcmUuY29tcGlsZShubF9lc2NhcGVkKS5zdWIKLQotICAgIHVyaV9zcGFjZV9zdWIgPSBfcmUuY29tcGlsZSgoCi0gICAgICAgIHInKCUoZXNjYXBlKXMrKXwlKHNwYWNlY2hhcilzK3wlKG5sX2VzY2FwZWQpcysnCi0gICAgKSAlIGxvY2FscygpKS5zdWIKLSAgICB1cmlfc3BhY2Vfc3ViYmVyID0gbGFtYmRhIG06IG0uZ3JvdXBzKClbMF0gb3IgJycKLQotICAgIHNwYWNlX3N1Yl9zaW1wbGUgPSBfcmUuY29tcGlsZSgoCi0gICAgICAgIHInW1xyXG5cZlwwNDBcdDtdK3woJShjb21tZW50KXMrKScKLSAgICApICUgbG9jYWxzKCkpLnN1YgotICAgIHNwYWNlX3N1Yl9iYW5nZWQgPSBfcmUuY29tcGlsZSgoCi0gICAgICAgIHInW1xyXG5cZlwwNDBcdDtdK3woJShfYmFuZ19jb21tZW50KXMrKScKLSAgICApICUgbG9jYWxzKCkpLnN1YgotCi0gICAgcG9zdF9lc2Nfc3ViID0gX3JlLmNvbXBpbGUocidbXHJcblxmXHRdKycpLnN1YgotCi0gICAgbWFpbl9zdWIgPSBfcmUuY29tcGlsZSgoCi0gICAgICAgICMgbm9xYSBweWxpbnQ6IGRpc2FibGUgPSBDMDMzMAotICAgICAgICByJyhbXlxcIlwwNDd1PkBcclxuXGZcMDQwXHQvOzp7fV0rKScKLSAgICAgICAgcid8KD88PVt7fSg9Oj4rWywhXSkoJShzcGFjZSlzKyknCi0gICAgICAgIHInfF4oJShzcGFjZSlzKyknCi0gICAgICAgIHInfCglKHNwYWNlKXMrKSg/PSgoWzp7fSk7PT4rXF0sIV0pfCQpPyknCi0gICAgICAgIHInfDsoJShzcGFjZSlzKig/OjslKHNwYWNlKXMqKSopKD89KFx9KT8pJwotICAgICAgICByJ3woXHspJwotICAgICAgICByJ3woXH0pJwotICAgICAgICByJ3woJShzdHJpbmdzKXMpJwotICAgICAgICByJ3woPzwhJShubWNoYXIpcyl1cmxcKCUoc3BhY2VjaGFyKXMqKCcKLSAgICAgICAgICAgICAgICByJyUodXJpX25sX3N0cmluZ3MpcycKLSAgICAgICAgICAgICAgICByJ3wlKHVyaSlzJwotICAgICAgICAgICAgcicpJShzcGFjZWNoYXIpcypcKScKLSAgICAgICAgcid8KEAoPzonCi0gICAgICAgICAgICAgIHInW21NXVtlRV1bZERdW2lJXVthQV0nCi0gICAgICAgICAgICAgIHInfFtzU11bdVVdW3BQXVtwUF1bb09dW3JSXVt0VF1bc1NdJwotICAgICAgICAgICAgICByJ3xbZERdW29PXVtjQ11bdVVdW21NXVtlRV1bbk5dW3RUXScKLSAgICAgICAgICAgICAgcid8KD86LSg/OicKLSAgICAgICAgICAgICAgICAgIHInW3dXXVtlRV1bYkJdW2tLXVtpSV1bdFRdfFttTV1bb09dW3paXXxbb09dfFttTV1bc1NdJwotICAgICAgICAgICAgICAgIHInKS0pPycKLSAgICAgICAgICAgICAgICByJ1trS11bZUVdW3lZXVtmRl1bclJdW2FBXVttTV1bZUVdW3NTXScKLSAgICAgICAgICAgIHInKSkoPyElKG5tY2hhcilzKScKLSAgICAgICAgcid8KCUoaWU3aGFjaylzKSglKHNwYWNlKXMqKScKLSAgICAgICAgcid8KDpbZkZdW2lJXVtyUl1bc1NdW3RUXS1bbExdJwotICAgICAgICAgICAgcicoPzpbaUldW25OXVtlRV18W2VFXVt0VF1bdFRdW2VFXVtyUl0pKScKLSAgICAgICAgICAgIHInKCUoc3BhY2UpcyopKD89W3ssXSknCi0gICAgICAgIHInfCglKG5sX3N0cmluZ3MpcyknCi0gICAgICAgIHInfCglKGVzY2FwZSlzW15cXCJcMDQ3dT5AXHJcblxmXDA0MFx0Lzs6e31dKiknCi0gICAgKSAlIGxvY2FscygpKS5zdWIKLQotICAgICNwcmludCBtYWluX3N1Yi5fX3NlbGZfXy5wYXR0ZXJuCi0KLSAgICBkZWYgbWFpbl9zdWJiZXIoa2VlcF9iYW5nX2NvbW1lbnRzKToKLSAgICAgICAgIiIiIE1ha2UgbWFpbiBzdWJiZXIgIiIiCi0gICAgICAgIGluX21hY2llNSwgaW5fcnVsZSwgYXRfZ3JvdXAgPSBbMF0sIFswXSwgWzBdCi0KLSAgICAgICAgaWYga2VlcF9iYW5nX2NvbW1lbnRzOgotICAgICAgICAgICAgc3BhY2Vfc3ViID0gc3BhY2Vfc3ViX2JhbmdlZAotCi0gICAgICAgICAgICBkZWYgc3BhY2Vfc3ViYmVyKG1hdGNoKToKLSAgICAgICAgICAgICAgICAiIiIgU3BhY2V8Q29tbWVudCBzdWJiZXIgIiIiCi0gICAgICAgICAgICAgICAgaWYgbWF0Y2gubGFzdGluZGV4OgotICAgICAgICAgICAgICAgICAgICBncm91cDEsIGdyb3VwMiA9IG1hdGNoLmdyb3VwKDEsIDIpCi0gICAgICAgICAgICAgICAgICAgIGlmIGdyb3VwMjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGdyb3VwMS5lbmRzd2l0aChyJ1wqLycpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX21hY2llNVswXSA9IDEKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fbWFjaWU1WzBdID0gMAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwMQotICAgICAgICAgICAgICAgICAgICBlbGlmIGdyb3VwMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGdyb3VwMS5lbmRzd2l0aChyJ1wqLycpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluX21hY2llNVswXToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fbWFjaWU1WzBdID0gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByJy8qXCovJwotICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBpbl9tYWNpZTVbMF06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fbWFjaWU1WzBdID0gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnLyoqLycKLSAgICAgICAgICAgICAgICByZXR1cm4gJycKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNwYWNlX3N1YiA9IHNwYWNlX3N1Yl9zaW1wbGUKLQotICAgICAgICAgICAgZGVmIHNwYWNlX3N1YmJlcihtYXRjaCk6Ci0gICAgICAgICAgICAgICAgIiIiIFNwYWNlfENvbW1lbnQgc3ViYmVyICIiIgotICAgICAgICAgICAgICAgIGlmIG1hdGNoLmxhc3RpbmRleDoKLSAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2guZ3JvdXAoMSkuZW5kc3dpdGgocidcKi8nKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluX21hY2llNVswXToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJycKLSAgICAgICAgICAgICAgICAgICAgICAgIGluX21hY2llNVswXSA9IDEKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByJy8qXCovJwotICAgICAgICAgICAgICAgICAgICBlbGlmIGluX21hY2llNVswXToKLSAgICAgICAgICAgICAgICAgICAgICAgIGluX21hY2llNVswXSA9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnLyoqLycKLSAgICAgICAgICAgICAgICByZXR1cm4gJycKLQotICAgICAgICBkZWYgZm5fc3BhY2VfcG9zdChncm91cCk6Ci0gICAgICAgICAgICAiIiIgc3BhY2Ugd2l0aCB0b2tlbiBhZnRlciAiIiIKLSAgICAgICAgICAgIGlmIGdyb3VwKDUpIGlzIE5vbmUgb3IgKAotICAgICAgICAgICAgICAgICAgICBncm91cCg2KSA9PSAnOicgYW5kIG5vdCBpbl9ydWxlWzBdIGFuZCBub3QgYXRfZ3JvdXBbMF0pOgotICAgICAgICAgICAgICAgIHJldHVybiAnICcgKyBzcGFjZV9zdWIoc3BhY2Vfc3ViYmVyLCBncm91cCg0KSkKLSAgICAgICAgICAgIHJldHVybiBzcGFjZV9zdWIoc3BhY2Vfc3ViYmVyLCBncm91cCg0KSkKLQotICAgICAgICBkZWYgZm5fc2VtaWNvbG9uKGdyb3VwKToKLSAgICAgICAgICAgICIiIiA7IGhhbmRsZXIgIiIiCi0gICAgICAgICAgICByZXR1cm4gJzsnICsgc3BhY2Vfc3ViKHNwYWNlX3N1YmJlciwgZ3JvdXAoNykpCi0KLSAgICAgICAgZGVmIGZuX3NlbWljb2xvbjIoZ3JvdXApOgotICAgICAgICAgICAgIiIiIDsgaGFuZGxlciAiIiIKLSAgICAgICAgICAgIGlmIGluX3J1bGVbMF06Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNwYWNlX3N1YihzcGFjZV9zdWJiZXIsIGdyb3VwKDcpKQotICAgICAgICAgICAgcmV0dXJuICc7JyArIHNwYWNlX3N1YihzcGFjZV9zdWJiZXIsIGdyb3VwKDcpKQotCi0gICAgICAgIGRlZiBmbl9vcGVuKF8pOgotICAgICAgICAgICAgIiIiIHsgaGFuZGxlciAiIiIKLSAgICAgICAgICAgIGlmIGF0X2dyb3VwWzBdOgotICAgICAgICAgICAgICAgIGF0X2dyb3VwWzBdIC09IDEKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaW5fcnVsZVswXSA9IDEKLSAgICAgICAgICAgIHJldHVybiAneycKLQotICAgICAgICBkZWYgZm5fY2xvc2UoXyk6Ci0gICAgICAgICAgICAiIiIgfSBoYW5kbGVyICIiIgotICAgICAgICAgICAgaW5fcnVsZVswXSA9IDAKLSAgICAgICAgICAgIHJldHVybiAnfScKLQotICAgICAgICBkZWYgZm5fYXRfZ3JvdXAoZ3JvdXApOgotICAgICAgICAgICAgIiIiIEB4eHggZ3JvdXAgaGFuZGxlciAiIiIKLSAgICAgICAgICAgIGF0X2dyb3VwWzBdICs9IDEKLSAgICAgICAgICAgIHJldHVybiBncm91cCgxMykKLQotICAgICAgICBkZWYgZm5faWU3aGFjayhncm91cCk6Ci0gICAgICAgICAgICAiIiIgSUU3IEhhY2sgaGFuZGxlciAiIiIKLSAgICAgICAgICAgIGlmIG5vdCBpbl9ydWxlWzBdIGFuZCBub3QgYXRfZ3JvdXBbMF06Ci0gICAgICAgICAgICAgICAgaW5fbWFjaWU1WzBdID0gMAotICAgICAgICAgICAgICAgIHJldHVybiBncm91cCgxNCkgKyBzcGFjZV9zdWIoc3BhY2Vfc3ViYmVyLCBncm91cCgxNSkpCi0gICAgICAgICAgICByZXR1cm4gJz4nICsgc3BhY2Vfc3ViKHNwYWNlX3N1YmJlciwgZ3JvdXAoMTUpKQotCi0gICAgICAgIHRhYmxlID0gKAotICAgICAgICAgICAgIyBub3FhIHB5bGludDogZGlzYWJsZSA9IEMwMzMwCi0gICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgIE5vbmUsCi0gICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgZm5fc3BhY2VfcG9zdCwgICAgICAgICAgICAgICAgICAgICAgICMgc3BhY2Ugd2l0aCB0b2tlbiBhZnRlcgotICAgICAgICAgICAgZm5fc3BhY2VfcG9zdCwgICAgICAgICAgICAgICAgICAgICAgICMgc3BhY2Ugd2l0aCB0b2tlbiBhZnRlcgotICAgICAgICAgICAgZm5fc3BhY2VfcG9zdCwgICAgICAgICAgICAgICAgICAgICAgICMgc3BhY2Ugd2l0aCB0b2tlbiBhZnRlcgotICAgICAgICAgICAgZm5fc2VtaWNvbG9uLCAgICAgICAgICAgICAgICAgICAgICAgICMgc2VtaWNvbG9uCi0gICAgICAgICAgICBmbl9zZW1pY29sb24yLCAgICAgICAgICAgICAgICAgICAgICAgIyBzZW1pY29sb24KLSAgICAgICAgICAgIGZuX29wZW4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHsKLSAgICAgICAgICAgIGZuX2Nsb3NlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIH0KLSAgICAgICAgICAgIGxhbWJkYSBnOiBnKDExKSwgICAgICAgICAgICAgICAgICAgICAjIHN0cmluZwotICAgICAgICAgICAgbGFtYmRhIGc6ICd1cmwoJXMpJyAlIHVyaV9zcGFjZV9zdWIodXJpX3NwYWNlX3N1YmJlciwgZygxMikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdXJsKC4uLikKLSAgICAgICAgICAgIGZuX2F0X2dyb3VwLCAgICAgICAgICAgICAgICAgICAgICAgICAjIEB4eHggZXhwZWN0aW5nIHsuLi59Ci0gICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgZm5faWU3aGFjaywgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWU3aGFjawotICAgICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgIGxhbWJkYSBnOiBnKDE2KSArICcgJyArIHNwYWNlX3N1YihzcGFjZV9zdWJiZXIsIGcoMTcpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDpmaXJzdC1saW5lfGxldHRlciBmb2xsb3dlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYnkgW3ssXSAoYXBwYXJlbnRseSBzcGFjZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbmVlZGVkIGZvciBJRTYpCi0gICAgICAgICAgICBsYW1iZGEgZzogbmxfdW5lc2Nfc3ViKCcnLCBnKDE4KSksICAgIyBubF9zdHJpbmcKLSAgICAgICAgICAgIGxhbWJkYSBnOiBwb3N0X2VzY19zdWIoJyAnLCBnKDE5KSksICAjIGVzY2FwZQotICAgICAgICApCi0KLSAgICAgICAgZGVmIGZ1bmMobWF0Y2gpOgotICAgICAgICAgICAgIiIiIE1haW4gc3ViYmVyICIiIgotICAgICAgICAgICAgaWR4LCBncm91cCA9IG1hdGNoLmxhc3RpbmRleCwgbWF0Y2guZ3JvdXAKLSAgICAgICAgICAgIGlmIGlkeCA+IDM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlW2lkeF0oZ3JvdXApCi0KLSAgICAgICAgICAgICMgc2hvcnRjdXRzIGZvciBmcmVxdWVudCBvcGVyYXRpb25zIGJlbG93OgotICAgICAgICAgICAgZWxpZiBpZHggPT0gMTogICAgICMgbm90IGludGVyZXN0aW5nCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwKDEpCi0gICAgICAgICAgICAjZWxzZTogIyBzcGFjZSB3aXRoIHRva2VuIGJlZm9yZSBvciBhdCB0aGUgYmVnaW5uaW5nCi0gICAgICAgICAgICByZXR1cm4gc3BhY2Vfc3ViKHNwYWNlX3N1YmJlciwgZ3JvdXAoaWR4KSkKLQotICAgICAgICByZXR1cm4gZnVuYwotCi0gICAgZGVmIGNzc21pbihzdHlsZSwga2VlcF9iYW5nX2NvbW1lbnRzPUZhbHNlKTogICMgcHlsaW50OiBkaXNhYmxlID0gVzA2MjEKLSAgICAgICAgIiIiCi0gICAgICAgIE1pbmlmeSBDU1MuCi0KLSAgICAgICAgOlBhcmFtZXRlcnM6Ci0gICAgICAgICAgYHN0eWxlYCA6IGBgc3RyYGAKLSAgICAgICAgICAgIENTUyB0byBtaW5pZnkKLQotICAgICAgICAgIGBrZWVwX2JhbmdfY29tbWVudHNgIDogYGBib29sYGAKLSAgICAgICAgICAgIEtlZXAgY29tbWVudHMgc3RhcnRpbmcgd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrPyAoYGAvKiEuLi4qL2BgKQotCi0gICAgICAgIDpSZXR1cm46IE1pbmlmaWVkIHN0eWxlCi0gICAgICAgIDpSdHlwZTogYGBzdHJgYAotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIG1haW5fc3ViKG1haW5fc3ViYmVyKGtlZXBfYmFuZ19jb21tZW50cyksIHN0eWxlKQotCi0gICAgcmV0dXJuIGNzc21pbgotCi1jc3NtaW4gPSBfbWFrZV9jc3NtaW4oKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZGVmIG1haW4oKToKLSAgICAgICAgIiIiIE1haW4gIiIiCi0gICAgICAgIGltcG9ydCBzeXMgYXMgX3N5cwotICAgICAgICBrZWVwX2JhbmdfY29tbWVudHMgPSAoCi0gICAgICAgICAgICAnLWInIGluIF9zeXMuYXJndlsxOl0KLSAgICAgICAgICAgIG9yICctYnAnIGluIF9zeXMuYXJndlsxOl0KLSAgICAgICAgICAgIG9yICctcGInIGluIF9zeXMuYXJndlsxOl0KLSAgICAgICAgKQotICAgICAgICBpZiAnLXAnIGluIF9zeXMuYXJndlsxOl0gb3IgJy1icCcgaW4gX3N5cy5hcmd2WzE6XSBcCi0gICAgICAgICAgICAgICAgb3IgJy1wYicgaW4gX3N5cy5hcmd2WzE6XToKLSAgICAgICAgICAgIGdsb2JhbCBjc3NtaW4gICMgcHlsaW50OiBkaXNhYmxlID0gVzA2MDMKLSAgICAgICAgICAgIGNzc21pbiA9IF9tYWtlX2Nzc21pbihweXRob25fb25seT1UcnVlKQotICAgICAgICBfc3lzLnN0ZG91dC53cml0ZShjc3NtaW4oCi0gICAgICAgICAgICBfc3lzLnN0ZGluLnJlYWQoKSwga2VlcF9iYW5nX2NvbW1lbnRzPWtlZXBfYmFuZ19jb21tZW50cwotICAgICAgICApKQotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3J1bl90ZXN0cy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9ydW5fdGVzdHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDkxMjhkNzQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3J1bl90ZXN0cy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgLSotIGNvZGluZzogYXNjaWkgLSotCi0jCi0jIENvcHlyaWdodCAyMDE0Ci0jIEFuZHJceGU5IE1hbG8gb3IgaGlzIGxpY2Vuc29ycywgYXMgYXBwbGljYWJsZQotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIiIiCi09PT09PT09PT09PQotIFJ1biB0ZXN0cwotPT09PT09PT09PT0KLQotUnVuIHRlc3RzLgotIiIiCi1fX2F1dGhvcl9fID0gIkFuZHJceGU5IE1hbG8iCi1fX2F1dGhvcl9fID0gZ2V0YXR0cihfX2F1dGhvcl9fLCAnZGVjb2RlJywgbGFtYmRhIHg6IF9fYXV0aG9yX18pKCdsYXRpbi0xJykKLV9fZG9jZm9ybWF0X18gPSAicmVzdHJ1Y3R1cmVkdGV4dCBlbiIKLQotaW1wb3J0IG9zIGFzIF9vcwotaW1wb3J0IHJlIGFzIF9yZQotaW1wb3J0IHN5cyBhcyBfc3lzCi0KLWZyb20gX3NldHVwIGltcG9ydCBzaGVsbAotZnJvbSBfc2V0dXAgaW1wb3J0IHRlcm0KLQotCi1kZWYgcnVuX3Rlc3RzKGJhc2VkaXIsIGxpYmRpcik6Ci0gICAgIiIiIFJ1biBvdXRwdXQgYmFzZWQgdGVzdHMgIiIiCi0gICAgaW1wb3J0IHJjc3NtaW4gYXMgX3Jjc3NtaW4KLSAgICBweV9jc3NtaW4gPSBfcmNzc21pbi5fbWFrZV9jc3NtaW4ocHl0aG9uX29ubHk9VHJ1ZSkKLSAgICBjX2Nzc21pbiA9IF9yY3NzbWluLl9tYWtlX2Nzc21pbihweXRob25fb25seT1GYWxzZSkKLQotICAgIGRlZiBydW5fdGVzdChleGFtcGxlLCBvdXRwdXRfZmlsZSk6Ci0gICAgICAgICIiIiBSdW4gaXQgIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZwID0gb3BlbihleGFtcGxlLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW5wdXQgPSBmcC5yZWFkKCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZnAuY2xvc2UoKQotCi0gICAgICAgIGRlZiBsb2FkX291dHB1dChmaWxlbmFtZSk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAncicpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IGZwLnJlYWQoKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5zdHJpcCgpCi0gICAgICAgICAgICBpZiBfcmUuc2VhcmNoKHInKD88IVxcKSg/OlxcXFwpKlxcWzAtOWEtekEtWl17MSw2fSQnLCBvdXRwdXQpOgotICAgICAgICAgICAgICAgIG91dHB1dCArPSAnICcKLSAgICAgICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgICAgICBvdXRwdXQgPSBsb2FkX291dHB1dChvdXRwdXRfZmlsZSkKLSAgICAgICAgb3V0cHV0X2IgPSBsb2FkX291dHB1dChvdXRwdXRfZmlsZSArICcuYicpCi0KLSAgICAgICAgZGVmIGRvX3Rlc3QoY3NzbWluLCBvdXRwdXQsICoqb3B0aW9ucyk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZ2Vub3V0ID0gY3NzbWluKGlucHV0LCAqKm9wdGlvbnMpCi0gICAgICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KToKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHJldHVybiAxLCAiJShSRUQpcyBleGMlKE5PUk1BTClzICIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgb3V0cHV0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxLCAiJShSRUQpc21pc3MlKE5PUk1BTClzICIKLSAgICAgICAgICAgICAgICBlbGlmIGdlbm91dCA9PSBvdXRwdXQgb3IgZ2Vub3V0ID09IG91dHB1dC5yc3RyaXAoKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAsICIlKEdSRUVOKXNPSyUoTk9STUFMKXMgICAiCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEsICIlKFJFRClzZmFpbCUoTk9STUFMKXMgIgotCi0gICAgICAgIGVycmVkLCBvdXQgPSBkb190ZXN0KHB5X2Nzc21pbiwgb3V0cHV0KQotICAgICAgICBlcnJlZCwgY19vdXQgPSBkb190ZXN0KGNfY3NzbWluLCBvdXRwdXQpCi0gICAgICAgIGVycmVkLCBvdXRfYiA9IGRvX3Rlc3QocHlfY3NzbWluLCBvdXRwdXRfYiwga2VlcF9iYW5nX2NvbW1lbnRzPVRydWUpCi0gICAgICAgIGVycmVkLCBjX291dF9iID0gZG9fdGVzdChjX2Nzc21pbiwgb3V0cHV0X2IsIGtlZXBfYmFuZ19jb21tZW50cz1UcnVlKQotCi0gICAgICAgIHRlcm0ud3JpdGUoCi0gICAgICAgICAgICAiJShvdXQpcyAlKG91dF9iKXMgIHwgICUoY19vdXQpcyAlKGNfb3V0X2IpcyAtICUlKGV4YW1wbGUpc1xuIgotICAgICAgICAgICAgICAgICUgbG9jYWxzKCksCi0gICAgICAgICAgICBleGFtcGxlPV9vcy5wYXRoLmJhc2VuYW1lKGV4YW1wbGUpLAotICAgICAgICApCi0gICAgICAgIHJldHVybiBlcnJlZAotCi0gICAgIyBlbmQKLSAgICAjIGJlZ2luIG1haW4gdGVzdCBjb2RlCi0KLSAgICBlcnJlZCA9IDAKLSAgICBiYXNlZGlyID0gc2hlbGwubmF0aXZlKGJhc2VkaXIpCi0gICAgc3RyaXAgPSBsZW4oYmFzZWRpcikgLSBsZW4oX29zLnBhdGguYmFzZW5hbWUoYmFzZWRpcikpCi0gICAgZm9yIGRpcm5hbWUsIGRpcnMsIGZpbGVzIGluIHNoZWxsLndhbGsoYmFzZWRpcik6Ci0gICAgICAgIGRpcnNbOl0gPSBbCi0gICAgICAgICAgICBpdGVtIGZvciBpdGVtIGluIGRpcnMgaWYgaXRlbSBub3QgaW4gKCcuc3ZuJywgJy5naXQnLCAnb3V0JykKLSAgICAgICAgXQotICAgICAgICBkaXJzLnNvcnQoKQotICAgICAgICBmaWxlcyA9IFtpdGVtIGZvciBpdGVtIGluIGZpbGVzIGlmIGl0ZW0uZW5kc3dpdGgoJy5jc3MnKV0KLSAgICAgICAgaWYgbm90IGZpbGVzOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgbm90IF9vcy5wYXRoLmlzZGlyKF9vcy5wYXRoLmpvaW4oYmFzZWRpciwgZGlybmFtZSwgJ291dCcpKToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHRlcm0ueWVsbG93KCItLS0+ICVzIiAlIChkaXJuYW1lW3N0cmlwOl0sKSkKLSAgICAgICAgZmlsZXMuc29ydCgpCi0gICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGlmIHJ1bl90ZXN0KAotICAgICAgICAgICAgICAgIF9vcy5wYXRoLmpvaW4oZGlybmFtZSwgZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgIF9vcy5wYXRoLmpvaW4oZGlybmFtZSwgJ291dCcsIGZpbGVuYW1lWzotNF0gKyAnLm91dCcpLAotICAgICAgICAgICAgKTogZXJyZWQgPSAxCi0gICAgICAgIHRlcm0ueWVsbG93KCI8LS0tICVzIiAlIChkaXJuYW1lW3N0cmlwOl0sKSkKLSAgICByZXR1cm4gZXJyZWQKLQotCi1kZWYgbWFpbigpOgotICAgICIiIiBNYWluICIiIgotICAgIGJhc2VkaXIsIGxpYmRpciA9IE5vbmUsIE5vbmUKLSAgICBhY2NlcHRfb3B0cyA9IFRydWUKLSAgICBhcmdzID0gW10KLSAgICBmb3IgYXJnIGluIF9zeXMuYXJndlsxOl06Ci0gICAgICAgIGlmIGFjY2VwdF9vcHRzOgotICAgICAgICAgICAgaWYgYXJnID09ICctLSc6Ci0gICAgICAgICAgICAgICAgYWNjZXB0X29wdHMgPSBGYWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBlbGlmIGFyZyA9PSAnLXEnOgotICAgICAgICAgICAgICAgIHRlcm0ud3JpdGUgPSB0ZXJtLmdyZWVuID0gdGVybS5yZWQgPSB0ZXJtLnllbGxvdyA9IFwKLSAgICAgICAgICAgICAgICAgICAgdGVybS5hbm5vdW5jZSA9IFwKLSAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGZtdCwgKiprd2FyZ3M6IE5vbmUKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZWxpZiBhcmcgPT0gJy1wJzoKLSAgICAgICAgICAgICAgICBpbmZvID0ge30KLSAgICAgICAgICAgICAgICBmb3Iga2V5IGluIHRlcm0udGVybWluZm8oKToKLSAgICAgICAgICAgICAgICAgICAgaW5mb1trZXldID0gJycKLSAgICAgICAgICAgICAgICBpbmZvWydFUkFTRSddID0gJ1xuJwotICAgICAgICAgICAgICAgIHRlcm0udGVybWluZm8uaW5mbyA9IGluZm8KLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZWxpZiBhcmcuc3RhcnRzd2l0aCgnLScpOgotICAgICAgICAgICAgICAgIF9zeXMuc3RkZXJyLndyaXRlKCJVbnJlY29nbml6ZWQgb3B0aW9uICVyXG4iICUgKGFyZywpKQotICAgICAgICAgICAgICAgIHJldHVybiAyCi0gICAgICAgIGFyZ3MuYXBwZW5kKGFyZykKLSAgICBpZiBsZW4oYXJncykgPiAyOgotICAgICAgICBfc3lzLnN0ZGVyci53cml0ZSgiVG9vIG1hbnkgYXJndW1lbnRzXG4iKQotICAgICAgICByZXR1cm4gMgotICAgIGVsaWYgbGVuKGFyZ3MpIDwgMToKLSAgICAgICAgX3N5cy5zdGRlcnIud3JpdGUoIk1pc3NpbmcgYXJndW1lbnRzXG4iKQotICAgICAgICByZXR1cm4gMgotICAgIGJhc2VkaXIgPSBhcmdzWzBdCi0gICAgaWYgbGVuKGFyZ3MpID4gMToKLSAgICAgICAgbGliZGlyID0gYXJnc1sxXQotICAgIHJldHVybiBydW5fdGVzdHMoYmFzZWRpciwgbGliZGlyKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgX3N5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9zZXR1cC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi9zZXR1cC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRjYTU3MC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vc2V0dXAucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgLSotIGNvZGluZzogYXNjaWkgLSotCi0jCi0jIENvcHlyaWdodCAyMDA2IC0gMjAxMwotIyBBbmRyXHhlOSBNYWxvIG9yIGhpcyBsaWNlbnNvcnMsIGFzIGFwcGxpY2FibGUKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotaW1wb3J0IHN5cyBhcyBfc3lzCi1mcm9tIF9zZXR1cCBpbXBvcnQgcnVuCi0KLQotZGVmIHNldHVwKGFyZ3M9Tm9uZSwgX21hbmlmZXN0PTApOgotICAgICIiIiBNYWluIHNldHVwIGZ1bmN0aW9uICIiIgotICAgIGZyb20gX3NldHVwLmV4dCBpbXBvcnQgRXh0ZW5zaW9uCi0KLSAgICBpZiAnamF2YScgaW4gX3N5cy5wbGF0Zm9ybS5sb3dlcigpOgotICAgICAgICAjIG5vIGMgZXh0ZW5zaW9uIGZvciBqeXRob24KLSAgICAgICAgZXh0ID0gTm9uZQotICAgIGVsc2U6Ci0gICAgICAgIGV4dD1bRXh0ZW5zaW9uKCdfcmNzc21pbicsIHNvdXJjZXM9WydyY3NzbWluLmMnXSldCi0KLSAgICByZXR1cm4gcnVuKHNjcmlwdF9hcmdzPWFyZ3MsIGV4dD1leHQsIG1hbmlmZXN0X29ubHk9X21hbmlmZXN0KQotCi0KLWRlZiBtYW5pZmVzdCgpOgotICAgICIiIiBDcmVhdGUgTGlzdCBvZiBwYWNrYWdlZCBmaWxlcyAiIiIKLSAgICByZXR1cm4gc2V0dXAoKCksIF9tYW5pZmVzdD0xKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgc2V0dXAoKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vYXRncm91cF8wMC5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9hdGdyb3VwXzAwLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2NjgyMi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9hdGdyb3VwXzAwLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotQHBhZ2UgOmZpcnN0IHsKLSAgICBtYXJnaW4tbGVmdDogMWNtOwotfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vYXRncm91cF8wMS5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9hdGdyb3VwXzAxLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThjNWNiYS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9hdGdyb3VwXzAxLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLUBkb2N1bWVudCB1cmwoaHR0cDovL3d3dy53My5vcmcvKSwKLSAgICAgICAgICAgICAgIHVybC1wcmVmaXgoaHR0cDovL3d3dy53My5vcmcvU3R5bGUvKSwKLSAgICAgICAgICAgICAgIGRvbWFpbihtb3ppbGxhLm9yZyksCi0gICAgICAgICAgICAgICByZWdleHAoImh0dHBzOi4qIikKLXsKLSAgLyogQ1NTIHJ1bGVzIGhlcmUgYXBwbHkgdG86Ci0gICAgICsgVGhlIHBhZ2UgImh0dHA6Ly93d3cudzMub3JnLyIuCi0gICAgICsgQW55IHBhZ2Ugd2hvc2UgVVJMIGJlZ2lucyB3aXRoICJodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8iCi0gICAgICsgQW55IHBhZ2Ugd2hvc2UgVVJMJ3MgaG9zdCBpcyAibW96aWxsYS5vcmciIG9yIGVuZHMgd2l0aAotICAgICAgICIubW96aWxsYS5vcmciCi0gICAgICsgQW55IHBhZ2Ugd2hvc2UgVVJMIHN0YXJ0cyB3aXRoICJodHRwczoiICovCi0KLSAgLyogbWFrZSB0aGUgYWJvdmUtbWVudGlvbmVkIHBhZ2VzIHJlYWxseSB1Z2x5ICovCi0gIGJvZHkgeyBjb2xvcjogcHVycGxlOyBiYWNrZ3JvdW5kOiB5ZWxsb3c7IH0KLX0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2F0Z3JvdXBfMDIuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vYXRncm91cF8wMi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMDg1OWUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vYXRncm91cF8wMi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOjUwMHB4KSB7Ci0gICAgQGRvY3VtZW50IHVybChodHRwOi8vd3d3LnczLm9yZy8pLAotICAgICAgICAgICAgICAgICAgIHVybC1wcmVmaXgoaHR0cDovL3d3dy53My5vcmcvU3R5bGUvKSwKLSAgICAgICAgICAgICAgICAgICBkb21haW4obW96aWxsYS5vcmcpLAotICAgICAgICAgICAgICAgICAgIHJlZ2V4cCgiaHR0cHM6LioiKQotICAgIHsKLSAgICAgIC8qIENTUyBydWxlcyBoZXJlIGFwcGx5IHRvOgotICAgICAgICAgKyBUaGUgcGFnZSAiaHR0cDovL3d3dy53My5vcmcvIi4KLSAgICAgICAgICsgQW55IHBhZ2Ugd2hvc2UgVVJMIGJlZ2lucyB3aXRoICJodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8iCi0gICAgICAgICArIEFueSBwYWdlIHdob3NlIFVSTCdzIGhvc3QgaXMgIm1vemlsbGEub3JnIiBvciBlbmRzIHdpdGgKLSAgICAgICAgICAgIi5tb3ppbGxhLm9yZyIKLSAgICAgICAgICsgQW55IHBhZ2Ugd2hvc2UgVVJMIHN0YXJ0cyB3aXRoICJodHRwczoiICovCi0KLSAgICAgIC8qIG1ha2UgdGhlIGFib3ZlLW1lbnRpb25lZCBwYWdlcyByZWFsbHkgdWdseSAqLwotICAgICAgYm9keSB7IGNvbG9yOiBwdXJwbGU7IGJhY2tncm91bmQ6IHllbGxvdzsgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2F0Z3JvdXBfMDMuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vYXRncm91cF8wMy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1Yjc0ZDIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vYXRncm91cF8wMy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoIDogNTAwcHgpIHsKLSAgICBAZG9jdW1lbnQgdXJsKGh0dHA6Ly93d3cudzMub3JnLyksCi0gICAgICAgICAgICAgICAgICAgdXJsLXByZWZpeChodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8pLAotICAgICAgICAgICAgICAgICAgIGRvbWFpbihtb3ppbGxhLm9yZyksCi0gICAgICAgICAgICAgICAgICAgcmVnZXhwKCJodHRwczouKiIpCi0gICAgewotICAgICAgICBAcGFnZSA6bGFzdCB7Ci0gICAgICAgICAgICBtYXJnaW4gOiAzaW47Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9hdGdyb3VwXzA0LmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2F0Z3JvdXBfMDQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2UzNWFiLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2F0Z3JvdXBfMDQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aCA6IDUwMHB4KSB7Ci0gICAgQGRvY3VtZW50IHVybChodHRwOi8vd3d3LnczLm9yZy8pLAotICAgICAgICAgICAgICAgICAgIHVybC1wcmVmaXgoaHR0cDovL3d3dy53My5vcmcvU3R5bGUvKSwKLSAgICAgICAgICAgICAgICAgICBkb21haW4obW96aWxsYS5vcmcpLAotICAgICAgICAgICAgICAgICAgIHJlZ2V4cCgiaHR0cHM6LioiKQotICAgIHsKLSAgICAgICAgQHN1cHBvcnRzICggKHBlcnNwZWN0aXZlOiAxMHB4KSBvciAoLW1vei1wZXJzcGVjdGl2ZTogMTBweCkgb3IgKC13ZWJraXQtcGVyc3BlY3RpdmU6IDEwcHgpIG9yICgtbXMtcGVyc3BlY3RpdmU6IDEwcHgpIG9yICgtby1wZXJzcGVjdGl2ZTogMTBweCkgKSB7Ci0gICAgICAgICAgICBAcGFnZSA6bGFzdCB7Ci0gICAgICAgICAgICAgICAgbWFyZ2luIDogM2luOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vYXRncm91cF8wNS5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9hdGdyb3VwXzA1LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMyYmZkZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9hdGdyb3VwXzA1LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLUBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGggOiA1MDBweCkgewotICAgIEBkb2N1bWVudCB1cmwoaHR0cDovL3d3dy53My5vcmcvKSwKLSAgICAgICAgICAgICAgICAgICB1cmwtcHJlZml4KGh0dHA6Ly93d3cudzMub3JnL1N0eWxlLyksCi0gICAgICAgICAgICAgICAgICAgZG9tYWluKG1vemlsbGEub3JnKSwKLSAgICAgICAgICAgICAgICAgICByZWdleHAoImh0dHBzOi4qIikKLSAgICB7Ci0gICAgICAgIEBzdXBwb3J0cyAoIChwZXJzcGVjdGl2ZTogMTBweCkgb3IgKC1tb3otcGVyc3BlY3RpdmU6IDEwcHgpIG9yICgtd2Via2l0LXBlcnNwZWN0aXZlOiAxMHB4KSBvciAoLW1zLXBlcnNwZWN0aXZlOiAxMHB4KSBvciAoLW8tcGVyc3BlY3RpdmU6IDEwcHgpICkgewotICAgICAgICAgICAgQGtleWZyYW1lcyBzbGlkZWluIHsKLSAgICAgICAgICAgICAgICBmcm9tIHsKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQgOiAxMDAlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAwJQotICAgICAgICAgICAgICAgIH0KLSAgICAgIAotICAgICAgICAgICAgICAgIDc1JSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTozMDAlOwotICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDoyNSU7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoOjE1MCU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgCi0gICAgICAgICAgICAgICAgdG8gewotICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDowJTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGg6MTAwJTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBwYWdlIDpsYXN0IHsKLSAgICAgICAgICAgICAgICBtYXJnaW4gOiAzaW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9hdGdyb3VwXzA2LmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2F0Z3JvdXBfMDYuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2I3ZmZiLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2F0Z3JvdXBfMDYuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotQG1FZGlhIGFsbCBhbmQgKG1pbi13aWR0aCA6IDUwMHB4KSB7Ci0gICAgQGRvY3VNZW50IHVybChodHRwOi8vd3d3LnczLm9yZy8pLAotICAgICAgICAgICAgICAgICAgIHVybC1wcmVmaXgoaHR0cDovL3d3dy53My5vcmcvU3R5bGUvKSwKLSAgICAgICAgICAgICAgICAgICBkb21haW4obW96aWxsYS5vcmcpLAotICAgICAgICAgICAgICAgICAgIHJlZ2V4cCgiaHR0cHM6LioiKQotICAgIHsKLSAgICAgICAgQHN1UHBvUnRzICggKHBlcnNwZWN0aXZlOiAxMHB4KSBvciAoLW1vei1wZXJzcGVjdGl2ZTogMTBweCkgb3IgKC13ZWJraXQtcGVyc3BlY3RpdmU6IDEwcHgpIG9yICgtbXMtcGVyc3BlY3RpdmU6IDEwcHgpIG9yICgtby1wZXJzcGVjdGl2ZTogMTBweCkgKSB7Ci0gICAgICAgICAgICBAa2V5RlJhbWVzIHNsaWRlaW4gewotICAgICAgICAgICAgICAgIGZyb20gewotICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdCA6IDEwMCU7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMDAlCi0gICAgICAgICAgICAgICAgfQotICAgICAgCi0gICAgICAgICAgICAgICAgNzUlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOjMwMCU7Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OjI1JTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGg6MTUwJTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAKLSAgICAgICAgICAgICAgICB0byB7Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OjAlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aDoxMDAlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQHBhZ0UgOmxhc3QgewotICAgICAgICAgICAgICAgIG1hcmdpbiA6IDNpbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2F0Z3JvdXBfMDcuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vYXRncm91cF8wNy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NDUzZDIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vYXRncm91cF8wNy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoIDogNTAwcHgpIHsKLSAgICBAZG9jdW1lbnQgdXJsKGh0dHA6Ly93d3cudzMub3JnLyksCi0gICAgICAgICAgICAgICAgICAgdXJsLXByZWZpeChodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8pLAotICAgICAgICAgICAgICAgICAgIGRvbWFpbihtb3ppbGxhLm9yZyksCi0gICAgICAgICAgICAgICAgICAgcmVnZXhwKCJodHRwczouKiIpCi0gICAgewotICAgICAgICBAc3VwcG9ydHMgKCAocGVyc3BlY3RpdmU6IDEwcHgpIG9yICgtbW96LXBlcnNwZWN0aXZlOiAxMHB4KSBvciAoLXdlYmtpdC1wZXJzcGVjdGl2ZTogMTBweCkgb3IgKC1tcy1wZXJzcGVjdGl2ZTogMTBweCkgb3IgKC1vLXBlcnNwZWN0aXZlOiAxMHB4KSApIHsKLSAgICAgICAgICAgIEBrZXlmcmFtZXMgc2xpZGVpbiB7Ci0gICAgICAgICAgICAgICAgZnJvbSA6Ymx1YiB7Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0IDogMTAwJTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwMCUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAKLSAgICAgICAgICAgICAgICA3NSUgewotICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6MzAwJTsKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6MjUlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aDoxNTAlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgIAotICAgICAgICAgICAgICAgIHRvIHsKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6MCU7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoOjEwMCU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAcGFnZSA6bGFzdCB7Ci0gICAgICAgICAgICAgICAgbWFyZ2luIDogM2luOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vYXRncm91cF8wOC5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9hdGdyb3VwXzA4LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE5MGUxNy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9hdGdyb3VwXzA4LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLUBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGggOiA1MDBweCkgewotICAgIEBkb2N1bWVudCB1cmwoaHR0cDovL3d3dy53My5vcmcvKSwKLSAgICAgICAgICAgICAgICAgICB1cmwtcHJlZml4KGh0dHA6Ly93d3cudzMub3JnL1N0eWxlLyksCi0gICAgICAgICAgICAgICAgICAgZG9tYWluKG1vemlsbGEub3JnKSwKLSAgICAgICAgICAgICAgICAgICByZWdleHAoImh0dHBzOi4qIikKLSAgICB7Ci0gICAgICAgIEBzdXBwb3J0cyAoIChwZXJzcGVjdGl2ZTogMTBweCkgb3IgKC1tb3otcGVyc3BlY3RpdmU6IDEwcHgpIG9yICgtd2Via2l0LXBlcnNwZWN0aXZlOiAxMHB4KSBvciAoLW1zLXBlcnNwZWN0aXZlOiAxMHB4KSBvciAoLW8tcGVyc3BlY3RpdmU6IDEwcHgpICkgewotICAgICAgICAgICAgQC1vLWtleWZyYW1lcyBzbGlkZWluIHsKLSAgICAgICAgICAgICAgICBmcm9tIDpibHViIHsKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQgOiAxMDAlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzAwJQotICAgICAgICAgICAgICAgIH0KLSAgICAgIAotICAgICAgICAgICAgICAgIDc1JSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTozMDAlOwotICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDoyNSU7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoOjE1MCU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgCi0gICAgICAgICAgICAgICAgdG8gewotICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDowJTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGg6MTAwJTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBwYWdlIDpsYXN0IHsKLSAgICAgICAgICAgICAgICBtYXJnaW4gOiAzaW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9hdGdyb3VwXzA5LmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2F0Z3JvdXBfMDkuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmZkMGRhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2F0Z3JvdXBfMDkuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aCA6IDUwMHB4KSB7Ci0gICAgQGRvY3VtZW50IHVybChodHRwOi8vd3d3LnczLm9yZy8pLAotICAgICAgICAgICAgICAgICAgIHVybC1wcmVmaXgoaHR0cDovL3d3dy53My5vcmcvU3R5bGUvKSwKLSAgICAgICAgICAgICAgICAgICBkb21haW4obW96aWxsYS5vcmcpLAotICAgICAgICAgICAgICAgICAgIHJlZ2V4cCgiaHR0cHM6LioiKQotICAgIHsKLSAgICAgICAgQHN1cHBvcnRzICggKHBlcnNwZWN0aXZlOiAxMHB4KSBvciAoLW1vei1wZXJzcGVjdGl2ZTogMTBweCkgb3IgKC13ZWJraXQtcGVyc3BlY3RpdmU6IDEwcHgpIG9yICgtbXMtcGVyc3BlY3RpdmU6IDEwcHgpIG9yICgtby1wZXJzcGVjdGl2ZTogMTBweCkgKSB7Ci0gICAgICAgICAgICBALW1vei1rZXlmcmFtZXMgc2xpZGVpbiB7Ci0gICAgICAgICAgICAgICAgZnJvbSA6Ymx1YiB7Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0IDogMTAwJTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwMCUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAKLSAgICAgICAgICAgICAgICA3NSUgewotICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6MzAwJTsKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6MjUlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aDoxNTAlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgIAotICAgICAgICAgICAgICAgIHRvIHsKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6MCU7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoOjEwMCU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAcGFnZSA6bGFzdCB7Ci0gICAgICAgICAgICAgICAgbWFyZ2luIDogM2luOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vYXRncm91cF8xMC5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9hdGdyb3VwXzEwLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA4M2JmNi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9hdGdyb3VwXzEwLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLUBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGggOiA1MDBweCkgewotICAgIEBkb2N1bWVudCB1cmwoaHR0cDovL3d3dy53My5vcmcvKSwKLSAgICAgICAgICAgICAgICAgICB1cmwtcHJlZml4KGh0dHA6Ly93d3cudzMub3JnL1N0eWxlLyksCi0gICAgICAgICAgICAgICAgICAgZG9tYWluKG1vemlsbGEub3JnKSwKLSAgICAgICAgICAgICAgICAgICByZWdleHAoImh0dHBzOi4qIikKLSAgICB7Ci0gICAgICAgIEBzdXBwb3J0cyAoIChwZXJzcGVjdGl2ZTogMTBweCkgb3IgKC1tb3otcGVyc3BlY3RpdmU6IDEwcHgpIG9yICgtd2Via2l0LXBlcnNwZWN0aXZlOiAxMHB4KSBvciAoLW1zLXBlcnNwZWN0aXZlOiAxMHB4KSBvciAoLW8tcGVyc3BlY3RpdmU6IDEwcHgpICkgewotICAgICAgICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIHNsaWRlaW4gewotICAgICAgICAgICAgICAgIGZyb20gOmJsdWIgewotICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdCA6IDEwMCU7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMDAlCi0gICAgICAgICAgICAgICAgfQotICAgICAgCi0gICAgICAgICAgICAgICAgNzUlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOjMwMCU7Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OjI1JTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGg6MTUwJTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAKLSAgICAgICAgICAgICAgICB0byB7Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OjAlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aDoxMDAlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQHBhZ2UgOmxhc3QgewotICAgICAgICAgICAgICAgIG1hcmdpbiA6IDNpbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2F0Z3JvdXBfMTEuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vYXRncm91cF8xMS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OGI3MzguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vYXRncm91cF8xMS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoIDogNTAwcHgpIHsKLSAgICBAZG9jdW1lbnQgdXJsKGh0dHA6Ly93d3cudzMub3JnLyksCi0gICAgICAgICAgICAgICAgICAgdXJsLXByZWZpeChodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8pLAotICAgICAgICAgICAgICAgICAgIGRvbWFpbihtb3ppbGxhLm9yZyksCi0gICAgICAgICAgICAgICAgICAgcmVnZXhwKCJodHRwczouKiIpCi0gICAgewotICAgICAgICBAc3VwcG9ydHMgKCAocGVyc3BlY3RpdmU6IDEwcHgpIG9yICgtbW96LXBlcnNwZWN0aXZlOiAxMHB4KSBvciAoLXdlYmtpdC1wZXJzcGVjdGl2ZTogMTBweCkgb3IgKC1tcy1wZXJzcGVjdGl2ZTogMTBweCkgb3IgKC1vLXBlcnNwZWN0aXZlOiAxMHB4KSApIHsKLSAgICAgICAgICAgIEAtbXMta2V5ZnJhbWVzIHNsaWRlaW4gewotICAgICAgICAgICAgICAgIGZyb20gOmJsdWIgewotICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdCA6IDEwMCU7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMDAlCi0gICAgICAgICAgICAgICAgfQotICAgICAgCi0gICAgICAgICAgICAgICAgNzUlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOjMwMCU7Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OjI1JTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGg6MTUwJTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAKLSAgICAgICAgICAgICAgICB0byB7Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OjAlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aDoxMDAlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQHBhZ2UgOmxhc3QgewotICAgICAgICAgICAgICAgIG1hcmdpbiA6IDNpbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2NvbW1lbnRfMDAuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vY29tbWVudF8wMC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3YTA3OWQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vY29tbWVudF8wMC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vKiB0aGlzIGlzIGEgY29tbWVudCAqL2kge2xvdmU6IGNvbW1lbnRzOyAvKiEgeWVzICovOyAvKllFUyovfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vY29tbWVudF8wMS5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9jb21tZW50XzAxLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ5ODk2Ny4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9jb21tZW50XzAxLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI21haW5uYXYgbGkuaG92ZXIgZGwuc3Vic2VhcmNoIHNlbGVjdCB7Ci0gICAgbWFyZ2luLXRvcCAvKlwqKi86NHB4XDk7Ci0gICAgbWFyZ2luLWJvdHRvbSAvKlwqKi86MHB4XDk7Ci0gICAgfQotI21haW5uYXYgbGkuaG92ZXIgZGwuc3Vic2VhcmNoIGxhYmVsIHsKLSAgICBtYXJnaW4tdG9wIC8qXCoqLzo0cHhcOTsKLSAgICB9CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9jb21tZW50XzAyLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2NvbW1lbnRfMDIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2VhOTE2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2NvbW1lbnRfMDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLyovCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9jb21tZW50XzAzLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2NvbW1lbnRfMDMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzA3ZTYzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2NvbW1lbnRfMDMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYS8qKiovYgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vY29tbWVudF8wNC5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9jb21tZW50XzA0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE0MGE0Zi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9jb21tZW50XzA0LmNzcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWEvKipcLyovYgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vZXNjYXBlXzAwLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2VzY2FwZV8wMC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNzY4OWIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vZXNjYXBlXzAwLmNzcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLVxcMApkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vZXNjYXBlXzAxLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2VzY2FwZV8wMS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MmZhOWQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vZXNjYXBlXzAxLmNzcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLVwwCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9lc2NhcGVfMDIuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vZXNjYXBlXzAyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcwZmVhZS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9lc2NhcGVfMDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotXDEwCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9lc2NhcGVfMDMuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vZXNjYXBlXzAzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFiNTU2Ni4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9lc2NhcGVfMDMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotXDAzNDUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2VzY2FwZV8wNC5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9lc2NhcGVfMDQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWUyYzYyLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2VzY2FwZV8wNC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1cMDEyMzQ1NjcKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2VzY2FwZV8wNS5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9lc2NhcGVfMDUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGYwZDg2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2VzY2FwZV8wNS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1cMDEyMzQ1IGxhCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9lc2NhcGVfMDYuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vZXNjYXBlXzA2LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJmOWRiYy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9lc2NhcGVfMDYuY3NzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotXGEgYmMKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2ZpcnN0XzAwLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2ZpcnN0XzAwLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFlZWZjYy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9maXJzdF8wMC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi14OmZpcnN0LWxpbmV7YmxhOiBibHViO30KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2ZpcnN0XzAxLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2ZpcnN0XzAxLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY0NTcyMS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9maXJzdF8wMS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi14OmZpcnN0LWxldHRlcntibGE6IGJsdWI7fQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vZmlyc3RfMDIuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vZmlyc3RfMDIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2U1YzJjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL2ZpcnN0XzAyLmNzcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXg6Zmlyc3QtbGV0dGVye2JsYTpibHVifXk6Zmlyc3QtbGluZXtmb286YmFyfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDAub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDAub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjVhYWU4Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzAwLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBwYWdlIDpmaXJzdHttYXJnaW4tbGVmdDoxY219ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDAub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wMC5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI1YWFlOC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wMC5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBwYWdlIDpmaXJzdHttYXJnaW4tbGVmdDoxY219ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDEub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDEub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzRlMmFiLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzAxLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBkb2N1bWVudCB1cmwoaHR0cDovL3d3dy53My5vcmcvKSx1cmwtcHJlZml4KGh0dHA6Ly93d3cudzMub3JnL1N0eWxlLyksZG9tYWluKG1vemlsbGEub3JnKSxyZWdleHAoImh0dHBzOi4qIil7Ym9keXtjb2xvcjpwdXJwbGU7YmFja2dyb3VuZDp5ZWxsb3d9fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzAxLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDEub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NGUyYWIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDEub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AZG9jdW1lbnQgdXJsKGh0dHA6Ly93d3cudzMub3JnLyksdXJsLXByZWZpeChodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8pLGRvbWFpbihtb3ppbGxhLm9yZykscmVnZXhwKCJodHRwczouKiIpe2JvZHl7Y29sb3I6cHVycGxlO2JhY2tncm91bmQ6eWVsbG93fX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wMi5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wMi5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNjg4ZWIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDIub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDo1MDBweCl7QGRvY3VtZW50IHVybChodHRwOi8vd3d3LnczLm9yZy8pLHVybC1wcmVmaXgoaHR0cDovL3d3dy53My5vcmcvU3R5bGUvKSxkb21haW4obW96aWxsYS5vcmcpLHJlZ2V4cCgiaHR0cHM6LioiKXtib2R5e2NvbG9yOnB1cnBsZTtiYWNrZ3JvdW5kOnllbGxvd319fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzAyLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDIub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNjg4ZWIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDIub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOjUwMHB4KXtAZG9jdW1lbnQgdXJsKGh0dHA6Ly93d3cudzMub3JnLyksdXJsLXByZWZpeChodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8pLGRvbWFpbihtb3ppbGxhLm9yZykscmVnZXhwKCJodHRwczouKiIpe2JvZHl7Y29sb3I6cHVycGxlO2JhY2tncm91bmQ6eWVsbG93fX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDMub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDMub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzZjY2RmLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzAzLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6NTAwcHgpe0Bkb2N1bWVudCB1cmwoaHR0cDovL3d3dy53My5vcmcvKSx1cmwtcHJlZml4KGh0dHA6Ly93d3cudzMub3JnL1N0eWxlLyksZG9tYWluKG1vemlsbGEub3JnKSxyZWdleHAoImh0dHBzOi4qIil7QHBhZ2UgOmxhc3R7bWFyZ2luOjNpbn19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzAzLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDMub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NmNjZGYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDMub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOjUwMHB4KXtAZG9jdW1lbnQgdXJsKGh0dHA6Ly93d3cudzMub3JnLyksdXJsLXByZWZpeChodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8pLGRvbWFpbihtb3ppbGxhLm9yZykscmVnZXhwKCJodHRwczouKiIpe0BwYWdlIDpsYXN0e21hcmdpbjozaW59fX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wNC5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wNC5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwODZhOGIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDQub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDo1MDBweCl7QGRvY3VtZW50IHVybChodHRwOi8vd3d3LnczLm9yZy8pLHVybC1wcmVmaXgoaHR0cDovL3d3dy53My5vcmcvU3R5bGUvKSxkb21haW4obW96aWxsYS5vcmcpLHJlZ2V4cCgiaHR0cHM6LioiKXtAc3VwcG9ydHMgKChwZXJzcGVjdGl2ZToxMHB4KSBvciAoLW1vei1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLXdlYmtpdC1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLW1zLXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtby1wZXJzcGVjdGl2ZToxMHB4KSl7QHBhZ2UgOmxhc3R7bWFyZ2luOjNpbn19fX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wNC5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzA0Lm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDg2YThiLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzA0Lm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDo1MDBweCl7QGRvY3VtZW50IHVybChodHRwOi8vd3d3LnczLm9yZy8pLHVybC1wcmVmaXgoaHR0cDovL3d3dy53My5vcmcvU3R5bGUvKSxkb21haW4obW96aWxsYS5vcmcpLHJlZ2V4cCgiaHR0cHM6LioiKXtAc3VwcG9ydHMgKChwZXJzcGVjdGl2ZToxMHB4KSBvciAoLW1vei1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLXdlYmtpdC1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLW1zLXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtby1wZXJzcGVjdGl2ZToxMHB4KSl7QHBhZ2UgOmxhc3R7bWFyZ2luOjNpbn19fX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wNS5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wNS5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMzRjNWQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDUub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDo1MDBweCl7QGRvY3VtZW50IHVybChodHRwOi8vd3d3LnczLm9yZy8pLHVybC1wcmVmaXgoaHR0cDovL3d3dy53My5vcmcvU3R5bGUvKSxkb21haW4obW96aWxsYS5vcmcpLHJlZ2V4cCgiaHR0cHM6LioiKXtAc3VwcG9ydHMgKChwZXJzcGVjdGl2ZToxMHB4KSBvciAoLW1vei1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLXdlYmtpdC1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLW1zLXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtby1wZXJzcGVjdGl2ZToxMHB4KSl7QGtleWZyYW1lcyBzbGlkZWlue2Zyb217bWFyZ2luLWxlZnQ6MTAwJTt3aWR0aDozMDAlfTc1JXtmb250LXNpemU6MzAwJTttYXJnaW4tbGVmdDoyNSU7d2lkdGg6MTUwJX10b3ttYXJnaW4tbGVmdDowJTt3aWR0aDoxMDAlfX1AcGFnZSA6bGFzdHttYXJnaW46M2lufX19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzA1Lm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDUub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMzRjNWQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDUub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOjUwMHB4KXtAZG9jdW1lbnQgdXJsKGh0dHA6Ly93d3cudzMub3JnLyksdXJsLXByZWZpeChodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8pLGRvbWFpbihtb3ppbGxhLm9yZykscmVnZXhwKCJodHRwczouKiIpe0BzdXBwb3J0cyAoKHBlcnNwZWN0aXZlOjEwcHgpIG9yICgtbW96LXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtd2Via2l0LXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtbXMtcGVyc3BlY3RpdmU6MTBweCkgb3IgKC1vLXBlcnNwZWN0aXZlOjEwcHgpKXtAa2V5ZnJhbWVzIHNsaWRlaW57ZnJvbXttYXJnaW4tbGVmdDoxMDAlO3dpZHRoOjMwMCV9NzUle2ZvbnQtc2l6ZTozMDAlO21hcmdpbi1sZWZ0OjI1JTt3aWR0aDoxNTAlfXRve21hcmdpbi1sZWZ0OjAlO3dpZHRoOjEwMCV9fUBwYWdlIDpsYXN0e21hcmdpbjozaW59fX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDYub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDYub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmNjNTdhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzA2Lm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBtRWRpYSBhbGwgYW5kIChtaW4td2lkdGg6NTAwcHgpe0Bkb2N1TWVudCB1cmwoaHR0cDovL3d3dy53My5vcmcvKSx1cmwtcHJlZml4KGh0dHA6Ly93d3cudzMub3JnL1N0eWxlLyksZG9tYWluKG1vemlsbGEub3JnKSxyZWdleHAoImh0dHBzOi4qIil7QHN1UHBvUnRzICgocGVyc3BlY3RpdmU6MTBweCkgb3IgKC1tb3otcGVyc3BlY3RpdmU6MTBweCkgb3IgKC13ZWJraXQtcGVyc3BlY3RpdmU6MTBweCkgb3IgKC1tcy1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLW8tcGVyc3BlY3RpdmU6MTBweCkpe0BrZXlGUmFtZXMgc2xpZGVpbntmcm9te21hcmdpbi1sZWZ0OjEwMCU7d2lkdGg6MzAwJX03NSV7Zm9udC1zaXplOjMwMCU7bWFyZ2luLWxlZnQ6MjUlO3dpZHRoOjE1MCV9dG97bWFyZ2luLWxlZnQ6MCU7d2lkdGg6MTAwJX19QHBhZ0UgOmxhc3R7bWFyZ2luOjNpbn19fX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wNi5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzA2Lm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmNjNTdhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzA2Lm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQG1FZGlhIGFsbCBhbmQgKG1pbi13aWR0aDo1MDBweCl7QGRvY3VNZW50IHVybChodHRwOi8vd3d3LnczLm9yZy8pLHVybC1wcmVmaXgoaHR0cDovL3d3dy53My5vcmcvU3R5bGUvKSxkb21haW4obW96aWxsYS5vcmcpLHJlZ2V4cCgiaHR0cHM6LioiKXtAc3VQcG9SdHMgKChwZXJzcGVjdGl2ZToxMHB4KSBvciAoLW1vei1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLXdlYmtpdC1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLW1zLXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtby1wZXJzcGVjdGl2ZToxMHB4KSl7QGtleUZSYW1lcyBzbGlkZWlue2Zyb217bWFyZ2luLWxlZnQ6MTAwJTt3aWR0aDozMDAlfTc1JXtmb250LXNpemU6MzAwJTttYXJnaW4tbGVmdDoyNSU7d2lkdGg6MTUwJX10b3ttYXJnaW4tbGVmdDowJTt3aWR0aDoxMDAlfX1AcGFnRSA6bGFzdHttYXJnaW46M2lufX19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzA3Lm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzA3Lm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ4YjY4OS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wNy5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOjUwMHB4KXtAZG9jdW1lbnQgdXJsKGh0dHA6Ly93d3cudzMub3JnLyksdXJsLXByZWZpeChodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8pLGRvbWFpbihtb3ppbGxhLm9yZykscmVnZXhwKCJodHRwczouKiIpe0BzdXBwb3J0cyAoKHBlcnNwZWN0aXZlOjEwcHgpIG9yICgtbW96LXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtd2Via2l0LXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtbXMtcGVyc3BlY3RpdmU6MTBweCkgb3IgKC1vLXBlcnNwZWN0aXZlOjEwcHgpKXtAa2V5ZnJhbWVzIHNsaWRlaW57ZnJvbSA6Ymx1YnttYXJnaW4tbGVmdDoxMDAlO3dpZHRoOjMwMCV9NzUle2ZvbnQtc2l6ZTozMDAlO21hcmdpbi1sZWZ0OjI1JTt3aWR0aDoxNTAlfXRve21hcmdpbi1sZWZ0OjAlO3dpZHRoOjEwMCV9fUBwYWdlIDpsYXN0e21hcmdpbjozaW59fX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDcub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wNy5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ4YjY4OS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wNy5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6NTAwcHgpe0Bkb2N1bWVudCB1cmwoaHR0cDovL3d3dy53My5vcmcvKSx1cmwtcHJlZml4KGh0dHA6Ly93d3cudzMub3JnL1N0eWxlLyksZG9tYWluKG1vemlsbGEub3JnKSxyZWdleHAoImh0dHBzOi4qIil7QHN1cHBvcnRzICgocGVyc3BlY3RpdmU6MTBweCkgb3IgKC1tb3otcGVyc3BlY3RpdmU6MTBweCkgb3IgKC13ZWJraXQtcGVyc3BlY3RpdmU6MTBweCkgb3IgKC1tcy1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLW8tcGVyc3BlY3RpdmU6MTBweCkpe0BrZXlmcmFtZXMgc2xpZGVpbntmcm9tIDpibHVie21hcmdpbi1sZWZ0OjEwMCU7d2lkdGg6MzAwJX03NSV7Zm9udC1zaXplOjMwMCU7bWFyZ2luLWxlZnQ6MjUlO3dpZHRoOjE1MCV9dG97bWFyZ2luLWxlZnQ6MCU7d2lkdGg6MTAwJX19QHBhZ2UgOmxhc3R7bWFyZ2luOjNpbn19fX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wOC5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8wOC5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMGQ2YjEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDgub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDo1MDBweCl7QGRvY3VtZW50IHVybChodHRwOi8vd3d3LnczLm9yZy8pLHVybC1wcmVmaXgoaHR0cDovL3d3dy53My5vcmcvU3R5bGUvKSxkb21haW4obW96aWxsYS5vcmcpLHJlZ2V4cCgiaHR0cHM6LioiKXtAc3VwcG9ydHMgKChwZXJzcGVjdGl2ZToxMHB4KSBvciAoLW1vei1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLXdlYmtpdC1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLW1zLXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtby1wZXJzcGVjdGl2ZToxMHB4KSl7QC1vLWtleWZyYW1lcyBzbGlkZWlue2Zyb20gOmJsdWJ7bWFyZ2luLWxlZnQ6MTAwJTt3aWR0aDozMDAlfTc1JXtmb250LXNpemU6MzAwJTttYXJnaW4tbGVmdDoyNSU7d2lkdGg6MTUwJX10b3ttYXJnaW4tbGVmdDowJTt3aWR0aDoxMDAlfX1AcGFnZSA6bGFzdHttYXJnaW46M2lufX19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzA4Lm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDgub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMGQ2YjEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDgub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOjUwMHB4KXtAZG9jdW1lbnQgdXJsKGh0dHA6Ly93d3cudzMub3JnLyksdXJsLXByZWZpeChodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8pLGRvbWFpbihtb3ppbGxhLm9yZykscmVnZXhwKCJodHRwczouKiIpe0BzdXBwb3J0cyAoKHBlcnNwZWN0aXZlOjEwcHgpIG9yICgtbW96LXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtd2Via2l0LXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtbXMtcGVyc3BlY3RpdmU6MTBweCkgb3IgKC1vLXBlcnNwZWN0aXZlOjEwcHgpKXtALW8ta2V5ZnJhbWVzIHNsaWRlaW57ZnJvbSA6Ymx1YnttYXJnaW4tbGVmdDoxMDAlO3dpZHRoOjMwMCV9NzUle2ZvbnQtc2l6ZTozMDAlO21hcmdpbi1sZWZ0OjI1JTt3aWR0aDoxNTAlfXRve21hcmdpbi1sZWZ0OjAlO3dpZHRoOjEwMCV9fUBwYWdlIDpsYXN0e21hcmdpbjozaW59fX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDkub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDkub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGIyYjJhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzA5Lm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6NTAwcHgpe0Bkb2N1bWVudCB1cmwoaHR0cDovL3d3dy53My5vcmcvKSx1cmwtcHJlZml4KGh0dHA6Ly93d3cudzMub3JnL1N0eWxlLyksZG9tYWluKG1vemlsbGEub3JnKSxyZWdleHAoImh0dHBzOi4qIil7QHN1cHBvcnRzICgocGVyc3BlY3RpdmU6MTBweCkgb3IgKC1tb3otcGVyc3BlY3RpdmU6MTBweCkgb3IgKC13ZWJraXQtcGVyc3BlY3RpdmU6MTBweCkgb3IgKC1tcy1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLW8tcGVyc3BlY3RpdmU6MTBweCkpe0AtbW96LWtleWZyYW1lcyBzbGlkZWlue2Zyb20gOmJsdWJ7bWFyZ2luLWxlZnQ6MTAwJTt3aWR0aDozMDAlfTc1JXtmb250LXNpemU6MzAwJTttYXJnaW4tbGVmdDoyNSU7d2lkdGg6MTUwJX10b3ttYXJnaW4tbGVmdDowJTt3aWR0aDoxMDAlfX1AcGFnZSA6bGFzdHttYXJnaW46M2lufX19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzA5Lm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDkub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYjJiMmEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMDkub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOjUwMHB4KXtAZG9jdW1lbnQgdXJsKGh0dHA6Ly93d3cudzMub3JnLyksdXJsLXByZWZpeChodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8pLGRvbWFpbihtb3ppbGxhLm9yZykscmVnZXhwKCJodHRwczouKiIpe0BzdXBwb3J0cyAoKHBlcnNwZWN0aXZlOjEwcHgpIG9yICgtbW96LXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtd2Via2l0LXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtbXMtcGVyc3BlY3RpdmU6MTBweCkgb3IgKC1vLXBlcnNwZWN0aXZlOjEwcHgpKXtALW1vei1rZXlmcmFtZXMgc2xpZGVpbntmcm9tIDpibHVie21hcmdpbi1sZWZ0OjEwMCU7d2lkdGg6MzAwJX03NSV7Zm9udC1zaXplOjMwMCU7bWFyZ2luLWxlZnQ6MjUlO3dpZHRoOjE1MCV9dG97bWFyZ2luLWxlZnQ6MCU7d2lkdGg6MTAwJX19QHBhZ2UgOmxhc3R7bWFyZ2luOjNpbn19fX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8xMC5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8xMC5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYjEzN2MuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMTAub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDo1MDBweCl7QGRvY3VtZW50IHVybChodHRwOi8vd3d3LnczLm9yZy8pLHVybC1wcmVmaXgoaHR0cDovL3d3dy53My5vcmcvU3R5bGUvKSxkb21haW4obW96aWxsYS5vcmcpLHJlZ2V4cCgiaHR0cHM6LioiKXtAc3VwcG9ydHMgKChwZXJzcGVjdGl2ZToxMHB4KSBvciAoLW1vei1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLXdlYmtpdC1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLW1zLXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtby1wZXJzcGVjdGl2ZToxMHB4KSl7QC13ZWJraXQta2V5ZnJhbWVzIHNsaWRlaW57ZnJvbSA6Ymx1YnttYXJnaW4tbGVmdDoxMDAlO3dpZHRoOjMwMCV9NzUle2ZvbnQtc2l6ZTozMDAlO21hcmdpbi1sZWZ0OjI1JTt3aWR0aDoxNTAlfXRve21hcmdpbi1sZWZ0OjAlO3dpZHRoOjEwMCV9fUBwYWdlIDpsYXN0e21hcmdpbjozaW59fX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMTAub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8xMC5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBiMTM3Yy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8xMC5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6NTAwcHgpe0Bkb2N1bWVudCB1cmwoaHR0cDovL3d3dy53My5vcmcvKSx1cmwtcHJlZml4KGh0dHA6Ly93d3cudzMub3JnL1N0eWxlLyksZG9tYWluKG1vemlsbGEub3JnKSxyZWdleHAoImh0dHBzOi4qIil7QHN1cHBvcnRzICgocGVyc3BlY3RpdmU6MTBweCkgb3IgKC1tb3otcGVyc3BlY3RpdmU6MTBweCkgb3IgKC13ZWJraXQtcGVyc3BlY3RpdmU6MTBweCkgb3IgKC1tcy1wZXJzcGVjdGl2ZToxMHB4KSBvciAoLW8tcGVyc3BlY3RpdmU6MTBweCkpe0Atd2Via2l0LWtleWZyYW1lcyBzbGlkZWlue2Zyb20gOmJsdWJ7bWFyZ2luLWxlZnQ6MTAwJTt3aWR0aDozMDAlfTc1JXtmb250LXNpemU6MzAwJTttYXJnaW4tbGVmdDoyNSU7d2lkdGg6MTUwJX10b3ttYXJnaW4tbGVmdDowJTt3aWR0aDoxMDAlfX1AcGFnZSA6bGFzdHttYXJnaW46M2lufX19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzExLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzExLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E2MjFmMC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvYXRncm91cF8xMS5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOjUwMHB4KXtAZG9jdW1lbnQgdXJsKGh0dHA6Ly93d3cudzMub3JnLyksdXJsLXByZWZpeChodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8pLGRvbWFpbihtb3ppbGxhLm9yZykscmVnZXhwKCJodHRwczouKiIpe0BzdXBwb3J0cyAoKHBlcnNwZWN0aXZlOjEwcHgpIG9yICgtbW96LXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtd2Via2l0LXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtbXMtcGVyc3BlY3RpdmU6MTBweCkgb3IgKC1vLXBlcnNwZWN0aXZlOjEwcHgpKXtALW1zLWtleWZyYW1lcyBzbGlkZWlue2Zyb20gOmJsdWJ7bWFyZ2luLWxlZnQ6MTAwJTt3aWR0aDozMDAlfTc1JXtmb250LXNpemU6MzAwJTttYXJnaW4tbGVmdDoyNSU7d2lkdGg6MTUwJX10b3ttYXJnaW4tbGVmdDowJTt3aWR0aDoxMDAlfX1AcGFnZSA6bGFzdHttYXJnaW46M2lufX19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9hdGdyb3VwXzExLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMTEub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNjIxZjAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2F0Z3JvdXBfMTEub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOjUwMHB4KXtAZG9jdW1lbnQgdXJsKGh0dHA6Ly93d3cudzMub3JnLyksdXJsLXByZWZpeChodHRwOi8vd3d3LnczLm9yZy9TdHlsZS8pLGRvbWFpbihtb3ppbGxhLm9yZykscmVnZXhwKCJodHRwczouKiIpe0BzdXBwb3J0cyAoKHBlcnNwZWN0aXZlOjEwcHgpIG9yICgtbW96LXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtd2Via2l0LXBlcnNwZWN0aXZlOjEwcHgpIG9yICgtbXMtcGVyc3BlY3RpdmU6MTBweCkgb3IgKC1vLXBlcnNwZWN0aXZlOjEwcHgpKXtALW1zLWtleWZyYW1lcyBzbGlkZWlue2Zyb20gOmJsdWJ7bWFyZ2luLWxlZnQ6MTAwJTt3aWR0aDozMDAlfTc1JXtmb250LXNpemU6MzAwJTttYXJnaW4tbGVmdDoyNSU7d2lkdGg6MTUwJX10b3ttYXJnaW4tbGVmdDowJTt3aWR0aDoxMDAlfX1AcGFnZSA6bGFzdHttYXJnaW46M2lufX19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9jb21tZW50XzAwLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9jb21tZW50XzAwLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ2YjA3NC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvY29tbWVudF8wMC5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1pe2xvdmU6Y29tbWVudHN9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2NvbW1lbnRfMDAub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvY29tbWVudF8wMC5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk3NWE4Yi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvY29tbWVudF8wMC5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWl7bG92ZTpjb21tZW50cy8qISB5ZXMgKi99ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2NvbW1lbnRfMDEub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2NvbW1lbnRfMDEub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTEzYzIzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9jb21tZW50XzAxLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNtYWlubmF2IGxpLmhvdmVyIGRsLnN1YnNlYXJjaCBzZWxlY3R7bWFyZ2luLXRvcDo0cHhcOTttYXJnaW4tYm90dG9tOjBweFw5fSNtYWlubmF2IGxpLmhvdmVyIGRsLnN1YnNlYXJjaCBsYWJlbHttYXJnaW4tdG9wOjRweFw5fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9jb21tZW50XzAxLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2NvbW1lbnRfMDEub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMTNjMjMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2NvbW1lbnRfMDEub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jbWFpbm5hdiBsaS5ob3ZlciBkbC5zdWJzZWFyY2ggc2VsZWN0e21hcmdpbi10b3A6NHB4XDk7bWFyZ2luLWJvdHRvbTowcHhcOX0jbWFpbm5hdiBsaS5ob3ZlciBkbC5zdWJzZWFyY2ggbGFiZWx7bWFyZ2luLXRvcDo0cHhcOX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvY29tbWVudF8wMi5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvY29tbWVudF8wMi5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNTFhYzEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2NvbW1lbnRfMDIub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLyovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2NvbW1lbnRfMDIub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvY29tbWVudF8wMi5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE1MWFjMS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvY29tbWVudF8wMi5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS8qLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9jb21tZW50XzAzLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9jb21tZW50XzAzLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWViMTUwNy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvY29tbWVudF8wMy5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1hIGIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvY29tbWVudF8wMy5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9jb21tZW50XzAzLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWIxNTA3Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9jb21tZW50XzAzLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYSBiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2NvbW1lbnRfMDQub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2NvbW1lbnRfMDQub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWIxNTA3Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9jb21tZW50XzA0Lm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWEgYgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9jb21tZW50XzA0Lm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2NvbW1lbnRfMDQub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjE1MDcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2NvbW1lbnRfMDQub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1hIGIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzAwLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9lc2NhcGVfMDAub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGVjMjliLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9lc2NhcGVfMDAub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotXFwwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wMC5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9lc2NhcGVfMDAub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZWMyOWIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wMC5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLVxcMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9lc2NhcGVfMDEub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wMS5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0OTM5YmQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wMS5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1cMCAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzAxLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wMS5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ5MzliZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzAxLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotXDAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wMi5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzAyLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU0NTAyMi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzAyLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLVwxMCAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzAyLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wMi5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU0NTAyMi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzAyLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotXDEwIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9lc2NhcGVfMDMub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wMy5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNWE5NDkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wMy5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1cMDM0NSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzAzLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wMy5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI1YTk0OS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzAzLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotXDAzNDUgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wNC5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzA0Lm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNhYTk4OS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzA0Lm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLVwwMTIzNDU2NwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9lc2NhcGVfMDQub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzA0Lm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2FhOTg5Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9lc2NhcGVfMDQub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1cMDEyMzQ1NjcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzA1Lm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9lc2NhcGVfMDUub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzM3NWY0Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9lc2NhcGVfMDUub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotXDAxMjM0NSBsYQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9lc2NhcGVfMDUub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzA1Lm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzM3NWY0Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9lc2NhcGVfMDUub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1cMDEyMzQ1IGxhClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wNi5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzA2Lm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyNWNkNS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZXNjYXBlXzA2Lm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLVxhIGJjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wNi5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9lc2NhcGVfMDYub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MjVjZDUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2VzY2FwZV8wNi5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLVxhIGJjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2ZpcnN0XzAwLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9maXJzdF8wMC5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMmY4MDYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2ZpcnN0XzAwLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXg6Zmlyc3QtbGluZSB7YmxhOmJsdWJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2ZpcnN0XzAwLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2ZpcnN0XzAwLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjJmODA2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9maXJzdF8wMC5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXg6Zmlyc3QtbGluZSB7YmxhOmJsdWJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2ZpcnN0XzAxLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9maXJzdF8wMS5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NmFmMzguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2ZpcnN0XzAxLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXg6Zmlyc3QtbGV0dGVyIHtibGE6Ymx1Yn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZmlyc3RfMDEub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZmlyc3RfMDEub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NmFmMzguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L2ZpcnN0XzAxLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteDpmaXJzdC1sZXR0ZXIge2JsYTpibHVifQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9maXJzdF8wMi5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZmlyc3RfMDIub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODMxOTk2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9maXJzdF8wMi5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi14OmZpcnN0LWxldHRlciB7YmxhOmJsdWJ9eTpmaXJzdC1saW5lIHtmb286YmFyfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9maXJzdF8wMi5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC9maXJzdF8wMi5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgzMTk5Ni4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvZmlyc3RfMDIub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi14OmZpcnN0LWxldHRlciB7YmxhOmJsdWJ9eTpmaXJzdC1saW5lIHtmb286YmFyfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDAub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wMC5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyODNkMmIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wMC5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi14dXJsKGxhIGxhIGxhKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDAub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzAwLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjgzZDJiLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDAub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi14dXJsKGxhIGxhIGxhKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDEub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wMS5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNDQ2NTEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wMS5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi11cmwobGFsYWxhKSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzAxLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wMS5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI0NDY1MS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzAxLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdXJsKGxhbGFsYSkgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wMi5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzAyLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM0NWE0Yi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzAyLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXVybChsYWxhbGEpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wMi5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDIub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNDVhNGIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wMi5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXVybChsYWxhbGEpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wMy5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzAzLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE1ODg3Zi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzAzLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXVybCgibGFsYWxhIikKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzAzLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wMy5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE1ODg3Zi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzAzLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdXJsKCJsYWxhbGEiKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDQub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wNC5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNTg4N2YuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wNC5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi11cmwoImxhbGFsYSIpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wNC5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDQub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNTg4N2YuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wNC5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXVybCgibGFsYWxhIikKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzA1Lm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDUub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzlhYzJmLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDUub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdXJsKGxhbGFcKWxhbGEpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wNS5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDUub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzOWFjMmYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wNS5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXVybChsYWxhXClsYWxhKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDYub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wNi5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3OWMxNTEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wNi5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi11cmwobGFsYVwpbGFsYWxvbG9sbykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzA2Lm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wNi5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc5YzE1MS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzA2Lm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdXJsKGxhbGFcKWxhbGFsb2xvbG8pClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wNy5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzA3Lm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZkZDRmZS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzA3Lm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXVybChsYWxhbGEgbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDcub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzA3Lm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmRkNGZlLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDcub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi11cmwobGFsYWxhIGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzA4Lm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDgub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTA1NTkyLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDgub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdXJsKCJsYWxhbGEgbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDgub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzA4Lm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTA1NTkyLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL291dC91cmxfMDgub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi11cmwoImxhbGFsYSBsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wOS5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzA5Lm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUxZjY0MC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzA5Lm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXVybChsYWwgIiBhbGEgICAgIGwgIikKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzA5Lm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vb3V0L3VybF8wOS5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUxZjY0MC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi9vdXQvdXJsXzA5Lm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdXJsKGxhbCAiIGFsYSAgICAgbCAiKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL3VybF8wMC5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi91cmxfMDAuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTFmODg5Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL3VybF8wMC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi14dXJsKCBsYSBsYSBsYSApCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi91cmxfMDEuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vdXJsXzAxLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ3NDExMy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi91cmxfMDEuY3NzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdXJsKCBsYSBsYSBsYSApCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi91cmxfMDIuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vdXJsXzAyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJhMTc0Mi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi91cmxfMDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi11cmwoIGxhIAotbGEgbGEgKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vdXJsXzAzLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL3VybF8wMy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0YWU4ZWYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vdXJsXzAzLmNzcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXVybCggImxhIGxhIGxhIiApCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi91cmxfMDQuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vdXJsXzA0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMwMzA1Yy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi91cmxfMDQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi11cmwoICJsYSAKLWxhIGxhIiApCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi91cmxfMDUuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vdXJsXzA1LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRkMmQwMy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi91cmxfMDUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi11cmwoIGxhbGEgXCkgbGEgbGFcCi0pCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi91cmxfMDYuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vdXJsXzA2LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg5NTEyOS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi91cmxfMDYuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi11cmwoIGxhbGEgXCkgbGEgbGFcCi1sb2xvICBcCi1sbykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL3VybF8wNy5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMvbWFpbi91cmxfMDcuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjViNWFiLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL3VybF8wNy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi11cmwoIGxhbGFsYSAgbApkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vdXJsXzA4LmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL3VybF8wOC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMWU2ZGIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vdXJsXzA4LmNzcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXVybCggImxhbGFsYSAgbApkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vdXJsXzA5LmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy9tYWluL3VybF8wOS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3NDM1YmIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL21haW4vdXJsXzA5LmNzcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXVybCggICBsYWwgIiBhbGEgICAgIGwgIiApCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL1JFQURNRSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDFiNTY4Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotVGhlc2UgdGVzdCBpbnB1dHMgYXJlIG9yaWdpbmFsbHkgdGFrZW4gZnJvbSB0aGUgWVVJIGNvbXByZXNzb3Igc3VpdGUKLShodHRwczovL2dpdGh1Yi5jb20veXVpL3l1aWNvbXByZXNzb3IvKS4gVGhlIG91dHB1dHMgKGluIHRoZSBvdXQvIGRpcmVjdG9yeSkgYXJlCi1teSBvd24uCi0KLVRoZSBZVUkgdGVzdHMgYXJlIGxpY2Vuc2VkIGFzIGZvbGxvd3M6Ci0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotWVVJIENvbXByZXNzb3IgQ29weXJpZ2h0IExpY2Vuc2UgQWdyZWVtZW50IChCU0QgTGljZW5zZSkKLQotQ29weXJpZ2h0IChjKSAyMDExLCBZYWhvbyEgSW5jLgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLAotd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKLWNvbmRpdGlvbnMgYXJlIG1ldDoKLQotKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUKLSAgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlCi0gIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlcgotICBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0qIE5laXRoZXIgdGhlIG5hbWUgb2YgWWFob28hIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCi0gIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBZYWhvbyEgSW5jLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLUFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi1GT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLVNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi1DQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLU9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLVRoaXMgc29mdHdhcmUgYWxzbyByZXF1aXJlcyBhY2Nlc3MgdG8gc29mdHdhcmUgZnJvbSB0aGUgZm9sbG93aW5nIHNvdXJjZXM6Ci0KLVRoZSBKYXJnIExpYnJhcnkgdiAxLjAgKCBodHRwOi8vamFyZ3Muc291cmNlZm9yZ2UubmV0LyApIGlzIGF2YWlsYWJsZQotdW5kZXIgYSBCU0QgTGljZW5zZSAtIENvcHlyaWdodCAoYykgMjAwMS0yMDAzIFN0ZXZlIFB1cmNlbGwsCi1Db3B5cmlnaHQgKGMpIDIwMDIgVmlkYXIgSG9sZW4sIENvcHlyaWdodCAoYykgMjAwMiBNaWNoYWwgQ2VyZXNuYSBhbmQKLUNvcHlyaWdodCAoYykgMjAwNSBFd2FuIE1lbGxvci4KLQotVGhlIFJoaW5vIExpYnJhcnkgKCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL3JoaW5vLyApIGlzIGR1YWxseSBhdmFpbGFibGUKLXVuZGVyIGFuIE1QTCAxLjEvR1BMIDIuMCBsaWNlbnNlLCB3aXRoIHBvcnRpb25zIHN1YmplY3QgdG8gYSBCU0QgbGljZW5zZS4KLQotQWRkaXRpb25hbGx5LCB0aGlzIHNvZnR3YXJlIGNvbnRhaW5zIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBmb2xsb3dpbmcKLWNvbXBvbmVudCBmaWxlcyBmcm9tIHRoZSBSaGlubyBMaWJyYXJ5OgotCi1bb3JnL21vemlsbGEvamF2YXNjcmlwdC9EZWNvbXBpbGVyLmphdmFdCi1bb3JnL21vemlsbGEvamF2YXNjcmlwdC9QYXJzZXIuamF2YV0KLVtvcmcvbW96aWxsYS9qYXZhc2NyaXB0L1Rva2VuLmphdmFdCi1bb3JnL21vemlsbGEvamF2YXNjcmlwdC9Ub2tlblN0cmVhbS5qYXZhXQotCi1UaGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlc2UgZmlsZXMgYXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNUEwgdiAxLjEKLSggaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sICkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYmFja2dyb3VuZC1wb3NpdGlvbi5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2JhY2tncm91bmQtcG9zaXRpb24uY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2RmZjgyLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYmFja2dyb3VuZC1wb3NpdGlvbi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWEge2JhY2tncm91bmQtcG9zaXRpb246IDAgMCAwIDA7fQotYiB7QkFDS0dST1VORC1QT1NJVElPTjogMCAwO30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2JhY2tncm91bmQtcG9zaXRpb24uY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYmFja2dyb3VuZC1wb3NpdGlvbi5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODk1ZTFhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYmFja2dyb3VuZC1wb3NpdGlvbi5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH1ie2JhY2tncm91bmQtcG9zaXRpb246MCAwfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYm9yZGVyLW5vbmUuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9ib3JkZXItbm9uZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZjljYmEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9ib3JkZXItbm9uZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWEgewotICAgIGJvcmRlcjogbm9uZTsKLX0KLWIge0JBQ0tHUk9VTkQ6bm9uZX0KLXMge2JvcmRlci10b3A6IG5vbmU7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYm9yZGVyLW5vbmUuY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYm9yZGVyLW5vbmUuY3NzLm1pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVkMWI2NS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2JvcmRlci1ub25lLmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1he2JvcmRlcjowfWJ7YmFja2dyb3VuZDowfXN7Ym9yZGVyLXRvcDowfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYm94LW1vZGVsLWhhY2suY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9ib3gtbW9kZWwtaGFjay5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMGUzMmYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9ib3gtbW9kZWwtaGFjay5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNlbGVtIHsgCi0gd2lkdGg6IDEwMHB4OyAKLSB2b2ljZS1mYW1pbHk6ICJcIn1cIiI7IAotIHZvaWNlLWZhbWlseTppbmhlcml0OwotIHdpZHRoOiAyMDBweDsKLX0KLWh0bWw+Ym9keSAjZWxlbSB7Ci0gd2lkdGg6IDIwMHB4OwotfSAKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYm94LW1vZGVsLWhhY2suY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYm94LW1vZGVsLWhhY2suY3NzLm1pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0MDE3OS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2JveC1tb2RlbC1oYWNrLmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jZWxlbXt3aWR0aDoxMDBweDt2b2ljZS1mYW1pbHk6IlwifVwiIjt2b2ljZS1mYW1pbHk6aW5oZXJpdDt3aWR0aDoyMDBweH1odG1sPmJvZHkgI2VsZW17d2lkdGg6MjAwcHh9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9idWcyNTI3OTc0LmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYnVnMjUyNzk3NC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYmMyYzguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9idWcyNTI3OTc0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLS8qCXRoaXMgZmlsZSBjb250YWlucyBubyBjc3MsIGl0IGV4aXN0cyBwdXJlbHkgdG8gcHV0IHRoZSByZXZpc2lvbiBudW1iZXIgaW50byB0aGUgCi0JY29tYmluZWQgY3NzIGJlZm9yZSB1cGxvYWRpbmcgaXQgdG8gU2l0ZU1hbmFnZXIuIFRoZSBleGNsYWltYXRpb24gYXQgdGhlIHN0YXJ0Ci0Jb2YgdGhlIGNvbW1lbnQgaW5mb3JtcyB5dWljb21wcmVzc29yIG5vdCB0byBzdHJpcCB0aGUgY29tbWVudCBvdXQgKi8KLSAKLS8qISAkTGFzdENoYW5nZWRSZXZpc2lvbjogODEgJCAkTGFzdENoYW5nZWREYXRlOiAyMDA5LTA1LTI3IDE3OjQxOjAyICswMTAwIChXZWQsIDI3IE1heSAyMDA5KSAkICovCi0gCi1ib2R5IHsKLSAgICB5bzogY2F0czsKLX0KLXVsW2lkJD1mb29dIGxhYmVsOmhvdmVyIHt5bzogeW87fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYnVnMjUyNzk3NC5jc3MubWluIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9idWcyNTI3OTc0LmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwY2MwMDcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9idWcyNTI3OTc0LmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vKiEgJExhc3RDaGFuZ2VkUmV2aXNpb246IDgxICQgJExhc3RDaGFuZ2VkRGF0ZTogMjAwOS0wNS0yNyAxNzo0MTowMiArMDEwMCAoV2VkLCAyNyBNYXkgMjAwOSkgJCAqL2JvZHl7eW86Y2F0c311bFtpZCQ9Zm9vXSBsYWJlbDpob3Zlcnt5bzp5b30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2J1ZzI1Mjc5OTEuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9idWcyNTI3OTkxLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRjODBmZi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2J1ZzI1Mjc5OTEuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotQG1lZGlhIHNjcmVlbiBhbmQvKiFZVUktQ29tcHJlc3NlciAqLygtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkgewotICBhewotICAgIGI6IDE7Ci0gIH0KLX0KLQotCi1AbWVkaWEgc2NyZWVuIGFuZC8qISAqLyAvKiEgKi8oLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsKLSAgYXsKLSAgICBiOiAxOwotICB9Ci19Ci0KLQotQG1lZGlhIC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowIHsKLSAgYXsKLSAgICBiOiAxOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9idWcyNTI3OTkxLmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2J1ZzI1Mjc5OTEuY3NzLm1pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY1NzU1YS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2J1ZzI1Mjc5OTEuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBtZWRpYSBzY3JlZW4gYW5kLyohWVVJLUNvbXByZXNzZXIgKi8oLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApe2F7YjoxfX1AbWVkaWEgc2NyZWVuIGFuZC8qISAqLy8qISAqLygtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7YXtiOjF9fUBtZWRpYSAtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MHthe2I6MX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9idWcyNTI3OTk4LmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYnVnMjUyNzk5OC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNmMwMGUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9idWcyNTI3OTk4LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotLyohIHNwZWNpYWwgKi8KLWJvZHkgewotCi19CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2J1ZzI1Mjc5OTguY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYnVnMjUyNzk5OC5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmFiZjhhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvYnVnMjUyNzk5OC5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLyohIHNwZWNpYWwgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2J1ZzI1MjgwMzQuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9idWcyNTI4MDM0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMxNWNiMS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2J1ZzI1MjgwMzQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1hW2hyZWYkPSIvdGVzdC8iXSBzcGFuOmZpcnN0LWNoaWxkIHsgYjoxOyB9Ci1hW2hyZWYkPSIvdGVzdC8iXSBzcGFuOmZpcnN0LWNoaWxkIHsgfQotCi0KLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9idWcyNTI4MDM0LmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2J1ZzI1MjgwMzQuY3NzLm1pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU0Mzc3Ny4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2J1ZzI1MjgwMzQuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWFbaHJlZiQ9Ii90ZXN0LyJdIHNwYW46Zmlyc3QtY2hpbGR7YjoxfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvY2hhcnNldC1tZWRpYS5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2NoYXJzZXQtbWVkaWEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDAyZjM4Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvY2hhcnNldC1tZWRpYS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLS8qIHJlOiAyNDk1Mzg3ICovCi1AY2hhcnNldCAndXRmLTgnOwotQG1lZGlhIGFsbCB7Ci1ib2R5IHsKLX0KLWJvZHkgewotYmFja2dyb3VuZC1jb2xvcjogZ29sZDsKLX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2NoYXJzZXQtbWVkaWEuY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvY2hhcnNldC1tZWRpYS5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2FmNDlkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvY2hhcnNldC1tZWRpYS5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQGNoYXJzZXQgJ3V0Zi04JztAbWVkaWEgYWxse2JvZHl7YmFja2dyb3VuZC1jb2xvcjpnb2xkfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2NvbG9yLXNpbXBsZS5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2NvbG9yLXNpbXBsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMzNlYzMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9jb2xvci1zaW1wbGUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0uZm9vLCAjQUFCQkNDIHsKLSAgYmFja2dyb3VuZC1jb2xvcjojYWFiYmNjOwotICBib3JkZXItY29sb3I6I0VlNjZhQSAjQUJDREVGICNGZUFiMkM7Ci0gIGZpbHRlcjpjaHJvbWEoY29sb3IgPSAjRkZGRkZGICk7Ci0gIGZpbHRlcjpjaHJvbWEoY29sb3I9IiNBQUJCQ0MiKTsKLSAgZmlsdGVyOmNocm9tYShjb2xvcj0nI0JCRERFRScpOwotICBjb2xvcjojMTEyMjMzCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9jb2xvci1zaW1wbGUuY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvY29sb3Itc2ltcGxlLmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMzllMjMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9jb2xvci1zaW1wbGUuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5mb28sI0FBQkJDQ3tiYWNrZ3JvdW5kLWNvbG9yOiNhYmM7Ym9yZGVyLWNvbG9yOiNlNmEgI2FiY2RlZiAjZmVhYjJjO2ZpbHRlcjpjaHJvbWEoY29sb3IgPSAjRkZGRkZGKTtmaWx0ZXI6Y2hyb21hKGNvbG9yPSIjQUFCQkNDIik7ZmlsdGVyOmNocm9tYShjb2xvcj0nI0JCRERFRScpO2NvbG9yOiMxMjN9CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2NvbG9yLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvY29sb3IuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzBiOGEwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvY29sb3IuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLmNvbG9yIHsKLSAgbWU6IHJnYigxMjMsIDEyMywgMTIzKTsKLSAgaW1wcmVzc2VkOiAjRmZFZWREOwotICBhZ2FpbjogI0FCQ0RFRjsKLSAgYW5kYWdhaW46I2FhNjZjYzsKLSAgYmFja2dyb3VuZC1jb2xvcjojYWE2NmNjYzsKLSAgZmlsdGVyOiBjaHJvbWEoY29sb3I9IiNGRkZGRkYiKTsKLSAgYmFja2dyb3VuZDogbm9uZSByZXBlYXQgc2Nyb2xsIDAgMCByZ2IoMjU1LCAwLDApOwotICBhbHBoYTogcmdiYSgxLCAyLCAzLCA0KTsKLSAgY29sb3I6IzExMjJhYQotfQotCi0jQUFCQkNDIHsKLSAgYmFja2dyb3VuZC1jb2xvcjojZmZlZTExOwotICBmaWx0ZXI6IGNocm9tYShjb2xvciA9ICNGRkZGRkYgKTsKLSAgY29sb3I6IzQ0MTEyMjsKLSAgZm9vOiMwMGZGMTEgI0FCQyAjQUFCYkNjICMxMjMzNDQ7Ci0gIGJvcmRlci1jb2xvcjojYWE2NmNjQwotfQotCi0uZm9vICNBQUJCQ0MgewotICBiYWNrZ3JvdW5kLWNvbG9yOiNmRkVlMTE7Ci0gIGNvbG9yOiM0NDExMjI7Ci0gIGJvcmRlci1jb2xvcjojQWJDOwotICBmaWx0ZXI6IGNocm9tYShjb2xvcj0gI0ZGRkZGRikKLX0KLQotLmJhciwgI0FBQkJDQyB7Ci0gIGJhY2tncm91bmQtY29sb3I6I0ZGZWUxMTsKLSAgYm9yZGVyLWNvbG9yOiMwMGZGMTEgI0FCQ0RFRjsKLSAgZmlsdGVyOiBjaHJvbWEoY29sb3I9IzExRkZGRkZGKTsKLSAgY29sb3I6IzQ0MTEyMjsKLX0KLQotLmZvbywgI0FBQkJDQy5mb29iYXIgewotICBiYWNrZ3JvdW5kLWNvbG9yOiNmZmVlMTE7Ci0gIGJvcmRlci1jb2xvcjojMDBmRjExICNBQkNERUYgI0FBQmJDYzsKLSAgY29sb3I6IzQ0MTEyMjsKLX0KLQotQG1lZGlhIHNjcmVlbiB7Ci0gICAgLmJhciwgI0FBQkJDQyB7Ci0gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiNmZkVFMTE7Ci0gICAgICBjb2xvcjojNDQxMTIyCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9jb2xvci5jc3MubWluIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9jb2xvci5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjIxMDNhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvY29sb3IuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5jb2xvcnttZTojN2I3YjdiO2ltcHJlc3NlZDojZmVkO2FnYWluOiNhYmNkZWY7YW5kYWdhaW46I2E2YztiYWNrZ3JvdW5kLWNvbG9yOiNhYTY2Y2NjO2ZpbHRlcjpjaHJvbWEoY29sb3I9IiNGRkZGRkYiKTtiYWNrZ3JvdW5kOm5vbmUgcmVwZWF0IHNjcm9sbCAwIDAgI2YwMDthbHBoYTpyZ2JhKDEsMiwzLDQpO2NvbG9yOiMxMmF9I0FBQkJDQ3tiYWNrZ3JvdW5kLWNvbG9yOiNmZTE7ZmlsdGVyOmNocm9tYShjb2xvciA9ICNGRkZGRkYpO2NvbG9yOiM0MTI7Zm9vOiMwZjEgI0FCQyAjYWJjICMxMjMzNDQ7Ym9yZGVyLWNvbG9yOiNhYTY2Y2NDfS5mb28gI0FBQkJDQ3tiYWNrZ3JvdW5kLWNvbG9yOiNmZTE7Y29sb3I6IzQxMjtib3JkZXItY29sb3I6I0FiQztmaWx0ZXI6Y2hyb21hKGNvbG9yPSAjRkZGRkZGKX0uYmFyLCNBQUJCQ0N7YmFja2dyb3VuZC1jb2xvcjojZmUxO2JvcmRlci1jb2xvcjojMGYxICNhYmNkZWY7ZmlsdGVyOmNocm9tYShjb2xvcj0jMTFGRkZGRkYpO2NvbG9yOiM0MTJ9LmZvbywjQUFCQkNDLmZvb2JhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZTE7Ym9yZGVyLWNvbG9yOiMwZjEgI2FiY2RlZiAjYWJjO2NvbG9yOiM0MTJ9QG1lZGlhIHNjcmVlbnsuYmFyLCNBQUJCQ0N7YmFja2dyb3VuZC1jb2xvcjojZmUxO2NvbG9yOiM0MTJ9fQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9jb21tZW50LmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvY29tbWVudC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNzNiOWUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9jb21tZW50LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotaHRtbCA+LyoqLyBib2R5IHAgewotICAgIGNvbG9yOiBibHVlOyAKLX0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvY29tbWVudC5jc3MubWluIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9jb21tZW50LmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyODAzNzEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9jb21tZW50LmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1odG1sPi8qKi9ib2R5IHB7Y29sb3I6Ymx1ZX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2NvbmNhdC1jaGFyc2V0LmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvY29uY2F0LWNoYXJzZXQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2NhNTY1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvY29uY2F0LWNoYXJzZXQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyogVGhpcyBpcyBpbnZhbGlkIENTUywgYnV0IGZyZXF1ZW50bHkgaGFwcGVucyBhcyBhIHJlc3VsdCBvZiBjb25jYXRlbmF0aW9uLiAqLwotQGNoYXJzZXQgInV0Zi04IjsKLSNmb28gewotCWJvcmRlci13aWR0aDoxcHg7Ci19Ci0vKgotTm90ZSB0aGF0IHRoaXMgaXMgZXJyb25lb3VzIQotVGhlIGFjdHVhbCBDU1MgZmlsZSBjYW4gb25seSBoYXZlIGEgc2luZ2xlIGNoYXJzZXQuCi1Ib3dldmVyLCB0aGlzIGlzIHRoZSBqb2Igb2YgdGhlIGF1dGhvci9hcHBsaWNhdGlvbi4KLVRoZSBjb21wcmVzc29yIHNob3VsZCBub3QgZ2V0IGludm9sdmVkLgotKi8KLUBjaGFyc2V0ICJhbm90aGVyIG9uZSI7Ci0jYmFyIHsKLQlib3JkZXItd2lkdGg6MTBweDsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2NvbmNhdC1jaGFyc2V0LmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2NvbmNhdC1jaGFyc2V0LmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZThkM2IuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9jb25jYXQtY2hhcnNldC5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQGNoYXJzZXQgInV0Zi04IjsjZm9ve2JvcmRlci13aWR0aDoxcHh9I2Jhcntib3JkZXItd2lkdGg6MTBweH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LWRvdWJsZXF1b3Rlcy5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LWRvdWJsZXF1b3Rlcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YTEzMTUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1kb3VibGVxdW90ZXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLXJpbmctdm1sLAotLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLWNlbnRlci1idXR0b24tdm1sLAotLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlciB2XDpvdmFsLnl1aTMtZGlhbC1tYXJrZXItbWF4LW1pbiwKLS55dWkzLXNraW4tbmlnaHQgdlw6b3ZhbC55dWkzLWRpYWwtbWFya2VyLW1heC1taW4sCi0ueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtbWFya2VyLXZtbCwKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1oYW5kbGUtdm1sIHsKLSAgICBiYWNrZ3JvdW5kOiBub25lOwotICAgIG9wYWNpdHk6MTsKLX0KLQotZGl2LmJhc2U2NC1kb3VibGVxdW90ZXMgewotICAgIHdpZHRoOjEwMHB4OwotICAgIGhlaWdodDoxMDBweDsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCggICAiZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwlMkY5aiUyRjRBQVFTa1pKUmdBQkFnRUFaQUJrQUFEJTJGNFJmSlJYaHBaZ0FBVFUwQUtnQUFBQWdBQndFU0FBTUFBQUFCQUFFQUFBRWFBQVVBQUFBQkFBQUFZZ0ViQUFVQUFBQUJBQUFBYWdFb0FBTUFBQUFCQUFJQUFBRXhBQUlBQUFBZUFBQUFjZ0V5QUFJQUFBQVVBQUFBa0lkcEFBUUFBQUFCQUFBQXBBQUFBTkFBRDBKQUFBQW5FQUFQUWtBQUFDY1FRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlRNaUJOWVdOcGJuUnZjMmdBTWpBd09Eb3dOem94T1NBeE5EbzFPRG93TlFBQUE2QUJBQU1BQUFBQiUyRiUyRjhBQUtBQ0FBUUFBQUFCQUFBQndxQURBQVFBQUFBQkFBQUJSUUFBQUFBQUFBQUdBUU1BQXdBQUFBRUFCZ0FBQVJvQUJRQUFBQUVBQUFFZUFSc0FCUUFBQUFFQUFBRW1BU2dBQXdBQUFBRUFBZ0FBQWdFQUJBQUFBQUVBQUFFdUFnSUFCQUFBQUFFQUFCYVRBQUFBQUFBQUFFZ0FBQUFCQUFBQVNBQUFBQUglMkYyUCUyRmdBQkJLUmtsR0FBRUNBQUJJQUVnQUFQJTJGdEFBeEJaRzlpWlY5RFRRQUMlMkYlMkI0QURrRmtiMkpsQUdTQUFBQUFBZiUyRmJBSVFBREFnSUNBa0lEQWtKREJFTENnc1JGUThNREE4VkdCTVRGUk1UR0JFTURBd01EQXdSREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFTkN3c05EZzBRRGc0UUZBNE9EaFFVRGc0T0RoUVJEQXdNREF3UkVRd01EQXdNREJFTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TSUyRjhBQUVRZ0FkQUNnQXdFaUFBSVJBUU1SQWYlMkZkQUFRQUN2JTJGRUFUOEFBQUVGQVFFQkFRRUJBQUFBQUFBQUFBTUFBUUlFQlFZSENBa0tDd0VBQVFVQkFRRUJBUUVBQUFBQUFBQUFBUUFDQXdRRkJnY0lDUW9MRUFBQkJBRURBZ1FDQlFjR0NBVURERE1CQUFJUkF3UWhFakVGUVZGaEV5SnhnVElHRkpHaHNVSWpKQlZTd1dJek5IS0MwVU1ISlpKVDhPSHhZM00xRnFLeWd5WkVrMVJrUmNLamREWVgwbFhpWmZLemhNUFRkZVB6UmllVXBJVzBsY1RVNVBTbHRjWFY1ZlZXWm5hR2xxYTJ4dGJtOWpkSFYyZDNoNWVudDhmWDUlMkZjUkFBSUNBUUlFQkFNRUJRWUhCd1lGTlFFQUFoRURJVEVTQkVGUllYRWlFd1V5Z1pFVW9iRkNJOEZTMGZBekpHTGhjb0tTUTFNVlkzTTA4U1VHRnFLeWd3Y21OY0xTUkpOVW94ZGtSVlUyZEdYaThyT0V3OU4xNCUyRk5HbEtTRnRKWEUxT1QwcGJYRjFlWDFWbVoyaHBhbXRzYlc1dlluTjBkWFozZUhsNmUzeCUyRiUyRmFBQXdEQVFBQ0VRTVJBRDhBOVZTU1NTVXBKSkpKU2tra2tsS1NTU1NVczR1RFNXaVhSb09KS0ZpM092eDJXdmJzZTRlNWdNd1JvNXNveXBkT3lOOW1UU1JIcFd2ajRPYzQlMkZ3RFZmOVdrcHVwSkpKS1Vra2trcFNTU1NTbEpKSkpLVWtra2twJTJGJTJGMFBWVWtsQ3F4dHRiYkclMkZSZUE0ZkFwS1pwSkpKS1VvMldOcnJkWTh3MWdMbkh5QWxWT3NXdm93WFpEWiUyRlFPWmE4RDl4cm1tMyUyRk5yM1BVc3dtJTJGcG1RR2FteWw0YkhpV3VoSlRZcXNGdFRMQnc5b2Q5NFUxUTZGa2ZhT2s0dHN6dXFZZndWOUpTbGwxJTJGb090MnNPZ3VEWGdlVG03ZiUyRlBtTiUyRndDQ0xVV1oxVmhyeXNiS0ElMkJqdWE3emd0dVolMkYxRnFJVVhUU1FjdktaaTQ3c2g3WE9ZMHRCRFlKaHptczNha2ZSM2JsVmQxM3ByTXR1SSUyQndzZSUyRjZMM0FobTduMCUyRlUlMkJpMnphZnprRk9ncTklMkJkajBaRk9NNGszWkR0ckdORW5oenQ3djNXYldQVThiSnB5YXZWcGR1WnVjMmVOV09OYjIlMkYyWHRYT1kyVlU3ckE2aG5POVJ1SlMlMkJyMWhPMWxndUdKYnVZejJleHR2djNmekxQVSUyRndDRVNVOVFra2trcFNTU1NTbEpKSkpLZiUyRiUyRlI5VldmMGl3aXUzRmY5TEdzZXdUJTJCNkQ3UCUyRkF5eHkwRm11bkg2eFBETXBnZCUyRmJaRlQlMkZ3RG9PeCUyRiUyQjIwUXAwbEMwMkN0eHFBTHdEdEI0SjhGTkpCVFZvdnglMkJvNGp2YkxMR2xsdFR1Uk1zc3JmJTJGQU5KaXolMkJoWkRxTU8lMkZFeUNYMmRPYzZ0JTJCa3VjMWdtdCUyQjMlMkZoYVBUZW9aNXM2UjFJWnJCR0Rsa052SSUyQmpYY1lZeXglMkY3dFdWOUIlMkZ3RHclMkZ3RHdseUQxTHFXSDBqcTJOMU81NXJ4T29nWTFyd0M0Qzl1dVA2bXpkdDlXbDF2NlQlMkJiJTJGQUZkRlMlMkYxTXlxJTJGMlZUaHVzYSUyQjJ0c3QyazZzUHVZNzNCcm0lMkZvM1Z2MmZ5JTJGM0YwUzRUQXpxJTJCbSUyRldEcXVLR25iaFdPeWE2MkRVVWxyY215dWxrdFo2ZjJleTE5V3o4JTJGMkxzMlolMkJGWXgxakw2eXhnQmUlMkZjSUFJM0NYZk5JcVpYM3Vyc3Fxclo2ajdUcUpnTlkyUFVzUFAwZHlwZldKJTJGbzlOT1QyeHJhckhUeHMzdFprZiUyQnk3N1ZSNnY5YmVqZE5zYmtiM1picW0yc2ZWamdPT2hyZFpGbGpxc2ZmWHMlMkZtdlY5ViUyRiUyQkRYSGRaJTJCdXZVOHpBNmklMkJqMDJZMXphd2FaTHQyTFkyMXRsdGI3WE9iNmo2JTJGd0RSMVYlMkZ6VjM2djZyUFZZRlUlMkJpQ3M1UFM3Y2Q0M08yV1VPQjc3ZDFYJTJGVDI3bHd2Vm5OeUtLOGQxNXE2aGlqMjA3bzlkZzNESGRXOW05ekx2OEFRJTJGNFd1NzFLJTJGVHRyOWFxekolMkJ1SFY4dG1SMHpOb3lMdnNYVThOcjdjZHRqbXROMUo5SyUyQjJwb2RzYmsxJTJGbyUyRjhBMFlzbkc2dGUlMkJuTFpiZFhYWTZwdHRBRE53dWN3bWh2MmNXYnYwdG5yJTJGcEtuZnBLYktmOEF0c3FEMUR2cmpuZlY3MGNLbGxkZ3pnYnFqZjdRSEIzcDJzRzBzYjZsdjAlMkZmWjZURWNaZzYzMHh6MnZleks2alZiZmhWdGY2YmlRJTJCeGx0bU5ZN2EyejlKczNWdSUyRndheXZySGgxJTJCaGhkS3YzWHViakJoWTl3RGJIdFBwT2RYa09INnQxRGQlMkZSc2wlMkY2QyUyRndEb21WN0ZnOVdjJTJGRiUyQnEzUkw2YmliZW41V1ZqaDRsbGpkeGJleGx0ZjA2TGE5dnZwJTJGTSUyRndBRlolMkZoRXVxbjByNmxmWE05V1l6cHZWb282d3h2Y2JCY0dqOUx0cjA5TExvajlieGYlMkJ2VSUyRm9mNW16OWF2ckpkMCUyQjJqQndIQVpUcmNkMTdpQTdiVlphMm5ZMEglMkZDWHc5diUyRkFBZGYlMkZXbDV6aWRRWjlaY1kzbDNvZGR3ZzJ6MW1IWjZ6V2ZRdjN0MiUyQm5rMCUyRndDbiUyRndEUmY4eGY2RGYxRHF2WEdaJTJCZTV0enNpN0dkNmxtMmtQc3FOYnFxT0cxJTJGNEN1eG5wdCUyRlM3JTJGOUk5QUxqUjFHaDdmOTYlMkJ1SkpwQTFLWmoyV05EbU9EbW5od01oSmF5U1NTU1UlMkZ3RCUyRjB2VlZuOWFpckZHWVNHakVjTFh1T2tWJTJGemQ1SiUyRmRaVSUyRndCWCUyRnJhMEVITTlEN0pmOXBFNCUyRnB2OVlIWDJiVDZtbjlSSUtjRTlVNmxnWG5KRHYybDBqTiUyRlM0OTdTMzlDNTMwc095eG4lMkJCYyUyRiUyQmg1UDgzJTJGMmt5ZlMlMkZSNU5sUHJ2MTZ1d2N6RXhzUEhGb3pMQlJXSHo2cnJpV005T3V2NkhzOVQzdnNldWU2QjlidW9aRjV4QlU4NEJEQyUyQnRvWllXMVBjekclMkIwMkd4bTcxR2IyWFAyZm9kN1A1bXRjdDE2N3ElMkZUODdHZGZrJTJGYnNjV0hJNlYxTnJRTkd1M08yTlo2ZnA1Rk45ZFRjckgzZXBSNmY5Ukt3UllYemhLRXVHWW8lMkZ4ZlNNdk02bFpsRiUyRlZmU29iVTExUTlNR3lxTGZhJTJCclA5UEpzcjlLejA5bjZiR3ElMkY3ZFdOMXo5VnhDM0tmWlQwJTJCJTJCUFV5R2c1TklhUGRVN2V6WmU3S3hQUiUyRlI1R3lyMXNYOURiNiUyRndEZ3VaeCUyQnYzNTJiZTRXTndmdCUyQjl0YjJuMjFtemElMkYwN1huMiUyRnA3cW1WZXA2ZGJQMHZxZm9scVpEN21ZOTFlRG1YaDlwQkFaREdqVDlhd3ZiJTJCa3AzVyUyRnAyTWRrZnBhdjFiJTJCWFViMFd1bFRlUDIzaDVEaTNKTDNVWVdUWXpsemJLbjFzYzVyTjdiYU0zRlo5cHc4eHJ2U3ZyJTJGUWYwaW02dXZINnZZN0c2aGZTMm14MVdGWWFxN2JuayUyQm8ycjByS1BUYTdidXN0eFgyMCUyQnolMkJsZjRSVyUyRnFQWGVNNDAzcyUyRlE5THBkYlE0djk3V2w0RGNXMW51ZDZQcWZySDJlOW5zek1hdk54JTJGczklMkYyaEE2aTVyNzdIWkxIMjRUbjFXNCUyQlV3ajJQdmEzSmRqNWJmemFIYjhuN0ZrJTJGNFA5WXhQMHRYOHd1bHFhV2ZiMUN6WjZHYU0zMDYyMldERCUyRlNWMW1wM3NmWTZ0aldPc1kxdGY4Nzc2YSUyRlRRN3MyN3FGTlZJcnF3QWZVc2JaUlh0OVMwTjlLeTF0WDgzJTJCZ3JlJTJGMXNlaiUyRkFFMWx6S2x0ZER0Ymk5WkpzcXFiVGFCWGRTMFRiVzY4UHljVXhOajhxckliUiUyRnBQVSUyRlNiNiUyRlR5djZWV2YwcXZPcnptc1lhc25HekhtazdneDFaYTZLMlhSN3NkJTJCNXY2Szc5SlhpM2JQVSUyRlY4aTcxUlJVNSUyRldhTE12NmtZajdTR1g5TDZnJTJCcUslMkZvc3J5bWV1eDFjZjRCMTdmWXNycHVQbU54ZnR6NjNQY3dsOURXRFEyc0lxWmtOSiUyRk5aZTZsdVI2ZiUyRkFBWCUyRkFBUzFmMnBYWDB2cSUyQkpsbjdMZmtWVnRhM1pBZmw0OTI5bXluJTJGQTc2ckxxODZyJTJCYm8lMkY0cXloVnJ1b1pmU2VrNGxkbU0xMlBlMjI3RDlYUUJ0dnB0dTMlMkI3ZDZWcjY2WGYyUFUlMkZ3aVNuc3VxbkR5TE1mRnRNWk9SaiUyQnJYU1BlSEZzZW8ybDdnMzFMYSUyRlYlMkJoJTJGMm9xJTJGd2ZxZnBGem5WY2Q5dURaaXZheHpEWlhhMXp6dFphWEIxTFclMkJ2JTJGZ2IlMkZaVlhpNXR2ODMlMkZSc2o5QXNMcWZYdjJqMCUyRnBYcVBGZWRnTnVyZmExMEYzdXFzeDhsdjhBbzNPYnZyZiUyRkFNVDZuJTJCRlFxdXE1OSUyRlVSZWMxemI3Q0hYTWM4aHRtdzduNDd2OEJ0dWNQVWI2djZQOUxkNjlpTm9TOUg2VmswWnpjcGozdHFxZVcxQUF0dWMlMkY4QW03TWV5aHY2V3ZaJTJGTlpYJTJGQUlFdWd6dWsxNGVMaU42OWZiaTQ5dTZ3Z0JqeVdOYjZkUDZJT2E1MlY2dnQyNDdQMGREJTJGQUZQMGFqamRjNmtCZWVrWVFkMURJczJ0c1pWWmJkVlh0OXRZcXNHOSUyQjMlMkZUUFolMkJsJTJGd0JDc2FqcFhWJTJCdFgyWndvJTJGYWw3V3V2djlTME1lYTIlMkZUMiUyQnZaN20xZTFqNkdWNzZQWiUyRnBLME5FN2F2cEgxWjY5bmRVNlRpNG1QNm1WWmt0QmRia1AzdXFiV1RSa2pLdVlHYjl0MWU2djI3NzZyUDlJdXl3OFZ1Smp0b2FTOHRrdWVlWE9jZHozJTJGMm5MeWI2dmRadjZEakRLd21WdDNsemJzWnozVnNaY0hsdVRnWDQ5OWhmUll4dXpKd24lMkZ6bnN5S3JMTHY4SDJ2VCUyRnI5aE9ESyUyQnNNJTJGWnVTV2t2cnRGakMxd0xtdnIlMkZXS3FXJTJGbSUyQnpiWiUyQmtSUjR2VnBLbjAzcSUyRlRlcTQ3TW5wJTJCUXklMkJ0N1d2RzAlMkI0QnczTjlTcyUyRnBLJTJGJTJCdU5WeEJUJTJGQVAlMkZUOVZUT2ExN1N4d0RtdUJEbW5VRUhzVTZTU254ZjZ4OUN6UHF0MUVDaXg3R01lYmVuNVEwY2FuZXl5bHp2b3V0bzNNcnVaJTJGaGF2MG5wJTJGcEZVcnlhTWpGdnJ6cHM2ZGtQYlptVXNIdng3ekZiZXI0ZjdyYkxQNld6JTJGQUVsbiUyQml2WXZZJTJCdTlMNmYxWHBsMkgxR0cwT0c3MVNRMDF1SDBiMlBkOUI3UCUyRlViJTJGd0JHdkg4dnBGM1Q3JTJGUXBjSDVOSWVhN2F6NmxlWFNkMiUyQnpIamRXNzBxSGJNbkUlMkZ3bFNackUyTnV6ZmpLSE1ZJTJCR2ZwelIybiUyRkw5SDk1d00lMkZCeU9rNWh4c2dpeXV3YjZybTYxM1ZINk4xWCUyRkFLTXJXMTBqcWJybUhEeUhsOE1oalkzRzZzSGQ2UE8zMThkdjZlaXowN2ZXOVAwdiUyQk9IaVB4YzZuOWo1NTJZZGgzWW1WeTdGdFA1JTJCdnZmaXUlMkZ3JTJGJTJGQiUyRnBmNXplaFl2MWE2cFZrNVdMbmglMkJKWmhNTDZybWlXdnNCWTZ0MUZuMG4xTlk3N1R2cCUyRlNmOFduaWpxTlduT0VzY2pHUTRaQjdPaWcwZlY3TGYwMXJyOHJxUjJ0ZXozWFBiQng2N1hzWXpheXhqYk1sOW0zOCUyRjlKJTJCbCUyRlMlMkJwenJ2VXhNV3F2cU5WdUprc3gzNDAyelc1b29zYmRTY2lnNzI1T0hkOXFZNnYlMkJjMlpPTFQ2Tm44OHkzZTZYMXV5azlOZXh6bllkJTJCUGRpMk1jMWxUeGw0enR6bld1M2JLZldaWlhiczlUMDZmMHlwZFk2SjFIciUyRlZIOVdydHBzeDZtTXFGRFMlMkYxV2lzRjMwWE5hNSUyQjU3N2JmMGV5eiUyRlJWJTJCcW5Id1cxUm90REY2eGF5NDlUdmlrczlPSE5CQWM5ZzJzZmMxbTdadTIlMkZvRyUyRlF4djNQU1Q5THcyZFRibE0lMkIxVzFzZERpeG9NMnZ1M2YwOTM2T3QzcE9ac3VycCUyRlE1SCUyQmolMkZ3YUpqNEdYZjA1MlpqZXBSamJtT3J5d056TmpIdWxoOU1lZzV6TiUyQjFscm4lMkY0UjlmcCUyRnBGWXhjSEQ2ZXk2bkl0ZFNHQU90ZGxGd2hsaCUyRlJ1SHBOM1BwYnY4QTV4bnFlbWdGT1oxJTJGRHlNVzc3VDFESU9ReTR2cmE5MWJxQzAwZW4lMkJpWXglMkYwNk5ycW5ldiUyRkFJZiUyRkFFajFXeGFHMnN4S09vOU11NmlLMzJVWWVPTEhNTDN2THJOcnJtdTMlMkJsdiUyRkFQUmkxY3ZwbDFQVXFXM05maDVWSjM0JTJCTm1POVhFdXJIdSUyRlY3dDFqR01zWWYwbm9QOW4lMkZBQU5xdjlRNlc4NHc2MzBobjJjdUZkMWpjWUd5c2pTNnF6THhtaXUzRnlhZHY4OTZOWCUyQmwlMkIyZXFoU1NCUTF1JTJGd2VkNno5WCUyQnJ0RkpIMWRaajFhZ0VOc3FadUlCOUVQc3Zia1c3V2o2ZVMlMkY2ZnElMkJqJTJCaldPY2JOdzhobnFkTnhxM3RpelpZWE9hNFR5N2ZrV2JtTmQlMkZPYmZvZjRSZHBUMWZxSFVzMXJjJTJGTGZrdHlSVTJ2R2E0YlNITmVQdEZMM2VsNlZtTGxWZWpaN2YwbSUyRjFjaiUyQlolMkIwV2J2U2ZxbjAlMkZxMWVUamRSSWRsVnNwc3FjeHdCcWM4UGJmVyUyQnJYMzc2JTJGVHRmJTJGQUtIMGJjUzZ2MldKWHF1bGo0WUNYRURacXVyeG4xZHhYZFJvc3V3NzhoblhjUjVkU1d1MjJPclkyYnFzZG4wM1pGVHQ5MzJPejJaV0w2bFZMUFdvWFMxOUh6dXA5UHElMkJzZlRNWXR5OGtuN1pSWERDeTVoZFZiMURFcmUlMkY5TlU3OUx2eEhiTGNsajdLZjVySXNwWEU1bVBtOUo2cSUyRkxxYTgyWXJtdmZWSkhxVXNkJTJCZ3lxTGF0bG4wYSUyRjAzcFA4QVd4TG1lclYlMkI1aiUyQnolMkZVN3F2UiUyQnA5Q290NlFObExKYlpRNXhkWlhiOU8xbDczUzk5am51MyUyQnE3JTJCZSUyRm5FbU41N3F2MVg2YjljJTJGcTk5b3hXTnglMkJ1WXhjeXg3ZzlyamMyUFh4TTV0MzZ4NmRqbXQ5SDF2MDJMJTJCaTlMJTJGQ1ZXY3o5VlByNTFucFBXWDlIJTJCc3h1eThiSXRGTm95RHZ0b3Q5dEljTiUyRjA2SGUzMTZQJTJGQUVLbyUyRndBSjlwOWhiWFcxN250YUE5OGIzQVFYUUlidVA1eTQzJTJGR0I5UTJkZnAlMkZhWFRXdFoxaWxvRUdHaklZMyUyRkFQZTclMkJheUclMkY4QWFmSiUyRjZ6YiUyQmklMkZTVUpUMlRLNjZ4dHJhR0FBQUJvQUVBYlc4ZnlWSmVjZlVicVA4QWpIUFYzMWRYeE1qSjZjJTJGYXkyN0xhTWQxSmFOZ3NvRHhYOW85cmYwemFXMiUyQnIlMkZQZXAlMkZwUFIwbFAlMkY5VDFWSkpKSlNETkwlMkZzcjlnZVhHQUJXMXJuYWtENkYzNlAlMkJzdUF3dW1WJTJGV1hOcnhIdmN5bXFoMlM3SXFMblJhJTJCN0pmajJVUGNHdHFkdnlmVnNwWjdLJTJGUSUyQnkxJTJGb2FWNkZmajA1RlpxdllMS3lRUzEzRWc3bSUyRjlKS2ltdkhwcm9yRVYxTkRHRHdEUnRha2tFZzJOQ05ueERxZEdiMExydTNxRkRIWDQxckxUV0d4VmV5Ujc2MjZ0ZFZtTmElMkYxUDNMUFdyOWkyY216cnBZNXRkQjZnenBMN0txN1dHWFBxcWY2RDhISWMxZ1o5dXBvJTJGN1QlMkZ6bVZYJTJGQURYcXIwYnJPRjAlMkI0MTM1YldWRmdjMDVrRDFXTVAwNmFyaTE3cTI1UDgxWiUyQiUyRlglMkJpJTJCbmF1VHlzZnFuUWVvTTZoMDZsOTFlVzJINGp3ZjF1aGdjNzBMcTNEZFYxWEd4bTc4ZDclMkZ3Q2ZvJTJGUVhmcEs3R0lSRlg0czJmTjd2QWVHcFJqd2s5M0l5T2o1VkRuTjZVNSUyRlVNYSUyRmZsWWxMR3VMbSUyQnF4bnBmYWRyRzF0ZGszMDJVZmF2JTJCczJlbiUyRk5yUSUyQnJkOSUyQk5sTmRmUyUyRkR1RFhNeThlN1IxYm1qZkolMkZrTmhsOU52NTlLdE9lTGJNRE82Rmt0SnRlJTJCJTJGQ3N0TGglMkJoY2F4bTRtWTVvYzV0TE1yMDhYSzNzdDlIN1RSZCUyRlNxUFdXMTFmQSUyRmElMkJPT3BkT2M2anFlTU5sbFlqY2R2dWRqV3Q5emZWcjNiOGQlMkYlMkZvbSUyRjFFJTJCMkY1anBmMXU2RGo5UnlMS2NxdTNwZWFmMXJGMWFHaCUyQmh5bTBYTXI5MVRmWmtzciUyRm5jYiUyRlNXWTliRlR3ZnRmVU9wZFF3Ulp2eHNETE9MaDJ1QmV4ckxIMjFZekxMQUh2OUszWlglMkZ3QUglMkZPTFV3JTJCbmZVJTJGNnhWREI2bGc0JTJGVHV0RUZyTGFHJTJCZ0xYRCUyRkM0MnpZMnglMkYlMkJsdzdmMDFmOHVyOU9uJTJCcm95UHFsbFpmVGhoTXNxQlpibFdoeEZqYWhGTExXRSUyQjI3SFp2M3Nic3I5SDlONjMlMkZCalcxTDlKOVBEYSUyRjZ1ZGN4JTJGVTZUYTdiU0g2dXhMVDdXME9jMCUyRm82SFQ2bUZsMWZ6WCUyQm5WOW4xUjZ2MDdiYmhadjJ6YTR3MTQ5SzBWazZlbmtNZVdQdTJmem44eFZiJTJGd2YwRjFHVmg0bWRTVzNNRDJ2YkFmQTNBSDl4eW9ZbVJaMG8lMkZZODk0JTJCenRCTkdTN1FiUiUyQmE4bjZPeiUyRndIJTJGdHRMeVJieVBVY1hNcXp6blkyTmZoOVRyYlpia2tWeXh6UUJ2em0lMkJtMDR2cjdmMGQlMkZvMmZyWCUyQkQlMkZUVjJyYyUyQnJtSDBicUhUOGZjVyUyRmIyTmVkMUZybVdzYVhPWkxmUkxIMDFXJTJCcHU5TCUyQmFYVWlDSkhCV0dlZ002ZDFJZFU2V3piSmklMkZGYkFhV3VQdmRWJTJGViUyRm5QVFN0TjZVNCUyRldmcVBrNWpoUmoyQm9yRHJNWExPanFuZ2UybTFyTnJuVjNlMWxucGY4YiUyRk8xVXJtJTJGcUxsWkgxYSUyQnNlVDAzSXdMYTdzOTdLOG5GclklMkJ4OWZwJTJCcDZPZmp1cFo2VnZUMyUyQnJZM0klMkYwUDZPeW45RiUyQmpYcktTQ0ZKSkpKS1Vra2trcCUyRiUyRjlYMVZKSkpKU2tra2tsS1FNM0RwemNkMlBidUFkQmE5aExYc2NOV1dWUGI5Q3hqa2RKSlR4SFZmcTRPbDViYyUyQnE1NWRsdkxMcTJEYXgxbHByWTdJRmJQNWk2M2I3N0tmOUglMkJrJTJGUXJwUHElMkZjTE1BVmxncnVwY1dYTTRkdUJqOUkweTdmJTJGMWYwMHZyQjBoblZ1blBvJTJCamtNbXpGdEdqcTdRQzF0bGI5Tmp2ZCUyRnF4UzZkV01qMHVwSDlGZmJYc3lxd0lhYkd3eDMwJTJGZiUyQmlmVzluOVJIb3B3dnJCaDRlRjFWJTJCWGtVJTJGcW1aUVFMU0I2ZGVZeHd1eDdIQWZwR3ZzOUwlMkZCJTJGOEo2aXZXVloyZGo0dlY4RmdmYmtZJTJGbzVXTzhob3NyZHIzJTJCaTZ0N25yZWZXeDhiMmgyMGh6WkV3UjlGdyUyRmxJT0xnNCUyQkk2NTJPQ3h0N3ZVZldEN1E0JTJGU2N4djVtJTJGODlLMUl1allqOFBwV0xqV0RhJTJCdXNCN1NaSWNmYzV1NlhmbkZXMzFzZUllME9FekJFNiUyRk5TU1FVcEpKSkpTa2tra2xLU1NTU1VwSkpKSlQlMkZBUCUyRlc5VlNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkYlMkZaJTJGJTJCMDFJbEJvYjNSdmMyaHZjQ0F6TGpBQU9FSkpUUVFsQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEaENTVTBENmdBQUFBQVlFRHclMkZlRzFzSUhabGNuTnBiMjQ5SWpFdU1DSWdaVzVqYjJScGJtYzlJbFZVUmkwNElqOCUyQkNqd2hSRTlEVkZsUVJTQndiR2x6ZENCUVZVSk1TVU1nSWkwdkwwRndjR3hsTHk5RVZFUWdVRXhKVTFRZ01TNHdMeTlGVGlJZ0ltaDBkSEE2THk5M2QzY3VZWEJ3YkdVdVkyOXRMMFJVUkhNdlVISnZjR1Z5ZEhsTWFYTjBMVEV1TUM1a2RHUWlQZ284Y0d4cGMzUWdkbVZ5YzJsdmJqMGlNUzR3SWo0S1BHUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5TRzl5YVhwdmJuUmhiRkpsY3p3dmEyVjVQZ29KUEdScFkzUSUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YVhSbGJVRnljbUY1UEM5clpYayUyQkNna0pQR0Z5Y21GNVBnb0pDUWs4WkdsamRENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhRdVVFMUliM0pwZW05dWRHRnNVbVZ6UEM5clpYayUyQkNna0pDUWs4Y21WaGJENDNNand2Y21WaGJENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzV6ZEdGMFpVWnNZV2M4TDJ0bGVUNEtDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNUd3ZaR2xqZEQ0S0NRazhMMkZ5Y21GNVBnb0pQQzlrYVdOMFBnb0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGblpVWnZjbTFoZEM1UVRVOXlhV1Z1ZEdGMGFXOXVQQzlyWlhrJTJCQ2drOFpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbXB2WW5ScFkydGxkRHd2YzNSeWFXNW5QZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWs4WVhKeVlYayUyQkNna0pDVHhrYVdOMFBnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRm5aVVp2Y20xaGRDNVFUVTl5YVdWdWRHRjBhVzl1UEM5clpYayUyQkNna0pDUWs4YVc1MFpXZGxjajR4UEM5cGJuUmxaMlZ5UGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKUEdsdWRHVm5aWEklMkJNRHd2YVc1MFpXZGxjajRLQ1FrSlBDOWthV04wUGdvSkNUd3ZZWEp5WVhrJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5VMk5oYkdsdVp6d3ZhMlY1UGdvSlBHUnBZM1ElMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWFYUmxiVUZ5Y21GNVBDOXJaWGslMkJDZ2tKUEdGeWNtRjVQZ29KQ1FrOFpHbGpkRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUXVVRTFUWTJGc2FXNW5QQzlyWlhrJTJCQ2drSkNRazhjbVZoYkQ0eFBDOXlaV0ZzUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKUEdsdWRHVm5aWEklMkJNRHd2YVc1MFpXZGxjajRLQ1FrSlBDOWthV04wUGdvSkNUd3ZZWEp5WVhrJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5WbVZ5ZEdsallXeFNaWE04TDJ0bGVUNEtDVHhrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNWpjbVZoZEc5eVBDOXJaWGslMkJDZ2tKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1R4aGNuSmhlVDRLQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVm1WeWRHbGpZV3hTWlhNOEwydGxlVDRLQ1FrSkNUeHlaV0ZzUGpjeVBDOXlaV0ZzUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKUEdsdWRHVm5aWEklMkJNRHd2YVc1MFpXZGxjajRLQ1FrSlBDOWthV04wUGdvSkNUd3ZZWEp5WVhrJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5WbVZ5ZEdsallXeFRZMkZzYVc1blBDOXJaWGslMkJDZ2s4WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExtcHZZblJwWTJ0bGREd3ZjM1J5YVc1blBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRazhZWEp5WVhrJTJCQ2drSkNUeGthV04wUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGblpVWnZjbTFoZEM1UVRWWmxjblJwWTJGc1UyTmhiR2x1Wnp3dmEyVjVQZ29KQ1FrSlBISmxZV3clMkJNVHd2Y21WaGJENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzV6ZEdGMFpVWnNZV2M4TDJ0bGVUNEtDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNUd3ZaR2xqZEQ0S0NRazhMMkZ5Y21GNVBnb0pQQzlrYVdOMFBnb0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1YzNWaVZHbGphMlYwTG5CaGNHVnlYMmx1Wm05ZmRHbGphMlYwUEM5clpYayUyQkNnazhaR2xqZEQ0S0NRazhhMlY1UGxCTlVGQkVVR0Z3WlhKRGIyUmxUbUZ0WlR3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbEJOVUZCRVVHRndaWEpEYjJSbFRtRnRaVHd2YTJWNVBnb0pDUWtKQ1R4emRISnBibWMlMkJUR1YwZEdWeVBDOXpkSEpwYm1jJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJVRTFVYVc5bllWQmhjR1Z5VG1GdFpUd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UGxCTlZHbHZaMkZRWVhCbGNrNWhiV1U4TDJ0bGVUNEtDUWtKQ1FrOGMzUnlhVzVuUG01aExXeGxkSFJsY2p3dmMzUnlhVzVuUGdvSkNRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDUWs4YVc1MFpXZGxjajR3UEM5cGJuUmxaMlZ5UGdvSkNRa0pQQzlrYVdOMFBnb0pDUWs4TDJGeWNtRjVQZ29KQ1R3dlpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOUVdScWRYTjBaV1JRWVdkbFVtVmpkRHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5RV1JxZFhOMFpXUlFZV2RsVW1WamREd3ZhMlY1UGdvSkNRa0pDVHhoY25KaGVUNEtDUWtKQ1FrSlBISmxZV3clMkJNQzR3UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0d0xqQThMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqY3pORHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJOVGMyUEM5eVpXRnNQZ29KQ1FrSkNUd3ZZWEp5WVhrJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUXVVRTFCWkdwMWMzUmxaRkJoY0dWeVVtVmpkRHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5RV1JxZFhOMFpXUlFZWEJsY2xKbFkzUThMMnRsZVQ0S0NRa0pDUWs4WVhKeVlYayUyQkNna0pDUWtKQ1R4eVpXRnNQaTB4T0R3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTFRFNFBDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENDNOelE4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQalU1TkR3dmNtVmhiRDRLQ1FrSkNRazhMMkZ5Y21GNVBnb0pDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzV6ZEdGMFpVWnNZV2M4TDJ0bGVUNEtDUWtKQ1FrOGFXNTBaV2RsY2o0d1BDOXBiblJsWjJWeVBnb0pDUWtKUEM5a2FXTjBQZ29KQ1FrOEwyRnljbUY1UGdvSkNUd3ZaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVhCbGNrbHVabTh1VUUxUVlYQmxjazVoYldVOEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrSlBHRnljbUY1UGdvSkNRa0pQR1JwWTNRJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TGxCTlVHRndaWEpPWVcxbFBDOXJaWGslMkJDZ2tKQ1FrSlBITjBjbWx1Wno1dVlTMXNaWFIwWlhJOEwzTjBjbWx1Wno0S0NRa0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YzNSaGRHVkdiR0ZuUEM5clpYayUyQkNna0pDUWtKUEdsdWRHVm5aWEklMkJNRHd2YVc1MFpXZGxjajRLQ1FrSkNUd3ZaR2xqZEQ0S0NRa0pQQzloY25KaGVUNEtDUWs4TDJScFkzUSUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TGxCTlZXNWhaR3AxYzNSbFpGQmhaMlZTWldOMFBDOXJaWGslMkJDZ2tKUEdScFkzUSUyQkNna0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNWpjbVZoZEc5eVBDOXJaWGslMkJDZ2tKQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbXB2WW5ScFkydGxkRHd2YzNSeWFXNW5QZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWFYUmxiVUZ5Y21GNVBDOXJaWGslMkJDZ2tKQ1R4aGNuSmhlVDRLQ1FrSkNUeGthV04wUGdvSkNRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoY0dWeVNXNW1ieTVRVFZWdVlXUnFkWE4wWldSUVlXZGxVbVZqZER3dmEyVjVQZ29KQ1FrSkNUeGhjbkpoZVQ0S0NRa0pDUWtKUEhKbFlXdyUyQk1DNHdQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDR3TGpBOEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpjek5Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQk5UYzJQQzl5WldGc1Bnb0pDUWtKQ1R3dllYSnlZWGslMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaGNHVnlTVzVtYnk1UVRWVnVZV1JxZFhOMFpXUlFZWEJsY2xKbFkzUThMMnRsZVQ0S0NRazhaR2xqZEQ0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRa0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRa0pQR0Z5Y21GNVBnb0pDUWtKUEdScFkzUSUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxsQk5WVzVoWkdwMWMzUmxaRkJoY0dWeVVtVmpkRHd2YTJWNVBnb0pDUWtKQ1R4aGNuSmhlVDRLQ1FrSkNRa0pQSEpsWVd3JTJCTFRFNFBDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENHRNVGc4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQamMzTkR3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTlRrMFBDOXlaV0ZzUGdvSkNRa0pDVHd2WVhKeVlYayUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoY0dWeVNXNW1ieTV3Y0dRdVVFMVFZWEJsY2s1aGJXVThMMnRsZVQ0S0NRazhaR2xqZEQ0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRa0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRa0pQR0Z5Y21GNVBnb0pDUWtKUEdScFkzUSUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxuQndaQzVRVFZCaGNHVnlUbUZ0WlR3dmEyVjVQZ29KQ1FrSkNUeHpkSEpwYm1jJTJCVlZNZ1RHVjBkR1Z5UEM5emRISnBibWMlMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVCVUVsV1pYSnphVzl1UEM5clpYayUyQkNna0pQSE4wY21sdVp6NHdNQzR5TUR3dmMzUnlhVzVuUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1MGVYQmxQQzlyWlhrJTJCQ2drSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2VkdsamEyVjBQQzl6ZEhKcGJtYyUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVFWQkpWbVZ5YzJsdmJqd3ZhMlY1UGdvSlBITjBjbWx1Wno0d01DNHlNRHd2YzNSeWFXNW5QZ29KUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5SNWNHVThMMnRsZVQ0S0NUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFJVYVdOclpYUThMM04wY21sdVp6NEtQQzlrYVdOMFBnbzhMM0JzYVhOMFBnbzRRa2xOQSUyQmtBQUFBQUFIZ0FBd0FBQUVnQVNBQUFBQUFDM2dKQSUyRiUyQjclMkY3Z01HQWxJRFp3VW9BJTJGd0FBZ0FBQUVnQVNBQUFBQUFDMkFJb0FBRUFBQUJrQUFBQUFRQURBd01BQUFBQmYlMkY4QUFRQUJBQUFBQUFBQUFBQUFBQUFBYUFnQUdRR1FBQUFBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNFFrbE5BJTJCMEFBQUFBQUJBQVpBQUFBQUVBQVFCa0FBQUFBUUFCT0VKSlRRUW1BQUFBQUFBT0FBQUFBQUFBQUFBQUFEJTJCQUFBQTRRa2xOQkEwQUFBQUFBQVFBQUFBZU9FSkpUUVFaQUFBQUFBQUVBQUFBSGpoQ1NVMEQ4d0FBQUFBQUNRQUFBQUFBQUFBQUFRQTRRa2xOQkFvQUFBQUFBQUVBQURoQ1NVMG5FQUFBQUFBQUNnQUJBQUFBQUFBQUFBRTRRa2xOQSUyRlVBQUFBQUFFZ0FMMlptQUFFQWJHWm1BQVlBQUFBQUFBRUFMMlptQUFFQW9abWFBQVlBQUFBQUFBRUFNZ0FBQUFFQVdnQUFBQVlBQUFBQUFBRUFOUUFBQUFFQUxRQUFBQVlBQUFBQUFBRTRRa2xOQSUyRmdBQUFBQUFIQUFBUCUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRjhENkFBQUFBRCUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRkElMkJnQUFBQUElMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkZ3UG9BQUFBQVAlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkY4RDZBQUFPRUpKVFFRSUFBQUFBQUFRQUFBQUFRQUFBa0FBQUFKQUFBQUFBRGhDU1UwRUhnQUFBQUFBQkFBQUFBQTRRa2xOQkJvQUFBQUFBMVVBQUFBR0FBQUFBQUFBQUFBQUFBRkZBQUFCd2dBQUFCQUFjd0IzQUdrQWN3QnpBRjhBWVFCeUFHMEFlUUJmQUdzQWJnQnBBR1lBWlFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFCd2dBQUFVVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQVFBQUFBQUFBRzUxYkd3QUFBQUNBQUFBQm1KdmRXNWtjMDlpYW1NQUFBQUJBQUFBQUFBQVVtTjBNUUFBQUFRQUFBQUFWRzl3SUd4dmJtY0FBQUFBQUFBQUFFeGxablJzYjI1bkFBQUFBQUFBQUFCQ2RHOXRiRzl1WndBQUFVVUFBQUFBVW1kb2RHeHZibWNBQUFIQ0FBQUFCbk5zYVdObGMxWnNUSE1BQUFBQlQySnFZd0FBQUFFQUFBQUFBQVZ6YkdsalpRQUFBQklBQUFBSGMyeHBZMlZKUkd4dmJtY0FBQUFBQUFBQUIyZHliM1Z3U1VSc2IyNW5BQUFBQUFBQUFBWnZjbWxuYVc1bGJuVnRBQUFBREVWVGJHbGpaVTl5YVdkcGJnQUFBQTFoZFhSdlIyVnVaWEpoZEdWa0FBQUFBRlI1Y0dWbGJuVnRBQUFBQ2tWVGJHbGpaVlI1Y0dVQUFBQUFTVzFuSUFBQUFBWmliM1Z1WkhOUFltcGpBQUFBQVFBQUFBQUFBRkpqZERFQUFBQUVBQUFBQUZSdmNDQnNiMjVuQUFBQUFBQUFBQUJNWldaMGJHOXVad0FBQUFBQUFBQUFRblJ2Yld4dmJtY0FBQUZGQUFBQUFGSm5hSFJzYjI1bkFBQUJ3Z0FBQUFOMWNteFVSVmhVQUFBQUFRQUFBQUFBQUc1MWJHeFVSVmhVQUFBQUFRQUFBQUFBQUUxeloyVlVSVmhVQUFBQUFRQUFBQUFBQm1Gc2RGUmhaMVJGV0ZRQUFBQUJBQUFBQUFBT1kyVnNiRlJsZUhSSmMwaFVUVXhpYjI5c0FRQUFBQWhqWld4c1ZHVjRkRlJGV0ZRQUFBQUJBQUFBQUFBSmFHOXlla0ZzYVdkdVpXNTFiUUFBQUE5RlUyeHBZMlZJYjNKNlFXeHBaMjRBQUFBSFpHVm1ZWFZzZEFBQUFBbDJaWEowUVd4cFoyNWxiblZ0QUFBQUQwVlRiR2xqWlZabGNuUkJiR2xuYmdBQUFBZGtaV1poZFd4MEFBQUFDMkpuUTI5c2IzSlVlWEJsWlc1MWJRQUFBQkZGVTJ4cFkyVkNSME52Ykc5eVZIbHdaUUFBQUFCT2IyNWxBQUFBQ1hSdmNFOTFkSE5sZEd4dmJtY0FBQUFBQUFBQUNteGxablJQZFhSelpYUnNiMjVuQUFBQUFBQUFBQXhpYjNSMGIyMVBkWFJ6WlhSc2IyNW5BQUFBQUFBQUFBdHlhV2RvZEU5MWRITmxkR3h2Ym1jQUFBQUFBRGhDU1UwRUtBQUFBQUFBREFBQUFBRSUyRjhBQUFBQUFBQURoQ1NVMEVFUUFBQUFBQUFRRUFPRUpKVFFRVUFBQUFBQUFFQUFBQUFUaENTVTBFREFBQUFBQVdyd0FBQUFFQUFBQ2dBQUFBZEFBQUFlQUFBTm1BQUFBV2t3QVlBQUglMkYyUCUyRmdBQkJLUmtsR0FBRUNBQUJJQUVnQUFQJTJGdEFBeEJaRzlpWlY5RFRRQUMlMkYlMkI0QURrRmtiMkpsQUdTQUFBQUFBZiUyRmJBSVFBREFnSUNBa0lEQWtKREJFTENnc1JGUThNREE4VkdCTVRGUk1UR0JFTURBd01EQXdSREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFTkN3c05EZzBRRGc0UUZBNE9EaFFVRGc0T0RoUVJEQXdNREF3UkVRd01EQXdNREJFTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TSUyRjhBQUVRZ0FkQUNnQXdFaUFBSVJBUU1SQWYlMkZkQUFRQUN2JTJGRUFUOEFBQUVGQVFFQkFRRUJBQUFBQUFBQUFBTUFBUUlFQlFZSENBa0tDd0VBQVFVQkFRRUJBUUVBQUFBQUFBQUFBUUFDQXdRRkJnY0lDUW9MRUFBQkJBRURBZ1FDQlFjR0NBVURERE1CQUFJUkF3UWhFakVGUVZGaEV5SnhnVElHRkpHaHNVSWpKQlZTd1dJek5IS0MwVU1ISlpKVDhPSHhZM00xRnFLeWd5WkVrMVJrUmNLamREWVgwbFhpWmZLemhNUFRkZVB6UmllVXBJVzBsY1RVNVBTbHRjWFY1ZlZXWm5hR2xxYTJ4dGJtOWpkSFYyZDNoNWVudDhmWDUlMkZjUkFBSUNBUUlFQkFNRUJRWUhCd1lGTlFFQUFoRURJVEVTQkVGUllYRWlFd1V5Z1pFVW9iRkNJOEZTMGZBekpHTGhjb0tTUTFNVlkzTTA4U1VHRnFLeWd3Y21OY0xTUkpOVW94ZGtSVlUyZEdYaThyT0V3OU4xNCUyRk5HbEtTRnRKWEUxT1QwcGJYRjFlWDFWbVoyaHBhbXRzYlc1dlluTjBkWFozZUhsNmUzeCUyRiUyRmFBQXdEQVFBQ0VRTVJBRDhBOVZTU1NTVXBKSkpKU2tra2tsS1NTU1NVczR1RFNXaVhSb09KS0ZpM092eDJXdmJzZTRlNWdNd1JvNXNveXBkT3lOOW1UU1JIcFd2ajRPYzQlMkZ3RFZmOVdrcHVwSkpKS1Vra2trcFNTU1NTbEpKSkpLVWtra2twJTJGJTJGMFBWVWtsQ3F4dHRiYkclMkZSZUE0ZkFwS1pwSkpKS1VvMldOcnJkWTh3MWdMbkh5QWxWT3NXdm93WFpEWiUyRlFPWmE4RDl4cm1tMyUyRk5yM1BVc3dtJTJGcG1RR2FteWw0YkhpV3VoSlRZcXNGdFRMQnc5b2Q5NFUxUTZGa2ZhT2s0dHN6dXFZZndWOUpTbGwxJTJGb090MnNPZ3VEWGdlVG03ZiUyRlBtTiUyRndDQ0xVV1oxVmhyeXNiS0ElMkJqdWE3emd0dVolMkYxRnFJVVhUU1FjdktaaTQ3c2g3WE9ZMHRCRFlKaHptczNha2ZSM2JsVmQxM3ByTXR1SSUyQndzZSUyRjZMM0FobTduMCUyRlUlMkJpMnphZnprRk9ncTklMkJkajBaRk9NNGszWkR0ckdORW5oenQ3djNXYldQVThiSnB5YXZWcGR1WnVjMmVOV09OYjIlMkYyWHRYT1kyVlU3ckE2aG5POVJ1SlMlMkJyMWhPMWxndUdKYnVZejJleHR2djNmekxQVSUyRndDRVNVOVFra2trcFNTU1NTbEpKSkpLZiUyRiUyRlI5VldmMGl3aXUzRmY5TEdzZXdUJTJCNkQ3UCUyRkF5eHkwRm11bkg2eFBETXBnZCUyRmJaRlQlMkZ3RG9PeCUyRiUyQjIwUXAwbEMwMkN0eHFBTHdEdEI0SjhGTkpCVFZvdnglMkJvNGp2YkxMR2xsdFR1Uk1zc3JmJTJGQU5KaXolMkJoWkRxTU8lMkZFeUNYMmRPYzZ0JTJCa3VjMWdtdCUyQjMlMkZoYVBUZW9aNXM2UjFJWnJCR0Rsa052SSUyQmpYY1lZeXglMkY3dFdWOUIlMkZ3RHclMkZ3RHdseUQxTHFXSDBqcTJOMU81NXJ4T29nWTFyd0M0Qzl1dVA2bXpkdDlXbDF2NlQlMkJiJTJGQUZkRlMlMkYxTXlxJTJGMlZUaHVzYSUyQjJ0c3QyazZzUHVZNzNCcm0lMkZvM1Z2MmZ5JTJGM0YwUzRUQXpxJTJCbSUyRldEcXVLR25iaFdPeWE2MkRVVWxyY215dWxrdFo2ZjJleTE5V3o4JTJGMkxzMlolMkJGWXgxakw2eXhnQmUlMkZjSUFJM0NYZk5JcVpYM3Vyc3Fxclo2ajdUcUpnTlkyUFVzUFAwZHlwZldKJTJGbzlOT1QyeHJhckhUeHMzdFprZiUyQnk3N1ZSNnY5YmVqZE5zYmtiM1picW0yc2ZWamdPT2hyZFpGbGpxc2ZmWHMlMkZtdlY5ViUyRiUyQkRYSGRaJTJCdXZVOHpBNmklMkJqMDJZMXphd2FaTHQyTFkyMXRsdGI3WE9iNmo2JTJGd0RSMVYlMkZ6VjM2djZyUFZZRlUlMkJpQ3M1UFM3Y2Q0M08yV1VPQjc3ZDFYJTJGVDI3bHd2Vm5OeUtLOGQxNXE2aGlqMjA3bzlkZzNESGRXOW05ekx2OEFRJTJGNFd1NzFLJTJGVHRyOWFxekolMkJ1SFY4dG1SMHpOb3lMdnNYVThOcjdjZHRqbXROMUo5SyUyQjJwb2RzYmsxJTJGbyUyRjhBMFlzbkc2dGUlMkJuTFpiZFhYWTZwdHRBRE53dWN3bWh2MmNXYnYwdG5yJTJGcEtuZnBLYktmOEF0c3FEMUR2cmpuZlY3MGNLbGxkZ3pnYnFqZjdRSEIzcDJzRzBzYjZsdjAlMkZmWjZURWNaZzYzMHh6MnZleks2alZiZmhWdGY2YmlRJTJCeGx0bU5ZN2EyejlKczNWdSUyRndheXZySGgxJTJCaGhkS3YzWHViakJoWTl3RGJIdFBwT2RYa09INnQxRGQlMkZSc2wlMkY2QyUyRndEb21WN0ZnOVdjJTJGRiUyQnEzUkw2YmliZW41V1ZqaDRsbGpkeGJleGx0ZjA2TGE5dnZwJTJGTSUyRndBRlolMkZoRXVxbjByNmxmWE05V1l6cHZWb282d3h2Y2JCY0dqOUx0cjA5TExvajlieGYlMkJ2VSUyRm9mNW16OWF2ckpkMCUyQjJqQndIQVpUcmNkMTdpQTdiVlphMm5ZMEglMkZDWHc5diUyRkFBZGYlMkZXbDV6aWRRWjlaY1kzbDNvZGR3ZzJ6MW1IWjZ6V2ZRdjN0MiUyQm5rMCUyRndDbiUyRndEUmY4eGY2RGYxRHF2WEdaJTJCZTV0enNpN0dkNmxtMmtQc3FOYnFxT0cxJTJGNEN1eG5wdCUyRlM3JTJGOUk5QUxqUjFHaDdmOTYlMkJ1SkpwQTFLWmoyV05EbU9EbW5od01oSmF5U1NTU1UlMkZ3RCUyRjB2VlZuOWFpckZHWVNHakVjTFh1T2tWJTJGemQ1SiUyRmRaVSUyRndCWCUyRnJhMEVITTlEN0pmOXBFNCUyRnB2OVlIWDJiVDZtbjlSSUtjRTlVNmxnWG5KRHYybDBqTiUyRlM0OTdTMzlDNTMwc095eG4lMkJCYyUyRiUyQmg1UDgzJTJGMmt5ZlMlMkZSNU5sUHJ2MTZ1d2N6RXhzUEhGb3pMQlJXSHo2cnJpV005T3V2NkhzOVQzdnNldWU2QjlidW9aRjV4QlU4NEJEQyUyQnRvWllXMVBjekclMkIwMkd4bTcxR2IyWFAyZm9kN1A1bXRjdDE2N3ElMkZUODdHZGZrJTJGYnNjV0hJNlYxTnJRTkd1M08yTlo2ZnA1Rk45ZFRjckgzZXBSNmY5Ukt3UllYemhLRXVHWW8lMkZ4ZlNNdk02bFpsRiUyRlZmU29iVTExUTlNR3lxTGZhJTJCclA5UEpzcjlLejA5bjZiR3ElMkY3ZFdOMXo5VnhDM0tmWlQwJTJCJTJCUFV5R2c1TklhUGRVN2V6WmU3S3hQUiUyRlI1R3lyMXNYOURiNiUyRndEZ3VaeCUyQnYzNTJiZTRXTndmdCUyQjl0YjJuMjFtemElMkYwN1huMiUyRnA3cW1WZXA2ZGJQMHZxZm9scVpEN21ZOTFlRG1YaDlwQkFaREdqVDlhd3ZiJTJCa3AzVyUyRnAyTWRrZnBhdjFiJTJCWFViMFd1bFRlUDIzaDVEaTNKTDNVWVdUWXpsemJLbjFzYzVyTjdiYU0zRlo5cHc4eHJ2U3ZyJTJGUWYwaW02dXZINnZZN0c2aGZTMm14MVdGWWFxN2JuayUyQm8ycjByS1BUYTdidXN0eFgyMCUyQnolMkJsZjRSVyUyRnFQWGVNNDAzcyUyRlE5THBkYlE0djk3V2w0RGNXMW51ZDZQcWZySDJlOW5zek1hdk54JTJGczklMkYyaEE2aTVyNzdIWkxIMjRUbjFXNCUyQlV3ajJQdmEzSmRqNWJmemFIYjhuN0ZrJTJGNFA5WXhQMHRYOHd1bHFhV2ZiMUN6WjZHYU0zMDYyMldERCUyRlNWMW1wM3NmWTZ0aldPc1kxdGY4Nzc2YSUyRlRRN3MyN3FGTlZJcnF3QWZVc2JaUlh0OVMwTjlLeTF0WDgzJTJCZ3JlJTJGMXNlaiUyRkFFMWx6S2x0ZER0Ymk5WkpzcXFiVGFCWGRTMFRiVzY4UHljVXhOajhxckliUiUyRnBQVSUyRlNiNiUyRlR5djZWV2YwcXZPcnptc1lhc25HekhtazdneDFaYTZLMlhSN3NkJTJCNXY2Szc5SlhpM2JQVSUyRlY4aTcxUlJVNSUyRldhTE12NmtZajdTR1g5TDZnJTJCcUslMkZvc3J5bWV1eDFjZjRCMTdmWXNycHVQbU54ZnR6NjNQY3dsOURXRFEyc0lxWmtOSiUyRk5aZTZsdVI2ZiUyRkFBWCUyRkFBUzFmMnBYWDB2cSUyQkpsbjdMZmtWVnRhM1pBZmw0OTI5bXluJTJGQTc2ckxxODZyJTJCYm8lMkY0cXloVnJ1b1pmU2VrNGxkbU0xMlBlMjI3RDlYUUJ0dnB0dTMlMkI3ZDZWcjY2WGYyUFUlMkZ3aVNuc3VxbkR5TE1mRnRNWk9SaiUyQnJYU1BlSEZzZW8ybDdnMzFMYSUyRlYlMkJoJTJGMm9xJTJGd2ZxZnBGem5WY2Q5dURaaXZheHpEWlhhMXp6dFphWEIxTFclMkJ2JTJGZ2IlMkZaVlhpNXR2ODMlMkZSc2o5QXNMcWZYdjJqMCUyRnBYcVBGZWRnTnVyZmExMEYzdXFzeDhsdjhBbzNPYnZyZiUyRkFNVDZuJTJCRlFxdXE1OSUyRlVSZWMxemI3Q0hYTWM4aHRtdzduNDd2OEJ0dWNQVWI2djZQOUxkNjlpTm9TOUg2VmswWnpjcGozdHFxZVcxQUF0dWMlMkY4QW03TWV5aHY2V3ZaJTJGTlpYJTJGQUlFdWd6dWsxNGVMaU42OWZiaTQ5dTZ3Z0JqeVdOYjZkUDZJT2E1MlY2dnQyNDdQMGREJTJGQUZQMGFqamRjNmtCZWVrWVFkMURJczJ0c1pWWmJkVlh0OXRZcXNHOSUyQjMlMkZUUFolMkJsJTJGd0JDc2FqcFhWJTJCdFgyWndvJTJGYWw3V3V2djlTME1lYTIlMkZUMiUyQnZaN20xZTFqNkdWNzZQWiUyRnBLME5FN2F2cEgxWjY5bmRVNlRpNG1QNm1WWmt0QmRia1AzdXFiV1RSa2pLdVlHYjl0MWU2djI3NzZyUDlJdXl3OFZ1Smp0b2FTOHRrdWVlWE9jZHozJTJGMm5MeWI2dmRadjZEakRLd21WdDNsemJzWnozVnNaY0hsdVRnWDQ5OWhmUll4dXpKd24lMkZ6bnN5S3JMTHY4SDJ2VCUyRnI5aE9ESyUyQnNNJTJGWnVTV2t2cnRGakMxd0xtdnIlMkZXS3FXJTJGbSUyQnpiWiUyQmtSUjR2VnBLbjAzcSUyRlRlcTQ3TW5wJTJCUXklMkJ0N1d2RzAlMkI0QnczTjlTcyUyRnBLJTJGJTJCdU5WeEJUJTJGQVAlMkZUOVZUT2ExN1N4d0RtdUJEbW5VRUhzVTZTU254ZjZ4OUN6UHF0MUVDaXg3R01lYmVuNVEwY2FuZXl5bHp2b3V0bzNNcnVaJTJGaGF2MG5wJTJGcEZVcnlhTWpGdnJ6cHM2ZGtQYlptVXNIdng3ekZiZXI0ZjdyYkxQNld6JTJGQUVsbiUyQml2WXZZJTJCdTlMNmYxWHBsMkgxR0cwT0c3MVNRMDF1SDBiMlBkOUI3UCUyRlViJTJGd0JHdkg4dnBGM1Q3JTJGUXBjSDVOSWVhN2F6NmxlWFNkMiUyQnpIamRXNzBxSGJNbkUlMkZ3bFNackUyTnV6ZmpLSE1ZJTJCR2ZwelIybiUyRkw5SDk1d00lMkZCeU9rNWh4c2dpeXV3YjZybTYxM1ZINk4xWCUyRkFLTXJXMTBqcWJybUhEeUhsOE1oalkzRzZzSGQ2UE8zMThkdjZlaXowN2ZXOVAwdiUyQk9IaVB4YzZuOWo1NTJZZGgzWW1WeTdGdFA1JTJCdnZmaXUlMkZ3JTJGJTJGQiUyRnBmNXplaFl2MWE2cFZrNVdMbmglMkJKWmhNTDZybWlXdnNCWTZ0MUZuMG4xTlk3N1R2cCUyRlNmOFduaWpxTlduT0VzY2pHUTRaQjdPaWcwZlY3TGYwMXJyOHJxUjJ0ZXozWFBiQng2N1hzWXpheXhqYk1sOW0zOCUyRjlKJTJCbCUyRlMlMkJwenJ2VXhNV3F2cU5WdUprc3gzNDAyelc1b29zYmRTY2lnNzI1T0hkOXFZNnYlMkJjMlpPTFQ2Tm44OHkzZTZYMXV5azlOZXh6bllkJTJCUGRpMk1jMWxUeGw0enR6bld1M2JLZldaWlhiczlUMDZmMHlwZFk2SjFIciUyRlZIOVdydHBzeDZtTXFGRFMlMkYxV2lzRjMwWE5hNSUyQjU3N2JmMGV5eiUyRlJWJTJCcW5Id1cxUm90REY2eGF5NDlUdmlrczlPSE5CQWM5ZzJzZmMxbTdadTIlMkZvRyUyRlF4djNQU1Q5THcyZFRibE0lMkIxVzFzZERpeG9NMnZ1M2YwOTM2T3QzcE9ac3VycCUyRlE1SCUyQmolMkZ3YUpqNEdYZjA1MlpqZXBSamJtT3J5d056TmpIdWxoOU1lZzV6TiUyQjFscm4lMkY0UjlmcCUyRnBGWXhjSEQ2ZXk2bkl0ZFNHQU90ZGxGd2hsaCUyRlJ1SHBOM1BwYnY4QTV4bnFlbWdGT1oxJTJGRHlNVzc3VDFESU9ReTR2cmE5MWJxQzAwZW4lMkJpWXglMkYwNk5ycW5ldiUyRkFJZiUyRkFFajFXeGFHMnN4S09vOU11NmlLMzJVWWVPTEhNTDN2THJOcnJtdTMlMkJsdiUyRkFQUmkxY3ZwbDFQVXFXM05maDVWSjM0JTJCTm1POVhFdXJIdSUyRlY3dDFqR01zWWYwbm9QOW4lMkZBQU5xdjlRNlc4NHc2MzBobjJjdUZkMWpjWUd5c2pTNnF6THhtaXUzRnlhZHY4OTZOWCUyQmwlMkIyZXFoU1NCUTF1JTJGd2VkNno5WCUyQnJ0RkpIMWRaajFhZ0VOc3FadUlCOUVQc3Zia1c3V2o2ZVMlMkY2ZnElMkJqJTJCaldPY2JOdzhobnFkTnhxM3RpelpZWE9hNFR5N2ZrV2JtTmQlMkZPYmZvZjRSZHBUMWZxSFVzMXJjJTJGTGZrdHlSVTJ2R2E0YlNITmVQdEZMM2VsNlZtTGxWZWpaN2YwbSUyRjFjaiUyQlolMkIwV2J2U2ZxbjAlMkZxMWVUamRSSWRsVnNwc3FjeHdCcWM4UGJmVyUyQnJYMzc2JTJGVHRmJTJGQUtIMGJjUzZ2MldKWHF1bGo0WUNYRURacXVyeG4xZHhYZFJvc3V3NzhoblhjUjVkU1d1MjJPclkyYnFzZG4wM1pGVHQ5MzJPejJaV0w2bFZMUFdvWFMxOUh6dXA5UHElMkJzZlRNWXR5OGtuN1pSWERDeTVoZFZiMURFcmUlMkY5TlU3OUx2eEhiTGNsajdLZjVySXNwWEU1bVBtOUo2cSUyRkxxYTgyWXJtdmZWSkhxVXNkJTJCZ3lxTGF0bG4wYSUyRjAzcFA4QVd4TG1lclYlMkI1aiUyQnolMkZVN3F2UiUyQnA5Q290NlFObExKYlpRNXhkWlhiOU8xbDczUzk5am51MyUyQnE3JTJCZSUyRm5FbU41N3F2MVg2YjljJTJGcTk5b3hXTnglMkJ1WXhjeXg3ZzlyamMyUFh4TTV0MzZ4NmRqbXQ5SDF2MDJMJTJCaTlMJTJGQ1ZXY3o5VlByNTFucFBXWDlIJTJCc3h1eThiSXRGTm95RHZ0b3Q5dEljTiUyRjA2SGUzMTZQJTJGQUVLbyUyRndBSjlwOWhiWFcxN250YUE5OGIzQVFYUUlidVA1eTQzJTJGR0I5UTJkZnAlMkZhWFRXdFoxaWxvRUdHaklZMyUyRkFQZTclMkJheUclMkY4QWFmSiUyRjZ6YiUyQmklMkZTVUpUMlRLNjZ4dHJhR0FBQUJvQUVBYlc4ZnlWSmVjZlVicVA4QWpIUFYzMWRYeE1qSjZjJTJGYXkyN0xhTWQxSmFOZ3NvRHhYOW85cmYwemFXMiUyQnIlMkZQZXAlMkZwUFIwbFAlMkY5VDFWSkpKSlNETkwlMkZzcjlnZVhHQUJXMXJuYWtENkYzNlAlMkJzdUF3dW1WJTJGV1hOcnhIdmN5bXFoMlM3SXFMblJhJTJCN0pmajJVUGNHdHFkdnlmVnNwWjdLJTJGUSUyQnkxJTJGb2FWNkZmajA1RlpxdllMS3lRUzEzRWc3bSUyRjlKS2ltdkhwcm9yRVYxTkRHRHdEUnRha2tFZzJOQ05ueERxZEdiMExydTNxRkRIWDQxckxUV0d4VmV5Ujc2MjZ0ZFZtTmElMkYxUDNMUFdyOWkyY216cnBZNXRkQjZnenBMN0txN1dHWFBxcWY2RDhISWMxZ1o5dXBvJTJGN1QlMkZ6bVZYJTJGQURYcXIwYnJPRjAlMkI0MTM1YldWRmdjMDVrRDFXTVAwNmFyaTE3cTI1UDgxWiUyQiUyRlglMkJpJTJCbmF1VHlzZnFuUWVvTTZoMDZsOTFlVzJINGp3ZjF1aGdjNzBMcTNEZFYxWEd4bTc4ZDclMkZ3Q2ZvJTJGUVhmcEs3R0lSRlg0czJmTjd2QWVHcFJqd2s5M0l5T2o1VkRuTjZVNSUyRlVNYSUyRmZsWWxMR3VMbSUyQnF4bnBmYWRyRzF0ZGszMDJVZmF2JTJCczJlbiUyRk5yUSUyQnJkOSUyQk5sTmRmUyUyRkR1RFhNeThlN1IxYm1qZkolMkZrTmhsOU52NTlLdE9lTGJNRE82Rmt0SnRlJTJCJTJGQ3N0TGglMkJoY2F4bTRtWTVvYzV0TE1yMDhYSzNzdDlIN1RSZCUyRlNxUFdXMTFmQSUyRmElMkJPT3BkT2M2anFlTU5sbFlqY2R2dWRqV3Q5emZWcjNiOGQlMkYlMkZvbSUyRjFFJTJCMkY1anBmMXU2RGo5UnlMS2NxdTNwZWFmMXJGMWFHaCUyQmh5bTBYTXI5MVRmWmtzciUyRm5jYiUyRlNXWTliRlR3ZnRmVU9wZFF3Ulp2eHNETE9MaDJ1QmV4ckxIMjFZekxMQUh2OUszWlglMkZ3QUglMkZPTFV3JTJCbmZVJTJGNnhWREI2bGc0JTJGVHV0RUZyTGFHJTJCZ0xYRCUyRkM0MnpZMnglMkYlMkJsdzdmMDFmOHVyOU9uJTJCcm95UHFsbFpmVGhoTXNxQlpibFdoeEZqYWhGTExXRSUyQjI3SFp2M3Nic3I5SDlONjMlMkZCalcxTDlKOVBEYSUyRjZ1ZGN4JTJGVTZUYTdiU0g2dXhMVDdXME9jMCUyRm82SFQ2bUZsMWZ6WCUyQm5WOW4xUjZ2MDdiYmhadjJ6YTR3MTQ5SzBWazZlbmtNZVdQdTJmem44eFZiJTJGd2YwRjFHVmg0bWRTVzNNRDJ2YkFmQTNBSDl4eW9ZbVJaMG8lMkZZODk0JTJCenRCTkdTN1FiUiUyQmE4bjZPeiUyRndIJTJGdHRMeVJieVBVY1hNcXp6blkyTmZoOVRyYlpia2tWeXh6UUJ2em0lMkJtMDR2cjdmMGQlMkZvMmZyWCUyQkQlMkZUVjJyYyUyQnJtSDBicUhUOGZjVyUyRmIyTmVkMUZybVdzYVhPWkxmUkxIMDFXJTJCcHU5TCUyQmFYVWlDSkhCV0dlZ002ZDFJZFU2V3piSmklMkZGYkFhV3VQdmRWJTJGViUyRm5QVFN0TjZVNCUyRldmcVBrNWpoUmoyQm9yRHJNWExPanFuZ2UybTFyTnJuVjNlMWxucGY4YiUyRk8xVXJtJTJGcUxsWkgxYSUyQnNlVDAzSXdMYTdzOTdLOG5GclklMkJ4OWZwJTJCcDZPZmp1cFo2VnZUMyUyQnJZM0klMkYwUDZPeW45RiUyQmpYcktTQ0ZKSkpKS1Vra2trcCUyRiUyRjlYMVZKSkpKU2tra2tsS1FNM0RwemNkMlBidUFkQmE5aExYc2NOV1dWUGI5Q3hqa2RKSlR4SFZmcTRPbDViYyUyQnE1NWRsdkxMcTJEYXgxbHByWTdJRmJQNWk2M2I3N0tmOUglMkJrJTJGUXJwUHElMkZjTE1BVmxncnVwY1dYTTRkdUJqOUkweTdmJTJGMWYwMHZyQjBoblZ1blBvJTJCamtNbXpGdEdqcTdRQzF0bGI5Tmp2ZCUyRnF4UzZkV01qMHVwSDlGZmJYc3lxd0lhYkd3eDMwJTJGZiUyQmlmVzluOVJIb3B3dnJCaDRlRjFWJTJCWGtVJTJGcW1aUVFMU0I2ZGVZeHd1eDdIQWZwR3ZzOUwlMkZCJTJGOEo2aXZXVloyZGo0dlY4RmdmYmtZJTJGbzVXTzhob3NyZHIzJTJCaTZ0N25yZWZXeDhiMmgyMGh6WkV3UjlGdyUyRmxJT0xnNCUyQkk2NTJPQ3h0N3ZVZldEN1E0JTJGU2N4djVtJTJGODlLMUl1allqOFBwV0xqV0RhJTJCdXNCN1NaSWNmYzV1NlhmbkZXMzFzZUllME9FekJFNiUyRk5TU1FVcEpKSkpTa2tra2xLU1NTU1VwSkpKSlQlMkZBUCUyRlc5VlNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkYlMkZaQURoQ1NVMEVJUUFBQUFBQVZRQUFBQUVCQUFBQUR3QkJBR1FBYndCaUFHVUFJQUJRQUdnQWJ3QjBBRzhBY3dCb0FHOEFjQUFBQUJNQVFRQmtBRzhBWWdCbEFDQUFVQUJvQUc4QWRBQnZBSE1BYUFCdkFIQUFJQUJEQUZNQU1nQUFBQUVBT0VKSlRRUUdBQUFBQUFBSEFBSUFBQUFCQVFEJTJGNFRramFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0x3QThQM2h3WVdOclpYUWdZbVZuYVc0OUl1JTJCN3Z5SWdhV1E5SWxjMVRUQk5jRU5sYUdsSWVuSmxVM3BPVkdONmEyTTVaQ0klMkZQZ284ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0l6TGpFdU1TMHhNVElpUGdvZ0lDQThjbVJtT2xKRVJpQjRiV3h1Y3pweVpHWTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1Rrdk1ESXZNakl0Y21SbUxYTjViblJoZUMxdWN5TWlQZ29nSUNBZ0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenA0WVhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJJTJCQ2lBZ0lDQWdJQ0FnSUR4NFlYQk5UVHBFYjJOMWJXVnVkRWxFUG5WMWFXUTZSVGN4T1RWRk5UWTFOek16TVRGRVJEbEZOekpHUTBFMlFqa3dRVVpCUmpVOEwzaGhjRTFOT2tSdlkzVnRaVzUwU1VRJTJCQ2lBZ0lDQWdJQ0FnSUR4NFlYQk5UVHBKYm5OMFlXNWpaVWxFUG5WMWFXUTZSVGN4T1RWRk5UYzFOek16TVRGRVJEbEZOekpHUTBFMlFqa3dRVVpCUmpVOEwzaGhjRTFOT2tsdWMzUmhibU5sU1VRJTJCQ2lBZ0lDQWdJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQZ29nSUNBZ0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenA0WVhBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4ZUdGd09rTnlaV0YwWlVSaGRHVSUyQk1qQXdPQzB3TnkweE9WUXhORG8xTnpvME1TMHdOVG93TUR3dmVHRndPa055WldGMFpVUmhkR1UlMkJDaUFnSUNBZ0lDQWdJRHg0WVhBNlRXOWthV1o1UkdGMFpUNHlNREE0TFRBM0xURTVWREUwT2pVNE9qQTFMVEExT2pBd1BDOTRZWEE2VFc5a2FXWjVSR0YwWlQ0S0lDQWdJQ0FnSUNBZ1BIaGhjRHBOWlhSaFpHRjBZVVJoZEdVJTJCTWpBd09DMHdOeTB4T1ZReE5EbzFPRG93TlMwd05Ub3dNRHd2ZUdGd09rMWxkR0ZrWVhSaFJHRjBaVDRLSUNBZ0lDQWdJQ0FnUEhoaGNEcERjbVZoZEc5eVZHOXZiRDVCWkc5aVpTQlFhRzkwYjNOb2IzQWdRMU15SUUxaFkybHVkRzl6YUR3dmVHRndPa055WldGMGIzSlViMjlzUGdvZ0lDQWdJQ0E4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02WkdNOUltaDBkSEE2THk5d2RYSnNMbTl5Wnk5a1l5OWxiR1Z0Wlc1MGN5OHhMakV2SWo0S0lDQWdJQ0FnSUNBZ1BHUmpPbVp2Y20xaGRENXBiV0ZuWlM5cWNHVm5QQzlrWXpwbWIzSnRZWFElMkJDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0FnSUNBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cHdhRzkwYjNOb2IzQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2Y0dodmRHOXphRzl3THpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4Y0dodmRHOXphRzl3T2tOdmJHOXlUVzlrWlQ0elBDOXdhRzkwYjNOb2IzQTZRMjlzYjNKTmIyUmxQZ29nSUNBZ0lDQWdJQ0E4Y0dodmRHOXphRzl3T2tocGMzUnZjbmt2UGdvZ0lDQWdJQ0E4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBQY21sbGJuUmhkR2x2Ymo0eFBDOTBhV1ptT2s5eWFXVnVkR0YwYVc5dVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwWVVtVnpiMngxZEdsdmJqNHhNREF3TURBd0x6RXdNREF3UEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE1EQXdNREF3THpFd01EQXdQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcE9ZWFJwZG1WRWFXZGxjM1ElMkJNalUyTERJMU55d3lOVGdzTWpVNUxESTJNaXd5TnpRc01qYzNMREk0TkN3MU16QXNOVE14TERJNE1pd3lPRE1zTWprMkxETXdNU3d6TVRnc016RTVMRFV5T1N3MU16SXNNekEyTERJM01Dd3lOekVzTWpjeUxETXdOU3d6TVRVc016TTBNekk3UXpBMVFURTVNRFJHUmpBd1FVSkVRekExTVVKRVJrRkdNREl3TkVWQk5URThMM1JwWm1ZNlRtRjBhWFpsUkdsblpYTjBQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZaWGhwWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOWxlR2xtTHpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0JTJCTkRVd1BDOWxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajRLSUNBZ0lDQWdJQ0FnUEdWNGFXWTZVR2w0Wld4WlJHbHRaVzV6YVc5dVBqTXlOVHd2WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0JTJCQ2lBZ0lDQWdJQ0FnSUR4bGVHbG1Pa052Ykc5eVUzQmhZMlUlMkJMVEU4TDJWNGFXWTZRMjlzYjNKVGNHRmpaVDRLSUNBZ0lDQWdJQ0FnUEdWNGFXWTZUbUYwYVhabFJHbG5aWE4wUGpNMk9EWTBMRFF3T1RZd0xEUXdPVFl4TERNM01USXhMRE0zTVRJeUxEUXdPVFl5TERRd09UWXpMRE0zTlRFd0xEUXdPVFkwTERNMk9EWTNMRE0yT0RZNExETXpORE0wTERNek5ETTNMRE0wT0RVd0xETTBPRFV5TERNME9EVTFMRE0wT0RVMkxETTNNemMzTERNM016YzRMRE0zTXpjNUxETTNNemd3TERNM016Z3hMRE0zTXpneUxETTNNemd6TERNM016ZzBMRE0zTXpnMUxETTNNemcyTERNM016azJMRFF4TkRnekxEUXhORGcwTERReE5EZzJMRFF4TkRnM0xEUXhORGc0TERReE5Ea3lMRFF4TkRrekxEUXhORGsxTERReE56STRMRFF4TnpJNUxEUXhOek13TERReE9UZzFMRFF4T1RnMkxEUXhPVGczTERReE9UZzRMRFF4T1RnNUxEUXhPVGt3TERReE9Ua3hMRFF4T1RreUxEUXhPVGt6TERReE9UazBMRFF4T1RrMUxEUXhPVGsyTERReU1ERTJMREFzTWl3MExEVXNOaXczTERnc09Td3hNQ3d4TVN3eE1pd3hNeXd4TkN3eE5Td3hOaXd4Tnl3eE9Dd3lNQ3d5TWl3eU15d3lOQ3d5TlN3eU5pd3lOeXd5T0N3ek1EdEVORFl6TjBOQ09VUTBNVUV4TUVKQk4wVkdOVVZDUTBSQ05qTXhPRE15T1R3dlpYaHBaanBPWVhScGRtVkVhV2RsYzNRJTJCQ2lBZ0lDQWdJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQZ29nSUNBOEwzSmtaanBTUkVZJTJCQ2p3dmVEcDRiWEJ0WlhSaFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvOFAzaHdZV05yWlhRZ1pXNWtQU0ozSWo4JTJCJTJGJTJCNEFEa0ZrYjJKbEFHU0FBQUFBQWYlMkZiQUlRQUNBWUdCZ1lHQ0FZR0NBd0lCd2dNRGdvSUNBb09FQTBORGcwTkVCRU1EQXdNREF3UkRBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBRUpDQWdKQ2drTENRa0xEZ3NOQ3c0UkRnNE9EaEVSREF3TURBd1JFUXdNREF3TURCRU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd00lMkY4QUFFUWdCUlFIQ0F3RWlBQUlSQVFNUkFmJTJGZEFBUUFIZiUyRkVBYUlBQUFBSEFRRUJBUUVBQUFBQUFBQUFBQVFGQXdJR0FRQUhDQWtLQ3dFQUFnSURBUUVCQVFFQUFBQUFBQUFBQVFBQ0F3UUZCZ2NJQ1FvTEVBQUNBUU1EQWdRQ0JnY0RCQUlHQW5NQkFnTVJCQUFGSVJJeFFWRUdFMkVpY1lFVU1wR2hCeFd4UWlQQlV0SGhNeFppOENSeWd2RWxRelJUa3FLeVkzUENOVVFuazZPek5oZFVaSFREMHVJSUpvTUpDaGdaaEpSRlJxUzBWdE5WS0JyeTQlMkZQRTFPVDBaWFdGbGFXMXhkWGw5V1oyaHBhbXRzYlc1dlkzUjFkbmQ0ZVhwN2ZIMSUyQmYzT0VoWWFIaUltS2k0eU5qbyUyQkNrNVNWbHBlWW1acWJuSjJlbjVLanBLV21wNmlwcXF1c3JhNnZvUkFBSUNBUUlEQlFVRUJRWUVDQU1EYlFFQUFoRURCQ0VTTVVFRlVSTmhJZ1p4Z1pFeW9iSHdGTUhSNFNOQ0ZWSmljdkV6SkRSRGdoYVNVeVdpWTdMQ0IzUFNOZUpFZ3hkVWt3Z0pDaGdaSmpaRkdpZGtkRlUzOHFPend5Z3AwJTJCUHpoSlNrdE1UVTVQUmxkWVdWcGJYRjFlWDFSbFptZG9hV3ByYkcxdWIyUjFkbmQ0ZVhwN2ZIMSUyQmYzT0VoWWFIaUltS2k0eU5qbyUyQkRsSldXbDVpWm1wdWNuWjZma3FPa3BhYW5xS21xcTZ5dHJxJTJCdiUyRmFBQXdEQVFBQ0VRTVJBRDhBNyUyRm16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG1ybEhJMnV0WG42V2x0bkZFU2IwUkZTcDQxV2pENXEzTENCYXNselpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOUR2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyRTJyajBMdXp2RjdQeGZ0VWY4QVhQTERuQzNYSTBld2RwT2tUSzRQMDhUJTJGQU1LMkVjMVRMTmdheG1FOXBGSUR5JTJCRUFuM0d4d1RnVjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14ViUyRiUyRjBlJTJGNXMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWVVlWnBmUjBhNGtwVUF4MTloNmk3NGI0WDY1Q2JqUjc2RlY1Rm9KS0tlNUMxR0lWTGREdUdodVhzMklLT1g0Z2ZzdkdkeCUyRnNrS3RraXlENmJjdEhIYlhnUEltT0M0cU9wWGo2RTFmZjRNbTROZHhrcGM3NzBCdk5telpGTHMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlMdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWb2tLQ1QwRyUyRjNaZ2Fpb05RZW1BTlp1aGFXTHlFMExsWTElMkJiR242c1dzcEE4UUElMkZaJTJGVWNWUldiTm14VjJiTm14VjJiTm14VjJOWlF3S25vZGo5T096WXF3RFQ0aWlQWnNhJTJGVkxtNXNqN0klMkY3NkwlMkJPVFhUcGpQWlFTdDlwa0FiNXI4SnlLWHFmVXZNT3BJUU9GeEZEZm9QOHFGdlRsJTJGNFE1SU5Ea3JGUEFmOEFkVWhJJTJGd0JWJTJGaUg4Y25MZUFQY3hITXBybXpac2d5ZG16WnNWZG16WnNWZG16WnNWZG16WXlXUklvMmtrWUtpaXJNZGdBTVZYNXNqVGVhR2wxQ3pzYlNBT0x1WDB3N2sxNEtDenlBRCUyQlVaSkJpcmViTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14ViUyRjlQdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWbzRDWFVGYTllMENiSlJXa3IlMkIwUldsTUhaRUo1V3RQTXR6RTUlMkJHWUpLbnlLMCUyRjRrdUVDMVplTTJJVzBva2pGVDhTN0glMkJ1TDRGWXo1Mm1NV24ydERUbGNwWDZGYkRIUjVlY0NIJTJCWmV2eXdsJTJGTU04ZEp0bjdMZEolMkJLdmdyeTljY3JPSjY5S1Z3OUU5R1M1czJiQWgyYk5teFYyYk5teFYyYk5teFZpM21pRlUxTFNieHZzU3RKWXpIJTJGSm5TaSUyRjhBRFlwb0V6TGN4cTFUNjhGR3IlMkZ2eUU4R3JnanpkQzBtaFhFc1klMkZlMnBTNWklMkYxb21EZjhSd3R0SlJIZHJjRGFOYmhaVkk2ZW5kSUclMkY0bWNuSGVKQ0R6REw4MmJOa0V1elpzMkt1elpzMkt1elpzMkt1cmtaODQzWmhzNGJWVFF6dlZxZnlydmczekhOUGIyVU1zTHRHQlBHSlNwSXFqRXFSVWI5Y2glMkJ2U1N2cDBKbGN2SkNMeU11eEpiNEpOdmklMkYxU3VFQlZ2a2FYOUwlMkJaYm04U3YxZlRiZjBZNiUyRjc4bFB4SCUyRmdGenBlUnZ5UGJXY1hseXl1YldCSVh1b3hKT1VHN3VLams1JTJGYU9TU294UE5YWnMyYkFyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGJTJGVTclMkZtelpzVlEyb3N5V003bzNGbFFrTU94R1B0WmhQQkhLQ0R5VUUwOGUlMkJNMUJlZGpjcjR4UFQlMkZnVGhWNWN2QkpicEdlcmdFZk1EY1lhMlBrcWZaczJiQXJzMmJOaXJzMmJOaXJzMmJOaXJzaGZuUkd0YjdUOVRYN0xjb0pEMnFEelN2M3ZrMHdsODFXRGFqb2R6REdLelJqMW9SMzVSJTJGRlQ2UnRoSE5YYVZjcktzVXRmdERpMzA0ZFp6N3lycVByUUNJbmNkTW5zRW5xUkslMkZjamY1NHlWalA1Z3d0SjVja2NEJTJCNW1payUyQml2SCUyRkFJM3dENVJuRXRwd3JXZ3c5ODNSR2J5MXFpcUtsWUdrQSUyRjR4JTJGdlAlMkJOY2hua2U1QklVR29QUSUyRlBFSkhKNlhHM0pGYnhBT1B4T0ExaVg3c1V3SWRtelpzVmRtelpzVmRtelpzVlVicUJicTJtdG0lMkJ6TWpSbjVNS1pETFA0ckMyVVZxOXFZajdTV3NoV24lMkJ0eE9UbklWRzR0dFd2ZE5haWlLN0Z4R0R0V0c2VGklMkZ3RHdNdVNoelJMa3klMkIxbEU5dkZNUDhBZGlLMzNnWXNjS3RCbURXaHRxJTJGSGJPeU1wNjhTZVNINVVPR3B5SjVwWWRlM21vV1BtVzVLekgwcElvMldOdDBBM1d2MHRzMkQ3M3pKNkZnenhxcVhwS3BIRzllRE14N0VZWGVkNDVWZUM0Z1BDZFl5cXVhMEk1cTVWZ092MmNBVzhzV28yUU1xaHd3b3lIY1Z5UUZoVk9MenZyTnJkZjZmRkhMRlg0a1ZlQkglMkJyMSUyRjRiSmxwJTJCdDJHcVdyWEZuSUN5S1dlSnRuVWdWM1hPUDY3cUZqYUZMSFVycHJlY3klMkJsWmFqeFBEbU4xam44RHY4QWElMkJ5JTJCSWFYcmNscmR0WjM0TnJmUjFVU29mZ2VvMkswNmMlMkY4QWdjQkNYciUyRmx2WFJyZG56azRyY29TSkZYWWZNYm5Eek9WJTJCVHI4MmVxQU9RSXBhQnE3QVYyciUyQk9kVHJpUlNFcDh6OFJvTjlJNUFXSlBWNUhZRDB5SHIlMkJHUWczTnRxMWxjTGF6eDNDaVp2aWlZT0t6UW85S2piN1l6b1dxUmV2cHQ1QU9za0VpajVsQ09tYzYwJTJCV0NLMGo5T05ZbzVJWXAlMkJFYWhRV0JlTmpSYWZFY01WVHZUYiUyQjgwZnlIWjNGdWdFOXZTT1JKQlVxUFZaVyUyQkVIdzN5VmFYZUMlMkZzb2J1bEdrWDQxSFFNTm1IJTJGQlp6QyUyQjFpVFRiYWRaVWtqdEpqemtRcVNLcU5tNWZzZE1QZnlyMSUyRlJkVDh2cmEyRTVONUM4a2wzYlNNVEtwa2N0eiUyQkw3U1A5cGVPQTdmRmtJa2drQ3dPZmt6N05sQTF5OERGMmJObXhWMmJFSkx5MWluanRwSlZXZWF2cFJFamszSGM4VjY0dmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOVh2JTJCYk5teFZwbERxVWJjTUtINUhJUG9raldzc3RxeCUyQksybFpQZjRXcGs1eUY2bkY5Ujh4c3dIR084UVNqJTJGQUZoOEQlMkZxcmtvYzZWbVNNSFVPT2pBRWZUanNBYVpNWGhNUlB4Um5ZZjVKNllQeUpWMmJObXhWMmJObXhWUXV6T3R1NzI5UFZVY2xCRmEwN1U5OERhZnFzRjZpOUVrSTZlUHl3d3lGNnZHMmk2b0pSVVdsNnhaQ1AySk9yciUyRnN2dExoRzZzMHlpSzRYNlpmaTRRSTdWYjlsdjVoJTJGWERIcmdWNWM4QjBMekxjMlElMkJHRjI5V0R3NFNmRiUyRndwJTJCSE9nNlpNSGk0ajJZZlRrWiUyRk1Hd3BGYWF6R0R5dG05R1lqJTJGQUgyNSUyQkVuJTJGQUZYJTJGQU9KNE44dVh3bGlpY25wczMwNUxtRlpEZXdyYzJkeGJ0MGxpZU52a3lsYzQ1JTJCWDEwVUNRekhqTEFURTRQJTJCUWVOYzZMNTVlNWkwSjU3V1ZvbmlrUm1aRFNxN2pmMnlCMk9wJTJGVllvcjIlMkZ3Qk5qa3RwQUdqdjdadlUlMkJJbm95OFZhbyUyRmE0NHhDUTlhczI1UlZCcUtuZkJHUmJ5OXJCRXNsamNJWTBhUSUyQmc1RkNDUUQ2Ymo5bHNsR0Fpa041czJiQXJzMmJHeU9JMGFSdWlBc2ZvRmNWUyUyQiUyRjFxMnNKbHR5clN5dHV5cCUyQnlEc0Mzend4QnFBZkhmSSUyRm9kbXQyejZwY2puSks1ZEFleFBUJTJGZ1JraHhWMmM3ODJtU3k4MldVZ05JZFVoTnM0UFRtbFhRJTJGd0RCRE9pWkF2ekxiNm5IcE9ybEZranM3bFdkRzl5dnhWRyUyRndpdUdKM1VwM1lUSkZyN29wJTJCQzh0MWxqSGp4b2R2OEFZdGtpeUhieHg2WGZLeCUyRmNYQmlsSjMlMkJBc1ZVVjhGUmx5WUE0WjgwRGtrUG1xM0V0bEhKU3BSJTJCSlBnSEJINjZaQnRJdWZxdDlOcDhwQUxIbkVwTzVwMW9NNlhxMFAxalRyaVBvZVBJZk5keG5MdFp0ckdabHVCY0czdkYlMkJGSll1SmZ4NDBJSXhISkt6emI1ZXQ5WnRaWXAxTHd5Z2NnUHRLeSUyRlprVCUyRktXdVJLS0NPQzZ0TkgxQ2JsY1dpSUxEVVdISDZ3ZzZ3eURlang5Rnc0c2ZPTWpFQlk1YmlIMUhnTHk4Vll1bE9mSlYlMkJ5MzhxNG5kSDlMbEwyMTlLNGlpbEhyV3pMeGxoSTZTZ0UxJTJGMlNuRktvMEN6eHkyOHpNcWNTenNwSVlCUGoySSUyRjFjZCUyRnl0blZaZE5RMkQxSSUyQkVTTW9QdyUyRnpNZnRkTUcyMFRTUXl5YmxtamVuem9jNFRZNmxkNmRkeUt3TVVzYkZab0hxTndkMUtuR1hSWHM5bjUlMkZ2N2xnOThHbFdoTWp3azFBJTJGbTRrJTJGRjdqRFN3U1BVTFRUSkkzUEdCcGhHTndHNE9IVlclMkJnbk9OWCUyQnNXRnBERlBhU1NKY1RFU0czVGNSbGYydVJLJTJGYXpxJTJCa1IzYWVUN2UlMkJqblg2eW9XOGliaHQlMkI5aTlUZyUyQiUyRlE5OFFWWkhxc3R1dG93dVNQU2RTcFY5MUlQVld6aWYxaTk4dCUyQlo3bTQwRmpiU1dVck5DcUVta2V4NEVIN2FjVDlsdjJjNmxvbm1iVHZNVVRXZHdnaXVtV2t0ckxRaGdlNkg5b2Y2dVJMemQ1WnVyRFZQOFEyS2V0WUZVVzdqWGVTS2klMkJtMGhIN1VaSDdYN09DWTRnMllNMHNNcmp2ZXhCNVNIY1hzbmtQejNZJTJCY2RQcUtRNmxBQjlidGElMkY4bEk2OVkyJTJGNFhKZURYUEpsdlBlNkpxTWVxNk5NWUx1RTg0MlRvNm50VG95dXYyayUyRmF6MEo1RTglMkIySG5HeUkydDlWZ0ElMkJ0MlpQMGVwSCUyRk5FZiUyQkV5RVNlVXVmZjN0bWJGQXg4YkI5SDhVZjRzWjglMkY2UDgyVE1NTE5iMWlEUnJRM0VwQmtrUEMzajdzNSUyRndDTlYlMkIwJTJCR1ZjNG41bTh5ZnBuekpjc3IlMkY2SFlzTGUyMzJQQnYzajAlMkZ5MyUyQkglMkZZNUp4a0xvdXJYMTc1JTJGdGIyOG1hU1pybG9xc2RsUTFUZ28lMkZaVURPNzU1JTJCOHV4bHZQY01JNmk2TEFlMnpaNkJ3bFM3Tm16WUZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZmJTJGVzclMkZtelpzVmRrYjgzVzUlMkJyVzElMkJnJTJCSzFrQWMlMkY1RCUyRkNmJTJCRzQ1Sk1DNmphcmUyRnhhRWYzcU1vJTJCZFBoJTJGNGJDTmlxVjZWT09jVFYlMkJHUmVCMzclMkZhWDlXSG95RmFKTXoyM0JxaVdFN2p1Q2glMkZzeWFSc0hSWEhSZ0NQcHd5NTJnTHMyYk5rVXV6WnMyS3V3dTFyUzQ5VzA2V3piNFhJNVF2OEF5dXU2bkRITWVtS3ZPTkUxS1dHVnJHN3JIUEN4UmdlcXNwcGs3c2IwWEM4VzJsVWJqeEhpTWhubm5USHRMbVBYclpmZ2FrZDFUc1I5aVElMkZQN0xZdG9tcSUyRldJMElha3lib2Y0SDU1TG1GWmRxTmxGcU5qY1dNd3FrNkZEOHo5ayUyRlFjNTE1WHVaYlc0bDAlMkI1JTJCR1dGekU2biUyQlpUVE9sVzA2M0VRa1hZOUdYd1Bobk8lMkZOc1M2VDVxdGJvZkJIcWFuaWV4bWklMkIydiUyQnNVNHYlMkZsZkZnSGNyUFRGYmFuWk5iM2NheXd5QXBMRTNRajN6anV0d1clMkZsanpCYzZQcDZmVjlKSHBzTE5TU2dSMUhJb3JWM1Z2aXpxMmpYUWslMkJBbmRsQkE5eG5OdnpSaVdQekpCSlducjJnSlAlMkZHTnl2OEFIQWRpa0ozWUdmMG81cFpESWJvU0QxR0pKOWFBZ2g2JTJGNWFVem9Gbk45WXRZWjZnbVJGWTA2VkkzemxYayUyRlZJNWJpMmhubEJnZEJ1eEZGYWhoZnIwclNOc25IbFhVNEpJNU5KYVN0MWF2SVFtJTJCOFJhcXVEMEklMkJMamtwYmdJWkptelpzaXJzRGFnQzFqY3F2VXhPQiUyRndKd1RqWFVNckszMldCQiUyQldLcGZvZkU2WGI4ZjVkJTJGbmhqa01QbXZSJTJGS2xySkJxa3hCU1ZrakMwUElEcFRmSTE1cyUyRk1OYnUzamJSNXBsc1pWcDY5c3dSaTlOMGVTak1uSCUyQlJjVnBtNjY5Y1dXdFhHbmF0d2pnS21hMnVQc2oweCUyRk5YdyUyRmF5T2ZtTHIlMkJoWDNsJTJCUFRZcmtYTSUyQnBHdG0xdVBVVWNlWDd5Ung4S0x0eCUyRjFzNXhvTiUyRmVmcFZyNkM4bXVWVmZVdUxPOGtNckVJZVRlbTdmYVJrNUl5NUZkVHVaOUIxNjl0ckdadnFrYzVlRkQ4U21KenpVY1R0c3JjZVdIelRUM2ZSSnYwcDVVWnZ0T1lZcmdDdSUyRkpWNFAlMkZ3QU5IblByajgzdk0ybFg5enBXb0JKWUluYUo1NDBwT2kxJTJCR1JRRHhmNGNsbjVaM3FUMnN0aldySzBpZXhFZ0U2MCUyRjJYTE9VZm1IWU5aZVpiaFdQOTRBeW4lMkZWJTJCRCUyRmpWY2xMbGJFZFFuOTU1cTF3VGlVM2h1TGFkZVFDc2ZTbGpPOVZOZXYlMkZBQTBiWUh1YjFaN1Y1eVdraEh4cGNWSEpOd0dpdVA4QUtTdFZrJTJGYnlHYWZxTFF4eWFmTzVTMmxQSldVQW1HUSUyRjd1aUI4ZjhBZDBYJTJCN0YlMkZ5OEN0ZDZqcGwzTGIzdiUyQmtRVHB4bmlxVERjUW43TG9SJTJGd1ViJTJGQUxEWkN5eWVrV2w5WnlhRkxQZWxaR04ydHFERXRaSkhlbkVzNjdja3BWWHdxMWJVN0cxaUtXdnF0Y0NSNGJra2hGWXglMkZDSFhodnZYNDhDJTJCVTdIMVNiSzNrOVd5YTVodjRIY2hTQkY4RnhCTDJXZU9KMWslMkY0czlQNGN1JTJGMGolMkZjMUZwaG1GeFBMZU9oWkJ4QWlMOGp0NDAlMkZhNVllZ1Y2UHBydkxwY0U4c2ZwVE5iaDNRVm9HSzEyemx1b1EyUG5aaWg0MmZtV0lWdDV6OE1kNHE5STVQNUoxN1oyQThZcldWbCUyQkVSb2FEd29OdnVwbkx0YjAyTHpSRWRSMGhCYmE3YlZlNHRFUEZad3ByNnNIJTJGQUJiJTJGQUpPU2tnUE5McUdhRzdlM3Y0Mml1b1R3bGljVUlLOWlNNzU1S25Hb2VUN1pYNm0xQ0glMkZZU05DZiUyQkZPY3RudUlmTmtTV2VxRVd1dTI0OU9DOGNjZlc0N2VsY2QlMkJmJTJCVm5RJTJGeXlTNXQ5RGswNjdqTVZ6YVNYTUxLM2hSSmxwNHI5cmprUWw1UGJhbGNhUmQlMkJsSTdQYnd5c0k1bE5KSWlyVSUyQkglMkZtbk91ZVYlMkZPVWVvJTJCblk2aElwdVdYOXhQdHduVSUyRmh6JTJGblRPUGVZNHpZJTJCWU5UZ3BWQmNTVlE5Q3JIa1AxNEdzYjlyRmdSV1N6WTFLMSUyQktOaCUyQjBwJTJGWmNZMlFkbGV2JTJCWiUyRkxLeEsxOXBjZFlCVXpXcWRZeDFMd2olMkJUJTJCYVA4QVolMkZaeUhXOXhlNlpmUTZwcGs3UVhzQkRSVElldnNSJTJCMHAlMkZseVklMkJVUE5SMUtKTEs1bEQzS3JXM202ZXNnNjdmNzlUOXBNRCUyQlp0Q2pUbnFWaWxJVyUyQktlRlJzaFBXVkFQMlA5JTJCSiUyQnprWlJCM0RQRmxsamx4UlB6NUVkeDhtY3clMkZtM2FYdmt6VUx5VUMzMTIyakVUMm9OQThraDlOWllUJTJGSnZ6YiUyQlRPWmFiSWhuV2tnYU9RY3d4TzU3NyUyRjVmamhLSVluZG9admdhVUQwNXY1U04xSiUyRnlHNllJMFJaNHRTJTJCb3lLUVMxSFR3WUhzZmZBTHJkT1F3TSUyQkxHT0VIZmh1NlBXdko2ZjVGc2ZyWG5xVzhLJTJGREJFWkQ0Y21BVmYxWjJmT1NlU0xtZlQ5UnJIRVdsdkRTWmFWYWdOUjAlMkJ6dG5XOG1Xc3V6WnMyQkRzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5ZnYlMkJiTm14VjJZNXNvNHF3NldMOUhlWUxpTHBGY1VuakhRZkg5ciUyRmh1V1NiVG5CZ01YZUppdjBINGwlMkZBNFQlMkJhNGZUVzAxRlJ2REo2Y2hBJTJGWWZwWDVNTUdhWGNCbUh4YlNyc0NkaTYlMkYyZjhSeVozajdrZFU0elp6clRmTzJxUWEzZWFIcmtheDZoYXV4JTJCcjlGa2dKJTJGZFQyNzkwWlAlMkJHeWRXV29XdCUyQm5LM2VyQWZIR2RtWDVya1NFb3ZObTJ5aVFBU1RRRHFjQ3Q1c0w1ZFowNktvOVlTTU5xUkF2OEFpdTJJdjVpMHFKZWNzcktvJTJGd0FrayUyRmN0VGhvOXlvNjlodGJpMmUydkFwZ21IQjFjZ0ExJTJCZmZPWVglMkJuWGZsWFVnaEplemtOYmFieEg4akglMkJkY1BQTjgybDY1YjJqMjEzRE45V2RtbXRlZkNSa2RlSmFOU1ZiMUklMkZ0WVhXTThjVmsyamF2TTk1cFV2OXpjUHZMQiUyRkkzTHZ3d2hJVDJ4MTJLQ0JyeGp5alJTMDZqcnhHNVlEJTJCWmNyenpwa1htanloTFBwekNTYUZWdjhBVFpvenVYakhQNEdIJTJCJTJGRTVKa1VtanU5QnVqYVRzSllISEtDNEc2U3huOXIlMkZBSnF3Skg1ZzFmeWpEYXcyS3JjYUUwelNORTI3UmlRbXR1WFBTSjYlMkZ1VyUyRllreEk2aFVnOGlhOXF1bGF0SGUzczBrOERneEdLWnl3QmslMkJ5MyUyQlRrbiUyRk42M2E4dHRHMWEzckhMJTJCOWhJQiUyQklkR0slMkY4QUJBNUROYlMwdEwlMkI0a3NKT2VuekVUV3JqWWlPVDRnakQ5bDRXcWpMJTJGQUpPVFRVOVh0TmM4cjZkRFA4RThyYzRpU1A3MVJ3a1RmY1AlMkZBTHNYJTJCZmxncTA5ekZ2S2VvVE13VjJOZUNzQjBCYU5xZjhhNU45WnU1OUs4M1cycFdiJTJCbjljakJvMjRaWFVOeEklMkYxbHlDV3NMNmZOYjNMTHhpZDI0dFNnSU5BOVB1eWI2N3BkJTJGcjJrYVBjNmJ4TjViOG93V1lLQVlXJTJCR3BQOEFrNFJ5UVU4dWZPRjdKTEQ5WFJMYUFqOTZaUGlZdjRBOUFuJTJGRFlPZno5b0VidEEwa2pYU3FHJTJCcnFoNU50VSUyQmtXNGlRTCUyRms1eUslMkZpdU5hZ2pFY3BUVTdSajZZcWFTQWJ0RzMlMkZGaW40b20lMkZhJTJCeGhYY0dlV3hsRGdwUGJmdlVGYVBES3BGWGlJJTJGWWslMkZrJTJGbXdGWHIwbjVoZlhCSkZwVnR4bUM4NGpPYTgxJTJGYUtxdjdTZnk1R0w3ekpxMnJ3WEZocUY0MEFsV2lTUWZBRVBWVyUyQkg3U2Z6JTJGd0NSa1RsMWRMVzN0N3hpODEwOEMzZzlFQkFyQ25JOGp0VnZ0TlJjUjF6elRkSmNRdll3Ulc3eTI4ZHd6RmZVYmxJdkkwNWZBbyUyRjJPR3hTdDN6U1c5TFBYSVRNbENqaXV6b2ZzeVJ0Mllmc1BrZDBpYWJUdFFrc3AxWnJhNFU4NFg2U0olMkJ3NCUyRndBb0Q3RWk1ZHpxVjdMRkN0N0tablZBWSUyQlJxeWc5YWolMkJYJTJCVEpkb3V1YUhybHRiMlBtQ05mcmtLbU8ydktjVCUyRmtnc1AydjVjanRhcGZvMEp0JTJGTWxsRkdIbHRadlZlSzRwdHdXTmk2eVUlMkJ6SXZSbHdtMW1VYXJwTnRKSEVXdXRPa3VJYmgwRlNiZmtHaVoyJTJGYjRNeEglMkJwazZ1Wk5NOHNhZGR5d1N0Tks2MDV0c0tuWWNGJTJGbWJPWnkzczJuV2FMRSUyRkc0ZTQlMkJzSzQzSEVMeG93T3pLJTJGTDRseDVmRldiJTJGbHByUDFUV0xRTWFMTUZSaCUyRmxSdHhyJTJGd0xZbiUyQmZOakxwJTJCcDJXcHdnaFdMeHVmMlNHb1JYJTJGQUlESTlwZW8ya010amZXUU1VaTNKTTl1MjRqNXJUNEQlMkIxRzVxeWZ5Zll6cCUyRndDY2RpbXIlMkJVcmElMkZHJTJGd3BJU09vSXBYSkRjSVBONEhEY1IzU2NsMkk2cWVvT0dOdmNReXclMkZvJTJCJTJGSldHcE52UDFhQnolMkIwUEdGdjhBZGtmJTJCelhJeFNheW0yTkNPaDdNTU5ZTGhMbE9TN0g5cGZBNUZVMzB2VU5ROHVhcWpJcXNhcUhpTzhVc1o2RWVLc3JmQSUyQlMzeVVyNnA1aXVkVGwyUzFSdlJUY2hUS2VDZ1YlMkZsVGxrT3N2VXZlT244VmtkYXRhdXhveU4lMkZJRCUyQjByJTJGd0FtVGZ5WUhzcm5UZFBhc2MxJTJGTmN6WE1aQXJ3aFQwNGczJTJGQUQwNVlqbWw2RmRpdGxjbXUlMkZwdlglMkZnVG5LNWJTNHNwMW1EdEZJRDZrTGlvUFhaZ2M2MU5HVEJOSDRvMVBwVWpJcE5ieVgwVWx2Y3clMkZWOVRzdDdpMklxSFduOTlFUDJrWmY3eEYlMkYxOG5NWDFwQU5NUjFUVFlmTWtSdVlZbHQlMkZNRVk1RWZZVzdVZnRMJTJGd0FYakRmOHUlMkZNRnpNOG1uWDZNSkxXUkZrTWg0eWlxdEdVWVUlMkZaUDgySXpXJTJGSDREVlFHJTJGZHVQdFJQMUZHJTJGbGI5bHNHNlpKREpmUGN2R0k5V0NvSlp3UGhtUkdIRjJYJTJGZmk0QVAycGVhZm1CRThIbXE4TGdBVENPVmFlQlVMJTJCdGNqYXVVUGlwNnFlJTJCZEo4MngyOTNQYjJHdHlMOVptV1JvTDVRQVVaWkdRSzQ3cDluT2QzOWhkYVpjdGFYU2NYWGRTTjFZSG95bnVwd0ZDTDB6VVgweTRTVkdmNnVXRHF5YlBHNDZPbiUyQld2JTJGQUE2NTJuUnRZJTJGVGRxSmJmakxkcW5LNGdqcFNWZW4xaUJmNUclMkZ3QjNSZjdxZk9DeHljYXF3cWpmYUg4Y2slMkZrJTJCNjFLMTFBQzFrWllJVDZnbUIlMkJ4eTJvUCUyQk1pJTJGQzZmN0xFR2xaQ2JCciUyQiUyQnUlMkZxcXBCQ2pQNmNidHhId240bGpyWCUyRmdja09qMkVNY0M2bEs2eVRSS1lta0lvWWw2Z0U5eFQ3TDVIaGNUSnFNMWpKQ0VqalFTUXNLN3FUM3JnaSUyRnVKN1BUREtRMzFTNWYwM1pQaTNTcmZHUDVSaUtHNmJlaiUyQlFQekIwQ0clMkJ1Tkh2QjlWZVp4OVd2WktCWDdjQ2YyUDhqT3ZnaGdHVTFCM0JIZlBIYVFyZnVFdDNESGtBSmFrS2hQOEFPMzdBJTJCZWRYOGklMkJZUE9lbjZkTnAycUs1dDRKRmpzNUhDbHlvTkpmVGRpZVVhTDhTJTJGd0RDWkVjUk5FYyUyQnJmT09LV01UZ2VHVWFFb0hmaSUyRnBSUDhBdW50MkFiM1VvcldxQWM1UUs4ZWdIek9QaHVvVFlyZGVzSllnbkpwdGdEVHFkdSUyRnRrVDFDOVhuTFBJd29makxkdUo2ZmhrZ0xjWXNpMHZWUmZTU1JTVVdSZDFVZUdHZ3lOJTJCVnJDU2ttclhLbFhuSEMzUnR1TVhYbFQlMkJhVEpLTVRWN0pkbXpac0N1elpzMkt1elpzMkt1elpzMkt2JTJGOUR2JTJCYk5teFYyYk5teFZCNnJhZlh0T3VMWHZJaDRId1liciUyQk9SYlJMJTJCc01UTWFTUXNPU25yc2VMWk5EbklkZlhYdFA4elh0blpHQzJ0SldFc1V6OHBINHlBRThZMTRyczNKZmliSlJQTUt5ZjhBTVh5ZTNtS3loMUxUSCUyQnJhMXB4OVMwdWxGU1Y2bU53UHRSbkliNWU4d1hsdyUyRndDajlWUjlOMXUxMlBHb0Q5dlVnZnBKRyUyRjdVZWROOHVhcGNYc0gxZTdDJTJCckFpJTJGdlY2T1BzMUslMkZzdHRnTHpQNVlzciUyQjNOekhGeG1qUE1sTmolMkZyTFRkV0h0aU50bFU5STgyc3hhMTFsQXNzZjJibU1mQTlQRmYyRyUyRjRYSXQ1MDF5ODFTeWtFRWpSUVJNR0VhTVY1TDAlMkJLbjJzcTRrZTNqOU80YXN1eUxOU25NZHVYJTJCViUyRnhMQ2ZWWiUyRlMwdThjRGtWaFloZkdneG9kR1FERFpQTWN1bHVzVHpwd3J5TVQ3bW5laCUyQjB1VFZOTDFlJTJCc29iMXRMbW10SmxFa2JGVzVGR0ZSOE5mVXppMmlRJTJGWE5YdExqVUFYV2U2aEUzTCUyQlF5S0hHJTJGYmpucXp6UDVvazBIMGJheGdXVnlvZGk1SVJVNktCeDc0QVNyek96c2ZMMXRjSDY5cHBNdGR4TTBoNCUyRjg4M09TMkdMUzcyMzlLMXBHcEd3aiUyQkVyJTJGQUxIcGhWY2VjQmN5cmM2dkJGZGFiTCUyQjdsVjBVUGJ0MTJLRG54JTJGbFlZR3ZyV0t3UDFuVHAza2lyc1QwQnBXZ2NkZjhBWkRKZyUyRkZqU2FuU2I4eEMydXJzWHRwRzVrdDdka1ZSR2FVNGclMkZFVHklMkZ3QmJJemM2MHhTZXlsc2dwaERKZWFmTnRJWSUyQm5xUkVmQ3lnWWNXUG1WMTR4M3FrcVFEekFvNFglMkJZciUyQjBNRTZoJTJCaWRaWkltak05MEZMUXpRajQwQkZObjIlMkIxWDdEWWtkMnlpJTJCckhOSWg4dVhiTHA3eUxKZFRvWmJaSkRYMUVVME5PWHhDZUw5dGYlMkJKNFBoYlRMeWE1OHNYcXF0M0VvS2xWOU1Tb1JVTW44c3NmN1hIJTJGWHlEJTJCY2ZLRnpvV25SYXRGcVVVVSUyQm5TR1NHQXNCY0ZYWmFGZUhKVlpEdTJIT24zU2VlOUt0MSUyQnNDeDh4MnklMkJwYVhhYkIyVHhIOHBQMjElMkZad0FudTNWUXVWMUNDMmlXOWN4JTJGd0NrUzI4a010QTVkS0xITDElMkIwMFRKeVpQaGslMkIxblMlMkZLTjU5WjBHU05ubzZ5STZlMVY0diUyRnd5NXo5cHY4WVdqNkhyY2Y2UDgzNkVXbWlpSFNmaXYyb3glMkIya3dIN1AyZnRMazI4dXhyYmVYWUxoWVhWN2dNenhrRTBJcVBpcU5xJTJGeTRnYiUyQlNrN1BOZFgxbSUyQkhtcWF5dEolMkZUdFRkeCUyRkJHb1N1NnN3WnFjajhZYkNuUm1NOTdkckt4S1hjc2x1N3RYYjElMkJTQnElMkZ3Q1N6Wks5YzA2eHVOVXV0U3RrQmxzNUlGa0FJQU1vSHFVVWZ6TlJrYkNQVzVYczcwclpjVnRMMCUyQnRDb0FGVmMxb0slMkZ3QXJuaTJSSVNoZEQwclU5WjBnMlVOVzFEUjVKTEclMkJpclJsUXVYaG1wMVpQNzJNJTJGd0NwaDc1ZzBLMnNyYTIxRzhjaDViYUdKVXB0NnlBUnV2TDZPV0VRazFlSnJxOXM1NVlMeEJ6dUdoSkVqcjNMS3Z4U3F2N1dJU2FucTJvUVJYR3J5dmQyTXRWaHVTUThhTlFjaDhPeU5qc3FFbGhLMWhiY3IlMkZjdjNLJTJGeVYlMkZ5Y1JTUUJtVWlpZnNmUU02RnBmbGpTYnJSMG1DeTNFakRsREl6TjlzR25waFUlMkZaJTJGbGJJcnFubCUyRjZqTTNDYjFWUnFPb1U4MDc4WG9PSFBJU0lpUUNkNWNrZ0UzdHlTNFN0SzZ4U3klMkZESiUyQjdIcXNlTyUyRllWdzBXMnRoYXRwMTBoZTJiN1lIMjFjZlpsalA4NmY4QUQlMkZZeE80dGJPNHNvNEk3WlV2RzVMcGwzUHNzcHJVd3MzOTJKRCUyRnV0JTJGd0NiQU9oNnNMdVU2VnFZTUY0aEtSdTJ4NURyRklEMFlZN3JzaDR0TW4wNiUyRmtzcGp6am5pYVMxblFmRElFJTJCSldYd2RhZkV2N09kMHVnbm1MOHRtWWlwV0VPQjFvR1dwJTJGd0NINVp5NGhvVDlXdVU1QlR6ajdGSHAlMkZlSWUzJTJCWCUyRkFEcm5SJTJGeXN2UmZhSGVhSkl3WjRSSkdvOFFEelElMkY4QUF5NU9QVkJmUE54YnBNcGlmWXFhQnU0SXdGWVdseDlmRUlKVTdsbUg3UyUyRjgzWko5ZTB4N0s5dW5SZzhhek1rb0hXSnlTVlIlMkY5WUg0VyUyQnpqJTJGS3R2RmRheEJETFFLekFWTzI0M0clMkY4QXJZUEpVWGIyTnZEWnRkeVd4ZTNCNG1lQ1ElMkJ0RzM3SmtqYjlsYWZhWEhSWGw5cTJyNmV0bldKN1l4eDI4aCUyQjFVTnlNanQlMkZsSDRteVg2bHAxcG9QbTU3Q0lGTEc4amlrQ3NLaXNxcVhXbmNjMiUyQnpoTFpXME9tMzVoQ3VMaUNlU2dJSEZZNjdLVDlybDRZYVY2M0l3TVZTYWtnMXB0MjdlR1J1enZyVFdJTGRZYm5sY0lXWFNkUWM4VzVwWGxwOTElMkZMSVA5MU0lMkY5NG1HOXRjZlczQVExNHhnc1BINGM0WnAlMkJ0ejZIcU4ycko2MW5OSXkzbG9UVGtBNTR5SWY5MXpSJTJGYWlseVJOVWlucFYwaVhxeXl4dyUyQmpkVzVNZCUyRmFOMWlQZHFmNzRmOEE1SnRrYTFaWjRMV1l4c3lTS3BhQ1JUOFFJJTJCSXhrajJIdzVLTGU2JTJGVHNVRiUyRnAxd3NtclJSazJsMFFBTDZGZnQyOTBnJTJGdTd1UDdMbzM5NWhGcXVxYUw5WFptbVdDUnd5U1dUZ3M4TWdHNk9vJTJGWTVmWmJBVWhDJTJCWjlKc2ZNbDFTS1lXJTJCcXlRUlQyRE1mM1V2SmVUd3Q0TTUlMkJKY2hLeXJPcjZENWdRd1RRRXBGSyUyRndEZVF2OEF5biUyQlpEayUyQjFHeWoxZXcwU2FDNGdTNW50bUN0WDBFTFF0UUFNJTJGRWN2NUZ3djFiUXhyJTJCbmhyNG9tczJ5bVA2eHVDU3RTSWJvZjZ2OEFkellPYUdBUSUyQlhkVG0xTmRMamo1U044UWtHNkZPdnFCdSUyQlRqVHJTMnNiWkxDTWNWVW1rcEZHTG43UmYlMkZBRnYlMkJGeFRUbWUxMDJEVHVJTEl3WnBLa3NXJTJCenhXdFc0MSUyRlp5VTJYbFc0MUhoY2FoeXRPUUpaVkhLYVh3JTJGZCUyRjdyWSUyRnp2aUFxUTIxbGRYdHl0ckRHMGs1MjRxS21uajhzTzczNnJvTm1OSWx0ZlZ2N2hGZWFNbmtVcVR3cHhOQTJTMk1hVDVldFM5dzZXZHRFdngxYjQyQTdTeW1oJTJGMkM1elR6YiUyQlp1bjNzd09qYWNHVkt3cnFNZ29hamVpSlNyJTJGT1REVmRWWlBZYTNwT2olMkJXN3UzMXVLS3p1WkdQMWRlUFAxSXoxVW92eHRKJTJGbFlVJTJGbCUyRjVoT3R5UyUyQldybGlzMUdtMHB5ZmlSNCUyRmk5S3Y3U3VtY3J2TlludTVEY1hIN3lUb2FtcmZTZjZZTDhyYXRMWiUyQlp0SnZvVDZid1hNYkVqdUN3Vmg4dUphdVBGdUZlJTJCeCUyQllKNE5NYXdRaU9GenlaT2xEWDRoJTJGd1F5UWVWdEFuMUJZOVIxUU45V1UxdG9HJTJGYTNxR1llR0UzbG5STFBWZk0xOUxkQXlXa1R0Y1c4YTd4T0dhcTFrR3o3ayUyRkFNNm1vQUFDaWdBMkF4Sjdsb2puNzJ3QU5nS0FiREx6WnNpcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlIdiUyQmJObXhWMmJObXhWMlF6ejNwM1A2cnFLYkZLd3l0JTJGa240bEpQc2VXVFBPVmZuWDVnbXN0TnRkQnRuTWJhanlrdVhIWDBZeVBoJTJGMmIlMkZ3REVjYnJmbTI0TVJ6Wkk0NDdHUjU5dzZwTWZOeVdsN0VkRDFLTTNDcDZkd29LbGRqJTJCMXpIRSUyRlJrbzByejFyVXR6OVN2TGUybG0ySHA4akM3QmhXcVY1eHZVYiUyRkRubjAxalBFaW44cEhnY2tlbVhtc1RhSGN4QU53MDVvNTdPN0lJS3hsaUpZbGwlMkZhUlQlMkI4NCUyRnNOa0laaElrU2pSRGw2enMlMkZ3SWpKQ1hGSGtiNWdwMyUyQmEyciUyQmJkUHVFdllMVmJMUnBpRkwyN2MyRXZXa2owJTJGZDh2MlZwa0dzZk4ycDNLcmEzVjJYaWNnRXNRZVFKM3FTTnM3ZCUyQmtkTzFyU2JLdzFMaE4lMkJsYlJYVkpLRlp5cThaVjMlMkYzWUdITE9FZWN2S0Z4NVR2VExEeW0waWR2M0V2ZEclMkZ3Qjl5ZjVhJTJGc3QlMkIzbHBIVU92c3VhNGlOd2JXQ3J1SEslMkZCMHFOOWowem95JTJCYXJXNDhyMk9xM2wxTGUyc1NpenVHa3FrNnpnVVZYTWRhOEYlMkZ3Q0RUT08yTTAxcklzMFhDUlE0a0hxQ3FHblpsNzROZ2tUbE1xU09JWnBQVk5yWGpHRzhRdmZqMndYelN5cXoxZU8lMkZ0TlNqUU04c1Z1YmhGYmJrSXBQaUklMkJVUjVZY2EzcTE3SWRQbXRaMmpzN3l6dHJpT05OaHlBS1NjaVB0TUpVZklaYVhEV0wlMkJyYTBqY3EwWllBVjR5QXE2bXY4eW5KZjVZZXgxUFJqcFVzZk8lMkYwcG51TEpXTlBVZ2tOWjRsJTJGbTlOaDZ2SCUyQlZwTVJhMnV2QmNYZWoyR3AyclNDNXRKSmJPWmtxVzR2JTJCJTJGZ1klMkJ4JTJGZUpodEJCNXNPaTMxM2JvTGE5aWhNbG8zRUI1Q2xHa1VMeSUyQjE2WEprNHJobFphckJGQWJabGp0clM1VGclMkZvSUY0ZnlPVDFKamJDMUwlMkJiU2Jvd3lNd3U0V3J6SnJ5WDloMVBRcHh3JTJGRldGWE51dDlQQjZzclM2ZnJscUk0SlpISiUyQnIzMGJDc2JPZjVwaHgzJTJGQU4xVCUyRndDUmdQUWJ0cmVWckVGclc4Z2ZuRFUwZEpVUEYwOXVuSEQlMkZBRmV5Z2pqdmJpMmhhVFFicHhjWGxwSHZMcDl4OW42eENsZmp0alhpMVAyUDNiJTJGR3NlRTk5b2w5cXR5aklLYW1ZbGt0YjZNbjBMNVFLSjhacDZkM3glMkJINHZ0OE9EJTJGdmNpVFhQWmFaJTJCa2RwNSUyQmd0MTlZYWQ1cDAlMkZlMHZVMlk4VDBOUGlhTSUyRnRKJTJGdXZPajZsY0d5c0ZhUmxZeEpXVWpma1VYazN6NU1NNXAlMkJWMmwzVTJwUGRhbEZISzFzT0x5cVF4U1phRk9kRFdPVDdXJTJGN2VUVHpLOFVkbGN4UkVoWEJUZiUyQmR6V2clMkI3SnhOamk3MEhuVHolMkI1MUdYeXJyRnhhYXBENjluZmNScVNmdHF4SEwxb2olMkZPalBqdFEwR05ZQ2ZyQ1hXaTNRTXRsZWxoeWprWWJGZmR2c3l4NE04N1d5NnpxZW1UcTRYOUt3UW5tZWdrSyUyQm1mJTJCU2k1RzlNMVBWZkxVdDNvZDNDSklHREVRUzdpS1VENFpvdjglMkZqeUVycXJydVBOa0s1OCUyRkpON1N4MCUyQjBzRGUzazBrOXhBNkpCSkFDR3F3UEhpS3A4UzhmdHMyRjBtckRTM251YlBUaEg2WkxhNVljUXNuQnZzM2tTc0NuSmVYSnVLJTJGQiUyRndBWW13USUyRnJYZGpFc1FSaXpodmpLQ3JVcDhJZjR1VyUyRndDeXVLM0ZzODkzcDFuZXpmVmRlRENPeG1IRmk4WkglMkI4OXdTZUJqUDJZdVglMkJWRmlZZ2dBNzBQbXQ5UXpmeWpkeFhlaVBlYVkzck5ZdDlaamRLVWtnUDJneWo3TDhmdEwlMkZQZ1R6MnR1TGRKSVQ2Y04xSkZjeHpKMlU3U2IlMkZzJTJGYTVCc0tmTEVNdmxQWGJ5MnNKSTQwdUYlMkYwaXpWdVVjYjA1bjB6M2drVGx3JTJGMzIzN3ZIZWRkWE41cEVNZG5ibU95czRCRmN5MHFEY0Y2R0phJTJGd0RGYWNteVg4UHUyUjFRT2k2WXVwYWJkMkY3OGRqNnhqTFZGVWxweVNhSHdrVWY3RjAlMkJESXJydmw2ZHI0Mk4wZU90UklIczdsZGt2NEI5aWpmOHRLZ2ZCJTJGUCUyRkFIWDI4bVBsdXliMFZzN09kVEw2U1NSZW9LOCUyRlRacU4lMkZycU9QTCUyRkp3VHFkaEZyOW0xbHFVaGpuaGNtMnV2OEFkbHROJTJGTUtmN3BiOXRQOEFacmpWaFdIYUhyRVdxeGpUYjlndDlHS1F5dHNYcHR4TmYyc2wzNWQzSjBqem5KYkNvanVRbFIyNmNUJTJCdGM1NXF0aGR5WGN5eUo5WDh3V2Z4M0VTYkM2VWJyY3dmelM4ZmpmaiUyRkFIeWZ2UHQ4OE4lMkZLdXEzRjNxMWhxQklFeWM0cFdadUNrb0F3Y2s5TUE1MFZQSlYlMkZNcTJrMFR6bmZDSlFVbVBKb20lMkJ6SkclMkZ4Y1c5dCUyRndEWTRRNmNJTGE2WlkyZUtSd3NsdjZnb2FEZmp5JTJGYUs0ZiUyRkFKbGVhZE04MGE4dDFwY1o5R0NKWW11RzJNckQ3VEFmc3F2MlYlMkZtd3IwV3l1TlhVdyUyRlZ4Y2kxJTJCS0x0JTJGdzIzd3JnNnFHVmFucjF2cksydDNjc0lyeTFhRVNCanhKRVlZT1FmZjRjanZtM3pMYnBaWExXVEdDNXZyJTJGd0Nzd1JqZmpCR29DOHlmaSUyQklqQ1BYMnZOTXUlMkZxWkRSTkdLU0FnVXF4cWdxS3J1RiUyQkg0c2pzeVBQSVpaU1hKN2tuZkcxZTklMkZseHJkdDVrc2JxZFNGdTdlTUxjVzVPNCUyQkUwY1Y2eHZuRjc1dVZ6Y2IxNHl5Qlc3JTJGYU8yS2VTOVJ1dEM4eVdkN0RNWUxmbjZkM0wlMkJ4NkQ3U0xKN1loZGtOZDNVa1JEUlNYRXJ4TURVRkdjbFQ5SXduZEN0cFdyejZaTjhNc2tjRHNHZG9qeGtqY2ZabWlwJTJCMnY4QUwlMkIzaVdveVNmWGJpSFVtRnkxNGZyS1hxSDRuTDE0ekslMkZWdVg3Y2JZRWVKV0RQUVZwVTBQajB4NnlxTEwwcEpVVzR0WEUxbzVPOVNhU1JiZVAyOENvYjFaMVQ2dlBLenhqZU5TU1FLOWFWJTJCem5YTGZVcmR0RHQ5VDFVJTJCamVSeHBhM2lNdkY1VjQxamNnJTJGdHJ4JTJCTE9kNlZiYVRxSmxTN2xNbDVJcmkzaEh3UmlRajkyMHNuaHpPRHBwV3NpaTZ6Y0dlU1pnM3BvM05TeSUyRkQlMkZlbjRLOVY1NDJyMEx5aGVhWGNtNXVhQ0NXTmh4a2wlMkZ2Q2xPcWN2czRycm41ZzJlbkk5dHBLaTR1cWxXY2swclN2eFA4QXRmN0hJVGF6cGNjcmlOYUxHRCUyRm96R25CVklKa1pQMjYxJTJCRnVXRTRqdUxxU1pvMnBiSk1qeWl0QVFlVlB3cmp4YlVFMDFyZXVYR3ZDS1BVWkoyQ3MwaXFnVWdGdHVudyUyRkNLZkRoV0xYU3pheVc3M2p4dUdFbFdnSlViVW9TRGhrTGNYRWpKRFNKcWtvU2QlMkJIN09HbGg1YTFIekRPTklpdCUyRld2WkVNa0pSbFF0R2xLc0N4Vlg0JTJGeSUyRmF3V3RJTFRMVFRtZU1tYlRybTFqWGUwbm1NTE93SDJuWmxyV3YlMkJWaGxCYjZMcWwwOXpwZW1yYngyY0plNVdOcWlSaTNFS3JmeWolMkJaUjhXSjZ4JTJCVlBuWFFySzQxaTlzbGpzclVCNXBCTEd6QVZDZ2lOV0xOdWZzNEk4aDZocDczOHNOeFJCZXhlaTVCb0JKV3NjZyUyRjJYdzRWWmpvTWxsRmJ4NjM1WTUyazltdlBVZEthUmpISUYlMkIwOFBJbmhKUVY2JTJGYSUyQkhPcTZkNSUyRjBHN3RvWnpLJTJGQndLekJDVnJUbzNHcFElMkY2MmNZVzIxRFElMkZNVVZyRkglMkI1dnlJblBTSXF6ZkUxZjJhZmF3a210cDQya2x0MGY2dXp1SW5Xb0RxckZRUlFqa01KVjlRMm1zNlZmaXRwZVJTJTJCd1lWJTJGd0NCTkRnMm96enI1WTF2VEk3VjlMMVBuYlREazhFNFFzN00xS0tIQkRwOUdUZlFmT2Rvc1N4dzZ0eGtwOFVOMER4QkczN1dOZWEwOVV6WkJOWSUyRk0zU2ZMY1ZyTHJESXlYWkt3bTJibVc0MERzRjMlMkJGYSUyRkY4ZVRXMXVvYnkyaXU3ZHVjTXlDU05oM1ZoVVlFSzJiTlhOaXJzMmJOaXJzMmJOaXIlMkYlMkZTNyUyRm16WnNWZG16WnNWZG5FJTJGd0E5cktZWG1qNmpUOXcwY3R1VDRPcEVnQiUyRjFsT2RzeU8lMkJkJTJGTFVmbXZ5JTJGY2FYc3R4dE5aeUhvc3lib2ZrMzJHJTJGMXNCNU9ScE1veFo0VFBJR2o3cGJQbCUyQk5QckVSaSUyRmFHNkgzOE1rUGxYemglMkJqaEhvJTJCcm11bkNxd1hGS21EbWZpU1JmMjdkJTJGd0J2OXBNSkJEY1dON0phWGNSaHVZSEtUUlBzVmRUMFAlMkZOV0I5UmlXTzZhZyUyRmR5Z1NMN2N1djNIS3Brd0ltUGNYb00yS0dhSGh5M0IzQkhmM2g2QjVxc2xYUW9vTk9Wb2YwYTdYZGk2ZkR4QlBLUVE3OHZUMzV4Tmw2RnIxbDVzMHlYU05aUkh1akh4bFJodE12JTJCJTJGRThKQjlyJTJGQUlmSUxvMnBUNlhmTGQ4bW1pS2VoUEF6RThvVCUyQnl2S3RPUFdQJTJCWEt2cmFmU3BsMVhUMkw2ZXo4NExxTHJFMWE4V0g3UEg3TkRsa01vbHVQaUhSYXJSejA1RiUyQnFKNVNIZjFDVCUyQlolMkZMbHo1V3Z2VFVtWFQ1alcyblAlMkZFSCUyRndDTEIlMkZ3MkZhdUQ4U242YzY3YTNWaDV4MHA3RyUyQlJmckFXc2tZNkVIcExGWHAlMkZ4cG5MZGMwUzg4dDNwdHJpcjI3bXNFM1psSDZuWDlwY21SMUhKeEZTM3VBNG9mdERCbHZjejJseEhjMnNqUXp4TUdqbFRZZ2pDVkc2TWglMkJXRDRaUkl2djNHQzFaN3BkeEhyYU5KQ1ZpdWtxMTNhc3dWQU85eENXJTJGM1VmOEFka2YlMkI2JTJGOEFWdzF0NU5Qa0thYmUzU3lxS0cydUlxdVlEWDdKYzdlaTM3YSUyRlolMkZhem05dGRUMmR4SGRXemNKWXp5UTlSNFVJN3F3JTJCRmhrd2h2RHFFQ1RhWmJFeHlIaFBicUttQ1lpdkJmJTJCS1pQdFIlMkY4RGdJa1NEeFZIcUslMkZTeUJGYmpmdlI4azF4WTZnVnRMYjZ2SmJWV1piaHZWTG8zOHlBZW1ZWkYlMkY0WENqVzBNY1g5ODYlMkJYNzJVZW02VjU2YmVrVkFZTHUwRCUyRjhBSlNMJTJGQUl0anc3VzB1dFZnajAlMkI3azlEVUxjJTJCbmFTTWFGa3J2YXolMkY4eVhQJTJCcGdxMDBpenRia2FWY1A4QVdCZXI2TnpFd29yTFdqUnNvSjR5UnY4QUVqcjlqR09NRGJuNXkzVXlKOHZjeWZ5SHBsMXB1aHkzMXpFRTFlOWNKZkt4WGpLOEpNYVRxZkdaQ3J0JTJGTjlyQ1g4d2RhJTJCcXlhYkFHQU04NWFZQTlGVWNWJTJGd0NHeVpYRWx2YjIwVmdIYjFMZU5ERUttcEtEaEdTJTJGZk9LJTJCY3JodFUxRzh2TFolMkJZc3o2TTBRJTJCMG5CaDZjd0glMkIlMkI1YWY3RjhzbHNBQXhHNXRrZXNUbTY4c2FkZG8zR2JUWjViYjFCMUclMkZyUmZyeEdUVzdMelBwY3JhaEFMZnpEcGlyOWJpSTR0SkVTQVpvd2Z0SjhTdnglMkZZJTJGMWNENlZNYjNSTlRzU2hKbWhqdTRnVlAyb3Z0SCUyRmdHJTJCTEJWbmI2YjVnMHV4MUpHV0RYTkRqNFNFaW9uZ1FjR2prJTJGMzRoWDdMZnNZQnVrdCUyQldiYTRnV0hXbWolMkJzV2RwSzBEd3F5JTJCb1drb25KRSUyRnZIWk9mTmNLZGFzbms4MDI4OFRONkVFcXhPWE5XU09KaVM3bjJwOGVCNGJ5U3cxaWx2OEF1NE9RazQ3a0tvJTJCTHYlMkZMWDdXSzZqcjR1OVVlZTFqSXRuZGlJaWFzeXY5c1YlMkZsM3dXQUZaQmJ2WWFqcXNWJTJGRFNQMXlJVFBVZ1NLSDlTU2luWWNJUnclMkJIN1RTSmhyJTJCWU9yMnNPa1dtbmhIU0s2WWlSb2xGRjVBJTJCbjZuZ0ppZjhBV3lQMk1MNmRiaVJJJTJGcnFzQUkzU1JBc01ZJTJCeEhLcmxHaGZsJTJGZWZCJTJCOCUyRjNYZ1hYWXBwSkcxbTJ1bmtiajZPcDJwVVNLVkFxa3NTTnNpZjVMJTJGRkg5dkhvVWxyeXRkdERDZ2RtVjdkNUkyYm9VJTJCSU5HVCUyRkxocHIzbkxUS0o5VVQxOVRCNHpOSHRDZTNKajNiMlhJc3NwMVk4YlVmRk9Rc2l4N1NDU2xBWHBUbWo0YXY1T25zZE0lMkJ1ekIzWm05T1dhTkdEMiUyRk1nUlRvbFAzc1hQNFp2OTJmeVlpNm9JVERWckcyOHg2TkJlQnZxV29XUzFpdlNlSWlrVThqRkklMkJ6TEE2JTJGR24lMkIlMkIzeUZhcTFwY1hpeDI4WlVHaTNVMndhZHglMkZ1emlBRVd2OEFxJTJGSDl2RExWN1R6WGVXcnFiYVdPNFZoSGVOSHRGZENQN0VoWDVENHY5JTJCZmJ3cEMzbGlHZ3ZJb1ZkU3F0NnBMUEdyMHBUaiUyQno4WHc0Q1VrRUdpbDdSd1J1OVp6d2pQeDhVWmlLZVBTaHliJTJCUmZNZGhITTJrTEVWJTJCc0RsRExRRm5jVUN4Y1JYN1dFRjFEQ3M2M3pDczZyNmMxTmtlbmNyN3JnWFNwRnNiNXpDRm9yZXBDOVBpVUVmWnI0REFEUlZEJTJCZGRVa1BtUFU0bFVnVk50Tkc0cUR3MkJvZjJrUDJHeUsxTEVDcFklMkJBcVRuVUZoc3RhMUNlJTJCMUczaW51WkNyeVNzZ3F3cUZOUmt3dTlSOG0lMkJXSXdzY0VIcmhhckRCR2pTSDV0VDRmOWtjSW9vcDRkYTZWcXQyR1cwdGJpUUhiaWtia0g1N1V3SE5GTGJTdmIzQ05GTEV4U1NKeHhLc3V6S3dQUWpPdTMlMkZtcSUyQjFtRm8xQzJObUZNamhUUUxHdSUyRktSdHVtUWZVJTJGTVdoM3VvVFh4MHIxcEplUEtTV1NuSmxWVTVsUU51ZkhuaFF4bU9ZeGtsU1BpRkNEdlVaUUtVSXBVbjdKcjAlMkI3RDhlWXJCUDduUmJVZjYxVyUyRmhtUG10a0JGdnB0bkVlekNNa2o3OENwUlpPWTV3JTJGQm1XaEJDanNldVN5eW4wcElwSXIyQ1NyMmd0YllUUXQ2YXlsdWZQcDhQQldiQ1pQTnVyUk9za1lnVmtZT3Y3dFNBVk5SdGcyNzgwJTJCWVBOZDVDZFd1UkpIRVdrV09ORmpSYWloJTJCRkFQbGpzcUxlUnJWaCUyQmpRdDNHQlJvWEJCS0FmRndhZyUyQkxKMTVCMTd5ZmVhbEUydGFUSGNYTUc2M0VxJTJGdmJZTCUyRnZ5SCUyQjZlRkslMkYzaUp5VDl2QVhrUHlnUE5FdW94eDNLUTNWckFIdFlXUDhBZU94cHYlMkZ4V3Fpak12MldaTUxkUzh2Qkx4NHBnOWpxVnFURkpJdnd1cDZmdlA1bFAlMkZETGlsbHY1aSUyQlN0UHRMODY3cEVFY2VtNmh4a2l2TFdqSWslMkZldkhiMDVmdFpGOU9rZDVFdDVtYXl2b1dFdHJkUm1uQ1VmWW1oWWZ6ZnRwJTJCM2szJTJGQUM2OHpMZnglMkZ3Q0ZkV3QxZUVscmJVb1clMkJ3R0lyRFBHdjdDeVUlMkJMaiUyQjE4ZUllYXZLTTNscTdXcWZXTk9rWWl6dVhGZU5lc0U5UDhBaVg3V05icUNuY2ZtMmZ6Um9VbWc2ekVxYTdaUERQUEN2OTNlUVJNQzAwQSUyRmElMkZaYVdMQ0h6ZjhBbDdvT3JhNWI2aDVLdUJIZTNyajYxWXdyJTJCNVhsdTAlMkZMJTJGZERmenglMkY4UXdwdXA0VldCck9SaGZXN2lTMFlrckpia2RSTEt2Mm9tJTJGWTRmYnpzdmtYVTdmV05IanUzamhqMVpBSTlVRUtoU0p2RW1nJTJCRjElMkJQRWhYZ1BtJTJCOTh5JTJCV3JpVHl4ck0waUNNQm81VlZXOWFEb0pJWm0lMkJMaWY1ZnRSdGhONVg4enhXWG0lMkZUWjlkSHE2SEglMkZvejJ6MWVOTGQxS3E0VHZ3WSUyQm8yZWwlMkZQWGtqVFBQR2tOWTNuN3E3aHE5amVxUGppa3AlMkZ3QU5FJTJGOEF1eE04bWF6byUyQnElMkJWOVV1TkkxS0wwN3kyUEZsYmRXVSUyRlpsalA3VVRmc3RpaDlKeTZkJTJCVlYzZjJkamEzbHRIZTZpcGV6UzJtcnpBRmZoJTJCMmlNZjJLJTJGRTJYY2ZrNW9qb1RaMzExYnoxSkVqRlhHJTJGaXRFJTJGNGxubGgzVVNMS0NZN2xTR0xRN1VJM0RBOW16MEwlMkJWUDV3THF4aThzJTJCYVpSSHFJcEhaWDBoQUU5TmxqbFBhZiUyRkslMkYzWiUyRnJZcXFhbCUyQlMlMkJvWGIyRVl2cmFXRzNrY3l2TEczSVJ1d1klMkJrZ1BGVzJQZkpqWiUyQlJydXd1RmEyMWlSWUZBQ0tGS3NLZjZyJTJCbWYlMkJSZVRVRHh5NllxbzIwTFFRcEU4cnpzbzNsa3B5YjU4UUJpMmJOaXJzMmJOaXJzMmJOaXIlMkZBUCUyRlQ3JTJGbXpac1ZkbXpac1ZkbEVBOWN2TmlyemI4enZJZjZiaE91NlJFUDB0YkwlMkIlMkJqVWIzRVElMkZaJTJGNHlwJTJCeCUyRlA5ak9IYWd2cVdzTXclMkIxRVRHd1BXaDMzejF6bkklMkZ6TDhocUV1dGYwcVA0SlJ6dnJkUjlsd1IlMkZwQ0R3JTJGMzclMkZ3ZVJuR3hUdE5CcmVFeHc1RHNENlNlbjlGNGdwcGh0bzJwcllTU1EzS2V0cDExUmJ5QWl1M1FTb1A1MCUyRjRaY0s1WXpHNVE3ZUdQRVV5UnBNeWtSU0VoSDdNVjJJekdBa0RZNWgzT1NFTWtEanlDeEw4YmVhWmFnbHhvT3B4VFc3cUxTV2ttbjNjWDJlSjM0bnglMkZ3QXBjbE1zZW4lMkJjZEllQzRRQ1pRUFhqSDJrYW53eXhlMlJqVDclMkIyZTBiUnRWSExUNVNXaGwlMkZhdDVPenIlMkZ4V3glMkIydUpXdHhlNkhxU3c4d3R4RHZCTCUyQnhMR2VnUDh5T015Y2VRRWJjdW83bm5OVnBaNEptTXR3ZDR5JTJGbkQ5YkVOVTB5ODBDJTJCYXp1UnlUckhJUHN1blpoJTJGVEtpbDRrU0lhaiUyQkdkWjFIVHRNODQ2U1hVZW5LdjJnTjNnbHAxJTJGeWtQJTJGRDV5TzlzN3ZSYjJTeHZVNHNoM0k2TU96cDdOa3lPbzVPS21TdUdVTXZROU1NZEYxbTQwUyUyRmp2b0FIVWZEUEEzMlpJejlwR0glMkZESWYyR3dqdDVRaDMlMkJ3MyUyQmRjRm5yaXIwR1c1S3l4NmhhdjZsdGZxREhkZFc1RGJpMWRvNVYlMkJ3NiUyRnpaTFBMYlE2blA4QVdycEFieTNvSkdJMmtYcWtyZnl5cVI5ck9VNkhyS1dIcTJOOEdsMHk2cDY2THUwYmpaWjR2JTJCTEYlMkZhWCUyRkFIWW1kYThwMmkydGs4c2pySTdtaVRJVHhraiUyQjFISlE3aHVKJTJCTEpSM0szc251cTNmbzJydW9xUUMzaWR2c2dEJTJGV3BuTUolMkZKJTJGbWU0TXNxMmpDOXR1VWFYY1hFUjNkckoxamFwSDcyTlclMkJGbVglMkZpdCUyRndCNW5UZElrc3l6VzBjJTJGcnl4VlpnekJtQ3NhNGVDWkFLSERJV2diUER2SzlqcXVoNnhhVyUyQnRXODFyREw2bG96VEthRkpRVkFCJTJCS3RmaHd2czQ3bXl2TCUyQk5RZlRzMmtEOVVLOGdRS2x2MlhwOFN0blIlMkZ6UTFHVzA4dSUyQmxaTzBkM2RUeHhRc2hLc0tIbTdoaDlqaXElMkZhemk2TXhFaUk1WU9hM055eEpNalZydXglMkJJcmxjdG1RM1RTOTFFM2pDRzJqSEkwOVIxcU9kT2dGZjkxciUyRncyQ0xLRll4eUpCSUZaSk93SGdNQzJOcnlHM3dSbnE1NnQlMkZaaHVzWmlpaHU3Y01XdDVpcjJ6cHlpa1VBVTlUJTJCWWN1V1I1cGRQcWlhY1FyV3FYQ3pSMVVTVkJBYiUyRkFIWXAlMkZud3V0ZFZodGRUYSUyRmdXVkJPQWs4QmNORzlCVHF5azRjNnJjMmR4ZTJGM2Mya2NLSkdJN3F4NGtVanB5UjBCNlZyJTJGTmhCcWM5aGFTeHBIRVJhWFJhV0l0JTJGdXZjb1RSYTc1UGx5UW4lMkZBSlp2WUklMkZNVVMyU05FTGlWVEV5Z1VqblZXOU9sZnRJOGhWV1ZzblNYVnhmVEdTNmxhU1ZpQ1Myd29kanNOczUlMkZvOHJyTDY5cXdkNnBJcnFBdyUyRmQlMkZZUHc5T21TdWE1MUdWSjc2MnN3UVhMQ0QxQWlyeU5Rck1maTIlMkZ5Vnd4S2tJalc3JTJCZXpqUjdQVHByJTJCVWJ2Nld5VUg4emZhNmR1T0VQbmpUN1NFV21yeHhrU1hhdGF6b3dBNUtZJTJCU2NnRDlxSXJ4d1EzbVBYN0VldHFGaEF0cVB0ZWd6eVNBZXdBNDVGJTJGTUhtMWRjUklHak1kdkMlMkZxUklLY3VWQ3ZKMiUyQlIlMkJ6Z2xMWTJ5aGpuTGFFU2ZjRXF1YnVyVzhNNUhwekt2SXIxRmFEbDc5Y1JiUnI2UzglMkJyMjQ1R0NvYWMlMkZDaktwNjclMkZ3QXd3JTJGOEFMM2xpMDFxQkxnUEpPOGY3dDR3UDdzJTJGc0U5ZmhPSGVyJTJCVnRmZ2clMkJ2YWJjSmUxRkpyUGp3WlZVVSUyRmR5JTJGUjlsbHlJRml4dUV6aktFakNZb2ptR002amFhaloyOFJqQmlFaXNKelVMVGkzaVNLUjB3Ym9Ia1RYZFd0MjFPTFQ1cnUyQTVSbE4xazhTcnNWV1QlMkZBR0Q1ZW5hMWFYQSUyQm82cEQlMkI5SjJXY2VuTCUyRmxCSlI4RCUyRndDcm5TZnk4ODBXJTJGbHl6bDBtN3VKWnRKUiUyQlZtWFNzbHR5TlhoWUQ3Y1A3U2NmaVQlMkJYRFhjeG9zUjFEOHJ2UDJxV1VkbFphZEhaVzdrUGNQY1hFWWVTbjJFS1I4JTJCS0o5cmglMkZOa1J1JTJGd0FydGMwMjZleTFGb29Kbzl5S3M0SVA3U3RRY2x6MGJyZjVqZVh0S2hSN2VZWDBzaWVvaVFIWUwyOVJ2MkNmNVQ4V1E3VyUyRk1qJTJCWnJPS2QwdDFDdCUyQjZlRGs3eE1hajA1Q2FOeGIlMkZWd0VnQ3kyNDlQbHlFQ01lZko0MjM1ZlhRNjNVZiUyRkF0JTJGWEM3VnZLc21rZlY3aWFiMWRQbElTVzdqVGVGeiUyQnhKSFdvUGczN2VkUTVreU5ESXZweXglMkZiUSUyQiUyRlFnOTFPQjdoRkN1cklzc1VxOEpvSEZVZEQlMkJ5dyUyRlUySUlJc01NbUtlT1poa2lZeUhNRjVnJTJCaENOaXBjeUZmM253RDdjSCUyQiUyRm9UJTJCMXglMkZ3QjJKJTJCemlOeVcwMSUyQk5zZVZ0TW9NYzRHN1ZIODJUQ2J5eGZXTXh0VU1sbkRJUHJPbGk1NUpJaCUyRndDSzJaZU1xdGhZWU9NVnhCTmIlMkZ1MkhLJTJGc2w2SlU3WGxwJTJCMXhEZmJUJTJGZGVGZ21Qa25XN3EwZUMlMkZzWiUyQk9vV1RjazVmdFJuckc5UHRJZnN0bmF0WTBpdyUyRk1mUTQlMkZNV2g4YmZYYmRTanhuYm15RDQ3UzQlMkY1a3k1NWdXY2FacURQcDF5Wm80MlBwejhTdkllUEhPbiUyQlRmTzJxYVhNTCUyRlNIaVBxY1JmMk05ZlRZZjc4WGo4WElmczRxb1dzR3NRNjRUcHAlMkJvMzF6R2JLOVdZZkZFOFo5VGNlSTRGUDlsbnBOYldEVmRHaXQ5UlJiaU80Z1QxZzNRa3FDVzlqWDRsemtzRTF6NTM4MkRVN1d6RUtvcXE1VVZBb09JZVY5dVIlMkJMJTJGZ2M3UkRHc01NY1MlMkZaalVJUGtvcGowVXZIdFElMkZLblY5SDFGOVg4dlhDYWp5WXQ5VHVRb1lMU2lqa3g5T1RqJTJGbGNNUzhxJTJCYUxueTk1Z3VvTllzMnMlMkZyZkVYc0xMeEt5SlhqTEg0cHhPZHB3bDF6eTFwJTJCdkNPU2N0RGN3MTlLNWlvSEFPeFUxSHhKJTJGazRvdE5vWllyaUpKb1dEeFNLR1JoMElJMkl5RiUyRm1OJTJCWGxsNTUwejRPTUdzMm9Kc0x5bmZyNk12ODBMJTJGd0RDZmF5VTZSWU5wbGhEWU5NWnhBQ3F5RUJTVnFTb0lIOHVEajB4VjhOYXBwVjdwZDdOcCUyQm9RTmJYOXF4U2FKdW9ZZnJyOXBXd3VTTmc0TlNIQnFLYkVIeHJuckw4MFB5Mmc4NldYMSUyQndDdzY5YUpTM2tPeXpvTiUyRnE4eCUyRjVOUCUyQncyZVhtMHE4Z3Vab2JsR2dsaWNwTkE0cElyb2FNamZ5ME9LdnBmOGx2TXVzYTVvbDFaYXpPTHFYUzNqaWl1VHZJeU92SlJJZjJ5bEtjODZlTTh5JTJGazM1dXNmSzJyM0Z0ZnlNdGpxb1JaWjNxUkZOR1Q2YlA0SVE3SSUyRiUyQnh6dEYxJTJCYUhrZTAxU0RSMzFhTjdtWiUyRlRMUlZlS051M3FURDRGNWRNVlpsbXlsSVpRd05RZHdSdU12RlhaczJiRlhaczJiRlglMkYlMkZVNyUyRm16WnNWZG16WnNWZG16WnNWZGpYVlhWbFljbElJSVBRZzQ3R1NPc2FOSTVvcWdzeDloMXhWNFIlMkJadmtBNlZLMnI2VkglMkZ1UGxhckl2OEF1bHolMkJ6JTJGeGpiJTJGZGYlMkZBNUVvSkxLJTJGd0JGaDB5T0pVMUF5ckg2b0FCYm9xSkl0ZWJ0eUpralpQOEFLVnM3M3FubSUyRndBc3lXODlsZXM3eHp3dFNNeE1SS0clMkJIZ2hweDU1dyUyRndBeSUyQldwYklIV05OamVHS0ZrRGpsVnc1JTJCSVBHd3A4UyUyRnRjZnNaR1VhdVFIdmR2cE5XSnhqaHl5TVpBJTJCaVhRJTJCVW1NWE50Y1dWekphWFNHT2VKaXNpSHNSdGxsMXVMZjZyY01lS2IyMHZWb1clMkY2cFAlMkIwdjdHSHNMcjVwdHZxN21PUFU0RWxtRWhISDFlQ0lJNGtwJTJCejZhTzclMkZ0ZXBoQk5CUGJ5dERjUnRGTkdhUEc0b1I3RVpWS0pIcmh6JTJCOTJKakRQQTRjdzNITWRSJTJGU2lpTkcxbTcwMjhFaUVDNGolMkJHV01uNEpVN3FmOEFqVnNsbXZhQnAzbkxTRnZiQ2lUS0NZMlAyb3BQMjRwS2ZzJTJGOWQ1QlRGRkl5czVaR1g5cEtjaDlCNjVKdkttclNhVmRldnhlYTFtJTJCQ2NFRlF5ajl0UiUyRnZ4TXR4WkJJVjh4M09pMWVrbnA1VWQ0bjZaZCUyRjdYbXNrVnhwMTFKWTNzWmlramJpeUhzZjhBbWslMkZzNGNhUGF5NnBlUWFkRTZySk13Vlhib0Y2ayUyQiUyRkVET24lMkJkUElrZm1TeUdwNlFBMTJxYzRKRnBTVlB0Y0c5JTJGd0RqZkkzNWE4cXphRk5hM3VyS3JYTG1zY2ZJMWdQN05TdjJuJTJGbXl3eG91SU4xRFdQS0RXOTVEWTZLMHQ1SWZnbmFVS2dEMDVjbDQ5STZIN1RaMGJ5bkJBbW1qU1Z2aGN6MnFFTTYwJTJCSG5WUnc5b20lMkJIJTJGQUZzSXRmaG5kZzFxJTJGcE5keG1JdURRVlUlMkZFQ2Y4b1lSZVNMazZSNW5XQncxYm1UNnNTRDhGR0JiNGglMkZOeVhEeVB2YnNXSVRFOSUyRlZHSmtCMzBqUEtWMVBwT3NyQmR1UkxGY1BiM0pZOVZkaXRXJTJGMlh4WjAlMkI5MU8yc3BJb0pXTDNFNTR3VzBZNVNPZjlVZEYlMkZtZHZoem0lMkZtMnclMkJvZWFwSmxCVmRSaldkQ0RzWkUyY2ZldUhkdmZRVzBCbmdacHRWdkVIMXUlMkZsRzZnaiUyQjVoSDdLcjB4SGMwcEQlMkJZZzh3YTFOREZaV2pTV3RzckNSb2lHSmNuNDZiMVlkRjJ5RldlbXp4c1cxQ040RWolMkZabFVvZnViT3MyV3B4cE5HbDJvTVAyZVNiRWU1eVRYR2thZHFGcEphVDI2VDI4NjBZRVZCQjZFSHg4TWVDemRwdW5sRXRwSFlRMzhHcVJyRk5hUEE4RWdKY0ZhJTJGR3FoYWRhbzJYQkdsbWJlMnVDemV2YkdlUm8yUGNOSnglMkYyUyUyRkRodDUxczNzTHBZTG9INm5jSXEyMXdSVTFVY2VMdDlIeGY4SGhqNWY4cFhlcldjJTJCcTJWckhxRTFvcVFXZHZOTHdVb2lqbUpCJTJGTzlXNCUyRnM4Y2pWSDNMZXpFdk0ybVhXcXlhYk5vekI3U1MxV0o1U3dCckhXbkx2OEEzWlViZnk0b25sYXptdHJLQyUyQkpsTm9IRkZORmJtUWFIdnRUSjlyUGx6VTdHT082dnJSYmVOaW9RUU1yUnhtbjkzOElYajRZRTBmUUxuWEJkUTIwNjJsMUNQM1NTcnk5WGF2N29nMCUyRjRMRHNpa3BzN0MzczFXSzJpV0pCJTJCeWdwZzVsTk9YMFlBVnI3VEwweFhzeGN4c1ZsaGt0d3BGUHRMVld3YmYlMkJhbjBlOHRwN0xUWXJteUlMbHB5VDZob1J3MiUyRnUlMkZUYmRsdzN0YW9LNHY3YTFkWTJkVzVHalExcVZIaiUyRndBMjRWYWg1YTAzVmxOeFpFUVR0dnlYN0xIJTJGQUNseWZqeWZvM25yVHJiVjlQUk5JMWk2Z004cVJFTkM4Z2IwNU9VSSUyQk5SNm5SMSUyRjRISVJxT2o2NTVWdSUyRlExU0JvZ1QlMkI3bVUxaWtBN3BKMCUyRndCaTN4Wkd3ZGl6aE9lT1hGQ1JCU1BTWk5YOG1hbWwxTWhOc2ZnbGRQaWpkRDFIJTJCUzM3UzhzNlpMckVFWnQydUVlMVc2Vld0THNnJTJCbEtHSElHT1JlUyUyRjZ3T1I5ZFd0UnAxMWRTUSUyRldIdDRXayUyQnI5M0lHeVUlMkZ5c2slMkZrJTJGVzVJTkFUVDlaMGVBV2N6R1Q2Z3IlMkJvSWxmY2dCeHNmMnZUJTJGQUdNWXhNU2VFMkQwN203UHFCbWpFempXU08zRU9VbyUyQlk3Mk0lMkJZZkxjZDNGSmVRUnh5bzdFelFVNzkyR1E2MGJVOUhrZjlIVEF3dHMxamRWZU5sJTJGeVglMkIybiUyRkVjN1pMNVhzdFZTUzU4cDZrWVpxVmJUcnlzaWY2dFdQclJyJTJGc3BWem11dmFEcTJqenN1cDJKdEE1TkNmanRtTmY5MVRqYiUyRll5Y2NKOHRtZ0pQcVY0SkpMSnBJM3NZTHFKMnVZJTJGdEJnUDkxcTZqcEl5OFZ3MHNOTm44dEcxMW04S1dObnFUckF1bXM1WWhUdnljdCUyQjBSOGZ3JTJGWWIlMkZXd0xkUnBmYVZFa2tQTzUwcjFIaGpKQUxSU2c5SHBYOTIlMkZ3Q3pnU1c0VFY5SGdhNXVwcGRWc3BGdDdhMEZPTU5zaEhKbTNWdVpZOGZWJTJCMHpmQmxaSHEzQk5pZ09ubTUyTElmREhDWXdNQ0ptVlhJOElxTVluekk0Zjg1bCUyQnNSUWM3ZVNLVlJQSEt0czRydVVrUEFjdjlSJTJGaXdiWmFZMXA1Z3RySFVvaXBqbmpXWk9vNGxoUnY4cEd3Y1BMOXBjUk9abzJTNlprYVhneXFvYUZWazRobiUyQko5dVBxTnh3VnJtc1d1cHZZemFsRjlTMUsxbFRpNkdzY3NZWU1wViUyRkZXVU54JTJGbHdZb1NqZDhqeWJPMHN1TE1jVXNkbVVRUk94UnJuSDc1UFF0ZDh2YVQ1aXRCWmFwQUpJMFlQRTZuakpHdyUyRmFqY2ZaemclMkZ3Q1pXaDNHaFclMkZyMndIMXZTWjBEWGxQaWExbSUyRnVadUs3TVYlMkZ1TGolMkJiUFExcGRSM2x0SGN4R3F5Q3RPdEQzSDBISUYlMkJaRm5iM2s4RU1xaHhQQkpIT2g2TW5JVURmU2Rzc0RxM3pmcVdtUjZsRkpxZW5SQ082aUhLJTJGc2szRkQwbmclMkZtamZDM1NOVnVkSnVVdnJLUUpkUU9yeGMxRG9hZmFTUkdxckslMkZSbHlVMzJpM1hsblU0UkhPWXJGMklzcjFoeTlKbSUyRjQ5NSUyRjhBaW1UJTJGQUNzS3RlMFpwJTJGVzFLeGc5S2FMJTJGQUk2TmlwcjZiSCUyRmQwWDg4RW4ybGZGWDAlMkZ3RGx6NXgwZnpicEFsc0lZck8lMkJnQUYlMkZZeEJWQ09SJTJGZUlCVGxFJTJGN0xmN0hKcG5pTHl6NW0xVHlycVZ0cTJseThaWXp1dlZXWDlxT1FmdEkzN1dldWZKbm5IVGZPZWtKcVZpd1NaYUxkMnBOWGhrN3FmOEFKUDdEJTJGdFlGWkptelpzVmRtelpzVmFPY3QlMkZOajhzeDVudEpOYjBOZlQxdUJheXhydDlhalVmWSUyRjR6cVA3dHYydnNaMVBLT0t2aHowQ3Nid016cVNTSFBSZ3cyJTJCTDMlMkZtd3JsaGVCJTJCRDlleEhRanhHZXFmUEg1T2FkNWx1cGRXMGljYWJxVTN4VHFWNVFUTiUyRk95cjhTT2YyblglMkZnTTU5SCUyQlFmbXU1bldDOW5zNHJibDhVNk96TUIlMkZrcHdHS3IlMkZ5ayUyRk9CdE9NUGxuelRNV3N5UkhZNmc1cVlxOUk1ajNpJTJGbGY4QTNYbm94V1YxVmtJWldBS3NOd1FlaEdjNjhzZmt2NVE4dkJacmlFNnJkclElMkJwZEFlbUNPNndqNGYlMkJENTUwVlZDcUZVVVZSUUFiQUFZcTNtelpzVmRtelpzVmYlMkZWNyUyRm16WnNWZG16WnNWZG16WnNWZGlOek5EYndTVFhMQklVVW1SajBBOThXd05mUGFKYlNtJTJCS2kycFNVdjltaDJwaXJBUE9ONXBNV2lTdG9pUEpmTTFiVkk0eXkxRzhqRGtDbndyaERyRDZqRmIlMkJXYkM3V3QzNkVjbCUyQkNQJTJCS2laSGJ0eUphamY1V0R2UDl4WlJhTkNmS3R4S2I0emowNElPUjQwM0pLa2ZBT2ZIJTJGV3dzODRhak5kM0VFa2xGdVNPVXRLJTJGRFJWWGlLZHVRT0ZJZWVhdHBrMEY1UGVhVWolMkJsQVRMSVl3U1loWGQlMkZoJTJCeWxldUxQOVUxMnlrbWlXTzJ2cldPVzRuM1B4Z2NBRlhtYXR5M2NmNzclMkJ4OWpPMSUyRmx2bzBFZWpUMzg4U3ZKcURNakZ4WGxFdnc4VFg5bHM1aCUyQlklMkZrU1R5bmUlMkZwSFRWWTZMZHNWVWolMkZkRHQxaGYlMkZpdHY5MXQlMkZzTWdSVzRkeG85WDR2RGl5U3FjZm9uJTJGTyUyRm95WUpzUUdIZkpMNUZzclhVZFprMG02dVRiUjNVVHZIUUFnelJqa09OU09EbGE1R2djWDAlMkZVSk5MMVMwdjQxRFBGSU5tOEclMkJFJTJGcnltJTJCSE1EMGs1MnR4ZUxwcGpxUFVQZkY2bDVYOHhXbG05OTVldlpsZ3VMU2RralI5Z1RXanJYb3ZQNFhURVBNNnd3ektTS0NUNHR1b0lPJTJCM3ZrZTgweFhVMnRXMTNaUSUyQm8xNWJxOG5wSjhVbEVMVnAlMkIzc01CV09zWE90V3kyaUV5WE51Q3lJdzVNeWY4VnNhc2VGUDd0dml6TDR0cSUyQlR6TlVmdlQlMkJPVTZucGt5OVpyY2lWQU81WHclMkJhOHNpczAxcnAlMkZtQzAxTzVZclNXSjRrWGN5RmlCOW5zSyUyRnQ1ZmxqekxYek1sZzBiUlF1alFFU2JWbERjbDVJZW5MNGt5ZWViUElwOHk2ajVlMURTRWpYMFhXTzRRc3FLWWslMkZmUmdWJTJGYjVneDhjSE1lNWxHVW9tNG1qdVBuelNXJTJGMU9mVkw2UjdzSlcya2VLRlVHeWdHaElKM1BLbU5WeSUyRlRBazFwZFdjOXpCZHJ3dUVsY1RJZXpBJTJGRU1qJTJGbWpYYnZRdGFXM3RFQmdDSk02UHVDSEZRRXh0aXpTS0kxREhKdjVWdXhLcldNcCUyQndDOEpQaCUyQjB2MFpDTkx2cmZVckdHOXRqV09WUWZrZjJsUCUyQnFjUGRIbWUzdklaVjI0c0tuMk94JTJGREpCU3l6ekJwbHJxV25TUVN4TEkwUDc2RXNvSURxTzMlMkJzTWdtbGF4Y2VVZFJYVTdaUzlqSlJiNjJYb1VQN1FIODBmMmslMkY0SE9nWGR5VllnSHAxJTJCV1FXOGc0VHpReW9RcEpJVmgxVnVoR0pDaDdGRzlocmVtcEtoVzRzcnlNTXA2aGxZViUyQiUyRk9XYSUyRmJYZmslMkZVMFpKT0VMMWF5dTIlMkJ5MVA5MXVkdjNpZjhPdUNQSiUyRm1oUEwxeGFhSmV0eDB5NHJGRk14MmltSkpTdmhITFhqJTJGcjROJTJGTzlHJTJGd0FKMjhvJTJGWXZZNjklMkJxT01nZGxZenFQbVd5OHhyNjE1YW91b3hBQTNkazRkSkIwJTJGZlJHam9mQmw1NFUlMkJuQ3lTUk5TYTFsJTJCMnZRcTM4NjElMkJ5NjVHUEtjenRxeGpZN05FdzRqWWJVMzJ6b05wcEYxcWZydzJKWDZ5aWVySEV4b0ppdldJZjVmSDdEWVluWmFZM3BOOU41TjFuOUpKRWJ1SXd5Um9pc1kxa0RicFZ1M0YlMkZpZE03eHBsM1klMkJhZEZ0N201dGxlM3ZJVWthQ1lCeDhRb3dvZjVXQiUyQlBPTkcwanZMWTI4cWxSVWdxd295T091MzdMcGlYbDNYYmp5WnFrN1hnbG10WklmVEVLTlFHaDVSRUZ2c3hyOFhMamdJcmRXUWVkdnk3R2lRUHJmbDRTTmF4VmU1czFxN1JwM2tpJTJGYWFOZjIwJTJCMWtUMDdXR0Nxd2NNamRKRk5RYzlDMk45QnFOdkhjMjlXaWxqU1ZHSTJLeUNvcGtGdiUyRndBb3RIdTljT3EyZDFKWVcweDUzZGhBbzRPNTNKUXQ4TVlmOW9jTUZ5QjIzWndHT1FJa2VDUUd4cXdmSXNhdE5RU1FySXJtT1Vicklob1FmRUViNUxMSHpQUDZYMVRWNFJxRm80b3pGVkwwJTJGd0FwRDhFbUZtcyUyRmx4ZVdCTnhvRXB1SWh1YlNRajFCJTJGcVBzSHdvMCUyQjRsdFVtVzdSbzVvalJvM0JWaFQyT1dDaTF0JTJCYlBKMXBGQ2ZNWGxKZ3RsJTJGeDkyVkN5Ukh1d2piNGtYJTJCZGYyY2lPbEcyaHVoY1gybjhKSTJCRThGSEh6TVRiJTJGOFRWYzZGcFd1dGF5U1BibEpFbUhHZUNRVlZ3UDFaR3Rjc0liZTVOM3AwVWkyTWxXYU03bUIlMkZ3QnBRNCUyQjFGJTJGTGtUR3VsaG5ESVluWXByZjZ0WWF4YXh4Q0RseElhRzdpa284WjdrR3RXciUyQjN5d3hzZEdsMVd3aXR6R2JrZ2tSenVnREduUm0zNFIwJTJGWmJJSkJad3h2OVloQVZ4OFFwMEpQaUJuYWZKbDFlWGVrTE5keXJLT1hHTmdBRFFENGczR2clMkJFN1k4V3lUTGZpSE5KYmJRdk5IbGUlMkZlNTBlUVglMkJuWEFEM1ZnNTNFb1duS0ltaFFtbjdQd3Y4QXlZUlg5eHFsMWRtWFdPUzNYSGlxTW5wMFFFa0txJTJCQTVmYXpyUXdIcU9tV21xUUdDN2o1RDlseHN5bnhWc0ZzTGVPMzloYjM5dEpiWE1ZbGhsSEdTTnVoQiUyRlVmZk9aWHkzJTJGbDdVVjA1bjVNZ3JwTjFMVGpMQ1Q4Vm5jRWolMkZZZjVPZHQxblFielIzSmNlcmFzZmduQTIlMkJUJTJGQU1yWUIlMkY1VjNZJTJCZHRBdmhlZnVicm4lMkZ1TnV4MWprUVVZa0Q3VWJuaXIlMkY2dUVxOEQxclRGazlYVWROZ2FIaXglMkJ1MlhWb0hQY0QlMkZmYmZzdG5RZnlBZWIlMkZGa3RDJTJGcHRhU0YxVmdGTkdUaVhGZmlBJTJCTGolMkZsWkM5V3VOZDhwNmtOTTFlMDRhbllzWTJtWTdUVyUyRlpHMnBLamZzUzRLMDAzbWtDSHpsNVdtRExhemVyY1dvQjlXQ3ZYMUZCJTJGZVF0OWx2OG5Jb2ZZTlJsNUZQSTNualRmTzJsaTd0YVJYa1FVWGxwM1JqMFpmNW9uJTJGWWJKWGlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGJTJGVzclMkZtelpzVmRtelpzVmRtelpzVmRnSFZZOVBtdEhpMUpsVzNjZ0V1UUJVYnIxd2RnUFVkTnR0VHR6YjNJSldvWlNPb1lkeGlyekh6dFAlMkJpMjBhVHl2ZG02dURjSlNDTUpJUFRWaFJXS2o3QmJiaTJCOWI4a2Vacm5WM0Z2YmVyYnNRc1Z3SFVLRko2dFU4aFN2aGslMkIlMkZ3QVBHeTFHd3ZMT2txSzVqdTBjSVAzWVElMkJuSXRBUGlpZjhBNG5ra3BoS1FhUU9rNmVtbDZiYTZmR1FWdDR3aFBpZjJqJTJGd1dPMUxUYlBWckdmVHIlMkJJVFd0eWhTV01qcUQlMkZFZnM0TXpFVndJc2cyTmklMkJWUE9IbG01OHA2NU5wVTFYaFA3MnpuUCUyQjdJV1B3biUyRlhYN0VuJTJCVmdXMjhzNjNmMmtXcjI5bTc2WXM2eHlYUXB4VWdnTlVmYTRpdjJ1T2VuOWM4dDZKNWl0MHQ5YXMwdW80enlqTFZES2Y4bDFveTVFTDdUcmlHVzMwTHl0cDdRNkRiczBkN3hJNE96JTJGRldQbHljbU52aWIlMkJmS3ppdWZFVHM3V1hhaE9uOFBoOWRWSW42YTclMkZld0R6UGQzdWtOcGx6WXR4dEVoVzJhZFZCS3pSa3RUa2FsT2RmJTJCQnc2MGJ5ZFolMkJhTlIlMkZ3QVJhUHEwVmpPSXc1MDliY0xJa3clMkIxNnloJTJGalJtJTJGM2FuMjhkZTZkTFlUWEdrNnhEenRweDhhSG95bjdMcWZiOW5JM1lYJTJCcmVROVRoUzNwY1doY3Zhek1CV1NFJTJGYmdhUSUyRkY4UDhBSmxyckR2dW52bXJ5QjlidUZ2ekF0bnJrUUQ4NHolMkI2bUtIa0dSdHUlMkY4MkhXbk8lMkJvYWRMcFU1YUM0WmVVTDlHaWwlMkIwaktSMGFPWVpPTE84MGp6aG8wZDNadjZrTW4yV0ZQVWhsR3hWaCUyQnk2SDdXUVdhTzgwclYxaHZ3Qk1qY2ZVQW9za1RiTElQJTJCTnNJcjVvU3UxMHRmT3Q3SWt0NHRoNWlqUUM2aGtTc2R6NmZ3ZldJaUNDcjdVbVRqJTJGbDVKRyUyRktUU2RUamclMkZ4RElMaDRVQ1VnSEQ3UDhBeGFmajQ1R1BNZGtZdFJrdmJXZjZqZXdFWE5oY3I5cHBUOXBFVmF0SldueEp4JTJCem5SUElmbXolMkZGdWpmVzVZJTJGU3ZMWiUyRnE5NGdCQ21RQ3ZOUWZpVlglMkIxeGI3T0EyTmxlYVglMkZrciUyRkExOUpiMnJPJTJCbFhiYzdVdnVGYnV2TCUyQmIlMkZpV0M3TTdIT3VhcnBkcnE5akxZM2k4bzVCc2U2dDJkZjhBS1hPUDZqYmFqNWR2cExLNVVTQmQwZmNCMDdPdjhjTVQzcWtQNWw2dHJrV3Aya05pOHNWcjZDU2hveVZEeUg3UkpIWGo4T1FwZk5mbUNOMSUyQnNYY3NuQmVDck9mVUFVZEZIUDR1UDA1Mm55JTJGcTJnNnZlUjZUNWhnWDk0QWxtc3AlMkZkc3clMkYzVyUyRiUyQlUzN0dTSFVmeXA4bjZoVXBhdlpzZThEa0QlMkZnSDVwJTJCR0NYTmVUd00lMkJiemVXeHRyJTJCM1NWSEZHTVpLTVA4b0JxciUyRndBTmg5cXY1Z3ByM2tWZkxWOXprMU8zdUlqRk93cnp0NHcxR1poVWVxbjJQOHJKRDVpJTJGSkpySzJsdk5LdWZyU3glMkZFWUNuQ1hpT3RDcEtQeCUyRjFNNTAzbHE3dHBEeEROVVVVR2xQd3lKdFdRZmxmcE1Xc2VhRnRMZ3NzWnRabkRKMVZoeENuMzY1MWUzOHFhbnAlMkJzMlpYOTVicktHJTJCdFI3VVZmaW82JTJGczE2WVMlMkZrM3BHbVd4dk5SJTJCc3BKcWZFVzdXblI0a3J5TEZXM1BxTiUyRkwlMkZMblc4STJVc1c4eCUyQlZvNzFuMUxUMENYcDNtakd3bHAzJTJGNHlEJTJGaHNnbDlveVhVYXhYMXU4TG9DWTJkU3RWJTJGYUclMkZnYzdKVEViaXp0cnIwemNScklZbUR4bGhXakRKQ1hRb2VWZVc5UnY4QXkxUEtMMjVrdU5POUVMRW8lMkJJamdhb0trJTJGQXFKeXpxdHJkUVhrQ1hOczNxUXlxR2pjZENDSzdaRlBNUGwxWWc5NWFMV0E3elFqZmpYcXclMkZ5Y0I2SnJOelkzQlc3dUFiQVJLZ1VxU1FWSUM4S2ZDcThLOHZoeHE5d2xudEs0RHZ0SjA3VWdCZlc2VFU2Rmh2VHdxTjhGUnlSeW9IaVlPakNvWlRVRUhINUZEQzlZJTJGTDZ3dVNaOUljMk0zWDB0ekVmbzZwJTJGc2NMOUIlMkZMeThYVkpOUzh5M1l1bzQxYUt6MCUyQkVrUXJHd29XbE8zTjJ6b21WVERaVjRsNW44czNQbHE5NG9TJTJCblRrJTJGVlpqMjclMkJrNSUyRm5YJTJGaHNNTkk4OTNXajJodDJ0aE5WU0VwOFBHU2xCSyUyRiUyQlNmMjg2bnFPbldtcVdjbGxleGlTR1FiZzlRZXpLZjJXR2NvMTN5aGRhVk1VVDk1QTM5ekwwRER3UGclMkJJWmMzcFBselU1ZFN0R2E0SWFlTmdHWmFBRldISldvTU9jNXY1RTFCN1dmNnRjQW9EJTJCNVBMYjNqUDBmWXpvNHhJWXJaSW81VWFPVlE2TUtNckNvSVB0aWRyWjI5bEF0dGFvSTRVcnhRZEJVMU9MNXNDc084JTJGd0Q1ZTZWNTcwOFJYTklOUWdCJTJCcDNvRlN0ZjJKQUtjNG0lMkY0WE9JV1g1UiUyRm1Wb09wdW1td0l5U0F4Tk1zc1poWkcycTNNcWVuODBlZW9LWnFZcThsOGglMkZrJTJGY2VXOVF0OVoxRFUzVzRnUEpMUzBKQ0VHdndUeXRUMVUzJTJCeDZhcm5XczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkYxJTJCJTJGNXMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYVXpaczJLdXpaczJLb1hVaklMRzQ5RTBrNEVLZXRLNDNUWWtoc29RcDVFcUdadkVudmdwMURLVmJkVzJJOWpoRGRhRHFUJTJGdUxMV0piT3pQOEF1bEVWbkFQVlZrYjRoaXFCOHdXVVhtUyUyQlhUWVdRaTNpa1pwaHVVbHFPS21uN1A4QU5uT3RSc2lQVzBUV1VLcUQ5b2ZhallmWmtRJTJCMyUyRkRMbll0SDBXeTBXM2FDMEJKYzhwSkhQSjJKOFRoVjV1OHRKcmRvWnJkUUw2RUgwejBMaiUyQlElMkY4YTRiVGJ4WFFQTUdxJTJGbDlyN21TczlqY1VOM0N2MlpvJTJCMXhENFNwJTJGelpuYU5ZaHRmTm1nUmFobzdKY013RTFwS0NBU1AyNDYlMkZzbiUyQlpmNThnc3VnV1d0YVBGcDF4UkwyMXFGa0ZDeVAzVTk2WVIlMkJVZk10NyUyQlglMkJxdnBtcUV0cFVzbkdlT3RRakUwRnhEJTJGd0F6VXhPeSUyQjVrSG1HQ09hMXM3JTJCVmVFc0ZZcEhJM1N2d3lCdkRpNjQ3UnRIMWJ5M3FFWG1QVDVWbGduV21vMkMxQW1qNnJJckg0Uk1uVmNDejNGdko1eDFwSXFYMmgzMGNWeTNvdXYyblFFZWthOVhaVzVaSk5QdWx0N2RiWnBUTGFzUDlIbFlVYWxQN3VWZjJKbEgydiUyQkV3ODkxWnpZM3R2cU50SGRXejg0cEJVSG9RZTZzUDJXWDlyQzd6Sm9FT3UyWHA3TGRSVmEzbFBZOTBiJTJGQUNId2kwSWFoQnF0ZE9vOWhLZjlMalkwVmY4QUxVJTJGNzh5YlpGRDU5MWpTM1IzZ25SbzVZbXA0TWpBOXNuSGtyOHdlUmkwTHpKSUk3cFFFdGRRYzBTWWRGV1ElMkZzeSUyRjVYN2VIJTJGQUp3OHVMcU1EWDlxZyUyQnRSTCUyQjhVZjdzUWY4YkxuSmJ1eWpjTkZLbk5EMVUlMkZ3OERoNXBmUW8zR2M0ODdlVkZoTW1xMktmdUhOYm1OUiUyRmRzZjkyS1A1RyUyRmElMkZseVBlWFBNJTJGbWZ5Mlk0cG1rMVBScWZCQktwTndpRHI2RTMlMkI3T0g4ajUxJTJCMXViWFU3SkxpS2tsdmNKV2pEcXJEZFdIJTJGRXNWNVBudG9GaXVVdVFPRnhGdkhLcEtzUHBXbkxKWjViOHc2NXAxeEVndVh1SXAzcThkMDdQMSUyRlpWbSUyQnglMkZrY2NiciUyQmhtMjEyNXNiUGdnWDk1QVpxOEZSaHkzcCUyRkw4U3JrMTgxYURIcWVtcHF0dlJMdTJoRG5nUGhlTURtViUyRjJQMm96anNyS0xXNWp1NEVuaSUyQnk0clE5UWU0T0w1RCUyRkFDcDVoZ3U3aU93a2tVWEZ4RDZ5eDlEV004SE5NbUdKRkZEUkZSUWlvUFVISWhybWdyQVh1YmRLMnoxOVdPbGVGZXBIJTJCUmt3eW1Da1VJcUQxQnhCcFdJYU5xMDlvMzFXVVJyWm9pZW0zMmVQRWhlQ0lCOFZWJTJCTEpjR0IzQkJIdGthMUxRWFZuZTBYbkM5ZVVRJTJCMHRldkh4WEEybHhhekhmVzYyMHJ4MmF0VzRna1NxRk9QQ2dkdmpEQ2xWd2tBN2hXWVpzd3paRlhZbk5CRlBHMFV5Q1NOdnRLd3FEaW1iRldFNnZvRTFoSWJ1MEJlM0JyUVZMSVA4cnhYSlJvOTJiM1Q0WjIlMkIxVGkzekcxY0drQWloM0I3WlNScEd2Q05RcWpzb29OOE5xdXpaczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlEdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWaVBtYnlvOTFjZnB2UWlJTlZUJTJCJTJCaDZSWFNEOWlYd2wlMkYzM04lMkZ3V1F6VzlBWFhvJTJGWGFGZzdMJTJCJTJCaEswbWpkQnVhZnpBQ2pyblljRFRXTnJQS2s4a1lNc1pESTQyTlI0MHczdFJXM3oxcDJsNmhvJTJCb3RMQWZYVkU1T2dEVmxqQSUyQkxqJTJGeFpHdjdPUzJCYmVhUmJzY3BJNVl1TFFxM0VUSWZpUWN2MlpWUDkwJTJGOEFzTWszbWkxRmpxQm50MENwY0lISVVVJTJCTlQ4UkZQNXR1V1JEVEZFdWx3UGFQOVlqVlNmVmpCSUZHUE0lMkY3QnZIQ09TWHFYbHU2dHJuVEkxdDdZMlpqJTJCR1cxWWhtUSUyQkpjZmI1ZnpZY1pCUEtsMUk3R1JYSEtHaTNBWSUyRmFqUFJ2ZHNuUU5kOEJGRkRqbkwlMkZQV2hKYVhndUlLUnczM0tuZ2tsUGklMkYyUHhjczZqa1k4OTJVbDNvbnF3b1pKTFdSWmVBSElsVDhEN2ZKc0FWQmFMcFVldWVTOVB0cmlZUGNXeWtRWGtmWjR5VkREJTJGSlAyV3dYNVgxTkoyTnJRSUdYa29YcHpROEpQNjVHUEpmbU9UUjVHMHpYTG1HQ3psWW16aFpQU2VFMDVjZVA3VVRqZmxpT2hhZ2tXczNDVzBna1VYYlBaam9aVmtZOGtRSHI4T1NIVUpaRDU0MHZtWXRWUkJJQXZvVG8yNjBKckd6VTdjdmh6YUo1amdtMHQ5TzF1N2dpdSUyRlJkWSUyQko0OG95Q2clMkZkOVF5ZlolMkZ3QXJKaFBCRmN3dmJ6cUhpa0JWMFBRZzlzZ3QlMkZ3Q1NMcEp5OXB4bmlQUmlRc2dIOHJmellCNXFsJTJGa3ExaFhVNFppZ053anNpemZ0ZW1VM1VmNUp6cCUyQlJYeWxvRiUyRnBqM0Z6cVlpUjNZcmF4UkVzeXglMkZ6VE9hTDZqJTJGeXA4Q1pLc1NVT3paczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlIdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWZzM1aVByTUVGbGQ2WGJSM0NSTSUyRnJvMWZVSUlId3glMkZzNFUlMkZscnFPa3ozYzFsWVFtRU5GSkk4RENnUnpJRElnNWIxSmF2VE9pYWpaTGYyY2xzMUtzS29mQmg5azV5ZHBKUEwlMkZtelQ5WmNCSVdZMnQ1c0ZvRDhMczVDMSUyRndDRGt5UTVLeWpXZExHaTZtbDNiclN5dkt4dW82STU4UDhBSlBWY2xPaVhadXJQaTVyTEFmVGY1ZnNuN3NFM2RyQnFGcTl2TFI0cFYySTdkd3klMkIlMkJGMmo2WGYyRjVkUzNFcU5ieWhWaVZhOGlWJTJGYmZhZzYlMkZaWEJkajNLbldVUlhMellGWVY1bjhuM3VzNnV0N2J0RUlUR3NiYzZobDQxOEI4V0ZkNzVZbThzdkhxVnFQclFpQ3NKU1BpaWtIMmpRZnNOblNjYXlod1ZZQmxPeEIzQkdHMVNieTdyZjZZZ1o1S0NaZnRJQlNtSGVGbGxvZGxwOTVMZVdxbERNS0dJZllCN2tERFBFJTJCU3V6WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkYlMkYwdSUyRjVzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpGZk0lMkJpcExXJTJCU0paQWY3MUN0YU1Qc3lnZjhTeVZaUkFJSU80UGJDRFc2cFA1WXZEZDZXaXUxWmJjJTJCaSUyQjlUdDltdiUyQnh3NXhHM3RiZTFWbHQ0MWpESGt3VVVxZkU0dGdQTlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5UHYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFYlMkYlMkZaIiApOwotICAgIGJhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjsKLSAgICBib3JkZXI6MXB4IHNvbGlkICMwMGFhMDA7Ci19Ci0KLS55dWktc2tpbi1zYW0gLnl1aS1oLXNsaWRlciB7Ci0gICAgYmFja2dyb3VuZDogdXJsKGJnLWguZ2lmKSBuby1yZXBlYXQgNXB4IDA7Ci0gICAgaGVpZ2h0OiAyOHB4OwotICAgIHdpZHRoOiAyMjhweDsKLX0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1iYXNlNjQtZG91YmxlcXVvdGVzLmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LWRvdWJsZXF1b3Rlcy5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjNkMjdhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1iYXNlNjQtZG91YmxlcXVvdGVzLmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0ueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtcmluZy12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLWNlbnRlci1idXR0b24tdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1tYXJrZXIgdlw6b3ZhbC55dWkzLWRpYWwtbWFya2VyLW1heC1taW4sLnl1aTMtc2tpbi1uaWdodCB2XDpvdmFsLnl1aTMtZGlhbC1tYXJrZXItbWF4LW1pbiwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtbWFya2VyLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtaGFuZGxlLXZtbHtiYWNrZ3JvdW5kOjA7b3BhY2l0eToxfWRpdi5iYXNlNjQtZG91YmxlcXVvdGVze3dpZHRoOjEwMHB4O2hlaWdodDoxMDBweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwlMkY5aiUyRjRBQVFTa1pKUmdBQkFnRUFaQUJrQUFEJTJGNFJmSlJYaHBaZ0FBVFUwQUtnQUFBQWdBQndFU0FBTUFBQUFCQUFFQUFBRWFBQVVBQUFBQkFBQUFZZ0ViQUFVQUFBQUJBQUFBYWdFb0FBTUFBQUFCQUFJQUFBRXhBQUlBQUFBZUFBQUFjZ0V5QUFJQUFBQVVBQUFBa0lkcEFBUUFBQUFCQUFBQXBBQUFBTkFBRDBKQUFBQW5FQUFQUWtBQUFDY1FRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlRNaUJOWVdOcGJuUnZjMmdBTWpBd09Eb3dOem94T1NBeE5EbzFPRG93TlFBQUE2QUJBQU1BQUFBQiUyRiUyRjhBQUtBQ0FBUUFBQUFCQUFBQndxQURBQVFBQUFBQkFBQUJSUUFBQUFBQUFBQUdBUU1BQXdBQUFBRUFCZ0FBQVJvQUJRQUFBQUVBQUFFZUFSc0FCUUFBQUFFQUFBRW1BU2dBQXdBQUFBRUFBZ0FBQWdFQUJBQUFBQUVBQUFFdUFnSUFCQUFBQUFFQUFCYVRBQUFBQUFBQUFFZ0FBQUFCQUFBQVNBQUFBQUglMkYyUCUyRmdBQkJLUmtsR0FBRUNBQUJJQUVnQUFQJTJGdEFBeEJaRzlpWlY5RFRRQUMlMkYlMkI0QURrRmtiMkpsQUdTQUFBQUFBZiUyRmJBSVFBREFnSUNBa0lEQWtKREJFTENnc1JGUThNREE4VkdCTVRGUk1UR0JFTURBd01EQXdSREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFTkN3c05EZzBRRGc0UUZBNE9EaFFVRGc0T0RoUVJEQXdNREF3UkVRd01EQXdNREJFTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TSUyRjhBQUVRZ0FkQUNnQXdFaUFBSVJBUU1SQWYlMkZkQUFRQUN2JTJGRUFUOEFBQUVGQVFFQkFRRUJBQUFBQUFBQUFBTUFBUUlFQlFZSENBa0tDd0VBQVFVQkFRRUJBUUVBQUFBQUFBQUFBUUFDQXdRRkJnY0lDUW9MRUFBQkJBRURBZ1FDQlFjR0NBVURERE1CQUFJUkF3UWhFakVGUVZGaEV5SnhnVElHRkpHaHNVSWpKQlZTd1dJek5IS0MwVU1ISlpKVDhPSHhZM00xRnFLeWd5WkVrMVJrUmNLamREWVgwbFhpWmZLemhNUFRkZVB6UmllVXBJVzBsY1RVNVBTbHRjWFY1ZlZXWm5hR2xxYTJ4dGJtOWpkSFYyZDNoNWVudDhmWDUlMkZjUkFBSUNBUUlFQkFNRUJRWUhCd1lGTlFFQUFoRURJVEVTQkVGUllYRWlFd1V5Z1pFVW9iRkNJOEZTMGZBekpHTGhjb0tTUTFNVlkzTTA4U1VHRnFLeWd3Y21OY0xTUkpOVW94ZGtSVlUyZEdYaThyT0V3OU4xNCUyRk5HbEtTRnRKWEUxT1QwcGJYRjFlWDFWbVoyaHBhbXRzYlc1dlluTjBkWFozZUhsNmUzeCUyRiUyRmFBQXdEQVFBQ0VRTVJBRDhBOVZTU1NTVXBKSkpKU2tra2tsS1NTU1NVczR1RFNXaVhSb09KS0ZpM092eDJXdmJzZTRlNWdNd1JvNXNveXBkT3lOOW1UU1JIcFd2ajRPYzQlMkZ3RFZmOVdrcHVwSkpKS1Vra2trcFNTU1NTbEpKSkpLVWtra2twJTJGJTJGMFBWVWtsQ3F4dHRiYkclMkZSZUE0ZkFwS1pwSkpKS1VvMldOcnJkWTh3MWdMbkh5QWxWT3NXdm93WFpEWiUyRlFPWmE4RDl4cm1tMyUyRk5yM1BVc3dtJTJGcG1RR2FteWw0YkhpV3VoSlRZcXNGdFRMQnc5b2Q5NFUxUTZGa2ZhT2s0dHN6dXFZZndWOUpTbGwxJTJGb090MnNPZ3VEWGdlVG03ZiUyRlBtTiUyRndDQ0xVV1oxVmhyeXNiS0ElMkJqdWE3emd0dVolMkYxRnFJVVhUU1FjdktaaTQ3c2g3WE9ZMHRCRFlKaHptczNha2ZSM2JsVmQxM3ByTXR1SSUyQndzZSUyRjZMM0FobTduMCUyRlUlMkJpMnphZnprRk9ncTklMkJkajBaRk9NNGszWkR0ckdORW5oenQ3djNXYldQVThiSnB5YXZWcGR1WnVjMmVOV09OYjIlMkYyWHRYT1kyVlU3ckE2aG5POVJ1SlMlMkJyMWhPMWxndUdKYnVZejJleHR2djNmekxQVSUyRndDRVNVOVFra2trcFNTU1NTbEpKSkpLZiUyRiUyRlI5VldmMGl3aXUzRmY5TEdzZXdUJTJCNkQ3UCUyRkF5eHkwRm11bkg2eFBETXBnZCUyRmJaRlQlMkZ3RG9PeCUyRiUyQjIwUXAwbEMwMkN0eHFBTHdEdEI0SjhGTkpCVFZvdnglMkJvNGp2YkxMR2xsdFR1Uk1zc3JmJTJGQU5KaXolMkJoWkRxTU8lMkZFeUNYMmRPYzZ0JTJCa3VjMWdtdCUyQjMlMkZoYVBUZW9aNXM2UjFJWnJCR0Rsa052SSUyQmpYY1lZeXglMkY3dFdWOUIlMkZ3RHclMkZ3RHdseUQxTHFXSDBqcTJOMU81NXJ4T29nWTFyd0M0Qzl1dVA2bXpkdDlXbDF2NlQlMkJiJTJGQUZkRlMlMkYxTXlxJTJGMlZUaHVzYSUyQjJ0c3QyazZzUHVZNzNCcm0lMkZvM1Z2MmZ5JTJGM0YwUzRUQXpxJTJCbSUyRldEcXVLR25iaFdPeWE2MkRVVWxyY215dWxrdFo2ZjJleTE5V3o4JTJGMkxzMlolMkJGWXgxakw2eXhnQmUlMkZjSUFJM0NYZk5JcVpYM3Vyc3Fxclo2ajdUcUpnTlkyUFVzUFAwZHlwZldKJTJGbzlOT1QyeHJhckhUeHMzdFprZiUyQnk3N1ZSNnY5YmVqZE5zYmtiM1picW0yc2ZWamdPT2hyZFpGbGpxc2ZmWHMlMkZtdlY5ViUyRiUyQkRYSGRaJTJCdXZVOHpBNmklMkJqMDJZMXphd2FaTHQyTFkyMXRsdGI3WE9iNmo2JTJGd0RSMVYlMkZ6VjM2djZyUFZZRlUlMkJpQ3M1UFM3Y2Q0M08yV1VPQjc3ZDFYJTJGVDI3bHd2Vm5OeUtLOGQxNXE2aGlqMjA3bzlkZzNESGRXOW05ekx2OEFRJTJGNFd1NzFLJTJGVHRyOWFxekolMkJ1SFY4dG1SMHpOb3lMdnNYVThOcjdjZHRqbXROMUo5SyUyQjJwb2RzYmsxJTJGbyUyRjhBMFlzbkc2dGUlMkJuTFpiZFhYWTZwdHRBRE53dWN3bWh2MmNXYnYwdG5yJTJGcEtuZnBLYktmOEF0c3FEMUR2cmpuZlY3MGNLbGxkZ3pnYnFqZjdRSEIzcDJzRzBzYjZsdjAlMkZmWjZURWNaZzYzMHh6MnZleks2alZiZmhWdGY2YmlRJTJCeGx0bU5ZN2EyejlKczNWdSUyRndheXZySGgxJTJCaGhkS3YzWHViakJoWTl3RGJIdFBwT2RYa09INnQxRGQlMkZSc2wlMkY2QyUyRndEb21WN0ZnOVdjJTJGRiUyQnEzUkw2YmliZW41V1ZqaDRsbGpkeGJleGx0ZjA2TGE5dnZwJTJGTSUyRndBRlolMkZoRXVxbjByNmxmWE05V1l6cHZWb282d3h2Y2JCY0dqOUx0cjA5TExvajlieGYlMkJ2VSUyRm9mNW16OWF2ckpkMCUyQjJqQndIQVpUcmNkMTdpQTdiVlphMm5ZMEglMkZDWHc5diUyRkFBZGYlMkZXbDV6aWRRWjlaY1kzbDNvZGR3ZzJ6MW1IWjZ6V2ZRdjN0MiUyQm5rMCUyRndDbiUyRndEUmY4eGY2RGYxRHF2WEdaJTJCZTV0enNpN0dkNmxtMmtQc3FOYnFxT0cxJTJGNEN1eG5wdCUyRlM3JTJGOUk5QUxqUjFHaDdmOTYlMkJ1SkpwQTFLWmoyV05EbU9EbW5od01oSmF5U1NTU1UlMkZ3RCUyRjB2VlZuOWFpckZHWVNHakVjTFh1T2tWJTJGemQ1SiUyRmRaVSUyRndCWCUyRnJhMEVITTlEN0pmOXBFNCUyRnB2OVlIWDJiVDZtbjlSSUtjRTlVNmxnWG5KRHYybDBqTiUyRlM0OTdTMzlDNTMwc095eG4lMkJCYyUyRiUyQmg1UDgzJTJGMmt5ZlMlMkZSNU5sUHJ2MTZ1d2N6RXhzUEhGb3pMQlJXSHo2cnJpV005T3V2NkhzOVQzdnNldWU2QjlidW9aRjV4QlU4NEJEQyUyQnRvWllXMVBjekclMkIwMkd4bTcxR2IyWFAyZm9kN1A1bXRjdDE2N3ElMkZUODdHZGZrJTJGYnNjV0hJNlYxTnJRTkd1M08yTlo2ZnA1Rk45ZFRjckgzZXBSNmY5Ukt3UllYemhLRXVHWW8lMkZ4ZlNNdk02bFpsRiUyRlZmU29iVTExUTlNR3lxTGZhJTJCclA5UEpzcjlLejA5bjZiR3ElMkY3ZFdOMXo5VnhDM0tmWlQwJTJCJTJCUFV5R2c1TklhUGRVN2V6WmU3S3hQUiUyRlI1R3lyMXNYOURiNiUyRndEZ3VaeCUyQnYzNTJiZTRXTndmdCUyQjl0YjJuMjFtemElMkYwN1huMiUyRnA3cW1WZXA2ZGJQMHZxZm9scVpEN21ZOTFlRG1YaDlwQkFaREdqVDlhd3ZiJTJCa3AzVyUyRnAyTWRrZnBhdjFiJTJCWFViMFd1bFRlUDIzaDVEaTNKTDNVWVdUWXpsemJLbjFzYzVyTjdiYU0zRlo5cHc4eHJ2U3ZyJTJGUWYwaW02dXZINnZZN0c2aGZTMm14MVdGWWFxN2JuayUyQm8ycjByS1BUYTdidXN0eFgyMCUyQnolMkJsZjRSVyUyRnFQWGVNNDAzcyUyRlE5THBkYlE0djk3V2w0RGNXMW51ZDZQcWZySDJlOW5zek1hdk54JTJGczklMkYyaEE2aTVyNzdIWkxIMjRUbjFXNCUyQlV3ajJQdmEzSmRqNWJmemFIYjhuN0ZrJTJGNFA5WXhQMHRYOHd1bHFhV2ZiMUN6WjZHYU0zMDYyMldERCUyRlNWMW1wM3NmWTZ0aldPc1kxdGY4Nzc2YSUyRlRRN3MyN3FGTlZJcnF3QWZVc2JaUlh0OVMwTjlLeTF0WDgzJTJCZ3JlJTJGMXNlaiUyRkFFMWx6S2x0ZER0Ymk5WkpzcXFiVGFCWGRTMFRiVzY4UHljVXhOajhxckliUiUyRnBQVSUyRlNiNiUyRlR5djZWV2YwcXZPcnptc1lhc25HekhtazdneDFaYTZLMlhSN3NkJTJCNXY2Szc5SlhpM2JQVSUyRlY4aTcxUlJVNSUyRldhTE12NmtZajdTR1g5TDZnJTJCcUslMkZvc3J5bWV1eDFjZjRCMTdmWXNycHVQbU54ZnR6NjNQY3dsOURXRFEyc0lxWmtOSiUyRk5aZTZsdVI2ZiUyRkFBWCUyRkFBUzFmMnBYWDB2cSUyQkpsbjdMZmtWVnRhM1pBZmw0OTI5bXluJTJGQTc2ckxxODZyJTJCYm8lMkY0cXloVnJ1b1pmU2VrNGxkbU0xMlBlMjI3RDlYUUJ0dnB0dTMlMkI3ZDZWcjY2WGYyUFUlMkZ3aVNuc3VxbkR5TE1mRnRNWk9SaiUyQnJYU1BlSEZzZW8ybDdnMzFMYSUyRlYlMkJoJTJGMm9xJTJGd2ZxZnBGem5WY2Q5dURaaXZheHpEWlhhMXp6dFphWEIxTFclMkJ2JTJGZ2IlMkZaVlhpNXR2ODMlMkZSc2o5QXNMcWZYdjJqMCUyRnBYcVBGZWRnTnVyZmExMEYzdXFzeDhsdjhBbzNPYnZyZiUyRkFNVDZuJTJCRlFxdXE1OSUyRlVSZWMxemI3Q0hYTWM4aHRtdzduNDd2OEJ0dWNQVWI2djZQOUxkNjlpTm9TOUg2VmswWnpjcGozdHFxZVcxQUF0dWMlMkY4QW03TWV5aHY2V3ZaJTJGTlpYJTJGQUlFdWd6dWsxNGVMaU42OWZiaTQ5dTZ3Z0JqeVdOYjZkUDZJT2E1MlY2dnQyNDdQMGREJTJGQUZQMGFqamRjNmtCZWVrWVFkMURJczJ0c1pWWmJkVlh0OXRZcXNHOSUyQjMlMkZUUFolMkJsJTJGd0JDc2FqcFhWJTJCdFgyWndvJTJGYWw3V3V2djlTME1lYTIlMkZUMiUyQnZaN20xZTFqNkdWNzZQWiUyRnBLME5FN2F2cEgxWjY5bmRVNlRpNG1QNm1WWmt0QmRia1AzdXFiV1RSa2pLdVlHYjl0MWU2djI3NzZyUDlJdXl3OFZ1Smp0b2FTOHRrdWVlWE9jZHozJTJGMm5MeWI2dmRadjZEakRLd21WdDNsemJzWnozVnNaY0hsdVRnWDQ5OWhmUll4dXpKd24lMkZ6bnN5S3JMTHY4SDJ2VCUyRnI5aE9ESyUyQnNNJTJGWnVTV2t2cnRGakMxd0xtdnIlMkZXS3FXJTJGbSUyQnpiWiUyQmtSUjR2VnBLbjAzcSUyRlRlcTQ3TW5wJTJCUXklMkJ0N1d2RzAlMkI0QnczTjlTcyUyRnBLJTJGJTJCdU5WeEJUJTJGQVAlMkZUOVZUT2ExN1N4d0RtdUJEbW5VRUhzVTZTU254ZjZ4OUN6UHF0MUVDaXg3R01lYmVuNVEwY2FuZXl5bHp2b3V0bzNNcnVaJTJGaGF2MG5wJTJGcEZVcnlhTWpGdnJ6cHM2ZGtQYlptVXNIdng3ekZiZXI0ZjdyYkxQNld6JTJGQUVsbiUyQml2WXZZJTJCdTlMNmYxWHBsMkgxR0cwT0c3MVNRMDF1SDBiMlBkOUI3UCUyRlViJTJGd0JHdkg4dnBGM1Q3JTJGUXBjSDVOSWVhN2F6NmxlWFNkMiUyQnpIamRXNzBxSGJNbkUlMkZ3bFNackUyTnV6ZmpLSE1ZJTJCR2ZwelIybiUyRkw5SDk1d00lMkZCeU9rNWh4c2dpeXV3YjZybTYxM1ZINk4xWCUyRkFLTXJXMTBqcWJybUhEeUhsOE1oalkzRzZzSGQ2UE8zMThkdjZlaXowN2ZXOVAwdiUyQk9IaVB4YzZuOWo1NTJZZGgzWW1WeTdGdFA1JTJCdnZmaXUlMkZ3JTJGJTJGQiUyRnBmNXplaFl2MWE2cFZrNVdMbmglMkJKWmhNTDZybWlXdnNCWTZ0MUZuMG4xTlk3N1R2cCUyRlNmOFduaWpxTlduT0VzY2pHUTRaQjdPaWcwZlY3TGYwMXJyOHJxUjJ0ZXozWFBiQng2N1hzWXpheXhqYk1sOW0zOCUyRjlKJTJCbCUyRlMlMkJwenJ2VXhNV3F2cU5WdUprc3gzNDAyelc1b29zYmRTY2lnNzI1T0hkOXFZNnYlMkJjMlpPTFQ2Tm44OHkzZTZYMXV5azlOZXh6bllkJTJCUGRpMk1jMWxUeGw0enR6bld1M2JLZldaWlhiczlUMDZmMHlwZFk2SjFIciUyRlZIOVdydHBzeDZtTXFGRFMlMkYxV2lzRjMwWE5hNSUyQjU3N2JmMGV5eiUyRlJWJTJCcW5Id1cxUm90REY2eGF5NDlUdmlrczlPSE5CQWM5ZzJzZmMxbTdadTIlMkZvRyUyRlF4djNQU1Q5THcyZFRibE0lMkIxVzFzZERpeG9NMnZ1M2YwOTM2T3QzcE9ac3VycCUyRlE1SCUyQmolMkZ3YUpqNEdYZjA1MlpqZXBSamJtT3J5d056TmpIdWxoOU1lZzV6TiUyQjFscm4lMkY0UjlmcCUyRnBGWXhjSEQ2ZXk2bkl0ZFNHQU90ZGxGd2hsaCUyRlJ1SHBOM1BwYnY4QTV4bnFlbWdGT1oxJTJGRHlNVzc3VDFESU9ReTR2cmE5MWJxQzAwZW4lMkJpWXglMkYwNk5ycW5ldiUyRkFJZiUyRkFFajFXeGFHMnN4S09vOU11NmlLMzJVWWVPTEhNTDN2THJOcnJtdTMlMkJsdiUyRkFQUmkxY3ZwbDFQVXFXM05maDVWSjM0JTJCTm1POVhFdXJIdSUyRlY3dDFqR01zWWYwbm9QOW4lMkZBQU5xdjlRNlc4NHc2MzBobjJjdUZkMWpjWUd5c2pTNnF6THhtaXUzRnlhZHY4OTZOWCUyQmwlMkIyZXFoU1NCUTF1JTJGd2VkNno5WCUyQnJ0RkpIMWRaajFhZ0VOc3FadUlCOUVQc3Zia1c3V2o2ZVMlMkY2ZnElMkJqJTJCaldPY2JOdzhobnFkTnhxM3RpelpZWE9hNFR5N2ZrV2JtTmQlMkZPYmZvZjRSZHBUMWZxSFVzMXJjJTJGTGZrdHlSVTJ2R2E0YlNITmVQdEZMM2VsNlZtTGxWZWpaN2YwbSUyRjFjaiUyQlolMkIwV2J2U2ZxbjAlMkZxMWVUamRSSWRsVnNwc3FjeHdCcWM4UGJmVyUyQnJYMzc2JTJGVHRmJTJGQUtIMGJjUzZ2MldKWHF1bGo0WUNYRURacXVyeG4xZHhYZFJvc3V3NzhoblhjUjVkU1d1MjJPclkyYnFzZG4wM1pGVHQ5MzJPejJaV0w2bFZMUFdvWFMxOUh6dXA5UHElMkJzZlRNWXR5OGtuN1pSWERDeTVoZFZiMURFcmUlMkY5TlU3OUx2eEhiTGNsajdLZjVySXNwWEU1bVBtOUo2cSUyRkxxYTgyWXJtdmZWSkhxVXNkJTJCZ3lxTGF0bG4wYSUyRjAzcFA4QVd4TG1lclYlMkI1aiUyQnolMkZVN3F2UiUyQnA5Q290NlFObExKYlpRNXhkWlhiOU8xbDczUzk5am51MyUyQnE3JTJCZSUyRm5FbU41N3F2MVg2YjljJTJGcTk5b3hXTnglMkJ1WXhjeXg3ZzlyamMyUFh4TTV0MzZ4NmRqbXQ5SDF2MDJMJTJCaTlMJTJGQ1ZXY3o5VlByNTFucFBXWDlIJTJCc3h1eThiSXRGTm95RHZ0b3Q5dEljTiUyRjA2SGUzMTZQJTJGQUVLbyUyRndBSjlwOWhiWFcxN250YUE5OGIzQVFYUUlidVA1eTQzJTJGR0I5UTJkZnAlMkZhWFRXdFoxaWxvRUdHaklZMyUyRkFQZTclMkJheUclMkY4QWFmSiUyRjZ6YiUyQmklMkZTVUpUMlRLNjZ4dHJhR0FBQUJvQUVBYlc4ZnlWSmVjZlVicVA4QWpIUFYzMWRYeE1qSjZjJTJGYXkyN0xhTWQxSmFOZ3NvRHhYOW85cmYwemFXMiUyQnIlMkZQZXAlMkZwUFIwbFAlMkY5VDFWSkpKSlNETkwlMkZzcjlnZVhHQUJXMXJuYWtENkYzNlAlMkJzdUF3dW1WJTJGV1hOcnhIdmN5bXFoMlM3SXFMblJhJTJCN0pmajJVUGNHdHFkdnlmVnNwWjdLJTJGUSUyQnkxJTJGb2FWNkZmajA1RlpxdllMS3lRUzEzRWc3bSUyRjlKS2ltdkhwcm9yRVYxTkRHRHdEUnRha2tFZzJOQ05ueERxZEdiMExydTNxRkRIWDQxckxUV0d4VmV5Ujc2MjZ0ZFZtTmElMkYxUDNMUFdyOWkyY216cnBZNXRkQjZnenBMN0txN1dHWFBxcWY2RDhISWMxZ1o5dXBvJTJGN1QlMkZ6bVZYJTJGQURYcXIwYnJPRjAlMkI0MTM1YldWRmdjMDVrRDFXTVAwNmFyaTE3cTI1UDgxWiUyQiUyRlglMkJpJTJCbmF1VHlzZnFuUWVvTTZoMDZsOTFlVzJINGp3ZjF1aGdjNzBMcTNEZFYxWEd4bTc4ZDclMkZ3Q2ZvJTJGUVhmcEs3R0lSRlg0czJmTjd2QWVHcFJqd2s5M0l5T2o1VkRuTjZVNSUyRlVNYSUyRmZsWWxMR3VMbSUyQnF4bnBmYWRyRzF0ZGszMDJVZmF2JTJCczJlbiUyRk5yUSUyQnJkOSUyQk5sTmRmUyUyRkR1RFhNeThlN1IxYm1qZkolMkZrTmhsOU52NTlLdE9lTGJNRE82Rmt0SnRlJTJCJTJGQ3N0TGglMkJoY2F4bTRtWTVvYzV0TE1yMDhYSzNzdDlIN1RSZCUyRlNxUFdXMTFmQSUyRmElMkJPT3BkT2M2anFlTU5sbFlqY2R2dWRqV3Q5emZWcjNiOGQlMkYlMkZvbSUyRjFFJTJCMkY1anBmMXU2RGo5UnlMS2NxdTNwZWFmMXJGMWFHaCUyQmh5bTBYTXI5MVRmWmtzciUyRm5jYiUyRlNXWTliRlR3ZnRmVU9wZFF3Ulp2eHNETE9MaDJ1QmV4ckxIMjFZekxMQUh2OUszWlglMkZ3QUglMkZPTFV3JTJCbmZVJTJGNnhWREI2bGc0JTJGVHV0RUZyTGFHJTJCZ0xYRCUyRkM0MnpZMnglMkYlMkJsdzdmMDFmOHVyOU9uJTJCcm95UHFsbFpmVGhoTXNxQlpibFdoeEZqYWhGTExXRSUyQjI3SFp2M3Nic3I5SDlONjMlMkZCalcxTDlKOVBEYSUyRjZ1ZGN4JTJGVTZUYTdiU0g2dXhMVDdXME9jMCUyRm82SFQ2bUZsMWZ6WCUyQm5WOW4xUjZ2MDdiYmhadjJ6YTR3MTQ5SzBWazZlbmtNZVdQdTJmem44eFZiJTJGd2YwRjFHVmg0bWRTVzNNRDJ2YkFmQTNBSDl4eW9ZbVJaMG8lMkZZODk0JTJCenRCTkdTN1FiUiUyQmE4bjZPeiUyRndIJTJGdHRMeVJieVBVY1hNcXp6blkyTmZoOVRyYlpia2tWeXh6UUJ2em0lMkJtMDR2cjdmMGQlMkZvMmZyWCUyQkQlMkZUVjJyYyUyQnJtSDBicUhUOGZjVyUyRmIyTmVkMUZybVdzYVhPWkxmUkxIMDFXJTJCcHU5TCUyQmFYVWlDSkhCV0dlZ002ZDFJZFU2V3piSmklMkZGYkFhV3VQdmRWJTJGViUyRm5QVFN0TjZVNCUyRldmcVBrNWpoUmoyQm9yRHJNWExPanFuZ2UybTFyTnJuVjNlMWxucGY4YiUyRk8xVXJtJTJGcUxsWkgxYSUyQnNlVDAzSXdMYTdzOTdLOG5GclklMkJ4OWZwJTJCcDZPZmp1cFo2VnZUMyUyQnJZM0klMkYwUDZPeW45RiUyQmpYcktTQ0ZKSkpKS1Vra2trcCUyRiUyRjlYMVZKSkpKU2tra2tsS1FNM0RwemNkMlBidUFkQmE5aExYc2NOV1dWUGI5Q3hqa2RKSlR4SFZmcTRPbDViYyUyQnE1NWRsdkxMcTJEYXgxbHByWTdJRmJQNWk2M2I3N0tmOUglMkJrJTJGUXJwUHElMkZjTE1BVmxncnVwY1dYTTRkdUJqOUkweTdmJTJGMWYwMHZyQjBoblZ1blBvJTJCamtNbXpGdEdqcTdRQzF0bGI5Tmp2ZCUyRnF4UzZkV01qMHVwSDlGZmJYc3lxd0lhYkd3eDMwJTJGZiUyQmlmVzluOVJIb3B3dnJCaDRlRjFWJTJCWGtVJTJGcW1aUVFMU0I2ZGVZeHd1eDdIQWZwR3ZzOUwlMkZCJTJGOEo2aXZXVloyZGo0dlY4RmdmYmtZJTJGbzVXTzhob3NyZHIzJTJCaTZ0N25yZWZXeDhiMmgyMGh6WkV3UjlGdyUyRmxJT0xnNCUyQkk2NTJPQ3h0N3ZVZldEN1E0JTJGU2N4djVtJTJGODlLMUl1allqOFBwV0xqV0RhJTJCdXNCN1NaSWNmYzV1NlhmbkZXMzFzZUllME9FekJFNiUyRk5TU1FVcEpKSkpTa2tra2xLU1NTU1VwSkpKSlQlMkZBUCUyRlc5VlNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkYlMkZaJTJGJTJCMDFJbEJvYjNSdmMyaHZjQ0F6TGpBQU9FSkpUUVFsQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEaENTVTBENmdBQUFBQVlFRHclMkZlRzFzSUhabGNuTnBiMjQ5SWpFdU1DSWdaVzVqYjJScGJtYzlJbFZVUmkwNElqOCUyQkNqd2hSRTlEVkZsUVJTQndiR2x6ZENCUVZVSk1TVU1nSWkwdkwwRndjR3hsTHk5RVZFUWdVRXhKVTFRZ01TNHdMeTlGVGlJZ0ltaDBkSEE2THk5M2QzY3VZWEJ3YkdVdVkyOXRMMFJVUkhNdlVISnZjR1Z5ZEhsTWFYTjBMVEV1TUM1a2RHUWlQZ284Y0d4cGMzUWdkbVZ5YzJsdmJqMGlNUzR3SWo0S1BHUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5TRzl5YVhwdmJuUmhiRkpsY3p3dmEyVjVQZ29KUEdScFkzUSUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YVhSbGJVRnljbUY1UEM5clpYayUyQkNna0pQR0Z5Y21GNVBnb0pDUWs4WkdsamRENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhRdVVFMUliM0pwZW05dWRHRnNVbVZ6UEM5clpYayUyQkNna0pDUWs4Y21WaGJENDNNand2Y21WaGJENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzV6ZEdGMFpVWnNZV2M4TDJ0bGVUNEtDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNUd3ZaR2xqZEQ0S0NRazhMMkZ5Y21GNVBnb0pQQzlrYVdOMFBnb0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGblpVWnZjbTFoZEM1UVRVOXlhV1Z1ZEdGMGFXOXVQQzlyWlhrJTJCQ2drOFpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbXB2WW5ScFkydGxkRHd2YzNSeWFXNW5QZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWs4WVhKeVlYayUyQkNna0pDVHhrYVdOMFBnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRm5aVVp2Y20xaGRDNVFUVTl5YVdWdWRHRjBhVzl1UEM5clpYayUyQkNna0pDUWs4YVc1MFpXZGxjajR4UEM5cGJuUmxaMlZ5UGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKUEdsdWRHVm5aWEklMkJNRHd2YVc1MFpXZGxjajRLQ1FrSlBDOWthV04wUGdvSkNUd3ZZWEp5WVhrJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5VMk5oYkdsdVp6d3ZhMlY1UGdvSlBHUnBZM1ElMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWFYUmxiVUZ5Y21GNVBDOXJaWGslMkJDZ2tKUEdGeWNtRjVQZ29KQ1FrOFpHbGpkRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUXVVRTFUWTJGc2FXNW5QQzlyWlhrJTJCQ2drSkNRazhjbVZoYkQ0eFBDOXlaV0ZzUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKUEdsdWRHVm5aWEklMkJNRHd2YVc1MFpXZGxjajRLQ1FrSlBDOWthV04wUGdvSkNUd3ZZWEp5WVhrJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5WbVZ5ZEdsallXeFNaWE04TDJ0bGVUNEtDVHhrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNWpjbVZoZEc5eVBDOXJaWGslMkJDZ2tKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1R4aGNuSmhlVDRLQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVm1WeWRHbGpZV3hTWlhNOEwydGxlVDRLQ1FrSkNUeHlaV0ZzUGpjeVBDOXlaV0ZzUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKUEdsdWRHVm5aWEklMkJNRHd2YVc1MFpXZGxjajRLQ1FrSlBDOWthV04wUGdvSkNUd3ZZWEp5WVhrJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5WbVZ5ZEdsallXeFRZMkZzYVc1blBDOXJaWGslMkJDZ2s4WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExtcHZZblJwWTJ0bGREd3ZjM1J5YVc1blBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRazhZWEp5WVhrJTJCQ2drSkNUeGthV04wUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGblpVWnZjbTFoZEM1UVRWWmxjblJwWTJGc1UyTmhiR2x1Wnp3dmEyVjVQZ29KQ1FrSlBISmxZV3clMkJNVHd2Y21WaGJENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzV6ZEdGMFpVWnNZV2M4TDJ0bGVUNEtDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNUd3ZaR2xqZEQ0S0NRazhMMkZ5Y21GNVBnb0pQQzlrYVdOMFBnb0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1YzNWaVZHbGphMlYwTG5CaGNHVnlYMmx1Wm05ZmRHbGphMlYwUEM5clpYayUyQkNnazhaR2xqZEQ0S0NRazhhMlY1UGxCTlVGQkVVR0Z3WlhKRGIyUmxUbUZ0WlR3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbEJOVUZCRVVHRndaWEpEYjJSbFRtRnRaVHd2YTJWNVBnb0pDUWtKQ1R4emRISnBibWMlMkJUR1YwZEdWeVBDOXpkSEpwYm1jJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJVRTFVYVc5bllWQmhjR1Z5VG1GdFpUd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UGxCTlZHbHZaMkZRWVhCbGNrNWhiV1U4TDJ0bGVUNEtDUWtKQ1FrOGMzUnlhVzVuUG01aExXeGxkSFJsY2p3dmMzUnlhVzVuUGdvSkNRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDUWs4YVc1MFpXZGxjajR3UEM5cGJuUmxaMlZ5UGdvSkNRa0pQQzlrYVdOMFBnb0pDUWs4TDJGeWNtRjVQZ29KQ1R3dlpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOUVdScWRYTjBaV1JRWVdkbFVtVmpkRHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5RV1JxZFhOMFpXUlFZV2RsVW1WamREd3ZhMlY1UGdvSkNRa0pDVHhoY25KaGVUNEtDUWtKQ1FrSlBISmxZV3clMkJNQzR3UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0d0xqQThMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqY3pORHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJOVGMyUEM5eVpXRnNQZ29KQ1FrSkNUd3ZZWEp5WVhrJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUXVVRTFCWkdwMWMzUmxaRkJoY0dWeVVtVmpkRHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5RV1JxZFhOMFpXUlFZWEJsY2xKbFkzUThMMnRsZVQ0S0NRa0pDUWs4WVhKeVlYayUyQkNna0pDUWtKQ1R4eVpXRnNQaTB4T0R3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTFRFNFBDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENDNOelE4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQalU1TkR3dmNtVmhiRDRLQ1FrSkNRazhMMkZ5Y21GNVBnb0pDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzV6ZEdGMFpVWnNZV2M4TDJ0bGVUNEtDUWtKQ1FrOGFXNTBaV2RsY2o0d1BDOXBiblJsWjJWeVBnb0pDUWtKUEM5a2FXTjBQZ29KQ1FrOEwyRnljbUY1UGdvSkNUd3ZaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVhCbGNrbHVabTh1VUUxUVlYQmxjazVoYldVOEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrSlBHRnljbUY1UGdvSkNRa0pQR1JwWTNRJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TGxCTlVHRndaWEpPWVcxbFBDOXJaWGslMkJDZ2tKQ1FrSlBITjBjbWx1Wno1dVlTMXNaWFIwWlhJOEwzTjBjbWx1Wno0S0NRa0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YzNSaGRHVkdiR0ZuUEM5clpYayUyQkNna0pDUWtKUEdsdWRHVm5aWEklMkJNRHd2YVc1MFpXZGxjajRLQ1FrSkNUd3ZaR2xqZEQ0S0NRa0pQQzloY25KaGVUNEtDUWs4TDJScFkzUSUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TGxCTlZXNWhaR3AxYzNSbFpGQmhaMlZTWldOMFBDOXJaWGslMkJDZ2tKUEdScFkzUSUyQkNna0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNWpjbVZoZEc5eVBDOXJaWGslMkJDZ2tKQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbXB2WW5ScFkydGxkRHd2YzNSeWFXNW5QZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWFYUmxiVUZ5Y21GNVBDOXJaWGslMkJDZ2tKQ1R4aGNuSmhlVDRLQ1FrSkNUeGthV04wUGdvSkNRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoY0dWeVNXNW1ieTVRVFZWdVlXUnFkWE4wWldSUVlXZGxVbVZqZER3dmEyVjVQZ29KQ1FrSkNUeGhjbkpoZVQ0S0NRa0pDUWtKUEhKbFlXdyUyQk1DNHdQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDR3TGpBOEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpjek5Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQk5UYzJQQzl5WldGc1Bnb0pDUWtKQ1R3dllYSnlZWGslMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaGNHVnlTVzVtYnk1UVRWVnVZV1JxZFhOMFpXUlFZWEJsY2xKbFkzUThMMnRsZVQ0S0NRazhaR2xqZEQ0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRa0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRa0pQR0Z5Y21GNVBnb0pDUWtKUEdScFkzUSUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxsQk5WVzVoWkdwMWMzUmxaRkJoY0dWeVVtVmpkRHd2YTJWNVBnb0pDUWtKQ1R4aGNuSmhlVDRLQ1FrSkNRa0pQSEpsWVd3JTJCTFRFNFBDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENHRNVGc4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQamMzTkR3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTlRrMFBDOXlaV0ZzUGdvSkNRa0pDVHd2WVhKeVlYayUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoY0dWeVNXNW1ieTV3Y0dRdVVFMVFZWEJsY2s1aGJXVThMMnRsZVQ0S0NRazhaR2xqZEQ0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRa0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRa0pQR0Z5Y21GNVBnb0pDUWtKUEdScFkzUSUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxuQndaQzVRVFZCaGNHVnlUbUZ0WlR3dmEyVjVQZ29KQ1FrSkNUeHpkSEpwYm1jJTJCVlZNZ1RHVjBkR1Z5UEM5emRISnBibWMlMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVCVUVsV1pYSnphVzl1UEM5clpYayUyQkNna0pQSE4wY21sdVp6NHdNQzR5TUR3dmMzUnlhVzVuUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1MGVYQmxQQzlyWlhrJTJCQ2drSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2VkdsamEyVjBQQzl6ZEhKcGJtYyUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVFWQkpWbVZ5YzJsdmJqd3ZhMlY1UGdvSlBITjBjbWx1Wno0d01DNHlNRHd2YzNSeWFXNW5QZ29KUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5SNWNHVThMMnRsZVQ0S0NUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFJVYVdOclpYUThMM04wY21sdVp6NEtQQzlrYVdOMFBnbzhMM0JzYVhOMFBnbzRRa2xOQSUyQmtBQUFBQUFIZ0FBd0FBQUVnQVNBQUFBQUFDM2dKQSUyRiUyQjclMkY3Z01HQWxJRFp3VW9BJTJGd0FBZ0FBQUVnQVNBQUFBQUFDMkFJb0FBRUFBQUJrQUFBQUFRQURBd01BQUFBQmYlMkY4QUFRQUJBQUFBQUFBQUFBQUFBQUFBYUFnQUdRR1FBQUFBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNFFrbE5BJTJCMEFBQUFBQUJBQVpBQUFBQUVBQVFCa0FBQUFBUUFCT0VKSlRRUW1BQUFBQUFBT0FBQUFBQUFBQUFBQUFEJTJCQUFBQTRRa2xOQkEwQUFBQUFBQVFBQUFBZU9FSkpUUVFaQUFBQUFBQUVBQUFBSGpoQ1NVMEQ4d0FBQUFBQUNRQUFBQUFBQUFBQUFRQTRRa2xOQkFvQUFBQUFBQUVBQURoQ1NVMG5FQUFBQUFBQUNnQUJBQUFBQUFBQUFBRTRRa2xOQSUyRlVBQUFBQUFFZ0FMMlptQUFFQWJHWm1BQVlBQUFBQUFBRUFMMlptQUFFQW9abWFBQVlBQUFBQUFBRUFNZ0FBQUFFQVdnQUFBQVlBQUFBQUFBRUFOUUFBQUFFQUxRQUFBQVlBQUFBQUFBRTRRa2xOQSUyRmdBQUFBQUFIQUFBUCUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRjhENkFBQUFBRCUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRkElMkJnQUFBQUElMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkZ3UG9BQUFBQVAlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkY4RDZBQUFPRUpKVFFRSUFBQUFBQUFRQUFBQUFRQUFBa0FBQUFKQUFBQUFBRGhDU1UwRUhnQUFBQUFBQkFBQUFBQTRRa2xOQkJvQUFBQUFBMVVBQUFBR0FBQUFBQUFBQUFBQUFBRkZBQUFCd2dBQUFCQUFjd0IzQUdrQWN3QnpBRjhBWVFCeUFHMEFlUUJmQUdzQWJnQnBBR1lBWlFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFCd2dBQUFVVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQVFBQUFBQUFBRzUxYkd3QUFBQUNBQUFBQm1KdmRXNWtjMDlpYW1NQUFBQUJBQUFBQUFBQVVtTjBNUUFBQUFRQUFBQUFWRzl3SUd4dmJtY0FBQUFBQUFBQUFFeGxablJzYjI1bkFBQUFBQUFBQUFCQ2RHOXRiRzl1WndBQUFVVUFBQUFBVW1kb2RHeHZibWNBQUFIQ0FBQUFCbk5zYVdObGMxWnNUSE1BQUFBQlQySnFZd0FBQUFFQUFBQUFBQVZ6YkdsalpRQUFBQklBQUFBSGMyeHBZMlZKUkd4dmJtY0FBQUFBQUFBQUIyZHliM1Z3U1VSc2IyNW5BQUFBQUFBQUFBWnZjbWxuYVc1bGJuVnRBQUFBREVWVGJHbGpaVTl5YVdkcGJnQUFBQTFoZFhSdlIyVnVaWEpoZEdWa0FBQUFBRlI1Y0dWbGJuVnRBQUFBQ2tWVGJHbGpaVlI1Y0dVQUFBQUFTVzFuSUFBQUFBWmliM1Z1WkhOUFltcGpBQUFBQVFBQUFBQUFBRkpqZERFQUFBQUVBQUFBQUZSdmNDQnNiMjVuQUFBQUFBQUFBQUJNWldaMGJHOXVad0FBQUFBQUFBQUFRblJ2Yld4dmJtY0FBQUZGQUFBQUFGSm5hSFJzYjI1bkFBQUJ3Z0FBQUFOMWNteFVSVmhVQUFBQUFRQUFBQUFBQUc1MWJHeFVSVmhVQUFBQUFRQUFBQUFBQUUxeloyVlVSVmhVQUFBQUFRQUFBQUFBQm1Gc2RGUmhaMVJGV0ZRQUFBQUJBQUFBQUFBT1kyVnNiRlJsZUhSSmMwaFVUVXhpYjI5c0FRQUFBQWhqWld4c1ZHVjRkRlJGV0ZRQUFBQUJBQUFBQUFBSmFHOXlla0ZzYVdkdVpXNTFiUUFBQUE5RlUyeHBZMlZJYjNKNlFXeHBaMjRBQUFBSFpHVm1ZWFZzZEFBQUFBbDJaWEowUVd4cFoyNWxiblZ0QUFBQUQwVlRiR2xqWlZabGNuUkJiR2xuYmdBQUFBZGtaV1poZFd4MEFBQUFDMkpuUTI5c2IzSlVlWEJsWlc1MWJRQUFBQkZGVTJ4cFkyVkNSME52Ykc5eVZIbHdaUUFBQUFCT2IyNWxBQUFBQ1hSdmNFOTFkSE5sZEd4dmJtY0FBQUFBQUFBQUNteGxablJQZFhSelpYUnNiMjVuQUFBQUFBQUFBQXhpYjNSMGIyMVBkWFJ6WlhSc2IyNW5BQUFBQUFBQUFBdHlhV2RvZEU5MWRITmxkR3h2Ym1jQUFBQUFBRGhDU1UwRUtBQUFBQUFBREFBQUFBRSUyRjhBQUFBQUFBQURoQ1NVMEVFUUFBQUFBQUFRRUFPRUpKVFFRVUFBQUFBQUFFQUFBQUFUaENTVTBFREFBQUFBQVdyd0FBQUFFQUFBQ2dBQUFBZEFBQUFlQUFBTm1BQUFBV2t3QVlBQUglMkYyUCUyRmdBQkJLUmtsR0FBRUNBQUJJQUVnQUFQJTJGdEFBeEJaRzlpWlY5RFRRQUMlMkYlMkI0QURrRmtiMkpsQUdTQUFBQUFBZiUyRmJBSVFBREFnSUNBa0lEQWtKREJFTENnc1JGUThNREE4VkdCTVRGUk1UR0JFTURBd01EQXdSREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFTkN3c05EZzBRRGc0UUZBNE9EaFFVRGc0T0RoUVJEQXdNREF3UkVRd01EQXdNREJFTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TSUyRjhBQUVRZ0FkQUNnQXdFaUFBSVJBUU1SQWYlMkZkQUFRQUN2JTJGRUFUOEFBQUVGQVFFQkFRRUJBQUFBQUFBQUFBTUFBUUlFQlFZSENBa0tDd0VBQVFVQkFRRUJBUUVBQUFBQUFBQUFBUUFDQXdRRkJnY0lDUW9MRUFBQkJBRURBZ1FDQlFjR0NBVURERE1CQUFJUkF3UWhFakVGUVZGaEV5SnhnVElHRkpHaHNVSWpKQlZTd1dJek5IS0MwVU1ISlpKVDhPSHhZM00xRnFLeWd5WkVrMVJrUmNLamREWVgwbFhpWmZLemhNUFRkZVB6UmllVXBJVzBsY1RVNVBTbHRjWFY1ZlZXWm5hR2xxYTJ4dGJtOWpkSFYyZDNoNWVudDhmWDUlMkZjUkFBSUNBUUlFQkFNRUJRWUhCd1lGTlFFQUFoRURJVEVTQkVGUllYRWlFd1V5Z1pFVW9iRkNJOEZTMGZBekpHTGhjb0tTUTFNVlkzTTA4U1VHRnFLeWd3Y21OY0xTUkpOVW94ZGtSVlUyZEdYaThyT0V3OU4xNCUyRk5HbEtTRnRKWEUxT1QwcGJYRjFlWDFWbVoyaHBhbXRzYlc1dlluTjBkWFozZUhsNmUzeCUyRiUyRmFBQXdEQVFBQ0VRTVJBRDhBOVZTU1NTVXBKSkpKU2tra2tsS1NTU1NVczR1RFNXaVhSb09KS0ZpM092eDJXdmJzZTRlNWdNd1JvNXNveXBkT3lOOW1UU1JIcFd2ajRPYzQlMkZ3RFZmOVdrcHVwSkpKS1Vra2trcFNTU1NTbEpKSkpLVWtra2twJTJGJTJGMFBWVWtsQ3F4dHRiYkclMkZSZUE0ZkFwS1pwSkpKS1VvMldOcnJkWTh3MWdMbkh5QWxWT3NXdm93WFpEWiUyRlFPWmE4RDl4cm1tMyUyRk5yM1BVc3dtJTJGcG1RR2FteWw0YkhpV3VoSlRZcXNGdFRMQnc5b2Q5NFUxUTZGa2ZhT2s0dHN6dXFZZndWOUpTbGwxJTJGb090MnNPZ3VEWGdlVG03ZiUyRlBtTiUyRndDQ0xVV1oxVmhyeXNiS0ElMkJqdWE3emd0dVolMkYxRnFJVVhUU1FjdktaaTQ3c2g3WE9ZMHRCRFlKaHptczNha2ZSM2JsVmQxM3ByTXR1SSUyQndzZSUyRjZMM0FobTduMCUyRlUlMkJpMnphZnprRk9ncTklMkJkajBaRk9NNGszWkR0ckdORW5oenQ3djNXYldQVThiSnB5YXZWcGR1WnVjMmVOV09OYjIlMkYyWHRYT1kyVlU3ckE2aG5POVJ1SlMlMkJyMWhPMWxndUdKYnVZejJleHR2djNmekxQVSUyRndDRVNVOVFra2trcFNTU1NTbEpKSkpLZiUyRiUyRlI5VldmMGl3aXUzRmY5TEdzZXdUJTJCNkQ3UCUyRkF5eHkwRm11bkg2eFBETXBnZCUyRmJaRlQlMkZ3RG9PeCUyRiUyQjIwUXAwbEMwMkN0eHFBTHdEdEI0SjhGTkpCVFZvdnglMkJvNGp2YkxMR2xsdFR1Uk1zc3JmJTJGQU5KaXolMkJoWkRxTU8lMkZFeUNYMmRPYzZ0JTJCa3VjMWdtdCUyQjMlMkZoYVBUZW9aNXM2UjFJWnJCR0Rsa052SSUyQmpYY1lZeXglMkY3dFdWOUIlMkZ3RHclMkZ3RHdseUQxTHFXSDBqcTJOMU81NXJ4T29nWTFyd0M0Qzl1dVA2bXpkdDlXbDF2NlQlMkJiJTJGQUZkRlMlMkYxTXlxJTJGMlZUaHVzYSUyQjJ0c3QyazZzUHVZNzNCcm0lMkZvM1Z2MmZ5JTJGM0YwUzRUQXpxJTJCbSUyRldEcXVLR25iaFdPeWE2MkRVVWxyY215dWxrdFo2ZjJleTE5V3o4JTJGMkxzMlolMkJGWXgxakw2eXhnQmUlMkZjSUFJM0NYZk5JcVpYM3Vyc3Fxclo2ajdUcUpnTlkyUFVzUFAwZHlwZldKJTJGbzlOT1QyeHJhckhUeHMzdFprZiUyQnk3N1ZSNnY5YmVqZE5zYmtiM1picW0yc2ZWamdPT2hyZFpGbGpxc2ZmWHMlMkZtdlY5ViUyRiUyQkRYSGRaJTJCdXZVOHpBNmklMkJqMDJZMXphd2FaTHQyTFkyMXRsdGI3WE9iNmo2JTJGd0RSMVYlMkZ6VjM2djZyUFZZRlUlMkJpQ3M1UFM3Y2Q0M08yV1VPQjc3ZDFYJTJGVDI3bHd2Vm5OeUtLOGQxNXE2aGlqMjA3bzlkZzNESGRXOW05ekx2OEFRJTJGNFd1NzFLJTJGVHRyOWFxekolMkJ1SFY4dG1SMHpOb3lMdnNYVThOcjdjZHRqbXROMUo5SyUyQjJwb2RzYmsxJTJGbyUyRjhBMFlzbkc2dGUlMkJuTFpiZFhYWTZwdHRBRE53dWN3bWh2MmNXYnYwdG5yJTJGcEtuZnBLYktmOEF0c3FEMUR2cmpuZlY3MGNLbGxkZ3pnYnFqZjdRSEIzcDJzRzBzYjZsdjAlMkZmWjZURWNaZzYzMHh6MnZleks2alZiZmhWdGY2YmlRJTJCeGx0bU5ZN2EyejlKczNWdSUyRndheXZySGgxJTJCaGhkS3YzWHViakJoWTl3RGJIdFBwT2RYa09INnQxRGQlMkZSc2wlMkY2QyUyRndEb21WN0ZnOVdjJTJGRiUyQnEzUkw2YmliZW41V1ZqaDRsbGpkeGJleGx0ZjA2TGE5dnZwJTJGTSUyRndBRlolMkZoRXVxbjByNmxmWE05V1l6cHZWb282d3h2Y2JCY0dqOUx0cjA5TExvajlieGYlMkJ2VSUyRm9mNW16OWF2ckpkMCUyQjJqQndIQVpUcmNkMTdpQTdiVlphMm5ZMEglMkZDWHc5diUyRkFBZGYlMkZXbDV6aWRRWjlaY1kzbDNvZGR3ZzJ6MW1IWjZ6V2ZRdjN0MiUyQm5rMCUyRndDbiUyRndEUmY4eGY2RGYxRHF2WEdaJTJCZTV0enNpN0dkNmxtMmtQc3FOYnFxT0cxJTJGNEN1eG5wdCUyRlM3JTJGOUk5QUxqUjFHaDdmOTYlMkJ1SkpwQTFLWmoyV05EbU9EbW5od01oSmF5U1NTU1UlMkZ3RCUyRjB2VlZuOWFpckZHWVNHakVjTFh1T2tWJTJGemQ1SiUyRmRaVSUyRndCWCUyRnJhMEVITTlEN0pmOXBFNCUyRnB2OVlIWDJiVDZtbjlSSUtjRTlVNmxnWG5KRHYybDBqTiUyRlM0OTdTMzlDNTMwc095eG4lMkJCYyUyRiUyQmg1UDgzJTJGMmt5ZlMlMkZSNU5sUHJ2MTZ1d2N6RXhzUEhGb3pMQlJXSHo2cnJpV005T3V2NkhzOVQzdnNldWU2QjlidW9aRjV4QlU4NEJEQyUyQnRvWllXMVBjekclMkIwMkd4bTcxR2IyWFAyZm9kN1A1bXRjdDE2N3ElMkZUODdHZGZrJTJGYnNjV0hJNlYxTnJRTkd1M08yTlo2ZnA1Rk45ZFRjckgzZXBSNmY5Ukt3UllYemhLRXVHWW8lMkZ4ZlNNdk02bFpsRiUyRlZmU29iVTExUTlNR3lxTGZhJTJCclA5UEpzcjlLejA5bjZiR3ElMkY3ZFdOMXo5VnhDM0tmWlQwJTJCJTJCUFV5R2c1TklhUGRVN2V6WmU3S3hQUiUyRlI1R3lyMXNYOURiNiUyRndEZ3VaeCUyQnYzNTJiZTRXTndmdCUyQjl0YjJuMjFtemElMkYwN1huMiUyRnA3cW1WZXA2ZGJQMHZxZm9scVpEN21ZOTFlRG1YaDlwQkFaREdqVDlhd3ZiJTJCa3AzVyUyRnAyTWRrZnBhdjFiJTJCWFViMFd1bFRlUDIzaDVEaTNKTDNVWVdUWXpsemJLbjFzYzVyTjdiYU0zRlo5cHc4eHJ2U3ZyJTJGUWYwaW02dXZINnZZN0c2aGZTMm14MVdGWWFxN2JuayUyQm8ycjByS1BUYTdidXN0eFgyMCUyQnolMkJsZjRSVyUyRnFQWGVNNDAzcyUyRlE5THBkYlE0djk3V2w0RGNXMW51ZDZQcWZySDJlOW5zek1hdk54JTJGczklMkYyaEE2aTVyNzdIWkxIMjRUbjFXNCUyQlV3ajJQdmEzSmRqNWJmemFIYjhuN0ZrJTJGNFA5WXhQMHRYOHd1bHFhV2ZiMUN6WjZHYU0zMDYyMldERCUyRlNWMW1wM3NmWTZ0aldPc1kxdGY4Nzc2YSUyRlRRN3MyN3FGTlZJcnF3QWZVc2JaUlh0OVMwTjlLeTF0WDgzJTJCZ3JlJTJGMXNlaiUyRkFFMWx6S2x0ZER0Ymk5WkpzcXFiVGFCWGRTMFRiVzY4UHljVXhOajhxckliUiUyRnBQVSUyRlNiNiUyRlR5djZWV2YwcXZPcnptc1lhc25HekhtazdneDFaYTZLMlhSN3NkJTJCNXY2Szc5SlhpM2JQVSUyRlY4aTcxUlJVNSUyRldhTE12NmtZajdTR1g5TDZnJTJCcUslMkZvc3J5bWV1eDFjZjRCMTdmWXNycHVQbU54ZnR6NjNQY3dsOURXRFEyc0lxWmtOSiUyRk5aZTZsdVI2ZiUyRkFBWCUyRkFBUzFmMnBYWDB2cSUyQkpsbjdMZmtWVnRhM1pBZmw0OTI5bXluJTJGQTc2ckxxODZyJTJCYm8lMkY0cXloVnJ1b1pmU2VrNGxkbU0xMlBlMjI3RDlYUUJ0dnB0dTMlMkI3ZDZWcjY2WGYyUFUlMkZ3aVNuc3VxbkR5TE1mRnRNWk9SaiUyQnJYU1BlSEZzZW8ybDdnMzFMYSUyRlYlMkJoJTJGMm9xJTJGd2ZxZnBGem5WY2Q5dURaaXZheHpEWlhhMXp6dFphWEIxTFclMkJ2JTJGZ2IlMkZaVlhpNXR2ODMlMkZSc2o5QXNMcWZYdjJqMCUyRnBYcVBGZWRnTnVyZmExMEYzdXFzeDhsdjhBbzNPYnZyZiUyRkFNVDZuJTJCRlFxdXE1OSUyRlVSZWMxemI3Q0hYTWM4aHRtdzduNDd2OEJ0dWNQVWI2djZQOUxkNjlpTm9TOUg2VmswWnpjcGozdHFxZVcxQUF0dWMlMkY4QW03TWV5aHY2V3ZaJTJGTlpYJTJGQUlFdWd6dWsxNGVMaU42OWZiaTQ5dTZ3Z0JqeVdOYjZkUDZJT2E1MlY2dnQyNDdQMGREJTJGQUZQMGFqamRjNmtCZWVrWVFkMURJczJ0c1pWWmJkVlh0OXRZcXNHOSUyQjMlMkZUUFolMkJsJTJGd0JDc2FqcFhWJTJCdFgyWndvJTJGYWw3V3V2djlTME1lYTIlMkZUMiUyQnZaN20xZTFqNkdWNzZQWiUyRnBLME5FN2F2cEgxWjY5bmRVNlRpNG1QNm1WWmt0QmRia1AzdXFiV1RSa2pLdVlHYjl0MWU2djI3NzZyUDlJdXl3OFZ1Smp0b2FTOHRrdWVlWE9jZHozJTJGMm5MeWI2dmRadjZEakRLd21WdDNsemJzWnozVnNaY0hsdVRnWDQ5OWhmUll4dXpKd24lMkZ6bnN5S3JMTHY4SDJ2VCUyRnI5aE9ESyUyQnNNJTJGWnVTV2t2cnRGakMxd0xtdnIlMkZXS3FXJTJGbSUyQnpiWiUyQmtSUjR2VnBLbjAzcSUyRlRlcTQ3TW5wJTJCUXklMkJ0N1d2RzAlMkI0QnczTjlTcyUyRnBLJTJGJTJCdU5WeEJUJTJGQVAlMkZUOVZUT2ExN1N4d0RtdUJEbW5VRUhzVTZTU254ZjZ4OUN6UHF0MUVDaXg3R01lYmVuNVEwY2FuZXl5bHp2b3V0bzNNcnVaJTJGaGF2MG5wJTJGcEZVcnlhTWpGdnJ6cHM2ZGtQYlptVXNIdng3ekZiZXI0ZjdyYkxQNld6JTJGQUVsbiUyQml2WXZZJTJCdTlMNmYxWHBsMkgxR0cwT0c3MVNRMDF1SDBiMlBkOUI3UCUyRlViJTJGd0JHdkg4dnBGM1Q3JTJGUXBjSDVOSWVhN2F6NmxlWFNkMiUyQnpIamRXNzBxSGJNbkUlMkZ3bFNackUyTnV6ZmpLSE1ZJTJCR2ZwelIybiUyRkw5SDk1d00lMkZCeU9rNWh4c2dpeXV3YjZybTYxM1ZINk4xWCUyRkFLTXJXMTBqcWJybUhEeUhsOE1oalkzRzZzSGQ2UE8zMThkdjZlaXowN2ZXOVAwdiUyQk9IaVB4YzZuOWo1NTJZZGgzWW1WeTdGdFA1JTJCdnZmaXUlMkZ3JTJGJTJGQiUyRnBmNXplaFl2MWE2cFZrNVdMbmglMkJKWmhNTDZybWlXdnNCWTZ0MUZuMG4xTlk3N1R2cCUyRlNmOFduaWpxTlduT0VzY2pHUTRaQjdPaWcwZlY3TGYwMXJyOHJxUjJ0ZXozWFBiQng2N1hzWXpheXhqYk1sOW0zOCUyRjlKJTJCbCUyRlMlMkJwenJ2VXhNV3F2cU5WdUprc3gzNDAyelc1b29zYmRTY2lnNzI1T0hkOXFZNnYlMkJjMlpPTFQ2Tm44OHkzZTZYMXV5azlOZXh6bllkJTJCUGRpMk1jMWxUeGw0enR6bld1M2JLZldaWlhiczlUMDZmMHlwZFk2SjFIciUyRlZIOVdydHBzeDZtTXFGRFMlMkYxV2lzRjMwWE5hNSUyQjU3N2JmMGV5eiUyRlJWJTJCcW5Id1cxUm90REY2eGF5NDlUdmlrczlPSE5CQWM5ZzJzZmMxbTdadTIlMkZvRyUyRlF4djNQU1Q5THcyZFRibE0lMkIxVzFzZERpeG9NMnZ1M2YwOTM2T3QzcE9ac3VycCUyRlE1SCUyQmolMkZ3YUpqNEdYZjA1MlpqZXBSamJtT3J5d056TmpIdWxoOU1lZzV6TiUyQjFscm4lMkY0UjlmcCUyRnBGWXhjSEQ2ZXk2bkl0ZFNHQU90ZGxGd2hsaCUyRlJ1SHBOM1BwYnY4QTV4bnFlbWdGT1oxJTJGRHlNVzc3VDFESU9ReTR2cmE5MWJxQzAwZW4lMkJpWXglMkYwNk5ycW5ldiUyRkFJZiUyRkFFajFXeGFHMnN4S09vOU11NmlLMzJVWWVPTEhNTDN2THJOcnJtdTMlMkJsdiUyRkFQUmkxY3ZwbDFQVXFXM05maDVWSjM0JTJCTm1POVhFdXJIdSUyRlY3dDFqR01zWWYwbm9QOW4lMkZBQU5xdjlRNlc4NHc2MzBobjJjdUZkMWpjWUd5c2pTNnF6THhtaXUzRnlhZHY4OTZOWCUyQmwlMkIyZXFoU1NCUTF1JTJGd2VkNno5WCUyQnJ0RkpIMWRaajFhZ0VOc3FadUlCOUVQc3Zia1c3V2o2ZVMlMkY2ZnElMkJqJTJCaldPY2JOdzhobnFkTnhxM3RpelpZWE9hNFR5N2ZrV2JtTmQlMkZPYmZvZjRSZHBUMWZxSFVzMXJjJTJGTGZrdHlSVTJ2R2E0YlNITmVQdEZMM2VsNlZtTGxWZWpaN2YwbSUyRjFjaiUyQlolMkIwV2J2U2ZxbjAlMkZxMWVUamRSSWRsVnNwc3FjeHdCcWM4UGJmVyUyQnJYMzc2JTJGVHRmJTJGQUtIMGJjUzZ2MldKWHF1bGo0WUNYRURacXVyeG4xZHhYZFJvc3V3NzhoblhjUjVkU1d1MjJPclkyYnFzZG4wM1pGVHQ5MzJPejJaV0w2bFZMUFdvWFMxOUh6dXA5UHElMkJzZlRNWXR5OGtuN1pSWERDeTVoZFZiMURFcmUlMkY5TlU3OUx2eEhiTGNsajdLZjVySXNwWEU1bVBtOUo2cSUyRkxxYTgyWXJtdmZWSkhxVXNkJTJCZ3lxTGF0bG4wYSUyRjAzcFA4QVd4TG1lclYlMkI1aiUyQnolMkZVN3F2UiUyQnA5Q290NlFObExKYlpRNXhkWlhiOU8xbDczUzk5am51MyUyQnE3JTJCZSUyRm5FbU41N3F2MVg2YjljJTJGcTk5b3hXTnglMkJ1WXhjeXg3ZzlyamMyUFh4TTV0MzZ4NmRqbXQ5SDF2MDJMJTJCaTlMJTJGQ1ZXY3o5VlByNTFucFBXWDlIJTJCc3h1eThiSXRGTm95RHZ0b3Q5dEljTiUyRjA2SGUzMTZQJTJGQUVLbyUyRndBSjlwOWhiWFcxN250YUE5OGIzQVFYUUlidVA1eTQzJTJGR0I5UTJkZnAlMkZhWFRXdFoxaWxvRUdHaklZMyUyRkFQZTclMkJheUclMkY4QWFmSiUyRjZ6YiUyQmklMkZTVUpUMlRLNjZ4dHJhR0FBQUJvQUVBYlc4ZnlWSmVjZlVicVA4QWpIUFYzMWRYeE1qSjZjJTJGYXkyN0xhTWQxSmFOZ3NvRHhYOW85cmYwemFXMiUyQnIlMkZQZXAlMkZwUFIwbFAlMkY5VDFWSkpKSlNETkwlMkZzcjlnZVhHQUJXMXJuYWtENkYzNlAlMkJzdUF3dW1WJTJGV1hOcnhIdmN5bXFoMlM3SXFMblJhJTJCN0pmajJVUGNHdHFkdnlmVnNwWjdLJTJGUSUyQnkxJTJGb2FWNkZmajA1RlpxdllMS3lRUzEzRWc3bSUyRjlKS2ltdkhwcm9yRVYxTkRHRHdEUnRha2tFZzJOQ05ueERxZEdiMExydTNxRkRIWDQxckxUV0d4VmV5Ujc2MjZ0ZFZtTmElMkYxUDNMUFdyOWkyY216cnBZNXRkQjZnenBMN0txN1dHWFBxcWY2RDhISWMxZ1o5dXBvJTJGN1QlMkZ6bVZYJTJGQURYcXIwYnJPRjAlMkI0MTM1YldWRmdjMDVrRDFXTVAwNmFyaTE3cTI1UDgxWiUyQiUyRlglMkJpJTJCbmF1VHlzZnFuUWVvTTZoMDZsOTFlVzJINGp3ZjF1aGdjNzBMcTNEZFYxWEd4bTc4ZDclMkZ3Q2ZvJTJGUVhmcEs3R0lSRlg0czJmTjd2QWVHcFJqd2s5M0l5T2o1VkRuTjZVNSUyRlVNYSUyRmZsWWxMR3VMbSUyQnF4bnBmYWRyRzF0ZGszMDJVZmF2JTJCczJlbiUyRk5yUSUyQnJkOSUyQk5sTmRmUyUyRkR1RFhNeThlN1IxYm1qZkolMkZrTmhsOU52NTlLdE9lTGJNRE82Rmt0SnRlJTJCJTJGQ3N0TGglMkJoY2F4bTRtWTVvYzV0TE1yMDhYSzNzdDlIN1RSZCUyRlNxUFdXMTFmQSUyRmElMkJPT3BkT2M2anFlTU5sbFlqY2R2dWRqV3Q5emZWcjNiOGQlMkYlMkZvbSUyRjFFJTJCMkY1anBmMXU2RGo5UnlMS2NxdTNwZWFmMXJGMWFHaCUyQmh5bTBYTXI5MVRmWmtzciUyRm5jYiUyRlNXWTliRlR3ZnRmVU9wZFF3Ulp2eHNETE9MaDJ1QmV4ckxIMjFZekxMQUh2OUszWlglMkZ3QUglMkZPTFV3JTJCbmZVJTJGNnhWREI2bGc0JTJGVHV0RUZyTGFHJTJCZ0xYRCUyRkM0MnpZMnglMkYlMkJsdzdmMDFmOHVyOU9uJTJCcm95UHFsbFpmVGhoTXNxQlpibFdoeEZqYWhGTExXRSUyQjI3SFp2M3Nic3I5SDlONjMlMkZCalcxTDlKOVBEYSUyRjZ1ZGN4JTJGVTZUYTdiU0g2dXhMVDdXME9jMCUyRm82SFQ2bUZsMWZ6WCUyQm5WOW4xUjZ2MDdiYmhadjJ6YTR3MTQ5SzBWazZlbmtNZVdQdTJmem44eFZiJTJGd2YwRjFHVmg0bWRTVzNNRDJ2YkFmQTNBSDl4eW9ZbVJaMG8lMkZZODk0JTJCenRCTkdTN1FiUiUyQmE4bjZPeiUyRndIJTJGdHRMeVJieVBVY1hNcXp6blkyTmZoOVRyYlpia2tWeXh6UUJ2em0lMkJtMDR2cjdmMGQlMkZvMmZyWCUyQkQlMkZUVjJyYyUyQnJtSDBicUhUOGZjVyUyRmIyTmVkMUZybVdzYVhPWkxmUkxIMDFXJTJCcHU5TCUyQmFYVWlDSkhCV0dlZ002ZDFJZFU2V3piSmklMkZGYkFhV3VQdmRWJTJGViUyRm5QVFN0TjZVNCUyRldmcVBrNWpoUmoyQm9yRHJNWExPanFuZ2UybTFyTnJuVjNlMWxucGY4YiUyRk8xVXJtJTJGcUxsWkgxYSUyQnNlVDAzSXdMYTdzOTdLOG5GclklMkJ4OWZwJTJCcDZPZmp1cFo2VnZUMyUyQnJZM0klMkYwUDZPeW45RiUyQmpYcktTQ0ZKSkpKS1Vra2trcCUyRiUyRjlYMVZKSkpKU2tra2tsS1FNM0RwemNkMlBidUFkQmE5aExYc2NOV1dWUGI5Q3hqa2RKSlR4SFZmcTRPbDViYyUyQnE1NWRsdkxMcTJEYXgxbHByWTdJRmJQNWk2M2I3N0tmOUglMkJrJTJGUXJwUHElMkZjTE1BVmxncnVwY1dYTTRkdUJqOUkweTdmJTJGMWYwMHZyQjBoblZ1blBvJTJCamtNbXpGdEdqcTdRQzF0bGI5Tmp2ZCUyRnF4UzZkV01qMHVwSDlGZmJYc3lxd0lhYkd3eDMwJTJGZiUyQmlmVzluOVJIb3B3dnJCaDRlRjFWJTJCWGtVJTJGcW1aUVFMU0I2ZGVZeHd1eDdIQWZwR3ZzOUwlMkZCJTJGOEo2aXZXVloyZGo0dlY4RmdmYmtZJTJGbzVXTzhob3NyZHIzJTJCaTZ0N25yZWZXeDhiMmgyMGh6WkV3UjlGdyUyRmxJT0xnNCUyQkk2NTJPQ3h0N3ZVZldEN1E0JTJGU2N4djVtJTJGODlLMUl1allqOFBwV0xqV0RhJTJCdXNCN1NaSWNmYzV1NlhmbkZXMzFzZUllME9FekJFNiUyRk5TU1FVcEpKSkpTa2tra2xLU1NTU1VwSkpKSlQlMkZBUCUyRlc5VlNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkYlMkZaQURoQ1NVMEVJUUFBQUFBQVZRQUFBQUVCQUFBQUR3QkJBR1FBYndCaUFHVUFJQUJRQUdnQWJ3QjBBRzhBY3dCb0FHOEFjQUFBQUJNQVFRQmtBRzhBWWdCbEFDQUFVQUJvQUc4QWRBQnZBSE1BYUFCdkFIQUFJQUJEQUZNQU1nQUFBQUVBT0VKSlRRUUdBQUFBQUFBSEFBSUFBQUFCQVFEJTJGNFRramFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0x3QThQM2h3WVdOclpYUWdZbVZuYVc0OUl1JTJCN3Z5SWdhV1E5SWxjMVRUQk5jRU5sYUdsSWVuSmxVM3BPVkdONmEyTTVaQ0klMkZQZ284ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0l6TGpFdU1TMHhNVElpUGdvZ0lDQThjbVJtT2xKRVJpQjRiV3h1Y3pweVpHWTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1Rrdk1ESXZNakl0Y21SbUxYTjViblJoZUMxdWN5TWlQZ29nSUNBZ0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenA0WVhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJJTJCQ2lBZ0lDQWdJQ0FnSUR4NFlYQk5UVHBFYjJOMWJXVnVkRWxFUG5WMWFXUTZSVGN4T1RWRk5UWTFOek16TVRGRVJEbEZOekpHUTBFMlFqa3dRVVpCUmpVOEwzaGhjRTFOT2tSdlkzVnRaVzUwU1VRJTJCQ2lBZ0lDQWdJQ0FnSUR4NFlYQk5UVHBKYm5OMFlXNWpaVWxFUG5WMWFXUTZSVGN4T1RWRk5UYzFOek16TVRGRVJEbEZOekpHUTBFMlFqa3dRVVpCUmpVOEwzaGhjRTFOT2tsdWMzUmhibU5sU1VRJTJCQ2lBZ0lDQWdJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQZ29nSUNBZ0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenA0WVhBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4ZUdGd09rTnlaV0YwWlVSaGRHVSUyQk1qQXdPQzB3TnkweE9WUXhORG8xTnpvME1TMHdOVG93TUR3dmVHRndPa055WldGMFpVUmhkR1UlMkJDaUFnSUNBZ0lDQWdJRHg0WVhBNlRXOWthV1o1UkdGMFpUNHlNREE0TFRBM0xURTVWREUwT2pVNE9qQTFMVEExT2pBd1BDOTRZWEE2VFc5a2FXWjVSR0YwWlQ0S0lDQWdJQ0FnSUNBZ1BIaGhjRHBOWlhSaFpHRjBZVVJoZEdVJTJCTWpBd09DMHdOeTB4T1ZReE5EbzFPRG93TlMwd05Ub3dNRHd2ZUdGd09rMWxkR0ZrWVhSaFJHRjBaVDRLSUNBZ0lDQWdJQ0FnUEhoaGNEcERjbVZoZEc5eVZHOXZiRDVCWkc5aVpTQlFhRzkwYjNOb2IzQWdRMU15SUUxaFkybHVkRzl6YUR3dmVHRndPa055WldGMGIzSlViMjlzUGdvZ0lDQWdJQ0E4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02WkdNOUltaDBkSEE2THk5d2RYSnNMbTl5Wnk5a1l5OWxiR1Z0Wlc1MGN5OHhMakV2SWo0S0lDQWdJQ0FnSUNBZ1BHUmpPbVp2Y20xaGRENXBiV0ZuWlM5cWNHVm5QQzlrWXpwbWIzSnRZWFElMkJDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0FnSUNBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cHdhRzkwYjNOb2IzQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2Y0dodmRHOXphRzl3THpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4Y0dodmRHOXphRzl3T2tOdmJHOXlUVzlrWlQ0elBDOXdhRzkwYjNOb2IzQTZRMjlzYjNKTmIyUmxQZ29nSUNBZ0lDQWdJQ0E4Y0dodmRHOXphRzl3T2tocGMzUnZjbmt2UGdvZ0lDQWdJQ0E4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBQY21sbGJuUmhkR2x2Ymo0eFBDOTBhV1ptT2s5eWFXVnVkR0YwYVc5dVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwWVVtVnpiMngxZEdsdmJqNHhNREF3TURBd0x6RXdNREF3UEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE1EQXdNREF3THpFd01EQXdQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcE9ZWFJwZG1WRWFXZGxjM1ElMkJNalUyTERJMU55d3lOVGdzTWpVNUxESTJNaXd5TnpRc01qYzNMREk0TkN3MU16QXNOVE14TERJNE1pd3lPRE1zTWprMkxETXdNU3d6TVRnc016RTVMRFV5T1N3MU16SXNNekEyTERJM01Dd3lOekVzTWpjeUxETXdOU3d6TVRVc016TTBNekk3UXpBMVFURTVNRFJHUmpBd1FVSkVRekExTVVKRVJrRkdNREl3TkVWQk5URThMM1JwWm1ZNlRtRjBhWFpsUkdsblpYTjBQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZaWGhwWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOWxlR2xtTHpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0JTJCTkRVd1BDOWxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajRLSUNBZ0lDQWdJQ0FnUEdWNGFXWTZVR2w0Wld4WlJHbHRaVzV6YVc5dVBqTXlOVHd2WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0JTJCQ2lBZ0lDQWdJQ0FnSUR4bGVHbG1Pa052Ykc5eVUzQmhZMlUlMkJMVEU4TDJWNGFXWTZRMjlzYjNKVGNHRmpaVDRLSUNBZ0lDQWdJQ0FnUEdWNGFXWTZUbUYwYVhabFJHbG5aWE4wUGpNMk9EWTBMRFF3T1RZd0xEUXdPVFl4TERNM01USXhMRE0zTVRJeUxEUXdPVFl5TERRd09UWXpMRE0zTlRFd0xEUXdPVFkwTERNMk9EWTNMRE0yT0RZNExETXpORE0wTERNek5ETTNMRE0wT0RVd0xETTBPRFV5TERNME9EVTFMRE0wT0RVMkxETTNNemMzTERNM016YzRMRE0zTXpjNUxETTNNemd3TERNM016Z3hMRE0zTXpneUxETTNNemd6TERNM016ZzBMRE0zTXpnMUxETTNNemcyTERNM016azJMRFF4TkRnekxEUXhORGcwTERReE5EZzJMRFF4TkRnM0xEUXhORGc0TERReE5Ea3lMRFF4TkRrekxEUXhORGsxTERReE56STRMRFF4TnpJNUxEUXhOek13TERReE9UZzFMRFF4T1RnMkxEUXhPVGczTERReE9UZzRMRFF4T1RnNUxEUXhPVGt3TERReE9Ua3hMRFF4T1RreUxEUXhPVGt6TERReE9UazBMRFF4T1RrMUxEUXhPVGsyTERReU1ERTJMREFzTWl3MExEVXNOaXczTERnc09Td3hNQ3d4TVN3eE1pd3hNeXd4TkN3eE5Td3hOaXd4Tnl3eE9Dd3lNQ3d5TWl3eU15d3lOQ3d5TlN3eU5pd3lOeXd5T0N3ek1EdEVORFl6TjBOQ09VUTBNVUV4TUVKQk4wVkdOVVZDUTBSQ05qTXhPRE15T1R3dlpYaHBaanBPWVhScGRtVkVhV2RsYzNRJTJCQ2lBZ0lDQWdJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQZ29nSUNBOEwzSmtaanBTUkVZJTJCQ2p3dmVEcDRiWEJ0WlhSaFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvOFAzaHdZV05yWlhRZ1pXNWtQU0ozSWo4JTJCJTJGJTJCNEFEa0ZrYjJKbEFHU0FBQUFBQWYlMkZiQUlRQUNBWUdCZ1lHQ0FZR0NBd0lCd2dNRGdvSUNBb09FQTBORGcwTkVCRU1EQXdNREF3UkRBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBRUpDQWdKQ2drTENRa0xEZ3NOQ3c0UkRnNE9EaEVSREF3TURBd1JFUXdNREF3TURCRU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd00lMkY4QUFFUWdCUlFIQ0F3RWlBQUlSQVFNUkFmJTJGZEFBUUFIZiUyRkVBYUlBQUFBSEFRRUJBUUVBQUFBQUFBQUFBQVFGQXdJR0FRQUhDQWtLQ3dFQUFnSURBUUVCQVFFQUFBQUFBQUFBQVFBQ0F3UUZCZ2NJQ1FvTEVBQUNBUU1EQWdRQ0JnY0RCQUlHQW5NQkFnTVJCQUFGSVJJeFFWRUdFMkVpY1lFVU1wR2hCeFd4UWlQQlV0SGhNeFppOENSeWd2RWxRelJUa3FLeVkzUENOVVFuazZPek5oZFVaSFREMHVJSUpvTUpDaGdaaEpSRlJxUzBWdE5WS0JyeTQlMkZQRTFPVDBaWFdGbGFXMXhkWGw5V1oyaHBhbXRzYlc1dlkzUjFkbmQ0ZVhwN2ZIMSUyQmYzT0VoWWFIaUltS2k0eU5qbyUyQkNrNVNWbHBlWW1acWJuSjJlbjVLanBLV21wNmlwcXF1c3JhNnZvUkFBSUNBUUlEQlFVRUJRWUVDQU1EYlFFQUFoRURCQ0VTTVVFRlVSTmhJZ1p4Z1pFeW9iSHdGTUhSNFNOQ0ZWSmljdkV6SkRSRGdoYVNVeVdpWTdMQ0IzUFNOZUpFZ3hkVWt3Z0pDaGdaSmpaRkdpZGtkRlUzOHFPend5Z3AwJTJCUHpoSlNrdE1UVTVQUmxkWVdWcGJYRjFlWDFSbFptZG9hV3ByYkcxdWIyUjFkbmQ0ZVhwN2ZIMSUyQmYzT0VoWWFIaUltS2k0eU5qbyUyQkRsSldXbDVpWm1wdWNuWjZma3FPa3BhYW5xS21xcTZ5dHJxJTJCdiUyRmFBQXdEQVFBQ0VRTVJBRDhBNyUyRm16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG1ybEhJMnV0WG42V2x0bkZFU2IwUkZTcDQxV2pENXEzTENCYXNselpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOUR2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyRTJyajBMdXp2RjdQeGZ0VWY4QVhQTERuQzNYSTBld2RwT2tUSzRQMDhUJTJGQU1LMkVjMVRMTmdheG1FOXBGSUR5JTJCRUFuM0d4d1RnVjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14ViUyRiUyRjBlJTJGNXMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWVVlWnBmUjBhNGtwVUF4MTloNmk3NGI0WDY1Q2JqUjc2RlY1Rm9KS0tlNUMxR0lWTGREdUdodVhzMklLT1g0Z2ZzdkdkeCUyRnNrS3RraXlENmJjdEhIYlhnUEltT0M0cU9wWGo2RTFmZjRNbTROZHhrcGM3NzBCdk5telpGTHMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlMdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWb2tLQ1QwRyUyRjNaZ2Fpb05RZW1BTlp1aGFXTHlFMExsWTElMkJiR242c1dzcEE4UUElMkZaJTJGVWNWUldiTm14VjJiTm14VjJiTm14VjJOWlF3S25vZGo5T096WXF3RFQ0aWlQWnNhJTJGVkxtNXNqN0klMkY3NkwlMkJPVFhUcGpQWlFTdDlwa0FiNXI4SnlLWHFmVXZNT3BJUU9GeEZEZm9QOHFGdlRsJTJGNFE1SU5Ea3JGUEFmOEFkVWhJJTJGd0JWJTJGaUg4Y25MZUFQY3hITXBybXpac2d5ZG16WnNWZG16WnNWZG16WnNWZG16WXlXUklvMmtrWUtpaXJNZGdBTVZYNXNqVGVhR2wxQ3pzYlNBT0x1WDB3N2sxNEtDenlBRCUyQlVaSkJpcmViTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14ViUyRjlQdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWbzRDWFVGYTllMENiSlJXa3IlMkIwUldsTUhaRUo1V3RQTXR6RTUlMkJHWUpLbnlLMCUyRjRrdUVDMVplTTJJVzBva2pGVDhTN0glMkJ1TDRGWXo1Mm1NV24ydERUbGNwWDZGYkRIUjVlY0NIJTJCWmV2eXdsJTJGTU04ZEp0bjdMZEolMkJLdmdyeTljY3JPSjY5S1Z3OUU5R1M1czJiQWgyYk5teFYyYk5teFYyYk5teFZpM21pRlUxTFNieHZzU3RKWXpIJTJGSm5TaSUyRjhBRFlwb0V6TGN4cTFUNjhGR3IlMkZ2eUU4R3JnanpkQzBtaFhFc1klMkZlMnBTNWklMkYxb21EZjhSd3R0SlJIZHJjRGFOYmhaVkk2ZW5kSUclMkY0bWNuSGVKQ0R6REw4MmJOa0V1elpzMkt1elpzMkt1elpzMkt1cmtaODQzWmhzNGJWVFF6dlZxZnlydmczekhOUGIyVU1zTHRHQlBHSlNwSXFqRXFSVWI5Y2glMkJ2U1N2cDBKbGN2SkNMeU11eEpiNEpOdmklMkYxU3VFQlZ2a2FYOUwlMkJaYm04U3YxZlRiZjBZNiUyRjc4bFB4SCUyRmdGenBlUnZ5UGJXY1hseXl1YldCSVh1b3hKT1VHN3VLams1JTJGYU9TU294UE5YWnMyYkFyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGJTJGVTclMkZtelpzVlEyb3N5V003bzNGbFFrTU94R1B0WmhQQkhLQ0R5VUUwOGUlMkJNMUJlZGpjcjR4UFQlMkZnVGhWNWN2QkpicEdlcmdFZk1EY1lhMlBrcWZaczJiQXJzMmJOaXJzMmJOaXJzMmJOaXJzaGZuUkd0YjdUOVRYN0xjb0pEMnFEelN2M3ZrMHdsODFXRGFqb2R6REdLelJqMW9SMzVSJTJGRlQ2UnRoSE5YYVZjcktzVXRmdERpMzA0ZFp6N3lycVByUUNJbmNkTW5zRW5xUkslMkZjamY1NHlWalA1Z3d0SjVja2NEJTJCNW1payUyQml2SCUyRkFJM3dENVJuRXRwd3JXZ3c5ODNSR2J5MXFpcUtsWUdrQSUyRjR4JTJGdlAlMkJOY2hua2U1QklVR29QUSUyRlBFSkhKNlhHM0pGYnhBT1B4T0ExaVg3c1V3SWRtelpzVmRtelpzVmRtelpzVlVicUJicTJtdG0lMkJ6TWpSbjVNS1pETFA0ckMyVVZxOXFZajdTV3NoV24lMkJ0eE9UbklWRzR0dFd2ZE5haWlLN0Z4R0R0V0c2VGklMkZ3RHdNdVNoelJMa3klMkIxbEU5dkZNUDhBZGlLMzNnWXNjS3RCbURXaHRxJTJGSGJPeU1wNjhTZVNINVVPR3B5SjVwWWRlM21vV1BtVzVLekgwcElvMldOdDBBM1d2MHRzMkQ3M3pKNkZnenhxcVhwS3BIRzllRE14N0VZWGVkNDVWZUM0Z1BDZFl5cXVhMEk1cTVWZ092MmNBVzhzV28yUU1xaHd3b3lIY1Z5UUZoVk9MenZyTnJkZjZmRkhMRlg0a1ZlQkglMkJyMSUyRjRiSmxwJTJCdDJHcVdyWEZuSUN5S1dlSnRuVWdWM1hPUDY3cUZqYUZMSFVycHJlY3klMkJsWmFqeFBEbU4xam44RHY4QWElMkJ5JTJCSWFYcmNscmR0WjM0TnJmUjFVU29mZ2VvMkswNmMlMkY4QWdjQkNYciUyRmx2WFJyZG56azRyY29TSkZYWWZNYm5Eek9WJTJCVHI4MmVxQU9RSXBhQnE3QVYyciUyQk9kVHJpUlNFcDh6OFJvTjlJNUFXSlBWNUhZRDB5SHIlMkJHUWczTnRxMWxjTGF6eDNDaVp2aWlZT0t6UW85S2piN1l6b1dxUmV2cHQ1QU9za0VpajVsQ09tYzYwJTJCV0NLMGo5T05ZbzVJWXAlMkJFYWhRV0JlTmpSYWZFY01WVHZUYiUyQjgwZnlIWjNGdWdFOXZTT1JKQlVxUFZaVyUyQkVIdzN5VmFYZUMlMkZzb2J1bEdrWDQxSFFNTm1IJTJGQlp6QyUyQjFpVFRiYWRaVWtqdEpqemtRcVNLcU5tNWZzZE1QZnlyMSUyRlJkVDh2cmEyRTVONUM4a2wzYlNNVEtwa2N0eiUyQkw3U1A5cGVPQTdmRmtJa2drQ3dPZmt6N05sQTF5OERGMmJObXhWMmJFSkx5MWluanRwSlZXZWF2cFJFamszSGM4VjY0dmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOVh2JTJCYk5teFZwbERxVWJjTUtINUhJUG9raldzc3RxeCUyQksybFpQZjRXcGs1eUY2bkY5Ujh4c3dIR084UVNqJTJGQUZoOEQlMkZxcmtvYzZWbVNNSFVPT2pBRWZUanNBYVpNWGhNUlB4Um5ZZjVKNllQeUpWMmJObXhWMmJObXhWUXV6T3R1NzI5UFZVY2xCRmEwN1U5OERhZnFzRjZpOUVrSTZlUHl3d3lGNnZHMmk2b0pSVVdsNnhaQ1AySk9yciUyRnN2dExoRzZzMHlpSzRYNlpmaTRRSTdWYjlsdjVoJTJGWERIcmdWNWM4QjBMekxjMlElMkJHRjI5V0R3NFNmRiUyRndwJTJCSE9nNlpNSGk0ajJZZlRrWiUyRk1Hd3BGYWF6R0R5dG05R1lqJTJGQUgyNSUyQkVuJTJGQUZYJTJGQU9KNE44dVh3bGlpY25wczMwNUxtRlpEZXdyYzJkeGJ0MGxpZU52a3lsYzQ1JTJCWDEwVUNRekhqTEFURTRQJTJCUWVOYzZMNTVlNWkwSjU3V1ZvbmlrUm1aRFNxN2pmMnlCMk9wJTJGVllvcjIlMkZ3Qk5qa3RwQUdqdjdadlUlMkJJbm95OFZhbyUyRmE0NHhDUTlhczI1UlZCcUtuZkJHUmJ5OXJCRXNsamNJWTBhUSUyQmc1RkNDUUQ2Ymo5bHNsR0Fpa041czJiQXJzMmJHeU9JMGFSdWlBc2ZvRmNWUyUyQiUyRjFxMnNKbHR5clN5dHV5cCUyQnlEc0Mzend4QnFBZkhmSSUyRm9kbXQyejZwY2puSks1ZEFleFBUJTJGZ1JraHhWMmM3ODJtU3k4MldVZ05JZFVoTnM0UFRtbFhRJTJGd0RCRE9pWkF2ekxiNm5IcE9ybEZranM3bFdkRzl5dnhWRyUyRndpdUdKM1VwM1lUSkZyN29wJTJCQzh0MWxqSGp4b2R2OEFZdGtpeUhieHg2WGZLeCUyRmNYQmlsSjMlMkJBc1ZVVjhGUmx5WUE0WjgwRGtrUG1xM0V0bEhKU3BSJTJCSlBnSEJINjZaQnRJdWZxdDlOcDhwQUxIbkVwTzVwMW9NNlhxMFAxalRyaVBvZVBJZk5keG5MdFp0ckdabHVCY0czdkYlMkJGSll1SmZ4NDBJSXhISkt6emI1ZXQ5WnRaWXAxTHd5Z2NnUHRLeSUyRlprVCUyRktXdVJLS0NPQzZ0TkgxQ2JsY1dpSUxEVVdISDZ3ZzZ3eURlang5Rnc0c2ZPTWpFQlk1YmlIMUhnTHk4Vll1bE9mSlYlMkJ5MzhxNG5kSDlMbEwyMTlLNGlpbEhyV3pMeGxoSTZTZ0UxJTJGMlNuRktvMEN6eHkyOHpNcWNTenNwSVlCUGoySSUyRjFjZCUyRnl0blZaZE5RMkQxSSUyQkVTTW9QdyUyRnpNZnRkTUcyMFRTUXl5YmxtamVuem9jNFRZNmxkNmRkeUt3TVVzYkZab0hxTndkMUtuR1hSWHM5bjUlMkZ2N2xnOThHbFdoTWp3azFBJTJGbTRrJTJGRjdqRFN3U1BVTFRUSkkzUEdCcGhHTndHNE9IVlclMkJnbk9OWCUyQnNXRnBERlBhU1NKY1RFU0czVGNSbGYydVJLJTJGYXpxJTJCa1IzYWVUN2UlMkJqblg2eW9XOGliaHQlMkI5aTlUZyUyQiUyRlE5OFFWWkhxc3R1dG93dVNQU2RTcFY5MUlQVld6aWYxaTk4dCUyQlo3bTQwRmpiU1dVck5DcUVta2V4NEVIN2FjVDlsdjJjNmxvbm1iVHZNVVRXZHdnaXVtV2t0ckxRaGdlNkg5b2Y2dVJMemQ1WnVyRFZQOFEyS2V0WUZVVzdqWGVTS2klMkJtMGhIN1VaSDdYN09DWTRnMllNMHNNcmp2ZXhCNVNIY1hzbmtQejNZJTJCY2RQcUtRNmxBQjlidGElMkY4bEk2OVkyJTJGNFhKZURYUEpsdlBlNkpxTWVxNk5NWUx1RTg0MlRvNm50VG95dXYyayUyRmF6MEo1RTglMkIySG5HeUkydDlWZ0ElMkJ0MlpQMGVwSCUyRk5FZiUyQkV5RVNlVXVmZjN0bWJGQXg4YkI5SDhVZjRzWjglMkY2UDgyVE1NTE5iMWlEUnJRM0VwQmtrUEMzajdzNSUyRndDTlYlMkIwJTJCR1ZjNG41bTh5ZnBuekpjc3IlMkY2SFlzTGUyMzJQQnYzajAlMkZ5MyUyQkglMkZZNUp4a0xvdXJYMTc1JTJGdGIyOG1hU1pybG9xc2RsUTFUZ28lMkZaVURPNzU1JTJCOHV4bHZQY01JNmk2TEFlMnpaNkJ3bFM3Tm16WUZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZmJTJGVzclMkZtelpzVmRrYjgzVzUlMkJyVzElMkJnJTJCSzFrQWMlMkY1RCUyRkNmJTJCRzQ1Sk1DNmphcmUyRnhhRWYzcU1vJTJCZFBoJTJGNGJDTmlxVjZWT09jVFYlMkJHUmVCMzclMkZhWDlXSG95RmFKTXoyM0JxaVdFN2p1Q2glMkZzeWFSc0hSWEhSZ0NQcHd5NTJnTHMyYk5rVXV6WnMyS3V3dTFyUzQ5VzA2V3piNFhJNVF2OEF5dXU2bkRITWVtS3ZPTkUxS1dHVnJHN3JIUEN4UmdlcXNwcGs3c2IwWEM4VzJsVWJqeEhpTWhubm5USHRMbVBYclpmZ2FrZDFUc1I5aVElMkZQN0xZdG9tcSUyRldJMElha3lib2Y0SDU1TG1GWmRxTmxGcU5qY1dNd3FrNkZEOHo5ayUyRlFjNTE1WHVaYlc0bDAlMkI1JTJCR1dGekU2biUyQlpUVE9sVzA2M0VRa1hZOUdYd1Bobk8lMkZOc1M2VDVxdGJvZkJIcWFuaWV4bWklMkIydiUyQnNVNHYlMkZsZkZnSGNyUFRGYmFuWk5iM2NheXd5QXBMRTNRajN6anV0d1clMkZsanpCYzZQcDZmVjlKSHBzTE5TU2dSMUhJb3JWM1Z2aXpxMmpYUWslMkJBbmRsQkE5eG5OdnpSaVdQekpCSlducjJnSlAlMkZHTnl2OEFIQWRpa0ozWUdmMG81cFpESWJvU0QxR0pKOWFBZ2g2JTJGNWFVem9Gbk45WXRZWjZnbVJGWTA2VkkzemxYayUyRlZJNWJpMmhubEJnZEJ1eEZGYWhoZnIwclNOc25IbFhVNEpJNU5KYVN0MWF2SVFtJTJCOFJhcXVEMEklMkJMamtwYmdJWkptelpzaXJzRGFnQzFqY3F2VXhPQiUyRndKd1RqWFVNckszMldCQiUyQldLcGZvZkU2WGI4ZjVkJTJGbmhqa01QbXZSJTJGS2xySkJxa3hCU1ZrakMwUElEcFRmSTE1cyUyRk1OYnUzamJSNXBsc1pWcDY5c3dSaTlOMGVTak1uSCUyQlJjVnBtNjY5Y1dXdFhHbmF0d2pnS21hMnVQc2oweCUyRk5YdyUyRmF5T2ZtTHIlMkJoWDNsJTJCUFRZcmtYTSUyQnBHdG0xdVBVVWNlWDd5Ung4S0x0eCUyRjFzNXhvTiUyRmVmcFZyNkM4bXVWVmZVdUxPOGtNckVJZVRlbTdmYVJrNUl5NUZkVHVaOUIxNjl0ckdadnFrYzVlRkQ4U21KenpVY1R0c3JjZVdIelRUM2ZSSnYwcDVVWnZ0T1lZcmdDdSUyRkpWNFAlMkZ3QU5IblByajgzdk0ybFg5enBXb0JKWUluYUo1NDBwT2kxJTJCR1JRRHhmNGNsbjVaM3FUMnN0aldySzBpZXhFZ0U2MCUyRjJYTE9VZm1IWU5aZVpiaFdQOTRBeW4lMkZWJTJCRCUyRmpWY2xMbGJFZFFuOTU1cTF3VGlVM2h1TGFkZVFDc2ZTbGpPOVZOZXYlMkZBQTBiWUh1YjFaN1Y1eVdraEh4cGNWSEpOd0dpdVA4QUtTdFZrJTJGYnlHYWZxTFF4eWFmTzVTMmxQSldVQW1HUSUyRjd1aUI4ZjhBZDBYJTJCN0YlMkZ5OEN0ZDZqcGwzTGIzdiUyQmtRVHB4bmlxVERjUW43TG9SJTJGd1ViJTJGQUxEWkN5eWVrV2w5WnlhRkxQZWxaR04ydHFERXRaSkhlbkVzNjdja3BWWHdxMWJVN0cxaUtXdnF0Y0NSNGJra2hGWXglMkZDSFhodnZYNDhDJTJCVTdIMVNiSzNrOVd5YTVodjRIY2hTQkY4RnhCTDJXZU9KMWslMkY0czlQNGN1JTJGMGolMkZjMUZwaG1GeFBMZU9oWkJ4QWlMOGp0NDAlMkZhNVllZ1Y2UHBydkxwY0U4c2ZwVE5iaDNRVm9HSzEyemx1b1EyUG5aaWg0MmZtV0lWdDV6OE1kNHE5STVQNUoxN1oyQThZcldWbCUyQkVSb2FEd29OdnVwbkx0YjAyTHpSRWRSMGhCYmE3YlZlNHRFUEZad3ByNnNIJTJGQUJiJTJGQUpPU2tnUE5McUdhRzdlM3Y0Mml1b1R3bGljVUlLOWlNNzU1S25Hb2VUN1pYNm0xQ0glMkZZU05DZiUyQkZPY3RudUlmTmtTV2VxRVd1dTI0OU9DOGNjZlc0N2VsY2QlMkJmJTJCVm5RJTJGeXlTNXQ5RGswNjdqTVZ6YVNYTUxLM2hSSmxwNHI5cmprUWw1UGJhbGNhUmQlMkJsSTdQYnd5c0k1bE5KSWlyVSUyQkglMkZtbk91ZVYlMkZPVWVvJTJCblk2aElwdVdYOXhQdHduVSUyRmh6JTJGblRPUGVZNHpZJTJCWU5UZ3BWQmNTVlE5Q3JIa1AxNEdzYjlyRmdSV1N6WTFLMSUyQktOaCUyQjBwJTJGWmNZMlFkbGV2JTJCWiUyRkxLeEsxOXBjZFlCVXpXcWRZeDFMd2olMkJUJTJCYVA4QVolMkZaeUhXOXhlNlpmUTZwcGs3UVhzQkRSVElldnNSJTJCMHAlMkZseVklMkJVUE5SMUtKTEs1bEQzS3JXM202ZXNnNjdmNzlUOXBNRCUyQlp0Q2pUbnFWaWxJVyUyQktlRlJzaFBXVkFQMlA5JTJCSiUyQnprWlJCM0RQRmxsamx4UlB6NUVkeDhtY3clMkZtM2FYdmt6VUx5VUMzMTIyakVUMm9OQThraDlOWllUJTJGSnZ6YiUyQlRPWmFiSWhuV2tnYU9RY3d4TzU3NyUyRjVmamhLSVluZG9admdhVUQwNXY1U04xSiUyRnlHNllJMFJaNHRTJTJCb3lLUVMxSFR3WUhzZmZBTHJkT1F3TSUyQkxHT0VIZmh1NlBXdko2ZjVGc2ZyWG5xVzhLJTJGREJFWkQ0Y21BVmYxWjJmT1NlU0xtZlQ5UnJIRVdsdkRTWmFWYWdOUjAlMkJ6dG5XOG1Xc3V6WnMyQkRzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5ZnYlMkJiTm14VjJZNXNvNHF3NldMOUhlWUxpTHBGY1VuakhRZkg5ciUyRmh1V1NiVG5CZ01YZUppdjBINGwlMkZBNFQlMkJhNGZUVzAxRlJ2REo2Y2hBJTJGWWZwWDVNTUdhWGNCbUh4YlNyc0NkaTYlMkYyZjhSeVozajdrZFU0elp6clRmTzJxUWEzZWFIcmtheDZoYXV4JTJCcjlGa2dKJTJGZFQyNzkwWlAlMkJHeWRXV29XdCUyQm5LM2VyQWZIR2RtWDVya1NFb3ZObTJ5aVFBU1RRRHFjQ3Q1c0w1ZFowNktvOVlTTU5xUkF2OEFpdTJJdjVpMHFKZWNzcktvJTJGd0FrayUyRmN0VGhvOXlvNjlodGJpMmUydkFwZ21IQjFjZ0ExJTJCZmZPWVglMkJuWGZsWFVnaEplemtOYmFieEg4akglMkJkY1BQTjgybDY1YjJqMjEzRE45V2RtbXRlZkNSa2RlSmFOU1ZiMUklMkZ0WVhXTThjVmsyamF2TTk1cFV2OXpjUHZMQiUyRkkzTHZ3d2hJVDJ4MTJLQ0JyeGp5alJTMDZqcnhHNVlEJTJCWmNyenpwa1htanloTFBwekNTYUZWdjhBVFpvenVYakhQNEdIJTJCJTJGRTVKa1VtanU5QnVqYVRzSllISEtDNEc2U3huOXIlMkZBSnF3Skg1ZzFmeWpEYXcyS3JjYUUwelNORTI3UmlRbXR1WFBTSjYlMkZ1VyUyRllreEk2aFVnOGlhOXF1bGF0SGUzczBrOERneEdLWnl3QmslMkJ5MyUyQlRrbiUyRk42M2E4dHRHMWEzckhMJTJCOWhJQiUyQklkR0slMkY4QUJBNUROYlMwdEwlMkI0a3NKT2VuekVUV3JqWWlPVDRnakQ5bDRXcWpMJTJGQUpPVFRVOVh0TmM4cjZkRFA4RThyYzRpU1A3MVJ3a1RmY1AlMkZBTHNYJTJCZmxncTA5ekZ2S2VvVE13VjJOZUNzQjBCYU5xZjhhNU45WnU1OUs4M1cycFdiJTJCbjljakJvMjRaWFVOeEklMkYxbHlDV3NMNmZOYjNMTHhpZDI0dFNnSU5BOVB1eWI2N3BkJTJGcjJrYVBjNmJ4TjViOG93V1lLQVlXJTJCR3BQOEFrNFJ5UVU4dWZPRjdKTEQ5WFJMYUFqOTZaUGlZdjRBOUFuJTJGRFlPZno5b0VidEEwa2pYU3FHJTJCcnFoNU50VSUyQmtXNGlRTCUyRms1eUslMkZpdU5hZ2pFY3BUVTdSajZZcWFTQWJ0RzMlMkZGaW40b20lMkZhJTJCeGhYY0dlV3hsRGdwUGJmdlVGYVBES3BGWGlJJTJGWWslMkZrJTJGbXdGWHIwbjVoZlhCSkZwVnR4bUM4NGpPYTgxJTJGYUtxdjdTZnk1R0w3ekpxMnJ3WEZocUY0MEFsV2lTUWZBRVBWVyUyQkg3U2Z6JTJGd0NSa1RsMWRMVzN0N3hpODEwOEMzZzlFQkFyQ25JOGp0VnZ0TlJjUjF6elRkSmNRdll3Ulc3eTI4ZHd6RmZVYmxJdkkwNWZBbyUyRjJPR3hTdDN6U1c5TFBYSVRNbENqaXV6b2ZzeVJ0Mllmc1BrZDBpYWJUdFFrc3AxWnJhNFU4NFg2U0olMkJ3NCUyRndBb0Q3RWk1ZHpxVjdMRkN0N0tablZBWSUyQlJxeWc5YWolMkJYJTJCVEpkb3V1YUhybHRiMlBtQ05mcmtLbU8ydktjVCUyRmtnc1AydjVjanRhcGZvMEp0JTJGTWxsRkdIbHRadlZlSzRwdHdXTmk2eVUlMkJ6SXZSbHdtMW1VYXJwTnRKSEVXdXRPa3VJYmgwRlNiZmtHaVoyJTJGYjRNeEglMkJwazZ1Wk5NOHNhZGR5d1N0Tks2MDV0c0tuWWNGJTJGbWJPWnkzczJuV2FMRSUyRkc0ZTQlMkJzSzQzSEVMeG93T3pLJTJGTDRseDVmRldiJTJGbHByUDFUV0xRTWFMTUZSaCUyRmxSdHhyJTJGd0xZbiUyQmZOakxwJTJCcDJXcHdnaFdMeHVmMlNHb1JYJTJGQUlESTlwZW8ya010amZXUU1VaTNKTTl1MjRqNXJUNEQlMkIxRzVxeWZ5Zll6cCUyRndDY2RpbXIlMkJVcmElMkZHJTJGd3BJU09vSXBYSkRjSVBONEhEY1IzU2NsMkk2cWVvT0dOdmNReXclMkZvJTJCJTJGSldHcE52UDFhQnolMkIwUEdGdjhBZGtmJTJCelhJeFNheW0yTkNPaDdNTU5ZTGhMbE9TN0g5cGZBNUZVMzB2VU5ROHVhcWpJcXNhcUhpTzhVc1o2RWVLc3JmQSUyQlMzeVVyNnA1aXVkVGwyUzFSdlJUY2hUS2VDZ1YlMkZsVGxrT3N2VXZlT244VmtkYXRhdXhveU4lMkZJRCUyQjByJTJGd0FtVGZ5WUhzcm5UZFBhc2MxJTJGTmN6WE1aQXJ3aFQwNGczJTJGQUQwNVlqbWw2RmRpdGxjbXUlMkZwdlglMkZnVG5LNWJTNHNwMW1EdEZJRDZrTGlvUFhaZ2M2MU5HVEJOSDRvMVBwVWpJcE5ieVgwVWx2Y3clMkZWOVRzdDdpMklxSFduOTlFUDJrWmY3eEYlMkYxOG5NWDFwQU5NUjFUVFlmTWtSdVlZbHQlMkZNRVk1RWZZVzdVZnRMJTJGd0FYakRmOHUlMkZNRnpNOG1uWDZNSkxXUkZrTWg0eWlxdEdVWVUlMkZaUDgySXpXJTJGSDREVlFHJTJGZHVQdFJQMUZHJTJGbGI5bHNHNlpKREpmUGN2R0k5V0NvSlp3UGhtUkdIRjJYJTJGZmk0QVAycGVhZm1CRThIbXE4TGdBVENPVmFlQlVMJTJCdGNqYXVVUGlwNnFlJTJCZEo4MngyOTNQYjJHdHlMOVptV1JvTDVRQVVaWkdRSzQ3cDluT2QzOWhkYVpjdGFYU2NYWGRTTjFZSG95bnVwd0ZDTDB6VVgweTRTVkdmNnVXRHF5YlBHNDZPbiUyQld2JTJGQUE2NTJuUnRZJTJGVGRxSmJmakxkcW5LNGdqcFNWZW4xaUJmNUclMkZ3QjNSZjdxZk9DeHljYXF3cWpmYUg4Y2slMkZrJTJCNjFLMTFBQzFrWllJVDZnbUIlMkJ4eTJvUCUyQk1pJTJGQzZmN0xFR2xaQ2JCciUyQiUyQnUlMkZxcXBCQ2pQNmNidHhId240bGpyWCUyRmdja09qMkVNY0M2bEs2eVRSS1lta0lvWWw2Z0U5eFQ3TDVIaGNUSnFNMWpKQ0VqalFTUXNLN3FUM3JnaSUyRnVKN1BUREtRMzFTNWYwM1pQaTNTcmZHUDVSaUtHNmJlaiUyQlFQekIwQ0clMkJ1Tkh2QjlWZVp4OVd2WktCWDdjQ2YyUDhqT3ZnaGdHVTFCM0JIZlBIYVFyZnVFdDNESGtBSmFrS2hQOEFPMzdBJTJCZWRYOGklMkJZUE9lbjZkTnAycUs1dDRKRmpzNUhDbHlvTkpmVGRpZVVhTDhTJTJGd0RDWkVjUk5FYyUyQnJmT09LV01UZ2VHVWFFb0hmaSUyRnBSUDhBdW50MkFiM1VvcldxQWM1UUs4ZWdIek9QaHVvVFlyZGVzSllnbkpwdGdEVHFkdSUyRnRrVDFDOVhuTFBJd29makxkdUo2ZmhrZ0xjWXNpMHZWUmZTU1JTVVdSZDFVZUdHZ3lOJTJCVnJDU2ttclhLbFhuSEMzUnR1TVhYbFQlMkJhVEpLTVRWN0pkbXpac0N1elpzMkt1elpzMkt1elpzMkt2JTJGOUR2JTJCYk5teFYyYk5teFZCNnJhZlh0T3VMWHZJaDRId1liciUyQk9SYlJMJTJCc01UTWFTUXNPU25yc2VMWk5EbklkZlhYdFA4elh0blpHQzJ0SldFc1V6OHBINHlBRThZMTRyczNKZmliSlJQTUt5ZjhBTVh5ZTNtS3loMUxUSCUyQnJhMXB4OVMwdWxGU1Y2bU53UHRSbkliNWU4d1hsdyUyRndDajlWUjlOMXUxMlBHb0Q5dlVnZnBKRyUyRjdVZWROOHVhcGNYc0gxZTdDJTJCckFpJTJGdlY2T1BzMUslMkZzdHRnTHpQNVlzciUyQjNOekhGeG1qUE1sTmolMkZyTFRkV0h0aU50bFU5STgyc3hhMTFsQXNzZjJibU1mQTlQRmYyRyUyRjRYSXQ1MDF5ODFTeWtFRWpSUVJNR0VhTVY1TDAlMkJLbjJzcTRrZTNqOU80YXN1eUxOU25NZHVYJTJCViUyRnhMQ2ZWWiUyRlMwdThjRGtWaFloZkdneG9kR1FERFpQTWN1bHVzVHpwd3J5TVQ3bW5laCUyQjB1VFZOTDFlJTJCc29iMXRMbW10SmxFa2JGVzVGR0ZSOE5mVXppMmlRJTJGWE5YdExqVUFYV2U2aEUzTCUyQlF5S0hHJTJGYmpucXp6UDVvazBIMGJheGdXVnlvZGk1SVJVNktCeDc0QVNyek96c2ZMMXRjSDY5cHBNdGR4TTBoNCUyRjg4M09TMkdMUzcyMzlLMXBHcEd3aiUyQkVyJTJGQUxIcGhWY2VjQmN5cmM2dkJGZGFiTCUyQjdsVjBVUGJ0MTJLRG54JTJGbFlZR3ZyV0t3UDFuVHAza2lyc1QwQnBXZ2NkZjhBWkRKZyUyRkZqU2FuU2I4eEMydXJzWHRwRzVrdDdka1ZSR2FVNGclMkZFVHklMkZ3QmJJemM2MHhTZXlsc2dwaERKZWFmTnRJWSUyQm5xUkVmQ3lnWWNXUG1WMTR4M3FrcVFEekFvNFglMkJZciUyQjBNRTZoJTJCaWRaWkltak05MEZMUXpRajQwQkZObjIlMkIxWDdEWWtkMnlpJTJCckhOSWg4dVhiTHA3eUxKZFRvWmJaSkRYMUVVME5PWHhDZUw5dGYlMkJKNFBoYlRMeWE1OHNYcXF0M0VvS2xWOU1Tb1JVTW44c3NmN1hIJTJGWHlEJTJCY2ZLRnpvV25SYXRGcVVVVSUyQm5TR1NHQXNCY0ZYWmFGZUhKVlpEdTJIT24zU2VlOUt0MSUyQnNDeDh4MnklMkJwYVhhYkIyVHhIOHBQMjElMkZad0FudTNWUXVWMUNDMmlXOWN4JTJGd0NrUzI4a010QTVkS0xITDElMkIwMFRKeVpQaGslMkIxblMlMkZLTjU5WjBHU05ubzZ5STZlMVY0diUyRnd5NXo5cHY4WVdqNkhyY2Y2UDgzNkVXbWlpSFNmaXYyb3glMkIya3dIN1AyZnRMazI4dXhyYmVYWUxoWVhWN2dNenhrRTBJcVBpcU5xJTJGeTRnYiUyQlNrN1BOZFgxbSUyQkhtcWF5dEolMkZUdFRkeCUyRkJHb1N1NnN3WnFjajhZYkNuUm1NOTdkckt4S1hjc2x1N3RYYjElMkJTQnElMkZ3Q1N6Wks5YzA2eHVOVXV0U3RrQmxzNUlGa0FJQU1vSHFVVWZ6TlJrYkNQVzVYczcwclpjVnRMMCUyQnRDb0FGVmMxb0slMkZ3QXJuaTJSSVNoZEQwclU5WjBnMlVOVzFEUjVKTEclMkJpclJsUXVYaG1wMVpQNzJNJTJGd0NwaDc1ZzBLMnNyYTIxRzhjaDViYUdKVXB0NnlBUnV2TDZPV0VRazFlSnJxOXM1NVlMeEJ6dUdoSkVqcjNMS3Z4U3F2N1dJU2FucTJvUVJYR3J5dmQyTXRWaHVTUThhTlFjaDhPeU5qc3FFbGhLMWhiY3IlMkZjdjNLJTJGeVYlMkZ5Y1JTUUJtVWlpZnNmUU02RnBmbGpTYnJSMG1DeTNFakRsREl6TjlzR25waFUlMkZaJTJGbGJJcnFubCUyRjZqTTNDYjFWUnFPb1U4MDc4WG9PSFBJU0lpUUNkNWNrZ0UzdHlTNFN0SzZ4U3klMkZESiUyQjdIcXNlTyUyRllWdzBXMnRoYXRwMTBoZTJiN1lIMjFjZlpsalA4NmY4QUQlMkZZeE80dGJPNHNvNEk3WlV2RzVMcGwzUHNzcHJVd3MzOTJKRCUyRnV0JTJGd0NiQU9oNnNMdVU2VnFZTUY0aEtSdTJ4NURyRklEMFlZN3JzaDR0TW4wNiUyRmtzcGp6am5pYVMxblFmRElFJTJCSldYd2RhZkV2N09kMHVnbm1MOHRtWWlwV0VPQjFvR1dwJTJGd0NINVp5NGhvVDlXdVU1QlR6ajdGSHAlMkZlSWUzJTJCWCUyRkFEcm5SJTJGeXN2UmZhSGVhSkl3WjRSSkdvOFFEelElMkY4QUF5NU9QVkJmUE54YnBNcGlmWXFhQnU0SXdGWVdseDlmRUlKVTdsbUg3UyUyRjgzWko5ZTB4N0s5dW5SZzhhek1rb0hXSnlTVlIlMkY5WUg0VyUyQnpqJTJGS3R2RmRheEJETFFLekFWTzI0M0clMkY4QXJZUEpVWGIyTnZEWnRkeVd4ZTNCNG1lQ1ElMkJ0RzM3SmtqYjlsYWZhWEhSWGw5cTJyNmV0bldKN1l4eDI4aCUyQjFVTnlNanQlMkZsSDRteVg2bHAxcG9QbTU3Q0lGTEc4amlrQ3NLaXNxcVhXbmNjMiUyQnpoTFpXME9tMzVoQ3VMaUNlU2dJSEZZNjdLVDlybDRZYVY2M0l3TVZTYWtnMXB0MjdlR1J1enZyVFdJTGRZYm5sY0lXWFNkUWM4VzVwWGxwOTElMkZMSVA5MU0lMkY5NG1HOXRjZlczQVExNHhnc1BINGM0WnAlMkJ0ejZIcU4ycko2MW5OSXkzbG9UVGtBNTR5SWY5MXpSJTJGYWlseVJOVWlucFYwaVhxeXl4dyUyQmpkVzVNZCUyRmFOMWlQZHFmNzRmOEE1SnRrYTFaWjRMV1l4c3lTS3BhQ1JUOFFJJTJCSXhrajJIdzVLTGU2JTJGVHNVRiUyRnAxd3NtclJSazJsMFFBTDZGZnQyOTBnJTJGdTd1UDdMbzM5NWhGcXVxYUw5WFptbVdDUnd5U1dUZ3M4TWdHNk9vJTJGWTVmWmJBVWhDJTJCWjlKc2ZNbDFTS1lXJTJCcXlRUlQyRE1mM1V2SmVUd3Q0TTUlMkJKY2hLeXJPcjZENWdRd1RRRXBGSyUyRndEZVF2OEF5biUyQlpEayUyQjFHeWoxZXcwU2FDNGdTNW50bUN0WDBFTFF0UUFNJTJGRWN2NUZ3djFiUXhyJTJCbmhyNG9tczJ5bVA2eHVDU3RTSWJvZjZ2OEFkellPYUdBUSUyQlhkVG0xTmRMamo1U044UWtHNkZPdnFCdSUyQlRqVHJTMnNiWkxDTWNWVW1rcEZHTG43UmYlMkZBRnYlMkJGeFRUbWUxMDJEVHVJTEl3WnBLa3NXJTJCenhXdFc0MSUyRlp5VTJYbFc0MUhoY2FoeXRPUUpaVkhLYVh3JTJGZCUyRjdyWSUyRnp2aUFxUTIxbGRYdHl0ckRHMGs1MjRxS21uajhzTzczNnJvTm1OSWx0ZlZ2N2hGZWFNbmtVcVR3cHhOQTJTMk1hVDVldFM5dzZXZHRFdngxYjQyQTdTeW1oJTJGMkM1elR6YiUyQlp1bjNzd09qYWNHVkt3cnFNZ29hamVpSlNyJTJGT1REVmRWWlBZYTNwT2olMkJXN3UzMXVLS3p1WkdQMWRlUFAxSXoxVW92eHRKJTJGbFlVJTJGbCUyRjVoT3R5UyUyQldybGlzMUdtMHB5ZmlSNCUyRmk5S3Y3U3VtY3J2TlludTVEY1hIN3lUb2FtcmZTZjZZTDhyYXRMWiUyQlp0SnZvVDZid1hNYkVqdUN3Vmg4dUphdVBGdUZlJTJCeCUyQllKNE5NYXdRaU9GenlaT2xEWDRoJTJGd1F5UWVWdEFuMUJZOVIxUU45V1UxdG9HJTJGYTNxR1llR0UzbG5STFBWZk0xOUxkQXlXa1R0Y1c4YTd4T0dhcTFrR3o3ayUyRkFNNm1vQUFDaWdBMkF4Sjdsb2puNzJ3QU5nS0FiREx6WnNpcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlIdiUyQmJObXhWMmJObXhWMlF6ejNwM1A2cnFLYkZLd3l0JTJGa240bEpQc2VXVFBPVmZuWDVnbXN0TnRkQnRuTWJhanlrdVhIWDBZeVBoJTJGMmIlMkZ3REVjYnJmbTI0TVJ6Wkk0NDdHUjU5dzZwTWZOeVdsN0VkRDFLTTNDcDZkd29LbGRqJTJCMXpIRSUyRlJrbzByejFyVXR6OVN2TGUybG0ySHA4akM3QmhXcVY1eHZVYiUyRkRubjAxalBFaW44cEhnY2tlbVhtc1RhSGN4QU53MDVvNTdPN0lJS3hsaUpZbGwlMkZhUlQlMkI4NCUyRnNOa0laaElrU2pSRGw2enMlMkZ3SWpKQ1hGSGtiNWdwMyUyQmEyciUyQmJkUHVFdllMVmJMUnBpRkwyN2MyRXZXa2owJTJGZDh2MlZwa0dzZk4ycDNLcmEzVjJYaWNnRXNRZVFKM3FTTnM3ZCUyQmtkTzFyU2JLdzFMaE4lMkJsYlJYVkpLRlp5cThaVjMlMkYzWUdITE9FZWN2S0Z4NVR2VExEeW0waWR2M0V2ZEclMkZ3Qjl5ZjVhJTJGc3QlMkIzbHBIVU92c3VhNGlOd2JXQ3J1SEslMkZCMHFOOWowem95JTJCYXJXNDhyMk9xM2wxTGUyc1NpenVHa3FrNnpnVVZYTWRhOEYlMkZ3Q0RUT08yTTAxcklzMFhDUlE0a0hxQ3FHblpsNzROZ2tUbE1xU09JWnBQVk5yWGpHRzhRdmZqMndYelN5cXoxZU8lMkZ0TlNqUU04c1Z1YmhGYmJrSXBQaUklMkJVUjVZY2EzcTE3SWRQbXRaMmpzN3l6dHJpT05OaHlBS1NjaVB0TUpVZklaYVhEV0wlMkJyYTBqY3EwWllBVjR5QXE2bXY4eW5KZjVZZXgxUFJqcFVzZk8lMkYwcG51TEpXTlBVZ2tOWjRsJTJGbTlOaDZ2SCUyQlZwTVJhMnV2QmNYZWoyR3AyclNDNXRKSmJPWmtxVzR2JTJCJTJGZ1klMkJ4JTJGZUpodEJCNXNPaTMxM2JvTGE5aWhNbG8zRUI1Q2xHa1VMeSUyQjE2WEprNHJobFphckJGQWJabGp0clM1VGclMkZvSUY0ZnlPVDFKamJDMUwlMkJiU2Jvd3lNd3U0V3J6SnJ5WDloMVBRcHh3JTJGRldGWE51dDlQQjZzclM2ZnJscUk0SlpISiUyQnIzMGJDc2JPZjVwaHgzJTJGQU4xVCUyRndDUmdQUWJ0cmVWckVGclc4Z2ZuRFUwZEpVUEYwOXVuSEQlMkZBRmV5Z2pqdmJpMmhhVFFicHhjWGxwSHZMcDl4OW42eENsZmp0alhpMVAyUDNiJTJGR3NlRTk5b2w5cXR5aklLYW1ZbGt0YjZNbjBMNVFLSjhacDZkM3glMkJINHZ0OE9EJTJGdmNpVFhQWmFaJTJCa2RwNSUyQmd0MTlZYWQ1cDAlMkZlMHZVMlk4VDBOUGlhTSUyRnRKJTJGdXZPajZsY0d5c0ZhUmxZeEpXVWpma1VYazN6NU1NNXAlMkJWMmwzVTJwUGRhbEZISzFzT0x5cVF4U1phRk9kRFdPVDdXJTJGN2VUVHpLOFVkbGN4UkVoWEJUZiUyQmR6V2clMkI3SnhOamk3MEhuVHolMkI1MUdYeXJyRnhhYXBENjluZmNScVNmdHF4SEwxb2olMkZPalBqdFEwR05ZQ2ZyQ1hXaTNRTXRsZWxoeWprWWJGZmR2c3l4NE04N1d5NnpxZW1UcTRYOUt3UW5tZWdrSyUyQm1mJTJCU2k1RzlNMVBWZkxVdDNvZDNDSklHREVRUzdpS1VENFpvdjglMkZqeUVycXJydVBOa0s1OCUyRkpON1N4MCUyQjBzRGUzazBrOXhBNkpCSkFDR3F3UEhpS3A4UzhmdHMyRjBtckRTM251YlBUaEg2WkxhNVljUXNuQnZzM2tTc0NuSmVYSnVLJTJGQiUyRndBWW13USUyRnJYZGpFc1FSaXpodmpLQ3JVcDhJZjR1VyUyRndDeXVLM0ZzODkzcDFuZXpmVmRlRENPeG1IRmk4WkglMkI4OXdTZUJqUDJZdVglMkJWRmlZZ2dBNzBQbXQ5UXpmeWpkeFhlaVBlYVkzck5ZdDlaamRLVWtnUDJneWo3TDhmdEwlMkZQZ1R6MnR1TGRKSVQ2Y04xSkZjeHpKMlU3U2IlMkZzJTJGYTVCc0tmTEVNdmxQWGJ5MnNKSTQwdUYlMkYwaXpWdVVjYjA1bjB6M2drVGx3JTJGMzIzN3ZIZWRkWE41cEVNZG5ibU95czRCRmN5MHFEY0Y2R0phJTJGd0RGYWNteVg4UHUyUjFRT2k2WXVwYWJkMkY3OGRqNnhqTFZGVWxweVNhSHdrVWY3RjAlMkJESXJydmw2ZHI0Mk4wZU90UklIczdsZGt2NEI5aWpmOHRLZ2ZCJTJGUCUyRkFIWDI4bVBsdXliMFZzN09kVEw2U1NSZW9LOCUyRlRacU4lMkZycU9QTCUyRkp3VHFkaEZyOW0xbHFVaGpuaGNtMnV2OEFkbHROJTJGTUtmN3BiOXRQOEFacmpWaFdIYUhyRVdxeGpUYjlndDlHS1F5dHNYcHR4TmYyc2wzNWQzSjBqem5KYkNvanVRbFIyNmNUJTJCdGM1NXF0aGR5WGN5eUo5WDh3V2Z4M0VTYkM2VWJyY3dmelM4ZmpmaiUyRkFIeWZ2UHQ4OE4lMkZLdXEzRjNxMWhxQklFeWM0cFdadUNrb0F3Y2s5TUE1MFZQSlYlMkZNcTJrMFR6bmZDSlFVbVBKb20lMkJ6SkclMkZ4Y1c5dCUyRndEWTRRNmNJTGE2WlkyZUtSd3NsdjZnb2FEZmp5JTJGYUs0ZiUyRkFKbGVhZE04MGE4dDFwY1o5R0NKWW11RzJNckQ3VEFmc3F2MlYlMkZtd3IwV3l1TlhVdyUyRlZ4Y2kxJTJCS0x0JTJGdzIzd3JnNnFHVmFucjF2cksydDNjc0lyeTFhRVNCanhKRVlZT1FmZjRjanZtM3pMYnBaWExXVEdDNXZyJTJGd0Nzd1JqZmpCR29DOHlmaSUyQklqQ1BYMnZOTXUlMkZxWkRSTkdLU0FnVXF4cWdxS3J1RiUyQkg0c2pzeVBQSVpaU1hKN2tuZkcxZTklMkZseHJkdDVrc2JxZFNGdTdlTUxjVzVPNCUyQkUwY1Y2eHZuRjc1dVZ6Y2IxNHl5Qlc3JTJGYU8yS2VTOVJ1dEM4eVdkN0RNWUxmbjZkM0wlMkJ4NkQ3U0xKN1loZGtOZDNVa1JEUlNYRXJ4TURVRkdjbFQ5SXduZEN0cFdyejZaTjhNc2tjRHNHZG9qeGtqY2ZabWlwJTJCMnY4QUwlMkIzaVdveVNmWGJpSFVtRnkxNGZyS1hxSDRuTDE0ekslMkZWdVg3Y2JZRWVKV0RQUVZwVTBQajB4NnlxTEwwcEpVVzR0WEUxbzVPOVNhU1JiZVAyOENvYjFaMVQ2dlBLenhqZU5TU1FLOWFWJTJCem5YTGZVcmR0RHQ5VDFVJTJCamVSeHBhM2lNdkY1VjQxamNnJTJGdHJ4JTJCTE9kNlZiYVRxSmxTN2xNbDVJcmkzaEh3UmlRajkyMHNuaHpPRHBwV3NpaTZ6Y0dlU1pnM3BvM05TeSUyRkQlMkZlbjRLOVY1NDJyMEx5aGVhWGNtNXVhQ0NXTmh4a2wlMkZ2Q2xPcWN2czRycm41ZzJlbkk5dHBLaTR1cWxXY2swclN2eFA4QXRmN0hJVGF6cGNjcmlOYUxHRCUyRm96R25CVklKa1pQMjYxJTJCRnVXRTRqdUxxU1pvMnBiSk1qeWl0QVFlVlB3cmp4YlVFMDFyZXVYR3ZDS1BVWkoyQ3MwaXFnVWdGdHVudyUyRkNLZkRoV0xYU3pheVc3M2p4dUdFbFdnSlViVW9TRGhrTGNYRWpKRFNKcWtvU2QlMkJIN09HbGg1YTFIekRPTklpdCUyRld2WkVNa0pSbFF0R2xLc0N4Vlg0JTJGeSUyRmF3V3RJTFRMVFRtZU1tYlRybTFqWGUwbm1NTE93SDJuWmxyV3YlMkJWaGxCYjZMcWwwOXpwZW1yYngyY0plNVdOcWlSaTNFS3JmeWolMkJaUjhXSjZ4JTJCVlBuWFFySzQxaTlzbGpzclVCNXBCTEd6QVZDZ2lOV0xOdWZzNEk4aDZocDczOHNOeFJCZXhlaTVCb0JKV3NjZyUyRjJYdzRWWmpvTWxsRmJ4NjM1WTUyazltdlBVZEthUmpISUYlMkIwOFBJbmhKUVY2JTJGYSUyQkhPcTZkNSUyRjBHN3RvWnpLJTJGQndLekJDVnJUbzNHcFElMkY2MmNZVzIxRFElMkZNVVZyRkglMkI1dnlJblBTSXF6ZkUxZjJhZmF3a210cDQya2x0MGY2dXp1SW5Xb0RxckZRUlFqa01KVjlRMm1zNlZmaXRwZVJTJTJCd1lWJTJGd0NCTkRnMm96enI1WTF2VEk3VjlMMVBuYlREazhFNFFzN00xS0tIQkRwOUdUZlFmT2Rvc1N4dzZ0eGtwOFVOMER4QkczN1dOZWEwOVV6WkJOWSUyRk0zU2ZMY1ZyTHJESXlYWkt3bTJibVc0MERzRjMlMkJGYSUyRkY4ZVRXMXVvYnkyaXU3ZHVjTXlDU05oM1ZoVVlFSzJiTlhOaXJzMmJOaXJzMmJOaXIlMkYlMkZTNyUyRm16WnNWZG16WnNWZG5FJTJGd0E5cktZWG1qNmpUOXcwY3R1VDRPcEVnQiUyRjFsT2RzeU8lMkJkJTJGTFVmbXZ5JTJGY2FYc3R4dE5aeUhvc3lib2ZrMzJHJTJGMXNCNU9ScE1veFo0VFBJR2o3cGJQbCUyQk5QckVSaSUyRmFHNkgzOE1rUGxYemglMkJqaEhvJTJCcm11bkNxd1hGS21EbWZpU1JmMjdkJTJGd0J2OXBNSkJEY1dON0phWGNSaHVZSEtUUlBzVmRUMFAlMkZOV0I5UmlXTzZhZyUyRmR5Z1NMN2N1djNIS3Brd0ltUGNYb00yS0dhSGh5M0IzQkhmM2g2QjVxc2xYUW9vTk9Wb2YwYTdYZGk2ZkR4QlBLUVE3OHZUMzV4Tmw2RnIxbDVzMHlYU05aUkh1akh4bFJodE12JTJCJTJGRThKQjlyJTJGQUlmSUxvMnBUNlhmTGQ4bW1pS2VoUEF6RThvVCUyQnl2S3RPUFdQJTJCWEt2cmFmU3BsMVhUMkw2ZXo4NExxTHJFMWE4V0g3UEg3TkRsa01vbHVQaUhSYXJSejA1RiUyQnFKNVNIZjFDVCUyQlolMkZMbHo1V3Z2VFVtWFQ1alcyblAlMkZFSCUyRndDTEIlMkZ3MkZhdUQ4U242YzY3YTNWaDV4MHA3RyUyQlJmckFXc2tZNkVIcExGWHAlMkZ4cG5MZGMwUzg4dDNwdHJpcjI3bXNFM1psSDZuWDlwY21SMUhKeEZTM3VBNG9mdERCbHZjejJseEhjMnNqUXp4TUdqbFRZZ2pDVkc2TWglMkJXRDRaUkl2djNHQzFaN3BkeEhyYU5KQ1ZpdWtxMTNhc3dWQU85eENXJTJGM1VmOEFka2YlMkI2JTJGOEFWdzF0NU5Qa0thYmUzU3lxS0cydUlxdVlEWDdKYzdlaTM3YSUyRlolMkZhem05dGRUMmR4SGRXemNKWXp5UTlSNFVJN3F3JTJCRmhrd2h2RHFFQ1RhWmJFeHlIaFBicUttQ1lpdkJmJTJCS1pQdFIlMkY4RGdJa1NEeFZIcUslMkZTeUJGYmpmdlI4azF4WTZnVnRMYjZ2SmJWV1piaHZWTG8zOHlBZW1ZWkYlMkY0WENqVzBNY1g5ODYlMkJYNzJVZW02VjU2YmVrVkFZTHUwRCUyRjhBSlNMJTJGQUl0anc3VzB1dFZnajAlMkI3azlEVUxjJTJCbmFTTWFGa3J2YXolMkY4eVhQJTJCcGdxMDBpenRia2FWY1A4QVdCZXI2TnpFd29yTFdqUnNvSjR5UnY4QUVqcjlqR09NRGJuNXkzVXlKOHZjeWZ5SHBsMXB1aHkzMXpFRTFlOWNKZkt4WGpLOEpNYVRxZkdaQ3J0JTJGTjlyQ1g4d2RhJTJCcXlhYkFHQU04NWFZQTlGVWNWJTJGd0NHeVpYRWx2YjIwVmdIYjFMZU5ERUttcEtEaEdTJTJGZk9LJTJCY3JodFUxRzh2TFolMkJZc3o2TTBRJTJCMG5CaDZjd0glMkIlMkI1YWY3RjhzbHNBQXhHNXRrZXNUbTY4c2FkZG8zR2JUWjViYjFCMUclMkZyUmZyeEdUVzdMelBwY3JhaEFMZnpEcGlyOWJpSTR0SkVTQVpvd2Z0SjhTdnglMkZZJTJGMWNENlZNYjNSTlRzU2hKbWhqdTRnVlAyb3Z0SCUyRmdHJTJCTEJWbmI2YjVnMHV4MUpHV0RYTkRqNFNFaW9uZ1FjR2prJTJGMzRoWDdMZnNZQnVrdCUyQldiYTRnV0hXbWolMkJzV2RwSzBEd3F5JTJCb1drb25KRSUyRnZIWk9mTmNLZGFzbms4MDI4OFRONkVFcXhPWE5XU09KaVM3bjJwOGVCNGJ5U3cxaWx2OEF1NE9RazQ3a0tvJTJCTHYlMkZMWDdXSzZqcjR1OVVlZTFqSXRuZGlJaWFzeXY5c1YlMkZsM3dXQUZaQmJ2WWFqcXNWJTJGRFNQMXlJVFBVZ1NLSDlTU2luWWNJUnclMkJIN1RTSmhyJTJCWU9yMnNPa1dtbmhIU0s2WWlSb2xGRjVBJTJCbjZuZ0ppZjhBV3lQMk1MNmRiaVJJJTJGcnFzQUkzU1JBc01ZJTJCeEhLcmxHaGZsJTJGZWZCJTJCOCUyRjNYZ1hYWXBwSkcxbTJ1bmtiajZPcDJwVVNLVkFxa3NTTnNpZjVMJTJGRkg5dkhvVWxyeXRkdERDZ2RtVjdkNUkyYm9VJTJCSU5HVCUyRkxocHIzbkxUS0o5VVQxOVRCNHpOSHRDZTNKajNiMlhJc3NwMVk4YlVmRk9Rc2l4N1NDU2xBWHBUbWo0YXY1T25zZE0lMkJ1ekIzWm05T1dhTkdEMiUyRk1nUlRvbFAzc1hQNFp2OTJmeVlpNm9JVERWckcyOHg2TkJlQnZxV29XUzFpdlNlSWlrVThqRkklMkJ6TEE2JTJGR24lMkIlMkIzeUZhcTFwY1hpeDI4WlVHaTNVMndhZHglMkZ1emlBRVd2OEFxJTJGSDl2RExWN1R6WGVXcnFiYVdPNFZoSGVOSHRGZENQN0VoWDVENHY5JTJCZmJ3cEMzbGlHZ3ZJb1ZkU3F0NnBMUEdyMHBUaiUyQno4WHc0Q1VrRUdpbDdSd1J1OVp6d2pQeDhVWmlLZVBTaHliJTJCUmZNZGhITTJrTEVWJTJCc0RsRExRRm5jVUN4Y1JYN1dFRjFEQ3M2M3pDczZyNmMxTmtlbmNyN3JnWFNwRnNiNXpDRm9yZXBDOVBpVUVmWnI0REFEUlZEJTJCZGRVa1BtUFU0bFVnVk50Tkc0cUR3MkJvZjJrUDJHeUsxTEVDcFklMkJBcVRuVUZoc3RhMUNlJTJCMUczaW51WkNyeVNzZ3F3cUZOUmt3dTlSOG0lMkJXSXdzY0VIcmhhckRCR2pTSDV0VDRmOWtjSW9vcDRkYTZWcXQyR1cwdGJpUUhiaWtia0g1N1V3SE5GTGJTdmIzQ05GTEV4U1NKeHhLc3V6S3dQUWpPdTMlMkZtcSUyQjFtRm8xQzJObUZNamhUUUxHdSUyRktSdHVtUWZVJTJGTVdoM3VvVFh4MHIxcEplUEtTV1NuSmxWVTVsUU51ZkhuaFF4bU9ZeGtsU1BpRkNEdlVaUUtVSXBVbjdKcjAlMkI3RDhlWXJCUDduUmJVZjYxVyUyRmhtUG10a0JGdnB0bkVlekNNa2o3OENwUlpPWTV3JTJGQm1XaEJDanNldVN5eW4wcElwSXIyQ1NyMmd0YllUUXQ2YXlsdWZQcDhQQldiQ1pQTnVyUk9za1lnVmtZT3Y3dFNBVk5SdGcyNzgwJTJCWVBOZDVDZFd1UkpIRVdrV09ORmpSYWloJTJCRkFQbGpzcUxlUnJWaCUyQmpRdDNHQlJvWEJCS0FmRndhZyUyQkxKMTVCMTd5ZmVhbEUydGFUSGNYTUc2M0VxJTJGdmJZTCUyRnZ5SCUyQjZlRkslMkYzaUp5VDl2QVhrUHlnUE5FdW94eDNLUTNWckFIdFlXUDhBZU94cHYlMkZ4V3Fpak12MldaTUxkUzh2Qkx4NHBnOWpxVnFURkpJdnd1cDZmdlA1bFAlMkZETGlsbHY1aSUyQlN0UHRMODY3cEVFY2VtNmh4a2l2TFdqSWslMkZldkhiMDVmdFpGOU9rZDVFdDVtYXl2b1dFdHJkUm1uQ1VmWW1oWWZ6ZnRwJTJCM2szJTJGQUM2OHpMZnglMkZ3Q0ZkV3QxZUVscmJVb1clMkJ3R0lyRFBHdjdDeVUlMkJMaiUyQjE4ZUllYXZLTTNscTdXcWZXTk9rWWl6dVhGZU5lc0U5UDhBaVg3V05icUNuY2ZtMmZ6Um9VbWc2ekVxYTdaUERQUEN2OTNlUVJNQzAwQSUyRmElMkZaYVdMQ0h6ZjhBbDdvT3JhNWI2aDVLdUJIZTNyajYxWXdyJTJCNVhsdTAlMkZMJTJGZERmenglMkY4UXdwdXA0VldCck9SaGZXN2lTMFlrckpia2RSTEt2Mm9tJTJGWTRmYnpzdmtYVTdmV05IanUzamhqMVpBSTlVRUtoU0p2RW1nJTJCRjElMkJQRWhYZ1BtJTJCOTh5JTJCV3JpVHl4ck0waUNNQm81VlZXOWFEb0pJWm0lMkJMaWY1ZnRSdGhONVg4enhXWG0lMkZUWjlkSHE2SEglMkZvejJ6MWVOTGQxS3E0VHZ3WSUyQm8yZWwlMkZQWGtqVFBQR2tOWTNuN3E3aHE5amVxUGppa3AlMkZ3QU5FJTJGOEF1eE04bWF6byUyQnElMkJWOVV1TkkxS0wwN3kyUEZsYmRXVSUyRlpsalA3VVRmc3RpaDlKeTZkJTJCVlYzZjJkamEzbHRIZTZpcGV6UzJtcnpBRmZoJTJCMmlNZjJLJTJGRTJYY2ZrNW9qb1RaMzExYnoxSkVqRlhHJTJGaXRFJTJGNGxubGgzVVNMS0NZN2xTR0xRN1VJM0RBOW16MEwlMkJWUDV3THF4aThzJTJCYVpSSHFJcEhaWDBoQUU5TmxqbFBhZiUyRkslMkYzWiUyRnJZcXFhbCUyQlMlMkJvWGIyRVl2cmFXRzNrY3l2TEczSVJ1d1klMkJrZ1BGVzJQZkpqWiUyQlJydXd1RmEyMWlSWUZBQ0tGS3NLZjZyJTJCbWYlMkJSZVRVRHh5NllxbzIwTFFRcEU4cnpzbzNsa3B5YjU4UUJpMmJOaXJzMmJOaXJzMmJOaXIlMkZBUCUyRlQ3JTJGbXpac1ZkbXpac1ZkbEVBOWN2TmlyemI4enZJZjZiaE91NlJFUDB0YkwlMkIlMkJqVWIzRVElMkZaJTJGNHlwJTJCeCUyRlA5ak9IYWd2cVdzTXclMkIxRVRHd1BXaDMzejF6bkklMkZ6TDhocUV1dGYwcVA0SlJ6dnJkUjlsd1IlMkZwQ0R3JTJGMzclMkZ3ZVJuR3hUdE5CcmVFeHc1RHNENlNlbjlGNGdwcGh0bzJwcllTU1EzS2V0cDExUmJ5QWl1M1FTb1A1MCUyRjRaY0s1WXpHNVE3ZUdQRVV5UnBNeWtSU0VoSDdNVjJJekdBa0RZNWgzT1NFTWtEanlDeEw4YmVhWmFnbHhvT3B4VFc3cUxTV2ttbjNjWDJlSjM0bnglMkZ3QXBjbE1zZW4lMkJjZEllQzRRQ1pRUFhqSDJrYW53eXhlMlJqVDclMkIyZTBiUnRWSExUNVNXaGwlMkZhdDVPenIlMkZ4V3glMkIydUpXdHhlNkhxU3c4d3R4RHZCTCUyQnhMR2VnUDh5T015Y2VRRWJjdW83bm5OVnBaNEptTXR3ZDR5JTJGbkQ5YkVOVTB5ODBDJTJCYXp1UnlUckhJUHN1blpoJTJGVEtpbDRrU0lhaiUyQkdkWjFIVHRNODQ2U1hVZW5LdjJnTjNnbHAxJTJGeWtQJTJGRDV5TzlzN3ZSYjJTeHZVNHNoM0k2TU96cDdOa3lPbzVPS21TdUdVTXZROU1NZEYxbTQwUyUyRmp2b0FIVWZEUEEzMlpJejlwR0glMkZESWYyR3dqdDVRaDMlMkJ3MyUyQmRjRm5yaXIwR1c1S3l4NmhhdjZsdGZxREhkZFc1RGJpMWRvNVYlMkJ3NiUyRnpaTFBMYlE2blA4QVdycEFieTNvSkdJMmtYcWtyZnl5cVI5ck9VNkhyS1dIcTJOOEdsMHk2cDY2THUwYmpaWjR2JTJCTEYlMkZhWCUyRkFIWW1kYThwMmkydGs4c2pySTdtaVRJVHhraiUyQjFISlE3aHVKJTJCTEpSM0szc251cTNmbzJydW9xUUMzaWR2c2dEJTJGV3BuTUolMkZKJTJGbWU0TXNxMmpDOXR1VWFYY1hFUjNkckoxamFwSDcyTlclMkJGbVglMkZpdCUyRndCNW5UZElrc3l6VzBjJTJGcnl4VlpnekJtQ3NhNGVDWkFLSERJV2diUER2SzlqcXVoNnhhVyUyQnRXODFyREw2bG96VEthRkpRVkFCJTJCS3RmaHd2czQ3bXl2TCUyQk5RZlRzMmtEOVVLOGdRS2x2MlhwOFN0blIlMkZ6UTFHVzA4dSUyQmxaTzBkM2RUeHhRc2hLc0tIbTdoaDlqaXElMkZhemk2TXhFaUk1WU9hM055eEpNalZydXglMkJJcmxjdG1RM1RTOTFFM2pDRzJqSEkwOVIxcU9kT2dGZjkxciUyRncyQ0xLRll4eUpCSUZaSk93SGdNQzJOcnlHM3dSbnE1NnQlMkZaaHVzWmlpaHU3Y01XdDVpcjJ6cHlpa1VBVTlUJTJCWWN1V1I1cGRQcWlhY1FyV3FYQ3pSMVVTVkJBYiUyRkFIWXAlMkZud3V0ZFZodGRUYSUyRmdXVkJPQWs4QmNORzlCVHF5azRjNnJjMmR4ZTJGM2Mya2NLSkdJN3F4NGtVanB5UjBCNlZyJTJGTmhCcWM5aGFTeHBIRVJhWFJhV0l0JTJGdXZjb1RSYTc1UGx5UW4lMkZBSlp2WUklMkZNVVMyU05FTGlWVEV5Z1VqblZXOU9sZnRJOGhWV1ZzblNYVnhmVEdTNmxhU1ZpQ1Myd29kanNOczUlMkZvOHJyTDY5cXdkNnBJcnFBdyUyRmQlMkZZUHc5T21TdWE1MUdWSjc2MnN3UVhMQ0QxQWlyeU5Rck1maTIlMkZ5Vnd4S2tJalc3JTJCZXpqUjdQVHByJTJCVWJ2Nld5VUg4emZhNmR1T0VQbmpUN1NFV21yeHhrU1hhdGF6b3dBNUtZJTJCU2NnRDlxSXJ4d1EzbVBYN0VldHFGaEF0cVB0ZWd6eVNBZXdBNDVGJTJGTUhtMWRjUklHak1kdkMlMkZxUklLY3VWQ3ZKMiUyQlIlMkJ6Z2xMWTJ5aGpuTGFFU2ZjRXF1YnVyVzhNNUhwekt2SXIxRmFEbDc5Y1JiUnI2UzglMkJyMjQ1R0NvYWMlMkZDaktwNjclMkZ3QXd3JTJGOEFMM2xpMDFxQkxnUEpPOGY3dDR3UDdzJTJGc0U5ZmhPSGVyJTJCVnRmZ2clMkJ2YWJjSmUxRkpyUGp3WlZVVSUyRmR5JTJGUjlsbHlJRml4dUV6aktFakNZb2ptR002amFhaloyOFJqQmlFaXNKelVMVGkzaVNLUjB3Ym9Ia1RYZFd0MjFPTFQ1cnUyQTVSbE4xazhTcnNWV1QlMkZBR0Q1ZW5hMWFYQSUyQm82cEQlMkI5SjJXY2VuTCUyRmxCSlI4RCUyRndDcm5TZnk4ODBXJTJGbHl6bDBtN3VKWnRKUiUyQlZtWFNzbHR5TlhoWUQ3Y1A3U2NmaVQlMkJYRFhjeG9zUjFEOHJ2UDJxV1VkbFphZEhaVzdrUGNQY1hFWWVTbjJFS1I4JTJCS0o5cmglMkZOa1J1JTJGd0FydGMwMjZleTFGb29Kbzl5S3M0SVA3U3RRY2x6MGJyZjVqZVh0S2hSN2VZWDBzaWVvaVFIWUwyOVJ2MkNmNVQ4V1E3VyUyRk1qJTJCWnJPS2QwdDFDdCUyQjZlRGs3eE1hajA1Q2FOeGIlMkZWd0VnQ3kyNDlQbHlFQ01lZko0MjM1ZlhRNjNVZiUyRkF0JTJGWEM3VnZLc21rZlY3aWFiMWRQbElTVzdqVGVGeiUyQnhKSFdvUGczN2VkUTVreU5ESXZweXglMkZiUSUyQiUyRlFnOTFPQjdoRkN1cklzc1VxOEpvSEZVZEQlMkJ5dyUyRlUySUlJc01NbUtlT1poa2lZeUhNRjVnJTJCaENOaXBjeUZmM253RDdjSCUyQiUyRm9UJTJCMXglMkZ3QjJKJTJCemlOeVcwMSUyQk5zZVZ0TW9NYzRHN1ZIODJUQ2J5eGZXTXh0VU1sbkRJUHJPbGk1NUpJaCUyRndDSzJaZU1xdGhZWU9NVnhCTmIlMkZ1MkhLJTJGc2w2SlU3WGxwJTJCMXhEZmJUJTJGZGVGZ21Qa25XN3EwZUMlMkZzWiUyQk9vV1RjazVmdFJuckc5UHRJZnN0bmF0WTBpdyUyRk1mUTQlMkZNV2g4YmZYYmRTanhuYm15RDQ3UzQlMkY1a3k1NWdXY2FacURQcDF5Wm80MlBwejhTdkllUEhPbiUyQlRmTzJxYVhNTCUyRlNIaVBxY1JmMk05ZlRZZjc4WGo4WElmczRxb1dzR3NRNjRUcHAlMkJvMzF6R2JLOVdZZkZFOFo5VGNlSTRGUDlsbnBOYldEVmRHaXQ5UlJiaU80Z1QxZzNRa3FDVzlqWDRsemtzRTF6NTM4MkRVN1d6RUtvcXE1VVZBb09JZVY5dVIlMkJMJTJGZ2M3UkRHc01NY1MlMkZaalVJUGtvcGowVXZIdFElMkZLblY5SDFGOVg4dlhDYWp5WXQ5VHVRb1lMU2lqa3g5T1RqJTJGbGNNUzhxJTJCYUxueTk1Z3VvTllzMnMlMkZyZkVYc0xMeEt5SlhqTEg0cHhPZHB3bDF6eTFwJTJCdkNPU2N0RGN3MTlLNWlvSEFPeFUxSHhKJTJGazRvdE5vWllyaUpKb1dEeFNLR1JoMElJMkl5RiUyRm1OJTJCWGxsNTUwejRPTUdzMm9Kc0x5bmZyNk12ODBMJTJGd0RDZmF5VTZSWU5wbGhEWU5NWnhBQ3F5RUJTVnFTb0lIOHVEajB4VjhOYXBwVjdwZDdOcCUyQm9RTmJYOXF4U2FKdW9ZZnJyOXBXd3VTTmc0TlNIQnFLYkVIeHJuckw4MFB5Mmc4NldYMSUyQndDdzY5YUpTM2tPeXpvTiUyRnE4eCUyRjVOUCUyQncyZVhtMHE4Z3Vab2JsR2dsaWNwTkE0cElyb2FNamZ5ME9LdnBmOGx2TXVzYTVvbDFaYXpPTHFYUzNqaWl1VHZJeU92SlJJZjJ5bEtjODZlTTh5JTJGazM1dXNmSzJyM0Z0ZnlNdGpxb1JaWjNxUkZOR1Q2YlA0SVE3SSUyRiUyQnh6dEYxJTJCYUhrZTAxU0RSMzFhTjdtWiUyRlRMUlZlS051M3FURDRGNWRNVlpsbXlsSVpRd05RZHdSdU12RlhaczJiRlhaczJiRlglMkYlMkZVNyUyRm16WnNWZG16WnNWZG16WnNWZGpYVlhWbFljbElJSVBRZzQ3R1NPc2FOSTVvcWdzeDloMXhWNFIlMkJadmtBNlZLMnI2VkglMkZ1UGxhckl2OEF1bHolMkJ6JTJGeGpiJTJGZGYlMkZBNUVvSkxLJTJGd0JGaDB5T0pVMUF5ckg2b0FCYm9xSkl0ZWJ0eUpralpQOEFLVnM3M3FubSUyRndBc3lXODlsZXM3eHp3dFNNeE1SS0clMkJIZ2hweDU1dyUyRndBeSUyQldwYklIV05OamVHS0ZrRGpsVnc1JTJCSVBHd3A4UyUyRnRjZnNaR1VhdVFIdmR2cE5XSnhqaHl5TVpBJTJCaVhRJTJCVW1NWE50Y1dWekphWFNHT2VKaXNpSHNSdGxsMXVMZjZyY01lS2IyMHZWb1clMkY2cFAlMkIwdjdHSHNMcjVwdHZxN21PUFU0RWxtRWhISDFlQ0lJNGtwJTJCejZhTzclMkZ0ZXBoQk5CUGJ5dERjUnRGTkdhUEc0b1I3RVpWS0pIcmh6JTJCOTJKakRQQTRjdzNITWRSJTJGU2lpTkcxbTcwMjhFaUVDNGolMkJHV01uNEpVN3FmOEFqVnNsbXZhQnAzbkxTRnZiQ2lUS0NZMlAyb3BQMjRwS2ZzJTJGOWQ1QlRGRkl5czVaR1g5cEtjaDlCNjVKdkttclNhVmRldnhlYTFtJTJCQ2NFRlF5ajl0UiUyRnZ4TXR4WkJJVjh4M09pMWVrbnA1VWQ0bjZaZCUyRjdYbXNrVnhwMTFKWTNzWmlramJpeUhzZjhBbWslMkZzNGNhUGF5NnBlUWFkRTZySk13Vlhib0Y2ayUyQiUyRkVET24lMkJkUElrZm1TeUdwNlFBMTJxYzRKRnBTVlB0Y0c5JTJGd0RqZkkzNWE4cXphRk5hM3VyS3JYTG1zY2ZJMWdQN05TdjJuJTJGbXl3eG91SU4xRFdQS0RXOTVEWTZLMHQ1SWZnbmFVS2dEMDVjbDQ5STZIN1RaMGJ5bkJBbW1qU1Z2aGN6MnFFTTYwJTJCSG5WUnc5b20lMkJIJTJGQUZzSXRmaG5kZzFxJTJGcE5keG1JdURRVlUlMkZFQ2Y4b1lSZVNMazZSNW5XQncxYm1UNnNTRDhGR0JiNGglMkZOeVhEeVB2YnNXSVRFOSUyRlZHSmtCMzBqUEtWMVBwT3NyQmR1UkxGY1BiM0pZOVZkaXRXJTJGMlh4WjAlMkI5MU8yc3BJb0pXTDNFNTR3VzBZNVNPZjlVZEYlMkZtZHZoem0lMkZtMnclMkJvZWFwSmxCVmRSaldkQ0RzWkUyY2ZldUhkdmZRVzBCbmdacHRWdkVIMXUlMkZsRzZnaiUyQjVoSDdLcjB4SGMwcEQlMkJZZzh3YTFOREZaV2pTV3RzckNSb2lHSmNuNDZiMVlkRjJ5RldlbXp4c1cxQ040RWolMkZabFVvZnViT3MyV3B4cE5HbDJvTVAyZVNiRWU1eVRYR2thZHFGcEphVDI2VDI4NjBZRVZCQjZFSHg4TWVDemRwdW5sRXRwSFlRMzhHcVJyRk5hUEE4RWdKY0ZhJTJGR3FoYWRhbzJYQkdsbWJlMnVDemV2YkdlUm8yUGNOSnglMkYyUyUyRkRodDUxczNzTHBZTG9INm5jSXEyMXdSVTFVY2VMdDlIeGY4SGhqNWY4cFhlcldjJTJCcTJWckhxRTFvcVFXZHZOTHdVb2lqbUpCJTJGTzlXNCUyRnM4Y2pWSDNMZXpFdk0ybVhXcXlhYk5vekI3U1MxV0o1U3dCckhXbkx2OEEzWlViZnk0b25sYXptdHJLQyUyQkpsTm9IRkZORmJtUWFIdnRUSjlyUGx6VTdHT082dnJSYmVOaW9RUU1yUnhtbjkzOElYajRZRTBmUUxuWEJkUTIwNjJsMUNQM1NTcnk5WGF2N29nMCUyRjRMRHNpa3BzN0MzczFXSzJpV0pCJTJCeWdwZzVsTk9YMFlBVnI3VEwweFhzeGN4c1ZsaGt0d3BGUHRMVld3YmYlMkJhbjBlOHRwN0xUWXJteUlMbHB5VDZob1J3MiUyRnUlMkZUYmRsdzN0YW9LNHY3YTFkWTJkVzVHalExcVZIaiUyRndBMjRWYWg1YTAzVmxOeFpFUVR0dnlYN0xIJTJGQUNseWZqeWZvM25yVHJiVjlQUk5JMWk2Z004cVJFTkM4Z2IwNU9VSSUyQk5SNm5SMSUyRjRISVJxT2o2NTVWdSUyRlExU0JvZ1QlMkI3bVUxaWtBN3BKMCUyRndCaTN4Wkd3ZGl6aE9lT1hGQ1JCU1BTWk5YOG1hbWwxTWhOc2ZnbGRQaWpkRDFIJTJCUzM3UzhzNlpMckVFWnQydUVlMVc2Vld0THNnJTJCbEtHSElHT1JlUyUyRjZ3T1I5ZFd0UnAxMWRTUSUyRldIdDRXayUyQnI5M0lHeVUlMkZ5c2slMkZrJTJGVzVJTkFUVDlaMGVBV2N6R1Q2Z3IlMkJvSWxmY2dCeHNmMnZUJTJGQUdNWXhNU2VFMkQwN203UHFCbWpFempXU08zRU9VbyUyQlk3Mk0lMkJZZkxjZDNGSmVRUnh5bzdFelFVNzkyR1E2MGJVOUhrZjlIVEF3dHMxamRWZU5sJTJGeVglMkIybiUyRkVjN1pMNVhzdFZTUzU4cDZrWVpxVmJUcnlzaWY2dFdQclJyJTJGc3BWem11dmFEcTJqenN1cDJKdEE1TkNmanRtTmY5MVRqYiUyRll5Y2NKOHRtZ0pQcVY0SkpMSnBJM3NZTHFKMnVZJTJGdEJnUDkxcTZqcEl5OFZ3MHNOTm44dEcxMW04S1dObnFUckF1bXM1WWhUdnljdCUyQjBSOGZ3JTJGWWIlMkZXd0xkUnBmYVZFa2tQTzUwcjFIaGpKQUxSU2c5SHBYOTIlMkZ3Q3pnU1c0VFY5SGdhNXVwcGRWc3BGdDdhMEZPTU5zaEhKbTNWdVpZOGZWJTJCMHpmQmxaSHEzQk5pZ09ubTUyTElmREhDWXdNQ0ptVlhJOElxTVluekk0Zjg1bCUyQnNSUWM3ZVNLVlJQSEt0czRydVVrUEFjdjlSJTJGaXdiWmFZMXA1Z3RySFVvaXBqbmpXWk9vNGxoUnY4cEd3Y1BMOXBjUk9abzJTNlprYVhneXFvYUZWazRobiUyQko5dVBxTnh3VnJtc1d1cHZZemFsRjlTMUsxbFRpNkdzY3NZWU1wViUyRkZXVU54JTJGbHdZb1NqZDhqeWJPMHN1TE1jVXNkbVVRUk94UnJuSDc1UFF0ZDh2YVQ1aXRCWmFwQUpJMFlQRTZuakpHdyUyRmFqY2ZaemclMkZ3Q1pXaDNHaFclMkZyMndIMXZTWjBEWGxQaWExbSUyRnVadUs3TVYlMkZ1TGolMkJiUFExcGRSM2x0SGN4R3F5Q3RPdEQzSDBISUYlMkJaRm5iM2s4RU1xaHhQQkpIT2g2TW5JVURmU2Rzc0RxM3pmcVdtUjZsRkpxZW5SQ082aUhLJTJGc2szRkQwbmclMkZtamZDM1NOVnVkSnVVdnJLUUpkUU9yeGMxRG9hZmFTUkdxckslMkZSbHlVMzJpM1hsblU0UkhPWXJGMklzcjFoeTlKbSUyRjQ5NSUyRjhBaW1UJTJGQUNzS3RlMFpwJTJGVzFLeGc5S2FMJTJGQUk2TmlwcjZiSCUyRmQwWDg4RW4ybGZGWDAlMkZ3RGx6NXgwZnpicEFsc0lZck8lMkJnQUYlMkZZeEJWQ09SJTJGZUlCVGxFJTJGN0xmN0hKcG5pTHl6NW0xVHlycVZ0cTJseThaWXp1dlZXWDlxT1FmdEkzN1dldWZKbm5IVGZPZWtKcVZpd1NaYUxkMnBOWGhrN3FmOEFKUDdEJTJGdFlGWkptelpzVmRtelpzVmFPY3QlMkZOajhzeDVudEpOYjBOZlQxdUJheXhydDlhalVmWSUyRjR6cVA3dHYydnNaMVBLT0t2aHowQ3Nid016cVNTSFBSZ3cyJTJCTDMlMkZtd3JsaGVCJTJCRDlleEhRanhHZXFmUEg1T2FkNWx1cGRXMGljYWJxVTN4VHFWNVFUTiUyRk95cjhTT2YyblglMkZnTTU5SCUyQlFmbXU1bldDOW5zNHJibDhVNk96TUIlMkZrcHdHS3IlMkZ5ayUyRk9CdE9NUGxuelRNV3N5UkhZNmc1cVlxOUk1ajNpJTJGbGY4QTNYbm94V1YxVmtJWldBS3NOd1FlaEdjNjhzZmt2NVE4dkJacmlFNnJkclElMkJwZEFlbUNPNndqNGYlMkJENTUwVlZDcUZVVVZSUUFiQUFZcTNtelpzVmRtelpzVmYlMkZWNyUyRm16WnNWZG16WnNWZG16WnNWZGlOek5EYndTVFhMQklVVW1SajBBOThXd05mUGFKYlNtJTJCS2kycFNVdjltaDJwaXJBUE9ONXBNV2lTdG9pUEpmTTFiVkk0eXkxRzhqRGtDbndyaERyRDZqRmIlMkJXYkM3V3QzNkVjbCUyQkNQJTJCS2laSGJ0eUphamY1V0R2UDl4WlJhTkNmS3R4S2I0emowNElPUjQwM0pLa2ZBT2ZIJTJGV3dzODRhak5kM0VFa2xGdVNPVXRLJTJGRFJWWGlLZHVRT0ZJZWVhdHBrMEY1UGVhVWolMkJsQVRMSVl3U1loWGQlMkZoJTJCeWxldUxQOVUxMnlrbWlXTzJ2cldPVzRuM1B4Z2NBRlhtYXR5M2NmNzclMkJ4OWpPMSUyRmx2bzBFZWpUMzg4U3ZKcURNakZ4WGxFdnc4VFg5bHM1aCUyQlklMkZrU1R5bmUlMkZwSFRWWTZMZHNWVWolMkZkRHQxaGYlMkZpdHY5MXQlMkZzTWdSVzRkeG85WDR2RGl5U3FjZm9uJTJGTyUyRm95WUpzUUdIZkpMNUZzclhVZFprMG02dVRiUjNVVHZIUUFnelJqa09OU09EbGE1R2djWDAlMkZVSk5MMVMwdjQxRFBGSU5tOEclMkJFJTJGcnltJTJCSE1EMGs1MnR4ZUxwcGpxUFVQZkY2bDVYOHhXbG05OTVldlpsZ3VMU2RralI5Z1RXanJYb3ZQNFhURVBNNnd3ektTS0NUNHR1b0lPJTJCM3ZrZTgweFhVMnRXMTNaUSUyQm8xNWJxOG5wSjhVbEVMVnAlMkIzc01CV09zWE90V3kyaUV5WE51Q3lJdzVNeWY4VnNhc2VGUDd0dml6TDR0cSUyQlR6TlVmdlQlMkJPVTZucGt5OVpyY2lWQU81WHclMkJhOHNpczAxcnAlMkZtQzAxTzVZclNXSjRrWGN5RmlCOW5zSyUyRnQ1ZmxqekxYek1sZzBiUlF1alFFU2JWbERjbDVJZW5MNGt5ZWViUElwOHk2ajVlMURTRWpYMFhXTzRRc3FLWWslMkZmUmdWJTJGYjVneDhjSE1lNWxHVW9tNG1qdVBuelNXJTJGMU9mVkw2UjdzSlcya2VLRlVHeWdHaElKM1BLbU5WeSUyRlRBazFwZFdjOXpCZHJ3dUVsY1RJZXpBJTJGRU1qJTJGbWpYYnZRdGFXM3RFQmdDSk02UHVDSEZRRXh0aXpTS0kxREhKdjVWdXhLcldNcCUyQndDOEpQaCUyQjB2MFpDTkx2cmZVckdHOXRqV09WUWZrZjJsUCUyQnFjUGRIbWUzdklaVjI0c0tuMk94JTJGREpCU3l6ekJwbHJxV25TUVN4TEkwUDc2RXNvSURxTzMlMkJzTWdtbGF4Y2VVZFJYVTdaUzlqSlJiNjJYb1VQN1FIODBmMmslMkY0SE9nWGR5VllnSHAxJTJCV1FXOGc0VHpReW9RcEpJVmgxVnVoR0pDaDdGRzlocmVtcEtoVzRzcnlNTXA2aGxZViUyQiUyRk9XYSUyRmJYZmslMkZVMFpKT0VMMWF5dTIlMkJ5MVA5MXVkdjNpZjhPdUNQSiUyRm1oUEwxeGFhSmV0eDB5NHJGRk14MmltSkpTdmhITFhqJTJGcjROJTJGTzlHJTJGd0FKMjhvJTJGWXZZNjklMkJxT01nZGxZenFQbVd5OHhyNjE1YW91b3hBQTNkazRkSkIwJTJGZlJHam9mQmw1NFUlMkJuQ3lTUk5TYTFsJTJCMnZRcTM4NjElMkJ5NjVHUEtjenRxeGpZN05FdzRqWWJVMzJ6b05wcEYxcWZydzJKWDZ5aWVySEV4b0ppdldJZjVmSDdEWVluWmFZM3BOOU41TjFuOUpKRWJ1SXd5Um9pc1kxa0RicFZ1M0YlMkZpZE03eHBsM1klMkJhZEZ0N201dGxlM3ZJVWthQ1lCeDhRb3dvZjVXQiUyQlBPTkcwanZMWTI4cWxSVWdxd295T091MzdMcGlYbDNYYmp5WnFrN1hnbG10WklmVEVLTlFHaDVSRUZ2c3hyOFhMamdJcmRXUWVkdnk3R2lRUHJmbDRTTmF4VmU1czFxN1JwM2tpJTJGYWFOZjIwJTJCMWtUMDdXR0Nxd2NNamRKRk5RYzlDMk45QnFOdkhjMjlXaWxqU1ZHSTJLeUNvcGtGdiUyRndBb3RIdTljT3EyZDFKWVcweDUzZGhBbzRPNTNKUXQ4TVlmOW9jTUZ5QjIzWndHT1FJa2VDUUd4cXdmSXNhdE5RU1FySXJtT1Vicklob1FmRUViNUxMSHpQUDZYMVRWNFJxRm80b3pGVkwwJTJGd0FwRDhFbUZtcyUyRmx4ZVdCTnhvRXB1SWh1YlNRajFCJTJGcVBzSHdvMCUyQjRsdFVtVzdSbzVvalJvM0JWaFQyT1dDaTF0JTJCYlBKMXBGQ2ZNWGxKZ3RsJTJGeDkyVkN5Ukh1d2piNGtYJTJCZGYyY2lPbEcyaHVoY1gybjhKSTJCRThGSEh6TVRiJTJGOFRWYzZGcFd1dGF5U1BibEpFbUhHZUNRVlZ3UDFaR3Rjc0liZTVOM3AwVWkyTWxXYU03bUIlMkZ3QnBRNCUyQjFGJTJGTGtUR3VsaG5ESVluWXByZjZ0WWF4YXh4Q0RseElhRzdpa284WjdrR3RXciUyQjN5d3hzZEdsMVd3aXR6R2JrZ2tSenVnREduUm0zNFIwJTJGWmJJSkJad3h2OVloQVZ4OFFwMEpQaUJuYWZKbDFlWGVrTE5keXJLT1hHTmdBRFFENGczR2clMkJFN1k4V3lUTGZpSE5KYmJRdk5IbGUlMkZlNTBlUVglMkJuWEFEM1ZnNTNFb1duS0ltaFFtbjdQd3Y4QXlZUlg5eHFsMWRtWFdPUzNYSGlxTW5wMFFFa0txJTJCQTVmYXpyUXdIcU9tV21xUUdDN2o1RDlseHN5bnhWc0ZzTGVPMzloYjM5dEpiWE1ZbGhsSEdTTnVoQiUyRlVmZk9aWHkzJTJGbDdVVjA1bjVNZ3JwTjFMVGpMQ1Q4Vm5jRWolMkZZZjVPZHQxblFielIzSmNlcmFzZmduQTIlMkJUJTJGQU1yWUIlMkY1VjNZJTJCZHRBdmhlZnVicm4lMkZ1TnV4MWprUVVZa0Q3VWJuaXIlMkY2dUVxOEQxclRGazlYVWROZ2FIaXglMkJ1MlhWb0hQY0QlMkZmYmZzdG5RZnlBZWIlMkZGa3RDJTJGcHRhU0YxVmdGTkdUaVhGZmlBJTJCTGolMkZsWkM5V3VOZDhwNmtOTTFlMDRhbllzWTJtWTdUVyUyRlpHMnBLamZzUzRLMDAzbWtDSHpsNVdtRExhemVyY1dvQjlXQ3ZYMUZCJTJGZVF0OWx2OG5Jb2ZZTlJsNUZQSTNualRmTzJsaTd0YVJYa1FVWGxwM1JqMFpmNW9uJTJGWWJKWGlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGJTJGVzclMkZtelpzVmRtelpzVmRtelpzVmRnSFZZOVBtdEhpMUpsVzNjZ0V1UUJVYnIxd2RnUFVkTnR0VHR6YjNJSldvWlNPb1lkeGlyekh6dFAlMkJpMjBhVHl2ZG02dURjSlNDTUpJUFRWaFJXS2o3QmJiaTJCOWI4a2Vacm5WM0Z2YmVyYnNRc1Z3SFVLRko2dFU4aFN2aGslMkIlMkZ3QVBHeTFHd3ZMT2txSzVqdTBjSVAzWVElMkJuSXRBUGlpZjhBNG5ra3BoS1FhUU9rNmVtbDZiYTZmR1FWdDR3aFBpZjJqJTJGd1dPMUxUYlBWckdmVHIlMkJJVFd0eWhTV01qcUQlMkZFZnM0TXpFVndJc2cyTmklMkJWUE9IbG01OHA2NU5wVTFYaFA3MnpuUCUyQjdJV1B3biUyRlhYN0VuJTJCVmdXMjhzNjNmMmtXcjI5bTc2WXM2eHlYUXB4VWdnTlVmYTRpdjJ1T2VuOWM4dDZKNWl0MHQ5YXMwdW80enlqTFZES2Y4bDFveTVFTDdUcmlHVzMwTHl0cDdRNkRiczBkN3hJNE96JTJGRldQbHljbU52aWIlMkJmS3ppdWZFVHM3V1hhaE9uOFBoOWRWSW42YTclMkZld0R6UGQzdWtOcGx6WXR4dEVoVzJhZFZCS3pSa3RUa2FsT2RmJTJCQnc2MGJ5ZFolMkJhTlIlMkZ3QVJhUHEwVmpPSXc1MDliY0xJa3clMkIxNnloJTJGalJtJTJGM2FuMjhkZTZkTFlUWEdrNnhEenRweDhhSG95bjdMcWZiOW5JM1lYJTJCcmVROVRoUzNwY1doY3Zhek1CV1NFJTJGYmdhUSUyRkY4UDhBSmxyckR2dW52bXJ5QjlidUZ2ekF0bnJrUUQ4NHolMkI2bUtIa0dSdHUlMkY4MkhXbk8lMkJvYWRMcFU1YUM0WmVVTDlHaWwlMkIwaktSMGFPWVpPTE84MGp6aG8wZDNadjZrTW4yV0ZQVWhsR3hWaCUyQnk2SDdXUVdhTzgwclYxaHZ3Qk1qY2ZVQW9za1RiTElQJTJCTnNJcjVvU3UxMHRmT3Q3SWt0NHRoNWlqUUM2aGtTc2R6NmZ3ZldJaUNDcjdVbVRqJTJGbDVKRyUyRktUU2RUamclMkZ4RElMaDRVQ1VnSEQ3UDhBeGFmajQ1R1BNZGtZdFJrdmJXZjZqZXdFWE5oY3I5cHBUOXBFVmF0SldueEp4JTJCem5SUElmbXolMkZGdWpmVzVZJTJGU3ZMWiUyRnE5NGdCQ21RQ3ZOUWZpVlglMkIxeGI3T0EyTmxlYVglMkZrciUyRkExOUpiMnJPJTJCbFhiYzdVdnVGYnV2TCUyQmIlMkZpV0M3TTdIT3VhcnBkcnE5akxZM2k4bzVCc2U2dDJkZjhBS1hPUDZqYmFqNWR2cExLNVVTQmQwZmNCMDdPdjhjTVQzcWtQNWw2dHJrV3Aya05pOHNWcjZDU2hveVZEeUg3UkpIWGo4T1FwZk5mbUNOMSUyQnNYY3NuQmVDck9mVUFVZEZIUDR1UDA1Mm55JTJGcTJnNnZlUjZUNWhnWDk0QWxtc3AlMkZkc3clMkYzVyUyRiUyQlUzN0dTSFVmeXA4bjZoVXBhdlpzZThEa0QlMkZnSDVwJTJCR0NYTmVUd00lMkJiemVXeHRyJTJCM1NWSEZHTVpLTVA4b0JxciUyRndBTmg5cXY1Z3ByM2tWZkxWOXprMU8zdUlqRk93cnp0NHcxR1poVWVxbjJQOHJKRDVpJTJGSkpySzJsdk5LdWZyU3glMkZFWUNuQ1hpT3RDcEtQeCUyRjFNNTAzbHE3dHBEeEROVVVVR2xQd3lKdFdRZmxmcE1Xc2VhRnRMZ3NzWnRabkRKMVZoeENuMzY1MWUzOHFhbnAlMkJzMlpYOTVicktHJTJCdFI3VVZmaW82JTJGczE2WVMlMkZrM3BHbVd4dk5SJTJCc3BKcWZFVzdXblI0a3J5TEZXM1BxTiUyRkwlMkZMblc4STJVc1c4eCUyQlZvNzFuMUxUMENYcDNtakd3bHAzJTJGNHlEJTJGaHNnbDlveVhVYXhYMXU4TG9DWTJkU3RWJTJGYUclMkZnYzdKVEViaXp0cnIwemNScklZbUR4bGhXakRKQ1hRb2VWZVc5UnY4QXkxUEtMMjVrdU5POUVMRW8lMkJJamdhb0trJTJGQXFKeXpxdHJkUVhrQ1hOczNxUXlxR2pjZENDSzdaRlBNUGwxWWc5NWFMV0E3elFqZmpYcXclMkZ5Y0I2SnJOelkzQlc3dUFiQVJLZ1VxU1FWSUM4S2ZDcThLOHZoeHE5d2xudEs0RHZ0SjA3VWdCZlc2VFU2Rmh2VHdxTjhGUnlSeW9IaVlPakNvWlRVRUhINUZEQzlZJTJGTDZ3dVNaOUljMk0zWDB0ekVmbzZwJTJGc2NMOUIlMkZMeThYVkpOUzh5M1l1bzQxYUt6MCUyQkVrUXJHd29XbE8zTjJ6b21WVERaVjRsNW44czNQbHE5NG9TJTJCblRrJTJGVlpqMjclMkJrNSUyRm5YJTJGaHNNTkk4OTNXajJodDJ0aE5WU0VwOFBHU2xCSyUyRiUyQlNmMjg2bnFPbldtcVdjbGxleGlTR1FiZzlRZXpLZjJXR2NvMTN5aGRhVk1VVDk1QTM5ekwwRER3UGclMkJJWmMzcFBselU1ZFN0R2E0SWFlTmdHWmFBRldISldvTU9jNXY1RTFCN1dmNnRjQW9EJTJCNVBMYjNqUDBmWXpvNHhJWXJaSW81VWFPVlE2TUtNckNvSVB0aWRyWjI5bEF0dGFvSTRVcnhRZEJVMU9MNXNDc084JTJGd0Q1ZTZWNTcwOFJYTklOUWdCJTJCcDNvRlN0ZjJKQUtjNG0lMkY0WE9JV1g1UiUyRm1Wb09wdW1td0l5U0F4Tk1zc1poWkcycTNNcWVuODBlZW9LWnFZcThsOGglMkZrJTJGY2VXOVF0OVoxRFUzVzRnUEpMUzBKQ0VHdndUeXRUMVUzJTJCeDZhcm5XczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkYxJTJCJTJGNXMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYVXpaczJLdXpaczJLb1hVaklMRzQ5RTBrNEVLZXRLNDNUWWtoc29RcDVFcUdadkVudmdwMURLVmJkVzJJOWpoRGRhRHFUJTJGdUxMV0piT3pQOEF1bEVWbkFQVlZrYjRoaXFCOHdXVVhtUyUyQlhUWVdRaTNpa1pwaHVVbHFPS21uN1A4QU5uT3RSc2lQVzBUV1VLcUQ5b2ZhallmWmtRJTJCMyUyRkRMbll0SDBXeTBXM2FDMEJKYzhwSkhQSjJKOFRoVjV1OHRKcmRvWnJkUUw2RUgwejBMaiUyQlElMkY4YTRiVGJ4WFFQTUdxJTJGbDlyN21TczlqY1VOM0N2MlpvJTJCMXhENFNwJTJGelpuYU5ZaHRmTm1nUmFobzdKY013RTFwS0NBU1AyNDYlMkZzbiUyQlpmNThnc3VnV1d0YVBGcDF4UkwyMXFGa0ZDeVAzVTk2WVIlMkJVZk10NyUyQlglMkJxdnBtcUV0cFVzbkdlT3RRakUwRnhEJTJGd0F6VXhPeSUyQjVrSG1HQ09hMXM3JTJCVmVFc0ZZcEhJM1N2d3lCdkRpNjQ3UnRIMWJ5M3FFWG1QVDVWbGduV21vMkMxQW1qNnJJckg0Uk1uVmNDejNGdko1eDFwSXFYMmgzMGNWeTNvdXYyblFFZWthOVhaVzVaSk5QdWx0N2RiWnBUTGFzUDlIbFlVYWxQN3VWZjJKbEgydiUyQkV3ODkxWnpZM3R2cU50SGRXejg0cEJVSG9RZTZzUDJXWDlyQzd6Sm9FT3UyWHA3TGRSVmEzbFBZOTBiJTJGQUNId2kwSWFoQnF0ZE9vOWhLZjlMalkwVmY4QUxVJTJGNzh5YlpGRDU5MWpTM1IzZ25SbzVZbXA0TWpBOXNuSGtyOHdlUmkwTHpKSUk3cFFFdGRRYzBTWWRGV1ElMkZzeSUyRjVYN2VIJTJGQUp3OHVMcU1EWDlxZyUyQnRSTCUyQjhVZjdzUWY4YkxuSmJ1eWpjTkZLbk5EMVUlMkZ3OERoNXBmUW8zR2M0ODdlVkZoTW1xMktmdUhOYm1OUiUyRmRzZjkyS1A1RyUyRmElMkZseVBlWFBNJTJGbWZ5Mlk0cG1rMVBScWZCQktwTndpRHI2RTMlMkI3T0g4ajUxJTJCMXViWFU3SkxpS2tsdmNKV2pEcXJEZFdIJTJGRXNWNVBudG9GaXVVdVFPRnhGdkhLcEtzUHBXbkxKWjViOHc2NXAxeEVndVh1SXAzcThkMDdQMSUyRlpWbSUyQnglMkZrY2NiciUyQmhtMjEyNXNiUGdnWDk1QVpxOEZSaHkzcCUyRkw4U3JrMTgxYURIcWVtcHF0dlJMdTJoRG5nUGhlTURtViUyRjJQMm96anNyS0xXNWp1NEVuaSUyQnk0clE5UWU0T0w1RCUyRkFDcDVoZ3U3aU93a2tVWEZ4RDZ5eDlEV004SE5NbUdKRkZEUkZSUWlvUFVISWhybWdyQVh1YmRLMnoxOVdPbGVGZXBIJTJCUmt3eW1Da1VJcUQxQnhCcFdJYU5xMDlvMzFXVVJyWm9pZW0zMmVQRWhlQ0lCOFZWJTJCTEpjR0IzQkJIdGthMUxRWFZuZTBYbkM5ZVVRJTJCMHRldkh4WEEybHhhekhmVzYyMHJ4MmF0VzRna1NxRk9QQ2dkdmpEQ2xWd2tBN2hXWVpzd3paRlhZbk5CRlBHMFV5Q1NOdnRLd3FEaW1iRldFNnZvRTFoSWJ1MEJlM0JyUVZMSVA4cnhYSlJvOTJiM1Q0WjIlMkIxVGkzekcxY0drQWloM0I3WlNScEd2Q05RcWpzb29OOE5xdXpaczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlEdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWaVBtYnlvOTFjZnB2UWlJTlZUJTJCJTJCaDZSWFNEOWlYd2wlMkYzM04lMkZ3V1F6VzlBWFhvJTJGWGFGZzdMJTJCJTJCaEswbWpkQnVhZnpBQ2pyblljRFRXTnJQS2s4a1lNc1pESTQyTlI0MHczdFJXM3oxcDJsNmhvJTJCb3RMQWZYVkU1T2dEVmxqQSUyQkxqJTJGeFpHdjdPUzJCYmVhUmJzY3BJNVl1TFFxM0VUSWZpUWN2MlpWUDkwJTJGOEFzTWszbWkxRmpxQm50MENwY0lISVVVJTJCTlQ4UkZQNXR1V1JEVEZFdWx3UGFQOVlqVlNmVmpCSUZHUE0lMkY3QnZIQ09TWHFYbHU2dHJuVEkxdDdZMlpqJTJCR1cxWWhtUSUyQkpjZmI1ZnpZY1pCUEtsMUk3R1JYSEtHaTNBWSUyRmFqUFJ2ZHNuUU5kOEJGRkRqbkwlMkZQV2hKYVhndUlLUnczM0tuZ2tsUGklMkYyUHhjczZqa1k4OTJVbDNvbnF3b1pKTFdSWmVBSElsVDhEN2ZKc0FWQmFMcFVldWVTOVB0cmlZUGNXeWtRWGtmWjR5VkREJTJGSlAyV3dYNVgxTkoyTnJRSUdYa29YcHpROEpQNjVHUEpmbU9UUjVHMHpYTG1HQ3psWW16aFpQU2VFMDVjZVA3VVRqZmxpT2hhZ2tXczNDVzBna1VYYlBaam9aVmtZOGtRSHI4T1NIVUpaRDU0MHZtWXRWUkJJQXZvVG8yNjBKckd6VTdjdmh6YUo1amdtMHQ5TzF1N2dpdSUyRlJkWSUyQko0OG95Q2clMkZkOVF5ZlolMkZ3QXJKaFBCRmN3dmJ6cUhpa0JWMFBRZzlzZ3QlMkZ3Q1NMcEp5OXB4bmlQUmlRc2dIOHJmellCNXFsJTJGa3ExaFhVNFppZ053anNpemZ0ZW1VM1VmNUp6cCUyQlJYeWxvRiUyRnBqM0Z6cVlpUjNZcmF4UkVzeXglMkZ6VE9hTDZqJTJGeXA4Q1pLc1NVT3paczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlIdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWZzM1aVByTUVGbGQ2WGJSM0NSTSUyRnJvMWZVSUlId3glMkZzNFUlMkZscnFPa3ozYzFsWVFtRU5GSkk4RENnUnpJRElnNWIxSmF2VE9pYWpaTGYyY2xzMUtzS29mQmg5azV5ZHBKUEwlMkZtelQ5WmNCSVdZMnQ1c0ZvRDhMczVDMSUyRndDRGt5UTVLeWpXZExHaTZtbDNiclN5dkt4dW82STU4UDhBSlBWY2xPaVhadXJQaTVyTEFmVGY1ZnNuN3NFM2RyQnFGcTl2TFI0cFYySTdkd3klMkIlMkJGMmo2WGYyRjVkUzNFcU5ieWhWaVZhOGlWJTJGYmZhZzYlMkZaWEJkajNLbldVUlhMellGWVY1bjhuM3VzNnV0N2J0RUlUR3NiYzZobDQxOEI4V0ZkNzVZbThzdkhxVnFQclFpQ3NKU1BpaWtIMmpRZnNOblNjYXlod1ZZQmxPeEIzQkdHMVNieTdyZjZZZ1o1S0NaZnRJQlNtSGVGbGxvZGxwOTVMZVdxbERNS0dJZllCN2tERFBFJTJCU3V6WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkYlMkYwdSUyRjVzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpGZk0lMkJpcExXJTJCU0paQWY3MUN0YU1Qc3lnZjhTeVZaUkFJSU80UGJDRFc2cFA1WXZEZDZXaXUxWmJjJTJCaSUyQjlUdDltdiUyQnh3NXhHM3RiZTFWbHQ0MWpESGt3VVVxZkU0dGdQTlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5UHYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFYlMkYlMkZaIik7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO2JvcmRlcjoxcHggc29saWQgIzBhMH0ueXVpLXNraW4tc2FtIC55dWktaC1zbGlkZXJ7YmFja2dyb3VuZDp1cmwoYmctaC5naWYpIG5vLXJlcGVhdCA1cHggMDtoZWlnaHQ6MjhweDt3aWR0aDoyMjhweH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LWVvZi5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LWVvZi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MGFkNzcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1lb2YuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotZGl2LmJhc2U2NC1zaW5nbGVxdW90ZXMgewotICAgIHdpZHRoOjEwMHB4OwotICAgIGhlaWdodDoxMDBweDsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFnQ0FZQUFBQnplbnIwQUFBQUJtSkxSMFFBQUFBQUFBRDVRN3QlMkZBQUFBQ1hCSVdYTUFBQTNXQUFBTjFnR1FiM21jQUFBRnJVbEVRVlJZdyUyQjJYejI4a1J4WEhQJTJCOVZkYzh2ajJmRzl1SWttMnlVZUZHRWhOQ0tRd0JwajF5UlVCQW5wSlU0Y2VaUDRNeGZrQnh5MkdPNDViUVh1RUdRb2hVS2lnUSUyQnNCQkUxc2JZWHY4WXolMkZSTWQ5ZmpVTjA5UFY1bkZaQTRrWlphNzlXM3F1dTllciUyRnFOZnklMkZQd0pnWnR5JTJGZnolMkZaMjl2cnBtbXFobFdUZ21GZzFVcGJmV2hZaEc2WXEyY0ZpJTJGTnJqOW5KeVdueCUyQlBIamVhZmJNVEV6UHZqVkI5JTJCNmQlMkIlMkZlendlRHdWMUJmSHViaXZrQzNsWnlhJTJGNG03TnA4VVpZWGh3ZUhINzczM3J2dkMwS3l2NyUyRiUyRjdwMDdkMzRxSWp5dnI2M1JOYjRsNENic1JVck5ycTZPZnZmUlJ6JTJGeER4NDg2QSUyRjZnN3ZYaFg5WklmJTJCcDRKb21hVG9aajhkN1BrMVNGUkZYYjFhV29kcTA5bCUyRjlZWnUlMkZDV01WTDllJTJGYVZGVlFWVVJFRUc4cjNWVUVaNGNYJTJGSEwzMCUyQjVzaFJ0QWhGcTR3Z2dOYjZHclhnVmEySzJqWXRBQ0lIdjdTejU0VGZIaldXYWdCT0J5MFhndCUyQmNqTHR3UXhWQ3BOd1VSUWF0MURkWWFUN3B3ZHdLREZBNm5jSGdGaXpKbVNiM1dMUERhN1BNSVZsYjJkYXFaeGRPTlVuQWV0RW9qRWRCR2lYWGhUbUFqaFowJTJCM042QWx6ZUVST0gxVFhpV0dmJTJCY3dta1daWW5BZkFrZHgxcHElMkJoVWJUOXozSUVsVUpsVmhJNFdzZ0NMVXlnZ2k0TVFZZDRWWE5tQ1lScVhPc3BWN1VvSGJRM2hwRU1lTEFrNW1rRllSWWxXSSUyQkhaNkNURHdrS1NRcXJBN2dGZUhNRjNDNlZ5WUxtRlpHaUtDRTZHck1Gc2FXYjd5dVZPaDY2TjFGa1VVcEJKM1R5dkZvdlRvQmw5WE1iTlkyYlo3MEJzS2ZXOTRoYnlFcm9zbVhwUXd5NFZna0NqTWl6anZSUmlrMEV0aUxOd2FnQmY0NjVsd09xdGtFVEVuNjBYVDElMkJsVGF6cnBLbFIlMkJLa29veTNYZmIzV2ozd0dXSlJRaG5uaTdCNTNxNUZxWjQlMkZVUjdQWWhHTXh5dU13Z1dWcVR4cllXQXdaWVFYNzhKNWk4aWU5dHhTQWtvT3FxUUFxazNwQmdLTERobFk1WFZLUENpM3c5N1lSb0tTRmFjZUNnRjJocVNYUkJQUUFJT2NYUkg4aFAlMkYweTYlMkJScFdMckV5ZzNTYlM5dG16Z2d6SlFTTFFabzR4b09FOFViQ3NKZlE3emk2aWFJaXpaNU9CVmZYREtQaXJlV0MlMkJ2QVlXT0JxZXN6bDlKZzAzYWZiSDZPcUdIJTJGQlNVcnFickZJWGlIb2lFREMlMkZQeVNpMmQ5bm5aSEpFN29wWTdkY1klMkZkY1plajg0enBQR2ZZOVV3MkVyWUdDZjJPNG1VVkV6RUxXdHFVeFpLamYzeksyY1VSemljTVJ5JTJCenZidUg4eWxGUHFYSVBxTmN6Q2xLWTFtVVpGY25TREtrdiUyRlVOdXB0YldHJTJCTHclMkZNaCUyRnpyWXBLQkhLVjNPTk9Yell4ZVYyMHo0OXFoczdnYU1XSWpxUVFpQnhWWEI0aXJnMDV5ejR1JTJGTXBpZW9KdVRMakRKZlVKWUJ6QkFGVVVIa2hNdkx2ekZQdXZRMkp2UTNkdWgwUiUyRmp1aURRZEluNk1KZHZreFRhZlpVUHVhTjZVYU9vNlVOdGdObDl3ZWJvZ3V3cW9BNWZDakV1c05DekU4TEpRRlJ1TnJ6cFFEJTJCcm1aTk01NSUyRjRBNXoxSjJpSHRERWc2ZlpLMGowdUhsRHJoMk40aTNQdHVjJTJCSDV0anA1SGxpV1FtbU9VQWhsWWUwcnFVcVdTRU9oY1owNUF2RTFVZENvbFNRSmFIV2xTVVlnSnklMkZPMmZGZm8lMkYzNHBpcGhGT1o0T3J2TmRMNUVKWmJjbUU4T1F6RnhJSkVHRWdJZUUxJTJGaHJqSkx4WmNPcklWcFZDN1RXMDBXbUxXeUFNREVzJTJCaTl3VkpEdEcxN1kyMXZWbU54TEtxSU9rUXFxb3EycUhPUm1najlVUWN6YTdtZ0ZtNEdtaURqTzVDNzJEU29RNnVQVlRXJTJCenVGVWNRMnRlS2Q0cHpoZDhiNk51NmpnN3Zac3JiMXJDbEVJeGh1N1EzN3g0N2ZJeTNqJTJGaThpcXFsVXVFV1RGTiUyRk9yTVUzZkVFdWhVTThGSVBEcVpnY1JJVmhzQVh4dGpHREdTNU0lMkJQJTJGdiUyQm03eW9wVnJSVnNQYWJzVyUyQllHMVQlMkZ5M0thaHFTZzZjSFJiNWNUbXQ1WlhoeFE3blM2eVpzVldPYWpERmJ3MkpTQ1NHRUlzdXlDJTJGJTJGbzBhUHAlMkZ2NyUyQnI5Tk81JTJGNWdNT2hKTE5uJTJGcFFMckxmdzZ0a0tLb3JDRGc0TlBQJTJGbmtqeCUyRkxPejk2aDJlbnp5WnZmJTJCZnRIOXphMmZtNnFMcm5POXRHazJ2WTg2ZiUyRk1saVdaUmRQbmp6NXpjT0hEeiUyQiUyQiUyRmlmaW1vcnp2MzFDOVg3MThHJTJGWXJDWVNOSmE1TGdBQUFDSjZWRmgwVTI5bWRIZGhjbVVBQUhqYUt5OHYxOHZNeXk1T1RpeEkxY3N2U2djQU50Z0dXQkJUeWx3QUFBQUFTVVZPUks1Q1lJSSUzRCcpOwotICAgIGJhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjsKLSAgICBib3JkZXI6MXB4IHNvbGlkICMwMGFhMDA7Ci19Ci1kaXYub3RoZXJkYXRhdXJsIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCb0FBQUFhQ0FZQUFBQ3BTa3pPQUFBQUFYTlNSMElBcnM0YzZRQUFBQWx3U0ZsekFBQUxFd0FBQ3hNQkFKcWNHQUFBQUFkMFNVMUZCOWtGQlEwV0RXd3F3andBQUFOTVNVUkJWRWpIcmRaYmFGeFZGQWJnYjJhU1RHNkdUaTZtVkl3eE54RjlxRkkwUlFuRlVxaVlhbXV0VnV0TGEydDlFWTBvUGdnRm9ZZ1BSUiUyRmFnaFl2aUElMkJpSUFZdm1CSktvWVdpaUJDaWdWVFQxRmlzYlVockV0TmtKcGM1UHVRa2pHRW1KcWtMRm1kejJIdiUyRmElMkYzclgzdHZsbTk1b1MlMkZMb2t1WnRJcGJkdkFzN0tGdEwyMndqYjNWMUM0MXVweTJrZTFEWEMyayUyRkJqdjFISFhEcmJrRWFtZzdsWDJQOFFUbGRRMlV0Zk9COHVpSnNITmlCJTJGaWswR21PJTJCZ1pJeGduR0E1OW5HQ01vSlBlUWFZUDA0N2lCRFhaRW9oa0FZb2Y0JTJGTnlLbFpSZFIlMkYxQVNaQ25vT01oV2tVaGVNejlGMWxhSlNSWjNnRXFWdzFpcFpRamNvQlJyYlQzRXo5T0pMaFprSEc1Q0Q4bDhRNDdxWGhNWnAlMkZZeGhWRmF4QkxCdFFlamR0QSUyRlR0WlBNSUpuT2tuSTJXU1l6aWNUWU44T3RUdklDWmJFQ3hkcjVQa202aVBMMEMzYyUyQmdrZklKZ2klMkY0TG5QJTJGdWRSS0QzSzRqZjFWSkdMRUFpdXo2Vm5BNEFHYW0xaDdncE5JelNGZTY2RDNOdXJMS1ZoSk5rSG8wN045VjlCRTNYSE9ZbXlldWlycUcxbDltZEhnT2tEU0dkOCUyRkdXdGc5Um9hNTZscllkY2hEdFJRUExsQ2tFeXdLVlJTY0RmcnVybndDMmRpaVBUUmU0N2lWdGJuTFpEeGNrR0NrS1lwUE0lMkZScjNrYnlSaHNZT3RSRGlRb25Gb0JTSHJCT0kxOHJPZU9QdnI3NllyQ2VVYmY1ZlR2ak9kZEowZ1ExdU1Qa3U5ejZod2ppRVpoZ09NbiUyQmFhVWVIUUpJT2tNRDdLTUE1UVFQMDFIUDE4aFBiZnZEVHZaUEVUcWIyWWlTMUJXcm96TTZqazlTUEpKSGtaWjVxRmFndG9hTm5ieVpnMUZFNHNVUFJkbEFRcHdrZFNqdkRaQUolMkZveE50JTJCdzZObEdiUVZGbDVpS0xLS3NYQ0F3eUZRWjhTM2NpdTY1aG8xbEJKNSUyRmtaazNPQkdqcEpXR21WQ21zalRrUXZBOEpIQ1VVN3M1ZUltZXZ6ZyUyRmQ3QkdGaHpDQVJJZjh1Vk4zSjVIZWgxVk0lMkJIbGtvMnklMkZIQnhGME5Kb2xmbzM4ZUR1Skp4YmYwcm8lMkZuTXVyaDhoTSUyRnVwSDR0ZFQ4emNpT0ZzVEM4U0FnUW9KZlJ4S3pDdXZmdzBrJTJGOE1EeDd4cVV5ZXolMkJTNDhFU0lON0t5Nk9VcGZBdHJ4emh4MDNVUjRtMGMlMkZaRjd0bktXMm1tYTRsOXl1dGhUU0laSXZ4UGk2RWNwWlcwUE0weHRPempvJTJCZjRHUGZ2NHIxcU5xQVVGWXM5ZGlKTEJDMUNJYTdGWng4ZlVsd0kyMkx1TnYlMkZmTGJLTUFPZnRIOVR3UlhnNiUyRmlDREFBQUFBRWxGVGtTdVFtQ0MiKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LWVvZi5jc3MubWluIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1lb2YuY3NzLm1pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY2ZDJlMi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LWVvZi5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZGl2LmJhc2U2NC1zaW5nbGVxdW90ZXN7d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQWdDQVlBQUFCemVucjBBQUFBQm1KTFIwUUFBQUFBQUFENVE3dCUyRkFBQUFDWEJJV1hNQUFBM1dBQUFOMWdHUWIzbWNBQUFGclVsRVFWUll3JTJCMlh6MjhrUnhYSFAlMkI5VmRjOHZqMmZHOXVJa20yeVVlRkdFaE5DS1F3QnBqMXlSVUJBbnBKVTRjZVpQNE14ZmtCeHkyR080NWJRWHVFR1FvaFVLaWdRJTJCc0JCRTFzYllYdjhZeiUyRlJNZDlmalVOMDlQVjVuRlpBNGtaWmE3OVczcXV1OWVyJTJGcU5meSUyRlB3SmdadHklMkZmeiUyRloyOXZycG1tcWhsV1RnbUZnMVVwYmZXaFloRzZZcTJjRmklMkZOcmo5bkp5V254JTJCUEhqZWFmYk1URXpQdmpWQjklMkI2ZCUyQiUyRmV6d2VEd1YxQmZIdWJpdmtDM2xaeWElMkY0bTdOcDhVWllYaHdlSEg3NzMzcnZ2QzBLeXY3JTJGJTJGN3AwN2QzNHFJanl2cjYzUk5iNGw0Q2JzUlVyTnJxNk9mdmZSUnolMkZ4RHg0ODZBJTJGNmc3dlhoWDlaSWYlMkJwNEpvbWFUb1pqOGQ3UGsxU0ZSRlhiMWFXb2RxMDlsJTJGOVladSUyRkNXTVZMOWUlMkZhVkZWUVZVUkVFRzhyM1ZVRVo0Y1glMkZITDMwJTJCNXNoUnRBaEZxNHdnZ05iNkdyWGdWYTJLMmpZdEFDSUh2N1N6NTRUZkhqV1dhZ0JPQnkwWGd0JTJCY2pMdHdReFZDcE53VVJRYXQxRGRZYVQ3cHdkd0tERkE2bmNIZ0ZpekptU2IzV0xQRGE3UE1JVmxiMmRhcVp4ZE9OVW5BZXRFb2pFZEJHaVhYaFRtQWpoWjAlMkIzTjZBbHplRVJPSDFUWGlXR2YlMkJjd21rV1pZbkFmQWtkeDFwcSUyQmhVYlQ5ejNJRWxVSmxWaEk0V3NnQ0xVeWdnaTRNUVlkNFZYTm1DWVJxWE9zcFY3VW9IYlEzaHBFTWVMQWs1bWtGWVJZbFdJJTJCSFo2Q1REd2tLU1FxckE3Z0ZlSE1GM0M2VnlZTG1GWkdpS0NFNkdyTUZzYVdiN3l1Vk9oNjZOMUZrVVVwQkozVHl2Rm92VG9CbDlYTWJOWTJiWjcwQnNLZlc5NGhieUVyb3NtWHBRd3k0VmdrQ2pNaXpqdlJSaWswRXRpTE53YWdCZjQ2NWx3T3F0a0VURW42MFhUMSUyQmxUYXpycEtsUiUyQktrb295M1hmYjNXajN3R1dKUlFobm5pN0I1M3E1RnFaNCUyRlVSN1BZaEdNeHl1TXdnV1ZxVHhyWVdBd1pZUVg3OEo1aThpZTl0eFNBa29PcXFRQXFrM3BCZ0tMRGhsWTVYVktQQ2kzdzk3WVJvS1NGYWNlQ2dGMmhxU1hSQlBRQUlPY1hSSDhoUCUyRjB5NiUyQlJwV0xyRXlnM1NiUzl0bXpnZ3pKUVNMUVpvNHhvT0U4VWJDc0pmUTd6aTZpYUlpelo1T0JWZlhES1BpcmVXQyUyQnZBWVdPQnFlc3psOUpnMDNhZmJINk9xR0glMkZCU1VycWJyRklYaUhvaUVEQyUyRlB5U2kyZDlublpISkU3b3BZN2RjWSUyRmRjWmVqODR6cFBHZlk5VXcyRXJZR0NmMk80bVVWRXpFTFd0cVV4WktqZjN6SzJjVVJ6aWNNUnklMkJ6dmJ1SDh5bEZQcVhJUHFOY3pDbEtZMW1VWkZjblNES2t2JTJGVU51cHRiV0clMkJMdyUyRk1oJTJGenJZcEtCSEtWM09OT1h6WXhlVjIwejQ5cWhzN2dhTVdJanFRUWlCeFZYQjRpcmcwNXl6NHUlMkZNcGllb0p1VExqREpmVUpZQnpCQUZVVUhraE12THZ6RlB1dlEySnZRM2R1aDBSJTJGanVpRFFkSW42TUpkdmt4VGFmWlVQdWFONlVhT282VU50Z05sOXdlYm9ndXdxb0E1ZkNqRXVzTkN6RThMSlFGUnVOcnpwUUQlMkJybVpOTTU1JTJGNEE1ejFKMmlIdERFZzZmWkswajB1SGxEcmgyTjRpM1B0dWMlMkJINXRqcDVIbGlXUW1tT1VBaGxZZTBycVVxV1NFT2hjWjA1QXZFMVVkQ29sU1FKYUhXbFNVWWdKeSUyRk8yZkZmbyUyRjM0cGlwaEZPWjRPcnZOZEw1RUpaYmNtRThPUXpGeElKRUdFZ0llRTElMkZocmpKTHhaY09ySVZwVkM3VFcwMFdtTFd5QU1ERXMlMkJpOXdWSkR0RzE3WTIxdlZtTnhMS3FJT2tRcXFvcTJxSE9SbWdqOVVRY3phN21nRm00R21pRGpPNUM3MkRTb1E2dVBWVFclMkJ6dUZVY1EydGVLZDRwemhkOGI2TnU2amc3dlpzcmIxckNsRUl4aHU3UTM3eDQ3Zkl5M2olMkZpOGlxcWxVdUVXVEZOJTJGT3JNVTNmRUV1aFVNOEZJUERxWmdjUklWaHNBWHh0akdER1M1TSUyQlAlMkZ2JTJCbTd5b3BWclJWc1BhYnNXJTJCWUcxVCUyRnkzS2FocVNnNmNIUmI1Y1RtdDVaWGh4UTduUzZ5WnNWV09hakRGYncySlNDU0dFSXN1eUMlMkYlMkZvMGFQcCUyRnY3JTJCcjlOTzUlMkY1Z01PaEpMTm4lMkZwUUxyTGZ3NnRrS0tvckNEZzROUFAlMkZua2p4JTJGTE96OTZoMmVuenladmYlMkJmdEg5emEyZm02cUxybk85dEdrMnZZODZmJTJGTWxpV1pSZFBuano1emNPSER6JTJCJTJCJTJGaWZpbW9yenYzMUM5WDcxOEclMkZZckNZU05KYTVMZ0FBQUNKNlZGaDBVMjltZEhkaGNtVUFBSGphS3k4djE4dk15eTVPVGl4STFjc3ZTZ2NBTnRnR1dCQlR5bHdBQUFBQVNVVk9SSzVDWUlJJTNEJyk7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO2JvcmRlcjoxcHggc29saWQgIzBhMH1kaXYub3RoZXJkYXRhdXJse2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJvQUFBQWFDQVlBQUFDcFNrek9BQUFBQVhOU1IwSUFyczRjNlFBQUFBbHdTRmx6QUFBTEV3QUFDeE1CQUpxY0dBQUFBQWQwU1UxRkI5a0ZCUTBXRFd3cXdqd0FBQU5NU1VSQlZFakhyZFpiYUZ4VkZBYmdiMmFTVEc2R1RpNm1WSXd4TnhGOXFGSTBSUW5GVXFpWWFtdXRWdXRMYTJ0OUVZMG9QZ2dGb1lnUFJSJTJGYWdoWXZpQSUyQmlJQVl2bUJKS29ZV2lpQkNpZ1ZUVDFGaXNiVWhyRXROa0pwYzVQdVFrakdFbUpxa0xGbWR6Mkh2JTJGYSUyRjNyWDN0dmxtOTVvUyUyRkxva3VadElwYmR2QXM3S0Z0TDIyd2piM1YxQzQxdXB5MmtlMURYQzJrJTJGQmp2MUhIWERyYmtFYW1nN2xYMlA4UVRsZFEyVXRmT0I4dWlKc0hOaUIlMkZpazBHbU8lMkJnWkl4Z25HQTU5bkdDTW9KUGVRYVlQMDQ3aUJEWFpFb2hrQVlvZjQlMkZOeUtsWlJkUiUyRjFBU1pDbm9PTWhXa1VoZU16OUYxbGFKU1JaM2dFcVZ3MWlwWlFqY29CUnJiVDNFejlPSkxoWmtIRzVDRDhsOFE0N3FYaE1acCUyRll4aFZGYXhCTEJ0UWVqZHRBJTJGVHRaUE1JSm5Pa25JMldTWXppY1RZTjhPdFR2SUNaYkVDeGRyNVBrbTZpUEwwQzNjJTJCZ2tmSUpnaSUyRjRMblAlMkZ1ZFJLRDNLNGpmMVZKR0xFQWl1ejZWbkE0QUdhbTFoN2dwTkl6U0ZlNjZEM051ckxLVmhKTmtIbzA3TjlWOUJFM1hIT1lteWV1aXJxRzFsOW1kSGdPa0RTR2Q4JTJGR1d0ZzlSb2E1NmxyWWRjaER0UlFQTGxDa0V5d0tWUlNjRGZydXJud0MyZGlpUFRSZTQ3aVZ0Ym5MWkR4Y2tHQ2tLWXBQTSUyRlJyM2tieVJoc1lPdFJEaVFvbkZvQlNIckJPSTE4ck9lT1B2cjc2WXJDZVViZjVmVHZqT2RkSjBnUTF1TVBrdTl6Nmh3amlFWmhnT01uJTJCYWFVZUhRSklPa01EN0tNQTVRUVAwMUhQMThoUGJmdkRUdlpQRVRxYjJZaVMxQldyb3pNNmprOVNQSkpIa1paNXFGYWd0b2FObmJ5WmcxRkU0c1VQUmRsQVFwd2tkU2p2RFpBSiUyRm94TnQlMkJ3Nk5sR2JRVkZsNWlLTEtLc1hDQXd5RlFaOFMzY2l1NjVobzFsQko1JTJGa1prM09CR2pwSldHbVZDbXNqVGtRdkE4SkhDVVU3czVlSW1ldnpnJTJGZDdCR0ZoekNBUklmOHVWTjNKNUhlaDFWTSUyQkhsa28yeSUyRkhCeEYwTkpvbGZvMzhlRHVKSnhiZjBybyUyRm5NdXJoOGhNJTJGdXBINHRkVDh6Y2lPRnNUQzhTQWdRb0pmUnhLekN1dmZ3MGslMkY4TUR4N3hxVXlleiUyQlM0OEVTSU43S3k2T1VwZkF0cnh6aHgwM1VSNG0wYyUyRlpGN3RuS1cybW1hNGw5eXV0aFRTSVpJdnhQaTZFY3BaVzBQTTB4dE96am8lMkJmNEdQZnY0cjFxTnFBVUZZczlkaUpMQkMxQ0lhN0ZaeDhmVWx3STIyTHVOdiUyRmZMYktNQU9mdEg5VHdSWGc2JTJGaUNEQUFBQUFFbEZUa1N1UW1DQyIpfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1iYXNlNjQtbGluZWJyZWFraW5kYXRhLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1iYXNlNjQtbGluZWJyZWFraW5kYXRhLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNmNjg2Zi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LWxpbmVicmVha2luZGF0YS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0ueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtcmluZy12bWwsCi0ueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtY2VudGVyLWJ1dHRvbi12bWwsCi0ueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtbWFya2VyIHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLAotLnl1aTMtc2tpbi1uaWdodCB2XDpvdmFsLnl1aTMtZGlhbC1tYXJrZXItbWF4LW1pbiwKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1tYXJrZXItdm1sLAotLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLWhhbmRsZS12bWwgewotICAgIGJhY2tncm91bmQ6IG5vbmU7Ci0gICAgb3BhY2l0eToxOwotfQotCi1kaXYuYmFzZTY0LWRvdWJsZXF1b3RlcyB7Ci0gICAgd2lkdGg6MTAwcHg7Ci0gICAgaGVpZ2h0OjEwMHB4OwotICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCAgICJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCb0FBQUFhQ0FZQUFBQ3BTa3pPQUFBQUFYTlNSMElBcnM0YzZRQUFBQWx3U0ZsekFBQUxFd0FBQ3hNQkFKcWNHQUFBQUFkMFNVMUZCOWtGQlEwV0RXd3EKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3andBQUFOTVNVUkJWRWpIcmRaYmFGeFZGQWJnYjJhU1RHNkdUaTZtVkl3eE54RjlxRkkwUlFuRlVxaVlhbXV0VnV0TGEydDlFWTBvUGdnRm9ZZ1BSUiUyRmFnaFl2aUElMkJpSUFZdm1CSktvWVdpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaUJDaWdWVFQxRmlzYlVockV0TmtKcGM1UHVRa2pHRW1KcWtMRm1kejJIdiUyRmElMkYzclgzdHZsbTk1b1MlMkZMb2t1WnRJcGJkdkFzN0tGdEwyMndqYjNWMUM0MXVweTJrZTFEWEMyayUyRkJqdgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFISFhEcmJrRWFtZzdsWDJQOFFUbGRRMlV0Zk9COHVpSnNITmlCJTJGaWswR21PJTJCZ1pJeGduR0E1OW5HQ01vSlBlUWFZUDA0N2lCRFhaRW9oa0FZb2Y0JTJGTnlLbFpSZFIlMkYxQVNaQ25vT00KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoV2tVaGVNejlGMWxhSlNSWjNnRXFWdzFpcFpRamNvQlJyYlQzRXo5T0pMaFprSEc1Q0Q4bDhRNDdxWGhNWnAlMkZZeGhWRmF4QkxCdFFlamR0QSUyRlR0WlBNSUpuT2tuSTJXU1l6aWNUWU44T3RUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdklDWmJFQ3hkcjVQa202aVBMMEMzYyUyQmdrZklKZ2klMkY0TG5QJTJGdWRSS0QzSzRqZjFWSkdMRUFpdXo2Vm5BNEFHYW0xaDdncE5JelNGZTY2RDNOdXJMS1ZoSk5rSG8wN045VjlCRTNYSE9ZbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlldWlycUcxbDltZEhnT2tEU0dkOCUyRkdXdGc5Um9hNTZscllkY2hEdFJRUExsQ2tFeXdLVlJTY0RmcnVybndDMmRpaVBUUmU0N2lWdGJuTFpEeGNrR0NrS1lwUE0lMkZScjNrYnlSaHNZT3RSRGkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRb25Gb0JTSHJCT0kxOHJPZU9QdnI3NllyQ2VVYmY1ZlR2ak9kZEowZ1ExdU1Qa3U5ejZod2ppRVpoZ09NbiUyQmFhVWVIUUpJT2tNRDdLTUE1UVFQMDFIUDE4aFBiZnZEVHZaUEVUcWIyWWlTMUJXCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm96TTZqazlTUEpKSGtaWjVxRmFndG9hTm5ieVpnMUZFNHNVUFJkbEFRcHdrZFNqdkRaQUolMkZveE50JTJCdzZObEdiUVZGbDVpS0xLS3NYQ0F3eUZRWjhTM2NpdTY1aG8xbEJKNSUyRmtaazNPQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdqcEpXR21WQ21zalRrUXZBOEpIQ1VVN3M1ZUltZXZ6ZyUyRmQ3QkdGaHpDQVJJZjh1Vk4zSjVIZWgxVk0lMkJIbGtvMnklMkZIQnhGME5Kb2xmbzM4ZUR1Skp4YmYwcm8lMkZuTXVyaDhoTSUyRnUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSDR0ZFQ4emNpT0ZzVEM4U0FnUW9KZlJ4S3pDdXZmdzBrJTJGOE1EeDd4cVV5ZXolMkJTNDhFU0lON0t5Nk9VcGZBdHJ4emh4MDNVUjRtMGMlMkZaRjd0bktXMm1tYTRsOXl1dGhUU0laSXZ4UGk2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNwWlcwUE0weHRPempvJTJCZjRHUGZ2NHIxcU5xQVVGWXM5ZGlKTEJDMUNJYTdGWng4ZlVsd0kyMkx1TnYlMkZmTGJLTUFPZnRIOVR3UlhnNiUyRmlDREFBQUFBRWxGVGtTdVFtQ0MiICk7Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgY2VudGVyOwotICAgIGJvcmRlcjoxcHggc29saWQgIzAwYWEwMDsKLX0KLQotLnl1aS1za2luLXNhbSAueXVpLWgtc2xpZGVyIHsKLSAgICBiYWNrZ3JvdW5kOiB1cmwoYmctaC5naWYpIG5vLXJlcGVhdCA1cHggMDsKLSAgICBoZWlnaHQ6IDI4cHg7Ci0gICAgd2lkdGg6IDIyOHB4OwotfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1saW5lYnJlYWtpbmRhdGEuY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1iYXNlNjQtbGluZWJyZWFraW5kYXRhLmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYzBlMTcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1saW5lYnJlYWtpbmRhdGEuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1yaW5nLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtY2VudGVyLWJ1dHRvbi12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlciB2XDpvdmFsLnl1aTMtZGlhbC1tYXJrZXItbWF4LW1pbiwueXVpMy1za2luLW5pZ2h0IHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1tYXJrZXItdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1oYW5kbGUtdm1se2JhY2tncm91bmQ6MDtvcGFjaXR5OjF9ZGl2LmJhc2U2NC1kb3VibGVxdW90ZXN7d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCb0FBQUFhQ0FZQUFBQ3BTa3pPQUFBQUFYTlNSMElBcnM0YzZRQUFBQWx3U0ZsekFBQUxFd0FBQ3hNQkFKcWNHQUFBQUFkMFNVMUZCOWtGQlEwV0RXd3F3andBQUFOTVNVUkJWRWpIcmRaYmFGeFZGQWJnYjJhU1RHNkdUaTZtVkl3eE54RjlxRkkwUlFuRlVxaVlhbXV0VnV0TGEydDlFWTBvUGdnRm9ZZ1BSUiUyRmFnaFl2aUElMkJpSUFZdm1CSktvWVdpaUJDaWdWVFQxRmlzYlVockV0TmtKcGM1UHVRa2pHRW1KcWtMRm1kejJIdiUyRmElMkYzclgzdHZsbTk1b1MlMkZMb2t1WnRJcGJkdkFzN0tGdEwyMndqYjNWMUM0MXVweTJrZTFEWEMyayUyRkJqdjFISFhEcmJrRWFtZzdsWDJQOFFUbGRRMlV0Zk9COHVpSnNITmlCJTJGaWswR21PJTJCZ1pJeGduR0E1OW5HQ01vSlBlUWFZUDA0N2lCRFhaRW9oa0FZb2Y0JTJGTnlLbFpSZFIlMkYxQVNaQ25vT01oV2tVaGVNejlGMWxhSlNSWjNnRXFWdzFpcFpRamNvQlJyYlQzRXo5T0pMaFprSEc1Q0Q4bDhRNDdxWGhNWnAlMkZZeGhWRmF4QkxCdFFlamR0QSUyRlR0WlBNSUpuT2tuSTJXU1l6aWNUWU44T3RUdklDWmJFQ3hkcjVQa202aVBMMEMzYyUyQmdrZklKZ2klMkY0TG5QJTJGdWRSS0QzSzRqZjFWSkdMRUFpdXo2Vm5BNEFHYW0xaDdncE5JelNGZTY2RDNOdXJMS1ZoSk5rSG8wN045VjlCRTNYSE9ZbXlldWlycUcxbDltZEhnT2tEU0dkOCUyRkdXdGc5Um9hNTZscllkY2hEdFJRUExsQ2tFeXdLVlJTY0RmcnVybndDMmRpaVBUUmU0N2lWdGJuTFpEeGNrR0NrS1lwUE0lMkZScjNrYnlSaHNZT3RSRGlRb25Gb0JTSHJCT0kxOHJPZU9QdnI3NllyQ2VVYmY1ZlR2ak9kZEowZ1ExdU1Qa3U5ejZod2ppRVpoZ09NbiUyQmFhVWVIUUpJT2tNRDdLTUE1UVFQMDFIUDE4aFBiZnZEVHZaUEVUcWIyWWlTMUJXcm96TTZqazlTUEpKSGtaWjVxRmFndG9hTm5ieVpnMUZFNHNVUFJkbEFRcHdrZFNqdkRaQUolMkZveE50JTJCdzZObEdiUVZGbDVpS0xLS3NYQ0F3eUZRWjhTM2NpdTY1aG8xbEJKNSUyRmtaazNPQkdqcEpXR21WQ21zalRrUXZBOEpIQ1VVN3M1ZUltZXZ6ZyUyRmQ3QkdGaHpDQVJJZjh1Vk4zSjVIZWgxVk0lMkJIbGtvMnklMkZIQnhGME5Kb2xmbzM4ZUR1Skp4YmYwcm8lMkZuTXVyaDhoTSUyRnVwSDR0ZFQ4emNpT0ZzVEM4U0FnUW9KZlJ4S3pDdXZmdzBrJTJGOE1EeDd4cVV5ZXolMkJTNDhFU0lON0t5Nk9VcGZBdHJ4emh4MDNVUjRtMGMlMkZaRjd0bktXMm1tYTRsOXl1dGhUU0laSXZ4UGk2RWNwWlcwUE0weHRPempvJTJCZjRHUGZ2NHIxcU5xQVVGWXM5ZGlKTEJDMUNJYTdGWng4ZlVsd0kyMkx1TnYlMkZmTGJLTUFPZnRIOVR3UlhnNiUyRmlDREFBQUFBRWxGVGtTdVFtQ0MiKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCAjMGEwfS55dWktc2tpbi1zYW0gLnl1aS1oLXNsaWRlcntiYWNrZ3JvdW5kOnVybChiZy1oLmdpZikgbm8tcmVwZWF0IDVweCAwO2hlaWdodDoyOHB4O3dpZHRoOjIyOHB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1iYXNlNjQtbm9xdW90ZXMuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1ub3F1b3Rlcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYjA5NjIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1ub3F1b3Rlcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0ueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtcmluZy12bWwsCi0ueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtY2VudGVyLWJ1dHRvbi12bWwsCi0ueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtbWFya2VyIHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLAotLnl1aTMtc2tpbi1uaWdodCB2XDpvdmFsLnl1aTMtZGlhbC1tYXJrZXItbWF4LW1pbiwKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1tYXJrZXItdm1sLAotLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLWhhbmRsZS12bWwgewotICAgIGJhY2tncm91bmQ6IG5vbmU7Ci0gICAgb3BhY2l0eToxOwotfQotCi1kaXYuYmFzZTY0LW5vcXVvdGVzIHsKLSAgICB3aWR0aDoxMDBweDsKLSAgICBoZWlnaHQ6MTAwcHg7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoICAgCi0gICAgICAgIGRhdGE6aW1hZ2UvanBlZztiYXNlNjQsCi0gICAgICAgICUyRjlqJTJGNEFBUVNrWkpSZ0FCQWdFQVpBQmtBQUQlMkY0UmZKUlhocFpnQUFUVTBBS2dBQUFBZ0FCd0VTQUFNQUFBQUJBQUVBQUFFYUFBVUFBQUFCQUFBQVlnRWJBQVVBQUFBQkFBQUFhZ0VvQUFNQUFBQUJBQUlBQUFFeEFBSUFBQUFlQUFBQWNnRXlBQUlBQUFBVUFBQUFrSWRwQUFRQUFBQUJBQUFBcEFBQUFOQUFEMEpBQUFBbkVBQVBRa0FBQUNjUVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE1pQk5ZV05wYm5SdmMyZ0FNakF3T0Rvd056b3hPU0F4TkRvMU9Eb3dOUUFBQTZBQkFBTUFBQUFCJTJGJTJGOEFBS0FDQUFRQUFBQUJBQUFCd3FBREFBUUFBQUFCQUFBQlJRQUFBQUFBQUFBR0FRTUFBd0FBQUFFQUJnQUFBUm9BQlFBQUFBRUFBQUVlQVJzQUJRQUFBQUVBQUFFbUFTZ0FBd0FBQUFFQUFnQUFBZ0VBQkFBQUFBRUFBQUV1QWdJQUJBQUFBQUVBQUJhVEFBQUFBQUFBQUVnQUFBQUJBQUFBU0FBQUFBSCUyRjJQJTJGZ0FCQktSa2xHQUFFQ0FBQklBRWdBQVAlMkZ0QUF4QlpHOWlaVjlEVFFBQyUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFEQWdJQ0FrSURBa0pEQkVMQ2dzUkZROE1EQThWR0JNVEZSTVRHQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVOQ3dzTkRnMFFEZzRRRkE0T0RoUVVEZzRPRGhRUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQWRBQ2dBd0VpQUFJUkFRTVJBZiUyRmRBQVFBQ3YlMkZFQVQ4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFNQUFRSUVCUVlIQ0FrS0N3RUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFCQkFFREFnUUNCUWNHQ0FVRERETUJBQUlSQXdRaEVqRUZRVkZoRXlKeGdUSUdGSkdoc1VJakpCVlN3V0l6TkhLQzBVTUhKWkpUOE9IeFkzTTFGcUt5Z3laRWsxUmtSY0tqZERZWDBsWGlaZkt6aE1QVGRlUHpSaWVVcElXMGxjVFU1UFNsdGNYVjVmVldabmFHbHFhMnh0Ym05amRIVjJkM2g1ZW50OGZYNSUyRmNSQUFJQ0FRSUVCQU1FQlFZSEJ3WUZOUUVBQWhFRElURVNCRUZSWVhFaUV3VXlnWkVVb2JGQ0k4RlMwZkF6SkdMaGNvS1NRMU1WWTNNMDhTVUdGcUt5Z3djbU5jTFNSSk5Vb3hka1JWVTJkR1hpOHJPRXc5TjE0JTJGTkdsS1NGdEpYRTFPVDBwYlhGMWVYMVZtWjJocGFtdHNiVzV2WW5OMGRYWjNlSGw2ZTN4JTJGJTJGYUFBd0RBUUFDRVFNUkFEOEE5VlNTU1NVcEpKSkpTa2tra2xLU1NTU1VzNHVEU1dpWFJvT0pLRmkzT3Z4Mld2YnNlNGU1Z013Um81c295cGRPeU45bVRTUkhwV3ZqNE9jNCUyRndEVmY5V2twdXBKSkpLVWtra2twU1NTU1NsSkpKSktVa2tra3AlMkYlMkYwUFZVa2xDcXh0dGJiRyUyRlJlQTRmQXBLWnBKSkpLVW8yV05ycmRZOHcxZ0xuSHlBbFZPc1d2b3dYWkRaJTJGUU9aYThEOXhybW0zJTJGTnIzUFVzd20lMkZwbVFHYW15bDRiSGlXdWhKVFlxc0Z0VExCdzlvZDk0VTFRNkZrZmFPazR0c3p1cVlmd1Y5SlNsbDElMkZvT3Qyc09ndURYZ2VUbTdmJTJGUG1OJTJGd0NDTFVXWjFWaHJ5c2JLQSUyQmp1YTd6Z3R1WiUyRjFGcUlVWFRTUWN2S1ppNDdzaDdYT1kwdEJEWUpoem1zM2FrZlIzYmxWZDEzcHJNdHVJJTJCd3NlJTJGNkwzQWhtN24wJTJGVSUyQmkyemFmemtGT2dxOSUyQmRqMFpGT000azNaRHRyR05Fbmh6dDd2M1diV1BVOGJKcHlhdlZwZHVadWMyZU5XT05iMiUyRjJYdFhPWTJWVTdyQTZobk85UnVKUyUyQnIxaE8xbGd1R0pidVl6MmV4dHZ2M2Z6TFBVJTJGd0NFU1U5UWtra2twU1NTU1NsSkpKSktmJTJGJTJGUjlWV2YwaXdpdTNGZjlMR3Nld1QlMkI2RDdQJTJGQXl4eTBGbXVuSDZ4UERNcGdkJTJGYlpGVCUyRndEb094JTJGJTJCMjBRcDBsQzAyQ3R4cUFMd0R0QjRKOEZOSkJUVm92eCUyQm80anZiTExHbGx0VHVSTXNzcmYlMkZBTkppeiUyQmhaRHFNTyUyRkV5Q1gyZE9jNnQlMkJrdWMxZ210JTJCMyUyRmhhUFRlb1o1czZSMUlackJHRGxrTnZJJTJCalhjWVl5eCUyRjd0V1Y5QiUyRndEdyUyRndEd2x5RDFMcVdIMGpxMk4xTzU1cnhPb2dZMXJ3QzRDOXV1UDZtemR0OVdsMXY2VCUyQmIlMkZBRmRGUyUyRjFNeXElMkYyVlRodXNhJTJCMnRzdDJrNnNQdVk3M0JybSUyRm8zVnYyZnklMkYzRjBTNFRBenElMkJtJTJGV0RxdUtHbmJoV095YTYyRFVVbHJjbXl1bGt0WjZmMmV5MTlXejglMkYyTHMyWiUyQkZZeDFqTDZ5eGdCZSUyRmNJQUkzQ1hmTklxWlgzdXJzcXFyWjZqN1RxSmdOWTJQVXNQUDBkeXBmV0olMkZvOU5PVDJ4cmFySFR4czN0WmtmJTJCeTc3VlI2djliZWpkTnNia2IzWmJxbTJzZlZqZ09PaHJkWkZsanFzZmZYcyUyRm12VjlWJTJGJTJCRFhIZFolMkJ1dlU4ekE2aSUyQmowMlkxemF3YVpMdDJMWTIxdGx0YjdYT2I2ajYlMkZ3RFIxViUyRnpWMzZ2NnJQVllGVSUyQmlDczVQUzdjZDQzTzJXVU9CNzdkMVglMkZUMjdsd3ZWbk55S0s4ZDE1cTZoaWoyMDdvOWRnM0RIZFc5bTl6THY4QVElMkY0V3U3MUslMkZUdHI5YXF6SiUyQnVIVjh0bVIwek5veUx2c1hVOE5yN2NkdGptdE4xSjlLJTJCMnBvZHNiazElMkZvJTJGOEEwWXNuRzZ0ZSUyQm5MWmJkWFhZNnB0dEFETnd1Y3dtaHYyY1didjB0bnIlMkZwS25mcEtiS2Y4QXRzcUQxRHZyam5mVjcwY0tsbGRnemdicWpmN1FIQjNwMnNHMHNiNmx2MCUyRmZaNlRFY1pnNjMweHoydmV6SzZqVmJmaFZ0ZjZiaVElMkJ4bHRtTlk3YTJ6OUpzM1Z1JTJGd2F5dnJIaDElMkJoaGRLdjNYdWJqQmhZOXdEYkh0UHBPZFhrT0g2dDFEZCUyRlJzbCUyRjZDJTJGd0RvbVY3Rmc5V2MlMkZGJTJCcTNSTDZiaWJlbjVXVmpoNGxsamR4YmV4bHRmMDZMYTl2dnAlMkZNJTJGd0FGWiUyRmhFdXFuMHI2bGZYTTlXWXpwdlZvbzZ3eHZjYkJjR2o5THRyMDlMTG9qOWJ4ZiUyQnZVJTJGb2Y1bXo5YXZySmQwJTJCMmpCd0hBWlRyY2QxN2lBN2JWWmEyblkwSCUyRkNYdzl2JTJGQUFkZiUyRldsNXppZFFaOVpjWTNsM29kZHdnMnoxbUhaNnpXZlF2M3QyJTJCbmswJTJGd0NuJTJGd0RSZjh4ZjZEZjFEcXZYR1olMkJlNXR6c2k3R2Q2bG0ya1BzcU5icXFPRzElMkY0Q3V4bnB0JTJGUzclMkY5STlBTGpSMUdoN2Y5NiUyQnVKSnBBMUtaajJXTkRtT0Rtbmh3TWhKYXlTU1NTVSUyRndEJTJGMHZWVm45YWlyRkdZU0dqRWNMWHVPa1YlMkZ6ZDVKJTJGZFpVJTJGd0JYJTJGcmEwRUhNOUQ3SmY5cEU0JTJGcHY5WUhYMmJUNm1uOVJJS2NFOVU2bGdYbkpEdjJsMGpOJTJGUzQ5N1MzOUM1MzBzT3l4biUyQkJjJTJGJTJCaDVQODMlMkYya3lmUyUyRlI1TmxQcnYxNnV3Y3pFeHNQSEZvekxCUldIejZycmlXTTlPdXY2SHM5VDN2c2V1ZTZCOWJ1b1pGNXhCVTg0QkRDJTJCdG9aWVcxUGN6RyUyQjAyR3htNzFHYjJYUDJmb2Q3UDVtdGN0MTY3cSUyRlQ4N0dkZmslMkZic2NXSEk2VjFOclFOR3UzTzJOWjZmcDVGTjlkVGNySDNlcFI2ZjlSS3dSWVh6aEtFdUdZbyUyRnhmU012TTZsWmxGJTJGVmZTb2JVMTFROU1HeXFMZmElMkJyUDlQSnNyOUt6MDluNmJHcSUyRjdkV04xejlWeEMzS2ZaVDAlMkIlMkJQVXlHZzVOSWFQZFU3ZXpaZTdLeFBSJTJGUjVHeXIxc1g5RGI2JTJGd0RndVp4JTJCdjM1MmJlNFdOd2Z0JTJCOXRiMm4yMW16YSUyRjA3WG4yJTJGcDdxbVZlcDZkYlAwdnFmb2xxWkQ3bVk5MWVEbVhoOXBCQVpER2pUOWF3dmIlMkJrcDNXJTJGcDJNZGtmcGF2MWIlMkJYVWIwV3VsVGVQMjNoNURpM0pMM1VZV1RZemx6YktuMXNjNXJON2JhTTNGWjlwdzh4cnZTdnIlMkZRZjBpbTZ1dkg2dlk3RzZoZlMybXgxV0ZZYXE3Ym5rJTJCbzJyMHJLUFRhN2J1c3R4WDIwJTJCeiUyQmxmNFJXJTJGcVBYZU00MDNzJTJGUTlMcGRiUTR2OTdXbDREY1cxbnVkNlBxZnJIMmU5bnN6TWF2TnglMkZzOSUyRjJoQTZpNXI3N0haTEgyNFRuMVc0JTJCVXdqMlB2YTNKZGo1YmZ6YUhiOG43RmslMkY0UDlZeFAwdFg4d3VscWFXZmIxQ3paNkdhTTMwNjIyV0REJTJGU1YxbXAzc2ZZNnRqV09zWTF0Zjg3NzZhJTJGVFE3czI3cUZOVklycXdBZlVzYlpSWHQ5UzBOOUt5MXRYODMlMkJncmUlMkYxc2VqJTJGQUUxbHpLbHRkRHRiaTlaSnNxcWJUYUJYZFMwVGJXNjhQeWNVeE5qOHFySWJSJTJGcFBVJTJGU2I2JTJGVHl2NlZXZjBxdk9yem1zWWFzbkd6SG1rN2d4MVphNksyWFI3c2QlMkI1djZLNzlKWGkzYlBVJTJGVjhpNzFSUlU1JTJGV2FMTXY2a1lqN1NHWDlMNmclMkJxSyUyRm9zcnltZXV4MWNmNEIxN2ZZc3JwdVBtTnhmdHo2M1Bjd2w5RFdEUTJzSXFaa05KJTJGTlplNmx1UjZmJTJGQUFYJTJGQUFTMWYycFhYMHZxJTJCSmxuN0xma1ZWdGEzWkFmbDQ5MjlteW4lMkZBNzZyTHE4NnIlMkJibyUyRjRxeWhWcnVvWmZTZWs0bGRtTTEyUGUyMjdEOVhRQnR2cHR1MyUyQjdkNlZyNjZYZjJQVSUyRndpU25zdXFuRHlMTWZGdE1aT1JqJTJCclhTUGVIRnNlbzJsN2czMUxhJTJGViUyQmglMkYyb3ElMkZ3ZnFmcEZ6blZjZDl1RFppdmF4ekRaWGExenp0WmFYQjFMVyUyQnYlMkZnYiUyRlpWWGk1dHY4MyUyRlJzajlBc0xxZlh2MmowJTJGcFhxUEZlZGdOdXJmYTEwRjN1cXN4OGx2OEFvM09idnJmJTJGQU1UNm4lMkJGUXF1cTU5JTJGVVJlYzF6YjdDSFhNYzhodG13N240N3Y4QnR1Y1BVYjZ2NlA5TGQ2OWlOb1M5SDZWazBaemNwajN0cXFlVzFBQXR1YyUyRjhBbTdNZXlodjZXdlolMkZOWlglMkZBSUV1Z3p1azE0ZUxpTjY5ZmJpNDl1NndnQmp5V05iNmRQNklPYTUyVjZ2dDI0N1AwZEQlMkZBRlAwYWpqZGM2a0JlZWtZUWQxRElzMnRzWlZaYmRWWHQ5dFlxc0c5JTJCMyUyRlRQWiUyQmwlMkZ3QkNzYWpwWFYlMkJ0WDJad28lMkZhbDdXdXZ2OVMwTWVhMiUyRlQyJTJCdlo3bTFlMWo2R1Y3NlBaJTJGcEswTkU3YXZwSDFaNjluZFU2VGk0bVA2bVZaa3RCZGJrUDN1cWJXVFJrakt1WUdiOXQxZTZ2Mjc3NnJQOUl1eXc4VnVKanRvYVM4dGt1ZWVYT2NkejMlMkYybkx5YjZ2ZFp2NkRqREt3bVZ0M2x6YnNaejNWc1pjSGx1VGdYNDk5aGZSWXh1ekp3biUyRnpuc3lLckxMdjhIMnZUJTJGcjloT0RLJTJCc00lMkZadVNXa3ZydEZqQzF3TG12ciUyRldLcVclMkZtJTJCemJaJTJCa1JSNHZWcEtuMDNxJTJGVGVxNDdNbnAlMkJReSUyQnQ3V3ZHMCUyQjRCdzNOOVNzJTJGcEslMkYlMkJ1TlZ4QlQlMkZBUCUyRlQ5VlRPYTE3U3h3RG11QkRtblVFSHNVNlNTbnhmNng5Q3pQcXQxRUNpeDdHTWViZW41UTBjYW5leXlsenZvdXRvM01ydVolMkZoYXYwbnAlMkZwRlVyeWFNakZ2cnpwczZka1BiWm1Vc0h2eDd6RmJlcjRmN3JiTFA2V3olMkZBRWxuJTJCaXZZdlklMkJ1OUw2ZjFYcGwySDFHRzBPRzcxU1EwMXVIMGIyUGQ5QjdQJTJGVWIlMkZ3Qkd2SDh2cEYzVDclMkZRcGNINU5JZWE3YXo2bGVYU2QyJTJCekhqZFc3MHFIYk1uRSUyRndsU1pyRTJOdXpmaktITVklMkJHZnB6UjJuJTJGTDlIOTV3TSUyRkJ5T2s1aHhzZ2l5dXdiNnJtNjEzVkg2TjFYJTJGQUtNclcxMGpxYnJtSER5SGw4TWhqWTNHNnNIZDZQTzMxOGR2NmVpejA3Zlc5UDB2JTJCT0hpUHhjNm45ajU1MllkaDNZbVZ5N0Z0UDUlMkJ2dmZpdSUyRnclMkYlMkZCJTJGcGY1emVoWXYxYTZwVms1V0xuaCUyQkpaaE1MNnJtaVd2c0JZNnQxRm4wbjFOWTc3VHZwJTJGU2Y4V25panFOV25PRXNjakdRNFpCN09pZzBmVjdMZjAxcnI4cnFSMnRlejNYUGJCeDY3WHNZemF5eGpiTWw5bTM4JTJGOUolMkJsJTJGUyUyQnB6cnZVeE1XcXZxTlZ1SmtzeDM0MDJ6VzVvb3NiZFNjaWc3MjVPSGQ5cVk2diUyQmMyWk9MVDZObjg4eTNlNlgxdXlrOU5leHpuWWQlMkJQZGkyTWMxbFR4bDR6dHpuV3UzYktmV1paWGJzOVQwNmYweXBkWTZKMUhyJTJGVkg5V3J0cHN4Nm1NcUZEUyUyRjFXaXNGMzBYTmE1JTJCNTc3YmYwZXl6JTJGUlYlMkJxbkh3VzFSb3RERjZ4YXk0OVR2aWtzOU9ITkJBYzlnMnNmYzFtN1p1MiUyRm9HJTJGUXh2M1BTVDlMdzJkVGJsTSUyQjFXMXNkRGl4b00ydnUzZjA5MzZPdDNwT1pzdXJwJTJGUTVIJTJCaiUyRndhSmo0R1hmMDUyWmplcFJqYm1Pcnl3TnpOakh1bGg5TWVnNXpOJTJCMWxybiUyRjRSOWZwJTJGcEZZeGNIRDZleTZuSXRkU0dBT3RkbEZ3aGxoJTJGUnVIcE4zUHBidjhBNXhucWVtZ0ZPWjElMkZEeU1XNzdUMURJT1F5NHZyYTkxYnFDMDBlbiUyQmlZeCUyRjA2TnJxbmV2JTJGQUlmJTJGQUVqMVd4YUcyc3hLT285TXU2aUszMlVZZU9MSE1MM3ZMck5ycm11MyUyQmx2JTJGQVBSaTFjdnBsMVBVcVczTmZoNVZKMzQlMkJObU85WEV1ckh1JTJGVjd0MWpHTXNZZjBub1A5biUyRkFBTnF2OVE2Vzg0dzYzMGhuMmN1RmQxamNZR3lzalM2cXpMeG1pdTNGeWFkdjg5Nk5YJTJCbCUyQjJlcWhTU0JRMXUlMkZ3ZWQ2ejlYJTJCcnRGSkgxZFpqMWFnRU5zcVp1SUI5RVBzdmJrVzdXajZlUyUyRjZmcSUyQmolMkJqV09jYk53OGhucWROeHEzdGl6WllYT2E0VHk3ZmtXYm1OZCUyRk9iZm9mNFJkcFQxZnFIVXMxcmMlMkZMZmt0eVJVMnZHYTRiU0hOZVB0RkwzZWw2Vm1MbFZlalo3ZjBtJTJGMWNqJTJCWiUyQjBXYnZTZnFuMCUyRnExZVRqZFJJZGxWc3BzcWN4d0JxYzhQYmZXJTJCclgzNzYlMkZUdGYlMkZBS0gwYmNTNnYyV0pYcXVsajRZQ1hFRFpxdXJ4bjFkeFhkUm9zdXc3OGhuWGNSNWRTV3UyMk9yWTJicXNkbjAzWkZUdDkzMk96MlpXTDZsVkxQV29YUzE5SHp1cDlQcSUyQnNmVE1ZdHk4a243WlJYREN5NWhkVmIxREVyZSUyRjlOVTc5THZ4SGJMY2xqN0tmNXJJc3BYRTVtUG05SjZxJTJGTHFhODJZcm12ZlZKSHFVc2QlMkJneXFMYXRsbjBhJTJGMDNwUDhBV3hMbWVyViUyQjVqJTJCeiUyRlU3cXZSJTJCcDlDb3Q2UU5sTEpiWlE1eGRaWGI5TzFsNzNTOTlqbnUzJTJCcTclMkJlJTJGbkVtTjU3cXYxWDZiOWMlMkZxOTlveFdOeCUyQnVZeGN5eDdnOXJqYzJQWHhNNXQzNng2ZGptdDlIMXYwMkwlMkJpOUwlMkZDVldjejlWUHI1MW5wUFdYOUglMkJzeHV5OGJJdEZOb3lEdnRvdDl0SWNOJTJGMDZIZTMxNlAlMkZBRUtvJTJGd0FKOXA5aGJYVzE3bnRhQTk4YjNBUVhRSWJ1UDV5NDMlMkZHQjlRMmRmcCUyRmFYVFd0WjFpbG9FR0dqSVkzJTJGQVBlNyUyQmF5RyUyRjhBYWZKJTJGNnpiJTJCaSUyRlNVSlQyVEs2Nnh0cmFHQUFBQm9BRUFiVzhmeVZKZWNmVWJxUDhBakhQVjMxZFh4TWpKNmMlMkZheTI3TGFNZDFKYU5nc29EeFg5bzlyZjB6YVcyJTJCciUyRlBlcCUyRnBQUjBsUCUyRjlUMVZKSkpKU0ROTCUyRnNyOWdlWEdBQlcxcm5ha0Q2RjM2UCUyQnN1QXd1bVYlMkZXWE5yeEh2Y3ltcWgyUzdJcUxuUmElMkI3SmZqMlVQY0d0cWR2eWZWc3BaN0slMkZRJTJCeTElMkZvYVY2RmZqMDVGWnF2WUxLeVFTMTNFZzdtJTJGOUpLaW12SHByb3JFVjFOREdEd0RSdGFra0VnMk5DTm54RHFkR2IwTHJ1M3FGREhYNDFyTFRXR3hWZXlSNzYyNnRkVm1OYSUyRjFQM0xQV3I5aTJjbXpycFk1dGRCNmd6cEw3S3E3V0dYUHFxZjZEOEhJYzFnWjl1cG8lMkY3VCUyRnptVlglMkZBRFhxcjBick9GMCUyQjQxMzViV1ZGZ2MwNWtEMVdNUDA2YXJpMTdxMjVQODFaJTJCJTJGWCUyQmklMkJuYXVUeXNmcW5RZW9NNmgwNmw5MWVXMkg0andmMXVoZ2M3MExxM0RkVjFYR3htNzhkNyUyRndDZm8lMkZRWGZwSzdHSVJGWDRzMmZON3ZBZUdwUmp3azkzSXlPajVWRG5ONlU1JTJGVU1hJTJGZmxZbExHdUxtJTJCcXhucGZhZHJHMXRkazMwMlVmYXYlMkJzMmVuJTJGTnJRJTJCcmQ5JTJCTmxOZGZTJTJGRHVEWE15OGU3UjFibWpmSiUyRmtOaGw5TnY1OUt0T2VMYk1ETzZGa3RKdGUlMkIlMkZDc3RMaCUyQmhjYXhtNG1ZNW9jNXRMTXIwOFhLM3N0OUg3VFJkJTJGU3FQV1cxMWZBJTJGYSUyQk9PcGRPYzZqcWVNTmxsWWpjZHZ1ZGpXdDl6ZlZyM2I4ZCUyRiUyRm9tJTJGMUUlMkIyRjVqcGYxdTZEajlSeUxLY3F1M3BlYWYxckYxYUdoJTJCaHltMFhNcjkxVGZaa3NyJTJGbmNiJTJGU1dZOWJGVHdmdGZVT3BkUXdSWnZ4c0RMT0xoMnVCZXhyTEgyMVl6TExBSHY5SzNaWCUyRndBSCUyRk9MVXclMkJuZlUlMkY2eFZEQjZsZzQlMkZUdXRFRnJMYUclMkJnTFhEJTJGQzQyelkyeCUyRiUyQmx3N2YwMWY4dXI5T24lMkJyb3lQcWxsWmZUaGhNc3FCWmJsV2h4RmphaEZMTFdFJTJCMjdIWnYzc2JzcjlIOU42MyUyRkJqVzFMOUo5UERhJTJGNnVkY3glMkZVNlRhN2JTSDZ1eExUN1cwT2MwJTJGbzZIVDZtRmwxZnpYJTJCblY5bjFSNnYwN2JiaFp2MnphNHcxNDlLMFZrNmVua01lV1B1MmZ6bjh4VmIlMkZ3ZjBGMUdWaDRtZFNXM01EMnZiQWZBM0FIOXh5b1ltUlowbyUyRlk4OTQlMkJ6dEJOR1M3UWJSJTJCYThuNk96JTJGd0glMkZ0dEx5UmJ5UFVjWE1xenpuWTJOZmg5VHJiWmJra1Z5eHpRQnZ6bSUyQm0wNHZyN2YwZCUyRm8yZnJYJTJCRCUyRlRWMnJjJTJCcm1IMGJxSFQ4ZmNXJTJGYjJOZWQxRnJtV3NhWE9aTGZSTEgwMVclMkJwdTlMJTJCYVhVaUNKSEJXR2VnTTZkMUlkVTZXemJKaSUyRkZiQWFXdVB2ZFYlMkZWJTJGblBUU3RONlU0JTJGV2ZxUGs1amhSajJCb3JEck1YTE9qcW5nZTJtMXJOcm5WM2UxbG5wZjhiJTJGTzFVcm0lMkZxTGxaSDFhJTJCc2VUMDNJd0xhN3M5N0s4bkZyWSUyQng5ZnAlMkJwNk9manVwWjZWdlQzJTJCclkzSSUyRjBQNk95bjlGJTJCalhyS1NDRkpKSkpLVWtra2twJTJGJTJGOVgxVkpKSkpTa2tra2xLUU0zRHB6Y2QyUGJ1QWRCYTloTFhzY05XV1ZQYjlDeGprZEpKVHhIVmZxNE9sNWJjJTJCcTU1ZGx2TExxMkRheDFscHJZN0lGYlA1aTYzYjc3S2Y5SCUyQmslMkZRcnBQcSUyRmNMTUFWbGdydXBjV1hNNGR1Qmo5STB5N2YlMkYxZjAwdnJCMGhuVnVuUG8lMkJqa01tekZ0R2pxN1FDMXRsYjlOanZkJTJGcXhTNmRXTWowdXBIOUZmYlhzeXF3SWFiR3d4MzAlMkZmJTJCaWZXOW45UkhvcHd2ckJoNGVGMVYlMkJYa1UlMkZxbVpRUUxTQjZkZVl4d3V4N0hBZnBHdnM5TCUyRkIlMkY4SjZpdldWWjJkajR2VjhGZ2Zia1klMkZvNVdPOGhvc3JkcjMlMkJpNnQ3bnJlZld4OGIyaDIwaHpaRXdSOUZ3JTJGbElPTGc0JTJCSTY1Mk9DeHQ3dlVmV0Q3UTQlMkZTY3h2NW0lMkY4OUsxSXVqWWo4UHBXTGpXRGElMkJ1c0I3U1pJY2ZjNXU2WGZuRlczMXNlSWUwT0V6QkU2JTJGTlNTUVVwSkpKSlNra2trbEtTU1NTVXBKSkpKVCUyRkFQJTJGVzlWU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyRiUyRlolMkYlMkIwMUlsQm9iM1J2YzJodmNDQXpMakFBT0VKSlRRUWxBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQURoQ1NVMEQ2Z0FBQUFBWUVEdyUyRmVHMXNJSFpsY25OcGIyNDlJakV1TUNJZ1pXNWpiMlJwYm1jOUlsVlVSaTA0SWo4JTJCQ2p3aFJFOURWRmxRUlNCd2JHbHpkQ0JRVlVKTVNVTWdJaTB2TDBGd2NHeGxMeTlFVkVRZ1VFeEpVMVFnTVM0d0x5OUZUaUlnSW1oMGRIQTZMeTkzZDNjdVlYQndiR1V1WTI5dEwwUlVSSE12VUhKdmNHVnlkSGxNYVhOMExURXVNQzVrZEdRaVBnbzhjR3hwYzNRZ2RtVnljMmx2YmowaU1TNHdJajRLUEdScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlNHOXlhWHB2Ym5SaGJGSmxjend2YTJWNVBnb0pQR1JwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVhWFJsYlVGeWNtRjVQQzlyWlhrJTJCQ2drSlBHRnljbUY1UGdvSkNRazhaR2xqZEQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFF1VUUxSWIzSnBlbTl1ZEdGc1VtVnpQQzlyWlhrJTJCQ2drSkNRazhjbVZoYkQ0M01qd3ZjbVZoYkQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1R3dlpHbGpkRDRLQ1FrOEwyRnljbUY1UGdvSlBDOWthV04wUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFU5eWFXVnVkR0YwYVc5dVBDOXJaWGslMkJDZ2s4WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExtcHZZblJwWTJ0bGREd3ZjM1J5YVc1blBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRazhZWEp5WVhrJTJCQ2drSkNUeGthV04wUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGblpVWnZjbTFoZEM1UVRVOXlhV1Z1ZEdGMGFXOXVQQzlyWlhrJTJCQ2drSkNRazhhVzUwWldkbGNqNHhQQzlwYm5SbFoyVnlQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlUyTmhiR2x1Wnp3dmEyVjVQZ29KUEdScFkzUSUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YVhSbGJVRnljbUY1UEM5clpYayUyQkNna0pQR0Z5Y21GNVBnb0pDUWs4WkdsamRENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhRdVVFMVRZMkZzYVc1blBDOXJaWGslMkJDZ2tKQ1FrOGNtVmhiRDR4UEM5eVpXRnNQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4U1pYTThMMnRsZVQ0S0NUeGthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1amNtVmhkRzl5UEM5clpYayUyQkNna0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDVHhoY25KaGVUNEtDUWtKUEdScFkzUSUyQkNna0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5WbVZ5ZEdsallXeFNaWE04TDJ0bGVUNEtDUWtKQ1R4eVpXRnNQamN5UEM5eVpXRnNQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4VFkyRnNhVzVuUEM5clpYayUyQkNnazhaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG1wdlluUnBZMnRsZER3dmMzUnlhVzVuUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrOFlYSnlZWGslMkJDZ2tKQ1R4a2FXTjBQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFZabGNuUnBZMkZzVTJOaGJHbHVaend2YTJWNVBnb0pDUWtKUEhKbFlXdyUyQk1Ud3ZjbVZoYkQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1R3dlpHbGpkRDRLQ1FrOEwyRnljbUY1UGdvSlBDOWthV04wUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVjM1ZpVkdsamEyVjBMbkJoY0dWeVgybHVabTlmZEdsamEyVjBQQzlyWlhrJTJCQ2drOFpHbGpkRDRLQ1FrOGEyVjVQbEJOVUZCRVVHRndaWEpEYjJSbFRtRnRaVHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBsQk5VRkJFVUdGd1pYSkRiMlJsVG1GdFpUd3ZhMlY1UGdvSkNRa0pDVHh6ZEhKcGJtYyUyQlRHVjBkR1Z5UEM5emRISnBibWMlMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlVFMVVhVzluWVZCaGNHVnlUbUZ0WlR3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbEJOVkdsdloyRlFZWEJsY2s1aGJXVThMMnRsZVQ0S0NRa0pDUWs4YzNSeWFXNW5QbTVoTFd4bGRIUmxjand2YzNSeWFXNW5QZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNRazhhVzUwWldkbGNqNHdQQzlwYm5SbFoyVnlQZ29KQ1FrSlBDOWthV04wUGdvSkNRazhMMkZ5Y21GNVBnb0pDVHd2WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5RV1JxZFhOMFpXUlFZV2RsVW1WamREd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlXZGxVbVZqZER3dmEyVjVQZ29KQ1FrSkNUeGhjbkpoZVQ0S0NRa0pDUWtKUEhKbFlXdyUyQk1DNHdQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDR3TGpBOEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpjek5Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQk5UYzJQQzl5WldGc1Bnb0pDUWtKQ1R3dllYSnlZWGslMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhRdVVFMUJaR3AxYzNSbFpGQmhjR1Z5VW1WamREd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlYQmxjbEpsWTNROEwydGxlVDRLQ1FrSkNRazhZWEp5WVhrJTJCQ2drSkNRa0pDVHh5WldGc1BpMHhPRHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJMVEU0UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0M056UThMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqVTVORHd2Y21WaGJENEtDUWtKQ1FrOEwyRnljbUY1UGdvSkNRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDUWs4YVc1MFpXZGxjajR3UEM5cGJuUmxaMlZ5UGdvSkNRa0pQQzlrYVdOMFBnb0pDUWs4TDJGeWNtRjVQZ29KQ1R3dlpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZWEJsY2tsdVptOHVVRTFRWVhCbGNrNWhiV1U4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWtKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVUdGd1pYSk9ZVzFsUEM5clpYayUyQkNna0pDUWtKUEhOMGNtbHVaejV1WVMxc1pYUjBaWEk4TDNOMGNtbHVaejRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVjM1JoZEdWR2JHRm5QQzlyWlhrJTJCQ2drSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKQ1R3dlpHbGpkRDRLQ1FrSlBDOWhjbkpoZVQ0S0NRazhMMlJwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVlc1aFpHcDFjM1JsWkZCaFoyVlNaV04wUEM5clpYayUyQkNna0pQR1JwWTNRJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1amNtVmhkRzl5UEM5clpYayUyQkNna0pDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExtcHZZblJwWTJ0bGREd3ZjM1J5YVc1blBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YVhSbGJVRnljbUY1UEM5clpYayUyQkNna0pDVHhoY25KaGVUNEtDUWtKQ1R4a2FXTjBQZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NVFUVlZ1WVdScWRYTjBaV1JRWVdkbFVtVmpkRHd2YTJWNVBnb0pDUWtKQ1R4aGNuSmhlVDRLQ1FrSkNRa0pQSEpsWVd3JTJCTUM0d1BDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENHdMakE4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQamN6TkR3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTlRjMlBDOXlaV0ZzUGdvSkNRa0pDVHd2WVhKeVlYayUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoY0dWeVNXNW1ieTVRVFZWdVlXUnFkWE4wWldSUVlYQmxjbEpsWTNROEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrSlBHRnljbUY1UGdvSkNRa0pQR1JwWTNRJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TGxCTlZXNWhaR3AxYzNSbFpGQmhjR1Z5VW1WamREd3ZhMlY1UGdvSkNRa0pDVHhoY25KaGVUNEtDUWtKQ1FrSlBISmxZV3clMkJMVEU0UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0dE1UZzhMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqYzNORHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJOVGswUEM5eVpXRnNQZ29KQ1FrSkNUd3ZZWEp5WVhrJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NXdjR1F1VUUxUVlYQmxjazVoYldVOEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrSlBHRnljbUY1UGdvSkNRa0pQR1JwWTNRJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TG5Cd1pDNVFUVkJoY0dWeVRtRnRaVHd2YTJWNVBnb0pDUWtKQ1R4emRISnBibWMlMkJWVk1nVEdWMGRHVnlQQzl6ZEhKcGJtYyUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNUJVRWxXWlhKemFXOXVQQzlyWlhrJTJCQ2drSlBITjBjbWx1Wno0d01DNHlNRHd2YzNSeWFXNW5QZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzUwZVhCbFBDOXJaWGslMkJDZ2tKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZWR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1UVZCSlZtVnljMmx2Ymp3dmEyVjVQZ29KUEhOMGNtbHVaejR3TUM0eU1Ed3ZjM1J5YVc1blBnb0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMblI1Y0dVOEwydGxlVDRLQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUlVhV05yWlhROEwzTjBjbWx1Wno0S1BDOWthV04wUGdvOEwzQnNhWE4wUGdvNFFrbE5BJTJCa0FBQUFBQUhnQUF3QUFBRWdBU0FBQUFBQUMzZ0pBJTJGJTJCNyUyRjdnTUdBbElEWndVb0ElMkZ3QUFnQUFBRWdBU0FBQUFBQUMyQUlvQUFFQUFBQmtBQUFBQVFBREF3TUFBQUFCZiUyRjhBQVFBQkFBQUFBQUFBQUFBQUFBQUFhQWdBR1FHUUFBQUFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE0UWtsTkElMkIwQUFBQUFBQkFBWkFBQUFBRUFBUUJrQUFBQUFRQUJPRUpKVFFRbUFBQUFBQUFPQUFBQUFBQUFBQUFBQUQlMkJBQUFBNFFrbE5CQTBBQUFBQUFBUUFBQUFlT0VKSlRRUVpBQUFBQUFBRUFBQUFIamhDU1UwRDh3QUFBQUFBQ1FBQUFBQUFBQUFBQVFBNFFrbE5CQW9BQUFBQUFBRUFBRGhDU1UwbkVBQUFBQUFBQ2dBQkFBQUFBQUFBQUFFNFFrbE5BJTJGVUFBQUFBQUVnQUwyWm1BQUVBYkdabUFBWUFBQUFBQUFFQUwyWm1BQUVBb1ptYUFBWUFBQUFBQUFFQU1nQUFBQUVBV2dBQUFBWUFBQUFBQUFFQU5RQUFBQUVBTFFBQUFBWUFBQUFBQUFFNFFrbE5BJTJGZ0FBQUFBQUhBQUFQJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGOEQ2QUFBQUFEJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGQSUyQmdBQUFBQSUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRndQb0FBQUFBUCUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRjhENkFBQU9FSkpUUVFJQUFBQUFBQVFBQUFBQVFBQUFrQUFBQUpBQUFBQUFEaENTVTBFSGdBQUFBQUFCQUFBQUFBNFFrbE5CQm9BQUFBQUExVUFBQUFHQUFBQUFBQUFBQUFBQUFGRkFBQUJ3Z0FBQUJBQWN3QjNBR2tBY3dCekFGOEFZUUJ5QUcwQWVRQmZBR3NBYmdCcEFHWUFaUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUJ3Z0FBQVVVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBUUFBQUFBQUFHNTFiR3dBQUFBQ0FBQUFCbUp2ZFc1a2MwOWlhbU1BQUFBQkFBQUFBQUFBVW1OME1RQUFBQVFBQUFBQVZHOXdJR3h2Ym1jQUFBQUFBQUFBQUV4bFpuUnNiMjVuQUFBQUFBQUFBQUJDZEc5dGJHOXVad0FBQVVVQUFBQUFVbWRvZEd4dmJtY0FBQUhDQUFBQUJuTnNhV05sYzFac1RITUFBQUFCVDJKcVl3QUFBQUVBQUFBQUFBVnpiR2xqWlFBQUFCSUFBQUFIYzJ4cFkyVkpSR3h2Ym1jQUFBQUFBQUFBQjJkeWIzVndTVVJzYjI1bkFBQUFBQUFBQUFadmNtbG5hVzVsYm5WdEFBQUFERVZUYkdsalpVOXlhV2RwYmdBQUFBMWhkWFJ2UjJWdVpYSmhkR1ZrQUFBQUFGUjVjR1ZsYm5WdEFBQUFDa1ZUYkdsalpWUjVjR1VBQUFBQVNXMW5JQUFBQUFaaWIzVnVaSE5QWW1wakFBQUFBUUFBQUFBQUFGSmpkREVBQUFBRUFBQUFBRlJ2Y0NCc2IyNW5BQUFBQUFBQUFBQk1aV1owYkc5dVp3QUFBQUFBQUFBQVFuUnZiV3h2Ym1jQUFBRkZBQUFBQUZKbmFIUnNiMjVuQUFBQndnQUFBQU4xY214VVJWaFVBQUFBQVFBQUFBQUFBRzUxYkd4VVJWaFVBQUFBQVFBQUFBQUFBRTF6WjJWVVJWaFVBQUFBQVFBQUFBQUFCbUZzZEZSaFoxUkZXRlFBQUFBQkFBQUFBQUFPWTJWc2JGUmxlSFJKYzBoVVRVeGliMjlzQVFBQUFBaGpaV3hzVkdWNGRGUkZXRlFBQUFBQkFBQUFBQUFKYUc5eWVrRnNhV2R1Wlc1MWJRQUFBQTlGVTJ4cFkyVkliM0o2UVd4cFoyNEFBQUFIWkdWbVlYVnNkQUFBQUFsMlpYSjBRV3hwWjI1bGJuVnRBQUFBRDBWVGJHbGpaVlpsY25SQmJHbG5iZ0FBQUFka1pXWmhkV3gwQUFBQUMySm5RMjlzYjNKVWVYQmxaVzUxYlFBQUFCRkZVMnhwWTJWQ1IwTnZiRzl5Vkhsd1pRQUFBQUJPYjI1bEFBQUFDWFJ2Y0U5MWRITmxkR3h2Ym1jQUFBQUFBQUFBQ214bFpuUlBkWFJ6WlhSc2IyNW5BQUFBQUFBQUFBeGliM1IwYjIxUGRYUnpaWFJzYjI1bkFBQUFBQUFBQUF0eWFXZG9kRTkxZEhObGRHeHZibWNBQUFBQUFEaENTVTBFS0FBQUFBQUFEQUFBQUFFJTJGOEFBQUFBQUFBRGhDU1UwRUVRQUFBQUFBQVFFQU9FSkpUUVFVQUFBQUFBQUVBQUFBQVRoQ1NVMEVEQUFBQUFBV3J3QUFBQUVBQUFDZ0FBQUFkQUFBQWVBQUFObUFBQUFXa3dBWUFBSCUyRjJQJTJGZ0FCQktSa2xHQUFFQ0FBQklBRWdBQVAlMkZ0QUF4QlpHOWlaVjlEVFFBQyUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFEQWdJQ0FrSURBa0pEQkVMQ2dzUkZROE1EQThWR0JNVEZSTVRHQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVOQ3dzTkRnMFFEZzRRRkE0T0RoUVVEZzRPRGhRUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQWRBQ2dBd0VpQUFJUkFRTVJBZiUyRmRBQVFBQ3YlMkZFQVQ4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFNQUFRSUVCUVlIQ0FrS0N3RUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFCQkFFREFnUUNCUWNHQ0FVRERETUJBQUlSQXdRaEVqRUZRVkZoRXlKeGdUSUdGSkdoc1VJakpCVlN3V0l6TkhLQzBVTUhKWkpUOE9IeFkzTTFGcUt5Z3laRWsxUmtSY0tqZERZWDBsWGlaZkt6aE1QVGRlUHpSaWVVcElXMGxjVFU1UFNsdGNYVjVmVldabmFHbHFhMnh0Ym05amRIVjJkM2g1ZW50OGZYNSUyRmNSQUFJQ0FRSUVCQU1FQlFZSEJ3WUZOUUVBQWhFRElURVNCRUZSWVhFaUV3VXlnWkVVb2JGQ0k4RlMwZkF6SkdMaGNvS1NRMU1WWTNNMDhTVUdGcUt5Z3djbU5jTFNSSk5Vb3hka1JWVTJkR1hpOHJPRXc5TjE0JTJGTkdsS1NGdEpYRTFPVDBwYlhGMWVYMVZtWjJocGFtdHNiVzV2WW5OMGRYWjNlSGw2ZTN4JTJGJTJGYUFBd0RBUUFDRVFNUkFEOEE5VlNTU1NVcEpKSkpTa2tra2xLU1NTU1VzNHVEU1dpWFJvT0pLRmkzT3Z4Mld2YnNlNGU1Z013Um81c295cGRPeU45bVRTUkhwV3ZqNE9jNCUyRndEVmY5V2twdXBKSkpLVWtra2twU1NTU1NsSkpKSktVa2tra3AlMkYlMkYwUFZVa2xDcXh0dGJiRyUyRlJlQTRmQXBLWnBKSkpLVW8yV05ycmRZOHcxZ0xuSHlBbFZPc1d2b3dYWkRaJTJGUU9aYThEOXhybW0zJTJGTnIzUFVzd20lMkZwbVFHYW15bDRiSGlXdWhKVFlxc0Z0VExCdzlvZDk0VTFRNkZrZmFPazR0c3p1cVlmd1Y5SlNsbDElMkZvT3Qyc09ndURYZ2VUbTdmJTJGUG1OJTJGd0NDTFVXWjFWaHJ5c2JLQSUyQmp1YTd6Z3R1WiUyRjFGcUlVWFRTUWN2S1ppNDdzaDdYT1kwdEJEWUpoem1zM2FrZlIzYmxWZDEzcHJNdHVJJTJCd3NlJTJGNkwzQWhtN24wJTJGVSUyQmkyemFmemtGT2dxOSUyQmRqMFpGT000azNaRHRyR05Fbmh6dDd2M1diV1BVOGJKcHlhdlZwZHVadWMyZU5XT05iMiUyRjJYdFhPWTJWVTdyQTZobk85UnVKUyUyQnIxaE8xbGd1R0pidVl6MmV4dHZ2M2Z6TFBVJTJGd0NFU1U5UWtra2twU1NTU1NsSkpKSktmJTJGJTJGUjlWV2YwaXdpdTNGZjlMR3Nld1QlMkI2RDdQJTJGQXl4eTBGbXVuSDZ4UERNcGdkJTJGYlpGVCUyRndEb094JTJGJTJCMjBRcDBsQzAyQ3R4cUFMd0R0QjRKOEZOSkJUVm92eCUyQm80anZiTExHbGx0VHVSTXNzcmYlMkZBTkppeiUyQmhaRHFNTyUyRkV5Q1gyZE9jNnQlMkJrdWMxZ210JTJCMyUyRmhhUFRlb1o1czZSMUlackJHRGxrTnZJJTJCalhjWVl5eCUyRjd0V1Y5QiUyRndEdyUyRndEd2x5RDFMcVdIMGpxMk4xTzU1cnhPb2dZMXJ3QzRDOXV1UDZtemR0OVdsMXY2VCUyQmIlMkZBRmRGUyUyRjFNeXElMkYyVlRodXNhJTJCMnRzdDJrNnNQdVk3M0JybSUyRm8zVnYyZnklMkYzRjBTNFRBenElMkJtJTJGV0RxdUtHbmJoV095YTYyRFVVbHJjbXl1bGt0WjZmMmV5MTlXejglMkYyTHMyWiUyQkZZeDFqTDZ5eGdCZSUyRmNJQUkzQ1hmTklxWlgzdXJzcXFyWjZqN1RxSmdOWTJQVXNQUDBkeXBmV0olMkZvOU5PVDJ4cmFySFR4czN0WmtmJTJCeTc3VlI2djliZWpkTnNia2IzWmJxbTJzZlZqZ09PaHJkWkZsanFzZmZYcyUyRm12VjlWJTJGJTJCRFhIZFolMkJ1dlU4ekE2aSUyQmowMlkxemF3YVpMdDJMWTIxdGx0YjdYT2I2ajYlMkZ3RFIxViUyRnpWMzZ2NnJQVllGVSUyQmlDczVQUzdjZDQzTzJXVU9CNzdkMVglMkZUMjdsd3ZWbk55S0s4ZDE1cTZoaWoyMDdvOWRnM0RIZFc5bTl6THY4QVElMkY0V3U3MUslMkZUdHI5YXF6SiUyQnVIVjh0bVIwek5veUx2c1hVOE5yN2NkdGptdE4xSjlLJTJCMnBvZHNiazElMkZvJTJGOEEwWXNuRzZ0ZSUyQm5MWmJkWFhZNnB0dEFETnd1Y3dtaHYyY1didjB0bnIlMkZwS25mcEtiS2Y4QXRzcUQxRHZyam5mVjcwY0tsbGRnemdicWpmN1FIQjNwMnNHMHNiNmx2MCUyRmZaNlRFY1pnNjMweHoydmV6SzZqVmJmaFZ0ZjZiaVElMkJ4bHRtTlk3YTJ6OUpzM1Z1JTJGd2F5dnJIaDElMkJoaGRLdjNYdWJqQmhZOXdEYkh0UHBPZFhrT0g2dDFEZCUyRlJzbCUyRjZDJTJGd0RvbVY3Rmc5V2MlMkZGJTJCcTNSTDZiaWJlbjVXVmpoNGxsamR4YmV4bHRmMDZMYTl2dnAlMkZNJTJGd0FGWiUyRmhFdXFuMHI2bGZYTTlXWXpwdlZvbzZ3eHZjYkJjR2o5THRyMDlMTG9qOWJ4ZiUyQnZVJTJGb2Y1bXo5YXZySmQwJTJCMmpCd0hBWlRyY2QxN2lBN2JWWmEyblkwSCUyRkNYdzl2JTJGQUFkZiUyRldsNXppZFFaOVpjWTNsM29kZHdnMnoxbUhaNnpXZlF2M3QyJTJCbmswJTJGd0NuJTJGd0RSZjh4ZjZEZjFEcXZYR1olMkJlNXR6c2k3R2Q2bG0ya1BzcU5icXFPRzElMkY0Q3V4bnB0JTJGUzclMkY5STlBTGpSMUdoN2Y5NiUyQnVKSnBBMUtaajJXTkRtT0Rtbmh3TWhKYXlTU1NTVSUyRndEJTJGMHZWVm45YWlyRkdZU0dqRWNMWHVPa1YlMkZ6ZDVKJTJGZFpVJTJGd0JYJTJGcmEwRUhNOUQ3SmY5cEU0JTJGcHY5WUhYMmJUNm1uOVJJS2NFOVU2bGdYbkpEdjJsMGpOJTJGUzQ5N1MzOUM1MzBzT3l4biUyQkJjJTJGJTJCaDVQODMlMkYya3lmUyUyRlI1TmxQcnYxNnV3Y3pFeHNQSEZvekxCUldIejZycmlXTTlPdXY2SHM5VDN2c2V1ZTZCOWJ1b1pGNXhCVTg0QkRDJTJCdG9aWVcxUGN6RyUyQjAyR3htNzFHYjJYUDJmb2Q3UDVtdGN0MTY3cSUyRlQ4N0dkZmslMkZic2NXSEk2VjFOclFOR3UzTzJOWjZmcDVGTjlkVGNySDNlcFI2ZjlSS3dSWVh6aEtFdUdZbyUyRnhmU012TTZsWmxGJTJGVmZTb2JVMTFROU1HeXFMZmElMkJyUDlQSnNyOUt6MDluNmJHcSUyRjdkV04xejlWeEMzS2ZaVDAlMkIlMkJQVXlHZzVOSWFQZFU3ZXpaZTdLeFBSJTJGUjVHeXIxc1g5RGI2JTJGd0RndVp4JTJCdjM1MmJlNFdOd2Z0JTJCOXRiMm4yMW16YSUyRjA3WG4yJTJGcDdxbVZlcDZkYlAwdnFmb2xxWkQ3bVk5MWVEbVhoOXBCQVpER2pUOWF3dmIlMkJrcDNXJTJGcDJNZGtmcGF2MWIlMkJYVWIwV3VsVGVQMjNoNURpM0pMM1VZV1RZemx6YktuMXNjNXJON2JhTTNGWjlwdzh4cnZTdnIlMkZRZjBpbTZ1dkg2dlk3RzZoZlMybXgxV0ZZYXE3Ym5rJTJCbzJyMHJLUFRhN2J1c3R4WDIwJTJCeiUyQmxmNFJXJTJGcVBYZU00MDNzJTJGUTlMcGRiUTR2OTdXbDREY1cxbnVkNlBxZnJIMmU5bnN6TWF2TnglMkZzOSUyRjJoQTZpNXI3N0haTEgyNFRuMVc0JTJCVXdqMlB2YTNKZGo1YmZ6YUhiOG43RmslMkY0UDlZeFAwdFg4d3VscWFXZmIxQ3paNkdhTTMwNjIyV0REJTJGU1YxbXAzc2ZZNnRqV09zWTF0Zjg3NzZhJTJGVFE3czI3cUZOVklycXdBZlVzYlpSWHQ5UzBOOUt5MXRYODMlMkJncmUlMkYxc2VqJTJGQUUxbHpLbHRkRHRiaTlaSnNxcWJUYUJYZFMwVGJXNjhQeWNVeE5qOHFySWJSJTJGcFBVJTJGU2I2JTJGVHl2NlZXZjBxdk9yem1zWWFzbkd6SG1rN2d4MVphNksyWFI3c2QlMkI1djZLNzlKWGkzYlBVJTJGVjhpNzFSUlU1JTJGV2FMTXY2a1lqN1NHWDlMNmclMkJxSyUyRm9zcnltZXV4MWNmNEIxN2ZZc3JwdVBtTnhmdHo2M1Bjd2w5RFdEUTJzSXFaa05KJTJGTlplNmx1UjZmJTJGQUFYJTJGQUFTMWYycFhYMHZxJTJCSmxuN0xma1ZWdGEzWkFmbDQ5MjlteW4lMkZBNzZyTHE4NnIlMkJibyUyRjRxeWhWcnVvWmZTZWs0bGRtTTEyUGUyMjdEOVhRQnR2cHR1MyUyQjdkNlZyNjZYZjJQVSUyRndpU25zdXFuRHlMTWZGdE1aT1JqJTJCclhTUGVIRnNlbzJsN2czMUxhJTJGViUyQmglMkYyb3ElMkZ3ZnFmcEZ6blZjZDl1RFppdmF4ekRaWGExenp0WmFYQjFMVyUyQnYlMkZnYiUyRlpWWGk1dHY4MyUyRlJzajlBc0xxZlh2MmowJTJGcFhxUEZlZGdOdXJmYTEwRjN1cXN4OGx2OEFvM09idnJmJTJGQU1UNm4lMkJGUXF1cTU5JTJGVVJlYzF6YjdDSFhNYzhodG13N240N3Y4QnR1Y1BVYjZ2NlA5TGQ2OWlOb1M5SDZWazBaemNwajN0cXFlVzFBQXR1YyUyRjhBbTdNZXlodjZXdlolMkZOWlglMkZBSUV1Z3p1azE0ZUxpTjY5ZmJpNDl1NndnQmp5V05iNmRQNklPYTUyVjZ2dDI0N1AwZEQlMkZBRlAwYWpqZGM2a0JlZWtZUWQxRElzMnRzWlZaYmRWWHQ5dFlxc0c5JTJCMyUyRlRQWiUyQmwlMkZ3QkNzYWpwWFYlMkJ0WDJad28lMkZhbDdXdXZ2OVMwTWVhMiUyRlQyJTJCdlo3bTFlMWo2R1Y3NlBaJTJGcEswTkU3YXZwSDFaNjluZFU2VGk0bVA2bVZaa3RCZGJrUDN1cWJXVFJrakt1WUdiOXQxZTZ2Mjc3NnJQOUl1eXc4VnVKanRvYVM4dGt1ZWVYT2NkejMlMkYybkx5YjZ2ZFp2NkRqREt3bVZ0M2x6YnNaejNWc1pjSGx1VGdYNDk5aGZSWXh1ekp3biUyRnpuc3lLckxMdjhIMnZUJTJGcjloT0RLJTJCc00lMkZadVNXa3ZydEZqQzF3TG12ciUyRldLcVclMkZtJTJCemJaJTJCa1JSNHZWcEtuMDNxJTJGVGVxNDdNbnAlMkJReSUyQnQ3V3ZHMCUyQjRCdzNOOVNzJTJGcEslMkYlMkJ1TlZ4QlQlMkZBUCUyRlQ5VlRPYTE3U3h3RG11QkRtblVFSHNVNlNTbnhmNng5Q3pQcXQxRUNpeDdHTWViZW41UTBjYW5leXlsenZvdXRvM01ydVolMkZoYXYwbnAlMkZwRlVyeWFNakZ2cnpwczZka1BiWm1Vc0h2eDd6RmJlcjRmN3JiTFA2V3olMkZBRWxuJTJCaXZZdlklMkJ1OUw2ZjFYcGwySDFHRzBPRzcxU1EwMXVIMGIyUGQ5QjdQJTJGVWIlMkZ3Qkd2SDh2cEYzVDclMkZRcGNINU5JZWE3YXo2bGVYU2QyJTJCekhqZFc3MHFIYk1uRSUyRndsU1pyRTJOdXpmaktITVklMkJHZnB6UjJuJTJGTDlIOTV3TSUyRkJ5T2s1aHhzZ2l5dXdiNnJtNjEzVkg2TjFYJTJGQUtNclcxMGpxYnJtSER5SGw4TWhqWTNHNnNIZDZQTzMxOGR2NmVpejA3Zlc5UDB2JTJCT0hpUHhjNm45ajU1MllkaDNZbVZ5N0Z0UDUlMkJ2dmZpdSUyRnclMkYlMkZCJTJGcGY1emVoWXYxYTZwVms1V0xuaCUyQkpaaE1MNnJtaVd2c0JZNnQxRm4wbjFOWTc3VHZwJTJGU2Y4V25panFOV25PRXNjakdRNFpCN09pZzBmVjdMZjAxcnI4cnFSMnRlejNYUGJCeDY3WHNZemF5eGpiTWw5bTM4JTJGOUolMkJsJTJGUyUyQnB6cnZVeE1XcXZxTlZ1SmtzeDM0MDJ6VzVvb3NiZFNjaWc3MjVPSGQ5cVk2diUyQmMyWk9MVDZObjg4eTNlNlgxdXlrOU5leHpuWWQlMkJQZGkyTWMxbFR4bDR6dHpuV3UzYktmV1paWGJzOVQwNmYweXBkWTZKMUhyJTJGVkg5V3J0cHN4Nm1NcUZEUyUyRjFXaXNGMzBYTmE1JTJCNTc3YmYwZXl6JTJGUlYlMkJxbkh3VzFSb3RERjZ4YXk0OVR2aWtzOU9ITkJBYzlnMnNmYzFtN1p1MiUyRm9HJTJGUXh2M1BTVDlMdzJkVGJsTSUyQjFXMXNkRGl4b00ydnUzZjA5MzZPdDNwT1pzdXJwJTJGUTVIJTJCaiUyRndhSmo0R1hmMDUyWmplcFJqYm1Pcnl3TnpOakh1bGg5TWVnNXpOJTJCMWxybiUyRjRSOWZwJTJGcEZZeGNIRDZleTZuSXRkU0dBT3RkbEZ3aGxoJTJGUnVIcE4zUHBidjhBNXhucWVtZ0ZPWjElMkZEeU1XNzdUMURJT1F5NHZyYTkxYnFDMDBlbiUyQmlZeCUyRjA2TnJxbmV2JTJGQUlmJTJGQUVqMVd4YUcyc3hLT285TXU2aUszMlVZZU9MSE1MM3ZMck5ycm11MyUyQmx2JTJGQVBSaTFjdnBsMVBVcVczTmZoNVZKMzQlMkJObU85WEV1ckh1JTJGVjd0MWpHTXNZZjBub1A5biUyRkFBTnF2OVE2Vzg0dzYzMGhuMmN1RmQxamNZR3lzalM2cXpMeG1pdTNGeWFkdjg5Nk5YJTJCbCUyQjJlcWhTU0JRMXUlMkZ3ZWQ2ejlYJTJCcnRGSkgxZFpqMWFnRU5zcVp1SUI5RVBzdmJrVzdXajZlUyUyRjZmcSUyQmolMkJqV09jYk53OGhucWROeHEzdGl6WllYT2E0VHk3ZmtXYm1OZCUyRk9iZm9mNFJkcFQxZnFIVXMxcmMlMkZMZmt0eVJVMnZHYTRiU0hOZVB0RkwzZWw2Vm1MbFZlalo3ZjBtJTJGMWNqJTJCWiUyQjBXYnZTZnFuMCUyRnExZVRqZFJJZGxWc3BzcWN4d0JxYzhQYmZXJTJCclgzNzYlMkZUdGYlMkZBS0gwYmNTNnYyV0pYcXVsajRZQ1hFRFpxdXJ4bjFkeFhkUm9zdXc3OGhuWGNSNWRTV3UyMk9yWTJicXNkbjAzWkZUdDkzMk96MlpXTDZsVkxQV29YUzE5SHp1cDlQcSUyQnNmVE1ZdHk4a243WlJYREN5NWhkVmIxREVyZSUyRjlOVTc5THZ4SGJMY2xqN0tmNXJJc3BYRTVtUG05SjZxJTJGTHFhODJZcm12ZlZKSHFVc2QlMkJneXFMYXRsbjBhJTJGMDNwUDhBV3hMbWVyViUyQjVqJTJCeiUyRlU3cXZSJTJCcDlDb3Q2UU5sTEpiWlE1eGRaWGI5TzFsNzNTOTlqbnUzJTJCcTclMkJlJTJGbkVtTjU3cXYxWDZiOWMlMkZxOTlveFdOeCUyQnVZeGN5eDdnOXJqYzJQWHhNNXQzNng2ZGptdDlIMXYwMkwlMkJpOUwlMkZDVldjejlWUHI1MW5wUFdYOUglMkJzeHV5OGJJdEZOb3lEdnRvdDl0SWNOJTJGMDZIZTMxNlAlMkZBRUtvJTJGd0FKOXA5aGJYVzE3bnRhQTk4YjNBUVhRSWJ1UDV5NDMlMkZHQjlRMmRmcCUyRmFYVFd0WjFpbG9FR0dqSVkzJTJGQVBlNyUyQmF5RyUyRjhBYWZKJTJGNnpiJTJCaSUyRlNVSlQyVEs2Nnh0cmFHQUFBQm9BRUFiVzhmeVZKZWNmVWJxUDhBakhQVjMxZFh4TWpKNmMlMkZheTI3TGFNZDFKYU5nc29EeFg5bzlyZjB6YVcyJTJCciUyRlBlcCUyRnBQUjBsUCUyRjlUMVZKSkpKU0ROTCUyRnNyOWdlWEdBQlcxcm5ha0Q2RjM2UCUyQnN1QXd1bVYlMkZXWE5yeEh2Y3ltcWgyUzdJcUxuUmElMkI3SmZqMlVQY0d0cWR2eWZWc3BaN0slMkZRJTJCeTElMkZvYVY2RmZqMDVGWnF2WUxLeVFTMTNFZzdtJTJGOUpLaW12SHByb3JFVjFOREdEd0RSdGFra0VnMk5DTm54RHFkR2IwTHJ1M3FGREhYNDFyTFRXR3hWZXlSNzYyNnRkVm1OYSUyRjFQM0xQV3I5aTJjbXpycFk1dGRCNmd6cEw3S3E3V0dYUHFxZjZEOEhJYzFnWjl1cG8lMkY3VCUyRnptVlglMkZBRFhxcjBick9GMCUyQjQxMzViV1ZGZ2MwNWtEMVdNUDA2YXJpMTdxMjVQODFaJTJCJTJGWCUyQmklMkJuYXVUeXNmcW5RZW9NNmgwNmw5MWVXMkg0andmMXVoZ2M3MExxM0RkVjFYR3htNzhkNyUyRndDZm8lMkZRWGZwSzdHSVJGWDRzMmZON3ZBZUdwUmp3azkzSXlPajVWRG5ONlU1JTJGVU1hJTJGZmxZbExHdUxtJTJCcXhucGZhZHJHMXRkazMwMlVmYXYlMkJzMmVuJTJGTnJRJTJCcmQ5JTJCTmxOZGZTJTJGRHVEWE15OGU3UjFibWpmSiUyRmtOaGw5TnY1OUt0T2VMYk1ETzZGa3RKdGUlMkIlMkZDc3RMaCUyQmhjYXhtNG1ZNW9jNXRMTXIwOFhLM3N0OUg3VFJkJTJGU3FQV1cxMWZBJTJGYSUyQk9PcGRPYzZqcWVNTmxsWWpjZHZ1ZGpXdDl6ZlZyM2I4ZCUyRiUyRm9tJTJGMUUlMkIyRjVqcGYxdTZEajlSeUxLY3F1M3BlYWYxckYxYUdoJTJCaHltMFhNcjkxVGZaa3NyJTJGbmNiJTJGU1dZOWJGVHdmdGZVT3BkUXdSWnZ4c0RMT0xoMnVCZXhyTEgyMVl6TExBSHY5SzNaWCUyRndBSCUyRk9MVXclMkJuZlUlMkY2eFZEQjZsZzQlMkZUdXRFRnJMYUclMkJnTFhEJTJGQzQyelkyeCUyRiUyQmx3N2YwMWY4dXI5T24lMkJyb3lQcWxsWmZUaGhNc3FCWmJsV2h4RmphaEZMTFdFJTJCMjdIWnYzc2JzcjlIOU42MyUyRkJqVzFMOUo5UERhJTJGNnVkY3glMkZVNlRhN2JTSDZ1eExUN1cwT2MwJTJGbzZIVDZtRmwxZnpYJTJCblY5bjFSNnYwN2JiaFp2MnphNHcxNDlLMFZrNmVua01lV1B1MmZ6bjh4VmIlMkZ3ZjBGMUdWaDRtZFNXM01EMnZiQWZBM0FIOXh5b1ltUlowbyUyRlk4OTQlMkJ6dEJOR1M3UWJSJTJCYThuNk96JTJGd0glMkZ0dEx5UmJ5UFVjWE1xenpuWTJOZmg5VHJiWmJra1Z5eHpRQnZ6bSUyQm0wNHZyN2YwZCUyRm8yZnJYJTJCRCUyRlRWMnJjJTJCcm1IMGJxSFQ4ZmNXJTJGYjJOZWQxRnJtV3NhWE9aTGZSTEgwMVclMkJwdTlMJTJCYVhVaUNKSEJXR2VnTTZkMUlkVTZXemJKaSUyRkZiQWFXdVB2ZFYlMkZWJTJGblBUU3RONlU0JTJGV2ZxUGs1amhSajJCb3JEck1YTE9qcW5nZTJtMXJOcm5WM2UxbG5wZjhiJTJGTzFVcm0lMkZxTGxaSDFhJTJCc2VUMDNJd0xhN3M5N0s4bkZyWSUyQng5ZnAlMkJwNk9manVwWjZWdlQzJTJCclkzSSUyRjBQNk95bjlGJTJCalhyS1NDRkpKSkpLVWtra2twJTJGJTJGOVgxVkpKSkpTa2tra2xLUU0zRHB6Y2QyUGJ1QWRCYTloTFhzY05XV1ZQYjlDeGprZEpKVHhIVmZxNE9sNWJjJTJCcTU1ZGx2TExxMkRheDFscHJZN0lGYlA1aTYzYjc3S2Y5SCUyQmslMkZRcnBQcSUyRmNMTUFWbGdydXBjV1hNNGR1Qmo5STB5N2YlMkYxZjAwdnJCMGhuVnVuUG8lMkJqa01tekZ0R2pxN1FDMXRsYjlOanZkJTJGcXhTNmRXTWowdXBIOUZmYlhzeXF3SWFiR3d4MzAlMkZmJTJCaWZXOW45UkhvcHd2ckJoNGVGMVYlMkJYa1UlMkZxbVpRUUxTQjZkZVl4d3V4N0hBZnBHdnM5TCUyRkIlMkY4SjZpdldWWjJkajR2VjhGZ2Zia1klMkZvNVdPOGhvc3JkcjMlMkJpNnQ3bnJlZld4OGIyaDIwaHpaRXdSOUZ3JTJGbElPTGc0JTJCSTY1Mk9DeHQ3dlVmV0Q3UTQlMkZTY3h2NW0lMkY4OUsxSXVqWWo4UHBXTGpXRGElMkJ1c0I3U1pJY2ZjNXU2WGZuRlczMXNlSWUwT0V6QkU2JTJGTlNTUVVwSkpKSlNra2trbEtTU1NTVXBKSkpKVCUyRkFQJTJGVzlWU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyRiUyRlpBRGhDU1UwRUlRQUFBQUFBVlFBQUFBRUJBQUFBRHdCQkFHUUFid0JpQUdVQUlBQlFBR2dBYndCMEFHOEFjd0JvQUc4QWNBQUFBQk1BUVFCa0FHOEFZZ0JsQUNBQVVBQm9BRzhBZEFCdkFITUFhQUJ2QUhBQUlBQkRBRk1BTWdBQUFBRUFPRUpKVFFRR0FBQUFBQUFIQUFJQUFBQUJBUUQlMkY0VGtqYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3THdBOFAzaHdZV05yWlhRZ1ltVm5hVzQ5SXUlMkI3dnlJZ2FXUTlJbGMxVFRCTmNFTmxhR2xJZW5KbFUzcE9WR042YTJNNVpDSSUyRlBnbzhlRHA0YlhCdFpYUmhJSGh0Ykc1ek9uZzlJbUZrYjJKbE9tNXpPbTFsZEdFdklpQjRPbmh0Y0hSclBTSXpMakV1TVMweE1USWlQZ29nSUNBOGNtUm1PbEpFUmlCNGJXeHVjenB5WkdZOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6RTVPVGt2TURJdk1qSXRjbVJtTFhONWJuUmhlQzF1Y3lNaVBnb2dJQ0FnSUNBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cDRZWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUklMkJDaUFnSUNBZ0lDQWdJRHg0WVhCTlRUcEViMk4xYldWdWRFbEVQblYxYVdRNlJUY3hPVFZGTlRZMU56TXpNVEZFUkRsRk56SkdRMEUyUWprd1FVWkJSalU4TDNoaGNFMU5Pa1J2WTNWdFpXNTBTVVElMkJDaUFnSUNBZ0lDQWdJRHg0WVhCTlRUcEpibk4wWVc1alpVbEVQblYxYVdRNlJUY3hPVFZGTlRjMU56TXpNVEZFUkRsRk56SkdRMEUyUWprd1FVWkJSalU4TDNoaGNFMU5Pa2x1YzNSaGJtTmxTVVElMkJDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0FnSUNBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cDRZWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThlR0Z3T2tOeVpXRjBaVVJoZEdVJTJCTWpBd09DMHdOeTB4T1ZReE5EbzFOem8wTVMwd05Ub3dNRHd2ZUdGd09rTnlaV0YwWlVSaGRHVSUyQkNpQWdJQ0FnSUNBZ0lEeDRZWEE2VFc5a2FXWjVSR0YwWlQ0eU1EQTRMVEEzTFRFNVZERTBPalU0T2pBMUxUQTFPakF3UEM5NFlYQTZUVzlrYVdaNVJHRjBaVDRLSUNBZ0lDQWdJQ0FnUEhoaGNEcE5aWFJoWkdGMFlVUmhkR1UlMkJNakF3T0Mwd055MHhPVlF4TkRvMU9Eb3dOUzB3TlRvd01Ed3ZlR0Z3T2sxbGRHRmtZWFJoUkdGMFpUNEtJQ0FnSUNBZ0lDQWdQSGhoY0RwRGNtVmhkRzl5Vkc5dmJENUJaRzlpWlNCUWFHOTBiM05vYjNBZ1ExTXlJRTFoWTJsdWRHOXphRHd2ZUdGd09rTnlaV0YwYjNKVWIyOXNQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZaR005SW1oMGRIQTZMeTl3ZFhKc0xtOXlaeTlrWXk5bGJHVnRaVzUwY3k4eExqRXZJajRLSUNBZ0lDQWdJQ0FnUEdSak9tWnZjbTFoZEQ1cGJXRm5aUzlxY0dWblBDOWtZenBtYjNKdFlYUSUyQkNpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwd2FHOTBiM05vYjNBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZjR2h2ZEc5emFHOXdMekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThjR2h2ZEc5emFHOXdPa052Ykc5eVRXOWtaVDR6UEM5d2FHOTBiM05vYjNBNlEyOXNiM0pOYjJSbFBnb2dJQ0FnSUNBZ0lDQThjR2h2ZEc5emFHOXdPa2hwYzNSdmNua3ZQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZkR2xtWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTBhV1ptTHpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFBjbWxsYm5SaGRHbHZiajR4UEM5MGFXWm1Pazl5YVdWdWRHRjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBZVW1WemIyeDFkR2x2Ymo0eE1EQXdNREF3THpFd01EQXdQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TURBd01EQXdMekV3TURBd1BDOTBhV1ptT2xsU1pYTnZiSFYwYVc5dVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwU1pYTnZiSFYwYVc5dVZXNXBkRDR5UEM5MGFXWm1PbEpsYzI5c2RYUnBiMjVWYm1sMFBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwT1lYUnBkbVZFYVdkbGMzUSUyQk1qVTJMREkxTnl3eU5UZ3NNalU1TERJMk1pd3lOelFzTWpjM0xESTROQ3cxTXpBc05UTXhMREk0TWl3eU9ETXNNamsyTERNd01Td3pNVGdzTXpFNUxEVXlPU3cxTXpJc016QTJMREkzTUN3eU56RXNNamN5TERNd05Td3pNVFVzTXpNME16STdRekExUVRFNU1EUkdSakF3UVVKRVF6QTFNVUpFUmtGR01ESXdORVZCTlRFOEwzUnBabVk2VG1GMGFYWmxSR2xuWlhOMFBnb2dJQ0FnSUNBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNlpYaHBaajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5bGVHbG1MekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThaWGhwWmpwUWFYaGxiRmhFYVcxbGJuTnBiMjQlMkJORFV3UEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGpNeU5Ud3ZaWGhwWmpwUWFYaGxiRmxFYVcxbGJuTnBiMjQlMkJDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVSUyQkxURThMMlY0YVdZNlEyOXNiM0pUY0dGalpUNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlRtRjBhWFpsUkdsblpYTjBQak0yT0RZMExEUXdPVFl3TERRd09UWXhMRE0zTVRJeExETTNNVEl5TERRd09UWXlMRFF3T1RZekxETTNOVEV3TERRd09UWTBMRE0yT0RZM0xETTJPRFk0TERNek5ETTBMRE16TkRNM0xETTBPRFV3TERNME9EVXlMRE0wT0RVMUxETTBPRFUyTERNM016YzNMRE0zTXpjNExETTNNemM1TERNM016Z3dMRE0zTXpneExETTNNemd5TERNM016Z3pMRE0zTXpnMExETTNNemcxTERNM016ZzJMRE0zTXprMkxEUXhORGd6TERReE5EZzBMRFF4TkRnMkxEUXhORGczTERReE5EZzRMRFF4TkRreUxEUXhORGt6TERReE5EazFMRFF4TnpJNExEUXhOekk1TERReE56TXdMRFF4T1RnMUxEUXhPVGcyTERReE9UZzNMRFF4T1RnNExEUXhPVGc1TERReE9Ua3dMRFF4T1RreExEUXhPVGt5TERReE9Ua3pMRFF4T1RrMExEUXhPVGsxTERReE9UazJMRFF5TURFMkxEQXNNaXcwTERVc05pdzNMRGdzT1N3eE1Dd3hNU3d4TWl3eE15d3hOQ3d4TlN3eE5pd3hOeXd4T0N3eU1Dd3lNaXd5TXl3eU5Dd3lOU3d5Tml3eU55d3lPQ3d6TUR0RU5EWXpOME5DT1VRME1VRXhNRUpCTjBWR05VVkNRMFJDTmpNeE9ETXlPVHd2WlhocFpqcE9ZWFJwZG1WRWFXZGxjM1ElMkJDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVklMkJDand2ZURwNGJYQnRaWFJoUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW84UDNod1lXTnJaWFFnWlc1a1BTSjNJajglMkIlMkYlMkI0QURrRmtiMkpsQUdTQUFBQUFBZiUyRmJBSVFBQ0FZR0JnWUdDQVlHQ0F3SUJ3Z01EZ29JQ0FvT0VBME5EZzBORUJFTURBd01EQXdSREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFSkNBZ0pDZ2tMQ1FrTERnc05DdzRSRGc0T0RoRVJEQXdNREF3UkVRd01EQXdNREJFTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TSUyRjhBQUVRZ0JSUUhDQXdFaUFBSVJBUU1SQWYlMkZkQUFRQUhmJTJGRUFhSUFBQUFIQVFFQkFRRUFBQUFBQUFBQUFBUUZBd0lHQVFBSENBa0tDd0VBQWdJREFRRUJBUUVBQUFBQUFBQUFBUUFDQXdRRkJnY0lDUW9MRUFBQ0FRTURBZ1FDQmdjREJBSUdBbk1CQWdNUkJBQUZJUkl4UVZFR0UyRWljWUVVTXBHaEJ4V3hRaVBCVXRIaE14Wmk4Q1J5Z3ZFbFF6UlRrcUt5WTNQQ05VUW5rNk96TmhkVVpIVEQwdUlJSm9NSkNoZ1poSlJGUnFTMFZ0TlZLQnJ5NCUyRlBFMU9UMFpYV0ZsYVcxeGRYbDlXWjJocGFtdHNiVzV2WTNSMWRuZDRlWHA3ZkgxJTJCZjNPRWhZYUhpSW1LaTR5TmpvJTJCQ2s1U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dm9SQUFJQ0FRSURCUVVFQlFZRUNBTURiUUVBQWhFREJDRVNNVUVGVVJOaElnWnhnWkV5b2JId0ZNSFI0U05DRlZKaWN2RXpKRFJEZ2hhU1V5V2lZN0xDQjNQU05lSkVneGRVa3dnSkNoZ1pKalpGR2lka2RGVTM4cU96d3lncDAlMkJQemhKU2t0TVRVNVBSbGRZV1ZwYlhGMWVYMVJsWm1kb2FXcHJiRzF1YjJSMWRuZDRlWHA3ZkgxJTJCZjNPRWhZYUhpSW1LaTR5TmpvJTJCRGxKV1dsNWlabXB1Y25aNmZrcU9rcGFhbnFLbXFxNnl0cnElMkJ2JTJGYUFBd0RBUUFDRVFNUkFEOEE3JTJGbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXJsSEkydXRYbjZXbHRuRkVTYjBSRlNwNDFXakQ1cTNMQ0Jhc2x6WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5RHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJFMnJqMEx1enZGN1B4ZnRVZjhBWFBMRG5DM1hJMGV3ZHBPa1RLNFAwOFQlMkZBTUsyRWMxVExOZ2F4bUU5cEZJRHklMkJFQW4zR3h3VGdWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWJTJGJTJGMGUlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhZVWVacGZSMGE0a3BVQXgxOWg2aTc0YjRYNjVDYmpSNzZGVjVGb0pLS2U1QzFHSVZMZER1R2h1WHMySUtPWDRnZnN2R2R4JTJGc2tLdGtpeUQ2YmN0SEhiWGdQSW1PQzRxT3BYajZFMWZmNE1tNE5keGtwYzc3MEJ2Tm16WkZMczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOUx2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZva0tDVDBHJTJGM1pnYWlvTlFlbUFOWnVoYVdMeUUwTGxZMSUyQmJHbjZzV3NwQThRQSUyRlolMkZVY1ZSV2JObXhWMmJObXhWMmJObXhWMk5aUXdLbm9kajlPT3pZcXdEVDRpaVBac2ElMkZWTG01c2o3SSUyRjc2TCUyQk9UWFRwalBaUVN0OXBrQWI1cjhKeUtYcWZVdk1PcElRT0Z4RkRmb1A4cUZ2VGwlMkY0UTVJTkRrckZQQWY4QWRVaEklMkZ3QlYlMkZpSDhjbkxlQVBjeEhNcHJtelpzZ3lkbXpac1ZkbXpac1ZkbXpac1ZkbXpZeVdSSW8ya2tZS2lpck1kZ0FNVlg1c2pUZWFHbDFDenNiU0FPTHVYMHc3azE0S0N6eUFEJTJCVVpKQmlyZWJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWJTJGOVB2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZvNENYVUZhOWUwQ2JKUldrciUyQjBSV2xNSFpFSjVXdFBNdHpFNSUyQkdZSktueUswJTJGNGt1RUMxWmVNMklXMG9rakZUOFM3SCUyQnVMNEZZejUybU1XbjJ0RFRsY3BYNkZiREhSNWVjQ0glMkJaZXZ5d2wlMkZNTThkSnRuN0xkSiUyQkt2Z3J5OWNjck9KNjlLVnc5RTlHUzVzMmJBaDJiTm14VjJiTm14VjJiTm14VmkzbWlGVTFMU2J4dnNTdEpZekglMkZKblNpJTJGOEFEWXBvRXpMY3hxMVQ2OEZHciUyRnZ5RThHcmdqemRDMG1oWEVzWSUyRmUycFM1aSUyRjFvbURmOFJ3dHRKUkhkcmNEYU5iaFpWSTZlbmRJRyUyRjRtY25IZUpDRHpETDgyYk5rRXV6WnMyS3V6WnMyS3V6WnMyS3Vya1o4NDNaaHM0YlZUUXp2VnFmeXJ2ZzN6SE5QYjJVTXNMdEdCUEdKU3BJcWpFcVJVYjljaCUyQnZTU3ZwMEpsY3ZKQ0x5TXV4SmI0Sk52aSUyRjFTdUVCVnZrYVg5TCUyQlpibThTdjFmVGJmMFk2JTJGNzhsUHhIJTJGZ0Z6cGVSdnlQYldjWGx5eXViV0JJWHVveEpPVUc3dUtqazUlMkZhT1NTb3hQTlhaczJiQXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkYlMkZVNyUyRm16WnNWUTJvc3lXTTdvM0ZsUWtNT3hHUHRaaFBCSEtDRHlVRTA4ZSUyQk0xQmVkamNyNHhQVCUyRmdUaFY1Y3ZCSmJwR2VyZ0VmTURjWWEyUGtxZlpzMmJBcnMyYk5pcnMyYk5pcnMyYk5pcnNoZm5SR3RiN1Q5VFg3TGNvSkQycUR6U3Yzdmswd2w4MVdEYWpvZHpER0t6Umoxb1IzNVIlMkZGVDZSdGhITlhhVmNyS3NVdGZ0RGkzMDRkWno3eXJxUHJRQ0luY2RNbnNFbnFSSyUyRmNqZjU0eVZqUDVnd3RKNWNrY0QlMkI1bWlrJTJCaXZIJTJGQUkzd0Q1Um5FdHB3cldndzk4M1JHYnkxcWlxS2xZR2tBJTJGNHglMkZ2UCUyQk5jaG5rZTVCSVVHb1BRJTJGUEVKSEo2WEczSkZieEFPUHhPQTFpWDdzVXdJZG16WnNWZG16WnNWZG16WnNWVWJxQmJxMm10bSUyQnpNalJuNU1LWkRMUDRyQzJVVnE5cVlqN1NXc2hXbiUyQnR4T1RuSVZHNHR0V3ZkTmFpaUs3RnhHRHRXRzZUaSUyRndEd011U2h6UkxreSUyQjFsRTl2Rk1QOEFkaUszM2dZc2NLdEJtRFdodHElMkZIYk95TXA2OFNlU0g1VU9HcHlKNXBZZGUzbW9XUG1XNUt6SDBwSW8yV050MEEzV3YwdHMyRDczeko2Rmd6eHFxWHBLcEhHOWVETXg3RVlYZWQ0NVZlQzRnUENkWXlxdWEwSTVxNVZnT3YyY0FXOHNXbzJRTXFod3dveUhjVnlRRmhWT0x6dnJOcmRmNmZGSExGWDRrVmVCSCUyQnIxJTJGNGJKbHAlMkJ0MkdxV3JYRm5JQ3lLV2VKdG5VZ1YzWE9QNjdxRmphRkxIVXJwcmVjeSUyQmxaYWp4UERtTjFqbjhEdjhBYSUyQnklMkJJYVhyY2xyZHRaMzROcmZSMVVTb2ZnZW8ySzA2YyUyRjhBZ2NCQ1hyJTJGbHZYUnJkbnprNHJjb1NKRlhZZk1ibkR6T1YlMkJUcjgyZXFBT1FJcGFCcTdBVjJyJTJCT2RUcmlSU0VwOHo4Um9OOUk1QVdKUFY1SFlEMHlIciUyQkdRZzNOdHExbGNMYXp4M0NpWnZpaVlPS3pRbzlLamI3WXpvV3FSZXZwdDVBT3NrRWlqNWxDT21jNjAlMkJXQ0swajlPTllvNUlZcCUyQkVhaFFXQmVOalJhZkVjTVZUdlRiJTJCODBmeUhaM0Z1Z0U5dlNPUkpCVXFQVlpXJTJCRUh3M3lWYVhlQyUyRnNvYnVsR2tYNDFIUU1ObUglMkZCWnpDJTJCMWlUVGJhZFpVa2p0Smp6a1FxU0txTm01ZnNkTVBmeXIxJTJGUmRUOHZyYTJFNU41QzhrbDNiU01US3BrY3R6JTJCTDdTUDlwZU9BN2ZGa0lrZ2tDd09ma3o3TmxBMXk4REYyYk5teFYyYkVKTHkxaW5qdHBKVldlYXZwUkVqazNIYzhWNjR2aXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5WHYlMkJiTm14VnBsRHFVYmNNS0g1SElQb2tqV3NzdHF4JTJCSzJsWlBmNFdwazV5RjZuRjlSOHhzd0hHTzhRU2olMkZBRmg4RCUyRnFya29jNlZtU01IVU9PakFFZlRqc0FhWk1YaE1SUHhSbllmNUo2WVB5SlYyYk5teFYyYk5teFZRdXpPdHU3MjlQVlVjbEJGYTA3VTk4RGFmcXNGNmk5RWtJNmVQeXd3eUY2dkcyaTZvSlJVV2w2eFpDUDJKT3JyJTJGc3Z0TGhHNnMweWlLNFg2WmZpNFFJN1ZiOWx2NWglMkZYREhyZ1Y1YzhCMEx6TGMyUSUyQkdGMjlXRHc0U2ZGJTJGd3AlMkJIT2c2Wk1IaTRqMllmVGtaJTJGTUd3cEZhYXpHRHl0bTlHWWolMkZBSDI1JTJCRW4lMkZBRlglMkZBT0o0Tjh1WHdsaWljbnBzMzA1TG1GWkRld3JjMmR4YnQwbGllTnZreWxjNDUlMkJYMTBVQ1F6SGpMQVRFNFAlMkJRZU5jNkw1NWU1aTBKNTdXVm9uaWtSbVpEU3E3amYyeUIyT3AlMkZWWW9yMiUyRndCTmprdHBBR2p2N1p2VSUyQklub3k4VmFvJTJGYTQ0eENROWFzMjVSVkJxS25mQkdSYnk5ckJFc2xqY0lZMGFRJTJCZzVGQ0NRRDZiajlsc2xHQWlrTjVzMmJBcnMyYkd5T0kwYVJ1aUFzZm9GY1ZTJTJCJTJGMXEyc0psdHlyU3l0dXlwJTJCeURzQzN6d3hCcUFmSGZJJTJGb2RtdDJ6NnBjam5KSzVkQWV4UFQlMkZnUmtoeFYyYzc4Mm1TeTgyV1VnTklkVWhOczRQVG1sWFElMkZ3REJET2laQXZ6TGI2bkhwT3JsRmtqczdsV2RHOXl2eFZHJTJGd2l1R0ozVXAzWVRKRnI3b3AlMkJDOHQxbGpIanhvZHY4QVl0a2l5SGJ4eDZYZkt4JTJGY1hCaWxKMyUyQkFzVlVWOEZSbHlZQTRaODBEa2tQbXEzRXRsSEpTcFIlMkJKUGdIQkg2NlpCdEl1ZnF0OU5wOHBBTEhuRXBPNXAxb002WHEwUDFqVHJpUG9lUElmTmR4bkx0WnRyR1psdUJjRzN2RiUyQkZKWXVKZng0MElJeEhKS3p6YjVldDladFpZcDFMd3lnY2dQdEt5JTJGWmtUJTJGS1d1UktLQ09DNnROSDFDYmxjV2lJTERVV0hINndnNnd5RGVqeDlGdzRzZk9NakVCWTViaUgxSGdMeThWWXVsT2ZKViUyQnkzOHE0bmRIOUxsTDIxOUs0aWlsSHJXekx4bGhJNlNnRTElMkYyU25GS28wQ3p4eTI4ek1xY1N6c3BJWUJQajJJJTJGMWNkJTJGeXRuVlpkTlEyRDFJJTJCRVNNb1B3JTJGek1mdGRNRzIwVFNReXlibG1qZW56b2M0VFk2bGQ2ZGR5S3dNVXNiRlpvSHFOd2QxS25HWFJYczluNSUyRnY3bGc5OEdsV2hNandrMUElMkZtNGslMkZGN2pEU3dTUFVMVFRKSTNQR0JwaEdOd0c0T0hWVyUyQmduT05YJTJCc1dGcERGUGFTU0pjVEVTRzNUY1JsZjJ1UkslMkZhenElMkJrUjNhZVQ3ZSUyQmpuWDZ5b1c4aWJodCUyQjlpOVRnJTJCJTJGUTk4UVZaSHFzdHV0b3d1U1BTZFNwVjkxSVBWV3ppZjFpOTh0JTJCWjdtNDBGamJTV1VyTkNxRW1rZXg0RUg3YWNUOWx2MmM2bG9ubWJUdk1VVFdkd2dpdW1Xa3RyTFFoZ2U2SDlvZjZ1Ukx6ZDVadXJEVlA4UTJLZXRZRlVXN2pYZVNLaSUyQm0waEg3VVpIN1g3T0NZNGcyWU0wc01yanZleEI1U0hjWHNua1B6M1klMkJjZFBxS1E2bEFCOWJ0YSUyRjhsSTY5WTIlMkY0WEplRFhQSmx2UGU2SnFNZXE2Tk1ZTHVFODQyVG82bnRUb3l1djJrJTJGYXowSjVFOCUyQjJIbkd5STJ0OVZnQSUyQnQyWlAwZXBIJTJGTkVmJTJCRXlFU2VVdWZmM3RtYkZBeDhiQjlIOFVmNHNaOCUyRjZQODJUTU1MTmIxaURSclEzRXBCa2tQQzNqN3M1JTJGd0NOViUyQjAlMkJHVmM0bjVtOHlmcG56SmNzciUyRjZIWXNMZTIzMlBCdjNqMCUyRnkzJTJCSCUyRlk1SnhrTG91clgxNzUlMkZ0YjI4bWFTWnJsb3FzZGxRMVRnbyUyRlpVRE83NTUlMkI4dXhsdlBjTUk2aTZMQWUyelo2QndsUzdObXpZRmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmYlMkZXNyUyRm16WnNWZGtiODNXNSUyQnJXMSUyQmclMkJLMWtBYyUyRjVEJTJGQ2YlMkJHNDVKTUM2amFyZTJGeGFFZjNxTW8lMkJkUGglMkY0YkNOaXFWNlZPT2NUViUyQkdSZUIzNyUyRmFYOVdIb3lGYUpNejIzQnFpV0U3anVDaCUyRnN5YVJzSFJYSFJnQ1Bwd3k1MmdMczJiTmtVdXpaczJLdXd1MXJTNDlXMDZXemI0WEk1UXY4QXl1dTZuREhNZW1Ldk9ORTFLV0dWckc3ckhQQ3hSZ2Vxc3BwazdzYjBYQzhXMmxVYmp4SGlNaG5ublRIdExtUFhyWmZnYWtkMVRzUjlpUSUyRlA3TFl0b21xJTJGV0kwSWFreWJvZjRINTVMbUZaZHFObEZxTmpjV013cWs2RkQ4ejlrJTJGUWM1MTVYdVpiVzRsMCUyQjUlMkJHV0Z6RTZuJTJCWlRUT2xXMDYzRVFrWFk5R1h3UGhuTyUyRk5zUzZUNXF0Ym9mQkhxYW5pZXhtaSUyQjJ2JTJCc1U0diUyRmxmRmdIY3JQVEZiYW5aTmIzY2F5d3lBcExFM1FqM3pqdXR3VyUyRmxqekJjNlBwNmZWOUpIcHNMTlNTZ1IxSElvclYzVnZpenEyalhRayUyQkFuZGxCQTl4bk52elJpV1B6SkJKV25yMmdKUCUyRkdOeXY4QUhBZGlrSjNZR2YwbzVwWkRJYm9TRDFHSko5YUFnaDYlMkY1YVV6b0ZuTjlZdFlaNmdtUkZZMDZWSTN6bFhrJTJGVkk1YmkyaG5sQmdkQnV4RkZhaGhmcjByU05zbkhsWFU0Skk1TkphU3QxYXZJUW0lMkI4UmFxdUQwSSUyQkxqa3BiZ0laSm16WnNpcnNEYWdDMWpjcXZVeE9CJTJGd0p3VGpYVU1ySzMyV0JCJTJCV0twZm9mRTZYYjhmNWQlMkZuaGprTVBtdlIlMkZLbHJKQnFreEJTVmtqQzBQSURwVGZJMTVzJTJGTU5idTNqYlI1cGxzWlZwNjlzd1JpOU4wZVNqTW5IJTJCUmNWcG02NjljV1d0WEduYXR3amdLbWEydVBzajB4JTJGTlh3JTJGYXlPZm1MciUyQmhYM2wlMkJQVFlya1hNJTJCcEd0bTF1UFVVY2VYN3lSeDhLTHR4JTJGMXM1eG9OJTJGZWZwVnI2QzhtdVZWZlV1TE84a01yRUllVGVtN2ZhUms1SXk1RmRUdVo5QjE2OXRyR1p2cWtjNWVGRDhTbUp6elVjVHRzcmNlV0h6VFQzZlJKdjBwNVVadnRPWVlyZ0N1JTJGSlY0UCUyRndBTkhuUHJqODN2TTJsWDl6cFdvQkpZSW5hSjU0MHBPaTElMkJHUlFEeGY0Y2xuNVozcVQyc3RqV3JLMGlleEVnRTYwJTJGMlhMT1VmbUhZTlplWmJoV1A5NEF5biUyRlYlMkJEJTJGalZjbExsYkVkUW45NTVxMXdUaVUzaHVMYWRlUUNzZlNsak85Vk5ldiUyRkFBMGJZSHViMVo3VjV5V2toSHhwY1ZISk53R2l1UDhBS1N0VmslMkZieUdhZnFMUXh5YWZPNVMybFBKV1VBbUdRJTJGN3VpQjhmOEFkMFglMkI3RiUyRnk4Q3RkNmpwbDNMYjN2JTJCa1FUcHhuaXFURGNRbjdMb1IlMkZ3VWIlMkZBTERaQ3l5ZWtXbDlaeWFGTFBlbFpHTjJ0cURFdFpKSGVuRXM2N2NrcFZYd3ExYlU3RzFpS1d2cXRjQ1I0YmtraEZZeCUyRkNIWGh2dlg0OEMlMkJVN0gxU2JLM2s5V3lhNWh2NEhjaFNCRjhGeEJMMldlT0oxayUyRjRzOVA0Y3UlMkYwaiUyRmMxRnBobUZ4UExlT2haQnhBaUw4anQ0MCUyRmE1WWVnVjZQcHJ2THBjRThzZnBUTmJoM1FWb0dLMTJ6bHVvUTJQblppaDQyZm1XSVZ0NXo4TWQ0cTlJNVA1SjE3WjJBOFlyV1ZsJTJCRVJvYUR3b052dXBuTHRiMDJMelJFZFIwaEJiYTdiVmU0dEVQRlp3cHI2c0glMkZBQmIlMkZBSk9Ta2dQTkxxR2FHN2UzdjQyaXVvVHdsaWNVSUs5aU03NTVLbkdvZVQ3Wlg2bTFDSCUyRllTTkNmJTJCRk9jdG51SWZOa1NXZXFFV3V1MjQ5T0M4Y2NmVzQ3ZWxjZCUyQmYlMkJWblElMkZ5eVM1dDlEazA2N2pNVnphU1hNTEszaFJKbHA0cjlyamtRbDVQYmFsY2FSZCUyQmxJN1Bid3lzSTVsTkpJaXJVJTJCSCUyRm1uT3VlViUyRk9VZW8lMkJuWTZoSXB1V1g5eFB0d25VJTJGaHolMkZuVE9QZVk0elklMkJZTlRncFZCY1NWUTlDckhrUDE0R3NiOXJGZ1JXU3pZMUsxJTJCS05oJTJCMHAlMkZaY1kyUWRsZXYlMkJaJTJGTEt4SzE5cGNkWUJVeldxZFl4MUx3aiUyQlQlMkJhUDhBWiUyRlp5SFc5eGU2WmZRNnBwazdRWHNCRFJUSWV2c1IlMkIwcCUyRmx5WSUyQlVQTlIxS0pMSzVsRDNLclczbTZlc2c2N2Y3OVQ5cE1EJTJCWnRDalRucVZpbElXJTJCS2VGUnNoUFdWQVAyUDklMkJKJTJCemtaUkIzRFBGbGxqbHhSUHo1RWR4OG1jdyUyRm0zYVh2a3pVTHlVQzMxMjJqRVQyb05BOGtoOU5aWVQlMkZKdnpiJTJCVE9aYWJJaG5Xa2dhT1Fjd3hPNTc3JTJGNWZqaEtJWW5kb1p2Z2FVRDA1djVTTjFKJTJGeUc2WUkwUlo0dFMlMkJveUtRUzFIVHdZSHNmZkFMcmRPUXdNJTJCTEdPRUhmaHU2UFd2SjZmNUZzZnJYbnFXOEslMkZEQkVaRDRjbUFWZjFaMmZPU2VTTG1mVDlSckhFV2x2RFNaYVZhZ05SMCUyQnp0blc4bVdzdXpaczJCRHMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlmdiUyQmJObXhWMlk1c280cXc2V0w5SGVZTGlMcEZjVW5qSFFmSDlyJTJGaHVXU2JUbkJnTVhlSml2MEg0bCUyRkE0VCUyQmE0ZlRXMDFGUnZESjZjaEElMkZZZnBYNU1NR2FYY0JtSHhiU3JzQ2RpNiUyRjJmOFJ5WjNqN2tkVTR6WnpyVGZPMnFRYTNlYUhya2F4NmhhdXglMkJyOUZrZ0olMkZkVDI3OTBaUCUyQkd5ZFdXb1d0JTJCbkszZXJBZkhHZG1YNXJrU0Vvdk5tMnlpUUFTVFFEcWNDdDVzTDVkWjA2S285WVNNTnFSQXY4QWl1Mkl2NWkwcUplY3NyS28lMkZ3QWtrJTJGY3RUaG85eW82OWh0YmkyZTJ2QXBnbUhCMWNnQTElMkJmZk9ZWCUyQm5YZmxYVWdoSmV6a05iYWJ4SDhqSCUyQmRjUFBOODJsNjViMmoyMTNETjlXZG1tdGVmQ1JrZGVKYU5TVmIxSSUyRnRZWFdNOGNWazJqYXZNOTVwVXY5emNQdkxCJTJGSTNMdnd3aElUMngxMktDQnJ4anlqUlMwNmpyeEc1WUQlMkJaY3J6enBrWG1qeWhMUHB6Q1NhRlZ2OEFUWm96dVhqSFA0R0glMkIlMkZFNUprVW1qdTlCdWphVHNKWUhIS0M0RzZTeG45ciUyRkFKcXdKSDVnMWZ5akRhdzJLcmNhRTB6U05FMjdSaVFtdHVYUFNKNiUyRnVXJTJGWWt4STZoVWc4aWE5cXVsYXRIZTNzMGs4RGd4R0taeXdCayUyQnkzJTJCVGtuJTJGTjYzYTh0dEcxYTNySEwlMkI5aElCJTJCSWRHSyUyRjhBQkE1RE5iUzB0TCUyQjRrc0pPZW56RVRXcmpZaU9UNGdqRDlsNFdxakwlMkZBSk9UVFU5WHROYzhyNmREUDhFOHJjNGlTUDcxUndrVGZjUCUyRkFMc1glMkJmbGdxMDl6RnZLZW9UTXdWMk5lQ3NCMEJhTnFmOGE1TjladTU5SzgzVzJwV2IlMkJuOWNqQm8yNFpYVU54SSUyRjFseUNXc0w2Zk5iM0xMeGlkMjR0U2dJTkE5UHV5YjY3cGQlMkZyMmthUGM2YnhONWI4b3dXWUtBWVclMkJHcFA4QWs0UnlRVTh1Zk9GN0pMRDlYUkxhQWo5NlpQaVl2NEE5QW4lMkZEWU9mejlvRWJ0QTBralhTcUclMkJycWg1TnRVJTJCa1c0aVFMJTJGazV5SyUyRml1TmFnakVjcFRVN1JqNllxYVNBYnRHMyUyRkZpbjRvbSUyRmElMkJ4aFhjR2VXeGxEZ3BQYmZ2VUZhUERLcEZYaUklMkZZayUyRmslMkZtd0ZYcjBuNWhmWEJKRnBWdHhtQzg0ak9hODElMkZhS3F2N1NmeTVHTDd6SnEycndYRmhxRjQwQWxXaVNRZkFFUFZXJTJCSDdTZnolMkZ3Q1JrVGwxZExXM3Q3eGk4MTA4QzNnOUVCQXJDbkk4anRWdnROUmNSMXp6VGRKY1F2WXdSVzd5Mjhkd3pGZlVibEl2STA1ZkFvJTJGMk9HeFN0M3pTVzlMUFhJVE1sQ2ppdXpvZnN5UnQyWWZzUGtkMGlhYlR0UWtzcDFacmE0VTg0WDZTSiUyQnc0JTJGd0FvRDdFaTVkenFWN0xGQ3Q3S1puVkFZJTJCUnF5ZzlhaiUyQlglMkJUSmRvdXVhSHJsdGIyUG1DTmZya0ttTzJ2S2NUJTJGa2dzUDJ2NWNqdGFwZm8wSnQlMkZNbGxGR0hsdFp2VmVLNHB0d1dOaTZ5VSUyQnpJdlJsd20xbVVhcnBOdEpIRVd1dE9rdUliaDBGU2Jma0dpWjIlMkZiNE14SCUyQnBrNnVaTk04c2FkZHl3U3ROSzYwNXRzS25ZY0YlMkZtYk9aeTNzMm5XYUxFJTJGRzRlNCUyQnNLNDNIRUx4b3dPekslMkZMNGx4NWZGV2IlMkZscHJQMVRXTFFNYUxNRlJoJTJGbFJ0eHIlMkZ3TFluJTJCZk5qTHAlMkJwMldwd2doV0x4dWYyU0dvUlglMkZBSURJOXBlbzJrTXRqZldRTVVpM0pNOXUyNGo1clQ0RCUyQjFHNXF5ZnlmWXpwJTJGd0NjZGltciUyQlVyYSUyRkclMkZ3cElTT29JcFhKRGNJUE40SERjUjNTY2wySTZxZW9PR052Y1F5dyUyRm8lMkIlMkZKV0dwTnZQMWFCeiUyQjBQR0Z2OEFka2YlMkJ6WEl4U2F5bTJOQ09oN01NTllMaExsT1M3SDlwZkE1RlUzMHZVTlE4dWFxaklxc2FxSGlPOFVzWjZFZUtzcmZBJTJCUzN5VXI2cDVpdWRUbDJTMVJ2UlRjaFRLZUNnViUyRmxUbGtPc3ZVdmVPbjhWa2RhdGF1eG95TiUyRklEJTJCMHIlMkZ3QW1UZnlZSHNyblRkUGFzYzElMkZOY3pYTVpBcndoVDA0ZzMlMkZBRDA1WWptbDZGZGl0bGNtdSUyRnB2WCUyRmdUbks1YlM0c3AxbUR0RklENmtMaW9QWFpnYzYxTkdUQk5ING8xUHBVaklwTmJ5WDBVbHZjdyUyRlY5VHN0N2kySXFIV245OUVQMmtaZjd4RiUyRjE4bk1YMXBBTk1SMVRUWWZNa1J1WVlsdCUyRk1FWTVFZllXN1VmdEwlMkZ3QVhqRGY4dSUyRk1Gek04bW5YNk1KTFdSRmtNaDR5aXF0R1VZVSUyRlpQODJJelclMkZINERWUUclMkZkdVB0UlAxRkclMkZsYjlsc0c2WkpESmZQY3ZHSTlXQ29KWndQaG1SR0hGMlglMkZmaTRBUDJwZWFmbUJFOEhtcThMZ0FUQ09WYWVCVUwlMkJ0Y2phdVVQaXA2cWUlMkJkSjgyeDI5M1BiMkd0eUw5Wm1XUm9MNVFBVVpaR1FLNDdwOW5PZDM5aGRhWmN0YVhTY1hYZFNOMVlIb3ludXB3RkNMMHpVWDB5NFNWR2Y2dVdEcXliUEc0Nk9uJTJCV3YlMkZBQTY1Mm5SdFklMkZUZHFKYmZqTGRxbks0Z2pwU1ZlbjFpQmY1RyUyRndCM1JmN3FmT0N4eWNhcXdxamZhSDhjayUyRmslMkI2MUsxMUFDMWtaWUlUNmdtQiUyQnh5Mm9QJTJCTWklMkZDNmY3TEVHbFpDYkJyJTJCJTJCdSUyRnFxcEJDalA2Y2J0eEh3bjRsanJYJTJGZ2NrT2oyRU1jQzZsSzZ5VFJLWW1rSW9ZbDZnRTl4VDdMNUhoY1RKcU0xakpDRWpqUVNRc0s3cVQzcmdpJTJGdUo3UFRES1EzMVM1ZjAzWlBpM1NyZkdQNVJpS0c2YmVqJTJCUVB6QjBDRyUyQnVOSHZCOVZlWng5V3ZaS0JYN2NDZjJQOGpPdmdoZ0dVMUIzQkhmUEhhUXJmdUV0M0RIa0FKYWtLaFA4QU8zN0ElMkJlZFg4aSUyQllQT2VuNmROcDJxSzV0NEpGanM1SENseW9OSmZUZGllVWFMOFMlMkZ3RENaRWNSTkVjJTJCcmZPT0tXTVRnZUdVYUVvSGZpJTJGcFJQOEF1bnQyQWIzVW9yV3FBYzVRSzhlZ0h6T1BodW9UWXJkZXNKWWduSnB0Z0RUcWR1JTJGdGtUMUM5WG5MUEl3b2ZqTGR1SjZmaGtnTGNZc2kwdlZSZlNTUlNVV1JkMVVlR0dneU4lMkJWckNTa21yWEtsWG5IQzNSdHVNWFhsVCUyQmFUSktNVFY3SmRtelpzQ3V6WnMyS3V6WnMyS3V6WnMyS3YlMkY5RHYlMkJiTm14VjJiTm14VkI2cmFmWHRPdUxYdkloNEh3WWJyJTJCT1JiUkwlMkJzTVRNYVNRc09TbnJzZUxaTkRuSWRmWFh0UDh6WHRuWkdDMnRKV0VzVXo4cEg0eUFFOFkxNHJzM0pmaWJKUlBNS3lmOEFNWHllM21LeWgxTFRIJTJCcmExcHg5UzB1bEZTVjZtTndQdFJuSWI1ZTh3WGx3JTJGd0NqOVZSOU4xdTEyUEdvRDl2VWdmcEpHJTJGN1VlZE44dWFwY1hzSDFlN0MlMkJyQWklMkZ2VjZPUHMxSyUyRnN0dGdMelA1WXNyJTJCM056SEZ4bWpQTWxOaiUyRnJMVGRXSHRpTnRsVTlJODJzeGExMWxBc3NmMmJtTWZBOVBGZjJHJTJGNFhJdDUwMXk4MVN5a0VFalJRUk1HRWFNVjVMMCUyQktuMnNxNGtlM2o5TzRhc3V5TE5Tbk1kdVglMkJWJTJGeExDZlZaJTJGUzB1OGNEa1ZoWWhmR2d4b2RHUUREWlBNY3VsdXNUenB3cnlNVDdtbmVoJTJCMHVUVk5MMWUlMkJzb2IxdExtbXRKbEVrYkZXNUZHRlI4TmZVemkyaVElMkZYTlh0TGpVQVhXZTZoRTNMJTJCUXlLSEclMkZiam5xenpQNW9rMEgwYmF4Z1dWeW9kaTVJUlU2S0J4NzRBU3J6T3pzZkwxdGNINjlwcE10ZHhNMGg0JTJGODgzT1MyR0xTNzIzOUsxcEdwR3dqJTJCRXIlMkZBTEhwaFZjZWNCY3lyYzZ2QkZkYWJMJTJCN2xWMFVQYnQxMktEbnglMkZsWVlHdnJXS3dQMW5UcDNraXJzVDBCcFdnY2RmOEFaREpnJTJGRmpTYW5TYjh4QzJ1cnNYdHBHNWt0N2RrVlJHYVU0ZyUyRkVUeSUyRndCYkl6YzYweFNleWxzZ3BoREplYWZOdElZJTJCbnFSRWZDeWdZY1dQbVYxNHgzcWtxUUR6QW80WCUyQllyJTJCME1FNmglMkJpZFpaSW1qTTkwRkxRelFqNDBCRk5uMiUyQjFYN0RZa2QyeWklMkJySE5JaDh1WGJMcDd5TEpkVG9aYlpKRFgxRVUwTk9YeENlTDl0ZiUyQko0UGhiVEx5YTU4c1hxcXQzRW9LbFY5TVNvUlVNbjhzc2Y3WEglMkZYeUQlMkJjZktGem9XblJhdEZxVVVVJTJCblNHU0dBc0JjRlhaYUZlSEpWWkR1MkhPbjNTZWU5S3QxJTJCc0N4OHgyeSUyQnBhWGFiQjJUeEg4cFAyMSUyRlp3QW51M1ZRdVYxQ0MyaVc5Y3glMkZ3Q2tTMjhrTXRBNWRLTEhMMSUyQjAwVEp5WlBoayUyQjFuUyUyRktONTlaMEdTTm5vNnlJNmUxVjR2JTJGd3k1ejlwdjhZV2o2SHJjZjZQODM2RVdtaWlIU2ZpdjJveCUyQjJrd0g3UDJmdExrMjh1eHJiZVhZTGhZWFY3Z016eGtFMElxUGlxTnElMkZ5NGdiJTJCU2s3UE5kWDFtJTJCSG1xYXl0SiUyRlR0VGR4JTJGQkdvU3U2c3dacWNqOFliQ25SbU05N2RyS3hLWGNzbHU3dFhiMSUyQlNCcSUyRndDU3paSzljMDZ4dU5VdXRTdGtCbHM1SUZrQUlBTW9IcVVVZnpOUmtiQ1BXNVhzNzByWmNWdEwwJTJCdENvQUZWYzFvSyUyRndBcm5pMlJJU2hkRDByVTlaMGcyVU5XMURSNUpMRyUyQmlyUmxRdVhobXAxWlA3Mk0lMkZ3Q3BoNzVnMEsyc3JhMjFHOGNoNWJhR0pVcHQ2eUFSdXZMNk9XRVFrMWVKcnE5czU1WUx4Qnp1R2hKRWpyM0xLdnhTcXY3V0lTYW5xMm9RUlhHcnl2ZDJNdFZodVNROGFOUWNoOE95TmpzcUVsaEsxaGJjciUyRmN2M0slMkZ5ViUyRnljUlNRQm1VaWlmc2ZRTTZGcGZsalNiclIwbUN5M0VqRGxESXpOOXNHbnBoVSUyRlolMkZsYklycW5sJTJGNmpNM0NiMVZScU9vVTgwNzhYb09IUElTSWlRQ2Q1Y2tnRTN0eVM0U3RLNnhTeSUyRkRKJTJCN0hxc2VPJTJGWVZ3MFcydGhhdHAxMGhlMmI3WUgyMWNmWmxqUDg2ZjhBRCUyRll4TzR0Yk80c280STdaVXZHNUxwbDNQc3NwclV3czM5MkpEJTJGdXQlMkZ3Q2JBT2g2c0x1VTZWcVlNRjRoS1J1Mng1RHJGSUQwWVk3cnNoNHRNbjA2JTJGa3NwanpqbmlhUzFuUWZESUUlMkJKV1h3ZGFmRXY3T2QwdWdubUw4dG1ZaXBXRU9CMW9HV3AlMkZ3Q0g1Wnk0aG9UOVd1VTVCVHpqN0ZIcCUyRmVJZTMlMkJYJTJGQURyblIlMkZ5c3ZSZmFIZWFKSXdaNFJKR284UUR6USUyRjhBQXk1T1BWQmZQTnhicE1waWZZcWFCdTRJd0ZZV2x4OWZFSUpVN2xtSDdTJTJGODNaSjllMHg3Szl1blJnOGF6TWtvSFdKeVNWUiUyRjlZSDRXJTJCemolMkZLdHZGZGF4QkRMUUt6QVZPMjQzRyUyRjhBcllQSlVYYjJOdkRadGR5V3hlM0I0bWVDUSUyQnRHMzdKa2piOWxhZmFYSFJYbDlxMnI2ZXRuV0o3WXh4MjhoJTJCMVVOeU1qdCUyRmxING15WDZscDFwb1BtNTdDSUZMRzhqaWtDc0tpc3FxWFduY2MyJTJCemhMWlcwT20zNWhDdUxpQ2VTZ0lIRlk2N0tUOXJsNFlhVjYzSXdNVlNha2cxcHQyN2VHUnV6dnJUV0lMZFlibmxjSVdYU2RRYzhXNXBYbHA5MSUyRkxJUDkxTSUyRjk0bUc5dGNmVzNBUTE0eGdzUEg0YzRacCUyQnR6NkhxTjJySjYxbk5JeTNsb1RUa0E1NHlJZjkxelIlMkZhaWx5Uk5VaW5wVjBpWHF5eXh3JTJCamRXNU1kJTJGYU4xaVBkcWY3NGY4QTVKdGthMVpaNExXWXhzeVNLcGFDUlQ4UUklMkJJeGtqMkh3NUtMZTYlMkZUc1VGJTJGcDF3c21yUlJrMmwwUUFMNkZmdDI5MGclMkZ1N3VQN0xvMzk1aEZxdXFhTDlYWm1tV0NSd3lTV1RnczhNZ0c2T28lMkZZNWZaYkFVaEMlMkJaOUpzZk1sMVNLWVclMkJxeVFSVDJETWYzVXZKZVR3dDRNNSUyQkpjaEt5ck9yNkQ1Z1F3VFFFcEZLJTJGd0RlUXY4QXluJTJCWkRrJTJCMUd5ajFldzBTYUM0Z1M1bnRtQ3RYMEVMUXRRQU0lMkZFY3Y1Rnd2MWJReHIlMkJuaHI0b21zMnltUDZ4dUNTdFNJYm9mNnY4QWR6WU9hR0FRJTJCWGRUbTFOZExqajVTTjhRa0c2Rk92cUJ1JTJCVGpUclMyc2JaTENNY1ZVbWtwRkdMbjdSZiUyRkFGdiUyQkZ4VFRtZTEwMkRUdUlMSXdacEtrc1clMkJ6eFd0VzQxJTJGWnlVMlhsVzQxSGhjYWh5dE9RSlpWSEthWHclMkZkJTJGN3JZJTJGenZpQXFRMjFsZFh0eXRyREcwazUyNHFLbW5qOHNPNzM2cm9ObU5JbHRmVnY3aEZlYU1ua1VxVHdweE5BMlMyTWFUNWV0Uzl3NldkdEV2eDFiNDJBN1N5bWglMkYyQzV6VHpiJTJCWnVuM3N3T2phY0dWS3dycU1nb2FqZWlKU3IlMkZPVERWZFZaUFlhM3BPaiUyQlc3dTMxdUtLenVaR1AxZGVQUDFJejFVb3Z4dEolMkZsWVUlMkZsJTJGNWhPdHlTJTJCV3JsaXMxR20wcHlmaVI0JTJGaTlLdjdTdW1jcnZOWW51NURjWEg3eVRvYW1yZlNmNllMOHJhdExaJTJCWnRKdm9UNmJ3WE1iRWp1Q3dWaDh1SmF1UEZ1RmUlMkJ4JTJCWUo0Tk1hd1FpT0Z6eVpPbERYNGglMkZ3UXlRZVZ0QW4xQlk5UjFRTjlXVTF0b0clMkZhM3FHWWVHRTNsblJMUFZmTTE5TGRBeVdrVHRjVzhhN3hPR2FxMWtHejdrJTJGQU02bW9BQUNpZ0EyQXhKN2xvam43MndBTmdLQWJETHpac2lyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOUh2JTJCYk5teFYyYk5teFYyUXp6M3AzUDZycUtiRkt3eXQlMkZrbjRsSlBzZVdUUE9WZm5YNWdtc3ROdGRCdG5NYmFqeWt1WEhYMFl5UGglMkYyYiUyRndERWNicmZtMjRNUnpaSTQ0N0dSNTl3NnBNZk55V2w3RWREMUtNM0NwNmR3b0tsZGolMkIxekhFJTJGUmtvMHJ6MXJVdHo5U3ZMZTJsbTJIcDhqQzdCaFdxVjV4dlViJTJGRG5uMDFqUEVpbjhwSGdja2VtWG1zVGFIY3hBTncwNW81N083SUlLeGxpSllsbCUyRmFSVCUyQjg0JTJGc05rSVpoSWtTalJEbDZ6cyUyRndJakpDWEZIa2I1Z3AzJTJCYTJyJTJCYmRQdUV2WUxWYkxScGlGTDI3YzJFdldrajAlMkZkOHYyVnBrR3NmTjJwM0tyYTNWMlhpY2dFc1FlUUozcVNOczdkJTJCa2RPMXJTYkt3MUxoTiUyQmxiUlhWSktGWnlxOFpWMyUyRjNZR0hMT0VlY3ZLRng1VHZUTER5bTBpZHYzRXZkRyUyRndCOXlmNWElMkZzdCUyQjNscEhVT3ZzdWE0aU53YldDcnVISyUyRkIwcU45ajB6b3klMkJhclc0OHIyT3EzbDFMZTJzU2l6dUdrcWs2emdVVlhNZGE4RiUyRndDRFRPTzJNMDFySXMwWENSUTRrSHFDcUduWmw3NE5na1RsTXFTT0lacFBWTnJYakdHOFF2Zmoyd1h6U3lxejFlTyUyRnROU2pRTThzVnViaEZiYmtJcFBpSSUyQlVSNVljYTNxMTdJZFBtdFoyanM3eXp0cmlPTk5oeUFLU2NpUHRNSlVmSVphWERXTCUyQnJhMGpjcTBaWUFWNHlBcTZtdjh5bkpmNVlleDFQUmpwVXNmTyUyRjBwbnVMSldOUFVna05aNGwlMkZtOU5oNnZIJTJCVnBNUmEydXZCY1hlajJHcDJyU0M1dEpKYk9aa3FXNHYlMkIlMkZnWSUyQnglMkZlSmh0QkI1c09pMzEzYm9MYTlpaE1sbzNFQjVDbEdrVUx5JTJCMTZYSms0cmhsWmFyQkZBYlpsanRyUzVUZyUyRm9JRjRmeU9UMUpqYkMxTCUyQmJTYm93eU13dTRXcnpKcnlYOWgxUFFweHclMkZGV0ZYTnV0OVBCNnNyUzZmcmxxSTRKWkhKJTJCcjMwYkNzYk9mNXBoeDMlMkZBTjFUJTJGd0NSZ1BRYnRyZVZyRUZyVzhnZm5EVTBkSlVQRjA5dW5IRCUyRkFGZXlnamp2YmkyaGFUUWJweGNYbHBIdkxwOXg5bjZ4Q2xmanRqWGkxUDJQM2IlMkZHc2VFOTlvbDlxdHlqSUthbVlsa3RiNk1uMEw1UUtKOFpwNmQzeCUyQkg0dnQ4T0QlMkZ2Y2lUWFBaYVolMkJrZHA1JTJCZ3QxOVlhZDVwMCUyRmUwdlUyWThUME5QaWFNJTJGdEolMkZ1dk9qNmxjR3lzRmFSbFl4SldVamZrVVhrM3o1TU01cCUyQlYybDNVMnBQZGFsRkhLMXNPTHlxUXhTWmFGT2REV09UN1clMkY3ZVRUeks4VWRsY3hSRWhYQlRmJTJCZHpXZyUyQjdKeE5qaTcwSG5UeiUyQjUxR1h5cnJGeGFhcEQ2OW5mY1JxU2Z0cXhITDFvaiUyRk9qUGp0UTBHTllDZnJDWFdpM1FNdGxlbGh5amtZYkZmZHZzeXg0TTg3V3k2enFlbVRxNFg5S3dRbm1lZ2tLJTJCbWYlMkJTaTVHOU0xUFZmTFV0M29kM0NKSUdERVFTN2lLVUQ0Wm92OCUyRmp5RXJxcnJ1UE5rSzU4JTJGSk43U3gwJTJCMHNEZTNrMGs5eEE2SkJKQUNHcXdQSGlLcDhTOGZ0czJGMG1yRFMzbnViUFRoSDZaTGE1WWNRc25CdnMza1NzQ25KZVhKdUslMkZCJTJGd0FZbXdRJTJGclhkakVzUVJpemh2aktDclVwOElmNHVXJTJGd0N5dUszRnM4OTNwMW5lemZWZGVEQ094bUhGaThaSCUyQjg5d1NlQmpQMll1WCUyQlZGaVlnZ0E3MFBtdDlRemZ5amR4WGVpUGVhWTNyTll0OVpqZEtVa2dQMmd5ajdMOGZ0TCUyRlBnVHoydHVMZEpJVDZjTjFKRmN4ekoyVTdTYiUyRnMlMkZhNUJzS2ZMRU12bFBYYnkyc0pJNDB1RiUyRjBpelZ1VWNiMDVuMHozZ2tUbHclMkYzMjM3dkhlZGRYTjVwRU1kbmJtT3lzNEJGY3kwcURjRjZHSmElMkZ3REZhY215WDhQdTJSMVFPaTZZdXBhYmQyRjc4ZGo2eGpMVkZVbHB5U2FId2tVZjdGMCUyQkRJcnJ2bDZkcjQyTjBlT3RSSUhzN2xka3Y0QjlpamY4dEtnZkIlMkZQJTJGQUhYMjhtUGx1eWIwVnM3T2RUTDZTU1Jlb0s4JTJGVFpxTiUyRnJxT1BMJTJGSndUcWRoRnI5bTFscVVoam5oY20ydXY4QWRsdE4lMkZNS2Y3cGI5dFA4QVpyalZoV0hhSHJFV3F4alRiOWd0OUdLUXl0c1hwdHhOZjJzbDM1ZDNKMGp6bkpiQ29qdVFsUjI2Y1QlMkJ0YzU1cXRoZHlYY3l5SjlYOHdXZngzRVNiQzZVYnJjd2Z6UzhmamZqJTJGQUh5ZnZQdDg4TiUyRkt1cTNGM3ExaHFCSUV5YzRwV1p1Q2tvQXdjazlNQTUwVlBKViUyRk1xMmswVHpuZkNKUVVtUEpvbSUyQnpKRyUyRnhjVzl0JTJGd0RZNFE2Y0lMYTZaWTJlS1J3c2x2NmdvYURmanklMkZhSzRmJTJGQUpsZWFkTTgwYTh0MXBjWjlHQ0pZbXVHMk1yRDdUQWZzcXYyViUyRm13cjBXeXVOWFV3JTJGVnhjaTElMkJLTHQlMkZ3MjN3cmc2cUdWYW5yMXZySzJ0M2NzSXJ5MWFFU0JqeEpFWVlPUWZmNGNqdm0zekxicFpYTFdUR0M1dnIlMkZ3Q3N3UmpmakJHb0M4eWZpJTJCSWpDUFgydk5NdSUyRnFaRFJOR0tTQWdVcXhxZ3FLcnVGJTJCSDRzanN5UFBJWlpTWEo3a25mRzFlOSUyRmx4cmR0NWtzYnFkU0Z1N2VNTGNXNU80JTJCRTBjVjZ4dm5GNzV1VnpjYjE0eXlCVzclMkZhTzJLZVM5UnV0Qzh5V2Q3RE1ZTGZuNmQzTCUyQng2RDdTTEo3WWhka05kM1VrUkRSU1hFcnhNRFVGR2NsVDlJd25kQ3RwV3J6NlpOOE1za2NEc0dkb2p4a2pjZlptaXAlMkIydjhBTCUyQjNpV295U2ZYYmlIVW1GeTE0ZnJLWHFING5MMTR6SyUyRlZ1WDdjYllFZUpXRFBRVnBVMFBqMHg2eXFMTDBwSlVXNHRYRTFvNU85U2FTUmJlUDI4Q29iMVoxVDZ2UEt6eGplTlNTUUs5YVYlMkJ6blhMZlVyZHREdDlUMVUlMkJqZVJ4cGEzaU12RjVWNDFqY2clMkZ0cnglMkJMT2Q2VmJhVHFKbFM3bE1sNUlyaTNoSHdSaVFqOTIwc25oek9EcHBXc2lpNnpjR2VTWmczcG8zTlN5JTJGRCUyRmVuNEs5VjU0MnIwTHloZWFYY201dWFDQ1dOaHhrbCUyRnZDbE9xY3ZzNHJybjVnMmVuSTl0cEtpNHVxbFdjazByU3Z4UDhBdGY3SElUYXpwY2NyaU5hTEdEJTJGb3pHbkJWSUprWlAyNjElMkJGdVdFNGp1THFTWm8ycGJKTWp5aXRBUWVWUHdyanhiVUUwMXJldVhHdkNLUFVaSjJDczBpcWdVZ0Z0dW53JTJGQ0tmRGhXTFhTemF5Vzczanh1R0VsV2dKVWJVb1NEaGtMY1hFakpEU0pxa29TZCUyQkg3T0dsaDVhMUh6RE9OSWl0JTJGV3ZaRU1rSlJsUXRHbEtzQ3hWWDQlMkZ5JTJGYXdXdElMVExUVG1lTW1iVHJtMWpYZTBubU1MT3dIMm5abHJXdiUyQlZobEJiNkxxbDA5enBlbXJieDJjSmU1V05xaVJpM0VLcmZ5aiUyQlpSOFdKNnglMkJWUG5YUXJLNDFpOXNsanNyVUI1cEJMR3pBVkNnaU5XTE51ZnM0SThoNmhwNzM4c054UkJleGVpNUJvQkpXc2NnJTJGMlh3NFZaam9NbGxGYng2MzVZNTJrOW12UFVkS2FSakhJRiUyQjA4UEluaEpRVjYlMkZhJTJCSE9xNmQ1JTJGMEc3dG9aekslMkZCd0t6QkNWclRvM0dwUSUyRjYyY1lXMjFEUSUyRk1VVnJGSCUyQjV2eUluUFNJcXpmRTFmMmFmYXdrbXRwNDJrbHQwZjZ1enVJbldvRHFyRlFSUWprTUpWOVEybXM2VmZpdHBlUlMlMkJ3WVYlMkZ3Q0JORGcyb3p6cjVZMXZUSTdWOUwxUG5iVERrOEU0UXM3TTFLS0hCRHA5R1RmUWZPZG9zU3h3NnR4a3A4VU4wRHhCRzM3V05lYTA5VXpaQk5ZJTJGTTNTZkxjVnJMckRJeVhaS3dtMmJtVzQwRHNGMyUyQkZhJTJGRjhlVFcxdW9ieTJpdTdkdWNNeUNTTmgzVmhVWUVLMmJOWE5pcnMyYk5pcnMyYk5pciUyRiUyRlM3JTJGbXpac1ZkbXpac1ZkbkUlMkZ3QTlyS1lYbWo2alQ5dzBjdHVUNE9wRWdCJTJGMWxPZHN5TyUyQmQlMkZMVWZtdnklMkZjYVhzdHh0Tlp5SG9zeWJvZmszMkclMkYxc0I1T1JwTW94WjRUUElHajdwYlBsJTJCTlByRVJpJTJGYUc2SDM4TWtQbFh6aCUyQmpoSG8lMkJybXVuQ3F3WEZLbURtZmlTUmYyN2QlMkZ3QnY5cE1KQkRjV043SmFYY1JodVlIS1RSUHNWZFQwUCUyRk5XQjlSaVdPNmFnJTJGZHlnU0w3Y3V2M0hLcGt3SW1QY1hvTTJLR2FIaHkzQjNCSGYzaDZCNXFzbFhRb29OT1ZvZjBhN1hkaTZmRHhCUEtRUTc4dlQzNXhObDZGcjFsNXMweVhTTlpSSHVqSHhsUmh0TXYlMkIlMkZFOEpCOXIlMkZBSWZJTG8ycFQ2WGZMZDhtbWlLZWhQQXpFOG9UJTJCeXZLdE9QV1AlMkJYS3ZyYWZTcGwxWFQyTDZlejg0THFMckUxYThXSDdQSDdORGxrTW9sdVBpSFJhclJ6MDVGJTJCcUo1U0hmMUNUJTJCWiUyRkxsejVXdnZUVW1YVDVqVzJuUCUyRkVIJTJGd0NMQiUyRncyRmF1RDhTbjZjNjdhM1ZoNXgwcDdHJTJCUmZyQVdza1k2RUhwTEZYcCUyRnhwbkxkYzBTODh0M3B0cmlyMjdtc0UzWmxINm5YOXBjbVIxSEp4RlMzdUE0b2Z0REJsdmN6Mmx4SGMyc2pRenhNR2psVFlnakNWRzZNaCUyQldENFpSSXZ2M0dDMVo3cGR4SHJhTkpDVml1a3ExM2Fzd1ZBTzl4Q1clMkYzVWY4QWRrZiUyQjYlMkY4QVZ3MXQ1TlBrS2FiZTNTeXFLRzJ1SXF1WURYN0pjN2VpMzdhJTJGWiUyRmF6bTl0ZFQyZHhIZFd6Y0pZenlROVI0VUk3cXclMkJGaGt3aHZEcUVDVGFaYkV4eUhoUGJxS21DWWl2QmYlMkJLWlB0UiUyRjhEZ0lrU0R4VkhxSyUyRlN5QkZiamZ2UjhrMXhZNmdWdExiNnZKYlZXWmJodlZMbzM4eUFlbVlaRiUyRjRYQ2pXME1jWDk4NiUyQlg3MlVlbTZWNTZiZWtWQVlMdTBEJTJGOEFKU0wlMkZBSXRqdzdXMHV0VmdqMCUyQjdrOURVTGMlMkJuYVNNYUZrcnZheiUyRjh5WFAlMkJwZ3EwMGl6dGJrYVZjUDhBV0JlcjZOekV3b3JMV2pSc29KNHlSdjhBRWpyOWpHT01EYm41eTNVeUo4dmN5ZnlIcGwxcHVoeTMxekVFMWU5Y0pmS3hYaks4Sk1hVHFmR1pDcnQlMkZOOXJDWDh3ZGElMkJxeWFiQUdBTTg1YVlBOUZVY1YlMkZ3Q0d5WlhFbHZiMjBWZ0hiMUxlTkRFS21wS0RoR1MlMkZmT0slMkJjcmh0VTFHOHZMWiUyQllzejZNMFElMkIwbkJoNmN3SCUyQiUyQjVhZjdGOHNsc0FBeEc1dGtlc1RtNjhzYWRkbzNHYlRaNWJiMUIxRyUyRnJSZnJ4R1RXN0x6UHBjcmFoQUxmekRwaXI5YmlJNHRKRVNBWm93ZnRKOFN2eCUyRlklMkYxY0Q2Vk1iM1JOVHNTaEptaGp1NGdWUDJvdnRIJTJGZ0clMkJMQlZuYjZiNWcwdXgxSkdXRFhORGo0U0Vpb25nUWNHamslMkYzNGhYN0xmc1lCdWt0JTJCV2JhNGdXSFdtaiUyQnNXZHBLMER3cXklMkJvV2tvbkpFJTJGdkhaT2ZOY0tkYXNuazgwMjg4VE42RUVxeE9YTldTT0ppUzduMnA4ZUI0YnlTdzFpbHY4QXU0T1FrNDdrS28lMkJMdiUyRkxYN1dLNmpyNHU5VWVlMWpJdG5kaUlpYXN5djlzViUyRmwzd1dBRlpCYnZZYWpxc1YlMkZEU1AxeUlUUFVnU0tIOVNTaW5ZY0lSdyUyQkg3VFNKaHIlMkJZT3Iyc09rV21uaEhTSzZZaVJvbEZGNUElMkJuNm5nSmlmOEFXeVAyTUw2ZGJpUkklMkZycXNBSTNTUkFzTVklMkJ4SEtybEdoZmwlMkZlZkIlMkI4JTJGM1hnWFhZcHBKRzFtMnVua2JqNk9wMnBVU0tWQXFrc1NOc2lmNUwlMkZGSDl2SG9VbHJ5dGR0RENnZG1WN2Q1STJib1UlMkJJTkdUJTJGTGhwcjNuTFRLSjlVVDE5VEI0ek5IdENlM0pqM2IyWElzc3AxWThiVWZGT1FzaXg3U0NTbEFYcFRtajRhdjVPbnNkTSUyQnV6QjNabTlPV2FOR0QyJTJGTWdSVG9sUDNzWFA0WnY5MmZ5WWk2b0lURFZyRzI4eDZOQmVCdnFXb1dTMWl2U2VJaWtVOGpGSSUyQnpMQTYlMkZHbiUyQiUyQjN5RmFxMXBjWGl4MjhaVUdpM1Uyd2FkeCUyRnV6aUFFV3Y4QXElMkZIOXZETFY3VHpYZVdycWJhV080VmhIZU5IdEZkQ1A3RWhYNUQ0djklMkJmYndwQzNsaUdndklvVmRTcXQ2cExQR3IwcFRqJTJCejhYdzRDVWtFR2lsN1J3UnU5Wnp3alB4OFVaaUtlUFNoeWIlMkJSZk1kaEhNMmtMRVYlMkJzRGxETFFGbmNVQ3hjUlg3V0VGMURDczYzekNzNnI2YzFOa2VuY3I3cmdYU3BGc2I1ekNGb3JlcEM5UGlVRWZacjREQURSVkQlMkJkZFVrUG1QVTRsVWdWTnRORzRxRHcyQm9mMmtQMkd5SzFMRUNwWSUyQkFxVG5VRmhzdGExQ2UlMkIxRzNpbnVaQ3J5U3NncXdxRk5Sa3d1OVI4bSUyQldJd3NjRUhyaGFyREJHalNINXRUNGY5a2NJb29wNGRhNlZxdDJHVzB0YmlRSGJpa2JrSDU3VXdITkZMYlN2YjNDTkZMRXhTU0p4eEtzdXpLd1BRak91MyUyRm1xJTJCMW1GbzFDMk5tRk1qaFRRTEd1JTJGS1J0dW1RZlUlMkZNV2gzdW9UWHgwcjFwSmVQS1NXU25KbFZVNWxRTnVmSG5oUXhtT1l4a2xTUGlGQ0R2VVpRS1VJcFVuN0pyMCUyQjdEOGVZckJQN25SYlVmNjFXJTJGaG1QbXRrQkZ2cHRuRWV6Q01rajc4Q3BSWk9ZNXclMkZCbVdoQkNqc2V1U3l5bjBwSXBJcjJDU3IyZ3RiWVRRdDZheWx1ZlBwOFBCV2JDWlBOdXJST3NrWWdWa1lPdjd0U0FWTlJ0ZzI3ODAlMkJZUE5kNUNkV3VSSkhFV2tXT05GalJhaWglMkJGQVBsanNxTGVSclZoJTJCalF0M0dCUm9YQkJLQWZGd2FnJTJCTEoxNUIxN3lmZWFsRTJ0YVRIY1hNRzYzRXElMkZ2YllMJTJGdnlIJTJCNmVGSyUyRjNpSnlUOXZBWGtQeWdQTkV1b3h4M0tRM1ZyQUh0WVdQOEFlT3hwdiUyRnhXcWlqTXYyV1pNTGRTOHZCTHg0cGc5anFWcVRGSkl2d3VwNmZ2UDVsUCUyRkRMaWxsdjVpJTJCU3RQdEw4NjdwRUVjZW02aHhraXZMV2pJayUyRmV2SGIwNWZ0WkY5T2tkNUV0NW1heXZvV0V0cmRSbW5DVWZZbWhZZnpmdHAlMkIzazMlMkZBQzY4ekxmeCUyRndDRmRXdDFlRWxyYlVvVyUyQndHSXJEUEd2N0N5VSUyQkxqJTJCMThlSWVhdktNM2xxN1dxZldOT2tZaXp1WEZlTmVzRTlQOEFpWDdXTmJxQ25jZm0yZnpSb1VtZzZ6RXFhN1pQRFBQQ3Y5M2VRUk1DMDBBJTJGYSUyRlphV0xDSHpmOEFsN29PcmE1YjZoNUt1QkhlM3JqNjFZd3IlMkI1WGx1MCUyRkwlMkZkRGZ6eCUyRjhRd3B1cDRWV0JyT1JoZlc3aVMwWWtySmJrZFJMS3Yyb20lMkZZNGZienN2a1hVN2ZXTkhqdTNqaGoxWkFJOVVFS2hTSnZFbWclMkJGMSUyQlBFaFhnUG0lMkI5OHklMkJXcmlUeXhyTTBpQ01CbzVWVlc5YURvSklabSUyQkxpZjVmdFJ0aE41WDh6eFdYbSUyRlRaOWRIcTZISCUyRm96MnoxZU5MZDFLcTRUdndZJTJCbzJlbCUyRlBYa2pUUFBHa05ZM243cTdocTlqZXFQamlrcCUyRndBTkUlMkY4QXV4TThtYXpvJTJCcSUyQlY5VXVOSTFLTDA3eTJQRmxiZFdVJTJGWmxqUDdVVGZzdGloOUp5NmQlMkJWVjNmMmRqYTNsdEhlNmlwZXpTMm1yekFGZmglMkIyaU1mMkslMkZFMlhjZms1b2pvVFozMTFiejFKRWpGWEclMkZpdEUlMkY0bG5saDNVU0xLQ1k3bFNHTFE3VUkzREE5bXowTCUyQlZQNXdMcXhpOHMlMkJhWlJIcUlwSFpYMGhBRTlObGpsUGFmJTJGSyUyRjNaJTJGcllxcWFsJTJCUyUyQm9YYjJFWXZyYVdHM2tjeXZMRzNJUnV3WSUyQmtnUEZXMlBmSmpaJTJCUnJ1d3VGYTIxaVJZRkFDS0ZLc0tmNnIlMkJtZiUyQlJlVFVEeHk2WXFvMjBMUVFwRThyenNvM2xrcHliNThRQmkyYk5pcnMyYk5pcnMyYk5pciUyRkFQJTJGVDclMkZtelpzVmRtelpzVmRsRUE5Y3ZOaXJ6Yjh6dklmNmJoT3U2UkVQMHRiTCUyQiUyQmpVYjNFUSUyRlolMkY0eXAlMkJ4JTJGUDlqT0hhZ3ZxV3NNdyUyQjFFVEd3UFdoMzN6MXpuSSUyRnpMOGhxRXV0ZjBxUDRKUnp2cmRSOWx3UiUyRnBDRHclMkYzNyUyRndlUm5HeFR0TkJyZUV4dzVEc0Q2U2VuOUY0Z3BwaHRvMnByWVNTUTNLZXRwMTFSYnlBaXUzUVNvUDUwJTJGNFpjSzVZekc1UTdlR1BFVXlScE15a1JTRWhIN01WMkl6R0FrRFk1aDNPU0VNa0RqeUN4TDhiZWFaYWdseG9PcHhUVzdxTFNXa21uM2NYMmVKMzRueCUyRndBcGNsTXNlbiUyQmNkSWVDNFFDWlFQWGpIMmthbnd5eGUyUmpUNyUyQjJlMGJSdFZITFQ1U1dobCUyRmF0NU96ciUyRnhXeCUyQjJ1Sld0eGU2SHFTdzh3dHhEdkJMJTJCeExHZWdQOHlPTXljZVFFYmN1bzdubk5WcFo0Sm1NdHdkNHklMkZuRDliRU5VMHk4MEMlMkJhenVSeVRySElQc3VuWmglMkZUS2lsNGtTSWFqJTJCR2RaMUhUdE04NDZTWFVlbkt2MmdOM2dscDElMkZ5a1AlMkZENXlPOXM3dlJiMlN4dlU0c2gzSTZNT3pwN05reU9vNU9LbVN1R1VNdlE5TU1kRjFtNDBTJTJGanZvQUhVZkRQQTMyWkl6OXBHSCUyRkRJZjJHd2p0NVFoMyUyQnczJTJCZGNGbnJpcjBHVzVLeXg2aGF2Nmx0ZnFESGRkVzVEYmkxZG81ViUyQnc2JTJGelpMUExiUTZuUDhBV3JwQWJ5M29KR0kya1hxa3JmeXlxUjlyT1U2SHJLV0hxMk44R2wweTZwNjZMdTBialpaNHYlMkJMRiUyRmFYJTJGQUhZbWRhOHAyaTJ0azhzanJJN21pVElUeGtqJTJCMUhKUTdodUolMkJMSlIzSzNzbnVxM2ZvMnJ1b3FRQzNpZHZzZ0QlMkZXcG5NSiUyRkolMkZtZTRNc3EyakM5dHVVYVhjWEVSM2RySjFqYXBINzJOVyUyQkZtWCUyRml0JTJGd0I1blRkSWtzeXpXMGMlMkZyeXhWWmd6Qm1Dc2E0ZUNaQUtIRElXZ2JQRHZLOWpxdWg2eGFXJTJCdFc4MXJETDZsb3pUS2FGSlFWQUIlMkJLdGZod3ZzNDdteXZMJTJCTlFmVHMya0Q5VUs4Z1FLbHYyWHA4U3RuUiUyRnpRMUdXMDh1JTJCbFpPMGQzZFR4eFFzaEtzS0htN2hoOWppcSUyRmF6aTZNeEVpSTVZT2EzTnl4Sk1qVnJ1eCUyQklybGN0bVEzVFM5MUUzakNHMmpISTA5UjFxT2RPZ0ZmOTFyJTJGdzJDTEtGWXh5SkJJRlpKT3dIZ01DMk5yeUczd1JucTU2dCUyRlpodXNaaWlodTdjTVd0NWlyMnpweWlrVUFVOVQlMkJZY3VXUjVwZFBxaWFjUXJXcVhDelIxVVNWQkFiJTJGQUhZcCUyRm53dXRkVmh0ZFRhJTJGZ1dWQk9BazhCY05HOUJUcXlrNGM2cmMyZHhlMkYzYzJrY0tKR0k3cXg0a1VqcHlSMEI2VnIlMkZOaEJxYzloYVN4cEhFUmFYUmFXSXQlMkZ1dmNvVFJhNzVQbHlRbiUyRkFKWnZZSSUyRk1VUzJTTkVMaVZURXlnVWpuVlc5T2xmdEk4aFZXVnNuU1hWeGZUR1M2bGFTVmlDUzJ3b2Rqc05zNSUyRm84cnJMNjlxd2Q2cElycUF3JTJGZCUyRllQdzlPbVN1YTUxR1ZKNzYyc3dRWExDRDFBaXJ5TlFyTWZpMiUyRnlWd3hLa0lqVzclMkJlempSN1BUcHIlMkJVYnY2V3lVSDh6ZmE2ZHVPRVBualQ3U0VXbXJ4eGtTWGF0YXpvd0E1S1klMkJTY2dEOXFJcnh3UTNtUFg3RWV0cUZoQXRxUHRlZ3p5U0Fld0E0NUYlMkZNSG0xZGNSSUdqTWR2QyUyRnFSSUtjdVZDdkoyJTJCUiUyQnpnbExZMnloam5MYUVTZmNFcXVidXJXOE01SHB6S3ZJcjFGYURsNzljUmJScjZTOCUyQnIyNDVHQ29hYyUyRkNqS3A2NyUyRndBd3clMkY4QUwzbGkwMXFCTGdQSk84Zjd0NHdQN3MlMkZzRTlmaE9IZXIlMkJWdGZnZyUyQnZhYmNKZTFGSnJQandaVlVVJTJGZHklMkZSOWxseUlGaXh1RXpqS0VqQ1lvam1HTTZqYWFqWjI4UmpCaUVpc0p6VUxUaTNpU0tSMHdib0hrVFhkV3QyMU9MVDVydTJBNVJsTjFrOFNyc1ZXVCUyRkFHRDVlbmExYVhBJTJCbzZwRCUyQjlKMldjZW5MJTJGbEJKUjhEJTJGd0NyblNmeTg4MFclMkZseXpsMG03dUpadEpSJTJCVm1YU3NsdHlOWGhZRDdjUDdTY2ZpVCUyQlhEWGN4b3NSMUQ4cnZQMnFXVWRsWmFkSFpXN2tQY1BjWEVZZVNuMkVLUjglMkJLSjlyaCUyRk5rUnUlMkZ3QXJ0YzAyNmV5MUZvb0pvOXlLczRJUDdTdFFjbHowYnJmNWplWHRLaFI3ZVlYMHNpZW9pUUhZTDI5UnYyQ2Y1VDhXUTdXJTJGTWolMkJack9LZDB0MUN0JTJCNmVEazd4TWFqMDVDYU54YiUyRlZ3RWdDeTI0OVBseUVDTWVmSjQyMzVmWFE2M1VmJTJGQXQlMkZYQzdWdktzbWtmVjdpYWIxZFBsSVNXN2pUZUZ6JTJCeEpIV29QZzM3ZWRRNWt5TkRJdnB5eCUyRmJRJTJCJTJGUWc5MU9CN2hGQ3VySXNzVXE4Sm9IRlVkRCUyQnl3JTJGVTJJSUlzTU1tS2VPWmhraVl5SE1GNWclMkJoQ05pcGN5RmYzbndEN2NIJTJCJTJGb1QlMkIxeCUyRndCMkolMkJ6aU55VzAxJTJCTnNlVnRNb01jNEc3Vkg4MlRDYnl4ZldNeHRVTWxuRElQck9saTU1SkloJTJGd0NLMlplTXF0aFlZT01WeEJOYiUyRnUySEslMkZzbDZKVTdYbHAlMkIxeERmYlQlMkZkZUZnbVBrblc3cTBlQyUyRnNaJTJCT29XVGNrNWZ0Um5yRzlQdElmc3RuYXRZMGl3JTJGTWZRNCUyRk1XaDhiZlhiZFNqeG5ibXlENDdTNCUyRjVreTU1Z1djYVpxRFBwMXlabzQyUHB6OFN2SWVQSE9uJTJCVGZPMnFhWE1MJTJGU0hpUHFjUmYyTTlmVFlmNzhYajhYSWZzNHFvV3NHc1E2NFRwcCUyQm8zMXpHYks5V1lmRkU4WjlUY2VJNEZQOWxucE5iV0RWZEdpdDlSUmJpTzRnVDFnM1FrcUNXOWpYNGx6a3NFMXo1MzgyRFU3V3pFS29xcTVVVkFvT0llVjl1UiUyQkwlMkZnYzdSREdzTU1jUyUyRlpqVUlQa29wajBVdkh0USUyRktuVjlIMUY5WDh2WENhanlZdDlUdVFvWUxTaWpreDlPVGolMkZsY01TOHElMkJhTG55OTVndW9OWXMycyUyRnJmRVhzTEx4S3lKWGpMSDRweE9kcHdsMXp5MXAlMkJ2Q09TY3REY3cxOUs1aW9IQU94VTFIeEolMkZrNG90Tm9aWXJpSkpvV0R4U0tHUmgwSUkySXlGJTJGbU4lMkJYbGw1NTB6NE9NR3Myb0pzTHluZnI2TXY4MEwlMkZ3RENmYXlVNlJZTnBsaERZTk1aeEFDcXlFQlNWcVNvSUg4dURqMHhWOE5hcHBWN3BkN05wJTJCb1FOYlg5cXhTYUp1b1lmcnI5cFd3dVNOZzROU0hCcUtiRUh4cm5yTDgwUHkyZzg2V1gxJTJCd0N3NjlhSlMza095em9OJTJGcTh4JTJGNU5QJTJCdzJlWG0wcThndVpvYmxHZ2xpY3BOQTRwSXJvYU1qZnkwT0t2cGY4bHZNdXNhNW9sMVphek9McVhTM2ppaXVUdkl5T3ZKUklmMnlsS2M4NmVNOHklMkZrMzV1c2ZLMnIzRnRmeU10anFvUlpaM3FSRk5HVDZiUDRJUTdJJTJGJTJCeHp0RjElMkJhSGtlMDFTRFIzMWFON21aJTJGVExSVmVLTnUzcVRENEY1ZE1WWmxteWxJWlF3TlFkd1J1TXZGWFpzMmJGWFpzMmJGWCUyRiUyRlU3JTJGbXpac1ZkbXpac1ZkbXpac1ZkalhWWFZsWWNsSUlJUFFnNDdHU09zYU5JNW9xZ3N4OWgxeFY0UiUyQlp2a0E2VksycjZWSCUyRnVQbGFySXY4QXVseiUyQnolMkZ4amIlMkZkZiUyRkE1RW9KTEslMkZ3QkZoMHlPSlUxQXlySDZvQUJib3FKSXRlYnR5SmtqWlA4QUtWczczcW5tJTJGd0FzeVc4OWxlczd4end0U014TVJLRyUyQkhnaHB4NTV3JTJGd0F5JTJCV3BiSUhXTk5qZUdLRmtEamxWdzUlMkJJUEd3cDhTJTJGdGNmc1pHVWF1UUh2ZHZwTldKeGpoeXlNWkElMkJpWFElMkJVbU1YTnRjV1Z6SmFYU0dPZUppc2lIc1J0bGwxdUxmNnJjTWVLYjIwdlZvVyUyRjZwUCUyQjB2N0dIc0xyNXB0dnE3bU9QVTRFbG1FaEhIMWVDSUk0a3AlMkJ6NmFPNyUyRnRlcGhCTkJQYnl0RGNSdEZOR2FQRzRvUjdFWlZLSkhyaHolMkI5MkpqRFBBNGN3M0hNZFIlMkZTaWlORzFtNzAyOEVpRUM0aiUyQkdXTW40SlU3cWY4QWpWc2xtdmFCcDNuTFNGdmJDaVRLQ1kyUDJvcFAyNHBLZnMlMkY5ZDVCVEZGSXlzNVpHWDlwS2NoOUI2NUp2S21yU2FWZGV2eGVhMW0lMkJDY0VGUXlqOXRSJTJGdnhNdHhaQklWOHgzT2kxZWtucDVVZDRuNlpkJTJGN1htc2tWeHAxMUpZM3NaaWtqYml5SHNmOEFtayUyRnM0Y2FQYXk2cGVRYWRFNnJKTXdWWGJvRjZrJTJCJTJGRURPbiUyQmRQSWtmbVN5R3A2UUExMnFjNEpGcFNWUHRjRzklMkZ3RGpmSTM1YThxemFGTmEzdXJLclhMbXNjZkkxZ1A3TlN2Mm4lMkZteXd4b3VJTjFEV1BLRFc5NURZNkswdDVJZmduYVVLZ0QwNWNsNDlJNkg3VFowYnluQkFtbWpTVnZoY3oycUVNNjAlMkJIblZSdzlvbSUyQkglMkZBRnNJdGZobmRnMXElMkZwTmR4bUl1RFFWVSUyRkVDZjhvWVJlU0xrNlI1bldCdzFibVQ2c1NEOEZHQmI0aCUyRk55WER5UHZic1dJVEU5JTJGVkdKa0IzMGpQS1YxUHBPc3JCZHVSTEZjUGIzSlk5VmRpdFclMkYyWHhaMCUyQjkxTzJzcElvSldMM0U1NHdXMFk1U09mOVVkRiUyRm1kdmh6bSUyRm0ydyUyQm9lYXBKbEJWZFJqV2RDRHNaRTJjZmV1SGR2ZlFXMEJuZ1pwdFZ2RUgxdSUyRmxHNmdqJTJCNWhIN0tyMHhIYzBwRCUyQllnOHdhMU5ERlpXalNXdHNyQ1JvaUdKY240NmIxWWRGMnlGV2VtenhzVzFDTjRFaiUyRlpsVW9mdWJPczJXcHhwTkdsMm9NUDJlU2JFZTV5VFhHa2FkcUZwSmFUMjZUMjg2MFlFVkJCNkVIeDhNZUN6ZHB1bmxFdHBIWVEzOEdxUnJGTmFQQThFZ0pjRmElMkZHcWhhZGFvMlhCR2xtYmUydUN6ZXZiR2VSbzJQY05KeCUyRjJTJTJGRGh0NTFzM3NMcFlMb0g2bmNJcTIxd1JVMVVjZUx0OUh4ZjhIaGo1ZjhwWGVyV2MlMkJxMlZySHFFMW9xUVdkdk5Md1VvaWptSkIlMkZPOVc0JTJGczhjalZIM0xlekV2TTJtWFdxeWFiTm96QjdTUzFXSjVTd0JySFduTHY4QTNaVWJmeTRvbmxhem10cktDJTJCSmxOb0hGRk5GYm1RYUh2dFRKOXJQbHpVN0dPTzZ2clJiZU5pb1FRTXJSeG1uOTM4SVhqNFlFMGZRTG5YQmRRMjA2MmwxQ1AzU1NyeTlYYXY3b2cwJTJGNExEc2lrcHM3QzNzMVdLMmlXSkIlMkJ5Z3BnNWxOT1gwWUFWcjdUTDB4WHN4Y3hzVmxoa3R3cEZQdExWV3diZiUyQmFuMGU4dHA3TFRZcm15SUxscHlUNmhvUncyJTJGdSUyRlRiZGx3M3Rhb0s0djdhMWRZMmRXNUdqUTFxVkhqJTJGd0EyNFZhaDVhMDNWbE54WkVRVHR2eVg3TEglMkZBQ2x5Zmp5Zm8zbnJUcmJWOVBSTkkxaTZnTThxUkVOQzhnYjA1T1VJJTJCTlI2blIxJTJGNEhJUnFPajY1NVZ1JTJGUTFTQm9nVCUyQjdtVTFpa0E3cEowJTJGd0JpM3haR3dkaXpoT2VPWEZDUkJTUFNaTlg4bWFtbDFNaE5zZmdsZFBpamREMUglMkJTMzdTOHM2WkxyRUVadDJ1RWUxVzZWV3RMc2clMkJsS0dISUdPUmVTJTJGNndPUjlkV3RScDExZFNRJTJGV0h0NFdrJTJCcjkzSUd5VSUyRnlzayUyRmslMkZXNUlOQVRUOVowZUFXY3pHVDZnciUyQm9JbGZjZ0J4c2YydlQlMkZBR01ZeE1TZUUyRDA3bTdQcUJtakV6aldTTzNFT1VvJTJCWTcyTSUyQllmTGNkM0ZKZVFSeHlvN0V6UVU3OTJHUTYwYlU5SGtmOUhUQXd0czFqZFZlTmwlMkZ5WCUyQjJuJTJGRWM3Wkw1WHN0VlNTNThwNmtZWnFWYlRyeXNpZjZ0V1ByUnIlMkZzcFZ6bXV2YURxMmp6c3VwMkp0QTVOQ2ZqdG1OZjkxVGpiJTJGWXljY0o4dG1nSlBxVjRKSkxKcEkzc1lMcUoydVklMkZ0QmdQOTFxNmpwSXk4Vncwc05Objh0RzExbThLV05ucVRyQXVtczVZaFR2eWN0JTJCMFI4ZnclMkZZYiUyRld3TGRScGZhVkVra1BPNTByMUhoakpBTFJTZzlIcFg5MiUyRndDemdTVzRUVjlIZ2E1dXBwZFZzcEZ0N2EwRk9NTnNoSEptM1Z1Wlk4ZlYlMkIwemZCbFpIcTNCTmlnT25tNTJMSWZESENZd01DSm1WWEk4SXFNWW56STRmODVsJTJCc1JRYzdlU0tWUlBIS3RzNHJ1VWtQQWN2OVIlMkZpd2JaYVkxcDVndHJIVW9pcGpualdaT280bGhSdjhwR3djUEw5cGNST1pvMlM2WmthWGd5cW9hRlZrNGhuJTJCSjl1UHFOeHdWcm1zV3Vwdll6YWxGOVMxSzFsVGk2R3Njc1lZTXBWJTJGRldVTnglMkZsd1lvU2pkOGp5Yk8wc3VMTWNVc2RtVVFST3hScm5INzVQUXRkOHZhVDVpdEJaYXBBSkkwWVBFNm5qSkd3JTJGYWpjZlp6ZyUyRndDWldoM0doVyUyRnIyd0gxdlNaMERYbFBpYTFtJTJGdVp1SzdNViUyRnVMaiUyQmJQUTFwZFIzbHRIY3hHcXlDdE90RDNIMEhJRiUyQlpGbmIzazhFTXFoeFBCSkhPaDZNbklVRGZTZHNzRHEzemZxV21SNmxGSnFlblJDTzZpSEslMkZzazNGRDBuZyUyRm1qZkMzU05WdWRKdVV2cktRSmRRT3J4YzFEb2FmYVNSR3FySyUyRlJseVUzMmkzWGxuVTRSSE9ZckYySXNyMWh5OUptJTJGNDk1JTJGOEFpbVQlMkZBQ3NLdGUwWnAlMkZXMUt4ZzlLYUwlMkZBSTZOaXByNmJIJTJGZDBYODhFbjJsZkZYMCUyRndEbHo1eDBmemJwQWxzSVlyTyUyQmdBRiUyRll4QlZDT1IlMkZlSUJUbEUlMkY3TGY3SEpwbmlMeXo1bTFUeXJxVnRxMmx5OFpZenV2VldYOXFPUWZ0STM3V2V1ZkpubkhUZk9la0pxVml3U1phTGQycE5YaGs3cWY4QUpQN0QlMkZ0WUZaSm16WnNWZG16WnNWYU9jdCUyRk5qOHN4NW50Sk5iME5mVDF1QmF5eHJ0OWFqVWZZJTJGNHpxUDd0djJ2c1oxUEtPS3ZoejBDc2J3TXpxU1NIUFJndzIlMkJMMyUyRm13cmxoZUIlMkJEOWV4SFFqeEdlcWZQSDVPYWQ1bHVwZFcwaWNhYnFVM3hUcVY1UVROJTJGT3lyOFNPZjJuWCUyRmdNNTlIJTJCUWZtdTVuV0M5bnM0cmJsOFU2T3pNQiUyRmtwd0dLciUyRnlrJTJGT0J0T01QbG56VE1Xc3lSSFk2ZzVxWXE5STVqM2klMkZsZjhBM1hub3hXVjFWa0laV0FLc053UWVoR2M2OHNma3Y1UTh2QlpyaUU2cmRyUSUyQnBkQWVtQ082d2o0ZiUyQkQ1NTBWVkNxRlVVVlJRQWJBQVlxM216WnNWZG16WnNWZiUyRlY3JTJGbXpac1ZkbXpac1ZkbXpac1ZkaU56TkRid1NUWExCSVVVbVJqMEE5OFd3TmZQYUpiU20lMkJLaTJwU1V2OW1oMnBpckFQT041cE1XaVN0b2lQSmZNMWJWSTR5eTFHOGpEa0Nud3JoRHJENmpGYiUyQldiQzdXdDM2RWNsJTJCQ1AlMkJLaVpIYnR5SmFqZjVXRHZQOXhaUmFOQ2ZLdHhLYjR6ajA0SU9SNDAzSktrZkFPZkglMkZXd3M4NGFqTmQzRUVrbEZ1U09VdEslMkZEUlZYaUtkdVFPRkllZWF0cGswRjVQZWFVaiUyQmxBVExJWXdTWWhYZCUyRmglMkJ5bGV1TFA5VTEyeWttaVdPMnZyV09XNG4zUHhnY0FGWG1hdHkzY2Y3NyUyQng5ak8xJTJGbHZvMEVlalQzODhTdkpxRE1qRnhYbEV2dzhUWDlsczVoJTJCWSUyRmtTVHluZSUyRnBIVFZZNkxkc1ZVaiUyRmREdDFoZiUyRml0djkxdCUyRnNNZ1JXNGR4bzlYNHZEaXlTcWNmb24lMkZPJTJGb3lZSnNRR0hmSkw1RnNyWFVkWmswbTZ1VGJSM1VUdkhRQWd6UmprT05TT0RsYTVHZ2NYMCUyRlVKTkwxUzB2NDFEUEZJTm04RyUyQkUlMkZyeW0lMkJITUQwazUydHhlTHBwanFQVVBmRjZsNVg4eFdsbTk5NWV2WmxndUxTZGtqUjlnVFdqclhvdlA0WFRFUE02d3d6S1NLQ1Q0dHVvSU8lMkIzdmtlODB4WFUydFcxM1pRJTJCbzE1YnE4bnBKOFVsRUxWcCUyQjNzTUJXT3NYT3RXeTJpRXlYTnVDeUl3NU15ZjhWc2FzZUZQN3R2aXpMNHRxJTJCVHpOVWZ2VCUyQk9VNm5wa3k5WnJjaVZBTzVYdyUyQmE4c2lzMDFycCUyRm1DMDFPNVlyU1dKNGtYY3lGaUI5bnNLJTJGdDVmbGp6TFh6TWxnMGJSUXVqUUVTYlZsRGNsNUllbkw0a3llZWJQSXA4eTZqNWUxRFNFalgwWFdPNFFzcUtZayUyRmZSZ1YlMkZiNWd4OGNITWU1bEdVb200bWp1UG56U1clMkYxT2ZWTDZSN3NKVzJrZUtGVUd5Z0doSUozUEttTlZ5JTJGVEFrMXBkV2M5ekJkcnd1RWxjVEllekElMkZFTWolMkZtalhidlF0YVczdEVCZ0NKTTZQdUNIRlFFeHRpelNLSTFESEp2NVZ1eEtyV01wJTJCd0M4SlBoJTJCMHYwWkNOTHZyZlVyR0c5dGpXT1ZRZmtmMmxQJTJCcWNQZEhtZTN2SVpWMjRzS24yT3glMkZESkJTeXp6QnBscnFXblNRU3hMSTBQNzZFc29JRHFPMyUyQnNNZ21sYXhjZVVkUlhVN1pTOWpKUmI2MlhvVVA3UUg4MGYyayUyRjRIT2dYZHlWWWdIcDElMkJXUVc4ZzRUelF5b1FwSklWaDFWdWhHSkNoN0ZHOWhyZW1wS2hXNHNyeU1NcDZobFlWJTJCJTJGT1dhJTJGYlhmayUyRlUwWkpPRUwxYXl1MiUyQnkxUDkxdWR2M2lmOE91Q1BKJTJGbWhQTDF4YWFKZXR4MHk0ckZGTXgyaW1KSlN2aEhMWGolMkZyNE4lMkZPOUclMkZ3QUoyOG8lMkZZdlk2OSUyQnFPTWdkbFl6cVBtV3k4eHI2MTVhb3VveEFBM2RrNGRKQjAlMkZmUkdqb2ZCbDU0VSUyQm5DeVNSTlNhMWwlMkIydlFxMzg2MSUyQnk2NUdQS2N6dHF4alk3TkV3NGpZYlUzMnpvTnBwRjFxZnJ3MkpYNnlpZXJIRXhvSml2V0lmNWZIN0RZWW5aYVkzcE45TjVOMW45SkpFYnVJd3lSb2lzWTFrRGJwVnUzRiUyRmlkTTd4cGwzWSUyQmFkRnQ3bTV0bGUzdklVa2FDWUJ4OFFvd29mNVdCJTJCUE9ORzBqdkxZMjhxbFJVZ3F3b3lPT3UzN0xwaVhsM1hianlacWs3WGdsbXRaSWZURUtOUUdoNVJFRnZzeHI4WExqZ0lyZFdRZWR2eTdHaVFQcmZsNFNOYXhWZTVzMXE3UnAza2klMkZhYU5mMjAlMkIxa1QwN1dHQ3F3Y01qZEpGTlFjOUMyTjlCcU52SGMyOVdpbGpTVkdJMkt5Q29wa0Z2JTJGd0FvdEh1OWNPcTJkMUpZVzB4NTNkaEFvNE81M0pRdDhNWWY5b2NNRnlCMjNad0dPUUlrZUNRR3hxd2ZJc2F0TlFTUXJJcm1PVWJySWhvUWZFRWI1TExIelBQNlgxVFY0UnFGbzRvekZWTDAlMkZ3QXBEOEVtRm1zJTJGbHhlV0JOeG9FcHVJaHViU1FqMUIlMkZxUHNId28wJTJCNGx0VW1XN1JvNW9qUm8zQlZoVDJPV0NpMXQlMkJiUEoxcEZDZk1YbEpndGwlMkZ4OTJWQ3lSSHV3amI0a1glMkJkZjJjaU9sRzJodWhjWDJuOEpJMkJFOEZISHpNVGIlMkY4VFZjNkZwV3V0YXlTUGJsSkVtSEdlQ1FWVndQMVpHdGNzSWJlNU4zcDBVaTJNbFdhTTdtQiUyRndCcFE0JTJCMUYlMkZMa1RHdWxobkRJWW5ZcHJmNnRZYXhheHhDRGx4SWFHN2lrbzhaN2tHdFdyJTJCM3l3eHNkR2wxV3dpdHpHYmtna1J6dWdER25SbTM0UjAlMkZaYklKQlp3eHY5WWhBVng4UXAwSlBpQm5hZkpsMWVYZWtMTmR5cktPWEdOZ0FEUUQ0ZzNHZyUyQkU3WThXeVRMZmlITkpiYlF2TkhsZSUyRmU1MGVRWCUyQm5YQUQzVmc1M0VvV25LSW1oUW1uN1B3djhBeVlSWDl4cWwxZG1YV09TM1hIaXFNbnAwUUVrS3ElMkJBNWZhenJRd0hxT21XbXFRR0M3ajVEOWx4c3lueFZzRnNMZU8zOWhiMzl0SmJYTVlsaGxIR1NOdWhCJTJGVWZmT1pYeTMlMkZsN1VWMDVuNU1ncnBOMUxUakxDVDhWbmNFaiUyRllmNU9kdDFuUWJ6UjNKY2VyYXNmZ25BMiUyQlQlMkZBTXJZQiUyRjVWM1klMkJkdEF2aGVmdWJybiUyRnVOdXgxamtRVVlrRDdVYm5pciUyRjZ1RXE4RDFyVEZrOVhVZE5nYUhpeCUyQnUyWFZvSFBjRCUyRmZiZnN0blFmeUFlYiUyRkZrdEMlMkZwdGFTRjFWZ0ZOR1RpWEZmaUElMkJMaiUyRmxaQzlXdU5kOHA2a05NMWUwNGFuWXNZMm1ZN1RXJTJGWkcycEtqZnNTNEswMDNta0NIemw1V21ETGF6ZXJjV29COVdDdlgxRkIlMkZlUXQ5bHY4bklvZllOUmw1RlBJM25qVGZPMmxpN3RhUlhrUVVYbHAzUmowWmY1b24lMkZZYkpYaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkYlMkZXNyUyRm16WnNWZG16WnNWZG16WnNWZGdIVlk5UG10SGkxSmxXM2NnRXVRQlVicjF3ZGdQVWROdHRUdHpiM0lKV29aU09vWWR4aXJ6SHp0UCUyQmkyMGFUeXZkbTZ1RGNKU0NNSklQVFZoUldLajdCYmJpMkI5YjhrZVpyblYzRnZiZXJic1FzVndIVUtGSjZ0VThoU3ZoayUyQiUyRndBUEd5MUd3dkxPa3FLNWp1MGNJUDNZUSUyQm5JdEFQaWlmOEE0bmtrcGhLUWFRT2s2ZW1sNmJhNmZHUVZ0NHdoUGlmMmolMkZ3V08xTFRiUFZyR2ZUciUyQklUV3R5aFNXTWpxRCUyRkVmczRNekVWd0lzZzJOaSUyQlZQT0hsbTU4cDY1TnBVMVhoUDcyem5QJTJCN0lXUHduJTJGWFg3RW4lMkJWZ1cyOHM2M2Yya1dyMjltNzZZczZ4eVhRcHhVZ2dOVWZhNGl2MnVPZW45Yzh0Nko1aXQwdDlhczB1bzR6eWpMVkRLZjhsMW95NUVMN1RyaUdXMzBMeXRwN1E2RGJzMGQ3eEk0T3olMkZGV1BseWNtTnZpYiUyQmZLeml1ZkVUczdXWGFoT244UGg5ZFZJbjZhNyUyRmV3RHpQZDN1a05wbHpZdHh0RWhXMmFkVkJLelJrdFRrYWxPZGYlMkJCdzYwYnlkWiUyQmFOUiUyRndBUmFQcTBWak9JdzUwOWJjTElrdyUyQjE2eWglMkZqUm0lMkYzYW4yOGRlNmRMWVRYR2s2eER6dHB4OGFIb3luN0xxZmI5bkkzWVglMkJyZVE5VGhTM3BjV2hjdmF6TUJXU0UlMkZiZ2FRJTJGRjhQOEFKbHJyRHZ1bnZtcnlCOWJ1RnZ6QXRucmtRRDg0eiUyQjZtS0hrR1J0dSUyRjgySFduTyUyQm9hZExwVTVhQzRaZVVMOUdpbCUyQjBqS1IwYU9ZWk9MTzgwanpobzBkM1p2NmtNbjJXRlBVaGxHeFZoJTJCeTZIN1dRV2FPODByVjFodndCTWpjZlVBb3NrVGJMSVAlMkJOc0lyNW9TdTEwdGZPdDdJa3Q0dGg1aWpRQzZoa1NzZHo2ZndmV0lpQ0NyN1VtVGolMkZsNUpHJTJGS1RTZFRqZyUyRnhESUxoNFVDVWdIRDdQOEF4YWZqNDVHUE1ka1l0Umt2YldmNmpld0VYTmhjcjlwcFQ5cEVWYXRKV254SnglMkJ6blJQSWZteiUyRkZ1amZXNVklMkZTdkxaJTJGcTk0Z0JDbVFDdk5RZmlWWCUyQjF4YjdPQTJObGVhWCUyRmtyJTJGQTE5SmIyck8lMkJsWGJjN1V2dUZidXZMJTJCYiUyRmlXQzdNN0hPdWFycGRycTlqTFkzaThvNUJzZTZ0MmRmOEFLWE9QNmpiYWo1ZHZwTEs1VVNCZDBmY0IwN092OGNNVDNxa1A1bDZ0cmtXcDJrTmk4c1ZyNkNTaG95VkR5SDdSSkhYajhPUXBmTmZtQ04xJTJCc1hjc25CZUNyT2ZVQVVkRkhQNHVQMDUybnklMkZxMmc2dmVSNlQ1aGdYOTRBbG1zcCUyRmRzdyUyRjNXJTJGJTJCVTM3R1NIVWZ5cDhuNmhVcGF2WnNlOERrRCUyRmdINXAlMkJHQ1hOZVR3TSUyQmJ6ZVd4dHIlMkIzU1ZIRkdNWktNUDhvQnFyJTJGd0FOaDlxdjVncHIza1ZmTFY5emsxTzN1SWpGT3dyenQ0dzFHWmhVZXFuMlA4ckpENWklMkZKSnJLMmx2Tkt1ZnJTeCUyRkVZQ25DWGlPdENwS1B4JTJGMU01MDNscTd0cER4RE5VVVVHbFB3eUp0V1FmbGZwTVdzZWFGdExnc3NadFpuREoxVmh4Q24zNjUxZTM4cWFucCUyQnMyWlg5NWJyS0clMkJ0UjdVVmZpbzYlMkZzMTZZUyUyRmszcEdtV3h2TlIlMkJzcEpxZkVXN1duUjRrcnlMRlczUHFOJTJGTCUyRkxuVzhJMlVzVzh4JTJCVm83MW4xTFQwQ1hwM21qR3dscDMlMkY0eUQlMkZoc2dsOW95WFVheFgxdThMb0NZMmRTdFYlMkZhRyUyRmdjN0pURWJpenRycjB6Y1JySVltRHhsaFdqREpDWFFvZVZlVzlSdjhBeTFQS0wyNWt1Tk85RUxFbyUyQklqZ2FvS2slMkZBcUp5enF0cmRRWGtDWE5zM3FReXFHamNkQ0NLN1pGUE1QbDFZZzk1YUxXQTd6UWpmalhxdyUyRnljQjZKck56WTNCVzd1QWJBUktnVXFTUVZJQzhLZkNxOEs4dmh4cTl3bG50SzREdnRKMDdVZ0JmVzZUVTZGaHZUd3FOOEZSeVJ5b0hpWU9qQ29aVFVFSEg1RkRDOVklMkZMNnd1U1o5SWMyTTNYMHR6RWZvNnAlMkZzY0w5QiUyRkx5OFhWSk5TOHkzWXVvNDFhS3owJTJCRWtRckd3b1dsTzNOMnpvbVZURFpWNGw1bjhzM1BscTk0b1MlMkJuVGslMkZWWmoyNyUyQms1JTJGblglMkZoc01OSTg5M1dqMmh0MnRoTlZTRXA4UEdTbEJLJTJGJTJCU2YyODZucU9uV21xV2NsbGV4aVNHUWJnOVFlektmMldHY28xM3loZGFWTVVUOTVBMzl6TDBERHdQZyUyQklaYzNwUGx6VTVkU3RHYTRJYWVOZ0daYUFGV0hKV29NT2M1djVFMUI3V2Y2dGNBb0QlMkI1UExiM2pQMGZZem80eElZclpJbzVVYU9WUTZNS01yQ29JUHRpZHJaMjlsQXR0YW9JNFVyeFFkQlUxT0w1c0NzTzglMkZ3RDVlNlY1NzA4UlhOSU5RZ0IlMkJwM29GU3RmMkpBS2M0bSUyRjRYT0lXWDVSJTJGbVZvT3B1bW13SXlTQXhOTXNzWmhaRzJxM01xZW44MGVlb0tacVlxOGw4aCUyRmslMkZjZVc5UXQ5WjFEVTNXNGdQSkxTMEpDRUd2d1R5dFQxVTMlMkJ4NmFybldzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjElMkIlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhVelpzMkt1elpzMktvWFVqSUxHNDlFMGs0RUtldEs0M1RZa2hzb1FwNUVxR1p2RW52Z3AxREtWYmRXMkk5amhEZGFEcVQlMkZ1TExXSmJPelA4QXVsRVZuQVBWVmtiNGhpcUI4d1dVWG1TJTJCWFRZV1FpM2lrWnBodVVscU9LbW43UDhBTm5PdFJzaVBXMFRXVUtxRDlvZmFqWWZaa1ElMkIzJTJGRExuWXRIMFd5MFczYUMwQkpjOHBKSFBKMko4VGhWNXU4dEpyZG9acmRRTDZFSDB6MExqJTJCUSUyRjhhNGJUYnhYUVBNR3ElMkZsOXI3bVNzOWpjVU4zQ3YyWm8lMkIxeEQ0U3AlMkZ6Wm5hTllodGZObWdSYWhvN0pjTXdFMXBLQ0FTUDI0NiUyRnNuJTJCWmY1OGdzdWdXV3RhUEZwMXhSTDIxcUZrRkN5UDNVOTZZUiUyQlVmTXQ3JTJCWCUyQnF2cG1xRXRwVXNuR2VPdFFqRTBGeEQlMkZ3QXpVeE95JTJCNWtIbUdDT2ExczclMkJWZUVzRllwSEkzU3Z3eUJ2RGk2NDdSdEgxYnkzcUVYbVBUNVZsZ25XbW8yQzFBbWo2cklySDRSTW5WY0N6M0Z2SjV4MXBJcVgyaDMwY1Z5M291djJuUUVla2E5WFpXNVpKTlB1bHQ3ZGJacFRMYXNQOUhsWVVhbFA3dVZmMkpsSDJ2JTJCRXc4OTFaelkzdHZxTnRIZFd6ODRwQlVIb1FlNnNQMldYOXJDN3pKb0VPdTJYcDdMZFJWYTNsUFk5MGIlMkZBQ0h3aTBJYWhCcXRkT285aEtmOUxqWTBWZjhBTFUlMkY3OHliWkZENTkxalMzUjNnblJvNVltcDRNakE5c25Ia3I4d2VSaTBMekpJSTdwUUV0ZFFjMFNZZEZXUSUyRnN5JTJGNVg3ZUglMkZBSnc4dUxxTURYOXFnJTJCdFJMJTJCOFVmN3NRZjhiTG5KYnV5amNORktuTkQxVSUyRnc4RGg1cGZRbzNHYzQ4N2VWRmhNbXEyS2Z1SE5ibU5SJTJGZHNmOTJLUDVHJTJGYSUyRmx5UGVYUE0lMkZtZnkyWTRwbWsxUFJxZkJCS3BOd2lEcjZFMyUyQjdPSDhqNTElMkIxdWJYVTdKTGlLa2x2Y0pXakRxckRkV0glMkZFc1Y1UG50b0ZpdVV1UU9GeEZ2SEtwS3NQcFduTEpaNWI4dzY1cDF4RWd1WHVJcDNxOGQwN1AxJTJGWlZtJTJCeCUyRmtjY2JyJTJCaG0yMTI1c2JQZ2dYOTVBWnE4RlJoeTNwJTJGTDhTcmsxODFhREhxZW1wcXR2Ukx1MmhEbmdQaGVNRG1WJTJGMlAyb3pqc3JLTFc1anU0RW5pJTJCeTRyUTlRZTRPTDVEJTJGQUNwNWhndTdpT3dra1VYRnhENnl4OURXTThITk1tR0pGRkRSRlJRaW9QVUhJaHJtZ3JBWHViZEsyejE5V09sZUZlcEglMkJSa3d5bUNrVUlxRDFCeEJwV0lhTnEwOW8zMVdVUnJab2llbTMyZVBFaGVDSUI4VlYlMkJMSmNHQjNCQkh0a2ExTFFYVm5lMFhuQzllVVElMkIwdGV2SHhYQTJseGF6SGZXNjIwcngyYXRXNGdrU3FGT1BDZ2R2akRDbFZ3a0E3aFdZWnN3elpGWFluTkJGUEcwVXlDU052dEt3cURpbWJGV0U2dm9FMWhJYnUwQmUzQnJRVkxJUDhyeFhKUm85MmIzVDRaMiUyQjFUaTN6RzFjR2tBaWgzQjdaU1JwR3ZDTlFxanNvb044TnF1elpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOUR2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZpUG1ieW85MWNmcHZRaUlOVlQlMkIlMkJoNlJYU0Q5aVh3bCUyRjMzTiUyRndXUXpXOUFYWG8lMkZYYUZnN0wlMkIlMkJoSzBtamRCdWFmekFDanJuWWNEVFdOclBLazhrWU1zWkRJNDJOUjQwdzN0UlczejFwMmw2aG8lMkJvdExBZlhWRTVPZ0RWbGpBJTJCTGolMkZ4Wkd2N09TMkJiZWFSYnNjcEk1WXVMUXEzRVRJZmlRY3YyWlZQOTAlMkY4QXNNazNtaTFGanFCbnQwQ3BjSUhJVVUlMkJOVDhSRlA1dHVXUkRURkV1bHdQYVA5WWpWU2ZWakJJRkdQTSUyRjdCdkhDT1NYcVhsdTZ0cm5USTF0N1kyWmolMkJHVzFZaG1RJTJCSmNmYjVmelljWkJQS2wxSTdHUlhIS0dpM0FZJTJGYWpQUnZkc25RTmQ4QkZGRGpuTCUyRlBXaEphWGd1SUtSdzMzS25na2xQaSUyRjJQeGNzNmprWTg5MlVsM29ucXdvWkpMV1JaZUFISWxUOEQ3ZkpzQVZCYUxwVWV1ZVM5UHRyaVlQY1d5a1FYa2ZaNHlWREQlMkZKUDJXd1g1WDFOSjJOclFJR1hrb1hwelE4SlA2NUdQSmZtT1RSNUcwelhMbUdDemxZbXpoWlBTZUUwNWNlUDdVVGpmbGlPaGFna1dzM0NXMGdrVVhiUFpqb1pWa1k4a1FIcjhPU0hVSlpENTQwdm1ZdFZSQklBdm9UbzI2MEpyR3pVN2N2aHphSjVqZ20wdDlPMXU3Z2l1JTJGUmRZJTJCSjQ4b3lDZyUyRmQ5UXlmWiUyRndBckpoUEJGY3d2YnpxSGlrQlYwUFFnOXNndCUyRndDU0xwSnk5cHhuaVBSaVFzZ0g4cmZ6WUI1cWwlMkZrcTFoWFU0WmlnTndqc2l6ZnRlbVUzVWY1SnpwJTJCUlh5bG9GJTJGcGozRnpxWWlSM1lyYXhSRXN5eCUyRnpUT2FMNmolMkZ5cDhDWktzU1VPelpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOUh2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZnMzVpUHJNRUZsZDZYYlIzQ1JNJTJGcm8xZlVJSUh3eCUyRnM0VSUyRmxycU9rejNjMWxZUW1FTkZKSThEQ2dSeklESWc1YjFKYXZUT2lhalpMZjJjbHMxS3NLb2ZCaDlrNXlkcEpQTCUyRm16VDlaY0JJV1kydDVzRm9EOExzNUMxJTJGd0NEa3lRNUt5aldkTEdpNm1sM2JyU3l2S3h1bzZJNThQOEFKUFZjbE9pWFp1clBpNXJMQWZUZjVmc243c0UzZHJCcUZxOXZMUjRwVjJJN2R3eSUyQiUyQkYyajZYZjJGNWRTM0VxTmJ5aFZpVmE4aVYlMkZiZmFnNiUyRlpYQmRqM0tuV1VSWEx6WUZZVjVuOG4zdXM2dXQ3YnRFSVRHc2JjNmhsNDE4QjhXRmQ3NVltOHN2SHFWcVByUWlDc0pTUGlpa0gyalFmc05uU2NheWh3VllCbE94QjNCR0cxU2J5N3JmNllnWjVLQ1pmdElCU21IZUZsbG9kbHA5NUxlV3FsRE1LR0lmWUI3a0REUEUlMkJTdXpaczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRiUyRjB1JTJGNXMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWkZmTSUyQmlwTFclMkJTSlpBZjcxQ3RhTVBzeWdmOFN5VlpSQUlJTzRQYkNEVzZwUDVZdkRkNldpdTFaYmMlMkJpJTJCOVR0OW12JTJCeHc1eEczdGJlMVZsdDQxakRIa3dVVXFmRTR0Z1BOWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlQdiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14ViUyRiUyRlogICAKLSAgICApOwotICAgIGJhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjsKLSAgICBib3JkZXI6MXB4IHNvbGlkICMwMGFhMDA7Ci19Ci0KLS55dWktc2tpbi1zYW0gLnl1aS1oLXNsaWRlciB7Ci0gICAgYmFja2dyb3VuZDogdXJsKGJnLWguZ2lmKSBuby1yZXBlYXQgNXB4IDA7Ci0gICAgaGVpZ2h0OiAyOHB4OwotICAgIHdpZHRoOiAyMjhweDsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LW5vcXVvdGVzLmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LW5vcXVvdGVzLmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1N2JlOTkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1ub3F1b3Rlcy5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLXJpbmctdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1jZW50ZXItYnV0dG9uLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtbWFya2VyIHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLC55dWkzLXNraW4tbmlnaHQgdlw6b3ZhbC55dWkzLWRpYWwtbWFya2VyLW1heC1taW4sLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlci12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLWhhbmRsZS12bWx7YmFja2dyb3VuZDowO29wYWNpdHk6MX1kaXYuYmFzZTY0LW5vcXVvdGVze3dpZHRoOjEwMHB4O2hlaWdodDoxMDBweDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCUyRjlqJTJGNEFBUVNrWkpSZ0FCQWdFQVpBQmtBQUQlMkY0UmZKUlhocFpnQUFUVTBBS2dBQUFBZ0FCd0VTQUFNQUFBQUJBQUVBQUFFYUFBVUFBQUFCQUFBQVlnRWJBQVVBQUFBQkFBQUFhZ0VvQUFNQUFBQUJBQUlBQUFFeEFBSUFBQUFlQUFBQWNnRXlBQUlBQUFBVUFBQUFrSWRwQUFRQUFBQUJBQUFBcEFBQUFOQUFEMEpBQUFBbkVBQVBRa0FBQUNjUVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE1pQk5ZV05wYm5SdmMyZ0FNakF3T0Rvd056b3hPU0F4TkRvMU9Eb3dOUUFBQTZBQkFBTUFBQUFCJTJGJTJGOEFBS0FDQUFRQUFBQUJBQUFCd3FBREFBUUFBQUFCQUFBQlJRQUFBQUFBQUFBR0FRTUFBd0FBQUFFQUJnQUFBUm9BQlFBQUFBRUFBQUVlQVJzQUJRQUFBQUVBQUFFbUFTZ0FBd0FBQUFFQUFnQUFBZ0VBQkFBQUFBRUFBQUV1QWdJQUJBQUFBQUVBQUJhVEFBQUFBQUFBQUVnQUFBQUJBQUFBU0FBQUFBSCUyRjJQJTJGZ0FCQktSa2xHQUFFQ0FBQklBRWdBQVAlMkZ0QUF4QlpHOWlaVjlEVFFBQyUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFEQWdJQ0FrSURBa0pEQkVMQ2dzUkZROE1EQThWR0JNVEZSTVRHQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVOQ3dzTkRnMFFEZzRRRkE0T0RoUVVEZzRPRGhRUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQWRBQ2dBd0VpQUFJUkFRTVJBZiUyRmRBQVFBQ3YlMkZFQVQ4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFNQUFRSUVCUVlIQ0FrS0N3RUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFCQkFFREFnUUNCUWNHQ0FVRERETUJBQUlSQXdRaEVqRUZRVkZoRXlKeGdUSUdGSkdoc1VJakpCVlN3V0l6TkhLQzBVTUhKWkpUOE9IeFkzTTFGcUt5Z3laRWsxUmtSY0tqZERZWDBsWGlaZkt6aE1QVGRlUHpSaWVVcElXMGxjVFU1UFNsdGNYVjVmVldabmFHbHFhMnh0Ym05amRIVjJkM2g1ZW50OGZYNSUyRmNSQUFJQ0FRSUVCQU1FQlFZSEJ3WUZOUUVBQWhFRElURVNCRUZSWVhFaUV3VXlnWkVVb2JGQ0k4RlMwZkF6SkdMaGNvS1NRMU1WWTNNMDhTVUdGcUt5Z3djbU5jTFNSSk5Vb3hka1JWVTJkR1hpOHJPRXc5TjE0JTJGTkdsS1NGdEpYRTFPVDBwYlhGMWVYMVZtWjJocGFtdHNiVzV2WW5OMGRYWjNlSGw2ZTN4JTJGJTJGYUFBd0RBUUFDRVFNUkFEOEE5VlNTU1NVcEpKSkpTa2tra2xLU1NTU1VzNHVEU1dpWFJvT0pLRmkzT3Z4Mld2YnNlNGU1Z013Um81c295cGRPeU45bVRTUkhwV3ZqNE9jNCUyRndEVmY5V2twdXBKSkpLVWtra2twU1NTU1NsSkpKSktVa2tra3AlMkYlMkYwUFZVa2xDcXh0dGJiRyUyRlJlQTRmQXBLWnBKSkpLVW8yV05ycmRZOHcxZ0xuSHlBbFZPc1d2b3dYWkRaJTJGUU9aYThEOXhybW0zJTJGTnIzUFVzd20lMkZwbVFHYW15bDRiSGlXdWhKVFlxc0Z0VExCdzlvZDk0VTFRNkZrZmFPazR0c3p1cVlmd1Y5SlNsbDElMkZvT3Qyc09ndURYZ2VUbTdmJTJGUG1OJTJGd0NDTFVXWjFWaHJ5c2JLQSUyQmp1YTd6Z3R1WiUyRjFGcUlVWFRTUWN2S1ppNDdzaDdYT1kwdEJEWUpoem1zM2FrZlIzYmxWZDEzcHJNdHVJJTJCd3NlJTJGNkwzQWhtN24wJTJGVSUyQmkyemFmemtGT2dxOSUyQmRqMFpGT000azNaRHRyR05Fbmh6dDd2M1diV1BVOGJKcHlhdlZwZHVadWMyZU5XT05iMiUyRjJYdFhPWTJWVTdyQTZobk85UnVKUyUyQnIxaE8xbGd1R0pidVl6MmV4dHZ2M2Z6TFBVJTJGd0NFU1U5UWtra2twU1NTU1NsSkpKSktmJTJGJTJGUjlWV2YwaXdpdTNGZjlMR3Nld1QlMkI2RDdQJTJGQXl4eTBGbXVuSDZ4UERNcGdkJTJGYlpGVCUyRndEb094JTJGJTJCMjBRcDBsQzAyQ3R4cUFMd0R0QjRKOEZOSkJUVm92eCUyQm80anZiTExHbGx0VHVSTXNzcmYlMkZBTkppeiUyQmhaRHFNTyUyRkV5Q1gyZE9jNnQlMkJrdWMxZ210JTJCMyUyRmhhUFRlb1o1czZSMUlackJHRGxrTnZJJTJCalhjWVl5eCUyRjd0V1Y5QiUyRndEdyUyRndEd2x5RDFMcVdIMGpxMk4xTzU1cnhPb2dZMXJ3QzRDOXV1UDZtemR0OVdsMXY2VCUyQmIlMkZBRmRGUyUyRjFNeXElMkYyVlRodXNhJTJCMnRzdDJrNnNQdVk3M0JybSUyRm8zVnYyZnklMkYzRjBTNFRBenElMkJtJTJGV0RxdUtHbmJoV095YTYyRFVVbHJjbXl1bGt0WjZmMmV5MTlXejglMkYyTHMyWiUyQkZZeDFqTDZ5eGdCZSUyRmNJQUkzQ1hmTklxWlgzdXJzcXFyWjZqN1RxSmdOWTJQVXNQUDBkeXBmV0olMkZvOU5PVDJ4cmFySFR4czN0WmtmJTJCeTc3VlI2djliZWpkTnNia2IzWmJxbTJzZlZqZ09PaHJkWkZsanFzZmZYcyUyRm12VjlWJTJGJTJCRFhIZFolMkJ1dlU4ekE2aSUyQmowMlkxemF3YVpMdDJMWTIxdGx0YjdYT2I2ajYlMkZ3RFIxViUyRnpWMzZ2NnJQVllGVSUyQmlDczVQUzdjZDQzTzJXVU9CNzdkMVglMkZUMjdsd3ZWbk55S0s4ZDE1cTZoaWoyMDdvOWRnM0RIZFc5bTl6THY4QVElMkY0V3U3MUslMkZUdHI5YXF6SiUyQnVIVjh0bVIwek5veUx2c1hVOE5yN2NkdGptdE4xSjlLJTJCMnBvZHNiazElMkZvJTJGOEEwWXNuRzZ0ZSUyQm5MWmJkWFhZNnB0dEFETnd1Y3dtaHYyY1didjB0bnIlMkZwS25mcEtiS2Y4QXRzcUQxRHZyam5mVjcwY0tsbGRnemdicWpmN1FIQjNwMnNHMHNiNmx2MCUyRmZaNlRFY1pnNjMweHoydmV6SzZqVmJmaFZ0ZjZiaVElMkJ4bHRtTlk3YTJ6OUpzM1Z1JTJGd2F5dnJIaDElMkJoaGRLdjNYdWJqQmhZOXdEYkh0UHBPZFhrT0g2dDFEZCUyRlJzbCUyRjZDJTJGd0RvbVY3Rmc5V2MlMkZGJTJCcTNSTDZiaWJlbjVXVmpoNGxsamR4YmV4bHRmMDZMYTl2dnAlMkZNJTJGd0FGWiUyRmhFdXFuMHI2bGZYTTlXWXpwdlZvbzZ3eHZjYkJjR2o5THRyMDlMTG9qOWJ4ZiUyQnZVJTJGb2Y1bXo5YXZySmQwJTJCMmpCd0hBWlRyY2QxN2lBN2JWWmEyblkwSCUyRkNYdzl2JTJGQUFkZiUyRldsNXppZFFaOVpjWTNsM29kZHdnMnoxbUhaNnpXZlF2M3QyJTJCbmswJTJGd0NuJTJGd0RSZjh4ZjZEZjFEcXZYR1olMkJlNXR6c2k3R2Q2bG0ya1BzcU5icXFPRzElMkY0Q3V4bnB0JTJGUzclMkY5STlBTGpSMUdoN2Y5NiUyQnVKSnBBMUtaajJXTkRtT0Rtbmh3TWhKYXlTU1NTVSUyRndEJTJGMHZWVm45YWlyRkdZU0dqRWNMWHVPa1YlMkZ6ZDVKJTJGZFpVJTJGd0JYJTJGcmEwRUhNOUQ3SmY5cEU0JTJGcHY5WUhYMmJUNm1uOVJJS2NFOVU2bGdYbkpEdjJsMGpOJTJGUzQ5N1MzOUM1MzBzT3l4biUyQkJjJTJGJTJCaDVQODMlMkYya3lmUyUyRlI1TmxQcnYxNnV3Y3pFeHNQSEZvekxCUldIejZycmlXTTlPdXY2SHM5VDN2c2V1ZTZCOWJ1b1pGNXhCVTg0QkRDJTJCdG9aWVcxUGN6RyUyQjAyR3htNzFHYjJYUDJmb2Q3UDVtdGN0MTY3cSUyRlQ4N0dkZmslMkZic2NXSEk2VjFOclFOR3UzTzJOWjZmcDVGTjlkVGNySDNlcFI2ZjlSS3dSWVh6aEtFdUdZbyUyRnhmU012TTZsWmxGJTJGVmZTb2JVMTFROU1HeXFMZmElMkJyUDlQSnNyOUt6MDluNmJHcSUyRjdkV04xejlWeEMzS2ZaVDAlMkIlMkJQVXlHZzVOSWFQZFU3ZXpaZTdLeFBSJTJGUjVHeXIxc1g5RGI2JTJGd0RndVp4JTJCdjM1MmJlNFdOd2Z0JTJCOXRiMm4yMW16YSUyRjA3WG4yJTJGcDdxbVZlcDZkYlAwdnFmb2xxWkQ3bVk5MWVEbVhoOXBCQVpER2pUOWF3dmIlMkJrcDNXJTJGcDJNZGtmcGF2MWIlMkJYVWIwV3VsVGVQMjNoNURpM0pMM1VZV1RZemx6YktuMXNjNXJON2JhTTNGWjlwdzh4cnZTdnIlMkZRZjBpbTZ1dkg2dlk3RzZoZlMybXgxV0ZZYXE3Ym5rJTJCbzJyMHJLUFRhN2J1c3R4WDIwJTJCeiUyQmxmNFJXJTJGcVBYZU00MDNzJTJGUTlMcGRiUTR2OTdXbDREY1cxbnVkNlBxZnJIMmU5bnN6TWF2TnglMkZzOSUyRjJoQTZpNXI3N0haTEgyNFRuMVc0JTJCVXdqMlB2YTNKZGo1YmZ6YUhiOG43RmslMkY0UDlZeFAwdFg4d3VscWFXZmIxQ3paNkdhTTMwNjIyV0REJTJGU1YxbXAzc2ZZNnRqV09zWTF0Zjg3NzZhJTJGVFE3czI3cUZOVklycXdBZlVzYlpSWHQ5UzBOOUt5MXRYODMlMkJncmUlMkYxc2VqJTJGQUUxbHpLbHRkRHRiaTlaSnNxcWJUYUJYZFMwVGJXNjhQeWNVeE5qOHFySWJSJTJGcFBVJTJGU2I2JTJGVHl2NlZXZjBxdk9yem1zWWFzbkd6SG1rN2d4MVphNksyWFI3c2QlMkI1djZLNzlKWGkzYlBVJTJGVjhpNzFSUlU1JTJGV2FMTXY2a1lqN1NHWDlMNmclMkJxSyUyRm9zcnltZXV4MWNmNEIxN2ZZc3JwdVBtTnhmdHo2M1Bjd2w5RFdEUTJzSXFaa05KJTJGTlplNmx1UjZmJTJGQUFYJTJGQUFTMWYycFhYMHZxJTJCSmxuN0xma1ZWdGEzWkFmbDQ5MjlteW4lMkZBNzZyTHE4NnIlMkJibyUyRjRxeWhWcnVvWmZTZWs0bGRtTTEyUGUyMjdEOVhRQnR2cHR1MyUyQjdkNlZyNjZYZjJQVSUyRndpU25zdXFuRHlMTWZGdE1aT1JqJTJCclhTUGVIRnNlbzJsN2czMUxhJTJGViUyQmglMkYyb3ElMkZ3ZnFmcEZ6blZjZDl1RFppdmF4ekRaWGExenp0WmFYQjFMVyUyQnYlMkZnYiUyRlpWWGk1dHY4MyUyRlJzajlBc0xxZlh2MmowJTJGcFhxUEZlZGdOdXJmYTEwRjN1cXN4OGx2OEFvM09idnJmJTJGQU1UNm4lMkJGUXF1cTU5JTJGVVJlYzF6YjdDSFhNYzhodG13N240N3Y4QnR1Y1BVYjZ2NlA5TGQ2OWlOb1M5SDZWazBaemNwajN0cXFlVzFBQXR1YyUyRjhBbTdNZXlodjZXdlolMkZOWlglMkZBSUV1Z3p1azE0ZUxpTjY5ZmJpNDl1NndnQmp5V05iNmRQNklPYTUyVjZ2dDI0N1AwZEQlMkZBRlAwYWpqZGM2a0JlZWtZUWQxRElzMnRzWlZaYmRWWHQ5dFlxc0c5JTJCMyUyRlRQWiUyQmwlMkZ3QkNzYWpwWFYlMkJ0WDJad28lMkZhbDdXdXZ2OVMwTWVhMiUyRlQyJTJCdlo3bTFlMWo2R1Y3NlBaJTJGcEswTkU3YXZwSDFaNjluZFU2VGk0bVA2bVZaa3RCZGJrUDN1cWJXVFJrakt1WUdiOXQxZTZ2Mjc3NnJQOUl1eXc4VnVKanRvYVM4dGt1ZWVYT2NkejMlMkYybkx5YjZ2ZFp2NkRqREt3bVZ0M2x6YnNaejNWc1pjSGx1VGdYNDk5aGZSWXh1ekp3biUyRnpuc3lLckxMdjhIMnZUJTJGcjloT0RLJTJCc00lMkZadVNXa3ZydEZqQzF3TG12ciUyRldLcVclMkZtJTJCemJaJTJCa1JSNHZWcEtuMDNxJTJGVGVxNDdNbnAlMkJReSUyQnQ3V3ZHMCUyQjRCdzNOOVNzJTJGcEslMkYlMkJ1TlZ4QlQlMkZBUCUyRlQ5VlRPYTE3U3h3RG11QkRtblVFSHNVNlNTbnhmNng5Q3pQcXQxRUNpeDdHTWViZW41UTBjYW5leXlsenZvdXRvM01ydVolMkZoYXYwbnAlMkZwRlVyeWFNakZ2cnpwczZka1BiWm1Vc0h2eDd6RmJlcjRmN3JiTFA2V3olMkZBRWxuJTJCaXZZdlklMkJ1OUw2ZjFYcGwySDFHRzBPRzcxU1EwMXVIMGIyUGQ5QjdQJTJGVWIlMkZ3Qkd2SDh2cEYzVDclMkZRcGNINU5JZWE3YXo2bGVYU2QyJTJCekhqZFc3MHFIYk1uRSUyRndsU1pyRTJOdXpmaktITVklMkJHZnB6UjJuJTJGTDlIOTV3TSUyRkJ5T2s1aHhzZ2l5dXdiNnJtNjEzVkg2TjFYJTJGQUtNclcxMGpxYnJtSER5SGw4TWhqWTNHNnNIZDZQTzMxOGR2NmVpejA3Zlc5UDB2JTJCT0hpUHhjNm45ajU1MllkaDNZbVZ5N0Z0UDUlMkJ2dmZpdSUyRnclMkYlMkZCJTJGcGY1emVoWXYxYTZwVms1V0xuaCUyQkpaaE1MNnJtaVd2c0JZNnQxRm4wbjFOWTc3VHZwJTJGU2Y4V25panFOV25PRXNjakdRNFpCN09pZzBmVjdMZjAxcnI4cnFSMnRlejNYUGJCeDY3WHNZemF5eGpiTWw5bTM4JTJGOUolMkJsJTJGUyUyQnB6cnZVeE1XcXZxTlZ1SmtzeDM0MDJ6VzVvb3NiZFNjaWc3MjVPSGQ5cVk2diUyQmMyWk9MVDZObjg4eTNlNlgxdXlrOU5leHpuWWQlMkJQZGkyTWMxbFR4bDR6dHpuV3UzYktmV1paWGJzOVQwNmYweXBkWTZKMUhyJTJGVkg5V3J0cHN4Nm1NcUZEUyUyRjFXaXNGMzBYTmE1JTJCNTc3YmYwZXl6JTJGUlYlMkJxbkh3VzFSb3RERjZ4YXk0OVR2aWtzOU9ITkJBYzlnMnNmYzFtN1p1MiUyRm9HJTJGUXh2M1BTVDlMdzJkVGJsTSUyQjFXMXNkRGl4b00ydnUzZjA5MzZPdDNwT1pzdXJwJTJGUTVIJTJCaiUyRndhSmo0R1hmMDUyWmplcFJqYm1Pcnl3TnpOakh1bGg5TWVnNXpOJTJCMWxybiUyRjRSOWZwJTJGcEZZeGNIRDZleTZuSXRkU0dBT3RkbEZ3aGxoJTJGUnVIcE4zUHBidjhBNXhucWVtZ0ZPWjElMkZEeU1XNzdUMURJT1F5NHZyYTkxYnFDMDBlbiUyQmlZeCUyRjA2TnJxbmV2JTJGQUlmJTJGQUVqMVd4YUcyc3hLT285TXU2aUszMlVZZU9MSE1MM3ZMck5ycm11MyUyQmx2JTJGQVBSaTFjdnBsMVBVcVczTmZoNVZKMzQlMkJObU85WEV1ckh1JTJGVjd0MWpHTXNZZjBub1A5biUyRkFBTnF2OVE2Vzg0dzYzMGhuMmN1RmQxamNZR3lzalM2cXpMeG1pdTNGeWFkdjg5Nk5YJTJCbCUyQjJlcWhTU0JRMXUlMkZ3ZWQ2ejlYJTJCcnRGSkgxZFpqMWFnRU5zcVp1SUI5RVBzdmJrVzdXajZlUyUyRjZmcSUyQmolMkJqV09jYk53OGhucWROeHEzdGl6WllYT2E0VHk3ZmtXYm1OZCUyRk9iZm9mNFJkcFQxZnFIVXMxcmMlMkZMZmt0eVJVMnZHYTRiU0hOZVB0RkwzZWw2Vm1MbFZlalo3ZjBtJTJGMWNqJTJCWiUyQjBXYnZTZnFuMCUyRnExZVRqZFJJZGxWc3BzcWN4d0JxYzhQYmZXJTJCclgzNzYlMkZUdGYlMkZBS0gwYmNTNnYyV0pYcXVsajRZQ1hFRFpxdXJ4bjFkeFhkUm9zdXc3OGhuWGNSNWRTV3UyMk9yWTJicXNkbjAzWkZUdDkzMk96MlpXTDZsVkxQV29YUzE5SHp1cDlQcSUyQnNmVE1ZdHk4a243WlJYREN5NWhkVmIxREVyZSUyRjlOVTc5THZ4SGJMY2xqN0tmNXJJc3BYRTVtUG05SjZxJTJGTHFhODJZcm12ZlZKSHFVc2QlMkJneXFMYXRsbjBhJTJGMDNwUDhBV3hMbWVyViUyQjVqJTJCeiUyRlU3cXZSJTJCcDlDb3Q2UU5sTEpiWlE1eGRaWGI5TzFsNzNTOTlqbnUzJTJCcTclMkJlJTJGbkVtTjU3cXYxWDZiOWMlMkZxOTlveFdOeCUyQnVZeGN5eDdnOXJqYzJQWHhNNXQzNng2ZGptdDlIMXYwMkwlMkJpOUwlMkZDVldjejlWUHI1MW5wUFdYOUglMkJzeHV5OGJJdEZOb3lEdnRvdDl0SWNOJTJGMDZIZTMxNlAlMkZBRUtvJTJGd0FKOXA5aGJYVzE3bnRhQTk4YjNBUVhRSWJ1UDV5NDMlMkZHQjlRMmRmcCUyRmFYVFd0WjFpbG9FR0dqSVkzJTJGQVBlNyUyQmF5RyUyRjhBYWZKJTJGNnpiJTJCaSUyRlNVSlQyVEs2Nnh0cmFHQUFBQm9BRUFiVzhmeVZKZWNmVWJxUDhBakhQVjMxZFh4TWpKNmMlMkZheTI3TGFNZDFKYU5nc29EeFg5bzlyZjB6YVcyJTJCciUyRlBlcCUyRnBQUjBsUCUyRjlUMVZKSkpKU0ROTCUyRnNyOWdlWEdBQlcxcm5ha0Q2RjM2UCUyQnN1QXd1bVYlMkZXWE5yeEh2Y3ltcWgyUzdJcUxuUmElMkI3SmZqMlVQY0d0cWR2eWZWc3BaN0slMkZRJTJCeTElMkZvYVY2RmZqMDVGWnF2WUxLeVFTMTNFZzdtJTJGOUpLaW12SHByb3JFVjFOREdEd0RSdGFra0VnMk5DTm54RHFkR2IwTHJ1M3FGREhYNDFyTFRXR3hWZXlSNzYyNnRkVm1OYSUyRjFQM0xQV3I5aTJjbXpycFk1dGRCNmd6cEw3S3E3V0dYUHFxZjZEOEhJYzFnWjl1cG8lMkY3VCUyRnptVlglMkZBRFhxcjBick9GMCUyQjQxMzViV1ZGZ2MwNWtEMVdNUDA2YXJpMTdxMjVQODFaJTJCJTJGWCUyQmklMkJuYXVUeXNmcW5RZW9NNmgwNmw5MWVXMkg0andmMXVoZ2M3MExxM0RkVjFYR3htNzhkNyUyRndDZm8lMkZRWGZwSzdHSVJGWDRzMmZON3ZBZUdwUmp3azkzSXlPajVWRG5ONlU1JTJGVU1hJTJGZmxZbExHdUxtJTJCcXhucGZhZHJHMXRkazMwMlVmYXYlMkJzMmVuJTJGTnJRJTJCcmQ5JTJCTmxOZGZTJTJGRHVEWE15OGU3UjFibWpmSiUyRmtOaGw5TnY1OUt0T2VMYk1ETzZGa3RKdGUlMkIlMkZDc3RMaCUyQmhjYXhtNG1ZNW9jNXRMTXIwOFhLM3N0OUg3VFJkJTJGU3FQV1cxMWZBJTJGYSUyQk9PcGRPYzZqcWVNTmxsWWpjZHZ1ZGpXdDl6ZlZyM2I4ZCUyRiUyRm9tJTJGMUUlMkIyRjVqcGYxdTZEajlSeUxLY3F1M3BlYWYxckYxYUdoJTJCaHltMFhNcjkxVGZaa3NyJTJGbmNiJTJGU1dZOWJGVHdmdGZVT3BkUXdSWnZ4c0RMT0xoMnVCZXhyTEgyMVl6TExBSHY5SzNaWCUyRndBSCUyRk9MVXclMkJuZlUlMkY2eFZEQjZsZzQlMkZUdXRFRnJMYUclMkJnTFhEJTJGQzQyelkyeCUyRiUyQmx3N2YwMWY4dXI5T24lMkJyb3lQcWxsWmZUaGhNc3FCWmJsV2h4RmphaEZMTFdFJTJCMjdIWnYzc2JzcjlIOU42MyUyRkJqVzFMOUo5UERhJTJGNnVkY3glMkZVNlRhN2JTSDZ1eExUN1cwT2MwJTJGbzZIVDZtRmwxZnpYJTJCblY5bjFSNnYwN2JiaFp2MnphNHcxNDlLMFZrNmVua01lV1B1MmZ6bjh4VmIlMkZ3ZjBGMUdWaDRtZFNXM01EMnZiQWZBM0FIOXh5b1ltUlowbyUyRlk4OTQlMkJ6dEJOR1M3UWJSJTJCYThuNk96JTJGd0glMkZ0dEx5UmJ5UFVjWE1xenpuWTJOZmg5VHJiWmJra1Z5eHpRQnZ6bSUyQm0wNHZyN2YwZCUyRm8yZnJYJTJCRCUyRlRWMnJjJTJCcm1IMGJxSFQ4ZmNXJTJGYjJOZWQxRnJtV3NhWE9aTGZSTEgwMVclMkJwdTlMJTJCYVhVaUNKSEJXR2VnTTZkMUlkVTZXemJKaSUyRkZiQWFXdVB2ZFYlMkZWJTJGblBUU3RONlU0JTJGV2ZxUGs1amhSajJCb3JEck1YTE9qcW5nZTJtMXJOcm5WM2UxbG5wZjhiJTJGTzFVcm0lMkZxTGxaSDFhJTJCc2VUMDNJd0xhN3M5N0s4bkZyWSUyQng5ZnAlMkJwNk9manVwWjZWdlQzJTJCclkzSSUyRjBQNk95bjlGJTJCalhyS1NDRkpKSkpLVWtra2twJTJGJTJGOVgxVkpKSkpTa2tra2xLUU0zRHB6Y2QyUGJ1QWRCYTloTFhzY05XV1ZQYjlDeGprZEpKVHhIVmZxNE9sNWJjJTJCcTU1ZGx2TExxMkRheDFscHJZN0lGYlA1aTYzYjc3S2Y5SCUyQmslMkZRcnBQcSUyRmNMTUFWbGdydXBjV1hNNGR1Qmo5STB5N2YlMkYxZjAwdnJCMGhuVnVuUG8lMkJqa01tekZ0R2pxN1FDMXRsYjlOanZkJTJGcXhTNmRXTWowdXBIOUZmYlhzeXF3SWFiR3d4MzAlMkZmJTJCaWZXOW45UkhvcHd2ckJoNGVGMVYlMkJYa1UlMkZxbVpRUUxTQjZkZVl4d3V4N0hBZnBHdnM5TCUyRkIlMkY4SjZpdldWWjJkajR2VjhGZ2Zia1klMkZvNVdPOGhvc3JkcjMlMkJpNnQ3bnJlZld4OGIyaDIwaHpaRXdSOUZ3JTJGbElPTGc0JTJCSTY1Mk9DeHQ3dlVmV0Q3UTQlMkZTY3h2NW0lMkY4OUsxSXVqWWo4UHBXTGpXRGElMkJ1c0I3U1pJY2ZjNXU2WGZuRlczMXNlSWUwT0V6QkU2JTJGTlNTUVVwSkpKSlNra2trbEtTU1NTVXBKSkpKVCUyRkFQJTJGVzlWU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyRiUyRlolMkYlMkIwMUlsQm9iM1J2YzJodmNDQXpMakFBT0VKSlRRUWxBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQURoQ1NVMEQ2Z0FBQUFBWUVEdyUyRmVHMXNJSFpsY25OcGIyNDlJakV1TUNJZ1pXNWpiMlJwYm1jOUlsVlVSaTA0SWo4JTJCQ2p3aFJFOURWRmxRUlNCd2JHbHpkQ0JRVlVKTVNVTWdJaTB2TDBGd2NHeGxMeTlFVkVRZ1VFeEpVMVFnTVM0d0x5OUZUaUlnSW1oMGRIQTZMeTkzZDNjdVlYQndiR1V1WTI5dEwwUlVSSE12VUhKdmNHVnlkSGxNYVhOMExURXVNQzVrZEdRaVBnbzhjR3hwYzNRZ2RtVnljMmx2YmowaU1TNHdJajRLUEdScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlNHOXlhWHB2Ym5SaGJGSmxjend2YTJWNVBnb0pQR1JwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVhWFJsYlVGeWNtRjVQQzlyWlhrJTJCQ2drSlBHRnljbUY1UGdvSkNRazhaR2xqZEQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFF1VUUxSWIzSnBlbTl1ZEdGc1VtVnpQQzlyWlhrJTJCQ2drSkNRazhjbVZoYkQ0M01qd3ZjbVZoYkQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1R3dlpHbGpkRDRLQ1FrOEwyRnljbUY1UGdvSlBDOWthV04wUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFU5eWFXVnVkR0YwYVc5dVBDOXJaWGslMkJDZ2s4WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExtcHZZblJwWTJ0bGREd3ZjM1J5YVc1blBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRazhZWEp5WVhrJTJCQ2drSkNUeGthV04wUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGblpVWnZjbTFoZEM1UVRVOXlhV1Z1ZEdGMGFXOXVQQzlyWlhrJTJCQ2drSkNRazhhVzUwWldkbGNqNHhQQzlwYm5SbFoyVnlQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlUyTmhiR2x1Wnp3dmEyVjVQZ29KUEdScFkzUSUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YVhSbGJVRnljbUY1UEM5clpYayUyQkNna0pQR0Z5Y21GNVBnb0pDUWs4WkdsamRENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhRdVVFMVRZMkZzYVc1blBDOXJaWGslMkJDZ2tKQ1FrOGNtVmhiRDR4UEM5eVpXRnNQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4U1pYTThMMnRsZVQ0S0NUeGthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1amNtVmhkRzl5UEM5clpYayUyQkNna0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDVHhoY25KaGVUNEtDUWtKUEdScFkzUSUyQkNna0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5WbVZ5ZEdsallXeFNaWE04TDJ0bGVUNEtDUWtKQ1R4eVpXRnNQamN5UEM5eVpXRnNQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4VFkyRnNhVzVuUEM5clpYayUyQkNnazhaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG1wdlluUnBZMnRsZER3dmMzUnlhVzVuUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrOFlYSnlZWGslMkJDZ2tKQ1R4a2FXTjBQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFZabGNuUnBZMkZzVTJOaGJHbHVaend2YTJWNVBnb0pDUWtKUEhKbFlXdyUyQk1Ud3ZjbVZoYkQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1R3dlpHbGpkRDRLQ1FrOEwyRnljbUY1UGdvSlBDOWthV04wUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVjM1ZpVkdsamEyVjBMbkJoY0dWeVgybHVabTlmZEdsamEyVjBQQzlyWlhrJTJCQ2drOFpHbGpkRDRLQ1FrOGEyVjVQbEJOVUZCRVVHRndaWEpEYjJSbFRtRnRaVHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBsQk5VRkJFVUdGd1pYSkRiMlJsVG1GdFpUd3ZhMlY1UGdvSkNRa0pDVHh6ZEhKcGJtYyUyQlRHVjBkR1Z5UEM5emRISnBibWMlMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlVFMVVhVzluWVZCaGNHVnlUbUZ0WlR3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbEJOVkdsdloyRlFZWEJsY2s1aGJXVThMMnRsZVQ0S0NRa0pDUWs4YzNSeWFXNW5QbTVoTFd4bGRIUmxjand2YzNSeWFXNW5QZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNRazhhVzUwWldkbGNqNHdQQzlwYm5SbFoyVnlQZ29KQ1FrSlBDOWthV04wUGdvSkNRazhMMkZ5Y21GNVBnb0pDVHd2WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5RV1JxZFhOMFpXUlFZV2RsVW1WamREd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlXZGxVbVZqZER3dmEyVjVQZ29KQ1FrSkNUeGhjbkpoZVQ0S0NRa0pDUWtKUEhKbFlXdyUyQk1DNHdQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDR3TGpBOEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpjek5Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQk5UYzJQQzl5WldGc1Bnb0pDUWtKQ1R3dllYSnlZWGslMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhRdVVFMUJaR3AxYzNSbFpGQmhjR1Z5VW1WamREd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlYQmxjbEpsWTNROEwydGxlVDRLQ1FrSkNRazhZWEp5WVhrJTJCQ2drSkNRa0pDVHh5WldGc1BpMHhPRHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJMVEU0UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0M056UThMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqVTVORHd2Y21WaGJENEtDUWtKQ1FrOEwyRnljbUY1UGdvSkNRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDUWs4YVc1MFpXZGxjajR3UEM5cGJuUmxaMlZ5UGdvSkNRa0pQQzlrYVdOMFBnb0pDUWs4TDJGeWNtRjVQZ29KQ1R3dlpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZWEJsY2tsdVptOHVVRTFRWVhCbGNrNWhiV1U4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWtKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVUdGd1pYSk9ZVzFsUEM5clpYayUyQkNna0pDUWtKUEhOMGNtbHVaejV1WVMxc1pYUjBaWEk4TDNOMGNtbHVaejRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVjM1JoZEdWR2JHRm5QQzlyWlhrJTJCQ2drSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKQ1R3dlpHbGpkRDRLQ1FrSlBDOWhjbkpoZVQ0S0NRazhMMlJwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVlc1aFpHcDFjM1JsWkZCaFoyVlNaV04wUEM5clpYayUyQkNna0pQR1JwWTNRJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1amNtVmhkRzl5UEM5clpYayUyQkNna0pDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExtcHZZblJwWTJ0bGREd3ZjM1J5YVc1blBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YVhSbGJVRnljbUY1UEM5clpYayUyQkNna0pDVHhoY25KaGVUNEtDUWtKQ1R4a2FXTjBQZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NVFUVlZ1WVdScWRYTjBaV1JRWVdkbFVtVmpkRHd2YTJWNVBnb0pDUWtKQ1R4aGNuSmhlVDRLQ1FrSkNRa0pQSEpsWVd3JTJCTUM0d1BDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENHdMakE4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQamN6TkR3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTlRjMlBDOXlaV0ZzUGdvSkNRa0pDVHd2WVhKeVlYayUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoY0dWeVNXNW1ieTVRVFZWdVlXUnFkWE4wWldSUVlYQmxjbEpsWTNROEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrSlBHRnljbUY1UGdvSkNRa0pQR1JwWTNRJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TGxCTlZXNWhaR3AxYzNSbFpGQmhjR1Z5VW1WamREd3ZhMlY1UGdvSkNRa0pDVHhoY25KaGVUNEtDUWtKQ1FrSlBISmxZV3clMkJMVEU0UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0dE1UZzhMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqYzNORHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJOVGswUEM5eVpXRnNQZ29KQ1FrSkNUd3ZZWEp5WVhrJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NXdjR1F1VUUxUVlYQmxjazVoYldVOEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrSlBHRnljbUY1UGdvSkNRa0pQR1JwWTNRJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TG5Cd1pDNVFUVkJoY0dWeVRtRnRaVHd2YTJWNVBnb0pDUWtKQ1R4emRISnBibWMlMkJWVk1nVEdWMGRHVnlQQzl6ZEhKcGJtYyUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNUJVRWxXWlhKemFXOXVQQzlyWlhrJTJCQ2drSlBITjBjbWx1Wno0d01DNHlNRHd2YzNSeWFXNW5QZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzUwZVhCbFBDOXJaWGslMkJDZ2tKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZWR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1UVZCSlZtVnljMmx2Ymp3dmEyVjVQZ29KUEhOMGNtbHVaejR3TUM0eU1Ed3ZjM1J5YVc1blBnb0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMblI1Y0dVOEwydGxlVDRLQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUlVhV05yWlhROEwzTjBjbWx1Wno0S1BDOWthV04wUGdvOEwzQnNhWE4wUGdvNFFrbE5BJTJCa0FBQUFBQUhnQUF3QUFBRWdBU0FBQUFBQUMzZ0pBJTJGJTJCNyUyRjdnTUdBbElEWndVb0ElMkZ3QUFnQUFBRWdBU0FBQUFBQUMyQUlvQUFFQUFBQmtBQUFBQVFBREF3TUFBQUFCZiUyRjhBQVFBQkFBQUFBQUFBQUFBQUFBQUFhQWdBR1FHUUFBQUFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE0UWtsTkElMkIwQUFBQUFBQkFBWkFBQUFBRUFBUUJrQUFBQUFRQUJPRUpKVFFRbUFBQUFBQUFPQUFBQUFBQUFBQUFBQUQlMkJBQUFBNFFrbE5CQTBBQUFBQUFBUUFBQUFlT0VKSlRRUVpBQUFBQUFBRUFBQUFIamhDU1UwRDh3QUFBQUFBQ1FBQUFBQUFBQUFBQVFBNFFrbE5CQW9BQUFBQUFBRUFBRGhDU1UwbkVBQUFBQUFBQ2dBQkFBQUFBQUFBQUFFNFFrbE5BJTJGVUFBQUFBQUVnQUwyWm1BQUVBYkdabUFBWUFBQUFBQUFFQUwyWm1BQUVBb1ptYUFBWUFBQUFBQUFFQU1nQUFBQUVBV2dBQUFBWUFBQUFBQUFFQU5RQUFBQUVBTFFBQUFBWUFBQUFBQUFFNFFrbE5BJTJGZ0FBQUFBQUhBQUFQJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGOEQ2QUFBQUFEJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGQSUyQmdBQUFBQSUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRndQb0FBQUFBUCUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRjhENkFBQU9FSkpUUVFJQUFBQUFBQVFBQUFBQVFBQUFrQUFBQUpBQUFBQUFEaENTVTBFSGdBQUFBQUFCQUFBQUFBNFFrbE5CQm9BQUFBQUExVUFBQUFHQUFBQUFBQUFBQUFBQUFGRkFBQUJ3Z0FBQUJBQWN3QjNBR2tBY3dCekFGOEFZUUJ5QUcwQWVRQmZBR3NBYmdCcEFHWUFaUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUJ3Z0FBQVVVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBUUFBQUFBQUFHNTFiR3dBQUFBQ0FBQUFCbUp2ZFc1a2MwOWlhbU1BQUFBQkFBQUFBQUFBVW1OME1RQUFBQVFBQUFBQVZHOXdJR3h2Ym1jQUFBQUFBQUFBQUV4bFpuUnNiMjVuQUFBQUFBQUFBQUJDZEc5dGJHOXVad0FBQVVVQUFBQUFVbWRvZEd4dmJtY0FBQUhDQUFBQUJuTnNhV05sYzFac1RITUFBQUFCVDJKcVl3QUFBQUVBQUFBQUFBVnpiR2xqWlFBQUFCSUFBQUFIYzJ4cFkyVkpSR3h2Ym1jQUFBQUFBQUFBQjJkeWIzVndTVVJzYjI1bkFBQUFBQUFBQUFadmNtbG5hVzVsYm5WdEFBQUFERVZUYkdsalpVOXlhV2RwYmdBQUFBMWhkWFJ2UjJWdVpYSmhkR1ZrQUFBQUFGUjVjR1ZsYm5WdEFBQUFDa1ZUYkdsalpWUjVjR1VBQUFBQVNXMW5JQUFBQUFaaWIzVnVaSE5QWW1wakFBQUFBUUFBQUFBQUFGSmpkREVBQUFBRUFBQUFBRlJ2Y0NCc2IyNW5BQUFBQUFBQUFBQk1aV1owYkc5dVp3QUFBQUFBQUFBQVFuUnZiV3h2Ym1jQUFBRkZBQUFBQUZKbmFIUnNiMjVuQUFBQndnQUFBQU4xY214VVJWaFVBQUFBQVFBQUFBQUFBRzUxYkd4VVJWaFVBQUFBQVFBQUFBQUFBRTF6WjJWVVJWaFVBQUFBQVFBQUFBQUFCbUZzZEZSaFoxUkZXRlFBQUFBQkFBQUFBQUFPWTJWc2JGUmxlSFJKYzBoVVRVeGliMjlzQVFBQUFBaGpaV3hzVkdWNGRGUkZXRlFBQUFBQkFBQUFBQUFKYUc5eWVrRnNhV2R1Wlc1MWJRQUFBQTlGVTJ4cFkyVkliM0o2UVd4cFoyNEFBQUFIWkdWbVlYVnNkQUFBQUFsMlpYSjBRV3hwWjI1bGJuVnRBQUFBRDBWVGJHbGpaVlpsY25SQmJHbG5iZ0FBQUFka1pXWmhkV3gwQUFBQUMySm5RMjlzYjNKVWVYQmxaVzUxYlFBQUFCRkZVMnhwWTJWQ1IwTnZiRzl5Vkhsd1pRQUFBQUJPYjI1bEFBQUFDWFJ2Y0U5MWRITmxkR3h2Ym1jQUFBQUFBQUFBQ214bFpuUlBkWFJ6WlhSc2IyNW5BQUFBQUFBQUFBeGliM1IwYjIxUGRYUnpaWFJzYjI1bkFBQUFBQUFBQUF0eWFXZG9kRTkxZEhObGRHeHZibWNBQUFBQUFEaENTVTBFS0FBQUFBQUFEQUFBQUFFJTJGOEFBQUFBQUFBRGhDU1UwRUVRQUFBQUFBQVFFQU9FSkpUUVFVQUFBQUFBQUVBQUFBQVRoQ1NVMEVEQUFBQUFBV3J3QUFBQUVBQUFDZ0FBQUFkQUFBQWVBQUFObUFBQUFXa3dBWUFBSCUyRjJQJTJGZ0FCQktSa2xHQUFFQ0FBQklBRWdBQVAlMkZ0QUF4QlpHOWlaVjlEVFFBQyUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFEQWdJQ0FrSURBa0pEQkVMQ2dzUkZROE1EQThWR0JNVEZSTVRHQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVOQ3dzTkRnMFFEZzRRRkE0T0RoUVVEZzRPRGhRUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQWRBQ2dBd0VpQUFJUkFRTVJBZiUyRmRBQVFBQ3YlMkZFQVQ4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFNQUFRSUVCUVlIQ0FrS0N3RUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFCQkFFREFnUUNCUWNHQ0FVRERETUJBQUlSQXdRaEVqRUZRVkZoRXlKeGdUSUdGSkdoc1VJakpCVlN3V0l6TkhLQzBVTUhKWkpUOE9IeFkzTTFGcUt5Z3laRWsxUmtSY0tqZERZWDBsWGlaZkt6aE1QVGRlUHpSaWVVcElXMGxjVFU1UFNsdGNYVjVmVldabmFHbHFhMnh0Ym05amRIVjJkM2g1ZW50OGZYNSUyRmNSQUFJQ0FRSUVCQU1FQlFZSEJ3WUZOUUVBQWhFRElURVNCRUZSWVhFaUV3VXlnWkVVb2JGQ0k4RlMwZkF6SkdMaGNvS1NRMU1WWTNNMDhTVUdGcUt5Z3djbU5jTFNSSk5Vb3hka1JWVTJkR1hpOHJPRXc5TjE0JTJGTkdsS1NGdEpYRTFPVDBwYlhGMWVYMVZtWjJocGFtdHNiVzV2WW5OMGRYWjNlSGw2ZTN4JTJGJTJGYUFBd0RBUUFDRVFNUkFEOEE5VlNTU1NVcEpKSkpTa2tra2xLU1NTU1VzNHVEU1dpWFJvT0pLRmkzT3Z4Mld2YnNlNGU1Z013Um81c295cGRPeU45bVRTUkhwV3ZqNE9jNCUyRndEVmY5V2twdXBKSkpLVWtra2twU1NTU1NsSkpKSktVa2tra3AlMkYlMkYwUFZVa2xDcXh0dGJiRyUyRlJlQTRmQXBLWnBKSkpLVW8yV05ycmRZOHcxZ0xuSHlBbFZPc1d2b3dYWkRaJTJGUU9aYThEOXhybW0zJTJGTnIzUFVzd20lMkZwbVFHYW15bDRiSGlXdWhKVFlxc0Z0VExCdzlvZDk0VTFRNkZrZmFPazR0c3p1cVlmd1Y5SlNsbDElMkZvT3Qyc09ndURYZ2VUbTdmJTJGUG1OJTJGd0NDTFVXWjFWaHJ5c2JLQSUyQmp1YTd6Z3R1WiUyRjFGcUlVWFRTUWN2S1ppNDdzaDdYT1kwdEJEWUpoem1zM2FrZlIzYmxWZDEzcHJNdHVJJTJCd3NlJTJGNkwzQWhtN24wJTJGVSUyQmkyemFmemtGT2dxOSUyQmRqMFpGT000azNaRHRyR05Fbmh6dDd2M1diV1BVOGJKcHlhdlZwZHVadWMyZU5XT05iMiUyRjJYdFhPWTJWVTdyQTZobk85UnVKUyUyQnIxaE8xbGd1R0pidVl6MmV4dHZ2M2Z6TFBVJTJGd0NFU1U5UWtra2twU1NTU1NsSkpKSktmJTJGJTJGUjlWV2YwaXdpdTNGZjlMR3Nld1QlMkI2RDdQJTJGQXl4eTBGbXVuSDZ4UERNcGdkJTJGYlpGVCUyRndEb094JTJGJTJCMjBRcDBsQzAyQ3R4cUFMd0R0QjRKOEZOSkJUVm92eCUyQm80anZiTExHbGx0VHVSTXNzcmYlMkZBTkppeiUyQmhaRHFNTyUyRkV5Q1gyZE9jNnQlMkJrdWMxZ210JTJCMyUyRmhhUFRlb1o1czZSMUlackJHRGxrTnZJJTJCalhjWVl5eCUyRjd0V1Y5QiUyRndEdyUyRndEd2x5RDFMcVdIMGpxMk4xTzU1cnhPb2dZMXJ3QzRDOXV1UDZtemR0OVdsMXY2VCUyQmIlMkZBRmRGUyUyRjFNeXElMkYyVlRodXNhJTJCMnRzdDJrNnNQdVk3M0JybSUyRm8zVnYyZnklMkYzRjBTNFRBenElMkJtJTJGV0RxdUtHbmJoV095YTYyRFVVbHJjbXl1bGt0WjZmMmV5MTlXejglMkYyTHMyWiUyQkZZeDFqTDZ5eGdCZSUyRmNJQUkzQ1hmTklxWlgzdXJzcXFyWjZqN1RxSmdOWTJQVXNQUDBkeXBmV0olMkZvOU5PVDJ4cmFySFR4czN0WmtmJTJCeTc3VlI2djliZWpkTnNia2IzWmJxbTJzZlZqZ09PaHJkWkZsanFzZmZYcyUyRm12VjlWJTJGJTJCRFhIZFolMkJ1dlU4ekE2aSUyQmowMlkxemF3YVpMdDJMWTIxdGx0YjdYT2I2ajYlMkZ3RFIxViUyRnpWMzZ2NnJQVllGVSUyQmlDczVQUzdjZDQzTzJXVU9CNzdkMVglMkZUMjdsd3ZWbk55S0s4ZDE1cTZoaWoyMDdvOWRnM0RIZFc5bTl6THY4QVElMkY0V3U3MUslMkZUdHI5YXF6SiUyQnVIVjh0bVIwek5veUx2c1hVOE5yN2NkdGptdE4xSjlLJTJCMnBvZHNiazElMkZvJTJGOEEwWXNuRzZ0ZSUyQm5MWmJkWFhZNnB0dEFETnd1Y3dtaHYyY1didjB0bnIlMkZwS25mcEtiS2Y4QXRzcUQxRHZyam5mVjcwY0tsbGRnemdicWpmN1FIQjNwMnNHMHNiNmx2MCUyRmZaNlRFY1pnNjMweHoydmV6SzZqVmJmaFZ0ZjZiaVElMkJ4bHRtTlk3YTJ6OUpzM1Z1JTJGd2F5dnJIaDElMkJoaGRLdjNYdWJqQmhZOXdEYkh0UHBPZFhrT0g2dDFEZCUyRlJzbCUyRjZDJTJGd0RvbVY3Rmc5V2MlMkZGJTJCcTNSTDZiaWJlbjVXVmpoNGxsamR4YmV4bHRmMDZMYTl2dnAlMkZNJTJGd0FGWiUyRmhFdXFuMHI2bGZYTTlXWXpwdlZvbzZ3eHZjYkJjR2o5THRyMDlMTG9qOWJ4ZiUyQnZVJTJGb2Y1bXo5YXZySmQwJTJCMmpCd0hBWlRyY2QxN2lBN2JWWmEyblkwSCUyRkNYdzl2JTJGQUFkZiUyRldsNXppZFFaOVpjWTNsM29kZHdnMnoxbUhaNnpXZlF2M3QyJTJCbmswJTJGd0NuJTJGd0RSZjh4ZjZEZjFEcXZYR1olMkJlNXR6c2k3R2Q2bG0ya1BzcU5icXFPRzElMkY0Q3V4bnB0JTJGUzclMkY5STlBTGpSMUdoN2Y5NiUyQnVKSnBBMUtaajJXTkRtT0Rtbmh3TWhKYXlTU1NTVSUyRndEJTJGMHZWVm45YWlyRkdZU0dqRWNMWHVPa1YlMkZ6ZDVKJTJGZFpVJTJGd0JYJTJGcmEwRUhNOUQ3SmY5cEU0JTJGcHY5WUhYMmJUNm1uOVJJS2NFOVU2bGdYbkpEdjJsMGpOJTJGUzQ5N1MzOUM1MzBzT3l4biUyQkJjJTJGJTJCaDVQODMlMkYya3lmUyUyRlI1TmxQcnYxNnV3Y3pFeHNQSEZvekxCUldIejZycmlXTTlPdXY2SHM5VDN2c2V1ZTZCOWJ1b1pGNXhCVTg0QkRDJTJCdG9aWVcxUGN6RyUyQjAyR3htNzFHYjJYUDJmb2Q3UDVtdGN0MTY3cSUyRlQ4N0dkZmslMkZic2NXSEk2VjFOclFOR3UzTzJOWjZmcDVGTjlkVGNySDNlcFI2ZjlSS3dSWVh6aEtFdUdZbyUyRnhmU012TTZsWmxGJTJGVmZTb2JVMTFROU1HeXFMZmElMkJyUDlQSnNyOUt6MDluNmJHcSUyRjdkV04xejlWeEMzS2ZaVDAlMkIlMkJQVXlHZzVOSWFQZFU3ZXpaZTdLeFBSJTJGUjVHeXIxc1g5RGI2JTJGd0RndVp4JTJCdjM1MmJlNFdOd2Z0JTJCOXRiMm4yMW16YSUyRjA3WG4yJTJGcDdxbVZlcDZkYlAwdnFmb2xxWkQ3bVk5MWVEbVhoOXBCQVpER2pUOWF3dmIlMkJrcDNXJTJGcDJNZGtmcGF2MWIlMkJYVWIwV3VsVGVQMjNoNURpM0pMM1VZV1RZemx6YktuMXNjNXJON2JhTTNGWjlwdzh4cnZTdnIlMkZRZjBpbTZ1dkg2dlk3RzZoZlMybXgxV0ZZYXE3Ym5rJTJCbzJyMHJLUFRhN2J1c3R4WDIwJTJCeiUyQmxmNFJXJTJGcVBYZU00MDNzJTJGUTlMcGRiUTR2OTdXbDREY1cxbnVkNlBxZnJIMmU5bnN6TWF2TnglMkZzOSUyRjJoQTZpNXI3N0haTEgyNFRuMVc0JTJCVXdqMlB2YTNKZGo1YmZ6YUhiOG43RmslMkY0UDlZeFAwdFg4d3VscWFXZmIxQ3paNkdhTTMwNjIyV0REJTJGU1YxbXAzc2ZZNnRqV09zWTF0Zjg3NzZhJTJGVFE3czI3cUZOVklycXdBZlVzYlpSWHQ5UzBOOUt5MXRYODMlMkJncmUlMkYxc2VqJTJGQUUxbHpLbHRkRHRiaTlaSnNxcWJUYUJYZFMwVGJXNjhQeWNVeE5qOHFySWJSJTJGcFBVJTJGU2I2JTJGVHl2NlZXZjBxdk9yem1zWWFzbkd6SG1rN2d4MVphNksyWFI3c2QlMkI1djZLNzlKWGkzYlBVJTJGVjhpNzFSUlU1JTJGV2FMTXY2a1lqN1NHWDlMNmclMkJxSyUyRm9zcnltZXV4MWNmNEIxN2ZZc3JwdVBtTnhmdHo2M1Bjd2w5RFdEUTJzSXFaa05KJTJGTlplNmx1UjZmJTJGQUFYJTJGQUFTMWYycFhYMHZxJTJCSmxuN0xma1ZWdGEzWkFmbDQ5MjlteW4lMkZBNzZyTHE4NnIlMkJibyUyRjRxeWhWcnVvWmZTZWs0bGRtTTEyUGUyMjdEOVhRQnR2cHR1MyUyQjdkNlZyNjZYZjJQVSUyRndpU25zdXFuRHlMTWZGdE1aT1JqJTJCclhTUGVIRnNlbzJsN2czMUxhJTJGViUyQmglMkYyb3ElMkZ3ZnFmcEZ6blZjZDl1RFppdmF4ekRaWGExenp0WmFYQjFMVyUyQnYlMkZnYiUyRlpWWGk1dHY4MyUyRlJzajlBc0xxZlh2MmowJTJGcFhxUEZlZGdOdXJmYTEwRjN1cXN4OGx2OEFvM09idnJmJTJGQU1UNm4lMkJGUXF1cTU5JTJGVVJlYzF6YjdDSFhNYzhodG13N240N3Y4QnR1Y1BVYjZ2NlA5TGQ2OWlOb1M5SDZWazBaemNwajN0cXFlVzFBQXR1YyUyRjhBbTdNZXlodjZXdlolMkZOWlglMkZBSUV1Z3p1azE0ZUxpTjY5ZmJpNDl1NndnQmp5V05iNmRQNklPYTUyVjZ2dDI0N1AwZEQlMkZBRlAwYWpqZGM2a0JlZWtZUWQxRElzMnRzWlZaYmRWWHQ5dFlxc0c5JTJCMyUyRlRQWiUyQmwlMkZ3QkNzYWpwWFYlMkJ0WDJad28lMkZhbDdXdXZ2OVMwTWVhMiUyRlQyJTJCdlo3bTFlMWo2R1Y3NlBaJTJGcEswTkU3YXZwSDFaNjluZFU2VGk0bVA2bVZaa3RCZGJrUDN1cWJXVFJrakt1WUdiOXQxZTZ2Mjc3NnJQOUl1eXc4VnVKanRvYVM4dGt1ZWVYT2NkejMlMkYybkx5YjZ2ZFp2NkRqREt3bVZ0M2x6YnNaejNWc1pjSGx1VGdYNDk5aGZSWXh1ekp3biUyRnpuc3lLckxMdjhIMnZUJTJGcjloT0RLJTJCc00lMkZadVNXa3ZydEZqQzF3TG12ciUyRldLcVclMkZtJTJCemJaJTJCa1JSNHZWcEtuMDNxJTJGVGVxNDdNbnAlMkJReSUyQnQ3V3ZHMCUyQjRCdzNOOVNzJTJGcEslMkYlMkJ1TlZ4QlQlMkZBUCUyRlQ5VlRPYTE3U3h3RG11QkRtblVFSHNVNlNTbnhmNng5Q3pQcXQxRUNpeDdHTWViZW41UTBjYW5leXlsenZvdXRvM01ydVolMkZoYXYwbnAlMkZwRlVyeWFNakZ2cnpwczZka1BiWm1Vc0h2eDd6RmJlcjRmN3JiTFA2V3olMkZBRWxuJTJCaXZZdlklMkJ1OUw2ZjFYcGwySDFHRzBPRzcxU1EwMXVIMGIyUGQ5QjdQJTJGVWIlMkZ3Qkd2SDh2cEYzVDclMkZRcGNINU5JZWE3YXo2bGVYU2QyJTJCekhqZFc3MHFIYk1uRSUyRndsU1pyRTJOdXpmaktITVklMkJHZnB6UjJuJTJGTDlIOTV3TSUyRkJ5T2s1aHhzZ2l5dXdiNnJtNjEzVkg2TjFYJTJGQUtNclcxMGpxYnJtSER5SGw4TWhqWTNHNnNIZDZQTzMxOGR2NmVpejA3Zlc5UDB2JTJCT0hpUHhjNm45ajU1MllkaDNZbVZ5N0Z0UDUlMkJ2dmZpdSUyRnclMkYlMkZCJTJGcGY1emVoWXYxYTZwVms1V0xuaCUyQkpaaE1MNnJtaVd2c0JZNnQxRm4wbjFOWTc3VHZwJTJGU2Y4V25panFOV25PRXNjakdRNFpCN09pZzBmVjdMZjAxcnI4cnFSMnRlejNYUGJCeDY3WHNZemF5eGpiTWw5bTM4JTJGOUolMkJsJTJGUyUyQnB6cnZVeE1XcXZxTlZ1SmtzeDM0MDJ6VzVvb3NiZFNjaWc3MjVPSGQ5cVk2diUyQmMyWk9MVDZObjg4eTNlNlgxdXlrOU5leHpuWWQlMkJQZGkyTWMxbFR4bDR6dHpuV3UzYktmV1paWGJzOVQwNmYweXBkWTZKMUhyJTJGVkg5V3J0cHN4Nm1NcUZEUyUyRjFXaXNGMzBYTmE1JTJCNTc3YmYwZXl6JTJGUlYlMkJxbkh3VzFSb3RERjZ4YXk0OVR2aWtzOU9ITkJBYzlnMnNmYzFtN1p1MiUyRm9HJTJGUXh2M1BTVDlMdzJkVGJsTSUyQjFXMXNkRGl4b00ydnUzZjA5MzZPdDNwT1pzdXJwJTJGUTVIJTJCaiUyRndhSmo0R1hmMDUyWmplcFJqYm1Pcnl3TnpOakh1bGg5TWVnNXpOJTJCMWxybiUyRjRSOWZwJTJGcEZZeGNIRDZleTZuSXRkU0dBT3RkbEZ3aGxoJTJGUnVIcE4zUHBidjhBNXhucWVtZ0ZPWjElMkZEeU1XNzdUMURJT1F5NHZyYTkxYnFDMDBlbiUyQmlZeCUyRjA2TnJxbmV2JTJGQUlmJTJGQUVqMVd4YUcyc3hLT285TXU2aUszMlVZZU9MSE1MM3ZMck5ycm11MyUyQmx2JTJGQVBSaTFjdnBsMVBVcVczTmZoNVZKMzQlMkJObU85WEV1ckh1JTJGVjd0MWpHTXNZZjBub1A5biUyRkFBTnF2OVE2Vzg0dzYzMGhuMmN1RmQxamNZR3lzalM2cXpMeG1pdTNGeWFkdjg5Nk5YJTJCbCUyQjJlcWhTU0JRMXUlMkZ3ZWQ2ejlYJTJCcnRGSkgxZFpqMWFnRU5zcVp1SUI5RVBzdmJrVzdXajZlUyUyRjZmcSUyQmolMkJqV09jYk53OGhucWROeHEzdGl6WllYT2E0VHk3ZmtXYm1OZCUyRk9iZm9mNFJkcFQxZnFIVXMxcmMlMkZMZmt0eVJVMnZHYTRiU0hOZVB0RkwzZWw2Vm1MbFZlalo3ZjBtJTJGMWNqJTJCWiUyQjBXYnZTZnFuMCUyRnExZVRqZFJJZGxWc3BzcWN4d0JxYzhQYmZXJTJCclgzNzYlMkZUdGYlMkZBS0gwYmNTNnYyV0pYcXVsajRZQ1hFRFpxdXJ4bjFkeFhkUm9zdXc3OGhuWGNSNWRTV3UyMk9yWTJicXNkbjAzWkZUdDkzMk96MlpXTDZsVkxQV29YUzE5SHp1cDlQcSUyQnNmVE1ZdHk4a243WlJYREN5NWhkVmIxREVyZSUyRjlOVTc5THZ4SGJMY2xqN0tmNXJJc3BYRTVtUG05SjZxJTJGTHFhODJZcm12ZlZKSHFVc2QlMkJneXFMYXRsbjBhJTJGMDNwUDhBV3hMbWVyViUyQjVqJTJCeiUyRlU3cXZSJTJCcDlDb3Q2UU5sTEpiWlE1eGRaWGI5TzFsNzNTOTlqbnUzJTJCcTclMkJlJTJGbkVtTjU3cXYxWDZiOWMlMkZxOTlveFdOeCUyQnVZeGN5eDdnOXJqYzJQWHhNNXQzNng2ZGptdDlIMXYwMkwlMkJpOUwlMkZDVldjejlWUHI1MW5wUFdYOUglMkJzeHV5OGJJdEZOb3lEdnRvdDl0SWNOJTJGMDZIZTMxNlAlMkZBRUtvJTJGd0FKOXA5aGJYVzE3bnRhQTk4YjNBUVhRSWJ1UDV5NDMlMkZHQjlRMmRmcCUyRmFYVFd0WjFpbG9FR0dqSVkzJTJGQVBlNyUyQmF5RyUyRjhBYWZKJTJGNnpiJTJCaSUyRlNVSlQyVEs2Nnh0cmFHQUFBQm9BRUFiVzhmeVZKZWNmVWJxUDhBakhQVjMxZFh4TWpKNmMlMkZheTI3TGFNZDFKYU5nc29EeFg5bzlyZjB6YVcyJTJCciUyRlBlcCUyRnBQUjBsUCUyRjlUMVZKSkpKU0ROTCUyRnNyOWdlWEdBQlcxcm5ha0Q2RjM2UCUyQnN1QXd1bVYlMkZXWE5yeEh2Y3ltcWgyUzdJcUxuUmElMkI3SmZqMlVQY0d0cWR2eWZWc3BaN0slMkZRJTJCeTElMkZvYVY2RmZqMDVGWnF2WUxLeVFTMTNFZzdtJTJGOUpLaW12SHByb3JFVjFOREdEd0RSdGFra0VnMk5DTm54RHFkR2IwTHJ1M3FGREhYNDFyTFRXR3hWZXlSNzYyNnRkVm1OYSUyRjFQM0xQV3I5aTJjbXpycFk1dGRCNmd6cEw3S3E3V0dYUHFxZjZEOEhJYzFnWjl1cG8lMkY3VCUyRnptVlglMkZBRFhxcjBick9GMCUyQjQxMzViV1ZGZ2MwNWtEMVdNUDA2YXJpMTdxMjVQODFaJTJCJTJGWCUyQmklMkJuYXVUeXNmcW5RZW9NNmgwNmw5MWVXMkg0andmMXVoZ2M3MExxM0RkVjFYR3htNzhkNyUyRndDZm8lMkZRWGZwSzdHSVJGWDRzMmZON3ZBZUdwUmp3azkzSXlPajVWRG5ONlU1JTJGVU1hJTJGZmxZbExHdUxtJTJCcXhucGZhZHJHMXRkazMwMlVmYXYlMkJzMmVuJTJGTnJRJTJCcmQ5JTJCTmxOZGZTJTJGRHVEWE15OGU3UjFibWpmSiUyRmtOaGw5TnY1OUt0T2VMYk1ETzZGa3RKdGUlMkIlMkZDc3RMaCUyQmhjYXhtNG1ZNW9jNXRMTXIwOFhLM3N0OUg3VFJkJTJGU3FQV1cxMWZBJTJGYSUyQk9PcGRPYzZqcWVNTmxsWWpjZHZ1ZGpXdDl6ZlZyM2I4ZCUyRiUyRm9tJTJGMUUlMkIyRjVqcGYxdTZEajlSeUxLY3F1M3BlYWYxckYxYUdoJTJCaHltMFhNcjkxVGZaa3NyJTJGbmNiJTJGU1dZOWJGVHdmdGZVT3BkUXdSWnZ4c0RMT0xoMnVCZXhyTEgyMVl6TExBSHY5SzNaWCUyRndBSCUyRk9MVXclMkJuZlUlMkY2eFZEQjZsZzQlMkZUdXRFRnJMYUclMkJnTFhEJTJGQzQyelkyeCUyRiUyQmx3N2YwMWY4dXI5T24lMkJyb3lQcWxsWmZUaGhNc3FCWmJsV2h4RmphaEZMTFdFJTJCMjdIWnYzc2JzcjlIOU42MyUyRkJqVzFMOUo5UERhJTJGNnVkY3glMkZVNlRhN2JTSDZ1eExUN1cwT2MwJTJGbzZIVDZtRmwxZnpYJTJCblY5bjFSNnYwN2JiaFp2MnphNHcxNDlLMFZrNmVua01lV1B1MmZ6bjh4VmIlMkZ3ZjBGMUdWaDRtZFNXM01EMnZiQWZBM0FIOXh5b1ltUlowbyUyRlk4OTQlMkJ6dEJOR1M3UWJSJTJCYThuNk96JTJGd0glMkZ0dEx5UmJ5UFVjWE1xenpuWTJOZmg5VHJiWmJra1Z5eHpRQnZ6bSUyQm0wNHZyN2YwZCUyRm8yZnJYJTJCRCUyRlRWMnJjJTJCcm1IMGJxSFQ4ZmNXJTJGYjJOZWQxRnJtV3NhWE9aTGZSTEgwMVclMkJwdTlMJTJCYVhVaUNKSEJXR2VnTTZkMUlkVTZXemJKaSUyRkZiQWFXdVB2ZFYlMkZWJTJGblBUU3RONlU0JTJGV2ZxUGs1amhSajJCb3JEck1YTE9qcW5nZTJtMXJOcm5WM2UxbG5wZjhiJTJGTzFVcm0lMkZxTGxaSDFhJTJCc2VUMDNJd0xhN3M5N0s4bkZyWSUyQng5ZnAlMkJwNk9manVwWjZWdlQzJTJCclkzSSUyRjBQNk95bjlGJTJCalhyS1NDRkpKSkpLVWtra2twJTJGJTJGOVgxVkpKSkpTa2tra2xLUU0zRHB6Y2QyUGJ1QWRCYTloTFhzY05XV1ZQYjlDeGprZEpKVHhIVmZxNE9sNWJjJTJCcTU1ZGx2TExxMkRheDFscHJZN0lGYlA1aTYzYjc3S2Y5SCUyQmslMkZRcnBQcSUyRmNMTUFWbGdydXBjV1hNNGR1Qmo5STB5N2YlMkYxZjAwdnJCMGhuVnVuUG8lMkJqa01tekZ0R2pxN1FDMXRsYjlOanZkJTJGcXhTNmRXTWowdXBIOUZmYlhzeXF3SWFiR3d4MzAlMkZmJTJCaWZXOW45UkhvcHd2ckJoNGVGMVYlMkJYa1UlMkZxbVpRUUxTQjZkZVl4d3V4N0hBZnBHdnM5TCUyRkIlMkY4SjZpdldWWjJkajR2VjhGZ2Zia1klMkZvNVdPOGhvc3JkcjMlMkJpNnQ3bnJlZld4OGIyaDIwaHpaRXdSOUZ3JTJGbElPTGc0JTJCSTY1Mk9DeHQ3dlVmV0Q3UTQlMkZTY3h2NW0lMkY4OUsxSXVqWWo4UHBXTGpXRGElMkJ1c0I3U1pJY2ZjNXU2WGZuRlczMXNlSWUwT0V6QkU2JTJGTlNTUVVwSkpKSlNra2trbEtTU1NTVXBKSkpKVCUyRkFQJTJGVzlWU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyRiUyRlpBRGhDU1UwRUlRQUFBQUFBVlFBQUFBRUJBQUFBRHdCQkFHUUFid0JpQUdVQUlBQlFBR2dBYndCMEFHOEFjd0JvQUc4QWNBQUFBQk1BUVFCa0FHOEFZZ0JsQUNBQVVBQm9BRzhBZEFCdkFITUFhQUJ2QUhBQUlBQkRBRk1BTWdBQUFBRUFPRUpKVFFRR0FBQUFBQUFIQUFJQUFBQUJBUUQlMkY0VGtqYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3THdBOFAzaHdZV05yWlhRZ1ltVm5hVzQ5SXUlMkI3dnlJZ2FXUTlJbGMxVFRCTmNFTmxhR2xJZW5KbFUzcE9WR042YTJNNVpDSSUyRlBnbzhlRHA0YlhCdFpYUmhJSGh0Ykc1ek9uZzlJbUZrYjJKbE9tNXpPbTFsZEdFdklpQjRPbmh0Y0hSclBTSXpMakV1TVMweE1USWlQZ29nSUNBOGNtUm1PbEpFUmlCNGJXeHVjenB5WkdZOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6RTVPVGt2TURJdk1qSXRjbVJtTFhONWJuUmhlQzF1Y3lNaVBnb2dJQ0FnSUNBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cDRZWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUklMkJDaUFnSUNBZ0lDQWdJRHg0WVhCTlRUcEViMk4xYldWdWRFbEVQblYxYVdRNlJUY3hPVFZGTlRZMU56TXpNVEZFUkRsRk56SkdRMEUyUWprd1FVWkJSalU4TDNoaGNFMU5Pa1J2WTNWdFpXNTBTVVElMkJDaUFnSUNBZ0lDQWdJRHg0WVhCTlRUcEpibk4wWVc1alpVbEVQblYxYVdRNlJUY3hPVFZGTlRjMU56TXpNVEZFUkRsRk56SkdRMEUyUWprd1FVWkJSalU4TDNoaGNFMU5Pa2x1YzNSaGJtTmxTVVElMkJDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0FnSUNBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cDRZWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThlR0Z3T2tOeVpXRjBaVVJoZEdVJTJCTWpBd09DMHdOeTB4T1ZReE5EbzFOem8wTVMwd05Ub3dNRHd2ZUdGd09rTnlaV0YwWlVSaGRHVSUyQkNpQWdJQ0FnSUNBZ0lEeDRZWEE2VFc5a2FXWjVSR0YwWlQ0eU1EQTRMVEEzTFRFNVZERTBPalU0T2pBMUxUQTFPakF3UEM5NFlYQTZUVzlrYVdaNVJHRjBaVDRLSUNBZ0lDQWdJQ0FnUEhoaGNEcE5aWFJoWkdGMFlVUmhkR1UlMkJNakF3T0Mwd055MHhPVlF4TkRvMU9Eb3dOUzB3TlRvd01Ed3ZlR0Z3T2sxbGRHRmtZWFJoUkdGMFpUNEtJQ0FnSUNBZ0lDQWdQSGhoY0RwRGNtVmhkRzl5Vkc5dmJENUJaRzlpWlNCUWFHOTBiM05vYjNBZ1ExTXlJRTFoWTJsdWRHOXphRHd2ZUdGd09rTnlaV0YwYjNKVWIyOXNQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZaR005SW1oMGRIQTZMeTl3ZFhKc0xtOXlaeTlrWXk5bGJHVnRaVzUwY3k4eExqRXZJajRLSUNBZ0lDQWdJQ0FnUEdSak9tWnZjbTFoZEQ1cGJXRm5aUzlxY0dWblBDOWtZenBtYjNKdFlYUSUyQkNpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwd2FHOTBiM05vYjNBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZjR2h2ZEc5emFHOXdMekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThjR2h2ZEc5emFHOXdPa052Ykc5eVRXOWtaVDR6UEM5d2FHOTBiM05vYjNBNlEyOXNiM0pOYjJSbFBnb2dJQ0FnSUNBZ0lDQThjR2h2ZEc5emFHOXdPa2hwYzNSdmNua3ZQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZkR2xtWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTBhV1ptTHpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFBjbWxsYm5SaGRHbHZiajR4UEM5MGFXWm1Pazl5YVdWdWRHRjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBZVW1WemIyeDFkR2x2Ymo0eE1EQXdNREF3THpFd01EQXdQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TURBd01EQXdMekV3TURBd1BDOTBhV1ptT2xsU1pYTnZiSFYwYVc5dVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwU1pYTnZiSFYwYVc5dVZXNXBkRDR5UEM5MGFXWm1PbEpsYzI5c2RYUnBiMjVWYm1sMFBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwT1lYUnBkbVZFYVdkbGMzUSUyQk1qVTJMREkxTnl3eU5UZ3NNalU1TERJMk1pd3lOelFzTWpjM0xESTROQ3cxTXpBc05UTXhMREk0TWl3eU9ETXNNamsyTERNd01Td3pNVGdzTXpFNUxEVXlPU3cxTXpJc016QTJMREkzTUN3eU56RXNNamN5TERNd05Td3pNVFVzTXpNME16STdRekExUVRFNU1EUkdSakF3UVVKRVF6QTFNVUpFUmtGR01ESXdORVZCTlRFOEwzUnBabVk2VG1GMGFYWmxSR2xuWlhOMFBnb2dJQ0FnSUNBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNlpYaHBaajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5bGVHbG1MekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThaWGhwWmpwUWFYaGxiRmhFYVcxbGJuTnBiMjQlMkJORFV3UEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGpNeU5Ud3ZaWGhwWmpwUWFYaGxiRmxFYVcxbGJuTnBiMjQlMkJDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVSUyQkxURThMMlY0YVdZNlEyOXNiM0pUY0dGalpUNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlRtRjBhWFpsUkdsblpYTjBQak0yT0RZMExEUXdPVFl3TERRd09UWXhMRE0zTVRJeExETTNNVEl5TERRd09UWXlMRFF3T1RZekxETTNOVEV3TERRd09UWTBMRE0yT0RZM0xETTJPRFk0TERNek5ETTBMRE16TkRNM0xETTBPRFV3TERNME9EVXlMRE0wT0RVMUxETTBPRFUyTERNM016YzNMRE0zTXpjNExETTNNemM1TERNM016Z3dMRE0zTXpneExETTNNemd5TERNM016Z3pMRE0zTXpnMExETTNNemcxTERNM016ZzJMRE0zTXprMkxEUXhORGd6TERReE5EZzBMRFF4TkRnMkxEUXhORGczTERReE5EZzRMRFF4TkRreUxEUXhORGt6TERReE5EazFMRFF4TnpJNExEUXhOekk1TERReE56TXdMRFF4T1RnMUxEUXhPVGcyTERReE9UZzNMRFF4T1RnNExEUXhPVGc1TERReE9Ua3dMRFF4T1RreExEUXhPVGt5TERReE9Ua3pMRFF4T1RrMExEUXhPVGsxTERReE9UazJMRFF5TURFMkxEQXNNaXcwTERVc05pdzNMRGdzT1N3eE1Dd3hNU3d4TWl3eE15d3hOQ3d4TlN3eE5pd3hOeXd4T0N3eU1Dd3lNaXd5TXl3eU5Dd3lOU3d5Tml3eU55d3lPQ3d6TUR0RU5EWXpOME5DT1VRME1VRXhNRUpCTjBWR05VVkNRMFJDTmpNeE9ETXlPVHd2WlhocFpqcE9ZWFJwZG1WRWFXZGxjM1ElMkJDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVklMkJDand2ZURwNGJYQnRaWFJoUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW84UDNod1lXTnJaWFFnWlc1a1BTSjNJajglMkIlMkYlMkI0QURrRmtiMkpsQUdTQUFBQUFBZiUyRmJBSVFBQ0FZR0JnWUdDQVlHQ0F3SUJ3Z01EZ29JQ0FvT0VBME5EZzBORUJFTURBd01EQXdSREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFSkNBZ0pDZ2tMQ1FrTERnc05DdzRSRGc0T0RoRVJEQXdNREF3UkVRd01EQXdNREJFTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TSUyRjhBQUVRZ0JSUUhDQXdFaUFBSVJBUU1SQWYlMkZkQUFRQUhmJTJGRUFhSUFBQUFIQVFFQkFRRUFBQUFBQUFBQUFBUUZBd0lHQVFBSENBa0tDd0VBQWdJREFRRUJBUUVBQUFBQUFBQUFBUUFDQXdRRkJnY0lDUW9MRUFBQ0FRTURBZ1FDQmdjREJBSUdBbk1CQWdNUkJBQUZJUkl4UVZFR0UyRWljWUVVTXBHaEJ4V3hRaVBCVXRIaE14Wmk4Q1J5Z3ZFbFF6UlRrcUt5WTNQQ05VUW5rNk96TmhkVVpIVEQwdUlJSm9NSkNoZ1poSlJGUnFTMFZ0TlZLQnJ5NCUyRlBFMU9UMFpYV0ZsYVcxeGRYbDlXWjJocGFtdHNiVzV2WTNSMWRuZDRlWHA3ZkgxJTJCZjNPRWhZYUhpSW1LaTR5TmpvJTJCQ2s1U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dm9SQUFJQ0FRSURCUVVFQlFZRUNBTURiUUVBQWhFREJDRVNNVUVGVVJOaElnWnhnWkV5b2JId0ZNSFI0U05DRlZKaWN2RXpKRFJEZ2hhU1V5V2lZN0xDQjNQU05lSkVneGRVa3dnSkNoZ1pKalpGR2lka2RGVTM4cU96d3lncDAlMkJQemhKU2t0TVRVNVBSbGRZV1ZwYlhGMWVYMVJsWm1kb2FXcHJiRzF1YjJSMWRuZDRlWHA3ZkgxJTJCZjNPRWhZYUhpSW1LaTR5TmpvJTJCRGxKV1dsNWlabXB1Y25aNmZrcU9rcGFhbnFLbXFxNnl0cnElMkJ2JTJGYUFBd0RBUUFDRVFNUkFEOEE3JTJGbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXJsSEkydXRYbjZXbHRuRkVTYjBSRlNwNDFXakQ1cTNMQ0Jhc2x6WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5RHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJFMnJqMEx1enZGN1B4ZnRVZjhBWFBMRG5DM1hJMGV3ZHBPa1RLNFAwOFQlMkZBTUsyRWMxVExOZ2F4bUU5cEZJRHklMkJFQW4zR3h3VGdWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWJTJGJTJGMGUlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhZVWVacGZSMGE0a3BVQXgxOWg2aTc0YjRYNjVDYmpSNzZGVjVGb0pLS2U1QzFHSVZMZER1R2h1WHMySUtPWDRnZnN2R2R4JTJGc2tLdGtpeUQ2YmN0SEhiWGdQSW1PQzRxT3BYajZFMWZmNE1tNE5keGtwYzc3MEJ2Tm16WkZMczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOUx2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZva0tDVDBHJTJGM1pnYWlvTlFlbUFOWnVoYVdMeUUwTGxZMSUyQmJHbjZzV3NwQThRQSUyRlolMkZVY1ZSV2JObXhWMmJObXhWMmJObXhWMk5aUXdLbm9kajlPT3pZcXdEVDRpaVBac2ElMkZWTG01c2o3SSUyRjc2TCUyQk9UWFRwalBaUVN0OXBrQWI1cjhKeUtYcWZVdk1PcElRT0Z4RkRmb1A4cUZ2VGwlMkY0UTVJTkRrckZQQWY4QWRVaEklMkZ3QlYlMkZpSDhjbkxlQVBjeEhNcHJtelpzZ3lkbXpac1ZkbXpac1ZkbXpac1ZkbXpZeVdSSW8ya2tZS2lpck1kZ0FNVlg1c2pUZWFHbDFDenNiU0FPTHVYMHc3azE0S0N6eUFEJTJCVVpKQmlyZWJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWJTJGOVB2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZvNENYVUZhOWUwQ2JKUldrciUyQjBSV2xNSFpFSjVXdFBNdHpFNSUyQkdZSktueUswJTJGNGt1RUMxWmVNMklXMG9rakZUOFM3SCUyQnVMNEZZejUybU1XbjJ0RFRsY3BYNkZiREhSNWVjQ0glMkJaZXZ5d2wlMkZNTThkSnRuN0xkSiUyQkt2Z3J5OWNjck9KNjlLVnc5RTlHUzVzMmJBaDJiTm14VjJiTm14VjJiTm14VmkzbWlGVTFMU2J4dnNTdEpZekglMkZKblNpJTJGOEFEWXBvRXpMY3hxMVQ2OEZHciUyRnZ5RThHcmdqemRDMG1oWEVzWSUyRmUycFM1aSUyRjFvbURmOFJ3dHRKUkhkcmNEYU5iaFpWSTZlbmRJRyUyRjRtY25IZUpDRHpETDgyYk5rRXV6WnMyS3V6WnMyS3V6WnMyS3Vya1o4NDNaaHM0YlZUUXp2VnFmeXJ2ZzN6SE5QYjJVTXNMdEdCUEdKU3BJcWpFcVJVYjljaCUyQnZTU3ZwMEpsY3ZKQ0x5TXV4SmI0Sk52aSUyRjFTdUVCVnZrYVg5TCUyQlpibThTdjFmVGJmMFk2JTJGNzhsUHhIJTJGZ0Z6cGVSdnlQYldjWGx5eXViV0JJWHVveEpPVUc3dUtqazUlMkZhT1NTb3hQTlhaczJiQXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkYlMkZVNyUyRm16WnNWUTJvc3lXTTdvM0ZsUWtNT3hHUHRaaFBCSEtDRHlVRTA4ZSUyQk0xQmVkamNyNHhQVCUyRmdUaFY1Y3ZCSmJwR2VyZ0VmTURjWWEyUGtxZlpzMmJBcnMyYk5pcnMyYk5pcnMyYk5pcnNoZm5SR3RiN1Q5VFg3TGNvSkQycUR6U3Yzdmswd2w4MVdEYWpvZHpER0t6Umoxb1IzNVIlMkZGVDZSdGhITlhhVmNyS3NVdGZ0RGkzMDRkWno3eXJxUHJRQ0luY2RNbnNFbnFSSyUyRmNqZjU0eVZqUDVnd3RKNWNrY0QlMkI1bWlrJTJCaXZIJTJGQUkzd0Q1Um5FdHB3cldndzk4M1JHYnkxcWlxS2xZR2tBJTJGNHglMkZ2UCUyQk5jaG5rZTVCSVVHb1BRJTJGUEVKSEo2WEczSkZieEFPUHhPQTFpWDdzVXdJZG16WnNWZG16WnNWZG16WnNWVWJxQmJxMm10bSUyQnpNalJuNU1LWkRMUDRyQzJVVnE5cVlqN1NXc2hXbiUyQnR4T1RuSVZHNHR0V3ZkTmFpaUs3RnhHRHRXRzZUaSUyRndEd011U2h6UkxreSUyQjFsRTl2Rk1QOEFkaUszM2dZc2NLdEJtRFdodHElMkZIYk95TXA2OFNlU0g1VU9HcHlKNXBZZGUzbW9XUG1XNUt6SDBwSW8yV050MEEzV3YwdHMyRDczeko2Rmd6eHFxWHBLcEhHOWVETXg3RVlYZWQ0NVZlQzRnUENkWXlxdWEwSTVxNVZnT3YyY0FXOHNXbzJRTXFod3dveUhjVnlRRmhWT0x6dnJOcmRmNmZGSExGWDRrVmVCSCUyQnIxJTJGNGJKbHAlMkJ0MkdxV3JYRm5JQ3lLV2VKdG5VZ1YzWE9QNjdxRmphRkxIVXJwcmVjeSUyQmxaYWp4UERtTjFqbjhEdjhBYSUyQnklMkJJYVhyY2xyZHRaMzROcmZSMVVTb2ZnZW8ySzA2YyUyRjhBZ2NCQ1hyJTJGbHZYUnJkbnprNHJjb1NKRlhZZk1ibkR6T1YlMkJUcjgyZXFBT1FJcGFCcTdBVjJyJTJCT2RUcmlSU0VwOHo4Um9OOUk1QVdKUFY1SFlEMHlIciUyQkdRZzNOdHExbGNMYXp4M0NpWnZpaVlPS3pRbzlLamI3WXpvV3FSZXZwdDVBT3NrRWlqNWxDT21jNjAlMkJXQ0swajlPTllvNUlZcCUyQkVhaFFXQmVOalJhZkVjTVZUdlRiJTJCODBmeUhaM0Z1Z0U5dlNPUkpCVXFQVlpXJTJCRUh3M3lWYVhlQyUyRnNvYnVsR2tYNDFIUU1ObUglMkZCWnpDJTJCMWlUVGJhZFpVa2p0Smp6a1FxU0txTm01ZnNkTVBmeXIxJTJGUmRUOHZyYTJFNU41QzhrbDNiU01US3BrY3R6JTJCTDdTUDlwZU9BN2ZGa0lrZ2tDd09ma3o3TmxBMXk4REYyYk5teFYyYkVKTHkxaW5qdHBKVldlYXZwUkVqazNIYzhWNjR2aXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5WHYlMkJiTm14VnBsRHFVYmNNS0g1SElQb2tqV3NzdHF4JTJCSzJsWlBmNFdwazV5RjZuRjlSOHhzd0hHTzhRU2olMkZBRmg4RCUyRnFya29jNlZtU01IVU9PakFFZlRqc0FhWk1YaE1SUHhSbllmNUo2WVB5SlYyYk5teFYyYk5teFZRdXpPdHU3MjlQVlVjbEJGYTA3VTk4RGFmcXNGNmk5RWtJNmVQeXd3eUY2dkcyaTZvSlJVV2w2eFpDUDJKT3JyJTJGc3Z0TGhHNnMweWlLNFg2WmZpNFFJN1ZiOWx2NWglMkZYREhyZ1Y1YzhCMEx6TGMyUSUyQkdGMjlXRHc0U2ZGJTJGd3AlMkJIT2c2Wk1IaTRqMllmVGtaJTJGTUd3cEZhYXpHRHl0bTlHWWolMkZBSDI1JTJCRW4lMkZBRlglMkZBT0o0Tjh1WHdsaWljbnBzMzA1TG1GWkRld3JjMmR4YnQwbGllTnZreWxjNDUlMkJYMTBVQ1F6SGpMQVRFNFAlMkJRZU5jNkw1NWU1aTBKNTdXVm9uaWtSbVpEU3E3amYyeUIyT3AlMkZWWW9yMiUyRndCTmprdHBBR2p2N1p2VSUyQklub3k4VmFvJTJGYTQ0eENROWFzMjVSVkJxS25mQkdSYnk5ckJFc2xqY0lZMGFRJTJCZzVGQ0NRRDZiajlsc2xHQWlrTjVzMmJBcnMyYkd5T0kwYVJ1aUFzZm9GY1ZTJTJCJTJGMXEyc0psdHlyU3l0dXlwJTJCeURzQzN6d3hCcUFmSGZJJTJGb2RtdDJ6NnBjam5KSzVkQWV4UFQlMkZnUmtoeFYyYzc4Mm1TeTgyV1VnTklkVWhOczRQVG1sWFElMkZ3REJET2laQXZ6TGI2bkhwT3JsRmtqczdsV2RHOXl2eFZHJTJGd2l1R0ozVXAzWVRKRnI3b3AlMkJDOHQxbGpIanhvZHY4QVl0a2l5SGJ4eDZYZkt4JTJGY1hCaWxKMyUyQkFzVlVWOEZSbHlZQTRaODBEa2tQbXEzRXRsSEpTcFIlMkJKUGdIQkg2NlpCdEl1ZnF0OU5wOHBBTEhuRXBPNXAxb002WHEwUDFqVHJpUG9lUElmTmR4bkx0WnRyR1psdUJjRzN2RiUyQkZKWXVKZng0MElJeEhKS3p6YjVldDladFpZcDFMd3lnY2dQdEt5JTJGWmtUJTJGS1d1UktLQ09DNnROSDFDYmxjV2lJTERVV0hINndnNnd5RGVqeDlGdzRzZk9NakVCWTViaUgxSGdMeThWWXVsT2ZKViUyQnkzOHE0bmRIOUxsTDIxOUs0aWlsSHJXekx4bGhJNlNnRTElMkYyU25GS28wQ3p4eTI4ek1xY1N6c3BJWUJQajJJJTJGMWNkJTJGeXRuVlpkTlEyRDFJJTJCRVNNb1B3JTJGek1mdGRNRzIwVFNReXlibG1qZW56b2M0VFk2bGQ2ZGR5S3dNVXNiRlpvSHFOd2QxS25HWFJYczluNSUyRnY3bGc5OEdsV2hNandrMUElMkZtNGslMkZGN2pEU3dTUFVMVFRKSTNQR0JwaEdOd0c0T0hWVyUyQmduT05YJTJCc1dGcERGUGFTU0pjVEVTRzNUY1JsZjJ1UkslMkZhenElMkJrUjNhZVQ3ZSUyQmpuWDZ5b1c4aWJodCUyQjlpOVRnJTJCJTJGUTk4UVZaSHFzdHV0b3d1U1BTZFNwVjkxSVBWV3ppZjFpOTh0JTJCWjdtNDBGamJTV1VyTkNxRW1rZXg0RUg3YWNUOWx2MmM2bG9ubWJUdk1VVFdkd2dpdW1Xa3RyTFFoZ2U2SDlvZjZ1Ukx6ZDVadXJEVlA4UTJLZXRZRlVXN2pYZVNLaSUyQm0waEg3VVpIN1g3T0NZNGcyWU0wc01yanZleEI1U0hjWHNua1B6M1klMkJjZFBxS1E2bEFCOWJ0YSUyRjhsSTY5WTIlMkY0WEplRFhQSmx2UGU2SnFNZXE2Tk1ZTHVFODQyVG82bnRUb3l1djJrJTJGYXowSjVFOCUyQjJIbkd5STJ0OVZnQSUyQnQyWlAwZXBIJTJGTkVmJTJCRXlFU2VVdWZmM3RtYkZBeDhiQjlIOFVmNHNaOCUyRjZQODJUTU1MTmIxaURSclEzRXBCa2tQQzNqN3M1JTJGd0NOViUyQjAlMkJHVmM0bjVtOHlmcG56SmNzciUyRjZIWXNMZTIzMlBCdjNqMCUyRnkzJTJCSCUyRlk1SnhrTG91clgxNzUlMkZ0YjI4bWFTWnJsb3FzZGxRMVRnbyUyRlpVRE83NTUlMkI4dXhsdlBjTUk2aTZMQWUyelo2QndsUzdObXpZRmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmYlMkZXNyUyRm16WnNWZGtiODNXNSUyQnJXMSUyQmclMkJLMWtBYyUyRjVEJTJGQ2YlMkJHNDVKTUM2amFyZTJGeGFFZjNxTW8lMkJkUGglMkY0YkNOaXFWNlZPT2NUViUyQkdSZUIzNyUyRmFYOVdIb3lGYUpNejIzQnFpV0U3anVDaCUyRnN5YVJzSFJYSFJnQ1Bwd3k1MmdMczJiTmtVdXpaczJLdXd1MXJTNDlXMDZXemI0WEk1UXY4QXl1dTZuREhNZW1Ldk9ORTFLV0dWckc3ckhQQ3hSZ2Vxc3BwazdzYjBYQzhXMmxVYmp4SGlNaG5ublRIdExtUFhyWmZnYWtkMVRzUjlpUSUyRlA3TFl0b21xJTJGV0kwSWFreWJvZjRINTVMbUZaZHFObEZxTmpjV013cWs2RkQ4ejlrJTJGUWM1MTVYdVpiVzRsMCUyQjUlMkJHV0Z6RTZuJTJCWlRUT2xXMDYzRVFrWFk5R1h3UGhuTyUyRk5zUzZUNXF0Ym9mQkhxYW5pZXhtaSUyQjJ2JTJCc1U0diUyRmxmRmdIY3JQVEZiYW5aTmIzY2F5d3lBcExFM1FqM3pqdXR3VyUyRmxqekJjNlBwNmZWOUpIcHNMTlNTZ1IxSElvclYzVnZpenEyalhRayUyQkFuZGxCQTl4bk52elJpV1B6SkJKV25yMmdKUCUyRkdOeXY4QUhBZGlrSjNZR2YwbzVwWkRJYm9TRDFHSko5YUFnaDYlMkY1YVV6b0ZuTjlZdFlaNmdtUkZZMDZWSTN6bFhrJTJGVkk1YmkyaG5sQmdkQnV4RkZhaGhmcjByU05zbkhsWFU0Skk1TkphU3QxYXZJUW0lMkI4UmFxdUQwSSUyQkxqa3BiZ0laSm16WnNpcnNEYWdDMWpjcXZVeE9CJTJGd0p3VGpYVU1ySzMyV0JCJTJCV0twZm9mRTZYYjhmNWQlMkZuaGprTVBtdlIlMkZLbHJKQnFreEJTVmtqQzBQSURwVGZJMTVzJTJGTU5idTNqYlI1cGxzWlZwNjlzd1JpOU4wZVNqTW5IJTJCUmNWcG02NjljV1d0WEduYXR3amdLbWEydVBzajB4JTJGTlh3JTJGYXlPZm1MciUyQmhYM2wlMkJQVFlya1hNJTJCcEd0bTF1UFVVY2VYN3lSeDhLTHR4JTJGMXM1eG9OJTJGZWZwVnI2QzhtdVZWZlV1TE84a01yRUllVGVtN2ZhUms1SXk1RmRUdVo5QjE2OXRyR1p2cWtjNWVGRDhTbUp6elVjVHRzcmNlV0h6VFQzZlJKdjBwNVVadnRPWVlyZ0N1JTJGSlY0UCUyRndBTkhuUHJqODN2TTJsWDl6cFdvQkpZSW5hSjU0MHBPaTElMkJHUlFEeGY0Y2xuNVozcVQyc3RqV3JLMGlleEVnRTYwJTJGMlhMT1VmbUhZTlplWmJoV1A5NEF5biUyRlYlMkJEJTJGalZjbExsYkVkUW45NTVxMXdUaVUzaHVMYWRlUUNzZlNsak85Vk5ldiUyRkFBMGJZSHViMVo3VjV5V2toSHhwY1ZISk53R2l1UDhBS1N0VmslMkZieUdhZnFMUXh5YWZPNVMybFBKV1VBbUdRJTJGN3VpQjhmOEFkMFglMkI3RiUyRnk4Q3RkNmpwbDNMYjN2JTJCa1FUcHhuaXFURGNRbjdMb1IlMkZ3VWIlMkZBTERaQ3l5ZWtXbDlaeWFGTFBlbFpHTjJ0cURFdFpKSGVuRXM2N2NrcFZYd3ExYlU3RzFpS1d2cXRjQ1I0YmtraEZZeCUyRkNIWGh2dlg0OEMlMkJVN0gxU2JLM2s5V3lhNWh2NEhjaFNCRjhGeEJMMldlT0oxayUyRjRzOVA0Y3UlMkYwaiUyRmMxRnBobUZ4UExlT2haQnhBaUw4anQ0MCUyRmE1WWVnVjZQcHJ2THBjRThzZnBUTmJoM1FWb0dLMTJ6bHVvUTJQblppaDQyZm1XSVZ0NXo4TWQ0cTlJNVA1SjE3WjJBOFlyV1ZsJTJCRVJvYUR3b052dXBuTHRiMDJMelJFZFIwaEJiYTdiVmU0dEVQRlp3cHI2c0glMkZBQmIlMkZBSk9Ta2dQTkxxR2FHN2UzdjQyaXVvVHdsaWNVSUs5aU03NTVLbkdvZVQ3Wlg2bTFDSCUyRllTTkNmJTJCRk9jdG51SWZOa1NXZXFFV3V1MjQ5T0M4Y2NmVzQ3ZWxjZCUyQmYlMkJWblElMkZ5eVM1dDlEazA2N2pNVnphU1hNTEszaFJKbHA0cjlyamtRbDVQYmFsY2FSZCUyQmxJN1Bid3lzSTVsTkpJaXJVJTJCSCUyRm1uT3VlViUyRk9VZW8lMkJuWTZoSXB1V1g5eFB0d25VJTJGaHolMkZuVE9QZVk0elklMkJZTlRncFZCY1NWUTlDckhrUDE0R3NiOXJGZ1JXU3pZMUsxJTJCS05oJTJCMHAlMkZaY1kyUWRsZXYlMkJaJTJGTEt4SzE5cGNkWUJVeldxZFl4MUx3aiUyQlQlMkJhUDhBWiUyRlp5SFc5eGU2WmZRNnBwazdRWHNCRFJUSWV2c1IlMkIwcCUyRmx5WSUyQlVQTlIxS0pMSzVsRDNLclczbTZlc2c2N2Y3OVQ5cE1EJTJCWnRDalRucVZpbElXJTJCS2VGUnNoUFdWQVAyUDklMkJKJTJCemtaUkIzRFBGbGxqbHhSUHo1RWR4OG1jdyUyRm0zYVh2a3pVTHlVQzMxMjJqRVQyb05BOGtoOU5aWVQlMkZKdnpiJTJCVE9aYWJJaG5Xa2dhT1Fjd3hPNTc3JTJGNWZqaEtJWW5kb1p2Z2FVRDA1djVTTjFKJTJGeUc2WUkwUlo0dFMlMkJveUtRUzFIVHdZSHNmZkFMcmRPUXdNJTJCTEdPRUhmaHU2UFd2SjZmNUZzZnJYbnFXOEslMkZEQkVaRDRjbUFWZjFaMmZPU2VTTG1mVDlSckhFV2x2RFNaYVZhZ05SMCUyQnp0blc4bVdzdXpaczJCRHMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlmdiUyQmJObXhWMlk1c280cXc2V0w5SGVZTGlMcEZjVW5qSFFmSDlyJTJGaHVXU2JUbkJnTVhlSml2MEg0bCUyRkE0VCUyQmE0ZlRXMDFGUnZESjZjaEElMkZZZnBYNU1NR2FYY0JtSHhiU3JzQ2RpNiUyRjJmOFJ5WjNqN2tkVTR6WnpyVGZPMnFRYTNlYUhya2F4NmhhdXglMkJyOUZrZ0olMkZkVDI3OTBaUCUyQkd5ZFdXb1d0JTJCbkszZXJBZkhHZG1YNXJrU0Vvdk5tMnlpUUFTVFFEcWNDdDVzTDVkWjA2S285WVNNTnFSQXY4QWl1Mkl2NWkwcUplY3NyS28lMkZ3QWtrJTJGY3RUaG85eW82OWh0YmkyZTJ2QXBnbUhCMWNnQTElMkJmZk9ZWCUyQm5YZmxYVWdoSmV6a05iYWJ4SDhqSCUyQmRjUFBOODJsNjViMmoyMTNETjlXZG1tdGVmQ1JrZGVKYU5TVmIxSSUyRnRZWFdNOGNWazJqYXZNOTVwVXY5emNQdkxCJTJGSTNMdnd3aElUMngxMktDQnJ4anlqUlMwNmpyeEc1WUQlMkJaY3J6enBrWG1qeWhMUHB6Q1NhRlZ2OEFUWm96dVhqSFA0R0glMkIlMkZFNUprVW1qdTlCdWphVHNKWUhIS0M0RzZTeG45ciUyRkFKcXdKSDVnMWZ5akRhdzJLcmNhRTB6U05FMjdSaVFtdHVYUFNKNiUyRnVXJTJGWWt4STZoVWc4aWE5cXVsYXRIZTNzMGs4RGd4R0taeXdCayUyQnkzJTJCVGtuJTJGTjYzYTh0dEcxYTNySEwlMkI5aElCJTJCSWRHSyUyRjhBQkE1RE5iUzB0TCUyQjRrc0pPZW56RVRXcmpZaU9UNGdqRDlsNFdxakwlMkZBSk9UVFU5WHROYzhyNmREUDhFOHJjNGlTUDcxUndrVGZjUCUyRkFMc1glMkJmbGdxMDl6RnZLZW9UTXdWMk5lQ3NCMEJhTnFmOGE1TjladTU5SzgzVzJwV2IlMkJuOWNqQm8yNFpYVU54SSUyRjFseUNXc0w2Zk5iM0xMeGlkMjR0U2dJTkE5UHV5YjY3cGQlMkZyMmthUGM2YnhONWI4b3dXWUtBWVclMkJHcFA4QWs0UnlRVTh1Zk9GN0pMRDlYUkxhQWo5NlpQaVl2NEE5QW4lMkZEWU9mejlvRWJ0QTBralhTcUclMkJycWg1TnRVJTJCa1c0aVFMJTJGazV5SyUyRml1TmFnakVjcFRVN1JqNllxYVNBYnRHMyUyRkZpbjRvbSUyRmElMkJ4aFhjR2VXeGxEZ3BQYmZ2VUZhUERLcEZYaUklMkZZayUyRmslMkZtd0ZYcjBuNWhmWEJKRnBWdHhtQzg0ak9hODElMkZhS3F2N1NmeTVHTDd6SnEycndYRmhxRjQwQWxXaVNRZkFFUFZXJTJCSDdTZnolMkZ3Q1JrVGwxZExXM3Q3eGk4MTA4QzNnOUVCQXJDbkk4anRWdnROUmNSMXp6VGRKY1F2WXdSVzd5Mjhkd3pGZlVibEl2STA1ZkFvJTJGMk9HeFN0M3pTVzlMUFhJVE1sQ2ppdXpvZnN5UnQyWWZzUGtkMGlhYlR0UWtzcDFacmE0VTg0WDZTSiUyQnc0JTJGd0FvRDdFaTVkenFWN0xGQ3Q3S1puVkFZJTJCUnF5ZzlhaiUyQlglMkJUSmRvdXVhSHJsdGIyUG1DTmZya0ttTzJ2S2NUJTJGa2dzUDJ2NWNqdGFwZm8wSnQlMkZNbGxGR0hsdFp2VmVLNHB0d1dOaTZ5VSUyQnpJdlJsd20xbVVhcnBOdEpIRVd1dE9rdUliaDBGU2Jma0dpWjIlMkZiNE14SCUyQnBrNnVaTk04c2FkZHl3U3ROSzYwNXRzS25ZY0YlMkZtYk9aeTNzMm5XYUxFJTJGRzRlNCUyQnNLNDNIRUx4b3dPekslMkZMNGx4NWZGV2IlMkZscHJQMVRXTFFNYUxNRlJoJTJGbFJ0eHIlMkZ3TFluJTJCZk5qTHAlMkJwMldwd2doV0x4dWYyU0dvUlglMkZBSURJOXBlbzJrTXRqZldRTVVpM0pNOXUyNGo1clQ0RCUyQjFHNXF5ZnlmWXpwJTJGd0NjZGltciUyQlVyYSUyRkclMkZ3cElTT29JcFhKRGNJUE40SERjUjNTY2wySTZxZW9PR052Y1F5dyUyRm8lMkIlMkZKV0dwTnZQMWFCeiUyQjBQR0Z2OEFka2YlMkJ6WEl4U2F5bTJOQ09oN01NTllMaExsT1M3SDlwZkE1RlUzMHZVTlE4dWFxaklxc2FxSGlPOFVzWjZFZUtzcmZBJTJCUzN5VXI2cDVpdWRUbDJTMVJ2UlRjaFRLZUNnViUyRmxUbGtPc3ZVdmVPbjhWa2RhdGF1eG95TiUyRklEJTJCMHIlMkZ3QW1UZnlZSHNyblRkUGFzYzElMkZOY3pYTVpBcndoVDA0ZzMlMkZBRDA1WWptbDZGZGl0bGNtdSUyRnB2WCUyRmdUbks1YlM0c3AxbUR0RklENmtMaW9QWFpnYzYxTkdUQk5ING8xUHBVaklwTmJ5WDBVbHZjdyUyRlY5VHN0N2kySXFIV245OUVQMmtaZjd4RiUyRjE4bk1YMXBBTk1SMVRUWWZNa1J1WVlsdCUyRk1FWTVFZllXN1VmdEwlMkZ3QVhqRGY4dSUyRk1Gek04bW5YNk1KTFdSRmtNaDR5aXF0R1VZVSUyRlpQODJJelclMkZINERWUUclMkZkdVB0UlAxRkclMkZsYjlsc0c2WkpESmZQY3ZHSTlXQ29KWndQaG1SR0hGMlglMkZmaTRBUDJwZWFmbUJFOEhtcThMZ0FUQ09WYWVCVUwlMkJ0Y2phdVVQaXA2cWUlMkJkSjgyeDI5M1BiMkd0eUw5Wm1XUm9MNVFBVVpaR1FLNDdwOW5PZDM5aGRhWmN0YVhTY1hYZFNOMVlIb3ludXB3RkNMMHpVWDB5NFNWR2Y2dVdEcXliUEc0Nk9uJTJCV3YlMkZBQTY1Mm5SdFklMkZUZHFKYmZqTGRxbks0Z2pwU1ZlbjFpQmY1RyUyRndCM1JmN3FmT0N4eWNhcXdxamZhSDhjayUyRmslMkI2MUsxMUFDMWtaWUlUNmdtQiUyQnh5Mm9QJTJCTWklMkZDNmY3TEVHbFpDYkJyJTJCJTJCdSUyRnFxcEJDalA2Y2J0eEh3bjRsanJYJTJGZ2NrT2oyRU1jQzZsSzZ5VFJLWW1rSW9ZbDZnRTl4VDdMNUhoY1RKcU0xakpDRWpqUVNRc0s3cVQzcmdpJTJGdUo3UFRES1EzMVM1ZjAzWlBpM1NyZkdQNVJpS0c2YmVqJTJCUVB6QjBDRyUyQnVOSHZCOVZlWng5V3ZaS0JYN2NDZjJQOGpPdmdoZ0dVMUIzQkhmUEhhUXJmdUV0M0RIa0FKYWtLaFA4QU8zN0ElMkJlZFg4aSUyQllQT2VuNmROcDJxSzV0NEpGanM1SENseW9OSmZUZGllVWFMOFMlMkZ3RENaRWNSTkVjJTJCcmZPT0tXTVRnZUdVYUVvSGZpJTJGcFJQOEF1bnQyQWIzVW9yV3FBYzVRSzhlZ0h6T1BodW9UWXJkZXNKWWduSnB0Z0RUcWR1JTJGdGtUMUM5WG5MUEl3b2ZqTGR1SjZmaGtnTGNZc2kwdlZSZlNTUlNVV1JkMVVlR0dneU4lMkJWckNTa21yWEtsWG5IQzNSdHVNWFhsVCUyQmFUSktNVFY3SmRtelpzQ3V6WnMyS3V6WnMyS3V6WnMyS3YlMkY5RHYlMkJiTm14VjJiTm14VkI2cmFmWHRPdUxYdkloNEh3WWJyJTJCT1JiUkwlMkJzTVRNYVNRc09TbnJzZUxaTkRuSWRmWFh0UDh6WHRuWkdDMnRKV0VzVXo4cEg0eUFFOFkxNHJzM0pmaWJKUlBNS3lmOEFNWHllM21LeWgxTFRIJTJCcmExcHg5UzB1bEZTVjZtTndQdFJuSWI1ZTh3WGx3JTJGd0NqOVZSOU4xdTEyUEdvRDl2VWdmcEpHJTJGN1VlZE44dWFwY1hzSDFlN0MlMkJyQWklMkZ2VjZPUHMxSyUyRnN0dGdMelA1WXNyJTJCM056SEZ4bWpQTWxOaiUyRnJMVGRXSHRpTnRsVTlJODJzeGExMWxBc3NmMmJtTWZBOVBGZjJHJTJGNFhJdDUwMXk4MVN5a0VFalJRUk1HRWFNVjVMMCUyQktuMnNxNGtlM2o5TzRhc3V5TE5Tbk1kdVglMkJWJTJGeExDZlZaJTJGUzB1OGNEa1ZoWWhmR2d4b2RHUUREWlBNY3VsdXNUenB3cnlNVDdtbmVoJTJCMHVUVk5MMWUlMkJzb2IxdExtbXRKbEVrYkZXNUZHRlI4TmZVemkyaVElMkZYTlh0TGpVQVhXZTZoRTNMJTJCUXlLSEclMkZiam5xenpQNW9rMEgwYmF4Z1dWeW9kaTVJUlU2S0J4NzRBU3J6T3pzZkwxdGNINjlwcE10ZHhNMGg0JTJGODgzT1MyR0xTNzIzOUsxcEdwR3dqJTJCRXIlMkZBTEhwaFZjZWNCY3lyYzZ2QkZkYWJMJTJCN2xWMFVQYnQxMktEbnglMkZsWVlHdnJXS3dQMW5UcDNraXJzVDBCcFdnY2RmOEFaREpnJTJGRmpTYW5TYjh4QzJ1cnNYdHBHNWt0N2RrVlJHYVU0ZyUyRkVUeSUyRndCYkl6YzYweFNleWxzZ3BoREplYWZOdElZJTJCbnFSRWZDeWdZY1dQbVYxNHgzcWtxUUR6QW80WCUyQllyJTJCME1FNmglMkJpZFpaSW1qTTkwRkxRelFqNDBCRk5uMiUyQjFYN0RZa2QyeWklMkJySE5JaDh1WGJMcDd5TEpkVG9aYlpKRFgxRVUwTk9YeENlTDl0ZiUyQko0UGhiVEx5YTU4c1hxcXQzRW9LbFY5TVNvUlVNbjhzc2Y3WEglMkZYeUQlMkJjZktGem9XblJhdEZxVVVVJTJCblNHU0dBc0JjRlhaYUZlSEpWWkR1MkhPbjNTZWU5S3QxJTJCc0N4OHgyeSUyQnBhWGFiQjJUeEg4cFAyMSUyRlp3QW51M1ZRdVYxQ0MyaVc5Y3glMkZ3Q2tTMjhrTXRBNWRLTEhMMSUyQjAwVEp5WlBoayUyQjFuUyUyRktONTlaMEdTTm5vNnlJNmUxVjR2JTJGd3k1ejlwdjhZV2o2SHJjZjZQODM2RVdtaWlIU2ZpdjJveCUyQjJrd0g3UDJmdExrMjh1eHJiZVhZTGhZWFY3Z016eGtFMElxUGlxTnElMkZ5NGdiJTJCU2s3UE5kWDFtJTJCSG1xYXl0SiUyRlR0VGR4JTJGQkdvU3U2c3dacWNqOFliQ25SbU05N2RyS3hLWGNzbHU3dFhiMSUyQlNCcSUyRndDU3paSzljMDZ4dU5VdXRTdGtCbHM1SUZrQUlBTW9IcVVVZnpOUmtiQ1BXNVhzNzByWmNWdEwwJTJCdENvQUZWYzFvSyUyRndBcm5pMlJJU2hkRDByVTlaMGcyVU5XMURSNUpMRyUyQmlyUmxRdVhobXAxWlA3Mk0lMkZ3Q3BoNzVnMEsyc3JhMjFHOGNoNWJhR0pVcHQ2eUFSdXZMNk9XRVFrMWVKcnE5czU1WUx4Qnp1R2hKRWpyM0xLdnhTcXY3V0lTYW5xMm9RUlhHcnl2ZDJNdFZodVNROGFOUWNoOE95TmpzcUVsaEsxaGJjciUyRmN2M0slMkZ5ViUyRnljUlNRQm1VaWlmc2ZRTTZGcGZsalNiclIwbUN5M0VqRGxESXpOOXNHbnBoVSUyRlolMkZsYklycW5sJTJGNmpNM0NiMVZScU9vVTgwNzhYb09IUElTSWlRQ2Q1Y2tnRTN0eVM0U3RLNnhTeSUyRkRKJTJCN0hxc2VPJTJGWVZ3MFcydGhhdHAxMGhlMmI3WUgyMWNmWmxqUDg2ZjhBRCUyRll4TzR0Yk80c280STdaVXZHNUxwbDNQc3NwclV3czM5MkpEJTJGdXQlMkZ3Q2JBT2g2c0x1VTZWcVlNRjRoS1J1Mng1RHJGSUQwWVk3cnNoNHRNbjA2JTJGa3NwanpqbmlhUzFuUWZESUUlMkJKV1h3ZGFmRXY3T2QwdWdubUw4dG1ZaXBXRU9CMW9HV3AlMkZ3Q0g1Wnk0aG9UOVd1VTVCVHpqN0ZIcCUyRmVJZTMlMkJYJTJGQURyblIlMkZ5c3ZSZmFIZWFKSXdaNFJKR284UUR6USUyRjhBQXk1T1BWQmZQTnhicE1waWZZcWFCdTRJd0ZZV2x4OWZFSUpVN2xtSDdTJTJGODNaSjllMHg3Szl1blJnOGF6TWtvSFdKeVNWUiUyRjlZSDRXJTJCemolMkZLdHZGZGF4QkRMUUt6QVZPMjQzRyUyRjhBcllQSlVYYjJOdkRadGR5V3hlM0I0bWVDUSUyQnRHMzdKa2piOWxhZmFYSFJYbDlxMnI2ZXRuV0o3WXh4MjhoJTJCMVVOeU1qdCUyRmxING15WDZscDFwb1BtNTdDSUZMRzhqaWtDc0tpc3FxWFduY2MyJTJCemhMWlcwT20zNWhDdUxpQ2VTZ0lIRlk2N0tUOXJsNFlhVjYzSXdNVlNha2cxcHQyN2VHUnV6dnJUV0lMZFlibmxjSVdYU2RRYzhXNXBYbHA5MSUyRkxJUDkxTSUyRjk0bUc5dGNmVzNBUTE0eGdzUEg0YzRacCUyQnR6NkhxTjJySjYxbk5JeTNsb1RUa0E1NHlJZjkxelIlMkZhaWx5Uk5VaW5wVjBpWHF5eXh3JTJCamRXNU1kJTJGYU4xaVBkcWY3NGY4QTVKdGthMVpaNExXWXhzeVNLcGFDUlQ4UUklMkJJeGtqMkh3NUtMZTYlMkZUc1VGJTJGcDF3c21yUlJrMmwwUUFMNkZmdDI5MGclMkZ1N3VQN0xvMzk1aEZxdXFhTDlYWm1tV0NSd3lTV1RnczhNZ0c2T28lMkZZNWZaYkFVaEMlMkJaOUpzZk1sMVNLWVclMkJxeVFSVDJETWYzVXZKZVR3dDRNNSUyQkpjaEt5ck9yNkQ1Z1F3VFFFcEZLJTJGd0RlUXY4QXluJTJCWkRrJTJCMUd5ajFldzBTYUM0Z1M1bnRtQ3RYMEVMUXRRQU0lMkZFY3Y1Rnd2MWJReHIlMkJuaHI0b21zMnltUDZ4dUNTdFNJYm9mNnY4QWR6WU9hR0FRJTJCWGRUbTFOZExqajVTTjhRa0c2Rk92cUJ1JTJCVGpUclMyc2JaTENNY1ZVbWtwRkdMbjdSZiUyRkFGdiUyQkZ4VFRtZTEwMkRUdUlMSXdacEtrc1clMkJ6eFd0VzQxJTJGWnlVMlhsVzQxSGhjYWh5dE9RSlpWSEthWHclMkZkJTJGN3JZJTJGenZpQXFRMjFsZFh0eXRyREcwazUyNHFLbW5qOHNPNzM2cm9ObU5JbHRmVnY3aEZlYU1ua1VxVHdweE5BMlMyTWFUNWV0Uzl3NldkdEV2eDFiNDJBN1N5bWglMkYyQzV6VHpiJTJCWnVuM3N3T2phY0dWS3dycU1nb2FqZWlKU3IlMkZPVERWZFZaUFlhM3BPaiUyQlc3dTMxdUtLenVaR1AxZGVQUDFJejFVb3Z4dEolMkZsWVUlMkZsJTJGNWhPdHlTJTJCV3JsaXMxR20wcHlmaVI0JTJGaTlLdjdTdW1jcnZOWW51NURjWEg3eVRvYW1yZlNmNllMOHJhdExaJTJCWnRKdm9UNmJ3WE1iRWp1Q3dWaDh1SmF1UEZ1RmUlMkJ4JTJCWUo0Tk1hd1FpT0Z6eVpPbERYNGglMkZ3UXlRZVZ0QW4xQlk5UjFRTjlXVTF0b0clMkZhM3FHWWVHRTNsblJMUFZmTTE5TGRBeVdrVHRjVzhhN3hPR2FxMWtHejdrJTJGQU02bW9BQUNpZ0EyQXhKN2xvam43MndBTmdLQWJETHpac2lyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOUh2JTJCYk5teFYyYk5teFYyUXp6M3AzUDZycUtiRkt3eXQlMkZrbjRsSlBzZVdUUE9WZm5YNWdtc3ROdGRCdG5NYmFqeWt1WEhYMFl5UGglMkYyYiUyRndERWNicmZtMjRNUnpaSTQ0N0dSNTl3NnBNZk55V2w3RWREMUtNM0NwNmR3b0tsZGolMkIxekhFJTJGUmtvMHJ6MXJVdHo5U3ZMZTJsbTJIcDhqQzdCaFdxVjV4dlViJTJGRG5uMDFqUEVpbjhwSGdja2VtWG1zVGFIY3hBTncwNW81N083SUlLeGxpSllsbCUyRmFSVCUyQjg0JTJGc05rSVpoSWtTalJEbDZ6cyUyRndJakpDWEZIa2I1Z3AzJTJCYTJyJTJCYmRQdUV2WUxWYkxScGlGTDI3YzJFdldrajAlMkZkOHYyVnBrR3NmTjJwM0tyYTNWMlhpY2dFc1FlUUozcVNOczdkJTJCa2RPMXJTYkt3MUxoTiUyQmxiUlhWSktGWnlxOFpWMyUyRjNZR0hMT0VlY3ZLRng1VHZUTER5bTBpZHYzRXZkRyUyRndCOXlmNWElMkZzdCUyQjNscEhVT3ZzdWE0aU53YldDcnVISyUyRkIwcU45ajB6b3klMkJhclc0OHIyT3EzbDFMZTJzU2l6dUdrcWs2emdVVlhNZGE4RiUyRndDRFRPTzJNMDFySXMwWENSUTRrSHFDcUduWmw3NE5na1RsTXFTT0lacFBWTnJYakdHOFF2Zmoyd1h6U3lxejFlTyUyRnROU2pRTThzVnViaEZiYmtJcFBpSSUyQlVSNVljYTNxMTdJZFBtdFoyanM3eXp0cmlPTk5oeUFLU2NpUHRNSlVmSVphWERXTCUyQnJhMGpjcTBaWUFWNHlBcTZtdjh5bkpmNVlleDFQUmpwVXNmTyUyRjBwbnVMSldOUFVna05aNGwlMkZtOU5oNnZIJTJCVnBNUmEydXZCY1hlajJHcDJyU0M1dEpKYk9aa3FXNHYlMkIlMkZnWSUyQnglMkZlSmh0QkI1c09pMzEzYm9MYTlpaE1sbzNFQjVDbEdrVUx5JTJCMTZYSms0cmhsWmFyQkZBYlpsanRyUzVUZyUyRm9JRjRmeU9UMUpqYkMxTCUyQmJTYm93eU13dTRXcnpKcnlYOWgxUFFweHclMkZGV0ZYTnV0OVBCNnNyUzZmcmxxSTRKWkhKJTJCcjMwYkNzYk9mNXBoeDMlMkZBTjFUJTJGd0NSZ1BRYnRyZVZyRUZyVzhnZm5EVTBkSlVQRjA5dW5IRCUyRkFGZXlnamp2YmkyaGFUUWJweGNYbHBIdkxwOXg5bjZ4Q2xmanRqWGkxUDJQM2IlMkZHc2VFOTlvbDlxdHlqSUthbVlsa3RiNk1uMEw1UUtKOFpwNmQzeCUyQkg0dnQ4T0QlMkZ2Y2lUWFBaYVolMkJrZHA1JTJCZ3QxOVlhZDVwMCUyRmUwdlUyWThUME5QaWFNJTJGdEolMkZ1dk9qNmxjR3lzRmFSbFl4SldVamZrVVhrM3o1TU01cCUyQlYybDNVMnBQZGFsRkhLMXNPTHlxUXhTWmFGT2REV09UN1clMkY3ZVRUeks4VWRsY3hSRWhYQlRmJTJCZHpXZyUyQjdKeE5qaTcwSG5UeiUyQjUxR1h5cnJGeGFhcEQ2OW5mY1JxU2Z0cXhITDFvaiUyRk9qUGp0UTBHTllDZnJDWFdpM1FNdGxlbGh5amtZYkZmZHZzeXg0TTg3V3k2enFlbVRxNFg5S3dRbm1lZ2tLJTJCbWYlMkJTaTVHOU0xUFZmTFV0M29kM0NKSUdERVFTN2lLVUQ0Wm92OCUyRmp5RXJxcnJ1UE5rSzU4JTJGSk43U3gwJTJCMHNEZTNrMGs5eEE2SkJKQUNHcXdQSGlLcDhTOGZ0czJGMG1yRFMzbnViUFRoSDZaTGE1WWNRc25CdnMza1NzQ25KZVhKdUslMkZCJTJGd0FZbXdRJTJGclhkakVzUVJpemh2aktDclVwOElmNHVXJTJGd0N5dUszRnM4OTNwMW5lemZWZGVEQ094bUhGaThaSCUyQjg5d1NlQmpQMll1WCUyQlZGaVlnZ0E3MFBtdDlRemZ5amR4WGVpUGVhWTNyTll0OVpqZEtVa2dQMmd5ajdMOGZ0TCUyRlBnVHoydHVMZEpJVDZjTjFKRmN4ekoyVTdTYiUyRnMlMkZhNUJzS2ZMRU12bFBYYnkyc0pJNDB1RiUyRjBpelZ1VWNiMDVuMHozZ2tUbHclMkYzMjM3dkhlZGRYTjVwRU1kbmJtT3lzNEJGY3kwcURjRjZHSmElMkZ3REZhY215WDhQdTJSMVFPaTZZdXBhYmQyRjc4ZGo2eGpMVkZVbHB5U2FId2tVZjdGMCUyQkRJcnJ2bDZkcjQyTjBlT3RSSUhzN2xka3Y0QjlpamY4dEtnZkIlMkZQJTJGQUhYMjhtUGx1eWIwVnM3T2RUTDZTU1Jlb0s4JTJGVFpxTiUyRnJxT1BMJTJGSndUcWRoRnI5bTFscVVoam5oY20ydXY4QWRsdE4lMkZNS2Y3cGI5dFA4QVpyalZoV0hhSHJFV3F4alRiOWd0OUdLUXl0c1hwdHhOZjJzbDM1ZDNKMGp6bkpiQ29qdVFsUjI2Y1QlMkJ0YzU1cXRoZHlYY3l5SjlYOHdXZngzRVNiQzZVYnJjd2Z6UzhmamZqJTJGQUh5ZnZQdDg4TiUyRkt1cTNGM3ExaHFCSUV5YzRwV1p1Q2tvQXdjazlNQTUwVlBKViUyRk1xMmswVHpuZkNKUVVtUEpvbSUyQnpKRyUyRnhjVzl0JTJGd0RZNFE2Y0lMYTZaWTJlS1J3c2x2NmdvYURmanklMkZhSzRmJTJGQUpsZWFkTTgwYTh0MXBjWjlHQ0pZbXVHMk1yRDdUQWZzcXYyViUyRm13cjBXeXVOWFV3JTJGVnhjaTElMkJLTHQlMkZ3MjN3cmc2cUdWYW5yMXZySzJ0M2NzSXJ5MWFFU0JqeEpFWVlPUWZmNGNqdm0zekxicFpYTFdUR0M1dnIlMkZ3Q3N3UmpmakJHb0M4eWZpJTJCSWpDUFgydk5NdSUyRnFaRFJOR0tTQWdVcXhxZ3FLcnVGJTJCSDRzanN5UFBJWlpTWEo3a25mRzFlOSUyRmx4cmR0NWtzYnFkU0Z1N2VNTGNXNU80JTJCRTBjVjZ4dm5GNzV1VnpjYjE0eXlCVzclMkZhTzJLZVM5UnV0Qzh5V2Q3RE1ZTGZuNmQzTCUyQng2RDdTTEo3WWhka05kM1VrUkRSU1hFcnhNRFVGR2NsVDlJd25kQ3RwV3J6NlpOOE1za2NEc0dkb2p4a2pjZlptaXAlMkIydjhBTCUyQjNpV295U2ZYYmlIVW1GeTE0ZnJLWHFING5MMTR6SyUyRlZ1WDdjYllFZUpXRFBRVnBVMFBqMHg2eXFMTDBwSlVXNHRYRTFvNU85U2FTUmJlUDI4Q29iMVoxVDZ2UEt6eGplTlNTUUs5YVYlMkJ6blhMZlVyZHREdDlUMVUlMkJqZVJ4cGEzaU12RjVWNDFqY2clMkZ0cnglMkJMT2Q2VmJhVHFKbFM3bE1sNUlyaTNoSHdSaVFqOTIwc25oek9EcHBXc2lpNnpjR2VTWmczcG8zTlN5JTJGRCUyRmVuNEs5VjU0MnIwTHloZWFYY201dWFDQ1dOaHhrbCUyRnZDbE9xY3ZzNHJybjVnMmVuSTl0cEtpNHVxbFdjazByU3Z4UDhBdGY3SElUYXpwY2NyaU5hTEdEJTJGb3pHbkJWSUprWlAyNjElMkJGdVdFNGp1THFTWm8ycGJKTWp5aXRBUWVWUHdyanhiVUUwMXJldVhHdkNLUFVaSjJDczBpcWdVZ0Z0dW53JTJGQ0tmRGhXTFhTemF5Vzczanh1R0VsV2dKVWJVb1NEaGtMY1hFakpEU0pxa29TZCUyQkg3T0dsaDVhMUh6RE9OSWl0JTJGV3ZaRU1rSlJsUXRHbEtzQ3hWWDQlMkZ5JTJGYXdXdElMVExUVG1lTW1iVHJtMWpYZTBubU1MT3dIMm5abHJXdiUyQlZobEJiNkxxbDA5enBlbXJieDJjSmU1V05xaVJpM0VLcmZ5aiUyQlpSOFdKNnglMkJWUG5YUXJLNDFpOXNsanNyVUI1cEJMR3pBVkNnaU5XTE51ZnM0SThoNmhwNzM4c054UkJleGVpNUJvQkpXc2NnJTJGMlh3NFZaam9NbGxGYng2MzVZNTJrOW12UFVkS2FSakhJRiUyQjA4UEluaEpRVjYlMkZhJTJCSE9xNmQ1JTJGMEc3dG9aekslMkZCd0t6QkNWclRvM0dwUSUyRjYyY1lXMjFEUSUyRk1VVnJGSCUyQjV2eUluUFNJcXpmRTFmMmFmYXdrbXRwNDJrbHQwZjZ1enVJbldvRHFyRlFSUWprTUpWOVEybXM2VmZpdHBlUlMlMkJ3WVYlMkZ3Q0JORGcyb3p6cjVZMXZUSTdWOUwxUG5iVERrOEU0UXM3TTFLS0hCRHA5R1RmUWZPZG9zU3h3NnR4a3A4VU4wRHhCRzM3V05lYTA5VXpaQk5ZJTJGTTNTZkxjVnJMckRJeVhaS3dtMmJtVzQwRHNGMyUyQkZhJTJGRjhlVFcxdW9ieTJpdTdkdWNNeUNTTmgzVmhVWUVLMmJOWE5pcnMyYk5pcnMyYk5pciUyRiUyRlM3JTJGbXpac1ZkbXpac1ZkbkUlMkZ3QTlyS1lYbWo2alQ5dzBjdHVUNE9wRWdCJTJGMWxPZHN5TyUyQmQlMkZMVWZtdnklMkZjYVhzdHh0Tlp5SG9zeWJvZmszMkclMkYxc0I1T1JwTW94WjRUUElHajdwYlBsJTJCTlByRVJpJTJGYUc2SDM4TWtQbFh6aCUyQmpoSG8lMkJybXVuQ3F3WEZLbURtZmlTUmYyN2QlMkZ3QnY5cE1KQkRjV043SmFYY1JodVlIS1RSUHNWZFQwUCUyRk5XQjlSaVdPNmFnJTJGZHlnU0w3Y3V2M0hLcGt3SW1QY1hvTTJLR2FIaHkzQjNCSGYzaDZCNXFzbFhRb29OT1ZvZjBhN1hkaTZmRHhCUEtRUTc4dlQzNXhObDZGcjFsNXMweVhTTlpSSHVqSHhsUmh0TXYlMkIlMkZFOEpCOXIlMkZBSWZJTG8ycFQ2WGZMZDhtbWlLZWhQQXpFOG9UJTJCeXZLdE9QV1AlMkJYS3ZyYWZTcGwxWFQyTDZlejg0THFMckUxYThXSDdQSDdORGxrTW9sdVBpSFJhclJ6MDVGJTJCcUo1U0hmMUNUJTJCWiUyRkxsejVXdnZUVW1YVDVqVzJuUCUyRkVIJTJGd0NMQiUyRncyRmF1RDhTbjZjNjdhM1ZoNXgwcDdHJTJCUmZyQVdza1k2RUhwTEZYcCUyRnhwbkxkYzBTODh0M3B0cmlyMjdtc0UzWmxINm5YOXBjbVIxSEp4RlMzdUE0b2Z0REJsdmN6Mmx4SGMyc2pRenhNR2psVFlnakNWRzZNaCUyQldENFpSSXZ2M0dDMVo3cGR4SHJhTkpDVml1a3ExM2Fzd1ZBTzl4Q1clMkYzVWY4QWRrZiUyQjYlMkY4QVZ3MXQ1TlBrS2FiZTNTeXFLRzJ1SXF1WURYN0pjN2VpMzdhJTJGWiUyRmF6bTl0ZFQyZHhIZFd6Y0pZenlROVI0VUk3cXclMkJGaGt3aHZEcUVDVGFaYkV4eUhoUGJxS21DWWl2QmYlMkJLWlB0UiUyRjhEZ0lrU0R4VkhxSyUyRlN5QkZiamZ2UjhrMXhZNmdWdExiNnZKYlZXWmJodlZMbzM4eUFlbVlaRiUyRjRYQ2pXME1jWDk4NiUyQlg3MlVlbTZWNTZiZWtWQVlMdTBEJTJGOEFKU0wlMkZBSXRqdzdXMHV0VmdqMCUyQjdrOURVTGMlMkJuYVNNYUZrcnZheiUyRjh5WFAlMkJwZ3EwMGl6dGJrYVZjUDhBV0JlcjZOekV3b3JMV2pSc29KNHlSdjhBRWpyOWpHT01EYm41eTNVeUo4dmN5ZnlIcGwxcHVoeTMxekVFMWU5Y0pmS3hYaks4Sk1hVHFmR1pDcnQlMkZOOXJDWDh3ZGElMkJxeWFiQUdBTTg1YVlBOUZVY1YlMkZ3Q0d5WlhFbHZiMjBWZ0hiMUxlTkRFS21wS0RoR1MlMkZmT0slMkJjcmh0VTFHOHZMWiUyQllzejZNMFElMkIwbkJoNmN3SCUyQiUyQjVhZjdGOHNsc0FBeEc1dGtlc1RtNjhzYWRkbzNHYlRaNWJiMUIxRyUyRnJSZnJ4R1RXN0x6UHBjcmFoQUxmekRwaXI5YmlJNHRKRVNBWm93ZnRKOFN2eCUyRlklMkYxY0Q2Vk1iM1JOVHNTaEptaGp1NGdWUDJvdnRIJTJGZ0clMkJMQlZuYjZiNWcwdXgxSkdXRFhORGo0U0Vpb25nUWNHamslMkYzNGhYN0xmc1lCdWt0JTJCV2JhNGdXSFdtaiUyQnNXZHBLMER3cXklMkJvV2tvbkpFJTJGdkhaT2ZOY0tkYXNuazgwMjg4VE42RUVxeE9YTldTT0ppUzduMnA4ZUI0YnlTdzFpbHY4QXU0T1FrNDdrS28lMkJMdiUyRkxYN1dLNmpyNHU5VWVlMWpJdG5kaUlpYXN5djlzViUyRmwzd1dBRlpCYnZZYWpxc1YlMkZEU1AxeUlUUFVnU0tIOVNTaW5ZY0lSdyUyQkg3VFNKaHIlMkJZT3Iyc09rV21uaEhTSzZZaVJvbEZGNUElMkJuNm5nSmlmOEFXeVAyTUw2ZGJpUkklMkZycXNBSTNTUkFzTVklMkJ4SEtybEdoZmwlMkZlZkIlMkI4JTJGM1hnWFhZcHBKRzFtMnVua2JqNk9wMnBVU0tWQXFrc1NOc2lmNUwlMkZGSDl2SG9VbHJ5dGR0RENnZG1WN2Q1STJib1UlMkJJTkdUJTJGTGhwcjNuTFRLSjlVVDE5VEI0ek5IdENlM0pqM2IyWElzc3AxWThiVWZGT1FzaXg3U0NTbEFYcFRtajRhdjVPbnNkTSUyQnV6QjNabTlPV2FOR0QyJTJGTWdSVG9sUDNzWFA0WnY5MmZ5WWk2b0lURFZyRzI4eDZOQmVCdnFXb1dTMWl2U2VJaWtVOGpGSSUyQnpMQTYlMkZHbiUyQiUyQjN5RmFxMXBjWGl4MjhaVUdpM1Uyd2FkeCUyRnV6aUFFV3Y4QXElMkZIOXZETFY3VHpYZVdycWJhV080VmhIZU5IdEZkQ1A3RWhYNUQ0djklMkJmYndwQzNsaUdndklvVmRTcXQ2cExQR3IwcFRqJTJCejhYdzRDVWtFR2lsN1J3UnU5Wnp3alB4OFVaaUtlUFNoeWIlMkJSZk1kaEhNMmtMRVYlMkJzRGxETFFGbmNVQ3hjUlg3V0VGMURDczYzekNzNnI2YzFOa2VuY3I3cmdYU3BGc2I1ekNGb3JlcEM5UGlVRWZacjREQURSVkQlMkJkZFVrUG1QVTRsVWdWTnRORzRxRHcyQm9mMmtQMkd5SzFMRUNwWSUyQkFxVG5VRmhzdGExQ2UlMkIxRzNpbnVaQ3J5U3NncXdxRk5Sa3d1OVI4bSUyQldJd3NjRUhyaGFyREJHalNINXRUNGY5a2NJb29wNGRhNlZxdDJHVzB0YmlRSGJpa2JrSDU3VXdITkZMYlN2YjNDTkZMRXhTU0p4eEtzdXpLd1BRak91MyUyRm1xJTJCMW1GbzFDMk5tRk1qaFRRTEd1JTJGS1J0dW1RZlUlMkZNV2gzdW9UWHgwcjFwSmVQS1NXU25KbFZVNWxRTnVmSG5oUXhtT1l4a2xTUGlGQ0R2VVpRS1VJcFVuN0pyMCUyQjdEOGVZckJQN25SYlVmNjFXJTJGaG1QbXRrQkZ2cHRuRWV6Q01rajc4Q3BSWk9ZNXclMkZCbVdoQkNqc2V1U3l5bjBwSXBJcjJDU3IyZ3RiWVRRdDZheWx1ZlBwOFBCV2JDWlBOdXJST3NrWWdWa1lPdjd0U0FWTlJ0ZzI3ODAlMkJZUE5kNUNkV3VSSkhFV2tXT05GalJhaWglMkJGQVBsanNxTGVSclZoJTJCalF0M0dCUm9YQkJLQWZGd2FnJTJCTEoxNUIxN3lmZWFsRTJ0YVRIY1hNRzYzRXElMkZ2YllMJTJGdnlIJTJCNmVGSyUyRjNpSnlUOXZBWGtQeWdQTkV1b3h4M0tRM1ZyQUh0WVdQOEFlT3hwdiUyRnhXcWlqTXYyV1pNTGRTOHZCTHg0cGc5anFWcVRGSkl2d3VwNmZ2UDVsUCUyRkRMaWxsdjVpJTJCU3RQdEw4NjdwRUVjZW02aHhraXZMV2pJayUyRmV2SGIwNWZ0WkY5T2tkNUV0NW1heXZvV0V0cmRSbW5DVWZZbWhZZnpmdHAlMkIzazMlMkZBQzY4ekxmeCUyRndDRmRXdDFlRWxyYlVvVyUyQndHSXJEUEd2N0N5VSUyQkxqJTJCMThlSWVhdktNM2xxN1dxZldOT2tZaXp1WEZlTmVzRTlQOEFpWDdXTmJxQ25jZm0yZnpSb1VtZzZ6RXFhN1pQRFBQQ3Y5M2VRUk1DMDBBJTJGYSUyRlphV0xDSHpmOEFsN29PcmE1YjZoNUt1QkhlM3JqNjFZd3IlMkI1WGx1MCUyRkwlMkZkRGZ6eCUyRjhRd3B1cDRWV0JyT1JoZlc3aVMwWWtySmJrZFJMS3Yyb20lMkZZNGZienN2a1hVN2ZXTkhqdTNqaGoxWkFJOVVFS2hTSnZFbWclMkJGMSUyQlBFaFhnUG0lMkI5OHklMkJXcmlUeXhyTTBpQ01CbzVWVlc5YURvSklabSUyQkxpZjVmdFJ0aE41WDh6eFdYbSUyRlRaOWRIcTZISCUyRm96MnoxZU5MZDFLcTRUdndZJTJCbzJlbCUyRlBYa2pUUFBHa05ZM243cTdocTlqZXFQamlrcCUyRndBTkUlMkY4QXV4TThtYXpvJTJCcSUyQlY5VXVOSTFLTDA3eTJQRmxiZFdVJTJGWmxqUDdVVGZzdGloOUp5NmQlMkJWVjNmMmRqYTNsdEhlNmlwZXpTMm1yekFGZmglMkIyaU1mMkslMkZFMlhjZms1b2pvVFozMTFiejFKRWpGWEclMkZpdEUlMkY0bG5saDNVU0xLQ1k3bFNHTFE3VUkzREE5bXowTCUyQlZQNXdMcXhpOHMlMkJhWlJIcUlwSFpYMGhBRTlObGpsUGFmJTJGSyUyRjNaJTJGcllxcWFsJTJCUyUyQm9YYjJFWXZyYVdHM2tjeXZMRzNJUnV3WSUyQmtnUEZXMlBmSmpaJTJCUnJ1d3VGYTIxaVJZRkFDS0ZLc0tmNnIlMkJtZiUyQlJlVFVEeHk2WXFvMjBMUVFwRThyenNvM2xrcHliNThRQmkyYk5pcnMyYk5pcnMyYk5pciUyRkFQJTJGVDclMkZtelpzVmRtelpzVmRsRUE5Y3ZOaXJ6Yjh6dklmNmJoT3U2UkVQMHRiTCUyQiUyQmpVYjNFUSUyRlolMkY0eXAlMkJ4JTJGUDlqT0hhZ3ZxV3NNdyUyQjFFVEd3UFdoMzN6MXpuSSUyRnpMOGhxRXV0ZjBxUDRKUnp2cmRSOWx3UiUyRnBDRHclMkYzNyUyRndlUm5HeFR0TkJyZUV4dzVEc0Q2U2VuOUY0Z3BwaHRvMnByWVNTUTNLZXRwMTFSYnlBaXUzUVNvUDUwJTJGNFpjSzVZekc1UTdlR1BFVXlScE15a1JTRWhIN01WMkl6R0FrRFk1aDNPU0VNa0RqeUN4TDhiZWFaYWdseG9PcHhUVzdxTFNXa21uM2NYMmVKMzRueCUyRndBcGNsTXNlbiUyQmNkSWVDNFFDWlFQWGpIMmthbnd5eGUyUmpUNyUyQjJlMGJSdFZITFQ1U1dobCUyRmF0NU96ciUyRnhXeCUyQjJ1Sld0eGU2SHFTdzh3dHhEdkJMJTJCeExHZWdQOHlPTXljZVFFYmN1bzdubk5WcFo0Sm1NdHdkNHklMkZuRDliRU5VMHk4MEMlMkJhenVSeVRySElQc3VuWmglMkZUS2lsNGtTSWFqJTJCR2RaMUhUdE04NDZTWFVlbkt2MmdOM2dscDElMkZ5a1AlMkZENXlPOXM3dlJiMlN4dlU0c2gzSTZNT3pwN05reU9vNU9LbVN1R1VNdlE5TU1kRjFtNDBTJTJGanZvQUhVZkRQQTMyWkl6OXBHSCUyRkRJZjJHd2p0NVFoMyUyQnczJTJCZGNGbnJpcjBHVzVLeXg2aGF2Nmx0ZnFESGRkVzVEYmkxZG81ViUyQnc2JTJGelpMUExiUTZuUDhBV3JwQWJ5M29KR0kya1hxa3JmeXlxUjlyT1U2SHJLV0hxMk44R2wweTZwNjZMdTBialpaNHYlMkJMRiUyRmFYJTJGQUhZbWRhOHAyaTJ0azhzanJJN21pVElUeGtqJTJCMUhKUTdodUolMkJMSlIzSzNzbnVxM2ZvMnJ1b3FRQzNpZHZzZ0QlMkZXcG5NSiUyRkolMkZtZTRNc3EyakM5dHVVYVhjWEVSM2RySjFqYXBINzJOVyUyQkZtWCUyRml0JTJGd0I1blRkSWtzeXpXMGMlMkZyeXhWWmd6Qm1Dc2E0ZUNaQUtIRElXZ2JQRHZLOWpxdWg2eGFXJTJCdFc4MXJETDZsb3pUS2FGSlFWQUIlMkJLdGZod3ZzNDdteXZMJTJCTlFmVHMya0Q5VUs4Z1FLbHYyWHA4U3RuUiUyRnpRMUdXMDh1JTJCbFpPMGQzZFR4eFFzaEtzS0htN2hoOWppcSUyRmF6aTZNeEVpSTVZT2EzTnl4Sk1qVnJ1eCUyQklybGN0bVEzVFM5MUUzakNHMmpISTA5UjFxT2RPZ0ZmOTFyJTJGdzJDTEtGWXh5SkJJRlpKT3dIZ01DMk5yeUczd1JucTU2dCUyRlpodXNaaWlodTdjTVd0NWlyMnpweWlrVUFVOVQlMkJZY3VXUjVwZFBxaWFjUXJXcVhDelIxVVNWQkFiJTJGQUhZcCUyRm53dXRkVmh0ZFRhJTJGZ1dWQk9BazhCY05HOUJUcXlrNGM2cmMyZHhlMkYzYzJrY0tKR0k3cXg0a1VqcHlSMEI2VnIlMkZOaEJxYzloYVN4cEhFUmFYUmFXSXQlMkZ1dmNvVFJhNzVQbHlRbiUyRkFKWnZZSSUyRk1VUzJTTkVMaVZURXlnVWpuVlc5T2xmdEk4aFZXVnNuU1hWeGZUR1M2bGFTVmlDUzJ3b2Rqc05zNSUyRm84cnJMNjlxd2Q2cElycUF3JTJGZCUyRllQdzlPbVN1YTUxR1ZKNzYyc3dRWExDRDFBaXJ5TlFyTWZpMiUyRnlWd3hLa0lqVzclMkJlempSN1BUcHIlMkJVYnY2V3lVSDh6ZmE2ZHVPRVBualQ3U0VXbXJ4eGtTWGF0YXpvd0E1S1klMkJTY2dEOXFJcnh3UTNtUFg3RWV0cUZoQXRxUHRlZ3p5U0Fld0E0NUYlMkZNSG0xZGNSSUdqTWR2QyUyRnFSSUtjdVZDdkoyJTJCUiUyQnpnbExZMnloam5MYUVTZmNFcXVidXJXOE01SHB6S3ZJcjFGYURsNzljUmJScjZTOCUyQnIyNDVHQ29hYyUyRkNqS3A2NyUyRndBd3clMkY4QUwzbGkwMXFCTGdQSk84Zjd0NHdQN3MlMkZzRTlmaE9IZXIlMkJWdGZnZyUyQnZhYmNKZTFGSnJQandaVlVVJTJGZHklMkZSOWxseUlGaXh1RXpqS0VqQ1lvam1HTTZqYWFqWjI4UmpCaUVpc0p6VUxUaTNpU0tSMHdib0hrVFhkV3QyMU9MVDVydTJBNVJsTjFrOFNyc1ZXVCUyRkFHRDVlbmExYVhBJTJCbzZwRCUyQjlKMldjZW5MJTJGbEJKUjhEJTJGd0NyblNmeTg4MFclMkZseXpsMG03dUpadEpSJTJCVm1YU3NsdHlOWGhZRDdjUDdTY2ZpVCUyQlhEWGN4b3NSMUQ4cnZQMnFXVWRsWmFkSFpXN2tQY1BjWEVZZVNuMkVLUjglMkJLSjlyaCUyRk5rUnUlMkZ3QXJ0YzAyNmV5MUZvb0pvOXlLczRJUDdTdFFjbHowYnJmNWplWHRLaFI3ZVlYMHNpZW9pUUhZTDI5UnYyQ2Y1VDhXUTdXJTJGTWolMkJack9LZDB0MUN0JTJCNmVEazd4TWFqMDVDYU54YiUyRlZ3RWdDeTI0OVBseUVDTWVmSjQyMzVmWFE2M1VmJTJGQXQlMkZYQzdWdktzbWtmVjdpYWIxZFBsSVNXN2pUZUZ6JTJCeEpIV29QZzM3ZWRRNWt5TkRJdnB5eCUyRmJRJTJCJTJGUWc5MU9CN2hGQ3VySXNzVXE4Sm9IRlVkRCUyQnl3JTJGVTJJSUlzTU1tS2VPWmhraVl5SE1GNWclMkJoQ05pcGN5RmYzbndEN2NIJTJCJTJGb1QlMkIxeCUyRndCMkolMkJ6aU55VzAxJTJCTnNlVnRNb01jNEc3Vkg4MlRDYnl4ZldNeHRVTWxuRElQck9saTU1SkloJTJGd0NLMlplTXF0aFlZT01WeEJOYiUyRnUySEslMkZzbDZKVTdYbHAlMkIxeERmYlQlMkZkZUZnbVBrblc3cTBlQyUyRnNaJTJCT29XVGNrNWZ0Um5yRzlQdElmc3RuYXRZMGl3JTJGTWZRNCUyRk1XaDhiZlhiZFNqeG5ibXlENDdTNCUyRjVreTU1Z1djYVpxRFBwMXlabzQyUHB6OFN2SWVQSE9uJTJCVGZPMnFhWE1MJTJGU0hpUHFjUmYyTTlmVFlmNzhYajhYSWZzNHFvV3NHc1E2NFRwcCUyQm8zMXpHYks5V1lmRkU4WjlUY2VJNEZQOWxucE5iV0RWZEdpdDlSUmJpTzRnVDFnM1FrcUNXOWpYNGx6a3NFMXo1MzgyRFU3V3pFS29xcTVVVkFvT0llVjl1UiUyQkwlMkZnYzdSREdzTU1jUyUyRlpqVUlQa29wajBVdkh0USUyRktuVjlIMUY5WDh2WENhanlZdDlUdVFvWUxTaWpreDlPVGolMkZsY01TOHElMkJhTG55OTVndW9OWXMycyUyRnJmRVhzTEx4S3lKWGpMSDRweE9kcHdsMXp5MXAlMkJ2Q09TY3REY3cxOUs1aW9IQU94VTFIeEolMkZrNG90Tm9aWXJpSkpvV0R4U0tHUmgwSUkySXlGJTJGbU4lMkJYbGw1NTB6NE9NR3Myb0pzTHluZnI2TXY4MEwlMkZ3RENmYXlVNlJZTnBsaERZTk1aeEFDcXlFQlNWcVNvSUg4dURqMHhWOE5hcHBWN3BkN05wJTJCb1FOYlg5cXhTYUp1b1lmcnI5cFd3dVNOZzROU0hCcUtiRUh4cm5yTDgwUHkyZzg2V1gxJTJCd0N3NjlhSlMza095em9OJTJGcTh4JTJGNU5QJTJCdzJlWG0wcThndVpvYmxHZ2xpY3BOQTRwSXJvYU1qZnkwT0t2cGY4bHZNdXNhNW9sMVphek9McVhTM2ppaXVUdkl5T3ZKUklmMnlsS2M4NmVNOHklMkZrMzV1c2ZLMnIzRnRmeU10anFvUlpaM3FSRk5HVDZiUDRJUTdJJTJGJTJCeHp0RjElMkJhSGtlMDFTRFIzMWFON21aJTJGVExSVmVLTnUzcVRENEY1ZE1WWmxteWxJWlF3TlFkd1J1TXZGWFpzMmJGWFpzMmJGWCUyRiUyRlU3JTJGbXpac1ZkbXpac1ZkbXpac1ZkalhWWFZsWWNsSUlJUFFnNDdHU09zYU5JNW9xZ3N4OWgxeFY0UiUyQlp2a0E2VksycjZWSCUyRnVQbGFySXY4QXVseiUyQnolMkZ4amIlMkZkZiUyRkE1RW9KTEslMkZ3QkZoMHlPSlUxQXlySDZvQUJib3FKSXRlYnR5SmtqWlA4QUtWczczcW5tJTJGd0FzeVc4OWxlczd4end0U014TVJLRyUyQkhnaHB4NTV3JTJGd0F5JTJCV3BiSUhXTk5qZUdLRmtEamxWdzUlMkJJUEd3cDhTJTJGdGNmc1pHVWF1UUh2ZHZwTldKeGpoeXlNWkElMkJpWFElMkJVbU1YTnRjV1Z6SmFYU0dPZUppc2lIc1J0bGwxdUxmNnJjTWVLYjIwdlZvVyUyRjZwUCUyQjB2N0dIc0xyNXB0dnE3bU9QVTRFbG1FaEhIMWVDSUk0a3AlMkJ6NmFPNyUyRnRlcGhCTkJQYnl0RGNSdEZOR2FQRzRvUjdFWlZLSkhyaHolMkI5MkpqRFBBNGN3M0hNZFIlMkZTaWlORzFtNzAyOEVpRUM0aiUyQkdXTW40SlU3cWY4QWpWc2xtdmFCcDNuTFNGdmJDaVRLQ1kyUDJvcFAyNHBLZnMlMkY5ZDVCVEZGSXlzNVpHWDlwS2NoOUI2NUp2S21yU2FWZGV2eGVhMW0lMkJDY0VGUXlqOXRSJTJGdnhNdHhaQklWOHgzT2kxZWtucDVVZDRuNlpkJTJGN1htc2tWeHAxMUpZM3NaaWtqYml5SHNmOEFtayUyRnM0Y2FQYXk2cGVRYWRFNnJKTXdWWGJvRjZrJTJCJTJGRURPbiUyQmRQSWtmbVN5R3A2UUExMnFjNEpGcFNWUHRjRzklMkZ3RGpmSTM1YThxemFGTmEzdXJLclhMbXNjZkkxZ1A3TlN2Mm4lMkZteXd4b3VJTjFEV1BLRFc5NURZNkswdDVJZmduYVVLZ0QwNWNsNDlJNkg3VFowYnluQkFtbWpTVnZoY3oycUVNNjAlMkJIblZSdzlvbSUyQkglMkZBRnNJdGZobmRnMXElMkZwTmR4bUl1RFFWVSUyRkVDZjhvWVJlU0xrNlI1bldCdzFibVQ2c1NEOEZHQmI0aCUyRk55WER5UHZic1dJVEU5JTJGVkdKa0IzMGpQS1YxUHBPc3JCZHVSTEZjUGIzSlk5VmRpdFclMkYyWHhaMCUyQjkxTzJzcElvSldMM0U1NHdXMFk1U09mOVVkRiUyRm1kdmh6bSUyRm0ydyUyQm9lYXBKbEJWZFJqV2RDRHNaRTJjZmV1SGR2ZlFXMEJuZ1pwdFZ2RUgxdSUyRmxHNmdqJTJCNWhIN0tyMHhIYzBwRCUyQllnOHdhMU5ERlpXalNXdHNyQ1JvaUdKY240NmIxWWRGMnlGV2VtenhzVzFDTjRFaiUyRlpsVW9mdWJPczJXcHhwTkdsMm9NUDJlU2JFZTV5VFhHa2FkcUZwSmFUMjZUMjg2MFlFVkJCNkVIeDhNZUN6ZHB1bmxFdHBIWVEzOEdxUnJGTmFQQThFZ0pjRmElMkZHcWhhZGFvMlhCR2xtYmUydUN6ZXZiR2VSbzJQY05KeCUyRjJTJTJGRGh0NTFzM3NMcFlMb0g2bmNJcTIxd1JVMVVjZUx0OUh4ZjhIaGo1ZjhwWGVyV2MlMkJxMlZySHFFMW9xUVdkdk5Md1VvaWptSkIlMkZPOVc0JTJGczhjalZIM0xlekV2TTJtWFdxeWFiTm96QjdTUzFXSjVTd0JySFduTHY4QTNaVWJmeTRvbmxhem10cktDJTJCSmxOb0hGRk5GYm1RYUh2dFRKOXJQbHpVN0dPTzZ2clJiZU5pb1FRTXJSeG1uOTM4SVhqNFlFMGZRTG5YQmRRMjA2MmwxQ1AzU1NyeTlYYXY3b2cwJTJGNExEc2lrcHM3QzNzMVdLMmlXSkIlMkJ5Z3BnNWxOT1gwWUFWcjdUTDB4WHN4Y3hzVmxoa3R3cEZQdExWV3diZiUyQmFuMGU4dHA3TFRZcm15SUxscHlUNmhvUncyJTJGdSUyRlRiZGx3M3Rhb0s0djdhMWRZMmRXNUdqUTFxVkhqJTJGd0EyNFZhaDVhMDNWbE54WkVRVHR2eVg3TEglMkZBQ2x5Zmp5Zm8zbnJUcmJWOVBSTkkxaTZnTThxUkVOQzhnYjA1T1VJJTJCTlI2blIxJTJGNEhJUnFPajY1NVZ1JTJGUTFTQm9nVCUyQjdtVTFpa0E3cEowJTJGd0JpM3haR3dkaXpoT2VPWEZDUkJTUFNaTlg4bWFtbDFNaE5zZmdsZFBpamREMUglMkJTMzdTOHM2WkxyRUVadDJ1RWUxVzZWV3RMc2clMkJsS0dISUdPUmVTJTJGNndPUjlkV3RScDExZFNRJTJGV0h0NFdrJTJCcjkzSUd5VSUyRnlzayUyRmslMkZXNUlOQVRUOVowZUFXY3pHVDZnciUyQm9JbGZjZ0J4c2YydlQlMkZBR01ZeE1TZUUyRDA3bTdQcUJtakV6aldTTzNFT1VvJTJCWTcyTSUyQllmTGNkM0ZKZVFSeHlvN0V6UVU3OTJHUTYwYlU5SGtmOUhUQXd0czFqZFZlTmwlMkZ5WCUyQjJuJTJGRWM3Wkw1WHN0VlNTNThwNmtZWnFWYlRyeXNpZjZ0V1ByUnIlMkZzcFZ6bXV2YURxMmp6c3VwMkp0QTVOQ2ZqdG1OZjkxVGpiJTJGWXljY0o4dG1nSlBxVjRKSkxKcEkzc1lMcUoydVklMkZ0QmdQOTFxNmpwSXk4Vncwc05Objh0RzExbThLV05ucVRyQXVtczVZaFR2eWN0JTJCMFI4ZnclMkZZYiUyRld3TGRScGZhVkVra1BPNTByMUhoakpBTFJTZzlIcFg5MiUyRndDemdTVzRUVjlIZ2E1dXBwZFZzcEZ0N2EwRk9NTnNoSEptM1Z1Wlk4ZlYlMkIwemZCbFpIcTNCTmlnT25tNTJMSWZESENZd01DSm1WWEk4SXFNWW56STRmODVsJTJCc1JRYzdlU0tWUlBIS3RzNHJ1VWtQQWN2OVIlMkZpd2JaYVkxcDVndHJIVW9pcGpualdaT280bGhSdjhwR3djUEw5cGNST1pvMlM2WmthWGd5cW9hRlZrNGhuJTJCSjl1UHFOeHdWcm1zV3Vwdll6YWxGOVMxSzFsVGk2R3Njc1lZTXBWJTJGRldVTnglMkZsd1lvU2pkOGp5Yk8wc3VMTWNVc2RtVVFST3hScm5INzVQUXRkOHZhVDVpdEJaYXBBSkkwWVBFNm5qSkd3JTJGYWpjZlp6ZyUyRndDWldoM0doVyUyRnIyd0gxdlNaMERYbFBpYTFtJTJGdVp1SzdNViUyRnVMaiUyQmJQUTFwZFIzbHRIY3hHcXlDdE90RDNIMEhJRiUyQlpGbmIzazhFTXFoeFBCSkhPaDZNbklVRGZTZHNzRHEzemZxV21SNmxGSnFlblJDTzZpSEslMkZzazNGRDBuZyUyRm1qZkMzU05WdWRKdVV2cktRSmRRT3J4YzFEb2FmYVNSR3FySyUyRlJseVUzMmkzWGxuVTRSSE9ZckYySXNyMWh5OUptJTJGNDk1JTJGOEFpbVQlMkZBQ3NLdGUwWnAlMkZXMUt4ZzlLYUwlMkZBSTZOaXByNmJIJTJGZDBYODhFbjJsZkZYMCUyRndEbHo1eDBmemJwQWxzSVlyTyUyQmdBRiUyRll4QlZDT1IlMkZlSUJUbEUlMkY3TGY3SEpwbmlMeXo1bTFUeXJxVnRxMmx5OFpZenV2VldYOXFPUWZ0STM3V2V1ZkpubkhUZk9la0pxVml3U1phTGQycE5YaGs3cWY4QUpQN0QlMkZ0WUZaSm16WnNWZG16WnNWYU9jdCUyRk5qOHN4NW50Sk5iME5mVDF1QmF5eHJ0OWFqVWZZJTJGNHpxUDd0djJ2c1oxUEtPS3ZoejBDc2J3TXpxU1NIUFJndzIlMkJMMyUyRm13cmxoZUIlMkJEOWV4SFFqeEdlcWZQSDVPYWQ1bHVwZFcwaWNhYnFVM3hUcVY1UVROJTJGT3lyOFNPZjJuWCUyRmdNNTlIJTJCUWZtdTVuV0M5bnM0cmJsOFU2T3pNQiUyRmtwd0dLciUyRnlrJTJGT0J0T01QbG56VE1Xc3lSSFk2ZzVxWXE5STVqM2klMkZsZjhBM1hub3hXVjFWa0laV0FLc053UWVoR2M2OHNma3Y1UTh2QlpyaUU2cmRyUSUyQnBkQWVtQ082d2o0ZiUyQkQ1NTBWVkNxRlVVVlJRQWJBQVlxM216WnNWZG16WnNWZiUyRlY3JTJGbXpac1ZkbXpac1ZkbXpac1ZkaU56TkRid1NUWExCSVVVbVJqMEE5OFd3TmZQYUpiU20lMkJLaTJwU1V2OW1oMnBpckFQT041cE1XaVN0b2lQSmZNMWJWSTR5eTFHOGpEa0Nud3JoRHJENmpGYiUyQldiQzdXdDM2RWNsJTJCQ1AlMkJLaVpIYnR5SmFqZjVXRHZQOXhaUmFOQ2ZLdHhLYjR6ajA0SU9SNDAzSktrZkFPZkglMkZXd3M4NGFqTmQzRUVrbEZ1U09VdEslMkZEUlZYaUtkdVFPRkllZWF0cGswRjVQZWFVaiUyQmxBVExJWXdTWWhYZCUyRmglMkJ5bGV1TFA5VTEyeWttaVdPMnZyV09XNG4zUHhnY0FGWG1hdHkzY2Y3NyUyQng5ak8xJTJGbHZvMEVlalQzODhTdkpxRE1qRnhYbEV2dzhUWDlsczVoJTJCWSUyRmtTVHluZSUyRnBIVFZZNkxkc1ZVaiUyRmREdDFoZiUyRml0djkxdCUyRnNNZ1JXNGR4bzlYNHZEaXlTcWNmb24lMkZPJTJGb3lZSnNRR0hmSkw1RnNyWFVkWmswbTZ1VGJSM1VUdkhRQWd6UmprT05TT0RsYTVHZ2NYMCUyRlVKTkwxUzB2NDFEUEZJTm04RyUyQkUlMkZyeW0lMkJITUQwazUydHhlTHBwanFQVVBmRjZsNVg4eFdsbTk5NWV2WmxndUxTZGtqUjlnVFdqclhvdlA0WFRFUE02d3d6S1NLQ1Q0dHVvSU8lMkIzdmtlODB4WFUydFcxM1pRJTJCbzE1YnE4bnBKOFVsRUxWcCUyQjNzTUJXT3NYT3RXeTJpRXlYTnVDeUl3NU15ZjhWc2FzZUZQN3R2aXpMNHRxJTJCVHpOVWZ2VCUyQk9VNm5wa3k5WnJjaVZBTzVYdyUyQmE4c2lzMDFycCUyRm1DMDFPNVlyU1dKNGtYY3lGaUI5bnNLJTJGdDVmbGp6TFh6TWxnMGJSUXVqUUVTYlZsRGNsNUllbkw0a3llZWJQSXA4eTZqNWUxRFNFalgwWFdPNFFzcUtZayUyRmZSZ1YlMkZiNWd4OGNITWU1bEdVb200bWp1UG56U1clMkYxT2ZWTDZSN3NKVzJrZUtGVUd5Z0doSUozUEttTlZ5JTJGVEFrMXBkV2M5ekJkcnd1RWxjVEllekElMkZFTWolMkZtalhidlF0YVczdEVCZ0NKTTZQdUNIRlFFeHRpelNLSTFESEp2NVZ1eEtyV01wJTJCd0M4SlBoJTJCMHYwWkNOTHZyZlVyR0c5dGpXT1ZRZmtmMmxQJTJCcWNQZEhtZTN2SVpWMjRzS24yT3glMkZESkJTeXp6QnBscnFXblNRU3hMSTBQNzZFc29JRHFPMyUyQnNNZ21sYXhjZVVkUlhVN1pTOWpKUmI2MlhvVVA3UUg4MGYyayUyRjRIT2dYZHlWWWdIcDElMkJXUVc4ZzRUelF5b1FwSklWaDFWdWhHSkNoN0ZHOWhyZW1wS2hXNHNyeU1NcDZobFlWJTJCJTJGT1dhJTJGYlhmayUyRlUwWkpPRUwxYXl1MiUyQnkxUDkxdWR2M2lmOE91Q1BKJTJGbWhQTDF4YWFKZXR4MHk0ckZGTXgyaW1KSlN2aEhMWGolMkZyNE4lMkZPOUclMkZ3QUoyOG8lMkZZdlk2OSUyQnFPTWdkbFl6cVBtV3k4eHI2MTVhb3VveEFBM2RrNGRKQjAlMkZmUkdqb2ZCbDU0VSUyQm5DeVNSTlNhMWwlMkIydlFxMzg2MSUyQnk2NUdQS2N6dHF4alk3TkV3NGpZYlUzMnpvTnBwRjFxZnJ3MkpYNnlpZXJIRXhvSml2V0lmNWZIN0RZWW5aYVkzcE45TjVOMW45SkpFYnVJd3lSb2lzWTFrRGJwVnUzRiUyRmlkTTd4cGwzWSUyQmFkRnQ3bTV0bGUzdklVa2FDWUJ4OFFvd29mNVdCJTJCUE9ORzBqdkxZMjhxbFJVZ3F3b3lPT3UzN0xwaVhsM1hianlacWs3WGdsbXRaSWZURUtOUUdoNVJFRnZzeHI4WExqZ0lyZFdRZWR2eTdHaVFQcmZsNFNOYXhWZTVzMXE3UnAza2klMkZhYU5mMjAlMkIxa1QwN1dHQ3F3Y01qZEpGTlFjOUMyTjlCcU52SGMyOVdpbGpTVkdJMkt5Q29wa0Z2JTJGd0FvdEh1OWNPcTJkMUpZVzB4NTNkaEFvNE81M0pRdDhNWWY5b2NNRnlCMjNad0dPUUlrZUNRR3hxd2ZJc2F0TlFTUXJJcm1PVWJySWhvUWZFRWI1TExIelBQNlgxVFY0UnFGbzRvekZWTDAlMkZ3QXBEOEVtRm1zJTJGbHhlV0JOeG9FcHVJaHViU1FqMUIlMkZxUHNId28wJTJCNGx0VW1XN1JvNW9qUm8zQlZoVDJPV0NpMXQlMkJiUEoxcEZDZk1YbEpndGwlMkZ4OTJWQ3lSSHV3amI0a1glMkJkZjJjaU9sRzJodWhjWDJuOEpJMkJFOEZISHpNVGIlMkY4VFZjNkZwV3V0YXlTUGJsSkVtSEdlQ1FWVndQMVpHdGNzSWJlNU4zcDBVaTJNbFdhTTdtQiUyRndCcFE0JTJCMUYlMkZMa1RHdWxobkRJWW5ZcHJmNnRZYXhheHhDRGx4SWFHN2lrbzhaN2tHdFdyJTJCM3l3eHNkR2wxV3dpdHpHYmtna1J6dWdER25SbTM0UjAlMkZaYklKQlp3eHY5WWhBVng4UXAwSlBpQm5hZkpsMWVYZWtMTmR5cktPWEdOZ0FEUUQ0ZzNHZyUyQkU3WThXeVRMZmlITkpiYlF2TkhsZSUyRmU1MGVRWCUyQm5YQUQzVmc1M0VvV25LSW1oUW1uN1B3djhBeVlSWDl4cWwxZG1YV09TM1hIaXFNbnAwUUVrS3ElMkJBNWZhenJRd0hxT21XbXFRR0M3ajVEOWx4c3lueFZzRnNMZU8zOWhiMzl0SmJYTVlsaGxIR1NOdWhCJTJGVWZmT1pYeTMlMkZsN1VWMDVuNU1ncnBOMUxUakxDVDhWbmNFaiUyRllmNU9kdDFuUWJ6UjNKY2VyYXNmZ25BMiUyQlQlMkZBTXJZQiUyRjVWM1klMkJkdEF2aGVmdWJybiUyRnVOdXgxamtRVVlrRDdVYm5pciUyRjZ1RXE4RDFyVEZrOVhVZE5nYUhpeCUyQnUyWFZvSFBjRCUyRmZiZnN0blFmeUFlYiUyRkZrdEMlMkZwdGFTRjFWZ0ZOR1RpWEZmaUElMkJMaiUyRmxaQzlXdU5kOHA2a05NMWUwNGFuWXNZMm1ZN1RXJTJGWkcycEtqZnNTNEswMDNta0NIemw1V21ETGF6ZXJjV29COVdDdlgxRkIlMkZlUXQ5bHY4bklvZllOUmw1RlBJM25qVGZPMmxpN3RhUlhrUVVYbHAzUmowWmY1b24lMkZZYkpYaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkYlMkZXNyUyRm16WnNWZG16WnNWZG16WnNWZGdIVlk5UG10SGkxSmxXM2NnRXVRQlVicjF3ZGdQVWROdHRUdHpiM0lKV29aU09vWWR4aXJ6SHp0UCUyQmkyMGFUeXZkbTZ1RGNKU0NNSklQVFZoUldLajdCYmJpMkI5YjhrZVpyblYzRnZiZXJic1FzVndIVUtGSjZ0VThoU3ZoayUyQiUyRndBUEd5MUd3dkxPa3FLNWp1MGNJUDNZUSUyQm5JdEFQaWlmOEE0bmtrcGhLUWFRT2s2ZW1sNmJhNmZHUVZ0NHdoUGlmMmolMkZ3V08xTFRiUFZyR2ZUciUyQklUV3R5aFNXTWpxRCUyRkVmczRNekVWd0lzZzJOaSUyQlZQT0hsbTU4cDY1TnBVMVhoUDcyem5QJTJCN0lXUHduJTJGWFg3RW4lMkJWZ1cyOHM2M2Yya1dyMjltNzZZczZ4eVhRcHhVZ2dOVWZhNGl2MnVPZW45Yzh0Nko1aXQwdDlhczB1bzR6eWpMVkRLZjhsMW95NUVMN1RyaUdXMzBMeXRwN1E2RGJzMGQ3eEk0T3olMkZGV1BseWNtTnZpYiUyQmZLeml1ZkVUczdXWGFoT244UGg5ZFZJbjZhNyUyRmV3RHpQZDN1a05wbHpZdHh0RWhXMmFkVkJLelJrdFRrYWxPZGYlMkJCdzYwYnlkWiUyQmFOUiUyRndBUmFQcTBWak9JdzUwOWJjTElrdyUyQjE2eWglMkZqUm0lMkYzYW4yOGRlNmRMWVRYR2s2eER6dHB4OGFIb3luN0xxZmI5bkkzWVglMkJyZVE5VGhTM3BjV2hjdmF6TUJXU0UlMkZiZ2FRJTJGRjhQOEFKbHJyRHZ1bnZtcnlCOWJ1RnZ6QXRucmtRRDg0eiUyQjZtS0hrR1J0dSUyRjgySFduTyUyQm9hZExwVTVhQzRaZVVMOUdpbCUyQjBqS1IwYU9ZWk9MTzgwanpobzBkM1p2NmtNbjJXRlBVaGxHeFZoJTJCeTZIN1dRV2FPODByVjFodndCTWpjZlVBb3NrVGJMSVAlMkJOc0lyNW9TdTEwdGZPdDdJa3Q0dGg1aWpRQzZoa1NzZHo2ZndmV0lpQ0NyN1VtVGolMkZsNUpHJTJGS1RTZFRqZyUyRnhESUxoNFVDVWdIRDdQOEF4YWZqNDVHUE1ka1l0Umt2YldmNmpld0VYTmhjcjlwcFQ5cEVWYXRKV254SnglMkJ6blJQSWZteiUyRkZ1amZXNVklMkZTdkxaJTJGcTk0Z0JDbVFDdk5RZmlWWCUyQjF4YjdPQTJObGVhWCUyRmtyJTJGQTE5SmIyck8lMkJsWGJjN1V2dUZidXZMJTJCYiUyRmlXQzdNN0hPdWFycGRycTlqTFkzaThvNUJzZTZ0MmRmOEFLWE9QNmpiYWo1ZHZwTEs1VVNCZDBmY0IwN092OGNNVDNxa1A1bDZ0cmtXcDJrTmk4c1ZyNkNTaG95VkR5SDdSSkhYajhPUXBmTmZtQ04xJTJCc1hjc25CZUNyT2ZVQVVkRkhQNHVQMDUybnklMkZxMmc2dmVSNlQ1aGdYOTRBbG1zcCUyRmRzdyUyRjNXJTJGJTJCVTM3R1NIVWZ5cDhuNmhVcGF2WnNlOERrRCUyRmdINXAlMkJHQ1hOZVR3TSUyQmJ6ZVd4dHIlMkIzU1ZIRkdNWktNUDhvQnFyJTJGd0FOaDlxdjVncHIza1ZmTFY5emsxTzN1SWpGT3dyenQ0dzFHWmhVZXFuMlA4ckpENWklMkZKSnJLMmx2Tkt1ZnJTeCUyRkVZQ25DWGlPdENwS1B4JTJGMU01MDNscTd0cER4RE5VVVVHbFB3eUp0V1FmbGZwTVdzZWFGdExnc3NadFpuREoxVmh4Q24zNjUxZTM4cWFucCUyQnMyWlg5NWJyS0clMkJ0UjdVVmZpbzYlMkZzMTZZUyUyRmszcEdtV3h2TlIlMkJzcEpxZkVXN1duUjRrcnlMRlczUHFOJTJGTCUyRkxuVzhJMlVzVzh4JTJCVm83MW4xTFQwQ1hwM21qR3dscDMlMkY0eUQlMkZoc2dsOW95WFVheFgxdThMb0NZMmRTdFYlMkZhRyUyRmdjN0pURWJpenRycjB6Y1JySVltRHhsaFdqREpDWFFvZVZlVzlSdjhBeTFQS0wyNWt1Tk85RUxFbyUyQklqZ2FvS2slMkZBcUp5enF0cmRRWGtDWE5zM3FReXFHamNkQ0NLN1pGUE1QbDFZZzk1YUxXQTd6UWpmalhxdyUyRnljQjZKck56WTNCVzd1QWJBUktnVXFTUVZJQzhLZkNxOEs4dmh4cTl3bG50SzREdnRKMDdVZ0JmVzZUVTZGaHZUd3FOOEZSeVJ5b0hpWU9qQ29aVFVFSEg1RkRDOVklMkZMNnd1U1o5SWMyTTNYMHR6RWZvNnAlMkZzY0w5QiUyRkx5OFhWSk5TOHkzWXVvNDFhS3owJTJCRWtRckd3b1dsTzNOMnpvbVZURFpWNGw1bjhzM1BscTk0b1MlMkJuVGslMkZWWmoyNyUyQms1JTJGblglMkZoc01OSTg5M1dqMmh0MnRoTlZTRXA4UEdTbEJLJTJGJTJCU2YyODZucU9uV21xV2NsbGV4aVNHUWJnOVFlektmMldHY28xM3loZGFWTVVUOTVBMzl6TDBERHdQZyUyQklaYzNwUGx6VTVkU3RHYTRJYWVOZ0daYUFGV0hKV29NT2M1djVFMUI3V2Y2dGNBb0QlMkI1UExiM2pQMGZZem80eElZclpJbzVVYU9WUTZNS01yQ29JUHRpZHJaMjlsQXR0YW9JNFVyeFFkQlUxT0w1c0NzTzglMkZ3RDVlNlY1NzA4UlhOSU5RZ0IlMkJwM29GU3RmMkpBS2M0bSUyRjRYT0lXWDVSJTJGbVZvT3B1bW13SXlTQXhOTXNzWmhaRzJxM01xZW44MGVlb0tacVlxOGw4aCUyRmslMkZjZVc5UXQ5WjFEVTNXNGdQSkxTMEpDRUd2d1R5dFQxVTMlMkJ4NmFybldzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjElMkIlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhVelpzMkt1elpzMktvWFVqSUxHNDlFMGs0RUtldEs0M1RZa2hzb1FwNUVxR1p2RW52Z3AxREtWYmRXMkk5amhEZGFEcVQlMkZ1TExXSmJPelA4QXVsRVZuQVBWVmtiNGhpcUI4d1dVWG1TJTJCWFRZV1FpM2lrWnBodVVscU9LbW43UDhBTm5PdFJzaVBXMFRXVUtxRDlvZmFqWWZaa1ElMkIzJTJGRExuWXRIMFd5MFczYUMwQkpjOHBKSFBKMko4VGhWNXU4dEpyZG9acmRRTDZFSDB6MExqJTJCUSUyRjhhNGJUYnhYUVBNR3ElMkZsOXI3bVNzOWpjVU4zQ3YyWm8lMkIxeEQ0U3AlMkZ6Wm5hTllodGZObWdSYWhvN0pjTXdFMXBLQ0FTUDI0NiUyRnNuJTJCWmY1OGdzdWdXV3RhUEZwMXhSTDIxcUZrRkN5UDNVOTZZUiUyQlVmTXQ3JTJCWCUyQnF2cG1xRXRwVXNuR2VPdFFqRTBGeEQlMkZ3QXpVeE95JTJCNWtIbUdDT2ExczclMkJWZUVzRllwSEkzU3Z3eUJ2RGk2NDdSdEgxYnkzcUVYbVBUNVZsZ25XbW8yQzFBbWo2cklySDRSTW5WY0N6M0Z2SjV4MXBJcVgyaDMwY1Z5M291djJuUUVla2E5WFpXNVpKTlB1bHQ3ZGJacFRMYXNQOUhsWVVhbFA3dVZmMkpsSDJ2JTJCRXc4OTFaelkzdHZxTnRIZFd6ODRwQlVIb1FlNnNQMldYOXJDN3pKb0VPdTJYcDdMZFJWYTNsUFk5MGIlMkZBQ0h3aTBJYWhCcXRkT285aEtmOUxqWTBWZjhBTFUlMkY3OHliWkZENTkxalMzUjNnblJvNVltcDRNakE5c25Ia3I4d2VSaTBMekpJSTdwUUV0ZFFjMFNZZEZXUSUyRnN5JTJGNVg3ZUglMkZBSnc4dUxxTURYOXFnJTJCdFJMJTJCOFVmN3NRZjhiTG5KYnV5amNORktuTkQxVSUyRnc4RGg1cGZRbzNHYzQ4N2VWRmhNbXEyS2Z1SE5ibU5SJTJGZHNmOTJLUDVHJTJGYSUyRmx5UGVYUE0lMkZtZnkyWTRwbWsxUFJxZkJCS3BOd2lEcjZFMyUyQjdPSDhqNTElMkIxdWJYVTdKTGlLa2x2Y0pXakRxckRkV0glMkZFc1Y1UG50b0ZpdVV1UU9GeEZ2SEtwS3NQcFduTEpaNWI4dzY1cDF4RWd1WHVJcDNxOGQwN1AxJTJGWlZtJTJCeCUyRmtjY2JyJTJCaG0yMTI1c2JQZ2dYOTVBWnE4RlJoeTNwJTJGTDhTcmsxODFhREhxZW1wcXR2Ukx1MmhEbmdQaGVNRG1WJTJGMlAyb3pqc3JLTFc1anU0RW5pJTJCeTRyUTlRZTRPTDVEJTJGQUNwNWhndTdpT3dra1VYRnhENnl4OURXTThITk1tR0pGRkRSRlJRaW9QVUhJaHJtZ3JBWHViZEsyejE5V09sZUZlcEglMkJSa3d5bUNrVUlxRDFCeEJwV0lhTnEwOW8zMVdVUnJab2llbTMyZVBFaGVDSUI4VlYlMkJMSmNHQjNCQkh0a2ExTFFYVm5lMFhuQzllVVElMkIwdGV2SHhYQTJseGF6SGZXNjIwcngyYXRXNGdrU3FGT1BDZ2R2akRDbFZ3a0E3aFdZWnN3elpGWFluTkJGUEcwVXlDU052dEt3cURpbWJGV0U2dm9FMWhJYnUwQmUzQnJRVkxJUDhyeFhKUm85MmIzVDRaMiUyQjFUaTN6RzFjR2tBaWgzQjdaU1JwR3ZDTlFxanNvb044TnF1elpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOUR2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZpUG1ieW85MWNmcHZRaUlOVlQlMkIlMkJoNlJYU0Q5aVh3bCUyRjMzTiUyRndXUXpXOUFYWG8lMkZYYUZnN0wlMkIlMkJoSzBtamRCdWFmekFDanJuWWNEVFdOclBLazhrWU1zWkRJNDJOUjQwdzN0UlczejFwMmw2aG8lMkJvdExBZlhWRTVPZ0RWbGpBJTJCTGolMkZ4Wkd2N09TMkJiZWFSYnNjcEk1WXVMUXEzRVRJZmlRY3YyWlZQOTAlMkY4QXNNazNtaTFGanFCbnQwQ3BjSUhJVVUlMkJOVDhSRlA1dHVXUkRURkV1bHdQYVA5WWpWU2ZWakJJRkdQTSUyRjdCdkhDT1NYcVhsdTZ0cm5USTF0N1kyWmolMkJHVzFZaG1RJTJCSmNmYjVmelljWkJQS2wxSTdHUlhIS0dpM0FZJTJGYWpQUnZkc25RTmQ4QkZGRGpuTCUyRlBXaEphWGd1SUtSdzMzS25na2xQaSUyRjJQeGNzNmprWTg5MlVsM29ucXdvWkpMV1JaZUFISWxUOEQ3ZkpzQVZCYUxwVWV1ZVM5UHRyaVlQY1d5a1FYa2ZaNHlWREQlMkZKUDJXd1g1WDFOSjJOclFJR1hrb1hwelE4SlA2NUdQSmZtT1RSNUcwelhMbUdDemxZbXpoWlBTZUUwNWNlUDdVVGpmbGlPaGFna1dzM0NXMGdrVVhiUFpqb1pWa1k4a1FIcjhPU0hVSlpENTQwdm1ZdFZSQklBdm9UbzI2MEpyR3pVN2N2aHphSjVqZ20wdDlPMXU3Z2l1JTJGUmRZJTJCSjQ4b3lDZyUyRmQ5UXlmWiUyRndBckpoUEJGY3d2YnpxSGlrQlYwUFFnOXNndCUyRndDU0xwSnk5cHhuaVBSaVFzZ0g4cmZ6WUI1cWwlMkZrcTFoWFU0WmlnTndqc2l6ZnRlbVUzVWY1SnpwJTJCUlh5bG9GJTJGcGozRnpxWWlSM1lyYXhSRXN5eCUyRnpUT2FMNmolMkZ5cDhDWktzU1VPelpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOUh2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZnMzVpUHJNRUZsZDZYYlIzQ1JNJTJGcm8xZlVJSUh3eCUyRnM0VSUyRmxycU9rejNjMWxZUW1FTkZKSThEQ2dSeklESWc1YjFKYXZUT2lhalpMZjJjbHMxS3NLb2ZCaDlrNXlkcEpQTCUyRm16VDlaY0JJV1kydDVzRm9EOExzNUMxJTJGd0NEa3lRNUt5aldkTEdpNm1sM2JyU3l2S3h1bzZJNThQOEFKUFZjbE9pWFp1clBpNXJMQWZUZjVmc243c0UzZHJCcUZxOXZMUjRwVjJJN2R3eSUyQiUyQkYyajZYZjJGNWRTM0VxTmJ5aFZpVmE4aVYlMkZiZmFnNiUyRlpYQmRqM0tuV1VSWEx6WUZZVjVuOG4zdXM2dXQ3YnRFSVRHc2JjNmhsNDE4QjhXRmQ3NVltOHN2SHFWcVByUWlDc0pTUGlpa0gyalFmc05uU2NheWh3VllCbE94QjNCR0cxU2J5N3JmNllnWjVLQ1pmdElCU21IZUZsbG9kbHA5NUxlV3FsRE1LR0lmWUI3a0REUEUlMkJTdXpaczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRiUyRjB1JTJGNXMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWkZmTSUyQmlwTFclMkJTSlpBZjcxQ3RhTVBzeWdmOFN5VlpSQUlJTzRQYkNEVzZwUDVZdkRkNldpdTFaYmMlMkJpJTJCOVR0OW12JTJCeHc1eEczdGJlMVZsdDQxakRIa3dVVXFmRTR0Z1BOWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlQdiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14ViUyRiUyRlopO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtib3JkZXI6MXB4IHNvbGlkICMwYTB9Lnl1aS1za2luLXNhbSAueXVpLWgtc2xpZGVye2JhY2tncm91bmQ6dXJsKGJnLWguZ2lmKSBuby1yZXBlYXQgNXB4IDA7aGVpZ2h0OjI4cHg7d2lkdGg6MjI4cHh9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1zaW5nbGVxdW90ZXMuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1zaW5nbGVxdW90ZXMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWM5ZjY3Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1iYXNlNjQtc2luZ2xlcXVvdGVzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1yaW5nLXZtbCwKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1jZW50ZXItYnV0dG9uLXZtbCwKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1tYXJrZXIgdlw6b3ZhbC55dWkzLWRpYWwtbWFya2VyLW1heC1taW4sCi0ueXVpMy1za2luLW5pZ2h0IHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLAotLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlci12bWwsCi0ueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtaGFuZGxlLXZtbCB7Ci0gICAgYmFja2dyb3VuZDogbm9uZTsKLSAgICBvcGFjaXR5OjE7Ci19Ci0KLWRpdi5iYXNlNjQtc2luZ2xlcXVvdGVzIHsKLSAgICB3aWR0aDoxMDBweDsKLSAgICBoZWlnaHQ6MTAwcHg7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJTJGOWolMkY0QUFRU2taSlJnQUJBZ0VBWkFCa0FBRCUyRjRSZkpSWGhwWmdBQVRVMEFLZ0FBQUFnQUJ3RVNBQU1BQUFBQkFBRUFBQUVhQUFVQUFBQUJBQUFBWWdFYkFBVUFBQUFCQUFBQWFnRW9BQU1BQUFBQkFBSUFBQUV4QUFJQUFBQWVBQUFBY2dFeUFBSUFBQUFVQUFBQWtJZHBBQVFBQUFBQkFBQUFwQUFBQU5BQUQwSkFBQUFuRUFBUFFrQUFBQ2NRUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTWlCTllXTnBiblJ2YzJnQU1qQXdPRG93TnpveE9TQXhORG8xT0Rvd05RQUFBNkFCQUFNQUFBQUIlMkYlMkY4QUFLQUNBQVFBQUFBQkFBQUJ3cUFEQUFRQUFBQUJBQUFCUlFBQUFBQUFBQUFHQVFNQUF3QUFBQUVBQmdBQUFSb0FCUUFBQUFFQUFBRWVBUnNBQlFBQUFBRUFBQUVtQVNnQUF3QUFBQUVBQWdBQUFnRUFCQUFBQUFFQUFBRXVBZ0lBQkFBQUFBRUFBQmFUQUFBQUFBQUFBRWdBQUFBQkFBQUFTQUFBQUFIJTJGMlAlMkZnQUJCS1JrbEdBQUVDQUFCSUFFZ0FBUCUyRnRBQXhCWkc5aVpWOURUUUFDJTJGJTJCNEFEa0ZrYjJKbEFHU0FBQUFBQWYlMkZiQUlRQURBZ0lDQWtJREFrSkRCRUxDZ3NSRlE4TURBOFZHQk1URlJNVEdCRU1EQXdNREF3UkRBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBRU5Dd3NORGcwUURnNFFGQTRPRGhRVURnNE9EaFFSREF3TURBd1JFUXdNREF3TURCRU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd00lMkY4QUFFUWdBZEFDZ0F3RWlBQUlSQVFNUkFmJTJGZEFBUUFDdiUyRkVBVDhBQUFFRkFRRUJBUUVCQUFBQUFBQUFBQU1BQVFJRUJRWUhDQWtLQ3dFQUFRVUJBUUVCQVFFQUFBQUFBQUFBQVFBQ0F3UUZCZ2NJQ1FvTEVBQUJCQUVEQWdRQ0JRY0dDQVVERERNQkFBSVJBd1FoRWpFRlFWRmhFeUp4Z1RJR0ZKR2hzVUlqSkJWU3dXSXpOSEtDMFVNSEpaSlQ4T0h4WTNNMUZxS3lneVpFazFSa1JjS2pkRFlYMGxYaVpmS3poTVBUZGVQelJpZVVwSVcwbGNUVTVQU2x0Y1hWNWZWV1puYUdscWEyeHRibTlqZEhWMmQzaDVlbnQ4Zlg1JTJGY1JBQUlDQVFJRUJBTUVCUVlIQndZRk5RRUFBaEVESVRFU0JFRlJZWEVpRXdVeWdaRVVvYkZDSThGUzBmQXpKR0xoY29LU1ExTVZZM00wOFNVR0ZxS3lnd2NtTmNMU1JKTlVveGRrUlZVMmRHWGk4ck9FdzlOMTQlMkZOR2xLU0Z0SlhFMU9UMHBiWEYxZVgxVm1aMmhwYW10c2JXNXZZbk4wZFhaM2VIbDZlM3glMkYlMkZhQUF3REFRQUNFUU1SQUQ4QTlWU1NTU1VwSkpKSlNra2trbEtTU1NTVXM0dURTV2lYUm9PSktGaTNPdngyV3Zic2U0ZTVnTXdSbzVzb3lwZE95TjltVFNSSHBXdmo0T2M0JTJGd0RWZjlXa3B1cEpKSktVa2tra3BTU1NTU2xKSkpKS1Vra2trcCUyRiUyRjBQVlVrbENxeHR0YmJHJTJGUmVBNGZBcEtacEpKSktVbzJXTnJyZFk4dzFnTG5IeUFsVk9zV3Zvd1haRFolMkZRT1phOEQ5eHJtbTMlMkZOcjNQVXN3bSUyRnBtUUdhbXlsNGJIaVd1aEpUWXFzRnRUTEJ3OW9kOTRVMVE2RmtmYU9rNHRzenVxWWZ3VjlKU2xsMSUyRm9PdDJzT2d1RFhnZVRtN2YlMkZQbU4lMkZ3Q0NMVVdaMVZocnlzYktBJTJCanVhN3pndHVaJTJGMUZxSVVYVFNRY3ZLWmk0N3NoN1hPWTB0QkRZSmh6bXMzYWtmUjNibFZkMTNwck10dUklMkJ3c2UlMkY2TDNBaG03bjAlMkZVJTJCaTJ6YWZ6a0ZPZ3E5JTJCZGowWkZPTTRrM1pEdHJHTkVuaHp0N3YzV2JXUFU4YkpweWF2VnBkdVp1YzJlTldPTmIyJTJGMlh0WE9ZMlZVN3JBNmhuTzlSdUpTJTJCcjFoTzFsZ3VHSmJ1WXoyZXh0dnYzZnpMUFUlMkZ3Q0VTVTlRa2tra3BTU1NTU2xKSkpKS2YlMkYlMkZSOVZXZjBpd2l1M0ZmOUxHc2V3VCUyQjZEN1AlMkZBeXh5MEZtdW5INnhQRE1wZ2QlMkZiWkZUJTJGd0RvT3glMkYlMkIyMFFwMGxDMDJDdHhxQUx3RHRCNEo4Rk5KQlRWb3Z4JTJCbzRqdmJMTEdsbHRUdVJNc3NyZiUyRkFOSml6JTJCaFpEcU1PJTJGRXlDWDJkT2M2dCUyQmt1YzFnbXQlMkIzJTJGaGFQVGVvWjVzNlIxSVpyQkdEbGtOdkklMkJqWGNZWXl4JTJGN3RXVjlCJTJGd0R3JTJGd0R3bHlEMUxxV0gwanEyTjFPNTVyeE9vZ1kxcndDNEM5dXVQNm16ZHQ5V2wxdjZUJTJCYiUyRkFGZEZTJTJGMU15cSUyRjJWVGh1c2ElMkIydHN0Mms2c1B1WTczQnJtJTJGbzNWdjJmeSUyRjNGMFM0VEF6cSUyQm0lMkZXRHF1S0duYmhXT3lhNjJEVVVscmNteXVsa3RaNmYyZXkxOVd6OCUyRjJMczJaJTJCRll4MWpMNnl4Z0JlJTJGY0lBSTNDWGZOSXFaWDN1cnNxcXJaNmo3VHFKZ05ZMlBVc1BQMGR5cGZXSiUyRm85Tk9UMnhyYXJIVHhzM3Raa2YlMkJ5NzdWUjZ2OWJlamROc2JrYjNaYnFtMnNmVmpnT09ocmRaRmxqcXNmZlhzJTJGbXZWOVYlMkYlMkJEWEhkWiUyQnV2VTh6QTZpJTJCajAyWTF6YXdhWkx0MkxZMjF0bHRiN1hPYjZqNiUyRndEUjFWJTJGelYzNnY2clBWWUZVJTJCaUNzNVBTN2NkNDNPMldVT0I3N2QxWCUyRlQyN2x3dlZuTnlLSzhkMTVxNmhpajIwN285ZGczREhkVzltOXpMdjhBUSUyRjRXdTcxSyUyRlR0cjlhcXpKJTJCdUhWOHRtUjB6Tm95THZzWFU4TnI3Y2R0am10TjFKOUslMkIycG9kc2JrMSUyRm8lMkY4QTBZc25HNnRlJTJCbkxaYmRYWFk2cHR0QUROd3Vjd21odjJjV2J2MHRuciUyRnBLbmZwS2JLZjhBdHNxRDFEdnJqbmZWNzBjS2xsZGd6Z2JxamY3UUhCM3Ayc0cwc2I2bHYwJTJGZlo2VEVjWmc2MzB4ejJ2ZXpLNmpWYmZoVnRmNmJpUSUyQnhsdG1OWTdhMno5SnMzVnUlMkZ3YXl2ckhoMSUyQmhoZEt2M1h1YmpCaFk5d0RiSHRQcE9kWGtPSDZ0MURkJTJGUnNsJTJGNkMlMkZ3RG9tVjdGZzlXYyUyRkYlMkJxM1JMNmJpYmVuNVdWamg0bGxqZHhiZXhsdGYwNkxhOXZ2cCUyRk0lMkZ3QUZaJTJGaEV1cW4wcjZsZlhNOVdZenB2Vm9vNnd4dmNiQmNHajlMdHIwOUxMb2o5YnhmJTJCdlUlMkZvZjVtejlhdnJKZDAlMkIyakJ3SEFaVHJjZDE3aUE3YlZaYTJuWTBIJTJGQ1h3OXYlMkZBQWRmJTJGV2w1emlkUVo5WmNZM2wzb2Rkd2cyejFtSFo2eldmUXYzdDIlMkJuazAlMkZ3Q24lMkZ3RFJmOHhmNkRmMURxdlhHWiUyQmU1dHpzaTdHZDZsbTJrUHNxTmJxcU9HMSUyRjRDdXhucHQlMkZTNyUyRjlJOUFMalIxR2g3Zjk2JTJCdUpKcEExS1pqMldORG1PRG1uaHdNaEpheVNTU1NVJTJGd0QlMkYwdlZWbjlhaXJGR1lTR2pFY0xYdU9rViUyRnpkNUolMkZkWlUlMkZ3QlglMkZyYTBFSE05RDdKZjlwRTQlMkZwdjlZSFgyYlQ2bW45UklLY0U5VTZsZ1huSkR2Mmwwak4lMkZTNDk3UzM5QzUzMHNPeXhuJTJCQmMlMkYlMkJoNVA4MyUyRjJreWZTJTJGUjVObFBydjE2dXdjekV4c1BIRm96TEJSV0h6NnJyaVdNOU91djZIczlUM3ZzZXVlNkI5YnVvWkY1eEJVODRCREMlMkJ0b1pZVzFQY3pHJTJCMDJHeG03MUdiMlhQMmZvZDdQNW10Y3QxNjdxJTJGVDg3R2RmayUyRmJzY1dISTZWMU5yUU5HdTNPMk5aNmZwNUZOOWRUY3JIM2VwUjZmOVJLd1JZWHpoS0V1R1lvJTJGeGZTTXZNNmxabEYlMkZWZlNvYlUxMVE5TUd5cUxmYSUyQnJQOVBKc3I5S3owOW42YkdxJTJGN2RXTjF6OVZ4QzNLZlpUMCUyQiUyQlBVeUdnNU5JYVBkVTdlelplN0t4UFIlMkZSNUd5cjFzWDlEYjYlMkZ3RGd1WnglMkJ2MzUyYmU0V053ZnQlMkI5dGIybjIxbXphJTJGMDdYbjIlMkZwN3FtVmVwNmRiUDB2cWZvbHFaRDdtWTkxZURtWGg5cEJBWkRHalQ5YXd2YiUyQmtwM1clMkZwMk1ka2ZwYXYxYiUyQlhVYjBXdWxUZVAyM2g1RGkzSkwzVVlXVFl6bHpiS24xc2M1ck43YmFNM0ZaOXB3OHhydlN2ciUyRlFmMGltNnV2SDZ2WTdHNmhmUzJteDFXRllhcTdibmslMkJvMnIwcktQVGE3YnVzdHhYMjAlMkJ6JTJCbGY0UlclMkZxUFhlTTQwM3MlMkZROUxwZGJRNHY5N1dsNERjVzFudWQ2UHFmckgyZTluc3pNYXZOeCUyRnM5JTJGMmhBNmk1cjc3SFpMSDI0VG4xVzQlMkJVd2oyUHZhM0pkajViZnphSGI4bjdGayUyRjRQOVl4UDB0WDh3dWxxYVdmYjFDelo2R2FNMzA2MjJXREQlMkZTVjFtcDNzZlk2dGpXT3NZMXRmODc3NmElMkZUUTdzMjdxRk5WSXJxd0FmVXNiWlJYdDlTME45S3kxdFg4MyUyQmdyZSUyRjFzZWolMkZBRTFsektsdGREdGJpOVpKc3FxYlRhQlhkUzBUYlc2OFB5Y1V4Tmo4cXJJYlIlMkZwUFUlMkZTYjYlMkZUeXY2VldmMHF2T3J6bXNZYXNuR3pIbWs3Z3gxWmE2SzJYUjdzZCUyQjV2Nks3OUpYaTNiUFUlMkZWOGk3MVJSVTUlMkZXYUxNdjZrWWo3U0dYOUw2ZyUyQnFLJTJGb3NyeW1ldXgxY2Y0QjE3ZllzcnB1UG1OeGZ0ejYzUGN3bDlEV0RRMnNJcVprTkolMkZOWmU2bHVSNmYlMkZBQVglMkZBQVMxZjJwWFgwdnElMkJKbG43TGZrVlZ0YTNaQWZsNDkyOW15biUyRkE3NnJMcTg2ciUyQmJvJTJGNHF5aFZydW9aZlNlazRsZG1NMTJQZTIyN0Q5WFFCdHZwdHUzJTJCN2Q2VnI2NlhmMlBVJTJGd2lTbnN1cW5EeUxNZkZ0TVpPUmolMkJyWFNQZUhGc2VvMmw3ZzMxTGElMkZWJTJCaCUyRjJvcSUyRndmcWZwRnpuVmNkOXVEWml2YXh6RFpYYTF6enRaYVhCMUxXJTJCdiUyRmdiJTJGWlZYaTV0djgzJTJGUnNqOUFzTHFmWHYyajAlMkZwWHFQRmVkZ051cmZhMTBGM3Vxc3g4bHY4QW8zT2J2cmYlMkZBTVQ2biUyQkZRcXVxNTklMkZVUmVjMXpiN0NIWE1jOGh0bXc3bjQ3djhCdHVjUFViNnY2UDlMZDY5aU5vUzlINlZrMFp6Y3BqM3RxcWVXMUFBdHVjJTJGOEFtN01leWh2Nld2WiUyRk5aWCUyRkFJRXVnenVrMTRlTGlONjlmYmk0OXU2d2dCanlXTmI2ZFA2SU9hNTJWNnZ0MjQ3UDBkRCUyRkFGUDBhampkYzZrQmVla1lRZDFESXMydHNaVlpiZFZYdDl0WXFzRzklMkIzJTJGVFBaJTJCbCUyRndCQ3NhanBYViUyQnRYMlp3byUyRmFsN1d1dnY5UzBNZWEyJTJGVDIlMkJ2WjdtMWUxajZHVjc2UFolMkZwSzBORTdhdnBIMVo2OW5kVTZUaTRtUDZtVlprdEJkYmtQM3VxYldUUmtqS3VZR2I5dDFlNnYyNzc2clA5SXV5dzhWdUpqdG9hUzh0a3VlZVhPY2R6MyUyRjJuTHliNnZkWnY2RGpES3dtVnQzbHpic1p6M1ZzWmNIbHVUZ1g0OTloZlJZeHV6SnduJTJGem5zeUtyTEx2OEgydlQlMkZyOWhPREslMkJzTSUyRlp1U1drdnJ0RmpDMXdMbXZyJTJGV0txVyUyRm0lMkJ6YlolMkJrUlI0dlZwS24wM3ElMkZUZXE0N01ucCUyQlF5JTJCdDdXdkcwJTJCNEJ3M045U3MlMkZwSyUyRiUyQnVOVnhCVCUyRkFQJTJGVDlWVE9hMTdTeHdEbXVCRG1uVUVIc1U2U1NueGY2eDlDelBxdDFFQ2l4N0dNZWJlbjVRMGNhbmV5eWx6dm91dG8zTXJ1WiUyRmhhdjBucCUyRnBGVXJ5YU1qRnZyenBzNmRrUGJabVVzSHZ4N3pGYmVyNGY3cmJMUDZXeiUyRkFFbG4lMkJpdll2WSUyQnU5TDZmMVhwbDJIMUdHME9HNzFTUTAxdUgwYjJQZDlCN1AlMkZVYiUyRndCR3ZIOHZwRjNUNyUyRlFwY0g1TkllYTdhejZsZVhTZDIlMkJ6SGpkVzcwcUhiTW5FJTJGd2xTWnJFMk51emZqS0hNWSUyQkdmcHpSMm4lMkZMOUg5NXdNJTJGQnlPazVoeHNnaXl1d2I2cm02MTNWSDZOMVglMkZBS01yVzEwanFicm1IRHlIbDhNaGpZM0c2c0hkNlBPMzE4ZHY2ZWl6MDdmVzlQMHYlMkJPSGlQeGM2bjlqNTUyWWRoM1ltVnk3RnRQNSUyQnZ2Zml1JTJGdyUyRiUyRkIlMkZwZjV6ZWhZdjFhNnBWazVXTG5oJTJCSlpoTUw2cm1pV3ZzQlk2dDFGbjBuMU5ZNzdUdnAlMkZTZjhXbmlqcU5Xbk9Fc2NqR1E0WkI3T2lnMGZWN0xmMDFycjhycVIydGV6M1hQYkJ4NjdYc1l6YXl4amJNbDltMzglMkY5SiUyQmwlMkZTJTJCcHpydlV4TVdxdnFOVnVKa3N4MzQwMnpXNW9vc2JkU2NpZzcyNU9IZDlxWTZ2JTJCYzJaT0xUNk5uODh5M2U2WDF1eWs5TmV4em5ZZCUyQlBkaTJNYzFsVHhsNHp0em5XdTNiS2ZXWlpYYnM5VDA2ZjB5cGRZNkoxSHIlMkZWSDlXcnRwc3g2bU1xRkRTJTJGMVdpc0YzMFhOYTUlMkI1NzdiZjBleXolMkZSViUyQnFuSHdXMVJvdERGNnhheTQ5VHZpa3M5T0hOQkFjOWcyc2ZjMW03WnUyJTJGb0clMkZReHYzUFNUOUx3MmRUYmxNJTJCMVcxc2REaXhvTTJ2dTNmMDkzNk90M3BPWnN1cnAlMkZRNUglMkJqJTJGd2FKajRHWGYwNTJaamVwUmpibU9yeXdOek5qSHVsaDlNZWc1ek4lMkIxbHJuJTJGNFI5ZnAlMkZwRll4Y0hENmV5Nm5JdGRTR0FPdGRsRndobGglMkZSdUhwTjNQcGJ2OEE1eG5xZW1nRk9aMSUyRkR5TVc3N1QxRElPUXk0dnJhOTFicUMwMGVuJTJCaVl4JTJGMDZOcnFuZXYlMkZBSWYlMkZBRWoxV3hhRzJzeEtPbzlNdTZpSzMyVVllT0xITUwzdkxyTnJybXUzJTJCbHYlMkZBUFJpMWN2cGwxUFVxVzNOZmg1VkozNCUyQk5tTzlYRXVySHUlMkZWN3QxakdNc1lmMG5vUDluJTJGQUFOcXY5UTZXODR3NjMwaG4yY3VGZDFqY1lHeXNqUzZxekx4bWl1M0Z5YWR2ODk2TlglMkJsJTJCMmVxaFNTQlExdSUyRndlZDZ6OVglMkJydEZKSDFkWmoxYWdFTnNxWnVJQjlFUHN2YmtXN1dqNmVTJTJGNmZxJTJCaiUyQmpXT2NiTnc4aG5xZE54cTN0aXpaWVhPYTRUeTdma1dibU5kJTJGT2Jmb2Y0UmRwVDFmcUhVczFyYyUyRkxma3R5UlUydkdhNGJTSE5lUHRGTDNlbDZWbUxsVmVqWjdmMG0lMkYxY2olMkJaJTJCMFdidlNmcW4wJTJGcTFlVGpkUklkbFZzcHNxY3h3QnFjOFBiZlclMkJyWDM3NiUyRlR0ZiUyRkFLSDBiY1M2djJXSlhxdWxqNFlDWEVEWnF1cnhuMWR4WGRSb3N1dzc4aG5YY1I1ZFNXdTIyT3JZMmJxc2RuMDNaRlR0OTMyT3oyWldMNmxWTFBXb1hTMTlIenVwOVBxJTJCc2ZUTVl0eThrbjdaUlhEQ3k1aGRWYjFERXJlJTJGOU5VNzlMdnhIYkxjbGo3S2Y1cklzcFhFNW1QbTlKNnElMkZMcWE4MllybXZmVkpIcVVzZCUyQmd5cUxhdGxuMGElMkYwM3BQOEFXeExtZXJWJTJCNWolMkJ6JTJGVTdxdlIlMkJwOUNvdDZRTmxMSmJaUTV4ZFpYYjlPMWw3M1M5OWpudTMlMkJxNyUyQmUlMkZuRW1ONTdxdjFYNmI5YyUyRnE5OW94V054JTJCdVl4Y3l4N2c5cmpjMlBYeE01dDM2eDZkam10OUgxdjAyTCUyQmk5TCUyRkNWV2N6OVZQcjUxbnBQV1g5SCUyQnN4dXk4Ykl0Rk5veUR2dG90OXRJY04lMkYwNkhlMzE2UCUyRkFFS28lMkZ3QUo5cDloYlhXMTdudGFBOThiM0FRWFFJYnVQNXk0MyUyRkdCOVEyZGZwJTJGYVhUV3RaMWlsb0VHR2pJWTMlMkZBUGU3JTJCYXlHJTJGOEFhZkolMkY2emIlMkJpJTJGU1VKVDJUSzY2eHRyYUdBQUFCb0FFQWJXOGZ5VkplY2ZVYnFQOEFqSFBWMzFkWHhNako2YyUyRmF5MjdMYU1kMUphTmdzb0R4WDlvOXJmMHphVzIlMkJyJTJGUGVwJTJGcFBSMGxQJTJGOVQxVkpKSkpTRE5MJTJGc3I5Z2VYR0FCVzFybmFrRDZGMzZQJTJCc3VBd3VtViUyRldYTnJ4SHZjeW1xaDJTN0lxTG5SYSUyQjdKZmoyVVBjR3RxZHZ5ZlZzcFo3SyUyRlElMkJ5MSUyRm9hVjZGZmowNUZacXZZTEt5UVMxM0VnN20lMkY5SktpbXZIcHJvckVWMU5ER0R3RFJ0YWtrRWcyTkNObnhEcWRHYjBMcnUzcUZESFg0MXJMVFdHeFZleVI3NjI2dGRWbU5hJTJGMVAzTFBXcjlpMmNtenJwWTV0ZEI2Z3pwTDdLcTdXR1hQcXFmNkQ4SEljMWdaOXVwbyUyRjdUJTJGem1WWCUyRkFEWHFyMGJyT0YwJTJCNDEzNWJXVkZnYzA1a0QxV01QMDZhcmkxN3EyNVA4MVolMkIlMkZYJTJCaSUyQm5hdVR5c2ZxblFlb002aDA2bDkxZVcySDRqd2YxdWhnYzcwTHEzRGRWMVhHeG03OGQ3JTJGd0NmbyUyRlFYZnBLN0dJUkZYNHMyZk43dkFlR3BSandrOTNJeU9qNVZEbk42VTUlMkZVTWElMkZmbFlsTEd1TG0lMkJxeG5wZmFkckcxdGRrMzAyVWZhdiUyQnMyZW4lMkZOclElMkJyZDklMkJObE5kZlMlMkZEdURYTXk4ZTdSMWJtamZKJTJGa05obDlOdjU5S3RPZUxiTURPNkZrdEp0ZSUyQiUyRkNzdExoJTJCaGNheG00bVk1b2M1dExNcjA4WEszc3Q5SDdUUmQlMkZTcVBXVzExZkElMkZhJTJCT09wZE9jNmpxZU1ObGxZamNkdnVkald0OXpmVnIzYjhkJTJGJTJGb20lMkYxRSUyQjJGNWpwZjF1NkRqOVJ5TEtjcXUzcGVhZjFyRjFhR2glMkJoeW0wWE1yOTFUZlprc3IlMkZuY2IlMkZTV1k5YkZUd2Z0ZlVPcGRRd1JadnhzRExPTGgydUJleHJMSDIxWXpMTEFIdjlLM1pYJTJGd0FIJTJGT0xVdyUyQm5mVSUyRjZ4VkRCNmxnNCUyRlR1dEVGckxhRyUyQmdMWEQlMkZDNDJ6WTJ4JTJGJTJCbHc3ZjAxZjh1cjlPbiUyQnJveVBxbGxaZlRoaE1zcUJaYmxXaHhGamFoRkxMV0UlMkIyN0hadjNzYnNyOUg5TjYzJTJGQmpXMUw5SjlQRGElMkY2dWRjeCUyRlU2VGE3YlNINnV4TFQ3VzBPYzAlMkZvNkhUNm1GbDFmelglMkJuVjluMVI2djA3YmJoWnYyemE0dzE0OUswVms2ZW5rTWVXUHUyZnpuOHhWYiUyRndmMEYxR1ZoNG1kU1czTUQydmJBZkEzQUg5eHlvWW1SWjBvJTJGWTg5NCUyQnp0Qk5HUzdRYlIlMkJhOG42T3olMkZ3SCUyRnR0THlSYnlQVWNYTXF6em5ZMk5maDlUcmJaYmtrVnl4elFCdnptJTJCbTA0dnI3ZjBkJTJGbzJmclglMkJEJTJGVFYycmMlMkJybUgwYnFIVDhmY1clMkZiMk5lZDFGcm1Xc2FYT1pMZlJMSDAxVyUyQnB1OUwlMkJhWFVpQ0pIQldHZWdNNmQxSWRVNld6YkppJTJGRmJBYVd1UHZkViUyRlYlMkZuUFRTdE42VTQlMkZXZnFQazVqaFJqMkJvckRyTVhMT2pxbmdlMm0xck5yblYzZTFsbnBmOGIlMkZPMVVybSUyRnFMbFpIMWElMkJzZVQwM0l3TGE3czk3SzhuRnJZJTJCeDlmcCUyQnA2T2ZqdXBaNlZ2VDMlMkJyWTNJJTJGMFA2T3luOUYlMkJqWHJLU0NGSkpKSktVa2tra3AlMkYlMkY5WDFWSkpKSlNra2trbEtRTTNEcHpjZDJQYnVBZEJhOWhMWHNjTldXVlBiOUN4amtkSkpUeEhWZnE0T2w1YmMlMkJxNTVkbHZMTHEyRGF4MWxwclk3SUZiUDVpNjNiNzdLZjlIJTJCayUyRlFycFBxJTJGY0xNQVZsZ3J1cGNXWE00ZHVCajlJMHk3ZiUyRjFmMDB2ckIwaG5WdW5QbyUyQmprTW16RnRHanE3UUMxdGxiOU5qdmQlMkZxeFM2ZFdNajB1cEg5RmZiWHN5cXdJYWJHd3gzMCUyRmYlMkJpZlc5bjlSSG9wd3ZyQmg0ZUYxViUyQlhrVSUyRnFtWlFRTFNCNmRlWXh3dXg3SEFmcEd2czlMJTJGQiUyRjhKNml2V1ZaMmRqNHZWOEZnZmJrWSUyRm81V084aG9zcmRyMyUyQmk2dDducmVmV3g4YjJoMjBoelpFd1I5RnclMkZsSU9MZzQlMkJJNjUyT0N4dDd2VWZXRDdRNCUyRlNjeHY1bSUyRjg5SzFJdWpZajhQcFdMaldEYSUyQnVzQjdTWkljZmM1dTZYZm5GVzMxc2VJZTBPRXpCRTYlMkZOU1NRVXBKSkpKU2tra2tsS1NTU1NVcEpKSkpUJTJGQVAlMkZXOVZTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJGJTJGWiUyRiUyQjAxSWxCb2IzUnZjMmh2Y0NBekxqQUFPRUpKVFFRbEFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGhDU1UwRDZnQUFBQUFZRUR3JTJGZUcxc0lIWmxjbk5wYjI0OUlqRXVNQ0lnWlc1amIyUnBibWM5SWxWVVJpMDRJajglMkJDandoUkU5RFZGbFFSU0J3YkdsemRDQlFWVUpNU1VNZ0lpMHZMMEZ3Y0d4bEx5OUVWRVFnVUV4SlUxUWdNUzR3THk5RlRpSWdJbWgwZEhBNkx5OTNkM2N1WVhCd2JHVXVZMjl0TDBSVVJITXZVSEp2Y0dWeWRIbE1hWE4wTFRFdU1DNWtkR1FpUGdvOGNHeHBjM1FnZG1WeWMybHZiajBpTVM0d0lqNEtQR1JwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOU0c5eWFYcHZiblJoYkZKbGN6d3ZhMlY1UGdvSlBHUnBZM1ElMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWFYUmxiVUZ5Y21GNVBDOXJaWGslMkJDZ2tKUEdGeWNtRjVQZ29KQ1FrOFpHbGpkRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUXVVRTFJYjNKcGVtOXVkR0ZzVW1WelBDOXJaWGslMkJDZ2tKQ1FrOGNtVmhiRDQzTWp3dmNtVmhiRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDVHd2WkdsamRENEtDUWs4TDJGeWNtRjVQZ29KUEM5a2FXTjBQZ29KUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRm5aVVp2Y20xaGRDNVFUVTl5YVdWdWRHRjBhVzl1UEM5clpYayUyQkNnazhaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG1wdlluUnBZMnRsZER3dmMzUnlhVzVuUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrOFlYSnlZWGslMkJDZ2tKQ1R4a2FXTjBQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFU5eWFXVnVkR0YwYVc5dVBDOXJaWGslMkJDZ2tKQ1FrOGFXNTBaV2RsY2o0eFBDOXBiblJsWjJWeVBnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pQQzlrYVdOMFBnb0pDVHd2WVhKeVlYayUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVTJOaGJHbHVaend2YTJWNVBnb0pQR1JwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVhWFJsYlVGeWNtRjVQQzlyWlhrJTJCQ2drSlBHRnljbUY1UGdvSkNRazhaR2xqZEQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFF1VUUxVFkyRnNhVzVuUEM5clpYayUyQkNna0pDUWs4Y21WaGJENHhQQzl5WldGc1Bnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pQQzlrYVdOMFBnb0pDVHd2WVhKeVlYayUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVm1WeWRHbGpZV3hTWlhNOEwydGxlVDRLQ1R4a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVqY21WaGRHOXlQQzlyWlhrJTJCQ2drSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNUeGhjbkpoZVQ0S0NRa0pQR1JwWTNRJTJCQ2drSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4U1pYTThMMnRsZVQ0S0NRa0pDVHh5WldGc1BqY3lQQzl5WldGc1Bnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pQQzlrYVdOMFBnb0pDVHd2WVhKeVlYayUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVm1WeWRHbGpZV3hUWTJGc2FXNW5QQzlyWlhrJTJCQ2drOFpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbXB2WW5ScFkydGxkRHd2YzNSeWFXNW5QZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWs4WVhKeVlYayUyQkNna0pDVHhrYVdOMFBnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRm5aVVp2Y20xaGRDNVFUVlpsY25ScFkyRnNVMk5oYkdsdVp6d3ZhMlY1UGdvSkNRa0pQSEpsWVd3JTJCTVR3dmNtVmhiRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDVHd2WkdsamRENEtDUWs4TDJGeWNtRjVQZ29KUEM5a2FXTjBQZ29KUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWMzVmlWR2xqYTJWMExuQmhjR1Z5WDJsdVptOWZkR2xqYTJWMFBDOXJaWGslMkJDZ2s4WkdsamRENEtDUWs4YTJWNVBsQk5VRkJFVUdGd1pYSkRiMlJsVG1GdFpUd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UGxCTlVGQkVVR0Z3WlhKRGIyUmxUbUZ0WlR3dmEyVjVQZ29KQ1FrSkNUeHpkSEpwYm1jJTJCVEdWMGRHVnlQQzl6ZEhKcGJtYyUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCVUUxVWFXOW5ZVkJoY0dWeVRtRnRaVHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBsQk5WR2x2WjJGUVlYQmxjazVoYldVOEwydGxlVDRLQ1FrSkNRazhjM1J5YVc1blBtNWhMV3hsZEhSbGNqd3ZjM1J5YVc1blBnb0pDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzV6ZEdGMFpVWnNZV2M4TDJ0bGVUNEtDUWtKQ1FrOGFXNTBaV2RsY2o0d1BDOXBiblJsWjJWeVBnb0pDUWtKUEM5a2FXTjBQZ29KQ1FrOEwyRnljbUY1UGdvSkNUd3ZaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlXZGxVbVZqZER3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOUVdScWRYTjBaV1JRWVdkbFVtVmpkRHd2YTJWNVBnb0pDUWtKQ1R4aGNuSmhlVDRLQ1FrSkNRa0pQSEpsWVd3JTJCTUM0d1BDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENHdMakE4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQamN6TkR3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTlRjMlBDOXlaV0ZzUGdvSkNRa0pDVHd2WVhKeVlYayUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFF1VUUxQlpHcDFjM1JsWkZCaGNHVnlVbVZqZER3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOUVdScWRYTjBaV1JRWVhCbGNsSmxZM1E4TDJ0bGVUNEtDUWtKQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrSkNUeHlaV0ZzUGkweE9Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQkxURTRQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDQzTnpROEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpVNU5Ed3ZjbVZoYkQ0S0NRa0pDUWs4TDJGeWNtRjVQZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNRazhhVzUwWldkbGNqNHdQQzlwYm5SbFoyVnlQZ29KQ1FrSlBDOWthV04wUGdvSkNRazhMMkZ5Y21GNVBnb0pDVHd2WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlYQmxja2x1Wm04dVVFMVFZWEJsY2s1aGJXVThMMnRsZVQ0S0NRazhaR2xqZEQ0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRa0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRa0pQR0Z5Y21GNVBnb0pDUWtKUEdScFkzUSUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxsQk5VR0Z3WlhKT1lXMWxQQzlyWlhrJTJCQ2drSkNRa0pQSE4wY21sdVp6NXVZUzFzWlhSMFpYSThMM04wY21sdVp6NEtDUWtKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWMzUmhkR1ZHYkdGblBDOXJaWGslMkJDZ2tKQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pDVHd2WkdsamRENEtDUWtKUEM5aGNuSmhlVDRLQ1FrOEwyUnBZM1ElMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxsQk5WVzVoWkdwMWMzUmxaRkJoWjJWU1pXTjBQQzlyWlhrJTJCQ2drSlBHUnBZM1ElMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVqY21WaGRHOXlQQzlyWlhrJTJCQ2drSkNUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG1wdlluUnBZMnRsZER3dmMzUnlhVzVuUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVhWFJsYlVGeWNtRjVQQzlyWlhrJTJCQ2drSkNUeGhjbkpoZVQ0S0NRa0pDVHhrYVdOMFBnb0pDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaGNHVnlTVzVtYnk1UVRWVnVZV1JxZFhOMFpXUlFZV2RsVW1WamREd3ZhMlY1UGdvSkNRa0pDVHhoY25KaGVUNEtDUWtKQ1FrSlBISmxZV3clMkJNQzR3UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0d0xqQThMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqY3pORHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJOVGMyUEM5eVpXRnNQZ29KQ1FrSkNUd3ZZWEp5WVhrJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NVFUVlZ1WVdScWRYTjBaV1JRWVhCbGNsSmxZM1E4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWtKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVlc1aFpHcDFjM1JsWkZCaGNHVnlVbVZqZER3dmEyVjVQZ29KQ1FrSkNUeGhjbkpoZVQ0S0NRa0pDUWtKUEhKbFlXdyUyQkxURTRQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDR0TVRnOEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpjM05Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQk5UazBQQzl5WldGc1Bnb0pDUWtKQ1R3dllYSnlZWGslMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaGNHVnlTVzVtYnk1d2NHUXVVRTFRWVhCbGNrNWhiV1U4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWtKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbkJ3WkM1UVRWQmhjR1Z5VG1GdFpUd3ZhMlY1UGdvSkNRa0pDVHh6ZEhKcGJtYyUyQlZWTWdUR1YwZEdWeVBDOXpkSEpwYm1jJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1QlVFbFdaWEp6YVc5dVBDOXJaWGslMkJDZ2tKUEhOMGNtbHVaejR3TUM0eU1Ed3ZjM1J5YVc1blBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNTBlWEJsUEM5clpYayUyQkNna0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adlZHbGphMlYwUEM5emRISnBibWMlMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVRVkJKVm1WeWMybHZiand2YTJWNVBnb0pQSE4wY21sdVp6NHdNQzR5TUR3dmMzUnlhVzVuUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuUjVjR1U4TDJ0bGVUNEtDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhSVWFXTnJaWFE4TDNOMGNtbHVaejRLUEM5a2FXTjBQZ284TDNCc2FYTjBQZ280UWtsTkElMkJrQUFBQUFBSGdBQXdBQUFFZ0FTQUFBQUFBQzNnSkElMkYlMkI3JTJGN2dNR0FsSURad1VvQSUyRndBQWdBQUFFZ0FTQUFBQUFBQzJBSW9BQUVBQUFCa0FBQUFBUUFEQXdNQUFBQUJmJTJGOEFBUUFCQUFBQUFBQUFBQUFBQUFBQWFBZ0FHUUdRQUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTRRa2xOQSUyQjBBQUFBQUFCQUFaQUFBQUFFQUFRQmtBQUFBQVFBQk9FSkpUUVFtQUFBQUFBQU9BQUFBQUFBQUFBQUFBRCUyQkFBQUE0UWtsTkJBMEFBQUFBQUFRQUFBQWVPRUpKVFFRWkFBQUFBQUFFQUFBQUhqaENTVTBEOHdBQUFBQUFDUUFBQUFBQUFBQUFBUUE0UWtsTkJBb0FBQUFBQUFFQUFEaENTVTBuRUFBQUFBQUFDZ0FCQUFBQUFBQUFBQUU0UWtsTkElMkZVQUFBQUFBRWdBTDJabUFBRUFiR1ptQUFZQUFBQUFBQUVBTDJabUFBRUFvWm1hQUFZQUFBQUFBQUVBTWdBQUFBRUFXZ0FBQUFZQUFBQUFBQUVBTlFBQUFBRUFMUUFBQUFZQUFBQUFBQUU0UWtsTkElMkZnQUFBQUFBSEFBQVAlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkY4RDZBQUFBQUQlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkZBJTJCZ0FBQUFBJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGd1BvQUFBQUFQJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGOEQ2QUFBT0VKSlRRUUlBQUFBQUFBUUFBQUFBUUFBQWtBQUFBSkFBQUFBQURoQ1NVMEVIZ0FBQUFBQUJBQUFBQUE0UWtsTkJCb0FBQUFBQTFVQUFBQUdBQUFBQUFBQUFBQUFBQUZGQUFBQndnQUFBQkFBY3dCM0FHa0Fjd0J6QUY4QVlRQnlBRzBBZVFCZkFHc0FiZ0JwQUdZQVpRQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQndnQUFBVVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFRQUFBQUFBQUc1MWJHd0FBQUFDQUFBQUJtSnZkVzVrYzA5aWFtTUFBQUFCQUFBQUFBQUFVbU4wTVFBQUFBUUFBQUFBVkc5d0lHeHZibWNBQUFBQUFBQUFBRXhsWm5Sc2IyNW5BQUFBQUFBQUFBQkNkRzl0Ykc5dVp3QUFBVVVBQUFBQVVtZG9kR3h2Ym1jQUFBSENBQUFBQm5Oc2FXTmxjMVpzVEhNQUFBQUJUMkpxWXdBQUFBRUFBQUFBQUFWemJHbGpaUUFBQUJJQUFBQUhjMnhwWTJWSlJHeHZibWNBQUFBQUFBQUFCMmR5YjNWd1NVUnNiMjVuQUFBQUFBQUFBQVp2Y21sbmFXNWxiblZ0QUFBQURFVlRiR2xqWlU5eWFXZHBiZ0FBQUExaGRYUnZSMlZ1WlhKaGRHVmtBQUFBQUZSNWNHVmxiblZ0QUFBQUNrVlRiR2xqWlZSNWNHVUFBQUFBU1cxbklBQUFBQVppYjNWdVpITlBZbXBqQUFBQUFRQUFBQUFBQUZKamRERUFBQUFFQUFBQUFGUnZjQ0JzYjI1bkFBQUFBQUFBQUFCTVpXWjBiRzl1WndBQUFBQUFBQUFBUW5SdmJXeHZibWNBQUFGRkFBQUFBRkpuYUhSc2IyNW5BQUFCd2dBQUFBTjFjbXhVUlZoVUFBQUFBUUFBQUFBQUFHNTFiR3hVUlZoVUFBQUFBUUFBQUFBQUFFMXpaMlZVUlZoVUFBQUFBUUFBQUFBQUJtRnNkRlJoWjFSRldGUUFBQUFCQUFBQUFBQU9ZMlZzYkZSbGVIUkpjMGhVVFV4aWIyOXNBUUFBQUFoalpXeHNWR1Y0ZEZSRldGUUFBQUFCQUFBQUFBQUphRzl5ZWtGc2FXZHVaVzUxYlFBQUFBOUZVMnhwWTJWSWIzSjZRV3hwWjI0QUFBQUhaR1ZtWVhWc2RBQUFBQWwyWlhKMFFXeHBaMjVsYm5WdEFBQUFEMFZUYkdsalpWWmxjblJCYkdsbmJnQUFBQWRrWldaaGRXeDBBQUFBQzJKblEyOXNiM0pVZVhCbFpXNTFiUUFBQUJGRlUyeHBZMlZDUjBOdmJHOXlWSGx3WlFBQUFBQk9iMjVsQUFBQUNYUnZjRTkxZEhObGRHeHZibWNBQUFBQUFBQUFDbXhsWm5SUGRYUnpaWFJzYjI1bkFBQUFBQUFBQUF4aWIzUjBiMjFQZFhSelpYUnNiMjVuQUFBQUFBQUFBQXR5YVdkb2RFOTFkSE5sZEd4dmJtY0FBQUFBQURoQ1NVMEVLQUFBQUFBQURBQUFBQUUlMkY4QUFBQUFBQUFEaENTVTBFRVFBQUFBQUFBUUVBT0VKSlRRUVVBQUFBQUFBRUFBQUFBVGhDU1UwRURBQUFBQUFXcndBQUFBRUFBQUNnQUFBQWRBQUFBZUFBQU5tQUFBQVdrd0FZQUFIJTJGMlAlMkZnQUJCS1JrbEdBQUVDQUFCSUFFZ0FBUCUyRnRBQXhCWkc5aVpWOURUUUFDJTJGJTJCNEFEa0ZrYjJKbEFHU0FBQUFBQWYlMkZiQUlRQURBZ0lDQWtJREFrSkRCRUxDZ3NSRlE4TURBOFZHQk1URlJNVEdCRU1EQXdNREF3UkRBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBRU5Dd3NORGcwUURnNFFGQTRPRGhRVURnNE9EaFFSREF3TURBd1JFUXdNREF3TURCRU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd00lMkY4QUFFUWdBZEFDZ0F3RWlBQUlSQVFNUkFmJTJGZEFBUUFDdiUyRkVBVDhBQUFFRkFRRUJBUUVCQUFBQUFBQUFBQU1BQVFJRUJRWUhDQWtLQ3dFQUFRVUJBUUVCQVFFQUFBQUFBQUFBQVFBQ0F3UUZCZ2NJQ1FvTEVBQUJCQUVEQWdRQ0JRY0dDQVVERERNQkFBSVJBd1FoRWpFRlFWRmhFeUp4Z1RJR0ZKR2hzVUlqSkJWU3dXSXpOSEtDMFVNSEpaSlQ4T0h4WTNNMUZxS3lneVpFazFSa1JjS2pkRFlYMGxYaVpmS3poTVBUZGVQelJpZVVwSVcwbGNUVTVQU2x0Y1hWNWZWV1puYUdscWEyeHRibTlqZEhWMmQzaDVlbnQ4Zlg1JTJGY1JBQUlDQVFJRUJBTUVCUVlIQndZRk5RRUFBaEVESVRFU0JFRlJZWEVpRXdVeWdaRVVvYkZDSThGUzBmQXpKR0xoY29LU1ExTVZZM00wOFNVR0ZxS3lnd2NtTmNMU1JKTlVveGRrUlZVMmRHWGk4ck9FdzlOMTQlMkZOR2xLU0Z0SlhFMU9UMHBiWEYxZVgxVm1aMmhwYW10c2JXNXZZbk4wZFhaM2VIbDZlM3glMkYlMkZhQUF3REFRQUNFUU1SQUQ4QTlWU1NTU1VwSkpKSlNra2trbEtTU1NTVXM0dURTV2lYUm9PSktGaTNPdngyV3Zic2U0ZTVnTXdSbzVzb3lwZE95TjltVFNSSHBXdmo0T2M0JTJGd0RWZjlXa3B1cEpKSktVa2tra3BTU1NTU2xKSkpKS1Vra2trcCUyRiUyRjBQVlVrbENxeHR0YmJHJTJGUmVBNGZBcEtacEpKSktVbzJXTnJyZFk4dzFnTG5IeUFsVk9zV3Zvd1haRFolMkZRT1phOEQ5eHJtbTMlMkZOcjNQVXN3bSUyRnBtUUdhbXlsNGJIaVd1aEpUWXFzRnRUTEJ3OW9kOTRVMVE2RmtmYU9rNHRzenVxWWZ3VjlKU2xsMSUyRm9PdDJzT2d1RFhnZVRtN2YlMkZQbU4lMkZ3Q0NMVVdaMVZocnlzYktBJTJCanVhN3pndHVaJTJGMUZxSVVYVFNRY3ZLWmk0N3NoN1hPWTB0QkRZSmh6bXMzYWtmUjNibFZkMTNwck10dUklMkJ3c2UlMkY2TDNBaG03bjAlMkZVJTJCaTJ6YWZ6a0ZPZ3E5JTJCZGowWkZPTTRrM1pEdHJHTkVuaHp0N3YzV2JXUFU4YkpweWF2VnBkdVp1YzJlTldPTmIyJTJGMlh0WE9ZMlZVN3JBNmhuTzlSdUpTJTJCcjFoTzFsZ3VHSmJ1WXoyZXh0dnYzZnpMUFUlMkZ3Q0VTVTlRa2tra3BTU1NTU2xKSkpKS2YlMkYlMkZSOVZXZjBpd2l1M0ZmOUxHc2V3VCUyQjZEN1AlMkZBeXh5MEZtdW5INnhQRE1wZ2QlMkZiWkZUJTJGd0RvT3glMkYlMkIyMFFwMGxDMDJDdHhxQUx3RHRCNEo4Rk5KQlRWb3Z4JTJCbzRqdmJMTEdsbHRUdVJNc3NyZiUyRkFOSml6JTJCaFpEcU1PJTJGRXlDWDJkT2M2dCUyQmt1YzFnbXQlMkIzJTJGaGFQVGVvWjVzNlIxSVpyQkdEbGtOdkklMkJqWGNZWXl4JTJGN3RXVjlCJTJGd0R3JTJGd0R3bHlEMUxxV0gwanEyTjFPNTVyeE9vZ1kxcndDNEM5dXVQNm16ZHQ5V2wxdjZUJTJCYiUyRkFGZEZTJTJGMU15cSUyRjJWVGh1c2ElMkIydHN0Mms2c1B1WTczQnJtJTJGbzNWdjJmeSUyRjNGMFM0VEF6cSUyQm0lMkZXRHF1S0duYmhXT3lhNjJEVVVscmNteXVsa3RaNmYyZXkxOVd6OCUyRjJMczJaJTJCRll4MWpMNnl4Z0JlJTJGY0lBSTNDWGZOSXFaWDN1cnNxcXJaNmo3VHFKZ05ZMlBVc1BQMGR5cGZXSiUyRm85Tk9UMnhyYXJIVHhzM3Raa2YlMkJ5NzdWUjZ2OWJlamROc2JrYjNaYnFtMnNmVmpnT09ocmRaRmxqcXNmZlhzJTJGbXZWOVYlMkYlMkJEWEhkWiUyQnV2VTh6QTZpJTJCajAyWTF6YXdhWkx0MkxZMjF0bHRiN1hPYjZqNiUyRndEUjFWJTJGelYzNnY2clBWWUZVJTJCaUNzNVBTN2NkNDNPMldVT0I3N2QxWCUyRlQyN2x3dlZuTnlLSzhkMTVxNmhpajIwN285ZGczREhkVzltOXpMdjhBUSUyRjRXdTcxSyUyRlR0cjlhcXpKJTJCdUhWOHRtUjB6Tm95THZzWFU4TnI3Y2R0am10TjFKOUslMkIycG9kc2JrMSUyRm8lMkY4QTBZc25HNnRlJTJCbkxaYmRYWFk2cHR0QUROd3Vjd21odjJjV2J2MHRuciUyRnBLbmZwS2JLZjhBdHNxRDFEdnJqbmZWNzBjS2xsZGd6Z2JxamY3UUhCM3Ayc0cwc2I2bHYwJTJGZlo2VEVjWmc2MzB4ejJ2ZXpLNmpWYmZoVnRmNmJpUSUyQnhsdG1OWTdhMno5SnMzVnUlMkZ3YXl2ckhoMSUyQmhoZEt2M1h1YmpCaFk5d0RiSHRQcE9kWGtPSDZ0MURkJTJGUnNsJTJGNkMlMkZ3RG9tVjdGZzlXYyUyRkYlMkJxM1JMNmJpYmVuNVdWamg0bGxqZHhiZXhsdGYwNkxhOXZ2cCUyRk0lMkZ3QUZaJTJGaEV1cW4wcjZsZlhNOVdZenB2Vm9vNnd4dmNiQmNHajlMdHIwOUxMb2o5YnhmJTJCdlUlMkZvZjVtejlhdnJKZDAlMkIyakJ3SEFaVHJjZDE3aUE3YlZaYTJuWTBIJTJGQ1h3OXYlMkZBQWRmJTJGV2w1emlkUVo5WmNZM2wzb2Rkd2cyejFtSFo2eldmUXYzdDIlMkJuazAlMkZ3Q24lMkZ3RFJmOHhmNkRmMURxdlhHWiUyQmU1dHpzaTdHZDZsbTJrUHNxTmJxcU9HMSUyRjRDdXhucHQlMkZTNyUyRjlJOUFMalIxR2g3Zjk2JTJCdUpKcEExS1pqMldORG1PRG1uaHdNaEpheVNTU1NVJTJGd0QlMkYwdlZWbjlhaXJGR1lTR2pFY0xYdU9rViUyRnpkNUolMkZkWlUlMkZ3QlglMkZyYTBFSE05RDdKZjlwRTQlMkZwdjlZSFgyYlQ2bW45UklLY0U5VTZsZ1huSkR2Mmwwak4lMkZTNDk3UzM5QzUzMHNPeXhuJTJCQmMlMkYlMkJoNVA4MyUyRjJreWZTJTJGUjVObFBydjE2dXdjekV4c1BIRm96TEJSV0h6NnJyaVdNOU91djZIczlUM3ZzZXVlNkI5YnVvWkY1eEJVODRCREMlMkJ0b1pZVzFQY3pHJTJCMDJHeG03MUdiMlhQMmZvZDdQNW10Y3QxNjdxJTJGVDg3R2RmayUyRmJzY1dISTZWMU5yUU5HdTNPMk5aNmZwNUZOOWRUY3JIM2VwUjZmOVJLd1JZWHpoS0V1R1lvJTJGeGZTTXZNNmxabEYlMkZWZlNvYlUxMVE5TUd5cUxmYSUyQnJQOVBKc3I5S3owOW42YkdxJTJGN2RXTjF6OVZ4QzNLZlpUMCUyQiUyQlBVeUdnNU5JYVBkVTdlelplN0t4UFIlMkZSNUd5cjFzWDlEYjYlMkZ3RGd1WnglMkJ2MzUyYmU0V053ZnQlMkI5dGIybjIxbXphJTJGMDdYbjIlMkZwN3FtVmVwNmRiUDB2cWZvbHFaRDdtWTkxZURtWGg5cEJBWkRHalQ5YXd2YiUyQmtwM1clMkZwMk1ka2ZwYXYxYiUyQlhVYjBXdWxUZVAyM2g1RGkzSkwzVVlXVFl6bHpiS24xc2M1ck43YmFNM0ZaOXB3OHhydlN2ciUyRlFmMGltNnV2SDZ2WTdHNmhmUzJteDFXRllhcTdibmslMkJvMnIwcktQVGE3YnVzdHhYMjAlMkJ6JTJCbGY0UlclMkZxUFhlTTQwM3MlMkZROUxwZGJRNHY5N1dsNERjVzFudWQ2UHFmckgyZTluc3pNYXZOeCUyRnM5JTJGMmhBNmk1cjc3SFpMSDI0VG4xVzQlMkJVd2oyUHZhM0pkajViZnphSGI4bjdGayUyRjRQOVl4UDB0WDh3dWxxYVdmYjFDelo2R2FNMzA2MjJXREQlMkZTVjFtcDNzZlk2dGpXT3NZMXRmODc3NmElMkZUUTdzMjdxRk5WSXJxd0FmVXNiWlJYdDlTME45S3kxdFg4MyUyQmdyZSUyRjFzZWolMkZBRTFsektsdGREdGJpOVpKc3FxYlRhQlhkUzBUYlc2OFB5Y1V4Tmo4cXJJYlIlMkZwUFUlMkZTYjYlMkZUeXY2VldmMHF2T3J6bXNZYXNuR3pIbWs3Z3gxWmE2SzJYUjdzZCUyQjV2Nks3OUpYaTNiUFUlMkZWOGk3MVJSVTUlMkZXYUxNdjZrWWo3U0dYOUw2ZyUyQnFLJTJGb3NyeW1ldXgxY2Y0QjE3ZllzcnB1UG1OeGZ0ejYzUGN3bDlEV0RRMnNJcVprTkolMkZOWmU2bHVSNmYlMkZBQVglMkZBQVMxZjJwWFgwdnElMkJKbG43TGZrVlZ0YTNaQWZsNDkyOW15biUyRkE3NnJMcTg2ciUyQmJvJTJGNHF5aFZydW9aZlNlazRsZG1NMTJQZTIyN0Q5WFFCdHZwdHUzJTJCN2Q2VnI2NlhmMlBVJTJGd2lTbnN1cW5EeUxNZkZ0TVpPUmolMkJyWFNQZUhGc2VvMmw3ZzMxTGElMkZWJTJCaCUyRjJvcSUyRndmcWZwRnpuVmNkOXVEWml2YXh6RFpYYTF6enRaYVhCMUxXJTJCdiUyRmdiJTJGWlZYaTV0djgzJTJGUnNqOUFzTHFmWHYyajAlMkZwWHFQRmVkZ051cmZhMTBGM3Vxc3g4bHY4QW8zT2J2cmYlMkZBTVQ2biUyQkZRcXVxNTklMkZVUmVjMXpiN0NIWE1jOGh0bXc3bjQ3djhCdHVjUFViNnY2UDlMZDY5aU5vUzlINlZrMFp6Y3BqM3RxcWVXMUFBdHVjJTJGOEFtN01leWh2Nld2WiUyRk5aWCUyRkFJRXVnenVrMTRlTGlONjlmYmk0OXU2d2dCanlXTmI2ZFA2SU9hNTJWNnZ0MjQ3UDBkRCUyRkFGUDBhampkYzZrQmVla1lRZDFESXMydHNaVlpiZFZYdDl0WXFzRzklMkIzJTJGVFBaJTJCbCUyRndCQ3NhanBYViUyQnRYMlp3byUyRmFsN1d1dnY5UzBNZWEyJTJGVDIlMkJ2WjdtMWUxajZHVjc2UFolMkZwSzBORTdhdnBIMVo2OW5kVTZUaTRtUDZtVlprdEJkYmtQM3VxYldUUmtqS3VZR2I5dDFlNnYyNzc2clA5SXV5dzhWdUpqdG9hUzh0a3VlZVhPY2R6MyUyRjJuTHliNnZkWnY2RGpES3dtVnQzbHpic1p6M1ZzWmNIbHVUZ1g0OTloZlJZeHV6SnduJTJGem5zeUtyTEx2OEgydlQlMkZyOWhPREslMkJzTSUyRlp1U1drdnJ0RmpDMXdMbXZyJTJGV0txVyUyRm0lMkJ6YlolMkJrUlI0dlZwS24wM3ElMkZUZXE0N01ucCUyQlF5JTJCdDdXdkcwJTJCNEJ3M045U3MlMkZwSyUyRiUyQnVOVnhCVCUyRkFQJTJGVDlWVE9hMTdTeHdEbXVCRG1uVUVIc1U2U1NueGY2eDlDelBxdDFFQ2l4N0dNZWJlbjVRMGNhbmV5eWx6dm91dG8zTXJ1WiUyRmhhdjBucCUyRnBGVXJ5YU1qRnZyenBzNmRrUGJabVVzSHZ4N3pGYmVyNGY3cmJMUDZXeiUyRkFFbG4lMkJpdll2WSUyQnU5TDZmMVhwbDJIMUdHME9HNzFTUTAxdUgwYjJQZDlCN1AlMkZVYiUyRndCR3ZIOHZwRjNUNyUyRlFwY0g1TkllYTdhejZsZVhTZDIlMkJ6SGpkVzcwcUhiTW5FJTJGd2xTWnJFMk51emZqS0hNWSUyQkdmcHpSMm4lMkZMOUg5NXdNJTJGQnlPazVoeHNnaXl1d2I2cm02MTNWSDZOMVglMkZBS01yVzEwanFicm1IRHlIbDhNaGpZM0c2c0hkNlBPMzE4ZHY2ZWl6MDdmVzlQMHYlMkJPSGlQeGM2bjlqNTUyWWRoM1ltVnk3RnRQNSUyQnZ2Zml1JTJGdyUyRiUyRkIlMkZwZjV6ZWhZdjFhNnBWazVXTG5oJTJCSlpoTUw2cm1pV3ZzQlk2dDFGbjBuMU5ZNzdUdnAlMkZTZjhXbmlqcU5Xbk9Fc2NqR1E0WkI3T2lnMGZWN0xmMDFycjhycVIydGV6M1hQYkJ4NjdYc1l6YXl4amJNbDltMzglMkY5SiUyQmwlMkZTJTJCcHpydlV4TVdxdnFOVnVKa3N4MzQwMnpXNW9vc2JkU2NpZzcyNU9IZDlxWTZ2JTJCYzJaT0xUNk5uODh5M2U2WDF1eWs5TmV4em5ZZCUyQlBkaTJNYzFsVHhsNHp0em5XdTNiS2ZXWlpYYnM5VDA2ZjB5cGRZNkoxSHIlMkZWSDlXcnRwc3g2bU1xRkRTJTJGMVdpc0YzMFhOYTUlMkI1NzdiZjBleXolMkZSViUyQnFuSHdXMVJvdERGNnhheTQ5VHZpa3M5T0hOQkFjOWcyc2ZjMW03WnUyJTJGb0clMkZReHYzUFNUOUx3MmRUYmxNJTJCMVcxc2REaXhvTTJ2dTNmMDkzNk90M3BPWnN1cnAlMkZRNUglMkJqJTJGd2FKajRHWGYwNTJaamVwUmpibU9yeXdOek5qSHVsaDlNZWc1ek4lMkIxbHJuJTJGNFI5ZnAlMkZwRll4Y0hENmV5Nm5JdGRTR0FPdGRsRndobGglMkZSdUhwTjNQcGJ2OEE1eG5xZW1nRk9aMSUyRkR5TVc3N1QxRElPUXk0dnJhOTFicUMwMGVuJTJCaVl4JTJGMDZOcnFuZXYlMkZBSWYlMkZBRWoxV3hhRzJzeEtPbzlNdTZpSzMyVVllT0xITUwzdkxyTnJybXUzJTJCbHYlMkZBUFJpMWN2cGwxUFVxVzNOZmg1VkozNCUyQk5tTzlYRXVySHUlMkZWN3QxakdNc1lmMG5vUDluJTJGQUFOcXY5UTZXODR3NjMwaG4yY3VGZDFqY1lHeXNqUzZxekx4bWl1M0Z5YWR2ODk2TlglMkJsJTJCMmVxaFNTQlExdSUyRndlZDZ6OVglMkJydEZKSDFkWmoxYWdFTnNxWnVJQjlFUHN2YmtXN1dqNmVTJTJGNmZxJTJCaiUyQmpXT2NiTnc4aG5xZE54cTN0aXpaWVhPYTRUeTdma1dibU5kJTJGT2Jmb2Y0UmRwVDFmcUhVczFyYyUyRkxma3R5UlUydkdhNGJTSE5lUHRGTDNlbDZWbUxsVmVqWjdmMG0lMkYxY2olMkJaJTJCMFdidlNmcW4wJTJGcTFlVGpkUklkbFZzcHNxY3h3QnFjOFBiZlclMkJyWDM3NiUyRlR0ZiUyRkFLSDBiY1M2djJXSlhxdWxqNFlDWEVEWnF1cnhuMWR4WGRSb3N1dzc4aG5YY1I1ZFNXdTIyT3JZMmJxc2RuMDNaRlR0OTMyT3oyWldMNmxWTFBXb1hTMTlIenVwOVBxJTJCc2ZUTVl0eThrbjdaUlhEQ3k1aGRWYjFERXJlJTJGOU5VNzlMdnhIYkxjbGo3S2Y1cklzcFhFNW1QbTlKNnElMkZMcWE4MllybXZmVkpIcVVzZCUyQmd5cUxhdGxuMGElMkYwM3BQOEFXeExtZXJWJTJCNWolMkJ6JTJGVTdxdlIlMkJwOUNvdDZRTmxMSmJaUTV4ZFpYYjlPMWw3M1M5OWpudTMlMkJxNyUyQmUlMkZuRW1ONTdxdjFYNmI5YyUyRnE5OW94V054JTJCdVl4Y3l4N2c5cmpjMlBYeE01dDM2eDZkam10OUgxdjAyTCUyQmk5TCUyRkNWV2N6OVZQcjUxbnBQV1g5SCUyQnN4dXk4Ykl0Rk5veUR2dG90OXRJY04lMkYwNkhlMzE2UCUyRkFFS28lMkZ3QUo5cDloYlhXMTdudGFBOThiM0FRWFFJYnVQNXk0MyUyRkdCOVEyZGZwJTJGYVhUV3RaMWlsb0VHR2pJWTMlMkZBUGU3JTJCYXlHJTJGOEFhZkolMkY2emIlMkJpJTJGU1VKVDJUSzY2eHRyYUdBQUFCb0FFQWJXOGZ5VkplY2ZVYnFQOEFqSFBWMzFkWHhNako2YyUyRmF5MjdMYU1kMUphTmdzb0R4WDlvOXJmMHphVzIlMkJyJTJGUGVwJTJGcFBSMGxQJTJGOVQxVkpKSkpTRE5MJTJGc3I5Z2VYR0FCVzFybmFrRDZGMzZQJTJCc3VBd3VtViUyRldYTnJ4SHZjeW1xaDJTN0lxTG5SYSUyQjdKZmoyVVBjR3RxZHZ5ZlZzcFo3SyUyRlElMkJ5MSUyRm9hVjZGZmowNUZacXZZTEt5UVMxM0VnN20lMkY5SktpbXZIcHJvckVWMU5ER0R3RFJ0YWtrRWcyTkNObnhEcWRHYjBMcnUzcUZESFg0MXJMVFdHeFZleVI3NjI2dGRWbU5hJTJGMVAzTFBXcjlpMmNtenJwWTV0ZEI2Z3pwTDdLcTdXR1hQcXFmNkQ4SEljMWdaOXVwbyUyRjdUJTJGem1WWCUyRkFEWHFyMGJyT0YwJTJCNDEzNWJXVkZnYzA1a0QxV01QMDZhcmkxN3EyNVA4MVolMkIlMkZYJTJCaSUyQm5hdVR5c2ZxblFlb002aDA2bDkxZVcySDRqd2YxdWhnYzcwTHEzRGRWMVhHeG03OGQ3JTJGd0NmbyUyRlFYZnBLN0dJUkZYNHMyZk43dkFlR3BSandrOTNJeU9qNVZEbk42VTUlMkZVTWElMkZmbFlsTEd1TG0lMkJxeG5wZmFkckcxdGRrMzAyVWZhdiUyQnMyZW4lMkZOclElMkJyZDklMkJObE5kZlMlMkZEdURYTXk4ZTdSMWJtamZKJTJGa05obDlOdjU5S3RPZUxiTURPNkZrdEp0ZSUyQiUyRkNzdExoJTJCaGNheG00bVk1b2M1dExNcjA4WEszc3Q5SDdUUmQlMkZTcVBXVzExZkElMkZhJTJCT09wZE9jNmpxZU1ObGxZamNkdnVkald0OXpmVnIzYjhkJTJGJTJGb20lMkYxRSUyQjJGNWpwZjF1NkRqOVJ5TEtjcXUzcGVhZjFyRjFhR2glMkJoeW0wWE1yOTFUZlprc3IlMkZuY2IlMkZTV1k5YkZUd2Z0ZlVPcGRRd1JadnhzRExPTGgydUJleHJMSDIxWXpMTEFIdjlLM1pYJTJGd0FIJTJGT0xVdyUyQm5mVSUyRjZ4VkRCNmxnNCUyRlR1dEVGckxhRyUyQmdMWEQlMkZDNDJ6WTJ4JTJGJTJCbHc3ZjAxZjh1cjlPbiUyQnJveVBxbGxaZlRoaE1zcUJaYmxXaHhGamFoRkxMV0UlMkIyN0hadjNzYnNyOUg5TjYzJTJGQmpXMUw5SjlQRGElMkY2dWRjeCUyRlU2VGE3YlNINnV4TFQ3VzBPYzAlMkZvNkhUNm1GbDFmelglMkJuVjluMVI2djA3YmJoWnYyemE0dzE0OUswVms2ZW5rTWVXUHUyZnpuOHhWYiUyRndmMEYxR1ZoNG1kU1czTUQydmJBZkEzQUg5eHlvWW1SWjBvJTJGWTg5NCUyQnp0Qk5HUzdRYlIlMkJhOG42T3olMkZ3SCUyRnR0THlSYnlQVWNYTXF6em5ZMk5maDlUcmJaYmtrVnl4elFCdnptJTJCbTA0dnI3ZjBkJTJGbzJmclglMkJEJTJGVFYycmMlMkJybUgwYnFIVDhmY1clMkZiMk5lZDFGcm1Xc2FYT1pMZlJMSDAxVyUyQnB1OUwlMkJhWFVpQ0pIQldHZWdNNmQxSWRVNld6YkppJTJGRmJBYVd1UHZkViUyRlYlMkZuUFRTdE42VTQlMkZXZnFQazVqaFJqMkJvckRyTVhMT2pxbmdlMm0xck5yblYzZTFsbnBmOGIlMkZPMVVybSUyRnFMbFpIMWElMkJzZVQwM0l3TGE3czk3SzhuRnJZJTJCeDlmcCUyQnA2T2ZqdXBaNlZ2VDMlMkJyWTNJJTJGMFA2T3luOUYlMkJqWHJLU0NGSkpKSktVa2tra3AlMkYlMkY5WDFWSkpKSlNra2trbEtRTTNEcHpjZDJQYnVBZEJhOWhMWHNjTldXVlBiOUN4amtkSkpUeEhWZnE0T2w1YmMlMkJxNTVkbHZMTHEyRGF4MWxwclk3SUZiUDVpNjNiNzdLZjlIJTJCayUyRlFycFBxJTJGY0xNQVZsZ3J1cGNXWE00ZHVCajlJMHk3ZiUyRjFmMDB2ckIwaG5WdW5QbyUyQmprTW16RnRHanE3UUMxdGxiOU5qdmQlMkZxeFM2ZFdNajB1cEg5RmZiWHN5cXdJYWJHd3gzMCUyRmYlMkJpZlc5bjlSSG9wd3ZyQmg0ZUYxViUyQlhrVSUyRnFtWlFRTFNCNmRlWXh3dXg3SEFmcEd2czlMJTJGQiUyRjhKNml2V1ZaMmRqNHZWOEZnZmJrWSUyRm81V084aG9zcmRyMyUyQmk2dDducmVmV3g4YjJoMjBoelpFd1I5RnclMkZsSU9MZzQlMkJJNjUyT0N4dDd2VWZXRDdRNCUyRlNjeHY1bSUyRjg5SzFJdWpZajhQcFdMaldEYSUyQnVzQjdTWkljZmM1dTZYZm5GVzMxc2VJZTBPRXpCRTYlMkZOU1NRVXBKSkpKU2tra2tsS1NTU1NVcEpKSkpUJTJGQVAlMkZXOVZTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJGJTJGWkFEaENTVTBFSVFBQUFBQUFWUUFBQUFFQkFBQUFEd0JCQUdRQWJ3QmlBR1VBSUFCUUFHZ0Fid0IwQUc4QWN3Qm9BRzhBY0FBQUFCTUFRUUJrQUc4QVlnQmxBQ0FBVUFCb0FHOEFkQUJ2QUhNQWFBQnZBSEFBSUFCREFGTUFNZ0FBQUFFQU9FSkpUUVFHQUFBQUFBQUhBQUlBQUFBQkFRRCUyRjRUa2phSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMd0E4UDNod1lXTnJaWFFnWW1WbmFXNDlJdSUyQjd2eUlnYVdROUlsYzFUVEJOY0VObGFHbEllbkpsVTNwT1ZHTjZhMk01WkNJJTJGUGdvOGVEcDRiWEJ0WlhSaElIaHRiRzV6T25nOUltRmtiMkpsT201ek9tMWxkR0V2SWlCNE9uaHRjSFJyUFNJekxqRXVNUzB4TVRJaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwNFlYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SSUyQkNpQWdJQ0FnSUNBZ0lEeDRZWEJOVFRwRWIyTjFiV1Z1ZEVsRVBuVjFhV1E2UlRjeE9UVkZOVFkxTnpNek1URkVSRGxGTnpKR1EwRTJRamt3UVVaQlJqVThMM2hoY0UxTk9rUnZZM1Z0Wlc1MFNVUSUyQkNpQWdJQ0FnSUNBZ0lEeDRZWEJOVFRwSmJuTjBZVzVqWlVsRVBuVjFhV1E2UlRjeE9UVkZOVGMxTnpNek1URkVSRGxGTnpKR1EwRTJRamt3UVVaQlJqVThMM2hoY0UxTk9rbHVjM1JoYm1ObFNVUSUyQkNpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwNFlYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOGVHRndPa055WldGMFpVUmhkR1UlMkJNakF3T0Mwd055MHhPVlF4TkRvMU56bzBNUzB3TlRvd01Ed3ZlR0Z3T2tOeVpXRjBaVVJoZEdVJTJCQ2lBZ0lDQWdJQ0FnSUR4NFlYQTZUVzlrYVdaNVJHRjBaVDR5TURBNExUQTNMVEU1VkRFME9qVTRPakExTFRBMU9qQXdQQzk0WVhBNlRXOWthV1o1UkdGMFpUNEtJQ0FnSUNBZ0lDQWdQSGhoY0RwTlpYUmhaR0YwWVVSaGRHVSUyQk1qQXdPQzB3TnkweE9WUXhORG8xT0Rvd05TMHdOVG93TUR3dmVHRndPazFsZEdGa1lYUmhSR0YwWlQ0S0lDQWdJQ0FnSUNBZ1BIaGhjRHBEY21WaGRHOXlWRzl2YkQ1QlpHOWlaU0JRYUc5MGIzTm9iM0FnUTFNeUlFMWhZMmx1ZEc5emFEd3ZlR0Z3T2tOeVpXRjBiM0pVYjI5c1Bnb2dJQ0FnSUNBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNlpHTTlJbWgwZEhBNkx5OXdkWEpzTG05eVp5OWtZeTlsYkdWdFpXNTBjeTh4TGpFdklqNEtJQ0FnSUNBZ0lDQWdQR1JqT21admNtMWhkRDVwYldGblpTOXFjR1ZuUEM5a1l6cG1iM0p0WVhRJTJCQ2lBZ0lDQWdJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQZ29nSUNBZ0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenB3YUc5MGIzTm9iM0E5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmNHaHZkRzl6YUc5d0x6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOGNHaHZkRzl6YUc5d09rTnZiRzl5VFc5a1pUNHpQQzl3YUc5MGIzTm9iM0E2UTI5c2IzSk5iMlJsUGdvZ0lDQWdJQ0FnSUNBOGNHaHZkRzl6YUc5d09raHBjM1J2Y25rdlBnb2dJQ0FnSUNBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwUGNtbGxiblJoZEdsdmJqNHhQQzkwYVdabU9rOXlhV1Z1ZEdGMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFlVbVZ6YjJ4MWRHbHZiajR4TURBd01EQXdMekV3TURBd1BDOTBhV1ptT2xoU1pYTnZiSFYwYVc5dVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwWlVtVnpiMngxZEdsdmJqNHhNREF3TURBd0x6RXdNREF3UEM5MGFXWm1PbGxTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBTWlhOdmJIVjBhVzl1Vlc1cGRENHlQQzkwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBPWVhScGRtVkVhV2RsYzNRJTJCTWpVMkxESTFOeXd5TlRnc01qVTVMREkyTWl3eU56UXNNamMzTERJNE5DdzFNekFzTlRNeExESTRNaXd5T0RNc01qazJMRE13TVN3ek1UZ3NNekU1TERVeU9TdzFNeklzTXpBMkxESTNNQ3d5TnpFc01qY3lMRE13TlN3ek1UVXNNek0wTXpJN1F6QTFRVEU1TURSR1JqQXdRVUpFUXpBMU1VSkVSa0ZHTURJd05FVkJOVEU4TDNScFptWTZUbUYwYVhabFJHbG5aWE4wUGdvZ0lDQWdJQ0E4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02WlhocFpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzlsZUdsbUx6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCUyQk5EVXdQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQak15TlR3dlpYaHBaanBRYVhobGJGbEVhVzFsYm5OcGIyNCUyQkNpQWdJQ0FnSUNBZ0lEeGxlR2xtT2tOdmJHOXlVM0JoWTJVJTJCTFRFOEwyVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VG1GMGFYWmxSR2xuWlhOMFBqTTJPRFkwTERRd09UWXdMRFF3T1RZeExETTNNVEl4TERNM01USXlMRFF3T1RZeUxEUXdPVFl6TERNM05URXdMRFF3T1RZMExETTJPRFkzTERNMk9EWTRMRE16TkRNMExETXpORE0zTERNME9EVXdMRE0wT0RVeUxETTBPRFUxTERNME9EVTJMRE0zTXpjM0xETTNNemM0TERNM016YzVMRE0zTXpnd0xETTNNemd4TERNM016Z3lMRE0zTXpnekxETTNNemcwTERNM016ZzFMRE0zTXpnMkxETTNNemsyTERReE5EZ3pMRFF4TkRnMExEUXhORGcyTERReE5EZzNMRFF4TkRnNExEUXhORGt5TERReE5Ea3pMRFF4TkRrMUxEUXhOekk0TERReE56STVMRFF4TnpNd0xEUXhPVGcxTERReE9UZzJMRFF4T1RnM0xEUXhPVGc0TERReE9UZzVMRFF4T1Rrd0xEUXhPVGt4TERReE9Ua3lMRFF4T1RrekxEUXhPVGswTERReE9UazFMRFF4T1RrMkxEUXlNREUyTERBc01pdzBMRFVzTml3M0xEZ3NPU3d4TUN3eE1Td3hNaXd4TXl3eE5Dd3hOU3d4Tml3eE55d3hPQ3d5TUN3eU1pd3lNeXd5TkN3eU5Td3lOaXd5Tnl3eU9Dd3pNRHRFTkRZek4wTkNPVVEwTVVFeE1FSkJOMFZHTlVWQ1EwUkNOak14T0RNeU9Ud3ZaWGhwWmpwT1lYUnBkbVZFYVdkbGMzUSUyQkNpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWSUyQkNqd3ZlRHA0YlhCdFpYUmhQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBbzhQM2h3WVdOclpYUWdaVzVrUFNKM0lqOCUyQiUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFDQVlHQmdZR0NBWUdDQXdJQndnTURnb0lDQW9PRUEwTkRnME5FQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVKQ0FnSkNna0xDUWtMRGdzTkN3NFJEZzRPRGhFUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQlJRSENBd0VpQUFJUkFRTVJBZiUyRmRBQVFBSGYlMkZFQWFJQUFBQUhBUUVCQVFFQUFBQUFBQUFBQUFRRkF3SUdBUUFIQ0FrS0N3RUFBZ0lEQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFDQVFNREFnUUNCZ2NEQkFJR0FuTUJBZ01SQkFBRklSSXhRVkVHRTJFaWNZRVVNcEdoQnhXeFFpUEJVdEhoTXhaaThDUnlndkVsUXpSVGtxS3lZM1BDTlVRbms2T3pOaGRVWkhURDB1SUlKb01KQ2hnWmhKUkZScVMwVnROVktCcnk0JTJGUEUxT1QwWlhXRmxhVzF4ZFhsOVdaMmhwYW10c2JXNXZZM1IxZG5kNGVYcDdmSDElMkJmM09FaFlhSGlJbUtpNHlOam8lMkJDazVTVmxwZVltWnFibkoyZW41S2pwS1dtcDZpcHFxdXNyYTZ2b1JBQUlDQVFJREJRVUVCUVlFQ0FNRGJRRUFBaEVEQkNFU01VRUZVUk5oSWdaeGdaRXlvYkh3Rk1IUjRTTkNGVkppY3ZFekpEUkRnaGFTVXlXaVk3TENCM1BTTmVKRWd4ZFVrd2dKQ2hnWkpqWkZHaWRrZEZVMzhxT3p3eWdwMCUyQlB6aEpTa3RNVFU1UFJsZFlXVnBiWEYxZVgxUmxabWRvYVdwcmJHMXViMlIxZG5kNGVYcDdmSDElMkJmM09FaFlhSGlJbUtpNHlOam8lMkJEbEpXV2w1aVptcHVjblo2ZmtxT2twYWFucUttcXE2eXRycSUyQnYlMkZhQUF3REFRQUNFUU1SQUQ4QTclMkZtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtcmxISTJ1dFhuNldsdG5GRVNiMFJGU3A0MVdqRDVxM0xDQmFzbHpaczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlEdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMkUycmowTHV6dkY3UHhmdFVmOEFYUExEbkMzWEkwZXdkcE9rVEs0UDA4VCUyRkFNSzJFYzFUTE5nYXhtRTlwRklEeSUyQkVBbjNHeHdUZ1YyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYlMkYlMkYwZSUyRjVzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFlVZVpwZlIwYTRrcFVBeDE5aDZpNzRiNFg2NUNialI3NkZWNUZvSktLZTVDMUdJVkxkRHVHaHVYczJJS09YNGdmc3ZHZHglMkZza0t0a2l5RDZiY3RISGJYZ1BJbU9DNHFPcFhqNkUxZmY0TW00TmR4a3BjNzcwQnZObXpaRkxzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5THYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14Vm9rS0NUMEclMkYzWmdhaW9OUWVtQU5adWhhV0x5RTBMbFkxJTJCYkduNnNXc3BBOFFBJTJGWiUyRlVjVlJXYk5teFYyYk5teFYyYk5teFYyTlpRd0tub2RqOU9Pellxd0RUNGlpUFpzYSUyRlZMbTVzajdJJTJGNzZMJTJCT1RYVHBqUFpRU3Q5cGtBYjVyOEp5S1hxZlV2TU9wSVFPRnhGRGZvUDhxRnZUbCUyRjRRNUlORGtyRlBBZjhBZFVoSSUyRndCViUyRmlIOGNuTGVBUGN4SE1wcm16WnNneWRtelpzVmRtelpzVmRtelpzVmRtell5V1JJbzJra1lLaWlyTWRnQU1WWDVzalRlYUdsMUN6c2JTQU9MdVgwdzdrMTRLQ3p5QUQlMkJVWkpCaXJlYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYlMkY5UHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14Vm80Q1hVRmE5ZTBDYkpSV2tyJTJCMFJXbE1IWkVKNVd0UE10ekU1JTJCR1lKS255SzAlMkY0a3VFQzFaZU0ySVcwb2tqRlQ4UzdIJTJCdUw0Rll6NTJtTVduMnREVGxjcFg2RmJESFI1ZWNDSCUyQlpldnl3bCUyRk1NOGRKdG43TGRKJTJCS3Zncnk5Y2NyT0o2OUtWdzlFOUdTNXMyYkFoMmJObXhWMmJObXhWMmJObXhWaTNtaUZVMUxTYnh2c1N0Sll6SCUyRkpuU2klMkY4QURZcG9FekxjeHExVDY4RkdyJTJGdnlFOEdyZ2p6ZEMwbWhYRXNZJTJGZTJwUzVpJTJGMW9tRGY4Und0dEpSSGRyY0RhTmJoWlZJNmVuZElHJTJGNG1jbkhlSkNEekRMODJiTmtFdXpaczJLdXpaczJLdXpaczJLdXJrWjg0M1poczRiVlRRenZWcWZ5cnZnM3pITlBiMlVNc0x0R0JQR0pTcElxakVxUlViOWNoJTJCdlNTdnAwSmxjdkpDTHlNdXhKYjRKTnZpJTJGMVN1RUJWdmthWDlMJTJCWmJtOFN2MWZUYmYwWTYlMkY3OGxQeEglMkZnRnpwZVJ2eVBiV2NYbHl5dWJXQklYdW94Sk9VRzd1S2prNSUyRmFPU1NveFBOWFpzMmJBcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRiUyRlU3JTJGbXpac1ZRMm9zeVdNN28zRmxRa01PeEdQdFpoUEJIS0NEeVVFMDhlJTJCTTFCZWRqY3I0eFBUJTJGZ1RoVjVjdkJKYnBHZXJnRWZNRGNZYTJQa3FmWnMyYkFyczJiTmlyczJiTmlyczJiTmlyc2hmblJHdGI3VDlUWDdMY29KRDJxRHpTdjN2azB3bDgxV0Rham9kekRHS3pSajFvUjM1UiUyRkZUNlJ0aEhOWGFWY3JLc1V0ZnREaTMwNGRaejd5cnFQclFDSW5jZE1uc0VucVJLJTJGY2pmNTR5VmpQNWd3dEo1Y2tjRCUyQjVtaWslMkJpdkglMkZBSTN3RDVSbkV0cHdyV2d3OTgzUkdieTFxaXFLbFlHa0ElMkY0eCUyRnZQJTJCTmNobmtlNUJJVUdvUFElMkZQRUpISjZYRzNKRmJ4QU9QeE9BMWlYN3NVd0lkbXpac1ZkbXpac1ZkbXpac1ZVYnFCYnEybXRtJTJCek1qUm41TUtaRExQNHJDMlVWcTlxWWo3U1dzaFduJTJCdHhPVG5JVkc0dHRXdmROYWlpSzdGeEdEdFdHNlRpJTJGd0R3TXVTaHpSTGt5JTJCMWxFOXZGTVA4QWRpSzMzZ1lzY0t0Qm1EV2h0cSUyRkhiT3lNcDY4U2VTSDVVT0dweUo1cFlkZTNtb1dQbVc1S3pIMHBJbzJXTnQwQTNXdjB0czJENzN6SjZGZ3p4cXFYcEtwSEc5ZURNeDdFWVhlZDQ1VmVDNGdQQ2RZeXF1YTBJNXE1VmdPdjJjQVc4c1dvMlFNcWh3d295SGNWeVFGaFZPTHp2ck5yZGY2ZkZITEZYNGtWZUJIJTJCcjElMkY0YkpscCUyQnQyR3FXclhGbklDeUtXZUp0blVnVjNYT1A2N3FGamFGTEhVcnByZWN5JTJCbFphanhQRG1OMWpuOER2OEFhJTJCeSUyQklhWHJjbHJkdFozNE5yZlIxVVNvZmdlbzJLMDZjJTJGOEFnY0JDWHIlMkZsdlhScmRuems0cmNvU0pGWFlmTWJuRHpPViUyQlRyODJlcUFPUUlwYUJxN0FWMnIlMkJPZFRyaVJTRXA4ejhSb045STVBV0pQVjVIWUQweUhyJTJCR1FnM050cTFsY0xhengzQ2ladmlpWU9LelFvOUtqYjdZem9XcVJldnB0NUFPc2tFaWo1bENPbWM2MCUyQldDSzBqOU9OWW81SVlwJTJCRWFoUVdCZU5qUmFmRWNNVlR2VGIlMkI4MGZ5SFozRnVnRTl2U09SSkJVcVBWWlclMkJFSHczeVZhWGVDJTJGc29idWxHa1g0MUhRTU5tSCUyRkJaekMlMkIxaVRUYmFkWlVranRKanprUXFTS3FObTVmc2RNUGZ5cjElMkZSZFQ4dnJhMkU1TjVDOGtsM2JTTVRLcGtjdHolMkJMN1NQOXBlT0E3ZkZrSWtna0N3T2ZrejdObEExeThERjJiTm14VjJiRUpMeTFpbmp0cEpWV2VhdnBSRWprM0hjOFY2NHZpcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlYdiUyQmJObXhWcGxEcVViY01LSDVISVBva2pXc3N0cXglMkJLMmxaUGY0V3BrNXlGNm5GOVI4eHN3SEdPOFFTaiUyRkFGaDhEJTJGcXJrb2M2Vm1TTUhVT09qQUVmVGpzQWFaTVhoTVJQeFJuWWY1SjZZUHlKVjJiTm14VjJiTm14VlF1ek90dTcyOVBWVWNsQkZhMDdVOThEYWZxc0Y2aTlFa0k2ZVB5d3d5RjZ2RzJpNm9KUlVXbDZ4WkNQMkpPcnIlMkZzdnRMaEc2czB5aUs0WDZaZmk0UUk3VmI5bHY1aCUyRlhESHJnVjVjOEIwTHpMYzJRJTJCR0YyOVdEdzRTZkYlMkZ3cCUyQkhPZzZaTUhpNGoyWWZUa1olMkZNR3dwRmFhekdEeXRtOUdZaiUyRkFIMjUlMkJFbiUyRkFGWCUyRkFPSjROOHVYd2xpaWNucHMzMDVMbUZaRGV3cmMyZHhidDBsaWVOdmt5bGM0NSUyQlgxMFVDUXpIakxBVEU0UCUyQlFlTmM2TDU1ZTVpMEo1N1dWb25pa1JtWkRTcTdqZjJ5QjJPcCUyRlZZb3IyJTJGd0JOamt0cEFHanY3WnZVJTJCSW5veThWYW8lMkZhNDR4Q1E5YXMyNVJWQnFLbmZCR1JieTlyQkVzbGpjSVkwYVElMkJnNUZDQ1FENmJqOWxzbEdBaWtONXMyYkFyczJiR3lPSTBhUnVpQXNmb0ZjVlMlMkIlMkYxcTJzSmx0eXJTeXR1eXAlMkJ5RHNDM3p3eEJxQWZIZkklMkZvZG10Mno2cGNqbkpLNWRBZXhQVCUyRmdSa2h4VjJjNzgybVN5ODJXVWdOSWRVaE5zNFBUbWxYUSUyRndEQkRPaVpBdnpMYjZuSHBPcmxGa2pzN2xXZEc5eXZ4VkclMkZ3aXVHSjNVcDNZVEpGcjdvcCUyQkM4dDFsakhqeG9kdjhBWXRraXlIYnh4NlhmS3glMkZjWEJpbEozJTJCQXNWVVY4RlJseVlBNFo4MERra1BtcTNFdGxISlNwUiUyQkpQZ0hCSDY2WkJ0SXVmcXQ5TnA4cEFMSG5FcE81cDFvTTZYcTBQMWpUcmlQb2VQSWZOZHhuTHRadHJHWmx1QmNHM3ZGJTJCRkpZdUpmeDQwSUl4SEpLenpiNWV0OVp0WllwMUx3eWdjZ1B0S3klMkZaa1QlMkZLV3VSS0tDT0M2dE5IMUNibGNXaUlMRFVXSEg2d2c2d3lEZWp4OUZ3NHNmT01qRUJZNWJpSDFIZ0x5OFZZdWxPZkpWJTJCeTM4cTRuZEg5TGxMMjE5SzRpaWxIcld6THhsaEk2U2dFMSUyRjJTbkZLbzBDenh5Mjh6TXFjU3pzcElZQlBqMkklMkYxY2QlMkZ5dG5WWmROUTJEMUklMkJFU01vUHclMkZ6TWZ0ZE1HMjBUU1F5eWJsbWplbnpvYzRUWTZsZDZkZHlLd01Vc2JGWm9IcU53ZDFLbkdYUlhzOW41JTJGdjdsZzk4R2xXaE1qd2sxQSUyRm00ayUyRkY3akRTd1NQVUxUVEpJM1BHQnBoR053RzRPSFZXJTJCZ25PTlglMkJzV0ZwREZQYVNTSmNURVNHM1RjUmxmMnVSSyUyRmF6cSUyQmtSM2FlVDdlJTJCam5YNnlvVzhpYmh0JTJCOWk5VGclMkIlMkZROThRVlpIcXN0dXRvd3VTUFNkU3BWOTFJUFZXemlmMWk5OHQlMkJaN200MEZqYlNXVXJOQ3FFbWtleDRFSDdhY1Q5bHYyYzZsb25tYlR2TVVUV2R3Z2l1bVdrdHJMUWhnZTZIOW9mNnVSTHpkNVp1ckRWUDhRMktldFlGVVc3alhlU0tpJTJCbTBoSDdVWkg3WDdPQ1k0ZzJZTTBzTXJqdmV4QjVTSGNYc25rUHozWSUyQmNkUHFLUTZsQUI5YnRhJTJGOGxJNjlZMiUyRjRYSmVEWFBKbHZQZTZKcU1lcTZOTVlMdUU4NDJUbzZudFRveXV2MmslMkZhejBKNUU4JTJCMkhuR3lJMnQ5VmdBJTJCdDJaUDBlcEglMkZORWYlMkJFeUVTZVV1ZmYzdG1iRkF4OGJCOUg4VWY0c1o4JTJGNlA4MlRNTUxOYjFpRFJyUTNFcEJra1BDM2o3czUlMkZ3Q05WJTJCMCUyQkdWYzRuNW04eWZwbnpKY3NyJTJGNkhZc0xlMjMyUEJ2M2owJTJGeTMlMkJIJTJGWTVKeGtMb3VyWDE3NSUyRnRiMjhtYVNacmxvcXNkbFExVGdvJTJGWlVETzc1NSUyQjh1eGx2UGNNSTZpNkxBZTJ6WjZCd2xTN05tellGZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZiUyRlc3JTJGbXpac1Zka2I4M1c1JTJCclcxJTJCZyUyQksxa0FjJTJGNUQlMkZDZiUyQkc0NUpNQzZqYXJlMkZ4YUVmM3FNbyUyQmRQaCUyRjRiQ05pcVY2Vk9PY1RWJTJCR1JlQjM3JTJGYVg5V0hveUZhSk16MjNCcWlXRTdqdUNoJTJGc3lhUnNIUlhIUmdDUHB3eTUyZ0xzMmJOa1V1elpzMkt1d3UxclM0OVcwNld6YjRYSTVRdjhBeXV1Nm5ESE1lbUt2T05FMUtXR1ZyRzdySFBDeFJnZXFzcHBrN3NiMFhDOFcybFVianhIaU1obm5uVEh0TG1QWHJaZmdha2QxVHNSOWlRJTJGUDdMWXRvbXElMkZXSTBJYWt5Ym9mNEg1NUxtRlpkcU5sRnFOamNXTXdxazZGRDh6OWslMkZRYzUxNVh1WmJXNGwwJTJCNSUyQkdXRnpFNm4lMkJaVFRPbFcwNjNFUWtYWTlHWHdQaG5PJTJGTnNTNlQ1cXRib2ZCSHFhbmlleG1pJTJCMnYlMkJzVTR2JTJGbGZGZ0hjclBURmJhblpOYjNjYXl3eUFwTEUzUWozemp1dHdXJTJGbGp6QmM2UHA2ZlY5Skhwc0xOU1NnUjFISW9yVjNWdml6cTJqWFFrJTJCQW5kbEJBOXhuTnZ6UmlXUHpKQkpXbnIyZ0pQJTJGR055djhBSEFkaWtKM1lHZjBvNXBaRElib1NEMUdKSjlhQWdoNiUyRjVhVXpvRm5OOVl0WVo2Z21SRlkwNlZJM3psWGslMkZWSTViaTJobmxCZ2RCdXhGRmFoaGZyMHJTTnNuSGxYVTRKSTVOSmFTdDFhdklRbSUyQjhSYXF1RDBJJTJCTGprcGJnSVpKbXpac2lyc0RhZ0MxamNxdlV4T0IlMkZ3SndUalhVTXJLMzJXQkIlMkJXS3Bmb2ZFNlhiOGY1ZCUyRm5oamtNUG12UiUyRktsckpCcWt4QlNWa2pDMFBJRHBUZkkxNXMlMkZNTmJ1M2piUjVwbHNaVnA2OXN3Umk5TjBlU2pNbkglMkJSY1ZwbTY2OWNXV3RYR25hdHdqZ0ttYTJ1UHNqMHglMkZOWHclMkZheU9mbUxyJTJCaFgzbCUyQlBUWXJrWE0lMkJwR3RtMXVQVVVjZVg3eVJ4OEtMdHglMkYxczV4b04lMkZlZnBWcjZDOG11VlZmVXVMTzhrTXJFSWVUZW03ZmFSazVJeTVGZFR1WjlCMTY5dHJHWnZxa2M1ZUZEOFNtSnp6VWNUdHNyY2VXSHpUVDNmUkp2MHA1VVp2dE9ZWXJnQ3UlMkZKVjRQJTJGd0FOSG5Qcmo4M3ZNMmxYOXpwV29CSllJbmFKNTQwcE9pMSUyQkdSUUR4ZjRjbG41WjNxVDJzdGpXckswaWV4RWdFNjAlMkYyWExPVWZtSFlOWmVaYmhXUDk0QXluJTJGViUyQkQlMkZqVmNsTGxiRWRRbjk1NXExd1RpVTNodUxhZGVRQ3NmU2xqTzlWTmV2JTJGQUEwYllIdWIxWjdWNXlXa2hIeHBjVkhKTndHaXVQOEFLU3RWayUyRmJ5R2FmcUxReHlhZk81UzJsUEpXVUFtR1ElMkY3dWlCOGY4QWQwWCUyQjdGJTJGeThDdGQ2anBsM0xiM3YlMkJrUVRweG5pcVREY1FuN0xvUiUyRndVYiUyRkFMRFpDeXlla1dsOVp5YUZMUGVsWkdOMnRxREV0WkpIZW5FczY3Y2twVlh3cTFiVTdHMWlLV3ZxdGNDUjRia2toRll4JTJGQ0hYaHZ2WDQ4QyUyQlU3SDFTYkszazlXeWE1aHY0SGNoU0JGOEZ4QkwyV2VPSjFrJTJGNHM5UDRjdSUyRjBqJTJGYzFGcGhtRnhQTGVPaFpCeEFpTDhqdDQwJTJGYTVZZWdWNlBwcnZMcGNFOHNmcFROYmgzUVZvR0sxMnpsdW9RMlBuWmloNDJmbVdJVnQ1ejhNZDRxOUk1UDVKMTdaMkE4WXJXVmwlMkJFUm9hRHdvTnZ1cG5MdGIwMkx6UkVkUjBoQmJhN2JWZTR0RVBGWndwcjZzSCUyRkFCYiUyRkFKT1NrZ1BOTHFHYUc3ZTN2NDJpdW9Ud2xpY1VJSzlpTTc1NUtuR29lVDdaWDZtMUNIJTJGWVNOQ2YlMkJGT2N0bnVJZk5rU1dlcUVXdXUyNDlPQzhjY2ZXNDdlbGNkJTJCZiUyQlZuUSUyRnl5UzV0OURrMDY3ak1WemFTWE1MSzNoUkpscDRyOXJqa1FsNVBiYWxjYVJkJTJCbEk3UGJ3eXNJNWxOSklpclUlMkJIJTJGbW5PdWVWJTJGT1VlbyUyQm5ZNmhJcHVXWDl4UHR3blUlMkZoeiUyRm5UT1BlWTR6WSUyQllOVGdwVkJjU1ZROUNySGtQMTRHc2I5ckZnUldTelkxSzElMkJLTmglMkIwcCUyRlpjWTJRZGxldiUyQlolMkZMS3hLMTlwY2RZQlV6V3FkWXgxTHdqJTJCVCUyQmFQOEFaJTJGWnlIVzl4ZTZaZlE2cHBrN1FYc0JEUlRJZXZzUiUyQjBwJTJGbHlZJTJCVVBOUjFLSkxLNWxEM0tyVzNtNmVzZzY3Zjc5VDlwTUQlMkJadENqVG5xVmlsSVclMkJLZUZSc2hQV1ZBUDJQOSUyQkolMkJ6a1pSQjNEUEZsbGpseFJQejVFZHg4bWN3JTJGbTNhWHZrelVMeVVDMzEyMmpFVDJvTkE4a2g5TlpZVCUyRkp2emIlMkJUT1phYklobldrZ2FPUWN3eE81NzclMkY1ZmpoS0lZbmRvWnZnYVVEMDV2NVNOMUolMkZ5RzZZSTBSWjR0UyUyQm95S1FTMUhUd1lIc2ZmQUxyZE9Rd00lMkJMR09FSGZodTZQV3ZKNmY1RnNmclhucVc4SyUyRkRCRVpENGNtQVZmMVoyZk9TZVNMbWZUOVJySEVXbHZEU1phVmFnTlIwJTJCenRuVzhtV3N1elpzMkJEczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOWZ2JTJCYk5teFYyWTVzbzRxdzZXTDlIZVlMaUxwRmNVbmpIUWZIOXIlMkZodVdTYlRuQmdNWGVKaXYwSDRsJTJGQTRUJTJCYTRmVFcwMUZSdkRKNmNoQSUyRllmcFg1TU1HYVhjQm1IeGJTcnNDZGk2JTJGMmY4UnlaM2o3a2RVNHpaenJUZk8ycVFhM2VhSHJrYXg2aGF1eCUyQnI5RmtnSiUyRmRUMjc5MFpQJTJCR3lkV1dvV3QlMkJuSzNlckFmSEdkbVg1cmtTRW92Tm0yeWlRQVNUUURxY0N0NXNMNWRaMDZLbzlZU01OcVJBdjhBaXUySXY1aTBxSmVjc3JLbyUyRndBa2slMkZjdFRobzl5bzY5aHRiaTJlMnZBcGdtSEIxY2dBMSUyQmZmT1lYJTJCblhmbFhVZ2hKZXprTmJhYnhIOGpIJTJCZGNQUE44Mmw2NWIyajIxM0ROOVdkbW10ZWZDUmtkZUphTlNWYjFJJTJGdFlYV004Y1ZrMmphdk05NXBVdjl6Y1B2TEIlMkZJM0x2d3doSVQyeDEyS0NCcnhqeWpSUzA2anJ4RzVZRCUyQlpjcnp6cGtYbWp5aExQcHpDU2FGVnY4QVRab3p1WGpIUDRHSCUyQiUyRkU1SmtVbWp1OUJ1amFUc0pZSEhLQzRHNlN4bjlyJTJGQUpxd0pINWcxZnlqRGF3MktyY2FFMHpTTkUyN1JpUW10dVhQU0o2JTJGdVclMkZZa3hJNmhVZzhpYTlxdWxhdEhlM3MwazhEZ3hHS1p5d0JrJTJCeTMlMkJUa24lMkZONjNhOHR0RzFhM3JITCUyQjloSUIlMkJJZEdLJTJGOEFCQTVETmJTMHRMJTJCNGtzSk9lbnpFVFdyallpT1Q0Z2pEOWw0V3FqTCUyRkFKT1RUVTlYdE5jOHI2ZERQOEU4cmM0aVNQNzFSd2tUZmNQJTJGQUxzWCUyQmZsZ3EwOXpGdktlb1RNd1YyTmVDc0IwQmFOcWY4YTVOOVp1NTlLODNXMnBXYiUyQm45Y2pCbzI0WlhVTnhJJTJGMWx5Q1dzTDZmTmIzTEx4aWQyNHRTZ0lOQTlQdXliNjdwZCUyRnIya2FQYzZieE41Yjhvd1dZS0FZVyUyQkdwUDhBazRSeVFVOHVmT0Y3SkxEOVhSTGFBajk2WlBpWXY0QTlBbiUyRkRZT2Z6OW9FYnRBMGtqWFNxRyUyQnJxaDVOdFUlMkJrVzRpUUwlMkZrNXlLJTJGaXVOYWdqRWNwVFU3Umo2WXFhU0FidEczJTJGRmluNG9tJTJGYSUyQnhoWGNHZVd4bERncFBiZnZVRmFQREtwRlhpSSUyRllrJTJGayUyRm13RlhyMG41aGZYQkpGcFZ0eG1DODRqT2E4MSUyRmFLcXY3U2Z5NUdMN3pKcTJyd1hGaHFGNDBBbFdpU1FmQUVQVlclMkJIN1NmeiUyRndDUmtUbDFkTFczdDd4aTgxMDhDM2c5RUJBckNuSThqdFZ2dE5SY1IxenpUZEpjUXZZd1JXN3kyOGR3ekZmVWJsSXZJMDVmQW8lMkYyT0d4U3QzelNXOUxQWElUTWxDaml1em9mc3lSdDJZZnNQa2QwaWFiVHRRa3NwMVpyYTRVODRYNlNKJTJCdzQlMkZ3QW9EN0VpNWR6cVY3TEZDdDdLWm5WQVklMkJScXlnOWFqJTJCWCUyQlRKZG91dWFIcmx0YjJQbUNOZnJrS21PMnZLY1QlMkZrZ3NQMnY1Y2p0YXBmbzBKdCUyRk1sbEZHSGx0WnZWZUs0cHR3V05pNnlVJTJCekl2Umx3bTFtVWFycE50SkhFV3V0T2t1SWJoMEZTYmZrR2laMiUyRmI0TXhIJTJCcGs2dVpOTThzYWRkeXdTdE5LNjA1dHNLblljRiUyRm1iT1p5M3MybldhTEUlMkZHNGU0JTJCc0s0M0hFTHhvd096SyUyRkw0bHg1ZkZXYiUyRmxwclAxVFdMUU1hTE1GUmglMkZsUnR4ciUyRndMWW4lMkJmTmpMcCUyQnAyV3B3Z2hXTHh1ZjJTR29SWCUyRkFJREk5cGVvMmtNdGpmV1FNVWkzSk05dTI0ajVyVDREJTJCMUc1cXlmeWZZenAlMkZ3Q2NkaW1yJTJCVXJhJTJGRyUyRndwSVNPb0lwWEpEY0lQTjRIRGNSM1NjbDJJNnFlb09HTnZjUXl3JTJGbyUyQiUyRkpXR3BOdlAxYUJ6JTJCMFBHRnY4QWRrZiUyQnpYSXhTYXltMk5DT2g3TU1OWUxoTGxPUzdIOXBmQTVGVTMwdlVOUTh1YXFqSXFzYXFIaU84VXNaNkVlS3NyZkElMkJTM3lVcjZwNWl1ZFRsMlMxUnZSVGNoVEtlQ2dWJTJGbFRsa09zdlV2ZU9uOFZrZGF0YXV4b3lOJTJGSUQlMkIwciUyRndBbVRmeVlIc3JuVGRQYXNjMSUyRk5jelhNWkFyd2hUMDRnMyUyRkFEMDVZam1sNkZkaXRsY211JTJGcHZYJTJGZ1RuSzViUzRzcDFtRHRGSUQ2a0xpb1BYWmdjNjFOR1RCTkg0bzFQcFVqSXBOYnlYMFVsdmN3JTJGVjlUc3Q3aTJJcUhXbjk5RVAya1pmN3hGJTJGMThuTVgxcEFOTVIxVFRZZk1rUnVZWWx0JTJGTUVZNUVmWVc3VWZ0TCUyRndBWGpEZjh1JTJGTUZ6TThtblg2TUpMV1JGa01oNHlpcXRHVVlVJTJGWlA4Mkl6VyUyRkg0RFZRRyUyRmR1UHRSUDFGRyUyRmxiOWxzRzZaSkRKZlBjdkdJOVdDb0pad1BobVJHSEYyWCUyRmZpNEFQMnBlYWZtQkU4SG1xOExnQVRDT1ZhZUJVTCUyQnRjamF1VVBpcDZxZSUyQmRKODJ4MjkzUGIyR3R5TDlabVdSb0w1UUFVWlpHUUs0N3A5bk9kMzloZGFaY3RhWFNjWFhkU04xWUhveW51cHdGQ0wwelVYMHk0U1ZHZjZ1V0RxeWJQRzQ2T24lMkJXdiUyRkFBNjUyblJ0WSUyRlRkcUpiZmpMZHFuSzRnanBTVmVuMWlCZjVHJTJGd0IzUmY3cWZPQ3h5Y2Fxd3FqZmFIOGNrJTJGayUyQjYxSzExQUMxa1pZSVQ2Z21CJTJCeHkyb1AlMkJNaSUyRkM2ZjdMRUdsWkNiQnIlMkIlMkJ1JTJGcXFwQkNqUDZjYnR4SHduNGxqclglMkZnY2tPajJFTWNDNmxLNnlUUktZbWtJb1lsNmdFOXhUN0w1SGhjVEpxTTFqSkNFampRU1FzSzdxVDNyZ2klMkZ1SjdQVERLUTMxUzVmMDNaUGkzU3JmR1A1UmlLRzZiZWolMkJRUHpCMENHJTJCdU5IdkI5VmVaeDlXdlpLQlg3Y0NmMlA4ak92Z2hnR1UxQjNCSGZQSGFRcmZ1RXQzREhrQUpha0toUDhBTzM3QSUyQmVkWDhpJTJCWVBPZW42ZE5wMnFLNXQ0SkZqczVIQ2x5b05KZlRkaWVVYUw4UyUyRndEQ1pFY1JORWMlMkJyZk9PS1dNVGdlR1VhRW9IZmklMkZwUlA4QXVudDJBYjNVb3JXcUFjNVFLOGVnSHpPUGh1b1RZcmRlc0pZZ25KcHRnRFRxZHUlMkZ0a1QxQzlYbkxQSXdvZmpMZHVKNmZoa2dMY1lzaTB2VlJmU1NSU1VXUmQxVWVHR2d5TiUyQlZyQ1NrbXJYS2xYbkhDM1J0dU1YWGxUJTJCYVRKS01UVjdKZG16WnNDdXpaczJLdXpaczJLdXpaczJLdiUyRjlEdiUyQmJObXhWMmJObXhWQjZyYWZYdE91TFh2SWg0SHdZYnIlMkJPUmJSTCUyQnNNVE1hU1FzT1NucnNlTFpORG5JZGZYWHRQOHpYdG5aR0MydEpXRXNVejhwSDR5QUU4WTE0cnMzSmZpYkpSUE1LeWY4QU1YeWUzbUt5aDFMVEglMkJyYTFweDlTMHVsRlNWNm1Od1B0Um5JYjVlOHdYbHclMkZ3Q2o5VlI5TjF1MTJQR29EOXZVZ2ZwSkclMkY3VWVkTjh1YXBjWHNIMWU3QyUyQnJBaSUyRnZWNk9QczFLJTJGc3R0Z0x6UDVZc3IlMkIzTnpIRnhtalBNbE5qJTJGckxUZFdIdGlOdGxVOUk4MnN4YTExbEFzc2YyYm1NZkE5UEZmMkclMkY0WEl0NTAxeTgxU3lrRUVqUlFSTUdFYU1WNUwwJTJCS24yc3E0a2UzajlPNGFzdXlMTlNuTWR1WCUyQlYlMkZ4TENmVlolMkZTMHU4Y0RrVmhZaGZHZ3hvZEdRRERaUE1jdWx1c1R6cHdyeU1UN21uZWglMkIwdVRWTkwxZSUyQnNvYjF0TG1tdEpsRWtiRlc1RkdGUjhOZlV6aTJpUSUyRlhOWHRMalVBWFdlNmhFM0wlMkJReUtIRyUyRmJqbnF6elA1b2swSDBiYXhnV1Z5b2RpNUlSVTZLQng3NEFTcnpPenNmTDF0Y0g2OXBwTXRkeE0waDQlMkY4ODNPUzJHTFM3MjM5SzFwR3BHd2olMkJFciUyRkFMSHBoVmNlY0JjeXJjNnZCRmRhYkwlMkI3bFYwVVBidDEyS0RueCUyRmxZWUd2cldLd1AxblRwM2tpcnNUMEJwV2djZGY4QVpESmclMkZGalNhblNiOHhDMnVyc1h0cEc1a3Q3ZGtWUkdhVTRnJTJGRVR5JTJGd0JiSXpjNjB4U2V5bHNncGhESmVhZk50SVklMkJucVJFZkN5Z1ljV1BtVjE0eDNxa3FRRHpBbzRYJTJCWXIlMkIwTUU2aCUyQmlkWlpJbWpNOTBGTFF6UWo0MEJGTm4yJTJCMVg3RFlrZDJ5aSUyQnJITkloOHVYYkxwN3lMSmRUb1piWkpEWDFFVTBOT1h4Q2VMOXRmJTJCSjRQaGJUTHlhNThzWHFxdDNFb0tsVjlNU29SVU1uOHNzZjdYSCUyRlh5RCUyQmNmS0Z6b1duUmF0RnFVVVUlMkJuU0dTR0FzQmNGWFphRmVISlZaRHUySE9uM1NlZTlLdDElMkJzQ3g4eDJ5JTJCcGFYYWJCMlR4SDhwUDIxJTJGWndBbnUzVlF1VjFDQzJpVzljeCUyRndDa1MyOGtNdEE1ZEtMSEwxJTJCMDBUSnlaUGhrJTJCMW5TJTJGS041OVowR1NObm82eUk2ZTFWNHYlMkZ3eTV6OXB2OFlXajZIcmNmNlA4MzZFV21paUhTZml2Mm94JTJCMmt3SDdQMmZ0TGsyOHV4cmJlWFlMaFlYVjdnTXp4a0UwSXFQaXFOcSUyRnk0Z2IlMkJTazdQTmRYMW0lMkJIbXFheXRKJTJGVHRUZHglMkZCR29TdTZzd1pxY2o4WWJDblJtTTk3ZHJLeEtYY3NsdTd0WGIxJTJCU0JxJTJGd0NTelpLOWMwNnh1TlV1dFN0a0JsczVJRmtBSUFNb0hxVVVmek5Sa2JDUFc1WHM3MHJaY1Z0TDAlMkJ0Q29BRlZjMW9LJTJGd0FybmkyUklTaGREMHJVOVowZzJVTlcxRFI1SkxHJTJCaXJSbFF1WGhtcDFaUDcyTSUyRndDcGg3NWcwSzJzcmEyMUc4Y2g1YmFHSlVwdDZ5QVJ1dkw2T1dFUWsxZUpycTlzNTVZTHhCenVHaEpFanIzTEt2eFNxdjdXSVNhbnEyb1FSWEdyeXZkMk10Vmh1U1E4YU5RY2g4T3lOanNxRWxoSzFoYmNyJTJGY3YzSyUyRnlWJTJGeWNSU1FCbVVpaWZzZlFNNkZwZmxqU2JyUjBtQ3kzRWpEbERJek45c0ducGhVJTJGWiUyRmxiSXJxbmwlMkY2ak0zQ2IxVlJxT29VODA3OFhvT0hQSVNJaVFDZDVja2dFM3R5UzRTdEs2eFN5JTJGREolMkI3SHFzZU8lMkZZVncwVzJ0aGF0cDEwaGUyYjdZSDIxY2ZabGpQODZmOEFEJTJGWXhPNHRiTzRzbzRJN1pVdkc1THBsM1Bzc3ByVXdzMzkySkQlMkZ1dCUyRndDYkFPaDZzTHVVNlZxWU1GNGhLUnUyeDVEckZJRDBZWTdyc2g0dE1uMDYlMkZrc3BqempuaWFTMW5RZkRJRSUyQkpXWHdkYWZFdjdPZDB1Z25tTDh0bVlpcFdFT0Ixb0dXcCUyRndDSDVaeTRob1Q5V3VVNUJUemo3RkhwJTJGZUllMyUyQlglMkZBRHJuUiUyRnlzdlJmYUhlYUpJd1o0UkpHbzhRRHpRJTJGOEFBeTVPUFZCZlBOeGJwTXBpZllxYUJ1NEl3RllXbHg5ZkVJSlU3bG1IN1MlMkY4M1pKOWUweDdLOXVuUmc4YXpNa29IV0p5U1ZSJTJGOVlINFclMkJ6aiUyRkt0dkZkYXhCRExRS3pBVk8yNDNHJTJGOEFyWVBKVVhiMk52RFp0ZHlXeGUzQjRtZUNRJTJCdEczN0pramI5bGFmYVhIUlhsOXEycjZldG5XSjdZeHgyOGglMkIxVU55TWp0JTJGbEg0bXlYNmxwMXBvUG01N0NJRkxHOGppa0NzS2lzcXFYV25jYzIlMkJ6aExaVzBPbTM1aEN1TGlDZVNnSUhGWTY3S1Q5cmw0WWFWNjNJd01WU2FrZzFwdDI3ZUdSdXp2clRXSUxkWWJubGNJV1hTZFFjOFc1cFhscDkxJTJGTElQOTFNJTJGOTRtRzl0Y2ZXM0FRMTR4Z3NQSDRjNFpwJTJCdHo2SHFOMnJKNjFuTkl5M2xvVFRrQTU0eUlmOTF6UiUyRmFpbHlSTlVpbnBWMGlYcXl5eHclMkJqZFc1TWQlMkZhTjFpUGRxZjc0ZjhBNUp0a2ExWlo0TFdZeHN5U0twYUNSVDhRSSUyQkl4a2oySHc1S0xlNiUyRlRzVUYlMkZwMXdzbXJSUmsybDBRQUw2RmZ0MjkwZyUyRnU3dVA3TG8zOTVoRnF1cWFMOVhabW1XQ1J3eVNXVGdzOE1nRzZPbyUyRlk1ZlpiQVVoQyUyQlo5SnNmTWwxU0tZVyUyQnF5UVJUMkRNZjNVdkplVHd0NE01JTJCSmNoS3lyT3I2RDVnUXdUUUVwRkslMkZ3RGVRdjhBeW4lMkJaRGslMkIxR3lqMWV3MFNhQzRnUzVudG1DdFgwRUxRdFFBTSUyRkVjdjVGd3YxYlF4ciUyQm5ocjRvbXMyeW1QNnh1Q1N0U0lib2Y2djhBZHpZT2FHQVElMkJYZFRtMU5kTGpqNVNOOFFrRzZGT3ZxQnUlMkJUalRyUzJzYlpMQ01jVlVta3BGR0xuN1JmJTJGQUZ2JTJCRnhUVG1lMTAyRFR1SUxJd1pwS2tzVyUyQnp4V3RXNDElMkZaeVUyWGxXNDFIaGNhaHl0T1FKWlZIS2FYdyUyRmQlMkY3clklMkZ6dmlBcVEyMWxkWHR5dHJERzBrNTI0cUttbmo4c083MzZyb05tTklsdGZWdjdoRmVhTW5rVXFUd3B4TkEyUzJNYVQ1ZXRTOXc2V2R0RXZ4MWI0MkE3U3ltaCUyRjJDNXpUemIlMkJadW4zc3dPamFjR1ZLd3JxTWdvYWplaUpTciUyRk9URFZkVlpQWWEzcE9qJTJCVzd1MzF1S0t6dVpHUDFkZVBQMUl6MVVvdnh0SiUyRmxZVSUyRmwlMkY1aE90eVMlMkJXcmxpczFHbTBweWZpUjQlMkZpOUt2N1N1bWNydk5ZbnU1RGNYSDd5VG9hbXJmU2Y2WUw4cmF0TFolMkJadEp2b1Q2YndYTWJFanVDd1ZoOHVKYXVQRnVGZSUyQnglMkJZSjROTWF3UWlPRnp5Wk9sRFg0aCUyRndReVFlVnRBbjFCWTlSMVFOOVdVMXRvRyUyRmEzcUdZZUdFM2xuUkxQVmZNMTlMZEF5V2tUdGNXOGE3eE9HYXExa0d6N2slMkZBTTZtb0FBQ2lnQTJBeEo3bG9qbjcyd0FOZ0tBYkRMelpzaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5SHYlMkJiTm14VjJiTm14VjJRenozcDNQNnJxS2JGS3d5dCUyRmtuNGxKUHNlV1RQT1Zmblg1Z21zdE50ZEJ0bk1iYWp5a3VYSFgwWXlQaCUyRjJiJTJGd0RFY2JyZm0yNE1SelpJNDQ3R1I1OXc2cE1mTnlXbDdFZEQxS00zQ3A2ZHdvS2xkaiUyQjF6SEUlMkZSa28wcnoxclV0ejlTdkxlMmxtMkhwOGpDN0JoV3FWNXh2VWIlMkZEbm4wMWpQRWluOHBIZ2NrZW1YbXNUYUhjeEFOdzA1bzU3TzdJSUt4bGlKWWxsJTJGYVJUJTJCODQlMkZzTmtJWmhJa1NqUkRsNnpzJTJGd0lqSkNYRkhrYjVncDMlMkJhMnIlMkJiZFB1RXZZTFZiTFJwaUZMMjdjMkV2V2tqMCUyRmQ4djJWcGtHc2ZOMnAzS3JhM1YyWGljZ0VzUWVRSjNxU05zN2QlMkJrZE8xclNiS3cxTGhOJTJCbGJSWFZKS0ZaeXE4WlYzJTJGM1lHSExPRWVjdktGeDVUdlRMRHltMGlkdjNFdmRHJTJGd0I5eWY1YSUyRnN0JTJCM2xwSFVPdnN1YTRpTndiV0NydUhLJTJGQjBxTjlqMHpveSUyQmFyVzQ4cjJPcTNsMUxlMnNTaXp1R2txazZ6Z1VWWE1kYThGJTJGd0NEVE9PMk0wMXJJczBYQ1JRNGtIcUNxR25abDc0TmdrVGxNcVNPSVpwUFZOclhqR0c4UXZmajJ3WHpTeXF6MWVPJTJGdE5TalFNOHNWdWJoRmJia0lwUGlJJTJCVVI1WWNhM3ExN0lkUG10WjJqczd5enRyaU9OTmh5QUtTY2lQdE1KVWZJWmFYRFdMJTJCcmEwamNxMFpZQVY0eUFxNm12OHluSmY1WWV4MVBSanBVc2ZPJTJGMHBudUxKV05QVWdrTlo0bCUyRm05Tmg2dkglMkJWcE1SYTJ1dkJjWGVqMkdwMnJTQzV0SkpiT1prcVc0diUyQiUyRmdZJTJCeCUyRmVKaHRCQjVzT2kzMTNib0xhOWloTWxvM0VCNUNsR2tVTHklMkIxNlhKazRyaGxaYXJCRkFiWmxqdHJTNVRnJTJGb0lGNGZ5T1QxSmpiQzFMJTJCYlNib3d5TXd1NFdyekpyeVg5aDFQUXB4dyUyRkZXRlhOdXQ5UEI2c3JTNmZybHFJNEpaSEolMkJyMzBiQ3NiT2Y1cGh4MyUyRkFOMVQlMkZ3Q1JnUFFidHJlVnJFRnJXOGdmbkRVMGRKVVBGMDl1bkhEJTJGQUZleWdqanZiaTJoYVRRYnB4Y1hscEh2THA5eDluNnhDbGZqdGpYaTFQMlAzYiUyRkdzZUU5OW9sOXF0eWpJS2FtWWxrdGI2TW4wTDVRS0o4WnA2ZDN4JTJCSDR2dDhPRCUyRnZjaVRYUFphWiUyQmtkcDUlMkJndDE5WWFkNXAwJTJGZTB2VTJZOFQwTlBpYU0lMkZ0SiUyRnV2T2o2bGNHeXNGYVJsWXhKV1VqZmtVWGszejVNTTVwJTJCVjJsM1UycFBkYWxGSEsxc09MeXFReFNaYUZPZERXT1Q3VyUyRjdlVFR6SzhVZGxjeFJFaFhCVGYlMkJkeldnJTJCN0p4TmppNzBIblR6JTJCNTFHWHlyckZ4YWFwRDY5bmZjUnFTZnRxeEhMMW9qJTJGT2pQanRRMEdOWUNmckNYV2kzUU10bGVsaHlqa1liRmZkdnN5eDRNODdXeTZ6cWVtVHE0WDlLd1FubWVna0slMkJtZiUyQlNpNUc5TTFQVmZMVXQzb2QzQ0pJR0RFUVM3aUtVRDRab3Y4JTJGanlFcnFycnVQTmtLNTglMkZKTjdTeDAlMkIwc0RlM2swazl4QTZKQkpBQ0dxd1BIaUtwOFM4ZnRzMkYwbXJEUzNudWJQVGhINlpMYTVZY1FzbkJ2czNrU3NDbkplWEp1SyUyRkIlMkZ3QVltd1ElMkZyWGRqRXNRUml6aHZqS0NyVXA4SWY0dVclMkZ3Q3l1SzNGczg5M3AxbmV6ZlZkZURDT3htSEZpOFpIJTJCODl3U2VCalAyWXVYJTJCVkZpWWdnQTcwUG10OVF6ZnlqZHhYZWlQZWFZM3JOWXQ5WmpkS1VrZ1AyZ3lqN0w4ZnRMJTJGUGdUejJ0dUxkSklUNmNOMUpGY3h6SjJVN1NiJTJGcyUyRmE1QnNLZkxFTXZsUFhieTJzSkk0MHVGJTJGMGl6VnVVY2IwNW4wejNna1RsdyUyRjMyMzd2SGVkZFhONXBFTWRuYm1PeXM0QkZjeTBxRGNGNkdKYSUyRndERmFjbXlYOFB1MlIxUU9pNll1cGFiZDJGNzhkajZ4akxWRlVscHlTYUh3a1VmN0YwJTJCRElycnZsNmRyNDJOMGVPdFJJSHM3bGRrdjRCOWlqZjh0S2dmQiUyRlAlMkZBSFgyOG1QbHV5YjBWczdPZFRMNlNTUmVvSzglMkZUWnFOJTJGcnFPUEwlMkZKd1RxZGhGcjltMWxxVWhqbmhjbTJ1djhBZGx0TiUyRk1LZjdwYjl0UDhBWnJqVmhXSGFIckVXcXhqVGI5Z3Q5R0tReXRzWHB0eE5mMnNsMzVkM0owanpuSmJDb2p1UWxSMjZjVCUyQnRjNTVxdGhkeVhjeXlKOVg4d1dmeDNFU2JDNlVicmN3ZnpTOGZqZmolMkZBSHlmdlB0ODhOJTJGS3VxM0YzcTFocUJJRXljNHBXWnVDa29Bd2NrOU1BNTBWUEpWJTJGTXEyazBUem5mQ0pRVW1QSm9tJTJCekpHJTJGeGNXOXQlMkZ3RFk0UTZjSUxhNlpZMmVLUndzbHY2Z29hRGZqeSUyRmFLNGYlMkZBSmxlYWRNODBhOHQxcGNaOUdDSlltdUcyTXJEN1RBZnNxdjJWJTJGbXdyMFd5dU5YVXclMkZWeGNpMSUyQktMdCUyRncyM3dyZzZxR1ZhbnIxdnJLMnQzY3NJcnkxYUVTQmp4SkVZWU9RZmY0Y2p2bTN6TGJwWlhMV1RHQzV2ciUyRndDc3dSamZqQkdvQzh5ZmklMkJJakNQWDJ2Tk11JTJGcVpEUk5HS1NBZ1VxeHFncUtydUYlMkJINHNqc3lQUElaWlNYSjdrbmZHMWU5JTJGbHhyZHQ1a3NicWRTRnU3ZU1MY1c1TzQlMkJFMGNWNnh2bkY3NXVWemNiMTR5eUJXNyUyRmFPMktlUzlSdXRDOHlXZDdETVlMZm42ZDNMJTJCeDZEN1NMSjdZaGRrTmQzVWtSRFJTWEVyeE1EVUZHY2xUOUl3bmRDdHBXcno2Wk44TXNrY0RzR2RvanhramNmWm1pcCUyQjJ2OEFMJTJCM2lXb3lTZlhiaUhVbUZ5MTRmcktYcUg0bkwxNHpLJTJGVnVYN2NiWUVlSldEUFFWcFUwUGoweDZ5cUxMMHBKVVc0dFhFMW81TzlTYVNSYmVQMjhDb2IxWjFUNnZQS3p4amVOU1NRSzlhViUyQnpuWExmVXJkdER0OVQxVSUyQmplUnhwYTNpTXZGNVY0MWpjZyUyRnRyeCUyQkxPZDZWYmFUcUpsUzdsTWw1SXJpM2hId1JpUWo5MjBzbmh6T0RwcFdzaWk2emNHZVNaZzNwbzNOU3klMkZEJTJGZW40SzlWNTQycjBMeWhlYVhjbTV1YUNDV05oeGtsJTJGdkNsT3FjdnM0cnJuNWcyZW5JOXRwS2k0dXFsV2NrMHJTdnhQOEF0ZjdISVRhenBjY3JpTmFMR0QlMkZvekduQlZJSmtaUDI2MSUyQkZ1V0U0anVMcVNabzJwYkpNanlpdEFRZVZQd3JqeGJVRTAxcmV1WEd2Q0tQVVpKMkNzMGlxZ1VnRnR1bnclMkZDS2ZEaFdMWFN6YXlXNzNqeHVHRWxXZ0pVYlVvU0Roa0xjWEVqSkRTSnFrb1NkJTJCSDdPR2xoNWExSHpET05JaXQlMkZXdlpFTWtKUmxRdEdsS3NDeFZYNCUyRnklMkZhd1d0SUxUTFRUbWVNbWJUcm0xalhlMG5tTUxPd0gyblpscld2JTJCVmhsQmI2THFsMDl6cGVtcmJ4MmNKZTVXTnFpUmkzRUtyZnlqJTJCWlI4V0o2eCUyQlZQblhRcks0MWk5c2xqc3JVQjVwQkxHekFWQ2dpTldMTnVmczRJOGg2aHA3MzhzTnhSQmV4ZWk1Qm9CSldzY2clMkYyWHc0Vlpqb01sbEZieDYzNVk1Mms5bXZQVWRLYVJqSElGJTJCMDhQSW5oSlFWNiUyRmElMkJIT3E2ZDUlMkYwRzd0b1p6SyUyRkJ3S3pCQ1ZyVG8zR3BRJTJGNjJjWVcyMURRJTJGTVVWckZIJTJCNXZ5SW5QU0lxemZFMWYyYWZhd2ttdHA0MmtsdDBmNnV6dUluV29EcXJGUVJRamtNSlY5UTJtczZWZml0cGVSUyUyQndZViUyRndDQk5EZzJvenpyNVkxdlRJN1Y5TDFQbmJURGs4RTRRczdNMUtLSEJEcDlHVGZRZk9kb3NTeHc2dHhrcDhVTjBEeEJHMzdXTmVhMDlVelpCTlklMkZNM1NmTGNWckxyREl5WFpLd20yYm1XNDBEc0YzJTJCRmElMkZGOGVUVzF1b2J5Mml1N2R1Y015Q1NOaDNWaFVZRUsyYk5YTmlyczJiTmlyczJiTmlyJTJGJTJGUzclMkZtelpzVmRtelpzVmRuRSUyRndBOXJLWVhtajZqVDl3MGN0dVQ0T3BFZ0IlMkYxbE9kc3lPJTJCZCUyRkxVZm12eSUyRmNhWHN0eHROWnlIb3N5Ym9mazMyRyUyRjFzQjVPUnBNb3haNFRQSUdqN3BiUGwlMkJOUHJFUmklMkZhRzZIMzhNa1BsWHpoJTJCamhIbyUyQnJtdW5DcXdYRkttRG1maVNSZjI3ZCUyRndCdjlwTUpCRGNXTjdKYVhjUmh1WUhLVFJQc1ZkVDBQJTJGTldCOVJpV082YWclMkZkeWdTTDdjdXYzSEtwa3dJbVBjWG9NMktHYUhoeTNCM0JIZjNoNkI1cXNsWFFvb05PVm9mMGE3WGRpNmZEeEJQS1FRNzh2VDM1eE5sNkZyMWw1czB5WFNOWlJIdWpIeGxSaHRNdiUyQiUyRkU4SkI5ciUyRkFJZklMbzJwVDZYZkxkOG1taUtlaFBBekU4b1QlMkJ5dkt0T1BXUCUyQlhLdnJhZlNwbDFYVDJMNmV6ODRMcUxyRTFhOFdIN1BIN05EbGtNb2x1UGlIUmFyUnowNUYlMkJxSjVTSGYxQ1QlMkJaJTJGTGx6NVd2dlRVbVhUNWpXMm5QJTJGRUglMkZ3Q0xCJTJGdzJGYXVEOFNuNmM2N2EzVmg1eDBwN0clMkJSZnJBV3NrWTZFSHBMRlhwJTJGeHBuTGRjMFM4OHQzcHRyaXIyN21zRTNabEg2blg5cGNtUjFISnhGUzN1QTRvZnREQmx2Y3oybHhIYzJzalF6eE1HamxUWWdqQ1ZHNk1oJTJCV0Q0WlJJdnYzR0MxWjdwZHhIcmFOSkNWaXVrcTEzYXN3VkFPOXhDVyUyRjNVZjhBZGtmJTJCNiUyRjhBVncxdDVOUGtLYWJlM1N5cUtHMnVJcXVZRFg3SmM3ZWkzN2ElMkZaJTJGYXptOXRkVDJkeEhkV3pjSll6eVE5UjRVSTdxdyUyQkZoa3dodkRxRUNUYVpiRXh5SGhQYnFLbUNZaXZCZiUyQktaUHRSJTJGOERnSWtTRHhWSHFLJTJGU3lCRmJqZnZSOGsxeFk2Z1Z0TGI2dkpiVldaYmh2VkxvMzh5QWVtWVpGJTJGNFhDalcwTWNYOTg2JTJCWDcyVWVtNlY1NmJla1ZBWUx1MEQlMkY4QUpTTCUyRkFJdGp3N1cwdXRWZ2owJTJCN2s5RFVMYyUyQm5hU01hRmtydmF6JTJGOHlYUCUyQnBncTAwaXp0YmthVmNQOEFXQmVyNk56RXdvckxXalJzb0o0eVJ2OEFFanI5akdPTURibjV5M1V5Sjh2Y3lmeUhwbDFwdWh5MzF6RUUxZTljSmZLeFhqSzhKTWFUcWZHWkNydCUyRk45ckNYOHdkYSUyQnF5YWJBR0FNODVhWUE5RlVjViUyRndDR3laWEVsdmIyMFZnSGIxTGVOREVLbXBLRGhHUyUyRmZPSyUyQmNyaHRVMUc4dkxaJTJCWXN6Nk0wUSUyQjBuQmg2Y3dIJTJCJTJCNWFmN0Y4c2xzQUF4RzV0a2VzVG02OHNhZGRvM0diVFo1YmIxQjFHJTJGclJmcnhHVFc3THpQcGNyYWhBTGZ6RHBpcjliaUk0dEpFU0Fab3dmdEo4U3Z4JTJGWSUyRjFjRDZWTWIzUk5Uc1NoSm1oanU0Z1ZQMm92dEglMkZnRyUyQkxCVm5iNmI1ZzB1eDFKR1dEWE5EajRTRWlvbmdRY0dqayUyRjM0aFg3TGZzWUJ1a3QlMkJXYmE0Z1dIV21qJTJCc1dkcEswRHdxeSUyQm9Xa29uSkUlMkZ2SFpPZk5jS2Rhc25rODAyODhUTjZFRXF4T1hOV1NPSmlTN24ycDhlQjRieVN3MWlsdjhBdTRPUWs0N2tLbyUyQkx2JTJGTFg3V0s2anI0dTlVZWUxakl0bmRpSWlhc3l2OXNWJTJGbDN3V0FGWkJidllhanFzViUyRkRTUDF5SVRQVWdTS0g5U1NpblljSVJ3JTJCSDdUU0pociUyQllPcjJzT2tXbW5oSFNLNllpUm9sRkY1QSUyQm42bmdKaWY4QVd5UDJNTDZkYmlSSSUyRnJxc0FJM1NSQXNNWSUyQnhIS3JsR2hmbCUyRmVmQiUyQjglMkYzWGdYWFlwcEpHMW0ydW5rYmo2T3AycFVTS1ZBcWtzU05zaWY1TCUyRkZIOXZIb1Vscnl0ZHREQ2dkbVY3ZDVJMmJvVSUyQklOR1QlMkZMaHByM25MVEtKOVVUMTlUQjR6Tkh0Q2UzSmozYjJYSXNzcDFZOGJVZkZPUXNpeDdTQ1NsQVhwVG1qNGF2NU9uc2RNJTJCdXpCM1ptOU9XYU5HRDIlMkZNZ1JUb2xQM3NYUDRadjkyZnlZaTZvSVREVnJHMjh4Nk5CZUJ2cVdvV1MxaXZTZUlpa1U4akZJJTJCekxBNiUyRkduJTJCJTJCM3lGYXExcGNYaXgyOFpVR2kzVTJ3YWR4JTJGdXppQUVXdjhBcSUyRkg5dkRMVjdUelhlV3JxYmFXTzRWaEhlTkh0RmRDUDdFaFg1RDR2OSUyQmZid3BDM2xpR2d2SW9WZFNxdDZwTFBHcjBwVGolMkJ6OFh3NENVa0VHaWw3UndSdTlaendqUHg4VVppS2VQU2h5YiUyQlJmTWRoSE0ya0xFViUyQnNEbERMUUZuY1VDeGNSWDdXRUYxRENzNjN6Q3M2cjZjMU5rZW5jcjdyZ1hTcEZzYjV6Q0ZvcmVwQzlQaVVFZlpyNERBRFJWRCUyQmRkVWtQbVBVNGxVZ1ZOdE5HNHFEdzJCb2Yya1AyR3lLMUxFQ3BZJTJCQXFUblVGaHN0YTFDZSUyQjFHM2ludVpDcnlTc2dxd3FGTlJrd3U5UjhtJTJCV0l3c2NFSHJoYXJEQkdqU0g1dFQ0ZjlrY0lvb3A0ZGE2VnF0MkdXMHRiaVFIYmlrYmtINTdVd0hORkxiU3ZiM0NORkxFeFNTSnh4S3N1ekt3UFFqT3UzJTJGbXElMkIxbUZvMUMyTm1GTWpoVFFMR3UlMkZLUnR1bVFmVSUyRk1XaDN1b1RYeDByMXBKZVBLU1dTbkpsVlU1bFFOdWZIbmhReG1PWXhrbFNQaUZDRHZVWlFLVUlwVW43SnIwJTJCN0Q4ZVlyQlA3blJiVWY2MVclMkZobVBtdGtCRnZwdG5FZXpDTWtqNzhDcFJaT1k1dyUyRkJtV2hCQ2pzZXVTeXluMHBJcElyMkNTcjJndGJZVFF0NmF5bHVmUHA4UEJXYkNaUE51clJPc2tZZ1ZrWU92N3RTQVZOUnRnMjc4MCUyQllQTmQ1Q2RXdVJKSEVXa1dPTkZqUmFpaCUyQkZBUGxqc3FMZVJyVmglMkJqUXQzR0JSb1hCQktBZkZ3YWclMkJMSjE1QjE3eWZlYWxFMnRhVEhjWE1HNjNFcSUyRnZiWUwlMkZ2eUglMkI2ZUZLJTJGM2lKeVQ5dkFYa1B5Z1BORXVveHgzS1EzVnJBSHRZV1A4QWVPeHB2JTJGeFdxaWpNdjJXWk1MZFM4dkJMeDRwZzlqcVZxVEZKSXZ3dXA2ZnZQNWxQJTJGRExpbGx2NWklMkJTdFB0TDg2N3BFRWNlbTZoeGtpdkxXaklrJTJGZXZIYjA1ZnRaRjlPa2Q1RXQ1bWF5dm9XRXRyZFJtbkNVZlltaFlmemZ0cCUyQjNrMyUyRkFDNjh6TGZ4JTJGd0NGZFd0MWVFbHJiVW9XJTJCd0dJckRQR3Y3Q3lVJTJCTGolMkIxOGVJZWF2S00zbHE3V3FmV05Pa1lpenVYRmVOZXNFOVA4QWlYN1dOYnFDbmNmbTJmelJvVW1nNnpFcWE3WlBEUFBDdjkzZVFSTUMwMEElMkZhJTJGWmFXTENIemY4QWw3b09yYTViNmg1S3VCSGUzcmo2MVl3ciUyQjVYbHUwJTJGTCUyRmREZnp4JTJGOFF3cHVwNFZXQnJPUmhmVzdpUzBZa3JKYmtkUkxLdjJvbSUyRlk0ZmJ6c3ZrWFU3ZldOSGp1M2poajFaQUk5VUVLaFNKdkVtZyUyQkYxJTJCUEVoWGdQbSUyQjk4eSUyQldyaVR5eHJNMGlDTUJvNVZWVzlhRG9KSVptJTJCTGlmNWZ0UnRoTjVYOHp4V1htJTJGVFo5ZEhxNkhIJTJGb3oyejFlTkxkMUtxNFR2d1klMkJvMmVsJTJGUFhralRQUEdrTlkzbjdxN2hxOWplcVBqaWtwJTJGd0FORSUyRjhBdXhNOG1hem8lMkJxJTJCVjlVdU5JMUtMMDd5MlBGbGJkV1UlMkZabGpQN1VUZnN0aWg5Snk2ZCUyQlZWM2YyZGphM2x0SGU2aXBlelMybXJ6QUZmaCUyQjJpTWYySyUyRkUyWGNmazVvam9UWjMxMWJ6MUpFakZYRyUyRml0RSUyRjRsbmxoM1VTTEtDWTdsU0dMUTdVSTNEQTltejBMJTJCVlA1d0xxeGk4cyUyQmFaUkhxSXBIWlgwaEFFOU5samxQYWYlMkZLJTJGM1olMkZyWXFxYWwlMkJTJTJCb1hiMkVZdnJhV0cza2N5dkxHM0lSdXdZJTJCa2dQRlcyUGZKalolMkJScnV3dUZhMjFpUllGQUNLRktzS2Y2ciUyQm1mJTJCUmVUVUR4eTZZcW8yMExRUXBFOHJ6c28zbGtweWI1OFFCaTJiTmlyczJiTmlyczJiTmlyJTJGQVAlMkZUNyUyRm16WnNWZG16WnNWZGxFQTljdk5pcnpiOHp2SWY2YmhPdTZSRVAwdGJMJTJCJTJCalViM0VRJTJGWiUyRjR5cCUyQnglMkZQOWpPSGFndnFXc013JTJCMUVUR3dQV2gzM3oxem5JJTJGekw4aHFFdXRmMHFQNEpSenZyZFI5bHdSJTJGcENEdyUyRjM3JTJGd2VSbkd4VHROQnJlRXh3NURzRDZTZW45RjRncHBodG8ycHJZU1NRM0tldHAxMVJieUFpdTNRU29QNTAlMkY0WmNLNVl6RzVRN2VHUEVVeVJwTXlrUlNFaEg3TVYySXpHQWtEWTVoM09TRU1rRGp5Q3hMOGJlYVphZ2x4b09weFRXN3FMU1drbW4zY1gyZUozNG54JTJGd0FwY2xNc2VuJTJCY2RJZUM0UUNaUVBYakgya2Fud3l4ZTJSalQ3JTJCMmUwYlJ0VkhMVDVTV2hsJTJGYXQ1T3pyJTJGeFd4JTJCMnVKV3R4ZTZIcVN3OHd0eER2QkwlMkJ4TEdlZ1A4eU9NeWNlUUViY3VvN25uTlZwWjRKbU10d2Q0eSUyRm5EOWJFTlUweTgwQyUyQmF6dVJ5VHJISVBzdW5aaCUyRlRLaWw0a1NJYWolMkJHZFoxSFR0TTg0NlNYVWVuS3YyZ04zZ2xwMSUyRnlrUCUyRkQ1eU85czd2UmIyU3h2VTRzaDNJNk1PenA3Tmt5T281T0ttU3VHVU12UTlNTWRGMW00MFMlMkZqdm9BSFVmRFBBMzJaSXo5cEdIJTJGRElmMkd3anQ1UWgzJTJCdzMlMkJkY0ZucmlyMEdXNUt5eDZoYXY2bHRmcURIZGRXNURiaTFkbzVWJTJCdzYlMkZ6WkxQTGJRNm5QOEFXcnBBYnkzb0pHSTJrWHFrcmZ5eXFSOXJPVTZIcktXSHEyTjhHbDB5NnA2Nkx1MGJqWlo0diUyQkxGJTJGYVglMkZBSFltZGE4cDJpMnRrOHNqckk3bWlUSVR4a2olMkIxSEpRN2h1SiUyQkxKUjNLM3NudXEzZm8ycnVvcVFDM2lkdnNnRCUyRldwbk1KJTJGSiUyRm1lNE1zcTJqQzl0dVVhWGNYRVIzZHJKMWphcEg3Mk5XJTJCRm1YJTJGaXQlMkZ3QjVuVGRJa3N5elcwYyUyRnJ5eFZaZ3pCbUNzYTRlQ1pBS0hESVdnYlBEdks5anF1aDZ4YVclMkJ0VzgxckRMNmxvelRLYUZKUVZBQiUyQkt0Zmh3dnM0N215dkwlMkJOUWZUczJrRDlVSzhnUUtsdjJYcDhTdG5SJTJGelExR1cwOHUlMkJsWk8wZDNkVHh4UXNoS3NLSG03aGg5amlxJTJGYXppNk14RWlJNVlPYTNOeXhKTWpWcnV4JTJCSXJsY3RtUTNUUzkxRTNqQ0cyakhJMDlSMXFPZE9nRmY5MXIlMkZ3MkNMS0ZZeHlKQklGWkpPd0hnTUMyTnJ5RzN3Um5xNTZ0JTJGWmh1c1ppaWh1N2NNV3Q1aXIyenB5aWtVQVU5VCUyQlljdVdSNXBkUHFpYWNRcldxWEN6UjFVU1ZCQWIlMkZBSFlwJTJGbnd1dGRWaHRkVGElMkZnV1ZCT0FrOEJjTkc5QlRxeWs0YzZyYzJkeGUyRjNjMmtjS0pHSTdxeDRrVWpweVIwQjZWciUyRk5oQnFjOWhhU3hwSEVSYVhSYVdJdCUyRnV2Y29UUmE3NVBseVFuJTJGQUpadllJJTJGTVVTMlNORUxpVlRFeWdVam5WVzlPbGZ0SThoVldWc25TWFZ4ZlRHUzZsYVNWaUNTMndvZGpzTnM1JTJGbzhyckw2OXF3ZDZwSXJxQXclMkZkJTJGWVB3OU9tU3VhNTFHVko3NjJzd1FYTENEMUFpcnlOUXJNZmkyJTJGeVZ3eEtrSWpXNyUyQmV6alI3UFRwciUyQlVidjZXeVVIOHpmYTZkdU9FUG5qVDdTRVdtcnh4a1NYYXRhem93QTVLWSUyQlNjZ0Q5cUlyeHdRM21QWDdFZXRxRmhBdHFQdGVnenlTQWV3QTQ1RiUyRk1IbTFkY1JJR2pNZHZDJTJGcVJJS2N1VkN2SjIlMkJSJTJCemdsTFkyeWhqbkxhRVNmY0VxdWJ1clc4TTVIcHpLdklyMUZhRGw3OWNSYlJyNlM4JTJCcjI0NUdDb2FjJTJGQ2pLcDY3JTJGd0F3dyUyRjhBTDNsaTAxcUJMZ1BKTzhmN3Q0d1A3cyUyRnNFOWZoT0hlciUyQlZ0ZmdnJTJCdmFiY0plMUZKclBqd1pWVVUlMkZkeSUyRlI5bGx5SUZpeHVFempLRWpDWW9qbUdNNmphYWpaMjhSakJpRWlzSnpVTFRpM2lTS1Iwd2JvSGtUWGRXdDIxT0xUNXJ1MkE1UmxOMWs4U3JzVldUJTJGQUdENWVuYTFhWEElMkJvNnBEJTJCOUoyV2NlbkwlMkZsQkpSOEQlMkZ3Q3JuU2Z5ODgwVyUyRmx5emwwbTd1Slp0SlIlMkJWbVhTc2x0eU5YaFlEN2NQN1NjZmlUJTJCWERYY3hvc1IxRDhydlAycVdVZGxaYWRIWlc3a1BjUGNYRVllU24yRUtSOCUyQktKOXJoJTJGTmtSdSUyRndBcnRjMDI2ZXkxRm9vSm85eUtzNElQN1N0UWNsejBicmY1amVYdEtoUjdlWVgwc2llb2lRSFlMMjlSdjJDZjVUOFdRN1clMkZNaiUyQlpyT0tkMHQxQ3QlMkI2ZURrN3hNYWowNUNhTnhiJTJGVndFZ0N5MjQ5UGx5RUNNZWZKNDIzNWZYUTYzVWYlMkZBdCUyRlhDN1Z2S3Nta2ZWN2lhYjFkUGxJU1c3alRlRnolMkJ4SkhXb1BnMzdlZFE1a3lOREl2cHl4JTJGYlElMkIlMkZRZzkxT0I3aEZDdXJJc3NVcThKb0hGVWREJTJCeXclMkZVMklJSXNNTW1LZU9aaGtpWXlITUY1ZyUyQmhDTmlwY3lGZjNud0Q3Y0glMkIlMkZvVCUyQjF4JTJGd0IySiUyQnppTnlXMDElMkJOc2VWdE1vTWM0RzdWSDgyVENieXhmV014dFVNbG5ESVByT2xpNTVKSWglMkZ3Q0syWmVNcXRoWVlPTVZ4Qk5iJTJGdTJISyUyRnNsNkpVN1hscCUyQjF4RGZiVCUyRmRlRmdtUGtuVzdxMGVDJTJGc1olMkJPb1dUY2s1ZnRSbnJHOVB0SWZzdG5hdFkwaXclMkZNZlE0JTJGTVdoOGJmWGJkU2p4bmJteUQ0N1M0JTJGNWt5NTVnV2NhWnFEUHAxeVpvNDJQcHo4U3ZJZVBIT24lMkJUZk8ycWFYTUwlMkZTSGlQcWNSZjJNOWZUWWY3OFhqOFhJZnM0cW9Xc0dzUTY0VHBwJTJCbzMxekdiSzlXWWZGRThaOVRjZUk0RlA5bG5wTmJXRFZkR2l0OVJSYmlPNGdUMWczUWtxQ1c5alg0bHprc0UxejUzODJEVTdXekVLb3FxNVVWQW9PSWVWOXVSJTJCTCUyRmdjN1JER3NNTWNTJTJGWmpVSVBrb3BqMFV2SHRRJTJGS25WOUgxRjlYOHZYQ2FqeVl0OVR1UW9ZTFNpamt4OU9UaiUyRmxjTVM4cSUyQmFMbnk5NWd1b05ZczJzJTJGcmZFWHNMTHhLeUpYakxINHB4T2Rwd2wxenkxcCUyQnZDT1NjdERjdzE5SzVpb0hBT3hVMUh4SiUyRms0b3ROb1pZcmlKSm9XRHhTS0dSaDBJSTJJeUYlMkZtTiUyQlhsbDU1MHo0T01HczJvSnNMeW5mcjZNdjgwTCUyRndEQ2ZheVU2UllOcGxoRFlOTVp4QUNxeUVCU1ZxU29JSDh1RGoweFY4TmFwcFY3cGQ3TnAlMkJvUU5iWDlxeFNhSnVvWWZycjlwV3d1U05nNE5TSEJxS2JFSHhybnJMODBQeTJnODZXWDElMkJ3Q3c2OWFKUzNrT3l6b04lMkZxOHglMkY1TlAlMkJ3MmVYbTBxOGd1Wm9ibEdnbGljcE5BNHBJcm9hTWpmeTBPS3ZwZjhsdk11c2E1b2wxWmF6T0xxWFMzamlpdVR2SXlPdkpSSWYyeWxLYzg2ZU04eSUyRmszNXVzZksycjNGdGZ5TXRqcW9SWlozcVJGTkdUNmJQNElRN0klMkYlMkJ4enRGMSUyQmFIa2UwMVNEUjMxYU43bVolMkZUTFJWZUtOdTNxVEQ0RjVkTVZabG15bElaUXdOUWR3UnVNdkZYWnMyYkZYWnMyYkZYJTJGJTJGVTclMkZtelpzVmRtelpzVmRtelpzVmRqWFZYVmxZY2xJSUlQUWc0N0dTT3NhTkk1b3Fnc3g5aDF4VjRSJTJCWnZrQTZWSzJyNlZIJTJGdVBsYXJJdjhBdWx6JTJCeiUyRnhqYiUyRmRmJTJGQTVFb0pMSyUyRndCRmgweU9KVTFBeXJINm9BQmJvcUpJdGVidHlKa2paUDhBS1ZzNzNxbm0lMkZ3QXN5Vzg5bGVzN3h6d3RTTXhNUktHJTJCSGdocHg1NXclMkZ3QXklMkJXcGJJSFdOTmplR0tGa0RqbFZ3NSUyQklQR3dwOFMlMkZ0Y2ZzWkdVYXVRSHZkdnBOV0p4amh5eU1aQSUyQmlYUSUyQlVtTVhOdGNXVnpKYVhTR09lSmlzaUhzUnRsbDF1TGY2cmNNZUtiMjB2Vm9XJTJGNnBQJTJCMHY3R0hzTHI1cHR2cTdtT1BVNEVsbUVoSEgxZUNJSTRrcCUyQno2YU83JTJGdGVwaEJOQlBieXREY1J0Rk5HYVBHNG9SN0VaVktKSHJoeiUyQjkySmpEUEE0Y3czSE1kUiUyRlNpaU5HMW03MDI4RWlFQzRqJTJCR1dNbjRKVTdxZjhBalZzbG12YUJwM25MU0Z2YkNpVEtDWTJQMm9wUDI0cEtmcyUyRjlkNUJURkZJeXM1WkdYOXBLY2g5QjY1SnZLbXJTYVZkZXZ4ZWExbSUyQkNjRUZReWo5dFIlMkZ2eE10eFpCSVY4eDNPaTFla25wNVVkNG42WmQlMkY3WG1za1Z4cDExSlkzc1ppa2piaXlIc2Y4QW1rJTJGczRjYVBheTZwZVFhZEU2ckpNd1ZYYm9GNmslMkIlMkZFRE9uJTJCZFBJa2ZtU3lHcDZRQTEycWM0SkZwU1ZQdGNHOSUyRndEamZJMzVhOHF6YUZOYTN1cktyWExtc2NmSTFnUDdOU3YybiUyRm15d3hvdUlOMURXUEtEVzk1RFk2SzB0NUlmZ25hVUtnRDA1Y2w0OUk2SDdUWjBieW5CQW1talNWdmhjejJxRU02MCUyQkhuVlJ3OW9tJTJCSCUyRkFGc0l0ZmhuZGcxcSUyRnBOZHhtSXVEUVZVJTJGRUNmOG9ZUmVTTGs2UjVuV0J3MWJtVDZzU0Q4RkdCYjRoJTJGTnlYRHlQdmJzV0lURTklMkZWR0prQjMwalBLVjFQcE9zckJkdVJMRmNQYjNKWTlWZGl0VyUyRjJYeFowJTJCOTFPMnNwSW9KV0wzRTU0d1cwWTVTT2Y5VWRGJTJGbWR2aHptJTJGbTJ3JTJCb2VhcEpsQlZkUmpXZENEc1pFMmNmZXVIZHZmUVcwQm5nWnB0VnZFSDF1JTJGbEc2Z2olMkI1aEg3S3IweEhjMHBEJTJCWWc4d2ExTkRGWldqU1d0c3JDUm9pR0pjbjQ2YjFZZEYyeUZXZW16eHNXMUNONEVqJTJGWmxVb2Z1Yk9zMldweHBOR2wyb01QMmVTYkVlNXlUWEdrYWRxRnBKYVQyNlQyODYwWUVWQkI2RUh4OE1lQ3pkcHVubEV0cEhZUTM4R3FSckZOYVBBOEVnSmNGYSUyRkdxaGFkYW8yWEJHbG1iZTJ1Q3pldmJHZVJvMlBjTkp4JTJGMlMlMkZEaHQ1MXMzc0xwWUxvSDZuY0lxMjF3UlUxVWNlTHQ5SHhmOEhoajVmOHBYZXJXYyUyQnEyVnJIcUUxb3FRV2R2Tkx3VW9pam1KQiUyRk85VzQlMkZzOGNqVkgzTGV6RXZNMm1YV3F5YWJOb3pCN1NTMVdKNVN3QnJIV25MdjhBM1pVYmZ5NG9ubGF6bXRyS0MlMkJKbE5vSEZGTkZibVFhSHZ0VEo5clBselU3R09PNnZyUmJlTmlvUVFNclJ4bW45MzhJWGo0WUUwZlFMblhCZFEyMDYybDFDUDNTU3J5OVhhdjdvZzAlMkY0TERzaWtwczdDM3MxV0syaVdKQiUyQnlncGc1bE5PWDBZQVZyN1RMMHhYc3hjeHNWbGhrdHdwRlB0TFZXd2JmJTJCYW4wZTh0cDdMVFlybXlJTGxweVQ2aG9SdzIlMkZ1JTJGVGJkbHczdGFvSzR2N2ExZFkyZFc1R2pRMXFWSGolMkZ3QTI0VmFoNWEwM1ZsTnhaRVFUdHZ5WDdMSCUyRkFDbHlmanlmbzNuclRyYlY5UFJOSTFpNmdNOHFSRU5DOGdiMDVPVUklMkJOUjZuUjElMkY0SElScU9qNjU1VnUlMkZRMVNCb2dUJTJCN21VMWlrQTdwSjAlMkZ3QmkzeFpHd2RpemhPZU9YRkNSQlNQU1pOWDhtYW1sMU1oTnNmZ2xkUGlqZEQxSCUyQlMzN1M4czZaTHJFRVp0MnVFZTFXNlZXdExzZyUyQmxLR0hJR09SZVMlMkY2d09SOWRXdFJwMTFkU1ElMkZXSHQ0V2slMkJyOTNJR3lVJTJGeXNrJTJGayUyRlc1SU5BVFQ5WjBlQVdjekdUNmdyJTJCb0lsZmNnQnhzZjJ2VCUyRkFHTVl4TVNlRTJEMDdtN1BxQm1qRXpqV1NPM0VPVW8lMkJZNzJNJTJCWWZMY2QzRkplUVJ4eW83RXpRVTc5MkdRNjBiVTlIa2Y5SFRBd3RzMWpkVmVObCUyRnlYJTJCMm4lMkZFYzdaTDVYc3RWU1M1OHA2a1lacVZiVHJ5c2lmNnRXUHJSciUyRnNwVnptdXZhRHEyanpzdXAySnRBNU5DZmp0bU5mOTFUamIlMkZZeWNjSjh0bWdKUHFWNEpKTEpwSTNzWUxxSjJ1WSUyRnRCZ1A5MXE2anBJeThWdzBzTk5uOHRHMTFtOEtXTm5xVHJBdW1zNVloVHZ5Y3QlMkIwUjhmdyUyRlliJTJGV3dMZFJwZmFWRWtrUE81MHIxSGhqSkFMUlNnOUhwWDkyJTJGd0N6Z1NXNFRWOUhnYTV1cHBkVnNwRnQ3YTBGT01Oc2hISm0zVnVaWThmViUyQjB6ZkJsWkhxM0JOaWdPbm01MkxJZkRIQ1l3TUNKbVZYSThJcU1ZbnpJNGY4NWwlMkJzUlFjN2VTS1ZSUEhLdHM0cnVVa1BBY3Y5UiUyRml3YlphWTFwNWd0ckhVb2lwam5qV1pPbzRsaFJ2OHBHd2NQTDlwY1JPWm8yUzZaa2FYZ3lxb2FGVms0aG4lMkJKOXVQcU54d1ZybXNXdXB2WXphbEY5UzFLMWxUaTZHc2NzWVlNcFYlMkZGV1VOeCUyRmx3WW9TamQ4anliTzBzdUxNY1VzZG1VUVJPeFJybkg3NVBRdGQ4dmFUNWl0QlphcEFKSTBZUEU2bmpKR3clMkZhamNmWnpnJTJGd0NaV2gzR2hXJTJGcjJ3SDF2U1owRFhsUGlhMW0lMkZ1WnVLN01WJTJGdUxqJTJCYlBRMXBkUjNsdEhjeEdxeUN0T3REM0gwSElGJTJCWkZuYjNrOEVNcWh4UEJKSE9oNk1uSVVEZlNkc3NEcTN6ZnFXbVI2bEZKcWVuUkNPNmlISyUyRnNrM0ZEMG5nJTJGbWpmQzNTTlZ1ZEp1VXZyS1FKZFFPcnhjMURvYWZhU1JHcXJLJTJGUmx5VTMyaTNYbG5VNFJIT1lyRjJJc3IxaHk5Sm0lMkY0OTUlMkY4QWltVCUyRkFDc0t0ZTBacCUyRlcxS3hnOUthTCUyRkFJNk5pcHI2YkglMkZkMFg4OEVuMmxmRlgwJTJGd0RsejV4MGZ6YnBBbHNJWXJPJTJCZ0FGJTJGWXhCVkNPUiUyRmVJQlRsRSUyRjdMZjdISnBuaUx5ejVtMVR5cnFWdHEybHk4Wll6dXZWV1g5cU9RZnRJMzdXZXVmSm5uSFRmT2VrSnFWaXdTWmFMZDJwTlhoazdxZjhBSlA3RCUyRnRZRlpKbXpac1ZkbXpac1ZhT2N0JTJGTmo4c3g1bnRKTmIwTmZUMXVCYXl4cnQ5YWpVZlklMkY0enFQN3R2MnZzWjFQS09Ldmh6MENzYndNenFTU0hQUmd3MiUyQkwzJTJGbXdybGhlQiUyQkQ5ZXhIUWp4R2VxZlBINU9hZDVsdXBkVzBpY2FicVUzeFRxVjVRVE4lMkZPeXI4U09mMm5YJTJGZ001OUglMkJRZm11NW5XQzluczRyYmw4VTZPek1CJTJGa3B3R0tyJTJGeWslMkZPQnRPTVBsbnpUTVdzeVJIWTZnNXFZcTlJNWozaSUyRmxmOEEzWG5veFdWMVZrSVpXQUtzTndRZWhHYzY4c2ZrdjVROHZCWnJpRTZyZHJRJTJCcGRBZW1DTzZ3ajRmJTJCRDU1MFZWQ3FGVVVWUlFBYkFBWXEzbXpac1ZkbXpac1ZmJTJGVjclMkZtelpzVmRtelpzVmRtelpzVmRpTnpORGJ3U1RYTEJJVVVtUmowQTk4V3dOZlBhSmJTbSUyQktpMnBTVXY5bWgycGlyQVBPTjVwTVdpU3RvaVBKZk0xYlZJNHl5MUc4akRrQ253cmhEckQ2akZiJTJCV2JDN1d0MzZFY2wlMkJDUCUyQktpWkhidHlKYWpmNVdEdlA5eFpSYU5DZkt0eEtiNHpqMDRJT1I0MDNKS2tmQU9mSCUyRld3czg0YWpOZDNFRWtsRnVTT1V0SyUyRkRSVlhpS2R1UU9GSWVlYXRwazBGNVBlYVVqJTJCbEFUTElZd1NZaFhkJTJGaCUyQnlsZXVMUDlVMTJ5a21pV08ydnJXT1c0bjNQeGdjQUZYbWF0eTNjZjc3JTJCeDlqTzElMkZsdm8wRWVqVDM4OFN2SnFETWpGeFhsRXZ3OFRYOWxzNWglMkJZJTJGa1NUeW5lJTJGcEhUVlk2TGRzVlVqJTJGZER0MWhmJTJGaXR2OTF0JTJGc01nUlc0ZHhvOVg0dkRpeVNxY2ZvbiUyRk8lMkZveVlKc1FHSGZKTDVGc3JYVWRaazBtNnVUYlIzVVR2SFFBZ3pSamtPTlNPRGxhNUdnY1gwJTJGVUpOTDFTMHY0MURQRklObThHJTJCRSUyRnJ5bSUyQkhNRDBrNTJ0eGVMcHBqcVBVUGZGNmw1WDh4V2xtOTk1ZXZabGd1TFNka2pSOWdUV2pyWG92UDRYVEVQTTZ3d3pLU0tDVDR0dW9JTyUyQjN2a2U4MHhYVTJ0VzEzWlElMkJvMTVicThucEo4VWxFTFZwJTJCM3NNQldPc1hPdFd5MmlFeVhOdUN5SXc1TXlmOFZzYXNlRlA3dHZpekw0dHElMkJUek5VZnZUJTJCT1U2bnBreTlacmNpVkFPNVh3JTJCYThzaXMwMXJwJTJGbUMwMU81WXJTV0o0a1hjeUZpQjluc0slMkZ0NWZsanpMWHpNbGcwYlJRdWpRRVNiVmxEY2w1SWVuTDRreWVlYlBJcDh5Nmo1ZTFEU0VqWDBYV080UXNxS1lrJTJGZlJnViUyRmI1Z3g4Y0hNZTVsR1VvbTRtanVQbnpTVyUyRjFPZlZMNlI3c0pXMmtlS0ZVR3lnR2hJSjNQS21OVnklMkZUQWsxcGRXYzl6QmRyd3VFbGNUSWV6QSUyRkVNaiUyRm1qWGJ2UXRhVzN0RUJnQ0pNNlB1Q0hGUUV4dGl6U0tJMURISnY1VnV4S3JXTXAlMkJ3QzhKUGglMkIwdjBaQ05MdnJmVXJHRzl0aldPVlFma2YybFAlMkJxY1BkSG1lM3ZJWlYyNHNLbjJPeCUyRkRKQlN5enpCcGxycVduU1FTeExJMFA3NkVzb0lEcU8zJTJCc01nbWxheGNlVWRSWFU3WlM5akpSYjYyWG9VUDdRSDgwZjJrJTJGNEhPZ1hkeVZZZ0hwMSUyQldRVzhnNFR6UXlvUXBKSVZoMVZ1aEdKQ2g3Rkc5aHJlbXBLaFc0c3J5TU1wNmhsWVYlMkIlMkZPV2ElMkZiWGZrJTJGVTBaSk9FTDFheXUyJTJCeTFQOTF1ZHYzaWY4T3VDUEolMkZtaFBMMXhhYUpldHgweTRyRkZNeDJpbUpKU3ZoSExYaiUyRnI0TiUyRk85RyUyRndBSjI4byUyRll2WTY5JTJCcU9NZ2RsWXpxUG1XeTh4cjYxNWFvdW94QUEzZGs0ZEpCMCUyRmZSR2pvZkJsNTRVJTJCbkN5U1JOU2ExbCUyQjJ2UXEzODYxJTJCeTY1R1BLY3p0cXhqWTdORXc0alliVTMyem9OcHBGMXFmcncySlg2eWllckhFeG9KaXZXSWY1Zkg3RFlZblphWTNwTjlONU4xbjlKSkVidUl3eVJvaXNZMWtEYnBWdTNGJTJGaWRNN3hwbDNZJTJCYWRGdDdtNXRsZTN2SVVrYUNZQng4UW93b2Y1V0IlMkJQT05HMGp2TFkyOHFsUlVncXdveU9PdTM3THBpWGwzWGJqeVpxazdYZ2xtdFpJZlRFS05RR2g1UkVGdnN4cjhYTGpnSXJkV1FlZHZ5N0dpUVByZmw0U05heFZlNXMxcTdScDNraSUyRmFhTmYyMCUyQjFrVDA3V0dDcXdjTWpkSkZOUWM5QzJOOUJxTnZIYzI5V2lsalNWR0kyS3lDb3BrRnYlMkZ3QW90SHU5Y09xMmQxSllXMHg1M2RoQW80TzUzSlF0OE1ZZjlvY01GeUIyM1p3R09RSWtlQ1FHeHF3ZklzYXROUVNRcklybU9VYnJJaG9RZkVFYjVMTEh6UFA2WDFUVjRScUZvNG96RlZMMCUyRndBcEQ4RW1GbXMlMkZseGVXQk54b0VwdUlodWJTUWoxQiUyRnFQc0h3bzAlMkI0bHRVbVc3Um81b2pSbzNCVmhUMk9XQ2kxdCUyQmJQSjFwRkNmTVhsSmd0bCUyRng5MlZDeVJIdXdqYjRrWCUyQmRmMmNpT2xHMmh1aGNYMm44SkkyQkU4RkhIek1UYiUyRjhUVmM2RnBXdXRheVNQYmxKRW1IR2VDUVZWd1AxWkd0Y3NJYmU1TjNwMFVpMk1sV2FNN21CJTJGd0JwUTQlMkIxRiUyRkxrVEd1bGhuRElZbllwcmY2dFlheGF4eENEbHhJYUc3aWtvOFo3a0d0V3IlMkIzeXd4c2RHbDFXd2l0ekdia2drUnp1Z0RHblJtMzRSMCUyRlpiSUpCWnd4djlZaEFWeDhRcDBKUGlCbmFmSmwxZVhla0xOZHlyS09YR05nQURRRDRnM0dnJTJCRTdZOFd5VExmaUhOSmJiUXZOSGxlJTJGZTUwZVFYJTJCblhBRDNWZzUzRW9XbktJbWhRbW43UHd2OEF5WVJYOXhxbDFkbVhXT1MzWEhpcU1ucDBRRWtLcSUyQkE1ZmF6clF3SHFPbVdtcVFHQzdqNUQ5bHhzeW54VnNGc0xlTzM5aGIzOXRKYlhNWWxobEhHU051aEIlMkZVZmZPWlh5MyUyRmw3VVYwNW41TWdycE4xTFRqTENUOFZuY0VqJTJGWWY1T2R0MW5RYnpSM0pjZXJhc2ZnbkEyJTJCVCUyRkFNcllCJTJGNVYzWSUyQmR0QXZoZWZ1YnJuJTJGdU51eDFqa1FVWWtEN1VibmlyJTJGNnVFcThEMXJURms5WFVkTmdhSGl4JTJCdTJYVm9IUGNEJTJGZmJmc3RuUWZ5QWViJTJGRmt0QyUyRnB0YVNGMVZnRk5HVGlYRmZpQSUyQkxqJTJGbFpDOVd1TmQ4cDZrTk0xZTA0YW5Zc1kybVk3VFclMkZaRzJwS2pmc1M0SzAwM21rQ0h6bDVXbURMYXplcmNXb0I5V0N2WDFGQiUyRmVRdDlsdjhuSW9mWU5SbDVGUEkzbmpUZk8ybGk3dGFSWGtRVVhscDNSajBaZjVvbiUyRlliSlhpcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRiUyRlc3JTJGbXpac1ZkbXpac1ZkbXpac1ZkZ0hWWTlQbXRIaTFKbFczY2dFdVFCVWJyMXdkZ1BVZE50dFR0emIzSUpXb1pTT29ZZHhpcnpIenRQJTJCaTIwYVR5dmRtNnVEY0pTQ01KSVBUVmhSV0tqN0JiYmkyQjliOGtlWnJuVjNGdmJlcmJzUXNWd0hVS0ZKNnRVOGhTdmhrJTJCJTJGd0FQR3kxR3d2TE9rcUs1anUwY0lQM1lRJTJCbkl0QVBpaWY4QTRua2twaEtRYVFPazZlbWw2YmE2ZkdRVnQ0d2hQaWYyaiUyRndXTzFMVGJQVnJHZlRyJTJCSVRXdHloU1dNanFEJTJGRWZzNE16RVZ3SXNnMk5pJTJCVlBPSGxtNThwNjVOcFUxWGhQNzJ6blAlMkI3SVdQd24lMkZYWDdFbiUyQlZnVzI4czYzZjJrV3IyOW03NllzNnh5WFFweFVnZ05VZmE0aXYydU9lbjljOHQ2SjVpdDB0OWFzMHVvNHp5akxWREtmOGwxb3k1RUw3VHJpR1czMEx5dHA3UTZEYnMwZDd4STRPeiUyRkZXUGx5Y21OdmliJTJCZkt6aXVmRVRzN1dYYWhPbjhQaDlkVkluNmE3JTJGZXdEelBkM3VrTnBsell0eHRFaFcyYWRWQkt6Umt0VGthbE9kZiUyQkJ3NjBieWRaJTJCYU5SJTJGd0FSYVBxMFZqT0l3NTA5YmNMSWt3JTJCMTZ5aCUyRmpSbSUyRjNhbjI4ZGU2ZExZVFhHazZ4RHp0cHg4YUhveW43THFmYjluSTNZWCUyQnJlUTlUaFMzcGNXaGN2YXpNQldTRSUyRmJnYVElMkZGOFA4QUpscnJEdnVudm1yeUI5YnVGdnpBdG5ya1FEODR6JTJCNm1LSGtHUnR1JTJGODJIV25PJTJCb2FkTHBVNWFDNFplVUw5R2lsJTJCMGpLUjBhT1laT0xPODBqemhvMGQzWnY2a01uMldGUFVobEd4VmglMkJ5Nkg3V1FXYU84MHJWMWh2d0JNamNmVUFvc2tUYkxJUCUyQk5zSXI1b1N1MTB0Zk90N0lrdDR0aDVpalFDNmhrU3NkejZmd2ZXSWlDQ3I3VW1UaiUyRmw1SkclMkZLVFNkVGpnJTJGeERJTGg0VUNVZ0hEN1A4QXhhZmo0NUdQTWRrWXRSa3ZiV2Y2amV3RVhOaGNyOXBwVDlwRVZhdEpXbnhKeCUyQnpuUlBJZm16JTJGRnVqZlc1WSUyRlN2TFolMkZxOTRnQkNtUUN2TlFmaVZYJTJCMXhiN09BMk5sZWFYJTJGa3IlMkZBMTlKYjJyTyUyQmxYYmM3VXZ1RmJ1dkwlMkJiJTJGaVdDN003SE91YXJwZHJxOWpMWTNpOG81QnNlNnQyZGY4QUtYT1A2amJhajVkdnBMSzVVU0JkMGZjQjA3T3Y4Y01UM3FrUDVsNnRya1dwMmtOaThzVnI2Q1Nob3lWRHlIN1JKSFhqOE9RcGZOZm1DTjElMkJzWGNzbkJlQ3JPZlVBVWRGSFA0dVAwNTJueSUyRnEyZzZ2ZVI2VDVoZ1g5NEFsbXNwJTJGZHN3JTJGM1clMkYlMkJVMzdHU0hVZnlwOG42aFVwYXZac2U4RGtEJTJGZ0g1cCUyQkdDWE5lVHdNJTJCYnplV3h0ciUyQjNTVkhGR01aS01QOG9CcXIlMkZ3QU5oOXF2NWdwcjNrVmZMVjl6azFPM3VJakZPd3J6dDR3MUdaaFVlcW4yUDhySkQ1aSUyRkpKcksybHZOS3VmclN4JTJGRVlDbkNYaU90Q3BLUHglMkYxTTUwM2xxN3RwRHhETlVVVUdsUHd5SnRXUWZsZnBNV3NlYUZ0TGdzc1p0Wm5ESjFWaHhDbjM2NTFlMzhxYW5wJTJCczJaWDk1YnJLRyUyQnRSN1VWZmlvNiUyRnMxNllTJTJGazNwR21XeHZOUiUyQnNwSnFmRVc3V25SNGtyeUxGVzNQcU4lMkZMJTJGTG5XOEkyVXNXOHglMkJWbzcxbjFMVDBDWHAzbWpHd2xwMyUyRjR5RCUyRmhzZ2w5b3lYVWF4WDF1OExvQ1kyZFN0ViUyRmFHJTJGZ2M3SlRFYml6dHJyMHpjUnJJWW1EeGxoV2pESkNYUW9lVmVXOVJ2OEF5MVBLTDI1a3VOTzlFTEVvJTJCSWpnYW9LayUyRkFxSnl6cXRyZFFYa0NYTnMzcVF5cUdqY2RDQ0s3WkZQTVBsMVlnOTVhTFdBN3pRamZqWHF3JTJGeWNCNkpyTnpZM0JXN3VBYkFSS2dVcVNRVklDOEtmQ3E4Szh2aHhxOXdsbnRLNER2dEowN1VnQmZXNlRVNkZodlR3cU44RlJ5UnlvSGlZT2pDb1pUVUVISDVGREM5WSUyRkw2d3VTWjlJYzJNM1gwdHpFZm82cCUyRnNjTDlCJTJGTHk4WFZKTlM4eTNZdW80MWFLejAlMkJFa1FyR3dvV2xPM04yem9tVlREWlY0bDVuOHMzUGxxOTRvUyUyQm5UayUyRlZaajI3JTJCazUlMkZuWCUyRmhzTU5JODkzV2oyaHQydGhOVlNFcDhQR1NsQkslMkYlMkJTZjI4Nm5xT25XbXFXY2xsZXhpU0dRYmc5UWV6S2YyV0djbzEzeWhkYVZNVVQ5NUEzOXpMMEREd1BnJTJCSVpjM3BQbHpVNWRTdEdhNElhZU5nR1phQUZXSEpXb01PYzV2NUUxQjdXZjZ0Y0FvRCUyQjVQTGIzalAwZll6bzR4SVlyWklvNVVhT1ZRNk1LTXJDb0lQdGlkcloyOWxBdHRhb0k0VXJ4UWRCVTFPTDVzQ3NPOCUyRndENWU2VjU3MDhSWE5JTlFnQiUyQnAzb0ZTdGYySkFLYzRtJTJGNFhPSVdYNVIlMkZtVm9PcHVtbXdJeVNBeE5Nc3NaaFpHMnEzTXFlbjgwZWVvS1pxWXE4bDhoJTJGayUyRmNlVzlRdDlaMURVM1c0Z1BKTFMwSkNFR3Z3VHl0VDFVMyUyQng2YXJuV3MyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGMSUyQiUyRjVzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFV6WnMyS3V6WnMyS29YVWpJTEc0OUUwazRFS2V0SzQzVFlraHNvUXA1RXFHWnZFbnZncDFES1ZiZFcySTlqaERkYURxVCUyRnVMTFdKYk96UDhBdWxFVm5BUFZWa2I0aGlxQjh3V1VYbVMlMkJYVFlXUWkzaWtacGh1VWxxT0ttbjdQOEFObk90UnNpUFcwVFdVS3FEOW9mYWpZZlprUSUyQjMlMkZETG5ZdEgwV3kwVzNhQzBCSmM4cEpIUEoySjhUaFY1dTh0SnJkb1pyZFFMNkVIMHowTGolMkJRJTJGOGE0YlRieFhRUE1HcSUyRmw5cjdtU3M5amNVTjNDdjJabyUyQjF4RDRTcCUyRnpabmFOWWh0Zk5tZ1JhaG83SmNNd0UxcEtDQVNQMjQ2JTJGc24lMkJaZjU4Z3N1Z1dXdGFQRnAxeFJMMjFxRmtGQ3lQM1U5NllSJTJCVWZNdDclMkJYJTJCcXZwbXFFdHBVc25HZU90UWpFMEZ4RCUyRndBelV4T3klMkI1a0htR0NPYTFzNyUyQlZlRXNGWXBISTNTdnd5QnZEaTY0N1J0SDFieTNxRVhtUFQ1VmxnbldtbzJDMUFtajZySXJINFJNblZjQ3ozRnZKNXgxcElxWDJoMzBjVnkzb3V2Mm5RRWVrYTlYWlc1WkpOUHVsdDdkYlpwVExhc1A5SGxZVWFsUDd1VmYySmxIMnYlMkJFdzg5MVp6WTN0dnFOdEhkV3o4NHBCVUhvUWU2c1AyV1g5ckM3ekpvRU91MlhwN0xkUlZhM2xQWTkwYiUyRkFDSHdpMElhaEJxdGRPbzloS2Y5TGpZMFZmOEFMVSUyRjc4eWJaRkQ1OTFqUzNSM2duUm81WW1wNE1qQTlzbkhrcjh3ZVJpMEx6SklJN3BRRXRkUWMwU1lkRldRJTJGc3klMkY1WDdlSCUyRkFKdzh1THFNRFg5cWclMkJ0UkwlMkI4VWY3c1FmOGJMbkpidXlqY05GS25ORDFVJTJGdzhEaDVwZlFvM0djNDg3ZVZGaE1tcTJLZnVITmJtTlIlMkZkc2Y5MktQNUclMkZhJTJGbHlQZVhQTSUyRm1meTJZNHBtazFQUnFmQkJLcE53aURyNkUzJTJCN09IOGo1MSUyQjF1YlhVN0pMaUtrbHZjSldqRHFyRGRXSCUyRkVzVjVQbnRvRml1VXVRT0Z4RnZIS3BLc1BwV25MSlo1Yjh3NjVwMXhFZ3VYdUlwM3E4ZDA3UDElMkZaVm0lMkJ4JTJGa2NjYnIlMkJobTIxMjVzYlBnZ1g5NUFacThGUmh5M3AlMkZMOFNyazE4MWFESHFlbXBxdHZSTHUyaERuZ1BoZU1EbVYlMkYyUDJvempzcktMVzVqdTRFbmklMkJ5NHJROVFlNE9MNUQlMkZBQ3A1aGd1N2lPd2trVVhGeEQ2eXg5RFdNOEhOTW1HSkZGRFJGUlFpb1BVSElocm1nckFYdWJkSzJ6MTlXT2xlRmVwSCUyQlJrd3ltQ2tVSXFEMUJ4QnBXSWFOcTA5bzMxV1VSclpvaWVtMzJlUEVoZUNJQjhWViUyQkxKY0dCM0JCSHRrYTFMUVhWbmUwWG5DOWVVUSUyQjB0ZXZIeFhBMmx4YXpIZlc2MjByeDJhdFc0Z2tTcUZPUENnZHZqRENsVndrQTdoV1lac3d6WkZYWW5OQkZQRzBVeUNTTnZ0S3dxRGltYkZXRTZ2b0UxaElidTBCZTNCclFWTElQOHJ4WEpSbzkyYjNUNFoyJTJCMVRpM3pHMWNHa0FpaDNCN1pTUnBHdkNOUXFqc29vTjhOcXV6WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5RHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VmlQbWJ5bzkxY2ZwdlFpSU5WVCUyQiUyQmg2UlhTRDlpWHdsJTJGMzNOJTJGd1dRelc5QVhYbyUyRlhhRmc3TCUyQiUyQmhLMG1qZEJ1YWZ6QUNqcm5ZY0RUV05yUEtrOGtZTXNaREk0Mk5SNDB3M3RSVzN6MXAybDZobyUyQm90TEFmWFZFNU9nRFZsakElMkJMaiUyRnhaR3Y3T1MyQmJlYVJic2NwSTVZdUxRcTNFVElmaVFjdjJaVlA5MCUyRjhBc01rM21pMUZqcUJudDBDcGNJSElVVSUyQk5UOFJGUDV0dVdSRFRGRXVsd1BhUDlZalZTZlZqQklGR1BNJTJGN0J2SENPU1hxWGx1NnRyblRJMXQ3WTJaaiUyQkdXMVlobVElMkJKY2ZiNWZ6WWNaQlBLbDFJN0dSWEhLR2kzQVklMkZhalBSdmRzblFOZDhCRkZEam5MJTJGUFdoSmFYZ3VJS1J3MzNLbmdrbFBpJTJGMlB4Y3M2amtZODkyVWwzb25xd29aSkxXUlplQUhJbFQ4RDdmSnNBVkJhTHBVZXVlUzlQdHJpWVBjV3lrUVhrZlo0eVZERCUyRkpQMld3WDVYMU5KMk5yUUlHWGtvWHB6UThKUDY1R1BKZm1PVFI1RzB6WExtR0N6bFltemhaUFNlRTA1Y2VQN1VUamZsaU9oYWdrV3MzQ1cwZ2tVWGJQWmpvWlZrWThrUUhyOE9TSFVKWkQ1NDB2bVl0VlJCSUF2b1RvMjYwSnJHelU3Y3ZoemFKNWpnbTB0OU8xdTdnaXUlMkZSZFklMkJKNDhveUNnJTJGZDlReWZaJTJGd0FySmhQQkZjd3ZienFIaWtCVjBQUWc5c2d0JTJGd0NTTHBKeTlweG5pUFJpUXNnSDhyZnpZQjVxbCUyRmtxMWhYVTRaaWdOd2pzaXpmdGVtVTNVZjVKenAlMkJSWHlsb0YlMkZwajNGenFZaVIzWXJheFJFc3l4JTJGelRPYUw2aiUyRnlwOENaS3NTVU96WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5SHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VmczNWlQck1FRmxkNlhiUjNDUk0lMkZybzFmVUlJSHd4JTJGczRVJTJGbHJxT2t6M2MxbFlRbUVORkpJOERDZ1J6SURJZzViMUphdlRPaWFqWkxmMmNsczFLc0tvZkJoOWs1eWRwSlBMJTJGbXpUOVpjQklXWTJ0NXNGb0Q4THM1QzElMkZ3Q0RreVE1S3lqV2RMR2k2bWwzYnJTeXZLeHVvNkk1OFA4QUpQVmNsT2lYWnVyUGk1ckxBZlRmNWZzbjdzRTNkckJxRnE5dkxSNHBWMkk3ZHd5JTJCJTJCRjJqNlhmMkY1ZFMzRXFOYnloVmlWYThpViUyRmJmYWc2JTJGWlhCZGozS25XVVJYTHpZRllWNW44bjN1czZ1dDdidEVJVEdzYmM2aGw0MThCOFdGZDc1WW04c3ZIcVZxUHJRaUNzSlNQaWlrSDJqUWZzTm5TY2F5aHdWWUJsT3hCM0JHRzFTYnk3cmY2WWdaNUtDWmZ0SUJTbUhlRmxsb2RscDk1TGVXcWxETUtHSWZZQjdrRERQRSUyQlN1elpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGJTJGMHUlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaRmZNJTJCaXBMVyUyQlNKWkFmNzFDdGFNUHN5Z2Y4U3lWWlJBSUlPNFBiQ0RXNnBQNVl2RGQ2V2l1MVpiYyUyQmklMkI5VHQ5bXYlMkJ4dzV4RzN0YmUxVmx0NDFqREhrd1VVcWZFNHRnUE5YWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOVB2JTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWJTJGJTJGWicpOwotICAgIGJhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjsKLSAgICBib3JkZXI6MXB4IHNvbGlkICMwMGFhMDA7Ci19Ci0KLS55dWktc2tpbi1zYW0gLnl1aS1oLXNsaWRlciB7Ci0gICAgYmFja2dyb3VuZDogdXJsKGJnLWguZ2lmKSBuby1yZXBlYXQgNXB4IDA7Ci0gICAgaGVpZ2h0OiAyOHB4OwotICAgIHdpZHRoOiAyMjhweDsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LXNpbmdsZXF1b3Rlcy5jc3MubWluIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC1zaW5nbGVxdW90ZXMuY3NzLm1pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYzMzk4ZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtYmFzZTY0LXNpbmdsZXF1b3Rlcy5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLXJpbmctdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1jZW50ZXItYnV0dG9uLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtbWFya2VyIHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLC55dWkzLXNraW4tbmlnaHQgdlw6b3ZhbC55dWkzLWRpYWwtbWFya2VyLW1heC1taW4sLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlci12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLWhhbmRsZS12bWx7YmFja2dyb3VuZDowO29wYWNpdHk6MX1kaXYuYmFzZTY0LXNpbmdsZXF1b3Rlc3t3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJTJGOWolMkY0QUFRU2taSlJnQUJBZ0VBWkFCa0FBRCUyRjRSZkpSWGhwWmdBQVRVMEFLZ0FBQUFnQUJ3RVNBQU1BQUFBQkFBRUFBQUVhQUFVQUFBQUJBQUFBWWdFYkFBVUFBQUFCQUFBQWFnRW9BQU1BQUFBQkFBSUFBQUV4QUFJQUFBQWVBQUFBY2dFeUFBSUFBQUFVQUFBQWtJZHBBQVFBQUFBQkFBQUFwQUFBQU5BQUQwSkFBQUFuRUFBUFFrQUFBQ2NRUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTWlCTllXTnBiblJ2YzJnQU1qQXdPRG93TnpveE9TQXhORG8xT0Rvd05RQUFBNkFCQUFNQUFBQUIlMkYlMkY4QUFLQUNBQVFBQUFBQkFBQUJ3cUFEQUFRQUFBQUJBQUFCUlFBQUFBQUFBQUFHQVFNQUF3QUFBQUVBQmdBQUFSb0FCUUFBQUFFQUFBRWVBUnNBQlFBQUFBRUFBQUVtQVNnQUF3QUFBQUVBQWdBQUFnRUFCQUFBQUFFQUFBRXVBZ0lBQkFBQUFBRUFBQmFUQUFBQUFBQUFBRWdBQUFBQkFBQUFTQUFBQUFIJTJGMlAlMkZnQUJCS1JrbEdBQUVDQUFCSUFFZ0FBUCUyRnRBQXhCWkc5aVpWOURUUUFDJTJGJTJCNEFEa0ZrYjJKbEFHU0FBQUFBQWYlMkZiQUlRQURBZ0lDQWtJREFrSkRCRUxDZ3NSRlE4TURBOFZHQk1URlJNVEdCRU1EQXdNREF3UkRBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBRU5Dd3NORGcwUURnNFFGQTRPRGhRVURnNE9EaFFSREF3TURBd1JFUXdNREF3TURCRU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd00lMkY4QUFFUWdBZEFDZ0F3RWlBQUlSQVFNUkFmJTJGZEFBUUFDdiUyRkVBVDhBQUFFRkFRRUJBUUVCQUFBQUFBQUFBQU1BQVFJRUJRWUhDQWtLQ3dFQUFRVUJBUUVCQVFFQUFBQUFBQUFBQVFBQ0F3UUZCZ2NJQ1FvTEVBQUJCQUVEQWdRQ0JRY0dDQVVERERNQkFBSVJBd1FoRWpFRlFWRmhFeUp4Z1RJR0ZKR2hzVUlqSkJWU3dXSXpOSEtDMFVNSEpaSlQ4T0h4WTNNMUZxS3lneVpFazFSa1JjS2pkRFlYMGxYaVpmS3poTVBUZGVQelJpZVVwSVcwbGNUVTVQU2x0Y1hWNWZWV1puYUdscWEyeHRibTlqZEhWMmQzaDVlbnQ4Zlg1JTJGY1JBQUlDQVFJRUJBTUVCUVlIQndZRk5RRUFBaEVESVRFU0JFRlJZWEVpRXdVeWdaRVVvYkZDSThGUzBmQXpKR0xoY29LU1ExTVZZM00wOFNVR0ZxS3lnd2NtTmNMU1JKTlVveGRrUlZVMmRHWGk4ck9FdzlOMTQlMkZOR2xLU0Z0SlhFMU9UMHBiWEYxZVgxVm1aMmhwYW10c2JXNXZZbk4wZFhaM2VIbDZlM3glMkYlMkZhQUF3REFRQUNFUU1SQUQ4QTlWU1NTU1VwSkpKSlNra2trbEtTU1NTVXM0dURTV2lYUm9PSktGaTNPdngyV3Zic2U0ZTVnTXdSbzVzb3lwZE95TjltVFNSSHBXdmo0T2M0JTJGd0RWZjlXa3B1cEpKSktVa2tra3BTU1NTU2xKSkpKS1Vra2trcCUyRiUyRjBQVlVrbENxeHR0YmJHJTJGUmVBNGZBcEtacEpKSktVbzJXTnJyZFk4dzFnTG5IeUFsVk9zV3Zvd1haRFolMkZRT1phOEQ5eHJtbTMlMkZOcjNQVXN3bSUyRnBtUUdhbXlsNGJIaVd1aEpUWXFzRnRUTEJ3OW9kOTRVMVE2RmtmYU9rNHRzenVxWWZ3VjlKU2xsMSUyRm9PdDJzT2d1RFhnZVRtN2YlMkZQbU4lMkZ3Q0NMVVdaMVZocnlzYktBJTJCanVhN3pndHVaJTJGMUZxSVVYVFNRY3ZLWmk0N3NoN1hPWTB0QkRZSmh6bXMzYWtmUjNibFZkMTNwck10dUklMkJ3c2UlMkY2TDNBaG03bjAlMkZVJTJCaTJ6YWZ6a0ZPZ3E5JTJCZGowWkZPTTRrM1pEdHJHTkVuaHp0N3YzV2JXUFU4YkpweWF2VnBkdVp1YzJlTldPTmIyJTJGMlh0WE9ZMlZVN3JBNmhuTzlSdUpTJTJCcjFoTzFsZ3VHSmJ1WXoyZXh0dnYzZnpMUFUlMkZ3Q0VTVTlRa2tra3BTU1NTU2xKSkpKS2YlMkYlMkZSOVZXZjBpd2l1M0ZmOUxHc2V3VCUyQjZEN1AlMkZBeXh5MEZtdW5INnhQRE1wZ2QlMkZiWkZUJTJGd0RvT3glMkYlMkIyMFFwMGxDMDJDdHhxQUx3RHRCNEo4Rk5KQlRWb3Z4JTJCbzRqdmJMTEdsbHRUdVJNc3NyZiUyRkFOSml6JTJCaFpEcU1PJTJGRXlDWDJkT2M2dCUyQmt1YzFnbXQlMkIzJTJGaGFQVGVvWjVzNlIxSVpyQkdEbGtOdkklMkJqWGNZWXl4JTJGN3RXVjlCJTJGd0R3JTJGd0R3bHlEMUxxV0gwanEyTjFPNTVyeE9vZ1kxcndDNEM5dXVQNm16ZHQ5V2wxdjZUJTJCYiUyRkFGZEZTJTJGMU15cSUyRjJWVGh1c2ElMkIydHN0Mms2c1B1WTczQnJtJTJGbzNWdjJmeSUyRjNGMFM0VEF6cSUyQm0lMkZXRHF1S0duYmhXT3lhNjJEVVVscmNteXVsa3RaNmYyZXkxOVd6OCUyRjJMczJaJTJCRll4MWpMNnl4Z0JlJTJGY0lBSTNDWGZOSXFaWDN1cnNxcXJaNmo3VHFKZ05ZMlBVc1BQMGR5cGZXSiUyRm85Tk9UMnhyYXJIVHhzM3Raa2YlMkJ5NzdWUjZ2OWJlamROc2JrYjNaYnFtMnNmVmpnT09ocmRaRmxqcXNmZlhzJTJGbXZWOVYlMkYlMkJEWEhkWiUyQnV2VTh6QTZpJTJCajAyWTF6YXdhWkx0MkxZMjF0bHRiN1hPYjZqNiUyRndEUjFWJTJGelYzNnY2clBWWUZVJTJCaUNzNVBTN2NkNDNPMldVT0I3N2QxWCUyRlQyN2x3dlZuTnlLSzhkMTVxNmhpajIwN285ZGczREhkVzltOXpMdjhBUSUyRjRXdTcxSyUyRlR0cjlhcXpKJTJCdUhWOHRtUjB6Tm95THZzWFU4TnI3Y2R0am10TjFKOUslMkIycG9kc2JrMSUyRm8lMkY4QTBZc25HNnRlJTJCbkxaYmRYWFk2cHR0QUROd3Vjd21odjJjV2J2MHRuciUyRnBLbmZwS2JLZjhBdHNxRDFEdnJqbmZWNzBjS2xsZGd6Z2JxamY3UUhCM3Ayc0cwc2I2bHYwJTJGZlo2VEVjWmc2MzB4ejJ2ZXpLNmpWYmZoVnRmNmJpUSUyQnhsdG1OWTdhMno5SnMzVnUlMkZ3YXl2ckhoMSUyQmhoZEt2M1h1YmpCaFk5d0RiSHRQcE9kWGtPSDZ0MURkJTJGUnNsJTJGNkMlMkZ3RG9tVjdGZzlXYyUyRkYlMkJxM1JMNmJpYmVuNVdWamg0bGxqZHhiZXhsdGYwNkxhOXZ2cCUyRk0lMkZ3QUZaJTJGaEV1cW4wcjZsZlhNOVdZenB2Vm9vNnd4dmNiQmNHajlMdHIwOUxMb2o5YnhmJTJCdlUlMkZvZjVtejlhdnJKZDAlMkIyakJ3SEFaVHJjZDE3aUE3YlZaYTJuWTBIJTJGQ1h3OXYlMkZBQWRmJTJGV2w1emlkUVo5WmNZM2wzb2Rkd2cyejFtSFo2eldmUXYzdDIlMkJuazAlMkZ3Q24lMkZ3RFJmOHhmNkRmMURxdlhHWiUyQmU1dHpzaTdHZDZsbTJrUHNxTmJxcU9HMSUyRjRDdXhucHQlMkZTNyUyRjlJOUFMalIxR2g3Zjk2JTJCdUpKcEExS1pqMldORG1PRG1uaHdNaEpheVNTU1NVJTJGd0QlMkYwdlZWbjlhaXJGR1lTR2pFY0xYdU9rViUyRnpkNUolMkZkWlUlMkZ3QlglMkZyYTBFSE05RDdKZjlwRTQlMkZwdjlZSFgyYlQ2bW45UklLY0U5VTZsZ1huSkR2Mmwwak4lMkZTNDk3UzM5QzUzMHNPeXhuJTJCQmMlMkYlMkJoNVA4MyUyRjJreWZTJTJGUjVObFBydjE2dXdjekV4c1BIRm96TEJSV0h6NnJyaVdNOU91djZIczlUM3ZzZXVlNkI5YnVvWkY1eEJVODRCREMlMkJ0b1pZVzFQY3pHJTJCMDJHeG03MUdiMlhQMmZvZDdQNW10Y3QxNjdxJTJGVDg3R2RmayUyRmJzY1dISTZWMU5yUU5HdTNPMk5aNmZwNUZOOWRUY3JIM2VwUjZmOVJLd1JZWHpoS0V1R1lvJTJGeGZTTXZNNmxabEYlMkZWZlNvYlUxMVE5TUd5cUxmYSUyQnJQOVBKc3I5S3owOW42YkdxJTJGN2RXTjF6OVZ4QzNLZlpUMCUyQiUyQlBVeUdnNU5JYVBkVTdlelplN0t4UFIlMkZSNUd5cjFzWDlEYjYlMkZ3RGd1WnglMkJ2MzUyYmU0V053ZnQlMkI5dGIybjIxbXphJTJGMDdYbjIlMkZwN3FtVmVwNmRiUDB2cWZvbHFaRDdtWTkxZURtWGg5cEJBWkRHalQ5YXd2YiUyQmtwM1clMkZwMk1ka2ZwYXYxYiUyQlhVYjBXdWxUZVAyM2g1RGkzSkwzVVlXVFl6bHpiS24xc2M1ck43YmFNM0ZaOXB3OHhydlN2ciUyRlFmMGltNnV2SDZ2WTdHNmhmUzJteDFXRllhcTdibmslMkJvMnIwcktQVGE3YnVzdHhYMjAlMkJ6JTJCbGY0UlclMkZxUFhlTTQwM3MlMkZROUxwZGJRNHY5N1dsNERjVzFudWQ2UHFmckgyZTluc3pNYXZOeCUyRnM5JTJGMmhBNmk1cjc3SFpMSDI0VG4xVzQlMkJVd2oyUHZhM0pkajViZnphSGI4bjdGayUyRjRQOVl4UDB0WDh3dWxxYVdmYjFDelo2R2FNMzA2MjJXREQlMkZTVjFtcDNzZlk2dGpXT3NZMXRmODc3NmElMkZUUTdzMjdxRk5WSXJxd0FmVXNiWlJYdDlTME45S3kxdFg4MyUyQmdyZSUyRjFzZWolMkZBRTFsektsdGREdGJpOVpKc3FxYlRhQlhkUzBUYlc2OFB5Y1V4Tmo4cXJJYlIlMkZwUFUlMkZTYjYlMkZUeXY2VldmMHF2T3J6bXNZYXNuR3pIbWs3Z3gxWmE2SzJYUjdzZCUyQjV2Nks3OUpYaTNiUFUlMkZWOGk3MVJSVTUlMkZXYUxNdjZrWWo3U0dYOUw2ZyUyQnFLJTJGb3NyeW1ldXgxY2Y0QjE3ZllzcnB1UG1OeGZ0ejYzUGN3bDlEV0RRMnNJcVprTkolMkZOWmU2bHVSNmYlMkZBQVglMkZBQVMxZjJwWFgwdnElMkJKbG43TGZrVlZ0YTNaQWZsNDkyOW15biUyRkE3NnJMcTg2ciUyQmJvJTJGNHF5aFZydW9aZlNlazRsZG1NMTJQZTIyN0Q5WFFCdHZwdHUzJTJCN2Q2VnI2NlhmMlBVJTJGd2lTbnN1cW5EeUxNZkZ0TVpPUmolMkJyWFNQZUhGc2VvMmw3ZzMxTGElMkZWJTJCaCUyRjJvcSUyRndmcWZwRnpuVmNkOXVEWml2YXh6RFpYYTF6enRaYVhCMUxXJTJCdiUyRmdiJTJGWlZYaTV0djgzJTJGUnNqOUFzTHFmWHYyajAlMkZwWHFQRmVkZ051cmZhMTBGM3Vxc3g4bHY4QW8zT2J2cmYlMkZBTVQ2biUyQkZRcXVxNTklMkZVUmVjMXpiN0NIWE1jOGh0bXc3bjQ3djhCdHVjUFViNnY2UDlMZDY5aU5vUzlINlZrMFp6Y3BqM3RxcWVXMUFBdHVjJTJGOEFtN01leWh2Nld2WiUyRk5aWCUyRkFJRXVnenVrMTRlTGlONjlmYmk0OXU2d2dCanlXTmI2ZFA2SU9hNTJWNnZ0MjQ3UDBkRCUyRkFGUDBhampkYzZrQmVla1lRZDFESXMydHNaVlpiZFZYdDl0WXFzRzklMkIzJTJGVFBaJTJCbCUyRndCQ3NhanBYViUyQnRYMlp3byUyRmFsN1d1dnY5UzBNZWEyJTJGVDIlMkJ2WjdtMWUxajZHVjc2UFolMkZwSzBORTdhdnBIMVo2OW5kVTZUaTRtUDZtVlprdEJkYmtQM3VxYldUUmtqS3VZR2I5dDFlNnYyNzc2clA5SXV5dzhWdUpqdG9hUzh0a3VlZVhPY2R6MyUyRjJuTHliNnZkWnY2RGpES3dtVnQzbHpic1p6M1ZzWmNIbHVUZ1g0OTloZlJZeHV6SnduJTJGem5zeUtyTEx2OEgydlQlMkZyOWhPREslMkJzTSUyRlp1U1drdnJ0RmpDMXdMbXZyJTJGV0txVyUyRm0lMkJ6YlolMkJrUlI0dlZwS24wM3ElMkZUZXE0N01ucCUyQlF5JTJCdDdXdkcwJTJCNEJ3M045U3MlMkZwSyUyRiUyQnVOVnhCVCUyRkFQJTJGVDlWVE9hMTdTeHdEbXVCRG1uVUVIc1U2U1NueGY2eDlDelBxdDFFQ2l4N0dNZWJlbjVRMGNhbmV5eWx6dm91dG8zTXJ1WiUyRmhhdjBucCUyRnBGVXJ5YU1qRnZyenBzNmRrUGJabVVzSHZ4N3pGYmVyNGY3cmJMUDZXeiUyRkFFbG4lMkJpdll2WSUyQnU5TDZmMVhwbDJIMUdHME9HNzFTUTAxdUgwYjJQZDlCN1AlMkZVYiUyRndCR3ZIOHZwRjNUNyUyRlFwY0g1TkllYTdhejZsZVhTZDIlMkJ6SGpkVzcwcUhiTW5FJTJGd2xTWnJFMk51emZqS0hNWSUyQkdmcHpSMm4lMkZMOUg5NXdNJTJGQnlPazVoeHNnaXl1d2I2cm02MTNWSDZOMVglMkZBS01yVzEwanFicm1IRHlIbDhNaGpZM0c2c0hkNlBPMzE4ZHY2ZWl6MDdmVzlQMHYlMkJPSGlQeGM2bjlqNTUyWWRoM1ltVnk3RnRQNSUyQnZ2Zml1JTJGdyUyRiUyRkIlMkZwZjV6ZWhZdjFhNnBWazVXTG5oJTJCSlpoTUw2cm1pV3ZzQlk2dDFGbjBuMU5ZNzdUdnAlMkZTZjhXbmlqcU5Xbk9Fc2NqR1E0WkI3T2lnMGZWN0xmMDFycjhycVIydGV6M1hQYkJ4NjdYc1l6YXl4amJNbDltMzglMkY5SiUyQmwlMkZTJTJCcHpydlV4TVdxdnFOVnVKa3N4MzQwMnpXNW9vc2JkU2NpZzcyNU9IZDlxWTZ2JTJCYzJaT0xUNk5uODh5M2U2WDF1eWs5TmV4em5ZZCUyQlBkaTJNYzFsVHhsNHp0em5XdTNiS2ZXWlpYYnM5VDA2ZjB5cGRZNkoxSHIlMkZWSDlXcnRwc3g2bU1xRkRTJTJGMVdpc0YzMFhOYTUlMkI1NzdiZjBleXolMkZSViUyQnFuSHdXMVJvdERGNnhheTQ5VHZpa3M5T0hOQkFjOWcyc2ZjMW03WnUyJTJGb0clMkZReHYzUFNUOUx3MmRUYmxNJTJCMVcxc2REaXhvTTJ2dTNmMDkzNk90M3BPWnN1cnAlMkZRNUglMkJqJTJGd2FKajRHWGYwNTJaamVwUmpibU9yeXdOek5qSHVsaDlNZWc1ek4lMkIxbHJuJTJGNFI5ZnAlMkZwRll4Y0hENmV5Nm5JdGRTR0FPdGRsRndobGglMkZSdUhwTjNQcGJ2OEE1eG5xZW1nRk9aMSUyRkR5TVc3N1QxRElPUXk0dnJhOTFicUMwMGVuJTJCaVl4JTJGMDZOcnFuZXYlMkZBSWYlMkZBRWoxV3hhRzJzeEtPbzlNdTZpSzMyVVllT0xITUwzdkxyTnJybXUzJTJCbHYlMkZBUFJpMWN2cGwxUFVxVzNOZmg1VkozNCUyQk5tTzlYRXVySHUlMkZWN3QxakdNc1lmMG5vUDluJTJGQUFOcXY5UTZXODR3NjMwaG4yY3VGZDFqY1lHeXNqUzZxekx4bWl1M0Z5YWR2ODk2TlglMkJsJTJCMmVxaFNTQlExdSUyRndlZDZ6OVglMkJydEZKSDFkWmoxYWdFTnNxWnVJQjlFUHN2YmtXN1dqNmVTJTJGNmZxJTJCaiUyQmpXT2NiTnc4aG5xZE54cTN0aXpaWVhPYTRUeTdma1dibU5kJTJGT2Jmb2Y0UmRwVDFmcUhVczFyYyUyRkxma3R5UlUydkdhNGJTSE5lUHRGTDNlbDZWbUxsVmVqWjdmMG0lMkYxY2olMkJaJTJCMFdidlNmcW4wJTJGcTFlVGpkUklkbFZzcHNxY3h3QnFjOFBiZlclMkJyWDM3NiUyRlR0ZiUyRkFLSDBiY1M2djJXSlhxdWxqNFlDWEVEWnF1cnhuMWR4WGRSb3N1dzc4aG5YY1I1ZFNXdTIyT3JZMmJxc2RuMDNaRlR0OTMyT3oyWldMNmxWTFBXb1hTMTlIenVwOVBxJTJCc2ZUTVl0eThrbjdaUlhEQ3k1aGRWYjFERXJlJTJGOU5VNzlMdnhIYkxjbGo3S2Y1cklzcFhFNW1QbTlKNnElMkZMcWE4MllybXZmVkpIcVVzZCUyQmd5cUxhdGxuMGElMkYwM3BQOEFXeExtZXJWJTJCNWolMkJ6JTJGVTdxdlIlMkJwOUNvdDZRTmxMSmJaUTV4ZFpYYjlPMWw3M1M5OWpudTMlMkJxNyUyQmUlMkZuRW1ONTdxdjFYNmI5YyUyRnE5OW94V054JTJCdVl4Y3l4N2c5cmpjMlBYeE01dDM2eDZkam10OUgxdjAyTCUyQmk5TCUyRkNWV2N6OVZQcjUxbnBQV1g5SCUyQnN4dXk4Ykl0Rk5veUR2dG90OXRJY04lMkYwNkhlMzE2UCUyRkFFS28lMkZ3QUo5cDloYlhXMTdudGFBOThiM0FRWFFJYnVQNXk0MyUyRkdCOVEyZGZwJTJGYVhUV3RaMWlsb0VHR2pJWTMlMkZBUGU3JTJCYXlHJTJGOEFhZkolMkY2emIlMkJpJTJGU1VKVDJUSzY2eHRyYUdBQUFCb0FFQWJXOGZ5VkplY2ZVYnFQOEFqSFBWMzFkWHhNako2YyUyRmF5MjdMYU1kMUphTmdzb0R4WDlvOXJmMHphVzIlMkJyJTJGUGVwJTJGcFBSMGxQJTJGOVQxVkpKSkpTRE5MJTJGc3I5Z2VYR0FCVzFybmFrRDZGMzZQJTJCc3VBd3VtViUyRldYTnJ4SHZjeW1xaDJTN0lxTG5SYSUyQjdKZmoyVVBjR3RxZHZ5ZlZzcFo3SyUyRlElMkJ5MSUyRm9hVjZGZmowNUZacXZZTEt5UVMxM0VnN20lMkY5SktpbXZIcHJvckVWMU5ER0R3RFJ0YWtrRWcyTkNObnhEcWRHYjBMcnUzcUZESFg0MXJMVFdHeFZleVI3NjI2dGRWbU5hJTJGMVAzTFBXcjlpMmNtenJwWTV0ZEI2Z3pwTDdLcTdXR1hQcXFmNkQ4SEljMWdaOXVwbyUyRjdUJTJGem1WWCUyRkFEWHFyMGJyT0YwJTJCNDEzNWJXVkZnYzA1a0QxV01QMDZhcmkxN3EyNVA4MVolMkIlMkZYJTJCaSUyQm5hdVR5c2ZxblFlb002aDA2bDkxZVcySDRqd2YxdWhnYzcwTHEzRGRWMVhHeG03OGQ3JTJGd0NmbyUyRlFYZnBLN0dJUkZYNHMyZk43dkFlR3BSandrOTNJeU9qNVZEbk42VTUlMkZVTWElMkZmbFlsTEd1TG0lMkJxeG5wZmFkckcxdGRrMzAyVWZhdiUyQnMyZW4lMkZOclElMkJyZDklMkJObE5kZlMlMkZEdURYTXk4ZTdSMWJtamZKJTJGa05obDlOdjU5S3RPZUxiTURPNkZrdEp0ZSUyQiUyRkNzdExoJTJCaGNheG00bVk1b2M1dExNcjA4WEszc3Q5SDdUUmQlMkZTcVBXVzExZkElMkZhJTJCT09wZE9jNmpxZU1ObGxZamNkdnVkald0OXpmVnIzYjhkJTJGJTJGb20lMkYxRSUyQjJGNWpwZjF1NkRqOVJ5TEtjcXUzcGVhZjFyRjFhR2glMkJoeW0wWE1yOTFUZlprc3IlMkZuY2IlMkZTV1k5YkZUd2Z0ZlVPcGRRd1JadnhzRExPTGgydUJleHJMSDIxWXpMTEFIdjlLM1pYJTJGd0FIJTJGT0xVdyUyQm5mVSUyRjZ4VkRCNmxnNCUyRlR1dEVGckxhRyUyQmdMWEQlMkZDNDJ6WTJ4JTJGJTJCbHc3ZjAxZjh1cjlPbiUyQnJveVBxbGxaZlRoaE1zcUJaYmxXaHhGamFoRkxMV0UlMkIyN0hadjNzYnNyOUg5TjYzJTJGQmpXMUw5SjlQRGElMkY2dWRjeCUyRlU2VGE3YlNINnV4TFQ3VzBPYzAlMkZvNkhUNm1GbDFmelglMkJuVjluMVI2djA3YmJoWnYyemE0dzE0OUswVms2ZW5rTWVXUHUyZnpuOHhWYiUyRndmMEYxR1ZoNG1kU1czTUQydmJBZkEzQUg5eHlvWW1SWjBvJTJGWTg5NCUyQnp0Qk5HUzdRYlIlMkJhOG42T3olMkZ3SCUyRnR0THlSYnlQVWNYTXF6em5ZMk5maDlUcmJaYmtrVnl4elFCdnptJTJCbTA0dnI3ZjBkJTJGbzJmclglMkJEJTJGVFYycmMlMkJybUgwYnFIVDhmY1clMkZiMk5lZDFGcm1Xc2FYT1pMZlJMSDAxVyUyQnB1OUwlMkJhWFVpQ0pIQldHZWdNNmQxSWRVNld6YkppJTJGRmJBYVd1UHZkViUyRlYlMkZuUFRTdE42VTQlMkZXZnFQazVqaFJqMkJvckRyTVhMT2pxbmdlMm0xck5yblYzZTFsbnBmOGIlMkZPMVVybSUyRnFMbFpIMWElMkJzZVQwM0l3TGE3czk3SzhuRnJZJTJCeDlmcCUyQnA2T2ZqdXBaNlZ2VDMlMkJyWTNJJTJGMFA2T3luOUYlMkJqWHJLU0NGSkpKSktVa2tra3AlMkYlMkY5WDFWSkpKSlNra2trbEtRTTNEcHpjZDJQYnVBZEJhOWhMWHNjTldXVlBiOUN4amtkSkpUeEhWZnE0T2w1YmMlMkJxNTVkbHZMTHEyRGF4MWxwclk3SUZiUDVpNjNiNzdLZjlIJTJCayUyRlFycFBxJTJGY0xNQVZsZ3J1cGNXWE00ZHVCajlJMHk3ZiUyRjFmMDB2ckIwaG5WdW5QbyUyQmprTW16RnRHanE3UUMxdGxiOU5qdmQlMkZxeFM2ZFdNajB1cEg5RmZiWHN5cXdJYWJHd3gzMCUyRmYlMkJpZlc5bjlSSG9wd3ZyQmg0ZUYxViUyQlhrVSUyRnFtWlFRTFNCNmRlWXh3dXg3SEFmcEd2czlMJTJGQiUyRjhKNml2V1ZaMmRqNHZWOEZnZmJrWSUyRm81V084aG9zcmRyMyUyQmk2dDducmVmV3g4YjJoMjBoelpFd1I5RnclMkZsSU9MZzQlMkJJNjUyT0N4dDd2VWZXRDdRNCUyRlNjeHY1bSUyRjg5SzFJdWpZajhQcFdMaldEYSUyQnVzQjdTWkljZmM1dTZYZm5GVzMxc2VJZTBPRXpCRTYlMkZOU1NRVXBKSkpKU2tra2tsS1NTU1NVcEpKSkpUJTJGQVAlMkZXOVZTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJGJTJGWiUyRiUyQjAxSWxCb2IzUnZjMmh2Y0NBekxqQUFPRUpKVFFRbEFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGhDU1UwRDZnQUFBQUFZRUR3JTJGZUcxc0lIWmxjbk5wYjI0OUlqRXVNQ0lnWlc1amIyUnBibWM5SWxWVVJpMDRJajglMkJDandoUkU5RFZGbFFSU0J3YkdsemRDQlFWVUpNU1VNZ0lpMHZMMEZ3Y0d4bEx5OUVWRVFnVUV4SlUxUWdNUzR3THk5RlRpSWdJbWgwZEhBNkx5OTNkM2N1WVhCd2JHVXVZMjl0TDBSVVJITXZVSEp2Y0dWeWRIbE1hWE4wTFRFdU1DNWtkR1FpUGdvOGNHeHBjM1FnZG1WeWMybHZiajBpTVM0d0lqNEtQR1JwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOU0c5eWFYcHZiblJoYkZKbGN6d3ZhMlY1UGdvSlBHUnBZM1ElMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWFYUmxiVUZ5Y21GNVBDOXJaWGslMkJDZ2tKUEdGeWNtRjVQZ29KQ1FrOFpHbGpkRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUXVVRTFJYjNKcGVtOXVkR0ZzVW1WelBDOXJaWGslMkJDZ2tKQ1FrOGNtVmhiRDQzTWp3dmNtVmhiRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDVHd2WkdsamRENEtDUWs4TDJGeWNtRjVQZ29KUEM5a2FXTjBQZ29KUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRm5aVVp2Y20xaGRDNVFUVTl5YVdWdWRHRjBhVzl1UEM5clpYayUyQkNnazhaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG1wdlluUnBZMnRsZER3dmMzUnlhVzVuUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrOFlYSnlZWGslMkJDZ2tKQ1R4a2FXTjBQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFU5eWFXVnVkR0YwYVc5dVBDOXJaWGslMkJDZ2tKQ1FrOGFXNTBaV2RsY2o0eFBDOXBiblJsWjJWeVBnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pQQzlrYVdOMFBnb0pDVHd2WVhKeVlYayUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVTJOaGJHbHVaend2YTJWNVBnb0pQR1JwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVhWFJsYlVGeWNtRjVQQzlyWlhrJTJCQ2drSlBHRnljbUY1UGdvSkNRazhaR2xqZEQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFF1VUUxVFkyRnNhVzVuUEM5clpYayUyQkNna0pDUWs4Y21WaGJENHhQQzl5WldGc1Bnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pQQzlrYVdOMFBnb0pDVHd2WVhKeVlYayUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVm1WeWRHbGpZV3hTWlhNOEwydGxlVDRLQ1R4a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVqY21WaGRHOXlQQzlyWlhrJTJCQ2drSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNUeGhjbkpoZVQ0S0NRa0pQR1JwWTNRJTJCQ2drSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4U1pYTThMMnRsZVQ0S0NRa0pDVHh5WldGc1BqY3lQQzl5WldGc1Bnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pQQzlrYVdOMFBnb0pDVHd2WVhKeVlYayUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVm1WeWRHbGpZV3hUWTJGc2FXNW5QQzlyWlhrJTJCQ2drOFpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbXB2WW5ScFkydGxkRHd2YzNSeWFXNW5QZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWs4WVhKeVlYayUyQkNna0pDVHhrYVdOMFBnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRm5aVVp2Y20xaGRDNVFUVlpsY25ScFkyRnNVMk5oYkdsdVp6d3ZhMlY1UGdvSkNRa0pQSEpsWVd3JTJCTVR3dmNtVmhiRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDVHd2WkdsamRENEtDUWs4TDJGeWNtRjVQZ29KUEM5a2FXTjBQZ29KUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWMzVmlWR2xqYTJWMExuQmhjR1Z5WDJsdVptOWZkR2xqYTJWMFBDOXJaWGslMkJDZ2s4WkdsamRENEtDUWs4YTJWNVBsQk5VRkJFVUdGd1pYSkRiMlJsVG1GdFpUd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UGxCTlVGQkVVR0Z3WlhKRGIyUmxUbUZ0WlR3dmEyVjVQZ29KQ1FrSkNUeHpkSEpwYm1jJTJCVEdWMGRHVnlQQzl6ZEhKcGJtYyUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCVUUxVWFXOW5ZVkJoY0dWeVRtRnRaVHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBsQk5WR2x2WjJGUVlYQmxjazVoYldVOEwydGxlVDRLQ1FrSkNRazhjM1J5YVc1blBtNWhMV3hsZEhSbGNqd3ZjM1J5YVc1blBnb0pDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzV6ZEdGMFpVWnNZV2M4TDJ0bGVUNEtDUWtKQ1FrOGFXNTBaV2RsY2o0d1BDOXBiblJsWjJWeVBnb0pDUWtKUEM5a2FXTjBQZ29KQ1FrOEwyRnljbUY1UGdvSkNUd3ZaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlXZGxVbVZqZER3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOUVdScWRYTjBaV1JRWVdkbFVtVmpkRHd2YTJWNVBnb0pDUWtKQ1R4aGNuSmhlVDRLQ1FrSkNRa0pQSEpsWVd3JTJCTUM0d1BDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENHdMakE4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQamN6TkR3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTlRjMlBDOXlaV0ZzUGdvSkNRa0pDVHd2WVhKeVlYayUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFF1VUUxQlpHcDFjM1JsWkZCaGNHVnlVbVZqZER3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOUVdScWRYTjBaV1JRWVhCbGNsSmxZM1E4TDJ0bGVUNEtDUWtKQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrSkNUeHlaV0ZzUGkweE9Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQkxURTRQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDQzTnpROEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpVNU5Ed3ZjbVZoYkQ0S0NRa0pDUWs4TDJGeWNtRjVQZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNRazhhVzUwWldkbGNqNHdQQzlwYm5SbFoyVnlQZ29KQ1FrSlBDOWthV04wUGdvSkNRazhMMkZ5Y21GNVBnb0pDVHd2WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlYQmxja2x1Wm04dVVFMVFZWEJsY2s1aGJXVThMMnRsZVQ0S0NRazhaR2xqZEQ0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRa0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRa0pQR0Z5Y21GNVBnb0pDUWtKUEdScFkzUSUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxsQk5VR0Z3WlhKT1lXMWxQQzlyWlhrJTJCQ2drSkNRa0pQSE4wY21sdVp6NXVZUzFzWlhSMFpYSThMM04wY21sdVp6NEtDUWtKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWMzUmhkR1ZHYkdGblBDOXJaWGslMkJDZ2tKQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pDVHd2WkdsamRENEtDUWtKUEM5aGNuSmhlVDRLQ1FrOEwyUnBZM1ElMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxsQk5WVzVoWkdwMWMzUmxaRkJoWjJWU1pXTjBQQzlyWlhrJTJCQ2drSlBHUnBZM1ElMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVqY21WaGRHOXlQQzlyWlhrJTJCQ2drSkNUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG1wdlluUnBZMnRsZER3dmMzUnlhVzVuUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVhWFJsYlVGeWNtRjVQQzlyWlhrJTJCQ2drSkNUeGhjbkpoZVQ0S0NRa0pDVHhrYVdOMFBnb0pDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaGNHVnlTVzVtYnk1UVRWVnVZV1JxZFhOMFpXUlFZV2RsVW1WamREd3ZhMlY1UGdvSkNRa0pDVHhoY25KaGVUNEtDUWtKQ1FrSlBISmxZV3clMkJNQzR3UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0d0xqQThMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqY3pORHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJOVGMyUEM5eVpXRnNQZ29KQ1FrSkNUd3ZZWEp5WVhrJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NVFUVlZ1WVdScWRYTjBaV1JRWVhCbGNsSmxZM1E4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWtKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVlc1aFpHcDFjM1JsWkZCaGNHVnlVbVZqZER3dmEyVjVQZ29KQ1FrSkNUeGhjbkpoZVQ0S0NRa0pDUWtKUEhKbFlXdyUyQkxURTRQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDR0TVRnOEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpjM05Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQk5UazBQQzl5WldGc1Bnb0pDUWtKQ1R3dllYSnlZWGslMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaGNHVnlTVzVtYnk1d2NHUXVVRTFRWVhCbGNrNWhiV1U4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWtKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbkJ3WkM1UVRWQmhjR1Z5VG1GdFpUd3ZhMlY1UGdvSkNRa0pDVHh6ZEhKcGJtYyUyQlZWTWdUR1YwZEdWeVBDOXpkSEpwYm1jJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1QlVFbFdaWEp6YVc5dVBDOXJaWGslMkJDZ2tKUEhOMGNtbHVaejR3TUM0eU1Ed3ZjM1J5YVc1blBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNTBlWEJsUEM5clpYayUyQkNna0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adlZHbGphMlYwUEM5emRISnBibWMlMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVRVkJKVm1WeWMybHZiand2YTJWNVBnb0pQSE4wY21sdVp6NHdNQzR5TUR3dmMzUnlhVzVuUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuUjVjR1U4TDJ0bGVUNEtDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhSVWFXTnJaWFE4TDNOMGNtbHVaejRLUEM5a2FXTjBQZ284TDNCc2FYTjBQZ280UWtsTkElMkJrQUFBQUFBSGdBQXdBQUFFZ0FTQUFBQUFBQzNnSkElMkYlMkI3JTJGN2dNR0FsSURad1VvQSUyRndBQWdBQUFFZ0FTQUFBQUFBQzJBSW9BQUVBQUFCa0FBQUFBUUFEQXdNQUFBQUJmJTJGOEFBUUFCQUFBQUFBQUFBQUFBQUFBQWFBZ0FHUUdRQUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTRRa2xOQSUyQjBBQUFBQUFCQUFaQUFBQUFFQUFRQmtBQUFBQVFBQk9FSkpUUVFtQUFBQUFBQU9BQUFBQUFBQUFBQUFBRCUyQkFBQUE0UWtsTkJBMEFBQUFBQUFRQUFBQWVPRUpKVFFRWkFBQUFBQUFFQUFBQUhqaENTVTBEOHdBQUFBQUFDUUFBQUFBQUFBQUFBUUE0UWtsTkJBb0FBQUFBQUFFQUFEaENTVTBuRUFBQUFBQUFDZ0FCQUFBQUFBQUFBQUU0UWtsTkElMkZVQUFBQUFBRWdBTDJabUFBRUFiR1ptQUFZQUFBQUFBQUVBTDJabUFBRUFvWm1hQUFZQUFBQUFBQUVBTWdBQUFBRUFXZ0FBQUFZQUFBQUFBQUVBTlFBQUFBRUFMUUFBQUFZQUFBQUFBQUU0UWtsTkElMkZnQUFBQUFBSEFBQVAlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkY4RDZBQUFBQUQlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkZBJTJCZ0FBQUFBJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGd1BvQUFBQUFQJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGOEQ2QUFBT0VKSlRRUUlBQUFBQUFBUUFBQUFBUUFBQWtBQUFBSkFBQUFBQURoQ1NVMEVIZ0FBQUFBQUJBQUFBQUE0UWtsTkJCb0FBQUFBQTFVQUFBQUdBQUFBQUFBQUFBQUFBQUZGQUFBQndnQUFBQkFBY3dCM0FHa0Fjd0J6QUY4QVlRQnlBRzBBZVFCZkFHc0FiZ0JwQUdZQVpRQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQndnQUFBVVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFRQUFBQUFBQUc1MWJHd0FBQUFDQUFBQUJtSnZkVzVrYzA5aWFtTUFBQUFCQUFBQUFBQUFVbU4wTVFBQUFBUUFBQUFBVkc5d0lHeHZibWNBQUFBQUFBQUFBRXhsWm5Sc2IyNW5BQUFBQUFBQUFBQkNkRzl0Ykc5dVp3QUFBVVVBQUFBQVVtZG9kR3h2Ym1jQUFBSENBQUFBQm5Oc2FXTmxjMVpzVEhNQUFBQUJUMkpxWXdBQUFBRUFBQUFBQUFWemJHbGpaUUFBQUJJQUFBQUhjMnhwWTJWSlJHeHZibWNBQUFBQUFBQUFCMmR5YjNWd1NVUnNiMjVuQUFBQUFBQUFBQVp2Y21sbmFXNWxiblZ0QUFBQURFVlRiR2xqWlU5eWFXZHBiZ0FBQUExaGRYUnZSMlZ1WlhKaGRHVmtBQUFBQUZSNWNHVmxiblZ0QUFBQUNrVlRiR2xqWlZSNWNHVUFBQUFBU1cxbklBQUFBQVppYjNWdVpITlBZbXBqQUFBQUFRQUFBQUFBQUZKamRERUFBQUFFQUFBQUFGUnZjQ0JzYjI1bkFBQUFBQUFBQUFCTVpXWjBiRzl1WndBQUFBQUFBQUFBUW5SdmJXeHZibWNBQUFGRkFBQUFBRkpuYUhSc2IyNW5BQUFCd2dBQUFBTjFjbXhVUlZoVUFBQUFBUUFBQUFBQUFHNTFiR3hVUlZoVUFBQUFBUUFBQUFBQUFFMXpaMlZVUlZoVUFBQUFBUUFBQUFBQUJtRnNkRlJoWjFSRldGUUFBQUFCQUFBQUFBQU9ZMlZzYkZSbGVIUkpjMGhVVFV4aWIyOXNBUUFBQUFoalpXeHNWR1Y0ZEZSRldGUUFBQUFCQUFBQUFBQUphRzl5ZWtGc2FXZHVaVzUxYlFBQUFBOUZVMnhwWTJWSWIzSjZRV3hwWjI0QUFBQUhaR1ZtWVhWc2RBQUFBQWwyWlhKMFFXeHBaMjVsYm5WdEFBQUFEMFZUYkdsalpWWmxjblJCYkdsbmJnQUFBQWRrWldaaGRXeDBBQUFBQzJKblEyOXNiM0pVZVhCbFpXNTFiUUFBQUJGRlUyeHBZMlZDUjBOdmJHOXlWSGx3WlFBQUFBQk9iMjVsQUFBQUNYUnZjRTkxZEhObGRHeHZibWNBQUFBQUFBQUFDbXhsWm5SUGRYUnpaWFJzYjI1bkFBQUFBQUFBQUF4aWIzUjBiMjFQZFhSelpYUnNiMjVuQUFBQUFBQUFBQXR5YVdkb2RFOTFkSE5sZEd4dmJtY0FBQUFBQURoQ1NVMEVLQUFBQUFBQURBQUFBQUUlMkY4QUFBQUFBQUFEaENTVTBFRVFBQUFBQUFBUUVBT0VKSlRRUVVBQUFBQUFBRUFBQUFBVGhDU1UwRURBQUFBQUFXcndBQUFBRUFBQUNnQUFBQWRBQUFBZUFBQU5tQUFBQVdrd0FZQUFIJTJGMlAlMkZnQUJCS1JrbEdBQUVDQUFCSUFFZ0FBUCUyRnRBQXhCWkc5aVpWOURUUUFDJTJGJTJCNEFEa0ZrYjJKbEFHU0FBQUFBQWYlMkZiQUlRQURBZ0lDQWtJREFrSkRCRUxDZ3NSRlE4TURBOFZHQk1URlJNVEdCRU1EQXdNREF3UkRBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBRU5Dd3NORGcwUURnNFFGQTRPRGhRVURnNE9EaFFSREF3TURBd1JFUXdNREF3TURCRU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd00lMkY4QUFFUWdBZEFDZ0F3RWlBQUlSQVFNUkFmJTJGZEFBUUFDdiUyRkVBVDhBQUFFRkFRRUJBUUVCQUFBQUFBQUFBQU1BQVFJRUJRWUhDQWtLQ3dFQUFRVUJBUUVCQVFFQUFBQUFBQUFBQVFBQ0F3UUZCZ2NJQ1FvTEVBQUJCQUVEQWdRQ0JRY0dDQVVERERNQkFBSVJBd1FoRWpFRlFWRmhFeUp4Z1RJR0ZKR2hzVUlqSkJWU3dXSXpOSEtDMFVNSEpaSlQ4T0h4WTNNMUZxS3lneVpFazFSa1JjS2pkRFlYMGxYaVpmS3poTVBUZGVQelJpZVVwSVcwbGNUVTVQU2x0Y1hWNWZWV1puYUdscWEyeHRibTlqZEhWMmQzaDVlbnQ4Zlg1JTJGY1JBQUlDQVFJRUJBTUVCUVlIQndZRk5RRUFBaEVESVRFU0JFRlJZWEVpRXdVeWdaRVVvYkZDSThGUzBmQXpKR0xoY29LU1ExTVZZM00wOFNVR0ZxS3lnd2NtTmNMU1JKTlVveGRrUlZVMmRHWGk4ck9FdzlOMTQlMkZOR2xLU0Z0SlhFMU9UMHBiWEYxZVgxVm1aMmhwYW10c2JXNXZZbk4wZFhaM2VIbDZlM3glMkYlMkZhQUF3REFRQUNFUU1SQUQ4QTlWU1NTU1VwSkpKSlNra2trbEtTU1NTVXM0dURTV2lYUm9PSktGaTNPdngyV3Zic2U0ZTVnTXdSbzVzb3lwZE95TjltVFNSSHBXdmo0T2M0JTJGd0RWZjlXa3B1cEpKSktVa2tra3BTU1NTU2xKSkpKS1Vra2trcCUyRiUyRjBQVlVrbENxeHR0YmJHJTJGUmVBNGZBcEtacEpKSktVbzJXTnJyZFk4dzFnTG5IeUFsVk9zV3Zvd1haRFolMkZRT1phOEQ5eHJtbTMlMkZOcjNQVXN3bSUyRnBtUUdhbXlsNGJIaVd1aEpUWXFzRnRUTEJ3OW9kOTRVMVE2RmtmYU9rNHRzenVxWWZ3VjlKU2xsMSUyRm9PdDJzT2d1RFhnZVRtN2YlMkZQbU4lMkZ3Q0NMVVdaMVZocnlzYktBJTJCanVhN3pndHVaJTJGMUZxSVVYVFNRY3ZLWmk0N3NoN1hPWTB0QkRZSmh6bXMzYWtmUjNibFZkMTNwck10dUklMkJ3c2UlMkY2TDNBaG03bjAlMkZVJTJCaTJ6YWZ6a0ZPZ3E5JTJCZGowWkZPTTRrM1pEdHJHTkVuaHp0N3YzV2JXUFU4YkpweWF2VnBkdVp1YzJlTldPTmIyJTJGMlh0WE9ZMlZVN3JBNmhuTzlSdUpTJTJCcjFoTzFsZ3VHSmJ1WXoyZXh0dnYzZnpMUFUlMkZ3Q0VTVTlRa2tra3BTU1NTU2xKSkpKS2YlMkYlMkZSOVZXZjBpd2l1M0ZmOUxHc2V3VCUyQjZEN1AlMkZBeXh5MEZtdW5INnhQRE1wZ2QlMkZiWkZUJTJGd0RvT3glMkYlMkIyMFFwMGxDMDJDdHhxQUx3RHRCNEo4Rk5KQlRWb3Z4JTJCbzRqdmJMTEdsbHRUdVJNc3NyZiUyRkFOSml6JTJCaFpEcU1PJTJGRXlDWDJkT2M2dCUyQmt1YzFnbXQlMkIzJTJGaGFQVGVvWjVzNlIxSVpyQkdEbGtOdkklMkJqWGNZWXl4JTJGN3RXVjlCJTJGd0R3JTJGd0R3bHlEMUxxV0gwanEyTjFPNTVyeE9vZ1kxcndDNEM5dXVQNm16ZHQ5V2wxdjZUJTJCYiUyRkFGZEZTJTJGMU15cSUyRjJWVGh1c2ElMkIydHN0Mms2c1B1WTczQnJtJTJGbzNWdjJmeSUyRjNGMFM0VEF6cSUyQm0lMkZXRHF1S0duYmhXT3lhNjJEVVVscmNteXVsa3RaNmYyZXkxOVd6OCUyRjJMczJaJTJCRll4MWpMNnl4Z0JlJTJGY0lBSTNDWGZOSXFaWDN1cnNxcXJaNmo3VHFKZ05ZMlBVc1BQMGR5cGZXSiUyRm85Tk9UMnhyYXJIVHhzM3Raa2YlMkJ5NzdWUjZ2OWJlamROc2JrYjNaYnFtMnNmVmpnT09ocmRaRmxqcXNmZlhzJTJGbXZWOVYlMkYlMkJEWEhkWiUyQnV2VTh6QTZpJTJCajAyWTF6YXdhWkx0MkxZMjF0bHRiN1hPYjZqNiUyRndEUjFWJTJGelYzNnY2clBWWUZVJTJCaUNzNVBTN2NkNDNPMldVT0I3N2QxWCUyRlQyN2x3dlZuTnlLSzhkMTVxNmhpajIwN285ZGczREhkVzltOXpMdjhBUSUyRjRXdTcxSyUyRlR0cjlhcXpKJTJCdUhWOHRtUjB6Tm95THZzWFU4TnI3Y2R0am10TjFKOUslMkIycG9kc2JrMSUyRm8lMkY4QTBZc25HNnRlJTJCbkxaYmRYWFk2cHR0QUROd3Vjd21odjJjV2J2MHRuciUyRnBLbmZwS2JLZjhBdHNxRDFEdnJqbmZWNzBjS2xsZGd6Z2JxamY3UUhCM3Ayc0cwc2I2bHYwJTJGZlo2VEVjWmc2MzB4ejJ2ZXpLNmpWYmZoVnRmNmJpUSUyQnhsdG1OWTdhMno5SnMzVnUlMkZ3YXl2ckhoMSUyQmhoZEt2M1h1YmpCaFk5d0RiSHRQcE9kWGtPSDZ0MURkJTJGUnNsJTJGNkMlMkZ3RG9tVjdGZzlXYyUyRkYlMkJxM1JMNmJpYmVuNVdWamg0bGxqZHhiZXhsdGYwNkxhOXZ2cCUyRk0lMkZ3QUZaJTJGaEV1cW4wcjZsZlhNOVdZenB2Vm9vNnd4dmNiQmNHajlMdHIwOUxMb2o5YnhmJTJCdlUlMkZvZjVtejlhdnJKZDAlMkIyakJ3SEFaVHJjZDE3aUE3YlZaYTJuWTBIJTJGQ1h3OXYlMkZBQWRmJTJGV2w1emlkUVo5WmNZM2wzb2Rkd2cyejFtSFo2eldmUXYzdDIlMkJuazAlMkZ3Q24lMkZ3RFJmOHhmNkRmMURxdlhHWiUyQmU1dHpzaTdHZDZsbTJrUHNxTmJxcU9HMSUyRjRDdXhucHQlMkZTNyUyRjlJOUFMalIxR2g3Zjk2JTJCdUpKcEExS1pqMldORG1PRG1uaHdNaEpheVNTU1NVJTJGd0QlMkYwdlZWbjlhaXJGR1lTR2pFY0xYdU9rViUyRnpkNUolMkZkWlUlMkZ3QlglMkZyYTBFSE05RDdKZjlwRTQlMkZwdjlZSFgyYlQ2bW45UklLY0U5VTZsZ1huSkR2Mmwwak4lMkZTNDk3UzM5QzUzMHNPeXhuJTJCQmMlMkYlMkJoNVA4MyUyRjJreWZTJTJGUjVObFBydjE2dXdjekV4c1BIRm96TEJSV0h6NnJyaVdNOU91djZIczlUM3ZzZXVlNkI5YnVvWkY1eEJVODRCREMlMkJ0b1pZVzFQY3pHJTJCMDJHeG03MUdiMlhQMmZvZDdQNW10Y3QxNjdxJTJGVDg3R2RmayUyRmJzY1dISTZWMU5yUU5HdTNPMk5aNmZwNUZOOWRUY3JIM2VwUjZmOVJLd1JZWHpoS0V1R1lvJTJGeGZTTXZNNmxabEYlMkZWZlNvYlUxMVE5TUd5cUxmYSUyQnJQOVBKc3I5S3owOW42YkdxJTJGN2RXTjF6OVZ4QzNLZlpUMCUyQiUyQlBVeUdnNU5JYVBkVTdlelplN0t4UFIlMkZSNUd5cjFzWDlEYjYlMkZ3RGd1WnglMkJ2MzUyYmU0V053ZnQlMkI5dGIybjIxbXphJTJGMDdYbjIlMkZwN3FtVmVwNmRiUDB2cWZvbHFaRDdtWTkxZURtWGg5cEJBWkRHalQ5YXd2YiUyQmtwM1clMkZwMk1ka2ZwYXYxYiUyQlhVYjBXdWxUZVAyM2g1RGkzSkwzVVlXVFl6bHpiS24xc2M1ck43YmFNM0ZaOXB3OHhydlN2ciUyRlFmMGltNnV2SDZ2WTdHNmhmUzJteDFXRllhcTdibmslMkJvMnIwcktQVGE3YnVzdHhYMjAlMkJ6JTJCbGY0UlclMkZxUFhlTTQwM3MlMkZROUxwZGJRNHY5N1dsNERjVzFudWQ2UHFmckgyZTluc3pNYXZOeCUyRnM5JTJGMmhBNmk1cjc3SFpMSDI0VG4xVzQlMkJVd2oyUHZhM0pkajViZnphSGI4bjdGayUyRjRQOVl4UDB0WDh3dWxxYVdmYjFDelo2R2FNMzA2MjJXREQlMkZTVjFtcDNzZlk2dGpXT3NZMXRmODc3NmElMkZUUTdzMjdxRk5WSXJxd0FmVXNiWlJYdDlTME45S3kxdFg4MyUyQmdyZSUyRjFzZWolMkZBRTFsektsdGREdGJpOVpKc3FxYlRhQlhkUzBUYlc2OFB5Y1V4Tmo4cXJJYlIlMkZwUFUlMkZTYjYlMkZUeXY2VldmMHF2T3J6bXNZYXNuR3pIbWs3Z3gxWmE2SzJYUjdzZCUyQjV2Nks3OUpYaTNiUFUlMkZWOGk3MVJSVTUlMkZXYUxNdjZrWWo3U0dYOUw2ZyUyQnFLJTJGb3NyeW1ldXgxY2Y0QjE3ZllzcnB1UG1OeGZ0ejYzUGN3bDlEV0RRMnNJcVprTkolMkZOWmU2bHVSNmYlMkZBQVglMkZBQVMxZjJwWFgwdnElMkJKbG43TGZrVlZ0YTNaQWZsNDkyOW15biUyRkE3NnJMcTg2ciUyQmJvJTJGNHF5aFZydW9aZlNlazRsZG1NMTJQZTIyN0Q5WFFCdHZwdHUzJTJCN2Q2VnI2NlhmMlBVJTJGd2lTbnN1cW5EeUxNZkZ0TVpPUmolMkJyWFNQZUhGc2VvMmw3ZzMxTGElMkZWJTJCaCUyRjJvcSUyRndmcWZwRnpuVmNkOXVEWml2YXh6RFpYYTF6enRaYVhCMUxXJTJCdiUyRmdiJTJGWlZYaTV0djgzJTJGUnNqOUFzTHFmWHYyajAlMkZwWHFQRmVkZ051cmZhMTBGM3Vxc3g4bHY4QW8zT2J2cmYlMkZBTVQ2biUyQkZRcXVxNTklMkZVUmVjMXpiN0NIWE1jOGh0bXc3bjQ3djhCdHVjUFViNnY2UDlMZDY5aU5vUzlINlZrMFp6Y3BqM3RxcWVXMUFBdHVjJTJGOEFtN01leWh2Nld2WiUyRk5aWCUyRkFJRXVnenVrMTRlTGlONjlmYmk0OXU2d2dCanlXTmI2ZFA2SU9hNTJWNnZ0MjQ3UDBkRCUyRkFGUDBhampkYzZrQmVla1lRZDFESXMydHNaVlpiZFZYdDl0WXFzRzklMkIzJTJGVFBaJTJCbCUyRndCQ3NhanBYViUyQnRYMlp3byUyRmFsN1d1dnY5UzBNZWEyJTJGVDIlMkJ2WjdtMWUxajZHVjc2UFolMkZwSzBORTdhdnBIMVo2OW5kVTZUaTRtUDZtVlprdEJkYmtQM3VxYldUUmtqS3VZR2I5dDFlNnYyNzc2clA5SXV5dzhWdUpqdG9hUzh0a3VlZVhPY2R6MyUyRjJuTHliNnZkWnY2RGpES3dtVnQzbHpic1p6M1ZzWmNIbHVUZ1g0OTloZlJZeHV6SnduJTJGem5zeUtyTEx2OEgydlQlMkZyOWhPREslMkJzTSUyRlp1U1drdnJ0RmpDMXdMbXZyJTJGV0txVyUyRm0lMkJ6YlolMkJrUlI0dlZwS24wM3ElMkZUZXE0N01ucCUyQlF5JTJCdDdXdkcwJTJCNEJ3M045U3MlMkZwSyUyRiUyQnVOVnhCVCUyRkFQJTJGVDlWVE9hMTdTeHdEbXVCRG1uVUVIc1U2U1NueGY2eDlDelBxdDFFQ2l4N0dNZWJlbjVRMGNhbmV5eWx6dm91dG8zTXJ1WiUyRmhhdjBucCUyRnBGVXJ5YU1qRnZyenBzNmRrUGJabVVzSHZ4N3pGYmVyNGY3cmJMUDZXeiUyRkFFbG4lMkJpdll2WSUyQnU5TDZmMVhwbDJIMUdHME9HNzFTUTAxdUgwYjJQZDlCN1AlMkZVYiUyRndCR3ZIOHZwRjNUNyUyRlFwY0g1TkllYTdhejZsZVhTZDIlMkJ6SGpkVzcwcUhiTW5FJTJGd2xTWnJFMk51emZqS0hNWSUyQkdmcHpSMm4lMkZMOUg5NXdNJTJGQnlPazVoeHNnaXl1d2I2cm02MTNWSDZOMVglMkZBS01yVzEwanFicm1IRHlIbDhNaGpZM0c2c0hkNlBPMzE4ZHY2ZWl6MDdmVzlQMHYlMkJPSGlQeGM2bjlqNTUyWWRoM1ltVnk3RnRQNSUyQnZ2Zml1JTJGdyUyRiUyRkIlMkZwZjV6ZWhZdjFhNnBWazVXTG5oJTJCSlpoTUw2cm1pV3ZzQlk2dDFGbjBuMU5ZNzdUdnAlMkZTZjhXbmlqcU5Xbk9Fc2NqR1E0WkI3T2lnMGZWN0xmMDFycjhycVIydGV6M1hQYkJ4NjdYc1l6YXl4amJNbDltMzglMkY5SiUyQmwlMkZTJTJCcHpydlV4TVdxdnFOVnVKa3N4MzQwMnpXNW9vc2JkU2NpZzcyNU9IZDlxWTZ2JTJCYzJaT0xUNk5uODh5M2U2WDF1eWs5TmV4em5ZZCUyQlBkaTJNYzFsVHhsNHp0em5XdTNiS2ZXWlpYYnM5VDA2ZjB5cGRZNkoxSHIlMkZWSDlXcnRwc3g2bU1xRkRTJTJGMVdpc0YzMFhOYTUlMkI1NzdiZjBleXolMkZSViUyQnFuSHdXMVJvdERGNnhheTQ5VHZpa3M5T0hOQkFjOWcyc2ZjMW03WnUyJTJGb0clMkZReHYzUFNUOUx3MmRUYmxNJTJCMVcxc2REaXhvTTJ2dTNmMDkzNk90M3BPWnN1cnAlMkZRNUglMkJqJTJGd2FKajRHWGYwNTJaamVwUmpibU9yeXdOek5qSHVsaDlNZWc1ek4lMkIxbHJuJTJGNFI5ZnAlMkZwRll4Y0hENmV5Nm5JdGRTR0FPdGRsRndobGglMkZSdUhwTjNQcGJ2OEE1eG5xZW1nRk9aMSUyRkR5TVc3N1QxRElPUXk0dnJhOTFicUMwMGVuJTJCaVl4JTJGMDZOcnFuZXYlMkZBSWYlMkZBRWoxV3hhRzJzeEtPbzlNdTZpSzMyVVllT0xITUwzdkxyTnJybXUzJTJCbHYlMkZBUFJpMWN2cGwxUFVxVzNOZmg1VkozNCUyQk5tTzlYRXVySHUlMkZWN3QxakdNc1lmMG5vUDluJTJGQUFOcXY5UTZXODR3NjMwaG4yY3VGZDFqY1lHeXNqUzZxekx4bWl1M0Z5YWR2ODk2TlglMkJsJTJCMmVxaFNTQlExdSUyRndlZDZ6OVglMkJydEZKSDFkWmoxYWdFTnNxWnVJQjlFUHN2YmtXN1dqNmVTJTJGNmZxJTJCaiUyQmpXT2NiTnc4aG5xZE54cTN0aXpaWVhPYTRUeTdma1dibU5kJTJGT2Jmb2Y0UmRwVDFmcUhVczFyYyUyRkxma3R5UlUydkdhNGJTSE5lUHRGTDNlbDZWbUxsVmVqWjdmMG0lMkYxY2olMkJaJTJCMFdidlNmcW4wJTJGcTFlVGpkUklkbFZzcHNxY3h3QnFjOFBiZlclMkJyWDM3NiUyRlR0ZiUyRkFLSDBiY1M2djJXSlhxdWxqNFlDWEVEWnF1cnhuMWR4WGRSb3N1dzc4aG5YY1I1ZFNXdTIyT3JZMmJxc2RuMDNaRlR0OTMyT3oyWldMNmxWTFBXb1hTMTlIenVwOVBxJTJCc2ZUTVl0eThrbjdaUlhEQ3k1aGRWYjFERXJlJTJGOU5VNzlMdnhIYkxjbGo3S2Y1cklzcFhFNW1QbTlKNnElMkZMcWE4MllybXZmVkpIcVVzZCUyQmd5cUxhdGxuMGElMkYwM3BQOEFXeExtZXJWJTJCNWolMkJ6JTJGVTdxdlIlMkJwOUNvdDZRTmxMSmJaUTV4ZFpYYjlPMWw3M1M5OWpudTMlMkJxNyUyQmUlMkZuRW1ONTdxdjFYNmI5YyUyRnE5OW94V054JTJCdVl4Y3l4N2c5cmpjMlBYeE01dDM2eDZkam10OUgxdjAyTCUyQmk5TCUyRkNWV2N6OVZQcjUxbnBQV1g5SCUyQnN4dXk4Ykl0Rk5veUR2dG90OXRJY04lMkYwNkhlMzE2UCUyRkFFS28lMkZ3QUo5cDloYlhXMTdudGFBOThiM0FRWFFJYnVQNXk0MyUyRkdCOVEyZGZwJTJGYVhUV3RaMWlsb0VHR2pJWTMlMkZBUGU3JTJCYXlHJTJGOEFhZkolMkY2emIlMkJpJTJGU1VKVDJUSzY2eHRyYUdBQUFCb0FFQWJXOGZ5VkplY2ZVYnFQOEFqSFBWMzFkWHhNako2YyUyRmF5MjdMYU1kMUphTmdzb0R4WDlvOXJmMHphVzIlMkJyJTJGUGVwJTJGcFBSMGxQJTJGOVQxVkpKSkpTRE5MJTJGc3I5Z2VYR0FCVzFybmFrRDZGMzZQJTJCc3VBd3VtViUyRldYTnJ4SHZjeW1xaDJTN0lxTG5SYSUyQjdKZmoyVVBjR3RxZHZ5ZlZzcFo3SyUyRlElMkJ5MSUyRm9hVjZGZmowNUZacXZZTEt5UVMxM0VnN20lMkY5SktpbXZIcHJvckVWMU5ER0R3RFJ0YWtrRWcyTkNObnhEcWRHYjBMcnUzcUZESFg0MXJMVFdHeFZleVI3NjI2dGRWbU5hJTJGMVAzTFBXcjlpMmNtenJwWTV0ZEI2Z3pwTDdLcTdXR1hQcXFmNkQ4SEljMWdaOXVwbyUyRjdUJTJGem1WWCUyRkFEWHFyMGJyT0YwJTJCNDEzNWJXVkZnYzA1a0QxV01QMDZhcmkxN3EyNVA4MVolMkIlMkZYJTJCaSUyQm5hdVR5c2ZxblFlb002aDA2bDkxZVcySDRqd2YxdWhnYzcwTHEzRGRWMVhHeG03OGQ3JTJGd0NmbyUyRlFYZnBLN0dJUkZYNHMyZk43dkFlR3BSandrOTNJeU9qNVZEbk42VTUlMkZVTWElMkZmbFlsTEd1TG0lMkJxeG5wZmFkckcxdGRrMzAyVWZhdiUyQnMyZW4lMkZOclElMkJyZDklMkJObE5kZlMlMkZEdURYTXk4ZTdSMWJtamZKJTJGa05obDlOdjU5S3RPZUxiTURPNkZrdEp0ZSUyQiUyRkNzdExoJTJCaGNheG00bVk1b2M1dExNcjA4WEszc3Q5SDdUUmQlMkZTcVBXVzExZkElMkZhJTJCT09wZE9jNmpxZU1ObGxZamNkdnVkald0OXpmVnIzYjhkJTJGJTJGb20lMkYxRSUyQjJGNWpwZjF1NkRqOVJ5TEtjcXUzcGVhZjFyRjFhR2glMkJoeW0wWE1yOTFUZlprc3IlMkZuY2IlMkZTV1k5YkZUd2Z0ZlVPcGRRd1JadnhzRExPTGgydUJleHJMSDIxWXpMTEFIdjlLM1pYJTJGd0FIJTJGT0xVdyUyQm5mVSUyRjZ4VkRCNmxnNCUyRlR1dEVGckxhRyUyQmdMWEQlMkZDNDJ6WTJ4JTJGJTJCbHc3ZjAxZjh1cjlPbiUyQnJveVBxbGxaZlRoaE1zcUJaYmxXaHhGamFoRkxMV0UlMkIyN0hadjNzYnNyOUg5TjYzJTJGQmpXMUw5SjlQRGElMkY2dWRjeCUyRlU2VGE3YlNINnV4TFQ3VzBPYzAlMkZvNkhUNm1GbDFmelglMkJuVjluMVI2djA3YmJoWnYyemE0dzE0OUswVms2ZW5rTWVXUHUyZnpuOHhWYiUyRndmMEYxR1ZoNG1kU1czTUQydmJBZkEzQUg5eHlvWW1SWjBvJTJGWTg5NCUyQnp0Qk5HUzdRYlIlMkJhOG42T3olMkZ3SCUyRnR0THlSYnlQVWNYTXF6em5ZMk5maDlUcmJaYmtrVnl4elFCdnptJTJCbTA0dnI3ZjBkJTJGbzJmclglMkJEJTJGVFYycmMlMkJybUgwYnFIVDhmY1clMkZiMk5lZDFGcm1Xc2FYT1pMZlJMSDAxVyUyQnB1OUwlMkJhWFVpQ0pIQldHZWdNNmQxSWRVNld6YkppJTJGRmJBYVd1UHZkViUyRlYlMkZuUFRTdE42VTQlMkZXZnFQazVqaFJqMkJvckRyTVhMT2pxbmdlMm0xck5yblYzZTFsbnBmOGIlMkZPMVVybSUyRnFMbFpIMWElMkJzZVQwM0l3TGE3czk3SzhuRnJZJTJCeDlmcCUyQnA2T2ZqdXBaNlZ2VDMlMkJyWTNJJTJGMFA2T3luOUYlMkJqWHJLU0NGSkpKSktVa2tra3AlMkYlMkY5WDFWSkpKSlNra2trbEtRTTNEcHpjZDJQYnVBZEJhOWhMWHNjTldXVlBiOUN4amtkSkpUeEhWZnE0T2w1YmMlMkJxNTVkbHZMTHEyRGF4MWxwclk3SUZiUDVpNjNiNzdLZjlIJTJCayUyRlFycFBxJTJGY0xNQVZsZ3J1cGNXWE00ZHVCajlJMHk3ZiUyRjFmMDB2ckIwaG5WdW5QbyUyQmprTW16RnRHanE3UUMxdGxiOU5qdmQlMkZxeFM2ZFdNajB1cEg5RmZiWHN5cXdJYWJHd3gzMCUyRmYlMkJpZlc5bjlSSG9wd3ZyQmg0ZUYxViUyQlhrVSUyRnFtWlFRTFNCNmRlWXh3dXg3SEFmcEd2czlMJTJGQiUyRjhKNml2V1ZaMmRqNHZWOEZnZmJrWSUyRm81V084aG9zcmRyMyUyQmk2dDducmVmV3g4YjJoMjBoelpFd1I5RnclMkZsSU9MZzQlMkJJNjUyT0N4dDd2VWZXRDdRNCUyRlNjeHY1bSUyRjg5SzFJdWpZajhQcFdMaldEYSUyQnVzQjdTWkljZmM1dTZYZm5GVzMxc2VJZTBPRXpCRTYlMkZOU1NRVXBKSkpKU2tra2tsS1NTU1NVcEpKSkpUJTJGQVAlMkZXOVZTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJGJTJGWkFEaENTVTBFSVFBQUFBQUFWUUFBQUFFQkFBQUFEd0JCQUdRQWJ3QmlBR1VBSUFCUUFHZ0Fid0IwQUc4QWN3Qm9BRzhBY0FBQUFCTUFRUUJrQUc4QVlnQmxBQ0FBVUFCb0FHOEFkQUJ2QUhNQWFBQnZBSEFBSUFCREFGTUFNZ0FBQUFFQU9FSkpUUVFHQUFBQUFBQUhBQUlBQUFBQkFRRCUyRjRUa2phSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMd0E4UDNod1lXTnJaWFFnWW1WbmFXNDlJdSUyQjd2eUlnYVdROUlsYzFUVEJOY0VObGFHbEllbkpsVTNwT1ZHTjZhMk01WkNJJTJGUGdvOGVEcDRiWEJ0WlhSaElIaHRiRzV6T25nOUltRmtiMkpsT201ek9tMWxkR0V2SWlCNE9uaHRjSFJyUFNJekxqRXVNUzB4TVRJaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwNFlYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SSUyQkNpQWdJQ0FnSUNBZ0lEeDRZWEJOVFRwRWIyTjFiV1Z1ZEVsRVBuVjFhV1E2UlRjeE9UVkZOVFkxTnpNek1URkVSRGxGTnpKR1EwRTJRamt3UVVaQlJqVThMM2hoY0UxTk9rUnZZM1Z0Wlc1MFNVUSUyQkNpQWdJQ0FnSUNBZ0lEeDRZWEJOVFRwSmJuTjBZVzVqWlVsRVBuVjFhV1E2UlRjeE9UVkZOVGMxTnpNek1URkVSRGxGTnpKR1EwRTJRamt3UVVaQlJqVThMM2hoY0UxTk9rbHVjM1JoYm1ObFNVUSUyQkNpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwNFlYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOGVHRndPa055WldGMFpVUmhkR1UlMkJNakF3T0Mwd055MHhPVlF4TkRvMU56bzBNUzB3TlRvd01Ed3ZlR0Z3T2tOeVpXRjBaVVJoZEdVJTJCQ2lBZ0lDQWdJQ0FnSUR4NFlYQTZUVzlrYVdaNVJHRjBaVDR5TURBNExUQTNMVEU1VkRFME9qVTRPakExTFRBMU9qQXdQQzk0WVhBNlRXOWthV1o1UkdGMFpUNEtJQ0FnSUNBZ0lDQWdQSGhoY0RwTlpYUmhaR0YwWVVSaGRHVSUyQk1qQXdPQzB3TnkweE9WUXhORG8xT0Rvd05TMHdOVG93TUR3dmVHRndPazFsZEdGa1lYUmhSR0YwWlQ0S0lDQWdJQ0FnSUNBZ1BIaGhjRHBEY21WaGRHOXlWRzl2YkQ1QlpHOWlaU0JRYUc5MGIzTm9iM0FnUTFNeUlFMWhZMmx1ZEc5emFEd3ZlR0Z3T2tOeVpXRjBiM0pVYjI5c1Bnb2dJQ0FnSUNBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNlpHTTlJbWgwZEhBNkx5OXdkWEpzTG05eVp5OWtZeTlsYkdWdFpXNTBjeTh4TGpFdklqNEtJQ0FnSUNBZ0lDQWdQR1JqT21admNtMWhkRDVwYldGblpTOXFjR1ZuUEM5a1l6cG1iM0p0WVhRJTJCQ2lBZ0lDQWdJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQZ29nSUNBZ0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenB3YUc5MGIzTm9iM0E5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmNHaHZkRzl6YUc5d0x6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOGNHaHZkRzl6YUc5d09rTnZiRzl5VFc5a1pUNHpQQzl3YUc5MGIzTm9iM0E2UTI5c2IzSk5iMlJsUGdvZ0lDQWdJQ0FnSUNBOGNHaHZkRzl6YUc5d09raHBjM1J2Y25rdlBnb2dJQ0FnSUNBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwUGNtbGxiblJoZEdsdmJqNHhQQzkwYVdabU9rOXlhV1Z1ZEdGMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFlVbVZ6YjJ4MWRHbHZiajR4TURBd01EQXdMekV3TURBd1BDOTBhV1ptT2xoU1pYTnZiSFYwYVc5dVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwWlVtVnpiMngxZEdsdmJqNHhNREF3TURBd0x6RXdNREF3UEM5MGFXWm1PbGxTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBTWlhOdmJIVjBhVzl1Vlc1cGRENHlQQzkwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBPWVhScGRtVkVhV2RsYzNRJTJCTWpVMkxESTFOeXd5TlRnc01qVTVMREkyTWl3eU56UXNNamMzTERJNE5DdzFNekFzTlRNeExESTRNaXd5T0RNc01qazJMRE13TVN3ek1UZ3NNekU1TERVeU9TdzFNeklzTXpBMkxESTNNQ3d5TnpFc01qY3lMRE13TlN3ek1UVXNNek0wTXpJN1F6QTFRVEU1TURSR1JqQXdRVUpFUXpBMU1VSkVSa0ZHTURJd05FVkJOVEU4TDNScFptWTZUbUYwYVhabFJHbG5aWE4wUGdvZ0lDQWdJQ0E4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02WlhocFpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzlsZUdsbUx6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCUyQk5EVXdQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQak15TlR3dlpYaHBaanBRYVhobGJGbEVhVzFsYm5OcGIyNCUyQkNpQWdJQ0FnSUNBZ0lEeGxlR2xtT2tOdmJHOXlVM0JoWTJVJTJCTFRFOEwyVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VG1GMGFYWmxSR2xuWlhOMFBqTTJPRFkwTERRd09UWXdMRFF3T1RZeExETTNNVEl4TERNM01USXlMRFF3T1RZeUxEUXdPVFl6TERNM05URXdMRFF3T1RZMExETTJPRFkzTERNMk9EWTRMRE16TkRNMExETXpORE0zTERNME9EVXdMRE0wT0RVeUxETTBPRFUxTERNME9EVTJMRE0zTXpjM0xETTNNemM0TERNM016YzVMRE0zTXpnd0xETTNNemd4TERNM016Z3lMRE0zTXpnekxETTNNemcwTERNM016ZzFMRE0zTXpnMkxETTNNemsyTERReE5EZ3pMRFF4TkRnMExEUXhORGcyTERReE5EZzNMRFF4TkRnNExEUXhORGt5TERReE5Ea3pMRFF4TkRrMUxEUXhOekk0TERReE56STVMRFF4TnpNd0xEUXhPVGcxTERReE9UZzJMRFF4T1RnM0xEUXhPVGc0TERReE9UZzVMRFF4T1Rrd0xEUXhPVGt4TERReE9Ua3lMRFF4T1RrekxEUXhPVGswTERReE9UazFMRFF4T1RrMkxEUXlNREUyTERBc01pdzBMRFVzTml3M0xEZ3NPU3d4TUN3eE1Td3hNaXd4TXl3eE5Dd3hOU3d4Tml3eE55d3hPQ3d5TUN3eU1pd3lNeXd5TkN3eU5Td3lOaXd5Tnl3eU9Dd3pNRHRFTkRZek4wTkNPVVEwTVVFeE1FSkJOMFZHTlVWQ1EwUkNOak14T0RNeU9Ud3ZaWGhwWmpwT1lYUnBkbVZFYVdkbGMzUSUyQkNpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWSUyQkNqd3ZlRHA0YlhCdFpYUmhQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBbzhQM2h3WVdOclpYUWdaVzVrUFNKM0lqOCUyQiUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFDQVlHQmdZR0NBWUdDQXdJQndnTURnb0lDQW9PRUEwTkRnME5FQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVKQ0FnSkNna0xDUWtMRGdzTkN3NFJEZzRPRGhFUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQlJRSENBd0VpQUFJUkFRTVJBZiUyRmRBQVFBSGYlMkZFQWFJQUFBQUhBUUVCQVFFQUFBQUFBQUFBQUFRRkF3SUdBUUFIQ0FrS0N3RUFBZ0lEQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFDQVFNREFnUUNCZ2NEQkFJR0FuTUJBZ01SQkFBRklSSXhRVkVHRTJFaWNZRVVNcEdoQnhXeFFpUEJVdEhoTXhaaThDUnlndkVsUXpSVGtxS3lZM1BDTlVRbms2T3pOaGRVWkhURDB1SUlKb01KQ2hnWmhKUkZScVMwVnROVktCcnk0JTJGUEUxT1QwWlhXRmxhVzF4ZFhsOVdaMmhwYW10c2JXNXZZM1IxZG5kNGVYcDdmSDElMkJmM09FaFlhSGlJbUtpNHlOam8lMkJDazVTVmxwZVltWnFibkoyZW41S2pwS1dtcDZpcHFxdXNyYTZ2b1JBQUlDQVFJREJRVUVCUVlFQ0FNRGJRRUFBaEVEQkNFU01VRUZVUk5oSWdaeGdaRXlvYkh3Rk1IUjRTTkNGVkppY3ZFekpEUkRnaGFTVXlXaVk3TENCM1BTTmVKRWd4ZFVrd2dKQ2hnWkpqWkZHaWRrZEZVMzhxT3p3eWdwMCUyQlB6aEpTa3RNVFU1UFJsZFlXVnBiWEYxZVgxUmxabWRvYVdwcmJHMXViMlIxZG5kNGVYcDdmSDElMkJmM09FaFlhSGlJbUtpNHlOam8lMkJEbEpXV2w1aVptcHVjblo2ZmtxT2twYWFucUttcXE2eXRycSUyQnYlMkZhQUF3REFRQUNFUU1SQUQ4QTclMkZtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtcmxISTJ1dFhuNldsdG5GRVNiMFJGU3A0MVdqRDVxM0xDQmFzbHpaczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlEdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMkUycmowTHV6dkY3UHhmdFVmOEFYUExEbkMzWEkwZXdkcE9rVEs0UDA4VCUyRkFNSzJFYzFUTE5nYXhtRTlwRklEeSUyQkVBbjNHeHdUZ1YyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYlMkYlMkYwZSUyRjVzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFlVZVpwZlIwYTRrcFVBeDE5aDZpNzRiNFg2NUNialI3NkZWNUZvSktLZTVDMUdJVkxkRHVHaHVYczJJS09YNGdmc3ZHZHglMkZza0t0a2l5RDZiY3RISGJYZ1BJbU9DNHFPcFhqNkUxZmY0TW00TmR4a3BjNzcwQnZObXpaRkxzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5THYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14Vm9rS0NUMEclMkYzWmdhaW9OUWVtQU5adWhhV0x5RTBMbFkxJTJCYkduNnNXc3BBOFFBJTJGWiUyRlVjVlJXYk5teFYyYk5teFYyYk5teFYyTlpRd0tub2RqOU9Pellxd0RUNGlpUFpzYSUyRlZMbTVzajdJJTJGNzZMJTJCT1RYVHBqUFpRU3Q5cGtBYjVyOEp5S1hxZlV2TU9wSVFPRnhGRGZvUDhxRnZUbCUyRjRRNUlORGtyRlBBZjhBZFVoSSUyRndCViUyRmlIOGNuTGVBUGN4SE1wcm16WnNneWRtelpzVmRtelpzVmRtelpzVmRtell5V1JJbzJra1lLaWlyTWRnQU1WWDVzalRlYUdsMUN6c2JTQU9MdVgwdzdrMTRLQ3p5QUQlMkJVWkpCaXJlYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYlMkY5UHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14Vm80Q1hVRmE5ZTBDYkpSV2tyJTJCMFJXbE1IWkVKNVd0UE10ekU1JTJCR1lKS255SzAlMkY0a3VFQzFaZU0ySVcwb2tqRlQ4UzdIJTJCdUw0Rll6NTJtTVduMnREVGxjcFg2RmJESFI1ZWNDSCUyQlpldnl3bCUyRk1NOGRKdG43TGRKJTJCS3Zncnk5Y2NyT0o2OUtWdzlFOUdTNXMyYkFoMmJObXhWMmJObXhWMmJObXhWaTNtaUZVMUxTYnh2c1N0Sll6SCUyRkpuU2klMkY4QURZcG9FekxjeHExVDY4RkdyJTJGdnlFOEdyZ2p6ZEMwbWhYRXNZJTJGZTJwUzVpJTJGMW9tRGY4Und0dEpSSGRyY0RhTmJoWlZJNmVuZElHJTJGNG1jbkhlSkNEekRMODJiTmtFdXpaczJLdXpaczJLdXpaczJLdXJrWjg0M1poczRiVlRRenZWcWZ5cnZnM3pITlBiMlVNc0x0R0JQR0pTcElxakVxUlViOWNoJTJCdlNTdnAwSmxjdkpDTHlNdXhKYjRKTnZpJTJGMVN1RUJWdmthWDlMJTJCWmJtOFN2MWZUYmYwWTYlMkY3OGxQeEglMkZnRnpwZVJ2eVBiV2NYbHl5dWJXQklYdW94Sk9VRzd1S2prNSUyRmFPU1NveFBOWFpzMmJBcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRiUyRlU3JTJGbXpac1ZRMm9zeVdNN28zRmxRa01PeEdQdFpoUEJIS0NEeVVFMDhlJTJCTTFCZWRqY3I0eFBUJTJGZ1RoVjVjdkJKYnBHZXJnRWZNRGNZYTJQa3FmWnMyYkFyczJiTmlyczJiTmlyczJiTmlyc2hmblJHdGI3VDlUWDdMY29KRDJxRHpTdjN2azB3bDgxV0Rham9kekRHS3pSajFvUjM1UiUyRkZUNlJ0aEhOWGFWY3JLc1V0ZnREaTMwNGRaejd5cnFQclFDSW5jZE1uc0VucVJLJTJGY2pmNTR5VmpQNWd3dEo1Y2tjRCUyQjVtaWslMkJpdkglMkZBSTN3RDVSbkV0cHdyV2d3OTgzUkdieTFxaXFLbFlHa0ElMkY0eCUyRnZQJTJCTmNobmtlNUJJVUdvUFElMkZQRUpISjZYRzNKRmJ4QU9QeE9BMWlYN3NVd0lkbXpac1ZkbXpac1ZkbXpac1ZVYnFCYnEybXRtJTJCek1qUm41TUtaRExQNHJDMlVWcTlxWWo3U1dzaFduJTJCdHhPVG5JVkc0dHRXdmROYWlpSzdGeEdEdFdHNlRpJTJGd0R3TXVTaHpSTGt5JTJCMWxFOXZGTVA4QWRpSzMzZ1lzY0t0Qm1EV2h0cSUyRkhiT3lNcDY4U2VTSDVVT0dweUo1cFlkZTNtb1dQbVc1S3pIMHBJbzJXTnQwQTNXdjB0czJENzN6SjZGZ3p4cXFYcEtwSEc5ZURNeDdFWVhlZDQ1VmVDNGdQQ2RZeXF1YTBJNXE1VmdPdjJjQVc4c1dvMlFNcWh3d295SGNWeVFGaFZPTHp2ck5yZGY2ZkZITEZYNGtWZUJIJTJCcjElMkY0YkpscCUyQnQyR3FXclhGbklDeUtXZUp0blVnVjNYT1A2N3FGamFGTEhVcnByZWN5JTJCbFphanhQRG1OMWpuOER2OEFhJTJCeSUyQklhWHJjbHJkdFozNE5yZlIxVVNvZmdlbzJLMDZjJTJGOEFnY0JDWHIlMkZsdlhScmRuems0cmNvU0pGWFlmTWJuRHpPViUyQlRyODJlcUFPUUlwYUJxN0FWMnIlMkJPZFRyaVJTRXA4ejhSb045STVBV0pQVjVIWUQweUhyJTJCR1FnM050cTFsY0xhengzQ2ladmlpWU9LelFvOUtqYjdZem9XcVJldnB0NUFPc2tFaWo1bENPbWM2MCUyQldDSzBqOU9OWW81SVlwJTJCRWFoUVdCZU5qUmFmRWNNVlR2VGIlMkI4MGZ5SFozRnVnRTl2U09SSkJVcVBWWlclMkJFSHczeVZhWGVDJTJGc29idWxHa1g0MUhRTU5tSCUyRkJaekMlMkIxaVRUYmFkWlVranRKanprUXFTS3FObTVmc2RNUGZ5cjElMkZSZFQ4dnJhMkU1TjVDOGtsM2JTTVRLcGtjdHolMkJMN1NQOXBlT0E3ZkZrSWtna0N3T2ZrejdObEExeThERjJiTm14VjJiRUpMeTFpbmp0cEpWV2VhdnBSRWprM0hjOFY2NHZpcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlYdiUyQmJObXhWcGxEcVViY01LSDVISVBva2pXc3N0cXglMkJLMmxaUGY0V3BrNXlGNm5GOVI4eHN3SEdPOFFTaiUyRkFGaDhEJTJGcXJrb2M2Vm1TTUhVT09qQUVmVGpzQWFaTVhoTVJQeFJuWWY1SjZZUHlKVjJiTm14VjJiTm14VlF1ek90dTcyOVBWVWNsQkZhMDdVOThEYWZxc0Y2aTlFa0k2ZVB5d3d5RjZ2RzJpNm9KUlVXbDZ4WkNQMkpPcnIlMkZzdnRMaEc2czB5aUs0WDZaZmk0UUk3VmI5bHY1aCUyRlhESHJnVjVjOEIwTHpMYzJRJTJCR0YyOVdEdzRTZkYlMkZ3cCUyQkhPZzZaTUhpNGoyWWZUa1olMkZNR3dwRmFhekdEeXRtOUdZaiUyRkFIMjUlMkJFbiUyRkFGWCUyRkFPSjROOHVYd2xpaWNucHMzMDVMbUZaRGV3cmMyZHhidDBsaWVOdmt5bGM0NSUyQlgxMFVDUXpIakxBVEU0UCUyQlFlTmM2TDU1ZTVpMEo1N1dWb25pa1JtWkRTcTdqZjJ5QjJPcCUyRlZZb3IyJTJGd0JOamt0cEFHanY3WnZVJTJCSW5veThWYW8lMkZhNDR4Q1E5YXMyNVJWQnFLbmZCR1JieTlyQkVzbGpjSVkwYVElMkJnNUZDQ1FENmJqOWxzbEdBaWtONXMyYkFyczJiR3lPSTBhUnVpQXNmb0ZjVlMlMkIlMkYxcTJzSmx0eXJTeXR1eXAlMkJ5RHNDM3p3eEJxQWZIZkklMkZvZG10Mno2cGNqbkpLNWRBZXhQVCUyRmdSa2h4VjJjNzgybVN5ODJXVWdOSWRVaE5zNFBUbWxYUSUyRndEQkRPaVpBdnpMYjZuSHBPcmxGa2pzN2xXZEc5eXZ4VkclMkZ3aXVHSjNVcDNZVEpGcjdvcCUyQkM4dDFsakhqeG9kdjhBWXRraXlIYnh4NlhmS3glMkZjWEJpbEozJTJCQXNWVVY4RlJseVlBNFo4MERra1BtcTNFdGxISlNwUiUyQkpQZ0hCSDY2WkJ0SXVmcXQ5TnA4cEFMSG5FcE81cDFvTTZYcTBQMWpUcmlQb2VQSWZOZHhuTHRadHJHWmx1QmNHM3ZGJTJCRkpZdUpmeDQwSUl4SEpLenpiNWV0OVp0WllwMUx3eWdjZ1B0S3klMkZaa1QlMkZLV3VSS0tDT0M2dE5IMUNibGNXaUlMRFVXSEg2d2c2d3lEZWp4OUZ3NHNmT01qRUJZNWJpSDFIZ0x5OFZZdWxPZkpWJTJCeTM4cTRuZEg5TGxMMjE5SzRpaWxIcld6THhsaEk2U2dFMSUyRjJTbkZLbzBDenh5Mjh6TXFjU3pzcElZQlBqMkklMkYxY2QlMkZ5dG5WWmROUTJEMUklMkJFU01vUHclMkZ6TWZ0ZE1HMjBUU1F5eWJsbWplbnpvYzRUWTZsZDZkZHlLd01Vc2JGWm9IcU53ZDFLbkdYUlhzOW41JTJGdjdsZzk4R2xXaE1qd2sxQSUyRm00ayUyRkY3akRTd1NQVUxUVEpJM1BHQnBoR053RzRPSFZXJTJCZ25PTlglMkJzV0ZwREZQYVNTSmNURVNHM1RjUmxmMnVSSyUyRmF6cSUyQmtSM2FlVDdlJTJCam5YNnlvVzhpYmh0JTJCOWk5VGclMkIlMkZROThRVlpIcXN0dXRvd3VTUFNkU3BWOTFJUFZXemlmMWk5OHQlMkJaN200MEZqYlNXVXJOQ3FFbWtleDRFSDdhY1Q5bHYyYzZsb25tYlR2TVVUV2R3Z2l1bVdrdHJMUWhnZTZIOW9mNnVSTHpkNVp1ckRWUDhRMktldFlGVVc3alhlU0tpJTJCbTBoSDdVWkg3WDdPQ1k0ZzJZTTBzTXJqdmV4QjVTSGNYc25rUHozWSUyQmNkUHFLUTZsQUI5YnRhJTJGOGxJNjlZMiUyRjRYSmVEWFBKbHZQZTZKcU1lcTZOTVlMdUU4NDJUbzZudFRveXV2MmslMkZhejBKNUU4JTJCMkhuR3lJMnQ5VmdBJTJCdDJaUDBlcEglMkZORWYlMkJFeUVTZVV1ZmYzdG1iRkF4OGJCOUg4VWY0c1o4JTJGNlA4MlRNTUxOYjFpRFJyUTNFcEJra1BDM2o3czUlMkZ3Q05WJTJCMCUyQkdWYzRuNW04eWZwbnpKY3NyJTJGNkhZc0xlMjMyUEJ2M2owJTJGeTMlMkJIJTJGWTVKeGtMb3VyWDE3NSUyRnRiMjhtYVNacmxvcXNkbFExVGdvJTJGWlVETzc1NSUyQjh1eGx2UGNNSTZpNkxBZTJ6WjZCd2xTN05tellGZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZiUyRlc3JTJGbXpac1Zka2I4M1c1JTJCclcxJTJCZyUyQksxa0FjJTJGNUQlMkZDZiUyQkc0NUpNQzZqYXJlMkZ4YUVmM3FNbyUyQmRQaCUyRjRiQ05pcVY2Vk9PY1RWJTJCR1JlQjM3JTJGYVg5V0hveUZhSk16MjNCcWlXRTdqdUNoJTJGc3lhUnNIUlhIUmdDUHB3eTUyZ0xzMmJOa1V1elpzMkt1d3UxclM0OVcwNld6YjRYSTVRdjhBeXV1Nm5ESE1lbUt2T05FMUtXR1ZyRzdySFBDeFJnZXFzcHBrN3NiMFhDOFcybFVianhIaU1obm5uVEh0TG1QWHJaZmdha2QxVHNSOWlRJTJGUDdMWXRvbXElMkZXSTBJYWt5Ym9mNEg1NUxtRlpkcU5sRnFOamNXTXdxazZGRDh6OWslMkZRYzUxNVh1WmJXNGwwJTJCNSUyQkdXRnpFNm4lMkJaVFRPbFcwNjNFUWtYWTlHWHdQaG5PJTJGTnNTNlQ1cXRib2ZCSHFhbmlleG1pJTJCMnYlMkJzVTR2JTJGbGZGZ0hjclBURmJhblpOYjNjYXl3eUFwTEUzUWozemp1dHdXJTJGbGp6QmM2UHA2ZlY5Skhwc0xOU1NnUjFISW9yVjNWdml6cTJqWFFrJTJCQW5kbEJBOXhuTnZ6UmlXUHpKQkpXbnIyZ0pQJTJGR055djhBSEFkaWtKM1lHZjBvNXBaRElib1NEMUdKSjlhQWdoNiUyRjVhVXpvRm5OOVl0WVo2Z21SRlkwNlZJM3psWGslMkZWSTViaTJobmxCZ2RCdXhGRmFoaGZyMHJTTnNuSGxYVTRKSTVOSmFTdDFhdklRbSUyQjhSYXF1RDBJJTJCTGprcGJnSVpKbXpac2lyc0RhZ0MxamNxdlV4T0IlMkZ3SndUalhVTXJLMzJXQkIlMkJXS3Bmb2ZFNlhiOGY1ZCUyRm5oamtNUG12UiUyRktsckpCcWt4QlNWa2pDMFBJRHBUZkkxNXMlMkZNTmJ1M2piUjVwbHNaVnA2OXN3Umk5TjBlU2pNbkglMkJSY1ZwbTY2OWNXV3RYR25hdHdqZ0ttYTJ1UHNqMHglMkZOWHclMkZheU9mbUxyJTJCaFgzbCUyQlBUWXJrWE0lMkJwR3RtMXVQVVVjZVg3eVJ4OEtMdHglMkYxczV4b04lMkZlZnBWcjZDOG11VlZmVXVMTzhrTXJFSWVUZW03ZmFSazVJeTVGZFR1WjlCMTY5dHJHWnZxa2M1ZUZEOFNtSnp6VWNUdHNyY2VXSHpUVDNmUkp2MHA1VVp2dE9ZWXJnQ3UlMkZKVjRQJTJGd0FOSG5Qcmo4M3ZNMmxYOXpwV29CSllJbmFKNTQwcE9pMSUyQkdSUUR4ZjRjbG41WjNxVDJzdGpXckswaWV4RWdFNjAlMkYyWExPVWZtSFlOWmVaYmhXUDk0QXluJTJGViUyQkQlMkZqVmNsTGxiRWRRbjk1NXExd1RpVTNodUxhZGVRQ3NmU2xqTzlWTmV2JTJGQUEwYllIdWIxWjdWNXlXa2hIeHBjVkhKTndHaXVQOEFLU3RWayUyRmJ5R2FmcUxReHlhZk81UzJsUEpXVUFtR1ElMkY3dWlCOGY4QWQwWCUyQjdGJTJGeThDdGQ2anBsM0xiM3YlMkJrUVRweG5pcVREY1FuN0xvUiUyRndVYiUyRkFMRFpDeXlla1dsOVp5YUZMUGVsWkdOMnRxREV0WkpIZW5FczY3Y2twVlh3cTFiVTdHMWlLV3ZxdGNDUjRia2toRll4JTJGQ0hYaHZ2WDQ4QyUyQlU3SDFTYkszazlXeWE1aHY0SGNoU0JGOEZ4QkwyV2VPSjFrJTJGNHM5UDRjdSUyRjBqJTJGYzFGcGhtRnhQTGVPaFpCeEFpTDhqdDQwJTJGYTVZZWdWNlBwcnZMcGNFOHNmcFROYmgzUVZvR0sxMnpsdW9RMlBuWmloNDJmbVdJVnQ1ejhNZDRxOUk1UDVKMTdaMkE4WXJXVmwlMkJFUm9hRHdvTnZ1cG5MdGIwMkx6UkVkUjBoQmJhN2JWZTR0RVBGWndwcjZzSCUyRkFCYiUyRkFKT1NrZ1BOTHFHYUc3ZTN2NDJpdW9Ud2xpY1VJSzlpTTc1NUtuR29lVDdaWDZtMUNIJTJGWVNOQ2YlMkJGT2N0bnVJZk5rU1dlcUVXdXUyNDlPQzhjY2ZXNDdlbGNkJTJCZiUyQlZuUSUyRnl5UzV0OURrMDY3ak1WemFTWE1MSzNoUkpscDRyOXJqa1FsNVBiYWxjYVJkJTJCbEk3UGJ3eXNJNWxOSklpclUlMkJIJTJGbW5PdWVWJTJGT1VlbyUyQm5ZNmhJcHVXWDl4UHR3blUlMkZoeiUyRm5UT1BlWTR6WSUyQllOVGdwVkJjU1ZROUNySGtQMTRHc2I5ckZnUldTelkxSzElMkJLTmglMkIwcCUyRlpjWTJRZGxldiUyQlolMkZMS3hLMTlwY2RZQlV6V3FkWXgxTHdqJTJCVCUyQmFQOEFaJTJGWnlIVzl4ZTZaZlE2cHBrN1FYc0JEUlRJZXZzUiUyQjBwJTJGbHlZJTJCVVBOUjFLSkxLNWxEM0tyVzNtNmVzZzY3Zjc5VDlwTUQlMkJadENqVG5xVmlsSVclMkJLZUZSc2hQV1ZBUDJQOSUyQkolMkJ6a1pSQjNEUEZsbGpseFJQejVFZHg4bWN3JTJGbTNhWHZrelVMeVVDMzEyMmpFVDJvTkE4a2g5TlpZVCUyRkp2emIlMkJUT1phYklobldrZ2FPUWN3eE81NzclMkY1ZmpoS0lZbmRvWnZnYVVEMDV2NVNOMUolMkZ5RzZZSTBSWjR0UyUyQm95S1FTMUhUd1lIc2ZmQUxyZE9Rd00lMkJMR09FSGZodTZQV3ZKNmY1RnNmclhucVc4SyUyRkRCRVpENGNtQVZmMVoyZk9TZVNMbWZUOVJySEVXbHZEU1phVmFnTlIwJTJCenRuVzhtV3N1elpzMkJEczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOWZ2JTJCYk5teFYyWTVzbzRxdzZXTDlIZVlMaUxwRmNVbmpIUWZIOXIlMkZodVdTYlRuQmdNWGVKaXYwSDRsJTJGQTRUJTJCYTRmVFcwMUZSdkRKNmNoQSUyRllmcFg1TU1HYVhjQm1IeGJTcnNDZGk2JTJGMmY4UnlaM2o3a2RVNHpaenJUZk8ycVFhM2VhSHJrYXg2aGF1eCUyQnI5RmtnSiUyRmRUMjc5MFpQJTJCR3lkV1dvV3QlMkJuSzNlckFmSEdkbVg1cmtTRW92Tm0yeWlRQVNUUURxY0N0NXNMNWRaMDZLbzlZU01OcVJBdjhBaXUySXY1aTBxSmVjc3JLbyUyRndBa2slMkZjdFRobzl5bzY5aHRiaTJlMnZBcGdtSEIxY2dBMSUyQmZmT1lYJTJCblhmbFhVZ2hKZXprTmJhYnhIOGpIJTJCZGNQUE44Mmw2NWIyajIxM0ROOVdkbW10ZWZDUmtkZUphTlNWYjFJJTJGdFlYV004Y1ZrMmphdk05NXBVdjl6Y1B2TEIlMkZJM0x2d3doSVQyeDEyS0NCcnhqeWpSUzA2anJ4RzVZRCUyQlpjcnp6cGtYbWp5aExQcHpDU2FGVnY4QVRab3p1WGpIUDRHSCUyQiUyRkU1SmtVbWp1OUJ1amFUc0pZSEhLQzRHNlN4bjlyJTJGQUpxd0pINWcxZnlqRGF3MktyY2FFMHpTTkUyN1JpUW10dVhQU0o2JTJGdVclMkZZa3hJNmhVZzhpYTlxdWxhdEhlM3MwazhEZ3hHS1p5d0JrJTJCeTMlMkJUa24lMkZONjNhOHR0RzFhM3JITCUyQjloSUIlMkJJZEdLJTJGOEFCQTVETmJTMHRMJTJCNGtzSk9lbnpFVFdyallpT1Q0Z2pEOWw0V3FqTCUyRkFKT1RUVTlYdE5jOHI2ZERQOEU4cmM0aVNQNzFSd2tUZmNQJTJGQUxzWCUyQmZsZ3EwOXpGdktlb1RNd1YyTmVDc0IwQmFOcWY4YTVOOVp1NTlLODNXMnBXYiUyQm45Y2pCbzI0WlhVTnhJJTJGMWx5Q1dzTDZmTmIzTEx4aWQyNHRTZ0lOQTlQdXliNjdwZCUyRnIya2FQYzZieE41Yjhvd1dZS0FZVyUyQkdwUDhBazRSeVFVOHVmT0Y3SkxEOVhSTGFBajk2WlBpWXY0QTlBbiUyRkRZT2Z6OW9FYnRBMGtqWFNxRyUyQnJxaDVOdFUlMkJrVzRpUUwlMkZrNXlLJTJGaXVOYWdqRWNwVFU3Umo2WXFhU0FidEczJTJGRmluNG9tJTJGYSUyQnhoWGNHZVd4bERncFBiZnZVRmFQREtwRlhpSSUyRllrJTJGayUyRm13RlhyMG41aGZYQkpGcFZ0eG1DODRqT2E4MSUyRmFLcXY3U2Z5NUdMN3pKcTJyd1hGaHFGNDBBbFdpU1FmQUVQVlclMkJIN1NmeiUyRndDUmtUbDFkTFczdDd4aTgxMDhDM2c5RUJBckNuSThqdFZ2dE5SY1IxenpUZEpjUXZZd1JXN3kyOGR3ekZmVWJsSXZJMDVmQW8lMkYyT0d4U3QzelNXOUxQWElUTWxDaml1em9mc3lSdDJZZnNQa2QwaWFiVHRRa3NwMVpyYTRVODRYNlNKJTJCdzQlMkZ3QW9EN0VpNWR6cVY3TEZDdDdLWm5WQVklMkJScXlnOWFqJTJCWCUyQlRKZG91dWFIcmx0YjJQbUNOZnJrS21PMnZLY1QlMkZrZ3NQMnY1Y2p0YXBmbzBKdCUyRk1sbEZHSGx0WnZWZUs0cHR3V05pNnlVJTJCekl2Umx3bTFtVWFycE50SkhFV3V0T2t1SWJoMEZTYmZrR2laMiUyRmI0TXhIJTJCcGs2dVpOTThzYWRkeXdTdE5LNjA1dHNLblljRiUyRm1iT1p5M3MybldhTEUlMkZHNGU0JTJCc0s0M0hFTHhvd096SyUyRkw0bHg1ZkZXYiUyRmxwclAxVFdMUU1hTE1GUmglMkZsUnR4ciUyRndMWW4lMkJmTmpMcCUyQnAyV3B3Z2hXTHh1ZjJTR29SWCUyRkFJREk5cGVvMmtNdGpmV1FNVWkzSk05dTI0ajVyVDREJTJCMUc1cXlmeWZZenAlMkZ3Q2NkaW1yJTJCVXJhJTJGRyUyRndwSVNPb0lwWEpEY0lQTjRIRGNSM1NjbDJJNnFlb09HTnZjUXl3JTJGbyUyQiUyRkpXR3BOdlAxYUJ6JTJCMFBHRnY4QWRrZiUyQnpYSXhTYXltMk5DT2g3TU1OWUxoTGxPUzdIOXBmQTVGVTMwdlVOUTh1YXFqSXFzYXFIaU84VXNaNkVlS3NyZkElMkJTM3lVcjZwNWl1ZFRsMlMxUnZSVGNoVEtlQ2dWJTJGbFRsa09zdlV2ZU9uOFZrZGF0YXV4b3lOJTJGSUQlMkIwciUyRndBbVRmeVlIc3JuVGRQYXNjMSUyRk5jelhNWkFyd2hUMDRnMyUyRkFEMDVZam1sNkZkaXRsY211JTJGcHZYJTJGZ1RuSzViUzRzcDFtRHRGSUQ2a0xpb1BYWmdjNjFOR1RCTkg0bzFQcFVqSXBOYnlYMFVsdmN3JTJGVjlUc3Q3aTJJcUhXbjk5RVAya1pmN3hGJTJGMThuTVgxcEFOTVIxVFRZZk1rUnVZWWx0JTJGTUVZNUVmWVc3VWZ0TCUyRndBWGpEZjh1JTJGTUZ6TThtblg2TUpMV1JGa01oNHlpcXRHVVlVJTJGWlA4Mkl6VyUyRkg0RFZRRyUyRmR1UHRSUDFGRyUyRmxiOWxzRzZaSkRKZlBjdkdJOVdDb0pad1BobVJHSEYyWCUyRmZpNEFQMnBlYWZtQkU4SG1xOExnQVRDT1ZhZUJVTCUyQnRjamF1VVBpcDZxZSUyQmRKODJ4MjkzUGIyR3R5TDlabVdSb0w1UUFVWlpHUUs0N3A5bk9kMzloZGFaY3RhWFNjWFhkU04xWUhveW51cHdGQ0wwelVYMHk0U1ZHZjZ1V0RxeWJQRzQ2T24lMkJXdiUyRkFBNjUyblJ0WSUyRlRkcUpiZmpMZHFuSzRnanBTVmVuMWlCZjVHJTJGd0IzUmY3cWZPQ3h5Y2Fxd3FqZmFIOGNrJTJGayUyQjYxSzExQUMxa1pZSVQ2Z21CJTJCeHkyb1AlMkJNaSUyRkM2ZjdMRUdsWkNiQnIlMkIlMkJ1JTJGcXFwQkNqUDZjYnR4SHduNGxqclglMkZnY2tPajJFTWNDNmxLNnlUUktZbWtJb1lsNmdFOXhUN0w1SGhjVEpxTTFqSkNFampRU1FzSzdxVDNyZ2klMkZ1SjdQVERLUTMxUzVmMDNaUGkzU3JmR1A1UmlLRzZiZWolMkJRUHpCMENHJTJCdU5IdkI5VmVaeDlXdlpLQlg3Y0NmMlA4ak92Z2hnR1UxQjNCSGZQSGFRcmZ1RXQzREhrQUpha0toUDhBTzM3QSUyQmVkWDhpJTJCWVBPZW42ZE5wMnFLNXQ0SkZqczVIQ2x5b05KZlRkaWVVYUw4UyUyRndEQ1pFY1JORWMlMkJyZk9PS1dNVGdlR1VhRW9IZmklMkZwUlA4QXVudDJBYjNVb3JXcUFjNVFLOGVnSHpPUGh1b1RZcmRlc0pZZ25KcHRnRFRxZHUlMkZ0a1QxQzlYbkxQSXdvZmpMZHVKNmZoa2dMY1lzaTB2VlJmU1NSU1VXUmQxVWVHR2d5TiUyQlZyQ1NrbXJYS2xYbkhDM1J0dU1YWGxUJTJCYVRKS01UVjdKZG16WnNDdXpaczJLdXpaczJLdXpaczJLdiUyRjlEdiUyQmJObXhWMmJObXhWQjZyYWZYdE91TFh2SWg0SHdZYnIlMkJPUmJSTCUyQnNNVE1hU1FzT1NucnNlTFpORG5JZGZYWHRQOHpYdG5aR0MydEpXRXNVejhwSDR5QUU4WTE0cnMzSmZpYkpSUE1LeWY4QU1YeWUzbUt5aDFMVEglMkJyYTFweDlTMHVsRlNWNm1Od1B0Um5JYjVlOHdYbHclMkZ3Q2o5VlI5TjF1MTJQR29EOXZVZ2ZwSkclMkY3VWVkTjh1YXBjWHNIMWU3QyUyQnJBaSUyRnZWNk9QczFLJTJGc3R0Z0x6UDVZc3IlMkIzTnpIRnhtalBNbE5qJTJGckxUZFdIdGlOdGxVOUk4MnN4YTExbEFzc2YyYm1NZkE5UEZmMkclMkY0WEl0NTAxeTgxU3lrRUVqUlFSTUdFYU1WNUwwJTJCS24yc3E0a2UzajlPNGFzdXlMTlNuTWR1WCUyQlYlMkZ4TENmVlolMkZTMHU4Y0RrVmhZaGZHZ3hvZEdRRERaUE1jdWx1c1R6cHdyeU1UN21uZWglMkIwdVRWTkwxZSUyQnNvYjF0TG1tdEpsRWtiRlc1RkdGUjhOZlV6aTJpUSUyRlhOWHRMalVBWFdlNmhFM0wlMkJReUtIRyUyRmJqbnF6elA1b2swSDBiYXhnV1Z5b2RpNUlSVTZLQng3NEFTcnpPenNmTDF0Y0g2OXBwTXRkeE0waDQlMkY4ODNPUzJHTFM3MjM5SzFwR3BHd2olMkJFciUyRkFMSHBoVmNlY0JjeXJjNnZCRmRhYkwlMkI3bFYwVVBidDEyS0RueCUyRmxZWUd2cldLd1AxblRwM2tpcnNUMEJwV2djZGY4QVpESmclMkZGalNhblNiOHhDMnVyc1h0cEc1a3Q3ZGtWUkdhVTRnJTJGRVR5JTJGd0JiSXpjNjB4U2V5bHNncGhESmVhZk50SVklMkJucVJFZkN5Z1ljV1BtVjE0eDNxa3FRRHpBbzRYJTJCWXIlMkIwTUU2aCUyQmlkWlpJbWpNOTBGTFF6UWo0MEJGTm4yJTJCMVg3RFlrZDJ5aSUyQnJITkloOHVYYkxwN3lMSmRUb1piWkpEWDFFVTBOT1h4Q2VMOXRmJTJCSjRQaGJUTHlhNThzWHFxdDNFb0tsVjlNU29SVU1uOHNzZjdYSCUyRlh5RCUyQmNmS0Z6b1duUmF0RnFVVVUlMkJuU0dTR0FzQmNGWFphRmVISlZaRHUySE9uM1NlZTlLdDElMkJzQ3g4eDJ5JTJCcGFYYWJCMlR4SDhwUDIxJTJGWndBbnUzVlF1VjFDQzJpVzljeCUyRndDa1MyOGtNdEE1ZEtMSEwxJTJCMDBUSnlaUGhrJTJCMW5TJTJGS041OVowR1NObm82eUk2ZTFWNHYlMkZ3eTV6OXB2OFlXajZIcmNmNlA4MzZFV21paUhTZml2Mm94JTJCMmt3SDdQMmZ0TGsyOHV4cmJlWFlMaFlYVjdnTXp4a0UwSXFQaXFOcSUyRnk0Z2IlMkJTazdQTmRYMW0lMkJIbXFheXRKJTJGVHRUZHglMkZCR29TdTZzd1pxY2o4WWJDblJtTTk3ZHJLeEtYY3NsdTd0WGIxJTJCU0JxJTJGd0NTelpLOWMwNnh1TlV1dFN0a0JsczVJRmtBSUFNb0hxVVVmek5Sa2JDUFc1WHM3MHJaY1Z0TDAlMkJ0Q29BRlZjMW9LJTJGd0FybmkyUklTaGREMHJVOVowZzJVTlcxRFI1SkxHJTJCaXJSbFF1WGhtcDFaUDcyTSUyRndDcGg3NWcwSzJzcmEyMUc4Y2g1YmFHSlVwdDZ5QVJ1dkw2T1dFUWsxZUpycTlzNTVZTHhCenVHaEpFanIzTEt2eFNxdjdXSVNhbnEyb1FSWEdyeXZkMk10Vmh1U1E4YU5RY2g4T3lOanNxRWxoSzFoYmNyJTJGY3YzSyUyRnlWJTJGeWNSU1FCbVVpaWZzZlFNNkZwZmxqU2JyUjBtQ3kzRWpEbERJek45c0ducGhVJTJGWiUyRmxiSXJxbmwlMkY2ak0zQ2IxVlJxT29VODA3OFhvT0hQSVNJaVFDZDVja2dFM3R5UzRTdEs2eFN5JTJGREolMkI3SHFzZU8lMkZZVncwVzJ0aGF0cDEwaGUyYjdZSDIxY2ZabGpQODZmOEFEJTJGWXhPNHRiTzRzbzRJN1pVdkc1THBsM1Bzc3ByVXdzMzkySkQlMkZ1dCUyRndDYkFPaDZzTHVVNlZxWU1GNGhLUnUyeDVEckZJRDBZWTdyc2g0dE1uMDYlMkZrc3BqempuaWFTMW5RZkRJRSUyQkpXWHdkYWZFdjdPZDB1Z25tTDh0bVlpcFdFT0Ixb0dXcCUyRndDSDVaeTRob1Q5V3VVNUJUemo3RkhwJTJGZUllMyUyQlglMkZBRHJuUiUyRnlzdlJmYUhlYUpJd1o0UkpHbzhRRHpRJTJGOEFBeTVPUFZCZlBOeGJwTXBpZllxYUJ1NEl3RllXbHg5ZkVJSlU3bG1IN1MlMkY4M1pKOWUweDdLOXVuUmc4YXpNa29IV0p5U1ZSJTJGOVlINFclMkJ6aiUyRkt0dkZkYXhCRExRS3pBVk8yNDNHJTJGOEFyWVBKVVhiMk52RFp0ZHlXeGUzQjRtZUNRJTJCdEczN0pramI5bGFmYVhIUlhsOXEycjZldG5XSjdZeHgyOGglMkIxVU55TWp0JTJGbEg0bXlYNmxwMXBvUG01N0NJRkxHOGppa0NzS2lzcXFYV25jYzIlMkJ6aExaVzBPbTM1aEN1TGlDZVNnSUhGWTY3S1Q5cmw0WWFWNjNJd01WU2FrZzFwdDI3ZUdSdXp2clRXSUxkWWJubGNJV1hTZFFjOFc1cFhscDkxJTJGTElQOTFNJTJGOTRtRzl0Y2ZXM0FRMTR4Z3NQSDRjNFpwJTJCdHo2SHFOMnJKNjFuTkl5M2xvVFRrQTU0eUlmOTF6UiUyRmFpbHlSTlVpbnBWMGlYcXl5eHclMkJqZFc1TWQlMkZhTjFpUGRxZjc0ZjhBNUp0a2ExWlo0TFdZeHN5U0twYUNSVDhRSSUyQkl4a2oySHc1S0xlNiUyRlRzVUYlMkZwMXdzbXJSUmsybDBRQUw2RmZ0MjkwZyUyRnU3dVA3TG8zOTVoRnF1cWFMOVhabW1XQ1J3eVNXVGdzOE1nRzZPbyUyRlk1ZlpiQVVoQyUyQlo5SnNmTWwxU0tZVyUyQnF5UVJUMkRNZjNVdkplVHd0NE01JTJCSmNoS3lyT3I2RDVnUXdUUUVwRkslMkZ3RGVRdjhBeW4lMkJaRGslMkIxR3lqMWV3MFNhQzRnUzVudG1DdFgwRUxRdFFBTSUyRkVjdjVGd3YxYlF4ciUyQm5ocjRvbXMyeW1QNnh1Q1N0U0lib2Y2djhBZHpZT2FHQVElMkJYZFRtMU5kTGpqNVNOOFFrRzZGT3ZxQnUlMkJUalRyUzJzYlpMQ01jVlVta3BGR0xuN1JmJTJGQUZ2JTJCRnhUVG1lMTAyRFR1SUxJd1pwS2tzVyUyQnp4V3RXNDElMkZaeVUyWGxXNDFIaGNhaHl0T1FKWlZIS2FYdyUyRmQlMkY3clklMkZ6dmlBcVEyMWxkWHR5dHJERzBrNTI0cUttbmo4c083MzZyb05tTklsdGZWdjdoRmVhTW5rVXFUd3B4TkEyUzJNYVQ1ZXRTOXc2V2R0RXZ4MWI0MkE3U3ltaCUyRjJDNXpUemIlMkJadW4zc3dPamFjR1ZLd3JxTWdvYWplaUpTciUyRk9URFZkVlpQWWEzcE9qJTJCVzd1MzF1S0t6dVpHUDFkZVBQMUl6MVVvdnh0SiUyRmxZVSUyRmwlMkY1aE90eVMlMkJXcmxpczFHbTBweWZpUjQlMkZpOUt2N1N1bWNydk5ZbnU1RGNYSDd5VG9hbXJmU2Y2WUw4cmF0TFolMkJadEp2b1Q2YndYTWJFanVDd1ZoOHVKYXVQRnVGZSUyQnglMkJZSjROTWF3UWlPRnp5Wk9sRFg0aCUyRndReVFlVnRBbjFCWTlSMVFOOVdVMXRvRyUyRmEzcUdZZUdFM2xuUkxQVmZNMTlMZEF5V2tUdGNXOGE3eE9HYXExa0d6N2slMkZBTTZtb0FBQ2lnQTJBeEo3bG9qbjcyd0FOZ0tBYkRMelpzaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5SHYlMkJiTm14VjJiTm14VjJRenozcDNQNnJxS2JGS3d5dCUyRmtuNGxKUHNlV1RQT1Zmblg1Z21zdE50ZEJ0bk1iYWp5a3VYSFgwWXlQaCUyRjJiJTJGd0RFY2JyZm0yNE1SelpJNDQ3R1I1OXc2cE1mTnlXbDdFZEQxS00zQ3A2ZHdvS2xkaiUyQjF6SEUlMkZSa28wcnoxclV0ejlTdkxlMmxtMkhwOGpDN0JoV3FWNXh2VWIlMkZEbm4wMWpQRWluOHBIZ2NrZW1YbXNUYUhjeEFOdzA1bzU3TzdJSUt4bGlKWWxsJTJGYVJUJTJCODQlMkZzTmtJWmhJa1NqUkRsNnpzJTJGd0lqSkNYRkhrYjVncDMlMkJhMnIlMkJiZFB1RXZZTFZiTFJwaUZMMjdjMkV2V2tqMCUyRmQ4djJWcGtHc2ZOMnAzS3JhM1YyWGljZ0VzUWVRSjNxU05zN2QlMkJrZE8xclNiS3cxTGhOJTJCbGJSWFZKS0ZaeXE4WlYzJTJGM1lHSExPRWVjdktGeDVUdlRMRHltMGlkdjNFdmRHJTJGd0I5eWY1YSUyRnN0JTJCM2xwSFVPdnN1YTRpTndiV0NydUhLJTJGQjBxTjlqMHpveSUyQmFyVzQ4cjJPcTNsMUxlMnNTaXp1R2txazZ6Z1VWWE1kYThGJTJGd0NEVE9PMk0wMXJJczBYQ1JRNGtIcUNxR25abDc0TmdrVGxNcVNPSVpwUFZOclhqR0c4UXZmajJ3WHpTeXF6MWVPJTJGdE5TalFNOHNWdWJoRmJia0lwUGlJJTJCVVI1WWNhM3ExN0lkUG10WjJqczd5enRyaU9OTmh5QUtTY2lQdE1KVWZJWmFYRFdMJTJCcmEwamNxMFpZQVY0eUFxNm12OHluSmY1WWV4MVBSanBVc2ZPJTJGMHBudUxKV05QVWdrTlo0bCUyRm05Tmg2dkglMkJWcE1SYTJ1dkJjWGVqMkdwMnJTQzV0SkpiT1prcVc0diUyQiUyRmdZJTJCeCUyRmVKaHRCQjVzT2kzMTNib0xhOWloTWxvM0VCNUNsR2tVTHklMkIxNlhKazRyaGxaYXJCRkFiWmxqdHJTNVRnJTJGb0lGNGZ5T1QxSmpiQzFMJTJCYlNib3d5TXd1NFdyekpyeVg5aDFQUXB4dyUyRkZXRlhOdXQ5UEI2c3JTNmZybHFJNEpaSEolMkJyMzBiQ3NiT2Y1cGh4MyUyRkFOMVQlMkZ3Q1JnUFFidHJlVnJFRnJXOGdmbkRVMGRKVVBGMDl1bkhEJTJGQUZleWdqanZiaTJoYVRRYnB4Y1hscEh2THA5eDluNnhDbGZqdGpYaTFQMlAzYiUyRkdzZUU5OW9sOXF0eWpJS2FtWWxrdGI2TW4wTDVRS0o4WnA2ZDN4JTJCSDR2dDhPRCUyRnZjaVRYUFphWiUyQmtkcDUlMkJndDE5WWFkNXAwJTJGZTB2VTJZOFQwTlBpYU0lMkZ0SiUyRnV2T2o2bGNHeXNGYVJsWXhKV1VqZmtVWGszejVNTTVwJTJCVjJsM1UycFBkYWxGSEsxc09MeXFReFNaYUZPZERXT1Q3VyUyRjdlVFR6SzhVZGxjeFJFaFhCVGYlMkJkeldnJTJCN0p4TmppNzBIblR6JTJCNTFHWHlyckZ4YWFwRDY5bmZjUnFTZnRxeEhMMW9qJTJGT2pQanRRMEdOWUNmckNYV2kzUU10bGVsaHlqa1liRmZkdnN5eDRNODdXeTZ6cWVtVHE0WDlLd1FubWVna0slMkJtZiUyQlNpNUc5TTFQVmZMVXQzb2QzQ0pJR0RFUVM3aUtVRDRab3Y4JTJGanlFcnFycnVQTmtLNTglMkZKTjdTeDAlMkIwc0RlM2swazl4QTZKQkpBQ0dxd1BIaUtwOFM4ZnRzMkYwbXJEUzNudWJQVGhINlpMYTVZY1FzbkJ2czNrU3NDbkplWEp1SyUyRkIlMkZ3QVltd1ElMkZyWGRqRXNRUml6aHZqS0NyVXA4SWY0dVclMkZ3Q3l1SzNGczg5M3AxbmV6ZlZkZURDT3htSEZpOFpIJTJCODl3U2VCalAyWXVYJTJCVkZpWWdnQTcwUG10OVF6ZnlqZHhYZWlQZWFZM3JOWXQ5WmpkS1VrZ1AyZ3lqN0w4ZnRMJTJGUGdUejJ0dUxkSklUNmNOMUpGY3h6SjJVN1NiJTJGcyUyRmE1QnNLZkxFTXZsUFhieTJzSkk0MHVGJTJGMGl6VnVVY2IwNW4wejNna1RsdyUyRjMyMzd2SGVkZFhONXBFTWRuYm1PeXM0QkZjeTBxRGNGNkdKYSUyRndERmFjbXlYOFB1MlIxUU9pNll1cGFiZDJGNzhkajZ4akxWRlVscHlTYUh3a1VmN0YwJTJCRElycnZsNmRyNDJOMGVPdFJJSHM3bGRrdjRCOWlqZjh0S2dmQiUyRlAlMkZBSFgyOG1QbHV5YjBWczdPZFRMNlNTUmVvSzglMkZUWnFOJTJGcnFPUEwlMkZKd1RxZGhGcjltMWxxVWhqbmhjbTJ1djhBZGx0TiUyRk1LZjdwYjl0UDhBWnJqVmhXSGFIckVXcXhqVGI5Z3Q5R0tReXRzWHB0eE5mMnNsMzVkM0owanpuSmJDb2p1UWxSMjZjVCUyQnRjNTVxdGhkeVhjeXlKOVg4d1dmeDNFU2JDNlVicmN3ZnpTOGZqZmolMkZBSHlmdlB0ODhOJTJGS3VxM0YzcTFocUJJRXljNHBXWnVDa29Bd2NrOU1BNTBWUEpWJTJGTXEyazBUem5mQ0pRVW1QSm9tJTJCekpHJTJGeGNXOXQlMkZ3RFk0UTZjSUxhNlpZMmVLUndzbHY2Z29hRGZqeSUyRmFLNGYlMkZBSmxlYWRNODBhOHQxcGNaOUdDSlltdUcyTXJEN1RBZnNxdjJWJTJGbXdyMFd5dU5YVXclMkZWeGNpMSUyQktMdCUyRncyM3dyZzZxR1ZhbnIxdnJLMnQzY3NJcnkxYUVTQmp4SkVZWU9RZmY0Y2p2bTN6TGJwWlhMV1RHQzV2ciUyRndDc3dSamZqQkdvQzh5ZmklMkJJakNQWDJ2Tk11JTJGcVpEUk5HS1NBZ1VxeHFncUtydUYlMkJINHNqc3lQUElaWlNYSjdrbmZHMWU5JTJGbHhyZHQ1a3NicWRTRnU3ZU1MY1c1TzQlMkJFMGNWNnh2bkY3NXVWemNiMTR5eUJXNyUyRmFPMktlUzlSdXRDOHlXZDdETVlMZm42ZDNMJTJCeDZEN1NMSjdZaGRrTmQzVWtSRFJTWEVyeE1EVUZHY2xUOUl3bmRDdHBXcno2Wk44TXNrY0RzR2RvanhramNmWm1pcCUyQjJ2OEFMJTJCM2lXb3lTZlhiaUhVbUZ5MTRmcktYcUg0bkwxNHpLJTJGVnVYN2NiWUVlSldEUFFWcFUwUGoweDZ5cUxMMHBKVVc0dFhFMW81TzlTYVNSYmVQMjhDb2IxWjFUNnZQS3p4amVOU1NRSzlhViUyQnpuWExmVXJkdER0OVQxVSUyQmplUnhwYTNpTXZGNVY0MWpjZyUyRnRyeCUyQkxPZDZWYmFUcUpsUzdsTWw1SXJpM2hId1JpUWo5MjBzbmh6T0RwcFdzaWk2emNHZVNaZzNwbzNOU3klMkZEJTJGZW40SzlWNTQycjBMeWhlYVhjbTV1YUNDV05oeGtsJTJGdkNsT3FjdnM0cnJuNWcyZW5JOXRwS2k0dXFsV2NrMHJTdnhQOEF0ZjdISVRhenBjY3JpTmFMR0QlMkZvekduQlZJSmtaUDI2MSUyQkZ1V0U0anVMcVNabzJwYkpNanlpdEFRZVZQd3JqeGJVRTAxcmV1WEd2Q0tQVVpKMkNzMGlxZ1VnRnR1bnclMkZDS2ZEaFdMWFN6YXlXNzNqeHVHRWxXZ0pVYlVvU0Roa0xjWEVqSkRTSnFrb1NkJTJCSDdPR2xoNWExSHpET05JaXQlMkZXdlpFTWtKUmxRdEdsS3NDeFZYNCUyRnklMkZhd1d0SUxUTFRUbWVNbWJUcm0xalhlMG5tTUxPd0gyblpscld2JTJCVmhsQmI2THFsMDl6cGVtcmJ4MmNKZTVXTnFpUmkzRUtyZnlqJTJCWlI4V0o2eCUyQlZQblhRcks0MWk5c2xqc3JVQjVwQkxHekFWQ2dpTldMTnVmczRJOGg2aHA3MzhzTnhSQmV4ZWk1Qm9CSldzY2clMkYyWHc0Vlpqb01sbEZieDYzNVk1Mms5bXZQVWRLYVJqSElGJTJCMDhQSW5oSlFWNiUyRmElMkJIT3E2ZDUlMkYwRzd0b1p6SyUyRkJ3S3pCQ1ZyVG8zR3BRJTJGNjJjWVcyMURRJTJGTVVWckZIJTJCNXZ5SW5QU0lxemZFMWYyYWZhd2ttdHA0MmtsdDBmNnV6dUluV29EcXJGUVJRamtNSlY5UTJtczZWZml0cGVSUyUyQndZViUyRndDQk5EZzJvenpyNVkxdlRJN1Y5TDFQbmJURGs4RTRRczdNMUtLSEJEcDlHVGZRZk9kb3NTeHc2dHhrcDhVTjBEeEJHMzdXTmVhMDlVelpCTlklMkZNM1NmTGNWckxyREl5WFpLd20yYm1XNDBEc0YzJTJCRmElMkZGOGVUVzF1b2J5Mml1N2R1Y015Q1NOaDNWaFVZRUsyYk5YTmlyczJiTmlyczJiTmlyJTJGJTJGUzclMkZtelpzVmRtelpzVmRuRSUyRndBOXJLWVhtajZqVDl3MGN0dVQ0T3BFZ0IlMkYxbE9kc3lPJTJCZCUyRkxVZm12eSUyRmNhWHN0eHROWnlIb3N5Ym9mazMyRyUyRjFzQjVPUnBNb3haNFRQSUdqN3BiUGwlMkJOUHJFUmklMkZhRzZIMzhNa1BsWHpoJTJCamhIbyUyQnJtdW5DcXdYRkttRG1maVNSZjI3ZCUyRndCdjlwTUpCRGNXTjdKYVhjUmh1WUhLVFJQc1ZkVDBQJTJGTldCOVJpV082YWclMkZkeWdTTDdjdXYzSEtwa3dJbVBjWG9NMktHYUhoeTNCM0JIZjNoNkI1cXNsWFFvb05PVm9mMGE3WGRpNmZEeEJQS1FRNzh2VDM1eE5sNkZyMWw1czB5WFNOWlJIdWpIeGxSaHRNdiUyQiUyRkU4SkI5ciUyRkFJZklMbzJwVDZYZkxkOG1taUtlaFBBekU4b1QlMkJ5dkt0T1BXUCUyQlhLdnJhZlNwbDFYVDJMNmV6ODRMcUxyRTFhOFdIN1BIN05EbGtNb2x1UGlIUmFyUnowNUYlMkJxSjVTSGYxQ1QlMkJaJTJGTGx6NVd2dlRVbVhUNWpXMm5QJTJGRUglMkZ3Q0xCJTJGdzJGYXVEOFNuNmM2N2EzVmg1eDBwN0clMkJSZnJBV3NrWTZFSHBMRlhwJTJGeHBuTGRjMFM4OHQzcHRyaXIyN21zRTNabEg2blg5cGNtUjFISnhGUzN1QTRvZnREQmx2Y3oybHhIYzJzalF6eE1HamxUWWdqQ1ZHNk1oJTJCV0Q0WlJJdnYzR0MxWjdwZHhIcmFOSkNWaXVrcTEzYXN3VkFPOXhDVyUyRjNVZjhBZGtmJTJCNiUyRjhBVncxdDVOUGtLYWJlM1N5cUtHMnVJcXVZRFg3SmM3ZWkzN2ElMkZaJTJGYXptOXRkVDJkeEhkV3pjSll6eVE5UjRVSTdxdyUyQkZoa3dodkRxRUNUYVpiRXh5SGhQYnFLbUNZaXZCZiUyQktaUHRSJTJGOERnSWtTRHhWSHFLJTJGU3lCRmJqZnZSOGsxeFk2Z1Z0TGI2dkpiVldaYmh2VkxvMzh5QWVtWVpGJTJGNFhDalcwTWNYOTg2JTJCWDcyVWVtNlY1NmJla1ZBWUx1MEQlMkY4QUpTTCUyRkFJdGp3N1cwdXRWZ2owJTJCN2s5RFVMYyUyQm5hU01hRmtydmF6JTJGOHlYUCUyQnBncTAwaXp0YmthVmNQOEFXQmVyNk56RXdvckxXalJzb0o0eVJ2OEFFanI5akdPTURibjV5M1V5Sjh2Y3lmeUhwbDFwdWh5MzF6RUUxZTljSmZLeFhqSzhKTWFUcWZHWkNydCUyRk45ckNYOHdkYSUyQnF5YWJBR0FNODVhWUE5RlVjViUyRndDR3laWEVsdmIyMFZnSGIxTGVOREVLbXBLRGhHUyUyRmZPSyUyQmNyaHRVMUc4dkxaJTJCWXN6Nk0wUSUyQjBuQmg2Y3dIJTJCJTJCNWFmN0Y4c2xzQUF4RzV0a2VzVG02OHNhZGRvM0diVFo1YmIxQjFHJTJGclJmcnhHVFc3THpQcGNyYWhBTGZ6RHBpcjliaUk0dEpFU0Fab3dmdEo4U3Z4JTJGWSUyRjFjRDZWTWIzUk5Uc1NoSm1oanU0Z1ZQMm92dEglMkZnRyUyQkxCVm5iNmI1ZzB1eDFKR1dEWE5EajRTRWlvbmdRY0dqayUyRjM0aFg3TGZzWUJ1a3QlMkJXYmE0Z1dIV21qJTJCc1dkcEswRHdxeSUyQm9Xa29uSkUlMkZ2SFpPZk5jS2Rhc25rODAyODhUTjZFRXF4T1hOV1NPSmlTN24ycDhlQjRieVN3MWlsdjhBdTRPUWs0N2tLbyUyQkx2JTJGTFg3V0s2anI0dTlVZWUxakl0bmRpSWlhc3l2OXNWJTJGbDN3V0FGWkJidllhanFzViUyRkRTUDF5SVRQVWdTS0g5U1NpblljSVJ3JTJCSDdUU0pociUyQllPcjJzT2tXbW5oSFNLNllpUm9sRkY1QSUyQm42bmdKaWY4QVd5UDJNTDZkYmlSSSUyRnJxc0FJM1NSQXNNWSUyQnhIS3JsR2hmbCUyRmVmQiUyQjglMkYzWGdYWFlwcEpHMW0ydW5rYmo2T3AycFVTS1ZBcWtzU05zaWY1TCUyRkZIOXZIb1Vscnl0ZHREQ2dkbVY3ZDVJMmJvVSUyQklOR1QlMkZMaHByM25MVEtKOVVUMTlUQjR6Tkh0Q2UzSmozYjJYSXNzcDFZOGJVZkZPUXNpeDdTQ1NsQVhwVG1qNGF2NU9uc2RNJTJCdXpCM1ptOU9XYU5HRDIlMkZNZ1JUb2xQM3NYUDRadjkyZnlZaTZvSVREVnJHMjh4Nk5CZUJ2cVdvV1MxaXZTZUlpa1U4akZJJTJCekxBNiUyRkduJTJCJTJCM3lGYXExcGNYaXgyOFpVR2kzVTJ3YWR4JTJGdXppQUVXdjhBcSUyRkg5dkRMVjdUelhlV3JxYmFXTzRWaEhlTkh0RmRDUDdFaFg1RDR2OSUyQmZid3BDM2xpR2d2SW9WZFNxdDZwTFBHcjBwVGolMkJ6OFh3NENVa0VHaWw3UndSdTlaendqUHg4VVppS2VQU2h5YiUyQlJmTWRoSE0ya0xFViUyQnNEbERMUUZuY1VDeGNSWDdXRUYxRENzNjN6Q3M2cjZjMU5rZW5jcjdyZ1hTcEZzYjV6Q0ZvcmVwQzlQaVVFZlpyNERBRFJWRCUyQmRkVWtQbVBVNGxVZ1ZOdE5HNHFEdzJCb2Yya1AyR3lLMUxFQ3BZJTJCQXFUblVGaHN0YTFDZSUyQjFHM2ludVpDcnlTc2dxd3FGTlJrd3U5UjhtJTJCV0l3c2NFSHJoYXJEQkdqU0g1dFQ0ZjlrY0lvb3A0ZGE2VnF0MkdXMHRiaVFIYmlrYmtINTdVd0hORkxiU3ZiM0NORkxFeFNTSnh4S3N1ekt3UFFqT3UzJTJGbXElMkIxbUZvMUMyTm1GTWpoVFFMR3UlMkZLUnR1bVFmVSUyRk1XaDN1b1RYeDByMXBKZVBLU1dTbkpsVlU1bFFOdWZIbmhReG1PWXhrbFNQaUZDRHZVWlFLVUlwVW43SnIwJTJCN0Q4ZVlyQlA3blJiVWY2MVclMkZobVBtdGtCRnZwdG5FZXpDTWtqNzhDcFJaT1k1dyUyRkJtV2hCQ2pzZXVTeXluMHBJcElyMkNTcjJndGJZVFF0NmF5bHVmUHA4UEJXYkNaUE51clJPc2tZZ1ZrWU92N3RTQVZOUnRnMjc4MCUyQllQTmQ1Q2RXdVJKSEVXa1dPTkZqUmFpaCUyQkZBUGxqc3FMZVJyVmglMkJqUXQzR0JSb1hCQktBZkZ3YWclMkJMSjE1QjE3eWZlYWxFMnRhVEhjWE1HNjNFcSUyRnZiWUwlMkZ2eUglMkI2ZUZLJTJGM2lKeVQ5dkFYa1B5Z1BORXVveHgzS1EzVnJBSHRZV1A4QWVPeHB2JTJGeFdxaWpNdjJXWk1MZFM4dkJMeDRwZzlqcVZxVEZKSXZ3dXA2ZnZQNWxQJTJGRExpbGx2NWklMkJTdFB0TDg2N3BFRWNlbTZoeGtpdkxXaklrJTJGZXZIYjA1ZnRaRjlPa2Q1RXQ1bWF5dm9XRXRyZFJtbkNVZlltaFlmemZ0cCUyQjNrMyUyRkFDNjh6TGZ4JTJGd0NGZFd0MWVFbHJiVW9XJTJCd0dJckRQR3Y3Q3lVJTJCTGolMkIxOGVJZWF2S00zbHE3V3FmV05Pa1lpenVYRmVOZXNFOVA4QWlYN1dOYnFDbmNmbTJmelJvVW1nNnpFcWE3WlBEUFBDdjkzZVFSTUMwMEElMkZhJTJGWmFXTENIemY4QWw3b09yYTViNmg1S3VCSGUzcmo2MVl3ciUyQjVYbHUwJTJGTCUyRmREZnp4JTJGOFF3cHVwNFZXQnJPUmhmVzdpUzBZa3JKYmtkUkxLdjJvbSUyRlk0ZmJ6c3ZrWFU3ZldOSGp1M2poajFaQUk5VUVLaFNKdkVtZyUyQkYxJTJCUEVoWGdQbSUyQjk4eSUyQldyaVR5eHJNMGlDTUJvNVZWVzlhRG9KSVptJTJCTGlmNWZ0UnRoTjVYOHp4V1htJTJGVFo5ZEhxNkhIJTJGb3oyejFlTkxkMUtxNFR2d1klMkJvMmVsJTJGUFhralRQUEdrTlkzbjdxN2hxOWplcVBqaWtwJTJGd0FORSUyRjhBdXhNOG1hem8lMkJxJTJCVjlVdU5JMUtMMDd5MlBGbGJkV1UlMkZabGpQN1VUZnN0aWg5Snk2ZCUyQlZWM2YyZGphM2x0SGU2aXBlelMybXJ6QUZmaCUyQjJpTWYySyUyRkUyWGNmazVvam9UWjMxMWJ6MUpFakZYRyUyRml0RSUyRjRsbmxoM1VTTEtDWTdsU0dMUTdVSTNEQTltejBMJTJCVlA1d0xxeGk4cyUyQmFaUkhxSXBIWlgwaEFFOU5samxQYWYlMkZLJTJGM1olMkZyWXFxYWwlMkJTJTJCb1hiMkVZdnJhV0cza2N5dkxHM0lSdXdZJTJCa2dQRlcyUGZKalolMkJScnV3dUZhMjFpUllGQUNLRktzS2Y2ciUyQm1mJTJCUmVUVUR4eTZZcW8yMExRUXBFOHJ6c28zbGtweWI1OFFCaTJiTmlyczJiTmlyczJiTmlyJTJGQVAlMkZUNyUyRm16WnNWZG16WnNWZGxFQTljdk5pcnpiOHp2SWY2YmhPdTZSRVAwdGJMJTJCJTJCalViM0VRJTJGWiUyRjR5cCUyQnglMkZQOWpPSGFndnFXc013JTJCMUVUR3dQV2gzM3oxem5JJTJGekw4aHFFdXRmMHFQNEpSenZyZFI5bHdSJTJGcENEdyUyRjM3JTJGd2VSbkd4VHROQnJlRXh3NURzRDZTZW45RjRncHBodG8ycHJZU1NRM0tldHAxMVJieUFpdTNRU29QNTAlMkY0WmNLNVl6RzVRN2VHUEVVeVJwTXlrUlNFaEg3TVYySXpHQWtEWTVoM09TRU1rRGp5Q3hMOGJlYVphZ2x4b09weFRXN3FMU1drbW4zY1gyZUozNG54JTJGd0FwY2xNc2VuJTJCY2RJZUM0UUNaUVBYakgya2Fud3l4ZTJSalQ3JTJCMmUwYlJ0VkhMVDVTV2hsJTJGYXQ1T3pyJTJGeFd4JTJCMnVKV3R4ZTZIcVN3OHd0eER2QkwlMkJ4TEdlZ1A4eU9NeWNlUUViY3VvN25uTlZwWjRKbU10d2Q0eSUyRm5EOWJFTlUweTgwQyUyQmF6dVJ5VHJISVBzdW5aaCUyRlRLaWw0a1NJYWolMkJHZFoxSFR0TTg0NlNYVWVuS3YyZ04zZ2xwMSUyRnlrUCUyRkQ1eU85czd2UmIyU3h2VTRzaDNJNk1PenA3Tmt5T281T0ttU3VHVU12UTlNTWRGMW00MFMlMkZqdm9BSFVmRFBBMzJaSXo5cEdIJTJGRElmMkd3anQ1UWgzJTJCdzMlMkJkY0ZucmlyMEdXNUt5eDZoYXY2bHRmcURIZGRXNURiaTFkbzVWJTJCdzYlMkZ6WkxQTGJRNm5QOEFXcnBBYnkzb0pHSTJrWHFrcmZ5eXFSOXJPVTZIcktXSHEyTjhHbDB5NnA2Nkx1MGJqWlo0diUyQkxGJTJGYVglMkZBSFltZGE4cDJpMnRrOHNqckk3bWlUSVR4a2olMkIxSEpRN2h1SiUyQkxKUjNLM3NudXEzZm8ycnVvcVFDM2lkdnNnRCUyRldwbk1KJTJGSiUyRm1lNE1zcTJqQzl0dVVhWGNYRVIzZHJKMWphcEg3Mk5XJTJCRm1YJTJGaXQlMkZ3QjVuVGRJa3N5elcwYyUyRnJ5eFZaZ3pCbUNzYTRlQ1pBS0hESVdnYlBEdks5anF1aDZ4YVclMkJ0VzgxckRMNmxvelRLYUZKUVZBQiUyQkt0Zmh3dnM0N215dkwlMkJOUWZUczJrRDlVSzhnUUtsdjJYcDhTdG5SJTJGelExR1cwOHUlMkJsWk8wZDNkVHh4UXNoS3NLSG03aGg5amlxJTJGYXppNk14RWlJNVlPYTNOeXhKTWpWcnV4JTJCSXJsY3RtUTNUUzkxRTNqQ0cyakhJMDlSMXFPZE9nRmY5MXIlMkZ3MkNMS0ZZeHlKQklGWkpPd0hnTUMyTnJ5RzN3Um5xNTZ0JTJGWmh1c1ppaWh1N2NNV3Q1aXIyenB5aWtVQVU5VCUyQlljdVdSNXBkUHFpYWNRcldxWEN6UjFVU1ZCQWIlMkZBSFlwJTJGbnd1dGRWaHRkVGElMkZnV1ZCT0FrOEJjTkc5QlRxeWs0YzZyYzJkeGUyRjNjMmtjS0pHSTdxeDRrVWpweVIwQjZWciUyRk5oQnFjOWhhU3hwSEVSYVhSYVdJdCUyRnV2Y29UUmE3NVBseVFuJTJGQUpadllJJTJGTVVTMlNORUxpVlRFeWdVam5WVzlPbGZ0SThoVldWc25TWFZ4ZlRHUzZsYVNWaUNTMndvZGpzTnM1JTJGbzhyckw2OXF3ZDZwSXJxQXclMkZkJTJGWVB3OU9tU3VhNTFHVko3NjJzd1FYTENEMUFpcnlOUXJNZmkyJTJGeVZ3eEtrSWpXNyUyQmV6alI3UFRwciUyQlVidjZXeVVIOHpmYTZkdU9FUG5qVDdTRVdtcnh4a1NYYXRhem93QTVLWSUyQlNjZ0Q5cUlyeHdRM21QWDdFZXRxRmhBdHFQdGVnenlTQWV3QTQ1RiUyRk1IbTFkY1JJR2pNZHZDJTJGcVJJS2N1VkN2SjIlMkJSJTJCemdsTFkyeWhqbkxhRVNmY0VxdWJ1clc4TTVIcHpLdklyMUZhRGw3OWNSYlJyNlM4JTJCcjI0NUdDb2FjJTJGQ2pLcDY3JTJGd0F3dyUyRjhBTDNsaTAxcUJMZ1BKTzhmN3Q0d1A3cyUyRnNFOWZoT0hlciUyQlZ0ZmdnJTJCdmFiY0plMUZKclBqd1pWVVUlMkZkeSUyRlI5bGx5SUZpeHVFempLRWpDWW9qbUdNNmphYWpaMjhSakJpRWlzSnpVTFRpM2lTS1Iwd2JvSGtUWGRXdDIxT0xUNXJ1MkE1UmxOMWs4U3JzVldUJTJGQUdENWVuYTFhWEElMkJvNnBEJTJCOUoyV2NlbkwlMkZsQkpSOEQlMkZ3Q3JuU2Z5ODgwVyUyRmx5emwwbTd1Slp0SlIlMkJWbVhTc2x0eU5YaFlEN2NQN1NjZmlUJTJCWERYY3hvc1IxRDhydlAycVdVZGxaYWRIWlc3a1BjUGNYRVllU24yRUtSOCUyQktKOXJoJTJGTmtSdSUyRndBcnRjMDI2ZXkxRm9vSm85eUtzNElQN1N0UWNsejBicmY1amVYdEtoUjdlWVgwc2llb2lRSFlMMjlSdjJDZjVUOFdRN1clMkZNaiUyQlpyT0tkMHQxQ3QlMkI2ZURrN3hNYWowNUNhTnhiJTJGVndFZ0N5MjQ5UGx5RUNNZWZKNDIzNWZYUTYzVWYlMkZBdCUyRlhDN1Z2S3Nta2ZWN2lhYjFkUGxJU1c3alRlRnolMkJ4SkhXb1BnMzdlZFE1a3lOREl2cHl4JTJGYlElMkIlMkZRZzkxT0I3aEZDdXJJc3NVcThKb0hGVWREJTJCeXclMkZVMklJSXNNTW1LZU9aaGtpWXlITUY1ZyUyQmhDTmlwY3lGZjNud0Q3Y0glMkIlMkZvVCUyQjF4JTJGd0IySiUyQnppTnlXMDElMkJOc2VWdE1vTWM0RzdWSDgyVENieXhmV014dFVNbG5ESVByT2xpNTVKSWglMkZ3Q0syWmVNcXRoWVlPTVZ4Qk5iJTJGdTJISyUyRnNsNkpVN1hscCUyQjF4RGZiVCUyRmRlRmdtUGtuVzdxMGVDJTJGc1olMkJPb1dUY2s1ZnRSbnJHOVB0SWZzdG5hdFkwaXclMkZNZlE0JTJGTVdoOGJmWGJkU2p4bmJteUQ0N1M0JTJGNWt5NTVnV2NhWnFEUHAxeVpvNDJQcHo4U3ZJZVBIT24lMkJUZk8ycWFYTUwlMkZTSGlQcWNSZjJNOWZUWWY3OFhqOFhJZnM0cW9Xc0dzUTY0VHBwJTJCbzMxekdiSzlXWWZGRThaOVRjZUk0RlA5bG5wTmJXRFZkR2l0OVJSYmlPNGdUMWczUWtxQ1c5alg0bHprc0UxejUzODJEVTdXekVLb3FxNVVWQW9PSWVWOXVSJTJCTCUyRmdjN1JER3NNTWNTJTJGWmpVSVBrb3BqMFV2SHRRJTJGS25WOUgxRjlYOHZYQ2FqeVl0OVR1UW9ZTFNpamt4OU9UaiUyRmxjTVM4cSUyQmFMbnk5NWd1b05ZczJzJTJGcmZFWHNMTHhLeUpYakxINHB4T2Rwd2wxenkxcCUyQnZDT1NjdERjdzE5SzVpb0hBT3hVMUh4SiUyRms0b3ROb1pZcmlKSm9XRHhTS0dSaDBJSTJJeUYlMkZtTiUyQlhsbDU1MHo0T01HczJvSnNMeW5mcjZNdjgwTCUyRndEQ2ZheVU2UllOcGxoRFlOTVp4QUNxeUVCU1ZxU29JSDh1RGoweFY4TmFwcFY3cGQ3TnAlMkJvUU5iWDlxeFNhSnVvWWZycjlwV3d1U05nNE5TSEJxS2JFSHhybnJMODBQeTJnODZXWDElMkJ3Q3c2OWFKUzNrT3l6b04lMkZxOHglMkY1TlAlMkJ3MmVYbTBxOGd1Wm9ibEdnbGljcE5BNHBJcm9hTWpmeTBPS3ZwZjhsdk11c2E1b2wxWmF6T0xxWFMzamlpdVR2SXlPdkpSSWYyeWxLYzg2ZU04eSUyRmszNXVzZksycjNGdGZ5TXRqcW9SWlozcVJGTkdUNmJQNElRN0klMkYlMkJ4enRGMSUyQmFIa2UwMVNEUjMxYU43bVolMkZUTFJWZUtOdTNxVEQ0RjVkTVZabG15bElaUXdOUWR3UnVNdkZYWnMyYkZYWnMyYkZYJTJGJTJGVTclMkZtelpzVmRtelpzVmRtelpzVmRqWFZYVmxZY2xJSUlQUWc0N0dTT3NhTkk1b3Fnc3g5aDF4VjRSJTJCWnZrQTZWSzJyNlZIJTJGdVBsYXJJdjhBdWx6JTJCeiUyRnhqYiUyRmRmJTJGQTVFb0pMSyUyRndCRmgweU9KVTFBeXJINm9BQmJvcUpJdGVidHlKa2paUDhBS1ZzNzNxbm0lMkZ3QXN5Vzg5bGVzN3h6d3RTTXhNUktHJTJCSGdocHg1NXclMkZ3QXklMkJXcGJJSFdOTmplR0tGa0RqbFZ3NSUyQklQR3dwOFMlMkZ0Y2ZzWkdVYXVRSHZkdnBOV0p4amh5eU1aQSUyQmlYUSUyQlVtTVhOdGNXVnpKYVhTR09lSmlzaUhzUnRsbDF1TGY2cmNNZUtiMjB2Vm9XJTJGNnBQJTJCMHY3R0hzTHI1cHR2cTdtT1BVNEVsbUVoSEgxZUNJSTRrcCUyQno2YU83JTJGdGVwaEJOQlBieXREY1J0Rk5HYVBHNG9SN0VaVktKSHJoeiUyQjkySmpEUEE0Y3czSE1kUiUyRlNpaU5HMW03MDI4RWlFQzRqJTJCR1dNbjRKVTdxZjhBalZzbG12YUJwM25MU0Z2YkNpVEtDWTJQMm9wUDI0cEtmcyUyRjlkNUJURkZJeXM1WkdYOXBLY2g5QjY1SnZLbXJTYVZkZXZ4ZWExbSUyQkNjRUZReWo5dFIlMkZ2eE10eFpCSVY4eDNPaTFla25wNVVkNG42WmQlMkY3WG1za1Z4cDExSlkzc1ppa2piaXlIc2Y4QW1rJTJGczRjYVBheTZwZVFhZEU2ckpNd1ZYYm9GNmslMkIlMkZFRE9uJTJCZFBJa2ZtU3lHcDZRQTEycWM0SkZwU1ZQdGNHOSUyRndEamZJMzVhOHF6YUZOYTN1cktyWExtc2NmSTFnUDdOU3YybiUyRm15d3hvdUlOMURXUEtEVzk1RFk2SzB0NUlmZ25hVUtnRDA1Y2w0OUk2SDdUWjBieW5CQW1talNWdmhjejJxRU02MCUyQkhuVlJ3OW9tJTJCSCUyRkFGc0l0ZmhuZGcxcSUyRnBOZHhtSXVEUVZVJTJGRUNmOG9ZUmVTTGs2UjVuV0J3MWJtVDZzU0Q4RkdCYjRoJTJGTnlYRHlQdmJzV0lURTklMkZWR0prQjMwalBLVjFQcE9zckJkdVJMRmNQYjNKWTlWZGl0VyUyRjJYeFowJTJCOTFPMnNwSW9KV0wzRTU0d1cwWTVTT2Y5VWRGJTJGbWR2aHptJTJGbTJ3JTJCb2VhcEpsQlZkUmpXZENEc1pFMmNmZXVIZHZmUVcwQm5nWnB0VnZFSDF1JTJGbEc2Z2olMkI1aEg3S3IweEhjMHBEJTJCWWc4d2ExTkRGWldqU1d0c3JDUm9pR0pjbjQ2YjFZZEYyeUZXZW16eHNXMUNONEVqJTJGWmxVb2Z1Yk9zMldweHBOR2wyb01QMmVTYkVlNXlUWEdrYWRxRnBKYVQyNlQyODYwWUVWQkI2RUh4OE1lQ3pkcHVubEV0cEhZUTM4R3FSckZOYVBBOEVnSmNGYSUyRkdxaGFkYW8yWEJHbG1iZTJ1Q3pldmJHZVJvMlBjTkp4JTJGMlMlMkZEaHQ1MXMzc0xwWUxvSDZuY0lxMjF3UlUxVWNlTHQ5SHhmOEhoajVmOHBYZXJXYyUyQnEyVnJIcUUxb3FRV2R2Tkx3VW9pam1KQiUyRk85VzQlMkZzOGNqVkgzTGV6RXZNMm1YV3F5YWJOb3pCN1NTMVdKNVN3QnJIV25MdjhBM1pVYmZ5NG9ubGF6bXRyS0MlMkJKbE5vSEZGTkZibVFhSHZ0VEo5clBselU3R09PNnZyUmJlTmlvUVFNclJ4bW45MzhJWGo0WUUwZlFMblhCZFEyMDYybDFDUDNTU3J5OVhhdjdvZzAlMkY0TERzaWtwczdDM3MxV0syaVdKQiUyQnlncGc1bE5PWDBZQVZyN1RMMHhYc3hjeHNWbGhrdHdwRlB0TFZXd2JmJTJCYW4wZTh0cDdMVFlybXlJTGxweVQ2aG9SdzIlMkZ1JTJGVGJkbHczdGFvSzR2N2ExZFkyZFc1R2pRMXFWSGolMkZ3QTI0VmFoNWEwM1ZsTnhaRVFUdHZ5WDdMSCUyRkFDbHlmanlmbzNuclRyYlY5UFJOSTFpNmdNOHFSRU5DOGdiMDVPVUklMkJOUjZuUjElMkY0SElScU9qNjU1VnUlMkZRMVNCb2dUJTJCN21VMWlrQTdwSjAlMkZ3QmkzeFpHd2RpemhPZU9YRkNSQlNQU1pOWDhtYW1sMU1oTnNmZ2xkUGlqZEQxSCUyQlMzN1M4czZaTHJFRVp0MnVFZTFXNlZXdExzZyUyQmxLR0hJR09SZVMlMkY2d09SOWRXdFJwMTFkU1ElMkZXSHQ0V2slMkJyOTNJR3lVJTJGeXNrJTJGayUyRlc1SU5BVFQ5WjBlQVdjekdUNmdyJTJCb0lsZmNnQnhzZjJ2VCUyRkFHTVl4TVNlRTJEMDdtN1BxQm1qRXpqV1NPM0VPVW8lMkJZNzJNJTJCWWZMY2QzRkplUVJ4eW83RXpRVTc5MkdRNjBiVTlIa2Y5SFRBd3RzMWpkVmVObCUyRnlYJTJCMm4lMkZFYzdaTDVYc3RWU1M1OHA2a1lacVZiVHJ5c2lmNnRXUHJSciUyRnNwVnptdXZhRHEyanpzdXAySnRBNU5DZmp0bU5mOTFUamIlMkZZeWNjSjh0bWdKUHFWNEpKTEpwSTNzWUxxSjJ1WSUyRnRCZ1A5MXE2anBJeThWdzBzTk5uOHRHMTFtOEtXTm5xVHJBdW1zNVloVHZ5Y3QlMkIwUjhmdyUyRlliJTJGV3dMZFJwZmFWRWtrUE81MHIxSGhqSkFMUlNnOUhwWDkyJTJGd0N6Z1NXNFRWOUhnYTV1cHBkVnNwRnQ3YTBGT01Oc2hISm0zVnVaWThmViUyQjB6ZkJsWkhxM0JOaWdPbm01MkxJZkRIQ1l3TUNKbVZYSThJcU1ZbnpJNGY4NWwlMkJzUlFjN2VTS1ZSUEhLdHM0cnVVa1BBY3Y5UiUyRml3YlphWTFwNWd0ckhVb2lwam5qV1pPbzRsaFJ2OHBHd2NQTDlwY1JPWm8yUzZaa2FYZ3lxb2FGVms0aG4lMkJKOXVQcU54d1ZybXNXdXB2WXphbEY5UzFLMWxUaTZHc2NzWVlNcFYlMkZGV1VOeCUyRmx3WW9TamQ4anliTzBzdUxNY1VzZG1VUVJPeFJybkg3NVBRdGQ4dmFUNWl0QlphcEFKSTBZUEU2bmpKR3clMkZhamNmWnpnJTJGd0NaV2gzR2hXJTJGcjJ3SDF2U1owRFhsUGlhMW0lMkZ1WnVLN01WJTJGdUxqJTJCYlBRMXBkUjNsdEhjeEdxeUN0T3REM0gwSElGJTJCWkZuYjNrOEVNcWh4UEJKSE9oNk1uSVVEZlNkc3NEcTN6ZnFXbVI2bEZKcWVuUkNPNmlISyUyRnNrM0ZEMG5nJTJGbWpmQzNTTlZ1ZEp1VXZyS1FKZFFPcnhjMURvYWZhU1JHcXJLJTJGUmx5VTMyaTNYbG5VNFJIT1lyRjJJc3IxaHk5Sm0lMkY0OTUlMkY4QWltVCUyRkFDc0t0ZTBacCUyRlcxS3hnOUthTCUyRkFJNk5pcHI2YkglMkZkMFg4OEVuMmxmRlgwJTJGd0RsejV4MGZ6YnBBbHNJWXJPJTJCZ0FGJTJGWXhCVkNPUiUyRmVJQlRsRSUyRjdMZjdISnBuaUx5ejVtMVR5cnFWdHEybHk4Wll6dXZWV1g5cU9RZnRJMzdXZXVmSm5uSFRmT2VrSnFWaXdTWmFMZDJwTlhoazdxZjhBSlA3RCUyRnRZRlpKbXpac1ZkbXpac1ZhT2N0JTJGTmo4c3g1bnRKTmIwTmZUMXVCYXl4cnQ5YWpVZlklMkY0enFQN3R2MnZzWjFQS09Ldmh6MENzYndNenFTU0hQUmd3MiUyQkwzJTJGbXdybGhlQiUyQkQ5ZXhIUWp4R2VxZlBINU9hZDVsdXBkVzBpY2FicVUzeFRxVjVRVE4lMkZPeXI4U09mMm5YJTJGZ001OUglMkJRZm11NW5XQzluczRyYmw4VTZPek1CJTJGa3B3R0tyJTJGeWslMkZPQnRPTVBsbnpUTVdzeVJIWTZnNXFZcTlJNWozaSUyRmxmOEEzWG5veFdWMVZrSVpXQUtzTndRZWhHYzY4c2ZrdjVROHZCWnJpRTZyZHJRJTJCcGRBZW1DTzZ3ajRmJTJCRDU1MFZWQ3FGVVVWUlFBYkFBWXEzbXpac1ZkbXpac1ZmJTJGVjclMkZtelpzVmRtelpzVmRtelpzVmRpTnpORGJ3U1RYTEJJVVVtUmowQTk4V3dOZlBhSmJTbSUyQktpMnBTVXY5bWgycGlyQVBPTjVwTVdpU3RvaVBKZk0xYlZJNHl5MUc4akRrQ253cmhEckQ2akZiJTJCV2JDN1d0MzZFY2wlMkJDUCUyQktpWkhidHlKYWpmNVdEdlA5eFpSYU5DZkt0eEtiNHpqMDRJT1I0MDNKS2tmQU9mSCUyRld3czg0YWpOZDNFRWtsRnVTT1V0SyUyRkRSVlhpS2R1UU9GSWVlYXRwazBGNVBlYVVqJTJCbEFUTElZd1NZaFhkJTJGaCUyQnlsZXVMUDlVMTJ5a21pV08ydnJXT1c0bjNQeGdjQUZYbWF0eTNjZjc3JTJCeDlqTzElMkZsdm8wRWVqVDM4OFN2SnFETWpGeFhsRXZ3OFRYOWxzNWglMkJZJTJGa1NUeW5lJTJGcEhUVlk2TGRzVlVqJTJGZER0MWhmJTJGaXR2OTF0JTJGc01nUlc0ZHhvOVg0dkRpeVNxY2ZvbiUyRk8lMkZveVlKc1FHSGZKTDVGc3JYVWRaazBtNnVUYlIzVVR2SFFBZ3pSamtPTlNPRGxhNUdnY1gwJTJGVUpOTDFTMHY0MURQRklObThHJTJCRSUyRnJ5bSUyQkhNRDBrNTJ0eGVMcHBqcVBVUGZGNmw1WDh4V2xtOTk1ZXZabGd1TFNka2pSOWdUV2pyWG92UDRYVEVQTTZ3d3pLU0tDVDR0dW9JTyUyQjN2a2U4MHhYVTJ0VzEzWlElMkJvMTVicThucEo4VWxFTFZwJTJCM3NNQldPc1hPdFd5MmlFeVhOdUN5SXc1TXlmOFZzYXNlRlA3dHZpekw0dHElMkJUek5VZnZUJTJCT1U2bnBreTlacmNpVkFPNVh3JTJCYThzaXMwMXJwJTJGbUMwMU81WXJTV0o0a1hjeUZpQjluc0slMkZ0NWZsanpMWHpNbGcwYlJRdWpRRVNiVmxEY2w1SWVuTDRreWVlYlBJcDh5Nmo1ZTFEU0VqWDBYV080UXNxS1lrJTJGZlJnViUyRmI1Z3g4Y0hNZTVsR1VvbTRtanVQbnpTVyUyRjFPZlZMNlI3c0pXMmtlS0ZVR3lnR2hJSjNQS21OVnklMkZUQWsxcGRXYzl6QmRyd3VFbGNUSWV6QSUyRkVNaiUyRm1qWGJ2UXRhVzN0RUJnQ0pNNlB1Q0hGUUV4dGl6U0tJMURISnY1VnV4S3JXTXAlMkJ3QzhKUGglMkIwdjBaQ05MdnJmVXJHRzl0aldPVlFma2YybFAlMkJxY1BkSG1lM3ZJWlYyNHNLbjJPeCUyRkRKQlN5enpCcGxycVduU1FTeExJMFA3NkVzb0lEcU8zJTJCc01nbWxheGNlVWRSWFU3WlM5akpSYjYyWG9VUDdRSDgwZjJrJTJGNEhPZ1hkeVZZZ0hwMSUyQldRVzhnNFR6UXlvUXBKSVZoMVZ1aEdKQ2g3Rkc5aHJlbXBLaFc0c3J5TU1wNmhsWVYlMkIlMkZPV2ElMkZiWGZrJTJGVTBaSk9FTDFheXUyJTJCeTFQOTF1ZHYzaWY4T3VDUEolMkZtaFBMMXhhYUpldHgweTRyRkZNeDJpbUpKU3ZoSExYaiUyRnI0TiUyRk85RyUyRndBSjI4byUyRll2WTY5JTJCcU9NZ2RsWXpxUG1XeTh4cjYxNWFvdW94QUEzZGs0ZEpCMCUyRmZSR2pvZkJsNTRVJTJCbkN5U1JOU2ExbCUyQjJ2UXEzODYxJTJCeTY1R1BLY3p0cXhqWTdORXc0alliVTMyem9OcHBGMXFmcncySlg2eWllckhFeG9KaXZXSWY1Zkg3RFlZblphWTNwTjlONU4xbjlKSkVidUl3eVJvaXNZMWtEYnBWdTNGJTJGaWRNN3hwbDNZJTJCYWRGdDdtNXRsZTN2SVVrYUNZQng4UW93b2Y1V0IlMkJQT05HMGp2TFkyOHFsUlVncXdveU9PdTM3THBpWGwzWGJqeVpxazdYZ2xtdFpJZlRFS05RR2g1UkVGdnN4cjhYTGpnSXJkV1FlZHZ5N0dpUVByZmw0U05heFZlNXMxcTdScDNraSUyRmFhTmYyMCUyQjFrVDA3V0dDcXdjTWpkSkZOUWM5QzJOOUJxTnZIYzI5V2lsalNWR0kyS3lDb3BrRnYlMkZ3QW90SHU5Y09xMmQxSllXMHg1M2RoQW80TzUzSlF0OE1ZZjlvY01GeUIyM1p3R09RSWtlQ1FHeHF3ZklzYXROUVNRcklybU9VYnJJaG9RZkVFYjVMTEh6UFA2WDFUVjRScUZvNG96RlZMMCUyRndBcEQ4RW1GbXMlMkZseGVXQk54b0VwdUlodWJTUWoxQiUyRnFQc0h3bzAlMkI0bHRVbVc3Um81b2pSbzNCVmhUMk9XQ2kxdCUyQmJQSjFwRkNmTVhsSmd0bCUyRng5MlZDeVJIdXdqYjRrWCUyQmRmMmNpT2xHMmh1aGNYMm44SkkyQkU4RkhIek1UYiUyRjhUVmM2RnBXdXRheVNQYmxKRW1IR2VDUVZWd1AxWkd0Y3NJYmU1TjNwMFVpMk1sV2FNN21CJTJGd0JwUTQlMkIxRiUyRkxrVEd1bGhuRElZbllwcmY2dFlheGF4eENEbHhJYUc3aWtvOFo3a0d0V3IlMkIzeXd4c2RHbDFXd2l0ekdia2drUnp1Z0RHblJtMzRSMCUyRlpiSUpCWnd4djlZaEFWeDhRcDBKUGlCbmFmSmwxZVhla0xOZHlyS09YR05nQURRRDRnM0dnJTJCRTdZOFd5VExmaUhOSmJiUXZOSGxlJTJGZTUwZVFYJTJCblhBRDNWZzUzRW9XbktJbWhRbW43UHd2OEF5WVJYOXhxbDFkbVhXT1MzWEhpcU1ucDBRRWtLcSUyQkE1ZmF6clF3SHFPbVdtcVFHQzdqNUQ5bHhzeW54VnNGc0xlTzM5aGIzOXRKYlhNWWxobEhHU051aEIlMkZVZmZPWlh5MyUyRmw3VVYwNW41TWdycE4xTFRqTENUOFZuY0VqJTJGWWY1T2R0MW5RYnpSM0pjZXJhc2ZnbkEyJTJCVCUyRkFNcllCJTJGNVYzWSUyQmR0QXZoZWZ1YnJuJTJGdU51eDFqa1FVWWtEN1VibmlyJTJGNnVFcThEMXJURms5WFVkTmdhSGl4JTJCdTJYVm9IUGNEJTJGZmJmc3RuUWZ5QWViJTJGRmt0QyUyRnB0YVNGMVZnRk5HVGlYRmZpQSUyQkxqJTJGbFpDOVd1TmQ4cDZrTk0xZTA0YW5Zc1kybVk3VFclMkZaRzJwS2pmc1M0SzAwM21rQ0h6bDVXbURMYXplcmNXb0I5V0N2WDFGQiUyRmVRdDlsdjhuSW9mWU5SbDVGUEkzbmpUZk8ybGk3dGFSWGtRVVhscDNSajBaZjVvbiUyRlliSlhpcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRiUyRlc3JTJGbXpac1ZkbXpac1ZkbXpac1ZkZ0hWWTlQbXRIaTFKbFczY2dFdVFCVWJyMXdkZ1BVZE50dFR0emIzSUpXb1pTT29ZZHhpcnpIenRQJTJCaTIwYVR5dmRtNnVEY0pTQ01KSVBUVmhSV0tqN0JiYmkyQjliOGtlWnJuVjNGdmJlcmJzUXNWd0hVS0ZKNnRVOGhTdmhrJTJCJTJGd0FQR3kxR3d2TE9rcUs1anUwY0lQM1lRJTJCbkl0QVBpaWY4QTRua2twaEtRYVFPazZlbWw2YmE2ZkdRVnQ0d2hQaWYyaiUyRndXTzFMVGJQVnJHZlRyJTJCSVRXdHloU1dNanFEJTJGRWZzNE16RVZ3SXNnMk5pJTJCVlBPSGxtNThwNjVOcFUxWGhQNzJ6blAlMkI3SVdQd24lMkZYWDdFbiUyQlZnVzI4czYzZjJrV3IyOW03NllzNnh5WFFweFVnZ05VZmE0aXYydU9lbjljOHQ2SjVpdDB0OWFzMHVvNHp5akxWREtmOGwxb3k1RUw3VHJpR1czMEx5dHA3UTZEYnMwZDd4STRPeiUyRkZXUGx5Y21OdmliJTJCZkt6aXVmRVRzN1dYYWhPbjhQaDlkVkluNmE3JTJGZXdEelBkM3VrTnBsell0eHRFaFcyYWRWQkt6Umt0VGthbE9kZiUyQkJ3NjBieWRaJTJCYU5SJTJGd0FSYVBxMFZqT0l3NTA5YmNMSWt3JTJCMTZ5aCUyRmpSbSUyRjNhbjI4ZGU2ZExZVFhHazZ4RHp0cHg4YUhveW43THFmYjluSTNZWCUyQnJlUTlUaFMzcGNXaGN2YXpNQldTRSUyRmJnYVElMkZGOFA4QUpscnJEdnVudm1yeUI5YnVGdnpBdG5ya1FEODR6JTJCNm1LSGtHUnR1JTJGODJIV25PJTJCb2FkTHBVNWFDNFplVUw5R2lsJTJCMGpLUjBhT1laT0xPODBqemhvMGQzWnY2a01uMldGUFVobEd4VmglMkJ5Nkg3V1FXYU84MHJWMWh2d0JNamNmVUFvc2tUYkxJUCUyQk5zSXI1b1N1MTB0Zk90N0lrdDR0aDVpalFDNmhrU3NkejZmd2ZXSWlDQ3I3VW1UaiUyRmw1SkclMkZLVFNkVGpnJTJGeERJTGg0VUNVZ0hEN1A4QXhhZmo0NUdQTWRrWXRSa3ZiV2Y2amV3RVhOaGNyOXBwVDlwRVZhdEpXbnhKeCUyQnpuUlBJZm16JTJGRnVqZlc1WSUyRlN2TFolMkZxOTRnQkNtUUN2TlFmaVZYJTJCMXhiN09BMk5sZWFYJTJGa3IlMkZBMTlKYjJyTyUyQmxYYmM3VXZ1RmJ1dkwlMkJiJTJGaVdDN003SE91YXJwZHJxOWpMWTNpOG81QnNlNnQyZGY4QUtYT1A2amJhajVkdnBMSzVVU0JkMGZjQjA3T3Y4Y01UM3FrUDVsNnRya1dwMmtOaThzVnI2Q1Nob3lWRHlIN1JKSFhqOE9RcGZOZm1DTjElMkJzWGNzbkJlQ3JPZlVBVWRGSFA0dVAwNTJueSUyRnEyZzZ2ZVI2VDVoZ1g5NEFsbXNwJTJGZHN3JTJGM1clMkYlMkJVMzdHU0hVZnlwOG42aFVwYXZac2U4RGtEJTJGZ0g1cCUyQkdDWE5lVHdNJTJCYnplV3h0ciUyQjNTVkhGR01aS01QOG9CcXIlMkZ3QU5oOXF2NWdwcjNrVmZMVjl6azFPM3VJakZPd3J6dDR3MUdaaFVlcW4yUDhySkQ1aSUyRkpKcksybHZOS3VmclN4JTJGRVlDbkNYaU90Q3BLUHglMkYxTTUwM2xxN3RwRHhETlVVVUdsUHd5SnRXUWZsZnBNV3NlYUZ0TGdzc1p0Wm5ESjFWaHhDbjM2NTFlMzhxYW5wJTJCczJaWDk1YnJLRyUyQnRSN1VWZmlvNiUyRnMxNllTJTJGazNwR21XeHZOUiUyQnNwSnFmRVc3V25SNGtyeUxGVzNQcU4lMkZMJTJGTG5XOEkyVXNXOHglMkJWbzcxbjFMVDBDWHAzbWpHd2xwMyUyRjR5RCUyRmhzZ2w5b3lYVWF4WDF1OExvQ1kyZFN0ViUyRmFHJTJGZ2M3SlRFYml6dHJyMHpjUnJJWW1EeGxoV2pESkNYUW9lVmVXOVJ2OEF5MVBLTDI1a3VOTzlFTEVvJTJCSWpnYW9LayUyRkFxSnl6cXRyZFFYa0NYTnMzcVF5cUdqY2RDQ0s3WkZQTVBsMVlnOTVhTFdBN3pRamZqWHF3JTJGeWNCNkpyTnpZM0JXN3VBYkFSS2dVcVNRVklDOEtmQ3E4Szh2aHhxOXdsbnRLNER2dEowN1VnQmZXNlRVNkZodlR3cU44RlJ5UnlvSGlZT2pDb1pUVUVISDVGREM5WSUyRkw2d3VTWjlJYzJNM1gwdHpFZm82cCUyRnNjTDlCJTJGTHk4WFZKTlM4eTNZdW80MWFLejAlMkJFa1FyR3dvV2xPM04yem9tVlREWlY0bDVuOHMzUGxxOTRvUyUyQm5UayUyRlZaajI3JTJCazUlMkZuWCUyRmhzTU5JODkzV2oyaHQydGhOVlNFcDhQR1NsQkslMkYlMkJTZjI4Nm5xT25XbXFXY2xsZXhpU0dRYmc5UWV6S2YyV0djbzEzeWhkYVZNVVQ5NUEzOXpMMEREd1BnJTJCSVpjM3BQbHpVNWRTdEdhNElhZU5nR1phQUZXSEpXb01PYzV2NUUxQjdXZjZ0Y0FvRCUyQjVQTGIzalAwZll6bzR4SVlyWklvNVVhT1ZRNk1LTXJDb0lQdGlkcloyOWxBdHRhb0k0VXJ4UWRCVTFPTDVzQ3NPOCUyRndENWU2VjU3MDhSWE5JTlFnQiUyQnAzb0ZTdGYySkFLYzRtJTJGNFhPSVdYNVIlMkZtVm9PcHVtbXdJeVNBeE5Nc3NaaFpHMnEzTXFlbjgwZWVvS1pxWXE4bDhoJTJGayUyRmNlVzlRdDlaMURVM1c0Z1BKTFMwSkNFR3Z3VHl0VDFVMyUyQng2YXJuV3MyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGMSUyQiUyRjVzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFV6WnMyS3V6WnMyS29YVWpJTEc0OUUwazRFS2V0SzQzVFlraHNvUXA1RXFHWnZFbnZncDFES1ZiZFcySTlqaERkYURxVCUyRnVMTFdKYk96UDhBdWxFVm5BUFZWa2I0aGlxQjh3V1VYbVMlMkJYVFlXUWkzaWtacGh1VWxxT0ttbjdQOEFObk90UnNpUFcwVFdVS3FEOW9mYWpZZlprUSUyQjMlMkZETG5ZdEgwV3kwVzNhQzBCSmM4cEpIUEoySjhUaFY1dTh0SnJkb1pyZFFMNkVIMHowTGolMkJRJTJGOGE0YlRieFhRUE1HcSUyRmw5cjdtU3M5amNVTjNDdjJabyUyQjF4RDRTcCUyRnpabmFOWWh0Zk5tZ1JhaG83SmNNd0UxcEtDQVNQMjQ2JTJGc24lMkJaZjU4Z3N1Z1dXdGFQRnAxeFJMMjFxRmtGQ3lQM1U5NllSJTJCVWZNdDclMkJYJTJCcXZwbXFFdHBVc25HZU90UWpFMEZ4RCUyRndBelV4T3klMkI1a0htR0NPYTFzNyUyQlZlRXNGWXBISTNTdnd5QnZEaTY0N1J0SDFieTNxRVhtUFQ1VmxnbldtbzJDMUFtajZySXJINFJNblZjQ3ozRnZKNXgxcElxWDJoMzBjVnkzb3V2Mm5RRWVrYTlYWlc1WkpOUHVsdDdkYlpwVExhc1A5SGxZVWFsUDd1VmYySmxIMnYlMkJFdzg5MVp6WTN0dnFOdEhkV3o4NHBCVUhvUWU2c1AyV1g5ckM3ekpvRU91MlhwN0xkUlZhM2xQWTkwYiUyRkFDSHdpMElhaEJxdGRPbzloS2Y5TGpZMFZmOEFMVSUyRjc4eWJaRkQ1OTFqUzNSM2duUm81WW1wNE1qQTlzbkhrcjh3ZVJpMEx6SklJN3BRRXRkUWMwU1lkRldRJTJGc3klMkY1WDdlSCUyRkFKdzh1THFNRFg5cWclMkJ0UkwlMkI4VWY3c1FmOGJMbkpidXlqY05GS25ORDFVJTJGdzhEaDVwZlFvM0djNDg3ZVZGaE1tcTJLZnVITmJtTlIlMkZkc2Y5MktQNUclMkZhJTJGbHlQZVhQTSUyRm1meTJZNHBtazFQUnFmQkJLcE53aURyNkUzJTJCN09IOGo1MSUyQjF1YlhVN0pMaUtrbHZjSldqRHFyRGRXSCUyRkVzVjVQbnRvRml1VXVRT0Z4RnZIS3BLc1BwV25MSlo1Yjh3NjVwMXhFZ3VYdUlwM3E4ZDA3UDElMkZaVm0lMkJ4JTJGa2NjYnIlMkJobTIxMjVzYlBnZ1g5NUFacThGUmh5M3AlMkZMOFNyazE4MWFESHFlbXBxdHZSTHUyaERuZ1BoZU1EbVYlMkYyUDJvempzcktMVzVqdTRFbmklMkJ5NHJROVFlNE9MNUQlMkZBQ3A1aGd1N2lPd2trVVhGeEQ2eXg5RFdNOEhOTW1HSkZGRFJGUlFpb1BVSElocm1nckFYdWJkSzJ6MTlXT2xlRmVwSCUyQlJrd3ltQ2tVSXFEMUJ4QnBXSWFOcTA5bzMxV1VSclpvaWVtMzJlUEVoZUNJQjhWViUyQkxKY0dCM0JCSHRrYTFMUVhWbmUwWG5DOWVVUSUyQjB0ZXZIeFhBMmx4YXpIZlc2MjByeDJhdFc0Z2tTcUZPUENnZHZqRENsVndrQTdoV1lac3d6WkZYWW5OQkZQRzBVeUNTTnZ0S3dxRGltYkZXRTZ2b0UxaElidTBCZTNCclFWTElQOHJ4WEpSbzkyYjNUNFoyJTJCMVRpM3pHMWNHa0FpaDNCN1pTUnBHdkNOUXFqc29vTjhOcXV6WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5RHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VmlQbWJ5bzkxY2ZwdlFpSU5WVCUyQiUyQmg2UlhTRDlpWHdsJTJGMzNOJTJGd1dRelc5QVhYbyUyRlhhRmc3TCUyQiUyQmhLMG1qZEJ1YWZ6QUNqcm5ZY0RUV05yUEtrOGtZTXNaREk0Mk5SNDB3M3RSVzN6MXAybDZobyUyQm90TEFmWFZFNU9nRFZsakElMkJMaiUyRnhaR3Y3T1MyQmJlYVJic2NwSTVZdUxRcTNFVElmaVFjdjJaVlA5MCUyRjhBc01rM21pMUZqcUJudDBDcGNJSElVVSUyQk5UOFJGUDV0dVdSRFRGRXVsd1BhUDlZalZTZlZqQklGR1BNJTJGN0J2SENPU1hxWGx1NnRyblRJMXQ3WTJaaiUyQkdXMVlobVElMkJKY2ZiNWZ6WWNaQlBLbDFJN0dSWEhLR2kzQVklMkZhalBSdmRzblFOZDhCRkZEam5MJTJGUFdoSmFYZ3VJS1J3MzNLbmdrbFBpJTJGMlB4Y3M2amtZODkyVWwzb25xd29aSkxXUlplQUhJbFQ4RDdmSnNBVkJhTHBVZXVlUzlQdHJpWVBjV3lrUVhrZlo0eVZERCUyRkpQMld3WDVYMU5KMk5yUUlHWGtvWHB6UThKUDY1R1BKZm1PVFI1RzB6WExtR0N6bFltemhaUFNlRTA1Y2VQN1VUamZsaU9oYWdrV3MzQ1cwZ2tVWGJQWmpvWlZrWThrUUhyOE9TSFVKWkQ1NDB2bVl0VlJCSUF2b1RvMjYwSnJHelU3Y3ZoemFKNWpnbTB0OU8xdTdnaXUlMkZSZFklMkJKNDhveUNnJTJGZDlReWZaJTJGd0FySmhQQkZjd3ZienFIaWtCVjBQUWc5c2d0JTJGd0NTTHBKeTlweG5pUFJpUXNnSDhyZnpZQjVxbCUyRmtxMWhYVTRaaWdOd2pzaXpmdGVtVTNVZjVKenAlMkJSWHlsb0YlMkZwajNGenFZaVIzWXJheFJFc3l4JTJGelRPYUw2aiUyRnlwOENaS3NTVU96WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5SHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VmczNWlQck1FRmxkNlhiUjNDUk0lMkZybzFmVUlJSHd4JTJGczRVJTJGbHJxT2t6M2MxbFlRbUVORkpJOERDZ1J6SURJZzViMUphdlRPaWFqWkxmMmNsczFLc0tvZkJoOWs1eWRwSlBMJTJGbXpUOVpjQklXWTJ0NXNGb0Q4THM1QzElMkZ3Q0RreVE1S3lqV2RMR2k2bWwzYnJTeXZLeHVvNkk1OFA4QUpQVmNsT2lYWnVyUGk1ckxBZlRmNWZzbjdzRTNkckJxRnE5dkxSNHBWMkk3ZHd5JTJCJTJCRjJqNlhmMkY1ZFMzRXFOYnloVmlWYThpViUyRmJmYWc2JTJGWlhCZGozS25XVVJYTHpZRllWNW44bjN1czZ1dDdidEVJVEdzYmM2aGw0MThCOFdGZDc1WW04c3ZIcVZxUHJRaUNzSlNQaWlrSDJqUWZzTm5TY2F5aHdWWUJsT3hCM0JHRzFTYnk3cmY2WWdaNUtDWmZ0SUJTbUhlRmxsb2RscDk1TGVXcWxETUtHSWZZQjdrRERQRSUyQlN1elpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGJTJGMHUlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaRmZNJTJCaXBMVyUyQlNKWkFmNzFDdGFNUHN5Z2Y4U3lWWlJBSUlPNFBiQ0RXNnBQNVl2RGQ2V2l1MVpiYyUyQmklMkI5VHQ5bXYlMkJ4dzV4RzN0YmUxVmx0NDFqREhrd1VVcWZFNHRnUE5YWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOVB2JTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWJTJGJTJGWicpO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtib3JkZXI6MXB4IHNvbGlkICMwYTB9Lnl1aS1za2luLXNhbSAueXVpLWgtc2xpZGVye2JhY2tncm91bmQ6dXJsKGJnLWguZ2lmKSBuby1yZXBlYXQgNXB4IDA7aGVpZ2h0OjI4cHg7d2lkdGg6MjI4cHh9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC10d291cmxzLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1iYXNlNjQtdHdvdXJscy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMjM0MmYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC10d291cmxzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1yaW5nLXZtbCwKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1jZW50ZXItYnV0dG9uLXZtbCwKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1tYXJrZXIgdlw6b3ZhbC55dWkzLWRpYWwtbWFya2VyLW1heC1taW4sCi0ueXVpMy1za2luLW5pZ2h0IHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLAotLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlci12bWwsCi0ueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtaGFuZGxlLXZtbCB7Ci0gICAgYmFja2dyb3VuZDogbm9uZTsKLSAgICBvcGFjaXR5OjE7Ci19Ci0KLWRpdi5iYXNlNjQtc2luZ2xlcXVvdGVzIHsKLSAgICB3aWR0aDoxMDBweDsKLSAgICBoZWlnaHQ6MTAwcHg7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ0FBQUFBZ0NBWUFBQUJ6ZW5yMEFBQUFCbUpMUjBRQUFBQUFBQUQ1UTd0JTJGQUFBQUNYQklXWE1BQUEzV0FBQU4xZ0dRYjNtY0FBQUZyVWxFUVZSWXclMkIyWHoyOGtSeFhIUCUyQjlWZGM4dmoyZkc5dUlrbTJ5VWVGR0VoTkNLUXdCcGoxeVJVQkFucEpVNGNlWlA0TXhma0J4eTJHTzQ1YlFYdUVHUW9oVUtpZ1ElMkJzQkJFMXNiWVh2OFl6JTJGUk1kOWZqVU4wOVBWNW5GWkE0a1paYTc5VzNxdXU5ZXIlMkZxTmZ5JTJGUHdKZ1p0eSUyRmZ6JTJGWjI5dnJwbW1xaGxXVGdtRmcxVXBiZldoWWhHNllxMmNGaSUyRk5yajluSnlXbnglMkJQSGplYWZiTVRFelB2alZCOSUyQjZkJTJCJTJGZXp3ZUR3VjFCZkh1Yml2a0MzbFp5YSUyRjRtN05wOFVaWVhod2VISDc3MzNydnZDMEt5djclMkYlMkY3cDA3ZDM0cUlqeXZyNjNSTmI0bDRDYnNSVXJOcnE2T2Z2ZlJSeiUyRnhEeDQ4NkElMkY2Zzd2WGhYOVpJZiUyQnA0Sm9tYVRvWmo4ZDdQazFTRlJGWGIxYVdvZHEwOWwlMkY5WVp1JTJGQ1dNVkw5ZSUyRmFWRlZRVlVSRUVHOHIzVlVFWjRjWCUyRkhMMzAlMkI1c2hSdEFoRnE0d2dnTmI2R3JYZ1ZhMksyall0QUNJSHY3U3o1NFRmSGpXV2FnQk9CeTBYZ3QlMkJjakx0d1F4VkNwTndVUlFhdDFEZFlhVDdwd2R3S0RGQTZuY0hnRml6Sm1TYjNXTFBEYTdQTUlWbGIyZGFxWnhkT05VbkFldEVvakVkQkdpWFhoVG1BamhaMCUyQjNONkFsemVFUk9IMVRYaVdHZiUyQmN3bWtXWlluQWZBa2R4MXBxJTJCaFViVDl6M0lFbFVKbFZoSTRXc2dDTFV5Z2dpNE1RWWQ0VlhObUNZUnFYT3NwVjdVb0hiUTNocEVNZUxBazVta0ZZUllsV0klMkJIWjZDVER3a0tTUXFyQTdnRmVITUYzQzZWeVlMbUZaR2lLQ0U2R3JNRnNhV2I3eXVWT2g2Nk4xRmtVVXBCSjNUeXZGb3ZUb0JsOVhNYk5ZMmJaNzBCc0tmVzk0aGJ5RXJvc21YcFF3eTRWZ2tDak1pemp2UlJpazBFdGlMTndhZ0JmNDY1bHdPcXRrRVRFbjYwWFQxJTJCbFRhenJwS2xSJTJCS2tvb3kzWGZiM1dqM3dHV0pSUWhubmk3QjUzcTVGcVo0JTJGVVI3UFloR014eXVNd2dXVnFUeHJZV0F3WllRWDc4SjVpOGllOXR4U0Frb09xcVFBcWszcEJnS0xEaGxZNVhWS1BDaTN3OTdZUm9LU0ZhY2VDZ0YyaHFTWFJCUFFBSU9jWFJIOGhQJTJGMHk2JTJCUnBXTHJFeWczU2JTOXRtemdnekpRU0xRWm80eG9PRThVYkNzSmZRN3ppNmlhSWl6WjVPQlZmWERLUGlyZVdDJTJCdkFZV09CcWVzemw5SmcwM2FmYkg2T3FHSCUyRkJTVXJxYnJGSVhpSG9pRURDJTJGUHlTaTJkOW5uWkhKRTdvcFk3ZGNZJTJGZGNaZWo4NHpwUEdmWTlVdzJFcllHQ2YyTzRtVVZFekVMV3RxVXhaS2pmM3pLMmNVUnppY01SeSUyQnp2YnVIOHlsRlBxWElQcU5jekNsS1kxbVVaRmNuU0RLa3YlMkZVTnVwdGJXRyUyQkx3JTJGTWglMkZ6cllwS0JIS1YzT05PWHpZeGVWMjB6NDlxaHM3Z2FNV0lqcVFRaUJ4VlhCNGlyZzA1eXo0dSUyRk1waWVvSnVUTGpESmZVSllCekJBRlVVSGtoTXZMdnpGUHV2UTJKdlEzZHVoMFIlMkZqdWlEUWRJbjZNSmR2a3hUYWZaVVB1YU42VWFPbzZVTnRnTmw5d2Vib2d1d3FvQTVmQ2pFdXNOQ3pFOExKUUZSdU5yenBRRCUyQnJtWk5NNTUlMkY0QTV6MUoyaUh0REVnNmZaSzBqMHVIbERyaDJONGkzUHR1YyUyQkg1dGpwNUhsaVdRbW1PVUFobFllMHJxVXFXU0VPaGNaMDVBdkUxVWRDb2xTUUphSFdsU1VZZ0p5JTJGTzJmRmZvJTJGMzRwaXBoRk9aNE9ydk5kTDVFSlpiY21FOE9RekZ4SUpFR0VnSWVFMSUyRmhyakpMeFpjT3JJVnBWQzdUVzAwV21MV3lBTURFcyUyQmk5d1ZKRHRHMTdZMjF2Vm1OeExLcUlPa1FxcW9xMnFIT1JtZ2o5VVFjemE3bWdGbTRHbWlEak81QzcyRFNvUTZ1UFZUVyUyQnp1RlVjUTJ0ZUtkNHB6aGQ4YjZOdTZqZzd2WnNyYjFyQ2xFSXhodTdRMzd4NDdmSXkzaiUyRmk4aXFxbFV1RVdURk4lMkZPck1VM2ZFRXVoVU04RklQRHFaZ2NSSVZoc0FYeHRqR0RHUzVNJTJCUCUyRnYlMkJtN3lvcFZyUlZzUGFic1clMkJZRzFUJTJGeTNLYWhxU2c2Y0hSYjVjVG10NVpYaHhRN25TNnlac1ZXT2FqREZidzJKU0NTR0VJc3V5QyUyRiUyRm8wYVBwJTJGdjclMkJyOU5PNSUyRjVnTU9oSkxObiUyRnBRTHJMZnc2dGtLS29yQ0RnNE5QUCUyRm5ranglMkZMT3o5NmgyZW56eVp2ZiUyQmZ0SDl6YTJmbTZxTHJuTzl0R2sydlk4NmYlMkZNbGlXWlJkUG5qejV6Y09IRHolMkIlMkIlMkZpZmltb3J6djMxQzlYNzE4RyUyRllyQ1lTTkphNUxnQUFBQ0o2VkZoMFUyOW1kSGRoY21VQUFIamFLeTh2MTh2TXl5NU9UaXhJMWNzdlNnY0FOdGdHV0JCVHlsd0FBQUFBU1VWT1JLNUNZSUklM0QnKTsKLSAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7Ci0gICAgYm9yZGVyOjFweCBzb2xpZCAjMDBhYTAwOwotfQotCi1kaXYub3RoZXJkYXRhdXJsIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCb0FBQUFhQ0FZQUFBQ3BTa3pPQUFBQUFYTlNSMElBcnM0YzZRQUFBQWx3U0ZsekFBQUxFd0FBQ3hNQkFKcWNHQUFBQUFkMFNVMUZCOWtGQlEwV0RXd3F3andBQUFOTVNVUkJWRWpIcmRaYmFGeFZGQWJnYjJhU1RHNkdUaTZtVkl3eE54RjlxRkkwUlFuRlVxaVlhbXV0VnV0TGEydDlFWTBvUGdnRm9ZZ1BSUiUyRmFnaFl2aUElMkJpSUFZdm1CSktvWVdpaUJDaWdWVFQxRmlzYlVockV0TmtKcGM1UHVRa2pHRW1KcWtMRm1kejJIdiUyRmElMkYzclgzdHZsbTk1b1MlMkZMb2t1WnRJcGJkdkFzN0tGdEwyMndqYjNWMUM0MXVweTJrZTFEWEMyayUyRkJqdjFISFhEcmJrRWFtZzdsWDJQOFFUbGRRMlV0Zk9COHVpSnNITmlCJTJGaWswR21PJTJCZ1pJeGduR0E1OW5HQ01vSlBlUWFZUDA0N2lCRFhaRW9oa0FZb2Y0JTJGTnlLbFpSZFIlMkYxQVNaQ25vT01oV2tVaGVNejlGMWxhSlNSWjNnRXFWdzFpcFpRamNvQlJyYlQzRXo5T0pMaFprSEc1Q0Q4bDhRNDdxWGhNWnAlMkZZeGhWRmF4QkxCdFFlamR0QSUyRlR0WlBNSUpuT2tuSTJXU1l6aWNUWU44T3RUdklDWmJFQ3hkcjVQa202aVBMMEMzYyUyQmdrZklKZ2klMkY0TG5QJTJGdWRSS0QzSzRqZjFWSkdMRUFpdXo2Vm5BNEFHYW0xaDdncE5JelNGZTY2RDNOdXJMS1ZoSk5rSG8wN045VjlCRTNYSE9ZbXlldWlycUcxbDltZEhnT2tEU0dkOCUyRkdXdGc5Um9hNTZscllkY2hEdFJRUExsQ2tFeXdLVlJTY0RmcnVybndDMmRpaVBUUmU0N2lWdGJuTFpEeGNrR0NrS1lwUE0lMkZScjNrYnlSaHNZT3RSRGlRb25Gb0JTSHJCT0kxOHJPZU9QdnI3NllyQ2VVYmY1ZlR2ak9kZEowZ1ExdU1Qa3U5ejZod2ppRVpoZ09NbiUyQmFhVWVIUUpJT2tNRDdLTUE1UVFQMDFIUDE4aFBiZnZEVHZaUEVUcWIyWWlTMUJXcm96TTZqazlTUEpKSGtaWjVxRmFndG9hTm5ieVpnMUZFNHNVUFJkbEFRcHdrZFNqdkRaQUolMkZveE50JTJCdzZObEdiUVZGbDVpS0xLS3NYQ0F3eUZRWjhTM2NpdTY1aG8xbEJKNSUyRmtaazNPQkdqcEpXR21WQ21zalRrUXZBOEpIQ1VVN3M1ZUltZXZ6ZyUyRmQ3QkdGaHpDQVJJZjh1Vk4zSjVIZWgxVk0lMkJIbGtvMnklMkZIQnhGME5Kb2xmbzM4ZUR1Skp4YmYwcm8lMkZuTXVyaDhoTSUyRnVwSDR0ZFQ4emNpT0ZzVEM4U0FnUW9KZlJ4S3pDdXZmdzBrJTJGOE1EeDd4cVV5ZXolMkJTNDhFU0lON0t5Nk9VcGZBdHJ4emh4MDNVUjRtMGMlMkZaRjd0bktXMm1tYTRsOXl1dGhUU0laSXZ4UGk2RWNwWlcwUE0weHRPempvJTJCZjRHUGZ2NHIxcU5xQVVGWXM5ZGlKTEJDMUNJYTdGWng4ZlVsd0kyMkx1TnYlMkZmTGJLTUFPZnRIOVR3UlhnNiUyRmlDREFBQUFBRWxGVGtTdVFtQ0MiKTsKLX0KLQotLnl1aS1za2luLXNhbSAueXVpLWgtc2xpZGVyIHsKLSAgICBiYWNrZ3JvdW5kOiB1cmwoYmctaC5naWYpIG5vLXJlcGVhdCA1cHggMDsKLSAgICBoZWlnaHQ6IDI4cHg7Ci0gICAgd2lkdGg6IDIyOHB4OwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1iYXNlNjQtdHdvdXJscy5jc3MubWluIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC10d291cmxzLmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MTliY2EuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWJhc2U2NC10d291cmxzLmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0ueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtcmluZy12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLWNlbnRlci1idXR0b24tdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1tYXJrZXIgdlw6b3ZhbC55dWkzLWRpYWwtbWFya2VyLW1heC1taW4sLnl1aTMtc2tpbi1uaWdodCB2XDpvdmFsLnl1aTMtZGlhbC1tYXJrZXItbWF4LW1pbiwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtbWFya2VyLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtaGFuZGxlLXZtbHtiYWNrZ3JvdW5kOjA7b3BhY2l0eToxfWRpdi5iYXNlNjQtc2luZ2xlcXVvdGVze3dpZHRoOjEwMHB4O2hlaWdodDoxMDBweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFnQ0FZQUFBQnplbnIwQUFBQUJtSkxSMFFBQUFBQUFBRDVRN3QlMkZBQUFBQ1hCSVdYTUFBQTNXQUFBTjFnR1FiM21jQUFBRnJVbEVRVlJZdyUyQjJYejI4a1J4WEhQJTJCOVZkYzh2ajJmRzl1SWttMnlVZUZHRWhOQ0tRd0JwajF5UlVCQW5wSlU0Y2VaUDRNeGZrQnh5MkdPNDViUVh1RUdRb2hVS2lnUSUyQnNCQkUxc2JZWHY4WXolMkZSTWQ5ZmpVTjA5UFY1bkZaQTRrWlphNzlXM3F1dTllciUyRnFOZnklMkZQd0pnWnR5JTJGZnolMkZaMjl2cnBtbXFobFdUZ21GZzFVcGJmV2hZaEc2WXEyY0ZpJTJGTnJqOW5KeVdueCUyQlBIamVhZmJNVEV6UHZqVkI5JTJCNmQlMkIlMkZlendlRHdWMUJmSHViaXZrQzNsWnlhJTJGNG03TnA4VVpZWGh3ZUhINzczM3J2dkMwS3l2NyUyRiUyRjdwMDdkMzRxSWp5dnI2M1JOYjRsNENic1JVck5ycTZPZnZmUlJ6JTJGeER4NDg2QSUyRjZnN3ZYaFg5WklmJTJCcDRKb21hVG9aajhkN1BrMVNGUkZYYjFhV29kcTA5bCUyRjlZWnUlMkZDV01WTDllJTJGYVZGVlFWVVJFRUc4cjNWVUVaNGNYJTJGSEwzMCUyQjVzaFJ0QWhGcTR3Z2dOYjZHclhnVmEySzJqWXRBQ0lIdjdTejU0VGZIaldXYWdCT0J5MFhndCUyQmNqTHR3UXhWQ3BOd1VSUWF0MURkWWFUN3B3ZHdLREZBNm5jSGdGaXpKbVNiM1dMUERhN1BNSVZsYjJkYXFaeGRPTlVuQWV0RW9qRWRCR2lYWGhUbUFqaFowJTJCM042QWx6ZUVST0gxVFhpV0dmJTJCY3dta1daWW5BZkFrZHgxcHElMkJoVWJUOXozSUVsVUpsVmhJNFdzZ0NMVXlnZ2k0TVFZZDRWWE5tQ1lScVhPc3BWN1VvSGJRM2hwRU1lTEFrNW1rRllSWWxXSSUyQkhaNkNURHdrS1NRcXJBN2dGZUhNRjNDNlZ5WUxtRlpHaUtDRTZHck1Gc2FXYjd5dVZPaDY2TjFGa1VVcEJKM1R5dkZvdlRvQmw5WE1iTlkyYlo3MEJzS2ZXOTRoYnlFcm9zbVhwUXd5NFZna0NqTWl6anZSUmlrMEV0aUxOd2FnQmY0NjVsd09xdGtFVEVuNjBYVDElMkJsVGF6cnBLbFIlMkJLa29veTNYZmIzV2ozd0dXSlJRaG5uaTdCNTNxNUZxWjQlMkZVUjdQWWhHTXh5dU13Z1dWcVR4cllXQXdaWVFYNzhKNWk4aWU5dHhTQWtvT3FxUUFxazNwQmdLTERobFk1WFZLUENpM3c5N1lSb0tTRmFjZUNnRjJocVNYUkJQUUFJT2NYUkg4aFAlMkYweTYlMkJScFdMckV5ZzNTYlM5dG16Z2d6SlFTTFFabzR4b09FOFViQ3NKZlE3emk2aWFJaXpaNU9CVmZYREtQaXJlV0MlMkJ2QVlXT0JxZXN6bDlKZzAzYWZiSDZPcUdIJTJGQlNVcnFickZJWGlIb2lFREMlMkZQeVNpMmQ5bm5aSEpFN29wWTdkY1klMkZkY1plajg0enBQR2ZZOVV3MkVyWUdDZjJPNG1VVkV6RUxXdHFVeFpLamYzeksyY1VSemljTVJ5JTJCenZidUg4eWxGUHFYSVBxTmN6Q2xLWTFtVVpGY25TREtrdiUyRlVOdXB0YldHJTJCTHclMkZNaCUyRnpyWXBLQkhLVjNPTk9Yell4ZVYyMHo0OXFoczdnYU1XSWpxUVFpQnhWWEI0aXJnMDV5ejR1JTJGTXBpZW9KdVRMakRKZlVKWUJ6QkFGVVVIa2hNdkx2ekZQdXZRMkp2UTNkdWgwUiUyRmp1aURRZEluNk1KZHZreFRhZlpVUHVhTjZVYU9vNlVOdGdObDl3ZWJvZ3V3cW9BNWZDakV1c05DekU4TEpRRlJ1TnJ6cFFEJTJCcm1aTk01NSUyRjRBNXoxSjJpSHRERWc2ZlpLMGowdUhsRHJoMk40aTNQdHVjJTJCSDV0anA1SGxpV1FtbU9VQWhsWWUwcnFVcVdTRU9oY1owNUF2RTFVZENvbFNRSmFIV2xTVVlnSnklMkZPMmZGZm8lMkYzNHBpcGhGT1o0T3J2TmRMNUVKWmJjbUU4T1F6RnhJSkVHRWdJZUUxJTJGaHJqSkx4WmNPcklWcFZDN1RXMDBXbUxXeUFNREVzJTJCaTl3VkpEdEcxN1kyMXZWbU54TEtxSU9rUXFxb3EycUhPUm1najlVUWN6YTdtZ0ZtNEdtaURqTzVDNzJEU29RNnVQVlRXJTJCenVGVWNRMnRlS2Q0cHpoZDhiNk51NmpnN3Zac3JiMXJDbEVJeGh1N1EzN3g0N2ZJeTNqJTJGaThpcXFsVXVFV1RGTiUyRk9yTVUzZkVFdWhVTThGSVBEcVpnY1JJVmhzQVh4dGpHREdTNU0lMkJQJTJGdiUyQm03eW9wVnJSVnNQYWJzVyUyQllHMVQlMkZ5M0thaHFTZzZjSFJiNWNUbXQ1WlhoeFE3blM2eVpzVldPYWpERmJ3MkpTQ1NHRUlzdXlDJTJGJTJGbzBhUHAlMkZ2NyUyQnI5Tk81JTJGNWdNT2hKTE5uJTJGcFFMckxmdzZ0a0tLb3JDRGc0TlBQJTJGbmtqeCUyRkxPejk2aDJlbnp5WnZmJTJCZnRIOXphMmZtNnFMcm5POXRHazJ2WTg2ZiUyRk1saVdaUmRQbmp6NXpjT0hEeiUyQiUyQiUyRmlmaW1vcnp2MzFDOVg3MThHJTJGWXJDWVNOSmE1TGdBQUFDSjZWRmgwVTI5bWRIZGhjbVVBQUhqYUt5OHYxOHZNeXk1T1RpeEkxY3N2U2djQU50Z0dXQkJUeWx3QUFBQUFTVVZPUks1Q1lJSSUzRCcpO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtib3JkZXI6MXB4IHNvbGlkICMwYTB9ZGl2Lm90aGVyZGF0YXVybHtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCb0FBQUFhQ0FZQUFBQ3BTa3pPQUFBQUFYTlNSMElBcnM0YzZRQUFBQWx3U0ZsekFBQUxFd0FBQ3hNQkFKcWNHQUFBQUFkMFNVMUZCOWtGQlEwV0RXd3F3andBQUFOTVNVUkJWRWpIcmRaYmFGeFZGQWJnYjJhU1RHNkdUaTZtVkl3eE54RjlxRkkwUlFuRlVxaVlhbXV0VnV0TGEydDlFWTBvUGdnRm9ZZ1BSUiUyRmFnaFl2aUElMkJpSUFZdm1CSktvWVdpaUJDaWdWVFQxRmlzYlVockV0TmtKcGM1UHVRa2pHRW1KcWtMRm1kejJIdiUyRmElMkYzclgzdHZsbTk1b1MlMkZMb2t1WnRJcGJkdkFzN0tGdEwyMndqYjNWMUM0MXVweTJrZTFEWEMyayUyRkJqdjFISFhEcmJrRWFtZzdsWDJQOFFUbGRRMlV0Zk9COHVpSnNITmlCJTJGaWswR21PJTJCZ1pJeGduR0E1OW5HQ01vSlBlUWFZUDA0N2lCRFhaRW9oa0FZb2Y0JTJGTnlLbFpSZFIlMkYxQVNaQ25vT01oV2tVaGVNejlGMWxhSlNSWjNnRXFWdzFpcFpRamNvQlJyYlQzRXo5T0pMaFprSEc1Q0Q4bDhRNDdxWGhNWnAlMkZZeGhWRmF4QkxCdFFlamR0QSUyRlR0WlBNSUpuT2tuSTJXU1l6aWNUWU44T3RUdklDWmJFQ3hkcjVQa202aVBMMEMzYyUyQmdrZklKZ2klMkY0TG5QJTJGdWRSS0QzSzRqZjFWSkdMRUFpdXo2Vm5BNEFHYW0xaDdncE5JelNGZTY2RDNOdXJMS1ZoSk5rSG8wN045VjlCRTNYSE9ZbXlldWlycUcxbDltZEhnT2tEU0dkOCUyRkdXdGc5Um9hNTZscllkY2hEdFJRUExsQ2tFeXdLVlJTY0RmcnVybndDMmRpaVBUUmU0N2lWdGJuTFpEeGNrR0NrS1lwUE0lMkZScjNrYnlSaHNZT3RSRGlRb25Gb0JTSHJCT0kxOHJPZU9QdnI3NllyQ2VVYmY1ZlR2ak9kZEowZ1ExdU1Qa3U5ejZod2ppRVpoZ09NbiUyQmFhVWVIUUpJT2tNRDdLTUE1UVFQMDFIUDE4aFBiZnZEVHZaUEVUcWIyWWlTMUJXcm96TTZqazlTUEpKSGtaWjVxRmFndG9hTm5ieVpnMUZFNHNVUFJkbEFRcHdrZFNqdkRaQUolMkZveE50JTJCdzZObEdiUVZGbDVpS0xLS3NYQ0F3eUZRWjhTM2NpdTY1aG8xbEJKNSUyRmtaazNPQkdqcEpXR21WQ21zalRrUXZBOEpIQ1VVN3M1ZUltZXZ6ZyUyRmQ3QkdGaHpDQVJJZjh1Vk4zSjVIZWgxVk0lMkJIbGtvMnklMkZIQnhGME5Kb2xmbzM4ZUR1Skp4YmYwcm8lMkZuTXVyaDhoTSUyRnVwSDR0ZFQ4emNpT0ZzVEM4U0FnUW9KZlJ4S3pDdXZmdzBrJTJGOE1EeDd4cVV5ZXolMkJTNDhFU0lON0t5Nk9VcGZBdHJ4emh4MDNVUjRtMGMlMkZaRjd0bktXMm1tYTRsOXl1dGhUU0laSXZ4UGk2RWNwWlcwUE0weHRPempvJTJCZjRHUGZ2NHIxcU5xQVVGWXM5ZGlKTEJDMUNJYTdGWng4ZlVsd0kyMkx1TnYlMkZmTGJLTUFPZnRIOVR3UlhnNiUyRmlDREFBQUFBRWxGVGtTdVFtQ0MiKX0ueXVpLXNraW4tc2FtIC55dWktaC1zbGlkZXJ7YmFja2dyb3VuZDp1cmwoYmctaC5naWYpIG5vLXJlcGVhdCA1cHggMDtoZWlnaHQ6MjhweDt3aWR0aDoyMjhweH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtZGJxdW90ZS1mb250LmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1kYnF1b3RlLWZvbnQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTc5OWQ3Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1kYnF1b3RlLWZvbnQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLypjc3NsaW50IGZvbnRmYW1pbHk6IHRydWUqLwotCi0vKioKLSAqIEZvbwotICovCi0KLS55LWZmLTEgewotICAgIGZvbnQtZmFtaWx5OiJGb28gQmFyIixIZWx2ZXRpY2EsQXJpYWw7Ci0gICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKLX0KLQotLnVhLW9wIC55LWZmLTEgewotICAgIC8qIFNvbWUgQ29tbWVudCAqLwotICAgIGZvbnQtZmFtaWx5OkhlbHZldGljYSxBcmlhbDsKLX0KLQotLyoKLUZvbwotCi1CYXIKLSovCi0KLUBmb250LWZhY2UgewotCWZvbnQtZmFtaWx5OiAiRm9vIEJhciI7Ci0gICAgc3JjOiB1cmwoImRhdGE6Zm9udC90cnVldHlwZTtiYXNlNjQsZ1JiSVVGQUlyc1FOR2RpdEVXYkFVS3dBQSIpIGZvcm1hdCgidHJ1ZXR5cGUiKSwKLQkgICAgIHVybCgiaHR0cDovL3l1aWxpYnJhcnkuY29tL2ZvbnRzL2Zvby1iYXIuc3ZnI3dlYmZvbnRzZTIyZmV3d3IiKSBmb3JtYXQoInN2ZyIpOwotCWZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0JZm9udC1zdHlsZTogbm9ybWFsOwotfQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtZGJxdW90ZS1mb250LmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtZGJxdW90ZS1mb250LmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNGMwZWQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLWRicXVvdGUtZm9udC5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0ueS1mZi0xe2ZvbnQtZmFtaWx5OiJGb28gQmFyIixIZWx2ZXRpY2EsQXJpYWw7dGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5fS51YS1vcCAueS1mZi0xe2ZvbnQtZmFtaWx5OkhlbHZldGljYSxBcmlhbH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OiJGb28gQmFyIjtzcmM6dXJsKCJkYXRhOmZvbnQvdHJ1ZXR5cGU7YmFzZTY0LGdSYklVRkFJcnNRTkdkaXRFV2JBVUt3QUEiKSBmb3JtYXQoInRydWV0eXBlIiksdXJsKCJodHRwOi8veXVpbGlicmFyeS5jb20vZm9udHMvZm9vLWJhci5zdmcjd2ViZm9udHNlMjJmZXd3ciIpIGZvcm1hdCgic3ZnIik7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsfQotCi0KLQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtbm9uYmFzZTY0LWRvdWJsZXF1b3Rlcy5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtbm9uYmFzZTY0LWRvdWJsZXF1b3Rlcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNDVjOTQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLW5vbmJhc2U2NC1kb3VibGVxdW90ZXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotZGl2Lm5vbmJhc2U2NC1kb3VibGVxdW90ZXMgewotICAgIHdpZHRoOjEwMHB4OwotICAgIGhlaWdodDoxMDBweDsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgKLSAgICAgICAgImRhdGE6aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMEMlMDAlMDAlMDAlMEUlMDglMDMlMDAlMDAlMDAlMkNjJTBEJURFJTAwJTAwJTAwJUEyUExURVFRUSVGQSVGQSVGQSVGQyVGQyVGQyVFRSVFRSVFRSVBOSVBOSVBOSVFOSVFOSVFOSUwQSUwQSUwQSUwRCUwRCUwRDQ0NFBQUCVDRCVDRCVDRCVDQyVDQyVDQyVGNSVGNSVGNVVVVSVEMCVEMCVEMCcnJyVGOSVGOSVGOSVBNiVBNiVBNiU0MCU0MCU0MEZGRiVBMCVBMCVBMCU4OSU4OSU4OSU4RCU4RCU4RCUyMCUyMCUyMCUxNCUxNCUxNCVEQSVEQSVEQSVCNiVCNiVCNiUwMiUwMiUwMiU4NyU4NyU4NyU4MSU4MSU4MSVBQyVBQyVBQyUwRSUwRSUwRTExMSU3RCU3RCU3RCU5MiU5MiU5MjMzMyVCOSVCOSVCOSVCQyVCQyVCQ2hoaCkpKSVFMSVFMSVFMSUwMyUwMyUwMyVDQiVDQiVDQiVFQiVFQiVFQiVGRCVGRCVGRCVBMyVBMyVBMygoKCUwNCUwNCUwNCVDQSVDQSVDQXR0dCUyQyUyQyUyQyVGNCVGNCVGNCUwMCUwMCUwMCVGRiVGRiVGRiVENiVERSUwMiVDMyUwMCUwMCUwMDZ0Uk5TJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJTAwJUExJThGTjElMDAlMDAlMDBpSURBVCUwOCVEN0UlQzdFJTE2JTAyUSUxMCVDNSVEMGolQzMlREQlQkRxdyU1RSVGNiVCRjUlMDYlRDQlM0ZkJTk0a3glQkRmJURFNiVGRklBJUFCJUM4cVlqJTFGJUUzWGslOTMlRTAlQzhKWiUxMCU5MCU5RSUzQTElNjAlQkJZJTg1JUE4JUFFJTE0JUMwJTVFJTFBNiU4RSVDNXclMDIlNjAlOTklQzklRkElOUElMDMlNjAlOEMlRUZ6JThDJUNFJTBFblN1JTNGJTAxJUFEJUIyJTA2JTA0JUYwJTNDVCVGRiVCOG5rJTNGJTdDJTAxJUM1eiUxQiVGOSUyNiUyRiUzQXolMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MiIKLSAgICApOwotICAgIGJvcmRlcjoxcHggc29saWQgIzAwYWEwMDsKLX0KLQotc3Bhbi5vdGhlcmNzcyB7Ci0gICAgZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0gICAgZm9udC13ZWlnaHQ6aW5oZXJpdDsKLX0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1ub25iYXNlNjQtZG91YmxlcXVvdGVzLmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtbm9uYmFzZTY0LWRvdWJsZXF1b3Rlcy5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWNjNDFkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1ub25iYXNlNjQtZG91YmxlcXVvdGVzLmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1kaXYubm9uYmFzZTY0LWRvdWJsZXF1b3Rlc3t3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMEMlMDAlMDAlMDAlMEUlMDglMDMlMDAlMDAlMDAlMkNjJTBEJURFJTAwJTAwJTAwJUEyUExURVFRUSVGQSVGQSVGQSVGQyVGQyVGQyVFRSVFRSVFRSVBOSVBOSVBOSVFOSVFOSVFOSUwQSUwQSUwQSUwRCUwRCUwRDQ0NFBQUCVDRCVDRCVDRCVDQyVDQyVDQyVGNSVGNSVGNVVVVSVEMCVEMCVEMCcnJyVGOSVGOSVGOSVBNiVBNiVBNiU0MCU0MCU0MEZGRiVBMCVBMCVBMCU4OSU4OSU4OSU4RCU4RCU4RCUyMCUyMCUyMCUxNCUxNCUxNCVEQSVEQSVEQSVCNiVCNiVCNiUwMiUwMiUwMiU4NyU4NyU4NyU4MSU4MSU4MSVBQyVBQyVBQyUwRSUwRSUwRTExMSU3RCU3RCU3RCU5MiU5MiU5MjMzMyVCOSVCOSVCOSVCQyVCQyVCQ2hoaCkpKSVFMSVFMSVFMSUwMyUwMyUwMyVDQiVDQiVDQiVFQiVFQiVFQiVGRCVGRCVGRCVBMyVBMyVBMygoKCUwNCUwNCUwNCVDQSVDQSVDQXR0dCUyQyUyQyUyQyVGNCVGNCVGNCUwMCUwMCUwMCVGRiVGRiVGRiVENiVERSUwMiVDMyUwMCUwMCUwMDZ0Uk5TJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJTAwJUExJThGTjElMDAlMDAlMDBpSURBVCUwOCVEN0UlQzdFJTE2JTAyUSUxMCVDNSVEMGolQzMlREQlQkRxdyU1RSVGNiVCRjUlMDYlRDQlM0ZkJTk0a3glQkRmJURFNiVGRklBJUFCJUM4cVlqJTFGJUUzWGslOTMlRTAlQzhKWiUxMCU5MCU5RSUzQTElNjAlQkJZJTg1JUE4JUFFJTE0JUMwJTVFJTFBNiU4RSVDNXclMDIlNjAlOTklQzklRkElOUElMDMlNjAlOEMlRUZ6JThDJUNFJTBFblN1JTNGJTAxJUFEJUIyJTA2JTA0JUYwJTNDVCVGRiVCOG5rJTNGJTdDJTAxJUM1eiUxQiVGOSUyNiUyRiUzQXolMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MiIpO2JvcmRlcjoxcHggc29saWQgIzBhMH1zcGFuLm90aGVyY3Nze2ZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtbm9uYmFzZTY0LW5vcXVvdGVzLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1ub25iYXNlNjQtbm9xdW90ZXMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGJjOWIyLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1ub25iYXNlNjQtbm9xdW90ZXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotZGl2Lm5vbmJhc2U2NC1ub3F1b3RlcyB7Ci0gICAgd2lkdGg6MTAwcHg7Ci0gICAgaGVpZ2h0OjEwMHB4OwotICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCBkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTBDJTAwJTAwJTAwJTBFJTA4JTAzJTAwJTAwJTAwJTJDYyUwRCVERSUwMCUwMCUwMCVBMlBMVEVRUVElRkElRkElRkElRkMlRkMlRkMlRUUlRUUlRUUlQTklQTklQTklRTklRTklRTklMEElMEElMEElMEQlMEQlMEQ0NDRQUFAlQ0QlQ0QlQ0QlQ0MlQ0MlQ0MlRjUlRjUlRjVVVVUlRDAlRDAlRDBcJ1wnXCclRjklRjklRjklQTYlQTYlQTYlNDAlNDAlNDBGRkYlQTAlQTAlQTAlODklODklODklOEQlOEQlOEQlMjAlMjAlMjAlMTQlMTQlMTQlREElREElREElQjYlQjYlQjYlMDIlMDIlMDIlODclODclODclODElODElODElQUMlQUMlQUMlMEUlMEUlMEUxMTElN0QlN0QlN0QlOTIlOTIlOTIzMzMlQjklQjklQjklQkMlQkMlQkNoaGhcKVwpXCklRTElRTElRTElMDMlMDMlMDMlQ0IlQ0IlQ0IlRUIlRUIlRUIlRkQlRkQlRkQlQTMlQTMlQTNcKFwoXCglMDQlMDQlMDQlQ0ElQ0ElQ0F0dHQlMkMlMkMlMkMlRjQlRjQlRjQlMDAlMDAlMDAlRkYlRkYlRkYlRDYlREUlMDIlQzMlMDAlMDAlMDA2dFJOUyVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiUwMCVBMSU4Rk4xJTAwJTAwJTAwaUlEQVQlMDglRDdFJUM3RSUxNiUwMlElMTAlQzUlRDBqJUMzJUREJUJEcXclNUUlRjYlQkY1JTA2JUQ0JTNGZCU5NGt4JUJEZiVERTYlRkZJQSVBQiVDOHFZaiUxRiVFM1hrJTkzJUUwJUM4SlolMTAlOTAlOUUlM0ExJTYwJUJCWSU4NSVBOCVBRSUxNCVDMCU1RSUxQTYlOEUlQzV3JTAyJTYwJTk5JUM5JUZBJTlBJTAzJTYwJThDJUVGeiU4QyVDRSUwRW5TdSUzRiUwMSVBRCVCMiUwNiUwNCVGMCUzQ1QlRkYlQjhuayUzRiU3QyUwMSVDNXolMUIlRjklMjYlMkYlM0F6JTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODIgKTsKLSAgICBib3JkZXI6MXB4IHNvbGlkIHJlZDsKLX0KLQotc3Bhbi5vdGhlcmNzcyB7Ci0gICAgZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0gICAgZm9udC13ZWlnaHQ6aW5oZXJpdDsKLX0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1ub25iYXNlNjQtbm9xdW90ZXMuY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1ub25iYXNlNjQtbm9xdW90ZXMuY3NzLm1pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY0YmYwOC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtbm9uYmFzZTY0LW5vcXVvdGVzLmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1kaXYubm9uYmFzZTY0LW5vcXVvdGVze3dpZHRoOjEwMHB4O2hlaWdodDoxMDBweDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTBDJTAwJTAwJTAwJTBFJTA4JTAzJTAwJTAwJTAwJTJDYyUwRCVERSUwMCUwMCUwMCVBMlBMVEVRUVElRkElRkElRkElRkMlRkMlRkMlRUUlRUUlRUUlQTklQTklQTklRTklRTklRTklMEElMEElMEElMEQlMEQlMEQ0NDRQUFAlQ0QlQ0QlQ0QlQ0MlQ0MlQ0MlRjUlRjUlRjVVVVUlRDAlRDAlRDBcJ1wnXCclRjklRjklRjklQTYlQTYlQTYlNDAlNDAlNDBGRkYlQTAlQTAlQTAlODklODklODklOEQlOEQlOEQlMjAlMjAlMjAlMTQlMTQlMTQlREElREElREElQjYlQjYlQjYlMDIlMDIlMDIlODclODclODclODElODElODElQUMlQUMlQUMlMEUlMEUlMEUxMTElN0QlN0QlN0QlOTIlOTIlOTIzMzMlQjklQjklQjklQkMlQkMlQkNoaGhcKVwpXCklRTElRTElRTElMDMlMDMlMDMlQ0IlQ0IlQ0IlRUIlRUIlRUIlRkQlRkQlRkQlQTMlQTMlQTNcKFwoXCglMDQlMDQlMDQlQ0ElQ0ElQ0F0dHQlMkMlMkMlMkMlRjQlRjQlRjQlMDAlMDAlMDAlRkYlRkYlRkYlRDYlREUlMDIlQzMlMDAlMDAlMDA2dFJOUyVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiUwMCVBMSU4Rk4xJTAwJTAwJTAwaUlEQVQlMDglRDdFJUM3RSUxNiUwMlElMTAlQzUlRDBqJUMzJUREJUJEcXclNUUlRjYlQkY1JTA2JUQ0JTNGZCU5NGt4JUJEZiVERTYlRkZJQSVBQiVDOHFZaiUxRiVFM1hrJTkzJUUwJUM4SlolMTAlOTAlOUUlM0ExJTYwJUJCWSU4NSVBOCVBRSUxNCVDMCU1RSUxQTYlOEUlQzV3JTAyJTYwJTk5JUM5JUZBJTlBJTAzJTYwJThDJUVGeiU4QyVDRSUwRW5TdSUzRiUwMSVBRCVCMiUwNiUwNCVGMCUzQ1QlRkYlQjhuayUzRiU3QyUwMSVDNXolMUIlRjklMjYlMkYlM0F6JTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODIpO2JvcmRlcjoxcHggc29saWQgcmVkfXNwYW4ub3RoZXJjc3N7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Zm9udC13ZWlnaHQ6aW5oZXJpdH0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1ub25iYXNlNjQtc2luZ2xlcXVvdGVzLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1ub25iYXNlNjQtc2luZ2xlcXVvdGVzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ4ODU0OS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtbm9uYmFzZTY0LXNpbmdsZXF1b3Rlcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKiBTb21lIENvbW1lbnQgKi8KLQotZGl2Lm5vbmJhc2U2NC1zaW5nbGVxdW90ZXMgewotICAgIHdpZHRoOjEwMHB4OwotICAgIGhlaWdodDoxMDBweDsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGF0YTppbWFnZS9wbmcsJTg5UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUwQyUwMCUwMCUwMCUwRSUwOCUwMyUwMCUwMCUwMCUyQ2MlMEQlREUlMDAlMDAlMDAlQTJQTFRFUVFRJUZBJUZBJUZBJUZDJUZDJUZDJUVFJUVFJUVFJUE5JUE5JUE5JUU5JUU5JUU5JTBBJTBBJTBBJTBEJTBEJTBENDQ0UFBQJUNEJUNEJUNEJUNDJUNDJUNDJUY1JUY1JUY1VVVVJUQwJUQwJUQwXCdcJ1wnJUY5JUY5JUY5JUE2JUE2JUE2JTQwJTQwJTQwRkZGJUEwJUEwJUEwJTg5JTg5JTg5JThEJThEJThEJTIwJTIwJTIwJTE0JTE0JTE0JURBJURBJURBJUI2JUI2JUI2JTAyJTAyJTAyJTg3JTg3JTg3JTgxJTgxJTgxJUFDJUFDJUFDJTBFJTBFJTBFMTExJTdEJTdEJTdEJTkyJTkyJTkyMzMzJUI5JUI5JUI5JUJDJUJDJUJDaGhoKSkpJUUxJUUxJUUxJTAzJTAzJTAzJUNCJUNCJUNCJUVCJUVCJUVCJUZEJUZEJUZEJUEzJUEzJUEzKCgoJTA0JTA0JTA0JUNBJUNBJUNBdHR0JTJDJTJDJTJDJUY0JUY0JUY0JTAwJTAwJTAwJUZGJUZGJUZGJUQ2JURFJTAyJUMzJTAwJTAwJTAwNnRSTlMlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlMDAlQTElOEZOMSUwMCUwMCUwMGlJREFUJTA4JUQ3RSVDN0UlMTYlMDJRJTEwJUM1JUQwaiVDMyVERCVCRHF3JTVFJUY2JUJGNSUwNiVENCUzRmQlOTRreCVCRGYlREU2JUZGSUElQUIlQzhxWWolMUYlRTNYayU5MyVFMCVDOEpaJTEwJTkwJTlFJTNBMSU2MCVCQlklODUlQTglQUUlMTQlQzAlNUUlMUE2JThFJUM1dyUwMiU2MCU5OSVDOSVGQSU5QSUwMyU2MCU4QyVFRnolOEMlQ0UlMEVuU3UlM0YlMDElQUQlQjIlMDYlMDQlRjAlM0NUJUZGJUI4bmslM0YlN0MlMDElQzV6JTFCJUY5JTI2JTJGJTNBeiUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyJyk7Ci0gICAgYm9yZGVyOjFweCBzb2xpZCAjMDAwMGFhOwotfQotCi0vKiBTb21lIE90aGVyIENvbW1lbnQgKi8KLQotc3Bhbi5vdGhlcmNzcyB7Ci0gICAgZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0gICAgZm9udC13ZWlnaHQ6aW5oZXJpdDsKLX0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1ub25iYXNlNjQtc2luZ2xlcXVvdGVzLmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtbm9uYmFzZTY0LXNpbmdsZXF1b3Rlcy5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWRiZjA2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1ub25iYXNlNjQtc2luZ2xlcXVvdGVzLmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWRpdi5ub25iYXNlNjQtc2luZ2xlcXVvdGVze3dpZHRoOjEwMHB4O2hlaWdodDoxMDBweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGF0YTppbWFnZS9wbmcsJTg5UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUwQyUwMCUwMCUwMCUwRSUwOCUwMyUwMCUwMCUwMCUyQ2MlMEQlREUlMDAlMDAlMDAlQTJQTFRFUVFRJUZBJUZBJUZBJUZDJUZDJUZDJUVFJUVFJUVFJUE5JUE5JUE5JUU5JUU5JUU5JTBBJTBBJTBBJTBEJTBEJTBENDQ0UFBQJUNEJUNEJUNEJUNDJUNDJUNDJUY1JUY1JUY1VVVVJUQwJUQwJUQwXCdcJ1wnJUY5JUY5JUY5JUE2JUE2JUE2JTQwJTQwJTQwRkZGJUEwJUEwJUEwJTg5JTg5JTg5JThEJThEJThEJTIwJTIwJTIwJTE0JTE0JTE0JURBJURBJURBJUI2JUI2JUI2JTAyJTAyJTAyJTg3JTg3JTg3JTgxJTgxJTgxJUFDJUFDJUFDJTBFJTBFJTBFMTExJTdEJTdEJTdEJTkyJTkyJTkyMzMzJUI5JUI5JUI5JUJDJUJDJUJDaGhoKSkpJUUxJUUxJUUxJTAzJTAzJTAzJUNCJUNCJUNCJUVCJUVCJUVCJUZEJUZEJUZEJUEzJUEzJUEzKCgoJTA0JTA0JTA0JUNBJUNBJUNBdHR0JTJDJTJDJTJDJUY0JUY0JUY0JTAwJTAwJTAwJUZGJUZGJUZGJUQ2JURFJTAyJUMzJTAwJTAwJTAwNnRSTlMlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlMDAlQTElOEZOMSUwMCUwMCUwMGlJREFUJTA4JUQ3RSVDN0UlMTYlMDJRJTEwJUM1JUQwaiVDMyVERCVCRHF3JTVFJUY2JUJGNSUwNiVENCUzRmQlOTRreCVCRGYlREU2JUZGSUElQUIlQzhxWWolMUYlRTNYayU5MyVFMCVDOEpaJTEwJTkwJTlFJTNBMSU2MCVCQlklODUlQTglQUUlMTQlQzAlNUUlMUE2JThFJUM1dyUwMiU2MCU5OSVDOSVGQSU5QSUwMyU2MCU4QyVFRnolOEMlQ0UlMEVuU3UlM0YlMDElQUQlQjIlMDYlMDQlRjAlM0NUJUZGJUI4bmslM0YlN0MlMDElQzV6JTFCJUY5JTI2JTJGJTNBeiUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyJyk7Ym9yZGVyOjFweCBzb2xpZCAjMDBhfXNwYW4ub3RoZXJjc3N7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Zm9udC13ZWlnaHQ6aW5oZXJpdH0KLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLW5vcXVvdGUtbXVsdGlsaW5lLWZvbnQuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLW5vcXVvdGUtbXVsdGlsaW5lLWZvbnQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjJjN2VkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1ub3F1b3RlLW11bHRpbGluZS1mb250LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qY3NzbGludCBmb250ZmFtaWx5OiB0cnVlKi8KLQotLyoqCi0gKiBGb28KLSAqLwotCi0ueS1mZi0xIHsKLSAgICBmb250LWZhbWlseToiRm9vIEJhciIsSGVsdmV0aWNhLEFyaWFsOwotICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Ci19Ci0KLS51YS1vcCAueS1mZi0xIHsKLSAgICAvKiBTb21lIENvbW1lbnQgKi8KLSAgICBmb250LWZhbWlseTpIZWx2ZXRpY2EsQXJpYWw7Ci19Ci0KLS8qCi1Gb28KLQotQmFyCi0qLwotCi1AZm9udC1mYWNlIHsKLSAgICBmb250LWZhbWlseTogIkZvbyBCYXIiOwotICAgIHNyYzogdXJsKAotICAgICAgICAgICAgZGF0YTpmb250L3RydWV0eXBlO2Jhc2U2NCxnUmJJVUZBSXJzUU5HZGl0RVdiQVVLd0FBKSBmb3JtYXQoInRydWV0eXBlIiksCi0gICAgICAgICB1cmwoImh0dHA6Ly95dWlsaWJyYXJ5LmNvbS9mb250cy9mb28tYmFyLnN2ZyN3ZWJmb250c2UyMmZld3dyIikgZm9ybWF0KCJzdmciKTsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKLX0KLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLW5vcXVvdGUtbXVsdGlsaW5lLWZvbnQuY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1ub3F1b3RlLW11bHRpbGluZS1mb250LmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMzJlMzMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLW5vcXVvdGUtbXVsdGlsaW5lLWZvbnQuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLnktZmYtMXtmb250LWZhbWlseToiRm9vIEJhciIsSGVsdmV0aWNhLEFyaWFsO3RleHQtcmVuZGVyaW5nOm9wdGltaXplTGVnaWJpbGl0eX0udWEtb3AgLnktZmYtMXtmb250LWZhbWlseTpIZWx2ZXRpY2EsQXJpYWx9QGZvbnQtZmFjZXtmb250LWZhbWlseToiRm9vIEJhciI7c3JjOnVybChkYXRhOmZvbnQvdHJ1ZXR5cGU7YmFzZTY0LGdSYklVRkFJcnNRTkdkaXRFV2JBVUt3QUEpIGZvcm1hdCgidHJ1ZXR5cGUiKSx1cmwoImh0dHA6Ly95dWlsaWJyYXJ5LmNvbS9mb250cy9mb28tYmFyLnN2ZyN3ZWJmb250c2UyMmZld3dyIikgZm9ybWF0KCJzdmciKTtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWx9Ci0KLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLXJlYWxkYXRhLWRvdWJsZXF1b3Rlcy5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtcmVhbGRhdGEtZG91YmxlcXVvdGVzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg2MDk3Yy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtcmVhbGRhdGEtZG91YmxlcXVvdGVzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIHsKLSAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7Ci0gICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsgCi19Ci0KLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctZmlyc3QsCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LW1pZGRsZSwgCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWxhc3QgewotICAgIGJvcmRlci1yYWRpdXM6M3B4OwotICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4OwotICAgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4OwotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBWUFBQUFCQ0FZQUFBRDl5ZC93QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFCSkpSRUZVZU5waVpHQmdTR1BBQWdBQ0RBQUlrQUJvRnlsb1pRQUFBQUJKUlU1RXJrSmdnZz09Iik7Ci19Ci0KLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctZmlyc3QsCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWxhc3QgewotICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7IAotICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDsKLQotICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDsgCi0gICAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ci0KLSAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6MDsgCi0gICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6MDsKLX0KLQotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0IHsKLSAgICBib3JkZXItcmFkaXVzOjA7IAotICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDsgCi0gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7IAotCi0gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7IAotICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4OyAKLSAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4OyAKLSAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7Ci0KLSAgICAtbW96LWJvcmRlci1yYWRpdXM6MDsgCi0gICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjNweDsgCi0gICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6M3B4OyAKLSAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOwotfQotCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LW1pZGRsZSB7Ci0gICAgYm9yZGVyLXJhZGl1czowOyAKLSAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7Ci0gICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOyAKLQotICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGVZKDEpOyAKLSAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4teTogMDsKLQotICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwwKSBzY2FsZVkoMSk7IAotICAgIC1tb3otdHJhbnNmb3JtLW9yaWdpbjogMCAwOwotfQotCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LWZpcnN0LAotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1sYXN0IHsKLSAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKLSAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7Ci0gCi0gICAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKLSAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDsKLQotICAgIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogMDsKLSAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogM3B4OwotfQotCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LWxhc3QgewotICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7IAotICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7Ci0KLSAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7IAotICAgIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDsKLQotICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiAwOyAKLSAgICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDNweDsgCi19Ci0KLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctbWlkZGxlIHsgCi0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVgoMSk7IAotICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCAwOwotCi0gICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLDApIHNjYWxlWCgxKTsgCi0gICAgLW1vei10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7Ci19Ci0KLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLXZlcnQtYmFzaWMgLnl1aTMtc2Nyb2xsdmlldy1jaGlsZCwKLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6LWJhc2ljIC55dWkzLXNjcm9sbHZpZXctY2hpbGQgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNhYWE7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtcmVhbGRhdGEtZG91YmxlcXVvdGVzLmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtcmVhbGRhdGEtZG91YmxlcXVvdGVzLmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ZTc2MDAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLXJlYWxkYXRhLWRvdWJsZXF1b3Rlcy5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXJ7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApOy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctZmlyc3QsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1taWRkbGUsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBWUFBQUFCQ0FZQUFBRDl5ZC93QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFCSkpSRUZVZU5waVpHQmdTR1BBQWdBQ0RBQUlrQUJvRnlsb1pRQUFBQUJKUlU1RXJrSmdnZz09Iil9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1maXJzdCwueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWxhc3R7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDowOy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjB9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7LW1vei1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjNweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDozcHg7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1taWRkbGV7Ym9yZGVyLXJhZGl1czowOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVkoMSk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXk6MDstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKSBzY2FsZVkoMSk7LW1vei10cmFuc2Zvcm0tb3JpZ2luOjAgMH0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LWZpcnN0LC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDowOy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjNweH0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LWxhc3R7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDowOy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDozcHh9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1taWRkbGV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlWCgxKTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MCAwOy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApIHNjYWxlWCgxKTstbW96LXRyYW5zZm9ybS1vcmlnaW46MCAwfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLXZlcnQtYmFzaWMgLnl1aTMtc2Nyb2xsdmlldy1jaGlsZCwueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3Jpei1iYXNpYyAueXVpMy1zY3JvbGx2aWV3LWNoaWxke2JhY2tncm91bmQtY29sb3I6I2FhYTtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtcmVhbGRhdGEtbm9xdW90ZXMuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLXJlYWxkYXRhLW5vcXVvdGVzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRmNzIwZS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtcmVhbGRhdGEtbm9xdW90ZXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgewotICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsKLSAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOyAKLX0KLQotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1maXJzdCwKLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbWlkZGxlLCAKLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbGFzdCB7Ci0gICAgYm9yZGVyLXJhZGl1czozcHg7Ci0gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7Ci0gICAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVlBQUFBQkNBWUFBQUQ5eWQvd0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBQkpKUkVGVWVOcGlaR0JnU0dQQUFnQUNEQUFJa0FCb0Z5bG9aUUFBQUFCSlJVNUVya0pnZ2c9PSk7Ci19Ci0KLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctZmlyc3QsCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWxhc3QgewotICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7IAotICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDsKLQotICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDsgCi0gICAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ci0KLSAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6MDsgCi0gICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6MDsKLX0KLQotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0IHsKLSAgICBib3JkZXItcmFkaXVzOjA7IAotICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDsgCi0gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7IAotCi0gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7IAotICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4OyAKLSAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4OyAKLSAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7Ci0KLSAgICAtbW96LWJvcmRlci1yYWRpdXM6MDsgCi0gICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjNweDsgCi0gICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6M3B4OyAKLSAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOwotfQotCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LW1pZGRsZSB7Ci0gICAgYm9yZGVyLXJhZGl1czowOyAKLSAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7Ci0gICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOyAKLQotICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGVZKDEpOyAKLSAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4teTogMDsKLQotICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwwKSBzY2FsZVkoMSk7IAotICAgIC1tb3otdHJhbnNmb3JtLW9yaWdpbjogMCAwOwotfQotCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LWZpcnN0LAotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1sYXN0IHsKLSAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKLSAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7Ci0gCi0gICAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKLSAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDsKLQotICAgIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogMDsKLSAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogM3B4OwotfQotCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LWxhc3QgewotICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7IAotICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7Ci0KLSAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7IAotICAgIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDsKLQotICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiAwOyAKLSAgICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDNweDsgCi19Ci0KLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctbWlkZGxlIHsgCi0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVgoMSk7IAotICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCAwOwotCi0gICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLDApIHNjYWxlWCgxKTsgCi0gICAgLW1vei10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7Ci19Ci0KLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLXZlcnQtYmFzaWMgLnl1aTMtc2Nyb2xsdmlldy1jaGlsZCwKLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6LWJhc2ljIC55dWkzLXNjcm9sbHZpZXctY2hpbGQgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNhYWE7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtcmVhbGRhdGEtbm9xdW90ZXMuY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1yZWFsZGF0YS1ub3F1b3Rlcy5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTBmOWZjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1yZWFsZGF0YS1ub3F1b3Rlcy5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXJ7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApOy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctZmlyc3QsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1taWRkbGUsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFZQUFBQUJDQVlBQUFEOXlkL3dBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUJKSlJFRlVlTnBpWkdCZ1NHUEFBZ0FDREFBSWtBQm9GeWxvWlFBQUFBQkpSVTVFcmtKZ2dnPT0pfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctZmlyc3QsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDowfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApOy1tb3otYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6M3B4Oy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbWlkZGxle2JvcmRlci1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGVZKDEpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi15OjA7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCkgc2NhbGVZKDEpOy1tb3otdHJhbnNmb3JtLW9yaWdpbjowIDB9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1maXJzdCwueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LWxhc3R7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDozcHh9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6MDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6M3B4fS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctbWlkZGxley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVgoMSk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKSBzY2FsZVgoMSk7LW1vei10cmFuc2Zvcm0tb3JpZ2luOjAgMH0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci12ZXJ0LWJhc2ljIC55dWkzLXNjcm9sbHZpZXctY2hpbGQsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXotYmFzaWMgLnl1aTMtc2Nyb2xsdmlldy1jaGlsZHtiYWNrZ3JvdW5kLWNvbG9yOiNhYWE7YmFja2dyb3VuZC1pbWFnZTpub25lfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1yZWFsZGF0YS1zaW5nbGVxdW90ZXMuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLXJlYWxkYXRhLXNpbmdsZXF1b3Rlcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNmVjN2EuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLXJlYWxkYXRhLXNpbmdsZXF1b3Rlcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciB7Ci0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwotICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7IAotfQotCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWZpcnN0LAotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1taWRkbGUsIAotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0IHsKLSAgICBib3JkZXItcmFkaXVzOjNweDsKLSAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKLSAgICAtbW96LWJvcmRlci1yYWRpdXM6IDNweDsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVlBQUFBQkNBWUFBQUQ5eWQvd0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBQkpKUkVGVWVOcGlaR0JnU0dQQUFnQUNEQUFJa0FCb0Z5bG9aUUFBQUFCSlJVNUVya0pnZ2c9PScpOwotfQotCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWZpcnN0LAotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0IHsKLSAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowOyAKLSAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ci0KLSAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7IAotICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowOwotCi0gICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjA7IAotICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjA7Ci19Ci0KLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbGFzdCB7Ci0gICAgYm9yZGVyLXJhZGl1czowOyAKLSAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHg7IAotICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4OyAKLQotICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czowOyAKLSAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDsgCi0gICAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDsgCi0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwotCi0gICAgLW1vei1ib3JkZXItcmFkaXVzOjA7IAotICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDozcHg7IAotICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjNweDsgCi0gICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsKLX0KLQotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1taWRkbGUgewotICAgIGJvcmRlci1yYWRpdXM6MDsgCi0gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwotICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsgCi0KLSAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlWSgxKTsgCi0gICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXk6IDA7Ci0KLSAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsMCkgc2NhbGVZKDEpOyAKLSAgICAtbW96LXRyYW5zZm9ybS1vcmlnaW46IDAgMDsKLX0KLQotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1maXJzdCwKLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctbGFzdCB7Ci0gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7Ci0gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4OwotIAotICAgIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7Ci0gICAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7Ci0KLSAgICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDA7Ci0gICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDNweDsKLX0KLQotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1sYXN0IHsKLSAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOyAKLSAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4OwotCi0gICAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOyAKLSAgICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7Ci0KLSAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogMDsgCi0gICAgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiAzcHg7IAotfQotCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LW1pZGRsZSB7IAotICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGVYKDEpOyAKLSAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAgMDsKLQotICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwwKSBzY2FsZVgoMSk7IAotICAgIC1tb3otdHJhbnNmb3JtLW9yaWdpbjogMCAwOwotfQotCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci12ZXJ0LWJhc2ljIC55dWkzLXNjcm9sbHZpZXctY2hpbGQsCi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3Jpei1iYXNpYyAueXVpMy1zY3JvbGx2aWV3LWNoaWxkIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWFhOwotICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLXJlYWxkYXRhLXNpbmdsZXF1b3Rlcy5jc3MubWluIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLXJlYWxkYXRhLXNpbmdsZXF1b3Rlcy5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTRlMmM2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1yZWFsZGF0YS1zaW5nbGVxdW90ZXMuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWZpcnN0LC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbWlkZGxlLC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVlBQUFBQkNBWUFBQUQ5eWQvd0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBQkpKUkVGVWVOcGlaR0JnU0dQQUFnQUNEQUFJa0FCb0Z5bG9aUUFBQUFCSlJVNUVya0pnZ2c9PScpfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctZmlyc3QsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDowfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApOy1tb3otYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6M3B4Oy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbWlkZGxle2JvcmRlci1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGVZKDEpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi15OjA7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCkgc2NhbGVZKDEpOy1tb3otdHJhbnNmb3JtLW9yaWdpbjowIDB9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1maXJzdCwueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LWxhc3R7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDozcHh9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6MDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6M3B4fS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctbWlkZGxley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVgoMSk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKSBzY2FsZVgoMSk7LW1vei10cmFuc2Zvcm0tb3JpZ2luOjAgMH0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci12ZXJ0LWJhc2ljIC55dWkzLXNjcm9sbHZpZXctY2hpbGQsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXotYmFzaWMgLnl1aTMtc2Nyb2xsdmlldy1jaGlsZHtiYWNrZ3JvdW5kLWNvbG9yOiNhYWE7YmFja2dyb3VuZC1pbWFnZTpub25lfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1yZWFsZGF0YS15dWlhcHAuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLXJlYWxkYXRhLXl1aWFwcC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZDYxNWQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLXJlYWxkYXRhLXl1aWFwcC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotaHRtbCB7Ci0gICAgYmFja2dyb3VuZDogI2ZmZjsKLSAgICBjb2xvcjogIzU1NTsKLSAgICBoZWlnaHQ6IDEwMCU7Ci19Ci0gCi0jaGQsICNiZCwgI2Z0IHsKLSAgICBwYWRkaW5nOiAwIDUwcHg7Ci19Ci0gCi0jYmQgewotICAgIHBhZGRpbmctYm90dG9tOiA1MHB4OwotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMDA2ZTljOwotfQotIAotI2Z0IHsKLSAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCBuby1yZXBlYXQgMCUgMTAwJTsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEY0FBQUFlQ0FNQUFBQy9wbmFLQUFBQXdGQk1WRVVrWElBb1lZUW9ZWVFvWVlReWFvMDJicEU2Y3BRNmNwUkVlNTFMZ3FOVWlxdFVpcXRVaXF0Wmo3QmNrck5sbXJ0bG1ydGxtcnRyb01CM3FzcDNxc3AzcXNwK3NkQ0h1ZGlIdWRpSHVkaUh1ZGlQd04rWXlPYVl5T2FZeU9hZjBPMmcwTzZuMXZPbjF2T24xdk9uMXZPdzN2dTQ1ZjI0NWYyNDVmM0I3ZjdLOWY3SzlmN0s5ZjdYL3Y3WC92N3AvLzdwLy83OS8vNzkvLzRBQUFCaEFHTUFid0J6QUM0QWN3QjBBSElBYVFCdUFHY0Fjd0FCQUFBQXdJd21Hd0VBQUFCUVFLRlVBQUFBUUhSU1RsUC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy84QS8vLy8vLy8vLy8vLy8vLy8wcGZTYndBQUFkdEpSRUZVT0kyTmxOR3FnekFNaHYvQ2xEbFFRY0ZkS094NE1jRkNLY0gzZjdlVHRMV3IwN21GaVV2Ynp6OU5rMkxaR1JINTkzN3FaVGlHeUV4MENyNXhRcEVkNnh6TnVlQ0djOVN6VW1BelA4Y3BsTzF6Z1JSdXRCQWxNOUVoWndrbldqMUxLWGt3Yk9Wb2pUcU1FcEtaT2ZlVUQzT25SMjRWV2VKZjFPT0JUblRndzh6WnIzTHlPbGJkcldyZEdscEc2QWx6NE5pM1JjVDRMZG04d0hwT285WW81Q1BzZG5nTTZEM0htTGxFU3JnSEQrWXZydEV1VWVMZU1mN3g3ajIzR0pWZ2JKb0hzMC9jSTNCN1ROa2ZPTjVidHNFVXJ2U2RZNjk0VTBQOW5YTXAybURzZGJMbVkxNENOOFhEanR6Z285Q3VxcFluR29Nc2NEVW1uMDhxc2JPbi8zTHRlNnJnUDFlTTdxUTFZTVAreVBoaVRteDJsYURRc3B5dGdKSTFNYkl6Wjd5SGZqMi9oWVl0WjF4TU00ZGMzaVR1a2pnSnlLc3JVQkVINHVxRlhOVWgzYVh4dFdqYkMzRHBIOExSVlBKOE1YTG9BOGZzejUxdWU3M1ErMXo3UmtURUYwZFdhMW81YTgwMDFDNlpiR3V6aDBiU1RvOWlTOFgrQy9OV2JmVFc1dVo5VnU0UWFMMjBYdjN1aGd5clpVWFZ0STJOZlMzZmJ6Z1A3NWROZWsvWWJyTCtrL0V5a2VjdVpmNlpPekRKWXNmOVBDVjN4aEZIcTcwNDNtdytIMXlsVys1QWI1anBBRHVQTTJaMVAzUE9MV25VRy9zSG5JRHNxa09qbHFvQUFBQUFTVVZPUks1Q1lJST0pOwotICAgIC8qIGltYWdlIHdpZHRoOiA1NXB4ICovCi0gICAgcGFkZGluZzogMCAwIDQwcHggMDsKLSAgICBtYXJnaW46IDUwcHg7Ci19Ci0gCi0jaGQsICNiZCB7Ci0gICAgYmFja2dyb3VuZDogI2Y5ZjlmOTsKLX0KLSAKLWJvZHkgewotICAgIG1hcmdpbjogMDsKLSAgICBwYWRkaW5nOiAwOwotICAgIGZvbnQ6IDEycHggIkhlbHZldGljYSBOdWV1ZSIsIEFyaWFsLCBzYW5zLXNlcmlmOwotfQotIAotI2hkIHsKLSAgICBjb2xvcjogI2ZmZjsKLSAgICBwYWRkaW5nLXRvcDogNTBweDsKLSAgICBtYXJnaW46IDA7Ci19Ci0gCi0jaGQsIGgxLCBoMiwgcCwgLmNvbG9yIHsKLSAgICBtYXJnaW46IGF1dG87Ci19Ci0gCi1oMSwgaDIsIGEgewotICAgIGNvbG9yOiAjMDA2ZTljOwotfQotIAotaDEsIGgyIHsKLSAgICBtYXJnaW4tdG9wOiAwOwotfQotIAotaDQgLnRpdGxlICB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgbGV0dGVyLXNwYWNpbmc6IC0ycHg7Ci0gICAgZm9udC1zaXplOiA0N3B4OwotICAgIHRleHQtc2hhZG93OiAwIDFweCAwICMzNjk7Ci0gICAgYmFja2dyb3VuZDogIzAwNmU5ZDsKLSAgICBjb2xvcjogI2ZmZjsKLSAgICBwYWRkaW5nOiAwIDEwcHg7Ci19Ci0gCi1oNCB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgZmxvYXQ6IHJpZ2h0OwotICAgIG1hcmdpbjogMCAwIDAgMjBweDsKLX0KLSAKLWg0IC53aGF0IHsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBwYWRkaW5nOiA0cHg7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci19Ci0gCi1oNCAudmVyc2lvbiB7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotICAgIGNvbG9yOiAjY2NjOwotfQotIAotaDIgewotICAgIGZvbnQtc2l6ZTogNDBweDsKLSAgICBmb250LWZhbWlseTogIkhlbHZldGljYU5ldWUtTGlnaHQiLCAiSGVsdmV0aWNhIE5ldWUgTGlnaHQiLAotICAgICAgICAgICAgICAgICAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmOwotICAgIGZvbnQtd2VpZ2h0OiAzMDA7Ci19Ci0gCi1oNCwgcCB7Ci0gICAgcGFkZGluZzogNnB4IDAgNnB4OwotfQotIAotI2Z0IHAuZmluZSwgI2Z0IHAuZmluZSBhIHsKLSAgICBjb2xvcjogIzk5OTsKLX0KLSAKLSNmdCBwLmludHJvIHsKLSAgICBmb250LXNpemU6IDEycHg7Ci19Ci0gCi0jYmQgewotICAgIGZvbnQtc2l6ZTogMTRweDsKLSAgICBjb2xvcjogIzY2NjsKLX0KLSAKLSNmdCBwIHsKLSAgICBmb250LXNpemU6IDExcHg7Ci19CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtcmVhbGRhdGEteXVpYXBwLmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtcmVhbGRhdGEteXVpYXBwLmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNTg2NjMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kYXRhdXJsLXJlYWxkYXRhLXl1aWFwcC5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotaHRtbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzU1NTtoZWlnaHQ6MTAwJX0jaGQsI2JkLCNmdHtwYWRkaW5nOjAgNTBweH0jYmR7cGFkZGluZy1ib3R0b206NTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMDA2ZTljfSNmdHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEY0FBQUFlQ0FNQUFBQy9wbmFLQUFBQXdGQk1WRVVrWElBb1lZUW9ZWVFvWVlReWFvMDJicEU2Y3BRNmNwUkVlNTFMZ3FOVWlxdFVpcXRVaXF0Wmo3QmNrck5sbXJ0bG1ydGxtcnRyb01CM3FzcDNxc3AzcXNwK3NkQ0h1ZGlIdWRpSHVkaUh1ZGlQd04rWXlPYVl5T2FZeU9hZjBPMmcwTzZuMXZPbjF2T24xdk9uMXZPdzN2dTQ1ZjI0NWYyNDVmM0I3ZjdLOWY3SzlmN0s5ZjdYL3Y3WC92N3AvLzdwLy83OS8vNzkvLzRBQUFCaEFHTUFid0J6QUM0QWN3QjBBSElBYVFCdUFHY0Fjd0FCQUFBQXdJd21Hd0VBQUFCUVFLRlVBQUFBUUhSU1RsUC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy84QS8vLy8vLy8vLy8vLy8vLy8wcGZTYndBQUFkdEpSRUZVT0kyTmxOR3FnekFNaHYvQ2xEbFFRY0ZkS094NE1jRkNLY0gzZjdlVHRMV3IwN21GaVV2Ynp6OU5rMkxaR1JINTkzN3FaVGlHeUV4MENyNXhRcEVkNnh6TnVlQ0djOVN6VW1BelA4Y3BsTzF6Z1JSdXRCQWxNOUVoWndrbldqMUxLWGt3Yk9Wb2pUcU1FcEtaT2ZlVUQzT25SMjRWV2VKZjFPT0JUblRndzh6WnIzTHlPbGJkcldyZEdscEc2QWx6NE5pM1JjVDRMZG04d0hwT285WW81Q1BzZG5nTTZEM0htTGxFU3JnSEQrWXZydEV1VWVMZU1mN3g3ajIzR0pWZ2JKb0hzMC9jSTNCN1ROa2ZPTjVidHNFVXJ2U2RZNjk0VTBQOW5YTXAybURzZGJMbVkxNENOOFhEanR6Z285Q3VxcFluR29Nc2NEVW1uMDhxc2JPbi8zTHRlNnJnUDFlTTdxUTFZTVAreVBoaVRteDJsYURRc3B5dGdKSTFNYkl6Wjd5SGZqMi9oWVl0WjF4TU00ZGMzaVR1a2pnSnlLc3JVQkVINHVxRlhOVWgzYVh4dFdqYkMzRHBIOExSVlBKOE1YTG9BOGZzejUxdWU3M1ErMXo3UmtURUYwZFdhMW81YTgwMDFDNlpiR3V6aDBiU1RvOWlTOFgrQy9OV2JmVFc1dVo5VnU0UWFMMjBYdjN1aGd5clpVWFZ0STJOZlMzZmJ6Z1A3NWROZWsvWWJyTCtrL0V5a2VjdVpmNlpPekRKWXNmOVBDVjN4aEZIcTcwNDNtdytIMXlsVys1QWI1anBBRHVQTTJaMVAzUE9MV25VRy9zSG5JRHNxa09qbHFvQUFBQUFTVVZPUks1Q1lJST0pO3BhZGRpbmc6MCAwIDQwcHggMDttYXJnaW46NTBweH0jaGQsI2Jke2JhY2tncm91bmQ6I2Y5ZjlmOX1ib2R5e21hcmdpbjowO3BhZGRpbmc6MDtmb250OjEycHggIkhlbHZldGljYSBOdWV1ZSIsQXJpYWwsc2Fucy1zZXJpZn0jaGR7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo1MHB4O21hcmdpbjowfSNoZCxoMSxoMixwLC5jb2xvcnttYXJnaW46YXV0b31oMSxoMixhe2NvbG9yOiMwMDZlOWN9aDEsaDJ7bWFyZ2luLXRvcDowfWg0IC50aXRsZXtmb250LXdlaWdodDpib2xkO2xldHRlci1zcGFjaW5nOi0ycHg7Zm9udC1zaXplOjQ3cHg7dGV4dC1zaGFkb3c6MCAxcHggMCAjMzY5O2JhY2tncm91bmQ6IzAwNmU5ZDtjb2xvcjojZmZmO3BhZGRpbmc6MCAxMHB4fWg0e2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6cmlnaHQ7bWFyZ2luOjAgMCAwIDIwcHh9aDQgLndoYXR7ZGlzcGxheTpibG9jaztwYWRkaW5nOjRweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDpub3JtYWx9aDQgLnZlcnNpb257Zm9udC1zaXplOjExcHg7Y29sb3I6I2NjY31oMntmb250LXNpemU6NDBweDtmb250LWZhbWlseToiSGVsdmV0aWNhTmV1ZS1MaWdodCIsIkhlbHZldGljYSBOZXVlIExpZ2h0IiwiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6MzAwfWg0LHB7cGFkZGluZzo2cHggMCA2cHh9I2Z0IHAuZmluZSwjZnQgcC5maW5lIGF7Y29sb3I6Izk5OX0jZnQgcC5pbnRyb3tmb250LXNpemU6MTJweH0jYmR7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzY2Nn0jZnQgcHtmb250LXNpemU6MTFweH0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1zaW5nbGVxdW90ZS1mb250LmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1zaW5nbGVxdW90ZS1mb250LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFiYjNlZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtc2luZ2xlcXVvdGUtZm9udC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKmNzc2xpbnQgZm9udGZhbWlseTogdHJ1ZSovCi0KLS8qKgotICogRm9vCi0gKi8KLQotLnktZmYtMSB7Ci0gICAgZm9udC1mYW1pbHk6IkZvbyBCYXIiLEhlbHZldGljYSxBcmlhbDsKLSAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwotfQotCi0udWEtb3AgLnktZmYtMSB7Ci0gICAgLyogU29tZSBDb21tZW50ICovCi0gICAgZm9udC1mYW1pbHk6SGVsdmV0aWNhLEFyaWFsOwotfQotCi0vKgotRm9vCi0KLUJhcgotKi8KLQotQGZvbnQtZmFjZSB7Ci0gICAgZm9udC1mYW1pbHk6ICJGb28gQmFyIjsKLSAgICBzcmM6IHVybCgnZGF0YTpmb250L3RydWV0eXBlO2Jhc2U2NCxnUmJJVUZBSXJzUU5HZGl0RVdiQVVLd0FBJykgZm9ybWF0KCJ0cnVldHlwZSIpLAotICAgICAgICAgdXJsKCJodHRwOi8veXVpbGlicmFyeS5jb20vZm9udHMvZm9vLWJhci5zdmcjd2ViZm9udHNlMjJmZXd3ciIpIGZvcm1hdCgic3ZnIik7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICBmb250LXN0eWxlOiBub3JtYWw7Ci19Ci0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1zaW5nbGVxdW90ZS1mb250LmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RhdGF1cmwtc2luZ2xlcXVvdGUtZm9udC5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDUxZDU0Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGF0YXVybC1zaW5nbGVxdW90ZS1mb250LmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLS55LWZmLTF7Zm9udC1mYW1pbHk6IkZvbyBCYXIiLEhlbHZldGljYSxBcmlhbDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHl9LnVhLW9wIC55LWZmLTF7Zm9udC1mYW1pbHk6SGVsdmV0aWNhLEFyaWFsfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6IkZvbyBCYXIiO3NyYzp1cmwoJ2RhdGE6Zm9udC90cnVldHlwZTtiYXNlNjQsZ1JiSVVGQUlyc1FOR2RpdEVXYkFVS3dBQScpIGZvcm1hdCgidHJ1ZXR5cGUiKSx1cmwoImh0dHA6Ly95dWlsaWJyYXJ5LmNvbS9mb250cy9mb28tYmFyLnN2ZyN3ZWJmb250c2UyMmZld3dyIikgZm9ybWF0KCJzdmciKTtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWx9Ci0KLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kZWNpbWFscy5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RlY2ltYWxzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU5Mzk3OS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RlY2ltYWxzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotOjpzZWxlY3Rpb24geyAKLSAgbWFyZ2luOiAwLjZweCAwLjMzM3B0IDEuMmVtIDguOGNtOwotfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kZWNpbWFscy5jc3MubWluIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kZWNpbWFscy5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGFkZWRjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZGVjaW1hbHMuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTo6c2VsZWN0aW9ue21hcmdpbjouNnB4IC4zMzNwdCAxLjJlbSA4LjhjbX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RvbGxhci1oZWFkZXIuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kb2xsYXItaGVhZGVyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM5OTljNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RvbGxhci1oZWFkZXIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0vKiEKLSRIZWFkZXI6IC90ZW1wL2Rpcm5hbWUvZmlsZW5hbWUuY3NzIDMgMi8wMi8wOCAzOjM3cCBKU21pdGggJAotKi8KLQotZm9vIHsKLQliYXI6IGJhegotfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9kb2xsYXItaGVhZGVyLmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RvbGxhci1oZWFkZXIuY3NzLm1pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMwODEwMC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2RvbGxhci1oZWFkZXIuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLyohCi0kSGVhZGVyOiAvdGVtcC9kaXJuYW1lL2ZpbGVuYW1lLmNzcyAzIDIvMDIvMDggMzozN3AgSlNtaXRoICQKLSovZm9ve2JhcjpiYXp9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9mb250LWZhY2UuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9mb250LWZhY2UuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjY5NTZjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvZm9udC1mYWNlLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotQGZvbnQtZmFjZSB7Ci0gIGZvbnQtZmFtaWx5OiAnZ3ppcHBlcic7Ci0gIHNyYzogdXJsKHlhbm9uZS5lb3QpOwotICBzcmM6IGxvY2FsKCdnemlwcGVyJyksIAotICAgICAgICAgIHVybCh5YW5vbmUudHRmKSBmb3JtYXQoJ3RydWV0eXBlJyk7Ci19CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2ZvbnQtZmFjZS5jc3MubWluIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9mb250LWZhY2UuY3NzLm1pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ExMDc3Yy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2ZvbnQtZmFjZS5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQGZvbnQtZmFjZXtmb250LWZhbWlseTonZ3ppcHBlcic7c3JjOnVybCh5YW5vbmUuZW90KTtzcmM6bG9jYWwoJ2d6aXBwZXInKSx1cmwoeWFub25lLnR0ZikgZm9ybWF0KCd0cnVldHlwZScpfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvaWU1bWFjLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvaWU1bWFjLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRkNTIwNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL2llNW1hYy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLS8qIElnbm9yZSB0aGUgbmV4dCBydWxlIGluIElFIG1hYyBcKi8KLS5zZWxlY3RvciB7Ci0gICBjb2xvcjoga2hha2k7Ci19Ci0vKiBTdG9wIGlnbm9yaW5nIGluIElFIG1hYyAqLwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9pZTVtYWMuY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvaWU1bWFjLmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MGRmNDEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9pZTVtYWMuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS8qXCovLnNlbGVjdG9ye2NvbG9yOmtoYWtpfS8qKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL21lZGlhLWVtcHR5LWNsYXNzLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvbWVkaWEtZW1wdHktY2xhc3MuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmYyMmQ1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvbWVkaWEtZW1wdHktY2xhc3MuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyohIHByZXNlcnZlZCAqLwotZW1wdGluZXNzIHt9Ci0KLUBpbXBvcnQgImFub3RoZXIuY3NzIjsKLS8qIEknbSBlbXB0eSAtIGRlbGV0ZSBtZSAqLwotZW1wdHkgeyA7fQotCi1AbWVkaWEgcHJpbnQgewotCS5ub3ByaW50IHsgZGlzcGxheTogbm9uZTsgfQotfQotCi1AbWVkaWEgc2NyZWVuIHsKLQkvKiB0aGlzIHJ1bGUgc2hvdWxkIGJlIHJlbW92ZWQsIG5vdCBzaW1wbHkgbWluaWZpZWQuKi8KLQkuYnJlYWttZSB7fQotCS5wcmludG9ubHkgeyBkaXNwbGF5OiBub25lOyB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9tZWRpYS1lbXB0eS1jbGFzcy5jc3MubWluIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9tZWRpYS1lbXB0eS1jbGFzcy5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzUwYzdmLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvbWVkaWEtZW1wdHktY2xhc3MuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS8qISBwcmVzZXJ2ZWQgKi9AaW1wb3J0ICJhbm90aGVyLmNzcyI7QG1lZGlhIHByaW50ey5ub3ByaW50e2Rpc3BsYXk6bm9uZX19QG1lZGlhIHNjcmVlbnsucHJpbnRvbmx5e2Rpc3BsYXk6bm9uZX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9tZWRpYS1tdWx0aS5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL21lZGlhLW11bHRpLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU4OTc3MS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL21lZGlhLW11bHRpLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotQG1lZGlhIG9ubHkgYWxsIGFuZCAobWF4LXdpZHRoOjUwZW0pLCBvbmx5IGFsbCBhbmQgKG1heC1kZXZpY2Utd2lkdGg6ODAwcHgpLCBvbmx5IGFsbCBhbmQgKG1heC13aWR0aDo3ODBweCkgewotICBzb21lLWNzcyA6IGhlcmUKLX0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvbWVkaWEtbXVsdGkuY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvbWVkaWEtbXVsdGkuY3NzLm1pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdiNTJmNy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL21lZGlhLW11bHRpLmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AbWVkaWEgb25seSBhbGwgYW5kIChtYXgtd2lkdGg6NTBlbSksb25seSBhbGwgYW5kIChtYXgtZGV2aWNlLXdpZHRoOjgwMHB4KSxvbmx5IGFsbCBhbmQgKG1heC13aWR0aDo3ODBweCl7c29tZS1jc3M6aGVyZX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL21lZGlhLXRlc3QuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9tZWRpYS10ZXN0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYxMThmZi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL21lZGlhLXRlc3QuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1AbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsKLSAgc29tZS1jc3MgOiBoZXJlCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9tZWRpYS10ZXN0LmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL21lZGlhLXRlc3QuY3NzLm1pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU3MTY4ZS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL21lZGlhLXRlc3QuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7c29tZS1jc3M6aGVyZX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL29wYWNpdHktZmlsdGVyLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3BhY2l0eS1maWx0ZXIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGRlY2E3Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3BhY2l0eS1maWx0ZXIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogIGV4YW1wbGUgZnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9DU1Mvb3BhY2l0eSAqLwotcHJlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWFrZSB0aGUgYm94IHRyYW5zbHVjZW50ICg4MCUgb3BhcXVlKSAqLwotICAgYm9yZGVyOiBzb2xpZCByZWQ7Ci0gICBvcGFjaXR5OiAwLjg7ICAgICAgICAgICAgICAgICAgICAvKiBGaXJlZm94LCBTYWZhcmkoV2ViS2l0KSwgT3BlcmEgKi8KLSAgIC1tcy1maWx0ZXI6ICJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT04MCkiOyAvKiBJRSA4ICovCi0gICBmaWx0ZXI6IFBST0dJRDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PTgwKTsgICAgICAgLyogSUUgNC03ICovCi0gICB6b29tOiAxOyAgICAgICAvKiBzZXQgInpvb20iLCAid2lkdGgiIG9yICJoZWlnaHQiIHRvIHRyaWdnZXIgImhhc0xheW91dCIgaW4gSUUgNyBhbmQgbG93ZXIgKi8gCi19Ci0KLS8qKiBhbmQgYWdhaW4gKi8KLWNvZGUgewotICAgLW1zLWZpbHRlcjogIlBST0dJRDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PTgwKSI7IC8qIElFIDggKi8KLSAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9ODApOyAgICAgICAvKiBJRSA0LTcgKi8KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL29wYWNpdHktZmlsdGVyLmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL29wYWNpdHktZmlsdGVyLmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YjRmYTguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vcGFjaXR5LWZpbHRlci5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotcHJle2JvcmRlcjpzb2xpZCByZWQ7b3BhY2l0eTouODstbXMtZmlsdGVyOiJhbHBoYShvcGFjaXR5PTgwKSI7ZmlsdGVyOmFscGhhKG9wYWNpdHk9ODApO3pvb206MX1jb2Rley1tcy1maWx0ZXI6ImFscGhhKG9wYWNpdHk9ODApIjtmaWx0ZXI6YWxwaGEob3BhY2l0eT04MCl9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYmFja2dyb3VuZC1wb3NpdGlvbi5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9iYWNrZ3JvdW5kLXBvc2l0aW9uLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQwMGE5MS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9iYWNrZ3JvdW5kLXBvc2l0aW9uLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWF7YmFja2dyb3VuZC1wb3NpdGlvbjowIDAgMCAwfWJ7QkFDS0dST1VORC1QT1NJVElPTjowIDB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYmFja2dyb3VuZC1wb3NpdGlvbi5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2JhY2tncm91bmQtcG9zaXRpb24ub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMDBhOTEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYmFja2dyb3VuZC1wb3NpdGlvbi5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWF7YmFja2dyb3VuZC1wb3NpdGlvbjowIDAgMCAwfWJ7QkFDS0dST1VORC1QT1NJVElPTjowIDB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYm9yZGVyLW5vbmUub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYm9yZGVyLW5vbmUub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDBhODAxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2JvcmRlci1ub25lLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWF7Ym9yZGVyOm5vbmV9YntCQUNLR1JPVU5EOm5vbmV9c3tib3JkZXItdG9wOm5vbmV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYm9yZGVyLW5vbmUub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9ib3JkZXItbm9uZS5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQwYTgwMS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9ib3JkZXItbm9uZS5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWF7Ym9yZGVyOm5vbmV9YntCQUNLR1JPVU5EOm5vbmV9c3tib3JkZXItdG9wOm5vbmV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYm94LW1vZGVsLWhhY2sub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYm94LW1vZGVsLWhhY2sub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzQwMTc5Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2JveC1tb2RlbC1oYWNrLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNlbGVte3dpZHRoOjEwMHB4O3ZvaWNlLWZhbWlseToiXCJ9XCIiO3ZvaWNlLWZhbWlseTppbmhlcml0O3dpZHRoOjIwMHB4fWh0bWw+Ym9keSAjZWxlbXt3aWR0aDoyMDBweH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9ib3gtbW9kZWwtaGFjay5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2JveC1tb2RlbC1oYWNrLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzQwMTc5Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2JveC1tb2RlbC1oYWNrLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2VsZW17d2lkdGg6MTAwcHg7dm9pY2UtZmFtaWx5OiJcIn1cIiI7dm9pY2UtZmFtaWx5OmluaGVyaXQ7d2lkdGg6MjAwcHh9aHRtbD5ib2R5ICNlbGVte3dpZHRoOjIwMHB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2J1ZzI1Mjc5NzQub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYnVnMjUyNzk3NC5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyM2E2MmUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYnVnMjUyNzk3NC5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1ib2R5e3lvOmNhdHN9dWxbaWQkPWZvb10gbGFiZWw6aG92ZXJ7eW86eW99ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYnVnMjUyNzk3NC5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2J1ZzI1Mjc5NzQub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwY2MwMDcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYnVnMjUyNzk3NC5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS8qISAkTGFzdENoYW5nZWRSZXZpc2lvbjogODEgJCAkTGFzdENoYW5nZWREYXRlOiAyMDA5LTA1LTI3IDE3OjQxOjAyICswMTAwIChXZWQsIDI3IE1heSAyMDA5KSAkICovYm9keXt5bzpjYXRzfXVsW2lkJD1mb29dIGxhYmVsOmhvdmVye3lvOnlvfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2J1ZzI1Mjc5OTEub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYnVnMjUyNzk5MS5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzODJlMTEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYnVnMjUyNzk5MS5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApe2F7YjoxfX1AbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApe2F7YjoxfX1AbWVkaWEgLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjB7YXtiOjF9fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2J1ZzI1Mjc5OTEub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9idWcyNTI3OTkxLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDE3YjZhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2J1ZzI1Mjc5OTEub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AbWVkaWEgc2NyZWVuIGFuZCAvKiFZVUktQ29tcHJlc3NlciAqLygtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7YXtiOjF9fUBtZWRpYSBzY3JlZW4gYW5kIC8qISAqLy8qISAqLygtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7YXtiOjF9fUBtZWRpYSAtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MHthe2I6MX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYnVnMjUyNzk5OC5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9idWcyNTI3OTk4Lm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1ZjExYy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9idWcyNTI3OTk4Lm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJvZHl7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2J1ZzI1Mjc5OTgub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9idWcyNTI3OTk4Lm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDQ5Y2RlLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2J1ZzI1Mjc5OTgub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vKiEgc3BlY2lhbCAqL2JvZHl7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2J1ZzI1MjgwMzQub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYnVnMjUyODAzNC5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0M2ZhMzQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYnVnMjUyODAzNC5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1hW2hyZWYkPSIvdGVzdC8iXSBzcGFuOmZpcnN0LWNoaWxke2I6MX1hW2hyZWYkPSIvdGVzdC8iXSBzcGFuOmZpcnN0LWNoaWxke30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9idWcyNTI4MDM0Lm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvYnVnMjUyODAzNC5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQzZmEzNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9idWcyNTI4MDM0Lm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYVtocmVmJD0iL3Rlc3QvIl0gc3BhbjpmaXJzdC1jaGlsZHtiOjF9YVtocmVmJD0iL3Rlc3QvIl0gc3BhbjpmaXJzdC1jaGlsZHt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvY2hhcnNldC1tZWRpYS5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9jaGFyc2V0LW1lZGlhLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4N2I4Zi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9jaGFyc2V0LW1lZGlhLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBjaGFyc2V0ICd1dGYtOCc7QG1lZGlhIGFsbHtib2R5e31ib2R5e2JhY2tncm91bmQtY29sb3I6Z29sZH19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvY2hhcnNldC1tZWRpYS5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2NoYXJzZXQtbWVkaWEub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzODdiOGYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvY2hhcnNldC1tZWRpYS5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBjaGFyc2V0ICd1dGYtOCc7QG1lZGlhIGFsbHtib2R5e31ib2R5e2JhY2tncm91bmQtY29sb3I6Z29sZH19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvY29sb3Itc2ltcGxlLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2NvbG9yLXNpbXBsZS5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNzQxNDYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvY29sb3Itc2ltcGxlLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5mb28sI0FBQkJDQ3tiYWNrZ3JvdW5kLWNvbG9yOiNhYWJiY2M7Ym9yZGVyLWNvbG9yOiNFZTY2YUEgI0FCQ0RFRiAjRmVBYjJDO2ZpbHRlcjpjaHJvbWEoY29sb3I9I0ZGRkZGRik7ZmlsdGVyOmNocm9tYShjb2xvcj0iI0FBQkJDQyIpO2ZpbHRlcjpjaHJvbWEoY29sb3I9JyNCQkRERUUnKTtjb2xvcjojMTEyMjMzfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2NvbG9yLXNpbXBsZS5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2NvbG9yLXNpbXBsZS5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE3NDE0Ni4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9jb2xvci1zaW1wbGUub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uZm9vLCNBQUJCQ0N7YmFja2dyb3VuZC1jb2xvcjojYWFiYmNjO2JvcmRlci1jb2xvcjojRWU2NmFBICNBQkNERUYgI0ZlQWIyQztmaWx0ZXI6Y2hyb21hKGNvbG9yPSNGRkZGRkYpO2ZpbHRlcjpjaHJvbWEoY29sb3I9IiNBQUJCQ0MiKTtmaWx0ZXI6Y2hyb21hKGNvbG9yPScjQkJEREVFJyk7Y29sb3I6IzExMjIzM30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9jb2xvci5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9jb2xvci5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMDk4ZTQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvY29sb3Iub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLmNvbG9ye21lOnJnYigxMjMsMTIzLDEyMyk7aW1wcmVzc2VkOiNGZkVlZEQ7YWdhaW46I0FCQ0RFRjthbmRhZ2FpbjojYWE2NmNjO2JhY2tncm91bmQtY29sb3I6I2FhNjZjY2M7ZmlsdGVyOmNocm9tYShjb2xvcj0iI0ZGRkZGRiIpO2JhY2tncm91bmQ6bm9uZSByZXBlYXQgc2Nyb2xsIDAgMCByZ2IoMjU1LDAsMCk7YWxwaGE6cmdiYSgxLDIsMyw0KTtjb2xvcjojMTEyMmFhfSNBQUJCQ0N7YmFja2dyb3VuZC1jb2xvcjojZmZlZTExO2ZpbHRlcjpjaHJvbWEoY29sb3I9I0ZGRkZGRik7Y29sb3I6IzQ0MTEyMjtmb286IzAwZkYxMSAjQUJDICNBQUJiQ2MgIzEyMzM0NDtib3JkZXItY29sb3I6I2FhNjZjY0N9LmZvbyAjQUFCQkNDe2JhY2tncm91bmQtY29sb3I6I2ZGRWUxMTtjb2xvcjojNDQxMTIyO2JvcmRlci1jb2xvcjojQWJDO2ZpbHRlcjpjaHJvbWEoY29sb3I9I0ZGRkZGRil9LmJhciwjQUFCQkNDe2JhY2tncm91bmQtY29sb3I6I0ZGZWUxMTtib3JkZXItY29sb3I6IzAwZkYxMSAjQUJDREVGO2ZpbHRlcjpjaHJvbWEoY29sb3I9IzExRkZGRkZGKTtjb2xvcjojNDQxMTIyfS5mb28sI0FBQkJDQy5mb29iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZlZTExO2JvcmRlci1jb2xvcjojMDBmRjExICNBQkNERUYgI0FBQmJDYztjb2xvcjojNDQxMTIyfUBtZWRpYSBzY3JlZW57LmJhciwjQUFCQkNDe2JhY2tncm91bmQtY29sb3I6I2ZmRUUxMTtjb2xvcjojNDQxMTIyfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9jb2xvci5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2NvbG9yLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjA5OGU0Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2NvbG9yLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLmNvbG9ye21lOnJnYigxMjMsMTIzLDEyMyk7aW1wcmVzc2VkOiNGZkVlZEQ7YWdhaW46I0FCQ0RFRjthbmRhZ2FpbjojYWE2NmNjO2JhY2tncm91bmQtY29sb3I6I2FhNjZjY2M7ZmlsdGVyOmNocm9tYShjb2xvcj0iI0ZGRkZGRiIpO2JhY2tncm91bmQ6bm9uZSByZXBlYXQgc2Nyb2xsIDAgMCByZ2IoMjU1LDAsMCk7YWxwaGE6cmdiYSgxLDIsMyw0KTtjb2xvcjojMTEyMmFhfSNBQUJCQ0N7YmFja2dyb3VuZC1jb2xvcjojZmZlZTExO2ZpbHRlcjpjaHJvbWEoY29sb3I9I0ZGRkZGRik7Y29sb3I6IzQ0MTEyMjtmb286IzAwZkYxMSAjQUJDICNBQUJiQ2MgIzEyMzM0NDtib3JkZXItY29sb3I6I2FhNjZjY0N9LmZvbyAjQUFCQkNDe2JhY2tncm91bmQtY29sb3I6I2ZGRWUxMTtjb2xvcjojNDQxMTIyO2JvcmRlci1jb2xvcjojQWJDO2ZpbHRlcjpjaHJvbWEoY29sb3I9I0ZGRkZGRil9LmJhciwjQUFCQkNDe2JhY2tncm91bmQtY29sb3I6I0ZGZWUxMTtib3JkZXItY29sb3I6IzAwZkYxMSAjQUJDREVGO2ZpbHRlcjpjaHJvbWEoY29sb3I9IzExRkZGRkZGKTtjb2xvcjojNDQxMTIyfS5mb28sI0FBQkJDQy5mb29iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZlZTExO2JvcmRlci1jb2xvcjojMDBmRjExICNBQkNERUYgI0FBQmJDYztjb2xvcjojNDQxMTIyfUBtZWRpYSBzY3JlZW57LmJhciwjQUFCQkNDe2JhY2tncm91bmQtY29sb3I6I2ZmRUUxMTtjb2xvcjojNDQxMTIyfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9jb21tZW50Lm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2NvbW1lbnQub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjgwMzcxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2NvbW1lbnQub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotaHRtbD4vKiovYm9keSBwe2NvbG9yOmJsdWV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvY29tbWVudC5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2NvbW1lbnQub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyODAzNzEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvY29tbWVudC5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWh0bWw+LyoqL2JvZHkgcHtjb2xvcjpibHVlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2NvbmNhdC1jaGFyc2V0Lm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2NvbmNhdC1jaGFyc2V0Lm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA5NjdhYi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9jb25jYXQtY2hhcnNldC5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AY2hhcnNldCAidXRmLTgiOyNmb297Ym9yZGVyLXdpZHRoOjFweH1AY2hhcnNldCAiYW5vdGhlciBvbmUiOyNiYXJ7Ym9yZGVyLXdpZHRoOjEwcHh9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvY29uY2F0LWNoYXJzZXQub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9jb25jYXQtY2hhcnNldC5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA5NjdhYi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9jb25jYXQtY2hhcnNldC5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBjaGFyc2V0ICJ1dGYtOCI7I2Zvb3tib3JkZXItd2lkdGg6MXB4fUBjaGFyc2V0ICJhbm90aGVyIG9uZSI7I2Jhcntib3JkZXItd2lkdGg6MTBweH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC1kb3VibGVxdW90ZXMub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtZG91YmxlcXVvdGVzLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRiMjk0Mi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC1kb3VibGVxdW90ZXMub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLXJpbmctdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1jZW50ZXItYnV0dG9uLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtbWFya2VyIHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLC55dWkzLXNraW4tbmlnaHQgdlw6b3ZhbC55dWkzLWRpYWwtbWFya2VyLW1heC1taW4sLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlci12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLWhhbmRsZS12bWx7YmFja2dyb3VuZDpub25lO29wYWNpdHk6MX1kaXYuYmFzZTY0LWRvdWJsZXF1b3Rlc3t3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsJTJGOWolMkY0QUFRU2taSlJnQUJBZ0VBWkFCa0FBRCUyRjRSZkpSWGhwWmdBQVRVMEFLZ0FBQUFnQUJ3RVNBQU1BQUFBQkFBRUFBQUVhQUFVQUFBQUJBQUFBWWdFYkFBVUFBQUFCQUFBQWFnRW9BQU1BQUFBQkFBSUFBQUV4QUFJQUFBQWVBQUFBY2dFeUFBSUFBQUFVQUFBQWtJZHBBQVFBQUFBQkFBQUFwQUFBQU5BQUQwSkFBQUFuRUFBUFFrQUFBQ2NRUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTWlCTllXTnBiblJ2YzJnQU1qQXdPRG93TnpveE9TQXhORG8xT0Rvd05RQUFBNkFCQUFNQUFBQUIlMkYlMkY4QUFLQUNBQVFBQUFBQkFBQUJ3cUFEQUFRQUFBQUJBQUFCUlFBQUFBQUFBQUFHQVFNQUF3QUFBQUVBQmdBQUFSb0FCUUFBQUFFQUFBRWVBUnNBQlFBQUFBRUFBQUVtQVNnQUF3QUFBQUVBQWdBQUFnRUFCQUFBQUFFQUFBRXVBZ0lBQkFBQUFBRUFBQmFUQUFBQUFBQUFBRWdBQUFBQkFBQUFTQUFBQUFIJTJGMlAlMkZnQUJCS1JrbEdBQUVDQUFCSUFFZ0FBUCUyRnRBQXhCWkc5aVpWOURUUUFDJTJGJTJCNEFEa0ZrYjJKbEFHU0FBQUFBQWYlMkZiQUlRQURBZ0lDQWtJREFrSkRCRUxDZ3NSRlE4TURBOFZHQk1URlJNVEdCRU1EQXdNREF3UkRBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBRU5Dd3NORGcwUURnNFFGQTRPRGhRVURnNE9EaFFSREF3TURBd1JFUXdNREF3TURCRU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd00lMkY4QUFFUWdBZEFDZ0F3RWlBQUlSQVFNUkFmJTJGZEFBUUFDdiUyRkVBVDhBQUFFRkFRRUJBUUVCQUFBQUFBQUFBQU1BQVFJRUJRWUhDQWtLQ3dFQUFRVUJBUUVCQVFFQUFBQUFBQUFBQVFBQ0F3UUZCZ2NJQ1FvTEVBQUJCQUVEQWdRQ0JRY0dDQVVERERNQkFBSVJBd1FoRWpFRlFWRmhFeUp4Z1RJR0ZKR2hzVUlqSkJWU3dXSXpOSEtDMFVNSEpaSlQ4T0h4WTNNMUZxS3lneVpFazFSa1JjS2pkRFlYMGxYaVpmS3poTVBUZGVQelJpZVVwSVcwbGNUVTVQU2x0Y1hWNWZWV1puYUdscWEyeHRibTlqZEhWMmQzaDVlbnQ4Zlg1JTJGY1JBQUlDQVFJRUJBTUVCUVlIQndZRk5RRUFBaEVESVRFU0JFRlJZWEVpRXdVeWdaRVVvYkZDSThGUzBmQXpKR0xoY29LU1ExTVZZM00wOFNVR0ZxS3lnd2NtTmNMU1JKTlVveGRrUlZVMmRHWGk4ck9FdzlOMTQlMkZOR2xLU0Z0SlhFMU9UMHBiWEYxZVgxVm1aMmhwYW10c2JXNXZZbk4wZFhaM2VIbDZlM3glMkYlMkZhQUF3REFRQUNFUU1SQUQ4QTlWU1NTU1VwSkpKSlNra2trbEtTU1NTVXM0dURTV2lYUm9PSktGaTNPdngyV3Zic2U0ZTVnTXdSbzVzb3lwZE95TjltVFNSSHBXdmo0T2M0JTJGd0RWZjlXa3B1cEpKSktVa2tra3BTU1NTU2xKSkpKS1Vra2trcCUyRiUyRjBQVlVrbENxeHR0YmJHJTJGUmVBNGZBcEtacEpKSktVbzJXTnJyZFk4dzFnTG5IeUFsVk9zV3Zvd1haRFolMkZRT1phOEQ5eHJtbTMlMkZOcjNQVXN3bSUyRnBtUUdhbXlsNGJIaVd1aEpUWXFzRnRUTEJ3OW9kOTRVMVE2RmtmYU9rNHRzenVxWWZ3VjlKU2xsMSUyRm9PdDJzT2d1RFhnZVRtN2YlMkZQbU4lMkZ3Q0NMVVdaMVZocnlzYktBJTJCanVhN3pndHVaJTJGMUZxSVVYVFNRY3ZLWmk0N3NoN1hPWTB0QkRZSmh6bXMzYWtmUjNibFZkMTNwck10dUklMkJ3c2UlMkY2TDNBaG03bjAlMkZVJTJCaTJ6YWZ6a0ZPZ3E5JTJCZGowWkZPTTRrM1pEdHJHTkVuaHp0N3YzV2JXUFU4YkpweWF2VnBkdVp1YzJlTldPTmIyJTJGMlh0WE9ZMlZVN3JBNmhuTzlSdUpTJTJCcjFoTzFsZ3VHSmJ1WXoyZXh0dnYzZnpMUFUlMkZ3Q0VTVTlRa2tra3BTU1NTU2xKSkpKS2YlMkYlMkZSOVZXZjBpd2l1M0ZmOUxHc2V3VCUyQjZEN1AlMkZBeXh5MEZtdW5INnhQRE1wZ2QlMkZiWkZUJTJGd0RvT3glMkYlMkIyMFFwMGxDMDJDdHhxQUx3RHRCNEo4Rk5KQlRWb3Z4JTJCbzRqdmJMTEdsbHRUdVJNc3NyZiUyRkFOSml6JTJCaFpEcU1PJTJGRXlDWDJkT2M2dCUyQmt1YzFnbXQlMkIzJTJGaGFQVGVvWjVzNlIxSVpyQkdEbGtOdkklMkJqWGNZWXl4JTJGN3RXVjlCJTJGd0R3JTJGd0R3bHlEMUxxV0gwanEyTjFPNTVyeE9vZ1kxcndDNEM5dXVQNm16ZHQ5V2wxdjZUJTJCYiUyRkFGZEZTJTJGMU15cSUyRjJWVGh1c2ElMkIydHN0Mms2c1B1WTczQnJtJTJGbzNWdjJmeSUyRjNGMFM0VEF6cSUyQm0lMkZXRHF1S0duYmhXT3lhNjJEVVVscmNteXVsa3RaNmYyZXkxOVd6OCUyRjJMczJaJTJCRll4MWpMNnl4Z0JlJTJGY0lBSTNDWGZOSXFaWDN1cnNxcXJaNmo3VHFKZ05ZMlBVc1BQMGR5cGZXSiUyRm85Tk9UMnhyYXJIVHhzM3Raa2YlMkJ5NzdWUjZ2OWJlamROc2JrYjNaYnFtMnNmVmpnT09ocmRaRmxqcXNmZlhzJTJGbXZWOVYlMkYlMkJEWEhkWiUyQnV2VTh6QTZpJTJCajAyWTF6YXdhWkx0MkxZMjF0bHRiN1hPYjZqNiUyRndEUjFWJTJGelYzNnY2clBWWUZVJTJCaUNzNVBTN2NkNDNPMldVT0I3N2QxWCUyRlQyN2x3dlZuTnlLSzhkMTVxNmhpajIwN285ZGczREhkVzltOXpMdjhBUSUyRjRXdTcxSyUyRlR0cjlhcXpKJTJCdUhWOHRtUjB6Tm95THZzWFU4TnI3Y2R0am10TjFKOUslMkIycG9kc2JrMSUyRm8lMkY4QTBZc25HNnRlJTJCbkxaYmRYWFk2cHR0QUROd3Vjd21odjJjV2J2MHRuciUyRnBLbmZwS2JLZjhBdHNxRDFEdnJqbmZWNzBjS2xsZGd6Z2JxamY3UUhCM3Ayc0cwc2I2bHYwJTJGZlo2VEVjWmc2MzB4ejJ2ZXpLNmpWYmZoVnRmNmJpUSUyQnhsdG1OWTdhMno5SnMzVnUlMkZ3YXl2ckhoMSUyQmhoZEt2M1h1YmpCaFk5d0RiSHRQcE9kWGtPSDZ0MURkJTJGUnNsJTJGNkMlMkZ3RG9tVjdGZzlXYyUyRkYlMkJxM1JMNmJpYmVuNVdWamg0bGxqZHhiZXhsdGYwNkxhOXZ2cCUyRk0lMkZ3QUZaJTJGaEV1cW4wcjZsZlhNOVdZenB2Vm9vNnd4dmNiQmNHajlMdHIwOUxMb2o5YnhmJTJCdlUlMkZvZjVtejlhdnJKZDAlMkIyakJ3SEFaVHJjZDE3aUE3YlZaYTJuWTBIJTJGQ1h3OXYlMkZBQWRmJTJGV2w1emlkUVo5WmNZM2wzb2Rkd2cyejFtSFo2eldmUXYzdDIlMkJuazAlMkZ3Q24lMkZ3RFJmOHhmNkRmMURxdlhHWiUyQmU1dHpzaTdHZDZsbTJrUHNxTmJxcU9HMSUyRjRDdXhucHQlMkZTNyUyRjlJOUFMalIxR2g3Zjk2JTJCdUpKcEExS1pqMldORG1PRG1uaHdNaEpheVNTU1NVJTJGd0QlMkYwdlZWbjlhaXJGR1lTR2pFY0xYdU9rViUyRnpkNUolMkZkWlUlMkZ3QlglMkZyYTBFSE05RDdKZjlwRTQlMkZwdjlZSFgyYlQ2bW45UklLY0U5VTZsZ1huSkR2Mmwwak4lMkZTNDk3UzM5QzUzMHNPeXhuJTJCQmMlMkYlMkJoNVA4MyUyRjJreWZTJTJGUjVObFBydjE2dXdjekV4c1BIRm96TEJSV0h6NnJyaVdNOU91djZIczlUM3ZzZXVlNkI5YnVvWkY1eEJVODRCREMlMkJ0b1pZVzFQY3pHJTJCMDJHeG03MUdiMlhQMmZvZDdQNW10Y3QxNjdxJTJGVDg3R2RmayUyRmJzY1dISTZWMU5yUU5HdTNPMk5aNmZwNUZOOWRUY3JIM2VwUjZmOVJLd1JZWHpoS0V1R1lvJTJGeGZTTXZNNmxabEYlMkZWZlNvYlUxMVE5TUd5cUxmYSUyQnJQOVBKc3I5S3owOW42YkdxJTJGN2RXTjF6OVZ4QzNLZlpUMCUyQiUyQlBVeUdnNU5JYVBkVTdlelplN0t4UFIlMkZSNUd5cjFzWDlEYjYlMkZ3RGd1WnglMkJ2MzUyYmU0V053ZnQlMkI5dGIybjIxbXphJTJGMDdYbjIlMkZwN3FtVmVwNmRiUDB2cWZvbHFaRDdtWTkxZURtWGg5cEJBWkRHalQ5YXd2YiUyQmtwM1clMkZwMk1ka2ZwYXYxYiUyQlhVYjBXdWxUZVAyM2g1RGkzSkwzVVlXVFl6bHpiS24xc2M1ck43YmFNM0ZaOXB3OHhydlN2ciUyRlFmMGltNnV2SDZ2WTdHNmhmUzJteDFXRllhcTdibmslMkJvMnIwcktQVGE3YnVzdHhYMjAlMkJ6JTJCbGY0UlclMkZxUFhlTTQwM3MlMkZROUxwZGJRNHY5N1dsNERjVzFudWQ2UHFmckgyZTluc3pNYXZOeCUyRnM5JTJGMmhBNmk1cjc3SFpMSDI0VG4xVzQlMkJVd2oyUHZhM0pkajViZnphSGI4bjdGayUyRjRQOVl4UDB0WDh3dWxxYVdmYjFDelo2R2FNMzA2MjJXREQlMkZTVjFtcDNzZlk2dGpXT3NZMXRmODc3NmElMkZUUTdzMjdxRk5WSXJxd0FmVXNiWlJYdDlTME45S3kxdFg4MyUyQmdyZSUyRjFzZWolMkZBRTFsektsdGREdGJpOVpKc3FxYlRhQlhkUzBUYlc2OFB5Y1V4Tmo4cXJJYlIlMkZwUFUlMkZTYjYlMkZUeXY2VldmMHF2T3J6bXNZYXNuR3pIbWs3Z3gxWmE2SzJYUjdzZCUyQjV2Nks3OUpYaTNiUFUlMkZWOGk3MVJSVTUlMkZXYUxNdjZrWWo3U0dYOUw2ZyUyQnFLJTJGb3NyeW1ldXgxY2Y0QjE3ZllzcnB1UG1OeGZ0ejYzUGN3bDlEV0RRMnNJcVprTkolMkZOWmU2bHVSNmYlMkZBQVglMkZBQVMxZjJwWFgwdnElMkJKbG43TGZrVlZ0YTNaQWZsNDkyOW15biUyRkE3NnJMcTg2ciUyQmJvJTJGNHF5aFZydW9aZlNlazRsZG1NMTJQZTIyN0Q5WFFCdHZwdHUzJTJCN2Q2VnI2NlhmMlBVJTJGd2lTbnN1cW5EeUxNZkZ0TVpPUmolMkJyWFNQZUhGc2VvMmw3ZzMxTGElMkZWJTJCaCUyRjJvcSUyRndmcWZwRnpuVmNkOXVEWml2YXh6RFpYYTF6enRaYVhCMUxXJTJCdiUyRmdiJTJGWlZYaTV0djgzJTJGUnNqOUFzTHFmWHYyajAlMkZwWHFQRmVkZ051cmZhMTBGM3Vxc3g4bHY4QW8zT2J2cmYlMkZBTVQ2biUyQkZRcXVxNTklMkZVUmVjMXpiN0NIWE1jOGh0bXc3bjQ3djhCdHVjUFViNnY2UDlMZDY5aU5vUzlINlZrMFp6Y3BqM3RxcWVXMUFBdHVjJTJGOEFtN01leWh2Nld2WiUyRk5aWCUyRkFJRXVnenVrMTRlTGlONjlmYmk0OXU2d2dCanlXTmI2ZFA2SU9hNTJWNnZ0MjQ3UDBkRCUyRkFGUDBhampkYzZrQmVla1lRZDFESXMydHNaVlpiZFZYdDl0WXFzRzklMkIzJTJGVFBaJTJCbCUyRndCQ3NhanBYViUyQnRYMlp3byUyRmFsN1d1dnY5UzBNZWEyJTJGVDIlMkJ2WjdtMWUxajZHVjc2UFolMkZwSzBORTdhdnBIMVo2OW5kVTZUaTRtUDZtVlprdEJkYmtQM3VxYldUUmtqS3VZR2I5dDFlNnYyNzc2clA5SXV5dzhWdUpqdG9hUzh0a3VlZVhPY2R6MyUyRjJuTHliNnZkWnY2RGpES3dtVnQzbHpic1p6M1ZzWmNIbHVUZ1g0OTloZlJZeHV6SnduJTJGem5zeUtyTEx2OEgydlQlMkZyOWhPREslMkJzTSUyRlp1U1drdnJ0RmpDMXdMbXZyJTJGV0txVyUyRm0lMkJ6YlolMkJrUlI0dlZwS24wM3ElMkZUZXE0N01ucCUyQlF5JTJCdDdXdkcwJTJCNEJ3M045U3MlMkZwSyUyRiUyQnVOVnhCVCUyRkFQJTJGVDlWVE9hMTdTeHdEbXVCRG1uVUVIc1U2U1NueGY2eDlDelBxdDFFQ2l4N0dNZWJlbjVRMGNhbmV5eWx6dm91dG8zTXJ1WiUyRmhhdjBucCUyRnBGVXJ5YU1qRnZyenBzNmRrUGJabVVzSHZ4N3pGYmVyNGY3cmJMUDZXeiUyRkFFbG4lMkJpdll2WSUyQnU5TDZmMVhwbDJIMUdHME9HNzFTUTAxdUgwYjJQZDlCN1AlMkZVYiUyRndCR3ZIOHZwRjNUNyUyRlFwY0g1TkllYTdhejZsZVhTZDIlMkJ6SGpkVzcwcUhiTW5FJTJGd2xTWnJFMk51emZqS0hNWSUyQkdmcHpSMm4lMkZMOUg5NXdNJTJGQnlPazVoeHNnaXl1d2I2cm02MTNWSDZOMVglMkZBS01yVzEwanFicm1IRHlIbDhNaGpZM0c2c0hkNlBPMzE4ZHY2ZWl6MDdmVzlQMHYlMkJPSGlQeGM2bjlqNTUyWWRoM1ltVnk3RnRQNSUyQnZ2Zml1JTJGdyUyRiUyRkIlMkZwZjV6ZWhZdjFhNnBWazVXTG5oJTJCSlpoTUw2cm1pV3ZzQlk2dDFGbjBuMU5ZNzdUdnAlMkZTZjhXbmlqcU5Xbk9Fc2NqR1E0WkI3T2lnMGZWN0xmMDFycjhycVIydGV6M1hQYkJ4NjdYc1l6YXl4amJNbDltMzglMkY5SiUyQmwlMkZTJTJCcHpydlV4TVdxdnFOVnVKa3N4MzQwMnpXNW9vc2JkU2NpZzcyNU9IZDlxWTZ2JTJCYzJaT0xUNk5uODh5M2U2WDF1eWs5TmV4em5ZZCUyQlBkaTJNYzFsVHhsNHp0em5XdTNiS2ZXWlpYYnM5VDA2ZjB5cGRZNkoxSHIlMkZWSDlXcnRwc3g2bU1xRkRTJTJGMVdpc0YzMFhOYTUlMkI1NzdiZjBleXolMkZSViUyQnFuSHdXMVJvdERGNnhheTQ5VHZpa3M5T0hOQkFjOWcyc2ZjMW03WnUyJTJGb0clMkZReHYzUFNUOUx3MmRUYmxNJTJCMVcxc2REaXhvTTJ2dTNmMDkzNk90M3BPWnN1cnAlMkZRNUglMkJqJTJGd2FKajRHWGYwNTJaamVwUmpibU9yeXdOek5qSHVsaDlNZWc1ek4lMkIxbHJuJTJGNFI5ZnAlMkZwRll4Y0hENmV5Nm5JdGRTR0FPdGRsRndobGglMkZSdUhwTjNQcGJ2OEE1eG5xZW1nRk9aMSUyRkR5TVc3N1QxRElPUXk0dnJhOTFicUMwMGVuJTJCaVl4JTJGMDZOcnFuZXYlMkZBSWYlMkZBRWoxV3hhRzJzeEtPbzlNdTZpSzMyVVllT0xITUwzdkxyTnJybXUzJTJCbHYlMkZBUFJpMWN2cGwxUFVxVzNOZmg1VkozNCUyQk5tTzlYRXVySHUlMkZWN3QxakdNc1lmMG5vUDluJTJGQUFOcXY5UTZXODR3NjMwaG4yY3VGZDFqY1lHeXNqUzZxekx4bWl1M0Z5YWR2ODk2TlglMkJsJTJCMmVxaFNTQlExdSUyRndlZDZ6OVglMkJydEZKSDFkWmoxYWdFTnNxWnVJQjlFUHN2YmtXN1dqNmVTJTJGNmZxJTJCaiUyQmpXT2NiTnc4aG5xZE54cTN0aXpaWVhPYTRUeTdma1dibU5kJTJGT2Jmb2Y0UmRwVDFmcUhVczFyYyUyRkxma3R5UlUydkdhNGJTSE5lUHRGTDNlbDZWbUxsVmVqWjdmMG0lMkYxY2olMkJaJTJCMFdidlNmcW4wJTJGcTFlVGpkUklkbFZzcHNxY3h3QnFjOFBiZlclMkJyWDM3NiUyRlR0ZiUyRkFLSDBiY1M2djJXSlhxdWxqNFlDWEVEWnF1cnhuMWR4WGRSb3N1dzc4aG5YY1I1ZFNXdTIyT3JZMmJxc2RuMDNaRlR0OTMyT3oyWldMNmxWTFBXb1hTMTlIenVwOVBxJTJCc2ZUTVl0eThrbjdaUlhEQ3k1aGRWYjFERXJlJTJGOU5VNzlMdnhIYkxjbGo3S2Y1cklzcFhFNW1QbTlKNnElMkZMcWE4MllybXZmVkpIcVVzZCUyQmd5cUxhdGxuMGElMkYwM3BQOEFXeExtZXJWJTJCNWolMkJ6JTJGVTdxdlIlMkJwOUNvdDZRTmxMSmJaUTV4ZFpYYjlPMWw3M1M5OWpudTMlMkJxNyUyQmUlMkZuRW1ONTdxdjFYNmI5YyUyRnE5OW94V054JTJCdVl4Y3l4N2c5cmpjMlBYeE01dDM2eDZkam10OUgxdjAyTCUyQmk5TCUyRkNWV2N6OVZQcjUxbnBQV1g5SCUyQnN4dXk4Ykl0Rk5veUR2dG90OXRJY04lMkYwNkhlMzE2UCUyRkFFS28lMkZ3QUo5cDloYlhXMTdudGFBOThiM0FRWFFJYnVQNXk0MyUyRkdCOVEyZGZwJTJGYVhUV3RaMWlsb0VHR2pJWTMlMkZBUGU3JTJCYXlHJTJGOEFhZkolMkY2emIlMkJpJTJGU1VKVDJUSzY2eHRyYUdBQUFCb0FFQWJXOGZ5VkplY2ZVYnFQOEFqSFBWMzFkWHhNako2YyUyRmF5MjdMYU1kMUphTmdzb0R4WDlvOXJmMHphVzIlMkJyJTJGUGVwJTJGcFBSMGxQJTJGOVQxVkpKSkpTRE5MJTJGc3I5Z2VYR0FCVzFybmFrRDZGMzZQJTJCc3VBd3VtViUyRldYTnJ4SHZjeW1xaDJTN0lxTG5SYSUyQjdKZmoyVVBjR3RxZHZ5ZlZzcFo3SyUyRlElMkJ5MSUyRm9hVjZGZmowNUZacXZZTEt5UVMxM0VnN20lMkY5SktpbXZIcHJvckVWMU5ER0R3RFJ0YWtrRWcyTkNObnhEcWRHYjBMcnUzcUZESFg0MXJMVFdHeFZleVI3NjI2dGRWbU5hJTJGMVAzTFBXcjlpMmNtenJwWTV0ZEI2Z3pwTDdLcTdXR1hQcXFmNkQ4SEljMWdaOXVwbyUyRjdUJTJGem1WWCUyRkFEWHFyMGJyT0YwJTJCNDEzNWJXVkZnYzA1a0QxV01QMDZhcmkxN3EyNVA4MVolMkIlMkZYJTJCaSUyQm5hdVR5c2ZxblFlb002aDA2bDkxZVcySDRqd2YxdWhnYzcwTHEzRGRWMVhHeG03OGQ3JTJGd0NmbyUyRlFYZnBLN0dJUkZYNHMyZk43dkFlR3BSandrOTNJeU9qNVZEbk42VTUlMkZVTWElMkZmbFlsTEd1TG0lMkJxeG5wZmFkckcxdGRrMzAyVWZhdiUyQnMyZW4lMkZOclElMkJyZDklMkJObE5kZlMlMkZEdURYTXk4ZTdSMWJtamZKJTJGa05obDlOdjU5S3RPZUxiTURPNkZrdEp0ZSUyQiUyRkNzdExoJTJCaGNheG00bVk1b2M1dExNcjA4WEszc3Q5SDdUUmQlMkZTcVBXVzExZkElMkZhJTJCT09wZE9jNmpxZU1ObGxZamNkdnVkald0OXpmVnIzYjhkJTJGJTJGb20lMkYxRSUyQjJGNWpwZjF1NkRqOVJ5TEtjcXUzcGVhZjFyRjFhR2glMkJoeW0wWE1yOTFUZlprc3IlMkZuY2IlMkZTV1k5YkZUd2Z0ZlVPcGRRd1JadnhzRExPTGgydUJleHJMSDIxWXpMTEFIdjlLM1pYJTJGd0FIJTJGT0xVdyUyQm5mVSUyRjZ4VkRCNmxnNCUyRlR1dEVGckxhRyUyQmdMWEQlMkZDNDJ6WTJ4JTJGJTJCbHc3ZjAxZjh1cjlPbiUyQnJveVBxbGxaZlRoaE1zcUJaYmxXaHhGamFoRkxMV0UlMkIyN0hadjNzYnNyOUg5TjYzJTJGQmpXMUw5SjlQRGElMkY2dWRjeCUyRlU2VGE3YlNINnV4TFQ3VzBPYzAlMkZvNkhUNm1GbDFmelglMkJuVjluMVI2djA3YmJoWnYyemE0dzE0OUswVms2ZW5rTWVXUHUyZnpuOHhWYiUyRndmMEYxR1ZoNG1kU1czTUQydmJBZkEzQUg5eHlvWW1SWjBvJTJGWTg5NCUyQnp0Qk5HUzdRYlIlMkJhOG42T3olMkZ3SCUyRnR0THlSYnlQVWNYTXF6em5ZMk5maDlUcmJaYmtrVnl4elFCdnptJTJCbTA0dnI3ZjBkJTJGbzJmclglMkJEJTJGVFYycmMlMkJybUgwYnFIVDhmY1clMkZiMk5lZDFGcm1Xc2FYT1pMZlJMSDAxVyUyQnB1OUwlMkJhWFVpQ0pIQldHZWdNNmQxSWRVNld6YkppJTJGRmJBYVd1UHZkViUyRlYlMkZuUFRTdE42VTQlMkZXZnFQazVqaFJqMkJvckRyTVhMT2pxbmdlMm0xck5yblYzZTFsbnBmOGIlMkZPMVVybSUyRnFMbFpIMWElMkJzZVQwM0l3TGE3czk3SzhuRnJZJTJCeDlmcCUyQnA2T2ZqdXBaNlZ2VDMlMkJyWTNJJTJGMFA2T3luOUYlMkJqWHJLU0NGSkpKSktVa2tra3AlMkYlMkY5WDFWSkpKSlNra2trbEtRTTNEcHpjZDJQYnVBZEJhOWhMWHNjTldXVlBiOUN4amtkSkpUeEhWZnE0T2w1YmMlMkJxNTVkbHZMTHEyRGF4MWxwclk3SUZiUDVpNjNiNzdLZjlIJTJCayUyRlFycFBxJTJGY0xNQVZsZ3J1cGNXWE00ZHVCajlJMHk3ZiUyRjFmMDB2ckIwaG5WdW5QbyUyQmprTW16RnRHanE3UUMxdGxiOU5qdmQlMkZxeFM2ZFdNajB1cEg5RmZiWHN5cXdJYWJHd3gzMCUyRmYlMkJpZlc5bjlSSG9wd3ZyQmg0ZUYxViUyQlhrVSUyRnFtWlFRTFNCNmRlWXh3dXg3SEFmcEd2czlMJTJGQiUyRjhKNml2V1ZaMmRqNHZWOEZnZmJrWSUyRm81V084aG9zcmRyMyUyQmk2dDducmVmV3g4YjJoMjBoelpFd1I5RnclMkZsSU9MZzQlMkJJNjUyT0N4dDd2VWZXRDdRNCUyRlNjeHY1bSUyRjg5SzFJdWpZajhQcFdMaldEYSUyQnVzQjdTWkljZmM1dTZYZm5GVzMxc2VJZTBPRXpCRTYlMkZOU1NRVXBKSkpKU2tra2tsS1NTU1NVcEpKSkpUJTJGQVAlMkZXOVZTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJGJTJGWiUyRiUyQjAxSWxCb2IzUnZjMmh2Y0NBekxqQUFPRUpKVFFRbEFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGhDU1UwRDZnQUFBQUFZRUR3JTJGZUcxc0lIWmxjbk5wYjI0OUlqRXVNQ0lnWlc1amIyUnBibWM5SWxWVVJpMDRJajglMkJDandoUkU5RFZGbFFSU0J3YkdsemRDQlFWVUpNU1VNZ0lpMHZMMEZ3Y0d4bEx5OUVWRVFnVUV4SlUxUWdNUzR3THk5RlRpSWdJbWgwZEhBNkx5OTNkM2N1WVhCd2JHVXVZMjl0TDBSVVJITXZVSEp2Y0dWeWRIbE1hWE4wTFRFdU1DNWtkR1FpUGdvOGNHeHBjM1FnZG1WeWMybHZiajBpTVM0d0lqNEtQR1JwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOU0c5eWFYcHZiblJoYkZKbGN6d3ZhMlY1UGdvSlBHUnBZM1ElMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWFYUmxiVUZ5Y21GNVBDOXJaWGslMkJDZ2tKUEdGeWNtRjVQZ29KQ1FrOFpHbGpkRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUXVVRTFJYjNKcGVtOXVkR0ZzVW1WelBDOXJaWGslMkJDZ2tKQ1FrOGNtVmhiRDQzTWp3dmNtVmhiRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDVHd2WkdsamRENEtDUWs4TDJGeWNtRjVQZ29KUEM5a2FXTjBQZ29KUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRm5aVVp2Y20xaGRDNVFUVTl5YVdWdWRHRjBhVzl1UEM5clpYayUyQkNnazhaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG1wdlluUnBZMnRsZER3dmMzUnlhVzVuUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrOFlYSnlZWGslMkJDZ2tKQ1R4a2FXTjBQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFU5eWFXVnVkR0YwYVc5dVBDOXJaWGslMkJDZ2tKQ1FrOGFXNTBaV2RsY2o0eFBDOXBiblJsWjJWeVBnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pQQzlrYVdOMFBnb0pDVHd2WVhKeVlYayUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVTJOaGJHbHVaend2YTJWNVBnb0pQR1JwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVhWFJsYlVGeWNtRjVQQzlyWlhrJTJCQ2drSlBHRnljbUY1UGdvSkNRazhaR2xqZEQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFF1VUUxVFkyRnNhVzVuUEM5clpYayUyQkNna0pDUWs4Y21WaGJENHhQQzl5WldGc1Bnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pQQzlrYVdOMFBnb0pDVHd2WVhKeVlYayUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVm1WeWRHbGpZV3hTWlhNOEwydGxlVDRLQ1R4a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVqY21WaGRHOXlQQzlyWlhrJTJCQ2drSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNUeGhjbkpoZVQ0S0NRa0pQR1JwWTNRJTJCQ2drSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4U1pYTThMMnRsZVQ0S0NRa0pDVHh5WldGc1BqY3lQQzl5WldGc1Bnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pQQzlrYVdOMFBnb0pDVHd2WVhKeVlYayUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVm1WeWRHbGpZV3hUWTJGc2FXNW5QQzlyWlhrJTJCQ2drOFpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbXB2WW5ScFkydGxkRHd2YzNSeWFXNW5QZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWs4WVhKeVlYayUyQkNna0pDVHhrYVdOMFBnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRm5aVVp2Y20xaGRDNVFUVlpsY25ScFkyRnNVMk5oYkdsdVp6d3ZhMlY1UGdvSkNRa0pQSEpsWVd3JTJCTVR3dmNtVmhiRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDVHd2WkdsamRENEtDUWs4TDJGeWNtRjVQZ29KUEM5a2FXTjBQZ29KUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWMzVmlWR2xqYTJWMExuQmhjR1Z5WDJsdVptOWZkR2xqYTJWMFBDOXJaWGslMkJDZ2s4WkdsamRENEtDUWs4YTJWNVBsQk5VRkJFVUdGd1pYSkRiMlJsVG1GdFpUd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UGxCTlVGQkVVR0Z3WlhKRGIyUmxUbUZ0WlR3dmEyVjVQZ29KQ1FrSkNUeHpkSEpwYm1jJTJCVEdWMGRHVnlQQzl6ZEhKcGJtYyUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCVUUxVWFXOW5ZVkJoY0dWeVRtRnRaVHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBsQk5WR2x2WjJGUVlYQmxjazVoYldVOEwydGxlVDRLQ1FrSkNRazhjM1J5YVc1blBtNWhMV3hsZEhSbGNqd3ZjM1J5YVc1blBnb0pDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzV6ZEdGMFpVWnNZV2M4TDJ0bGVUNEtDUWtKQ1FrOGFXNTBaV2RsY2o0d1BDOXBiblJsWjJWeVBnb0pDUWtKUEM5a2FXTjBQZ29KQ1FrOEwyRnljbUY1UGdvSkNUd3ZaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlXZGxVbVZqZER3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOUVdScWRYTjBaV1JRWVdkbFVtVmpkRHd2YTJWNVBnb0pDUWtKQ1R4aGNuSmhlVDRLQ1FrSkNRa0pQSEpsWVd3JTJCTUM0d1BDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENHdMakE4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQamN6TkR3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTlRjMlBDOXlaV0ZzUGdvSkNRa0pDVHd2WVhKeVlYayUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFF1VUUxQlpHcDFjM1JsWkZCaGNHVnlVbVZqZER3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOUVdScWRYTjBaV1JRWVhCbGNsSmxZM1E4TDJ0bGVUNEtDUWtKQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrSkNUeHlaV0ZzUGkweE9Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQkxURTRQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDQzTnpROEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpVNU5Ed3ZjbVZoYkQ0S0NRa0pDUWs4TDJGeWNtRjVQZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNRazhhVzUwWldkbGNqNHdQQzlwYm5SbFoyVnlQZ29KQ1FrSlBDOWthV04wUGdvSkNRazhMMkZ5Y21GNVBnb0pDVHd2WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlYQmxja2x1Wm04dVVFMVFZWEJsY2s1aGJXVThMMnRsZVQ0S0NRazhaR2xqZEQ0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRa0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRa0pQR0Z5Y21GNVBnb0pDUWtKUEdScFkzUSUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxsQk5VR0Z3WlhKT1lXMWxQQzlyWlhrJTJCQ2drSkNRa0pQSE4wY21sdVp6NXVZUzFzWlhSMFpYSThMM04wY21sdVp6NEtDUWtKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWMzUmhkR1ZHYkdGblBDOXJaWGslMkJDZ2tKQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pDVHd2WkdsamRENEtDUWtKUEM5aGNuSmhlVDRLQ1FrOEwyUnBZM1ElMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxsQk5WVzVoWkdwMWMzUmxaRkJoWjJWU1pXTjBQQzlyWlhrJTJCQ2drSlBHUnBZM1ElMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVqY21WaGRHOXlQQzlyWlhrJTJCQ2drSkNUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG1wdlluUnBZMnRsZER3dmMzUnlhVzVuUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVhWFJsYlVGeWNtRjVQQzlyWlhrJTJCQ2drSkNUeGhjbkpoZVQ0S0NRa0pDVHhrYVdOMFBnb0pDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaGNHVnlTVzVtYnk1UVRWVnVZV1JxZFhOMFpXUlFZV2RsVW1WamREd3ZhMlY1UGdvSkNRa0pDVHhoY25KaGVUNEtDUWtKQ1FrSlBISmxZV3clMkJNQzR3UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0d0xqQThMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqY3pORHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJOVGMyUEM5eVpXRnNQZ29KQ1FrSkNUd3ZZWEp5WVhrJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NVFUVlZ1WVdScWRYTjBaV1JRWVhCbGNsSmxZM1E4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWtKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVlc1aFpHcDFjM1JsWkZCaGNHVnlVbVZqZER3dmEyVjVQZ29KQ1FrSkNUeGhjbkpoZVQ0S0NRa0pDUWtKUEhKbFlXdyUyQkxURTRQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDR0TVRnOEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpjM05Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQk5UazBQQzl5WldGc1Bnb0pDUWtKQ1R3dllYSnlZWGslMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaGNHVnlTVzVtYnk1d2NHUXVVRTFRWVhCbGNrNWhiV1U4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWtKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbkJ3WkM1UVRWQmhjR1Z5VG1GdFpUd3ZhMlY1UGdvSkNRa0pDVHh6ZEhKcGJtYyUyQlZWTWdUR1YwZEdWeVBDOXpkSEpwYm1jJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1QlVFbFdaWEp6YVc5dVBDOXJaWGslMkJDZ2tKUEhOMGNtbHVaejR3TUM0eU1Ed3ZjM1J5YVc1blBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNTBlWEJsUEM5clpYayUyQkNna0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adlZHbGphMlYwUEM5emRISnBibWMlMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVRVkJKVm1WeWMybHZiand2YTJWNVBnb0pQSE4wY21sdVp6NHdNQzR5TUR3dmMzUnlhVzVuUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuUjVjR1U4TDJ0bGVUNEtDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhSVWFXTnJaWFE4TDNOMGNtbHVaejRLUEM5a2FXTjBQZ284TDNCc2FYTjBQZ280UWtsTkElMkJrQUFBQUFBSGdBQXdBQUFFZ0FTQUFBQUFBQzNnSkElMkYlMkI3JTJGN2dNR0FsSURad1VvQSUyRndBQWdBQUFFZ0FTQUFBQUFBQzJBSW9BQUVBQUFCa0FBQUFBUUFEQXdNQUFBQUJmJTJGOEFBUUFCQUFBQUFBQUFBQUFBQUFBQWFBZ0FHUUdRQUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTRRa2xOQSUyQjBBQUFBQUFCQUFaQUFBQUFFQUFRQmtBQUFBQVFBQk9FSkpUUVFtQUFBQUFBQU9BQUFBQUFBQUFBQUFBRCUyQkFBQUE0UWtsTkJBMEFBQUFBQUFRQUFBQWVPRUpKVFFRWkFBQUFBQUFFQUFBQUhqaENTVTBEOHdBQUFBQUFDUUFBQUFBQUFBQUFBUUE0UWtsTkJBb0FBQUFBQUFFQUFEaENTVTBuRUFBQUFBQUFDZ0FCQUFBQUFBQUFBQUU0UWtsTkElMkZVQUFBQUFBRWdBTDJabUFBRUFiR1ptQUFZQUFBQUFBQUVBTDJabUFBRUFvWm1hQUFZQUFBQUFBQUVBTWdBQUFBRUFXZ0FBQUFZQUFBQUFBQUVBTlFBQUFBRUFMUUFBQUFZQUFBQUFBQUU0UWtsTkElMkZnQUFBQUFBSEFBQVAlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkY4RDZBQUFBQUQlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkZBJTJCZ0FBQUFBJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGd1BvQUFBQUFQJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGOEQ2QUFBT0VKSlRRUUlBQUFBQUFBUUFBQUFBUUFBQWtBQUFBSkFBQUFBQURoQ1NVMEVIZ0FBQUFBQUJBQUFBQUE0UWtsTkJCb0FBQUFBQTFVQUFBQUdBQUFBQUFBQUFBQUFBQUZGQUFBQndnQUFBQkFBY3dCM0FHa0Fjd0J6QUY4QVlRQnlBRzBBZVFCZkFHc0FiZ0JwQUdZQVpRQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQndnQUFBVVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFRQUFBQUFBQUc1MWJHd0FBQUFDQUFBQUJtSnZkVzVrYzA5aWFtTUFBQUFCQUFBQUFBQUFVbU4wTVFBQUFBUUFBQUFBVkc5d0lHeHZibWNBQUFBQUFBQUFBRXhsWm5Sc2IyNW5BQUFBQUFBQUFBQkNkRzl0Ykc5dVp3QUFBVVVBQUFBQVVtZG9kR3h2Ym1jQUFBSENBQUFBQm5Oc2FXTmxjMVpzVEhNQUFBQUJUMkpxWXdBQUFBRUFBQUFBQUFWemJHbGpaUUFBQUJJQUFBQUhjMnhwWTJWSlJHeHZibWNBQUFBQUFBQUFCMmR5YjNWd1NVUnNiMjVuQUFBQUFBQUFBQVp2Y21sbmFXNWxiblZ0QUFBQURFVlRiR2xqWlU5eWFXZHBiZ0FBQUExaGRYUnZSMlZ1WlhKaGRHVmtBQUFBQUZSNWNHVmxiblZ0QUFBQUNrVlRiR2xqWlZSNWNHVUFBQUFBU1cxbklBQUFBQVppYjNWdVpITlBZbXBqQUFBQUFRQUFBQUFBQUZKamRERUFBQUFFQUFBQUFGUnZjQ0JzYjI1bkFBQUFBQUFBQUFCTVpXWjBiRzl1WndBQUFBQUFBQUFBUW5SdmJXeHZibWNBQUFGRkFBQUFBRkpuYUhSc2IyNW5BQUFCd2dBQUFBTjFjbXhVUlZoVUFBQUFBUUFBQUFBQUFHNTFiR3hVUlZoVUFBQUFBUUFBQUFBQUFFMXpaMlZVUlZoVUFBQUFBUUFBQUFBQUJtRnNkRlJoWjFSRldGUUFBQUFCQUFBQUFBQU9ZMlZzYkZSbGVIUkpjMGhVVFV4aWIyOXNBUUFBQUFoalpXeHNWR1Y0ZEZSRldGUUFBQUFCQUFBQUFBQUphRzl5ZWtGc2FXZHVaVzUxYlFBQUFBOUZVMnhwWTJWSWIzSjZRV3hwWjI0QUFBQUhaR1ZtWVhWc2RBQUFBQWwyWlhKMFFXeHBaMjVsYm5WdEFBQUFEMFZUYkdsalpWWmxjblJCYkdsbmJnQUFBQWRrWldaaGRXeDBBQUFBQzJKblEyOXNiM0pVZVhCbFpXNTFiUUFBQUJGRlUyeHBZMlZDUjBOdmJHOXlWSGx3WlFBQUFBQk9iMjVsQUFBQUNYUnZjRTkxZEhObGRHeHZibWNBQUFBQUFBQUFDbXhsWm5SUGRYUnpaWFJzYjI1bkFBQUFBQUFBQUF4aWIzUjBiMjFQZFhSelpYUnNiMjVuQUFBQUFBQUFBQXR5YVdkb2RFOTFkSE5sZEd4dmJtY0FBQUFBQURoQ1NVMEVLQUFBQUFBQURBQUFBQUUlMkY4QUFBQUFBQUFEaENTVTBFRVFBQUFBQUFBUUVBT0VKSlRRUVVBQUFBQUFBRUFBQUFBVGhDU1UwRURBQUFBQUFXcndBQUFBRUFBQUNnQUFBQWRBQUFBZUFBQU5tQUFBQVdrd0FZQUFIJTJGMlAlMkZnQUJCS1JrbEdBQUVDQUFCSUFFZ0FBUCUyRnRBQXhCWkc5aVpWOURUUUFDJTJGJTJCNEFEa0ZrYjJKbEFHU0FBQUFBQWYlMkZiQUlRQURBZ0lDQWtJREFrSkRCRUxDZ3NSRlE4TURBOFZHQk1URlJNVEdCRU1EQXdNREF3UkRBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBRU5Dd3NORGcwUURnNFFGQTRPRGhRVURnNE9EaFFSREF3TURBd1JFUXdNREF3TURCRU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd00lMkY4QUFFUWdBZEFDZ0F3RWlBQUlSQVFNUkFmJTJGZEFBUUFDdiUyRkVBVDhBQUFFRkFRRUJBUUVCQUFBQUFBQUFBQU1BQVFJRUJRWUhDQWtLQ3dFQUFRVUJBUUVCQVFFQUFBQUFBQUFBQVFBQ0F3UUZCZ2NJQ1FvTEVBQUJCQUVEQWdRQ0JRY0dDQVVERERNQkFBSVJBd1FoRWpFRlFWRmhFeUp4Z1RJR0ZKR2hzVUlqSkJWU3dXSXpOSEtDMFVNSEpaSlQ4T0h4WTNNMUZxS3lneVpFazFSa1JjS2pkRFlYMGxYaVpmS3poTVBUZGVQelJpZVVwSVcwbGNUVTVQU2x0Y1hWNWZWV1puYUdscWEyeHRibTlqZEhWMmQzaDVlbnQ4Zlg1JTJGY1JBQUlDQVFJRUJBTUVCUVlIQndZRk5RRUFBaEVESVRFU0JFRlJZWEVpRXdVeWdaRVVvYkZDSThGUzBmQXpKR0xoY29LU1ExTVZZM00wOFNVR0ZxS3lnd2NtTmNMU1JKTlVveGRrUlZVMmRHWGk4ck9FdzlOMTQlMkZOR2xLU0Z0SlhFMU9UMHBiWEYxZVgxVm1aMmhwYW10c2JXNXZZbk4wZFhaM2VIbDZlM3glMkYlMkZhQUF3REFRQUNFUU1SQUQ4QTlWU1NTU1VwSkpKSlNra2trbEtTU1NTVXM0dURTV2lYUm9PSktGaTNPdngyV3Zic2U0ZTVnTXdSbzVzb3lwZE95TjltVFNSSHBXdmo0T2M0JTJGd0RWZjlXa3B1cEpKSktVa2tra3BTU1NTU2xKSkpKS1Vra2trcCUyRiUyRjBQVlVrbENxeHR0YmJHJTJGUmVBNGZBcEtacEpKSktVbzJXTnJyZFk4dzFnTG5IeUFsVk9zV3Zvd1haRFolMkZRT1phOEQ5eHJtbTMlMkZOcjNQVXN3bSUyRnBtUUdhbXlsNGJIaVd1aEpUWXFzRnRUTEJ3OW9kOTRVMVE2RmtmYU9rNHRzenVxWWZ3VjlKU2xsMSUyRm9PdDJzT2d1RFhnZVRtN2YlMkZQbU4lMkZ3Q0NMVVdaMVZocnlzYktBJTJCanVhN3pndHVaJTJGMUZxSVVYVFNRY3ZLWmk0N3NoN1hPWTB0QkRZSmh6bXMzYWtmUjNibFZkMTNwck10dUklMkJ3c2UlMkY2TDNBaG03bjAlMkZVJTJCaTJ6YWZ6a0ZPZ3E5JTJCZGowWkZPTTRrM1pEdHJHTkVuaHp0N3YzV2JXUFU4YkpweWF2VnBkdVp1YzJlTldPTmIyJTJGMlh0WE9ZMlZVN3JBNmhuTzlSdUpTJTJCcjFoTzFsZ3VHSmJ1WXoyZXh0dnYzZnpMUFUlMkZ3Q0VTVTlRa2tra3BTU1NTU2xKSkpKS2YlMkYlMkZSOVZXZjBpd2l1M0ZmOUxHc2V3VCUyQjZEN1AlMkZBeXh5MEZtdW5INnhQRE1wZ2QlMkZiWkZUJTJGd0RvT3glMkYlMkIyMFFwMGxDMDJDdHhxQUx3RHRCNEo4Rk5KQlRWb3Z4JTJCbzRqdmJMTEdsbHRUdVJNc3NyZiUyRkFOSml6JTJCaFpEcU1PJTJGRXlDWDJkT2M2dCUyQmt1YzFnbXQlMkIzJTJGaGFQVGVvWjVzNlIxSVpyQkdEbGtOdkklMkJqWGNZWXl4JTJGN3RXVjlCJTJGd0R3JTJGd0R3bHlEMUxxV0gwanEyTjFPNTVyeE9vZ1kxcndDNEM5dXVQNm16ZHQ5V2wxdjZUJTJCYiUyRkFGZEZTJTJGMU15cSUyRjJWVGh1c2ElMkIydHN0Mms2c1B1WTczQnJtJTJGbzNWdjJmeSUyRjNGMFM0VEF6cSUyQm0lMkZXRHF1S0duYmhXT3lhNjJEVVVscmNteXVsa3RaNmYyZXkxOVd6OCUyRjJMczJaJTJCRll4MWpMNnl4Z0JlJTJGY0lBSTNDWGZOSXFaWDN1cnNxcXJaNmo3VHFKZ05ZMlBVc1BQMGR5cGZXSiUyRm85Tk9UMnhyYXJIVHhzM3Raa2YlMkJ5NzdWUjZ2OWJlamROc2JrYjNaYnFtMnNmVmpnT09ocmRaRmxqcXNmZlhzJTJGbXZWOVYlMkYlMkJEWEhkWiUyQnV2VTh6QTZpJTJCajAyWTF6YXdhWkx0MkxZMjF0bHRiN1hPYjZqNiUyRndEUjFWJTJGelYzNnY2clBWWUZVJTJCaUNzNVBTN2NkNDNPMldVT0I3N2QxWCUyRlQyN2x3dlZuTnlLSzhkMTVxNmhpajIwN285ZGczREhkVzltOXpMdjhBUSUyRjRXdTcxSyUyRlR0cjlhcXpKJTJCdUhWOHRtUjB6Tm95THZzWFU4TnI3Y2R0am10TjFKOUslMkIycG9kc2JrMSUyRm8lMkY4QTBZc25HNnRlJTJCbkxaYmRYWFk2cHR0QUROd3Vjd21odjJjV2J2MHRuciUyRnBLbmZwS2JLZjhBdHNxRDFEdnJqbmZWNzBjS2xsZGd6Z2JxamY3UUhCM3Ayc0cwc2I2bHYwJTJGZlo2VEVjWmc2MzB4ejJ2ZXpLNmpWYmZoVnRmNmJpUSUyQnhsdG1OWTdhMno5SnMzVnUlMkZ3YXl2ckhoMSUyQmhoZEt2M1h1YmpCaFk5d0RiSHRQcE9kWGtPSDZ0MURkJTJGUnNsJTJGNkMlMkZ3RG9tVjdGZzlXYyUyRkYlMkJxM1JMNmJpYmVuNVdWamg0bGxqZHhiZXhsdGYwNkxhOXZ2cCUyRk0lMkZ3QUZaJTJGaEV1cW4wcjZsZlhNOVdZenB2Vm9vNnd4dmNiQmNHajlMdHIwOUxMb2o5YnhmJTJCdlUlMkZvZjVtejlhdnJKZDAlMkIyakJ3SEFaVHJjZDE3aUE3YlZaYTJuWTBIJTJGQ1h3OXYlMkZBQWRmJTJGV2w1emlkUVo5WmNZM2wzb2Rkd2cyejFtSFo2eldmUXYzdDIlMkJuazAlMkZ3Q24lMkZ3RFJmOHhmNkRmMURxdlhHWiUyQmU1dHpzaTdHZDZsbTJrUHNxTmJxcU9HMSUyRjRDdXhucHQlMkZTNyUyRjlJOUFMalIxR2g3Zjk2JTJCdUpKcEExS1pqMldORG1PRG1uaHdNaEpheVNTU1NVJTJGd0QlMkYwdlZWbjlhaXJGR1lTR2pFY0xYdU9rViUyRnpkNUolMkZkWlUlMkZ3QlglMkZyYTBFSE05RDdKZjlwRTQlMkZwdjlZSFgyYlQ2bW45UklLY0U5VTZsZ1huSkR2Mmwwak4lMkZTNDk3UzM5QzUzMHNPeXhuJTJCQmMlMkYlMkJoNVA4MyUyRjJreWZTJTJGUjVObFBydjE2dXdjekV4c1BIRm96TEJSV0h6NnJyaVdNOU91djZIczlUM3ZzZXVlNkI5YnVvWkY1eEJVODRCREMlMkJ0b1pZVzFQY3pHJTJCMDJHeG03MUdiMlhQMmZvZDdQNW10Y3QxNjdxJTJGVDg3R2RmayUyRmJzY1dISTZWMU5yUU5HdTNPMk5aNmZwNUZOOWRUY3JIM2VwUjZmOVJLd1JZWHpoS0V1R1lvJTJGeGZTTXZNNmxabEYlMkZWZlNvYlUxMVE5TUd5cUxmYSUyQnJQOVBKc3I5S3owOW42YkdxJTJGN2RXTjF6OVZ4QzNLZlpUMCUyQiUyQlBVeUdnNU5JYVBkVTdlelplN0t4UFIlMkZSNUd5cjFzWDlEYjYlMkZ3RGd1WnglMkJ2MzUyYmU0V053ZnQlMkI5dGIybjIxbXphJTJGMDdYbjIlMkZwN3FtVmVwNmRiUDB2cWZvbHFaRDdtWTkxZURtWGg5cEJBWkRHalQ5YXd2YiUyQmtwM1clMkZwMk1ka2ZwYXYxYiUyQlhVYjBXdWxUZVAyM2g1RGkzSkwzVVlXVFl6bHpiS24xc2M1ck43YmFNM0ZaOXB3OHhydlN2ciUyRlFmMGltNnV2SDZ2WTdHNmhmUzJteDFXRllhcTdibmslMkJvMnIwcktQVGE3YnVzdHhYMjAlMkJ6JTJCbGY0UlclMkZxUFhlTTQwM3MlMkZROUxwZGJRNHY5N1dsNERjVzFudWQ2UHFmckgyZTluc3pNYXZOeCUyRnM5JTJGMmhBNmk1cjc3SFpMSDI0VG4xVzQlMkJVd2oyUHZhM0pkajViZnphSGI4bjdGayUyRjRQOVl4UDB0WDh3dWxxYVdmYjFDelo2R2FNMzA2MjJXREQlMkZTVjFtcDNzZlk2dGpXT3NZMXRmODc3NmElMkZUUTdzMjdxRk5WSXJxd0FmVXNiWlJYdDlTME45S3kxdFg4MyUyQmdyZSUyRjFzZWolMkZBRTFsektsdGREdGJpOVpKc3FxYlRhQlhkUzBUYlc2OFB5Y1V4Tmo4cXJJYlIlMkZwUFUlMkZTYjYlMkZUeXY2VldmMHF2T3J6bXNZYXNuR3pIbWs3Z3gxWmE2SzJYUjdzZCUyQjV2Nks3OUpYaTNiUFUlMkZWOGk3MVJSVTUlMkZXYUxNdjZrWWo3U0dYOUw2ZyUyQnFLJTJGb3NyeW1ldXgxY2Y0QjE3ZllzcnB1UG1OeGZ0ejYzUGN3bDlEV0RRMnNJcVprTkolMkZOWmU2bHVSNmYlMkZBQVglMkZBQVMxZjJwWFgwdnElMkJKbG43TGZrVlZ0YTNaQWZsNDkyOW15biUyRkE3NnJMcTg2ciUyQmJvJTJGNHF5aFZydW9aZlNlazRsZG1NMTJQZTIyN0Q5WFFCdHZwdHUzJTJCN2Q2VnI2NlhmMlBVJTJGd2lTbnN1cW5EeUxNZkZ0TVpPUmolMkJyWFNQZUhGc2VvMmw3ZzMxTGElMkZWJTJCaCUyRjJvcSUyRndmcWZwRnpuVmNkOXVEWml2YXh6RFpYYTF6enRaYVhCMUxXJTJCdiUyRmdiJTJGWlZYaTV0djgzJTJGUnNqOUFzTHFmWHYyajAlMkZwWHFQRmVkZ051cmZhMTBGM3Vxc3g4bHY4QW8zT2J2cmYlMkZBTVQ2biUyQkZRcXVxNTklMkZVUmVjMXpiN0NIWE1jOGh0bXc3bjQ3djhCdHVjUFViNnY2UDlMZDY5aU5vUzlINlZrMFp6Y3BqM3RxcWVXMUFBdHVjJTJGOEFtN01leWh2Nld2WiUyRk5aWCUyRkFJRXVnenVrMTRlTGlONjlmYmk0OXU2d2dCanlXTmI2ZFA2SU9hNTJWNnZ0MjQ3UDBkRCUyRkFGUDBhampkYzZrQmVla1lRZDFESXMydHNaVlpiZFZYdDl0WXFzRzklMkIzJTJGVFBaJTJCbCUyRndCQ3NhanBYViUyQnRYMlp3byUyRmFsN1d1dnY5UzBNZWEyJTJGVDIlMkJ2WjdtMWUxajZHVjc2UFolMkZwSzBORTdhdnBIMVo2OW5kVTZUaTRtUDZtVlprdEJkYmtQM3VxYldUUmtqS3VZR2I5dDFlNnYyNzc2clA5SXV5dzhWdUpqdG9hUzh0a3VlZVhPY2R6MyUyRjJuTHliNnZkWnY2RGpES3dtVnQzbHpic1p6M1ZzWmNIbHVUZ1g0OTloZlJZeHV6SnduJTJGem5zeUtyTEx2OEgydlQlMkZyOWhPREslMkJzTSUyRlp1U1drdnJ0RmpDMXdMbXZyJTJGV0txVyUyRm0lMkJ6YlolMkJrUlI0dlZwS24wM3ElMkZUZXE0N01ucCUyQlF5JTJCdDdXdkcwJTJCNEJ3M045U3MlMkZwSyUyRiUyQnVOVnhCVCUyRkFQJTJGVDlWVE9hMTdTeHdEbXVCRG1uVUVIc1U2U1NueGY2eDlDelBxdDFFQ2l4N0dNZWJlbjVRMGNhbmV5eWx6dm91dG8zTXJ1WiUyRmhhdjBucCUyRnBGVXJ5YU1qRnZyenBzNmRrUGJabVVzSHZ4N3pGYmVyNGY3cmJMUDZXeiUyRkFFbG4lMkJpdll2WSUyQnU5TDZmMVhwbDJIMUdHME9HNzFTUTAxdUgwYjJQZDlCN1AlMkZVYiUyRndCR3ZIOHZwRjNUNyUyRlFwY0g1TkllYTdhejZsZVhTZDIlMkJ6SGpkVzcwcUhiTW5FJTJGd2xTWnJFMk51emZqS0hNWSUyQkdmcHpSMm4lMkZMOUg5NXdNJTJGQnlPazVoeHNnaXl1d2I2cm02MTNWSDZOMVglMkZBS01yVzEwanFicm1IRHlIbDhNaGpZM0c2c0hkNlBPMzE4ZHY2ZWl6MDdmVzlQMHYlMkJPSGlQeGM2bjlqNTUyWWRoM1ltVnk3RnRQNSUyQnZ2Zml1JTJGdyUyRiUyRkIlMkZwZjV6ZWhZdjFhNnBWazVXTG5oJTJCSlpoTUw2cm1pV3ZzQlk2dDFGbjBuMU5ZNzdUdnAlMkZTZjhXbmlqcU5Xbk9Fc2NqR1E0WkI3T2lnMGZWN0xmMDFycjhycVIydGV6M1hQYkJ4NjdYc1l6YXl4amJNbDltMzglMkY5SiUyQmwlMkZTJTJCcHpydlV4TVdxdnFOVnVKa3N4MzQwMnpXNW9vc2JkU2NpZzcyNU9IZDlxWTZ2JTJCYzJaT0xUNk5uODh5M2U2WDF1eWs5TmV4em5ZZCUyQlBkaTJNYzFsVHhsNHp0em5XdTNiS2ZXWlpYYnM5VDA2ZjB5cGRZNkoxSHIlMkZWSDlXcnRwc3g2bU1xRkRTJTJGMVdpc0YzMFhOYTUlMkI1NzdiZjBleXolMkZSViUyQnFuSHdXMVJvdERGNnhheTQ5VHZpa3M5T0hOQkFjOWcyc2ZjMW03WnUyJTJGb0clMkZReHYzUFNUOUx3MmRUYmxNJTJCMVcxc2REaXhvTTJ2dTNmMDkzNk90M3BPWnN1cnAlMkZRNUglMkJqJTJGd2FKajRHWGYwNTJaamVwUmpibU9yeXdOek5qSHVsaDlNZWc1ek4lMkIxbHJuJTJGNFI5ZnAlMkZwRll4Y0hENmV5Nm5JdGRTR0FPdGRsRndobGglMkZSdUhwTjNQcGJ2OEE1eG5xZW1nRk9aMSUyRkR5TVc3N1QxRElPUXk0dnJhOTFicUMwMGVuJTJCaVl4JTJGMDZOcnFuZXYlMkZBSWYlMkZBRWoxV3hhRzJzeEtPbzlNdTZpSzMyVVllT0xITUwzdkxyTnJybXUzJTJCbHYlMkZBUFJpMWN2cGwxUFVxVzNOZmg1VkozNCUyQk5tTzlYRXVySHUlMkZWN3QxakdNc1lmMG5vUDluJTJGQUFOcXY5UTZXODR3NjMwaG4yY3VGZDFqY1lHeXNqUzZxekx4bWl1M0Z5YWR2ODk2TlglMkJsJTJCMmVxaFNTQlExdSUyRndlZDZ6OVglMkJydEZKSDFkWmoxYWdFTnNxWnVJQjlFUHN2YmtXN1dqNmVTJTJGNmZxJTJCaiUyQmpXT2NiTnc4aG5xZE54cTN0aXpaWVhPYTRUeTdma1dibU5kJTJGT2Jmb2Y0UmRwVDFmcUhVczFyYyUyRkxma3R5UlUydkdhNGJTSE5lUHRGTDNlbDZWbUxsVmVqWjdmMG0lMkYxY2olMkJaJTJCMFdidlNmcW4wJTJGcTFlVGpkUklkbFZzcHNxY3h3QnFjOFBiZlclMkJyWDM3NiUyRlR0ZiUyRkFLSDBiY1M2djJXSlhxdWxqNFlDWEVEWnF1cnhuMWR4WGRSb3N1dzc4aG5YY1I1ZFNXdTIyT3JZMmJxc2RuMDNaRlR0OTMyT3oyWldMNmxWTFBXb1hTMTlIenVwOVBxJTJCc2ZUTVl0eThrbjdaUlhEQ3k1aGRWYjFERXJlJTJGOU5VNzlMdnhIYkxjbGo3S2Y1cklzcFhFNW1QbTlKNnElMkZMcWE4MllybXZmVkpIcVVzZCUyQmd5cUxhdGxuMGElMkYwM3BQOEFXeExtZXJWJTJCNWolMkJ6JTJGVTdxdlIlMkJwOUNvdDZRTmxMSmJaUTV4ZFpYYjlPMWw3M1M5OWpudTMlMkJxNyUyQmUlMkZuRW1ONTdxdjFYNmI5YyUyRnE5OW94V054JTJCdVl4Y3l4N2c5cmpjMlBYeE01dDM2eDZkam10OUgxdjAyTCUyQmk5TCUyRkNWV2N6OVZQcjUxbnBQV1g5SCUyQnN4dXk4Ykl0Rk5veUR2dG90OXRJY04lMkYwNkhlMzE2UCUyRkFFS28lMkZ3QUo5cDloYlhXMTdudGFBOThiM0FRWFFJYnVQNXk0MyUyRkdCOVEyZGZwJTJGYVhUV3RaMWlsb0VHR2pJWTMlMkZBUGU3JTJCYXlHJTJGOEFhZkolMkY2emIlMkJpJTJGU1VKVDJUSzY2eHRyYUdBQUFCb0FFQWJXOGZ5VkplY2ZVYnFQOEFqSFBWMzFkWHhNako2YyUyRmF5MjdMYU1kMUphTmdzb0R4WDlvOXJmMHphVzIlMkJyJTJGUGVwJTJGcFBSMGxQJTJGOVQxVkpKSkpTRE5MJTJGc3I5Z2VYR0FCVzFybmFrRDZGMzZQJTJCc3VBd3VtViUyRldYTnJ4SHZjeW1xaDJTN0lxTG5SYSUyQjdKZmoyVVBjR3RxZHZ5ZlZzcFo3SyUyRlElMkJ5MSUyRm9hVjZGZmowNUZacXZZTEt5UVMxM0VnN20lMkY5SktpbXZIcHJvckVWMU5ER0R3RFJ0YWtrRWcyTkNObnhEcWRHYjBMcnUzcUZESFg0MXJMVFdHeFZleVI3NjI2dGRWbU5hJTJGMVAzTFBXcjlpMmNtenJwWTV0ZEI2Z3pwTDdLcTdXR1hQcXFmNkQ4SEljMWdaOXVwbyUyRjdUJTJGem1WWCUyRkFEWHFyMGJyT0YwJTJCNDEzNWJXVkZnYzA1a0QxV01QMDZhcmkxN3EyNVA4MVolMkIlMkZYJTJCaSUyQm5hdVR5c2ZxblFlb002aDA2bDkxZVcySDRqd2YxdWhnYzcwTHEzRGRWMVhHeG03OGQ3JTJGd0NmbyUyRlFYZnBLN0dJUkZYNHMyZk43dkFlR3BSandrOTNJeU9qNVZEbk42VTUlMkZVTWElMkZmbFlsTEd1TG0lMkJxeG5wZmFkckcxdGRrMzAyVWZhdiUyQnMyZW4lMkZOclElMkJyZDklMkJObE5kZlMlMkZEdURYTXk4ZTdSMWJtamZKJTJGa05obDlOdjU5S3RPZUxiTURPNkZrdEp0ZSUyQiUyRkNzdExoJTJCaGNheG00bVk1b2M1dExNcjA4WEszc3Q5SDdUUmQlMkZTcVBXVzExZkElMkZhJTJCT09wZE9jNmpxZU1ObGxZamNkdnVkald0OXpmVnIzYjhkJTJGJTJGb20lMkYxRSUyQjJGNWpwZjF1NkRqOVJ5TEtjcXUzcGVhZjFyRjFhR2glMkJoeW0wWE1yOTFUZlprc3IlMkZuY2IlMkZTV1k5YkZUd2Z0ZlVPcGRRd1JadnhzRExPTGgydUJleHJMSDIxWXpMTEFIdjlLM1pYJTJGd0FIJTJGT0xVdyUyQm5mVSUyRjZ4VkRCNmxnNCUyRlR1dEVGckxhRyUyQmdMWEQlMkZDNDJ6WTJ4JTJGJTJCbHc3ZjAxZjh1cjlPbiUyQnJveVBxbGxaZlRoaE1zcUJaYmxXaHhGamFoRkxMV0UlMkIyN0hadjNzYnNyOUg5TjYzJTJGQmpXMUw5SjlQRGElMkY2dWRjeCUyRlU2VGE3YlNINnV4TFQ3VzBPYzAlMkZvNkhUNm1GbDFmelglMkJuVjluMVI2djA3YmJoWnYyemE0dzE0OUswVms2ZW5rTWVXUHUyZnpuOHhWYiUyRndmMEYxR1ZoNG1kU1czTUQydmJBZkEzQUg5eHlvWW1SWjBvJTJGWTg5NCUyQnp0Qk5HUzdRYlIlMkJhOG42T3olMkZ3SCUyRnR0THlSYnlQVWNYTXF6em5ZMk5maDlUcmJaYmtrVnl4elFCdnptJTJCbTA0dnI3ZjBkJTJGbzJmclglMkJEJTJGVFYycmMlMkJybUgwYnFIVDhmY1clMkZiMk5lZDFGcm1Xc2FYT1pMZlJMSDAxVyUyQnB1OUwlMkJhWFVpQ0pIQldHZWdNNmQxSWRVNld6YkppJTJGRmJBYVd1UHZkViUyRlYlMkZuUFRTdE42VTQlMkZXZnFQazVqaFJqMkJvckRyTVhMT2pxbmdlMm0xck5yblYzZTFsbnBmOGIlMkZPMVVybSUyRnFMbFpIMWElMkJzZVQwM0l3TGE3czk3SzhuRnJZJTJCeDlmcCUyQnA2T2ZqdXBaNlZ2VDMlMkJyWTNJJTJGMFA2T3luOUYlMkJqWHJLU0NGSkpKSktVa2tra3AlMkYlMkY5WDFWSkpKSlNra2trbEtRTTNEcHpjZDJQYnVBZEJhOWhMWHNjTldXVlBiOUN4amtkSkpUeEhWZnE0T2w1YmMlMkJxNTVkbHZMTHEyRGF4MWxwclk3SUZiUDVpNjNiNzdLZjlIJTJCayUyRlFycFBxJTJGY0xNQVZsZ3J1cGNXWE00ZHVCajlJMHk3ZiUyRjFmMDB2ckIwaG5WdW5QbyUyQmprTW16RnRHanE3UUMxdGxiOU5qdmQlMkZxeFM2ZFdNajB1cEg5RmZiWHN5cXdJYWJHd3gzMCUyRmYlMkJpZlc5bjlSSG9wd3ZyQmg0ZUYxViUyQlhrVSUyRnFtWlFRTFNCNmRlWXh3dXg3SEFmcEd2czlMJTJGQiUyRjhKNml2V1ZaMmRqNHZWOEZnZmJrWSUyRm81V084aG9zcmRyMyUyQmk2dDducmVmV3g4YjJoMjBoelpFd1I5RnclMkZsSU9MZzQlMkJJNjUyT0N4dDd2VWZXRDdRNCUyRlNjeHY1bSUyRjg5SzFJdWpZajhQcFdMaldEYSUyQnVzQjdTWkljZmM1dTZYZm5GVzMxc2VJZTBPRXpCRTYlMkZOU1NRVXBKSkpKU2tra2tsS1NTU1NVcEpKSkpUJTJGQVAlMkZXOVZTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJGJTJGWkFEaENTVTBFSVFBQUFBQUFWUUFBQUFFQkFBQUFEd0JCQUdRQWJ3QmlBR1VBSUFCUUFHZ0Fid0IwQUc4QWN3Qm9BRzhBY0FBQUFCTUFRUUJrQUc4QVlnQmxBQ0FBVUFCb0FHOEFkQUJ2QUhNQWFBQnZBSEFBSUFCREFGTUFNZ0FBQUFFQU9FSkpUUVFHQUFBQUFBQUhBQUlBQUFBQkFRRCUyRjRUa2phSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMd0E4UDNod1lXTnJaWFFnWW1WbmFXNDlJdSUyQjd2eUlnYVdROUlsYzFUVEJOY0VObGFHbEllbkpsVTNwT1ZHTjZhMk01WkNJJTJGUGdvOGVEcDRiWEJ0WlhSaElIaHRiRzV6T25nOUltRmtiMkpsT201ek9tMWxkR0V2SWlCNE9uaHRjSFJyUFNJekxqRXVNUzB4TVRJaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwNFlYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SSUyQkNpQWdJQ0FnSUNBZ0lEeDRZWEJOVFRwRWIyTjFiV1Z1ZEVsRVBuVjFhV1E2UlRjeE9UVkZOVFkxTnpNek1URkVSRGxGTnpKR1EwRTJRamt3UVVaQlJqVThMM2hoY0UxTk9rUnZZM1Z0Wlc1MFNVUSUyQkNpQWdJQ0FnSUNBZ0lEeDRZWEJOVFRwSmJuTjBZVzVqWlVsRVBuVjFhV1E2UlRjeE9UVkZOVGMxTnpNek1URkVSRGxGTnpKR1EwRTJRamt3UVVaQlJqVThMM2hoY0UxTk9rbHVjM1JoYm1ObFNVUSUyQkNpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwNFlYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOGVHRndPa055WldGMFpVUmhkR1UlMkJNakF3T0Mwd055MHhPVlF4TkRvMU56bzBNUzB3TlRvd01Ed3ZlR0Z3T2tOeVpXRjBaVVJoZEdVJTJCQ2lBZ0lDQWdJQ0FnSUR4NFlYQTZUVzlrYVdaNVJHRjBaVDR5TURBNExUQTNMVEU1VkRFME9qVTRPakExTFRBMU9qQXdQQzk0WVhBNlRXOWthV1o1UkdGMFpUNEtJQ0FnSUNBZ0lDQWdQSGhoY0RwTlpYUmhaR0YwWVVSaGRHVSUyQk1qQXdPQzB3TnkweE9WUXhORG8xT0Rvd05TMHdOVG93TUR3dmVHRndPazFsZEdGa1lYUmhSR0YwWlQ0S0lDQWdJQ0FnSUNBZ1BIaGhjRHBEY21WaGRHOXlWRzl2YkQ1QlpHOWlaU0JRYUc5MGIzTm9iM0FnUTFNeUlFMWhZMmx1ZEc5emFEd3ZlR0Z3T2tOeVpXRjBiM0pVYjI5c1Bnb2dJQ0FnSUNBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNlpHTTlJbWgwZEhBNkx5OXdkWEpzTG05eVp5OWtZeTlsYkdWdFpXNTBjeTh4TGpFdklqNEtJQ0FnSUNBZ0lDQWdQR1JqT21admNtMWhkRDVwYldGblpTOXFjR1ZuUEM5a1l6cG1iM0p0WVhRJTJCQ2lBZ0lDQWdJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQZ29nSUNBZ0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenB3YUc5MGIzTm9iM0E5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmNHaHZkRzl6YUc5d0x6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOGNHaHZkRzl6YUc5d09rTnZiRzl5VFc5a1pUNHpQQzl3YUc5MGIzTm9iM0E2UTI5c2IzSk5iMlJsUGdvZ0lDQWdJQ0FnSUNBOGNHaHZkRzl6YUc5d09raHBjM1J2Y25rdlBnb2dJQ0FnSUNBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwUGNtbGxiblJoZEdsdmJqNHhQQzkwYVdabU9rOXlhV1Z1ZEdGMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFlVbVZ6YjJ4MWRHbHZiajR4TURBd01EQXdMekV3TURBd1BDOTBhV1ptT2xoU1pYTnZiSFYwYVc5dVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwWlVtVnpiMngxZEdsdmJqNHhNREF3TURBd0x6RXdNREF3UEM5MGFXWm1PbGxTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBTWlhOdmJIVjBhVzl1Vlc1cGRENHlQQzkwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBPWVhScGRtVkVhV2RsYzNRJTJCTWpVMkxESTFOeXd5TlRnc01qVTVMREkyTWl3eU56UXNNamMzTERJNE5DdzFNekFzTlRNeExESTRNaXd5T0RNc01qazJMRE13TVN3ek1UZ3NNekU1TERVeU9TdzFNeklzTXpBMkxESTNNQ3d5TnpFc01qY3lMRE13TlN3ek1UVXNNek0wTXpJN1F6QTFRVEU1TURSR1JqQXdRVUpFUXpBMU1VSkVSa0ZHTURJd05FVkJOVEU4TDNScFptWTZUbUYwYVhabFJHbG5aWE4wUGdvZ0lDQWdJQ0E4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02WlhocFpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzlsZUdsbUx6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCUyQk5EVXdQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQak15TlR3dlpYaHBaanBRYVhobGJGbEVhVzFsYm5OcGIyNCUyQkNpQWdJQ0FnSUNBZ0lEeGxlR2xtT2tOdmJHOXlVM0JoWTJVJTJCTFRFOEwyVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VG1GMGFYWmxSR2xuWlhOMFBqTTJPRFkwTERRd09UWXdMRFF3T1RZeExETTNNVEl4TERNM01USXlMRFF3T1RZeUxEUXdPVFl6TERNM05URXdMRFF3T1RZMExETTJPRFkzTERNMk9EWTRMRE16TkRNMExETXpORE0zTERNME9EVXdMRE0wT0RVeUxETTBPRFUxTERNME9EVTJMRE0zTXpjM0xETTNNemM0TERNM016YzVMRE0zTXpnd0xETTNNemd4TERNM016Z3lMRE0zTXpnekxETTNNemcwTERNM016ZzFMRE0zTXpnMkxETTNNemsyTERReE5EZ3pMRFF4TkRnMExEUXhORGcyTERReE5EZzNMRFF4TkRnNExEUXhORGt5TERReE5Ea3pMRFF4TkRrMUxEUXhOekk0TERReE56STVMRFF4TnpNd0xEUXhPVGcxTERReE9UZzJMRFF4T1RnM0xEUXhPVGc0TERReE9UZzVMRFF4T1Rrd0xEUXhPVGt4TERReE9Ua3lMRFF4T1RrekxEUXhPVGswTERReE9UazFMRFF4T1RrMkxEUXlNREUyTERBc01pdzBMRFVzTml3M0xEZ3NPU3d4TUN3eE1Td3hNaXd4TXl3eE5Dd3hOU3d4Tml3eE55d3hPQ3d5TUN3eU1pd3lNeXd5TkN3eU5Td3lOaXd5Tnl3eU9Dd3pNRHRFTkRZek4wTkNPVVEwTVVFeE1FSkJOMFZHTlVWQ1EwUkNOak14T0RNeU9Ud3ZaWGhwWmpwT1lYUnBkbVZFYVdkbGMzUSUyQkNpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWSUyQkNqd3ZlRHA0YlhCdFpYUmhQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBbzhQM2h3WVdOclpYUWdaVzVrUFNKM0lqOCUyQiUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFDQVlHQmdZR0NBWUdDQXdJQndnTURnb0lDQW9PRUEwTkRnME5FQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVKQ0FnSkNna0xDUWtMRGdzTkN3NFJEZzRPRGhFUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQlJRSENBd0VpQUFJUkFRTVJBZiUyRmRBQVFBSGYlMkZFQWFJQUFBQUhBUUVCQVFFQUFBQUFBQUFBQUFRRkF3SUdBUUFIQ0FrS0N3RUFBZ0lEQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFDQVFNREFnUUNCZ2NEQkFJR0FuTUJBZ01SQkFBRklSSXhRVkVHRTJFaWNZRVVNcEdoQnhXeFFpUEJVdEhoTXhaaThDUnlndkVsUXpSVGtxS3lZM1BDTlVRbms2T3pOaGRVWkhURDB1SUlKb01KQ2hnWmhKUkZScVMwVnROVktCcnk0JTJGUEUxT1QwWlhXRmxhVzF4ZFhsOVdaMmhwYW10c2JXNXZZM1IxZG5kNGVYcDdmSDElMkJmM09FaFlhSGlJbUtpNHlOam8lMkJDazVTVmxwZVltWnFibkoyZW41S2pwS1dtcDZpcHFxdXNyYTZ2b1JBQUlDQVFJREJRVUVCUVlFQ0FNRGJRRUFBaEVEQkNFU01VRUZVUk5oSWdaeGdaRXlvYkh3Rk1IUjRTTkNGVkppY3ZFekpEUkRnaGFTVXlXaVk3TENCM1BTTmVKRWd4ZFVrd2dKQ2hnWkpqWkZHaWRrZEZVMzhxT3p3eWdwMCUyQlB6aEpTa3RNVFU1UFJsZFlXVnBiWEYxZVgxUmxabWRvYVdwcmJHMXViMlIxZG5kNGVYcDdmSDElMkJmM09FaFlhSGlJbUtpNHlOam8lMkJEbEpXV2w1aVptcHVjblo2ZmtxT2twYWFucUttcXE2eXRycSUyQnYlMkZhQUF3REFRQUNFUU1SQUQ4QTclMkZtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtcmxISTJ1dFhuNldsdG5GRVNiMFJGU3A0MVdqRDVxM0xDQmFzbHpaczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlEdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMkUycmowTHV6dkY3UHhmdFVmOEFYUExEbkMzWEkwZXdkcE9rVEs0UDA4VCUyRkFNSzJFYzFUTE5nYXhtRTlwRklEeSUyQkVBbjNHeHdUZ1YyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYlMkYlMkYwZSUyRjVzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFlVZVpwZlIwYTRrcFVBeDE5aDZpNzRiNFg2NUNialI3NkZWNUZvSktLZTVDMUdJVkxkRHVHaHVYczJJS09YNGdmc3ZHZHglMkZza0t0a2l5RDZiY3RISGJYZ1BJbU9DNHFPcFhqNkUxZmY0TW00TmR4a3BjNzcwQnZObXpaRkxzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5THYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14Vm9rS0NUMEclMkYzWmdhaW9OUWVtQU5adWhhV0x5RTBMbFkxJTJCYkduNnNXc3BBOFFBJTJGWiUyRlVjVlJXYk5teFYyYk5teFYyYk5teFYyTlpRd0tub2RqOU9Pellxd0RUNGlpUFpzYSUyRlZMbTVzajdJJTJGNzZMJTJCT1RYVHBqUFpRU3Q5cGtBYjVyOEp5S1hxZlV2TU9wSVFPRnhGRGZvUDhxRnZUbCUyRjRRNUlORGtyRlBBZjhBZFVoSSUyRndCViUyRmlIOGNuTGVBUGN4SE1wcm16WnNneWRtelpzVmRtelpzVmRtelpzVmRtell5V1JJbzJra1lLaWlyTWRnQU1WWDVzalRlYUdsMUN6c2JTQU9MdVgwdzdrMTRLQ3p5QUQlMkJVWkpCaXJlYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYlMkY5UHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14Vm80Q1hVRmE5ZTBDYkpSV2tyJTJCMFJXbE1IWkVKNVd0UE10ekU1JTJCR1lKS255SzAlMkY0a3VFQzFaZU0ySVcwb2tqRlQ4UzdIJTJCdUw0Rll6NTJtTVduMnREVGxjcFg2RmJESFI1ZWNDSCUyQlpldnl3bCUyRk1NOGRKdG43TGRKJTJCS3Zncnk5Y2NyT0o2OUtWdzlFOUdTNXMyYkFoMmJObXhWMmJObXhWMmJObXhWaTNtaUZVMUxTYnh2c1N0Sll6SCUyRkpuU2klMkY4QURZcG9FekxjeHExVDY4RkdyJTJGdnlFOEdyZ2p6ZEMwbWhYRXNZJTJGZTJwUzVpJTJGMW9tRGY4Und0dEpSSGRyY0RhTmJoWlZJNmVuZElHJTJGNG1jbkhlSkNEekRMODJiTmtFdXpaczJLdXpaczJLdXpaczJLdXJrWjg0M1poczRiVlRRenZWcWZ5cnZnM3pITlBiMlVNc0x0R0JQR0pTcElxakVxUlViOWNoJTJCdlNTdnAwSmxjdkpDTHlNdXhKYjRKTnZpJTJGMVN1RUJWdmthWDlMJTJCWmJtOFN2MWZUYmYwWTYlMkY3OGxQeEglMkZnRnpwZVJ2eVBiV2NYbHl5dWJXQklYdW94Sk9VRzd1S2prNSUyRmFPU1NveFBOWFpzMmJBcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRiUyRlU3JTJGbXpac1ZRMm9zeVdNN28zRmxRa01PeEdQdFpoUEJIS0NEeVVFMDhlJTJCTTFCZWRqY3I0eFBUJTJGZ1RoVjVjdkJKYnBHZXJnRWZNRGNZYTJQa3FmWnMyYkFyczJiTmlyczJiTmlyczJiTmlyc2hmblJHdGI3VDlUWDdMY29KRDJxRHpTdjN2azB3bDgxV0Rham9kekRHS3pSajFvUjM1UiUyRkZUNlJ0aEhOWGFWY3JLc1V0ZnREaTMwNGRaejd5cnFQclFDSW5jZE1uc0VucVJLJTJGY2pmNTR5VmpQNWd3dEo1Y2tjRCUyQjVtaWslMkJpdkglMkZBSTN3RDVSbkV0cHdyV2d3OTgzUkdieTFxaXFLbFlHa0ElMkY0eCUyRnZQJTJCTmNobmtlNUJJVUdvUFElMkZQRUpISjZYRzNKRmJ4QU9QeE9BMWlYN3NVd0lkbXpac1ZkbXpac1ZkbXpac1ZVYnFCYnEybXRtJTJCek1qUm41TUtaRExQNHJDMlVWcTlxWWo3U1dzaFduJTJCdHhPVG5JVkc0dHRXdmROYWlpSzdGeEdEdFdHNlRpJTJGd0R3TXVTaHpSTGt5JTJCMWxFOXZGTVA4QWRpSzMzZ1lzY0t0Qm1EV2h0cSUyRkhiT3lNcDY4U2VTSDVVT0dweUo1cFlkZTNtb1dQbVc1S3pIMHBJbzJXTnQwQTNXdjB0czJENzN6SjZGZ3p4cXFYcEtwSEc5ZURNeDdFWVhlZDQ1VmVDNGdQQ2RZeXF1YTBJNXE1VmdPdjJjQVc4c1dvMlFNcWh3d295SGNWeVFGaFZPTHp2ck5yZGY2ZkZITEZYNGtWZUJIJTJCcjElMkY0YkpscCUyQnQyR3FXclhGbklDeUtXZUp0blVnVjNYT1A2N3FGamFGTEhVcnByZWN5JTJCbFphanhQRG1OMWpuOER2OEFhJTJCeSUyQklhWHJjbHJkdFozNE5yZlIxVVNvZmdlbzJLMDZjJTJGOEFnY0JDWHIlMkZsdlhScmRuems0cmNvU0pGWFlmTWJuRHpPViUyQlRyODJlcUFPUUlwYUJxN0FWMnIlMkJPZFRyaVJTRXA4ejhSb045STVBV0pQVjVIWUQweUhyJTJCR1FnM050cTFsY0xhengzQ2ladmlpWU9LelFvOUtqYjdZem9XcVJldnB0NUFPc2tFaWo1bENPbWM2MCUyQldDSzBqOU9OWW81SVlwJTJCRWFoUVdCZU5qUmFmRWNNVlR2VGIlMkI4MGZ5SFozRnVnRTl2U09SSkJVcVBWWlclMkJFSHczeVZhWGVDJTJGc29idWxHa1g0MUhRTU5tSCUyRkJaekMlMkIxaVRUYmFkWlVranRKanprUXFTS3FObTVmc2RNUGZ5cjElMkZSZFQ4dnJhMkU1TjVDOGtsM2JTTVRLcGtjdHolMkJMN1NQOXBlT0E3ZkZrSWtna0N3T2ZrejdObEExeThERjJiTm14VjJiRUpMeTFpbmp0cEpWV2VhdnBSRWprM0hjOFY2NHZpcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlYdiUyQmJObXhWcGxEcVViY01LSDVISVBva2pXc3N0cXglMkJLMmxaUGY0V3BrNXlGNm5GOVI4eHN3SEdPOFFTaiUyRkFGaDhEJTJGcXJrb2M2Vm1TTUhVT09qQUVmVGpzQWFaTVhoTVJQeFJuWWY1SjZZUHlKVjJiTm14VjJiTm14VlF1ek90dTcyOVBWVWNsQkZhMDdVOThEYWZxc0Y2aTlFa0k2ZVB5d3d5RjZ2RzJpNm9KUlVXbDZ4WkNQMkpPcnIlMkZzdnRMaEc2czB5aUs0WDZaZmk0UUk3VmI5bHY1aCUyRlhESHJnVjVjOEIwTHpMYzJRJTJCR0YyOVdEdzRTZkYlMkZ3cCUyQkhPZzZaTUhpNGoyWWZUa1olMkZNR3dwRmFhekdEeXRtOUdZaiUyRkFIMjUlMkJFbiUyRkFGWCUyRkFPSjROOHVYd2xpaWNucHMzMDVMbUZaRGV3cmMyZHhidDBsaWVOdmt5bGM0NSUyQlgxMFVDUXpIakxBVEU0UCUyQlFlTmM2TDU1ZTVpMEo1N1dWb25pa1JtWkRTcTdqZjJ5QjJPcCUyRlZZb3IyJTJGd0JOamt0cEFHanY3WnZVJTJCSW5veThWYW8lMkZhNDR4Q1E5YXMyNVJWQnFLbmZCR1JieTlyQkVzbGpjSVkwYVElMkJnNUZDQ1FENmJqOWxzbEdBaWtONXMyYkFyczJiR3lPSTBhUnVpQXNmb0ZjVlMlMkIlMkYxcTJzSmx0eXJTeXR1eXAlMkJ5RHNDM3p3eEJxQWZIZkklMkZvZG10Mno2cGNqbkpLNWRBZXhQVCUyRmdSa2h4VjJjNzgybVN5ODJXVWdOSWRVaE5zNFBUbWxYUSUyRndEQkRPaVpBdnpMYjZuSHBPcmxGa2pzN2xXZEc5eXZ4VkclMkZ3aXVHSjNVcDNZVEpGcjdvcCUyQkM4dDFsakhqeG9kdjhBWXRraXlIYnh4NlhmS3glMkZjWEJpbEozJTJCQXNWVVY4RlJseVlBNFo4MERra1BtcTNFdGxISlNwUiUyQkpQZ0hCSDY2WkJ0SXVmcXQ5TnA4cEFMSG5FcE81cDFvTTZYcTBQMWpUcmlQb2VQSWZOZHhuTHRadHJHWmx1QmNHM3ZGJTJCRkpZdUpmeDQwSUl4SEpLenpiNWV0OVp0WllwMUx3eWdjZ1B0S3klMkZaa1QlMkZLV3VSS0tDT0M2dE5IMUNibGNXaUlMRFVXSEg2d2c2d3lEZWp4OUZ3NHNmT01qRUJZNWJpSDFIZ0x5OFZZdWxPZkpWJTJCeTM4cTRuZEg5TGxMMjE5SzRpaWxIcld6THhsaEk2U2dFMSUyRjJTbkZLbzBDenh5Mjh6TXFjU3pzcElZQlBqMkklMkYxY2QlMkZ5dG5WWmROUTJEMUklMkJFU01vUHclMkZ6TWZ0ZE1HMjBUU1F5eWJsbWplbnpvYzRUWTZsZDZkZHlLd01Vc2JGWm9IcU53ZDFLbkdYUlhzOW41JTJGdjdsZzk4R2xXaE1qd2sxQSUyRm00ayUyRkY3akRTd1NQVUxUVEpJM1BHQnBoR053RzRPSFZXJTJCZ25PTlglMkJzV0ZwREZQYVNTSmNURVNHM1RjUmxmMnVSSyUyRmF6cSUyQmtSM2FlVDdlJTJCam5YNnlvVzhpYmh0JTJCOWk5VGclMkIlMkZROThRVlpIcXN0dXRvd3VTUFNkU3BWOTFJUFZXemlmMWk5OHQlMkJaN200MEZqYlNXVXJOQ3FFbWtleDRFSDdhY1Q5bHYyYzZsb25tYlR2TVVUV2R3Z2l1bVdrdHJMUWhnZTZIOW9mNnVSTHpkNVp1ckRWUDhRMktldFlGVVc3alhlU0tpJTJCbTBoSDdVWkg3WDdPQ1k0ZzJZTTBzTXJqdmV4QjVTSGNYc25rUHozWSUyQmNkUHFLUTZsQUI5YnRhJTJGOGxJNjlZMiUyRjRYSmVEWFBKbHZQZTZKcU1lcTZOTVlMdUU4NDJUbzZudFRveXV2MmslMkZhejBKNUU4JTJCMkhuR3lJMnQ5VmdBJTJCdDJaUDBlcEglMkZORWYlMkJFeUVTZVV1ZmYzdG1iRkF4OGJCOUg4VWY0c1o4JTJGNlA4MlRNTUxOYjFpRFJyUTNFcEJra1BDM2o3czUlMkZ3Q05WJTJCMCUyQkdWYzRuNW04eWZwbnpKY3NyJTJGNkhZc0xlMjMyUEJ2M2owJTJGeTMlMkJIJTJGWTVKeGtMb3VyWDE3NSUyRnRiMjhtYVNacmxvcXNkbFExVGdvJTJGWlVETzc1NSUyQjh1eGx2UGNNSTZpNkxBZTJ6WjZCd2xTN05tellGZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZiUyRlc3JTJGbXpac1Zka2I4M1c1JTJCclcxJTJCZyUyQksxa0FjJTJGNUQlMkZDZiUyQkc0NUpNQzZqYXJlMkZ4YUVmM3FNbyUyQmRQaCUyRjRiQ05pcVY2Vk9PY1RWJTJCR1JlQjM3JTJGYVg5V0hveUZhSk16MjNCcWlXRTdqdUNoJTJGc3lhUnNIUlhIUmdDUHB3eTUyZ0xzMmJOa1V1elpzMkt1d3UxclM0OVcwNld6YjRYSTVRdjhBeXV1Nm5ESE1lbUt2T05FMUtXR1ZyRzdySFBDeFJnZXFzcHBrN3NiMFhDOFcybFVianhIaU1obm5uVEh0TG1QWHJaZmdha2QxVHNSOWlRJTJGUDdMWXRvbXElMkZXSTBJYWt5Ym9mNEg1NUxtRlpkcU5sRnFOamNXTXdxazZGRDh6OWslMkZRYzUxNVh1WmJXNGwwJTJCNSUyQkdXRnpFNm4lMkJaVFRPbFcwNjNFUWtYWTlHWHdQaG5PJTJGTnNTNlQ1cXRib2ZCSHFhbmlleG1pJTJCMnYlMkJzVTR2JTJGbGZGZ0hjclBURmJhblpOYjNjYXl3eUFwTEUzUWozemp1dHdXJTJGbGp6QmM2UHA2ZlY5Skhwc0xOU1NnUjFISW9yVjNWdml6cTJqWFFrJTJCQW5kbEJBOXhuTnZ6UmlXUHpKQkpXbnIyZ0pQJTJGR055djhBSEFkaWtKM1lHZjBvNXBaRElib1NEMUdKSjlhQWdoNiUyRjVhVXpvRm5OOVl0WVo2Z21SRlkwNlZJM3psWGslMkZWSTViaTJobmxCZ2RCdXhGRmFoaGZyMHJTTnNuSGxYVTRKSTVOSmFTdDFhdklRbSUyQjhSYXF1RDBJJTJCTGprcGJnSVpKbXpac2lyc0RhZ0MxamNxdlV4T0IlMkZ3SndUalhVTXJLMzJXQkIlMkJXS3Bmb2ZFNlhiOGY1ZCUyRm5oamtNUG12UiUyRktsckpCcWt4QlNWa2pDMFBJRHBUZkkxNXMlMkZNTmJ1M2piUjVwbHNaVnA2OXN3Umk5TjBlU2pNbkglMkJSY1ZwbTY2OWNXV3RYR25hdHdqZ0ttYTJ1UHNqMHglMkZOWHclMkZheU9mbUxyJTJCaFgzbCUyQlBUWXJrWE0lMkJwR3RtMXVQVVVjZVg3eVJ4OEtMdHglMkYxczV4b04lMkZlZnBWcjZDOG11VlZmVXVMTzhrTXJFSWVUZW03ZmFSazVJeTVGZFR1WjlCMTY5dHJHWnZxa2M1ZUZEOFNtSnp6VWNUdHNyY2VXSHpUVDNmUkp2MHA1VVp2dE9ZWXJnQ3UlMkZKVjRQJTJGd0FOSG5Qcmo4M3ZNMmxYOXpwV29CSllJbmFKNTQwcE9pMSUyQkdSUUR4ZjRjbG41WjNxVDJzdGpXckswaWV4RWdFNjAlMkYyWExPVWZtSFlOWmVaYmhXUDk0QXluJTJGViUyQkQlMkZqVmNsTGxiRWRRbjk1NXExd1RpVTNodUxhZGVRQ3NmU2xqTzlWTmV2JTJGQUEwYllIdWIxWjdWNXlXa2hIeHBjVkhKTndHaXVQOEFLU3RWayUyRmJ5R2FmcUxReHlhZk81UzJsUEpXVUFtR1ElMkY3dWlCOGY4QWQwWCUyQjdGJTJGeThDdGQ2anBsM0xiM3YlMkJrUVRweG5pcVREY1FuN0xvUiUyRndVYiUyRkFMRFpDeXlla1dsOVp5YUZMUGVsWkdOMnRxREV0WkpIZW5FczY3Y2twVlh3cTFiVTdHMWlLV3ZxdGNDUjRia2toRll4JTJGQ0hYaHZ2WDQ4QyUyQlU3SDFTYkszazlXeWE1aHY0SGNoU0JGOEZ4QkwyV2VPSjFrJTJGNHM5UDRjdSUyRjBqJTJGYzFGcGhtRnhQTGVPaFpCeEFpTDhqdDQwJTJGYTVZZWdWNlBwcnZMcGNFOHNmcFROYmgzUVZvR0sxMnpsdW9RMlBuWmloNDJmbVdJVnQ1ejhNZDRxOUk1UDVKMTdaMkE4WXJXVmwlMkJFUm9hRHdvTnZ1cG5MdGIwMkx6UkVkUjBoQmJhN2JWZTR0RVBGWndwcjZzSCUyRkFCYiUyRkFKT1NrZ1BOTHFHYUc3ZTN2NDJpdW9Ud2xpY1VJSzlpTTc1NUtuR29lVDdaWDZtMUNIJTJGWVNOQ2YlMkJGT2N0bnVJZk5rU1dlcUVXdXUyNDlPQzhjY2ZXNDdlbGNkJTJCZiUyQlZuUSUyRnl5UzV0OURrMDY3ak1WemFTWE1MSzNoUkpscDRyOXJqa1FsNVBiYWxjYVJkJTJCbEk3UGJ3eXNJNWxOSklpclUlMkJIJTJGbW5PdWVWJTJGT1VlbyUyQm5ZNmhJcHVXWDl4UHR3blUlMkZoeiUyRm5UT1BlWTR6WSUyQllOVGdwVkJjU1ZROUNySGtQMTRHc2I5ckZnUldTelkxSzElMkJLTmglMkIwcCUyRlpjWTJRZGxldiUyQlolMkZMS3hLMTlwY2RZQlV6V3FkWXgxTHdqJTJCVCUyQmFQOEFaJTJGWnlIVzl4ZTZaZlE2cHBrN1FYc0JEUlRJZXZzUiUyQjBwJTJGbHlZJTJCVVBOUjFLSkxLNWxEM0tyVzNtNmVzZzY3Zjc5VDlwTUQlMkJadENqVG5xVmlsSVclMkJLZUZSc2hQV1ZBUDJQOSUyQkolMkJ6a1pSQjNEUEZsbGpseFJQejVFZHg4bWN3JTJGbTNhWHZrelVMeVVDMzEyMmpFVDJvTkE4a2g5TlpZVCUyRkp2emIlMkJUT1phYklobldrZ2FPUWN3eE81NzclMkY1ZmpoS0lZbmRvWnZnYVVEMDV2NVNOMUolMkZ5RzZZSTBSWjR0UyUyQm95S1FTMUhUd1lIc2ZmQUxyZE9Rd00lMkJMR09FSGZodTZQV3ZKNmY1RnNmclhucVc4SyUyRkRCRVpENGNtQVZmMVoyZk9TZVNMbWZUOVJySEVXbHZEU1phVmFnTlIwJTJCenRuVzhtV3N1elpzMkJEczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOWZ2JTJCYk5teFYyWTVzbzRxdzZXTDlIZVlMaUxwRmNVbmpIUWZIOXIlMkZodVdTYlRuQmdNWGVKaXYwSDRsJTJGQTRUJTJCYTRmVFcwMUZSdkRKNmNoQSUyRllmcFg1TU1HYVhjQm1IeGJTcnNDZGk2JTJGMmY4UnlaM2o3a2RVNHpaenJUZk8ycVFhM2VhSHJrYXg2aGF1eCUyQnI5RmtnSiUyRmRUMjc5MFpQJTJCR3lkV1dvV3QlMkJuSzNlckFmSEdkbVg1cmtTRW92Tm0yeWlRQVNUUURxY0N0NXNMNWRaMDZLbzlZU01OcVJBdjhBaXUySXY1aTBxSmVjc3JLbyUyRndBa2slMkZjdFRobzl5bzY5aHRiaTJlMnZBcGdtSEIxY2dBMSUyQmZmT1lYJTJCblhmbFhVZ2hKZXprTmJhYnhIOGpIJTJCZGNQUE44Mmw2NWIyajIxM0ROOVdkbW10ZWZDUmtkZUphTlNWYjFJJTJGdFlYV004Y1ZrMmphdk05NXBVdjl6Y1B2TEIlMkZJM0x2d3doSVQyeDEyS0NCcnhqeWpSUzA2anJ4RzVZRCUyQlpjcnp6cGtYbWp5aExQcHpDU2FGVnY4QVRab3p1WGpIUDRHSCUyQiUyRkU1SmtVbWp1OUJ1amFUc0pZSEhLQzRHNlN4bjlyJTJGQUpxd0pINWcxZnlqRGF3MktyY2FFMHpTTkUyN1JpUW10dVhQU0o2JTJGdVclMkZZa3hJNmhVZzhpYTlxdWxhdEhlM3MwazhEZ3hHS1p5d0JrJTJCeTMlMkJUa24lMkZONjNhOHR0RzFhM3JITCUyQjloSUIlMkJJZEdLJTJGOEFCQTVETmJTMHRMJTJCNGtzSk9lbnpFVFdyallpT1Q0Z2pEOWw0V3FqTCUyRkFKT1RUVTlYdE5jOHI2ZERQOEU4cmM0aVNQNzFSd2tUZmNQJTJGQUxzWCUyQmZsZ3EwOXpGdktlb1RNd1YyTmVDc0IwQmFOcWY4YTVOOVp1NTlLODNXMnBXYiUyQm45Y2pCbzI0WlhVTnhJJTJGMWx5Q1dzTDZmTmIzTEx4aWQyNHRTZ0lOQTlQdXliNjdwZCUyRnIya2FQYzZieE41Yjhvd1dZS0FZVyUyQkdwUDhBazRSeVFVOHVmT0Y3SkxEOVhSTGFBajk2WlBpWXY0QTlBbiUyRkRZT2Z6OW9FYnRBMGtqWFNxRyUyQnJxaDVOdFUlMkJrVzRpUUwlMkZrNXlLJTJGaXVOYWdqRWNwVFU3Umo2WXFhU0FidEczJTJGRmluNG9tJTJGYSUyQnhoWGNHZVd4bERncFBiZnZVRmFQREtwRlhpSSUyRllrJTJGayUyRm13RlhyMG41aGZYQkpGcFZ0eG1DODRqT2E4MSUyRmFLcXY3U2Z5NUdMN3pKcTJyd1hGaHFGNDBBbFdpU1FmQUVQVlclMkJIN1NmeiUyRndDUmtUbDFkTFczdDd4aTgxMDhDM2c5RUJBckNuSThqdFZ2dE5SY1IxenpUZEpjUXZZd1JXN3kyOGR3ekZmVWJsSXZJMDVmQW8lMkYyT0d4U3QzelNXOUxQWElUTWxDaml1em9mc3lSdDJZZnNQa2QwaWFiVHRRa3NwMVpyYTRVODRYNlNKJTJCdzQlMkZ3QW9EN0VpNWR6cVY3TEZDdDdLWm5WQVklMkJScXlnOWFqJTJCWCUyQlRKZG91dWFIcmx0YjJQbUNOZnJrS21PMnZLY1QlMkZrZ3NQMnY1Y2p0YXBmbzBKdCUyRk1sbEZHSGx0WnZWZUs0cHR3V05pNnlVJTJCekl2Umx3bTFtVWFycE50SkhFV3V0T2t1SWJoMEZTYmZrR2laMiUyRmI0TXhIJTJCcGs2dVpOTThzYWRkeXdTdE5LNjA1dHNLblljRiUyRm1iT1p5M3MybldhTEUlMkZHNGU0JTJCc0s0M0hFTHhvd096SyUyRkw0bHg1ZkZXYiUyRmxwclAxVFdMUU1hTE1GUmglMkZsUnR4ciUyRndMWW4lMkJmTmpMcCUyQnAyV3B3Z2hXTHh1ZjJTR29SWCUyRkFJREk5cGVvMmtNdGpmV1FNVWkzSk05dTI0ajVyVDREJTJCMUc1cXlmeWZZenAlMkZ3Q2NkaW1yJTJCVXJhJTJGRyUyRndwSVNPb0lwWEpEY0lQTjRIRGNSM1NjbDJJNnFlb09HTnZjUXl3JTJGbyUyQiUyRkpXR3BOdlAxYUJ6JTJCMFBHRnY4QWRrZiUyQnpYSXhTYXltMk5DT2g3TU1OWUxoTGxPUzdIOXBmQTVGVTMwdlVOUTh1YXFqSXFzYXFIaU84VXNaNkVlS3NyZkElMkJTM3lVcjZwNWl1ZFRsMlMxUnZSVGNoVEtlQ2dWJTJGbFRsa09zdlV2ZU9uOFZrZGF0YXV4b3lOJTJGSUQlMkIwciUyRndBbVRmeVlIc3JuVGRQYXNjMSUyRk5jelhNWkFyd2hUMDRnMyUyRkFEMDVZam1sNkZkaXRsY211JTJGcHZYJTJGZ1RuSzViUzRzcDFtRHRGSUQ2a0xpb1BYWmdjNjFOR1RCTkg0bzFQcFVqSXBOYnlYMFVsdmN3JTJGVjlUc3Q3aTJJcUhXbjk5RVAya1pmN3hGJTJGMThuTVgxcEFOTVIxVFRZZk1rUnVZWWx0JTJGTUVZNUVmWVc3VWZ0TCUyRndBWGpEZjh1JTJGTUZ6TThtblg2TUpMV1JGa01oNHlpcXRHVVlVJTJGWlA4Mkl6VyUyRkg0RFZRRyUyRmR1UHRSUDFGRyUyRmxiOWxzRzZaSkRKZlBjdkdJOVdDb0pad1BobVJHSEYyWCUyRmZpNEFQMnBlYWZtQkU4SG1xOExnQVRDT1ZhZUJVTCUyQnRjamF1VVBpcDZxZSUyQmRKODJ4MjkzUGIyR3R5TDlabVdSb0w1UUFVWlpHUUs0N3A5bk9kMzloZGFaY3RhWFNjWFhkU04xWUhveW51cHdGQ0wwelVYMHk0U1ZHZjZ1V0RxeWJQRzQ2T24lMkJXdiUyRkFBNjUyblJ0WSUyRlRkcUpiZmpMZHFuSzRnanBTVmVuMWlCZjVHJTJGd0IzUmY3cWZPQ3h5Y2Fxd3FqZmFIOGNrJTJGayUyQjYxSzExQUMxa1pZSVQ2Z21CJTJCeHkyb1AlMkJNaSUyRkM2ZjdMRUdsWkNiQnIlMkIlMkJ1JTJGcXFwQkNqUDZjYnR4SHduNGxqclglMkZnY2tPajJFTWNDNmxLNnlUUktZbWtJb1lsNmdFOXhUN0w1SGhjVEpxTTFqSkNFampRU1FzSzdxVDNyZ2klMkZ1SjdQVERLUTMxUzVmMDNaUGkzU3JmR1A1UmlLRzZiZWolMkJRUHpCMENHJTJCdU5IdkI5VmVaeDlXdlpLQlg3Y0NmMlA4ak92Z2hnR1UxQjNCSGZQSGFRcmZ1RXQzREhrQUpha0toUDhBTzM3QSUyQmVkWDhpJTJCWVBPZW42ZE5wMnFLNXQ0SkZqczVIQ2x5b05KZlRkaWVVYUw4UyUyRndEQ1pFY1JORWMlMkJyZk9PS1dNVGdlR1VhRW9IZmklMkZwUlA4QXVudDJBYjNVb3JXcUFjNVFLOGVnSHpPUGh1b1RZcmRlc0pZZ25KcHRnRFRxZHUlMkZ0a1QxQzlYbkxQSXdvZmpMZHVKNmZoa2dMY1lzaTB2VlJmU1NSU1VXUmQxVWVHR2d5TiUyQlZyQ1NrbXJYS2xYbkhDM1J0dU1YWGxUJTJCYVRKS01UVjdKZG16WnNDdXpaczJLdXpaczJLdXpaczJLdiUyRjlEdiUyQmJObXhWMmJObXhWQjZyYWZYdE91TFh2SWg0SHdZYnIlMkJPUmJSTCUyQnNNVE1hU1FzT1NucnNlTFpORG5JZGZYWHRQOHpYdG5aR0MydEpXRXNVejhwSDR5QUU4WTE0cnMzSmZpYkpSUE1LeWY4QU1YeWUzbUt5aDFMVEglMkJyYTFweDlTMHVsRlNWNm1Od1B0Um5JYjVlOHdYbHclMkZ3Q2o5VlI5TjF1MTJQR29EOXZVZ2ZwSkclMkY3VWVkTjh1YXBjWHNIMWU3QyUyQnJBaSUyRnZWNk9QczFLJTJGc3R0Z0x6UDVZc3IlMkIzTnpIRnhtalBNbE5qJTJGckxUZFdIdGlOdGxVOUk4MnN4YTExbEFzc2YyYm1NZkE5UEZmMkclMkY0WEl0NTAxeTgxU3lrRUVqUlFSTUdFYU1WNUwwJTJCS24yc3E0a2UzajlPNGFzdXlMTlNuTWR1WCUyQlYlMkZ4TENmVlolMkZTMHU4Y0RrVmhZaGZHZ3hvZEdRRERaUE1jdWx1c1R6cHdyeU1UN21uZWglMkIwdVRWTkwxZSUyQnNvYjF0TG1tdEpsRWtiRlc1RkdGUjhOZlV6aTJpUSUyRlhOWHRMalVBWFdlNmhFM0wlMkJReUtIRyUyRmJqbnF6elA1b2swSDBiYXhnV1Z5b2RpNUlSVTZLQng3NEFTcnpPenNmTDF0Y0g2OXBwTXRkeE0waDQlMkY4ODNPUzJHTFM3MjM5SzFwR3BHd2olMkJFciUyRkFMSHBoVmNlY0JjeXJjNnZCRmRhYkwlMkI3bFYwVVBidDEyS0RueCUyRmxZWUd2cldLd1AxblRwM2tpcnNUMEJwV2djZGY4QVpESmclMkZGalNhblNiOHhDMnVyc1h0cEc1a3Q3ZGtWUkdhVTRnJTJGRVR5JTJGd0JiSXpjNjB4U2V5bHNncGhESmVhZk50SVklMkJucVJFZkN5Z1ljV1BtVjE0eDNxa3FRRHpBbzRYJTJCWXIlMkIwTUU2aCUyQmlkWlpJbWpNOTBGTFF6UWo0MEJGTm4yJTJCMVg3RFlrZDJ5aSUyQnJITkloOHVYYkxwN3lMSmRUb1piWkpEWDFFVTBOT1h4Q2VMOXRmJTJCSjRQaGJUTHlhNThzWHFxdDNFb0tsVjlNU29SVU1uOHNzZjdYSCUyRlh5RCUyQmNmS0Z6b1duUmF0RnFVVVUlMkJuU0dTR0FzQmNGWFphRmVISlZaRHUySE9uM1NlZTlLdDElMkJzQ3g4eDJ5JTJCcGFYYWJCMlR4SDhwUDIxJTJGWndBbnUzVlF1VjFDQzJpVzljeCUyRndDa1MyOGtNdEE1ZEtMSEwxJTJCMDBUSnlaUGhrJTJCMW5TJTJGS041OVowR1NObm82eUk2ZTFWNHYlMkZ3eTV6OXB2OFlXajZIcmNmNlA4MzZFV21paUhTZml2Mm94JTJCMmt3SDdQMmZ0TGsyOHV4cmJlWFlMaFlYVjdnTXp4a0UwSXFQaXFOcSUyRnk0Z2IlMkJTazdQTmRYMW0lMkJIbXFheXRKJTJGVHRUZHglMkZCR29TdTZzd1pxY2o4WWJDblJtTTk3ZHJLeEtYY3NsdTd0WGIxJTJCU0JxJTJGd0NTelpLOWMwNnh1TlV1dFN0a0JsczVJRmtBSUFNb0hxVVVmek5Sa2JDUFc1WHM3MHJaY1Z0TDAlMkJ0Q29BRlZjMW9LJTJGd0FybmkyUklTaGREMHJVOVowZzJVTlcxRFI1SkxHJTJCaXJSbFF1WGhtcDFaUDcyTSUyRndDcGg3NWcwSzJzcmEyMUc4Y2g1YmFHSlVwdDZ5QVJ1dkw2T1dFUWsxZUpycTlzNTVZTHhCenVHaEpFanIzTEt2eFNxdjdXSVNhbnEyb1FSWEdyeXZkMk10Vmh1U1E4YU5RY2g4T3lOanNxRWxoSzFoYmNyJTJGY3YzSyUyRnlWJTJGeWNSU1FCbVVpaWZzZlFNNkZwZmxqU2JyUjBtQ3kzRWpEbERJek45c0ducGhVJTJGWiUyRmxiSXJxbmwlMkY2ak0zQ2IxVlJxT29VODA3OFhvT0hQSVNJaVFDZDVja2dFM3R5UzRTdEs2eFN5JTJGREolMkI3SHFzZU8lMkZZVncwVzJ0aGF0cDEwaGUyYjdZSDIxY2ZabGpQODZmOEFEJTJGWXhPNHRiTzRzbzRJN1pVdkc1THBsM1Bzc3ByVXdzMzkySkQlMkZ1dCUyRndDYkFPaDZzTHVVNlZxWU1GNGhLUnUyeDVEckZJRDBZWTdyc2g0dE1uMDYlMkZrc3BqempuaWFTMW5RZkRJRSUyQkpXWHdkYWZFdjdPZDB1Z25tTDh0bVlpcFdFT0Ixb0dXcCUyRndDSDVaeTRob1Q5V3VVNUJUemo3RkhwJTJGZUllMyUyQlglMkZBRHJuUiUyRnlzdlJmYUhlYUpJd1o0UkpHbzhRRHpRJTJGOEFBeTVPUFZCZlBOeGJwTXBpZllxYUJ1NEl3RllXbHg5ZkVJSlU3bG1IN1MlMkY4M1pKOWUweDdLOXVuUmc4YXpNa29IV0p5U1ZSJTJGOVlINFclMkJ6aiUyRkt0dkZkYXhCRExRS3pBVk8yNDNHJTJGOEFyWVBKVVhiMk52RFp0ZHlXeGUzQjRtZUNRJTJCdEczN0pramI5bGFmYVhIUlhsOXEycjZldG5XSjdZeHgyOGglMkIxVU55TWp0JTJGbEg0bXlYNmxwMXBvUG01N0NJRkxHOGppa0NzS2lzcXFYV25jYzIlMkJ6aExaVzBPbTM1aEN1TGlDZVNnSUhGWTY3S1Q5cmw0WWFWNjNJd01WU2FrZzFwdDI3ZUdSdXp2clRXSUxkWWJubGNJV1hTZFFjOFc1cFhscDkxJTJGTElQOTFNJTJGOTRtRzl0Y2ZXM0FRMTR4Z3NQSDRjNFpwJTJCdHo2SHFOMnJKNjFuTkl5M2xvVFRrQTU0eUlmOTF6UiUyRmFpbHlSTlVpbnBWMGlYcXl5eHclMkJqZFc1TWQlMkZhTjFpUGRxZjc0ZjhBNUp0a2ExWlo0TFdZeHN5U0twYUNSVDhRSSUyQkl4a2oySHc1S0xlNiUyRlRzVUYlMkZwMXdzbXJSUmsybDBRQUw2RmZ0MjkwZyUyRnU3dVA3TG8zOTVoRnF1cWFMOVhabW1XQ1J3eVNXVGdzOE1nRzZPbyUyRlk1ZlpiQVVoQyUyQlo5SnNmTWwxU0tZVyUyQnF5UVJUMkRNZjNVdkplVHd0NE01JTJCSmNoS3lyT3I2RDVnUXdUUUVwRkslMkZ3RGVRdjhBeW4lMkJaRGslMkIxR3lqMWV3MFNhQzRnUzVudG1DdFgwRUxRdFFBTSUyRkVjdjVGd3YxYlF4ciUyQm5ocjRvbXMyeW1QNnh1Q1N0U0lib2Y2djhBZHpZT2FHQVElMkJYZFRtMU5kTGpqNVNOOFFrRzZGT3ZxQnUlMkJUalRyUzJzYlpMQ01jVlVta3BGR0xuN1JmJTJGQUZ2JTJCRnhUVG1lMTAyRFR1SUxJd1pwS2tzVyUyQnp4V3RXNDElMkZaeVUyWGxXNDFIaGNhaHl0T1FKWlZIS2FYdyUyRmQlMkY3clklMkZ6dmlBcVEyMWxkWHR5dHJERzBrNTI0cUttbmo4c083MzZyb05tTklsdGZWdjdoRmVhTW5rVXFUd3B4TkEyUzJNYVQ1ZXRTOXc2V2R0RXZ4MWI0MkE3U3ltaCUyRjJDNXpUemIlMkJadW4zc3dPamFjR1ZLd3JxTWdvYWplaUpTciUyRk9URFZkVlpQWWEzcE9qJTJCVzd1MzF1S0t6dVpHUDFkZVBQMUl6MVVvdnh0SiUyRmxZVSUyRmwlMkY1aE90eVMlMkJXcmxpczFHbTBweWZpUjQlMkZpOUt2N1N1bWNydk5ZbnU1RGNYSDd5VG9hbXJmU2Y2WUw4cmF0TFolMkJadEp2b1Q2YndYTWJFanVDd1ZoOHVKYXVQRnVGZSUyQnglMkJZSjROTWF3UWlPRnp5Wk9sRFg0aCUyRndReVFlVnRBbjFCWTlSMVFOOVdVMXRvRyUyRmEzcUdZZUdFM2xuUkxQVmZNMTlMZEF5V2tUdGNXOGE3eE9HYXExa0d6N2slMkZBTTZtb0FBQ2lnQTJBeEo3bG9qbjcyd0FOZ0tBYkRMelpzaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5SHYlMkJiTm14VjJiTm14VjJRenozcDNQNnJxS2JGS3d5dCUyRmtuNGxKUHNlV1RQT1Zmblg1Z21zdE50ZEJ0bk1iYWp5a3VYSFgwWXlQaCUyRjJiJTJGd0RFY2JyZm0yNE1SelpJNDQ3R1I1OXc2cE1mTnlXbDdFZEQxS00zQ3A2ZHdvS2xkaiUyQjF6SEUlMkZSa28wcnoxclV0ejlTdkxlMmxtMkhwOGpDN0JoV3FWNXh2VWIlMkZEbm4wMWpQRWluOHBIZ2NrZW1YbXNUYUhjeEFOdzA1bzU3TzdJSUt4bGlKWWxsJTJGYVJUJTJCODQlMkZzTmtJWmhJa1NqUkRsNnpzJTJGd0lqSkNYRkhrYjVncDMlMkJhMnIlMkJiZFB1RXZZTFZiTFJwaUZMMjdjMkV2V2tqMCUyRmQ4djJWcGtHc2ZOMnAzS3JhM1YyWGljZ0VzUWVRSjNxU05zN2QlMkJrZE8xclNiS3cxTGhOJTJCbGJSWFZKS0ZaeXE4WlYzJTJGM1lHSExPRWVjdktGeDVUdlRMRHltMGlkdjNFdmRHJTJGd0I5eWY1YSUyRnN0JTJCM2xwSFVPdnN1YTRpTndiV0NydUhLJTJGQjBxTjlqMHpveSUyQmFyVzQ4cjJPcTNsMUxlMnNTaXp1R2txazZ6Z1VWWE1kYThGJTJGd0NEVE9PMk0wMXJJczBYQ1JRNGtIcUNxR25abDc0TmdrVGxNcVNPSVpwUFZOclhqR0c4UXZmajJ3WHpTeXF6MWVPJTJGdE5TalFNOHNWdWJoRmJia0lwUGlJJTJCVVI1WWNhM3ExN0lkUG10WjJqczd5enRyaU9OTmh5QUtTY2lQdE1KVWZJWmFYRFdMJTJCcmEwamNxMFpZQVY0eUFxNm12OHluSmY1WWV4MVBSanBVc2ZPJTJGMHBudUxKV05QVWdrTlo0bCUyRm05Tmg2dkglMkJWcE1SYTJ1dkJjWGVqMkdwMnJTQzV0SkpiT1prcVc0diUyQiUyRmdZJTJCeCUyRmVKaHRCQjVzT2kzMTNib0xhOWloTWxvM0VCNUNsR2tVTHklMkIxNlhKazRyaGxaYXJCRkFiWmxqdHJTNVRnJTJGb0lGNGZ5T1QxSmpiQzFMJTJCYlNib3d5TXd1NFdyekpyeVg5aDFQUXB4dyUyRkZXRlhOdXQ5UEI2c3JTNmZybHFJNEpaSEolMkJyMzBiQ3NiT2Y1cGh4MyUyRkFOMVQlMkZ3Q1JnUFFidHJlVnJFRnJXOGdmbkRVMGRKVVBGMDl1bkhEJTJGQUZleWdqanZiaTJoYVRRYnB4Y1hscEh2THA5eDluNnhDbGZqdGpYaTFQMlAzYiUyRkdzZUU5OW9sOXF0eWpJS2FtWWxrdGI2TW4wTDVRS0o4WnA2ZDN4JTJCSDR2dDhPRCUyRnZjaVRYUFphWiUyQmtkcDUlMkJndDE5WWFkNXAwJTJGZTB2VTJZOFQwTlBpYU0lMkZ0SiUyRnV2T2o2bGNHeXNGYVJsWXhKV1VqZmtVWGszejVNTTVwJTJCVjJsM1UycFBkYWxGSEsxc09MeXFReFNaYUZPZERXT1Q3VyUyRjdlVFR6SzhVZGxjeFJFaFhCVGYlMkJkeldnJTJCN0p4TmppNzBIblR6JTJCNTFHWHlyckZ4YWFwRDY5bmZjUnFTZnRxeEhMMW9qJTJGT2pQanRRMEdOWUNmckNYV2kzUU10bGVsaHlqa1liRmZkdnN5eDRNODdXeTZ6cWVtVHE0WDlLd1FubWVna0slMkJtZiUyQlNpNUc5TTFQVmZMVXQzb2QzQ0pJR0RFUVM3aUtVRDRab3Y4JTJGanlFcnFycnVQTmtLNTglMkZKTjdTeDAlMkIwc0RlM2swazl4QTZKQkpBQ0dxd1BIaUtwOFM4ZnRzMkYwbXJEUzNudWJQVGhINlpMYTVZY1FzbkJ2czNrU3NDbkplWEp1SyUyRkIlMkZ3QVltd1ElMkZyWGRqRXNRUml6aHZqS0NyVXA4SWY0dVclMkZ3Q3l1SzNGczg5M3AxbmV6ZlZkZURDT3htSEZpOFpIJTJCODl3U2VCalAyWXVYJTJCVkZpWWdnQTcwUG10OVF6ZnlqZHhYZWlQZWFZM3JOWXQ5WmpkS1VrZ1AyZ3lqN0w4ZnRMJTJGUGdUejJ0dUxkSklUNmNOMUpGY3h6SjJVN1NiJTJGcyUyRmE1QnNLZkxFTXZsUFhieTJzSkk0MHVGJTJGMGl6VnVVY2IwNW4wejNna1RsdyUyRjMyMzd2SGVkZFhONXBFTWRuYm1PeXM0QkZjeTBxRGNGNkdKYSUyRndERmFjbXlYOFB1MlIxUU9pNll1cGFiZDJGNzhkajZ4akxWRlVscHlTYUh3a1VmN0YwJTJCRElycnZsNmRyNDJOMGVPdFJJSHM3bGRrdjRCOWlqZjh0S2dmQiUyRlAlMkZBSFgyOG1QbHV5YjBWczdPZFRMNlNTUmVvSzglMkZUWnFOJTJGcnFPUEwlMkZKd1RxZGhGcjltMWxxVWhqbmhjbTJ1djhBZGx0TiUyRk1LZjdwYjl0UDhBWnJqVmhXSGFIckVXcXhqVGI5Z3Q5R0tReXRzWHB0eE5mMnNsMzVkM0owanpuSmJDb2p1UWxSMjZjVCUyQnRjNTVxdGhkeVhjeXlKOVg4d1dmeDNFU2JDNlVicmN3ZnpTOGZqZmolMkZBSHlmdlB0ODhOJTJGS3VxM0YzcTFocUJJRXljNHBXWnVDa29Bd2NrOU1BNTBWUEpWJTJGTXEyazBUem5mQ0pRVW1QSm9tJTJCekpHJTJGeGNXOXQlMkZ3RFk0UTZjSUxhNlpZMmVLUndzbHY2Z29hRGZqeSUyRmFLNGYlMkZBSmxlYWRNODBhOHQxcGNaOUdDSlltdUcyTXJEN1RBZnNxdjJWJTJGbXdyMFd5dU5YVXclMkZWeGNpMSUyQktMdCUyRncyM3dyZzZxR1ZhbnIxdnJLMnQzY3NJcnkxYUVTQmp4SkVZWU9RZmY0Y2p2bTN6TGJwWlhMV1RHQzV2ciUyRndDc3dSamZqQkdvQzh5ZmklMkJJakNQWDJ2Tk11JTJGcVpEUk5HS1NBZ1VxeHFncUtydUYlMkJINHNqc3lQUElaWlNYSjdrbmZHMWU5JTJGbHhyZHQ1a3NicWRTRnU3ZU1MY1c1TzQlMkJFMGNWNnh2bkY3NXVWemNiMTR5eUJXNyUyRmFPMktlUzlSdXRDOHlXZDdETVlMZm42ZDNMJTJCeDZEN1NMSjdZaGRrTmQzVWtSRFJTWEVyeE1EVUZHY2xUOUl3bmRDdHBXcno2Wk44TXNrY0RzR2RvanhramNmWm1pcCUyQjJ2OEFMJTJCM2lXb3lTZlhiaUhVbUZ5MTRmcktYcUg0bkwxNHpLJTJGVnVYN2NiWUVlSldEUFFWcFUwUGoweDZ5cUxMMHBKVVc0dFhFMW81TzlTYVNSYmVQMjhDb2IxWjFUNnZQS3p4amVOU1NRSzlhViUyQnpuWExmVXJkdER0OVQxVSUyQmplUnhwYTNpTXZGNVY0MWpjZyUyRnRyeCUyQkxPZDZWYmFUcUpsUzdsTWw1SXJpM2hId1JpUWo5MjBzbmh6T0RwcFdzaWk2emNHZVNaZzNwbzNOU3klMkZEJTJGZW40SzlWNTQycjBMeWhlYVhjbTV1YUNDV05oeGtsJTJGdkNsT3FjdnM0cnJuNWcyZW5JOXRwS2k0dXFsV2NrMHJTdnhQOEF0ZjdISVRhenBjY3JpTmFMR0QlMkZvekduQlZJSmtaUDI2MSUyQkZ1V0U0anVMcVNabzJwYkpNanlpdEFRZVZQd3JqeGJVRTAxcmV1WEd2Q0tQVVpKMkNzMGlxZ1VnRnR1bnclMkZDS2ZEaFdMWFN6YXlXNzNqeHVHRWxXZ0pVYlVvU0Roa0xjWEVqSkRTSnFrb1NkJTJCSDdPR2xoNWExSHpET05JaXQlMkZXdlpFTWtKUmxRdEdsS3NDeFZYNCUyRnklMkZhd1d0SUxUTFRUbWVNbWJUcm0xalhlMG5tTUxPd0gyblpscld2JTJCVmhsQmI2THFsMDl6cGVtcmJ4MmNKZTVXTnFpUmkzRUtyZnlqJTJCWlI4V0o2eCUyQlZQblhRcks0MWk5c2xqc3JVQjVwQkxHekFWQ2dpTldMTnVmczRJOGg2aHA3MzhzTnhSQmV4ZWk1Qm9CSldzY2clMkYyWHc0Vlpqb01sbEZieDYzNVk1Mms5bXZQVWRLYVJqSElGJTJCMDhQSW5oSlFWNiUyRmElMkJIT3E2ZDUlMkYwRzd0b1p6SyUyRkJ3S3pCQ1ZyVG8zR3BRJTJGNjJjWVcyMURRJTJGTVVWckZIJTJCNXZ5SW5QU0lxemZFMWYyYWZhd2ttdHA0MmtsdDBmNnV6dUluV29EcXJGUVJRamtNSlY5UTJtczZWZml0cGVSUyUyQndZViUyRndDQk5EZzJvenpyNVkxdlRJN1Y5TDFQbmJURGs4RTRRczdNMUtLSEJEcDlHVGZRZk9kb3NTeHc2dHhrcDhVTjBEeEJHMzdXTmVhMDlVelpCTlklMkZNM1NmTGNWckxyREl5WFpLd20yYm1XNDBEc0YzJTJCRmElMkZGOGVUVzF1b2J5Mml1N2R1Y015Q1NOaDNWaFVZRUsyYk5YTmlyczJiTmlyczJiTmlyJTJGJTJGUzclMkZtelpzVmRtelpzVmRuRSUyRndBOXJLWVhtajZqVDl3MGN0dVQ0T3BFZ0IlMkYxbE9kc3lPJTJCZCUyRkxVZm12eSUyRmNhWHN0eHROWnlIb3N5Ym9mazMyRyUyRjFzQjVPUnBNb3haNFRQSUdqN3BiUGwlMkJOUHJFUmklMkZhRzZIMzhNa1BsWHpoJTJCamhIbyUyQnJtdW5DcXdYRkttRG1maVNSZjI3ZCUyRndCdjlwTUpCRGNXTjdKYVhjUmh1WUhLVFJQc1ZkVDBQJTJGTldCOVJpV082YWclMkZkeWdTTDdjdXYzSEtwa3dJbVBjWG9NMktHYUhoeTNCM0JIZjNoNkI1cXNsWFFvb05PVm9mMGE3WGRpNmZEeEJQS1FRNzh2VDM1eE5sNkZyMWw1czB5WFNOWlJIdWpIeGxSaHRNdiUyQiUyRkU4SkI5ciUyRkFJZklMbzJwVDZYZkxkOG1taUtlaFBBekU4b1QlMkJ5dkt0T1BXUCUyQlhLdnJhZlNwbDFYVDJMNmV6ODRMcUxyRTFhOFdIN1BIN05EbGtNb2x1UGlIUmFyUnowNUYlMkJxSjVTSGYxQ1QlMkJaJTJGTGx6NVd2dlRVbVhUNWpXMm5QJTJGRUglMkZ3Q0xCJTJGdzJGYXVEOFNuNmM2N2EzVmg1eDBwN0clMkJSZnJBV3NrWTZFSHBMRlhwJTJGeHBuTGRjMFM4OHQzcHRyaXIyN21zRTNabEg2blg5cGNtUjFISnhGUzN1QTRvZnREQmx2Y3oybHhIYzJzalF6eE1HamxUWWdqQ1ZHNk1oJTJCV0Q0WlJJdnYzR0MxWjdwZHhIcmFOSkNWaXVrcTEzYXN3VkFPOXhDVyUyRjNVZjhBZGtmJTJCNiUyRjhBVncxdDVOUGtLYWJlM1N5cUtHMnVJcXVZRFg3SmM3ZWkzN2ElMkZaJTJGYXptOXRkVDJkeEhkV3pjSll6eVE5UjRVSTdxdyUyQkZoa3dodkRxRUNUYVpiRXh5SGhQYnFLbUNZaXZCZiUyQktaUHRSJTJGOERnSWtTRHhWSHFLJTJGU3lCRmJqZnZSOGsxeFk2Z1Z0TGI2dkpiVldaYmh2VkxvMzh5QWVtWVpGJTJGNFhDalcwTWNYOTg2JTJCWDcyVWVtNlY1NmJla1ZBWUx1MEQlMkY4QUpTTCUyRkFJdGp3N1cwdXRWZ2owJTJCN2s5RFVMYyUyQm5hU01hRmtydmF6JTJGOHlYUCUyQnBncTAwaXp0YmthVmNQOEFXQmVyNk56RXdvckxXalJzb0o0eVJ2OEFFanI5akdPTURibjV5M1V5Sjh2Y3lmeUhwbDFwdWh5MzF6RUUxZTljSmZLeFhqSzhKTWFUcWZHWkNydCUyRk45ckNYOHdkYSUyQnF5YWJBR0FNODVhWUE5RlVjViUyRndDR3laWEVsdmIyMFZnSGIxTGVOREVLbXBLRGhHUyUyRmZPSyUyQmNyaHRVMUc4dkxaJTJCWXN6Nk0wUSUyQjBuQmg2Y3dIJTJCJTJCNWFmN0Y4c2xzQUF4RzV0a2VzVG02OHNhZGRvM0diVFo1YmIxQjFHJTJGclJmcnhHVFc3THpQcGNyYWhBTGZ6RHBpcjliaUk0dEpFU0Fab3dmdEo4U3Z4JTJGWSUyRjFjRDZWTWIzUk5Uc1NoSm1oanU0Z1ZQMm92dEglMkZnRyUyQkxCVm5iNmI1ZzB1eDFKR1dEWE5EajRTRWlvbmdRY0dqayUyRjM0aFg3TGZzWUJ1a3QlMkJXYmE0Z1dIV21qJTJCc1dkcEswRHdxeSUyQm9Xa29uSkUlMkZ2SFpPZk5jS2Rhc25rODAyODhUTjZFRXF4T1hOV1NPSmlTN24ycDhlQjRieVN3MWlsdjhBdTRPUWs0N2tLbyUyQkx2JTJGTFg3V0s2anI0dTlVZWUxakl0bmRpSWlhc3l2OXNWJTJGbDN3V0FGWkJidllhanFzViUyRkRTUDF5SVRQVWdTS0g5U1NpblljSVJ3JTJCSDdUU0pociUyQllPcjJzT2tXbW5oSFNLNllpUm9sRkY1QSUyQm42bmdKaWY4QVd5UDJNTDZkYmlSSSUyRnJxc0FJM1NSQXNNWSUyQnhIS3JsR2hmbCUyRmVmQiUyQjglMkYzWGdYWFlwcEpHMW0ydW5rYmo2T3AycFVTS1ZBcWtzU05zaWY1TCUyRkZIOXZIb1Vscnl0ZHREQ2dkbVY3ZDVJMmJvVSUyQklOR1QlMkZMaHByM25MVEtKOVVUMTlUQjR6Tkh0Q2UzSmozYjJYSXNzcDFZOGJVZkZPUXNpeDdTQ1NsQVhwVG1qNGF2NU9uc2RNJTJCdXpCM1ptOU9XYU5HRDIlMkZNZ1JUb2xQM3NYUDRadjkyZnlZaTZvSVREVnJHMjh4Nk5CZUJ2cVdvV1MxaXZTZUlpa1U4akZJJTJCekxBNiUyRkduJTJCJTJCM3lGYXExcGNYaXgyOFpVR2kzVTJ3YWR4JTJGdXppQUVXdjhBcSUyRkg5dkRMVjdUelhlV3JxYmFXTzRWaEhlTkh0RmRDUDdFaFg1RDR2OSUyQmZid3BDM2xpR2d2SW9WZFNxdDZwTFBHcjBwVGolMkJ6OFh3NENVa0VHaWw3UndSdTlaendqUHg4VVppS2VQU2h5YiUyQlJmTWRoSE0ya0xFViUyQnNEbERMUUZuY1VDeGNSWDdXRUYxRENzNjN6Q3M2cjZjMU5rZW5jcjdyZ1hTcEZzYjV6Q0ZvcmVwQzlQaVVFZlpyNERBRFJWRCUyQmRkVWtQbVBVNGxVZ1ZOdE5HNHFEdzJCb2Yya1AyR3lLMUxFQ3BZJTJCQXFUblVGaHN0YTFDZSUyQjFHM2ludVpDcnlTc2dxd3FGTlJrd3U5UjhtJTJCV0l3c2NFSHJoYXJEQkdqU0g1dFQ0ZjlrY0lvb3A0ZGE2VnF0MkdXMHRiaVFIYmlrYmtINTdVd0hORkxiU3ZiM0NORkxFeFNTSnh4S3N1ekt3UFFqT3UzJTJGbXElMkIxbUZvMUMyTm1GTWpoVFFMR3UlMkZLUnR1bVFmVSUyRk1XaDN1b1RYeDByMXBKZVBLU1dTbkpsVlU1bFFOdWZIbmhReG1PWXhrbFNQaUZDRHZVWlFLVUlwVW43SnIwJTJCN0Q4ZVlyQlA3blJiVWY2MVclMkZobVBtdGtCRnZwdG5FZXpDTWtqNzhDcFJaT1k1dyUyRkJtV2hCQ2pzZXVTeXluMHBJcElyMkNTcjJndGJZVFF0NmF5bHVmUHA4UEJXYkNaUE51clJPc2tZZ1ZrWU92N3RTQVZOUnRnMjc4MCUyQllQTmQ1Q2RXdVJKSEVXa1dPTkZqUmFpaCUyQkZBUGxqc3FMZVJyVmglMkJqUXQzR0JSb1hCQktBZkZ3YWclMkJMSjE1QjE3eWZlYWxFMnRhVEhjWE1HNjNFcSUyRnZiWUwlMkZ2eUglMkI2ZUZLJTJGM2lKeVQ5dkFYa1B5Z1BORXVveHgzS1EzVnJBSHRZV1A4QWVPeHB2JTJGeFdxaWpNdjJXWk1MZFM4dkJMeDRwZzlqcVZxVEZKSXZ3dXA2ZnZQNWxQJTJGRExpbGx2NWklMkJTdFB0TDg2N3BFRWNlbTZoeGtpdkxXaklrJTJGZXZIYjA1ZnRaRjlPa2Q1RXQ1bWF5dm9XRXRyZFJtbkNVZlltaFlmemZ0cCUyQjNrMyUyRkFDNjh6TGZ4JTJGd0NGZFd0MWVFbHJiVW9XJTJCd0dJckRQR3Y3Q3lVJTJCTGolMkIxOGVJZWF2S00zbHE3V3FmV05Pa1lpenVYRmVOZXNFOVA4QWlYN1dOYnFDbmNmbTJmelJvVW1nNnpFcWE3WlBEUFBDdjkzZVFSTUMwMEElMkZhJTJGWmFXTENIemY4QWw3b09yYTViNmg1S3VCSGUzcmo2MVl3ciUyQjVYbHUwJTJGTCUyRmREZnp4JTJGOFF3cHVwNFZXQnJPUmhmVzdpUzBZa3JKYmtkUkxLdjJvbSUyRlk0ZmJ6c3ZrWFU3ZldOSGp1M2poajFaQUk5VUVLaFNKdkVtZyUyQkYxJTJCUEVoWGdQbSUyQjk4eSUyQldyaVR5eHJNMGlDTUJvNVZWVzlhRG9KSVptJTJCTGlmNWZ0UnRoTjVYOHp4V1htJTJGVFo5ZEhxNkhIJTJGb3oyejFlTkxkMUtxNFR2d1klMkJvMmVsJTJGUFhralRQUEdrTlkzbjdxN2hxOWplcVBqaWtwJTJGd0FORSUyRjhBdXhNOG1hem8lMkJxJTJCVjlVdU5JMUtMMDd5MlBGbGJkV1UlMkZabGpQN1VUZnN0aWg5Snk2ZCUyQlZWM2YyZGphM2x0SGU2aXBlelMybXJ6QUZmaCUyQjJpTWYySyUyRkUyWGNmazVvam9UWjMxMWJ6MUpFakZYRyUyRml0RSUyRjRsbmxoM1VTTEtDWTdsU0dMUTdVSTNEQTltejBMJTJCVlA1d0xxeGk4cyUyQmFaUkhxSXBIWlgwaEFFOU5samxQYWYlMkZLJTJGM1olMkZyWXFxYWwlMkJTJTJCb1hiMkVZdnJhV0cza2N5dkxHM0lSdXdZJTJCa2dQRlcyUGZKalolMkJScnV3dUZhMjFpUllGQUNLRktzS2Y2ciUyQm1mJTJCUmVUVUR4eTZZcW8yMExRUXBFOHJ6c28zbGtweWI1OFFCaTJiTmlyczJiTmlyczJiTmlyJTJGQVAlMkZUNyUyRm16WnNWZG16WnNWZGxFQTljdk5pcnpiOHp2SWY2YmhPdTZSRVAwdGJMJTJCJTJCalViM0VRJTJGWiUyRjR5cCUyQnglMkZQOWpPSGFndnFXc013JTJCMUVUR3dQV2gzM3oxem5JJTJGekw4aHFFdXRmMHFQNEpSenZyZFI5bHdSJTJGcENEdyUyRjM3JTJGd2VSbkd4VHROQnJlRXh3NURzRDZTZW45RjRncHBodG8ycHJZU1NRM0tldHAxMVJieUFpdTNRU29QNTAlMkY0WmNLNVl6RzVRN2VHUEVVeVJwTXlrUlNFaEg3TVYySXpHQWtEWTVoM09TRU1rRGp5Q3hMOGJlYVphZ2x4b09weFRXN3FMU1drbW4zY1gyZUozNG54JTJGd0FwY2xNc2VuJTJCY2RJZUM0UUNaUVBYakgya2Fud3l4ZTJSalQ3JTJCMmUwYlJ0VkhMVDVTV2hsJTJGYXQ1T3pyJTJGeFd4JTJCMnVKV3R4ZTZIcVN3OHd0eER2QkwlMkJ4TEdlZ1A4eU9NeWNlUUViY3VvN25uTlZwWjRKbU10d2Q0eSUyRm5EOWJFTlUweTgwQyUyQmF6dVJ5VHJISVBzdW5aaCUyRlRLaWw0a1NJYWolMkJHZFoxSFR0TTg0NlNYVWVuS3YyZ04zZ2xwMSUyRnlrUCUyRkQ1eU85czd2UmIyU3h2VTRzaDNJNk1PenA3Tmt5T281T0ttU3VHVU12UTlNTWRGMW00MFMlMkZqdm9BSFVmRFBBMzJaSXo5cEdIJTJGRElmMkd3anQ1UWgzJTJCdzMlMkJkY0ZucmlyMEdXNUt5eDZoYXY2bHRmcURIZGRXNURiaTFkbzVWJTJCdzYlMkZ6WkxQTGJRNm5QOEFXcnBBYnkzb0pHSTJrWHFrcmZ5eXFSOXJPVTZIcktXSHEyTjhHbDB5NnA2Nkx1MGJqWlo0diUyQkxGJTJGYVglMkZBSFltZGE4cDJpMnRrOHNqckk3bWlUSVR4a2olMkIxSEpRN2h1SiUyQkxKUjNLM3NudXEzZm8ycnVvcVFDM2lkdnNnRCUyRldwbk1KJTJGSiUyRm1lNE1zcTJqQzl0dVVhWGNYRVIzZHJKMWphcEg3Mk5XJTJCRm1YJTJGaXQlMkZ3QjVuVGRJa3N5elcwYyUyRnJ5eFZaZ3pCbUNzYTRlQ1pBS0hESVdnYlBEdks5anF1aDZ4YVclMkJ0VzgxckRMNmxvelRLYUZKUVZBQiUyQkt0Zmh3dnM0N215dkwlMkJOUWZUczJrRDlVSzhnUUtsdjJYcDhTdG5SJTJGelExR1cwOHUlMkJsWk8wZDNkVHh4UXNoS3NLSG03aGg5amlxJTJGYXppNk14RWlJNVlPYTNOeXhKTWpWcnV4JTJCSXJsY3RtUTNUUzkxRTNqQ0cyakhJMDlSMXFPZE9nRmY5MXIlMkZ3MkNMS0ZZeHlKQklGWkpPd0hnTUMyTnJ5RzN3Um5xNTZ0JTJGWmh1c1ppaWh1N2NNV3Q1aXIyenB5aWtVQVU5VCUyQlljdVdSNXBkUHFpYWNRcldxWEN6UjFVU1ZCQWIlMkZBSFlwJTJGbnd1dGRWaHRkVGElMkZnV1ZCT0FrOEJjTkc5QlRxeWs0YzZyYzJkeGUyRjNjMmtjS0pHSTdxeDRrVWpweVIwQjZWciUyRk5oQnFjOWhhU3hwSEVSYVhSYVdJdCUyRnV2Y29UUmE3NVBseVFuJTJGQUpadllJJTJGTVVTMlNORUxpVlRFeWdVam5WVzlPbGZ0SThoVldWc25TWFZ4ZlRHUzZsYVNWaUNTMndvZGpzTnM1JTJGbzhyckw2OXF3ZDZwSXJxQXclMkZkJTJGWVB3OU9tU3VhNTFHVko3NjJzd1FYTENEMUFpcnlOUXJNZmkyJTJGeVZ3eEtrSWpXNyUyQmV6alI3UFRwciUyQlVidjZXeVVIOHpmYTZkdU9FUG5qVDdTRVdtcnh4a1NYYXRhem93QTVLWSUyQlNjZ0Q5cUlyeHdRM21QWDdFZXRxRmhBdHFQdGVnenlTQWV3QTQ1RiUyRk1IbTFkY1JJR2pNZHZDJTJGcVJJS2N1VkN2SjIlMkJSJTJCemdsTFkyeWhqbkxhRVNmY0VxdWJ1clc4TTVIcHpLdklyMUZhRGw3OWNSYlJyNlM4JTJCcjI0NUdDb2FjJTJGQ2pLcDY3JTJGd0F3dyUyRjhBTDNsaTAxcUJMZ1BKTzhmN3Q0d1A3cyUyRnNFOWZoT0hlciUyQlZ0ZmdnJTJCdmFiY0plMUZKclBqd1pWVVUlMkZkeSUyRlI5bGx5SUZpeHVFempLRWpDWW9qbUdNNmphYWpaMjhSakJpRWlzSnpVTFRpM2lTS1Iwd2JvSGtUWGRXdDIxT0xUNXJ1MkE1UmxOMWs4U3JzVldUJTJGQUdENWVuYTFhWEElMkJvNnBEJTJCOUoyV2NlbkwlMkZsQkpSOEQlMkZ3Q3JuU2Z5ODgwVyUyRmx5emwwbTd1Slp0SlIlMkJWbVhTc2x0eU5YaFlEN2NQN1NjZmlUJTJCWERYY3hvc1IxRDhydlAycVdVZGxaYWRIWlc3a1BjUGNYRVllU24yRUtSOCUyQktKOXJoJTJGTmtSdSUyRndBcnRjMDI2ZXkxRm9vSm85eUtzNElQN1N0UWNsejBicmY1amVYdEtoUjdlWVgwc2llb2lRSFlMMjlSdjJDZjVUOFdRN1clMkZNaiUyQlpyT0tkMHQxQ3QlMkI2ZURrN3hNYWowNUNhTnhiJTJGVndFZ0N5MjQ5UGx5RUNNZWZKNDIzNWZYUTYzVWYlMkZBdCUyRlhDN1Z2S3Nta2ZWN2lhYjFkUGxJU1c3alRlRnolMkJ4SkhXb1BnMzdlZFE1a3lOREl2cHl4JTJGYlElMkIlMkZRZzkxT0I3aEZDdXJJc3NVcThKb0hGVWREJTJCeXclMkZVMklJSXNNTW1LZU9aaGtpWXlITUY1ZyUyQmhDTmlwY3lGZjNud0Q3Y0glMkIlMkZvVCUyQjF4JTJGd0IySiUyQnppTnlXMDElMkJOc2VWdE1vTWM0RzdWSDgyVENieXhmV014dFVNbG5ESVByT2xpNTVKSWglMkZ3Q0syWmVNcXRoWVlPTVZ4Qk5iJTJGdTJISyUyRnNsNkpVN1hscCUyQjF4RGZiVCUyRmRlRmdtUGtuVzdxMGVDJTJGc1olMkJPb1dUY2s1ZnRSbnJHOVB0SWZzdG5hdFkwaXclMkZNZlE0JTJGTVdoOGJmWGJkU2p4bmJteUQ0N1M0JTJGNWt5NTVnV2NhWnFEUHAxeVpvNDJQcHo4U3ZJZVBIT24lMkJUZk8ycWFYTUwlMkZTSGlQcWNSZjJNOWZUWWY3OFhqOFhJZnM0cW9Xc0dzUTY0VHBwJTJCbzMxekdiSzlXWWZGRThaOVRjZUk0RlA5bG5wTmJXRFZkR2l0OVJSYmlPNGdUMWczUWtxQ1c5alg0bHprc0UxejUzODJEVTdXekVLb3FxNVVWQW9PSWVWOXVSJTJCTCUyRmdjN1JER3NNTWNTJTJGWmpVSVBrb3BqMFV2SHRRJTJGS25WOUgxRjlYOHZYQ2FqeVl0OVR1UW9ZTFNpamt4OU9UaiUyRmxjTVM4cSUyQmFMbnk5NWd1b05ZczJzJTJGcmZFWHNMTHhLeUpYakxINHB4T2Rwd2wxenkxcCUyQnZDT1NjdERjdzE5SzVpb0hBT3hVMUh4SiUyRms0b3ROb1pZcmlKSm9XRHhTS0dSaDBJSTJJeUYlMkZtTiUyQlhsbDU1MHo0T01HczJvSnNMeW5mcjZNdjgwTCUyRndEQ2ZheVU2UllOcGxoRFlOTVp4QUNxeUVCU1ZxU29JSDh1RGoweFY4TmFwcFY3cGQ3TnAlMkJvUU5iWDlxeFNhSnVvWWZycjlwV3d1U05nNE5TSEJxS2JFSHhybnJMODBQeTJnODZXWDElMkJ3Q3c2OWFKUzNrT3l6b04lMkZxOHglMkY1TlAlMkJ3MmVYbTBxOGd1Wm9ibEdnbGljcE5BNHBJcm9hTWpmeTBPS3ZwZjhsdk11c2E1b2wxWmF6T0xxWFMzamlpdVR2SXlPdkpSSWYyeWxLYzg2ZU04eSUyRmszNXVzZksycjNGdGZ5TXRqcW9SWlozcVJGTkdUNmJQNElRN0klMkYlMkJ4enRGMSUyQmFIa2UwMVNEUjMxYU43bVolMkZUTFJWZUtOdTNxVEQ0RjVkTVZabG15bElaUXdOUWR3UnVNdkZYWnMyYkZYWnMyYkZYJTJGJTJGVTclMkZtelpzVmRtelpzVmRtelpzVmRqWFZYVmxZY2xJSUlQUWc0N0dTT3NhTkk1b3Fnc3g5aDF4VjRSJTJCWnZrQTZWSzJyNlZIJTJGdVBsYXJJdjhBdWx6JTJCeiUyRnhqYiUyRmRmJTJGQTVFb0pMSyUyRndCRmgweU9KVTFBeXJINm9BQmJvcUpJdGVidHlKa2paUDhBS1ZzNzNxbm0lMkZ3QXN5Vzg5bGVzN3h6d3RTTXhNUktHJTJCSGdocHg1NXclMkZ3QXklMkJXcGJJSFdOTmplR0tGa0RqbFZ3NSUyQklQR3dwOFMlMkZ0Y2ZzWkdVYXVRSHZkdnBOV0p4amh5eU1aQSUyQmlYUSUyQlVtTVhOdGNXVnpKYVhTR09lSmlzaUhzUnRsbDF1TGY2cmNNZUtiMjB2Vm9XJTJGNnBQJTJCMHY3R0hzTHI1cHR2cTdtT1BVNEVsbUVoSEgxZUNJSTRrcCUyQno2YU83JTJGdGVwaEJOQlBieXREY1J0Rk5HYVBHNG9SN0VaVktKSHJoeiUyQjkySmpEUEE0Y3czSE1kUiUyRlNpaU5HMW03MDI4RWlFQzRqJTJCR1dNbjRKVTdxZjhBalZzbG12YUJwM25MU0Z2YkNpVEtDWTJQMm9wUDI0cEtmcyUyRjlkNUJURkZJeXM1WkdYOXBLY2g5QjY1SnZLbXJTYVZkZXZ4ZWExbSUyQkNjRUZReWo5dFIlMkZ2eE10eFpCSVY4eDNPaTFla25wNVVkNG42WmQlMkY3WG1za1Z4cDExSlkzc1ppa2piaXlIc2Y4QW1rJTJGczRjYVBheTZwZVFhZEU2ckpNd1ZYYm9GNmslMkIlMkZFRE9uJTJCZFBJa2ZtU3lHcDZRQTEycWM0SkZwU1ZQdGNHOSUyRndEamZJMzVhOHF6YUZOYTN1cktyWExtc2NmSTFnUDdOU3YybiUyRm15d3hvdUlOMURXUEtEVzk1RFk2SzB0NUlmZ25hVUtnRDA1Y2w0OUk2SDdUWjBieW5CQW1talNWdmhjejJxRU02MCUyQkhuVlJ3OW9tJTJCSCUyRkFGc0l0ZmhuZGcxcSUyRnBOZHhtSXVEUVZVJTJGRUNmOG9ZUmVTTGs2UjVuV0J3MWJtVDZzU0Q4RkdCYjRoJTJGTnlYRHlQdmJzV0lURTklMkZWR0prQjMwalBLVjFQcE9zckJkdVJMRmNQYjNKWTlWZGl0VyUyRjJYeFowJTJCOTFPMnNwSW9KV0wzRTU0d1cwWTVTT2Y5VWRGJTJGbWR2aHptJTJGbTJ3JTJCb2VhcEpsQlZkUmpXZENEc1pFMmNmZXVIZHZmUVcwQm5nWnB0VnZFSDF1JTJGbEc2Z2olMkI1aEg3S3IweEhjMHBEJTJCWWc4d2ExTkRGWldqU1d0c3JDUm9pR0pjbjQ2YjFZZEYyeUZXZW16eHNXMUNONEVqJTJGWmxVb2Z1Yk9zMldweHBOR2wyb01QMmVTYkVlNXlUWEdrYWRxRnBKYVQyNlQyODYwWUVWQkI2RUh4OE1lQ3pkcHVubEV0cEhZUTM4R3FSckZOYVBBOEVnSmNGYSUyRkdxaGFkYW8yWEJHbG1iZTJ1Q3pldmJHZVJvMlBjTkp4JTJGMlMlMkZEaHQ1MXMzc0xwWUxvSDZuY0lxMjF3UlUxVWNlTHQ5SHhmOEhoajVmOHBYZXJXYyUyQnEyVnJIcUUxb3FRV2R2Tkx3VW9pam1KQiUyRk85VzQlMkZzOGNqVkgzTGV6RXZNMm1YV3F5YWJOb3pCN1NTMVdKNVN3QnJIV25MdjhBM1pVYmZ5NG9ubGF6bXRyS0MlMkJKbE5vSEZGTkZibVFhSHZ0VEo5clBselU3R09PNnZyUmJlTmlvUVFNclJ4bW45MzhJWGo0WUUwZlFMblhCZFEyMDYybDFDUDNTU3J5OVhhdjdvZzAlMkY0TERzaWtwczdDM3MxV0syaVdKQiUyQnlncGc1bE5PWDBZQVZyN1RMMHhYc3hjeHNWbGhrdHdwRlB0TFZXd2JmJTJCYW4wZTh0cDdMVFlybXlJTGxweVQ2aG9SdzIlMkZ1JTJGVGJkbHczdGFvSzR2N2ExZFkyZFc1R2pRMXFWSGolMkZ3QTI0VmFoNWEwM1ZsTnhaRVFUdHZ5WDdMSCUyRkFDbHlmanlmbzNuclRyYlY5UFJOSTFpNmdNOHFSRU5DOGdiMDVPVUklMkJOUjZuUjElMkY0SElScU9qNjU1VnUlMkZRMVNCb2dUJTJCN21VMWlrQTdwSjAlMkZ3QmkzeFpHd2RpemhPZU9YRkNSQlNQU1pOWDhtYW1sMU1oTnNmZ2xkUGlqZEQxSCUyQlMzN1M4czZaTHJFRVp0MnVFZTFXNlZXdExzZyUyQmxLR0hJR09SZVMlMkY2d09SOWRXdFJwMTFkU1ElMkZXSHQ0V2slMkJyOTNJR3lVJTJGeXNrJTJGayUyRlc1SU5BVFQ5WjBlQVdjekdUNmdyJTJCb0lsZmNnQnhzZjJ2VCUyRkFHTVl4TVNlRTJEMDdtN1BxQm1qRXpqV1NPM0VPVW8lMkJZNzJNJTJCWWZMY2QzRkplUVJ4eW83RXpRVTc5MkdRNjBiVTlIa2Y5SFRBd3RzMWpkVmVObCUyRnlYJTJCMm4lMkZFYzdaTDVYc3RWU1M1OHA2a1lacVZiVHJ5c2lmNnRXUHJSciUyRnNwVnptdXZhRHEyanpzdXAySnRBNU5DZmp0bU5mOTFUamIlMkZZeWNjSjh0bWdKUHFWNEpKTEpwSTNzWUxxSjJ1WSUyRnRCZ1A5MXE2anBJeThWdzBzTk5uOHRHMTFtOEtXTm5xVHJBdW1zNVloVHZ5Y3QlMkIwUjhmdyUyRlliJTJGV3dMZFJwZmFWRWtrUE81MHIxSGhqSkFMUlNnOUhwWDkyJTJGd0N6Z1NXNFRWOUhnYTV1cHBkVnNwRnQ3YTBGT01Oc2hISm0zVnVaWThmViUyQjB6ZkJsWkhxM0JOaWdPbm01MkxJZkRIQ1l3TUNKbVZYSThJcU1ZbnpJNGY4NWwlMkJzUlFjN2VTS1ZSUEhLdHM0cnVVa1BBY3Y5UiUyRml3YlphWTFwNWd0ckhVb2lwam5qV1pPbzRsaFJ2OHBHd2NQTDlwY1JPWm8yUzZaa2FYZ3lxb2FGVms0aG4lMkJKOXVQcU54d1ZybXNXdXB2WXphbEY5UzFLMWxUaTZHc2NzWVlNcFYlMkZGV1VOeCUyRmx3WW9TamQ4anliTzBzdUxNY1VzZG1VUVJPeFJybkg3NVBRdGQ4dmFUNWl0QlphcEFKSTBZUEU2bmpKR3clMkZhamNmWnpnJTJGd0NaV2gzR2hXJTJGcjJ3SDF2U1owRFhsUGlhMW0lMkZ1WnVLN01WJTJGdUxqJTJCYlBRMXBkUjNsdEhjeEdxeUN0T3REM0gwSElGJTJCWkZuYjNrOEVNcWh4UEJKSE9oNk1uSVVEZlNkc3NEcTN6ZnFXbVI2bEZKcWVuUkNPNmlISyUyRnNrM0ZEMG5nJTJGbWpmQzNTTlZ1ZEp1VXZyS1FKZFFPcnhjMURvYWZhU1JHcXJLJTJGUmx5VTMyaTNYbG5VNFJIT1lyRjJJc3IxaHk5Sm0lMkY0OTUlMkY4QWltVCUyRkFDc0t0ZTBacCUyRlcxS3hnOUthTCUyRkFJNk5pcHI2YkglMkZkMFg4OEVuMmxmRlgwJTJGd0RsejV4MGZ6YnBBbHNJWXJPJTJCZ0FGJTJGWXhCVkNPUiUyRmVJQlRsRSUyRjdMZjdISnBuaUx5ejVtMVR5cnFWdHEybHk4Wll6dXZWV1g5cU9RZnRJMzdXZXVmSm5uSFRmT2VrSnFWaXdTWmFMZDJwTlhoazdxZjhBSlA3RCUyRnRZRlpKbXpac1ZkbXpac1ZhT2N0JTJGTmo4c3g1bnRKTmIwTmZUMXVCYXl4cnQ5YWpVZlklMkY0enFQN3R2MnZzWjFQS09Ldmh6MENzYndNenFTU0hQUmd3MiUyQkwzJTJGbXdybGhlQiUyQkQ5ZXhIUWp4R2VxZlBINU9hZDVsdXBkVzBpY2FicVUzeFRxVjVRVE4lMkZPeXI4U09mMm5YJTJGZ001OUglMkJRZm11NW5XQzluczRyYmw4VTZPek1CJTJGa3B3R0tyJTJGeWslMkZPQnRPTVBsbnpUTVdzeVJIWTZnNXFZcTlJNWozaSUyRmxmOEEzWG5veFdWMVZrSVpXQUtzTndRZWhHYzY4c2ZrdjVROHZCWnJpRTZyZHJRJTJCcGRBZW1DTzZ3ajRmJTJCRDU1MFZWQ3FGVVVWUlFBYkFBWXEzbXpac1ZkbXpac1ZmJTJGVjclMkZtelpzVmRtelpzVmRtelpzVmRpTnpORGJ3U1RYTEJJVVVtUmowQTk4V3dOZlBhSmJTbSUyQktpMnBTVXY5bWgycGlyQVBPTjVwTVdpU3RvaVBKZk0xYlZJNHl5MUc4akRrQ253cmhEckQ2akZiJTJCV2JDN1d0MzZFY2wlMkJDUCUyQktpWkhidHlKYWpmNVdEdlA5eFpSYU5DZkt0eEtiNHpqMDRJT1I0MDNKS2tmQU9mSCUyRld3czg0YWpOZDNFRWtsRnVTT1V0SyUyRkRSVlhpS2R1UU9GSWVlYXRwazBGNVBlYVVqJTJCbEFUTElZd1NZaFhkJTJGaCUyQnlsZXVMUDlVMTJ5a21pV08ydnJXT1c0bjNQeGdjQUZYbWF0eTNjZjc3JTJCeDlqTzElMkZsdm8wRWVqVDM4OFN2SnFETWpGeFhsRXZ3OFRYOWxzNWglMkJZJTJGa1NUeW5lJTJGcEhUVlk2TGRzVlVqJTJGZER0MWhmJTJGaXR2OTF0JTJGc01nUlc0ZHhvOVg0dkRpeVNxY2ZvbiUyRk8lMkZveVlKc1FHSGZKTDVGc3JYVWRaazBtNnVUYlIzVVR2SFFBZ3pSamtPTlNPRGxhNUdnY1gwJTJGVUpOTDFTMHY0MURQRklObThHJTJCRSUyRnJ5bSUyQkhNRDBrNTJ0eGVMcHBqcVBVUGZGNmw1WDh4V2xtOTk1ZXZabGd1TFNka2pSOWdUV2pyWG92UDRYVEVQTTZ3d3pLU0tDVDR0dW9JTyUyQjN2a2U4MHhYVTJ0VzEzWlElMkJvMTVicThucEo4VWxFTFZwJTJCM3NNQldPc1hPdFd5MmlFeVhOdUN5SXc1TXlmOFZzYXNlRlA3dHZpekw0dHElMkJUek5VZnZUJTJCT1U2bnBreTlacmNpVkFPNVh3JTJCYThzaXMwMXJwJTJGbUMwMU81WXJTV0o0a1hjeUZpQjluc0slMkZ0NWZsanpMWHpNbGcwYlJRdWpRRVNiVmxEY2w1SWVuTDRreWVlYlBJcDh5Nmo1ZTFEU0VqWDBYV080UXNxS1lrJTJGZlJnViUyRmI1Z3g4Y0hNZTVsR1VvbTRtanVQbnpTVyUyRjFPZlZMNlI3c0pXMmtlS0ZVR3lnR2hJSjNQS21OVnklMkZUQWsxcGRXYzl6QmRyd3VFbGNUSWV6QSUyRkVNaiUyRm1qWGJ2UXRhVzN0RUJnQ0pNNlB1Q0hGUUV4dGl6U0tJMURISnY1VnV4S3JXTXAlMkJ3QzhKUGglMkIwdjBaQ05MdnJmVXJHRzl0aldPVlFma2YybFAlMkJxY1BkSG1lM3ZJWlYyNHNLbjJPeCUyRkRKQlN5enpCcGxycVduU1FTeExJMFA3NkVzb0lEcU8zJTJCc01nbWxheGNlVWRSWFU3WlM5akpSYjYyWG9VUDdRSDgwZjJrJTJGNEhPZ1hkeVZZZ0hwMSUyQldRVzhnNFR6UXlvUXBKSVZoMVZ1aEdKQ2g3Rkc5aHJlbXBLaFc0c3J5TU1wNmhsWVYlMkIlMkZPV2ElMkZiWGZrJTJGVTBaSk9FTDFheXUyJTJCeTFQOTF1ZHYzaWY4T3VDUEolMkZtaFBMMXhhYUpldHgweTRyRkZNeDJpbUpKU3ZoSExYaiUyRnI0TiUyRk85RyUyRndBSjI4byUyRll2WTY5JTJCcU9NZ2RsWXpxUG1XeTh4cjYxNWFvdW94QUEzZGs0ZEpCMCUyRmZSR2pvZkJsNTRVJTJCbkN5U1JOU2ExbCUyQjJ2UXEzODYxJTJCeTY1R1BLY3p0cXhqWTdORXc0alliVTMyem9OcHBGMXFmcncySlg2eWllckhFeG9KaXZXSWY1Zkg3RFlZblphWTNwTjlONU4xbjlKSkVidUl3eVJvaXNZMWtEYnBWdTNGJTJGaWRNN3hwbDNZJTJCYWRGdDdtNXRsZTN2SVVrYUNZQng4UW93b2Y1V0IlMkJQT05HMGp2TFkyOHFsUlVncXdveU9PdTM3THBpWGwzWGJqeVpxazdYZ2xtdFpJZlRFS05RR2g1UkVGdnN4cjhYTGpnSXJkV1FlZHZ5N0dpUVByZmw0U05heFZlNXMxcTdScDNraSUyRmFhTmYyMCUyQjFrVDA3V0dDcXdjTWpkSkZOUWM5QzJOOUJxTnZIYzI5V2lsalNWR0kyS3lDb3BrRnYlMkZ3QW90SHU5Y09xMmQxSllXMHg1M2RoQW80TzUzSlF0OE1ZZjlvY01GeUIyM1p3R09RSWtlQ1FHeHF3ZklzYXROUVNRcklybU9VYnJJaG9RZkVFYjVMTEh6UFA2WDFUVjRScUZvNG96RlZMMCUyRndBcEQ4RW1GbXMlMkZseGVXQk54b0VwdUlodWJTUWoxQiUyRnFQc0h3bzAlMkI0bHRVbVc3Um81b2pSbzNCVmhUMk9XQ2kxdCUyQmJQSjFwRkNmTVhsSmd0bCUyRng5MlZDeVJIdXdqYjRrWCUyQmRmMmNpT2xHMmh1aGNYMm44SkkyQkU4RkhIek1UYiUyRjhUVmM2RnBXdXRheVNQYmxKRW1IR2VDUVZWd1AxWkd0Y3NJYmU1TjNwMFVpMk1sV2FNN21CJTJGd0JwUTQlMkIxRiUyRkxrVEd1bGhuRElZbllwcmY2dFlheGF4eENEbHhJYUc3aWtvOFo3a0d0V3IlMkIzeXd4c2RHbDFXd2l0ekdia2drUnp1Z0RHblJtMzRSMCUyRlpiSUpCWnd4djlZaEFWeDhRcDBKUGlCbmFmSmwxZVhla0xOZHlyS09YR05nQURRRDRnM0dnJTJCRTdZOFd5VExmaUhOSmJiUXZOSGxlJTJGZTUwZVFYJTJCblhBRDNWZzUzRW9XbktJbWhRbW43UHd2OEF5WVJYOXhxbDFkbVhXT1MzWEhpcU1ucDBRRWtLcSUyQkE1ZmF6clF3SHFPbVdtcVFHQzdqNUQ5bHhzeW54VnNGc0xlTzM5aGIzOXRKYlhNWWxobEhHU051aEIlMkZVZmZPWlh5MyUyRmw3VVYwNW41TWdycE4xTFRqTENUOFZuY0VqJTJGWWY1T2R0MW5RYnpSM0pjZXJhc2ZnbkEyJTJCVCUyRkFNcllCJTJGNVYzWSUyQmR0QXZoZWZ1YnJuJTJGdU51eDFqa1FVWWtEN1VibmlyJTJGNnVFcThEMXJURms5WFVkTmdhSGl4JTJCdTJYVm9IUGNEJTJGZmJmc3RuUWZ5QWViJTJGRmt0QyUyRnB0YVNGMVZnRk5HVGlYRmZpQSUyQkxqJTJGbFpDOVd1TmQ4cDZrTk0xZTA0YW5Zc1kybVk3VFclMkZaRzJwS2pmc1M0SzAwM21rQ0h6bDVXbURMYXplcmNXb0I5V0N2WDFGQiUyRmVRdDlsdjhuSW9mWU5SbDVGUEkzbmpUZk8ybGk3dGFSWGtRVVhscDNSajBaZjVvbiUyRlliSlhpcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRiUyRlc3JTJGbXpac1ZkbXpac1ZkbXpac1ZkZ0hWWTlQbXRIaTFKbFczY2dFdVFCVWJyMXdkZ1BVZE50dFR0emIzSUpXb1pTT29ZZHhpcnpIenRQJTJCaTIwYVR5dmRtNnVEY0pTQ01KSVBUVmhSV0tqN0JiYmkyQjliOGtlWnJuVjNGdmJlcmJzUXNWd0hVS0ZKNnRVOGhTdmhrJTJCJTJGd0FQR3kxR3d2TE9rcUs1anUwY0lQM1lRJTJCbkl0QVBpaWY4QTRua2twaEtRYVFPazZlbWw2YmE2ZkdRVnQ0d2hQaWYyaiUyRndXTzFMVGJQVnJHZlRyJTJCSVRXdHloU1dNanFEJTJGRWZzNE16RVZ3SXNnMk5pJTJCVlBPSGxtNThwNjVOcFUxWGhQNzJ6blAlMkI3SVdQd24lMkZYWDdFbiUyQlZnVzI4czYzZjJrV3IyOW03NllzNnh5WFFweFVnZ05VZmE0aXYydU9lbjljOHQ2SjVpdDB0OWFzMHVvNHp5akxWREtmOGwxb3k1RUw3VHJpR1czMEx5dHA3UTZEYnMwZDd4STRPeiUyRkZXUGx5Y21OdmliJTJCZkt6aXVmRVRzN1dYYWhPbjhQaDlkVkluNmE3JTJGZXdEelBkM3VrTnBsell0eHRFaFcyYWRWQkt6Umt0VGthbE9kZiUyQkJ3NjBieWRaJTJCYU5SJTJGd0FSYVBxMFZqT0l3NTA5YmNMSWt3JTJCMTZ5aCUyRmpSbSUyRjNhbjI4ZGU2ZExZVFhHazZ4RHp0cHg4YUhveW43THFmYjluSTNZWCUyQnJlUTlUaFMzcGNXaGN2YXpNQldTRSUyRmJnYVElMkZGOFA4QUpscnJEdnVudm1yeUI5YnVGdnpBdG5ya1FEODR6JTJCNm1LSGtHUnR1JTJGODJIV25PJTJCb2FkTHBVNWFDNFplVUw5R2lsJTJCMGpLUjBhT1laT0xPODBqemhvMGQzWnY2a01uMldGUFVobEd4VmglMkJ5Nkg3V1FXYU84MHJWMWh2d0JNamNmVUFvc2tUYkxJUCUyQk5zSXI1b1N1MTB0Zk90N0lrdDR0aDVpalFDNmhrU3NkejZmd2ZXSWlDQ3I3VW1UaiUyRmw1SkclMkZLVFNkVGpnJTJGeERJTGg0VUNVZ0hEN1A4QXhhZmo0NUdQTWRrWXRSa3ZiV2Y2amV3RVhOaGNyOXBwVDlwRVZhdEpXbnhKeCUyQnpuUlBJZm16JTJGRnVqZlc1WSUyRlN2TFolMkZxOTRnQkNtUUN2TlFmaVZYJTJCMXhiN09BMk5sZWFYJTJGa3IlMkZBMTlKYjJyTyUyQmxYYmM3VXZ1RmJ1dkwlMkJiJTJGaVdDN003SE91YXJwZHJxOWpMWTNpOG81QnNlNnQyZGY4QUtYT1A2amJhajVkdnBMSzVVU0JkMGZjQjA3T3Y4Y01UM3FrUDVsNnRya1dwMmtOaThzVnI2Q1Nob3lWRHlIN1JKSFhqOE9RcGZOZm1DTjElMkJzWGNzbkJlQ3JPZlVBVWRGSFA0dVAwNTJueSUyRnEyZzZ2ZVI2VDVoZ1g5NEFsbXNwJTJGZHN3JTJGM1clMkYlMkJVMzdHU0hVZnlwOG42aFVwYXZac2U4RGtEJTJGZ0g1cCUyQkdDWE5lVHdNJTJCYnplV3h0ciUyQjNTVkhGR01aS01QOG9CcXIlMkZ3QU5oOXF2NWdwcjNrVmZMVjl6azFPM3VJakZPd3J6dDR3MUdaaFVlcW4yUDhySkQ1aSUyRkpKcksybHZOS3VmclN4JTJGRVlDbkNYaU90Q3BLUHglMkYxTTUwM2xxN3RwRHhETlVVVUdsUHd5SnRXUWZsZnBNV3NlYUZ0TGdzc1p0Wm5ESjFWaHhDbjM2NTFlMzhxYW5wJTJCczJaWDk1YnJLRyUyQnRSN1VWZmlvNiUyRnMxNllTJTJGazNwR21XeHZOUiUyQnNwSnFmRVc3V25SNGtyeUxGVzNQcU4lMkZMJTJGTG5XOEkyVXNXOHglMkJWbzcxbjFMVDBDWHAzbWpHd2xwMyUyRjR5RCUyRmhzZ2w5b3lYVWF4WDF1OExvQ1kyZFN0ViUyRmFHJTJGZ2M3SlRFYml6dHJyMHpjUnJJWW1EeGxoV2pESkNYUW9lVmVXOVJ2OEF5MVBLTDI1a3VOTzlFTEVvJTJCSWpnYW9LayUyRkFxSnl6cXRyZFFYa0NYTnMzcVF5cUdqY2RDQ0s3WkZQTVBsMVlnOTVhTFdBN3pRamZqWHF3JTJGeWNCNkpyTnpZM0JXN3VBYkFSS2dVcVNRVklDOEtmQ3E4Szh2aHhxOXdsbnRLNER2dEowN1VnQmZXNlRVNkZodlR3cU44RlJ5UnlvSGlZT2pDb1pUVUVISDVGREM5WSUyRkw2d3VTWjlJYzJNM1gwdHpFZm82cCUyRnNjTDlCJTJGTHk4WFZKTlM4eTNZdW80MWFLejAlMkJFa1FyR3dvV2xPM04yem9tVlREWlY0bDVuOHMzUGxxOTRvUyUyQm5UayUyRlZaajI3JTJCazUlMkZuWCUyRmhzTU5JODkzV2oyaHQydGhOVlNFcDhQR1NsQkslMkYlMkJTZjI4Nm5xT25XbXFXY2xsZXhpU0dRYmc5UWV6S2YyV0djbzEzeWhkYVZNVVQ5NUEzOXpMMEREd1BnJTJCSVpjM3BQbHpVNWRTdEdhNElhZU5nR1phQUZXSEpXb01PYzV2NUUxQjdXZjZ0Y0FvRCUyQjVQTGIzalAwZll6bzR4SVlyWklvNVVhT1ZRNk1LTXJDb0lQdGlkcloyOWxBdHRhb0k0VXJ4UWRCVTFPTDVzQ3NPOCUyRndENWU2VjU3MDhSWE5JTlFnQiUyQnAzb0ZTdGYySkFLYzRtJTJGNFhPSVdYNVIlMkZtVm9PcHVtbXdJeVNBeE5Nc3NaaFpHMnEzTXFlbjgwZWVvS1pxWXE4bDhoJTJGayUyRmNlVzlRdDlaMURVM1c0Z1BKTFMwSkNFR3Z3VHl0VDFVMyUyQng2YXJuV3MyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGMSUyQiUyRjVzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFV6WnMyS3V6WnMyS29YVWpJTEc0OUUwazRFS2V0SzQzVFlraHNvUXA1RXFHWnZFbnZncDFES1ZiZFcySTlqaERkYURxVCUyRnVMTFdKYk96UDhBdWxFVm5BUFZWa2I0aGlxQjh3V1VYbVMlMkJYVFlXUWkzaWtacGh1VWxxT0ttbjdQOEFObk90UnNpUFcwVFdVS3FEOW9mYWpZZlprUSUyQjMlMkZETG5ZdEgwV3kwVzNhQzBCSmM4cEpIUEoySjhUaFY1dTh0SnJkb1pyZFFMNkVIMHowTGolMkJRJTJGOGE0YlRieFhRUE1HcSUyRmw5cjdtU3M5amNVTjNDdjJabyUyQjF4RDRTcCUyRnpabmFOWWh0Zk5tZ1JhaG83SmNNd0UxcEtDQVNQMjQ2JTJGc24lMkJaZjU4Z3N1Z1dXdGFQRnAxeFJMMjFxRmtGQ3lQM1U5NllSJTJCVWZNdDclMkJYJTJCcXZwbXFFdHBVc25HZU90UWpFMEZ4RCUyRndBelV4T3klMkI1a0htR0NPYTFzNyUyQlZlRXNGWXBISTNTdnd5QnZEaTY0N1J0SDFieTNxRVhtUFQ1VmxnbldtbzJDMUFtajZySXJINFJNblZjQ3ozRnZKNXgxcElxWDJoMzBjVnkzb3V2Mm5RRWVrYTlYWlc1WkpOUHVsdDdkYlpwVExhc1A5SGxZVWFsUDd1VmYySmxIMnYlMkJFdzg5MVp6WTN0dnFOdEhkV3o4NHBCVUhvUWU2c1AyV1g5ckM3ekpvRU91MlhwN0xkUlZhM2xQWTkwYiUyRkFDSHdpMElhaEJxdGRPbzloS2Y5TGpZMFZmOEFMVSUyRjc4eWJaRkQ1OTFqUzNSM2duUm81WW1wNE1qQTlzbkhrcjh3ZVJpMEx6SklJN3BRRXRkUWMwU1lkRldRJTJGc3klMkY1WDdlSCUyRkFKdzh1THFNRFg5cWclMkJ0UkwlMkI4VWY3c1FmOGJMbkpidXlqY05GS25ORDFVJTJGdzhEaDVwZlFvM0djNDg3ZVZGaE1tcTJLZnVITmJtTlIlMkZkc2Y5MktQNUclMkZhJTJGbHlQZVhQTSUyRm1meTJZNHBtazFQUnFmQkJLcE53aURyNkUzJTJCN09IOGo1MSUyQjF1YlhVN0pMaUtrbHZjSldqRHFyRGRXSCUyRkVzVjVQbnRvRml1VXVRT0Z4RnZIS3BLc1BwV25MSlo1Yjh3NjVwMXhFZ3VYdUlwM3E4ZDA3UDElMkZaVm0lMkJ4JTJGa2NjYnIlMkJobTIxMjVzYlBnZ1g5NUFacThGUmh5M3AlMkZMOFNyazE4MWFESHFlbXBxdHZSTHUyaERuZ1BoZU1EbVYlMkYyUDJvempzcktMVzVqdTRFbmklMkJ5NHJROVFlNE9MNUQlMkZBQ3A1aGd1N2lPd2trVVhGeEQ2eXg5RFdNOEhOTW1HSkZGRFJGUlFpb1BVSElocm1nckFYdWJkSzJ6MTlXT2xlRmVwSCUyQlJrd3ltQ2tVSXFEMUJ4QnBXSWFOcTA5bzMxV1VSclpvaWVtMzJlUEVoZUNJQjhWViUyQkxKY0dCM0JCSHRrYTFMUVhWbmUwWG5DOWVVUSUyQjB0ZXZIeFhBMmx4YXpIZlc2MjByeDJhdFc0Z2tTcUZPUENnZHZqRENsVndrQTdoV1lac3d6WkZYWW5OQkZQRzBVeUNTTnZ0S3dxRGltYkZXRTZ2b0UxaElidTBCZTNCclFWTElQOHJ4WEpSbzkyYjNUNFoyJTJCMVRpM3pHMWNHa0FpaDNCN1pTUnBHdkNOUXFqc29vTjhOcXV6WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5RHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VmlQbWJ5bzkxY2ZwdlFpSU5WVCUyQiUyQmg2UlhTRDlpWHdsJTJGMzNOJTJGd1dRelc5QVhYbyUyRlhhRmc3TCUyQiUyQmhLMG1qZEJ1YWZ6QUNqcm5ZY0RUV05yUEtrOGtZTXNaREk0Mk5SNDB3M3RSVzN6MXAybDZobyUyQm90TEFmWFZFNU9nRFZsakElMkJMaiUyRnhaR3Y3T1MyQmJlYVJic2NwSTVZdUxRcTNFVElmaVFjdjJaVlA5MCUyRjhBc01rM21pMUZqcUJudDBDcGNJSElVVSUyQk5UOFJGUDV0dVdSRFRGRXVsd1BhUDlZalZTZlZqQklGR1BNJTJGN0J2SENPU1hxWGx1NnRyblRJMXQ3WTJaaiUyQkdXMVlobVElMkJKY2ZiNWZ6WWNaQlBLbDFJN0dSWEhLR2kzQVklMkZhalBSdmRzblFOZDhCRkZEam5MJTJGUFdoSmFYZ3VJS1J3MzNLbmdrbFBpJTJGMlB4Y3M2amtZODkyVWwzb25xd29aSkxXUlplQUhJbFQ4RDdmSnNBVkJhTHBVZXVlUzlQdHJpWVBjV3lrUVhrZlo0eVZERCUyRkpQMld3WDVYMU5KMk5yUUlHWGtvWHB6UThKUDY1R1BKZm1PVFI1RzB6WExtR0N6bFltemhaUFNlRTA1Y2VQN1VUamZsaU9oYWdrV3MzQ1cwZ2tVWGJQWmpvWlZrWThrUUhyOE9TSFVKWkQ1NDB2bVl0VlJCSUF2b1RvMjYwSnJHelU3Y3ZoemFKNWpnbTB0OU8xdTdnaXUlMkZSZFklMkJKNDhveUNnJTJGZDlReWZaJTJGd0FySmhQQkZjd3ZienFIaWtCVjBQUWc5c2d0JTJGd0NTTHBKeTlweG5pUFJpUXNnSDhyZnpZQjVxbCUyRmtxMWhYVTRaaWdOd2pzaXpmdGVtVTNVZjVKenAlMkJSWHlsb0YlMkZwajNGenFZaVIzWXJheFJFc3l4JTJGelRPYUw2aiUyRnlwOENaS3NTVU96WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5SHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VmczNWlQck1FRmxkNlhiUjNDUk0lMkZybzFmVUlJSHd4JTJGczRVJTJGbHJxT2t6M2MxbFlRbUVORkpJOERDZ1J6SURJZzViMUphdlRPaWFqWkxmMmNsczFLc0tvZkJoOWs1eWRwSlBMJTJGbXpUOVpjQklXWTJ0NXNGb0Q4THM1QzElMkZ3Q0RreVE1S3lqV2RMR2k2bWwzYnJTeXZLeHVvNkk1OFA4QUpQVmNsT2lYWnVyUGk1ckxBZlRmNWZzbjdzRTNkckJxRnE5dkxSNHBWMkk3ZHd5JTJCJTJCRjJqNlhmMkY1ZFMzRXFOYnloVmlWYThpViUyRmJmYWc2JTJGWlhCZGozS25XVVJYTHpZRllWNW44bjN1czZ1dDdidEVJVEdzYmM2aGw0MThCOFdGZDc1WW04c3ZIcVZxUHJRaUNzSlNQaWlrSDJqUWZzTm5TY2F5aHdWWUJsT3hCM0JHRzFTYnk3cmY2WWdaNUtDWmZ0SUJTbUhlRmxsb2RscDk1TGVXcWxETUtHSWZZQjdrRERQRSUyQlN1elpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGJTJGMHUlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaRmZNJTJCaXBMVyUyQlNKWkFmNzFDdGFNUHN5Z2Y4U3lWWlJBSUlPNFBiQ0RXNnBQNVl2RGQ2V2l1MVpiYyUyQmklMkI5VHQ5bXYlMkJ4dzV4RzN0YmUxVmx0NDFqREhrd1VVcWZFNHRnUE5YWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOVB2JTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWJTJGJTJGWiIpO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtib3JkZXI6MXB4IHNvbGlkICMwMGFhMDB9Lnl1aS1za2luLXNhbSAueXVpLWgtc2xpZGVye2JhY2tncm91bmQ6dXJsKGJnLWguZ2lmKSBuby1yZXBlYXQgNXB4IDA7aGVpZ2h0OjI4cHg7d2lkdGg6MjI4cHh9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtZG91YmxlcXVvdGVzLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtZG91YmxlcXVvdGVzLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGIyOTQyLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LWRvdWJsZXF1b3Rlcy5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1yaW5nLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtY2VudGVyLWJ1dHRvbi12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlciB2XDpvdmFsLnl1aTMtZGlhbC1tYXJrZXItbWF4LW1pbiwueXVpMy1za2luLW5pZ2h0IHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1tYXJrZXItdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1oYW5kbGUtdm1se2JhY2tncm91bmQ6bm9uZTtvcGFjaXR5OjF9ZGl2LmJhc2U2NC1kb3VibGVxdW90ZXN7d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCUyRjlqJTJGNEFBUVNrWkpSZ0FCQWdFQVpBQmtBQUQlMkY0UmZKUlhocFpnQUFUVTBBS2dBQUFBZ0FCd0VTQUFNQUFBQUJBQUVBQUFFYUFBVUFBQUFCQUFBQVlnRWJBQVVBQUFBQkFBQUFhZ0VvQUFNQUFBQUJBQUlBQUFFeEFBSUFBQUFlQUFBQWNnRXlBQUlBQUFBVUFBQUFrSWRwQUFRQUFBQUJBQUFBcEFBQUFOQUFEMEpBQUFBbkVBQVBRa0FBQUNjUVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE1pQk5ZV05wYm5SdmMyZ0FNakF3T0Rvd056b3hPU0F4TkRvMU9Eb3dOUUFBQTZBQkFBTUFBQUFCJTJGJTJGOEFBS0FDQUFRQUFBQUJBQUFCd3FBREFBUUFBQUFCQUFBQlJRQUFBQUFBQUFBR0FRTUFBd0FBQUFFQUJnQUFBUm9BQlFBQUFBRUFBQUVlQVJzQUJRQUFBQUVBQUFFbUFTZ0FBd0FBQUFFQUFnQUFBZ0VBQkFBQUFBRUFBQUV1QWdJQUJBQUFBQUVBQUJhVEFBQUFBQUFBQUVnQUFBQUJBQUFBU0FBQUFBSCUyRjJQJTJGZ0FCQktSa2xHQUFFQ0FBQklBRWdBQVAlMkZ0QUF4QlpHOWlaVjlEVFFBQyUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFEQWdJQ0FrSURBa0pEQkVMQ2dzUkZROE1EQThWR0JNVEZSTVRHQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVOQ3dzTkRnMFFEZzRRRkE0T0RoUVVEZzRPRGhRUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQWRBQ2dBd0VpQUFJUkFRTVJBZiUyRmRBQVFBQ3YlMkZFQVQ4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFNQUFRSUVCUVlIQ0FrS0N3RUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFCQkFFREFnUUNCUWNHQ0FVRERETUJBQUlSQXdRaEVqRUZRVkZoRXlKeGdUSUdGSkdoc1VJakpCVlN3V0l6TkhLQzBVTUhKWkpUOE9IeFkzTTFGcUt5Z3laRWsxUmtSY0tqZERZWDBsWGlaZkt6aE1QVGRlUHpSaWVVcElXMGxjVFU1UFNsdGNYVjVmVldabmFHbHFhMnh0Ym05amRIVjJkM2g1ZW50OGZYNSUyRmNSQUFJQ0FRSUVCQU1FQlFZSEJ3WUZOUUVBQWhFRElURVNCRUZSWVhFaUV3VXlnWkVVb2JGQ0k4RlMwZkF6SkdMaGNvS1NRMU1WWTNNMDhTVUdGcUt5Z3djbU5jTFNSSk5Vb3hka1JWVTJkR1hpOHJPRXc5TjE0JTJGTkdsS1NGdEpYRTFPVDBwYlhGMWVYMVZtWjJocGFtdHNiVzV2WW5OMGRYWjNlSGw2ZTN4JTJGJTJGYUFBd0RBUUFDRVFNUkFEOEE5VlNTU1NVcEpKSkpTa2tra2xLU1NTU1VzNHVEU1dpWFJvT0pLRmkzT3Z4Mld2YnNlNGU1Z013Um81c295cGRPeU45bVRTUkhwV3ZqNE9jNCUyRndEVmY5V2twdXBKSkpLVWtra2twU1NTU1NsSkpKSktVa2tra3AlMkYlMkYwUFZVa2xDcXh0dGJiRyUyRlJlQTRmQXBLWnBKSkpLVW8yV05ycmRZOHcxZ0xuSHlBbFZPc1d2b3dYWkRaJTJGUU9aYThEOXhybW0zJTJGTnIzUFVzd20lMkZwbVFHYW15bDRiSGlXdWhKVFlxc0Z0VExCdzlvZDk0VTFRNkZrZmFPazR0c3p1cVlmd1Y5SlNsbDElMkZvT3Qyc09ndURYZ2VUbTdmJTJGUG1OJTJGd0NDTFVXWjFWaHJ5c2JLQSUyQmp1YTd6Z3R1WiUyRjFGcUlVWFRTUWN2S1ppNDdzaDdYT1kwdEJEWUpoem1zM2FrZlIzYmxWZDEzcHJNdHVJJTJCd3NlJTJGNkwzQWhtN24wJTJGVSUyQmkyemFmemtGT2dxOSUyQmRqMFpGT000azNaRHRyR05Fbmh6dDd2M1diV1BVOGJKcHlhdlZwZHVadWMyZU5XT05iMiUyRjJYdFhPWTJWVTdyQTZobk85UnVKUyUyQnIxaE8xbGd1R0pidVl6MmV4dHZ2M2Z6TFBVJTJGd0NFU1U5UWtra2twU1NTU1NsSkpKSktmJTJGJTJGUjlWV2YwaXdpdTNGZjlMR3Nld1QlMkI2RDdQJTJGQXl4eTBGbXVuSDZ4UERNcGdkJTJGYlpGVCUyRndEb094JTJGJTJCMjBRcDBsQzAyQ3R4cUFMd0R0QjRKOEZOSkJUVm92eCUyQm80anZiTExHbGx0VHVSTXNzcmYlMkZBTkppeiUyQmhaRHFNTyUyRkV5Q1gyZE9jNnQlMkJrdWMxZ210JTJCMyUyRmhhUFRlb1o1czZSMUlackJHRGxrTnZJJTJCalhjWVl5eCUyRjd0V1Y5QiUyRndEdyUyRndEd2x5RDFMcVdIMGpxMk4xTzU1cnhPb2dZMXJ3QzRDOXV1UDZtemR0OVdsMXY2VCUyQmIlMkZBRmRGUyUyRjFNeXElMkYyVlRodXNhJTJCMnRzdDJrNnNQdVk3M0JybSUyRm8zVnYyZnklMkYzRjBTNFRBenElMkJtJTJGV0RxdUtHbmJoV095YTYyRFVVbHJjbXl1bGt0WjZmMmV5MTlXejglMkYyTHMyWiUyQkZZeDFqTDZ5eGdCZSUyRmNJQUkzQ1hmTklxWlgzdXJzcXFyWjZqN1RxSmdOWTJQVXNQUDBkeXBmV0olMkZvOU5PVDJ4cmFySFR4czN0WmtmJTJCeTc3VlI2djliZWpkTnNia2IzWmJxbTJzZlZqZ09PaHJkWkZsanFzZmZYcyUyRm12VjlWJTJGJTJCRFhIZFolMkJ1dlU4ekE2aSUyQmowMlkxemF3YVpMdDJMWTIxdGx0YjdYT2I2ajYlMkZ3RFIxViUyRnpWMzZ2NnJQVllGVSUyQmlDczVQUzdjZDQzTzJXVU9CNzdkMVglMkZUMjdsd3ZWbk55S0s4ZDE1cTZoaWoyMDdvOWRnM0RIZFc5bTl6THY4QVElMkY0V3U3MUslMkZUdHI5YXF6SiUyQnVIVjh0bVIwek5veUx2c1hVOE5yN2NkdGptdE4xSjlLJTJCMnBvZHNiazElMkZvJTJGOEEwWXNuRzZ0ZSUyQm5MWmJkWFhZNnB0dEFETnd1Y3dtaHYyY1didjB0bnIlMkZwS25mcEtiS2Y4QXRzcUQxRHZyam5mVjcwY0tsbGRnemdicWpmN1FIQjNwMnNHMHNiNmx2MCUyRmZaNlRFY1pnNjMweHoydmV6SzZqVmJmaFZ0ZjZiaVElMkJ4bHRtTlk3YTJ6OUpzM1Z1JTJGd2F5dnJIaDElMkJoaGRLdjNYdWJqQmhZOXdEYkh0UHBPZFhrT0g2dDFEZCUyRlJzbCUyRjZDJTJGd0RvbVY3Rmc5V2MlMkZGJTJCcTNSTDZiaWJlbjVXVmpoNGxsamR4YmV4bHRmMDZMYTl2dnAlMkZNJTJGd0FGWiUyRmhFdXFuMHI2bGZYTTlXWXpwdlZvbzZ3eHZjYkJjR2o5THRyMDlMTG9qOWJ4ZiUyQnZVJTJGb2Y1bXo5YXZySmQwJTJCMmpCd0hBWlRyY2QxN2lBN2JWWmEyblkwSCUyRkNYdzl2JTJGQUFkZiUyRldsNXppZFFaOVpjWTNsM29kZHdnMnoxbUhaNnpXZlF2M3QyJTJCbmswJTJGd0NuJTJGd0RSZjh4ZjZEZjFEcXZYR1olMkJlNXR6c2k3R2Q2bG0ya1BzcU5icXFPRzElMkY0Q3V4bnB0JTJGUzclMkY5STlBTGpSMUdoN2Y5NiUyQnVKSnBBMUtaajJXTkRtT0Rtbmh3TWhKYXlTU1NTVSUyRndEJTJGMHZWVm45YWlyRkdZU0dqRWNMWHVPa1YlMkZ6ZDVKJTJGZFpVJTJGd0JYJTJGcmEwRUhNOUQ3SmY5cEU0JTJGcHY5WUhYMmJUNm1uOVJJS2NFOVU2bGdYbkpEdjJsMGpOJTJGUzQ5N1MzOUM1MzBzT3l4biUyQkJjJTJGJTJCaDVQODMlMkYya3lmUyUyRlI1TmxQcnYxNnV3Y3pFeHNQSEZvekxCUldIejZycmlXTTlPdXY2SHM5VDN2c2V1ZTZCOWJ1b1pGNXhCVTg0QkRDJTJCdG9aWVcxUGN6RyUyQjAyR3htNzFHYjJYUDJmb2Q3UDVtdGN0MTY3cSUyRlQ4N0dkZmslMkZic2NXSEk2VjFOclFOR3UzTzJOWjZmcDVGTjlkVGNySDNlcFI2ZjlSS3dSWVh6aEtFdUdZbyUyRnhmU012TTZsWmxGJTJGVmZTb2JVMTFROU1HeXFMZmElMkJyUDlQSnNyOUt6MDluNmJHcSUyRjdkV04xejlWeEMzS2ZaVDAlMkIlMkJQVXlHZzVOSWFQZFU3ZXpaZTdLeFBSJTJGUjVHeXIxc1g5RGI2JTJGd0RndVp4JTJCdjM1MmJlNFdOd2Z0JTJCOXRiMm4yMW16YSUyRjA3WG4yJTJGcDdxbVZlcDZkYlAwdnFmb2xxWkQ3bVk5MWVEbVhoOXBCQVpER2pUOWF3dmIlMkJrcDNXJTJGcDJNZGtmcGF2MWIlMkJYVWIwV3VsVGVQMjNoNURpM0pMM1VZV1RZemx6YktuMXNjNXJON2JhTTNGWjlwdzh4cnZTdnIlMkZRZjBpbTZ1dkg2dlk3RzZoZlMybXgxV0ZZYXE3Ym5rJTJCbzJyMHJLUFRhN2J1c3R4WDIwJTJCeiUyQmxmNFJXJTJGcVBYZU00MDNzJTJGUTlMcGRiUTR2OTdXbDREY1cxbnVkNlBxZnJIMmU5bnN6TWF2TnglMkZzOSUyRjJoQTZpNXI3N0haTEgyNFRuMVc0JTJCVXdqMlB2YTNKZGo1YmZ6YUhiOG43RmslMkY0UDlZeFAwdFg4d3VscWFXZmIxQ3paNkdhTTMwNjIyV0REJTJGU1YxbXAzc2ZZNnRqV09zWTF0Zjg3NzZhJTJGVFE3czI3cUZOVklycXdBZlVzYlpSWHQ5UzBOOUt5MXRYODMlMkJncmUlMkYxc2VqJTJGQUUxbHpLbHRkRHRiaTlaSnNxcWJUYUJYZFMwVGJXNjhQeWNVeE5qOHFySWJSJTJGcFBVJTJGU2I2JTJGVHl2NlZXZjBxdk9yem1zWWFzbkd6SG1rN2d4MVphNksyWFI3c2QlMkI1djZLNzlKWGkzYlBVJTJGVjhpNzFSUlU1JTJGV2FMTXY2a1lqN1NHWDlMNmclMkJxSyUyRm9zcnltZXV4MWNmNEIxN2ZZc3JwdVBtTnhmdHo2M1Bjd2w5RFdEUTJzSXFaa05KJTJGTlplNmx1UjZmJTJGQUFYJTJGQUFTMWYycFhYMHZxJTJCSmxuN0xma1ZWdGEzWkFmbDQ5MjlteW4lMkZBNzZyTHE4NnIlMkJibyUyRjRxeWhWcnVvWmZTZWs0bGRtTTEyUGUyMjdEOVhRQnR2cHR1MyUyQjdkNlZyNjZYZjJQVSUyRndpU25zdXFuRHlMTWZGdE1aT1JqJTJCclhTUGVIRnNlbzJsN2czMUxhJTJGViUyQmglMkYyb3ElMkZ3ZnFmcEZ6blZjZDl1RFppdmF4ekRaWGExenp0WmFYQjFMVyUyQnYlMkZnYiUyRlpWWGk1dHY4MyUyRlJzajlBc0xxZlh2MmowJTJGcFhxUEZlZGdOdXJmYTEwRjN1cXN4OGx2OEFvM09idnJmJTJGQU1UNm4lMkJGUXF1cTU5JTJGVVJlYzF6YjdDSFhNYzhodG13N240N3Y4QnR1Y1BVYjZ2NlA5TGQ2OWlOb1M5SDZWazBaemNwajN0cXFlVzFBQXR1YyUyRjhBbTdNZXlodjZXdlolMkZOWlglMkZBSUV1Z3p1azE0ZUxpTjY5ZmJpNDl1NndnQmp5V05iNmRQNklPYTUyVjZ2dDI0N1AwZEQlMkZBRlAwYWpqZGM2a0JlZWtZUWQxRElzMnRzWlZaYmRWWHQ5dFlxc0c5JTJCMyUyRlRQWiUyQmwlMkZ3QkNzYWpwWFYlMkJ0WDJad28lMkZhbDdXdXZ2OVMwTWVhMiUyRlQyJTJCdlo3bTFlMWo2R1Y3NlBaJTJGcEswTkU3YXZwSDFaNjluZFU2VGk0bVA2bVZaa3RCZGJrUDN1cWJXVFJrakt1WUdiOXQxZTZ2Mjc3NnJQOUl1eXc4VnVKanRvYVM4dGt1ZWVYT2NkejMlMkYybkx5YjZ2ZFp2NkRqREt3bVZ0M2x6YnNaejNWc1pjSGx1VGdYNDk5aGZSWXh1ekp3biUyRnpuc3lLckxMdjhIMnZUJTJGcjloT0RLJTJCc00lMkZadVNXa3ZydEZqQzF3TG12ciUyRldLcVclMkZtJTJCemJaJTJCa1JSNHZWcEtuMDNxJTJGVGVxNDdNbnAlMkJReSUyQnQ3V3ZHMCUyQjRCdzNOOVNzJTJGcEslMkYlMkJ1TlZ4QlQlMkZBUCUyRlQ5VlRPYTE3U3h3RG11QkRtblVFSHNVNlNTbnhmNng5Q3pQcXQxRUNpeDdHTWViZW41UTBjYW5leXlsenZvdXRvM01ydVolMkZoYXYwbnAlMkZwRlVyeWFNakZ2cnpwczZka1BiWm1Vc0h2eDd6RmJlcjRmN3JiTFA2V3olMkZBRWxuJTJCaXZZdlklMkJ1OUw2ZjFYcGwySDFHRzBPRzcxU1EwMXVIMGIyUGQ5QjdQJTJGVWIlMkZ3Qkd2SDh2cEYzVDclMkZRcGNINU5JZWE3YXo2bGVYU2QyJTJCekhqZFc3MHFIYk1uRSUyRndsU1pyRTJOdXpmaktITVklMkJHZnB6UjJuJTJGTDlIOTV3TSUyRkJ5T2s1aHhzZ2l5dXdiNnJtNjEzVkg2TjFYJTJGQUtNclcxMGpxYnJtSER5SGw4TWhqWTNHNnNIZDZQTzMxOGR2NmVpejA3Zlc5UDB2JTJCT0hpUHhjNm45ajU1MllkaDNZbVZ5N0Z0UDUlMkJ2dmZpdSUyRnclMkYlMkZCJTJGcGY1emVoWXYxYTZwVms1V0xuaCUyQkpaaE1MNnJtaVd2c0JZNnQxRm4wbjFOWTc3VHZwJTJGU2Y4V25panFOV25PRXNjakdRNFpCN09pZzBmVjdMZjAxcnI4cnFSMnRlejNYUGJCeDY3WHNZemF5eGpiTWw5bTM4JTJGOUolMkJsJTJGUyUyQnB6cnZVeE1XcXZxTlZ1SmtzeDM0MDJ6VzVvb3NiZFNjaWc3MjVPSGQ5cVk2diUyQmMyWk9MVDZObjg4eTNlNlgxdXlrOU5leHpuWWQlMkJQZGkyTWMxbFR4bDR6dHpuV3UzYktmV1paWGJzOVQwNmYweXBkWTZKMUhyJTJGVkg5V3J0cHN4Nm1NcUZEUyUyRjFXaXNGMzBYTmE1JTJCNTc3YmYwZXl6JTJGUlYlMkJxbkh3VzFSb3RERjZ4YXk0OVR2aWtzOU9ITkJBYzlnMnNmYzFtN1p1MiUyRm9HJTJGUXh2M1BTVDlMdzJkVGJsTSUyQjFXMXNkRGl4b00ydnUzZjA5MzZPdDNwT1pzdXJwJTJGUTVIJTJCaiUyRndhSmo0R1hmMDUyWmplcFJqYm1Pcnl3TnpOakh1bGg5TWVnNXpOJTJCMWxybiUyRjRSOWZwJTJGcEZZeGNIRDZleTZuSXRkU0dBT3RkbEZ3aGxoJTJGUnVIcE4zUHBidjhBNXhucWVtZ0ZPWjElMkZEeU1XNzdUMURJT1F5NHZyYTkxYnFDMDBlbiUyQmlZeCUyRjA2TnJxbmV2JTJGQUlmJTJGQUVqMVd4YUcyc3hLT285TXU2aUszMlVZZU9MSE1MM3ZMck5ycm11MyUyQmx2JTJGQVBSaTFjdnBsMVBVcVczTmZoNVZKMzQlMkJObU85WEV1ckh1JTJGVjd0MWpHTXNZZjBub1A5biUyRkFBTnF2OVE2Vzg0dzYzMGhuMmN1RmQxamNZR3lzalM2cXpMeG1pdTNGeWFkdjg5Nk5YJTJCbCUyQjJlcWhTU0JRMXUlMkZ3ZWQ2ejlYJTJCcnRGSkgxZFpqMWFnRU5zcVp1SUI5RVBzdmJrVzdXajZlUyUyRjZmcSUyQmolMkJqV09jYk53OGhucWROeHEzdGl6WllYT2E0VHk3ZmtXYm1OZCUyRk9iZm9mNFJkcFQxZnFIVXMxcmMlMkZMZmt0eVJVMnZHYTRiU0hOZVB0RkwzZWw2Vm1MbFZlalo3ZjBtJTJGMWNqJTJCWiUyQjBXYnZTZnFuMCUyRnExZVRqZFJJZGxWc3BzcWN4d0JxYzhQYmZXJTJCclgzNzYlMkZUdGYlMkZBS0gwYmNTNnYyV0pYcXVsajRZQ1hFRFpxdXJ4bjFkeFhkUm9zdXc3OGhuWGNSNWRTV3UyMk9yWTJicXNkbjAzWkZUdDkzMk96MlpXTDZsVkxQV29YUzE5SHp1cDlQcSUyQnNmVE1ZdHk4a243WlJYREN5NWhkVmIxREVyZSUyRjlOVTc5THZ4SGJMY2xqN0tmNXJJc3BYRTVtUG05SjZxJTJGTHFhODJZcm12ZlZKSHFVc2QlMkJneXFMYXRsbjBhJTJGMDNwUDhBV3hMbWVyViUyQjVqJTJCeiUyRlU3cXZSJTJCcDlDb3Q2UU5sTEpiWlE1eGRaWGI5TzFsNzNTOTlqbnUzJTJCcTclMkJlJTJGbkVtTjU3cXYxWDZiOWMlMkZxOTlveFdOeCUyQnVZeGN5eDdnOXJqYzJQWHhNNXQzNng2ZGptdDlIMXYwMkwlMkJpOUwlMkZDVldjejlWUHI1MW5wUFdYOUglMkJzeHV5OGJJdEZOb3lEdnRvdDl0SWNOJTJGMDZIZTMxNlAlMkZBRUtvJTJGd0FKOXA5aGJYVzE3bnRhQTk4YjNBUVhRSWJ1UDV5NDMlMkZHQjlRMmRmcCUyRmFYVFd0WjFpbG9FR0dqSVkzJTJGQVBlNyUyQmF5RyUyRjhBYWZKJTJGNnpiJTJCaSUyRlNVSlQyVEs2Nnh0cmFHQUFBQm9BRUFiVzhmeVZKZWNmVWJxUDhBakhQVjMxZFh4TWpKNmMlMkZheTI3TGFNZDFKYU5nc29EeFg5bzlyZjB6YVcyJTJCciUyRlBlcCUyRnBQUjBsUCUyRjlUMVZKSkpKU0ROTCUyRnNyOWdlWEdBQlcxcm5ha0Q2RjM2UCUyQnN1QXd1bVYlMkZXWE5yeEh2Y3ltcWgyUzdJcUxuUmElMkI3SmZqMlVQY0d0cWR2eWZWc3BaN0slMkZRJTJCeTElMkZvYVY2RmZqMDVGWnF2WUxLeVFTMTNFZzdtJTJGOUpLaW12SHByb3JFVjFOREdEd0RSdGFra0VnMk5DTm54RHFkR2IwTHJ1M3FGREhYNDFyTFRXR3hWZXlSNzYyNnRkVm1OYSUyRjFQM0xQV3I5aTJjbXpycFk1dGRCNmd6cEw3S3E3V0dYUHFxZjZEOEhJYzFnWjl1cG8lMkY3VCUyRnptVlglMkZBRFhxcjBick9GMCUyQjQxMzViV1ZGZ2MwNWtEMVdNUDA2YXJpMTdxMjVQODFaJTJCJTJGWCUyQmklMkJuYXVUeXNmcW5RZW9NNmgwNmw5MWVXMkg0andmMXVoZ2M3MExxM0RkVjFYR3htNzhkNyUyRndDZm8lMkZRWGZwSzdHSVJGWDRzMmZON3ZBZUdwUmp3azkzSXlPajVWRG5ONlU1JTJGVU1hJTJGZmxZbExHdUxtJTJCcXhucGZhZHJHMXRkazMwMlVmYXYlMkJzMmVuJTJGTnJRJTJCcmQ5JTJCTmxOZGZTJTJGRHVEWE15OGU3UjFibWpmSiUyRmtOaGw5TnY1OUt0T2VMYk1ETzZGa3RKdGUlMkIlMkZDc3RMaCUyQmhjYXhtNG1ZNW9jNXRMTXIwOFhLM3N0OUg3VFJkJTJGU3FQV1cxMWZBJTJGYSUyQk9PcGRPYzZqcWVNTmxsWWpjZHZ1ZGpXdDl6ZlZyM2I4ZCUyRiUyRm9tJTJGMUUlMkIyRjVqcGYxdTZEajlSeUxLY3F1M3BlYWYxckYxYUdoJTJCaHltMFhNcjkxVGZaa3NyJTJGbmNiJTJGU1dZOWJGVHdmdGZVT3BkUXdSWnZ4c0RMT0xoMnVCZXhyTEgyMVl6TExBSHY5SzNaWCUyRndBSCUyRk9MVXclMkJuZlUlMkY2eFZEQjZsZzQlMkZUdXRFRnJMYUclMkJnTFhEJTJGQzQyelkyeCUyRiUyQmx3N2YwMWY4dXI5T24lMkJyb3lQcWxsWmZUaGhNc3FCWmJsV2h4RmphaEZMTFdFJTJCMjdIWnYzc2JzcjlIOU42MyUyRkJqVzFMOUo5UERhJTJGNnVkY3glMkZVNlRhN2JTSDZ1eExUN1cwT2MwJTJGbzZIVDZtRmwxZnpYJTJCblY5bjFSNnYwN2JiaFp2MnphNHcxNDlLMFZrNmVua01lV1B1MmZ6bjh4VmIlMkZ3ZjBGMUdWaDRtZFNXM01EMnZiQWZBM0FIOXh5b1ltUlowbyUyRlk4OTQlMkJ6dEJOR1M3UWJSJTJCYThuNk96JTJGd0glMkZ0dEx5UmJ5UFVjWE1xenpuWTJOZmg5VHJiWmJra1Z5eHpRQnZ6bSUyQm0wNHZyN2YwZCUyRm8yZnJYJTJCRCUyRlRWMnJjJTJCcm1IMGJxSFQ4ZmNXJTJGYjJOZWQxRnJtV3NhWE9aTGZSTEgwMVclMkJwdTlMJTJCYVhVaUNKSEJXR2VnTTZkMUlkVTZXemJKaSUyRkZiQWFXdVB2ZFYlMkZWJTJGblBUU3RONlU0JTJGV2ZxUGs1amhSajJCb3JEck1YTE9qcW5nZTJtMXJOcm5WM2UxbG5wZjhiJTJGTzFVcm0lMkZxTGxaSDFhJTJCc2VUMDNJd0xhN3M5N0s4bkZyWSUyQng5ZnAlMkJwNk9manVwWjZWdlQzJTJCclkzSSUyRjBQNk95bjlGJTJCalhyS1NDRkpKSkpLVWtra2twJTJGJTJGOVgxVkpKSkpTa2tra2xLUU0zRHB6Y2QyUGJ1QWRCYTloTFhzY05XV1ZQYjlDeGprZEpKVHhIVmZxNE9sNWJjJTJCcTU1ZGx2TExxMkRheDFscHJZN0lGYlA1aTYzYjc3S2Y5SCUyQmslMkZRcnBQcSUyRmNMTUFWbGdydXBjV1hNNGR1Qmo5STB5N2YlMkYxZjAwdnJCMGhuVnVuUG8lMkJqa01tekZ0R2pxN1FDMXRsYjlOanZkJTJGcXhTNmRXTWowdXBIOUZmYlhzeXF3SWFiR3d4MzAlMkZmJTJCaWZXOW45UkhvcHd2ckJoNGVGMVYlMkJYa1UlMkZxbVpRUUxTQjZkZVl4d3V4N0hBZnBHdnM5TCUyRkIlMkY4SjZpdldWWjJkajR2VjhGZ2Zia1klMkZvNVdPOGhvc3JkcjMlMkJpNnQ3bnJlZld4OGIyaDIwaHpaRXdSOUZ3JTJGbElPTGc0JTJCSTY1Mk9DeHQ3dlVmV0Q3UTQlMkZTY3h2NW0lMkY4OUsxSXVqWWo4UHBXTGpXRGElMkJ1c0I3U1pJY2ZjNXU2WGZuRlczMXNlSWUwT0V6QkU2JTJGTlNTUVVwSkpKSlNra2trbEtTU1NTVXBKSkpKVCUyRkFQJTJGVzlWU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyRiUyRlolMkYlMkIwMUlsQm9iM1J2YzJodmNDQXpMakFBT0VKSlRRUWxBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQURoQ1NVMEQ2Z0FBQUFBWUVEdyUyRmVHMXNJSFpsY25OcGIyNDlJakV1TUNJZ1pXNWpiMlJwYm1jOUlsVlVSaTA0SWo4JTJCQ2p3aFJFOURWRmxRUlNCd2JHbHpkQ0JRVlVKTVNVTWdJaTB2TDBGd2NHeGxMeTlFVkVRZ1VFeEpVMVFnTVM0d0x5OUZUaUlnSW1oMGRIQTZMeTkzZDNjdVlYQndiR1V1WTI5dEwwUlVSSE12VUhKdmNHVnlkSGxNYVhOMExURXVNQzVrZEdRaVBnbzhjR3hwYzNRZ2RtVnljMmx2YmowaU1TNHdJajRLUEdScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlNHOXlhWHB2Ym5SaGJGSmxjend2YTJWNVBnb0pQR1JwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVhWFJsYlVGeWNtRjVQQzlyWlhrJTJCQ2drSlBHRnljbUY1UGdvSkNRazhaR2xqZEQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFF1VUUxSWIzSnBlbTl1ZEdGc1VtVnpQQzlyWlhrJTJCQ2drSkNRazhjbVZoYkQ0M01qd3ZjbVZoYkQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1R3dlpHbGpkRDRLQ1FrOEwyRnljbUY1UGdvSlBDOWthV04wUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFU5eWFXVnVkR0YwYVc5dVBDOXJaWGslMkJDZ2s4WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExtcHZZblJwWTJ0bGREd3ZjM1J5YVc1blBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRazhZWEp5WVhrJTJCQ2drSkNUeGthV04wUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGblpVWnZjbTFoZEM1UVRVOXlhV1Z1ZEdGMGFXOXVQQzlyWlhrJTJCQ2drSkNRazhhVzUwWldkbGNqNHhQQzlwYm5SbFoyVnlQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlUyTmhiR2x1Wnp3dmEyVjVQZ29KUEdScFkzUSUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YVhSbGJVRnljbUY1UEM5clpYayUyQkNna0pQR0Z5Y21GNVBnb0pDUWs4WkdsamRENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhRdVVFMVRZMkZzYVc1blBDOXJaWGslMkJDZ2tKQ1FrOGNtVmhiRDR4UEM5eVpXRnNQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4U1pYTThMMnRsZVQ0S0NUeGthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1amNtVmhkRzl5UEM5clpYayUyQkNna0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDVHhoY25KaGVUNEtDUWtKUEdScFkzUSUyQkNna0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5WbVZ5ZEdsallXeFNaWE04TDJ0bGVUNEtDUWtKQ1R4eVpXRnNQamN5UEM5eVpXRnNQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4VFkyRnNhVzVuUEM5clpYayUyQkNnazhaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG1wdlluUnBZMnRsZER3dmMzUnlhVzVuUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrOFlYSnlZWGslMkJDZ2tKQ1R4a2FXTjBQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFZabGNuUnBZMkZzVTJOaGJHbHVaend2YTJWNVBnb0pDUWtKUEhKbFlXdyUyQk1Ud3ZjbVZoYkQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1R3dlpHbGpkRDRLQ1FrOEwyRnljbUY1UGdvSlBDOWthV04wUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVjM1ZpVkdsamEyVjBMbkJoY0dWeVgybHVabTlmZEdsamEyVjBQQzlyWlhrJTJCQ2drOFpHbGpkRDRLQ1FrOGEyVjVQbEJOVUZCRVVHRndaWEpEYjJSbFRtRnRaVHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBsQk5VRkJFVUdGd1pYSkRiMlJsVG1GdFpUd3ZhMlY1UGdvSkNRa0pDVHh6ZEhKcGJtYyUyQlRHVjBkR1Z5UEM5emRISnBibWMlMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlVFMVVhVzluWVZCaGNHVnlUbUZ0WlR3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbEJOVkdsdloyRlFZWEJsY2s1aGJXVThMMnRsZVQ0S0NRa0pDUWs4YzNSeWFXNW5QbTVoTFd4bGRIUmxjand2YzNSeWFXNW5QZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNRazhhVzUwWldkbGNqNHdQQzlwYm5SbFoyVnlQZ29KQ1FrSlBDOWthV04wUGdvSkNRazhMMkZ5Y21GNVBnb0pDVHd2WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5RV1JxZFhOMFpXUlFZV2RsVW1WamREd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlXZGxVbVZqZER3dmEyVjVQZ29KQ1FrSkNUeGhjbkpoZVQ0S0NRa0pDUWtKUEhKbFlXdyUyQk1DNHdQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDR3TGpBOEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpjek5Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQk5UYzJQQzl5WldGc1Bnb0pDUWtKQ1R3dllYSnlZWGslMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhRdVVFMUJaR3AxYzNSbFpGQmhjR1Z5VW1WamREd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlYQmxjbEpsWTNROEwydGxlVDRLQ1FrSkNRazhZWEp5WVhrJTJCQ2drSkNRa0pDVHh5WldGc1BpMHhPRHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJMVEU0UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0M056UThMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqVTVORHd2Y21WaGJENEtDUWtKQ1FrOEwyRnljbUY1UGdvSkNRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDUWs4YVc1MFpXZGxjajR3UEM5cGJuUmxaMlZ5UGdvSkNRa0pQQzlrYVdOMFBnb0pDUWs4TDJGeWNtRjVQZ29KQ1R3dlpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZWEJsY2tsdVptOHVVRTFRWVhCbGNrNWhiV1U4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWtKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVUdGd1pYSk9ZVzFsUEM5clpYayUyQkNna0pDUWtKUEhOMGNtbHVaejV1WVMxc1pYUjBaWEk4TDNOMGNtbHVaejRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVjM1JoZEdWR2JHRm5QQzlyWlhrJTJCQ2drSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKQ1R3dlpHbGpkRDRLQ1FrSlBDOWhjbkpoZVQ0S0NRazhMMlJwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVlc1aFpHcDFjM1JsWkZCaFoyVlNaV04wUEM5clpYayUyQkNna0pQR1JwWTNRJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1amNtVmhkRzl5UEM5clpYayUyQkNna0pDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExtcHZZblJwWTJ0bGREd3ZjM1J5YVc1blBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YVhSbGJVRnljbUY1UEM5clpYayUyQkNna0pDVHhoY25KaGVUNEtDUWtKQ1R4a2FXTjBQZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NVFUVlZ1WVdScWRYTjBaV1JRWVdkbFVtVmpkRHd2YTJWNVBnb0pDUWtKQ1R4aGNuSmhlVDRLQ1FrSkNRa0pQSEpsWVd3JTJCTUM0d1BDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENHdMakE4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQamN6TkR3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTlRjMlBDOXlaV0ZzUGdvSkNRa0pDVHd2WVhKeVlYayUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoY0dWeVNXNW1ieTVRVFZWdVlXUnFkWE4wWldSUVlYQmxjbEpsWTNROEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrSlBHRnljbUY1UGdvSkNRa0pQR1JwWTNRJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TGxCTlZXNWhaR3AxYzNSbFpGQmhjR1Z5VW1WamREd3ZhMlY1UGdvSkNRa0pDVHhoY25KaGVUNEtDUWtKQ1FrSlBISmxZV3clMkJMVEU0UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0dE1UZzhMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqYzNORHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJOVGswUEM5eVpXRnNQZ29KQ1FrSkNUd3ZZWEp5WVhrJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NXdjR1F1VUUxUVlYQmxjazVoYldVOEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrSlBHRnljbUY1UGdvSkNRa0pQR1JwWTNRJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TG5Cd1pDNVFUVkJoY0dWeVRtRnRaVHd2YTJWNVBnb0pDUWtKQ1R4emRISnBibWMlMkJWVk1nVEdWMGRHVnlQQzl6ZEhKcGJtYyUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNUJVRWxXWlhKemFXOXVQQzlyWlhrJTJCQ2drSlBITjBjbWx1Wno0d01DNHlNRHd2YzNSeWFXNW5QZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzUwZVhCbFBDOXJaWGslMkJDZ2tKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZWR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1UVZCSlZtVnljMmx2Ymp3dmEyVjVQZ29KUEhOMGNtbHVaejR3TUM0eU1Ed3ZjM1J5YVc1blBnb0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMblI1Y0dVOEwydGxlVDRLQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUlVhV05yWlhROEwzTjBjbWx1Wno0S1BDOWthV04wUGdvOEwzQnNhWE4wUGdvNFFrbE5BJTJCa0FBQUFBQUhnQUF3QUFBRWdBU0FBQUFBQUMzZ0pBJTJGJTJCNyUyRjdnTUdBbElEWndVb0ElMkZ3QUFnQUFBRWdBU0FBQUFBQUMyQUlvQUFFQUFBQmtBQUFBQVFBREF3TUFBQUFCZiUyRjhBQVFBQkFBQUFBQUFBQUFBQUFBQUFhQWdBR1FHUUFBQUFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE0UWtsTkElMkIwQUFBQUFBQkFBWkFBQUFBRUFBUUJrQUFBQUFRQUJPRUpKVFFRbUFBQUFBQUFPQUFBQUFBQUFBQUFBQUQlMkJBQUFBNFFrbE5CQTBBQUFBQUFBUUFBQUFlT0VKSlRRUVpBQUFBQUFBRUFBQUFIamhDU1UwRDh3QUFBQUFBQ1FBQUFBQUFBQUFBQVFBNFFrbE5CQW9BQUFBQUFBRUFBRGhDU1UwbkVBQUFBQUFBQ2dBQkFBQUFBQUFBQUFFNFFrbE5BJTJGVUFBQUFBQUVnQUwyWm1BQUVBYkdabUFBWUFBQUFBQUFFQUwyWm1BQUVBb1ptYUFBWUFBQUFBQUFFQU1nQUFBQUVBV2dBQUFBWUFBQUFBQUFFQU5RQUFBQUVBTFFBQUFBWUFBQUFBQUFFNFFrbE5BJTJGZ0FBQUFBQUhBQUFQJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGOEQ2QUFBQUFEJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGQSUyQmdBQUFBQSUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRndQb0FBQUFBUCUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRjhENkFBQU9FSkpUUVFJQUFBQUFBQVFBQUFBQVFBQUFrQUFBQUpBQUFBQUFEaENTVTBFSGdBQUFBQUFCQUFBQUFBNFFrbE5CQm9BQUFBQUExVUFBQUFHQUFBQUFBQUFBQUFBQUFGRkFBQUJ3Z0FBQUJBQWN3QjNBR2tBY3dCekFGOEFZUUJ5QUcwQWVRQmZBR3NBYmdCcEFHWUFaUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUJ3Z0FBQVVVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBUUFBQUFBQUFHNTFiR3dBQUFBQ0FBQUFCbUp2ZFc1a2MwOWlhbU1BQUFBQkFBQUFBQUFBVW1OME1RQUFBQVFBQUFBQVZHOXdJR3h2Ym1jQUFBQUFBQUFBQUV4bFpuUnNiMjVuQUFBQUFBQUFBQUJDZEc5dGJHOXVad0FBQVVVQUFBQUFVbWRvZEd4dmJtY0FBQUhDQUFBQUJuTnNhV05sYzFac1RITUFBQUFCVDJKcVl3QUFBQUVBQUFBQUFBVnpiR2xqWlFBQUFCSUFBQUFIYzJ4cFkyVkpSR3h2Ym1jQUFBQUFBQUFBQjJkeWIzVndTVVJzYjI1bkFBQUFBQUFBQUFadmNtbG5hVzVsYm5WdEFBQUFERVZUYkdsalpVOXlhV2RwYmdBQUFBMWhkWFJ2UjJWdVpYSmhkR1ZrQUFBQUFGUjVjR1ZsYm5WdEFBQUFDa1ZUYkdsalpWUjVjR1VBQUFBQVNXMW5JQUFBQUFaaWIzVnVaSE5QWW1wakFBQUFBUUFBQUFBQUFGSmpkREVBQUFBRUFBQUFBRlJ2Y0NCc2IyNW5BQUFBQUFBQUFBQk1aV1owYkc5dVp3QUFBQUFBQUFBQVFuUnZiV3h2Ym1jQUFBRkZBQUFBQUZKbmFIUnNiMjVuQUFBQndnQUFBQU4xY214VVJWaFVBQUFBQVFBQUFBQUFBRzUxYkd4VVJWaFVBQUFBQVFBQUFBQUFBRTF6WjJWVVJWaFVBQUFBQVFBQUFBQUFCbUZzZEZSaFoxUkZXRlFBQUFBQkFBQUFBQUFPWTJWc2JGUmxlSFJKYzBoVVRVeGliMjlzQVFBQUFBaGpaV3hzVkdWNGRGUkZXRlFBQUFBQkFBQUFBQUFKYUc5eWVrRnNhV2R1Wlc1MWJRQUFBQTlGVTJ4cFkyVkliM0o2UVd4cFoyNEFBQUFIWkdWbVlYVnNkQUFBQUFsMlpYSjBRV3hwWjI1bGJuVnRBQUFBRDBWVGJHbGpaVlpsY25SQmJHbG5iZ0FBQUFka1pXWmhkV3gwQUFBQUMySm5RMjlzYjNKVWVYQmxaVzUxYlFBQUFCRkZVMnhwWTJWQ1IwTnZiRzl5Vkhsd1pRQUFBQUJPYjI1bEFBQUFDWFJ2Y0U5MWRITmxkR3h2Ym1jQUFBQUFBQUFBQ214bFpuUlBkWFJ6WlhSc2IyNW5BQUFBQUFBQUFBeGliM1IwYjIxUGRYUnpaWFJzYjI1bkFBQUFBQUFBQUF0eWFXZG9kRTkxZEhObGRHeHZibWNBQUFBQUFEaENTVTBFS0FBQUFBQUFEQUFBQUFFJTJGOEFBQUFBQUFBRGhDU1UwRUVRQUFBQUFBQVFFQU9FSkpUUVFVQUFBQUFBQUVBQUFBQVRoQ1NVMEVEQUFBQUFBV3J3QUFBQUVBQUFDZ0FBQUFkQUFBQWVBQUFObUFBQUFXa3dBWUFBSCUyRjJQJTJGZ0FCQktSa2xHQUFFQ0FBQklBRWdBQVAlMkZ0QUF4QlpHOWlaVjlEVFFBQyUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFEQWdJQ0FrSURBa0pEQkVMQ2dzUkZROE1EQThWR0JNVEZSTVRHQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVOQ3dzTkRnMFFEZzRRRkE0T0RoUVVEZzRPRGhRUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQWRBQ2dBd0VpQUFJUkFRTVJBZiUyRmRBQVFBQ3YlMkZFQVQ4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFNQUFRSUVCUVlIQ0FrS0N3RUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFCQkFFREFnUUNCUWNHQ0FVRERETUJBQUlSQXdRaEVqRUZRVkZoRXlKeGdUSUdGSkdoc1VJakpCVlN3V0l6TkhLQzBVTUhKWkpUOE9IeFkzTTFGcUt5Z3laRWsxUmtSY0tqZERZWDBsWGlaZkt6aE1QVGRlUHpSaWVVcElXMGxjVFU1UFNsdGNYVjVmVldabmFHbHFhMnh0Ym05amRIVjJkM2g1ZW50OGZYNSUyRmNSQUFJQ0FRSUVCQU1FQlFZSEJ3WUZOUUVBQWhFRElURVNCRUZSWVhFaUV3VXlnWkVVb2JGQ0k4RlMwZkF6SkdMaGNvS1NRMU1WWTNNMDhTVUdGcUt5Z3djbU5jTFNSSk5Vb3hka1JWVTJkR1hpOHJPRXc5TjE0JTJGTkdsS1NGdEpYRTFPVDBwYlhGMWVYMVZtWjJocGFtdHNiVzV2WW5OMGRYWjNlSGw2ZTN4JTJGJTJGYUFBd0RBUUFDRVFNUkFEOEE5VlNTU1NVcEpKSkpTa2tra2xLU1NTU1VzNHVEU1dpWFJvT0pLRmkzT3Z4Mld2YnNlNGU1Z013Um81c295cGRPeU45bVRTUkhwV3ZqNE9jNCUyRndEVmY5V2twdXBKSkpLVWtra2twU1NTU1NsSkpKSktVa2tra3AlMkYlMkYwUFZVa2xDcXh0dGJiRyUyRlJlQTRmQXBLWnBKSkpLVW8yV05ycmRZOHcxZ0xuSHlBbFZPc1d2b3dYWkRaJTJGUU9aYThEOXhybW0zJTJGTnIzUFVzd20lMkZwbVFHYW15bDRiSGlXdWhKVFlxc0Z0VExCdzlvZDk0VTFRNkZrZmFPazR0c3p1cVlmd1Y5SlNsbDElMkZvT3Qyc09ndURYZ2VUbTdmJTJGUG1OJTJGd0NDTFVXWjFWaHJ5c2JLQSUyQmp1YTd6Z3R1WiUyRjFGcUlVWFRTUWN2S1ppNDdzaDdYT1kwdEJEWUpoem1zM2FrZlIzYmxWZDEzcHJNdHVJJTJCd3NlJTJGNkwzQWhtN24wJTJGVSUyQmkyemFmemtGT2dxOSUyQmRqMFpGT000azNaRHRyR05Fbmh6dDd2M1diV1BVOGJKcHlhdlZwZHVadWMyZU5XT05iMiUyRjJYdFhPWTJWVTdyQTZobk85UnVKUyUyQnIxaE8xbGd1R0pidVl6MmV4dHZ2M2Z6TFBVJTJGd0NFU1U5UWtra2twU1NTU1NsSkpKSktmJTJGJTJGUjlWV2YwaXdpdTNGZjlMR3Nld1QlMkI2RDdQJTJGQXl4eTBGbXVuSDZ4UERNcGdkJTJGYlpGVCUyRndEb094JTJGJTJCMjBRcDBsQzAyQ3R4cUFMd0R0QjRKOEZOSkJUVm92eCUyQm80anZiTExHbGx0VHVSTXNzcmYlMkZBTkppeiUyQmhaRHFNTyUyRkV5Q1gyZE9jNnQlMkJrdWMxZ210JTJCMyUyRmhhUFRlb1o1czZSMUlackJHRGxrTnZJJTJCalhjWVl5eCUyRjd0V1Y5QiUyRndEdyUyRndEd2x5RDFMcVdIMGpxMk4xTzU1cnhPb2dZMXJ3QzRDOXV1UDZtemR0OVdsMXY2VCUyQmIlMkZBRmRGUyUyRjFNeXElMkYyVlRodXNhJTJCMnRzdDJrNnNQdVk3M0JybSUyRm8zVnYyZnklMkYzRjBTNFRBenElMkJtJTJGV0RxdUtHbmJoV095YTYyRFVVbHJjbXl1bGt0WjZmMmV5MTlXejglMkYyTHMyWiUyQkZZeDFqTDZ5eGdCZSUyRmNJQUkzQ1hmTklxWlgzdXJzcXFyWjZqN1RxSmdOWTJQVXNQUDBkeXBmV0olMkZvOU5PVDJ4cmFySFR4czN0WmtmJTJCeTc3VlI2djliZWpkTnNia2IzWmJxbTJzZlZqZ09PaHJkWkZsanFzZmZYcyUyRm12VjlWJTJGJTJCRFhIZFolMkJ1dlU4ekE2aSUyQmowMlkxemF3YVpMdDJMWTIxdGx0YjdYT2I2ajYlMkZ3RFIxViUyRnpWMzZ2NnJQVllGVSUyQmlDczVQUzdjZDQzTzJXVU9CNzdkMVglMkZUMjdsd3ZWbk55S0s4ZDE1cTZoaWoyMDdvOWRnM0RIZFc5bTl6THY4QVElMkY0V3U3MUslMkZUdHI5YXF6SiUyQnVIVjh0bVIwek5veUx2c1hVOE5yN2NkdGptdE4xSjlLJTJCMnBvZHNiazElMkZvJTJGOEEwWXNuRzZ0ZSUyQm5MWmJkWFhZNnB0dEFETnd1Y3dtaHYyY1didjB0bnIlMkZwS25mcEtiS2Y4QXRzcUQxRHZyam5mVjcwY0tsbGRnemdicWpmN1FIQjNwMnNHMHNiNmx2MCUyRmZaNlRFY1pnNjMweHoydmV6SzZqVmJmaFZ0ZjZiaVElMkJ4bHRtTlk3YTJ6OUpzM1Z1JTJGd2F5dnJIaDElMkJoaGRLdjNYdWJqQmhZOXdEYkh0UHBPZFhrT0g2dDFEZCUyRlJzbCUyRjZDJTJGd0RvbVY3Rmc5V2MlMkZGJTJCcTNSTDZiaWJlbjVXVmpoNGxsamR4YmV4bHRmMDZMYTl2dnAlMkZNJTJGd0FGWiUyRmhFdXFuMHI2bGZYTTlXWXpwdlZvbzZ3eHZjYkJjR2o5THRyMDlMTG9qOWJ4ZiUyQnZVJTJGb2Y1bXo5YXZySmQwJTJCMmpCd0hBWlRyY2QxN2lBN2JWWmEyblkwSCUyRkNYdzl2JTJGQUFkZiUyRldsNXppZFFaOVpjWTNsM29kZHdnMnoxbUhaNnpXZlF2M3QyJTJCbmswJTJGd0NuJTJGd0RSZjh4ZjZEZjFEcXZYR1olMkJlNXR6c2k3R2Q2bG0ya1BzcU5icXFPRzElMkY0Q3V4bnB0JTJGUzclMkY5STlBTGpSMUdoN2Y5NiUyQnVKSnBBMUtaajJXTkRtT0Rtbmh3TWhKYXlTU1NTVSUyRndEJTJGMHZWVm45YWlyRkdZU0dqRWNMWHVPa1YlMkZ6ZDVKJTJGZFpVJTJGd0JYJTJGcmEwRUhNOUQ3SmY5cEU0JTJGcHY5WUhYMmJUNm1uOVJJS2NFOVU2bGdYbkpEdjJsMGpOJTJGUzQ5N1MzOUM1MzBzT3l4biUyQkJjJTJGJTJCaDVQODMlMkYya3lmUyUyRlI1TmxQcnYxNnV3Y3pFeHNQSEZvekxCUldIejZycmlXTTlPdXY2SHM5VDN2c2V1ZTZCOWJ1b1pGNXhCVTg0QkRDJTJCdG9aWVcxUGN6RyUyQjAyR3htNzFHYjJYUDJmb2Q3UDVtdGN0MTY3cSUyRlQ4N0dkZmslMkZic2NXSEk2VjFOclFOR3UzTzJOWjZmcDVGTjlkVGNySDNlcFI2ZjlSS3dSWVh6aEtFdUdZbyUyRnhmU012TTZsWmxGJTJGVmZTb2JVMTFROU1HeXFMZmElMkJyUDlQSnNyOUt6MDluNmJHcSUyRjdkV04xejlWeEMzS2ZaVDAlMkIlMkJQVXlHZzVOSWFQZFU3ZXpaZTdLeFBSJTJGUjVHeXIxc1g5RGI2JTJGd0RndVp4JTJCdjM1MmJlNFdOd2Z0JTJCOXRiMm4yMW16YSUyRjA3WG4yJTJGcDdxbVZlcDZkYlAwdnFmb2xxWkQ3bVk5MWVEbVhoOXBCQVpER2pUOWF3dmIlMkJrcDNXJTJGcDJNZGtmcGF2MWIlMkJYVWIwV3VsVGVQMjNoNURpM0pMM1VZV1RZemx6YktuMXNjNXJON2JhTTNGWjlwdzh4cnZTdnIlMkZRZjBpbTZ1dkg2dlk3RzZoZlMybXgxV0ZZYXE3Ym5rJTJCbzJyMHJLUFRhN2J1c3R4WDIwJTJCeiUyQmxmNFJXJTJGcVBYZU00MDNzJTJGUTlMcGRiUTR2OTdXbDREY1cxbnVkNlBxZnJIMmU5bnN6TWF2TnglMkZzOSUyRjJoQTZpNXI3N0haTEgyNFRuMVc0JTJCVXdqMlB2YTNKZGo1YmZ6YUhiOG43RmslMkY0UDlZeFAwdFg4d3VscWFXZmIxQ3paNkdhTTMwNjIyV0REJTJGU1YxbXAzc2ZZNnRqV09zWTF0Zjg3NzZhJTJGVFE3czI3cUZOVklycXdBZlVzYlpSWHQ5UzBOOUt5MXRYODMlMkJncmUlMkYxc2VqJTJGQUUxbHpLbHRkRHRiaTlaSnNxcWJUYUJYZFMwVGJXNjhQeWNVeE5qOHFySWJSJTJGcFBVJTJGU2I2JTJGVHl2NlZXZjBxdk9yem1zWWFzbkd6SG1rN2d4MVphNksyWFI3c2QlMkI1djZLNzlKWGkzYlBVJTJGVjhpNzFSUlU1JTJGV2FMTXY2a1lqN1NHWDlMNmclMkJxSyUyRm9zcnltZXV4MWNmNEIxN2ZZc3JwdVBtTnhmdHo2M1Bjd2w5RFdEUTJzSXFaa05KJTJGTlplNmx1UjZmJTJGQUFYJTJGQUFTMWYycFhYMHZxJTJCSmxuN0xma1ZWdGEzWkFmbDQ5MjlteW4lMkZBNzZyTHE4NnIlMkJibyUyRjRxeWhWcnVvWmZTZWs0bGRtTTEyUGUyMjdEOVhRQnR2cHR1MyUyQjdkNlZyNjZYZjJQVSUyRndpU25zdXFuRHlMTWZGdE1aT1JqJTJCclhTUGVIRnNlbzJsN2czMUxhJTJGViUyQmglMkYyb3ElMkZ3ZnFmcEZ6blZjZDl1RFppdmF4ekRaWGExenp0WmFYQjFMVyUyQnYlMkZnYiUyRlpWWGk1dHY4MyUyRlJzajlBc0xxZlh2MmowJTJGcFhxUEZlZGdOdXJmYTEwRjN1cXN4OGx2OEFvM09idnJmJTJGQU1UNm4lMkJGUXF1cTU5JTJGVVJlYzF6YjdDSFhNYzhodG13N240N3Y4QnR1Y1BVYjZ2NlA5TGQ2OWlOb1M5SDZWazBaemNwajN0cXFlVzFBQXR1YyUyRjhBbTdNZXlodjZXdlolMkZOWlglMkZBSUV1Z3p1azE0ZUxpTjY5ZmJpNDl1NndnQmp5V05iNmRQNklPYTUyVjZ2dDI0N1AwZEQlMkZBRlAwYWpqZGM2a0JlZWtZUWQxRElzMnRzWlZaYmRWWHQ5dFlxc0c5JTJCMyUyRlRQWiUyQmwlMkZ3QkNzYWpwWFYlMkJ0WDJad28lMkZhbDdXdXZ2OVMwTWVhMiUyRlQyJTJCdlo3bTFlMWo2R1Y3NlBaJTJGcEswTkU3YXZwSDFaNjluZFU2VGk0bVA2bVZaa3RCZGJrUDN1cWJXVFJrakt1WUdiOXQxZTZ2Mjc3NnJQOUl1eXc4VnVKanRvYVM4dGt1ZWVYT2NkejMlMkYybkx5YjZ2ZFp2NkRqREt3bVZ0M2x6YnNaejNWc1pjSGx1VGdYNDk5aGZSWXh1ekp3biUyRnpuc3lLckxMdjhIMnZUJTJGcjloT0RLJTJCc00lMkZadVNXa3ZydEZqQzF3TG12ciUyRldLcVclMkZtJTJCemJaJTJCa1JSNHZWcEtuMDNxJTJGVGVxNDdNbnAlMkJReSUyQnQ3V3ZHMCUyQjRCdzNOOVNzJTJGcEslMkYlMkJ1TlZ4QlQlMkZBUCUyRlQ5VlRPYTE3U3h3RG11QkRtblVFSHNVNlNTbnhmNng5Q3pQcXQxRUNpeDdHTWViZW41UTBjYW5leXlsenZvdXRvM01ydVolMkZoYXYwbnAlMkZwRlVyeWFNakZ2cnpwczZka1BiWm1Vc0h2eDd6RmJlcjRmN3JiTFA2V3olMkZBRWxuJTJCaXZZdlklMkJ1OUw2ZjFYcGwySDFHRzBPRzcxU1EwMXVIMGIyUGQ5QjdQJTJGVWIlMkZ3Qkd2SDh2cEYzVDclMkZRcGNINU5JZWE3YXo2bGVYU2QyJTJCekhqZFc3MHFIYk1uRSUyRndsU1pyRTJOdXpmaktITVklMkJHZnB6UjJuJTJGTDlIOTV3TSUyRkJ5T2s1aHhzZ2l5dXdiNnJtNjEzVkg2TjFYJTJGQUtNclcxMGpxYnJtSER5SGw4TWhqWTNHNnNIZDZQTzMxOGR2NmVpejA3Zlc5UDB2JTJCT0hpUHhjNm45ajU1MllkaDNZbVZ5N0Z0UDUlMkJ2dmZpdSUyRnclMkYlMkZCJTJGcGY1emVoWXYxYTZwVms1V0xuaCUyQkpaaE1MNnJtaVd2c0JZNnQxRm4wbjFOWTc3VHZwJTJGU2Y4V25panFOV25PRXNjakdRNFpCN09pZzBmVjdMZjAxcnI4cnFSMnRlejNYUGJCeDY3WHNZemF5eGpiTWw5bTM4JTJGOUolMkJsJTJGUyUyQnB6cnZVeE1XcXZxTlZ1SmtzeDM0MDJ6VzVvb3NiZFNjaWc3MjVPSGQ5cVk2diUyQmMyWk9MVDZObjg4eTNlNlgxdXlrOU5leHpuWWQlMkJQZGkyTWMxbFR4bDR6dHpuV3UzYktmV1paWGJzOVQwNmYweXBkWTZKMUhyJTJGVkg5V3J0cHN4Nm1NcUZEUyUyRjFXaXNGMzBYTmE1JTJCNTc3YmYwZXl6JTJGUlYlMkJxbkh3VzFSb3RERjZ4YXk0OVR2aWtzOU9ITkJBYzlnMnNmYzFtN1p1MiUyRm9HJTJGUXh2M1BTVDlMdzJkVGJsTSUyQjFXMXNkRGl4b00ydnUzZjA5MzZPdDNwT1pzdXJwJTJGUTVIJTJCaiUyRndhSmo0R1hmMDUyWmplcFJqYm1Pcnl3TnpOakh1bGg5TWVnNXpOJTJCMWxybiUyRjRSOWZwJTJGcEZZeGNIRDZleTZuSXRkU0dBT3RkbEZ3aGxoJTJGUnVIcE4zUHBidjhBNXhucWVtZ0ZPWjElMkZEeU1XNzdUMURJT1F5NHZyYTkxYnFDMDBlbiUyQmlZeCUyRjA2TnJxbmV2JTJGQUlmJTJGQUVqMVd4YUcyc3hLT285TXU2aUszMlVZZU9MSE1MM3ZMck5ycm11MyUyQmx2JTJGQVBSaTFjdnBsMVBVcVczTmZoNVZKMzQlMkJObU85WEV1ckh1JTJGVjd0MWpHTXNZZjBub1A5biUyRkFBTnF2OVE2Vzg0dzYzMGhuMmN1RmQxamNZR3lzalM2cXpMeG1pdTNGeWFkdjg5Nk5YJTJCbCUyQjJlcWhTU0JRMXUlMkZ3ZWQ2ejlYJTJCcnRGSkgxZFpqMWFnRU5zcVp1SUI5RVBzdmJrVzdXajZlUyUyRjZmcSUyQmolMkJqV09jYk53OGhucWROeHEzdGl6WllYT2E0VHk3ZmtXYm1OZCUyRk9iZm9mNFJkcFQxZnFIVXMxcmMlMkZMZmt0eVJVMnZHYTRiU0hOZVB0RkwzZWw2Vm1MbFZlalo3ZjBtJTJGMWNqJTJCWiUyQjBXYnZTZnFuMCUyRnExZVRqZFJJZGxWc3BzcWN4d0JxYzhQYmZXJTJCclgzNzYlMkZUdGYlMkZBS0gwYmNTNnYyV0pYcXVsajRZQ1hFRFpxdXJ4bjFkeFhkUm9zdXc3OGhuWGNSNWRTV3UyMk9yWTJicXNkbjAzWkZUdDkzMk96MlpXTDZsVkxQV29YUzE5SHp1cDlQcSUyQnNmVE1ZdHk4a243WlJYREN5NWhkVmIxREVyZSUyRjlOVTc5THZ4SGJMY2xqN0tmNXJJc3BYRTVtUG05SjZxJTJGTHFhODJZcm12ZlZKSHFVc2QlMkJneXFMYXRsbjBhJTJGMDNwUDhBV3hMbWVyViUyQjVqJTJCeiUyRlU3cXZSJTJCcDlDb3Q2UU5sTEpiWlE1eGRaWGI5TzFsNzNTOTlqbnUzJTJCcTclMkJlJTJGbkVtTjU3cXYxWDZiOWMlMkZxOTlveFdOeCUyQnVZeGN5eDdnOXJqYzJQWHhNNXQzNng2ZGptdDlIMXYwMkwlMkJpOUwlMkZDVldjejlWUHI1MW5wUFdYOUglMkJzeHV5OGJJdEZOb3lEdnRvdDl0SWNOJTJGMDZIZTMxNlAlMkZBRUtvJTJGd0FKOXA5aGJYVzE3bnRhQTk4YjNBUVhRSWJ1UDV5NDMlMkZHQjlRMmRmcCUyRmFYVFd0WjFpbG9FR0dqSVkzJTJGQVBlNyUyQmF5RyUyRjhBYWZKJTJGNnpiJTJCaSUyRlNVSlQyVEs2Nnh0cmFHQUFBQm9BRUFiVzhmeVZKZWNmVWJxUDhBakhQVjMxZFh4TWpKNmMlMkZheTI3TGFNZDFKYU5nc29EeFg5bzlyZjB6YVcyJTJCciUyRlBlcCUyRnBQUjBsUCUyRjlUMVZKSkpKU0ROTCUyRnNyOWdlWEdBQlcxcm5ha0Q2RjM2UCUyQnN1QXd1bVYlMkZXWE5yeEh2Y3ltcWgyUzdJcUxuUmElMkI3SmZqMlVQY0d0cWR2eWZWc3BaN0slMkZRJTJCeTElMkZvYVY2RmZqMDVGWnF2WUxLeVFTMTNFZzdtJTJGOUpLaW12SHByb3JFVjFOREdEd0RSdGFra0VnMk5DTm54RHFkR2IwTHJ1M3FGREhYNDFyTFRXR3hWZXlSNzYyNnRkVm1OYSUyRjFQM0xQV3I5aTJjbXpycFk1dGRCNmd6cEw3S3E3V0dYUHFxZjZEOEhJYzFnWjl1cG8lMkY3VCUyRnptVlglMkZBRFhxcjBick9GMCUyQjQxMzViV1ZGZ2MwNWtEMVdNUDA2YXJpMTdxMjVQODFaJTJCJTJGWCUyQmklMkJuYXVUeXNmcW5RZW9NNmgwNmw5MWVXMkg0andmMXVoZ2M3MExxM0RkVjFYR3htNzhkNyUyRndDZm8lMkZRWGZwSzdHSVJGWDRzMmZON3ZBZUdwUmp3azkzSXlPajVWRG5ONlU1JTJGVU1hJTJGZmxZbExHdUxtJTJCcXhucGZhZHJHMXRkazMwMlVmYXYlMkJzMmVuJTJGTnJRJTJCcmQ5JTJCTmxOZGZTJTJGRHVEWE15OGU3UjFibWpmSiUyRmtOaGw5TnY1OUt0T2VMYk1ETzZGa3RKdGUlMkIlMkZDc3RMaCUyQmhjYXhtNG1ZNW9jNXRMTXIwOFhLM3N0OUg3VFJkJTJGU3FQV1cxMWZBJTJGYSUyQk9PcGRPYzZqcWVNTmxsWWpjZHZ1ZGpXdDl6ZlZyM2I4ZCUyRiUyRm9tJTJGMUUlMkIyRjVqcGYxdTZEajlSeUxLY3F1M3BlYWYxckYxYUdoJTJCaHltMFhNcjkxVGZaa3NyJTJGbmNiJTJGU1dZOWJGVHdmdGZVT3BkUXdSWnZ4c0RMT0xoMnVCZXhyTEgyMVl6TExBSHY5SzNaWCUyRndBSCUyRk9MVXclMkJuZlUlMkY2eFZEQjZsZzQlMkZUdXRFRnJMYUclMkJnTFhEJTJGQzQyelkyeCUyRiUyQmx3N2YwMWY4dXI5T24lMkJyb3lQcWxsWmZUaGhNc3FCWmJsV2h4RmphaEZMTFdFJTJCMjdIWnYzc2JzcjlIOU42MyUyRkJqVzFMOUo5UERhJTJGNnVkY3glMkZVNlRhN2JTSDZ1eExUN1cwT2MwJTJGbzZIVDZtRmwxZnpYJTJCblY5bjFSNnYwN2JiaFp2MnphNHcxNDlLMFZrNmVua01lV1B1MmZ6bjh4VmIlMkZ3ZjBGMUdWaDRtZFNXM01EMnZiQWZBM0FIOXh5b1ltUlowbyUyRlk4OTQlMkJ6dEJOR1M3UWJSJTJCYThuNk96JTJGd0glMkZ0dEx5UmJ5UFVjWE1xenpuWTJOZmg5VHJiWmJra1Z5eHpRQnZ6bSUyQm0wNHZyN2YwZCUyRm8yZnJYJTJCRCUyRlRWMnJjJTJCcm1IMGJxSFQ4ZmNXJTJGYjJOZWQxRnJtV3NhWE9aTGZSTEgwMVclMkJwdTlMJTJCYVhVaUNKSEJXR2VnTTZkMUlkVTZXemJKaSUyRkZiQWFXdVB2ZFYlMkZWJTJGblBUU3RONlU0JTJGV2ZxUGs1amhSajJCb3JEck1YTE9qcW5nZTJtMXJOcm5WM2UxbG5wZjhiJTJGTzFVcm0lMkZxTGxaSDFhJTJCc2VUMDNJd0xhN3M5N0s4bkZyWSUyQng5ZnAlMkJwNk9manVwWjZWdlQzJTJCclkzSSUyRjBQNk95bjlGJTJCalhyS1NDRkpKSkpLVWtra2twJTJGJTJGOVgxVkpKSkpTa2tra2xLUU0zRHB6Y2QyUGJ1QWRCYTloTFhzY05XV1ZQYjlDeGprZEpKVHhIVmZxNE9sNWJjJTJCcTU1ZGx2TExxMkRheDFscHJZN0lGYlA1aTYzYjc3S2Y5SCUyQmslMkZRcnBQcSUyRmNMTUFWbGdydXBjV1hNNGR1Qmo5STB5N2YlMkYxZjAwdnJCMGhuVnVuUG8lMkJqa01tekZ0R2pxN1FDMXRsYjlOanZkJTJGcXhTNmRXTWowdXBIOUZmYlhzeXF3SWFiR3d4MzAlMkZmJTJCaWZXOW45UkhvcHd2ckJoNGVGMVYlMkJYa1UlMkZxbVpRUUxTQjZkZVl4d3V4N0hBZnBHdnM5TCUyRkIlMkY4SjZpdldWWjJkajR2VjhGZ2Zia1klMkZvNVdPOGhvc3JkcjMlMkJpNnQ3bnJlZld4OGIyaDIwaHpaRXdSOUZ3JTJGbElPTGc0JTJCSTY1Mk9DeHQ3dlVmV0Q3UTQlMkZTY3h2NW0lMkY4OUsxSXVqWWo4UHBXTGpXRGElMkJ1c0I3U1pJY2ZjNXU2WGZuRlczMXNlSWUwT0V6QkU2JTJGTlNTUVVwSkpKSlNra2trbEtTU1NTVXBKSkpKVCUyRkFQJTJGVzlWU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyRiUyRlpBRGhDU1UwRUlRQUFBQUFBVlFBQUFBRUJBQUFBRHdCQkFHUUFid0JpQUdVQUlBQlFBR2dBYndCMEFHOEFjd0JvQUc4QWNBQUFBQk1BUVFCa0FHOEFZZ0JsQUNBQVVBQm9BRzhBZEFCdkFITUFhQUJ2QUhBQUlBQkRBRk1BTWdBQUFBRUFPRUpKVFFRR0FBQUFBQUFIQUFJQUFBQUJBUUQlMkY0VGtqYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3THdBOFAzaHdZV05yWlhRZ1ltVm5hVzQ5SXUlMkI3dnlJZ2FXUTlJbGMxVFRCTmNFTmxhR2xJZW5KbFUzcE9WR042YTJNNVpDSSUyRlBnbzhlRHA0YlhCdFpYUmhJSGh0Ykc1ek9uZzlJbUZrYjJKbE9tNXpPbTFsZEdFdklpQjRPbmh0Y0hSclBTSXpMakV1TVMweE1USWlQZ29nSUNBOGNtUm1PbEpFUmlCNGJXeHVjenB5WkdZOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6RTVPVGt2TURJdk1qSXRjbVJtTFhONWJuUmhlQzF1Y3lNaVBnb2dJQ0FnSUNBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cDRZWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUklMkJDaUFnSUNBZ0lDQWdJRHg0WVhCTlRUcEViMk4xYldWdWRFbEVQblYxYVdRNlJUY3hPVFZGTlRZMU56TXpNVEZFUkRsRk56SkdRMEUyUWprd1FVWkJSalU4TDNoaGNFMU5Pa1J2WTNWdFpXNTBTVVElMkJDaUFnSUNBZ0lDQWdJRHg0WVhCTlRUcEpibk4wWVc1alpVbEVQblYxYVdRNlJUY3hPVFZGTlRjMU56TXpNVEZFUkRsRk56SkdRMEUyUWprd1FVWkJSalU4TDNoaGNFMU5Pa2x1YzNSaGJtTmxTVVElMkJDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0FnSUNBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cDRZWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThlR0Z3T2tOeVpXRjBaVVJoZEdVJTJCTWpBd09DMHdOeTB4T1ZReE5EbzFOem8wTVMwd05Ub3dNRHd2ZUdGd09rTnlaV0YwWlVSaGRHVSUyQkNpQWdJQ0FnSUNBZ0lEeDRZWEE2VFc5a2FXWjVSR0YwWlQ0eU1EQTRMVEEzTFRFNVZERTBPalU0T2pBMUxUQTFPakF3UEM5NFlYQTZUVzlrYVdaNVJHRjBaVDRLSUNBZ0lDQWdJQ0FnUEhoaGNEcE5aWFJoWkdGMFlVUmhkR1UlMkJNakF3T0Mwd055MHhPVlF4TkRvMU9Eb3dOUzB3TlRvd01Ed3ZlR0Z3T2sxbGRHRmtZWFJoUkdGMFpUNEtJQ0FnSUNBZ0lDQWdQSGhoY0RwRGNtVmhkRzl5Vkc5dmJENUJaRzlpWlNCUWFHOTBiM05vYjNBZ1ExTXlJRTFoWTJsdWRHOXphRHd2ZUdGd09rTnlaV0YwYjNKVWIyOXNQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZaR005SW1oMGRIQTZMeTl3ZFhKc0xtOXlaeTlrWXk5bGJHVnRaVzUwY3k4eExqRXZJajRLSUNBZ0lDQWdJQ0FnUEdSak9tWnZjbTFoZEQ1cGJXRm5aUzlxY0dWblBDOWtZenBtYjNKdFlYUSUyQkNpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwd2FHOTBiM05vYjNBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZjR2h2ZEc5emFHOXdMekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThjR2h2ZEc5emFHOXdPa052Ykc5eVRXOWtaVDR6UEM5d2FHOTBiM05vYjNBNlEyOXNiM0pOYjJSbFBnb2dJQ0FnSUNBZ0lDQThjR2h2ZEc5emFHOXdPa2hwYzNSdmNua3ZQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZkR2xtWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTBhV1ptTHpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFBjbWxsYm5SaGRHbHZiajR4UEM5MGFXWm1Pazl5YVdWdWRHRjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBZVW1WemIyeDFkR2x2Ymo0eE1EQXdNREF3THpFd01EQXdQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TURBd01EQXdMekV3TURBd1BDOTBhV1ptT2xsU1pYTnZiSFYwYVc5dVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwU1pYTnZiSFYwYVc5dVZXNXBkRDR5UEM5MGFXWm1PbEpsYzI5c2RYUnBiMjVWYm1sMFBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwT1lYUnBkbVZFYVdkbGMzUSUyQk1qVTJMREkxTnl3eU5UZ3NNalU1TERJMk1pd3lOelFzTWpjM0xESTROQ3cxTXpBc05UTXhMREk0TWl3eU9ETXNNamsyTERNd01Td3pNVGdzTXpFNUxEVXlPU3cxTXpJc016QTJMREkzTUN3eU56RXNNamN5TERNd05Td3pNVFVzTXpNME16STdRekExUVRFNU1EUkdSakF3UVVKRVF6QTFNVUpFUmtGR01ESXdORVZCTlRFOEwzUnBabVk2VG1GMGFYWmxSR2xuWlhOMFBnb2dJQ0FnSUNBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNlpYaHBaajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5bGVHbG1MekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThaWGhwWmpwUWFYaGxiRmhFYVcxbGJuTnBiMjQlMkJORFV3UEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGpNeU5Ud3ZaWGhwWmpwUWFYaGxiRmxFYVcxbGJuTnBiMjQlMkJDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVSUyQkxURThMMlY0YVdZNlEyOXNiM0pUY0dGalpUNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlRtRjBhWFpsUkdsblpYTjBQak0yT0RZMExEUXdPVFl3TERRd09UWXhMRE0zTVRJeExETTNNVEl5TERRd09UWXlMRFF3T1RZekxETTNOVEV3TERRd09UWTBMRE0yT0RZM0xETTJPRFk0TERNek5ETTBMRE16TkRNM0xETTBPRFV3TERNME9EVXlMRE0wT0RVMUxETTBPRFUyTERNM016YzNMRE0zTXpjNExETTNNemM1TERNM016Z3dMRE0zTXpneExETTNNemd5TERNM016Z3pMRE0zTXpnMExETTNNemcxTERNM016ZzJMRE0zTXprMkxEUXhORGd6TERReE5EZzBMRFF4TkRnMkxEUXhORGczTERReE5EZzRMRFF4TkRreUxEUXhORGt6TERReE5EazFMRFF4TnpJNExEUXhOekk1TERReE56TXdMRFF4T1RnMUxEUXhPVGcyTERReE9UZzNMRFF4T1RnNExEUXhPVGc1TERReE9Ua3dMRFF4T1RreExEUXhPVGt5TERReE9Ua3pMRFF4T1RrMExEUXhPVGsxTERReE9UazJMRFF5TURFMkxEQXNNaXcwTERVc05pdzNMRGdzT1N3eE1Dd3hNU3d4TWl3eE15d3hOQ3d4TlN3eE5pd3hOeXd4T0N3eU1Dd3lNaXd5TXl3eU5Dd3lOU3d5Tml3eU55d3lPQ3d6TUR0RU5EWXpOME5DT1VRME1VRXhNRUpCTjBWR05VVkNRMFJDTmpNeE9ETXlPVHd2WlhocFpqcE9ZWFJwZG1WRWFXZGxjM1ElMkJDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVklMkJDand2ZURwNGJYQnRaWFJoUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW84UDNod1lXTnJaWFFnWlc1a1BTSjNJajglMkIlMkYlMkI0QURrRmtiMkpsQUdTQUFBQUFBZiUyRmJBSVFBQ0FZR0JnWUdDQVlHQ0F3SUJ3Z01EZ29JQ0FvT0VBME5EZzBORUJFTURBd01EQXdSREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFSkNBZ0pDZ2tMQ1FrTERnc05DdzRSRGc0T0RoRVJEQXdNREF3UkVRd01EQXdNREJFTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TSUyRjhBQUVRZ0JSUUhDQXdFaUFBSVJBUU1SQWYlMkZkQUFRQUhmJTJGRUFhSUFBQUFIQVFFQkFRRUFBQUFBQUFBQUFBUUZBd0lHQVFBSENBa0tDd0VBQWdJREFRRUJBUUVBQUFBQUFBQUFBUUFDQXdRRkJnY0lDUW9MRUFBQ0FRTURBZ1FDQmdjREJBSUdBbk1CQWdNUkJBQUZJUkl4UVZFR0UyRWljWUVVTXBHaEJ4V3hRaVBCVXRIaE14Wmk4Q1J5Z3ZFbFF6UlRrcUt5WTNQQ05VUW5rNk96TmhkVVpIVEQwdUlJSm9NSkNoZ1poSlJGUnFTMFZ0TlZLQnJ5NCUyRlBFMU9UMFpYV0ZsYVcxeGRYbDlXWjJocGFtdHNiVzV2WTNSMWRuZDRlWHA3ZkgxJTJCZjNPRWhZYUhpSW1LaTR5TmpvJTJCQ2s1U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dm9SQUFJQ0FRSURCUVVFQlFZRUNBTURiUUVBQWhFREJDRVNNVUVGVVJOaElnWnhnWkV5b2JId0ZNSFI0U05DRlZKaWN2RXpKRFJEZ2hhU1V5V2lZN0xDQjNQU05lSkVneGRVa3dnSkNoZ1pKalpGR2lka2RGVTM4cU96d3lncDAlMkJQemhKU2t0TVRVNVBSbGRZV1ZwYlhGMWVYMVJsWm1kb2FXcHJiRzF1YjJSMWRuZDRlWHA3ZkgxJTJCZjNPRWhZYUhpSW1LaTR5TmpvJTJCRGxKV1dsNWlabXB1Y25aNmZrcU9rcGFhbnFLbXFxNnl0cnElMkJ2JTJGYUFBd0RBUUFDRVFNUkFEOEE3JTJGbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXJsSEkydXRYbjZXbHRuRkVTYjBSRlNwNDFXakQ1cTNMQ0Jhc2x6WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5RHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJFMnJqMEx1enZGN1B4ZnRVZjhBWFBMRG5DM1hJMGV3ZHBPa1RLNFAwOFQlMkZBTUsyRWMxVExOZ2F4bUU5cEZJRHklMkJFQW4zR3h3VGdWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWJTJGJTJGMGUlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhZVWVacGZSMGE0a3BVQXgxOWg2aTc0YjRYNjVDYmpSNzZGVjVGb0pLS2U1QzFHSVZMZER1R2h1WHMySUtPWDRnZnN2R2R4JTJGc2tLdGtpeUQ2YmN0SEhiWGdQSW1PQzRxT3BYajZFMWZmNE1tNE5keGtwYzc3MEJ2Tm16WkZMczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOUx2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZva0tDVDBHJTJGM1pnYWlvTlFlbUFOWnVoYVdMeUUwTGxZMSUyQmJHbjZzV3NwQThRQSUyRlolMkZVY1ZSV2JObXhWMmJObXhWMmJObXhWMk5aUXdLbm9kajlPT3pZcXdEVDRpaVBac2ElMkZWTG01c2o3SSUyRjc2TCUyQk9UWFRwalBaUVN0OXBrQWI1cjhKeUtYcWZVdk1PcElRT0Z4RkRmb1A4cUZ2VGwlMkY0UTVJTkRrckZQQWY4QWRVaEklMkZ3QlYlMkZpSDhjbkxlQVBjeEhNcHJtelpzZ3lkbXpac1ZkbXpac1ZkbXpac1ZkbXpZeVdSSW8ya2tZS2lpck1kZ0FNVlg1c2pUZWFHbDFDenNiU0FPTHVYMHc3azE0S0N6eUFEJTJCVVpKQmlyZWJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWJTJGOVB2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZvNENYVUZhOWUwQ2JKUldrciUyQjBSV2xNSFpFSjVXdFBNdHpFNSUyQkdZSktueUswJTJGNGt1RUMxWmVNMklXMG9rakZUOFM3SCUyQnVMNEZZejUybU1XbjJ0RFRsY3BYNkZiREhSNWVjQ0glMkJaZXZ5d2wlMkZNTThkSnRuN0xkSiUyQkt2Z3J5OWNjck9KNjlLVnc5RTlHUzVzMmJBaDJiTm14VjJiTm14VjJiTm14VmkzbWlGVTFMU2J4dnNTdEpZekglMkZKblNpJTJGOEFEWXBvRXpMY3hxMVQ2OEZHciUyRnZ5RThHcmdqemRDMG1oWEVzWSUyRmUycFM1aSUyRjFvbURmOFJ3dHRKUkhkcmNEYU5iaFpWSTZlbmRJRyUyRjRtY25IZUpDRHpETDgyYk5rRXV6WnMyS3V6WnMyS3V6WnMyS3Vya1o4NDNaaHM0YlZUUXp2VnFmeXJ2ZzN6SE5QYjJVTXNMdEdCUEdKU3BJcWpFcVJVYjljaCUyQnZTU3ZwMEpsY3ZKQ0x5TXV4SmI0Sk52aSUyRjFTdUVCVnZrYVg5TCUyQlpibThTdjFmVGJmMFk2JTJGNzhsUHhIJTJGZ0Z6cGVSdnlQYldjWGx5eXViV0JJWHVveEpPVUc3dUtqazUlMkZhT1NTb3hQTlhaczJiQXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkYlMkZVNyUyRm16WnNWUTJvc3lXTTdvM0ZsUWtNT3hHUHRaaFBCSEtDRHlVRTA4ZSUyQk0xQmVkamNyNHhQVCUyRmdUaFY1Y3ZCSmJwR2VyZ0VmTURjWWEyUGtxZlpzMmJBcnMyYk5pcnMyYk5pcnMyYk5pcnNoZm5SR3RiN1Q5VFg3TGNvSkQycUR6U3Yzdmswd2w4MVdEYWpvZHpER0t6Umoxb1IzNVIlMkZGVDZSdGhITlhhVmNyS3NVdGZ0RGkzMDRkWno3eXJxUHJRQ0luY2RNbnNFbnFSSyUyRmNqZjU0eVZqUDVnd3RKNWNrY0QlMkI1bWlrJTJCaXZIJTJGQUkzd0Q1Um5FdHB3cldndzk4M1JHYnkxcWlxS2xZR2tBJTJGNHglMkZ2UCUyQk5jaG5rZTVCSVVHb1BRJTJGUEVKSEo2WEczSkZieEFPUHhPQTFpWDdzVXdJZG16WnNWZG16WnNWZG16WnNWVWJxQmJxMm10bSUyQnpNalJuNU1LWkRMUDRyQzJVVnE5cVlqN1NXc2hXbiUyQnR4T1RuSVZHNHR0V3ZkTmFpaUs3RnhHRHRXRzZUaSUyRndEd011U2h6UkxreSUyQjFsRTl2Rk1QOEFkaUszM2dZc2NLdEJtRFdodHElMkZIYk95TXA2OFNlU0g1VU9HcHlKNXBZZGUzbW9XUG1XNUt6SDBwSW8yV050MEEzV3YwdHMyRDczeko2Rmd6eHFxWHBLcEhHOWVETXg3RVlYZWQ0NVZlQzRnUENkWXlxdWEwSTVxNVZnT3YyY0FXOHNXbzJRTXFod3dveUhjVnlRRmhWT0x6dnJOcmRmNmZGSExGWDRrVmVCSCUyQnIxJTJGNGJKbHAlMkJ0MkdxV3JYRm5JQ3lLV2VKdG5VZ1YzWE9QNjdxRmphRkxIVXJwcmVjeSUyQmxaYWp4UERtTjFqbjhEdjhBYSUyQnklMkJJYVhyY2xyZHRaMzROcmZSMVVTb2ZnZW8ySzA2YyUyRjhBZ2NCQ1hyJTJGbHZYUnJkbnprNHJjb1NKRlhZZk1ibkR6T1YlMkJUcjgyZXFBT1FJcGFCcTdBVjJyJTJCT2RUcmlSU0VwOHo4Um9OOUk1QVdKUFY1SFlEMHlIciUyQkdRZzNOdHExbGNMYXp4M0NpWnZpaVlPS3pRbzlLamI3WXpvV3FSZXZwdDVBT3NrRWlqNWxDT21jNjAlMkJXQ0swajlPTllvNUlZcCUyQkVhaFFXQmVOalJhZkVjTVZUdlRiJTJCODBmeUhaM0Z1Z0U5dlNPUkpCVXFQVlpXJTJCRUh3M3lWYVhlQyUyRnNvYnVsR2tYNDFIUU1ObUglMkZCWnpDJTJCMWlUVGJhZFpVa2p0Smp6a1FxU0txTm01ZnNkTVBmeXIxJTJGUmRUOHZyYTJFNU41QzhrbDNiU01US3BrY3R6JTJCTDdTUDlwZU9BN2ZGa0lrZ2tDd09ma3o3TmxBMXk4REYyYk5teFYyYkVKTHkxaW5qdHBKVldlYXZwUkVqazNIYzhWNjR2aXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5WHYlMkJiTm14VnBsRHFVYmNNS0g1SElQb2tqV3NzdHF4JTJCSzJsWlBmNFdwazV5RjZuRjlSOHhzd0hHTzhRU2olMkZBRmg4RCUyRnFya29jNlZtU01IVU9PakFFZlRqc0FhWk1YaE1SUHhSbllmNUo2WVB5SlYyYk5teFYyYk5teFZRdXpPdHU3MjlQVlVjbEJGYTA3VTk4RGFmcXNGNmk5RWtJNmVQeXd3eUY2dkcyaTZvSlJVV2w2eFpDUDJKT3JyJTJGc3Z0TGhHNnMweWlLNFg2WmZpNFFJN1ZiOWx2NWglMkZYREhyZ1Y1YzhCMEx6TGMyUSUyQkdGMjlXRHc0U2ZGJTJGd3AlMkJIT2c2Wk1IaTRqMllmVGtaJTJGTUd3cEZhYXpHRHl0bTlHWWolMkZBSDI1JTJCRW4lMkZBRlglMkZBT0o0Tjh1WHdsaWljbnBzMzA1TG1GWkRld3JjMmR4YnQwbGllTnZreWxjNDUlMkJYMTBVQ1F6SGpMQVRFNFAlMkJRZU5jNkw1NWU1aTBKNTdXVm9uaWtSbVpEU3E3amYyeUIyT3AlMkZWWW9yMiUyRndCTmprdHBBR2p2N1p2VSUyQklub3k4VmFvJTJGYTQ0eENROWFzMjVSVkJxS25mQkdSYnk5ckJFc2xqY0lZMGFRJTJCZzVGQ0NRRDZiajlsc2xHQWlrTjVzMmJBcnMyYkd5T0kwYVJ1aUFzZm9GY1ZTJTJCJTJGMXEyc0psdHlyU3l0dXlwJTJCeURzQzN6d3hCcUFmSGZJJTJGb2RtdDJ6NnBjam5KSzVkQWV4UFQlMkZnUmtoeFYyYzc4Mm1TeTgyV1VnTklkVWhOczRQVG1sWFElMkZ3REJET2laQXZ6TGI2bkhwT3JsRmtqczdsV2RHOXl2eFZHJTJGd2l1R0ozVXAzWVRKRnI3b3AlMkJDOHQxbGpIanhvZHY4QVl0a2l5SGJ4eDZYZkt4JTJGY1hCaWxKMyUyQkFzVlVWOEZSbHlZQTRaODBEa2tQbXEzRXRsSEpTcFIlMkJKUGdIQkg2NlpCdEl1ZnF0OU5wOHBBTEhuRXBPNXAxb002WHEwUDFqVHJpUG9lUElmTmR4bkx0WnRyR1psdUJjRzN2RiUyQkZKWXVKZng0MElJeEhKS3p6YjVldDladFpZcDFMd3lnY2dQdEt5JTJGWmtUJTJGS1d1UktLQ09DNnROSDFDYmxjV2lJTERVV0hINndnNnd5RGVqeDlGdzRzZk9NakVCWTViaUgxSGdMeThWWXVsT2ZKViUyQnkzOHE0bmRIOUxsTDIxOUs0aWlsSHJXekx4bGhJNlNnRTElMkYyU25GS28wQ3p4eTI4ek1xY1N6c3BJWUJQajJJJTJGMWNkJTJGeXRuVlpkTlEyRDFJJTJCRVNNb1B3JTJGek1mdGRNRzIwVFNReXlibG1qZW56b2M0VFk2bGQ2ZGR5S3dNVXNiRlpvSHFOd2QxS25HWFJYczluNSUyRnY3bGc5OEdsV2hNandrMUElMkZtNGslMkZGN2pEU3dTUFVMVFRKSTNQR0JwaEdOd0c0T0hWVyUyQmduT05YJTJCc1dGcERGUGFTU0pjVEVTRzNUY1JsZjJ1UkslMkZhenElMkJrUjNhZVQ3ZSUyQmpuWDZ5b1c4aWJodCUyQjlpOVRnJTJCJTJGUTk4UVZaSHFzdHV0b3d1U1BTZFNwVjkxSVBWV3ppZjFpOTh0JTJCWjdtNDBGamJTV1VyTkNxRW1rZXg0RUg3YWNUOWx2MmM2bG9ubWJUdk1VVFdkd2dpdW1Xa3RyTFFoZ2U2SDlvZjZ1Ukx6ZDVadXJEVlA4UTJLZXRZRlVXN2pYZVNLaSUyQm0waEg3VVpIN1g3T0NZNGcyWU0wc01yanZleEI1U0hjWHNua1B6M1klMkJjZFBxS1E2bEFCOWJ0YSUyRjhsSTY5WTIlMkY0WEplRFhQSmx2UGU2SnFNZXE2Tk1ZTHVFODQyVG82bnRUb3l1djJrJTJGYXowSjVFOCUyQjJIbkd5STJ0OVZnQSUyQnQyWlAwZXBIJTJGTkVmJTJCRXlFU2VVdWZmM3RtYkZBeDhiQjlIOFVmNHNaOCUyRjZQODJUTU1MTmIxaURSclEzRXBCa2tQQzNqN3M1JTJGd0NOViUyQjAlMkJHVmM0bjVtOHlmcG56SmNzciUyRjZIWXNMZTIzMlBCdjNqMCUyRnkzJTJCSCUyRlk1SnhrTG91clgxNzUlMkZ0YjI4bWFTWnJsb3FzZGxRMVRnbyUyRlpVRE83NTUlMkI4dXhsdlBjTUk2aTZMQWUyelo2QndsUzdObXpZRmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmYlMkZXNyUyRm16WnNWZGtiODNXNSUyQnJXMSUyQmclMkJLMWtBYyUyRjVEJTJGQ2YlMkJHNDVKTUM2amFyZTJGeGFFZjNxTW8lMkJkUGglMkY0YkNOaXFWNlZPT2NUViUyQkdSZUIzNyUyRmFYOVdIb3lGYUpNejIzQnFpV0U3anVDaCUyRnN5YVJzSFJYSFJnQ1Bwd3k1MmdMczJiTmtVdXpaczJLdXd1MXJTNDlXMDZXemI0WEk1UXY4QXl1dTZuREhNZW1Ldk9ORTFLV0dWckc3ckhQQ3hSZ2Vxc3BwazdzYjBYQzhXMmxVYmp4SGlNaG5ublRIdExtUFhyWmZnYWtkMVRzUjlpUSUyRlA3TFl0b21xJTJGV0kwSWFreWJvZjRINTVMbUZaZHFObEZxTmpjV013cWs2RkQ4ejlrJTJGUWM1MTVYdVpiVzRsMCUyQjUlMkJHV0Z6RTZuJTJCWlRUT2xXMDYzRVFrWFk5R1h3UGhuTyUyRk5zUzZUNXF0Ym9mQkhxYW5pZXhtaSUyQjJ2JTJCc1U0diUyRmxmRmdIY3JQVEZiYW5aTmIzY2F5d3lBcExFM1FqM3pqdXR3VyUyRmxqekJjNlBwNmZWOUpIcHNMTlNTZ1IxSElvclYzVnZpenEyalhRayUyQkFuZGxCQTl4bk52elJpV1B6SkJKV25yMmdKUCUyRkdOeXY4QUhBZGlrSjNZR2YwbzVwWkRJYm9TRDFHSko5YUFnaDYlMkY1YVV6b0ZuTjlZdFlaNmdtUkZZMDZWSTN6bFhrJTJGVkk1YmkyaG5sQmdkQnV4RkZhaGhmcjByU05zbkhsWFU0Skk1TkphU3QxYXZJUW0lMkI4UmFxdUQwSSUyQkxqa3BiZ0laSm16WnNpcnNEYWdDMWpjcXZVeE9CJTJGd0p3VGpYVU1ySzMyV0JCJTJCV0twZm9mRTZYYjhmNWQlMkZuaGprTVBtdlIlMkZLbHJKQnFreEJTVmtqQzBQSURwVGZJMTVzJTJGTU5idTNqYlI1cGxzWlZwNjlzd1JpOU4wZVNqTW5IJTJCUmNWcG02NjljV1d0WEduYXR3amdLbWEydVBzajB4JTJGTlh3JTJGYXlPZm1MciUyQmhYM2wlMkJQVFlya1hNJTJCcEd0bTF1UFVVY2VYN3lSeDhLTHR4JTJGMXM1eG9OJTJGZWZwVnI2QzhtdVZWZlV1TE84a01yRUllVGVtN2ZhUms1SXk1RmRUdVo5QjE2OXRyR1p2cWtjNWVGRDhTbUp6elVjVHRzcmNlV0h6VFQzZlJKdjBwNVVadnRPWVlyZ0N1JTJGSlY0UCUyRndBTkhuUHJqODN2TTJsWDl6cFdvQkpZSW5hSjU0MHBPaTElMkJHUlFEeGY0Y2xuNVozcVQyc3RqV3JLMGlleEVnRTYwJTJGMlhMT1VmbUhZTlplWmJoV1A5NEF5biUyRlYlMkJEJTJGalZjbExsYkVkUW45NTVxMXdUaVUzaHVMYWRlUUNzZlNsak85Vk5ldiUyRkFBMGJZSHViMVo3VjV5V2toSHhwY1ZISk53R2l1UDhBS1N0VmslMkZieUdhZnFMUXh5YWZPNVMybFBKV1VBbUdRJTJGN3VpQjhmOEFkMFglMkI3RiUyRnk4Q3RkNmpwbDNMYjN2JTJCa1FUcHhuaXFURGNRbjdMb1IlMkZ3VWIlMkZBTERaQ3l5ZWtXbDlaeWFGTFBlbFpHTjJ0cURFdFpKSGVuRXM2N2NrcFZYd3ExYlU3RzFpS1d2cXRjQ1I0YmtraEZZeCUyRkNIWGh2dlg0OEMlMkJVN0gxU2JLM2s5V3lhNWh2NEhjaFNCRjhGeEJMMldlT0oxayUyRjRzOVA0Y3UlMkYwaiUyRmMxRnBobUZ4UExlT2haQnhBaUw4anQ0MCUyRmE1WWVnVjZQcHJ2THBjRThzZnBUTmJoM1FWb0dLMTJ6bHVvUTJQblppaDQyZm1XSVZ0NXo4TWQ0cTlJNVA1SjE3WjJBOFlyV1ZsJTJCRVJvYUR3b052dXBuTHRiMDJMelJFZFIwaEJiYTdiVmU0dEVQRlp3cHI2c0glMkZBQmIlMkZBSk9Ta2dQTkxxR2FHN2UzdjQyaXVvVHdsaWNVSUs5aU03NTVLbkdvZVQ3Wlg2bTFDSCUyRllTTkNmJTJCRk9jdG51SWZOa1NXZXFFV3V1MjQ5T0M4Y2NmVzQ3ZWxjZCUyQmYlMkJWblElMkZ5eVM1dDlEazA2N2pNVnphU1hNTEszaFJKbHA0cjlyamtRbDVQYmFsY2FSZCUyQmxJN1Bid3lzSTVsTkpJaXJVJTJCSCUyRm1uT3VlViUyRk9VZW8lMkJuWTZoSXB1V1g5eFB0d25VJTJGaHolMkZuVE9QZVk0elklMkJZTlRncFZCY1NWUTlDckhrUDE0R3NiOXJGZ1JXU3pZMUsxJTJCS05oJTJCMHAlMkZaY1kyUWRsZXYlMkJaJTJGTEt4SzE5cGNkWUJVeldxZFl4MUx3aiUyQlQlMkJhUDhBWiUyRlp5SFc5eGU2WmZRNnBwazdRWHNCRFJUSWV2c1IlMkIwcCUyRmx5WSUyQlVQTlIxS0pMSzVsRDNLclczbTZlc2c2N2Y3OVQ5cE1EJTJCWnRDalRucVZpbElXJTJCS2VGUnNoUFdWQVAyUDklMkJKJTJCemtaUkIzRFBGbGxqbHhSUHo1RWR4OG1jdyUyRm0zYVh2a3pVTHlVQzMxMjJqRVQyb05BOGtoOU5aWVQlMkZKdnpiJTJCVE9aYWJJaG5Xa2dhT1Fjd3hPNTc3JTJGNWZqaEtJWW5kb1p2Z2FVRDA1djVTTjFKJTJGeUc2WUkwUlo0dFMlMkJveUtRUzFIVHdZSHNmZkFMcmRPUXdNJTJCTEdPRUhmaHU2UFd2SjZmNUZzZnJYbnFXOEslMkZEQkVaRDRjbUFWZjFaMmZPU2VTTG1mVDlSckhFV2x2RFNaYVZhZ05SMCUyQnp0blc4bVdzdXpaczJCRHMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlmdiUyQmJObXhWMlk1c280cXc2V0w5SGVZTGlMcEZjVW5qSFFmSDlyJTJGaHVXU2JUbkJnTVhlSml2MEg0bCUyRkE0VCUyQmE0ZlRXMDFGUnZESjZjaEElMkZZZnBYNU1NR2FYY0JtSHhiU3JzQ2RpNiUyRjJmOFJ5WjNqN2tkVTR6WnpyVGZPMnFRYTNlYUhya2F4NmhhdXglMkJyOUZrZ0olMkZkVDI3OTBaUCUyQkd5ZFdXb1d0JTJCbkszZXJBZkhHZG1YNXJrU0Vvdk5tMnlpUUFTVFFEcWNDdDVzTDVkWjA2S285WVNNTnFSQXY4QWl1Mkl2NWkwcUplY3NyS28lMkZ3QWtrJTJGY3RUaG85eW82OWh0YmkyZTJ2QXBnbUhCMWNnQTElMkJmZk9ZWCUyQm5YZmxYVWdoSmV6a05iYWJ4SDhqSCUyQmRjUFBOODJsNjViMmoyMTNETjlXZG1tdGVmQ1JrZGVKYU5TVmIxSSUyRnRZWFdNOGNWazJqYXZNOTVwVXY5emNQdkxCJTJGSTNMdnd3aElUMngxMktDQnJ4anlqUlMwNmpyeEc1WUQlMkJaY3J6enBrWG1qeWhMUHB6Q1NhRlZ2OEFUWm96dVhqSFA0R0glMkIlMkZFNUprVW1qdTlCdWphVHNKWUhIS0M0RzZTeG45ciUyRkFKcXdKSDVnMWZ5akRhdzJLcmNhRTB6U05FMjdSaVFtdHVYUFNKNiUyRnVXJTJGWWt4STZoVWc4aWE5cXVsYXRIZTNzMGs4RGd4R0taeXdCayUyQnkzJTJCVGtuJTJGTjYzYTh0dEcxYTNySEwlMkI5aElCJTJCSWRHSyUyRjhBQkE1RE5iUzB0TCUyQjRrc0pPZW56RVRXcmpZaU9UNGdqRDlsNFdxakwlMkZBSk9UVFU5WHROYzhyNmREUDhFOHJjNGlTUDcxUndrVGZjUCUyRkFMc1glMkJmbGdxMDl6RnZLZW9UTXdWMk5lQ3NCMEJhTnFmOGE1TjladTU5SzgzVzJwV2IlMkJuOWNqQm8yNFpYVU54SSUyRjFseUNXc0w2Zk5iM0xMeGlkMjR0U2dJTkE5UHV5YjY3cGQlMkZyMmthUGM2YnhONWI4b3dXWUtBWVclMkJHcFA4QWs0UnlRVTh1Zk9GN0pMRDlYUkxhQWo5NlpQaVl2NEE5QW4lMkZEWU9mejlvRWJ0QTBralhTcUclMkJycWg1TnRVJTJCa1c0aVFMJTJGazV5SyUyRml1TmFnakVjcFRVN1JqNllxYVNBYnRHMyUyRkZpbjRvbSUyRmElMkJ4aFhjR2VXeGxEZ3BQYmZ2VUZhUERLcEZYaUklMkZZayUyRmslMkZtd0ZYcjBuNWhmWEJKRnBWdHhtQzg0ak9hODElMkZhS3F2N1NmeTVHTDd6SnEycndYRmhxRjQwQWxXaVNRZkFFUFZXJTJCSDdTZnolMkZ3Q1JrVGwxZExXM3Q3eGk4MTA4QzNnOUVCQXJDbkk4anRWdnROUmNSMXp6VGRKY1F2WXdSVzd5Mjhkd3pGZlVibEl2STA1ZkFvJTJGMk9HeFN0M3pTVzlMUFhJVE1sQ2ppdXpvZnN5UnQyWWZzUGtkMGlhYlR0UWtzcDFacmE0VTg0WDZTSiUyQnc0JTJGd0FvRDdFaTVkenFWN0xGQ3Q3S1puVkFZJTJCUnF5ZzlhaiUyQlglMkJUSmRvdXVhSHJsdGIyUG1DTmZya0ttTzJ2S2NUJTJGa2dzUDJ2NWNqdGFwZm8wSnQlMkZNbGxGR0hsdFp2VmVLNHB0d1dOaTZ5VSUyQnpJdlJsd20xbVVhcnBOdEpIRVd1dE9rdUliaDBGU2Jma0dpWjIlMkZiNE14SCUyQnBrNnVaTk04c2FkZHl3U3ROSzYwNXRzS25ZY0YlMkZtYk9aeTNzMm5XYUxFJTJGRzRlNCUyQnNLNDNIRUx4b3dPekslMkZMNGx4NWZGV2IlMkZscHJQMVRXTFFNYUxNRlJoJTJGbFJ0eHIlMkZ3TFluJTJCZk5qTHAlMkJwMldwd2doV0x4dWYyU0dvUlglMkZBSURJOXBlbzJrTXRqZldRTVVpM0pNOXUyNGo1clQ0RCUyQjFHNXF5ZnlmWXpwJTJGd0NjZGltciUyQlVyYSUyRkclMkZ3cElTT29JcFhKRGNJUE40SERjUjNTY2wySTZxZW9PR052Y1F5dyUyRm8lMkIlMkZKV0dwTnZQMWFCeiUyQjBQR0Z2OEFka2YlMkJ6WEl4U2F5bTJOQ09oN01NTllMaExsT1M3SDlwZkE1RlUzMHZVTlE4dWFxaklxc2FxSGlPOFVzWjZFZUtzcmZBJTJCUzN5VXI2cDVpdWRUbDJTMVJ2UlRjaFRLZUNnViUyRmxUbGtPc3ZVdmVPbjhWa2RhdGF1eG95TiUyRklEJTJCMHIlMkZ3QW1UZnlZSHNyblRkUGFzYzElMkZOY3pYTVpBcndoVDA0ZzMlMkZBRDA1WWptbDZGZGl0bGNtdSUyRnB2WCUyRmdUbks1YlM0c3AxbUR0RklENmtMaW9QWFpnYzYxTkdUQk5ING8xUHBVaklwTmJ5WDBVbHZjdyUyRlY5VHN0N2kySXFIV245OUVQMmtaZjd4RiUyRjE4bk1YMXBBTk1SMVRUWWZNa1J1WVlsdCUyRk1FWTVFZllXN1VmdEwlMkZ3QVhqRGY4dSUyRk1Gek04bW5YNk1KTFdSRmtNaDR5aXF0R1VZVSUyRlpQODJJelclMkZINERWUUclMkZkdVB0UlAxRkclMkZsYjlsc0c2WkpESmZQY3ZHSTlXQ29KWndQaG1SR0hGMlglMkZmaTRBUDJwZWFmbUJFOEhtcThMZ0FUQ09WYWVCVUwlMkJ0Y2phdVVQaXA2cWUlMkJkSjgyeDI5M1BiMkd0eUw5Wm1XUm9MNVFBVVpaR1FLNDdwOW5PZDM5aGRhWmN0YVhTY1hYZFNOMVlIb3ludXB3RkNMMHpVWDB5NFNWR2Y2dVdEcXliUEc0Nk9uJTJCV3YlMkZBQTY1Mm5SdFklMkZUZHFKYmZqTGRxbks0Z2pwU1ZlbjFpQmY1RyUyRndCM1JmN3FmT0N4eWNhcXdxamZhSDhjayUyRmslMkI2MUsxMUFDMWtaWUlUNmdtQiUyQnh5Mm9QJTJCTWklMkZDNmY3TEVHbFpDYkJyJTJCJTJCdSUyRnFxcEJDalA2Y2J0eEh3bjRsanJYJTJGZ2NrT2oyRU1jQzZsSzZ5VFJLWW1rSW9ZbDZnRTl4VDdMNUhoY1RKcU0xakpDRWpqUVNRc0s3cVQzcmdpJTJGdUo3UFRES1EzMVM1ZjAzWlBpM1NyZkdQNVJpS0c2YmVqJTJCUVB6QjBDRyUyQnVOSHZCOVZlWng5V3ZaS0JYN2NDZjJQOGpPdmdoZ0dVMUIzQkhmUEhhUXJmdUV0M0RIa0FKYWtLaFA4QU8zN0ElMkJlZFg4aSUyQllQT2VuNmROcDJxSzV0NEpGanM1SENseW9OSmZUZGllVWFMOFMlMkZ3RENaRWNSTkVjJTJCcmZPT0tXTVRnZUdVYUVvSGZpJTJGcFJQOEF1bnQyQWIzVW9yV3FBYzVRSzhlZ0h6T1BodW9UWXJkZXNKWWduSnB0Z0RUcWR1JTJGdGtUMUM5WG5MUEl3b2ZqTGR1SjZmaGtnTGNZc2kwdlZSZlNTUlNVV1JkMVVlR0dneU4lMkJWckNTa21yWEtsWG5IQzNSdHVNWFhsVCUyQmFUSktNVFY3SmRtelpzQ3V6WnMyS3V6WnMyS3V6WnMyS3YlMkY5RHYlMkJiTm14VjJiTm14VkI2cmFmWHRPdUxYdkloNEh3WWJyJTJCT1JiUkwlMkJzTVRNYVNRc09TbnJzZUxaTkRuSWRmWFh0UDh6WHRuWkdDMnRKV0VzVXo4cEg0eUFFOFkxNHJzM0pmaWJKUlBNS3lmOEFNWHllM21LeWgxTFRIJTJCcmExcHg5UzB1bEZTVjZtTndQdFJuSWI1ZTh3WGx3JTJGd0NqOVZSOU4xdTEyUEdvRDl2VWdmcEpHJTJGN1VlZE44dWFwY1hzSDFlN0MlMkJyQWklMkZ2VjZPUHMxSyUyRnN0dGdMelA1WXNyJTJCM056SEZ4bWpQTWxOaiUyRnJMVGRXSHRpTnRsVTlJODJzeGExMWxBc3NmMmJtTWZBOVBGZjJHJTJGNFhJdDUwMXk4MVN5a0VFalJRUk1HRWFNVjVMMCUyQktuMnNxNGtlM2o5TzRhc3V5TE5Tbk1kdVglMkJWJTJGeExDZlZaJTJGUzB1OGNEa1ZoWWhmR2d4b2RHUUREWlBNY3VsdXNUenB3cnlNVDdtbmVoJTJCMHVUVk5MMWUlMkJzb2IxdExtbXRKbEVrYkZXNUZHRlI4TmZVemkyaVElMkZYTlh0TGpVQVhXZTZoRTNMJTJCUXlLSEclMkZiam5xenpQNW9rMEgwYmF4Z1dWeW9kaTVJUlU2S0J4NzRBU3J6T3pzZkwxdGNINjlwcE10ZHhNMGg0JTJGODgzT1MyR0xTNzIzOUsxcEdwR3dqJTJCRXIlMkZBTEhwaFZjZWNCY3lyYzZ2QkZkYWJMJTJCN2xWMFVQYnQxMktEbnglMkZsWVlHdnJXS3dQMW5UcDNraXJzVDBCcFdnY2RmOEFaREpnJTJGRmpTYW5TYjh4QzJ1cnNYdHBHNWt0N2RrVlJHYVU0ZyUyRkVUeSUyRndCYkl6YzYweFNleWxzZ3BoREplYWZOdElZJTJCbnFSRWZDeWdZY1dQbVYxNHgzcWtxUUR6QW80WCUyQllyJTJCME1FNmglMkJpZFpaSW1qTTkwRkxRelFqNDBCRk5uMiUyQjFYN0RZa2QyeWklMkJySE5JaDh1WGJMcDd5TEpkVG9aYlpKRFgxRVUwTk9YeENlTDl0ZiUyQko0UGhiVEx5YTU4c1hxcXQzRW9LbFY5TVNvUlVNbjhzc2Y3WEglMkZYeUQlMkJjZktGem9XblJhdEZxVVVVJTJCblNHU0dBc0JjRlhaYUZlSEpWWkR1MkhPbjNTZWU5S3QxJTJCc0N4OHgyeSUyQnBhWGFiQjJUeEg4cFAyMSUyRlp3QW51M1ZRdVYxQ0MyaVc5Y3glMkZ3Q2tTMjhrTXRBNWRLTEhMMSUyQjAwVEp5WlBoayUyQjFuUyUyRktONTlaMEdTTm5vNnlJNmUxVjR2JTJGd3k1ejlwdjhZV2o2SHJjZjZQODM2RVdtaWlIU2ZpdjJveCUyQjJrd0g3UDJmdExrMjh1eHJiZVhZTGhZWFY3Z016eGtFMElxUGlxTnElMkZ5NGdiJTJCU2s3UE5kWDFtJTJCSG1xYXl0SiUyRlR0VGR4JTJGQkdvU3U2c3dacWNqOFliQ25SbU05N2RyS3hLWGNzbHU3dFhiMSUyQlNCcSUyRndDU3paSzljMDZ4dU5VdXRTdGtCbHM1SUZrQUlBTW9IcVVVZnpOUmtiQ1BXNVhzNzByWmNWdEwwJTJCdENvQUZWYzFvSyUyRndBcm5pMlJJU2hkRDByVTlaMGcyVU5XMURSNUpMRyUyQmlyUmxRdVhobXAxWlA3Mk0lMkZ3Q3BoNzVnMEsyc3JhMjFHOGNoNWJhR0pVcHQ2eUFSdXZMNk9XRVFrMWVKcnE5czU1WUx4Qnp1R2hKRWpyM0xLdnhTcXY3V0lTYW5xMm9RUlhHcnl2ZDJNdFZodVNROGFOUWNoOE95TmpzcUVsaEsxaGJjciUyRmN2M0slMkZ5ViUyRnljUlNRQm1VaWlmc2ZRTTZGcGZsalNiclIwbUN5M0VqRGxESXpOOXNHbnBoVSUyRlolMkZsYklycW5sJTJGNmpNM0NiMVZScU9vVTgwNzhYb09IUElTSWlRQ2Q1Y2tnRTN0eVM0U3RLNnhTeSUyRkRKJTJCN0hxc2VPJTJGWVZ3MFcydGhhdHAxMGhlMmI3WUgyMWNmWmxqUDg2ZjhBRCUyRll4TzR0Yk80c280STdaVXZHNUxwbDNQc3NwclV3czM5MkpEJTJGdXQlMkZ3Q2JBT2g2c0x1VTZWcVlNRjRoS1J1Mng1RHJGSUQwWVk3cnNoNHRNbjA2JTJGa3NwanpqbmlhUzFuUWZESUUlMkJKV1h3ZGFmRXY3T2QwdWdubUw4dG1ZaXBXRU9CMW9HV3AlMkZ3Q0g1Wnk0aG9UOVd1VTVCVHpqN0ZIcCUyRmVJZTMlMkJYJTJGQURyblIlMkZ5c3ZSZmFIZWFKSXdaNFJKR284UUR6USUyRjhBQXk1T1BWQmZQTnhicE1waWZZcWFCdTRJd0ZZV2x4OWZFSUpVN2xtSDdTJTJGODNaSjllMHg3Szl1blJnOGF6TWtvSFdKeVNWUiUyRjlZSDRXJTJCemolMkZLdHZGZGF4QkRMUUt6QVZPMjQzRyUyRjhBcllQSlVYYjJOdkRadGR5V3hlM0I0bWVDUSUyQnRHMzdKa2piOWxhZmFYSFJYbDlxMnI2ZXRuV0o3WXh4MjhoJTJCMVVOeU1qdCUyRmxING15WDZscDFwb1BtNTdDSUZMRzhqaWtDc0tpc3FxWFduY2MyJTJCemhMWlcwT20zNWhDdUxpQ2VTZ0lIRlk2N0tUOXJsNFlhVjYzSXdNVlNha2cxcHQyN2VHUnV6dnJUV0lMZFlibmxjSVdYU2RRYzhXNXBYbHA5MSUyRkxJUDkxTSUyRjk0bUc5dGNmVzNBUTE0eGdzUEg0YzRacCUyQnR6NkhxTjJySjYxbk5JeTNsb1RUa0E1NHlJZjkxelIlMkZhaWx5Uk5VaW5wVjBpWHF5eXh3JTJCamRXNU1kJTJGYU4xaVBkcWY3NGY4QTVKdGthMVpaNExXWXhzeVNLcGFDUlQ4UUklMkJJeGtqMkh3NUtMZTYlMkZUc1VGJTJGcDF3c21yUlJrMmwwUUFMNkZmdDI5MGclMkZ1N3VQN0xvMzk1aEZxdXFhTDlYWm1tV0NSd3lTV1RnczhNZ0c2T28lMkZZNWZaYkFVaEMlMkJaOUpzZk1sMVNLWVclMkJxeVFSVDJETWYzVXZKZVR3dDRNNSUyQkpjaEt5ck9yNkQ1Z1F3VFFFcEZLJTJGd0RlUXY4QXluJTJCWkRrJTJCMUd5ajFldzBTYUM0Z1M1bnRtQ3RYMEVMUXRRQU0lMkZFY3Y1Rnd2MWJReHIlMkJuaHI0b21zMnltUDZ4dUNTdFNJYm9mNnY4QWR6WU9hR0FRJTJCWGRUbTFOZExqajVTTjhRa0c2Rk92cUJ1JTJCVGpUclMyc2JaTENNY1ZVbWtwRkdMbjdSZiUyRkFGdiUyQkZ4VFRtZTEwMkRUdUlMSXdacEtrc1clMkJ6eFd0VzQxJTJGWnlVMlhsVzQxSGhjYWh5dE9RSlpWSEthWHclMkZkJTJGN3JZJTJGenZpQXFRMjFsZFh0eXRyREcwazUyNHFLbW5qOHNPNzM2cm9ObU5JbHRmVnY3aEZlYU1ua1VxVHdweE5BMlMyTWFUNWV0Uzl3NldkdEV2eDFiNDJBN1N5bWglMkYyQzV6VHpiJTJCWnVuM3N3T2phY0dWS3dycU1nb2FqZWlKU3IlMkZPVERWZFZaUFlhM3BPaiUyQlc3dTMxdUtLenVaR1AxZGVQUDFJejFVb3Z4dEolMkZsWVUlMkZsJTJGNWhPdHlTJTJCV3JsaXMxR20wcHlmaVI0JTJGaTlLdjdTdW1jcnZOWW51NURjWEg3eVRvYW1yZlNmNllMOHJhdExaJTJCWnRKdm9UNmJ3WE1iRWp1Q3dWaDh1SmF1UEZ1RmUlMkJ4JTJCWUo0Tk1hd1FpT0Z6eVpPbERYNGglMkZ3UXlRZVZ0QW4xQlk5UjFRTjlXVTF0b0clMkZhM3FHWWVHRTNsblJMUFZmTTE5TGRBeVdrVHRjVzhhN3hPR2FxMWtHejdrJTJGQU02bW9BQUNpZ0EyQXhKN2xvam43MndBTmdLQWJETHpac2lyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOUh2JTJCYk5teFYyYk5teFYyUXp6M3AzUDZycUtiRkt3eXQlMkZrbjRsSlBzZVdUUE9WZm5YNWdtc3ROdGRCdG5NYmFqeWt1WEhYMFl5UGglMkYyYiUyRndERWNicmZtMjRNUnpaSTQ0N0dSNTl3NnBNZk55V2w3RWREMUtNM0NwNmR3b0tsZGolMkIxekhFJTJGUmtvMHJ6MXJVdHo5U3ZMZTJsbTJIcDhqQzdCaFdxVjV4dlViJTJGRG5uMDFqUEVpbjhwSGdja2VtWG1zVGFIY3hBTncwNW81N083SUlLeGxpSllsbCUyRmFSVCUyQjg0JTJGc05rSVpoSWtTalJEbDZ6cyUyRndJakpDWEZIa2I1Z3AzJTJCYTJyJTJCYmRQdUV2WUxWYkxScGlGTDI3YzJFdldrajAlMkZkOHYyVnBrR3NmTjJwM0tyYTNWMlhpY2dFc1FlUUozcVNOczdkJTJCa2RPMXJTYkt3MUxoTiUyQmxiUlhWSktGWnlxOFpWMyUyRjNZR0hMT0VlY3ZLRng1VHZUTER5bTBpZHYzRXZkRyUyRndCOXlmNWElMkZzdCUyQjNscEhVT3ZzdWE0aU53YldDcnVISyUyRkIwcU45ajB6b3klMkJhclc0OHIyT3EzbDFMZTJzU2l6dUdrcWs2emdVVlhNZGE4RiUyRndDRFRPTzJNMDFySXMwWENSUTRrSHFDcUduWmw3NE5na1RsTXFTT0lacFBWTnJYakdHOFF2Zmoyd1h6U3lxejFlTyUyRnROU2pRTThzVnViaEZiYmtJcFBpSSUyQlVSNVljYTNxMTdJZFBtdFoyanM3eXp0cmlPTk5oeUFLU2NpUHRNSlVmSVphWERXTCUyQnJhMGpjcTBaWUFWNHlBcTZtdjh5bkpmNVlleDFQUmpwVXNmTyUyRjBwbnVMSldOUFVna05aNGwlMkZtOU5oNnZIJTJCVnBNUmEydXZCY1hlajJHcDJyU0M1dEpKYk9aa3FXNHYlMkIlMkZnWSUyQnglMkZlSmh0QkI1c09pMzEzYm9MYTlpaE1sbzNFQjVDbEdrVUx5JTJCMTZYSms0cmhsWmFyQkZBYlpsanRyUzVUZyUyRm9JRjRmeU9UMUpqYkMxTCUyQmJTYm93eU13dTRXcnpKcnlYOWgxUFFweHclMkZGV0ZYTnV0OVBCNnNyUzZmcmxxSTRKWkhKJTJCcjMwYkNzYk9mNXBoeDMlMkZBTjFUJTJGd0NSZ1BRYnRyZVZyRUZyVzhnZm5EVTBkSlVQRjA5dW5IRCUyRkFGZXlnamp2YmkyaGFUUWJweGNYbHBIdkxwOXg5bjZ4Q2xmanRqWGkxUDJQM2IlMkZHc2VFOTlvbDlxdHlqSUthbVlsa3RiNk1uMEw1UUtKOFpwNmQzeCUyQkg0dnQ4T0QlMkZ2Y2lUWFBaYVolMkJrZHA1JTJCZ3QxOVlhZDVwMCUyRmUwdlUyWThUME5QaWFNJTJGdEolMkZ1dk9qNmxjR3lzRmFSbFl4SldVamZrVVhrM3o1TU01cCUyQlYybDNVMnBQZGFsRkhLMXNPTHlxUXhTWmFGT2REV09UN1clMkY3ZVRUeks4VWRsY3hSRWhYQlRmJTJCZHpXZyUyQjdKeE5qaTcwSG5UeiUyQjUxR1h5cnJGeGFhcEQ2OW5mY1JxU2Z0cXhITDFvaiUyRk9qUGp0UTBHTllDZnJDWFdpM1FNdGxlbGh5amtZYkZmZHZzeXg0TTg3V3k2enFlbVRxNFg5S3dRbm1lZ2tLJTJCbWYlMkJTaTVHOU0xUFZmTFV0M29kM0NKSUdERVFTN2lLVUQ0Wm92OCUyRmp5RXJxcnJ1UE5rSzU4JTJGSk43U3gwJTJCMHNEZTNrMGs5eEE2SkJKQUNHcXdQSGlLcDhTOGZ0czJGMG1yRFMzbnViUFRoSDZaTGE1WWNRc25CdnMza1NzQ25KZVhKdUslMkZCJTJGd0FZbXdRJTJGclhkakVzUVJpemh2aktDclVwOElmNHVXJTJGd0N5dUszRnM4OTNwMW5lemZWZGVEQ094bUhGaThaSCUyQjg5d1NlQmpQMll1WCUyQlZGaVlnZ0E3MFBtdDlRemZ5amR4WGVpUGVhWTNyTll0OVpqZEtVa2dQMmd5ajdMOGZ0TCUyRlBnVHoydHVMZEpJVDZjTjFKRmN4ekoyVTdTYiUyRnMlMkZhNUJzS2ZMRU12bFBYYnkyc0pJNDB1RiUyRjBpelZ1VWNiMDVuMHozZ2tUbHclMkYzMjM3dkhlZGRYTjVwRU1kbmJtT3lzNEJGY3kwcURjRjZHSmElMkZ3REZhY215WDhQdTJSMVFPaTZZdXBhYmQyRjc4ZGo2eGpMVkZVbHB5U2FId2tVZjdGMCUyQkRJcnJ2bDZkcjQyTjBlT3RSSUhzN2xka3Y0QjlpamY4dEtnZkIlMkZQJTJGQUhYMjhtUGx1eWIwVnM3T2RUTDZTU1Jlb0s4JTJGVFpxTiUyRnJxT1BMJTJGSndUcWRoRnI5bTFscVVoam5oY20ydXY4QWRsdE4lMkZNS2Y3cGI5dFA4QVpyalZoV0hhSHJFV3F4alRiOWd0OUdLUXl0c1hwdHhOZjJzbDM1ZDNKMGp6bkpiQ29qdVFsUjI2Y1QlMkJ0YzU1cXRoZHlYY3l5SjlYOHdXZngzRVNiQzZVYnJjd2Z6UzhmamZqJTJGQUh5ZnZQdDg4TiUyRkt1cTNGM3ExaHFCSUV5YzRwV1p1Q2tvQXdjazlNQTUwVlBKViUyRk1xMmswVHpuZkNKUVVtUEpvbSUyQnpKRyUyRnhjVzl0JTJGd0RZNFE2Y0lMYTZaWTJlS1J3c2x2NmdvYURmanklMkZhSzRmJTJGQUpsZWFkTTgwYTh0MXBjWjlHQ0pZbXVHMk1yRDdUQWZzcXYyViUyRm13cjBXeXVOWFV3JTJGVnhjaTElMkJLTHQlMkZ3MjN3cmc2cUdWYW5yMXZySzJ0M2NzSXJ5MWFFU0JqeEpFWVlPUWZmNGNqdm0zekxicFpYTFdUR0M1dnIlMkZ3Q3N3UmpmakJHb0M4eWZpJTJCSWpDUFgydk5NdSUyRnFaRFJOR0tTQWdVcXhxZ3FLcnVGJTJCSDRzanN5UFBJWlpTWEo3a25mRzFlOSUyRmx4cmR0NWtzYnFkU0Z1N2VNTGNXNU80JTJCRTBjVjZ4dm5GNzV1VnpjYjE0eXlCVzclMkZhTzJLZVM5UnV0Qzh5V2Q3RE1ZTGZuNmQzTCUyQng2RDdTTEo3WWhka05kM1VrUkRSU1hFcnhNRFVGR2NsVDlJd25kQ3RwV3J6NlpOOE1za2NEc0dkb2p4a2pjZlptaXAlMkIydjhBTCUyQjNpV295U2ZYYmlIVW1GeTE0ZnJLWHFING5MMTR6SyUyRlZ1WDdjYllFZUpXRFBRVnBVMFBqMHg2eXFMTDBwSlVXNHRYRTFvNU85U2FTUmJlUDI4Q29iMVoxVDZ2UEt6eGplTlNTUUs5YVYlMkJ6blhMZlVyZHREdDlUMVUlMkJqZVJ4cGEzaU12RjVWNDFqY2clMkZ0cnglMkJMT2Q2VmJhVHFKbFM3bE1sNUlyaTNoSHdSaVFqOTIwc25oek9EcHBXc2lpNnpjR2VTWmczcG8zTlN5JTJGRCUyRmVuNEs5VjU0MnIwTHloZWFYY201dWFDQ1dOaHhrbCUyRnZDbE9xY3ZzNHJybjVnMmVuSTl0cEtpNHVxbFdjazByU3Z4UDhBdGY3SElUYXpwY2NyaU5hTEdEJTJGb3pHbkJWSUprWlAyNjElMkJGdVdFNGp1THFTWm8ycGJKTWp5aXRBUWVWUHdyanhiVUUwMXJldVhHdkNLUFVaSjJDczBpcWdVZ0Z0dW53JTJGQ0tmRGhXTFhTemF5Vzczanh1R0VsV2dKVWJVb1NEaGtMY1hFakpEU0pxa29TZCUyQkg3T0dsaDVhMUh6RE9OSWl0JTJGV3ZaRU1rSlJsUXRHbEtzQ3hWWDQlMkZ5JTJGYXdXdElMVExUVG1lTW1iVHJtMWpYZTBubU1MT3dIMm5abHJXdiUyQlZobEJiNkxxbDA5enBlbXJieDJjSmU1V05xaVJpM0VLcmZ5aiUyQlpSOFdKNnglMkJWUG5YUXJLNDFpOXNsanNyVUI1cEJMR3pBVkNnaU5XTE51ZnM0SThoNmhwNzM4c054UkJleGVpNUJvQkpXc2NnJTJGMlh3NFZaam9NbGxGYng2MzVZNTJrOW12UFVkS2FSakhJRiUyQjA4UEluaEpRVjYlMkZhJTJCSE9xNmQ1JTJGMEc3dG9aekslMkZCd0t6QkNWclRvM0dwUSUyRjYyY1lXMjFEUSUyRk1VVnJGSCUyQjV2eUluUFNJcXpmRTFmMmFmYXdrbXRwNDJrbHQwZjZ1enVJbldvRHFyRlFSUWprTUpWOVEybXM2VmZpdHBlUlMlMkJ3WVYlMkZ3Q0JORGcyb3p6cjVZMXZUSTdWOUwxUG5iVERrOEU0UXM3TTFLS0hCRHA5R1RmUWZPZG9zU3h3NnR4a3A4VU4wRHhCRzM3V05lYTA5VXpaQk5ZJTJGTTNTZkxjVnJMckRJeVhaS3dtMmJtVzQwRHNGMyUyQkZhJTJGRjhlVFcxdW9ieTJpdTdkdWNNeUNTTmgzVmhVWUVLMmJOWE5pcnMyYk5pcnMyYk5pciUyRiUyRlM3JTJGbXpac1ZkbXpac1ZkbkUlMkZ3QTlyS1lYbWo2alQ5dzBjdHVUNE9wRWdCJTJGMWxPZHN5TyUyQmQlMkZMVWZtdnklMkZjYVhzdHh0Tlp5SG9zeWJvZmszMkclMkYxc0I1T1JwTW94WjRUUElHajdwYlBsJTJCTlByRVJpJTJGYUc2SDM4TWtQbFh6aCUyQmpoSG8lMkJybXVuQ3F3WEZLbURtZmlTUmYyN2QlMkZ3QnY5cE1KQkRjV043SmFYY1JodVlIS1RSUHNWZFQwUCUyRk5XQjlSaVdPNmFnJTJGZHlnU0w3Y3V2M0hLcGt3SW1QY1hvTTJLR2FIaHkzQjNCSGYzaDZCNXFzbFhRb29OT1ZvZjBhN1hkaTZmRHhCUEtRUTc4dlQzNXhObDZGcjFsNXMweVhTTlpSSHVqSHhsUmh0TXYlMkIlMkZFOEpCOXIlMkZBSWZJTG8ycFQ2WGZMZDhtbWlLZWhQQXpFOG9UJTJCeXZLdE9QV1AlMkJYS3ZyYWZTcGwxWFQyTDZlejg0THFMckUxYThXSDdQSDdORGxrTW9sdVBpSFJhclJ6MDVGJTJCcUo1U0hmMUNUJTJCWiUyRkxsejVXdnZUVW1YVDVqVzJuUCUyRkVIJTJGd0NMQiUyRncyRmF1RDhTbjZjNjdhM1ZoNXgwcDdHJTJCUmZyQVdza1k2RUhwTEZYcCUyRnhwbkxkYzBTODh0M3B0cmlyMjdtc0UzWmxINm5YOXBjbVIxSEp4RlMzdUE0b2Z0REJsdmN6Mmx4SGMyc2pRenhNR2psVFlnakNWRzZNaCUyQldENFpSSXZ2M0dDMVo3cGR4SHJhTkpDVml1a3ExM2Fzd1ZBTzl4Q1clMkYzVWY4QWRrZiUyQjYlMkY4QVZ3MXQ1TlBrS2FiZTNTeXFLRzJ1SXF1WURYN0pjN2VpMzdhJTJGWiUyRmF6bTl0ZFQyZHhIZFd6Y0pZenlROVI0VUk3cXclMkJGaGt3aHZEcUVDVGFaYkV4eUhoUGJxS21DWWl2QmYlMkJLWlB0UiUyRjhEZ0lrU0R4VkhxSyUyRlN5QkZiamZ2UjhrMXhZNmdWdExiNnZKYlZXWmJodlZMbzM4eUFlbVlaRiUyRjRYQ2pXME1jWDk4NiUyQlg3MlVlbTZWNTZiZWtWQVlMdTBEJTJGOEFKU0wlMkZBSXRqdzdXMHV0VmdqMCUyQjdrOURVTGMlMkJuYVNNYUZrcnZheiUyRjh5WFAlMkJwZ3EwMGl6dGJrYVZjUDhBV0JlcjZOekV3b3JMV2pSc29KNHlSdjhBRWpyOWpHT01EYm41eTNVeUo4dmN5ZnlIcGwxcHVoeTMxekVFMWU5Y0pmS3hYaks4Sk1hVHFmR1pDcnQlMkZOOXJDWDh3ZGElMkJxeWFiQUdBTTg1YVlBOUZVY1YlMkZ3Q0d5WlhFbHZiMjBWZ0hiMUxlTkRFS21wS0RoR1MlMkZmT0slMkJjcmh0VTFHOHZMWiUyQllzejZNMFElMkIwbkJoNmN3SCUyQiUyQjVhZjdGOHNsc0FBeEc1dGtlc1RtNjhzYWRkbzNHYlRaNWJiMUIxRyUyRnJSZnJ4R1RXN0x6UHBjcmFoQUxmekRwaXI5YmlJNHRKRVNBWm93ZnRKOFN2eCUyRlklMkYxY0Q2Vk1iM1JOVHNTaEptaGp1NGdWUDJvdnRIJTJGZ0clMkJMQlZuYjZiNWcwdXgxSkdXRFhORGo0U0Vpb25nUWNHamslMkYzNGhYN0xmc1lCdWt0JTJCV2JhNGdXSFdtaiUyQnNXZHBLMER3cXklMkJvV2tvbkpFJTJGdkhaT2ZOY0tkYXNuazgwMjg4VE42RUVxeE9YTldTT0ppUzduMnA4ZUI0YnlTdzFpbHY4QXU0T1FrNDdrS28lMkJMdiUyRkxYN1dLNmpyNHU5VWVlMWpJdG5kaUlpYXN5djlzViUyRmwzd1dBRlpCYnZZYWpxc1YlMkZEU1AxeUlUUFVnU0tIOVNTaW5ZY0lSdyUyQkg3VFNKaHIlMkJZT3Iyc09rV21uaEhTSzZZaVJvbEZGNUElMkJuNm5nSmlmOEFXeVAyTUw2ZGJpUkklMkZycXNBSTNTUkFzTVklMkJ4SEtybEdoZmwlMkZlZkIlMkI4JTJGM1hnWFhZcHBKRzFtMnVua2JqNk9wMnBVU0tWQXFrc1NOc2lmNUwlMkZGSDl2SG9VbHJ5dGR0RENnZG1WN2Q1STJib1UlMkJJTkdUJTJGTGhwcjNuTFRLSjlVVDE5VEI0ek5IdENlM0pqM2IyWElzc3AxWThiVWZGT1FzaXg3U0NTbEFYcFRtajRhdjVPbnNkTSUyQnV6QjNabTlPV2FOR0QyJTJGTWdSVG9sUDNzWFA0WnY5MmZ5WWk2b0lURFZyRzI4eDZOQmVCdnFXb1dTMWl2U2VJaWtVOGpGSSUyQnpMQTYlMkZHbiUyQiUyQjN5RmFxMXBjWGl4MjhaVUdpM1Uyd2FkeCUyRnV6aUFFV3Y4QXElMkZIOXZETFY3VHpYZVdycWJhV080VmhIZU5IdEZkQ1A3RWhYNUQ0djklMkJmYndwQzNsaUdndklvVmRTcXQ2cExQR3IwcFRqJTJCejhYdzRDVWtFR2lsN1J3UnU5Wnp3alB4OFVaaUtlUFNoeWIlMkJSZk1kaEhNMmtMRVYlMkJzRGxETFFGbmNVQ3hjUlg3V0VGMURDczYzekNzNnI2YzFOa2VuY3I3cmdYU3BGc2I1ekNGb3JlcEM5UGlVRWZacjREQURSVkQlMkJkZFVrUG1QVTRsVWdWTnRORzRxRHcyQm9mMmtQMkd5SzFMRUNwWSUyQkFxVG5VRmhzdGExQ2UlMkIxRzNpbnVaQ3J5U3NncXdxRk5Sa3d1OVI4bSUyQldJd3NjRUhyaGFyREJHalNINXRUNGY5a2NJb29wNGRhNlZxdDJHVzB0YmlRSGJpa2JrSDU3VXdITkZMYlN2YjNDTkZMRXhTU0p4eEtzdXpLd1BRak91MyUyRm1xJTJCMW1GbzFDMk5tRk1qaFRRTEd1JTJGS1J0dW1RZlUlMkZNV2gzdW9UWHgwcjFwSmVQS1NXU25KbFZVNWxRTnVmSG5oUXhtT1l4a2xTUGlGQ0R2VVpRS1VJcFVuN0pyMCUyQjdEOGVZckJQN25SYlVmNjFXJTJGaG1QbXRrQkZ2cHRuRWV6Q01rajc4Q3BSWk9ZNXclMkZCbVdoQkNqc2V1U3l5bjBwSXBJcjJDU3IyZ3RiWVRRdDZheWx1ZlBwOFBCV2JDWlBOdXJST3NrWWdWa1lPdjd0U0FWTlJ0ZzI3ODAlMkJZUE5kNUNkV3VSSkhFV2tXT05GalJhaWglMkJGQVBsanNxTGVSclZoJTJCalF0M0dCUm9YQkJLQWZGd2FnJTJCTEoxNUIxN3lmZWFsRTJ0YVRIY1hNRzYzRXElMkZ2YllMJTJGdnlIJTJCNmVGSyUyRjNpSnlUOXZBWGtQeWdQTkV1b3h4M0tRM1ZyQUh0WVdQOEFlT3hwdiUyRnhXcWlqTXYyV1pNTGRTOHZCTHg0cGc5anFWcVRGSkl2d3VwNmZ2UDVsUCUyRkRMaWxsdjVpJTJCU3RQdEw4NjdwRUVjZW02aHhraXZMV2pJayUyRmV2SGIwNWZ0WkY5T2tkNUV0NW1heXZvV0V0cmRSbW5DVWZZbWhZZnpmdHAlMkIzazMlMkZBQzY4ekxmeCUyRndDRmRXdDFlRWxyYlVvVyUyQndHSXJEUEd2N0N5VSUyQkxqJTJCMThlSWVhdktNM2xxN1dxZldOT2tZaXp1WEZlTmVzRTlQOEFpWDdXTmJxQ25jZm0yZnpSb1VtZzZ6RXFhN1pQRFBQQ3Y5M2VRUk1DMDBBJTJGYSUyRlphV0xDSHpmOEFsN29PcmE1YjZoNUt1QkhlM3JqNjFZd3IlMkI1WGx1MCUyRkwlMkZkRGZ6eCUyRjhRd3B1cDRWV0JyT1JoZlc3aVMwWWtySmJrZFJMS3Yyb20lMkZZNGZienN2a1hVN2ZXTkhqdTNqaGoxWkFJOVVFS2hTSnZFbWclMkJGMSUyQlBFaFhnUG0lMkI5OHklMkJXcmlUeXhyTTBpQ01CbzVWVlc5YURvSklabSUyQkxpZjVmdFJ0aE41WDh6eFdYbSUyRlRaOWRIcTZISCUyRm96MnoxZU5MZDFLcTRUdndZJTJCbzJlbCUyRlBYa2pUUFBHa05ZM243cTdocTlqZXFQamlrcCUyRndBTkUlMkY4QXV4TThtYXpvJTJCcSUyQlY5VXVOSTFLTDA3eTJQRmxiZFdVJTJGWmxqUDdVVGZzdGloOUp5NmQlMkJWVjNmMmRqYTNsdEhlNmlwZXpTMm1yekFGZmglMkIyaU1mMkslMkZFMlhjZms1b2pvVFozMTFiejFKRWpGWEclMkZpdEUlMkY0bG5saDNVU0xLQ1k3bFNHTFE3VUkzREE5bXowTCUyQlZQNXdMcXhpOHMlMkJhWlJIcUlwSFpYMGhBRTlObGpsUGFmJTJGSyUyRjNaJTJGcllxcWFsJTJCUyUyQm9YYjJFWXZyYVdHM2tjeXZMRzNJUnV3WSUyQmtnUEZXMlBmSmpaJTJCUnJ1d3VGYTIxaVJZRkFDS0ZLc0tmNnIlMkJtZiUyQlJlVFVEeHk2WXFvMjBMUVFwRThyenNvM2xrcHliNThRQmkyYk5pcnMyYk5pcnMyYk5pciUyRkFQJTJGVDclMkZtelpzVmRtelpzVmRsRUE5Y3ZOaXJ6Yjh6dklmNmJoT3U2UkVQMHRiTCUyQiUyQmpVYjNFUSUyRlolMkY0eXAlMkJ4JTJGUDlqT0hhZ3ZxV3NNdyUyQjFFVEd3UFdoMzN6MXpuSSUyRnpMOGhxRXV0ZjBxUDRKUnp2cmRSOWx3UiUyRnBDRHclMkYzNyUyRndlUm5HeFR0TkJyZUV4dzVEc0Q2U2VuOUY0Z3BwaHRvMnByWVNTUTNLZXRwMTFSYnlBaXUzUVNvUDUwJTJGNFpjSzVZekc1UTdlR1BFVXlScE15a1JTRWhIN01WMkl6R0FrRFk1aDNPU0VNa0RqeUN4TDhiZWFaYWdseG9PcHhUVzdxTFNXa21uM2NYMmVKMzRueCUyRndBcGNsTXNlbiUyQmNkSWVDNFFDWlFQWGpIMmthbnd5eGUyUmpUNyUyQjJlMGJSdFZITFQ1U1dobCUyRmF0NU96ciUyRnhXeCUyQjJ1Sld0eGU2SHFTdzh3dHhEdkJMJTJCeExHZWdQOHlPTXljZVFFYmN1bzdubk5WcFo0Sm1NdHdkNHklMkZuRDliRU5VMHk4MEMlMkJhenVSeVRySElQc3VuWmglMkZUS2lsNGtTSWFqJTJCR2RaMUhUdE04NDZTWFVlbkt2MmdOM2dscDElMkZ5a1AlMkZENXlPOXM3dlJiMlN4dlU0c2gzSTZNT3pwN05reU9vNU9LbVN1R1VNdlE5TU1kRjFtNDBTJTJGanZvQUhVZkRQQTMyWkl6OXBHSCUyRkRJZjJHd2p0NVFoMyUyQnczJTJCZGNGbnJpcjBHVzVLeXg2aGF2Nmx0ZnFESGRkVzVEYmkxZG81ViUyQnc2JTJGelpMUExiUTZuUDhBV3JwQWJ5M29KR0kya1hxa3JmeXlxUjlyT1U2SHJLV0hxMk44R2wweTZwNjZMdTBialpaNHYlMkJMRiUyRmFYJTJGQUhZbWRhOHAyaTJ0azhzanJJN21pVElUeGtqJTJCMUhKUTdodUolMkJMSlIzSzNzbnVxM2ZvMnJ1b3FRQzNpZHZzZ0QlMkZXcG5NSiUyRkolMkZtZTRNc3EyakM5dHVVYVhjWEVSM2RySjFqYXBINzJOVyUyQkZtWCUyRml0JTJGd0I1blRkSWtzeXpXMGMlMkZyeXhWWmd6Qm1Dc2E0ZUNaQUtIRElXZ2JQRHZLOWpxdWg2eGFXJTJCdFc4MXJETDZsb3pUS2FGSlFWQUIlMkJLdGZod3ZzNDdteXZMJTJCTlFmVHMya0Q5VUs4Z1FLbHYyWHA4U3RuUiUyRnpRMUdXMDh1JTJCbFpPMGQzZFR4eFFzaEtzS0htN2hoOWppcSUyRmF6aTZNeEVpSTVZT2EzTnl4Sk1qVnJ1eCUyQklybGN0bVEzVFM5MUUzakNHMmpISTA5UjFxT2RPZ0ZmOTFyJTJGdzJDTEtGWXh5SkJJRlpKT3dIZ01DMk5yeUczd1JucTU2dCUyRlpodXNaaWlodTdjTVd0NWlyMnpweWlrVUFVOVQlMkJZY3VXUjVwZFBxaWFjUXJXcVhDelIxVVNWQkFiJTJGQUhZcCUyRm53dXRkVmh0ZFRhJTJGZ1dWQk9BazhCY05HOUJUcXlrNGM2cmMyZHhlMkYzYzJrY0tKR0k3cXg0a1VqcHlSMEI2VnIlMkZOaEJxYzloYVN4cEhFUmFYUmFXSXQlMkZ1dmNvVFJhNzVQbHlRbiUyRkFKWnZZSSUyRk1VUzJTTkVMaVZURXlnVWpuVlc5T2xmdEk4aFZXVnNuU1hWeGZUR1M2bGFTVmlDUzJ3b2Rqc05zNSUyRm84cnJMNjlxd2Q2cElycUF3JTJGZCUyRllQdzlPbVN1YTUxR1ZKNzYyc3dRWExDRDFBaXJ5TlFyTWZpMiUyRnlWd3hLa0lqVzclMkJlempSN1BUcHIlMkJVYnY2V3lVSDh6ZmE2ZHVPRVBualQ3U0VXbXJ4eGtTWGF0YXpvd0E1S1klMkJTY2dEOXFJcnh3UTNtUFg3RWV0cUZoQXRxUHRlZ3p5U0Fld0E0NUYlMkZNSG0xZGNSSUdqTWR2QyUyRnFSSUtjdVZDdkoyJTJCUiUyQnpnbExZMnloam5MYUVTZmNFcXVidXJXOE01SHB6S3ZJcjFGYURsNzljUmJScjZTOCUyQnIyNDVHQ29hYyUyRkNqS3A2NyUyRndBd3clMkY4QUwzbGkwMXFCTGdQSk84Zjd0NHdQN3MlMkZzRTlmaE9IZXIlMkJWdGZnZyUyQnZhYmNKZTFGSnJQandaVlVVJTJGZHklMkZSOWxseUlGaXh1RXpqS0VqQ1lvam1HTTZqYWFqWjI4UmpCaUVpc0p6VUxUaTNpU0tSMHdib0hrVFhkV3QyMU9MVDVydTJBNVJsTjFrOFNyc1ZXVCUyRkFHRDVlbmExYVhBJTJCbzZwRCUyQjlKMldjZW5MJTJGbEJKUjhEJTJGd0NyblNmeTg4MFclMkZseXpsMG03dUpadEpSJTJCVm1YU3NsdHlOWGhZRDdjUDdTY2ZpVCUyQlhEWGN4b3NSMUQ4cnZQMnFXVWRsWmFkSFpXN2tQY1BjWEVZZVNuMkVLUjglMkJLSjlyaCUyRk5rUnUlMkZ3QXJ0YzAyNmV5MUZvb0pvOXlLczRJUDdTdFFjbHowYnJmNWplWHRLaFI3ZVlYMHNpZW9pUUhZTDI5UnYyQ2Y1VDhXUTdXJTJGTWolMkJack9LZDB0MUN0JTJCNmVEazd4TWFqMDVDYU54YiUyRlZ3RWdDeTI0OVBseUVDTWVmSjQyMzVmWFE2M1VmJTJGQXQlMkZYQzdWdktzbWtmVjdpYWIxZFBsSVNXN2pUZUZ6JTJCeEpIV29QZzM3ZWRRNWt5TkRJdnB5eCUyRmJRJTJCJTJGUWc5MU9CN2hGQ3VySXNzVXE4Sm9IRlVkRCUyQnl3JTJGVTJJSUlzTU1tS2VPWmhraVl5SE1GNWclMkJoQ05pcGN5RmYzbndEN2NIJTJCJTJGb1QlMkIxeCUyRndCMkolMkJ6aU55VzAxJTJCTnNlVnRNb01jNEc3Vkg4MlRDYnl4ZldNeHRVTWxuRElQck9saTU1SkloJTJGd0NLMlplTXF0aFlZT01WeEJOYiUyRnUySEslMkZzbDZKVTdYbHAlMkIxeERmYlQlMkZkZUZnbVBrblc3cTBlQyUyRnNaJTJCT29XVGNrNWZ0Um5yRzlQdElmc3RuYXRZMGl3JTJGTWZRNCUyRk1XaDhiZlhiZFNqeG5ibXlENDdTNCUyRjVreTU1Z1djYVpxRFBwMXlabzQyUHB6OFN2SWVQSE9uJTJCVGZPMnFhWE1MJTJGU0hpUHFjUmYyTTlmVFlmNzhYajhYSWZzNHFvV3NHc1E2NFRwcCUyQm8zMXpHYks5V1lmRkU4WjlUY2VJNEZQOWxucE5iV0RWZEdpdDlSUmJpTzRnVDFnM1FrcUNXOWpYNGx6a3NFMXo1MzgyRFU3V3pFS29xcTVVVkFvT0llVjl1UiUyQkwlMkZnYzdSREdzTU1jUyUyRlpqVUlQa29wajBVdkh0USUyRktuVjlIMUY5WDh2WENhanlZdDlUdVFvWUxTaWpreDlPVGolMkZsY01TOHElMkJhTG55OTVndW9OWXMycyUyRnJmRVhzTEx4S3lKWGpMSDRweE9kcHdsMXp5MXAlMkJ2Q09TY3REY3cxOUs1aW9IQU94VTFIeEolMkZrNG90Tm9aWXJpSkpvV0R4U0tHUmgwSUkySXlGJTJGbU4lMkJYbGw1NTB6NE9NR3Myb0pzTHluZnI2TXY4MEwlMkZ3RENmYXlVNlJZTnBsaERZTk1aeEFDcXlFQlNWcVNvSUg4dURqMHhWOE5hcHBWN3BkN05wJTJCb1FOYlg5cXhTYUp1b1lmcnI5cFd3dVNOZzROU0hCcUtiRUh4cm5yTDgwUHkyZzg2V1gxJTJCd0N3NjlhSlMza095em9OJTJGcTh4JTJGNU5QJTJCdzJlWG0wcThndVpvYmxHZ2xpY3BOQTRwSXJvYU1qZnkwT0t2cGY4bHZNdXNhNW9sMVphek9McVhTM2ppaXVUdkl5T3ZKUklmMnlsS2M4NmVNOHklMkZrMzV1c2ZLMnIzRnRmeU10anFvUlpaM3FSRk5HVDZiUDRJUTdJJTJGJTJCeHp0RjElMkJhSGtlMDFTRFIzMWFON21aJTJGVExSVmVLTnUzcVRENEY1ZE1WWmxteWxJWlF3TlFkd1J1TXZGWFpzMmJGWFpzMmJGWCUyRiUyRlU3JTJGbXpac1ZkbXpac1ZkbXpac1ZkalhWWFZsWWNsSUlJUFFnNDdHU09zYU5JNW9xZ3N4OWgxeFY0UiUyQlp2a0E2VksycjZWSCUyRnVQbGFySXY4QXVseiUyQnolMkZ4amIlMkZkZiUyRkE1RW9KTEslMkZ3QkZoMHlPSlUxQXlySDZvQUJib3FKSXRlYnR5SmtqWlA4QUtWczczcW5tJTJGd0FzeVc4OWxlczd4end0U014TVJLRyUyQkhnaHB4NTV3JTJGd0F5JTJCV3BiSUhXTk5qZUdLRmtEamxWdzUlMkJJUEd3cDhTJTJGdGNmc1pHVWF1UUh2ZHZwTldKeGpoeXlNWkElMkJpWFElMkJVbU1YTnRjV1Z6SmFYU0dPZUppc2lIc1J0bGwxdUxmNnJjTWVLYjIwdlZvVyUyRjZwUCUyQjB2N0dIc0xyNXB0dnE3bU9QVTRFbG1FaEhIMWVDSUk0a3AlMkJ6NmFPNyUyRnRlcGhCTkJQYnl0RGNSdEZOR2FQRzRvUjdFWlZLSkhyaHolMkI5MkpqRFBBNGN3M0hNZFIlMkZTaWlORzFtNzAyOEVpRUM0aiUyQkdXTW40SlU3cWY4QWpWc2xtdmFCcDNuTFNGdmJDaVRLQ1kyUDJvcFAyNHBLZnMlMkY5ZDVCVEZGSXlzNVpHWDlwS2NoOUI2NUp2S21yU2FWZGV2eGVhMW0lMkJDY0VGUXlqOXRSJTJGdnhNdHhaQklWOHgzT2kxZWtucDVVZDRuNlpkJTJGN1htc2tWeHAxMUpZM3NaaWtqYml5SHNmOEFtayUyRnM0Y2FQYXk2cGVRYWRFNnJKTXdWWGJvRjZrJTJCJTJGRURPbiUyQmRQSWtmbVN5R3A2UUExMnFjNEpGcFNWUHRjRzklMkZ3RGpmSTM1YThxemFGTmEzdXJLclhMbXNjZkkxZ1A3TlN2Mm4lMkZteXd4b3VJTjFEV1BLRFc5NURZNkswdDVJZmduYVVLZ0QwNWNsNDlJNkg3VFowYnluQkFtbWpTVnZoY3oycUVNNjAlMkJIblZSdzlvbSUyQkglMkZBRnNJdGZobmRnMXElMkZwTmR4bUl1RFFWVSUyRkVDZjhvWVJlU0xrNlI1bldCdzFibVQ2c1NEOEZHQmI0aCUyRk55WER5UHZic1dJVEU5JTJGVkdKa0IzMGpQS1YxUHBPc3JCZHVSTEZjUGIzSlk5VmRpdFclMkYyWHhaMCUyQjkxTzJzcElvSldMM0U1NHdXMFk1U09mOVVkRiUyRm1kdmh6bSUyRm0ydyUyQm9lYXBKbEJWZFJqV2RDRHNaRTJjZmV1SGR2ZlFXMEJuZ1pwdFZ2RUgxdSUyRmxHNmdqJTJCNWhIN0tyMHhIYzBwRCUyQllnOHdhMU5ERlpXalNXdHNyQ1JvaUdKY240NmIxWWRGMnlGV2VtenhzVzFDTjRFaiUyRlpsVW9mdWJPczJXcHhwTkdsMm9NUDJlU2JFZTV5VFhHa2FkcUZwSmFUMjZUMjg2MFlFVkJCNkVIeDhNZUN6ZHB1bmxFdHBIWVEzOEdxUnJGTmFQQThFZ0pjRmElMkZHcWhhZGFvMlhCR2xtYmUydUN6ZXZiR2VSbzJQY05KeCUyRjJTJTJGRGh0NTFzM3NMcFlMb0g2bmNJcTIxd1JVMVVjZUx0OUh4ZjhIaGo1ZjhwWGVyV2MlMkJxMlZySHFFMW9xUVdkdk5Md1VvaWptSkIlMkZPOVc0JTJGczhjalZIM0xlekV2TTJtWFdxeWFiTm96QjdTUzFXSjVTd0JySFduTHY4QTNaVWJmeTRvbmxhem10cktDJTJCSmxOb0hGRk5GYm1RYUh2dFRKOXJQbHpVN0dPTzZ2clJiZU5pb1FRTXJSeG1uOTM4SVhqNFlFMGZRTG5YQmRRMjA2MmwxQ1AzU1NyeTlYYXY3b2cwJTJGNExEc2lrcHM3QzNzMVdLMmlXSkIlMkJ5Z3BnNWxOT1gwWUFWcjdUTDB4WHN4Y3hzVmxoa3R3cEZQdExWV3diZiUyQmFuMGU4dHA3TFRZcm15SUxscHlUNmhvUncyJTJGdSUyRlRiZGx3M3Rhb0s0djdhMWRZMmRXNUdqUTFxVkhqJTJGd0EyNFZhaDVhMDNWbE54WkVRVHR2eVg3TEglMkZBQ2x5Zmp5Zm8zbnJUcmJWOVBSTkkxaTZnTThxUkVOQzhnYjA1T1VJJTJCTlI2blIxJTJGNEhJUnFPajY1NVZ1JTJGUTFTQm9nVCUyQjdtVTFpa0E3cEowJTJGd0JpM3haR3dkaXpoT2VPWEZDUkJTUFNaTlg4bWFtbDFNaE5zZmdsZFBpamREMUglMkJTMzdTOHM2WkxyRUVadDJ1RWUxVzZWV3RMc2clMkJsS0dISUdPUmVTJTJGNndPUjlkV3RScDExZFNRJTJGV0h0NFdrJTJCcjkzSUd5VSUyRnlzayUyRmslMkZXNUlOQVRUOVowZUFXY3pHVDZnciUyQm9JbGZjZ0J4c2YydlQlMkZBR01ZeE1TZUUyRDA3bTdQcUJtakV6aldTTzNFT1VvJTJCWTcyTSUyQllmTGNkM0ZKZVFSeHlvN0V6UVU3OTJHUTYwYlU5SGtmOUhUQXd0czFqZFZlTmwlMkZ5WCUyQjJuJTJGRWM3Wkw1WHN0VlNTNThwNmtZWnFWYlRyeXNpZjZ0V1ByUnIlMkZzcFZ6bXV2YURxMmp6c3VwMkp0QTVOQ2ZqdG1OZjkxVGpiJTJGWXljY0o4dG1nSlBxVjRKSkxKcEkzc1lMcUoydVklMkZ0QmdQOTFxNmpwSXk4Vncwc05Objh0RzExbThLV05ucVRyQXVtczVZaFR2eWN0JTJCMFI4ZnclMkZZYiUyRld3TGRScGZhVkVra1BPNTByMUhoakpBTFJTZzlIcFg5MiUyRndDemdTVzRUVjlIZ2E1dXBwZFZzcEZ0N2EwRk9NTnNoSEptM1Z1Wlk4ZlYlMkIwemZCbFpIcTNCTmlnT25tNTJMSWZESENZd01DSm1WWEk4SXFNWW56STRmODVsJTJCc1JRYzdlU0tWUlBIS3RzNHJ1VWtQQWN2OVIlMkZpd2JaYVkxcDVndHJIVW9pcGpualdaT280bGhSdjhwR3djUEw5cGNST1pvMlM2WmthWGd5cW9hRlZrNGhuJTJCSjl1UHFOeHdWcm1zV3Vwdll6YWxGOVMxSzFsVGk2R3Njc1lZTXBWJTJGRldVTnglMkZsd1lvU2pkOGp5Yk8wc3VMTWNVc2RtVVFST3hScm5INzVQUXRkOHZhVDVpdEJaYXBBSkkwWVBFNm5qSkd3JTJGYWpjZlp6ZyUyRndDWldoM0doVyUyRnIyd0gxdlNaMERYbFBpYTFtJTJGdVp1SzdNViUyRnVMaiUyQmJQUTFwZFIzbHRIY3hHcXlDdE90RDNIMEhJRiUyQlpGbmIzazhFTXFoeFBCSkhPaDZNbklVRGZTZHNzRHEzemZxV21SNmxGSnFlblJDTzZpSEslMkZzazNGRDBuZyUyRm1qZkMzU05WdWRKdVV2cktRSmRRT3J4YzFEb2FmYVNSR3FySyUyRlJseVUzMmkzWGxuVTRSSE9ZckYySXNyMWh5OUptJTJGNDk1JTJGOEFpbVQlMkZBQ3NLdGUwWnAlMkZXMUt4ZzlLYUwlMkZBSTZOaXByNmJIJTJGZDBYODhFbjJsZkZYMCUyRndEbHo1eDBmemJwQWxzSVlyTyUyQmdBRiUyRll4QlZDT1IlMkZlSUJUbEUlMkY3TGY3SEpwbmlMeXo1bTFUeXJxVnRxMmx5OFpZenV2VldYOXFPUWZ0STM3V2V1ZkpubkhUZk9la0pxVml3U1phTGQycE5YaGs3cWY4QUpQN0QlMkZ0WUZaSm16WnNWZG16WnNWYU9jdCUyRk5qOHN4NW50Sk5iME5mVDF1QmF5eHJ0OWFqVWZZJTJGNHpxUDd0djJ2c1oxUEtPS3ZoejBDc2J3TXpxU1NIUFJndzIlMkJMMyUyRm13cmxoZUIlMkJEOWV4SFFqeEdlcWZQSDVPYWQ1bHVwZFcwaWNhYnFVM3hUcVY1UVROJTJGT3lyOFNPZjJuWCUyRmdNNTlIJTJCUWZtdTVuV0M5bnM0cmJsOFU2T3pNQiUyRmtwd0dLciUyRnlrJTJGT0J0T01QbG56VE1Xc3lSSFk2ZzVxWXE5STVqM2klMkZsZjhBM1hub3hXVjFWa0laV0FLc053UWVoR2M2OHNma3Y1UTh2QlpyaUU2cmRyUSUyQnBkQWVtQ082d2o0ZiUyQkQ1NTBWVkNxRlVVVlJRQWJBQVlxM216WnNWZG16WnNWZiUyRlY3JTJGbXpac1ZkbXpac1ZkbXpac1ZkaU56TkRid1NUWExCSVVVbVJqMEE5OFd3TmZQYUpiU20lMkJLaTJwU1V2OW1oMnBpckFQT041cE1XaVN0b2lQSmZNMWJWSTR5eTFHOGpEa0Nud3JoRHJENmpGYiUyQldiQzdXdDM2RWNsJTJCQ1AlMkJLaVpIYnR5SmFqZjVXRHZQOXhaUmFOQ2ZLdHhLYjR6ajA0SU9SNDAzSktrZkFPZkglMkZXd3M4NGFqTmQzRUVrbEZ1U09VdEslMkZEUlZYaUtkdVFPRkllZWF0cGswRjVQZWFVaiUyQmxBVExJWXdTWWhYZCUyRmglMkJ5bGV1TFA5VTEyeWttaVdPMnZyV09XNG4zUHhnY0FGWG1hdHkzY2Y3NyUyQng5ak8xJTJGbHZvMEVlalQzODhTdkpxRE1qRnhYbEV2dzhUWDlsczVoJTJCWSUyRmtTVHluZSUyRnBIVFZZNkxkc1ZVaiUyRmREdDFoZiUyRml0djkxdCUyRnNNZ1JXNGR4bzlYNHZEaXlTcWNmb24lMkZPJTJGb3lZSnNRR0hmSkw1RnNyWFVkWmswbTZ1VGJSM1VUdkhRQWd6UmprT05TT0RsYTVHZ2NYMCUyRlVKTkwxUzB2NDFEUEZJTm04RyUyQkUlMkZyeW0lMkJITUQwazUydHhlTHBwanFQVVBmRjZsNVg4eFdsbTk5NWV2WmxndUxTZGtqUjlnVFdqclhvdlA0WFRFUE02d3d6S1NLQ1Q0dHVvSU8lMkIzdmtlODB4WFUydFcxM1pRJTJCbzE1YnE4bnBKOFVsRUxWcCUyQjNzTUJXT3NYT3RXeTJpRXlYTnVDeUl3NU15ZjhWc2FzZUZQN3R2aXpMNHRxJTJCVHpOVWZ2VCUyQk9VNm5wa3k5WnJjaVZBTzVYdyUyQmE4c2lzMDFycCUyRm1DMDFPNVlyU1dKNGtYY3lGaUI5bnNLJTJGdDVmbGp6TFh6TWxnMGJSUXVqUUVTYlZsRGNsNUllbkw0a3llZWJQSXA4eTZqNWUxRFNFalgwWFdPNFFzcUtZayUyRmZSZ1YlMkZiNWd4OGNITWU1bEdVb200bWp1UG56U1clMkYxT2ZWTDZSN3NKVzJrZUtGVUd5Z0doSUozUEttTlZ5JTJGVEFrMXBkV2M5ekJkcnd1RWxjVEllekElMkZFTWolMkZtalhidlF0YVczdEVCZ0NKTTZQdUNIRlFFeHRpelNLSTFESEp2NVZ1eEtyV01wJTJCd0M4SlBoJTJCMHYwWkNOTHZyZlVyR0c5dGpXT1ZRZmtmMmxQJTJCcWNQZEhtZTN2SVpWMjRzS24yT3glMkZESkJTeXp6QnBscnFXblNRU3hMSTBQNzZFc29JRHFPMyUyQnNNZ21sYXhjZVVkUlhVN1pTOWpKUmI2MlhvVVA3UUg4MGYyayUyRjRIT2dYZHlWWWdIcDElMkJXUVc4ZzRUelF5b1FwSklWaDFWdWhHSkNoN0ZHOWhyZW1wS2hXNHNyeU1NcDZobFlWJTJCJTJGT1dhJTJGYlhmayUyRlUwWkpPRUwxYXl1MiUyQnkxUDkxdWR2M2lmOE91Q1BKJTJGbWhQTDF4YWFKZXR4MHk0ckZGTXgyaW1KSlN2aEhMWGolMkZyNE4lMkZPOUclMkZ3QUoyOG8lMkZZdlk2OSUyQnFPTWdkbFl6cVBtV3k4eHI2MTVhb3VveEFBM2RrNGRKQjAlMkZmUkdqb2ZCbDU0VSUyQm5DeVNSTlNhMWwlMkIydlFxMzg2MSUyQnk2NUdQS2N6dHF4alk3TkV3NGpZYlUzMnpvTnBwRjFxZnJ3MkpYNnlpZXJIRXhvSml2V0lmNWZIN0RZWW5aYVkzcE45TjVOMW45SkpFYnVJd3lSb2lzWTFrRGJwVnUzRiUyRmlkTTd4cGwzWSUyQmFkRnQ3bTV0bGUzdklVa2FDWUJ4OFFvd29mNVdCJTJCUE9ORzBqdkxZMjhxbFJVZ3F3b3lPT3UzN0xwaVhsM1hianlacWs3WGdsbXRaSWZURUtOUUdoNVJFRnZzeHI4WExqZ0lyZFdRZWR2eTdHaVFQcmZsNFNOYXhWZTVzMXE3UnAza2klMkZhYU5mMjAlMkIxa1QwN1dHQ3F3Y01qZEpGTlFjOUMyTjlCcU52SGMyOVdpbGpTVkdJMkt5Q29wa0Z2JTJGd0FvdEh1OWNPcTJkMUpZVzB4NTNkaEFvNE81M0pRdDhNWWY5b2NNRnlCMjNad0dPUUlrZUNRR3hxd2ZJc2F0TlFTUXJJcm1PVWJySWhvUWZFRWI1TExIelBQNlgxVFY0UnFGbzRvekZWTDAlMkZ3QXBEOEVtRm1zJTJGbHhlV0JOeG9FcHVJaHViU1FqMUIlMkZxUHNId28wJTJCNGx0VW1XN1JvNW9qUm8zQlZoVDJPV0NpMXQlMkJiUEoxcEZDZk1YbEpndGwlMkZ4OTJWQ3lSSHV3amI0a1glMkJkZjJjaU9sRzJodWhjWDJuOEpJMkJFOEZISHpNVGIlMkY4VFZjNkZwV3V0YXlTUGJsSkVtSEdlQ1FWVndQMVpHdGNzSWJlNU4zcDBVaTJNbFdhTTdtQiUyRndCcFE0JTJCMUYlMkZMa1RHdWxobkRJWW5ZcHJmNnRZYXhheHhDRGx4SWFHN2lrbzhaN2tHdFdyJTJCM3l3eHNkR2wxV3dpdHpHYmtna1J6dWdER25SbTM0UjAlMkZaYklKQlp3eHY5WWhBVng4UXAwSlBpQm5hZkpsMWVYZWtMTmR5cktPWEdOZ0FEUUQ0ZzNHZyUyQkU3WThXeVRMZmlITkpiYlF2TkhsZSUyRmU1MGVRWCUyQm5YQUQzVmc1M0VvV25LSW1oUW1uN1B3djhBeVlSWDl4cWwxZG1YV09TM1hIaXFNbnAwUUVrS3ElMkJBNWZhenJRd0hxT21XbXFRR0M3ajVEOWx4c3lueFZzRnNMZU8zOWhiMzl0SmJYTVlsaGxIR1NOdWhCJTJGVWZmT1pYeTMlMkZsN1VWMDVuNU1ncnBOMUxUakxDVDhWbmNFaiUyRllmNU9kdDFuUWJ6UjNKY2VyYXNmZ25BMiUyQlQlMkZBTXJZQiUyRjVWM1klMkJkdEF2aGVmdWJybiUyRnVOdXgxamtRVVlrRDdVYm5pciUyRjZ1RXE4RDFyVEZrOVhVZE5nYUhpeCUyQnUyWFZvSFBjRCUyRmZiZnN0blFmeUFlYiUyRkZrdEMlMkZwdGFTRjFWZ0ZOR1RpWEZmaUElMkJMaiUyRmxaQzlXdU5kOHA2a05NMWUwNGFuWXNZMm1ZN1RXJTJGWkcycEtqZnNTNEswMDNta0NIemw1V21ETGF6ZXJjV29COVdDdlgxRkIlMkZlUXQ5bHY4bklvZllOUmw1RlBJM25qVGZPMmxpN3RhUlhrUVVYbHAzUmowWmY1b24lMkZZYkpYaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkYlMkZXNyUyRm16WnNWZG16WnNWZG16WnNWZGdIVlk5UG10SGkxSmxXM2NnRXVRQlVicjF3ZGdQVWROdHRUdHpiM0lKV29aU09vWWR4aXJ6SHp0UCUyQmkyMGFUeXZkbTZ1RGNKU0NNSklQVFZoUldLajdCYmJpMkI5YjhrZVpyblYzRnZiZXJic1FzVndIVUtGSjZ0VThoU3ZoayUyQiUyRndBUEd5MUd3dkxPa3FLNWp1MGNJUDNZUSUyQm5JdEFQaWlmOEE0bmtrcGhLUWFRT2s2ZW1sNmJhNmZHUVZ0NHdoUGlmMmolMkZ3V08xTFRiUFZyR2ZUciUyQklUV3R5aFNXTWpxRCUyRkVmczRNekVWd0lzZzJOaSUyQlZQT0hsbTU4cDY1TnBVMVhoUDcyem5QJTJCN0lXUHduJTJGWFg3RW4lMkJWZ1cyOHM2M2Yya1dyMjltNzZZczZ4eVhRcHhVZ2dOVWZhNGl2MnVPZW45Yzh0Nko1aXQwdDlhczB1bzR6eWpMVkRLZjhsMW95NUVMN1RyaUdXMzBMeXRwN1E2RGJzMGQ3eEk0T3olMkZGV1BseWNtTnZpYiUyQmZLeml1ZkVUczdXWGFoT244UGg5ZFZJbjZhNyUyRmV3RHpQZDN1a05wbHpZdHh0RWhXMmFkVkJLelJrdFRrYWxPZGYlMkJCdzYwYnlkWiUyQmFOUiUyRndBUmFQcTBWak9JdzUwOWJjTElrdyUyQjE2eWglMkZqUm0lMkYzYW4yOGRlNmRMWVRYR2s2eER6dHB4OGFIb3luN0xxZmI5bkkzWVglMkJyZVE5VGhTM3BjV2hjdmF6TUJXU0UlMkZiZ2FRJTJGRjhQOEFKbHJyRHZ1bnZtcnlCOWJ1RnZ6QXRucmtRRDg0eiUyQjZtS0hrR1J0dSUyRjgySFduTyUyQm9hZExwVTVhQzRaZVVMOUdpbCUyQjBqS1IwYU9ZWk9MTzgwanpobzBkM1p2NmtNbjJXRlBVaGxHeFZoJTJCeTZIN1dRV2FPODByVjFodndCTWpjZlVBb3NrVGJMSVAlMkJOc0lyNW9TdTEwdGZPdDdJa3Q0dGg1aWpRQzZoa1NzZHo2ZndmV0lpQ0NyN1VtVGolMkZsNUpHJTJGS1RTZFRqZyUyRnhESUxoNFVDVWdIRDdQOEF4YWZqNDVHUE1ka1l0Umt2YldmNmpld0VYTmhjcjlwcFQ5cEVWYXRKV254SnglMkJ6blJQSWZteiUyRkZ1amZXNVklMkZTdkxaJTJGcTk0Z0JDbVFDdk5RZmlWWCUyQjF4YjdPQTJObGVhWCUyRmtyJTJGQTE5SmIyck8lMkJsWGJjN1V2dUZidXZMJTJCYiUyRmlXQzdNN0hPdWFycGRycTlqTFkzaThvNUJzZTZ0MmRmOEFLWE9QNmpiYWo1ZHZwTEs1VVNCZDBmY0IwN092OGNNVDNxa1A1bDZ0cmtXcDJrTmk4c1ZyNkNTaG95VkR5SDdSSkhYajhPUXBmTmZtQ04xJTJCc1hjc25CZUNyT2ZVQVVkRkhQNHVQMDUybnklMkZxMmc2dmVSNlQ1aGdYOTRBbG1zcCUyRmRzdyUyRjNXJTJGJTJCVTM3R1NIVWZ5cDhuNmhVcGF2WnNlOERrRCUyRmdINXAlMkJHQ1hOZVR3TSUyQmJ6ZVd4dHIlMkIzU1ZIRkdNWktNUDhvQnFyJTJGd0FOaDlxdjVncHIza1ZmTFY5emsxTzN1SWpGT3dyenQ0dzFHWmhVZXFuMlA4ckpENWklMkZKSnJLMmx2Tkt1ZnJTeCUyRkVZQ25DWGlPdENwS1B4JTJGMU01MDNscTd0cER4RE5VVVVHbFB3eUp0V1FmbGZwTVdzZWFGdExnc3NadFpuREoxVmh4Q24zNjUxZTM4cWFucCUyQnMyWlg5NWJyS0clMkJ0UjdVVmZpbzYlMkZzMTZZUyUyRmszcEdtV3h2TlIlMkJzcEpxZkVXN1duUjRrcnlMRlczUHFOJTJGTCUyRkxuVzhJMlVzVzh4JTJCVm83MW4xTFQwQ1hwM21qR3dscDMlMkY0eUQlMkZoc2dsOW95WFVheFgxdThMb0NZMmRTdFYlMkZhRyUyRmdjN0pURWJpenRycjB6Y1JySVltRHhsaFdqREpDWFFvZVZlVzlSdjhBeTFQS0wyNWt1Tk85RUxFbyUyQklqZ2FvS2slMkZBcUp5enF0cmRRWGtDWE5zM3FReXFHamNkQ0NLN1pGUE1QbDFZZzk1YUxXQTd6UWpmalhxdyUyRnljQjZKck56WTNCVzd1QWJBUktnVXFTUVZJQzhLZkNxOEs4dmh4cTl3bG50SzREdnRKMDdVZ0JmVzZUVTZGaHZUd3FOOEZSeVJ5b0hpWU9qQ29aVFVFSEg1RkRDOVklMkZMNnd1U1o5SWMyTTNYMHR6RWZvNnAlMkZzY0w5QiUyRkx5OFhWSk5TOHkzWXVvNDFhS3owJTJCRWtRckd3b1dsTzNOMnpvbVZURFpWNGw1bjhzM1BscTk0b1MlMkJuVGslMkZWWmoyNyUyQms1JTJGblglMkZoc01OSTg5M1dqMmh0MnRoTlZTRXA4UEdTbEJLJTJGJTJCU2YyODZucU9uV21xV2NsbGV4aVNHUWJnOVFlektmMldHY28xM3loZGFWTVVUOTVBMzl6TDBERHdQZyUyQklaYzNwUGx6VTVkU3RHYTRJYWVOZ0daYUFGV0hKV29NT2M1djVFMUI3V2Y2dGNBb0QlMkI1UExiM2pQMGZZem80eElZclpJbzVVYU9WUTZNS01yQ29JUHRpZHJaMjlsQXR0YW9JNFVyeFFkQlUxT0w1c0NzTzglMkZ3RDVlNlY1NzA4UlhOSU5RZ0IlMkJwM29GU3RmMkpBS2M0bSUyRjRYT0lXWDVSJTJGbVZvT3B1bW13SXlTQXhOTXNzWmhaRzJxM01xZW44MGVlb0tacVlxOGw4aCUyRmslMkZjZVc5UXQ5WjFEVTNXNGdQSkxTMEpDRUd2d1R5dFQxVTMlMkJ4NmFybldzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjElMkIlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhVelpzMkt1elpzMktvWFVqSUxHNDlFMGs0RUtldEs0M1RZa2hzb1FwNUVxR1p2RW52Z3AxREtWYmRXMkk5amhEZGFEcVQlMkZ1TExXSmJPelA4QXVsRVZuQVBWVmtiNGhpcUI4d1dVWG1TJTJCWFRZV1FpM2lrWnBodVVscU9LbW43UDhBTm5PdFJzaVBXMFRXVUtxRDlvZmFqWWZaa1ElMkIzJTJGRExuWXRIMFd5MFczYUMwQkpjOHBKSFBKMko4VGhWNXU4dEpyZG9acmRRTDZFSDB6MExqJTJCUSUyRjhhNGJUYnhYUVBNR3ElMkZsOXI3bVNzOWpjVU4zQ3YyWm8lMkIxeEQ0U3AlMkZ6Wm5hTllodGZObWdSYWhvN0pjTXdFMXBLQ0FTUDI0NiUyRnNuJTJCWmY1OGdzdWdXV3RhUEZwMXhSTDIxcUZrRkN5UDNVOTZZUiUyQlVmTXQ3JTJCWCUyQnF2cG1xRXRwVXNuR2VPdFFqRTBGeEQlMkZ3QXpVeE95JTJCNWtIbUdDT2ExczclMkJWZUVzRllwSEkzU3Z3eUJ2RGk2NDdSdEgxYnkzcUVYbVBUNVZsZ25XbW8yQzFBbWo2cklySDRSTW5WY0N6M0Z2SjV4MXBJcVgyaDMwY1Z5M291djJuUUVla2E5WFpXNVpKTlB1bHQ3ZGJacFRMYXNQOUhsWVVhbFA3dVZmMkpsSDJ2JTJCRXc4OTFaelkzdHZxTnRIZFd6ODRwQlVIb1FlNnNQMldYOXJDN3pKb0VPdTJYcDdMZFJWYTNsUFk5MGIlMkZBQ0h3aTBJYWhCcXRkT285aEtmOUxqWTBWZjhBTFUlMkY3OHliWkZENTkxalMzUjNnblJvNVltcDRNakE5c25Ia3I4d2VSaTBMekpJSTdwUUV0ZFFjMFNZZEZXUSUyRnN5JTJGNVg3ZUglMkZBSnc4dUxxTURYOXFnJTJCdFJMJTJCOFVmN3NRZjhiTG5KYnV5amNORktuTkQxVSUyRnc4RGg1cGZRbzNHYzQ4N2VWRmhNbXEyS2Z1SE5ibU5SJTJGZHNmOTJLUDVHJTJGYSUyRmx5UGVYUE0lMkZtZnkyWTRwbWsxUFJxZkJCS3BOd2lEcjZFMyUyQjdPSDhqNTElMkIxdWJYVTdKTGlLa2x2Y0pXakRxckRkV0glMkZFc1Y1UG50b0ZpdVV1UU9GeEZ2SEtwS3NQcFduTEpaNWI4dzY1cDF4RWd1WHVJcDNxOGQwN1AxJTJGWlZtJTJCeCUyRmtjY2JyJTJCaG0yMTI1c2JQZ2dYOTVBWnE4RlJoeTNwJTJGTDhTcmsxODFhREhxZW1wcXR2Ukx1MmhEbmdQaGVNRG1WJTJGMlAyb3pqc3JLTFc1anU0RW5pJTJCeTRyUTlRZTRPTDVEJTJGQUNwNWhndTdpT3dra1VYRnhENnl4OURXTThITk1tR0pGRkRSRlJRaW9QVUhJaHJtZ3JBWHViZEsyejE5V09sZUZlcEglMkJSa3d5bUNrVUlxRDFCeEJwV0lhTnEwOW8zMVdVUnJab2llbTMyZVBFaGVDSUI4VlYlMkJMSmNHQjNCQkh0a2ExTFFYVm5lMFhuQzllVVElMkIwdGV2SHhYQTJseGF6SGZXNjIwcngyYXRXNGdrU3FGT1BDZ2R2akRDbFZ3a0E3aFdZWnN3elpGWFluTkJGUEcwVXlDU052dEt3cURpbWJGV0U2dm9FMWhJYnUwQmUzQnJRVkxJUDhyeFhKUm85MmIzVDRaMiUyQjFUaTN6RzFjR2tBaWgzQjdaU1JwR3ZDTlFxanNvb044TnF1elpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOUR2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZpUG1ieW85MWNmcHZRaUlOVlQlMkIlMkJoNlJYU0Q5aVh3bCUyRjMzTiUyRndXUXpXOUFYWG8lMkZYYUZnN0wlMkIlMkJoSzBtamRCdWFmekFDanJuWWNEVFdOclBLazhrWU1zWkRJNDJOUjQwdzN0UlczejFwMmw2aG8lMkJvdExBZlhWRTVPZ0RWbGpBJTJCTGolMkZ4Wkd2N09TMkJiZWFSYnNjcEk1WXVMUXEzRVRJZmlRY3YyWlZQOTAlMkY4QXNNazNtaTFGanFCbnQwQ3BjSUhJVVUlMkJOVDhSRlA1dHVXUkRURkV1bHdQYVA5WWpWU2ZWakJJRkdQTSUyRjdCdkhDT1NYcVhsdTZ0cm5USTF0N1kyWmolMkJHVzFZaG1RJTJCSmNmYjVmelljWkJQS2wxSTdHUlhIS0dpM0FZJTJGYWpQUnZkc25RTmQ4QkZGRGpuTCUyRlBXaEphWGd1SUtSdzMzS25na2xQaSUyRjJQeGNzNmprWTg5MlVsM29ucXdvWkpMV1JaZUFISWxUOEQ3ZkpzQVZCYUxwVWV1ZVM5UHRyaVlQY1d5a1FYa2ZaNHlWREQlMkZKUDJXd1g1WDFOSjJOclFJR1hrb1hwelE4SlA2NUdQSmZtT1RSNUcwelhMbUdDemxZbXpoWlBTZUUwNWNlUDdVVGpmbGlPaGFna1dzM0NXMGdrVVhiUFpqb1pWa1k4a1FIcjhPU0hVSlpENTQwdm1ZdFZSQklBdm9UbzI2MEpyR3pVN2N2aHphSjVqZ20wdDlPMXU3Z2l1JTJGUmRZJTJCSjQ4b3lDZyUyRmQ5UXlmWiUyRndBckpoUEJGY3d2YnpxSGlrQlYwUFFnOXNndCUyRndDU0xwSnk5cHhuaVBSaVFzZ0g4cmZ6WUI1cWwlMkZrcTFoWFU0WmlnTndqc2l6ZnRlbVUzVWY1SnpwJTJCUlh5bG9GJTJGcGozRnpxWWlSM1lyYXhSRXN5eCUyRnpUT2FMNmolMkZ5cDhDWktzU1VPelpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOUh2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZnMzVpUHJNRUZsZDZYYlIzQ1JNJTJGcm8xZlVJSUh3eCUyRnM0VSUyRmxycU9rejNjMWxZUW1FTkZKSThEQ2dSeklESWc1YjFKYXZUT2lhalpMZjJjbHMxS3NLb2ZCaDlrNXlkcEpQTCUyRm16VDlaY0JJV1kydDVzRm9EOExzNUMxJTJGd0NEa3lRNUt5aldkTEdpNm1sM2JyU3l2S3h1bzZJNThQOEFKUFZjbE9pWFp1clBpNXJMQWZUZjVmc243c0UzZHJCcUZxOXZMUjRwVjJJN2R3eSUyQiUyQkYyajZYZjJGNWRTM0VxTmJ5aFZpVmE4aVYlMkZiZmFnNiUyRlpYQmRqM0tuV1VSWEx6WUZZVjVuOG4zdXM2dXQ3YnRFSVRHc2JjNmhsNDE4QjhXRmQ3NVltOHN2SHFWcVByUWlDc0pTUGlpa0gyalFmc05uU2NheWh3VllCbE94QjNCR0cxU2J5N3JmNllnWjVLQ1pmdElCU21IZUZsbG9kbHA5NUxlV3FsRE1LR0lmWUI3a0REUEUlMkJTdXpaczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRiUyRjB1JTJGNXMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWkZmTSUyQmlwTFclMkJTSlpBZjcxQ3RhTVBzeWdmOFN5VlpSQUlJTzRQYkNEVzZwUDVZdkRkNldpdTFaYmMlMkJpJTJCOVR0OW12JTJCeHc1eEczdGJlMVZsdDQxakRIa3dVVXFmRTR0Z1BOWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlQdiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14ViUyRiUyRloiKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCAjMDBhYTAwfS55dWktc2tpbi1zYW0gLnl1aS1oLXNsaWRlcntiYWNrZ3JvdW5kOnVybChiZy1oLmdpZikgbm8tcmVwZWF0IDVweCAwO2hlaWdodDoyOHB4O3dpZHRoOjIyOHB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LWVvZi5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC1lb2Yub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTAwN2I1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LWVvZi5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1kaXYuYmFzZTY0LXNpbmdsZXF1b3Rlc3t3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ0FBQUFBZ0NBWUFBQUJ6ZW5yMEFBQUFCbUpMUjBRQUFBQUFBQUQ1UTd0JTJGQUFBQUNYQklXWE1BQUEzV0FBQU4xZ0dRYjNtY0FBQUZyVWxFUVZSWXclMkIyWHoyOGtSeFhIUCUyQjlWZGM4dmoyZkc5dUlrbTJ5VWVGR0VoTkNLUXdCcGoxeVJVQkFucEpVNGNlWlA0TXhma0J4eTJHTzQ1YlFYdUVHUW9oVUtpZ1ElMkJzQkJFMXNiWVh2OFl6JTJGUk1kOWZqVU4wOVBWNW5GWkE0a1paYTc5VzNxdXU5ZXIlMkZxTmZ5JTJGUHdKZ1p0eSUyRmZ6JTJGWjI5dnJwbW1xaGxXVGdtRmcxVXBiZldoWWhHNllxMmNGaSUyRk5yajluSnlXbnglMkJQSGplYWZiTVRFelB2alZCOSUyQjZkJTJCJTJGZXp3ZUR3VjFCZkh1Yml2a0MzbFp5YSUyRjRtN05wOFVaWVhod2VISDc3MzNydnZDMEt5djclMkYlMkY3cDA3ZDM0cUlqeXZyNjNSTmI0bDRDYnNSVXJOcnE2T2Z2ZlJSeiUyRnhEeDQ4NkElMkY2Zzd2WGhYOVpJZiUyQnA0Sm9tYVRvWmo4ZDdQazFTRlJGWGIxYVdvZHEwOWwlMkY5WVp1JTJGQ1dNVkw5ZSUyRmFWRlZRVlVSRUVHOHIzVlVFWjRjWCUyRkhMMzAlMkI1c2hSdEFoRnE0d2dnTmI2R3JYZ1ZhMksyall0QUNJSHY3U3o1NFRmSGpXV2FnQk9CeTBYZ3QlMkJjakx0d1F4VkNwTndVUlFhdDFEZFlhVDdwd2R3S0RGQTZuY0hnRml6Sm1TYjNXTFBEYTdQTUlWbGIyZGFxWnhkT05VbkFldEVvakVkQkdpWFhoVG1BamhaMCUyQjNONkFsemVFUk9IMVRYaVdHZiUyQmN3bWtXWlluQWZBa2R4MXBxJTJCaFViVDl6M0lFbFVKbFZoSTRXc2dDTFV5Z2dpNE1RWWQ0VlhObUNZUnFYT3NwVjdVb0hiUTNocEVNZUxBazVta0ZZUllsV0klMkJIWjZDVER3a0tTUXFyQTdnRmVITUYzQzZWeVlMbUZaR2lLQ0U2R3JNRnNhV2I3eXVWT2g2Nk4xRmtVVXBCSjNUeXZGb3ZUb0JsOVhNYk5ZMmJaNzBCc0tmVzk0aGJ5RXJvc21YcFF3eTRWZ2tDak1pemp2UlJpazBFdGlMTndhZ0JmNDY1bHdPcXRrRVRFbjYwWFQxJTJCbFRhenJwS2xSJTJCS2tvb3kzWGZiM1dqM3dHV0pSUWhubmk3QjUzcTVGcVo0JTJGVVI3UFloR014eXVNd2dXVnFUeHJZV0F3WllRWDc4SjVpOGllOXR4U0Frb09xcVFBcWszcEJnS0xEaGxZNVhWS1BDaTN3OTdZUm9LU0ZhY2VDZ0YyaHFTWFJCUFFBSU9jWFJIOGhQJTJGMHk2JTJCUnBXTHJFeWczU2JTOXRtemdnekpRU0xRWm80eG9PRThVYkNzSmZRN3ppNmlhSWl6WjVPQlZmWERLUGlyZVdDJTJCdkFZV09CcWVzemw5SmcwM2FmYkg2T3FHSCUyRkJTVXJxYnJGSVhpSG9pRURDJTJGUHlTaTJkOW5uWkhKRTdvcFk3ZGNZJTJGZGNaZWo4NHpwUEdmWTlVdzJFcllHQ2YyTzRtVVZFekVMV3RxVXhaS2pmM3pLMmNVUnppY01SeSUyQnp2YnVIOHlsRlBxWElQcU5jekNsS1kxbVVaRmNuU0RLa3YlMkZVTnVwdGJXRyUyQkx3JTJGTWglMkZ6cllwS0JIS1YzT05PWHpZeGVWMjB6NDlxaHM3Z2FNV0lqcVFRaUJ4VlhCNGlyZzA1eXo0dSUyRk1waWVvSnVUTGpESmZVSllCekJBRlVVSGtoTXZMdnpGUHV2UTJKdlEzZHVoMFIlMkZqdWlEUWRJbjZNSmR2a3hUYWZaVVB1YU42VWFPbzZVTnRnTmw5d2Vib2d1d3FvQTVmQ2pFdXNOQ3pFOExKUUZSdU5yenBRRCUyQnJtWk5NNTUlMkY0QTV6MUoyaUh0REVnNmZaSzBqMHVIbERyaDJONGkzUHR1YyUyQkg1dGpwNUhsaVdRbW1PVUFobFllMHJxVXFXU0VPaGNaMDVBdkUxVWRDb2xTUUphSFdsU1VZZ0p5JTJGTzJmRmZvJTJGMzRwaXBoRk9aNE9ydk5kTDVFSlpiY21FOE9RekZ4SUpFR0VnSWVFMSUyRmhyakpMeFpjT3JJVnBWQzdUVzAwV21MV3lBTURFcyUyQmk5d1ZKRHRHMTdZMjF2Vm1OeExLcUlPa1FxcW9xMnFIT1JtZ2o5VVFjemE3bWdGbTRHbWlEak81QzcyRFNvUTZ1UFZUVyUyQnp1RlVjUTJ0ZUtkNHB6aGQ4YjZOdTZqZzd2WnNyYjFyQ2xFSXhodTdRMzd4NDdmSXkzaiUyRmk4aXFxbFV1RVdURk4lMkZPck1VM2ZFRXVoVU04RklQRHFaZ2NSSVZoc0FYeHRqR0RHUzVNJTJCUCUyRnYlMkJtN3lvcFZyUlZzUGFic1clMkJZRzFUJTJGeTNLYWhxU2c2Y0hSYjVjVG10NVpYaHhRN25TNnlac1ZXT2FqREZidzJKU0NTR0VJc3V5QyUyRiUyRm8wYVBwJTJGdjclMkJyOU5PNSUyRjVnTU9oSkxObiUyRnBRTHJMZnc2dGtLS29yQ0RnNE5QUCUyRm5ranglMkZMT3o5NmgyZW56eVp2ZiUyQmZ0SDl6YTJmbTZxTHJuTzl0R2sydlk4NmYlMkZNbGlXWlJkUG5qejV6Y09IRHolMkIlMkIlMkZpZmltb3J6djMxQzlYNzE4RyUyRllyQ1lTTkphNUxnQUFBQ0o2VkZoMFUyOW1kSGRoY21VQUFIamFLeTh2MTh2TXl5NU9UaXhJMWNzdlNnY0FOdGdHV0JCVHlsd0FBQUFBU1VWT1JLNUNZSUklM0QnKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCAjMDBhYTAwfWRpdi5vdGhlcmRhdGF1cmx7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQm9BQUFBYUNBWUFBQUNwU2t6T0FBQUFBWE5TUjBJQXJzNGM2UUFBQUFsd1NGbHpBQUFMRXdBQUN4TUJBSnFjR0FBQUFBZDBTVTFGQjlrRkJRMFdEV3dxd2p3QUFBTk1TVVJCVkVqSHJkWmJhRnhWRkFiZ2IyYVNURzZHVGk2bVZJd3hOeEY5cUZJMFJRbkZVcWlZYW11dFZ1dExhMnQ5RVkwb1BnZ0ZvWWdQUlIlMkZhZ2hZdmlBJTJCaUlBWXZtQkpLb1lXaWlCQ2lnVlRUMUZpc2JVaHJFdE5rSnBjNVB1UWtqR0VtSnFrTEZtZHoySHYlMkZhJTJGM3JYM3R2bG05NW9TJTJGTG9rdVp0SXBiZHZBczdLRnRMMjJ3amIzVjFDNDF1cHkya2UxRFhDMmslMkZCanYxSEhYRHJia0VhbWc3bFgyUDhRVGxkUTJVdGZPQjh1aUpzSE5pQiUyRmlrMEdtTyUyQmdaSXhnbkdBNTluR0NNb0pQZVFhWVAwNDdpQkRYWkVvaGtBWW9mNCUyRk55S2xaUmRSJTJGMUFTWkNub09NaFdrVWhlTXo5RjFsYUpTUlozZ0VxVncxaXBaUWpjb0JScmJUM0V6OU9KTGhaa0hHNUNEOGw4UTQ3cVhoTVpwJTJGWXhoVkZheEJMQnRRZWpkdEElMkZUdFpQTUlKbk9rbkkyV1NZemljVFlOOE90VHZJQ1piRUN4ZHI1UGttNmlQTDBDM2MlMkJna2ZJSmdpJTJGNExuUCUyRnVkUktEM0s0amYxVkpHTEVBaXV6NlZuQTRBR2FtMWg3Z3BOSXpTRmU2NkQzTnVyTEtWaEpOa0hvMDdOOVY5QkUzWEhPWW15ZXVpcnFHMWw5bWRIZ09rRFNHZDglMkZHV3RnOVJvYTU2bHJZZGNoRHRSUVBMbENrRXl3S1ZSU2NEZnJ1cm53QzJkaWlQVFJlNDdpVnRibkxaRHhja0dDa0tZcFBNJTJGUnIza2J5UmhzWU90UkRpUW9uRm9CU0hyQk9JMThyT2VPUHZyNzZZckNlVWJmNWZUdmpPZGRKMGdRMXVNUGt1OXo2aHdqaUVaaGdPTW4lMkJhYVVlSFFKSU9rTUQ3S01BNVFRUDAxSFAxOGhQYmZ2RFR2WlBFVHFiMllpUzFCV3Jvek02ams5U1BKSkhrWlo1cUZhZ3RvYU5uYnlaZzFGRTRzVVBSZGxBUXB3a2RTanZEWkFKJTJGb3hOdCUyQnc2TmxHYlFWRmw1aUtMS0tzWENBd3lGUVo4UzNjaXU2NWhvMWxCSjUlMkZrWmszT0JHanBKV0dtVkNtc2pUa1F2QThKSENVVTdzNWVJbWV2emclMkZkN0JHRmh6Q0FSSWY4dVZOM0o1SGVoMVZNJTJCSGxrbzJ5JTJGSEJ4RjBOSm9sZm8zOGVEdUpKeGJmMHJvJTJGbk11cmg4aE0lMkZ1cEg0dGRUOHpjaU9Gc1RDOFNBZ1FvSmZSeEt6Q3V2ZncwayUyRjhNRHg3eHFVeWV6JTJCUzQ4RVNJTjdLeTZPVXBmQXRyeHpoeDAzVVI0bTBjJTJGWkY3dG5LVzJtbWE0bDl5dXRoVFNJWkl2eFBpNkVjcFpXMFBNMHh0T3pqbyUyQmY0R1BmdjRyMXFOcUFVRllzOWRpSkxCQzFDSWE3Rlp4OGZVbHdJMjJMdU52JTJGZkxiS01BT2Z0SDlUd1JYZzYlMkZpQ0RBQUFBQUVsRlRrU3VRbUNDIil9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtZW9mLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtZW9mLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTAwN2I1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LWVvZi5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWRpdi5iYXNlNjQtc2luZ2xlcXVvdGVze3dpZHRoOjEwMHB4O2hlaWdodDoxMDBweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFnQ0FZQUFBQnplbnIwQUFBQUJtSkxSMFFBQUFBQUFBRDVRN3QlMkZBQUFBQ1hCSVdYTUFBQTNXQUFBTjFnR1FiM21jQUFBRnJVbEVRVlJZdyUyQjJYejI4a1J4WEhQJTJCOVZkYzh2ajJmRzl1SWttMnlVZUZHRWhOQ0tRd0JwajF5UlVCQW5wSlU0Y2VaUDRNeGZrQnh5MkdPNDViUVh1RUdRb2hVS2lnUSUyQnNCQkUxc2JZWHY4WXolMkZSTWQ5ZmpVTjA5UFY1bkZaQTRrWlphNzlXM3F1dTllciUyRnFOZnklMkZQd0pnWnR5JTJGZnolMkZaMjl2cnBtbXFobFdUZ21GZzFVcGJmV2hZaEc2WXEyY0ZpJTJGTnJqOW5KeVdueCUyQlBIamVhZmJNVEV6UHZqVkI5JTJCNmQlMkIlMkZlendlRHdWMUJmSHViaXZrQzNsWnlhJTJGNG03TnA4VVpZWGh3ZUhINzczM3J2dkMwS3l2NyUyRiUyRjdwMDdkMzRxSWp5dnI2M1JOYjRsNENic1JVck5ycTZPZnZmUlJ6JTJGeER4NDg2QSUyRjZnN3ZYaFg5WklmJTJCcDRKb21hVG9aajhkN1BrMVNGUkZYYjFhV29kcTA5bCUyRjlZWnUlMkZDV01WTDllJTJGYVZGVlFWVVJFRUc4cjNWVUVaNGNYJTJGSEwzMCUyQjVzaFJ0QWhGcTR3Z2dOYjZHclhnVmEySzJqWXRBQ0lIdjdTejU0VGZIaldXYWdCT0J5MFhndCUyQmNqTHR3UXhWQ3BOd1VSUWF0MURkWWFUN3B3ZHdLREZBNm5jSGdGaXpKbVNiM1dMUERhN1BNSVZsYjJkYXFaeGRPTlVuQWV0RW9qRWRCR2lYWGhUbUFqaFowJTJCM042QWx6ZUVST0gxVFhpV0dmJTJCY3dta1daWW5BZkFrZHgxcHElMkJoVWJUOXozSUVsVUpsVmhJNFdzZ0NMVXlnZ2k0TVFZZDRWWE5tQ1lScVhPc3BWN1VvSGJRM2hwRU1lTEFrNW1rRllSWWxXSSUyQkhaNkNURHdrS1NRcXJBN2dGZUhNRjNDNlZ5WUxtRlpHaUtDRTZHck1Gc2FXYjd5dVZPaDY2TjFGa1VVcEJKM1R5dkZvdlRvQmw5WE1iTlkyYlo3MEJzS2ZXOTRoYnlFcm9zbVhwUXd5NFZna0NqTWl6anZSUmlrMEV0aUxOd2FnQmY0NjVsd09xdGtFVEVuNjBYVDElMkJsVGF6cnBLbFIlMkJLa29veTNYZmIzV2ozd0dXSlJRaG5uaTdCNTNxNUZxWjQlMkZVUjdQWWhHTXh5dU13Z1dWcVR4cllXQXdaWVFYNzhKNWk4aWU5dHhTQWtvT3FxUUFxazNwQmdLTERobFk1WFZLUENpM3c5N1lSb0tTRmFjZUNnRjJocVNYUkJQUUFJT2NYUkg4aFAlMkYweTYlMkJScFdMckV5ZzNTYlM5dG16Z2d6SlFTTFFabzR4b09FOFViQ3NKZlE3emk2aWFJaXpaNU9CVmZYREtQaXJlV0MlMkJ2QVlXT0JxZXN6bDlKZzAzYWZiSDZPcUdIJTJGQlNVcnFickZJWGlIb2lFREMlMkZQeVNpMmQ5bm5aSEpFN29wWTdkY1klMkZkY1plajg0enBQR2ZZOVV3MkVyWUdDZjJPNG1VVkV6RUxXdHFVeFpLamYzeksyY1VSemljTVJ5JTJCenZidUg4eWxGUHFYSVBxTmN6Q2xLWTFtVVpGY25TREtrdiUyRlVOdXB0YldHJTJCTHclMkZNaCUyRnpyWXBLQkhLVjNPTk9Yell4ZVYyMHo0OXFoczdnYU1XSWpxUVFpQnhWWEI0aXJnMDV5ejR1JTJGTXBpZW9KdVRMakRKZlVKWUJ6QkFGVVVIa2hNdkx2ekZQdXZRMkp2UTNkdWgwUiUyRmp1aURRZEluNk1KZHZreFRhZlpVUHVhTjZVYU9vNlVOdGdObDl3ZWJvZ3V3cW9BNWZDakV1c05DekU4TEpRRlJ1TnJ6cFFEJTJCcm1aTk01NSUyRjRBNXoxSjJpSHRERWc2ZlpLMGowdUhsRHJoMk40aTNQdHVjJTJCSDV0anA1SGxpV1FtbU9VQWhsWWUwcnFVcVdTRU9oY1owNUF2RTFVZENvbFNRSmFIV2xTVVlnSnklMkZPMmZGZm8lMkYzNHBpcGhGT1o0T3J2TmRMNUVKWmJjbUU4T1F6RnhJSkVHRWdJZUUxJTJGaHJqSkx4WmNPcklWcFZDN1RXMDBXbUxXeUFNREVzJTJCaTl3VkpEdEcxN1kyMXZWbU54TEtxSU9rUXFxb3EycUhPUm1najlVUWN6YTdtZ0ZtNEdtaURqTzVDNzJEU29RNnVQVlRXJTJCenVGVWNRMnRlS2Q0cHpoZDhiNk51NmpnN3Zac3JiMXJDbEVJeGh1N1EzN3g0N2ZJeTNqJTJGaThpcXFsVXVFV1RGTiUyRk9yTVUzZkVFdWhVTThGSVBEcVpnY1JJVmhzQVh4dGpHREdTNU0lMkJQJTJGdiUyQm03eW9wVnJSVnNQYWJzVyUyQllHMVQlMkZ5M0thaHFTZzZjSFJiNWNUbXQ1WlhoeFE3blM2eVpzVldPYWpERmJ3MkpTQ1NHRUlzdXlDJTJGJTJGbzBhUHAlMkZ2NyUyQnI5Tk81JTJGNWdNT2hKTE5uJTJGcFFMckxmdzZ0a0tLb3JDRGc0TlBQJTJGbmtqeCUyRkxPejk2aDJlbnp5WnZmJTJCZnRIOXphMmZtNnFMcm5POXRHazJ2WTg2ZiUyRk1saVdaUmRQbmp6NXpjT0hEeiUyQiUyQiUyRmlmaW1vcnp2MzFDOVg3MThHJTJGWXJDWVNOSmE1TGdBQUFDSjZWRmgwVTI5bWRIZGhjbVVBQUhqYUt5OHYxOHZNeXk1T1RpeEkxY3N2U2djQU50Z0dXQkJUeWx3QUFBQUFTVVZPUks1Q1lJSSUzRCcpO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtib3JkZXI6MXB4IHNvbGlkICMwMGFhMDB9ZGl2Lm90aGVyZGF0YXVybHtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCb0FBQUFhQ0FZQUFBQ3BTa3pPQUFBQUFYTlNSMElBcnM0YzZRQUFBQWx3U0ZsekFBQUxFd0FBQ3hNQkFKcWNHQUFBQUFkMFNVMUZCOWtGQlEwV0RXd3F3andBQUFOTVNVUkJWRWpIcmRaYmFGeFZGQWJnYjJhU1RHNkdUaTZtVkl3eE54RjlxRkkwUlFuRlVxaVlhbXV0VnV0TGEydDlFWTBvUGdnRm9ZZ1BSUiUyRmFnaFl2aUElMkJpSUFZdm1CSktvWVdpaUJDaWdWVFQxRmlzYlVockV0TmtKcGM1UHVRa2pHRW1KcWtMRm1kejJIdiUyRmElMkYzclgzdHZsbTk1b1MlMkZMb2t1WnRJcGJkdkFzN0tGdEwyMndqYjNWMUM0MXVweTJrZTFEWEMyayUyRkJqdjFISFhEcmJrRWFtZzdsWDJQOFFUbGRRMlV0Zk9COHVpSnNITmlCJTJGaWswR21PJTJCZ1pJeGduR0E1OW5HQ01vSlBlUWFZUDA0N2lCRFhaRW9oa0FZb2Y0JTJGTnlLbFpSZFIlMkYxQVNaQ25vT01oV2tVaGVNejlGMWxhSlNSWjNnRXFWdzFpcFpRamNvQlJyYlQzRXo5T0pMaFprSEc1Q0Q4bDhRNDdxWGhNWnAlMkZZeGhWRmF4QkxCdFFlamR0QSUyRlR0WlBNSUpuT2tuSTJXU1l6aWNUWU44T3RUdklDWmJFQ3hkcjVQa202aVBMMEMzYyUyQmdrZklKZ2klMkY0TG5QJTJGdWRSS0QzSzRqZjFWSkdMRUFpdXo2Vm5BNEFHYW0xaDdncE5JelNGZTY2RDNOdXJMS1ZoSk5rSG8wN045VjlCRTNYSE9ZbXlldWlycUcxbDltZEhnT2tEU0dkOCUyRkdXdGc5Um9hNTZscllkY2hEdFJRUExsQ2tFeXdLVlJTY0RmcnVybndDMmRpaVBUUmU0N2lWdGJuTFpEeGNrR0NrS1lwUE0lMkZScjNrYnlSaHNZT3RSRGlRb25Gb0JTSHJCT0kxOHJPZU9QdnI3NllyQ2VVYmY1ZlR2ak9kZEowZ1ExdU1Qa3U5ejZod2ppRVpoZ09NbiUyQmFhVWVIUUpJT2tNRDdLTUE1UVFQMDFIUDE4aFBiZnZEVHZaUEVUcWIyWWlTMUJXcm96TTZqazlTUEpKSGtaWjVxRmFndG9hTm5ieVpnMUZFNHNVUFJkbEFRcHdrZFNqdkRaQUolMkZveE50JTJCdzZObEdiUVZGbDVpS0xLS3NYQ0F3eUZRWjhTM2NpdTY1aG8xbEJKNSUyRmtaazNPQkdqcEpXR21WQ21zalRrUXZBOEpIQ1VVN3M1ZUltZXZ6ZyUyRmQ3QkdGaHpDQVJJZjh1Vk4zSjVIZWgxVk0lMkJIbGtvMnklMkZIQnhGME5Kb2xmbzM4ZUR1Skp4YmYwcm8lMkZuTXVyaDhoTSUyRnVwSDR0ZFQ4emNpT0ZzVEM4U0FnUW9KZlJ4S3pDdXZmdzBrJTJGOE1EeDd4cVV5ZXolMkJTNDhFU0lON0t5Nk9VcGZBdHJ4emh4MDNVUjRtMGMlMkZaRjd0bktXMm1tYTRsOXl1dGhUU0laSXZ4UGk2RWNwWlcwUE0weHRPempvJTJCZjRHUGZ2NHIxcU5xQVVGWXM5ZGlKTEJDMUNJYTdGWng4ZlVsd0kyMkx1TnYlMkZmTGJLTUFPZnRIOVR3UlhnNiUyRmlDREFBQUFBRWxGVGtTdVFtQ0MiKX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC1saW5lYnJlYWtpbmRhdGEub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtbGluZWJyZWFraW5kYXRhLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRkYmUzMS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC1saW5lYnJlYWtpbmRhdGEub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLXJpbmctdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1jZW50ZXItYnV0dG9uLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtbWFya2VyIHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLC55dWkzLXNraW4tbmlnaHQgdlw6b3ZhbC55dWkzLWRpYWwtbWFya2VyLW1heC1taW4sLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlci12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLWhhbmRsZS12bWx7YmFja2dyb3VuZDpub25lO29wYWNpdHk6MX1kaXYuYmFzZTY0LWRvdWJsZXF1b3Rlc3t3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJvQUFBQWFDQVlBQUFDcFNrek9BQUFBQVhOU1IwSUFyczRjNlFBQUFBbHdTRmx6QUFBTEV3QUFDeE1CQUpxY0dBQUFBQWQwU1UxRkI5a0ZCUTBXRFd3cXdqd0FBQU5NU1VSQlZFakhyZFpiYUZ4VkZBYmdiMmFTVEc2R1RpNm1WSXd4TnhGOXFGSTBSUW5GVXFpWWFtdXRWdXRMYTJ0OUVZMG9QZ2dGb1lnUFJSJTJGYWdoWXZpQSUyQmlJQVl2bUJKS29ZV2lpQkNpZ1ZUVDFGaXNiVWhyRXROa0pwYzVQdVFrakdFbUpxa0xGbWR6Mkh2JTJGYSUyRjNyWDN0dmxtOTVvUyUyRkxva3VadElwYmR2QXM3S0Z0TDIyd2piM1YxQzQxdXB5MmtlMURYQzJrJTJGQmp2MUhIWERyYmtFYW1nN2xYMlA4UVRsZFEyVXRmT0I4dWlKc0hOaUIlMkZpazBHbU8lMkJnWkl4Z25HQTU5bkdDTW9KUGVRYVlQMDQ3aUJEWFpFb2hrQVlvZjQlMkZOeUtsWlJkUiUyRjFBU1pDbm9PTWhXa1VoZU16OUYxbGFKU1JaM2dFcVZ3MWlwWlFqY29CUnJiVDNFejlPSkxoWmtIRzVDRDhsOFE0N3FYaE1acCUyRll4aFZGYXhCTEJ0UWVqZHRBJTJGVHRaUE1JSm5Pa25JMldTWXppY1RZTjhPdFR2SUNaYkVDeGRyNVBrbTZpUEwwQzNjJTJCZ2tmSUpnaSUyRjRMblAlMkZ1ZFJLRDNLNGpmMVZKR0xFQWl1ejZWbkE0QUdhbTFoN2dwTkl6U0ZlNjZEM051ckxLVmhKTmtIbzA3TjlWOUJFM1hIT1lteWV1aXJxRzFsOW1kSGdPa0RTR2Q4JTJGR1d0ZzlSb2E1NmxyWWRjaER0UlFQTGxDa0V5d0tWUlNjRGZydXJud0MyZGlpUFRSZTQ3aVZ0Ym5MWkR4Y2tHQ2tLWXBQTSUyRlJyM2tieVJoc1lPdFJEaVFvbkZvQlNIckJPSTE4ck9lT1B2cjc2WXJDZVViZjVmVHZqT2RkSjBnUTF1TVBrdTl6Nmh3amlFWmhnT01uJTJCYWFVZUhRSklPa01EN0tNQTVRUVAwMUhQMThoUGJmdkRUdlpQRVRxYjJZaVMxQldyb3pNNmprOVNQSkpIa1paNXFGYWd0b2FObmJ5WmcxRkU0c1VQUmRsQVFwd2tkU2p2RFpBSiUyRm94TnQlMkJ3Nk5sR2JRVkZsNWlLTEtLc1hDQXd5RlFaOFMzY2l1NjVobzFsQko1JTJGa1prM09CR2pwSldHbVZDbXNqVGtRdkE4SkhDVVU3czVlSW1ldnpnJTJGZDdCR0ZoekNBUklmOHVWTjNKNUhlaDFWTSUyQkhsa28yeSUyRkhCeEYwTkpvbGZvMzhlRHVKSnhiZjBybyUyRm5NdXJoOGhNJTJGdXBINHRkVDh6Y2lPRnNUQzhTQWdRb0pmUnhLekN1dmZ3MGslMkY4TUR4N3hxVXlleiUyQlM0OEVTSU43S3k2T1VwZkF0cnh6aHgwM1VSNG0wYyUyRlpGN3RuS1cybW1hNGw5eXV0aFRTSVpJdnhQaTZFY3BaVzBQTTB4dE96am8lMkJmNEdQZnY0cjFxTnFBVUZZczlkaUpMQkMxQ0lhN0ZaeDhmVWx3STIyTHVOdiUyRmZMYktNQU9mdEg5VHdSWGc2JTJGaUNEQUFBQUFFbEZUa1N1UW1DQyIpO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtib3JkZXI6MXB4IHNvbGlkICMwMGFhMDB9Lnl1aS1za2luLXNhbSAueXVpLWgtc2xpZGVye2JhY2tncm91bmQ6dXJsKGJnLWguZ2lmKSBuby1yZXBlYXQgNXB4IDA7aGVpZ2h0OjI4cHg7d2lkdGg6MjI4cHh9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtbGluZWJyZWFraW5kYXRhLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtbGluZWJyZWFraW5kYXRhLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGRiZTMxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LWxpbmVicmVha2luZGF0YS5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1yaW5nLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtY2VudGVyLWJ1dHRvbi12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlciB2XDpvdmFsLnl1aTMtZGlhbC1tYXJrZXItbWF4LW1pbiwueXVpMy1za2luLW5pZ2h0IHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1tYXJrZXItdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1oYW5kbGUtdm1se2JhY2tncm91bmQ6bm9uZTtvcGFjaXR5OjF9ZGl2LmJhc2U2NC1kb3VibGVxdW90ZXN7d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCb0FBQUFhQ0FZQUFBQ3BTa3pPQUFBQUFYTlNSMElBcnM0YzZRQUFBQWx3U0ZsekFBQUxFd0FBQ3hNQkFKcWNHQUFBQUFkMFNVMUZCOWtGQlEwV0RXd3F3andBQUFOTVNVUkJWRWpIcmRaYmFGeFZGQWJnYjJhU1RHNkdUaTZtVkl3eE54RjlxRkkwUlFuRlVxaVlhbXV0VnV0TGEydDlFWTBvUGdnRm9ZZ1BSUiUyRmFnaFl2aUElMkJpSUFZdm1CSktvWVdpaUJDaWdWVFQxRmlzYlVockV0TmtKcGM1UHVRa2pHRW1KcWtMRm1kejJIdiUyRmElMkYzclgzdHZsbTk1b1MlMkZMb2t1WnRJcGJkdkFzN0tGdEwyMndqYjNWMUM0MXVweTJrZTFEWEMyayUyRkJqdjFISFhEcmJrRWFtZzdsWDJQOFFUbGRRMlV0Zk9COHVpSnNITmlCJTJGaWswR21PJTJCZ1pJeGduR0E1OW5HQ01vSlBlUWFZUDA0N2lCRFhaRW9oa0FZb2Y0JTJGTnlLbFpSZFIlMkYxQVNaQ25vT01oV2tVaGVNejlGMWxhSlNSWjNnRXFWdzFpcFpRamNvQlJyYlQzRXo5T0pMaFprSEc1Q0Q4bDhRNDdxWGhNWnAlMkZZeGhWRmF4QkxCdFFlamR0QSUyRlR0WlBNSUpuT2tuSTJXU1l6aWNUWU44T3RUdklDWmJFQ3hkcjVQa202aVBMMEMzYyUyQmdrZklKZ2klMkY0TG5QJTJGdWRSS0QzSzRqZjFWSkdMRUFpdXo2Vm5BNEFHYW0xaDdncE5JelNGZTY2RDNOdXJMS1ZoSk5rSG8wN045VjlCRTNYSE9ZbXlldWlycUcxbDltZEhnT2tEU0dkOCUyRkdXdGc5Um9hNTZscllkY2hEdFJRUExsQ2tFeXdLVlJTY0RmcnVybndDMmRpaVBUUmU0N2lWdGJuTFpEeGNrR0NrS1lwUE0lMkZScjNrYnlSaHNZT3RSRGlRb25Gb0JTSHJCT0kxOHJPZU9QdnI3NllyQ2VVYmY1ZlR2ak9kZEowZ1ExdU1Qa3U5ejZod2ppRVpoZ09NbiUyQmFhVWVIUUpJT2tNRDdLTUE1UVFQMDFIUDE4aFBiZnZEVHZaUEVUcWIyWWlTMUJXcm96TTZqazlTUEpKSGtaWjVxRmFndG9hTm5ieVpnMUZFNHNVUFJkbEFRcHdrZFNqdkRaQUolMkZveE50JTJCdzZObEdiUVZGbDVpS0xLS3NYQ0F3eUZRWjhTM2NpdTY1aG8xbEJKNSUyRmtaazNPQkdqcEpXR21WQ21zalRrUXZBOEpIQ1VVN3M1ZUltZXZ6ZyUyRmQ3QkdGaHpDQVJJZjh1Vk4zSjVIZWgxVk0lMkJIbGtvMnklMkZIQnhGME5Kb2xmbzM4ZUR1Skp4YmYwcm8lMkZuTXVyaDhoTSUyRnVwSDR0ZFQ4emNpT0ZzVEM4U0FnUW9KZlJ4S3pDdXZmdzBrJTJGOE1EeDd4cVV5ZXolMkJTNDhFU0lON0t5Nk9VcGZBdHJ4emh4MDNVUjRtMGMlMkZaRjd0bktXMm1tYTRsOXl1dGhUU0laSXZ4UGk2RWNwWlcwUE0weHRPempvJTJCZjRHUGZ2NHIxcU5xQVVGWXM5ZGlKTEJDMUNJYTdGWng4ZlVsd0kyMkx1TnYlMkZmTGJLTUFPZnRIOVR3UlhnNiUyRmlDREFBQUFBRWxGVGtTdVFtQ0MiKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCAjMDBhYTAwfS55dWktc2tpbi1zYW0gLnl1aS1oLXNsaWRlcntiYWNrZ3JvdW5kOnVybChiZy1oLmdpZikgbm8tcmVwZWF0IDVweCAwO2hlaWdodDoyOHB4O3dpZHRoOjIyOHB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LW5vcXVvdGVzLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LW5vcXVvdGVzLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EzNGMwYy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC1ub3F1b3Rlcy5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0ueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtcmluZy12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLWNlbnRlci1idXR0b24tdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1tYXJrZXIgdlw6b3ZhbC55dWkzLWRpYWwtbWFya2VyLW1heC1taW4sLnl1aTMtc2tpbi1uaWdodCB2XDpvdmFsLnl1aTMtZGlhbC1tYXJrZXItbWF4LW1pbiwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtbWFya2VyLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtaGFuZGxlLXZtbHtiYWNrZ3JvdW5kOm5vbmU7b3BhY2l0eToxfWRpdi5iYXNlNjQtbm9xdW90ZXN7d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvanBlZztiYXNlNjQsJTJGOWolMkY0QUFRU2taSlJnQUJBZ0VBWkFCa0FBRCUyRjRSZkpSWGhwWmdBQVRVMEFLZ0FBQUFnQUJ3RVNBQU1BQUFBQkFBRUFBQUVhQUFVQUFBQUJBQUFBWWdFYkFBVUFBQUFCQUFBQWFnRW9BQU1BQUFBQkFBSUFBQUV4QUFJQUFBQWVBQUFBY2dFeUFBSUFBQUFVQUFBQWtJZHBBQVFBQUFBQkFBQUFwQUFBQU5BQUQwSkFBQUFuRUFBUFFrQUFBQ2NRUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTWlCTllXTnBiblJ2YzJnQU1qQXdPRG93TnpveE9TQXhORG8xT0Rvd05RQUFBNkFCQUFNQUFBQUIlMkYlMkY4QUFLQUNBQVFBQUFBQkFBQUJ3cUFEQUFRQUFBQUJBQUFCUlFBQUFBQUFBQUFHQVFNQUF3QUFBQUVBQmdBQUFSb0FCUUFBQUFFQUFBRWVBUnNBQlFBQUFBRUFBQUVtQVNnQUF3QUFBQUVBQWdBQUFnRUFCQUFBQUFFQUFBRXVBZ0lBQkFBQUFBRUFBQmFUQUFBQUFBQUFBRWdBQUFBQkFBQUFTQUFBQUFIJTJGMlAlMkZnQUJCS1JrbEdBQUVDQUFCSUFFZ0FBUCUyRnRBQXhCWkc5aVpWOURUUUFDJTJGJTJCNEFEa0ZrYjJKbEFHU0FBQUFBQWYlMkZiQUlRQURBZ0lDQWtJREFrSkRCRUxDZ3NSRlE4TURBOFZHQk1URlJNVEdCRU1EQXdNREF3UkRBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBRU5Dd3NORGcwUURnNFFGQTRPRGhRVURnNE9EaFFSREF3TURBd1JFUXdNREF3TURCRU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd00lMkY4QUFFUWdBZEFDZ0F3RWlBQUlSQVFNUkFmJTJGZEFBUUFDdiUyRkVBVDhBQUFFRkFRRUJBUUVCQUFBQUFBQUFBQU1BQVFJRUJRWUhDQWtLQ3dFQUFRVUJBUUVCQVFFQUFBQUFBQUFBQVFBQ0F3UUZCZ2NJQ1FvTEVBQUJCQUVEQWdRQ0JRY0dDQVVERERNQkFBSVJBd1FoRWpFRlFWRmhFeUp4Z1RJR0ZKR2hzVUlqSkJWU3dXSXpOSEtDMFVNSEpaSlQ4T0h4WTNNMUZxS3lneVpFazFSa1JjS2pkRFlYMGxYaVpmS3poTVBUZGVQelJpZVVwSVcwbGNUVTVQU2x0Y1hWNWZWV1puYUdscWEyeHRibTlqZEhWMmQzaDVlbnQ4Zlg1JTJGY1JBQUlDQVFJRUJBTUVCUVlIQndZRk5RRUFBaEVESVRFU0JFRlJZWEVpRXdVeWdaRVVvYkZDSThGUzBmQXpKR0xoY29LU1ExTVZZM00wOFNVR0ZxS3lnd2NtTmNMU1JKTlVveGRrUlZVMmRHWGk4ck9FdzlOMTQlMkZOR2xLU0Z0SlhFMU9UMHBiWEYxZVgxVm1aMmhwYW10c2JXNXZZbk4wZFhaM2VIbDZlM3glMkYlMkZhQUF3REFRQUNFUU1SQUQ4QTlWU1NTU1VwSkpKSlNra2trbEtTU1NTVXM0dURTV2lYUm9PSktGaTNPdngyV3Zic2U0ZTVnTXdSbzVzb3lwZE95TjltVFNSSHBXdmo0T2M0JTJGd0RWZjlXa3B1cEpKSktVa2tra3BTU1NTU2xKSkpKS1Vra2trcCUyRiUyRjBQVlVrbENxeHR0YmJHJTJGUmVBNGZBcEtacEpKSktVbzJXTnJyZFk4dzFnTG5IeUFsVk9zV3Zvd1haRFolMkZRT1phOEQ5eHJtbTMlMkZOcjNQVXN3bSUyRnBtUUdhbXlsNGJIaVd1aEpUWXFzRnRUTEJ3OW9kOTRVMVE2RmtmYU9rNHRzenVxWWZ3VjlKU2xsMSUyRm9PdDJzT2d1RFhnZVRtN2YlMkZQbU4lMkZ3Q0NMVVdaMVZocnlzYktBJTJCanVhN3pndHVaJTJGMUZxSVVYVFNRY3ZLWmk0N3NoN1hPWTB0QkRZSmh6bXMzYWtmUjNibFZkMTNwck10dUklMkJ3c2UlMkY2TDNBaG03bjAlMkZVJTJCaTJ6YWZ6a0ZPZ3E5JTJCZGowWkZPTTRrM1pEdHJHTkVuaHp0N3YzV2JXUFU4YkpweWF2VnBkdVp1YzJlTldPTmIyJTJGMlh0WE9ZMlZVN3JBNmhuTzlSdUpTJTJCcjFoTzFsZ3VHSmJ1WXoyZXh0dnYzZnpMUFUlMkZ3Q0VTVTlRa2tra3BTU1NTU2xKSkpKS2YlMkYlMkZSOVZXZjBpd2l1M0ZmOUxHc2V3VCUyQjZEN1AlMkZBeXh5MEZtdW5INnhQRE1wZ2QlMkZiWkZUJTJGd0RvT3glMkYlMkIyMFFwMGxDMDJDdHhxQUx3RHRCNEo4Rk5KQlRWb3Z4JTJCbzRqdmJMTEdsbHRUdVJNc3NyZiUyRkFOSml6JTJCaFpEcU1PJTJGRXlDWDJkT2M2dCUyQmt1YzFnbXQlMkIzJTJGaGFQVGVvWjVzNlIxSVpyQkdEbGtOdkklMkJqWGNZWXl4JTJGN3RXVjlCJTJGd0R3JTJGd0R3bHlEMUxxV0gwanEyTjFPNTVyeE9vZ1kxcndDNEM5dXVQNm16ZHQ5V2wxdjZUJTJCYiUyRkFGZEZTJTJGMU15cSUyRjJWVGh1c2ElMkIydHN0Mms2c1B1WTczQnJtJTJGbzNWdjJmeSUyRjNGMFM0VEF6cSUyQm0lMkZXRHF1S0duYmhXT3lhNjJEVVVscmNteXVsa3RaNmYyZXkxOVd6OCUyRjJMczJaJTJCRll4MWpMNnl4Z0JlJTJGY0lBSTNDWGZOSXFaWDN1cnNxcXJaNmo3VHFKZ05ZMlBVc1BQMGR5cGZXSiUyRm85Tk9UMnhyYXJIVHhzM3Raa2YlMkJ5NzdWUjZ2OWJlamROc2JrYjNaYnFtMnNmVmpnT09ocmRaRmxqcXNmZlhzJTJGbXZWOVYlMkYlMkJEWEhkWiUyQnV2VTh6QTZpJTJCajAyWTF6YXdhWkx0MkxZMjF0bHRiN1hPYjZqNiUyRndEUjFWJTJGelYzNnY2clBWWUZVJTJCaUNzNVBTN2NkNDNPMldVT0I3N2QxWCUyRlQyN2x3dlZuTnlLSzhkMTVxNmhpajIwN285ZGczREhkVzltOXpMdjhBUSUyRjRXdTcxSyUyRlR0cjlhcXpKJTJCdUhWOHRtUjB6Tm95THZzWFU4TnI3Y2R0am10TjFKOUslMkIycG9kc2JrMSUyRm8lMkY4QTBZc25HNnRlJTJCbkxaYmRYWFk2cHR0QUROd3Vjd21odjJjV2J2MHRuciUyRnBLbmZwS2JLZjhBdHNxRDFEdnJqbmZWNzBjS2xsZGd6Z2JxamY3UUhCM3Ayc0cwc2I2bHYwJTJGZlo2VEVjWmc2MzB4ejJ2ZXpLNmpWYmZoVnRmNmJpUSUyQnhsdG1OWTdhMno5SnMzVnUlMkZ3YXl2ckhoMSUyQmhoZEt2M1h1YmpCaFk5d0RiSHRQcE9kWGtPSDZ0MURkJTJGUnNsJTJGNkMlMkZ3RG9tVjdGZzlXYyUyRkYlMkJxM1JMNmJpYmVuNVdWamg0bGxqZHhiZXhsdGYwNkxhOXZ2cCUyRk0lMkZ3QUZaJTJGaEV1cW4wcjZsZlhNOVdZenB2Vm9vNnd4dmNiQmNHajlMdHIwOUxMb2o5YnhmJTJCdlUlMkZvZjVtejlhdnJKZDAlMkIyakJ3SEFaVHJjZDE3aUE3YlZaYTJuWTBIJTJGQ1h3OXYlMkZBQWRmJTJGV2w1emlkUVo5WmNZM2wzb2Rkd2cyejFtSFo2eldmUXYzdDIlMkJuazAlMkZ3Q24lMkZ3RFJmOHhmNkRmMURxdlhHWiUyQmU1dHpzaTdHZDZsbTJrUHNxTmJxcU9HMSUyRjRDdXhucHQlMkZTNyUyRjlJOUFMalIxR2g3Zjk2JTJCdUpKcEExS1pqMldORG1PRG1uaHdNaEpheVNTU1NVJTJGd0QlMkYwdlZWbjlhaXJGR1lTR2pFY0xYdU9rViUyRnpkNUolMkZkWlUlMkZ3QlglMkZyYTBFSE05RDdKZjlwRTQlMkZwdjlZSFgyYlQ2bW45UklLY0U5VTZsZ1huSkR2Mmwwak4lMkZTNDk3UzM5QzUzMHNPeXhuJTJCQmMlMkYlMkJoNVA4MyUyRjJreWZTJTJGUjVObFBydjE2dXdjekV4c1BIRm96TEJSV0h6NnJyaVdNOU91djZIczlUM3ZzZXVlNkI5YnVvWkY1eEJVODRCREMlMkJ0b1pZVzFQY3pHJTJCMDJHeG03MUdiMlhQMmZvZDdQNW10Y3QxNjdxJTJGVDg3R2RmayUyRmJzY1dISTZWMU5yUU5HdTNPMk5aNmZwNUZOOWRUY3JIM2VwUjZmOVJLd1JZWHpoS0V1R1lvJTJGeGZTTXZNNmxabEYlMkZWZlNvYlUxMVE5TUd5cUxmYSUyQnJQOVBKc3I5S3owOW42YkdxJTJGN2RXTjF6OVZ4QzNLZlpUMCUyQiUyQlBVeUdnNU5JYVBkVTdlelplN0t4UFIlMkZSNUd5cjFzWDlEYjYlMkZ3RGd1WnglMkJ2MzUyYmU0V053ZnQlMkI5dGIybjIxbXphJTJGMDdYbjIlMkZwN3FtVmVwNmRiUDB2cWZvbHFaRDdtWTkxZURtWGg5cEJBWkRHalQ5YXd2YiUyQmtwM1clMkZwMk1ka2ZwYXYxYiUyQlhVYjBXdWxUZVAyM2g1RGkzSkwzVVlXVFl6bHpiS24xc2M1ck43YmFNM0ZaOXB3OHhydlN2ciUyRlFmMGltNnV2SDZ2WTdHNmhmUzJteDFXRllhcTdibmslMkJvMnIwcktQVGE3YnVzdHhYMjAlMkJ6JTJCbGY0UlclMkZxUFhlTTQwM3MlMkZROUxwZGJRNHY5N1dsNERjVzFudWQ2UHFmckgyZTluc3pNYXZOeCUyRnM5JTJGMmhBNmk1cjc3SFpMSDI0VG4xVzQlMkJVd2oyUHZhM0pkajViZnphSGI4bjdGayUyRjRQOVl4UDB0WDh3dWxxYVdmYjFDelo2R2FNMzA2MjJXREQlMkZTVjFtcDNzZlk2dGpXT3NZMXRmODc3NmElMkZUUTdzMjdxRk5WSXJxd0FmVXNiWlJYdDlTME45S3kxdFg4MyUyQmdyZSUyRjFzZWolMkZBRTFsektsdGREdGJpOVpKc3FxYlRhQlhkUzBUYlc2OFB5Y1V4Tmo4cXJJYlIlMkZwUFUlMkZTYjYlMkZUeXY2VldmMHF2T3J6bXNZYXNuR3pIbWs3Z3gxWmE2SzJYUjdzZCUyQjV2Nks3OUpYaTNiUFUlMkZWOGk3MVJSVTUlMkZXYUxNdjZrWWo3U0dYOUw2ZyUyQnFLJTJGb3NyeW1ldXgxY2Y0QjE3ZllzcnB1UG1OeGZ0ejYzUGN3bDlEV0RRMnNJcVprTkolMkZOWmU2bHVSNmYlMkZBQVglMkZBQVMxZjJwWFgwdnElMkJKbG43TGZrVlZ0YTNaQWZsNDkyOW15biUyRkE3NnJMcTg2ciUyQmJvJTJGNHF5aFZydW9aZlNlazRsZG1NMTJQZTIyN0Q5WFFCdHZwdHUzJTJCN2Q2VnI2NlhmMlBVJTJGd2lTbnN1cW5EeUxNZkZ0TVpPUmolMkJyWFNQZUhGc2VvMmw3ZzMxTGElMkZWJTJCaCUyRjJvcSUyRndmcWZwRnpuVmNkOXVEWml2YXh6RFpYYTF6enRaYVhCMUxXJTJCdiUyRmdiJTJGWlZYaTV0djgzJTJGUnNqOUFzTHFmWHYyajAlMkZwWHFQRmVkZ051cmZhMTBGM3Vxc3g4bHY4QW8zT2J2cmYlMkZBTVQ2biUyQkZRcXVxNTklMkZVUmVjMXpiN0NIWE1jOGh0bXc3bjQ3djhCdHVjUFViNnY2UDlMZDY5aU5vUzlINlZrMFp6Y3BqM3RxcWVXMUFBdHVjJTJGOEFtN01leWh2Nld2WiUyRk5aWCUyRkFJRXVnenVrMTRlTGlONjlmYmk0OXU2d2dCanlXTmI2ZFA2SU9hNTJWNnZ0MjQ3UDBkRCUyRkFGUDBhampkYzZrQmVla1lRZDFESXMydHNaVlpiZFZYdDl0WXFzRzklMkIzJTJGVFBaJTJCbCUyRndCQ3NhanBYViUyQnRYMlp3byUyRmFsN1d1dnY5UzBNZWEyJTJGVDIlMkJ2WjdtMWUxajZHVjc2UFolMkZwSzBORTdhdnBIMVo2OW5kVTZUaTRtUDZtVlprdEJkYmtQM3VxYldUUmtqS3VZR2I5dDFlNnYyNzc2clA5SXV5dzhWdUpqdG9hUzh0a3VlZVhPY2R6MyUyRjJuTHliNnZkWnY2RGpES3dtVnQzbHpic1p6M1ZzWmNIbHVUZ1g0OTloZlJZeHV6SnduJTJGem5zeUtyTEx2OEgydlQlMkZyOWhPREslMkJzTSUyRlp1U1drdnJ0RmpDMXdMbXZyJTJGV0txVyUyRm0lMkJ6YlolMkJrUlI0dlZwS24wM3ElMkZUZXE0N01ucCUyQlF5JTJCdDdXdkcwJTJCNEJ3M045U3MlMkZwSyUyRiUyQnVOVnhCVCUyRkFQJTJGVDlWVE9hMTdTeHdEbXVCRG1uVUVIc1U2U1NueGY2eDlDelBxdDFFQ2l4N0dNZWJlbjVRMGNhbmV5eWx6dm91dG8zTXJ1WiUyRmhhdjBucCUyRnBGVXJ5YU1qRnZyenBzNmRrUGJabVVzSHZ4N3pGYmVyNGY3cmJMUDZXeiUyRkFFbG4lMkJpdll2WSUyQnU5TDZmMVhwbDJIMUdHME9HNzFTUTAxdUgwYjJQZDlCN1AlMkZVYiUyRndCR3ZIOHZwRjNUNyUyRlFwY0g1TkllYTdhejZsZVhTZDIlMkJ6SGpkVzcwcUhiTW5FJTJGd2xTWnJFMk51emZqS0hNWSUyQkdmcHpSMm4lMkZMOUg5NXdNJTJGQnlPazVoeHNnaXl1d2I2cm02MTNWSDZOMVglMkZBS01yVzEwanFicm1IRHlIbDhNaGpZM0c2c0hkNlBPMzE4ZHY2ZWl6MDdmVzlQMHYlMkJPSGlQeGM2bjlqNTUyWWRoM1ltVnk3RnRQNSUyQnZ2Zml1JTJGdyUyRiUyRkIlMkZwZjV6ZWhZdjFhNnBWazVXTG5oJTJCSlpoTUw2cm1pV3ZzQlk2dDFGbjBuMU5ZNzdUdnAlMkZTZjhXbmlqcU5Xbk9Fc2NqR1E0WkI3T2lnMGZWN0xmMDFycjhycVIydGV6M1hQYkJ4NjdYc1l6YXl4amJNbDltMzglMkY5SiUyQmwlMkZTJTJCcHpydlV4TVdxdnFOVnVKa3N4MzQwMnpXNW9vc2JkU2NpZzcyNU9IZDlxWTZ2JTJCYzJaT0xUNk5uODh5M2U2WDF1eWs5TmV4em5ZZCUyQlBkaTJNYzFsVHhsNHp0em5XdTNiS2ZXWlpYYnM5VDA2ZjB5cGRZNkoxSHIlMkZWSDlXcnRwc3g2bU1xRkRTJTJGMVdpc0YzMFhOYTUlMkI1NzdiZjBleXolMkZSViUyQnFuSHdXMVJvdERGNnhheTQ5VHZpa3M5T0hOQkFjOWcyc2ZjMW03WnUyJTJGb0clMkZReHYzUFNUOUx3MmRUYmxNJTJCMVcxc2REaXhvTTJ2dTNmMDkzNk90M3BPWnN1cnAlMkZRNUglMkJqJTJGd2FKajRHWGYwNTJaamVwUmpibU9yeXdOek5qSHVsaDlNZWc1ek4lMkIxbHJuJTJGNFI5ZnAlMkZwRll4Y0hENmV5Nm5JdGRTR0FPdGRsRndobGglMkZSdUhwTjNQcGJ2OEE1eG5xZW1nRk9aMSUyRkR5TVc3N1QxRElPUXk0dnJhOTFicUMwMGVuJTJCaVl4JTJGMDZOcnFuZXYlMkZBSWYlMkZBRWoxV3hhRzJzeEtPbzlNdTZpSzMyVVllT0xITUwzdkxyTnJybXUzJTJCbHYlMkZBUFJpMWN2cGwxUFVxVzNOZmg1VkozNCUyQk5tTzlYRXVySHUlMkZWN3QxakdNc1lmMG5vUDluJTJGQUFOcXY5UTZXODR3NjMwaG4yY3VGZDFqY1lHeXNqUzZxekx4bWl1M0Z5YWR2ODk2TlglMkJsJTJCMmVxaFNTQlExdSUyRndlZDZ6OVglMkJydEZKSDFkWmoxYWdFTnNxWnVJQjlFUHN2YmtXN1dqNmVTJTJGNmZxJTJCaiUyQmpXT2NiTnc4aG5xZE54cTN0aXpaWVhPYTRUeTdma1dibU5kJTJGT2Jmb2Y0UmRwVDFmcUhVczFyYyUyRkxma3R5UlUydkdhNGJTSE5lUHRGTDNlbDZWbUxsVmVqWjdmMG0lMkYxY2olMkJaJTJCMFdidlNmcW4wJTJGcTFlVGpkUklkbFZzcHNxY3h3QnFjOFBiZlclMkJyWDM3NiUyRlR0ZiUyRkFLSDBiY1M2djJXSlhxdWxqNFlDWEVEWnF1cnhuMWR4WGRSb3N1dzc4aG5YY1I1ZFNXdTIyT3JZMmJxc2RuMDNaRlR0OTMyT3oyWldMNmxWTFBXb1hTMTlIenVwOVBxJTJCc2ZUTVl0eThrbjdaUlhEQ3k1aGRWYjFERXJlJTJGOU5VNzlMdnhIYkxjbGo3S2Y1cklzcFhFNW1QbTlKNnElMkZMcWE4MllybXZmVkpIcVVzZCUyQmd5cUxhdGxuMGElMkYwM3BQOEFXeExtZXJWJTJCNWolMkJ6JTJGVTdxdlIlMkJwOUNvdDZRTmxMSmJaUTV4ZFpYYjlPMWw3M1M5OWpudTMlMkJxNyUyQmUlMkZuRW1ONTdxdjFYNmI5YyUyRnE5OW94V054JTJCdVl4Y3l4N2c5cmpjMlBYeE01dDM2eDZkam10OUgxdjAyTCUyQmk5TCUyRkNWV2N6OVZQcjUxbnBQV1g5SCUyQnN4dXk4Ykl0Rk5veUR2dG90OXRJY04lMkYwNkhlMzE2UCUyRkFFS28lMkZ3QUo5cDloYlhXMTdudGFBOThiM0FRWFFJYnVQNXk0MyUyRkdCOVEyZGZwJTJGYVhUV3RaMWlsb0VHR2pJWTMlMkZBUGU3JTJCYXlHJTJGOEFhZkolMkY2emIlMkJpJTJGU1VKVDJUSzY2eHRyYUdBQUFCb0FFQWJXOGZ5VkplY2ZVYnFQOEFqSFBWMzFkWHhNako2YyUyRmF5MjdMYU1kMUphTmdzb0R4WDlvOXJmMHphVzIlMkJyJTJGUGVwJTJGcFBSMGxQJTJGOVQxVkpKSkpTRE5MJTJGc3I5Z2VYR0FCVzFybmFrRDZGMzZQJTJCc3VBd3VtViUyRldYTnJ4SHZjeW1xaDJTN0lxTG5SYSUyQjdKZmoyVVBjR3RxZHZ5ZlZzcFo3SyUyRlElMkJ5MSUyRm9hVjZGZmowNUZacXZZTEt5UVMxM0VnN20lMkY5SktpbXZIcHJvckVWMU5ER0R3RFJ0YWtrRWcyTkNObnhEcWRHYjBMcnUzcUZESFg0MXJMVFdHeFZleVI3NjI2dGRWbU5hJTJGMVAzTFBXcjlpMmNtenJwWTV0ZEI2Z3pwTDdLcTdXR1hQcXFmNkQ4SEljMWdaOXVwbyUyRjdUJTJGem1WWCUyRkFEWHFyMGJyT0YwJTJCNDEzNWJXVkZnYzA1a0QxV01QMDZhcmkxN3EyNVA4MVolMkIlMkZYJTJCaSUyQm5hdVR5c2ZxblFlb002aDA2bDkxZVcySDRqd2YxdWhnYzcwTHEzRGRWMVhHeG03OGQ3JTJGd0NmbyUyRlFYZnBLN0dJUkZYNHMyZk43dkFlR3BSandrOTNJeU9qNVZEbk42VTUlMkZVTWElMkZmbFlsTEd1TG0lMkJxeG5wZmFkckcxdGRrMzAyVWZhdiUyQnMyZW4lMkZOclElMkJyZDklMkJObE5kZlMlMkZEdURYTXk4ZTdSMWJtamZKJTJGa05obDlOdjU5S3RPZUxiTURPNkZrdEp0ZSUyQiUyRkNzdExoJTJCaGNheG00bVk1b2M1dExNcjA4WEszc3Q5SDdUUmQlMkZTcVBXVzExZkElMkZhJTJCT09wZE9jNmpxZU1ObGxZamNkdnVkald0OXpmVnIzYjhkJTJGJTJGb20lMkYxRSUyQjJGNWpwZjF1NkRqOVJ5TEtjcXUzcGVhZjFyRjFhR2glMkJoeW0wWE1yOTFUZlprc3IlMkZuY2IlMkZTV1k5YkZUd2Z0ZlVPcGRRd1JadnhzRExPTGgydUJleHJMSDIxWXpMTEFIdjlLM1pYJTJGd0FIJTJGT0xVdyUyQm5mVSUyRjZ4VkRCNmxnNCUyRlR1dEVGckxhRyUyQmdMWEQlMkZDNDJ6WTJ4JTJGJTJCbHc3ZjAxZjh1cjlPbiUyQnJveVBxbGxaZlRoaE1zcUJaYmxXaHhGamFoRkxMV0UlMkIyN0hadjNzYnNyOUg5TjYzJTJGQmpXMUw5SjlQRGElMkY2dWRjeCUyRlU2VGE3YlNINnV4TFQ3VzBPYzAlMkZvNkhUNm1GbDFmelglMkJuVjluMVI2djA3YmJoWnYyemE0dzE0OUswVms2ZW5rTWVXUHUyZnpuOHhWYiUyRndmMEYxR1ZoNG1kU1czTUQydmJBZkEzQUg5eHlvWW1SWjBvJTJGWTg5NCUyQnp0Qk5HUzdRYlIlMkJhOG42T3olMkZ3SCUyRnR0THlSYnlQVWNYTXF6em5ZMk5maDlUcmJaYmtrVnl4elFCdnptJTJCbTA0dnI3ZjBkJTJGbzJmclglMkJEJTJGVFYycmMlMkJybUgwYnFIVDhmY1clMkZiMk5lZDFGcm1Xc2FYT1pMZlJMSDAxVyUyQnB1OUwlMkJhWFVpQ0pIQldHZWdNNmQxSWRVNld6YkppJTJGRmJBYVd1UHZkViUyRlYlMkZuUFRTdE42VTQlMkZXZnFQazVqaFJqMkJvckRyTVhMT2pxbmdlMm0xck5yblYzZTFsbnBmOGIlMkZPMVVybSUyRnFMbFpIMWElMkJzZVQwM0l3TGE3czk3SzhuRnJZJTJCeDlmcCUyQnA2T2ZqdXBaNlZ2VDMlMkJyWTNJJTJGMFA2T3luOUYlMkJqWHJLU0NGSkpKSktVa2tra3AlMkYlMkY5WDFWSkpKSlNra2trbEtRTTNEcHpjZDJQYnVBZEJhOWhMWHNjTldXVlBiOUN4amtkSkpUeEhWZnE0T2w1YmMlMkJxNTVkbHZMTHEyRGF4MWxwclk3SUZiUDVpNjNiNzdLZjlIJTJCayUyRlFycFBxJTJGY0xNQVZsZ3J1cGNXWE00ZHVCajlJMHk3ZiUyRjFmMDB2ckIwaG5WdW5QbyUyQmprTW16RnRHanE3UUMxdGxiOU5qdmQlMkZxeFM2ZFdNajB1cEg5RmZiWHN5cXdJYWJHd3gzMCUyRmYlMkJpZlc5bjlSSG9wd3ZyQmg0ZUYxViUyQlhrVSUyRnFtWlFRTFNCNmRlWXh3dXg3SEFmcEd2czlMJTJGQiUyRjhKNml2V1ZaMmRqNHZWOEZnZmJrWSUyRm81V084aG9zcmRyMyUyQmk2dDducmVmV3g4YjJoMjBoelpFd1I5RnclMkZsSU9MZzQlMkJJNjUyT0N4dDd2VWZXRDdRNCUyRlNjeHY1bSUyRjg5SzFJdWpZajhQcFdMaldEYSUyQnVzQjdTWkljZmM1dTZYZm5GVzMxc2VJZTBPRXpCRTYlMkZOU1NRVXBKSkpKU2tra2tsS1NTU1NVcEpKSkpUJTJGQVAlMkZXOVZTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJGJTJGWiUyRiUyQjAxSWxCb2IzUnZjMmh2Y0NBekxqQUFPRUpKVFFRbEFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGhDU1UwRDZnQUFBQUFZRUR3JTJGZUcxc0lIWmxjbk5wYjI0OUlqRXVNQ0lnWlc1amIyUnBibWM5SWxWVVJpMDRJajglMkJDandoUkU5RFZGbFFSU0J3YkdsemRDQlFWVUpNU1VNZ0lpMHZMMEZ3Y0d4bEx5OUVWRVFnVUV4SlUxUWdNUzR3THk5RlRpSWdJbWgwZEhBNkx5OTNkM2N1WVhCd2JHVXVZMjl0TDBSVVJITXZVSEp2Y0dWeWRIbE1hWE4wTFRFdU1DNWtkR1FpUGdvOGNHeHBjM1FnZG1WeWMybHZiajBpTVM0d0lqNEtQR1JwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOU0c5eWFYcHZiblJoYkZKbGN6d3ZhMlY1UGdvSlBHUnBZM1ElMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWFYUmxiVUZ5Y21GNVBDOXJaWGslMkJDZ2tKUEdGeWNtRjVQZ29KQ1FrOFpHbGpkRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUXVVRTFJYjNKcGVtOXVkR0ZzVW1WelBDOXJaWGslMkJDZ2tKQ1FrOGNtVmhiRDQzTWp3dmNtVmhiRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDVHd2WkdsamRENEtDUWs4TDJGeWNtRjVQZ29KUEM5a2FXTjBQZ29KUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRm5aVVp2Y20xaGRDNVFUVTl5YVdWdWRHRjBhVzl1UEM5clpYayUyQkNnazhaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG1wdlluUnBZMnRsZER3dmMzUnlhVzVuUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrOFlYSnlZWGslMkJDZ2tKQ1R4a2FXTjBQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFU5eWFXVnVkR0YwYVc5dVBDOXJaWGslMkJDZ2tKQ1FrOGFXNTBaV2RsY2o0eFBDOXBiblJsWjJWeVBnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pQQzlrYVdOMFBnb0pDVHd2WVhKeVlYayUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVTJOaGJHbHVaend2YTJWNVBnb0pQR1JwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVhWFJsYlVGeWNtRjVQQzlyWlhrJTJCQ2drSlBHRnljbUY1UGdvSkNRazhaR2xqZEQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFF1VUUxVFkyRnNhVzVuUEM5clpYayUyQkNna0pDUWs4Y21WaGJENHhQQzl5WldGc1Bnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pQQzlrYVdOMFBnb0pDVHd2WVhKeVlYayUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVm1WeWRHbGpZV3hTWlhNOEwydGxlVDRLQ1R4a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVqY21WaGRHOXlQQzlyWlhrJTJCQ2drSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNUeGhjbkpoZVQ0S0NRa0pQR1JwWTNRJTJCQ2drSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4U1pYTThMMnRsZVQ0S0NRa0pDVHh5WldGc1BqY3lQQzl5WldGc1Bnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pQQzlrYVdOMFBnb0pDVHd2WVhKeVlYayUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVm1WeWRHbGpZV3hUWTJGc2FXNW5QQzlyWlhrJTJCQ2drOFpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbXB2WW5ScFkydGxkRHd2YzNSeWFXNW5QZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWs4WVhKeVlYayUyQkNna0pDVHhrYVdOMFBnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRm5aVVp2Y20xaGRDNVFUVlpsY25ScFkyRnNVMk5oYkdsdVp6d3ZhMlY1UGdvSkNRa0pQSEpsWVd3JTJCTVR3dmNtVmhiRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDVHd2WkdsamRENEtDUWs4TDJGeWNtRjVQZ29KUEM5a2FXTjBQZ29KUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWMzVmlWR2xqYTJWMExuQmhjR1Z5WDJsdVptOWZkR2xqYTJWMFBDOXJaWGslMkJDZ2s4WkdsamRENEtDUWs4YTJWNVBsQk5VRkJFVUdGd1pYSkRiMlJsVG1GdFpUd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UGxCTlVGQkVVR0Z3WlhKRGIyUmxUbUZ0WlR3dmEyVjVQZ29KQ1FrSkNUeHpkSEpwYm1jJTJCVEdWMGRHVnlQQzl6ZEhKcGJtYyUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCVUUxVWFXOW5ZVkJoY0dWeVRtRnRaVHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBsQk5WR2x2WjJGUVlYQmxjazVoYldVOEwydGxlVDRLQ1FrSkNRazhjM1J5YVc1blBtNWhMV3hsZEhSbGNqd3ZjM1J5YVc1blBnb0pDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzV6ZEdGMFpVWnNZV2M4TDJ0bGVUNEtDUWtKQ1FrOGFXNTBaV2RsY2o0d1BDOXBiblJsWjJWeVBnb0pDUWtKUEM5a2FXTjBQZ29KQ1FrOEwyRnljbUY1UGdvSkNUd3ZaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlXZGxVbVZqZER3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOUVdScWRYTjBaV1JRWVdkbFVtVmpkRHd2YTJWNVBnb0pDUWtKQ1R4aGNuSmhlVDRLQ1FrSkNRa0pQSEpsWVd3JTJCTUM0d1BDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENHdMakE4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQamN6TkR3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTlRjMlBDOXlaV0ZzUGdvSkNRa0pDVHd2WVhKeVlYayUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFF1VUUxQlpHcDFjM1JsWkZCaGNHVnlVbVZqZER3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOUVdScWRYTjBaV1JRWVhCbGNsSmxZM1E4TDJ0bGVUNEtDUWtKQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrSkNUeHlaV0ZzUGkweE9Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQkxURTRQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDQzTnpROEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpVNU5Ed3ZjbVZoYkQ0S0NRa0pDUWs4TDJGeWNtRjVQZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNRazhhVzUwWldkbGNqNHdQQzlwYm5SbFoyVnlQZ29KQ1FrSlBDOWthV04wUGdvSkNRazhMMkZ5Y21GNVBnb0pDVHd2WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlYQmxja2x1Wm04dVVFMVFZWEJsY2s1aGJXVThMMnRsZVQ0S0NRazhaR2xqZEQ0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRa0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRa0pQR0Z5Y21GNVBnb0pDUWtKUEdScFkzUSUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxsQk5VR0Z3WlhKT1lXMWxQQzlyWlhrJTJCQ2drSkNRa0pQSE4wY21sdVp6NXVZUzFzWlhSMFpYSThMM04wY21sdVp6NEtDUWtKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWMzUmhkR1ZHYkdGblBDOXJaWGslMkJDZ2tKQ1FrSlBHbHVkR1ZuWlhJJTJCTUR3dmFXNTBaV2RsY2o0S0NRa0pDVHd2WkdsamRENEtDUWtKUEM5aGNuSmhlVDRLQ1FrOEwyUnBZM1ElMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxsQk5WVzVoWkdwMWMzUmxaRkJoWjJWU1pXTjBQQzlyWlhrJTJCQ2drSlBHUnBZM1ElMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVqY21WaGRHOXlQQzlyWlhrJTJCQ2drSkNUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG1wdlluUnBZMnRsZER3dmMzUnlhVzVuUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVhWFJsYlVGeWNtRjVQQzlyWlhrJTJCQ2drSkNUeGhjbkpoZVQ0S0NRa0pDVHhrYVdOMFBnb0pDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaGNHVnlTVzVtYnk1UVRWVnVZV1JxZFhOMFpXUlFZV2RsVW1WamREd3ZhMlY1UGdvSkNRa0pDVHhoY25KaGVUNEtDUWtKQ1FrSlBISmxZV3clMkJNQzR3UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0d0xqQThMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqY3pORHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJOVGMyUEM5eVpXRnNQZ29KQ1FrSkNUd3ZZWEp5WVhrJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NVFUVlZ1WVdScWRYTjBaV1JRWVhCbGNsSmxZM1E4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWtKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVlc1aFpHcDFjM1JsWkZCaGNHVnlVbVZqZER3dmEyVjVQZ29KQ1FrSkNUeGhjbkpoZVQ0S0NRa0pDUWtKUEhKbFlXdyUyQkxURTRQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDR0TVRnOEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpjM05Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQk5UazBQQzl5WldGc1Bnb0pDUWtKQ1R3dllYSnlZWGslMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaGNHVnlTVzVtYnk1d2NHUXVVRTFRWVhCbGNrNWhiV1U4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWtKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbkJ3WkM1UVRWQmhjR1Z5VG1GdFpUd3ZhMlY1UGdvSkNRa0pDVHh6ZEhKcGJtYyUyQlZWTWdUR1YwZEdWeVBDOXpkSEpwYm1jJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1QlVFbFdaWEp6YVc5dVBDOXJaWGslMkJDZ2tKUEhOMGNtbHVaejR3TUM0eU1Ed3ZjM1J5YVc1blBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNTBlWEJsUEM5clpYayUyQkNna0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adlZHbGphMlYwUEM5emRISnBibWMlMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVRVkJKVm1WeWMybHZiand2YTJWNVBnb0pQSE4wY21sdVp6NHdNQzR5TUR3dmMzUnlhVzVuUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuUjVjR1U4TDJ0bGVUNEtDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhSVWFXTnJaWFE4TDNOMGNtbHVaejRLUEM5a2FXTjBQZ284TDNCc2FYTjBQZ280UWtsTkElMkJrQUFBQUFBSGdBQXdBQUFFZ0FTQUFBQUFBQzNnSkElMkYlMkI3JTJGN2dNR0FsSURad1VvQSUyRndBQWdBQUFFZ0FTQUFBQUFBQzJBSW9BQUVBQUFCa0FBQUFBUUFEQXdNQUFBQUJmJTJGOEFBUUFCQUFBQUFBQUFBQUFBQUFBQWFBZ0FHUUdRQUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTRRa2xOQSUyQjBBQUFBQUFCQUFaQUFBQUFFQUFRQmtBQUFBQVFBQk9FSkpUUVFtQUFBQUFBQU9BQUFBQUFBQUFBQUFBRCUyQkFBQUE0UWtsTkJBMEFBQUFBQUFRQUFBQWVPRUpKVFFRWkFBQUFBQUFFQUFBQUhqaENTVTBEOHdBQUFBQUFDUUFBQUFBQUFBQUFBUUE0UWtsTkJBb0FBQUFBQUFFQUFEaENTVTBuRUFBQUFBQUFDZ0FCQUFBQUFBQUFBQUU0UWtsTkElMkZVQUFBQUFBRWdBTDJabUFBRUFiR1ptQUFZQUFBQUFBQUVBTDJabUFBRUFvWm1hQUFZQUFBQUFBQUVBTWdBQUFBRUFXZ0FBQUFZQUFBQUFBQUVBTlFBQUFBRUFMUUFBQUFZQUFBQUFBQUU0UWtsTkElMkZnQUFBQUFBSEFBQVAlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkY4RDZBQUFBQUQlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkZBJTJCZ0FBQUFBJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGd1BvQUFBQUFQJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGOEQ2QUFBT0VKSlRRUUlBQUFBQUFBUUFBQUFBUUFBQWtBQUFBSkFBQUFBQURoQ1NVMEVIZ0FBQUFBQUJBQUFBQUE0UWtsTkJCb0FBQUFBQTFVQUFBQUdBQUFBQUFBQUFBQUFBQUZGQUFBQndnQUFBQkFBY3dCM0FHa0Fjd0J6QUY4QVlRQnlBRzBBZVFCZkFHc0FiZ0JwQUdZQVpRQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQndnQUFBVVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFRQUFBQUFBQUc1MWJHd0FBQUFDQUFBQUJtSnZkVzVrYzA5aWFtTUFBQUFCQUFBQUFBQUFVbU4wTVFBQUFBUUFBQUFBVkc5d0lHeHZibWNBQUFBQUFBQUFBRXhsWm5Sc2IyNW5BQUFBQUFBQUFBQkNkRzl0Ykc5dVp3QUFBVVVBQUFBQVVtZG9kR3h2Ym1jQUFBSENBQUFBQm5Oc2FXTmxjMVpzVEhNQUFBQUJUMkpxWXdBQUFBRUFBQUFBQUFWemJHbGpaUUFBQUJJQUFBQUhjMnhwWTJWSlJHeHZibWNBQUFBQUFBQUFCMmR5YjNWd1NVUnNiMjVuQUFBQUFBQUFBQVp2Y21sbmFXNWxiblZ0QUFBQURFVlRiR2xqWlU5eWFXZHBiZ0FBQUExaGRYUnZSMlZ1WlhKaGRHVmtBQUFBQUZSNWNHVmxiblZ0QUFBQUNrVlRiR2xqWlZSNWNHVUFBQUFBU1cxbklBQUFBQVppYjNWdVpITlBZbXBqQUFBQUFRQUFBQUFBQUZKamRERUFBQUFFQUFBQUFGUnZjQ0JzYjI1bkFBQUFBQUFBQUFCTVpXWjBiRzl1WndBQUFBQUFBQUFBUW5SdmJXeHZibWNBQUFGRkFBQUFBRkpuYUhSc2IyNW5BQUFCd2dBQUFBTjFjbXhVUlZoVUFBQUFBUUFBQUFBQUFHNTFiR3hVUlZoVUFBQUFBUUFBQUFBQUFFMXpaMlZVUlZoVUFBQUFBUUFBQUFBQUJtRnNkRlJoWjFSRldGUUFBQUFCQUFBQUFBQU9ZMlZzYkZSbGVIUkpjMGhVVFV4aWIyOXNBUUFBQUFoalpXeHNWR1Y0ZEZSRldGUUFBQUFCQUFBQUFBQUphRzl5ZWtGc2FXZHVaVzUxYlFBQUFBOUZVMnhwWTJWSWIzSjZRV3hwWjI0QUFBQUhaR1ZtWVhWc2RBQUFBQWwyWlhKMFFXeHBaMjVsYm5WdEFBQUFEMFZUYkdsalpWWmxjblJCYkdsbmJnQUFBQWRrWldaaGRXeDBBQUFBQzJKblEyOXNiM0pVZVhCbFpXNTFiUUFBQUJGRlUyeHBZMlZDUjBOdmJHOXlWSGx3WlFBQUFBQk9iMjVsQUFBQUNYUnZjRTkxZEhObGRHeHZibWNBQUFBQUFBQUFDbXhsWm5SUGRYUnpaWFJzYjI1bkFBQUFBQUFBQUF4aWIzUjBiMjFQZFhSelpYUnNiMjVuQUFBQUFBQUFBQXR5YVdkb2RFOTFkSE5sZEd4dmJtY0FBQUFBQURoQ1NVMEVLQUFBQUFBQURBQUFBQUUlMkY4QUFBQUFBQUFEaENTVTBFRVFBQUFBQUFBUUVBT0VKSlRRUVVBQUFBQUFBRUFBQUFBVGhDU1UwRURBQUFBQUFXcndBQUFBRUFBQUNnQUFBQWRBQUFBZUFBQU5tQUFBQVdrd0FZQUFIJTJGMlAlMkZnQUJCS1JrbEdBQUVDQUFCSUFFZ0FBUCUyRnRBQXhCWkc5aVpWOURUUUFDJTJGJTJCNEFEa0ZrYjJKbEFHU0FBQUFBQWYlMkZiQUlRQURBZ0lDQWtJREFrSkRCRUxDZ3NSRlE4TURBOFZHQk1URlJNVEdCRU1EQXdNREF3UkRBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBRU5Dd3NORGcwUURnNFFGQTRPRGhRVURnNE9EaFFSREF3TURBd1JFUXdNREF3TURCRU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd00lMkY4QUFFUWdBZEFDZ0F3RWlBQUlSQVFNUkFmJTJGZEFBUUFDdiUyRkVBVDhBQUFFRkFRRUJBUUVCQUFBQUFBQUFBQU1BQVFJRUJRWUhDQWtLQ3dFQUFRVUJBUUVCQVFFQUFBQUFBQUFBQVFBQ0F3UUZCZ2NJQ1FvTEVBQUJCQUVEQWdRQ0JRY0dDQVVERERNQkFBSVJBd1FoRWpFRlFWRmhFeUp4Z1RJR0ZKR2hzVUlqSkJWU3dXSXpOSEtDMFVNSEpaSlQ4T0h4WTNNMUZxS3lneVpFazFSa1JjS2pkRFlYMGxYaVpmS3poTVBUZGVQelJpZVVwSVcwbGNUVTVQU2x0Y1hWNWZWV1puYUdscWEyeHRibTlqZEhWMmQzaDVlbnQ4Zlg1JTJGY1JBQUlDQVFJRUJBTUVCUVlIQndZRk5RRUFBaEVESVRFU0JFRlJZWEVpRXdVeWdaRVVvYkZDSThGUzBmQXpKR0xoY29LU1ExTVZZM00wOFNVR0ZxS3lnd2NtTmNMU1JKTlVveGRrUlZVMmRHWGk4ck9FdzlOMTQlMkZOR2xLU0Z0SlhFMU9UMHBiWEYxZVgxVm1aMmhwYW10c2JXNXZZbk4wZFhaM2VIbDZlM3glMkYlMkZhQUF3REFRQUNFUU1SQUQ4QTlWU1NTU1VwSkpKSlNra2trbEtTU1NTVXM0dURTV2lYUm9PSktGaTNPdngyV3Zic2U0ZTVnTXdSbzVzb3lwZE95TjltVFNSSHBXdmo0T2M0JTJGd0RWZjlXa3B1cEpKSktVa2tra3BTU1NTU2xKSkpKS1Vra2trcCUyRiUyRjBQVlVrbENxeHR0YmJHJTJGUmVBNGZBcEtacEpKSktVbzJXTnJyZFk4dzFnTG5IeUFsVk9zV3Zvd1haRFolMkZRT1phOEQ5eHJtbTMlMkZOcjNQVXN3bSUyRnBtUUdhbXlsNGJIaVd1aEpUWXFzRnRUTEJ3OW9kOTRVMVE2RmtmYU9rNHRzenVxWWZ3VjlKU2xsMSUyRm9PdDJzT2d1RFhnZVRtN2YlMkZQbU4lMkZ3Q0NMVVdaMVZocnlzYktBJTJCanVhN3pndHVaJTJGMUZxSVVYVFNRY3ZLWmk0N3NoN1hPWTB0QkRZSmh6bXMzYWtmUjNibFZkMTNwck10dUklMkJ3c2UlMkY2TDNBaG03bjAlMkZVJTJCaTJ6YWZ6a0ZPZ3E5JTJCZGowWkZPTTRrM1pEdHJHTkVuaHp0N3YzV2JXUFU4YkpweWF2VnBkdVp1YzJlTldPTmIyJTJGMlh0WE9ZMlZVN3JBNmhuTzlSdUpTJTJCcjFoTzFsZ3VHSmJ1WXoyZXh0dnYzZnpMUFUlMkZ3Q0VTVTlRa2tra3BTU1NTU2xKSkpKS2YlMkYlMkZSOVZXZjBpd2l1M0ZmOUxHc2V3VCUyQjZEN1AlMkZBeXh5MEZtdW5INnhQRE1wZ2QlMkZiWkZUJTJGd0RvT3glMkYlMkIyMFFwMGxDMDJDdHhxQUx3RHRCNEo4Rk5KQlRWb3Z4JTJCbzRqdmJMTEdsbHRUdVJNc3NyZiUyRkFOSml6JTJCaFpEcU1PJTJGRXlDWDJkT2M2dCUyQmt1YzFnbXQlMkIzJTJGaGFQVGVvWjVzNlIxSVpyQkdEbGtOdkklMkJqWGNZWXl4JTJGN3RXVjlCJTJGd0R3JTJGd0R3bHlEMUxxV0gwanEyTjFPNTVyeE9vZ1kxcndDNEM5dXVQNm16ZHQ5V2wxdjZUJTJCYiUyRkFGZEZTJTJGMU15cSUyRjJWVGh1c2ElMkIydHN0Mms2c1B1WTczQnJtJTJGbzNWdjJmeSUyRjNGMFM0VEF6cSUyQm0lMkZXRHF1S0duYmhXT3lhNjJEVVVscmNteXVsa3RaNmYyZXkxOVd6OCUyRjJMczJaJTJCRll4MWpMNnl4Z0JlJTJGY0lBSTNDWGZOSXFaWDN1cnNxcXJaNmo3VHFKZ05ZMlBVc1BQMGR5cGZXSiUyRm85Tk9UMnhyYXJIVHhzM3Raa2YlMkJ5NzdWUjZ2OWJlamROc2JrYjNaYnFtMnNmVmpnT09ocmRaRmxqcXNmZlhzJTJGbXZWOVYlMkYlMkJEWEhkWiUyQnV2VTh6QTZpJTJCajAyWTF6YXdhWkx0MkxZMjF0bHRiN1hPYjZqNiUyRndEUjFWJTJGelYzNnY2clBWWUZVJTJCaUNzNVBTN2NkNDNPMldVT0I3N2QxWCUyRlQyN2x3dlZuTnlLSzhkMTVxNmhpajIwN285ZGczREhkVzltOXpMdjhBUSUyRjRXdTcxSyUyRlR0cjlhcXpKJTJCdUhWOHRtUjB6Tm95THZzWFU4TnI3Y2R0am10TjFKOUslMkIycG9kc2JrMSUyRm8lMkY4QTBZc25HNnRlJTJCbkxaYmRYWFk2cHR0QUROd3Vjd21odjJjV2J2MHRuciUyRnBLbmZwS2JLZjhBdHNxRDFEdnJqbmZWNzBjS2xsZGd6Z2JxamY3UUhCM3Ayc0cwc2I2bHYwJTJGZlo2VEVjWmc2MzB4ejJ2ZXpLNmpWYmZoVnRmNmJpUSUyQnhsdG1OWTdhMno5SnMzVnUlMkZ3YXl2ckhoMSUyQmhoZEt2M1h1YmpCaFk5d0RiSHRQcE9kWGtPSDZ0MURkJTJGUnNsJTJGNkMlMkZ3RG9tVjdGZzlXYyUyRkYlMkJxM1JMNmJpYmVuNVdWamg0bGxqZHhiZXhsdGYwNkxhOXZ2cCUyRk0lMkZ3QUZaJTJGaEV1cW4wcjZsZlhNOVdZenB2Vm9vNnd4dmNiQmNHajlMdHIwOUxMb2o5YnhmJTJCdlUlMkZvZjVtejlhdnJKZDAlMkIyakJ3SEFaVHJjZDE3aUE3YlZaYTJuWTBIJTJGQ1h3OXYlMkZBQWRmJTJGV2w1emlkUVo5WmNZM2wzb2Rkd2cyejFtSFo2eldmUXYzdDIlMkJuazAlMkZ3Q24lMkZ3RFJmOHhmNkRmMURxdlhHWiUyQmU1dHpzaTdHZDZsbTJrUHNxTmJxcU9HMSUyRjRDdXhucHQlMkZTNyUyRjlJOUFMalIxR2g3Zjk2JTJCdUpKcEExS1pqMldORG1PRG1uaHdNaEpheVNTU1NVJTJGd0QlMkYwdlZWbjlhaXJGR1lTR2pFY0xYdU9rViUyRnpkNUolMkZkWlUlMkZ3QlglMkZyYTBFSE05RDdKZjlwRTQlMkZwdjlZSFgyYlQ2bW45UklLY0U5VTZsZ1huSkR2Mmwwak4lMkZTNDk3UzM5QzUzMHNPeXhuJTJCQmMlMkYlMkJoNVA4MyUyRjJreWZTJTJGUjVObFBydjE2dXdjekV4c1BIRm96TEJSV0h6NnJyaVdNOU91djZIczlUM3ZzZXVlNkI5YnVvWkY1eEJVODRCREMlMkJ0b1pZVzFQY3pHJTJCMDJHeG03MUdiMlhQMmZvZDdQNW10Y3QxNjdxJTJGVDg3R2RmayUyRmJzY1dISTZWMU5yUU5HdTNPMk5aNmZwNUZOOWRUY3JIM2VwUjZmOVJLd1JZWHpoS0V1R1lvJTJGeGZTTXZNNmxabEYlMkZWZlNvYlUxMVE5TUd5cUxmYSUyQnJQOVBKc3I5S3owOW42YkdxJTJGN2RXTjF6OVZ4QzNLZlpUMCUyQiUyQlBVeUdnNU5JYVBkVTdlelplN0t4UFIlMkZSNUd5cjFzWDlEYjYlMkZ3RGd1WnglMkJ2MzUyYmU0V053ZnQlMkI5dGIybjIxbXphJTJGMDdYbjIlMkZwN3FtVmVwNmRiUDB2cWZvbHFaRDdtWTkxZURtWGg5cEJBWkRHalQ5YXd2YiUyQmtwM1clMkZwMk1ka2ZwYXYxYiUyQlhVYjBXdWxUZVAyM2g1RGkzSkwzVVlXVFl6bHpiS24xc2M1ck43YmFNM0ZaOXB3OHhydlN2ciUyRlFmMGltNnV2SDZ2WTdHNmhmUzJteDFXRllhcTdibmslMkJvMnIwcktQVGE3YnVzdHhYMjAlMkJ6JTJCbGY0UlclMkZxUFhlTTQwM3MlMkZROUxwZGJRNHY5N1dsNERjVzFudWQ2UHFmckgyZTluc3pNYXZOeCUyRnM5JTJGMmhBNmk1cjc3SFpMSDI0VG4xVzQlMkJVd2oyUHZhM0pkajViZnphSGI4bjdGayUyRjRQOVl4UDB0WDh3dWxxYVdmYjFDelo2R2FNMzA2MjJXREQlMkZTVjFtcDNzZlk2dGpXT3NZMXRmODc3NmElMkZUUTdzMjdxRk5WSXJxd0FmVXNiWlJYdDlTME45S3kxdFg4MyUyQmdyZSUyRjFzZWolMkZBRTFsektsdGREdGJpOVpKc3FxYlRhQlhkUzBUYlc2OFB5Y1V4Tmo4cXJJYlIlMkZwUFUlMkZTYjYlMkZUeXY2VldmMHF2T3J6bXNZYXNuR3pIbWs3Z3gxWmE2SzJYUjdzZCUyQjV2Nks3OUpYaTNiUFUlMkZWOGk3MVJSVTUlMkZXYUxNdjZrWWo3U0dYOUw2ZyUyQnFLJTJGb3NyeW1ldXgxY2Y0QjE3ZllzcnB1UG1OeGZ0ejYzUGN3bDlEV0RRMnNJcVprTkolMkZOWmU2bHVSNmYlMkZBQVglMkZBQVMxZjJwWFgwdnElMkJKbG43TGZrVlZ0YTNaQWZsNDkyOW15biUyRkE3NnJMcTg2ciUyQmJvJTJGNHF5aFZydW9aZlNlazRsZG1NMTJQZTIyN0Q5WFFCdHZwdHUzJTJCN2Q2VnI2NlhmMlBVJTJGd2lTbnN1cW5EeUxNZkZ0TVpPUmolMkJyWFNQZUhGc2VvMmw3ZzMxTGElMkZWJTJCaCUyRjJvcSUyRndmcWZwRnpuVmNkOXVEWml2YXh6RFpYYTF6enRaYVhCMUxXJTJCdiUyRmdiJTJGWlZYaTV0djgzJTJGUnNqOUFzTHFmWHYyajAlMkZwWHFQRmVkZ051cmZhMTBGM3Vxc3g4bHY4QW8zT2J2cmYlMkZBTVQ2biUyQkZRcXVxNTklMkZVUmVjMXpiN0NIWE1jOGh0bXc3bjQ3djhCdHVjUFViNnY2UDlMZDY5aU5vUzlINlZrMFp6Y3BqM3RxcWVXMUFBdHVjJTJGOEFtN01leWh2Nld2WiUyRk5aWCUyRkFJRXVnenVrMTRlTGlONjlmYmk0OXU2d2dCanlXTmI2ZFA2SU9hNTJWNnZ0MjQ3UDBkRCUyRkFGUDBhampkYzZrQmVla1lRZDFESXMydHNaVlpiZFZYdDl0WXFzRzklMkIzJTJGVFBaJTJCbCUyRndCQ3NhanBYViUyQnRYMlp3byUyRmFsN1d1dnY5UzBNZWEyJTJGVDIlMkJ2WjdtMWUxajZHVjc2UFolMkZwSzBORTdhdnBIMVo2OW5kVTZUaTRtUDZtVlprdEJkYmtQM3VxYldUUmtqS3VZR2I5dDFlNnYyNzc2clA5SXV5dzhWdUpqdG9hUzh0a3VlZVhPY2R6MyUyRjJuTHliNnZkWnY2RGpES3dtVnQzbHpic1p6M1ZzWmNIbHVUZ1g0OTloZlJZeHV6SnduJTJGem5zeUtyTEx2OEgydlQlMkZyOWhPREslMkJzTSUyRlp1U1drdnJ0RmpDMXdMbXZyJTJGV0txVyUyRm0lMkJ6YlolMkJrUlI0dlZwS24wM3ElMkZUZXE0N01ucCUyQlF5JTJCdDdXdkcwJTJCNEJ3M045U3MlMkZwSyUyRiUyQnVOVnhCVCUyRkFQJTJGVDlWVE9hMTdTeHdEbXVCRG1uVUVIc1U2U1NueGY2eDlDelBxdDFFQ2l4N0dNZWJlbjVRMGNhbmV5eWx6dm91dG8zTXJ1WiUyRmhhdjBucCUyRnBGVXJ5YU1qRnZyenBzNmRrUGJabVVzSHZ4N3pGYmVyNGY3cmJMUDZXeiUyRkFFbG4lMkJpdll2WSUyQnU5TDZmMVhwbDJIMUdHME9HNzFTUTAxdUgwYjJQZDlCN1AlMkZVYiUyRndCR3ZIOHZwRjNUNyUyRlFwY0g1TkllYTdhejZsZVhTZDIlMkJ6SGpkVzcwcUhiTW5FJTJGd2xTWnJFMk51emZqS0hNWSUyQkdmcHpSMm4lMkZMOUg5NXdNJTJGQnlPazVoeHNnaXl1d2I2cm02MTNWSDZOMVglMkZBS01yVzEwanFicm1IRHlIbDhNaGpZM0c2c0hkNlBPMzE4ZHY2ZWl6MDdmVzlQMHYlMkJPSGlQeGM2bjlqNTUyWWRoM1ltVnk3RnRQNSUyQnZ2Zml1JTJGdyUyRiUyRkIlMkZwZjV6ZWhZdjFhNnBWazVXTG5oJTJCSlpoTUw2cm1pV3ZzQlk2dDFGbjBuMU5ZNzdUdnAlMkZTZjhXbmlqcU5Xbk9Fc2NqR1E0WkI3T2lnMGZWN0xmMDFycjhycVIydGV6M1hQYkJ4NjdYc1l6YXl4amJNbDltMzglMkY5SiUyQmwlMkZTJTJCcHpydlV4TVdxdnFOVnVKa3N4MzQwMnpXNW9vc2JkU2NpZzcyNU9IZDlxWTZ2JTJCYzJaT0xUNk5uODh5M2U2WDF1eWs5TmV4em5ZZCUyQlBkaTJNYzFsVHhsNHp0em5XdTNiS2ZXWlpYYnM5VDA2ZjB5cGRZNkoxSHIlMkZWSDlXcnRwc3g2bU1xRkRTJTJGMVdpc0YzMFhOYTUlMkI1NzdiZjBleXolMkZSViUyQnFuSHdXMVJvdERGNnhheTQ5VHZpa3M5T0hOQkFjOWcyc2ZjMW03WnUyJTJGb0clMkZReHYzUFNUOUx3MmRUYmxNJTJCMVcxc2REaXhvTTJ2dTNmMDkzNk90M3BPWnN1cnAlMkZRNUglMkJqJTJGd2FKajRHWGYwNTJaamVwUmpibU9yeXdOek5qSHVsaDlNZWc1ek4lMkIxbHJuJTJGNFI5ZnAlMkZwRll4Y0hENmV5Nm5JdGRTR0FPdGRsRndobGglMkZSdUhwTjNQcGJ2OEE1eG5xZW1nRk9aMSUyRkR5TVc3N1QxRElPUXk0dnJhOTFicUMwMGVuJTJCaVl4JTJGMDZOcnFuZXYlMkZBSWYlMkZBRWoxV3hhRzJzeEtPbzlNdTZpSzMyVVllT0xITUwzdkxyTnJybXUzJTJCbHYlMkZBUFJpMWN2cGwxUFVxVzNOZmg1VkozNCUyQk5tTzlYRXVySHUlMkZWN3QxakdNc1lmMG5vUDluJTJGQUFOcXY5UTZXODR3NjMwaG4yY3VGZDFqY1lHeXNqUzZxekx4bWl1M0Z5YWR2ODk2TlglMkJsJTJCMmVxaFNTQlExdSUyRndlZDZ6OVglMkJydEZKSDFkWmoxYWdFTnNxWnVJQjlFUHN2YmtXN1dqNmVTJTJGNmZxJTJCaiUyQmpXT2NiTnc4aG5xZE54cTN0aXpaWVhPYTRUeTdma1dibU5kJTJGT2Jmb2Y0UmRwVDFmcUhVczFyYyUyRkxma3R5UlUydkdhNGJTSE5lUHRGTDNlbDZWbUxsVmVqWjdmMG0lMkYxY2olMkJaJTJCMFdidlNmcW4wJTJGcTFlVGpkUklkbFZzcHNxY3h3QnFjOFBiZlclMkJyWDM3NiUyRlR0ZiUyRkFLSDBiY1M2djJXSlhxdWxqNFlDWEVEWnF1cnhuMWR4WGRSb3N1dzc4aG5YY1I1ZFNXdTIyT3JZMmJxc2RuMDNaRlR0OTMyT3oyWldMNmxWTFBXb1hTMTlIenVwOVBxJTJCc2ZUTVl0eThrbjdaUlhEQ3k1aGRWYjFERXJlJTJGOU5VNzlMdnhIYkxjbGo3S2Y1cklzcFhFNW1QbTlKNnElMkZMcWE4MllybXZmVkpIcVVzZCUyQmd5cUxhdGxuMGElMkYwM3BQOEFXeExtZXJWJTJCNWolMkJ6JTJGVTdxdlIlMkJwOUNvdDZRTmxMSmJaUTV4ZFpYYjlPMWw3M1M5OWpudTMlMkJxNyUyQmUlMkZuRW1ONTdxdjFYNmI5YyUyRnE5OW94V054JTJCdVl4Y3l4N2c5cmpjMlBYeE01dDM2eDZkam10OUgxdjAyTCUyQmk5TCUyRkNWV2N6OVZQcjUxbnBQV1g5SCUyQnN4dXk4Ykl0Rk5veUR2dG90OXRJY04lMkYwNkhlMzE2UCUyRkFFS28lMkZ3QUo5cDloYlhXMTdudGFBOThiM0FRWFFJYnVQNXk0MyUyRkdCOVEyZGZwJTJGYVhUV3RaMWlsb0VHR2pJWTMlMkZBUGU3JTJCYXlHJTJGOEFhZkolMkY2emIlMkJpJTJGU1VKVDJUSzY2eHRyYUdBQUFCb0FFQWJXOGZ5VkplY2ZVYnFQOEFqSFBWMzFkWHhNako2YyUyRmF5MjdMYU1kMUphTmdzb0R4WDlvOXJmMHphVzIlMkJyJTJGUGVwJTJGcFBSMGxQJTJGOVQxVkpKSkpTRE5MJTJGc3I5Z2VYR0FCVzFybmFrRDZGMzZQJTJCc3VBd3VtViUyRldYTnJ4SHZjeW1xaDJTN0lxTG5SYSUyQjdKZmoyVVBjR3RxZHZ5ZlZzcFo3SyUyRlElMkJ5MSUyRm9hVjZGZmowNUZacXZZTEt5UVMxM0VnN20lMkY5SktpbXZIcHJvckVWMU5ER0R3RFJ0YWtrRWcyTkNObnhEcWRHYjBMcnUzcUZESFg0MXJMVFdHeFZleVI3NjI2dGRWbU5hJTJGMVAzTFBXcjlpMmNtenJwWTV0ZEI2Z3pwTDdLcTdXR1hQcXFmNkQ4SEljMWdaOXVwbyUyRjdUJTJGem1WWCUyRkFEWHFyMGJyT0YwJTJCNDEzNWJXVkZnYzA1a0QxV01QMDZhcmkxN3EyNVA4MVolMkIlMkZYJTJCaSUyQm5hdVR5c2ZxblFlb002aDA2bDkxZVcySDRqd2YxdWhnYzcwTHEzRGRWMVhHeG03OGQ3JTJGd0NmbyUyRlFYZnBLN0dJUkZYNHMyZk43dkFlR3BSandrOTNJeU9qNVZEbk42VTUlMkZVTWElMkZmbFlsTEd1TG0lMkJxeG5wZmFkckcxdGRrMzAyVWZhdiUyQnMyZW4lMkZOclElMkJyZDklMkJObE5kZlMlMkZEdURYTXk4ZTdSMWJtamZKJTJGa05obDlOdjU5S3RPZUxiTURPNkZrdEp0ZSUyQiUyRkNzdExoJTJCaGNheG00bVk1b2M1dExNcjA4WEszc3Q5SDdUUmQlMkZTcVBXVzExZkElMkZhJTJCT09wZE9jNmpxZU1ObGxZamNkdnVkald0OXpmVnIzYjhkJTJGJTJGb20lMkYxRSUyQjJGNWpwZjF1NkRqOVJ5TEtjcXUzcGVhZjFyRjFhR2glMkJoeW0wWE1yOTFUZlprc3IlMkZuY2IlMkZTV1k5YkZUd2Z0ZlVPcGRRd1JadnhzRExPTGgydUJleHJMSDIxWXpMTEFIdjlLM1pYJTJGd0FIJTJGT0xVdyUyQm5mVSUyRjZ4VkRCNmxnNCUyRlR1dEVGckxhRyUyQmdMWEQlMkZDNDJ6WTJ4JTJGJTJCbHc3ZjAxZjh1cjlPbiUyQnJveVBxbGxaZlRoaE1zcUJaYmxXaHhGamFoRkxMV0UlMkIyN0hadjNzYnNyOUg5TjYzJTJGQmpXMUw5SjlQRGElMkY2dWRjeCUyRlU2VGE3YlNINnV4TFQ3VzBPYzAlMkZvNkhUNm1GbDFmelglMkJuVjluMVI2djA3YmJoWnYyemE0dzE0OUswVms2ZW5rTWVXUHUyZnpuOHhWYiUyRndmMEYxR1ZoNG1kU1czTUQydmJBZkEzQUg5eHlvWW1SWjBvJTJGWTg5NCUyQnp0Qk5HUzdRYlIlMkJhOG42T3olMkZ3SCUyRnR0THlSYnlQVWNYTXF6em5ZMk5maDlUcmJaYmtrVnl4elFCdnptJTJCbTA0dnI3ZjBkJTJGbzJmclglMkJEJTJGVFYycmMlMkJybUgwYnFIVDhmY1clMkZiMk5lZDFGcm1Xc2FYT1pMZlJMSDAxVyUyQnB1OUwlMkJhWFVpQ0pIQldHZWdNNmQxSWRVNld6YkppJTJGRmJBYVd1UHZkViUyRlYlMkZuUFRTdE42VTQlMkZXZnFQazVqaFJqMkJvckRyTVhMT2pxbmdlMm0xck5yblYzZTFsbnBmOGIlMkZPMVVybSUyRnFMbFpIMWElMkJzZVQwM0l3TGE3czk3SzhuRnJZJTJCeDlmcCUyQnA2T2ZqdXBaNlZ2VDMlMkJyWTNJJTJGMFA2T3luOUYlMkJqWHJLU0NGSkpKSktVa2tra3AlMkYlMkY5WDFWSkpKSlNra2trbEtRTTNEcHpjZDJQYnVBZEJhOWhMWHNjTldXVlBiOUN4amtkSkpUeEhWZnE0T2w1YmMlMkJxNTVkbHZMTHEyRGF4MWxwclk3SUZiUDVpNjNiNzdLZjlIJTJCayUyRlFycFBxJTJGY0xNQVZsZ3J1cGNXWE00ZHVCajlJMHk3ZiUyRjFmMDB2ckIwaG5WdW5QbyUyQmprTW16RnRHanE3UUMxdGxiOU5qdmQlMkZxeFM2ZFdNajB1cEg5RmZiWHN5cXdJYWJHd3gzMCUyRmYlMkJpZlc5bjlSSG9wd3ZyQmg0ZUYxViUyQlhrVSUyRnFtWlFRTFNCNmRlWXh3dXg3SEFmcEd2czlMJTJGQiUyRjhKNml2V1ZaMmRqNHZWOEZnZmJrWSUyRm81V084aG9zcmRyMyUyQmk2dDducmVmV3g4YjJoMjBoelpFd1I5RnclMkZsSU9MZzQlMkJJNjUyT0N4dDd2VWZXRDdRNCUyRlNjeHY1bSUyRjg5SzFJdWpZajhQcFdMaldEYSUyQnVzQjdTWkljZmM1dTZYZm5GVzMxc2VJZTBPRXpCRTYlMkZOU1NRVXBKSkpKU2tra2tsS1NTU1NVcEpKSkpUJTJGQVAlMkZXOVZTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJCcWtsOHFwSktmcXBKZktxU1NuNnFTWHlxa2twJTJGJTJGWkFEaENTVTBFSVFBQUFBQUFWUUFBQUFFQkFBQUFEd0JCQUdRQWJ3QmlBR1VBSUFCUUFHZ0Fid0IwQUc4QWN3Qm9BRzhBY0FBQUFCTUFRUUJrQUc4QVlnQmxBQ0FBVUFCb0FHOEFkQUJ2QUhNQWFBQnZBSEFBSUFCREFGTUFNZ0FBQUFFQU9FSkpUUVFHQUFBQUFBQUhBQUlBQUFBQkFRRCUyRjRUa2phSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMd0E4UDNod1lXTnJaWFFnWW1WbmFXNDlJdSUyQjd2eUlnYVdROUlsYzFUVEJOY0VObGFHbEllbkpsVTNwT1ZHTjZhMk01WkNJJTJGUGdvOGVEcDRiWEJ0WlhSaElIaHRiRzV6T25nOUltRmtiMkpsT201ek9tMWxkR0V2SWlCNE9uaHRjSFJyUFNJekxqRXVNUzB4TVRJaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwNFlYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SSUyQkNpQWdJQ0FnSUNBZ0lEeDRZWEJOVFRwRWIyTjFiV1Z1ZEVsRVBuVjFhV1E2UlRjeE9UVkZOVFkxTnpNek1URkVSRGxGTnpKR1EwRTJRamt3UVVaQlJqVThMM2hoY0UxTk9rUnZZM1Z0Wlc1MFNVUSUyQkNpQWdJQ0FnSUNBZ0lEeDRZWEJOVFRwSmJuTjBZVzVqWlVsRVBuVjFhV1E2UlRjeE9UVkZOVGMxTnpNek1URkVSRGxGTnpKR1EwRTJRamt3UVVaQlJqVThMM2hoY0UxTk9rbHVjM1JoYm1ObFNVUSUyQkNpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwNFlYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOGVHRndPa055WldGMFpVUmhkR1UlMkJNakF3T0Mwd055MHhPVlF4TkRvMU56bzBNUzB3TlRvd01Ed3ZlR0Z3T2tOeVpXRjBaVVJoZEdVJTJCQ2lBZ0lDQWdJQ0FnSUR4NFlYQTZUVzlrYVdaNVJHRjBaVDR5TURBNExUQTNMVEU1VkRFME9qVTRPakExTFRBMU9qQXdQQzk0WVhBNlRXOWthV1o1UkdGMFpUNEtJQ0FnSUNBZ0lDQWdQSGhoY0RwTlpYUmhaR0YwWVVSaGRHVSUyQk1qQXdPQzB3TnkweE9WUXhORG8xT0Rvd05TMHdOVG93TUR3dmVHRndPazFsZEdGa1lYUmhSR0YwWlQ0S0lDQWdJQ0FnSUNBZ1BIaGhjRHBEY21WaGRHOXlWRzl2YkQ1QlpHOWlaU0JRYUc5MGIzTm9iM0FnUTFNeUlFMWhZMmx1ZEc5emFEd3ZlR0Z3T2tOeVpXRjBiM0pVYjI5c1Bnb2dJQ0FnSUNBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNlpHTTlJbWgwZEhBNkx5OXdkWEpzTG05eVp5OWtZeTlsYkdWdFpXNTBjeTh4TGpFdklqNEtJQ0FnSUNBZ0lDQWdQR1JqT21admNtMWhkRDVwYldGblpTOXFjR1ZuUEM5a1l6cG1iM0p0WVhRJTJCQ2lBZ0lDQWdJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQZ29nSUNBZ0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenB3YUc5MGIzTm9iM0E5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmNHaHZkRzl6YUc5d0x6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOGNHaHZkRzl6YUc5d09rTnZiRzl5VFc5a1pUNHpQQzl3YUc5MGIzTm9iM0E2UTI5c2IzSk5iMlJsUGdvZ0lDQWdJQ0FnSUNBOGNHaHZkRzl6YUc5d09raHBjM1J2Y25rdlBnb2dJQ0FnSUNBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwUGNtbGxiblJoZEdsdmJqNHhQQzkwYVdabU9rOXlhV1Z1ZEdGMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFlVbVZ6YjJ4MWRHbHZiajR4TURBd01EQXdMekV3TURBd1BDOTBhV1ptT2xoU1pYTnZiSFYwYVc5dVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwWlVtVnpiMngxZEdsdmJqNHhNREF3TURBd0x6RXdNREF3UEM5MGFXWm1PbGxTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBTWlhOdmJIVjBhVzl1Vlc1cGRENHlQQzkwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBPWVhScGRtVkVhV2RsYzNRJTJCTWpVMkxESTFOeXd5TlRnc01qVTVMREkyTWl3eU56UXNNamMzTERJNE5DdzFNekFzTlRNeExESTRNaXd5T0RNc01qazJMRE13TVN3ek1UZ3NNekU1TERVeU9TdzFNeklzTXpBMkxESTNNQ3d5TnpFc01qY3lMRE13TlN3ek1UVXNNek0wTXpJN1F6QTFRVEU1TURSR1JqQXdRVUpFUXpBMU1VSkVSa0ZHTURJd05FVkJOVEU4TDNScFptWTZUbUYwYVhabFJHbG5aWE4wUGdvZ0lDQWdJQ0E4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02WlhocFpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzlsZUdsbUx6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCUyQk5EVXdQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQak15TlR3dlpYaHBaanBRYVhobGJGbEVhVzFsYm5OcGIyNCUyQkNpQWdJQ0FnSUNBZ0lEeGxlR2xtT2tOdmJHOXlVM0JoWTJVJTJCTFRFOEwyVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VG1GMGFYWmxSR2xuWlhOMFBqTTJPRFkwTERRd09UWXdMRFF3T1RZeExETTNNVEl4TERNM01USXlMRFF3T1RZeUxEUXdPVFl6TERNM05URXdMRFF3T1RZMExETTJPRFkzTERNMk9EWTRMRE16TkRNMExETXpORE0zTERNME9EVXdMRE0wT0RVeUxETTBPRFUxTERNME9EVTJMRE0zTXpjM0xETTNNemM0TERNM016YzVMRE0zTXpnd0xETTNNemd4TERNM016Z3lMRE0zTXpnekxETTNNemcwTERNM016ZzFMRE0zTXpnMkxETTNNemsyTERReE5EZ3pMRFF4TkRnMExEUXhORGcyTERReE5EZzNMRFF4TkRnNExEUXhORGt5TERReE5Ea3pMRFF4TkRrMUxEUXhOekk0TERReE56STVMRFF4TnpNd0xEUXhPVGcxTERReE9UZzJMRFF4T1RnM0xEUXhPVGc0TERReE9UZzVMRFF4T1Rrd0xEUXhPVGt4TERReE9Ua3lMRFF4T1RrekxEUXhPVGswTERReE9UazFMRFF4T1RrMkxEUXlNREUyTERBc01pdzBMRFVzTml3M0xEZ3NPU3d4TUN3eE1Td3hNaXd4TXl3eE5Dd3hOU3d4Tml3eE55d3hPQ3d5TUN3eU1pd3lNeXd5TkN3eU5Td3lOaXd5Tnl3eU9Dd3pNRHRFTkRZek4wTkNPVVEwTVVFeE1FSkJOMFZHTlVWQ1EwUkNOak14T0RNeU9Ud3ZaWGhwWmpwT1lYUnBkbVZFYVdkbGMzUSUyQkNpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWSUyQkNqd3ZlRHA0YlhCdFpYUmhQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBbzhQM2h3WVdOclpYUWdaVzVrUFNKM0lqOCUyQiUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFDQVlHQmdZR0NBWUdDQXdJQndnTURnb0lDQW9PRUEwTkRnME5FQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVKQ0FnSkNna0xDUWtMRGdzTkN3NFJEZzRPRGhFUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQlJRSENBd0VpQUFJUkFRTVJBZiUyRmRBQVFBSGYlMkZFQWFJQUFBQUhBUUVCQVFFQUFBQUFBQUFBQUFRRkF3SUdBUUFIQ0FrS0N3RUFBZ0lEQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFDQVFNREFnUUNCZ2NEQkFJR0FuTUJBZ01SQkFBRklSSXhRVkVHRTJFaWNZRVVNcEdoQnhXeFFpUEJVdEhoTXhaaThDUnlndkVsUXpSVGtxS3lZM1BDTlVRbms2T3pOaGRVWkhURDB1SUlKb01KQ2hnWmhKUkZScVMwVnROVktCcnk0JTJGUEUxT1QwWlhXRmxhVzF4ZFhsOVdaMmhwYW10c2JXNXZZM1IxZG5kNGVYcDdmSDElMkJmM09FaFlhSGlJbUtpNHlOam8lMkJDazVTVmxwZVltWnFibkoyZW41S2pwS1dtcDZpcHFxdXNyYTZ2b1JBQUlDQVFJREJRVUVCUVlFQ0FNRGJRRUFBaEVEQkNFU01VRUZVUk5oSWdaeGdaRXlvYkh3Rk1IUjRTTkNGVkppY3ZFekpEUkRnaGFTVXlXaVk3TENCM1BTTmVKRWd4ZFVrd2dKQ2hnWkpqWkZHaWRrZEZVMzhxT3p3eWdwMCUyQlB6aEpTa3RNVFU1UFJsZFlXVnBiWEYxZVgxUmxabWRvYVdwcmJHMXViMlIxZG5kNGVYcDdmSDElMkJmM09FaFlhSGlJbUtpNHlOam8lMkJEbEpXV2w1aVptcHVjblo2ZmtxT2twYWFucUttcXE2eXRycSUyQnYlMkZhQUF3REFRQUNFUU1SQUQ4QTclMkZtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtcmxISTJ1dFhuNldsdG5GRVNiMFJGU3A0MVdqRDVxM0xDQmFzbHpaczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlEdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMkUycmowTHV6dkY3UHhmdFVmOEFYUExEbkMzWEkwZXdkcE9rVEs0UDA4VCUyRkFNSzJFYzFUTE5nYXhtRTlwRklEeSUyQkVBbjNHeHdUZ1YyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYlMkYlMkYwZSUyRjVzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFlVZVpwZlIwYTRrcFVBeDE5aDZpNzRiNFg2NUNialI3NkZWNUZvSktLZTVDMUdJVkxkRHVHaHVYczJJS09YNGdmc3ZHZHglMkZza0t0a2l5RDZiY3RISGJYZ1BJbU9DNHFPcFhqNkUxZmY0TW00TmR4a3BjNzcwQnZObXpaRkxzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5THYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14Vm9rS0NUMEclMkYzWmdhaW9OUWVtQU5adWhhV0x5RTBMbFkxJTJCYkduNnNXc3BBOFFBJTJGWiUyRlVjVlJXYk5teFYyYk5teFYyYk5teFYyTlpRd0tub2RqOU9Pellxd0RUNGlpUFpzYSUyRlZMbTVzajdJJTJGNzZMJTJCT1RYVHBqUFpRU3Q5cGtBYjVyOEp5S1hxZlV2TU9wSVFPRnhGRGZvUDhxRnZUbCUyRjRRNUlORGtyRlBBZjhBZFVoSSUyRndCViUyRmlIOGNuTGVBUGN4SE1wcm16WnNneWRtelpzVmRtelpzVmRtelpzVmRtell5V1JJbzJra1lLaWlyTWRnQU1WWDVzalRlYUdsMUN6c2JTQU9MdVgwdzdrMTRLQ3p5QUQlMkJVWkpCaXJlYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYlMkY5UHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14Vm80Q1hVRmE5ZTBDYkpSV2tyJTJCMFJXbE1IWkVKNVd0UE10ekU1JTJCR1lKS255SzAlMkY0a3VFQzFaZU0ySVcwb2tqRlQ4UzdIJTJCdUw0Rll6NTJtTVduMnREVGxjcFg2RmJESFI1ZWNDSCUyQlpldnl3bCUyRk1NOGRKdG43TGRKJTJCS3Zncnk5Y2NyT0o2OUtWdzlFOUdTNXMyYkFoMmJObXhWMmJObXhWMmJObXhWaTNtaUZVMUxTYnh2c1N0Sll6SCUyRkpuU2klMkY4QURZcG9FekxjeHExVDY4RkdyJTJGdnlFOEdyZ2p6ZEMwbWhYRXNZJTJGZTJwUzVpJTJGMW9tRGY4Und0dEpSSGRyY0RhTmJoWlZJNmVuZElHJTJGNG1jbkhlSkNEekRMODJiTmtFdXpaczJLdXpaczJLdXpaczJLdXJrWjg0M1poczRiVlRRenZWcWZ5cnZnM3pITlBiMlVNc0x0R0JQR0pTcElxakVxUlViOWNoJTJCdlNTdnAwSmxjdkpDTHlNdXhKYjRKTnZpJTJGMVN1RUJWdmthWDlMJTJCWmJtOFN2MWZUYmYwWTYlMkY3OGxQeEglMkZnRnpwZVJ2eVBiV2NYbHl5dWJXQklYdW94Sk9VRzd1S2prNSUyRmFPU1NveFBOWFpzMmJBcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRiUyRlU3JTJGbXpac1ZRMm9zeVdNN28zRmxRa01PeEdQdFpoUEJIS0NEeVVFMDhlJTJCTTFCZWRqY3I0eFBUJTJGZ1RoVjVjdkJKYnBHZXJnRWZNRGNZYTJQa3FmWnMyYkFyczJiTmlyczJiTmlyczJiTmlyc2hmblJHdGI3VDlUWDdMY29KRDJxRHpTdjN2azB3bDgxV0Rham9kekRHS3pSajFvUjM1UiUyRkZUNlJ0aEhOWGFWY3JLc1V0ZnREaTMwNGRaejd5cnFQclFDSW5jZE1uc0VucVJLJTJGY2pmNTR5VmpQNWd3dEo1Y2tjRCUyQjVtaWslMkJpdkglMkZBSTN3RDVSbkV0cHdyV2d3OTgzUkdieTFxaXFLbFlHa0ElMkY0eCUyRnZQJTJCTmNobmtlNUJJVUdvUFElMkZQRUpISjZYRzNKRmJ4QU9QeE9BMWlYN3NVd0lkbXpac1ZkbXpac1ZkbXpac1ZVYnFCYnEybXRtJTJCek1qUm41TUtaRExQNHJDMlVWcTlxWWo3U1dzaFduJTJCdHhPVG5JVkc0dHRXdmROYWlpSzdGeEdEdFdHNlRpJTJGd0R3TXVTaHpSTGt5JTJCMWxFOXZGTVA4QWRpSzMzZ1lzY0t0Qm1EV2h0cSUyRkhiT3lNcDY4U2VTSDVVT0dweUo1cFlkZTNtb1dQbVc1S3pIMHBJbzJXTnQwQTNXdjB0czJENzN6SjZGZ3p4cXFYcEtwSEc5ZURNeDdFWVhlZDQ1VmVDNGdQQ2RZeXF1YTBJNXE1VmdPdjJjQVc4c1dvMlFNcWh3d295SGNWeVFGaFZPTHp2ck5yZGY2ZkZITEZYNGtWZUJIJTJCcjElMkY0YkpscCUyQnQyR3FXclhGbklDeUtXZUp0blVnVjNYT1A2N3FGamFGTEhVcnByZWN5JTJCbFphanhQRG1OMWpuOER2OEFhJTJCeSUyQklhWHJjbHJkdFozNE5yZlIxVVNvZmdlbzJLMDZjJTJGOEFnY0JDWHIlMkZsdlhScmRuems0cmNvU0pGWFlmTWJuRHpPViUyQlRyODJlcUFPUUlwYUJxN0FWMnIlMkJPZFRyaVJTRXA4ejhSb045STVBV0pQVjVIWUQweUhyJTJCR1FnM050cTFsY0xhengzQ2ladmlpWU9LelFvOUtqYjdZem9XcVJldnB0NUFPc2tFaWo1bENPbWM2MCUyQldDSzBqOU9OWW81SVlwJTJCRWFoUVdCZU5qUmFmRWNNVlR2VGIlMkI4MGZ5SFozRnVnRTl2U09SSkJVcVBWWlclMkJFSHczeVZhWGVDJTJGc29idWxHa1g0MUhRTU5tSCUyRkJaekMlMkIxaVRUYmFkWlVranRKanprUXFTS3FObTVmc2RNUGZ5cjElMkZSZFQ4dnJhMkU1TjVDOGtsM2JTTVRLcGtjdHolMkJMN1NQOXBlT0E3ZkZrSWtna0N3T2ZrejdObEExeThERjJiTm14VjJiRUpMeTFpbmp0cEpWV2VhdnBSRWprM0hjOFY2NHZpcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlYdiUyQmJObXhWcGxEcVViY01LSDVISVBva2pXc3N0cXglMkJLMmxaUGY0V3BrNXlGNm5GOVI4eHN3SEdPOFFTaiUyRkFGaDhEJTJGcXJrb2M2Vm1TTUhVT09qQUVmVGpzQWFaTVhoTVJQeFJuWWY1SjZZUHlKVjJiTm14VjJiTm14VlF1ek90dTcyOVBWVWNsQkZhMDdVOThEYWZxc0Y2aTlFa0k2ZVB5d3d5RjZ2RzJpNm9KUlVXbDZ4WkNQMkpPcnIlMkZzdnRMaEc2czB5aUs0WDZaZmk0UUk3VmI5bHY1aCUyRlhESHJnVjVjOEIwTHpMYzJRJTJCR0YyOVdEdzRTZkYlMkZ3cCUyQkhPZzZaTUhpNGoyWWZUa1olMkZNR3dwRmFhekdEeXRtOUdZaiUyRkFIMjUlMkJFbiUyRkFGWCUyRkFPSjROOHVYd2xpaWNucHMzMDVMbUZaRGV3cmMyZHhidDBsaWVOdmt5bGM0NSUyQlgxMFVDUXpIakxBVEU0UCUyQlFlTmM2TDU1ZTVpMEo1N1dWb25pa1JtWkRTcTdqZjJ5QjJPcCUyRlZZb3IyJTJGd0JOamt0cEFHanY3WnZVJTJCSW5veThWYW8lMkZhNDR4Q1E5YXMyNVJWQnFLbmZCR1JieTlyQkVzbGpjSVkwYVElMkJnNUZDQ1FENmJqOWxzbEdBaWtONXMyYkFyczJiR3lPSTBhUnVpQXNmb0ZjVlMlMkIlMkYxcTJzSmx0eXJTeXR1eXAlMkJ5RHNDM3p3eEJxQWZIZkklMkZvZG10Mno2cGNqbkpLNWRBZXhQVCUyRmdSa2h4VjJjNzgybVN5ODJXVWdOSWRVaE5zNFBUbWxYUSUyRndEQkRPaVpBdnpMYjZuSHBPcmxGa2pzN2xXZEc5eXZ4VkclMkZ3aXVHSjNVcDNZVEpGcjdvcCUyQkM4dDFsakhqeG9kdjhBWXRraXlIYnh4NlhmS3glMkZjWEJpbEozJTJCQXNWVVY4RlJseVlBNFo4MERra1BtcTNFdGxISlNwUiUyQkpQZ0hCSDY2WkJ0SXVmcXQ5TnA4cEFMSG5FcE81cDFvTTZYcTBQMWpUcmlQb2VQSWZOZHhuTHRadHJHWmx1QmNHM3ZGJTJCRkpZdUpmeDQwSUl4SEpLenpiNWV0OVp0WllwMUx3eWdjZ1B0S3klMkZaa1QlMkZLV3VSS0tDT0M2dE5IMUNibGNXaUlMRFVXSEg2d2c2d3lEZWp4OUZ3NHNmT01qRUJZNWJpSDFIZ0x5OFZZdWxPZkpWJTJCeTM4cTRuZEg5TGxMMjE5SzRpaWxIcld6THhsaEk2U2dFMSUyRjJTbkZLbzBDenh5Mjh6TXFjU3pzcElZQlBqMkklMkYxY2QlMkZ5dG5WWmROUTJEMUklMkJFU01vUHclMkZ6TWZ0ZE1HMjBUU1F5eWJsbWplbnpvYzRUWTZsZDZkZHlLd01Vc2JGWm9IcU53ZDFLbkdYUlhzOW41JTJGdjdsZzk4R2xXaE1qd2sxQSUyRm00ayUyRkY3akRTd1NQVUxUVEpJM1BHQnBoR053RzRPSFZXJTJCZ25PTlglMkJzV0ZwREZQYVNTSmNURVNHM1RjUmxmMnVSSyUyRmF6cSUyQmtSM2FlVDdlJTJCam5YNnlvVzhpYmh0JTJCOWk5VGclMkIlMkZROThRVlpIcXN0dXRvd3VTUFNkU3BWOTFJUFZXemlmMWk5OHQlMkJaN200MEZqYlNXVXJOQ3FFbWtleDRFSDdhY1Q5bHYyYzZsb25tYlR2TVVUV2R3Z2l1bVdrdHJMUWhnZTZIOW9mNnVSTHpkNVp1ckRWUDhRMktldFlGVVc3alhlU0tpJTJCbTBoSDdVWkg3WDdPQ1k0ZzJZTTBzTXJqdmV4QjVTSGNYc25rUHozWSUyQmNkUHFLUTZsQUI5YnRhJTJGOGxJNjlZMiUyRjRYSmVEWFBKbHZQZTZKcU1lcTZOTVlMdUU4NDJUbzZudFRveXV2MmslMkZhejBKNUU4JTJCMkhuR3lJMnQ5VmdBJTJCdDJaUDBlcEglMkZORWYlMkJFeUVTZVV1ZmYzdG1iRkF4OGJCOUg4VWY0c1o4JTJGNlA4MlRNTUxOYjFpRFJyUTNFcEJra1BDM2o3czUlMkZ3Q05WJTJCMCUyQkdWYzRuNW04eWZwbnpKY3NyJTJGNkhZc0xlMjMyUEJ2M2owJTJGeTMlMkJIJTJGWTVKeGtMb3VyWDE3NSUyRnRiMjhtYVNacmxvcXNkbFExVGdvJTJGWlVETzc1NSUyQjh1eGx2UGNNSTZpNkxBZTJ6WjZCd2xTN05tellGZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZiUyRlc3JTJGbXpac1Zka2I4M1c1JTJCclcxJTJCZyUyQksxa0FjJTJGNUQlMkZDZiUyQkc0NUpNQzZqYXJlMkZ4YUVmM3FNbyUyQmRQaCUyRjRiQ05pcVY2Vk9PY1RWJTJCR1JlQjM3JTJGYVg5V0hveUZhSk16MjNCcWlXRTdqdUNoJTJGc3lhUnNIUlhIUmdDUHB3eTUyZ0xzMmJOa1V1elpzMkt1d3UxclM0OVcwNld6YjRYSTVRdjhBeXV1Nm5ESE1lbUt2T05FMUtXR1ZyRzdySFBDeFJnZXFzcHBrN3NiMFhDOFcybFVianhIaU1obm5uVEh0TG1QWHJaZmdha2QxVHNSOWlRJTJGUDdMWXRvbXElMkZXSTBJYWt5Ym9mNEg1NUxtRlpkcU5sRnFOamNXTXdxazZGRDh6OWslMkZRYzUxNVh1WmJXNGwwJTJCNSUyQkdXRnpFNm4lMkJaVFRPbFcwNjNFUWtYWTlHWHdQaG5PJTJGTnNTNlQ1cXRib2ZCSHFhbmlleG1pJTJCMnYlMkJzVTR2JTJGbGZGZ0hjclBURmJhblpOYjNjYXl3eUFwTEUzUWozemp1dHdXJTJGbGp6QmM2UHA2ZlY5Skhwc0xOU1NnUjFISW9yVjNWdml6cTJqWFFrJTJCQW5kbEJBOXhuTnZ6UmlXUHpKQkpXbnIyZ0pQJTJGR055djhBSEFkaWtKM1lHZjBvNXBaRElib1NEMUdKSjlhQWdoNiUyRjVhVXpvRm5OOVl0WVo2Z21SRlkwNlZJM3psWGslMkZWSTViaTJobmxCZ2RCdXhGRmFoaGZyMHJTTnNuSGxYVTRKSTVOSmFTdDFhdklRbSUyQjhSYXF1RDBJJTJCTGprcGJnSVpKbXpac2lyc0RhZ0MxamNxdlV4T0IlMkZ3SndUalhVTXJLMzJXQkIlMkJXS3Bmb2ZFNlhiOGY1ZCUyRm5oamtNUG12UiUyRktsckpCcWt4QlNWa2pDMFBJRHBUZkkxNXMlMkZNTmJ1M2piUjVwbHNaVnA2OXN3Umk5TjBlU2pNbkglMkJSY1ZwbTY2OWNXV3RYR25hdHdqZ0ttYTJ1UHNqMHglMkZOWHclMkZheU9mbUxyJTJCaFgzbCUyQlBUWXJrWE0lMkJwR3RtMXVQVVVjZVg3eVJ4OEtMdHglMkYxczV4b04lMkZlZnBWcjZDOG11VlZmVXVMTzhrTXJFSWVUZW03ZmFSazVJeTVGZFR1WjlCMTY5dHJHWnZxa2M1ZUZEOFNtSnp6VWNUdHNyY2VXSHpUVDNmUkp2MHA1VVp2dE9ZWXJnQ3UlMkZKVjRQJTJGd0FOSG5Qcmo4M3ZNMmxYOXpwV29CSllJbmFKNTQwcE9pMSUyQkdSUUR4ZjRjbG41WjNxVDJzdGpXckswaWV4RWdFNjAlMkYyWExPVWZtSFlOWmVaYmhXUDk0QXluJTJGViUyQkQlMkZqVmNsTGxiRWRRbjk1NXExd1RpVTNodUxhZGVRQ3NmU2xqTzlWTmV2JTJGQUEwYllIdWIxWjdWNXlXa2hIeHBjVkhKTndHaXVQOEFLU3RWayUyRmJ5R2FmcUxReHlhZk81UzJsUEpXVUFtR1ElMkY3dWlCOGY4QWQwWCUyQjdGJTJGeThDdGQ2anBsM0xiM3YlMkJrUVRweG5pcVREY1FuN0xvUiUyRndVYiUyRkFMRFpDeXlla1dsOVp5YUZMUGVsWkdOMnRxREV0WkpIZW5FczY3Y2twVlh3cTFiVTdHMWlLV3ZxdGNDUjRia2toRll4JTJGQ0hYaHZ2WDQ4QyUyQlU3SDFTYkszazlXeWE1aHY0SGNoU0JGOEZ4QkwyV2VPSjFrJTJGNHM5UDRjdSUyRjBqJTJGYzFGcGhtRnhQTGVPaFpCeEFpTDhqdDQwJTJGYTVZZWdWNlBwcnZMcGNFOHNmcFROYmgzUVZvR0sxMnpsdW9RMlBuWmloNDJmbVdJVnQ1ejhNZDRxOUk1UDVKMTdaMkE4WXJXVmwlMkJFUm9hRHdvTnZ1cG5MdGIwMkx6UkVkUjBoQmJhN2JWZTR0RVBGWndwcjZzSCUyRkFCYiUyRkFKT1NrZ1BOTHFHYUc3ZTN2NDJpdW9Ud2xpY1VJSzlpTTc1NUtuR29lVDdaWDZtMUNIJTJGWVNOQ2YlMkJGT2N0bnVJZk5rU1dlcUVXdXUyNDlPQzhjY2ZXNDdlbGNkJTJCZiUyQlZuUSUyRnl5UzV0OURrMDY3ak1WemFTWE1MSzNoUkpscDRyOXJqa1FsNVBiYWxjYVJkJTJCbEk3UGJ3eXNJNWxOSklpclUlMkJIJTJGbW5PdWVWJTJGT1VlbyUyQm5ZNmhJcHVXWDl4UHR3blUlMkZoeiUyRm5UT1BlWTR6WSUyQllOVGdwVkJjU1ZROUNySGtQMTRHc2I5ckZnUldTelkxSzElMkJLTmglMkIwcCUyRlpjWTJRZGxldiUyQlolMkZMS3hLMTlwY2RZQlV6V3FkWXgxTHdqJTJCVCUyQmFQOEFaJTJGWnlIVzl4ZTZaZlE2cHBrN1FYc0JEUlRJZXZzUiUyQjBwJTJGbHlZJTJCVVBOUjFLSkxLNWxEM0tyVzNtNmVzZzY3Zjc5VDlwTUQlMkJadENqVG5xVmlsSVclMkJLZUZSc2hQV1ZBUDJQOSUyQkolMkJ6a1pSQjNEUEZsbGpseFJQejVFZHg4bWN3JTJGbTNhWHZrelVMeVVDMzEyMmpFVDJvTkE4a2g5TlpZVCUyRkp2emIlMkJUT1phYklobldrZ2FPUWN3eE81NzclMkY1ZmpoS0lZbmRvWnZnYVVEMDV2NVNOMUolMkZ5RzZZSTBSWjR0UyUyQm95S1FTMUhUd1lIc2ZmQUxyZE9Rd00lMkJMR09FSGZodTZQV3ZKNmY1RnNmclhucVc4SyUyRkRCRVpENGNtQVZmMVoyZk9TZVNMbWZUOVJySEVXbHZEU1phVmFnTlIwJTJCenRuVzhtV3N1elpzMkJEczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOWZ2JTJCYk5teFYyWTVzbzRxdzZXTDlIZVlMaUxwRmNVbmpIUWZIOXIlMkZodVdTYlRuQmdNWGVKaXYwSDRsJTJGQTRUJTJCYTRmVFcwMUZSdkRKNmNoQSUyRllmcFg1TU1HYVhjQm1IeGJTcnNDZGk2JTJGMmY4UnlaM2o3a2RVNHpaenJUZk8ycVFhM2VhSHJrYXg2aGF1eCUyQnI5RmtnSiUyRmRUMjc5MFpQJTJCR3lkV1dvV3QlMkJuSzNlckFmSEdkbVg1cmtTRW92Tm0yeWlRQVNUUURxY0N0NXNMNWRaMDZLbzlZU01OcVJBdjhBaXUySXY1aTBxSmVjc3JLbyUyRndBa2slMkZjdFRobzl5bzY5aHRiaTJlMnZBcGdtSEIxY2dBMSUyQmZmT1lYJTJCblhmbFhVZ2hKZXprTmJhYnhIOGpIJTJCZGNQUE44Mmw2NWIyajIxM0ROOVdkbW10ZWZDUmtkZUphTlNWYjFJJTJGdFlYV004Y1ZrMmphdk05NXBVdjl6Y1B2TEIlMkZJM0x2d3doSVQyeDEyS0NCcnhqeWpSUzA2anJ4RzVZRCUyQlpjcnp6cGtYbWp5aExQcHpDU2FGVnY4QVRab3p1WGpIUDRHSCUyQiUyRkU1SmtVbWp1OUJ1amFUc0pZSEhLQzRHNlN4bjlyJTJGQUpxd0pINWcxZnlqRGF3MktyY2FFMHpTTkUyN1JpUW10dVhQU0o2JTJGdVclMkZZa3hJNmhVZzhpYTlxdWxhdEhlM3MwazhEZ3hHS1p5d0JrJTJCeTMlMkJUa24lMkZONjNhOHR0RzFhM3JITCUyQjloSUIlMkJJZEdLJTJGOEFCQTVETmJTMHRMJTJCNGtzSk9lbnpFVFdyallpT1Q0Z2pEOWw0V3FqTCUyRkFKT1RUVTlYdE5jOHI2ZERQOEU4cmM0aVNQNzFSd2tUZmNQJTJGQUxzWCUyQmZsZ3EwOXpGdktlb1RNd1YyTmVDc0IwQmFOcWY4YTVOOVp1NTlLODNXMnBXYiUyQm45Y2pCbzI0WlhVTnhJJTJGMWx5Q1dzTDZmTmIzTEx4aWQyNHRTZ0lOQTlQdXliNjdwZCUyRnIya2FQYzZieE41Yjhvd1dZS0FZVyUyQkdwUDhBazRSeVFVOHVmT0Y3SkxEOVhSTGFBajk2WlBpWXY0QTlBbiUyRkRZT2Z6OW9FYnRBMGtqWFNxRyUyQnJxaDVOdFUlMkJrVzRpUUwlMkZrNXlLJTJGaXVOYWdqRWNwVFU3Umo2WXFhU0FidEczJTJGRmluNG9tJTJGYSUyQnhoWGNHZVd4bERncFBiZnZVRmFQREtwRlhpSSUyRllrJTJGayUyRm13RlhyMG41aGZYQkpGcFZ0eG1DODRqT2E4MSUyRmFLcXY3U2Z5NUdMN3pKcTJyd1hGaHFGNDBBbFdpU1FmQUVQVlclMkJIN1NmeiUyRndDUmtUbDFkTFczdDd4aTgxMDhDM2c5RUJBckNuSThqdFZ2dE5SY1IxenpUZEpjUXZZd1JXN3kyOGR3ekZmVWJsSXZJMDVmQW8lMkYyT0d4U3QzelNXOUxQWElUTWxDaml1em9mc3lSdDJZZnNQa2QwaWFiVHRRa3NwMVpyYTRVODRYNlNKJTJCdzQlMkZ3QW9EN0VpNWR6cVY3TEZDdDdLWm5WQVklMkJScXlnOWFqJTJCWCUyQlRKZG91dWFIcmx0YjJQbUNOZnJrS21PMnZLY1QlMkZrZ3NQMnY1Y2p0YXBmbzBKdCUyRk1sbEZHSGx0WnZWZUs0cHR3V05pNnlVJTJCekl2Umx3bTFtVWFycE50SkhFV3V0T2t1SWJoMEZTYmZrR2laMiUyRmI0TXhIJTJCcGs2dVpOTThzYWRkeXdTdE5LNjA1dHNLblljRiUyRm1iT1p5M3MybldhTEUlMkZHNGU0JTJCc0s0M0hFTHhvd096SyUyRkw0bHg1ZkZXYiUyRmxwclAxVFdMUU1hTE1GUmglMkZsUnR4ciUyRndMWW4lMkJmTmpMcCUyQnAyV3B3Z2hXTHh1ZjJTR29SWCUyRkFJREk5cGVvMmtNdGpmV1FNVWkzSk05dTI0ajVyVDREJTJCMUc1cXlmeWZZenAlMkZ3Q2NkaW1yJTJCVXJhJTJGRyUyRndwSVNPb0lwWEpEY0lQTjRIRGNSM1NjbDJJNnFlb09HTnZjUXl3JTJGbyUyQiUyRkpXR3BOdlAxYUJ6JTJCMFBHRnY4QWRrZiUyQnpYSXhTYXltMk5DT2g3TU1OWUxoTGxPUzdIOXBmQTVGVTMwdlVOUTh1YXFqSXFzYXFIaU84VXNaNkVlS3NyZkElMkJTM3lVcjZwNWl1ZFRsMlMxUnZSVGNoVEtlQ2dWJTJGbFRsa09zdlV2ZU9uOFZrZGF0YXV4b3lOJTJGSUQlMkIwciUyRndBbVRmeVlIc3JuVGRQYXNjMSUyRk5jelhNWkFyd2hUMDRnMyUyRkFEMDVZam1sNkZkaXRsY211JTJGcHZYJTJGZ1RuSzViUzRzcDFtRHRGSUQ2a0xpb1BYWmdjNjFOR1RCTkg0bzFQcFVqSXBOYnlYMFVsdmN3JTJGVjlUc3Q3aTJJcUhXbjk5RVAya1pmN3hGJTJGMThuTVgxcEFOTVIxVFRZZk1rUnVZWWx0JTJGTUVZNUVmWVc3VWZ0TCUyRndBWGpEZjh1JTJGTUZ6TThtblg2TUpMV1JGa01oNHlpcXRHVVlVJTJGWlA4Mkl6VyUyRkg0RFZRRyUyRmR1UHRSUDFGRyUyRmxiOWxzRzZaSkRKZlBjdkdJOVdDb0pad1BobVJHSEYyWCUyRmZpNEFQMnBlYWZtQkU4SG1xOExnQVRDT1ZhZUJVTCUyQnRjamF1VVBpcDZxZSUyQmRKODJ4MjkzUGIyR3R5TDlabVdSb0w1UUFVWlpHUUs0N3A5bk9kMzloZGFaY3RhWFNjWFhkU04xWUhveW51cHdGQ0wwelVYMHk0U1ZHZjZ1V0RxeWJQRzQ2T24lMkJXdiUyRkFBNjUyblJ0WSUyRlRkcUpiZmpMZHFuSzRnanBTVmVuMWlCZjVHJTJGd0IzUmY3cWZPQ3h5Y2Fxd3FqZmFIOGNrJTJGayUyQjYxSzExQUMxa1pZSVQ2Z21CJTJCeHkyb1AlMkJNaSUyRkM2ZjdMRUdsWkNiQnIlMkIlMkJ1JTJGcXFwQkNqUDZjYnR4SHduNGxqclglMkZnY2tPajJFTWNDNmxLNnlUUktZbWtJb1lsNmdFOXhUN0w1SGhjVEpxTTFqSkNFampRU1FzSzdxVDNyZ2klMkZ1SjdQVERLUTMxUzVmMDNaUGkzU3JmR1A1UmlLRzZiZWolMkJRUHpCMENHJTJCdU5IdkI5VmVaeDlXdlpLQlg3Y0NmMlA4ak92Z2hnR1UxQjNCSGZQSGFRcmZ1RXQzREhrQUpha0toUDhBTzM3QSUyQmVkWDhpJTJCWVBPZW42ZE5wMnFLNXQ0SkZqczVIQ2x5b05KZlRkaWVVYUw4UyUyRndEQ1pFY1JORWMlMkJyZk9PS1dNVGdlR1VhRW9IZmklMkZwUlA4QXVudDJBYjNVb3JXcUFjNVFLOGVnSHpPUGh1b1RZcmRlc0pZZ25KcHRnRFRxZHUlMkZ0a1QxQzlYbkxQSXdvZmpMZHVKNmZoa2dMY1lzaTB2VlJmU1NSU1VXUmQxVWVHR2d5TiUyQlZyQ1NrbXJYS2xYbkhDM1J0dU1YWGxUJTJCYVRKS01UVjdKZG16WnNDdXpaczJLdXpaczJLdXpaczJLdiUyRjlEdiUyQmJObXhWMmJObXhWQjZyYWZYdE91TFh2SWg0SHdZYnIlMkJPUmJSTCUyQnNNVE1hU1FzT1NucnNlTFpORG5JZGZYWHRQOHpYdG5aR0MydEpXRXNVejhwSDR5QUU4WTE0cnMzSmZpYkpSUE1LeWY4QU1YeWUzbUt5aDFMVEglMkJyYTFweDlTMHVsRlNWNm1Od1B0Um5JYjVlOHdYbHclMkZ3Q2o5VlI5TjF1MTJQR29EOXZVZ2ZwSkclMkY3VWVkTjh1YXBjWHNIMWU3QyUyQnJBaSUyRnZWNk9QczFLJTJGc3R0Z0x6UDVZc3IlMkIzTnpIRnhtalBNbE5qJTJGckxUZFdIdGlOdGxVOUk4MnN4YTExbEFzc2YyYm1NZkE5UEZmMkclMkY0WEl0NTAxeTgxU3lrRUVqUlFSTUdFYU1WNUwwJTJCS24yc3E0a2UzajlPNGFzdXlMTlNuTWR1WCUyQlYlMkZ4TENmVlolMkZTMHU4Y0RrVmhZaGZHZ3hvZEdRRERaUE1jdWx1c1R6cHdyeU1UN21uZWglMkIwdVRWTkwxZSUyQnNvYjF0TG1tdEpsRWtiRlc1RkdGUjhOZlV6aTJpUSUyRlhOWHRMalVBWFdlNmhFM0wlMkJReUtIRyUyRmJqbnF6elA1b2swSDBiYXhnV1Z5b2RpNUlSVTZLQng3NEFTcnpPenNmTDF0Y0g2OXBwTXRkeE0waDQlMkY4ODNPUzJHTFM3MjM5SzFwR3BHd2olMkJFciUyRkFMSHBoVmNlY0JjeXJjNnZCRmRhYkwlMkI3bFYwVVBidDEyS0RueCUyRmxZWUd2cldLd1AxblRwM2tpcnNUMEJwV2djZGY4QVpESmclMkZGalNhblNiOHhDMnVyc1h0cEc1a3Q3ZGtWUkdhVTRnJTJGRVR5JTJGd0JiSXpjNjB4U2V5bHNncGhESmVhZk50SVklMkJucVJFZkN5Z1ljV1BtVjE0eDNxa3FRRHpBbzRYJTJCWXIlMkIwTUU2aCUyQmlkWlpJbWpNOTBGTFF6UWo0MEJGTm4yJTJCMVg3RFlrZDJ5aSUyQnJITkloOHVYYkxwN3lMSmRUb1piWkpEWDFFVTBOT1h4Q2VMOXRmJTJCSjRQaGJUTHlhNThzWHFxdDNFb0tsVjlNU29SVU1uOHNzZjdYSCUyRlh5RCUyQmNmS0Z6b1duUmF0RnFVVVUlMkJuU0dTR0FzQmNGWFphRmVISlZaRHUySE9uM1NlZTlLdDElMkJzQ3g4eDJ5JTJCcGFYYWJCMlR4SDhwUDIxJTJGWndBbnUzVlF1VjFDQzJpVzljeCUyRndDa1MyOGtNdEE1ZEtMSEwxJTJCMDBUSnlaUGhrJTJCMW5TJTJGS041OVowR1NObm82eUk2ZTFWNHYlMkZ3eTV6OXB2OFlXajZIcmNmNlA4MzZFV21paUhTZml2Mm94JTJCMmt3SDdQMmZ0TGsyOHV4cmJlWFlMaFlYVjdnTXp4a0UwSXFQaXFOcSUyRnk0Z2IlMkJTazdQTmRYMW0lMkJIbXFheXRKJTJGVHRUZHglMkZCR29TdTZzd1pxY2o4WWJDblJtTTk3ZHJLeEtYY3NsdTd0WGIxJTJCU0JxJTJGd0NTelpLOWMwNnh1TlV1dFN0a0JsczVJRmtBSUFNb0hxVVVmek5Sa2JDUFc1WHM3MHJaY1Z0TDAlMkJ0Q29BRlZjMW9LJTJGd0FybmkyUklTaGREMHJVOVowZzJVTlcxRFI1SkxHJTJCaXJSbFF1WGhtcDFaUDcyTSUyRndDcGg3NWcwSzJzcmEyMUc4Y2g1YmFHSlVwdDZ5QVJ1dkw2T1dFUWsxZUpycTlzNTVZTHhCenVHaEpFanIzTEt2eFNxdjdXSVNhbnEyb1FSWEdyeXZkMk10Vmh1U1E4YU5RY2g4T3lOanNxRWxoSzFoYmNyJTJGY3YzSyUyRnlWJTJGeWNSU1FCbVVpaWZzZlFNNkZwZmxqU2JyUjBtQ3kzRWpEbERJek45c0ducGhVJTJGWiUyRmxiSXJxbmwlMkY2ak0zQ2IxVlJxT29VODA3OFhvT0hQSVNJaVFDZDVja2dFM3R5UzRTdEs2eFN5JTJGREolMkI3SHFzZU8lMkZZVncwVzJ0aGF0cDEwaGUyYjdZSDIxY2ZabGpQODZmOEFEJTJGWXhPNHRiTzRzbzRJN1pVdkc1THBsM1Bzc3ByVXdzMzkySkQlMkZ1dCUyRndDYkFPaDZzTHVVNlZxWU1GNGhLUnUyeDVEckZJRDBZWTdyc2g0dE1uMDYlMkZrc3BqempuaWFTMW5RZkRJRSUyQkpXWHdkYWZFdjdPZDB1Z25tTDh0bVlpcFdFT0Ixb0dXcCUyRndDSDVaeTRob1Q5V3VVNUJUemo3RkhwJTJGZUllMyUyQlglMkZBRHJuUiUyRnlzdlJmYUhlYUpJd1o0UkpHbzhRRHpRJTJGOEFBeTVPUFZCZlBOeGJwTXBpZllxYUJ1NEl3RllXbHg5ZkVJSlU3bG1IN1MlMkY4M1pKOWUweDdLOXVuUmc4YXpNa29IV0p5U1ZSJTJGOVlINFclMkJ6aiUyRkt0dkZkYXhCRExRS3pBVk8yNDNHJTJGOEFyWVBKVVhiMk52RFp0ZHlXeGUzQjRtZUNRJTJCdEczN0pramI5bGFmYVhIUlhsOXEycjZldG5XSjdZeHgyOGglMkIxVU55TWp0JTJGbEg0bXlYNmxwMXBvUG01N0NJRkxHOGppa0NzS2lzcXFYV25jYzIlMkJ6aExaVzBPbTM1aEN1TGlDZVNnSUhGWTY3S1Q5cmw0WWFWNjNJd01WU2FrZzFwdDI3ZUdSdXp2clRXSUxkWWJubGNJV1hTZFFjOFc1cFhscDkxJTJGTElQOTFNJTJGOTRtRzl0Y2ZXM0FRMTR4Z3NQSDRjNFpwJTJCdHo2SHFOMnJKNjFuTkl5M2xvVFRrQTU0eUlmOTF6UiUyRmFpbHlSTlVpbnBWMGlYcXl5eHclMkJqZFc1TWQlMkZhTjFpUGRxZjc0ZjhBNUp0a2ExWlo0TFdZeHN5U0twYUNSVDhRSSUyQkl4a2oySHc1S0xlNiUyRlRzVUYlMkZwMXdzbXJSUmsybDBRQUw2RmZ0MjkwZyUyRnU3dVA3TG8zOTVoRnF1cWFMOVhabW1XQ1J3eVNXVGdzOE1nRzZPbyUyRlk1ZlpiQVVoQyUyQlo5SnNmTWwxU0tZVyUyQnF5UVJUMkRNZjNVdkplVHd0NE01JTJCSmNoS3lyT3I2RDVnUXdUUUVwRkslMkZ3RGVRdjhBeW4lMkJaRGslMkIxR3lqMWV3MFNhQzRnUzVudG1DdFgwRUxRdFFBTSUyRkVjdjVGd3YxYlF4ciUyQm5ocjRvbXMyeW1QNnh1Q1N0U0lib2Y2djhBZHpZT2FHQVElMkJYZFRtMU5kTGpqNVNOOFFrRzZGT3ZxQnUlMkJUalRyUzJzYlpMQ01jVlVta3BGR0xuN1JmJTJGQUZ2JTJCRnhUVG1lMTAyRFR1SUxJd1pwS2tzVyUyQnp4V3RXNDElMkZaeVUyWGxXNDFIaGNhaHl0T1FKWlZIS2FYdyUyRmQlMkY3clklMkZ6dmlBcVEyMWxkWHR5dHJERzBrNTI0cUttbmo4c083MzZyb05tTklsdGZWdjdoRmVhTW5rVXFUd3B4TkEyUzJNYVQ1ZXRTOXc2V2R0RXZ4MWI0MkE3U3ltaCUyRjJDNXpUemIlMkJadW4zc3dPamFjR1ZLd3JxTWdvYWplaUpTciUyRk9URFZkVlpQWWEzcE9qJTJCVzd1MzF1S0t6dVpHUDFkZVBQMUl6MVVvdnh0SiUyRmxZVSUyRmwlMkY1aE90eVMlMkJXcmxpczFHbTBweWZpUjQlMkZpOUt2N1N1bWNydk5ZbnU1RGNYSDd5VG9hbXJmU2Y2WUw4cmF0TFolMkJadEp2b1Q2YndYTWJFanVDd1ZoOHVKYXVQRnVGZSUyQnglMkJZSjROTWF3UWlPRnp5Wk9sRFg0aCUyRndReVFlVnRBbjFCWTlSMVFOOVdVMXRvRyUyRmEzcUdZZUdFM2xuUkxQVmZNMTlMZEF5V2tUdGNXOGE3eE9HYXExa0d6N2slMkZBTTZtb0FBQ2lnQTJBeEo3bG9qbjcyd0FOZ0tBYkRMelpzaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5SHYlMkJiTm14VjJiTm14VjJRenozcDNQNnJxS2JGS3d5dCUyRmtuNGxKUHNlV1RQT1Zmblg1Z21zdE50ZEJ0bk1iYWp5a3VYSFgwWXlQaCUyRjJiJTJGd0RFY2JyZm0yNE1SelpJNDQ3R1I1OXc2cE1mTnlXbDdFZEQxS00zQ3A2ZHdvS2xkaiUyQjF6SEUlMkZSa28wcnoxclV0ejlTdkxlMmxtMkhwOGpDN0JoV3FWNXh2VWIlMkZEbm4wMWpQRWluOHBIZ2NrZW1YbXNUYUhjeEFOdzA1bzU3TzdJSUt4bGlKWWxsJTJGYVJUJTJCODQlMkZzTmtJWmhJa1NqUkRsNnpzJTJGd0lqSkNYRkhrYjVncDMlMkJhMnIlMkJiZFB1RXZZTFZiTFJwaUZMMjdjMkV2V2tqMCUyRmQ4djJWcGtHc2ZOMnAzS3JhM1YyWGljZ0VzUWVRSjNxU05zN2QlMkJrZE8xclNiS3cxTGhOJTJCbGJSWFZKS0ZaeXE4WlYzJTJGM1lHSExPRWVjdktGeDVUdlRMRHltMGlkdjNFdmRHJTJGd0I5eWY1YSUyRnN0JTJCM2xwSFVPdnN1YTRpTndiV0NydUhLJTJGQjBxTjlqMHpveSUyQmFyVzQ4cjJPcTNsMUxlMnNTaXp1R2txazZ6Z1VWWE1kYThGJTJGd0NEVE9PMk0wMXJJczBYQ1JRNGtIcUNxR25abDc0TmdrVGxNcVNPSVpwUFZOclhqR0c4UXZmajJ3WHpTeXF6MWVPJTJGdE5TalFNOHNWdWJoRmJia0lwUGlJJTJCVVI1WWNhM3ExN0lkUG10WjJqczd5enRyaU9OTmh5QUtTY2lQdE1KVWZJWmFYRFdMJTJCcmEwamNxMFpZQVY0eUFxNm12OHluSmY1WWV4MVBSanBVc2ZPJTJGMHBudUxKV05QVWdrTlo0bCUyRm05Tmg2dkglMkJWcE1SYTJ1dkJjWGVqMkdwMnJTQzV0SkpiT1prcVc0diUyQiUyRmdZJTJCeCUyRmVKaHRCQjVzT2kzMTNib0xhOWloTWxvM0VCNUNsR2tVTHklMkIxNlhKazRyaGxaYXJCRkFiWmxqdHJTNVRnJTJGb0lGNGZ5T1QxSmpiQzFMJTJCYlNib3d5TXd1NFdyekpyeVg5aDFQUXB4dyUyRkZXRlhOdXQ5UEI2c3JTNmZybHFJNEpaSEolMkJyMzBiQ3NiT2Y1cGh4MyUyRkFOMVQlMkZ3Q1JnUFFidHJlVnJFRnJXOGdmbkRVMGRKVVBGMDl1bkhEJTJGQUZleWdqanZiaTJoYVRRYnB4Y1hscEh2THA5eDluNnhDbGZqdGpYaTFQMlAzYiUyRkdzZUU5OW9sOXF0eWpJS2FtWWxrdGI2TW4wTDVRS0o4WnA2ZDN4JTJCSDR2dDhPRCUyRnZjaVRYUFphWiUyQmtkcDUlMkJndDE5WWFkNXAwJTJGZTB2VTJZOFQwTlBpYU0lMkZ0SiUyRnV2T2o2bGNHeXNGYVJsWXhKV1VqZmtVWGszejVNTTVwJTJCVjJsM1UycFBkYWxGSEsxc09MeXFReFNaYUZPZERXT1Q3VyUyRjdlVFR6SzhVZGxjeFJFaFhCVGYlMkJkeldnJTJCN0p4TmppNzBIblR6JTJCNTFHWHlyckZ4YWFwRDY5bmZjUnFTZnRxeEhMMW9qJTJGT2pQanRRMEdOWUNmckNYV2kzUU10bGVsaHlqa1liRmZkdnN5eDRNODdXeTZ6cWVtVHE0WDlLd1FubWVna0slMkJtZiUyQlNpNUc5TTFQVmZMVXQzb2QzQ0pJR0RFUVM3aUtVRDRab3Y4JTJGanlFcnFycnVQTmtLNTglMkZKTjdTeDAlMkIwc0RlM2swazl4QTZKQkpBQ0dxd1BIaUtwOFM4ZnRzMkYwbXJEUzNudWJQVGhINlpMYTVZY1FzbkJ2czNrU3NDbkplWEp1SyUyRkIlMkZ3QVltd1ElMkZyWGRqRXNRUml6aHZqS0NyVXA4SWY0dVclMkZ3Q3l1SzNGczg5M3AxbmV6ZlZkZURDT3htSEZpOFpIJTJCODl3U2VCalAyWXVYJTJCVkZpWWdnQTcwUG10OVF6ZnlqZHhYZWlQZWFZM3JOWXQ5WmpkS1VrZ1AyZ3lqN0w4ZnRMJTJGUGdUejJ0dUxkSklUNmNOMUpGY3h6SjJVN1NiJTJGcyUyRmE1QnNLZkxFTXZsUFhieTJzSkk0MHVGJTJGMGl6VnVVY2IwNW4wejNna1RsdyUyRjMyMzd2SGVkZFhONXBFTWRuYm1PeXM0QkZjeTBxRGNGNkdKYSUyRndERmFjbXlYOFB1MlIxUU9pNll1cGFiZDJGNzhkajZ4akxWRlVscHlTYUh3a1VmN0YwJTJCRElycnZsNmRyNDJOMGVPdFJJSHM3bGRrdjRCOWlqZjh0S2dmQiUyRlAlMkZBSFgyOG1QbHV5YjBWczdPZFRMNlNTUmVvSzglMkZUWnFOJTJGcnFPUEwlMkZKd1RxZGhGcjltMWxxVWhqbmhjbTJ1djhBZGx0TiUyRk1LZjdwYjl0UDhBWnJqVmhXSGFIckVXcXhqVGI5Z3Q5R0tReXRzWHB0eE5mMnNsMzVkM0owanpuSmJDb2p1UWxSMjZjVCUyQnRjNTVxdGhkeVhjeXlKOVg4d1dmeDNFU2JDNlVicmN3ZnpTOGZqZmolMkZBSHlmdlB0ODhOJTJGS3VxM0YzcTFocUJJRXljNHBXWnVDa29Bd2NrOU1BNTBWUEpWJTJGTXEyazBUem5mQ0pRVW1QSm9tJTJCekpHJTJGeGNXOXQlMkZ3RFk0UTZjSUxhNlpZMmVLUndzbHY2Z29hRGZqeSUyRmFLNGYlMkZBSmxlYWRNODBhOHQxcGNaOUdDSlltdUcyTXJEN1RBZnNxdjJWJTJGbXdyMFd5dU5YVXclMkZWeGNpMSUyQktMdCUyRncyM3dyZzZxR1ZhbnIxdnJLMnQzY3NJcnkxYUVTQmp4SkVZWU9RZmY0Y2p2bTN6TGJwWlhMV1RHQzV2ciUyRndDc3dSamZqQkdvQzh5ZmklMkJJakNQWDJ2Tk11JTJGcVpEUk5HS1NBZ1VxeHFncUtydUYlMkJINHNqc3lQUElaWlNYSjdrbmZHMWU5JTJGbHhyZHQ1a3NicWRTRnU3ZU1MY1c1TzQlMkJFMGNWNnh2bkY3NXVWemNiMTR5eUJXNyUyRmFPMktlUzlSdXRDOHlXZDdETVlMZm42ZDNMJTJCeDZEN1NMSjdZaGRrTmQzVWtSRFJTWEVyeE1EVUZHY2xUOUl3bmRDdHBXcno2Wk44TXNrY0RzR2RvanhramNmWm1pcCUyQjJ2OEFMJTJCM2lXb3lTZlhiaUhVbUZ5MTRmcktYcUg0bkwxNHpLJTJGVnVYN2NiWUVlSldEUFFWcFUwUGoweDZ5cUxMMHBKVVc0dFhFMW81TzlTYVNSYmVQMjhDb2IxWjFUNnZQS3p4amVOU1NRSzlhViUyQnpuWExmVXJkdER0OVQxVSUyQmplUnhwYTNpTXZGNVY0MWpjZyUyRnRyeCUyQkxPZDZWYmFUcUpsUzdsTWw1SXJpM2hId1JpUWo5MjBzbmh6T0RwcFdzaWk2emNHZVNaZzNwbzNOU3klMkZEJTJGZW40SzlWNTQycjBMeWhlYVhjbTV1YUNDV05oeGtsJTJGdkNsT3FjdnM0cnJuNWcyZW5JOXRwS2k0dXFsV2NrMHJTdnhQOEF0ZjdISVRhenBjY3JpTmFMR0QlMkZvekduQlZJSmtaUDI2MSUyQkZ1V0U0anVMcVNabzJwYkpNanlpdEFRZVZQd3JqeGJVRTAxcmV1WEd2Q0tQVVpKMkNzMGlxZ1VnRnR1bnclMkZDS2ZEaFdMWFN6YXlXNzNqeHVHRWxXZ0pVYlVvU0Roa0xjWEVqSkRTSnFrb1NkJTJCSDdPR2xoNWExSHpET05JaXQlMkZXdlpFTWtKUmxRdEdsS3NDeFZYNCUyRnklMkZhd1d0SUxUTFRUbWVNbWJUcm0xalhlMG5tTUxPd0gyblpscld2JTJCVmhsQmI2THFsMDl6cGVtcmJ4MmNKZTVXTnFpUmkzRUtyZnlqJTJCWlI4V0o2eCUyQlZQblhRcks0MWk5c2xqc3JVQjVwQkxHekFWQ2dpTldMTnVmczRJOGg2aHA3MzhzTnhSQmV4ZWk1Qm9CSldzY2clMkYyWHc0Vlpqb01sbEZieDYzNVk1Mms5bXZQVWRLYVJqSElGJTJCMDhQSW5oSlFWNiUyRmElMkJIT3E2ZDUlMkYwRzd0b1p6SyUyRkJ3S3pCQ1ZyVG8zR3BRJTJGNjJjWVcyMURRJTJGTVVWckZIJTJCNXZ5SW5QU0lxemZFMWYyYWZhd2ttdHA0MmtsdDBmNnV6dUluV29EcXJGUVJRamtNSlY5UTJtczZWZml0cGVSUyUyQndZViUyRndDQk5EZzJvenpyNVkxdlRJN1Y5TDFQbmJURGs4RTRRczdNMUtLSEJEcDlHVGZRZk9kb3NTeHc2dHhrcDhVTjBEeEJHMzdXTmVhMDlVelpCTlklMkZNM1NmTGNWckxyREl5WFpLd20yYm1XNDBEc0YzJTJCRmElMkZGOGVUVzF1b2J5Mml1N2R1Y015Q1NOaDNWaFVZRUsyYk5YTmlyczJiTmlyczJiTmlyJTJGJTJGUzclMkZtelpzVmRtelpzVmRuRSUyRndBOXJLWVhtajZqVDl3MGN0dVQ0T3BFZ0IlMkYxbE9kc3lPJTJCZCUyRkxVZm12eSUyRmNhWHN0eHROWnlIb3N5Ym9mazMyRyUyRjFzQjVPUnBNb3haNFRQSUdqN3BiUGwlMkJOUHJFUmklMkZhRzZIMzhNa1BsWHpoJTJCamhIbyUyQnJtdW5DcXdYRkttRG1maVNSZjI3ZCUyRndCdjlwTUpCRGNXTjdKYVhjUmh1WUhLVFJQc1ZkVDBQJTJGTldCOVJpV082YWclMkZkeWdTTDdjdXYzSEtwa3dJbVBjWG9NMktHYUhoeTNCM0JIZjNoNkI1cXNsWFFvb05PVm9mMGE3WGRpNmZEeEJQS1FRNzh2VDM1eE5sNkZyMWw1czB5WFNOWlJIdWpIeGxSaHRNdiUyQiUyRkU4SkI5ciUyRkFJZklMbzJwVDZYZkxkOG1taUtlaFBBekU4b1QlMkJ5dkt0T1BXUCUyQlhLdnJhZlNwbDFYVDJMNmV6ODRMcUxyRTFhOFdIN1BIN05EbGtNb2x1UGlIUmFyUnowNUYlMkJxSjVTSGYxQ1QlMkJaJTJGTGx6NVd2dlRVbVhUNWpXMm5QJTJGRUglMkZ3Q0xCJTJGdzJGYXVEOFNuNmM2N2EzVmg1eDBwN0clMkJSZnJBV3NrWTZFSHBMRlhwJTJGeHBuTGRjMFM4OHQzcHRyaXIyN21zRTNabEg2blg5cGNtUjFISnhGUzN1QTRvZnREQmx2Y3oybHhIYzJzalF6eE1HamxUWWdqQ1ZHNk1oJTJCV0Q0WlJJdnYzR0MxWjdwZHhIcmFOSkNWaXVrcTEzYXN3VkFPOXhDVyUyRjNVZjhBZGtmJTJCNiUyRjhBVncxdDVOUGtLYWJlM1N5cUtHMnVJcXVZRFg3SmM3ZWkzN2ElMkZaJTJGYXptOXRkVDJkeEhkV3pjSll6eVE5UjRVSTdxdyUyQkZoa3dodkRxRUNUYVpiRXh5SGhQYnFLbUNZaXZCZiUyQktaUHRSJTJGOERnSWtTRHhWSHFLJTJGU3lCRmJqZnZSOGsxeFk2Z1Z0TGI2dkpiVldaYmh2VkxvMzh5QWVtWVpGJTJGNFhDalcwTWNYOTg2JTJCWDcyVWVtNlY1NmJla1ZBWUx1MEQlMkY4QUpTTCUyRkFJdGp3N1cwdXRWZ2owJTJCN2s5RFVMYyUyQm5hU01hRmtydmF6JTJGOHlYUCUyQnBncTAwaXp0YmthVmNQOEFXQmVyNk56RXdvckxXalJzb0o0eVJ2OEFFanI5akdPTURibjV5M1V5Sjh2Y3lmeUhwbDFwdWh5MzF6RUUxZTljSmZLeFhqSzhKTWFUcWZHWkNydCUyRk45ckNYOHdkYSUyQnF5YWJBR0FNODVhWUE5RlVjViUyRndDR3laWEVsdmIyMFZnSGIxTGVOREVLbXBLRGhHUyUyRmZPSyUyQmNyaHRVMUc4dkxaJTJCWXN6Nk0wUSUyQjBuQmg2Y3dIJTJCJTJCNWFmN0Y4c2xzQUF4RzV0a2VzVG02OHNhZGRvM0diVFo1YmIxQjFHJTJGclJmcnhHVFc3THpQcGNyYWhBTGZ6RHBpcjliaUk0dEpFU0Fab3dmdEo4U3Z4JTJGWSUyRjFjRDZWTWIzUk5Uc1NoSm1oanU0Z1ZQMm92dEglMkZnRyUyQkxCVm5iNmI1ZzB1eDFKR1dEWE5EajRTRWlvbmdRY0dqayUyRjM0aFg3TGZzWUJ1a3QlMkJXYmE0Z1dIV21qJTJCc1dkcEswRHdxeSUyQm9Xa29uSkUlMkZ2SFpPZk5jS2Rhc25rODAyODhUTjZFRXF4T1hOV1NPSmlTN24ycDhlQjRieVN3MWlsdjhBdTRPUWs0N2tLbyUyQkx2JTJGTFg3V0s2anI0dTlVZWUxakl0bmRpSWlhc3l2OXNWJTJGbDN3V0FGWkJidllhanFzViUyRkRTUDF5SVRQVWdTS0g5U1NpblljSVJ3JTJCSDdUU0pociUyQllPcjJzT2tXbW5oSFNLNllpUm9sRkY1QSUyQm42bmdKaWY4QVd5UDJNTDZkYmlSSSUyRnJxc0FJM1NSQXNNWSUyQnhIS3JsR2hmbCUyRmVmQiUyQjglMkYzWGdYWFlwcEpHMW0ydW5rYmo2T3AycFVTS1ZBcWtzU05zaWY1TCUyRkZIOXZIb1Vscnl0ZHREQ2dkbVY3ZDVJMmJvVSUyQklOR1QlMkZMaHByM25MVEtKOVVUMTlUQjR6Tkh0Q2UzSmozYjJYSXNzcDFZOGJVZkZPUXNpeDdTQ1NsQVhwVG1qNGF2NU9uc2RNJTJCdXpCM1ptOU9XYU5HRDIlMkZNZ1JUb2xQM3NYUDRadjkyZnlZaTZvSVREVnJHMjh4Nk5CZUJ2cVdvV1MxaXZTZUlpa1U4akZJJTJCekxBNiUyRkduJTJCJTJCM3lGYXExcGNYaXgyOFpVR2kzVTJ3YWR4JTJGdXppQUVXdjhBcSUyRkg5dkRMVjdUelhlV3JxYmFXTzRWaEhlTkh0RmRDUDdFaFg1RDR2OSUyQmZid3BDM2xpR2d2SW9WZFNxdDZwTFBHcjBwVGolMkJ6OFh3NENVa0VHaWw3UndSdTlaendqUHg4VVppS2VQU2h5YiUyQlJmTWRoSE0ya0xFViUyQnNEbERMUUZuY1VDeGNSWDdXRUYxRENzNjN6Q3M2cjZjMU5rZW5jcjdyZ1hTcEZzYjV6Q0ZvcmVwQzlQaVVFZlpyNERBRFJWRCUyQmRkVWtQbVBVNGxVZ1ZOdE5HNHFEdzJCb2Yya1AyR3lLMUxFQ3BZJTJCQXFUblVGaHN0YTFDZSUyQjFHM2ludVpDcnlTc2dxd3FGTlJrd3U5UjhtJTJCV0l3c2NFSHJoYXJEQkdqU0g1dFQ0ZjlrY0lvb3A0ZGE2VnF0MkdXMHRiaVFIYmlrYmtINTdVd0hORkxiU3ZiM0NORkxFeFNTSnh4S3N1ekt3UFFqT3UzJTJGbXElMkIxbUZvMUMyTm1GTWpoVFFMR3UlMkZLUnR1bVFmVSUyRk1XaDN1b1RYeDByMXBKZVBLU1dTbkpsVlU1bFFOdWZIbmhReG1PWXhrbFNQaUZDRHZVWlFLVUlwVW43SnIwJTJCN0Q4ZVlyQlA3blJiVWY2MVclMkZobVBtdGtCRnZwdG5FZXpDTWtqNzhDcFJaT1k1dyUyRkJtV2hCQ2pzZXVTeXluMHBJcElyMkNTcjJndGJZVFF0NmF5bHVmUHA4UEJXYkNaUE51clJPc2tZZ1ZrWU92N3RTQVZOUnRnMjc4MCUyQllQTmQ1Q2RXdVJKSEVXa1dPTkZqUmFpaCUyQkZBUGxqc3FMZVJyVmglMkJqUXQzR0JSb1hCQktBZkZ3YWclMkJMSjE1QjE3eWZlYWxFMnRhVEhjWE1HNjNFcSUyRnZiWUwlMkZ2eUglMkI2ZUZLJTJGM2lKeVQ5dkFYa1B5Z1BORXVveHgzS1EzVnJBSHRZV1A4QWVPeHB2JTJGeFdxaWpNdjJXWk1MZFM4dkJMeDRwZzlqcVZxVEZKSXZ3dXA2ZnZQNWxQJTJGRExpbGx2NWklMkJTdFB0TDg2N3BFRWNlbTZoeGtpdkxXaklrJTJGZXZIYjA1ZnRaRjlPa2Q1RXQ1bWF5dm9XRXRyZFJtbkNVZlltaFlmemZ0cCUyQjNrMyUyRkFDNjh6TGZ4JTJGd0NGZFd0MWVFbHJiVW9XJTJCd0dJckRQR3Y3Q3lVJTJCTGolMkIxOGVJZWF2S00zbHE3V3FmV05Pa1lpenVYRmVOZXNFOVA4QWlYN1dOYnFDbmNmbTJmelJvVW1nNnpFcWE3WlBEUFBDdjkzZVFSTUMwMEElMkZhJTJGWmFXTENIemY4QWw3b09yYTViNmg1S3VCSGUzcmo2MVl3ciUyQjVYbHUwJTJGTCUyRmREZnp4JTJGOFF3cHVwNFZXQnJPUmhmVzdpUzBZa3JKYmtkUkxLdjJvbSUyRlk0ZmJ6c3ZrWFU3ZldOSGp1M2poajFaQUk5VUVLaFNKdkVtZyUyQkYxJTJCUEVoWGdQbSUyQjk4eSUyQldyaVR5eHJNMGlDTUJvNVZWVzlhRG9KSVptJTJCTGlmNWZ0UnRoTjVYOHp4V1htJTJGVFo5ZEhxNkhIJTJGb3oyejFlTkxkMUtxNFR2d1klMkJvMmVsJTJGUFhralRQUEdrTlkzbjdxN2hxOWplcVBqaWtwJTJGd0FORSUyRjhBdXhNOG1hem8lMkJxJTJCVjlVdU5JMUtMMDd5MlBGbGJkV1UlMkZabGpQN1VUZnN0aWg5Snk2ZCUyQlZWM2YyZGphM2x0SGU2aXBlelMybXJ6QUZmaCUyQjJpTWYySyUyRkUyWGNmazVvam9UWjMxMWJ6MUpFakZYRyUyRml0RSUyRjRsbmxoM1VTTEtDWTdsU0dMUTdVSTNEQTltejBMJTJCVlA1d0xxeGk4cyUyQmFaUkhxSXBIWlgwaEFFOU5samxQYWYlMkZLJTJGM1olMkZyWXFxYWwlMkJTJTJCb1hiMkVZdnJhV0cza2N5dkxHM0lSdXdZJTJCa2dQRlcyUGZKalolMkJScnV3dUZhMjFpUllGQUNLRktzS2Y2ciUyQm1mJTJCUmVUVUR4eTZZcW8yMExRUXBFOHJ6c28zbGtweWI1OFFCaTJiTmlyczJiTmlyczJiTmlyJTJGQVAlMkZUNyUyRm16WnNWZG16WnNWZGxFQTljdk5pcnpiOHp2SWY2YmhPdTZSRVAwdGJMJTJCJTJCalViM0VRJTJGWiUyRjR5cCUyQnglMkZQOWpPSGFndnFXc013JTJCMUVUR3dQV2gzM3oxem5JJTJGekw4aHFFdXRmMHFQNEpSenZyZFI5bHdSJTJGcENEdyUyRjM3JTJGd2VSbkd4VHROQnJlRXh3NURzRDZTZW45RjRncHBodG8ycHJZU1NRM0tldHAxMVJieUFpdTNRU29QNTAlMkY0WmNLNVl6RzVRN2VHUEVVeVJwTXlrUlNFaEg3TVYySXpHQWtEWTVoM09TRU1rRGp5Q3hMOGJlYVphZ2x4b09weFRXN3FMU1drbW4zY1gyZUozNG54JTJGd0FwY2xNc2VuJTJCY2RJZUM0UUNaUVBYakgya2Fud3l4ZTJSalQ3JTJCMmUwYlJ0VkhMVDVTV2hsJTJGYXQ1T3pyJTJGeFd4JTJCMnVKV3R4ZTZIcVN3OHd0eER2QkwlMkJ4TEdlZ1A4eU9NeWNlUUViY3VvN25uTlZwWjRKbU10d2Q0eSUyRm5EOWJFTlUweTgwQyUyQmF6dVJ5VHJISVBzdW5aaCUyRlRLaWw0a1NJYWolMkJHZFoxSFR0TTg0NlNYVWVuS3YyZ04zZ2xwMSUyRnlrUCUyRkQ1eU85czd2UmIyU3h2VTRzaDNJNk1PenA3Tmt5T281T0ttU3VHVU12UTlNTWRGMW00MFMlMkZqdm9BSFVmRFBBMzJaSXo5cEdIJTJGRElmMkd3anQ1UWgzJTJCdzMlMkJkY0ZucmlyMEdXNUt5eDZoYXY2bHRmcURIZGRXNURiaTFkbzVWJTJCdzYlMkZ6WkxQTGJRNm5QOEFXcnBBYnkzb0pHSTJrWHFrcmZ5eXFSOXJPVTZIcktXSHEyTjhHbDB5NnA2Nkx1MGJqWlo0diUyQkxGJTJGYVglMkZBSFltZGE4cDJpMnRrOHNqckk3bWlUSVR4a2olMkIxSEpRN2h1SiUyQkxKUjNLM3NudXEzZm8ycnVvcVFDM2lkdnNnRCUyRldwbk1KJTJGSiUyRm1lNE1zcTJqQzl0dVVhWGNYRVIzZHJKMWphcEg3Mk5XJTJCRm1YJTJGaXQlMkZ3QjVuVGRJa3N5elcwYyUyRnJ5eFZaZ3pCbUNzYTRlQ1pBS0hESVdnYlBEdks5anF1aDZ4YVclMkJ0VzgxckRMNmxvelRLYUZKUVZBQiUyQkt0Zmh3dnM0N215dkwlMkJOUWZUczJrRDlVSzhnUUtsdjJYcDhTdG5SJTJGelExR1cwOHUlMkJsWk8wZDNkVHh4UXNoS3NLSG03aGg5amlxJTJGYXppNk14RWlJNVlPYTNOeXhKTWpWcnV4JTJCSXJsY3RtUTNUUzkxRTNqQ0cyakhJMDlSMXFPZE9nRmY5MXIlMkZ3MkNMS0ZZeHlKQklGWkpPd0hnTUMyTnJ5RzN3Um5xNTZ0JTJGWmh1c1ppaWh1N2NNV3Q1aXIyenB5aWtVQVU5VCUyQlljdVdSNXBkUHFpYWNRcldxWEN6UjFVU1ZCQWIlMkZBSFlwJTJGbnd1dGRWaHRkVGElMkZnV1ZCT0FrOEJjTkc5QlRxeWs0YzZyYzJkeGUyRjNjMmtjS0pHSTdxeDRrVWpweVIwQjZWciUyRk5oQnFjOWhhU3hwSEVSYVhSYVdJdCUyRnV2Y29UUmE3NVBseVFuJTJGQUpadllJJTJGTVVTMlNORUxpVlRFeWdVam5WVzlPbGZ0SThoVldWc25TWFZ4ZlRHUzZsYVNWaUNTMndvZGpzTnM1JTJGbzhyckw2OXF3ZDZwSXJxQXclMkZkJTJGWVB3OU9tU3VhNTFHVko3NjJzd1FYTENEMUFpcnlOUXJNZmkyJTJGeVZ3eEtrSWpXNyUyQmV6alI3UFRwciUyQlVidjZXeVVIOHpmYTZkdU9FUG5qVDdTRVdtcnh4a1NYYXRhem93QTVLWSUyQlNjZ0Q5cUlyeHdRM21QWDdFZXRxRmhBdHFQdGVnenlTQWV3QTQ1RiUyRk1IbTFkY1JJR2pNZHZDJTJGcVJJS2N1VkN2SjIlMkJSJTJCemdsTFkyeWhqbkxhRVNmY0VxdWJ1clc4TTVIcHpLdklyMUZhRGw3OWNSYlJyNlM4JTJCcjI0NUdDb2FjJTJGQ2pLcDY3JTJGd0F3dyUyRjhBTDNsaTAxcUJMZ1BKTzhmN3Q0d1A3cyUyRnNFOWZoT0hlciUyQlZ0ZmdnJTJCdmFiY0plMUZKclBqd1pWVVUlMkZkeSUyRlI5bGx5SUZpeHVFempLRWpDWW9qbUdNNmphYWpaMjhSakJpRWlzSnpVTFRpM2lTS1Iwd2JvSGtUWGRXdDIxT0xUNXJ1MkE1UmxOMWs4U3JzVldUJTJGQUdENWVuYTFhWEElMkJvNnBEJTJCOUoyV2NlbkwlMkZsQkpSOEQlMkZ3Q3JuU2Z5ODgwVyUyRmx5emwwbTd1Slp0SlIlMkJWbVhTc2x0eU5YaFlEN2NQN1NjZmlUJTJCWERYY3hvc1IxRDhydlAycVdVZGxaYWRIWlc3a1BjUGNYRVllU24yRUtSOCUyQktKOXJoJTJGTmtSdSUyRndBcnRjMDI2ZXkxRm9vSm85eUtzNElQN1N0UWNsejBicmY1amVYdEtoUjdlWVgwc2llb2lRSFlMMjlSdjJDZjVUOFdRN1clMkZNaiUyQlpyT0tkMHQxQ3QlMkI2ZURrN3hNYWowNUNhTnhiJTJGVndFZ0N5MjQ5UGx5RUNNZWZKNDIzNWZYUTYzVWYlMkZBdCUyRlhDN1Z2S3Nta2ZWN2lhYjFkUGxJU1c3alRlRnolMkJ4SkhXb1BnMzdlZFE1a3lOREl2cHl4JTJGYlElMkIlMkZRZzkxT0I3aEZDdXJJc3NVcThKb0hGVWREJTJCeXclMkZVMklJSXNNTW1LZU9aaGtpWXlITUY1ZyUyQmhDTmlwY3lGZjNud0Q3Y0glMkIlMkZvVCUyQjF4JTJGd0IySiUyQnppTnlXMDElMkJOc2VWdE1vTWM0RzdWSDgyVENieXhmV014dFVNbG5ESVByT2xpNTVKSWglMkZ3Q0syWmVNcXRoWVlPTVZ4Qk5iJTJGdTJISyUyRnNsNkpVN1hscCUyQjF4RGZiVCUyRmRlRmdtUGtuVzdxMGVDJTJGc1olMkJPb1dUY2s1ZnRSbnJHOVB0SWZzdG5hdFkwaXclMkZNZlE0JTJGTVdoOGJmWGJkU2p4bmJteUQ0N1M0JTJGNWt5NTVnV2NhWnFEUHAxeVpvNDJQcHo4U3ZJZVBIT24lMkJUZk8ycWFYTUwlMkZTSGlQcWNSZjJNOWZUWWY3OFhqOFhJZnM0cW9Xc0dzUTY0VHBwJTJCbzMxekdiSzlXWWZGRThaOVRjZUk0RlA5bG5wTmJXRFZkR2l0OVJSYmlPNGdUMWczUWtxQ1c5alg0bHprc0UxejUzODJEVTdXekVLb3FxNVVWQW9PSWVWOXVSJTJCTCUyRmdjN1JER3NNTWNTJTJGWmpVSVBrb3BqMFV2SHRRJTJGS25WOUgxRjlYOHZYQ2FqeVl0OVR1UW9ZTFNpamt4OU9UaiUyRmxjTVM4cSUyQmFMbnk5NWd1b05ZczJzJTJGcmZFWHNMTHhLeUpYakxINHB4T2Rwd2wxenkxcCUyQnZDT1NjdERjdzE5SzVpb0hBT3hVMUh4SiUyRms0b3ROb1pZcmlKSm9XRHhTS0dSaDBJSTJJeUYlMkZtTiUyQlhsbDU1MHo0T01HczJvSnNMeW5mcjZNdjgwTCUyRndEQ2ZheVU2UllOcGxoRFlOTVp4QUNxeUVCU1ZxU29JSDh1RGoweFY4TmFwcFY3cGQ3TnAlMkJvUU5iWDlxeFNhSnVvWWZycjlwV3d1U05nNE5TSEJxS2JFSHhybnJMODBQeTJnODZXWDElMkJ3Q3c2OWFKUzNrT3l6b04lMkZxOHglMkY1TlAlMkJ3MmVYbTBxOGd1Wm9ibEdnbGljcE5BNHBJcm9hTWpmeTBPS3ZwZjhsdk11c2E1b2wxWmF6T0xxWFMzamlpdVR2SXlPdkpSSWYyeWxLYzg2ZU04eSUyRmszNXVzZksycjNGdGZ5TXRqcW9SWlozcVJGTkdUNmJQNElRN0klMkYlMkJ4enRGMSUyQmFIa2UwMVNEUjMxYU43bVolMkZUTFJWZUtOdTNxVEQ0RjVkTVZabG15bElaUXdOUWR3UnVNdkZYWnMyYkZYWnMyYkZYJTJGJTJGVTclMkZtelpzVmRtelpzVmRtelpzVmRqWFZYVmxZY2xJSUlQUWc0N0dTT3NhTkk1b3Fnc3g5aDF4VjRSJTJCWnZrQTZWSzJyNlZIJTJGdVBsYXJJdjhBdWx6JTJCeiUyRnhqYiUyRmRmJTJGQTVFb0pMSyUyRndCRmgweU9KVTFBeXJINm9BQmJvcUpJdGVidHlKa2paUDhBS1ZzNzNxbm0lMkZ3QXN5Vzg5bGVzN3h6d3RTTXhNUktHJTJCSGdocHg1NXclMkZ3QXklMkJXcGJJSFdOTmplR0tGa0RqbFZ3NSUyQklQR3dwOFMlMkZ0Y2ZzWkdVYXVRSHZkdnBOV0p4amh5eU1aQSUyQmlYUSUyQlVtTVhOdGNXVnpKYVhTR09lSmlzaUhzUnRsbDF1TGY2cmNNZUtiMjB2Vm9XJTJGNnBQJTJCMHY3R0hzTHI1cHR2cTdtT1BVNEVsbUVoSEgxZUNJSTRrcCUyQno2YU83JTJGdGVwaEJOQlBieXREY1J0Rk5HYVBHNG9SN0VaVktKSHJoeiUyQjkySmpEUEE0Y3czSE1kUiUyRlNpaU5HMW03MDI4RWlFQzRqJTJCR1dNbjRKVTdxZjhBalZzbG12YUJwM25MU0Z2YkNpVEtDWTJQMm9wUDI0cEtmcyUyRjlkNUJURkZJeXM1WkdYOXBLY2g5QjY1SnZLbXJTYVZkZXZ4ZWExbSUyQkNjRUZReWo5dFIlMkZ2eE10eFpCSVY4eDNPaTFla25wNVVkNG42WmQlMkY3WG1za1Z4cDExSlkzc1ppa2piaXlIc2Y4QW1rJTJGczRjYVBheTZwZVFhZEU2ckpNd1ZYYm9GNmslMkIlMkZFRE9uJTJCZFBJa2ZtU3lHcDZRQTEycWM0SkZwU1ZQdGNHOSUyRndEamZJMzVhOHF6YUZOYTN1cktyWExtc2NmSTFnUDdOU3YybiUyRm15d3hvdUlOMURXUEtEVzk1RFk2SzB0NUlmZ25hVUtnRDA1Y2w0OUk2SDdUWjBieW5CQW1talNWdmhjejJxRU02MCUyQkhuVlJ3OW9tJTJCSCUyRkFGc0l0ZmhuZGcxcSUyRnBOZHhtSXVEUVZVJTJGRUNmOG9ZUmVTTGs2UjVuV0J3MWJtVDZzU0Q4RkdCYjRoJTJGTnlYRHlQdmJzV0lURTklMkZWR0prQjMwalBLVjFQcE9zckJkdVJMRmNQYjNKWTlWZGl0VyUyRjJYeFowJTJCOTFPMnNwSW9KV0wzRTU0d1cwWTVTT2Y5VWRGJTJGbWR2aHptJTJGbTJ3JTJCb2VhcEpsQlZkUmpXZENEc1pFMmNmZXVIZHZmUVcwQm5nWnB0VnZFSDF1JTJGbEc2Z2olMkI1aEg3S3IweEhjMHBEJTJCWWc4d2ExTkRGWldqU1d0c3JDUm9pR0pjbjQ2YjFZZEYyeUZXZW16eHNXMUNONEVqJTJGWmxVb2Z1Yk9zMldweHBOR2wyb01QMmVTYkVlNXlUWEdrYWRxRnBKYVQyNlQyODYwWUVWQkI2RUh4OE1lQ3pkcHVubEV0cEhZUTM4R3FSckZOYVBBOEVnSmNGYSUyRkdxaGFkYW8yWEJHbG1iZTJ1Q3pldmJHZVJvMlBjTkp4JTJGMlMlMkZEaHQ1MXMzc0xwWUxvSDZuY0lxMjF3UlUxVWNlTHQ5SHhmOEhoajVmOHBYZXJXYyUyQnEyVnJIcUUxb3FRV2R2Tkx3VW9pam1KQiUyRk85VzQlMkZzOGNqVkgzTGV6RXZNMm1YV3F5YWJOb3pCN1NTMVdKNVN3QnJIV25MdjhBM1pVYmZ5NG9ubGF6bXRyS0MlMkJKbE5vSEZGTkZibVFhSHZ0VEo5clBselU3R09PNnZyUmJlTmlvUVFNclJ4bW45MzhJWGo0WUUwZlFMblhCZFEyMDYybDFDUDNTU3J5OVhhdjdvZzAlMkY0TERzaWtwczdDM3MxV0syaVdKQiUyQnlncGc1bE5PWDBZQVZyN1RMMHhYc3hjeHNWbGhrdHdwRlB0TFZXd2JmJTJCYW4wZTh0cDdMVFlybXlJTGxweVQ2aG9SdzIlMkZ1JTJGVGJkbHczdGFvSzR2N2ExZFkyZFc1R2pRMXFWSGolMkZ3QTI0VmFoNWEwM1ZsTnhaRVFUdHZ5WDdMSCUyRkFDbHlmanlmbzNuclRyYlY5UFJOSTFpNmdNOHFSRU5DOGdiMDVPVUklMkJOUjZuUjElMkY0SElScU9qNjU1VnUlMkZRMVNCb2dUJTJCN21VMWlrQTdwSjAlMkZ3QmkzeFpHd2RpemhPZU9YRkNSQlNQU1pOWDhtYW1sMU1oTnNmZ2xkUGlqZEQxSCUyQlMzN1M4czZaTHJFRVp0MnVFZTFXNlZXdExzZyUyQmxLR0hJR09SZVMlMkY2d09SOWRXdFJwMTFkU1ElMkZXSHQ0V2slMkJyOTNJR3lVJTJGeXNrJTJGayUyRlc1SU5BVFQ5WjBlQVdjekdUNmdyJTJCb0lsZmNnQnhzZjJ2VCUyRkFHTVl4TVNlRTJEMDdtN1BxQm1qRXpqV1NPM0VPVW8lMkJZNzJNJTJCWWZMY2QzRkplUVJ4eW83RXpRVTc5MkdRNjBiVTlIa2Y5SFRBd3RzMWpkVmVObCUyRnlYJTJCMm4lMkZFYzdaTDVYc3RWU1M1OHA2a1lacVZiVHJ5c2lmNnRXUHJSciUyRnNwVnptdXZhRHEyanpzdXAySnRBNU5DZmp0bU5mOTFUamIlMkZZeWNjSjh0bWdKUHFWNEpKTEpwSTNzWUxxSjJ1WSUyRnRCZ1A5MXE2anBJeThWdzBzTk5uOHRHMTFtOEtXTm5xVHJBdW1zNVloVHZ5Y3QlMkIwUjhmdyUyRlliJTJGV3dMZFJwZmFWRWtrUE81MHIxSGhqSkFMUlNnOUhwWDkyJTJGd0N6Z1NXNFRWOUhnYTV1cHBkVnNwRnQ3YTBGT01Oc2hISm0zVnVaWThmViUyQjB6ZkJsWkhxM0JOaWdPbm01MkxJZkRIQ1l3TUNKbVZYSThJcU1ZbnpJNGY4NWwlMkJzUlFjN2VTS1ZSUEhLdHM0cnVVa1BBY3Y5UiUyRml3YlphWTFwNWd0ckhVb2lwam5qV1pPbzRsaFJ2OHBHd2NQTDlwY1JPWm8yUzZaa2FYZ3lxb2FGVms0aG4lMkJKOXVQcU54d1ZybXNXdXB2WXphbEY5UzFLMWxUaTZHc2NzWVlNcFYlMkZGV1VOeCUyRmx3WW9TamQ4anliTzBzdUxNY1VzZG1VUVJPeFJybkg3NVBRdGQ4dmFUNWl0QlphcEFKSTBZUEU2bmpKR3clMkZhamNmWnpnJTJGd0NaV2gzR2hXJTJGcjJ3SDF2U1owRFhsUGlhMW0lMkZ1WnVLN01WJTJGdUxqJTJCYlBRMXBkUjNsdEhjeEdxeUN0T3REM0gwSElGJTJCWkZuYjNrOEVNcWh4UEJKSE9oNk1uSVVEZlNkc3NEcTN6ZnFXbVI2bEZKcWVuUkNPNmlISyUyRnNrM0ZEMG5nJTJGbWpmQzNTTlZ1ZEp1VXZyS1FKZFFPcnhjMURvYWZhU1JHcXJLJTJGUmx5VTMyaTNYbG5VNFJIT1lyRjJJc3IxaHk5Sm0lMkY0OTUlMkY4QWltVCUyRkFDc0t0ZTBacCUyRlcxS3hnOUthTCUyRkFJNk5pcHI2YkglMkZkMFg4OEVuMmxmRlgwJTJGd0RsejV4MGZ6YnBBbHNJWXJPJTJCZ0FGJTJGWXhCVkNPUiUyRmVJQlRsRSUyRjdMZjdISnBuaUx5ejVtMVR5cnFWdHEybHk4Wll6dXZWV1g5cU9RZnRJMzdXZXVmSm5uSFRmT2VrSnFWaXdTWmFMZDJwTlhoazdxZjhBSlA3RCUyRnRZRlpKbXpac1ZkbXpac1ZhT2N0JTJGTmo4c3g1bnRKTmIwTmZUMXVCYXl4cnQ5YWpVZlklMkY0enFQN3R2MnZzWjFQS09Ldmh6MENzYndNenFTU0hQUmd3MiUyQkwzJTJGbXdybGhlQiUyQkQ5ZXhIUWp4R2VxZlBINU9hZDVsdXBkVzBpY2FicVUzeFRxVjVRVE4lMkZPeXI4U09mMm5YJTJGZ001OUglMkJRZm11NW5XQzluczRyYmw4VTZPek1CJTJGa3B3R0tyJTJGeWslMkZPQnRPTVBsbnpUTVdzeVJIWTZnNXFZcTlJNWozaSUyRmxmOEEzWG5veFdWMVZrSVpXQUtzTndRZWhHYzY4c2ZrdjVROHZCWnJpRTZyZHJRJTJCcGRBZW1DTzZ3ajRmJTJCRDU1MFZWQ3FGVVVWUlFBYkFBWXEzbXpac1ZkbXpac1ZmJTJGVjclMkZtelpzVmRtelpzVmRtelpzVmRpTnpORGJ3U1RYTEJJVVVtUmowQTk4V3dOZlBhSmJTbSUyQktpMnBTVXY5bWgycGlyQVBPTjVwTVdpU3RvaVBKZk0xYlZJNHl5MUc4akRrQ253cmhEckQ2akZiJTJCV2JDN1d0MzZFY2wlMkJDUCUyQktpWkhidHlKYWpmNVdEdlA5eFpSYU5DZkt0eEtiNHpqMDRJT1I0MDNKS2tmQU9mSCUyRld3czg0YWpOZDNFRWtsRnVTT1V0SyUyRkRSVlhpS2R1UU9GSWVlYXRwazBGNVBlYVVqJTJCbEFUTElZd1NZaFhkJTJGaCUyQnlsZXVMUDlVMTJ5a21pV08ydnJXT1c0bjNQeGdjQUZYbWF0eTNjZjc3JTJCeDlqTzElMkZsdm8wRWVqVDM4OFN2SnFETWpGeFhsRXZ3OFRYOWxzNWglMkJZJTJGa1NUeW5lJTJGcEhUVlk2TGRzVlVqJTJGZER0MWhmJTJGaXR2OTF0JTJGc01nUlc0ZHhvOVg0dkRpeVNxY2ZvbiUyRk8lMkZveVlKc1FHSGZKTDVGc3JYVWRaazBtNnVUYlIzVVR2SFFBZ3pSamtPTlNPRGxhNUdnY1gwJTJGVUpOTDFTMHY0MURQRklObThHJTJCRSUyRnJ5bSUyQkhNRDBrNTJ0eGVMcHBqcVBVUGZGNmw1WDh4V2xtOTk1ZXZabGd1TFNka2pSOWdUV2pyWG92UDRYVEVQTTZ3d3pLU0tDVDR0dW9JTyUyQjN2a2U4MHhYVTJ0VzEzWlElMkJvMTVicThucEo4VWxFTFZwJTJCM3NNQldPc1hPdFd5MmlFeVhOdUN5SXc1TXlmOFZzYXNlRlA3dHZpekw0dHElMkJUek5VZnZUJTJCT1U2bnBreTlacmNpVkFPNVh3JTJCYThzaXMwMXJwJTJGbUMwMU81WXJTV0o0a1hjeUZpQjluc0slMkZ0NWZsanpMWHpNbGcwYlJRdWpRRVNiVmxEY2w1SWVuTDRreWVlYlBJcDh5Nmo1ZTFEU0VqWDBYV080UXNxS1lrJTJGZlJnViUyRmI1Z3g4Y0hNZTVsR1VvbTRtanVQbnpTVyUyRjFPZlZMNlI3c0pXMmtlS0ZVR3lnR2hJSjNQS21OVnklMkZUQWsxcGRXYzl6QmRyd3VFbGNUSWV6QSUyRkVNaiUyRm1qWGJ2UXRhVzN0RUJnQ0pNNlB1Q0hGUUV4dGl6U0tJMURISnY1VnV4S3JXTXAlMkJ3QzhKUGglMkIwdjBaQ05MdnJmVXJHRzl0aldPVlFma2YybFAlMkJxY1BkSG1lM3ZJWlYyNHNLbjJPeCUyRkRKQlN5enpCcGxycVduU1FTeExJMFA3NkVzb0lEcU8zJTJCc01nbWxheGNlVWRSWFU3WlM5akpSYjYyWG9VUDdRSDgwZjJrJTJGNEhPZ1hkeVZZZ0hwMSUyQldRVzhnNFR6UXlvUXBKSVZoMVZ1aEdKQ2g3Rkc5aHJlbXBLaFc0c3J5TU1wNmhsWVYlMkIlMkZPV2ElMkZiWGZrJTJGVTBaSk9FTDFheXUyJTJCeTFQOTF1ZHYzaWY4T3VDUEolMkZtaFBMMXhhYUpldHgweTRyRkZNeDJpbUpKU3ZoSExYaiUyRnI0TiUyRk85RyUyRndBSjI4byUyRll2WTY5JTJCcU9NZ2RsWXpxUG1XeTh4cjYxNWFvdW94QUEzZGs0ZEpCMCUyRmZSR2pvZkJsNTRVJTJCbkN5U1JOU2ExbCUyQjJ2UXEzODYxJTJCeTY1R1BLY3p0cXhqWTdORXc0alliVTMyem9OcHBGMXFmcncySlg2eWllckhFeG9KaXZXSWY1Zkg3RFlZblphWTNwTjlONU4xbjlKSkVidUl3eVJvaXNZMWtEYnBWdTNGJTJGaWRNN3hwbDNZJTJCYWRGdDdtNXRsZTN2SVVrYUNZQng4UW93b2Y1V0IlMkJQT05HMGp2TFkyOHFsUlVncXdveU9PdTM3THBpWGwzWGJqeVpxazdYZ2xtdFpJZlRFS05RR2g1UkVGdnN4cjhYTGpnSXJkV1FlZHZ5N0dpUVByZmw0U05heFZlNXMxcTdScDNraSUyRmFhTmYyMCUyQjFrVDA3V0dDcXdjTWpkSkZOUWM5QzJOOUJxTnZIYzI5V2lsalNWR0kyS3lDb3BrRnYlMkZ3QW90SHU5Y09xMmQxSllXMHg1M2RoQW80TzUzSlF0OE1ZZjlvY01GeUIyM1p3R09RSWtlQ1FHeHF3ZklzYXROUVNRcklybU9VYnJJaG9RZkVFYjVMTEh6UFA2WDFUVjRScUZvNG96RlZMMCUyRndBcEQ4RW1GbXMlMkZseGVXQk54b0VwdUlodWJTUWoxQiUyRnFQc0h3bzAlMkI0bHRVbVc3Um81b2pSbzNCVmhUMk9XQ2kxdCUyQmJQSjFwRkNmTVhsSmd0bCUyRng5MlZDeVJIdXdqYjRrWCUyQmRmMmNpT2xHMmh1aGNYMm44SkkyQkU4RkhIek1UYiUyRjhUVmM2RnBXdXRheVNQYmxKRW1IR2VDUVZWd1AxWkd0Y3NJYmU1TjNwMFVpMk1sV2FNN21CJTJGd0JwUTQlMkIxRiUyRkxrVEd1bGhuRElZbllwcmY2dFlheGF4eENEbHhJYUc3aWtvOFo3a0d0V3IlMkIzeXd4c2RHbDFXd2l0ekdia2drUnp1Z0RHblJtMzRSMCUyRlpiSUpCWnd4djlZaEFWeDhRcDBKUGlCbmFmSmwxZVhla0xOZHlyS09YR05nQURRRDRnM0dnJTJCRTdZOFd5VExmaUhOSmJiUXZOSGxlJTJGZTUwZVFYJTJCblhBRDNWZzUzRW9XbktJbWhRbW43UHd2OEF5WVJYOXhxbDFkbVhXT1MzWEhpcU1ucDBRRWtLcSUyQkE1ZmF6clF3SHFPbVdtcVFHQzdqNUQ5bHhzeW54VnNGc0xlTzM5aGIzOXRKYlhNWWxobEhHU051aEIlMkZVZmZPWlh5MyUyRmw3VVYwNW41TWdycE4xTFRqTENUOFZuY0VqJTJGWWY1T2R0MW5RYnpSM0pjZXJhc2ZnbkEyJTJCVCUyRkFNcllCJTJGNVYzWSUyQmR0QXZoZWZ1YnJuJTJGdU51eDFqa1FVWWtEN1VibmlyJTJGNnVFcThEMXJURms5WFVkTmdhSGl4JTJCdTJYVm9IUGNEJTJGZmJmc3RuUWZ5QWViJTJGRmt0QyUyRnB0YVNGMVZnRk5HVGlYRmZpQSUyQkxqJTJGbFpDOVd1TmQ4cDZrTk0xZTA0YW5Zc1kybVk3VFclMkZaRzJwS2pmc1M0SzAwM21rQ0h6bDVXbURMYXplcmNXb0I5V0N2WDFGQiUyRmVRdDlsdjhuSW9mWU5SbDVGUEkzbmpUZk8ybGk3dGFSWGtRVVhscDNSajBaZjVvbiUyRlliSlhpcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRiUyRlc3JTJGbXpac1ZkbXpac1ZkbXpac1ZkZ0hWWTlQbXRIaTFKbFczY2dFdVFCVWJyMXdkZ1BVZE50dFR0emIzSUpXb1pTT29ZZHhpcnpIenRQJTJCaTIwYVR5dmRtNnVEY0pTQ01KSVBUVmhSV0tqN0JiYmkyQjliOGtlWnJuVjNGdmJlcmJzUXNWd0hVS0ZKNnRVOGhTdmhrJTJCJTJGd0FQR3kxR3d2TE9rcUs1anUwY0lQM1lRJTJCbkl0QVBpaWY4QTRua2twaEtRYVFPazZlbWw2YmE2ZkdRVnQ0d2hQaWYyaiUyRndXTzFMVGJQVnJHZlRyJTJCSVRXdHloU1dNanFEJTJGRWZzNE16RVZ3SXNnMk5pJTJCVlBPSGxtNThwNjVOcFUxWGhQNzJ6blAlMkI3SVdQd24lMkZYWDdFbiUyQlZnVzI4czYzZjJrV3IyOW03NllzNnh5WFFweFVnZ05VZmE0aXYydU9lbjljOHQ2SjVpdDB0OWFzMHVvNHp5akxWREtmOGwxb3k1RUw3VHJpR1czMEx5dHA3UTZEYnMwZDd4STRPeiUyRkZXUGx5Y21OdmliJTJCZkt6aXVmRVRzN1dYYWhPbjhQaDlkVkluNmE3JTJGZXdEelBkM3VrTnBsell0eHRFaFcyYWRWQkt6Umt0VGthbE9kZiUyQkJ3NjBieWRaJTJCYU5SJTJGd0FSYVBxMFZqT0l3NTA5YmNMSWt3JTJCMTZ5aCUyRmpSbSUyRjNhbjI4ZGU2ZExZVFhHazZ4RHp0cHg4YUhveW43THFmYjluSTNZWCUyQnJlUTlUaFMzcGNXaGN2YXpNQldTRSUyRmJnYVElMkZGOFA4QUpscnJEdnVudm1yeUI5YnVGdnpBdG5ya1FEODR6JTJCNm1LSGtHUnR1JTJGODJIV25PJTJCb2FkTHBVNWFDNFplVUw5R2lsJTJCMGpLUjBhT1laT0xPODBqemhvMGQzWnY2a01uMldGUFVobEd4VmglMkJ5Nkg3V1FXYU84MHJWMWh2d0JNamNmVUFvc2tUYkxJUCUyQk5zSXI1b1N1MTB0Zk90N0lrdDR0aDVpalFDNmhrU3NkejZmd2ZXSWlDQ3I3VW1UaiUyRmw1SkclMkZLVFNkVGpnJTJGeERJTGg0VUNVZ0hEN1A4QXhhZmo0NUdQTWRrWXRSa3ZiV2Y2amV3RVhOaGNyOXBwVDlwRVZhdEpXbnhKeCUyQnpuUlBJZm16JTJGRnVqZlc1WSUyRlN2TFolMkZxOTRnQkNtUUN2TlFmaVZYJTJCMXhiN09BMk5sZWFYJTJGa3IlMkZBMTlKYjJyTyUyQmxYYmM3VXZ1RmJ1dkwlMkJiJTJGaVdDN003SE91YXJwZHJxOWpMWTNpOG81QnNlNnQyZGY4QUtYT1A2amJhajVkdnBMSzVVU0JkMGZjQjA3T3Y4Y01UM3FrUDVsNnRya1dwMmtOaThzVnI2Q1Nob3lWRHlIN1JKSFhqOE9RcGZOZm1DTjElMkJzWGNzbkJlQ3JPZlVBVWRGSFA0dVAwNTJueSUyRnEyZzZ2ZVI2VDVoZ1g5NEFsbXNwJTJGZHN3JTJGM1clMkYlMkJVMzdHU0hVZnlwOG42aFVwYXZac2U4RGtEJTJGZ0g1cCUyQkdDWE5lVHdNJTJCYnplV3h0ciUyQjNTVkhGR01aS01QOG9CcXIlMkZ3QU5oOXF2NWdwcjNrVmZMVjl6azFPM3VJakZPd3J6dDR3MUdaaFVlcW4yUDhySkQ1aSUyRkpKcksybHZOS3VmclN4JTJGRVlDbkNYaU90Q3BLUHglMkYxTTUwM2xxN3RwRHhETlVVVUdsUHd5SnRXUWZsZnBNV3NlYUZ0TGdzc1p0Wm5ESjFWaHhDbjM2NTFlMzhxYW5wJTJCczJaWDk1YnJLRyUyQnRSN1VWZmlvNiUyRnMxNllTJTJGazNwR21XeHZOUiUyQnNwSnFmRVc3V25SNGtyeUxGVzNQcU4lMkZMJTJGTG5XOEkyVXNXOHglMkJWbzcxbjFMVDBDWHAzbWpHd2xwMyUyRjR5RCUyRmhzZ2w5b3lYVWF4WDF1OExvQ1kyZFN0ViUyRmFHJTJGZ2M3SlRFYml6dHJyMHpjUnJJWW1EeGxoV2pESkNYUW9lVmVXOVJ2OEF5MVBLTDI1a3VOTzlFTEVvJTJCSWpnYW9LayUyRkFxSnl6cXRyZFFYa0NYTnMzcVF5cUdqY2RDQ0s3WkZQTVBsMVlnOTVhTFdBN3pRamZqWHF3JTJGeWNCNkpyTnpZM0JXN3VBYkFSS2dVcVNRVklDOEtmQ3E4Szh2aHhxOXdsbnRLNER2dEowN1VnQmZXNlRVNkZodlR3cU44RlJ5UnlvSGlZT2pDb1pUVUVISDVGREM5WSUyRkw2d3VTWjlJYzJNM1gwdHpFZm82cCUyRnNjTDlCJTJGTHk4WFZKTlM4eTNZdW80MWFLejAlMkJFa1FyR3dvV2xPM04yem9tVlREWlY0bDVuOHMzUGxxOTRvUyUyQm5UayUyRlZaajI3JTJCazUlMkZuWCUyRmhzTU5JODkzV2oyaHQydGhOVlNFcDhQR1NsQkslMkYlMkJTZjI4Nm5xT25XbXFXY2xsZXhpU0dRYmc5UWV6S2YyV0djbzEzeWhkYVZNVVQ5NUEzOXpMMEREd1BnJTJCSVpjM3BQbHpVNWRTdEdhNElhZU5nR1phQUZXSEpXb01PYzV2NUUxQjdXZjZ0Y0FvRCUyQjVQTGIzalAwZll6bzR4SVlyWklvNVVhT1ZRNk1LTXJDb0lQdGlkcloyOWxBdHRhb0k0VXJ4UWRCVTFPTDVzQ3NPOCUyRndENWU2VjU3MDhSWE5JTlFnQiUyQnAzb0ZTdGYySkFLYzRtJTJGNFhPSVdYNVIlMkZtVm9PcHVtbXdJeVNBeE5Nc3NaaFpHMnEzTXFlbjgwZWVvS1pxWXE4bDhoJTJGayUyRmNlVzlRdDlaMURVM1c0Z1BKTFMwSkNFR3Z3VHl0VDFVMyUyQng2YXJuV3MyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGMSUyQiUyRjVzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFV6WnMyS3V6WnMyS29YVWpJTEc0OUUwazRFS2V0SzQzVFlraHNvUXA1RXFHWnZFbnZncDFES1ZiZFcySTlqaERkYURxVCUyRnVMTFdKYk96UDhBdWxFVm5BUFZWa2I0aGlxQjh3V1VYbVMlMkJYVFlXUWkzaWtacGh1VWxxT0ttbjdQOEFObk90UnNpUFcwVFdVS3FEOW9mYWpZZlprUSUyQjMlMkZETG5ZdEgwV3kwVzNhQzBCSmM4cEpIUEoySjhUaFY1dTh0SnJkb1pyZFFMNkVIMHowTGolMkJRJTJGOGE0YlRieFhRUE1HcSUyRmw5cjdtU3M5amNVTjNDdjJabyUyQjF4RDRTcCUyRnpabmFOWWh0Zk5tZ1JhaG83SmNNd0UxcEtDQVNQMjQ2JTJGc24lMkJaZjU4Z3N1Z1dXdGFQRnAxeFJMMjFxRmtGQ3lQM1U5NllSJTJCVWZNdDclMkJYJTJCcXZwbXFFdHBVc25HZU90UWpFMEZ4RCUyRndBelV4T3klMkI1a0htR0NPYTFzNyUyQlZlRXNGWXBISTNTdnd5QnZEaTY0N1J0SDFieTNxRVhtUFQ1VmxnbldtbzJDMUFtajZySXJINFJNblZjQ3ozRnZKNXgxcElxWDJoMzBjVnkzb3V2Mm5RRWVrYTlYWlc1WkpOUHVsdDdkYlpwVExhc1A5SGxZVWFsUDd1VmYySmxIMnYlMkJFdzg5MVp6WTN0dnFOdEhkV3o4NHBCVUhvUWU2c1AyV1g5ckM3ekpvRU91MlhwN0xkUlZhM2xQWTkwYiUyRkFDSHdpMElhaEJxdGRPbzloS2Y5TGpZMFZmOEFMVSUyRjc4eWJaRkQ1OTFqUzNSM2duUm81WW1wNE1qQTlzbkhrcjh3ZVJpMEx6SklJN3BRRXRkUWMwU1lkRldRJTJGc3klMkY1WDdlSCUyRkFKdzh1THFNRFg5cWclMkJ0UkwlMkI4VWY3c1FmOGJMbkpidXlqY05GS25ORDFVJTJGdzhEaDVwZlFvM0djNDg3ZVZGaE1tcTJLZnVITmJtTlIlMkZkc2Y5MktQNUclMkZhJTJGbHlQZVhQTSUyRm1meTJZNHBtazFQUnFmQkJLcE53aURyNkUzJTJCN09IOGo1MSUyQjF1YlhVN0pMaUtrbHZjSldqRHFyRGRXSCUyRkVzVjVQbnRvRml1VXVRT0Z4RnZIS3BLc1BwV25MSlo1Yjh3NjVwMXhFZ3VYdUlwM3E4ZDA3UDElMkZaVm0lMkJ4JTJGa2NjYnIlMkJobTIxMjVzYlBnZ1g5NUFacThGUmh5M3AlMkZMOFNyazE4MWFESHFlbXBxdHZSTHUyaERuZ1BoZU1EbVYlMkYyUDJvempzcktMVzVqdTRFbmklMkJ5NHJROVFlNE9MNUQlMkZBQ3A1aGd1N2lPd2trVVhGeEQ2eXg5RFdNOEhOTW1HSkZGRFJGUlFpb1BVSElocm1nckFYdWJkSzJ6MTlXT2xlRmVwSCUyQlJrd3ltQ2tVSXFEMUJ4QnBXSWFOcTA5bzMxV1VSclpvaWVtMzJlUEVoZUNJQjhWViUyQkxKY0dCM0JCSHRrYTFMUVhWbmUwWG5DOWVVUSUyQjB0ZXZIeFhBMmx4YXpIZlc2MjByeDJhdFc0Z2tTcUZPUENnZHZqRENsVndrQTdoV1lac3d6WkZYWW5OQkZQRzBVeUNTTnZ0S3dxRGltYkZXRTZ2b0UxaElidTBCZTNCclFWTElQOHJ4WEpSbzkyYjNUNFoyJTJCMVRpM3pHMWNHa0FpaDNCN1pTUnBHdkNOUXFqc29vTjhOcXV6WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5RHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VmlQbWJ5bzkxY2ZwdlFpSU5WVCUyQiUyQmg2UlhTRDlpWHdsJTJGMzNOJTJGd1dRelc5QVhYbyUyRlhhRmc3TCUyQiUyQmhLMG1qZEJ1YWZ6QUNqcm5ZY0RUV05yUEtrOGtZTXNaREk0Mk5SNDB3M3RSVzN6MXAybDZobyUyQm90TEFmWFZFNU9nRFZsakElMkJMaiUyRnhaR3Y3T1MyQmJlYVJic2NwSTVZdUxRcTNFVElmaVFjdjJaVlA5MCUyRjhBc01rM21pMUZqcUJudDBDcGNJSElVVSUyQk5UOFJGUDV0dVdSRFRGRXVsd1BhUDlZalZTZlZqQklGR1BNJTJGN0J2SENPU1hxWGx1NnRyblRJMXQ3WTJaaiUyQkdXMVlobVElMkJKY2ZiNWZ6WWNaQlBLbDFJN0dSWEhLR2kzQVklMkZhalBSdmRzblFOZDhCRkZEam5MJTJGUFdoSmFYZ3VJS1J3MzNLbmdrbFBpJTJGMlB4Y3M2amtZODkyVWwzb25xd29aSkxXUlplQUhJbFQ4RDdmSnNBVkJhTHBVZXVlUzlQdHJpWVBjV3lrUVhrZlo0eVZERCUyRkpQMld3WDVYMU5KMk5yUUlHWGtvWHB6UThKUDY1R1BKZm1PVFI1RzB6WExtR0N6bFltemhaUFNlRTA1Y2VQN1VUamZsaU9oYWdrV3MzQ1cwZ2tVWGJQWmpvWlZrWThrUUhyOE9TSFVKWkQ1NDB2bVl0VlJCSUF2b1RvMjYwSnJHelU3Y3ZoemFKNWpnbTB0OU8xdTdnaXUlMkZSZFklMkJKNDhveUNnJTJGZDlReWZaJTJGd0FySmhQQkZjd3ZienFIaWtCVjBQUWc5c2d0JTJGd0NTTHBKeTlweG5pUFJpUXNnSDhyZnpZQjVxbCUyRmtxMWhYVTRaaWdOd2pzaXpmdGVtVTNVZjVKenAlMkJSWHlsb0YlMkZwajNGenFZaVIzWXJheFJFc3l4JTJGelRPYUw2aiUyRnlwOENaS3NTVU96WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5SHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VmczNWlQck1FRmxkNlhiUjNDUk0lMkZybzFmVUlJSHd4JTJGczRVJTJGbHJxT2t6M2MxbFlRbUVORkpJOERDZ1J6SURJZzViMUphdlRPaWFqWkxmMmNsczFLc0tvZkJoOWs1eWRwSlBMJTJGbXpUOVpjQklXWTJ0NXNGb0Q4THM1QzElMkZ3Q0RreVE1S3lqV2RMR2k2bWwzYnJTeXZLeHVvNkk1OFA4QUpQVmNsT2lYWnVyUGk1ckxBZlRmNWZzbjdzRTNkckJxRnE5dkxSNHBWMkk3ZHd5JTJCJTJCRjJqNlhmMkY1ZFMzRXFOYnloVmlWYThpViUyRmJmYWc2JTJGWlhCZGozS25XVVJYTHpZRllWNW44bjN1czZ1dDdidEVJVEdzYmM2aGw0MThCOFdGZDc1WW04c3ZIcVZxUHJRaUNzSlNQaWlrSDJqUWZzTm5TY2F5aHdWWUJsT3hCM0JHRzFTYnk3cmY2WWdaNUtDWmZ0SUJTbUhlRmxsb2RscDk1TGVXcWxETUtHSWZZQjdrRERQRSUyQlN1elpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGJTJGMHUlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaRmZNJTJCaXBMVyUyQlNKWkFmNzFDdGFNUHN5Z2Y4U3lWWlJBSUlPNFBiQ0RXNnBQNVl2RGQ2V2l1MVpiYyUyQmklMkI5VHQ5bXYlMkJ4dzV4RzN0YmUxVmx0NDFqREhrd1VVcWZFNHRnUE5YWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOVB2JTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWJTJGJTJGWik7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO2JvcmRlcjoxcHggc29saWQgIzAwYWEwMH0ueXVpLXNraW4tc2FtIC55dWktaC1zbGlkZXJ7YmFja2dyb3VuZDp1cmwoYmctaC5naWYpIG5vLXJlcGVhdCA1cHggMDtoZWlnaHQ6MjhweDt3aWR0aDoyMjhweH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC1ub3F1b3Rlcy5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LW5vcXVvdGVzLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTM0YzBjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LW5vcXVvdGVzLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLXJpbmctdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1jZW50ZXItYnV0dG9uLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtbWFya2VyIHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLC55dWkzLXNraW4tbmlnaHQgdlw6b3ZhbC55dWkzLWRpYWwtbWFya2VyLW1heC1taW4sLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlci12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLWhhbmRsZS12bWx7YmFja2dyb3VuZDpub25lO29wYWNpdHk6MX1kaXYuYmFzZTY0LW5vcXVvdGVze3dpZHRoOjEwMHB4O2hlaWdodDoxMDBweDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCUyRjlqJTJGNEFBUVNrWkpSZ0FCQWdFQVpBQmtBQUQlMkY0UmZKUlhocFpnQUFUVTBBS2dBQUFBZ0FCd0VTQUFNQUFBQUJBQUVBQUFFYUFBVUFBQUFCQUFBQVlnRWJBQVVBQUFBQkFBQUFhZ0VvQUFNQUFBQUJBQUlBQUFFeEFBSUFBQUFlQUFBQWNnRXlBQUlBQUFBVUFBQUFrSWRwQUFRQUFBQUJBQUFBcEFBQUFOQUFEMEpBQUFBbkVBQVBRa0FBQUNjUVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE1pQk5ZV05wYm5SdmMyZ0FNakF3T0Rvd056b3hPU0F4TkRvMU9Eb3dOUUFBQTZBQkFBTUFBQUFCJTJGJTJGOEFBS0FDQUFRQUFBQUJBQUFCd3FBREFBUUFBQUFCQUFBQlJRQUFBQUFBQUFBR0FRTUFBd0FBQUFFQUJnQUFBUm9BQlFBQUFBRUFBQUVlQVJzQUJRQUFBQUVBQUFFbUFTZ0FBd0FBQUFFQUFnQUFBZ0VBQkFBQUFBRUFBQUV1QWdJQUJBQUFBQUVBQUJhVEFBQUFBQUFBQUVnQUFBQUJBQUFBU0FBQUFBSCUyRjJQJTJGZ0FCQktSa2xHQUFFQ0FBQklBRWdBQVAlMkZ0QUF4QlpHOWlaVjlEVFFBQyUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFEQWdJQ0FrSURBa0pEQkVMQ2dzUkZROE1EQThWR0JNVEZSTVRHQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVOQ3dzTkRnMFFEZzRRRkE0T0RoUVVEZzRPRGhRUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQWRBQ2dBd0VpQUFJUkFRTVJBZiUyRmRBQVFBQ3YlMkZFQVQ4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFNQUFRSUVCUVlIQ0FrS0N3RUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFCQkFFREFnUUNCUWNHQ0FVRERETUJBQUlSQXdRaEVqRUZRVkZoRXlKeGdUSUdGSkdoc1VJakpCVlN3V0l6TkhLQzBVTUhKWkpUOE9IeFkzTTFGcUt5Z3laRWsxUmtSY0tqZERZWDBsWGlaZkt6aE1QVGRlUHpSaWVVcElXMGxjVFU1UFNsdGNYVjVmVldabmFHbHFhMnh0Ym05amRIVjJkM2g1ZW50OGZYNSUyRmNSQUFJQ0FRSUVCQU1FQlFZSEJ3WUZOUUVBQWhFRElURVNCRUZSWVhFaUV3VXlnWkVVb2JGQ0k4RlMwZkF6SkdMaGNvS1NRMU1WWTNNMDhTVUdGcUt5Z3djbU5jTFNSSk5Vb3hka1JWVTJkR1hpOHJPRXc5TjE0JTJGTkdsS1NGdEpYRTFPVDBwYlhGMWVYMVZtWjJocGFtdHNiVzV2WW5OMGRYWjNlSGw2ZTN4JTJGJTJGYUFBd0RBUUFDRVFNUkFEOEE5VlNTU1NVcEpKSkpTa2tra2xLU1NTU1VzNHVEU1dpWFJvT0pLRmkzT3Z4Mld2YnNlNGU1Z013Um81c295cGRPeU45bVRTUkhwV3ZqNE9jNCUyRndEVmY5V2twdXBKSkpLVWtra2twU1NTU1NsSkpKSktVa2tra3AlMkYlMkYwUFZVa2xDcXh0dGJiRyUyRlJlQTRmQXBLWnBKSkpLVW8yV05ycmRZOHcxZ0xuSHlBbFZPc1d2b3dYWkRaJTJGUU9aYThEOXhybW0zJTJGTnIzUFVzd20lMkZwbVFHYW15bDRiSGlXdWhKVFlxc0Z0VExCdzlvZDk0VTFRNkZrZmFPazR0c3p1cVlmd1Y5SlNsbDElMkZvT3Qyc09ndURYZ2VUbTdmJTJGUG1OJTJGd0NDTFVXWjFWaHJ5c2JLQSUyQmp1YTd6Z3R1WiUyRjFGcUlVWFRTUWN2S1ppNDdzaDdYT1kwdEJEWUpoem1zM2FrZlIzYmxWZDEzcHJNdHVJJTJCd3NlJTJGNkwzQWhtN24wJTJGVSUyQmkyemFmemtGT2dxOSUyQmRqMFpGT000azNaRHRyR05Fbmh6dDd2M1diV1BVOGJKcHlhdlZwZHVadWMyZU5XT05iMiUyRjJYdFhPWTJWVTdyQTZobk85UnVKUyUyQnIxaE8xbGd1R0pidVl6MmV4dHZ2M2Z6TFBVJTJGd0NFU1U5UWtra2twU1NTU1NsSkpKSktmJTJGJTJGUjlWV2YwaXdpdTNGZjlMR3Nld1QlMkI2RDdQJTJGQXl4eTBGbXVuSDZ4UERNcGdkJTJGYlpGVCUyRndEb094JTJGJTJCMjBRcDBsQzAyQ3R4cUFMd0R0QjRKOEZOSkJUVm92eCUyQm80anZiTExHbGx0VHVSTXNzcmYlMkZBTkppeiUyQmhaRHFNTyUyRkV5Q1gyZE9jNnQlMkJrdWMxZ210JTJCMyUyRmhhUFRlb1o1czZSMUlackJHRGxrTnZJJTJCalhjWVl5eCUyRjd0V1Y5QiUyRndEdyUyRndEd2x5RDFMcVdIMGpxMk4xTzU1cnhPb2dZMXJ3QzRDOXV1UDZtemR0OVdsMXY2VCUyQmIlMkZBRmRGUyUyRjFNeXElMkYyVlRodXNhJTJCMnRzdDJrNnNQdVk3M0JybSUyRm8zVnYyZnklMkYzRjBTNFRBenElMkJtJTJGV0RxdUtHbmJoV095YTYyRFVVbHJjbXl1bGt0WjZmMmV5MTlXejglMkYyTHMyWiUyQkZZeDFqTDZ5eGdCZSUyRmNJQUkzQ1hmTklxWlgzdXJzcXFyWjZqN1RxSmdOWTJQVXNQUDBkeXBmV0olMkZvOU5PVDJ4cmFySFR4czN0WmtmJTJCeTc3VlI2djliZWpkTnNia2IzWmJxbTJzZlZqZ09PaHJkWkZsanFzZmZYcyUyRm12VjlWJTJGJTJCRFhIZFolMkJ1dlU4ekE2aSUyQmowMlkxemF3YVpMdDJMWTIxdGx0YjdYT2I2ajYlMkZ3RFIxViUyRnpWMzZ2NnJQVllGVSUyQmlDczVQUzdjZDQzTzJXVU9CNzdkMVglMkZUMjdsd3ZWbk55S0s4ZDE1cTZoaWoyMDdvOWRnM0RIZFc5bTl6THY4QVElMkY0V3U3MUslMkZUdHI5YXF6SiUyQnVIVjh0bVIwek5veUx2c1hVOE5yN2NkdGptdE4xSjlLJTJCMnBvZHNiazElMkZvJTJGOEEwWXNuRzZ0ZSUyQm5MWmJkWFhZNnB0dEFETnd1Y3dtaHYyY1didjB0bnIlMkZwS25mcEtiS2Y4QXRzcUQxRHZyam5mVjcwY0tsbGRnemdicWpmN1FIQjNwMnNHMHNiNmx2MCUyRmZaNlRFY1pnNjMweHoydmV6SzZqVmJmaFZ0ZjZiaVElMkJ4bHRtTlk3YTJ6OUpzM1Z1JTJGd2F5dnJIaDElMkJoaGRLdjNYdWJqQmhZOXdEYkh0UHBPZFhrT0g2dDFEZCUyRlJzbCUyRjZDJTJGd0RvbVY3Rmc5V2MlMkZGJTJCcTNSTDZiaWJlbjVXVmpoNGxsamR4YmV4bHRmMDZMYTl2dnAlMkZNJTJGd0FGWiUyRmhFdXFuMHI2bGZYTTlXWXpwdlZvbzZ3eHZjYkJjR2o5THRyMDlMTG9qOWJ4ZiUyQnZVJTJGb2Y1bXo5YXZySmQwJTJCMmpCd0hBWlRyY2QxN2lBN2JWWmEyblkwSCUyRkNYdzl2JTJGQUFkZiUyRldsNXppZFFaOVpjWTNsM29kZHdnMnoxbUhaNnpXZlF2M3QyJTJCbmswJTJGd0NuJTJGd0RSZjh4ZjZEZjFEcXZYR1olMkJlNXR6c2k3R2Q2bG0ya1BzcU5icXFPRzElMkY0Q3V4bnB0JTJGUzclMkY5STlBTGpSMUdoN2Y5NiUyQnVKSnBBMUtaajJXTkRtT0Rtbmh3TWhKYXlTU1NTVSUyRndEJTJGMHZWVm45YWlyRkdZU0dqRWNMWHVPa1YlMkZ6ZDVKJTJGZFpVJTJGd0JYJTJGcmEwRUhNOUQ3SmY5cEU0JTJGcHY5WUhYMmJUNm1uOVJJS2NFOVU2bGdYbkpEdjJsMGpOJTJGUzQ5N1MzOUM1MzBzT3l4biUyQkJjJTJGJTJCaDVQODMlMkYya3lmUyUyRlI1TmxQcnYxNnV3Y3pFeHNQSEZvekxCUldIejZycmlXTTlPdXY2SHM5VDN2c2V1ZTZCOWJ1b1pGNXhCVTg0QkRDJTJCdG9aWVcxUGN6RyUyQjAyR3htNzFHYjJYUDJmb2Q3UDVtdGN0MTY3cSUyRlQ4N0dkZmslMkZic2NXSEk2VjFOclFOR3UzTzJOWjZmcDVGTjlkVGNySDNlcFI2ZjlSS3dSWVh6aEtFdUdZbyUyRnhmU012TTZsWmxGJTJGVmZTb2JVMTFROU1HeXFMZmElMkJyUDlQSnNyOUt6MDluNmJHcSUyRjdkV04xejlWeEMzS2ZaVDAlMkIlMkJQVXlHZzVOSWFQZFU3ZXpaZTdLeFBSJTJGUjVHeXIxc1g5RGI2JTJGd0RndVp4JTJCdjM1MmJlNFdOd2Z0JTJCOXRiMm4yMW16YSUyRjA3WG4yJTJGcDdxbVZlcDZkYlAwdnFmb2xxWkQ3bVk5MWVEbVhoOXBCQVpER2pUOWF3dmIlMkJrcDNXJTJGcDJNZGtmcGF2MWIlMkJYVWIwV3VsVGVQMjNoNURpM0pMM1VZV1RZemx6YktuMXNjNXJON2JhTTNGWjlwdzh4cnZTdnIlMkZRZjBpbTZ1dkg2dlk3RzZoZlMybXgxV0ZZYXE3Ym5rJTJCbzJyMHJLUFRhN2J1c3R4WDIwJTJCeiUyQmxmNFJXJTJGcVBYZU00MDNzJTJGUTlMcGRiUTR2OTdXbDREY1cxbnVkNlBxZnJIMmU5bnN6TWF2TnglMkZzOSUyRjJoQTZpNXI3N0haTEgyNFRuMVc0JTJCVXdqMlB2YTNKZGo1YmZ6YUhiOG43RmslMkY0UDlZeFAwdFg4d3VscWFXZmIxQ3paNkdhTTMwNjIyV0REJTJGU1YxbXAzc2ZZNnRqV09zWTF0Zjg3NzZhJTJGVFE3czI3cUZOVklycXdBZlVzYlpSWHQ5UzBOOUt5MXRYODMlMkJncmUlMkYxc2VqJTJGQUUxbHpLbHRkRHRiaTlaSnNxcWJUYUJYZFMwVGJXNjhQeWNVeE5qOHFySWJSJTJGcFBVJTJGU2I2JTJGVHl2NlZXZjBxdk9yem1zWWFzbkd6SG1rN2d4MVphNksyWFI3c2QlMkI1djZLNzlKWGkzYlBVJTJGVjhpNzFSUlU1JTJGV2FMTXY2a1lqN1NHWDlMNmclMkJxSyUyRm9zcnltZXV4MWNmNEIxN2ZZc3JwdVBtTnhmdHo2M1Bjd2w5RFdEUTJzSXFaa05KJTJGTlplNmx1UjZmJTJGQUFYJTJGQUFTMWYycFhYMHZxJTJCSmxuN0xma1ZWdGEzWkFmbDQ5MjlteW4lMkZBNzZyTHE4NnIlMkJibyUyRjRxeWhWcnVvWmZTZWs0bGRtTTEyUGUyMjdEOVhRQnR2cHR1MyUyQjdkNlZyNjZYZjJQVSUyRndpU25zdXFuRHlMTWZGdE1aT1JqJTJCclhTUGVIRnNlbzJsN2czMUxhJTJGViUyQmglMkYyb3ElMkZ3ZnFmcEZ6blZjZDl1RFppdmF4ekRaWGExenp0WmFYQjFMVyUyQnYlMkZnYiUyRlpWWGk1dHY4MyUyRlJzajlBc0xxZlh2MmowJTJGcFhxUEZlZGdOdXJmYTEwRjN1cXN4OGx2OEFvM09idnJmJTJGQU1UNm4lMkJGUXF1cTU5JTJGVVJlYzF6YjdDSFhNYzhodG13N240N3Y4QnR1Y1BVYjZ2NlA5TGQ2OWlOb1M5SDZWazBaemNwajN0cXFlVzFBQXR1YyUyRjhBbTdNZXlodjZXdlolMkZOWlglMkZBSUV1Z3p1azE0ZUxpTjY5ZmJpNDl1NndnQmp5V05iNmRQNklPYTUyVjZ2dDI0N1AwZEQlMkZBRlAwYWpqZGM2a0JlZWtZUWQxRElzMnRzWlZaYmRWWHQ5dFlxc0c5JTJCMyUyRlRQWiUyQmwlMkZ3QkNzYWpwWFYlMkJ0WDJad28lMkZhbDdXdXZ2OVMwTWVhMiUyRlQyJTJCdlo3bTFlMWo2R1Y3NlBaJTJGcEswTkU3YXZwSDFaNjluZFU2VGk0bVA2bVZaa3RCZGJrUDN1cWJXVFJrakt1WUdiOXQxZTZ2Mjc3NnJQOUl1eXc4VnVKanRvYVM4dGt1ZWVYT2NkejMlMkYybkx5YjZ2ZFp2NkRqREt3bVZ0M2x6YnNaejNWc1pjSGx1VGdYNDk5aGZSWXh1ekp3biUyRnpuc3lLckxMdjhIMnZUJTJGcjloT0RLJTJCc00lMkZadVNXa3ZydEZqQzF3TG12ciUyRldLcVclMkZtJTJCemJaJTJCa1JSNHZWcEtuMDNxJTJGVGVxNDdNbnAlMkJReSUyQnQ3V3ZHMCUyQjRCdzNOOVNzJTJGcEslMkYlMkJ1TlZ4QlQlMkZBUCUyRlQ5VlRPYTE3U3h3RG11QkRtblVFSHNVNlNTbnhmNng5Q3pQcXQxRUNpeDdHTWViZW41UTBjYW5leXlsenZvdXRvM01ydVolMkZoYXYwbnAlMkZwRlVyeWFNakZ2cnpwczZka1BiWm1Vc0h2eDd6RmJlcjRmN3JiTFA2V3olMkZBRWxuJTJCaXZZdlklMkJ1OUw2ZjFYcGwySDFHRzBPRzcxU1EwMXVIMGIyUGQ5QjdQJTJGVWIlMkZ3Qkd2SDh2cEYzVDclMkZRcGNINU5JZWE3YXo2bGVYU2QyJTJCekhqZFc3MHFIYk1uRSUyRndsU1pyRTJOdXpmaktITVklMkJHZnB6UjJuJTJGTDlIOTV3TSUyRkJ5T2s1aHhzZ2l5dXdiNnJtNjEzVkg2TjFYJTJGQUtNclcxMGpxYnJtSER5SGw4TWhqWTNHNnNIZDZQTzMxOGR2NmVpejA3Zlc5UDB2JTJCT0hpUHhjNm45ajU1MllkaDNZbVZ5N0Z0UDUlMkJ2dmZpdSUyRnclMkYlMkZCJTJGcGY1emVoWXYxYTZwVms1V0xuaCUyQkpaaE1MNnJtaVd2c0JZNnQxRm4wbjFOWTc3VHZwJTJGU2Y4V25panFOV25PRXNjakdRNFpCN09pZzBmVjdMZjAxcnI4cnFSMnRlejNYUGJCeDY3WHNZemF5eGpiTWw5bTM4JTJGOUolMkJsJTJGUyUyQnB6cnZVeE1XcXZxTlZ1SmtzeDM0MDJ6VzVvb3NiZFNjaWc3MjVPSGQ5cVk2diUyQmMyWk9MVDZObjg4eTNlNlgxdXlrOU5leHpuWWQlMkJQZGkyTWMxbFR4bDR6dHpuV3UzYktmV1paWGJzOVQwNmYweXBkWTZKMUhyJTJGVkg5V3J0cHN4Nm1NcUZEUyUyRjFXaXNGMzBYTmE1JTJCNTc3YmYwZXl6JTJGUlYlMkJxbkh3VzFSb3RERjZ4YXk0OVR2aWtzOU9ITkJBYzlnMnNmYzFtN1p1MiUyRm9HJTJGUXh2M1BTVDlMdzJkVGJsTSUyQjFXMXNkRGl4b00ydnUzZjA5MzZPdDNwT1pzdXJwJTJGUTVIJTJCaiUyRndhSmo0R1hmMDUyWmplcFJqYm1Pcnl3TnpOakh1bGg5TWVnNXpOJTJCMWxybiUyRjRSOWZwJTJGcEZZeGNIRDZleTZuSXRkU0dBT3RkbEZ3aGxoJTJGUnVIcE4zUHBidjhBNXhucWVtZ0ZPWjElMkZEeU1XNzdUMURJT1F5NHZyYTkxYnFDMDBlbiUyQmlZeCUyRjA2TnJxbmV2JTJGQUlmJTJGQUVqMVd4YUcyc3hLT285TXU2aUszMlVZZU9MSE1MM3ZMck5ycm11MyUyQmx2JTJGQVBSaTFjdnBsMVBVcVczTmZoNVZKMzQlMkJObU85WEV1ckh1JTJGVjd0MWpHTXNZZjBub1A5biUyRkFBTnF2OVE2Vzg0dzYzMGhuMmN1RmQxamNZR3lzalM2cXpMeG1pdTNGeWFkdjg5Nk5YJTJCbCUyQjJlcWhTU0JRMXUlMkZ3ZWQ2ejlYJTJCcnRGSkgxZFpqMWFnRU5zcVp1SUI5RVBzdmJrVzdXajZlUyUyRjZmcSUyQmolMkJqV09jYk53OGhucWROeHEzdGl6WllYT2E0VHk3ZmtXYm1OZCUyRk9iZm9mNFJkcFQxZnFIVXMxcmMlMkZMZmt0eVJVMnZHYTRiU0hOZVB0RkwzZWw2Vm1MbFZlalo3ZjBtJTJGMWNqJTJCWiUyQjBXYnZTZnFuMCUyRnExZVRqZFJJZGxWc3BzcWN4d0JxYzhQYmZXJTJCclgzNzYlMkZUdGYlMkZBS0gwYmNTNnYyV0pYcXVsajRZQ1hFRFpxdXJ4bjFkeFhkUm9zdXc3OGhuWGNSNWRTV3UyMk9yWTJicXNkbjAzWkZUdDkzMk96MlpXTDZsVkxQV29YUzE5SHp1cDlQcSUyQnNmVE1ZdHk4a243WlJYREN5NWhkVmIxREVyZSUyRjlOVTc5THZ4SGJMY2xqN0tmNXJJc3BYRTVtUG05SjZxJTJGTHFhODJZcm12ZlZKSHFVc2QlMkJneXFMYXRsbjBhJTJGMDNwUDhBV3hMbWVyViUyQjVqJTJCeiUyRlU3cXZSJTJCcDlDb3Q2UU5sTEpiWlE1eGRaWGI5TzFsNzNTOTlqbnUzJTJCcTclMkJlJTJGbkVtTjU3cXYxWDZiOWMlMkZxOTlveFdOeCUyQnVZeGN5eDdnOXJqYzJQWHhNNXQzNng2ZGptdDlIMXYwMkwlMkJpOUwlMkZDVldjejlWUHI1MW5wUFdYOUglMkJzeHV5OGJJdEZOb3lEdnRvdDl0SWNOJTJGMDZIZTMxNlAlMkZBRUtvJTJGd0FKOXA5aGJYVzE3bnRhQTk4YjNBUVhRSWJ1UDV5NDMlMkZHQjlRMmRmcCUyRmFYVFd0WjFpbG9FR0dqSVkzJTJGQVBlNyUyQmF5RyUyRjhBYWZKJTJGNnpiJTJCaSUyRlNVSlQyVEs2Nnh0cmFHQUFBQm9BRUFiVzhmeVZKZWNmVWJxUDhBakhQVjMxZFh4TWpKNmMlMkZheTI3TGFNZDFKYU5nc29EeFg5bzlyZjB6YVcyJTJCciUyRlBlcCUyRnBQUjBsUCUyRjlUMVZKSkpKU0ROTCUyRnNyOWdlWEdBQlcxcm5ha0Q2RjM2UCUyQnN1QXd1bVYlMkZXWE5yeEh2Y3ltcWgyUzdJcUxuUmElMkI3SmZqMlVQY0d0cWR2eWZWc3BaN0slMkZRJTJCeTElMkZvYVY2RmZqMDVGWnF2WUxLeVFTMTNFZzdtJTJGOUpLaW12SHByb3JFVjFOREdEd0RSdGFra0VnMk5DTm54RHFkR2IwTHJ1M3FGREhYNDFyTFRXR3hWZXlSNzYyNnRkVm1OYSUyRjFQM0xQV3I5aTJjbXpycFk1dGRCNmd6cEw3S3E3V0dYUHFxZjZEOEhJYzFnWjl1cG8lMkY3VCUyRnptVlglMkZBRFhxcjBick9GMCUyQjQxMzViV1ZGZ2MwNWtEMVdNUDA2YXJpMTdxMjVQODFaJTJCJTJGWCUyQmklMkJuYXVUeXNmcW5RZW9NNmgwNmw5MWVXMkg0andmMXVoZ2M3MExxM0RkVjFYR3htNzhkNyUyRndDZm8lMkZRWGZwSzdHSVJGWDRzMmZON3ZBZUdwUmp3azkzSXlPajVWRG5ONlU1JTJGVU1hJTJGZmxZbExHdUxtJTJCcXhucGZhZHJHMXRkazMwMlVmYXYlMkJzMmVuJTJGTnJRJTJCcmQ5JTJCTmxOZGZTJTJGRHVEWE15OGU3UjFibWpmSiUyRmtOaGw5TnY1OUt0T2VMYk1ETzZGa3RKdGUlMkIlMkZDc3RMaCUyQmhjYXhtNG1ZNW9jNXRMTXIwOFhLM3N0OUg3VFJkJTJGU3FQV1cxMWZBJTJGYSUyQk9PcGRPYzZqcWVNTmxsWWpjZHZ1ZGpXdDl6ZlZyM2I4ZCUyRiUyRm9tJTJGMUUlMkIyRjVqcGYxdTZEajlSeUxLY3F1M3BlYWYxckYxYUdoJTJCaHltMFhNcjkxVGZaa3NyJTJGbmNiJTJGU1dZOWJGVHdmdGZVT3BkUXdSWnZ4c0RMT0xoMnVCZXhyTEgyMVl6TExBSHY5SzNaWCUyRndBSCUyRk9MVXclMkJuZlUlMkY2eFZEQjZsZzQlMkZUdXRFRnJMYUclMkJnTFhEJTJGQzQyelkyeCUyRiUyQmx3N2YwMWY4dXI5T24lMkJyb3lQcWxsWmZUaGhNc3FCWmJsV2h4RmphaEZMTFdFJTJCMjdIWnYzc2JzcjlIOU42MyUyRkJqVzFMOUo5UERhJTJGNnVkY3glMkZVNlRhN2JTSDZ1eExUN1cwT2MwJTJGbzZIVDZtRmwxZnpYJTJCblY5bjFSNnYwN2JiaFp2MnphNHcxNDlLMFZrNmVua01lV1B1MmZ6bjh4VmIlMkZ3ZjBGMUdWaDRtZFNXM01EMnZiQWZBM0FIOXh5b1ltUlowbyUyRlk4OTQlMkJ6dEJOR1M3UWJSJTJCYThuNk96JTJGd0glMkZ0dEx5UmJ5UFVjWE1xenpuWTJOZmg5VHJiWmJra1Z5eHpRQnZ6bSUyQm0wNHZyN2YwZCUyRm8yZnJYJTJCRCUyRlRWMnJjJTJCcm1IMGJxSFQ4ZmNXJTJGYjJOZWQxRnJtV3NhWE9aTGZSTEgwMVclMkJwdTlMJTJCYVhVaUNKSEJXR2VnTTZkMUlkVTZXemJKaSUyRkZiQWFXdVB2ZFYlMkZWJTJGblBUU3RONlU0JTJGV2ZxUGs1amhSajJCb3JEck1YTE9qcW5nZTJtMXJOcm5WM2UxbG5wZjhiJTJGTzFVcm0lMkZxTGxaSDFhJTJCc2VUMDNJd0xhN3M5N0s4bkZyWSUyQng5ZnAlMkJwNk9manVwWjZWdlQzJTJCclkzSSUyRjBQNk95bjlGJTJCalhyS1NDRkpKSkpLVWtra2twJTJGJTJGOVgxVkpKSkpTa2tra2xLUU0zRHB6Y2QyUGJ1QWRCYTloTFhzY05XV1ZQYjlDeGprZEpKVHhIVmZxNE9sNWJjJTJCcTU1ZGx2TExxMkRheDFscHJZN0lGYlA1aTYzYjc3S2Y5SCUyQmslMkZRcnBQcSUyRmNMTUFWbGdydXBjV1hNNGR1Qmo5STB5N2YlMkYxZjAwdnJCMGhuVnVuUG8lMkJqa01tekZ0R2pxN1FDMXRsYjlOanZkJTJGcXhTNmRXTWowdXBIOUZmYlhzeXF3SWFiR3d4MzAlMkZmJTJCaWZXOW45UkhvcHd2ckJoNGVGMVYlMkJYa1UlMkZxbVpRUUxTQjZkZVl4d3V4N0hBZnBHdnM5TCUyRkIlMkY4SjZpdldWWjJkajR2VjhGZ2Zia1klMkZvNVdPOGhvc3JkcjMlMkJpNnQ3bnJlZld4OGIyaDIwaHpaRXdSOUZ3JTJGbElPTGc0JTJCSTY1Mk9DeHQ3dlVmV0Q3UTQlMkZTY3h2NW0lMkY4OUsxSXVqWWo4UHBXTGpXRGElMkJ1c0I3U1pJY2ZjNXU2WGZuRlczMXNlSWUwT0V6QkU2JTJGTlNTUVVwSkpKSlNra2trbEtTU1NTVXBKSkpKVCUyRkFQJTJGVzlWU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyRiUyRlolMkYlMkIwMUlsQm9iM1J2YzJodmNDQXpMakFBT0VKSlRRUWxBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQURoQ1NVMEQ2Z0FBQUFBWUVEdyUyRmVHMXNJSFpsY25OcGIyNDlJakV1TUNJZ1pXNWpiMlJwYm1jOUlsVlVSaTA0SWo4JTJCQ2p3aFJFOURWRmxRUlNCd2JHbHpkQ0JRVlVKTVNVTWdJaTB2TDBGd2NHeGxMeTlFVkVRZ1VFeEpVMVFnTVM0d0x5OUZUaUlnSW1oMGRIQTZMeTkzZDNjdVlYQndiR1V1WTI5dEwwUlVSSE12VUhKdmNHVnlkSGxNYVhOMExURXVNQzVrZEdRaVBnbzhjR3hwYzNRZ2RtVnljMmx2YmowaU1TNHdJajRLUEdScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlNHOXlhWHB2Ym5SaGJGSmxjend2YTJWNVBnb0pQR1JwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVhWFJsYlVGeWNtRjVQQzlyWlhrJTJCQ2drSlBHRnljbUY1UGdvSkNRazhaR2xqZEQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFF1VUUxSWIzSnBlbTl1ZEdGc1VtVnpQQzlyWlhrJTJCQ2drSkNRazhjbVZoYkQ0M01qd3ZjbVZoYkQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1R3dlpHbGpkRDRLQ1FrOEwyRnljbUY1UGdvSlBDOWthV04wUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFU5eWFXVnVkR0YwYVc5dVBDOXJaWGslMkJDZ2s4WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExtcHZZblJwWTJ0bGREd3ZjM1J5YVc1blBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRazhZWEp5WVhrJTJCQ2drSkNUeGthV04wUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGblpVWnZjbTFoZEM1UVRVOXlhV1Z1ZEdGMGFXOXVQQzlyWlhrJTJCQ2drSkNRazhhVzUwWldkbGNqNHhQQzlwYm5SbFoyVnlQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlUyTmhiR2x1Wnp3dmEyVjVQZ29KUEdScFkzUSUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YVhSbGJVRnljbUY1UEM5clpYayUyQkNna0pQR0Z5Y21GNVBnb0pDUWs4WkdsamRENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhRdVVFMVRZMkZzYVc1blBDOXJaWGslMkJDZ2tKQ1FrOGNtVmhiRDR4UEM5eVpXRnNQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4U1pYTThMMnRsZVQ0S0NUeGthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1amNtVmhkRzl5UEM5clpYayUyQkNna0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDVHhoY25KaGVUNEtDUWtKUEdScFkzUSUyQkNna0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5WbVZ5ZEdsallXeFNaWE04TDJ0bGVUNEtDUWtKQ1R4eVpXRnNQamN5UEM5eVpXRnNQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4VFkyRnNhVzVuUEM5clpYayUyQkNnazhaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG1wdlluUnBZMnRsZER3dmMzUnlhVzVuUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrOFlYSnlZWGslMkJDZ2tKQ1R4a2FXTjBQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFZabGNuUnBZMkZzVTJOaGJHbHVaend2YTJWNVBnb0pDUWtKUEhKbFlXdyUyQk1Ud3ZjbVZoYkQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1R3dlpHbGpkRDRLQ1FrOEwyRnljbUY1UGdvSlBDOWthV04wUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVjM1ZpVkdsamEyVjBMbkJoY0dWeVgybHVabTlmZEdsamEyVjBQQzlyWlhrJTJCQ2drOFpHbGpkRDRLQ1FrOGEyVjVQbEJOVUZCRVVHRndaWEpEYjJSbFRtRnRaVHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBsQk5VRkJFVUdGd1pYSkRiMlJsVG1GdFpUd3ZhMlY1UGdvSkNRa0pDVHh6ZEhKcGJtYyUyQlRHVjBkR1Z5UEM5emRISnBibWMlMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlVFMVVhVzluWVZCaGNHVnlUbUZ0WlR3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbEJOVkdsdloyRlFZWEJsY2s1aGJXVThMMnRsZVQ0S0NRa0pDUWs4YzNSeWFXNW5QbTVoTFd4bGRIUmxjand2YzNSeWFXNW5QZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNRazhhVzUwWldkbGNqNHdQQzlwYm5SbFoyVnlQZ29KQ1FrSlBDOWthV04wUGdvSkNRazhMMkZ5Y21GNVBnb0pDVHd2WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5RV1JxZFhOMFpXUlFZV2RsVW1WamREd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlXZGxVbVZqZER3dmEyVjVQZ29KQ1FrSkNUeGhjbkpoZVQ0S0NRa0pDUWtKUEhKbFlXdyUyQk1DNHdQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDR3TGpBOEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpjek5Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQk5UYzJQQzl5WldGc1Bnb0pDUWtKQ1R3dllYSnlZWGslMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhRdVVFMUJaR3AxYzNSbFpGQmhjR1Z5VW1WamREd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlYQmxjbEpsWTNROEwydGxlVDRLQ1FrSkNRazhZWEp5WVhrJTJCQ2drSkNRa0pDVHh5WldGc1BpMHhPRHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJMVEU0UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0M056UThMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqVTVORHd2Y21WaGJENEtDUWtKQ1FrOEwyRnljbUY1UGdvSkNRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDUWs4YVc1MFpXZGxjajR3UEM5cGJuUmxaMlZ5UGdvSkNRa0pQQzlrYVdOMFBnb0pDUWs4TDJGeWNtRjVQZ29KQ1R3dlpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZWEJsY2tsdVptOHVVRTFRWVhCbGNrNWhiV1U4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWtKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVUdGd1pYSk9ZVzFsUEM5clpYayUyQkNna0pDUWtKUEhOMGNtbHVaejV1WVMxc1pYUjBaWEk4TDNOMGNtbHVaejRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVjM1JoZEdWR2JHRm5QQzlyWlhrJTJCQ2drSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKQ1R3dlpHbGpkRDRLQ1FrSlBDOWhjbkpoZVQ0S0NRazhMMlJwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVlc1aFpHcDFjM1JsWkZCaFoyVlNaV04wUEM5clpYayUyQkNna0pQR1JwWTNRJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1amNtVmhkRzl5UEM5clpYayUyQkNna0pDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExtcHZZblJwWTJ0bGREd3ZjM1J5YVc1blBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YVhSbGJVRnljbUY1UEM5clpYayUyQkNna0pDVHhoY25KaGVUNEtDUWtKQ1R4a2FXTjBQZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NVFUVlZ1WVdScWRYTjBaV1JRWVdkbFVtVmpkRHd2YTJWNVBnb0pDUWtKQ1R4aGNuSmhlVDRLQ1FrSkNRa0pQSEpsWVd3JTJCTUM0d1BDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENHdMakE4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQamN6TkR3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTlRjMlBDOXlaV0ZzUGdvSkNRa0pDVHd2WVhKeVlYayUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoY0dWeVNXNW1ieTVRVFZWdVlXUnFkWE4wWldSUVlYQmxjbEpsWTNROEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrSlBHRnljbUY1UGdvSkNRa0pQR1JwWTNRJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TGxCTlZXNWhaR3AxYzNSbFpGQmhjR1Z5VW1WamREd3ZhMlY1UGdvSkNRa0pDVHhoY25KaGVUNEtDUWtKQ1FrSlBISmxZV3clMkJMVEU0UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0dE1UZzhMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqYzNORHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJOVGswUEM5eVpXRnNQZ29KQ1FrSkNUd3ZZWEp5WVhrJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NXdjR1F1VUUxUVlYQmxjazVoYldVOEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrSlBHRnljbUY1UGdvSkNRa0pQR1JwWTNRJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TG5Cd1pDNVFUVkJoY0dWeVRtRnRaVHd2YTJWNVBnb0pDUWtKQ1R4emRISnBibWMlMkJWVk1nVEdWMGRHVnlQQzl6ZEhKcGJtYyUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNUJVRWxXWlhKemFXOXVQQzlyWlhrJTJCQ2drSlBITjBjbWx1Wno0d01DNHlNRHd2YzNSeWFXNW5QZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzUwZVhCbFBDOXJaWGslMkJDZ2tKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZWR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1UVZCSlZtVnljMmx2Ymp3dmEyVjVQZ29KUEhOMGNtbHVaejR3TUM0eU1Ed3ZjM1J5YVc1blBnb0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMblI1Y0dVOEwydGxlVDRLQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUlVhV05yWlhROEwzTjBjbWx1Wno0S1BDOWthV04wUGdvOEwzQnNhWE4wUGdvNFFrbE5BJTJCa0FBQUFBQUhnQUF3QUFBRWdBU0FBQUFBQUMzZ0pBJTJGJTJCNyUyRjdnTUdBbElEWndVb0ElMkZ3QUFnQUFBRWdBU0FBQUFBQUMyQUlvQUFFQUFBQmtBQUFBQVFBREF3TUFBQUFCZiUyRjhBQVFBQkFBQUFBQUFBQUFBQUFBQUFhQWdBR1FHUUFBQUFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE0UWtsTkElMkIwQUFBQUFBQkFBWkFBQUFBRUFBUUJrQUFBQUFRQUJPRUpKVFFRbUFBQUFBQUFPQUFBQUFBQUFBQUFBQUQlMkJBQUFBNFFrbE5CQTBBQUFBQUFBUUFBQUFlT0VKSlRRUVpBQUFBQUFBRUFBQUFIamhDU1UwRDh3QUFBQUFBQ1FBQUFBQUFBQUFBQVFBNFFrbE5CQW9BQUFBQUFBRUFBRGhDU1UwbkVBQUFBQUFBQ2dBQkFBQUFBQUFBQUFFNFFrbE5BJTJGVUFBQUFBQUVnQUwyWm1BQUVBYkdabUFBWUFBQUFBQUFFQUwyWm1BQUVBb1ptYUFBWUFBQUFBQUFFQU1nQUFBQUVBV2dBQUFBWUFBQUFBQUFFQU5RQUFBQUVBTFFBQUFBWUFBQUFBQUFFNFFrbE5BJTJGZ0FBQUFBQUhBQUFQJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGOEQ2QUFBQUFEJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGQSUyQmdBQUFBQSUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRndQb0FBQUFBUCUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRjhENkFBQU9FSkpUUVFJQUFBQUFBQVFBQUFBQVFBQUFrQUFBQUpBQUFBQUFEaENTVTBFSGdBQUFBQUFCQUFBQUFBNFFrbE5CQm9BQUFBQUExVUFBQUFHQUFBQUFBQUFBQUFBQUFGRkFBQUJ3Z0FBQUJBQWN3QjNBR2tBY3dCekFGOEFZUUJ5QUcwQWVRQmZBR3NBYmdCcEFHWUFaUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUJ3Z0FBQVVVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBUUFBQUFBQUFHNTFiR3dBQUFBQ0FBQUFCbUp2ZFc1a2MwOWlhbU1BQUFBQkFBQUFBQUFBVW1OME1RQUFBQVFBQUFBQVZHOXdJR3h2Ym1jQUFBQUFBQUFBQUV4bFpuUnNiMjVuQUFBQUFBQUFBQUJDZEc5dGJHOXVad0FBQVVVQUFBQUFVbWRvZEd4dmJtY0FBQUhDQUFBQUJuTnNhV05sYzFac1RITUFBQUFCVDJKcVl3QUFBQUVBQUFBQUFBVnpiR2xqWlFBQUFCSUFBQUFIYzJ4cFkyVkpSR3h2Ym1jQUFBQUFBQUFBQjJkeWIzVndTVVJzYjI1bkFBQUFBQUFBQUFadmNtbG5hVzVsYm5WdEFBQUFERVZUYkdsalpVOXlhV2RwYmdBQUFBMWhkWFJ2UjJWdVpYSmhkR1ZrQUFBQUFGUjVjR1ZsYm5WdEFBQUFDa1ZUYkdsalpWUjVjR1VBQUFBQVNXMW5JQUFBQUFaaWIzVnVaSE5QWW1wakFBQUFBUUFBQUFBQUFGSmpkREVBQUFBRUFBQUFBRlJ2Y0NCc2IyNW5BQUFBQUFBQUFBQk1aV1owYkc5dVp3QUFBQUFBQUFBQVFuUnZiV3h2Ym1jQUFBRkZBQUFBQUZKbmFIUnNiMjVuQUFBQndnQUFBQU4xY214VVJWaFVBQUFBQVFBQUFBQUFBRzUxYkd4VVJWaFVBQUFBQVFBQUFBQUFBRTF6WjJWVVJWaFVBQUFBQVFBQUFBQUFCbUZzZEZSaFoxUkZXRlFBQUFBQkFBQUFBQUFPWTJWc2JGUmxlSFJKYzBoVVRVeGliMjlzQVFBQUFBaGpaV3hzVkdWNGRGUkZXRlFBQUFBQkFBQUFBQUFKYUc5eWVrRnNhV2R1Wlc1MWJRQUFBQTlGVTJ4cFkyVkliM0o2UVd4cFoyNEFBQUFIWkdWbVlYVnNkQUFBQUFsMlpYSjBRV3hwWjI1bGJuVnRBQUFBRDBWVGJHbGpaVlpsY25SQmJHbG5iZ0FBQUFka1pXWmhkV3gwQUFBQUMySm5RMjlzYjNKVWVYQmxaVzUxYlFBQUFCRkZVMnhwWTJWQ1IwTnZiRzl5Vkhsd1pRQUFBQUJPYjI1bEFBQUFDWFJ2Y0U5MWRITmxkR3h2Ym1jQUFBQUFBQUFBQ214bFpuUlBkWFJ6WlhSc2IyNW5BQUFBQUFBQUFBeGliM1IwYjIxUGRYUnpaWFJzYjI1bkFBQUFBQUFBQUF0eWFXZG9kRTkxZEhObGRHeHZibWNBQUFBQUFEaENTVTBFS0FBQUFBQUFEQUFBQUFFJTJGOEFBQUFBQUFBRGhDU1UwRUVRQUFBQUFBQVFFQU9FSkpUUVFVQUFBQUFBQUVBQUFBQVRoQ1NVMEVEQUFBQUFBV3J3QUFBQUVBQUFDZ0FBQUFkQUFBQWVBQUFObUFBQUFXa3dBWUFBSCUyRjJQJTJGZ0FCQktSa2xHQUFFQ0FBQklBRWdBQVAlMkZ0QUF4QlpHOWlaVjlEVFFBQyUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFEQWdJQ0FrSURBa0pEQkVMQ2dzUkZROE1EQThWR0JNVEZSTVRHQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVOQ3dzTkRnMFFEZzRRRkE0T0RoUVVEZzRPRGhRUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQWRBQ2dBd0VpQUFJUkFRTVJBZiUyRmRBQVFBQ3YlMkZFQVQ4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFNQUFRSUVCUVlIQ0FrS0N3RUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFCQkFFREFnUUNCUWNHQ0FVRERETUJBQUlSQXdRaEVqRUZRVkZoRXlKeGdUSUdGSkdoc1VJakpCVlN3V0l6TkhLQzBVTUhKWkpUOE9IeFkzTTFGcUt5Z3laRWsxUmtSY0tqZERZWDBsWGlaZkt6aE1QVGRlUHpSaWVVcElXMGxjVFU1UFNsdGNYVjVmVldabmFHbHFhMnh0Ym05amRIVjJkM2g1ZW50OGZYNSUyRmNSQUFJQ0FRSUVCQU1FQlFZSEJ3WUZOUUVBQWhFRElURVNCRUZSWVhFaUV3VXlnWkVVb2JGQ0k4RlMwZkF6SkdMaGNvS1NRMU1WWTNNMDhTVUdGcUt5Z3djbU5jTFNSSk5Vb3hka1JWVTJkR1hpOHJPRXc5TjE0JTJGTkdsS1NGdEpYRTFPVDBwYlhGMWVYMVZtWjJocGFtdHNiVzV2WW5OMGRYWjNlSGw2ZTN4JTJGJTJGYUFBd0RBUUFDRVFNUkFEOEE5VlNTU1NVcEpKSkpTa2tra2xLU1NTU1VzNHVEU1dpWFJvT0pLRmkzT3Z4Mld2YnNlNGU1Z013Um81c295cGRPeU45bVRTUkhwV3ZqNE9jNCUyRndEVmY5V2twdXBKSkpLVWtra2twU1NTU1NsSkpKSktVa2tra3AlMkYlMkYwUFZVa2xDcXh0dGJiRyUyRlJlQTRmQXBLWnBKSkpLVW8yV05ycmRZOHcxZ0xuSHlBbFZPc1d2b3dYWkRaJTJGUU9aYThEOXhybW0zJTJGTnIzUFVzd20lMkZwbVFHYW15bDRiSGlXdWhKVFlxc0Z0VExCdzlvZDk0VTFRNkZrZmFPazR0c3p1cVlmd1Y5SlNsbDElMkZvT3Qyc09ndURYZ2VUbTdmJTJGUG1OJTJGd0NDTFVXWjFWaHJ5c2JLQSUyQmp1YTd6Z3R1WiUyRjFGcUlVWFRTUWN2S1ppNDdzaDdYT1kwdEJEWUpoem1zM2FrZlIzYmxWZDEzcHJNdHVJJTJCd3NlJTJGNkwzQWhtN24wJTJGVSUyQmkyemFmemtGT2dxOSUyQmRqMFpGT000azNaRHRyR05Fbmh6dDd2M1diV1BVOGJKcHlhdlZwZHVadWMyZU5XT05iMiUyRjJYdFhPWTJWVTdyQTZobk85UnVKUyUyQnIxaE8xbGd1R0pidVl6MmV4dHZ2M2Z6TFBVJTJGd0NFU1U5UWtra2twU1NTU1NsSkpKSktmJTJGJTJGUjlWV2YwaXdpdTNGZjlMR3Nld1QlMkI2RDdQJTJGQXl4eTBGbXVuSDZ4UERNcGdkJTJGYlpGVCUyRndEb094JTJGJTJCMjBRcDBsQzAyQ3R4cUFMd0R0QjRKOEZOSkJUVm92eCUyQm80anZiTExHbGx0VHVSTXNzcmYlMkZBTkppeiUyQmhaRHFNTyUyRkV5Q1gyZE9jNnQlMkJrdWMxZ210JTJCMyUyRmhhUFRlb1o1czZSMUlackJHRGxrTnZJJTJCalhjWVl5eCUyRjd0V1Y5QiUyRndEdyUyRndEd2x5RDFMcVdIMGpxMk4xTzU1cnhPb2dZMXJ3QzRDOXV1UDZtemR0OVdsMXY2VCUyQmIlMkZBRmRGUyUyRjFNeXElMkYyVlRodXNhJTJCMnRzdDJrNnNQdVk3M0JybSUyRm8zVnYyZnklMkYzRjBTNFRBenElMkJtJTJGV0RxdUtHbmJoV095YTYyRFVVbHJjbXl1bGt0WjZmMmV5MTlXejglMkYyTHMyWiUyQkZZeDFqTDZ5eGdCZSUyRmNJQUkzQ1hmTklxWlgzdXJzcXFyWjZqN1RxSmdOWTJQVXNQUDBkeXBmV0olMkZvOU5PVDJ4cmFySFR4czN0WmtmJTJCeTc3VlI2djliZWpkTnNia2IzWmJxbTJzZlZqZ09PaHJkWkZsanFzZmZYcyUyRm12VjlWJTJGJTJCRFhIZFolMkJ1dlU4ekE2aSUyQmowMlkxemF3YVpMdDJMWTIxdGx0YjdYT2I2ajYlMkZ3RFIxViUyRnpWMzZ2NnJQVllGVSUyQmlDczVQUzdjZDQzTzJXVU9CNzdkMVglMkZUMjdsd3ZWbk55S0s4ZDE1cTZoaWoyMDdvOWRnM0RIZFc5bTl6THY4QVElMkY0V3U3MUslMkZUdHI5YXF6SiUyQnVIVjh0bVIwek5veUx2c1hVOE5yN2NkdGptdE4xSjlLJTJCMnBvZHNiazElMkZvJTJGOEEwWXNuRzZ0ZSUyQm5MWmJkWFhZNnB0dEFETnd1Y3dtaHYyY1didjB0bnIlMkZwS25mcEtiS2Y4QXRzcUQxRHZyam5mVjcwY0tsbGRnemdicWpmN1FIQjNwMnNHMHNiNmx2MCUyRmZaNlRFY1pnNjMweHoydmV6SzZqVmJmaFZ0ZjZiaVElMkJ4bHRtTlk3YTJ6OUpzM1Z1JTJGd2F5dnJIaDElMkJoaGRLdjNYdWJqQmhZOXdEYkh0UHBPZFhrT0g2dDFEZCUyRlJzbCUyRjZDJTJGd0RvbVY3Rmc5V2MlMkZGJTJCcTNSTDZiaWJlbjVXVmpoNGxsamR4YmV4bHRmMDZMYTl2dnAlMkZNJTJGd0FGWiUyRmhFdXFuMHI2bGZYTTlXWXpwdlZvbzZ3eHZjYkJjR2o5THRyMDlMTG9qOWJ4ZiUyQnZVJTJGb2Y1bXo5YXZySmQwJTJCMmpCd0hBWlRyY2QxN2lBN2JWWmEyblkwSCUyRkNYdzl2JTJGQUFkZiUyRldsNXppZFFaOVpjWTNsM29kZHdnMnoxbUhaNnpXZlF2M3QyJTJCbmswJTJGd0NuJTJGd0RSZjh4ZjZEZjFEcXZYR1olMkJlNXR6c2k3R2Q2bG0ya1BzcU5icXFPRzElMkY0Q3V4bnB0JTJGUzclMkY5STlBTGpSMUdoN2Y5NiUyQnVKSnBBMUtaajJXTkRtT0Rtbmh3TWhKYXlTU1NTVSUyRndEJTJGMHZWVm45YWlyRkdZU0dqRWNMWHVPa1YlMkZ6ZDVKJTJGZFpVJTJGd0JYJTJGcmEwRUhNOUQ3SmY5cEU0JTJGcHY5WUhYMmJUNm1uOVJJS2NFOVU2bGdYbkpEdjJsMGpOJTJGUzQ5N1MzOUM1MzBzT3l4biUyQkJjJTJGJTJCaDVQODMlMkYya3lmUyUyRlI1TmxQcnYxNnV3Y3pFeHNQSEZvekxCUldIejZycmlXTTlPdXY2SHM5VDN2c2V1ZTZCOWJ1b1pGNXhCVTg0QkRDJTJCdG9aWVcxUGN6RyUyQjAyR3htNzFHYjJYUDJmb2Q3UDVtdGN0MTY3cSUyRlQ4N0dkZmslMkZic2NXSEk2VjFOclFOR3UzTzJOWjZmcDVGTjlkVGNySDNlcFI2ZjlSS3dSWVh6aEtFdUdZbyUyRnhmU012TTZsWmxGJTJGVmZTb2JVMTFROU1HeXFMZmElMkJyUDlQSnNyOUt6MDluNmJHcSUyRjdkV04xejlWeEMzS2ZaVDAlMkIlMkJQVXlHZzVOSWFQZFU3ZXpaZTdLeFBSJTJGUjVHeXIxc1g5RGI2JTJGd0RndVp4JTJCdjM1MmJlNFdOd2Z0JTJCOXRiMm4yMW16YSUyRjA3WG4yJTJGcDdxbVZlcDZkYlAwdnFmb2xxWkQ3bVk5MWVEbVhoOXBCQVpER2pUOWF3dmIlMkJrcDNXJTJGcDJNZGtmcGF2MWIlMkJYVWIwV3VsVGVQMjNoNURpM0pMM1VZV1RZemx6YktuMXNjNXJON2JhTTNGWjlwdzh4cnZTdnIlMkZRZjBpbTZ1dkg2dlk3RzZoZlMybXgxV0ZZYXE3Ym5rJTJCbzJyMHJLUFRhN2J1c3R4WDIwJTJCeiUyQmxmNFJXJTJGcVBYZU00MDNzJTJGUTlMcGRiUTR2OTdXbDREY1cxbnVkNlBxZnJIMmU5bnN6TWF2TnglMkZzOSUyRjJoQTZpNXI3N0haTEgyNFRuMVc0JTJCVXdqMlB2YTNKZGo1YmZ6YUhiOG43RmslMkY0UDlZeFAwdFg4d3VscWFXZmIxQ3paNkdhTTMwNjIyV0REJTJGU1YxbXAzc2ZZNnRqV09zWTF0Zjg3NzZhJTJGVFE3czI3cUZOVklycXdBZlVzYlpSWHQ5UzBOOUt5MXRYODMlMkJncmUlMkYxc2VqJTJGQUUxbHpLbHRkRHRiaTlaSnNxcWJUYUJYZFMwVGJXNjhQeWNVeE5qOHFySWJSJTJGcFBVJTJGU2I2JTJGVHl2NlZXZjBxdk9yem1zWWFzbkd6SG1rN2d4MVphNksyWFI3c2QlMkI1djZLNzlKWGkzYlBVJTJGVjhpNzFSUlU1JTJGV2FMTXY2a1lqN1NHWDlMNmclMkJxSyUyRm9zcnltZXV4MWNmNEIxN2ZZc3JwdVBtTnhmdHo2M1Bjd2w5RFdEUTJzSXFaa05KJTJGTlplNmx1UjZmJTJGQUFYJTJGQUFTMWYycFhYMHZxJTJCSmxuN0xma1ZWdGEzWkFmbDQ5MjlteW4lMkZBNzZyTHE4NnIlMkJibyUyRjRxeWhWcnVvWmZTZWs0bGRtTTEyUGUyMjdEOVhRQnR2cHR1MyUyQjdkNlZyNjZYZjJQVSUyRndpU25zdXFuRHlMTWZGdE1aT1JqJTJCclhTUGVIRnNlbzJsN2czMUxhJTJGViUyQmglMkYyb3ElMkZ3ZnFmcEZ6blZjZDl1RFppdmF4ekRaWGExenp0WmFYQjFMVyUyQnYlMkZnYiUyRlpWWGk1dHY4MyUyRlJzajlBc0xxZlh2MmowJTJGcFhxUEZlZGdOdXJmYTEwRjN1cXN4OGx2OEFvM09idnJmJTJGQU1UNm4lMkJGUXF1cTU5JTJGVVJlYzF6YjdDSFhNYzhodG13N240N3Y4QnR1Y1BVYjZ2NlA5TGQ2OWlOb1M5SDZWazBaemNwajN0cXFlVzFBQXR1YyUyRjhBbTdNZXlodjZXdlolMkZOWlglMkZBSUV1Z3p1azE0ZUxpTjY5ZmJpNDl1NndnQmp5V05iNmRQNklPYTUyVjZ2dDI0N1AwZEQlMkZBRlAwYWpqZGM2a0JlZWtZUWQxRElzMnRzWlZaYmRWWHQ5dFlxc0c5JTJCMyUyRlRQWiUyQmwlMkZ3QkNzYWpwWFYlMkJ0WDJad28lMkZhbDdXdXZ2OVMwTWVhMiUyRlQyJTJCdlo3bTFlMWo2R1Y3NlBaJTJGcEswTkU3YXZwSDFaNjluZFU2VGk0bVA2bVZaa3RCZGJrUDN1cWJXVFJrakt1WUdiOXQxZTZ2Mjc3NnJQOUl1eXc4VnVKanRvYVM4dGt1ZWVYT2NkejMlMkYybkx5YjZ2ZFp2NkRqREt3bVZ0M2x6YnNaejNWc1pjSGx1VGdYNDk5aGZSWXh1ekp3biUyRnpuc3lLckxMdjhIMnZUJTJGcjloT0RLJTJCc00lMkZadVNXa3ZydEZqQzF3TG12ciUyRldLcVclMkZtJTJCemJaJTJCa1JSNHZWcEtuMDNxJTJGVGVxNDdNbnAlMkJReSUyQnQ3V3ZHMCUyQjRCdzNOOVNzJTJGcEslMkYlMkJ1TlZ4QlQlMkZBUCUyRlQ5VlRPYTE3U3h3RG11QkRtblVFSHNVNlNTbnhmNng5Q3pQcXQxRUNpeDdHTWViZW41UTBjYW5leXlsenZvdXRvM01ydVolMkZoYXYwbnAlMkZwRlVyeWFNakZ2cnpwczZka1BiWm1Vc0h2eDd6RmJlcjRmN3JiTFA2V3olMkZBRWxuJTJCaXZZdlklMkJ1OUw2ZjFYcGwySDFHRzBPRzcxU1EwMXVIMGIyUGQ5QjdQJTJGVWIlMkZ3Qkd2SDh2cEYzVDclMkZRcGNINU5JZWE3YXo2bGVYU2QyJTJCekhqZFc3MHFIYk1uRSUyRndsU1pyRTJOdXpmaktITVklMkJHZnB6UjJuJTJGTDlIOTV3TSUyRkJ5T2s1aHhzZ2l5dXdiNnJtNjEzVkg2TjFYJTJGQUtNclcxMGpxYnJtSER5SGw4TWhqWTNHNnNIZDZQTzMxOGR2NmVpejA3Zlc5UDB2JTJCT0hpUHhjNm45ajU1MllkaDNZbVZ5N0Z0UDUlMkJ2dmZpdSUyRnclMkYlMkZCJTJGcGY1emVoWXYxYTZwVms1V0xuaCUyQkpaaE1MNnJtaVd2c0JZNnQxRm4wbjFOWTc3VHZwJTJGU2Y4V25panFOV25PRXNjakdRNFpCN09pZzBmVjdMZjAxcnI4cnFSMnRlejNYUGJCeDY3WHNZemF5eGpiTWw5bTM4JTJGOUolMkJsJTJGUyUyQnB6cnZVeE1XcXZxTlZ1SmtzeDM0MDJ6VzVvb3NiZFNjaWc3MjVPSGQ5cVk2diUyQmMyWk9MVDZObjg4eTNlNlgxdXlrOU5leHpuWWQlMkJQZGkyTWMxbFR4bDR6dHpuV3UzYktmV1paWGJzOVQwNmYweXBkWTZKMUhyJTJGVkg5V3J0cHN4Nm1NcUZEUyUyRjFXaXNGMzBYTmE1JTJCNTc3YmYwZXl6JTJGUlYlMkJxbkh3VzFSb3RERjZ4YXk0OVR2aWtzOU9ITkJBYzlnMnNmYzFtN1p1MiUyRm9HJTJGUXh2M1BTVDlMdzJkVGJsTSUyQjFXMXNkRGl4b00ydnUzZjA5MzZPdDNwT1pzdXJwJTJGUTVIJTJCaiUyRndhSmo0R1hmMDUyWmplcFJqYm1Pcnl3TnpOakh1bGg5TWVnNXpOJTJCMWxybiUyRjRSOWZwJTJGcEZZeGNIRDZleTZuSXRkU0dBT3RkbEZ3aGxoJTJGUnVIcE4zUHBidjhBNXhucWVtZ0ZPWjElMkZEeU1XNzdUMURJT1F5NHZyYTkxYnFDMDBlbiUyQmlZeCUyRjA2TnJxbmV2JTJGQUlmJTJGQUVqMVd4YUcyc3hLT285TXU2aUszMlVZZU9MSE1MM3ZMck5ycm11MyUyQmx2JTJGQVBSaTFjdnBsMVBVcVczTmZoNVZKMzQlMkJObU85WEV1ckh1JTJGVjd0MWpHTXNZZjBub1A5biUyRkFBTnF2OVE2Vzg0dzYzMGhuMmN1RmQxamNZR3lzalM2cXpMeG1pdTNGeWFkdjg5Nk5YJTJCbCUyQjJlcWhTU0JRMXUlMkZ3ZWQ2ejlYJTJCcnRGSkgxZFpqMWFnRU5zcVp1SUI5RVBzdmJrVzdXajZlUyUyRjZmcSUyQmolMkJqV09jYk53OGhucWROeHEzdGl6WllYT2E0VHk3ZmtXYm1OZCUyRk9iZm9mNFJkcFQxZnFIVXMxcmMlMkZMZmt0eVJVMnZHYTRiU0hOZVB0RkwzZWw2Vm1MbFZlalo3ZjBtJTJGMWNqJTJCWiUyQjBXYnZTZnFuMCUyRnExZVRqZFJJZGxWc3BzcWN4d0JxYzhQYmZXJTJCclgzNzYlMkZUdGYlMkZBS0gwYmNTNnYyV0pYcXVsajRZQ1hFRFpxdXJ4bjFkeFhkUm9zdXc3OGhuWGNSNWRTV3UyMk9yWTJicXNkbjAzWkZUdDkzMk96MlpXTDZsVkxQV29YUzE5SHp1cDlQcSUyQnNmVE1ZdHk4a243WlJYREN5NWhkVmIxREVyZSUyRjlOVTc5THZ4SGJMY2xqN0tmNXJJc3BYRTVtUG05SjZxJTJGTHFhODJZcm12ZlZKSHFVc2QlMkJneXFMYXRsbjBhJTJGMDNwUDhBV3hMbWVyViUyQjVqJTJCeiUyRlU3cXZSJTJCcDlDb3Q2UU5sTEpiWlE1eGRaWGI5TzFsNzNTOTlqbnUzJTJCcTclMkJlJTJGbkVtTjU3cXYxWDZiOWMlMkZxOTlveFdOeCUyQnVZeGN5eDdnOXJqYzJQWHhNNXQzNng2ZGptdDlIMXYwMkwlMkJpOUwlMkZDVldjejlWUHI1MW5wUFdYOUglMkJzeHV5OGJJdEZOb3lEdnRvdDl0SWNOJTJGMDZIZTMxNlAlMkZBRUtvJTJGd0FKOXA5aGJYVzE3bnRhQTk4YjNBUVhRSWJ1UDV5NDMlMkZHQjlRMmRmcCUyRmFYVFd0WjFpbG9FR0dqSVkzJTJGQVBlNyUyQmF5RyUyRjhBYWZKJTJGNnpiJTJCaSUyRlNVSlQyVEs2Nnh0cmFHQUFBQm9BRUFiVzhmeVZKZWNmVWJxUDhBakhQVjMxZFh4TWpKNmMlMkZheTI3TGFNZDFKYU5nc29EeFg5bzlyZjB6YVcyJTJCciUyRlBlcCUyRnBQUjBsUCUyRjlUMVZKSkpKU0ROTCUyRnNyOWdlWEdBQlcxcm5ha0Q2RjM2UCUyQnN1QXd1bVYlMkZXWE5yeEh2Y3ltcWgyUzdJcUxuUmElMkI3SmZqMlVQY0d0cWR2eWZWc3BaN0slMkZRJTJCeTElMkZvYVY2RmZqMDVGWnF2WUxLeVFTMTNFZzdtJTJGOUpLaW12SHByb3JFVjFOREdEd0RSdGFra0VnMk5DTm54RHFkR2IwTHJ1M3FGREhYNDFyTFRXR3hWZXlSNzYyNnRkVm1OYSUyRjFQM0xQV3I5aTJjbXpycFk1dGRCNmd6cEw3S3E3V0dYUHFxZjZEOEhJYzFnWjl1cG8lMkY3VCUyRnptVlglMkZBRFhxcjBick9GMCUyQjQxMzViV1ZGZ2MwNWtEMVdNUDA2YXJpMTdxMjVQODFaJTJCJTJGWCUyQmklMkJuYXVUeXNmcW5RZW9NNmgwNmw5MWVXMkg0andmMXVoZ2M3MExxM0RkVjFYR3htNzhkNyUyRndDZm8lMkZRWGZwSzdHSVJGWDRzMmZON3ZBZUdwUmp3azkzSXlPajVWRG5ONlU1JTJGVU1hJTJGZmxZbExHdUxtJTJCcXhucGZhZHJHMXRkazMwMlVmYXYlMkJzMmVuJTJGTnJRJTJCcmQ5JTJCTmxOZGZTJTJGRHVEWE15OGU3UjFibWpmSiUyRmtOaGw5TnY1OUt0T2VMYk1ETzZGa3RKdGUlMkIlMkZDc3RMaCUyQmhjYXhtNG1ZNW9jNXRMTXIwOFhLM3N0OUg3VFJkJTJGU3FQV1cxMWZBJTJGYSUyQk9PcGRPYzZqcWVNTmxsWWpjZHZ1ZGpXdDl6ZlZyM2I4ZCUyRiUyRm9tJTJGMUUlMkIyRjVqcGYxdTZEajlSeUxLY3F1M3BlYWYxckYxYUdoJTJCaHltMFhNcjkxVGZaa3NyJTJGbmNiJTJGU1dZOWJGVHdmdGZVT3BkUXdSWnZ4c0RMT0xoMnVCZXhyTEgyMVl6TExBSHY5SzNaWCUyRndBSCUyRk9MVXclMkJuZlUlMkY2eFZEQjZsZzQlMkZUdXRFRnJMYUclMkJnTFhEJTJGQzQyelkyeCUyRiUyQmx3N2YwMWY4dXI5T24lMkJyb3lQcWxsWmZUaGhNc3FCWmJsV2h4RmphaEZMTFdFJTJCMjdIWnYzc2JzcjlIOU42MyUyRkJqVzFMOUo5UERhJTJGNnVkY3glMkZVNlRhN2JTSDZ1eExUN1cwT2MwJTJGbzZIVDZtRmwxZnpYJTJCblY5bjFSNnYwN2JiaFp2MnphNHcxNDlLMFZrNmVua01lV1B1MmZ6bjh4VmIlMkZ3ZjBGMUdWaDRtZFNXM01EMnZiQWZBM0FIOXh5b1ltUlowbyUyRlk4OTQlMkJ6dEJOR1M3UWJSJTJCYThuNk96JTJGd0glMkZ0dEx5UmJ5UFVjWE1xenpuWTJOZmg5VHJiWmJra1Z5eHpRQnZ6bSUyQm0wNHZyN2YwZCUyRm8yZnJYJTJCRCUyRlRWMnJjJTJCcm1IMGJxSFQ4ZmNXJTJGYjJOZWQxRnJtV3NhWE9aTGZSTEgwMVclMkJwdTlMJTJCYVhVaUNKSEJXR2VnTTZkMUlkVTZXemJKaSUyRkZiQWFXdVB2ZFYlMkZWJTJGblBUU3RONlU0JTJGV2ZxUGs1amhSajJCb3JEck1YTE9qcW5nZTJtMXJOcm5WM2UxbG5wZjhiJTJGTzFVcm0lMkZxTGxaSDFhJTJCc2VUMDNJd0xhN3M5N0s4bkZyWSUyQng5ZnAlMkJwNk9manVwWjZWdlQzJTJCclkzSSUyRjBQNk95bjlGJTJCalhyS1NDRkpKSkpLVWtra2twJTJGJTJGOVgxVkpKSkpTa2tra2xLUU0zRHB6Y2QyUGJ1QWRCYTloTFhzY05XV1ZQYjlDeGprZEpKVHhIVmZxNE9sNWJjJTJCcTU1ZGx2TExxMkRheDFscHJZN0lGYlA1aTYzYjc3S2Y5SCUyQmslMkZRcnBQcSUyRmNMTUFWbGdydXBjV1hNNGR1Qmo5STB5N2YlMkYxZjAwdnJCMGhuVnVuUG8lMkJqa01tekZ0R2pxN1FDMXRsYjlOanZkJTJGcXhTNmRXTWowdXBIOUZmYlhzeXF3SWFiR3d4MzAlMkZmJTJCaWZXOW45UkhvcHd2ckJoNGVGMVYlMkJYa1UlMkZxbVpRUUxTQjZkZVl4d3V4N0hBZnBHdnM5TCUyRkIlMkY4SjZpdldWWjJkajR2VjhGZ2Zia1klMkZvNVdPOGhvc3JkcjMlMkJpNnQ3bnJlZld4OGIyaDIwaHpaRXdSOUZ3JTJGbElPTGc0JTJCSTY1Mk9DeHQ3dlVmV0Q3UTQlMkZTY3h2NW0lMkY4OUsxSXVqWWo4UHBXTGpXRGElMkJ1c0I3U1pJY2ZjNXU2WGZuRlczMXNlSWUwT0V6QkU2JTJGTlNTUVVwSkpKSlNra2trbEtTU1NTVXBKSkpKVCUyRkFQJTJGVzlWU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyRiUyRlpBRGhDU1UwRUlRQUFBQUFBVlFBQUFBRUJBQUFBRHdCQkFHUUFid0JpQUdVQUlBQlFBR2dBYndCMEFHOEFjd0JvQUc4QWNBQUFBQk1BUVFCa0FHOEFZZ0JsQUNBQVVBQm9BRzhBZEFCdkFITUFhQUJ2QUhBQUlBQkRBRk1BTWdBQUFBRUFPRUpKVFFRR0FBQUFBQUFIQUFJQUFBQUJBUUQlMkY0VGtqYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3THdBOFAzaHdZV05yWlhRZ1ltVm5hVzQ5SXUlMkI3dnlJZ2FXUTlJbGMxVFRCTmNFTmxhR2xJZW5KbFUzcE9WR042YTJNNVpDSSUyRlBnbzhlRHA0YlhCdFpYUmhJSGh0Ykc1ek9uZzlJbUZrYjJKbE9tNXpPbTFsZEdFdklpQjRPbmh0Y0hSclBTSXpMakV1TVMweE1USWlQZ29nSUNBOGNtUm1PbEpFUmlCNGJXeHVjenB5WkdZOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6RTVPVGt2TURJdk1qSXRjbVJtTFhONWJuUmhlQzF1Y3lNaVBnb2dJQ0FnSUNBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cDRZWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUklMkJDaUFnSUNBZ0lDQWdJRHg0WVhCTlRUcEViMk4xYldWdWRFbEVQblYxYVdRNlJUY3hPVFZGTlRZMU56TXpNVEZFUkRsRk56SkdRMEUyUWprd1FVWkJSalU4TDNoaGNFMU5Pa1J2WTNWdFpXNTBTVVElMkJDaUFnSUNBZ0lDQWdJRHg0WVhCTlRUcEpibk4wWVc1alpVbEVQblYxYVdRNlJUY3hPVFZGTlRjMU56TXpNVEZFUkRsRk56SkdRMEUyUWprd1FVWkJSalU4TDNoaGNFMU5Pa2x1YzNSaGJtTmxTVVElMkJDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0FnSUNBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cDRZWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThlR0Z3T2tOeVpXRjBaVVJoZEdVJTJCTWpBd09DMHdOeTB4T1ZReE5EbzFOem8wTVMwd05Ub3dNRHd2ZUdGd09rTnlaV0YwWlVSaGRHVSUyQkNpQWdJQ0FnSUNBZ0lEeDRZWEE2VFc5a2FXWjVSR0YwWlQ0eU1EQTRMVEEzTFRFNVZERTBPalU0T2pBMUxUQTFPakF3UEM5NFlYQTZUVzlrYVdaNVJHRjBaVDRLSUNBZ0lDQWdJQ0FnUEhoaGNEcE5aWFJoWkdGMFlVUmhkR1UlMkJNakF3T0Mwd055MHhPVlF4TkRvMU9Eb3dOUzB3TlRvd01Ed3ZlR0Z3T2sxbGRHRmtZWFJoUkdGMFpUNEtJQ0FnSUNBZ0lDQWdQSGhoY0RwRGNtVmhkRzl5Vkc5dmJENUJaRzlpWlNCUWFHOTBiM05vYjNBZ1ExTXlJRTFoWTJsdWRHOXphRHd2ZUdGd09rTnlaV0YwYjNKVWIyOXNQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZaR005SW1oMGRIQTZMeTl3ZFhKc0xtOXlaeTlrWXk5bGJHVnRaVzUwY3k4eExqRXZJajRLSUNBZ0lDQWdJQ0FnUEdSak9tWnZjbTFoZEQ1cGJXRm5aUzlxY0dWblBDOWtZenBtYjNKdFlYUSUyQkNpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwd2FHOTBiM05vYjNBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZjR2h2ZEc5emFHOXdMekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThjR2h2ZEc5emFHOXdPa052Ykc5eVRXOWtaVDR6UEM5d2FHOTBiM05vYjNBNlEyOXNiM0pOYjJSbFBnb2dJQ0FnSUNBZ0lDQThjR2h2ZEc5emFHOXdPa2hwYzNSdmNua3ZQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZkR2xtWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTBhV1ptTHpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFBjbWxsYm5SaGRHbHZiajR4UEM5MGFXWm1Pazl5YVdWdWRHRjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBZVW1WemIyeDFkR2x2Ymo0eE1EQXdNREF3THpFd01EQXdQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TURBd01EQXdMekV3TURBd1BDOTBhV1ptT2xsU1pYTnZiSFYwYVc5dVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwU1pYTnZiSFYwYVc5dVZXNXBkRDR5UEM5MGFXWm1PbEpsYzI5c2RYUnBiMjVWYm1sMFBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwT1lYUnBkbVZFYVdkbGMzUSUyQk1qVTJMREkxTnl3eU5UZ3NNalU1TERJMk1pd3lOelFzTWpjM0xESTROQ3cxTXpBc05UTXhMREk0TWl3eU9ETXNNamsyTERNd01Td3pNVGdzTXpFNUxEVXlPU3cxTXpJc016QTJMREkzTUN3eU56RXNNamN5TERNd05Td3pNVFVzTXpNME16STdRekExUVRFNU1EUkdSakF3UVVKRVF6QTFNVUpFUmtGR01ESXdORVZCTlRFOEwzUnBabVk2VG1GMGFYWmxSR2xuWlhOMFBnb2dJQ0FnSUNBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNlpYaHBaajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5bGVHbG1MekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThaWGhwWmpwUWFYaGxiRmhFYVcxbGJuTnBiMjQlMkJORFV3UEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGpNeU5Ud3ZaWGhwWmpwUWFYaGxiRmxFYVcxbGJuTnBiMjQlMkJDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVSUyQkxURThMMlY0YVdZNlEyOXNiM0pUY0dGalpUNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlRtRjBhWFpsUkdsblpYTjBQak0yT0RZMExEUXdPVFl3TERRd09UWXhMRE0zTVRJeExETTNNVEl5TERRd09UWXlMRFF3T1RZekxETTNOVEV3TERRd09UWTBMRE0yT0RZM0xETTJPRFk0TERNek5ETTBMRE16TkRNM0xETTBPRFV3TERNME9EVXlMRE0wT0RVMUxETTBPRFUyTERNM016YzNMRE0zTXpjNExETTNNemM1TERNM016Z3dMRE0zTXpneExETTNNemd5TERNM016Z3pMRE0zTXpnMExETTNNemcxTERNM016ZzJMRE0zTXprMkxEUXhORGd6TERReE5EZzBMRFF4TkRnMkxEUXhORGczTERReE5EZzRMRFF4TkRreUxEUXhORGt6TERReE5EazFMRFF4TnpJNExEUXhOekk1TERReE56TXdMRFF4T1RnMUxEUXhPVGcyTERReE9UZzNMRFF4T1RnNExEUXhPVGc1TERReE9Ua3dMRFF4T1RreExEUXhPVGt5TERReE9Ua3pMRFF4T1RrMExEUXhPVGsxTERReE9UazJMRFF5TURFMkxEQXNNaXcwTERVc05pdzNMRGdzT1N3eE1Dd3hNU3d4TWl3eE15d3hOQ3d4TlN3eE5pd3hOeXd4T0N3eU1Dd3lNaXd5TXl3eU5Dd3lOU3d5Tml3eU55d3lPQ3d6TUR0RU5EWXpOME5DT1VRME1VRXhNRUpCTjBWR05VVkNRMFJDTmpNeE9ETXlPVHd2WlhocFpqcE9ZWFJwZG1WRWFXZGxjM1ElMkJDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVklMkJDand2ZURwNGJYQnRaWFJoUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW84UDNod1lXTnJaWFFnWlc1a1BTSjNJajglMkIlMkYlMkI0QURrRmtiMkpsQUdTQUFBQUFBZiUyRmJBSVFBQ0FZR0JnWUdDQVlHQ0F3SUJ3Z01EZ29JQ0FvT0VBME5EZzBORUJFTURBd01EQXdSREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFSkNBZ0pDZ2tMQ1FrTERnc05DdzRSRGc0T0RoRVJEQXdNREF3UkVRd01EQXdNREJFTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TSUyRjhBQUVRZ0JSUUhDQXdFaUFBSVJBUU1SQWYlMkZkQUFRQUhmJTJGRUFhSUFBQUFIQVFFQkFRRUFBQUFBQUFBQUFBUUZBd0lHQVFBSENBa0tDd0VBQWdJREFRRUJBUUVBQUFBQUFBQUFBUUFDQXdRRkJnY0lDUW9MRUFBQ0FRTURBZ1FDQmdjREJBSUdBbk1CQWdNUkJBQUZJUkl4UVZFR0UyRWljWUVVTXBHaEJ4V3hRaVBCVXRIaE14Wmk4Q1J5Z3ZFbFF6UlRrcUt5WTNQQ05VUW5rNk96TmhkVVpIVEQwdUlJSm9NSkNoZ1poSlJGUnFTMFZ0TlZLQnJ5NCUyRlBFMU9UMFpYV0ZsYVcxeGRYbDlXWjJocGFtdHNiVzV2WTNSMWRuZDRlWHA3ZkgxJTJCZjNPRWhZYUhpSW1LaTR5TmpvJTJCQ2s1U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dm9SQUFJQ0FRSURCUVVFQlFZRUNBTURiUUVBQWhFREJDRVNNVUVGVVJOaElnWnhnWkV5b2JId0ZNSFI0U05DRlZKaWN2RXpKRFJEZ2hhU1V5V2lZN0xDQjNQU05lSkVneGRVa3dnSkNoZ1pKalpGR2lka2RGVTM4cU96d3lncDAlMkJQemhKU2t0TVRVNVBSbGRZV1ZwYlhGMWVYMVJsWm1kb2FXcHJiRzF1YjJSMWRuZDRlWHA3ZkgxJTJCZjNPRWhZYUhpSW1LaTR5TmpvJTJCRGxKV1dsNWlabXB1Y25aNmZrcU9rcGFhbnFLbXFxNnl0cnElMkJ2JTJGYUFBd0RBUUFDRVFNUkFEOEE3JTJGbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXJsSEkydXRYbjZXbHRuRkVTYjBSRlNwNDFXakQ1cTNMQ0Jhc2x6WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5RHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJFMnJqMEx1enZGN1B4ZnRVZjhBWFBMRG5DM1hJMGV3ZHBPa1RLNFAwOFQlMkZBTUsyRWMxVExOZ2F4bUU5cEZJRHklMkJFQW4zR3h3VGdWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWJTJGJTJGMGUlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhZVWVacGZSMGE0a3BVQXgxOWg2aTc0YjRYNjVDYmpSNzZGVjVGb0pLS2U1QzFHSVZMZER1R2h1WHMySUtPWDRnZnN2R2R4JTJGc2tLdGtpeUQ2YmN0SEhiWGdQSW1PQzRxT3BYajZFMWZmNE1tNE5keGtwYzc3MEJ2Tm16WkZMczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOUx2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZva0tDVDBHJTJGM1pnYWlvTlFlbUFOWnVoYVdMeUUwTGxZMSUyQmJHbjZzV3NwQThRQSUyRlolMkZVY1ZSV2JObXhWMmJObXhWMmJObXhWMk5aUXdLbm9kajlPT3pZcXdEVDRpaVBac2ElMkZWTG01c2o3SSUyRjc2TCUyQk9UWFRwalBaUVN0OXBrQWI1cjhKeUtYcWZVdk1PcElRT0Z4RkRmb1A4cUZ2VGwlMkY0UTVJTkRrckZQQWY4QWRVaEklMkZ3QlYlMkZpSDhjbkxlQVBjeEhNcHJtelpzZ3lkbXpac1ZkbXpac1ZkbXpac1ZkbXpZeVdSSW8ya2tZS2lpck1kZ0FNVlg1c2pUZWFHbDFDenNiU0FPTHVYMHc3azE0S0N6eUFEJTJCVVpKQmlyZWJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWJTJGOVB2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZvNENYVUZhOWUwQ2JKUldrciUyQjBSV2xNSFpFSjVXdFBNdHpFNSUyQkdZSktueUswJTJGNGt1RUMxWmVNMklXMG9rakZUOFM3SCUyQnVMNEZZejUybU1XbjJ0RFRsY3BYNkZiREhSNWVjQ0glMkJaZXZ5d2wlMkZNTThkSnRuN0xkSiUyQkt2Z3J5OWNjck9KNjlLVnc5RTlHUzVzMmJBaDJiTm14VjJiTm14VjJiTm14VmkzbWlGVTFMU2J4dnNTdEpZekglMkZKblNpJTJGOEFEWXBvRXpMY3hxMVQ2OEZHciUyRnZ5RThHcmdqemRDMG1oWEVzWSUyRmUycFM1aSUyRjFvbURmOFJ3dHRKUkhkcmNEYU5iaFpWSTZlbmRJRyUyRjRtY25IZUpDRHpETDgyYk5rRXV6WnMyS3V6WnMyS3V6WnMyS3Vya1o4NDNaaHM0YlZUUXp2VnFmeXJ2ZzN6SE5QYjJVTXNMdEdCUEdKU3BJcWpFcVJVYjljaCUyQnZTU3ZwMEpsY3ZKQ0x5TXV4SmI0Sk52aSUyRjFTdUVCVnZrYVg5TCUyQlpibThTdjFmVGJmMFk2JTJGNzhsUHhIJTJGZ0Z6cGVSdnlQYldjWGx5eXViV0JJWHVveEpPVUc3dUtqazUlMkZhT1NTb3hQTlhaczJiQXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkYlMkZVNyUyRm16WnNWUTJvc3lXTTdvM0ZsUWtNT3hHUHRaaFBCSEtDRHlVRTA4ZSUyQk0xQmVkamNyNHhQVCUyRmdUaFY1Y3ZCSmJwR2VyZ0VmTURjWWEyUGtxZlpzMmJBcnMyYk5pcnMyYk5pcnMyYk5pcnNoZm5SR3RiN1Q5VFg3TGNvSkQycUR6U3Yzdmswd2w4MVdEYWpvZHpER0t6Umoxb1IzNVIlMkZGVDZSdGhITlhhVmNyS3NVdGZ0RGkzMDRkWno3eXJxUHJRQ0luY2RNbnNFbnFSSyUyRmNqZjU0eVZqUDVnd3RKNWNrY0QlMkI1bWlrJTJCaXZIJTJGQUkzd0Q1Um5FdHB3cldndzk4M1JHYnkxcWlxS2xZR2tBJTJGNHglMkZ2UCUyQk5jaG5rZTVCSVVHb1BRJTJGUEVKSEo2WEczSkZieEFPUHhPQTFpWDdzVXdJZG16WnNWZG16WnNWZG16WnNWVWJxQmJxMm10bSUyQnpNalJuNU1LWkRMUDRyQzJVVnE5cVlqN1NXc2hXbiUyQnR4T1RuSVZHNHR0V3ZkTmFpaUs3RnhHRHRXRzZUaSUyRndEd011U2h6UkxreSUyQjFsRTl2Rk1QOEFkaUszM2dZc2NLdEJtRFdodHElMkZIYk95TXA2OFNlU0g1VU9HcHlKNXBZZGUzbW9XUG1XNUt6SDBwSW8yV050MEEzV3YwdHMyRDczeko2Rmd6eHFxWHBLcEhHOWVETXg3RVlYZWQ0NVZlQzRnUENkWXlxdWEwSTVxNVZnT3YyY0FXOHNXbzJRTXFod3dveUhjVnlRRmhWT0x6dnJOcmRmNmZGSExGWDRrVmVCSCUyQnIxJTJGNGJKbHAlMkJ0MkdxV3JYRm5JQ3lLV2VKdG5VZ1YzWE9QNjdxRmphRkxIVXJwcmVjeSUyQmxaYWp4UERtTjFqbjhEdjhBYSUyQnklMkJJYVhyY2xyZHRaMzROcmZSMVVTb2ZnZW8ySzA2YyUyRjhBZ2NCQ1hyJTJGbHZYUnJkbnprNHJjb1NKRlhZZk1ibkR6T1YlMkJUcjgyZXFBT1FJcGFCcTdBVjJyJTJCT2RUcmlSU0VwOHo4Um9OOUk1QVdKUFY1SFlEMHlIciUyQkdRZzNOdHExbGNMYXp4M0NpWnZpaVlPS3pRbzlLamI3WXpvV3FSZXZwdDVBT3NrRWlqNWxDT21jNjAlMkJXQ0swajlPTllvNUlZcCUyQkVhaFFXQmVOalJhZkVjTVZUdlRiJTJCODBmeUhaM0Z1Z0U5dlNPUkpCVXFQVlpXJTJCRUh3M3lWYVhlQyUyRnNvYnVsR2tYNDFIUU1ObUglMkZCWnpDJTJCMWlUVGJhZFpVa2p0Smp6a1FxU0txTm01ZnNkTVBmeXIxJTJGUmRUOHZyYTJFNU41QzhrbDNiU01US3BrY3R6JTJCTDdTUDlwZU9BN2ZGa0lrZ2tDd09ma3o3TmxBMXk4REYyYk5teFYyYkVKTHkxaW5qdHBKVldlYXZwUkVqazNIYzhWNjR2aXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5WHYlMkJiTm14VnBsRHFVYmNNS0g1SElQb2tqV3NzdHF4JTJCSzJsWlBmNFdwazV5RjZuRjlSOHhzd0hHTzhRU2olMkZBRmg4RCUyRnFya29jNlZtU01IVU9PakFFZlRqc0FhWk1YaE1SUHhSbllmNUo2WVB5SlYyYk5teFYyYk5teFZRdXpPdHU3MjlQVlVjbEJGYTA3VTk4RGFmcXNGNmk5RWtJNmVQeXd3eUY2dkcyaTZvSlJVV2w2eFpDUDJKT3JyJTJGc3Z0TGhHNnMweWlLNFg2WmZpNFFJN1ZiOWx2NWglMkZYREhyZ1Y1YzhCMEx6TGMyUSUyQkdGMjlXRHc0U2ZGJTJGd3AlMkJIT2c2Wk1IaTRqMllmVGtaJTJGTUd3cEZhYXpHRHl0bTlHWWolMkZBSDI1JTJCRW4lMkZBRlglMkZBT0o0Tjh1WHdsaWljbnBzMzA1TG1GWkRld3JjMmR4YnQwbGllTnZreWxjNDUlMkJYMTBVQ1F6SGpMQVRFNFAlMkJRZU5jNkw1NWU1aTBKNTdXVm9uaWtSbVpEU3E3amYyeUIyT3AlMkZWWW9yMiUyRndCTmprdHBBR2p2N1p2VSUyQklub3k4VmFvJTJGYTQ0eENROWFzMjVSVkJxS25mQkdSYnk5ckJFc2xqY0lZMGFRJTJCZzVGQ0NRRDZiajlsc2xHQWlrTjVzMmJBcnMyYkd5T0kwYVJ1aUFzZm9GY1ZTJTJCJTJGMXEyc0psdHlyU3l0dXlwJTJCeURzQzN6d3hCcUFmSGZJJTJGb2RtdDJ6NnBjam5KSzVkQWV4UFQlMkZnUmtoeFYyYzc4Mm1TeTgyV1VnTklkVWhOczRQVG1sWFElMkZ3REJET2laQXZ6TGI2bkhwT3JsRmtqczdsV2RHOXl2eFZHJTJGd2l1R0ozVXAzWVRKRnI3b3AlMkJDOHQxbGpIanhvZHY4QVl0a2l5SGJ4eDZYZkt4JTJGY1hCaWxKMyUyQkFzVlVWOEZSbHlZQTRaODBEa2tQbXEzRXRsSEpTcFIlMkJKUGdIQkg2NlpCdEl1ZnF0OU5wOHBBTEhuRXBPNXAxb002WHEwUDFqVHJpUG9lUElmTmR4bkx0WnRyR1psdUJjRzN2RiUyQkZKWXVKZng0MElJeEhKS3p6YjVldDladFpZcDFMd3lnY2dQdEt5JTJGWmtUJTJGS1d1UktLQ09DNnROSDFDYmxjV2lJTERVV0hINndnNnd5RGVqeDlGdzRzZk9NakVCWTViaUgxSGdMeThWWXVsT2ZKViUyQnkzOHE0bmRIOUxsTDIxOUs0aWlsSHJXekx4bGhJNlNnRTElMkYyU25GS28wQ3p4eTI4ek1xY1N6c3BJWUJQajJJJTJGMWNkJTJGeXRuVlpkTlEyRDFJJTJCRVNNb1B3JTJGek1mdGRNRzIwVFNReXlibG1qZW56b2M0VFk2bGQ2ZGR5S3dNVXNiRlpvSHFOd2QxS25HWFJYczluNSUyRnY3bGc5OEdsV2hNandrMUElMkZtNGslMkZGN2pEU3dTUFVMVFRKSTNQR0JwaEdOd0c0T0hWVyUyQmduT05YJTJCc1dGcERGUGFTU0pjVEVTRzNUY1JsZjJ1UkslMkZhenElMkJrUjNhZVQ3ZSUyQmpuWDZ5b1c4aWJodCUyQjlpOVRnJTJCJTJGUTk4UVZaSHFzdHV0b3d1U1BTZFNwVjkxSVBWV3ppZjFpOTh0JTJCWjdtNDBGamJTV1VyTkNxRW1rZXg0RUg3YWNUOWx2MmM2bG9ubWJUdk1VVFdkd2dpdW1Xa3RyTFFoZ2U2SDlvZjZ1Ukx6ZDVadXJEVlA4UTJLZXRZRlVXN2pYZVNLaSUyQm0waEg3VVpIN1g3T0NZNGcyWU0wc01yanZleEI1U0hjWHNua1B6M1klMkJjZFBxS1E2bEFCOWJ0YSUyRjhsSTY5WTIlMkY0WEplRFhQSmx2UGU2SnFNZXE2Tk1ZTHVFODQyVG82bnRUb3l1djJrJTJGYXowSjVFOCUyQjJIbkd5STJ0OVZnQSUyQnQyWlAwZXBIJTJGTkVmJTJCRXlFU2VVdWZmM3RtYkZBeDhiQjlIOFVmNHNaOCUyRjZQODJUTU1MTmIxaURSclEzRXBCa2tQQzNqN3M1JTJGd0NOViUyQjAlMkJHVmM0bjVtOHlmcG56SmNzciUyRjZIWXNMZTIzMlBCdjNqMCUyRnkzJTJCSCUyRlk1SnhrTG91clgxNzUlMkZ0YjI4bWFTWnJsb3FzZGxRMVRnbyUyRlpVRE83NTUlMkI4dXhsdlBjTUk2aTZMQWUyelo2QndsUzdObXpZRmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmYlMkZXNyUyRm16WnNWZGtiODNXNSUyQnJXMSUyQmclMkJLMWtBYyUyRjVEJTJGQ2YlMkJHNDVKTUM2amFyZTJGeGFFZjNxTW8lMkJkUGglMkY0YkNOaXFWNlZPT2NUViUyQkdSZUIzNyUyRmFYOVdIb3lGYUpNejIzQnFpV0U3anVDaCUyRnN5YVJzSFJYSFJnQ1Bwd3k1MmdMczJiTmtVdXpaczJLdXd1MXJTNDlXMDZXemI0WEk1UXY4QXl1dTZuREhNZW1Ldk9ORTFLV0dWckc3ckhQQ3hSZ2Vxc3BwazdzYjBYQzhXMmxVYmp4SGlNaG5ublRIdExtUFhyWmZnYWtkMVRzUjlpUSUyRlA3TFl0b21xJTJGV0kwSWFreWJvZjRINTVMbUZaZHFObEZxTmpjV013cWs2RkQ4ejlrJTJGUWM1MTVYdVpiVzRsMCUyQjUlMkJHV0Z6RTZuJTJCWlRUT2xXMDYzRVFrWFk5R1h3UGhuTyUyRk5zUzZUNXF0Ym9mQkhxYW5pZXhtaSUyQjJ2JTJCc1U0diUyRmxmRmdIY3JQVEZiYW5aTmIzY2F5d3lBcExFM1FqM3pqdXR3VyUyRmxqekJjNlBwNmZWOUpIcHNMTlNTZ1IxSElvclYzVnZpenEyalhRayUyQkFuZGxCQTl4bk52elJpV1B6SkJKV25yMmdKUCUyRkdOeXY4QUhBZGlrSjNZR2YwbzVwWkRJYm9TRDFHSko5YUFnaDYlMkY1YVV6b0ZuTjlZdFlaNmdtUkZZMDZWSTN6bFhrJTJGVkk1YmkyaG5sQmdkQnV4RkZhaGhmcjByU05zbkhsWFU0Skk1TkphU3QxYXZJUW0lMkI4UmFxdUQwSSUyQkxqa3BiZ0laSm16WnNpcnNEYWdDMWpjcXZVeE9CJTJGd0p3VGpYVU1ySzMyV0JCJTJCV0twZm9mRTZYYjhmNWQlMkZuaGprTVBtdlIlMkZLbHJKQnFreEJTVmtqQzBQSURwVGZJMTVzJTJGTU5idTNqYlI1cGxzWlZwNjlzd1JpOU4wZVNqTW5IJTJCUmNWcG02NjljV1d0WEduYXR3amdLbWEydVBzajB4JTJGTlh3JTJGYXlPZm1MciUyQmhYM2wlMkJQVFlya1hNJTJCcEd0bTF1UFVVY2VYN3lSeDhLTHR4JTJGMXM1eG9OJTJGZWZwVnI2QzhtdVZWZlV1TE84a01yRUllVGVtN2ZhUms1SXk1RmRUdVo5QjE2OXRyR1p2cWtjNWVGRDhTbUp6elVjVHRzcmNlV0h6VFQzZlJKdjBwNVVadnRPWVlyZ0N1JTJGSlY0UCUyRndBTkhuUHJqODN2TTJsWDl6cFdvQkpZSW5hSjU0MHBPaTElMkJHUlFEeGY0Y2xuNVozcVQyc3RqV3JLMGlleEVnRTYwJTJGMlhMT1VmbUhZTlplWmJoV1A5NEF5biUyRlYlMkJEJTJGalZjbExsYkVkUW45NTVxMXdUaVUzaHVMYWRlUUNzZlNsak85Vk5ldiUyRkFBMGJZSHViMVo3VjV5V2toSHhwY1ZISk53R2l1UDhBS1N0VmslMkZieUdhZnFMUXh5YWZPNVMybFBKV1VBbUdRJTJGN3VpQjhmOEFkMFglMkI3RiUyRnk4Q3RkNmpwbDNMYjN2JTJCa1FUcHhuaXFURGNRbjdMb1IlMkZ3VWIlMkZBTERaQ3l5ZWtXbDlaeWFGTFBlbFpHTjJ0cURFdFpKSGVuRXM2N2NrcFZYd3ExYlU3RzFpS1d2cXRjQ1I0YmtraEZZeCUyRkNIWGh2dlg0OEMlMkJVN0gxU2JLM2s5V3lhNWh2NEhjaFNCRjhGeEJMMldlT0oxayUyRjRzOVA0Y3UlMkYwaiUyRmMxRnBobUZ4UExlT2haQnhBaUw4anQ0MCUyRmE1WWVnVjZQcHJ2THBjRThzZnBUTmJoM1FWb0dLMTJ6bHVvUTJQblppaDQyZm1XSVZ0NXo4TWQ0cTlJNVA1SjE3WjJBOFlyV1ZsJTJCRVJvYUR3b052dXBuTHRiMDJMelJFZFIwaEJiYTdiVmU0dEVQRlp3cHI2c0glMkZBQmIlMkZBSk9Ta2dQTkxxR2FHN2UzdjQyaXVvVHdsaWNVSUs5aU03NTVLbkdvZVQ3Wlg2bTFDSCUyRllTTkNmJTJCRk9jdG51SWZOa1NXZXFFV3V1MjQ5T0M4Y2NmVzQ3ZWxjZCUyQmYlMkJWblElMkZ5eVM1dDlEazA2N2pNVnphU1hNTEszaFJKbHA0cjlyamtRbDVQYmFsY2FSZCUyQmxJN1Bid3lzSTVsTkpJaXJVJTJCSCUyRm1uT3VlViUyRk9VZW8lMkJuWTZoSXB1V1g5eFB0d25VJTJGaHolMkZuVE9QZVk0elklMkJZTlRncFZCY1NWUTlDckhrUDE0R3NiOXJGZ1JXU3pZMUsxJTJCS05oJTJCMHAlMkZaY1kyUWRsZXYlMkJaJTJGTEt4SzE5cGNkWUJVeldxZFl4MUx3aiUyQlQlMkJhUDhBWiUyRlp5SFc5eGU2WmZRNnBwazdRWHNCRFJUSWV2c1IlMkIwcCUyRmx5WSUyQlVQTlIxS0pMSzVsRDNLclczbTZlc2c2N2Y3OVQ5cE1EJTJCWnRDalRucVZpbElXJTJCS2VGUnNoUFdWQVAyUDklMkJKJTJCemtaUkIzRFBGbGxqbHhSUHo1RWR4OG1jdyUyRm0zYVh2a3pVTHlVQzMxMjJqRVQyb05BOGtoOU5aWVQlMkZKdnpiJTJCVE9aYWJJaG5Xa2dhT1Fjd3hPNTc3JTJGNWZqaEtJWW5kb1p2Z2FVRDA1djVTTjFKJTJGeUc2WUkwUlo0dFMlMkJveUtRUzFIVHdZSHNmZkFMcmRPUXdNJTJCTEdPRUhmaHU2UFd2SjZmNUZzZnJYbnFXOEslMkZEQkVaRDRjbUFWZjFaMmZPU2VTTG1mVDlSckhFV2x2RFNaYVZhZ05SMCUyQnp0blc4bVdzdXpaczJCRHMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlmdiUyQmJObXhWMlk1c280cXc2V0w5SGVZTGlMcEZjVW5qSFFmSDlyJTJGaHVXU2JUbkJnTVhlSml2MEg0bCUyRkE0VCUyQmE0ZlRXMDFGUnZESjZjaEElMkZZZnBYNU1NR2FYY0JtSHhiU3JzQ2RpNiUyRjJmOFJ5WjNqN2tkVTR6WnpyVGZPMnFRYTNlYUhya2F4NmhhdXglMkJyOUZrZ0olMkZkVDI3OTBaUCUyQkd5ZFdXb1d0JTJCbkszZXJBZkhHZG1YNXJrU0Vvdk5tMnlpUUFTVFFEcWNDdDVzTDVkWjA2S285WVNNTnFSQXY4QWl1Mkl2NWkwcUplY3NyS28lMkZ3QWtrJTJGY3RUaG85eW82OWh0YmkyZTJ2QXBnbUhCMWNnQTElMkJmZk9ZWCUyQm5YZmxYVWdoSmV6a05iYWJ4SDhqSCUyQmRjUFBOODJsNjViMmoyMTNETjlXZG1tdGVmQ1JrZGVKYU5TVmIxSSUyRnRZWFdNOGNWazJqYXZNOTVwVXY5emNQdkxCJTJGSTNMdnd3aElUMngxMktDQnJ4anlqUlMwNmpyeEc1WUQlMkJaY3J6enBrWG1qeWhMUHB6Q1NhRlZ2OEFUWm96dVhqSFA0R0glMkIlMkZFNUprVW1qdTlCdWphVHNKWUhIS0M0RzZTeG45ciUyRkFKcXdKSDVnMWZ5akRhdzJLcmNhRTB6U05FMjdSaVFtdHVYUFNKNiUyRnVXJTJGWWt4STZoVWc4aWE5cXVsYXRIZTNzMGs4RGd4R0taeXdCayUyQnkzJTJCVGtuJTJGTjYzYTh0dEcxYTNySEwlMkI5aElCJTJCSWRHSyUyRjhBQkE1RE5iUzB0TCUyQjRrc0pPZW56RVRXcmpZaU9UNGdqRDlsNFdxakwlMkZBSk9UVFU5WHROYzhyNmREUDhFOHJjNGlTUDcxUndrVGZjUCUyRkFMc1glMkJmbGdxMDl6RnZLZW9UTXdWMk5lQ3NCMEJhTnFmOGE1TjladTU5SzgzVzJwV2IlMkJuOWNqQm8yNFpYVU54SSUyRjFseUNXc0w2Zk5iM0xMeGlkMjR0U2dJTkE5UHV5YjY3cGQlMkZyMmthUGM2YnhONWI4b3dXWUtBWVclMkJHcFA4QWs0UnlRVTh1Zk9GN0pMRDlYUkxhQWo5NlpQaVl2NEE5QW4lMkZEWU9mejlvRWJ0QTBralhTcUclMkJycWg1TnRVJTJCa1c0aVFMJTJGazV5SyUyRml1TmFnakVjcFRVN1JqNllxYVNBYnRHMyUyRkZpbjRvbSUyRmElMkJ4aFhjR2VXeGxEZ3BQYmZ2VUZhUERLcEZYaUklMkZZayUyRmslMkZtd0ZYcjBuNWhmWEJKRnBWdHhtQzg0ak9hODElMkZhS3F2N1NmeTVHTDd6SnEycndYRmhxRjQwQWxXaVNRZkFFUFZXJTJCSDdTZnolMkZ3Q1JrVGwxZExXM3Q3eGk4MTA4QzNnOUVCQXJDbkk4anRWdnROUmNSMXp6VGRKY1F2WXdSVzd5Mjhkd3pGZlVibEl2STA1ZkFvJTJGMk9HeFN0M3pTVzlMUFhJVE1sQ2ppdXpvZnN5UnQyWWZzUGtkMGlhYlR0UWtzcDFacmE0VTg0WDZTSiUyQnc0JTJGd0FvRDdFaTVkenFWN0xGQ3Q3S1puVkFZJTJCUnF5ZzlhaiUyQlglMkJUSmRvdXVhSHJsdGIyUG1DTmZya0ttTzJ2S2NUJTJGa2dzUDJ2NWNqdGFwZm8wSnQlMkZNbGxGR0hsdFp2VmVLNHB0d1dOaTZ5VSUyQnpJdlJsd20xbVVhcnBOdEpIRVd1dE9rdUliaDBGU2Jma0dpWjIlMkZiNE14SCUyQnBrNnVaTk04c2FkZHl3U3ROSzYwNXRzS25ZY0YlMkZtYk9aeTNzMm5XYUxFJTJGRzRlNCUyQnNLNDNIRUx4b3dPekslMkZMNGx4NWZGV2IlMkZscHJQMVRXTFFNYUxNRlJoJTJGbFJ0eHIlMkZ3TFluJTJCZk5qTHAlMkJwMldwd2doV0x4dWYyU0dvUlglMkZBSURJOXBlbzJrTXRqZldRTVVpM0pNOXUyNGo1clQ0RCUyQjFHNXF5ZnlmWXpwJTJGd0NjZGltciUyQlVyYSUyRkclMkZ3cElTT29JcFhKRGNJUE40SERjUjNTY2wySTZxZW9PR052Y1F5dyUyRm8lMkIlMkZKV0dwTnZQMWFCeiUyQjBQR0Z2OEFka2YlMkJ6WEl4U2F5bTJOQ09oN01NTllMaExsT1M3SDlwZkE1RlUzMHZVTlE4dWFxaklxc2FxSGlPOFVzWjZFZUtzcmZBJTJCUzN5VXI2cDVpdWRUbDJTMVJ2UlRjaFRLZUNnViUyRmxUbGtPc3ZVdmVPbjhWa2RhdGF1eG95TiUyRklEJTJCMHIlMkZ3QW1UZnlZSHNyblRkUGFzYzElMkZOY3pYTVpBcndoVDA0ZzMlMkZBRDA1WWptbDZGZGl0bGNtdSUyRnB2WCUyRmdUbks1YlM0c3AxbUR0RklENmtMaW9QWFpnYzYxTkdUQk5ING8xUHBVaklwTmJ5WDBVbHZjdyUyRlY5VHN0N2kySXFIV245OUVQMmtaZjd4RiUyRjE4bk1YMXBBTk1SMVRUWWZNa1J1WVlsdCUyRk1FWTVFZllXN1VmdEwlMkZ3QVhqRGY4dSUyRk1Gek04bW5YNk1KTFdSRmtNaDR5aXF0R1VZVSUyRlpQODJJelclMkZINERWUUclMkZkdVB0UlAxRkclMkZsYjlsc0c2WkpESmZQY3ZHSTlXQ29KWndQaG1SR0hGMlglMkZmaTRBUDJwZWFmbUJFOEhtcThMZ0FUQ09WYWVCVUwlMkJ0Y2phdVVQaXA2cWUlMkJkSjgyeDI5M1BiMkd0eUw5Wm1XUm9MNVFBVVpaR1FLNDdwOW5PZDM5aGRhWmN0YVhTY1hYZFNOMVlIb3ludXB3RkNMMHpVWDB5NFNWR2Y2dVdEcXliUEc0Nk9uJTJCV3YlMkZBQTY1Mm5SdFklMkZUZHFKYmZqTGRxbks0Z2pwU1ZlbjFpQmY1RyUyRndCM1JmN3FmT0N4eWNhcXdxamZhSDhjayUyRmslMkI2MUsxMUFDMWtaWUlUNmdtQiUyQnh5Mm9QJTJCTWklMkZDNmY3TEVHbFpDYkJyJTJCJTJCdSUyRnFxcEJDalA2Y2J0eEh3bjRsanJYJTJGZ2NrT2oyRU1jQzZsSzZ5VFJLWW1rSW9ZbDZnRTl4VDdMNUhoY1RKcU0xakpDRWpqUVNRc0s3cVQzcmdpJTJGdUo3UFRES1EzMVM1ZjAzWlBpM1NyZkdQNVJpS0c2YmVqJTJCUVB6QjBDRyUyQnVOSHZCOVZlWng5V3ZaS0JYN2NDZjJQOGpPdmdoZ0dVMUIzQkhmUEhhUXJmdUV0M0RIa0FKYWtLaFA4QU8zN0ElMkJlZFg4aSUyQllQT2VuNmROcDJxSzV0NEpGanM1SENseW9OSmZUZGllVWFMOFMlMkZ3RENaRWNSTkVjJTJCcmZPT0tXTVRnZUdVYUVvSGZpJTJGcFJQOEF1bnQyQWIzVW9yV3FBYzVRSzhlZ0h6T1BodW9UWXJkZXNKWWduSnB0Z0RUcWR1JTJGdGtUMUM5WG5MUEl3b2ZqTGR1SjZmaGtnTGNZc2kwdlZSZlNTUlNVV1JkMVVlR0dneU4lMkJWckNTa21yWEtsWG5IQzNSdHVNWFhsVCUyQmFUSktNVFY3SmRtelpzQ3V6WnMyS3V6WnMyS3V6WnMyS3YlMkY5RHYlMkJiTm14VjJiTm14VkI2cmFmWHRPdUxYdkloNEh3WWJyJTJCT1JiUkwlMkJzTVRNYVNRc09TbnJzZUxaTkRuSWRmWFh0UDh6WHRuWkdDMnRKV0VzVXo4cEg0eUFFOFkxNHJzM0pmaWJKUlBNS3lmOEFNWHllM21LeWgxTFRIJTJCcmExcHg5UzB1bEZTVjZtTndQdFJuSWI1ZTh3WGx3JTJGd0NqOVZSOU4xdTEyUEdvRDl2VWdmcEpHJTJGN1VlZE44dWFwY1hzSDFlN0MlMkJyQWklMkZ2VjZPUHMxSyUyRnN0dGdMelA1WXNyJTJCM056SEZ4bWpQTWxOaiUyRnJMVGRXSHRpTnRsVTlJODJzeGExMWxBc3NmMmJtTWZBOVBGZjJHJTJGNFhJdDUwMXk4MVN5a0VFalJRUk1HRWFNVjVMMCUyQktuMnNxNGtlM2o5TzRhc3V5TE5Tbk1kdVglMkJWJTJGeExDZlZaJTJGUzB1OGNEa1ZoWWhmR2d4b2RHUUREWlBNY3VsdXNUenB3cnlNVDdtbmVoJTJCMHVUVk5MMWUlMkJzb2IxdExtbXRKbEVrYkZXNUZHRlI4TmZVemkyaVElMkZYTlh0TGpVQVhXZTZoRTNMJTJCUXlLSEclMkZiam5xenpQNW9rMEgwYmF4Z1dWeW9kaTVJUlU2S0J4NzRBU3J6T3pzZkwxdGNINjlwcE10ZHhNMGg0JTJGODgzT1MyR0xTNzIzOUsxcEdwR3dqJTJCRXIlMkZBTEhwaFZjZWNCY3lyYzZ2QkZkYWJMJTJCN2xWMFVQYnQxMktEbnglMkZsWVlHdnJXS3dQMW5UcDNraXJzVDBCcFdnY2RmOEFaREpnJTJGRmpTYW5TYjh4QzJ1cnNYdHBHNWt0N2RrVlJHYVU0ZyUyRkVUeSUyRndCYkl6YzYweFNleWxzZ3BoREplYWZOdElZJTJCbnFSRWZDeWdZY1dQbVYxNHgzcWtxUUR6QW80WCUyQllyJTJCME1FNmglMkJpZFpaSW1qTTkwRkxRelFqNDBCRk5uMiUyQjFYN0RZa2QyeWklMkJySE5JaDh1WGJMcDd5TEpkVG9aYlpKRFgxRVUwTk9YeENlTDl0ZiUyQko0UGhiVEx5YTU4c1hxcXQzRW9LbFY5TVNvUlVNbjhzc2Y3WEglMkZYeUQlMkJjZktGem9XblJhdEZxVVVVJTJCblNHU0dBc0JjRlhaYUZlSEpWWkR1MkhPbjNTZWU5S3QxJTJCc0N4OHgyeSUyQnBhWGFiQjJUeEg4cFAyMSUyRlp3QW51M1ZRdVYxQ0MyaVc5Y3glMkZ3Q2tTMjhrTXRBNWRLTEhMMSUyQjAwVEp5WlBoayUyQjFuUyUyRktONTlaMEdTTm5vNnlJNmUxVjR2JTJGd3k1ejlwdjhZV2o2SHJjZjZQODM2RVdtaWlIU2ZpdjJveCUyQjJrd0g3UDJmdExrMjh1eHJiZVhZTGhZWFY3Z016eGtFMElxUGlxTnElMkZ5NGdiJTJCU2s3UE5kWDFtJTJCSG1xYXl0SiUyRlR0VGR4JTJGQkdvU3U2c3dacWNqOFliQ25SbU05N2RyS3hLWGNzbHU3dFhiMSUyQlNCcSUyRndDU3paSzljMDZ4dU5VdXRTdGtCbHM1SUZrQUlBTW9IcVVVZnpOUmtiQ1BXNVhzNzByWmNWdEwwJTJCdENvQUZWYzFvSyUyRndBcm5pMlJJU2hkRDByVTlaMGcyVU5XMURSNUpMRyUyQmlyUmxRdVhobXAxWlA3Mk0lMkZ3Q3BoNzVnMEsyc3JhMjFHOGNoNWJhR0pVcHQ2eUFSdXZMNk9XRVFrMWVKcnE5czU1WUx4Qnp1R2hKRWpyM0xLdnhTcXY3V0lTYW5xMm9RUlhHcnl2ZDJNdFZodVNROGFOUWNoOE95TmpzcUVsaEsxaGJjciUyRmN2M0slMkZ5ViUyRnljUlNRQm1VaWlmc2ZRTTZGcGZsalNiclIwbUN5M0VqRGxESXpOOXNHbnBoVSUyRlolMkZsYklycW5sJTJGNmpNM0NiMVZScU9vVTgwNzhYb09IUElTSWlRQ2Q1Y2tnRTN0eVM0U3RLNnhTeSUyRkRKJTJCN0hxc2VPJTJGWVZ3MFcydGhhdHAxMGhlMmI3WUgyMWNmWmxqUDg2ZjhBRCUyRll4TzR0Yk80c280STdaVXZHNUxwbDNQc3NwclV3czM5MkpEJTJGdXQlMkZ3Q2JBT2g2c0x1VTZWcVlNRjRoS1J1Mng1RHJGSUQwWVk3cnNoNHRNbjA2JTJGa3NwanpqbmlhUzFuUWZESUUlMkJKV1h3ZGFmRXY3T2QwdWdubUw4dG1ZaXBXRU9CMW9HV3AlMkZ3Q0g1Wnk0aG9UOVd1VTVCVHpqN0ZIcCUyRmVJZTMlMkJYJTJGQURyblIlMkZ5c3ZSZmFIZWFKSXdaNFJKR284UUR6USUyRjhBQXk1T1BWQmZQTnhicE1waWZZcWFCdTRJd0ZZV2x4OWZFSUpVN2xtSDdTJTJGODNaSjllMHg3Szl1blJnOGF6TWtvSFdKeVNWUiUyRjlZSDRXJTJCemolMkZLdHZGZGF4QkRMUUt6QVZPMjQzRyUyRjhBcllQSlVYYjJOdkRadGR5V3hlM0I0bWVDUSUyQnRHMzdKa2piOWxhZmFYSFJYbDlxMnI2ZXRuV0o3WXh4MjhoJTJCMVVOeU1qdCUyRmxING15WDZscDFwb1BtNTdDSUZMRzhqaWtDc0tpc3FxWFduY2MyJTJCemhMWlcwT20zNWhDdUxpQ2VTZ0lIRlk2N0tUOXJsNFlhVjYzSXdNVlNha2cxcHQyN2VHUnV6dnJUV0lMZFlibmxjSVdYU2RRYzhXNXBYbHA5MSUyRkxJUDkxTSUyRjk0bUc5dGNmVzNBUTE0eGdzUEg0YzRacCUyQnR6NkhxTjJySjYxbk5JeTNsb1RUa0E1NHlJZjkxelIlMkZhaWx5Uk5VaW5wVjBpWHF5eXh3JTJCamRXNU1kJTJGYU4xaVBkcWY3NGY4QTVKdGthMVpaNExXWXhzeVNLcGFDUlQ4UUklMkJJeGtqMkh3NUtMZTYlMkZUc1VGJTJGcDF3c21yUlJrMmwwUUFMNkZmdDI5MGclMkZ1N3VQN0xvMzk1aEZxdXFhTDlYWm1tV0NSd3lTV1RnczhNZ0c2T28lMkZZNWZaYkFVaEMlMkJaOUpzZk1sMVNLWVclMkJxeVFSVDJETWYzVXZKZVR3dDRNNSUyQkpjaEt5ck9yNkQ1Z1F3VFFFcEZLJTJGd0RlUXY4QXluJTJCWkRrJTJCMUd5ajFldzBTYUM0Z1M1bnRtQ3RYMEVMUXRRQU0lMkZFY3Y1Rnd2MWJReHIlMkJuaHI0b21zMnltUDZ4dUNTdFNJYm9mNnY4QWR6WU9hR0FRJTJCWGRUbTFOZExqajVTTjhRa0c2Rk92cUJ1JTJCVGpUclMyc2JaTENNY1ZVbWtwRkdMbjdSZiUyRkFGdiUyQkZ4VFRtZTEwMkRUdUlMSXdacEtrc1clMkJ6eFd0VzQxJTJGWnlVMlhsVzQxSGhjYWh5dE9RSlpWSEthWHclMkZkJTJGN3JZJTJGenZpQXFRMjFsZFh0eXRyREcwazUyNHFLbW5qOHNPNzM2cm9ObU5JbHRmVnY3aEZlYU1ua1VxVHdweE5BMlMyTWFUNWV0Uzl3NldkdEV2eDFiNDJBN1N5bWglMkYyQzV6VHpiJTJCWnVuM3N3T2phY0dWS3dycU1nb2FqZWlKU3IlMkZPVERWZFZaUFlhM3BPaiUyQlc3dTMxdUtLenVaR1AxZGVQUDFJejFVb3Z4dEolMkZsWVUlMkZsJTJGNWhPdHlTJTJCV3JsaXMxR20wcHlmaVI0JTJGaTlLdjdTdW1jcnZOWW51NURjWEg3eVRvYW1yZlNmNllMOHJhdExaJTJCWnRKdm9UNmJ3WE1iRWp1Q3dWaDh1SmF1UEZ1RmUlMkJ4JTJCWUo0Tk1hd1FpT0Z6eVpPbERYNGglMkZ3UXlRZVZ0QW4xQlk5UjFRTjlXVTF0b0clMkZhM3FHWWVHRTNsblJMUFZmTTE5TGRBeVdrVHRjVzhhN3hPR2FxMWtHejdrJTJGQU02bW9BQUNpZ0EyQXhKN2xvam43MndBTmdLQWJETHpac2lyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOUh2JTJCYk5teFYyYk5teFYyUXp6M3AzUDZycUtiRkt3eXQlMkZrbjRsSlBzZVdUUE9WZm5YNWdtc3ROdGRCdG5NYmFqeWt1WEhYMFl5UGglMkYyYiUyRndERWNicmZtMjRNUnpaSTQ0N0dSNTl3NnBNZk55V2w3RWREMUtNM0NwNmR3b0tsZGolMkIxekhFJTJGUmtvMHJ6MXJVdHo5U3ZMZTJsbTJIcDhqQzdCaFdxVjV4dlViJTJGRG5uMDFqUEVpbjhwSGdja2VtWG1zVGFIY3hBTncwNW81N083SUlLeGxpSllsbCUyRmFSVCUyQjg0JTJGc05rSVpoSWtTalJEbDZ6cyUyRndJakpDWEZIa2I1Z3AzJTJCYTJyJTJCYmRQdUV2WUxWYkxScGlGTDI3YzJFdldrajAlMkZkOHYyVnBrR3NmTjJwM0tyYTNWMlhpY2dFc1FlUUozcVNOczdkJTJCa2RPMXJTYkt3MUxoTiUyQmxiUlhWSktGWnlxOFpWMyUyRjNZR0hMT0VlY3ZLRng1VHZUTER5bTBpZHYzRXZkRyUyRndCOXlmNWElMkZzdCUyQjNscEhVT3ZzdWE0aU53YldDcnVISyUyRkIwcU45ajB6b3klMkJhclc0OHIyT3EzbDFMZTJzU2l6dUdrcWs2emdVVlhNZGE4RiUyRndDRFRPTzJNMDFySXMwWENSUTRrSHFDcUduWmw3NE5na1RsTXFTT0lacFBWTnJYakdHOFF2Zmoyd1h6U3lxejFlTyUyRnROU2pRTThzVnViaEZiYmtJcFBpSSUyQlVSNVljYTNxMTdJZFBtdFoyanM3eXp0cmlPTk5oeUFLU2NpUHRNSlVmSVphWERXTCUyQnJhMGpjcTBaWUFWNHlBcTZtdjh5bkpmNVlleDFQUmpwVXNmTyUyRjBwbnVMSldOUFVna05aNGwlMkZtOU5oNnZIJTJCVnBNUmEydXZCY1hlajJHcDJyU0M1dEpKYk9aa3FXNHYlMkIlMkZnWSUyQnglMkZlSmh0QkI1c09pMzEzYm9MYTlpaE1sbzNFQjVDbEdrVUx5JTJCMTZYSms0cmhsWmFyQkZBYlpsanRyUzVUZyUyRm9JRjRmeU9UMUpqYkMxTCUyQmJTYm93eU13dTRXcnpKcnlYOWgxUFFweHclMkZGV0ZYTnV0OVBCNnNyUzZmcmxxSTRKWkhKJTJCcjMwYkNzYk9mNXBoeDMlMkZBTjFUJTJGd0NSZ1BRYnRyZVZyRUZyVzhnZm5EVTBkSlVQRjA5dW5IRCUyRkFGZXlnamp2YmkyaGFUUWJweGNYbHBIdkxwOXg5bjZ4Q2xmanRqWGkxUDJQM2IlMkZHc2VFOTlvbDlxdHlqSUthbVlsa3RiNk1uMEw1UUtKOFpwNmQzeCUyQkg0dnQ4T0QlMkZ2Y2lUWFBaYVolMkJrZHA1JTJCZ3QxOVlhZDVwMCUyRmUwdlUyWThUME5QaWFNJTJGdEolMkZ1dk9qNmxjR3lzRmFSbFl4SldVamZrVVhrM3o1TU01cCUyQlYybDNVMnBQZGFsRkhLMXNPTHlxUXhTWmFGT2REV09UN1clMkY3ZVRUeks4VWRsY3hSRWhYQlRmJTJCZHpXZyUyQjdKeE5qaTcwSG5UeiUyQjUxR1h5cnJGeGFhcEQ2OW5mY1JxU2Z0cXhITDFvaiUyRk9qUGp0UTBHTllDZnJDWFdpM1FNdGxlbGh5amtZYkZmZHZzeXg0TTg3V3k2enFlbVRxNFg5S3dRbm1lZ2tLJTJCbWYlMkJTaTVHOU0xUFZmTFV0M29kM0NKSUdERVFTN2lLVUQ0Wm92OCUyRmp5RXJxcnJ1UE5rSzU4JTJGSk43U3gwJTJCMHNEZTNrMGs5eEE2SkJKQUNHcXdQSGlLcDhTOGZ0czJGMG1yRFMzbnViUFRoSDZaTGE1WWNRc25CdnMza1NzQ25KZVhKdUslMkZCJTJGd0FZbXdRJTJGclhkakVzUVJpemh2aktDclVwOElmNHVXJTJGd0N5dUszRnM4OTNwMW5lemZWZGVEQ094bUhGaThaSCUyQjg5d1NlQmpQMll1WCUyQlZGaVlnZ0E3MFBtdDlRemZ5amR4WGVpUGVhWTNyTll0OVpqZEtVa2dQMmd5ajdMOGZ0TCUyRlBnVHoydHVMZEpJVDZjTjFKRmN4ekoyVTdTYiUyRnMlMkZhNUJzS2ZMRU12bFBYYnkyc0pJNDB1RiUyRjBpelZ1VWNiMDVuMHozZ2tUbHclMkYzMjM3dkhlZGRYTjVwRU1kbmJtT3lzNEJGY3kwcURjRjZHSmElMkZ3REZhY215WDhQdTJSMVFPaTZZdXBhYmQyRjc4ZGo2eGpMVkZVbHB5U2FId2tVZjdGMCUyQkRJcnJ2bDZkcjQyTjBlT3RSSUhzN2xka3Y0QjlpamY4dEtnZkIlMkZQJTJGQUhYMjhtUGx1eWIwVnM3T2RUTDZTU1Jlb0s4JTJGVFpxTiUyRnJxT1BMJTJGSndUcWRoRnI5bTFscVVoam5oY20ydXY4QWRsdE4lMkZNS2Y3cGI5dFA4QVpyalZoV0hhSHJFV3F4alRiOWd0OUdLUXl0c1hwdHhOZjJzbDM1ZDNKMGp6bkpiQ29qdVFsUjI2Y1QlMkJ0YzU1cXRoZHlYY3l5SjlYOHdXZngzRVNiQzZVYnJjd2Z6UzhmamZqJTJGQUh5ZnZQdDg4TiUyRkt1cTNGM3ExaHFCSUV5YzRwV1p1Q2tvQXdjazlNQTUwVlBKViUyRk1xMmswVHpuZkNKUVVtUEpvbSUyQnpKRyUyRnhjVzl0JTJGd0RZNFE2Y0lMYTZaWTJlS1J3c2x2NmdvYURmanklMkZhSzRmJTJGQUpsZWFkTTgwYTh0MXBjWjlHQ0pZbXVHMk1yRDdUQWZzcXYyViUyRm13cjBXeXVOWFV3JTJGVnhjaTElMkJLTHQlMkZ3MjN3cmc2cUdWYW5yMXZySzJ0M2NzSXJ5MWFFU0JqeEpFWVlPUWZmNGNqdm0zekxicFpYTFdUR0M1dnIlMkZ3Q3N3UmpmakJHb0M4eWZpJTJCSWpDUFgydk5NdSUyRnFaRFJOR0tTQWdVcXhxZ3FLcnVGJTJCSDRzanN5UFBJWlpTWEo3a25mRzFlOSUyRmx4cmR0NWtzYnFkU0Z1N2VNTGNXNU80JTJCRTBjVjZ4dm5GNzV1VnpjYjE0eXlCVzclMkZhTzJLZVM5UnV0Qzh5V2Q3RE1ZTGZuNmQzTCUyQng2RDdTTEo3WWhka05kM1VrUkRSU1hFcnhNRFVGR2NsVDlJd25kQ3RwV3J6NlpOOE1za2NEc0dkb2p4a2pjZlptaXAlMkIydjhBTCUyQjNpV295U2ZYYmlIVW1GeTE0ZnJLWHFING5MMTR6SyUyRlZ1WDdjYllFZUpXRFBRVnBVMFBqMHg2eXFMTDBwSlVXNHRYRTFvNU85U2FTUmJlUDI4Q29iMVoxVDZ2UEt6eGplTlNTUUs5YVYlMkJ6blhMZlVyZHREdDlUMVUlMkJqZVJ4cGEzaU12RjVWNDFqY2clMkZ0cnglMkJMT2Q2VmJhVHFKbFM3bE1sNUlyaTNoSHdSaVFqOTIwc25oek9EcHBXc2lpNnpjR2VTWmczcG8zTlN5JTJGRCUyRmVuNEs5VjU0MnIwTHloZWFYY201dWFDQ1dOaHhrbCUyRnZDbE9xY3ZzNHJybjVnMmVuSTl0cEtpNHVxbFdjazByU3Z4UDhBdGY3SElUYXpwY2NyaU5hTEdEJTJGb3pHbkJWSUprWlAyNjElMkJGdVdFNGp1THFTWm8ycGJKTWp5aXRBUWVWUHdyanhiVUUwMXJldVhHdkNLUFVaSjJDczBpcWdVZ0Z0dW53JTJGQ0tmRGhXTFhTemF5Vzczanh1R0VsV2dKVWJVb1NEaGtMY1hFakpEU0pxa29TZCUyQkg3T0dsaDVhMUh6RE9OSWl0JTJGV3ZaRU1rSlJsUXRHbEtzQ3hWWDQlMkZ5JTJGYXdXdElMVExUVG1lTW1iVHJtMWpYZTBubU1MT3dIMm5abHJXdiUyQlZobEJiNkxxbDA5enBlbXJieDJjSmU1V05xaVJpM0VLcmZ5aiUyQlpSOFdKNnglMkJWUG5YUXJLNDFpOXNsanNyVUI1cEJMR3pBVkNnaU5XTE51ZnM0SThoNmhwNzM4c054UkJleGVpNUJvQkpXc2NnJTJGMlh3NFZaam9NbGxGYng2MzVZNTJrOW12UFVkS2FSakhJRiUyQjA4UEluaEpRVjYlMkZhJTJCSE9xNmQ1JTJGMEc3dG9aekslMkZCd0t6QkNWclRvM0dwUSUyRjYyY1lXMjFEUSUyRk1VVnJGSCUyQjV2eUluUFNJcXpmRTFmMmFmYXdrbXRwNDJrbHQwZjZ1enVJbldvRHFyRlFSUWprTUpWOVEybXM2VmZpdHBlUlMlMkJ3WVYlMkZ3Q0JORGcyb3p6cjVZMXZUSTdWOUwxUG5iVERrOEU0UXM3TTFLS0hCRHA5R1RmUWZPZG9zU3h3NnR4a3A4VU4wRHhCRzM3V05lYTA5VXpaQk5ZJTJGTTNTZkxjVnJMckRJeVhaS3dtMmJtVzQwRHNGMyUyQkZhJTJGRjhlVFcxdW9ieTJpdTdkdWNNeUNTTmgzVmhVWUVLMmJOWE5pcnMyYk5pcnMyYk5pciUyRiUyRlM3JTJGbXpac1ZkbXpac1ZkbkUlMkZ3QTlyS1lYbWo2alQ5dzBjdHVUNE9wRWdCJTJGMWxPZHN5TyUyQmQlMkZMVWZtdnklMkZjYVhzdHh0Tlp5SG9zeWJvZmszMkclMkYxc0I1T1JwTW94WjRUUElHajdwYlBsJTJCTlByRVJpJTJGYUc2SDM4TWtQbFh6aCUyQmpoSG8lMkJybXVuQ3F3WEZLbURtZmlTUmYyN2QlMkZ3QnY5cE1KQkRjV043SmFYY1JodVlIS1RSUHNWZFQwUCUyRk5XQjlSaVdPNmFnJTJGZHlnU0w3Y3V2M0hLcGt3SW1QY1hvTTJLR2FIaHkzQjNCSGYzaDZCNXFzbFhRb29OT1ZvZjBhN1hkaTZmRHhCUEtRUTc4dlQzNXhObDZGcjFsNXMweVhTTlpSSHVqSHhsUmh0TXYlMkIlMkZFOEpCOXIlMkZBSWZJTG8ycFQ2WGZMZDhtbWlLZWhQQXpFOG9UJTJCeXZLdE9QV1AlMkJYS3ZyYWZTcGwxWFQyTDZlejg0THFMckUxYThXSDdQSDdORGxrTW9sdVBpSFJhclJ6MDVGJTJCcUo1U0hmMUNUJTJCWiUyRkxsejVXdnZUVW1YVDVqVzJuUCUyRkVIJTJGd0NMQiUyRncyRmF1RDhTbjZjNjdhM1ZoNXgwcDdHJTJCUmZyQVdza1k2RUhwTEZYcCUyRnhwbkxkYzBTODh0M3B0cmlyMjdtc0UzWmxINm5YOXBjbVIxSEp4RlMzdUE0b2Z0REJsdmN6Mmx4SGMyc2pRenhNR2psVFlnakNWRzZNaCUyQldENFpSSXZ2M0dDMVo3cGR4SHJhTkpDVml1a3ExM2Fzd1ZBTzl4Q1clMkYzVWY4QWRrZiUyQjYlMkY4QVZ3MXQ1TlBrS2FiZTNTeXFLRzJ1SXF1WURYN0pjN2VpMzdhJTJGWiUyRmF6bTl0ZFQyZHhIZFd6Y0pZenlROVI0VUk3cXclMkJGaGt3aHZEcUVDVGFaYkV4eUhoUGJxS21DWWl2QmYlMkJLWlB0UiUyRjhEZ0lrU0R4VkhxSyUyRlN5QkZiamZ2UjhrMXhZNmdWdExiNnZKYlZXWmJodlZMbzM4eUFlbVlaRiUyRjRYQ2pXME1jWDk4NiUyQlg3MlVlbTZWNTZiZWtWQVlMdTBEJTJGOEFKU0wlMkZBSXRqdzdXMHV0VmdqMCUyQjdrOURVTGMlMkJuYVNNYUZrcnZheiUyRjh5WFAlMkJwZ3EwMGl6dGJrYVZjUDhBV0JlcjZOekV3b3JMV2pSc29KNHlSdjhBRWpyOWpHT01EYm41eTNVeUo4dmN5ZnlIcGwxcHVoeTMxekVFMWU5Y0pmS3hYaks4Sk1hVHFmR1pDcnQlMkZOOXJDWDh3ZGElMkJxeWFiQUdBTTg1YVlBOUZVY1YlMkZ3Q0d5WlhFbHZiMjBWZ0hiMUxlTkRFS21wS0RoR1MlMkZmT0slMkJjcmh0VTFHOHZMWiUyQllzejZNMFElMkIwbkJoNmN3SCUyQiUyQjVhZjdGOHNsc0FBeEc1dGtlc1RtNjhzYWRkbzNHYlRaNWJiMUIxRyUyRnJSZnJ4R1RXN0x6UHBjcmFoQUxmekRwaXI5YmlJNHRKRVNBWm93ZnRKOFN2eCUyRlklMkYxY0Q2Vk1iM1JOVHNTaEptaGp1NGdWUDJvdnRIJTJGZ0clMkJMQlZuYjZiNWcwdXgxSkdXRFhORGo0U0Vpb25nUWNHamslMkYzNGhYN0xmc1lCdWt0JTJCV2JhNGdXSFdtaiUyQnNXZHBLMER3cXklMkJvV2tvbkpFJTJGdkhaT2ZOY0tkYXNuazgwMjg4VE42RUVxeE9YTldTT0ppUzduMnA4ZUI0YnlTdzFpbHY4QXU0T1FrNDdrS28lMkJMdiUyRkxYN1dLNmpyNHU5VWVlMWpJdG5kaUlpYXN5djlzViUyRmwzd1dBRlpCYnZZYWpxc1YlMkZEU1AxeUlUUFVnU0tIOVNTaW5ZY0lSdyUyQkg3VFNKaHIlMkJZT3Iyc09rV21uaEhTSzZZaVJvbEZGNUElMkJuNm5nSmlmOEFXeVAyTUw2ZGJpUkklMkZycXNBSTNTUkFzTVklMkJ4SEtybEdoZmwlMkZlZkIlMkI4JTJGM1hnWFhZcHBKRzFtMnVua2JqNk9wMnBVU0tWQXFrc1NOc2lmNUwlMkZGSDl2SG9VbHJ5dGR0RENnZG1WN2Q1STJib1UlMkJJTkdUJTJGTGhwcjNuTFRLSjlVVDE5VEI0ek5IdENlM0pqM2IyWElzc3AxWThiVWZGT1FzaXg3U0NTbEFYcFRtajRhdjVPbnNkTSUyQnV6QjNabTlPV2FOR0QyJTJGTWdSVG9sUDNzWFA0WnY5MmZ5WWk2b0lURFZyRzI4eDZOQmVCdnFXb1dTMWl2U2VJaWtVOGpGSSUyQnpMQTYlMkZHbiUyQiUyQjN5RmFxMXBjWGl4MjhaVUdpM1Uyd2FkeCUyRnV6aUFFV3Y4QXElMkZIOXZETFY3VHpYZVdycWJhV080VmhIZU5IdEZkQ1A3RWhYNUQ0djklMkJmYndwQzNsaUdndklvVmRTcXQ2cExQR3IwcFRqJTJCejhYdzRDVWtFR2lsN1J3UnU5Wnp3alB4OFVaaUtlUFNoeWIlMkJSZk1kaEhNMmtMRVYlMkJzRGxETFFGbmNVQ3hjUlg3V0VGMURDczYzekNzNnI2YzFOa2VuY3I3cmdYU3BGc2I1ekNGb3JlcEM5UGlVRWZacjREQURSVkQlMkJkZFVrUG1QVTRsVWdWTnRORzRxRHcyQm9mMmtQMkd5SzFMRUNwWSUyQkFxVG5VRmhzdGExQ2UlMkIxRzNpbnVaQ3J5U3NncXdxRk5Sa3d1OVI4bSUyQldJd3NjRUhyaGFyREJHalNINXRUNGY5a2NJb29wNGRhNlZxdDJHVzB0YmlRSGJpa2JrSDU3VXdITkZMYlN2YjNDTkZMRXhTU0p4eEtzdXpLd1BRak91MyUyRm1xJTJCMW1GbzFDMk5tRk1qaFRRTEd1JTJGS1J0dW1RZlUlMkZNV2gzdW9UWHgwcjFwSmVQS1NXU25KbFZVNWxRTnVmSG5oUXhtT1l4a2xTUGlGQ0R2VVpRS1VJcFVuN0pyMCUyQjdEOGVZckJQN25SYlVmNjFXJTJGaG1QbXRrQkZ2cHRuRWV6Q01rajc4Q3BSWk9ZNXclMkZCbVdoQkNqc2V1U3l5bjBwSXBJcjJDU3IyZ3RiWVRRdDZheWx1ZlBwOFBCV2JDWlBOdXJST3NrWWdWa1lPdjd0U0FWTlJ0ZzI3ODAlMkJZUE5kNUNkV3VSSkhFV2tXT05GalJhaWglMkJGQVBsanNxTGVSclZoJTJCalF0M0dCUm9YQkJLQWZGd2FnJTJCTEoxNUIxN3lmZWFsRTJ0YVRIY1hNRzYzRXElMkZ2YllMJTJGdnlIJTJCNmVGSyUyRjNpSnlUOXZBWGtQeWdQTkV1b3h4M0tRM1ZyQUh0WVdQOEFlT3hwdiUyRnhXcWlqTXYyV1pNTGRTOHZCTHg0cGc5anFWcVRGSkl2d3VwNmZ2UDVsUCUyRkRMaWxsdjVpJTJCU3RQdEw4NjdwRUVjZW02aHhraXZMV2pJayUyRmV2SGIwNWZ0WkY5T2tkNUV0NW1heXZvV0V0cmRSbW5DVWZZbWhZZnpmdHAlMkIzazMlMkZBQzY4ekxmeCUyRndDRmRXdDFlRWxyYlVvVyUyQndHSXJEUEd2N0N5VSUyQkxqJTJCMThlSWVhdktNM2xxN1dxZldOT2tZaXp1WEZlTmVzRTlQOEFpWDdXTmJxQ25jZm0yZnpSb1VtZzZ6RXFhN1pQRFBQQ3Y5M2VRUk1DMDBBJTJGYSUyRlphV0xDSHpmOEFsN29PcmE1YjZoNUt1QkhlM3JqNjFZd3IlMkI1WGx1MCUyRkwlMkZkRGZ6eCUyRjhRd3B1cDRWV0JyT1JoZlc3aVMwWWtySmJrZFJMS3Yyb20lMkZZNGZienN2a1hVN2ZXTkhqdTNqaGoxWkFJOVVFS2hTSnZFbWclMkJGMSUyQlBFaFhnUG0lMkI5OHklMkJXcmlUeXhyTTBpQ01CbzVWVlc5YURvSklabSUyQkxpZjVmdFJ0aE41WDh6eFdYbSUyRlRaOWRIcTZISCUyRm96MnoxZU5MZDFLcTRUdndZJTJCbzJlbCUyRlBYa2pUUFBHa05ZM243cTdocTlqZXFQamlrcCUyRndBTkUlMkY4QXV4TThtYXpvJTJCcSUyQlY5VXVOSTFLTDA3eTJQRmxiZFdVJTJGWmxqUDdVVGZzdGloOUp5NmQlMkJWVjNmMmRqYTNsdEhlNmlwZXpTMm1yekFGZmglMkIyaU1mMkslMkZFMlhjZms1b2pvVFozMTFiejFKRWpGWEclMkZpdEUlMkY0bG5saDNVU0xLQ1k3bFNHTFE3VUkzREE5bXowTCUyQlZQNXdMcXhpOHMlMkJhWlJIcUlwSFpYMGhBRTlObGpsUGFmJTJGSyUyRjNaJTJGcllxcWFsJTJCUyUyQm9YYjJFWXZyYVdHM2tjeXZMRzNJUnV3WSUyQmtnUEZXMlBmSmpaJTJCUnJ1d3VGYTIxaVJZRkFDS0ZLc0tmNnIlMkJtZiUyQlJlVFVEeHk2WXFvMjBMUVFwRThyenNvM2xrcHliNThRQmkyYk5pcnMyYk5pcnMyYk5pciUyRkFQJTJGVDclMkZtelpzVmRtelpzVmRsRUE5Y3ZOaXJ6Yjh6dklmNmJoT3U2UkVQMHRiTCUyQiUyQmpVYjNFUSUyRlolMkY0eXAlMkJ4JTJGUDlqT0hhZ3ZxV3NNdyUyQjFFVEd3UFdoMzN6MXpuSSUyRnpMOGhxRXV0ZjBxUDRKUnp2cmRSOWx3UiUyRnBDRHclMkYzNyUyRndlUm5HeFR0TkJyZUV4dzVEc0Q2U2VuOUY0Z3BwaHRvMnByWVNTUTNLZXRwMTFSYnlBaXUzUVNvUDUwJTJGNFpjSzVZekc1UTdlR1BFVXlScE15a1JTRWhIN01WMkl6R0FrRFk1aDNPU0VNa0RqeUN4TDhiZWFaYWdseG9PcHhUVzdxTFNXa21uM2NYMmVKMzRueCUyRndBcGNsTXNlbiUyQmNkSWVDNFFDWlFQWGpIMmthbnd5eGUyUmpUNyUyQjJlMGJSdFZITFQ1U1dobCUyRmF0NU96ciUyRnhXeCUyQjJ1Sld0eGU2SHFTdzh3dHhEdkJMJTJCeExHZWdQOHlPTXljZVFFYmN1bzdubk5WcFo0Sm1NdHdkNHklMkZuRDliRU5VMHk4MEMlMkJhenVSeVRySElQc3VuWmglMkZUS2lsNGtTSWFqJTJCR2RaMUhUdE04NDZTWFVlbkt2MmdOM2dscDElMkZ5a1AlMkZENXlPOXM3dlJiMlN4dlU0c2gzSTZNT3pwN05reU9vNU9LbVN1R1VNdlE5TU1kRjFtNDBTJTJGanZvQUhVZkRQQTMyWkl6OXBHSCUyRkRJZjJHd2p0NVFoMyUyQnczJTJCZGNGbnJpcjBHVzVLeXg2aGF2Nmx0ZnFESGRkVzVEYmkxZG81ViUyQnc2JTJGelpMUExiUTZuUDhBV3JwQWJ5M29KR0kya1hxa3JmeXlxUjlyT1U2SHJLV0hxMk44R2wweTZwNjZMdTBialpaNHYlMkJMRiUyRmFYJTJGQUhZbWRhOHAyaTJ0azhzanJJN21pVElUeGtqJTJCMUhKUTdodUolMkJMSlIzSzNzbnVxM2ZvMnJ1b3FRQzNpZHZzZ0QlMkZXcG5NSiUyRkolMkZtZTRNc3EyakM5dHVVYVhjWEVSM2RySjFqYXBINzJOVyUyQkZtWCUyRml0JTJGd0I1blRkSWtzeXpXMGMlMkZyeXhWWmd6Qm1Dc2E0ZUNaQUtIRElXZ2JQRHZLOWpxdWg2eGFXJTJCdFc4MXJETDZsb3pUS2FGSlFWQUIlMkJLdGZod3ZzNDdteXZMJTJCTlFmVHMya0Q5VUs4Z1FLbHYyWHA4U3RuUiUyRnpRMUdXMDh1JTJCbFpPMGQzZFR4eFFzaEtzS0htN2hoOWppcSUyRmF6aTZNeEVpSTVZT2EzTnl4Sk1qVnJ1eCUyQklybGN0bVEzVFM5MUUzakNHMmpISTA5UjFxT2RPZ0ZmOTFyJTJGdzJDTEtGWXh5SkJJRlpKT3dIZ01DMk5yeUczd1JucTU2dCUyRlpodXNaaWlodTdjTVd0NWlyMnpweWlrVUFVOVQlMkJZY3VXUjVwZFBxaWFjUXJXcVhDelIxVVNWQkFiJTJGQUhZcCUyRm53dXRkVmh0ZFRhJTJGZ1dWQk9BazhCY05HOUJUcXlrNGM2cmMyZHhlMkYzYzJrY0tKR0k3cXg0a1VqcHlSMEI2VnIlMkZOaEJxYzloYVN4cEhFUmFYUmFXSXQlMkZ1dmNvVFJhNzVQbHlRbiUyRkFKWnZZSSUyRk1VUzJTTkVMaVZURXlnVWpuVlc5T2xmdEk4aFZXVnNuU1hWeGZUR1M2bGFTVmlDUzJ3b2Rqc05zNSUyRm84cnJMNjlxd2Q2cElycUF3JTJGZCUyRllQdzlPbVN1YTUxR1ZKNzYyc3dRWExDRDFBaXJ5TlFyTWZpMiUyRnlWd3hLa0lqVzclMkJlempSN1BUcHIlMkJVYnY2V3lVSDh6ZmE2ZHVPRVBualQ3U0VXbXJ4eGtTWGF0YXpvd0E1S1klMkJTY2dEOXFJcnh3UTNtUFg3RWV0cUZoQXRxUHRlZ3p5U0Fld0E0NUYlMkZNSG0xZGNSSUdqTWR2QyUyRnFSSUtjdVZDdkoyJTJCUiUyQnpnbExZMnloam5MYUVTZmNFcXVidXJXOE01SHB6S3ZJcjFGYURsNzljUmJScjZTOCUyQnIyNDVHQ29hYyUyRkNqS3A2NyUyRndBd3clMkY4QUwzbGkwMXFCTGdQSk84Zjd0NHdQN3MlMkZzRTlmaE9IZXIlMkJWdGZnZyUyQnZhYmNKZTFGSnJQandaVlVVJTJGZHklMkZSOWxseUlGaXh1RXpqS0VqQ1lvam1HTTZqYWFqWjI4UmpCaUVpc0p6VUxUaTNpU0tSMHdib0hrVFhkV3QyMU9MVDVydTJBNVJsTjFrOFNyc1ZXVCUyRkFHRDVlbmExYVhBJTJCbzZwRCUyQjlKMldjZW5MJTJGbEJKUjhEJTJGd0NyblNmeTg4MFclMkZseXpsMG03dUpadEpSJTJCVm1YU3NsdHlOWGhZRDdjUDdTY2ZpVCUyQlhEWGN4b3NSMUQ4cnZQMnFXVWRsWmFkSFpXN2tQY1BjWEVZZVNuMkVLUjglMkJLSjlyaCUyRk5rUnUlMkZ3QXJ0YzAyNmV5MUZvb0pvOXlLczRJUDdTdFFjbHowYnJmNWplWHRLaFI3ZVlYMHNpZW9pUUhZTDI5UnYyQ2Y1VDhXUTdXJTJGTWolMkJack9LZDB0MUN0JTJCNmVEazd4TWFqMDVDYU54YiUyRlZ3RWdDeTI0OVBseUVDTWVmSjQyMzVmWFE2M1VmJTJGQXQlMkZYQzdWdktzbWtmVjdpYWIxZFBsSVNXN2pUZUZ6JTJCeEpIV29QZzM3ZWRRNWt5TkRJdnB5eCUyRmJRJTJCJTJGUWc5MU9CN2hGQ3VySXNzVXE4Sm9IRlVkRCUyQnl3JTJGVTJJSUlzTU1tS2VPWmhraVl5SE1GNWclMkJoQ05pcGN5RmYzbndEN2NIJTJCJTJGb1QlMkIxeCUyRndCMkolMkJ6aU55VzAxJTJCTnNlVnRNb01jNEc3Vkg4MlRDYnl4ZldNeHRVTWxuRElQck9saTU1SkloJTJGd0NLMlplTXF0aFlZT01WeEJOYiUyRnUySEslMkZzbDZKVTdYbHAlMkIxeERmYlQlMkZkZUZnbVBrblc3cTBlQyUyRnNaJTJCT29XVGNrNWZ0Um5yRzlQdElmc3RuYXRZMGl3JTJGTWZRNCUyRk1XaDhiZlhiZFNqeG5ibXlENDdTNCUyRjVreTU1Z1djYVpxRFBwMXlabzQyUHB6OFN2SWVQSE9uJTJCVGZPMnFhWE1MJTJGU0hpUHFjUmYyTTlmVFlmNzhYajhYSWZzNHFvV3NHc1E2NFRwcCUyQm8zMXpHYks5V1lmRkU4WjlUY2VJNEZQOWxucE5iV0RWZEdpdDlSUmJpTzRnVDFnM1FrcUNXOWpYNGx6a3NFMXo1MzgyRFU3V3pFS29xcTVVVkFvT0llVjl1UiUyQkwlMkZnYzdSREdzTU1jUyUyRlpqVUlQa29wajBVdkh0USUyRktuVjlIMUY5WDh2WENhanlZdDlUdVFvWUxTaWpreDlPVGolMkZsY01TOHElMkJhTG55OTVndW9OWXMycyUyRnJmRVhzTEx4S3lKWGpMSDRweE9kcHdsMXp5MXAlMkJ2Q09TY3REY3cxOUs1aW9IQU94VTFIeEolMkZrNG90Tm9aWXJpSkpvV0R4U0tHUmgwSUkySXlGJTJGbU4lMkJYbGw1NTB6NE9NR3Myb0pzTHluZnI2TXY4MEwlMkZ3RENmYXlVNlJZTnBsaERZTk1aeEFDcXlFQlNWcVNvSUg4dURqMHhWOE5hcHBWN3BkN05wJTJCb1FOYlg5cXhTYUp1b1lmcnI5cFd3dVNOZzROU0hCcUtiRUh4cm5yTDgwUHkyZzg2V1gxJTJCd0N3NjlhSlMza095em9OJTJGcTh4JTJGNU5QJTJCdzJlWG0wcThndVpvYmxHZ2xpY3BOQTRwSXJvYU1qZnkwT0t2cGY4bHZNdXNhNW9sMVphek9McVhTM2ppaXVUdkl5T3ZKUklmMnlsS2M4NmVNOHklMkZrMzV1c2ZLMnIzRnRmeU10anFvUlpaM3FSRk5HVDZiUDRJUTdJJTJGJTJCeHp0RjElMkJhSGtlMDFTRFIzMWFON21aJTJGVExSVmVLTnUzcVRENEY1ZE1WWmxteWxJWlF3TlFkd1J1TXZGWFpzMmJGWFpzMmJGWCUyRiUyRlU3JTJGbXpac1ZkbXpac1ZkbXpac1ZkalhWWFZsWWNsSUlJUFFnNDdHU09zYU5JNW9xZ3N4OWgxeFY0UiUyQlp2a0E2VksycjZWSCUyRnVQbGFySXY4QXVseiUyQnolMkZ4amIlMkZkZiUyRkE1RW9KTEslMkZ3QkZoMHlPSlUxQXlySDZvQUJib3FKSXRlYnR5SmtqWlA4QUtWczczcW5tJTJGd0FzeVc4OWxlczd4end0U014TVJLRyUyQkhnaHB4NTV3JTJGd0F5JTJCV3BiSUhXTk5qZUdLRmtEamxWdzUlMkJJUEd3cDhTJTJGdGNmc1pHVWF1UUh2ZHZwTldKeGpoeXlNWkElMkJpWFElMkJVbU1YTnRjV1Z6SmFYU0dPZUppc2lIc1J0bGwxdUxmNnJjTWVLYjIwdlZvVyUyRjZwUCUyQjB2N0dIc0xyNXB0dnE3bU9QVTRFbG1FaEhIMWVDSUk0a3AlMkJ6NmFPNyUyRnRlcGhCTkJQYnl0RGNSdEZOR2FQRzRvUjdFWlZLSkhyaHolMkI5MkpqRFBBNGN3M0hNZFIlMkZTaWlORzFtNzAyOEVpRUM0aiUyQkdXTW40SlU3cWY4QWpWc2xtdmFCcDNuTFNGdmJDaVRLQ1kyUDJvcFAyNHBLZnMlMkY5ZDVCVEZGSXlzNVpHWDlwS2NoOUI2NUp2S21yU2FWZGV2eGVhMW0lMkJDY0VGUXlqOXRSJTJGdnhNdHhaQklWOHgzT2kxZWtucDVVZDRuNlpkJTJGN1htc2tWeHAxMUpZM3NaaWtqYml5SHNmOEFtayUyRnM0Y2FQYXk2cGVRYWRFNnJKTXdWWGJvRjZrJTJCJTJGRURPbiUyQmRQSWtmbVN5R3A2UUExMnFjNEpGcFNWUHRjRzklMkZ3RGpmSTM1YThxemFGTmEzdXJLclhMbXNjZkkxZ1A3TlN2Mm4lMkZteXd4b3VJTjFEV1BLRFc5NURZNkswdDVJZmduYVVLZ0QwNWNsNDlJNkg3VFowYnluQkFtbWpTVnZoY3oycUVNNjAlMkJIblZSdzlvbSUyQkglMkZBRnNJdGZobmRnMXElMkZwTmR4bUl1RFFWVSUyRkVDZjhvWVJlU0xrNlI1bldCdzFibVQ2c1NEOEZHQmI0aCUyRk55WER5UHZic1dJVEU5JTJGVkdKa0IzMGpQS1YxUHBPc3JCZHVSTEZjUGIzSlk5VmRpdFclMkYyWHhaMCUyQjkxTzJzcElvSldMM0U1NHdXMFk1U09mOVVkRiUyRm1kdmh6bSUyRm0ydyUyQm9lYXBKbEJWZFJqV2RDRHNaRTJjZmV1SGR2ZlFXMEJuZ1pwdFZ2RUgxdSUyRmxHNmdqJTJCNWhIN0tyMHhIYzBwRCUyQllnOHdhMU5ERlpXalNXdHNyQ1JvaUdKY240NmIxWWRGMnlGV2VtenhzVzFDTjRFaiUyRlpsVW9mdWJPczJXcHhwTkdsMm9NUDJlU2JFZTV5VFhHa2FkcUZwSmFUMjZUMjg2MFlFVkJCNkVIeDhNZUN6ZHB1bmxFdHBIWVEzOEdxUnJGTmFQQThFZ0pjRmElMkZHcWhhZGFvMlhCR2xtYmUydUN6ZXZiR2VSbzJQY05KeCUyRjJTJTJGRGh0NTFzM3NMcFlMb0g2bmNJcTIxd1JVMVVjZUx0OUh4ZjhIaGo1ZjhwWGVyV2MlMkJxMlZySHFFMW9xUVdkdk5Md1VvaWptSkIlMkZPOVc0JTJGczhjalZIM0xlekV2TTJtWFdxeWFiTm96QjdTUzFXSjVTd0JySFduTHY4QTNaVWJmeTRvbmxhem10cktDJTJCSmxOb0hGRk5GYm1RYUh2dFRKOXJQbHpVN0dPTzZ2clJiZU5pb1FRTXJSeG1uOTM4SVhqNFlFMGZRTG5YQmRRMjA2MmwxQ1AzU1NyeTlYYXY3b2cwJTJGNExEc2lrcHM3QzNzMVdLMmlXSkIlMkJ5Z3BnNWxOT1gwWUFWcjdUTDB4WHN4Y3hzVmxoa3R3cEZQdExWV3diZiUyQmFuMGU4dHA3TFRZcm15SUxscHlUNmhvUncyJTJGdSUyRlRiZGx3M3Rhb0s0djdhMWRZMmRXNUdqUTFxVkhqJTJGd0EyNFZhaDVhMDNWbE54WkVRVHR2eVg3TEglMkZBQ2x5Zmp5Zm8zbnJUcmJWOVBSTkkxaTZnTThxUkVOQzhnYjA1T1VJJTJCTlI2blIxJTJGNEhJUnFPajY1NVZ1JTJGUTFTQm9nVCUyQjdtVTFpa0E3cEowJTJGd0JpM3haR3dkaXpoT2VPWEZDUkJTUFNaTlg4bWFtbDFNaE5zZmdsZFBpamREMUglMkJTMzdTOHM2WkxyRUVadDJ1RWUxVzZWV3RMc2clMkJsS0dISUdPUmVTJTJGNndPUjlkV3RScDExZFNRJTJGV0h0NFdrJTJCcjkzSUd5VSUyRnlzayUyRmslMkZXNUlOQVRUOVowZUFXY3pHVDZnciUyQm9JbGZjZ0J4c2YydlQlMkZBR01ZeE1TZUUyRDA3bTdQcUJtakV6aldTTzNFT1VvJTJCWTcyTSUyQllmTGNkM0ZKZVFSeHlvN0V6UVU3OTJHUTYwYlU5SGtmOUhUQXd0czFqZFZlTmwlMkZ5WCUyQjJuJTJGRWM3Wkw1WHN0VlNTNThwNmtZWnFWYlRyeXNpZjZ0V1ByUnIlMkZzcFZ6bXV2YURxMmp6c3VwMkp0QTVOQ2ZqdG1OZjkxVGpiJTJGWXljY0o4dG1nSlBxVjRKSkxKcEkzc1lMcUoydVklMkZ0QmdQOTFxNmpwSXk4Vncwc05Objh0RzExbThLV05ucVRyQXVtczVZaFR2eWN0JTJCMFI4ZnclMkZZYiUyRld3TGRScGZhVkVra1BPNTByMUhoakpBTFJTZzlIcFg5MiUyRndDemdTVzRUVjlIZ2E1dXBwZFZzcEZ0N2EwRk9NTnNoSEptM1Z1Wlk4ZlYlMkIwemZCbFpIcTNCTmlnT25tNTJMSWZESENZd01DSm1WWEk4SXFNWW56STRmODVsJTJCc1JRYzdlU0tWUlBIS3RzNHJ1VWtQQWN2OVIlMkZpd2JaYVkxcDVndHJIVW9pcGpualdaT280bGhSdjhwR3djUEw5cGNST1pvMlM2WmthWGd5cW9hRlZrNGhuJTJCSjl1UHFOeHdWcm1zV3Vwdll6YWxGOVMxSzFsVGk2R3Njc1lZTXBWJTJGRldVTnglMkZsd1lvU2pkOGp5Yk8wc3VMTWNVc2RtVVFST3hScm5INzVQUXRkOHZhVDVpdEJaYXBBSkkwWVBFNm5qSkd3JTJGYWpjZlp6ZyUyRndDWldoM0doVyUyRnIyd0gxdlNaMERYbFBpYTFtJTJGdVp1SzdNViUyRnVMaiUyQmJQUTFwZFIzbHRIY3hHcXlDdE90RDNIMEhJRiUyQlpGbmIzazhFTXFoeFBCSkhPaDZNbklVRGZTZHNzRHEzemZxV21SNmxGSnFlblJDTzZpSEslMkZzazNGRDBuZyUyRm1qZkMzU05WdWRKdVV2cktRSmRRT3J4YzFEb2FmYVNSR3FySyUyRlJseVUzMmkzWGxuVTRSSE9ZckYySXNyMWh5OUptJTJGNDk1JTJGOEFpbVQlMkZBQ3NLdGUwWnAlMkZXMUt4ZzlLYUwlMkZBSTZOaXByNmJIJTJGZDBYODhFbjJsZkZYMCUyRndEbHo1eDBmemJwQWxzSVlyTyUyQmdBRiUyRll4QlZDT1IlMkZlSUJUbEUlMkY3TGY3SEpwbmlMeXo1bTFUeXJxVnRxMmx5OFpZenV2VldYOXFPUWZ0STM3V2V1ZkpubkhUZk9la0pxVml3U1phTGQycE5YaGs3cWY4QUpQN0QlMkZ0WUZaSm16WnNWZG16WnNWYU9jdCUyRk5qOHN4NW50Sk5iME5mVDF1QmF5eHJ0OWFqVWZZJTJGNHpxUDd0djJ2c1oxUEtPS3ZoejBDc2J3TXpxU1NIUFJndzIlMkJMMyUyRm13cmxoZUIlMkJEOWV4SFFqeEdlcWZQSDVPYWQ1bHVwZFcwaWNhYnFVM3hUcVY1UVROJTJGT3lyOFNPZjJuWCUyRmdNNTlIJTJCUWZtdTVuV0M5bnM0cmJsOFU2T3pNQiUyRmtwd0dLciUyRnlrJTJGT0J0T01QbG56VE1Xc3lSSFk2ZzVxWXE5STVqM2klMkZsZjhBM1hub3hXVjFWa0laV0FLc053UWVoR2M2OHNma3Y1UTh2QlpyaUU2cmRyUSUyQnBkQWVtQ082d2o0ZiUyQkQ1NTBWVkNxRlVVVlJRQWJBQVlxM216WnNWZG16WnNWZiUyRlY3JTJGbXpac1ZkbXpac1ZkbXpac1ZkaU56TkRid1NUWExCSVVVbVJqMEE5OFd3TmZQYUpiU20lMkJLaTJwU1V2OW1oMnBpckFQT041cE1XaVN0b2lQSmZNMWJWSTR5eTFHOGpEa0Nud3JoRHJENmpGYiUyQldiQzdXdDM2RWNsJTJCQ1AlMkJLaVpIYnR5SmFqZjVXRHZQOXhaUmFOQ2ZLdHhLYjR6ajA0SU9SNDAzSktrZkFPZkglMkZXd3M4NGFqTmQzRUVrbEZ1U09VdEslMkZEUlZYaUtkdVFPRkllZWF0cGswRjVQZWFVaiUyQmxBVExJWXdTWWhYZCUyRmglMkJ5bGV1TFA5VTEyeWttaVdPMnZyV09XNG4zUHhnY0FGWG1hdHkzY2Y3NyUyQng5ak8xJTJGbHZvMEVlalQzODhTdkpxRE1qRnhYbEV2dzhUWDlsczVoJTJCWSUyRmtTVHluZSUyRnBIVFZZNkxkc1ZVaiUyRmREdDFoZiUyRml0djkxdCUyRnNNZ1JXNGR4bzlYNHZEaXlTcWNmb24lMkZPJTJGb3lZSnNRR0hmSkw1RnNyWFVkWmswbTZ1VGJSM1VUdkhRQWd6UmprT05TT0RsYTVHZ2NYMCUyRlVKTkwxUzB2NDFEUEZJTm04RyUyQkUlMkZyeW0lMkJITUQwazUydHhlTHBwanFQVVBmRjZsNVg4eFdsbTk5NWV2WmxndUxTZGtqUjlnVFdqclhvdlA0WFRFUE02d3d6S1NLQ1Q0dHVvSU8lMkIzdmtlODB4WFUydFcxM1pRJTJCbzE1YnE4bnBKOFVsRUxWcCUyQjNzTUJXT3NYT3RXeTJpRXlYTnVDeUl3NU15ZjhWc2FzZUZQN3R2aXpMNHRxJTJCVHpOVWZ2VCUyQk9VNm5wa3k5WnJjaVZBTzVYdyUyQmE4c2lzMDFycCUyRm1DMDFPNVlyU1dKNGtYY3lGaUI5bnNLJTJGdDVmbGp6TFh6TWxnMGJSUXVqUUVTYlZsRGNsNUllbkw0a3llZWJQSXA4eTZqNWUxRFNFalgwWFdPNFFzcUtZayUyRmZSZ1YlMkZiNWd4OGNITWU1bEdVb200bWp1UG56U1clMkYxT2ZWTDZSN3NKVzJrZUtGVUd5Z0doSUozUEttTlZ5JTJGVEFrMXBkV2M5ekJkcnd1RWxjVEllekElMkZFTWolMkZtalhidlF0YVczdEVCZ0NKTTZQdUNIRlFFeHRpelNLSTFESEp2NVZ1eEtyV01wJTJCd0M4SlBoJTJCMHYwWkNOTHZyZlVyR0c5dGpXT1ZRZmtmMmxQJTJCcWNQZEhtZTN2SVpWMjRzS24yT3glMkZESkJTeXp6QnBscnFXblNRU3hMSTBQNzZFc29JRHFPMyUyQnNNZ21sYXhjZVVkUlhVN1pTOWpKUmI2MlhvVVA3UUg4MGYyayUyRjRIT2dYZHlWWWdIcDElMkJXUVc4ZzRUelF5b1FwSklWaDFWdWhHSkNoN0ZHOWhyZW1wS2hXNHNyeU1NcDZobFlWJTJCJTJGT1dhJTJGYlhmayUyRlUwWkpPRUwxYXl1MiUyQnkxUDkxdWR2M2lmOE91Q1BKJTJGbWhQTDF4YWFKZXR4MHk0ckZGTXgyaW1KSlN2aEhMWGolMkZyNE4lMkZPOUclMkZ3QUoyOG8lMkZZdlk2OSUyQnFPTWdkbFl6cVBtV3k4eHI2MTVhb3VveEFBM2RrNGRKQjAlMkZmUkdqb2ZCbDU0VSUyQm5DeVNSTlNhMWwlMkIydlFxMzg2MSUyQnk2NUdQS2N6dHF4alk3TkV3NGpZYlUzMnpvTnBwRjFxZnJ3MkpYNnlpZXJIRXhvSml2V0lmNWZIN0RZWW5aYVkzcE45TjVOMW45SkpFYnVJd3lSb2lzWTFrRGJwVnUzRiUyRmlkTTd4cGwzWSUyQmFkRnQ3bTV0bGUzdklVa2FDWUJ4OFFvd29mNVdCJTJCUE9ORzBqdkxZMjhxbFJVZ3F3b3lPT3UzN0xwaVhsM1hianlacWs3WGdsbXRaSWZURUtOUUdoNVJFRnZzeHI4WExqZ0lyZFdRZWR2eTdHaVFQcmZsNFNOYXhWZTVzMXE3UnAza2klMkZhYU5mMjAlMkIxa1QwN1dHQ3F3Y01qZEpGTlFjOUMyTjlCcU52SGMyOVdpbGpTVkdJMkt5Q29wa0Z2JTJGd0FvdEh1OWNPcTJkMUpZVzB4NTNkaEFvNE81M0pRdDhNWWY5b2NNRnlCMjNad0dPUUlrZUNRR3hxd2ZJc2F0TlFTUXJJcm1PVWJySWhvUWZFRWI1TExIelBQNlgxVFY0UnFGbzRvekZWTDAlMkZ3QXBEOEVtRm1zJTJGbHhlV0JOeG9FcHVJaHViU1FqMUIlMkZxUHNId28wJTJCNGx0VW1XN1JvNW9qUm8zQlZoVDJPV0NpMXQlMkJiUEoxcEZDZk1YbEpndGwlMkZ4OTJWQ3lSSHV3amI0a1glMkJkZjJjaU9sRzJodWhjWDJuOEpJMkJFOEZISHpNVGIlMkY4VFZjNkZwV3V0YXlTUGJsSkVtSEdlQ1FWVndQMVpHdGNzSWJlNU4zcDBVaTJNbFdhTTdtQiUyRndCcFE0JTJCMUYlMkZMa1RHdWxobkRJWW5ZcHJmNnRZYXhheHhDRGx4SWFHN2lrbzhaN2tHdFdyJTJCM3l3eHNkR2wxV3dpdHpHYmtna1J6dWdER25SbTM0UjAlMkZaYklKQlp3eHY5WWhBVng4UXAwSlBpQm5hZkpsMWVYZWtMTmR5cktPWEdOZ0FEUUQ0ZzNHZyUyQkU3WThXeVRMZmlITkpiYlF2TkhsZSUyRmU1MGVRWCUyQm5YQUQzVmc1M0VvV25LSW1oUW1uN1B3djhBeVlSWDl4cWwxZG1YV09TM1hIaXFNbnAwUUVrS3ElMkJBNWZhenJRd0hxT21XbXFRR0M3ajVEOWx4c3lueFZzRnNMZU8zOWhiMzl0SmJYTVlsaGxIR1NOdWhCJTJGVWZmT1pYeTMlMkZsN1VWMDVuNU1ncnBOMUxUakxDVDhWbmNFaiUyRllmNU9kdDFuUWJ6UjNKY2VyYXNmZ25BMiUyQlQlMkZBTXJZQiUyRjVWM1klMkJkdEF2aGVmdWJybiUyRnVOdXgxamtRVVlrRDdVYm5pciUyRjZ1RXE4RDFyVEZrOVhVZE5nYUhpeCUyQnUyWFZvSFBjRCUyRmZiZnN0blFmeUFlYiUyRkZrdEMlMkZwdGFTRjFWZ0ZOR1RpWEZmaUElMkJMaiUyRmxaQzlXdU5kOHA2a05NMWUwNGFuWXNZMm1ZN1RXJTJGWkcycEtqZnNTNEswMDNta0NIemw1V21ETGF6ZXJjV29COVdDdlgxRkIlMkZlUXQ5bHY4bklvZllOUmw1RlBJM25qVGZPMmxpN3RhUlhrUVVYbHAzUmowWmY1b24lMkZZYkpYaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkYlMkZXNyUyRm16WnNWZG16WnNWZG16WnNWZGdIVlk5UG10SGkxSmxXM2NnRXVRQlVicjF3ZGdQVWROdHRUdHpiM0lKV29aU09vWWR4aXJ6SHp0UCUyQmkyMGFUeXZkbTZ1RGNKU0NNSklQVFZoUldLajdCYmJpMkI5YjhrZVpyblYzRnZiZXJic1FzVndIVUtGSjZ0VThoU3ZoayUyQiUyRndBUEd5MUd3dkxPa3FLNWp1MGNJUDNZUSUyQm5JdEFQaWlmOEE0bmtrcGhLUWFRT2s2ZW1sNmJhNmZHUVZ0NHdoUGlmMmolMkZ3V08xTFRiUFZyR2ZUciUyQklUV3R5aFNXTWpxRCUyRkVmczRNekVWd0lzZzJOaSUyQlZQT0hsbTU4cDY1TnBVMVhoUDcyem5QJTJCN0lXUHduJTJGWFg3RW4lMkJWZ1cyOHM2M2Yya1dyMjltNzZZczZ4eVhRcHhVZ2dOVWZhNGl2MnVPZW45Yzh0Nko1aXQwdDlhczB1bzR6eWpMVkRLZjhsMW95NUVMN1RyaUdXMzBMeXRwN1E2RGJzMGQ3eEk0T3olMkZGV1BseWNtTnZpYiUyQmZLeml1ZkVUczdXWGFoT244UGg5ZFZJbjZhNyUyRmV3RHpQZDN1a05wbHpZdHh0RWhXMmFkVkJLelJrdFRrYWxPZGYlMkJCdzYwYnlkWiUyQmFOUiUyRndBUmFQcTBWak9JdzUwOWJjTElrdyUyQjE2eWglMkZqUm0lMkYzYW4yOGRlNmRMWVRYR2s2eER6dHB4OGFIb3luN0xxZmI5bkkzWVglMkJyZVE5VGhTM3BjV2hjdmF6TUJXU0UlMkZiZ2FRJTJGRjhQOEFKbHJyRHZ1bnZtcnlCOWJ1RnZ6QXRucmtRRDg0eiUyQjZtS0hrR1J0dSUyRjgySFduTyUyQm9hZExwVTVhQzRaZVVMOUdpbCUyQjBqS1IwYU9ZWk9MTzgwanpobzBkM1p2NmtNbjJXRlBVaGxHeFZoJTJCeTZIN1dRV2FPODByVjFodndCTWpjZlVBb3NrVGJMSVAlMkJOc0lyNW9TdTEwdGZPdDdJa3Q0dGg1aWpRQzZoa1NzZHo2ZndmV0lpQ0NyN1VtVGolMkZsNUpHJTJGS1RTZFRqZyUyRnhESUxoNFVDVWdIRDdQOEF4YWZqNDVHUE1ka1l0Umt2YldmNmpld0VYTmhjcjlwcFQ5cEVWYXRKV254SnglMkJ6blJQSWZteiUyRkZ1amZXNVklMkZTdkxaJTJGcTk0Z0JDbVFDdk5RZmlWWCUyQjF4YjdPQTJObGVhWCUyRmtyJTJGQTE5SmIyck8lMkJsWGJjN1V2dUZidXZMJTJCYiUyRmlXQzdNN0hPdWFycGRycTlqTFkzaThvNUJzZTZ0MmRmOEFLWE9QNmpiYWo1ZHZwTEs1VVNCZDBmY0IwN092OGNNVDNxa1A1bDZ0cmtXcDJrTmk4c1ZyNkNTaG95VkR5SDdSSkhYajhPUXBmTmZtQ04xJTJCc1hjc25CZUNyT2ZVQVVkRkhQNHVQMDUybnklMkZxMmc2dmVSNlQ1aGdYOTRBbG1zcCUyRmRzdyUyRjNXJTJGJTJCVTM3R1NIVWZ5cDhuNmhVcGF2WnNlOERrRCUyRmdINXAlMkJHQ1hOZVR3TSUyQmJ6ZVd4dHIlMkIzU1ZIRkdNWktNUDhvQnFyJTJGd0FOaDlxdjVncHIza1ZmTFY5emsxTzN1SWpGT3dyenQ0dzFHWmhVZXFuMlA4ckpENWklMkZKSnJLMmx2Tkt1ZnJTeCUyRkVZQ25DWGlPdENwS1B4JTJGMU01MDNscTd0cER4RE5VVVVHbFB3eUp0V1FmbGZwTVdzZWFGdExnc3NadFpuREoxVmh4Q24zNjUxZTM4cWFucCUyQnMyWlg5NWJyS0clMkJ0UjdVVmZpbzYlMkZzMTZZUyUyRmszcEdtV3h2TlIlMkJzcEpxZkVXN1duUjRrcnlMRlczUHFOJTJGTCUyRkxuVzhJMlVzVzh4JTJCVm83MW4xTFQwQ1hwM21qR3dscDMlMkY0eUQlMkZoc2dsOW95WFVheFgxdThMb0NZMmRTdFYlMkZhRyUyRmdjN0pURWJpenRycjB6Y1JySVltRHhsaFdqREpDWFFvZVZlVzlSdjhBeTFQS0wyNWt1Tk85RUxFbyUyQklqZ2FvS2slMkZBcUp5enF0cmRRWGtDWE5zM3FReXFHamNkQ0NLN1pGUE1QbDFZZzk1YUxXQTd6UWpmalhxdyUyRnljQjZKck56WTNCVzd1QWJBUktnVXFTUVZJQzhLZkNxOEs4dmh4cTl3bG50SzREdnRKMDdVZ0JmVzZUVTZGaHZUd3FOOEZSeVJ5b0hpWU9qQ29aVFVFSEg1RkRDOVklMkZMNnd1U1o5SWMyTTNYMHR6RWZvNnAlMkZzY0w5QiUyRkx5OFhWSk5TOHkzWXVvNDFhS3owJTJCRWtRckd3b1dsTzNOMnpvbVZURFpWNGw1bjhzM1BscTk0b1MlMkJuVGslMkZWWmoyNyUyQms1JTJGblglMkZoc01OSTg5M1dqMmh0MnRoTlZTRXA4UEdTbEJLJTJGJTJCU2YyODZucU9uV21xV2NsbGV4aVNHUWJnOVFlektmMldHY28xM3loZGFWTVVUOTVBMzl6TDBERHdQZyUyQklaYzNwUGx6VTVkU3RHYTRJYWVOZ0daYUFGV0hKV29NT2M1djVFMUI3V2Y2dGNBb0QlMkI1UExiM2pQMGZZem80eElZclpJbzVVYU9WUTZNS01yQ29JUHRpZHJaMjlsQXR0YW9JNFVyeFFkQlUxT0w1c0NzTzglMkZ3RDVlNlY1NzA4UlhOSU5RZ0IlMkJwM29GU3RmMkpBS2M0bSUyRjRYT0lXWDVSJTJGbVZvT3B1bW13SXlTQXhOTXNzWmhaRzJxM01xZW44MGVlb0tacVlxOGw4aCUyRmslMkZjZVc5UXQ5WjFEVTNXNGdQSkxTMEpDRUd2d1R5dFQxVTMlMkJ4NmFybldzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjElMkIlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhVelpzMkt1elpzMktvWFVqSUxHNDlFMGs0RUtldEs0M1RZa2hzb1FwNUVxR1p2RW52Z3AxREtWYmRXMkk5amhEZGFEcVQlMkZ1TExXSmJPelA4QXVsRVZuQVBWVmtiNGhpcUI4d1dVWG1TJTJCWFRZV1FpM2lrWnBodVVscU9LbW43UDhBTm5PdFJzaVBXMFRXVUtxRDlvZmFqWWZaa1ElMkIzJTJGRExuWXRIMFd5MFczYUMwQkpjOHBKSFBKMko4VGhWNXU4dEpyZG9acmRRTDZFSDB6MExqJTJCUSUyRjhhNGJUYnhYUVBNR3ElMkZsOXI3bVNzOWpjVU4zQ3YyWm8lMkIxeEQ0U3AlMkZ6Wm5hTllodGZObWdSYWhvN0pjTXdFMXBLQ0FTUDI0NiUyRnNuJTJCWmY1OGdzdWdXV3RhUEZwMXhSTDIxcUZrRkN5UDNVOTZZUiUyQlVmTXQ3JTJCWCUyQnF2cG1xRXRwVXNuR2VPdFFqRTBGeEQlMkZ3QXpVeE95JTJCNWtIbUdDT2ExczclMkJWZUVzRllwSEkzU3Z3eUJ2RGk2NDdSdEgxYnkzcUVYbVBUNVZsZ25XbW8yQzFBbWo2cklySDRSTW5WY0N6M0Z2SjV4MXBJcVgyaDMwY1Z5M291djJuUUVla2E5WFpXNVpKTlB1bHQ3ZGJacFRMYXNQOUhsWVVhbFA3dVZmMkpsSDJ2JTJCRXc4OTFaelkzdHZxTnRIZFd6ODRwQlVIb1FlNnNQMldYOXJDN3pKb0VPdTJYcDdMZFJWYTNsUFk5MGIlMkZBQ0h3aTBJYWhCcXRkT285aEtmOUxqWTBWZjhBTFUlMkY3OHliWkZENTkxalMzUjNnblJvNVltcDRNakE5c25Ia3I4d2VSaTBMekpJSTdwUUV0ZFFjMFNZZEZXUSUyRnN5JTJGNVg3ZUglMkZBSnc4dUxxTURYOXFnJTJCdFJMJTJCOFVmN3NRZjhiTG5KYnV5amNORktuTkQxVSUyRnc4RGg1cGZRbzNHYzQ4N2VWRmhNbXEyS2Z1SE5ibU5SJTJGZHNmOTJLUDVHJTJGYSUyRmx5UGVYUE0lMkZtZnkyWTRwbWsxUFJxZkJCS3BOd2lEcjZFMyUyQjdPSDhqNTElMkIxdWJYVTdKTGlLa2x2Y0pXakRxckRkV0glMkZFc1Y1UG50b0ZpdVV1UU9GeEZ2SEtwS3NQcFduTEpaNWI4dzY1cDF4RWd1WHVJcDNxOGQwN1AxJTJGWlZtJTJCeCUyRmtjY2JyJTJCaG0yMTI1c2JQZ2dYOTVBWnE4RlJoeTNwJTJGTDhTcmsxODFhREhxZW1wcXR2Ukx1MmhEbmdQaGVNRG1WJTJGMlAyb3pqc3JLTFc1anU0RW5pJTJCeTRyUTlRZTRPTDVEJTJGQUNwNWhndTdpT3dra1VYRnhENnl4OURXTThITk1tR0pGRkRSRlJRaW9QVUhJaHJtZ3JBWHViZEsyejE5V09sZUZlcEglMkJSa3d5bUNrVUlxRDFCeEJwV0lhTnEwOW8zMVdVUnJab2llbTMyZVBFaGVDSUI4VlYlMkJMSmNHQjNCQkh0a2ExTFFYVm5lMFhuQzllVVElMkIwdGV2SHhYQTJseGF6SGZXNjIwcngyYXRXNGdrU3FGT1BDZ2R2akRDbFZ3a0E3aFdZWnN3elpGWFluTkJGUEcwVXlDU052dEt3cURpbWJGV0U2dm9FMWhJYnUwQmUzQnJRVkxJUDhyeFhKUm85MmIzVDRaMiUyQjFUaTN6RzFjR2tBaWgzQjdaU1JwR3ZDTlFxanNvb044TnF1elpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOUR2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZpUG1ieW85MWNmcHZRaUlOVlQlMkIlMkJoNlJYU0Q5aVh3bCUyRjMzTiUyRndXUXpXOUFYWG8lMkZYYUZnN0wlMkIlMkJoSzBtamRCdWFmekFDanJuWWNEVFdOclBLazhrWU1zWkRJNDJOUjQwdzN0UlczejFwMmw2aG8lMkJvdExBZlhWRTVPZ0RWbGpBJTJCTGolMkZ4Wkd2N09TMkJiZWFSYnNjcEk1WXVMUXEzRVRJZmlRY3YyWlZQOTAlMkY4QXNNazNtaTFGanFCbnQwQ3BjSUhJVVUlMkJOVDhSRlA1dHVXUkRURkV1bHdQYVA5WWpWU2ZWakJJRkdQTSUyRjdCdkhDT1NYcVhsdTZ0cm5USTF0N1kyWmolMkJHVzFZaG1RJTJCSmNmYjVmelljWkJQS2wxSTdHUlhIS0dpM0FZJTJGYWpQUnZkc25RTmQ4QkZGRGpuTCUyRlBXaEphWGd1SUtSdzMzS25na2xQaSUyRjJQeGNzNmprWTg5MlVsM29ucXdvWkpMV1JaZUFISWxUOEQ3ZkpzQVZCYUxwVWV1ZVM5UHRyaVlQY1d5a1FYa2ZaNHlWREQlMkZKUDJXd1g1WDFOSjJOclFJR1hrb1hwelE4SlA2NUdQSmZtT1RSNUcwelhMbUdDemxZbXpoWlBTZUUwNWNlUDdVVGpmbGlPaGFna1dzM0NXMGdrVVhiUFpqb1pWa1k4a1FIcjhPU0hVSlpENTQwdm1ZdFZSQklBdm9UbzI2MEpyR3pVN2N2aHphSjVqZ20wdDlPMXU3Z2l1JTJGUmRZJTJCSjQ4b3lDZyUyRmQ5UXlmWiUyRndBckpoUEJGY3d2YnpxSGlrQlYwUFFnOXNndCUyRndDU0xwSnk5cHhuaVBSaVFzZ0g4cmZ6WUI1cWwlMkZrcTFoWFU0WmlnTndqc2l6ZnRlbVUzVWY1SnpwJTJCUlh5bG9GJTJGcGozRnpxWWlSM1lyYXhSRXN5eCUyRnpUT2FMNmolMkZ5cDhDWktzU1VPelpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOUh2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZnMzVpUHJNRUZsZDZYYlIzQ1JNJTJGcm8xZlVJSUh3eCUyRnM0VSUyRmxycU9rejNjMWxZUW1FTkZKSThEQ2dSeklESWc1YjFKYXZUT2lhalpMZjJjbHMxS3NLb2ZCaDlrNXlkcEpQTCUyRm16VDlaY0JJV1kydDVzRm9EOExzNUMxJTJGd0NEa3lRNUt5aldkTEdpNm1sM2JyU3l2S3h1bzZJNThQOEFKUFZjbE9pWFp1clBpNXJMQWZUZjVmc243c0UzZHJCcUZxOXZMUjRwVjJJN2R3eSUyQiUyQkYyajZYZjJGNWRTM0VxTmJ5aFZpVmE4aVYlMkZiZmFnNiUyRlpYQmRqM0tuV1VSWEx6WUZZVjVuOG4zdXM2dXQ3YnRFSVRHc2JjNmhsNDE4QjhXRmQ3NVltOHN2SHFWcVByUWlDc0pTUGlpa0gyalFmc05uU2NheWh3VllCbE94QjNCR0cxU2J5N3JmNllnWjVLQ1pmdElCU21IZUZsbG9kbHA5NUxlV3FsRE1LR0lmWUI3a0REUEUlMkJTdXpaczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRiUyRjB1JTJGNXMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWkZmTSUyQmlwTFclMkJTSlpBZjcxQ3RhTVBzeWdmOFN5VlpSQUlJTzRQYkNEVzZwUDVZdkRkNldpdTFaYmMlMkJpJTJCOVR0OW12JTJCeHc1eEczdGJlMVZsdDQxakRIa3dVVXFmRTR0Z1BOWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlQdiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14ViUyRiUyRlopO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtib3JkZXI6MXB4IHNvbGlkICMwMGFhMDB9Lnl1aS1za2luLXNhbSAueXVpLWgtc2xpZGVye2JhY2tncm91bmQ6dXJsKGJnLWguZ2lmKSBuby1yZXBlYXQgNXB4IDA7aGVpZ2h0OjI4cHg7d2lkdGg6MjI4cHh9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtc2luZ2xlcXVvdGVzLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LXNpbmdsZXF1b3Rlcy5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYTViNmQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtc2luZ2xlcXVvdGVzLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1yaW5nLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtY2VudGVyLWJ1dHRvbi12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlciB2XDpvdmFsLnl1aTMtZGlhbC1tYXJrZXItbWF4LW1pbiwueXVpMy1za2luLW5pZ2h0IHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1tYXJrZXItdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1oYW5kbGUtdm1se2JhY2tncm91bmQ6bm9uZTtvcGFjaXR5OjF9ZGl2LmJhc2U2NC1zaW5nbGVxdW90ZXN7d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCUyRjlqJTJGNEFBUVNrWkpSZ0FCQWdFQVpBQmtBQUQlMkY0UmZKUlhocFpnQUFUVTBBS2dBQUFBZ0FCd0VTQUFNQUFBQUJBQUVBQUFFYUFBVUFBQUFCQUFBQVlnRWJBQVVBQUFBQkFBQUFhZ0VvQUFNQUFBQUJBQUlBQUFFeEFBSUFBQUFlQUFBQWNnRXlBQUlBQUFBVUFBQUFrSWRwQUFRQUFBQUJBQUFBcEFBQUFOQUFEMEpBQUFBbkVBQVBRa0FBQUNjUVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE1pQk5ZV05wYm5SdmMyZ0FNakF3T0Rvd056b3hPU0F4TkRvMU9Eb3dOUUFBQTZBQkFBTUFBQUFCJTJGJTJGOEFBS0FDQUFRQUFBQUJBQUFCd3FBREFBUUFBQUFCQUFBQlJRQUFBQUFBQUFBR0FRTUFBd0FBQUFFQUJnQUFBUm9BQlFBQUFBRUFBQUVlQVJzQUJRQUFBQUVBQUFFbUFTZ0FBd0FBQUFFQUFnQUFBZ0VBQkFBQUFBRUFBQUV1QWdJQUJBQUFBQUVBQUJhVEFBQUFBQUFBQUVnQUFBQUJBQUFBU0FBQUFBSCUyRjJQJTJGZ0FCQktSa2xHQUFFQ0FBQklBRWdBQVAlMkZ0QUF4QlpHOWlaVjlEVFFBQyUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFEQWdJQ0FrSURBa0pEQkVMQ2dzUkZROE1EQThWR0JNVEZSTVRHQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVOQ3dzTkRnMFFEZzRRRkE0T0RoUVVEZzRPRGhRUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQWRBQ2dBd0VpQUFJUkFRTVJBZiUyRmRBQVFBQ3YlMkZFQVQ4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFNQUFRSUVCUVlIQ0FrS0N3RUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFCQkFFREFnUUNCUWNHQ0FVRERETUJBQUlSQXdRaEVqRUZRVkZoRXlKeGdUSUdGSkdoc1VJakpCVlN3V0l6TkhLQzBVTUhKWkpUOE9IeFkzTTFGcUt5Z3laRWsxUmtSY0tqZERZWDBsWGlaZkt6aE1QVGRlUHpSaWVVcElXMGxjVFU1UFNsdGNYVjVmVldabmFHbHFhMnh0Ym05amRIVjJkM2g1ZW50OGZYNSUyRmNSQUFJQ0FRSUVCQU1FQlFZSEJ3WUZOUUVBQWhFRElURVNCRUZSWVhFaUV3VXlnWkVVb2JGQ0k4RlMwZkF6SkdMaGNvS1NRMU1WWTNNMDhTVUdGcUt5Z3djbU5jTFNSSk5Vb3hka1JWVTJkR1hpOHJPRXc5TjE0JTJGTkdsS1NGdEpYRTFPVDBwYlhGMWVYMVZtWjJocGFtdHNiVzV2WW5OMGRYWjNlSGw2ZTN4JTJGJTJGYUFBd0RBUUFDRVFNUkFEOEE5VlNTU1NVcEpKSkpTa2tra2xLU1NTU1VzNHVEU1dpWFJvT0pLRmkzT3Z4Mld2YnNlNGU1Z013Um81c295cGRPeU45bVRTUkhwV3ZqNE9jNCUyRndEVmY5V2twdXBKSkpLVWtra2twU1NTU1NsSkpKSktVa2tra3AlMkYlMkYwUFZVa2xDcXh0dGJiRyUyRlJlQTRmQXBLWnBKSkpLVW8yV05ycmRZOHcxZ0xuSHlBbFZPc1d2b3dYWkRaJTJGUU9aYThEOXhybW0zJTJGTnIzUFVzd20lMkZwbVFHYW15bDRiSGlXdWhKVFlxc0Z0VExCdzlvZDk0VTFRNkZrZmFPazR0c3p1cVlmd1Y5SlNsbDElMkZvT3Qyc09ndURYZ2VUbTdmJTJGUG1OJTJGd0NDTFVXWjFWaHJ5c2JLQSUyQmp1YTd6Z3R1WiUyRjFGcUlVWFRTUWN2S1ppNDdzaDdYT1kwdEJEWUpoem1zM2FrZlIzYmxWZDEzcHJNdHVJJTJCd3NlJTJGNkwzQWhtN24wJTJGVSUyQmkyemFmemtGT2dxOSUyQmRqMFpGT000azNaRHRyR05Fbmh6dDd2M1diV1BVOGJKcHlhdlZwZHVadWMyZU5XT05iMiUyRjJYdFhPWTJWVTdyQTZobk85UnVKUyUyQnIxaE8xbGd1R0pidVl6MmV4dHZ2M2Z6TFBVJTJGd0NFU1U5UWtra2twU1NTU1NsSkpKSktmJTJGJTJGUjlWV2YwaXdpdTNGZjlMR3Nld1QlMkI2RDdQJTJGQXl4eTBGbXVuSDZ4UERNcGdkJTJGYlpGVCUyRndEb094JTJGJTJCMjBRcDBsQzAyQ3R4cUFMd0R0QjRKOEZOSkJUVm92eCUyQm80anZiTExHbGx0VHVSTXNzcmYlMkZBTkppeiUyQmhaRHFNTyUyRkV5Q1gyZE9jNnQlMkJrdWMxZ210JTJCMyUyRmhhUFRlb1o1czZSMUlackJHRGxrTnZJJTJCalhjWVl5eCUyRjd0V1Y5QiUyRndEdyUyRndEd2x5RDFMcVdIMGpxMk4xTzU1cnhPb2dZMXJ3QzRDOXV1UDZtemR0OVdsMXY2VCUyQmIlMkZBRmRGUyUyRjFNeXElMkYyVlRodXNhJTJCMnRzdDJrNnNQdVk3M0JybSUyRm8zVnYyZnklMkYzRjBTNFRBenElMkJtJTJGV0RxdUtHbmJoV095YTYyRFVVbHJjbXl1bGt0WjZmMmV5MTlXejglMkYyTHMyWiUyQkZZeDFqTDZ5eGdCZSUyRmNJQUkzQ1hmTklxWlgzdXJzcXFyWjZqN1RxSmdOWTJQVXNQUDBkeXBmV0olMkZvOU5PVDJ4cmFySFR4czN0WmtmJTJCeTc3VlI2djliZWpkTnNia2IzWmJxbTJzZlZqZ09PaHJkWkZsanFzZmZYcyUyRm12VjlWJTJGJTJCRFhIZFolMkJ1dlU4ekE2aSUyQmowMlkxemF3YVpMdDJMWTIxdGx0YjdYT2I2ajYlMkZ3RFIxViUyRnpWMzZ2NnJQVllGVSUyQmlDczVQUzdjZDQzTzJXVU9CNzdkMVglMkZUMjdsd3ZWbk55S0s4ZDE1cTZoaWoyMDdvOWRnM0RIZFc5bTl6THY4QVElMkY0V3U3MUslMkZUdHI5YXF6SiUyQnVIVjh0bVIwek5veUx2c1hVOE5yN2NkdGptdE4xSjlLJTJCMnBvZHNiazElMkZvJTJGOEEwWXNuRzZ0ZSUyQm5MWmJkWFhZNnB0dEFETnd1Y3dtaHYyY1didjB0bnIlMkZwS25mcEtiS2Y4QXRzcUQxRHZyam5mVjcwY0tsbGRnemdicWpmN1FIQjNwMnNHMHNiNmx2MCUyRmZaNlRFY1pnNjMweHoydmV6SzZqVmJmaFZ0ZjZiaVElMkJ4bHRtTlk3YTJ6OUpzM1Z1JTJGd2F5dnJIaDElMkJoaGRLdjNYdWJqQmhZOXdEYkh0UHBPZFhrT0g2dDFEZCUyRlJzbCUyRjZDJTJGd0RvbVY3Rmc5V2MlMkZGJTJCcTNSTDZiaWJlbjVXVmpoNGxsamR4YmV4bHRmMDZMYTl2dnAlMkZNJTJGd0FGWiUyRmhFdXFuMHI2bGZYTTlXWXpwdlZvbzZ3eHZjYkJjR2o5THRyMDlMTG9qOWJ4ZiUyQnZVJTJGb2Y1bXo5YXZySmQwJTJCMmpCd0hBWlRyY2QxN2lBN2JWWmEyblkwSCUyRkNYdzl2JTJGQUFkZiUyRldsNXppZFFaOVpjWTNsM29kZHdnMnoxbUhaNnpXZlF2M3QyJTJCbmswJTJGd0NuJTJGd0RSZjh4ZjZEZjFEcXZYR1olMkJlNXR6c2k3R2Q2bG0ya1BzcU5icXFPRzElMkY0Q3V4bnB0JTJGUzclMkY5STlBTGpSMUdoN2Y5NiUyQnVKSnBBMUtaajJXTkRtT0Rtbmh3TWhKYXlTU1NTVSUyRndEJTJGMHZWVm45YWlyRkdZU0dqRWNMWHVPa1YlMkZ6ZDVKJTJGZFpVJTJGd0JYJTJGcmEwRUhNOUQ3SmY5cEU0JTJGcHY5WUhYMmJUNm1uOVJJS2NFOVU2bGdYbkpEdjJsMGpOJTJGUzQ5N1MzOUM1MzBzT3l4biUyQkJjJTJGJTJCaDVQODMlMkYya3lmUyUyRlI1TmxQcnYxNnV3Y3pFeHNQSEZvekxCUldIejZycmlXTTlPdXY2SHM5VDN2c2V1ZTZCOWJ1b1pGNXhCVTg0QkRDJTJCdG9aWVcxUGN6RyUyQjAyR3htNzFHYjJYUDJmb2Q3UDVtdGN0MTY3cSUyRlQ4N0dkZmslMkZic2NXSEk2VjFOclFOR3UzTzJOWjZmcDVGTjlkVGNySDNlcFI2ZjlSS3dSWVh6aEtFdUdZbyUyRnhmU012TTZsWmxGJTJGVmZTb2JVMTFROU1HeXFMZmElMkJyUDlQSnNyOUt6MDluNmJHcSUyRjdkV04xejlWeEMzS2ZaVDAlMkIlMkJQVXlHZzVOSWFQZFU3ZXpaZTdLeFBSJTJGUjVHeXIxc1g5RGI2JTJGd0RndVp4JTJCdjM1MmJlNFdOd2Z0JTJCOXRiMm4yMW16YSUyRjA3WG4yJTJGcDdxbVZlcDZkYlAwdnFmb2xxWkQ3bVk5MWVEbVhoOXBCQVpER2pUOWF3dmIlMkJrcDNXJTJGcDJNZGtmcGF2MWIlMkJYVWIwV3VsVGVQMjNoNURpM0pMM1VZV1RZemx6YktuMXNjNXJON2JhTTNGWjlwdzh4cnZTdnIlMkZRZjBpbTZ1dkg2dlk3RzZoZlMybXgxV0ZZYXE3Ym5rJTJCbzJyMHJLUFRhN2J1c3R4WDIwJTJCeiUyQmxmNFJXJTJGcVBYZU00MDNzJTJGUTlMcGRiUTR2OTdXbDREY1cxbnVkNlBxZnJIMmU5bnN6TWF2TnglMkZzOSUyRjJoQTZpNXI3N0haTEgyNFRuMVc0JTJCVXdqMlB2YTNKZGo1YmZ6YUhiOG43RmslMkY0UDlZeFAwdFg4d3VscWFXZmIxQ3paNkdhTTMwNjIyV0REJTJGU1YxbXAzc2ZZNnRqV09zWTF0Zjg3NzZhJTJGVFE3czI3cUZOVklycXdBZlVzYlpSWHQ5UzBOOUt5MXRYODMlMkJncmUlMkYxc2VqJTJGQUUxbHpLbHRkRHRiaTlaSnNxcWJUYUJYZFMwVGJXNjhQeWNVeE5qOHFySWJSJTJGcFBVJTJGU2I2JTJGVHl2NlZXZjBxdk9yem1zWWFzbkd6SG1rN2d4MVphNksyWFI3c2QlMkI1djZLNzlKWGkzYlBVJTJGVjhpNzFSUlU1JTJGV2FMTXY2a1lqN1NHWDlMNmclMkJxSyUyRm9zcnltZXV4MWNmNEIxN2ZZc3JwdVBtTnhmdHo2M1Bjd2w5RFdEUTJzSXFaa05KJTJGTlplNmx1UjZmJTJGQUFYJTJGQUFTMWYycFhYMHZxJTJCSmxuN0xma1ZWdGEzWkFmbDQ5MjlteW4lMkZBNzZyTHE4NnIlMkJibyUyRjRxeWhWcnVvWmZTZWs0bGRtTTEyUGUyMjdEOVhRQnR2cHR1MyUyQjdkNlZyNjZYZjJQVSUyRndpU25zdXFuRHlMTWZGdE1aT1JqJTJCclhTUGVIRnNlbzJsN2czMUxhJTJGViUyQmglMkYyb3ElMkZ3ZnFmcEZ6blZjZDl1RFppdmF4ekRaWGExenp0WmFYQjFMVyUyQnYlMkZnYiUyRlpWWGk1dHY4MyUyRlJzajlBc0xxZlh2MmowJTJGcFhxUEZlZGdOdXJmYTEwRjN1cXN4OGx2OEFvM09idnJmJTJGQU1UNm4lMkJGUXF1cTU5JTJGVVJlYzF6YjdDSFhNYzhodG13N240N3Y4QnR1Y1BVYjZ2NlA5TGQ2OWlOb1M5SDZWazBaemNwajN0cXFlVzFBQXR1YyUyRjhBbTdNZXlodjZXdlolMkZOWlglMkZBSUV1Z3p1azE0ZUxpTjY5ZmJpNDl1NndnQmp5V05iNmRQNklPYTUyVjZ2dDI0N1AwZEQlMkZBRlAwYWpqZGM2a0JlZWtZUWQxRElzMnRzWlZaYmRWWHQ5dFlxc0c5JTJCMyUyRlRQWiUyQmwlMkZ3QkNzYWpwWFYlMkJ0WDJad28lMkZhbDdXdXZ2OVMwTWVhMiUyRlQyJTJCdlo3bTFlMWo2R1Y3NlBaJTJGcEswTkU3YXZwSDFaNjluZFU2VGk0bVA2bVZaa3RCZGJrUDN1cWJXVFJrakt1WUdiOXQxZTZ2Mjc3NnJQOUl1eXc4VnVKanRvYVM4dGt1ZWVYT2NkejMlMkYybkx5YjZ2ZFp2NkRqREt3bVZ0M2x6YnNaejNWc1pjSGx1VGdYNDk5aGZSWXh1ekp3biUyRnpuc3lLckxMdjhIMnZUJTJGcjloT0RLJTJCc00lMkZadVNXa3ZydEZqQzF3TG12ciUyRldLcVclMkZtJTJCemJaJTJCa1JSNHZWcEtuMDNxJTJGVGVxNDdNbnAlMkJReSUyQnQ3V3ZHMCUyQjRCdzNOOVNzJTJGcEslMkYlMkJ1TlZ4QlQlMkZBUCUyRlQ5VlRPYTE3U3h3RG11QkRtblVFSHNVNlNTbnhmNng5Q3pQcXQxRUNpeDdHTWViZW41UTBjYW5leXlsenZvdXRvM01ydVolMkZoYXYwbnAlMkZwRlVyeWFNakZ2cnpwczZka1BiWm1Vc0h2eDd6RmJlcjRmN3JiTFA2V3olMkZBRWxuJTJCaXZZdlklMkJ1OUw2ZjFYcGwySDFHRzBPRzcxU1EwMXVIMGIyUGQ5QjdQJTJGVWIlMkZ3Qkd2SDh2cEYzVDclMkZRcGNINU5JZWE3YXo2bGVYU2QyJTJCekhqZFc3MHFIYk1uRSUyRndsU1pyRTJOdXpmaktITVklMkJHZnB6UjJuJTJGTDlIOTV3TSUyRkJ5T2s1aHhzZ2l5dXdiNnJtNjEzVkg2TjFYJTJGQUtNclcxMGpxYnJtSER5SGw4TWhqWTNHNnNIZDZQTzMxOGR2NmVpejA3Zlc5UDB2JTJCT0hpUHhjNm45ajU1MllkaDNZbVZ5N0Z0UDUlMkJ2dmZpdSUyRnclMkYlMkZCJTJGcGY1emVoWXYxYTZwVms1V0xuaCUyQkpaaE1MNnJtaVd2c0JZNnQxRm4wbjFOWTc3VHZwJTJGU2Y4V25panFOV25PRXNjakdRNFpCN09pZzBmVjdMZjAxcnI4cnFSMnRlejNYUGJCeDY3WHNZemF5eGpiTWw5bTM4JTJGOUolMkJsJTJGUyUyQnB6cnZVeE1XcXZxTlZ1SmtzeDM0MDJ6VzVvb3NiZFNjaWc3MjVPSGQ5cVk2diUyQmMyWk9MVDZObjg4eTNlNlgxdXlrOU5leHpuWWQlMkJQZGkyTWMxbFR4bDR6dHpuV3UzYktmV1paWGJzOVQwNmYweXBkWTZKMUhyJTJGVkg5V3J0cHN4Nm1NcUZEUyUyRjFXaXNGMzBYTmE1JTJCNTc3YmYwZXl6JTJGUlYlMkJxbkh3VzFSb3RERjZ4YXk0OVR2aWtzOU9ITkJBYzlnMnNmYzFtN1p1MiUyRm9HJTJGUXh2M1BTVDlMdzJkVGJsTSUyQjFXMXNkRGl4b00ydnUzZjA5MzZPdDNwT1pzdXJwJTJGUTVIJTJCaiUyRndhSmo0R1hmMDUyWmplcFJqYm1Pcnl3TnpOakh1bGg5TWVnNXpOJTJCMWxybiUyRjRSOWZwJTJGcEZZeGNIRDZleTZuSXRkU0dBT3RkbEZ3aGxoJTJGUnVIcE4zUHBidjhBNXhucWVtZ0ZPWjElMkZEeU1XNzdUMURJT1F5NHZyYTkxYnFDMDBlbiUyQmlZeCUyRjA2TnJxbmV2JTJGQUlmJTJGQUVqMVd4YUcyc3hLT285TXU2aUszMlVZZU9MSE1MM3ZMck5ycm11MyUyQmx2JTJGQVBSaTFjdnBsMVBVcVczTmZoNVZKMzQlMkJObU85WEV1ckh1JTJGVjd0MWpHTXNZZjBub1A5biUyRkFBTnF2OVE2Vzg0dzYzMGhuMmN1RmQxamNZR3lzalM2cXpMeG1pdTNGeWFkdjg5Nk5YJTJCbCUyQjJlcWhTU0JRMXUlMkZ3ZWQ2ejlYJTJCcnRGSkgxZFpqMWFnRU5zcVp1SUI5RVBzdmJrVzdXajZlUyUyRjZmcSUyQmolMkJqV09jYk53OGhucWROeHEzdGl6WllYT2E0VHk3ZmtXYm1OZCUyRk9iZm9mNFJkcFQxZnFIVXMxcmMlMkZMZmt0eVJVMnZHYTRiU0hOZVB0RkwzZWw2Vm1MbFZlalo3ZjBtJTJGMWNqJTJCWiUyQjBXYnZTZnFuMCUyRnExZVRqZFJJZGxWc3BzcWN4d0JxYzhQYmZXJTJCclgzNzYlMkZUdGYlMkZBS0gwYmNTNnYyV0pYcXVsajRZQ1hFRFpxdXJ4bjFkeFhkUm9zdXc3OGhuWGNSNWRTV3UyMk9yWTJicXNkbjAzWkZUdDkzMk96MlpXTDZsVkxQV29YUzE5SHp1cDlQcSUyQnNmVE1ZdHk4a243WlJYREN5NWhkVmIxREVyZSUyRjlOVTc5THZ4SGJMY2xqN0tmNXJJc3BYRTVtUG05SjZxJTJGTHFhODJZcm12ZlZKSHFVc2QlMkJneXFMYXRsbjBhJTJGMDNwUDhBV3hMbWVyViUyQjVqJTJCeiUyRlU3cXZSJTJCcDlDb3Q2UU5sTEpiWlE1eGRaWGI5TzFsNzNTOTlqbnUzJTJCcTclMkJlJTJGbkVtTjU3cXYxWDZiOWMlMkZxOTlveFdOeCUyQnVZeGN5eDdnOXJqYzJQWHhNNXQzNng2ZGptdDlIMXYwMkwlMkJpOUwlMkZDVldjejlWUHI1MW5wUFdYOUglMkJzeHV5OGJJdEZOb3lEdnRvdDl0SWNOJTJGMDZIZTMxNlAlMkZBRUtvJTJGd0FKOXA5aGJYVzE3bnRhQTk4YjNBUVhRSWJ1UDV5NDMlMkZHQjlRMmRmcCUyRmFYVFd0WjFpbG9FR0dqSVkzJTJGQVBlNyUyQmF5RyUyRjhBYWZKJTJGNnpiJTJCaSUyRlNVSlQyVEs2Nnh0cmFHQUFBQm9BRUFiVzhmeVZKZWNmVWJxUDhBakhQVjMxZFh4TWpKNmMlMkZheTI3TGFNZDFKYU5nc29EeFg5bzlyZjB6YVcyJTJCciUyRlBlcCUyRnBQUjBsUCUyRjlUMVZKSkpKU0ROTCUyRnNyOWdlWEdBQlcxcm5ha0Q2RjM2UCUyQnN1QXd1bVYlMkZXWE5yeEh2Y3ltcWgyUzdJcUxuUmElMkI3SmZqMlVQY0d0cWR2eWZWc3BaN0slMkZRJTJCeTElMkZvYVY2RmZqMDVGWnF2WUxLeVFTMTNFZzdtJTJGOUpLaW12SHByb3JFVjFOREdEd0RSdGFra0VnMk5DTm54RHFkR2IwTHJ1M3FGREhYNDFyTFRXR3hWZXlSNzYyNnRkVm1OYSUyRjFQM0xQV3I5aTJjbXpycFk1dGRCNmd6cEw3S3E3V0dYUHFxZjZEOEhJYzFnWjl1cG8lMkY3VCUyRnptVlglMkZBRFhxcjBick9GMCUyQjQxMzViV1ZGZ2MwNWtEMVdNUDA2YXJpMTdxMjVQODFaJTJCJTJGWCUyQmklMkJuYXVUeXNmcW5RZW9NNmgwNmw5MWVXMkg0andmMXVoZ2M3MExxM0RkVjFYR3htNzhkNyUyRndDZm8lMkZRWGZwSzdHSVJGWDRzMmZON3ZBZUdwUmp3azkzSXlPajVWRG5ONlU1JTJGVU1hJTJGZmxZbExHdUxtJTJCcXhucGZhZHJHMXRkazMwMlVmYXYlMkJzMmVuJTJGTnJRJTJCcmQ5JTJCTmxOZGZTJTJGRHVEWE15OGU3UjFibWpmSiUyRmtOaGw5TnY1OUt0T2VMYk1ETzZGa3RKdGUlMkIlMkZDc3RMaCUyQmhjYXhtNG1ZNW9jNXRMTXIwOFhLM3N0OUg3VFJkJTJGU3FQV1cxMWZBJTJGYSUyQk9PcGRPYzZqcWVNTmxsWWpjZHZ1ZGpXdDl6ZlZyM2I4ZCUyRiUyRm9tJTJGMUUlMkIyRjVqcGYxdTZEajlSeUxLY3F1M3BlYWYxckYxYUdoJTJCaHltMFhNcjkxVGZaa3NyJTJGbmNiJTJGU1dZOWJGVHdmdGZVT3BkUXdSWnZ4c0RMT0xoMnVCZXhyTEgyMVl6TExBSHY5SzNaWCUyRndBSCUyRk9MVXclMkJuZlUlMkY2eFZEQjZsZzQlMkZUdXRFRnJMYUclMkJnTFhEJTJGQzQyelkyeCUyRiUyQmx3N2YwMWY4dXI5T24lMkJyb3lQcWxsWmZUaGhNc3FCWmJsV2h4RmphaEZMTFdFJTJCMjdIWnYzc2JzcjlIOU42MyUyRkJqVzFMOUo5UERhJTJGNnVkY3glMkZVNlRhN2JTSDZ1eExUN1cwT2MwJTJGbzZIVDZtRmwxZnpYJTJCblY5bjFSNnYwN2JiaFp2MnphNHcxNDlLMFZrNmVua01lV1B1MmZ6bjh4VmIlMkZ3ZjBGMUdWaDRtZFNXM01EMnZiQWZBM0FIOXh5b1ltUlowbyUyRlk4OTQlMkJ6dEJOR1M3UWJSJTJCYThuNk96JTJGd0glMkZ0dEx5UmJ5UFVjWE1xenpuWTJOZmg5VHJiWmJra1Z5eHpRQnZ6bSUyQm0wNHZyN2YwZCUyRm8yZnJYJTJCRCUyRlRWMnJjJTJCcm1IMGJxSFQ4ZmNXJTJGYjJOZWQxRnJtV3NhWE9aTGZSTEgwMVclMkJwdTlMJTJCYVhVaUNKSEJXR2VnTTZkMUlkVTZXemJKaSUyRkZiQWFXdVB2ZFYlMkZWJTJGblBUU3RONlU0JTJGV2ZxUGs1amhSajJCb3JEck1YTE9qcW5nZTJtMXJOcm5WM2UxbG5wZjhiJTJGTzFVcm0lMkZxTGxaSDFhJTJCc2VUMDNJd0xhN3M5N0s4bkZyWSUyQng5ZnAlMkJwNk9manVwWjZWdlQzJTJCclkzSSUyRjBQNk95bjlGJTJCalhyS1NDRkpKSkpLVWtra2twJTJGJTJGOVgxVkpKSkpTa2tra2xLUU0zRHB6Y2QyUGJ1QWRCYTloTFhzY05XV1ZQYjlDeGprZEpKVHhIVmZxNE9sNWJjJTJCcTU1ZGx2TExxMkRheDFscHJZN0lGYlA1aTYzYjc3S2Y5SCUyQmslMkZRcnBQcSUyRmNMTUFWbGdydXBjV1hNNGR1Qmo5STB5N2YlMkYxZjAwdnJCMGhuVnVuUG8lMkJqa01tekZ0R2pxN1FDMXRsYjlOanZkJTJGcXhTNmRXTWowdXBIOUZmYlhzeXF3SWFiR3d4MzAlMkZmJTJCaWZXOW45UkhvcHd2ckJoNGVGMVYlMkJYa1UlMkZxbVpRUUxTQjZkZVl4d3V4N0hBZnBHdnM5TCUyRkIlMkY4SjZpdldWWjJkajR2VjhGZ2Zia1klMkZvNVdPOGhvc3JkcjMlMkJpNnQ3bnJlZld4OGIyaDIwaHpaRXdSOUZ3JTJGbElPTGc0JTJCSTY1Mk9DeHQ3dlVmV0Q3UTQlMkZTY3h2NW0lMkY4OUsxSXVqWWo4UHBXTGpXRGElMkJ1c0I3U1pJY2ZjNXU2WGZuRlczMXNlSWUwT0V6QkU2JTJGTlNTUVVwSkpKSlNra2trbEtTU1NTVXBKSkpKVCUyRkFQJTJGVzlWU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyRiUyRlolMkYlMkIwMUlsQm9iM1J2YzJodmNDQXpMakFBT0VKSlRRUWxBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQURoQ1NVMEQ2Z0FBQUFBWUVEdyUyRmVHMXNJSFpsY25OcGIyNDlJakV1TUNJZ1pXNWpiMlJwYm1jOUlsVlVSaTA0SWo4JTJCQ2p3aFJFOURWRmxRUlNCd2JHbHpkQ0JRVlVKTVNVTWdJaTB2TDBGd2NHeGxMeTlFVkVRZ1VFeEpVMVFnTVM0d0x5OUZUaUlnSW1oMGRIQTZMeTkzZDNjdVlYQndiR1V1WTI5dEwwUlVSSE12VUhKdmNHVnlkSGxNYVhOMExURXVNQzVrZEdRaVBnbzhjR3hwYzNRZ2RtVnljMmx2YmowaU1TNHdJajRLUEdScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlNHOXlhWHB2Ym5SaGJGSmxjend2YTJWNVBnb0pQR1JwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVhWFJsYlVGeWNtRjVQQzlyWlhrJTJCQ2drSlBHRnljbUY1UGdvSkNRazhaR2xqZEQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFF1VUUxSWIzSnBlbTl1ZEdGc1VtVnpQQzlyWlhrJTJCQ2drSkNRazhjbVZoYkQ0M01qd3ZjbVZoYkQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1R3dlpHbGpkRDRLQ1FrOEwyRnljbUY1UGdvSlBDOWthV04wUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFU5eWFXVnVkR0YwYVc5dVBDOXJaWGslMkJDZ2s4WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExtcHZZblJwWTJ0bGREd3ZjM1J5YVc1blBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRazhZWEp5WVhrJTJCQ2drSkNUeGthV04wUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGblpVWnZjbTFoZEM1UVRVOXlhV1Z1ZEdGMGFXOXVQQzlyWlhrJTJCQ2drSkNRazhhVzUwWldkbGNqNHhQQzlwYm5SbFoyVnlQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlUyTmhiR2x1Wnp3dmEyVjVQZ29KUEdScFkzUSUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YVhSbGJVRnljbUY1UEM5clpYayUyQkNna0pQR0Z5Y21GNVBnb0pDUWs4WkdsamRENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhRdVVFMVRZMkZzYVc1blBDOXJaWGslMkJDZ2tKQ1FrOGNtVmhiRDR4UEM5eVpXRnNQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4U1pYTThMMnRsZVQ0S0NUeGthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1amNtVmhkRzl5UEM5clpYayUyQkNna0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDVHhoY25KaGVUNEtDUWtKUEdScFkzUSUyQkNna0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5WbVZ5ZEdsallXeFNaWE04TDJ0bGVUNEtDUWtKQ1R4eVpXRnNQamN5UEM5eVpXRnNQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKUEM5a2FXTjBQZ29KQ1R3dllYSnlZWGslMkJDZ2s4TDJScFkzUSUyQkNnazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlZtVnlkR2xqWVd4VFkyRnNhVzVuUEM5clpYayUyQkNnazhaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG1wdlluUnBZMnRsZER3dmMzUnlhVzVuUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrOFlYSnlZWGslMkJDZ2tKQ1R4a2FXTjBQZ29KQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0ZuWlVadmNtMWhkQzVRVFZabGNuUnBZMkZzVTJOaGJHbHVaend2YTJWNVBnb0pDUWtKUEhKbFlXdyUyQk1Ud3ZjbVZoYkQ0S0NRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1R3dlpHbGpkRDRLQ1FrOEwyRnljbUY1UGdvSlBDOWthV04wUGdvSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVjM1ZpVkdsamEyVjBMbkJoY0dWeVgybHVabTlmZEdsamEyVjBQQzlyWlhrJTJCQ2drOFpHbGpkRDRLQ1FrOGEyVjVQbEJOVUZCRVVHRndaWEpEYjJSbFRtRnRaVHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBsQk5VRkJFVUdGd1pYSkRiMlJsVG1GdFpUd3ZhMlY1UGdvSkNRa0pDVHh6ZEhKcGJtYyUyQlRHVjBkR1Z5UEM5emRISnBibWMlMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlVFMVVhVzluWVZCaGNHVnlUbUZ0WlR3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbEJOVkdsdloyRlFZWEJsY2s1aGJXVThMMnRsZVQ0S0NRa0pDUWs4YzNSeWFXNW5QbTVoTFd4bGRIUmxjand2YzNSeWFXNW5QZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1emRHRjBaVVpzWVdjOEwydGxlVDRLQ1FrSkNRazhhVzUwWldkbGNqNHdQQzlwYm5SbFoyVnlQZ29KQ1FrSlBDOWthV04wUGdvSkNRazhMMkZ5Y21GNVBnb0pDVHd2WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5RV1JxZFhOMFpXUlFZV2RsVW1WamREd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlXZGxVbVZqZER3dmEyVjVQZ29KQ1FrSkNUeGhjbkpoZVQ0S0NRa0pDUWtKUEhKbFlXdyUyQk1DNHdQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDR3TGpBOEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpjek5Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQk5UYzJQQzl5WldGc1Bnb0pDUWtKQ1R3dllYSnlZWGslMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhRdVVFMUJaR3AxYzNSbFpGQmhjR1Z5VW1WamREd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVdkbFJtOXliV0YwTGxCTlFXUnFkWE4wWldSUVlYQmxjbEpsWTNROEwydGxlVDRLQ1FrSkNRazhZWEp5WVhrJTJCQ2drSkNRa0pDVHh5WldGc1BpMHhPRHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJMVEU0UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0M056UThMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqVTVORHd2Y21WaGJENEtDUWtKQ1FrOEwyRnljbUY1UGdvSkNRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDUWs4YVc1MFpXZGxjajR3UEM5cGJuUmxaMlZ5UGdvSkNRa0pQQzlrYVdOMFBnb0pDUWs4TDJGeWNtRjVQZ29KQ1R3dlpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZWEJsY2tsdVptOHVVRTFRWVhCbGNrNWhiV1U4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWtKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVUdGd1pYSk9ZVzFsUEM5clpYayUyQkNna0pDUWtKUEhOMGNtbHVaejV1WVMxc1pYUjBaWEk4TDNOMGNtbHVaejRLQ1FrSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVjM1JoZEdWR2JHRm5QQzlyWlhrJTJCQ2drSkNRa0pQR2x1ZEdWblpYSSUyQk1Ed3ZhVzUwWldkbGNqNEtDUWtKQ1R3dlpHbGpkRDRLQ1FrSlBDOWhjbkpoZVQ0S0NRazhMMlJwWTNRJTJCQ2drSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZMbEJOVlc1aFpHcDFjM1JsWkZCaFoyVlNaV04wUEM5clpYayUyQkNna0pQR1JwWTNRJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1amNtVmhkRzl5UEM5clpYayUyQkNna0pDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExtcHZZblJwWTJ0bGREd3ZjM1J5YVc1blBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YVhSbGJVRnljbUY1UEM5clpYayUyQkNna0pDVHhoY25KaGVUNEtDUWtKQ1R4a2FXTjBQZ29KQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NVFUVlZ1WVdScWRYTjBaV1JRWVdkbFVtVmpkRHd2YTJWNVBnb0pDUWtKQ1R4aGNuSmhlVDRLQ1FrSkNRa0pQSEpsWVd3JTJCTUM0d1BDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENHdMakE4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQamN6TkR3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTlRjMlBDOXlaV0ZzUGdvSkNRa0pDVHd2WVhKeVlYayUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoY0dWeVNXNW1ieTVRVFZWdVlXUnFkWE4wWldSUVlYQmxjbEpsWTNROEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrSlBHRnljbUY1UGdvSkNRa0pQR1JwWTNRJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TGxCTlZXNWhaR3AxYzNSbFpGQmhjR1Z5VW1WamREd3ZhMlY1UGdvSkNRa0pDVHhoY25KaGVUNEtDUWtKQ1FrSlBISmxZV3clMkJMVEU0UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0dE1UZzhMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqYzNORHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJOVGswUEM5eVpXRnNQZ29KQ1FrSkNUd3ZZWEp5WVhrJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhjR1Z5U1c1bWJ5NXdjR1F1VUUxUVlYQmxjazVoYldVOEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrSlBHRnljbUY1UGdvSkNRa0pQR1JwWTNRJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TG5Cd1pDNVFUVkJoY0dWeVRtRnRaVHd2YTJWNVBnb0pDUWtKQ1R4emRISnBibWMlMkJWVk1nVEdWMGRHVnlQQzl6ZEhKcGJtYyUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNUJVRWxXWlhKemFXOXVQQzlyWlhrJTJCQ2drSlBITjBjbWx1Wno0d01DNHlNRHd2YzNSeWFXNW5QZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzUwZVhCbFBDOXJaWGslMkJDZ2tKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1Y0hKcGJuUXVVR0Z3WlhKSmJtWnZWR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1UVZCSlZtVnljMmx2Ymp3dmEyVjVQZ29KUEhOMGNtbHVaejR3TUM0eU1Ed3ZjM1J5YVc1blBnb0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMblI1Y0dVOEwydGxlVDRLQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUlVhV05yWlhROEwzTjBjbWx1Wno0S1BDOWthV04wUGdvOEwzQnNhWE4wUGdvNFFrbE5BJTJCa0FBQUFBQUhnQUF3QUFBRWdBU0FBQUFBQUMzZ0pBJTJGJTJCNyUyRjdnTUdBbElEWndVb0ElMkZ3QUFnQUFBRWdBU0FBQUFBQUMyQUlvQUFFQUFBQmtBQUFBQVFBREF3TUFBQUFCZiUyRjhBQVFBQkFBQUFBQUFBQUFBQUFBQUFhQWdBR1FHUUFBQUFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE0UWtsTkElMkIwQUFBQUFBQkFBWkFBQUFBRUFBUUJrQUFBQUFRQUJPRUpKVFFRbUFBQUFBQUFPQUFBQUFBQUFBQUFBQUQlMkJBQUFBNFFrbE5CQTBBQUFBQUFBUUFBQUFlT0VKSlRRUVpBQUFBQUFBRUFBQUFIamhDU1UwRDh3QUFBQUFBQ1FBQUFBQUFBQUFBQVFBNFFrbE5CQW9BQUFBQUFBRUFBRGhDU1UwbkVBQUFBQUFBQ2dBQkFBQUFBQUFBQUFFNFFrbE5BJTJGVUFBQUFBQUVnQUwyWm1BQUVBYkdabUFBWUFBQUFBQUFFQUwyWm1BQUVBb1ptYUFBWUFBQUFBQUFFQU1nQUFBQUVBV2dBQUFBWUFBQUFBQUFFQU5RQUFBQUVBTFFBQUFBWUFBQUFBQUFFNFFrbE5BJTJGZ0FBQUFBQUhBQUFQJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGOEQ2QUFBQUFEJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGJTJGQSUyQmdBQUFBQSUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRndQb0FBQUFBUCUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRjhENkFBQU9FSkpUUVFJQUFBQUFBQVFBQUFBQVFBQUFrQUFBQUpBQUFBQUFEaENTVTBFSGdBQUFBQUFCQUFBQUFBNFFrbE5CQm9BQUFBQUExVUFBQUFHQUFBQUFBQUFBQUFBQUFGRkFBQUJ3Z0FBQUJBQWN3QjNBR2tBY3dCekFGOEFZUUJ5QUcwQWVRQmZBR3NBYmdCcEFHWUFaUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUJ3Z0FBQVVVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBUUFBQUFBQUFHNTFiR3dBQUFBQ0FBQUFCbUp2ZFc1a2MwOWlhbU1BQUFBQkFBQUFBQUFBVW1OME1RQUFBQVFBQUFBQVZHOXdJR3h2Ym1jQUFBQUFBQUFBQUV4bFpuUnNiMjVuQUFBQUFBQUFBQUJDZEc5dGJHOXVad0FBQVVVQUFBQUFVbWRvZEd4dmJtY0FBQUhDQUFBQUJuTnNhV05sYzFac1RITUFBQUFCVDJKcVl3QUFBQUVBQUFBQUFBVnpiR2xqWlFBQUFCSUFBQUFIYzJ4cFkyVkpSR3h2Ym1jQUFBQUFBQUFBQjJkeWIzVndTVVJzYjI1bkFBQUFBQUFBQUFadmNtbG5hVzVsYm5WdEFBQUFERVZUYkdsalpVOXlhV2RwYmdBQUFBMWhkWFJ2UjJWdVpYSmhkR1ZrQUFBQUFGUjVjR1ZsYm5WdEFBQUFDa1ZUYkdsalpWUjVjR1VBQUFBQVNXMW5JQUFBQUFaaWIzVnVaSE5QWW1wakFBQUFBUUFBQUFBQUFGSmpkREVBQUFBRUFBQUFBRlJ2Y0NCc2IyNW5BQUFBQUFBQUFBQk1aV1owYkc5dVp3QUFBQUFBQUFBQVFuUnZiV3h2Ym1jQUFBRkZBQUFBQUZKbmFIUnNiMjVuQUFBQndnQUFBQU4xY214VVJWaFVBQUFBQVFBQUFBQUFBRzUxYkd4VVJWaFVBQUFBQVFBQUFBQUFBRTF6WjJWVVJWaFVBQUFBQVFBQUFBQUFCbUZzZEZSaFoxUkZXRlFBQUFBQkFBQUFBQUFPWTJWc2JGUmxlSFJKYzBoVVRVeGliMjlzQVFBQUFBaGpaV3hzVkdWNGRGUkZXRlFBQUFBQkFBQUFBQUFKYUc5eWVrRnNhV2R1Wlc1MWJRQUFBQTlGVTJ4cFkyVkliM0o2UVd4cFoyNEFBQUFIWkdWbVlYVnNkQUFBQUFsMlpYSjBRV3hwWjI1bGJuVnRBQUFBRDBWVGJHbGpaVlpsY25SQmJHbG5iZ0FBQUFka1pXWmhkV3gwQUFBQUMySm5RMjlzYjNKVWVYQmxaVzUxYlFBQUFCRkZVMnhwWTJWQ1IwTnZiRzl5Vkhsd1pRQUFBQUJPYjI1bEFBQUFDWFJ2Y0U5MWRITmxkR3h2Ym1jQUFBQUFBQUFBQ214bFpuUlBkWFJ6WlhSc2IyNW5BQUFBQUFBQUFBeGliM1IwYjIxUGRYUnpaWFJzYjI1bkFBQUFBQUFBQUF0eWFXZG9kRTkxZEhObGRHeHZibWNBQUFBQUFEaENTVTBFS0FBQUFBQUFEQUFBQUFFJTJGOEFBQUFBQUFBRGhDU1UwRUVRQUFBQUFBQVFFQU9FSkpUUVFVQUFBQUFBQUVBQUFBQVRoQ1NVMEVEQUFBQUFBV3J3QUFBQUVBQUFDZ0FBQUFkQUFBQWVBQUFObUFBQUFXa3dBWUFBSCUyRjJQJTJGZ0FCQktSa2xHQUFFQ0FBQklBRWdBQVAlMkZ0QUF4QlpHOWlaVjlEVFFBQyUyRiUyQjRBRGtGa2IySmxBR1NBQUFBQUFmJTJGYkFJUUFEQWdJQ0FrSURBa0pEQkVMQ2dzUkZROE1EQThWR0JNVEZSTVRHQkVNREF3TURBd1JEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUVOQ3dzTkRnMFFEZzRRRkE0T0RoUVVEZzRPRGhRUkRBd01EQXdSRVF3TURBd01EQkVNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNJTJGOEFBRVFnQWRBQ2dBd0VpQUFJUkFRTVJBZiUyRmRBQVFBQ3YlMkZFQVQ4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFNQUFRSUVCUVlIQ0FrS0N3RUFBUVVCQVFFQkFRRUFBQUFBQUFBQUFRQUNBd1FGQmdjSUNRb0xFQUFCQkFFREFnUUNCUWNHQ0FVRERETUJBQUlSQXdRaEVqRUZRVkZoRXlKeGdUSUdGSkdoc1VJakpCVlN3V0l6TkhLQzBVTUhKWkpUOE9IeFkzTTFGcUt5Z3laRWsxUmtSY0tqZERZWDBsWGlaZkt6aE1QVGRlUHpSaWVVcElXMGxjVFU1UFNsdGNYVjVmVldabmFHbHFhMnh0Ym05amRIVjJkM2g1ZW50OGZYNSUyRmNSQUFJQ0FRSUVCQU1FQlFZSEJ3WUZOUUVBQWhFRElURVNCRUZSWVhFaUV3VXlnWkVVb2JGQ0k4RlMwZkF6SkdMaGNvS1NRMU1WWTNNMDhTVUdGcUt5Z3djbU5jTFNSSk5Vb3hka1JWVTJkR1hpOHJPRXc5TjE0JTJGTkdsS1NGdEpYRTFPVDBwYlhGMWVYMVZtWjJocGFtdHNiVzV2WW5OMGRYWjNlSGw2ZTN4JTJGJTJGYUFBd0RBUUFDRVFNUkFEOEE5VlNTU1NVcEpKSkpTa2tra2xLU1NTU1VzNHVEU1dpWFJvT0pLRmkzT3Z4Mld2YnNlNGU1Z013Um81c295cGRPeU45bVRTUkhwV3ZqNE9jNCUyRndEVmY5V2twdXBKSkpLVWtra2twU1NTU1NsSkpKSktVa2tra3AlMkYlMkYwUFZVa2xDcXh0dGJiRyUyRlJlQTRmQXBLWnBKSkpLVW8yV05ycmRZOHcxZ0xuSHlBbFZPc1d2b3dYWkRaJTJGUU9aYThEOXhybW0zJTJGTnIzUFVzd20lMkZwbVFHYW15bDRiSGlXdWhKVFlxc0Z0VExCdzlvZDk0VTFRNkZrZmFPazR0c3p1cVlmd1Y5SlNsbDElMkZvT3Qyc09ndURYZ2VUbTdmJTJGUG1OJTJGd0NDTFVXWjFWaHJ5c2JLQSUyQmp1YTd6Z3R1WiUyRjFGcUlVWFRTUWN2S1ppNDdzaDdYT1kwdEJEWUpoem1zM2FrZlIzYmxWZDEzcHJNdHVJJTJCd3NlJTJGNkwzQWhtN24wJTJGVSUyQmkyemFmemtGT2dxOSUyQmRqMFpGT000azNaRHRyR05Fbmh6dDd2M1diV1BVOGJKcHlhdlZwZHVadWMyZU5XT05iMiUyRjJYdFhPWTJWVTdyQTZobk85UnVKUyUyQnIxaE8xbGd1R0pidVl6MmV4dHZ2M2Z6TFBVJTJGd0NFU1U5UWtra2twU1NTU1NsSkpKSktmJTJGJTJGUjlWV2YwaXdpdTNGZjlMR3Nld1QlMkI2RDdQJTJGQXl4eTBGbXVuSDZ4UERNcGdkJTJGYlpGVCUyRndEb094JTJGJTJCMjBRcDBsQzAyQ3R4cUFMd0R0QjRKOEZOSkJUVm92eCUyQm80anZiTExHbGx0VHVSTXNzcmYlMkZBTkppeiUyQmhaRHFNTyUyRkV5Q1gyZE9jNnQlMkJrdWMxZ210JTJCMyUyRmhhUFRlb1o1czZSMUlackJHRGxrTnZJJTJCalhjWVl5eCUyRjd0V1Y5QiUyRndEdyUyRndEd2x5RDFMcVdIMGpxMk4xTzU1cnhPb2dZMXJ3QzRDOXV1UDZtemR0OVdsMXY2VCUyQmIlMkZBRmRGUyUyRjFNeXElMkYyVlRodXNhJTJCMnRzdDJrNnNQdVk3M0JybSUyRm8zVnYyZnklMkYzRjBTNFRBenElMkJtJTJGV0RxdUtHbmJoV095YTYyRFVVbHJjbXl1bGt0WjZmMmV5MTlXejglMkYyTHMyWiUyQkZZeDFqTDZ5eGdCZSUyRmNJQUkzQ1hmTklxWlgzdXJzcXFyWjZqN1RxSmdOWTJQVXNQUDBkeXBmV0olMkZvOU5PVDJ4cmFySFR4czN0WmtmJTJCeTc3VlI2djliZWpkTnNia2IzWmJxbTJzZlZqZ09PaHJkWkZsanFzZmZYcyUyRm12VjlWJTJGJTJCRFhIZFolMkJ1dlU4ekE2aSUyQmowMlkxemF3YVpMdDJMWTIxdGx0YjdYT2I2ajYlMkZ3RFIxViUyRnpWMzZ2NnJQVllGVSUyQmlDczVQUzdjZDQzTzJXVU9CNzdkMVglMkZUMjdsd3ZWbk55S0s4ZDE1cTZoaWoyMDdvOWRnM0RIZFc5bTl6THY4QVElMkY0V3U3MUslMkZUdHI5YXF6SiUyQnVIVjh0bVIwek5veUx2c1hVOE5yN2NkdGptdE4xSjlLJTJCMnBvZHNiazElMkZvJTJGOEEwWXNuRzZ0ZSUyQm5MWmJkWFhZNnB0dEFETnd1Y3dtaHYyY1didjB0bnIlMkZwS25mcEtiS2Y4QXRzcUQxRHZyam5mVjcwY0tsbGRnemdicWpmN1FIQjNwMnNHMHNiNmx2MCUyRmZaNlRFY1pnNjMweHoydmV6SzZqVmJmaFZ0ZjZiaVElMkJ4bHRtTlk3YTJ6OUpzM1Z1JTJGd2F5dnJIaDElMkJoaGRLdjNYdWJqQmhZOXdEYkh0UHBPZFhrT0g2dDFEZCUyRlJzbCUyRjZDJTJGd0RvbVY3Rmc5V2MlMkZGJTJCcTNSTDZiaWJlbjVXVmpoNGxsamR4YmV4bHRmMDZMYTl2dnAlMkZNJTJGd0FGWiUyRmhFdXFuMHI2bGZYTTlXWXpwdlZvbzZ3eHZjYkJjR2o5THRyMDlMTG9qOWJ4ZiUyQnZVJTJGb2Y1bXo5YXZySmQwJTJCMmpCd0hBWlRyY2QxN2lBN2JWWmEyblkwSCUyRkNYdzl2JTJGQUFkZiUyRldsNXppZFFaOVpjWTNsM29kZHdnMnoxbUhaNnpXZlF2M3QyJTJCbmswJTJGd0NuJTJGd0RSZjh4ZjZEZjFEcXZYR1olMkJlNXR6c2k3R2Q2bG0ya1BzcU5icXFPRzElMkY0Q3V4bnB0JTJGUzclMkY5STlBTGpSMUdoN2Y5NiUyQnVKSnBBMUtaajJXTkRtT0Rtbmh3TWhKYXlTU1NTVSUyRndEJTJGMHZWVm45YWlyRkdZU0dqRWNMWHVPa1YlMkZ6ZDVKJTJGZFpVJTJGd0JYJTJGcmEwRUhNOUQ3SmY5cEU0JTJGcHY5WUhYMmJUNm1uOVJJS2NFOVU2bGdYbkpEdjJsMGpOJTJGUzQ5N1MzOUM1MzBzT3l4biUyQkJjJTJGJTJCaDVQODMlMkYya3lmUyUyRlI1TmxQcnYxNnV3Y3pFeHNQSEZvekxCUldIejZycmlXTTlPdXY2SHM5VDN2c2V1ZTZCOWJ1b1pGNXhCVTg0QkRDJTJCdG9aWVcxUGN6RyUyQjAyR3htNzFHYjJYUDJmb2Q3UDVtdGN0MTY3cSUyRlQ4N0dkZmslMkZic2NXSEk2VjFOclFOR3UzTzJOWjZmcDVGTjlkVGNySDNlcFI2ZjlSS3dSWVh6aEtFdUdZbyUyRnhmU012TTZsWmxGJTJGVmZTb2JVMTFROU1HeXFMZmElMkJyUDlQSnNyOUt6MDluNmJHcSUyRjdkV04xejlWeEMzS2ZaVDAlMkIlMkJQVXlHZzVOSWFQZFU3ZXpaZTdLeFBSJTJGUjVHeXIxc1g5RGI2JTJGd0RndVp4JTJCdjM1MmJlNFdOd2Z0JTJCOXRiMm4yMW16YSUyRjA3WG4yJTJGcDdxbVZlcDZkYlAwdnFmb2xxWkQ3bVk5MWVEbVhoOXBCQVpER2pUOWF3dmIlMkJrcDNXJTJGcDJNZGtmcGF2MWIlMkJYVWIwV3VsVGVQMjNoNURpM0pMM1VZV1RZemx6YktuMXNjNXJON2JhTTNGWjlwdzh4cnZTdnIlMkZRZjBpbTZ1dkg2dlk3RzZoZlMybXgxV0ZZYXE3Ym5rJTJCbzJyMHJLUFRhN2J1c3R4WDIwJTJCeiUyQmxmNFJXJTJGcVBYZU00MDNzJTJGUTlMcGRiUTR2OTdXbDREY1cxbnVkNlBxZnJIMmU5bnN6TWF2TnglMkZzOSUyRjJoQTZpNXI3N0haTEgyNFRuMVc0JTJCVXdqMlB2YTNKZGo1YmZ6YUhiOG43RmslMkY0UDlZeFAwdFg4d3VscWFXZmIxQ3paNkdhTTMwNjIyV0REJTJGU1YxbXAzc2ZZNnRqV09zWTF0Zjg3NzZhJTJGVFE3czI3cUZOVklycXdBZlVzYlpSWHQ5UzBOOUt5MXRYODMlMkJncmUlMkYxc2VqJTJGQUUxbHpLbHRkRHRiaTlaSnNxcWJUYUJYZFMwVGJXNjhQeWNVeE5qOHFySWJSJTJGcFBVJTJGU2I2JTJGVHl2NlZXZjBxdk9yem1zWWFzbkd6SG1rN2d4MVphNksyWFI3c2QlMkI1djZLNzlKWGkzYlBVJTJGVjhpNzFSUlU1JTJGV2FMTXY2a1lqN1NHWDlMNmclMkJxSyUyRm9zcnltZXV4MWNmNEIxN2ZZc3JwdVBtTnhmdHo2M1Bjd2w5RFdEUTJzSXFaa05KJTJGTlplNmx1UjZmJTJGQUFYJTJGQUFTMWYycFhYMHZxJTJCSmxuN0xma1ZWdGEzWkFmbDQ5MjlteW4lMkZBNzZyTHE4NnIlMkJibyUyRjRxeWhWcnVvWmZTZWs0bGRtTTEyUGUyMjdEOVhRQnR2cHR1MyUyQjdkNlZyNjZYZjJQVSUyRndpU25zdXFuRHlMTWZGdE1aT1JqJTJCclhTUGVIRnNlbzJsN2czMUxhJTJGViUyQmglMkYyb3ElMkZ3ZnFmcEZ6blZjZDl1RFppdmF4ekRaWGExenp0WmFYQjFMVyUyQnYlMkZnYiUyRlpWWGk1dHY4MyUyRlJzajlBc0xxZlh2MmowJTJGcFhxUEZlZGdOdXJmYTEwRjN1cXN4OGx2OEFvM09idnJmJTJGQU1UNm4lMkJGUXF1cTU5JTJGVVJlYzF6YjdDSFhNYzhodG13N240N3Y4QnR1Y1BVYjZ2NlA5TGQ2OWlOb1M5SDZWazBaemNwajN0cXFlVzFBQXR1YyUyRjhBbTdNZXlodjZXdlolMkZOWlglMkZBSUV1Z3p1azE0ZUxpTjY5ZmJpNDl1NndnQmp5V05iNmRQNklPYTUyVjZ2dDI0N1AwZEQlMkZBRlAwYWpqZGM2a0JlZWtZUWQxRElzMnRzWlZaYmRWWHQ5dFlxc0c5JTJCMyUyRlRQWiUyQmwlMkZ3QkNzYWpwWFYlMkJ0WDJad28lMkZhbDdXdXZ2OVMwTWVhMiUyRlQyJTJCdlo3bTFlMWo2R1Y3NlBaJTJGcEswTkU3YXZwSDFaNjluZFU2VGk0bVA2bVZaa3RCZGJrUDN1cWJXVFJrakt1WUdiOXQxZTZ2Mjc3NnJQOUl1eXc4VnVKanRvYVM4dGt1ZWVYT2NkejMlMkYybkx5YjZ2ZFp2NkRqREt3bVZ0M2x6YnNaejNWc1pjSGx1VGdYNDk5aGZSWXh1ekp3biUyRnpuc3lLckxMdjhIMnZUJTJGcjloT0RLJTJCc00lMkZadVNXa3ZydEZqQzF3TG12ciUyRldLcVclMkZtJTJCemJaJTJCa1JSNHZWcEtuMDNxJTJGVGVxNDdNbnAlMkJReSUyQnQ3V3ZHMCUyQjRCdzNOOVNzJTJGcEslMkYlMkJ1TlZ4QlQlMkZBUCUyRlQ5VlRPYTE3U3h3RG11QkRtblVFSHNVNlNTbnhmNng5Q3pQcXQxRUNpeDdHTWViZW41UTBjYW5leXlsenZvdXRvM01ydVolMkZoYXYwbnAlMkZwRlVyeWFNakZ2cnpwczZka1BiWm1Vc0h2eDd6RmJlcjRmN3JiTFA2V3olMkZBRWxuJTJCaXZZdlklMkJ1OUw2ZjFYcGwySDFHRzBPRzcxU1EwMXVIMGIyUGQ5QjdQJTJGVWIlMkZ3Qkd2SDh2cEYzVDclMkZRcGNINU5JZWE3YXo2bGVYU2QyJTJCekhqZFc3MHFIYk1uRSUyRndsU1pyRTJOdXpmaktITVklMkJHZnB6UjJuJTJGTDlIOTV3TSUyRkJ5T2s1aHhzZ2l5dXdiNnJtNjEzVkg2TjFYJTJGQUtNclcxMGpxYnJtSER5SGw4TWhqWTNHNnNIZDZQTzMxOGR2NmVpejA3Zlc5UDB2JTJCT0hpUHhjNm45ajU1MllkaDNZbVZ5N0Z0UDUlMkJ2dmZpdSUyRnclMkYlMkZCJTJGcGY1emVoWXYxYTZwVms1V0xuaCUyQkpaaE1MNnJtaVd2c0JZNnQxRm4wbjFOWTc3VHZwJTJGU2Y4V25panFOV25PRXNjakdRNFpCN09pZzBmVjdMZjAxcnI4cnFSMnRlejNYUGJCeDY3WHNZemF5eGpiTWw5bTM4JTJGOUolMkJsJTJGUyUyQnB6cnZVeE1XcXZxTlZ1SmtzeDM0MDJ6VzVvb3NiZFNjaWc3MjVPSGQ5cVk2diUyQmMyWk9MVDZObjg4eTNlNlgxdXlrOU5leHpuWWQlMkJQZGkyTWMxbFR4bDR6dHpuV3UzYktmV1paWGJzOVQwNmYweXBkWTZKMUhyJTJGVkg5V3J0cHN4Nm1NcUZEUyUyRjFXaXNGMzBYTmE1JTJCNTc3YmYwZXl6JTJGUlYlMkJxbkh3VzFSb3RERjZ4YXk0OVR2aWtzOU9ITkJBYzlnMnNmYzFtN1p1MiUyRm9HJTJGUXh2M1BTVDlMdzJkVGJsTSUyQjFXMXNkRGl4b00ydnUzZjA5MzZPdDNwT1pzdXJwJTJGUTVIJTJCaiUyRndhSmo0R1hmMDUyWmplcFJqYm1Pcnl3TnpOakh1bGg5TWVnNXpOJTJCMWxybiUyRjRSOWZwJTJGcEZZeGNIRDZleTZuSXRkU0dBT3RkbEZ3aGxoJTJGUnVIcE4zUHBidjhBNXhucWVtZ0ZPWjElMkZEeU1XNzdUMURJT1F5NHZyYTkxYnFDMDBlbiUyQmlZeCUyRjA2TnJxbmV2JTJGQUlmJTJGQUVqMVd4YUcyc3hLT285TXU2aUszMlVZZU9MSE1MM3ZMck5ycm11MyUyQmx2JTJGQVBSaTFjdnBsMVBVcVczTmZoNVZKMzQlMkJObU85WEV1ckh1JTJGVjd0MWpHTXNZZjBub1A5biUyRkFBTnF2OVE2Vzg0dzYzMGhuMmN1RmQxamNZR3lzalM2cXpMeG1pdTNGeWFkdjg5Nk5YJTJCbCUyQjJlcWhTU0JRMXUlMkZ3ZWQ2ejlYJTJCcnRGSkgxZFpqMWFnRU5zcVp1SUI5RVBzdmJrVzdXajZlUyUyRjZmcSUyQmolMkJqV09jYk53OGhucWROeHEzdGl6WllYT2E0VHk3ZmtXYm1OZCUyRk9iZm9mNFJkcFQxZnFIVXMxcmMlMkZMZmt0eVJVMnZHYTRiU0hOZVB0RkwzZWw2Vm1MbFZlalo3ZjBtJTJGMWNqJTJCWiUyQjBXYnZTZnFuMCUyRnExZVRqZFJJZGxWc3BzcWN4d0JxYzhQYmZXJTJCclgzNzYlMkZUdGYlMkZBS0gwYmNTNnYyV0pYcXVsajRZQ1hFRFpxdXJ4bjFkeFhkUm9zdXc3OGhuWGNSNWRTV3UyMk9yWTJicXNkbjAzWkZUdDkzMk96MlpXTDZsVkxQV29YUzE5SHp1cDlQcSUyQnNmVE1ZdHk4a243WlJYREN5NWhkVmIxREVyZSUyRjlOVTc5THZ4SGJMY2xqN0tmNXJJc3BYRTVtUG05SjZxJTJGTHFhODJZcm12ZlZKSHFVc2QlMkJneXFMYXRsbjBhJTJGMDNwUDhBV3hMbWVyViUyQjVqJTJCeiUyRlU3cXZSJTJCcDlDb3Q2UU5sTEpiWlE1eGRaWGI5TzFsNzNTOTlqbnUzJTJCcTclMkJlJTJGbkVtTjU3cXYxWDZiOWMlMkZxOTlveFdOeCUyQnVZeGN5eDdnOXJqYzJQWHhNNXQzNng2ZGptdDlIMXYwMkwlMkJpOUwlMkZDVldjejlWUHI1MW5wUFdYOUglMkJzeHV5OGJJdEZOb3lEdnRvdDl0SWNOJTJGMDZIZTMxNlAlMkZBRUtvJTJGd0FKOXA5aGJYVzE3bnRhQTk4YjNBUVhRSWJ1UDV5NDMlMkZHQjlRMmRmcCUyRmFYVFd0WjFpbG9FR0dqSVkzJTJGQVBlNyUyQmF5RyUyRjhBYWZKJTJGNnpiJTJCaSUyRlNVSlQyVEs2Nnh0cmFHQUFBQm9BRUFiVzhmeVZKZWNmVWJxUDhBakhQVjMxZFh4TWpKNmMlMkZheTI3TGFNZDFKYU5nc29EeFg5bzlyZjB6YVcyJTJCciUyRlBlcCUyRnBQUjBsUCUyRjlUMVZKSkpKU0ROTCUyRnNyOWdlWEdBQlcxcm5ha0Q2RjM2UCUyQnN1QXd1bVYlMkZXWE5yeEh2Y3ltcWgyUzdJcUxuUmElMkI3SmZqMlVQY0d0cWR2eWZWc3BaN0slMkZRJTJCeTElMkZvYVY2RmZqMDVGWnF2WUxLeVFTMTNFZzdtJTJGOUpLaW12SHByb3JFVjFOREdEd0RSdGFra0VnMk5DTm54RHFkR2IwTHJ1M3FGREhYNDFyTFRXR3hWZXlSNzYyNnRkVm1OYSUyRjFQM0xQV3I5aTJjbXpycFk1dGRCNmd6cEw3S3E3V0dYUHFxZjZEOEhJYzFnWjl1cG8lMkY3VCUyRnptVlglMkZBRFhxcjBick9GMCUyQjQxMzViV1ZGZ2MwNWtEMVdNUDA2YXJpMTdxMjVQODFaJTJCJTJGWCUyQmklMkJuYXVUeXNmcW5RZW9NNmgwNmw5MWVXMkg0andmMXVoZ2M3MExxM0RkVjFYR3htNzhkNyUyRndDZm8lMkZRWGZwSzdHSVJGWDRzMmZON3ZBZUdwUmp3azkzSXlPajVWRG5ONlU1JTJGVU1hJTJGZmxZbExHdUxtJTJCcXhucGZhZHJHMXRkazMwMlVmYXYlMkJzMmVuJTJGTnJRJTJCcmQ5JTJCTmxOZGZTJTJGRHVEWE15OGU3UjFibWpmSiUyRmtOaGw5TnY1OUt0T2VMYk1ETzZGa3RKdGUlMkIlMkZDc3RMaCUyQmhjYXhtNG1ZNW9jNXRMTXIwOFhLM3N0OUg3VFJkJTJGU3FQV1cxMWZBJTJGYSUyQk9PcGRPYzZqcWVNTmxsWWpjZHZ1ZGpXdDl6ZlZyM2I4ZCUyRiUyRm9tJTJGMUUlMkIyRjVqcGYxdTZEajlSeUxLY3F1M3BlYWYxckYxYUdoJTJCaHltMFhNcjkxVGZaa3NyJTJGbmNiJTJGU1dZOWJGVHdmdGZVT3BkUXdSWnZ4c0RMT0xoMnVCZXhyTEgyMVl6TExBSHY5SzNaWCUyRndBSCUyRk9MVXclMkJuZlUlMkY2eFZEQjZsZzQlMkZUdXRFRnJMYUclMkJnTFhEJTJGQzQyelkyeCUyRiUyQmx3N2YwMWY4dXI5T24lMkJyb3lQcWxsWmZUaGhNc3FCWmJsV2h4RmphaEZMTFdFJTJCMjdIWnYzc2JzcjlIOU42MyUyRkJqVzFMOUo5UERhJTJGNnVkY3glMkZVNlRhN2JTSDZ1eExUN1cwT2MwJTJGbzZIVDZtRmwxZnpYJTJCblY5bjFSNnYwN2JiaFp2MnphNHcxNDlLMFZrNmVua01lV1B1MmZ6bjh4VmIlMkZ3ZjBGMUdWaDRtZFNXM01EMnZiQWZBM0FIOXh5b1ltUlowbyUyRlk4OTQlMkJ6dEJOR1M3UWJSJTJCYThuNk96JTJGd0glMkZ0dEx5UmJ5UFVjWE1xenpuWTJOZmg5VHJiWmJra1Z5eHpRQnZ6bSUyQm0wNHZyN2YwZCUyRm8yZnJYJTJCRCUyRlRWMnJjJTJCcm1IMGJxSFQ4ZmNXJTJGYjJOZWQxRnJtV3NhWE9aTGZSTEgwMVclMkJwdTlMJTJCYVhVaUNKSEJXR2VnTTZkMUlkVTZXemJKaSUyRkZiQWFXdVB2ZFYlMkZWJTJGblBUU3RONlU0JTJGV2ZxUGs1amhSajJCb3JEck1YTE9qcW5nZTJtMXJOcm5WM2UxbG5wZjhiJTJGTzFVcm0lMkZxTGxaSDFhJTJCc2VUMDNJd0xhN3M5N0s4bkZyWSUyQng5ZnAlMkJwNk9manVwWjZWdlQzJTJCclkzSSUyRjBQNk95bjlGJTJCalhyS1NDRkpKSkpLVWtra2twJTJGJTJGOVgxVkpKSkpTa2tra2xLUU0zRHB6Y2QyUGJ1QWRCYTloTFhzY05XV1ZQYjlDeGprZEpKVHhIVmZxNE9sNWJjJTJCcTU1ZGx2TExxMkRheDFscHJZN0lGYlA1aTYzYjc3S2Y5SCUyQmslMkZRcnBQcSUyRmNMTUFWbGdydXBjV1hNNGR1Qmo5STB5N2YlMkYxZjAwdnJCMGhuVnVuUG8lMkJqa01tekZ0R2pxN1FDMXRsYjlOanZkJTJGcXhTNmRXTWowdXBIOUZmYlhzeXF3SWFiR3d4MzAlMkZmJTJCaWZXOW45UkhvcHd2ckJoNGVGMVYlMkJYa1UlMkZxbVpRUUxTQjZkZVl4d3V4N0hBZnBHdnM5TCUyRkIlMkY4SjZpdldWWjJkajR2VjhGZ2Zia1klMkZvNVdPOGhvc3JkcjMlMkJpNnQ3bnJlZld4OGIyaDIwaHpaRXdSOUZ3JTJGbElPTGc0JTJCSTY1Mk9DeHQ3dlVmV0Q3UTQlMkZTY3h2NW0lMkY4OUsxSXVqWWo4UHBXTGpXRGElMkJ1c0I3U1pJY2ZjNXU2WGZuRlczMXNlSWUwT0V6QkU2JTJGTlNTUVVwSkpKSlNra2trbEtTU1NTVXBKSkpKVCUyRkFQJTJGVzlWU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyQnFrbDhxcEpLZnFwSmZLcVNTbjZxU1h5cWtrcCUyRiUyRlpBRGhDU1UwRUlRQUFBQUFBVlFBQUFBRUJBQUFBRHdCQkFHUUFid0JpQUdVQUlBQlFBR2dBYndCMEFHOEFjd0JvQUc4QWNBQUFBQk1BUVFCa0FHOEFZZ0JsQUNBQVVBQm9BRzhBZEFCdkFITUFhQUJ2QUhBQUlBQkRBRk1BTWdBQUFBRUFPRUpKVFFRR0FBQUFBQUFIQUFJQUFBQUJBUUQlMkY0VGtqYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3THdBOFAzaHdZV05yWlhRZ1ltVm5hVzQ5SXUlMkI3dnlJZ2FXUTlJbGMxVFRCTmNFTmxhR2xJZW5KbFUzcE9WR042YTJNNVpDSSUyRlBnbzhlRHA0YlhCdFpYUmhJSGh0Ykc1ek9uZzlJbUZrYjJKbE9tNXpPbTFsZEdFdklpQjRPbmh0Y0hSclBTSXpMakV1TVMweE1USWlQZ29nSUNBOGNtUm1PbEpFUmlCNGJXeHVjenB5WkdZOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6RTVPVGt2TURJdk1qSXRjbVJtTFhONWJuUmhlQzF1Y3lNaVBnb2dJQ0FnSUNBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cDRZWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUklMkJDaUFnSUNBZ0lDQWdJRHg0WVhCTlRUcEViMk4xYldWdWRFbEVQblYxYVdRNlJUY3hPVFZGTlRZMU56TXpNVEZFUkRsRk56SkdRMEUyUWprd1FVWkJSalU4TDNoaGNFMU5Pa1J2WTNWdFpXNTBTVVElMkJDaUFnSUNBZ0lDQWdJRHg0WVhCTlRUcEpibk4wWVc1alpVbEVQblYxYVdRNlJUY3hPVFZGTlRjMU56TXpNVEZFUkRsRk56SkdRMEUyUWprd1FVWkJSalU4TDNoaGNFMU5Pa2x1YzNSaGJtTmxTVVElMkJDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0FnSUNBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cDRZWEE5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThlR0Z3T2tOeVpXRjBaVVJoZEdVJTJCTWpBd09DMHdOeTB4T1ZReE5EbzFOem8wTVMwd05Ub3dNRHd2ZUdGd09rTnlaV0YwWlVSaGRHVSUyQkNpQWdJQ0FnSUNBZ0lEeDRZWEE2VFc5a2FXWjVSR0YwWlQ0eU1EQTRMVEEzTFRFNVZERTBPalU0T2pBMUxUQTFPakF3UEM5NFlYQTZUVzlrYVdaNVJHRjBaVDRLSUNBZ0lDQWdJQ0FnUEhoaGNEcE5aWFJoWkdGMFlVUmhkR1UlMkJNakF3T0Mwd055MHhPVlF4TkRvMU9Eb3dOUzB3TlRvd01Ed3ZlR0Z3T2sxbGRHRmtZWFJoUkdGMFpUNEtJQ0FnSUNBZ0lDQWdQSGhoY0RwRGNtVmhkRzl5Vkc5dmJENUJaRzlpWlNCUWFHOTBiM05vYjNBZ1ExTXlJRTFoWTJsdWRHOXphRHd2ZUdGd09rTnlaV0YwYjNKVWIyOXNQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZaR005SW1oMGRIQTZMeTl3ZFhKc0xtOXlaeTlrWXk5bGJHVnRaVzUwY3k4eExqRXZJajRLSUNBZ0lDQWdJQ0FnUEdSak9tWnZjbTFoZEQ1cGJXRm5aUzlxY0dWblBDOWtZenBtYjNKdFlYUSUyQkNpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwd2FHOTBiM05vYjNBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZjR2h2ZEc5emFHOXdMekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThjR2h2ZEc5emFHOXdPa052Ykc5eVRXOWtaVDR6UEM5d2FHOTBiM05vYjNBNlEyOXNiM0pOYjJSbFBnb2dJQ0FnSUNBZ0lDQThjR2h2ZEc5emFHOXdPa2hwYzNSdmNua3ZQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZkR2xtWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTBhV1ptTHpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFBjbWxsYm5SaGRHbHZiajR4UEM5MGFXWm1Pazl5YVdWdWRHRjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBZVW1WemIyeDFkR2x2Ymo0eE1EQXdNREF3THpFd01EQXdQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TURBd01EQXdMekV3TURBd1BDOTBhV1ptT2xsU1pYTnZiSFYwYVc5dVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwU1pYTnZiSFYwYVc5dVZXNXBkRDR5UEM5MGFXWm1PbEpsYzI5c2RYUnBiMjVWYm1sMFBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwT1lYUnBkbVZFYVdkbGMzUSUyQk1qVTJMREkxTnl3eU5UZ3NNalU1TERJMk1pd3lOelFzTWpjM0xESTROQ3cxTXpBc05UTXhMREk0TWl3eU9ETXNNamsyTERNd01Td3pNVGdzTXpFNUxEVXlPU3cxTXpJc016QTJMREkzTUN3eU56RXNNamN5TERNd05Td3pNVFVzTXpNME16STdRekExUVRFNU1EUkdSakF3UVVKRVF6QTFNVUpFUmtGR01ESXdORVZCTlRFOEwzUnBabVk2VG1GMGFYWmxSR2xuWlhOMFBnb2dJQ0FnSUNBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNlpYaHBaajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5bGVHbG1MekV1TUM4aVBnb2dJQ0FnSUNBZ0lDQThaWGhwWmpwUWFYaGxiRmhFYVcxbGJuTnBiMjQlMkJORFV3UEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGpNeU5Ud3ZaWGhwWmpwUWFYaGxiRmxFYVcxbGJuTnBiMjQlMkJDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVSUyQkxURThMMlY0YVdZNlEyOXNiM0pUY0dGalpUNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlRtRjBhWFpsUkdsblpYTjBQak0yT0RZMExEUXdPVFl3TERRd09UWXhMRE0zTVRJeExETTNNVEl5TERRd09UWXlMRFF3T1RZekxETTNOVEV3TERRd09UWTBMRE0yT0RZM0xETTJPRFk0TERNek5ETTBMRE16TkRNM0xETTBPRFV3TERNME9EVXlMRE0wT0RVMUxETTBPRFUyTERNM016YzNMRE0zTXpjNExETTNNemM1TERNM016Z3dMRE0zTXpneExETTNNemd5TERNM016Z3pMRE0zTXpnMExETTNNemcxTERNM016ZzJMRE0zTXprMkxEUXhORGd6TERReE5EZzBMRFF4TkRnMkxEUXhORGczTERReE5EZzRMRFF4TkRreUxEUXhORGt6TERReE5EazFMRFF4TnpJNExEUXhOekk1TERReE56TXdMRFF4T1RnMUxEUXhPVGcyTERReE9UZzNMRFF4T1RnNExEUXhPVGc1TERReE9Ua3dMRFF4T1RreExEUXhPVGt5TERReE9Ua3pMRFF4T1RrMExEUXhPVGsxTERReE9UazJMRFF5TURFMkxEQXNNaXcwTERVc05pdzNMRGdzT1N3eE1Dd3hNU3d4TWl3eE15d3hOQ3d4TlN3eE5pd3hOeXd4T0N3eU1Dd3lNaXd5TXl3eU5Dd3lOU3d5Tml3eU55d3lPQ3d6TUR0RU5EWXpOME5DT1VRME1VRXhNRUpCTjBWR05VVkNRMFJDTmpNeE9ETXlPVHd2WlhocFpqcE9ZWFJwZG1WRWFXZGxjM1ElMkJDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVklMkJDand2ZURwNGJYQnRaWFJoUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW84UDNod1lXTnJaWFFnWlc1a1BTSjNJajglMkIlMkYlMkI0QURrRmtiMkpsQUdTQUFBQUFBZiUyRmJBSVFBQ0FZR0JnWUdDQVlHQ0F3SUJ3Z01EZ29JQ0FvT0VBME5EZzBORUJFTURBd01EQXdSREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFSkNBZ0pDZ2tMQ1FrTERnc05DdzRSRGc0T0RoRVJEQXdNREF3UkVRd01EQXdNREJFTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TSUyRjhBQUVRZ0JSUUhDQXdFaUFBSVJBUU1SQWYlMkZkQUFRQUhmJTJGRUFhSUFBQUFIQVFFQkFRRUFBQUFBQUFBQUFBUUZBd0lHQVFBSENBa0tDd0VBQWdJREFRRUJBUUVBQUFBQUFBQUFBUUFDQXdRRkJnY0lDUW9MRUFBQ0FRTURBZ1FDQmdjREJBSUdBbk1CQWdNUkJBQUZJUkl4UVZFR0UyRWljWUVVTXBHaEJ4V3hRaVBCVXRIaE14Wmk4Q1J5Z3ZFbFF6UlRrcUt5WTNQQ05VUW5rNk96TmhkVVpIVEQwdUlJSm9NSkNoZ1poSlJGUnFTMFZ0TlZLQnJ5NCUyRlBFMU9UMFpYV0ZsYVcxeGRYbDlXWjJocGFtdHNiVzV2WTNSMWRuZDRlWHA3ZkgxJTJCZjNPRWhZYUhpSW1LaTR5TmpvJTJCQ2s1U1ZscGVZbVpxYm5KMmVuNUtqcEtXbXA2aXBxcXVzcmE2dm9SQUFJQ0FRSURCUVVFQlFZRUNBTURiUUVBQWhFREJDRVNNVUVGVVJOaElnWnhnWkV5b2JId0ZNSFI0U05DRlZKaWN2RXpKRFJEZ2hhU1V5V2lZN0xDQjNQU05lSkVneGRVa3dnSkNoZ1pKalpGR2lka2RGVTM4cU96d3lncDAlMkJQemhKU2t0TVRVNVBSbGRZV1ZwYlhGMWVYMVJsWm1kb2FXcHJiRzF1YjJSMWRuZDRlWHA3ZkgxJTJCZjNPRWhZYUhpSW1LaTR5TmpvJTJCRGxKV1dsNWlabXB1Y25aNmZrcU9rcGFhbnFLbXFxNnl0cnElMkJ2JTJGYUFBd0RBUUFDRVFNUkFEOEE3JTJGbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXJsSEkydXRYbjZXbHRuRkVTYjBSRlNwNDFXakQ1cTNMQ0Jhc2x6WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5RHYlMkJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJFMnJqMEx1enZGN1B4ZnRVZjhBWFBMRG5DM1hJMGV3ZHBPa1RLNFAwOFQlMkZBTUsyRWMxVExOZ2F4bUU5cEZJRHklMkJFQW4zR3h3VGdWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWJTJGJTJGMGUlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhZVWVacGZSMGE0a3BVQXgxOWg2aTc0YjRYNjVDYmpSNzZGVjVGb0pLS2U1QzFHSVZMZER1R2h1WHMySUtPWDRnZnN2R2R4JTJGc2tLdGtpeUQ2YmN0SEhiWGdQSW1PQzRxT3BYajZFMWZmNE1tNE5keGtwYzc3MEJ2Tm16WkZMczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOUx2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZva0tDVDBHJTJGM1pnYWlvTlFlbUFOWnVoYVdMeUUwTGxZMSUyQmJHbjZzV3NwQThRQSUyRlolMkZVY1ZSV2JObXhWMmJObXhWMmJObXhWMk5aUXdLbm9kajlPT3pZcXdEVDRpaVBac2ElMkZWTG01c2o3SSUyRjc2TCUyQk9UWFRwalBaUVN0OXBrQWI1cjhKeUtYcWZVdk1PcElRT0Z4RkRmb1A4cUZ2VGwlMkY0UTVJTkRrckZQQWY4QWRVaEklMkZ3QlYlMkZpSDhjbkxlQVBjeEhNcHJtelpzZ3lkbXpac1ZkbXpac1ZkbXpac1ZkbXpZeVdSSW8ya2tZS2lpck1kZ0FNVlg1c2pUZWFHbDFDenNiU0FPTHVYMHc3azE0S0N6eUFEJTJCVVpKQmlyZWJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWJTJGOVB2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZvNENYVUZhOWUwQ2JKUldrciUyQjBSV2xNSFpFSjVXdFBNdHpFNSUyQkdZSktueUswJTJGNGt1RUMxWmVNMklXMG9rakZUOFM3SCUyQnVMNEZZejUybU1XbjJ0RFRsY3BYNkZiREhSNWVjQ0glMkJaZXZ5d2wlMkZNTThkSnRuN0xkSiUyQkt2Z3J5OWNjck9KNjlLVnc5RTlHUzVzMmJBaDJiTm14VjJiTm14VjJiTm14VmkzbWlGVTFMU2J4dnNTdEpZekglMkZKblNpJTJGOEFEWXBvRXpMY3hxMVQ2OEZHciUyRnZ5RThHcmdqemRDMG1oWEVzWSUyRmUycFM1aSUyRjFvbURmOFJ3dHRKUkhkcmNEYU5iaFpWSTZlbmRJRyUyRjRtY25IZUpDRHpETDgyYk5rRXV6WnMyS3V6WnMyS3V6WnMyS3Vya1o4NDNaaHM0YlZUUXp2VnFmeXJ2ZzN6SE5QYjJVTXNMdEdCUEdKU3BJcWpFcVJVYjljaCUyQnZTU3ZwMEpsY3ZKQ0x5TXV4SmI0Sk52aSUyRjFTdUVCVnZrYVg5TCUyQlpibThTdjFmVGJmMFk2JTJGNzhsUHhIJTJGZ0Z6cGVSdnlQYldjWGx5eXViV0JJWHVveEpPVUc3dUtqazUlMkZhT1NTb3hQTlhaczJiQXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkYlMkZVNyUyRm16WnNWUTJvc3lXTTdvM0ZsUWtNT3hHUHRaaFBCSEtDRHlVRTA4ZSUyQk0xQmVkamNyNHhQVCUyRmdUaFY1Y3ZCSmJwR2VyZ0VmTURjWWEyUGtxZlpzMmJBcnMyYk5pcnMyYk5pcnMyYk5pcnNoZm5SR3RiN1Q5VFg3TGNvSkQycUR6U3Yzdmswd2w4MVdEYWpvZHpER0t6Umoxb1IzNVIlMkZGVDZSdGhITlhhVmNyS3NVdGZ0RGkzMDRkWno3eXJxUHJRQ0luY2RNbnNFbnFSSyUyRmNqZjU0eVZqUDVnd3RKNWNrY0QlMkI1bWlrJTJCaXZIJTJGQUkzd0Q1Um5FdHB3cldndzk4M1JHYnkxcWlxS2xZR2tBJTJGNHglMkZ2UCUyQk5jaG5rZTVCSVVHb1BRJTJGUEVKSEo2WEczSkZieEFPUHhPQTFpWDdzVXdJZG16WnNWZG16WnNWZG16WnNWVWJxQmJxMm10bSUyQnpNalJuNU1LWkRMUDRyQzJVVnE5cVlqN1NXc2hXbiUyQnR4T1RuSVZHNHR0V3ZkTmFpaUs3RnhHRHRXRzZUaSUyRndEd011U2h6UkxreSUyQjFsRTl2Rk1QOEFkaUszM2dZc2NLdEJtRFdodHElMkZIYk95TXA2OFNlU0g1VU9HcHlKNXBZZGUzbW9XUG1XNUt6SDBwSW8yV050MEEzV3YwdHMyRDczeko2Rmd6eHFxWHBLcEhHOWVETXg3RVlYZWQ0NVZlQzRnUENkWXlxdWEwSTVxNVZnT3YyY0FXOHNXbzJRTXFod3dveUhjVnlRRmhWT0x6dnJOcmRmNmZGSExGWDRrVmVCSCUyQnIxJTJGNGJKbHAlMkJ0MkdxV3JYRm5JQ3lLV2VKdG5VZ1YzWE9QNjdxRmphRkxIVXJwcmVjeSUyQmxaYWp4UERtTjFqbjhEdjhBYSUyQnklMkJJYVhyY2xyZHRaMzROcmZSMVVTb2ZnZW8ySzA2YyUyRjhBZ2NCQ1hyJTJGbHZYUnJkbnprNHJjb1NKRlhZZk1ibkR6T1YlMkJUcjgyZXFBT1FJcGFCcTdBVjJyJTJCT2RUcmlSU0VwOHo4Um9OOUk1QVdKUFY1SFlEMHlIciUyQkdRZzNOdHExbGNMYXp4M0NpWnZpaVlPS3pRbzlLamI3WXpvV3FSZXZwdDVBT3NrRWlqNWxDT21jNjAlMkJXQ0swajlPTllvNUlZcCUyQkVhaFFXQmVOalJhZkVjTVZUdlRiJTJCODBmeUhaM0Z1Z0U5dlNPUkpCVXFQVlpXJTJCRUh3M3lWYVhlQyUyRnNvYnVsR2tYNDFIUU1ObUglMkZCWnpDJTJCMWlUVGJhZFpVa2p0Smp6a1FxU0txTm01ZnNkTVBmeXIxJTJGUmRUOHZyYTJFNU41QzhrbDNiU01US3BrY3R6JTJCTDdTUDlwZU9BN2ZGa0lrZ2tDd09ma3o3TmxBMXk4REYyYk5teFYyYkVKTHkxaW5qdHBKVldlYXZwUkVqazNIYzhWNjR2aXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5WHYlMkJiTm14VnBsRHFVYmNNS0g1SElQb2tqV3NzdHF4JTJCSzJsWlBmNFdwazV5RjZuRjlSOHhzd0hHTzhRU2olMkZBRmg4RCUyRnFya29jNlZtU01IVU9PakFFZlRqc0FhWk1YaE1SUHhSbllmNUo2WVB5SlYyYk5teFYyYk5teFZRdXpPdHU3MjlQVlVjbEJGYTA3VTk4RGFmcXNGNmk5RWtJNmVQeXd3eUY2dkcyaTZvSlJVV2w2eFpDUDJKT3JyJTJGc3Z0TGhHNnMweWlLNFg2WmZpNFFJN1ZiOWx2NWglMkZYREhyZ1Y1YzhCMEx6TGMyUSUyQkdGMjlXRHc0U2ZGJTJGd3AlMkJIT2c2Wk1IaTRqMllmVGtaJTJGTUd3cEZhYXpHRHl0bTlHWWolMkZBSDI1JTJCRW4lMkZBRlglMkZBT0o0Tjh1WHdsaWljbnBzMzA1TG1GWkRld3JjMmR4YnQwbGllTnZreWxjNDUlMkJYMTBVQ1F6SGpMQVRFNFAlMkJRZU5jNkw1NWU1aTBKNTdXVm9uaWtSbVpEU3E3amYyeUIyT3AlMkZWWW9yMiUyRndCTmprdHBBR2p2N1p2VSUyQklub3k4VmFvJTJGYTQ0eENROWFzMjVSVkJxS25mQkdSYnk5ckJFc2xqY0lZMGFRJTJCZzVGQ0NRRDZiajlsc2xHQWlrTjVzMmJBcnMyYkd5T0kwYVJ1aUFzZm9GY1ZTJTJCJTJGMXEyc0psdHlyU3l0dXlwJTJCeURzQzN6d3hCcUFmSGZJJTJGb2RtdDJ6NnBjam5KSzVkQWV4UFQlMkZnUmtoeFYyYzc4Mm1TeTgyV1VnTklkVWhOczRQVG1sWFElMkZ3REJET2laQXZ6TGI2bkhwT3JsRmtqczdsV2RHOXl2eFZHJTJGd2l1R0ozVXAzWVRKRnI3b3AlMkJDOHQxbGpIanhvZHY4QVl0a2l5SGJ4eDZYZkt4JTJGY1hCaWxKMyUyQkFzVlVWOEZSbHlZQTRaODBEa2tQbXEzRXRsSEpTcFIlMkJKUGdIQkg2NlpCdEl1ZnF0OU5wOHBBTEhuRXBPNXAxb002WHEwUDFqVHJpUG9lUElmTmR4bkx0WnRyR1psdUJjRzN2RiUyQkZKWXVKZng0MElJeEhKS3p6YjVldDladFpZcDFMd3lnY2dQdEt5JTJGWmtUJTJGS1d1UktLQ09DNnROSDFDYmxjV2lJTERVV0hINndnNnd5RGVqeDlGdzRzZk9NakVCWTViaUgxSGdMeThWWXVsT2ZKViUyQnkzOHE0bmRIOUxsTDIxOUs0aWlsSHJXekx4bGhJNlNnRTElMkYyU25GS28wQ3p4eTI4ek1xY1N6c3BJWUJQajJJJTJGMWNkJTJGeXRuVlpkTlEyRDFJJTJCRVNNb1B3JTJGek1mdGRNRzIwVFNReXlibG1qZW56b2M0VFk2bGQ2ZGR5S3dNVXNiRlpvSHFOd2QxS25HWFJYczluNSUyRnY3bGc5OEdsV2hNandrMUElMkZtNGslMkZGN2pEU3dTUFVMVFRKSTNQR0JwaEdOd0c0T0hWVyUyQmduT05YJTJCc1dGcERGUGFTU0pjVEVTRzNUY1JsZjJ1UkslMkZhenElMkJrUjNhZVQ3ZSUyQmpuWDZ5b1c4aWJodCUyQjlpOVRnJTJCJTJGUTk4UVZaSHFzdHV0b3d1U1BTZFNwVjkxSVBWV3ppZjFpOTh0JTJCWjdtNDBGamJTV1VyTkNxRW1rZXg0RUg3YWNUOWx2MmM2bG9ubWJUdk1VVFdkd2dpdW1Xa3RyTFFoZ2U2SDlvZjZ1Ukx6ZDVadXJEVlA4UTJLZXRZRlVXN2pYZVNLaSUyQm0waEg3VVpIN1g3T0NZNGcyWU0wc01yanZleEI1U0hjWHNua1B6M1klMkJjZFBxS1E2bEFCOWJ0YSUyRjhsSTY5WTIlMkY0WEplRFhQSmx2UGU2SnFNZXE2Tk1ZTHVFODQyVG82bnRUb3l1djJrJTJGYXowSjVFOCUyQjJIbkd5STJ0OVZnQSUyQnQyWlAwZXBIJTJGTkVmJTJCRXlFU2VVdWZmM3RtYkZBeDhiQjlIOFVmNHNaOCUyRjZQODJUTU1MTmIxaURSclEzRXBCa2tQQzNqN3M1JTJGd0NOViUyQjAlMkJHVmM0bjVtOHlmcG56SmNzciUyRjZIWXNMZTIzMlBCdjNqMCUyRnkzJTJCSCUyRlk1SnhrTG91clgxNzUlMkZ0YjI4bWFTWnJsb3FzZGxRMVRnbyUyRlpVRE83NTUlMkI4dXhsdlBjTUk2aTZMQWUyelo2QndsUzdObXpZRmRtelpzVmRtelpzVmRtelpzVmRtelpzVmRtelpzVmYlMkZXNyUyRm16WnNWZGtiODNXNSUyQnJXMSUyQmclMkJLMWtBYyUyRjVEJTJGQ2YlMkJHNDVKTUM2amFyZTJGeGFFZjNxTW8lMkJkUGglMkY0YkNOaXFWNlZPT2NUViUyQkdSZUIzNyUyRmFYOVdIb3lGYUpNejIzQnFpV0U3anVDaCUyRnN5YVJzSFJYSFJnQ1Bwd3k1MmdMczJiTmtVdXpaczJLdXd1MXJTNDlXMDZXemI0WEk1UXY4QXl1dTZuREhNZW1Ldk9ORTFLV0dWckc3ckhQQ3hSZ2Vxc3BwazdzYjBYQzhXMmxVYmp4SGlNaG5ublRIdExtUFhyWmZnYWtkMVRzUjlpUSUyRlA3TFl0b21xJTJGV0kwSWFreWJvZjRINTVMbUZaZHFObEZxTmpjV013cWs2RkQ4ejlrJTJGUWM1MTVYdVpiVzRsMCUyQjUlMkJHV0Z6RTZuJTJCWlRUT2xXMDYzRVFrWFk5R1h3UGhuTyUyRk5zUzZUNXF0Ym9mQkhxYW5pZXhtaSUyQjJ2JTJCc1U0diUyRmxmRmdIY3JQVEZiYW5aTmIzY2F5d3lBcExFM1FqM3pqdXR3VyUyRmxqekJjNlBwNmZWOUpIcHNMTlNTZ1IxSElvclYzVnZpenEyalhRayUyQkFuZGxCQTl4bk52elJpV1B6SkJKV25yMmdKUCUyRkdOeXY4QUhBZGlrSjNZR2YwbzVwWkRJYm9TRDFHSko5YUFnaDYlMkY1YVV6b0ZuTjlZdFlaNmdtUkZZMDZWSTN6bFhrJTJGVkk1YmkyaG5sQmdkQnV4RkZhaGhmcjByU05zbkhsWFU0Skk1TkphU3QxYXZJUW0lMkI4UmFxdUQwSSUyQkxqa3BiZ0laSm16WnNpcnNEYWdDMWpjcXZVeE9CJTJGd0p3VGpYVU1ySzMyV0JCJTJCV0twZm9mRTZYYjhmNWQlMkZuaGprTVBtdlIlMkZLbHJKQnFreEJTVmtqQzBQSURwVGZJMTVzJTJGTU5idTNqYlI1cGxzWlZwNjlzd1JpOU4wZVNqTW5IJTJCUmNWcG02NjljV1d0WEduYXR3amdLbWEydVBzajB4JTJGTlh3JTJGYXlPZm1MciUyQmhYM2wlMkJQVFlya1hNJTJCcEd0bTF1UFVVY2VYN3lSeDhLTHR4JTJGMXM1eG9OJTJGZWZwVnI2QzhtdVZWZlV1TE84a01yRUllVGVtN2ZhUms1SXk1RmRUdVo5QjE2OXRyR1p2cWtjNWVGRDhTbUp6elVjVHRzcmNlV0h6VFQzZlJKdjBwNVVadnRPWVlyZ0N1JTJGSlY0UCUyRndBTkhuUHJqODN2TTJsWDl6cFdvQkpZSW5hSjU0MHBPaTElMkJHUlFEeGY0Y2xuNVozcVQyc3RqV3JLMGlleEVnRTYwJTJGMlhMT1VmbUhZTlplWmJoV1A5NEF5biUyRlYlMkJEJTJGalZjbExsYkVkUW45NTVxMXdUaVUzaHVMYWRlUUNzZlNsak85Vk5ldiUyRkFBMGJZSHViMVo3VjV5V2toSHhwY1ZISk53R2l1UDhBS1N0VmslMkZieUdhZnFMUXh5YWZPNVMybFBKV1VBbUdRJTJGN3VpQjhmOEFkMFglMkI3RiUyRnk4Q3RkNmpwbDNMYjN2JTJCa1FUcHhuaXFURGNRbjdMb1IlMkZ3VWIlMkZBTERaQ3l5ZWtXbDlaeWFGTFBlbFpHTjJ0cURFdFpKSGVuRXM2N2NrcFZYd3ExYlU3RzFpS1d2cXRjQ1I0YmtraEZZeCUyRkNIWGh2dlg0OEMlMkJVN0gxU2JLM2s5V3lhNWh2NEhjaFNCRjhGeEJMMldlT0oxayUyRjRzOVA0Y3UlMkYwaiUyRmMxRnBobUZ4UExlT2haQnhBaUw4anQ0MCUyRmE1WWVnVjZQcHJ2THBjRThzZnBUTmJoM1FWb0dLMTJ6bHVvUTJQblppaDQyZm1XSVZ0NXo4TWQ0cTlJNVA1SjE3WjJBOFlyV1ZsJTJCRVJvYUR3b052dXBuTHRiMDJMelJFZFIwaEJiYTdiVmU0dEVQRlp3cHI2c0glMkZBQmIlMkZBSk9Ta2dQTkxxR2FHN2UzdjQyaXVvVHdsaWNVSUs5aU03NTVLbkdvZVQ3Wlg2bTFDSCUyRllTTkNmJTJCRk9jdG51SWZOa1NXZXFFV3V1MjQ5T0M4Y2NmVzQ3ZWxjZCUyQmYlMkJWblElMkZ5eVM1dDlEazA2N2pNVnphU1hNTEszaFJKbHA0cjlyamtRbDVQYmFsY2FSZCUyQmxJN1Bid3lzSTVsTkpJaXJVJTJCSCUyRm1uT3VlViUyRk9VZW8lMkJuWTZoSXB1V1g5eFB0d25VJTJGaHolMkZuVE9QZVk0elklMkJZTlRncFZCY1NWUTlDckhrUDE0R3NiOXJGZ1JXU3pZMUsxJTJCS05oJTJCMHAlMkZaY1kyUWRsZXYlMkJaJTJGTEt4SzE5cGNkWUJVeldxZFl4MUx3aiUyQlQlMkJhUDhBWiUyRlp5SFc5eGU2WmZRNnBwazdRWHNCRFJUSWV2c1IlMkIwcCUyRmx5WSUyQlVQTlIxS0pMSzVsRDNLclczbTZlc2c2N2Y3OVQ5cE1EJTJCWnRDalRucVZpbElXJTJCS2VGUnNoUFdWQVAyUDklMkJKJTJCemtaUkIzRFBGbGxqbHhSUHo1RWR4OG1jdyUyRm0zYVh2a3pVTHlVQzMxMjJqRVQyb05BOGtoOU5aWVQlMkZKdnpiJTJCVE9aYWJJaG5Xa2dhT1Fjd3hPNTc3JTJGNWZqaEtJWW5kb1p2Z2FVRDA1djVTTjFKJTJGeUc2WUkwUlo0dFMlMkJveUtRUzFIVHdZSHNmZkFMcmRPUXdNJTJCTEdPRUhmaHU2UFd2SjZmNUZzZnJYbnFXOEslMkZEQkVaRDRjbUFWZjFaMmZPU2VTTG1mVDlSckhFV2x2RFNaYVZhZ05SMCUyQnp0blc4bVdzdXpaczJCRHMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlmdiUyQmJObXhWMlk1c280cXc2V0w5SGVZTGlMcEZjVW5qSFFmSDlyJTJGaHVXU2JUbkJnTVhlSml2MEg0bCUyRkE0VCUyQmE0ZlRXMDFGUnZESjZjaEElMkZZZnBYNU1NR2FYY0JtSHhiU3JzQ2RpNiUyRjJmOFJ5WjNqN2tkVTR6WnpyVGZPMnFRYTNlYUhya2F4NmhhdXglMkJyOUZrZ0olMkZkVDI3OTBaUCUyQkd5ZFdXb1d0JTJCbkszZXJBZkhHZG1YNXJrU0Vvdk5tMnlpUUFTVFFEcWNDdDVzTDVkWjA2S285WVNNTnFSQXY4QWl1Mkl2NWkwcUplY3NyS28lMkZ3QWtrJTJGY3RUaG85eW82OWh0YmkyZTJ2QXBnbUhCMWNnQTElMkJmZk9ZWCUyQm5YZmxYVWdoSmV6a05iYWJ4SDhqSCUyQmRjUFBOODJsNjViMmoyMTNETjlXZG1tdGVmQ1JrZGVKYU5TVmIxSSUyRnRZWFdNOGNWazJqYXZNOTVwVXY5emNQdkxCJTJGSTNMdnd3aElUMngxMktDQnJ4anlqUlMwNmpyeEc1WUQlMkJaY3J6enBrWG1qeWhMUHB6Q1NhRlZ2OEFUWm96dVhqSFA0R0glMkIlMkZFNUprVW1qdTlCdWphVHNKWUhIS0M0RzZTeG45ciUyRkFKcXdKSDVnMWZ5akRhdzJLcmNhRTB6U05FMjdSaVFtdHVYUFNKNiUyRnVXJTJGWWt4STZoVWc4aWE5cXVsYXRIZTNzMGs4RGd4R0taeXdCayUyQnkzJTJCVGtuJTJGTjYzYTh0dEcxYTNySEwlMkI5aElCJTJCSWRHSyUyRjhBQkE1RE5iUzB0TCUyQjRrc0pPZW56RVRXcmpZaU9UNGdqRDlsNFdxakwlMkZBSk9UVFU5WHROYzhyNmREUDhFOHJjNGlTUDcxUndrVGZjUCUyRkFMc1glMkJmbGdxMDl6RnZLZW9UTXdWMk5lQ3NCMEJhTnFmOGE1TjladTU5SzgzVzJwV2IlMkJuOWNqQm8yNFpYVU54SSUyRjFseUNXc0w2Zk5iM0xMeGlkMjR0U2dJTkE5UHV5YjY3cGQlMkZyMmthUGM2YnhONWI4b3dXWUtBWVclMkJHcFA4QWs0UnlRVTh1Zk9GN0pMRDlYUkxhQWo5NlpQaVl2NEE5QW4lMkZEWU9mejlvRWJ0QTBralhTcUclMkJycWg1TnRVJTJCa1c0aVFMJTJGazV5SyUyRml1TmFnakVjcFRVN1JqNllxYVNBYnRHMyUyRkZpbjRvbSUyRmElMkJ4aFhjR2VXeGxEZ3BQYmZ2VUZhUERLcEZYaUklMkZZayUyRmslMkZtd0ZYcjBuNWhmWEJKRnBWdHhtQzg0ak9hODElMkZhS3F2N1NmeTVHTDd6SnEycndYRmhxRjQwQWxXaVNRZkFFUFZXJTJCSDdTZnolMkZ3Q1JrVGwxZExXM3Q3eGk4MTA4QzNnOUVCQXJDbkk4anRWdnROUmNSMXp6VGRKY1F2WXdSVzd5Mjhkd3pGZlVibEl2STA1ZkFvJTJGMk9HeFN0M3pTVzlMUFhJVE1sQ2ppdXpvZnN5UnQyWWZzUGtkMGlhYlR0UWtzcDFacmE0VTg0WDZTSiUyQnc0JTJGd0FvRDdFaTVkenFWN0xGQ3Q3S1puVkFZJTJCUnF5ZzlhaiUyQlglMkJUSmRvdXVhSHJsdGIyUG1DTmZya0ttTzJ2S2NUJTJGa2dzUDJ2NWNqdGFwZm8wSnQlMkZNbGxGR0hsdFp2VmVLNHB0d1dOaTZ5VSUyQnpJdlJsd20xbVVhcnBOdEpIRVd1dE9rdUliaDBGU2Jma0dpWjIlMkZiNE14SCUyQnBrNnVaTk04c2FkZHl3U3ROSzYwNXRzS25ZY0YlMkZtYk9aeTNzMm5XYUxFJTJGRzRlNCUyQnNLNDNIRUx4b3dPekslMkZMNGx4NWZGV2IlMkZscHJQMVRXTFFNYUxNRlJoJTJGbFJ0eHIlMkZ3TFluJTJCZk5qTHAlMkJwMldwd2doV0x4dWYyU0dvUlglMkZBSURJOXBlbzJrTXRqZldRTVVpM0pNOXUyNGo1clQ0RCUyQjFHNXF5ZnlmWXpwJTJGd0NjZGltciUyQlVyYSUyRkclMkZ3cElTT29JcFhKRGNJUE40SERjUjNTY2wySTZxZW9PR052Y1F5dyUyRm8lMkIlMkZKV0dwTnZQMWFCeiUyQjBQR0Z2OEFka2YlMkJ6WEl4U2F5bTJOQ09oN01NTllMaExsT1M3SDlwZkE1RlUzMHZVTlE4dWFxaklxc2FxSGlPOFVzWjZFZUtzcmZBJTJCUzN5VXI2cDVpdWRUbDJTMVJ2UlRjaFRLZUNnViUyRmxUbGtPc3ZVdmVPbjhWa2RhdGF1eG95TiUyRklEJTJCMHIlMkZ3QW1UZnlZSHNyblRkUGFzYzElMkZOY3pYTVpBcndoVDA0ZzMlMkZBRDA1WWptbDZGZGl0bGNtdSUyRnB2WCUyRmdUbks1YlM0c3AxbUR0RklENmtMaW9QWFpnYzYxTkdUQk5ING8xUHBVaklwTmJ5WDBVbHZjdyUyRlY5VHN0N2kySXFIV245OUVQMmtaZjd4RiUyRjE4bk1YMXBBTk1SMVRUWWZNa1J1WVlsdCUyRk1FWTVFZllXN1VmdEwlMkZ3QVhqRGY4dSUyRk1Gek04bW5YNk1KTFdSRmtNaDR5aXF0R1VZVSUyRlpQODJJelclMkZINERWUUclMkZkdVB0UlAxRkclMkZsYjlsc0c2WkpESmZQY3ZHSTlXQ29KWndQaG1SR0hGMlglMkZmaTRBUDJwZWFmbUJFOEhtcThMZ0FUQ09WYWVCVUwlMkJ0Y2phdVVQaXA2cWUlMkJkSjgyeDI5M1BiMkd0eUw5Wm1XUm9MNVFBVVpaR1FLNDdwOW5PZDM5aGRhWmN0YVhTY1hYZFNOMVlIb3ludXB3RkNMMHpVWDB5NFNWR2Y2dVdEcXliUEc0Nk9uJTJCV3YlMkZBQTY1Mm5SdFklMkZUZHFKYmZqTGRxbks0Z2pwU1ZlbjFpQmY1RyUyRndCM1JmN3FmT0N4eWNhcXdxamZhSDhjayUyRmslMkI2MUsxMUFDMWtaWUlUNmdtQiUyQnh5Mm9QJTJCTWklMkZDNmY3TEVHbFpDYkJyJTJCJTJCdSUyRnFxcEJDalA2Y2J0eEh3bjRsanJYJTJGZ2NrT2oyRU1jQzZsSzZ5VFJLWW1rSW9ZbDZnRTl4VDdMNUhoY1RKcU0xakpDRWpqUVNRc0s3cVQzcmdpJTJGdUo3UFRES1EzMVM1ZjAzWlBpM1NyZkdQNVJpS0c2YmVqJTJCUVB6QjBDRyUyQnVOSHZCOVZlWng5V3ZaS0JYN2NDZjJQOGpPdmdoZ0dVMUIzQkhmUEhhUXJmdUV0M0RIa0FKYWtLaFA4QU8zN0ElMkJlZFg4aSUyQllQT2VuNmROcDJxSzV0NEpGanM1SENseW9OSmZUZGllVWFMOFMlMkZ3RENaRWNSTkVjJTJCcmZPT0tXTVRnZUdVYUVvSGZpJTJGcFJQOEF1bnQyQWIzVW9yV3FBYzVRSzhlZ0h6T1BodW9UWXJkZXNKWWduSnB0Z0RUcWR1JTJGdGtUMUM5WG5MUEl3b2ZqTGR1SjZmaGtnTGNZc2kwdlZSZlNTUlNVV1JkMVVlR0dneU4lMkJWckNTa21yWEtsWG5IQzNSdHVNWFhsVCUyQmFUSktNVFY3SmRtelpzQ3V6WnMyS3V6WnMyS3V6WnMyS3YlMkY5RHYlMkJiTm14VjJiTm14VkI2cmFmWHRPdUxYdkloNEh3WWJyJTJCT1JiUkwlMkJzTVRNYVNRc09TbnJzZUxaTkRuSWRmWFh0UDh6WHRuWkdDMnRKV0VzVXo4cEg0eUFFOFkxNHJzM0pmaWJKUlBNS3lmOEFNWHllM21LeWgxTFRIJTJCcmExcHg5UzB1bEZTVjZtTndQdFJuSWI1ZTh3WGx3JTJGd0NqOVZSOU4xdTEyUEdvRDl2VWdmcEpHJTJGN1VlZE44dWFwY1hzSDFlN0MlMkJyQWklMkZ2VjZPUHMxSyUyRnN0dGdMelA1WXNyJTJCM056SEZ4bWpQTWxOaiUyRnJMVGRXSHRpTnRsVTlJODJzeGExMWxBc3NmMmJtTWZBOVBGZjJHJTJGNFhJdDUwMXk4MVN5a0VFalJRUk1HRWFNVjVMMCUyQktuMnNxNGtlM2o5TzRhc3V5TE5Tbk1kdVglMkJWJTJGeExDZlZaJTJGUzB1OGNEa1ZoWWhmR2d4b2RHUUREWlBNY3VsdXNUenB3cnlNVDdtbmVoJTJCMHVUVk5MMWUlMkJzb2IxdExtbXRKbEVrYkZXNUZHRlI4TmZVemkyaVElMkZYTlh0TGpVQVhXZTZoRTNMJTJCUXlLSEclMkZiam5xenpQNW9rMEgwYmF4Z1dWeW9kaTVJUlU2S0J4NzRBU3J6T3pzZkwxdGNINjlwcE10ZHhNMGg0JTJGODgzT1MyR0xTNzIzOUsxcEdwR3dqJTJCRXIlMkZBTEhwaFZjZWNCY3lyYzZ2QkZkYWJMJTJCN2xWMFVQYnQxMktEbnglMkZsWVlHdnJXS3dQMW5UcDNraXJzVDBCcFdnY2RmOEFaREpnJTJGRmpTYW5TYjh4QzJ1cnNYdHBHNWt0N2RrVlJHYVU0ZyUyRkVUeSUyRndCYkl6YzYweFNleWxzZ3BoREplYWZOdElZJTJCbnFSRWZDeWdZY1dQbVYxNHgzcWtxUUR6QW80WCUyQllyJTJCME1FNmglMkJpZFpaSW1qTTkwRkxRelFqNDBCRk5uMiUyQjFYN0RZa2QyeWklMkJySE5JaDh1WGJMcDd5TEpkVG9aYlpKRFgxRVUwTk9YeENlTDl0ZiUyQko0UGhiVEx5YTU4c1hxcXQzRW9LbFY5TVNvUlVNbjhzc2Y3WEglMkZYeUQlMkJjZktGem9XblJhdEZxVVVVJTJCblNHU0dBc0JjRlhaYUZlSEpWWkR1MkhPbjNTZWU5S3QxJTJCc0N4OHgyeSUyQnBhWGFiQjJUeEg4cFAyMSUyRlp3QW51M1ZRdVYxQ0MyaVc5Y3glMkZ3Q2tTMjhrTXRBNWRLTEhMMSUyQjAwVEp5WlBoayUyQjFuUyUyRktONTlaMEdTTm5vNnlJNmUxVjR2JTJGd3k1ejlwdjhZV2o2SHJjZjZQODM2RVdtaWlIU2ZpdjJveCUyQjJrd0g3UDJmdExrMjh1eHJiZVhZTGhZWFY3Z016eGtFMElxUGlxTnElMkZ5NGdiJTJCU2s3UE5kWDFtJTJCSG1xYXl0SiUyRlR0VGR4JTJGQkdvU3U2c3dacWNqOFliQ25SbU05N2RyS3hLWGNzbHU3dFhiMSUyQlNCcSUyRndDU3paSzljMDZ4dU5VdXRTdGtCbHM1SUZrQUlBTW9IcVVVZnpOUmtiQ1BXNVhzNzByWmNWdEwwJTJCdENvQUZWYzFvSyUyRndBcm5pMlJJU2hkRDByVTlaMGcyVU5XMURSNUpMRyUyQmlyUmxRdVhobXAxWlA3Mk0lMkZ3Q3BoNzVnMEsyc3JhMjFHOGNoNWJhR0pVcHQ2eUFSdXZMNk9XRVFrMWVKcnE5czU1WUx4Qnp1R2hKRWpyM0xLdnhTcXY3V0lTYW5xMm9RUlhHcnl2ZDJNdFZodVNROGFOUWNoOE95TmpzcUVsaEsxaGJjciUyRmN2M0slMkZ5ViUyRnljUlNRQm1VaWlmc2ZRTTZGcGZsalNiclIwbUN5M0VqRGxESXpOOXNHbnBoVSUyRlolMkZsYklycW5sJTJGNmpNM0NiMVZScU9vVTgwNzhYb09IUElTSWlRQ2Q1Y2tnRTN0eVM0U3RLNnhTeSUyRkRKJTJCN0hxc2VPJTJGWVZ3MFcydGhhdHAxMGhlMmI3WUgyMWNmWmxqUDg2ZjhBRCUyRll4TzR0Yk80c280STdaVXZHNUxwbDNQc3NwclV3czM5MkpEJTJGdXQlMkZ3Q2JBT2g2c0x1VTZWcVlNRjRoS1J1Mng1RHJGSUQwWVk3cnNoNHRNbjA2JTJGa3NwanpqbmlhUzFuUWZESUUlMkJKV1h3ZGFmRXY3T2QwdWdubUw4dG1ZaXBXRU9CMW9HV3AlMkZ3Q0g1Wnk0aG9UOVd1VTVCVHpqN0ZIcCUyRmVJZTMlMkJYJTJGQURyblIlMkZ5c3ZSZmFIZWFKSXdaNFJKR284UUR6USUyRjhBQXk1T1BWQmZQTnhicE1waWZZcWFCdTRJd0ZZV2x4OWZFSUpVN2xtSDdTJTJGODNaSjllMHg3Szl1blJnOGF6TWtvSFdKeVNWUiUyRjlZSDRXJTJCemolMkZLdHZGZGF4QkRMUUt6QVZPMjQzRyUyRjhBcllQSlVYYjJOdkRadGR5V3hlM0I0bWVDUSUyQnRHMzdKa2piOWxhZmFYSFJYbDlxMnI2ZXRuV0o3WXh4MjhoJTJCMVVOeU1qdCUyRmxING15WDZscDFwb1BtNTdDSUZMRzhqaWtDc0tpc3FxWFduY2MyJTJCemhMWlcwT20zNWhDdUxpQ2VTZ0lIRlk2N0tUOXJsNFlhVjYzSXdNVlNha2cxcHQyN2VHUnV6dnJUV0lMZFlibmxjSVdYU2RRYzhXNXBYbHA5MSUyRkxJUDkxTSUyRjk0bUc5dGNmVzNBUTE0eGdzUEg0YzRacCUyQnR6NkhxTjJySjYxbk5JeTNsb1RUa0E1NHlJZjkxelIlMkZhaWx5Uk5VaW5wVjBpWHF5eXh3JTJCamRXNU1kJTJGYU4xaVBkcWY3NGY4QTVKdGthMVpaNExXWXhzeVNLcGFDUlQ4UUklMkJJeGtqMkh3NUtMZTYlMkZUc1VGJTJGcDF3c21yUlJrMmwwUUFMNkZmdDI5MGclMkZ1N3VQN0xvMzk1aEZxdXFhTDlYWm1tV0NSd3lTV1RnczhNZ0c2T28lMkZZNWZaYkFVaEMlMkJaOUpzZk1sMVNLWVclMkJxeVFSVDJETWYzVXZKZVR3dDRNNSUyQkpjaEt5ck9yNkQ1Z1F3VFFFcEZLJTJGd0RlUXY4QXluJTJCWkRrJTJCMUd5ajFldzBTYUM0Z1M1bnRtQ3RYMEVMUXRRQU0lMkZFY3Y1Rnd2MWJReHIlMkJuaHI0b21zMnltUDZ4dUNTdFNJYm9mNnY4QWR6WU9hR0FRJTJCWGRUbTFOZExqajVTTjhRa0c2Rk92cUJ1JTJCVGpUclMyc2JaTENNY1ZVbWtwRkdMbjdSZiUyRkFGdiUyQkZ4VFRtZTEwMkRUdUlMSXdacEtrc1clMkJ6eFd0VzQxJTJGWnlVMlhsVzQxSGhjYWh5dE9RSlpWSEthWHclMkZkJTJGN3JZJTJGenZpQXFRMjFsZFh0eXRyREcwazUyNHFLbW5qOHNPNzM2cm9ObU5JbHRmVnY3aEZlYU1ua1VxVHdweE5BMlMyTWFUNWV0Uzl3NldkdEV2eDFiNDJBN1N5bWglMkYyQzV6VHpiJTJCWnVuM3N3T2phY0dWS3dycU1nb2FqZWlKU3IlMkZPVERWZFZaUFlhM3BPaiUyQlc3dTMxdUtLenVaR1AxZGVQUDFJejFVb3Z4dEolMkZsWVUlMkZsJTJGNWhPdHlTJTJCV3JsaXMxR20wcHlmaVI0JTJGaTlLdjdTdW1jcnZOWW51NURjWEg3eVRvYW1yZlNmNllMOHJhdExaJTJCWnRKdm9UNmJ3WE1iRWp1Q3dWaDh1SmF1UEZ1RmUlMkJ4JTJCWUo0Tk1hd1FpT0Z6eVpPbERYNGglMkZ3UXlRZVZ0QW4xQlk5UjFRTjlXVTF0b0clMkZhM3FHWWVHRTNsblJMUFZmTTE5TGRBeVdrVHRjVzhhN3hPR2FxMWtHejdrJTJGQU02bW9BQUNpZ0EyQXhKN2xvam43MndBTmdLQWJETHpac2lyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOUh2JTJCYk5teFYyYk5teFYyUXp6M3AzUDZycUtiRkt3eXQlMkZrbjRsSlBzZVdUUE9WZm5YNWdtc3ROdGRCdG5NYmFqeWt1WEhYMFl5UGglMkYyYiUyRndERWNicmZtMjRNUnpaSTQ0N0dSNTl3NnBNZk55V2w3RWREMUtNM0NwNmR3b0tsZGolMkIxekhFJTJGUmtvMHJ6MXJVdHo5U3ZMZTJsbTJIcDhqQzdCaFdxVjV4dlViJTJGRG5uMDFqUEVpbjhwSGdja2VtWG1zVGFIY3hBTncwNW81N083SUlLeGxpSllsbCUyRmFSVCUyQjg0JTJGc05rSVpoSWtTalJEbDZ6cyUyRndJakpDWEZIa2I1Z3AzJTJCYTJyJTJCYmRQdUV2WUxWYkxScGlGTDI3YzJFdldrajAlMkZkOHYyVnBrR3NmTjJwM0tyYTNWMlhpY2dFc1FlUUozcVNOczdkJTJCa2RPMXJTYkt3MUxoTiUyQmxiUlhWSktGWnlxOFpWMyUyRjNZR0hMT0VlY3ZLRng1VHZUTER5bTBpZHYzRXZkRyUyRndCOXlmNWElMkZzdCUyQjNscEhVT3ZzdWE0aU53YldDcnVISyUyRkIwcU45ajB6b3klMkJhclc0OHIyT3EzbDFMZTJzU2l6dUdrcWs2emdVVlhNZGE4RiUyRndDRFRPTzJNMDFySXMwWENSUTRrSHFDcUduWmw3NE5na1RsTXFTT0lacFBWTnJYakdHOFF2Zmoyd1h6U3lxejFlTyUyRnROU2pRTThzVnViaEZiYmtJcFBpSSUyQlVSNVljYTNxMTdJZFBtdFoyanM3eXp0cmlPTk5oeUFLU2NpUHRNSlVmSVphWERXTCUyQnJhMGpjcTBaWUFWNHlBcTZtdjh5bkpmNVlleDFQUmpwVXNmTyUyRjBwbnVMSldOUFVna05aNGwlMkZtOU5oNnZIJTJCVnBNUmEydXZCY1hlajJHcDJyU0M1dEpKYk9aa3FXNHYlMkIlMkZnWSUyQnglMkZlSmh0QkI1c09pMzEzYm9MYTlpaE1sbzNFQjVDbEdrVUx5JTJCMTZYSms0cmhsWmFyQkZBYlpsanRyUzVUZyUyRm9JRjRmeU9UMUpqYkMxTCUyQmJTYm93eU13dTRXcnpKcnlYOWgxUFFweHclMkZGV0ZYTnV0OVBCNnNyUzZmcmxxSTRKWkhKJTJCcjMwYkNzYk9mNXBoeDMlMkZBTjFUJTJGd0NSZ1BRYnRyZVZyRUZyVzhnZm5EVTBkSlVQRjA5dW5IRCUyRkFGZXlnamp2YmkyaGFUUWJweGNYbHBIdkxwOXg5bjZ4Q2xmanRqWGkxUDJQM2IlMkZHc2VFOTlvbDlxdHlqSUthbVlsa3RiNk1uMEw1UUtKOFpwNmQzeCUyQkg0dnQ4T0QlMkZ2Y2lUWFBaYVolMkJrZHA1JTJCZ3QxOVlhZDVwMCUyRmUwdlUyWThUME5QaWFNJTJGdEolMkZ1dk9qNmxjR3lzRmFSbFl4SldVamZrVVhrM3o1TU01cCUyQlYybDNVMnBQZGFsRkhLMXNPTHlxUXhTWmFGT2REV09UN1clMkY3ZVRUeks4VWRsY3hSRWhYQlRmJTJCZHpXZyUyQjdKeE5qaTcwSG5UeiUyQjUxR1h5cnJGeGFhcEQ2OW5mY1JxU2Z0cXhITDFvaiUyRk9qUGp0UTBHTllDZnJDWFdpM1FNdGxlbGh5amtZYkZmZHZzeXg0TTg3V3k2enFlbVRxNFg5S3dRbm1lZ2tLJTJCbWYlMkJTaTVHOU0xUFZmTFV0M29kM0NKSUdERVFTN2lLVUQ0Wm92OCUyRmp5RXJxcnJ1UE5rSzU4JTJGSk43U3gwJTJCMHNEZTNrMGs5eEE2SkJKQUNHcXdQSGlLcDhTOGZ0czJGMG1yRFMzbnViUFRoSDZaTGE1WWNRc25CdnMza1NzQ25KZVhKdUslMkZCJTJGd0FZbXdRJTJGclhkakVzUVJpemh2aktDclVwOElmNHVXJTJGd0N5dUszRnM4OTNwMW5lemZWZGVEQ094bUhGaThaSCUyQjg5d1NlQmpQMll1WCUyQlZGaVlnZ0E3MFBtdDlRemZ5amR4WGVpUGVhWTNyTll0OVpqZEtVa2dQMmd5ajdMOGZ0TCUyRlBnVHoydHVMZEpJVDZjTjFKRmN4ekoyVTdTYiUyRnMlMkZhNUJzS2ZMRU12bFBYYnkyc0pJNDB1RiUyRjBpelZ1VWNiMDVuMHozZ2tUbHclMkYzMjM3dkhlZGRYTjVwRU1kbmJtT3lzNEJGY3kwcURjRjZHSmElMkZ3REZhY215WDhQdTJSMVFPaTZZdXBhYmQyRjc4ZGo2eGpMVkZVbHB5U2FId2tVZjdGMCUyQkRJcnJ2bDZkcjQyTjBlT3RSSUhzN2xka3Y0QjlpamY4dEtnZkIlMkZQJTJGQUhYMjhtUGx1eWIwVnM3T2RUTDZTU1Jlb0s4JTJGVFpxTiUyRnJxT1BMJTJGSndUcWRoRnI5bTFscVVoam5oY20ydXY4QWRsdE4lMkZNS2Y3cGI5dFA4QVpyalZoV0hhSHJFV3F4alRiOWd0OUdLUXl0c1hwdHhOZjJzbDM1ZDNKMGp6bkpiQ29qdVFsUjI2Y1QlMkJ0YzU1cXRoZHlYY3l5SjlYOHdXZngzRVNiQzZVYnJjd2Z6UzhmamZqJTJGQUh5ZnZQdDg4TiUyRkt1cTNGM3ExaHFCSUV5YzRwV1p1Q2tvQXdjazlNQTUwVlBKViUyRk1xMmswVHpuZkNKUVVtUEpvbSUyQnpKRyUyRnhjVzl0JTJGd0RZNFE2Y0lMYTZaWTJlS1J3c2x2NmdvYURmanklMkZhSzRmJTJGQUpsZWFkTTgwYTh0MXBjWjlHQ0pZbXVHMk1yRDdUQWZzcXYyViUyRm13cjBXeXVOWFV3JTJGVnhjaTElMkJLTHQlMkZ3MjN3cmc2cUdWYW5yMXZySzJ0M2NzSXJ5MWFFU0JqeEpFWVlPUWZmNGNqdm0zekxicFpYTFdUR0M1dnIlMkZ3Q3N3UmpmakJHb0M4eWZpJTJCSWpDUFgydk5NdSUyRnFaRFJOR0tTQWdVcXhxZ3FLcnVGJTJCSDRzanN5UFBJWlpTWEo3a25mRzFlOSUyRmx4cmR0NWtzYnFkU0Z1N2VNTGNXNU80JTJCRTBjVjZ4dm5GNzV1VnpjYjE0eXlCVzclMkZhTzJLZVM5UnV0Qzh5V2Q3RE1ZTGZuNmQzTCUyQng2RDdTTEo3WWhka05kM1VrUkRSU1hFcnhNRFVGR2NsVDlJd25kQ3RwV3J6NlpOOE1za2NEc0dkb2p4a2pjZlptaXAlMkIydjhBTCUyQjNpV295U2ZYYmlIVW1GeTE0ZnJLWHFING5MMTR6SyUyRlZ1WDdjYllFZUpXRFBRVnBVMFBqMHg2eXFMTDBwSlVXNHRYRTFvNU85U2FTUmJlUDI4Q29iMVoxVDZ2UEt6eGplTlNTUUs5YVYlMkJ6blhMZlVyZHREdDlUMVUlMkJqZVJ4cGEzaU12RjVWNDFqY2clMkZ0cnglMkJMT2Q2VmJhVHFKbFM3bE1sNUlyaTNoSHdSaVFqOTIwc25oek9EcHBXc2lpNnpjR2VTWmczcG8zTlN5JTJGRCUyRmVuNEs5VjU0MnIwTHloZWFYY201dWFDQ1dOaHhrbCUyRnZDbE9xY3ZzNHJybjVnMmVuSTl0cEtpNHVxbFdjazByU3Z4UDhBdGY3SElUYXpwY2NyaU5hTEdEJTJGb3pHbkJWSUprWlAyNjElMkJGdVdFNGp1THFTWm8ycGJKTWp5aXRBUWVWUHdyanhiVUUwMXJldVhHdkNLUFVaSjJDczBpcWdVZ0Z0dW53JTJGQ0tmRGhXTFhTemF5Vzczanh1R0VsV2dKVWJVb1NEaGtMY1hFakpEU0pxa29TZCUyQkg3T0dsaDVhMUh6RE9OSWl0JTJGV3ZaRU1rSlJsUXRHbEtzQ3hWWDQlMkZ5JTJGYXdXdElMVExUVG1lTW1iVHJtMWpYZTBubU1MT3dIMm5abHJXdiUyQlZobEJiNkxxbDA5enBlbXJieDJjSmU1V05xaVJpM0VLcmZ5aiUyQlpSOFdKNnglMkJWUG5YUXJLNDFpOXNsanNyVUI1cEJMR3pBVkNnaU5XTE51ZnM0SThoNmhwNzM4c054UkJleGVpNUJvQkpXc2NnJTJGMlh3NFZaam9NbGxGYng2MzVZNTJrOW12UFVkS2FSakhJRiUyQjA4UEluaEpRVjYlMkZhJTJCSE9xNmQ1JTJGMEc3dG9aekslMkZCd0t6QkNWclRvM0dwUSUyRjYyY1lXMjFEUSUyRk1VVnJGSCUyQjV2eUluUFNJcXpmRTFmMmFmYXdrbXRwNDJrbHQwZjZ1enVJbldvRHFyRlFSUWprTUpWOVEybXM2VmZpdHBlUlMlMkJ3WVYlMkZ3Q0JORGcyb3p6cjVZMXZUSTdWOUwxUG5iVERrOEU0UXM3TTFLS0hCRHA5R1RmUWZPZG9zU3h3NnR4a3A4VU4wRHhCRzM3V05lYTA5VXpaQk5ZJTJGTTNTZkxjVnJMckRJeVhaS3dtMmJtVzQwRHNGMyUyQkZhJTJGRjhlVFcxdW9ieTJpdTdkdWNNeUNTTmgzVmhVWUVLMmJOWE5pcnMyYk5pcnMyYk5pciUyRiUyRlM3JTJGbXpac1ZkbXpac1ZkbkUlMkZ3QTlyS1lYbWo2alQ5dzBjdHVUNE9wRWdCJTJGMWxPZHN5TyUyQmQlMkZMVWZtdnklMkZjYVhzdHh0Tlp5SG9zeWJvZmszMkclMkYxc0I1T1JwTW94WjRUUElHajdwYlBsJTJCTlByRVJpJTJGYUc2SDM4TWtQbFh6aCUyQmpoSG8lMkJybXVuQ3F3WEZLbURtZmlTUmYyN2QlMkZ3QnY5cE1KQkRjV043SmFYY1JodVlIS1RSUHNWZFQwUCUyRk5XQjlSaVdPNmFnJTJGZHlnU0w3Y3V2M0hLcGt3SW1QY1hvTTJLR2FIaHkzQjNCSGYzaDZCNXFzbFhRb29OT1ZvZjBhN1hkaTZmRHhCUEtRUTc4dlQzNXhObDZGcjFsNXMweVhTTlpSSHVqSHhsUmh0TXYlMkIlMkZFOEpCOXIlMkZBSWZJTG8ycFQ2WGZMZDhtbWlLZWhQQXpFOG9UJTJCeXZLdE9QV1AlMkJYS3ZyYWZTcGwxWFQyTDZlejg0THFMckUxYThXSDdQSDdORGxrTW9sdVBpSFJhclJ6MDVGJTJCcUo1U0hmMUNUJTJCWiUyRkxsejVXdnZUVW1YVDVqVzJuUCUyRkVIJTJGd0NMQiUyRncyRmF1RDhTbjZjNjdhM1ZoNXgwcDdHJTJCUmZyQVdza1k2RUhwTEZYcCUyRnhwbkxkYzBTODh0M3B0cmlyMjdtc0UzWmxINm5YOXBjbVIxSEp4RlMzdUE0b2Z0REJsdmN6Mmx4SGMyc2pRenhNR2psVFlnakNWRzZNaCUyQldENFpSSXZ2M0dDMVo3cGR4SHJhTkpDVml1a3ExM2Fzd1ZBTzl4Q1clMkYzVWY4QWRrZiUyQjYlMkY4QVZ3MXQ1TlBrS2FiZTNTeXFLRzJ1SXF1WURYN0pjN2VpMzdhJTJGWiUyRmF6bTl0ZFQyZHhIZFd6Y0pZenlROVI0VUk3cXclMkJGaGt3aHZEcUVDVGFaYkV4eUhoUGJxS21DWWl2QmYlMkJLWlB0UiUyRjhEZ0lrU0R4VkhxSyUyRlN5QkZiamZ2UjhrMXhZNmdWdExiNnZKYlZXWmJodlZMbzM4eUFlbVlaRiUyRjRYQ2pXME1jWDk4NiUyQlg3MlVlbTZWNTZiZWtWQVlMdTBEJTJGOEFKU0wlMkZBSXRqdzdXMHV0VmdqMCUyQjdrOURVTGMlMkJuYVNNYUZrcnZheiUyRjh5WFAlMkJwZ3EwMGl6dGJrYVZjUDhBV0JlcjZOekV3b3JMV2pSc29KNHlSdjhBRWpyOWpHT01EYm41eTNVeUo4dmN5ZnlIcGwxcHVoeTMxekVFMWU5Y0pmS3hYaks4Sk1hVHFmR1pDcnQlMkZOOXJDWDh3ZGElMkJxeWFiQUdBTTg1YVlBOUZVY1YlMkZ3Q0d5WlhFbHZiMjBWZ0hiMUxlTkRFS21wS0RoR1MlMkZmT0slMkJjcmh0VTFHOHZMWiUyQllzejZNMFElMkIwbkJoNmN3SCUyQiUyQjVhZjdGOHNsc0FBeEc1dGtlc1RtNjhzYWRkbzNHYlRaNWJiMUIxRyUyRnJSZnJ4R1RXN0x6UHBjcmFoQUxmekRwaXI5YmlJNHRKRVNBWm93ZnRKOFN2eCUyRlklMkYxY0Q2Vk1iM1JOVHNTaEptaGp1NGdWUDJvdnRIJTJGZ0clMkJMQlZuYjZiNWcwdXgxSkdXRFhORGo0U0Vpb25nUWNHamslMkYzNGhYN0xmc1lCdWt0JTJCV2JhNGdXSFdtaiUyQnNXZHBLMER3cXklMkJvV2tvbkpFJTJGdkhaT2ZOY0tkYXNuazgwMjg4VE42RUVxeE9YTldTT0ppUzduMnA4ZUI0YnlTdzFpbHY4QXU0T1FrNDdrS28lMkJMdiUyRkxYN1dLNmpyNHU5VWVlMWpJdG5kaUlpYXN5djlzViUyRmwzd1dBRlpCYnZZYWpxc1YlMkZEU1AxeUlUUFVnU0tIOVNTaW5ZY0lSdyUyQkg3VFNKaHIlMkJZT3Iyc09rV21uaEhTSzZZaVJvbEZGNUElMkJuNm5nSmlmOEFXeVAyTUw2ZGJpUkklMkZycXNBSTNTUkFzTVklMkJ4SEtybEdoZmwlMkZlZkIlMkI4JTJGM1hnWFhZcHBKRzFtMnVua2JqNk9wMnBVU0tWQXFrc1NOc2lmNUwlMkZGSDl2SG9VbHJ5dGR0RENnZG1WN2Q1STJib1UlMkJJTkdUJTJGTGhwcjNuTFRLSjlVVDE5VEI0ek5IdENlM0pqM2IyWElzc3AxWThiVWZGT1FzaXg3U0NTbEFYcFRtajRhdjVPbnNkTSUyQnV6QjNabTlPV2FOR0QyJTJGTWdSVG9sUDNzWFA0WnY5MmZ5WWk2b0lURFZyRzI4eDZOQmVCdnFXb1dTMWl2U2VJaWtVOGpGSSUyQnpMQTYlMkZHbiUyQiUyQjN5RmFxMXBjWGl4MjhaVUdpM1Uyd2FkeCUyRnV6aUFFV3Y4QXElMkZIOXZETFY3VHpYZVdycWJhV080VmhIZU5IdEZkQ1A3RWhYNUQ0djklMkJmYndwQzNsaUdndklvVmRTcXQ2cExQR3IwcFRqJTJCejhYdzRDVWtFR2lsN1J3UnU5Wnp3alB4OFVaaUtlUFNoeWIlMkJSZk1kaEhNMmtMRVYlMkJzRGxETFFGbmNVQ3hjUlg3V0VGMURDczYzekNzNnI2YzFOa2VuY3I3cmdYU3BGc2I1ekNGb3JlcEM5UGlVRWZacjREQURSVkQlMkJkZFVrUG1QVTRsVWdWTnRORzRxRHcyQm9mMmtQMkd5SzFMRUNwWSUyQkFxVG5VRmhzdGExQ2UlMkIxRzNpbnVaQ3J5U3NncXdxRk5Sa3d1OVI4bSUyQldJd3NjRUhyaGFyREJHalNINXRUNGY5a2NJb29wNGRhNlZxdDJHVzB0YmlRSGJpa2JrSDU3VXdITkZMYlN2YjNDTkZMRXhTU0p4eEtzdXpLd1BRak91MyUyRm1xJTJCMW1GbzFDMk5tRk1qaFRRTEd1JTJGS1J0dW1RZlUlMkZNV2gzdW9UWHgwcjFwSmVQS1NXU25KbFZVNWxRTnVmSG5oUXhtT1l4a2xTUGlGQ0R2VVpRS1VJcFVuN0pyMCUyQjdEOGVZckJQN25SYlVmNjFXJTJGaG1QbXRrQkZ2cHRuRWV6Q01rajc4Q3BSWk9ZNXclMkZCbVdoQkNqc2V1U3l5bjBwSXBJcjJDU3IyZ3RiWVRRdDZheWx1ZlBwOFBCV2JDWlBOdXJST3NrWWdWa1lPdjd0U0FWTlJ0ZzI3ODAlMkJZUE5kNUNkV3VSSkhFV2tXT05GalJhaWglMkJGQVBsanNxTGVSclZoJTJCalF0M0dCUm9YQkJLQWZGd2FnJTJCTEoxNUIxN3lmZWFsRTJ0YVRIY1hNRzYzRXElMkZ2YllMJTJGdnlIJTJCNmVGSyUyRjNpSnlUOXZBWGtQeWdQTkV1b3h4M0tRM1ZyQUh0WVdQOEFlT3hwdiUyRnhXcWlqTXYyV1pNTGRTOHZCTHg0cGc5anFWcVRGSkl2d3VwNmZ2UDVsUCUyRkRMaWxsdjVpJTJCU3RQdEw4NjdwRUVjZW02aHhraXZMV2pJayUyRmV2SGIwNWZ0WkY5T2tkNUV0NW1heXZvV0V0cmRSbW5DVWZZbWhZZnpmdHAlMkIzazMlMkZBQzY4ekxmeCUyRndDRmRXdDFlRWxyYlVvVyUyQndHSXJEUEd2N0N5VSUyQkxqJTJCMThlSWVhdktNM2xxN1dxZldOT2tZaXp1WEZlTmVzRTlQOEFpWDdXTmJxQ25jZm0yZnpSb1VtZzZ6RXFhN1pQRFBQQ3Y5M2VRUk1DMDBBJTJGYSUyRlphV0xDSHpmOEFsN29PcmE1YjZoNUt1QkhlM3JqNjFZd3IlMkI1WGx1MCUyRkwlMkZkRGZ6eCUyRjhRd3B1cDRWV0JyT1JoZlc3aVMwWWtySmJrZFJMS3Yyb20lMkZZNGZienN2a1hVN2ZXTkhqdTNqaGoxWkFJOVVFS2hTSnZFbWclMkJGMSUyQlBFaFhnUG0lMkI5OHklMkJXcmlUeXhyTTBpQ01CbzVWVlc5YURvSklabSUyQkxpZjVmdFJ0aE41WDh6eFdYbSUyRlRaOWRIcTZISCUyRm96MnoxZU5MZDFLcTRUdndZJTJCbzJlbCUyRlBYa2pUUFBHa05ZM243cTdocTlqZXFQamlrcCUyRndBTkUlMkY4QXV4TThtYXpvJTJCcSUyQlY5VXVOSTFLTDA3eTJQRmxiZFdVJTJGWmxqUDdVVGZzdGloOUp5NmQlMkJWVjNmMmRqYTNsdEhlNmlwZXpTMm1yekFGZmglMkIyaU1mMkslMkZFMlhjZms1b2pvVFozMTFiejFKRWpGWEclMkZpdEUlMkY0bG5saDNVU0xLQ1k3bFNHTFE3VUkzREE5bXowTCUyQlZQNXdMcXhpOHMlMkJhWlJIcUlwSFpYMGhBRTlObGpsUGFmJTJGSyUyRjNaJTJGcllxcWFsJTJCUyUyQm9YYjJFWXZyYVdHM2tjeXZMRzNJUnV3WSUyQmtnUEZXMlBmSmpaJTJCUnJ1d3VGYTIxaVJZRkFDS0ZLc0tmNnIlMkJtZiUyQlJlVFVEeHk2WXFvMjBMUVFwRThyenNvM2xrcHliNThRQmkyYk5pcnMyYk5pcnMyYk5pciUyRkFQJTJGVDclMkZtelpzVmRtelpzVmRsRUE5Y3ZOaXJ6Yjh6dklmNmJoT3U2UkVQMHRiTCUyQiUyQmpVYjNFUSUyRlolMkY0eXAlMkJ4JTJGUDlqT0hhZ3ZxV3NNdyUyQjFFVEd3UFdoMzN6MXpuSSUyRnpMOGhxRXV0ZjBxUDRKUnp2cmRSOWx3UiUyRnBDRHclMkYzNyUyRndlUm5HeFR0TkJyZUV4dzVEc0Q2U2VuOUY0Z3BwaHRvMnByWVNTUTNLZXRwMTFSYnlBaXUzUVNvUDUwJTJGNFpjSzVZekc1UTdlR1BFVXlScE15a1JTRWhIN01WMkl6R0FrRFk1aDNPU0VNa0RqeUN4TDhiZWFaYWdseG9PcHhUVzdxTFNXa21uM2NYMmVKMzRueCUyRndBcGNsTXNlbiUyQmNkSWVDNFFDWlFQWGpIMmthbnd5eGUyUmpUNyUyQjJlMGJSdFZITFQ1U1dobCUyRmF0NU96ciUyRnhXeCUyQjJ1Sld0eGU2SHFTdzh3dHhEdkJMJTJCeExHZWdQOHlPTXljZVFFYmN1bzdubk5WcFo0Sm1NdHdkNHklMkZuRDliRU5VMHk4MEMlMkJhenVSeVRySElQc3VuWmglMkZUS2lsNGtTSWFqJTJCR2RaMUhUdE04NDZTWFVlbkt2MmdOM2dscDElMkZ5a1AlMkZENXlPOXM3dlJiMlN4dlU0c2gzSTZNT3pwN05reU9vNU9LbVN1R1VNdlE5TU1kRjFtNDBTJTJGanZvQUhVZkRQQTMyWkl6OXBHSCUyRkRJZjJHd2p0NVFoMyUyQnczJTJCZGNGbnJpcjBHVzVLeXg2aGF2Nmx0ZnFESGRkVzVEYmkxZG81ViUyQnc2JTJGelpMUExiUTZuUDhBV3JwQWJ5M29KR0kya1hxa3JmeXlxUjlyT1U2SHJLV0hxMk44R2wweTZwNjZMdTBialpaNHYlMkJMRiUyRmFYJTJGQUhZbWRhOHAyaTJ0azhzanJJN21pVElUeGtqJTJCMUhKUTdodUolMkJMSlIzSzNzbnVxM2ZvMnJ1b3FRQzNpZHZzZ0QlMkZXcG5NSiUyRkolMkZtZTRNc3EyakM5dHVVYVhjWEVSM2RySjFqYXBINzJOVyUyQkZtWCUyRml0JTJGd0I1blRkSWtzeXpXMGMlMkZyeXhWWmd6Qm1Dc2E0ZUNaQUtIRElXZ2JQRHZLOWpxdWg2eGFXJTJCdFc4MXJETDZsb3pUS2FGSlFWQUIlMkJLdGZod3ZzNDdteXZMJTJCTlFmVHMya0Q5VUs4Z1FLbHYyWHA4U3RuUiUyRnpRMUdXMDh1JTJCbFpPMGQzZFR4eFFzaEtzS0htN2hoOWppcSUyRmF6aTZNeEVpSTVZT2EzTnl4Sk1qVnJ1eCUyQklybGN0bVEzVFM5MUUzakNHMmpISTA5UjFxT2RPZ0ZmOTFyJTJGdzJDTEtGWXh5SkJJRlpKT3dIZ01DMk5yeUczd1JucTU2dCUyRlpodXNaaWlodTdjTVd0NWlyMnpweWlrVUFVOVQlMkJZY3VXUjVwZFBxaWFjUXJXcVhDelIxVVNWQkFiJTJGQUhZcCUyRm53dXRkVmh0ZFRhJTJGZ1dWQk9BazhCY05HOUJUcXlrNGM2cmMyZHhlMkYzYzJrY0tKR0k3cXg0a1VqcHlSMEI2VnIlMkZOaEJxYzloYVN4cEhFUmFYUmFXSXQlMkZ1dmNvVFJhNzVQbHlRbiUyRkFKWnZZSSUyRk1VUzJTTkVMaVZURXlnVWpuVlc5T2xmdEk4aFZXVnNuU1hWeGZUR1M2bGFTVmlDUzJ3b2Rqc05zNSUyRm84cnJMNjlxd2Q2cElycUF3JTJGZCUyRllQdzlPbVN1YTUxR1ZKNzYyc3dRWExDRDFBaXJ5TlFyTWZpMiUyRnlWd3hLa0lqVzclMkJlempSN1BUcHIlMkJVYnY2V3lVSDh6ZmE2ZHVPRVBualQ3U0VXbXJ4eGtTWGF0YXpvd0E1S1klMkJTY2dEOXFJcnh3UTNtUFg3RWV0cUZoQXRxUHRlZ3p5U0Fld0E0NUYlMkZNSG0xZGNSSUdqTWR2QyUyRnFSSUtjdVZDdkoyJTJCUiUyQnpnbExZMnloam5MYUVTZmNFcXVidXJXOE01SHB6S3ZJcjFGYURsNzljUmJScjZTOCUyQnIyNDVHQ29hYyUyRkNqS3A2NyUyRndBd3clMkY4QUwzbGkwMXFCTGdQSk84Zjd0NHdQN3MlMkZzRTlmaE9IZXIlMkJWdGZnZyUyQnZhYmNKZTFGSnJQandaVlVVJTJGZHklMkZSOWxseUlGaXh1RXpqS0VqQ1lvam1HTTZqYWFqWjI4UmpCaUVpc0p6VUxUaTNpU0tSMHdib0hrVFhkV3QyMU9MVDVydTJBNVJsTjFrOFNyc1ZXVCUyRkFHRDVlbmExYVhBJTJCbzZwRCUyQjlKMldjZW5MJTJGbEJKUjhEJTJGd0NyblNmeTg4MFclMkZseXpsMG03dUpadEpSJTJCVm1YU3NsdHlOWGhZRDdjUDdTY2ZpVCUyQlhEWGN4b3NSMUQ4cnZQMnFXVWRsWmFkSFpXN2tQY1BjWEVZZVNuMkVLUjglMkJLSjlyaCUyRk5rUnUlMkZ3QXJ0YzAyNmV5MUZvb0pvOXlLczRJUDdTdFFjbHowYnJmNWplWHRLaFI3ZVlYMHNpZW9pUUhZTDI5UnYyQ2Y1VDhXUTdXJTJGTWolMkJack9LZDB0MUN0JTJCNmVEazd4TWFqMDVDYU54YiUyRlZ3RWdDeTI0OVBseUVDTWVmSjQyMzVmWFE2M1VmJTJGQXQlMkZYQzdWdktzbWtmVjdpYWIxZFBsSVNXN2pUZUZ6JTJCeEpIV29QZzM3ZWRRNWt5TkRJdnB5eCUyRmJRJTJCJTJGUWc5MU9CN2hGQ3VySXNzVXE4Sm9IRlVkRCUyQnl3JTJGVTJJSUlzTU1tS2VPWmhraVl5SE1GNWclMkJoQ05pcGN5RmYzbndEN2NIJTJCJTJGb1QlMkIxeCUyRndCMkolMkJ6aU55VzAxJTJCTnNlVnRNb01jNEc3Vkg4MlRDYnl4ZldNeHRVTWxuRElQck9saTU1SkloJTJGd0NLMlplTXF0aFlZT01WeEJOYiUyRnUySEslMkZzbDZKVTdYbHAlMkIxeERmYlQlMkZkZUZnbVBrblc3cTBlQyUyRnNaJTJCT29XVGNrNWZ0Um5yRzlQdElmc3RuYXRZMGl3JTJGTWZRNCUyRk1XaDhiZlhiZFNqeG5ibXlENDdTNCUyRjVreTU1Z1djYVpxRFBwMXlabzQyUHB6OFN2SWVQSE9uJTJCVGZPMnFhWE1MJTJGU0hpUHFjUmYyTTlmVFlmNzhYajhYSWZzNHFvV3NHc1E2NFRwcCUyQm8zMXpHYks5V1lmRkU4WjlUY2VJNEZQOWxucE5iV0RWZEdpdDlSUmJpTzRnVDFnM1FrcUNXOWpYNGx6a3NFMXo1MzgyRFU3V3pFS29xcTVVVkFvT0llVjl1UiUyQkwlMkZnYzdSREdzTU1jUyUyRlpqVUlQa29wajBVdkh0USUyRktuVjlIMUY5WDh2WENhanlZdDlUdVFvWUxTaWpreDlPVGolMkZsY01TOHElMkJhTG55OTVndW9OWXMycyUyRnJmRVhzTEx4S3lKWGpMSDRweE9kcHdsMXp5MXAlMkJ2Q09TY3REY3cxOUs1aW9IQU94VTFIeEolMkZrNG90Tm9aWXJpSkpvV0R4U0tHUmgwSUkySXlGJTJGbU4lMkJYbGw1NTB6NE9NR3Myb0pzTHluZnI2TXY4MEwlMkZ3RENmYXlVNlJZTnBsaERZTk1aeEFDcXlFQlNWcVNvSUg4dURqMHhWOE5hcHBWN3BkN05wJTJCb1FOYlg5cXhTYUp1b1lmcnI5cFd3dVNOZzROU0hCcUtiRUh4cm5yTDgwUHkyZzg2V1gxJTJCd0N3NjlhSlMza095em9OJTJGcTh4JTJGNU5QJTJCdzJlWG0wcThndVpvYmxHZ2xpY3BOQTRwSXJvYU1qZnkwT0t2cGY4bHZNdXNhNW9sMVphek9McVhTM2ppaXVUdkl5T3ZKUklmMnlsS2M4NmVNOHklMkZrMzV1c2ZLMnIzRnRmeU10anFvUlpaM3FSRk5HVDZiUDRJUTdJJTJGJTJCeHp0RjElMkJhSGtlMDFTRFIzMWFON21aJTJGVExSVmVLTnUzcVRENEY1ZE1WWmxteWxJWlF3TlFkd1J1TXZGWFpzMmJGWFpzMmJGWCUyRiUyRlU3JTJGbXpac1ZkbXpac1ZkbXpac1ZkalhWWFZsWWNsSUlJUFFnNDdHU09zYU5JNW9xZ3N4OWgxeFY0UiUyQlp2a0E2VksycjZWSCUyRnVQbGFySXY4QXVseiUyQnolMkZ4amIlMkZkZiUyRkE1RW9KTEslMkZ3QkZoMHlPSlUxQXlySDZvQUJib3FKSXRlYnR5SmtqWlA4QUtWczczcW5tJTJGd0FzeVc4OWxlczd4end0U014TVJLRyUyQkhnaHB4NTV3JTJGd0F5JTJCV3BiSUhXTk5qZUdLRmtEamxWdzUlMkJJUEd3cDhTJTJGdGNmc1pHVWF1UUh2ZHZwTldKeGpoeXlNWkElMkJpWFElMkJVbU1YTnRjV1Z6SmFYU0dPZUppc2lIc1J0bGwxdUxmNnJjTWVLYjIwdlZvVyUyRjZwUCUyQjB2N0dIc0xyNXB0dnE3bU9QVTRFbG1FaEhIMWVDSUk0a3AlMkJ6NmFPNyUyRnRlcGhCTkJQYnl0RGNSdEZOR2FQRzRvUjdFWlZLSkhyaHolMkI5MkpqRFBBNGN3M0hNZFIlMkZTaWlORzFtNzAyOEVpRUM0aiUyQkdXTW40SlU3cWY4QWpWc2xtdmFCcDNuTFNGdmJDaVRLQ1kyUDJvcFAyNHBLZnMlMkY5ZDVCVEZGSXlzNVpHWDlwS2NoOUI2NUp2S21yU2FWZGV2eGVhMW0lMkJDY0VGUXlqOXRSJTJGdnhNdHhaQklWOHgzT2kxZWtucDVVZDRuNlpkJTJGN1htc2tWeHAxMUpZM3NaaWtqYml5SHNmOEFtayUyRnM0Y2FQYXk2cGVRYWRFNnJKTXdWWGJvRjZrJTJCJTJGRURPbiUyQmRQSWtmbVN5R3A2UUExMnFjNEpGcFNWUHRjRzklMkZ3RGpmSTM1YThxemFGTmEzdXJLclhMbXNjZkkxZ1A3TlN2Mm4lMkZteXd4b3VJTjFEV1BLRFc5NURZNkswdDVJZmduYVVLZ0QwNWNsNDlJNkg3VFowYnluQkFtbWpTVnZoY3oycUVNNjAlMkJIblZSdzlvbSUyQkglMkZBRnNJdGZobmRnMXElMkZwTmR4bUl1RFFWVSUyRkVDZjhvWVJlU0xrNlI1bldCdzFibVQ2c1NEOEZHQmI0aCUyRk55WER5UHZic1dJVEU5JTJGVkdKa0IzMGpQS1YxUHBPc3JCZHVSTEZjUGIzSlk5VmRpdFclMkYyWHhaMCUyQjkxTzJzcElvSldMM0U1NHdXMFk1U09mOVVkRiUyRm1kdmh6bSUyRm0ydyUyQm9lYXBKbEJWZFJqV2RDRHNaRTJjZmV1SGR2ZlFXMEJuZ1pwdFZ2RUgxdSUyRmxHNmdqJTJCNWhIN0tyMHhIYzBwRCUyQllnOHdhMU5ERlpXalNXdHNyQ1JvaUdKY240NmIxWWRGMnlGV2VtenhzVzFDTjRFaiUyRlpsVW9mdWJPczJXcHhwTkdsMm9NUDJlU2JFZTV5VFhHa2FkcUZwSmFUMjZUMjg2MFlFVkJCNkVIeDhNZUN6ZHB1bmxFdHBIWVEzOEdxUnJGTmFQQThFZ0pjRmElMkZHcWhhZGFvMlhCR2xtYmUydUN6ZXZiR2VSbzJQY05KeCUyRjJTJTJGRGh0NTFzM3NMcFlMb0g2bmNJcTIxd1JVMVVjZUx0OUh4ZjhIaGo1ZjhwWGVyV2MlMkJxMlZySHFFMW9xUVdkdk5Md1VvaWptSkIlMkZPOVc0JTJGczhjalZIM0xlekV2TTJtWFdxeWFiTm96QjdTUzFXSjVTd0JySFduTHY4QTNaVWJmeTRvbmxhem10cktDJTJCSmxOb0hGRk5GYm1RYUh2dFRKOXJQbHpVN0dPTzZ2clJiZU5pb1FRTXJSeG1uOTM4SVhqNFlFMGZRTG5YQmRRMjA2MmwxQ1AzU1NyeTlYYXY3b2cwJTJGNExEc2lrcHM3QzNzMVdLMmlXSkIlMkJ5Z3BnNWxOT1gwWUFWcjdUTDB4WHN4Y3hzVmxoa3R3cEZQdExWV3diZiUyQmFuMGU4dHA3TFRZcm15SUxscHlUNmhvUncyJTJGdSUyRlRiZGx3M3Rhb0s0djdhMWRZMmRXNUdqUTFxVkhqJTJGd0EyNFZhaDVhMDNWbE54WkVRVHR2eVg3TEglMkZBQ2x5Zmp5Zm8zbnJUcmJWOVBSTkkxaTZnTThxUkVOQzhnYjA1T1VJJTJCTlI2blIxJTJGNEhJUnFPajY1NVZ1JTJGUTFTQm9nVCUyQjdtVTFpa0E3cEowJTJGd0JpM3haR3dkaXpoT2VPWEZDUkJTUFNaTlg4bWFtbDFNaE5zZmdsZFBpamREMUglMkJTMzdTOHM2WkxyRUVadDJ1RWUxVzZWV3RMc2clMkJsS0dISUdPUmVTJTJGNndPUjlkV3RScDExZFNRJTJGV0h0NFdrJTJCcjkzSUd5VSUyRnlzayUyRmslMkZXNUlOQVRUOVowZUFXY3pHVDZnciUyQm9JbGZjZ0J4c2YydlQlMkZBR01ZeE1TZUUyRDA3bTdQcUJtakV6aldTTzNFT1VvJTJCWTcyTSUyQllmTGNkM0ZKZVFSeHlvN0V6UVU3OTJHUTYwYlU5SGtmOUhUQXd0czFqZFZlTmwlMkZ5WCUyQjJuJTJGRWM3Wkw1WHN0VlNTNThwNmtZWnFWYlRyeXNpZjZ0V1ByUnIlMkZzcFZ6bXV2YURxMmp6c3VwMkp0QTVOQ2ZqdG1OZjkxVGpiJTJGWXljY0o4dG1nSlBxVjRKSkxKcEkzc1lMcUoydVklMkZ0QmdQOTFxNmpwSXk4Vncwc05Objh0RzExbThLV05ucVRyQXVtczVZaFR2eWN0JTJCMFI4ZnclMkZZYiUyRld3TGRScGZhVkVra1BPNTByMUhoakpBTFJTZzlIcFg5MiUyRndDemdTVzRUVjlIZ2E1dXBwZFZzcEZ0N2EwRk9NTnNoSEptM1Z1Wlk4ZlYlMkIwemZCbFpIcTNCTmlnT25tNTJMSWZESENZd01DSm1WWEk4SXFNWW56STRmODVsJTJCc1JRYzdlU0tWUlBIS3RzNHJ1VWtQQWN2OVIlMkZpd2JaYVkxcDVndHJIVW9pcGpualdaT280bGhSdjhwR3djUEw5cGNST1pvMlM2WmthWGd5cW9hRlZrNGhuJTJCSjl1UHFOeHdWcm1zV3Vwdll6YWxGOVMxSzFsVGk2R3Njc1lZTXBWJTJGRldVTnglMkZsd1lvU2pkOGp5Yk8wc3VMTWNVc2RtVVFST3hScm5INzVQUXRkOHZhVDVpdEJaYXBBSkkwWVBFNm5qSkd3JTJGYWpjZlp6ZyUyRndDWldoM0doVyUyRnIyd0gxdlNaMERYbFBpYTFtJTJGdVp1SzdNViUyRnVMaiUyQmJQUTFwZFIzbHRIY3hHcXlDdE90RDNIMEhJRiUyQlpGbmIzazhFTXFoeFBCSkhPaDZNbklVRGZTZHNzRHEzemZxV21SNmxGSnFlblJDTzZpSEslMkZzazNGRDBuZyUyRm1qZkMzU05WdWRKdVV2cktRSmRRT3J4YzFEb2FmYVNSR3FySyUyRlJseVUzMmkzWGxuVTRSSE9ZckYySXNyMWh5OUptJTJGNDk1JTJGOEFpbVQlMkZBQ3NLdGUwWnAlMkZXMUt4ZzlLYUwlMkZBSTZOaXByNmJIJTJGZDBYODhFbjJsZkZYMCUyRndEbHo1eDBmemJwQWxzSVlyTyUyQmdBRiUyRll4QlZDT1IlMkZlSUJUbEUlMkY3TGY3SEpwbmlMeXo1bTFUeXJxVnRxMmx5OFpZenV2VldYOXFPUWZ0STM3V2V1ZkpubkhUZk9la0pxVml3U1phTGQycE5YaGs3cWY4QUpQN0QlMkZ0WUZaSm16WnNWZG16WnNWYU9jdCUyRk5qOHN4NW50Sk5iME5mVDF1QmF5eHJ0OWFqVWZZJTJGNHpxUDd0djJ2c1oxUEtPS3ZoejBDc2J3TXpxU1NIUFJndzIlMkJMMyUyRm13cmxoZUIlMkJEOWV4SFFqeEdlcWZQSDVPYWQ1bHVwZFcwaWNhYnFVM3hUcVY1UVROJTJGT3lyOFNPZjJuWCUyRmdNNTlIJTJCUWZtdTVuV0M5bnM0cmJsOFU2T3pNQiUyRmtwd0dLciUyRnlrJTJGT0J0T01QbG56VE1Xc3lSSFk2ZzVxWXE5STVqM2klMkZsZjhBM1hub3hXVjFWa0laV0FLc053UWVoR2M2OHNma3Y1UTh2QlpyaUU2cmRyUSUyQnBkQWVtQ082d2o0ZiUyQkQ1NTBWVkNxRlVVVlJRQWJBQVlxM216WnNWZG16WnNWZiUyRlY3JTJGbXpac1ZkbXpac1ZkbXpac1ZkaU56TkRid1NUWExCSVVVbVJqMEE5OFd3TmZQYUpiU20lMkJLaTJwU1V2OW1oMnBpckFQT041cE1XaVN0b2lQSmZNMWJWSTR5eTFHOGpEa0Nud3JoRHJENmpGYiUyQldiQzdXdDM2RWNsJTJCQ1AlMkJLaVpIYnR5SmFqZjVXRHZQOXhaUmFOQ2ZLdHhLYjR6ajA0SU9SNDAzSktrZkFPZkglMkZXd3M4NGFqTmQzRUVrbEZ1U09VdEslMkZEUlZYaUtkdVFPRkllZWF0cGswRjVQZWFVaiUyQmxBVExJWXdTWWhYZCUyRmglMkJ5bGV1TFA5VTEyeWttaVdPMnZyV09XNG4zUHhnY0FGWG1hdHkzY2Y3NyUyQng5ak8xJTJGbHZvMEVlalQzODhTdkpxRE1qRnhYbEV2dzhUWDlsczVoJTJCWSUyRmtTVHluZSUyRnBIVFZZNkxkc1ZVaiUyRmREdDFoZiUyRml0djkxdCUyRnNNZ1JXNGR4bzlYNHZEaXlTcWNmb24lMkZPJTJGb3lZSnNRR0hmSkw1RnNyWFVkWmswbTZ1VGJSM1VUdkhRQWd6UmprT05TT0RsYTVHZ2NYMCUyRlVKTkwxUzB2NDFEUEZJTm04RyUyQkUlMkZyeW0lMkJITUQwazUydHhlTHBwanFQVVBmRjZsNVg4eFdsbTk5NWV2WmxndUxTZGtqUjlnVFdqclhvdlA0WFRFUE02d3d6S1NLQ1Q0dHVvSU8lMkIzdmtlODB4WFUydFcxM1pRJTJCbzE1YnE4bnBKOFVsRUxWcCUyQjNzTUJXT3NYT3RXeTJpRXlYTnVDeUl3NU15ZjhWc2FzZUZQN3R2aXpMNHRxJTJCVHpOVWZ2VCUyQk9VNm5wa3k5WnJjaVZBTzVYdyUyQmE4c2lzMDFycCUyRm1DMDFPNVlyU1dKNGtYY3lGaUI5bnNLJTJGdDVmbGp6TFh6TWxnMGJSUXVqUUVTYlZsRGNsNUllbkw0a3llZWJQSXA4eTZqNWUxRFNFalgwWFdPNFFzcUtZayUyRmZSZ1YlMkZiNWd4OGNITWU1bEdVb200bWp1UG56U1clMkYxT2ZWTDZSN3NKVzJrZUtGVUd5Z0doSUozUEttTlZ5JTJGVEFrMXBkV2M5ekJkcnd1RWxjVEllekElMkZFTWolMkZtalhidlF0YVczdEVCZ0NKTTZQdUNIRlFFeHRpelNLSTFESEp2NVZ1eEtyV01wJTJCd0M4SlBoJTJCMHYwWkNOTHZyZlVyR0c5dGpXT1ZRZmtmMmxQJTJCcWNQZEhtZTN2SVpWMjRzS24yT3glMkZESkJTeXp6QnBscnFXblNRU3hMSTBQNzZFc29JRHFPMyUyQnNNZ21sYXhjZVVkUlhVN1pTOWpKUmI2MlhvVVA3UUg4MGYyayUyRjRIT2dYZHlWWWdIcDElMkJXUVc4ZzRUelF5b1FwSklWaDFWdWhHSkNoN0ZHOWhyZW1wS2hXNHNyeU1NcDZobFlWJTJCJTJGT1dhJTJGYlhmayUyRlUwWkpPRUwxYXl1MiUyQnkxUDkxdWR2M2lmOE91Q1BKJTJGbWhQTDF4YWFKZXR4MHk0ckZGTXgyaW1KSlN2aEhMWGolMkZyNE4lMkZPOUclMkZ3QUoyOG8lMkZZdlk2OSUyQnFPTWdkbFl6cVBtV3k4eHI2MTVhb3VveEFBM2RrNGRKQjAlMkZmUkdqb2ZCbDU0VSUyQm5DeVNSTlNhMWwlMkIydlFxMzg2MSUyQnk2NUdQS2N6dHF4alk3TkV3NGpZYlUzMnpvTnBwRjFxZnJ3MkpYNnlpZXJIRXhvSml2V0lmNWZIN0RZWW5aYVkzcE45TjVOMW45SkpFYnVJd3lSb2lzWTFrRGJwVnUzRiUyRmlkTTd4cGwzWSUyQmFkRnQ3bTV0bGUzdklVa2FDWUJ4OFFvd29mNVdCJTJCUE9ORzBqdkxZMjhxbFJVZ3F3b3lPT3UzN0xwaVhsM1hianlacWs3WGdsbXRaSWZURUtOUUdoNVJFRnZzeHI4WExqZ0lyZFdRZWR2eTdHaVFQcmZsNFNOYXhWZTVzMXE3UnAza2klMkZhYU5mMjAlMkIxa1QwN1dHQ3F3Y01qZEpGTlFjOUMyTjlCcU52SGMyOVdpbGpTVkdJMkt5Q29wa0Z2JTJGd0FvdEh1OWNPcTJkMUpZVzB4NTNkaEFvNE81M0pRdDhNWWY5b2NNRnlCMjNad0dPUUlrZUNRR3hxd2ZJc2F0TlFTUXJJcm1PVWJySWhvUWZFRWI1TExIelBQNlgxVFY0UnFGbzRvekZWTDAlMkZ3QXBEOEVtRm1zJTJGbHhlV0JOeG9FcHVJaHViU1FqMUIlMkZxUHNId28wJTJCNGx0VW1XN1JvNW9qUm8zQlZoVDJPV0NpMXQlMkJiUEoxcEZDZk1YbEpndGwlMkZ4OTJWQ3lSSHV3amI0a1glMkJkZjJjaU9sRzJodWhjWDJuOEpJMkJFOEZISHpNVGIlMkY4VFZjNkZwV3V0YXlTUGJsSkVtSEdlQ1FWVndQMVpHdGNzSWJlNU4zcDBVaTJNbFdhTTdtQiUyRndCcFE0JTJCMUYlMkZMa1RHdWxobkRJWW5ZcHJmNnRZYXhheHhDRGx4SWFHN2lrbzhaN2tHdFdyJTJCM3l3eHNkR2wxV3dpdHpHYmtna1J6dWdER25SbTM0UjAlMkZaYklKQlp3eHY5WWhBVng4UXAwSlBpQm5hZkpsMWVYZWtMTmR5cktPWEdOZ0FEUUQ0ZzNHZyUyQkU3WThXeVRMZmlITkpiYlF2TkhsZSUyRmU1MGVRWCUyQm5YQUQzVmc1M0VvV25LSW1oUW1uN1B3djhBeVlSWDl4cWwxZG1YV09TM1hIaXFNbnAwUUVrS3ElMkJBNWZhenJRd0hxT21XbXFRR0M3ajVEOWx4c3lueFZzRnNMZU8zOWhiMzl0SmJYTVlsaGxIR1NOdWhCJTJGVWZmT1pYeTMlMkZsN1VWMDVuNU1ncnBOMUxUakxDVDhWbmNFaiUyRllmNU9kdDFuUWJ6UjNKY2VyYXNmZ25BMiUyQlQlMkZBTXJZQiUyRjVWM1klMkJkdEF2aGVmdWJybiUyRnVOdXgxamtRVVlrRDdVYm5pciUyRjZ1RXE4RDFyVEZrOVhVZE5nYUhpeCUyQnUyWFZvSFBjRCUyRmZiZnN0blFmeUFlYiUyRkZrdEMlMkZwdGFTRjFWZ0ZOR1RpWEZmaUElMkJMaiUyRmxaQzlXdU5kOHA2a05NMWUwNGFuWXNZMm1ZN1RXJTJGWkcycEtqZnNTNEswMDNta0NIemw1V21ETGF6ZXJjV29COVdDdlgxRkIlMkZlUXQ5bHY4bklvZllOUmw1RlBJM25qVGZPMmxpN3RhUlhrUVVYbHAzUmowWmY1b24lMkZZYkpYaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkYlMkZXNyUyRm16WnNWZG16WnNWZG16WnNWZGdIVlk5UG10SGkxSmxXM2NnRXVRQlVicjF3ZGdQVWROdHRUdHpiM0lKV29aU09vWWR4aXJ6SHp0UCUyQmkyMGFUeXZkbTZ1RGNKU0NNSklQVFZoUldLajdCYmJpMkI5YjhrZVpyblYzRnZiZXJic1FzVndIVUtGSjZ0VThoU3ZoayUyQiUyRndBUEd5MUd3dkxPa3FLNWp1MGNJUDNZUSUyQm5JdEFQaWlmOEE0bmtrcGhLUWFRT2s2ZW1sNmJhNmZHUVZ0NHdoUGlmMmolMkZ3V08xTFRiUFZyR2ZUciUyQklUV3R5aFNXTWpxRCUyRkVmczRNekVWd0lzZzJOaSUyQlZQT0hsbTU4cDY1TnBVMVhoUDcyem5QJTJCN0lXUHduJTJGWFg3RW4lMkJWZ1cyOHM2M2Yya1dyMjltNzZZczZ4eVhRcHhVZ2dOVWZhNGl2MnVPZW45Yzh0Nko1aXQwdDlhczB1bzR6eWpMVkRLZjhsMW95NUVMN1RyaUdXMzBMeXRwN1E2RGJzMGQ3eEk0T3olMkZGV1BseWNtTnZpYiUyQmZLeml1ZkVUczdXWGFoT244UGg5ZFZJbjZhNyUyRmV3RHpQZDN1a05wbHpZdHh0RWhXMmFkVkJLelJrdFRrYWxPZGYlMkJCdzYwYnlkWiUyQmFOUiUyRndBUmFQcTBWak9JdzUwOWJjTElrdyUyQjE2eWglMkZqUm0lMkYzYW4yOGRlNmRMWVRYR2s2eER6dHB4OGFIb3luN0xxZmI5bkkzWVglMkJyZVE5VGhTM3BjV2hjdmF6TUJXU0UlMkZiZ2FRJTJGRjhQOEFKbHJyRHZ1bnZtcnlCOWJ1RnZ6QXRucmtRRDg0eiUyQjZtS0hrR1J0dSUyRjgySFduTyUyQm9hZExwVTVhQzRaZVVMOUdpbCUyQjBqS1IwYU9ZWk9MTzgwanpobzBkM1p2NmtNbjJXRlBVaGxHeFZoJTJCeTZIN1dRV2FPODByVjFodndCTWpjZlVBb3NrVGJMSVAlMkJOc0lyNW9TdTEwdGZPdDdJa3Q0dGg1aWpRQzZoa1NzZHo2ZndmV0lpQ0NyN1VtVGolMkZsNUpHJTJGS1RTZFRqZyUyRnhESUxoNFVDVWdIRDdQOEF4YWZqNDVHUE1ka1l0Umt2YldmNmpld0VYTmhjcjlwcFQ5cEVWYXRKV254SnglMkJ6blJQSWZteiUyRkZ1amZXNVklMkZTdkxaJTJGcTk0Z0JDbVFDdk5RZmlWWCUyQjF4YjdPQTJObGVhWCUyRmtyJTJGQTE5SmIyck8lMkJsWGJjN1V2dUZidXZMJTJCYiUyRmlXQzdNN0hPdWFycGRycTlqTFkzaThvNUJzZTZ0MmRmOEFLWE9QNmpiYWo1ZHZwTEs1VVNCZDBmY0IwN092OGNNVDNxa1A1bDZ0cmtXcDJrTmk4c1ZyNkNTaG95VkR5SDdSSkhYajhPUXBmTmZtQ04xJTJCc1hjc25CZUNyT2ZVQVVkRkhQNHVQMDUybnklMkZxMmc2dmVSNlQ1aGdYOTRBbG1zcCUyRmRzdyUyRjNXJTJGJTJCVTM3R1NIVWZ5cDhuNmhVcGF2WnNlOERrRCUyRmdINXAlMkJHQ1hOZVR3TSUyQmJ6ZVd4dHIlMkIzU1ZIRkdNWktNUDhvQnFyJTJGd0FOaDlxdjVncHIza1ZmTFY5emsxTzN1SWpGT3dyenQ0dzFHWmhVZXFuMlA4ckpENWklMkZKSnJLMmx2Tkt1ZnJTeCUyRkVZQ25DWGlPdENwS1B4JTJGMU01MDNscTd0cER4RE5VVVVHbFB3eUp0V1FmbGZwTVdzZWFGdExnc3NadFpuREoxVmh4Q24zNjUxZTM4cWFucCUyQnMyWlg5NWJyS0clMkJ0UjdVVmZpbzYlMkZzMTZZUyUyRmszcEdtV3h2TlIlMkJzcEpxZkVXN1duUjRrcnlMRlczUHFOJTJGTCUyRkxuVzhJMlVzVzh4JTJCVm83MW4xTFQwQ1hwM21qR3dscDMlMkY0eUQlMkZoc2dsOW95WFVheFgxdThMb0NZMmRTdFYlMkZhRyUyRmdjN0pURWJpenRycjB6Y1JySVltRHhsaFdqREpDWFFvZVZlVzlSdjhBeTFQS0wyNWt1Tk85RUxFbyUyQklqZ2FvS2slMkZBcUp5enF0cmRRWGtDWE5zM3FReXFHamNkQ0NLN1pGUE1QbDFZZzk1YUxXQTd6UWpmalhxdyUyRnljQjZKck56WTNCVzd1QWJBUktnVXFTUVZJQzhLZkNxOEs4dmh4cTl3bG50SzREdnRKMDdVZ0JmVzZUVTZGaHZUd3FOOEZSeVJ5b0hpWU9qQ29aVFVFSEg1RkRDOVklMkZMNnd1U1o5SWMyTTNYMHR6RWZvNnAlMkZzY0w5QiUyRkx5OFhWSk5TOHkzWXVvNDFhS3owJTJCRWtRckd3b1dsTzNOMnpvbVZURFpWNGw1bjhzM1BscTk0b1MlMkJuVGslMkZWWmoyNyUyQms1JTJGblglMkZoc01OSTg5M1dqMmh0MnRoTlZTRXA4UEdTbEJLJTJGJTJCU2YyODZucU9uV21xV2NsbGV4aVNHUWJnOVFlektmMldHY28xM3loZGFWTVVUOTVBMzl6TDBERHdQZyUyQklaYzNwUGx6VTVkU3RHYTRJYWVOZ0daYUFGV0hKV29NT2M1djVFMUI3V2Y2dGNBb0QlMkI1UExiM2pQMGZZem80eElZclpJbzVVYU9WUTZNS01yQ29JUHRpZHJaMjlsQXR0YW9JNFVyeFFkQlUxT0w1c0NzTzglMkZ3RDVlNlY1NzA4UlhOSU5RZ0IlMkJwM29GU3RmMkpBS2M0bSUyRjRYT0lXWDVSJTJGbVZvT3B1bW13SXlTQXhOTXNzWmhaRzJxM01xZW44MGVlb0tacVlxOGw4aCUyRmslMkZjZVc5UXQ5WjFEVTNXNGdQSkxTMEpDRUd2d1R5dFQxVTMlMkJ4NmFybldzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjElMkIlMkY1czJiRlhaczJiRlhaczJiRlhaczJiRlhVelpzMkt1elpzMktvWFVqSUxHNDlFMGs0RUtldEs0M1RZa2hzb1FwNUVxR1p2RW52Z3AxREtWYmRXMkk5amhEZGFEcVQlMkZ1TExXSmJPelA4QXVsRVZuQVBWVmtiNGhpcUI4d1dVWG1TJTJCWFRZV1FpM2lrWnBodVVscU9LbW43UDhBTm5PdFJzaVBXMFRXVUtxRDlvZmFqWWZaa1ElMkIzJTJGRExuWXRIMFd5MFczYUMwQkpjOHBKSFBKMko4VGhWNXU4dEpyZG9acmRRTDZFSDB6MExqJTJCUSUyRjhhNGJUYnhYUVBNR3ElMkZsOXI3bVNzOWpjVU4zQ3YyWm8lMkIxeEQ0U3AlMkZ6Wm5hTllodGZObWdSYWhvN0pjTXdFMXBLQ0FTUDI0NiUyRnNuJTJCWmY1OGdzdWdXV3RhUEZwMXhSTDIxcUZrRkN5UDNVOTZZUiUyQlVmTXQ3JTJCWCUyQnF2cG1xRXRwVXNuR2VPdFFqRTBGeEQlMkZ3QXpVeE95JTJCNWtIbUdDT2ExczclMkJWZUVzRllwSEkzU3Z3eUJ2RGk2NDdSdEgxYnkzcUVYbVBUNVZsZ25XbW8yQzFBbWo2cklySDRSTW5WY0N6M0Z2SjV4MXBJcVgyaDMwY1Z5M291djJuUUVla2E5WFpXNVpKTlB1bHQ3ZGJacFRMYXNQOUhsWVVhbFA3dVZmMkpsSDJ2JTJCRXc4OTFaelkzdHZxTnRIZFd6ODRwQlVIb1FlNnNQMldYOXJDN3pKb0VPdTJYcDdMZFJWYTNsUFk5MGIlMkZBQ0h3aTBJYWhCcXRkT285aEtmOUxqWTBWZjhBTFUlMkY3OHliWkZENTkxalMzUjNnblJvNVltcDRNakE5c25Ia3I4d2VSaTBMekpJSTdwUUV0ZFFjMFNZZEZXUSUyRnN5JTJGNVg3ZUglMkZBSnc4dUxxTURYOXFnJTJCdFJMJTJCOFVmN3NRZjhiTG5KYnV5amNORktuTkQxVSUyRnc4RGg1cGZRbzNHYzQ4N2VWRmhNbXEyS2Z1SE5ibU5SJTJGZHNmOTJLUDVHJTJGYSUyRmx5UGVYUE0lMkZtZnkyWTRwbWsxUFJxZkJCS3BOd2lEcjZFMyUyQjdPSDhqNTElMkIxdWJYVTdKTGlLa2x2Y0pXakRxckRkV0glMkZFc1Y1UG50b0ZpdVV1UU9GeEZ2SEtwS3NQcFduTEpaNWI4dzY1cDF4RWd1WHVJcDNxOGQwN1AxJTJGWlZtJTJCeCUyRmtjY2JyJTJCaG0yMTI1c2JQZ2dYOTVBWnE4RlJoeTNwJTJGTDhTcmsxODFhREhxZW1wcXR2Ukx1MmhEbmdQaGVNRG1WJTJGMlAyb3pqc3JLTFc1anU0RW5pJTJCeTRyUTlRZTRPTDVEJTJGQUNwNWhndTdpT3dra1VYRnhENnl4OURXTThITk1tR0pGRkRSRlJRaW9QVUhJaHJtZ3JBWHViZEsyejE5V09sZUZlcEglMkJSa3d5bUNrVUlxRDFCeEJwV0lhTnEwOW8zMVdVUnJab2llbTMyZVBFaGVDSUI4VlYlMkJMSmNHQjNCQkh0a2ExTFFYVm5lMFhuQzllVVElMkIwdGV2SHhYQTJseGF6SGZXNjIwcngyYXRXNGdrU3FGT1BDZ2R2akRDbFZ3a0E3aFdZWnN3elpGWFluTkJGUEcwVXlDU052dEt3cURpbWJGV0U2dm9FMWhJYnUwQmUzQnJRVkxJUDhyeFhKUm85MmIzVDRaMiUyQjFUaTN6RzFjR2tBaWgzQjdaU1JwR3ZDTlFxanNvb044TnF1elpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOUR2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZpUG1ieW85MWNmcHZRaUlOVlQlMkIlMkJoNlJYU0Q5aVh3bCUyRjMzTiUyRndXUXpXOUFYWG8lMkZYYUZnN0wlMkIlMkJoSzBtamRCdWFmekFDanJuWWNEVFdOclBLazhrWU1zWkRJNDJOUjQwdzN0UlczejFwMmw2aG8lMkJvdExBZlhWRTVPZ0RWbGpBJTJCTGolMkZ4Wkd2N09TMkJiZWFSYnNjcEk1WXVMUXEzRVRJZmlRY3YyWlZQOTAlMkY4QXNNazNtaTFGanFCbnQwQ3BjSUhJVVUlMkJOVDhSRlA1dHVXUkRURkV1bHdQYVA5WWpWU2ZWakJJRkdQTSUyRjdCdkhDT1NYcVhsdTZ0cm5USTF0N1kyWmolMkJHVzFZaG1RJTJCSmNmYjVmelljWkJQS2wxSTdHUlhIS0dpM0FZJTJGYWpQUnZkc25RTmQ4QkZGRGpuTCUyRlBXaEphWGd1SUtSdzMzS25na2xQaSUyRjJQeGNzNmprWTg5MlVsM29ucXdvWkpMV1JaZUFISWxUOEQ3ZkpzQVZCYUxwVWV1ZVM5UHRyaVlQY1d5a1FYa2ZaNHlWREQlMkZKUDJXd1g1WDFOSjJOclFJR1hrb1hwelE4SlA2NUdQSmZtT1RSNUcwelhMbUdDemxZbXpoWlBTZUUwNWNlUDdVVGpmbGlPaGFna1dzM0NXMGdrVVhiUFpqb1pWa1k4a1FIcjhPU0hVSlpENTQwdm1ZdFZSQklBdm9UbzI2MEpyR3pVN2N2aHphSjVqZ20wdDlPMXU3Z2l1JTJGUmRZJTJCSjQ4b3lDZyUyRmQ5UXlmWiUyRndBckpoUEJGY3d2YnpxSGlrQlYwUFFnOXNndCUyRndDU0xwSnk5cHhuaVBSaVFzZ0g4cmZ6WUI1cWwlMkZrcTFoWFU0WmlnTndqc2l6ZnRlbVUzVWY1SnpwJTJCUlh5bG9GJTJGcGozRnpxWWlSM1lyYXhSRXN5eCUyRnpUT2FMNmolMkZ5cDhDWktzU1VPelpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOUh2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFZnMzVpUHJNRUZsZDZYYlIzQ1JNJTJGcm8xZlVJSUh3eCUyRnM0VSUyRmxycU9rejNjMWxZUW1FTkZKSThEQ2dSeklESWc1YjFKYXZUT2lhalpMZjJjbHMxS3NLb2ZCaDlrNXlkcEpQTCUyRm16VDlaY0JJV1kydDVzRm9EOExzNUMxJTJGd0NEa3lRNUt5aldkTEdpNm1sM2JyU3l2S3h1bzZJNThQOEFKUFZjbE9pWFp1clBpNXJMQWZUZjVmc243c0UzZHJCcUZxOXZMUjRwVjJJN2R3eSUyQiUyQkYyajZYZjJGNWRTM0VxTmJ5aFZpVmE4aVYlMkZiZmFnNiUyRlpYQmRqM0tuV1VSWEx6WUZZVjVuOG4zdXM2dXQ3YnRFSVRHc2JjNmhsNDE4QjhXRmQ3NVltOHN2SHFWcVByUWlDc0pTUGlpa0gyalFmc05uU2NheWh3VllCbE94QjNCR0cxU2J5N3JmNllnWjVLQ1pmdElCU21IZUZsbG9kbHA5NUxlV3FsRE1LR0lmWUI3a0REUEUlMkJTdXpaczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRiUyRjB1JTJGNXMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWkZmTSUyQmlwTFclMkJTSlpBZjcxQ3RhTVBzeWdmOFN5VlpSQUlJTzRQYkNEVzZwUDVZdkRkNldpdTFaYmMlMkJpJTJCOVR0OW12JTJCeHc1eEczdGJlMVZsdDQxakRIa3dVVXFmRTR0Z1BOWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlQdiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14ViUyRiUyRlonKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCAjMDBhYTAwfS55dWktc2tpbi1zYW0gLnl1aS1oLXNsaWRlcntiYWNrZ3JvdW5kOnVybChiZy1oLmdpZikgbm8tcmVwZWF0IDVweCAwO2hlaWdodDoyOHB4O3dpZHRoOjIyOHB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LXNpbmdsZXF1b3Rlcy5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LXNpbmdsZXF1b3Rlcy5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRhNWI2ZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC1zaW5nbGVxdW90ZXMub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0ueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtcmluZy12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLWNlbnRlci1idXR0b24tdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1tYXJrZXIgdlw6b3ZhbC55dWkzLWRpYWwtbWFya2VyLW1heC1taW4sLnl1aTMtc2tpbi1uaWdodCB2XDpvdmFsLnl1aTMtZGlhbC1tYXJrZXItbWF4LW1pbiwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtbWFya2VyLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtaGFuZGxlLXZtbHtiYWNrZ3JvdW5kOm5vbmU7b3BhY2l0eToxfWRpdi5iYXNlNjQtc2luZ2xlcXVvdGVze3dpZHRoOjEwMHB4O2hlaWdodDoxMDBweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwlMkY5aiUyRjRBQVFTa1pKUmdBQkFnRUFaQUJrQUFEJTJGNFJmSlJYaHBaZ0FBVFUwQUtnQUFBQWdBQndFU0FBTUFBQUFCQUFFQUFBRWFBQVVBQUFBQkFBQUFZZ0ViQUFVQUFBQUJBQUFBYWdFb0FBTUFBQUFCQUFJQUFBRXhBQUlBQUFBZUFBQUFjZ0V5QUFJQUFBQVVBQUFBa0lkcEFBUUFBQUFCQUFBQXBBQUFBTkFBRDBKQUFBQW5FQUFQUWtBQUFDY1FRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlRNaUJOWVdOcGJuUnZjMmdBTWpBd09Eb3dOem94T1NBeE5EbzFPRG93TlFBQUE2QUJBQU1BQUFBQiUyRiUyRjhBQUtBQ0FBUUFBQUFCQUFBQndxQURBQVFBQUFBQkFBQUJSUUFBQUFBQUFBQUdBUU1BQXdBQUFBRUFCZ0FBQVJvQUJRQUFBQUVBQUFFZUFSc0FCUUFBQUFFQUFBRW1BU2dBQXdBQUFBRUFBZ0FBQWdFQUJBQUFBQUVBQUFFdUFnSUFCQUFBQUFFQUFCYVRBQUFBQUFBQUFFZ0FBQUFCQUFBQVNBQUFBQUglMkYyUCUyRmdBQkJLUmtsR0FBRUNBQUJJQUVnQUFQJTJGdEFBeEJaRzlpWlY5RFRRQUMlMkYlMkI0QURrRmtiMkpsQUdTQUFBQUFBZiUyRmJBSVFBREFnSUNBa0lEQWtKREJFTENnc1JGUThNREE4VkdCTVRGUk1UR0JFTURBd01EQXdSREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFTkN3c05EZzBRRGc0UUZBNE9EaFFVRGc0T0RoUVJEQXdNREF3UkVRd01EQXdNREJFTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TSUyRjhBQUVRZ0FkQUNnQXdFaUFBSVJBUU1SQWYlMkZkQUFRQUN2JTJGRUFUOEFBQUVGQVFFQkFRRUJBQUFBQUFBQUFBTUFBUUlFQlFZSENBa0tDd0VBQVFVQkFRRUJBUUVBQUFBQUFBQUFBUUFDQXdRRkJnY0lDUW9MRUFBQkJBRURBZ1FDQlFjR0NBVURERE1CQUFJUkF3UWhFakVGUVZGaEV5SnhnVElHRkpHaHNVSWpKQlZTd1dJek5IS0MwVU1ISlpKVDhPSHhZM00xRnFLeWd5WkVrMVJrUmNLamREWVgwbFhpWmZLemhNUFRkZVB6UmllVXBJVzBsY1RVNVBTbHRjWFY1ZlZXWm5hR2xxYTJ4dGJtOWpkSFYyZDNoNWVudDhmWDUlMkZjUkFBSUNBUUlFQkFNRUJRWUhCd1lGTlFFQUFoRURJVEVTQkVGUllYRWlFd1V5Z1pFVW9iRkNJOEZTMGZBekpHTGhjb0tTUTFNVlkzTTA4U1VHRnFLeWd3Y21OY0xTUkpOVW94ZGtSVlUyZEdYaThyT0V3OU4xNCUyRk5HbEtTRnRKWEUxT1QwcGJYRjFlWDFWbVoyaHBhbXRzYlc1dlluTjBkWFozZUhsNmUzeCUyRiUyRmFBQXdEQVFBQ0VRTVJBRDhBOVZTU1NTVXBKSkpKU2tra2tsS1NTU1NVczR1RFNXaVhSb09KS0ZpM092eDJXdmJzZTRlNWdNd1JvNXNveXBkT3lOOW1UU1JIcFd2ajRPYzQlMkZ3RFZmOVdrcHVwSkpKS1Vra2trcFNTU1NTbEpKSkpLVWtra2twJTJGJTJGMFBWVWtsQ3F4dHRiYkclMkZSZUE0ZkFwS1pwSkpKS1VvMldOcnJkWTh3MWdMbkh5QWxWT3NXdm93WFpEWiUyRlFPWmE4RDl4cm1tMyUyRk5yM1BVc3dtJTJGcG1RR2FteWw0YkhpV3VoSlRZcXNGdFRMQnc5b2Q5NFUxUTZGa2ZhT2s0dHN6dXFZZndWOUpTbGwxJTJGb090MnNPZ3VEWGdlVG03ZiUyRlBtTiUyRndDQ0xVV1oxVmhyeXNiS0ElMkJqdWE3emd0dVolMkYxRnFJVVhUU1FjdktaaTQ3c2g3WE9ZMHRCRFlKaHptczNha2ZSM2JsVmQxM3ByTXR1SSUyQndzZSUyRjZMM0FobTduMCUyRlUlMkJpMnphZnprRk9ncTklMkJkajBaRk9NNGszWkR0ckdORW5oenQ3djNXYldQVThiSnB5YXZWcGR1WnVjMmVOV09OYjIlMkYyWHRYT1kyVlU3ckE2aG5POVJ1SlMlMkJyMWhPMWxndUdKYnVZejJleHR2djNmekxQVSUyRndDRVNVOVFra2trcFNTU1NTbEpKSkpLZiUyRiUyRlI5VldmMGl3aXUzRmY5TEdzZXdUJTJCNkQ3UCUyRkF5eHkwRm11bkg2eFBETXBnZCUyRmJaRlQlMkZ3RG9PeCUyRiUyQjIwUXAwbEMwMkN0eHFBTHdEdEI0SjhGTkpCVFZvdnglMkJvNGp2YkxMR2xsdFR1Uk1zc3JmJTJGQU5KaXolMkJoWkRxTU8lMkZFeUNYMmRPYzZ0JTJCa3VjMWdtdCUyQjMlMkZoYVBUZW9aNXM2UjFJWnJCR0Rsa052SSUyQmpYY1lZeXglMkY3dFdWOUIlMkZ3RHclMkZ3RHdseUQxTHFXSDBqcTJOMU81NXJ4T29nWTFyd0M0Qzl1dVA2bXpkdDlXbDF2NlQlMkJiJTJGQUZkRlMlMkYxTXlxJTJGMlZUaHVzYSUyQjJ0c3QyazZzUHVZNzNCcm0lMkZvM1Z2MmZ5JTJGM0YwUzRUQXpxJTJCbSUyRldEcXVLR25iaFdPeWE2MkRVVWxyY215dWxrdFo2ZjJleTE5V3o4JTJGMkxzMlolMkJGWXgxakw2eXhnQmUlMkZjSUFJM0NYZk5JcVpYM3Vyc3Fxclo2ajdUcUpnTlkyUFVzUFAwZHlwZldKJTJGbzlOT1QyeHJhckhUeHMzdFprZiUyQnk3N1ZSNnY5YmVqZE5zYmtiM1picW0yc2ZWamdPT2hyZFpGbGpxc2ZmWHMlMkZtdlY5ViUyRiUyQkRYSGRaJTJCdXZVOHpBNmklMkJqMDJZMXphd2FaTHQyTFkyMXRsdGI3WE9iNmo2JTJGd0RSMVYlMkZ6VjM2djZyUFZZRlUlMkJpQ3M1UFM3Y2Q0M08yV1VPQjc3ZDFYJTJGVDI3bHd2Vm5OeUtLOGQxNXE2aGlqMjA3bzlkZzNESGRXOW05ekx2OEFRJTJGNFd1NzFLJTJGVHRyOWFxekolMkJ1SFY4dG1SMHpOb3lMdnNYVThOcjdjZHRqbXROMUo5SyUyQjJwb2RzYmsxJTJGbyUyRjhBMFlzbkc2dGUlMkJuTFpiZFhYWTZwdHRBRE53dWN3bWh2MmNXYnYwdG5yJTJGcEtuZnBLYktmOEF0c3FEMUR2cmpuZlY3MGNLbGxkZ3pnYnFqZjdRSEIzcDJzRzBzYjZsdjAlMkZmWjZURWNaZzYzMHh6MnZleks2alZiZmhWdGY2YmlRJTJCeGx0bU5ZN2EyejlKczNWdSUyRndheXZySGgxJTJCaGhkS3YzWHViakJoWTl3RGJIdFBwT2RYa09INnQxRGQlMkZSc2wlMkY2QyUyRndEb21WN0ZnOVdjJTJGRiUyQnEzUkw2YmliZW41V1ZqaDRsbGpkeGJleGx0ZjA2TGE5dnZwJTJGTSUyRndBRlolMkZoRXVxbjByNmxmWE05V1l6cHZWb282d3h2Y2JCY0dqOUx0cjA5TExvajlieGYlMkJ2VSUyRm9mNW16OWF2ckpkMCUyQjJqQndIQVpUcmNkMTdpQTdiVlphMm5ZMEglMkZDWHc5diUyRkFBZGYlMkZXbDV6aWRRWjlaY1kzbDNvZGR3ZzJ6MW1IWjZ6V2ZRdjN0MiUyQm5rMCUyRndDbiUyRndEUmY4eGY2RGYxRHF2WEdaJTJCZTV0enNpN0dkNmxtMmtQc3FOYnFxT0cxJTJGNEN1eG5wdCUyRlM3JTJGOUk5QUxqUjFHaDdmOTYlMkJ1SkpwQTFLWmoyV05EbU9EbW5od01oSmF5U1NTU1UlMkZ3RCUyRjB2VlZuOWFpckZHWVNHakVjTFh1T2tWJTJGemQ1SiUyRmRaVSUyRndCWCUyRnJhMEVITTlEN0pmOXBFNCUyRnB2OVlIWDJiVDZtbjlSSUtjRTlVNmxnWG5KRHYybDBqTiUyRlM0OTdTMzlDNTMwc095eG4lMkJCYyUyRiUyQmg1UDgzJTJGMmt5ZlMlMkZSNU5sUHJ2MTZ1d2N6RXhzUEhGb3pMQlJXSHo2cnJpV005T3V2NkhzOVQzdnNldWU2QjlidW9aRjV4QlU4NEJEQyUyQnRvWllXMVBjekclMkIwMkd4bTcxR2IyWFAyZm9kN1A1bXRjdDE2N3ElMkZUODdHZGZrJTJGYnNjV0hJNlYxTnJRTkd1M08yTlo2ZnA1Rk45ZFRjckgzZXBSNmY5Ukt3UllYemhLRXVHWW8lMkZ4ZlNNdk02bFpsRiUyRlZmU29iVTExUTlNR3lxTGZhJTJCclA5UEpzcjlLejA5bjZiR3ElMkY3ZFdOMXo5VnhDM0tmWlQwJTJCJTJCUFV5R2c1TklhUGRVN2V6WmU3S3hQUiUyRlI1R3lyMXNYOURiNiUyRndEZ3VaeCUyQnYzNTJiZTRXTndmdCUyQjl0YjJuMjFtemElMkYwN1huMiUyRnA3cW1WZXA2ZGJQMHZxZm9scVpEN21ZOTFlRG1YaDlwQkFaREdqVDlhd3ZiJTJCa3AzVyUyRnAyTWRrZnBhdjFiJTJCWFViMFd1bFRlUDIzaDVEaTNKTDNVWVdUWXpsemJLbjFzYzVyTjdiYU0zRlo5cHc4eHJ2U3ZyJTJGUWYwaW02dXZINnZZN0c2aGZTMm14MVdGWWFxN2JuayUyQm8ycjByS1BUYTdidXN0eFgyMCUyQnolMkJsZjRSVyUyRnFQWGVNNDAzcyUyRlE5THBkYlE0djk3V2w0RGNXMW51ZDZQcWZySDJlOW5zek1hdk54JTJGczklMkYyaEE2aTVyNzdIWkxIMjRUbjFXNCUyQlV3ajJQdmEzSmRqNWJmemFIYjhuN0ZrJTJGNFA5WXhQMHRYOHd1bHFhV2ZiMUN6WjZHYU0zMDYyMldERCUyRlNWMW1wM3NmWTZ0aldPc1kxdGY4Nzc2YSUyRlRRN3MyN3FGTlZJcnF3QWZVc2JaUlh0OVMwTjlLeTF0WDgzJTJCZ3JlJTJGMXNlaiUyRkFFMWx6S2x0ZER0Ymk5WkpzcXFiVGFCWGRTMFRiVzY4UHljVXhOajhxckliUiUyRnBQVSUyRlNiNiUyRlR5djZWV2YwcXZPcnptc1lhc25HekhtazdneDFaYTZLMlhSN3NkJTJCNXY2Szc5SlhpM2JQVSUyRlY4aTcxUlJVNSUyRldhTE12NmtZajdTR1g5TDZnJTJCcUslMkZvc3J5bWV1eDFjZjRCMTdmWXNycHVQbU54ZnR6NjNQY3dsOURXRFEyc0lxWmtOSiUyRk5aZTZsdVI2ZiUyRkFBWCUyRkFBUzFmMnBYWDB2cSUyQkpsbjdMZmtWVnRhM1pBZmw0OTI5bXluJTJGQTc2ckxxODZyJTJCYm8lMkY0cXloVnJ1b1pmU2VrNGxkbU0xMlBlMjI3RDlYUUJ0dnB0dTMlMkI3ZDZWcjY2WGYyUFUlMkZ3aVNuc3VxbkR5TE1mRnRNWk9SaiUyQnJYU1BlSEZzZW8ybDdnMzFMYSUyRlYlMkJoJTJGMm9xJTJGd2ZxZnBGem5WY2Q5dURaaXZheHpEWlhhMXp6dFphWEIxTFclMkJ2JTJGZ2IlMkZaVlhpNXR2ODMlMkZSc2o5QXNMcWZYdjJqMCUyRnBYcVBGZWRnTnVyZmExMEYzdXFzeDhsdjhBbzNPYnZyZiUyRkFNVDZuJTJCRlFxdXE1OSUyRlVSZWMxemI3Q0hYTWM4aHRtdzduNDd2OEJ0dWNQVWI2djZQOUxkNjlpTm9TOUg2VmswWnpjcGozdHFxZVcxQUF0dWMlMkY4QW03TWV5aHY2V3ZaJTJGTlpYJTJGQUlFdWd6dWsxNGVMaU42OWZiaTQ5dTZ3Z0JqeVdOYjZkUDZJT2E1MlY2dnQyNDdQMGREJTJGQUZQMGFqamRjNmtCZWVrWVFkMURJczJ0c1pWWmJkVlh0OXRZcXNHOSUyQjMlMkZUUFolMkJsJTJGd0JDc2FqcFhWJTJCdFgyWndvJTJGYWw3V3V2djlTME1lYTIlMkZUMiUyQnZaN20xZTFqNkdWNzZQWiUyRnBLME5FN2F2cEgxWjY5bmRVNlRpNG1QNm1WWmt0QmRia1AzdXFiV1RSa2pLdVlHYjl0MWU2djI3NzZyUDlJdXl3OFZ1Smp0b2FTOHRrdWVlWE9jZHozJTJGMm5MeWI2dmRadjZEakRLd21WdDNsemJzWnozVnNaY0hsdVRnWDQ5OWhmUll4dXpKd24lMkZ6bnN5S3JMTHY4SDJ2VCUyRnI5aE9ESyUyQnNNJTJGWnVTV2t2cnRGakMxd0xtdnIlMkZXS3FXJTJGbSUyQnpiWiUyQmtSUjR2VnBLbjAzcSUyRlRlcTQ3TW5wJTJCUXklMkJ0N1d2RzAlMkI0QnczTjlTcyUyRnBLJTJGJTJCdU5WeEJUJTJGQVAlMkZUOVZUT2ExN1N4d0RtdUJEbW5VRUhzVTZTU254ZjZ4OUN6UHF0MUVDaXg3R01lYmVuNVEwY2FuZXl5bHp2b3V0bzNNcnVaJTJGaGF2MG5wJTJGcEZVcnlhTWpGdnJ6cHM2ZGtQYlptVXNIdng3ekZiZXI0ZjdyYkxQNld6JTJGQUVsbiUyQml2WXZZJTJCdTlMNmYxWHBsMkgxR0cwT0c3MVNRMDF1SDBiMlBkOUI3UCUyRlViJTJGd0JHdkg4dnBGM1Q3JTJGUXBjSDVOSWVhN2F6NmxlWFNkMiUyQnpIamRXNzBxSGJNbkUlMkZ3bFNackUyTnV6ZmpLSE1ZJTJCR2ZwelIybiUyRkw5SDk1d00lMkZCeU9rNWh4c2dpeXV3YjZybTYxM1ZINk4xWCUyRkFLTXJXMTBqcWJybUhEeUhsOE1oalkzRzZzSGQ2UE8zMThkdjZlaXowN2ZXOVAwdiUyQk9IaVB4YzZuOWo1NTJZZGgzWW1WeTdGdFA1JTJCdnZmaXUlMkZ3JTJGJTJGQiUyRnBmNXplaFl2MWE2cFZrNVdMbmglMkJKWmhNTDZybWlXdnNCWTZ0MUZuMG4xTlk3N1R2cCUyRlNmOFduaWpxTlduT0VzY2pHUTRaQjdPaWcwZlY3TGYwMXJyOHJxUjJ0ZXozWFBiQng2N1hzWXpheXhqYk1sOW0zOCUyRjlKJTJCbCUyRlMlMkJwenJ2VXhNV3F2cU5WdUprc3gzNDAyelc1b29zYmRTY2lnNzI1T0hkOXFZNnYlMkJjMlpPTFQ2Tm44OHkzZTZYMXV5azlOZXh6bllkJTJCUGRpMk1jMWxUeGw0enR6bld1M2JLZldaWlhiczlUMDZmMHlwZFk2SjFIciUyRlZIOVdydHBzeDZtTXFGRFMlMkYxV2lzRjMwWE5hNSUyQjU3N2JmMGV5eiUyRlJWJTJCcW5Id1cxUm90REY2eGF5NDlUdmlrczlPSE5CQWM5ZzJzZmMxbTdadTIlMkZvRyUyRlF4djNQU1Q5THcyZFRibE0lMkIxVzFzZERpeG9NMnZ1M2YwOTM2T3QzcE9ac3VycCUyRlE1SCUyQmolMkZ3YUpqNEdYZjA1MlpqZXBSamJtT3J5d056TmpIdWxoOU1lZzV6TiUyQjFscm4lMkY0UjlmcCUyRnBGWXhjSEQ2ZXk2bkl0ZFNHQU90ZGxGd2hsaCUyRlJ1SHBOM1BwYnY4QTV4bnFlbWdGT1oxJTJGRHlNVzc3VDFESU9ReTR2cmE5MWJxQzAwZW4lMkJpWXglMkYwNk5ycW5ldiUyRkFJZiUyRkFFajFXeGFHMnN4S09vOU11NmlLMzJVWWVPTEhNTDN2THJOcnJtdTMlMkJsdiUyRkFQUmkxY3ZwbDFQVXFXM05maDVWSjM0JTJCTm1POVhFdXJIdSUyRlY3dDFqR01zWWYwbm9QOW4lMkZBQU5xdjlRNlc4NHc2MzBobjJjdUZkMWpjWUd5c2pTNnF6THhtaXUzRnlhZHY4OTZOWCUyQmwlMkIyZXFoU1NCUTF1JTJGd2VkNno5WCUyQnJ0RkpIMWRaajFhZ0VOc3FadUlCOUVQc3Zia1c3V2o2ZVMlMkY2ZnElMkJqJTJCaldPY2JOdzhobnFkTnhxM3RpelpZWE9hNFR5N2ZrV2JtTmQlMkZPYmZvZjRSZHBUMWZxSFVzMXJjJTJGTGZrdHlSVTJ2R2E0YlNITmVQdEZMM2VsNlZtTGxWZWpaN2YwbSUyRjFjaiUyQlolMkIwV2J2U2ZxbjAlMkZxMWVUamRSSWRsVnNwc3FjeHdCcWM4UGJmVyUyQnJYMzc2JTJGVHRmJTJGQUtIMGJjUzZ2MldKWHF1bGo0WUNYRURacXVyeG4xZHhYZFJvc3V3NzhoblhjUjVkU1d1MjJPclkyYnFzZG4wM1pGVHQ5MzJPejJaV0w2bFZMUFdvWFMxOUh6dXA5UHElMkJzZlRNWXR5OGtuN1pSWERDeTVoZFZiMURFcmUlMkY5TlU3OUx2eEhiTGNsajdLZjVySXNwWEU1bVBtOUo2cSUyRkxxYTgyWXJtdmZWSkhxVXNkJTJCZ3lxTGF0bG4wYSUyRjAzcFA4QVd4TG1lclYlMkI1aiUyQnolMkZVN3F2UiUyQnA5Q290NlFObExKYlpRNXhkWlhiOU8xbDczUzk5am51MyUyQnE3JTJCZSUyRm5FbU41N3F2MVg2YjljJTJGcTk5b3hXTnglMkJ1WXhjeXg3ZzlyamMyUFh4TTV0MzZ4NmRqbXQ5SDF2MDJMJTJCaTlMJTJGQ1ZXY3o5VlByNTFucFBXWDlIJTJCc3h1eThiSXRGTm95RHZ0b3Q5dEljTiUyRjA2SGUzMTZQJTJGQUVLbyUyRndBSjlwOWhiWFcxN250YUE5OGIzQVFYUUlidVA1eTQzJTJGR0I5UTJkZnAlMkZhWFRXdFoxaWxvRUdHaklZMyUyRkFQZTclMkJheUclMkY4QWFmSiUyRjZ6YiUyQmklMkZTVUpUMlRLNjZ4dHJhR0FBQUJvQUVBYlc4ZnlWSmVjZlVicVA4QWpIUFYzMWRYeE1qSjZjJTJGYXkyN0xhTWQxSmFOZ3NvRHhYOW85cmYwemFXMiUyQnIlMkZQZXAlMkZwUFIwbFAlMkY5VDFWSkpKSlNETkwlMkZzcjlnZVhHQUJXMXJuYWtENkYzNlAlMkJzdUF3dW1WJTJGV1hOcnhIdmN5bXFoMlM3SXFMblJhJTJCN0pmajJVUGNHdHFkdnlmVnNwWjdLJTJGUSUyQnkxJTJGb2FWNkZmajA1RlpxdllMS3lRUzEzRWc3bSUyRjlKS2ltdkhwcm9yRVYxTkRHRHdEUnRha2tFZzJOQ05ueERxZEdiMExydTNxRkRIWDQxckxUV0d4VmV5Ujc2MjZ0ZFZtTmElMkYxUDNMUFdyOWkyY216cnBZNXRkQjZnenBMN0txN1dHWFBxcWY2RDhISWMxZ1o5dXBvJTJGN1QlMkZ6bVZYJTJGQURYcXIwYnJPRjAlMkI0MTM1YldWRmdjMDVrRDFXTVAwNmFyaTE3cTI1UDgxWiUyQiUyRlglMkJpJTJCbmF1VHlzZnFuUWVvTTZoMDZsOTFlVzJINGp3ZjF1aGdjNzBMcTNEZFYxWEd4bTc4ZDclMkZ3Q2ZvJTJGUVhmcEs3R0lSRlg0czJmTjd2QWVHcFJqd2s5M0l5T2o1VkRuTjZVNSUyRlVNYSUyRmZsWWxMR3VMbSUyQnF4bnBmYWRyRzF0ZGszMDJVZmF2JTJCczJlbiUyRk5yUSUyQnJkOSUyQk5sTmRmUyUyRkR1RFhNeThlN1IxYm1qZkolMkZrTmhsOU52NTlLdE9lTGJNRE82Rmt0SnRlJTJCJTJGQ3N0TGglMkJoY2F4bTRtWTVvYzV0TE1yMDhYSzNzdDlIN1RSZCUyRlNxUFdXMTFmQSUyRmElMkJPT3BkT2M2anFlTU5sbFlqY2R2dWRqV3Q5emZWcjNiOGQlMkYlMkZvbSUyRjFFJTJCMkY1anBmMXU2RGo5UnlMS2NxdTNwZWFmMXJGMWFHaCUyQmh5bTBYTXI5MVRmWmtzciUyRm5jYiUyRlNXWTliRlR3ZnRmVU9wZFF3Ulp2eHNETE9MaDJ1QmV4ckxIMjFZekxMQUh2OUszWlglMkZ3QUglMkZPTFV3JTJCbmZVJTJGNnhWREI2bGc0JTJGVHV0RUZyTGFHJTJCZ0xYRCUyRkM0MnpZMnglMkYlMkJsdzdmMDFmOHVyOU9uJTJCcm95UHFsbFpmVGhoTXNxQlpibFdoeEZqYWhGTExXRSUyQjI3SFp2M3Nic3I5SDlONjMlMkZCalcxTDlKOVBEYSUyRjZ1ZGN4JTJGVTZUYTdiU0g2dXhMVDdXME9jMCUyRm82SFQ2bUZsMWZ6WCUyQm5WOW4xUjZ2MDdiYmhadjJ6YTR3MTQ5SzBWazZlbmtNZVdQdTJmem44eFZiJTJGd2YwRjFHVmg0bWRTVzNNRDJ2YkFmQTNBSDl4eW9ZbVJaMG8lMkZZODk0JTJCenRCTkdTN1FiUiUyQmE4bjZPeiUyRndIJTJGdHRMeVJieVBVY1hNcXp6blkyTmZoOVRyYlpia2tWeXh6UUJ2em0lMkJtMDR2cjdmMGQlMkZvMmZyWCUyQkQlMkZUVjJyYyUyQnJtSDBicUhUOGZjVyUyRmIyTmVkMUZybVdzYVhPWkxmUkxIMDFXJTJCcHU5TCUyQmFYVWlDSkhCV0dlZ002ZDFJZFU2V3piSmklMkZGYkFhV3VQdmRWJTJGViUyRm5QVFN0TjZVNCUyRldmcVBrNWpoUmoyQm9yRHJNWExPanFuZ2UybTFyTnJuVjNlMWxucGY4YiUyRk8xVXJtJTJGcUxsWkgxYSUyQnNlVDAzSXdMYTdzOTdLOG5GclklMkJ4OWZwJTJCcDZPZmp1cFo2VnZUMyUyQnJZM0klMkYwUDZPeW45RiUyQmpYcktTQ0ZKSkpKS1Vra2trcCUyRiUyRjlYMVZKSkpKU2tra2tsS1FNM0RwemNkMlBidUFkQmE5aExYc2NOV1dWUGI5Q3hqa2RKSlR4SFZmcTRPbDViYyUyQnE1NWRsdkxMcTJEYXgxbHByWTdJRmJQNWk2M2I3N0tmOUglMkJrJTJGUXJwUHElMkZjTE1BVmxncnVwY1dYTTRkdUJqOUkweTdmJTJGMWYwMHZyQjBoblZ1blBvJTJCamtNbXpGdEdqcTdRQzF0bGI5Tmp2ZCUyRnF4UzZkV01qMHVwSDlGZmJYc3lxd0lhYkd3eDMwJTJGZiUyQmlmVzluOVJIb3B3dnJCaDRlRjFWJTJCWGtVJTJGcW1aUVFMU0I2ZGVZeHd1eDdIQWZwR3ZzOUwlMkZCJTJGOEo2aXZXVloyZGo0dlY4RmdmYmtZJTJGbzVXTzhob3NyZHIzJTJCaTZ0N25yZWZXeDhiMmgyMGh6WkV3UjlGdyUyRmxJT0xnNCUyQkk2NTJPQ3h0N3ZVZldEN1E0JTJGU2N4djVtJTJGODlLMUl1allqOFBwV0xqV0RhJTJCdXNCN1NaSWNmYzV1NlhmbkZXMzFzZUllME9FekJFNiUyRk5TU1FVcEpKSkpTa2tra2xLU1NTU1VwSkpKSlQlMkZBUCUyRlc5VlNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkYlMkZaJTJGJTJCMDFJbEJvYjNSdmMyaHZjQ0F6TGpBQU9FSkpUUVFsQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEaENTVTBENmdBQUFBQVlFRHclMkZlRzFzSUhabGNuTnBiMjQ5SWpFdU1DSWdaVzVqYjJScGJtYzlJbFZVUmkwNElqOCUyQkNqd2hSRTlEVkZsUVJTQndiR2x6ZENCUVZVSk1TVU1nSWkwdkwwRndjR3hsTHk5RVZFUWdVRXhKVTFRZ01TNHdMeTlGVGlJZ0ltaDBkSEE2THk5M2QzY3VZWEJ3YkdVdVkyOXRMMFJVUkhNdlVISnZjR1Z5ZEhsTWFYTjBMVEV1TUM1a2RHUWlQZ284Y0d4cGMzUWdkbVZ5YzJsdmJqMGlNUzR3SWo0S1BHUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5TRzl5YVhwdmJuUmhiRkpsY3p3dmEyVjVQZ29KUEdScFkzUSUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YVhSbGJVRnljbUY1UEM5clpYayUyQkNna0pQR0Z5Y21GNVBnb0pDUWs4WkdsamRENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaFoyVkdiM0p0WVhRdVVFMUliM0pwZW05dWRHRnNVbVZ6UEM5clpYayUyQkNna0pDUWs4Y21WaGJENDNNand2Y21WaGJENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzV6ZEdGMFpVWnNZV2M4TDJ0bGVUNEtDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNUd3ZaR2xqZEQ0S0NRazhMMkZ5Y21GNVBnb0pQQzlrYVdOMFBnb0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGblpVWnZjbTFoZEM1UVRVOXlhV1Z1ZEdGMGFXOXVQQzlyWlhrJTJCQ2drOFpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbXB2WW5ScFkydGxkRHd2YzNSeWFXNW5QZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVwZEdWdFFYSnlZWGs4TDJ0bGVUNEtDUWs4WVhKeVlYayUyQkNna0pDVHhrYVdOMFBnb0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRm5aVVp2Y20xaGRDNVFUVTl5YVdWdWRHRjBhVzl1UEM5clpYayUyQkNna0pDUWs4YVc1MFpXZGxjajR4UEM5cGJuUmxaMlZ5UGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKUEdsdWRHVm5aWEklMkJNRHd2YVc1MFpXZGxjajRLQ1FrSlBDOWthV04wUGdvSkNUd3ZZWEp5WVhrJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5VMk5oYkdsdVp6d3ZhMlY1UGdvSlBHUnBZM1ElMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1OeVpXRjBiM0k4TDJ0bGVUNEtDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWFYUmxiVUZ5Y21GNVBDOXJaWGslMkJDZ2tKUEdGeWNtRjVQZ29KQ1FrOFpHbGpkRDRLQ1FrSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUXVVRTFUWTJGc2FXNW5QQzlyWlhrJTJCQ2drSkNRazhjbVZoYkQ0eFBDOXlaV0ZzUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKUEdsdWRHVm5aWEklMkJNRHd2YVc1MFpXZGxjajRLQ1FrSlBDOWthV04wUGdvSkNUd3ZZWEp5WVhrJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5WbVZ5ZEdsallXeFNaWE04TDJ0bGVUNEtDVHhrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNWpjbVZoZEc5eVBDOXJaWGslMkJDZ2tKUEhOMGNtbHVaejVqYjIwdVlYQndiR1V1YW05aWRHbGphMlYwUEM5emRISnBibWMlMkJDZ2tKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1R4aGNuSmhlVDRLQ1FrSlBHUnBZM1ElMkJDZ2tKQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOVm1WeWRHbGpZV3hTWlhNOEwydGxlVDRLQ1FrSkNUeHlaV0ZzUGpjeVBDOXlaV0ZzUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKUEdsdWRHVm5aWEklMkJNRHd2YVc1MFpXZGxjajRLQ1FrSlBDOWthV04wUGdvSkNUd3ZZWEp5WVhrJTJCQ2drOEwyUnBZM1ElMkJDZ2s4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5WbVZ5ZEdsallXeFRZMkZzYVc1blBDOXJaWGslMkJDZ2s4WkdsamRENEtDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDVHh6ZEhKcGJtYyUyQlkyOXRMbUZ3Y0d4bExtcHZZblJwWTJ0bGREd3ZjM1J5YVc1blBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRazhZWEp5WVhrJTJCQ2drSkNUeGthV04wUGdvSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGblpVWnZjbTFoZEM1UVRWWmxjblJwWTJGc1UyTmhiR2x1Wnp3dmEyVjVQZ29KQ1FrSlBISmxZV3clMkJNVHd2Y21WaGJENEtDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzV6ZEdGMFpVWnNZV2M4TDJ0bGVUNEtDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNUd3ZaR2xqZEQ0S0NRazhMMkZ5Y21GNVBnb0pQQzlrYVdOMFBnb0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1YzNWaVZHbGphMlYwTG5CaGNHVnlYMmx1Wm05ZmRHbGphMlYwUEM5clpYayUyQkNnazhaR2xqZEQ0S0NRazhhMlY1UGxCTlVGQkVVR0Z3WlhKRGIyUmxUbUZ0WlR3dmEyVjVQZ29KQ1R4a2FXTjBQZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVkzSmxZWFJ2Y2p3dmEyVjVQZ29KQ1FrOGMzUnlhVzVuUG1OdmJTNWhjSEJzWlM1cWIySjBhV05yWlhROEwzTjBjbWx1Wno0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbWwwWlcxQmNuSmhlVHd2YTJWNVBnb0pDUWs4WVhKeVlYayUyQkNna0pDUWs4WkdsamRENEtDUWtKQ1FrOGEyVjVQbEJOVUZCRVVHRndaWEpEYjJSbFRtRnRaVHd2YTJWNVBnb0pDUWtKQ1R4emRISnBibWMlMkJUR1YwZEdWeVBDOXpkSEpwYm1jJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJVRTFVYVc5bllWQmhjR1Z5VG1GdFpUd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzUwYVdOclpYUXVZM0psWVhSdmNqd3ZhMlY1UGdvSkNRazhjM1J5YVc1blBtTnZiUzVoY0hCc1pTNXFiMkowYVdOclpYUThMM04wY21sdVp6NEtDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG1sMFpXMUJjbkpoZVR3dmEyVjVQZ29KQ1FrOFlYSnlZWGslMkJDZ2tKQ1FrOFpHbGpkRDRLQ1FrSkNRazhhMlY1UGxCTlZHbHZaMkZRWVhCbGNrNWhiV1U4TDJ0bGVUNEtDUWtKQ1FrOGMzUnlhVzVuUG01aExXeGxkSFJsY2p3dmMzUnlhVzVuUGdvSkNRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXpkR0YwWlVac1lXYzhMMnRsZVQ0S0NRa0pDUWs4YVc1MFpXZGxjajR3UEM5cGJuUmxaMlZ5UGdvSkNRa0pQQzlrYVdOMFBnb0pDUWs4TDJGeWNtRjVQZ29KQ1R3dlpHbGpkRDRLQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNVFZV2RsUm05eWJXRjBMbEJOUVdScWRYTjBaV1JRWVdkbFVtVmpkRHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5RV1JxZFhOMFpXUlFZV2RsVW1WamREd3ZhMlY1UGdvSkNRa0pDVHhoY25KaGVUNEtDUWtKQ1FrSlBISmxZV3clMkJNQzR3UEM5eVpXRnNQZ29KQ1FrSkNRazhjbVZoYkQ0d0xqQThMM0psWVd3JTJCQ2drSkNRa0pDVHh5WldGc1BqY3pORHd2Y21WaGJENEtDUWtKQ1FrSlBISmxZV3clMkJOVGMyUEM5eVpXRnNQZ29KQ1FrSkNUd3ZZWEp5WVhrJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbk4wWVhSbFJteGhaend2YTJWNVBnb0pDUWtKQ1R4cGJuUmxaMlZ5UGpBOEwybHVkR1ZuWlhJJTJCQ2drSkNRazhMMlJwWTNRJTJCQ2drSkNUd3ZZWEp5WVhrJTJCQ2drSlBDOWthV04wUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExsQmhaMlZHYjNKdFlYUXVVRTFCWkdwMWMzUmxaRkJoY0dWeVVtVmpkRHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1WTNKbFlYUnZjand2YTJWNVBnb0pDUWs4YzNSeWFXNW5QbU52YlM1aGNIQnNaUzVxYjJKMGFXTnJaWFE4TDNOMGNtbHVaejRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtbDBaVzFCY25KaGVUd3ZhMlY1UGdvSkNRazhZWEp5WVhrJTJCQ2drSkNRazhaR2xqZEQ0S0NRa0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1UVlXZGxSbTl5YldGMExsQk5RV1JxZFhOMFpXUlFZWEJsY2xKbFkzUThMMnRsZVQ0S0NRa0pDUWs4WVhKeVlYayUyQkNna0pDUWtKQ1R4eVpXRnNQaTB4T0R3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTFRFNFBDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENDNOelE4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQalU1TkR3dmNtVmhiRDRLQ1FrSkNRazhMMkZ5Y21GNVBnb0pDUWtKQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzV6ZEdGMFpVWnNZV2M4TDJ0bGVUNEtDUWtKQ1FrOGFXNTBaV2RsY2o0d1BDOXBiblJsWjJWeVBnb0pDUWtKUEM5a2FXTjBQZ29KQ1FrOEwyRnljbUY1UGdvSkNUd3ZaR2xqZEQ0S0NRazhhMlY1UG1OdmJTNWhjSEJzWlM1d2NtbHVkQzVRWVhCbGNrbHVabTh1VUUxUVlYQmxjazVoYldVOEwydGxlVDRLQ1FrOFpHbGpkRDRLQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExtTnlaV0YwYjNJOEwydGxlVDRLQ1FrSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWFtOWlkR2xqYTJWMFBDOXpkSEpwYm1jJTJCQ2drSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1cGRHVnRRWEp5WVhrOEwydGxlVDRLQ1FrSlBHRnljbUY1UGdvSkNRa0pQR1JwWTNRJTJCQ2drSkNRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TGxCTlVHRndaWEpPWVcxbFBDOXJaWGslMkJDZ2tKQ1FrSlBITjBjbWx1Wno1dVlTMXNaWFIwWlhJOEwzTjBjbWx1Wno0S0NRa0pDUWs4YTJWNVBtTnZiUzVoY0hCc1pTNXdjbWx1ZEM1MGFXTnJaWFF1YzNSaGRHVkdiR0ZuUEM5clpYayUyQkNna0pDUWtKUEdsdWRHVm5aWEklMkJNRHd2YVc1MFpXZGxjajRLQ1FrSkNUd3ZaR2xqZEQ0S0NRa0pQQzloY25KaGVUNEtDUWs4TDJScFkzUSUyQkNna0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2TGxCTlZXNWhaR3AxYzNSbFpGQmhaMlZTWldOMFBDOXJaWGslMkJDZ2tKUEdScFkzUSUyQkNna0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNWpjbVZoZEc5eVBDOXJaWGslMkJDZ2tKQ1R4emRISnBibWMlMkJZMjl0TG1Gd2NHeGxMbXB2WW5ScFkydGxkRHd2YzNSeWFXNW5QZ29KQ1FrOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdWFYUmxiVUZ5Y21GNVBDOXJaWGslMkJDZ2tKQ1R4aGNuSmhlVDRLQ1FrSkNUeGthV04wUGdvSkNRa0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoY0dWeVNXNW1ieTVRVFZWdVlXUnFkWE4wWldSUVlXZGxVbVZqZER3dmEyVjVQZ29KQ1FrSkNUeGhjbkpoZVQ0S0NRa0pDUWtKUEhKbFlXdyUyQk1DNHdQQzl5WldGc1Bnb0pDUWtKQ1FrOGNtVmhiRDR3TGpBOEwzSmxZV3clMkJDZ2tKQ1FrSkNUeHlaV0ZzUGpjek5Ed3ZjbVZoYkQ0S0NRa0pDUWtKUEhKbFlXdyUyQk5UYzJQQzl5WldGc1Bnb0pDUWtKQ1R3dllYSnlZWGslMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTGxCaGNHVnlTVzVtYnk1UVRWVnVZV1JxZFhOMFpXUlFZWEJsY2xKbFkzUThMMnRsZVQ0S0NRazhaR2xqZEQ0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRa0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRa0pQR0Z5Y21GNVBnb0pDUWtKUEdScFkzUSUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxsQk5WVzVoWkdwMWMzUmxaRkJoY0dWeVVtVmpkRHd2YTJWNVBnb0pDUWtKQ1R4aGNuSmhlVDRLQ1FrSkNRa0pQSEpsWVd3JTJCTFRFNFBDOXlaV0ZzUGdvSkNRa0pDUWs4Y21WaGJENHRNVGc4TDNKbFlXdyUyQkNna0pDUWtKQ1R4eVpXRnNQamMzTkR3dmNtVmhiRDRLQ1FrSkNRa0pQSEpsWVd3JTJCTlRrMFBDOXlaV0ZzUGdvSkNRa0pDVHd2WVhKeVlYayUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5OMFlYUmxSbXhoWnp3dmEyVjVQZ29KQ1FrSkNUeHBiblJsWjJWeVBqQThMMmx1ZEdWblpYSSUyQkNna0pDUWs4TDJScFkzUSUyQkNna0pDVHd2WVhKeVlYayUyQkNna0pQQzlrYVdOMFBnb0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoY0dWeVNXNW1ieTV3Y0dRdVVFMVFZWEJsY2s1aGJXVThMMnRsZVQ0S0NRazhaR2xqZEQ0S0NRa0pQR3RsZVQ1amIyMHVZWEJ3YkdVdWNISnBiblF1ZEdsamEyVjBMbU55WldGMGIzSThMMnRsZVQ0S0NRa0pQSE4wY21sdVp6NWpiMjB1WVhCd2JHVXVhbTlpZEdsamEyVjBQQzl6ZEhKcGJtYyUyQkNna0pDVHhyWlhrJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMblJwWTJ0bGRDNXBkR1Z0UVhKeVlYazhMMnRsZVQ0S0NRa0pQR0Z5Y21GNVBnb0pDUWtKUEdScFkzUSUyQkNna0pDUWtKUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdVVHRndaWEpKYm1adkxuQndaQzVRVFZCaGNHVnlUbUZ0WlR3dmEyVjVQZ29KQ1FrSkNUeHpkSEpwYm1jJTJCVlZNZ1RHVjBkR1Z5UEM5emRISnBibWMlMkJDZ2tKQ1FrSlBHdGxlVDVqYjIwdVlYQndiR1V1Y0hKcGJuUXVkR2xqYTJWMExuTjBZWFJsUm14aFp6d3ZhMlY1UGdvSkNRa0pDVHhwYm5SbFoyVnlQakE4TDJsdWRHVm5aWEklMkJDZ2tKQ1FrOEwyUnBZM1ElMkJDZ2tKQ1R3dllYSnlZWGslMkJDZ2tKUEM5a2FXTjBQZ29KQ1R4clpYayUyQlkyOXRMbUZ3Y0d4bExuQnlhVzUwTG5ScFkydGxkQzVCVUVsV1pYSnphVzl1UEM5clpYayUyQkNna0pQSE4wY21sdVp6NHdNQzR5TUR3dmMzUnlhVzVuUGdvSkNUeHJaWGslMkJZMjl0TG1Gd2NHeGxMbkJ5YVc1MExuUnBZMnRsZEM1MGVYQmxQQzlyWlhrJTJCQ2drSlBITjBjbWx1Wno1amIyMHVZWEJ3YkdVdWNISnBiblF1VUdGd1pYSkpibVp2VkdsamEyVjBQQzl6ZEhKcGJtYyUyQkNnazhMMlJwWTNRJTJCQ2drOGEyVjVQbU52YlM1aGNIQnNaUzV3Y21sdWRDNTBhV05yWlhRdVFWQkpWbVZ5YzJsdmJqd3ZhMlY1UGdvSlBITjBjbWx1Wno0d01DNHlNRHd2YzNSeWFXNW5QZ29KUEd0bGVUNWpiMjB1WVhCd2JHVXVjSEpwYm5RdWRHbGphMlYwTG5SNWNHVThMMnRsZVQ0S0NUeHpkSEpwYm1jJTJCWTI5dExtRndjR3hsTG5CeWFXNTBMbEJoWjJWR2IzSnRZWFJVYVdOclpYUThMM04wY21sdVp6NEtQQzlrYVdOMFBnbzhMM0JzYVhOMFBnbzRRa2xOQSUyQmtBQUFBQUFIZ0FBd0FBQUVnQVNBQUFBQUFDM2dKQSUyRiUyQjclMkY3Z01HQWxJRFp3VW9BJTJGd0FBZ0FBQUVnQVNBQUFBQUFDMkFJb0FBRUFBQUJrQUFBQUFRQURBd01BQUFBQmYlMkY4QUFRQUJBQUFBQUFBQUFBQUFBQUFBYUFnQUdRR1FBQUFBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNFFrbE5BJTJCMEFBQUFBQUJBQVpBQUFBQUVBQVFCa0FBQUFBUUFCT0VKSlRRUW1BQUFBQUFBT0FBQUFBQUFBQUFBQUFEJTJCQUFBQTRRa2xOQkEwQUFBQUFBQVFBQUFBZU9FSkpUUVFaQUFBQUFBQUVBQUFBSGpoQ1NVMEQ4d0FBQUFBQUNRQUFBQUFBQUFBQUFRQTRRa2xOQkFvQUFBQUFBQUVBQURoQ1NVMG5FQUFBQUFBQUNnQUJBQUFBQUFBQUFBRTRRa2xOQSUyRlVBQUFBQUFFZ0FMMlptQUFFQWJHWm1BQVlBQUFBQUFBRUFMMlptQUFFQW9abWFBQVlBQUFBQUFBRUFNZ0FBQUFFQVdnQUFBQVlBQUFBQUFBRUFOUUFBQUFFQUxRQUFBQVlBQUFBQUFBRTRRa2xOQSUyRmdBQUFBQUFIQUFBUCUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRjhENkFBQUFBRCUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRkElMkJnQUFBQUElMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkZ3UG9BQUFBQVAlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkY4RDZBQUFPRUpKVFFRSUFBQUFBQUFRQUFBQUFRQUFBa0FBQUFKQUFBQUFBRGhDU1UwRUhnQUFBQUFBQkFBQUFBQTRRa2xOQkJvQUFBQUFBMVVBQUFBR0FBQUFBQUFBQUFBQUFBRkZBQUFCd2dBQUFCQUFjd0IzQUdrQWN3QnpBRjhBWVFCeUFHMEFlUUJmQUdzQWJnQnBBR1lBWlFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFCd2dBQUFVVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQVFBQUFBQUFBRzUxYkd3QUFBQUNBQUFBQm1KdmRXNWtjMDlpYW1NQUFBQUJBQUFBQUFBQVVtTjBNUUFBQUFRQUFBQUFWRzl3SUd4dmJtY0FBQUFBQUFBQUFFeGxablJzYjI1bkFBQUFBQUFBQUFCQ2RHOXRiRzl1WndBQUFVVUFBQUFBVW1kb2RHeHZibWNBQUFIQ0FBQUFCbk5zYVdObGMxWnNUSE1BQUFBQlQySnFZd0FBQUFFQUFBQUFBQVZ6YkdsalpRQUFBQklBQUFBSGMyeHBZMlZKUkd4dmJtY0FBQUFBQUFBQUIyZHliM1Z3U1VSc2IyNW5BQUFBQUFBQUFBWnZjbWxuYVc1bGJuVnRBQUFBREVWVGJHbGpaVTl5YVdkcGJnQUFBQTFoZFhSdlIyVnVaWEpoZEdWa0FBQUFBRlI1Y0dWbGJuVnRBQUFBQ2tWVGJHbGpaVlI1Y0dVQUFBQUFTVzFuSUFBQUFBWmliM1Z1WkhOUFltcGpBQUFBQVFBQUFBQUFBRkpqZERFQUFBQUVBQUFBQUZSdmNDQnNiMjVuQUFBQUFBQUFBQUJNWldaMGJHOXVad0FBQUFBQUFBQUFRblJ2Yld4dmJtY0FBQUZGQUFBQUFGSm5hSFJzYjI1bkFBQUJ3Z0FBQUFOMWNteFVSVmhVQUFBQUFRQUFBQUFBQUc1MWJHeFVSVmhVQUFBQUFRQUFBQUFBQUUxeloyVlVSVmhVQUFBQUFRQUFBQUFBQm1Gc2RGUmhaMVJGV0ZRQUFBQUJBQUFBQUFBT1kyVnNiRlJsZUhSSmMwaFVUVXhpYjI5c0FRQUFBQWhqWld4c1ZHVjRkRlJGV0ZRQUFBQUJBQUFBQUFBSmFHOXlla0ZzYVdkdVpXNTFiUUFBQUE5RlUyeHBZMlZJYjNKNlFXeHBaMjRBQUFBSFpHVm1ZWFZzZEFBQUFBbDJaWEowUVd4cFoyNWxiblZ0QUFBQUQwVlRiR2xqWlZabGNuUkJiR2xuYmdBQUFBZGtaV1poZFd4MEFBQUFDMkpuUTI5c2IzSlVlWEJsWlc1MWJRQUFBQkZGVTJ4cFkyVkNSME52Ykc5eVZIbHdaUUFBQUFCT2IyNWxBQUFBQ1hSdmNFOTFkSE5sZEd4dmJtY0FBQUFBQUFBQUNteGxablJQZFhSelpYUnNiMjVuQUFBQUFBQUFBQXhpYjNSMGIyMVBkWFJ6WlhSc2IyNW5BQUFBQUFBQUFBdHlhV2RvZEU5MWRITmxkR3h2Ym1jQUFBQUFBRGhDU1UwRUtBQUFBQUFBREFBQUFBRSUyRjhBQUFBQUFBQURoQ1NVMEVFUUFBQUFBQUFRRUFPRUpKVFFRVUFBQUFBQUFFQUFBQUFUaENTVTBFREFBQUFBQVdyd0FBQUFFQUFBQ2dBQUFBZEFBQUFlQUFBTm1BQUFBV2t3QVlBQUglMkYyUCUyRmdBQkJLUmtsR0FBRUNBQUJJQUVnQUFQJTJGdEFBeEJaRzlpWlY5RFRRQUMlMkYlMkI0QURrRmtiMkpsQUdTQUFBQUFBZiUyRmJBSVFBREFnSUNBa0lEQWtKREJFTENnc1JGUThNREE4VkdCTVRGUk1UR0JFTURBd01EQXdSREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFTkN3c05EZzBRRGc0UUZBNE9EaFFVRGc0T0RoUVJEQXdNREF3UkVRd01EQXdNREJFTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TSUyRjhBQUVRZ0FkQUNnQXdFaUFBSVJBUU1SQWYlMkZkQUFRQUN2JTJGRUFUOEFBQUVGQVFFQkFRRUJBQUFBQUFBQUFBTUFBUUlFQlFZSENBa0tDd0VBQVFVQkFRRUJBUUVBQUFBQUFBQUFBUUFDQXdRRkJnY0lDUW9MRUFBQkJBRURBZ1FDQlFjR0NBVURERE1CQUFJUkF3UWhFakVGUVZGaEV5SnhnVElHRkpHaHNVSWpKQlZTd1dJek5IS0MwVU1ISlpKVDhPSHhZM00xRnFLeWd5WkVrMVJrUmNLamREWVgwbFhpWmZLemhNUFRkZVB6UmllVXBJVzBsY1RVNVBTbHRjWFY1ZlZXWm5hR2xxYTJ4dGJtOWpkSFYyZDNoNWVudDhmWDUlMkZjUkFBSUNBUUlFQkFNRUJRWUhCd1lGTlFFQUFoRURJVEVTQkVGUllYRWlFd1V5Z1pFVW9iRkNJOEZTMGZBekpHTGhjb0tTUTFNVlkzTTA4U1VHRnFLeWd3Y21OY0xTUkpOVW94ZGtSVlUyZEdYaThyT0V3OU4xNCUyRk5HbEtTRnRKWEUxT1QwcGJYRjFlWDFWbVoyaHBhbXRzYlc1dlluTjBkWFozZUhsNmUzeCUyRiUyRmFBQXdEQVFBQ0VRTVJBRDhBOVZTU1NTVXBKSkpKU2tra2tsS1NTU1NVczR1RFNXaVhSb09KS0ZpM092eDJXdmJzZTRlNWdNd1JvNXNveXBkT3lOOW1UU1JIcFd2ajRPYzQlMkZ3RFZmOVdrcHVwSkpKS1Vra2trcFNTU1NTbEpKSkpLVWtra2twJTJGJTJGMFBWVWtsQ3F4dHRiYkclMkZSZUE0ZkFwS1pwSkpKS1VvMldOcnJkWTh3MWdMbkh5QWxWT3NXdm93WFpEWiUyRlFPWmE4RDl4cm1tMyUyRk5yM1BVc3dtJTJGcG1RR2FteWw0YkhpV3VoSlRZcXNGdFRMQnc5b2Q5NFUxUTZGa2ZhT2s0dHN6dXFZZndWOUpTbGwxJTJGb090MnNPZ3VEWGdlVG03ZiUyRlBtTiUyRndDQ0xVV1oxVmhyeXNiS0ElMkJqdWE3emd0dVolMkYxRnFJVVhUU1FjdktaaTQ3c2g3WE9ZMHRCRFlKaHptczNha2ZSM2JsVmQxM3ByTXR1SSUyQndzZSUyRjZMM0FobTduMCUyRlUlMkJpMnphZnprRk9ncTklMkJkajBaRk9NNGszWkR0ckdORW5oenQ3djNXYldQVThiSnB5YXZWcGR1WnVjMmVOV09OYjIlMkYyWHRYT1kyVlU3ckE2aG5POVJ1SlMlMkJyMWhPMWxndUdKYnVZejJleHR2djNmekxQVSUyRndDRVNVOVFra2trcFNTU1NTbEpKSkpLZiUyRiUyRlI5VldmMGl3aXUzRmY5TEdzZXdUJTJCNkQ3UCUyRkF5eHkwRm11bkg2eFBETXBnZCUyRmJaRlQlMkZ3RG9PeCUyRiUyQjIwUXAwbEMwMkN0eHFBTHdEdEI0SjhGTkpCVFZvdnglMkJvNGp2YkxMR2xsdFR1Uk1zc3JmJTJGQU5KaXolMkJoWkRxTU8lMkZFeUNYMmRPYzZ0JTJCa3VjMWdtdCUyQjMlMkZoYVBUZW9aNXM2UjFJWnJCR0Rsa052SSUyQmpYY1lZeXglMkY3dFdWOUIlMkZ3RHclMkZ3RHdseUQxTHFXSDBqcTJOMU81NXJ4T29nWTFyd0M0Qzl1dVA2bXpkdDlXbDF2NlQlMkJiJTJGQUZkRlMlMkYxTXlxJTJGMlZUaHVzYSUyQjJ0c3QyazZzUHVZNzNCcm0lMkZvM1Z2MmZ5JTJGM0YwUzRUQXpxJTJCbSUyRldEcXVLR25iaFdPeWE2MkRVVWxyY215dWxrdFo2ZjJleTE5V3o4JTJGMkxzMlolMkJGWXgxakw2eXhnQmUlMkZjSUFJM0NYZk5JcVpYM3Vyc3Fxclo2ajdUcUpnTlkyUFVzUFAwZHlwZldKJTJGbzlOT1QyeHJhckhUeHMzdFprZiUyQnk3N1ZSNnY5YmVqZE5zYmtiM1picW0yc2ZWamdPT2hyZFpGbGpxc2ZmWHMlMkZtdlY5ViUyRiUyQkRYSGRaJTJCdXZVOHpBNmklMkJqMDJZMXphd2FaTHQyTFkyMXRsdGI3WE9iNmo2JTJGd0RSMVYlMkZ6VjM2djZyUFZZRlUlMkJpQ3M1UFM3Y2Q0M08yV1VPQjc3ZDFYJTJGVDI3bHd2Vm5OeUtLOGQxNXE2aGlqMjA3bzlkZzNESGRXOW05ekx2OEFRJTJGNFd1NzFLJTJGVHRyOWFxekolMkJ1SFY4dG1SMHpOb3lMdnNYVThOcjdjZHRqbXROMUo5SyUyQjJwb2RzYmsxJTJGbyUyRjhBMFlzbkc2dGUlMkJuTFpiZFhYWTZwdHRBRE53dWN3bWh2MmNXYnYwdG5yJTJGcEtuZnBLYktmOEF0c3FEMUR2cmpuZlY3MGNLbGxkZ3pnYnFqZjdRSEIzcDJzRzBzYjZsdjAlMkZmWjZURWNaZzYzMHh6MnZleks2alZiZmhWdGY2YmlRJTJCeGx0bU5ZN2EyejlKczNWdSUyRndheXZySGgxJTJCaGhkS3YzWHViakJoWTl3RGJIdFBwT2RYa09INnQxRGQlMkZSc2wlMkY2QyUyRndEb21WN0ZnOVdjJTJGRiUyQnEzUkw2YmliZW41V1ZqaDRsbGpkeGJleGx0ZjA2TGE5dnZwJTJGTSUyRndBRlolMkZoRXVxbjByNmxmWE05V1l6cHZWb282d3h2Y2JCY0dqOUx0cjA5TExvajlieGYlMkJ2VSUyRm9mNW16OWF2ckpkMCUyQjJqQndIQVpUcmNkMTdpQTdiVlphMm5ZMEglMkZDWHc5diUyRkFBZGYlMkZXbDV6aWRRWjlaY1kzbDNvZGR3ZzJ6MW1IWjZ6V2ZRdjN0MiUyQm5rMCUyRndDbiUyRndEUmY4eGY2RGYxRHF2WEdaJTJCZTV0enNpN0dkNmxtMmtQc3FOYnFxT0cxJTJGNEN1eG5wdCUyRlM3JTJGOUk5QUxqUjFHaDdmOTYlMkJ1SkpwQTFLWmoyV05EbU9EbW5od01oSmF5U1NTU1UlMkZ3RCUyRjB2VlZuOWFpckZHWVNHakVjTFh1T2tWJTJGemQ1SiUyRmRaVSUyRndCWCUyRnJhMEVITTlEN0pmOXBFNCUyRnB2OVlIWDJiVDZtbjlSSUtjRTlVNmxnWG5KRHYybDBqTiUyRlM0OTdTMzlDNTMwc095eG4lMkJCYyUyRiUyQmg1UDgzJTJGMmt5ZlMlMkZSNU5sUHJ2MTZ1d2N6RXhzUEhGb3pMQlJXSHo2cnJpV005T3V2NkhzOVQzdnNldWU2QjlidW9aRjV4QlU4NEJEQyUyQnRvWllXMVBjekclMkIwMkd4bTcxR2IyWFAyZm9kN1A1bXRjdDE2N3ElMkZUODdHZGZrJTJGYnNjV0hJNlYxTnJRTkd1M08yTlo2ZnA1Rk45ZFRjckgzZXBSNmY5Ukt3UllYemhLRXVHWW8lMkZ4ZlNNdk02bFpsRiUyRlZmU29iVTExUTlNR3lxTGZhJTJCclA5UEpzcjlLejA5bjZiR3ElMkY3ZFdOMXo5VnhDM0tmWlQwJTJCJTJCUFV5R2c1TklhUGRVN2V6WmU3S3hQUiUyRlI1R3lyMXNYOURiNiUyRndEZ3VaeCUyQnYzNTJiZTRXTndmdCUyQjl0YjJuMjFtemElMkYwN1huMiUyRnA3cW1WZXA2ZGJQMHZxZm9scVpEN21ZOTFlRG1YaDlwQkFaREdqVDlhd3ZiJTJCa3AzVyUyRnAyTWRrZnBhdjFiJTJCWFViMFd1bFRlUDIzaDVEaTNKTDNVWVdUWXpsemJLbjFzYzVyTjdiYU0zRlo5cHc4eHJ2U3ZyJTJGUWYwaW02dXZINnZZN0c2aGZTMm14MVdGWWFxN2JuayUyQm8ycjByS1BUYTdidXN0eFgyMCUyQnolMkJsZjRSVyUyRnFQWGVNNDAzcyUyRlE5THBkYlE0djk3V2w0RGNXMW51ZDZQcWZySDJlOW5zek1hdk54JTJGczklMkYyaEE2aTVyNzdIWkxIMjRUbjFXNCUyQlV3ajJQdmEzSmRqNWJmemFIYjhuN0ZrJTJGNFA5WXhQMHRYOHd1bHFhV2ZiMUN6WjZHYU0zMDYyMldERCUyRlNWMW1wM3NmWTZ0aldPc1kxdGY4Nzc2YSUyRlRRN3MyN3FGTlZJcnF3QWZVc2JaUlh0OVMwTjlLeTF0WDgzJTJCZ3JlJTJGMXNlaiUyRkFFMWx6S2x0ZER0Ymk5WkpzcXFiVGFCWGRTMFRiVzY4UHljVXhOajhxckliUiUyRnBQVSUyRlNiNiUyRlR5djZWV2YwcXZPcnptc1lhc25HekhtazdneDFaYTZLMlhSN3NkJTJCNXY2Szc5SlhpM2JQVSUyRlY4aTcxUlJVNSUyRldhTE12NmtZajdTR1g5TDZnJTJCcUslMkZvc3J5bWV1eDFjZjRCMTdmWXNycHVQbU54ZnR6NjNQY3dsOURXRFEyc0lxWmtOSiUyRk5aZTZsdVI2ZiUyRkFBWCUyRkFBUzFmMnBYWDB2cSUyQkpsbjdMZmtWVnRhM1pBZmw0OTI5bXluJTJGQTc2ckxxODZyJTJCYm8lMkY0cXloVnJ1b1pmU2VrNGxkbU0xMlBlMjI3RDlYUUJ0dnB0dTMlMkI3ZDZWcjY2WGYyUFUlMkZ3aVNuc3VxbkR5TE1mRnRNWk9SaiUyQnJYU1BlSEZzZW8ybDdnMzFMYSUyRlYlMkJoJTJGMm9xJTJGd2ZxZnBGem5WY2Q5dURaaXZheHpEWlhhMXp6dFphWEIxTFclMkJ2JTJGZ2IlMkZaVlhpNXR2ODMlMkZSc2o5QXNMcWZYdjJqMCUyRnBYcVBGZWRnTnVyZmExMEYzdXFzeDhsdjhBbzNPYnZyZiUyRkFNVDZuJTJCRlFxdXE1OSUyRlVSZWMxemI3Q0hYTWM4aHRtdzduNDd2OEJ0dWNQVWI2djZQOUxkNjlpTm9TOUg2VmswWnpjcGozdHFxZVcxQUF0dWMlMkY4QW03TWV5aHY2V3ZaJTJGTlpYJTJGQUlFdWd6dWsxNGVMaU42OWZiaTQ5dTZ3Z0JqeVdOYjZkUDZJT2E1MlY2dnQyNDdQMGREJTJGQUZQMGFqamRjNmtCZWVrWVFkMURJczJ0c1pWWmJkVlh0OXRZcXNHOSUyQjMlMkZUUFolMkJsJTJGd0JDc2FqcFhWJTJCdFgyWndvJTJGYWw3V3V2djlTME1lYTIlMkZUMiUyQnZaN20xZTFqNkdWNzZQWiUyRnBLME5FN2F2cEgxWjY5bmRVNlRpNG1QNm1WWmt0QmRia1AzdXFiV1RSa2pLdVlHYjl0MWU2djI3NzZyUDlJdXl3OFZ1Smp0b2FTOHRrdWVlWE9jZHozJTJGMm5MeWI2dmRadjZEakRLd21WdDNsemJzWnozVnNaY0hsdVRnWDQ5OWhmUll4dXpKd24lMkZ6bnN5S3JMTHY4SDJ2VCUyRnI5aE9ESyUyQnNNJTJGWnVTV2t2cnRGakMxd0xtdnIlMkZXS3FXJTJGbSUyQnpiWiUyQmtSUjR2VnBLbjAzcSUyRlRlcTQ3TW5wJTJCUXklMkJ0N1d2RzAlMkI0QnczTjlTcyUyRnBLJTJGJTJCdU5WeEJUJTJGQVAlMkZUOVZUT2ExN1N4d0RtdUJEbW5VRUhzVTZTU254ZjZ4OUN6UHF0MUVDaXg3R01lYmVuNVEwY2FuZXl5bHp2b3V0bzNNcnVaJTJGaGF2MG5wJTJGcEZVcnlhTWpGdnJ6cHM2ZGtQYlptVXNIdng3ekZiZXI0ZjdyYkxQNld6JTJGQUVsbiUyQml2WXZZJTJCdTlMNmYxWHBsMkgxR0cwT0c3MVNRMDF1SDBiMlBkOUI3UCUyRlViJTJGd0JHdkg4dnBGM1Q3JTJGUXBjSDVOSWVhN2F6NmxlWFNkMiUyQnpIamRXNzBxSGJNbkUlMkZ3bFNackUyTnV6ZmpLSE1ZJTJCR2ZwelIybiUyRkw5SDk1d00lMkZCeU9rNWh4c2dpeXV3YjZybTYxM1ZINk4xWCUyRkFLTXJXMTBqcWJybUhEeUhsOE1oalkzRzZzSGQ2UE8zMThkdjZlaXowN2ZXOVAwdiUyQk9IaVB4YzZuOWo1NTJZZGgzWW1WeTdGdFA1JTJCdnZmaXUlMkZ3JTJGJTJGQiUyRnBmNXplaFl2MWE2cFZrNVdMbmglMkJKWmhNTDZybWlXdnNCWTZ0MUZuMG4xTlk3N1R2cCUyRlNmOFduaWpxTlduT0VzY2pHUTRaQjdPaWcwZlY3TGYwMXJyOHJxUjJ0ZXozWFBiQng2N1hzWXpheXhqYk1sOW0zOCUyRjlKJTJCbCUyRlMlMkJwenJ2VXhNV3F2cU5WdUprc3gzNDAyelc1b29zYmRTY2lnNzI1T0hkOXFZNnYlMkJjMlpPTFQ2Tm44OHkzZTZYMXV5azlOZXh6bllkJTJCUGRpMk1jMWxUeGw0enR6bld1M2JLZldaWlhiczlUMDZmMHlwZFk2SjFIciUyRlZIOVdydHBzeDZtTXFGRFMlMkYxV2lzRjMwWE5hNSUyQjU3N2JmMGV5eiUyRlJWJTJCcW5Id1cxUm90REY2eGF5NDlUdmlrczlPSE5CQWM5ZzJzZmMxbTdadTIlMkZvRyUyRlF4djNQU1Q5THcyZFRibE0lMkIxVzFzZERpeG9NMnZ1M2YwOTM2T3QzcE9ac3VycCUyRlE1SCUyQmolMkZ3YUpqNEdYZjA1MlpqZXBSamJtT3J5d056TmpIdWxoOU1lZzV6TiUyQjFscm4lMkY0UjlmcCUyRnBGWXhjSEQ2ZXk2bkl0ZFNHQU90ZGxGd2hsaCUyRlJ1SHBOM1BwYnY4QTV4bnFlbWdGT1oxJTJGRHlNVzc3VDFESU9ReTR2cmE5MWJxQzAwZW4lMkJpWXglMkYwNk5ycW5ldiUyRkFJZiUyRkFFajFXeGFHMnN4S09vOU11NmlLMzJVWWVPTEhNTDN2THJOcnJtdTMlMkJsdiUyRkFQUmkxY3ZwbDFQVXFXM05maDVWSjM0JTJCTm1POVhFdXJIdSUyRlY3dDFqR01zWWYwbm9QOW4lMkZBQU5xdjlRNlc4NHc2MzBobjJjdUZkMWpjWUd5c2pTNnF6THhtaXUzRnlhZHY4OTZOWCUyQmwlMkIyZXFoU1NCUTF1JTJGd2VkNno5WCUyQnJ0RkpIMWRaajFhZ0VOc3FadUlCOUVQc3Zia1c3V2o2ZVMlMkY2ZnElMkJqJTJCaldPY2JOdzhobnFkTnhxM3RpelpZWE9hNFR5N2ZrV2JtTmQlMkZPYmZvZjRSZHBUMWZxSFVzMXJjJTJGTGZrdHlSVTJ2R2E0YlNITmVQdEZMM2VsNlZtTGxWZWpaN2YwbSUyRjFjaiUyQlolMkIwV2J2U2ZxbjAlMkZxMWVUamRSSWRsVnNwc3FjeHdCcWM4UGJmVyUyQnJYMzc2JTJGVHRmJTJGQUtIMGJjUzZ2MldKWHF1bGo0WUNYRURacXVyeG4xZHhYZFJvc3V3NzhoblhjUjVkU1d1MjJPclkyYnFzZG4wM1pGVHQ5MzJPejJaV0w2bFZMUFdvWFMxOUh6dXA5UHElMkJzZlRNWXR5OGtuN1pSWERDeTVoZFZiMURFcmUlMkY5TlU3OUx2eEhiTGNsajdLZjVySXNwWEU1bVBtOUo2cSUyRkxxYTgyWXJtdmZWSkhxVXNkJTJCZ3lxTGF0bG4wYSUyRjAzcFA4QVd4TG1lclYlMkI1aiUyQnolMkZVN3F2UiUyQnA5Q290NlFObExKYlpRNXhkWlhiOU8xbDczUzk5am51MyUyQnE3JTJCZSUyRm5FbU41N3F2MVg2YjljJTJGcTk5b3hXTnglMkJ1WXhjeXg3ZzlyamMyUFh4TTV0MzZ4NmRqbXQ5SDF2MDJMJTJCaTlMJTJGQ1ZXY3o5VlByNTFucFBXWDlIJTJCc3h1eThiSXRGTm95RHZ0b3Q5dEljTiUyRjA2SGUzMTZQJTJGQUVLbyUyRndBSjlwOWhiWFcxN250YUE5OGIzQVFYUUlidVA1eTQzJTJGR0I5UTJkZnAlMkZhWFRXdFoxaWxvRUdHaklZMyUyRkFQZTclMkJheUclMkY4QWFmSiUyRjZ6YiUyQmklMkZTVUpUMlRLNjZ4dHJhR0FBQUJvQUVBYlc4ZnlWSmVjZlVicVA4QWpIUFYzMWRYeE1qSjZjJTJGYXkyN0xhTWQxSmFOZ3NvRHhYOW85cmYwemFXMiUyQnIlMkZQZXAlMkZwUFIwbFAlMkY5VDFWSkpKSlNETkwlMkZzcjlnZVhHQUJXMXJuYWtENkYzNlAlMkJzdUF3dW1WJTJGV1hOcnhIdmN5bXFoMlM3SXFMblJhJTJCN0pmajJVUGNHdHFkdnlmVnNwWjdLJTJGUSUyQnkxJTJGb2FWNkZmajA1RlpxdllMS3lRUzEzRWc3bSUyRjlKS2ltdkhwcm9yRVYxTkRHRHdEUnRha2tFZzJOQ05ueERxZEdiMExydTNxRkRIWDQxckxUV0d4VmV5Ujc2MjZ0ZFZtTmElMkYxUDNMUFdyOWkyY216cnBZNXRkQjZnenBMN0txN1dHWFBxcWY2RDhISWMxZ1o5dXBvJTJGN1QlMkZ6bVZYJTJGQURYcXIwYnJPRjAlMkI0MTM1YldWRmdjMDVrRDFXTVAwNmFyaTE3cTI1UDgxWiUyQiUyRlglMkJpJTJCbmF1VHlzZnFuUWVvTTZoMDZsOTFlVzJINGp3ZjF1aGdjNzBMcTNEZFYxWEd4bTc4ZDclMkZ3Q2ZvJTJGUVhmcEs3R0lSRlg0czJmTjd2QWVHcFJqd2s5M0l5T2o1VkRuTjZVNSUyRlVNYSUyRmZsWWxMR3VMbSUyQnF4bnBmYWRyRzF0ZGszMDJVZmF2JTJCczJlbiUyRk5yUSUyQnJkOSUyQk5sTmRmUyUyRkR1RFhNeThlN1IxYm1qZkolMkZrTmhsOU52NTlLdE9lTGJNRE82Rmt0SnRlJTJCJTJGQ3N0TGglMkJoY2F4bTRtWTVvYzV0TE1yMDhYSzNzdDlIN1RSZCUyRlNxUFdXMTFmQSUyRmElMkJPT3BkT2M2anFlTU5sbFlqY2R2dWRqV3Q5emZWcjNiOGQlMkYlMkZvbSUyRjFFJTJCMkY1anBmMXU2RGo5UnlMS2NxdTNwZWFmMXJGMWFHaCUyQmh5bTBYTXI5MVRmWmtzciUyRm5jYiUyRlNXWTliRlR3ZnRmVU9wZFF3Ulp2eHNETE9MaDJ1QmV4ckxIMjFZekxMQUh2OUszWlglMkZ3QUglMkZPTFV3JTJCbmZVJTJGNnhWREI2bGc0JTJGVHV0RUZyTGFHJTJCZ0xYRCUyRkM0MnpZMnglMkYlMkJsdzdmMDFmOHVyOU9uJTJCcm95UHFsbFpmVGhoTXNxQlpibFdoeEZqYWhGTExXRSUyQjI3SFp2M3Nic3I5SDlONjMlMkZCalcxTDlKOVBEYSUyRjZ1ZGN4JTJGVTZUYTdiU0g2dXhMVDdXME9jMCUyRm82SFQ2bUZsMWZ6WCUyQm5WOW4xUjZ2MDdiYmhadjJ6YTR3MTQ5SzBWazZlbmtNZVdQdTJmem44eFZiJTJGd2YwRjFHVmg0bWRTVzNNRDJ2YkFmQTNBSDl4eW9ZbVJaMG8lMkZZODk0JTJCenRCTkdTN1FiUiUyQmE4bjZPeiUyRndIJTJGdHRMeVJieVBVY1hNcXp6blkyTmZoOVRyYlpia2tWeXh6UUJ2em0lMkJtMDR2cjdmMGQlMkZvMmZyWCUyQkQlMkZUVjJyYyUyQnJtSDBicUhUOGZjVyUyRmIyTmVkMUZybVdzYVhPWkxmUkxIMDFXJTJCcHU5TCUyQmFYVWlDSkhCV0dlZ002ZDFJZFU2V3piSmklMkZGYkFhV3VQdmRWJTJGViUyRm5QVFN0TjZVNCUyRldmcVBrNWpoUmoyQm9yRHJNWExPanFuZ2UybTFyTnJuVjNlMWxucGY4YiUyRk8xVXJtJTJGcUxsWkgxYSUyQnNlVDAzSXdMYTdzOTdLOG5GclklMkJ4OWZwJTJCcDZPZmp1cFo2VnZUMyUyQnJZM0klMkYwUDZPeW45RiUyQmpYcktTQ0ZKSkpKS1Vra2trcCUyRiUyRjlYMVZKSkpKU2tra2tsS1FNM0RwemNkMlBidUFkQmE5aExYc2NOV1dWUGI5Q3hqa2RKSlR4SFZmcTRPbDViYyUyQnE1NWRsdkxMcTJEYXgxbHByWTdJRmJQNWk2M2I3N0tmOUglMkJrJTJGUXJwUHElMkZjTE1BVmxncnVwY1dYTTRkdUJqOUkweTdmJTJGMWYwMHZyQjBoblZ1blBvJTJCamtNbXpGdEdqcTdRQzF0bGI5Tmp2ZCUyRnF4UzZkV01qMHVwSDlGZmJYc3lxd0lhYkd3eDMwJTJGZiUyQmlmVzluOVJIb3B3dnJCaDRlRjFWJTJCWGtVJTJGcW1aUVFMU0I2ZGVZeHd1eDdIQWZwR3ZzOUwlMkZCJTJGOEo2aXZXVloyZGo0dlY4RmdmYmtZJTJGbzVXTzhob3NyZHIzJTJCaTZ0N25yZWZXeDhiMmgyMGh6WkV3UjlGdyUyRmxJT0xnNCUyQkk2NTJPQ3h0N3ZVZldEN1E0JTJGU2N4djVtJTJGODlLMUl1allqOFBwV0xqV0RhJTJCdXNCN1NaSWNmYzV1NlhmbkZXMzFzZUllME9FekJFNiUyRk5TU1FVcEpKSkpTa2tra2xLU1NTU1VwSkpKSlQlMkZBUCUyRlc5VlNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkJxa2w4cXBKS2ZxcEpmS3FTU242cVNYeXFra3AlMkYlMkZaQURoQ1NVMEVJUUFBQUFBQVZRQUFBQUVCQUFBQUR3QkJBR1FBYndCaUFHVUFJQUJRQUdnQWJ3QjBBRzhBY3dCb0FHOEFjQUFBQUJNQVFRQmtBRzhBWWdCbEFDQUFVQUJvQUc4QWRBQnZBSE1BYUFCdkFIQUFJQUJEQUZNQU1nQUFBQUVBT0VKSlRRUUdBQUFBQUFBSEFBSUFBQUFCQVFEJTJGNFRramFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0x3QThQM2h3WVdOclpYUWdZbVZuYVc0OUl1JTJCN3Z5SWdhV1E5SWxjMVRUQk5jRU5sYUdsSWVuSmxVM3BPVkdONmEyTTVaQ0klMkZQZ284ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0l6TGpFdU1TMHhNVElpUGdvZ0lDQThjbVJtT2xKRVJpQjRiV3h1Y3pweVpHWTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1Rrdk1ESXZNakl0Y21SbUxYTjViblJoZUMxdWN5TWlQZ29nSUNBZ0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenA0WVhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJJTJCQ2lBZ0lDQWdJQ0FnSUR4NFlYQk5UVHBFYjJOMWJXVnVkRWxFUG5WMWFXUTZSVGN4T1RWRk5UWTFOek16TVRGRVJEbEZOekpHUTBFMlFqa3dRVVpCUmpVOEwzaGhjRTFOT2tSdlkzVnRaVzUwU1VRJTJCQ2lBZ0lDQWdJQ0FnSUR4NFlYQk5UVHBKYm5OMFlXNWpaVWxFUG5WMWFXUTZSVGN4T1RWRk5UYzFOek16TVRGRVJEbEZOekpHUTBFMlFqa3dRVVpCUmpVOEwzaGhjRTFOT2tsdWMzUmhibU5sU1VRJTJCQ2lBZ0lDQWdJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQZ29nSUNBZ0lDQThjbVJtT2tSbGMyTnlhWEIwYVc5dUlISmtaanBoWW05MWREMGlJZ29nSUNBZ0lDQWdJQ0FnSUNCNGJXeHVjenA0WVhBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4ZUdGd09rTnlaV0YwWlVSaGRHVSUyQk1qQXdPQzB3TnkweE9WUXhORG8xTnpvME1TMHdOVG93TUR3dmVHRndPa055WldGMFpVUmhkR1UlMkJDaUFnSUNBZ0lDQWdJRHg0WVhBNlRXOWthV1o1UkdGMFpUNHlNREE0TFRBM0xURTVWREUwT2pVNE9qQTFMVEExT2pBd1BDOTRZWEE2VFc5a2FXWjVSR0YwWlQ0S0lDQWdJQ0FnSUNBZ1BIaGhjRHBOWlhSaFpHRjBZVVJoZEdVJTJCTWpBd09DMHdOeTB4T1ZReE5EbzFPRG93TlMwd05Ub3dNRHd2ZUdGd09rMWxkR0ZrWVhSaFJHRjBaVDRLSUNBZ0lDQWdJQ0FnUEhoaGNEcERjbVZoZEc5eVZHOXZiRDVCWkc5aVpTQlFhRzkwYjNOb2IzQWdRMU15SUUxaFkybHVkRzl6YUR3dmVHRndPa055WldGMGIzSlViMjlzUGdvZ0lDQWdJQ0E4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02WkdNOUltaDBkSEE2THk5d2RYSnNMbTl5Wnk5a1l5OWxiR1Z0Wlc1MGN5OHhMakV2SWo0S0lDQWdJQ0FnSUNBZ1BHUmpPbVp2Y20xaGRENXBiV0ZuWlM5cWNHVm5QQzlrWXpwbWIzSnRZWFElMkJDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0FnSUNBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cHdhRzkwYjNOb2IzQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2Y0dodmRHOXphRzl3THpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4Y0dodmRHOXphRzl3T2tOdmJHOXlUVzlrWlQ0elBDOXdhRzkwYjNOb2IzQTZRMjlzYjNKTmIyUmxQZ29nSUNBZ0lDQWdJQ0E4Y0dodmRHOXphRzl3T2tocGMzUnZjbmt2UGdvZ0lDQWdJQ0E4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpUGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBQY21sbGJuUmhkR2x2Ymo0eFBDOTBhV1ptT2s5eWFXVnVkR0YwYVc5dVBnb2dJQ0FnSUNBZ0lDQThkR2xtWmpwWVVtVnpiMngxZEdsdmJqNHhNREF3TURBd0x6RXdNREF3UEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE1EQXdNREF3THpFd01EQXdQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcE9ZWFJwZG1WRWFXZGxjM1ElMkJNalUyTERJMU55d3lOVGdzTWpVNUxESTJNaXd5TnpRc01qYzNMREk0TkN3MU16QXNOVE14TERJNE1pd3lPRE1zTWprMkxETXdNU3d6TVRnc016RTVMRFV5T1N3MU16SXNNekEyTERJM01Dd3lOekVzTWpjeUxETXdOU3d6TVRVc016TTBNekk3UXpBMVFURTVNRFJHUmpBd1FVSkVRekExTVVKRVJrRkdNREl3TkVWQk5URThMM1JwWm1ZNlRtRjBhWFpsUkdsblpYTjBQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZaWGhwWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOWxlR2xtTHpFdU1DOGlQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0JTJCTkRVd1BDOWxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajRLSUNBZ0lDQWdJQ0FnUEdWNGFXWTZVR2w0Wld4WlJHbHRaVzV6YVc5dVBqTXlOVHd2WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0JTJCQ2lBZ0lDQWdJQ0FnSUR4bGVHbG1Pa052Ykc5eVUzQmhZMlUlMkJMVEU4TDJWNGFXWTZRMjlzYjNKVGNHRmpaVDRLSUNBZ0lDQWdJQ0FnUEdWNGFXWTZUbUYwYVhabFJHbG5aWE4wUGpNMk9EWTBMRFF3T1RZd0xEUXdPVFl4TERNM01USXhMRE0zTVRJeUxEUXdPVFl5TERRd09UWXpMRE0zTlRFd0xEUXdPVFkwTERNMk9EWTNMRE0yT0RZNExETXpORE0wTERNek5ETTNMRE0wT0RVd0xETTBPRFV5TERNME9EVTFMRE0wT0RVMkxETTNNemMzTERNM016YzRMRE0zTXpjNUxETTNNemd3TERNM016Z3hMRE0zTXpneUxETTNNemd6TERNM016ZzBMRE0zTXpnMUxETTNNemcyTERNM016azJMRFF4TkRnekxEUXhORGcwTERReE5EZzJMRFF4TkRnM0xEUXhORGc0TERReE5Ea3lMRFF4TkRrekxEUXhORGsxTERReE56STRMRFF4TnpJNUxEUXhOek13TERReE9UZzFMRFF4T1RnMkxEUXhPVGczTERReE9UZzRMRFF4T1RnNUxEUXhPVGt3TERReE9Ua3hMRFF4T1RreUxEUXhPVGt6TERReE9UazBMRFF4T1RrMUxEUXhPVGsyTERReU1ERTJMREFzTWl3MExEVXNOaXczTERnc09Td3hNQ3d4TVN3eE1pd3hNeXd4TkN3eE5Td3hOaXd4Tnl3eE9Dd3lNQ3d5TWl3eU15d3lOQ3d5TlN3eU5pd3lOeXd5T0N3ek1EdEVORFl6TjBOQ09VUTBNVUV4TUVKQk4wVkdOVVZDUTBSQ05qTXhPRE15T1R3dlpYaHBaanBPWVhScGRtVkVhV2RsYzNRJTJCQ2lBZ0lDQWdJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQZ29nSUNBOEwzSmtaanBTUkVZJTJCQ2p3dmVEcDRiWEJ0WlhSaFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvOFAzaHdZV05yWlhRZ1pXNWtQU0ozSWo4JTJCJTJGJTJCNEFEa0ZrYjJKbEFHU0FBQUFBQWYlMkZiQUlRQUNBWUdCZ1lHQ0FZR0NBd0lCd2dNRGdvSUNBb09FQTBORGcwTkVCRU1EQXdNREF3UkRBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBRUpDQWdKQ2drTENRa0xEZ3NOQ3c0UkRnNE9EaEVSREF3TURBd1JFUXdNREF3TURCRU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd00lMkY4QUFFUWdCUlFIQ0F3RWlBQUlSQVFNUkFmJTJGZEFBUUFIZiUyRkVBYUlBQUFBSEFRRUJBUUVBQUFBQUFBQUFBQVFGQXdJR0FRQUhDQWtLQ3dFQUFnSURBUUVCQVFFQUFBQUFBQUFBQVFBQ0F3UUZCZ2NJQ1FvTEVBQUNBUU1EQWdRQ0JnY0RCQUlHQW5NQkFnTVJCQUFGSVJJeFFWRUdFMkVpY1lFVU1wR2hCeFd4UWlQQlV0SGhNeFppOENSeWd2RWxRelJUa3FLeVkzUENOVVFuazZPek5oZFVaSFREMHVJSUpvTUpDaGdaaEpSRlJxUzBWdE5WS0JyeTQlMkZQRTFPVDBaWFdGbGFXMXhkWGw5V1oyaHBhbXRzYlc1dlkzUjFkbmQ0ZVhwN2ZIMSUyQmYzT0VoWWFIaUltS2k0eU5qbyUyQkNrNVNWbHBlWW1acWJuSjJlbjVLanBLV21wNmlwcXF1c3JhNnZvUkFBSUNBUUlEQlFVRUJRWUVDQU1EYlFFQUFoRURCQ0VTTVVFRlVSTmhJZ1p4Z1pFeW9iSHdGTUhSNFNOQ0ZWSmljdkV6SkRSRGdoYVNVeVdpWTdMQ0IzUFNOZUpFZ3hkVWt3Z0pDaGdaSmpaRkdpZGtkRlUzOHFPend5Z3AwJTJCUHpoSlNrdE1UVTVQUmxkWVdWcGJYRjFlWDFSbFptZG9hV3ByYkcxdWIyUjFkbmQ0ZVhwN2ZIMSUyQmYzT0VoWWFIaUltS2k0eU5qbyUyQkRsSldXbDVpWm1wdWNuWjZma3FPa3BhYW5xS21xcTZ5dHJxJTJCdiUyRmFBQXdEQVFBQ0VRTVJBRDhBNyUyRm16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG16WnNWZG1ybEhJMnV0WG42V2x0bkZFU2IwUkZTcDQxV2pENXEzTENCYXNselpzMkJYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYJTJGOUR2JTJCYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyYk5teFYyRTJyajBMdXp2RjdQeGZ0VWY4QVhQTERuQzNYSTBld2RwT2tUSzRQMDhUJTJGQU1LMkVjMVRMTmdheG1FOXBGSUR5JTJCRUFuM0d4d1RnVjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14ViUyRiUyRjBlJTJGNXMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYWVVlWnBmUjBhNGtwVUF4MTloNmk3NGI0WDY1Q2JqUjc2RlY1Rm9KS0tlNUMxR0lWTGREdUdodVhzMklLT1g0Z2ZzdkdkeCUyRnNrS3RraXlENmJjdEhIYlhnUEltT0M0cU9wWGo2RTFmZjRNbTROZHhrcGM3NzBCdk5telpGTHMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlMdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWb2tLQ1QwRyUyRjNaZ2Fpb05RZW1BTlp1aGFXTHlFMExsWTElMkJiR242c1dzcEE4UUElMkZaJTJGVWNWUldiTm14VjJiTm14VjJiTm14VjJOWlF3S25vZGo5T096WXF3RFQ0aWlQWnNhJTJGVkxtNXNqN0klMkY3NkwlMkJPVFhUcGpQWlFTdDlwa0FiNXI4SnlLWHFmVXZNT3BJUU9GeEZEZm9QOHFGdlRsJTJGNFE1SU5Ea3JGUEFmOEFkVWhJJTJGd0JWJTJGaUg4Y25MZUFQY3hITXBybXpac2d5ZG16WnNWZG16WnNWZG16WnNWZG16WXlXUklvMmtrWUtpaXJNZGdBTVZYNXNqVGVhR2wxQ3pzYlNBT0x1WDB3N2sxNEtDenlBRCUyQlVaSkJpcmViTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14VjJiTm14ViUyRjlQdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWbzRDWFVGYTllMENiSlJXa3IlMkIwUldsTUhaRUo1V3RQTXR6RTUlMkJHWUpLbnlLMCUyRjRrdUVDMVplTTJJVzBva2pGVDhTN0glMkJ1TDRGWXo1Mm1NV24ydERUbGNwWDZGYkRIUjVlY0NIJTJCWmV2eXdsJTJGTU04ZEp0bjdMZEolMkJLdmdyeTljY3JPSjY5S1Z3OUU5R1M1czJiQWgyYk5teFYyYk5teFYyYk5teFZpM21pRlUxTFNieHZzU3RKWXpIJTJGSm5TaSUyRjhBRFlwb0V6TGN4cTFUNjhGR3IlMkZ2eUU4R3JnanpkQzBtaFhFc1klMkZlMnBTNWklMkYxb21EZjhSd3R0SlJIZHJjRGFOYmhaVkk2ZW5kSUclMkY0bWNuSGVKQ0R6REw4MmJOa0V1elpzMkt1elpzMkt1elpzMkt1cmtaODQzWmhzNGJWVFF6dlZxZnlydmczekhOUGIyVU1zTHRHQlBHSlNwSXFqRXFSVWI5Y2glMkJ2U1N2cDBKbGN2SkNMeU11eEpiNEpOdmklMkYxU3VFQlZ2a2FYOUwlMkJaYm04U3YxZlRiZjBZNiUyRjc4bFB4SCUyRmdGenBlUnZ5UGJXY1hseXl1YldCSVh1b3hKT1VHN3VLams1JTJGYU9TU294UE5YWnMyYkFyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGJTJGVTclMkZtelpzVlEyb3N5V003bzNGbFFrTU94R1B0WmhQQkhLQ0R5VUUwOGUlMkJNMUJlZGpjcjR4UFQlMkZnVGhWNWN2QkpicEdlcmdFZk1EY1lhMlBrcWZaczJiQXJzMmJOaXJzMmJOaXJzMmJOaXJzaGZuUkd0YjdUOVRYN0xjb0pEMnFEelN2M3ZrMHdsODFXRGFqb2R6REdLelJqMW9SMzVSJTJGRlQ2UnRoSE5YYVZjcktzVXRmdERpMzA0ZFp6N3lycVByUUNJbmNkTW5zRW5xUkslMkZjamY1NHlWalA1Z3d0SjVja2NEJTJCNW1payUyQml2SCUyRkFJM3dENVJuRXRwd3JXZ3c5ODNSR2J5MXFpcUtsWUdrQSUyRjR4JTJGdlAlMkJOY2hua2U1QklVR29QUSUyRlBFSkhKNlhHM0pGYnhBT1B4T0ExaVg3c1V3SWRtelpzVmRtelpzVmRtelpzVlVicUJicTJtdG0lMkJ6TWpSbjVNS1pETFA0ckMyVVZxOXFZajdTV3NoV24lMkJ0eE9UbklWRzR0dFd2ZE5haWlLN0Z4R0R0V0c2VGklMkZ3RHdNdVNoelJMa3klMkIxbEU5dkZNUDhBZGlLMzNnWXNjS3RCbURXaHRxJTJGSGJPeU1wNjhTZVNINVVPR3B5SjVwWWRlM21vV1BtVzVLekgwcElvMldOdDBBM1d2MHRzMkQ3M3pKNkZnenhxcVhwS3BIRzllRE14N0VZWGVkNDVWZUM0Z1BDZFl5cXVhMEk1cTVWZ092MmNBVzhzV28yUU1xaHd3b3lIY1Z5UUZoVk9MenZyTnJkZjZmRkhMRlg0a1ZlQkglMkJyMSUyRjRiSmxwJTJCdDJHcVdyWEZuSUN5S1dlSnRuVWdWM1hPUDY3cUZqYUZMSFVycHJlY3klMkJsWmFqeFBEbU4xam44RHY4QWElMkJ5JTJCSWFYcmNscmR0WjM0TnJmUjFVU29mZ2VvMkswNmMlMkY4QWdjQkNYciUyRmx2WFJyZG56azRyY29TSkZYWWZNYm5Eek9WJTJCVHI4MmVxQU9RSXBhQnE3QVYyciUyQk9kVHJpUlNFcDh6OFJvTjlJNUFXSlBWNUhZRDB5SHIlMkJHUWczTnRxMWxjTGF6eDNDaVp2aWlZT0t6UW85S2piN1l6b1dxUmV2cHQ1QU9za0VpajVsQ09tYzYwJTJCV0NLMGo5T05ZbzVJWXAlMkJFYWhRV0JlTmpSYWZFY01WVHZUYiUyQjgwZnlIWjNGdWdFOXZTT1JKQlVxUFZaVyUyQkVIdzN5VmFYZUMlMkZzb2J1bEdrWDQxSFFNTm1IJTJGQlp6QyUyQjFpVFRiYWRaVWtqdEpqemtRcVNLcU5tNWZzZE1QZnlyMSUyRlJkVDh2cmEyRTVONUM4a2wzYlNNVEtwa2N0eiUyQkw3U1A5cGVPQTdmRmtJa2drQ3dPZmt6N05sQTF5OERGMmJObXhWMmJFSkx5MWluanRwSlZXZWF2cFJFamszSGM4VjY0dmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGOVh2JTJCYk5teFZwbERxVWJjTUtINUhJUG9raldzc3RxeCUyQksybFpQZjRXcGs1eUY2bkY5Ujh4c3dIR084UVNqJTJGQUZoOEQlMkZxcmtvYzZWbVNNSFVPT2pBRWZUanNBYVpNWGhNUlB4Um5ZZjVKNllQeUpWMmJObXhWMmJObXhWUXV6T3R1NzI5UFZVY2xCRmEwN1U5OERhZnFzRjZpOUVrSTZlUHl3d3lGNnZHMmk2b0pSVVdsNnhaQ1AySk9yciUyRnN2dExoRzZzMHlpSzRYNlpmaTRRSTdWYjlsdjVoJTJGWERIcmdWNWM4QjBMekxjMlElMkJHRjI5V0R3NFNmRiUyRndwJTJCSE9nNlpNSGk0ajJZZlRrWiUyRk1Hd3BGYWF6R0R5dG05R1lqJTJGQUgyNSUyQkVuJTJGQUZYJTJGQU9KNE44dVh3bGlpY25wczMwNUxtRlpEZXdyYzJkeGJ0MGxpZU52a3lsYzQ1JTJCWDEwVUNRekhqTEFURTRQJTJCUWVOYzZMNTVlNWkwSjU3V1ZvbmlrUm1aRFNxN2pmMnlCMk9wJTJGVllvcjIlMkZ3Qk5qa3RwQUdqdjdadlUlMkJJbm95OFZhbyUyRmE0NHhDUTlhczI1UlZCcUtuZkJHUmJ5OXJCRXNsamNJWTBhUSUyQmc1RkNDUUQ2Ymo5bHNsR0Fpa041czJiQXJzMmJHeU9JMGFSdWlBc2ZvRmNWUyUyQiUyRjFxMnNKbHR5clN5dHV5cCUyQnlEc0Mzend4QnFBZkhmSSUyRm9kbXQyejZwY2puSks1ZEFleFBUJTJGZ1JraHhWMmM3ODJtU3k4MldVZ05JZFVoTnM0UFRtbFhRJTJGd0RCRE9pWkF2ekxiNm5IcE9ybEZranM3bFdkRzl5dnhWRyUyRndpdUdKM1VwM1lUSkZyN29wJTJCQzh0MWxqSGp4b2R2OEFZdGtpeUhieHg2WGZLeCUyRmNYQmlsSjMlMkJBc1ZVVjhGUmx5WUE0WjgwRGtrUG1xM0V0bEhKU3BSJTJCSlBnSEJINjZaQnRJdWZxdDlOcDhwQUxIbkVwTzVwMW9NNlhxMFAxalRyaVBvZVBJZk5keG5MdFp0ckdabHVCY0czdkYlMkJGSll1SmZ4NDBJSXhISkt6emI1ZXQ5WnRaWXAxTHd5Z2NnUHRLeSUyRlprVCUyRktXdVJLS0NPQzZ0TkgxQ2JsY1dpSUxEVVdISDZ3ZzZ3eURlang5Rnc0c2ZPTWpFQlk1YmlIMUhnTHk4Vll1bE9mSlYlMkJ5MzhxNG5kSDlMbEwyMTlLNGlpbEhyV3pMeGxoSTZTZ0UxJTJGMlNuRktvMEN6eHkyOHpNcWNTenNwSVlCUGoySSUyRjFjZCUyRnl0blZaZE5RMkQxSSUyQkVTTW9QdyUyRnpNZnRkTUcyMFRTUXl5YmxtamVuem9jNFRZNmxkNmRkeUt3TVVzYkZab0hxTndkMUtuR1hSWHM5bjUlMkZ2N2xnOThHbFdoTWp3azFBJTJGbTRrJTJGRjdqRFN3U1BVTFRUSkkzUEdCcGhHTndHNE9IVlclMkJnbk9OWCUyQnNXRnBERlBhU1NKY1RFU0czVGNSbGYydVJLJTJGYXpxJTJCa1IzYWVUN2UlMkJqblg2eW9XOGliaHQlMkI5aTlUZyUyQiUyRlE5OFFWWkhxc3R1dG93dVNQU2RTcFY5MUlQVld6aWYxaTk4dCUyQlo3bTQwRmpiU1dVck5DcUVta2V4NEVIN2FjVDlsdjJjNmxvbm1iVHZNVVRXZHdnaXVtV2t0ckxRaGdlNkg5b2Y2dVJMemQ1WnVyRFZQOFEyS2V0WUZVVzdqWGVTS2klMkJtMGhIN1VaSDdYN09DWTRnMllNMHNNcmp2ZXhCNVNIY1hzbmtQejNZJTJCY2RQcUtRNmxBQjlidGElMkY4bEk2OVkyJTJGNFhKZURYUEpsdlBlNkpxTWVxNk5NWUx1RTg0MlRvNm50VG95dXYyayUyRmF6MEo1RTglMkIySG5HeUkydDlWZ0ElMkJ0MlpQMGVwSCUyRk5FZiUyQkV5RVNlVXVmZjN0bWJGQXg4YkI5SDhVZjRzWjglMkY2UDgyVE1NTE5iMWlEUnJRM0VwQmtrUEMzajdzNSUyRndDTlYlMkIwJTJCR1ZjNG41bTh5ZnBuekpjc3IlMkY2SFlzTGUyMzJQQnYzajAlMkZ5MyUyQkglMkZZNUp4a0xvdXJYMTc1JTJGdGIyOG1hU1pybG9xc2RsUTFUZ28lMkZaVURPNzU1JTJCOHV4bHZQY01JNmk2TEFlMnpaNkJ3bFM3Tm16WUZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZkbXpac1ZmJTJGVzclMkZtelpzVmRrYjgzVzUlMkJyVzElMkJnJTJCSzFrQWMlMkY1RCUyRkNmJTJCRzQ1Sk1DNmphcmUyRnhhRWYzcU1vJTJCZFBoJTJGNGJDTmlxVjZWT09jVFYlMkJHUmVCMzclMkZhWDlXSG95RmFKTXoyM0JxaVdFN2p1Q2glMkZzeWFSc0hSWEhSZ0NQcHd5NTJnTHMyYk5rVXV6WnMyS3V3dTFyUzQ5VzA2V3piNFhJNVF2OEF5dXU2bkRITWVtS3ZPTkUxS1dHVnJHN3JIUEN4UmdlcXNwcGs3c2IwWEM4VzJsVWJqeEhpTWhubm5USHRMbVBYclpmZ2FrZDFUc1I5aVElMkZQN0xZdG9tcSUyRldJMElha3lib2Y0SDU1TG1GWmRxTmxGcU5qY1dNd3FrNkZEOHo5ayUyRlFjNTE1WHVaYlc0bDAlMkI1JTJCR1dGekU2biUyQlpUVE9sVzA2M0VRa1hZOUdYd1Bobk8lMkZOc1M2VDVxdGJvZkJIcWFuaWV4bWklMkIydiUyQnNVNHYlMkZsZkZnSGNyUFRGYmFuWk5iM2NheXd5QXBMRTNRajN6anV0d1clMkZsanpCYzZQcDZmVjlKSHBzTE5TU2dSMUhJb3JWM1Z2aXpxMmpYUWslMkJBbmRsQkE5eG5OdnpSaVdQekpCSlducjJnSlAlMkZHTnl2OEFIQWRpa0ozWUdmMG81cFpESWJvU0QxR0pKOWFBZ2g2JTJGNWFVem9Gbk45WXRZWjZnbVJGWTA2VkkzemxYayUyRlZJNWJpMmhubEJnZEJ1eEZGYWhoZnIwclNOc25IbFhVNEpJNU5KYVN0MWF2SVFtJTJCOFJhcXVEMEklMkJMamtwYmdJWkptelpzaXJzRGFnQzFqY3F2VXhPQiUyRndKd1RqWFVNckszMldCQiUyQldLcGZvZkU2WGI4ZjVkJTJGbmhqa01QbXZSJTJGS2xySkJxa3hCU1ZrakMwUElEcFRmSTE1cyUyRk1OYnUzamJSNXBsc1pWcDY5c3dSaTlOMGVTak1uSCUyQlJjVnBtNjY5Y1dXdFhHbmF0d2pnS21hMnVQc2oweCUyRk5YdyUyRmF5T2ZtTHIlMkJoWDNsJTJCUFRZcmtYTSUyQnBHdG0xdVBVVWNlWDd5Ung4S0x0eCUyRjFzNXhvTiUyRmVmcFZyNkM4bXVWVmZVdUxPOGtNckVJZVRlbTdmYVJrNUl5NUZkVHVaOUIxNjl0ckdadnFrYzVlRkQ4U21KenpVY1R0c3JjZVdIelRUM2ZSSnYwcDVVWnZ0T1lZcmdDdSUyRkpWNFAlMkZ3QU5IblByajgzdk0ybFg5enBXb0JKWUluYUo1NDBwT2kxJTJCR1JRRHhmNGNsbjVaM3FUMnN0aldySzBpZXhFZ0U2MCUyRjJYTE9VZm1IWU5aZVpiaFdQOTRBeW4lMkZWJTJCRCUyRmpWY2xMbGJFZFFuOTU1cTF3VGlVM2h1TGFkZVFDc2ZTbGpPOVZOZXYlMkZBQTBiWUh1YjFaN1Y1eVdraEh4cGNWSEpOd0dpdVA4QUtTdFZrJTJGYnlHYWZxTFF4eWFmTzVTMmxQSldVQW1HUSUyRjd1aUI4ZjhBZDBYJTJCN0YlMkZ5OEN0ZDZqcGwzTGIzdiUyQmtRVHB4bmlxVERjUW43TG9SJTJGd1ViJTJGQUxEWkN5eWVrV2w5WnlhRkxQZWxaR04ydHFERXRaSkhlbkVzNjdja3BWWHdxMWJVN0cxaUtXdnF0Y0NSNGJra2hGWXglMkZDSFhodnZYNDhDJTJCVTdIMVNiSzNrOVd5YTVodjRIY2hTQkY4RnhCTDJXZU9KMWslMkY0czlQNGN1JTJGMGolMkZjMUZwaG1GeFBMZU9oWkJ4QWlMOGp0NDAlMkZhNVllZ1Y2UHBydkxwY0U4c2ZwVE5iaDNRVm9HSzEyemx1b1EyUG5aaWg0MmZtV0lWdDV6OE1kNHE5STVQNUoxN1oyQThZcldWbCUyQkVSb2FEd29OdnVwbkx0YjAyTHpSRWRSMGhCYmE3YlZlNHRFUEZad3ByNnNIJTJGQUJiJTJGQUpPU2tnUE5McUdhRzdlM3Y0Mml1b1R3bGljVUlLOWlNNzU1S25Hb2VUN1pYNm0xQ0glMkZZU05DZiUyQkZPY3RudUlmTmtTV2VxRVd1dTI0OU9DOGNjZlc0N2VsY2QlMkJmJTJCVm5RJTJGeXlTNXQ5RGswNjdqTVZ6YVNYTUxLM2hSSmxwNHI5cmprUWw1UGJhbGNhUmQlMkJsSTdQYnd5c0k1bE5KSWlyVSUyQkglMkZtbk91ZVYlMkZPVWVvJTJCblk2aElwdVdYOXhQdHduVSUyRmh6JTJGblRPUGVZNHpZJTJCWU5UZ3BWQmNTVlE5Q3JIa1AxNEdzYjlyRmdSV1N6WTFLMSUyQktOaCUyQjBwJTJGWmNZMlFkbGV2JTJCWiUyRkxLeEsxOXBjZFlCVXpXcWRZeDFMd2olMkJUJTJCYVA4QVolMkZaeUhXOXhlNlpmUTZwcGs3UVhzQkRSVElldnNSJTJCMHAlMkZseVklMkJVUE5SMUtKTEs1bEQzS3JXM202ZXNnNjdmNzlUOXBNRCUyQlp0Q2pUbnFWaWxJVyUyQktlRlJzaFBXVkFQMlA5JTJCSiUyQnprWlJCM0RQRmxsamx4UlB6NUVkeDhtY3clMkZtM2FYdmt6VUx5VUMzMTIyakVUMm9OQThraDlOWllUJTJGSnZ6YiUyQlRPWmFiSWhuV2tnYU9RY3d4TzU3NyUyRjVmamhLSVluZG9admdhVUQwNXY1U04xSiUyRnlHNllJMFJaNHRTJTJCb3lLUVMxSFR3WUhzZmZBTHJkT1F3TSUyQkxHT0VIZmh1NlBXdko2ZjVGc2ZyWG5xVzhLJTJGREJFWkQ0Y21BVmYxWjJmT1NlU0xtZlQ5UnJIRVdsdkRTWmFWYWdOUjAlMkJ6dG5XOG1Xc3V6WnMyQkRzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXJzMmJOaXIlMkY5ZnYlMkJiTm14VjJZNXNvNHF3NldMOUhlWUxpTHBGY1VuakhRZkg5ciUyRmh1V1NiVG5CZ01YZUppdjBINGwlMkZBNFQlMkJhNGZUVzAxRlJ2REo2Y2hBJTJGWWZwWDVNTUdhWGNCbUh4YlNyc0NkaTYlMkYyZjhSeVozajdrZFU0elp6clRmTzJxUWEzZWFIcmtheDZoYXV4JTJCcjlGa2dKJTJGZFQyNzkwWlAlMkJHeWRXV29XdCUyQm5LM2VyQWZIR2RtWDVya1NFb3ZObTJ5aVFBU1RRRHFjQ3Q1c0w1ZFowNktvOVlTTU5xUkF2OEFpdTJJdjVpMHFKZWNzcktvJTJGd0FrayUyRmN0VGhvOXlvNjlodGJpMmUydkFwZ21IQjFjZ0ExJTJCZmZPWVglMkJuWGZsWFVnaEplemtOYmFieEg4akglMkJkY1BQTjgybDY1YjJqMjEzRE45V2RtbXRlZkNSa2RlSmFOU1ZiMUklMkZ0WVhXTThjVmsyamF2TTk1cFV2OXpjUHZMQiUyRkkzTHZ3d2hJVDJ4MTJLQ0JyeGp5alJTMDZqcnhHNVlEJTJCWmNyenpwa1htanloTFBwekNTYUZWdjhBVFpvenVYakhQNEdIJTJCJTJGRTVKa1VtanU5QnVqYVRzSllISEtDNEc2U3huOXIlMkZBSnF3Skg1ZzFmeWpEYXcyS3JjYUUwelNORTI3UmlRbXR1WFBTSjYlMkZ1VyUyRllreEk2aFVnOGlhOXF1bGF0SGUzczBrOERneEdLWnl3QmslMkJ5MyUyQlRrbiUyRk42M2E4dHRHMWEzckhMJTJCOWhJQiUyQklkR0slMkY4QUJBNUROYlMwdEwlMkI0a3NKT2VuekVUV3JqWWlPVDRnakQ5bDRXcWpMJTJGQUpPVFRVOVh0TmM4cjZkRFA4RThyYzRpU1A3MVJ3a1RmY1AlMkZBTHNYJTJCZmxncTA5ekZ2S2VvVE13VjJOZUNzQjBCYU5xZjhhNU45WnU1OUs4M1cycFdiJTJCbjljakJvMjRaWFVOeEklMkYxbHlDV3NMNmZOYjNMTHhpZDI0dFNnSU5BOVB1eWI2N3BkJTJGcjJrYVBjNmJ4TjViOG93V1lLQVlXJTJCR3BQOEFrNFJ5UVU4dWZPRjdKTEQ5WFJMYUFqOTZaUGlZdjRBOUFuJTJGRFlPZno5b0VidEEwa2pYU3FHJTJCcnFoNU50VSUyQmtXNGlRTCUyRms1eUslMkZpdU5hZ2pFY3BUVTdSajZZcWFTQWJ0RzMlMkZGaW40b20lMkZhJTJCeGhYY0dlV3hsRGdwUGJmdlVGYVBES3BGWGlJJTJGWWslMkZrJTJGbXdGWHIwbjVoZlhCSkZwVnR4bUM4NGpPYTgxJTJGYUtxdjdTZnk1R0w3ekpxMnJ3WEZocUY0MEFsV2lTUWZBRVBWVyUyQkg3U2Z6JTJGd0NSa1RsMWRMVzN0N3hpODEwOEMzZzlFQkFyQ25JOGp0VnZ0TlJjUjF6elRkSmNRdll3Ulc3eTI4ZHd6RmZVYmxJdkkwNWZBbyUyRjJPR3hTdDN6U1c5TFBYSVRNbENqaXV6b2ZzeVJ0Mllmc1BrZDBpYWJUdFFrc3AxWnJhNFU4NFg2U0olMkJ3NCUyRndBb0Q3RWk1ZHpxVjdMRkN0N0tablZBWSUyQlJxeWc5YWolMkJYJTJCVEpkb3V1YUhybHRiMlBtQ05mcmtLbU8ydktjVCUyRmtnc1AydjVjanRhcGZvMEp0JTJGTWxsRkdIbHRadlZlSzRwdHdXTmk2eVUlMkJ6SXZSbHdtMW1VYXJwTnRKSEVXdXRPa3VJYmgwRlNiZmtHaVoyJTJGYjRNeEglMkJwazZ1Wk5NOHNhZGR5d1N0Tks2MDV0c0tuWWNGJTJGbWJPWnkzczJuV2FMRSUyRkc0ZTQlMkJzSzQzSEVMeG93T3pLJTJGTDRseDVmRldiJTJGbHByUDFUV0xRTWFMTUZSaCUyRmxSdHhyJTJGd0xZbiUyQmZOakxwJTJCcDJXcHdnaFdMeHVmMlNHb1JYJTJGQUlESTlwZW8ya010amZXUU1VaTNKTTl1MjRqNXJUNEQlMkIxRzVxeWZ5Zll6cCUyRndDY2RpbXIlMkJVcmElMkZHJTJGd3BJU09vSXBYSkRjSVBONEhEY1IzU2NsMkk2cWVvT0dOdmNReXclMkZvJTJCJTJGSldHcE52UDFhQnolMkIwUEdGdjhBZGtmJTJCelhJeFNheW0yTkNPaDdNTU5ZTGhMbE9TN0g5cGZBNUZVMzB2VU5ROHVhcWpJcXNhcUhpTzhVc1o2RWVLc3JmQSUyQlMzeVVyNnA1aXVkVGwyUzFSdlJUY2hUS2VDZ1YlMkZsVGxrT3N2VXZlT244VmtkYXRhdXhveU4lMkZJRCUyQjByJTJGd0FtVGZ5WUhzcm5UZFBhc2MxJTJGTmN6WE1aQXJ3aFQwNGczJTJGQUQwNVlqbWw2RmRpdGxjbXUlMkZwdlglMkZnVG5LNWJTNHNwMW1EdEZJRDZrTGlvUFhaZ2M2MU5HVEJOSDRvMVBwVWpJcE5ieVgwVWx2Y3clMkZWOVRzdDdpMklxSFduOTlFUDJrWmY3eEYlMkYxOG5NWDFwQU5NUjFUVFlmTWtSdVlZbHQlMkZNRVk1RWZZVzdVZnRMJTJGd0FYakRmOHUlMkZNRnpNOG1uWDZNSkxXUkZrTWg0eWlxdEdVWVUlMkZaUDgySXpXJTJGSDREVlFHJTJGZHVQdFJQMUZHJTJGbGI5bHNHNlpKREpmUGN2R0k5V0NvSlp3UGhtUkdIRjJYJTJGZmk0QVAycGVhZm1CRThIbXE4TGdBVENPVmFlQlVMJTJCdGNqYXVVUGlwNnFlJTJCZEo4MngyOTNQYjJHdHlMOVptV1JvTDVRQVVaWkdRSzQ3cDluT2QzOWhkYVpjdGFYU2NYWGRTTjFZSG95bnVwd0ZDTDB6VVgweTRTVkdmNnVXRHF5YlBHNDZPbiUyQld2JTJGQUE2NTJuUnRZJTJGVGRxSmJmakxkcW5LNGdqcFNWZW4xaUJmNUclMkZ3QjNSZjdxZk9DeHljYXF3cWpmYUg4Y2slMkZrJTJCNjFLMTFBQzFrWllJVDZnbUIlMkJ4eTJvUCUyQk1pJTJGQzZmN0xFR2xaQ2JCciUyQiUyQnUlMkZxcXBCQ2pQNmNidHhId240bGpyWCUyRmdja09qMkVNY0M2bEs2eVRSS1lta0lvWWw2Z0U5eFQ3TDVIaGNUSnFNMWpKQ0VqalFTUXNLN3FUM3JnaSUyRnVKN1BUREtRMzFTNWYwM1pQaTNTcmZHUDVSaUtHNmJlaiUyQlFQekIwQ0clMkJ1Tkh2QjlWZVp4OVd2WktCWDdjQ2YyUDhqT3ZnaGdHVTFCM0JIZlBIYVFyZnVFdDNESGtBSmFrS2hQOEFPMzdBJTJCZWRYOGklMkJZUE9lbjZkTnAycUs1dDRKRmpzNUhDbHlvTkpmVGRpZVVhTDhTJTJGd0RDWkVjUk5FYyUyQnJmT09LV01UZ2VHVWFFb0hmaSUyRnBSUDhBdW50MkFiM1VvcldxQWM1UUs4ZWdIek9QaHVvVFlyZGVzSllnbkpwdGdEVHFkdSUyRnRrVDFDOVhuTFBJd29makxkdUo2ZmhrZ0xjWXNpMHZWUmZTU1JTVVdSZDFVZUdHZ3lOJTJCVnJDU2ttclhLbFhuSEMzUnR1TVhYbFQlMkJhVEpLTVRWN0pkbXpac0N1elpzMkt1elpzMkt1elpzMkt2JTJGOUR2JTJCYk5teFYyYk5teFZCNnJhZlh0T3VMWHZJaDRId1liciUyQk9SYlJMJTJCc01UTWFTUXNPU25yc2VMWk5EbklkZlhYdFA4elh0blpHQzJ0SldFc1V6OHBINHlBRThZMTRyczNKZmliSlJQTUt5ZjhBTVh5ZTNtS3loMUxUSCUyQnJhMXB4OVMwdWxGU1Y2bU53UHRSbkliNWU4d1hsdyUyRndDajlWUjlOMXUxMlBHb0Q5dlVnZnBKRyUyRjdVZWROOHVhcGNYc0gxZTdDJTJCckFpJTJGdlY2T1BzMUslMkZzdHRnTHpQNVlzciUyQjNOekhGeG1qUE1sTmolMkZyTFRkV0h0aU50bFU5STgyc3hhMTFsQXNzZjJibU1mQTlQRmYyRyUyRjRYSXQ1MDF5ODFTeWtFRWpSUVJNR0VhTVY1TDAlMkJLbjJzcTRrZTNqOU80YXN1eUxOU25NZHVYJTJCViUyRnhMQ2ZWWiUyRlMwdThjRGtWaFloZkdneG9kR1FERFpQTWN1bHVzVHpwd3J5TVQ3bW5laCUyQjB1VFZOTDFlJTJCc29iMXRMbW10SmxFa2JGVzVGR0ZSOE5mVXppMmlRJTJGWE5YdExqVUFYV2U2aEUzTCUyQlF5S0hHJTJGYmpucXp6UDVvazBIMGJheGdXVnlvZGk1SVJVNktCeDc0QVNyek96c2ZMMXRjSDY5cHBNdGR4TTBoNCUyRjg4M09TMkdMUzcyMzlLMXBHcEd3aiUyQkVyJTJGQUxIcGhWY2VjQmN5cmM2dkJGZGFiTCUyQjdsVjBVUGJ0MTJLRG54JTJGbFlZR3ZyV0t3UDFuVHAza2lyc1QwQnBXZ2NkZjhBWkRKZyUyRkZqU2FuU2I4eEMydXJzWHRwRzVrdDdka1ZSR2FVNGclMkZFVHklMkZ3QmJJemM2MHhTZXlsc2dwaERKZWFmTnRJWSUyQm5xUkVmQ3lnWWNXUG1WMTR4M3FrcVFEekFvNFglMkJZciUyQjBNRTZoJTJCaWRaWkltak05MEZMUXpRajQwQkZObjIlMkIxWDdEWWtkMnlpJTJCckhOSWg4dVhiTHA3eUxKZFRvWmJaSkRYMUVVME5PWHhDZUw5dGYlMkJKNFBoYlRMeWE1OHNYcXF0M0VvS2xWOU1Tb1JVTW44c3NmN1hIJTJGWHlEJTJCY2ZLRnpvV25SYXRGcVVVVSUyQm5TR1NHQXNCY0ZYWmFGZUhKVlpEdTJIT24zU2VlOUt0MSUyQnNDeDh4MnklMkJwYVhhYkIyVHhIOHBQMjElMkZad0FudTNWUXVWMUNDMmlXOWN4JTJGd0NrUzI4a010QTVkS0xITDElMkIwMFRKeVpQaGslMkIxblMlMkZLTjU5WjBHU05ubzZ5STZlMVY0diUyRnd5NXo5cHY4WVdqNkhyY2Y2UDgzNkVXbWlpSFNmaXYyb3glMkIya3dIN1AyZnRMazI4dXhyYmVYWUxoWVhWN2dNenhrRTBJcVBpcU5xJTJGeTRnYiUyQlNrN1BOZFgxbSUyQkhtcWF5dEolMkZUdFRkeCUyRkJHb1N1NnN3WnFjajhZYkNuUm1NOTdkckt4S1hjc2x1N3RYYjElMkJTQnElMkZ3Q1N6Wks5YzA2eHVOVXV0U3RrQmxzNUlGa0FJQU1vSHFVVWZ6TlJrYkNQVzVYczcwclpjVnRMMCUyQnRDb0FGVmMxb0slMkZ3QXJuaTJSSVNoZEQwclU5WjBnMlVOVzFEUjVKTEclMkJpclJsUXVYaG1wMVpQNzJNJTJGd0NwaDc1ZzBLMnNyYTIxRzhjaDViYUdKVXB0NnlBUnV2TDZPV0VRazFlSnJxOXM1NVlMeEJ6dUdoSkVqcjNMS3Z4U3F2N1dJU2FucTJvUVJYR3J5dmQyTXRWaHVTUThhTlFjaDhPeU5qc3FFbGhLMWhiY3IlMkZjdjNLJTJGeVYlMkZ5Y1JTUUJtVWlpZnNmUU02RnBmbGpTYnJSMG1DeTNFakRsREl6TjlzR25waFUlMkZaJTJGbGJJcnFubCUyRjZqTTNDYjFWUnFPb1U4MDc4WG9PSFBJU0lpUUNkNWNrZ0UzdHlTNFN0SzZ4U3klMkZESiUyQjdIcXNlTyUyRllWdzBXMnRoYXRwMTBoZTJiN1lIMjFjZlpsalA4NmY4QUQlMkZZeE80dGJPNHNvNEk3WlV2RzVMcGwzUHNzcHJVd3MzOTJKRCUyRnV0JTJGd0NiQU9oNnNMdVU2VnFZTUY0aEtSdTJ4NURyRklEMFlZN3JzaDR0TW4wNiUyRmtzcGp6am5pYVMxblFmRElFJTJCSldYd2RhZkV2N09kMHVnbm1MOHRtWWlwV0VPQjFvR1dwJTJGd0NINVp5NGhvVDlXdVU1QlR6ajdGSHAlMkZlSWUzJTJCWCUyRkFEcm5SJTJGeXN2UmZhSGVhSkl3WjRSSkdvOFFEelElMkY4QUF5NU9QVkJmUE54YnBNcGlmWXFhQnU0SXdGWVdseDlmRUlKVTdsbUg3UyUyRjgzWko5ZTB4N0s5dW5SZzhhek1rb0hXSnlTVlIlMkY5WUg0VyUyQnpqJTJGS3R2RmRheEJETFFLekFWTzI0M0clMkY4QXJZUEpVWGIyTnZEWnRkeVd4ZTNCNG1lQ1ElMkJ0RzM3SmtqYjlsYWZhWEhSWGw5cTJyNmV0bldKN1l4eDI4aCUyQjFVTnlNanQlMkZsSDRteVg2bHAxcG9QbTU3Q0lGTEc4amlrQ3NLaXNxcVhXbmNjMiUyQnpoTFpXME9tMzVoQ3VMaUNlU2dJSEZZNjdLVDlybDRZYVY2M0l3TVZTYWtnMXB0MjdlR1J1enZyVFdJTGRZYm5sY0lXWFNkUWM4VzVwWGxwOTElMkZMSVA5MU0lMkY5NG1HOXRjZlczQVExNHhnc1BINGM0WnAlMkJ0ejZIcU4ycko2MW5OSXkzbG9UVGtBNTR5SWY5MXpSJTJGYWlseVJOVWlucFYwaVhxeXl4dyUyQmpkVzVNZCUyRmFOMWlQZHFmNzRmOEE1SnRrYTFaWjRMV1l4c3lTS3BhQ1JUOFFJJTJCSXhrajJIdzVLTGU2JTJGVHNVRiUyRnAxd3NtclJSazJsMFFBTDZGZnQyOTBnJTJGdTd1UDdMbzM5NWhGcXVxYUw5WFptbVdDUnd5U1dUZ3M4TWdHNk9vJTJGWTVmWmJBVWhDJTJCWjlKc2ZNbDFTS1lXJTJCcXlRUlQyRE1mM1V2SmVUd3Q0TTUlMkJKY2hLeXJPcjZENWdRd1RRRXBGSyUyRndEZVF2OEF5biUyQlpEayUyQjFHeWoxZXcwU2FDNGdTNW50bUN0WDBFTFF0UUFNJTJGRWN2NUZ3djFiUXhyJTJCbmhyNG9tczJ5bVA2eHVDU3RTSWJvZjZ2OEFkellPYUdBUSUyQlhkVG0xTmRMamo1U044UWtHNkZPdnFCdSUyQlRqVHJTMnNiWkxDTWNWVW1rcEZHTG43UmYlMkZBRnYlMkJGeFRUbWUxMDJEVHVJTEl3WnBLa3NXJTJCenhXdFc0MSUyRlp5VTJYbFc0MUhoY2FoeXRPUUpaVkhLYVh3JTJGZCUyRjdyWSUyRnp2aUFxUTIxbGRYdHl0ckRHMGs1MjRxS21uajhzTzczNnJvTm1OSWx0ZlZ2N2hGZWFNbmtVcVR3cHhOQTJTMk1hVDVldFM5dzZXZHRFdngxYjQyQTdTeW1oJTJGMkM1elR6YiUyQlp1bjNzd09qYWNHVkt3cnFNZ29hamVpSlNyJTJGT1REVmRWWlBZYTNwT2olMkJXN3UzMXVLS3p1WkdQMWRlUFAxSXoxVW92eHRKJTJGbFlVJTJGbCUyRjVoT3R5UyUyQldybGlzMUdtMHB5ZmlSNCUyRmk5S3Y3U3VtY3J2TlludTVEY1hIN3lUb2FtcmZTZjZZTDhyYXRMWiUyQlp0SnZvVDZid1hNYkVqdUN3Vmg4dUphdVBGdUZlJTJCeCUyQllKNE5NYXdRaU9GenlaT2xEWDRoJTJGd1F5UWVWdEFuMUJZOVIxUU45V1UxdG9HJTJGYTNxR1llR0UzbG5STFBWZk0xOUxkQXlXa1R0Y1c4YTd4T0dhcTFrR3o3ayUyRkFNNm1vQUFDaWdBMkF4Sjdsb2puNzJ3QU5nS0FiREx6WnNpcnMyYk5pcnMyYk5pcnMyYk5pcnMyYk5pciUyRjlIdiUyQmJObXhWMmJObXhWMlF6ejNwM1A2cnFLYkZLd3l0JTJGa240bEpQc2VXVFBPVmZuWDVnbXN0TnRkQnRuTWJhanlrdVhIWDBZeVBoJTJGMmIlMkZ3REVjYnJmbTI0TVJ6Wkk0NDdHUjU5dzZwTWZOeVdsN0VkRDFLTTNDcDZkd29LbGRqJTJCMXpIRSUyRlJrbzByejFyVXR6OVN2TGUybG0ySHA4akM3QmhXcVY1eHZVYiUyRkRubjAxalBFaW44cEhnY2tlbVhtc1RhSGN4QU53MDVvNTdPN0lJS3hsaUpZbGwlMkZhUlQlMkI4NCUyRnNOa0laaElrU2pSRGw2enMlMkZ3SWpKQ1hGSGtiNWdwMyUyQmEyciUyQmJkUHVFdllMVmJMUnBpRkwyN2MyRXZXa2owJTJGZDh2MlZwa0dzZk4ycDNLcmEzVjJYaWNnRXNRZVFKM3FTTnM3ZCUyQmtkTzFyU2JLdzFMaE4lMkJsYlJYVkpLRlp5cThaVjMlMkYzWUdITE9FZWN2S0Z4NVR2VExEeW0waWR2M0V2ZEclMkZ3Qjl5ZjVhJTJGc3QlMkIzbHBIVU92c3VhNGlOd2JXQ3J1SEslMkZCMHFOOWowem95JTJCYXJXNDhyMk9xM2wxTGUyc1NpenVHa3FrNnpnVVZYTWRhOEYlMkZ3Q0RUT08yTTAxcklzMFhDUlE0a0hxQ3FHblpsNzROZ2tUbE1xU09JWnBQVk5yWGpHRzhRdmZqMndYelN5cXoxZU8lMkZ0TlNqUU04c1Z1YmhGYmJrSXBQaUklMkJVUjVZY2EzcTE3SWRQbXRaMmpzN3l6dHJpT05OaHlBS1NjaVB0TUpVZklaYVhEV0wlMkJyYTBqY3EwWllBVjR5QXE2bXY4eW5KZjVZZXgxUFJqcFVzZk8lMkYwcG51TEpXTlBVZ2tOWjRsJTJGbTlOaDZ2SCUyQlZwTVJhMnV2QmNYZWoyR3AyclNDNXRKSmJPWmtxVzR2JTJCJTJGZ1klMkJ4JTJGZUpodEJCNXNPaTMxM2JvTGE5aWhNbG8zRUI1Q2xHa1VMeSUyQjE2WEprNHJobFphckJGQWJabGp0clM1VGclMkZvSUY0ZnlPVDFKamJDMUwlMkJiU2Jvd3lNd3U0V3J6SnJ5WDloMVBRcHh3JTJGRldGWE51dDlQQjZzclM2ZnJscUk0SlpISiUyQnIzMGJDc2JPZjVwaHgzJTJGQU4xVCUyRndDUmdQUWJ0cmVWckVGclc4Z2ZuRFUwZEpVUEYwOXVuSEQlMkZBRmV5Z2pqdmJpMmhhVFFicHhjWGxwSHZMcDl4OW42eENsZmp0alhpMVAyUDNiJTJGR3NlRTk5b2w5cXR5aklLYW1ZbGt0YjZNbjBMNVFLSjhacDZkM3glMkJINHZ0OE9EJTJGdmNpVFhQWmFaJTJCa2RwNSUyQmd0MTlZYWQ1cDAlMkZlMHZVMlk4VDBOUGlhTSUyRnRKJTJGdXZPajZsY0d5c0ZhUmxZeEpXVWpma1VYazN6NU1NNXAlMkJWMmwzVTJwUGRhbEZISzFzT0x5cVF4U1phRk9kRFdPVDdXJTJGN2VUVHpLOFVkbGN4UkVoWEJUZiUyQmR6V2clMkI3SnhOamk3MEhuVHolMkI1MUdYeXJyRnhhYXBENjluZmNScVNmdHF4SEwxb2olMkZPalBqdFEwR05ZQ2ZyQ1hXaTNRTXRsZWxoeWprWWJGZmR2c3l4NE04N1d5NnpxZW1UcTRYOUt3UW5tZWdrSyUyQm1mJTJCU2k1RzlNMVBWZkxVdDNvZDNDSklHREVRUzdpS1VENFpvdjglMkZqeUVycXJydVBOa0s1OCUyRkpON1N4MCUyQjBzRGUzazBrOXhBNkpCSkFDR3F3UEhpS3A4UzhmdHMyRjBtckRTM251YlBUaEg2WkxhNVljUXNuQnZzM2tTc0NuSmVYSnVLJTJGQiUyRndBWW13USUyRnJYZGpFc1FSaXpodmpLQ3JVcDhJZjR1VyUyRndDeXVLM0ZzODkzcDFuZXpmVmRlRENPeG1IRmk4WkglMkI4OXdTZUJqUDJZdVglMkJWRmlZZ2dBNzBQbXQ5UXpmeWpkeFhlaVBlYVkzck5ZdDlaamRLVWtnUDJneWo3TDhmdEwlMkZQZ1R6MnR1TGRKSVQ2Y04xSkZjeHpKMlU3U2IlMkZzJTJGYTVCc0tmTEVNdmxQWGJ5MnNKSTQwdUYlMkYwaXpWdVVjYjA1bjB6M2drVGx3JTJGMzIzN3ZIZWRkWE41cEVNZG5ibU95czRCRmN5MHFEY0Y2R0phJTJGd0RGYWNteVg4UHUyUjFRT2k2WXVwYWJkMkY3OGRqNnhqTFZGVWxweVNhSHdrVWY3RjAlMkJESXJydmw2ZHI0Mk4wZU90UklIczdsZGt2NEI5aWpmOHRLZ2ZCJTJGUCUyRkFIWDI4bVBsdXliMFZzN09kVEw2U1NSZW9LOCUyRlRacU4lMkZycU9QTCUyRkp3VHFkaEZyOW0xbHFVaGpuaGNtMnV2OEFkbHROJTJGTUtmN3BiOXRQOEFacmpWaFdIYUhyRVdxeGpUYjlndDlHS1F5dHNYcHR4TmYyc2wzNWQzSjBqem5KYkNvanVRbFIyNmNUJTJCdGM1NXF0aGR5WGN5eUo5WDh3V2Z4M0VTYkM2VWJyY3dmelM4ZmpmaiUyRkFIeWZ2UHQ4OE4lMkZLdXEzRjNxMWhxQklFeWM0cFdadUNrb0F3Y2s5TUE1MFZQSlYlMkZNcTJrMFR6bmZDSlFVbVBKb20lMkJ6SkclMkZ4Y1c5dCUyRndEWTRRNmNJTGE2WlkyZUtSd3NsdjZnb2FEZmp5JTJGYUs0ZiUyRkFKbGVhZE04MGE4dDFwY1o5R0NKWW11RzJNckQ3VEFmc3F2MlYlMkZtd3IwV3l1TlhVdyUyRlZ4Y2kxJTJCS0x0JTJGdzIzd3JnNnFHVmFucjF2cksydDNjc0lyeTFhRVNCanhKRVlZT1FmZjRjanZtM3pMYnBaWExXVEdDNXZyJTJGd0Nzd1JqZmpCR29DOHlmaSUyQklqQ1BYMnZOTXUlMkZxWkRSTkdLU0FnVXF4cWdxS3J1RiUyQkg0c2pzeVBQSVpaU1hKN2tuZkcxZTklMkZseHJkdDVrc2JxZFNGdTdlTUxjVzVPNCUyQkUwY1Y2eHZuRjc1dVZ6Y2IxNHl5Qlc3JTJGYU8yS2VTOVJ1dEM4eVdkN0RNWUxmbjZkM0wlMkJ4NkQ3U0xKN1loZGtOZDNVa1JEUlNYRXJ4TURVRkdjbFQ5SXduZEN0cFdyejZaTjhNc2tjRHNHZG9qeGtqY2ZabWlwJTJCMnY4QUwlMkIzaVdveVNmWGJpSFVtRnkxNGZyS1hxSDRuTDE0ekslMkZWdVg3Y2JZRWVKV0RQUVZwVTBQajB4NnlxTEwwcEpVVzR0WEUxbzVPOVNhU1JiZVAyOENvYjFaMVQ2dlBLenhqZU5TU1FLOWFWJTJCem5YTGZVcmR0RHQ5VDFVJTJCamVSeHBhM2lNdkY1VjQxamNnJTJGdHJ4JTJCTE9kNlZiYVRxSmxTN2xNbDVJcmkzaEh3UmlRajkyMHNuaHpPRHBwV3NpaTZ6Y0dlU1pnM3BvM05TeSUyRkQlMkZlbjRLOVY1NDJyMEx5aGVhWGNtNXVhQ0NXTmh4a2wlMkZ2Q2xPcWN2czRycm41ZzJlbkk5dHBLaTR1cWxXY2swclN2eFA4QXRmN0hJVGF6cGNjcmlOYUxHRCUyRm96R25CVklKa1pQMjYxJTJCRnVXRTRqdUxxU1pvMnBiSk1qeWl0QVFlVlB3cmp4YlVFMDFyZXVYR3ZDS1BVWkoyQ3MwaXFnVWdGdHVudyUyRkNLZkRoV0xYU3pheVc3M2p4dUdFbFdnSlViVW9TRGhrTGNYRWpKRFNKcWtvU2QlMkJIN09HbGg1YTFIekRPTklpdCUyRld2WkVNa0pSbFF0R2xLc0N4Vlg0JTJGeSUyRmF3V3RJTFRMVFRtZU1tYlRybTFqWGUwbm1NTE93SDJuWmxyV3YlMkJWaGxCYjZMcWwwOXpwZW1yYngyY0plNVdOcWlSaTNFS3JmeWolMkJaUjhXSjZ4JTJCVlBuWFFySzQxaTlzbGpzclVCNXBCTEd6QVZDZ2lOV0xOdWZzNEk4aDZocDczOHNOeFJCZXhlaTVCb0JKV3NjZyUyRjJYdzRWWmpvTWxsRmJ4NjM1WTUyazltdlBVZEthUmpISUYlMkIwOFBJbmhKUVY2JTJGYSUyQkhPcTZkNSUyRjBHN3RvWnpLJTJGQndLekJDVnJUbzNHcFElMkY2MmNZVzIxRFElMkZNVVZyRkglMkI1dnlJblBTSXF6ZkUxZjJhZmF3a210cDQya2x0MGY2dXp1SW5Xb0RxckZRUlFqa01KVjlRMm1zNlZmaXRwZVJTJTJCd1lWJTJGd0NCTkRnMm96enI1WTF2VEk3VjlMMVBuYlREazhFNFFzN00xS0tIQkRwOUdUZlFmT2Rvc1N4dzZ0eGtwOFVOMER4QkczN1dOZWEwOVV6WkJOWSUyRk0zU2ZMY1ZyTHJESXlYWkt3bTJibVc0MERzRjMlMkJGYSUyRkY4ZVRXMXVvYnkyaXU3ZHVjTXlDU05oM1ZoVVlFSzJiTlhOaXJzMmJOaXJzMmJOaXIlMkYlMkZTNyUyRm16WnNWZG16WnNWZG5FJTJGd0E5cktZWG1qNmpUOXcwY3R1VDRPcEVnQiUyRjFsT2RzeU8lMkJkJTJGTFVmbXZ5JTJGY2FYc3R4dE5aeUhvc3lib2ZrMzJHJTJGMXNCNU9ScE1veFo0VFBJR2o3cGJQbCUyQk5QckVSaSUyRmFHNkgzOE1rUGxYemglMkJqaEhvJTJCcm11bkNxd1hGS21EbWZpU1JmMjdkJTJGd0J2OXBNSkJEY1dON0phWGNSaHVZSEtUUlBzVmRUMFAlMkZOV0I5UmlXTzZhZyUyRmR5Z1NMN2N1djNIS3Brd0ltUGNYb00yS0dhSGh5M0IzQkhmM2g2QjVxc2xYUW9vTk9Wb2YwYTdYZGk2ZkR4QlBLUVE3OHZUMzV4Tmw2RnIxbDVzMHlYU05aUkh1akh4bFJodE12JTJCJTJGRThKQjlyJTJGQUlmSUxvMnBUNlhmTGQ4bW1pS2VoUEF6RThvVCUyQnl2S3RPUFdQJTJCWEt2cmFmU3BsMVhUMkw2ZXo4NExxTHJFMWE4V0g3UEg3TkRsa01vbHVQaUhSYXJSejA1RiUyQnFKNVNIZjFDVCUyQlolMkZMbHo1V3Z2VFVtWFQ1alcyblAlMkZFSCUyRndDTEIlMkZ3MkZhdUQ4U242YzY3YTNWaDV4MHA3RyUyQlJmckFXc2tZNkVIcExGWHAlMkZ4cG5MZGMwUzg4dDNwdHJpcjI3bXNFM1psSDZuWDlwY21SMUhKeEZTM3VBNG9mdERCbHZjejJseEhjMnNqUXp4TUdqbFRZZ2pDVkc2TWglMkJXRDRaUkl2djNHQzFaN3BkeEhyYU5KQ1ZpdWtxMTNhc3dWQU85eENXJTJGM1VmOEFka2YlMkI2JTJGOEFWdzF0NU5Qa0thYmUzU3lxS0cydUlxdVlEWDdKYzdlaTM3YSUyRlolMkZhem05dGRUMmR4SGRXemNKWXp5UTlSNFVJN3F3JTJCRmhrd2h2RHFFQ1RhWmJFeHlIaFBicUttQ1lpdkJmJTJCS1pQdFIlMkY4RGdJa1NEeFZIcUslMkZTeUJGYmpmdlI4azF4WTZnVnRMYjZ2SmJWV1piaHZWTG8zOHlBZW1ZWkYlMkY0WENqVzBNY1g5ODYlMkJYNzJVZW02VjU2YmVrVkFZTHUwRCUyRjhBSlNMJTJGQUl0anc3VzB1dFZnajAlMkI3azlEVUxjJTJCbmFTTWFGa3J2YXolMkY4eVhQJTJCcGdxMDBpenRia2FWY1A4QVdCZXI2TnpFd29yTFdqUnNvSjR5UnY4QUVqcjlqR09NRGJuNXkzVXlKOHZjeWZ5SHBsMXB1aHkzMXpFRTFlOWNKZkt4WGpLOEpNYVRxZkdaQ3J0JTJGTjlyQ1g4d2RhJTJCcXlhYkFHQU04NWFZQTlGVWNWJTJGd0NHeVpYRWx2YjIwVmdIYjFMZU5ERUttcEtEaEdTJTJGZk9LJTJCY3JodFUxRzh2TFolMkJZc3o2TTBRJTJCMG5CaDZjd0glMkIlMkI1YWY3RjhzbHNBQXhHNXRrZXNUbTY4c2FkZG8zR2JUWjViYjFCMUclMkZyUmZyeEdUVzdMelBwY3JhaEFMZnpEcGlyOWJpSTR0SkVTQVpvd2Z0SjhTdnglMkZZJTJGMWNENlZNYjNSTlRzU2hKbWhqdTRnVlAyb3Z0SCUyRmdHJTJCTEJWbmI2YjVnMHV4MUpHV0RYTkRqNFNFaW9uZ1FjR2prJTJGMzRoWDdMZnNZQnVrdCUyQldiYTRnV0hXbWolMkJzV2RwSzBEd3F5JTJCb1drb25KRSUyRnZIWk9mTmNLZGFzbms4MDI4OFRONkVFcXhPWE5XU09KaVM3bjJwOGVCNGJ5U3cxaWx2OEF1NE9RazQ3a0tvJTJCTHYlMkZMWDdXSzZqcjR1OVVlZTFqSXRuZGlJaWFzeXY5c1YlMkZsM3dXQUZaQmJ2WWFqcXNWJTJGRFNQMXlJVFBVZ1NLSDlTU2luWWNJUnclMkJIN1RTSmhyJTJCWU9yMnNPa1dtbmhIU0s2WWlSb2xGRjVBJTJCbjZuZ0ppZjhBV3lQMk1MNmRiaVJJJTJGcnFzQUkzU1JBc01ZJTJCeEhLcmxHaGZsJTJGZWZCJTJCOCUyRjNYZ1hYWXBwSkcxbTJ1bmtiajZPcDJwVVNLVkFxa3NTTnNpZjVMJTJGRkg5dkhvVWxyeXRkdERDZ2RtVjdkNUkyYm9VJTJCSU5HVCUyRkxocHIzbkxUS0o5VVQxOVRCNHpOSHRDZTNKajNiMlhJc3NwMVk4YlVmRk9Rc2l4N1NDU2xBWHBUbWo0YXY1T25zZE0lMkJ1ekIzWm05T1dhTkdEMiUyRk1nUlRvbFAzc1hQNFp2OTJmeVlpNm9JVERWckcyOHg2TkJlQnZxV29XUzFpdlNlSWlrVThqRkklMkJ6TEE2JTJGR24lMkIlMkIzeUZhcTFwY1hpeDI4WlVHaTNVMndhZHglMkZ1emlBRVd2OEFxJTJGSDl2RExWN1R6WGVXcnFiYVdPNFZoSGVOSHRGZENQN0VoWDVENHY5JTJCZmJ3cEMzbGlHZ3ZJb1ZkU3F0NnBMUEdyMHBUaiUyQno4WHc0Q1VrRUdpbDdSd1J1OVp6d2pQeDhVWmlLZVBTaHliJTJCUmZNZGhITTJrTEVWJTJCc0RsRExRRm5jVUN4Y1JYN1dFRjFEQ3M2M3pDczZyNmMxTmtlbmNyN3JnWFNwRnNiNXpDRm9yZXBDOVBpVUVmWnI0REFEUlZEJTJCZGRVa1BtUFU0bFVnVk50Tkc0cUR3MkJvZjJrUDJHeUsxTEVDcFklMkJBcVRuVUZoc3RhMUNlJTJCMUczaW51WkNyeVNzZ3F3cUZOUmt3dTlSOG0lMkJXSXdzY0VIcmhhckRCR2pTSDV0VDRmOWtjSW9vcDRkYTZWcXQyR1cwdGJpUUhiaWtia0g1N1V3SE5GTGJTdmIzQ05GTEV4U1NKeHhLc3V6S3dQUWpPdTMlMkZtcSUyQjFtRm8xQzJObUZNamhUUUxHdSUyRktSdHVtUWZVJTJGTVdoM3VvVFh4MHIxcEplUEtTV1NuSmxWVTVsUU51ZkhuaFF4bU9ZeGtsU1BpRkNEdlVaUUtVSXBVbjdKcjAlMkI3RDhlWXJCUDduUmJVZjYxVyUyRmhtUG10a0JGdnB0bkVlekNNa2o3OENwUlpPWTV3JTJGQm1XaEJDanNldVN5eW4wcElwSXIyQ1NyMmd0YllUUXQ2YXlsdWZQcDhQQldiQ1pQTnVyUk9za1lnVmtZT3Y3dFNBVk5SdGcyNzgwJTJCWVBOZDVDZFd1UkpIRVdrV09ORmpSYWloJTJCRkFQbGpzcUxlUnJWaCUyQmpRdDNHQlJvWEJCS0FmRndhZyUyQkxKMTVCMTd5ZmVhbEUydGFUSGNYTUc2M0VxJTJGdmJZTCUyRnZ5SCUyQjZlRkslMkYzaUp5VDl2QVhrUHlnUE5FdW94eDNLUTNWckFIdFlXUDhBZU94cHYlMkZ4V3Fpak12MldaTUxkUzh2Qkx4NHBnOWpxVnFURkpJdnd1cDZmdlA1bFAlMkZETGlsbHY1aSUyQlN0UHRMODY3cEVFY2VtNmh4a2l2TFdqSWslMkZldkhiMDVmdFpGOU9rZDVFdDVtYXl2b1dFdHJkUm1uQ1VmWW1oWWZ6ZnRwJTJCM2szJTJGQUM2OHpMZnglMkZ3Q0ZkV3QxZUVscmJVb1clMkJ3R0lyRFBHdjdDeVUlMkJMaiUyQjE4ZUllYXZLTTNscTdXcWZXTk9rWWl6dVhGZU5lc0U5UDhBaVg3V05icUNuY2ZtMmZ6Um9VbWc2ekVxYTdaUERQUEN2OTNlUVJNQzAwQSUyRmElMkZaYVdMQ0h6ZjhBbDdvT3JhNWI2aDVLdUJIZTNyajYxWXdyJTJCNVhsdTAlMkZMJTJGZERmenglMkY4UXdwdXA0VldCck9SaGZXN2lTMFlrckpia2RSTEt2Mm9tJTJGWTRmYnpzdmtYVTdmV05IanUzamhqMVpBSTlVRUtoU0p2RW1nJTJCRjElMkJQRWhYZ1BtJTJCOTh5JTJCV3JpVHl4ck0waUNNQm81VlZXOWFEb0pJWm0lMkJMaWY1ZnRSdGhONVg4enhXWG0lMkZUWjlkSHE2SEglMkZvejJ6MWVOTGQxS3E0VHZ3WSUyQm8yZWwlMkZQWGtqVFBQR2tOWTNuN3E3aHE5amVxUGppa3AlMkZ3QU5FJTJGOEF1eE04bWF6byUyQnElMkJWOVV1TkkxS0wwN3kyUEZsYmRXVSUyRlpsalA3VVRmc3RpaDlKeTZkJTJCVlYzZjJkamEzbHRIZTZpcGV6UzJtcnpBRmZoJTJCMmlNZjJLJTJGRTJYY2ZrNW9qb1RaMzExYnoxSkVqRlhHJTJGaXRFJTJGNGxubGgzVVNMS0NZN2xTR0xRN1VJM0RBOW16MEwlMkJWUDV3THF4aThzJTJCYVpSSHFJcEhaWDBoQUU5TmxqbFBhZiUyRkslMkYzWiUyRnJZcXFhbCUyQlMlMkJvWGIyRVl2cmFXRzNrY3l2TEczSVJ1d1klMkJrZ1BGVzJQZkpqWiUyQlJydXd1RmEyMWlSWUZBQ0tGS3NLZjZyJTJCbWYlMkJSZVRVRHh5NllxbzIwTFFRcEU4cnpzbzNsa3B5YjU4UUJpMmJOaXJzMmJOaXJzMmJOaXIlMkZBUCUyRlQ3JTJGbXpac1ZkbXpac1ZkbEVBOWN2TmlyemI4enZJZjZiaE91NlJFUDB0YkwlMkIlMkJqVWIzRVElMkZaJTJGNHlwJTJCeCUyRlA5ak9IYWd2cVdzTXclMkIxRVRHd1BXaDMzejF6bkklMkZ6TDhocUV1dGYwcVA0SlJ6dnJkUjlsd1IlMkZwQ0R3JTJGMzclMkZ3ZVJuR3hUdE5CcmVFeHc1RHNENlNlbjlGNGdwcGh0bzJwcllTU1EzS2V0cDExUmJ5QWl1M1FTb1A1MCUyRjRaY0s1WXpHNVE3ZUdQRVV5UnBNeWtSU0VoSDdNVjJJekdBa0RZNWgzT1NFTWtEanlDeEw4YmVhWmFnbHhvT3B4VFc3cUxTV2ttbjNjWDJlSjM0bnglMkZ3QXBjbE1zZW4lMkJjZEllQzRRQ1pRUFhqSDJrYW53eXhlMlJqVDclMkIyZTBiUnRWSExUNVNXaGwlMkZhdDVPenIlMkZ4V3glMkIydUpXdHhlNkhxU3c4d3R4RHZCTCUyQnhMR2VnUDh5T015Y2VRRWJjdW83bm5OVnBaNEptTXR3ZDR5JTJGbkQ5YkVOVTB5ODBDJTJCYXp1UnlUckhJUHN1blpoJTJGVEtpbDRrU0lhaiUyQkdkWjFIVHRNODQ2U1hVZW5LdjJnTjNnbHAxJTJGeWtQJTJGRDV5TzlzN3ZSYjJTeHZVNHNoM0k2TU96cDdOa3lPbzVPS21TdUdVTXZROU1NZEYxbTQwUyUyRmp2b0FIVWZEUEEzMlpJejlwR0glMkZESWYyR3dqdDVRaDMlMkJ3MyUyQmRjRm5yaXIwR1c1S3l4NmhhdjZsdGZxREhkZFc1RGJpMWRvNVYlMkJ3NiUyRnpaTFBMYlE2blA4QVdycEFieTNvSkdJMmtYcWtyZnl5cVI5ck9VNkhyS1dIcTJOOEdsMHk2cDY2THUwYmpaWjR2JTJCTEYlMkZhWCUyRkFIWW1kYThwMmkydGs4c2pySTdtaVRJVHhraiUyQjFISlE3aHVKJTJCTEpSM0szc251cTNmbzJydW9xUUMzaWR2c2dEJTJGV3BuTUolMkZKJTJGbWU0TXNxMmpDOXR1VWFYY1hFUjNkckoxamFwSDcyTlclMkJGbVglMkZpdCUyRndCNW5UZElrc3l6VzBjJTJGcnl4VlpnekJtQ3NhNGVDWkFLSERJV2diUER2SzlqcXVoNnhhVyUyQnRXODFyREw2bG96VEthRkpRVkFCJTJCS3RmaHd2czQ3bXl2TCUyQk5RZlRzMmtEOVVLOGdRS2x2MlhwOFN0blIlMkZ6UTFHVzA4dSUyQmxaTzBkM2RUeHhRc2hLc0tIbTdoaDlqaXElMkZhemk2TXhFaUk1WU9hM055eEpNalZydXglMkJJcmxjdG1RM1RTOTFFM2pDRzJqSEkwOVIxcU9kT2dGZjkxciUyRncyQ0xLRll4eUpCSUZaSk93SGdNQzJOcnlHM3dSbnE1NnQlMkZaaHVzWmlpaHU3Y01XdDVpcjJ6cHlpa1VBVTlUJTJCWWN1V1I1cGRQcWlhY1FyV3FYQ3pSMVVTVkJBYiUyRkFIWXAlMkZud3V0ZFZodGRUYSUyRmdXVkJPQWs4QmNORzlCVHF5azRjNnJjMmR4ZTJGM2Mya2NLSkdJN3F4NGtVanB5UjBCNlZyJTJGTmhCcWM5aGFTeHBIRVJhWFJhV0l0JTJGdXZjb1RSYTc1UGx5UW4lMkZBSlp2WUklMkZNVVMyU05FTGlWVEV5Z1VqblZXOU9sZnRJOGhWV1ZzblNYVnhmVEdTNmxhU1ZpQ1Myd29kanNOczUlMkZvOHJyTDY5cXdkNnBJcnFBdyUyRmQlMkZZUHc5T21TdWE1MUdWSjc2MnN3UVhMQ0QxQWlyeU5Rck1maTIlMkZ5Vnd4S2tJalc3JTJCZXpqUjdQVHByJTJCVWJ2Nld5VUg4emZhNmR1T0VQbmpUN1NFV21yeHhrU1hhdGF6b3dBNUtZJTJCU2NnRDlxSXJ4d1EzbVBYN0VldHFGaEF0cVB0ZWd6eVNBZXdBNDVGJTJGTUhtMWRjUklHak1kdkMlMkZxUklLY3VWQ3ZKMiUyQlIlMkJ6Z2xMWTJ5aGpuTGFFU2ZjRXF1YnVyVzhNNUhwekt2SXIxRmFEbDc5Y1JiUnI2UzglMkJyMjQ1R0NvYWMlMkZDaktwNjclMkZ3QXd3JTJGOEFMM2xpMDFxQkxnUEpPOGY3dDR3UDdzJTJGc0U5ZmhPSGVyJTJCVnRmZ2clMkJ2YWJjSmUxRkpyUGp3WlZVVSUyRmR5JTJGUjlsbHlJRml4dUV6aktFakNZb2ptR002amFhaloyOFJqQmlFaXNKelVMVGkzaVNLUjB3Ym9Ia1RYZFd0MjFPTFQ1cnUyQTVSbE4xazhTcnNWV1QlMkZBR0Q1ZW5hMWFYQSUyQm82cEQlMkI5SjJXY2VuTCUyRmxCSlI4RCUyRndDcm5TZnk4ODBXJTJGbHl6bDBtN3VKWnRKUiUyQlZtWFNzbHR5TlhoWUQ3Y1A3U2NmaVQlMkJYRFhjeG9zUjFEOHJ2UDJxV1VkbFphZEhaVzdrUGNQY1hFWWVTbjJFS1I4JTJCS0o5cmglMkZOa1J1JTJGd0FydGMwMjZleTFGb29Kbzl5S3M0SVA3U3RRY2x6MGJyZjVqZVh0S2hSN2VZWDBzaWVvaVFIWUwyOVJ2MkNmNVQ4V1E3VyUyRk1qJTJCWnJPS2QwdDFDdCUyQjZlRGs3eE1hajA1Q2FOeGIlMkZWd0VnQ3kyNDlQbHlFQ01lZko0MjM1ZlhRNjNVZiUyRkF0JTJGWEM3VnZLc21rZlY3aWFiMWRQbElTVzdqVGVGeiUyQnhKSFdvUGczN2VkUTVreU5ESXZweXglMkZiUSUyQiUyRlFnOTFPQjdoRkN1cklzc1VxOEpvSEZVZEQlMkJ5dyUyRlUySUlJc01NbUtlT1poa2lZeUhNRjVnJTJCaENOaXBjeUZmM253RDdjSCUyQiUyRm9UJTJCMXglMkZ3QjJKJTJCemlOeVcwMSUyQk5zZVZ0TW9NYzRHN1ZIODJUQ2J5eGZXTXh0VU1sbkRJUHJPbGk1NUpJaCUyRndDSzJaZU1xdGhZWU9NVnhCTmIlMkZ1MkhLJTJGc2w2SlU3WGxwJTJCMXhEZmJUJTJGZGVGZ21Qa25XN3EwZUMlMkZzWiUyQk9vV1RjazVmdFJuckc5UHRJZnN0bmF0WTBpdyUyRk1mUTQlMkZNV2g4YmZYYmRTanhuYm15RDQ3UzQlMkY1a3k1NWdXY2FacURQcDF5Wm80MlBwejhTdkllUEhPbiUyQlRmTzJxYVhNTCUyRlNIaVBxY1JmMk05ZlRZZjc4WGo4WElmczRxb1dzR3NRNjRUcHAlMkJvMzF6R2JLOVdZZkZFOFo5VGNlSTRGUDlsbnBOYldEVmRHaXQ5UlJiaU80Z1QxZzNRa3FDVzlqWDRsemtzRTF6NTM4MkRVN1d6RUtvcXE1VVZBb09JZVY5dVIlMkJMJTJGZ2M3UkRHc01NY1MlMkZaalVJUGtvcGowVXZIdFElMkZLblY5SDFGOVg4dlhDYWp5WXQ5VHVRb1lMU2lqa3g5T1RqJTJGbGNNUzhxJTJCYUxueTk1Z3VvTllzMnMlMkZyZkVYc0xMeEt5SlhqTEg0cHhPZHB3bDF6eTFwJTJCdkNPU2N0RGN3MTlLNWlvSEFPeFUxSHhKJTJGazRvdE5vWllyaUpKb1dEeFNLR1JoMElJMkl5RiUyRm1OJTJCWGxsNTUwejRPTUdzMm9Kc0x5bmZyNk12ODBMJTJGd0RDZmF5VTZSWU5wbGhEWU5NWnhBQ3F5RUJTVnFTb0lIOHVEajB4VjhOYXBwVjdwZDdOcCUyQm9RTmJYOXF4U2FKdW9ZZnJyOXBXd3VTTmc0TlNIQnFLYkVIeHJuckw4MFB5Mmc4NldYMSUyQndDdzY5YUpTM2tPeXpvTiUyRnE4eCUyRjVOUCUyQncyZVhtMHE4Z3Vab2JsR2dsaWNwTkE0cElyb2FNamZ5ME9LdnBmOGx2TXVzYTVvbDFaYXpPTHFYUzNqaWl1VHZJeU92SlJJZjJ5bEtjODZlTTh5JTJGazM1dXNmSzJyM0Z0ZnlNdGpxb1JaWjNxUkZOR1Q2YlA0SVE3SSUyRiUyQnh6dEYxJTJCYUhrZTAxU0RSMzFhTjdtWiUyRlRMUlZlS051M3FURDRGNWRNVlpsbXlsSVpRd05RZHdSdU12RlhaczJiRlhaczJiRlglMkYlMkZVNyUyRm16WnNWZG16WnNWZG16WnNWZGpYVlhWbFljbElJSVBRZzQ3R1NPc2FOSTVvcWdzeDloMXhWNFIlMkJadmtBNlZLMnI2VkglMkZ1UGxhckl2OEF1bHolMkJ6JTJGeGpiJTJGZGYlMkZBNUVvSkxLJTJGd0JGaDB5T0pVMUF5ckg2b0FCYm9xSkl0ZWJ0eUpralpQOEFLVnM3M3FubSUyRndBc3lXODlsZXM3eHp3dFNNeE1SS0clMkJIZ2hweDU1dyUyRndBeSUyQldwYklIV05OamVHS0ZrRGpsVnc1JTJCSVBHd3A4UyUyRnRjZnNaR1VhdVFIdmR2cE5XSnhqaHl5TVpBJTJCaVhRJTJCVW1NWE50Y1dWekphWFNHT2VKaXNpSHNSdGxsMXVMZjZyY01lS2IyMHZWb1clMkY2cFAlMkIwdjdHSHNMcjVwdHZxN21PUFU0RWxtRWhISDFlQ0lJNGtwJTJCejZhTzclMkZ0ZXBoQk5CUGJ5dERjUnRGTkdhUEc0b1I3RVpWS0pIcmh6JTJCOTJKakRQQTRjdzNITWRSJTJGU2lpTkcxbTcwMjhFaUVDNGolMkJHV01uNEpVN3FmOEFqVnNsbXZhQnAzbkxTRnZiQ2lUS0NZMlAyb3BQMjRwS2ZzJTJGOWQ1QlRGRkl5czVaR1g5cEtjaDlCNjVKdkttclNhVmRldnhlYTFtJTJCQ2NFRlF5ajl0UiUyRnZ4TXR4WkJJVjh4M09pMWVrbnA1VWQ0bjZaZCUyRjdYbXNrVnhwMTFKWTNzWmlramJpeUhzZjhBbWslMkZzNGNhUGF5NnBlUWFkRTZySk13Vlhib0Y2ayUyQiUyRkVET24lMkJkUElrZm1TeUdwNlFBMTJxYzRKRnBTVlB0Y0c5JTJGd0RqZkkzNWE4cXphRk5hM3VyS3JYTG1zY2ZJMWdQN05TdjJuJTJGbXl3eG91SU4xRFdQS0RXOTVEWTZLMHQ1SWZnbmFVS2dEMDVjbDQ5STZIN1RaMGJ5bkJBbW1qU1Z2aGN6MnFFTTYwJTJCSG5WUnc5b20lMkJIJTJGQUZzSXRmaG5kZzFxJTJGcE5keG1JdURRVlUlMkZFQ2Y4b1lSZVNMazZSNW5XQncxYm1UNnNTRDhGR0JiNGglMkZOeVhEeVB2YnNXSVRFOSUyRlZHSmtCMzBqUEtWMVBwT3NyQmR1UkxGY1BiM0pZOVZkaXRXJTJGMlh4WjAlMkI5MU8yc3BJb0pXTDNFNTR3VzBZNVNPZjlVZEYlMkZtZHZoem0lMkZtMnclMkJvZWFwSmxCVmRSaldkQ0RzWkUyY2ZldUhkdmZRVzBCbmdacHRWdkVIMXUlMkZsRzZnaiUyQjVoSDdLcjB4SGMwcEQlMkJZZzh3YTFOREZaV2pTV3RzckNSb2lHSmNuNDZiMVlkRjJ5RldlbXp4c1cxQ040RWolMkZabFVvZnViT3MyV3B4cE5HbDJvTVAyZVNiRWU1eVRYR2thZHFGcEphVDI2VDI4NjBZRVZCQjZFSHg4TWVDemRwdW5sRXRwSFlRMzhHcVJyRk5hUEE4RWdKY0ZhJTJGR3FoYWRhbzJYQkdsbWJlMnVDemV2YkdlUm8yUGNOSnglMkYyUyUyRkRodDUxczNzTHBZTG9INm5jSXEyMXdSVTFVY2VMdDlIeGY4SGhqNWY4cFhlcldjJTJCcTJWckhxRTFvcVFXZHZOTHdVb2lqbUpCJTJGTzlXNCUyRnM4Y2pWSDNMZXpFdk0ybVhXcXlhYk5vekI3U1MxV0o1U3dCckhXbkx2OEEzWlViZnk0b25sYXptdHJLQyUyQkpsTm9IRkZORmJtUWFIdnRUSjlyUGx6VTdHT082dnJSYmVOaW9RUU1yUnhtbjkzOElYajRZRTBmUUxuWEJkUTIwNjJsMUNQM1NTcnk5WGF2N29nMCUyRjRMRHNpa3BzN0MzczFXSzJpV0pCJTJCeWdwZzVsTk9YMFlBVnI3VEwweFhzeGN4c1ZsaGt0d3BGUHRMVld3YmYlMkJhbjBlOHRwN0xUWXJteUlMbHB5VDZob1J3MiUyRnUlMkZUYmRsdzN0YW9LNHY3YTFkWTJkVzVHalExcVZIaiUyRndBMjRWYWg1YTAzVmxOeFpFUVR0dnlYN0xIJTJGQUNseWZqeWZvM25yVHJiVjlQUk5JMWk2Z004cVJFTkM4Z2IwNU9VSSUyQk5SNm5SMSUyRjRISVJxT2o2NTVWdSUyRlExU0JvZ1QlMkI3bVUxaWtBN3BKMCUyRndCaTN4Wkd3ZGl6aE9lT1hGQ1JCU1BTWk5YOG1hbWwxTWhOc2ZnbGRQaWpkRDFIJTJCUzM3UzhzNlpMckVFWnQydUVlMVc2Vld0THNnJTJCbEtHSElHT1JlUyUyRjZ3T1I5ZFd0UnAxMWRTUSUyRldIdDRXayUyQnI5M0lHeVUlMkZ5c2slMkZrJTJGVzVJTkFUVDlaMGVBV2N6R1Q2Z3IlMkJvSWxmY2dCeHNmMnZUJTJGQUdNWXhNU2VFMkQwN203UHFCbWpFempXU08zRU9VbyUyQlk3Mk0lMkJZZkxjZDNGSmVRUnh5bzdFelFVNzkyR1E2MGJVOUhrZjlIVEF3dHMxamRWZU5sJTJGeVglMkIybiUyRkVjN1pMNVhzdFZTUzU4cDZrWVpxVmJUcnlzaWY2dFdQclJyJTJGc3BWem11dmFEcTJqenN1cDJKdEE1TkNmanRtTmY5MVRqYiUyRll5Y2NKOHRtZ0pQcVY0SkpMSnBJM3NZTHFKMnVZJTJGdEJnUDkxcTZqcEl5OFZ3MHNOTm44dEcxMW04S1dObnFUckF1bXM1WWhUdnljdCUyQjBSOGZ3JTJGWWIlMkZXd0xkUnBmYVZFa2tQTzUwcjFIaGpKQUxSU2c5SHBYOTIlMkZ3Q3pnU1c0VFY5SGdhNXVwcGRWc3BGdDdhMEZPTU5zaEhKbTNWdVpZOGZWJTJCMHpmQmxaSHEzQk5pZ09ubTUyTElmREhDWXdNQ0ptVlhJOElxTVluekk0Zjg1bCUyQnNSUWM3ZVNLVlJQSEt0czRydVVrUEFjdjlSJTJGaXdiWmFZMXA1Z3RySFVvaXBqbmpXWk9vNGxoUnY4cEd3Y1BMOXBjUk9abzJTNlprYVhneXFvYUZWazRobiUyQko5dVBxTnh3VnJtc1d1cHZZemFsRjlTMUsxbFRpNkdzY3NZWU1wViUyRkZXVU54JTJGbHdZb1NqZDhqeWJPMHN1TE1jVXNkbVVRUk94UnJuSDc1UFF0ZDh2YVQ1aXRCWmFwQUpJMFlQRTZuakpHdyUyRmFqY2ZaemclMkZ3Q1pXaDNHaFclMkZyMndIMXZTWjBEWGxQaWExbSUyRnVadUs3TVYlMkZ1TGolMkJiUFExcGRSM2x0SGN4R3F5Q3RPdEQzSDBISUYlMkJaRm5iM2s4RU1xaHhQQkpIT2g2TW5JVURmU2Rzc0RxM3pmcVdtUjZsRkpxZW5SQ082aUhLJTJGc2szRkQwbmclMkZtamZDM1NOVnVkSnVVdnJLUUpkUU9yeGMxRG9hZmFTUkdxckslMkZSbHlVMzJpM1hsblU0UkhPWXJGMklzcjFoeTlKbSUyRjQ5NSUyRjhBaW1UJTJGQUNzS3RlMFpwJTJGVzFLeGc5S2FMJTJGQUk2TmlwcjZiSCUyRmQwWDg4RW4ybGZGWDAlMkZ3RGx6NXgwZnpicEFsc0lZck8lMkJnQUYlMkZZeEJWQ09SJTJGZUlCVGxFJTJGN0xmN0hKcG5pTHl6NW0xVHlycVZ0cTJseThaWXp1dlZXWDlxT1FmdEkzN1dldWZKbm5IVGZPZWtKcVZpd1NaYUxkMnBOWGhrN3FmOEFKUDdEJTJGdFlGWkptelpzVmRtelpzVmFPY3QlMkZOajhzeDVudEpOYjBOZlQxdUJheXhydDlhalVmWSUyRjR6cVA3dHYydnNaMVBLT0t2aHowQ3Nid016cVNTSFBSZ3cyJTJCTDMlMkZtd3JsaGVCJTJCRDlleEhRanhHZXFmUEg1T2FkNWx1cGRXMGljYWJxVTN4VHFWNVFUTiUyRk95cjhTT2YyblglMkZnTTU5SCUyQlFmbXU1bldDOW5zNHJibDhVNk96TUIlMkZrcHdHS3IlMkZ5ayUyRk9CdE9NUGxuelRNV3N5UkhZNmc1cVlxOUk1ajNpJTJGbGY4QTNYbm94V1YxVmtJWldBS3NOd1FlaEdjNjhzZmt2NVE4dkJacmlFNnJkclElMkJwZEFlbUNPNndqNGYlMkJENTUwVlZDcUZVVVZSUUFiQUFZcTNtelpzVmRtelpzVmYlMkZWNyUyRm16WnNWZG16WnNWZG16WnNWZGlOek5EYndTVFhMQklVVW1SajBBOThXd05mUGFKYlNtJTJCS2kycFNVdjltaDJwaXJBUE9ONXBNV2lTdG9pUEpmTTFiVkk0eXkxRzhqRGtDbndyaERyRDZqRmIlMkJXYkM3V3QzNkVjbCUyQkNQJTJCS2laSGJ0eUphamY1V0R2UDl4WlJhTkNmS3R4S2I0emowNElPUjQwM0pLa2ZBT2ZIJTJGV3dzODRhak5kM0VFa2xGdVNPVXRLJTJGRFJWWGlLZHVRT0ZJZWVhdHBrMEY1UGVhVWolMkJsQVRMSVl3U1loWGQlMkZoJTJCeWxldUxQOVUxMnlrbWlXTzJ2cldPVzRuM1B4Z2NBRlhtYXR5M2NmNzclMkJ4OWpPMSUyRmx2bzBFZWpUMzg4U3ZKcURNakZ4WGxFdnc4VFg5bHM1aCUyQlklMkZrU1R5bmUlMkZwSFRWWTZMZHNWVWolMkZkRHQxaGYlMkZpdHY5MXQlMkZzTWdSVzRkeG85WDR2RGl5U3FjZm9uJTJGTyUyRm95WUpzUUdIZkpMNUZzclhVZFprMG02dVRiUjNVVHZIUUFnelJqa09OU09EbGE1R2djWDAlMkZVSk5MMVMwdjQxRFBGSU5tOEclMkJFJTJGcnltJTJCSE1EMGs1MnR4ZUxwcGpxUFVQZkY2bDVYOHhXbG05OTVldlpsZ3VMU2RralI5Z1RXanJYb3ZQNFhURVBNNnd3ektTS0NUNHR1b0lPJTJCM3ZrZTgweFhVMnRXMTNaUSUyQm8xNWJxOG5wSjhVbEVMVnAlMkIzc01CV09zWE90V3kyaUV5WE51Q3lJdzVNeWY4VnNhc2VGUDd0dml6TDR0cSUyQlR6TlVmdlQlMkJPVTZucGt5OVpyY2lWQU81WHclMkJhOHNpczAxcnAlMkZtQzAxTzVZclNXSjRrWGN5RmlCOW5zSyUyRnQ1ZmxqekxYek1sZzBiUlF1alFFU2JWbERjbDVJZW5MNGt5ZWViUElwOHk2ajVlMURTRWpYMFhXTzRRc3FLWWslMkZmUmdWJTJGYjVneDhjSE1lNWxHVW9tNG1qdVBuelNXJTJGMU9mVkw2UjdzSlcya2VLRlVHeWdHaElKM1BLbU5WeSUyRlRBazFwZFdjOXpCZHJ3dUVsY1RJZXpBJTJGRU1qJTJGbWpYYnZRdGFXM3RFQmdDSk02UHVDSEZRRXh0aXpTS0kxREhKdjVWdXhLcldNcCUyQndDOEpQaCUyQjB2MFpDTkx2cmZVckdHOXRqV09WUWZrZjJsUCUyQnFjUGRIbWUzdklaVjI0c0tuMk94JTJGREpCU3l6ekJwbHJxV25TUVN4TEkwUDc2RXNvSURxTzMlMkJzTWdtbGF4Y2VVZFJYVTdaUzlqSlJiNjJYb1VQN1FIODBmMmslMkY0SE9nWGR5VllnSHAxJTJCV1FXOGc0VHpReW9RcEpJVmgxVnVoR0pDaDdGRzlocmVtcEtoVzRzcnlNTXA2aGxZViUyQiUyRk9XYSUyRmJYZmslMkZVMFpKT0VMMWF5dTIlMkJ5MVA5MXVkdjNpZjhPdUNQSiUyRm1oUEwxeGFhSmV0eDB5NHJGRk14MmltSkpTdmhITFhqJTJGcjROJTJGTzlHJTJGd0FKMjhvJTJGWXZZNjklMkJxT01nZGxZenFQbVd5OHhyNjE1YW91b3hBQTNkazRkSkIwJTJGZlJHam9mQmw1NFUlMkJuQ3lTUk5TYTFsJTJCMnZRcTM4NjElMkJ5NjVHUEtjenRxeGpZN05FdzRqWWJVMzJ6b05wcEYxcWZydzJKWDZ5aWVySEV4b0ppdldJZjVmSDdEWVluWmFZM3BOOU41TjFuOUpKRWJ1SXd5Um9pc1kxa0RicFZ1M0YlMkZpZE03eHBsM1klMkJhZEZ0N201dGxlM3ZJVWthQ1lCeDhRb3dvZjVXQiUyQlBPTkcwanZMWTI4cWxSVWdxd295T091MzdMcGlYbDNYYmp5WnFrN1hnbG10WklmVEVLTlFHaDVSRUZ2c3hyOFhMamdJcmRXUWVkdnk3R2lRUHJmbDRTTmF4VmU1czFxN1JwM2tpJTJGYWFOZjIwJTJCMWtUMDdXR0Nxd2NNamRKRk5RYzlDMk45QnFOdkhjMjlXaWxqU1ZHSTJLeUNvcGtGdiUyRndBb3RIdTljT3EyZDFKWVcweDUzZGhBbzRPNTNKUXQ4TVlmOW9jTUZ5QjIzWndHT1FJa2VDUUd4cXdmSXNhdE5RU1FySXJtT1Vicklob1FmRUViNUxMSHpQUDZYMVRWNFJxRm80b3pGVkwwJTJGd0FwRDhFbUZtcyUyRmx4ZVdCTnhvRXB1SWh1YlNRajFCJTJGcVBzSHdvMCUyQjRsdFVtVzdSbzVvalJvM0JWaFQyT1dDaTF0JTJCYlBKMXBGQ2ZNWGxKZ3RsJTJGeDkyVkN5Ukh1d2piNGtYJTJCZGYyY2lPbEcyaHVoY1gybjhKSTJCRThGSEh6TVRiJTJGOFRWYzZGcFd1dGF5U1BibEpFbUhHZUNRVlZ3UDFaR3Rjc0liZTVOM3AwVWkyTWxXYU03bUIlMkZ3QnBRNCUyQjFGJTJGTGtUR3VsaG5ESVluWXByZjZ0WWF4YXh4Q0RseElhRzdpa284WjdrR3RXciUyQjN5d3hzZEdsMVd3aXR6R2JrZ2tSenVnREduUm0zNFIwJTJGWmJJSkJad3h2OVloQVZ4OFFwMEpQaUJuYWZKbDFlWGVrTE5keXJLT1hHTmdBRFFENGczR2clMkJFN1k4V3lUTGZpSE5KYmJRdk5IbGUlMkZlNTBlUVglMkJuWEFEM1ZnNTNFb1duS0ltaFFtbjdQd3Y4QXlZUlg5eHFsMWRtWFdPUzNYSGlxTW5wMFFFa0txJTJCQTVmYXpyUXdIcU9tV21xUUdDN2o1RDlseHN5bnhWc0ZzTGVPMzloYjM5dEpiWE1ZbGhsSEdTTnVoQiUyRlVmZk9aWHkzJTJGbDdVVjA1bjVNZ3JwTjFMVGpMQ1Q4Vm5jRWolMkZZZjVPZHQxblFielIzSmNlcmFzZmduQTIlMkJUJTJGQU1yWUIlMkY1VjNZJTJCZHRBdmhlZnVicm4lMkZ1TnV4MWprUVVZa0Q3VWJuaXIlMkY2dUVxOEQxclRGazlYVWROZ2FIaXglMkJ1MlhWb0hQY0QlMkZmYmZzdG5RZnlBZWIlMkZGa3RDJTJGcHRhU0YxVmdGTkdUaVhGZmlBJTJCTGolMkZsWkM5V3VOZDhwNmtOTTFlMDRhbllzWTJtWTdUVyUyRlpHMnBLamZzUzRLMDAzbWtDSHpsNVdtRExhemVyY1dvQjlXQ3ZYMUZCJTJGZVF0OWx2OG5Jb2ZZTlJsNUZQSTNualRmTzJsaTd0YVJYa1FVWGxwM1JqMFpmNW9uJTJGWWJKWGlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyczJiTmlyJTJGJTJGVzclMkZtelpzVmRtelpzVmRtelpzVmRnSFZZOVBtdEhpMUpsVzNjZ0V1UUJVYnIxd2RnUFVkTnR0VHR6YjNJSldvWlNPb1lkeGlyekh6dFAlMkJpMjBhVHl2ZG02dURjSlNDTUpJUFRWaFJXS2o3QmJiaTJCOWI4a2Vacm5WM0Z2YmVyYnNRc1Z3SFVLRko2dFU4aFN2aGslMkIlMkZ3QVBHeTFHd3ZMT2txSzVqdTBjSVAzWVElMkJuSXRBUGlpZjhBNG5ra3BoS1FhUU9rNmVtbDZiYTZmR1FWdDR3aFBpZjJqJTJGd1dPMUxUYlBWckdmVHIlMkJJVFd0eWhTV01qcUQlMkZFZnM0TXpFVndJc2cyTmklMkJWUE9IbG01OHA2NU5wVTFYaFA3MnpuUCUyQjdJV1B3biUyRlhYN0VuJTJCVmdXMjhzNjNmMmtXcjI5bTc2WXM2eHlYUXB4VWdnTlVmYTRpdjJ1T2VuOWM4dDZKNWl0MHQ5YXMwdW80enlqTFZES2Y4bDFveTVFTDdUcmlHVzMwTHl0cDdRNkRiczBkN3hJNE96JTJGRldQbHljbU52aWIlMkJmS3ppdWZFVHM3V1hhaE9uOFBoOWRWSW42YTclMkZld0R6UGQzdWtOcGx6WXR4dEVoVzJhZFZCS3pSa3RUa2FsT2RmJTJCQnc2MGJ5ZFolMkJhTlIlMkZ3QVJhUHEwVmpPSXc1MDliY0xJa3clMkIxNnloJTJGalJtJTJGM2FuMjhkZTZkTFlUWEdrNnhEenRweDhhSG95bjdMcWZiOW5JM1lYJTJCcmVROVRoUzNwY1doY3Zhek1CV1NFJTJGYmdhUSUyRkY4UDhBSmxyckR2dW52bXJ5QjlidUZ2ekF0bnJrUUQ4NHolMkI2bUtIa0dSdHUlMkY4MkhXbk8lMkJvYWRMcFU1YUM0WmVVTDlHaWwlMkIwaktSMGFPWVpPTE84MGp6aG8wZDNadjZrTW4yV0ZQVWhsR3hWaCUyQnk2SDdXUVdhTzgwclYxaHZ3Qk1qY2ZVQW9za1RiTElQJTJCTnNJcjVvU3UxMHRmT3Q3SWt0NHRoNWlqUUM2aGtTc2R6NmZ3ZldJaUNDcjdVbVRqJTJGbDVKRyUyRktUU2RUamclMkZ4RElMaDRVQ1VnSEQ3UDhBeGFmajQ1R1BNZGtZdFJrdmJXZjZqZXdFWE5oY3I5cHBUOXBFVmF0SldueEp4JTJCem5SUElmbXolMkZGdWpmVzVZJTJGU3ZMWiUyRnE5NGdCQ21RQ3ZOUWZpVlglMkIxeGI3T0EyTmxlYVglMkZrciUyRkExOUpiMnJPJTJCbFhiYzdVdnVGYnV2TCUyQmIlMkZpV0M3TTdIT3VhcnBkcnE5akxZM2k4bzVCc2U2dDJkZjhBS1hPUDZqYmFqNWR2cExLNVVTQmQwZmNCMDdPdjhjTVQzcWtQNWw2dHJrV3Aya05pOHNWcjZDU2hveVZEeUg3UkpIWGo4T1FwZk5mbUNOMSUyQnNYY3NuQmVDck9mVUFVZEZIUDR1UDA1Mm55JTJGcTJnNnZlUjZUNWhnWDk0QWxtc3AlMkZkc3clMkYzVyUyRiUyQlUzN0dTSFVmeXA4bjZoVXBhdlpzZThEa0QlMkZnSDVwJTJCR0NYTmVUd00lMkJiemVXeHRyJTJCM1NWSEZHTVpLTVA4b0JxciUyRndBTmg5cXY1Z3ByM2tWZkxWOXprMU8zdUlqRk93cnp0NHcxR1poVWVxbjJQOHJKRDVpJTJGSkpySzJsdk5LdWZyU3glMkZFWUNuQ1hpT3RDcEtQeCUyRjFNNTAzbHE3dHBEeEROVVVVR2xQd3lKdFdRZmxmcE1Xc2VhRnRMZ3NzWnRabkRKMVZoeENuMzY1MWUzOHFhbnAlMkJzMlpYOTVicktHJTJCdFI3VVZmaW82JTJGczE2WVMlMkZrM3BHbVd4dk5SJTJCc3BKcWZFVzdXblI0a3J5TEZXM1BxTiUyRkwlMkZMblc4STJVc1c4eCUyQlZvNzFuMUxUMENYcDNtakd3bHAzJTJGNHlEJTJGaHNnbDlveVhVYXhYMXU4TG9DWTJkU3RWJTJGYUclMkZnYzdKVEViaXp0cnIwemNScklZbUR4bGhXakRKQ1hRb2VWZVc5UnY4QXkxUEtMMjVrdU5POUVMRW8lMkJJamdhb0trJTJGQXFKeXpxdHJkUVhrQ1hOczNxUXlxR2pjZENDSzdaRlBNUGwxWWc5NWFMV0E3elFqZmpYcXclMkZ5Y0I2SnJOelkzQlc3dUFiQVJLZ1VxU1FWSUM4S2ZDcThLOHZoeHE5d2xudEs0RHZ0SjA3VWdCZlc2VFU2Rmh2VHdxTjhGUnlSeW9IaVlPakNvWlRVRUhINUZEQzlZJTJGTDZ3dVNaOUljMk0zWDB0ekVmbzZwJTJGc2NMOUIlMkZMeThYVkpOUzh5M1l1bzQxYUt6MCUyQkVrUXJHd29XbE8zTjJ6b21WVERaVjRsNW44czNQbHE5NG9TJTJCblRrJTJGVlpqMjclMkJrNSUyRm5YJTJGaHNNTkk4OTNXajJodDJ0aE5WU0VwOFBHU2xCSyUyRiUyQlNmMjg2bnFPbldtcVdjbGxleGlTR1FiZzlRZXpLZjJXR2NvMTN5aGRhVk1VVDk1QTM5ekwwRER3UGclMkJJWmMzcFBselU1ZFN0R2E0SWFlTmdHWmFBRldISldvTU9jNXY1RTFCN1dmNnRjQW9EJTJCNVBMYjNqUDBmWXpvNHhJWXJaSW81VWFPVlE2TUtNckNvSVB0aWRyWjI5bEF0dGFvSTRVcnhRZEJVMU9MNXNDc084JTJGd0Q1ZTZWNTcwOFJYTklOUWdCJTJCcDNvRlN0ZjJKQUtjNG0lMkY0WE9JV1g1UiUyRm1Wb09wdW1td0l5U0F4Tk1zc1poWkcycTNNcWVuODBlZW9LWnFZcThsOGglMkZrJTJGY2VXOVF0OVoxRFUzVzRnUEpMUzBKQ0VHdndUeXRUMVUzJTJCeDZhcm5XczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkYxJTJCJTJGNXMyYkZYWnMyYkZYWnMyYkZYWnMyYkZYVXpaczJLdXpaczJLb1hVaklMRzQ5RTBrNEVLZXRLNDNUWWtoc29RcDVFcUdadkVudmdwMURLVmJkVzJJOWpoRGRhRHFUJTJGdUxMV0piT3pQOEF1bEVWbkFQVlZrYjRoaXFCOHdXVVhtUyUyQlhUWVdRaTNpa1pwaHVVbHFPS21uN1A4QU5uT3RSc2lQVzBUV1VLcUQ5b2ZhallmWmtRJTJCMyUyRkRMbll0SDBXeTBXM2FDMEJKYzhwSkhQSjJKOFRoVjV1OHRKcmRvWnJkUUw2RUgwejBMaiUyQlElMkY4YTRiVGJ4WFFQTUdxJTJGbDlyN21TczlqY1VOM0N2MlpvJTJCMXhENFNwJTJGelpuYU5ZaHRmTm1nUmFobzdKY013RTFwS0NBU1AyNDYlMkZzbiUyQlpmNThnc3VnV1d0YVBGcDF4UkwyMXFGa0ZDeVAzVTk2WVIlMkJVZk10NyUyQlglMkJxdnBtcUV0cFVzbkdlT3RRakUwRnhEJTJGd0F6VXhPeSUyQjVrSG1HQ09hMXM3JTJCVmVFc0ZZcEhJM1N2d3lCdkRpNjQ3UnRIMWJ5M3FFWG1QVDVWbGduV21vMkMxQW1qNnJJckg0Uk1uVmNDejNGdko1eDFwSXFYMmgzMGNWeTNvdXYyblFFZWthOVhaVzVaSk5QdWx0N2RiWnBUTGFzUDlIbFlVYWxQN3VWZjJKbEgydiUyQkV3ODkxWnpZM3R2cU50SGRXejg0cEJVSG9RZTZzUDJXWDlyQzd6Sm9FT3UyWHA3TGRSVmEzbFBZOTBiJTJGQUNId2kwSWFoQnF0ZE9vOWhLZjlMalkwVmY4QUxVJTJGNzh5YlpGRDU5MWpTM1IzZ25SbzVZbXA0TWpBOXNuSGtyOHdlUmkwTHpKSUk3cFFFdGRRYzBTWWRGV1ElMkZzeSUyRjVYN2VIJTJGQUp3OHVMcU1EWDlxZyUyQnRSTCUyQjhVZjdzUWY4YkxuSmJ1eWpjTkZLbk5EMVUlMkZ3OERoNXBmUW8zR2M0ODdlVkZoTW1xMktmdUhOYm1OUiUyRmRzZjkyS1A1RyUyRmElMkZseVBlWFBNJTJGbWZ5Mlk0cG1rMVBScWZCQktwTndpRHI2RTMlMkI3T0g4ajUxJTJCMXViWFU3SkxpS2tsdmNKV2pEcXJEZFdIJTJGRXNWNVBudG9GaXVVdVFPRnhGdkhLcEtzUHBXbkxKWjViOHc2NXAxeEVndVh1SXAzcThkMDdQMSUyRlpWbSUyQnglMkZrY2NiciUyQmhtMjEyNXNiUGdnWDk1QVpxOEZSaHkzcCUyRkw4U3JrMTgxYURIcWVtcHF0dlJMdTJoRG5nUGhlTURtViUyRjJQMm96anNyS0xXNWp1NEVuaSUyQnk0clE5UWU0T0w1RCUyRkFDcDVoZ3U3aU93a2tVWEZ4RDZ5eDlEV004SE5NbUdKRkZEUkZSUWlvUFVISWhybWdyQVh1YmRLMnoxOVdPbGVGZXBIJTJCUmt3eW1Da1VJcUQxQnhCcFdJYU5xMDlvMzFXVVJyWm9pZW0zMmVQRWhlQ0lCOFZWJTJCTEpjR0IzQkJIdGthMUxRWFZuZTBYbkM5ZVVRJTJCMHRldkh4WEEybHhhekhmVzYyMHJ4MmF0VzRna1NxRk9QQ2dkdmpEQ2xWd2tBN2hXWVpzd3paRlhZbk5CRlBHMFV5Q1NOdnRLd3FEaW1iRldFNnZvRTFoSWJ1MEJlM0JyUVZMSVA4cnhYSlJvOTJiM1Q0WjIlMkIxVGkzekcxY0drQWloM0I3WlNScEd2Q05RcWpzb29OOE5xdXpaczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlEdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWaVBtYnlvOTFjZnB2UWlJTlZUJTJCJTJCaDZSWFNEOWlYd2wlMkYzM04lMkZ3V1F6VzlBWFhvJTJGWGFGZzdMJTJCJTJCaEswbWpkQnVhZnpBQ2pyblljRFRXTnJQS2s4a1lNc1pESTQyTlI0MHczdFJXM3oxcDJsNmhvJTJCb3RMQWZYVkU1T2dEVmxqQSUyQkxqJTJGeFpHdjdPUzJCYmVhUmJzY3BJNVl1TFFxM0VUSWZpUWN2MlpWUDkwJTJGOEFzTWszbWkxRmpxQm50MENwY0lISVVVJTJCTlQ4UkZQNXR1V1JEVEZFdWx3UGFQOVlqVlNmVmpCSUZHUE0lMkY3QnZIQ09TWHFYbHU2dHJuVEkxdDdZMlpqJTJCR1cxWWhtUSUyQkpjZmI1ZnpZY1pCUEtsMUk3R1JYSEtHaTNBWSUyRmFqUFJ2ZHNuUU5kOEJGRkRqbkwlMkZQV2hKYVhndUlLUnczM0tuZ2tsUGklMkYyUHhjczZqa1k4OTJVbDNvbnF3b1pKTFdSWmVBSElsVDhEN2ZKc0FWQmFMcFVldWVTOVB0cmlZUGNXeWtRWGtmWjR5VkREJTJGSlAyV3dYNVgxTkoyTnJRSUdYa29YcHpROEpQNjVHUEpmbU9UUjVHMHpYTG1HQ3psWW16aFpQU2VFMDVjZVA3VVRqZmxpT2hhZ2tXczNDVzBna1VYYlBaam9aVmtZOGtRSHI4T1NIVUpaRDU0MHZtWXRWUkJJQXZvVG8yNjBKckd6VTdjdmh6YUo1amdtMHQ5TzF1N2dpdSUyRlJkWSUyQko0OG95Q2clMkZkOVF5ZlolMkZ3QXJKaFBCRmN3dmJ6cUhpa0JWMFBRZzlzZ3QlMkZ3Q1NMcEp5OXB4bmlQUmlRc2dIOHJmellCNXFsJTJGa3ExaFhVNFppZ053anNpemZ0ZW1VM1VmNUp6cCUyQlJYeWxvRiUyRnBqM0Z6cVlpUjNZcmF4UkVzeXglMkZ6VE9hTDZqJTJGeXA4Q1pLc1NVT3paczJCWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWCUyRjlIdiUyQmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWMmJObXhWZzM1aVByTUVGbGQ2WGJSM0NSTSUyRnJvMWZVSUlId3glMkZzNFUlMkZscnFPa3ozYzFsWVFtRU5GSkk4RENnUnpJRElnNWIxSmF2VE9pYWpaTGYyY2xzMUtzS29mQmg5azV5ZHBKUEwlMkZtelQ5WmNCSVdZMnQ1c0ZvRDhMczVDMSUyRndDRGt5UTVLeWpXZExHaTZtbDNiclN5dkt4dW82STU4UDhBSlBWY2xPaVhadXJQaTVyTEFmVGY1ZnNuN3NFM2RyQnFGcTl2TFI0cFYySTdkd3klMkIlMkJGMmo2WGYyRjVkUzNFcU5ieWhWaVZhOGlWJTJGYmZhZzYlMkZaWEJkajNLbldVUlhMellGWVY1bjhuM3VzNnV0N2J0RUlUR3NiYzZobDQxOEI4V0ZkNzVZbThzdkhxVnFQclFpQ3NKU1BpaWtIMmpRZnNOblNjYXlod1ZZQmxPeEIzQkdHMVNieTdyZjZZZ1o1S0NaZnRJQlNtSGVGbGxvZGxwOTVMZVdxbERNS0dJZllCN2tERFBFJTJCU3V6WnMyQlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkYlMkYwdSUyRjVzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpzMmJGWFpGZk0lMkJpcExXJTJCU0paQWY3MUN0YU1Qc3lnZjhTeVZaUkFJSU80UGJDRFc2cFA1WXZEZDZXaXUxWmJjJTJCaSUyQjlUdDltdiUyQnh3NXhHM3RiZTFWbHQ0MWpESGt3VVVxZkU0dGdQTlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlhaczJiRlglMkY5UHYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFY5JTJGNXM4QVpzVmZmJTJCYlBBR2JGWDMlMkZtendCbXhWOSUyRjVzOEFac1ZmZiUyQmJQQUdiRlgzJTJGbXp3Qm14VjklMkY1czhBWnNWZmYlMkJiUEFHYkZYMyUyRm16d0JteFYlMkYlMkZaJyk7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO2JvcmRlcjoxcHggc29saWQgIzAwYWEwMH0ueXVpLXNraW4tc2FtIC55dWktaC1zbGlkZXJ7YmFja2dyb3VuZDp1cmwoYmctaC5naWYpIG5vLXJlcGVhdCA1cHggMDtoZWlnaHQ6MjhweDt3aWR0aDoyMjhweH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLWJhc2U2NC10d291cmxzLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LXR3b3VybHMub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGE4YjIxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LXR3b3VybHMub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLXJpbmctdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1jZW50ZXItYnV0dG9uLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtbWFya2VyIHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLC55dWkzLXNraW4tbmlnaHQgdlw6b3ZhbC55dWkzLWRpYWwtbWFya2VyLW1heC1taW4sLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlci12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLWhhbmRsZS12bWx7YmFja2dyb3VuZDpub25lO29wYWNpdHk6MX1kaXYuYmFzZTY0LXNpbmdsZXF1b3Rlc3t3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ0FBQUFBZ0NBWUFBQUJ6ZW5yMEFBQUFCbUpMUjBRQUFBQUFBQUQ1UTd0JTJGQUFBQUNYQklXWE1BQUEzV0FBQU4xZ0dRYjNtY0FBQUZyVWxFUVZSWXclMkIyWHoyOGtSeFhIUCUyQjlWZGM4dmoyZkc5dUlrbTJ5VWVGR0VoTkNLUXdCcGoxeVJVQkFucEpVNGNlWlA0TXhma0J4eTJHTzQ1YlFYdUVHUW9oVUtpZ1ElMkJzQkJFMXNiWVh2OFl6JTJGUk1kOWZqVU4wOVBWNW5GWkE0a1paYTc5VzNxdXU5ZXIlMkZxTmZ5JTJGUHdKZ1p0eSUyRmZ6JTJGWjI5dnJwbW1xaGxXVGdtRmcxVXBiZldoWWhHNllxMmNGaSUyRk5yajluSnlXbnglMkJQSGplYWZiTVRFelB2alZCOSUyQjZkJTJCJTJGZXp3ZUR3VjFCZkh1Yml2a0MzbFp5YSUyRjRtN05wOFVaWVhod2VISDc3MzNydnZDMEt5djclMkYlMkY3cDA3ZDM0cUlqeXZyNjNSTmI0bDRDYnNSVXJOcnE2T2Z2ZlJSeiUyRnhEeDQ4NkElMkY2Zzd2WGhYOVpJZiUyQnA0Sm9tYVRvWmo4ZDdQazFTRlJGWGIxYVdvZHEwOWwlMkY5WVp1JTJGQ1dNVkw5ZSUyRmFWRlZRVlVSRUVHOHIzVlVFWjRjWCUyRkhMMzAlMkI1c2hSdEFoRnE0d2dnTmI2R3JYZ1ZhMksyall0QUNJSHY3U3o1NFRmSGpXV2FnQk9CeTBYZ3QlMkJjakx0d1F4VkNwTndVUlFhdDFEZFlhVDdwd2R3S0RGQTZuY0hnRml6Sm1TYjNXTFBEYTdQTUlWbGIyZGFxWnhkT05VbkFldEVvakVkQkdpWFhoVG1BamhaMCUyQjNONkFsemVFUk9IMVRYaVdHZiUyQmN3bWtXWlluQWZBa2R4MXBxJTJCaFViVDl6M0lFbFVKbFZoSTRXc2dDTFV5Z2dpNE1RWWQ0VlhObUNZUnFYT3NwVjdVb0hiUTNocEVNZUxBazVta0ZZUllsV0klMkJIWjZDVER3a0tTUXFyQTdnRmVITUYzQzZWeVlMbUZaR2lLQ0U2R3JNRnNhV2I3eXVWT2g2Nk4xRmtVVXBCSjNUeXZGb3ZUb0JsOVhNYk5ZMmJaNzBCc0tmVzk0aGJ5RXJvc21YcFF3eTRWZ2tDak1pemp2UlJpazBFdGlMTndhZ0JmNDY1bHdPcXRrRVRFbjYwWFQxJTJCbFRhenJwS2xSJTJCS2tvb3kzWGZiM1dqM3dHV0pSUWhubmk3QjUzcTVGcVo0JTJGVVI3UFloR014eXVNd2dXVnFUeHJZV0F3WllRWDc4SjVpOGllOXR4U0Frb09xcVFBcWszcEJnS0xEaGxZNVhWS1BDaTN3OTdZUm9LU0ZhY2VDZ0YyaHFTWFJCUFFBSU9jWFJIOGhQJTJGMHk2JTJCUnBXTHJFeWczU2JTOXRtemdnekpRU0xRWm80eG9PRThVYkNzSmZRN3ppNmlhSWl6WjVPQlZmWERLUGlyZVdDJTJCdkFZV09CcWVzemw5SmcwM2FmYkg2T3FHSCUyRkJTVXJxYnJGSVhpSG9pRURDJTJGUHlTaTJkOW5uWkhKRTdvcFk3ZGNZJTJGZGNaZWo4NHpwUEdmWTlVdzJFcllHQ2YyTzRtVVZFekVMV3RxVXhaS2pmM3pLMmNVUnppY01SeSUyQnp2YnVIOHlsRlBxWElQcU5jekNsS1kxbVVaRmNuU0RLa3YlMkZVTnVwdGJXRyUyQkx3JTJGTWglMkZ6cllwS0JIS1YzT05PWHpZeGVWMjB6NDlxaHM3Z2FNV0lqcVFRaUJ4VlhCNGlyZzA1eXo0dSUyRk1waWVvSnVUTGpESmZVSllCekJBRlVVSGtoTXZMdnpGUHV2UTJKdlEzZHVoMFIlMkZqdWlEUWRJbjZNSmR2a3hUYWZaVVB1YU42VWFPbzZVTnRnTmw5d2Vib2d1d3FvQTVmQ2pFdXNOQ3pFOExKUUZSdU5yenBRRCUyQnJtWk5NNTUlMkY0QTV6MUoyaUh0REVnNmZaSzBqMHVIbERyaDJONGkzUHR1YyUyQkg1dGpwNUhsaVdRbW1PVUFobFllMHJxVXFXU0VPaGNaMDVBdkUxVWRDb2xTUUphSFdsU1VZZ0p5JTJGTzJmRmZvJTJGMzRwaXBoRk9aNE9ydk5kTDVFSlpiY21FOE9RekZ4SUpFR0VnSWVFMSUyRmhyakpMeFpjT3JJVnBWQzdUVzAwV21MV3lBTURFcyUyQmk5d1ZKRHRHMTdZMjF2Vm1OeExLcUlPa1FxcW9xMnFIT1JtZ2o5VVFjemE3bWdGbTRHbWlEak81QzcyRFNvUTZ1UFZUVyUyQnp1RlVjUTJ0ZUtkNHB6aGQ4YjZOdTZqZzd2WnNyYjFyQ2xFSXhodTdRMzd4NDdmSXkzaiUyRmk4aXFxbFV1RVdURk4lMkZPck1VM2ZFRXVoVU04RklQRHFaZ2NSSVZoc0FYeHRqR0RHUzVNJTJCUCUyRnYlMkJtN3lvcFZyUlZzUGFic1clMkJZRzFUJTJGeTNLYWhxU2c2Y0hSYjVjVG10NVpYaHhRN25TNnlac1ZXT2FqREZidzJKU0NTR0VJc3V5QyUyRiUyRm8wYVBwJTJGdjclMkJyOU5PNSUyRjVnTU9oSkxObiUyRnBRTHJMZnc2dGtLS29yQ0RnNE5QUCUyRm5ranglMkZMT3o5NmgyZW56eVp2ZiUyQmZ0SDl6YTJmbTZxTHJuTzl0R2sydlk4NmYlMkZNbGlXWlJkUG5qejV6Y09IRHolMkIlMkIlMkZpZmltb3J6djMxQzlYNzE4RyUyRllyQ1lTTkphNUxnQUFBQ0o2VkZoMFUyOW1kSGRoY21VQUFIamFLeTh2MTh2TXl5NU9UaXhJMWNzdlNnY0FOdGdHV0JCVHlsd0FBQUFBU1VWT1JLNUNZSUklM0QnKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCAjMDBhYTAwfWRpdi5vdGhlcmRhdGF1cmx7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQm9BQUFBYUNBWUFBQUNwU2t6T0FBQUFBWE5TUjBJQXJzNGM2UUFBQUFsd1NGbHpBQUFMRXdBQUN4TUJBSnFjR0FBQUFBZDBTVTFGQjlrRkJRMFdEV3dxd2p3QUFBTk1TVVJCVkVqSHJkWmJhRnhWRkFiZ2IyYVNURzZHVGk2bVZJd3hOeEY5cUZJMFJRbkZVcWlZYW11dFZ1dExhMnQ5RVkwb1BnZ0ZvWWdQUlIlMkZhZ2hZdmlBJTJCaUlBWXZtQkpLb1lXaWlCQ2lnVlRUMUZpc2JVaHJFdE5rSnBjNVB1UWtqR0VtSnFrTEZtZHoySHYlMkZhJTJGM3JYM3R2bG05NW9TJTJGTG9rdVp0SXBiZHZBczdLRnRMMjJ3amIzVjFDNDF1cHkya2UxRFhDMmslMkZCanYxSEhYRHJia0VhbWc3bFgyUDhRVGxkUTJVdGZPQjh1aUpzSE5pQiUyRmlrMEdtTyUyQmdaSXhnbkdBNTluR0NNb0pQZVFhWVAwNDdpQkRYWkVvaGtBWW9mNCUyRk55S2xaUmRSJTJGMUFTWkNub09NaFdrVWhlTXo5RjFsYUpTUlozZ0VxVncxaXBaUWpjb0JScmJUM0V6OU9KTGhaa0hHNUNEOGw4UTQ3cVhoTVpwJTJGWXhoVkZheEJMQnRRZWpkdEElMkZUdFpQTUlKbk9rbkkyV1NZemljVFlOOE90VHZJQ1piRUN4ZHI1UGttNmlQTDBDM2MlMkJna2ZJSmdpJTJGNExuUCUyRnVkUktEM0s0amYxVkpHTEVBaXV6NlZuQTRBR2FtMWg3Z3BOSXpTRmU2NkQzTnVyTEtWaEpOa0hvMDdOOVY5QkUzWEhPWW15ZXVpcnFHMWw5bWRIZ09rRFNHZDglMkZHV3RnOVJvYTU2bHJZZGNoRHRSUVBMbENrRXl3S1ZSU2NEZnJ1cm53QzJkaWlQVFJlNDdpVnRibkxaRHhja0dDa0tZcFBNJTJGUnIza2J5UmhzWU90UkRpUW9uRm9CU0hyQk9JMThyT2VPUHZyNzZZckNlVWJmNWZUdmpPZGRKMGdRMXVNUGt1OXo2aHdqaUVaaGdPTW4lMkJhYVVlSFFKSU9rTUQ3S01BNVFRUDAxSFAxOGhQYmZ2RFR2WlBFVHFiMllpUzFCV3Jvek02ams5U1BKSkhrWlo1cUZhZ3RvYU5uYnlaZzFGRTRzVVBSZGxBUXB3a2RTanZEWkFKJTJGb3hOdCUyQnc2TmxHYlFWRmw1aUtMS0tzWENBd3lGUVo4UzNjaXU2NWhvMWxCSjUlMkZrWmszT0JHanBKV0dtVkNtc2pUa1F2QThKSENVVTdzNWVJbWV2emclMkZkN0JHRmh6Q0FSSWY4dVZOM0o1SGVoMVZNJTJCSGxrbzJ5JTJGSEJ4RjBOSm9sZm8zOGVEdUpKeGJmMHJvJTJGbk11cmg4aE0lMkZ1cEg0dGRUOHpjaU9Gc1RDOFNBZ1FvSmZSeEt6Q3V2ZncwayUyRjhNRHg3eHFVeWV6JTJCUzQ4RVNJTjdLeTZPVXBmQXRyeHpoeDAzVVI0bTBjJTJGWkY3dG5LVzJtbWE0bDl5dXRoVFNJWkl2eFBpNkVjcFpXMFBNMHh0T3pqbyUyQmY0R1BmdjRyMXFOcUFVRllzOWRpSkxCQzFDSWE3Rlp4OGZVbHdJMjJMdU52JTJGZkxiS01BT2Z0SDlUd1JYZzYlMkZpQ0RBQUFBQUVsRlRrU3VRbUNDIil9Lnl1aS1za2luLXNhbSAueXVpLWgtc2xpZGVye2JhY2tncm91bmQ6dXJsKGJnLWguZ2lmKSBuby1yZXBlYXQgNXB4IDA7aGVpZ2h0OjI4cHg7d2lkdGg6MjI4cHh9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtdHdvdXJscy5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtYmFzZTY0LXR3b3VybHMub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYThiMjEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1iYXNlNjQtdHdvdXJscy5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1yaW5nLXZtbCwueXVpMy1za2luLW5pZ2h0IC55dWkzLWRpYWwtY2VudGVyLWJ1dHRvbi12bWwsLnl1aTMtc2tpbi1uaWdodCAueXVpMy1kaWFsLW1hcmtlciB2XDpvdmFsLnl1aTMtZGlhbC1tYXJrZXItbWF4LW1pbiwueXVpMy1za2luLW5pZ2h0IHZcOm92YWwueXVpMy1kaWFsLW1hcmtlci1tYXgtbWluLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1tYXJrZXItdm1sLC55dWkzLXNraW4tbmlnaHQgLnl1aTMtZGlhbC1oYW5kbGUtdm1se2JhY2tncm91bmQ6bm9uZTtvcGFjaXR5OjF9ZGl2LmJhc2U2NC1zaW5nbGVxdW90ZXN7d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQWdDQVlBQUFCemVucjBBQUFBQm1KTFIwUUFBQUFBQUFENVE3dCUyRkFBQUFDWEJJV1hNQUFBM1dBQUFOMWdHUWIzbWNBQUFGclVsRVFWUll3JTJCMlh6MjhrUnhYSFAlMkI5VmRjOHZqMmZHOXVJa20yeVVlRkdFaE5DS1F3QnBqMXlSVUJBbnBKVTRjZVpQNE14ZmtCeHkyR080NWJRWHVFR1FvaFVLaWdRJTJCc0JCRTFzYllYdjhZeiUyRlJNZDlmalVOMDlQVjVuRlpBNGtaWmE3OVczcXV1OWVyJTJGcU5meSUyRlB3SmdadHklMkZmeiUyRloyOXZycG1tcWhsV1RnbUZnMVVwYmZXaFloRzZZcTJjRmklMkZOcmo5bkp5V254JTJCUEhqZWFmYk1URXpQdmpWQjklMkI2ZCUyQiUyRmV6d2VEd1YxQmZIdWJpdmtDM2xaeWElMkY0bTdOcDhVWllYaHdlSEg3NzMzcnZ2QzBLeXY3JTJGJTJGN3AwN2QzNHFJanl2cjYzUk5iNGw0Q2JzUlVyTnJxNk9mdmZSUnolMkZ4RHg0ODZBJTJGNmc3dlhoWDlaSWYlMkJwNEpvbWFUb1pqOGQ3UGsxU0ZSRlhiMWFXb2RxMDlsJTJGOVladSUyRkNXTVZMOWUlMkZhVkZWUVZVUkVFRzhyM1ZVRVo0Y1glMkZITDMwJTJCNXNoUnRBaEZxNHdnZ05iNkdyWGdWYTJLMmpZdEFDSUh2N1N6NTRUZkhqV1dhZ0JPQnkwWGd0JTJCY2pMdHdReFZDcE53VVJRYXQxRGRZYVQ3cHdkd0tERkE2bmNIZ0ZpekptU2IzV0xQRGE3UE1JVmxiMmRhcVp4ZE9OVW5BZXRFb2pFZEJHaVhYaFRtQWpoWjAlMkIzTjZBbHplRVJPSDFUWGlXR2YlMkJjd21rV1pZbkFmQWtkeDFwcSUyQmhVYlQ5ejNJRWxVSmxWaEk0V3NnQ0xVeWdnaTRNUVlkNFZYTm1DWVJxWE9zcFY3VW9IYlEzaHBFTWVMQWs1bWtGWVJZbFdJJTJCSFo2Q1REd2tLU1FxckE3Z0ZlSE1GM0M2VnlZTG1GWkdpS0NFNkdyTUZzYVdiN3l1Vk9oNjZOMUZrVVVwQkozVHl2Rm92VG9CbDlYTWJOWTJiWjcwQnNLZlc5NGhieUVyb3NtWHBRd3k0VmdrQ2pNaXpqdlJSaWswRXRpTE53YWdCZjQ2NWx3T3F0a0VURW42MFhUMSUyQmxUYXpycEtsUiUyQktrb295M1hmYjNXajN3R1dKUlFobm5pN0I1M3E1RnFaNCUyRlVSN1BZaEdNeHl1TXdnV1ZxVHhyWVdBd1pZUVg3OEo1aThpZTl0eFNBa29PcXFRQXFrM3BCZ0tMRGhsWTVYVktQQ2kzdzk3WVJvS1NGYWNlQ2dGMmhxU1hSQlBRQUlPY1hSSDhoUCUyRjB5NiUyQlJwV0xyRXlnM1NiUzl0bXpnZ3pKUVNMUVpvNHhvT0U4VWJDc0pmUTd6aTZpYUlpelo1T0JWZlhES1BpcmVXQyUyQnZBWVdPQnFlc3psOUpnMDNhZmJINk9xR0glMkZCU1VycWJyRklYaUhvaUVEQyUyRlB5U2kyZDlublpISkU3b3BZN2RjWSUyRmRjWmVqODR6cFBHZlk5VXcyRXJZR0NmMk80bVVWRXpFTFd0cVV4WktqZjN6SzJjVVJ6aWNNUnklMkJ6dmJ1SDh5bEZQcVhJUHFOY3pDbEtZMW1VWkZjblNES2t2JTJGVU51cHRiV0clMkJMdyUyRk1oJTJGenJZcEtCSEtWM09OT1h6WXhlVjIwejQ5cWhzN2dhTVdJanFRUWlCeFZYQjRpcmcwNXl6NHUlMkZNcGllb0p1VExqREpmVUpZQnpCQUZVVUhraE12THZ6RlB1dlEySnZRM2R1aDBSJTJGanVpRFFkSW42TUpkdmt4VGFmWlVQdWFONlVhT282VU50Z05sOXdlYm9ndXdxb0E1ZkNqRXVzTkN6RThMSlFGUnVOcnpwUUQlMkJybVpOTTU1JTJGNEE1ejFKMmlIdERFZzZmWkswajB1SGxEcmgyTjRpM1B0dWMlMkJINXRqcDVIbGlXUW1tT1VBaGxZZTBycVVxV1NFT2hjWjA1QXZFMVVkQ29sU1FKYUhXbFNVWWdKeSUyRk8yZkZmbyUyRjM0cGlwaEZPWjRPcnZOZEw1RUpaYmNtRThPUXpGeElKRUdFZ0llRTElMkZocmpKTHhaY09ySVZwVkM3VFcwMFdtTFd5QU1ERXMlMkJpOXdWSkR0RzE3WTIxdlZtTnhMS3FJT2tRcXFvcTJxSE9SbWdqOVVRY3phN21nRm00R21pRGpPNUM3MkRTb1E2dVBWVFclMkJ6dUZVY1EydGVLZDRwemhkOGI2TnU2amc3dlpzcmIxckNsRUl4aHU3UTM3eDQ3Zkl5M2olMkZpOGlxcWxVdUVXVEZOJTJGT3JNVTNmRUV1aFVNOEZJUERxWmdjUklWaHNBWHh0akdER1M1TSUyQlAlMkZ2JTJCbTd5b3BWclJWc1BhYnNXJTJCWUcxVCUyRnkzS2FocVNnNmNIUmI1Y1RtdDVaWGh4UTduUzZ5WnNWV09hakRGYncySlNDU0dFSXN1eUMlMkYlMkZvMGFQcCUyRnY3JTJCcjlOTzUlMkY1Z01PaEpMTm4lMkZwUUxyTGZ3NnRrS0tvckNEZzROUFAlMkZua2p4JTJGTE96OTZoMmVuenladmYlMkJmdEg5emEyZm02cUxybk85dEdrMnZZODZmJTJGTWxpV1pSZFBuano1emNPSER6JTJCJTJCJTJGaWZpbW9yenYzMUM5WDcxOEclMkZZckNZU05KYTVMZ0FBQUNKNlZGaDBVMjltZEhkaGNtVUFBSGphS3k4djE4dk15eTVPVGl4STFjc3ZTZ2NBTnRnR1dCQlR5bHdBQUFBQVNVVk9SSzVDWUlJJTNEJyk7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO2JvcmRlcjoxcHggc29saWQgIzAwYWEwMH1kaXYub3RoZXJkYXRhdXJse2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJvQUFBQWFDQVlBQUFDcFNrek9BQUFBQVhOU1IwSUFyczRjNlFBQUFBbHdTRmx6QUFBTEV3QUFDeE1CQUpxY0dBQUFBQWQwU1UxRkI5a0ZCUTBXRFd3cXdqd0FBQU5NU1VSQlZFakhyZFpiYUZ4VkZBYmdiMmFTVEc2R1RpNm1WSXd4TnhGOXFGSTBSUW5GVXFpWWFtdXRWdXRMYTJ0OUVZMG9QZ2dGb1lnUFJSJTJGYWdoWXZpQSUyQmlJQVl2bUJKS29ZV2lpQkNpZ1ZUVDFGaXNiVWhyRXROa0pwYzVQdVFrakdFbUpxa0xGbWR6Mkh2JTJGYSUyRjNyWDN0dmxtOTVvUyUyRkxva3VadElwYmR2QXM3S0Z0TDIyd2piM1YxQzQxdXB5MmtlMURYQzJrJTJGQmp2MUhIWERyYmtFYW1nN2xYMlA4UVRsZFEyVXRmT0I4dWlKc0hOaUIlMkZpazBHbU8lMkJnWkl4Z25HQTU5bkdDTW9KUGVRYVlQMDQ3aUJEWFpFb2hrQVlvZjQlMkZOeUtsWlJkUiUyRjFBU1pDbm9PTWhXa1VoZU16OUYxbGFKU1JaM2dFcVZ3MWlwWlFqY29CUnJiVDNFejlPSkxoWmtIRzVDRDhsOFE0N3FYaE1acCUyRll4aFZGYXhCTEJ0UWVqZHRBJTJGVHRaUE1JSm5Pa25JMldTWXppY1RZTjhPdFR2SUNaYkVDeGRyNVBrbTZpUEwwQzNjJTJCZ2tmSUpnaSUyRjRMblAlMkZ1ZFJLRDNLNGpmMVZKR0xFQWl1ejZWbkE0QUdhbTFoN2dwTkl6U0ZlNjZEM051ckxLVmhKTmtIbzA3TjlWOUJFM1hIT1lteWV1aXJxRzFsOW1kSGdPa0RTR2Q4JTJGR1d0ZzlSb2E1NmxyWWRjaER0UlFQTGxDa0V5d0tWUlNjRGZydXJud0MyZGlpUFRSZTQ3aVZ0Ym5MWkR4Y2tHQ2tLWXBQTSUyRlJyM2tieVJoc1lPdFJEaVFvbkZvQlNIckJPSTE4ck9lT1B2cjc2WXJDZVViZjVmVHZqT2RkSjBnUTF1TVBrdTl6Nmh3amlFWmhnT01uJTJCYWFVZUhRSklPa01EN0tNQTVRUVAwMUhQMThoUGJmdkRUdlpQRVRxYjJZaVMxQldyb3pNNmprOVNQSkpIa1paNXFGYWd0b2FObmJ5WmcxRkU0c1VQUmRsQVFwd2tkU2p2RFpBSiUyRm94TnQlMkJ3Nk5sR2JRVkZsNWlLTEtLc1hDQXd5RlFaOFMzY2l1NjVobzFsQko1JTJGa1prM09CR2pwSldHbVZDbXNqVGtRdkE4SkhDVVU3czVlSW1ldnpnJTJGZDdCR0ZoekNBUklmOHVWTjNKNUhlaDFWTSUyQkhsa28yeSUyRkhCeEYwTkpvbGZvMzhlRHVKSnhiZjBybyUyRm5NdXJoOGhNJTJGdXBINHRkVDh6Y2lPRnNUQzhTQWdRb0pmUnhLekN1dmZ3MGslMkY4TUR4N3hxVXlleiUyQlM0OEVTSU43S3k2T1VwZkF0cnh6aHgwM1VSNG0wYyUyRlpGN3RuS1cybW1hNGw5eXV0aFRTSVpJdnhQaTZFY3BaVzBQTTB4dE96am8lMkJmNEdQZnY0cjFxTnFBVUZZczlkaUpMQkMxQ0lhN0ZaeDhmVWx3STIyTHVOdiUyRmZMYktNQU9mdEg5VHdSWGc2JTJGaUNEQUFBQUFFbEZUa1N1UW1DQyIpfS55dWktc2tpbi1zYW0gLnl1aS1oLXNsaWRlcntiYWNrZ3JvdW5kOnVybChiZy1oLmdpZikgbm8tcmVwZWF0IDVweCAwO2hlaWdodDoyOHB4O3dpZHRoOjIyOHB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtZGJxdW90ZS1mb250Lm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtZGJxdW90ZS1mb250Lm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M0YzBlZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLWRicXVvdGUtZm9udC5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLS55LWZmLTF7Zm9udC1mYW1pbHk6IkZvbyBCYXIiLEhlbHZldGljYSxBcmlhbDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHl9LnVhLW9wIC55LWZmLTF7Zm9udC1mYW1pbHk6SGVsdmV0aWNhLEFyaWFsfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6IkZvbyBCYXIiO3NyYzp1cmwoImRhdGE6Zm9udC90cnVldHlwZTtiYXNlNjQsZ1JiSVVGQUlyc1FOR2RpdEVXYkFVS3dBQSIpIGZvcm1hdCgidHJ1ZXR5cGUiKSx1cmwoImh0dHA6Ly95dWlsaWJyYXJ5LmNvbS9mb250cy9mb28tYmFyLnN2ZyN3ZWJmb250c2UyMmZld3dyIikgZm9ybWF0KCJzdmciKTtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWx9Ci0KLQotCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtZGJxdW90ZS1mb250Lm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1kYnF1b3RlLWZvbnQub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNGMwZWQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1kYnF1b3RlLWZvbnQub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLS55LWZmLTF7Zm9udC1mYW1pbHk6IkZvbyBCYXIiLEhlbHZldGljYSxBcmlhbDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHl9LnVhLW9wIC55LWZmLTF7Zm9udC1mYW1pbHk6SGVsdmV0aWNhLEFyaWFsfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6IkZvbyBCYXIiO3NyYzp1cmwoImRhdGE6Zm9udC90cnVldHlwZTtiYXNlNjQsZ1JiSVVGQUlyc1FOR2RpdEVXYkFVS3dBQSIpIGZvcm1hdCgidHJ1ZXR5cGUiKSx1cmwoImh0dHA6Ly95dWlsaWJyYXJ5LmNvbS9mb250cy9mb28tYmFyLnN2ZyN3ZWJmb250c2UyMmZld3dyIikgZm9ybWF0KCJzdmciKTtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWx9Ci0KLQotCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtbm9uYmFzZTY0LWRvdWJsZXF1b3Rlcy5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLW5vbmJhc2U2NC1kb3VibGVxdW90ZXMub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzAxZjEwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtbm9uYmFzZTY0LWRvdWJsZXF1b3Rlcy5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1kaXYubm9uYmFzZTY0LWRvdWJsZXF1b3Rlc3t3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMEMlMDAlMDAlMDAlMEUlMDglMDMlMDAlMDAlMDAlMkNjJTBEJURFJTAwJTAwJTAwJUEyUExURVFRUSVGQSVGQSVGQSVGQyVGQyVGQyVFRSVFRSVFRSVBOSVBOSVBOSVFOSVFOSVFOSUwQSUwQSUwQSUwRCUwRCUwRDQ0NFBQUCVDRCVDRCVDRCVDQyVDQyVDQyVGNSVGNSVGNVVVVSVEMCVEMCVEMCcnJyVGOSVGOSVGOSVBNiVBNiVBNiU0MCU0MCU0MEZGRiVBMCVBMCVBMCU4OSU4OSU4OSU4RCU4RCU4RCUyMCUyMCUyMCUxNCUxNCUxNCVEQSVEQSVEQSVCNiVCNiVCNiUwMiUwMiUwMiU4NyU4NyU4NyU4MSU4MSU4MSVBQyVBQyVBQyUwRSUwRSUwRTExMSU3RCU3RCU3RCU5MiU5MiU5MjMzMyVCOSVCOSVCOSVCQyVCQyVCQ2hoaCkpKSVFMSVFMSVFMSUwMyUwMyUwMyVDQiVDQiVDQiVFQiVFQiVFQiVGRCVGRCVGRCVBMyVBMyVBMygoKCUwNCUwNCUwNCVDQSVDQSVDQXR0dCUyQyUyQyUyQyVGNCVGNCVGNCUwMCUwMCUwMCVGRiVGRiVGRiVENiVERSUwMiVDMyUwMCUwMCUwMDZ0Uk5TJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJTAwJUExJThGTjElMDAlMDAlMDBpSURBVCUwOCVEN0UlQzdFJTE2JTAyUSUxMCVDNSVEMGolQzMlREQlQkRxdyU1RSVGNiVCRjUlMDYlRDQlM0ZkJTk0a3glQkRmJURFNiVGRklBJUFCJUM4cVlqJTFGJUUzWGslOTMlRTAlQzhKWiUxMCU5MCU5RSUzQTElNjAlQkJZJTg1JUE4JUFFJTE0JUMwJTVFJTFBNiU4RSVDNXclMDIlNjAlOTklQzklRkElOUElMDMlNjAlOEMlRUZ6JThDJUNFJTBFblN1JTNGJTAxJUFEJUIyJTA2JTA0JUYwJTNDVCVGRiVCOG5rJTNGJTdDJTAxJUM1eiUxQiVGOSUyNiUyRiUzQXolMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MiIpO2JvcmRlcjoxcHggc29saWQgIzAwYWEwMH1zcGFuLm90aGVyY3Nze2ZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO2ZvbnQtd2VpZ2h0OmluaGVyaXR9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1ub25iYXNlNjQtZG91YmxlcXVvdGVzLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1ub25iYXNlNjQtZG91YmxlcXVvdGVzLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzAxZjEwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtbm9uYmFzZTY0LWRvdWJsZXF1b3Rlcy5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWRpdi5ub25iYXNlNjQtZG91YmxlcXVvdGVze3dpZHRoOjEwMHB4O2hlaWdodDoxMDBweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmcsJTg5UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUwQyUwMCUwMCUwMCUwRSUwOCUwMyUwMCUwMCUwMCUyQ2MlMEQlREUlMDAlMDAlMDAlQTJQTFRFUVFRJUZBJUZBJUZBJUZDJUZDJUZDJUVFJUVFJUVFJUE5JUE5JUE5JUU5JUU5JUU5JTBBJTBBJTBBJTBEJTBEJTBENDQ0UFBQJUNEJUNEJUNEJUNDJUNDJUNDJUY1JUY1JUY1VVVVJUQwJUQwJUQwJycnJUY5JUY5JUY5JUE2JUE2JUE2JTQwJTQwJTQwRkZGJUEwJUEwJUEwJTg5JTg5JTg5JThEJThEJThEJTIwJTIwJTIwJTE0JTE0JTE0JURBJURBJURBJUI2JUI2JUI2JTAyJTAyJTAyJTg3JTg3JTg3JTgxJTgxJTgxJUFDJUFDJUFDJTBFJTBFJTBFMTExJTdEJTdEJTdEJTkyJTkyJTkyMzMzJUI5JUI5JUI5JUJDJUJDJUJDaGhoKSkpJUUxJUUxJUUxJTAzJTAzJTAzJUNCJUNCJUNCJUVCJUVCJUVCJUZEJUZEJUZEJUEzJUEzJUEzKCgoJTA0JTA0JTA0JUNBJUNBJUNBdHR0JTJDJTJDJTJDJUY0JUY0JUY0JTAwJTAwJTAwJUZGJUZGJUZGJUQ2JURFJTAyJUMzJTAwJTAwJTAwNnRSTlMlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlMDAlQTElOEZOMSUwMCUwMCUwMGlJREFUJTA4JUQ3RSVDN0UlMTYlMDJRJTEwJUM1JUQwaiVDMyVERCVCRHF3JTVFJUY2JUJGNSUwNiVENCUzRmQlOTRreCVCRGYlREU2JUZGSUElQUIlQzhxWWolMUYlRTNYayU5MyVFMCVDOEpaJTEwJTkwJTlFJTNBMSU2MCVCQlklODUlQTglQUUlMTQlQzAlNUUlMUE2JThFJUM1dyUwMiU2MCU5OSVDOSVGQSU5QSUwMyU2MCU4QyVFRnolOEMlQ0UlMEVuU3UlM0YlMDElQUQlQjIlMDYlMDQlRjAlM0NUJUZGJUI4bmslM0YlN0MlMDElQzV6JTFCJUY5JTI2JTJGJTNBeiUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyIik7Ym9yZGVyOjFweCBzb2xpZCAjMDBhYTAwfXNwYW4ub3RoZXJjc3N7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Zm9udC13ZWlnaHQ6aW5oZXJpdH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLW5vbmJhc2U2NC1ub3F1b3Rlcy5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLW5vbmJhc2U2NC1ub3F1b3Rlcy5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNGJmMDguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1ub25iYXNlNjQtbm9xdW90ZXMub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZGl2Lm5vbmJhc2U2NC1ub3F1b3Rlc3t3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmcsJTg5UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUwQyUwMCUwMCUwMCUwRSUwOCUwMyUwMCUwMCUwMCUyQ2MlMEQlREUlMDAlMDAlMDAlQTJQTFRFUVFRJUZBJUZBJUZBJUZDJUZDJUZDJUVFJUVFJUVFJUE5JUE5JUE5JUU5JUU5JUU5JTBBJTBBJTBBJTBEJTBEJTBENDQ0UFBQJUNEJUNEJUNEJUNDJUNDJUNDJUY1JUY1JUY1VVVVJUQwJUQwJUQwXCdcJ1wnJUY5JUY5JUY5JUE2JUE2JUE2JTQwJTQwJTQwRkZGJUEwJUEwJUEwJTg5JTg5JTg5JThEJThEJThEJTIwJTIwJTIwJTE0JTE0JTE0JURBJURBJURBJUI2JUI2JUI2JTAyJTAyJTAyJTg3JTg3JTg3JTgxJTgxJTgxJUFDJUFDJUFDJTBFJTBFJTBFMTExJTdEJTdEJTdEJTkyJTkyJTkyMzMzJUI5JUI5JUI5JUJDJUJDJUJDaGhoXClcKVwpJUUxJUUxJUUxJTAzJTAzJTAzJUNCJUNCJUNCJUVCJUVCJUVCJUZEJUZEJUZEJUEzJUEzJUEzXChcKFwoJTA0JTA0JTA0JUNBJUNBJUNBdHR0JTJDJTJDJTJDJUY0JUY0JUY0JTAwJTAwJTAwJUZGJUZGJUZGJUQ2JURFJTAyJUMzJTAwJTAwJTAwNnRSTlMlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlMDAlQTElOEZOMSUwMCUwMCUwMGlJREFUJTA4JUQ3RSVDN0UlMTYlMDJRJTEwJUM1JUQwaiVDMyVERCVCRHF3JTVFJUY2JUJGNSUwNiVENCUzRmQlOTRreCVCRGYlREU2JUZGSUElQUIlQzhxWWolMUYlRTNYayU5MyVFMCVDOEpaJTEwJTkwJTlFJTNBMSU2MCVCQlklODUlQTglQUUlMTQlQzAlNUUlMUE2JThFJUM1dyUwMiU2MCU5OSVDOSVGQSU5QSUwMyU2MCU4QyVFRnolOEMlQ0UlMEVuU3UlM0YlMDElQUQlQjIlMDYlMDQlRjAlM0NUJUZGJUI4bmslM0YlN0MlMDElQzV6JTFCJUY5JTI2JTJGJTNBeiUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyKTtib3JkZXI6MXB4IHNvbGlkIHJlZH1zcGFuLm90aGVyY3Nze2ZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLW5vbmJhc2U2NC1ub3F1b3Rlcy5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtbm9uYmFzZTY0LW5vcXVvdGVzLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjRiZjA4Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtbm9uYmFzZTY0LW5vcXVvdGVzLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZGl2Lm5vbmJhc2U2NC1ub3F1b3Rlc3t3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmcsJTg5UE5HJTBEJTBBJTFBJTBBJTAwJTAwJTAwJTBESUhEUiUwMCUwMCUwMCUwQyUwMCUwMCUwMCUwRSUwOCUwMyUwMCUwMCUwMCUyQ2MlMEQlREUlMDAlMDAlMDAlQTJQTFRFUVFRJUZBJUZBJUZBJUZDJUZDJUZDJUVFJUVFJUVFJUE5JUE5JUE5JUU5JUU5JUU5JTBBJTBBJTBBJTBEJTBEJTBENDQ0UFBQJUNEJUNEJUNEJUNDJUNDJUNDJUY1JUY1JUY1VVVVJUQwJUQwJUQwXCdcJ1wnJUY5JUY5JUY5JUE2JUE2JUE2JTQwJTQwJTQwRkZGJUEwJUEwJUEwJTg5JTg5JTg5JThEJThEJThEJTIwJTIwJTIwJTE0JTE0JTE0JURBJURBJURBJUI2JUI2JUI2JTAyJTAyJTAyJTg3JTg3JTg3JTgxJTgxJTgxJUFDJUFDJUFDJTBFJTBFJTBFMTExJTdEJTdEJTdEJTkyJTkyJTkyMzMzJUI5JUI5JUI5JUJDJUJDJUJDaGhoXClcKVwpJUUxJUUxJUUxJTAzJTAzJTAzJUNCJUNCJUNCJUVCJUVCJUVCJUZEJUZEJUZEJUEzJUEzJUEzXChcKFwoJTA0JTA0JTA0JUNBJUNBJUNBdHR0JTJDJTJDJTJDJUY0JUY0JUY0JTAwJTAwJTAwJUZGJUZGJUZGJUQ2JURFJTAyJUMzJTAwJTAwJTAwNnRSTlMlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlRkYlMDAlQTElOEZOMSUwMCUwMCUwMGlJREFUJTA4JUQ3RSVDN0UlMTYlMDJRJTEwJUM1JUQwaiVDMyVERCVCRHF3JTVFJUY2JUJGNSUwNiVENCUzRmQlOTRreCVCRGYlREU2JUZGSUElQUIlQzhxWWolMUYlRTNYayU5MyVFMCVDOEpaJTEwJTkwJTlFJTNBMSU2MCVCQlklODUlQTglQUUlMTQlQzAlNUUlMUE2JThFJUM1dyUwMiU2MCU5OSVDOSVGQSU5QSUwMyU2MCU4QyVFRnolOEMlQ0UlMEVuU3UlM0YlMDElQUQlQjIlMDYlMDQlRjAlM0NUJUZGJUI4bmslM0YlN0MlMDElQzV6JTFCJUY5JTI2JTJGJTNBeiUwMCUwMCUwMCUwMElFTkQlQUVCJTYwJTgyKTtib3JkZXI6MXB4IHNvbGlkIHJlZH1zcGFuLm90aGVyY3Nze2ZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLW5vbmJhc2U2NC1zaW5nbGVxdW90ZXMub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1ub25iYXNlNjQtc2luZ2xlcXVvdGVzLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYzMTAwZS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLW5vbmJhc2U2NC1zaW5nbGVxdW90ZXMub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZGl2Lm5vbmJhc2U2NC1zaW5nbGVxdW90ZXN7d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCdkYXRhOmltYWdlL3BuZywlODlQTkclMEQlMEElMUElMEElMDAlMDAlMDAlMERJSERSJTAwJTAwJTAwJTBDJTAwJTAwJTAwJTBFJTA4JTAzJTAwJTAwJTAwJTJDYyUwRCVERSUwMCUwMCUwMCVBMlBMVEVRUVElRkElRkElRkElRkMlRkMlRkMlRUUlRUUlRUUlQTklQTklQTklRTklRTklRTklMEElMEElMEElMEQlMEQlMEQ0NDRQUFAlQ0QlQ0QlQ0QlQ0MlQ0MlQ0MlRjUlRjUlRjVVVVUlRDAlRDAlRDBcJ1wnXCclRjklRjklRjklQTYlQTYlQTYlNDAlNDAlNDBGRkYlQTAlQTAlQTAlODklODklODklOEQlOEQlOEQlMjAlMjAlMjAlMTQlMTQlMTQlREElREElREElQjYlQjYlQjYlMDIlMDIlMDIlODclODclODclODElODElODElQUMlQUMlQUMlMEUlMEUlMEUxMTElN0QlN0QlN0QlOTIlOTIlOTIzMzMlQjklQjklQjklQkMlQkMlQkNoaGgpKSklRTElRTElRTElMDMlMDMlMDMlQ0IlQ0IlQ0IlRUIlRUIlRUIlRkQlRkQlRkQlQTMlQTMlQTMoKCglMDQlMDQlMDQlQ0ElQ0ElQ0F0dHQlMkMlMkMlMkMlRjQlRjQlRjQlMDAlMDAlMDAlRkYlRkYlRkYlRDYlREUlMDIlQzMlMDAlMDAlMDA2dFJOUyVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiVGRiUwMCVBMSU4Rk4xJTAwJTAwJTAwaUlEQVQlMDglRDdFJUM3RSUxNiUwMlElMTAlQzUlRDBqJUMzJUREJUJEcXclNUUlRjYlQkY1JTA2JUQ0JTNGZCU5NGt4JUJEZiVERTYlRkZJQSVBQiVDOHFZaiUxRiVFM1hrJTkzJUUwJUM4SlolMTAlOTAlOUUlM0ExJTYwJUJCWSU4NSVBOCVBRSUxNCVDMCU1RSUxQTYlOEUlQzV3JTAyJTYwJTk5JUM5JUZBJTlBJTAzJTYwJThDJUVGeiU4QyVDRSUwRW5TdSUzRiUwMSVBRCVCMiUwNiUwNCVGMCUzQ1QlRkYlQjhuayUzRiU3QyUwMSVDNXolMUIlRjklMjYlMkYlM0F6JTAwJTAwJTAwJTAwSUVORCVBRUIlNjAlODInKTtib3JkZXI6MXB4IHNvbGlkICMwMDAwYWF9c3Bhbi5vdGhlcmNzc3tmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjtmb250LXdlaWdodDppbmhlcml0fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtbm9uYmFzZTY0LXNpbmdsZXF1b3Rlcy5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtbm9uYmFzZTY0LXNpbmdsZXF1b3Rlcy5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYzMTAwZS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLW5vbmJhc2U2NC1zaW5nbGVxdW90ZXMub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1kaXYubm9uYmFzZTY0LXNpbmdsZXF1b3Rlc3t3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoJ2RhdGE6aW1hZ2UvcG5nLCU4OVBORyUwRCUwQSUxQSUwQSUwMCUwMCUwMCUwRElIRFIlMDAlMDAlMDAlMEMlMDAlMDAlMDAlMEUlMDglMDMlMDAlMDAlMDAlMkNjJTBEJURFJTAwJTAwJTAwJUEyUExURVFRUSVGQSVGQSVGQSVGQyVGQyVGQyVFRSVFRSVFRSVBOSVBOSVBOSVFOSVFOSVFOSUwQSUwQSUwQSUwRCUwRCUwRDQ0NFBQUCVDRCVDRCVDRCVDQyVDQyVDQyVGNSVGNSVGNVVVVSVEMCVEMCVEMFwnXCdcJyVGOSVGOSVGOSVBNiVBNiVBNiU0MCU0MCU0MEZGRiVBMCVBMCVBMCU4OSU4OSU4OSU4RCU4RCU4RCUyMCUyMCUyMCUxNCUxNCUxNCVEQSVEQSVEQSVCNiVCNiVCNiUwMiUwMiUwMiU4NyU4NyU4NyU4MSU4MSU4MSVBQyVBQyVBQyUwRSUwRSUwRTExMSU3RCU3RCU3RCU5MiU5MiU5MjMzMyVCOSVCOSVCOSVCQyVCQyVCQ2hoaCkpKSVFMSVFMSVFMSUwMyUwMyUwMyVDQiVDQiVDQiVFQiVFQiVFQiVGRCVGRCVGRCVBMyVBMyVBMygoKCUwNCUwNCUwNCVDQSVDQSVDQXR0dCUyQyUyQyUyQyVGNCVGNCVGNCUwMCUwMCUwMCVGRiVGRiVGRiVENiVERSUwMiVDMyUwMCUwMCUwMDZ0Uk5TJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJUZGJTAwJUExJThGTjElMDAlMDAlMDBpSURBVCUwOCVEN0UlQzdFJTE2JTAyUSUxMCVDNSVEMGolQzMlREQlQkRxdyU1RSVGNiVCRjUlMDYlRDQlM0ZkJTk0a3glQkRmJURFNiVGRklBJUFCJUM4cVlqJTFGJUUzWGslOTMlRTAlQzhKWiUxMCU5MCU5RSUzQTElNjAlQkJZJTg1JUE4JUFFJTE0JUMwJTVFJTFBNiU4RSVDNXclMDIlNjAlOTklQzklRkElOUElMDMlNjAlOEMlRUZ6JThDJUNFJTBFblN1JTNGJTAxJUFEJUIyJTA2JTA0JUYwJTNDVCVGRiVCOG5rJTNGJTdDJTAxJUM1eiUxQiVGOSUyNiUyRiUzQXolMDAlMDAlMDAlMDBJRU5EJUFFQiU2MCU4MicpO2JvcmRlcjoxcHggc29saWQgIzAwMDBhYX1zcGFuLm90aGVyY3Nze2ZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO2ZvbnQtd2VpZ2h0OmluaGVyaXR9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1ub3F1b3RlLW11bHRpbGluZS1mb250Lm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtbm9xdW90ZS1tdWx0aWxpbmUtZm9udC5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMzJlMzMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1ub3F1b3RlLW11bHRpbGluZS1mb250Lm91dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLnktZmYtMXtmb250LWZhbWlseToiRm9vIEJhciIsSGVsdmV0aWNhLEFyaWFsO3RleHQtcmVuZGVyaW5nOm9wdGltaXplTGVnaWJpbGl0eX0udWEtb3AgLnktZmYtMXtmb250LWZhbWlseTpIZWx2ZXRpY2EsQXJpYWx9QGZvbnQtZmFjZXtmb250LWZhbWlseToiRm9vIEJhciI7c3JjOnVybChkYXRhOmZvbnQvdHJ1ZXR5cGU7YmFzZTY0LGdSYklVRkFJcnNRTkdkaXRFV2JBVUt3QUEpIGZvcm1hdCgidHJ1ZXR5cGUiKSx1cmwoImh0dHA6Ly95dWlsaWJyYXJ5LmNvbS9mb250cy9mb28tYmFyLnN2ZyN3ZWJmb250c2UyMmZld3dyIikgZm9ybWF0KCJzdmciKTtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWx9Ci0KLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1ub3F1b3RlLW11bHRpbGluZS1mb250Lm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1ub3F1b3RlLW11bHRpbGluZS1mb250Lm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjMyZTMzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtbm9xdW90ZS1tdWx0aWxpbmUtZm9udC5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLnktZmYtMXtmb250LWZhbWlseToiRm9vIEJhciIsSGVsdmV0aWNhLEFyaWFsO3RleHQtcmVuZGVyaW5nOm9wdGltaXplTGVnaWJpbGl0eX0udWEtb3AgLnktZmYtMXtmb250LWZhbWlseTpIZWx2ZXRpY2EsQXJpYWx9QGZvbnQtZmFjZXtmb250LWZhbWlseToiRm9vIEJhciI7c3JjOnVybChkYXRhOmZvbnQvdHJ1ZXR5cGU7YmFzZTY0LGdSYklVRkFJcnNRTkdkaXRFV2JBVUt3QUEpIGZvcm1hdCgidHJ1ZXR5cGUiKSx1cmwoImh0dHA6Ly95dWlsaWJyYXJ5LmNvbS9mb250cy9mb28tYmFyLnN2ZyN3ZWJmb250c2UyMmZld3dyIikgZm9ybWF0KCJzdmciKTtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWx9Ci0KLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1yZWFsZGF0YS1kb3VibGVxdW90ZXMub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1yZWFsZGF0YS1kb3VibGVxdW90ZXMub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWU3NjAwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtcmVhbGRhdGEtZG91YmxlcXVvdGVzLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWZpcnN0LC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbWlkZGxlLC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVlBQUFBQkNBWUFBQUQ5eWQvd0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBQkpKUkVGVWVOcGlaR0JnU0dQQUFnQUNEQUFJa0FCb0Z5bG9aUUFBQUFCSlJVNUVya0pnZ2c9PSIpfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctZmlyc3QsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDowfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApOy1tb3otYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6M3B4Oy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbWlkZGxle2JvcmRlci1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGVZKDEpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi15OjA7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCkgc2NhbGVZKDEpOy1tb3otdHJhbnNmb3JtLW9yaWdpbjowIDB9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1maXJzdCwueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LWxhc3R7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDozcHh9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6MDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6M3B4fS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctbWlkZGxley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVgoMSk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKSBzY2FsZVgoMSk7LW1vei10cmFuc2Zvcm0tb3JpZ2luOjAgMH0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci12ZXJ0LWJhc2ljIC55dWkzLXNjcm9sbHZpZXctY2hpbGQsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXotYmFzaWMgLnl1aTMtc2Nyb2xsdmlldy1jaGlsZHtiYWNrZ3JvdW5kLWNvbG9yOiNhYWE7YmFja2dyb3VuZC1pbWFnZTpub25lfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1yZWFsZGF0YS1kb3VibGVxdW90ZXMub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLXJlYWxkYXRhLWRvdWJsZXF1b3Rlcy5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjllNzYwMC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLXJlYWxkYXRhLWRvdWJsZXF1b3Rlcy5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWZpcnN0LC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbWlkZGxlLC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVlBQUFBQkNBWUFBQUQ5eWQvd0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBQkpKUkVGVWVOcGlaR0JnU0dQQUFnQUNEQUFJa0FCb0Z5bG9aUUFBQUFCSlJVNUVya0pnZ2c9PSIpfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctZmlyc3QsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDowfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApOy1tb3otYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6M3B4Oy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbWlkZGxle2JvcmRlci1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGVZKDEpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi15OjA7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCkgc2NhbGVZKDEpOy1tb3otdHJhbnNmb3JtLW9yaWdpbjowIDB9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1maXJzdCwueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LWxhc3R7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDozcHh9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6MDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6M3B4fS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctbWlkZGxley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVgoMSk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKSBzY2FsZVgoMSk7LW1vei10cmFuc2Zvcm0tb3JpZ2luOjAgMH0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci12ZXJ0LWJhc2ljIC55dWkzLXNjcm9sbHZpZXctY2hpbGQsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXotYmFzaWMgLnl1aTMtc2Nyb2xsdmlldy1jaGlsZHtiYWNrZ3JvdW5kLWNvbG9yOiNhYWE7YmFja2dyb3VuZC1pbWFnZTpub25lfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1yZWFsZGF0YS1ub3F1b3Rlcy5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLXJlYWxkYXRhLW5vcXVvdGVzLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwZjlmYy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLXJlYWxkYXRhLW5vcXVvdGVzLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWZpcnN0LC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbWlkZGxlLC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBWUFBQUFCQ0FZQUFBRDl5ZC93QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFCSkpSRUZVZU5waVpHQmdTR1BBQWdBQ0RBQUlrQUJvRnlsb1pRQUFBQUJKUlU1RXJrSmdnZz09KX0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWZpcnN0LC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjA7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6MH0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWxhc3R7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4Oy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTstbW96LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjNweDstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LW1pZGRsZXtib3JkZXItcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlWSgxKTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4teTowOy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApIHNjYWxlWSgxKTstbW96LXRyYW5zZm9ybS1vcmlnaW46MCAwfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctZmlyc3QsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjA7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6M3B4fS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowOy13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjA7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjNweH0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LW1pZGRsZXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGVYKDEpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCkgc2NhbGVYKDEpOy1tb3otdHJhbnNmb3JtLW9yaWdpbjowIDB9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItdmVydC1iYXNpYyAueXVpMy1zY3JvbGx2aWV3LWNoaWxkLC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6LWJhc2ljIC55dWkzLXNjcm9sbHZpZXctY2hpbGR7YmFja2dyb3VuZC1jb2xvcjojYWFhO2JhY2tncm91bmQtaW1hZ2U6bm9uZX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLXJlYWxkYXRhLW5vcXVvdGVzLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1yZWFsZGF0YS1ub3F1b3Rlcy5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwZjlmYy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLXJlYWxkYXRhLW5vcXVvdGVzLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXJ7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApOy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctZmlyc3QsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1taWRkbGUsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFZQUFBQUJDQVlBQUFEOXlkL3dBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUJKSlJFRlVlTnBpWkdCZ1NHUEFBZ0FDREFBSWtBQm9GeWxvWlFBQUFBQkpSVTVFcmtKZ2dnPT0pfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctZmlyc3QsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDowfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApOy1tb3otYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6M3B4Oy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbWlkZGxle2JvcmRlci1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGVZKDEpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi15OjA7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCkgc2NhbGVZKDEpOy1tb3otdHJhbnNmb3JtLW9yaWdpbjowIDB9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1maXJzdCwueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LWxhc3R7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDozcHh9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6MDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6M3B4fS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctbWlkZGxley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVgoMSk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKSBzY2FsZVgoMSk7LW1vei10cmFuc2Zvcm0tb3JpZ2luOjAgMH0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci12ZXJ0LWJhc2ljIC55dWkzLXNjcm9sbHZpZXctY2hpbGQsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXotYmFzaWMgLnl1aTMtc2Nyb2xsdmlldy1jaGlsZHtiYWNrZ3JvdW5kLWNvbG9yOiNhYWE7YmFja2dyb3VuZC1pbWFnZTpub25lfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtcmVhbGRhdGEtc2luZ2xlcXVvdGVzLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtcmVhbGRhdGEtc2luZ2xlcXVvdGVzLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE0ZTJjNi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLXJlYWxkYXRhLXNpbmdsZXF1b3Rlcy5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhcnstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1maXJzdCwueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LW1pZGRsZSwueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWxhc3R7Ym9yZGVyLXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFZQUFBQUJDQVlBQUFEOXlkL3dBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUJKSlJFRlVlTnBpWkdCZ1NHUEFBZ0FDREFBSWtBQm9GeWxvWlFBQUFBQkpSVTVFcmtKZ2dnPT0nKX0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWZpcnN0LC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjA7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6MH0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWxhc3R7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4Oy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTstbW96LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjNweDstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LW1pZGRsZXtib3JkZXItcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlWSgxKTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4teTowOy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApIHNjYWxlWSgxKTstbW96LXRyYW5zZm9ybS1vcmlnaW46MCAwfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctZmlyc3QsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjA7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6M3B4fS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowOy13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjA7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjNweH0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LW1pZGRsZXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGVYKDEpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCkgc2NhbGVYKDEpOy1tb3otdHJhbnNmb3JtLW9yaWdpbjowIDB9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItdmVydC1iYXNpYyAueXVpMy1zY3JvbGx2aWV3LWNoaWxkLC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6LWJhc2ljIC55dWkzLXNjcm9sbHZpZXctY2hpbGR7YmFja2dyb3VuZC1jb2xvcjojYWFhO2JhY2tncm91bmQtaW1hZ2U6bm9uZX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLXJlYWxkYXRhLXNpbmdsZXF1b3Rlcy5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtcmVhbGRhdGEtc2luZ2xlcXVvdGVzLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTRlMmM2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtcmVhbGRhdGEtc2luZ2xlcXVvdGVzLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXJ7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApOy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyIC55dWkzLXNjcm9sbHZpZXctZmlyc3QsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1taWRkbGUsLnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBWUFBQUFCQ0FZQUFBRDl5ZC93QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFCSkpSRUZVZU5waVpHQmdTR1BBQWdBQ0RBQUlrQUJvRnlsb1pRQUFBQUJKUlU1RXJrSmdnZz09Jyl9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1maXJzdCwueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhciAueXVpMy1zY3JvbGx2aWV3LWxhc3R7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDowOy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjB9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1sYXN0e2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7LW1vei1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjNweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDozcHg7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXIgLnl1aTMtc2Nyb2xsdmlldy1taWRkbGV7Ym9yZGVyLXJhZGl1czowOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVkoMSk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXk6MDstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKSBzY2FsZVkoMSk7LW1vei10cmFuc2Zvcm0tb3JpZ2luOjAgMH0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LWZpcnN0LC55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLWhvcml6IC55dWkzLXNjcm9sbHZpZXctbGFzdHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4Oy13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDowOy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjNweH0ueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3JpeiAueXVpMy1zY3JvbGx2aWV3LWxhc3R7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDowOy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDozcHh9Lnl1aTMtc2tpbi1zYW0gLnl1aTMtc2Nyb2xsdmlldy1zY3JvbGxiYXItaG9yaXogLnl1aTMtc2Nyb2xsdmlldy1taWRkbGV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlWCgxKTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MCAwOy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApIHNjYWxlWCgxKTstbW96LXRyYW5zZm9ybS1vcmlnaW46MCAwfS55dWkzLXNraW4tc2FtIC55dWkzLXNjcm9sbHZpZXctc2Nyb2xsYmFyLXZlcnQtYmFzaWMgLnl1aTMtc2Nyb2xsdmlldy1jaGlsZCwueXVpMy1za2luLXNhbSAueXVpMy1zY3JvbGx2aWV3LXNjcm9sbGJhci1ob3Jpei1iYXNpYyAueXVpMy1zY3JvbGx2aWV3LWNoaWxke2JhY2tncm91bmQtY29sb3I6I2FhYTtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1yZWFsZGF0YS15dWlhcHAub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1yZWFsZGF0YS15dWlhcHAub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDVlOTk4Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtcmVhbGRhdGEteXVpYXBwLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWh0bWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM1NTU7aGVpZ2h0OjEwMCV9I2hkLCNiZCwjZnR7cGFkZGluZzowIDUwcHh9I2Jke3BhZGRpbmctYm90dG9tOjUwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzAwNmU5Y30jZnR7YmFja2dyb3VuZDp0cmFuc3BhcmVudCBuby1yZXBlYXQgMCUgMTAwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURjQUFBQWVDQU1BQUFDL3BuYUtBQUFBd0ZCTVZFVWtYSUFvWVlRb1lZUW9ZWVF5YW8wMmJwRTZjcFE2Y3BSRWU1MUxncU5VaXF0VWlxdFVpcXRaajdCY2tyTmxtcnRsbXJ0bG1ydHJvTUIzcXNwM3FzcDNxc3Arc2RDSHVkaUh1ZGlIdWRpSHVkaVB3TitZeU9hWXlPYVl5T2FmME8yZzBPNm4xdk9uMXZPbjF2T24xdk93M3Z1NDVmMjQ1ZjI0NWYzQjdmN0s5ZjdLOWY3SzlmN1gvdjdYL3Y3cC8vN3AvLzc5Ly83OS8vNEFBQUJoQUdNQWJ3QnpBQzRBY3dCMEFISUFhUUJ1QUdjQWN3QUJBQUFBd0l3bUd3RUFBQUJRUUtGVUFBQUFRSFJTVGxQLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLzhBLy8vLy8vLy8vLy8vLy8vLzBwZlNid0FBQWR0SlJFRlVPSTJObE5HcWd6QU1odi9DbERsUVFjRmRLT3g0TWNGQ0tjSDNmN2VUdExXcjA3bUZpVXZieno5TmsyTFpHUkg1OTM3cVpUaUd5RXgwQ3I1eFFwRWQ2eHpOdWVDR2M5U3pVbUF6UDhjcGxPMXpnUlJ1dEJBbE05RWhad2tuV2oxTEtYa3diT1ZvalRxTUVwS1pPZmVVRDNPblIyNFZXZUpmMU9PQlRuVGd3OHpacjNMeU9sYmRyV3JkR2xwRzZBbHo0TmkzUmNUNExkbTh3SHBPbzlZbzVDUHNkbmdNNkQzSG1MbEVTcmdIRCtZdnJ0RXVVZUxlTWY3eDdqMjNHSlZnYkpvSHMwL2NJM0I3VE5rZk9ONWJ0c0VVcnZTZFk2OTRVMFA5blhNcDJtRHNkYkxtWTE0Q044WERqdHpnbzlDdXFwWW5Hb01zY0RVbW4wOHFzYk9uLzNMdGU2cmdQMWVNN3FRMVlNUCt5UGhpVG14MmxhRFFzcHl0Z0pJMU1iSXpaN3lIZmoyL2hZWXRaMXhNTTRkYzNpVHVramdKeUtzclVCRUg0dXFGWE5VaDNhWHh0V2piQzNEcEg4TFJWUEo4TVhMb0E4ZnN6NTF1ZTczUSsxejdSa1RFRjBkV2ExbzVhODAwMUM2WmJHdXpoMGJTVG85aVM4WCtDL05XYmZUVzV1WjlWdTRRYUwyMFh2M3VoZ3lyWlVYVnRJMk5mUzNmYnpnUDc1ZE5lay9ZYnJMK2svRXlrZWN1WmY2Wk96REpZc2Y5UENWM3hoRkhxNzA0M213K0gxeWxXKzVBYjVqcEFEdVBNMloxUDNQT0xXblVHL3NIbklEc3FrT2pscW9BQUFBQVNVVk9SSzVDWUlJPSk7cGFkZGluZzowIDAgNDBweCAwO21hcmdpbjo1MHB4fSNoZCwjYmR7YmFja2dyb3VuZDojZjlmOWY5fWJvZHl7bWFyZ2luOjA7cGFkZGluZzowO2ZvbnQ6MTJweCAiSGVsdmV0aWNhIE51ZXVlIixBcmlhbCxzYW5zLXNlcmlmfSNoZHtjb2xvcjojZmZmO3BhZGRpbmctdG9wOjUwcHg7bWFyZ2luOjB9I2hkLGgxLGgyLHAsLmNvbG9ye21hcmdpbjphdXRvfWgxLGgyLGF7Y29sb3I6IzAwNmU5Y31oMSxoMnttYXJnaW4tdG9wOjB9aDQgLnRpdGxle2ZvbnQtd2VpZ2h0OmJvbGQ7bGV0dGVyLXNwYWNpbmc6LTJweDtmb250LXNpemU6NDdweDt0ZXh0LXNoYWRvdzowIDFweCAwICMzNjk7YmFja2dyb3VuZDojMDA2ZTlkO2NvbG9yOiNmZmY7cGFkZGluZzowIDEwcHh9aDR7ZGlzcGxheTpibG9jaztmbG9hdDpyaWdodDttYXJnaW46MCAwIDAgMjBweH1oNCAud2hhdHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6NHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0Om5vcm1hbH1oNCAudmVyc2lvbntmb250LXNpemU6MTFweDtjb2xvcjojY2NjfWgye2ZvbnQtc2l6ZTo0MHB4O2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2FOZXVlLUxpZ2h0IiwiSGVsdmV0aWNhIE5ldWUgTGlnaHQiLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXdlaWdodDozMDB9aDQscHtwYWRkaW5nOjZweCAwIDZweH0jZnQgcC5maW5lLCNmdCBwLmZpbmUgYXtjb2xvcjojOTk5fSNmdCBwLmludHJve2ZvbnQtc2l6ZToxMnB4fSNiZHtmb250LXNpemU6MTRweDtjb2xvcjojNjY2fSNmdCBwe2ZvbnQtc2l6ZToxMXB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtcmVhbGRhdGEteXVpYXBwLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1yZWFsZGF0YS15dWlhcHAub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNWU5OTguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1yZWFsZGF0YS15dWlhcHAub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1odG1se2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojNTU1O2hlaWdodDoxMDAlfSNoZCwjYmQsI2Z0e3BhZGRpbmc6MCA1MHB4fSNiZHtwYWRkaW5nLWJvdHRvbTo1MHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMDZlOWN9I2Z0e2JhY2tncm91bmQ6dHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEY0FBQUFlQ0FNQUFBQy9wbmFLQUFBQXdGQk1WRVVrWElBb1lZUW9ZWVFvWVlReWFvMDJicEU2Y3BRNmNwUkVlNTFMZ3FOVWlxdFVpcXRVaXF0Wmo3QmNrck5sbXJ0bG1ydGxtcnRyb01CM3FzcDNxc3AzcXNwK3NkQ0h1ZGlIdWRpSHVkaUh1ZGlQd04rWXlPYVl5T2FZeU9hZjBPMmcwTzZuMXZPbjF2T24xdk9uMXZPdzN2dTQ1ZjI0NWYyNDVmM0I3ZjdLOWY3SzlmN0s5ZjdYL3Y3WC92N3AvLzdwLy83OS8vNzkvLzRBQUFCaEFHTUFid0J6QUM0QWN3QjBBSElBYVFCdUFHY0Fjd0FCQUFBQXdJd21Hd0VBQUFCUVFLRlVBQUFBUUhSU1RsUC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy84QS8vLy8vLy8vLy8vLy8vLy8wcGZTYndBQUFkdEpSRUZVT0kyTmxOR3FnekFNaHYvQ2xEbFFRY0ZkS094NE1jRkNLY0gzZjdlVHRMV3IwN21GaVV2Ynp6OU5rMkxaR1JINTkzN3FaVGlHeUV4MENyNXhRcEVkNnh6TnVlQ0djOVN6VW1BelA4Y3BsTzF6Z1JSdXRCQWxNOUVoWndrbldqMUxLWGt3Yk9Wb2pUcU1FcEtaT2ZlVUQzT25SMjRWV2VKZjFPT0JUblRndzh6WnIzTHlPbGJkcldyZEdscEc2QWx6NE5pM1JjVDRMZG04d0hwT285WW81Q1BzZG5nTTZEM0htTGxFU3JnSEQrWXZydEV1VWVMZU1mN3g3ajIzR0pWZ2JKb0hzMC9jSTNCN1ROa2ZPTjVidHNFVXJ2U2RZNjk0VTBQOW5YTXAybURzZGJMbVkxNENOOFhEanR6Z285Q3VxcFluR29Nc2NEVW1uMDhxc2JPbi8zTHRlNnJnUDFlTTdxUTFZTVAreVBoaVRteDJsYURRc3B5dGdKSTFNYkl6Wjd5SGZqMi9oWVl0WjF4TU00ZGMzaVR1a2pnSnlLc3JVQkVINHVxRlhOVWgzYVh4dFdqYkMzRHBIOExSVlBKOE1YTG9BOGZzejUxdWU3M1ErMXo3UmtURUYwZFdhMW81YTgwMDFDNlpiR3V6aDBiU1RvOWlTOFgrQy9OV2JmVFc1dVo5VnU0UWFMMjBYdjN1aGd5clpVWFZ0STJOZlMzZmJ6Z1A3NWROZWsvWWJyTCtrL0V5a2VjdVpmNlpPekRKWXNmOVBDVjN4aEZIcTcwNDNtdytIMXlsVys1QWI1anBBRHVQTTJaMVAzUE9MV25VRy9zSG5JRHNxa09qbHFvQUFBQUFTVVZPUks1Q1lJST0pO3BhZGRpbmc6MCAwIDQwcHggMDttYXJnaW46NTBweH0jaGQsI2Jke2JhY2tncm91bmQ6I2Y5ZjlmOX1ib2R5e21hcmdpbjowO3BhZGRpbmc6MDtmb250OjEycHggIkhlbHZldGljYSBOdWV1ZSIsQXJpYWwsc2Fucy1zZXJpZn0jaGR7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo1MHB4O21hcmdpbjowfSNoZCxoMSxoMixwLC5jb2xvcnttYXJnaW46YXV0b31oMSxoMixhe2NvbG9yOiMwMDZlOWN9aDEsaDJ7bWFyZ2luLXRvcDowfWg0IC50aXRsZXtmb250LXdlaWdodDpib2xkO2xldHRlci1zcGFjaW5nOi0ycHg7Zm9udC1zaXplOjQ3cHg7dGV4dC1zaGFkb3c6MCAxcHggMCAjMzY5O2JhY2tncm91bmQ6IzAwNmU5ZDtjb2xvcjojZmZmO3BhZGRpbmc6MCAxMHB4fWg0e2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6cmlnaHQ7bWFyZ2luOjAgMCAwIDIwcHh9aDQgLndoYXR7ZGlzcGxheTpibG9jaztwYWRkaW5nOjRweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDpub3JtYWx9aDQgLnZlcnNpb257Zm9udC1zaXplOjExcHg7Y29sb3I6I2NjY31oMntmb250LXNpemU6NDBweDtmb250LWZhbWlseToiSGVsdmV0aWNhTmV1ZS1MaWdodCIsIkhlbHZldGljYSBOZXVlIExpZ2h0IiwiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6MzAwfWg0LHB7cGFkZGluZzo2cHggMCA2cHh9I2Z0IHAuZmluZSwjZnQgcC5maW5lIGF7Y29sb3I6Izk5OX0jZnQgcC5pbnRyb3tmb250LXNpemU6MTJweH0jYmR7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzY2Nn0jZnQgcHtmb250LXNpemU6MTFweH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLXNpbmdsZXF1b3RlLWZvbnQub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGF0YXVybC1zaW5nbGVxdW90ZS1mb250Lm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1MWQ1NC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLXNpbmdsZXF1b3RlLWZvbnQub3V0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0ueS1mZi0xe2ZvbnQtZmFtaWx5OiJGb28gQmFyIixIZWx2ZXRpY2EsQXJpYWw7dGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5fS51YS1vcCAueS1mZi0xe2ZvbnQtZmFtaWx5OkhlbHZldGljYSxBcmlhbH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OiJGb28gQmFyIjtzcmM6dXJsKCdkYXRhOmZvbnQvdHJ1ZXR5cGU7YmFzZTY0LGdSYklVRkFJcnNRTkdkaXRFV2JBVUt3QUEnKSBmb3JtYXQoInRydWV0eXBlIiksdXJsKCJodHRwOi8veXVpbGlicmFyeS5jb20vZm9udHMvZm9vLWJhci5zdmcjd2ViZm9udHNlMjJmZXd3ciIpIGZvcm1hdCgic3ZnIik7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsfQotCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtc2luZ2xlcXVvdGUtZm9udC5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RhdGF1cmwtc2luZ2xlcXVvdGUtZm9udC5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1MWQ1NC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kYXRhdXJsLXNpbmdsZXF1b3RlLWZvbnQub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLS55LWZmLTF7Zm9udC1mYW1pbHk6IkZvbyBCYXIiLEhlbHZldGljYSxBcmlhbDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHl9LnVhLW9wIC55LWZmLTF7Zm9udC1mYW1pbHk6SGVsdmV0aWNhLEFyaWFsfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6IkZvbyBCYXIiO3NyYzp1cmwoJ2RhdGE6Zm9udC90cnVldHlwZTtiYXNlNjQsZ1JiSVVGQUlyc1FOR2RpdEVXYkFVS3dBQScpIGZvcm1hdCgidHJ1ZXR5cGUiKSx1cmwoImh0dHA6Ly95dWlsaWJyYXJ5LmNvbS9mb250cy9mb28tYmFyLnN2ZyN3ZWJmb250c2UyMmZld3dyIikgZm9ybWF0KCJzdmciKTtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWx9Ci0KLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGVjaW1hbHMub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGVjaW1hbHMub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2VmNzMwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RlY2ltYWxzLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTo6c2VsZWN0aW9ue21hcmdpbjowLjZweCAwLjMzM3B0IDEuMmVtIDguOGNtfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RlY2ltYWxzLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGVjaW1hbHMub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ZWY3MzAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZGVjaW1hbHMub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi06OnNlbGVjdGlvbnttYXJnaW46MC42cHggMC4zMzNwdCAxLjJlbSA4LjhjbX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9kb2xsYXItaGVhZGVyLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RvbGxhci1oZWFkZXIub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWY1ZTEyLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RvbGxhci1oZWFkZXIub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZm9ve2JhcjpiYXp9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZG9sbGFyLWhlYWRlci5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2RvbGxhci1oZWFkZXIub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMDgxMDAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZG9sbGFyLWhlYWRlci5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLyohCi0kSGVhZGVyOiAvdGVtcC9kaXJuYW1lL2ZpbGVuYW1lLmNzcyAzIDIvMDIvMDggMzozN3AgSlNtaXRoICQKLSovZm9ve2JhcjpiYXp9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZm9udC1mYWNlLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2ZvbnQtZmFjZS5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMTA3N2MuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZm9udC1mYWNlLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBmb250LWZhY2V7Zm9udC1mYW1pbHk6J2d6aXBwZXInO3NyYzp1cmwoeWFub25lLmVvdCk7c3JjOmxvY2FsKCdnemlwcGVyJyksdXJsKHlhbm9uZS50dGYpIGZvcm1hdCgndHJ1ZXR5cGUnKX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9mb250LWZhY2Uub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9mb250LWZhY2Uub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMTA3N2MuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvZm9udC1mYWNlLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQGZvbnQtZmFjZXtmb250LWZhbWlseTonZ3ppcHBlcic7c3JjOnVybCh5YW5vbmUuZW90KTtzcmM6bG9jYWwoJ2d6aXBwZXInKSx1cmwoeWFub25lLnR0ZikgZm9ybWF0KCd0cnVldHlwZScpfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2llNW1hYy5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9pZTVtYWMub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTBkZjQxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2llNW1hYy5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vKlwqLy5zZWxlY3Rvcntjb2xvcjpraGFraX0vKiovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvaWU1bWFjLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvaWU1bWFjLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTBkZjQxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L2llNW1hYy5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS8qXCovLnNlbGVjdG9ye2NvbG9yOmtoYWtpfS8qKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9tZWRpYS1lbXB0eS1jbGFzcy5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9tZWRpYS1lbXB0eS1jbGFzcy5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NDIwMTIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvbWVkaWEtZW1wdHktY2xhc3Mub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZW1wdGluZXNze31AaW1wb3J0ICJhbm90aGVyLmNzcyI7ZW1wdHl7fUBtZWRpYSBwcmludHsubm9wcmludHtkaXNwbGF5Om5vbmV9fUBtZWRpYSBzY3JlZW57LmJyZWFrbWV7fS5wcmludG9ubHl7ZGlzcGxheTpub25lfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9tZWRpYS1lbXB0eS1jbGFzcy5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L21lZGlhLWVtcHR5LWNsYXNzLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTU0MTNkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L21lZGlhLWVtcHR5LWNsYXNzLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLyohIHByZXNlcnZlZCAqL2VtcHRpbmVzc3t9QGltcG9ydCAiYW5vdGhlci5jc3MiO2VtcHR5e31AbWVkaWEgcHJpbnR7Lm5vcHJpbnR7ZGlzcGxheTpub25lfX1AbWVkaWEgc2NyZWVuey5icmVha21le30ucHJpbnRvbmx5e2Rpc3BsYXk6bm9uZX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvbWVkaWEtbXVsdGkub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvbWVkaWEtbXVsdGkub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDhhYzdkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L21lZGlhLW11bHRpLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBtZWRpYSBvbmx5IGFsbCBhbmQgKG1heC13aWR0aDo1MGVtKSxvbmx5IGFsbCBhbmQgKG1heC1kZXZpY2Utd2lkdGg6ODAwcHgpLG9ubHkgYWxsIGFuZCAobWF4LXdpZHRoOjc4MHB4KXtzb21lLWNzcyA6aGVyZX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9tZWRpYS1tdWx0aS5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L21lZGlhLW11bHRpLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDhhYzdkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L21lZGlhLW11bHRpLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQG1lZGlhIG9ubHkgYWxsIGFuZCAobWF4LXdpZHRoOjUwZW0pLG9ubHkgYWxsIGFuZCAobWF4LWRldmljZS13aWR0aDo4MDBweCksb25seSBhbGwgYW5kIChtYXgtd2lkdGg6NzgwcHgpe3NvbWUtY3NzIDpoZXJlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L21lZGlhLXRlc3Qub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvbWVkaWEtdGVzdC5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YWZmZjUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvbWVkaWEtdGVzdC5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApe3NvbWUtY3NzIDpoZXJlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L21lZGlhLXRlc3Qub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9tZWRpYS10ZXN0Lm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmFmZmY1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L21lZGlhLXRlc3Qub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1AbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApe3NvbWUtY3NzIDpoZXJlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L29wYWNpdHktZmlsdGVyLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L29wYWNpdHktZmlsdGVyLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YxNTI5Ni4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9vcGFjaXR5LWZpbHRlci5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1wcmV7Ym9yZGVyOnNvbGlkIHJlZDtvcGFjaXR5OjAuODstbXMtZmlsdGVyOiJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT04MCkiO2ZpbHRlcjpQUk9HSUQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT04MCk7em9vbToxfWNvZGV7LW1zLWZpbHRlcjoiUFJPR0lEOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9ODApIjtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9ODApfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L29wYWNpdHktZmlsdGVyLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvb3BhY2l0eS1maWx0ZXIub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMTUyOTYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvb3BhY2l0eS1maWx0ZXIub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1wcmV7Ym9yZGVyOnNvbGlkIHJlZDtvcGFjaXR5OjAuODstbXMtZmlsdGVyOiJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT04MCkiO2ZpbHRlcjpQUk9HSUQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT04MCk7em9vbToxfWNvZGV7LW1zLWZpbHRlcjoiUFJPR0lEOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9ODApIjtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9ODApfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3ByZXNlcnZlLWNhc2Uub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvcHJlc2VydmUtY2FzZS5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3M2JjYmIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvcHJlc2VydmUtY2FzZS5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jQWRkQWRkcmVzc0Zvcm17cGFkZGluZzowfSNBZGRBZGRyZXNzRm9ybSAubWVzc2FnZUJveE5ldXRyYWx7cGFkZGluZzowfSNGZWVkYmFja01haWxGb3Jte3BhZGRpbmc6MH0jRmVlZGJhY2tNYWlsRm9ybSAuY2xhc3Nle21hcmdpbjowfS5jbGFzc2VzLCNGZWVkQmFja01haWxGb3Jte21hcmdpbjowfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvcHJlc2VydmUtY2FzZS5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3ByZXNlcnZlLWNhc2Uub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3M2JjYmIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvcHJlc2VydmUtY2FzZS5vdXQuYgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNBZGRBZGRyZXNzRm9ybXtwYWRkaW5nOjB9I0FkZEFkZHJlc3NGb3JtIC5tZXNzYWdlQm94TmV1dHJhbHtwYWRkaW5nOjB9I0ZlZWRiYWNrTWFpbEZvcm17cGFkZGluZzowfSNGZWVkYmFja01haWxGb3JtIC5jbGFzc2V7bWFyZ2luOjB9LmNsYXNzZXMsI0ZlZWRCYWNrTWFpbEZvcm17bWFyZ2luOjB9CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9wcmVzZXJ2ZS1uZXctbGluZS5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9wcmVzZXJ2ZS1uZXctbGluZS5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZmUxZWEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvcHJlc2VydmUtbmV3LWxpbmUub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI3NlbC1ve2NvbnRlbnQ6Im9uXCJjZSB1cG9uIGEgdGltZSI7Y29udGVudDonb25jZSB1cG9uIGEgdGlcJ21lJ30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9wcmVzZXJ2ZS1uZXctbGluZS5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3ByZXNlcnZlLW5ldy1saW5lLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmZlMWVhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3ByZXNlcnZlLW5ldy1saW5lLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI3NlbC1ve2NvbnRlbnQ6Im9uXCJjZSB1cG9uIGEgdGltZSI7Y29udGVudDonb25jZSB1cG9uIGEgdGlcJ21lJ30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9wcmVzZXJ2ZS1zdHJpbmdzLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3ByZXNlcnZlLXN0cmluZ3Mub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjFkMDEwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3ByZXNlcnZlLXN0cmluZ3Mub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNlbGV7Y29udGVudDoiXCJrZWVwICBcIiAgICBtZSI7c29tZXRoaW5nOidcXFwnIC4gICAgIC4gJztlbHNlOidlbXB0eXt9Jztjb250ZW50OiIvKiB0ZXN0ICovIn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9wcmVzZXJ2ZS1zdHJpbmdzLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvcHJlc2VydmUtc3RyaW5ncy5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YxZDAxMC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9wcmVzZXJ2ZS1zdHJpbmdzLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNlbGV7Y29udGVudDoiXCJrZWVwICBcIiAgICBtZSI7c29tZXRoaW5nOidcXFwnIC4gICAgIC4gJztlbHNlOidlbXB0eXt9Jztjb250ZW50OiIvKiB0ZXN0ICovIn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9wc2V1ZG8tZmlyc3Qub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvcHNldWRvLWZpcnN0Lm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg3MTE3Yy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9wc2V1ZG8tZmlyc3Qub3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotcDpmaXJzdC1sZXR0ZXIge2J1aDpodW19cDpmaXJzdC1saW5lIHtiYWE6MX1wOmZpcnN0LWxpbmUgLGEscDpmaXJzdC1sZXR0ZXIgLGJ7Y29sb3I6cmVkfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3BzZXVkby1maXJzdC5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3BzZXVkby1maXJzdC5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg3MTE3Yy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9wc2V1ZG8tZmlyc3Qub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1wOmZpcnN0LWxldHRlciB7YnVoOmh1bX1wOmZpcnN0LWxpbmUge2JhYToxfXA6Zmlyc3QtbGluZSAsYSxwOmZpcnN0LWxldHRlciAsYntjb2xvcjpyZWR9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvcHNldWRvLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3BzZXVkby5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiN2Y4ZTcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvcHNldWRvLm91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXAgOmxpbmt7YmE6emluZ2E7Zm9vOmJhcn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9wc2V1ZG8ub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9wc2V1ZG8ub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiN2Y4ZTcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvcHNldWRvLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotcCA6bGlua3tiYTp6aW5nYTtmb286YmFyfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3NwZWNpYWwtY29tbWVudHMub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvc3BlY2lhbC1jb21tZW50cy5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZWI5MmIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvc3BlY2lhbC1jb21tZW50cy5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jeW97bWE6Im1hIn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9zcGVjaWFsLWNvbW1lbnRzLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvc3BlY2lhbC1jb21tZW50cy5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJlY2JhYy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9zcGVjaWFsLWNvbW1lbnRzLm91dC5iCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0vKiEqKioqKioqKioqKio4OCoqKioKLSBQcmVzZXJ2aW5nIGNvbW1lbnRzCi0gICAgYXMgdGhleSBhcmUKLSAqKioqKioqKioqKioqKioqKioqKgotIEtlZXAgdGhlIGluaXRpYWwgIQotICoqKioqKioqKioqKioqKioqKiovI3lve21hOiJtYSJ9LyohCi1JIHNhaWQKLXByZS0KLXNlcnZlISAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3N0YXItdW5kZXJzY29yZS1oYWNrcy5vdXQgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9zdGFyLXVuZGVyc2NvcmUtaGFja3Mub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTAxNGMzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3N0YXItdW5kZXJzY29yZS1oYWNrcy5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jZWxlbWVudGFycnt3aWR0aDoxcHg7KndpZHRoOjNwdDtfd2lkdGg6MmVtfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3N0YXItdW5kZXJzY29yZS1oYWNrcy5vdXQuYiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3N0YXItdW5kZXJzY29yZS1oYWNrcy5vdXQuYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEwMTRjMy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9zdGFyLXVuZGVyc2NvcmUtaGFja3Mub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jZWxlbWVudGFycnt3aWR0aDoxcHg7KndpZHRoOjNwdDtfd2lkdGg6MmVtfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3N0cmluZy1pbi1jb21tZW50Lm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3N0cmluZy1pbi1jb21tZW50Lm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFmNzMyNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC9zdHJpbmctaW4tY29tbWVudC5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1he2E6MX1ie2NvbnRlbnQ6Ii8qKi8ifS8qXCovY3tjOjN9LyoqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3N0cmluZy1pbi1jb21tZW50Lm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvc3RyaW5nLWluLWNvbW1lbnQub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZGVjMmQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvc3RyaW5nLWluLWNvbW1lbnQub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1he2E6MX0vKiEicHJlc2VydmUiIG1lKi9ie2NvbnRlbnQ6Ii8qKi8ifS8qXCovY3tjOjN9LyoqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3dlYmtpdC10cmFuc2Zvcm0ub3V0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvd2Via2l0LXRyYW5zZm9ybS5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZWVkNjYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvd2Via2l0LXRyYW5zZm9ybS5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1jey13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDB9ZHstTU9aLVRSQU5TRk9STS1PUklHSU46MCAwfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3dlYmtpdC10cmFuc2Zvcm0ub3V0LmIgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC93ZWJraXQtdHJhbnNmb3JtLm91dC5iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWVlZDY2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3dlYmtpdC10cmFuc2Zvcm0ub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1jey13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDB9ZHstTU9aLVRSQU5TRk9STS1PUklHSU46MCAwfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3plcm9zLm91dCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3plcm9zLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVmNzNjNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL291dC96ZXJvcy5vdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1he21hcmdpbjowcHggMHB0IDBlbSAwJTtfcGFkZGluZy10b3A6MGV4O2JhY2tncm91bmQtcG9zaXRpb246MCAwO3BhZGRpbmc6MGluIDBjbSAwbW0gMHBjfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvb3V0L3plcm9zLm91dC5iIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvemVyb3Mub3V0LmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZjczYzQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9vdXQvemVyb3Mub3V0LmIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1he21hcmdpbjowcHggMHB0IDBlbSAwJTtfcGFkZGluZy10b3A6MGV4O2JhY2tncm91bmQtcG9zaXRpb246MCAwO3BhZGRpbmc6MGluIDBjbSAwbW0gMHBjfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvcHJlc2VydmUtY2FzZS5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3ByZXNlcnZlLWNhc2UuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjgxOGYwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvcHJlc2VydmUtY2FzZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jQWRkQWRkcmVzc0Zvcm0gewotICAgIHBhZGRpbmc6IDA7Ci19Ci0jQWRkQWRkcmVzc0Zvcm0gLm1lc3NhZ2VCb3hOZXV0cmFsIHsKLSAgICBwYWRkaW5nOiAwOwotfQotI0ZlZWRiYWNrTWFpbEZvcm17Ci0gICAgcGFkZGluZzogMDsKLX0KLSNGZWVkYmFja01haWxGb3JtIC5jbGFzc2V7Ci0gICAgbWFyZ2luOiAwOwotfQotLmNsYXNzZXMsICNGZWVkQmFja01haWxGb3JtIHsKLSAgICBtYXJnaW46IDA7Ci19CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3ByZXNlcnZlLWNhc2UuY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvcHJlc2VydmUtY2FzZS5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzNiY2JiLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvcHJlc2VydmUtY2FzZS5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI0FkZEFkZHJlc3NGb3Jte3BhZGRpbmc6MH0jQWRkQWRkcmVzc0Zvcm0gLm1lc3NhZ2VCb3hOZXV0cmFse3BhZGRpbmc6MH0jRmVlZGJhY2tNYWlsRm9ybXtwYWRkaW5nOjB9I0ZlZWRiYWNrTWFpbEZvcm0gLmNsYXNzZXttYXJnaW46MH0uY2xhc3NlcywjRmVlZEJhY2tNYWlsRm9ybXttYXJnaW46MH0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvcHJlc2VydmUtbmV3LWxpbmUuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9wcmVzZXJ2ZS1uZXctbGluZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZjBjOTIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9wcmVzZXJ2ZS1uZXctbGluZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNzZWwtbyB7Ci0gIGNvbnRlbnQ6ICJvblwiY2UgdXBvbiBcCi1hIHRpbWUiOwotICBjb250ZW50OiAnb25jZSB1cG9uIFwKLWEgdGlcJ21lJzsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3ByZXNlcnZlLW5ldy1saW5lLmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3ByZXNlcnZlLW5ldy1saW5lLmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYzIwYjYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9wcmVzZXJ2ZS1uZXctbGluZS5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jc2VsLW97Y29udGVudDoib25cImNlIHVwb24gXAotYSB0aW1lIjtjb250ZW50OidvbmNlIHVwb24gXAotYSB0aVwnbWUnfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvcHJlc2VydmUtc3RyaW5ncy5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3ByZXNlcnZlLXN0cmluZ3MuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTUxMzczLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvcHJlc2VydmUtc3RyaW5ncy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLS8qIHByZXNlcnZpbmcgc3RyaW5ncyAqLwotLnNlbGUgewotICBjb250ZW50OiAiXCJrZWVwICBcIiAgICBtZSI7Ci0gIHNvbWV0aGluZzogJ1xcXCcgLiAgICAgLiAnOwotICBlbHNlOiAnZW1wdHl7fSc7Ci0gIGNvbnRlbnQ6ICIvKiB0ZXN0ICovIjsgLyogPC0tLS0gdGhpcyBpcyBub3QgYSBjb21tZW50LCBzaG91bGQgYmUgYmUga2VwdCAqLwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvcHJlc2VydmUtc3RyaW5ncy5jc3MubWluIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9wcmVzZXJ2ZS1zdHJpbmdzLmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMWQwMTAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9wcmVzZXJ2ZS1zdHJpbmdzLmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc2VsZXtjb250ZW50OiJcImtlZXAgIFwiICAgIG1lIjtzb21ldGhpbmc6J1xcXCcgLiAgICAgLiAnO2Vsc2U6J2VtcHR5e30nO2NvbnRlbnQ6Ii8qIHRlc3QgKi8ifQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvcHNldWRvLWZpcnN0LmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvcHNldWRvLWZpcnN0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJhZGVmNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3BzZXVkby1maXJzdC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiAKLWJlY2F1c2Ugb2YgSUU2IGZpcnN0LWxldHRlciBhbmQgZmlyc3QtbGluZQotbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNwYWNlCi1odHRwOi8vcmVmZXJlbmNlLnNpdGVwb2ludC5jb20vY3NzL3BzZXVkb2VsZW1lbnQtZmlyc3RsZXR0ZXIKLVRoYW5rczogUC5Tb3Jva2luIGNvbW1lbnQgYXQgaHR0cDovL3d3dy5waHBpZWQuY29tL2Nzc21pbi1qcy8gCi0qLwotcDpmaXJzdC1sZXR0ZXJ7Ci0gIGJ1aDogaHVtOwotfQotcDpmaXJzdC1saW5lewotICBiYWE6IDE7Ci19Ci0KLXA6Zmlyc3QtbGluZSxhLHA6Zmlyc3QtbGV0dGVyLGJ7Ci0gIGNvbG9yOiByZWQ7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9wc2V1ZG8tZmlyc3QuY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvcHNldWRvLWZpcnN0LmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NzExN2MuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9wc2V1ZG8tZmlyc3QuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXA6Zmlyc3QtbGV0dGVyIHtidWg6aHVtfXA6Zmlyc3QtbGluZSB7YmFhOjF9cDpmaXJzdC1saW5lICxhLHA6Zmlyc3QtbGV0dGVyICxie2NvbG9yOnJlZH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3BzZXVkby5jc3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3BzZXVkby5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNmE1YjEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9wc2V1ZG8uY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1wIDpsaW5rIHsgCi0gIGJhOnppbmdhOzs7Ci0gIGZvbzogYmFyOzs7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9wc2V1ZG8uY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvcHNldWRvLmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiN2Y4ZTcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9wc2V1ZG8uY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXAgOmxpbmt7YmE6emluZ2E7Zm9vOmJhcn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3NwZWNpYWwtY29tbWVudHMuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9zcGVjaWFsLWNvbW1lbnRzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUxODRiYS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3NwZWNpYWwtY29tbWVudHMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLyohKioqKioqKioqKioqODgqKioqCi0gUHJlc2VydmluZyBjb21tZW50cwotICAgIGFzIHRoZXkgYXJlCi0gKioqKioqKioqKioqKioqKioqKioKLSBLZWVwIHRoZSBpbml0aWFsICEKLSAqKioqKioqKioqKioqKioqKioqLwotI3lvIHsKLSAgICBtYTogIm1hIjsKLX0KLS8qIQotSSBzYWlkCi1wcmUtCi1zZXJ2ZSEgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3NwZWNpYWwtY29tbWVudHMuY3NzLm1pbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvc3BlY2lhbC1jb21tZW50cy5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmVjYmFjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvc3BlY2lhbC1jb21tZW50cy5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0vKiEqKioqKioqKioqKio4OCoqKioKLSBQcmVzZXJ2aW5nIGNvbW1lbnRzCi0gICAgYXMgdGhleSBhcmUKLSAqKioqKioqKioqKioqKioqKioqKgotIEtlZXAgdGhlIGluaXRpYWwgIQotICoqKioqKioqKioqKioqKioqKiovI3lve21hOiJtYSJ9LyohCi1JIHNhaWQKLXByZS0KLXNlcnZlISAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvc3Rhci11bmRlcnNjb3JlLWhhY2tzLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvc3Rhci11bmRlcnNjb3JlLWhhY2tzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI2ZTUxNy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3N0YXItdW5kZXJzY29yZS1oYWNrcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSNlbGVtZW50YXJyIHsKLSAgd2lkdGg6IDFweDsKLSAgKndpZHRoOiAzcHQ7Ci0gIF93aWR0aDogMmVtOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvc3Rhci11bmRlcnNjb3JlLWhhY2tzLmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3N0YXItdW5kZXJzY29yZS1oYWNrcy5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTAxNGMzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvc3Rhci11bmRlcnNjb3JlLWhhY2tzLmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jZWxlbWVudGFycnt3aWR0aDoxcHg7KndpZHRoOjNwdDtfd2lkdGg6MmVtfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvc3RyaW5nLWluLWNvbW1lbnQuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9zdHJpbmctaW4tY29tbWVudC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NGQxOTIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9zdHJpbmctaW4tY29tbWVudC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLS8qIHRlICIgc3QgKi8KLWF7YToxfQotLyohInByZXNlcnZlIiBtZSovCi1ie2NvbnRlbnQ6ICIvKiovIn0KLS8qIHF1aXRlICIgcXVvdGUgJyBcJyBcIiAqLwotLyogaWUgbWFjIFwqLwotYyB7YyA6IDN9Ci0vKiBlbmQgaGlkaW5nICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9zdHJpbmctaW4tY29tbWVudC5jc3MubWluIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS9zdHJpbmctaW4tY29tbWVudC5jc3MubWluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2RlYzJkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvc3RyaW5nLWluLWNvbW1lbnQuY3NzLm1pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWF7YToxfS8qISJwcmVzZXJ2ZSIgbWUqL2J7Y29udGVudDoiLyoqLyJ9LypcKi9je2M6M30vKiovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS93ZWJraXQtdHJhbnNmb3JtLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvd2Via2l0LXRyYW5zZm9ybS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYTUwZjIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS93ZWJraXQtdHJhbnNmb3JtLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotYyB7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7fQotZCB7LU1PWi1UUkFOU0ZPUk0tT1JJR0lOOiAwIDAgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvd2Via2l0LXRyYW5zZm9ybS5jc3MubWluIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS93ZWJraXQtdHJhbnNmb3JtLmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NDBkZGYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS93ZWJraXQtdHJhbnNmb3JtLmNzcy5taW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1jey13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDB9ZHstbW96LXRyYW5zZm9ybS1vcmlnaW46MCAwfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmNzc21pbi90ZXN0cy95dWkvemVyb3MuY3NzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS96ZXJvcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1YTRkYTIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS96ZXJvcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWEgeyAKLSAgbWFyZ2luOiAwcHggMHB0IDBlbSAwJTsKLSAgX3BhZGRpbmctdG9wOiAwZXg7Ci0gIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsKLSAgcGFkZGluZzogMGluIDBjbSAwbW0gMHBjCi19CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3plcm9zLmNzcy5taW4gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jjc3NtaW4vdGVzdHMveXVpL3plcm9zLmNzcy5taW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YWM3YTkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yY3NzbWluL3Rlc3RzL3l1aS96ZXJvcy5jc3MubWluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYXttYXJnaW46MDtfcGFkZGluZy10b3A6MDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDtwYWRkaW5nOjB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vTElDRU5TRSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL0xJQ0VOU0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MWVlYjkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vTElDRU5TRQorKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KLQotICAgMS4gRGVmaW5pdGlvbnMuCi0KLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KLQotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgotICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQotICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KLQotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCi0gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAotICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAotICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgotCi0gICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCi0gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwotICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCi0gICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAotICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQotICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0Ci0gICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCi0KLSAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KLQotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0gICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCi0KLSAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwotICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKLSAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQotICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgotCi0gICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZwotICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgotICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKLSAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCi0gICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKLSAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKLSAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgotICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgotCi0gICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KLQotICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL01BTklGRVNUIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vTUFOSUZFU1QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NGU2ZjYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vTUFOSUZFU1QKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi1MSUNFTlNFCi1NQU5JRkVTVAotUEtHLUlORk8KLVJFQURNRS5yc3QKLV9zZXR1cC9fX2luaXRfXy5weQotX3NldHVwL2luY2x1ZGUvY2V4dC5oCi1fc2V0dXAvcHkyL19faW5pdF9fLnB5Ci1fc2V0dXAvcHkyL2NvbW1hbmRzLnB5Ci1fc2V0dXAvcHkyL2RhdGEucHkKLV9zZXR1cC9weTIvZGlzdC5weQotX3NldHVwL3B5Mi9leHQucHkKLV9zZXR1cC9weTIvc2V0dXAucHkKLV9zZXR1cC9weTIvc2hlbGwucHkKLV9zZXR1cC9weTIvdXRpbC5weQotX3NldHVwL3B5My9fX2luaXRfXy5weQotX3NldHVwL3B5My9jb21tYW5kcy5weQotX3NldHVwL3B5My9kYXRhLnB5Ci1fc2V0dXAvcHkzL2Rpc3QucHkKLV9zZXR1cC9weTMvZXh0LnB5Ci1fc2V0dXAvcHkzL3NldHVwLnB5Ci1fc2V0dXAvcHkzL3NoZWxsLnB5Ci1fc2V0dXAvcHkzL3V0aWwucHkKLWJlbmNoCi1iZW5jaC5zaAotYmVuY2gvRGF0ZVRpbWVTaG9ydGN1dHMuanMKLWJlbmNoL19faW5pdF9fLnB5Ci1iZW5jaC9hcGl2aWV3ZXIuanMKLWJlbmNoL2Jvb3RzdHJhcC5qcwotYmVuY2gvanF1ZXJ5LTEuNy4xLmpzCi1iZW5jaC9qc21pbi5jCi1iZW5jaC9qc21pbi5weQotYmVuY2gvanNtaW5fMl8wXzkucHkKLWJlbmNoL2tub2Nrb3V0LTIuMC4wLmpzCi1iZW5jaC9tYWluLnB5Ci1iZW5jaC9tYXJrZXJtYW5hZ2VyLmpzCi1iZW5jaC93cml0ZS5weQotZG9jcy9CRU5DSE1BUktTCi1kb2NzL0NIQU5HRVMKLWRvY3MvQ0xBU1NJRklFUlMKLWRvY3MvREVTQ1JJUFRJT04KLWRvY3MvUFJPVklERVMKLWRvY3MvU1VNTUFSWQotZG9jcy9hcGlkb2MvYXBpLW9iamVjdHMudHh0Ci1kb2NzL2FwaWRvYy9jcmFyci5wbmcKLWRvY3MvYXBpZG9jL2VweWRvYy5jc3MKLWRvY3MvYXBpZG9jL2VweWRvYy5qcwotZG9jcy9hcGlkb2MvaGVscC5odG1sCi1kb2NzL2FwaWRvYy9pZGVudGlmaWVyLWluZGV4Lmh0bWwKLWRvY3MvYXBpZG9jL2luZGV4Lmh0bWwKLWRvY3MvYXBpZG9jL21vZHVsZS10cmVlLmh0bWwKLWRvY3MvYXBpZG9jL3JlZGlyZWN0Lmh0bWwKLWRvY3MvYXBpZG9jL3Jqc21pbi1tb2R1bGUuaHRtbAotZG9jcy9hcGlkb2MvcmpzbWluLXB5c3JjLmh0bWwKLXBhY2thZ2UuY2ZnCi1yanNtaW4uYwotcmpzbWluLnB5Ci1zZXR1cC5weQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vUEtHLUlORk8gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9QS0ctSU5GTwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTgzYmM0Zi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9QS0ctSU5GTworKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi1NZXRhZGF0YS1WZXJzaW9uOiAxLjEKLU5hbWU6IHJqc21pbgotVmVyc2lvbjogMS4wLjEyCi1TdW1tYXJ5OiBKYXZhc2NyaXB0IE1pbmlmaWVyCi1Ib21lLXBhZ2U6IGh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yanNtaW4vCi1BdXRob3I6IEFuZHLDqSBNYWxvCi1BdXRob3ItZW1haWw6IG5kQHBlcmxpZy5kZQotTGljZW5zZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKLSAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KLQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCi0KLSAgIDEuIERlZmluaXRpb25zLgotCi0gICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAotICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCi0KLSAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5Ci0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKLSAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KLSAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCi0gICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKLSAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCi0gICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKLSAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCi0KLSAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCi0KLSAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAotICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgotICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLQotICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKLSAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKLSAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKLSAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KLQotICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKLSAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKLSAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawotICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KLQotICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAotICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQotICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucwotICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKLSAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgotICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAotICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KLQotICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKLSAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQotICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgotICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCi0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKLSAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKLSAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCi0gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAotICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKLSAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAotICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKLSAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgotCi0gICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCi0gICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KLQotICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCi0gICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKLSAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCi0KLSAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAotICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCi0gICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQotICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKLSAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKLSAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91Ci0gICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQotICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawotICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKLSAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKLSAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQotICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgotCi0gICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0Ci0gICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQotICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLSAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCi0gICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKLQotICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAotCi0gICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKLSAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKLSAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCi0gICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAotCi0gICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKLSAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0Ci0gICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCi0gICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90Ci0gICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCi0gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKLSAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCi0gICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAotICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwotICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKLSAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgotICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCi0gICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCi0gICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCi0gICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKLSAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKLSAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAotICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCi0gICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgotCi0gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCi0gICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKLSAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KLSAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKLSAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCi0gICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCi0KLSAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKLSAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKLSAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQotICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCi0KLSAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgotICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAotICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCi0gICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCi0gICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKLSAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQotICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgotCi0gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKLSAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAotICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKLSAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCi0gICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCi0gICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKLSAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKLSAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKLSAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCi0gICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCi0gICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCi0KLSAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKLSAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCi0gICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAotICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKLSAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5Ci0gICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgotICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAotICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5Ci0gICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCi0gICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KLQotICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0KLSAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KLQotICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKLSAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKLSAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCi0gICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQotICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCi0gICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCi0gICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKLSAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KLQotICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCi0KLSAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi1Eb3dubG9hZC1VUkw6IGh0dHA6Ly9zdG9yYWdlLnBlcmxpZy5kZS9yanNtaW4vCi1EZXNjcmlwdGlvbjogPT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICBKYXZhc2NyaXB0IE1pbmlmaWVyCi0gICAgICAgID09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAKLSAgICAgICAgckpTbWluIGlzIGEgamF2YXNjcmlwdCBtaW5pZmllciB3cml0dGVuIGluIHB5dGhvbi4KLSAgICAgICAgCi0gICAgICAgIFRoZSBtaW5pZmllciBpcyBiYXNlZCBvbiB0aGUgc2VtYW50aWNzIG9mIGBqc21pbi5jIGJ5IERvdWdsYXMgQ3JvY2tmb3JkYF9cLgotICAgICAgICAKLSAgICAgICAgVGhlIG1vZHVsZSBpcyBhIHJlLWltcGxlbWVudGF0aW9uIGFpbWluZyBmb3Igc3BlZWQsIHNvIGl0IGNhbiBiZSB1c2VkIGF0Ci0gICAgICAgIHJ1bnRpbWUgKHJhdGhlciB0aGFuIGR1cmluZyBhIHByZXByb2Nlc3Npbmcgc3RlcCkuIFVzdWFsbHkgaXQgcHJvZHVjZXMgdGhlCi0gICAgICAgIHNhbWUgcmVzdWx0cyBhcyB0aGUgb3JpZ2luYWwgYGBqc21pbi5jYGAuIEl0IGRpZmZlcnMgaW4gdGhlIGZvbGxvd2luZyB3YXlzOgotICAgICAgICAKLSAgICAgICAgLSB0aGVyZSBpcyBubyBlcnJvciBkZXRlY3Rpb246IHVudGVybWluYXRlZCBzdHJpbmcsIHJlZ2V4IGFuZCBjb21tZW50Ci0gICAgICAgICAgbGl0ZXJhbHMgYXJlIHRyZWF0ZWQgYXMgcmVndWxhciBqYXZhc2NyaXB0IGNvZGUgYW5kIG1pbmlmaWVkIGFzIHN1Y2guCi0gICAgICAgIC0gQ29udHJvbCBjaGFyYWN0ZXJzIGluc2lkZSBzdHJpbmcgYW5kIHJlZ2V4IGxpdGVyYWxzIGFyZSBsZWZ0IHVudG91Y2hlZDsgdGhleQotICAgICAgICAgIGFyZSBub3QgY29udmVydGVkIHRvIHNwYWNlcyAobm9yIHRvIFxuKQotICAgICAgICAtIE5ld2xpbmUgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQgaW5zaWRlIHN0cmluZyBhbmQgcmVnZXggbGl0ZXJhbHMsIGV4Y2VwdAotICAgICAgICAgIGZvciBsaW5lIGNvbnRpbnVhdGlvbnMgaW4gc3RyaW5nIGxpdGVyYWxzIChFQ01BLTUpLgotICAgICAgICAtICJyZXR1cm4gL3JlZ2V4LyIgaXMgcmVjb2duaXplZCBjb3JyZWN0bHkuCi0gICAgICAgIC0gTGluZSB0ZXJtaW5hdG9ycyBhZnRlciByZWdleCBsaXRlcmFscyBhcmUgaGFuZGxlZCBtb3JlIHNlbnNpYmx5Ci0gICAgICAgIC0gIisgKyIgYW5kICItIC0iIHNlcXVlbmNlcyBhcmUgbm90IGNvbGxhcHNlZCB0byAnKysnIG9yICctLScKLSAgICAgICAgLSBOZXdsaW5lcyBiZWZvcmUgISBvcGVyYXRvcnMgYXJlIHJlbW92ZWQgbW9yZSBzZW5zaWJseQotICAgICAgICAtIENvbW1lbnRzIHN0YXJ0aW5nIHdpdGggYW4gZXhjbGFtYXRpb24gbWFyayAoYGAhYGApIGNhbiBiZSBrZXB0IG9wdGlvbmFsbHkKLSAgICAgICAgLSBySlNtaW4gZG9lcyBub3QgaGFuZGxlIHN0cmVhbXMsIGJ1dCBvbmx5IGNvbXBsZXRlIHN0cmluZ3MuIChIb3dldmVyLCB0aGUKLSAgICAgICAgICBtb2R1bGUgcHJvdmlkZXMgYSAic3RyZWFteSIgaW50ZXJmYWNlKS4KLSAgICAgICAgCi0gICAgICAgIFNpbmNlIG1vc3QgcGFydHMgb2YgdGhlIGxvZ2ljIGFyZSBoYW5kbGVkIGJ5IHRoZSByZWdleCBlbmdpbmUgaXQncyB3YXkgZmFzdGVyCi0gICAgICAgIHRoYW4gdGhlIG9yaWdpbmFsIHB5dGhvbiBwb3J0IG9mIGBganNtaW4uY2BgIGJ5IEJhcnVjaCBFdmVuLiBUaGUgc3BlZWQgZmFjdG9yCi0gICAgICAgIHZhcmllcyBiZXR3ZWVuIGFib3V0IDYgYW5kIDU1IGRlcGVuZGluZyBvbiBpbnB1dCBhbmQgcHl0aG9uIHZlcnNpb24gKGl0IGdldHMKLSAgICAgICAgZmFzdGVyIHRoZSBtb3JlIGNvbXByZXNzZWQgdGhlIGlucHV0IGFscmVhZHkgaXMpLiAgQ29tcGFyZWQgdG8gdGhlCi0gICAgICAgIHNwZWVkLXJlZmFjdG9yZWQgcHl0aG9uIHBvcnQgYnkgRGF2ZSBTdC5HZXJtYWluIHRoZSBwZXJmb3JtYW5jZSBnYWluIGlzIGxlc3MKLSAgICAgICAgZHJhbWF0aWMgYnV0IHN0aWxsIGJldHdlZW4gMyBhbmQgNTAgKGZvciBodWdlIGlucHV0cykpLiBTZWUgdGhlCi0gICAgICAgIGRvY3MvQkVOQ0hNQVJLUyBmaWxlIGZvciBkZXRhaWxzLgotICAgICAgICAKLSAgICAgICAgcmpzbWluLmMgaXMgYSByZWltcGxlbWVudGF0aW9uIG9mIHJqc21pbi5weSBpbiBDIGFuZCBzcGVlZHMgaXQgdXAgZXZlbiBtb3JlLgotICAgICAgICAKLSAgICAgICAgQm90aCBweXRob24gMiAoPj0yLjQpIGFuZCBweXRob24gMyBhcmUgc3VwcG9ydGVkLgotICAgICAgICAKLSAgICAgICAgLi4gX2pzbWluLmMgYnkgRG91Z2xhcyBDcm9ja2ZvcmQ6IGh0dHA6Ly93d3cuY3JvY2tmb3JkLmNvbS9qYXZhc2NyaXB0L2pzbWluLmMKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICBDb3B5cmlnaHQgYW5kIExpY2Vuc2UKLSAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0gICAgICAgIAotICAgICAgICBDb3B5cmlnaHQgMjAxMSAtIDIwMTUKLSAgICAgICAgQW5kcsOpIE1hbG8gb3IgaGlzIGxpY2Vuc29ycywgYXMgYXBwbGljYWJsZS4KLSAgICAgICAgCi0gICAgICAgIFRoZSB3aG9sZSBwYWNrYWdlIChleGNlcHQgZm9yIHRoZSBmaWxlcyBpbiB0aGUgYmVuY2gvIGRpcmVjdG9yeSkgaXMKLSAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLiBZb3UnbGwgZmluZCBhIGNvcHkgaW4gdGhlCi0gICAgICAgIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBkaXN0cmlidXRpb24gb3Igb25saW5lIGF0OgotICAgICAgICA8aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPi4KLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICBCdWdzCi0gICAgICAgIH5+fn4KLSAgICAgICAgCi0gICAgICAgIE5vIGJ1Z3MsIG9mIGNvdXJzZS4gOy0pCi0gICAgICAgIEJ1dCBpZiB5b3UndmUgZm91bmQgb25lIG9yIGhhdmUgYW4gaWRlYSBob3cgdG8gaW1wcm92ZSByanNtaW4sIGZlZWwgZnJlZQotICAgICAgICB0byBzZW5kIGEgcHVsbCByZXF1ZXN0IG9uIGBnaXRodWIgPGh0dHBzOi8vZ2l0aHViLmNvbS9uZHBhcmtlci9yanNtaW4+YF8KLSAgICAgICAgb3Igc2VuZCBhIG1haWwgdG8gPHJqc21pbi1idWdzQHBlcmxpZy5kZT4uCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgQXV0aG9yIEluZm9ybWF0aW9uCi0gICAgICAgIH5+fn5+fn5+fn5+fn5+fn5+fgotICAgICAgICAKLSAgICAgICAgQW5kcsOpICJuZCIgTWFsbyA8bmQgcGVybGlnLmRlPgotICAgICAgICBHUEc6IDB4ODEwM0EzN0UKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAgICAgSWYgR29kIGludGVuZGVkIHBlb3BsZSB0byBiZSBuYWtlZCwgdGhleSB3b3VsZCBiZSBib3JuIHRoYXQgd2F5LgotICAgICAgICAgICAgLS0gT3NjYXIgV2lsZGUKLSAgICAgICAgCi0gICAgICAgIC4uIHZpbTp0dz03MiBzeW50YXg9cmVzdAotS2V5d29yZHM6IEphdmFzY3JpcHQsTWluaW1pemF0aW9uCi1QbGF0Zm9ybTogVU5LTk9XTgotQ2xhc3NpZmllcjogRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDUgLSBQcm9kdWN0aW9uL1N0YWJsZQotQ2xhc3NpZmllcjogRW52aXJvbm1lbnQgOjogV2ViIEVudmlyb25tZW50Ci1DbGFzc2lmaWVyOiBJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzCi1DbGFzc2lmaWVyOiBMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZAotQ2xhc3NpZmllcjogTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi1DbGFzc2lmaWVyOiBPcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50Ci1DbGFzc2lmaWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBDCi1DbGFzc2lmaWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24KLUNsYXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyCi1DbGFzc2lmaWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMwotQ2xhc3NpZmllcjogUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IEltcGxlbWVudGF0aW9uIDo6IENQeXRob24KLUNsYXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiBJbXBsZW1lbnRhdGlvbiA6OiBKeXRob24KLUNsYXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiBJbXBsZW1lbnRhdGlvbiA6OiBQeVB5Ci1DbGFzc2lmaWVyOiBUb3BpYyA6OiBJbnRlcm5ldCA6OiBXV1cvSFRUUCA6OiBEeW5hbWljIENvbnRlbnQKLUNsYXNzaWZpZXI6IFRvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcwotQ2xhc3NpZmllcjogVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzIDo6IFB5dGhvbiBNb2R1bGVzCi1DbGFzc2lmaWVyOiBUb3BpYyA6OiBUZXh0IFByb2Nlc3NpbmcKLUNsYXNzaWZpZXI6IFRvcGljIDo6IFRleHQgUHJvY2Vzc2luZyA6OiBGaWx0ZXJzCi1DbGFzc2lmaWVyOiBUb3BpYyA6OiBVdGlsaXRpZXMKLVByb3ZpZGVzOiByanNtaW4gKDEuMCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL1JFQURNRS5jaHJvbWl1bSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL1JFQURNRS5jaHJvbWl1bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU2NTE4Zi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9SRUFETUUuY2hyb21pdW0KKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1TaG9ydCBOYW1lOiBySlNtaW4KLVVSTDogaHR0cDovL29wZW5zb3VyY2UucGVybGlnLmRlL3Jqc21pbi8KLVZlcnNpb246IDEuMC4xMgotTGljZW5zZTogQXBhY2hlIDIuMAotTGljZW5zZSBGaWxlOiBOT1RfU0hJUFBFRAotU2VjdXJpdHkgQ3JpdGljYWw6IG5vCi0KLURlc2NyaXB0aW9uOgotckpTbWluIGlzIGEgamF2YXNjcmlwdCBtaW5pZmllciB3cml0dGVuIGluIHB5dGhvbi4KLVRoZSBtaW5pZmllciBpcyBiYXNlZCBvbiB0aGUgc2VtYW50aWNzIG9mIGpzbWluLmMgYnkgRG91Z2xhcyBDcm9ja2ZvcmQuCi1UaGUgbW9kdWxlIGlzIGEgcmUtaW1wbGVtZW50YXRpb24gYWltaW5nIGZvciBzcGVlZCwgc28gaXQgY2FuIGJlIHVzZWQgYXQgcnVudGltZSAocmF0aGVyIHRoYW4gZHVyaW5nIGEgcHJlcHJvY2Vzc2luZyBzdGVwKS4gVXN1YWxseSBpdCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSBvcmlnaW5hbCBqc21pbi5jLgotCi1Nb2RpZmljYXRpb25zIG1hZGU6Ci0gLSBSZW1vdmVkIHRoZSBiZW5jaC5zaCBzaW5jZSB0aGUgZmlsZSBkb2Vzbid0IGhhdmUgdGhlIGxpY2Vuc2luZyBpbmZvIGFuZAotICAgY2F1c2VkIGxpY2Vuc2UgY2hlY2tlciB0byBmYWlsLgotIC0gQWRkZWQgYSBzbWFsbCBoYWNrIHRvIG5vdCBjbG9iYmVyIHRlbXBsYXRlIHN0cmluZ3MuIChOb3QgYSBjb21wbGV0ZSBzb2x1dGlvbgotICAgc2luY2UgaXQgd29uJ3QgaGFuZGxlIG5lc3RpbmcuIEUuZy4gYCR7J2AnfSBmb29gIHdvdWxkIHByb2JhYmx5IGNhdXNlCi0gICBwcm9ibGVtcykuCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9SRUFETUUucnN0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vUkVBRE1FLnJzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdhZTVhMS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9SRUFETUUucnN0CisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS4uIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gckpTbWluIC0gQSBKYXZhc2NyaXB0IE1pbmlmaWVyIEZvciBQeXRob24KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVEFCTEUgT0YgQ09OVEVOVFMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTEuIEludHJvZHVjdGlvbgotMi4gQ29weXJpZ2h0IGFuZCBMaWNlbnNlCi0zLiBTeXN0ZW0gUmVxdWlyZW1lbnRzCi00LiBJbnN0YWxsYXRpb24KLTUuIERvY3VtZW50YXRpb24KLTYuIEJ1Z3MKLTcuIEF1dGhvciBJbmZvcm1hdGlvbgotCi0KLUlOVFJPRFVDVElPTgotLS0tLS0tLS0tLS0tCi0KLXJKU21pbiBpcyBhIGphdmFzY3JpcHQgbWluaWZpZXIgd3JpdHRlbiBpbiBweXRob24uCi0KLVRoZSBtaW5pZmllciBpcyBiYXNlZCBvbiB0aGUgc2VtYW50aWNzIG9mIGBqc21pbi5jIGJ5IERvdWdsYXMgQ3JvY2tmb3JkYF9cLgotCi1UaGUgbW9kdWxlIGlzIGEgcmUtaW1wbGVtZW50YXRpb24gYWltaW5nIGZvciBzcGVlZCwgc28gaXQgY2FuIGJlIHVzZWQgYXQKLXJ1bnRpbWUgKHJhdGhlciB0aGFuIGR1cmluZyBhIHByZXByb2Nlc3Npbmcgc3RlcCkuIFVzdWFsbHkgaXQgcHJvZHVjZXMgdGhlCi1zYW1lIHJlc3VsdHMgYXMgdGhlIG9yaWdpbmFsIGBganNtaW4uY2BgLiBJdCBkaWZmZXJzIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKLQotLSB0aGVyZSBpcyBubyBlcnJvciBkZXRlY3Rpb246IHVudGVybWluYXRlZCBzdHJpbmcsIHJlZ2V4IGFuZCBjb21tZW50Ci0gIGxpdGVyYWxzIGFyZSB0cmVhdGVkIGFzIHJlZ3VsYXIgamF2YXNjcmlwdCBjb2RlIGFuZCBtaW5pZmllZCBhcyBzdWNoLgotLSBDb250cm9sIGNoYXJhY3RlcnMgaW5zaWRlIHN0cmluZyBhbmQgcmVnZXggbGl0ZXJhbHMgYXJlIGxlZnQgdW50b3VjaGVkOyB0aGV5Ci0gIGFyZSBub3QgY29udmVydGVkIHRvIHNwYWNlcyAobm9yIHRvIFxcbikKLS0gTmV3bGluZSBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZCBpbnNpZGUgc3RyaW5nIGFuZCByZWdleCBsaXRlcmFscywgZXhjZXB0Ci0gIGZvciBsaW5lIGNvbnRpbnVhdGlvbnMgaW4gc3RyaW5nIGxpdGVyYWxzIChFQ01BLTUpLgotLSAicmV0dXJuIC9yZWdleC8iIGlzIHJlY29nbml6ZWQgY29ycmVjdGx5LgotLSBMaW5lIHRlcm1pbmF0b3JzIGFmdGVyIHJlZ2V4IGxpdGVyYWxzIGFyZSBoYW5kbGVkIG1vcmUgc2Vuc2libHkKLS0gIisgKyIgYW5kICItIC0iIHNlcXVlbmNlcyBhcmUgbm90IGNvbGxhcHNlZCB0byAnKysnIG9yICctLScKLS0gTmV3bGluZXMgYmVmb3JlICEgb3BlcmF0b3JzIGFyZSByZW1vdmVkIG1vcmUgc2Vuc2libHkKLS0gQ29tbWVudHMgc3RhcnRpbmcgd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrIChgYCFgYCkgY2FuIGJlIGtlcHQgb3B0aW9uYWxseQotLSBySlNtaW4gZG9lcyBub3QgaGFuZGxlIHN0cmVhbXMsIGJ1dCBvbmx5IGNvbXBsZXRlIHN0cmluZ3MuIChIb3dldmVyLCB0aGUKLSAgbW9kdWxlIHByb3ZpZGVzIGEgInN0cmVhbXkiIGludGVyZmFjZSkuCi0KLVNpbmNlIG1vc3QgcGFydHMgb2YgdGhlIGxvZ2ljIGFyZSBoYW5kbGVkIGJ5IHRoZSByZWdleCBlbmdpbmUgaXQncyB3YXkgZmFzdGVyCi10aGFuIHRoZSBvcmlnaW5hbCBweXRob24gcG9ydCBvZiBgYGpzbWluLmNgYCBieSBCYXJ1Y2ggRXZlbi4gVGhlIHNwZWVkIGZhY3RvcgotdmFyaWVzIGJldHdlZW4gYWJvdXQgNiBhbmQgNTUgZGVwZW5kaW5nIG9uIGlucHV0IGFuZCBweXRob24gdmVyc2lvbiAoaXQgZ2V0cwotZmFzdGVyIHRoZSBtb3JlIGNvbXByZXNzZWQgdGhlIGlucHV0IGFscmVhZHkgaXMpLiAgQ29tcGFyZWQgdG8gdGhlCi1zcGVlZC1yZWZhY3RvcmVkIHB5dGhvbiBwb3J0IGJ5IERhdmUgU3QuR2VybWFpbiB0aGUgcGVyZm9ybWFuY2UgZ2FpbiBpcyBsZXNzCi1kcmFtYXRpYyBidXQgc3RpbGwgYmV0d2VlbiAzIGFuZCA1MCAoZm9yIGh1Z2UgaW5wdXRzKS4gU2VlIHRoZSBkb2NzL0JFTkNITUFSS1MKLWZpbGUgZm9yIGRldGFpbHMuCi0KLXJqc21pbi5jIGlzIGEgcmVpbXBsZW1lbnRhdGlvbiBvZiByanNtaW4ucHkgaW4gQyBhbmQgc3BlZWRzIGl0IHVwIGV2ZW4gbW9yZS4KLQotLi4gX2pzbWluLmMgYnkgRG91Z2xhcyBDcm9ja2ZvcmQ6IGh0dHA6Ly93d3cuY3JvY2tmb3JkLmNvbS9qYXZhc2NyaXB0L2pzbWluLmMKLQotCi1DT1BZUklHSFQgQU5EIExJQ0VOU0UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Db3B5cmlnaHQgMjAxMSAtIDIwMTUKLUFuZHLDqSBNYWxvIG9yIGhpcyBsaWNlbnNvcnMsIGFzIGFwcGxpY2FibGUuCi0KLVRoZSB3aG9sZSBwYWNrYWdlIChleGNlcHQgZm9yIHRoZSBmaWxlcyBpbiB0aGUgYmVuY2gvIGRpcmVjdG9yeSkKLWlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMC4gWW91J2xsIGZpbmQgYSBjb3B5IGluIHRoZQotcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGRpc3RyaWJ1dGlvbiBvciBvbmxpbmUgYXQ6Ci08aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPi4KLQotCi1TWVNURU0gUkVRVUlSRU1FTlRTCi0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUJvdGggcHl0aG9uIDIgKD49Mi40KSBhbmQgcHl0aG9uIDMgYXJlIHN1cHBvcnRlZC4KLQotCi1JTlNUQUxMQVRJT04KLS0tLS0tLS0tLS0tLQotCi1Vc2luZyBwaXAKLX5+fn5+fn5+fgotCi0kIHBpcCBpbnN0YWxsIHJqc21pbgotCi0KLVVzaW5nIGRpc3R1dGlscwotfn5+fn5+fn5+fn5+fn5+Ci0KLSQgcHl0aG9uIHNldHVwLnB5IGluc3RhbGwKLQotVGhlIGZvbGxvd2luZyBleHRyYSBvcHRpb25zIHRvIHRoZSBpbnN0YWxsIGNvbW1hbmQgbWF5IGJlIG9mIGludGVyZXN0OgotCi0gIC0td2l0aG91dC1jLWV4dGVuc2lvbnMgIERvbid0IGluc3RhbGwgQyBleHRlbnNpb25zCi0gIC0td2l0aG91dC1kb2NzICAgICAgICAgIERvIG5vdCBpbnN0YWxsIGRvY3VtZW50YXRpb24gZmlsZXMKLQotCi1Ecm9wLWluCi1+fn5+fn5+Ci0KLXJKU21pbiBlZmZlY3RpdmVseSBjb25zaXN0cyBvZiB0d28gZmlsZXM6IHJqc21pbi5weSBhbmQgcmpzbWluLmMsIHRoZQotbGF0dGVyIGJlaW5nIGVudGlyZWx5IG9wdGlvbmFsLiBTbywgZm9yIHNpbXBsZSBpbnRlZ3JhdGlvbiB5b3UgY2FuIGp1c3QKLWNvcHkgcmpzbWluLnB5IGludG8geW91ciBwcm9qZWN0IGFuZCB1c2UgaXQuCi0KLQotRE9DVU1FTlRBVElPTgotLS0tLS0tLS0tLS0tLQotCi1BIGdlbmVyYXRlZCBBUEkgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGRvY3MvYXBpZG9jLyBkaXJlY3RvcnkuCi1CdXQgeW91IGNhbiBqdXN0IGxvb2sgaW50byB0aGUgbW9kdWxlLiBJdCBwcm92aWRlcyBhIHNpbXBsZSBmdW5jdGlvbiwKLWNhbGxlZCBqc21pbiB3aGljaCB0YWtlcyB0aGUgc2NyaXB0IGFzIGEgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSBtaW5pZmllZAotc2NyaXB0IGFzIGEgc3RyaW5nLgotCi1UaGUgbW9kdWxlIGFkZGl0aW9uYWxseSBwcm92aWRlcyBhICJzdHJlYW15IiBpbnRlcmZhY2Ugc2ltaWxhciB0byB0aGUgb25lCi1qc21pbi5jIHByb3ZpZGVzOgotCi0kIHB5dGhvbiAtbXJqc21pbiA8c2NyaXB0ID5taW5pZmllZAotCi1JdCB0YWtlcyB0d28gb3B0aW9uczoKLQotICAtYiAgS2VlcCBiYW5nLWNvbW1lbnRzIChDb21tZW50cyBzdGFydGluZyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmspCi0gIC1wICBGb3JjZSB1c2luZyB0aGUgcHl0aG9uIGltcGxlbWVudGF0aW9uIChub3QgdGhlIEMgaW1wbGVtZW50YXRpb24pCi0KLVRoZSBsYXRlc3QgZG9jdW1lbnRhdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBvbmxpbmUgYXQKLTxodHRwOi8vb3BlbnNvdXJjZS5wZXJsaWcuZGUvcmpzbWluLz4uCi0KLQotQlVHUwotLS0tLQotCi1ObyBidWdzLCBvZiBjb3Vyc2UuIDstKQotQnV0IGlmIHlvdSd2ZSBmb3VuZCBvbmUgb3IgaGF2ZSBhbiBpZGVhIGhvdyB0byBpbXByb3ZlIHJqc21pbiwgZmVlbCBmcmVlCi10byBzZW5kIGEgcHVsbCByZXF1ZXN0IG9uIGBnaXRodWIgPGh0dHBzOi8vZ2l0aHViLmNvbS9uZHBhcmtlci9yanNtaW4+YF8KLW9yIHNlbmQgYSBtYWlsIHRvIDxyanNtaW4tYnVnc0BwZXJsaWcuZGU+LgotCi0KLUFVVEhPUiBJTkZPUk1BVElPTgotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFuZHLDqSAibmQiIE1hbG8gPG5kQHBlcmxpZy5kZT4KLUdQRzogMHg4MTAzQTM3RQotCi0KLSAgSWYgR29kIGludGVuZGVkIHBlb3BsZSB0byBiZSBuYWtlZCwgdGhleSB3b3VsZCBiZSBib3JuIHRoYXQgd2F5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gT3NjYXIgV2lsZGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL0RhdGVUaW1lU2hvcnRjdXRzLmpzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vYmVuY2gvRGF0ZVRpbWVTaG9ydGN1dHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNDdkNmQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vYmVuY2gvRGF0ZVRpbWVTaG9ydGN1dHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzODggKzAsMCBAQAotLyohIFRha2VuIGZyb20gZGphbmdvIHJlbGVhc2UgMS44LjUKLQotQ29weXJpZ2h0IChjKSBEamFuZ28gU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgaW5kaXZpZHVhbCBjb250cmlidXRvcnMuCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAotYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCi0gICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBEamFuZ28gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCi0gICAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSAgICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi1XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi1ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLUxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi1TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLS8vIEluc2VydHMgc2hvcnRjdXQgYnV0dG9ucyBhZnRlciBhbGwgb2YgdGhlIGZvbGxvd2luZzoKLS8vICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9InZEYXRlRmllbGQiPgotLy8gICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0idlRpbWVGaWVsZCI+Ci0KLXZhciBEYXRlVGltZVNob3J0Y3V0cyA9IHsKLSAgICBjYWxlbmRhcnM6IFtdLAotICAgIGNhbGVuZGFySW5wdXRzOiBbXSwKLSAgICBjbG9ja0lucHV0czogW10sCi0gICAgZGlzbWlzc0Nsb2NrRnVuYzogW10sCi0gICAgZGlzbWlzc0NhbGVuZGFyRnVuYzogW10sCi0gICAgY2FsZW5kYXJEaXZOYW1lMTogJ2NhbGVuZGFyYm94JywgLy8gbmFtZSBvZiBjYWxlbmRhciA8ZGl2PiB0aGF0IGdldHMgdG9nZ2xlZAotICAgIGNhbGVuZGFyRGl2TmFtZTI6ICdjYWxlbmRhcmluJywgIC8vIG5hbWUgb2YgPGRpdj4gdGhhdCBjb250YWlucyBjYWxlbmRhcgotICAgIGNhbGVuZGFyTGlua05hbWU6ICdjYWxlbmRhcmxpbmsnLC8vIG5hbWUgb2YgdGhlIGxpbmsgdGhhdCBpcyB1c2VkIHRvIHRvZ2dsZQotICAgIGNsb2NrRGl2TmFtZTogJ2Nsb2NrYm94JywgICAgICAgIC8vIG5hbWUgb2YgY2xvY2sgPGRpdj4gdGhhdCBnZXRzIHRvZ2dsZWQKLSAgICBjbG9ja0xpbmtOYW1lOiAnY2xvY2tsaW5rJywgICAgICAvLyBuYW1lIG9mIHRoZSBsaW5rIHRoYXQgaXMgdXNlZCB0byB0b2dnbGUKLSAgICBzaG9ydEN1dHNDbGFzczogJ2RhdGV0aW1lc2hvcnRjdXRzJywgLy8gY2xhc3Mgb2YgdGhlIGNsb2NrIGFuZCBjYWwgc2hvcnRjdXRzCi0gICAgdGltZXpvbmVXYXJuaW5nQ2xhc3M6ICd0aW1lem9uZXdhcm5pbmcnLCAvLyBjbGFzcyBvZiB0aGUgd2FybmluZyBmb3IgdGltZXpvbmUgbWlzbWF0Y2gKLSAgICB0aW1lem9uZU9mZnNldDogMCwKLSAgICBhZG1pbl9tZWRpYV9wcmVmaXg6ICcnLAotICAgIGluaXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAvLyBHZXQgYWRtaW5fbWVkaWFfcHJlZml4IGJ5IGdyYWJiaW5nIGl0IG9mZiB0aGUgd2luZG93IG9iamVjdC4gSXQncwotICAgICAgICAvLyBzZXQgaW4gdGhlIGFkbWluL2Jhc2UuaHRtbCB0ZW1wbGF0ZSwgc28gaWYgaXQncyBub3QgdGhlcmUsIHNvbWVvbmUncwotICAgICAgICAvLyBvdmVycmlkZGVuIHRoZSB0ZW1wbGF0ZS4gSW4gdGhhdCBjYXNlLCB3ZSdsbCBzZXQgYSBjbGVhcmx5LWludmFsaWQKLSAgICAgICAgLy8gdmFsdWUgaW4gdGhlIGhvcGVzIHRoYXQgc29tZW9uZSB3aWxsIGV4YW1pbmUgSFRUUCByZXF1ZXN0cyBhbmQgc2VlIGl0LgotICAgICAgICBpZiAod2luZG93Ll9fYWRtaW5fbWVkaWFfcHJlZml4X18gIT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICBEYXRlVGltZVNob3J0Y3V0cy5hZG1pbl9tZWRpYV9wcmVmaXggPSB3aW5kb3cuX19hZG1pbl9tZWRpYV9wcmVmaXhfXzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERhdGVUaW1lU2hvcnRjdXRzLmFkbWluX21lZGlhX3ByZWZpeCA9ICcvbWlzc2luZy1hZG1pbi1tZWRpYS1wcmVmaXgvJzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aW5kb3cuX19hZG1pbl91dGNfb2Zmc2V0X18gIT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICB2YXIgc2VydmVyT2Zmc2V0ID0gd2luZG93Ll9fYWRtaW5fdXRjX29mZnNldF9fOwotICAgICAgICAgICAgdmFyIGxvY2FsT2Zmc2V0ID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogLTYwOwotICAgICAgICAgICAgRGF0ZVRpbWVTaG9ydGN1dHMudGltZXpvbmVPZmZzZXQgPSBsb2NhbE9mZnNldCAtIHNlcnZlck9mZnNldDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBpbnB1dHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTsKLSAgICAgICAgZm9yIChpPTA7IGk8aW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgaW5wID0gaW5wdXRzW2ldOwotICAgICAgICAgICAgaWYgKGlucC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PSAndGV4dCcgJiYgaW5wLmNsYXNzTmFtZS5tYXRjaCgvdlRpbWVGaWVsZC8pKSB7Ci0gICAgICAgICAgICAgICAgRGF0ZVRpbWVTaG9ydGN1dHMuYWRkQ2xvY2soaW5wKTsKLSAgICAgICAgICAgICAgICBEYXRlVGltZVNob3J0Y3V0cy5hZGRUaW1lem9uZVdhcm5pbmcoaW5wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGlucC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PSAndGV4dCcgJiYgaW5wLmNsYXNzTmFtZS5tYXRjaCgvdkRhdGVGaWVsZC8pKSB7Ci0gICAgICAgICAgICAgICAgRGF0ZVRpbWVTaG9ydGN1dHMuYWRkQ2FsZW5kYXIoaW5wKTsKLSAgICAgICAgICAgICAgICBEYXRlVGltZVNob3J0Y3V0cy5hZGRUaW1lem9uZVdhcm5pbmcoaW5wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgd2hpbGUgYWNjb3VudGluZyBmb3IgdGhlIHNlcnZlciB0aW1lem9uZS4KLSAgICBub3c6IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod2luZG93Ll9fYWRtaW5fdXRjX29mZnNldF9fICE9IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgdmFyIHNlcnZlck9mZnNldCA9IHdpbmRvdy5fX2FkbWluX3V0Y19vZmZzZXRfXzsKLSAgICAgICAgICAgIHZhciBsb2NhbE5vdyA9IG5ldyBEYXRlKCk7Ci0gICAgICAgICAgICB2YXIgbG9jYWxPZmZzZXQgPSBsb2NhbE5vdy5nZXRUaW1lem9uZU9mZnNldCgpICogLTYwOwotICAgICAgICAgICAgbG9jYWxOb3cuc2V0VGltZShsb2NhbE5vdy5nZXRUaW1lKCkgKyAxMDAwICogKHNlcnZlck9mZnNldCAtIGxvY2FsT2Zmc2V0KSk7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYWxOb3c7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoKTsKLSAgICAgICAgfQotICAgIH0sCi0gICAgLy8gQWRkIGEgd2FybmluZyB3aGVuIHRoZSB0aW1lIHpvbmUgaW4gdGhlIGJyb3dzZXIgYW5kIGJhY2tlbmQgZG8gbm90IG1hdGNoLgotICAgIGFkZFRpbWV6b25lV2FybmluZzogZnVuY3Rpb24oaW5wKSB7Ci0gICAgICAgIHZhciAkID0gZGphbmdvLmpRdWVyeTsKLSAgICAgICAgdmFyIHdhcm5pbmdDbGFzcyA9IERhdGVUaW1lU2hvcnRjdXRzLnRpbWV6b25lV2FybmluZ0NsYXNzOwotICAgICAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBEYXRlVGltZVNob3J0Y3V0cy50aW1lem9uZU9mZnNldCAvIDM2MDA7Ci0KLSAgICAgICAgLy8gT25seSB3YXJuIGlmIHRoZXJlIGlzIGEgdGltZSB6b25lIG1pc21hdGNoLgotICAgICAgICBpZiAoIXRpbWV6b25lT2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHdhcm5pbmcgaXMgYWxyZWFkeSB0aGVyZS4KLSAgICAgICAgaWYgKCQoaW5wKS5zaWJsaW5ncygnLicgKyB3YXJuaW5nQ2xhc3MpLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgbWVzc2FnZTsKLSAgICAgICAgaWYgKHRpbWV6b25lT2Zmc2V0ID4gMCkgewotICAgICAgICAgICAgbWVzc2FnZSA9IG5nZXR0ZXh0KAotICAgICAgICAgICAgICAgICdOb3RlOiBZb3UgYXJlICVzIGhvdXIgYWhlYWQgb2Ygc2VydmVyIHRpbWUuJywKLSAgICAgICAgICAgICAgICAnTm90ZTogWW91IGFyZSAlcyBob3VycyBhaGVhZCBvZiBzZXJ2ZXIgdGltZS4nLAotICAgICAgICAgICAgICAgIHRpbWV6b25lT2Zmc2V0Ci0gICAgICAgICAgICApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGltZXpvbmVPZmZzZXQgKj0gLTEKLSAgICAgICAgICAgIG1lc3NhZ2UgPSBuZ2V0dGV4dCgKLSAgICAgICAgICAgICAgICAnTm90ZTogWW91IGFyZSAlcyBob3VyIGJlaGluZCBzZXJ2ZXIgdGltZS4nLAotICAgICAgICAgICAgICAgICdOb3RlOiBZb3UgYXJlICVzIGhvdXJzIGJlaGluZCBzZXJ2ZXIgdGltZS4nLAotICAgICAgICAgICAgICAgIHRpbWV6b25lT2Zmc2V0Ci0gICAgICAgICAgICApOwotICAgICAgICB9Ci0gICAgICAgIG1lc3NhZ2UgPSBpbnRlcnBvbGF0ZShtZXNzYWdlLCBbdGltZXpvbmVPZmZzZXRdKTsKLQotICAgICAgICB2YXIgJHdhcm5pbmcgPSAkKCc8c3Bhbj4nKTsKLSAgICAgICAgJHdhcm5pbmcuYXR0cignY2xhc3MnLCB3YXJuaW5nQ2xhc3MpOwotICAgICAgICAkd2FybmluZy50ZXh0KG1lc3NhZ2UpOwotCi0gICAgICAgICQoaW5wKS5wYXJlbnQoKQotICAgICAgICAgICAgLmFwcGVuZCgkKCc8YnI+JykpCi0gICAgICAgICAgICAuYXBwZW5kKCR3YXJuaW5nKQotICAgIH0sCi0gICAgLy8gQWRkIGNsb2NrIHdpZGdldCB0byBhIGdpdmVuIGZpZWxkCi0gICAgYWRkQ2xvY2s6IGZ1bmN0aW9uKGlucCkgewotICAgICAgICB2YXIgbnVtID0gRGF0ZVRpbWVTaG9ydGN1dHMuY2xvY2tJbnB1dHMubGVuZ3RoOwotICAgICAgICBEYXRlVGltZVNob3J0Y3V0cy5jbG9ja0lucHV0c1tudW1dID0gaW5wOwotICAgICAgICBEYXRlVGltZVNob3J0Y3V0cy5kaXNtaXNzQ2xvY2tGdW5jW251bV0gPSBmdW5jdGlvbigpIHsgRGF0ZVRpbWVTaG9ydGN1dHMuZGlzbWlzc0Nsb2NrKG51bSk7IHJldHVybiB0cnVlOyB9OwotCi0gICAgICAgIC8vIFNob3J0Y3V0IGxpbmtzIChjbG9jayBpY29uIGFuZCAiTm93IiBsaW5rKQotICAgICAgICB2YXIgc2hvcnRjdXRzX3NwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7Ci0gICAgICAgIHNob3J0Y3V0c19zcGFuLmNsYXNzTmFtZSA9IERhdGVUaW1lU2hvcnRjdXRzLnNob3J0Q3V0c0NsYXNzOwotICAgICAgICBpbnAucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2hvcnRjdXRzX3NwYW4sIGlucC5uZXh0U2libGluZyk7Ci0gICAgICAgIHZhciBub3dfbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKLSAgICAgICAgbm93X2xpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgImphdmFzY3JpcHQ6RGF0ZVRpbWVTaG9ydGN1dHMuaGFuZGxlQ2xvY2tRdWlja2xpbmsoIiArIG51bSArICIsIC0xKTsiKTsKLSAgICAgICAgbm93X2xpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZ2V0dGV4dCgnTm93JykpKTsKLSAgICAgICAgdmFyIGNsb2NrX2xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7Ci0gICAgICAgIGNsb2NrX2xpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgJ2phdmFzY3JpcHQ6RGF0ZVRpbWVTaG9ydGN1dHMub3BlbkNsb2NrKCcgKyBudW0gKyAnKTsnKTsKLSAgICAgICAgY2xvY2tfbGluay5pZCA9IERhdGVUaW1lU2hvcnRjdXRzLmNsb2NrTGlua05hbWUgKyBudW07Ci0gICAgICAgIHF1aWNrRWxlbWVudCgnaW1nJywgY2xvY2tfbGluaywgJycsICdzcmMnLCBEYXRlVGltZVNob3J0Y3V0cy5hZG1pbl9tZWRpYV9wcmVmaXggKyAnaW1nL2ljb25fY2xvY2suZ2lmJywgJ2FsdCcsIGdldHRleHQoJ0Nsb2NrJykpOwotICAgICAgICBzaG9ydGN1dHNfc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXDI0MCcpKTsKLSAgICAgICAgc2hvcnRjdXRzX3NwYW4uYXBwZW5kQ2hpbGQobm93X2xpbmspOwotICAgICAgICBzaG9ydGN1dHNfc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXDI0MHxcMjQwJykpOwotICAgICAgICBzaG9ydGN1dHNfc3Bhbi5hcHBlbmRDaGlsZChjbG9ja19saW5rKTsKLQotICAgICAgICAvLyBDcmVhdGUgY2xvY2sgbGluayBkaXYKLSAgICAgICAgLy8KLSAgICAgICAgLy8gTWFya3VwIGxvb2tzIGxpa2U6Ci0gICAgICAgIC8vIDxkaXYgaWQ9ImNsb2NrYm94MSIgY2xhc3M9ImNsb2NrYm94IG1vZHVsZSI+Ci0gICAgICAgIC8vICAgICA8aDI+Q2hvb3NlIGEgdGltZTwvaDI+Ci0gICAgICAgIC8vICAgICA8dWwgY2xhc3M9InRpbWVsaXN0Ij4KLSAgICAgICAgLy8gICAgICAgICA8bGk+PGEgaHJlZj0iIyI+Tm93PC9hPjwvbGk+Ci0gICAgICAgIC8vICAgICAgICAgPGxpPjxhIGhyZWY9IiMiPk1pZG5pZ2h0PC9hPjwvbGk+Ci0gICAgICAgIC8vICAgICAgICAgPGxpPjxhIGhyZWY9IiMiPjYgYS5tLjwvYT48L2xpPgotICAgICAgICAvLyAgICAgICAgIDxsaT48YSBocmVmPSIjIj5Ob29uPC9hPjwvbGk+Ci0gICAgICAgIC8vICAgICA8L3VsPgotICAgICAgICAvLyAgICAgPHAgY2xhc3M9ImNhbGVuZGFyLWNhbmNlbCI+PGEgaHJlZj0iIyI+Q2FuY2VsPC9hPjwvcD4KLSAgICAgICAgLy8gPC9kaXY+Ci0KLSAgICAgICAgdmFyIGNsb2NrX2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICBjbG9ja19ib3guc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICAgICAgY2xvY2tfYm94LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKLSAgICAgICAgY2xvY2tfYm94LmNsYXNzTmFtZSA9ICdjbG9ja2JveCBtb2R1bGUnOwotICAgICAgICBjbG9ja19ib3guc2V0QXR0cmlidXRlKCdpZCcsIERhdGVUaW1lU2hvcnRjdXRzLmNsb2NrRGl2TmFtZSArIG51bSk7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2xvY2tfYm94KTsKLSAgICAgICAgYWRkRXZlbnQoY2xvY2tfYm94LCAnY2xpY2snLCBjYW5jZWxFdmVudFByb3BhZ2F0aW9uKTsKLQotICAgICAgICBxdWlja0VsZW1lbnQoJ2gyJywgY2xvY2tfYm94LCBnZXR0ZXh0KCdDaG9vc2UgYSB0aW1lJykpOwotICAgICAgICB2YXIgdGltZV9saXN0ID0gcXVpY2tFbGVtZW50KCd1bCcsIGNsb2NrX2JveCk7Ci0gICAgICAgIHRpbWVfbGlzdC5jbGFzc05hbWUgPSAndGltZWxpc3QnOwotICAgICAgICBxdWlja0VsZW1lbnQoImEiLCBxdWlja0VsZW1lbnQoImxpIiwgdGltZV9saXN0KSwgZ2V0dGV4dCgiTm93IiksICJocmVmIiwgImphdmFzY3JpcHQ6RGF0ZVRpbWVTaG9ydGN1dHMuaGFuZGxlQ2xvY2tRdWlja2xpbmsoIiArIG51bSArICIsIC0xKTsiKTsKLSAgICAgICAgcXVpY2tFbGVtZW50KCJhIiwgcXVpY2tFbGVtZW50KCJsaSIsIHRpbWVfbGlzdCksIGdldHRleHQoIk1pZG5pZ2h0IiksICJocmVmIiwgImphdmFzY3JpcHQ6RGF0ZVRpbWVTaG9ydGN1dHMuaGFuZGxlQ2xvY2tRdWlja2xpbmsoIiArIG51bSArICIsIDApOyIpOwotICAgICAgICBxdWlja0VsZW1lbnQoImEiLCBxdWlja0VsZW1lbnQoImxpIiwgdGltZV9saXN0KSwgZ2V0dGV4dCgiNiBhLm0uIiksICJocmVmIiwgImphdmFzY3JpcHQ6RGF0ZVRpbWVTaG9ydGN1dHMuaGFuZGxlQ2xvY2tRdWlja2xpbmsoIiArIG51bSArICIsIDYpOyIpOwotICAgICAgICBxdWlja0VsZW1lbnQoImEiLCBxdWlja0VsZW1lbnQoImxpIiwgdGltZV9saXN0KSwgZ2V0dGV4dCgiTm9vbiIpLCAiaHJlZiIsICJqYXZhc2NyaXB0OkRhdGVUaW1lU2hvcnRjdXRzLmhhbmRsZUNsb2NrUXVpY2tsaW5rKCIgKyBudW0gKyAiLCAxMik7Iik7Ci0KLSAgICAgICAgdmFyIGNhbmNlbF9wID0gcXVpY2tFbGVtZW50KCdwJywgY2xvY2tfYm94KTsKLSAgICAgICAgY2FuY2VsX3AuY2xhc3NOYW1lID0gJ2NhbGVuZGFyLWNhbmNlbCc7Ci0gICAgICAgIHF1aWNrRWxlbWVudCgnYScsIGNhbmNlbF9wLCBnZXR0ZXh0KCdDYW5jZWwnKSwgJ2hyZWYnLCAnamF2YXNjcmlwdDpEYXRlVGltZVNob3J0Y3V0cy5kaXNtaXNzQ2xvY2soJyArIG51bSArICcpOycpOwotICAgICAgICBkamFuZ28ualF1ZXJ5KGRvY3VtZW50KS5iaW5kKCdrZXl1cCcsIGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT0gMjcpIHsKLSAgICAgICAgICAgICAgICAvLyBFU0Mga2V5IGNsb3NlcyBwb3B1cAotICAgICAgICAgICAgICAgIERhdGVUaW1lU2hvcnRjdXRzLmRpc21pc3NDbG9jayhudW0pOwotICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0sCi0gICAgb3BlbkNsb2NrOiBmdW5jdGlvbihudW0pIHsKLSAgICAgICAgdmFyIGNsb2NrX2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKERhdGVUaW1lU2hvcnRjdXRzLmNsb2NrRGl2TmFtZStudW0pCi0gICAgICAgIHZhciBjbG9ja19saW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoRGF0ZVRpbWVTaG9ydGN1dHMuY2xvY2tMaW5rTmFtZStudW0pCi0KLSAgICAgICAgLy8gUmVjYWxjdWxhdGUgdGhlIGNsb2NrYm94IHBvc2l0aW9uCi0gICAgICAgIC8vIGlzIGl0IGxlZnQtdG8tcmlnaHQgb3IgcmlnaHQtdG8tbGVmdCBsYXlvdXQgPwotICAgICAgICBpZiAoZ2V0U3R5bGUoZG9jdW1lbnQuYm9keSwnZGlyZWN0aW9uJykhPSdydGwnKSB7Ci0gICAgICAgICAgICBjbG9ja19ib3guc3R5bGUubGVmdCA9IGZpbmRQb3NYKGNsb2NrX2xpbmspICsgMTcgKyAncHgnOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gc2luY2Ugc3R5bGUncyB3aWR0aCBpcyBpbiBlbSwgaXQnZCBiZSB0b3VnaCB0byBjYWxjdWxhdGUKLSAgICAgICAgICAgIC8vIHB4IHZhbHVlIG9mIGl0LiBsZXQncyB1c2UgYW4gZXN0aW1hdGVkIHB4IGZvciBub3cKLSAgICAgICAgICAgIC8vIFRPRE86IElFIHJldHVybnMgd3JvbmcgdmFsdWUgZm9yIGZpbmRQb3NYIHdoZW4gaW4gcnRsIG1vZGUKLSAgICAgICAgICAgIC8vICAgICAgIChpdCByZXR1cm5zIGFzIGl0IHdhcyBsZWZ0IGFsaWduZWQpLCBuZWVkcyB0byBiZSBmaXhlZC4KLSAgICAgICAgICAgIGNsb2NrX2JveC5zdHlsZS5sZWZ0ID0gZmluZFBvc1goY2xvY2tfbGluaykgLSAxMTAgKyAncHgnOwotICAgICAgICB9Ci0gICAgICAgIGNsb2NrX2JveC5zdHlsZS50b3AgPSBNYXRoLm1heCgwLCBmaW5kUG9zWShjbG9ja19saW5rKSAtIDMwKSArICdweCc7Ci0KLSAgICAgICAgLy8gU2hvdyB0aGUgY2xvY2sgYm94Ci0gICAgICAgIGNsb2NrX2JveC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKLSAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIERhdGVUaW1lU2hvcnRjdXRzLmRpc21pc3NDbG9ja0Z1bmNbbnVtXSk7Ci0gICAgfSwKLSAgICBkaXNtaXNzQ2xvY2s6IGZ1bmN0aW9uKG51bSkgewotICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKERhdGVUaW1lU2hvcnRjdXRzLmNsb2NrRGl2TmFtZSArIG51bSkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICAgICByZW1vdmVFdmVudChkb2N1bWVudCwgJ2NsaWNrJywgRGF0ZVRpbWVTaG9ydGN1dHMuZGlzbWlzc0Nsb2NrRnVuY1tudW1dKTsKLSAgICB9LAotICAgIGhhbmRsZUNsb2NrUXVpY2tsaW5rOiBmdW5jdGlvbihudW0sIHZhbCkgewotICAgICAgIHZhciBkOwotICAgICAgIGlmICh2YWwgPT0gLTEpIHsKLSAgICAgICAgICAgZCA9IERhdGVUaW1lU2hvcnRjdXRzLm5vdygpOwotICAgICAgIH0KLSAgICAgICBlbHNlIHsKLSAgICAgICAgICAgZCA9IG5ldyBEYXRlKDE5NzAsIDEsIDEsIHZhbCwgMCwgMCwgMCkKLSAgICAgICB9Ci0gICAgICAgRGF0ZVRpbWVTaG9ydGN1dHMuY2xvY2tJbnB1dHNbbnVtXS52YWx1ZSA9IGQuc3RyZnRpbWUoZ2V0X2Zvcm1hdCgnVElNRV9JTlBVVF9GT1JNQVRTJylbMF0pOwotICAgICAgIERhdGVUaW1lU2hvcnRjdXRzLmNsb2NrSW5wdXRzW251bV0uZm9jdXMoKTsKLSAgICAgICBEYXRlVGltZVNob3J0Y3V0cy5kaXNtaXNzQ2xvY2sobnVtKTsKLSAgICB9LAotICAgIC8vIEFkZCBjYWxlbmRhciB3aWRnZXQgdG8gYSBnaXZlbiBmaWVsZC4KLSAgICBhZGRDYWxlbmRhcjogZnVuY3Rpb24oaW5wKSB7Ci0gICAgICAgIHZhciBudW0gPSBEYXRlVGltZVNob3J0Y3V0cy5jYWxlbmRhcnMubGVuZ3RoOwotCi0gICAgICAgIERhdGVUaW1lU2hvcnRjdXRzLmNhbGVuZGFySW5wdXRzW251bV0gPSBpbnA7Ci0gICAgICAgIERhdGVUaW1lU2hvcnRjdXRzLmRpc21pc3NDYWxlbmRhckZ1bmNbbnVtXSA9IGZ1bmN0aW9uKCkgeyBEYXRlVGltZVNob3J0Y3V0cy5kaXNtaXNzQ2FsZW5kYXIobnVtKTsgcmV0dXJuIHRydWU7IH07Ci0KLSAgICAgICAgLy8gU2hvcnRjdXQgbGlua3MgKGNhbGVuZGFyIGljb24gYW5kICJUb2RheSIgbGluaykKLSAgICAgICAgdmFyIHNob3J0Y3V0c19zcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwotICAgICAgICBzaG9ydGN1dHNfc3Bhbi5jbGFzc05hbWUgPSBEYXRlVGltZVNob3J0Y3V0cy5zaG9ydEN1dHNDbGFzczsKLSAgICAgICAgaW5wLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNob3J0Y3V0c19zcGFuLCBpbnAubmV4dFNpYmxpbmcpOwotICAgICAgICB2YXIgdG9kYXlfbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKLSAgICAgICAgdG9kYXlfbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnamF2YXNjcmlwdDpEYXRlVGltZVNob3J0Y3V0cy5oYW5kbGVDYWxlbmRhclF1aWNrTGluaygnICsgbnVtICsgJywgMCk7Jyk7Ci0gICAgICAgIHRvZGF5X2xpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZ2V0dGV4dCgnVG9kYXknKSkpOwotICAgICAgICB2YXIgY2FsX2xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7Ci0gICAgICAgIGNhbF9saW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsICdqYXZhc2NyaXB0OkRhdGVUaW1lU2hvcnRjdXRzLm9wZW5DYWxlbmRhcignICsgbnVtICsgJyk7Jyk7Ci0gICAgICAgIGNhbF9saW5rLmlkID0gRGF0ZVRpbWVTaG9ydGN1dHMuY2FsZW5kYXJMaW5rTmFtZSArIG51bTsKLSAgICAgICAgcXVpY2tFbGVtZW50KCdpbWcnLCBjYWxfbGluaywgJycsICdzcmMnLCBEYXRlVGltZVNob3J0Y3V0cy5hZG1pbl9tZWRpYV9wcmVmaXggKyAnaW1nL2ljb25fY2FsZW5kYXIuZ2lmJywgJ2FsdCcsIGdldHRleHQoJ0NhbGVuZGFyJykpOwotICAgICAgICBzaG9ydGN1dHNfc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXDI0MCcpKTsKLSAgICAgICAgc2hvcnRjdXRzX3NwYW4uYXBwZW5kQ2hpbGQodG9kYXlfbGluayk7Ci0gICAgICAgIHNob3J0Y3V0c19zcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcMjQwfFwyNDAnKSk7Ci0gICAgICAgIHNob3J0Y3V0c19zcGFuLmFwcGVuZENoaWxkKGNhbF9saW5rKTsKLQotICAgICAgICAvLyBDcmVhdGUgY2FsZW5kYXJib3ggZGl2LgotICAgICAgICAvLwotICAgICAgICAvLyBNYXJrdXAgbG9va3MgbGlrZToKLSAgICAgICAgLy8KLSAgICAgICAgLy8gPGRpdiBpZD0iY2FsZW5kYXJib3gzIiBjbGFzcz0iY2FsZW5kYXJib3ggbW9kdWxlIj4KLSAgICAgICAgLy8gICAgIDxoMj4KLSAgICAgICAgLy8gICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJsaW5rLXByZXZpb3VzIj4mbHNhcXVvOzwvYT4KLSAgICAgICAgLy8gICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJsaW5rLW5leHQiPiZyc2FxdW87PC9hPiBGZWJydWFyeSAyMDAzCi0gICAgICAgIC8vICAgICA8L2gyPgotICAgICAgICAvLyAgICAgPGRpdiBjbGFzcz0iY2FsZW5kYXIiIGlkPSJjYWxlbmRhcmluMyI+Ci0gICAgICAgIC8vICAgICAgICAgPCEtLSAoY2FsKSAtLT4KLSAgICAgICAgLy8gICAgIDwvZGl2PgotICAgICAgICAvLyAgICAgPGRpdiBjbGFzcz0iY2FsZW5kYXItc2hvcnRjdXRzIj4KLSAgICAgICAgLy8gICAgICAgICAgPGEgaHJlZj0iIyI+WWVzdGVyZGF5PC9hPiB8IDxhIGhyZWY9IiMiPlRvZGF5PC9hPiB8IDxhIGhyZWY9IiMiPlRvbW9ycm93PC9hPgotICAgICAgICAvLyAgICAgPC9kaXY+Ci0gICAgICAgIC8vICAgICA8cCBjbGFzcz0iY2FsZW5kYXItY2FuY2VsIj48YSBocmVmPSIjIj5DYW5jZWw8L2E+PC9wPgotICAgICAgICAvLyA8L2Rpdj4KLSAgICAgICAgdmFyIGNhbF9ib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAgICAgY2FsX2JveC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotICAgICAgICBjYWxfYm94LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKLSAgICAgICAgY2FsX2JveC5jbGFzc05hbWUgPSAnY2FsZW5kYXJib3ggbW9kdWxlJzsKLSAgICAgICAgY2FsX2JveC5zZXRBdHRyaWJ1dGUoJ2lkJywgRGF0ZVRpbWVTaG9ydGN1dHMuY2FsZW5kYXJEaXZOYW1lMSArIG51bSk7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2FsX2JveCk7Ci0gICAgICAgIGFkZEV2ZW50KGNhbF9ib3gsICdjbGljaycsIGNhbmNlbEV2ZW50UHJvcGFnYXRpb24pOwotCi0gICAgICAgIC8vIG5leHQtcHJldiBsaW5rcwotICAgICAgICB2YXIgY2FsX25hdiA9IHF1aWNrRWxlbWVudCgnZGl2JywgY2FsX2JveCk7Ci0gICAgICAgIHZhciBjYWxfbmF2X3ByZXYgPSBxdWlja0VsZW1lbnQoJ2EnLCBjYWxfbmF2LCAnPCcsICdocmVmJywgJ2phdmFzY3JpcHQ6RGF0ZVRpbWVTaG9ydGN1dHMuZHJhd1ByZXYoJytudW0rJyk7Jyk7Ci0gICAgICAgIGNhbF9uYXZfcHJldi5jbGFzc05hbWUgPSAnY2FsZW5kYXJuYXYtcHJldmlvdXMnOwotICAgICAgICB2YXIgY2FsX25hdl9uZXh0ID0gcXVpY2tFbGVtZW50KCdhJywgY2FsX25hdiwgJz4nLCAnaHJlZicsICdqYXZhc2NyaXB0OkRhdGVUaW1lU2hvcnRjdXRzLmRyYXdOZXh0KCcrbnVtKycpOycpOwotICAgICAgICBjYWxfbmF2X25leHQuY2xhc3NOYW1lID0gJ2NhbGVuZGFybmF2LW5leHQnOwotCi0gICAgICAgIC8vIG1haW4gYm94Ci0gICAgICAgIHZhciBjYWxfbWFpbiA9IHF1aWNrRWxlbWVudCgnZGl2JywgY2FsX2JveCwgJycsICdpZCcsIERhdGVUaW1lU2hvcnRjdXRzLmNhbGVuZGFyRGl2TmFtZTIgKyBudW0pOwotICAgICAgICBjYWxfbWFpbi5jbGFzc05hbWUgPSAnY2FsZW5kYXInOwotICAgICAgICBEYXRlVGltZVNob3J0Y3V0cy5jYWxlbmRhcnNbbnVtXSA9IG5ldyBDYWxlbmRhcihEYXRlVGltZVNob3J0Y3V0cy5jYWxlbmRhckRpdk5hbWUyICsgbnVtLCBEYXRlVGltZVNob3J0Y3V0cy5oYW5kbGVDYWxlbmRhckNhbGxiYWNrKG51bSkpOwotICAgICAgICBEYXRlVGltZVNob3J0Y3V0cy5jYWxlbmRhcnNbbnVtXS5kcmF3Q3VycmVudCgpOwotCi0gICAgICAgIC8vIGNhbGVuZGFyIHNob3J0Y3V0cwotICAgICAgICB2YXIgc2hvcnRjdXRzID0gcXVpY2tFbGVtZW50KCdkaXYnLCBjYWxfYm94KTsKLSAgICAgICAgc2hvcnRjdXRzLmNsYXNzTmFtZSA9ICdjYWxlbmRhci1zaG9ydGN1dHMnOwotICAgICAgICBxdWlja0VsZW1lbnQoJ2EnLCBzaG9ydGN1dHMsIGdldHRleHQoJ1llc3RlcmRheScpLCAnaHJlZicsICdqYXZhc2NyaXB0OkRhdGVUaW1lU2hvcnRjdXRzLmhhbmRsZUNhbGVuZGFyUXVpY2tMaW5rKCcgKyBudW0gKyAnLCAtMSk7Jyk7Ci0gICAgICAgIHNob3J0Y3V0cy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXDI0MHxcMjQwJykpOwotICAgICAgICBxdWlja0VsZW1lbnQoJ2EnLCBzaG9ydGN1dHMsIGdldHRleHQoJ1RvZGF5JyksICdocmVmJywgJ2phdmFzY3JpcHQ6RGF0ZVRpbWVTaG9ydGN1dHMuaGFuZGxlQ2FsZW5kYXJRdWlja0xpbmsoJyArIG51bSArICcsIDApOycpOwotICAgICAgICBzaG9ydGN1dHMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1wyNDB8XDI0MCcpKTsKLSAgICAgICAgcXVpY2tFbGVtZW50KCdhJywgc2hvcnRjdXRzLCBnZXR0ZXh0KCdUb21vcnJvdycpLCAnaHJlZicsICdqYXZhc2NyaXB0OkRhdGVUaW1lU2hvcnRjdXRzLmhhbmRsZUNhbGVuZGFyUXVpY2tMaW5rKCcgKyBudW0gKyAnLCArMSk7Jyk7Ci0KLSAgICAgICAgLy8gY2FuY2VsIGJhcgotICAgICAgICB2YXIgY2FuY2VsX3AgPSBxdWlja0VsZW1lbnQoJ3AnLCBjYWxfYm94KTsKLSAgICAgICAgY2FuY2VsX3AuY2xhc3NOYW1lID0gJ2NhbGVuZGFyLWNhbmNlbCc7Ci0gICAgICAgIHF1aWNrRWxlbWVudCgnYScsIGNhbmNlbF9wLCBnZXR0ZXh0KCdDYW5jZWwnKSwgJ2hyZWYnLCAnamF2YXNjcmlwdDpEYXRlVGltZVNob3J0Y3V0cy5kaXNtaXNzQ2FsZW5kYXIoJyArIG51bSArICcpOycpOwotICAgICAgICBkamFuZ28ualF1ZXJ5KGRvY3VtZW50KS5iaW5kKCdrZXl1cCcsIGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT0gMjcpIHsKLSAgICAgICAgICAgICAgICAvLyBFU0Mga2V5IGNsb3NlcyBwb3B1cAotICAgICAgICAgICAgICAgIERhdGVUaW1lU2hvcnRjdXRzLmRpc21pc3NDYWxlbmRhcihudW0pOwotICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0sCi0gICAgb3BlbkNhbGVuZGFyOiBmdW5jdGlvbihudW0pIHsKLSAgICAgICAgdmFyIGNhbF9ib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChEYXRlVGltZVNob3J0Y3V0cy5jYWxlbmRhckRpdk5hbWUxK251bSkKLSAgICAgICAgdmFyIGNhbF9saW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoRGF0ZVRpbWVTaG9ydGN1dHMuY2FsZW5kYXJMaW5rTmFtZStudW0pCi0gICAgICAgIHZhciBpbnAgPSBEYXRlVGltZVNob3J0Y3V0cy5jYWxlbmRhcklucHV0c1tudW1dOwotCi0gICAgICAgIC8vIERldGVybWluZSBpZiB0aGUgY3VycmVudCB2YWx1ZSBpbiB0aGUgaW5wdXQgaGFzIGEgdmFsaWQgZGF0ZS4KLSAgICAgICAgLy8gSWYgc28sIGRyYXcgdGhlIGNhbGVuZGFyIHdpdGggdGhhdCBkYXRlJ3MgeWVhciBhbmQgbW9udGguCi0gICAgICAgIGlmIChpbnAudmFsdWUpIHsKLSAgICAgICAgICAgIHZhciBmb3JtYXQgPSBnZXRfZm9ybWF0KCdEQVRFX0lOUFVUX0ZPUk1BVFMnKVswXTsKLSAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IGlucC52YWx1ZS5zdHJwdGltZShmb3JtYXQpOwotICAgICAgICAgICAgdmFyIHllYXIgPSBzZWxlY3RlZC5nZXRGdWxsWWVhcigpOwotICAgICAgICAgICAgdmFyIG1vbnRoID0gc2VsZWN0ZWQuZ2V0TW9udGgoKSArIDE7Ci0gICAgICAgICAgICB2YXIgcmUgPSAvXGR7NH0vCi0gICAgICAgICAgICBpZiAocmUudGVzdCh5ZWFyLnRvU3RyaW5nKCkpICYmIG1vbnRoID49IDEgJiYgbW9udGggPD0gMTIpIHsKLSAgICAgICAgICAgICAgICBEYXRlVGltZVNob3J0Y3V0cy5jYWxlbmRhcnNbbnVtXS5kcmF3RGF0ZShtb250aCwgeWVhciwgc2VsZWN0ZWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVjYWxjdWxhdGUgdGhlIGNsb2NrYm94IHBvc2l0aW9uCi0gICAgICAgIC8vIGlzIGl0IGxlZnQtdG8tcmlnaHQgb3IgcmlnaHQtdG8tbGVmdCBsYXlvdXQgPwotICAgICAgICBpZiAoZ2V0U3R5bGUoZG9jdW1lbnQuYm9keSwnZGlyZWN0aW9uJykhPSdydGwnKSB7Ci0gICAgICAgICAgICBjYWxfYm94LnN0eWxlLmxlZnQgPSBmaW5kUG9zWChjYWxfbGluaykgKyAxNyArICdweCc7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBzaW5jZSBzdHlsZSdzIHdpZHRoIGlzIGluIGVtLCBpdCdkIGJlIHRvdWdoIHRvIGNhbGN1bGF0ZQotICAgICAgICAgICAgLy8gcHggdmFsdWUgb2YgaXQuIGxldCdzIHVzZSBhbiBlc3RpbWF0ZWQgcHggZm9yIG5vdwotICAgICAgICAgICAgLy8gVE9ETzogSUUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgZmluZFBvc1ggd2hlbiBpbiBydGwgbW9kZQotICAgICAgICAgICAgLy8gICAgICAgKGl0IHJldHVybnMgYXMgaXQgd2FzIGxlZnQgYWxpZ25lZCksIG5lZWRzIHRvIGJlIGZpeGVkLgotICAgICAgICAgICAgY2FsX2JveC5zdHlsZS5sZWZ0ID0gZmluZFBvc1goY2FsX2xpbmspIC0gMTgwICsgJ3B4JzsKLSAgICAgICAgfQotICAgICAgICBjYWxfYm94LnN0eWxlLnRvcCA9IE1hdGgubWF4KDAsIGZpbmRQb3NZKGNhbF9saW5rKSAtIDc1KSArICdweCc7Ci0KLSAgICAgICAgY2FsX2JveC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKLSAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIERhdGVUaW1lU2hvcnRjdXRzLmRpc21pc3NDYWxlbmRhckZ1bmNbbnVtXSk7Ci0gICAgfSwKLSAgICBkaXNtaXNzQ2FsZW5kYXI6IGZ1bmN0aW9uKG51bSkgewotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChEYXRlVGltZVNob3J0Y3V0cy5jYWxlbmRhckRpdk5hbWUxK251bSkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICAgICAgcmVtb3ZlRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIERhdGVUaW1lU2hvcnRjdXRzLmRpc21pc3NDYWxlbmRhckZ1bmNbbnVtXSk7Ci0gICAgfSwKLSAgICBkcmF3UHJldjogZnVuY3Rpb24obnVtKSB7Ci0gICAgICAgIERhdGVUaW1lU2hvcnRjdXRzLmNhbGVuZGFyc1tudW1dLmRyYXdQcmV2aW91c01vbnRoKCk7Ci0gICAgfSwKLSAgICBkcmF3TmV4dDogZnVuY3Rpb24obnVtKSB7Ci0gICAgICAgIERhdGVUaW1lU2hvcnRjdXRzLmNhbGVuZGFyc1tudW1dLmRyYXdOZXh0TW9udGgoKTsKLSAgICB9LAotICAgIGhhbmRsZUNhbGVuZGFyQ2FsbGJhY2s6IGZ1bmN0aW9uKG51bSkgewotICAgICAgICB2YXIgZm9ybWF0ID0gZ2V0X2Zvcm1hdCgnREFURV9JTlBVVF9GT1JNQVRTJylbMF07Ci0gICAgICAgIC8vIHRoZSBmb3JtYXQgbmVlZHMgdG8gYmUgZXNjYXBlZCBhIGxpdHRsZQotICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgnXFwnLCAnXFxcXCcpOwotICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgnXHInLCAnXFxyJyk7Ci0gICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKCdcbicsICdcXG4nKTsKLSAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoJ1x0JywgJ1xcdCcpOwotICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgiJyIsICJcXCciKTsKLSAgICAgICAgcmV0dXJuIFsiZnVuY3Rpb24oeSwgbSwgZCkgeyBEYXRlVGltZVNob3J0Y3V0cy5jYWxlbmRhcklucHV0c1siLAotICAgICAgICAgICAgICAgbnVtLAotICAgICAgICAgICAgICAgIl0udmFsdWUgPSBuZXcgRGF0ZSh5LCBtLTEsIGQpLnN0cmZ0aW1lKCciLAotICAgICAgICAgICAgICAgZm9ybWF0LAotICAgICAgICAgICAgICAgIicpO0RhdGVUaW1lU2hvcnRjdXRzLmNhbGVuZGFySW5wdXRzWyIsCi0gICAgICAgICAgICAgICBudW0sCi0gICAgICAgICAgICAgICAiXS5mb2N1cygpO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKERhdGVUaW1lU2hvcnRjdXRzLmNhbGVuZGFyRGl2TmFtZTErIiwKLSAgICAgICAgICAgICAgIG51bSwKLSAgICAgICAgICAgICAgICIpLnN0eWxlLmRpc3BsYXk9J25vbmUnO30iXS5qb2luKCcnKTsKLSAgICB9LAotICAgIGhhbmRsZUNhbGVuZGFyUXVpY2tMaW5rOiBmdW5jdGlvbihudW0sIG9mZnNldCkgewotICAgICAgIHZhciBkID0gRGF0ZVRpbWVTaG9ydGN1dHMubm93KCk7Ci0gICAgICAgZC5zZXREYXRlKGQuZ2V0RGF0ZSgpICsgb2Zmc2V0KQotICAgICAgIERhdGVUaW1lU2hvcnRjdXRzLmNhbGVuZGFySW5wdXRzW251bV0udmFsdWUgPSBkLnN0cmZ0aW1lKGdldF9mb3JtYXQoJ0RBVEVfSU5QVVRfRk9STUFUUycpWzBdKTsKLSAgICAgICBEYXRlVGltZVNob3J0Y3V0cy5jYWxlbmRhcklucHV0c1tudW1dLmZvY3VzKCk7Ci0gICAgICAgRGF0ZVRpbWVTaG9ydGN1dHMuZGlzbWlzc0NhbGVuZGFyKG51bSk7Ci0gICAgfQotfQotCi1hZGRFdmVudCh3aW5kb3csICdsb2FkJywgRGF0ZVRpbWVTaG9ydGN1dHMuaW5pdCk7CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9iZW5jaC9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWIyODQ3Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyAtKi0gY29kaW5nOiBhc2NpaSAtKi0KLXIiIiIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIEJlbmNobWFyayBqc21pbiBpbXBsZW1lbnRhdGlvbnMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1CZW5jaG1hcmsganNtaW4gaW1wbGVtZW50YXRpb25zLgotCi06Q29weXJpZ2h0OgotCi0gQ29weXJpZ2h0IDIwMTEgLSAyMDE1Ci0gQW5kclx4ZTkgTWFsbyBvciBoaXMgbGljZW5zb3JzLCBhcyBhcHBsaWNhYmxlCi0KLTpMaWNlbnNlOgotCi0gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0iIiIKLWlmIF9fZG9jX186Ci0gICAgX19kb2NfXyA9IF9fZG9jX18uZW5jb2RlKCdhc2NpaScpLmRlY29kZSgndW5pY29kZV9lc2NhcGUnKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vYmVuY2gvYXBpdmlld2VyLmpzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vYmVuY2gvYXBpdmlld2VyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzBlYmY4Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL2FwaXZpZXdlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHFvb3hkb28gZnJhbWV3b3JrLgotCi1xb294ZG9vIGlzIGR1YWwtbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoTEdQTCkgYW5kIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChFUEwpLiBBcyBhIHJlY2lwaWVudCBvZiBxb294ZG9vLCB5b3UgbWF5IGNob29zZSB3aGljaCBsaWNlbnNlIHRvIHJlY2VpdmUgdGhlIGNvZGUgdW5kZXIuIAotKi8KLQotKGZ1bmN0aW9uKCl7Ci0KLWlmICghd2luZG93LnF4KSB3aW5kb3cucXggPSB7fTsKLQotcXguJCRzdGFydCA9IG5ldyBEYXRlKCk7Ci0gIAotaWYgKCF3aW5kb3cucXhzZXR0aW5ncykgcXhzZXR0aW5ncyA9IHt9OwotdmFyIHNldHRpbmdzID0geyJxeC5hcHBsaWNhdGlvbiI6ImFwaXZpZXdlci5BcHBsaWNhdGlvbiIsInF4Lm5hdGl2ZVNjcm9sbEJhcnMiOnRydWUsInF4LnRoZW1lIjoiYXBpdmlld2VyLlRoZW1lIiwicXgudmVyc2lvbiI6IjEuMyJ9OwotZm9yICh2YXIgayBpbiBzZXR0aW5ncykgcXhzZXR0aW5nc1trXSA9IHNldHRpbmdzW2tdOwotCi1pZiAoIXdpbmRvdy5xeHZhcmlhbnRzKSBxeHZhcmlhbnRzID0ge307Ci12YXIgdmFyaWFudHMgPSB7InF4LmFzcGVjdHMiOiJvZmYiLCJxeC5kZWJ1ZyI6Im9mZiJ9OwotZm9yICh2YXIgayBpbiB2YXJpYW50cykgcXh2YXJpYW50c1trXSA9IHZhcmlhbnRzW2tdOwotCi1pZiAoIXF4LiQkbGlicmFyaWVzKSBxeC4kJGxpYnJhcmllcyA9IHt9OwotdmFyIGxpYmluZm8gPSB7Il9fb3V0X18iOnsic291cmNlVXJpIjoic2NyaXB0In0sImFwaXZpZXdlciI6eyJyZXNvdXJjZVVyaSI6InJlc291cmNlIiwic291cmNlVXJpIjoic2NyaXB0IiwidmVyc2lvbiI6InRydW5rIn0sInF4Ijp7InJlc291cmNlVXJpIjoicmVzb3VyY2UiLCJzb3VyY2VVcmkiOiJzY3JpcHQiLCJ2ZXJzaW9uIjoiMS4zIn19OwotZm9yICh2YXIgayBpbiBsaWJpbmZvKSBxeC4kJGxpYnJhcmllc1trXSA9IGxpYmluZm9ba107Ci0KLXF4LiQkcmVzb3VyY2VzID0ge307Ci1xeC4kJHRyYW5zbGF0aW9ucyA9IHt9OwotcXguJCRsb2NhbGVzID0ge307Ci1xeC4kJHBhY2thZ2VEYXRhID0ge307Ci0KLXF4LiQkbG9hZGVyID0gewotICBwYXJ0cyA6IHsiYm9vdCI6WzBdfSwKLSAgdXJpcyA6IFtbIl9fb3V0X186YXBpdmlld2VyLmpzIl1dLAotICB1cmlzQmVmb3JlIDogW10sCi0gIHBhY2thZ2VIYXNoZXMgOiB7IjAiOiI5YjMzMDllZDEzZGMifSwKLSAgYm9vdCA6ICJib290IiwKLSAgY2xvc3VyZVBhcnRzIDoge30sCi0gIGJvb3RJc0lubGluZSA6IHRydWUsCi0gIGFkZE5vQ2FjaGVQYXJhbSA6IHRydWUsCi0gIAotICBkZWNvZGVVcmlzIDogZnVuY3Rpb24oY29tcHJlc3NlZFVyaXMpCi0gIHsKLSAgICB2YXIgbGlicyA9IHF4LiQkbGlicmFyaWVzOwotICAgIHZhciB1cmlzID0gW107Ci0gICAgZm9yICh2YXIgaT0wOyBpPGNvbXByZXNzZWRVcmlzLmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIHZhciB1cmkgPSBjb21wcmVzc2VkVXJpc1tpXS5zcGxpdCgiOiIpOwotICAgICAgdmFyIGV1cmk7Ci0gICAgICBpZiAodXJpLmxlbmd0aD09MiAmJiB1cmlbMF0gaW4gbGlicykgewotICAgICAgICB2YXIgcHJlZml4ID0gbGlic1t1cmlbMF1dLnNvdXJjZVVyaTsKLSAgICAgICAgZXVyaSA9IHByZWZpeCArICIvIiArIHVyaVsxXTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGV1cmkgPSBjb21wcmVzc2VkVXJpc1tpXTsKLSAgICAgIH0KLSAgICAgIGlmIChxeC4kJGxvYWRlci5hZGROb0NhY2hlUGFyYW0pIHsKLSAgICAgICAgZXVyaSArPSAiP25vY2FjaGU9IiArIE1hdGgucmFuZG9tKCk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIHVyaXMucHVzaChldXJpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVyaXM7ICAgICAgCi0gIH0KLX07ICAKLQotZnVuY3Rpb24gbG9hZFNjcmlwdCh1cmksIGNhbGxiYWNrKSB7Ci0gIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Ci0gIGVsZW0uY2hhcnNldCA9ICJ1dGYtOCI7Ci0gIGVsZW0uc3JjID0gdXJpOwotICBlbGVtLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVsZW0ub25sb2FkID0gZnVuY3Rpb24oKQotICB7Ci0gICAgaWYgKCF0aGlzLnJlYWR5U3RhdGUgfHwgdGhpcy5yZWFkeVN0YXRlID09ICJsb2FkZWQiIHx8IHRoaXMucmVhZHlTdGF0ZSA9PSAiY29tcGxldGUiKQotICAgIHsKLSAgICAgIGVsZW0ub25yZWFkeXN0YXRlY2hhbmdlID0gZWxlbS5vbmxvYWQgPSBudWxsOwotICAgICAgY2FsbGJhY2soKTsKLSAgICB9Ci0gIH07Ci0gIHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKLSAgaGVhZC5hcHBlbmRDaGlsZChlbGVtKTsKLX0KLQotdmFyIGlzV2Via2l0ID0gL0FwcGxlV2ViS2l0XC8oW14gXSspLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotCi1mdW5jdGlvbiBsb2FkU2NyaXB0TGlzdChsaXN0LCBjYWxsYmFjaykgewotICBpZiAobGlzdC5sZW5ndGggPT0gMCkgewotICAgIGNhbGxiYWNrKCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGxvYWRTY3JpcHQobGlzdC5zaGlmdCgpLCBmdW5jdGlvbigpIHsKLSAgICBpZiAoaXNXZWJraXQpIHsKLSAgICAgIC8vIGZvcmNlIGFzeW5jaHJvbm91cyBsb2FkCi0gICAgICAvLyBTYWZhcmkgZmFpbHMgd2l0aCBhbiAibWF4aW11bSByZWN1cnNpb24gZGVwdGggZXhjZWVkZWQiIGVycm9yIGlmIGl0IGlzCi0gICAgICAvLyBjYWxsZWQgc3luYy4gICAgICAKLSAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICBsb2FkU2NyaXB0TGlzdChsaXN0LCBjYWxsYmFjayk7Ci0gICAgICB9LCAwKTsKLSAgICB9IGVsc2UgewotICAgICAgbG9hZFNjcmlwdExpc3QobGlzdCwgY2FsbGJhY2spOwotICAgIH0KLSAgfSk7Ci19Ci0KLXZhciBmaXJlQ29udGVudExvYWRlZEV2ZW50ID0gZnVuY3Rpb24oKSB7Ci0gIHF4LiQkZG9tUmVhZHkgPSB0cnVlOwotICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZmlyZUNvbnRlbnRMb2FkZWRFdmVudCwgZmFsc2UpOwotfTsKLWlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7Ci0gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmaXJlQ29udGVudExvYWRlZEV2ZW50LCBmYWxzZSk7Ci19Ci0KLXF4LiQkbG9hZGVyLmltcG9ydFBhY2thZ2VEYXRhID0gZnVuY3Rpb24gKGRhdGFNYXApIHsKLSAgaWYgKGRhdGFNYXBbInJlc291cmNlcyJdKXsKLSAgICB2YXIgcmVzTWFwID0gZGF0YU1hcFsicmVzb3VyY2VzIl07Ci0gICAgZm9yICh2YXIgayBpbiByZXNNYXApIHF4LiQkcmVzb3VyY2VzW2tdID0gcmVzTWFwW2tdOwotICB9Ci0gIGlmIChkYXRhTWFwWyJsb2NhbGVzIl0pewotICAgIHZhciBsb2NNYXAgPSBkYXRhTWFwWyJsb2NhbGVzIl07Ci0gICAgdmFyIHF4bG9jcyA9IHF4LiQkbG9jYWxlczsKLSAgICBmb3IgKHZhciBsYW5nIGluIGxvY01hcCl7Ci0gICAgICBpZiAoIXF4bG9jc1tsYW5nXSkgcXhsb2NzW2xhbmddID0gbG9jTWFwW2xhbmddOwotICAgICAgZWxzZSAKLSAgICAgICAgZm9yICh2YXIgayBpbiBsb2NNYXBbbGFuZ10pIHF4bG9jc1tsYW5nXVtrXSA9IGxvY01hcFtsYW5nXVtrXTsKLSAgICB9Ci0gIH0KLSAgaWYgKGRhdGFNYXBbInRyYW5zbGF0aW9ucyJdKXsKLSAgICB2YXIgdHJNYXAgICA9IGRhdGFNYXBbInRyYW5zbGF0aW9ucyJdOwotICAgIHZhciBxeHRyYW5zID0gcXguJCR0cmFuc2xhdGlvbnM7Ci0gICAgZm9yICh2YXIgbGFuZyBpbiB0ck1hcCl7Ci0gICAgICBpZiAoIXF4dHJhbnNbbGFuZ10pIHF4dHJhbnNbbGFuZ10gPSB0ck1hcFtsYW5nXTsKLSAgICAgIGVsc2UgCi0gICAgICAgIGZvciAodmFyIGsgaW4gdHJNYXBbbGFuZ10pIHF4dHJhbnNbbGFuZ11ba10gPSB0ck1hcFtsYW5nXVtrXTsKLSAgICB9Ci0gIH0KLX0KLQotcXguJCRsb2FkZXIuc2lnbmFsU3RhcnR1cCA9IGZ1bmN0aW9uICgpIAotewotICBxeC4kJGxvYWRlci5zY3JpcHRMb2FkZWQgPSB0cnVlOwotICBpZiAod2luZG93LnF4ICYmIHF4LmV2ZW50ICYmIHF4LmV2ZW50LmhhbmRsZXIgJiYgcXguZXZlbnQuaGFuZGxlci5BcHBsaWNhdGlvbikgewotICAgIHF4LmV2ZW50LmhhbmRsZXIuQXBwbGljYXRpb24ub25TY3JpcHRMb2FkZWQoKTsKLSAgICBxeC4kJGxvYWRlci5hcHBsaWNhdGlvbkhhbmRsZXJSZWFkeSA9IHRydWU7IAotICB9IGVsc2UgewotICAgIHF4LiQkbG9hZGVyLmFwcGxpY2F0aW9uSGFuZGxlclJlYWR5ID0gZmFsc2U7Ci0gIH0KLX0KLQotcXguJCRsb2FkZXIuaW5pdCA9IGZ1bmN0aW9uKCl7Ci0gIHZhciBsPXF4LiQkbG9hZGVyOwotICBpZiAobC51cmlzQmVmb3JlLmxlbmd0aD4wKXsKLSAgICBsb2FkU2NyaXB0TGlzdChsLnVyaXNCZWZvcmUsIGZ1bmN0aW9uKCl7Ci0gICAgICBsLmluaXRVcmlzKCk7Ci0gICAgfSk7Ci0gIH0gZWxzZSB7Ci0gICAgbC5pbml0VXJpcygpOwotICB9Ci19Ci0KLXF4LiQkbG9hZGVyLmluaXRVcmlzID0gZnVuY3Rpb24oKXsKLSAgdmFyIGw9cXguJCRsb2FkZXI7Ci0gIHZhciBib290UGFja2FnZUhhc2g9bC5wYWNrYWdlSGFzaGVzW2wucGFydHNbbC5ib290XVswXV07Ci0gIGlmIChsLmJvb3RJc0lubGluZSl7Ci0gICAgbC5pbXBvcnRQYWNrYWdlRGF0YShxeC4kJHBhY2thZ2VEYXRhW2Jvb3RQYWNrYWdlSGFzaF0pOwotICAgIGwuc2lnbmFsU3RhcnR1cCgpOwotICB9IGVsc2UgewotICAgIGxvYWRTY3JpcHRMaXN0KGwuZGVjb2RlVXJpcyhsLnVyaXNbbC5wYXJ0c1tsLmJvb3RdXSksIGZ1bmN0aW9uKCl7Ci0gICAgICAvLyBPcGVyYSBuZWVkcyB0aGlzIGV4dHJhIHRpbWUgdG8gcGFyc2UgdGhlIHNjcmlwdHMKLSAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci0gICAgICAgIGwuaW1wb3J0UGFja2FnZURhdGEocXguJCRwYWNrYWdlRGF0YVtib290UGFja2FnZUhhc2hdIHx8IHt9KTsKLSAgICAgICAgbC5zaWduYWxTdGFydHVwKCk7Ci0gICAgICB9LCAwKTsKLSAgICB9KTsKLSAgfQotfQotfSkoKTsKLQotcXguJCRwYWNrYWdlRGF0YVsnOWIzMzA5ZWQxM2RjJ109eyJsb2NhbGVzIjp7IkMiOnsiYWx0ZXJuYXRlUXVvdGF0aW9uRW5kIjoi4oCZIiwiYWx0ZXJuYXRlUXVvdGF0aW9uU3RhcnQiOiLigJgiLCJjbGRyX2FtIjoiQU0iLCJjbGRyX2RhdGVfZm9ybWF0X2Z1bGwiOiJFRUVFLCBNTU1NIGQsIHkiLCJjbGRyX2RhdGVfZm9ybWF0X2xvbmciOiJNTU1NIGQsIHkiLCJjbGRyX2RhdGVfZm9ybWF0X21lZGl1bSI6Ik1NTSBkLCB5IiwiY2xkcl9kYXRlX2Zvcm1hdF9zaG9ydCI6Ik0vZC95eSIsImNsZHJfZGF0ZV90aW1lX2Zvcm1hdF9FRUVkIjoiZCBFRUUiLCJjbGRyX2RhdGVfdGltZV9mb3JtYXRfSG0iOiJIOm1tIiwiY2xkcl9kYXRlX3RpbWVfZm9ybWF0X0htcyI6Ikg6bW06c3MiLCJjbGRyX2RhdGVfdGltZV9mb3JtYXRfTSI6IkwiLCJjbGRyX2RhdGVfdGltZV9mb3JtYXRfTUVkIjoiRSwgTS9kIiwiY2xkcl9kYXRlX3RpbWVfZm9ybWF0X01NTSI6IkxMTCIsImNsZHJfZGF0ZV90aW1lX2Zvcm1hdF9NTU1FZCI6IkUsIE1NTSBkIiwiY2xkcl9kYXRlX3RpbWVfZm9ybWF0X01NTU1FZCI6IkUsIE1NTU0gZCIsImNsZHJfZGF0ZV90aW1lX2Zvcm1hdF9NTU1NZCI6Ik1NTU0gZCIsImNsZHJfZGF0ZV90aW1lX2Zvcm1hdF9NTU1kIjoiTU1NIGQiLCJjbGRyX2RhdGVfdGltZV9mb3JtYXRfTWQiOiJNL2QiLCJjbGRyX2RhdGVfdGltZV9mb3JtYXRfZCI6ImQiLCJjbGRyX2RhdGVfdGltZV9mb3JtYXRfaG0iOiJoOm1tIGEiLCJjbGRyX2RhdGVfdGltZV9mb3JtYXRfbXMiOiJtbTpzcyIsImNsZHJfZGF0ZV90aW1lX2Zvcm1hdF95IjoieSIsImNsZHJfZGF0ZV90aW1lX2Zvcm1hdF95TSI6Ik0veXl5eSIsImNsZHJfZGF0ZV90aW1lX2Zvcm1hdF95TUVkIjoiRUVFLCBNL2QveXl5eSIsImNsZHJfZGF0ZV90aW1lX2Zvcm1hdF95TU1NIjoiTU1NIHkiLCJjbGRyX2RhdGVfdGltZV9mb3JtYXRfeU1NTUVkIjoiRUVFLCBNTU0gZCwgeSIsImNsZHJfZGF0ZV90aW1lX2Zvcm1hdF95TU1NTSI6Ik1NTU0geSIsImNsZHJfZGF0ZV90aW1lX2Zvcm1hdF95USI6IlEgeXl5eSIsImNsZHJfZGF0ZV90aW1lX2Zvcm1hdF95UVFRIjoiUVFRIHkiLCJjbGRyX2RheV9mb3JtYXRfYWJicmV2aWF0ZWRfZnJpIjoiRnJpIiwiY2xkcl9kYXlfZm9ybWF0X2FiYnJldmlhdGVkX21vbiI6Ik1vbiIsImNsZHJfZGF5X2Zvcm1hdF9hYmJyZXZpYXRlZF9zYXQiOiJTYXQiLCJjbGRyX2RheV9mb3JtYXRfYWJicmV2aWF0ZWRfc3VuIjoiU3VuIiwiY2xkcl9kYXlfZm9ybWF0X2FiYnJldmlhdGVkX3RodSI6IlRodSIsImNsZHJfZGF5X2Zvcm1hdF9hYmJyZXZpYXRlZF90dWUiOiJUdWUiLCJjbGRyX2RheV9mb3JtYXRfYWJicmV2aWF0ZWRfd2VkIjoiV2VkIiwiY2xkcl9kYXlfZm9ybWF0X25hcnJvd19mcmkiOiJGIiwiY2xkcl9kYXlfZm9ybWF0X25hcnJvd19tb24iOiJNIiwiY2xkcl9kYXlfZm9ybWF0X25hcnJvd19zYXQiOiJTIiwiY2xkcl9kYXlfZm9ybWF0X25hcnJvd19zdW4iOiJTIiwiY2xkcl9kYXlfZm9ybWF0X25hcnJvd190aHUiOiJUIiwiY2xkcl9kYXlfZm9ybWF0X25hcnJvd190dWUiOiJUIiwiY2xkcl9kYXlfZm9ybWF0X25hcnJvd193ZWQiOiJXIiwiY2xkcl9kYXlfZm9ybWF0X3dpZGVfZnJpIjoiRnJpZGF5IiwiY2xkcl9kYXlfZm9ybWF0X3dpZGVfbW9uIjoiTW9uZGF5IiwiY2xkcl9kYXlfZm9ybWF0X3dpZGVfc2F0IjoiU2F0dXJkYXkiLCJjbGRyX2RheV9mb3JtYXRfd2lkZV9zdW4iOiJTdW5kYXkiLCJjbGRyX2RheV9mb3JtYXRfd2lkZV90aHUiOiJUaHVyc2RheSIsImNsZHJfZGF5X2Zvcm1hdF93aWRlX3R1ZSI6IlR1ZXNkYXkiLCJjbGRyX2RheV9mb3JtYXRfd2lkZV93ZWQiOiJXZWRuZXNkYXkiLCJjbGRyX2RheV9zdGFuZC1hbG9uZV9hYmJyZXZpYXRlZF9mcmkiOiJGcmkiLCJjbGRyX2RheV9zdGFuZC1hbG9uZV9hYmJyZXZpYXRlZF9tb24iOiJNb24iLCJjbGRyX2RheV9zdGFuZC1hbG9uZV9hYmJyZXZpYXRlZF9zYXQiOiJTYXQiLCJjbGRyX2RheV9zdGFuZC1hbG9uZV9hYmJyZXZpYXRlZF9zdW4iOiJTdW4iLCJjbGRyX2RheV9zdGFuZC1hbG9uZV9hYmJyZXZpYXRlZF90aHUiOiJUaHUiLCJjbGRyX2RheV9zdGFuZC1hbG9uZV9hYmJyZXZpYXRlZF90dWUiOiJUdWUiLCJjbGRyX2RheV9zdGFuZC1hbG9uZV9hYmJyZXZpYXRlZF93ZWQiOiJXZWQiLCJjbGRyX2RheV9zdGFuZC1hbG9uZV9uYXJyb3dfZnJpIjoiRiIsImNsZHJfZGF5X3N0YW5kLWFsb25lX25hcnJvd19tb24iOiJNIiwiY2xkcl9kYXlfc3RhbmQtYWxvbmVfbmFycm93X3NhdCI6IlMiLCJjbGRyX2RheV9zdGFuZC1hbG9uZV9uYXJyb3dfc3VuIjoiUyIsImNsZHJfZGF5X3N0YW5kLWFsb25lX25hcnJvd190aHUiOiJUIiwiY2xkcl9kYXlfc3RhbmQtYWxvbmVfbmFycm93X3R1ZSI6IlQiLCJjbGRyX2RheV9zdGFuZC1hbG9uZV9uYXJyb3dfd2VkIjoiVyIsImNsZHJfZGF5X3N0YW5kLWFsb25lX3dpZGVfZnJpIjoiRnJpZGF5IiwiY2xkcl9kYXlfc3RhbmQtYWxvbmVfd2lkZV9tb24iOiJNb25kYXkiLCJjbGRyX2RheV9zdGFuZC1hbG9uZV93aWRlX3NhdCI6IlNhdHVyZGF5IiwiY2xkcl9kYXlfc3RhbmQtYWxvbmVfd2lkZV9zdW4iOiJTdW5kYXkiLCJjbGRyX2RheV9zdGFuZC1hbG9uZV93aWRlX3RodSI6IlRodXJzZGF5IiwiY2xkcl9kYXlfc3RhbmQtYWxvbmVfd2lkZV90dWUiOiJUdWVzZGF5IiwiY2xkcl9kYXlfc3RhbmQtYWxvbmVfd2lkZV93ZWQiOiJXZWRuZXNkYXkiLCJjbGRyX21vbnRoX2Zvcm1hdF9hYmJyZXZpYXRlZF8xIjoiSmFuIiwiY2xkcl9tb250aF9mb3JtYXRfYWJicmV2aWF0ZWRfMTAiOiJPY3QiLCJjbGRyX21vbnRoX2Zvcm1hdF9hYmJyZXZpYXRlZF8xMSI6Ik5vdiIsImNsZHJfbW9udGhfZm9ybWF0X2FiYnJldmlhdGVkXzEyIjoiRGVjIiwiY2xkcl9tb250aF9mb3JtYXRfYWJicmV2aWF0ZWRfMiI6IkZlYiIsImNsZHJfbW9udGhfZm9ybWF0X2FiYnJldmlhdGVkXzMiOiJNYXIiLCJjbGRyX21vbnRoX2Zvcm1hdF9hYmJyZXZpYXRlZF80IjoiQXByIiwiY2xkcl9tb250aF9mb3JtYXRfYWJicmV2aWF0ZWRfNSI6Ik1heSIsImNsZHJfbW9udGhfZm9ybWF0X2FiYnJldmlhdGVkXzYiOiJKdW4iLCJjbGRyX21vbnRoX2Zvcm1hdF9hYmJyZXZpYXRlZF83IjoiSnVsIiwiY2xkcl9tb250aF9mb3JtYXRfYWJicmV2aWF0ZWRfOCI6IkF1ZyIsImNsZHJfbW9udGhfZm9ybWF0X2FiYnJldmlhdGVkXzkiOiJTZXAiLCJjbGRyX21vbnRoX2Zvcm1hdF93aWRlXzEiOiJKYW51YXJ5IiwiY2xkcl9tb250aF9mb3JtYXRfd2lkZV8xMCI6Ik9jdG9iZXIiLCJjbGRyX21vbnRoX2Zvcm1hdF93aWRlXzExIjoiTm92ZW1iZXIiLCJjbGRyX21vbnRoX2Zvcm1hdF93aWRlXzEyIjoiRGVjZW1iZXIiLCJjbGRyX21vbnRoX2Zvcm1hdF93aWRlXzIiOiJGZWJydWFyeSIsImNsZHJfbW9udGhfZm9ybWF0X3dpZGVfMyI6Ik1hcmNoIiwiY2xkcl9tb250aF9mb3JtYXRfd2lkZV80IjoiQXByaWwiLCJjbGRyX21vbnRoX2Zvcm1hdF93aWRlXzUiOiJNYXkiLCJjbGRyX21vbnRoX2Zvcm1hdF93aWRlXzYiOiJKdW5lIiwiY2xkcl9tb250aF9mb3JtYXRfd2lkZV83IjoiSnVseSIsImNsZHJfbW9udGhfZm9ybWF0X3dpZGVfOCI6IkF1Z3VzdCIsImNsZHJfbW9udGhfZm9ybWF0X3dpZGVfOSI6IlNlcHRlbWJlciIsImNsZHJfbW9udGhfc3RhbmQtYWxvbmVfbmFycm93XzEiOiJKIiwiY2xkcl9tb250aF9zdGFuZC1hbG9uZV9uYXJyb3dfMTAiOiJPIiwiY2xkcl9tb250aF9zdGFuZC1hbG9uZV9uYXJyb3dfMTEiOiJOIiwiY2xkcl9tb250aF9zdGFuZC1hbG9uZV9uYXJyb3dfMTIiOiJEIiwiY2xkcl9tb250aF9zdGFuZC1hbG9uZV9uYXJyb3dfMiI6IkYiLCJjbGRyX21vbnRoX3N0YW5kLWFsb25lX25hcnJvd18zIjoiTSIsImNsZHJfbW9udGhfc3RhbmQtYWxvbmVfbmFycm93XzQiOiJBIiwiY2xkcl9tb250aF9zdGFuZC1hbG9uZV9uYXJyb3dfNSI6Ik0iLCJjbGRyX21vbnRoX3N0YW5kLWFsb25lX25hcnJvd182IjoiSiIsImNsZHJfbW9udGhfc3RhbmQtYWxvbmVfbmFycm93XzciOiJKIiwiY2xkcl9tb250aF9zdGFuZC1hbG9uZV9uYXJyb3dfOCI6IkEiLCJjbGRyX21vbnRoX3N0YW5kLWFsb25lX25hcnJvd185IjoiUyIsImNsZHJfbnVtYmVyX2RlY2ltYWxfc2VwYXJhdG9yIjoiLiIsImNsZHJfbnVtYmVyX2dyb3VwX3NlcGFyYXRvciI6IiwiLCJjbGRyX251bWJlcl9wZXJjZW50X2Zvcm1hdCI6IiMsIyMwJSIsImNsZHJfcG0iOiJQTSIsImNsZHJfdGltZV9mb3JtYXRfZnVsbCI6Img6bW06c3MgYSB6enp6IiwiY2xkcl90aW1lX2Zvcm1hdF9sb25nIjoiaDptbTpzcyBhIHoiLCJjbGRyX3RpbWVfZm9ybWF0X21lZGl1bSI6Img6bW06c3MgYSIsImNsZHJfdGltZV9mb3JtYXRfc2hvcnQiOiJoOm1tIGEiLCJxdW90YXRpb25FbmQiOiLigJ0iLCJxdW90YXRpb25TdGFydCI6IuKAnCJ9fSwicmVzb3VyY2VzIjp7ImFwaXZpZXdlci9jc3MvYXBpdmlld2VyLmNzcyI6ImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZS9ibGFuay5naWYiOlsxLDEsImdpZiIsImFwaXZpZXdlciJdLCJhcGl2aWV3ZXIvaW1hZ2UvY2hpbGRjb250cm9sMTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtNTQwXSwiYXBpdmlld2VyL2ltYWdlL2NsYXNzMTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtMzI0XSwiYXBpdmlld2VyL2ltYWdlL2NsYXNzX2Fic3RyYWN0MTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtNDg2XSwiYXBpdmlld2VyL2ltYWdlL2NsYXNzX2Fic3RyYWN0X3dhcm5pbmcxOC5naWYiOlsxOCwxOCwiZ2lmIiwiYXBpdmlld2VyIiwiYXBpdmlld2VyL2ltYWdlc0NvbWJpbmVkL3N5bWJvbHMuZ2lmIiwwLC0zMDZdLCJhcGl2aWV3ZXIvaW1hZ2UvY2xhc3Nfc2luZ2xldG9uMTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtNjEyXSwiYXBpdmlld2VyL2ltYWdlL2NsYXNzX3NpbmdsZXRvbl93YXJuaW5nMTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtMjUyXSwiYXBpdmlld2VyL2ltYWdlL2NsYXNzX3N0YXRpYzE4LmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiLCJhcGl2aWV3ZXIvaW1hZ2VzQ29tYmluZWQvc3ltYm9scy5naWYiLDAsLTIzNF0sImFwaXZpZXdlci9pbWFnZS9jbGFzc19zdGF0aWNfd2FybmluZzE4LmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiLCJhcGl2aWV3ZXIvaW1hZ2VzQ29tYmluZWQvc3ltYm9scy5naWYiLDAsLTE0NF0sImFwaXZpZXdlci9pbWFnZS9jbGFzc193YXJuaW5nMTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtMzQyXSwiYXBpdmlld2VyL2ltYWdlL2Nsb3NlLmdpZiI6WzE3LDEzLCJnaWYiLCJhcGl2aWV3ZXIiXSwiYXBpdmlld2VyL2ltYWdlL2NvbG9yc3RyaXAuZ2lmIjpbMTkyLDEwLCJnaWYiLCJhcGl2aWV3ZXIiXSwiYXBpdmlld2VyL2ltYWdlL2NvbnN0YW50MTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtNTA0XSwiYXBpdmlld2VyL2ltYWdlL2NvbnN0cnVjdG9yMTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtNTU4XSwiYXBpdmlld2VyL2ltYWdlL2Nyb3NzLmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiXSwiYXBpdmlld2VyL2ltYWdlL2V2ZW50MTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtMTk4XSwiYXBpdmlld2VyL2ltYWdlL2luZm9ybWF0aW9uMTgucG5nIjpbMTgsMTgsInBuZyIsImFwaXZpZXdlciJdLCJhcGl2aWV3ZXIvaW1hZ2UvaW50ZXJmYWNlMTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtNDMyXSwiYXBpdmlld2VyL2ltYWdlL2ludGVyZmFjZV93YXJuaW5nMTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtNDUwXSwiYXBpdmlld2VyL2ltYWdlL21ldGhvZF9wcml2YXRlMTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtMjcwXSwiYXBpdmlld2VyL2ltYWdlL21ldGhvZF9wcm90ZWN0ZWQxOC5naWYiOlsxOCwxOCwiZ2lmIiwiYXBpdmlld2VyIiwiYXBpdmlld2VyL2ltYWdlc0NvbWJpbmVkL3N5bWJvbHMuZ2lmIiwwLC0yMTZdLCJhcGl2aWV3ZXIvaW1hZ2UvbWV0aG9kX3B1YmxpYzE4LmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiLCJhcGl2aWV3ZXIvaW1hZ2VzQ29tYmluZWQvc3ltYm9scy5naWYiLDAsLTEyNl0sImFwaXZpZXdlci9pbWFnZS9tZXRob2RfcHVibGljX2luaGVyaXRlZDE4LmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiLCJhcGl2aWV3ZXIvaW1hZ2VzQ29tYmluZWQvc3ltYm9scy5naWYiLDAsLTE4XSwiYXBpdmlld2VyL2ltYWdlL21peGluMTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtMTYyXSwiYXBpdmlld2VyL2ltYWdlL21peGluX3dhcm5pbmcxOC5naWYiOlsxOCwxOCwiZ2lmIiwiYXBpdmlld2VyIiwiYXBpdmlld2VyL2ltYWdlc0NvbWJpbmVkL3N5bWJvbHMuZ2lmIiwwLC0xMDhdLCJhcGl2aWV3ZXIvaW1hZ2UvbmV4dGxldmVsLmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiXSwiYXBpdmlld2VyL2ltYWdlL29wZW4uZ2lmIjpbMTcsMTMsImdpZiIsImFwaXZpZXdlciJdLCJhcGl2aWV3ZXIvaW1hZ2Uvb3ZlcmxheV9hYnN0cmFjdDE4LmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiLCJhcGl2aWV3ZXIvaW1hZ2VzQ29tYmluZWQvc3ltYm9scy5naWYiLDAsMF0sImFwaXZpZXdlci9pbWFnZS9vdmVybGF5X2NvbnN0cnVjdG9yMTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtMzZdLCJhcGl2aWV3ZXIvaW1hZ2Uvb3ZlcmxheV9lcnJvcjE4LmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiLCJhcGl2aWV3ZXIvaW1hZ2VzQ29tYmluZWQvc3ltYm9scy5naWYiLDAsLTQxNF0sImFwaXZpZXdlci9pbWFnZS9vdmVybGF5X2luaGVyaXRlZDE4LmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiLCJhcGl2aWV3ZXIvaW1hZ2VzQ29tYmluZWQvc3ltYm9scy5naWYiLDAsLTU3Nl0sImFwaXZpZXdlci9pbWFnZS9vdmVybGF5X21peGluMTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtMTgwXSwiYXBpdmlld2VyL2ltYWdlL292ZXJsYXlfb3ZlcnJpZGRlbjE4LmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiLCJhcGl2aWV3ZXIvaW1hZ2VzQ29tYmluZWQvc3ltYm9scy5naWYiLDAsLTI4OF0sImFwaXZpZXdlci9pbWFnZS9vdmVybGF5X3N0YXRpYzE4LmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiLCJhcGl2aWV3ZXIvaW1hZ2VzQ29tYmluZWQvc3ltYm9scy5naWYiLDAsLTM3OF0sImFwaXZpZXdlci9pbWFnZS9vdmVybGF5X3RoZW1lYWJsZTE4LmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiLCJhcGl2aWV3ZXIvaW1hZ2VzQ29tYmluZWQvc3ltYm9scy5naWYiLDAsLTM2MF0sImFwaXZpZXdlci9pbWFnZS9vdmVybGF5X3dhcm5pbmcxOC5naWYiOlsxOCwxOCwiZ2lmIiwiYXBpdmlld2VyIiwiYXBpdmlld2VyL2ltYWdlc0NvbWJpbmVkL3N5bWJvbHMuZ2lmIiwwLC01OTRdLCJhcGl2aWV3ZXIvaW1hZ2UvcGFja2FnZTE4LmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiLCJhcGl2aWV3ZXIvaW1hZ2VzQ29tYmluZWQvc3ltYm9scy5naWYiLDAsLTU0XSwiYXBpdmlld2VyL2ltYWdlL3BhY2thZ2Vfd2FybmluZzE4LmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiLCJhcGl2aWV3ZXIvaW1hZ2VzQ29tYmluZWQvc3ltYm9scy5naWYiLDAsLTkwXSwiYXBpdmlld2VyL2ltYWdlL3Byb3BlcnR5MTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtNTIyXSwiYXBpdmlld2VyL2ltYWdlL3Byb3BlcnR5X3ByaXZhdGUxOC5naWYiOlsxOCwxOCwiZ2lmIiwiYXBpdmlld2VyIiwiYXBpdmlld2VyL2ltYWdlc0NvbWJpbmVkL3N5bWJvbHMuZ2lmIiwwLC03Ml0sImFwaXZpZXdlci9pbWFnZS9wcm9wZXJ0eV9wcm90ZWN0ZWQxOC5naWYiOlsxOCwxOCwiZ2lmIiwiYXBpdmlld2VyIiwiYXBpdmlld2VyL2ltYWdlc0NvbWJpbmVkL3N5bWJvbHMuZ2lmIiwwLC00NjhdLCJhcGl2aWV3ZXIvaW1hZ2UvcHJvcGVydHlfdGhlbWVhYmxlMTguZ2lmIjpbMTgsMTgsImdpZiIsImFwaXZpZXdlciIsImFwaXZpZXdlci9pbWFnZXNDb21iaW5lZC9zeW1ib2xzLmdpZiIsMCwtMzk2XSwiYXBpdmlld2VyL2ltYWdlL3NlYXJjaDE4LnBuZyI6WzE4LDE4LCJwbmciLCJhcGl2aWV3ZXIiXSwiYXBpdmlld2VyL2ltYWdlL3ZsaW5lLmdpZiI6WzE4LDE4LCJnaWYiLCJhcGl2aWV3ZXIiXSwiYXBpdmlld2VyL2ltYWdlc0NvbWJpbmVkL3N5bWJvbHMuZ2lmIjpbMTgsNjMwLCJnaWYiLCJhcGl2aWV3ZXIiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYXBwLWhlYWRlci5wbmciOlsxMTAsMjAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Fycm93cy1jb21iaW5lZC5wbmciOls4Nyw4LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9hcnJvd3MvZG93bi1pbnZlcnQucG5nIjpbOCw1LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2Fycm93cy1jb21iaW5lZC5wbmciLC03NCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYXJyb3dzL2Rvd24tc21hbGwtaW52ZXJ0LnBuZyI6WzUsMywicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9hcnJvd3MtY29tYmluZWQucG5nIiwtNjksMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Fycm93cy9kb3duLXNtYWxsLnBuZyI6WzUsMywicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9hcnJvd3MtY29tYmluZWQucG5nIiwtNDksMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Fycm93cy9kb3duLnBuZyI6WzgsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9hcnJvd3MtY29tYmluZWQucG5nIiwtMjAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Fycm93cy9mb3J3YXJkLnBuZyI6WzEwLDgsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYXJyb3dzLWNvbWJpbmVkLnBuZyIsLTU5LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9hcnJvd3MvbGVmdC1pbnZlcnQucG5nIjpbNSw4LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2Fycm93cy1jb21iaW5lZC5wbmciLDAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Fycm93cy9sZWZ0LnBuZyI6WzUsOCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9hcnJvd3MtY29tYmluZWQucG5nIiwtNDQsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Fycm93cy9yZXdpbmQucG5nIjpbMTAsOCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9hcnJvd3MtY29tYmluZWQucG5nIiwtMTAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Fycm93cy9yaWdodC1pbnZlcnQucG5nIjpbNSw4LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2Fycm93cy1jb21iaW5lZC5wbmciLC01LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9hcnJvd3MvcmlnaHQucG5nIjpbNSw4LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2Fycm93cy1jb21iaW5lZC5wbmciLC01NCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYXJyb3dzL3VwLWludmVydC5wbmciOls4LDUsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYXJyb3dzLWNvbWJpbmVkLnBuZyIsLTI4LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9hcnJvd3MvdXAtc21hbGwucG5nIjpbNSwzLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2Fycm93cy1jb21iaW5lZC5wbmciLC04MiwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYXJyb3dzL3VwLnBuZyI6WzgsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9hcnJvd3MtY29tYmluZWQucG5nIiwtMzYsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi1sci1jb21iaW5lZC5wbmciOls3Miw1MiwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyI6WzQsMjE2LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jaGVja3JhZGlvLWNvbWJpbmVkLnBuZyI6WzUwNCwxNCwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY29sb3JzZWxlY3Rvci1jb21iaW5lZC5naWYiOls0NiwxMSwiZ2lmIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY29sb3JzZWxlY3Rvci9icmlnaHRuZXNzLWZpZWxkLnBuZyI6WzE5LDI1NiwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY29sb3JzZWxlY3Rvci9icmlnaHRuZXNzLWhhbmRsZS5naWYiOlszNSwxMSwiZ2lmIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jb2xvcnNlbGVjdG9yLWNvbWJpbmVkLmdpZiIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY29sb3JzZWxlY3Rvci9odWVzYXR1cmF0aW9uLWZpZWxkLmpwZyI6WzI1NiwyNTYsImpwZWciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jb2xvcnNlbGVjdG9yL2h1ZXNhdHVyYXRpb24taGFuZGxlLmdpZiI6WzExLDExLCJnaWYiLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NvbG9yc2VsZWN0b3ItY29tYmluZWQuZ2lmIiwtMzUsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2N1cnNvcnMtY29tYmluZWQuZ2lmIjpbNzEsMjAsImdpZiIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2N1cnNvcnMvYWxpYXMuZ2lmIjpbMTksMTUsImdpZiIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY3Vyc29ycy1jb21iaW5lZC5naWYiLC01MiwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY3Vyc29ycy9jb3B5LmdpZiI6WzE5LDE1LCJnaWYiLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2N1cnNvcnMtY29tYmluZWQuZ2lmIiwtMzMsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2N1cnNvcnMvbW92ZS5naWYiOlsxMyw5LCJnaWYiLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2N1cnNvcnMtY29tYmluZWQuZ2lmIiwtMjAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2N1cnNvcnMvbm9kcm9wLmdpZiI6WzIwLDIwLCJnaWYiLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2N1cnNvcnMtY29tYmluZWQuZ2lmIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1iLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC03Ml0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWJsLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC0yMDRdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1ici5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTg4XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tYy5wbmciOls0MCw1MiwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tY2hlY2tlZC1iLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC0zNl0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWNoZWNrZWQtYmwucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTg0XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tY2hlY2tlZC1ici5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTg0XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tY2hlY2tlZC1jLnBuZyI6WzQwLDUyLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1jaGVja2VkLWZvY3VzZWQtYi5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTU2XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tY2hlY2tlZC1mb2N1c2VkLWJsLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC0yMDhdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1jaGVja2VkLWZvY3VzZWQtYnIucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTE2MF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWNoZWNrZWQtZm9jdXNlZC1jLnBuZyI6WzQwLDUyLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1jaGVja2VkLWZvY3VzZWQtbC5wbmciOls0LDUyLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi1sci1jb21iaW5lZC5wbmciLC00MCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tY2hlY2tlZC1mb2N1c2VkLXIucG5nIjpbNCw1MiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tbHItY29tYmluZWQucG5nIiwtMzIsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWNoZWNrZWQtZm9jdXNlZC10LnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC0yOF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWNoZWNrZWQtZm9jdXNlZC10bC5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtMjRdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1jaGVja2VkLWZvY3VzZWQtdHIucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTQ4XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tY2hlY2tlZC1mb2N1c2VkLnBuZyI6WzgwLDYwLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1jaGVja2VkLWwucG5nIjpbNCw1MiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tbHItY29tYmluZWQucG5nIiwtMTYsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWNoZWNrZWQtci5wbmciOls0LDUyLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi1sci1jb21iaW5lZC5wbmciLC02MCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tY2hlY2tlZC10LnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC0xNDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1jaGVja2VkLXRsLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC01Nl0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWNoZWNrZWQtdHIucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTExMl0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWNoZWNrZWQucG5nIjpbODAsNjAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWRpc2FibGVkLWIucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTQwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tZGlzYWJsZWQtYmwucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTEzNl0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWRpc2FibGVkLWJyLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC0xNl0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWRpc2FibGVkLWMucG5nIjpbNDAsNTIsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWRpc2FibGVkLWwucG5nIjpbNCw1MiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tbHItY29tYmluZWQucG5nIiwtNjgsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWRpc2FibGVkLXIucG5nIjpbNCw1MiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tbHItY29tYmluZWQucG5nIiwtNCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tZGlzYWJsZWQtdC5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTE2XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tZGlzYWJsZWQtdGwucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTE2OF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWRpc2FibGVkLXRyLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC02MF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWRpc2FibGVkLnBuZyI6WzgwLDYwLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1mb2N1c2VkLWIucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTY4XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tZm9jdXNlZC1ibC5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTQ0XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tZm9jdXNlZC1ici5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtOF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWZvY3VzZWQtYy5wbmciOls0MCw1MiwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tZm9jdXNlZC1sLnBuZyI6WzQsNTIsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLWxyLWNvbWJpbmVkLnBuZyIsLTI0LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1mb2N1c2VkLXIucG5nIjpbNCw1MiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tbHItY29tYmluZWQucG5nIiwtNDQsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWZvY3VzZWQtdC5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTkyXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tZm9jdXNlZC10bC5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTQ4XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tZm9jdXNlZC10ci5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTA0XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tZm9jdXNlZC5wbmciOls4MCw2MCwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24taG92ZXJlZC1iLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC0xMDhdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1ob3ZlcmVkLWJsLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC0zMl0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWhvdmVyZWQtYnIucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTEyOF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWhvdmVyZWQtYy5wbmciOls0MCw1MiwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24taG92ZXJlZC1sLnBuZyI6WzQsNTIsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLWxyLWNvbWJpbmVkLnBuZyIsLTIwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1ob3ZlcmVkLXIucG5nIjpbNCw1MiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tbHItY29tYmluZWQucG5nIiwtNDgsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWhvdmVyZWQtdC5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtNDRdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1ob3ZlcmVkLXRsLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC03Nl0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLWhvdmVyZWQtdHIucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTg4XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24taG92ZXJlZC5wbmciOls4MCw2MCwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tbC5wbmciOls0LDUyLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi1sci1jb21iaW5lZC5wbmciLC01NiwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tcHJlc2VsZWN0ZWQtYi5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTI0XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tcHJlc2VsZWN0ZWQtYmwucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTE3Nl0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLXByZXNlbGVjdGVkLWJyLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC0yMDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1wcmVzZWxlY3RlZC1jLnBuZyI6WzQwLDUyLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1wcmVzZWxlY3RlZC1mb2N1c2VkLWIucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLXByZXNlbGVjdGVkLWZvY3VzZWQtYmwucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTRdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1wcmVzZWxlY3RlZC1mb2N1c2VkLWJyLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC0xNTJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1wcmVzZWxlY3RlZC1mb2N1c2VkLWMucG5nIjpbNDAsNTIsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLXByZXNlbGVjdGVkLWZvY3VzZWQtbC5wbmciOls0LDUyLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi1sci1jb21iaW5lZC5wbmciLC0yOCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tcHJlc2VsZWN0ZWQtZm9jdXNlZC1yLnBuZyI6WzQsNTIsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLWxyLWNvbWJpbmVkLnBuZyIsLTM2LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1wcmVzZWxlY3RlZC1mb2N1c2VkLXQucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTE5Nl0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLXByZXNlbGVjdGVkLWZvY3VzZWQtdGwucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTE2NF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLXByZXNlbGVjdGVkLWZvY3VzZWQtdHIucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTIxMl0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLXByZXNlbGVjdGVkLWZvY3VzZWQucG5nIjpbODAsNjAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLXByZXNlbGVjdGVkLWwucG5nIjpbNCw1MiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tbHItY29tYmluZWQucG5nIiwtOCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tcHJlc2VsZWN0ZWQtci5wbmciOls0LDUyLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi1sci1jb21iaW5lZC5wbmciLC02NCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tcHJlc2VsZWN0ZWQtdC5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtOTZdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1wcmVzZWxlY3RlZC10bC5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtODBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1wcmVzZWxlY3RlZC10ci5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTMyXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tcHJlc2VsZWN0ZWQucG5nIjpbODAsNjAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLXByZXNzZWQtYi5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1wcmVzc2VkLWJsLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC01Ml0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLXByZXNzZWQtYnIucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi10Yi1jb21iaW5lZC5wbmciLDAsLTIwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tcHJlc3NlZC1jLnBuZyI6WzQwLDUyLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1wcmVzc2VkLWwucG5nIjpbNCw1MiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tbHItY29tYmluZWQucG5nIiwtNTIsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLXByZXNzZWQtci5wbmciOls0LDUyLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2J1dHRvbi1sci1jb21iaW5lZC5wbmciLC0xMiwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24tcHJlc3NlZC10LnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC0xMDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1wcmVzc2VkLXRsLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC0xNzJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi1wcmVzc2VkLXRyLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC02NF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLXByZXNzZWQucG5nIjpbODAsNjAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLXIucG5nIjpbNCw1MiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tbHItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi10LnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC05Ml0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vYnV0dG9uLXRsLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9idXR0b24tdGItY29tYmluZWQucG5nIiwwLC0xMjBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2J1dHRvbi10ci5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vYnV0dG9uLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTgwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9idXR0b24ucG5nIjpbODAsNjAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vY2hlY2tib3gtY2hlY2tlZC1kaXNhYmxlZC5wbmciOlsxNCwxNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jaGVja3JhZGlvLWNvbWJpbmVkLnBuZyIsLTEyNiwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9jaGVja2JveC1jaGVja2VkLWZvY3VzZWQtaW52YWxpZC5wbmciOlsxNCwxNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jaGVja3JhZGlvLWNvbWJpbmVkLnBuZyIsLTMyMiwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9jaGVja2JveC1jaGVja2VkLWZvY3VzZWQucG5nIjpbMTQsMTQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY2hlY2tyYWRpby1jb21iaW5lZC5wbmciLC0yOTQsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vY2hlY2tib3gtY2hlY2tlZC1ob3ZlcmVkLWludmFsaWQucG5nIjpbMTQsMTQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY2hlY2tyYWRpby1jb21iaW5lZC5wbmciLC0zNjQsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vY2hlY2tib3gtY2hlY2tlZC1ob3ZlcmVkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtNDkwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2NoZWNrYm94LWNoZWNrZWQtaW52YWxpZC5wbmciOlsxNCwxNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jaGVja3JhZGlvLWNvbWJpbmVkLnBuZyIsLTIyNCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9jaGVja2JveC1jaGVja2VkLXByZXNzZWQtaW52YWxpZC5wbmciOlsxNCwxNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jaGVja3JhZGlvLWNvbWJpbmVkLnBuZyIsLTM3OCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9jaGVja2JveC1jaGVja2VkLXByZXNzZWQucG5nIjpbMTQsMTQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY2hlY2tyYWRpby1jb21iaW5lZC5wbmciLC04NCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9jaGVja2JveC1jaGVja2VkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtMTgyLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2NoZWNrYm94LWRpc2FibGVkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtNDIsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vY2hlY2tib3gtZm9jdXNlZC1pbnZhbGlkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtMzkyLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2NoZWNrYm94LWZvY3VzZWQucG5nIjpbMTQsMTQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY2hlY2tyYWRpby1jb21iaW5lZC5wbmciLC0yMTAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vY2hlY2tib3gtaG92ZXJlZC1pbnZhbGlkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtMTQsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vY2hlY2tib3gtaG92ZXJlZC5wbmciOlsxNCwxNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jaGVja3JhZGlvLWNvbWJpbmVkLnBuZyIsLTIzOCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9jaGVja2JveC1pbnZhbGlkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtNDYyLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2NoZWNrYm94LXByZXNzZWQtaW52YWxpZC5wbmciOlsxNCwxNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jaGVja3JhZGlvLWNvbWJpbmVkLnBuZyIsLTExMiwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9jaGVja2JveC1wcmVzc2VkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtNDQ4LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2NoZWNrYm94LXVuZGV0ZXJtaW5lZC1kaXNhYmxlZC5wbmciOlsxNCwxNCwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9jaGVja2JveC11bmRldGVybWluZWQtZm9jdXNlZC1pbnZhbGlkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2NoZWNrYm94LXVuZGV0ZXJtaW5lZC1mb2N1c2VkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2NoZWNrYm94LXVuZGV0ZXJtaW5lZC1ob3ZlcmVkLWludmFsaWQucG5nIjpbMTQsMTQsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vY2hlY2tib3gtdW5kZXRlcm1pbmVkLWhvdmVyZWQucG5nIjpbMTQsMTQsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vY2hlY2tib3gtdW5kZXRlcm1pbmVkLWludmFsaWQucG5nIjpbMTQsMTQsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vY2hlY2tib3gtdW5kZXRlcm1pbmVkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2NoZWNrYm94LnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtMTQwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL2lucHV0LWZvY3VzZWQucG5nIjpbNDAsMTIsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vaW5wdXQucG5nIjpbODQsMTIsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vcmFkaW9idXR0b24tY2hlY2tlZC1kaXNhYmxlZC5wbmciOlsxNCwxNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jaGVja3JhZGlvLWNvbWJpbmVkLnBuZyIsLTE5NiwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9yYWRpb2J1dHRvbi1jaGVja2VkLWZvY3VzZWQtaW52YWxpZC5wbmciOlsxNCwxNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jaGVja3JhZGlvLWNvbWJpbmVkLnBuZyIsLTE2OCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9yYWRpb2J1dHRvbi1jaGVja2VkLWZvY3VzZWQucG5nIjpbMTQsMTQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY2hlY2tyYWRpby1jb21iaW5lZC5wbmciLC05OCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9yYWRpb2J1dHRvbi1jaGVja2VkLWhvdmVyZWQtaW52YWxpZC5wbmciOlsxNCwxNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jaGVja3JhZGlvLWNvbWJpbmVkLnBuZyIsLTMwOCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9yYWRpb2J1dHRvbi1jaGVja2VkLWhvdmVyZWQucG5nIjpbMTQsMTQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY2hlY2tyYWRpby1jb21iaW5lZC5wbmciLC00MDYsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vcmFkaW9idXR0b24tY2hlY2tlZC1pbnZhbGlkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtMjgsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vcmFkaW9idXR0b24tY2hlY2tlZC1wcmVzc2VkLWludmFsaWQucG5nIjpbMTQsMTQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY2hlY2tyYWRpby1jb21iaW5lZC5wbmciLC0zNTAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vcmFkaW9idXR0b24tY2hlY2tlZC1wcmVzc2VkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtMjY2LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL3JhZGlvYnV0dG9uLWNoZWNrZWQucG5nIjpbMTQsMTQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY2hlY2tyYWRpby1jb21iaW5lZC5wbmciLC0yNTIsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vcmFkaW9idXR0b24tZGlzYWJsZWQucG5nIjpbMTQsMTQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY2hlY2tyYWRpby1jb21iaW5lZC5wbmciLC0zMzYsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vcmFkaW9idXR0b24tZm9jdXNlZC1pbnZhbGlkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtNDc2LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL3JhZGlvYnV0dG9uLWZvY3VzZWQucG5nIjpbMTQsMTQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vY2hlY2tyYWRpby1jb21iaW5lZC5wbmciLC00MjAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vcmFkaW9idXR0b24taG92ZXJlZC1pbnZhbGlkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtNTYsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vcmFkaW9idXR0b24taG92ZXJlZC5wbmciOlsxNCwxNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jaGVja3JhZGlvLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9yYWRpb2J1dHRvbi1pbnZhbGlkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtMTU0LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL3JhZGlvYnV0dG9uLXByZXNzZWQtaW52YWxpZC5wbmciOlsxNCwxNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9jaGVja3JhZGlvLWNvbWJpbmVkLnBuZyIsLTQzNCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS9yYWRpb2J1dHRvbi1wcmVzc2VkLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtMjgwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL3JhZGlvYnV0dG9uLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2NoZWNrcmFkaW8tY29tYmluZWQucG5nIiwtNzAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vdG9vbHRpcC1lcnJvci1hcnJvdy5wbmciOlsxMSwxNCwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS90b29sdGlwLWVycm9yLWIucG5nIjpbNiw2LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3Rvb2x0aXAtZXJyb3ItdGItY29tYmluZWQucG5nIiwwLC0zMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vdG9vbHRpcC1lcnJvci1ibC5wbmciOls2LDYsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdG9vbHRpcC1lcnJvci10Yi1jb21iaW5lZC5wbmciLDAsLTI0XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS90b29sdGlwLWVycm9yLWJyLnBuZyI6WzYsNiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90b29sdGlwLWVycm9yLXRiLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS90b29sdGlwLWVycm9yLWMucG5nIjpbNDAsMTgsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vdG9vbHRpcC1lcnJvci1sLnBuZyI6WzYsMTgsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdG9vbHRpcC1lcnJvci1sci1jb21iaW5lZC5wbmciLC02LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL3Rvb2x0aXAtZXJyb3Itci5wbmciOls2LDE4LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3Rvb2x0aXAtZXJyb3ItbHItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL3Rvb2x0aXAtZXJyb3ItdC5wbmciOls2LDYsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdG9vbHRpcC1lcnJvci10Yi1jb21iaW5lZC5wbmciLDAsLTZdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9mb3JtL3Rvb2x0aXAtZXJyb3ItdGwucG5nIjpbNiw2LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3Rvb2x0aXAtZXJyb3ItdGItY29tYmluZWQucG5nIiwwLC0xOF0sInF4L2RlY29yYXRpb24vTW9kZXJuL2Zvcm0vdG9vbHRpcC1lcnJvci10ci5wbmciOls2LDYsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdG9vbHRpcC1lcnJvci10Yi1jb21iaW5lZC5wbmciLDAsLTEyXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZm9ybS90b29sdGlwLWVycm9yLnBuZyI6WzEyNywzMCwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZ3JvdXAtaXRlbS5wbmciOlsxMTAsMjAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2dyb3VwYm94LWxyLWNvbWJpbmVkLnBuZyI6WzgsNTEsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2dyb3VwYm94LXRiLWNvbWJpbmVkLnBuZyI6WzQsMjQsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL2dyb3VwYm94L2dyb3VwYm94LWIucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2dyb3VwYm94LXRiLWNvbWJpbmVkLnBuZyIsMCwtMTJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9ncm91cGJveC9ncm91cGJveC1ibC5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZ3JvdXBib3gtdGItY29tYmluZWQucG5nIiwwLC0xNl0sInF4L2RlY29yYXRpb24vTW9kZXJuL2dyb3VwYm94L2dyb3VwYm94LWJyLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9ncm91cGJveC10Yi1jb21iaW5lZC5wbmciLDAsLThdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9ncm91cGJveC9ncm91cGJveC1jLnBuZyI6WzQwLDUxLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9ncm91cGJveC9ncm91cGJveC1sLnBuZyI6WzQsNTEsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZ3JvdXBib3gtbHItY29tYmluZWQucG5nIiwtNCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZ3JvdXBib3gvZ3JvdXBib3gtci5wbmciOls0LDUxLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2dyb3VwYm94LWxyLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZ3JvdXBib3gvZ3JvdXBib3gtdC5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZ3JvdXBib3gtdGItY29tYmluZWQucG5nIiwwLC00XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZ3JvdXBib3gvZ3JvdXBib3gtdGwucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2dyb3VwYm94LXRiLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vZ3JvdXBib3gvZ3JvdXBib3gtdHIucG5nIjpbNCw0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL2dyb3VwYm94LXRiLWNvbWJpbmVkLnBuZyIsMCwtMjBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9ncm91cGJveC9ncm91cGJveC5wbmciOlsyNTUsNTksInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL21lbnUtYmFja2dyb3VuZC1jb21iaW5lZC5wbmciOls4MCw0OSwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vbWVudS1jaGVja3JhZGlvLWNvbWJpbmVkLmdpZiI6WzY0LDcsImdpZiIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL21lbnUvYmFja2dyb3VuZC5wbmciOls0MCw0OSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9tZW51LWJhY2tncm91bmQtY29tYmluZWQucG5nIiwtNDAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL21lbnUvYmFyLWJhY2tncm91bmQucG5nIjpbNDAsMjAsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vbWVudS1iYWNrZ3JvdW5kLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vbWVudS9jaGVja2JveC1pbnZlcnQuZ2lmIjpbMTYsNywiZ2lmIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9tZW51LWNoZWNrcmFkaW8tY29tYmluZWQuZ2lmIiwtMTYsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL21lbnUvY2hlY2tib3guZ2lmIjpbMTYsNywiZ2lmIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9tZW51LWNoZWNrcmFkaW8tY29tYmluZWQuZ2lmIiwtNDgsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL21lbnUvcmFkaW9idXR0b24taW52ZXJ0LmdpZiI6WzE2LDUsImdpZiIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vbWVudS1jaGVja3JhZGlvLWNvbWJpbmVkLmdpZiIsLTMyLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9tZW51L3JhZGlvYnV0dG9uLmdpZiI6WzE2LDUsImdpZiIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vbWVudS1jaGVja3JhZGlvLWNvbWJpbmVkLmdpZiIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vcGFuZS1sci1jb21iaW5lZC5wbmciOlsxMiwyMzgsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3BhbmUtdGItY29tYmluZWQucG5nIjpbNiwzNiwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vcGFuZS9wYW5lLWIucG5nIjpbNiw2LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3BhbmUtdGItY29tYmluZWQucG5nIiwwLC0zMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3BhbmUvcGFuZS1ibC5wbmciOls2LDYsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vcGFuZS10Yi1jb21iaW5lZC5wbmciLDAsLTE4XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vcGFuZS9wYW5lLWJyLnBuZyI6WzYsNiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9wYW5lLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9wYW5lL3BhbmUtYy5wbmciOls0MCwyMzgsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3BhbmUvcGFuZS1sLnBuZyI6WzYsMjM4LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3BhbmUtbHItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9wYW5lL3BhbmUtci5wbmciOls2LDIzOCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9wYW5lLWxyLWNvbWJpbmVkLnBuZyIsLTYsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3BhbmUvcGFuZS10LnBuZyI6WzYsNiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9wYW5lLXRiLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vcGFuZS9wYW5lLXRsLnBuZyI6WzYsNiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9wYW5lLXRiLWNvbWJpbmVkLnBuZyIsMCwtMjRdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9wYW5lL3BhbmUtdHIucG5nIjpbNiw2LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3BhbmUtdGItY29tYmluZWQucG5nIiwwLC02XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vcGFuZS9wYW5lLnBuZyI6WzE4NSwyNTAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3Njcm9sbGJhci1jb21iaW5lZC5wbmciOls1NCwxMiwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2Nyb2xsYmFyL3Njcm9sbGJhci1iZy1ob3Jpem9udGFsLnBuZyI6Wzc2LDE1LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zY3JvbGxiYXIvc2Nyb2xsYmFyLWJnLXByZXNzZWQtaG9yaXpvbnRhbC5wbmciOlsxOSwxMCwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2Nyb2xsYmFyL3Njcm9sbGJhci1iZy1wcmVzc2VkLXZlcnRpY2FsLnBuZyI6WzEwLDE5LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zY3JvbGxiYXIvc2Nyb2xsYmFyLWJnLXZlcnRpY2FsLnBuZyI6WzE1LDc2LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zY3JvbGxiYXIvc2Nyb2xsYmFyLWJ1dHRvbi1iZy1ob3Jpem9udGFsLnBuZyI6WzEyLDEwLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3Njcm9sbGJhci1jb21iaW5lZC5wbmciLC0zNCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2Nyb2xsYmFyL3Njcm9sbGJhci1idXR0b24tYmctdmVydGljYWwucG5nIjpbMTAsMTIsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2Nyb2xsYmFyLWNvbWJpbmVkLnBuZyIsLTYsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3Njcm9sbGJhci9zY3JvbGxiYXItZG93bi5wbmciOls2LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2Nyb2xsYmFyLWNvbWJpbmVkLnBuZyIsLTI4LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zY3JvbGxiYXIvc2Nyb2xsYmFyLWxlZnQucG5nIjpbNCw2LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3Njcm9sbGJhci1jb21iaW5lZC5wbmciLC01MCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2Nyb2xsYmFyL3Njcm9sbGJhci1yaWdodC5wbmciOls0LDYsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2Nyb2xsYmFyLWNvbWJpbmVkLnBuZyIsLTQ2LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zY3JvbGxiYXIvc2Nyb2xsYmFyLXVwLnBuZyI6WzYsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zY3JvbGxiYXItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zY3JvbGxiYXIvc2xpZGVyLWtub2ItYmFja2dyb3VuZC5wbmciOlsxMiwxMCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zY3JvbGxiYXItY29tYmluZWQucG5nIiwtMTYsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3NlbGVjdGlvbi5wbmciOlsxMTAsMjAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy1sci1jb21iaW5lZC5wbmciOlszMCwzODIsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy1zbWFsbC1sci1jb21iaW5lZC5wbmciOlsxMCwxMzYsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy1zbWFsbC10Yi1jb21iaW5lZC5wbmciOls1LDMwLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3ctdGItY29tYmluZWQucG5nIjpbMTUsOTAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy9zaGFkb3ctYi5wbmciOlsxNSwxNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3ctdGItY29tYmluZWQucG5nIiwwLC0zMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy9zaGFkb3ctYmwucG5nIjpbMTUsMTUsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2hhZG93LXRiLWNvbWJpbmVkLnBuZyIsMCwtMTVdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3cvc2hhZG93LWJyLnBuZyI6WzE1LDE1LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy10Yi1jb21iaW5lZC5wbmciLDAsLTQ1XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2hhZG93L3NoYWRvdy1jLnBuZyI6WzQwLDM4MiwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2hhZG93L3NoYWRvdy1sLnBuZyI6WzE1LDM4MiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3ctbHItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3cvc2hhZG93LXIucG5nIjpbMTUsMzgyLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy1sci1jb21iaW5lZC5wbmciLC0xNSwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2hhZG93L3NoYWRvdy1zbWFsbC1iLnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3ctc21hbGwtdGItY29tYmluZWQucG5nIiwwLC0yMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy9zaGFkb3ctc21hbGwtYmwucG5nIjpbNSw1LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy1zbWFsbC10Yi1jb21iaW5lZC5wbmciLDAsLTE1XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2hhZG93L3NoYWRvdy1zbWFsbC1ici5wbmciOls1LDUsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2hhZG93LXNtYWxsLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3cvc2hhZG93LXNtYWxsLWMucG5nIjpbNDAsMTM2LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3cvc2hhZG93LXNtYWxsLWwucG5nIjpbNSwxMzYsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2hhZG93LXNtYWxsLWxyLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2hhZG93L3NoYWRvdy1zbWFsbC1yLnBuZyI6WzUsMTM2LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy1zbWFsbC1sci1jb21iaW5lZC5wbmciLC01LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3cvc2hhZG93LXNtYWxsLXQucG5nIjpbNSw1LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy1zbWFsbC10Yi1jb21iaW5lZC5wbmciLDAsLTVdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3cvc2hhZG93LXNtYWxsLXRsLnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3ctc21hbGwtdGItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3cvc2hhZG93LXNtYWxsLXRyLnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3ctc21hbGwtdGItY29tYmluZWQucG5nIiwwLC0yNV0sInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy9zaGFkb3ctc21hbGwucG5nIjpbMTE0LDE0NiwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2hhZG93L3NoYWRvdy10LnBuZyI6WzE1LDE1LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy10Yi1jb21iaW5lZC5wbmciLDAsLTYwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2hhZG93L3NoYWRvdy10bC5wbmciOlsxNSwxNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zaGFkb3ctdGItY29tYmluZWQucG5nIiwwLC03NV0sInF4L2RlY29yYXRpb24vTW9kZXJuL3NoYWRvdy9zaGFkb3ctdHIucG5nIjpbMTUsMTUsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2hhZG93LXRiLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc2hhZG93L3NoYWRvdy5wbmciOlszODEsNDEyLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zcGxpdHBhbmUta25vYnMtY29tYmluZWQucG5nIjpbOCw5LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zcGxpdHBhbmUva25vYi1ob3Jpem9udGFsLnBuZyI6WzEsOCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi9zcGxpdHBhbmUta25vYnMtY29tYmluZWQucG5nIiwwLC0xXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vc3BsaXRwYW5lL2tub2ItdmVydGljYWwucG5nIjpbOCwxLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3NwbGl0cGFuZS1rbm9icy1jb21iaW5lZC5wbmciLDAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYmxlLWNvbWJpbmVkLnBuZyI6Wzk0LDE4LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJsZS9hc2NlbmRpbmcucG5nIjpbOCw1LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYmxlLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFibGUvYm9vbGVhbi1mYWxzZS5wbmciOlsxNCwxNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJsZS1jb21iaW5lZC5wbmciLC04MCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFibGUvYm9vbGVhbi10cnVlLnBuZyI6WzE0LDE0LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYmxlLWNvbWJpbmVkLnBuZyIsLTI2LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJsZS9kZXNjZW5kaW5nLnBuZyI6WzgsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJsZS1jb21iaW5lZC5wbmciLC0xOCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFibGUvaGVhZGVyLWNlbGwucG5nIjpbNDAsMTgsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFibGUtY29tYmluZWQucG5nIiwtNDAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYmxlL3NlbGVjdC1jb2x1bW4tb3JkZXIucG5nIjpbMTAsOSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJsZS1jb21iaW5lZC5wbmciLC04LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1ib3R0b20tYWN0aXZlLWxyLWNvbWJpbmVkLnBuZyI6WzEwLDE0LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1ib3R0b20tYWN0aXZlLXRiLWNvbWJpbmVkLnBuZyI6WzUsMzAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWJvdHRvbS1pbmFjdGl2ZS1iLWNvbWJpbmVkLnBuZyI6WzMsOSwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tYm90dG9tLWluYWN0aXZlLWxyLWNvbWJpbmVkLnBuZyI6WzYsMTUsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWJvdHRvbS1pbmFjdGl2ZS10LWNvbWJpbmVkLnBuZyI6WzMsOSwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tbGVmdC1hY3RpdmUtbHItY29tYmluZWQucG5nIjpbMTAsMzcsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWxlZnQtYWN0aXZlLXRiLWNvbWJpbmVkLnBuZyI6WzUsMzAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWxlZnQtaW5hY3RpdmUtYi1jb21iaW5lZC5wbmciOlszLDksInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWxlZnQtaW5hY3RpdmUtbHItY29tYmluZWQucG5nIjpbNiwzOSwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tbGVmdC1pbmFjdGl2ZS10LWNvbWJpbmVkLnBuZyI6WzMsOSwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tcmlnaHQtYWN0aXZlLWxyLWNvbWJpbmVkLnBuZyI6WzEwLDM3LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1yaWdodC1hY3RpdmUtdGItY29tYmluZWQucG5nIjpbNSwzMCwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tcmlnaHQtaW5hY3RpdmUtYi1jb21iaW5lZC5wbmciOlszLDksInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXJpZ2h0LWluYWN0aXZlLWxyLWNvbWJpbmVkLnBuZyI6WzYsMzksInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXJpZ2h0LWluYWN0aXZlLXQtY29tYmluZWQucG5nIjpbMyw5LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi10b3AtYWN0aXZlLWxyLWNvbWJpbmVkLnBuZyI6WzEwLDEyLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi10b3AtYWN0aXZlLXRiLWNvbWJpbmVkLnBuZyI6WzUsMzAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXRvcC1pbmFjdGl2ZS1iLWNvbWJpbmVkLnBuZyI6WzMsOSwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tdG9wLWluYWN0aXZlLWxyLWNvbWJpbmVkLnBuZyI6WzYsMTUsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXRvcC1pbmFjdGl2ZS10LWNvbWJpbmVkLnBuZyI6WzMsOSwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1wYW5lLWxyLWNvbWJpbmVkLnBuZyI6WzYwLDIsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctcGFuZS10Yi1jb21iaW5lZC5wbmciOlszMCwxODAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1ib3R0b20tYWN0aXZlLWIucG5nIjpbNSw1LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWJvdHRvbS1hY3RpdmUtdGItY29tYmluZWQucG5nIiwwLC0xMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1ib3R0b20tYWN0aXZlLWJsLnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1ib3R0b20tYWN0aXZlLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTVdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tYm90dG9tLWFjdGl2ZS1ici5wbmciOls1LDUsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tYm90dG9tLWFjdGl2ZS10Yi1jb21iaW5lZC5wbmciLDAsLTVdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tYm90dG9tLWFjdGl2ZS1jLnBuZyI6WzQwLDE0LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tYm90dG9tLWFjdGl2ZS1sLnBuZyI6WzUsMTQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tYm90dG9tLWFjdGl2ZS1sci1jb21iaW5lZC5wbmciLDAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1ib3R0b20tYWN0aXZlLXIucG5nIjpbNSwxNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1ib3R0b20tYWN0aXZlLWxyLWNvbWJpbmVkLnBuZyIsLTUsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1ib3R0b20tYWN0aXZlLXQucG5nIjpbNSw1LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWJvdHRvbS1hY3RpdmUtdGItY29tYmluZWQucG5nIiwwLC0yMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1ib3R0b20tYWN0aXZlLXRsLnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1ib3R0b20tYWN0aXZlLXRiLWNvbWJpbmVkLnBuZyIsMCwtMjVdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tYm90dG9tLWFjdGl2ZS10ci5wbmciOls1LDUsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tYm90dG9tLWFjdGl2ZS10Yi1jb21iaW5lZC5wbmciLDAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1ib3R0b20tYWN0aXZlLnBuZyI6WzQ5LDI0LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tYm90dG9tLWluYWN0aXZlLWIucG5nIjpbMywzLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWJvdHRvbS1pbmFjdGl2ZS1iLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWJvdHRvbS1pbmFjdGl2ZS1ibC5wbmciOlszLDMsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tYm90dG9tLWluYWN0aXZlLWItY29tYmluZWQucG5nIiwwLC02XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWJvdHRvbS1pbmFjdGl2ZS1ici5wbmciOlszLDMsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tYm90dG9tLWluYWN0aXZlLWItY29tYmluZWQucG5nIiwwLC0zXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWJvdHRvbS1pbmFjdGl2ZS1jLnBuZyI6WzQwLDE1LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tYm90dG9tLWluYWN0aXZlLWwucG5nIjpbMywxNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1ib3R0b20taW5hY3RpdmUtbHItY29tYmluZWQucG5nIiwtMywwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWJvdHRvbS1pbmFjdGl2ZS1yLnBuZyI6WzMsMTUsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tYm90dG9tLWluYWN0aXZlLWxyLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWJvdHRvbS1pbmFjdGl2ZS10LnBuZyI6WzMsMywicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1ib3R0b20taW5hY3RpdmUtdC1jb21iaW5lZC5wbmciLDAsLTNdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tYm90dG9tLWluYWN0aXZlLXRsLnBuZyI6WzMsMywicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1ib3R0b20taW5hY3RpdmUtdC1jb21iaW5lZC5wbmciLDAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1ib3R0b20taW5hY3RpdmUtdHIucG5nIjpbMywzLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWJvdHRvbS1pbmFjdGl2ZS10LWNvbWJpbmVkLnBuZyIsMCwtNl0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1ib3R0b20taW5hY3RpdmUucG5nIjpbNDUsMjEsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1sZWZ0LWFjdGl2ZS1iLnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1sZWZ0LWFjdGl2ZS10Yi1jb21iaW5lZC5wbmciLDAsLTVdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tbGVmdC1hY3RpdmUtYmwucG5nIjpbNSw1LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWxlZnQtYWN0aXZlLXRiLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWxlZnQtYWN0aXZlLWJyLnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1sZWZ0LWFjdGl2ZS10Yi1jb21iaW5lZC5wbmciLDAsLTI1XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWxlZnQtYWN0aXZlLWMucG5nIjpbNDAsMzcsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1sZWZ0LWFjdGl2ZS1sLnBuZyI6WzUsMzcsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tbGVmdC1hY3RpdmUtbHItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tbGVmdC1hY3RpdmUtci5wbmciOls1LDM3LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWxlZnQtYWN0aXZlLWxyLWNvbWJpbmVkLnBuZyIsLTUsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1sZWZ0LWFjdGl2ZS10LnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1sZWZ0LWFjdGl2ZS10Yi1jb21iaW5lZC5wbmciLDAsLTE1XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWxlZnQtYWN0aXZlLXRsLnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1sZWZ0LWFjdGl2ZS10Yi1jb21iaW5lZC5wbmciLDAsLTEwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWxlZnQtYWN0aXZlLXRyLnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1sZWZ0LWFjdGl2ZS10Yi1jb21iaW5lZC5wbmciLDAsLTIwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWxlZnQtYWN0aXZlLnBuZyI6WzIyLDQ3LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tbGVmdC1pbmFjdGl2ZS1iLnBuZyI6WzMsMywicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1sZWZ0LWluYWN0aXZlLWItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tbGVmdC1pbmFjdGl2ZS1ibC5wbmciOlszLDMsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tbGVmdC1pbmFjdGl2ZS1iLWNvbWJpbmVkLnBuZyIsMCwtNl0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1sZWZ0LWluYWN0aXZlLWJyLnBuZyI6WzMsMywicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1sZWZ0LWluYWN0aXZlLWItY29tYmluZWQucG5nIiwwLC0zXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWxlZnQtaW5hY3RpdmUtYy5wbmciOls0MCwzOSwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWxlZnQtaW5hY3RpdmUtbC5wbmciOlszLDM5LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWxlZnQtaW5hY3RpdmUtbHItY29tYmluZWQucG5nIiwtMywwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWxlZnQtaW5hY3RpdmUtci5wbmciOlszLDM5LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWxlZnQtaW5hY3RpdmUtbHItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tbGVmdC1pbmFjdGl2ZS10LnBuZyI6WzMsMywicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1sZWZ0LWluYWN0aXZlLXQtY29tYmluZWQucG5nIiwwLC0zXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWxlZnQtaW5hY3RpdmUtdGwucG5nIjpbMywzLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLWxlZnQtaW5hY3RpdmUtdC1jb21iaW5lZC5wbmciLDAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1sZWZ0LWluYWN0aXZlLXRyLnBuZyI6WzMsMywicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1sZWZ0LWluYWN0aXZlLXQtY29tYmluZWQucG5nIiwwLC02XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLWxlZnQtaW5hY3RpdmUucG5nIjpbMjAsNDUsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1yaWdodC1hY3RpdmUtYi5wbmciOls1LDUsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tcmlnaHQtYWN0aXZlLXRiLWNvbWJpbmVkLnBuZyIsMCwtMjVdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tcmlnaHQtYWN0aXZlLWJsLnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1yaWdodC1hY3RpdmUtdGItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tcmlnaHQtYWN0aXZlLWJyLnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1yaWdodC1hY3RpdmUtdGItY29tYmluZWQucG5nIiwwLC0yMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1yaWdodC1hY3RpdmUtYy5wbmciOls0MCwzNywicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLXJpZ2h0LWFjdGl2ZS1sLnBuZyI6WzUsMzcsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tcmlnaHQtYWN0aXZlLWxyLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLXJpZ2h0LWFjdGl2ZS1yLnBuZyI6WzUsMzcsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tcmlnaHQtYWN0aXZlLWxyLWNvbWJpbmVkLnBuZyIsLTUsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1yaWdodC1hY3RpdmUtdC5wbmciOls1LDUsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tcmlnaHQtYWN0aXZlLXRiLWNvbWJpbmVkLnBuZyIsMCwtNV0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1yaWdodC1hY3RpdmUtdGwucG5nIjpbNSw1LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXJpZ2h0LWFjdGl2ZS10Yi1jb21iaW5lZC5wbmciLDAsLTE1XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLXJpZ2h0LWFjdGl2ZS10ci5wbmciOls1LDUsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tcmlnaHQtYWN0aXZlLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tcmlnaHQtYWN0aXZlLnBuZyI6WzIyLDQ3LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tcmlnaHQtaW5hY3RpdmUtYi5wbmciOlszLDMsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tcmlnaHQtaW5hY3RpdmUtYi1jb21iaW5lZC5wbmciLDAsLTNdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tcmlnaHQtaW5hY3RpdmUtYmwucG5nIjpbMywzLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXJpZ2h0LWluYWN0aXZlLWItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tcmlnaHQtaW5hY3RpdmUtYnIucG5nIjpbMywzLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXJpZ2h0LWluYWN0aXZlLWItY29tYmluZWQucG5nIiwwLC02XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLXJpZ2h0LWluYWN0aXZlLWMucG5nIjpbNDAsMzksInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1yaWdodC1pbmFjdGl2ZS1sLnBuZyI6WzMsMzksInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tcmlnaHQtaW5hY3RpdmUtbHItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tcmlnaHQtaW5hY3RpdmUtci5wbmciOlszLDM5LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXJpZ2h0LWluYWN0aXZlLWxyLWNvbWJpbmVkLnBuZyIsLTMsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1yaWdodC1pbmFjdGl2ZS10LnBuZyI6WzMsMywicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1yaWdodC1pbmFjdGl2ZS10LWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLXJpZ2h0LWluYWN0aXZlLXRsLnBuZyI6WzMsMywicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi1yaWdodC1pbmFjdGl2ZS10LWNvbWJpbmVkLnBuZyIsMCwtM10sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi1yaWdodC1pbmFjdGl2ZS10ci5wbmciOlszLDMsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tcmlnaHQtaW5hY3RpdmUtdC1jb21iaW5lZC5wbmciLDAsLTZdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tcmlnaHQtaW5hY3RpdmUucG5nIjpbMjAsNDUsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi10b3AtYWN0aXZlLWIucG5nIjpbNSw1LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXRvcC1hY3RpdmUtdGItY29tYmluZWQucG5nIiwwLC0yMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi10b3AtYWN0aXZlLWJsLnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi10b3AtYWN0aXZlLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTVdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tdG9wLWFjdGl2ZS1ici5wbmciOls1LDUsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tdG9wLWFjdGl2ZS10Yi1jb21iaW5lZC5wbmciLDAsLTEwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLXRvcC1hY3RpdmUtYy5wbmciOls0MCwxNCwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLXRvcC1hY3RpdmUtbC5wbmciOls1LDEyLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXRvcC1hY3RpdmUtbHItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tdG9wLWFjdGl2ZS1yLnBuZyI6WzUsMTIsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1idXR0b24tdG9wLWFjdGl2ZS1sci1jb21iaW5lZC5wbmciLC01LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tdG9wLWFjdGl2ZS10LnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi10b3AtYWN0aXZlLXRiLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLXRvcC1hY3RpdmUtdGwucG5nIjpbNSw1LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXRvcC1hY3RpdmUtdGItY29tYmluZWQucG5nIiwwLC0yNV0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi10b3AtYWN0aXZlLXRyLnBuZyI6WzUsNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi10b3AtYWN0aXZlLXRiLWNvbWJpbmVkLnBuZyIsMCwtNV0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi10b3AtYWN0aXZlLnBuZyI6WzQ4LDIyLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tdG9wLWluYWN0aXZlLWIucG5nIjpbMywzLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXRvcC1pbmFjdGl2ZS1iLWNvbWJpbmVkLnBuZyIsMCwtNl0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi10b3AtaW5hY3RpdmUtYmwucG5nIjpbMywzLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXRvcC1pbmFjdGl2ZS1iLWNvbWJpbmVkLnBuZyIsMCwtM10sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi10b3AtaW5hY3RpdmUtYnIucG5nIjpbMywzLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXRvcC1pbmFjdGl2ZS1iLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLXRvcC1pbmFjdGl2ZS1jLnBuZyI6WzQwLDE1LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tdG9wLWluYWN0aXZlLWwucG5nIjpbMywxNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi10b3AtaW5hY3RpdmUtbHItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tdG9wLWluYWN0aXZlLXIucG5nIjpbMywxNSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi10b3AtaW5hY3RpdmUtbHItY29tYmluZWQucG5nIiwtMywwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWItYnV0dG9uLXRvcC1pbmFjdGl2ZS10LnBuZyI6WzMsMywicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi10b3AtaW5hY3RpdmUtdC1jb21iaW5lZC5wbmciLDAsLTNdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYi1idXR0b24tdG9wLWluYWN0aXZlLXRsLnBuZyI6WzMsMywicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LWJ1dHRvbi10b3AtaW5hY3RpdmUtdC1jb21iaW5lZC5wbmciLDAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi10b3AtaW5hY3RpdmUtdHIucG5nIjpbMywzLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctYnV0dG9uLXRvcC1pbmFjdGl2ZS10LWNvbWJpbmVkLnBuZyIsMCwtNl0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFiLWJ1dHRvbi10b3AtaW5hY3RpdmUucG5nIjpbNDUsMjEsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFidmlldy1wYW5lLWIucG5nIjpbMzAsMzAsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1wYW5lLXRiLWNvbWJpbmVkLnBuZyIsMCwtNjBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYnZpZXctcGFuZS1ibC5wbmciOlszMCwzMCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LXBhbmUtdGItY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYnZpZXctcGFuZS1ici5wbmciOlszMCwzMCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LXBhbmUtdGItY29tYmluZWQucG5nIiwwLC0xMjBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYnZpZXctcGFuZS1jLnBuZyI6WzQwLDEyMCwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWJ2aWV3LXBhbmUtbC5wbmciOlszMCwyLCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXctcGFuZS1sci1jb21iaW5lZC5wbmciLDAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFidmlldy1wYW5lLXIucG5nIjpbMzAsMiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LXBhbmUtbHItY29tYmluZWQucG5nIiwtMzAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFidmlldy1wYW5lLXQucG5nIjpbMzAsMzAsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1wYW5lLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTUwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy90YWJ2aWV3LXBhbmUtdGwucG5nIjpbMzAsMzAsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdGFidmlldy1wYW5lLXRiLWNvbWJpbmVkLnBuZyIsMCwtMzBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3L3RhYnZpZXctcGFuZS10ci5wbmciOlszMCwzMCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90YWJ2aWV3LXBhbmUtdGItY29tYmluZWQucG5nIiwwLC05MF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RhYnZpZXcvdGFidmlldy1wYW5lLnBuZyI6WzE4NSwyNTAsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3Rvb2xiYXItY29tYmluZWQucG5nIjpbODAsMTMwLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90b29sYmFyL3Rvb2xiYXItZ3JhZGllbnQtYmx1ZS5wbmciOls0MCwxMzAsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdG9vbGJhci1jb21iaW5lZC5wbmciLC00MCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdG9vbGJhci90b29sYmFyLWdyYWRpZW50LnBuZyI6WzQwLDEzMCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90b29sYmFyLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdG9vbGJhci90b29sYmFyLWhhbmRsZS1rbm9iLmdpZiI6WzEsOCwiZ2lmIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdG9vbGJhci90b29sYmFyLXBhcnQuZ2lmIjpbNywxLCJnaWYiLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90b29sdGlwLWVycm9yLWxyLWNvbWJpbmVkLnBuZyI6WzEyLDE4LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90b29sdGlwLWVycm9yLXRiLWNvbWJpbmVkLnBuZyI6WzYsMzYsInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RyZWUtY29tYmluZWQucG5nIjpbMzIsOCwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdHJlZS9jbG9zZWQtc2VsZWN0ZWQucG5nIjpbOCw4LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RyZWUtY29tYmluZWQucG5nIiwtMjQsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3RyZWUvY2xvc2VkLnBuZyI6WzgsOCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90cmVlLWNvbWJpbmVkLnBuZyIsLTE2LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi90cmVlL29wZW4tc2VsZWN0ZWQucG5nIjpbOCw4LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3RyZWUtY29tYmluZWQucG5nIiwtOCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vdHJlZS9vcGVuLnBuZyI6WzgsOCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi90cmVlLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93LWNhcHRpb25iYXItYnV0dG9ucy1jb21iaW5lZC5wbmciOlsxMDgsOSwicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93LWNhcHRpb25iYXItbHItYWN0aXZlLWNvbWJpbmVkLnBuZyI6WzEyLDksInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLWxyLWluYWN0aXZlLWNvbWJpbmVkLnBuZyI6WzEyLDksInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLXRiLWFjdGl2ZS1jb21iaW5lZC5wbmciOls2LDM2LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctY2FwdGlvbmJhci10Yi1pbmFjdGl2ZS1jb21iaW5lZC5wbmciOls2LDM2LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctc3RhdHVzYmFyLWxyLWNvbWJpbmVkLnBuZyI6WzgsNywicG5nIiwicXgiXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93LXN0YXR1c2Jhci10Yi1jb21iaW5lZC5wbmciOls0LDI0LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvY2FwdGlvbmJhci1hY3RpdmUtYi5wbmciOls2LDYsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93LWNhcHRpb25iYXItdGItYWN0aXZlLWNvbWJpbmVkLnBuZyIsMCwtMThdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvY2FwdGlvbmJhci1hY3RpdmUtYmwucG5nIjpbNiw2LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLXRiLWFjdGl2ZS1jb21iaW5lZC5wbmciLDAsLTI0XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L2NhcHRpb25iYXItYWN0aXZlLWJyLnBuZyI6WzYsNiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctY2FwdGlvbmJhci10Yi1hY3RpdmUtY29tYmluZWQucG5nIiwwLC0xMl0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy9jYXB0aW9uYmFyLWFjdGl2ZS1jLnBuZyI6WzQwLDksInBuZyIsInF4Il0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy9jYXB0aW9uYmFyLWFjdGl2ZS1sLnBuZyI6WzYsOSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctY2FwdGlvbmJhci1sci1hY3RpdmUtY29tYmluZWQucG5nIiwtNiwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L2NhcHRpb25iYXItYWN0aXZlLXIucG5nIjpbNiw5LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLWxyLWFjdGl2ZS1jb21iaW5lZC5wbmciLDAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy9jYXB0aW9uYmFyLWFjdGl2ZS10LnBuZyI6WzYsNiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctY2FwdGlvbmJhci10Yi1hY3RpdmUtY29tYmluZWQucG5nIiwwLC02XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L2NhcHRpb25iYXItYWN0aXZlLXRsLnBuZyI6WzYsNiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctY2FwdGlvbmJhci10Yi1hY3RpdmUtY29tYmluZWQucG5nIiwwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvY2FwdGlvbmJhci1hY3RpdmUtdHIucG5nIjpbNiw2LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLXRiLWFjdGl2ZS1jb21iaW5lZC5wbmciLDAsLTMwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L2NhcHRpb25iYXItYWN0aXZlLnBuZyI6WzY5LDIxLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvY2FwdGlvbmJhci1pbmFjdGl2ZS1iLnBuZyI6WzYsNiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctY2FwdGlvbmJhci10Yi1pbmFjdGl2ZS1jb21iaW5lZC5wbmciLDAsLTI0XSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L2NhcHRpb25iYXItaW5hY3RpdmUtYmwucG5nIjpbNiw2LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLXRiLWluYWN0aXZlLWNvbWJpbmVkLnBuZyIsMCwtNl0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy9jYXB0aW9uYmFyLWluYWN0aXZlLWJyLnBuZyI6WzYsNiwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctY2FwdGlvbmJhci10Yi1pbmFjdGl2ZS1jb21iaW5lZC5wbmciLDAsLTMwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L2NhcHRpb25iYXItaW5hY3RpdmUtYy5wbmciOls0MCw5LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvY2FwdGlvbmJhci1pbmFjdGl2ZS1sLnBuZyI6WzYsOSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctY2FwdGlvbmJhci1sci1pbmFjdGl2ZS1jb21iaW5lZC5wbmciLDAsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy9jYXB0aW9uYmFyLWluYWN0aXZlLXIucG5nIjpbNiw5LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLWxyLWluYWN0aXZlLWNvbWJpbmVkLnBuZyIsLTYsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy9jYXB0aW9uYmFyLWluYWN0aXZlLXQucG5nIjpbNiw2LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLXRiLWluYWN0aXZlLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L2NhcHRpb25iYXItaW5hY3RpdmUtdGwucG5nIjpbNiw2LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLXRiLWluYWN0aXZlLWNvbWJpbmVkLnBuZyIsMCwtMTJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvY2FwdGlvbmJhci1pbmFjdGl2ZS10ci5wbmciOls2LDYsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93LWNhcHRpb25iYXItdGItaW5hY3RpdmUtY29tYmluZWQucG5nIiwwLC0xOF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy9jYXB0aW9uYmFyLWluYWN0aXZlLnBuZyI6WzY5LDIxLCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvY2xvc2UtYWN0aXZlLWhvdmVyZWQucG5nIjpbOSw5LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLWJ1dHRvbnMtY29tYmluZWQucG5nIiwtMjcsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy9jbG9zZS1hY3RpdmUucG5nIjpbOSw5LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLWJ1dHRvbnMtY29tYmluZWQucG5nIiwtOSwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L2Nsb3NlLWluYWN0aXZlLnBuZyI6WzksOSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctY2FwdGlvbmJhci1idXR0b25zLWNvbWJpbmVkLnBuZyIsLTkwLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvbWF4aW1pemUtYWN0aXZlLWhvdmVyZWQucG5nIjpbOSw5LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLWJ1dHRvbnMtY29tYmluZWQucG5nIiwtMTgsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy9tYXhpbWl6ZS1hY3RpdmUucG5nIjpbOSw5LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLWJ1dHRvbnMtY29tYmluZWQucG5nIiwtODEsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy9tYXhpbWl6ZS1pbmFjdGl2ZS5wbmciOls5LDksInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93LWNhcHRpb25iYXItYnV0dG9ucy1jb21iaW5lZC5wbmciLC01NCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L21pbmltaXplLWFjdGl2ZS1ob3ZlcmVkLnBuZyI6WzksOSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctY2FwdGlvbmJhci1idXR0b25zLWNvbWJpbmVkLnBuZyIsLTYzLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvbWluaW1pemUtYWN0aXZlLnBuZyI6WzksOSwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctY2FwdGlvbmJhci1idXR0b25zLWNvbWJpbmVkLnBuZyIsLTcyLDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvbWluaW1pemUtaW5hY3RpdmUucG5nIjpbOSw5LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1jYXB0aW9uYmFyLWJ1dHRvbnMtY29tYmluZWQucG5nIiwtMzYsMF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy9yZXN0b3JlLWFjdGl2ZS1ob3ZlcmVkLnBuZyI6WzksOCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctY2FwdGlvbmJhci1idXR0b25zLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L3Jlc3RvcmUtYWN0aXZlLnBuZyI6WzksOCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctY2FwdGlvbmJhci1idXR0b25zLWNvbWJpbmVkLnBuZyIsLTk5LDBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvcmVzdG9yZS1pbmFjdGl2ZS5wbmciOls5LDgsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93LWNhcHRpb25iYXItYnV0dG9ucy1jb21iaW5lZC5wbmciLC00NSwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L3N0YXR1c2Jhci1iLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctc3RhdHVzYmFyLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTZdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvc3RhdHVzYmFyLWJsLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctc3RhdHVzYmFyLXRiLWNvbWJpbmVkLnBuZyIsMCwtMjBdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvc3RhdHVzYmFyLWJyLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctc3RhdHVzYmFyLXRiLWNvbWJpbmVkLnBuZyIsMCwtNF0sInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy9zdGF0dXNiYXItYy5wbmciOls0MCw3LCJwbmciLCJxeCJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvc3RhdHVzYmFyLWwucG5nIjpbNCw3LCJwbmciLCJxeCIsInF4L2RlY29yYXRpb24vTW9kZXJuL3dpbmRvdy1zdGF0dXNiYXItbHItY29tYmluZWQucG5nIiwtNCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L3N0YXR1c2Jhci1yLnBuZyI6WzQsNywicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctc3RhdHVzYmFyLWxyLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L3N0YXR1c2Jhci10LnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctc3RhdHVzYmFyLXRiLWNvbWJpbmVkLnBuZyIsMCwwXSwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93L3N0YXR1c2Jhci10bC5wbmciOls0LDQsInBuZyIsInF4IiwicXgvZGVjb3JhdGlvbi9Nb2Rlcm4vd2luZG93LXN0YXR1c2Jhci10Yi1jb21iaW5lZC5wbmciLDAsLThdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvc3RhdHVzYmFyLXRyLnBuZyI6WzQsNCwicG5nIiwicXgiLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3ctc3RhdHVzYmFyLXRiLWNvbWJpbmVkLnBuZyIsMCwtMTJdLCJxeC9kZWNvcmF0aW9uL01vZGVybi93aW5kb3cvc3RhdHVzYmFyLnBuZyI6WzM2OSwxNSwicG5nIiwicXgiXSwicXgvaWNvbi9UYW5nby8xNi9hY3Rpb25zL2RpYWxvZy1jYW5jZWwucG5nIjpbMTYsMTYsInBuZyIsInF4Il0sInF4L2ljb24vVGFuZ28vMTYvYWN0aW9ucy9kaWFsb2ctb2sucG5nIjpbMTYsMTYsInBuZyIsInF4Il0sInF4L2ljb24vVGFuZ28vMTYvYWN0aW9ucy92aWV3LXJlZnJlc2gucG5nIjpbMTYsMTYsInBuZyIsInF4Il0sInF4L2ljb24vVGFuZ28vMTYvYWN0aW9ucy93aW5kb3ctY2xvc2UucG5nIjpbMTYsMTYsInBuZyIsInF4Il0sInF4L2ljb24vVGFuZ28vMTYvYXBwcy9vZmZpY2UtY2FsZW5kYXIucG5nIjpbMTYsMTYsInBuZyIsInF4Il0sInF4L2ljb24vVGFuZ28vMTYvYXBwcy91dGlsaXRpZXMtY29sb3ItY2hvb3Nlci5wbmciOlsxNiwxNiwicG5nIiwicXgiXSwicXgvaWNvbi9UYW5nby8xNi9taW1ldHlwZXMvb2ZmaWNlLWRvY3VtZW50LnBuZyI6WzE2LDE2LCJwbmciLCJxeCJdLCJxeC9pY29uL1RhbmdvLzE2L3BsYWNlcy9mb2xkZXItb3Blbi5wbmciOlsxNiwxNiwicG5nIiwicXgiXSwicXgvaWNvbi9UYW5nby8xNi9wbGFjZXMvZm9sZGVyLnBuZyI6WzE2LDE2LCJwbmciLCJxeCJdLCJxeC9pY29uL1RhbmdvLzIyL2FjdGlvbnMvZWRpdC1maW5kLnBuZyI6WzIyLDIyLCJwbmciLCJxeCJdLCJxeC9pY29uL1RhbmdvLzIyL2FjdGlvbnMvbWVkaWEtc2Vlay1mb3J3YXJkLnBuZyI6WzIyLDIyLCJwbmciLCJxeCJdLCJxeC9pY29uL1RhbmdvLzIyL2FwcHMvdXRpbGl0aWVzLWRpY3Rpb25hcnkucG5nIjpbMjIsMjIsInBuZyIsInF4Il0sInF4L2ljb24vVGFuZ28vMjIvYXBwcy91dGlsaXRpZXMtZ3JhcGhpY3Mtdmlld2VyLnBuZyI6WzIyLDIyLCJwbmciLCJxeCJdLCJxeC9pY29uL1RhbmdvLzIyL2FwcHMvdXRpbGl0aWVzLWhlbHAucG5nIjpbMjIsMjIsInBuZyIsInF4Il0sInF4L2ljb24vVGFuZ28vMjIvbWltZXR5cGVzL29mZmljZS1kb2N1bWVudC5wbmciOlsyMiwyMiwicG5nIiwicXgiXSwicXgvaWNvbi9UYW5nby8yMi9wbGFjZXMvZm9sZGVyLW9wZW4ucG5nIjpbMjIsMjIsInBuZyIsInF4Il0sInF4L2ljb24vVGFuZ28vMjIvcGxhY2VzL2ZvbGRlci5wbmciOlsyMiwyMiwicG5nIiwicXgiXSwicXgvaWNvbi9UYW5nby8zMi9taW1ldHlwZXMvb2ZmaWNlLWRvY3VtZW50LnBuZyI6WzMyLDMyLCJwbmciLCJxeCJdLCJxeC9pY29uL1RhbmdvLzMyL3BsYWNlcy9mb2xkZXItb3Blbi5wbmciOlszMiwzMiwicG5nIiwicXgiXSwicXgvaWNvbi9UYW5nby8zMi9wbGFjZXMvZm9sZGVyLnBuZyI6WzMyLDMyLCJwbmciLCJxeCJdLCJxeC9zdGF0aWMvYmxhbmsuZ2lmIjpbMSwxLCJnaWYiLCJxeCJdLCJxeC9zdGF0aWMvYmxhbmsuaHRtbCI6InF4In0sInRyYW5zbGF0aW9ucyI6eyJDIjp7fX19OwotKGZ1bmN0aW9uKCl7dmFyIG09InRvU3RyaW5nIixrPSIuIixqPSJkZWZhdWx0IixoPSJPYmplY3QiLGc9JyInLGY9IkFycmF5IixlPSIoKSIsZD0iU3RyaW5nIixjPSJGdW5jdGlvbiIsYj0iLnByb3RvdHlwZSIsTD0iZnVuY3Rpb24iLEs9IkJvb2xlYW4iLEo9IkVycm9yIixJPSJjb25zdHJ1Y3RvciIsSD0id2FybiIsRz0iaGFzT3duUHJvcGVydHkiLEY9InN0cmluZyIsRT0idG9Mb2NhbGVTdHJpbmciLEQ9IlJlZ0V4cCIsQz0nXCIsICInLHQ9ImluZm8iLHU9IkJST0tFTl9JRSIscj0iaXNQcm90b3R5cGVPZiIscz0iRGF0ZSIscD0iIixxPSJxeC5Cb290c3RyYXAiLG49Il0iLG89IkNsYXNzIix2PSJlcnJvciIsdz0iW0NsYXNzICIseT0idmFsdWVPZiIseD0iTnVtYmVyIixBPSJjb3VudCIsej0iZGVidWciLEI9IkVTNSI7aWYoIXdpbmRvdy5xeCl7d2luZG93LnF4PXt9O31xeC5Cb290c3RyYXA9e2dlbmVyaWNUb1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB3K3RoaXMuY2xhc3NuYW1lK247fSxjcmVhdGVOYW1lc3BhY2U6ZnVuY3Rpb24obmFtZSxNKXt2YXIgTz1uYW1lLnNwbGl0KGspO3ZhciBwYXJlbnQ9d2luZG93O3ZhciBOPU9bMF07Zm9yKHZhciBpPTAsUD1PLmxlbmd0aC0xO2k8UDtpKyssTj1PW2ldKXtpZighcGFyZW50W05dKXtwYXJlbnQ9cGFyZW50W05dPXt9O31lbHNle3BhcmVudD1wYXJlbnRbTl07fX1wYXJlbnRbTl09TTtyZXR1cm4gTjt9LHNldERpc3BsYXlOYW1lOmZ1bmN0aW9uKFEsUixuYW1lKXtRLmRpc3BsYXlOYW1lPVIraytuYW1lK2U7fSxzZXREaXNwbGF5TmFtZXM6ZnVuY3Rpb24oUyxUKXtmb3IodmFyIG5hbWUgaW4gUyl7dmFyIFU9U1tuYW1lXTtpZihVIGluc3RhbmNlb2YgRnVuY3Rpb24pe1UuZGlzcGxheU5hbWU9VCtrK25hbWUrZTt9fX0sZGVmaW5lOmZ1bmN0aW9uKG5hbWUsVil7aWYoIVYpe3ZhciBWPXtzdGF0aWNzOnt9fTt9dmFyIGJiO3ZhciBZPW51bGw7cXguQm9vdHN0cmFwLnNldERpc3BsYXlOYW1lcyhWLnN0YXRpY3MsbmFtZSk7aWYoVi5tZW1iZXJzfHxWLmV4dGVuZCl7cXguQm9vdHN0cmFwLnNldERpc3BsYXlOYW1lcyhWLm1lbWJlcnMsbmFtZStiKTtiYj1WLmNvbnN0cnVjdHx8bmV3IEZ1bmN0aW9uO2lmKFYuZXh0ZW5kKXt0aGlzLmV4dGVuZENsYXNzKGJiLGJiLFYuZXh0ZW5kLG5hbWUsYmEpO312YXIgVz1WLnN0YXRpY3N8fHt9O2Zvcih2YXIgaT0wLGJjPXF4LkJvb3RzdHJhcC5nZXRLZXlzKFcpLGw9YmMubGVuZ3RoO2k8bDtpKyspe3ZhciBiZD1iY1tpXTtiYltiZF09V1tiZF07fVk9YmIucHJvdG90eXBlO3ZhciBYPVYubWVtYmVyc3x8e307Zm9yKHZhciBpPTAsYmM9cXguQm9vdHN0cmFwLmdldEtleXMoWCksbD1iYy5sZW5ndGg7aTxsO2krKyl7dmFyIGJkPWJjW2ldO1lbYmRdPVhbYmRdO319ZWxzZXtiYj1WLnN0YXRpY3N8fHt9O312YXIgYmE9dGhpcy5jcmVhdGVOYW1lc3BhY2UobmFtZSxiYik7YmIubmFtZT1iYi5jbGFzc25hbWU9bmFtZTtiYi5iYXNlbmFtZT1iYTtiYi4kJHR5cGU9bztpZighYmIuaGFzT3duUHJvcGVydHkobSkpe2JiLnRvU3RyaW5nPXRoaXMuZ2VuZXJpY1RvU3RyaW5nO31pZihWLmRlZmVyKXtWLmRlZmVyKGJiLFkpO31xeC5Cb290c3RyYXAuJCRyZWdpc3RyeVtuYW1lXT1WLnN0YXRpY3M7cmV0dXJuIGJiO319O3F4LkJvb3RzdHJhcC5kZWZpbmUocSx7c3RhdGljczp7TE9BRFNUQVJUOnF4LiQkc3RhcnR8fG5ldyBEYXRlKCksY3JlYXRlTmFtZXNwYWNlOnF4LkJvb3RzdHJhcC5jcmVhdGVOYW1lc3BhY2UsZGVmaW5lOnF4LkJvb3RzdHJhcC5kZWZpbmUsc2V0RGlzcGxheU5hbWU6cXguQm9vdHN0cmFwLnNldERpc3BsYXlOYW1lLHNldERpc3BsYXlOYW1lczpxeC5Cb290c3RyYXAuc2V0RGlzcGxheU5hbWVzLGdlbmVyaWNUb1N0cmluZzpxeC5Cb290c3RyYXAuZ2VuZXJpY1RvU3RyaW5nLGV4dGVuZENsYXNzOmZ1bmN0aW9uKGJlLGJmLGJnLG5hbWUsYmgpe3ZhciBiaz1iZy5wcm90b3R5cGU7dmFyIGJqPW5ldyBGdW5jdGlvbjtiai5wcm90b3R5cGU9Yms7dmFyIGJpPW5ldyBiajtiZS5wcm90b3R5cGU9Ymk7YmkubmFtZT1iaS5jbGFzc25hbWU9bmFtZTtiaS5iYXNlbmFtZT1iaDtiZi5iYXNlPWJlLnN1cGVyY2xhc3M9Ymc7YmYuc2VsZj1iZS5jb25zdHJ1Y3Rvcj1iaS5jb25zdHJ1Y3Rvcj1iZTt9LGdldEJ5TmFtZTpmdW5jdGlvbihuYW1lKXtyZXR1cm4gcXguQm9vdHN0cmFwLiQkcmVnaXN0cnlbbmFtZV07fSwkJHJlZ2lzdHJ5Ont9LG9iamVjdEdldExlbmd0aDooeyJjb3VudCI6ZnVuY3Rpb24oYmwpe3JldHVybiBibC5fX2NvdW50X187fSwiZGVmYXVsdCI6ZnVuY3Rpb24oYm0pe3ZhciBsZW5ndGg9MDtmb3IodmFyIGJuIGluIGJtKXtsZW5ndGgrKzt9cmV0dXJuIGxlbmd0aDt9fSlbKCh7fSkuX19jb3VudF9fPT0wKT9BOmpdLG9iamVjdE1lcmdlV2l0aDpmdW5jdGlvbihibyxicCxicSl7aWYoYnE9PT11bmRlZmluZWQpe2JxPXRydWU7fWZvcih2YXIgYnIgaW4gYnApe2lmKGJxfHxib1ticl09PT11bmRlZmluZWQpe2JvW2JyXT1icFticl07fX1yZXR1cm4gYm87fSxfX2lkOltyLEcsRSxtLHksSV0sZ2V0S2V5czooeyJFUzUiOk9iamVjdC5rZXlzLCJCUk9LRU5fSUUiOmZ1bmN0aW9uKGJzKXt2YXIgYnQ9W107dmFyIGJ2PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Zm9yKHZhciBidyBpbiBicyl7aWYoYnYuY2FsbChicyxidykpe2J0LnB1c2goYncpO319dmFyIGJ1PXF4LkJvb3RzdHJhcC5fX2lkO2Zvcih2YXIgaT0wLGE9YnUsbD1hLmxlbmd0aDtpPGw7aSsrKXtpZihidi5jYWxsKGJzLGFbaV0pKXtidC5wdXNoKGFbaV0pO319cmV0dXJuIGJ0O30sImRlZmF1bHQiOmZ1bmN0aW9uKGJ4KXt2YXIgYnk9W107dmFyIGJ6PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Zm9yKHZhciBiQSBpbiBieCl7aWYoYnouY2FsbChieCxiQSkpe2J5LnB1c2goYkEpO319cmV0dXJuIGJ5O319KVt0eXBlb2YgKE9iamVjdC5rZXlzKT09TD9COihmdW5jdGlvbigpe2Zvcih2YXIgYkIgaW4ge3RvU3RyaW5nOjF9KXtyZXR1cm4gYkI7fX0pKCkhPT1tP3U6al0sZ2V0S2V5c0FzU3RyaW5nOmZ1bmN0aW9uKGJDKXt2YXIgYkQ9cXguQm9vdHN0cmFwLmdldEtleXMoYkMpO2lmKGJELmxlbmd0aD09MCl7cmV0dXJuIHA7fXJldHVybiBnK2JELmpvaW4oQykrZzt9LF9faWU6eyJbb2JqZWN0IFN0cmluZ10iOmQsIltvYmplY3QgQXJyYXldIjpmLCJbb2JqZWN0IE9iamVjdF0iOmgsIltvYmplY3QgUmVnRXhwXSI6RCwiW29iamVjdCBOdW1iZXJdIjp4LCJbb2JqZWN0IEJvb2xlYW5dIjpLLCJbb2JqZWN0IERhdGVdIjpzLCJbb2JqZWN0IEZ1bmN0aW9uXSI6YywiW29iamVjdCBFcnJvcl0iOkp9LGJpbmQ6ZnVuY3Rpb24oYkUsc2VsZixiRil7dmFyIGJHPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyLGFyZ3VtZW50cy5sZW5ndGgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBiSD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCxhcmd1bWVudHMubGVuZ3RoKTtyZXR1cm4gYkUuYXBwbHkoc2VsZixiRy5jb25jYXQoYkgpKTt9O30sZmlyc3RVcDpmdW5jdGlvbihiSSl7cmV0dXJuIGJJLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2JJLnN1YnN0cigxKTt9LGZpcnN0TG93OmZ1bmN0aW9uKGJKKXtyZXR1cm4gYkouY2hhckF0KDApLnRvTG93ZXJDYXNlKCkrYkouc3Vic3RyKDEpO30sZ2V0Q2xhc3M6ZnVuY3Rpb24oYkspe3ZhciBiTD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYkspO3JldHVybiAocXguQm9vdHN0cmFwLl9faWVbYkxdfHxiTC5zbGljZSg4LC0xKSk7fSxpc1N0cmluZzpmdW5jdGlvbihiTSl7cmV0dXJuIChiTSE9PW51bGwmJih0eXBlb2YgYk09PT1GfHxxeC5Cb290c3RyYXAuZ2V0Q2xhc3MoYk0pPT1kfHxiTSBpbnN0YW5jZW9mIFN0cmluZ3x8KCEhYk0mJiEhYk0uJCRpc1N0cmluZykpKTt9LGlzQXJyYXk6ZnVuY3Rpb24oYk4pe3JldHVybiAoYk4hPT1udWxsJiYoYk4gaW5zdGFuY2VvZiBBcnJheXx8KGJOJiZxeC5kYXRhJiZxeC5kYXRhLklMaXN0RGF0YSYmcXguQm9vdHN0cmFwLmhhc0ludGVyZmFjZShiTi5jb25zdHJ1Y3RvcixxeC5kYXRhLklMaXN0RGF0YSkpfHxxeC5Cb290c3RyYXAuZ2V0Q2xhc3MoYk4pPT1mfHwoISFiTiYmISFiTi4kJGlzQXJyYXkpKSk7fSxpc09iamVjdDpmdW5jdGlvbihiTyl7cmV0dXJuIChiTyE9PXVuZGVmaW5lZCYmYk8hPT1udWxsJiZxeC5Cb290c3RyYXAuZ2V0Q2xhc3MoYk8pPT1oKTt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYlApe3JldHVybiBxeC5Cb290c3RyYXAuZ2V0Q2xhc3MoYlApPT1jO30sY2xhc3NJc0RlZmluZWQ6ZnVuY3Rpb24obmFtZSl7cmV0dXJuIHF4LkJvb3RzdHJhcC5nZXRCeU5hbWUobmFtZSkhPT11bmRlZmluZWQ7fSxnZXRQcm9wZXJ0eURlZmluaXRpb246ZnVuY3Rpb24oYlEsbmFtZSl7d2hpbGUoYlEpe2lmKGJRLiQkcHJvcGVydGllcyYmYlEuJCRwcm9wZXJ0aWVzW25hbWVdKXtyZXR1cm4gYlEuJCRwcm9wZXJ0aWVzW25hbWVdO31iUT1iUS5zdXBlcmNsYXNzO31yZXR1cm4gbnVsbDt9LGhhc1Byb3BlcnR5OmZ1bmN0aW9uKGJSLG5hbWUpe3JldHVybiAhIXF4LkJvb3RzdHJhcC5nZXRQcm9wZXJ0eURlZmluaXRpb24oYlIsbmFtZSk7fSxnZXRFdmVudFR5cGU6ZnVuY3Rpb24oYlMsbmFtZSl7dmFyIGJTPWJTLmNvbnN0cnVjdG9yO3doaWxlKGJTLnN1cGVyY2xhc3Mpe2lmKGJTLiQkZXZlbnRzJiZiUy4kJGV2ZW50c1tuYW1lXSE9PXVuZGVmaW5lZCl7cmV0dXJuIGJTLiQkZXZlbnRzW25hbWVdO31iUz1iUy5zdXBlcmNsYXNzO31yZXR1cm4gbnVsbDt9LHN1cHBvcnRzRXZlbnQ6ZnVuY3Rpb24oYlQsbmFtZSl7cmV0dXJuICEhcXguQm9vdHN0cmFwLmdldEV2ZW50VHlwZShiVCxuYW1lKTt9LGdldEJ5SW50ZXJmYWNlOmZ1bmN0aW9uKGJVLGJWKXt2YXIgYlcsaSxsO3doaWxlKGJVKXtpZihiVS4kJGltcGxlbWVudHMpe2JXPWJVLiQkZmxhdEltcGxlbWVudHM7Zm9yKGk9MCxsPWJXLmxlbmd0aDtpPGw7aSsrKXtpZihiV1tpXT09PWJWKXtyZXR1cm4gYlU7fX19YlU9YlUuc3VwZXJjbGFzczt9cmV0dXJuIG51bGw7fSxoYXNJbnRlcmZhY2U6ZnVuY3Rpb24oYlgsYlkpe3JldHVybiAhIXF4LkJvb3RzdHJhcC5nZXRCeUludGVyZmFjZShiWCxiWSk7fSxnZXRNaXhpbnM6ZnVuY3Rpb24oY2Epe3ZhciBjYj1bXTt3aGlsZShjYSl7aWYoY2EuJCRpbmNsdWRlcyl7Y2IucHVzaC5hcHBseShjYixjYS4kJGZsYXRJbmNsdWRlcyk7fWNhPWNhLnN1cGVyY2xhc3M7fXJldHVybiBjYjt9LCQkbG9nczpbXSxkZWJ1ZzpmdW5jdGlvbihjYyxjZCl7cXguQm9vdHN0cmFwLiQkbG9ncy5wdXNoKFt6LGFyZ3VtZW50c10pO30saW5mbzpmdW5jdGlvbihjZSxjZil7cXguQm9vdHN0cmFwLiQkbG9ncy5wdXNoKFt0LGFyZ3VtZW50c10pO30sd2FybjpmdW5jdGlvbihjZyxjaCl7cXguQm9vdHN0cmFwLiQkbG9ncy5wdXNoKFtILGFyZ3VtZW50c10pO30sZXJyb3I6ZnVuY3Rpb24oY2ksY2ope3F4LkJvb3RzdHJhcC4kJGxvZ3MucHVzaChbdixhcmd1bWVudHNdKTt9LHRyYWNlOmZ1bmN0aW9uKGNrKXt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGc9InF4Lk1peGluIixmPSIucHJvdG90eXBlIixlPSJjb25zdHJ1Y3RvciIsZD0iW01peGluICIsYz0iXSIsYj0iZGVzdHJ1Y3QiLGE9Ik1peGluIjtxeC5Cb290c3RyYXAuZGVmaW5lKGcse3N0YXRpY3M6e2RlZmluZTpmdW5jdGlvbihuYW1lLGgpe2lmKGgpe2lmKGguaW5jbHVkZSYmIShoLmluY2x1ZGUgaW5zdGFuY2VvZiBBcnJheSkpe2guaW5jbHVkZT1baC5pbmNsdWRlXTt9e307dmFyIGs9aC5zdGF0aWNzP2guc3RhdGljczp7fTtxeC5Cb290c3RyYXAuc2V0RGlzcGxheU5hbWVzKGssbmFtZSk7Zm9yKHZhciBqIGluIGspe2lmKGtbal0gaW5zdGFuY2VvZiBGdW5jdGlvbil7a1tqXS4kJG1peGluPWs7fX1pZihoLmNvbnN0cnVjdCl7ay4kJGNvbnN0cnVjdG9yPWguY29uc3RydWN0O3F4LkJvb3RzdHJhcC5zZXREaXNwbGF5TmFtZShoLmNvbnN0cnVjdCxuYW1lLGUpO31pZihoLmluY2x1ZGUpe2suJCRpbmNsdWRlcz1oLmluY2x1ZGU7fWlmKGgucHJvcGVydGllcyl7ay4kJHByb3BlcnRpZXM9aC5wcm9wZXJ0aWVzO31pZihoLm1lbWJlcnMpe2suJCRtZW1iZXJzPWgubWVtYmVycztxeC5Cb290c3RyYXAuc2V0RGlzcGxheU5hbWVzKGgubWVtYmVycyxuYW1lK2YpO31mb3IodmFyIGogaW4gay4kJG1lbWJlcnMpe2lmKGsuJCRtZW1iZXJzW2pdIGluc3RhbmNlb2YgRnVuY3Rpb24pe2suJCRtZW1iZXJzW2pdLiQkbWl4aW49azt9fWlmKGguZXZlbnRzKXtrLiQkZXZlbnRzPWguZXZlbnRzO31pZihoLmRlc3RydWN0KXtrLiQkZGVzdHJ1Y3Rvcj1oLmRlc3RydWN0O3F4LkJvb3RzdHJhcC5zZXREaXNwbGF5TmFtZShoLmRlc3RydWN0LG5hbWUsYik7fX1lbHNle3ZhciBrPXt9O31rLiQkdHlwZT1hO2submFtZT1uYW1lO2sudG9TdHJpbmc9dGhpcy5nZW5lcmljVG9TdHJpbmc7ay5iYXNlbmFtZT1xeC5Cb290c3RyYXAuY3JlYXRlTmFtZXNwYWNlKG5hbWUsayk7dGhpcy4kJHJlZ2lzdHJ5W25hbWVdPWs7cmV0dXJuIGs7fSxjaGVja0NvbXBhdGliaWxpdHk6ZnVuY3Rpb24obSl7dmFyIHA9dGhpcy5mbGF0dGVuKG0pO3ZhciBxPXAubGVuZ3RoO2lmKHE8Mil7cmV0dXJuIHRydWU7fXZhciB0PXt9O3ZhciBzPXt9O3ZhciByPXt9O3ZhciBvO2Zvcih2YXIgaT0wO2k8cTtpKyspe289cFtpXTtmb3IodmFyIG4gaW4gby5ldmVudHMpe2lmKHJbbl0pe3Rocm93IG5ldyBFcnJvcignQ29uZmxpY3QgYmV0d2VlbiBtaXhpbiAiJytvLm5hbWUrJyIgYW5kICInK3Jbbl0rJyIgaW4gbWVtYmVyICInK24rJyIhJyk7fXJbbl09by5uYW1lO31mb3IodmFyIG4gaW4gby5wcm9wZXJ0aWVzKXtpZih0W25dKXt0aHJvdyBuZXcgRXJyb3IoJ0NvbmZsaWN0IGJldHdlZW4gbWl4aW4gIicrby5uYW1lKyciIGFuZCAiJyt0W25dKyciIGluIHByb3BlcnR5ICInK24rJyIhJyk7fXRbbl09by5uYW1lO31mb3IodmFyIG4gaW4gby5tZW1iZXJzKXtpZihzW25dKXt0aHJvdyBuZXcgRXJyb3IoJ0NvbmZsaWN0IGJldHdlZW4gbWl4aW4gIicrby5uYW1lKyciIGFuZCAiJytzW25dKyciIGluIG1lbWJlciAiJytuKyciIScpO31zW25dPW8ubmFtZTt9fXJldHVybiB0cnVlO30saXNDb21wYXRpYmxlOmZ1bmN0aW9uKHUsdil7dmFyIHc9cXguQm9vdHN0cmFwLmdldE1peGlucyh2KTt3LnB1c2godSk7cmV0dXJuIHF4Lk1peGluLmNoZWNrQ29tcGF0aWJpbGl0eSh3KTt9LGdldEJ5TmFtZTpmdW5jdGlvbihuYW1lKXtyZXR1cm4gdGhpcy4kJHJlZ2lzdHJ5W25hbWVdO30saXNEZWZpbmVkOmZ1bmN0aW9uKG5hbWUpe3JldHVybiB0aGlzLmdldEJ5TmFtZShuYW1lKSE9PXVuZGVmaW5lZDt9LGdldFRvdGFsTnVtYmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHF4LkJvb3RzdHJhcC5vYmplY3RHZXRMZW5ndGgodGhpcy4kJHJlZ2lzdHJ5KTt9LGZsYXR0ZW46ZnVuY3Rpb24oeCl7aWYoIXgpe3JldHVybiBbXTt9dmFyIHk9eC5jb25jYXQoKTtmb3IodmFyIGk9MCxsPXgubGVuZ3RoO2k8bDtpKyspe2lmKHhbaV0uJCRpbmNsdWRlcyl7eS5wdXNoLmFwcGx5KHksdGhpcy5mbGF0dGVuKHhbaV0uJCRpbmNsdWRlcykpO319cmV0dXJuIHk7fSxnZW5lcmljVG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gZCt0aGlzLm5hbWUrYzt9LCQkcmVnaXN0cnk6e30sX19lcjpudWxsLF9fZXM6ZnVuY3Rpb24oKXt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGg9InF4LmFsbG93VXJsU2V0dGluZ3MiLGc9IiYiLGY9InF4LmNvcmUuU2V0dGluZyIsZT0icXguYWxsb3dVcmxWYXJpYW50cyIsZD0icXgucHJvcGVydHlEZWJ1Z0xldmVsIixjPSJxeHNldHRpbmciLGI9IjoiLGE9Ii4iO3F4LkJvb3RzdHJhcC5kZWZpbmUoZix7c3RhdGljczp7X19ldTp7fSxkZWZpbmU6ZnVuY3Rpb24oaixrKXtpZihrPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0RlZmF1bHQgdmFsdWUgb2Ygc2V0dGluZyAiJytqKyciIG11c3QgYmUgZGVmaW5lZCEnKTt9aWYoIXRoaXMuX19ldVtqXSl7dGhpcy5fX2V1W2pdPXt9O31lbHNlIGlmKHRoaXMuX19ldVtqXS5kZWZhdWx0VmFsdWUhPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignU2V0dGluZyAiJytqKyciIGlzIGFscmVhZHkgZGVmaW5lZCEnKTt9dGhpcy5fX2V1W2pdLmRlZmF1bHRWYWx1ZT1rO30sZ2V0OmZ1bmN0aW9uKGwpe3ZhciBtPXRoaXMuX19ldVtsXTtpZihtPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1NldHRpbmcgIicrbCsnIiBpcyBub3QgZGVmaW5lZC4nKTt9aWYobS52YWx1ZSE9PXVuZGVmaW5lZCl7cmV0dXJuIG0udmFsdWU7fXJldHVybiBtLmRlZmF1bHRWYWx1ZTt9LHNldDpmdW5jdGlvbihuLG8pe2lmKChuLnNwbGl0KGEpKS5sZW5ndGg8Mil7dGhyb3cgbmV3IEVycm9yKCdNYWxmb3JtZWQgc2V0dGluZ3Mga2V5ICInK24rJyIuIE11c3QgYmUgZm9sbG93aW5nIHRoZSBzY2hlbWEgIm5hbWVzcGFjZS5rZXkiLicpO31pZighdGhpcy5fX2V1W25dKXt0aGlzLl9fZXVbbl09e307fXRoaXMuX19ldVtuXS52YWx1ZT1vO30sX19ldjpmdW5jdGlvbigpe2lmKHdpbmRvdy5xeHNldHRpbmdzKXtmb3IodmFyIHAgaW4gd2luZG93LnF4c2V0dGluZ3Mpe3RoaXMuc2V0KHAsd2luZG93LnF4c2V0dGluZ3NbcF0pO313aW5kb3cucXhzZXR0aW5ncz11bmRlZmluZWQ7dHJ5e2RlbGV0ZSB3aW5kb3cucXhzZXR0aW5nczt9Y2F0Y2gocSl7fXRoaXMuX19ldygpO319LF9fZXc6ZnVuY3Rpb24oKXtpZih0aGlzLmdldChoKSE9dHJ1ZSl7cmV0dXJuO312YXIgcz1kb2N1bWVudC5sb2NhdGlvbi5zZWFyY2guc2xpY2UoMSkuc3BsaXQoZyk7Zm9yKHZhciBpPTA7aTxzLmxlbmd0aDtpKyspe3ZhciByPXNbaV0uc3BsaXQoYik7aWYoci5sZW5ndGghPTN8fHJbMF0hPWMpe2NvbnRpbnVlO310aGlzLnNldChyWzFdLGRlY29kZVVSSUNvbXBvbmVudChyWzJdKSk7fX19LGRlZmVyOmZ1bmN0aW9uKHQpe3QuZGVmaW5lKGgsZmFsc2UpO3QuZGVmaW5lKGUsZmFsc2UpO3QuZGVmaW5lKGQsMCk7dC5fX2V2KCk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGg9ImZ1bmN0aW9uIixnPSJCb29sZWFuIixmPSJxeC5JbnRlcmZhY2UiLGU9Il0iLGQ9InRvZ2dsZSIsYz0iSW50ZXJmYWNlIixiPSJpcyIsYT0iW0ludGVyZmFjZSAiO3F4LkJvb3RzdHJhcC5kZWZpbmUoZix7c3RhdGljczp7ZGVmaW5lOmZ1bmN0aW9uKG5hbWUsail7aWYoail7aWYoai5leHRlbmQmJiEoai5leHRlbmQgaW5zdGFuY2VvZiBBcnJheSkpe2ouZXh0ZW5kPVtqLmV4dGVuZF07fXt9O3ZhciBrPWouc3RhdGljcz9qLnN0YXRpY3M6e307aWYoai5leHRlbmQpe2suJCRleHRlbmRzPWouZXh0ZW5kO31pZihqLnByb3BlcnRpZXMpe2suJCRwcm9wZXJ0aWVzPWoucHJvcGVydGllczt9aWYoai5tZW1iZXJzKXtrLiQkbWVtYmVycz1qLm1lbWJlcnM7fWlmKGouZXZlbnRzKXtrLiQkZXZlbnRzPWouZXZlbnRzO319ZWxzZXt2YXIgaz17fTt9ay4kJHR5cGU9YztrLm5hbWU9bmFtZTtrLnRvU3RyaW5nPXRoaXMuZ2VuZXJpY1RvU3RyaW5nO2suYmFzZW5hbWU9cXguQm9vdHN0cmFwLmNyZWF0ZU5hbWVzcGFjZShuYW1lLGspO3F4LkludGVyZmFjZS4kJHJlZ2lzdHJ5W25hbWVdPWs7cmV0dXJuIGs7fSxnZXRCeU5hbWU6ZnVuY3Rpb24obmFtZSl7cmV0dXJuIHRoaXMuJCRyZWdpc3RyeVtuYW1lXTt9LGlzRGVmaW5lZDpmdW5jdGlvbihuYW1lKXtyZXR1cm4gdGhpcy5nZXRCeU5hbWUobmFtZSkhPT11bmRlZmluZWQ7fSxnZXRUb3RhbE51bWJlcjpmdW5jdGlvbigpe3JldHVybiBxeC5Cb290c3RyYXAub2JqZWN0R2V0TGVuZ3RoKHRoaXMuJCRyZWdpc3RyeSk7fSxmbGF0dGVuOmZ1bmN0aW9uKG0pe2lmKCFtKXtyZXR1cm4gW107fXZhciBuPW0uY29uY2F0KCk7Zm9yKHZhciBpPTAsbD1tLmxlbmd0aDtpPGw7aSsrKXtpZihtW2ldLiQkZXh0ZW5kcyl7bi5wdXNoLmFwcGx5KG4sdGhpcy5mbGF0dGVuKG1baV0uJCRleHRlbmRzKSk7fX1yZXR1cm4gbjt9LF9fZkk6ZnVuY3Rpb24obyxwLHEscil7dmFyIHY9cS4kJG1lbWJlcnM7aWYodil7Zm9yKHZhciB1IGluIHYpe2lmKHF4LkJvb3RzdHJhcC5pc0Z1bmN0aW9uKHZbdV0pKXt2YXIgdD10aGlzLl9fZkoocCx1KTt2YXIgcz10fHxxeC5Cb290c3RyYXAuaXNGdW5jdGlvbihvW3VdKTtpZighcyl7dGhyb3cgbmV3IEVycm9yKCdJbXBsZW1lbnRhdGlvbiBvZiBtZXRob2QgIicrdSsnIiBpcyBtaXNzaW5nIGluIGNsYXNzICInK3AuY2xhc3NuYW1lKyciIHJlcXVpcmVkIGJ5IGludGVyZmFjZSAiJytxLm5hbWUrJyInKTt9dmFyIHc9cj09PXRydWUmJiF0JiYhcXguQm9vdHN0cmFwLmhhc0ludGVyZmFjZShwLHEpO2lmKHcpe29bdV09dGhpcy5fX2ZNKHEsb1t1XSx1LHZbdV0pO319ZWxzZXtpZih0eXBlb2Ygb1t1XT09PXVuZGVmaW5lZCl7aWYodHlwZW9mIG9bdV0hPT1oKXt0aHJvdyBuZXcgRXJyb3IoJ0ltcGxlbWVudGF0aW9uIG9mIG1lbWJlciAiJyt1KyciIGlzIG1pc3NpbmcgaW4gY2xhc3MgIicrcC5jbGFzc25hbWUrJyIgcmVxdWlyZWQgYnkgaW50ZXJmYWNlICInK3EubmFtZSsnIicpO319fX19fSxfX2ZKOmZ1bmN0aW9uKHgseSl7dmFyIEM9eS5tYXRjaCgvXihpc3x0b2dnbGV8Z2V0fHNldHxyZXNldCkoLiopJC8pO2lmKCFDKXtyZXR1cm4gZmFsc2U7fXZhciB6PXF4LkJvb3RzdHJhcC5maXJzdExvdyhDWzJdKTt2YXIgQT1xeC5Cb290c3RyYXAuZ2V0UHJvcGVydHlEZWZpbml0aW9uKHgseik7aWYoIUEpe3JldHVybiBmYWxzZTt9dmFyIEI9Q1swXT09Ynx8Q1swXT09ZDtpZihCKXtyZXR1cm4gcXguQm9vdHN0cmFwLmdldFByb3BlcnR5RGVmaW5pdGlvbih4LHopLmNoZWNrPT1nO31yZXR1cm4gdHJ1ZTt9LF9fZks6ZnVuY3Rpb24oRCxFKXtpZihFLiQkcHJvcGVydGllcyl7Zm9yKHZhciBGIGluIEUuJCRwcm9wZXJ0aWVzKXtpZighcXguQm9vdHN0cmFwLmdldFByb3BlcnR5RGVmaW5pdGlvbihELEYpKXt0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm9wZXJ0eSAiJytGKyciIGlzIG5vdCBzdXBwb3J0ZWQgYnkgQ2xhc3MgIicrRC5jbGFzc25hbWUrJyIhJyk7fX19fSxfX2ZMOmZ1bmN0aW9uKEcsSCl7aWYoSC4kJGV2ZW50cyl7Zm9yKHZhciBJIGluIEguJCRldmVudHMpe2lmKCFxeC5Cb290c3RyYXAuc3VwcG9ydHNFdmVudChHLEkpKXt0aHJvdyBuZXcgRXJyb3IoJ1RoZSBldmVudCAiJytJKyciIGlzIG5vdCBzdXBwb3J0ZWQgYnkgQ2xhc3MgIicrRy5jbGFzc25hbWUrJyIhJyk7fX19fSxhc3NlcnRPYmplY3Q6ZnVuY3Rpb24oSixLKXt2YXIgTT1KLmNvbnN0cnVjdG9yO3RoaXMuX19mSShKLE0sSyxmYWxzZSk7dGhpcy5fX2ZLKE0sSyk7dGhpcy5fX2ZMKE0sSyk7dmFyIEw9Sy4kJGV4dGVuZHM7aWYoTCl7Zm9yKHZhciBpPTAsbD1MLmxlbmd0aDtpPGw7aSsrKXt0aGlzLmFzc2VydE9iamVjdChKLExbaV0pO319fSxhc3NlcnQ6ZnVuY3Rpb24oTixPLFApe3RoaXMuX19mSShOLnByb3RvdHlwZSxOLE8sUCk7dGhpcy5fX2ZLKE4sTyk7dGhpcy5fX2ZMKE4sTyk7dmFyIFE9Ty4kJGV4dGVuZHM7aWYoUSl7Zm9yKHZhciBpPTAsbD1RLmxlbmd0aDtpPGw7aSsrKXt0aGlzLmFzc2VydChOLFFbaV0sUCk7fX19LGdlbmVyaWNUb1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBhK3RoaXMubmFtZStlO30sJCRyZWdpc3RyeTp7fSxfX2ZNOmZ1bmN0aW9uKCl7fSxfX2ZOOm51bGwsX19mTzpmdW5jdGlvbigpe319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZz0iZW11bGF0ZWQiLGY9Im5hdGl2ZSIsZT0nIicsZD0icXgubGFuZy5Db3JlIixjPSJcXFxcIixiPSJcXFwiIixhPSJbb2JqZWN0IEVycm9yXSI7cXguQm9vdHN0cmFwLmRlZmluZShkLHtzdGF0aWNzOntlcnJvclRvU3RyaW5nOnsibmF0aXZlIjpFcnJvci5wcm90b3R5cGUudG9TdHJpbmcsImVtdWxhdGVkIjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2U7fX1bKCFFcnJvci5wcm90b3R5cGUudG9TdHJpbmd8fEVycm9yLnByb3RvdHlwZS50b1N0cmluZygpPT1hKT9nOmZdLGFycmF5SW5kZXhPZjp7Im5hdGl2ZSI6QXJyYXkucHJvdG90eXBlLmluZGV4T2YsImVtdWxhdGVkIjpmdW5jdGlvbihoLGope2lmKGo9PW51bGwpe2o9MDt9ZWxzZSBpZihqPDApe2o9TWF0aC5tYXgoMCx0aGlzLmxlbmd0aCtqKTt9Zm9yKHZhciBpPWo7aTx0aGlzLmxlbmd0aDtpKyspe2lmKHRoaXNbaV09PT1oKXtyZXR1cm4gaTt9fXJldHVybiAtMTt9fVtBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9mOmddLGFycmF5TGFzdEluZGV4T2Y6eyJuYXRpdmUiOkFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiwiZW11bGF0ZWQiOmZ1bmN0aW9uKGssbSl7aWYobT09bnVsbCl7bT10aGlzLmxlbmd0aC0xO31lbHNlIGlmKG08MCl7bT1NYXRoLm1heCgwLHRoaXMubGVuZ3RoK20pO31mb3IodmFyIGk9bTtpPj0wO2ktLSl7aWYodGhpc1tpXT09PWspe3JldHVybiBpO319cmV0dXJuIC0xO319W0FycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZj9mOmddLGFycmF5Rm9yRWFjaDp7Im5hdGl2ZSI6QXJyYXkucHJvdG90eXBlLmZvckVhY2gsImVtdWxhdGVkIjpmdW5jdGlvbihuLG8pe3ZhciBsPXRoaXMubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bDtpKyspe3ZhciBwPXRoaXNbaV07aWYocCE9PXVuZGVmaW5lZCl7bi5jYWxsKG98fHdpbmRvdyxwLGksdGhpcyk7fX19fVtBcnJheS5wcm90b3R5cGUuZm9yRWFjaD9mOmddLGFycmF5RmlsdGVyOnsibmF0aXZlIjpBcnJheS5wcm90b3R5cGUuZmlsdGVyLCJlbXVsYXRlZCI6ZnVuY3Rpb24ocSxyKXt2YXIgcz1bXTt2YXIgbD10aGlzLmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7aSsrKXt2YXIgdD10aGlzW2ldO2lmKHQhPT11bmRlZmluZWQpe2lmKHEuY2FsbChyfHx3aW5kb3csdCxpLHRoaXMpKXtzLnB1c2godGhpc1tpXSk7fX19cmV0dXJuIHM7fX1bQXJyYXkucHJvdG90eXBlLmZpbHRlcj9mOmddLGFycmF5TWFwOnsibmF0aXZlIjpBcnJheS5wcm90b3R5cGUubWFwLCJlbXVsYXRlZCI6ZnVuY3Rpb24odSx2KXt2YXIgdz1bXTt2YXIgbD10aGlzLmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7aSsrKXt2YXIgeD10aGlzW2ldO2lmKHghPT11bmRlZmluZWQpe3dbaV09dS5jYWxsKHZ8fHdpbmRvdyx4LGksdGhpcyk7fX1yZXR1cm4gdzt9fVtBcnJheS5wcm90b3R5cGUubWFwP2Y6Z10sYXJyYXlTb21lOnsibmF0aXZlIjpBcnJheS5wcm90b3R5cGUuc29tZSwiZW11bGF0ZWQiOmZ1bmN0aW9uKHkseil7dmFyIGw9dGhpcy5sZW5ndGg7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIEE9dGhpc1tpXTtpZihBIT09dW5kZWZpbmVkKXtpZih5LmNhbGwoenx8d2luZG93LEEsaSx0aGlzKSl7cmV0dXJuIHRydWU7fX19cmV0dXJuIGZhbHNlO319W0FycmF5LnByb3RvdHlwZS5zb21lP2Y6Z10sYXJyYXlFdmVyeTp7Im5hdGl2ZSI6QXJyYXkucHJvdG90eXBlLmV2ZXJ5LCJlbXVsYXRlZCI6ZnVuY3Rpb24oQixDKXt2YXIgbD10aGlzLmxlbmd0aDtmb3IodmFyIGk9MDtpPGw7aSsrKXt2YXIgRD10aGlzW2ldO2lmKEQhPT11bmRlZmluZWQpe2lmKCFCLmNhbGwoQ3x8d2luZG93LEQsaSx0aGlzKSl7cmV0dXJuIGZhbHNlO319fXJldHVybiB0cnVlO319W0FycmF5LnByb3RvdHlwZS5ldmVyeT9mOmddLHN0cmluZ1F1b3RlOnsibmF0aXZlIjpTdHJpbmcucHJvdG90eXBlLnF1b3RlLCJlbXVsYXRlZCI6ZnVuY3Rpb24oKXtyZXR1cm4gZSt0aGlzLnJlcGxhY2UoL1xcL2csYykucmVwbGFjZSgvXCIvZyxiKStlO319W1N0cmluZy5wcm90b3R5cGUucXVvdGU/ZjpnXX19KTtFcnJvci5wcm90b3R5cGUudG9TdHJpbmc9cXgubGFuZy5Db3JlLmVycm9yVG9TdHJpbmc7QXJyYXkucHJvdG90eXBlLmluZGV4T2Y9cXgubGFuZy5Db3JlLmFycmF5SW5kZXhPZjtBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2Y9cXgubGFuZy5Db3JlLmFycmF5TGFzdEluZGV4T2Y7QXJyYXkucHJvdG90eXBlLmZvckVhY2g9cXgubGFuZy5Db3JlLmFycmF5Rm9yRWFjaDtBcnJheS5wcm90b3R5cGUuZmlsdGVyPXF4LmxhbmcuQ29yZS5hcnJheUZpbHRlcjtBcnJheS5wcm90b3R5cGUubWFwPXF4LmxhbmcuQ29yZS5hcnJheU1hcDtBcnJheS5wcm90b3R5cGUuc29tZT1xeC5sYW5nLkNvcmUuYXJyYXlTb21lO0FycmF5LnByb3RvdHlwZS5ldmVyeT1xeC5sYW5nLkNvcmUuYXJyYXlFdmVyeTtTdHJpbmcucHJvdG90eXBlLnF1b3RlPXF4LmxhbmcuQ29yZS5zdHJpbmdRdW90ZTt9KSgpOyhmdW5jdGlvbigpe3ZhciBjdj0nOycsY3U9J2NvbXB1dGVkPXRoaXMuJyxjdD0nPXZhbHVlOycsY3M9J3RoaXMuJyxjcj0ic2V0IixjcT0ic2V0VGhlbWVkIixjcD0ic2V0UnVudGltZSIsY289ImluaXQiLGNuPSdpZih0aGlzLicsY209J2RlbGV0ZSB0aGlzLicsYnc9JyE9PXVuZGVmaW5lZCknLGJ2PSd9JyxidT0icmVzZXRUaGVtZWQiLGJ0PSdlbHNlIGlmKHRoaXMuJyxicz0ic3RyaW5nIixicj0ncmV0dXJuIHRoaXMuJyxicT0icmVzZXQiLGJwPSJib29sZWFuIixibz0icmVzZXRSdW50aW1lIixibj0nIT09dW5kZWZpbmVkKXsnLGNDPSIiLGNEPSJyZWZyZXNoIixjQT0nPXRydWU7JyxjQj0idGhpcy4iLGN5PSI7Iixjej0nb2xkPXRoaXMuJyxjdz0iKCk7IixjeD0nZWxzZSAnLGNFPSdpZihvbGQ9PT11bmRlZmluZWQpb2xkPXRoaXMuJyxjRj0nb2xkPWNvbXB1dGVkPXRoaXMuJyxiVT0icmV0dXJuIHRoaXMuIixiVD0iZ2V0IixiVz0nKHZhbHVlKTsnLGJWPSIoYVsiLGJZPSdpZihvbGQ9PT1jb21wdXRlZClyZXR1cm4gdmFsdWU7JyxiWD0naWYob2xkPT09dW5kZWZpbmVkKW9sZD1udWxsOycsY2I9JyBvZiBhbiBpbnN0YW5jZSBvZiAnLGNhPScgaXMgbm90ICh5ZXQpIHJlYWR5ISIpOycsYlM9Il0pOyIsYlI9JyE9PWluaGVyaXQpeycsYz0ncXgubGFuZy5UeXBlLmlzU3RyaW5nKHZhbHVlKSAmJiBxeC51dGlsLkNvbG9yVXRpbC5pc1ZhbGlkUHJvcGVydHlWYWx1ZSh2YWx1ZSknLGQ9J3ZhbHVlICE9PSBudWxsICYmIHF4LnRoZW1lLm1hbmFnZXIuRm9udC5nZXRJbnN0YW5jZSgpLmlzRHluYW1pYyh2YWx1ZSknLGU9J3ZhbHVlICE9PSBudWxsICYmIHZhbHVlLm5vZGVUeXBlID09PSA5ICYmIHZhbHVlLmRvY3VtZW50RWxlbWVudCcsZj0nPT09dmFsdWUpcmV0dXJuIHZhbHVlOycsZz0ndmFsdWUgIT09IG51bGwgJiYgdmFsdWUuJCR0eXBlID09PSAiTWl4aW4iJyxoPSdyZXR1cm4gaW5pdDsnLGo9J3ZhciBpbml0PXRoaXMuJyxrPSd2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZS5ub2RlVHlwZSA9PT0gMSAmJiB2YWx1ZS5hdHRyaWJ1dGVzJyxtPSJ2YXIgcGFyZW50ID0gdGhpcy5nZXRMYXlvdXRQYXJlbnQoKTsiLG49IkVycm9yIGluIHByb3BlcnR5ICIsY1Q9J3ZhciBhPXRoaXMuX2dldENoaWxkcmVuKCk7aWYoYSlmb3IodmFyIGk9MCxsPWEubGVuZ3RoO2k8bDtpKyspeycsY1M9Jy52YWxpZGF0ZS5jYWxsKHRoaXMsIHZhbHVlKTsnLGNSPSdxeC5jb3JlLkFzc2VydC5hc3NlcnRJbnN0YW5jZSh2YWx1ZSwgRGF0ZSwgbXNnKSB8fCB0cnVlJyxjUT0nZWxzZXsnLGNYPSJpZiAoIXBhcmVudCkgcmV0dXJuOyIsY1c9IiBpbiBtZXRob2QgIixjVj0ncXguY29yZS5Bc3NlcnQuYXNzZXJ0SW5zdGFuY2UodmFsdWUsIEVycm9yLCBtc2cpIHx8IHRydWUnLGNVPSc9Y29tcHV0ZWQ7JyxkYT0nVW5kZWZpbmVkIHZhbHVlIGlzIG5vdCBhbGxvd2VkIScsY1k9JyhiYWNrdXApOycsTT0iTVNJRSA2LjAiLE49J2lmKGNvbXB1dGVkPT09aW5oZXJpdCl7JyxLPSJpbmhlcml0IixMPSdJcyBpbnZhbGlkIScsUT0naWYodmFsdWU9PT11bmRlZmluZWQpcHJvcC5lcnJvcih0aGlzLDIsIicsUj0ndmFyIGNvbXB1dGVkLCBvbGQ9dGhpcy4nLE89J2Vsc2UgaWYoY29tcHV0ZWQ9PT11bmRlZmluZWQpJyxQPSInOiAiLEk9IiBvZiBjbGFzcyAiLEo9J3ZhbHVlICE9PSBudWxsICYmIHZhbHVlLm5vZGVUeXBlICE9PSB1bmRlZmluZWQnLHY9Jz09PXVuZGVmaW5lZClyZXR1cm47Jyx1PSd2YWx1ZSAhPT0gbnVsbCAmJiBxeC50aGVtZS5tYW5hZ2VyLkRlY29yYXRpb24uZ2V0SW5zdGFuY2UoKS5pc1ZhbGlkUHJvcGVydHlWYWx1ZSh2YWx1ZSknLHg9IicpKXsiLHc9J3F4LmNvcmUuQXNzZXJ0LmFzc2VydFBvc2l0aXZlSW50ZWdlcih2YWx1ZSwgbXNnKSB8fCB0cnVlJyxyPSdlbHNlIHRoaXMuJyxxPSd2YWx1ZT10aGlzLicsdD0nIiwiJyxzPSdpZihpbml0PT1xeC5jb3JlLlByb3BlcnR5LiQkaW5oZXJpdClpbml0PW51bGw7JyxwPSd2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZS4kJHR5cGUgPT09ICJJbnRlcmZhY2UiJyxvPSd2YXIgaW5oZXJpdD1wcm9wLiQkaW5oZXJpdDsnLFc9IicsIHF4LmV2ZW50LnR5cGUuRGF0YSwgW2NvbXB1dGVkLCBvbGRdIixYPSJ2YXIgdmFsdWUgPSBwYXJlbnQuIixZPSIkJHVzZWluaXRfIixiYT0nY29tcHV0ZWQ9dW5kZWZpbmVkO2RlbGV0ZSB0aGlzLicsUz0iKHZhbHVlKTsiLFQ9J1JlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50IScsVT0nIix2YWx1ZSk7JyxWPSdjb21wdXRlZD12YWx1ZTsnLGJiPSIkJHJ1bnRpbWVfIixiYz0nO30nLEY9IiQkdXNlcl8iLEU9Jyl7JyxEPSdxeC5jb3JlLkFzc2VydC5hc3NlcnRBcnJheSh2YWx1ZSwgbXNnKSB8fCB0cnVlJyxDPSdpZihjb21wdXRlZD09PXVuZGVmaW5lZHx8Y29tcHV0ZWQ9PT1pbmhlcml0KXsnLEI9J3F4LmNvcmUuQXNzZXJ0LmFzc2VydFBvc2l0aXZlTnVtYmVyKHZhbHVlLCBtc2cpIHx8IHRydWUnLEE9Ii5wcm90b3R5cGUiLHo9IkJvb2xlYW4iLHk9Iil9IixIPScoY29tcHV0ZWQsIG9sZCwgIicsRz0ncmV0dXJuIHZhbHVlOycsYmQ9J2lmKGluaXQ9PXF4LmNvcmUuUHJvcGVydHkuJCRpbmhlcml0KXRocm93IG5ldyBFcnJvcigiSW5oZXJpdGFibGUgcHJvcGVydHkgJyxiZT0iaWYocmVnLmhhc0xpc3RlbmVyKHRoaXMsICciLGJmPSdEb2VzIG5vdCBhbGxvdyBhbnkgYXJndW1lbnRzIScsYmc9JylhW2ldLicsYmg9IigpIixiaT0idmFyIGE9YXJndW1lbnRzWzBdIGluc3RhbmNlb2YgQXJyYXk/YXJndW1lbnRzWzBdOmFyZ3VtZW50czsiLGJqPScuJCRwcm9wZXJ0aWVzLicsYms9J3ZhbHVlICE9PSBudWxsICYmIHZhbHVlLiQkdHlwZSA9PT0gIlRoZW1lIicsYmw9InZhciByZWc9cXguZXZlbnQuUmVnaXN0cmF0aW9uOyIsYm09IigpKSIsYkE9J3JldHVybiBudWxsOycsYno9J3F4LmNvcmUuQXNzZXJ0LmFzc2VydE9iamVjdCh2YWx1ZSwgbXNnKSB8fCB0cnVlJyxieT0nIik7JyxieD0ncXguY29yZS5Bc3NlcnQuYXNzZXJ0U3RyaW5nKHZhbHVlLCBtc2cpIHx8IHRydWUnLGJFPSd2YXIgcGE9dGhpcy5nZXRMYXlvdXRQYXJlbnQoKTtpZihwYSljb21wdXRlZD1wYS4nLGJEPSJpZiAodmFsdWU9PT11bmRlZmluZWQpIHZhbHVlID0gcGFyZW50LiIsYkM9J3ZhbHVlICE9PSBudWxsICYmIHZhbHVlLiQkdHlwZSA9PT0gIkNsYXNzIicsYkI9J3F4LmNvcmUuQXNzZXJ0LmFzc2VydEZ1bmN0aW9uKHZhbHVlLCBtc2cpIHx8IHRydWUnLGJHPSchPT11bmRlZmluZWQmJicsYkY9J3ZhciBjb21wdXRlZCwgb2xkOycsYk49J3ZhciBiYWNrdXA9Y29tcHV0ZWQ7JyxiTz0nfWVsc2V7JyxiTD0ib2JqZWN0IixiTT0iJCRpbml0XyIsYko9IiQkdGhlbWVfIixiSz0naWYoY29tcHV0ZWQ9PT11bmRlZmluZWQpY29tcHV0ZWQ9bnVsbDsnLGJIPSdxeC5jb3JlLkFzc2VydC5hc3NlcnRNYXAodmFsdWUsIG1zZykgfHwgdHJ1ZScsYkk9J3F4LmNvcmUuQXNzZXJ0LmFzc2VydE51bWJlcih2YWx1ZSwgbXNnKSB8fCB0cnVlJyxiUD0naWYoKGNvbXB1dGVkPT09dW5kZWZpbmVkfHxjb21wdXRlZD09PWluaGVyaXQpJiYnLGJRPSJyZWcuZmlyZUV2ZW50KHRoaXMsICciLGNmPSdOdWxsIHZhbHVlIGlzIG5vdCBhbGxvd2VkIScsY2U9J3F4LmNvcmUuQXNzZXJ0LmFzc2VydEludGVnZXIodmFsdWUsIG1zZykgfHwgdHJ1ZScsY2g9InZhbHVlIixjZz0icnY6MS44LjEiLGNqPSJzaG9ydGhhbmQiLGNpPSdxeC5jb3JlLkFzc2VydC5hc3NlcnRJbnN0YW5jZSh2YWx1ZSwgUmVnRXhwLCBtc2cpIHx8IHRydWUnLGNsPSd2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZS50eXBlICE9PSB1bmRlZmluZWQnLGNrPSd2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZS5kb2N1bWVudCcsY2Q9J3Rocm93IG5ldyBFcnJvcigiUHJvcGVydHkgJyxjYz0iKCF0aGlzLiIsY009J3F4LmNvcmUuQXNzZXJ0LmFzc2VydEJvb2xlYW4odmFsdWUsIG1zZykgfHwgdHJ1ZScsY049J2lmKGFbaV0uJyxjTz0idG9nZ2xlIixjUD0iJCRpbmhlcml0XyIsY0k9J3ZhciBwcm9wPXF4LmNvcmUuUHJvcGVydHk7JyxjSj0iIHdpdGggaW5jb21pbmcgdmFsdWUgJyIsY0s9ImE9cXgubGFuZy5BcnJheS5mcm9tU2hvcnRIYW5kKHF4LmxhbmcuQXJyYXkuZnJvbUFyZ3VtZW50cyhhKSk7IixjTD0naWYoY29tcHV0ZWQ9PT11bmRlZmluZWR8fGNvbXB1dGVkPT1pbmhlcml0KWNvbXB1dGVkPW51bGw7JyxjRz0icXguY29yZS5Qcm9wZXJ0eSIsY0g9ImlzIixiPSdDb3VsZCBub3QgY2hhbmdlIG9yIGFwcGx5IGluaXQgdmFsdWUgYWZ0ZXIgY29uc3RydWN0aW5nIHBoYXNlISc7cXguQm9vdHN0cmFwLmRlZmluZShjRyx7c3RhdGljczp7X19sRjp7IkJvb2xlYW4iOmNNLCJTdHJpbmciOmJ4LCJOdW1iZXIiOmJJLCJJbnRlZ2VyIjpjZSwiUG9zaXRpdmVOdW1iZXIiOkIsIlBvc2l0aXZlSW50ZWdlciI6dywiRXJyb3IiOmNWLCJSZWdFeHAiOmNpLCJPYmplY3QiOmJ6LCJBcnJheSI6RCwiTWFwIjpiSCwiRnVuY3Rpb24iOmJCLCJEYXRlIjpjUiwiTm9kZSI6SiwiRWxlbWVudCI6aywiRG9jdW1lbnQiOmUsIldpbmRvdyI6Y2ssIkV2ZW50IjpjbCwiQ2xhc3MiOmJDLCJNaXhpbiI6ZywiSW50ZXJmYWNlIjpwLCJUaGVtZSI6YmssIkNvbG9yIjpjLCJEZWNvcmF0b3IiOnUsIkZvbnQiOmR9LF9fbEc6eyJOb2RlIjp0cnVlLCJFbGVtZW50Ijp0cnVlLCJEb2N1bWVudCI6dHJ1ZSwiV2luZG93Ijp0cnVlLCJFdmVudCI6dHJ1ZX0sJCRpbmhlcml0OkssJCRzdG9yZTp7cnVudGltZTp7fSx1c2VyOnt9LHRoZW1lOnt9LGluaGVyaXQ6e30saW5pdDp7fSx1c2Vpbml0Ont9fSwkJG1ldGhvZDp7Z2V0Ont9LHNldDp7fSxyZXNldDp7fSxpbml0Ont9LHJlZnJlc2g6e30sc2V0UnVudGltZTp7fSxyZXNldFJ1bnRpbWU6e30sc2V0VGhlbWVkOnt9LHJlc2V0VGhlbWVkOnt9fSwkJGFsbG93ZWRLZXlzOntuYW1lOmJzLGRlcmVmZXJlbmNlOmJwLGluaGVyaXRhYmxlOmJwLG51bGxhYmxlOmJwLHRoZW1lYWJsZTpicCxyZWZpbmU6YnAsaW5pdDpudWxsLGFwcGx5OmJzLGV2ZW50OmJzLGNoZWNrOm51bGwsdHJhbnNmb3JtOmJzLGRlZmVycmVkSW5pdDpicCx2YWxpZGF0ZTpudWxsfSwkJGFsbG93ZWRHcm91cEtleXM6e25hbWU6YnMsZ3JvdXA6YkwsbW9kZTpicyx0aGVtZWFibGU6YnB9LCQkaW5oZXJpdGFibGU6e30sX19sSDpmdW5jdGlvbihkYil7dmFyIGRjPXRoaXMuX19sSShkYik7aWYoIWRjLmxlbmd0aCl7dmFyIGRkPXF4LmxhbmcuRnVuY3Rpb24uZW1wdHk7fWVsc2V7ZGQ9dGhpcy5fX2xKKGRjKTt9ZGIucHJvdG90eXBlLiQkcmVmcmVzaEluaGVyaXRhYmxlcz1kZDt9LF9fbEk6ZnVuY3Rpb24oZGUpe3ZhciBkZz1bXTt3aGlsZShkZSl7dmFyIGRmPWRlLiQkcHJvcGVydGllcztpZihkZil7Zm9yKHZhciBuYW1lIGluIHRoaXMuJCRpbmhlcml0YWJsZSl7aWYoZGZbbmFtZV0mJmRmW25hbWVdLmluaGVyaXRhYmxlKXtkZy5wdXNoKG5hbWUpO319fWRlPWRlLnN1cGVyY2xhc3M7fXJldHVybiBkZzt9LF9fbEo6ZnVuY3Rpb24oZGgpe3ZhciBkbD10aGlzLiQkc3RvcmUuaW5oZXJpdDt2YXIgZGs9dGhpcy4kJHN0b3JlLmluaXQ7dmFyIGRqPXRoaXMuJCRtZXRob2QucmVmcmVzaDt2YXIgZGk9W20sY1hdO2Zvcih2YXIgaT0wLGw9ZGgubGVuZ3RoO2k8bDtpKyspe3ZhciBuYW1lPWRoW2ldO2RpLnB1c2goWCxkbFtuYW1lXSxjeSxiRCxka1tuYW1lXSxjeSxjQixkaltuYW1lXSxTKTt9cmV0dXJuIG5ldyBGdW5jdGlvbihkaS5qb2luKGNDKSk7fSxhdHRhY2hSZWZyZXNoSW5oZXJpdGFibGVzOmZ1bmN0aW9uKGRtKXtkbS5wcm90b3R5cGUuJCRyZWZyZXNoSW5oZXJpdGFibGVzPWZ1bmN0aW9uKCl7cXguY29yZS5Qcm9wZXJ0eS5fX2xIKGRtKTtyZXR1cm4gdGhpcy4kJHJlZnJlc2hJbmhlcml0YWJsZXMoKTt9O30sYXR0YWNoTWV0aG9kczpmdW5jdGlvbihkbixuYW1lLGRwKXtkcC5ncm91cD90aGlzLl9fbEsoZG4sZHAsbmFtZSk6dGhpcy5fX2xMKGRuLGRwLG5hbWUpO30sX19sSzpmdW5jdGlvbihkcSxkcixuYW1lKXt2YXIgZHk9cXguQm9vdHN0cmFwLmZpcnN0VXAobmFtZSk7dmFyIGR4PWRxLnByb3RvdHlwZTt2YXIgZHo9ZHIudGhlbWVhYmxlPT09dHJ1ZTt7fTt2YXIgZEE9W107dmFyIGR1PVtdO2lmKGR6KXt2YXIgZHM9W107dmFyIGR3PVtdO312YXIgZHY9Ymk7ZEEucHVzaChkdik7aWYoZHope2RzLnB1c2goZHYpO31pZihkci5tb2RlPT1jail7dmFyIGR0PWNLO2RBLnB1c2goZHQpO2lmKGR6KXtkcy5wdXNoKGR0KTt9fWZvcih2YXIgaT0wLGE9ZHIuZ3JvdXAsbD1hLmxlbmd0aDtpPGw7aSsrKXt7fTtkQS5wdXNoKGNCLHRoaXMuJCRtZXRob2Quc2V0W2FbaV1dLGJWLGksYlMpO2R1LnB1c2goY0IsdGhpcy4kJG1ldGhvZC5yZXNldFthW2ldXSxjdyk7aWYoZHope3t9O2RzLnB1c2goY0IsdGhpcy4kJG1ldGhvZC5zZXRUaGVtZWRbYVtpXV0sYlYsaSxiUyk7ZHcucHVzaChjQix0aGlzLiQkbWV0aG9kLnJlc2V0VGhlbWVkW2FbaV1dLGN3KTt9fXRoaXMuJCRtZXRob2Quc2V0W25hbWVdPWNyK2R5O2R4W3RoaXMuJCRtZXRob2Quc2V0W25hbWVdXT1uZXcgRnVuY3Rpb24oZEEuam9pbihjQykpO3RoaXMuJCRtZXRob2QucmVzZXRbbmFtZV09YnErZHk7ZHhbdGhpcy4kJG1ldGhvZC5yZXNldFtuYW1lXV09bmV3IEZ1bmN0aW9uKGR1LmpvaW4oY0MpKTtpZihkeil7dGhpcy4kJG1ldGhvZC5zZXRUaGVtZWRbbmFtZV09Y3ErZHk7ZHhbdGhpcy4kJG1ldGhvZC5zZXRUaGVtZWRbbmFtZV1dPW5ldyBGdW5jdGlvbihkcy5qb2luKGNDKSk7dGhpcy4kJG1ldGhvZC5yZXNldFRoZW1lZFtuYW1lXT1idStkeTtkeFt0aGlzLiQkbWV0aG9kLnJlc2V0VGhlbWVkW25hbWVdXT1uZXcgRnVuY3Rpb24oZHcuam9pbihjQykpO319LF9fbEw6ZnVuY3Rpb24oZEIsZEMsbmFtZSl7dmFyIGRFPXF4LkJvb3RzdHJhcC5maXJzdFVwKG5hbWUpO3ZhciBkRz1kQi5wcm90b3R5cGU7e307aWYoZEMuZGVyZWZlcmVuY2U9PT11bmRlZmluZWQmJnR5cGVvZiBkQy5jaGVjaz09PWJzKXtkQy5kZXJlZmVyZW5jZT10aGlzLl9fbE0oZEMuY2hlY2spO312YXIgZEY9dGhpcy4kJG1ldGhvZDt2YXIgZEQ9dGhpcy4kJHN0b3JlO2RELnJ1bnRpbWVbbmFtZV09YmIrbmFtZTtkRC51c2VyW25hbWVdPUYrbmFtZTtkRC50aGVtZVtuYW1lXT1iSituYW1lO2RELmluaXRbbmFtZV09Yk0rbmFtZTtkRC5pbmhlcml0W25hbWVdPWNQK25hbWU7ZEQudXNlaW5pdFtuYW1lXT1ZK25hbWU7ZEYuZ2V0W25hbWVdPWJUK2RFO2RHW2RGLmdldFtuYW1lXV09ZnVuY3Rpb24oKXtyZXR1cm4gcXguY29yZS5Qcm9wZXJ0eS5leGVjdXRlT3B0aW1pemVkR2V0dGVyKHRoaXMsZEIsbmFtZSxiVCk7fTtkRi5zZXRbbmFtZV09Y3IrZEU7ZEdbZEYuc2V0W25hbWVdXT1mdW5jdGlvbihkSCl7cmV0dXJuIHF4LmNvcmUuUHJvcGVydHkuZXhlY3V0ZU9wdGltaXplZFNldHRlcih0aGlzLGRCLG5hbWUsY3IsYXJndW1lbnRzKTt9O2RGLnJlc2V0W25hbWVdPWJxK2RFO2RHW2RGLnJlc2V0W25hbWVdXT1mdW5jdGlvbigpe3JldHVybiBxeC5jb3JlLlByb3BlcnR5LmV4ZWN1dGVPcHRpbWl6ZWRTZXR0ZXIodGhpcyxkQixuYW1lLGJxKTt9O2lmKGRDLmluaGVyaXRhYmxlfHxkQy5hcHBseXx8ZEMuZXZlbnR8fGRDLmRlZmVycmVkSW5pdCl7ZEYuaW5pdFtuYW1lXT1jbytkRTtkR1tkRi5pbml0W25hbWVdXT1mdW5jdGlvbihkSSl7cmV0dXJuIHF4LmNvcmUuUHJvcGVydHkuZXhlY3V0ZU9wdGltaXplZFNldHRlcih0aGlzLGRCLG5hbWUsY28sYXJndW1lbnRzKTt9O31pZihkQy5pbmhlcml0YWJsZSl7ZEYucmVmcmVzaFtuYW1lXT1jRCtkRTtkR1tkRi5yZWZyZXNoW25hbWVdXT1mdW5jdGlvbihkSil7cmV0dXJuIHF4LmNvcmUuUHJvcGVydHkuZXhlY3V0ZU9wdGltaXplZFNldHRlcih0aGlzLGRCLG5hbWUsY0QsYXJndW1lbnRzKTt9O31kRi5zZXRSdW50aW1lW25hbWVdPWNwK2RFO2RHW2RGLnNldFJ1bnRpbWVbbmFtZV1dPWZ1bmN0aW9uKGRLKXtyZXR1cm4gcXguY29yZS5Qcm9wZXJ0eS5leGVjdXRlT3B0aW1pemVkU2V0dGVyKHRoaXMsZEIsbmFtZSxjcCxhcmd1bWVudHMpO307ZEYucmVzZXRSdW50aW1lW25hbWVdPWJvK2RFO2RHW2RGLnJlc2V0UnVudGltZVtuYW1lXV09ZnVuY3Rpb24oKXtyZXR1cm4gcXguY29yZS5Qcm9wZXJ0eS5leGVjdXRlT3B0aW1pemVkU2V0dGVyKHRoaXMsZEIsbmFtZSxibyk7fTtpZihkQy50aGVtZWFibGUpe2RGLnNldFRoZW1lZFtuYW1lXT1jcStkRTtkR1tkRi5zZXRUaGVtZWRbbmFtZV1dPWZ1bmN0aW9uKGRMKXtyZXR1cm4gcXguY29yZS5Qcm9wZXJ0eS5leGVjdXRlT3B0aW1pemVkU2V0dGVyKHRoaXMsZEIsbmFtZSxjcSxhcmd1bWVudHMpO307ZEYucmVzZXRUaGVtZWRbbmFtZV09YnUrZEU7ZEdbZEYucmVzZXRUaGVtZWRbbmFtZV1dPWZ1bmN0aW9uKCl7cmV0dXJuIHF4LmNvcmUuUHJvcGVydHkuZXhlY3V0ZU9wdGltaXplZFNldHRlcih0aGlzLGRCLG5hbWUsYnUpO307fWlmKGRDLmNoZWNrPT09eil7ZEdbY08rZEVdPW5ldyBGdW5jdGlvbihiVStkRi5zZXRbbmFtZV0rY2MrZEYuZ2V0W25hbWVdK2JtKTtkR1tjSCtkRV09bmV3IEZ1bmN0aW9uKGJVK2RGLmdldFtuYW1lXStiaCk7fX0sX19sTTpmdW5jdGlvbihkTSl7cmV0dXJuICEhdGhpcy5fX2xHW2RNXTt9LF9fbE46ZnVuY3Rpb24oZE4pe3JldHVybiB0aGlzLl9fbEdbZE5dfHxxeC5Cb290c3RyYXAuY2xhc3NJc0RlZmluZWQoZE4pfHwocXguSW50ZXJmYWNlJiZxeC5JbnRlcmZhY2UuaXNEZWZpbmVkKGROKSk7fSxfX2xPOnswOmIsMTpULDI6ZGEsMzpiZiw0OmNmLDU6TH0sZXJyb3I6ZnVuY3Rpb24oZE8sZFAsZFEsZFIsZFMpe3ZhciBkVD1kTy5jb25zdHJ1Y3Rvci5jbGFzc25hbWU7dmFyIGRVPW4rZFErSStkVCtjVyt0aGlzLiQkbWV0aG9kW2RSXVtkUV0rY0orZFMrUDt0aHJvdyBuZXcgRXJyb3IoZFUrKHRoaXMuX19sT1tkUF18fCJVbmtub3duIHJlYXNvbjogIitkUCkpO30sX19sUDpmdW5jdGlvbihkVixkVyxuYW1lLGRYLGRZLGVhKXt2YXIgZWI9dGhpcy4kJG1ldGhvZFtkWF1bbmFtZV07e2RXW2ViXT1uZXcgRnVuY3Rpb24oY2gsZFkuam9pbihjQykpO307e307cXguQm9vdHN0cmFwLnNldERpc3BsYXlOYW1lKGRXW2ViXSxkVi5jbGFzc25hbWUrQSxlYik7aWYoZWE9PT11bmRlZmluZWQpe3JldHVybiBkVltlYl0oKTt9ZWxzZXtyZXR1cm4gZFZbZWJdKGVhWzBdKTt9fSxleGVjdXRlT3B0aW1pemVkR2V0dGVyOmZ1bmN0aW9uKGVjLGVkLG5hbWUsZWUpe3ZhciBlZz1lZC4kJHByb3BlcnRpZXNbbmFtZV07dmFyIGVpPWVkLnByb3RvdHlwZTt2YXIgZWY9W107dmFyIGVoPXRoaXMuJCRzdG9yZTtlZi5wdXNoKGNuLGVoLnJ1bnRpbWVbbmFtZV0sYncpO2VmLnB1c2goYnIsZWgucnVudGltZVtuYW1lXSxjdik7aWYoZWcuaW5oZXJpdGFibGUpe2VmLnB1c2goYnQsZWguaW5oZXJpdFtuYW1lXSxidyk7ZWYucHVzaChicixlaC5pbmhlcml0W25hbWVdLGN2KTtlZi5wdXNoKGN4KTt9ZWYucHVzaChjbixlaC51c2VyW25hbWVdLGJ3KTtlZi5wdXNoKGJyLGVoLnVzZXJbbmFtZV0sY3YpO2lmKGVnLnRoZW1lYWJsZSl7ZWYucHVzaChidCxlaC50aGVtZVtuYW1lXSxidyk7ZWYucHVzaChicixlaC50aGVtZVtuYW1lXSxjdik7fWlmKGVnLmRlZmVycmVkSW5pdCYmZWcuaW5pdD09PXVuZGVmaW5lZCl7ZWYucHVzaChidCxlaC5pbml0W25hbWVdLGJ3KTtlZi5wdXNoKGJyLGVoLmluaXRbbmFtZV0sY3YpO31lZi5wdXNoKGN4KTtpZihlZy5pbml0IT09dW5kZWZpbmVkKXtpZihlZy5pbmhlcml0YWJsZSl7ZWYucHVzaChqLGVoLmluaXRbbmFtZV0sY3YpO2lmKGVnLm51bGxhYmxlKXtlZi5wdXNoKHMpO31lbHNlIGlmKGVnLmluaXQhPT11bmRlZmluZWQpe2VmLnB1c2goYnIsZWguaW5pdFtuYW1lXSxjdik7fWVsc2V7ZWYucHVzaChiZCxuYW1lLGNiLGVkLmNsYXNzbmFtZSxjYSk7fWVmLnB1c2goaCk7fWVsc2V7ZWYucHVzaChicixlaC5pbml0W25hbWVdLGN2KTt9fWVsc2UgaWYoZWcuaW5oZXJpdGFibGV8fGVnLm51bGxhYmxlKXtlZi5wdXNoKGJBKTt9ZWxzZXtlZi5wdXNoKGNkLG5hbWUsY2IsZWQuY2xhc3NuYW1lLGNhKTt9cmV0dXJuIHRoaXMuX19sUChlYyxlaSxuYW1lLGVlLGVmKTt9LGV4ZWN1dGVPcHRpbWl6ZWRTZXR0ZXI6ZnVuY3Rpb24oZWosZWssbmFtZSxlbCxlbSl7dmFyIGVyPWVrLiQkcHJvcGVydGllc1tuYW1lXTt2YXIgZXE9ZWsucHJvdG90eXBlO3ZhciBlbz1bXTt2YXIgZW49ZWw9PT1jcnx8ZWw9PT1jcXx8ZWw9PT1jcHx8KGVsPT09Y28mJmVyLmluaXQ9PT11bmRlZmluZWQpO3ZhciBlcD1lci5hcHBseXx8ZXIuZXZlbnR8fGVyLmluaGVyaXRhYmxlO3ZhciBlcz10aGlzLl9fbFEoZWwsbmFtZSk7dGhpcy5fX2xSKGVvLGVyLG5hbWUsZWwsZW4pO2lmKGVuKXt0aGlzLl9fbFMoZW8sZWssZXIsbmFtZSk7fWlmKGVwKXt0aGlzLl9fbFQoZW8sZW4sZXMsZWwpO31pZihlci5pbmhlcml0YWJsZSl7ZW8ucHVzaChvKTt9e307aWYoIWVwKXt0aGlzLl9fbFYoZW8sbmFtZSxlbCxlbik7fWVsc2V7dGhpcy5fX2xXKGVvLGVyLG5hbWUsZWwsZW4pO31pZihlci5pbmhlcml0YWJsZSl7dGhpcy5fX2xYKGVvLGVyLG5hbWUsZWwpO31lbHNlIGlmKGVwKXt0aGlzLl9fbFkoZW8sZXIsbmFtZSxlbCk7fWlmKGVwKXt0aGlzLl9fbWEoZW8sZXIsbmFtZSk7aWYoZXIuaW5oZXJpdGFibGUmJmVxLl9nZXRDaGlsZHJlbil7dGhpcy5fX21iKGVvLG5hbWUpO319aWYoZW4pe2VvLnB1c2goRyk7fXJldHVybiB0aGlzLl9fbFAoZWosZXEsbmFtZSxlbCxlbyxlbSk7fSxfX2xROmZ1bmN0aW9uKGV0LG5hbWUpe2lmKGV0PT09Y3B8fGV0PT09Ym8pe3ZhciBldT10aGlzLiQkc3RvcmUucnVudGltZVtuYW1lXTt9ZWxzZSBpZihldD09PWNxfHxldD09PWJ1KXtldT10aGlzLiQkc3RvcmUudGhlbWVbbmFtZV07fWVsc2UgaWYoZXQ9PT1jbyl7ZXU9dGhpcy4kJHN0b3JlLmluaXRbbmFtZV07fWVsc2V7ZXU9dGhpcy4kJHN0b3JlLnVzZXJbbmFtZV07fXJldHVybiBldTt9LF9fbFI6ZnVuY3Rpb24oZXYsZXcsbmFtZSxleCxleSl7e2lmKCFldy5udWxsYWJsZXx8ZXcuY2hlY2t8fGV3LmluaGVyaXRhYmxlKXtldi5wdXNoKGNJKTt9aWYoZXg9PT1jcil7ZXYucHVzaChRLG5hbWUsdCxleCxVKTt9fTt9LF9fbFM6ZnVuY3Rpb24oZXosZUEsZUIsbmFtZSl7aWYoZUIudHJhbnNmb3JtKXtlei5wdXNoKHEsZUIudHJhbnNmb3JtLGJXKTt9aWYoZUIudmFsaWRhdGUpe2lmKHR5cGVvZiBlQi52YWxpZGF0ZT09PWJzKXtlei5wdXNoKGNzLGVCLnZhbGlkYXRlLGJXKTt9ZWxzZSBpZihlQi52YWxpZGF0ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKXtlei5wdXNoKGVBLmNsYXNzbmFtZSxiaixuYW1lKTtlei5wdXNoKGNTKTt9fX0sX19sVDpmdW5jdGlvbihlQyxlRCxlRSxlRil7dmFyIGVHPShlRj09PWJxfHxlRj09PWJ1fHxlRj09PWJvKTtpZihlRCl7ZUMucHVzaChjbixlRSxmKTt9ZWxzZSBpZihlRyl7ZUMucHVzaChjbixlRSx2KTt9fSxfX2xVOnVuZGVmaW5lZCxfX2xWOmZ1bmN0aW9uKGVILG5hbWUsZUksZUope2lmKGVJPT09Y3Ape2VILnB1c2goY3MsdGhpcy4kJHN0b3JlLnJ1bnRpbWVbbmFtZV0sY3QpO31lbHNlIGlmKGVJPT09Ym8pe2VILnB1c2goY24sdGhpcy4kJHN0b3JlLnJ1bnRpbWVbbmFtZV0sYncpO2VILnB1c2goY20sdGhpcy4kJHN0b3JlLnJ1bnRpbWVbbmFtZV0sY3YpO31lbHNlIGlmKGVJPT09Y3Ipe2VILnB1c2goY3MsdGhpcy4kJHN0b3JlLnVzZXJbbmFtZV0sY3QpO31lbHNlIGlmKGVJPT09YnEpe2VILnB1c2goY24sdGhpcy4kJHN0b3JlLnVzZXJbbmFtZV0sYncpO2VILnB1c2goY20sdGhpcy4kJHN0b3JlLnVzZXJbbmFtZV0sY3YpO31lbHNlIGlmKGVJPT09Y3Epe2VILnB1c2goY3MsdGhpcy4kJHN0b3JlLnRoZW1lW25hbWVdLGN0KTt9ZWxzZSBpZihlST09PWJ1KXtlSC5wdXNoKGNuLHRoaXMuJCRzdG9yZS50aGVtZVtuYW1lXSxidyk7ZUgucHVzaChjbSx0aGlzLiQkc3RvcmUudGhlbWVbbmFtZV0sY3YpO31lbHNlIGlmKGVJPT09Y28mJmVKKXtlSC5wdXNoKGNzLHRoaXMuJCRzdG9yZS5pbml0W25hbWVdLGN0KTt9fSxfX2xXOmZ1bmN0aW9uKGVLLGVMLG5hbWUsZU0sZU4pe2lmKGVMLmluaGVyaXRhYmxlKXtlSy5wdXNoKFIsdGhpcy4kJHN0b3JlLmluaGVyaXRbbmFtZV0sY3YpO31lbHNle2VLLnB1c2goYkYpO31lSy5wdXNoKGNuLHRoaXMuJCRzdG9yZS5ydW50aW1lW25hbWVdLGJuKTtpZihlTT09PWNwKXtlSy5wdXNoKGN1LHRoaXMuJCRzdG9yZS5ydW50aW1lW25hbWVdLGN0KTt9ZWxzZSBpZihlTT09PWJvKXtlSy5wdXNoKGNtLHRoaXMuJCRzdG9yZS5ydW50aW1lW25hbWVdLGN2KTtlSy5wdXNoKGNuLHRoaXMuJCRzdG9yZS51c2VyW25hbWVdLGJ3KTtlSy5wdXNoKGN1LHRoaXMuJCRzdG9yZS51c2VyW25hbWVdLGN2KTtlSy5wdXNoKGJ0LHRoaXMuJCRzdG9yZS50aGVtZVtuYW1lXSxidyk7ZUsucHVzaChjdSx0aGlzLiQkc3RvcmUudGhlbWVbbmFtZV0sY3YpO2VLLnB1c2goYnQsdGhpcy4kJHN0b3JlLmluaXRbbmFtZV0sYm4pO2VLLnB1c2goY3UsdGhpcy4kJHN0b3JlLmluaXRbbmFtZV0sY3YpO2VLLnB1c2goY3MsdGhpcy4kJHN0b3JlLnVzZWluaXRbbmFtZV0sY0EpO2VLLnB1c2goYnYpO31lbHNle2VLLnB1c2goY0YsdGhpcy4kJHN0b3JlLnJ1bnRpbWVbbmFtZV0sY3YpO2lmKGVNPT09Y3Ipe2VLLnB1c2goY3MsdGhpcy4kJHN0b3JlLnVzZXJbbmFtZV0sY3QpO31lbHNlIGlmKGVNPT09YnEpe2VLLnB1c2goY20sdGhpcy4kJHN0b3JlLnVzZXJbbmFtZV0sY3YpO31lbHNlIGlmKGVNPT09Y3Epe2VLLnB1c2goY3MsdGhpcy4kJHN0b3JlLnRoZW1lW25hbWVdLGN0KTt9ZWxzZSBpZihlTT09PWJ1KXtlSy5wdXNoKGNtLHRoaXMuJCRzdG9yZS50aGVtZVtuYW1lXSxjdik7fWVsc2UgaWYoZU09PT1jbyYmZU4pe2VLLnB1c2goY3MsdGhpcy4kJHN0b3JlLmluaXRbbmFtZV0sY3QpO319ZUsucHVzaChidik7ZUsucHVzaChidCx0aGlzLiQkc3RvcmUudXNlcltuYW1lXSxibik7aWYoZU09PT1jcil7aWYoIWVMLmluaGVyaXRhYmxlKXtlSy5wdXNoKGN6LHRoaXMuJCRzdG9yZS51c2VyW25hbWVdLGN2KTt9ZUsucHVzaChjdSx0aGlzLiQkc3RvcmUudXNlcltuYW1lXSxjdCk7fWVsc2UgaWYoZU09PT1icSl7aWYoIWVMLmluaGVyaXRhYmxlKXtlSy5wdXNoKGN6LHRoaXMuJCRzdG9yZS51c2VyW25hbWVdLGN2KTt9ZUsucHVzaChjbSx0aGlzLiQkc3RvcmUudXNlcltuYW1lXSxjdik7ZUsucHVzaChjbix0aGlzLiQkc3RvcmUucnVudGltZVtuYW1lXSxidyk7ZUsucHVzaChjdSx0aGlzLiQkc3RvcmUucnVudGltZVtuYW1lXSxjdik7ZUsucHVzaChjbix0aGlzLiQkc3RvcmUudGhlbWVbbmFtZV0sYncpO2VLLnB1c2goY3UsdGhpcy4kJHN0b3JlLnRoZW1lW25hbWVdLGN2KTtlSy5wdXNoKGJ0LHRoaXMuJCRzdG9yZS5pbml0W25hbWVdLGJuKTtlSy5wdXNoKGN1LHRoaXMuJCRzdG9yZS5pbml0W25hbWVdLGN2KTtlSy5wdXNoKGNzLHRoaXMuJCRzdG9yZS51c2Vpbml0W25hbWVdLGNBKTtlSy5wdXNoKGJ2KTt9ZWxzZXtpZihlTT09PWNwKXtlSy5wdXNoKGN1LHRoaXMuJCRzdG9yZS5ydW50aW1lW25hbWVdLGN0KTt9ZWxzZSBpZihlTC5pbmhlcml0YWJsZSl7ZUsucHVzaChjdSx0aGlzLiQkc3RvcmUudXNlcltuYW1lXSxjdik7fWVsc2V7ZUsucHVzaChjRix0aGlzLiQkc3RvcmUudXNlcltuYW1lXSxjdik7fWlmKGVNPT09Y3Epe2VLLnB1c2goY3MsdGhpcy4kJHN0b3JlLnRoZW1lW25hbWVdLGN0KTt9ZWxzZSBpZihlTT09PWJ1KXtlSy5wdXNoKGNtLHRoaXMuJCRzdG9yZS50aGVtZVtuYW1lXSxjdik7fWVsc2UgaWYoZU09PT1jbyYmZU4pe2VLLnB1c2goY3MsdGhpcy4kJHN0b3JlLmluaXRbbmFtZV0sY3QpO319ZUsucHVzaChidik7aWYoZUwudGhlbWVhYmxlKXtlSy5wdXNoKGJ0LHRoaXMuJCRzdG9yZS50aGVtZVtuYW1lXSxibik7aWYoIWVMLmluaGVyaXRhYmxlKXtlSy5wdXNoKGN6LHRoaXMuJCRzdG9yZS50aGVtZVtuYW1lXSxjdik7fWlmKGVNPT09Y3Ape2VLLnB1c2goY3UsdGhpcy4kJHN0b3JlLnJ1bnRpbWVbbmFtZV0sY3QpO31lbHNlIGlmKGVNPT09Y3Ipe2VLLnB1c2goY3UsdGhpcy4kJHN0b3JlLnVzZXJbbmFtZV0sY3QpO31lbHNlIGlmKGVNPT09Y3Epe2VLLnB1c2goY3UsdGhpcy4kJHN0b3JlLnRoZW1lW25hbWVdLGN0KTt9ZWxzZSBpZihlTT09PWJ1KXtlSy5wdXNoKGNtLHRoaXMuJCRzdG9yZS50aGVtZVtuYW1lXSxjdik7ZUsucHVzaChjbix0aGlzLiQkc3RvcmUuaW5pdFtuYW1lXSxibik7ZUsucHVzaChjdSx0aGlzLiQkc3RvcmUuaW5pdFtuYW1lXSxjdik7ZUsucHVzaChjcyx0aGlzLiQkc3RvcmUudXNlaW5pdFtuYW1lXSxjQSk7ZUsucHVzaChidik7fWVsc2UgaWYoZU09PT1jbyl7aWYoZU4pe2VLLnB1c2goY3MsdGhpcy4kJHN0b3JlLmluaXRbbmFtZV0sY3QpO31lSy5wdXNoKGN1LHRoaXMuJCRzdG9yZS50aGVtZVtuYW1lXSxjdik7fWVsc2UgaWYoZU09PT1jRCl7ZUsucHVzaChjdSx0aGlzLiQkc3RvcmUudGhlbWVbbmFtZV0sY3YpO31lSy5wdXNoKGJ2KTt9ZUsucHVzaChidCx0aGlzLiQkc3RvcmUudXNlaW5pdFtuYW1lXSxFKTtpZighZUwuaW5oZXJpdGFibGUpe2VLLnB1c2goY3osdGhpcy4kJHN0b3JlLmluaXRbbmFtZV0sY3YpO31pZihlTT09PWNvKXtpZihlTil7ZUsucHVzaChjdSx0aGlzLiQkc3RvcmUuaW5pdFtuYW1lXSxjdCk7fWVsc2V7ZUsucHVzaChjdSx0aGlzLiQkc3RvcmUuaW5pdFtuYW1lXSxjdik7fX1lbHNlIGlmKGVNPT09Y3J8fGVNPT09Y3B8fGVNPT09Y3F8fGVNPT09Y0Qpe2VLLnB1c2goY20sdGhpcy4kJHN0b3JlLnVzZWluaXRbbmFtZV0sY3YpO2lmKGVNPT09Y3Ape2VLLnB1c2goY3UsdGhpcy4kJHN0b3JlLnJ1bnRpbWVbbmFtZV0sY3QpO31lbHNlIGlmKGVNPT09Y3Ipe2VLLnB1c2goY3UsdGhpcy4kJHN0b3JlLnVzZXJbbmFtZV0sY3QpO31lbHNlIGlmKGVNPT09Y3Epe2VLLnB1c2goY3UsdGhpcy4kJHN0b3JlLnRoZW1lW25hbWVdLGN0KTt9ZWxzZSBpZihlTT09PWNEKXtlSy5wdXNoKGN1LHRoaXMuJCRzdG9yZS5pbml0W25hbWVdLGN2KTt9fWVLLnB1c2goYnYpO2lmKGVNPT09Y3J8fGVNPT09Y3B8fGVNPT09Y3F8fGVNPT09Y28pe2VLLnB1c2goY1EpO2lmKGVNPT09Y3Ape2VLLnB1c2goY3UsdGhpcy4kJHN0b3JlLnJ1bnRpbWVbbmFtZV0sY3QpO31lbHNlIGlmKGVNPT09Y3Ipe2VLLnB1c2goY3UsdGhpcy4kJHN0b3JlLnVzZXJbbmFtZV0sY3QpO31lbHNlIGlmKGVNPT09Y3Epe2VLLnB1c2goY3UsdGhpcy4kJHN0b3JlLnRoZW1lW25hbWVdLGN0KTt9ZWxzZSBpZihlTT09PWNvKXtpZihlTil7ZUsucHVzaChjdSx0aGlzLiQkc3RvcmUuaW5pdFtuYW1lXSxjdCk7fWVsc2V7ZUsucHVzaChjdSx0aGlzLiQkc3RvcmUuaW5pdFtuYW1lXSxjdik7fWVLLnB1c2goY3MsdGhpcy4kJHN0b3JlLnVzZWluaXRbbmFtZV0sY0EpO31lSy5wdXNoKGJ2KTt9fSxfX2xYOmZ1bmN0aW9uKGVPLGVQLG5hbWUsZVEpe2VPLnB1c2goQyk7aWYoZVE9PT1jRCl7ZU8ucHVzaChWKTt9ZWxzZXtlTy5wdXNoKGJFLHRoaXMuJCRzdG9yZS5pbmhlcml0W25hbWVdLGN2KTt9ZU8ucHVzaChiUCk7ZU8ucHVzaChjcyx0aGlzLiQkc3RvcmUuaW5pdFtuYW1lXSxiRyk7ZU8ucHVzaChjcyx0aGlzLiQkc3RvcmUuaW5pdFtuYW1lXSxiUik7ZU8ucHVzaChjdSx0aGlzLiQkc3RvcmUuaW5pdFtuYW1lXSxjdik7ZU8ucHVzaChjcyx0aGlzLiQkc3RvcmUudXNlaW5pdFtuYW1lXSxjQSk7ZU8ucHVzaChiTyk7ZU8ucHVzaChjbSx0aGlzLiQkc3RvcmUudXNlaW5pdFtuYW1lXSxiYyk7ZU8ucHVzaChidik7ZU8ucHVzaChiWSk7ZU8ucHVzaChOKTtlTy5wdXNoKGJhLHRoaXMuJCRzdG9yZS5pbmhlcml0W25hbWVdLGN2KTtlTy5wdXNoKGJ2KTtlTy5wdXNoKE8pO2VPLnB1c2goY20sdGhpcy4kJHN0b3JlLmluaGVyaXRbbmFtZV0sY3YpO2VPLnB1c2gocix0aGlzLiQkc3RvcmUuaW5oZXJpdFtuYW1lXSxjVSk7ZU8ucHVzaChiTik7aWYoZVAuaW5pdCE9PXVuZGVmaW5lZCYmZVEhPT1jbyl7ZU8ucHVzaChjRSx0aGlzLiQkc3RvcmUuaW5pdFtuYW1lXSxjeSk7fWVsc2V7ZU8ucHVzaChiWCk7fWVPLnB1c2goY0wpO30sX19sWTpmdW5jdGlvbihlUixlUyxuYW1lLGVUKXtpZihlVCE9PWNyJiZlVCE9PWNwJiZlVCE9PWNxKXtlUi5wdXNoKGJLKTt9ZVIucHVzaChiWSk7aWYoZVMuaW5pdCE9PXVuZGVmaW5lZCYmZVQhPT1jbyl7ZVIucHVzaChjRSx0aGlzLiQkc3RvcmUuaW5pdFtuYW1lXSxjeSk7fWVsc2V7ZVIucHVzaChiWCk7fX0sX19tYTpmdW5jdGlvbihlVSxlVixuYW1lKXtpZihlVi5hcHBseSl7ZVUucHVzaChjcyxlVi5hcHBseSxILG5hbWUsYnkpO31pZihlVi5ldmVudCl7ZVUucHVzaChibCxiZSxlVi5ldmVudCx4LGJRLGVWLmV2ZW50LFcseSk7fX0sX19tYjpmdW5jdGlvbihlVyxuYW1lKXtlVy5wdXNoKGNUKTtlVy5wdXNoKGNOLHRoaXMuJCRtZXRob2QucmVmcmVzaFtuYW1lXSxiZyx0aGlzLiQkbWV0aG9kLnJlZnJlc2hbbmFtZV0sY1kpO2VXLnB1c2goYnYpO319LGRlZmVyOmZ1bmN0aW9uKGVYKXt2YXIgZmE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKE0pIT0tMTt2YXIgZVk9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKGNnKSE9LTE7aWYoZmF8fGVZKXtlWC5fX2xNPWVYLl9fbE47fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBxPSJbQ2xhc3MgIixwPSJdIixvPSIkJGluaXRfIixuPSJ0b1N0cmluZyIsbT0iY29uc3RydWN0b3IiLGs9InNpbmdsZXRvbiIsaj0iLnByb3RvdHlwZSIsaD0iZXh0ZW5kIixnPSJDbGFzcyIsZj0iZGVzdHJ1Y3QiLGM9InF4LkNsYXNzIixlPSIuIixkPSJzdGF0aWMiLGI9InF4LmV2ZW50LnR5cGUuRGF0YSI7cXguQm9vdHN0cmFwLmRlZmluZShjLHtzdGF0aWNzOntkZWZpbmU6ZnVuY3Rpb24obmFtZSxyKXtpZighcil7dmFyIHI9e307fWlmKHIuaW5jbHVkZSYmIShyLmluY2x1ZGUgaW5zdGFuY2VvZiBBcnJheSkpe3IuaW5jbHVkZT1bci5pbmNsdWRlXTt9aWYoci5pbXBsZW1lbnQmJiEoci5pbXBsZW1lbnQgaW5zdGFuY2VvZiBBcnJheSkpe3IuaW1wbGVtZW50PVtyLmltcGxlbWVudF07fXZhciBzPWZhbHNlO2lmKCFyLmhhc093blByb3BlcnR5KGgpJiYhci50eXBlKXtyLnR5cGU9ZDtzPXRydWU7fXt9O3ZhciB0PXRoaXMuX19iWChuYW1lLHIudHlwZSxyLmV4dGVuZCxyLnN0YXRpY3Msci5jb25zdHJ1Y3Qsci5kZXN0cnVjdCxyLmluY2x1ZGUpO2lmKHIuZXh0ZW5kKXtpZihyLnByb3BlcnRpZXMpe3RoaXMuX19jYSh0LHIucHJvcGVydGllcyx0cnVlKTt9aWYoci5tZW1iZXJzKXt0aGlzLl9fY2ModCxyLm1lbWJlcnMsdHJ1ZSx0cnVlLGZhbHNlKTt9aWYoci5ldmVudHMpe3RoaXMuX19iWSh0LHIuZXZlbnRzLHRydWUpO31pZihyLmluY2x1ZGUpe2Zvcih2YXIgaT0wLGw9ci5pbmNsdWRlLmxlbmd0aDtpPGw7aSsrKXt0aGlzLl9fY2codCxyLmluY2x1ZGVbaV0sZmFsc2UpO319fWlmKHIuc2V0dGluZ3Mpe2Zvcih2YXIgdSBpbiByLnNldHRpbmdzKXtxeC5jb3JlLlNldHRpbmcuZGVmaW5lKHUsci5zZXR0aW5nc1t1XSk7fX1pZihyLnZhcmlhbnRzKXtmb3IodmFyIHUgaW4gci52YXJpYW50cyl7cXguY29yZS5WYXJpYW50LmRlZmluZSh1LHIudmFyaWFudHNbdV0uYWxsb3dlZFZhbHVlcyxyLnZhcmlhbnRzW3VdLmRlZmF1bHRWYWx1ZSk7fX1pZihyLmltcGxlbWVudCl7Zm9yKHZhciBpPTAsbD1yLmltcGxlbWVudC5sZW5ndGg7aTxsO2krKyl7dGhpcy5fX2NlKHQsci5pbXBsZW1lbnRbaV0pO319e307aWYoci5kZWZlcil7ci5kZWZlci5zZWxmPXQ7ci5kZWZlcih0LHQucHJvdG90eXBlLHthZGQ6ZnVuY3Rpb24obmFtZSx2KXt2YXIgdz17fTt3W25hbWVdPXY7cXguQ2xhc3MuX19jYSh0LHcsdHJ1ZSk7fX0pO31yZXR1cm4gdDt9LHVuZGVmaW5lOmZ1bmN0aW9uKG5hbWUpe2RlbGV0ZSB0aGlzLiQkcmVnaXN0cnlbbmFtZV07dmFyIHg9bmFtZS5zcGxpdChlKTt2YXIgej1bd2luZG93XTtmb3IodmFyIGk9MDtpPHgubGVuZ3RoO2krKyl7ei5wdXNoKHpbaV1beFtpXV0pO31mb3IodmFyIGk9ei5sZW5ndGgtMTtpPj0xO2ktLSl7dmFyIHk9eltpXTt2YXIgcGFyZW50PXpbaS0xXTtpZihxeC5Cb290c3RyYXAuaXNGdW5jdGlvbih5KXx8cXguQm9vdHN0cmFwLm9iamVjdEdldExlbmd0aCh5KT09PTApe2RlbGV0ZSBwYXJlbnRbeFtpLTFdXTt9ZWxzZXticmVhazt9fX0saXNEZWZpbmVkOnF4LkJvb3RzdHJhcC5jbGFzc0lzRGVmaW5lZCxnZXRUb3RhbE51bWJlcjpmdW5jdGlvbigpe3JldHVybiBxeC5Cb290c3RyYXAub2JqZWN0R2V0TGVuZ3RoKHRoaXMuJCRyZWdpc3RyeSk7fSxnZXRCeU5hbWU6cXguQm9vdHN0cmFwLmdldEJ5TmFtZSxpbmNsdWRlOmZ1bmN0aW9uKEEsQil7e307cXguQ2xhc3MuX19jZyhBLEIsZmFsc2UpO30scGF0Y2g6ZnVuY3Rpb24oQyxEKXt7fTtxeC5DbGFzcy5fX2NnKEMsRCx0cnVlKTt9LGlzU3ViQ2xhc3NPZjpmdW5jdGlvbihFLEYpe2lmKCFFKXtyZXR1cm4gZmFsc2U7fWlmKEU9PUYpe3JldHVybiB0cnVlO31pZihFLnByb3RvdHlwZSBpbnN0YW5jZW9mIEYpe3JldHVybiB0cnVlO31yZXR1cm4gZmFsc2U7fSxnZXRQcm9wZXJ0eURlZmluaXRpb246cXguQm9vdHN0cmFwLmdldFByb3BlcnR5RGVmaW5pdGlvbixnZXRQcm9wZXJ0aWVzOmZ1bmN0aW9uKEcpe3ZhciBIPVtdO3doaWxlKEcpe2lmKEcuJCRwcm9wZXJ0aWVzKXtILnB1c2guYXBwbHkoSCxxeC5Cb290c3RyYXAuZ2V0S2V5cyhHLiQkcHJvcGVydGllcykpO31HPUcuc3VwZXJjbGFzczt9cmV0dXJuIEg7fSxnZXRCeVByb3BlcnR5OmZ1bmN0aW9uKEksbmFtZSl7d2hpbGUoSSl7aWYoSS4kJHByb3BlcnRpZXMmJkkuJCRwcm9wZXJ0aWVzW25hbWVdKXtyZXR1cm4gSTt9ST1JLnN1cGVyY2xhc3M7fXJldHVybiBudWxsO30saGFzUHJvcGVydHk6cXguQm9vdHN0cmFwLmhhc1Byb3BlcnR5LGdldEV2ZW50VHlwZTpxeC5Cb290c3RyYXAuZ2V0RXZlbnRUeXBlLHN1cHBvcnRzRXZlbnQ6cXguQm9vdHN0cmFwLnN1cHBvcnRzRXZlbnQsaGFzT3duTWl4aW46ZnVuY3Rpb24oSixLKXtyZXR1cm4gSi4kJGluY2x1ZGVzJiZKLiQkaW5jbHVkZXMuaW5kZXhPZihLKSE9PS0xO30sZ2V0QnlNaXhpbjpmdW5jdGlvbihMLE0pe3ZhciBOLGksbDt3aGlsZShMKXtpZihMLiQkaW5jbHVkZXMpe049TC4kJGZsYXRJbmNsdWRlcztmb3IoaT0wLGw9Ti5sZW5ndGg7aTxsO2krKyl7aWYoTltpXT09PU0pe3JldHVybiBMO319fUw9TC5zdXBlcmNsYXNzO31yZXR1cm4gbnVsbDt9LGdldE1peGluczpxeC5Cb290c3RyYXAuZ2V0TWl4aW5zLGhhc01peGluOmZ1bmN0aW9uKE8sUCl7cmV0dXJuICEhdGhpcy5nZXRCeU1peGluKE8sUCk7fSxoYXNPd25JbnRlcmZhY2U6ZnVuY3Rpb24oUSxSKXtyZXR1cm4gUS4kJGltcGxlbWVudHMmJlEuJCRpbXBsZW1lbnRzLmluZGV4T2YoUikhPT0tMTt9LGdldEJ5SW50ZXJmYWNlOnF4LkJvb3RzdHJhcC5nZXRCeUludGVyZmFjZSxnZXRJbnRlcmZhY2VzOmZ1bmN0aW9uKFMpe3ZhciBUPVtdO3doaWxlKFMpe2lmKFMuJCRpbXBsZW1lbnRzKXtULnB1c2guYXBwbHkoVCxTLiQkZmxhdEltcGxlbWVudHMpO31TPVMuc3VwZXJjbGFzczt9cmV0dXJuIFQ7fSxoYXNJbnRlcmZhY2U6cXguQm9vdHN0cmFwLmhhc0ludGVyZmFjZSxpbXBsZW1lbnRzSW50ZXJmYWNlOmZ1bmN0aW9uKFUsVil7dmFyIFc9VS5jb25zdHJ1Y3RvcjtpZih0aGlzLmhhc0ludGVyZmFjZShXLFYpKXtyZXR1cm4gdHJ1ZTt9dHJ5e3F4LkludGVyZmFjZS5hc3NlcnRPYmplY3QoVSxWKTtyZXR1cm4gdHJ1ZTt9Y2F0Y2goWCl7fXRyeXtxeC5JbnRlcmZhY2UuYXNzZXJ0KFcsVixmYWxzZSk7cmV0dXJuIHRydWU7fWNhdGNoKFkpe31yZXR1cm4gZmFsc2U7fSxnZXRJbnN0YW5jZTpmdW5jdGlvbigpe2lmKCF0aGlzLiQkaW5zdGFuY2Upe3RoaXMuJCRhbGxvd2NvbnN0cnVjdD10cnVlO3RoaXMuJCRpbnN0YW5jZT1uZXcgdGhpcztkZWxldGUgdGhpcy4kJGFsbG93Y29uc3RydWN0O31yZXR1cm4gdGhpcy4kJGluc3RhbmNlO30sZ2VuZXJpY1RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHErdGhpcy5jbGFzc25hbWUrcDt9LCQkcmVnaXN0cnk6cXguQm9vdHN0cmFwLiQkcmVnaXN0cnksX19iVDpudWxsLF9fYlU6bnVsbCxfX2JWOmZ1bmN0aW9uKCl7fSxfX2JXOmZ1bmN0aW9uKCl7fSxfX2JYOmZ1bmN0aW9uKG5hbWUsYmEsYmIsYmMsYmQsYmUsYmYpe3ZhciBiaTtpZighYmImJnRydWUpe2JpPWJjfHx7fTtxeC5Cb290c3RyYXAuc2V0RGlzcGxheU5hbWVzKGJpLG5hbWUpO31lbHNle3ZhciBiaT17fTtpZihiYil7aWYoIWJkKXtiZD10aGlzLl9fY2goKTt9aWYodGhpcy5fX2NqKGJiLGJmKSl7Ymk9dGhpcy5fX2NrKGJkLG5hbWUsYmEpO31lbHNle2JpPWJkO31pZihiYT09PWspe2JpLmdldEluc3RhbmNlPXRoaXMuZ2V0SW5zdGFuY2U7fXF4LkJvb3RzdHJhcC5zZXREaXNwbGF5TmFtZShiZCxuYW1lLG0pO31pZihiYyl7cXguQm9vdHN0cmFwLnNldERpc3BsYXlOYW1lcyhiYyxuYW1lKTt2YXIgYmo7Zm9yKHZhciBpPTAsYT1xeC5Cb290c3RyYXAuZ2V0S2V5cyhiYyksbD1hLmxlbmd0aDtpPGw7aSsrKXtiaj1hW2ldO3ZhciBiZz1iY1tial07e2JpW2JqXT1iZzt9O319fXZhciBiaD1xeC5Cb290c3RyYXAuY3JlYXRlTmFtZXNwYWNlKG5hbWUsYmkpO2JpLm5hbWU9YmkuY2xhc3NuYW1lPW5hbWU7YmkuYmFzZW5hbWU9Ymg7YmkuJCR0eXBlPWc7aWYoYmEpe2JpLiQkY2xhc3N0eXBlPWJhO31pZighYmkuaGFzT3duUHJvcGVydHkobikpe2JpLnRvU3RyaW5nPXRoaXMuZ2VuZXJpY1RvU3RyaW5nO31pZihiYil7cXguQm9vdHN0cmFwLmV4dGVuZENsYXNzKGJpLGJkLGJiLG5hbWUsYmgpO2lmKGJlKXt7fTtiaS4kJGRlc3RydWN0b3I9YmU7cXguQm9vdHN0cmFwLnNldERpc3BsYXlOYW1lKGJlLG5hbWUsZik7fX10aGlzLiQkcmVnaXN0cnlbbmFtZV09Ymk7cmV0dXJuIGJpO30sX19iWTpmdW5jdGlvbihiayxibCxibSl7dmFyIGJuLGJuO3t9O2lmKGJrLiQkZXZlbnRzKXtmb3IodmFyIGJuIGluIGJsKXtiay4kJGV2ZW50c1tibl09YmxbYm5dO319ZWxzZXtiay4kJGV2ZW50cz1ibDt9fSxfX2NhOmZ1bmN0aW9uKGJvLGJwLGJxKXt2YXIgYnI7aWYoYnE9PT11bmRlZmluZWQpe2JxPWZhbHNlO312YXIgYnM9Ym8ucHJvdG90eXBlO2Zvcih2YXIgbmFtZSBpbiBicCl7YnI9YnBbbmFtZV07e307YnIubmFtZT1uYW1lO2lmKCFici5yZWZpbmUpe2lmKGJvLiQkcHJvcGVydGllcz09PXVuZGVmaW5lZCl7Ym8uJCRwcm9wZXJ0aWVzPXt9O31iby4kJHByb3BlcnRpZXNbbmFtZV09YnI7fWlmKGJyLmluaXQhPT11bmRlZmluZWQpe2JvLnByb3RvdHlwZVtvK25hbWVdPWJyLmluaXQ7fWlmKGJyLmV2ZW50IT09dW5kZWZpbmVkKXt2YXIgZXZlbnQ9e307ZXZlbnRbYnIuZXZlbnRdPWI7dGhpcy5fX2JZKGJvLGV2ZW50LGJxKTt9aWYoYnIuaW5oZXJpdGFibGUpe3F4LmNvcmUuUHJvcGVydHkuJCRpbmhlcml0YWJsZVtuYW1lXT10cnVlO2lmKCFicy4kJHJlZnJlc2hJbmhlcml0YWJsZXMpe3F4LmNvcmUuUHJvcGVydHkuYXR0YWNoUmVmcmVzaEluaGVyaXRhYmxlcyhibyk7fX1pZighYnIucmVmaW5lKXtxeC5jb3JlLlByb3BlcnR5LmF0dGFjaE1ldGhvZHMoYm8sbmFtZSxicik7fX19LF9fY2I6bnVsbCxfX2NjOmZ1bmN0aW9uKGJ0LGJ1LGJ2LGJ3LGJ4KXt2YXIgYnk9YnQucHJvdG90eXBlO3ZhciBiQSxiejtxeC5Cb290c3RyYXAuc2V0RGlzcGxheU5hbWVzKGJ1LGJ0LmNsYXNzbmFtZStqKTtmb3IodmFyIGk9MCxhPXF4LkJvb3RzdHJhcC5nZXRLZXlzKGJ1KSxsPWEubGVuZ3RoO2k8bDtpKyspe2JBPWFbaV07Yno9YnVbYkFdO3t9O2lmKGJ3IT09ZmFsc2UmJmJ6IGluc3RhbmNlb2YgRnVuY3Rpb24mJmJ6LiQkdHlwZT09bnVsbCl7aWYoYng9PXRydWUpe2J6PXRoaXMuX19jZChieixieVtiQV0pO31lbHNle2lmKGJ5W2JBXSl7YnouYmFzZT1ieVtiQV07fWJ6LnNlbGY9YnQ7fXt9O31ieVtiQV09Yno7fX0sX19jZDpmdW5jdGlvbihiQixiQyl7aWYoYkMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBiRT1iQi5iYXNlO2JCLmJhc2U9YkM7dmFyIGJEPWJCLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtiQi5iYXNlPWJFO3JldHVybiBiRDt9O31lbHNle3JldHVybiBiQjt9fSxfX2NlOmZ1bmN0aW9uKGJGLGJHKXt7fTt2YXIgYkg9cXguSW50ZXJmYWNlLmZsYXR0ZW4oW2JHXSk7aWYoYkYuJCRpbXBsZW1lbnRzKXtiRi4kJGltcGxlbWVudHMucHVzaChiRyk7YkYuJCRmbGF0SW1wbGVtZW50cy5wdXNoLmFwcGx5KGJGLiQkZmxhdEltcGxlbWVudHMsYkgpO31lbHNle2JGLiQkaW1wbGVtZW50cz1bYkddO2JGLiQkZmxhdEltcGxlbWVudHM9Ykg7fX0sX19jZjpmdW5jdGlvbihiSSl7dmFyIG5hbWU9YkkuY2xhc3NuYW1lO3ZhciBiSj10aGlzLl9fY2soYkksbmFtZSxiSS4kJGNsYXNzdHlwZSk7Zm9yKHZhciBpPTAsYT1xeC5Cb290c3RyYXAuZ2V0S2V5cyhiSSksbD1hLmxlbmd0aDtpPGw7aSsrKXtiSz1hW2ldO2JKW2JLXT1iSVtiS107fWJKLnByb3RvdHlwZT1iSS5wcm90b3R5cGU7dmFyIGJNPWJJLnByb3RvdHlwZTtmb3IodmFyIGk9MCxhPXF4LkJvb3RzdHJhcC5nZXRLZXlzKGJNKSxsPWEubGVuZ3RoO2k8bDtpKyspe2JLPWFbaV07dmFyIGJOPWJNW2JLXTtpZihiTiYmYk4uc2VsZj09Ykkpe2JOLnNlbGY9Yko7fX1mb3IodmFyIGJLIGluIHRoaXMuJCRyZWdpc3RyeSl7dmFyIGJMPXRoaXMuJCRyZWdpc3RyeVtiS107aWYoIWJMKXtjb250aW51ZTt9aWYoYkwuYmFzZT09Ykkpe2JMLmJhc2U9Yko7fWlmKGJMLnN1cGVyY2xhc3M9PWJJKXtiTC5zdXBlcmNsYXNzPWJKO31pZihiTC4kJG9yaWdpbmFsKXtpZihiTC4kJG9yaWdpbmFsLmJhc2U9PWJJKXtiTC4kJG9yaWdpbmFsLmJhc2U9Yko7fWlmKGJMLiQkb3JpZ2luYWwuc3VwZXJjbGFzcz09Ykkpe2JMLiQkb3JpZ2luYWwuc3VwZXJjbGFzcz1iSjt9fX1xeC5Cb290c3RyYXAuY3JlYXRlTmFtZXNwYWNlKG5hbWUsYkopO3RoaXMuJCRyZWdpc3RyeVtuYW1lXT1iSjtyZXR1cm4gYko7fSxfX2NnOmZ1bmN0aW9uKGJPLGJQLGJRKXt7fTtpZih0aGlzLmhhc01peGluKGJPLGJQKSl7cmV0dXJuO312YXIgYlQ9Yk8uJCRvcmlnaW5hbDtpZihiUC4kJGNvbnN0cnVjdG9yJiYhYlQpe2JPPXRoaXMuX19jZihiTyk7fXZhciBiUz1xeC5NaXhpbi5mbGF0dGVuKFtiUF0pO3ZhciBiUjtmb3IodmFyIGk9MCxsPWJTLmxlbmd0aDtpPGw7aSsrKXtiUj1iU1tpXTtpZihiUi4kJGV2ZW50cyl7dGhpcy5fX2JZKGJPLGJSLiQkZXZlbnRzLGJRKTt9aWYoYlIuJCRwcm9wZXJ0aWVzKXt0aGlzLl9fY2EoYk8sYlIuJCRwcm9wZXJ0aWVzLGJRKTt9aWYoYlIuJCRtZW1iZXJzKXt0aGlzLl9fY2MoYk8sYlIuJCRtZW1iZXJzLGJRLGJRLGJRKTt9fWlmKGJPLiQkaW5jbHVkZXMpe2JPLiQkaW5jbHVkZXMucHVzaChiUCk7Yk8uJCRmbGF0SW5jbHVkZXMucHVzaC5hcHBseShiTy4kJGZsYXRJbmNsdWRlcyxiUyk7fWVsc2V7Yk8uJCRpbmNsdWRlcz1bYlBdO2JPLiQkZmxhdEluY2x1ZGVzPWJTO319LF9fY2g6ZnVuY3Rpb24oKXtmdW5jdGlvbiBiVSgpe2JVLmJhc2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO31yZXR1cm4gYlU7fSxfX2NpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7fTt9LF9fY2o6ZnVuY3Rpb24oYlYsYlcpe3t9O2lmKGJWJiZiVi4kJGluY2x1ZGVzKXt2YXIgYlg9YlYuJCRmbGF0SW5jbHVkZXM7Zm9yKHZhciBpPTAsbD1iWC5sZW5ndGg7aTxsO2krKyl7aWYoYlhbaV0uJCRjb25zdHJ1Y3Rvcil7cmV0dXJuIHRydWU7fX19aWYoYlcpe3ZhciBiWT1xeC5NaXhpbi5mbGF0dGVuKGJXKTtmb3IodmFyIGk9MCxsPWJZLmxlbmd0aDtpPGw7aSsrKXtpZihiWVtpXS4kJGNvbnN0cnVjdG9yKXtyZXR1cm4gdHJ1ZTt9fX1yZXR1cm4gZmFsc2U7fSxfX2NrOmZ1bmN0aW9uKGNhLG5hbWUsY2Ipe3ZhciBjYzt2YXIgY2Q9ZnVuY3Rpb24oKXt2YXIgY2c9Y2Q7e307dmFyIGNmPWNnLiQkb3JpZ2luYWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGNnLiQkaW5jbHVkZXMpe3ZhciBjZT1jZy4kJGZsYXRJbmNsdWRlcztmb3IodmFyIGk9MCxsPWNlLmxlbmd0aDtpPGw7aSsrKXtpZihjZVtpXS4kJGNvbnN0cnVjdG9yKXtjZVtpXS4kJGNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9fX17fTtyZXR1cm4gY2Y7fTt7fTtjZC4kJG9yaWdpbmFsPWNhO2NhLndyYXBwZXI9Y2Q7cmV0dXJuIGNkO319LGRlZmVyOmZ1bmN0aW9uKCl7dmFyIGNoLGNpLGNqO3t9O319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBzPSJnZWNrbyIscj0iMS45LjAuMCIscT0iLiIscD0iW29iamVjdCBPcGVyYV0iLG89ImZ1bmN0aW9uIixuPSJbXlxcLjAtOV0iLG09IjUyNS4yNiIsbD0iIixrPSJtc2h0bWwiLGo9IkFwcGxlV2ViS2l0LyIsZD0idW5rbm93biIsaT0iOS42LjAiLGc9IjQuMCIsYz0iR2Vja28iLGI9Im9wZXJhIixmPSJ3ZWJraXQiLGU9IjAuMC4wIixoPSI4LjAiLGE9InF4LmJvbS5jbGllbnQuRW5naW5lIjtxeC5Cb290c3RyYXAuZGVmaW5lKGEse3N0YXRpY3M6e05BTUU6IiIsRlVMTFZFUlNJT046IjAuMC4wIixWRVJTSU9OOjAuMCxPUEVSQTpmYWxzZSxXRUJLSVQ6ZmFsc2UsR0VDS086ZmFsc2UsTVNIVE1MOmZhbHNlLFVOS05PV05fRU5HSU5FOmZhbHNlLFVOS05PV05fVkVSU0lPTjpmYWxzZSxET0NVTUVOVF9NT0RFOm51bGwsX19ldDpmdW5jdGlvbigpe3ZhciB0PWQ7dmFyIHg9ZTt2YXIgdz13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDt2YXIgej1mYWxzZTt2YXIgdj1mYWxzZTtpZih3aW5kb3cub3BlcmEmJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3aW5kb3cub3BlcmEpPT1wKXt0PWI7dGhpcy5PUEVSQT10cnVlO2lmKC9PcGVyYVtcc1wvXShbMC05XSspXC4oWzAtOV0pKFswLTldKikvLnRlc3Qodykpe3g9UmVnRXhwLiQxK3ErUmVnRXhwLiQyO2lmKFJlZ0V4cC4kMyE9bCl7eCs9cStSZWdFeHAuJDM7fX1lbHNle3Y9dHJ1ZTt4PWk7fX1lbHNlIGlmKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoaikhPS0xKXt0PWY7dGhpcy5XRUJLSVQ9dHJ1ZTtpZigvQXBwbGVXZWJLaXRcLyhbXiBdKykvLnRlc3Qodykpe3g9UmVnRXhwLiQxO3ZhciB5PVJlZ0V4cChuKS5leGVjKHgpO2lmKHkpe3g9eC5zbGljZSgwLHkuaW5kZXgpO319ZWxzZXt2PXRydWU7eD1tO319ZWxzZSBpZih3aW5kb3cuY29udHJvbGxlcnMmJndpbmRvdy5uYXZpZ2F0b3IucHJvZHVjdD09PWMpe3Q9czt0aGlzLkdFQ0tPPXRydWU7aWYoL3J2XDooW15cKTtdKykoXCl8OykvLnRlc3Qodykpe3g9UmVnRXhwLiQxO31lbHNle3Y9dHJ1ZTt4PXI7fX1lbHNlIGlmKHdpbmRvdy5uYXZpZ2F0b3IuY3B1Q2xhc3MmJi9NU0lFXHMrKFteXCk7XSspKFwpfDspLy50ZXN0KHcpKXt0PWs7eD1SZWdFeHAuJDE7aWYoZG9jdW1lbnQuZG9jdW1lbnRNb2RlKXt0aGlzLkRPQ1VNRU5UX01PREU9ZG9jdW1lbnQuZG9jdW1lbnRNb2RlO31pZih4PDgmJi9UcmlkZW50XC8oW15cKTtdKykoXCl8OykvLnRlc3Qodykpe2lmKFJlZ0V4cC4kMT09PWcpe3g9aDt9fXRoaXMuTVNIVE1MPXRydWU7fWVsc2V7dmFyIHU9d2luZG93LnF4RmFpbDtpZih1JiZ0eXBlb2YgdT09PW8pe3ZhciB0PXUoKTtpZih0Lk5BTUUmJnQuRlVMTFZFUlNJT04pe3Q9dC5OQU1FO3RoaXNbdC50b1VwcGVyQ2FzZSgpXT10cnVlO3g9dC5GVUxMVkVSU0lPTjt9fWVsc2V7ej10cnVlO3Y9dHJ1ZTt4PXI7dD1zO3RoaXMuR0VDS089dHJ1ZTtxeC5Cb290c3RyYXAud2FybigiVW5zdXBwb3J0ZWQgY2xpZW50OiAiK3crIiEgQXNzdW1lZCBnZWNrbyB2ZXJzaW9uIDEuOS4wLjAgKEZpcmVmb3ggMy4wKS4iKTt9fXRoaXMuVU5LTk9XTl9FTkdJTkU9ejt0aGlzLlVOS05PV05fVkVSU0lPTj12O3RoaXMuTkFNRT10O3RoaXMuRlVMTFZFUlNJT049eDt0aGlzLlZFUlNJT049cGFyc2VGbG9hdCh4KTt9fSxkZWZlcjpmdW5jdGlvbihBKXtBLl9fZXQoKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgeD0ib2ZmIix3PSJvbiIsdT0ifCIsdD0iZGVmYXVsdCIscz0ib2JqZWN0IixyPSImIixxPSJxeC5hc3BlY3RzIixwPSJxeC5tb2JpbGUubmF0aXZlc2Nyb2xsIixvPSJxeC5tb2JpbGUuZW11bGF0ZXRvdWNoIixuPSIkIixlPSJxeC5hbGxvd1VybFZhcmlhbnRzIixtPSJxeC5kZWJ1ZyIsaD0icXguY2xpZW50IixjPSJxeC5keW5sb2NhbGUiLGI9IndlYmtpdCIsZz0icXh2YXJpYW50IixmPSJvcGVyYSIsaj0iOiIsYT0icXguY29yZS5WYXJpYW50IixrPSJtc2h0bWwiLGQ9ImdlY2tvIjtxeC5Cb290c3RyYXAuZGVmaW5lKGEse3N0YXRpY3M6e19fa1g6e30sX19rWTp7fSxjb21waWxlcklzU2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRydWU7fSxkZWZpbmU6ZnVuY3Rpb24oeSx6LEEpe3t9O2lmKCF0aGlzLl9fa1hbeV0pe3RoaXMuX19rWFt5XT17fTt9ZWxzZXt9dGhpcy5fX2tYW3ldLmFsbG93ZWRWYWx1ZXM9ejt0aGlzLl9fa1hbeV0uZGVmYXVsdFZhbHVlPUE7fSxnZXQ6ZnVuY3Rpb24oQil7dmFyIEM9dGhpcy5fX2tYW0JdO3t9O2lmKEMudmFsdWUhPT11bmRlZmluZWQpe3JldHVybiBDLnZhbHVlO31yZXR1cm4gQy5kZWZhdWx0VmFsdWU7fSxfX2xhOmZ1bmN0aW9uKCl7aWYod2luZG93LnF4dmFyaWFudHMpe2Zvcih2YXIgRCBpbiBxeHZhcmlhbnRzKXt7fTtpZighdGhpcy5fX2tYW0RdKXt0aGlzLl9fa1hbRF09e307fXRoaXMuX19rWFtEXS52YWx1ZT1xeHZhcmlhbnRzW0RdO313aW5kb3cucXh2YXJpYW50cz11bmRlZmluZWQ7dHJ5e2RlbGV0ZSB3aW5kb3cucXh2YXJpYW50czt9Y2F0Y2goRSl7fXRoaXMuX19sYih0aGlzLl9fa1gpO319LF9fbGI6ZnVuY3Rpb24oKXtpZihxeC5jb3JlLlNldHRpbmcuZ2V0KGUpIT10cnVlKXtyZXR1cm47fXZhciBGPWRvY3VtZW50LmxvY2F0aW9uLnNlYXJjaC5zbGljZSgxKS5zcGxpdChyKTtmb3IodmFyIGk9MDtpPEYubGVuZ3RoO2krKyl7dmFyIEc9RltpXS5zcGxpdChqKTtpZihHLmxlbmd0aCE9M3x8R1swXSE9Zyl7Y29udGludWU7fXZhciBIPUdbMV07aWYoIXRoaXMuX19rWFtIXSl7dGhpcy5fX2tYW0hdPXt9O310aGlzLl9fa1hbSF0udmFsdWU9ZGVjb2RlVVJJQ29tcG9uZW50KEdbMl0pO319LHNlbGVjdDpmdW5jdGlvbihJLEope3t9O2Zvcih2YXIgSyBpbiBKKXtpZih0aGlzLmlzU2V0KEksSykpe3JldHVybiBKW0tdO319aWYoSlt0XSE9PXVuZGVmaW5lZCl7cmV0dXJuIEpbdF07fXt9O30saXNTZXQ6ZnVuY3Rpb24oTCxNKXt2YXIgTj1MK24rTTtpZih0aGlzLl9fa1lbTl0hPT11bmRlZmluZWQpe3JldHVybiB0aGlzLl9fa1lbTl07fXZhciBQPWZhbHNlO2lmKE0uaW5kZXhPZih1KTwwKXtQPXRoaXMuZ2V0KEwpPT09TTt9ZWxzZXt2YXIgTz1NLnNwbGl0KHUpO2Zvcih2YXIgaT0wLGw9Ty5sZW5ndGg7aTxsO2krKyl7aWYodGhpcy5nZXQoTCk9PT1PW2ldKXtQPXRydWU7YnJlYWs7fX19dGhpcy5fX2tZW05dPVA7cmV0dXJuIFA7fSxfX2xjOmZ1bmN0aW9uKHYpe3JldHVybiB0eXBlb2Ygdj09PXMmJnYhPT1udWxsJiZ2IGluc3RhbmNlb2YgQXJyYXk7fSxfX2xkOmZ1bmN0aW9uKHYpe3JldHVybiB0eXBlb2Ygdj09PXMmJnYhPT1udWxsJiYhKHYgaW5zdGFuY2VvZiBBcnJheSk7fSxfX2xlOmZ1bmN0aW9uKFEsUil7Zm9yKHZhciBpPTAsbD1RLmxlbmd0aDtpPGw7aSsrKXtpZihRW2ldPT1SKXtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9fSxkZWZlcjpmdW5jdGlvbihTKXtTLmRlZmluZShoLFtkLGssZixiXSxxeC5ib20uY2xpZW50LkVuZ2luZS5OQU1FKTtTLmRlZmluZShtLFt3LHhdLHcpO1MuZGVmaW5lKHEsW3cseF0seCk7Uy5kZWZpbmUoYyxbdyx4XSx3KTtTLmRlZmluZShvLFt3LHhdLHgpO1MuZGVmaW5lKHAsW3cseF0seCk7Uy5fX2xhKCk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGQ9InF4LmRvbS5Ob2RlIixjPSJxeC5jbGllbnQiLGI9IiI7cXguQ2xhc3MuZGVmaW5lKGQse3N0YXRpY3M6e0VMRU1FTlQ6MSxBVFRSSUJVVEU6MixURVhUOjMsQ0RBVEFfU0VDVElPTjo0LEVOVElUWV9SRUZFUkVOQ0U6NSxFTlRJVFk6NixQUk9DRVNTSU5HX0lOU1RSVUNUSU9OOjcsQ09NTUVOVDo4LERPQ1VNRU5UOjksRE9DVU1FTlRfVFlQRToxMCxET0NVTUVOVF9GUkFHTUVOVDoxMSxOT1RBVElPTjoxMixnZXREb2N1bWVudDpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlVHlwZT09PXRoaXMuRE9DVU1FTlQ/ZTplLm93bmVyRG9jdW1lbnR8fGUuZG9jdW1lbnQ7fSxnZXRXaW5kb3c6cXguY29yZS5WYXJpYW50LnNlbGVjdChjLHsibXNodG1sIjpmdW5jdGlvbihmKXtpZihmLm5vZGVUeXBlPT1udWxsKXtyZXR1cm4gZjt9aWYoZi5ub2RlVHlwZSE9PXRoaXMuRE9DVU1FTlQpe2Y9Zi5vd25lckRvY3VtZW50O31yZXR1cm4gZi5wYXJlbnRXaW5kb3c7fSwiZGVmYXVsdCI6ZnVuY3Rpb24oZyl7aWYoZy5ub2RlVHlwZT09bnVsbCl7cmV0dXJuIGc7fWlmKGcubm9kZVR5cGUhPT10aGlzLkRPQ1VNRU5UKXtnPWcub3duZXJEb2N1bWVudDt9cmV0dXJuIGcuZGVmYXVsdFZpZXc7fX0pLGdldERvY3VtZW50RWxlbWVudDpmdW5jdGlvbihoKXtyZXR1cm4gdGhpcy5nZXREb2N1bWVudChoKS5kb2N1bWVudEVsZW1lbnQ7fSxnZXRCb2R5RWxlbWVudDpmdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5nZXREb2N1bWVudChqKS5ib2R5O30saXNOb2RlOmZ1bmN0aW9uKGspe3JldHVybiAhIShrJiZrLm5vZGVUeXBlIT1udWxsKTt9LGlzRWxlbWVudDpmdW5jdGlvbihsKXtyZXR1cm4gISEobCYmbC5ub2RlVHlwZT09PXRoaXMuRUxFTUVOVCk7fSxpc0RvY3VtZW50OmZ1bmN0aW9uKG0pe3JldHVybiAhIShtJiZtLm5vZGVUeXBlPT09dGhpcy5ET0NVTUVOVCk7fSxpc1RleHQ6ZnVuY3Rpb24obil7cmV0dXJuICEhKG4mJm4ubm9kZVR5cGU9PT10aGlzLlRFWFQpO30saXNXaW5kb3c6ZnVuY3Rpb24obyl7cmV0dXJuICEhKG8mJm8uaGlzdG9yeSYmby5sb2NhdGlvbiYmby5kb2N1bWVudCk7fSxpc05vZGVOYW1lOmZ1bmN0aW9uKHAscSl7aWYoIXF8fCFwfHwhcC5ub2RlTmFtZSl7cmV0dXJuIGZhbHNlO31yZXR1cm4gcS50b0xvd2VyQ2FzZSgpPT1xeC5kb20uTm9kZS5nZXROYW1lKHApO30sZ2V0TmFtZTpmdW5jdGlvbihyKXtpZighcnx8IXIubm9kZU5hbWUpe3JldHVybiBudWxsO31yZXR1cm4gci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO30sZ2V0VGV4dDpmdW5jdGlvbihzKXtpZighc3x8IXMubm9kZVR5cGUpe3JldHVybiBudWxsO31zd2l0Y2gocy5ub2RlVHlwZSl7Y2FzZSAxOnZhciBpLGE9W10sdD1zLmNoaWxkTm9kZXMsbGVuZ3RoPXQubGVuZ3RoO2ZvcihpPTA7aTxsZW5ndGg7aSsrKXthW2ldPXRoaXMuZ2V0VGV4dCh0W2ldKTt9cmV0dXJuIGEuam9pbihiKTtjYXNlIDI6cmV0dXJuIHMubm9kZVZhbHVlO2JyZWFrO2Nhc2UgMzpyZXR1cm4gcy5ub2RlVmFsdWU7YnJlYWs7fXJldHVybiBudWxsO30saXNCbG9ja05vZGU6ZnVuY3Rpb24odSl7aWYoIXF4LmRvbS5Ob2RlLmlzRWxlbWVudCh1KSl7cmV0dXJuIGZhbHNlO311PXF4LmRvbS5Ob2RlLmdldE5hbWUodSk7cmV0dXJuIC9eKGJvZHl8Zm9ybXx0ZXh0YXJlYXxmaWVsZHNldHx1bHxvbHxkbHxkdHxkZHxsaXxkaXZ8aHJ8cHxoWzEtNl18cXVvdGV8cHJlfHRhYmxlfHRoZWFkfHRib2R5fHRmb290fHRyfHRkfHRofGlmcmFtZXxhZGRyZXNzfGJsb2NrcXVvdGUpJC8udGVzdCh1KTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGo9Im9uIixpPSJxeC5jbGllbnQiLGg9ImdlY2tvIixnPSJmdW5jdGlvbiIsZj0iSFRNTEV2ZW50cyIsZD0ibW91c2Vkb3duIixjPSJxeC5ib20uRXZlbnQiLGI9InJldHVybjsiLGE9Im1vdXNlb3ZlciI7cXguQ2xhc3MuZGVmaW5lKGMse3N0YXRpY3M6e2FkZE5hdGl2ZUxpc3RlbmVyOmZ1bmN0aW9uKGssbCxtLG4pe2lmKGsuYWRkRXZlbnRMaXN0ZW5lcil7ay5hZGRFdmVudExpc3RlbmVyKGwsbSwhIW4pO31lbHNlIGlmKGsuYXR0YWNoRXZlbnQpe2suYXR0YWNoRXZlbnQoaitsLG0pO319LHJlbW92ZU5hdGl2ZUxpc3RlbmVyOmZ1bmN0aW9uKG8scCxxLHIpe2lmKG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcil7by5yZW1vdmVFdmVudExpc3RlbmVyKHAscSwhIXIpO31lbHNlIGlmKG8uZGV0YWNoRXZlbnQpe3RyeXtvLmRldGFjaEV2ZW50KGorcCxxKTt9Y2F0Y2goZSl7aWYoZS5udW1iZXIhPT0tMjE0NjgyODIxOCl7dGhyb3cgZTt9fX19LGdldFRhcmdldDpmdW5jdGlvbihlKXtyZXR1cm4gZS50YXJnZXR8fGUuc3JjRWxlbWVudDt9LGdldFJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7aWYoZS5yZWxhdGVkVGFyZ2V0IT09dW5kZWZpbmVkKXtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoaSxoKSl7dHJ5e2UucmVsYXRlZFRhcmdldCYmZS5yZWxhdGVkVGFyZ2V0Lm5vZGVUeXBlO31jYXRjaChlKXtyZXR1cm4gbnVsbDt9fXJldHVybiBlLnJlbGF0ZWRUYXJnZXQ7fWVsc2UgaWYoZS5mcm9tRWxlbWVudCE9PXVuZGVmaW5lZCYmZS50eXBlPT09YSl7cmV0dXJuIGUuZnJvbUVsZW1lbnQ7fWVsc2UgaWYoZS50b0VsZW1lbnQhPT11bmRlZmluZWQpe3JldHVybiBlLnRvRWxlbWVudDt9ZWxzZXtyZXR1cm4gbnVsbDt9fSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbihlKXtpZihlLnByZXZlbnREZWZhdWx0KXtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoaSxoKSYmcXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTj49MS45JiZlLnR5cGU9PWQmJmUuYnV0dG9uPT0yKXtyZXR1cm47fWUucHJldmVudERlZmF1bHQoKTtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoaSxoKSYmcXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjwxLjkpe3RyeXtlLmtleUNvZGU9MDt9Y2F0Y2gocyl7fX19ZWxzZXt0cnl7ZS5rZXlDb2RlPTA7fWNhdGNoKHQpe31lLnJldHVyblZhbHVlPWZhbHNlO319LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbihlKXtpZihlLnN0b3BQcm9wYWdhdGlvbil7ZS5zdG9wUHJvcGFnYXRpb24oKTt9ZWxzZXtlLmNhbmNlbEJ1YmJsZT10cnVlO319LGZpcmU6ZnVuY3Rpb24odSx2KXtpZihkb2N1bWVudC5jcmVhdGVFdmVudCl7dmFyIHc9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoZik7dy5pbml0RXZlbnQodix0cnVlLHRydWUpO3JldHVybiAhdS5kaXNwYXRjaEV2ZW50KHcpO31lbHNle3ZhciB3PWRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7cmV0dXJuIHUuZmlyZUV2ZW50KGordix3KTt9fSxzdXBwb3J0c0V2ZW50OnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoaSx7IndlYmtpdCI6ZnVuY3Rpb24oeCx5KXtyZXR1cm4geC5oYXNPd25Qcm9wZXJ0eShqK3kpO30sImRlZmF1bHQiOmZ1bmN0aW9uKHosQSl7dmFyIEI9aitBO3ZhciBDPShCIGluIHopO2lmKCFDKXtDPXR5cGVvZiB6W0JdPT1nO2lmKCFDJiZ6LnNldEF0dHJpYnV0ZSl7ei5zZXRBdHRyaWJ1dGUoQixiKTtDPXR5cGVvZiB6W0JdPT1nO3oucmVtb3ZlQXR0cmlidXRlKEIpO319cmV0dXJuIEM7fX0pfX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIHI9InxidWJibGUiLHE9InxjYXB0dXJlIixwPSJ8IixvPSIiLG49Il8iLG09InVubG9hZCIsaz0iVU5LTk9XTl8iLGo9Il9fZnMiLGg9ImMiLGc9IkRPTV8iLGM9Il9fZnQiLGY9IldJTl8iLGU9IlFYXyIsYj0icXguZXZlbnQuTWFuYWdlciIsYT0iY2FwdHVyZSIsZD0iRE9DVU1FTlRfIjtxeC5DbGFzcy5kZWZpbmUoYix7ZXh0ZW5kOk9iamVjdCxjb25zdHJ1Y3Q6ZnVuY3Rpb24ocyx0KXt0aGlzLl9fZm89czt0aGlzLl9fZnA9cXguY29yZS5PYmplY3RSZWdpc3RyeS50b0hhc2hDb2RlKHMpO3RoaXMuX19mcT10O2lmKHMucXghPT1xeCl7dmFyIHNlbGY9dGhpcztxeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIocyxtLHF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QoZnVuY3Rpb24oKXtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIocyxtLGFyZ3VtZW50cy5jYWxsZWUpO3NlbGYuZGlzcG9zZSgpO30pKTt9dGhpcy5fX2ZyPXt9O3RoaXMuX19mcz17fTt0aGlzLl9fZnQ9e307dGhpcy5fX2Z1PXt9O30sc3RhdGljczp7X19mdjowLGdldE5leHRVbmlxdWVJZDpmdW5jdGlvbigpe3JldHVybiAodGhpcy5fX2Z2KyspK287fX0sbWVtYmVyczp7X19mcTpudWxsLF9fZnI6bnVsbCxfX2Z0Om51bGwsX19mdzpudWxsLF9fZnM6bnVsbCxfX2Z1Om51bGwsX19mbzpudWxsLF9fZnA6bnVsbCxnZXRXaW5kb3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZvO30sZ2V0V2luZG93SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZwO30sZ2V0SGFuZGxlcjpmdW5jdGlvbih1KXt2YXIgdj10aGlzLl9fZnNbdS5jbGFzc25hbWVdO2lmKHYpe3JldHVybiB2O31yZXR1cm4gdGhpcy5fX2ZzW3UuY2xhc3NuYW1lXT1uZXcgdSh0aGlzKTt9LGdldERpc3BhdGNoZXI6ZnVuY3Rpb24odyl7dmFyIHg9dGhpcy5fX2Z0W3cuY2xhc3NuYW1lXTtpZih4KXtyZXR1cm4geDt9cmV0dXJuIHRoaXMuX19mdFt3LmNsYXNzbmFtZV09bmV3IHcodGhpcyx0aGlzLl9fZnEpO30sZ2V0TGlzdGVuZXJzOmZ1bmN0aW9uKHkseixBKXt2YXIgQj15LiQkaGFzaHx8cXguY29yZS5PYmplY3RSZWdpc3RyeS50b0hhc2hDb2RlKHkpO3ZhciBEPXRoaXMuX19mcltCXTtpZighRCl7cmV0dXJuIG51bGw7fXZhciBFPXorKEE/cTpyKTt2YXIgQz1EW0VdO3JldHVybiBDP0MuY29uY2F0KCk6bnVsbDt9LHNlcmlhbGl6ZUxpc3RlbmVyczpmdW5jdGlvbihGKXt2YXIgTT1GLiQkaGFzaHx8cXguY29yZS5PYmplY3RSZWdpc3RyeS50b0hhc2hDb2RlKEYpO3ZhciBPPXRoaXMuX19mcltNXTt2YXIgSz1bXTtpZihPKXt2YXIgSSxOLEcsSixMO2Zvcih2YXIgSCBpbiBPKXtJPUguaW5kZXhPZihwKTtOPUguc3Vic3RyaW5nKDAsSSk7Rz1ILmNoYXJBdChJKzEpPT1oO0o9T1tIXTtmb3IodmFyIGk9MCxsPUoubGVuZ3RoO2k8bDtpKyspe0w9SltpXTtLLnB1c2goe3NlbGY6TC5jb250ZXh0LGhhbmRsZXI6TC5oYW5kbGVyLHR5cGU6TixjYXB0dXJlOkd9KTt9fX1yZXR1cm4gSzt9LHRvZ2dsZUF0dGFjaGVkRXZlbnRzOmZ1bmN0aW9uKFAsUSl7dmFyIFY9UC4kJGhhc2h8fHF4LmNvcmUuT2JqZWN0UmVnaXN0cnkudG9IYXNoQ29kZShQKTt2YXIgWD10aGlzLl9fZnJbVl07aWYoWCl7dmFyIFMsVyxSLFQ7Zm9yKHZhciBVIGluIFgpe1M9VS5pbmRleE9mKHApO1c9VS5zdWJzdHJpbmcoMCxTKTtSPVUuY2hhckNvZGVBdChTKzEpPT09OTk7VD1YW1VdO2lmKFEpe3RoaXMuX19meChQLFcsUik7fWVsc2V7dGhpcy5fX2Z5KFAsVyxSKTt9fX19LGhhc0xpc3RlbmVyOmZ1bmN0aW9uKFksYmEsYmIpe3t9O3ZhciBiYz1ZLiQkaGFzaHx8cXguY29yZS5PYmplY3RSZWdpc3RyeS50b0hhc2hDb2RlKFkpO3ZhciBiZT10aGlzLl9fZnJbYmNdO2lmKCFiZSl7cmV0dXJuIGZhbHNlO312YXIgYmY9YmErKGJiP3E6cik7dmFyIGJkPWJlW2JmXTtyZXR1cm4gYmQmJmJkLmxlbmd0aD4wO30saW1wb3J0TGlzdGVuZXJzOmZ1bmN0aW9uKGJnLGJoKXt7fTt2YXIgYm49YmcuJCRoYXNofHxxeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LnRvSGFzaENvZGUoYmcpO3ZhciBibz10aGlzLl9fZnJbYm5dPXt9O3ZhciBiaz1xeC5ldmVudC5NYW5hZ2VyO2Zvcih2YXIgYmkgaW4gYmgpe3ZhciBibD1iaFtiaV07dmFyIGJtPWJsLnR5cGUrKGJsLmNhcHR1cmU/cTpyKTt2YXIgYmo9Ym9bYm1dO2lmKCFiail7Ymo9Ym9bYm1dPVtdO3RoaXMuX19meChiZyxibC50eXBlLGJsLmNhcHR1cmUpO31iai5wdXNoKHtoYW5kbGVyOmJsLmxpc3RlbmVyLGNvbnRleHQ6Ymwuc2VsZix1bmlxdWU6YmwudW5pcXVlfHwoYmsuX19mdisrKStvfSk7fX0sYWRkTGlzdGVuZXI6ZnVuY3Rpb24oYnAsYnEsYnIsc2VsZixicyl7dmFyIGJ3O3t9O3ZhciBieD1icC4kJGhhc2h8fHF4LmNvcmUuT2JqZWN0UmVnaXN0cnkudG9IYXNoQ29kZShicCk7dmFyIGJ6PXRoaXMuX19mcltieF07aWYoIWJ6KXtiej10aGlzLl9fZnJbYnhdPXt9O312YXIgYnY9YnErKGJzP3E6cik7dmFyIGJ1PWJ6W2J2XTtpZighYnUpe2J1PWJ6W2J2XT1bXTt9aWYoYnUubGVuZ3RoPT09MCl7dGhpcy5fX2Z4KGJwLGJxLGJzKTt9dmFyIGJ5PShxeC5ldmVudC5NYW5hZ2VyLl9fZnYrKykrbzt2YXIgYnQ9e2hhbmRsZXI6YnIsY29udGV4dDpzZWxmLHVuaXF1ZTpieX07YnUucHVzaChidCk7cmV0dXJuIGJ2K3ArYnk7fSxmaW5kSGFuZGxlcjpmdW5jdGlvbihiQSxiQil7dmFyIGJOPWZhbHNlLGJGPWZhbHNlLGJPPWZhbHNlLGJDPWZhbHNlO3ZhciBiTDtpZihiQS5ub2RlVHlwZT09PTEpe2JOPXRydWU7Ykw9ZytiQS50YWdOYW1lLnRvTG93ZXJDYXNlKCkrbitiQjt9ZWxzZSBpZihiQS5ub2RlVHlwZT09PTkpe2JDPXRydWU7Ykw9ZCtiQjt9ZWxzZSBpZihiQT09dGhpcy5fX2ZvKXtiRj10cnVlO2JMPWYrYkI7fWVsc2UgaWYoYkEuY2xhc3NuYW1lKXtiTz10cnVlO2JMPWUrYkEuY2xhc3NuYW1lK24rYkI7fWVsc2V7Ykw9aytiQStuK2JCO312YXIgYkg9dGhpcy5fX2Z1O2lmKGJIW2JMXSl7cmV0dXJuIGJIW2JMXTt9dmFyIGJLPXRoaXMuX19mcS5nZXRIYW5kbGVycygpO3ZhciBiRz1xeC5ldmVudC5JRXZlbnRIYW5kbGVyO3ZhciBiSSxiSixiRSxiRDtmb3IodmFyIGk9MCxsPWJLLmxlbmd0aDtpPGw7aSsrKXtiST1iS1tpXTtiRT1iSS5TVVBQT1JURURfVFlQRVM7aWYoYkUmJiFiRVtiQl0pe2NvbnRpbnVlO31iRD1iSS5UQVJHRVRfQ0hFQ0s7aWYoYkQpe3ZhciBiTT1mYWxzZTtpZihiTiYmKChiRCZiRy5UQVJHRVRfRE9NTk9ERSkhPTApKXtiTT10cnVlO31lbHNlIGlmKGJGJiYoKGJEJmJHLlRBUkdFVF9XSU5ET1cpIT0wKSl7Yk09dHJ1ZTt9ZWxzZSBpZihiTyYmKChiRCZiRy5UQVJHRVRfT0JKRUNUKSE9MCkpe2JNPXRydWU7fWVsc2UgaWYoYkMmJigoYkQmYkcuVEFSR0VUX0RPQ1VNRU5UKSE9MCkpe2JNPXRydWU7fWlmKCFiTSl7Y29udGludWU7fX1iSj10aGlzLmdldEhhbmRsZXIoYktbaV0pO2lmKGJJLklHTk9SRV9DQU5fSEFORExFfHxiSi5jYW5IYW5kbGVFdmVudChiQSxiQikpe2JIW2JMXT1iSjtyZXR1cm4gYko7fX1yZXR1cm4gbnVsbDt9LF9fZng6ZnVuY3Rpb24oYlAsYlEsYlIpe3ZhciBiUz10aGlzLmZpbmRIYW5kbGVyKGJQLGJRKTtpZihiUyl7YlMucmVnaXN0ZXJFdmVudChiUCxiUSxiUik7cmV0dXJuO317fTt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKGJULGJVLGJWLHNlbGYsYlcpe3ZhciBjYjt7fTt2YXIgY2M9YlQuJCRoYXNofHxxeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LnRvSGFzaENvZGUoYlQpO3ZhciBjZD10aGlzLl9fZnJbY2NdO2lmKCFjZCl7cmV0dXJuIGZhbHNlO312YXIgYlg9YlUrKGJXP3E6cik7dmFyIGJZPWNkW2JYXTtpZighYlkpe3JldHVybiBmYWxzZTt9dmFyIGNhO2Zvcih2YXIgaT0wLGw9YlkubGVuZ3RoO2k8bDtpKyspe2NhPWJZW2ldO2lmKGNhLmhhbmRsZXI9PT1iViYmY2EuY29udGV4dD09PXNlbGYpe3F4LmxhbmcuQXJyYXkucmVtb3ZlQXQoYlksaSk7aWYoYlkubGVuZ3RoPT0wKXt0aGlzLl9fZnkoYlQsYlUsYlcpO31yZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9LHJlbW92ZUxpc3RlbmVyQnlJZDpmdW5jdGlvbihjZSxjZil7dmFyIGNsO3t9O3ZhciBjaj1jZi5zcGxpdChwKTt2YXIgY289Y2pbMF07dmFyIGNnPWNqWzFdLmNoYXJDb2RlQXQoMCk9PTk5O3ZhciBjbj1jalsyXTt2YXIgY209Y2UuJCRoYXNofHxxeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LnRvSGFzaENvZGUoY2UpO3ZhciBjcD10aGlzLl9fZnJbY21dO2lmKCFjcCl7cmV0dXJuIGZhbHNlO312YXIgY2s9Y28rKGNnP3E6cik7dmFyIGNpPWNwW2NrXTtpZighY2kpe3JldHVybiBmYWxzZTt9dmFyIGNoO2Zvcih2YXIgaT0wLGw9Y2kubGVuZ3RoO2k8bDtpKyspe2NoPWNpW2ldO2lmKGNoLnVuaXF1ZT09PWNuKXtxeC5sYW5nLkFycmF5LnJlbW92ZUF0KGNpLGkpO2lmKGNpLmxlbmd0aD09MCl7dGhpcy5fX2Z5KGNlLGNvLGNnKTt9cmV0dXJuIHRydWU7fX1yZXR1cm4gZmFsc2U7fSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oY3Epe3ZhciBjdT1jcS4kJGhhc2h8fHF4LmNvcmUuT2JqZWN0UmVnaXN0cnkudG9IYXNoQ29kZShjcSk7dmFyIGN3PXRoaXMuX19mcltjdV07aWYoIWN3KXtyZXR1cm4gZmFsc2U7fXZhciBjcyxjdixjcjtmb3IodmFyIGN0IGluIGN3KXtpZihjd1tjdF0ubGVuZ3RoPjApe2NzPWN0LnNwbGl0KHApO2N2PWNzWzBdO2NyPWNzWzFdPT09YTt0aGlzLl9fZnkoY3EsY3YsY3IpO319ZGVsZXRlIHRoaXMuX19mcltjdV07cmV0dXJuIHRydWU7fSxkZWxldGVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oY3gpe2RlbGV0ZSB0aGlzLl9fZnJbY3hdO30sX19meTpmdW5jdGlvbihjeSxjeixjQSl7dmFyIGNCPXRoaXMuZmluZEhhbmRsZXIoY3ksY3opO2lmKGNCKXtjQi51bnJlZ2lzdGVyRXZlbnQoY3ksY3osY0EpO3JldHVybjt9e307fSxkaXNwYXRjaEV2ZW50OmZ1bmN0aW9uKGNDLGV2ZW50KXt2YXIgY0g7e307dmFyIGNJPWV2ZW50LmdldFR5cGUoKTtpZighZXZlbnQuZ2V0QnViYmxlcygpJiYhdGhpcy5oYXNMaXN0ZW5lcihjQyxjSSkpe3F4LmV2ZW50LlBvb2wuZ2V0SW5zdGFuY2UoKS5wb29sT2JqZWN0KGV2ZW50KTtyZXR1cm4gdHJ1ZTt9aWYoIWV2ZW50LmdldFRhcmdldCgpKXtldmVudC5zZXRUYXJnZXQoY0MpO312YXIgY0c9dGhpcy5fX2ZxLmdldERpc3BhdGNoZXJzKCk7dmFyIGNGO3ZhciBjRT1mYWxzZTtmb3IodmFyIGk9MCxsPWNHLmxlbmd0aDtpPGw7aSsrKXtjRj10aGlzLmdldERpc3BhdGNoZXIoY0dbaV0pO2lmKGNGLmNhbkRpc3BhdGNoRXZlbnQoY0MsZXZlbnQsY0kpKXtjRi5kaXNwYXRjaEV2ZW50KGNDLGV2ZW50LGNJKTtjRT10cnVlO2JyZWFrO319aWYoIWNFKXt7fTtyZXR1cm4gdHJ1ZTt9dmFyIGNEPWV2ZW50LmdldERlZmF1bHRQcmV2ZW50ZWQoKTtxeC5ldmVudC5Qb29sLmdldEluc3RhbmNlKCkucG9vbE9iamVjdChldmVudCk7cmV0dXJuICFjRDt9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLl9fZnEucmVtb3ZlTWFuYWdlcih0aGlzKTtxeC51dGlsLkRpc3Bvc2VVdGlsLmRpc3Bvc2VNYXAodGhpcyxqKTtxeC51dGlsLkRpc3Bvc2VVdGlsLmRpc3Bvc2VNYXAodGhpcyxjKTt0aGlzLl9fZnI9dGhpcy5fX2ZvPXRoaXMuX19mdz1udWxsO3RoaXMuX19mcT10aGlzLl9fZnU9bnVsbDt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGc9Im1zaHRtbCIsZj0icXguY2xpZW50IixlPSJbb2JqZWN0IEFycmF5XSIsZD0icXgubGFuZy5BcnJheSIsYz0icXgiLGI9Im51bWJlciIsYT0ic3RyaW5nIjtxeC5DbGFzcy5kZWZpbmUoZCx7c3RhdGljczp7dG9BcnJheTpmdW5jdGlvbihoLGope3JldHVybiB0aGlzLmNhc3QoaCxBcnJheSxqKTt9LGNhc3Q6ZnVuY3Rpb24oayxtLG4pe2lmKGsuY29uc3RydWN0b3I9PT1tKXtyZXR1cm4gazt9aWYocXguQ2xhc3MuaGFzSW50ZXJmYWNlKGsscXguZGF0YS5JTGlzdERhdGEpKXt2YXIgaz1rLnRvQXJyYXkoKTt9dmFyIG89bmV3IG07aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGYsZykpe2lmKGsuaXRlbSl7Zm9yKHZhciBpPW58fDAsbD1rLmxlbmd0aDtpPGw7aSsrKXtvLnB1c2goa1tpXSk7fXJldHVybiBvO319aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGspPT09ZSYmbj09bnVsbCl7by5wdXNoLmFwcGx5KG8sayk7fWVsc2V7by5wdXNoLmFwcGx5KG8sQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoayxufHwwKSk7fXJldHVybiBvO30sZnJvbUFyZ3VtZW50czpmdW5jdGlvbihwLHEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChwLHF8fDApO30sZnJvbUNvbGxlY3Rpb246ZnVuY3Rpb24ocil7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGYsZykpe2lmKHIuaXRlbSl7dmFyIHM9W107Zm9yKHZhciBpPTAsbD1yLmxlbmd0aDtpPGw7aSsrKXtzW2ldPXJbaV07fXJldHVybiBzO319cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIsMCk7fSxmcm9tU2hvcnRIYW5kOmZ1bmN0aW9uKHQpe3ZhciB2PXQubGVuZ3RoO3ZhciB1PXF4LmxhbmcuQXJyYXkuY2xvbmUodCk7c3dpdGNoKHYpe2Nhc2UgMTp1WzFdPXVbMl09dVszXT11WzBdO2JyZWFrO2Nhc2UgMjp1WzJdPXVbMF07Y2FzZSAzOnVbM109dVsxXTt9cmV0dXJuIHU7fSxjbG9uZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5jb25jYXQoKTt9LGluc2VydEF0OmZ1bmN0aW9uKHgseSxpKXt4LnNwbGljZShpLDAseSk7cmV0dXJuIHg7fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oeixBLEIpe3ZhciBpPXouaW5kZXhPZihCKTtpZihpPT0tMSl7ei5wdXNoKEEpO31lbHNle3ouc3BsaWNlKGksMCxBKTt9cmV0dXJuIHo7fSxpbnNlcnRBZnRlcjpmdW5jdGlvbihDLEQsRSl7dmFyIGk9Qy5pbmRleE9mKEUpO2lmKGk9PS0xfHxpPT0oQy5sZW5ndGgtMSkpe0MucHVzaChEKTt9ZWxzZXtDLnNwbGljZShpKzEsMCxEKTt9cmV0dXJuIEM7fSxyZW1vdmVBdDpmdW5jdGlvbihGLGkpe3JldHVybiBGLnNwbGljZShpLDEpWzBdO30scmVtb3ZlQWxsOmZ1bmN0aW9uKEcpe0cubGVuZ3RoPTA7cmV0dXJuIHRoaXM7fSxhcHBlbmQ6ZnVuY3Rpb24oSCxJKXt7fTtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShILEkpO3JldHVybiBIO30sZXhjbHVkZTpmdW5jdGlvbihKLEspe3t9O2Zvcih2YXIgaT0wLE09Sy5sZW5ndGgsTDtpPE07aSsrKXtMPUouaW5kZXhPZihLW2ldKTtpZihMIT0tMSl7Si5zcGxpY2UoTCwxKTt9fXJldHVybiBKO30scmVtb3ZlOmZ1bmN0aW9uKE4sTyl7dmFyIGk9Ti5pbmRleE9mKE8pO2lmKGkhPS0xKXtOLnNwbGljZShpLDEpO3JldHVybiBPO319LGNvbnRhaW5zOmZ1bmN0aW9uKFAsUSl7cmV0dXJuIFAuaW5kZXhPZihRKSE9PS0xO30sZXF1YWxzOmZ1bmN0aW9uKFIsUyl7dmFyIGxlbmd0aD1SLmxlbmd0aDtpZihsZW5ndGghPT1TLmxlbmd0aCl7cmV0dXJuIGZhbHNlO31mb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe2lmKFJbaV0hPT1TW2ldKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTt9LHN1bTpmdW5jdGlvbihUKXt2YXIgVT0wO2Zvcih2YXIgaT0wLGw9VC5sZW5ndGg7aTxsO2krKyl7VSs9VFtpXTt9cmV0dXJuIFU7fSxtYXg6ZnVuY3Rpb24oVil7e307dmFyIGksWD1WLmxlbmd0aCxXPVZbMF07Zm9yKGk9MTtpPFg7aSsrKXtpZihWW2ldPlcpe1c9VltpXTt9fXJldHVybiBXPT09dW5kZWZpbmVkP251bGw6Vzt9LG1pbjpmdW5jdGlvbihZKXt7fTt2YXIgaSxiYj1ZLmxlbmd0aCxiYT1ZWzBdO2ZvcihpPTE7aTxiYjtpKyspe2lmKFlbaV08YmEpe2JhPVlbaV07fX1yZXR1cm4gYmE9PT11bmRlZmluZWQ/bnVsbDpiYTt9LHVuaXF1ZTpmdW5jdGlvbihiYyl7dmFyIGJtPVtdLGJlPXt9LGJoPXt9LGJqPXt9O3ZhciBiaSxiZD0wO3ZhciBibj1jK3F4LmxhbmcuRGF0ZS5ub3coKTt2YXIgYmY9ZmFsc2UsYmw9ZmFsc2UsYm89ZmFsc2U7Zm9yKHZhciBpPTAsYms9YmMubGVuZ3RoO2k8Yms7aSsrKXtiaT1iY1tpXTtpZihiaT09PW51bGwpe2lmKCFiZil7YmY9dHJ1ZTtibS5wdXNoKGJpKTt9fWVsc2UgaWYoYmk9PT11bmRlZmluZWQpe31lbHNlIGlmKGJpPT09ZmFsc2Upe2lmKCFibCl7Ymw9dHJ1ZTtibS5wdXNoKGJpKTt9fWVsc2UgaWYoYmk9PT10cnVlKXtpZighYm8pe2JvPXRydWU7Ym0ucHVzaChiaSk7fX1lbHNlIGlmKHR5cGVvZiBiaT09PWEpe2lmKCFiZVtiaV0pe2JlW2JpXT0xO2JtLnB1c2goYmkpO319ZWxzZSBpZih0eXBlb2YgYmk9PT1iKXtpZighYmhbYmldKXtiaFtiaV09MTtibS5wdXNoKGJpKTt9fWVsc2V7Ymc9YmlbYm5dO2lmKGJnPT1udWxsKXtiZz1iaVtibl09YmQrKzt9aWYoIWJqW2JnXSl7YmpbYmddPWJpO2JtLnB1c2goYmkpO319fWZvcih2YXIgYmcgaW4gYmope3RyeXtkZWxldGUgYmpbYmddW2JuXTt9Y2F0Y2goYnApe3RyeXtialtiZ11bYm5dPW51bGw7fWNhdGNoKGJxKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjbGVhbi11cCBtYXAgZW50cnkgZG9uZU9iamVjdHNbIitiZysiXVsiK2JuKyJdIik7fX19cmV0dXJuIGJtO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZj0iKCkiLGU9Ii4iLGQ9Ii5wcm90b3R5cGUuIixjPSdhbm9ueW1vdXMoKScsYj0icXgubGFuZy5GdW5jdGlvbiIsYT0iLmNvbnN0cnVjdG9yKCkiO3F4LkNsYXNzLmRlZmluZShiLHtzdGF0aWNzOntnZXRDYWxsZXI6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuY2FsbGVyP2cuY2FsbGVyLmNhbGxlZTpnLmNhbGxlZS5jYWxsZXI7fSxnZXROYW1lOmZ1bmN0aW9uKGgpe2lmKGguZGlzcGxheU5hbWUpe3JldHVybiBoLmRpc3BsYXlOYW1lO31pZihoLiQkb3JpZ2luYWx8fGgud3JhcHBlcnx8aC5jbGFzc25hbWUpe3JldHVybiBoLmNsYXNzbmFtZSthO31pZihoLiQkbWl4aW4pe2Zvcih2YXIgaiBpbiBoLiQkbWl4aW4uJCRtZW1iZXJzKXtpZihoLiQkbWl4aW4uJCRtZW1iZXJzW2pdPT1oKXtyZXR1cm4gaC4kJG1peGluLm5hbWUrZCtqK2Y7fX1mb3IodmFyIGogaW4gaC4kJG1peGluKXtpZihoLiQkbWl4aW5bal09PWgpe3JldHVybiBoLiQkbWl4aW4ubmFtZStlK2orZjt9fX1pZihoLnNlbGYpe3ZhciBrPWguc2VsZi5jb25zdHJ1Y3RvcjtpZihrKXtmb3IodmFyIGogaW4gay5wcm90b3R5cGUpe2lmKGsucHJvdG90eXBlW2pdPT1oKXtyZXR1cm4gay5jbGFzc25hbWUrZCtqK2Y7fX1mb3IodmFyIGogaW4gayl7aWYoa1tqXT09aCl7cmV0dXJuIGsuY2xhc3NuYW1lK2UraitmO319fX12YXIgaT1oLnRvU3RyaW5nKCkubWF0Y2goL2Z1bmN0aW9uXHMqKFx3KilccypcKC4qLyk7aWYoaSYmaS5sZW5ndGg+PTEmJmlbMV0pe3JldHVybiBpWzFdK2Y7fXJldHVybiBjO30sZ2xvYmFsRXZhbDpmdW5jdGlvbihsKXtpZih3aW5kb3cuZXhlY1NjcmlwdCl7cmV0dXJuIHdpbmRvdy5leGVjU2NyaXB0KGwpO31lbHNle3JldHVybiBldmFsLmNhbGwod2luZG93LGwpO319LGVtcHR5OmZ1bmN0aW9uKCl7fSxyZXR1cm5UcnVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRydWU7fSxyZXR1cm5GYWxzZTpmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9LHJldHVybk51bGw6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbDt9LHJldHVyblRoaXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpczt9LHJldHVyblplcm86ZnVuY3Rpb24oKXtyZXR1cm4gMDt9LGNyZWF0ZTpmdW5jdGlvbihtLG4pe3t9O2lmKCFuKXtyZXR1cm4gbTt9aWYoIShuLnNlbGZ8fG4uYXJnc3x8bi5kZWxheSE9bnVsbHx8bi5wZXJpb2RpY2FsIT1udWxsfHxuLmF0dGVtcHQpKXtyZXR1cm4gbTt9cmV0dXJuIGZ1bmN0aW9uKGV2ZW50KXt7fTt2YXIgcD1xeC5sYW5nLkFycmF5LmZyb21Bcmd1bWVudHMoYXJndW1lbnRzKTtpZihuLmFyZ3Mpe3A9bi5hcmdzLmNvbmNhdChwKTt9aWYobi5kZWxheXx8bi5wZXJpb2RpY2FsKXt2YXIgbz1xeC5ldmVudC5HbG9iYWxFcnJvci5vYnNlcnZlTWV0aG9kKGZ1bmN0aW9uKCl7cmV0dXJuIG0uYXBwbHkobi5zZWxmfHx0aGlzLHApO30pO2lmKG4uZGVsYXkpe3JldHVybiB3aW5kb3cuc2V0VGltZW91dChvLG4uZGVsYXkpO31pZihuLnBlcmlvZGljYWwpe3JldHVybiB3aW5kb3cuc2V0SW50ZXJ2YWwobyxuLnBlcmlvZGljYWwpO319ZWxzZSBpZihuLmF0dGVtcHQpe3ZhciBxPWZhbHNlO3RyeXtxPW0uYXBwbHkobi5zZWxmfHx0aGlzLHApO31jYXRjaChyKXt9cmV0dXJuIHE7fWVsc2V7cmV0dXJuIG0uYXBwbHkobi5zZWxmfHx0aGlzLHApO319O30sYmluZDpmdW5jdGlvbihzLHNlbGYsdCl7cmV0dXJuIHRoaXMuY3JlYXRlKHMse3NlbGY6c2VsZixhcmdzOmFyZ3VtZW50cy5sZW5ndGg+Mj9xeC5sYW5nLkFycmF5LmZyb21Bcmd1bWVudHMoYXJndW1lbnRzLDIpOm51bGx9KTt9LGN1cnJ5OmZ1bmN0aW9uKHUsdil7cmV0dXJuIHRoaXMuY3JlYXRlKHUse2FyZ3M6YXJndW1lbnRzLmxlbmd0aD4xP3F4LmxhbmcuQXJyYXkuZnJvbUFyZ3VtZW50cyhhcmd1bWVudHMsMSk6bnVsbH0pO30sbGlzdGVuZXI6ZnVuY3Rpb24odyxzZWxmLHgpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Myl7cmV0dXJuIGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gdy5jYWxsKHNlbGZ8fHRoaXMsZXZlbnR8fHdpbmRvdy5ldmVudCk7fTt9ZWxzZXt2YXIgeT1xeC5sYW5nLkFycmF5LmZyb21Bcmd1bWVudHMoYXJndW1lbnRzLDIpO3JldHVybiBmdW5jdGlvbihldmVudCl7dmFyIHo9W2V2ZW50fHx3aW5kb3cuZXZlbnRdO3oucHVzaC5hcHBseSh6LHkpO3cuYXBwbHkoc2VsZnx8dGhpcyx6KTt9O319LGF0dGVtcHQ6ZnVuY3Rpb24oQSxzZWxmLEIpe3JldHVybiB0aGlzLmNyZWF0ZShBLHtzZWxmOnNlbGYsYXR0ZW1wdDp0cnVlLGFyZ3M6YXJndW1lbnRzLmxlbmd0aD4yP3F4LmxhbmcuQXJyYXkuZnJvbUFyZ3VtZW50cyhhcmd1bWVudHMsMik6bnVsbH0pKCk7fSxkZWxheTpmdW5jdGlvbihDLEQsc2VsZixFKXtyZXR1cm4gdGhpcy5jcmVhdGUoQyx7ZGVsYXk6RCxzZWxmOnNlbGYsYXJnczphcmd1bWVudHMubGVuZ3RoPjM/cXgubGFuZy5BcnJheS5mcm9tQXJndW1lbnRzKGFyZ3VtZW50cywzKTpudWxsfSkoKTt9LHBlcmlvZGljYWw6ZnVuY3Rpb24oRixHLHNlbGYsSCl7cmV0dXJuIHRoaXMuY3JlYXRlKEYse3BlcmlvZGljYWw6RyxzZWxmOnNlbGYsYXJnczphcmd1bWVudHMubGVuZ3RoPjM/cXgubGFuZy5BcnJheS5mcm9tQXJndW1lbnRzKGFyZ3VtZW50cywzKTpudWxsfSkoKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGM9InF4LmV2ZW50LlJlZ2lzdHJhdGlvbiI7cXguQ2xhc3MuZGVmaW5lKGMse3N0YXRpY3M6e19fZmM6e30sZ2V0TWFuYWdlcjpmdW5jdGlvbihkKXtpZihkPT1udWxsKXt7fTtkPXdpbmRvdzt9ZWxzZSBpZihkLm5vZGVUeXBlKXtkPXF4LmRvbS5Ob2RlLmdldFdpbmRvdyhkKTt9ZWxzZSBpZighcXguZG9tLk5vZGUuaXNXaW5kb3coZCkpe2Q9d2luZG93O312YXIgZj1kLiQkaGFzaHx8cXguY29yZS5PYmplY3RSZWdpc3RyeS50b0hhc2hDb2RlKGQpO3ZhciBlPXRoaXMuX19mY1tmXTtpZighZSl7ZT1uZXcgcXguZXZlbnQuTWFuYWdlcihkLHRoaXMpO3RoaXMuX19mY1tmXT1lO31yZXR1cm4gZTt9LHJlbW92ZU1hbmFnZXI6ZnVuY3Rpb24oZyl7dmFyIGg9Zy5nZXRXaW5kb3dJZCgpO2RlbGV0ZSB0aGlzLl9fZmNbaF07fSxhZGRMaXN0ZW5lcjpmdW5jdGlvbihpLGosayxzZWxmLGwpe3JldHVybiB0aGlzLmdldE1hbmFnZXIoaSkuYWRkTGlzdGVuZXIoaSxqLGssc2VsZixsKTt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKG0sbixvLHNlbGYscCl7cmV0dXJuIHRoaXMuZ2V0TWFuYWdlcihtKS5yZW1vdmVMaXN0ZW5lcihtLG4sbyxzZWxmLHApO30scmVtb3ZlTGlzdGVuZXJCeUlkOmZ1bmN0aW9uKHEscil7cmV0dXJuIHRoaXMuZ2V0TWFuYWdlcihxKS5yZW1vdmVMaXN0ZW5lckJ5SWQocSxyKTt9LHJlbW92ZUFsbExpc3RlbmVyczpmdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5nZXRNYW5hZ2VyKHMpLnJlbW92ZUFsbExpc3RlbmVycyhzKTt9LGRlbGV0ZUFsbExpc3RlbmVyczpmdW5jdGlvbih0KXt2YXIgdT10LiQkaGFzaDtpZih1KXt0aGlzLmdldE1hbmFnZXIodCkuZGVsZXRlQWxsTGlzdGVuZXJzKHUpO319LGhhc0xpc3RlbmVyOmZ1bmN0aW9uKHYsdyx4KXtyZXR1cm4gdGhpcy5nZXRNYW5hZ2VyKHYpLmhhc0xpc3RlbmVyKHYsdyx4KTt9LHNlcmlhbGl6ZUxpc3RlbmVyczpmdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5nZXRNYW5hZ2VyKHkpLnNlcmlhbGl6ZUxpc3RlbmVycyh5KTt9LGNyZWF0ZUV2ZW50OmZ1bmN0aW9uKHosQSxCKXt7fTtpZihBPT1udWxsKXtBPXF4LmV2ZW50LnR5cGUuRXZlbnQ7fXZhciBDPXF4LmV2ZW50LlBvb2wuZ2V0SW5zdGFuY2UoKS5nZXRPYmplY3QoQSk7Qj9DLmluaXQuYXBwbHkoQyxCKTpDLmluaXQoKTtpZih6KXtDLnNldFR5cGUoeik7fXJldHVybiBDO30sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihELGV2ZW50KXtyZXR1cm4gdGhpcy5nZXRNYW5hZ2VyKEQpLmRpc3BhdGNoRXZlbnQoRCxldmVudCk7fSxmaXJlRXZlbnQ6ZnVuY3Rpb24oRSxGLEcsSCl7dmFyIEk7e307dmFyIEo9dGhpcy5jcmVhdGVFdmVudChGLEd8fG51bGwsSCk7cmV0dXJuIHRoaXMuZ2V0TWFuYWdlcihFKS5kaXNwYXRjaEV2ZW50KEUsSik7fSxmaXJlTm9uQnViYmxpbmdFdmVudDpmdW5jdGlvbihLLEwsTSxOKXt7fTt2YXIgTz10aGlzLmdldE1hbmFnZXIoSyk7aWYoIU8uaGFzTGlzdGVuZXIoSyxMLGZhbHNlKSl7cmV0dXJuIHRydWU7fXZhciBQPXRoaXMuY3JlYXRlRXZlbnQoTCxNfHxudWxsLE4pO3JldHVybiBPLmRpc3BhdGNoRXZlbnQoSyxQKTt9LFBSSU9SSVRZX0ZJUlNUOi0zMjAwMCxQUklPUklUWV9OT1JNQUw6MCxQUklPUklUWV9MQVNUOjMyMDAwLF9fZmQ6W10sYWRkSGFuZGxlcjpmdW5jdGlvbihRKXt7fTt0aGlzLl9fZmQucHVzaChRKTt0aGlzLl9fZmQuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLlBSSU9SSVRZLWIuUFJJT1JJVFk7fSk7fSxnZXRIYW5kbGVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmQ7fSxfX2ZlOltdLGFkZERpc3BhdGNoZXI6ZnVuY3Rpb24oUixTKXt7fTt0aGlzLl9fZmUucHVzaChSKTt0aGlzLl9fZmUuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLlBSSU9SSVRZLWIuUFJJT1JJVFk7fSk7fSxnZXREaXNwYXRjaGVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmU7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBlPSIkJGhhc2giLGQ9IiIsYz0icXguY29yZS5PYmplY3RSZWdpc3RyeSI7cXguQ2xhc3MuZGVmaW5lKGMse3N0YXRpY3M6e2luU2h1dERvd246ZmFsc2UsX19jTTp7fSxfX2NOOjAsX19jTzpbXSxyZWdpc3RlcjpmdW5jdGlvbihmKXt2YXIgaj10aGlzLl9fY007aWYoIWope3JldHVybjt9dmFyIGg9Zi4kJGhhc2g7aWYoaD09bnVsbCl7dmFyIGc9dGhpcy5fX2NPO2lmKGcubGVuZ3RoPjApe2g9Zy5wb3AoKTt9ZWxzZXtoPSh0aGlzLl9fY04rKykrZDt9Zi4kJGhhc2g9aDt9e307altoXT1mO30sdW5yZWdpc3RlcjpmdW5jdGlvbihrKXt2YXIgbT1rLiQkaGFzaDtpZihtPT1udWxsKXtyZXR1cm47fXZhciBuPXRoaXMuX19jTTtpZihuJiZuW21dKXtkZWxldGUgblttXTt0aGlzLl9fY08ucHVzaChtKTt9dHJ5e2RlbGV0ZSBrLiQkaGFzaDt9Y2F0Y2gobyl7aWYoay5yZW1vdmVBdHRyaWJ1dGUpe2sucmVtb3ZlQXR0cmlidXRlKGUpO319fSx0b0hhc2hDb2RlOmZ1bmN0aW9uKHApe3t9O3ZhciByPXAuJCRoYXNoO2lmKHIhPW51bGwpe3JldHVybiByO312YXIgcT10aGlzLl9fY087aWYocS5sZW5ndGg+MCl7cj1xLnBvcCgpO31lbHNle3I9KHRoaXMuX19jTisrKStkO31yZXR1cm4gcC4kJGhhc2g9cjt9LGNsZWFySGFzaENvZGU6ZnVuY3Rpb24ocyl7e307dmFyIHQ9cy4kJGhhc2g7aWYodCE9bnVsbCl7dGhpcy5fX2NPLnB1c2godCk7dHJ5e2RlbGV0ZSBzLiQkaGFzaDt9Y2F0Y2godSl7aWYocy5yZW1vdmVBdHRyaWJ1dGUpe3MucmVtb3ZlQXR0cmlidXRlKGUpO319fX0sZnJvbUhhc2hDb2RlOmZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLl9fY01bdl18fG51bGw7fSxzaHV0ZG93bjpmdW5jdGlvbigpe3RoaXMuaW5TaHV0RG93bj10cnVlO3ZhciB4PXRoaXMuX19jTTt2YXIgej1bXTtmb3IodmFyIHkgaW4geCl7ei5wdXNoKHkpO316LnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gcGFyc2VJbnQoYiwxMCktcGFyc2VJbnQoYSwxMCk7fSk7dmFyIHcsaT0wLGw9ei5sZW5ndGg7d2hpbGUodHJ1ZSl7dHJ5e2Zvcig7aTxsO2krKyl7eT16W2ldO3c9eFt5XTtpZih3JiZ3LmRpc3Bvc2Upe3cuZGlzcG9zZSgpO319fWNhdGNoKEEpe3F4LkJvb3RzdHJhcC5lcnJvcih0aGlzLCJDb3VsZCBub3QgZGlzcG9zZSBvYmplY3QgIit3LnRvU3RyaW5nKCkrIjogIitBKTtpZihpIT09bCl7aSsrO2NvbnRpbnVlO319YnJlYWs7fXF4LkJvb3RzdHJhcC5kZWJ1Zyh0aGlzLCJEaXNwb3NlZCAiK2wrIiBvYmplY3RzIik7ZGVsZXRlIHRoaXMuX19jTTt9LGdldFJlZ2lzdHJ5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jTTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LmRhdGEuTUJpbmRpbmciO3F4Lk1peGluLmRlZmluZShhLHttZW1iZXJzOntiaW5kOmZ1bmN0aW9uKGIsYyxkLGUpe3JldHVybiBxeC5kYXRhLlNpbmdsZVZhbHVlQmluZGluZy5iaW5kKHRoaXMsYixjLGQsZSk7fSxyZW1vdmVCaW5kaW5nOmZ1bmN0aW9uKGYpe3F4LmRhdGEuU2luZ2xlVmFsdWVCaW5kaW5nLnJlbW92ZUJpbmRpbmdGcm9tT2JqZWN0KHRoaXMsZik7fSxyZW1vdmVBbGxCaW5kaW5nczpmdW5jdGlvbigpe3F4LmRhdGEuU2luZ2xlVmFsdWVCaW5kaW5nLnJlbW92ZUFsbEJpbmRpbmdzRm9yT2JqZWN0KHRoaXMpO30sZ2V0QmluZGluZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gcXguZGF0YS5TaW5nbGVWYWx1ZUJpbmRpbmcuZ2V0QWxsQmluZGluZ3NGb3JPYmplY3QodGhpcyk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC5sYW5nLlJpbmdCdWZmZXIiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6T2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbihiKXt0aGlzLnNldE1heEVudHJpZXMoYnx8NTApO30sbWVtYmVyczp7X19pcTowLF9faXI6MCxfX2lzOmZhbHNlLF9faXQ6MCxfX2l1Om51bGwsX19pdjpudWxsLHNldE1heEVudHJpZXM6ZnVuY3Rpb24oYyl7dGhpcy5fX2l2PWM7dGhpcy5jbGVhcigpO30sZ2V0TWF4RW50cmllczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXY7fSxhZGRFbnRyeTpmdW5jdGlvbihkKXt0aGlzLl9faXVbdGhpcy5fX2lxXT1kO3RoaXMuX19pcT10aGlzLl9faXcodGhpcy5fX2lxLDEpO3ZhciBlPXRoaXMuZ2V0TWF4RW50cmllcygpO2lmKHRoaXMuX19pcjxlKXt0aGlzLl9faXIrKzt9aWYodGhpcy5fX2lzJiYodGhpcy5fX2l0PGUpKXt0aGlzLl9faXQrKzt9fSxtYXJrOmZ1bmN0aW9uKCl7dGhpcy5fX2lzPXRydWU7dGhpcy5fX2l0PTA7fSxjbGVhck1hcms6ZnVuY3Rpb24oKXt0aGlzLl9faXM9ZmFsc2U7fSxnZXRBbGxFbnRyaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RW50cmllcyh0aGlzLmdldE1heEVudHJpZXMoKSxmYWxzZSk7fSxnZXRFbnRyaWVzOmZ1bmN0aW9uKGYsZyl7aWYoZj50aGlzLl9faXIpe2Y9dGhpcy5fX2lyO31pZihnJiZ0aGlzLl9faXMmJihmPnRoaXMuX19pdCkpe2Y9dGhpcy5fX2l0O31pZihmPjApe3ZhciBpPXRoaXMuX19pdyh0aGlzLl9faXEsLTEpO3ZhciBoPXRoaXMuX19pdyhpLC1mKzEpO3ZhciBqO2lmKGg8PWkpe2o9dGhpcy5fX2l1LnNsaWNlKGgsaSsxKTt9ZWxzZXtqPXRoaXMuX19pdS5zbGljZShoLHRoaXMuX19pcikuY29uY2F0KHRoaXMuX19pdS5zbGljZSgwLGkrMSkpO319ZWxzZXtqPVtdO31yZXR1cm4gajt9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5fX2l1PW5ldyBBcnJheSh0aGlzLmdldE1heEVudHJpZXMoKSk7dGhpcy5fX2lyPTA7dGhpcy5fX2l0PTA7dGhpcy5fX2lxPTA7fSxfX2l3OmZ1bmN0aW9uKGssbCl7dmFyIG09dGhpcy5nZXRNYXhFbnRyaWVzKCk7dmFyIG49KGsrbCklbTtpZihuPDApe24rPW07fXJldHVybiBuO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgubG9nLmFwcGVuZGVyLlJpbmdCdWZmZXIiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXgubGFuZy5SaW5nQnVmZmVyLGNvbnN0cnVjdDpmdW5jdGlvbihiKXt0aGlzLnNldE1heE1lc3NhZ2VzKGJ8fDUwKTt9LG1lbWJlcnM6e3NldE1heE1lc3NhZ2VzOmZ1bmN0aW9uKGMpe3RoaXMuc2V0TWF4RW50cmllcyhjKTt9LGdldE1heE1lc3NhZ2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TWF4RW50cmllcygpO30scHJvY2VzczpmdW5jdGlvbihkKXt0aGlzLmFkZEVudHJ5KGQpO30sZ2V0QWxsTG9nRXZlbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QWxsRW50cmllcygpO30scmV0cmlldmVMb2dFdmVudHM6ZnVuY3Rpb24oZSxmKXtyZXR1cm4gdGhpcy5nZXRFbnRyaWVzKGUsZik7fSxjbGVhckhpc3Rvcnk6ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBqPSI6IixoPSJxeC5jbGllbnQiLGc9ImFub255bW91cyIsZj0iLi4uIixlPSJxeC5kZXYuU3RhY2tUcmFjZSIsZD0iIixjPSJcbiIsYj0iL3NvdXJjZS9jbGFzcy8iLGE9Ii4iO3F4LkNsYXNzLmRlZmluZShlLHtzdGF0aWNzOntnZXRTdGFja1RyYWNlOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoaCx7ImdlY2tvIjpmdW5jdGlvbigpe3RyeXt0aHJvdyBuZXcgRXJyb3IoKTt9Y2F0Y2goeCl7dmFyIHI9dGhpcy5nZXRTdGFja1RyYWNlRnJvbUVycm9yKHgpO3F4LmxhbmcuQXJyYXkucmVtb3ZlQXQociwwKTt2YXIgcD10aGlzLmdldFN0YWNrVHJhY2VGcm9tQ2FsbGVyKGFyZ3VtZW50cyk7dmFyIG49cC5sZW5ndGg+ci5sZW5ndGg/cDpyO2Zvcih2YXIgaT0wO2k8TWF0aC5taW4ocC5sZW5ndGgsci5sZW5ndGgpO2krKyl7dmFyIG89cFtpXTtpZihvLmluZGV4T2YoZyk+PTApe2NvbnRpbnVlO312YXIgdj1vLnNwbGl0KGopO2lmKHYubGVuZ3RoIT0yKXtjb250aW51ZTt9dmFyIHQ9dlswXTt2YXIgbT12WzFdO3ZhciBsPXJbaV07dmFyIHc9bC5zcGxpdChqKTt2YXIgcz13WzBdO3ZhciBrPXdbMV07aWYocXguQ2xhc3MuZ2V0QnlOYW1lKHMpKXt2YXIgcT1zO31lbHNle3E9dDt9dmFyIHU9cStqO2lmKG0pe3UrPW0rajt9dSs9aztuW2ldPXU7fXJldHVybiBuO319LCJtc2h0bWx8d2Via2l0IjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFN0YWNrVHJhY2VGcm9tQ2FsbGVyKGFyZ3VtZW50cyk7fSwib3BlcmEiOmZ1bmN0aW9uKCl7dmFyIHk7dHJ5e3kuYmFyKCk7fWNhdGNoKEEpe3ZhciB6PXRoaXMuZ2V0U3RhY2tUcmFjZUZyb21FcnJvcihBKTtxeC5sYW5nLkFycmF5LnJlbW92ZUF0KHosMCk7cmV0dXJuIHo7fXJldHVybiBbXTt9fSksZ2V0U3RhY2tUcmFjZUZyb21DYWxsZXI6cXguY29yZS5WYXJpYW50LnNlbGVjdChoLHsib3BlcmEiOmZ1bmN0aW9uKEIpe3JldHVybiBbXTt9LCJkZWZhdWx0IjpmdW5jdGlvbihDKXt2YXIgSD1bXTt2YXIgRz1xeC5sYW5nLkZ1bmN0aW9uLmdldENhbGxlcihDKTt2YXIgRD17fTt3aGlsZShHKXt2YXIgRT1xeC5sYW5nLkZ1bmN0aW9uLmdldE5hbWUoRyk7SC5wdXNoKEUpO3RyeXtHPUcuY2FsbGVyO31jYXRjaChJKXticmVhazt9aWYoIUcpe2JyZWFrO312YXIgRj1xeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LnRvSGFzaENvZGUoRyk7aWYoRFtGXSl7SC5wdXNoKGYpO2JyZWFrO31EW0ZdPUc7fXJldHVybiBIO319KSxnZXRTdGFja1RyYWNlRnJvbUVycm9yOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoaCx7ImdlY2tvIjpmdW5jdGlvbihKKXtpZighSi5zdGFjayl7cmV0dXJuIFtdO312YXIgUD0vQCguKyk6KFxkKykkL2dtO3ZhciBLO3ZhciBMPVtdO3doaWxlKChLPVAuZXhlYyhKLnN0YWNrKSkhPW51bGwpe3ZhciBNPUtbMV07dmFyIE89S1syXTt2YXIgTj10aGlzLl9fa1IoTSk7TC5wdXNoKE4raitPKTt9cmV0dXJuIEw7fSwid2Via2l0IjpmdW5jdGlvbihRKXtpZihRLnNvdXJjZVVSTCYmUS5saW5lKXtyZXR1cm4gW3RoaXMuX19rUihRLnNvdXJjZVVSTCkraitRLmxpbmVdO31lbHNle3JldHVybiBbXTt9fSwib3BlcmEiOmZ1bmN0aW9uKFIpe2lmKFIubWVzc2FnZS5pbmRleE9mKCJCYWNrdHJhY2U6Iik8MCl7cmV0dXJuIFtdO312YXIgVD1bXTt2YXIgVT1xeC5sYW5nLlN0cmluZy50cmltKFIubWVzc2FnZS5zcGxpdCgiQmFja3RyYWNlOiIpWzFdKTt2YXIgVj1VLnNwbGl0KGMpO2Zvcih2YXIgaT0wO2k8Vi5sZW5ndGg7aSsrKXt2YXIgUz1WW2ldLm1hdGNoKC9ccypMaW5lIChbMC05XSspIG9mLiogKFxTLiopLyk7aWYoUyYmUy5sZW5ndGg+PTIpe3ZhciBYPVNbMV07dmFyIFc9dGhpcy5fX2tSKFNbMl0pO1QucHVzaChXK2orWCk7fX1yZXR1cm4gVDt9LCJkZWZhdWx0IjpmdW5jdGlvbigpe3JldHVybiBbXTt9fSksX19rUjpmdW5jdGlvbihZKXt2YXIgYmM9Yjt2YXIgYmE9WS5pbmRleE9mKGJjKTt2YXIgYmI9KGJhPT0tMSk/WTpZLnN1YnN0cmluZyhiYStiYy5sZW5ndGgpLnJlcGxhY2UoL1wvL2csYSkucmVwbGFjZSgvXC5qcyQvLGQpO3JldHVybiBiYjt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGs9IiIsaj0iZyIsaD0iMCIsZz0nXFwkMScsZj0iJSIsZT0nLScsZD0icXgubGFuZy5TdHJpbmciLGM9JyAnLGI9J1xuJyxhPSJ1bmRlZmluZWQiO3F4LkNsYXNzLmRlZmluZShkLHtzdGF0aWNzOntjYW1lbENhc2U6ZnVuY3Rpb24obCl7cmV0dXJuIGwucmVwbGFjZSgvXC0oW2Etel0pL2csZnVuY3Rpb24obSxuKXtyZXR1cm4gbi50b1VwcGVyQ2FzZSgpO30pO30saHlwaGVuYXRlOmZ1bmN0aW9uKG8pe3JldHVybiBvLnJlcGxhY2UoL1tBLVpdL2csZnVuY3Rpb24ocCl7cmV0dXJuIChlK3AuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpO30pO30sY2FwaXRhbGl6ZTpmdW5jdGlvbihxKXtyZXR1cm4gcS5yZXBsYWNlKC9cYlthLXpdL2csZnVuY3Rpb24ocil7cmV0dXJuIHIudG9VcHBlckNhc2UoKTt9KTt9LGNsZWFuOmZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnRyaW0ocy5yZXBsYWNlKC9ccysvZyxjKSk7fSx0cmltTGVmdDpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9eXHMrLyxrKTt9LHRyaW1SaWdodDpmdW5jdGlvbih1KXtyZXR1cm4gdS5yZXBsYWNlKC9ccyskLyxrKTt9LHRyaW06ZnVuY3Rpb24odil7cmV0dXJuIHYucmVwbGFjZSgvXlxzK3xccyskL2csayk7fSxzdGFydHNXaXRoOmZ1bmN0aW9uKHcseCl7cmV0dXJuIHcuaW5kZXhPZih4KT09PTA7fSxlbmRzV2l0aDpmdW5jdGlvbih5LHope3JldHVybiB5LnN1YnN0cmluZyh5Lmxlbmd0aC16Lmxlbmd0aCx5Lmxlbmd0aCk9PT16O30scmVwZWF0OmZ1bmN0aW9uKEEsQil7cmV0dXJuIEEubGVuZ3RoPjA/bmV3IEFycmF5KEIrMSkuam9pbihBKTprO30scGFkOmZ1bmN0aW9uKEMsbGVuZ3RoLEQpe3ZhciBFPWxlbmd0aC1DLmxlbmd0aDtpZihFPjApe2lmKHR5cGVvZiBEPT09YSl7RD1oO31yZXR1cm4gdGhpcy5yZXBlYXQoRCxFKStDO31lbHNle3JldHVybiBDO319LGZpcnN0VXA6cXguQm9vdHN0cmFwLmZpcnN0VXAsZmlyc3RMb3c6cXguQm9vdHN0cmFwLmZpcnN0TG93LGNvbnRhaW5zOmZ1bmN0aW9uKEYsRyl7cmV0dXJuIEYuaW5kZXhPZihHKSE9LTE7fSxmb3JtYXQ6ZnVuY3Rpb24oSCxJKXt2YXIgSj1IO2Zvcih2YXIgaT0wO2k8SS5sZW5ndGg7aSsrKXtKPUoucmVwbGFjZShuZXcgUmVnRXhwKGYrKGkrMSksaiksSVtpXStrKTt9cmV0dXJuIEo7fSxlc2NhcGVSZWdleHBDaGFyczpmdW5jdGlvbihLKXtyZXR1cm4gSy5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csZyk7fSx0b0FycmF5OmZ1bmN0aW9uKEwpe3JldHVybiBMLnNwbGl0KC9cQnxcYi9nKTt9LHN0cmlwVGFnczpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC88XC8/W14+XSs+L2dpLGspO30sc3RyaXBTY3JpcHRzOmZ1bmN0aW9uKE4sTyl7dmFyIFE9azt2YXIgUD1OLnJlcGxhY2UoLzxzY3JpcHRbXj5dKj4oW1xzXFNdKj8pPFwvc2NyaXB0Pi9naSxmdW5jdGlvbigpe1ErPWFyZ3VtZW50c1sxXStiO3JldHVybiBrO30pO2lmKE89PT10cnVlKXtxeC5sYW5nLkZ1bmN0aW9uLmdsb2JhbEV2YWwoUSk7fXJldHVybiBQO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaz0ibm9kZSIsaj0iZXJyb3IiLGg9Ii4uLigrIixnPSJhcnJheSIsZj0iKSIsZT0iaW5mbyIsZD0iaW5zdGFuY2UiLGM9InN0cmluZyIsYj0ibnVsbCIsYT0iY2xhc3MiLEg9Im51bWJlciIsRz0ic3RyaW5naWZ5IixGPSJdIixFPSJkYXRlIixEPSJ1bmtub3duIixDPSJmdW5jdGlvbiIsQj0iYm9vbGVhbiIsQT0iZGVidWciLHo9Im1hcCIseT0idW5kZWZpbmVkIixzPSJxeC5sb2cuTG9nZ2VyIix0PSJbIixxPSIjIixyPSJ3YXJuIixvPSJkb2N1bWVudCIscD0iey4uLigiLG09InRleHRbIixuPSJbLi4uKCIsdT0iXG4iLHY9Iil9Iix4PSIpXSIsdz0ib2JqZWN0IjtxeC5DbGFzcy5kZWZpbmUocyx7c3RhdGljczp7X19mZjpBLHNldExldmVsOmZ1bmN0aW9uKEkpe3RoaXMuX19mZj1JO30sZ2V0TGV2ZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZmO30sc2V0VHJlc2hvbGQ6ZnVuY3Rpb24oSil7dGhpcy5fX2ZpLnNldE1heE1lc3NhZ2VzKEopO30sZ2V0VHJlc2hvbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpLmdldE1heE1lc3NhZ2VzKCk7fSxfX2ZnOnt9LF9fZmg6MCxyZWdpc3RlcjpmdW5jdGlvbihLKXtpZihLLiQkaWQpe3JldHVybjt9dmFyIE09dGhpcy5fX2ZoKys7dGhpcy5fX2ZnW01dPUs7Sy4kJGlkPU07dmFyIEw9dGhpcy5fX2ZqO3ZhciBOPXRoaXMuX19maS5nZXRBbGxMb2dFdmVudHMoKTtmb3IodmFyIGk9MCxsPU4ubGVuZ3RoO2k8bDtpKyspe2lmKExbTltpXS5sZXZlbF0+PUxbdGhpcy5fX2ZmXSl7Sy5wcm9jZXNzKE5baV0pO319fSx1bnJlZ2lzdGVyOmZ1bmN0aW9uKE8pe3ZhciBQPU8uJCRpZDtpZihQPT1udWxsKXtyZXR1cm47fWRlbGV0ZSB0aGlzLl9fZmdbUF07ZGVsZXRlIE8uJCRpZDt9LGRlYnVnOmZ1bmN0aW9uKFEsUil7cXgubG9nLkxvZ2dlci5fX2ZrKEEsYXJndW1lbnRzKTt9LGluZm86ZnVuY3Rpb24oUyxUKXtxeC5sb2cuTG9nZ2VyLl9fZmsoZSxhcmd1bWVudHMpO30sd2FybjpmdW5jdGlvbihVLFYpe3F4LmxvZy5Mb2dnZXIuX19mayhyLGFyZ3VtZW50cyk7fSxlcnJvcjpmdW5jdGlvbihXLFgpe3F4LmxvZy5Mb2dnZXIuX19mayhqLGFyZ3VtZW50cyk7fSx0cmFjZTpmdW5jdGlvbihZKXtxeC5sb2cuTG9nZ2VyLl9fZmsoZSxbWSxxeC5kZXYuU3RhY2tUcmFjZS5nZXRTdGFja1RyYWNlKCkuam9pbih1KV0pO30sZGVwcmVjYXRlZE1ldGhvZFdhcm5pbmc6ZnVuY3Rpb24oYmEsYmIpe3ZhciBiYzt7fTt9LGRlcHJlY2F0ZWRDbGFzc1dhcm5pbmc6ZnVuY3Rpb24oYmQsYmUpe3ZhciBiZjt7fTt9LGRlcHJlY2F0ZWRFdmVudFdhcm5pbmc6ZnVuY3Rpb24oYmcsZXZlbnQsYmgpe3ZhciBiaTt7fTt9LGRlcHJlY2F0ZWRNaXhpbldhcm5pbmc6ZnVuY3Rpb24oYmosYmspe3ZhciBibDt7fTt9LGRlcHJlY2F0ZWRDb25zdGFudFdhcm5pbmc6ZnVuY3Rpb24oYm0sYm4sYm8pe3ZhciBzZWxmLGJwO3t9O30sZGVwcmVjYXRlTWV0aG9kT3ZlcnJpZGluZzpmdW5jdGlvbihicSxicixicyxidCl7dmFyIGJ1O3t9O30sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLl9fZmkuY2xlYXJIaXN0b3J5KCk7fSxfX2ZpOm5ldyBxeC5sb2cuYXBwZW5kZXIuUmluZ0J1ZmZlcig1MCksX19majp7ZGVidWc6MCxpbmZvOjEsd2FybjoyLGVycm9yOjN9LF9fZms6ZnVuY3Rpb24oYnYsYncpe3ZhciBiQj10aGlzLl9fZmo7aWYoYkJbYnZdPGJCW3RoaXMuX19mZl0pe3JldHVybjt9dmFyIGJ5PWJ3Lmxlbmd0aDwyP251bGw6YndbMF07dmFyIGJBPWJ5PzE6MDt2YXIgYng9W107Zm9yKHZhciBpPWJBLGw9YncubGVuZ3RoO2k8bDtpKyspe2J4LnB1c2godGhpcy5fX2ZtKGJ3W2ldLHRydWUpKTt9dmFyIGJDPW5ldyBEYXRlO3ZhciBiRD17dGltZTpiQyxvZmZzZXQ6YkMtcXguQm9vdHN0cmFwLkxPQURTVEFSVCxsZXZlbDpidixpdGVtczpieCx3aW46d2luZG93fTtpZihieSl7aWYoYnkuJCRoYXNoIT09dW5kZWZpbmVkKXtiRC5vYmplY3Q9YnkuJCRoYXNoO31lbHNlIGlmKGJ5LiQkdHlwZSl7YkQuY2xheno9Ynk7fX10aGlzLl9fZmkucHJvY2VzcyhiRCk7dmFyIGJFPXRoaXMuX19mZztmb3IodmFyIGJ6IGluIGJFKXtiRVtiel0ucHJvY2VzcyhiRCk7fX0sX19mbDpmdW5jdGlvbihiRil7aWYoYkY9PT11bmRlZmluZWQpe3JldHVybiB5O31lbHNlIGlmKGJGPT09bnVsbCl7cmV0dXJuIGI7fWlmKGJGLiQkdHlwZSl7cmV0dXJuIGE7fXZhciBiRz10eXBlb2YgYkY7aWYoYkc9PT1DfHxiRz09Y3x8Ykc9PT1IfHxiRz09PUIpe3JldHVybiBiRzt9ZWxzZSBpZihiRz09PXcpe2lmKGJGLm5vZGVUeXBlKXtyZXR1cm4gazt9ZWxzZSBpZihiRi5jbGFzc25hbWUpe3JldHVybiBkO31lbHNlIGlmKGJGIGluc3RhbmNlb2YgQXJyYXkpe3JldHVybiBnO31lbHNlIGlmKGJGIGluc3RhbmNlb2YgRXJyb3Ipe3JldHVybiBqO31lbHNlIGlmKGJGIGluc3RhbmNlb2YgRGF0ZSl7cmV0dXJuIEU7fWVsc2V7cmV0dXJuIHo7fX1pZihiRi50b1N0cmluZyl7cmV0dXJuIEc7fXJldHVybiBEO30sX19mbTpmdW5jdGlvbihiSCxiSSl7dmFyIGJQPXRoaXMuX19mbChiSCk7dmFyIGJMPUQ7dmFyIGJLPVtdO3N3aXRjaChiUCl7Y2FzZSBiOmNhc2UgeTpiTD1iUDticmVhaztjYXNlIGM6Y2FzZSBIOmNhc2UgQjpjYXNlIEU6Ykw9Ykg7YnJlYWs7Y2FzZSBrOmlmKGJILm5vZGVUeXBlPT09OSl7Ykw9bzt9ZWxzZSBpZihiSC5ub2RlVHlwZT09PTMpe2JMPW0rYkgubm9kZVZhbHVlK0Y7fWVsc2UgaWYoYkgubm9kZVR5cGU9PT0xKXtiTD1iSC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKGJILmlkKXtiTCs9cStiSC5pZDt9fWVsc2V7Ykw9azt9YnJlYWs7Y2FzZSBDOmJMPXF4LmxhbmcuRnVuY3Rpb24uZ2V0TmFtZShiSCl8fGJQO2JyZWFrO2Nhc2UgZDpiTD1iSC5iYXNlbmFtZSt0K2JILiQkaGFzaCtGO2JyZWFrO2Nhc2UgYTpjYXNlIEc6Ykw9YkgudG9TdHJpbmcoKTticmVhaztjYXNlIGo6Yks9cXguZGV2LlN0YWNrVHJhY2UuZ2V0U3RhY2tUcmFjZUZyb21FcnJvcihiSCk7Ykw9YkgudG9TdHJpbmcoKTticmVhaztjYXNlIGc6aWYoYkkpe2JMPVtdO2Zvcih2YXIgaT0wLGw9YkgubGVuZ3RoO2k8bDtpKyspe2lmKGJMLmxlbmd0aD4yMCl7YkwucHVzaChoKyhsLWkpK2YpO2JyZWFrO31iTC5wdXNoKHRoaXMuX19mbShiSFtpXSxmYWxzZSkpO319ZWxzZXtiTD1uK2JILmxlbmd0aCt4O31icmVhaztjYXNlIHo6aWYoYkkpe3ZhciBiSjt2YXIgYk89W107Zm9yKHZhciBiTiBpbiBiSCl7Yk8ucHVzaChiTik7fWJPLnNvcnQoKTtiTD1bXTtmb3IodmFyIGk9MCxsPWJPLmxlbmd0aDtpPGw7aSsrKXtpZihiTC5sZW5ndGg+MjApe2JMLnB1c2goaCsobC1pKStmKTticmVhazt9Yk49Yk9baV07Yko9dGhpcy5fX2ZtKGJIW2JOXSxmYWxzZSk7Ykoua2V5PWJOO2JMLnB1c2goYkopO319ZWxzZXt2YXIgYk09MDtmb3IodmFyIGJOIGluIGJIKXtiTSsrO31iTD1wK2JNK3Y7fWJyZWFrO31yZXR1cm4ge3R5cGU6YlAsdGV4dDpiTCx0cmFjZTpiS307fX0sZGVmZXI6ZnVuY3Rpb24oYlEpe3ZhciBiUj1xeC5Cb290c3RyYXAuJCRsb2dzO2Zvcih2YXIgaT0wO2k8YlIubGVuZ3RoO2krKyl7YlEuX19mayhiUltpXVswXSxiUltpXVsxXSk7fXF4LkJvb3RzdHJhcC5kZWJ1Zz1iUS5kZWJ1ZztxeC5Cb290c3RyYXAuaW5mbz1iUS5pbmZvO3F4LkJvb3RzdHJhcC53YXJuPWJRLndhcm47cXguQm9vdHN0cmFwLmVycm9yPWJRLmVycm9yO3F4LkJvb3RzdHJhcC50cmFjZT1iUS50cmFjZTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgcT0ic2V0IixwPSJnZXQiLG89InJlc2V0IixuPSJNU0lFIDYuMCIsbT0iaW5mbyIsaz0icXguY29yZS5PYmplY3QiLGo9ImVycm9yIixoPSJ3YXJuIixnPSJdIixmPSJkZWJ1ZyIsYj0iWyIsZD0iJCR1c2VyXyIsYz0icnY6MS44LjEiLGE9Ik9iamVjdCI7cXguQ2xhc3MuZGVmaW5lKGsse2V4dGVuZDpPYmplY3QsaW5jbHVkZTpbcXguZGF0YS5NQmluZGluZ10sY29uc3RydWN0OmZ1bmN0aW9uKCl7cXguY29yZS5PYmplY3RSZWdpc3RyeS5yZWdpc3Rlcih0aGlzKTt9LHN0YXRpY3M6eyQkdHlwZTphfSxtZW1iZXJzOnt0b0hhc2hDb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJCRoYXNoO30sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc25hbWUrYit0aGlzLiQkaGFzaCtnO30sYmFzZTpmdW5jdGlvbihyLHMpe3t9O2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0xKXtyZXR1cm4gci5jYWxsZWUuYmFzZS5jYWxsKHRoaXMpO31lbHNle3JldHVybiByLmNhbGxlZS5iYXNlLmFwcGx5KHRoaXMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKTt9fSxzZWxmOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNhbGxlZS5zZWxmO30sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgdj10aGlzLmNvbnN0cnVjdG9yO3ZhciB1PW5ldyB2O3ZhciB4PXF4LkNsYXNzLmdldFByb3BlcnRpZXModik7dmFyIHc9cXguY29yZS5Qcm9wZXJ0eS4kJHN0b3JlLnVzZXI7dmFyIHk9cXguY29yZS5Qcm9wZXJ0eS4kJG1ldGhvZC5zZXQ7dmFyIG5hbWU7Zm9yKHZhciBpPTAsbD14Lmxlbmd0aDtpPGw7aSsrKXtuYW1lPXhbaV07aWYodGhpcy5oYXNPd25Qcm9wZXJ0eSh3W25hbWVdKSl7dVt5W25hbWVdXSh0aGlzW3dbbmFtZV1dKTt9fXJldHVybiB1O30sc2V0OmZ1bmN0aW9uKHosQSl7dmFyIEM9cXguY29yZS5Qcm9wZXJ0eS4kJG1ldGhvZC5zZXQ7aWYocXguQm9vdHN0cmFwLmlzU3RyaW5nKHopKXtpZighdGhpc1tDW3pdXSl7aWYodGhpc1txK3F4LkJvb3RzdHJhcC5maXJzdFVwKHopXSE9dW5kZWZpbmVkKXt0aGlzW3ErcXguQm9vdHN0cmFwLmZpcnN0VXAoeildKEEpO3JldHVybiB0aGlzO317fTt9cmV0dXJuIHRoaXNbQ1t6XV0oQSk7fWVsc2V7Zm9yKHZhciBCIGluIHope2lmKCF0aGlzW0NbQl1dKXtpZih0aGlzW3ErcXguQm9vdHN0cmFwLmZpcnN0VXAoQildIT11bmRlZmluZWQpe3RoaXNbcStxeC5Cb290c3RyYXAuZmlyc3RVcChCKV0oeltCXSk7Y29udGludWU7fXt9O310aGlzW0NbQl1dKHpbQl0pO31yZXR1cm4gdGhpczt9fSxnZXQ6ZnVuY3Rpb24oRCl7dmFyIEU9cXguY29yZS5Qcm9wZXJ0eS4kJG1ldGhvZC5nZXQ7aWYoIXRoaXNbRVtEXV0pe2lmKHRoaXNbcCtxeC5Cb290c3RyYXAuZmlyc3RVcChEKV0hPXVuZGVmaW5lZCl7cmV0dXJuIHRoaXNbcCtxeC5Cb290c3RyYXAuZmlyc3RVcChEKV0oKTt9e307fXJldHVybiB0aGlzW0VbRF1dKCk7fSxyZXNldDpmdW5jdGlvbihGKXt2YXIgRz1xeC5jb3JlLlByb3BlcnR5LiQkbWV0aG9kLnJlc2V0O2lmKCF0aGlzW0dbRl1dKXtpZih0aGlzW28rcXguQm9vdHN0cmFwLmZpcnN0VXAoRildIT11bmRlZmluZWQpe3RoaXNbbytxeC5Cb290c3RyYXAuZmlyc3RVcChGKV0oKTtyZXR1cm47fXt9O310aGlzW0dbRl1dKCk7fSxfX2x3OnF4LmV2ZW50LlJlZ2lzdHJhdGlvbixhZGRMaXN0ZW5lcjpmdW5jdGlvbihILEksc2VsZixKKXtpZighdGhpcy4kJGRpc3Bvc2VkKXtyZXR1cm4gdGhpcy5fX2x3LmFkZExpc3RlbmVyKHRoaXMsSCxJLHNlbGYsSik7fXJldHVybiBudWxsO30sYWRkTGlzdGVuZXJPbmNlOmZ1bmN0aW9uKEssTCxzZWxmLE0pe3ZhciBOPWZ1bmN0aW9uKGUpe3RoaXMucmVtb3ZlTGlzdGVuZXIoSyxOLHRoaXMsTSk7TC5jYWxsKHNlbGZ8fHRoaXMsZSk7fTtyZXR1cm4gdGhpcy5hZGRMaXN0ZW5lcihLLE4sdGhpcyxNKTt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKE8sUCxzZWxmLFEpe2lmKCF0aGlzLiQkZGlzcG9zZWQpe3JldHVybiB0aGlzLl9fbHcucmVtb3ZlTGlzdGVuZXIodGhpcyxPLFAsc2VsZixRKTt9cmV0dXJuIGZhbHNlO30scmVtb3ZlTGlzdGVuZXJCeUlkOmZ1bmN0aW9uKFIpe2lmKCF0aGlzLiQkZGlzcG9zZWQpe3JldHVybiB0aGlzLl9fbHcucmVtb3ZlTGlzdGVuZXJCeUlkKHRoaXMsUik7fXJldHVybiBmYWxzZTt9LGhhc0xpc3RlbmVyOmZ1bmN0aW9uKFMsVCl7cmV0dXJuIHRoaXMuX19sdy5oYXNMaXN0ZW5lcih0aGlzLFMsVCk7fSxkaXNwYXRjaEV2ZW50OmZ1bmN0aW9uKFUpe2lmKCF0aGlzLiQkZGlzcG9zZWQpe3JldHVybiB0aGlzLl9fbHcuZGlzcGF0Y2hFdmVudCh0aGlzLFUpO31yZXR1cm4gdHJ1ZTt9LGZpcmVFdmVudDpmdW5jdGlvbihWLFcsWCl7aWYoIXRoaXMuJCRkaXNwb3NlZCl7cmV0dXJuIHRoaXMuX19sdy5maXJlRXZlbnQodGhpcyxWLFcsWCk7fXJldHVybiB0cnVlO30sZmlyZU5vbkJ1YmJsaW5nRXZlbnQ6ZnVuY3Rpb24oWSxiYSxiYil7aWYoIXRoaXMuJCRkaXNwb3NlZCl7cmV0dXJuIHRoaXMuX19sdy5maXJlTm9uQnViYmxpbmdFdmVudCh0aGlzLFksYmEsYmIpO31yZXR1cm4gdHJ1ZTt9LGZpcmVEYXRhRXZlbnQ6ZnVuY3Rpb24oYmMsYmQsYmUsYmYpe2lmKCF0aGlzLiQkZGlzcG9zZWQpe2lmKGJlPT09dW5kZWZpbmVkKXtiZT1udWxsO31yZXR1cm4gdGhpcy5fX2x3LmZpcmVOb25CdWJibGluZ0V2ZW50KHRoaXMsYmMscXguZXZlbnQudHlwZS5EYXRhLFtiZCxiZSwhIWJmXSk7fXJldHVybiB0cnVlO30sX19seDpudWxsLHNldFVzZXJEYXRhOmZ1bmN0aW9uKGJnLGJoKXtpZighdGhpcy5fX2x4KXt0aGlzLl9fbHg9e307fXRoaXMuX19seFtiZ109Ymg7fSxnZXRVc2VyRGF0YTpmdW5jdGlvbihiaSl7aWYoIXRoaXMuX19seCl7cmV0dXJuIG51bGw7fXZhciBiaj10aGlzLl9fbHhbYmldO3JldHVybiBiaj09PXVuZGVmaW5lZD9udWxsOmJqO30sX19seTpxeC5sb2cuTG9nZ2VyLGRlYnVnOmZ1bmN0aW9uKGJrKXt0aGlzLl9fbHooZixhcmd1bWVudHMpO30saW5mbzpmdW5jdGlvbihibCl7dGhpcy5fX2x6KG0sYXJndW1lbnRzKTt9LHdhcm46ZnVuY3Rpb24oYm0pe3RoaXMuX19seihoLGFyZ3VtZW50cyk7fSxlcnJvcjpmdW5jdGlvbihibil7dGhpcy5fX2x6KGosYXJndW1lbnRzKTt9LHRyYWNlOmZ1bmN0aW9uKCl7dGhpcy5fX2x5LnRyYWNlKHRoaXMpO30sX19sejpmdW5jdGlvbihibyxicCl7dmFyIGJxPXF4LmxhbmcuQXJyYXkuZnJvbUFyZ3VtZW50cyhicCk7YnEudW5zaGlmdCh0aGlzKTt0aGlzLl9fbHlbYm9dLmFwcGx5KHRoaXMuX19seSxicSk7fSxpc0Rpc3Bvc2VkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJCRkaXNwb3NlZHx8ZmFsc2U7fSxkaXNwb3NlOmZ1bmN0aW9uKCl7dmFyIGJ2LGJ0LGJzLGJ3O2lmKHRoaXMuJCRkaXNwb3NlZCl7cmV0dXJuO310aGlzLiQkZGlzcG9zZWQ9dHJ1ZTt0aGlzLiQkaW5zdGFuY2U9bnVsbDt0aGlzLiQkYWxsb3djb25zdHJ1Y3Q9bnVsbDt7fTt2YXIgYnU9dGhpcy5jb25zdHJ1Y3Rvcjt2YXIgYnI7d2hpbGUoYnUuc3VwZXJjbGFzcyl7aWYoYnUuJCRkZXN0cnVjdG9yKXtidS4kJGRlc3RydWN0b3IuY2FsbCh0aGlzKTt9aWYoYnUuJCRpbmNsdWRlcyl7YnI9YnUuJCRmbGF0SW5jbHVkZXM7Zm9yKHZhciBpPTAsbD1ici5sZW5ndGg7aTxsO2krKyl7aWYoYnJbaV0uJCRkZXN0cnVjdG9yKXticltpXS4kJGRlc3RydWN0b3IuY2FsbCh0aGlzKTt9fX1idT1idS5zdXBlcmNsYXNzO31pZih0aGlzLl9fbEEpe3RoaXMuX19sQSgpO317fTt9LF9fbEE6bnVsbCxfX2xCOmZ1bmN0aW9uKCl7dmFyIGJ4PXF4LkNsYXNzLmdldFByb3BlcnRpZXModGhpcy5jb25zdHJ1Y3Rvcik7Zm9yKHZhciBpPTAsbD1ieC5sZW5ndGg7aTxsO2krKyl7ZGVsZXRlIHRoaXNbZCtieFtpXV07fX0sX2Rpc3Bvc2VPYmplY3RzOmZ1bmN0aW9uKGJ5KXtxeC51dGlsLkRpc3Bvc2VVdGlsLmRpc3Bvc2VPYmplY3RzKHRoaXMsYXJndW1lbnRzKTt9LF9kaXNwb3NlU2luZ2xldG9uT2JqZWN0czpmdW5jdGlvbihieil7cXgudXRpbC5EaXNwb3NlVXRpbC5kaXNwb3NlT2JqZWN0cyh0aGlzLGFyZ3VtZW50cyx0cnVlKTt9LF9kaXNwb3NlQXJyYXk6ZnVuY3Rpb24oYkEpe3F4LnV0aWwuRGlzcG9zZVV0aWwuZGlzcG9zZUFycmF5KHRoaXMsYkEpO30sX2Rpc3Bvc2VNYXA6ZnVuY3Rpb24oYkIpe3F4LnV0aWwuRGlzcG9zZVV0aWwuZGlzcG9zZU1hcCh0aGlzLGJCKTt9fSxzZXR0aW5nczp7InF4LmRpc3Bvc2VyRGVidWdMZXZlbCI6MH0sZGVmZXI6ZnVuY3Rpb24oYkMsYkQpe3t9O3ZhciBiRj1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YobikhPS0xO3ZhciBiRT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoYykhPS0xO2lmKGJGfHxiRSl7YkQuX19sQT1iRC5fX2xCO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7aWYoIXF4LmNvcmUuT2JqZWN0UmVnaXN0cnkuaW5TaHV0RG93bil7cXguZXZlbnQuUmVnaXN0cmF0aW9uLnJlbW92ZUFsbExpc3RlbmVycyh0aGlzKTt9ZWxzZXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZGVsZXRlQWxsTGlzdGVuZXJzKHRoaXMpO31xeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7dGhpcy5fX2x4PW51bGw7dmFyIGJJPXRoaXMuY29uc3RydWN0b3I7dmFyIGJNO3ZhciBiTj1xeC5jb3JlLlByb3BlcnR5LiQkc3RvcmU7dmFyIGJLPWJOLnVzZXI7dmFyIGJMPWJOLnRoZW1lO3ZhciBiRz1iTi5pbmhlcml0O3ZhciBiSj1iTi51c2Vpbml0O3ZhciBiSD1iTi5pbml0O3doaWxlKGJJKXtiTT1iSS4kJHByb3BlcnRpZXM7aWYoYk0pe2Zvcih2YXIgbmFtZSBpbiBiTSl7aWYoYk1bbmFtZV0uZGVyZWZlcmVuY2Upe3RoaXNbYktbbmFtZV1dPXRoaXNbYkxbbmFtZV1dPXRoaXNbYkdbbmFtZV1dPXRoaXNbYkpbbmFtZV1dPXRoaXNbYkhbbmFtZV1dPXVuZGVmaW5lZDt9fX1iST1iSS5zdXBlcmNsYXNzO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZj0iY2hhbmdlU2VsZWN0aW9uIixlPSJxeC5ldmVudC50eXBlLkRhdGEiLGQ9InRhYlZpZXciLGM9ImFwaXZpZXdlci5UYWJWaWV3Q29udHJvbGxlciIsYj0iY2xhc3NMaW5rQ2xpY2tlZCIsYT0iaXRlbU5hbWUiO3F4LkNsYXNzLmRlZmluZShjLHtleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKGcpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7YXBpdmlld2VyLlRhYlZpZXdDb250cm9sbGVyLmluc3RhbmNlPXRoaXM7dGhpcy5fdGFiVmlldz1nLmdldFdpZGdldEJ5SWQoZCk7dGhpcy5fdGFiVmlldy5hZGRMaXN0ZW5lcihmLHRoaXMuX19TbSx0aGlzKTt9LGV2ZW50czp7ImNsYXNzTGlua0NsaWNrZWQiOmUsImNoYW5nZVNlbGVjdGlvbiI6ZX0sbWVtYmVyczp7c2hvd1RhYlZpZXc6ZnVuY3Rpb24oKXt0aGlzLl90YWJWaWV3LnNob3coKTt9LG9uU2VsZWN0SXRlbTpmdW5jdGlvbihoKXt0aGlzLmZpcmVEYXRhRXZlbnQoYixoKTt9LHNob3dJdGVtOmZ1bmN0aW9uKGkpe3F4LnVpLmNvcmUucXVldWUuTWFuYWdlci5mbHVzaCgpO3ZhciBqPXRoaXMuX3RhYlZpZXcuZ2V0U2VsZWN0aW9uKClbMF07ai5zZXRVc2VyRGF0YShhLGkpO3JldHVybiBqLmdldENoaWxkcmVuKClbMF0uc2hvd0l0ZW0oaSk7fSxvcGVuUGFja2FnZTpmdW5jdGlvbihrLGwpe3RoaXMuX19TaihrLGFwaXZpZXdlci51aS50YWJ2aWV3LlBhY2thZ2VQYWdlLGwpO30sb3BlbkNsYXNzOmZ1bmN0aW9uKG0sbil7dGhpcy5fX1NqKG0sYXBpdmlld2VyLnVpLnRhYnZpZXcuQ2xhc3NQYWdlLG4pO30sX19TajpmdW5jdGlvbihvLHAscSl7dmFyIHI9dGhpcy5fdGFiVmlldy5nZXRTZWxlY3Rpb24oKVswXTtpZihxPT10cnVlfHxyPT1udWxsKXt0aGlzLl9fU2socCxvKTt9ZWxzZXtpZihyIGluc3RhbmNlb2YgcCl7ci5zZXRDbGFzc05vZGUobyk7fWVsc2V7dGhpcy5fX1NrKHAsbyk7dGhpcy5fX1NsKHIpO319fSxfX1NrOmZ1bmN0aW9uKHMsdCl7dmFyIHU9bmV3IHModCk7dGhpcy5fdGFiVmlldy5hZGQodSk7dGhpcy5fdGFiVmlldy5zZXRTZWxlY3Rpb24oW3VdKTt9LF9fU2w6ZnVuY3Rpb24odil7dGhpcy5fdGFiVmlldy5yZW1vdmUodik7di5kZXN0cm95KCk7fSxfX1NtOmZ1bmN0aW9uKGV2ZW50KXt2YXIgdz1ldmVudC5nZXRPbGREYXRhKCk7dmFyIHg9ZXZlbnQuZ2V0RGF0YSgpO3RoaXMuZmlyZURhdGFFdmVudChmLHgsdyk7fSxfX1NuOmZ1bmN0aW9uKHkseil7dmFyIEE9bmV3IHF4LmV2ZW50LnR5cGUuTW91c2UoKTtBLmluaXQoeSx6LG51bGwsdHJ1ZSx0cnVlKTtBLnN0b3AoKTtyZXR1cm4gQTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX3RhYlZpZXcuZGVzdHJveSgpO3RoaXMuX3RhYlZpZXc9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXguZXZlbnQudHlwZS5FdmVudCI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxzdGF0aWNzOntDQVBUVVJJTkdfUEhBU0U6MSxBVF9UQVJHRVQ6MixCVUJCTElOR19QSEFTRTozfSxtZW1iZXJzOntpbml0OmZ1bmN0aW9uKGIsYyl7e307dGhpcy5fdHlwZT1udWxsO3RoaXMuX3RhcmdldD1udWxsO3RoaXMuX2N1cnJlbnRUYXJnZXQ9bnVsbDt0aGlzLl9yZWxhdGVkVGFyZ2V0PW51bGw7dGhpcy5fb3JpZ2luYWxUYXJnZXQ9bnVsbDt0aGlzLl9zdG9wUHJvcGFnYXRpb249ZmFsc2U7dGhpcy5fcHJldmVudERlZmF1bHQ9ZmFsc2U7dGhpcy5fYnViYmxlcz0hIWI7dGhpcy5fY2FuY2VsYWJsZT0hIWM7dGhpcy5fdGltZVN0YW1wPShuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7dGhpcy5fZXZlbnRQaGFzZT1udWxsO3JldHVybiB0aGlzO30sY2xvbmU6ZnVuY3Rpb24oZCl7aWYoZCl7dmFyIGU9ZDt9ZWxzZXt2YXIgZT1xeC5ldmVudC5Qb29sLmdldEluc3RhbmNlKCkuZ2V0T2JqZWN0KHRoaXMuY29uc3RydWN0b3IpO31lLl90eXBlPXRoaXMuX3R5cGU7ZS5fdGFyZ2V0PXRoaXMuX3RhcmdldDtlLl9jdXJyZW50VGFyZ2V0PXRoaXMuX2N1cnJlbnRUYXJnZXQ7ZS5fcmVsYXRlZFRhcmdldD10aGlzLl9yZWxhdGVkVGFyZ2V0O2UuX29yaWdpbmFsVGFyZ2V0PXRoaXMuX29yaWdpbmFsVGFyZ2V0O2UuX3N0b3BQcm9wYWdhdGlvbj10aGlzLl9zdG9wUHJvcGFnYXRpb247ZS5fYnViYmxlcz10aGlzLl9idWJibGVzO2UuX3ByZXZlbnREZWZhdWx0PXRoaXMuX3ByZXZlbnREZWZhdWx0O2UuX2NhbmNlbGFibGU9dGhpcy5fY2FuY2VsYWJsZTtyZXR1cm4gZTt9LHN0b3A6ZnVuY3Rpb24oKXtpZih0aGlzLl9idWJibGVzKXt0aGlzLnN0b3BQcm9wYWdhdGlvbigpO31pZih0aGlzLl9jYW5jZWxhYmxlKXt0aGlzLnByZXZlbnREZWZhdWx0KCk7fX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7e307dGhpcy5fc3RvcFByb3BhZ2F0aW9uPXRydWU7fSxnZXRQcm9wYWdhdGlvblN0b3BwZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gISF0aGlzLl9zdG9wUHJvcGFnYXRpb247fSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3t9O3RoaXMuX3ByZXZlbnREZWZhdWx0PXRydWU7fSxnZXREZWZhdWx0UHJldmVudGVkOmZ1bmN0aW9uKCl7cmV0dXJuICEhdGhpcy5fcHJldmVudERlZmF1bHQ7fSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3R5cGU7fSxzZXRUeXBlOmZ1bmN0aW9uKGYpe3RoaXMuX3R5cGU9Zjt9LGdldEV2ZW50UGhhc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRQaGFzZTt9LHNldEV2ZW50UGhhc2U6ZnVuY3Rpb24oZyl7dGhpcy5fZXZlbnRQaGFzZT1nO30sZ2V0VGltZVN0YW1wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpbWVTdGFtcDt9LGdldFRhcmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90YXJnZXQ7fSxzZXRUYXJnZXQ6ZnVuY3Rpb24oaCl7dGhpcy5fdGFyZ2V0PWg7fSxnZXRDdXJyZW50VGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRUYXJnZXR8fHRoaXMuX3RhcmdldDt9LHNldEN1cnJlbnRUYXJnZXQ6ZnVuY3Rpb24oaSl7dGhpcy5fY3VycmVudFRhcmdldD1pO30sZ2V0UmVsYXRlZFRhcmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWxhdGVkVGFyZ2V0O30sc2V0UmVsYXRlZFRhcmdldDpmdW5jdGlvbihqKXt0aGlzLl9yZWxhdGVkVGFyZ2V0PWo7fSxnZXRPcmlnaW5hbFRhcmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmlnaW5hbFRhcmdldDt9LHNldE9yaWdpbmFsVGFyZ2V0OmZ1bmN0aW9uKGspe3RoaXMuX29yaWdpbmFsVGFyZ2V0PWs7fSxnZXRCdWJibGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1YmJsZXM7fSxzZXRCdWJibGVzOmZ1bmN0aW9uKGwpe3RoaXMuX2J1YmJsZXM9bDt9LGlzQ2FuY2VsYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW5jZWxhYmxlO30sc2V0Q2FuY2VsYWJsZTpmdW5jdGlvbihtKXt0aGlzLl9jYW5jZWxhYmxlPW07fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl90YXJnZXQ9dGhpcy5fY3VycmVudFRhcmdldD10aGlzLl9yZWxhdGVkVGFyZ2V0PXRoaXMuX29yaWdpbmFsVGFyZ2V0PW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LmV2ZW50LnR5cGUuRGF0YSI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC5ldmVudC50eXBlLkV2ZW50LG1lbWJlcnM6e19fak86bnVsbCxfX2pQOm51bGwsaW5pdDpmdW5jdGlvbihiLGMsZCl7cXguZXZlbnQudHlwZS5FdmVudC5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMsZmFsc2UsZCk7dGhpcy5fX2pPPWI7dGhpcy5fX2pQPWM7cmV0dXJuIHRoaXM7fSxjbG9uZTpmdW5jdGlvbihlKXt2YXIgZj1xeC5ldmVudC50eXBlLkV2ZW50LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMsZSk7Zi5fX2pPPXRoaXMuX19qTztmLl9falA9dGhpcy5fX2pQO3JldHVybiBmO30sZ2V0RGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fak87fSxnZXRPbGREYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19qUDt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19qTz10aGlzLl9falA9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYz0icXguZ2xvYmFsRXJyb3JIYW5kbGluZyIsYj0ib24iLGE9InF4LmV2ZW50Lkdsb2JhbEVycm9yIjtxeC5Cb290c3RyYXAuZGVmaW5lKGEse3N0YXRpY3M6e3NldEVycm9ySGFuZGxlcjpmdW5jdGlvbihkLGYpe3RoaXMuX19reD1kfHxudWxsO3RoaXMuX19reT1mfHx3aW5kb3c7aWYocXguY29yZS5TZXR0aW5nLmdldChjKT09PWIpe2lmKGQmJndpbmRvdy5vbmVycm9yKXt2YXIgZz1xeC5Cb290c3RyYXAuYmluZCh0aGlzLl9fa0EsdGhpcyk7aWYodGhpcy5fX2t6PT1udWxsKXt0aGlzLl9fa3o9d2luZG93Lm9uZXJyb3I7fXZhciBzZWxmPXRoaXM7d2luZG93Lm9uZXJyb3I9ZnVuY3Rpb24oZSl7c2VsZi5fX2t6KGUpO2coZSk7fTt9aWYoZCYmIXdpbmRvdy5vbmVycm9yKXt3aW5kb3cub25lcnJvcj1xeC5Cb290c3RyYXAuYmluZCh0aGlzLl9fa0EsdGhpcyk7fWlmKHRoaXMuX19reD09bnVsbCl7aWYodGhpcy5fX2t6IT1udWxsKXt3aW5kb3cub25lcnJvcj10aGlzLl9fa3o7dGhpcy5fX2t6PW51bGw7fWVsc2V7d2luZG93Lm9uZXJyb3I9bnVsbDt9fX19LF9fa0E6ZnVuY3Rpb24oaCxpLGope2lmKHRoaXMuX19reCl7dGhpcy5oYW5kbGVFcnJvcihuZXcgcXguY29yZS5XaW5kb3dFcnJvcihoLGksaikpO3JldHVybiB0cnVlO319LG9ic2VydmVNZXRob2Q6ZnVuY3Rpb24oayl7aWYocXguY29yZS5TZXR0aW5nLmdldChjKT09PWIpe3ZhciBzZWxmPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIXNlbGYuX19reCl7cmV0dXJuIGsuYXBwbHkodGhpcyxhcmd1bWVudHMpO310cnl7cmV0dXJuIGsuYXBwbHkodGhpcyxhcmd1bWVudHMpO31jYXRjaChsKXtzZWxmLmhhbmRsZUVycm9yKG5ldyBxeC5jb3JlLkdsb2JhbEVycm9yKGwsYXJndW1lbnRzKSk7fX07fWVsc2V7cmV0dXJuIGs7fX0saGFuZGxlRXJyb3I6ZnVuY3Rpb24obSl7aWYodGhpcy5fX2t4KXt0aGlzLl9fa3guY2FsbCh0aGlzLl9fa3ksbSk7fX19LGRlZmVyOmZ1bmN0aW9uKG4pe3F4LmNvcmUuU2V0dGluZy5kZWZpbmUoYyxiKTtuLnNldEVycm9ySGFuZGxlcihudWxsLG51bGwpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSIiLGE9InF4LmNvcmUuV2luZG93RXJyb3IiO3F4LkJvb3RzdHJhcC5kZWZpbmUoYSx7ZXh0ZW5kOkVycm9yLGNvbnN0cnVjdDpmdW5jdGlvbihjLGQsZSl7RXJyb3IuY2FsbCh0aGlzLGMpO3RoaXMuX19jVz1jO3RoaXMuX19jWD1kfHxiO3RoaXMuX19jWT1lPT09dW5kZWZpbmVkPy0xOmU7fSxtZW1iZXJzOntfX2NXOm51bGwsX19jWDpudWxsLF9fY1k6bnVsbCx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY1c7fSxnZXRVcmk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NYO30sZ2V0TGluZU51bWJlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY1k7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJHbG9iYWxFcnJvcjogIixhPSJxeC5jb3JlLkdsb2JhbEVycm9yIjtxeC5Cb290c3RyYXAuZGVmaW5lKGEse2V4dGVuZDpFcnJvcixjb25zdHJ1Y3Q6ZnVuY3Rpb24oYyxkKXt7fTt0aGlzLl9fa1M9YisoYyYmYy5tZXNzYWdlP2MubWVzc2FnZTpjKTtFcnJvci5jYWxsKHRoaXMsdGhpcy5fX2tTKTt0aGlzLl9fa1Q9ZDt0aGlzLl9fa1U9Yzt9LG1lbWJlcnM6e19fa1U6bnVsbCxfX2tUOm51bGwsX19rUzpudWxsLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19rUzt9LGdldEFyZ3VtZW50czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fa1Q7fSxnZXRTb3VyY2VFeGNlcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2tVO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX2tVPW51bGw7dGhpcy5fX2tUPW51bGw7dGhpcy5fX2tTPW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LmV2ZW50LklFdmVudEhhbmRsZXIiO3F4LkludGVyZmFjZS5kZWZpbmUoYSx7c3RhdGljczp7VEFSR0VUX0RPTU5PREU6MSxUQVJHRVRfV0lORE9XOjIsVEFSR0VUX09CSkVDVDo0LFRBUkdFVF9ET0NVTUVOVDo4fSxtZW1iZXJzOntjYW5IYW5kbGVFdmVudDpmdW5jdGlvbihiLGMpe30scmVnaXN0ZXJFdmVudDpmdW5jdGlvbihkLGUsZil7fSx1bnJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oZyxoLGkpe319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYz0icXguZXZlbnQudHlwZS5EYXRhIixiPSJxeC5ldmVudC50eXBlLkV2ZW50IixhPSJxeC5kYXRhLklMaXN0RGF0YSI7cXguSW50ZXJmYWNlLmRlZmluZShhLHtldmVudHM6eyJjaGFuZ2UiOmMsImNoYW5nZUxlbmd0aCI6Yn0sbWVtYmVyczp7Z2V0SXRlbTpmdW5jdGlvbihkKXt9LHNldEl0ZW06ZnVuY3Rpb24oZSxmKXt9LHNwbGljZTpmdW5jdGlvbihnLGgsaSl7fSxjb250YWluczpmdW5jdGlvbihqKXt9LGdldExlbmd0aDpmdW5jdGlvbigpe30sdG9BcnJheTpmdW5jdGlvbigpe319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgubGFuZy5EYXRlIjtxeC5DbGFzcy5kZWZpbmUoYSx7c3RhdGljczp7bm93OmZ1bmN0aW9uKCl7cmV0dXJuICtuZXcgRGF0ZTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9InF4LnV0aWwuT2JqZWN0UG9vbCIsYT0iSW50ZWdlciI7cXguQ2xhc3MuZGVmaW5lKGIse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxjb25zdHJ1Y3Q6ZnVuY3Rpb24oYyl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9fZkg9e307aWYoYyE9bnVsbCl7dGhpcy5zZXRTaXplKGMpO319LHByb3BlcnRpZXM6e3NpemU6e2NoZWNrOmEsaW5pdDpJbmZpbml0eX19LG1lbWJlcnM6e19fZkg6bnVsbCxnZXRPYmplY3Q6ZnVuY3Rpb24oZCl7aWYodGhpcy4kJGRpc3Bvc2VkKXtyZXR1cm4gbmV3IGQ7fWlmKCFkKXt0aHJvdyBuZXcgRXJyb3IoIkNsYXNzIG5lZWRzIHRvIGJlIGRlZmluZWQhIik7fXZhciBlPW51bGw7dmFyIGY9dGhpcy5fX2ZIW2QuY2xhc3NuYW1lXTtpZihmKXtlPWYucG9wKCk7fWlmKGUpe2UuJCRwb29sZWQ9ZmFsc2U7fWVsc2V7ZT1uZXcgZDt9cmV0dXJuIGU7fSxwb29sT2JqZWN0OmZ1bmN0aW9uKGcpe2lmKCF0aGlzLl9fZkgpe3JldHVybjt9dmFyIGg9Zy5jbGFzc25hbWU7dmFyIGo9dGhpcy5fX2ZIW2hdO2lmKGcuJCRwb29sZWQpe3Rocm93IG5ldyBFcnJvcigiT2JqZWN0IGlzIGFscmVhZHkgcG9vbGVkOiAiK2cpO31pZighail7dGhpcy5fX2ZIW2hdPWo9W107fWlmKGoubGVuZ3RoPnRoaXMuZ2V0U2l6ZSgpKXtpZihnLmRlc3Ryb3kpe2cuZGVzdHJveSgpO31lbHNle2cuZGlzcG9zZSgpO31yZXR1cm47fWcuJCRwb29sZWQ9dHJ1ZTtqLnB1c2goZyk7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLl9fZkg7dmFyIGssbSxpLGw7Zm9yKGsgaW4gbil7bT1uW2tdO2ZvcihpPTAsbD1tLmxlbmd0aDtpPGw7aSsrKXttW2ldLmRpc3Bvc2UoKTt9fWRlbGV0ZSB0aGlzLl9fZkg7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9InNpbmdsZXRvbiIsYT0icXguZXZlbnQuUG9vbCI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC51dGlsLk9iamVjdFBvb2wsdHlwZTpiLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnV0aWwuT2JqZWN0UG9vbC5jYWxsKHRoaXMsMzApO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC51dGlsLkRpc3Bvc2VVdGlsIjtxeC5DbGFzcy5kZWZpbmUoYSx7c3RhdGljczp7ZGlzcG9zZU9iamVjdHM6ZnVuY3Rpb24oYixjLGQpe3ZhciBuYW1lO2Zvcih2YXIgaT0wLGw9Yy5sZW5ndGg7aTxsO2krKyl7bmFtZT1jW2ldO2lmKGJbbmFtZV09PW51bGx8fCFiLmhhc093blByb3BlcnR5KG5hbWUpKXtjb250aW51ZTt9aWYoIXF4LmNvcmUuT2JqZWN0UmVnaXN0cnkuaW5TaHV0RG93bil7aWYoYltuYW1lXS5kaXNwb3NlKXtpZighZCYmYltuYW1lXS5jb25zdHJ1Y3Rvci4kJGluc3RhbmNlKXt0aHJvdyBuZXcgRXJyb3IoIlRoZSBvYmplY3Qgc3RvcmVkIGluIGtleSAiK25hbWUrIiBpcyBhIHNpbmdsZXRvbiEgUGxlYXNlIHVzZSBkaXNwb3NlU2luZ2xldG9uIGluc3RlYWQuIik7fWVsc2V7YltuYW1lXS5kaXNwb3NlKCk7fX1lbHNle3Rocm93IG5ldyBFcnJvcigiSGFzIG5vIGRpc3Bvc2FibGUgb2JqZWN0IHVuZGVyIGtleTogIituYW1lKyIhIik7fX1iW25hbWVdPW51bGw7fX0sZGlzcG9zZUFycmF5OmZ1bmN0aW9uKGUsZil7dmFyIGg9ZVtmXTtpZighaCl7cmV0dXJuO31pZihxeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LmluU2h1dERvd24pe2VbZl09bnVsbDtyZXR1cm47fXRyeXt2YXIgZztmb3IodmFyIGk9aC5sZW5ndGgtMTtpPj0wO2ktLSl7Zz1oW2ldO2lmKGcpe2cuZGlzcG9zZSgpO319fWNhdGNoKGope3Rocm93IG5ldyBFcnJvcigiVGhlIGFycmF5IGZpZWxkOiAiK2YrIiBvZiBvYmplY3Q6ICIrZSsiIGhhcyBub24gZGlzcG9zYWJsZSBlbnRyaWVzOiAiK2opO31oLmxlbmd0aD0wO2VbZl09bnVsbDt9LGRpc3Bvc2VNYXA6ZnVuY3Rpb24oayxtKXt2YXIgbz1rW21dO2lmKCFvKXtyZXR1cm47fWlmKHF4LmNvcmUuT2JqZWN0UmVnaXN0cnkuaW5TaHV0RG93bil7a1ttXT1udWxsO3JldHVybjt9dHJ5e3ZhciBuO2Zvcih2YXIgcCBpbiBvKXtuPW9bcF07aWYoby5oYXNPd25Qcm9wZXJ0eShwKSYmbil7bi5kaXNwb3NlKCk7fX19Y2F0Y2gocSl7dGhyb3cgbmV3IEVycm9yKCJUaGUgbWFwIGZpZWxkOiAiK20rIiBvZiBvYmplY3Q6ICIraysiIGhhcyBub24gZGlzcG9zYWJsZSBlbnRyaWVzOiAiK3EpO31rW21dPW51bGw7fSxkaXNwb3NlVHJpZ2dlcmVkQnk6ZnVuY3Rpb24ocixzKXt2YXIgdD1zLmRpc3Bvc2U7cy5kaXNwb3NlPWZ1bmN0aW9uKCl7dC5jYWxsKHMpO3IuZGlzcG9zZSgpO307fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBtPSJnZXQiLGw9IiIsaz0iWyIsaD0ibGFzdCIsZz0iY2hhbmdlIixmPSJdIixkPSIuIixjPSJOdW1iZXIiLGI9IlN0cmluZyIsYT0ic2V0IixEPSJkZWVwQmluZGluZyIsQz0iaXRlbSIsQj0icmVzZXQiLEE9IicgKCIsej0iQm9vbGVhbiIseT0iKSB0byB0aGUgb2JqZWN0ICciLHg9IkludGVnZXIiLHc9IiBvZiBvYmplY3QgIix2PSJxeC5kYXRhLlNpbmdsZVZhbHVlQmluZGluZyIsdT0iQmluZGluZyBwcm9wZXJ0eSAiLHM9IkJpbmRpbmcgZnJvbSAnIix0PSJQb3NpdGl2ZU51bWJlciIscT0iUG9zaXRpdmVJbnRlZ2VyIixyPSJCaW5kaW5nIGRvZXMgbm90IGV4aXN0ISIsbz0iKS4iLHA9IkRhdGUiLG49IiBub3QgcG9zc2libGU6IE5vIGV2ZW50IGF2YWlsYWJsZS4gIjtxeC5DbGFzcy5kZWZpbmUodix7c3RhdGljczp7REVCVUdfT046ZmFsc2UsX19nbDp7fSxiaW5kOmZ1bmN0aW9uKEUsRixHLEgsSSl7dmFyIFM9dGhpcy5fX2duKEUsRixHLEgsSSk7dmFyIE49Ri5zcGxpdChkKTt2YXIgSz10aGlzLl9fZ3QoTik7dmFyIFI9W107dmFyIE89W107dmFyIFA9W107dmFyIEw9W107dmFyIE09RTtmb3IodmFyIGk9MDtpPE4ubGVuZ3RoO2krKyl7aWYoS1tpXSE9PWwpe0wucHVzaChnKTt9ZWxzZXtMLnB1c2godGhpcy5fX2dvKE0sTltpXSkpO31SW2ldPU07aWYoaT09Ti5sZW5ndGgtMSl7aWYoS1tpXSE9PWwpe3ZhciBWPUtbaV09PT1oP00ubGVuZ3RoLTE6S1tpXTt2YXIgSj1NLmdldEl0ZW0oVik7dGhpcy5fX2dzKEosRyxILEksRSk7UFtpXT10aGlzLl9fZ3UoTSxMW2ldLEcsSCxJLEtbaV0pO31lbHNle2lmKE5baV0hPW51bGwmJk1bbStxeC5sYW5nLlN0cmluZy5maXJzdFVwKE5baV0pXSE9bnVsbCl7dmFyIEo9TVttK3F4LmxhbmcuU3RyaW5nLmZpcnN0VXAoTltpXSldKCk7dGhpcy5fX2dzKEosRyxILEksRSk7fVBbaV09dGhpcy5fX2d1KE0sTFtpXSxHLEgsSSk7fX1lbHNle3ZhciBUPXtpbmRleDppLHByb3BlcnR5TmFtZXM6Tixzb3VyY2VzOlIsbGlzdGVuZXJJZHM6UCxhcnJheUluZGV4VmFsdWVzOkssdGFyZ2V0T2JqZWN0OkcsdGFyZ2V0UHJvcGVydHlDaGFpbjpILG9wdGlvbnM6SSxsaXN0ZW5lcnM6T307dmFyIFE9cXgubGFuZy5GdW5jdGlvbi5iaW5kKHRoaXMuX19nbSx0aGlzLFQpO08ucHVzaChRKTtQW2ldPU0uYWRkTGlzdGVuZXIoTFtpXSxRKTt9aWYoTVttK3F4LmxhbmcuU3RyaW5nLmZpcnN0VXAoTltpXSldPT1udWxsKXtNPW51bGw7fWVsc2UgaWYoS1tpXSE9PWwpe009TVttK3F4LmxhbmcuU3RyaW5nLmZpcnN0VXAoTltpXSldKEtbaV0pO31lbHNle009TVttK3F4LmxhbmcuU3RyaW5nLmZpcnN0VXAoTltpXSldKCk7fWlmKCFNKXticmVhazt9fXZhciBVPXt0eXBlOkQsbGlzdGVuZXJJZHM6UCxzb3VyY2VzOlIsdGFyZ2V0TGlzdGVuZXJJZHM6Uy5saXN0ZW5lcklkcyx0YXJnZXRzOlMudGFyZ2V0c307dGhpcy5fX2d2KFUsRSxGLEcsSCk7cmV0dXJuIFU7fSxfX2dtOmZ1bmN0aW9uKFcpe2lmKFcub3B0aW9ucyYmVy5vcHRpb25zLm9uVXBkYXRlKXtXLm9wdGlvbnMub25VcGRhdGUoVy5zb3VyY2VzW1cuaW5kZXhdLFcudGFyZ2V0T2JqZWN0KTt9Zm9yKHZhciBqPVcuaW5kZXgrMTtqPFcucHJvcGVydHlOYW1lcy5sZW5ndGg7aisrKXt2YXIgYmI9Vy5zb3VyY2VzW2pdO1cuc291cmNlc1tqXT1udWxsO2lmKCFiYil7Y29udGludWU7fWJiLnJlbW92ZUxpc3RlbmVyQnlJZChXLmxpc3RlbmVySWRzW2pdKTt9dmFyIGJiPVcuc291cmNlc1tXLmluZGV4XTtmb3IodmFyIGo9Vy5pbmRleCsxO2o8Vy5wcm9wZXJ0eU5hbWVzLmxlbmd0aDtqKyspe2lmKFcuYXJyYXlJbmRleFZhbHVlc1tqLTFdIT09bCl7YmI9YmJbbStxeC5sYW5nLlN0cmluZy5maXJzdFVwKFcucHJvcGVydHlOYW1lc1tqLTFdKV0oVy5hcnJheUluZGV4VmFsdWVzW2otMV0pO31lbHNle2JiPWJiW20rcXgubGFuZy5TdHJpbmcuZmlyc3RVcChXLnByb3BlcnR5TmFtZXNbai0xXSldKCk7fVcuc291cmNlc1tqXT1iYjtpZighYmIpe3RoaXMuX19ncChXLnRhcmdldE9iamVjdCxXLnRhcmdldFByb3BlcnR5Q2hhaW4pO2JyZWFrO31pZihqPT1XLnByb3BlcnR5TmFtZXMubGVuZ3RoLTEpe2lmKHF4LkNsYXNzLmltcGxlbWVudHNJbnRlcmZhY2UoYmIscXguZGF0YS5JTGlzdERhdGEpKXt2YXIgYmM9Vy5hcnJheUluZGV4VmFsdWVzW2pdPT09aD9iYi5sZW5ndGgtMTpXLmFycmF5SW5kZXhWYWx1ZXNbal07dmFyIFk9YmIuZ2V0SXRlbShiYyk7dGhpcy5fX2dzKFksVy50YXJnZXRPYmplY3QsVy50YXJnZXRQcm9wZXJ0eUNoYWluLFcub3B0aW9ucyxXLnNvdXJjZXNbVy5pbmRleF0pO1cubGlzdGVuZXJJZHNbal09dGhpcy5fX2d1KGJiLGcsVy50YXJnZXRPYmplY3QsVy50YXJnZXRQcm9wZXJ0eUNoYWluLFcub3B0aW9ucyxXLmFycmF5SW5kZXhWYWx1ZXNbal0pO31lbHNle2lmKFcucHJvcGVydHlOYW1lc1tqXSE9bnVsbCYmYmJbbStxeC5sYW5nLlN0cmluZy5maXJzdFVwKFcucHJvcGVydHlOYW1lc1tqXSldIT1udWxsKXt2YXIgWT1iYlttK3F4LmxhbmcuU3RyaW5nLmZpcnN0VXAoVy5wcm9wZXJ0eU5hbWVzW2pdKV0oKTt0aGlzLl9fZ3MoWSxXLnRhcmdldE9iamVjdCxXLnRhcmdldFByb3BlcnR5Q2hhaW4sVy5vcHRpb25zLFcuc291cmNlc1tXLmluZGV4XSk7fXZhciBiYT10aGlzLl9fZ28oYmIsVy5wcm9wZXJ0eU5hbWVzW2pdKTtXLmxpc3RlbmVySWRzW2pdPXRoaXMuX19ndShiYixiYSxXLnRhcmdldE9iamVjdCxXLnRhcmdldFByb3BlcnR5Q2hhaW4sVy5vcHRpb25zKTt9fWVsc2V7aWYoVy5saXN0ZW5lcnNbal09PW51bGwpe3ZhciBYPXF4LmxhbmcuRnVuY3Rpb24uYmluZCh0aGlzLl9fZ20sdGhpcyxXKTtXLmxpc3RlbmVycy5wdXNoKFgpO31pZihxeC5DbGFzcy5pbXBsZW1lbnRzSW50ZXJmYWNlKGJiLHF4LmRhdGEuSUxpc3REYXRhKSl7dmFyIGJhPWc7fWVsc2V7dmFyIGJhPXRoaXMuX19nbyhiYixXLnByb3BlcnR5TmFtZXNbal0pO31XLmxpc3RlbmVySWRzW2pdPWJiLmFkZExpc3RlbmVyKGJhLFcubGlzdGVuZXJzW2pdKTt9fX0sX19nbjpmdW5jdGlvbihiZCxiZSxiZixiZyxiaCl7dmFyIGJsPWJnLnNwbGl0KGQpO3ZhciBiaj10aGlzLl9fZ3QoYmwpO3ZhciBicT1bXTt2YXIgYnA9W107dmFyIGJuPVtdO3ZhciBibT1bXTt2YXIgYms9YmY7Zm9yKHZhciBpPTA7aTxibC5sZW5ndGgtMTtpKyspe2lmKGJqW2ldIT09bCl7Ym0ucHVzaChnKTt9ZWxzZXt0cnl7Ym0ucHVzaCh0aGlzLl9fZ28oYmssYmxbaV0pKTt9Y2F0Y2goZSl7YnJlYWs7fX1icVtpXT1iazt2YXIgYm89ZnVuY3Rpb24oKXtmb3IodmFyIGo9aSsxO2o8YmwubGVuZ3RoLTE7aisrKXt2YXIgYnQ9YnFbal07YnFbal09bnVsbDtpZighYnQpe2NvbnRpbnVlO31idC5yZW1vdmVMaXN0ZW5lckJ5SWQoYm5bal0pO312YXIgYnQ9YnFbaV07Zm9yKHZhciBqPWkrMTtqPGJsLmxlbmd0aC0xO2orKyl7dmFyIGJyPXF4LmxhbmcuU3RyaW5nLmZpcnN0VXAoYmxbai0xXSk7aWYoYmpbai0xXSE9PWwpe3ZhciBidT1ialtqLTFdPT09aD9idC5nZXRMZW5ndGgoKS0xOmJqW2otMV07YnQ9YnRbbSticl0oYnUpO31lbHNle2J0PWJ0W20rYnJdKCk7fWJxW2pdPWJ0O2lmKGJwW2pdPT1udWxsKXticC5wdXNoKGJvKTt9aWYocXguQ2xhc3MuaW1wbGVtZW50c0ludGVyZmFjZShidCxxeC5kYXRhLklMaXN0RGF0YSkpe3ZhciBicz1nO31lbHNle3RyeXt2YXIgYnM9cXguZGF0YS5TaW5nbGVWYWx1ZUJpbmRpbmcuX19nbyhidCxibFtqXSk7fWNhdGNoKGUpe2JyZWFrO319Ym5bal09YnQuYWRkTGlzdGVuZXIoYnMsYnBbal0pO31xeC5kYXRhLlNpbmdsZVZhbHVlQmluZGluZy51cGRhdGVUYXJnZXQoYmQsYmUsYmYsYmcsYmgpO307YnAucHVzaChibyk7Ym5baV09YmsuYWRkTGlzdGVuZXIoYm1baV0sYm8pO3ZhciBiaT1xeC5sYW5nLlN0cmluZy5maXJzdFVwKGJsW2ldKTtpZihia1ttK2JpXT09bnVsbCl7Yms9bnVsbDt9ZWxzZSBpZihialtpXSE9PWwpe2JrPWJrW20rYmldKGJqW2ldKTt9ZWxzZXtiaz1ia1ttK2JpXSgpO31pZighYmspe2JyZWFrO319cmV0dXJuIHtsaXN0ZW5lcklkczpibix0YXJnZXRzOmJxfTt9LHVwZGF0ZVRhcmdldDpmdW5jdGlvbihidixidyxieCxieSxieil7dmFyIGJEPXRoaXMuX19ncihidixidyk7aWYoYkQhPW51bGwpe3ZhciBiRj1idy5zdWJzdHJpbmcoYncubGFzdEluZGV4T2YoZCkrMSxidy5sZW5ndGgpO2lmKGJGLmNoYXJBdChiRi5sZW5ndGgtMSk9PWYpe3ZhciBiQT1iRi5zdWJzdHJpbmcoYkYubGFzdEluZGV4T2YoaykrMSxiRi5sZW5ndGgtMSk7dmFyIGJDPWJGLnN1YnN0cmluZygwLGJGLmxhc3RJbmRleE9mKGspKTt2YXIgYkU9YkRbbStxeC5sYW5nLlN0cmluZy5maXJzdFVwKGJDKV0oKTtpZihiQT09aCl7YkE9YkUubGVuZ3RoLTE7fWlmKGJFIT1udWxsKXt2YXIgYkI9YkUuZ2V0SXRlbShiQSk7fX1lbHNle3ZhciBiQj1iRFttK3F4LmxhbmcuU3RyaW5nLmZpcnN0VXAoYkYpXSgpO319YkI9cXguZGF0YS5TaW5nbGVWYWx1ZUJpbmRpbmcuX19ndyhiQixieCxieSxieik7dGhpcy5fX2dxKGJ4LGJ5LGJCKTt9LF9fZ286ZnVuY3Rpb24oYkcsYkgpe3ZhciBiST10aGlzLl9fZ3goYkcsYkgpO2lmKGJJPT1udWxsKXtpZihxeC5DbGFzcy5zdXBwb3J0c0V2ZW50KGJHLmNvbnN0cnVjdG9yLGJIKSl7Ykk9Ykg7fWVsc2UgaWYocXguQ2xhc3Muc3VwcG9ydHNFdmVudChiRy5jb25zdHJ1Y3RvcixnK3F4LmxhbmcuU3RyaW5nLmZpcnN0VXAoYkgpKSl7Ykk9ZytxeC5sYW5nLlN0cmluZy5maXJzdFVwKGJIKTt9ZWxzZXt0aHJvdyBuZXcgcXguY29yZS5Bc3NlcnRpb25FcnJvcih1K2JIK3crYkcrbik7fX1yZXR1cm4gYkk7fSxfX2dwOmZ1bmN0aW9uKGJKLGJLKXt2YXIgYkw9dGhpcy5fX2dyKGJKLGJLKTtpZihiTCE9bnVsbCl7dmFyIGJNPWJLLnN1YnN0cmluZyhiSy5sYXN0SW5kZXhPZihkKSsxLGJLLmxlbmd0aCk7aWYoYk0uY2hhckF0KGJNLmxlbmd0aC0xKT09Zil7dGhpcy5fX2dxKGJKLGJLLG51bGwpO3JldHVybjt9aWYoYkxbQitxeC5sYW5nLlN0cmluZy5maXJzdFVwKGJNKV0hPXVuZGVmaW5lZCl7YkxbQitxeC5sYW5nLlN0cmluZy5maXJzdFVwKGJNKV0oKTt9ZWxzZXtiTFthK3F4LmxhbmcuU3RyaW5nLmZpcnN0VXAoYk0pXShudWxsKTt9fX0sX19ncTpmdW5jdGlvbihiTixiTyxiUCl7dmFyIGJUPXRoaXMuX19ncihiTixiTyk7aWYoYlQhPW51bGwpe3ZhciBiVT1iTy5zdWJzdHJpbmcoYk8ubGFzdEluZGV4T2YoZCkrMSxiTy5sZW5ndGgpO2lmKGJVLmNoYXJBdChiVS5sZW5ndGgtMSk9PWYpe3ZhciBiUT1iVS5zdWJzdHJpbmcoYlUubGFzdEluZGV4T2YoaykrMSxiVS5sZW5ndGgtMSk7dmFyIGJTPWJVLnN1YnN0cmluZygwLGJVLmxhc3RJbmRleE9mKGspKTt2YXIgYlI9YlRbbStxeC5sYW5nLlN0cmluZy5maXJzdFVwKGJTKV0oKTtpZihiUT09aCl7YlE9YlIubGVuZ3RoLTE7fWlmKGJSIT1udWxsKXtiUi5zZXRJdGVtKGJRLGJQKTt9fWVsc2V7YlRbYStxeC5sYW5nLlN0cmluZy5maXJzdFVwKGJVKV0oYlApO319fSxfX2dyOmZ1bmN0aW9uKGJWLGJXKXt2YXIgY2E9Ylcuc3BsaXQoZCk7dmFyIGNiPWJWO2Zvcih2YXIgaT0wO2k8Y2EubGVuZ3RoLTE7aSsrKXt0cnl7dmFyIGJZPWNhW2ldO2lmKGJZLmluZGV4T2YoZik9PWJZLmxlbmd0aC0xKXt2YXIgYlg9Ylkuc3Vic3RyaW5nKGJZLmluZGV4T2YoaykrMSxiWS5sZW5ndGgtMSk7Ylk9Ylkuc3Vic3RyaW5nKDAsYlkuaW5kZXhPZihrKSk7fWNiPWNiW20rcXgubGFuZy5TdHJpbmcuZmlyc3RVcChiWSldKCk7aWYoYlghPW51bGwpe2lmKGJYPT1oKXtiWD1jYi5sZW5ndGgtMTt9Y2I9Y2IuZ2V0SXRlbShiWCk7Ylg9bnVsbDt9fWNhdGNoKGNjKXtyZXR1cm4gbnVsbDt9fXJldHVybiBjYjt9LF9fZ3M6ZnVuY3Rpb24oY2QsY2UsY2YsY2csY2gpe2NkPXRoaXMuX19ndyhjZCxjZSxjZixjZyk7aWYoY2Q9PT11bmRlZmluZWQpe3RoaXMuX19ncChjZSxjZik7fWlmKGNkIT09dW5kZWZpbmVkKXt0cnl7dGhpcy5fX2dxKGNlLGNmLGNkKTtpZihjZyYmY2cub25VcGRhdGUpe2NnLm9uVXBkYXRlKGNoLGNlLGNkKTt9fWNhdGNoKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHF4LmNvcmUuVmFsaWRhdGlvbkVycm9yKSl7dGhyb3cgZTt9aWYoY2cmJmNnLm9uU2V0RmFpbCl7Y2cub25TZXRGYWlsKGUpO31lbHNle3F4LmxvZy5Mb2dnZXIud2FybigiRmFpbGVkIHNvIHNldCB2YWx1ZSAiK2NkKyIgb24gIitjZSsiLiBFcnJvciBtZXNzYWdlOiAiK2UpO319fX0sX19ndDpmdW5jdGlvbihjaSl7dmFyIGNqPVtdO2Zvcih2YXIgaT0wO2k8Y2kubGVuZ3RoO2krKyl7dmFyIG5hbWU9Y2lbaV07aWYocXgubGFuZy5TdHJpbmcuZW5kc1dpdGgobmFtZSxmKSl7dmFyIGNrPW5hbWUuc3Vic3RyaW5nKG5hbWUuaW5kZXhPZihrKSsxLG5hbWUuaW5kZXhPZihmKSk7aWYobmFtZS5pbmRleE9mKGYpIT1uYW1lLmxlbmd0aC0xKXt0aHJvdyBuZXcgRXJyb3IoIlBsZWFzZSB1c2Ugb25seSBvbmUgYXJyYXkgYXQgYSB0aW1lOiAiK25hbWUrIiBkb2VzIG5vdCB3b3JrLiIpO31pZihjayE9PWgpe2lmKGNrPT1sfHxpc05hTihwYXJzZUludChjaywxMCkpKXt0aHJvdyBuZXcgRXJyb3IoIk5vIG51bWJlciBvciAnbGFzdCcgdmFsdWUgaGFzdCBiZWVuIGdpdmVuIisiIGluIGEgYXJyYXkgYmluZGluZzogIituYW1lKyIgZG9lcyBub3Qgd29yay4iKTt9fWlmKG5hbWUuaW5kZXhPZihrKSE9MCl7Y2lbaV09bmFtZS5zdWJzdHJpbmcoMCxuYW1lLmluZGV4T2YoaykpO2NqW2ldPWw7Y2pbaSsxXT1jaztjaS5zcGxpY2UoaSsxLDAsQyk7aSsrO31lbHNle2NqW2ldPWNrO2NpLnNwbGljZShpLDEsQyk7fX1lbHNle2NqW2ldPWw7fX1yZXR1cm4gY2o7fSxfX2d1OmZ1bmN0aW9uKGNsLGNtLGNuLGNvLGNwLGNxKXt2YXIgY3I7e307dmFyIGN0PWZ1bmN0aW9uKGN1LGUpe2lmKGN1IT09bCl7aWYoY3U9PT1oKXtjdT1jbC5sZW5ndGgtMTt9dmFyIGN4PWNsLmdldEl0ZW0oY3UpO2lmKGN4PT09dW5kZWZpbmVkKXtxeC5kYXRhLlNpbmdsZVZhbHVlQmluZGluZy5fX2dwKGNuLGNvKTt9dmFyIGN2PWUuZ2V0RGF0YSgpLnN0YXJ0O3ZhciBjdz1lLmdldERhdGEoKS5lbmQ7aWYoY3U8Y3Z8fGN1PmN3KXtyZXR1cm47fX1lbHNle3ZhciBjeD1lLmdldERhdGEoKTt9aWYocXguZGF0YS5TaW5nbGVWYWx1ZUJpbmRpbmcuREVCVUdfT04pe3F4LmxvZy5Mb2dnZXIuZGVidWcoIkJpbmRpbmcgZXhlY3V0ZWQgZnJvbSAiK2NsKyIgYnkgIitjbSsiIHRvICIrY24rIiAoIitjbysiKSIpO3F4LmxvZy5Mb2dnZXIuZGVidWcoIkRhdGEgYmVmb3JlIGNvbnZlcnNpb246ICIrY3gpO31jeD1xeC5kYXRhLlNpbmdsZVZhbHVlQmluZGluZy5fX2d3KGN4LGNuLGNvLGNwKTtpZihxeC5kYXRhLlNpbmdsZVZhbHVlQmluZGluZy5ERUJVR19PTil7cXgubG9nLkxvZ2dlci5kZWJ1ZygiRGF0YSBhZnRlciBjb252ZXJzaW9uOiAiK2N4KTt9dHJ5e2lmKGN4IT09dW5kZWZpbmVkKXtxeC5kYXRhLlNpbmdsZVZhbHVlQmluZGluZy5fX2dxKGNuLGNvLGN4KTt9ZWxzZXtxeC5kYXRhLlNpbmdsZVZhbHVlQmluZGluZy5fX2dwKGNuLGNvKTt9aWYoY3AmJmNwLm9uVXBkYXRlKXtjcC5vblVwZGF0ZShjbCxjbixjeCk7fX1jYXRjaChlKXtpZighKGUgaW5zdGFuY2VvZiBxeC5jb3JlLlZhbGlkYXRpb25FcnJvcikpe3Rocm93IGU7fWlmKGNwJiZjcC5vblNldEZhaWwpe2NwLm9uU2V0RmFpbChlKTt9ZWxzZXtxeC5sb2cuTG9nZ2VyLndhcm4oIkZhaWxlZCBzbyBzZXQgdmFsdWUgIitjeCsiIG9uICIrY24rIi4gRXJyb3IgbWVzc2FnZTogIitlKTt9fX07aWYoIWNxKXtjcT1sO31jdD1xeC5sYW5nLkZ1bmN0aW9uLmJpbmQoY3QsY2wsY3EpO3ZhciBjcz1jbC5hZGRMaXN0ZW5lcihjbSxjdCk7cmV0dXJuIGNzO30sX19ndjpmdW5jdGlvbihjeSxjeixjQSxjQixjQyl7aWYodGhpcy5fX2dsW2N6LnRvSGFzaENvZGUoKV09PT11bmRlZmluZWQpe3RoaXMuX19nbFtjei50b0hhc2hDb2RlKCldPVtdO310aGlzLl9fZ2xbY3oudG9IYXNoQ29kZSgpXS5wdXNoKFtjeSxjeixjQSxjQixjQ10pO30sX19ndzpmdW5jdGlvbihjRCxjRSxjRixjRyl7aWYoY0cmJmNHLmNvbnZlcnRlcil7dmFyIGNJO2lmKGNFLmdldE1vZGVsKXtjST1jRS5nZXRNb2RlbCgpO31yZXR1cm4gY0cuY29udmVydGVyKGNELGNJKTt9ZWxzZXt2YXIgY0s9dGhpcy5fX2dyKGNFLGNGKTt2YXIgY0w9Y0Yuc3Vic3RyaW5nKGNGLmxhc3RJbmRleE9mKGQpKzEsY0YubGVuZ3RoKTtpZihjSz09bnVsbCl7cmV0dXJuIGNEO312YXIgY0o9cXguQ2xhc3MuZ2V0UHJvcGVydHlEZWZpbml0aW9uKGNLLmNvbnN0cnVjdG9yLGNMKTt2YXIgY0g9Y0o9PW51bGw/bDpjSi5jaGVjaztyZXR1cm4gdGhpcy5fX2d5KGNELGNIKTt9fSxfX2d4OmZ1bmN0aW9uKGNNLGNOKXt2YXIgY089cXguQ2xhc3MuZ2V0UHJvcGVydHlEZWZpbml0aW9uKGNNLmNvbnN0cnVjdG9yLGNOKTtpZihjTz09bnVsbCl7cmV0dXJuIG51bGw7fXJldHVybiBjTy5ldmVudDt9LF9fZ3k6ZnVuY3Rpb24oY1AsY1Epe3ZhciBjUj1xeC5sYW5nLlR5cGUuZ2V0Q2xhc3MoY1ApO2lmKChjUj09Y3x8Y1I9PWIpJiYoY1E9PXh8fGNRPT1xKSl7Y1A9cGFyc2VJbnQoY1AsMTApO31pZigoY1I9PXp8fGNSPT1jfHxjUj09cCkmJmNRPT1iKXtjUD1jUCtsO31pZigoY1I9PWN8fGNSPT1iKSYmKGNRPT1jfHxjUT09dCkpe2NQPXBhcnNlRmxvYXQoY1ApO31yZXR1cm4gY1A7fSxyZW1vdmVCaW5kaW5nRnJvbU9iamVjdDpmdW5jdGlvbihjUyxjVCl7aWYoY1QudHlwZT09RCl7Zm9yKHZhciBpPTA7aTxjVC5zb3VyY2VzLmxlbmd0aDtpKyspe2lmKGNULnNvdXJjZXNbaV0pe2NULnNvdXJjZXNbaV0ucmVtb3ZlTGlzdGVuZXJCeUlkKGNULmxpc3RlbmVySWRzW2ldKTt9fWZvcih2YXIgaT0wO2k8Y1QudGFyZ2V0cy5sZW5ndGg7aSsrKXtpZihjVC50YXJnZXRzW2ldKXtjVC50YXJnZXRzW2ldLnJlbW92ZUxpc3RlbmVyQnlJZChjVC50YXJnZXRMaXN0ZW5lcklkc1tpXSk7fX19ZWxzZXtjUy5yZW1vdmVMaXN0ZW5lckJ5SWQoY1QpO312YXIgY1U9dGhpcy5fX2dsW2NTLnRvSGFzaENvZGUoKV07aWYoY1UhPXVuZGVmaW5lZCl7Zm9yKHZhciBpPTA7aTxjVS5sZW5ndGg7aSsrKXtpZihjVVtpXVswXT09Y1Qpe3F4LmxhbmcuQXJyYXkucmVtb3ZlKGNVLGNVW2ldKTtyZXR1cm47fX19dGhyb3cgbmV3IEVycm9yKCJCaW5kaW5nIGNvdWxkIG5vdCBiZSBmb3VuZCEiKTt9LHJlbW92ZUFsbEJpbmRpbmdzRm9yT2JqZWN0OmZ1bmN0aW9uKGNWKXt7fTt2YXIgY1c9dGhpcy5fX2dsW2NWLnRvSGFzaENvZGUoKV07aWYoY1chPXVuZGVmaW5lZCl7Zm9yKHZhciBpPWNXLmxlbmd0aC0xO2k+PTA7aS0tKXt0aGlzLnJlbW92ZUJpbmRpbmdGcm9tT2JqZWN0KGNWLGNXW2ldWzBdKTt9fX0sZ2V0QWxsQmluZGluZ3NGb3JPYmplY3Q6ZnVuY3Rpb24oY1gpe2lmKHRoaXMuX19nbFtjWC50b0hhc2hDb2RlKCldPT09dW5kZWZpbmVkKXt0aGlzLl9fZ2xbY1gudG9IYXNoQ29kZSgpXT1bXTt9cmV0dXJuIHRoaXMuX19nbFtjWC50b0hhc2hDb2RlKCldO30scmVtb3ZlQWxsQmluZGluZ3M6ZnVuY3Rpb24oKXtmb3IodmFyIGRhIGluIHRoaXMuX19nbCl7dmFyIGNZPXF4LmNvcmUuT2JqZWN0UmVnaXN0cnkuZnJvbUhhc2hDb2RlKGRhKTtpZihjWT09bnVsbCl7ZGVsZXRlIHRoaXMuX19nbFtkYV07Y29udGludWU7fXRoaXMucmVtb3ZlQWxsQmluZGluZ3NGb3JPYmplY3QoY1kpO310aGlzLl9fZ2w9e307fSxnZXRBbGxCaW5kaW5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2w7fSxzaG93QmluZGluZ0luTG9nOmZ1bmN0aW9uKGRiLGRjKXt2YXIgZGU7Zm9yKHZhciBpPTA7aTx0aGlzLl9fZ2xbZGIudG9IYXNoQ29kZSgpXS5sZW5ndGg7aSsrKXtpZih0aGlzLl9fZ2xbZGIudG9IYXNoQ29kZSgpXVtpXVswXT09ZGMpe2RlPXRoaXMuX19nbFtkYi50b0hhc2hDb2RlKCldW2ldO2JyZWFrO319aWYoZGU9PT11bmRlZmluZWQpe3ZhciBkZD1yO31lbHNle3ZhciBkZD1zK2RlWzFdK0ErZGVbMl0reStkZVszXStBK2RlWzRdK287fXF4LmxvZy5Mb2dnZXIuZGVidWcoZGQpO30sc2hvd0FsbEJpbmRpbmdzSW5Mb2c6ZnVuY3Rpb24oKXtmb3IodmFyIGRnIGluIHRoaXMuX19nbCl7dmFyIGRmPXF4LmNvcmUuT2JqZWN0UmVnaXN0cnkuZnJvbUhhc2hDb2RlKGRnKTtmb3IodmFyIGk9MDtpPHRoaXMuX19nbFtkZ10ubGVuZ3RoO2krKyl7dGhpcy5zaG93QmluZGluZ0luTG9nKGRmLHRoaXMuX19nbFtkZ11baV1bMF0pO319fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBjPSI6ICIsYj0icXgudHlwZS5CYXNlRXJyb3IiLGE9IiI7cXguQ2xhc3MuZGVmaW5lKGIse2V4dGVuZDpFcnJvcixjb25zdHJ1Y3Q6ZnVuY3Rpb24oZCxlKXtFcnJvci5jYWxsKHRoaXMsZSk7dGhpcy5fX2NMPWR8fGE7dGhpcy5tZXNzYWdlPWV8fHF4LnR5cGUuQmFzZUVycm9yLkRFRkFVTFRNRVNTQUdFO30sc3RhdGljczp7REVGQVVMVE1FU1NBR0U6ImVycm9yIn0sbWVtYmVyczp7X19jTDpudWxsLG1lc3NhZ2U6bnVsbCxnZXRDb21tZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jTDt9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jTCtjK3RoaXMubWVzc2FnZTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LmNvcmUuQXNzZXJ0aW9uRXJyb3IiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXgudHlwZS5CYXNlRXJyb3IsY29uc3RydWN0OmZ1bmN0aW9uKGIsYyl7cXgudHlwZS5CYXNlRXJyb3IuY2FsbCh0aGlzLGIsYyk7dGhpcy5fX2xDPXF4LmRldi5TdGFja1RyYWNlLmdldFN0YWNrVHJhY2UoKTt9LG1lbWJlcnM6e19fbEM6bnVsbCxnZXRTdGFja1RyYWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19sQzt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LmNvcmUuVmFsaWRhdGlvbkVycm9yIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LnR5cGUuQmFzZUVycm9yfSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZj0icXgubGFuZy5UeXBlIixlPSJFcnJvciIsZD0iUmVnRXhwIixjPSJEYXRlIixiPSJOdW1iZXIiLGE9IkJvb2xlYW4iO3F4LkNsYXNzLmRlZmluZShmLHtzdGF0aWNzOntnZXRDbGFzczpxeC5Cb290c3RyYXAuZ2V0Q2xhc3MsaXNTdHJpbmc6cXguQm9vdHN0cmFwLmlzU3RyaW5nLGlzQXJyYXk6cXguQm9vdHN0cmFwLmlzQXJyYXksaXNPYmplY3Q6cXguQm9vdHN0cmFwLmlzT2JqZWN0LGlzRnVuY3Rpb246cXguQm9vdHN0cmFwLmlzRnVuY3Rpb24saXNSZWdFeHA6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZ2V0Q2xhc3MoZyk9PWQ7fSxpc051bWJlcjpmdW5jdGlvbihoKXtyZXR1cm4gKGghPT1udWxsJiYodGhpcy5nZXRDbGFzcyhoKT09Ynx8aCBpbnN0YW5jZW9mIE51bWJlcikpO30saXNCb29sZWFuOmZ1bmN0aW9uKGkpe3JldHVybiAoaSE9PW51bGwmJih0aGlzLmdldENsYXNzKGkpPT1hfHxpIGluc3RhbmNlb2YgQm9vbGVhbikpO30saXNEYXRlOmZ1bmN0aW9uKGope3JldHVybiAoaiE9PW51bGwmJih0aGlzLmdldENsYXNzKGopPT1jfHxqIGluc3RhbmNlb2YgRGF0ZSkpO30saXNFcnJvcjpmdW5jdGlvbihrKXtyZXR1cm4gKGshPT1udWxsJiYodGhpcy5nZXRDbGFzcyhrKT09ZXx8ayBpbnN0YW5jZW9mIEVycm9yKSk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC5ldmVudC5JRXZlbnREaXNwYXRjaGVyIjtxeC5JbnRlcmZhY2UuZGVmaW5lKGEse21lbWJlcnM6e2NhbkRpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oYixldmVudCxjKXt0aGlzLmFzc2VydEluc3RhbmNlKGV2ZW50LHF4LmV2ZW50LnR5cGUuRXZlbnQpO3RoaXMuYXNzZXJ0U3RyaW5nKGMpO30sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihkLGV2ZW50LGUpe3RoaXMuYXNzZXJ0SW5zdGFuY2UoZXZlbnQscXguZXZlbnQudHlwZS5FdmVudCk7dGhpcy5hc3NlcnRTdHJpbmcoZSk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC5ldmVudC5kaXNwYXRjaC5EaXJlY3QiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXguY29yZS5PYmplY3QsaW1wbGVtZW50OnF4LmV2ZW50LklFdmVudERpc3BhdGNoZXIsY29uc3RydWN0OmZ1bmN0aW9uKGIpe3RoaXMuX21hbmFnZXI9Yjt9LHN0YXRpY3M6e1BSSU9SSVRZOnF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5QUklPUklUWV9MQVNUfSxtZW1iZXJzOntjYW5EaXNwYXRjaEV2ZW50OmZ1bmN0aW9uKGMsZXZlbnQsZCl7cmV0dXJuICFldmVudC5nZXRCdWJibGVzKCk7fSxkaXNwYXRjaEV2ZW50OmZ1bmN0aW9uKGUsZXZlbnQsZil7dmFyIGosZzt7fTtldmVudC5zZXRFdmVudFBoYXNlKHF4LmV2ZW50LnR5cGUuRXZlbnQuQVRfVEFSR0VUKTt2YXIgaz10aGlzLl9tYW5hZ2VyLmdldExpc3RlbmVycyhlLGYsZmFsc2UpO2lmKGspe2Zvcih2YXIgaT0wLGw9ay5sZW5ndGg7aTxsO2krKyl7dmFyIGg9a1tpXS5jb250ZXh0fHxlO2tbaV0uaGFuZGxlci5jYWxsKGgsZXZlbnQpO319fX0sZGVmZXI6ZnVuY3Rpb24obSl7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmFkZERpc3BhdGNoZXIobSk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LmV2ZW50LmhhbmRsZXIuT2JqZWN0IjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGltcGxlbWVudDpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLHN0YXRpY3M6e1BSSU9SSVRZOnF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5QUklPUklUWV9MQVNULFNVUFBPUlRFRF9UWVBFUzpudWxsLFRBUkdFVF9DSEVDSzpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLlRBUkdFVF9PQkpFQ1QsSUdOT1JFX0NBTl9IQU5ETEU6ZmFsc2V9LG1lbWJlcnM6e2NhbkhhbmRsZUV2ZW50OmZ1bmN0aW9uKGIsYyl7cmV0dXJuIHF4LkNsYXNzLnN1cHBvcnRzRXZlbnQoYi5jb25zdHJ1Y3RvcixjKTt9LHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oZCxlLGYpe30sdW5yZWdpc3RlckV2ZW50OmZ1bmN0aW9uKGcsaCxpKXt9fSxkZWZlcjpmdW5jdGlvbihqKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uYWRkSGFuZGxlcihqKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaz0iaW5kZXhPZiIsaj0ibGFzdEluZGV4T2YiLGg9InNsaWNlIixnPSJjb25jYXQiLGY9ImpvaW4iLGU9InRvTG9jYWxlVXBwZXJDYXNlIixkPSJzaGlmdCIsYz0ic3Vic3RyIixiPSJmaWx0ZXIiLGE9InVuc2hpZnQiLEk9Im1hdGNoIixIPSJxdW90ZSIsRz0icXgubGFuZy5HZW5lcmljcyIsRj0ibG9jYWxlQ29tcGFyZSIsRT0ic29ydCIsRD0ic29tZSIsQz0iY2hhckF0IixCPSJzcGxpdCIsQT0ic3Vic3RyaW5nIix6PSJwb3AiLHQ9InRvVXBwZXJDYXNlIix1PSJyZXBsYWNlIixxPSJwdXNoIixyPSJjaGFyQ29kZUF0IixvPSJldmVyeSIscD0icmV2ZXJzZSIsbT0ic2VhcmNoIixuPSJmb3JFYWNoIix2PSJtYXAiLHc9InRvTG93ZXJDYXNlIix5PSJzcGxpY2UiLHg9InRvTG9jYWxlTG93ZXJDYXNlIjtxeC5DbGFzcy5kZWZpbmUoRyx7c3RhdGljczp7X19lWTp7IkFycmF5IjpbZixwLEUscSx6LGQsYSx5LGcsaCxrLGosbix2LGIsRCxvXSwiU3RyaW5nIjpbSCxBLHcsdCxDLHIsayxqLHgsZSxGLEksbSx1LEIsYyxnLGhdfSxfX2ZhOmZ1bmN0aW9uKEosSyl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBKLnByb3RvdHlwZVtLXS5hcHBseShzLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSk7fTt9LF9fZmI6ZnVuY3Rpb24oKXt2YXIgTD1xeC5sYW5nLkdlbmVyaWNzLl9fZVk7Zm9yKHZhciBQIGluIEwpe3ZhciBOPXdpbmRvd1tQXTt2YXIgTT1MW1BdO2Zvcih2YXIgaT0wLGw9TS5sZW5ndGg7aTxsO2krKyl7dmFyIE89TVtpXTtpZighTltPXSl7TltPXT1xeC5sYW5nLkdlbmVyaWNzLl9fZmEoTixPKTt9fX19fSxkZWZlcjpmdW5jdGlvbihRKXtRLl9fZmIoKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0icXgudXRpbC5EZWZlcnJlZENhbGxNYW5hZ2VyIixhPSJzaW5nbGV0b24iO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6cXguY29yZS5PYmplY3QsdHlwZTphLGNvbnN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19nZj17fTt0aGlzLl9fZ2c9cXgubGFuZy5GdW5jdGlvbi5iaW5kKHRoaXMuX19nayx0aGlzKTt0aGlzLl9fZ2g9ZmFsc2U7fSxtZW1iZXJzOntfX2dpOm51bGwsX19najpudWxsLF9fZ2Y6bnVsbCxfX2doOm51bGwsX19nZzpudWxsLHNjaGVkdWxlOmZ1bmN0aW9uKGMpe2lmKHRoaXMuX19naT09bnVsbCl7dGhpcy5fX2dpPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuX19nZywwKTt9dmFyIGQ9Yy50b0hhc2hDb2RlKCk7aWYodGhpcy5fX2dqJiZ0aGlzLl9fZ2pbZF0pe3JldHVybjt9dGhpcy5fX2dmW2RdPWM7dGhpcy5fX2doPXRydWU7fSxjYW5jZWw6ZnVuY3Rpb24oZSl7dmFyIGY9ZS50b0hhc2hDb2RlKCk7aWYodGhpcy5fX2dqJiZ0aGlzLl9fZ2pbZl0pe3RoaXMuX19naltmXT1udWxsO3JldHVybjt9ZGVsZXRlIHRoaXMuX19nZltmXTtpZihxeC5sYW5nLk9iamVjdC5pc0VtcHR5KHRoaXMuX19nZikmJnRoaXMuX19naSE9bnVsbCl7d2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9fZ2kpO3RoaXMuX19naT1udWxsO319LF9fZ2s6cXguZXZlbnQuR2xvYmFsRXJyb3Iub2JzZXJ2ZU1ldGhvZChmdW5jdGlvbigpe3RoaXMuX19naT1udWxsO3doaWxlKHRoaXMuX19naCl7dGhpcy5fX2dqPXF4LmxhbmcuT2JqZWN0LmNsb25lKHRoaXMuX19nZik7dGhpcy5fX2dmPXt9O3RoaXMuX19naD1mYWxzZTtmb3IodmFyIGggaW4gdGhpcy5fX2dqKXt2YXIgZz10aGlzLl9fZ2pbaF07aWYoZyl7dGhpcy5fX2dqW2hdPW51bGw7Zy5jYWxsKCk7fX19dGhpcy5fX2dqPW51bGw7fSl9LGRlc3RydWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5fX2dpIT1udWxsKXt3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX19naSk7fXRoaXMuX19nZz10aGlzLl9fZ2Y9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgudXRpbC5EZWZlcnJlZENhbGwiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKGIsYyl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9faWE9Yjt0aGlzLl9faWI9Y3x8bnVsbDt0aGlzLl9faWM9cXgudXRpbC5EZWZlcnJlZENhbGxNYW5hZ2VyLmdldEluc3RhbmNlKCk7fSxtZW1iZXJzOntfX2lhOm51bGwsX19pYjpudWxsLF9faWM6bnVsbCxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLl9faWMuY2FuY2VsKHRoaXMpO30sc2NoZWR1bGU6ZnVuY3Rpb24oKXt0aGlzLl9faWMuc2NoZWR1bGUodGhpcyk7fSxjYWxsOmZ1bmN0aW9uKCl7dGhpcy5fX2liP3RoaXMuX19pYS5hcHBseSh0aGlzLl9faWIpOnRoaXMuX19pYSgpO319LGRlc3RydWN0OmZ1bmN0aW9uKGQsZSl7dGhpcy5jYW5jZWwoKTt0aGlzLl9faWI9dGhpcy5fX2lhPXRoaXMuX19pYz1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBtPSJlbGVtZW50IixrPSJxeC5jbGllbnQiLGo9InF4U2VsZWN0YWJsZSIsaD0ib2ZmIixnPSJvbiIsZj0idGV4dCIsZD0iZGl2IixjPSIiLGI9Im1zaHRtbCIsYT0ibm9uZSIsRj0ic2Nyb2xsIixFPSJxeC5odG1sLkVsZW1lbnQiLEQ9InxjYXB0dXJlfCIsQz0iYWN0aXZhdGUiLEI9Il9fZHoiLEE9ImJsdXIiLHo9ImRlYWN0aXZhdGUiLHc9ImNhcHR1cmUiLHY9InVzZXJTZWxlY3QiLHU9Ii1tb3otbm9uZSIscz0idmlzaWJsZSIsdD0icmVsZWFzZUNhcHR1cmUiLHE9InxidWJibGV8IixyPSJ0YWJJbmRleCIsbz0iZm9jdXMiLHA9Ik1velVzZXJTZWxlY3QiLG49ImhpZGRlbiI7cXguQ2xhc3MuZGVmaW5lKEUse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxjb25zdHJ1Y3Q6ZnVuY3Rpb24oRyxILEkpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7dGhpcy5fX2RkPUd8fGQ7dGhpcy5fX2RlPUh8fG51bGw7dGhpcy5fX2RmPUl8fG51bGw7fSxzdGF0aWNzOntERUJVRzpmYWxzZSxfbW9kaWZpZWQ6e30sX3Zpc2liaWxpdHk6e30sX3Njcm9sbDp7fSxfYWN0aW9uczpbXSxfX2RnOnt9LF9zY2hlZHVsZUZsdXNoOmZ1bmN0aW9uKEope3F4Lmh0bWwuRWxlbWVudC5fX2RLLnNjaGVkdWxlKCk7fSxmbHVzaDpmdW5jdGlvbigpe3ZhciBVO3t9O3ZhciBNPXRoaXMuX19kaCgpO3ZhciBMPU0uZ2V0Rm9jdXMoKTtpZihMJiZ0aGlzLl9fZGwoTCkpe00uYmx1cihMKTt9dmFyIGJjPU0uZ2V0QWN0aXZlKCk7aWYoYmMmJnRoaXMuX19kbChiYykpe3F4LmJvbS5FbGVtZW50LmRlYWN0aXZhdGUoYmMpO312YXIgUD10aGlzLl9fZGooKTtpZihQJiZ0aGlzLl9fZGwoUCkpe3F4LmJvbS5FbGVtZW50LnJlbGVhc2VDYXB0dXJlKFApO312YXIgVj1bXTt2YXIgVz10aGlzLl9tb2RpZmllZDtmb3IodmFyIFQgaW4gVyl7VT1XW1RdO2lmKFUuX19kRCgpKXtpZihVLl9fZG0mJnF4LmRvbS5IaWVyYXJjaHkuaXNSZW5kZXJlZChVLl9fZG0pKXtWLnB1c2goVSk7fWVsc2V7e307VS5fX2RDKCk7fWRlbGV0ZSBXW1RdO319Zm9yKHZhciBpPTAsbD1WLmxlbmd0aDtpPGw7aSsrKXtVPVZbaV07e307VS5fX2RDKCk7fXZhciBSPXRoaXMuX3Zpc2liaWxpdHk7Zm9yKHZhciBUIGluIFIpe1U9UltUXTt2YXIgWD1VLl9fZG07aWYoIVgpe2RlbGV0ZSBSW1RdO2NvbnRpbnVlO317fTtpZighVS4kJGRpc3Bvc2VkKXtYLnN0eWxlLmRpc3BsYXk9VS5fX2RwP2M6YTtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoayxiKSl7aWYoIShkb2N1bWVudC5kb2N1bWVudE1vZGU+PTgpKXtYLnN0eWxlLnZpc2liaWxpdHk9VS5fX2RwP3M6bjt9fX1kZWxldGUgUltUXTt9dmFyIHNjcm9sbD10aGlzLl9zY3JvbGw7Zm9yKHZhciBUIGluIHNjcm9sbCl7VT1zY3JvbGxbVF07dmFyIGJkPVUuX19kbTtpZihiZCYmYmQub2Zmc2V0V2lkdGgpe3ZhciBPPXRydWU7aWYoVS5fX2RzIT1udWxsKXtVLl9fZG0uc2Nyb2xsTGVmdD1VLl9fZHM7ZGVsZXRlIFUuX19kczt9aWYoVS5fX2R0IT1udWxsKXtVLl9fZG0uc2Nyb2xsVG9wPVUuX19kdDtkZWxldGUgVS5fX2R0O312YXIgWT1VLl9fZHE7aWYoWSE9bnVsbCl7dmFyIFM9WS5lbGVtZW50LmdldERvbUVsZW1lbnQoKTtpZihTJiZTLm9mZnNldFdpZHRoKXtxeC5ib20uZWxlbWVudC5TY3JvbGwuaW50b1ZpZXdYKFMsYmQsWS5hbGlnbik7ZGVsZXRlIFUuX19kcTt9ZWxzZXtPPWZhbHNlO319dmFyIGJhPVUuX19kcjtpZihiYSE9bnVsbCl7dmFyIFM9YmEuZWxlbWVudC5nZXREb21FbGVtZW50KCk7aWYoUyYmUy5vZmZzZXRXaWR0aCl7cXguYm9tLmVsZW1lbnQuU2Nyb2xsLmludG9WaWV3WShTLGJkLGJhLmFsaWduKTtkZWxldGUgVS5fX2RyO31lbHNle089ZmFsc2U7fX1pZihPKXtkZWxldGUgc2Nyb2xsW1RdO319fXZhciBOPXsicmVsZWFzZUNhcHR1cmUiOjEsImJsdXIiOjEsImRlYWN0aXZhdGUiOjF9O2Zvcih2YXIgaT0wO2k8dGhpcy5fYWN0aW9ucy5sZW5ndGg7aSsrKXt2YXIgYmI9dGhpcy5fYWN0aW9uc1tpXTt2YXIgWD1iYi5lbGVtZW50Ll9fZG07aWYoIVh8fCFOW2JiLnR5cGVdJiYhYmIuZWxlbWVudC5fX2REKCkpe2NvbnRpbnVlO312YXIgUT1iYi5hcmdzO1EudW5zaGlmdChYKTtxeC5ib20uRWxlbWVudFtiYi50eXBlXS5hcHBseShxeC5ib20uRWxlbWVudCxRKTt9dGhpcy5fYWN0aW9ucz1bXTtmb3IodmFyIFQgaW4gdGhpcy5fX2RnKXt2YXIgSz10aGlzLl9fZGdbVF07dmFyIGJkPUsuZWxlbWVudC5fX2RtO2lmKGJkKXtxeC5ib20uU2VsZWN0aW9uLnNldChiZCxLLnN0YXJ0LEsuZW5kKTtkZWxldGUgdGhpcy5fX2RnW1RdO319cXguZXZlbnQuaGFuZGxlci5BcHBlYXIucmVmcmVzaCgpO30sX19kaDpmdW5jdGlvbigpe2lmKCF0aGlzLl9fZGkpe3ZhciBiZT1xeC5ldmVudC5SZWdpc3RyYXRpb24uZ2V0TWFuYWdlcih3aW5kb3cpO3RoaXMuX19kaT1iZS5nZXRIYW5kbGVyKHF4LmV2ZW50LmhhbmRsZXIuRm9jdXMpO31yZXR1cm4gdGhpcy5fX2RpO30sX19kajpmdW5jdGlvbigpe2lmKCF0aGlzLl9fZGspe3ZhciBiZj1xeC5ldmVudC5SZWdpc3RyYXRpb24uZ2V0TWFuYWdlcih3aW5kb3cpO3RoaXMuX19kaz1iZi5nZXREaXNwYXRjaGVyKHF4LmV2ZW50LmRpc3BhdGNoLk1vdXNlQ2FwdHVyZSk7fXJldHVybiB0aGlzLl9fZGsuZ2V0Q2FwdHVyZUVsZW1lbnQoKTt9LF9fZGw6ZnVuY3Rpb24oYmcpe3ZhciBiaD1xeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LmZyb21IYXNoQ29kZShiZy4kJGVsZW1lbnQpO3JldHVybiBiaCYmIWJoLl9fZEQoKTt9fSxtZW1iZXJzOntfX2RkOm51bGwsX19kbTpudWxsLF9fZG46ZmFsc2UsX19kbzp0cnVlLF9fZHA6dHJ1ZSxfX2RxOm51bGwsX19kcjpudWxsLF9fZHM6bnVsbCxfX2R0Om51bGwsX19kdTpudWxsLF9fZHY6bnVsbCxfX2R3Om51bGwsX19kZTpudWxsLF9fZGY6bnVsbCxfX2R4Om51bGwsX19keTpudWxsLF9fZHo6bnVsbCxfX2RBOm51bGwsX19kQjpudWxsLF9zY2hlZHVsZUNoaWxkcmVuVXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fX2RBKXtyZXR1cm47fXRoaXMuX19kQT10cnVlO3F4Lmh0bWwuRWxlbWVudC5fbW9kaWZpZWRbdGhpcy4kJGhhc2hdPXRoaXM7cXguaHRtbC5FbGVtZW50Ll9zY2hlZHVsZUZsdXNoKG0pO30sX2NyZWF0ZURvbUVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gcXguYm9tLkVsZW1lbnQuY3JlYXRlKHRoaXMuX19kZCk7fSxfX2RDOmZ1bmN0aW9uKCl7e307dmFyIGxlbmd0aDt2YXIgYmk9dGhpcy5fX2R6O2lmKGJpKXtsZW5ndGg9YmkubGVuZ3RoO3ZhciBiajtmb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe2JqPWJpW2ldO2lmKGJqLl9fZHAmJmJqLl9fZG8mJiFiai5fX2RtKXtiai5fX2RDKCk7fX19aWYoIXRoaXMuX19kbSl7dGhpcy5fX2RtPXRoaXMuX2NyZWF0ZURvbUVsZW1lbnQoKTt0aGlzLl9fZG0uJCRlbGVtZW50PXRoaXMuJCRoYXNoO3RoaXMuX2NvcHlEYXRhKGZhbHNlKTtpZihiaSYmbGVuZ3RoPjApe3RoaXMuX2luc2VydENoaWxkcmVuKCk7fX1lbHNle3RoaXMuX3N5bmNEYXRhKCk7aWYodGhpcy5fX2RBKXt0aGlzLl9zeW5jQ2hpbGRyZW4oKTt9fWRlbGV0ZSB0aGlzLl9fZEE7fSxfaW5zZXJ0Q2hpbGRyZW46ZnVuY3Rpb24oKXt2YXIgYms9dGhpcy5fX2R6O3ZhciBsZW5ndGg9YmsubGVuZ3RoO3ZhciBibTtpZihsZW5ndGg+Mil7dmFyIGJsPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtmb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe2JtPWJrW2ldO2lmKGJtLl9fZG0mJmJtLl9fZG8pe2JsLmFwcGVuZENoaWxkKGJtLl9fZG0pO319dGhpcy5fX2RtLmFwcGVuZENoaWxkKGJsKTt9ZWxzZXt2YXIgYmw9dGhpcy5fX2RtO2Zvcih2YXIgaT0wO2k8bGVuZ3RoO2krKyl7Ym09YmtbaV07aWYoYm0uX19kbSYmYm0uX19kbyl7YmwuYXBwZW5kQ2hpbGQoYm0uX19kbSk7fX19fSxfc3luY0NoaWxkcmVuOmZ1bmN0aW9uKCl7dmFyIGJyO3ZhciBidz1xeC5jb3JlLk9iamVjdFJlZ2lzdHJ5O3ZhciBibj10aGlzLl9fZHo7dmFyIGJ1PWJuLmxlbmd0aDt2YXIgYm87dmFyIGJzO3ZhciBicT10aGlzLl9fZG07dmFyIGJ0PWJxLmNoaWxkTm9kZXM7dmFyIGJwPTA7dmFyIGJ2O3t9O2Zvcih2YXIgaT1idC5sZW5ndGgtMTtpPj0wO2ktLSl7YnY9YnRbaV07YnM9YncuZnJvbUhhc2hDb2RlKGJ2LiQkZWxlbWVudCk7aWYoIWJzfHwhYnMuX19kb3x8YnMuX19kQiE9PXRoaXMpe2JxLnJlbW92ZUNoaWxkKGJ2KTt7fTt9fWZvcih2YXIgaT0wO2k8YnU7aSsrKXtibz1ibltpXTtpZihiby5fX2RvKXticz1iby5fX2RtO2J2PWJ0W2JwXTtpZighYnMpe2NvbnRpbnVlO31pZihicyE9YnYpe2lmKGJ2KXticS5pbnNlcnRCZWZvcmUoYnMsYnYpO31lbHNle2JxLmFwcGVuZENoaWxkKGJzKTt9e307fWJwKys7fX17fTt9LF9jb3B5RGF0YTpmdW5jdGlvbihieCl7dmFyIGJCPXRoaXMuX19kbTt2YXIgYkE9dGhpcy5fX2RmO2lmKGJBKXt2YXIgYnk9cXguYm9tLmVsZW1lbnQuQXR0cmlidXRlO2Zvcih2YXIgYkMgaW4gYkEpe2J5LnNldChiQixiQyxiQVtiQ10pO319dmFyIGJBPXRoaXMuX19kZTtpZihiQSl7dmFyIGJ6PXF4LmJvbS5lbGVtZW50LlN0eWxlO2lmKGJ4KXtiei5zZXRTdHlsZXMoYkIsYkEpO31lbHNle2J6LnNldENzcyhiQixiei5jb21waWxlKGJBKSk7fX12YXIgYkE9dGhpcy5fX2R4O2lmKGJBKXtmb3IodmFyIGJDIGluIGJBKXt0aGlzLl9hcHBseVByb3BlcnR5KGJDLGJBW2JDXSk7fX12YXIgYkE9dGhpcy5fX2R5O2lmKGJBKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZ2V0TWFuYWdlcihiQikuaW1wb3J0TGlzdGVuZXJzKGJCLGJBKTtkZWxldGUgdGhpcy5fX2R5O319LF9zeW5jRGF0YTpmdW5jdGlvbigpe3ZhciBiSD10aGlzLl9fZG07dmFyIGJHPXF4LmJvbS5lbGVtZW50LkF0dHJpYnV0ZTt2YXIgYkU9cXguYm9tLmVsZW1lbnQuU3R5bGU7dmFyIGJGPXRoaXMuX19kdjtpZihiRil7dmFyIGJLPXRoaXMuX19kZjtpZihiSyl7dmFyIGJJO2Zvcih2YXIgYkogaW4gYkYpe2JJPWJLW2JKXTtpZihiSSE9PXVuZGVmaW5lZCl7Ykcuc2V0KGJILGJKLGJJKTt9ZWxzZXtiRy5yZXNldChiSCxiSik7fX19dGhpcy5fX2R2PW51bGw7fXZhciBiRj10aGlzLl9fZHU7aWYoYkYpe3ZhciBiSz10aGlzLl9fZGU7aWYoYkspe3ZhciBiRD17fTtmb3IodmFyIGJKIGluIGJGKXtiRFtiSl09YktbYkpdO31iRS5zZXRTdHlsZXMoYkgsYkQpO310aGlzLl9fZHU9bnVsbDt9dmFyIGJGPXRoaXMuX19kdztpZihiRil7dmFyIGJLPXRoaXMuX19keDtpZihiSyl7dmFyIGJJO2Zvcih2YXIgYkogaW4gYkYpe3RoaXMuX2FwcGx5UHJvcGVydHkoYkosYktbYkpdKTt9fXRoaXMuX19kdz1udWxsO319LF9fZEQ6ZnVuY3Rpb24oKXt2YXIgYkw9dGhpczt3aGlsZShiTCl7aWYoYkwuX19kbil7cmV0dXJuIHRydWU7fWlmKCFiTC5fX2RvfHwhYkwuX19kcCl7cmV0dXJuIGZhbHNlO31iTD1iTC5fX2RCO31yZXR1cm4gZmFsc2U7fSxfX2RFOmZ1bmN0aW9uKGJNKXtpZihiTS5fX2RCPT09dGhpcyl7dGhyb3cgbmV3IEVycm9yKCJDaGlsZCBpcyBhbHJlYWR5IGluOiAiK2JNKTt9aWYoYk0uX19kbil7dGhyb3cgbmV3IEVycm9yKCJSb290IGVsZW1lbnRzIGNvdWxkIG5vdCBiZSBpbnNlcnRlZCBpbnRvIG90aGVyIG9uZXMuIik7fWlmKGJNLl9fZEIpe2JNLl9fZEIucmVtb3ZlKGJNKTt9Yk0uX19kQj10aGlzO2lmKCF0aGlzLl9fZHope3RoaXMuX19kej1bXTt9aWYodGhpcy5fX2RtKXt0aGlzLl9zY2hlZHVsZUNoaWxkcmVuVXBkYXRlKCk7fX0sX19kRjpmdW5jdGlvbihiTil7aWYoYk4uX19kQiE9PXRoaXMpe3Rocm93IG5ldyBFcnJvcigiSGFzIG5vIGNoaWxkOiAiK2JOKTt9aWYodGhpcy5fX2RtKXt0aGlzLl9zY2hlZHVsZUNoaWxkcmVuVXBkYXRlKCk7fWRlbGV0ZSBiTi5fX2RCO30sX19kRzpmdW5jdGlvbihiTyl7aWYoYk8uX19kQiE9PXRoaXMpe3Rocm93IG5ldyBFcnJvcigiSGFzIG5vIGNoaWxkOiAiK2JPKTt9aWYodGhpcy5fX2RtKXt0aGlzLl9zY2hlZHVsZUNoaWxkcmVuVXBkYXRlKCk7fX0sZ2V0Q2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2R6fHxudWxsO30sZ2V0Q2hpbGQ6ZnVuY3Rpb24oYlApe3ZhciBiUT10aGlzLl9fZHo7cmV0dXJuIGJRJiZiUVtiUF18fG51bGw7fSxoYXNDaGlsZHJlbjpmdW5jdGlvbigpe3ZhciBiUj10aGlzLl9fZHo7cmV0dXJuIGJSJiZiUlswXSE9PXVuZGVmaW5lZDt9LGluZGV4T2Y6ZnVuY3Rpb24oYlMpe3ZhciBiVD10aGlzLl9fZHo7cmV0dXJuIGJUP2JULmluZGV4T2YoYlMpOi0xO30saGFzQ2hpbGQ6ZnVuY3Rpb24oYlUpe3ZhciBiVj10aGlzLl9fZHo7cmV0dXJuIGJWJiZiVi5pbmRleE9mKGJVKSE9PS0xO30sYWRkOmZ1bmN0aW9uKGJXKXtpZihhcmd1bWVudHNbMV0pe2Zvcih2YXIgaT0wLGw9YXJndW1lbnRzLmxlbmd0aDtpPGw7aSsrKXt0aGlzLl9fZEUoYXJndW1lbnRzW2ldKTt9dGhpcy5fX2R6LnB1c2guYXBwbHkodGhpcy5fX2R6LGFyZ3VtZW50cyk7fWVsc2V7dGhpcy5fX2RFKGJXKTt0aGlzLl9fZHoucHVzaChiVyk7fXJldHVybiB0aGlzO30sYWRkQXQ6ZnVuY3Rpb24oYlgsYlkpe3RoaXMuX19kRShiWCk7cXgubGFuZy5BcnJheS5pbnNlcnRBdCh0aGlzLl9fZHosYlgsYlkpO3JldHVybiB0aGlzO30scmVtb3ZlOmZ1bmN0aW9uKGNhKXt2YXIgY2I9dGhpcy5fX2R6O2lmKCFjYil7cmV0dXJuO31pZihhcmd1bWVudHNbMV0pe3ZhciBjYztmb3IodmFyIGk9MCxsPWFyZ3VtZW50cy5sZW5ndGg7aTxsO2krKyl7Y2M9YXJndW1lbnRzW2ldO3RoaXMuX19kRihjYyk7cXgubGFuZy5BcnJheS5yZW1vdmUoY2IsY2MpO319ZWxzZXt0aGlzLl9fZEYoY2EpO3F4LmxhbmcuQXJyYXkucmVtb3ZlKGNiLGNhKTt9cmV0dXJuIHRoaXM7fSxyZW1vdmVBdDpmdW5jdGlvbihjZCl7dmFyIGNlPXRoaXMuX19kejtpZighY2Upe3Rocm93IG5ldyBFcnJvcigiSGFzIG5vIGNoaWxkcmVuISIpO312YXIgY2Y9Y2VbY2RdO2lmKCFjZil7dGhyb3cgbmV3IEVycm9yKCJIYXMgbm8gY2hpbGQgYXQgdGhpcyBwb3NpdGlvbiEiKTt9dGhpcy5fX2RGKGNmKTtxeC5sYW5nLkFycmF5LnJlbW92ZUF0KHRoaXMuX19keixjZCk7cmV0dXJuIHRoaXM7fSxyZW1vdmVBbGw6ZnVuY3Rpb24oKXt2YXIgY2c9dGhpcy5fX2R6O2lmKGNnKXtmb3IodmFyIGk9MCxsPWNnLmxlbmd0aDtpPGw7aSsrKXt0aGlzLl9fZEYoY2dbaV0pO31jZy5sZW5ndGg9MDt9cmV0dXJuIHRoaXM7fSxnZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2RCfHxudWxsO30saW5zZXJ0SW50bzpmdW5jdGlvbihwYXJlbnQsY2gpe3BhcmVudC5fX2RFKHRoaXMpO2lmKGNoPT1udWxsKXtwYXJlbnQuX19kei5wdXNoKHRoaXMpO31lbHNle3F4LmxhbmcuQXJyYXkuaW5zZXJ0QXQodGhpcy5fX2R6LHRoaXMsY2gpO31yZXR1cm4gdGhpczt9LGluc2VydEJlZm9yZTpmdW5jdGlvbihjaSl7dmFyIHBhcmVudD1jaS5fX2RCO3BhcmVudC5fX2RFKHRoaXMpO3F4LmxhbmcuQXJyYXkuaW5zZXJ0QmVmb3JlKHBhcmVudC5fX2R6LHRoaXMsY2kpO3JldHVybiB0aGlzO30saW5zZXJ0QWZ0ZXI6ZnVuY3Rpb24oY2ope3ZhciBwYXJlbnQ9Y2ouX19kQjtwYXJlbnQuX19kRSh0aGlzKTtxeC5sYW5nLkFycmF5Lmluc2VydEFmdGVyKHBhcmVudC5fX2R6LHRoaXMsY2opO3JldHVybiB0aGlzO30sbW92ZVRvOmZ1bmN0aW9uKGNrKXt2YXIgcGFyZW50PXRoaXMuX19kQjtwYXJlbnQuX19kRyh0aGlzKTt2YXIgY2w9cGFyZW50Ll9fZHouaW5kZXhPZih0aGlzKTtpZihjbD09PWNrKXt0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBtb3ZlIHRvIHNhbWUgaW5kZXghIik7fWVsc2UgaWYoY2w8Y2spe2NrLS07fXF4LmxhbmcuQXJyYXkucmVtb3ZlQXQocGFyZW50Ll9fZHosY2wpO3F4LmxhbmcuQXJyYXkuaW5zZXJ0QXQocGFyZW50Ll9fZHosdGhpcyxjayk7cmV0dXJuIHRoaXM7fSxtb3ZlQmVmb3JlOmZ1bmN0aW9uKGNtKXt2YXIgcGFyZW50PXRoaXMuX19kQjtyZXR1cm4gdGhpcy5tb3ZlVG8ocGFyZW50Ll9fZHouaW5kZXhPZihjbSkpO30sbW92ZUFmdGVyOmZ1bmN0aW9uKGNuKXt2YXIgcGFyZW50PXRoaXMuX19kQjtyZXR1cm4gdGhpcy5tb3ZlVG8ocGFyZW50Ll9fZHouaW5kZXhPZihjbikrMSk7fSxmcmVlOmZ1bmN0aW9uKCl7dmFyIHBhcmVudD10aGlzLl9fZEI7aWYoIXBhcmVudCl7dGhyb3cgbmV3IEVycm9yKCJIYXMgbm8gcGFyZW50IHRvIHJlbW92ZSBmcm9tLiIpO31pZighcGFyZW50Ll9fZHope3JldHVybjt9cGFyZW50Ll9fZEYodGhpcyk7cXgubGFuZy5BcnJheS5yZW1vdmUocGFyZW50Ll9fZHosdGhpcyk7cmV0dXJuIHRoaXM7fSxnZXREb21FbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kbXx8bnVsbDt9LGdldE5vZGVOYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kZDt9LHNldE5vZGVOYW1lOmZ1bmN0aW9uKG5hbWUpe3RoaXMuX19kZD1uYW1lO30sc2V0Um9vdDpmdW5jdGlvbihjbyl7dGhpcy5fX2RuPWNvO30sdXNlTWFya3VwOmZ1bmN0aW9uKGNwKXtpZih0aGlzLl9fZG0pe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IG92ZXJ3cml0ZSBleGlzdGluZyBlbGVtZW50ISIpO31pZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoayxiKSl7dmFyIGNxPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZCk7fWVsc2V7dmFyIGNxPXF4LmJvbS5FbGVtZW50LmdldEhlbHBlckVsZW1lbnQoKTt9Y3EuaW5uZXJIVE1MPWNwO3RoaXMudXNlRWxlbWVudChjcS5maXJzdENoaWxkKTtyZXR1cm4gdGhpcy5fX2RtO30sdXNlRWxlbWVudDpmdW5jdGlvbihjcil7aWYodGhpcy5fX2RtKXt0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBvdmVyd3JpdGUgZXhpc3RpbmcgZWxlbWVudCEiKTt9dGhpcy5fX2RtPWNyO3RoaXMuX19kbS4kJGVsZW1lbnQ9dGhpcy4kJGhhc2g7dGhpcy5fY29weURhdGEodHJ1ZSk7fSxpc0ZvY3VzYWJsZTpmdW5jdGlvbigpe3ZhciBjdD10aGlzLmdldEF0dHJpYnV0ZShyKTtpZihjdD49MSl7cmV0dXJuIHRydWU7fXZhciBjcz1xeC5ldmVudC5oYW5kbGVyLkZvY3VzLkZPQ1VTQUJMRV9FTEVNRU5UUztpZihjdD49MCYmY3NbdGhpcy5fX2RkXSl7cmV0dXJuIHRydWU7fXJldHVybiBmYWxzZTt9LHNldFNlbGVjdGFibGU6cXguY29yZS5WYXJpYW50LnNlbGVjdChrLHsid2Via2l0IjpmdW5jdGlvbihjdSl7dGhpcy5zZXRBdHRyaWJ1dGUoaixjdT9nOmgpO3RoaXMuc2V0U3R5bGUodixjdT9mOmEpO30sImdlY2tvIjpmdW5jdGlvbihjdil7dGhpcy5zZXRBdHRyaWJ1dGUoaixjdj9nOmgpO3RoaXMuc2V0U3R5bGUocCxjdj9mOnUpO30sImRlZmF1bHQiOmZ1bmN0aW9uKGN3KXt0aGlzLnNldEF0dHJpYnV0ZShqLGN3P2c6aCk7fX0pLGlzTmF0aXZlbHlGb2N1c2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gISFxeC5ldmVudC5oYW5kbGVyLkZvY3VzLkZPQ1VTQUJMRV9FTEVNRU5UU1t0aGlzLl9fZGRdO30saW5jbHVkZTpmdW5jdGlvbigpe2lmKHRoaXMuX19kbyl7cmV0dXJuO31kZWxldGUgdGhpcy5fX2RvO2lmKHRoaXMuX19kQil7dGhpcy5fX2RCLl9zY2hlZHVsZUNoaWxkcmVuVXBkYXRlKCk7fXJldHVybiB0aGlzO30sZXhjbHVkZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9fZG8pe3JldHVybjt9dGhpcy5fX2RvPWZhbHNlO2lmKHRoaXMuX19kQil7dGhpcy5fX2RCLl9zY2hlZHVsZUNoaWxkcmVuVXBkYXRlKCk7fXJldHVybiB0aGlzO30saXNJbmNsdWRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZG89PT10cnVlO30sc2hvdzpmdW5jdGlvbigpe2lmKHRoaXMuX19kcCl7cmV0dXJuO31pZih0aGlzLl9fZG0pe3F4Lmh0bWwuRWxlbWVudC5fdmlzaWJpbGl0eVt0aGlzLiQkaGFzaF09dGhpcztxeC5odG1sLkVsZW1lbnQuX3NjaGVkdWxlRmx1c2gobSk7fWlmKHRoaXMuX19kQil7dGhpcy5fX2RCLl9zY2hlZHVsZUNoaWxkcmVuVXBkYXRlKCk7fWRlbGV0ZSB0aGlzLl9fZHA7fSxoaWRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19kcCl7cmV0dXJuO31pZih0aGlzLl9fZG0pe3F4Lmh0bWwuRWxlbWVudC5fdmlzaWJpbGl0eVt0aGlzLiQkaGFzaF09dGhpcztxeC5odG1sLkVsZW1lbnQuX3NjaGVkdWxlRmx1c2gobSk7fXRoaXMuX19kcD1mYWxzZTt9LGlzVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZHA9PT10cnVlO30sc2Nyb2xsQ2hpbGRJbnRvVmlld1g6ZnVuY3Rpb24oY3gsY3ksY3ope3ZhciBjQT10aGlzLl9fZG07dmFyIGNCPWN4LmdldERvbUVsZW1lbnQoKTtpZihjeiE9PWZhbHNlJiZjQSYmY0Eub2Zmc2V0V2lkdGgmJmNCJiZjQi5vZmZzZXRXaWR0aCl7cXguYm9tLmVsZW1lbnQuU2Nyb2xsLmludG9WaWV3WChjQixjQSxjeSk7fWVsc2V7dGhpcy5fX2RxPXtlbGVtZW50OmN4LGFsaWduOmN5fTtxeC5odG1sLkVsZW1lbnQuX3Njcm9sbFt0aGlzLiQkaGFzaF09dGhpcztxeC5odG1sLkVsZW1lbnQuX3NjaGVkdWxlRmx1c2gobSk7fWRlbGV0ZSB0aGlzLl9fZHM7fSxzY3JvbGxDaGlsZEludG9WaWV3WTpmdW5jdGlvbihjQyxjRCxjRSl7dmFyIGNGPXRoaXMuX19kbTt2YXIgY0c9Y0MuZ2V0RG9tRWxlbWVudCgpO2lmKGNFIT09ZmFsc2UmJmNGJiZjRi5vZmZzZXRXaWR0aCYmY0cmJmNHLm9mZnNldFdpZHRoKXtxeC5ib20uZWxlbWVudC5TY3JvbGwuaW50b1ZpZXdZKGNHLGNGLGNEKTt9ZWxzZXt0aGlzLl9fZHI9e2VsZW1lbnQ6Y0MsYWxpZ246Y0R9O3F4Lmh0bWwuRWxlbWVudC5fc2Nyb2xsW3RoaXMuJCRoYXNoXT10aGlzO3F4Lmh0bWwuRWxlbWVudC5fc2NoZWR1bGVGbHVzaChtKTt9ZGVsZXRlIHRoaXMuX19kdDt9LHNjcm9sbFRvWDpmdW5jdGlvbih4LGNIKXt2YXIgY0k9dGhpcy5fX2RtO2lmKGNIIT09dHJ1ZSYmY0kmJmNJLm9mZnNldFdpZHRoKXtjSS5zY3JvbGxMZWZ0PXg7fWVsc2V7dGhpcy5fX2RzPXg7cXguaHRtbC5FbGVtZW50Ll9zY3JvbGxbdGhpcy4kJGhhc2hdPXRoaXM7cXguaHRtbC5FbGVtZW50Ll9zY2hlZHVsZUZsdXNoKG0pO31kZWxldGUgdGhpcy5fX2RxO30sZ2V0U2Nyb2xsWDpmdW5jdGlvbigpe3ZhciBjSj10aGlzLl9fZG07aWYoY0ope3JldHVybiBjSi5zY3JvbGxMZWZ0O31yZXR1cm4gdGhpcy5fX2RzfHwwO30sc2Nyb2xsVG9ZOmZ1bmN0aW9uKHksY0spe3ZhciBjTD10aGlzLl9fZG07aWYoY0shPT10cnVlJiZjTCYmY0wub2Zmc2V0V2lkdGgpe2NMLnNjcm9sbFRvcD15O31lbHNle3RoaXMuX19kdD15O3F4Lmh0bWwuRWxlbWVudC5fc2Nyb2xsW3RoaXMuJCRoYXNoXT10aGlzO3F4Lmh0bWwuRWxlbWVudC5fc2NoZWR1bGVGbHVzaChtKTt9ZGVsZXRlIHRoaXMuX19kcjt9LGdldFNjcm9sbFk6ZnVuY3Rpb24oKXt2YXIgY009dGhpcy5fX2RtO2lmKGNNKXtyZXR1cm4gY00uc2Nyb2xsVG9wO31yZXR1cm4gdGhpcy5fX2R0fHwwO30sZGlzYWJsZVNjcm9sbGluZzpmdW5jdGlvbigpe3RoaXMuZW5hYmxlU2Nyb2xsaW5nKCk7dGhpcy5zY3JvbGxUb1goMCk7dGhpcy5zY3JvbGxUb1koMCk7dGhpcy5hZGRMaXN0ZW5lcihGLHRoaXMuX19kSSx0aGlzKTt9LGVuYWJsZVNjcm9sbGluZzpmdW5jdGlvbigpe3RoaXMucmVtb3ZlTGlzdGVuZXIoRix0aGlzLl9fZEksdGhpcyk7fSxfX2RIOm51bGwsX19kSTpmdW5jdGlvbihlKXtpZighdGhpcy5fX2RIKXt0aGlzLl9fZEg9dHJ1ZTt0aGlzLl9fZG0uc2Nyb2xsVG9wPTA7dGhpcy5fX2RtLnNjcm9sbExlZnQ9MDtkZWxldGUgdGhpcy5fX2RIO319LGdldFRleHRTZWxlY3Rpb246ZnVuY3Rpb24oKXt2YXIgY049dGhpcy5fX2RtO2lmKGNOKXtyZXR1cm4gcXguYm9tLlNlbGVjdGlvbi5nZXQoY04pO31yZXR1cm4gbnVsbDt9LGdldFRleHRTZWxlY3Rpb25MZW5ndGg6ZnVuY3Rpb24oKXt2YXIgY089dGhpcy5fX2RtO2lmKGNPKXtyZXR1cm4gcXguYm9tLlNlbGVjdGlvbi5nZXRMZW5ndGgoY08pO31yZXR1cm4gbnVsbDt9LGdldFRleHRTZWxlY3Rpb25TdGFydDpmdW5jdGlvbigpe3ZhciBjUD10aGlzLl9fZG07aWYoY1Ape3JldHVybiBxeC5ib20uU2VsZWN0aW9uLmdldFN0YXJ0KGNQKTt9cmV0dXJuIG51bGw7fSxnZXRUZXh0U2VsZWN0aW9uRW5kOmZ1bmN0aW9uKCl7dmFyIGNRPXRoaXMuX19kbTtpZihjUSl7cmV0dXJuIHF4LmJvbS5TZWxlY3Rpb24uZ2V0RW5kKGNRKTt9cmV0dXJuIG51bGw7fSxzZXRUZXh0U2VsZWN0aW9uOmZ1bmN0aW9uKGNSLGNTKXt2YXIgY1Q9dGhpcy5fX2RtO2lmKGNUKXtxeC5ib20uU2VsZWN0aW9uLnNldChjVCxjUixjUyk7cmV0dXJuO31xeC5odG1sLkVsZW1lbnQuX19kZ1t0aGlzLnRvSGFzaENvZGUoKV09e2VsZW1lbnQ6dGhpcyxzdGFydDpjUixlbmQ6Y1N9O3F4Lmh0bWwuRWxlbWVudC5fc2NoZWR1bGVGbHVzaChtKTt9LGNsZWFyVGV4dFNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciBjVT10aGlzLl9fZG07aWYoY1Upe3F4LmJvbS5TZWxlY3Rpb24uY2xlYXIoY1UpO31kZWxldGUgcXguaHRtbC5FbGVtZW50Ll9fZGdbdGhpcy50b0hhc2hDb2RlKCldO30sX19kSjpmdW5jdGlvbihjVixjVyl7dmFyIGNYPXF4Lmh0bWwuRWxlbWVudC5fYWN0aW9ucztjWC5wdXNoKHt0eXBlOmNWLGVsZW1lbnQ6dGhpcyxhcmdzOmNXfHxbXX0pO3F4Lmh0bWwuRWxlbWVudC5fc2NoZWR1bGVGbHVzaChtKTt9LGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fX2RKKG8pO30sYmx1cjpmdW5jdGlvbigpe3RoaXMuX19kSihBKTt9LGFjdGl2YXRlOmZ1bmN0aW9uKCl7dGhpcy5fX2RKKEMpO30sZGVhY3RpdmF0ZTpmdW5jdGlvbigpe3RoaXMuX19kSih6KTt9LGNhcHR1cmU6ZnVuY3Rpb24oY1kpe3RoaXMuX19kSih3LFtjWSE9PWZhbHNlXSk7fSxyZWxlYXNlQ2FwdHVyZTpmdW5jdGlvbigpe3RoaXMuX19kSih0KTt9LHNldFN0eWxlOmZ1bmN0aW9uKGRhLGRjLGRkKXtpZighdGhpcy5fX2RlKXt0aGlzLl9fZGU9e307fWlmKHRoaXMuX19kZVtkYV09PWRjKXtyZXR1cm47fWlmKGRjPT1udWxsKXtkZWxldGUgdGhpcy5fX2RlW2RhXTt9ZWxzZXt0aGlzLl9fZGVbZGFdPWRjO31pZih0aGlzLl9fZG0pe2lmKGRkKXtxeC5ib20uZWxlbWVudC5TdHlsZS5zZXQodGhpcy5fX2RtLGRhLGRjKTtyZXR1cm4gdGhpczt9aWYoIXRoaXMuX19kdSl7dGhpcy5fX2R1PXt9O310aGlzLl9fZHVbZGFdPXRydWU7cXguaHRtbC5FbGVtZW50Ll9tb2RpZmllZFt0aGlzLiQkaGFzaF09dGhpcztxeC5odG1sLkVsZW1lbnQuX3NjaGVkdWxlRmx1c2gobSk7fXJldHVybiB0aGlzO30sc2V0U3R5bGVzOmZ1bmN0aW9uKGRlLGRmKXt2YXIgZGc9cXguYm9tLmVsZW1lbnQuU3R5bGU7aWYoIXRoaXMuX19kZSl7dGhpcy5fX2RlPXt9O31pZih0aGlzLl9fZG0pe2lmKCF0aGlzLl9fZHUpe3RoaXMuX19kdT17fTt9Zm9yKHZhciBkaSBpbiBkZSl7dmFyIGRoPWRlW2RpXTtpZih0aGlzLl9fZGVbZGldPT1kaCl7Y29udGludWU7fWlmKGRoPT1udWxsKXtkZWxldGUgdGhpcy5fX2RlW2RpXTt9ZWxzZXt0aGlzLl9fZGVbZGldPWRoO31pZihkZil7ZGcuc2V0KHRoaXMuX19kbSxkaSxkaCk7Y29udGludWU7fXRoaXMuX19kdVtkaV09dHJ1ZTt9cXguaHRtbC5FbGVtZW50Ll9tb2RpZmllZFt0aGlzLiQkaGFzaF09dGhpcztxeC5odG1sLkVsZW1lbnQuX3NjaGVkdWxlRmx1c2gobSk7fWVsc2V7Zm9yKHZhciBkaSBpbiBkZSl7dmFyIGRoPWRlW2RpXTtpZih0aGlzLl9fZGVbZGldPT1kaCl7Y29udGludWU7fWlmKGRoPT1udWxsKXtkZWxldGUgdGhpcy5fX2RlW2RpXTt9ZWxzZXt0aGlzLl9fZGVbZGldPWRoO319fXJldHVybiB0aGlzO30scmVtb3ZlU3R5bGU6ZnVuY3Rpb24oZGosZGspe3RoaXMuc2V0U3R5bGUoZGosbnVsbCxkayk7fSxnZXRTdHlsZTpmdW5jdGlvbihkbCl7cmV0dXJuIHRoaXMuX19kZT90aGlzLl9fZGVbZGxdOm51bGw7fSxnZXRBbGxTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2RlfHxudWxsO30sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKGRtLGRuLGRwKXtpZighdGhpcy5fX2RmKXt0aGlzLl9fZGY9e307fWlmKHRoaXMuX19kZltkbV09PWRuKXtyZXR1cm47fWlmKGRuPT1udWxsKXtkZWxldGUgdGhpcy5fX2RmW2RtXTt9ZWxzZXt0aGlzLl9fZGZbZG1dPWRuO31pZih0aGlzLl9fZG0pe2lmKGRwKXtxeC5ib20uZWxlbWVudC5BdHRyaWJ1dGUuc2V0KHRoaXMuX19kbSxkbSxkbik7cmV0dXJuIHRoaXM7fWlmKCF0aGlzLl9fZHYpe3RoaXMuX19kdj17fTt9dGhpcy5fX2R2W2RtXT10cnVlO3F4Lmh0bWwuRWxlbWVudC5fbW9kaWZpZWRbdGhpcy4kJGhhc2hdPXRoaXM7cXguaHRtbC5FbGVtZW50Ll9zY2hlZHVsZUZsdXNoKG0pO31yZXR1cm4gdGhpczt9LHNldEF0dHJpYnV0ZXM6ZnVuY3Rpb24oZHEsZHIpe2Zvcih2YXIgZHMgaW4gZHEpe3RoaXMuc2V0QXR0cmlidXRlKGRzLGRxW2RzXSxkcik7fXJldHVybiB0aGlzO30scmVtb3ZlQXR0cmlidXRlOmZ1bmN0aW9uKGR0LGR1KXt0aGlzLnNldEF0dHJpYnV0ZShkdCxudWxsLGR1KTt9LGdldEF0dHJpYnV0ZTpmdW5jdGlvbihkdil7cmV0dXJuIHRoaXMuX19kZj90aGlzLl9fZGZbZHZdOm51bGw7fSxfYXBwbHlQcm9wZXJ0eTpmdW5jdGlvbihuYW1lLGR3KXt9LF9zZXRQcm9wZXJ0eTpmdW5jdGlvbihkeCxkeSxkeil7aWYoIXRoaXMuX19keCl7dGhpcy5fX2R4PXt9O31pZih0aGlzLl9fZHhbZHhdPT1keSl7cmV0dXJuO31pZihkeT09bnVsbCl7ZGVsZXRlIHRoaXMuX19keFtkeF07fWVsc2V7dGhpcy5fX2R4W2R4XT1keTt9aWYodGhpcy5fX2RtKXtpZihkeil7dGhpcy5fYXBwbHlQcm9wZXJ0eShkeCxkeSk7cmV0dXJuIHRoaXM7fWlmKCF0aGlzLl9fZHcpe3RoaXMuX19kdz17fTt9dGhpcy5fX2R3W2R4XT10cnVlO3F4Lmh0bWwuRWxlbWVudC5fbW9kaWZpZWRbdGhpcy4kJGhhc2hdPXRoaXM7cXguaHRtbC5FbGVtZW50Ll9zY2hlZHVsZUZsdXNoKG0pO31yZXR1cm4gdGhpczt9LF9yZW1vdmVQcm9wZXJ0eTpmdW5jdGlvbihkQSxkQil7dGhpcy5fc2V0UHJvcGVydHkoZEEsbnVsbCxkQik7fSxfZ2V0UHJvcGVydHk6ZnVuY3Rpb24oZEMpe3ZhciBkRD10aGlzLl9fZHg7aWYoIWREKXtyZXR1cm4gbnVsbDt9dmFyIGRFPWREW2RDXTtyZXR1cm4gZEU9PW51bGw/bnVsbDpkRTt9LGFkZExpc3RlbmVyOmZ1bmN0aW9uKGRGLGRHLHNlbGYsZEgpe3ZhciBkSTtpZih0aGlzLiQkZGlzcG9zZWQpe3JldHVybiBudWxsO317fTtpZih0aGlzLl9fZG0pe3JldHVybiBxeC5ldmVudC5SZWdpc3RyYXRpb24uYWRkTGlzdGVuZXIodGhpcy5fX2RtLGRGLGRHLHNlbGYsZEgpO31pZighdGhpcy5fX2R5KXt0aGlzLl9fZHk9e307fWlmKGRIPT1udWxsKXtkSD1mYWxzZTt9dmFyIGRKPXF4LmV2ZW50Lk1hbmFnZXIuZ2V0TmV4dFVuaXF1ZUlkKCk7dmFyIGRLPWRGKyhkSD9EOnEpK2RKO3RoaXMuX19keVtkS109e3R5cGU6ZEYsbGlzdGVuZXI6ZEcsc2VsZjpzZWxmLGNhcHR1cmU6ZEgsdW5pcXVlOmRKfTtyZXR1cm4gZEs7fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihkTCxkTSxzZWxmLGROKXt2YXIgZE87aWYodGhpcy4kJGRpc3Bvc2VkKXtyZXR1cm4gbnVsbDt9e307aWYodGhpcy5fX2RtKXtxeC5ldmVudC5SZWdpc3RyYXRpb24ucmVtb3ZlTGlzdGVuZXIodGhpcy5fX2RtLGRMLGRNLHNlbGYsZE4pO31lbHNle3ZhciBkUT10aGlzLl9fZHk7dmFyIGRQO2lmKGROPT1udWxsKXtkTj1mYWxzZTt9Zm9yKHZhciBkUiBpbiBkUSl7ZFA9ZFFbZFJdO2lmKGRQLmxpc3RlbmVyPT09ZE0mJmRQLnNlbGY9PT1zZWxmJiZkUC5jYXB0dXJlPT09ZE4mJmRQLnR5cGU9PT1kTCl7ZGVsZXRlIGRRW2RSXTticmVhazt9fX1yZXR1cm4gdGhpczt9LHJlbW92ZUxpc3RlbmVyQnlJZDpmdW5jdGlvbihkUyl7aWYodGhpcy4kJGRpc3Bvc2VkKXtyZXR1cm4gbnVsbDt9aWYodGhpcy5fX2RtKXtxeC5ldmVudC5SZWdpc3RyYXRpb24ucmVtb3ZlTGlzdGVuZXJCeUlkKHRoaXMuX19kbSxkUyk7fWVsc2V7ZGVsZXRlIHRoaXMuX19keVtkU107fXJldHVybiB0aGlzO30saGFzTGlzdGVuZXI6ZnVuY3Rpb24oZFQsZFUpe2lmKHRoaXMuJCRkaXNwb3NlZCl7cmV0dXJuIGZhbHNlO31pZih0aGlzLl9fZG0pe3JldHVybiBxeC5ldmVudC5SZWdpc3RyYXRpb24uaGFzTGlzdGVuZXIodGhpcy5fX2RtLGRULGRVKTt9dmFyIGRXPXRoaXMuX19keTt2YXIgZFY7aWYoZFU9PW51bGwpe2RVPWZhbHNlO31mb3IodmFyIGRYIGluIGRXKXtkVj1kV1tkWF07aWYoZFYuY2FwdHVyZT09PWRVJiZkVi50eXBlPT09ZFQpe3JldHVybiB0cnVlO319cmV0dXJuIGZhbHNlO319LGRlZmVyOmZ1bmN0aW9uKGRZKXtkWS5fX2RLPW5ldyBxeC51dGlsLkRlZmVycmVkQ2FsbChkWS5mbHVzaCxkWSk7fSxkZXN0cnVjdDpmdW5jdGlvbigpe3ZhciBlYT10aGlzLl9fZG07aWYoZWEpe3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5nZXRNYW5hZ2VyKGVhKS5yZW1vdmVBbGxMaXN0ZW5lcnMoZWEpO2VhLiQkZWxlbWVudD1jO31pZighcXguY29yZS5PYmplY3RSZWdpc3RyeS5pblNodXREb3duKXt2YXIgcGFyZW50PXRoaXMuX19kQjtpZihwYXJlbnQmJiFwYXJlbnQuJCRkaXNwb3NlZCl7cGFyZW50LnJlbW92ZSh0aGlzKTt9fXRoaXMuX2Rpc3Bvc2VBcnJheShCKTt0aGlzLl9fZGY9dGhpcy5fX2RlPXRoaXMuX19keT10aGlzLl9fZHg9dGhpcy5fX2R2PXRoaXMuX19kdT10aGlzLl9fZHc9dGhpcy5fX2RtPXRoaXMuX19kQj10aGlzLl9fZHE9dGhpcy5fX2RyPW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGc9InF4LmJvbS5jbGllbnQuRmVhdHVyZSIsZj0iQ1NTMUNvbXBhdCIsZD0ibGFiZWwiLGM9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcva2V5bWFzdGVyL2dhdGVrZWVwZXIvdGhlcmUuaXMub25seS54dWwiLGI9ImlucHV0IixhPSJwb2ludGVyRXZlbnRzIjtxeC5Cb290c3RyYXAuZGVmaW5lKGcse3N0YXRpY3M6e1NUQU5EQVJEX01PREU6ZmFsc2UsUVVJUktTX01PREU6ZmFsc2UsQ09OVEVOVF9CT1g6ZmFsc2UsQk9SREVSX0JPWDpmYWxzZSxTVkc6ZmFsc2UsQ0FOVkFTOiEhd2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxWTUw6ZmFsc2UsWFBBVEg6ISFkb2N1bWVudC5ldmFsdWF0ZSxBSVI6bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJhZG9iZWFpciIpIT09LTEsR0VBUlM6ISEod2luZG93Lmdvb2dsZSYmd2luZG93Lmdvb2dsZS5nZWFycyksU1NMOndpbmRvdy5sb2NhdGlvbi5wcm90b2NvbD09PSJodHRwczoiLEVDTUFfT0JKRUNUX0NPVU5UOigoe30pLl9fY291bnRfXz09MCksQ1NTX1BPSU5URVJfRVZFTlRTOmZhbHNlLFhVTDpmYWxzZSxDU1NfVEVYVF9PVkVSRkxPVzooInRleHRPdmVyZmxvdyIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlfHwiT1RleHRPdmVyZmxvdyIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKSxIVE1MNV9DTEFTU0xJU1Q6ISEoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdCYmcXguQm9vdHN0cmFwLmdldENsYXNzKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QpPT09IkRPTVRva2VuTGlzdCIpLFRPVUNIOigib250b3VjaHN0YXJ0IiBpbiB3aW5kb3cpLFBMQUNFSE9MREVSOmZhbHNlLF9fZ0c6ZnVuY3Rpb24oKXt0aGlzLlFVSVJLU19NT0RFPXRoaXMuX19nSCgpO3RoaXMuU1RBTkRBUkRfTU9ERT0hdGhpcy5RVUlSS1NfTU9ERTt0aGlzLkNPTlRFTlRfQk9YPSFxeC5ib20uY2xpZW50LkVuZ2luZS5NU0hUTUx8fHRoaXMuU1RBTkRBUkRfTU9ERTt0aGlzLkJPUkRFUl9CT1g9IXRoaXMuQ09OVEVOVF9CT1g7dGhpcy5TVkc9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24mJmRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUmJihkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCJvcmcudzNjLmRvbS5zdmciLCIxLjAiKXx8ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZSIsIjEuMSIpKTt0aGlzLlZNTD1xeC5ib20uY2xpZW50LkVuZ2luZS5NU0hUTUw7dHJ5e2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhjLGQpO3RoaXMuWFVMPXRydWU7fWNhdGNoKGUpe3RoaXMuWFVMPWZhbHNlO312YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGIpO3RoaXMuUExBQ0VIT0xERVI9InBsYWNlaG9sZGVyIiBpbiBpO2lmKGEgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKXtpZihxeC5ib20uY2xpZW50LkVuZ2luZS5PUEVSQSl7dGhpcy5DU1NfUE9JTlRFUl9FVkVOVFM9ZmFsc2U7fWVsc2V7dGhpcy5DU1NfUE9JTlRFUl9FVkVOVFM9dHJ1ZTt9fX0sX19nSDpmdW5jdGlvbigpe2lmKHF4LmJvbS5jbGllbnQuRW5naW5lLk1TSFRNTCYmcXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTj49OCl7cmV0dXJuIHF4LmJvbS5jbGllbnQuRW5naW5lLkRPQ1VNRU5UX01PREU9PT01O31lbHNle3JldHVybiBkb2N1bWVudC5jb21wYXRNb2RlIT09Zjt9fX0sZGVmZXI6ZnVuY3Rpb24oaCl7aC5fX2dHKCk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LmV2ZW50LmhhbmRsZXIuVXNlckFjdGlvbiI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6cXguZXZlbnQuSUV2ZW50SGFuZGxlcixjb25zdHJ1Y3Q6ZnVuY3Rpb24oYil7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9fa0I9Yjt0aGlzLl9fa0M9Yi5nZXRXaW5kb3coKTt9LHN0YXRpY3M6e1BSSU9SSVRZOnF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5QUklPUklUWV9OT1JNQUwsU1VQUE9SVEVEX1RZUEVTOnt1c2VyYWN0aW9uOjF9LFRBUkdFVF9DSEVDSzpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLlRBUkdFVF9XSU5ET1csSUdOT1JFX0NBTl9IQU5ETEU6dHJ1ZX0sbWVtYmVyczp7X19rQjpudWxsLF9fa0M6bnVsbCxjYW5IYW5kbGVFdmVudDpmdW5jdGlvbihjLGQpe30scmVnaXN0ZXJFdmVudDpmdW5jdGlvbihlLGYsZyl7fSx1bnJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oaCxpLGope319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX2tCPXRoaXMuX19rQz1udWxsO30sZGVmZXI6ZnVuY3Rpb24oayl7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmFkZEhhbmRsZXIoayk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGQ9J2llJyxjPSJxeC51aS5jb3JlLnF1ZXVlLk1hbmFnZXIiLGI9InVzZXJhY3Rpb24iLGE9InRvdWNoZW5kIjtxeC5DbGFzcy5kZWZpbmUoYyx7c3RhdGljczp7X19sZzpmYWxzZSxfX2xoOnt9LF9fbGk6MCxNQVhfUkVUUklFUzoxMCxzY2hlZHVsZUZsdXNoOmZ1bmN0aW9uKGYpe3ZhciBzZWxmPXF4LnVpLmNvcmUucXVldWUuTWFuYWdlcjtzZWxmLl9fbGhbZl09dHJ1ZTtpZighc2VsZi5fX2xnKXtzZWxmLl9fbG4uc2NoZWR1bGUoKTtzZWxmLl9fbGc9dHJ1ZTt9fSxmbHVzaDpmdW5jdGlvbigpe2lmKHF4LnVpLmNvcmUucXVldWUuTWFuYWdlci5QQVVTRSl7cmV0dXJuO312YXIgc2VsZj1xeC51aS5jb3JlLnF1ZXVlLk1hbmFnZXI7aWYoc2VsZi5fX2xqKXtyZXR1cm47fXNlbGYuX19saj10cnVlO3NlbGYuX19sbi5jYW5jZWwoKTt2YXIgZz1zZWxmLl9fbGg7c2VsZi5fX2xrKGZ1bmN0aW9uKCl7d2hpbGUoZy52aXNpYmlsaXR5fHxnLndpZGdldHx8Zy5hcHBlYXJhbmNlfHxnLmxheW91dHx8Zy5lbGVtZW50KXtpZihnLndpZGdldCl7ZGVsZXRlIGcud2lkZ2V0O3F4LnVpLmNvcmUucXVldWUuV2lkZ2V0LmZsdXNoKCk7fWlmKGcudmlzaWJpbGl0eSl7ZGVsZXRlIGcudmlzaWJpbGl0eTtxeC51aS5jb3JlLnF1ZXVlLlZpc2liaWxpdHkuZmx1c2goKTt9aWYoZy5hcHBlYXJhbmNlKXtkZWxldGUgZy5hcHBlYXJhbmNlO3F4LnVpLmNvcmUucXVldWUuQXBwZWFyYW5jZS5mbHVzaCgpO31pZihnLndpZGdldHx8Zy52aXNpYmlsaXR5fHxnLmFwcGVhcmFuY2Upe2NvbnRpbnVlO31pZihnLmxheW91dCl7ZGVsZXRlIGcubGF5b3V0O3F4LnVpLmNvcmUucXVldWUuTGF5b3V0LmZsdXNoKCk7fWlmKGcud2lkZ2V0fHxnLnZpc2liaWxpdHl8fGcuYXBwZWFyYW5jZXx8Zy5sYXlvdXQpe2NvbnRpbnVlO31pZihnLmVsZW1lbnQpe2RlbGV0ZSBnLmVsZW1lbnQ7cXguaHRtbC5FbGVtZW50LmZsdXNoKCk7fX19LGZ1bmN0aW9uKCl7c2VsZi5fX2xnPWZhbHNlO30pO3NlbGYuX19sayhmdW5jdGlvbigpe2lmKGcuZGlzcG9zZSl7ZGVsZXRlIGcuZGlzcG9zZTtxeC51aS5jb3JlLnF1ZXVlLkRpc3Bvc2UuZmx1c2goKTt9fSxmdW5jdGlvbigpe3NlbGYuX19saj1mYWxzZTt9KTtzZWxmLl9fbGk9MDt9LF9fbGs6ZnVuY3Rpb24oaCxpKXt2YXIgc2VsZj1xeC51aS5jb3JlLnF1ZXVlLk1hbmFnZXI7dHJ5e2goKTt9Y2F0Y2goZSl7e307c2VsZi5fX2xnPWZhbHNlO3NlbGYuX19saj1mYWxzZTtzZWxmLl9fbGkrPTE7aWYocXguYm9tLmNsaWVudC5Ccm93c2VyLk5BTUU9PWQmJnF4LmJvbS5jbGllbnQuQnJvd3Nlci5WRVJTSU9OPD03KXtpKCk7fWlmKHNlbGYuX19saTw9c2VsZi5NQVhfUkVUUklFUyl7c2VsZi5zY2hlZHVsZUZsdXNoKCk7fWVsc2V7dGhyb3cgbmV3IEVycm9yKCJGYXRhbCBFcnJvcjogRmx1c2ggdGVybWluYXRlZCAiKyhzZWxmLl9fbGktMSkrIiB0aW1lcyBpbiBhIHJvdyIrIiBkdWUgdG8gZXhjZXB0aW9ucyBpbiB1c2VyIGNvZGUuIFRoZSBhcHBsaWNhdGlvbiBoYXMgdG8gYmUgcmVsb2FkZWQhIik7fXRocm93IGU7fWZpbmFsbHl7aSgpO319LF9fbGw6ZnVuY3Rpb24oZSl7dmFyIGo9cXgudWkuY29yZS5xdWV1ZS5NYW5hZ2VyO2lmKGUuZ2V0RGF0YSgpPT1hKXtqLlBBVVNFPXRydWU7aWYoai5fX2xtKXt3aW5kb3cuY2xlYXJUaW1lb3V0KGouX19sbSk7fWouX19sbT13aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2ouUEFVU0U9ZmFsc2U7ai5fX2xtPW51bGw7ai5mbHVzaCgpO30sNTAwKTt9ZWxzZXtqLmZsdXNoKCk7fX19LGRlZmVyOmZ1bmN0aW9uKGspe2suX19sbj1uZXcgcXgudXRpbC5EZWZlcnJlZENhbGwoay5mbHVzaCk7cXguaHRtbC5FbGVtZW50Ll9zY2hlZHVsZUZsdXNoPWsuc2NoZWR1bGVGbHVzaDtxeC5ldmVudC5SZWdpc3RyYXRpb24uYWRkTGlzdGVuZXIod2luZG93LGIscXguYm9tLmNsaWVudC5GZWF0dXJlLlRPVUNIP2suX19sbDprLmZsdXNoKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgubGFuZy5PYmplY3QiO3F4LkNsYXNzLmRlZmluZShhLHtzdGF0aWNzOntlbXB0eTpmdW5jdGlvbihiKXt7fTtmb3IodmFyIGMgaW4gYil7aWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7ZGVsZXRlIGJbY107fX19LGlzRW1wdHk6KHF4LmJvbS5jbGllbnQuRmVhdHVyZS5FQ01BX09CSkVDVF9DT1VOVCk/ZnVuY3Rpb24oZCl7e307cmV0dXJuIGQuX19jb3VudF9fPT09MDt9OmZ1bmN0aW9uKGUpe3t9O2Zvcih2YXIgZiBpbiBlKXtyZXR1cm4gZmFsc2U7fXJldHVybiB0cnVlO30saGFzTWluTGVuZ3RoOihxeC5ib20uY2xpZW50LkZlYXR1cmUuRUNNQV9PQkpFQ1RfQ09VTlQpP2Z1bmN0aW9uKGcsaCl7e307cmV0dXJuIGcuX19jb3VudF9fPj1oO306ZnVuY3Rpb24oaixrKXt7fTtpZihrPD0wKXtyZXR1cm4gdHJ1ZTt9dmFyIGxlbmd0aD0wO2Zvcih2YXIgbSBpbiBqKXtpZigoKytsZW5ndGgpPj1rKXtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9LGdldExlbmd0aDpxeC5Cb290c3RyYXAub2JqZWN0R2V0TGVuZ3RoLGdldEtleXM6cXguQm9vdHN0cmFwLmdldEtleXMsZ2V0S2V5c0FzU3RyaW5nOnF4LkJvb3RzdHJhcC5nZXRLZXlzQXNTdHJpbmcsZ2V0VmFsdWVzOmZ1bmN0aW9uKG4pe3t9O3ZhciBwPVtdO3ZhciBvPXRoaXMuZ2V0S2V5cyhuKTtmb3IodmFyIGk9MCxsPW8ubGVuZ3RoO2k8bDtpKyspe3AucHVzaChuW29baV1dKTt9cmV0dXJuIHA7fSxtZXJnZVdpdGg6cXguQm9vdHN0cmFwLm9iamVjdE1lcmdlV2l0aCxjYXJlZnVsbHlNZXJnZVdpdGg6ZnVuY3Rpb24ocSxyKXt7fTtyZXR1cm4gcXgubGFuZy5PYmplY3QubWVyZ2VXaXRoKHEscixmYWxzZSk7fSxtZXJnZTpmdW5jdGlvbihzLHQpe3t9O3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg7Zm9yKHZhciBpPTE7aTx1O2krKyl7cXgubGFuZy5PYmplY3QubWVyZ2VXaXRoKHMsYXJndW1lbnRzW2ldKTt9cmV0dXJuIHM7fSxjbG9uZTpmdW5jdGlvbih2KXt7fTt2YXIgdz17fTtmb3IodmFyIHggaW4gdil7d1t4XT12W3hdO31yZXR1cm4gdzt9LGludmVydDpmdW5jdGlvbih5KXt7fTt2YXIgej17fTtmb3IodmFyIEEgaW4geSl7elt5W0FdLnRvU3RyaW5nKCldPUE7fXJldHVybiB6O30sZ2V0S2V5RnJvbVZhbHVlOmZ1bmN0aW9uKEIsQyl7e307Zm9yKHZhciBEIGluIEIpe2lmKEIuaGFzT3duUHJvcGVydHkoRCkmJkJbRF09PT1DKXtyZXR1cm4gRDt9fXJldHVybiBudWxsO30sY29udGFpbnM6ZnVuY3Rpb24oRSxGKXt7fTtyZXR1cm4gdGhpcy5nZXRLZXlGcm9tVmFsdWUoRSxGKSE9PW51bGw7fSxzZWxlY3Q6ZnVuY3Rpb24oRyxIKXt7fTtyZXR1cm4gSFtHXTt9LGZyb21BcnJheTpmdW5jdGlvbihJKXt7fTt2YXIgSj17fTtmb3IodmFyIGk9MCxsPUkubGVuZ3RoO2k8bDtpKyspe3t9O0pbSVtpXS50b1N0cmluZygpXT10cnVlO31yZXR1cm4gSjt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9Ii0iLGE9InF4LmV2ZW50LmhhbmRsZXIuRWxlbWVudCI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6cXguZXZlbnQuSUV2ZW50SGFuZGxlcixjb25zdHJ1Y3Q6ZnVuY3Rpb24oYyl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9tYW5hZ2VyPWM7dGhpcy5fcmVnaXN0ZXJlZEV2ZW50cz17fTt9LHN0YXRpY3M6e1BSSU9SSVRZOnF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5QUklPUklUWV9OT1JNQUwsU1VQUE9SVEVEX1RZUEVTOnthYm9ydDp0cnVlLHNjcm9sbDp0cnVlLHNlbGVjdDp0cnVlLHJlc2V0OnRydWUsc3VibWl0OnRydWV9LFRBUkdFVF9DSEVDSzpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLlRBUkdFVF9ET01OT0RFLElHTk9SRV9DQU5fSEFORExFOnRydWV9LG1lbWJlcnM6e2NhbkhhbmRsZUV2ZW50OmZ1bmN0aW9uKGQsZSl7fSxyZWdpc3RlckV2ZW50OmZ1bmN0aW9uKGYsZyxoKXt2YXIgaz1xeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LnRvSGFzaENvZGUoZik7dmFyIGk9aytiK2c7dmFyIGo9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9vbk5hdGl2ZSx0aGlzLGkpO3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcihmLGcsaik7dGhpcy5fcmVnaXN0ZXJlZEV2ZW50c1tpXT17ZWxlbWVudDpmLHR5cGU6ZyxsaXN0ZW5lcjpqfTt9LHVucmVnaXN0ZXJFdmVudDpmdW5jdGlvbihsLG0sbil7dmFyIHE9dGhpcy5fcmVnaXN0ZXJlZEV2ZW50cztpZighcSl7cmV0dXJuO312YXIgcj1xeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LnRvSGFzaENvZGUobCk7dmFyIG89citiK207dmFyIHA9dGhpcy5fcmVnaXN0ZXJlZEV2ZW50c1tvXTtpZihwKXtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIobCxtLHAubGlzdGVuZXIpO31kZWxldGUgdGhpcy5fcmVnaXN0ZXJlZEV2ZW50c1tvXTt9LF9vbk5hdGl2ZTpxeC5ldmVudC5HbG9iYWxFcnJvci5vYnNlcnZlTWV0aG9kKGZ1bmN0aW9uKHMsdCl7dmFyIHY9dGhpcy5fcmVnaXN0ZXJlZEV2ZW50cztpZighdil7cmV0dXJuO312YXIgdT12W3RdO3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5maXJlTm9uQnViYmxpbmdFdmVudCh1LmVsZW1lbnQsdS50eXBlLHF4LmV2ZW50LnR5cGUuTmF0aXZlLFtzXSk7fSl9LGRlc3RydWN0OmZ1bmN0aW9uKCl7dmFyIHc7dmFyIHg9dGhpcy5fcmVnaXN0ZXJlZEV2ZW50cztmb3IodmFyIHkgaW4geCl7dz14W3ldO3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih3LmVsZW1lbnQsdy50eXBlLHcubGlzdGVuZXIpO310aGlzLl9tYW5hZ2VyPXRoaXMuX3JlZ2lzdGVyZWRFdmVudHM9bnVsbDt9LGRlZmVyOmZ1bmN0aW9uKHope3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5hZGRIYW5kbGVyKHopO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBlPSJvcmllbnRhdGlvbmNoYW5nZSIsZD0icmVzaXplIixjPSJsYW5kc2NhcGUiLGI9InBvcnRyYWl0IixhPSJxeC5ldmVudC5oYW5kbGVyLk9yaWVudGF0aW9uIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGltcGxlbWVudDpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLGNvbnN0cnVjdDpmdW5jdGlvbihmKXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3RoaXMuX19oVT1mO3RoaXMuX19oVj1mLmdldFdpbmRvdygpO3RoaXMuX2luaXRPYnNlcnZlcigpO30sc3RhdGljczp7UFJJT1JJVFk6cXguZXZlbnQuUmVnaXN0cmF0aW9uLlBSSU9SSVRZX05PUk1BTCxTVVBQT1JURURfVFlQRVM6e29yaWVudGF0aW9uY2hhbmdlOjF9LFRBUkdFVF9DSEVDSzpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLlRBUkdFVF9XSU5ET1csSUdOT1JFX0NBTl9IQU5ETEU6dHJ1ZX0sbWVtYmVyczp7X19oVTpudWxsLF9faFY6bnVsbCxfX2hXOm51bGwsX19oWDpudWxsLF9faFk6bnVsbCxjYW5IYW5kbGVFdmVudDpmdW5jdGlvbihnLGgpe30scmVnaXN0ZXJFdmVudDpmdW5jdGlvbihpLGosayl7fSx1bnJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24obCxtLG4pe30sX2luaXRPYnNlcnZlcjpmdW5jdGlvbigpe3RoaXMuX19oWT1xeC5sYW5nLkZ1bmN0aW9uLmxpc3RlbmVyKHRoaXMuX29uTmF0aXZlLHRoaXMpO3RoaXMuX19oVz1xeC5ib20uRXZlbnQuc3VwcG9ydHNFdmVudCh0aGlzLl9faFYsZSk/ZTpkO3ZhciBFdmVudD1xeC5ib20uRXZlbnQ7RXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fX2hWLHRoaXMuX19oVyx0aGlzLl9faFkpO30sX3N0b3BPYnNlcnZlcjpmdW5jdGlvbigpe3ZhciBFdmVudD1xeC5ib20uRXZlbnQ7RXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fX2hWLHRoaXMuX19oVyx0aGlzLl9faFkpO30sX29uTmF0aXZlOnF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QoZnVuY3Rpb24obyl7dmFyIHE9cXguYm9tLlZpZXdwb3J0O3ZhciBwPXEuZ2V0T3JpZW50YXRpb24oKTtpZih0aGlzLl9faFghPXApe3RoaXMuX19oWD1wO3ZhciByPXEuaXNMYW5kc2NhcGUoKT9jOmI7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmZpcmVFdmVudCh0aGlzLl9faFYsZSxxeC5ldmVudC50eXBlLk9yaWVudGF0aW9uLFtwLHJdKTt9fSl9LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fc3RvcE9ic2VydmVyKCk7dGhpcy5fX2hVPXRoaXMuX19oVj1udWxsO30sZGVmZXI6ZnVuY3Rpb24ocyl7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmFkZEhhbmRsZXIocyk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIHQ9InF4Lm1vYmlsZS5lbXVsYXRldG91Y2giLHM9InRvdWNoZW5kIixyPSJ0b3VjaHN0YXJ0IixxPSJ0b3VjaG1vdmUiLHA9Im1vdXNlbW92ZSIsbz0idG91Y2hjYW5jZWwiLG49Im1vdXNldXAiLG09Im1vdXNlZG93biIsbD0icXguY2xpZW50IixrPSJtc2h0bWwiLGQ9InF4LmV2ZW50LmhhbmRsZXIuVG91Y2giLGo9InVzZXJhY3Rpb24iLGg9InN3aXBlIixjPSJxeC5tb2JpbGUubmF0aXZlc2Nyb2xsIixiPSJ3ZWJraXQiLGc9Im9mZiIsZj0idGFwIixpPSJ4IixhPSJ5IjtxeC5DbGFzcy5kZWZpbmUoZCx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGltcGxlbWVudDpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLGNvbnN0cnVjdDpmdW5jdGlvbih1KXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3RoaXMuX19oYz11O3RoaXMuX19oZD11LmdldFdpbmRvdygpO3RoaXMuX19oZT10aGlzLl9faGQuZG9jdW1lbnQ7dGhpcy5faW5pdFRvdWNoT2JzZXJ2ZXIoKTt0aGlzLl9pbml0TW91c2VPYnNlcnZlcigpO30sc3RhdGljczp7UFJJT1JJVFk6cXguZXZlbnQuUmVnaXN0cmF0aW9uLlBSSU9SSVRZX05PUk1BTCxTVVBQT1JURURfVFlQRVM6e3RvdWNoc3RhcnQ6MSx0b3VjaG1vdmU6MSx0b3VjaGVuZDoxLHRvdWNoY2FuY2VsOjEsdGFwOjEsc3dpcGU6MX0sVEFSR0VUX0NIRUNLOnF4LmV2ZW50LklFdmVudEhhbmRsZXIuVEFSR0VUX0RPTU5PREUrcXguZXZlbnQuSUV2ZW50SGFuZGxlci5UQVJHRVRfRE9DVU1FTlQsSUdOT1JFX0NBTl9IQU5ETEU6dHJ1ZSxNT1VTRV9UT19UT1VDSF9NQVBQSU5HOnsibW91c2Vkb3duIjoidG91Y2hzdGFydCIsIm1vdXNlbW92ZSI6InRvdWNobW92ZSIsIm1vdXNldXAiOiJ0b3VjaGVuZCJ9LFNXSVBFX0RJUkVDVElPTjp7eDpbImxlZnQiLCJyaWdodCJdLHk6WyJ1cCIsImRvd24iXX0sVEFQX01BWF9ESVNUQU5DRToxMCxTV0lQRV9NSU5fRElTVEFOQ0U6MTEsU1dJUEVfTUlOX1ZFTE9DSVRZOjB9LG1lbWJlcnM6e19faGY6bnVsbCxfX2hnOm51bGwsX19oYzpudWxsLF9faGQ6bnVsbCxfX2hlOm51bGwsX19oaDpudWxsLF9faGk6bnVsbCxfX2hqOm51bGwsX19oazpudWxsLF9faGw6ZmFsc2UsX19obTpudWxsLGNhbkhhbmRsZUV2ZW50OmZ1bmN0aW9uKHYsdyl7fSxyZWdpc3RlckV2ZW50OmZ1bmN0aW9uKHgseSx6KXt9LHVucmVnaXN0ZXJFdmVudDpmdW5jdGlvbihBLEIsQyl7fSxfX2huOmZ1bmN0aW9uKEQpe3ZhciBFPXF4LmJvbS5FdmVudC5nZXRUYXJnZXQoRCk7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGwsYikpe2lmKEUmJkUubm9kZVR5cGU9PTMpe0U9RS5wYXJlbnROb2RlO319cmV0dXJuIEU7fSxfX2hvOmZ1bmN0aW9uKEYsRyxILEkpe2lmKCFIKXtIPXRoaXMuX19obihGKTt9dmFyIEc9R3x8Ri50eXBlO2lmKEgmJkgubm9kZVR5cGUpe3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5maXJlRXZlbnQoSCxHLEl8fHF4LmV2ZW50LnR5cGUuVG91Y2gsW0YsSCxudWxsLHRydWUsdHJ1ZV0pO31xeC5ldmVudC5SZWdpc3RyYXRpb24uZmlyZUV2ZW50KHRoaXMuX19oZCxqLHF4LmV2ZW50LnR5cGUuRGF0YSxbR10pO30sX19ocDpmdW5jdGlvbihKLEssTCl7aWYoIUwpe0w9dGhpcy5fX2huKEopO312YXIgSz1LfHxKLnR5cGU7aWYoSz09cil7dGhpcy5fX2hxKEosTCk7fWVsc2UgaWYoSz09cSl7dGhpcy5fX2hyKEosTCk7fWVsc2UgaWYoSz09cyl7dGhpcy5fX2hzKEosTCk7fX0sX19ocTpmdW5jdGlvbihNLE4pe3ZhciBPPU0uY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5fX2hoPU8uc2NyZWVuWDt0aGlzLl9faGk9Ty5zY3JlZW5ZO3RoaXMuX19oaj1uZXcgRGF0ZSgpLmdldFRpbWUoKTt0aGlzLl9faGs9TS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT0xO30sX19ocjpmdW5jdGlvbihQLFEpe2lmKHRoaXMuX19oayYmUC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg+MSl7dGhpcy5fX2hrPWZhbHNlO319LF9faHM6ZnVuY3Rpb24oUixTKXtpZih0aGlzLl9faGspe3ZhciBUPVIuY2hhbmdlZFRvdWNoZXNbMF07dmFyIFY9e3g6VC5zY3JlZW5YLXRoaXMuX19oaCx5OlQuc2NyZWVuWS10aGlzLl9faGl9O3ZhciBXPXF4LmV2ZW50LmhhbmRsZXIuVG91Y2g7aWYodGhpcy5fX2htPT1TJiZNYXRoLmFicyhWLngpPD1XLlRBUF9NQVhfRElTVEFOQ0UmJk1hdGguYWJzKFYueSk8PVcuVEFQX01BWF9ESVNUQU5DRSl7dGhpcy5fX2hvKFIsZixTLHF4LmV2ZW50LnR5cGUuVGFwKTt9ZWxzZXt2YXIgVT10aGlzLl9faHQoUixTLFYpO2lmKFUpe1Iuc3dpcGU9VTt0aGlzLl9faG8oUixoLFMscXguZXZlbnQudHlwZS5Td2lwZSk7fX19fSxfX2h0OmZ1bmN0aW9uKFgsWSxiYSl7dmFyIGJlPXF4LmV2ZW50LmhhbmRsZXIuVG91Y2g7dmFyIGJmPW5ldyBEYXRlKCkuZ2V0VGltZSgpLXRoaXMuX19oajt2YXIgYmg9KE1hdGguYWJzKGJhLngpPj1NYXRoLmFicyhiYS55KSk/aTphO3ZhciBiYj1iYVtiaF07dmFyIGJjPWJlLlNXSVBFX0RJUkVDVElPTltiaF1bYmI8MD8wOjFdO3ZhciBiZz0oYmYhPT0wKT9iYi9iZjowO3ZhciBiZD1udWxsO2lmKE1hdGguYWJzKGJnKT49YmUuU1dJUEVfTUlOX1ZFTE9DSVRZJiZNYXRoLmFicyhiYik+PWJlLlNXSVBFX01JTl9ESVNUQU5DRSl7YmQ9e3N0YXJ0VGltZTp0aGlzLl9faGosZHVyYXRpb246YmYsYXhpczpiaCxkaXJlY3Rpb246YmMsZGlzdGFuY2U6YmIsdmVsb2NpdHk6Ymd9O31yZXR1cm4gYmQ7fSxfX2h1OnF4LmNvcmUuVmFyaWFudC5zZWxlY3QodCx7Im9uIjpmdW5jdGlvbihiaSl7dmFyIGJqPWJpLnR5cGU7dmFyIGJsPXF4LmV2ZW50LmhhbmRsZXIuVG91Y2guTU9VU0VfVE9fVE9VQ0hfTUFQUElORztpZihibFtial0pe2JqPWJsW2JqXTtpZihiaj09ciYmdGhpcy5fX2h2KGJpKSl7dGhpcy5fX2hsPXRydWU7fWVsc2UgaWYoYmo9PXMpe3RoaXMuX19obD1mYWxzZTt9dmFyIGJtPXRoaXMuX19odyhiaSk7dmFyIGJrPShiaj09cz9bXTpbYm1dKTtiaS50b3VjaGVzPWJrO2JpLnRhcmdldFRvdWNoZXM9Yms7YmkuY2hhbmdlZFRvdWNoZXM9W2JtXTt9cmV0dXJuIGJqO30sImRlZmF1bHQiOnF4LmxhbmcuRnVuY3Rpb24uZW1wdHl9KSxfX2h2OnF4LmNvcmUuVmFyaWFudC5zZWxlY3QodCx7Im9uIjpmdW5jdGlvbihibil7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGwsaykpe3ZhciBibz0xO31lbHNle3ZhciBibz0wO31yZXR1cm4gYm4uYnV0dG9uPT1ibzt9LCJkZWZhdWx0IjpxeC5sYW5nLkZ1bmN0aW9uLmVtcHR5fSksX19odzpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KHQseyJvbiI6ZnVuY3Rpb24oYnApe3ZhciBicT10aGlzLl9faG4oYnApO3JldHVybiB7Y2xpZW50WDpicC5jbGllbnRYLGNsaWVudFk6YnAuY2xpZW50WSxzY3JlZW5YOmJwLnNjcmVlblgsc2NyZWVuWTpicC5zY3JlZW5ZLHBhZ2VYOmJwLnBhZ2VYLHBhZ2VZOmJwLnBhZ2VZLGlkZW50aWZpZXI6MSx0YXJnZXQ6YnF9O30sImRlZmF1bHQiOnF4LmxhbmcuRnVuY3Rpb24uZW1wdHl9KSxfaW5pdFRvdWNoT2JzZXJ2ZXI6ZnVuY3Rpb24oKXt0aGlzLl9faGY9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9vblRvdWNoRXZlbnQsdGhpcyk7dmFyIEV2ZW50PXF4LmJvbS5FdmVudDtFdmVudC5hZGROYXRpdmVMaXN0ZW5lcih0aGlzLl9faGUscix0aGlzLl9faGYpO0V2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX19oZSxxLHRoaXMuX19oZik7RXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fX2hlLHMsdGhpcy5fX2hmKTtFdmVudC5hZGROYXRpdmVMaXN0ZW5lcih0aGlzLl9faGUsbyx0aGlzLl9faGYpO30sX2luaXRNb3VzZU9ic2VydmVyOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QodCx7Im9uIjpmdW5jdGlvbigpe2lmKCFxeC5ib20uY2xpZW50LkZlYXR1cmUuVE9VQ0gpe3RoaXMuX19oZz1xeC5sYW5nLkZ1bmN0aW9uLmxpc3RlbmVyKHRoaXMuX29uTW91c2VFdmVudCx0aGlzKTt2YXIgRXZlbnQ9cXguYm9tLkV2ZW50O0V2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX19oZSxtLHRoaXMuX19oZyk7RXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fX2hlLHAsdGhpcy5fX2hnKTtFdmVudC5hZGROYXRpdmVMaXN0ZW5lcih0aGlzLl9faGUsbix0aGlzLl9faGcpO319LCJkZWZhdWx0IjpxeC5sYW5nLkZ1bmN0aW9uLmVtcHR5fSksX3N0b3BUb3VjaE9ic2VydmVyOmZ1bmN0aW9uKCl7dmFyIEV2ZW50PXF4LmJvbS5FdmVudDtFdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl9faGUscix0aGlzLl9faGYpO0V2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKHRoaXMuX19oZSxxLHRoaXMuX19oZik7RXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fX2hlLHMsdGhpcy5fX2hmKTtFdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl9faGUsbyx0aGlzLl9faGYpO30sX3N0b3BNb3VzZU9ic2VydmVyOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QodCx7Im9uIjpmdW5jdGlvbigpe2lmKCFxeC5ib20uY2xpZW50LkZlYXR1cmUuVE9VQ0gpe3ZhciBFdmVudD1xeC5ib20uRXZlbnQ7RXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fX2hlLG0sdGhpcy5fX2hnKTtFdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl9faGUscCx0aGlzLl9faGcpO0V2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKHRoaXMuX19oZSxuLHRoaXMuX19oZyk7fX0sImRlZmF1bHQiOnF4LmxhbmcuRnVuY3Rpb24uZW1wdHl9KSxfb25Ub3VjaEV2ZW50OnF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QoZnVuY3Rpb24oYnIpe3RoaXMuX2NvbW1vblRvdWNoRXZlbnRIYW5kbGVyKGJyKTt9KSxfb25Nb3VzZUV2ZW50OnF4LmNvcmUuVmFyaWFudC5zZWxlY3QodCx7Im9uIjpxeC5ldmVudC5HbG9iYWxFcnJvci5vYnNlcnZlTWV0aG9kKGZ1bmN0aW9uKGJzKXtpZighcXguYm9tLmNsaWVudC5GZWF0dXJlLlRPVUNIKXtpZihicy50eXBlPT1wJiYhdGhpcy5fX2hsKXtyZXR1cm47fXZhciBidD10aGlzLl9faHUoYnMpO3RoaXMuX2NvbW1vblRvdWNoRXZlbnRIYW5kbGVyKGJzLGJ0KTt9fSksImRlZmF1bHQiOnF4LmxhbmcuRnVuY3Rpb24uZW1wdHl9KSxfY29tbW9uVG91Y2hFdmVudEhhbmRsZXI6ZnVuY3Rpb24oYnUsYnYpe3ZhciBidj1idnx8YnUudHlwZTtpZihidj09cil7dGhpcy5fX2htPXRoaXMuX19obihidSk7fXRoaXMuX19obyhidSxidik7dGhpcy5fX2hwKGJ1LGJ2KTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX3N0b3BUb3VjaE9ic2VydmVyKCk7dGhpcy5fc3RvcE1vdXNlT2JzZXJ2ZXIoKTt0aGlzLl9faGM9dGhpcy5fX2hkPXRoaXMuX19oZT10aGlzLl9faG09bnVsbDt9LGRlZmVyOmZ1bmN0aW9uKGJ3KXtxeC5ldmVudC5SZWdpc3RyYXRpb24uYWRkSGFuZGxlcihidyk7aWYocXguYm9tLmNsaWVudC5GZWF0dXJlLlRPVUNIKXtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoYyxnKSl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihxLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTt9KTt9cXguZXZlbnQuUmVnaXN0cmF0aW9uLmdldE1hbmFnZXIoZG9jdW1lbnQpLmdldEhhbmRsZXIoYncpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbj0iaVBvZCIsbT0iV2luMzIiLGw9IiIsaz0iV2luNjQiLGo9IkxpbnV4IixpPSJCU0QiLGg9Ik1hY2ludG9zaCIsZz0iaVBob25lIixmPSJXaW5kb3dzIixlPSJxeC5ib20uY2xpZW50LlBsYXRmb3JtIixiPSJpUGFkIixkPSJYMTEiLGM9Ik1hY0ludGVsIixhPSJNYWNQUEMiO3F4LkNsYXNzLmRlZmluZShlLHtzdGF0aWNzOntOQU1FOiIiLFdJTjpmYWxzZSxNQUM6ZmFsc2UsVU5JWDpmYWxzZSxVTktOT1dOX1BMQVRGT1JNOmZhbHNlLF9fa0g6ZnVuY3Rpb24oKXt2YXIgbz1uYXZpZ2F0b3IucGxhdGZvcm07aWYobz09bnVsbHx8bz09PWwpe289bmF2aWdhdG9yLnVzZXJBZ2VudDt9aWYoby5pbmRleE9mKGYpIT0tMXx8by5pbmRleE9mKG0pIT0tMXx8by5pbmRleE9mKGspIT0tMSl7dGhpcy5XSU49dHJ1ZTt0aGlzLk5BTUU9IndpbiI7fWVsc2UgaWYoby5pbmRleE9mKGgpIT0tMXx8by5pbmRleE9mKGEpIT0tMXx8by5pbmRleE9mKGMpIT0tMXx8by5pbmRleE9mKG4pIT0tMXx8by5pbmRleE9mKGcpIT0tMXx8by5pbmRleE9mKGIpIT0tMSl7dGhpcy5NQUM9dHJ1ZTt0aGlzLk5BTUU9Im1hYyI7fWVsc2UgaWYoby5pbmRleE9mKGQpIT0tMXx8by5pbmRleE9mKGopIT0tMXx8by5pbmRleE9mKGkpIT0tMSl7dGhpcy5VTklYPXRydWU7dGhpcy5OQU1FPSJ1bml4Ijt9ZWxzZXt0aGlzLlVOS05PV05fUExBVEZPUk09dHJ1ZTt0aGlzLldJTj10cnVlO3RoaXMuTkFNRT0id2luIjt9fX0sZGVmZXI6ZnVuY3Rpb24ocCl7cC5fX2tIKCk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGo9Indpbjk4IixpPSJvc3gyIixoPSJvc3gwIixnPSJvc3g0IixmPSJ3aW45NSIsZT0id2luMjAwMCIsZD0ib3N4MSIsYz0ib3N4NSIsYj0ib3N4MyIsYT0iV2luZG93cyBOVCA1LjAxIixJPSIpIixIPSJ3aW54cCIsRz0iZnJlZWJzZCIsRj0ic3Vub3MiLEU9IlNWMSIsRD0ifCIsQz0ibmludGVuZG9kcyIsQj0id2lubnQ0IixBPSJ3aW5jZSIsej0id2lubWUiLHE9Im9zOSIscj0iXC4iLG89Im9zeCIscD0ibGludXgiLG09Im5ldGJzZCIsbj0id2ludmlzdGEiLGs9Im9wZW5ic2QiLGw9IigiLHM9IndpbjIwMDMiLHQ9ImlQYWQiLHY9InN5bWJpYW4iLHU9IndpbjciLHg9ImciLHc9InF4LmJvbS5jbGllbnQuU3lzdGVtIix5PSIgTW9iaWxlLyI7cXguQm9vdHN0cmFwLmRlZmluZSh3LHtzdGF0aWNzOntOQU1FOiIiLFNQMTpmYWxzZSxTUDI6ZmFsc2UsV0lOOTU6ZmFsc2UsV0lOOTg6ZmFsc2UsV0lOTUU6ZmFsc2UsV0lOTlQ0OmZhbHNlLFdJTjIwMDA6ZmFsc2UsV0lOWFA6ZmFsc2UsV0lOMjAwMzpmYWxzZSxXSU5WSVNUQTpmYWxzZSxXSU43OmZhbHNlLFdJTkNFOmZhbHNlLExJTlVYOmZhbHNlLFNVTk9TOmZhbHNlLEZSRUVCU0Q6ZmFsc2UsTkVUQlNEOmZhbHNlLE9QRU5CU0Q6ZmFsc2UsT1NYOmZhbHNlLE9TOTpmYWxzZSxTWU1CSUFOOmZhbHNlLE5JTlRFTkRPRFM6ZmFsc2UsUFNQOmZhbHNlLElQSE9ORTpmYWxzZSxJUEFEOmZhbHNlLFVOS05PV05fU1lTVEVNOmZhbHNlLF9fbHU6eyJXaW5kb3dzIE5UIDYuMSI6dSwiV2luZG93cyBOVCA2LjAiOm4sIldpbmRvd3MgTlQgNS4yIjpzLCJXaW5kb3dzIE5UIDUuMSI6SCwiV2luZG93cyBOVCA1LjAiOmUsIldpbmRvd3MgMjAwMCI6ZSwiV2luZG93cyBOVCA0LjAiOkIsIldpbiA5eCA0LjkwIjp6LCJXaW5kb3dzIENFIjpBLCJXaW5kb3dzIDk4IjpqLCJXaW45OCI6aiwiV2luZG93cyA5NSI6ZiwiV2luOTUiOmYsIkxpbnV4IjpwLCJGcmVlQlNEIjpHLCJOZXRCU0QiOm0sIk9wZW5CU0QiOmssIlN1bk9TIjpGLCJTeW1iaWFuIFN5c3RlbSI6diwiTml0cm8iOkMsIlBTUCI6InNvbnlwc3AiLCJNYWMgT1MgWCAxMF81IjpjLCJNYWMgT1MgWCAxMC41IjpjLCJNYWMgT1MgWCAxMF80IjpnLCJNYWMgT1MgWCAxMC40IjpnLCJNYWMgT1MgWCAxMF8zIjpiLCJNYWMgT1MgWCAxMC4zIjpiLCJNYWMgT1MgWCAxMF8yIjppLCJNYWMgT1MgWCAxMC4yIjppLCJNYWMgT1MgWCAxMF8xIjpkLCJNYWMgT1MgWCAxMC4xIjpkLCJNYWMgT1MgWCAxMF8wIjpoLCJNYWMgT1MgWCAxMC4wIjpoLCJNYWMgT1MgWCI6bywiTWFjIE9TIDkiOnF9LF9fbHY6ZnVuY3Rpb24oKXt2YXIgTD1uYXZpZ2F0b3IudXNlckFnZW50O3ZhciBLPVtdO2Zvcih2YXIgSiBpbiB0aGlzLl9fbHUpe0sucHVzaChKKTt9dmFyIE09bmV3IFJlZ0V4cChsK0suam9pbihEKS5yZXBsYWNlKC9cLi9nLHIpK0kseCk7aWYoIU0udGVzdChMKSl7dGhpcy5VTktOT1dOX1NZU1RFTT10cnVlO2lmKCFxeC5ib20uY2xpZW50LlBsYXRmb3JtLlVOS05PV05fUExBVEZPUk0pe2lmKHF4LmJvbS5jbGllbnQuUGxhdGZvcm0uVU5JWCl7dGhpcy5OQU1FPSJsaW51eCI7dGhpcy5MSU5VWD10cnVlO31lbHNlIGlmKHF4LmJvbS5jbGllbnQuUGxhdGZvcm0uTUFDKXt0aGlzLk5BTUU9Im9zeDUiO3RoaXMuT1NYPXRydWU7fWVsc2V7dGhpcy5OQU1FPSJ3aW54cCI7dGhpcy5XSU5YUD10cnVlO319ZWxzZXt0aGlzLk5BTUU9IndpbnhwIjt0aGlzLldJTlhQPXRydWU7fXJldHVybjt9aWYocXguYm9tLmNsaWVudC5FbmdpbmUuV0VCS0lUJiZSZWdFeHAoeSkudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7aWYoUmVnRXhwKHQpLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpe3RoaXMuSVBBRD10cnVlO3RoaXMuTkFNRT0iaXBhZCI7fWVsc2V7dGhpcy5JUEhPTkU9dHJ1ZTt0aGlzLk5BTUU9ImlwaG9uZSI7fX1lbHNle3RoaXMuTkFNRT10aGlzLl9fbHVbUmVnRXhwLiQxXTt0aGlzW3RoaXMuTkFNRS50b1VwcGVyQ2FzZSgpXT10cnVlO2lmKHF4LmJvbS5jbGllbnQuUGxhdGZvcm0uV0lOKXtpZihMLmluZGV4T2YoYSkhPT0tMSl7dGhpcy5TUDE9dHJ1ZTt9ZWxzZSBpZihxeC5ib20uY2xpZW50LkVuZ2luZS5NU0hUTUwmJkwuaW5kZXhPZihFKSE9PS0xKXt0aGlzLlNQMj10cnVlO319fX19LGRlZmVyOmZ1bmN0aW9uKE4pe04uX19sdigpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBwPSJtb3VzZXVwIixvPSJjbGljayIsbj0icXguY2xpZW50IixtPSJtb3VzZWRvd24iLGw9ImNvbnRleHRtZW51IixrPSJtb3VzZXdoZWVsIixqPSJkYmxjbGljayIsaD0ibW91c2VvdmVyIixnPSJtb3VzZW91dCIsZj0ibW91c2Vtb3ZlIixjPSJvbiIsZT0idXNlcmFjdGlvbiIsZD0iRE9NTW91c2VTY3JvbGwiLGI9ImdlY2tvfHdlYmtpdCIsYT0icXguZXZlbnQuaGFuZGxlci5Nb3VzZSI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6cXguZXZlbnQuSUV2ZW50SGFuZGxlcixjb25zdHJ1Y3Q6ZnVuY3Rpb24ocSl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9fZUQ9cTt0aGlzLl9fZUU9cS5nZXRXaW5kb3coKTt0aGlzLl9fZUY9dGhpcy5fX2VFLmRvY3VtZW50O3RoaXMuX2luaXRCdXR0b25PYnNlcnZlcigpO3RoaXMuX2luaXRNb3ZlT2JzZXJ2ZXIoKTt0aGlzLl9pbml0V2hlZWxPYnNlcnZlcigpO30sc3RhdGljczp7UFJJT1JJVFk6cXguZXZlbnQuUmVnaXN0cmF0aW9uLlBSSU9SSVRZX05PUk1BTCxTVVBQT1JURURfVFlQRVM6e21vdXNlbW92ZToxLG1vdXNlb3ZlcjoxLG1vdXNlb3V0OjEsbW91c2Vkb3duOjEsbW91c2V1cDoxLGNsaWNrOjEsZGJsY2xpY2s6MSxjb250ZXh0bWVudToxLG1vdXNld2hlZWw6MX0sVEFSR0VUX0NIRUNLOnF4LmV2ZW50LklFdmVudEhhbmRsZXIuVEFSR0VUX0RPTU5PREUsSUdOT1JFX0NBTl9IQU5ETEU6dHJ1ZX0sbWVtYmVyczp7X19lRzpudWxsLF9fZUg6bnVsbCxfX2VJOm51bGwsX19lSjpudWxsLF9fZUs6bnVsbCxfX2VEOm51bGwsX19lRTpudWxsLF9fZUY6bnVsbCxjYW5IYW5kbGVFdmVudDpmdW5jdGlvbihyLHMpe30scmVnaXN0ZXJFdmVudDpxeC5ib20uY2xpZW50LlN5c3RlbS5JUEhPTkU/ZnVuY3Rpb24odCx1LHYpe3RbYyt1XT1xeC5sYW5nLkZ1bmN0aW9uLnJldHVybk51bGw7fTpxeC5sYW5nLkZ1bmN0aW9uLnJldHVybk51bGwsdW5yZWdpc3RlckV2ZW50OnF4LmJvbS5jbGllbnQuU3lzdGVtLklQSE9ORT9mdW5jdGlvbih3LHgseSl7d1tjK3hdPXVuZGVmaW5lZDt9OnF4LmxhbmcuRnVuY3Rpb24ucmV0dXJuTnVsbCxfX2VMOmZ1bmN0aW9uKHosQSxCKXtpZighQil7Qj1xeC5ib20uRXZlbnQuZ2V0VGFyZ2V0KHopO31pZihCJiZCLm5vZGVUeXBlKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZmlyZUV2ZW50KEIsQXx8ei50eXBlLEE9PWs/cXguZXZlbnQudHlwZS5Nb3VzZVdoZWVsOnF4LmV2ZW50LnR5cGUuTW91c2UsW3osQixudWxsLHRydWUsdHJ1ZV0pO31xeC5ldmVudC5SZWdpc3RyYXRpb24uZmlyZUV2ZW50KHRoaXMuX19lRSxlLHF4LmV2ZW50LnR5cGUuRGF0YSxbQXx8ei50eXBlXSk7fSxfX2VNOmZ1bmN0aW9uKCl7dmFyIEQ9W3RoaXMuX19lRSx0aGlzLl9fZUYsdGhpcy5fX2VGLmJvZHldO3ZhciBFPXRoaXMuX19lRTt2YXIgQz1kO2Zvcih2YXIgaT0wO2k8RC5sZW5ndGg7aSsrKXtpZihxeC5ib20uRXZlbnQuc3VwcG9ydHNFdmVudChEW2ldLGspKXtDPWs7RT1EW2ldO2JyZWFrO319cmV0dXJuIHt0eXBlOkMsdGFyZ2V0OkV9O30sX2luaXRCdXR0b25PYnNlcnZlcjpmdW5jdGlvbigpe3RoaXMuX19lRz1xeC5sYW5nLkZ1bmN0aW9uLmxpc3RlbmVyKHRoaXMuX29uQnV0dG9uRXZlbnQsdGhpcyk7dmFyIEV2ZW50PXF4LmJvbS5FdmVudDtFdmVudC5hZGROYXRpdmVMaXN0ZW5lcih0aGlzLl9fZUYsbSx0aGlzLl9fZUcpO0V2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX19lRixwLHRoaXMuX19lRyk7RXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fX2VGLG8sdGhpcy5fX2VHKTtFdmVudC5hZGROYXRpdmVMaXN0ZW5lcih0aGlzLl9fZUYsaix0aGlzLl9fZUcpO0V2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX19lRixsLHRoaXMuX19lRyk7fSxfaW5pdE1vdmVPYnNlcnZlcjpmdW5jdGlvbigpe3RoaXMuX19lSD1xeC5sYW5nLkZ1bmN0aW9uLmxpc3RlbmVyKHRoaXMuX29uTW92ZUV2ZW50LHRoaXMpO3ZhciBFdmVudD1xeC5ib20uRXZlbnQ7RXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fX2VGLGYsdGhpcy5fX2VIKTtFdmVudC5hZGROYXRpdmVMaXN0ZW5lcih0aGlzLl9fZUYsaCx0aGlzLl9fZUgpO0V2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX19lRixnLHRoaXMuX19lSCk7fSxfaW5pdFdoZWVsT2JzZXJ2ZXI6ZnVuY3Rpb24oKXt0aGlzLl9fZUk9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9vbldoZWVsRXZlbnQsdGhpcyk7dmFyIEY9dGhpcy5fX2VNKCk7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKEYudGFyZ2V0LEYudHlwZSx0aGlzLl9fZUkpO30sX3N0b3BCdXR0b25PYnNlcnZlcjpmdW5jdGlvbigpe3ZhciBFdmVudD1xeC5ib20uRXZlbnQ7RXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fX2VGLG0sdGhpcy5fX2VHKTtFdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl9fZUYscCx0aGlzLl9fZUcpO0V2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKHRoaXMuX19lRixvLHRoaXMuX19lRyk7RXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fX2VGLGosdGhpcy5fX2VHKTtFdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl9fZUYsbCx0aGlzLl9fZUcpO30sX3N0b3BNb3ZlT2JzZXJ2ZXI6ZnVuY3Rpb24oKXt2YXIgRXZlbnQ9cXguYm9tLkV2ZW50O0V2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKHRoaXMuX19lRixmLHRoaXMuX19lSCk7RXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fX2VGLGgsdGhpcy5fX2VIKTtFdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl9fZUYsZyx0aGlzLl9fZUgpO30sX3N0b3BXaGVlbE9ic2VydmVyOmZ1bmN0aW9uKCl7dmFyIEc9dGhpcy5fX2VNKCk7cXguYm9tLkV2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKEcudGFyZ2V0LEcudHlwZSx0aGlzLl9fZUkpO30sX29uTW92ZUV2ZW50OnF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QoZnVuY3Rpb24oSCl7dGhpcy5fX2VMKEgpO30pLF9vbkJ1dHRvbkV2ZW50OnF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QoZnVuY3Rpb24oSSl7dmFyIEo9SS50eXBlO3ZhciBLPXF4LmJvbS5FdmVudC5nZXRUYXJnZXQoSSk7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KG4sYikpe2lmKEsmJksubm9kZVR5cGU9PTMpe0s9Sy5wYXJlbnROb2RlO319aWYodGhpcy5fX2VOKXt0aGlzLl9fZU4oSSxKLEspO31pZih0aGlzLl9fZVApe3RoaXMuX19lUChJLEosSyk7fXRoaXMuX19lTChJLEosSyk7aWYodGhpcy5fX2VPKXt0aGlzLl9fZU8oSSxKLEspO31pZih0aGlzLl9fZVEpe3RoaXMuX19lUShJLEosSyk7fXRoaXMuX19lSj1KO30pLF9vbldoZWVsRXZlbnQ6cXguZXZlbnQuR2xvYmFsRXJyb3Iub2JzZXJ2ZU1ldGhvZChmdW5jdGlvbihMKXt0aGlzLl9fZUwoTCxrKTt9KSxfX2VOOnF4LmNvcmUuVmFyaWFudC5zZWxlY3Qobix7IndlYmtpdCI6ZnVuY3Rpb24oTSxOLE8pe2lmKHF4LmJvbS5jbGllbnQuRW5naW5lLlZFUlNJT048NTMwKXtpZihOPT1sKXt0aGlzLl9fZUwoTSxwLE8pO319fSwiZGVmYXVsdCI6bnVsbH0pLF9fZU86cXguY29yZS5WYXJpYW50LnNlbGVjdChuLHsib3BlcmEiOmZ1bmN0aW9uKFAsUSxSKXtpZihRPT1wJiZQLmJ1dHRvbj09Mil7dGhpcy5fX2VMKFAsbCxSKTt9fSwiZGVmYXVsdCI6bnVsbH0pLF9fZVA6cXguY29yZS5WYXJpYW50LnNlbGVjdChuLHsibXNodG1sIjpmdW5jdGlvbihTLFQsVSl7aWYoUy50YXJnZXQhPT11bmRlZmluZWQpe3JldHVybjt9aWYoVD09cCYmdGhpcy5fX2VKPT1vKXt0aGlzLl9fZUwoUyxtLFUpO31lbHNlIGlmKFQ9PWope3RoaXMuX19lTChTLG8sVSk7fX0sImRlZmF1bHQiOm51bGx9KSxfX2VROnF4LmNvcmUuVmFyaWFudC5zZWxlY3Qobix7Im1zaHRtbCI6bnVsbCwiZGVmYXVsdCI6ZnVuY3Rpb24oVixXLFgpe3N3aXRjaChXKXtjYXNlIG06dGhpcy5fX2VLPVg7YnJlYWs7Y2FzZSBwOmlmKFghPT10aGlzLl9fZUspe3ZhciBZPXF4LmRvbS5IaWVyYXJjaHkuZ2V0Q29tbW9uUGFyZW50KFgsdGhpcy5fX2VLKTt0aGlzLl9fZUwoVixvLFkpO319fX0pfSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX3N0b3BCdXR0b25PYnNlcnZlcigpO3RoaXMuX3N0b3BNb3ZlT2JzZXJ2ZXIoKTt0aGlzLl9zdG9wV2hlZWxPYnNlcnZlcigpO3RoaXMuX19lRD10aGlzLl9fZUU9dGhpcy5fX2VGPXRoaXMuX19lSz1udWxsO30sZGVmZXI6ZnVuY3Rpb24oYmEpe3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5hZGRIYW5kbGVyKGJhKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbT0ia2V5ZG93biIsbD0icXguY2xpZW50IixrPSJrZXlwcmVzcyIsaj0iTnVtTG9jayIsaT0ia2V5dXAiLGg9IkVudGVyIixnPSIwIixmPSI5IixlPSItIixkPSJQYWdlVXAiLGJ1PSIrIixidD0iUHJpbnRTY3JlZW4iLGJzPSJnZWNrbyIsYnI9IkEiLGJxPSJaIixicD0iTGVmdCIsYm89IkY1Iixibj0iRG93biIsYm09IlVwIixibD0iRjExIix0PSJGNiIsdT0idXNlcmFjdGlvbiIscj0iRjMiLHM9ImtleWlucHV0IixwPSJJbnNlcnQiLHE9IkY4IixuPSJFbmQiLG89Ii8iLEI9IkRlbGV0ZSIsQz0iKiIsTz0iY21kIixLPSJGMSIsVz0iRjQiLFI9IkhvbWUiLGJoPSJGMiIsYmM9IkYxMiIsRz0iUGFnZURvd24iLGJrPSJGNyIsYmo9IldpbiIsYmk9IkY5IixGPSJGMTAiLEk9IlJpZ2h0IixKPSJ0ZXh0IixNPSJFc2NhcGUiLFA9IndlYmtpdCIsUz0iNSIsWT0iMyIsYmU9Ik1ldGEiLHY9IjciLHc9IkNhcHNMb2NrIixIPSJpbnB1dCIsVj0iQ29udHJvbCIsVT0iU3BhY2UiLFQ9IlRhYiIsYmI9IlNoaWZ0IixiYT0iUGF1c2UiLFE9IlVuaWRlbnRpZmllZCIsWD0icXguZXZlbnQuaGFuZGxlci5LZXlib2FyZCIsYT0ibXNodG1sfHdlYmtpdCIsYmQ9IjYiLHg9Im9mZiIseT0iQXBwcyIsTD0iNCIsYj0iQWx0IixjPSJtc2h0bWwiLEU9IjIiLHo9IlNjcm9sbCIsQT0iMSIsRD0iOCIsTj0iYXV0b0NvbXBsZXRlIixiZz0iLCIsYmY9IkJhY2tzcGFjZSI7cXguQ2xhc3MuZGVmaW5lKFgse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6cXguZXZlbnQuSUV2ZW50SGFuZGxlcixjb25zdHJ1Y3Q6ZnVuY3Rpb24oYnYpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7dGhpcy5fX2dPPWJ2O3RoaXMuX19nUD1idi5nZXRXaW5kb3coKTtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQobCxicykpe3RoaXMuX19nUT10aGlzLl9fZ1A7fWVsc2V7dGhpcy5fX2dRPXRoaXMuX19nUC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7fXRoaXMuX19nUj17fTt0aGlzLl9pbml0S2V5T2JzZXJ2ZXIoKTt9LHN0YXRpY3M6e1BSSU9SSVRZOnF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5QUklPUklUWV9OT1JNQUwsU1VQUE9SVEVEX1RZUEVTOntrZXl1cDoxLGtleWRvd246MSxrZXlwcmVzczoxLGtleWlucHV0OjF9LFRBUkdFVF9DSEVDSzpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLlRBUkdFVF9ET01OT0RFLElHTk9SRV9DQU5fSEFORExFOnRydWUsaXNWYWxpZEtleUlkZW50aWZpZXI6ZnVuY3Rpb24oYncpe2lmKHRoaXMuX2lkZW50aWZpZXJUb0tleUNvZGVNYXBbYnddKXtyZXR1cm4gdHJ1ZTt9aWYoYncubGVuZ3RoIT0xKXtyZXR1cm4gZmFsc2U7fWlmKGJ3Pj1nJiZidzw9Zil7cmV0dXJuIHRydWU7fWlmKGJ3Pj1iciYmYnc8PWJxKXtyZXR1cm4gdHJ1ZTt9c3dpdGNoKGJ3KXtjYXNlIGJ1OmNhc2UgZTpjYXNlIEM6Y2FzZSBvOnJldHVybiB0cnVlO2RlZmF1bHQ6cmV0dXJuIGZhbHNlO319fSxtZW1iZXJzOntfX2dTOm51bGwsX19nTzpudWxsLF9fZ1A6bnVsbCxfX2dROm51bGwsX19nUjpudWxsLF9fZ1Q6bnVsbCxfX2dVOm51bGwsX19nVjpudWxsLGNhbkhhbmRsZUV2ZW50OmZ1bmN0aW9uKGJ4LGJ5KXt9LHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oYnosYkEsYkIpe30sdW5yZWdpc3RlckV2ZW50OmZ1bmN0aW9uKGJDLGJELGJFKXt9LF9maXJlSW5wdXRFdmVudDpmdW5jdGlvbihiRixiRyl7dmFyIGJIPXRoaXMuX19nVygpO2lmKGJIJiZiSC5vZmZzZXRXaWR0aCE9MCl7dmFyIGV2ZW50PXF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5jcmVhdGVFdmVudChzLHF4LmV2ZW50LnR5cGUuS2V5SW5wdXQsW2JGLGJILGJHXSk7dGhpcy5fX2dPLmRpc3BhdGNoRXZlbnQoYkgsZXZlbnQpO31pZih0aGlzLl9fZ1Ape3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5maXJlRXZlbnQodGhpcy5fX2dQLHUscXguZXZlbnQudHlwZS5EYXRhLFtzXSk7fX0sX2ZpcmVTZXF1ZW5jZUV2ZW50OmZ1bmN0aW9uKGJJLGJKLGJLKXt2YXIgYkw9dGhpcy5fX2dXKCk7dmFyIGJNPWJJLmtleUNvZGU7dmFyIGV2ZW50PXF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5jcmVhdGVFdmVudChiSixxeC5ldmVudC50eXBlLktleVNlcXVlbmNlLFtiSSxiTCxiS10pO3RoaXMuX19nTy5kaXNwYXRjaEV2ZW50KGJMLGV2ZW50KTtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQobCxhKSl7aWYoYko9PW0mJmV2ZW50LmdldERlZmF1bHRQcmV2ZW50ZWQoKSl7aWYoIXRoaXMuX2lzTm9uUHJpbnRhYmxlS2V5Q29kZShiTSkmJiF0aGlzLl9lbXVsYXRlS2V5UHJlc3NbYk1dKXt0aGlzLl9maXJlU2VxdWVuY2VFdmVudChiSSxrLGJLKTt9fX1pZih0aGlzLl9fZ1Ape3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5maXJlRXZlbnQodGhpcy5fX2dQLHUscXguZXZlbnQudHlwZS5EYXRhLFtiSl0pO319LF9fZ1c6ZnVuY3Rpb24oKXt2YXIgYk49dGhpcy5fX2dPLmdldEhhbmRsZXIocXguZXZlbnQuaGFuZGxlci5Gb2N1cyk7dmFyIGJPPWJOLmdldEFjdGl2ZSgpO2lmKCFiT3x8Yk8ub2Zmc2V0V2lkdGg9PTApe2JPPWJOLmdldEZvY3VzKCk7fWlmKCFiT3x8Yk8ub2Zmc2V0V2lkdGg9PTApe2JPPXRoaXMuX19nTy5nZXRXaW5kb3coKS5kb2N1bWVudC5ib2R5O31yZXR1cm4gYk87fSxfaW5pdEtleU9ic2VydmVyOmZ1bmN0aW9uKCl7dGhpcy5fX2dTPXF4LmxhbmcuRnVuY3Rpb24ubGlzdGVuZXIodGhpcy5fX2dYLHRoaXMpO3RoaXMuX19nVj1xeC5sYW5nLkZ1bmN0aW9uLmxpc3RlbmVyKHRoaXMuX19oYSx0aGlzKTt2YXIgRXZlbnQ9cXguYm9tLkV2ZW50O0V2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX19nUSxpLHRoaXMuX19nUyk7RXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fX2dRLG0sdGhpcy5fX2dTKTtFdmVudC5hZGROYXRpdmVMaXN0ZW5lcih0aGlzLl9fZ1Esayx0aGlzLl9fZ1YpO30sX3N0b3BLZXlPYnNlcnZlcjpmdW5jdGlvbigpe3ZhciBFdmVudD1xeC5ib20uRXZlbnQ7RXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fX2dRLGksdGhpcy5fX2dTKTtFdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl9fZ1EsbSx0aGlzLl9fZ1MpO0V2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKHRoaXMuX19nUSxrLHRoaXMuX19nVik7Zm9yKHZhciBiUSBpbiAodGhpcy5fX2dVfHx7fSkpe3ZhciBiUD10aGlzLl9fZ1VbYlFdO0V2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKGJQLnRhcmdldCxrLGJQLmNhbGxiYWNrKTt9ZGVsZXRlICh0aGlzLl9fZ1UpO30sX19nWDpxeC5ldmVudC5HbG9iYWxFcnJvci5vYnNlcnZlTWV0aG9kKHF4LmNvcmUuVmFyaWFudC5zZWxlY3QobCx7Im1zaHRtbCI6ZnVuY3Rpb24oYlIpe2JSPXdpbmRvdy5ldmVudHx8YlI7dmFyIGJVPWJSLmtleUNvZGU7dmFyIGJTPTA7dmFyIGJUPWJSLnR5cGU7aWYoISh0aGlzLl9fZ1JbYlVdPT1tJiZiVD09bSkpe3RoaXMuX2lkZWFsS2V5SGFuZGxlcihiVSxiUyxiVCxiUik7fWlmKGJUPT1tKXtpZih0aGlzLl9pc05vblByaW50YWJsZUtleUNvZGUoYlUpfHx0aGlzLl9lbXVsYXRlS2V5UHJlc3NbYlVdKXt0aGlzLl9pZGVhbEtleUhhbmRsZXIoYlUsYlMsayxiUik7fX10aGlzLl9fZ1JbYlVdPWJUO30sImdlY2tvIjpmdW5jdGlvbihiVil7dmFyIGNhPXRoaXMuX2tleUNvZGVGaXhbYlYua2V5Q29kZV18fGJWLmtleUNvZGU7dmFyIGJYPTA7dmFyIGJZPWJWLnR5cGU7aWYocXguYm9tLmNsaWVudC5QbGF0Zm9ybS5XSU4pe3ZhciBiVz1jYT90aGlzLl9rZXlDb2RlVG9JZGVudGlmaWVyKGNhKTp0aGlzLl9jaGFyQ29kZVRvSWRlbnRpZmllcihiWCk7aWYoISh0aGlzLl9fZ1JbYlddPT1tJiZiWT09bSkpe3RoaXMuX2lkZWFsS2V5SGFuZGxlcihjYSxiWCxiWSxiVik7fXRoaXMuX19nUltiV109Ylk7fWVsc2V7dGhpcy5faWRlYWxLZXlIYW5kbGVyKGNhLGJYLGJZLGJWKTt9dGhpcy5fX2dZKGJWLnRhcmdldCxiWSxjYSk7fSwid2Via2l0IjpmdW5jdGlvbihjYil7dmFyIGNlPTA7dmFyIGNjPTA7dmFyIGNkPWNiLnR5cGU7aWYocXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjw1MjUuMTMpe2lmKGNkPT1pfHxjZD09bSl7Y2U9dGhpcy5fY2hhckNvZGUyS2V5Q29kZVtjYi5jaGFyQ29kZV18fGNiLmtleUNvZGU7fWVsc2V7aWYodGhpcy5fY2hhckNvZGUyS2V5Q29kZVtjYi5jaGFyQ29kZV0pe2NlPXRoaXMuX2NoYXJDb2RlMktleUNvZGVbY2IuY2hhckNvZGVdO31lbHNle2NjPWNiLmNoYXJDb2RlO319dGhpcy5faWRlYWxLZXlIYW5kbGVyKGNlLGNjLGNkLGNiKTt9ZWxzZXtjZT1jYi5rZXlDb2RlO3RoaXMuX2lkZWFsS2V5SGFuZGxlcihjZSxjYyxjZCxjYik7aWYoY2Q9PW0pe2lmKHRoaXMuX2lzTm9uUHJpbnRhYmxlS2V5Q29kZShjZSl8fHRoaXMuX2VtdWxhdGVLZXlQcmVzc1tjZV0pe3RoaXMuX2lkZWFsS2V5SGFuZGxlcihjZSxjYyxrLGNiKTt9fXRoaXMuX19nUltjZV09Y2Q7fX0sIm9wZXJhIjpmdW5jdGlvbihjZil7dGhpcy5fX2dUPWNmLmtleUNvZGU7dGhpcy5faWRlYWxLZXlIYW5kbGVyKGNmLmtleUNvZGUsMCxjZi50eXBlLGNmKTt9fSkpLF9fZ1k6cXguY29yZS5WYXJpYW50LnNlbGVjdChsLHsiZ2Vja28iOmZ1bmN0aW9uKGNnLGNoLGNpKXtpZihjaD09PW0mJihjaT09MzN8fGNpPT0zNHx8Y2k9PTM4fHxjaT09NDApJiZjZy50eXBlPT1KJiZjZy50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT1IJiZjZy5nZXRBdHRyaWJ1dGUoTikhPT14KXtpZighdGhpcy5fX2dVKXt0aGlzLl9fZ1U9e307fXZhciBjaz1xeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LnRvSGFzaENvZGUoY2cpO2lmKHRoaXMuX19nVVtja10pe3JldHVybjt9dmFyIHNlbGY9dGhpczt0aGlzLl9fZ1VbY2tdPXt0YXJnZXQ6Y2csY2FsbGJhY2s6ZnVuY3Rpb24oY2wpe3F4LmJvbS5FdmVudC5zdG9wUHJvcGFnYXRpb24oY2wpO3NlbGYuX19oYShjbCk7fX07dmFyIGNqPXF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QodGhpcy5fX2dVW2NrXS5jYWxsYmFjayk7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKGNnLGssY2opO319LCJkZWZhdWx0IjpudWxsfSksX19oYTpxeC5ldmVudC5HbG9iYWxFcnJvci5vYnNlcnZlTWV0aG9kKHF4LmNvcmUuVmFyaWFudC5zZWxlY3QobCx7Im1zaHRtbCI6ZnVuY3Rpb24oY20pe2NtPXdpbmRvdy5ldmVudHx8Y207aWYodGhpcy5fY2hhckNvZGUyS2V5Q29kZVtjbS5rZXlDb2RlXSl7dGhpcy5faWRlYWxLZXlIYW5kbGVyKHRoaXMuX2NoYXJDb2RlMktleUNvZGVbY20ua2V5Q29kZV0sMCxjbS50eXBlLGNtKTt9ZWxzZXt0aGlzLl9pZGVhbEtleUhhbmRsZXIoMCxjbS5rZXlDb2RlLGNtLnR5cGUsY20pO319LCJnZWNrbyI6ZnVuY3Rpb24oY24pe3ZhciBjcT10aGlzLl9rZXlDb2RlRml4W2NuLmtleUNvZGVdfHxjbi5rZXlDb2RlO3ZhciBjbz1jbi5jaGFyQ29kZTt2YXIgY3A9Y24udHlwZTt0aGlzLl9pZGVhbEtleUhhbmRsZXIoY3EsY28sY3AsY24pO30sIndlYmtpdCI6ZnVuY3Rpb24oY3Ipe2lmKHF4LmJvbS5jbGllbnQuRW5naW5lLlZFUlNJT048NTI1LjEzKXt2YXIgY3U9MDt2YXIgY3M9MDt2YXIgY3Q9Y3IudHlwZTtpZihjdD09aXx8Y3Q9PW0pe2N1PXRoaXMuX2NoYXJDb2RlMktleUNvZGVbY3IuY2hhckNvZGVdfHxjci5rZXlDb2RlO31lbHNle2lmKHRoaXMuX2NoYXJDb2RlMktleUNvZGVbY3IuY2hhckNvZGVdKXtjdT10aGlzLl9jaGFyQ29kZTJLZXlDb2RlW2NyLmNoYXJDb2RlXTt9ZWxzZXtjcz1jci5jaGFyQ29kZTt9fXRoaXMuX2lkZWFsS2V5SGFuZGxlcihjdSxjcyxjdCxjcik7fWVsc2V7aWYodGhpcy5fY2hhckNvZGUyS2V5Q29kZVtjci5rZXlDb2RlXSl7dGhpcy5faWRlYWxLZXlIYW5kbGVyKHRoaXMuX2NoYXJDb2RlMktleUNvZGVbY3Iua2V5Q29kZV0sMCxjci50eXBlLGNyKTt9ZWxzZXt0aGlzLl9pZGVhbEtleUhhbmRsZXIoMCxjci5rZXlDb2RlLGNyLnR5cGUsY3IpO319fSwib3BlcmEiOmZ1bmN0aW9uKGN2KXt2YXIgY3g9Y3Yua2V5Q29kZTt2YXIgY3c9Y3YudHlwZTtpZihjeCE9dGhpcy5fX2dUKXt0aGlzLl9pZGVhbEtleUhhbmRsZXIoMCx0aGlzLl9fZ1QsY3csY3YpO31lbHNle2lmKHRoaXMuX2tleUNvZGVUb0lkZW50aWZpZXJNYXBbY3Yua2V5Q29kZV0pe3RoaXMuX2lkZWFsS2V5SGFuZGxlcihjdi5rZXlDb2RlLDAsY3YudHlwZSxjdik7fWVsc2V7dGhpcy5faWRlYWxLZXlIYW5kbGVyKDAsY3Yua2V5Q29kZSxjdi50eXBlLGN2KTt9fX19KSksX2lkZWFsS2V5SGFuZGxlcjpmdW5jdGlvbihjeSxjeixjQSxjQil7dmFyIGNDO2lmKGN5fHwoIWN5JiYhY3opKXtjQz10aGlzLl9rZXlDb2RlVG9JZGVudGlmaWVyKGN5KTt0aGlzLl9maXJlU2VxdWVuY2VFdmVudChjQixjQSxjQyk7fWVsc2V7Y0M9dGhpcy5fY2hhckNvZGVUb0lkZW50aWZpZXIoY3opO3RoaXMuX2ZpcmVTZXF1ZW5jZUV2ZW50KGNCLGssY0MpO3RoaXMuX2ZpcmVJbnB1dEV2ZW50KGNCLGN6KTt9fSxfc3BlY2lhbENoYXJDb2RlTWFwOns4OmJmLDk6VCwxMzpoLDI3Ok0sMzI6VX0sX2VtdWxhdGVLZXlQcmVzczpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGwseyJtc2h0bWwiOns4OnRydWUsOTp0cnVlfSwid2Via2l0Ijp7ODp0cnVlLDk6dHJ1ZSwyNzp0cnVlfSwiZGVmYXVsdCI6e319KSxfa2V5Q29kZVRvSWRlbnRpZmllck1hcDp7MTY6YmIsMTc6ViwxODpiLDIwOncsMjI0OmJlLDM3OmJwLDM4OmJtLDM5OkksNDA6Ym4sMzM6ZCwzNDpHLDM1Om4sMzY6Uiw0NTpwLDQ2OkIsMTEyOkssMTEzOmJoLDExNDpyLDExNTpXLDExNjpibywxMTc6dCwxMTg6YmssMTE5OnEsMTIwOmJpLDEyMTpGLDEyMjpibCwxMjM6YmMsMTQ0OmosNDQ6YnQsMTQ1OnosMTk6YmEsOTE6cXguYm9tLmNsaWVudC5QbGF0Zm9ybS5NQUM/Tzpiaiw5Mjpiaiw5MzpxeC5ib20uY2xpZW50LlBsYXRmb3JtLk1BQz9POnl9LF9udW1wYWRUb0NoYXJDb2RlOns5NjpnLmNoYXJDb2RlQXQoMCksOTc6QS5jaGFyQ29kZUF0KDApLDk4OkUuY2hhckNvZGVBdCgwKSw5OTpZLmNoYXJDb2RlQXQoMCksMTAwOkwuY2hhckNvZGVBdCgwKSwxMDE6Uy5jaGFyQ29kZUF0KDApLDEwMjpiZC5jaGFyQ29kZUF0KDApLDEwMzp2LmNoYXJDb2RlQXQoMCksMTA0OkQuY2hhckNvZGVBdCgwKSwxMDU6Zi5jaGFyQ29kZUF0KDApLDEwNjpDLmNoYXJDb2RlQXQoMCksMTA3OmJ1LmNoYXJDb2RlQXQoMCksMTA5OmUuY2hhckNvZGVBdCgwKSwxMTA6YmcuY2hhckNvZGVBdCgwKSwxMTE6by5jaGFyQ29kZUF0KDApfSxfY2hhckNvZGVBOmJyLmNoYXJDb2RlQXQoMCksX2NoYXJDb2RlWjpicS5jaGFyQ29kZUF0KDApLF9jaGFyQ29kZTA6Zy5jaGFyQ29kZUF0KDApLF9jaGFyQ29kZTk6Zi5jaGFyQ29kZUF0KDApLF9pc05vblByaW50YWJsZUtleUNvZGU6ZnVuY3Rpb24oY0Qpe3JldHVybiB0aGlzLl9rZXlDb2RlVG9JZGVudGlmaWVyTWFwW2NEXT90cnVlOmZhbHNlO30sX2lzSWRlbnRpZmlhYmxlS2V5Q29kZTpmdW5jdGlvbihjRSl7aWYoY0U+PXRoaXMuX2NoYXJDb2RlQSYmY0U8PXRoaXMuX2NoYXJDb2RlWil7cmV0dXJuIHRydWU7fWlmKGNFPj10aGlzLl9jaGFyQ29kZTAmJmNFPD10aGlzLl9jaGFyQ29kZTkpe3JldHVybiB0cnVlO31pZih0aGlzLl9zcGVjaWFsQ2hhckNvZGVNYXBbY0VdKXtyZXR1cm4gdHJ1ZTt9aWYodGhpcy5fbnVtcGFkVG9DaGFyQ29kZVtjRV0pe3JldHVybiB0cnVlO31pZih0aGlzLl9pc05vblByaW50YWJsZUtleUNvZGUoY0UpKXtyZXR1cm4gdHJ1ZTt9cmV0dXJuIGZhbHNlO30sX2tleUNvZGVUb0lkZW50aWZpZXI6ZnVuY3Rpb24oY0Ype2lmKHRoaXMuX2lzSWRlbnRpZmlhYmxlS2V5Q29kZShjRikpe3ZhciBjRz10aGlzLl9udW1wYWRUb0NoYXJDb2RlW2NGXTtpZihjRyl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY0cpO31yZXR1cm4gKHRoaXMuX2tleUNvZGVUb0lkZW50aWZpZXJNYXBbY0ZdfHx0aGlzLl9zcGVjaWFsQ2hhckNvZGVNYXBbY0ZdfHxTdHJpbmcuZnJvbUNoYXJDb2RlKGNGKSk7fWVsc2V7cmV0dXJuIFE7fX0sX2NoYXJDb2RlVG9JZGVudGlmaWVyOmZ1bmN0aW9uKGNIKXtyZXR1cm4gdGhpcy5fc3BlY2lhbENoYXJDb2RlTWFwW2NIXXx8U3RyaW5nLmZyb21DaGFyQ29kZShjSCkudG9VcHBlckNhc2UoKTt9LF9pZGVudGlmaWVyVG9LZXlDb2RlOmZ1bmN0aW9uKGNJKXtyZXR1cm4gcXguZXZlbnQuaGFuZGxlci5LZXlib2FyZC5faWRlbnRpZmllclRvS2V5Q29kZU1hcFtjSV18fGNJLmNoYXJDb2RlQXQoMCk7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9zdG9wS2V5T2JzZXJ2ZXIoKTt0aGlzLl9fZ1Q9dGhpcy5fX2dPPXRoaXMuX19nUD10aGlzLl9fZ1E9dGhpcy5fX2dSPW51bGw7fSxkZWZlcjpmdW5jdGlvbihjSixjSyl7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmFkZEhhbmRsZXIoY0opO2lmKCFjSi5faWRlbnRpZmllclRvS2V5Q29kZU1hcCl7Y0ouX2lkZW50aWZpZXJUb0tleUNvZGVNYXA9e307Zm9yKHZhciBjTCBpbiBjSy5fa2V5Q29kZVRvSWRlbnRpZmllck1hcCl7Y0ouX2lkZW50aWZpZXJUb0tleUNvZGVNYXBbY0suX2tleUNvZGVUb0lkZW50aWZpZXJNYXBbY0xdXT1wYXJzZUludChjTCwxMCk7fWZvcih2YXIgY0wgaW4gY0suX3NwZWNpYWxDaGFyQ29kZU1hcCl7Y0ouX2lkZW50aWZpZXJUb0tleUNvZGVNYXBbY0suX3NwZWNpYWxDaGFyQ29kZU1hcFtjTF1dPXBhcnNlSW50KGNMLDEwKTt9fWlmKHF4LmNvcmUuVmFyaWFudC5pc1NldChsLGMpKXtjSy5fY2hhckNvZGUyS2V5Q29kZT17MTM6MTMsMjc6Mjd9O31lbHNlIGlmKHF4LmNvcmUuVmFyaWFudC5pc1NldChsLGJzKSl7Y0suX2tleUNvZGVGaXg9ezEyOmNLLl9pZGVudGlmaWVyVG9LZXlDb2RlKGopfTt9ZWxzZSBpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQobCxQKSl7aWYocXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjw1MjUuMTMpe2NLLl9jaGFyQ29kZTJLZXlDb2RlPXs2MzI4OTpjSy5faWRlbnRpZmllclRvS2V5Q29kZShqKSw2MzI3NjpjSy5faWRlbnRpZmllclRvS2V5Q29kZShkKSw2MzI3NzpjSy5faWRlbnRpZmllclRvS2V5Q29kZShHKSw2MzI3NTpjSy5faWRlbnRpZmllclRvS2V5Q29kZShuKSw2MzI3MzpjSy5faWRlbnRpZmllclRvS2V5Q29kZShSKSw2MzIzNDpjSy5faWRlbnRpZmllclRvS2V5Q29kZShicCksNjMyMzI6Y0suX2lkZW50aWZpZXJUb0tleUNvZGUoYm0pLDYzMjM1OmNLLl9pZGVudGlmaWVyVG9LZXlDb2RlKEkpLDYzMjMzOmNLLl9pZGVudGlmaWVyVG9LZXlDb2RlKGJuKSw2MzI3MjpjSy5faWRlbnRpZmllclRvS2V5Q29kZShCKSw2MzMwMjpjSy5faWRlbnRpZmllclRvS2V5Q29kZShwKSw2MzIzNjpjSy5faWRlbnRpZmllclRvS2V5Q29kZShLKSw2MzIzNzpjSy5faWRlbnRpZmllclRvS2V5Q29kZShiaCksNjMyMzg6Y0suX2lkZW50aWZpZXJUb0tleUNvZGUociksNjMyMzk6Y0suX2lkZW50aWZpZXJUb0tleUNvZGUoVyksNjMyNDA6Y0suX2lkZW50aWZpZXJUb0tleUNvZGUoYm8pLDYzMjQxOmNLLl9pZGVudGlmaWVyVG9LZXlDb2RlKHQpLDYzMjQyOmNLLl9pZGVudGlmaWVyVG9LZXlDb2RlKGJrKSw2MzI0MzpjSy5faWRlbnRpZmllclRvS2V5Q29kZShxKSw2MzI0NDpjSy5faWRlbnRpZmllclRvS2V5Q29kZShiaSksNjMyNDU6Y0suX2lkZW50aWZpZXJUb0tleUNvZGUoRiksNjMyNDY6Y0suX2lkZW50aWZpZXJUb0tleUNvZGUoYmwpLDYzMjQ3OmNLLl9pZGVudGlmaWVyVG9LZXlDb2RlKGJjKSw2MzI0ODpjSy5faWRlbnRpZmllclRvS2V5Q29kZShidCksMzpjSy5faWRlbnRpZmllclRvS2V5Q29kZShoKSwxMjpjSy5faWRlbnRpZmllclRvS2V5Q29kZShqKSwxMzpjSy5faWRlbnRpZmllclRvS2V5Q29kZShoKX07fWVsc2V7Y0suX2NoYXJDb2RlMktleUNvZGU9ezEzOjEzLDI3OjI3fTt9fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC5ldmVudC5oYW5kbGVyLkNhcHR1cmUiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXguY29yZS5PYmplY3QsaW1wbGVtZW50OnF4LmV2ZW50LklFdmVudEhhbmRsZXIsc3RhdGljczp7UFJJT1JJVFk6cXguZXZlbnQuUmVnaXN0cmF0aW9uLlBSSU9SSVRZX05PUk1BTCxTVVBQT1JURURfVFlQRVM6e2NhcHR1cmU6dHJ1ZSxsb3NlY2FwdHVyZTp0cnVlfSxUQVJHRVRfQ0hFQ0s6cXguZXZlbnQuSUV2ZW50SGFuZGxlci5UQVJHRVRfRE9NTk9ERSxJR05PUkVfQ0FOX0hBTkRMRTp0cnVlfSxtZW1iZXJzOntjYW5IYW5kbGVFdmVudDpmdW5jdGlvbihiLGMpe30scmVnaXN0ZXJFdmVudDpmdW5jdGlvbihkLGUsZil7fSx1bnJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oZyxoLGkpe319LGRlZmVyOmZ1bmN0aW9uKGope3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5hZGRIYW5kbGVyKGopO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSJhbGlhcyIsaj0iY29weSIsaT0iYmx1ciIsaD0ibW91c2VvdXQiLGc9ImtleWRvd24iLGY9IkN0cmwiLGQ9IlNoaWZ0IixjPSJtb3VzZW1vdmUiLGI9Im1vdmUiLGE9Im1vdXNlb3ZlciIsQT0iQWx0Iix6PSJrZXl1cCIseT0ibW91c2V1cCIseD0iZHJhZ2VuZCIsdz0ib24iLHY9Im1vdXNlZG93biIsdT0icXhEcmFnZ2FibGUiLHQ9ImRyYWciLHM9ImRyb3AiLHI9InF4RHJvcHBhYmxlIixwPSJxeC5ldmVudC5oYW5kbGVyLkRyYWdEcm9wIixxPSJkcm9wcmVxdWVzdCIsbj0iZHJhZ3N0YXJ0IixvPSJkcmFnY2hhbmdlIixsPSJkcmFnbGVhdmUiLG09ImRyYWdvdmVyIjtxeC5DbGFzcy5kZWZpbmUocCx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGltcGxlbWVudDpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLGNvbnN0cnVjdDpmdW5jdGlvbihCKXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3RoaXMuX19qdD1CO3RoaXMuX19qdT1CLmdldFdpbmRvdygpLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDt0aGlzLl9fanQuYWRkTGlzdGVuZXIodGhpcy5fX2p1LHYsdGhpcy5fb25Nb3VzZURvd24sdGhpcyk7dGhpcy5fX2pHKCk7fSxzdGF0aWNzOntQUklPUklUWTpxeC5ldmVudC5SZWdpc3RyYXRpb24uUFJJT1JJVFlfTk9STUFMLFNVUFBPUlRFRF9UWVBFUzp7ZHJhZ3N0YXJ0OjEsZHJhZ2VuZDoxLGRyYWdvdmVyOjEsZHJhZ2xlYXZlOjEsZHJvcDoxLGRyYWc6MSxkcmFnY2hhbmdlOjEsZHJvcHJlcXVlc3Q6MX0sSUdOT1JFX0NBTl9IQU5ETEU6dHJ1ZX0sbWVtYmVyczp7X19qdDpudWxsLF9fanU6bnVsbCxfX2p2Om51bGwsX19qdzpudWxsLF9fang6bnVsbCxfX2p5Om51bGwsX19qejpudWxsLF9fakE6bnVsbCxfX2pCOm51bGwsX19qQzpudWxsLF9fakQ6ZmFsc2UsX19qRTowLF9fakY6MCxjYW5IYW5kbGVFdmVudDpmdW5jdGlvbihDLEQpe30scmVnaXN0ZXJFdmVudDpmdW5jdGlvbihFLEYsRyl7fSx1bnJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oSCxJLEope30sYWRkVHlwZTpmdW5jdGlvbihLKXt0aGlzLl9fanhbS109dHJ1ZTt9LGFkZEFjdGlvbjpmdW5jdGlvbihMKXt0aGlzLl9fanlbTF09dHJ1ZTt9LHN1cHBvcnRzVHlwZTpmdW5jdGlvbihNKXtyZXR1cm4gISF0aGlzLl9fanhbTV07fSxzdXBwb3J0c0FjdGlvbjpmdW5jdGlvbihOKXtyZXR1cm4gISF0aGlzLl9fanlbTl07fSxnZXREYXRhOmZ1bmN0aW9uKE8pe2lmKCF0aGlzLl9fak58fCF0aGlzLl9fanYpe3Rocm93IG5ldyBFcnJvcigiVGhpcyBtZXRob2QgbXVzdCBub3QgYmUgdXNlZCBvdXRzaWRlIHRoZSBkcm9wIGV2ZW50IGxpc3RlbmVyISIpO31pZighdGhpcy5fX2p4W09dKXt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZTogIitPKyIhIik7fWlmKCF0aGlzLl9fakFbT10pe3RoaXMuX19qQj1PO3RoaXMuX19qSShxLHRoaXMuX19qdyx0aGlzLl9fanYsZmFsc2UpO31pZighdGhpcy5fX2pBW09dKXt0aHJvdyBuZXcgRXJyb3IoIlBsZWFzZSB1c2UgYSBkcm9wcmVxdWVzdCBsaXN0ZW5lciB0byB0aGUgZHJhZyBzb3VyY2UgdG8gZmlsbCB0aGUgbWFuYWdlciB3aXRoIGRhdGEhIik7fXJldHVybiB0aGlzLl9fakFbT118fG51bGw7fSxnZXRDdXJyZW50QWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19qQzt9LGFkZERhdGE6ZnVuY3Rpb24oUCxRKXt0aGlzLl9fakFbUF09UTt9LGdldEN1cnJlbnRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19qQjt9LGlzU2Vzc2lvbkFjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fakQ7fSxfX2pHOmZ1bmN0aW9uKCl7dGhpcy5fX2p4PXt9O3RoaXMuX19qeT17fTt0aGlzLl9fano9e307dGhpcy5fX2pBPXt9O30sX19qSDpmdW5jdGlvbigpe2lmKHRoaXMuX19qdz09bnVsbCl7cmV0dXJuO312YXIgVD10aGlzLl9fank7dmFyIFI9dGhpcy5fX2p6O3ZhciBTPW51bGw7aWYodGhpcy5fX2pOKXtpZihSLlNoaWZ0JiZSLkN0cmwmJlQuYWxpYXMpe1M9azt9ZWxzZSBpZihSLlNoaWZ0JiZSLkFsdCYmVC5jb3B5KXtTPWo7fWVsc2UgaWYoUi5TaGlmdCYmVC5tb3ZlKXtTPWI7fWVsc2UgaWYoUi5BbHQmJlQuYWxpYXMpe1M9azt9ZWxzZSBpZihSLkN0cmwmJlQuY29weSl7Uz1qO31lbHNlIGlmKFQubW92ZSl7Uz1iO31lbHNlIGlmKFQuY29weSl7Uz1qO31lbHNlIGlmKFQuYWxpYXMpe1M9azt9fWlmKFMhPXRoaXMuX19qQyl7dGhpcy5fX2pDPVM7dGhpcy5fX2pJKG8sdGhpcy5fX2p3LHRoaXMuX19qdixmYWxzZSk7fX0sX19qSTpmdW5jdGlvbihVLFYsVyxYLFkpe3ZhciBiYj1xeC5ldmVudC5SZWdpc3RyYXRpb247dmFyIGJhPWJiLmNyZWF0ZUV2ZW50KFUscXguZXZlbnQudHlwZS5EcmFnLFtYLFldKTtpZihWIT09Vyl7YmEuc2V0UmVsYXRlZFRhcmdldChXKTt9cmV0dXJuIGJiLmRpc3BhdGNoRXZlbnQoVixiYSk7fSxfX2pKOmZ1bmN0aW9uKGJjKXt3aGlsZShiYyYmYmMubm9kZVR5cGU9PTEpe2lmKGJjLmdldEF0dHJpYnV0ZSh1KT09dyl7cmV0dXJuIGJjO31iYz1iYy5wYXJlbnROb2RlO31yZXR1cm4gbnVsbDt9LF9faks6ZnVuY3Rpb24oYmQpe3doaWxlKGJkJiZiZC5ub2RlVHlwZT09MSl7aWYoYmQuZ2V0QXR0cmlidXRlKHIpPT13KXtyZXR1cm4gYmQ7fWJkPWJkLnBhcmVudE5vZGU7fXJldHVybiBudWxsO30sX19qTDpmdW5jdGlvbigpe3RoaXMuX19qdz1udWxsO3RoaXMuX19qdC5yZW1vdmVMaXN0ZW5lcih0aGlzLl9fanUsYyx0aGlzLl9vbk1vdXNlTW92ZSx0aGlzLHRydWUpO3RoaXMuX19qdC5yZW1vdmVMaXN0ZW5lcih0aGlzLl9fanUseSx0aGlzLl9vbk1vdXNlVXAsdGhpcyx0cnVlKTtxeC5ldmVudC5SZWdpc3RyYXRpb24ucmVtb3ZlTGlzdGVuZXIod2luZG93LGksdGhpcy5fb25XaW5kb3dCbHVyLHRoaXMpO3RoaXMuX19qRygpO30sX19qTTpmdW5jdGlvbigpe2lmKHRoaXMuX19qRCl7dGhpcy5fX2p0LnJlbW92ZUxpc3RlbmVyKHRoaXMuX19qdSxhLHRoaXMuX29uTW91c2VPdmVyLHRoaXMsdHJ1ZSk7dGhpcy5fX2p0LnJlbW92ZUxpc3RlbmVyKHRoaXMuX19qdSxoLHRoaXMuX29uTW91c2VPdXQsdGhpcyx0cnVlKTt0aGlzLl9fanQucmVtb3ZlTGlzdGVuZXIodGhpcy5fX2p1LGcsdGhpcy5fb25LZXlEb3duLHRoaXMsdHJ1ZSk7dGhpcy5fX2p0LnJlbW92ZUxpc3RlbmVyKHRoaXMuX19qdSx6LHRoaXMuX29uS2V5VXAsdGhpcyx0cnVlKTt0aGlzLl9fakkoeCx0aGlzLl9fancsdGhpcy5fX2p2LGZhbHNlKTt0aGlzLl9fakQ9ZmFsc2U7fXRoaXMuX19qTj1mYWxzZTt0aGlzLl9fanY9bnVsbDt0aGlzLl9fakwoKTt9LF9fak46ZmFsc2UsX29uV2luZG93Qmx1cjpmdW5jdGlvbihlKXt0aGlzLl9fak0oKTt9LF9vbktleURvd246ZnVuY3Rpb24oZSl7dmFyIGJlPWUuZ2V0S2V5SWRlbnRpZmllcigpO3N3aXRjaChiZSl7Y2FzZSBBOmNhc2UgZjpjYXNlIGQ6aWYoIXRoaXMuX19qeltiZV0pe3RoaXMuX19qeltiZV09dHJ1ZTt0aGlzLl9fakgoKTt9fX0sX29uS2V5VXA6ZnVuY3Rpb24oZSl7dmFyIGJmPWUuZ2V0S2V5SWRlbnRpZmllcigpO3N3aXRjaChiZil7Y2FzZSBBOmNhc2UgZjpjYXNlIGQ6aWYodGhpcy5fX2p6W2JmXSl7dGhpcy5fX2p6W2JmXT1mYWxzZTt0aGlzLl9fakgoKTt9fX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX19qRCl7cmV0dXJuO312YXIgYmc9dGhpcy5fX2pKKGUuZ2V0VGFyZ2V0KCkpO2lmKGJnKXt0aGlzLl9fakU9ZS5nZXREb2N1bWVudExlZnQoKTt0aGlzLl9fakY9ZS5nZXREb2N1bWVudFRvcCgpO3RoaXMuX19qdz1iZzt0aGlzLl9fanQuYWRkTGlzdGVuZXIodGhpcy5fX2p1LGMsdGhpcy5fb25Nb3VzZU1vdmUsdGhpcyx0cnVlKTt0aGlzLl9fanQuYWRkTGlzdGVuZXIodGhpcy5fX2p1LHksdGhpcy5fb25Nb3VzZVVwLHRoaXMsdHJ1ZSk7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmFkZExpc3RlbmVyKHdpbmRvdyxpLHRoaXMuX29uV2luZG93Qmx1cix0aGlzKTt9fSxfb25Nb3VzZVVwOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX19qTil7dGhpcy5fX2pJKHMsdGhpcy5fX2p2LHRoaXMuX19qdyxmYWxzZSxlKTt9aWYodGhpcy5fX2pEKXtlLnN0b3BQcm9wYWdhdGlvbigpO310aGlzLl9fak0oKTt9LF9vbk1vdXNlTW92ZTpmdW5jdGlvbihlKXtpZih0aGlzLl9fakQpe2lmKCF0aGlzLl9fakkodCx0aGlzLl9fancsdGhpcy5fX2p2LHRydWUsZSkpe3RoaXMuX19qTSgpO319ZWxzZXtpZihNYXRoLmFicyhlLmdldERvY3VtZW50TGVmdCgpLXRoaXMuX19qRSk+M3x8TWF0aC5hYnMoZS5nZXREb2N1bWVudFRvcCgpLXRoaXMuX19qRik+Myl7aWYodGhpcy5fX2pJKG4sdGhpcy5fX2p3LHRoaXMuX19qdix0cnVlLGUpKXt0aGlzLl9fakQ9dHJ1ZTt0aGlzLl9fanQuYWRkTGlzdGVuZXIodGhpcy5fX2p1LGEsdGhpcy5fb25Nb3VzZU92ZXIsdGhpcyx0cnVlKTt0aGlzLl9fanQuYWRkTGlzdGVuZXIodGhpcy5fX2p1LGgsdGhpcy5fb25Nb3VzZU91dCx0aGlzLHRydWUpO3RoaXMuX19qdC5hZGRMaXN0ZW5lcih0aGlzLl9fanUsZyx0aGlzLl9vbktleURvd24sdGhpcyx0cnVlKTt0aGlzLl9fanQuYWRkTGlzdGVuZXIodGhpcy5fX2p1LHosdGhpcy5fb25LZXlVcCx0aGlzLHRydWUpO3ZhciBiaD10aGlzLl9fano7YmguQ3RybD1lLmlzQ3RybFByZXNzZWQoKTtiaC5TaGlmdD1lLmlzU2hpZnRQcmVzc2VkKCk7YmguQWx0PWUuaXNBbHRQcmVzc2VkKCk7dGhpcy5fX2pIKCk7fWVsc2V7dGhpcy5fX2pJKHgsdGhpcy5fX2p3LHRoaXMuX19qdixmYWxzZSk7dGhpcy5fX2pMKCk7fX19fSxfb25Nb3VzZU92ZXI6ZnVuY3Rpb24oZSl7dmFyIGJpPWUuZ2V0VGFyZ2V0KCk7dmFyIGJqPXRoaXMuX19qSyhiaSk7aWYoYmomJmJqIT10aGlzLl9fanYpe3RoaXMuX19qTj10aGlzLl9fakkobSxiaix0aGlzLl9fancsdHJ1ZSxlKTt0aGlzLl9fanY9Ymo7dGhpcy5fX2pIKCk7fX0sX29uTW91c2VPdXQ6ZnVuY3Rpb24oZSl7dmFyIGJsPXRoaXMuX19qSyhlLmdldFRhcmdldCgpKTt2YXIgYms9dGhpcy5fX2pLKGUuZ2V0UmVsYXRlZFRhcmdldCgpKTtpZihibCYmYmwhPT1iayYmYmw9PXRoaXMuX19qdil7dGhpcy5fX2pJKGwsdGhpcy5fX2p2LGJrLGZhbHNlLGUpO3RoaXMuX19qdj1udWxsO3RoaXMuX19qTj1mYWxzZTtxeC5ldmVudC5UaW1lci5vbmNlKHRoaXMuX19qSCx0aGlzLDApO319fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19qdz10aGlzLl9fanY9dGhpcy5fX2p0PXRoaXMuX19qdT10aGlzLl9fang9dGhpcy5fX2p5PXRoaXMuX19qej10aGlzLl9fakE9bnVsbDt9LGRlZmVyOmZ1bmN0aW9uKGJtKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uYWRkSGFuZGxlcihibSk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGM9InF4LmV2ZW50LmhhbmRsZXIuQXBwZWFyIixiPSJkaXNhcHBlYXIiLGE9ImFwcGVhciI7cXguQ2xhc3MuZGVmaW5lKGMse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6cXguZXZlbnQuSUV2ZW50SGFuZGxlcixjb25zdHJ1Y3Q6ZnVuY3Rpb24oZCl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9fY2w9ZDt0aGlzLl9fY209e307cXguZXZlbnQuaGFuZGxlci5BcHBlYXIuX19jblt0aGlzLiQkaGFzaF09dGhpczt9LHN0YXRpY3M6e1BSSU9SSVRZOnF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5QUklPUklUWV9OT1JNQUwsU1VQUE9SVEVEX1RZUEVTOnthcHBlYXI6dHJ1ZSxkaXNhcHBlYXI6dHJ1ZX0sVEFSR0VUX0NIRUNLOnF4LmV2ZW50LklFdmVudEhhbmRsZXIuVEFSR0VUX0RPTU5PREUsSUdOT1JFX0NBTl9IQU5ETEU6dHJ1ZSxfX2NuOnt9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fY247Zm9yKHZhciBmIGluIGUpe2VbZl0ucmVmcmVzaCgpO319fSxtZW1iZXJzOntfX2NsOm51bGwsX19jbTpudWxsLGNhbkhhbmRsZUV2ZW50OmZ1bmN0aW9uKGcsaCl7fSxyZWdpc3RlckV2ZW50OmZ1bmN0aW9uKGksaixrKXt2YXIgbD1xeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LnRvSGFzaENvZGUoaSkrajt2YXIgbT10aGlzLl9fY207aWYobSYmIW1bbF0pe21bbF09aTtpLiQkZGlzcGxheWVkPWkub2Zmc2V0V2lkdGg+MDt9fSx1bnJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24obixvLHApe3ZhciBxPXF4LmNvcmUuT2JqZWN0UmVnaXN0cnkudG9IYXNoQ29kZShuKStvO3ZhciByPXRoaXMuX19jbTtpZighcil7cmV0dXJuO31pZihyW3FdKXtkZWxldGUgcltxXTt9fSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5fX2NtO3ZhciB3O2Zvcih2YXIgdSBpbiB2KXt3PXZbdV07dmFyIHM9dy5vZmZzZXRXaWR0aD4wO2lmKCghIXcuJCRkaXNwbGF5ZWQpIT09cyl7dy4kJGRpc3BsYXllZD1zO3ZhciB0PXF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5jcmVhdGVFdmVudChzP2E6Yik7dGhpcy5fX2NsLmRpc3BhdGNoRXZlbnQodyx0KTt9fX19LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX2NsPXRoaXMuX19jbT1udWxsO2RlbGV0ZSBxeC5ldmVudC5oYW5kbGVyLkFwcGVhci5fX2NuW3RoaXMuJCRoYXNoXTt9LGRlZmVyOmZ1bmN0aW9uKHgpe3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5hZGRIYW5kbGVyKHgpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJhYnN0cmFjdCIsYT0icXguZXZlbnQuZGlzcGF0Y2guQWJzdHJhY3RCdWJibGluZyI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6cXguZXZlbnQuSUV2ZW50RGlzcGF0Y2hlcix0eXBlOmIsY29uc3RydWN0OmZ1bmN0aW9uKGMpe3RoaXMuX21hbmFnZXI9Yzt9LG1lbWJlcnM6e19nZXRQYXJlbnQ6ZnVuY3Rpb24oZCl7dGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIGltcGxlbWVudGF0aW9uIik7fSxjYW5EaXNwYXRjaEV2ZW50OmZ1bmN0aW9uKGUsZXZlbnQsZil7cmV0dXJuIGV2ZW50LmdldEJ1YmJsZXMoKTt9LGRpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oZyxldmVudCxoKXt2YXIgcGFyZW50PWc7dmFyIHM9dGhpcy5fbWFuYWdlcjt2YXIgcCx3O3ZhciBuO3ZhciByLHU7dmFyIHQ7dmFyIHY9W107cD1zLmdldExpc3RlbmVycyhnLGgsdHJ1ZSk7dz1zLmdldExpc3RlbmVycyhnLGgsZmFsc2UpO2lmKHApe3YucHVzaChwKTt9aWYodyl7di5wdXNoKHcpO312YXIgcGFyZW50PXRoaXMuX2dldFBhcmVudChnKTt2YXIgbD1bXTt2YXIgaz1bXTt2YXIgbT1bXTt2YXIgcT1bXTt3aGlsZShwYXJlbnQhPW51bGwpe3A9cy5nZXRMaXN0ZW5lcnMocGFyZW50LGgsdHJ1ZSk7aWYocCl7bS5wdXNoKHApO3EucHVzaChwYXJlbnQpO313PXMuZ2V0TGlzdGVuZXJzKHBhcmVudCxoLGZhbHNlKTtpZih3KXtsLnB1c2godyk7ay5wdXNoKHBhcmVudCk7fXBhcmVudD10aGlzLl9nZXRQYXJlbnQocGFyZW50KTt9ZXZlbnQuc2V0RXZlbnRQaGFzZShxeC5ldmVudC50eXBlLkV2ZW50LkNBUFRVUklOR19QSEFTRSk7Zm9yKHZhciBpPW0ubGVuZ3RoLTE7aT49MDtpLS0pe3Q9cVtpXTtldmVudC5zZXRDdXJyZW50VGFyZ2V0KHQpO249bVtpXTtmb3IodmFyIGo9MCxvPW4ubGVuZ3RoO2o8bztqKyspe3I9bltqXTt1PXIuY29udGV4dHx8dDtyLmhhbmRsZXIuY2FsbCh1LGV2ZW50KTt9aWYoZXZlbnQuZ2V0UHJvcGFnYXRpb25TdG9wcGVkKCkpe3JldHVybjt9fWV2ZW50LnNldEV2ZW50UGhhc2UocXguZXZlbnQudHlwZS5FdmVudC5BVF9UQVJHRVQpO2V2ZW50LnNldEN1cnJlbnRUYXJnZXQoZyk7Zm9yKHZhciBpPTAseD12Lmxlbmd0aDtpPHg7aSsrKXtuPXZbaV07Zm9yKHZhciBqPTAsbz1uLmxlbmd0aDtqPG87aisrKXtyPW5bal07dT1yLmNvbnRleHR8fGc7ci5oYW5kbGVyLmNhbGwodSxldmVudCk7fWlmKGV2ZW50LmdldFByb3BhZ2F0aW9uU3RvcHBlZCgpKXtyZXR1cm47fX1ldmVudC5zZXRFdmVudFBoYXNlKHF4LmV2ZW50LnR5cGUuRXZlbnQuQlVCQkxJTkdfUEhBU0UpO2Zvcih2YXIgaT0wLHg9bC5sZW5ndGg7aTx4O2krKyl7dD1rW2ldO2V2ZW50LnNldEN1cnJlbnRUYXJnZXQodCk7bj1sW2ldO2Zvcih2YXIgaj0wLG89bi5sZW5ndGg7ajxvO2orKyl7cj1uW2pdO3U9ci5jb250ZXh0fHx0O3IuaGFuZGxlci5jYWxsKHUsZXZlbnQpO31pZihldmVudC5nZXRQcm9wYWdhdGlvblN0b3BwZWQoKSl7cmV0dXJuO319fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC5ldmVudC5kaXNwYXRjaC5Eb21CdWJibGluZyI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC5ldmVudC5kaXNwYXRjaC5BYnN0cmFjdEJ1YmJsaW5nLHN0YXRpY3M6e1BSSU9SSVRZOnF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5QUklPUklUWV9OT1JNQUx9LG1lbWJlcnM6e19nZXRQYXJlbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIGIucGFyZW50Tm9kZTt9LGNhbkRpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oYyxldmVudCxkKXtyZXR1cm4gYy5ub2RlVHlwZSE9PXVuZGVmaW5lZCYmZXZlbnQuZ2V0QnViYmxlcygpO319LGRlZmVyOmZ1bmN0aW9uKGUpe3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5hZGREaXNwYXRjaGVyKGUpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBxPSJtc2h0bWwiLHA9IiIsbz0icXguY2xpZW50IixuPSIgIixtPSI+IixrPSI8IixoPSI9JyIsZz0ibm9uZSIsZj0iPElOUFVUIFRZUEU9J1JBRElPJyBOQU1FPSdSQURJT1RFU1QnIFZBTFVFPSdTZWNvbmQgQ2hvaWNlJz4iLGQ9InF4LmJvbS5FbGVtZW50IixhPSInICIsYz0iZGl2IixiPSI+PC8iO3F4LkNsYXNzLmRlZmluZShkLHtzdGF0aWNzOntfX2tJOnsib25sb2FkIjp0cnVlLCJvbnByb3BlcnR5Y2hhbmdlIjp0cnVlLCJvbmlucHV0Ijp0cnVlLCJvbmNoYW5nZSI6dHJ1ZSwibmFtZSI6dHJ1ZSwidHlwZSI6dHJ1ZSwiY2hlY2tlZCI6dHJ1ZSwiZGlzYWJsZWQiOnRydWV9LF9fa0o6e30sX19rSzp7fSxhbGxvd0NyZWF0aW9uV2l0aE1hcmt1cDpmdW5jdGlvbihyKXtpZighcil7cj13aW5kb3c7fXZhciBzPXIubG9jYXRpb24uaHJlZjtpZihxeC5ib20uRWxlbWVudC5fX2tLW3NdPT11bmRlZmluZWQpe3RyeXtyLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZik7cXguYm9tLkVsZW1lbnQuX19rS1tzXT10cnVlO31jYXRjaChlKXtxeC5ib20uRWxlbWVudC5fX2tLW3NdPWZhbHNlO319cmV0dXJuIHF4LmJvbS5FbGVtZW50Ll9fa0tbc107fSxnZXRIZWxwZXJFbGVtZW50OmZ1bmN0aW9uKHQpe2lmKCF0KXt0PXdpbmRvdzt9dmFyIHY9dC5sb2NhdGlvbi5ocmVmO2lmKCFxeC5ib20uRWxlbWVudC5fX2tKW3ZdKXt2YXIgdT1xeC5ib20uRWxlbWVudC5fX2tKW3ZdPXQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjKTtpZihxeC5ib20uY2xpZW50LkVuZ2luZS5XRUJLSVQpe3Uuc3R5bGUuZGlzcGxheT1nO3QuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh1KTt9fXJldHVybiBxeC5ib20uRWxlbWVudC5fX2tKW3ZdO30sY3JlYXRlOmZ1bmN0aW9uKG5hbWUsdyx4KXtpZigheCl7eD13aW5kb3c7fWlmKCFuYW1lKXt0aHJvdyBuZXcgRXJyb3IoIlRoZSB0YWcgbmFtZSBpcyBtaXNzaW5nISIpO312YXIgej10aGlzLl9fa0k7dmFyIHk9cDtmb3IodmFyIEIgaW4gdyl7aWYoeltCXSl7eSs9QitoK3dbQl0rYTt9fXZhciBDO2lmKHkhPXApe2lmKHF4LmJvbS5FbGVtZW50LmFsbG93Q3JlYXRpb25XaXRoTWFya3VwKHgpKXtDPXguZG9jdW1lbnQuY3JlYXRlRWxlbWVudChrK25hbWUrbit5K20pO31lbHNle3ZhciBBPXF4LmJvbS5FbGVtZW50LmdldEhlbHBlckVsZW1lbnQoeCk7QS5pbm5lckhUTUw9aytuYW1lK24reStiK25hbWUrbTtDPUEuZmlyc3RDaGlsZDt9fWVsc2V7Qz14LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSk7fWZvcih2YXIgQiBpbiB3KXtpZigheltCXSl7cXguYm9tLmVsZW1lbnQuQXR0cmlidXRlLnNldChDLEIsd1tCXSk7fX1yZXR1cm4gQzt9LGVtcHR5OmZ1bmN0aW9uKEQpe3JldHVybiBELmlubmVySFRNTD1wO30sYWRkTGlzdGVuZXI6ZnVuY3Rpb24oRSxGLEcsc2VsZixIKXtyZXR1cm4gcXguZXZlbnQuUmVnaXN0cmF0aW9uLmFkZExpc3RlbmVyKEUsRixHLHNlbGYsSCk7fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihJLEosSyxzZWxmLEwpe3JldHVybiBxeC5ldmVudC5SZWdpc3RyYXRpb24ucmVtb3ZlTGlzdGVuZXIoSSxKLEssc2VsZixMKTt9LHJlbW92ZUxpc3RlbmVyQnlJZDpmdW5jdGlvbihNLE4pe3JldHVybiBxeC5ldmVudC5SZWdpc3RyYXRpb24ucmVtb3ZlTGlzdGVuZXJCeUlkKE0sTik7fSxoYXNMaXN0ZW5lcjpmdW5jdGlvbihPLFAsUSl7cmV0dXJuIHF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5oYXNMaXN0ZW5lcihPLFAsUSk7fSxmb2N1czpmdW5jdGlvbihSKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZ2V0TWFuYWdlcihSKS5nZXRIYW5kbGVyKHF4LmV2ZW50LmhhbmRsZXIuRm9jdXMpLmZvY3VzKFIpO30sYmx1cjpmdW5jdGlvbihTKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZ2V0TWFuYWdlcihTKS5nZXRIYW5kbGVyKHF4LmV2ZW50LmhhbmRsZXIuRm9jdXMpLmJsdXIoUyk7fSxhY3RpdmF0ZTpmdW5jdGlvbihUKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZ2V0TWFuYWdlcihUKS5nZXRIYW5kbGVyKHF4LmV2ZW50LmhhbmRsZXIuRm9jdXMpLmFjdGl2YXRlKFQpO30sZGVhY3RpdmF0ZTpmdW5jdGlvbihVKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZ2V0TWFuYWdlcihVKS5nZXRIYW5kbGVyKHF4LmV2ZW50LmhhbmRsZXIuRm9jdXMpLmRlYWN0aXZhdGUoVSk7fSxjYXB0dXJlOmZ1bmN0aW9uKFYsVyl7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmdldE1hbmFnZXIoVikuZ2V0RGlzcGF0Y2hlcihxeC5ldmVudC5kaXNwYXRjaC5Nb3VzZUNhcHR1cmUpLmFjdGl2YXRlQ2FwdHVyZShWLFcpO30scmVsZWFzZUNhcHR1cmU6ZnVuY3Rpb24oWCl7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmdldE1hbmFnZXIoWCkuZ2V0RGlzcGF0Y2hlcihxeC5ldmVudC5kaXNwYXRjaC5Nb3VzZUNhcHR1cmUpLnJlbGVhc2VDYXB0dXJlKFgpO30sbWF0Y2hlc1NlbGVjdG9yOmZ1bmN0aW9uKFksYmEpe2lmKGJhKXtyZXR1cm4gcXguYm9tLlNlbGVjdG9yLnF1ZXJ5KGJhLFkucGFyZW50Tm9kZSkubGVuZ3RoPjA7fWVsc2V7cmV0dXJuIGZhbHNlO319LGNsb25lOmZ1bmN0aW9uKGJiLGJjKXt2YXIgYmY7aWYoYmN8fChxeC5jb3JlLlZhcmlhbnQuaXNTZXQobyxxKSYmIXF4LnhtbC5Eb2N1bWVudC5pc1htbERvY3VtZW50KGJiKSkpe3ZhciBiaj1xeC5ldmVudC5SZWdpc3RyYXRpb24uZ2V0TWFuYWdlcihiYik7dmFyIGJkPXF4LmRvbS5IaWVyYXJjaHkuZ2V0RGVzY2VuZGFudHMoYmIpO2JkLnB1c2goYmIpO31pZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQobyxxKSl7Zm9yKHZhciBpPTAsbD1iZC5sZW5ndGg7aTxsO2krKyl7YmoudG9nZ2xlQXR0YWNoZWRFdmVudHMoYmRbaV0sZmFsc2UpO319dmFyIGJmPWJiLmNsb25lTm9kZSh0cnVlKTtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQobyxxKSl7Zm9yKHZhciBpPTAsbD1iZC5sZW5ndGg7aTxsO2krKyl7YmoudG9nZ2xlQXR0YWNoZWRFdmVudHMoYmRbaV0sdHJ1ZSk7fX1pZihiYz09PXRydWUpe3ZhciBibT1xeC5kb20uSGllcmFyY2h5LmdldERlc2NlbmRhbnRzKGJmKTtibS5wdXNoKGJmKTt2YXIgYmUsYmgsYmwsYmc7Zm9yKHZhciBpPTAsYms9YmQubGVuZ3RoO2k8Yms7aSsrKXtibD1iZFtpXTtiZT1iai5zZXJpYWxpemVMaXN0ZW5lcnMoYmwpO2lmKGJlLmxlbmd0aD4wKXtiaD1ibVtpXTtmb3IodmFyIGo9MCxiaT1iZS5sZW5ndGg7ajxiaTtqKyspe2JnPWJlW2pdO2JqLmFkZExpc3RlbmVyKGJoLGJnLnR5cGUsYmcuaGFuZGxlcixiZy5zZWxmLGJnLmNhcHR1cmUpO319fX1yZXR1cm4gYmY7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC5ldmVudC50eXBlLk5hdGl2ZSI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC5ldmVudC50eXBlLkV2ZW50LG1lbWJlcnM6e2luaXQ6ZnVuY3Rpb24oYixjLGQsZSxmKXtxeC5ldmVudC50eXBlLkV2ZW50LnByb3RvdHlwZS5pbml0LmNhbGwodGhpcyxlLGYpO3RoaXMuX3RhcmdldD1jfHxxeC5ib20uRXZlbnQuZ2V0VGFyZ2V0KGIpO3RoaXMuX3JlbGF0ZWRUYXJnZXQ9ZHx8cXguYm9tLkV2ZW50LmdldFJlbGF0ZWRUYXJnZXQoYik7aWYoYi50aW1lU3RhbXApe3RoaXMuX3RpbWVTdGFtcD1iLnRpbWVTdGFtcDt9dGhpcy5fbmF0aXZlPWI7dGhpcy5fcmV0dXJuVmFsdWU9bnVsbDtyZXR1cm4gdGhpczt9LGNsb25lOmZ1bmN0aW9uKGcpe3ZhciBoPXF4LmV2ZW50LnR5cGUuRXZlbnQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyxnKTt2YXIgaT17fTtoLl9uYXRpdmU9dGhpcy5fY2xvbmVOYXRpdmVFdmVudCh0aGlzLl9uYXRpdmUsaSk7aC5fcmV0dXJuVmFsdWU9dGhpcy5fcmV0dXJuVmFsdWU7cmV0dXJuIGg7fSxfY2xvbmVOYXRpdmVFdmVudDpmdW5jdGlvbihqLGspe2sucHJldmVudERlZmF1bHQ9cXgubGFuZy5GdW5jdGlvbi5lbXB0eTtyZXR1cm4gazt9LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7cXguZXZlbnQudHlwZS5FdmVudC5wcm90b3R5cGUucHJldmVudERlZmF1bHQuY2FsbCh0aGlzKTtxeC5ib20uRXZlbnQucHJldmVudERlZmF1bHQodGhpcy5fbmF0aXZlKTt9LGdldE5hdGl2ZUV2ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25hdGl2ZTt9LHNldFJldHVyblZhbHVlOmZ1bmN0aW9uKGwpe3RoaXMuX3JldHVyblZhbHVlPWw7fSxnZXRSZXR1cm5WYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXR1cm5WYWx1ZTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX25hdGl2ZT10aGlzLl9yZXR1cm5WYWx1ZT1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJxeC5jbGllbnQiLGE9InF4LmJvbS5WaWV3cG9ydCI7cXguQ2xhc3MuZGVmaW5lKGEse3N0YXRpY3M6e2dldFdpZHRoOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoYix7Im9wZXJhIjpmdW5jdGlvbihjKXtpZihxeC5ib20uY2xpZW50LkVuZ2luZS5WRVJTSU9OPDkuNSl7cmV0dXJuIChjfHx3aW5kb3cpLmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7fWVsc2V7dmFyIGQ9KGN8fHdpbmRvdykuZG9jdW1lbnQ7cmV0dXJuIHF4LmJvbS5Eb2N1bWVudC5pc1N0YW5kYXJkTW9kZShjKT9kLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDpkLmJvZHkuY2xpZW50V2lkdGg7fX0sIndlYmtpdCI6ZnVuY3Rpb24oZSl7aWYocXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjw1MjMuMTUpe3JldHVybiAoZXx8d2luZG93KS5pbm5lcldpZHRoO31lbHNle3ZhciBmPShlfHx3aW5kb3cpLmRvY3VtZW50O3JldHVybiBxeC5ib20uRG9jdW1lbnQuaXNTdGFuZGFyZE1vZGUoZSk/Zi5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg6Zi5ib2R5LmNsaWVudFdpZHRoO319LCJkZWZhdWx0IjpmdW5jdGlvbihnKXt2YXIgaD0oZ3x8d2luZG93KS5kb2N1bWVudDtyZXR1cm4gcXguYm9tLkRvY3VtZW50LmlzU3RhbmRhcmRNb2RlKGcpP2guZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOmguYm9keS5jbGllbnRXaWR0aDt9fSksZ2V0SGVpZ2h0OnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoYix7Im9wZXJhIjpmdW5jdGlvbihpKXtpZihxeC5ib20uY2xpZW50LkVuZ2luZS5WRVJTSU9OPDkuNSl7cmV0dXJuIChpfHx3aW5kb3cpLmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O31lbHNle3ZhciBqPShpfHx3aW5kb3cpLmRvY3VtZW50O3JldHVybiBxeC5ib20uRG9jdW1lbnQuaXNTdGFuZGFyZE1vZGUoaSk/ai5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OmouYm9keS5jbGllbnRIZWlnaHQ7fX0sIndlYmtpdCI6ZnVuY3Rpb24oayl7aWYocXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjw1MjMuMTUpe3JldHVybiAoa3x8d2luZG93KS5pbm5lckhlaWdodDt9ZWxzZXt2YXIgbD0oa3x8d2luZG93KS5kb2N1bWVudDtyZXR1cm4gcXguYm9tLkRvY3VtZW50LmlzU3RhbmRhcmRNb2RlKGspP2wuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDpsLmJvZHkuY2xpZW50SGVpZ2h0O319LCJkZWZhdWx0IjpmdW5jdGlvbihtKXt2YXIgbj0obXx8d2luZG93KS5kb2N1bWVudDtyZXR1cm4gcXguYm9tLkRvY3VtZW50LmlzU3RhbmRhcmRNb2RlKG0pP24uZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDpuLmJvZHkuY2xpZW50SGVpZ2h0O319KSxnZXRTY3JvbGxMZWZ0OnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoYix7Im1zaHRtbCI6ZnVuY3Rpb24obyl7dmFyIHA9KG98fHdpbmRvdykuZG9jdW1lbnQ7cmV0dXJuIHAuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnR8fHAuYm9keS5zY3JvbGxMZWZ0O30sImRlZmF1bHQiOmZ1bmN0aW9uKHEpe3JldHVybiAocXx8d2luZG93KS5wYWdlWE9mZnNldDt9fSksZ2V0U2Nyb2xsVG9wOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoYix7Im1zaHRtbCI6ZnVuY3Rpb24ocil7dmFyIHM9KHJ8fHdpbmRvdykuZG9jdW1lbnQ7cmV0dXJuIHMuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8cy5ib2R5LnNjcm9sbFRvcDt9LCJkZWZhdWx0IjpmdW5jdGlvbih0KXtyZXR1cm4gKHR8fHdpbmRvdykucGFnZVlPZmZzZXQ7fX0pLGdldE9yaWVudGF0aW9uOmZ1bmN0aW9uKHUpe3ZhciB2PSh1fHx3aW5kb3cpLm9yaWVudGF0aW9uO2lmKHY9PW51bGwpe3Y9dGhpcy5nZXRXaWR0aCh1KT50aGlzLmdldEhlaWdodCh1KT85MDowO31yZXR1cm4gdjt9LGlzTGFuZHNjYXBlOmZ1bmN0aW9uKHcpe3JldHVybiBNYXRoLmFicyh0aGlzLmdldE9yaWVudGF0aW9uKHcpKT09OTA7fSxpc1BvcnRyYWl0OmZ1bmN0aW9uKHgpe3ZhciB5PXRoaXMuZ2V0T3JpZW50YXRpb24oeCk7cmV0dXJuICh5PT0wfHx5PT0xODApO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZj0iQ1NTMUNvbXBhdCIsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDtoZWlnaHQ6MDt3aWR0aDoxIixkPSJxeC5ib20uRG9jdW1lbnQiLGM9IjFweCIsYj0icXguY2xpZW50IixhPSJkaXYiO3F4LkNsYXNzLmRlZmluZShkLHtzdGF0aWNzOntpc1F1aXJrc01vZGU6cXguY29yZS5WYXJpYW50LnNlbGVjdChiLHsibXNodG1sIjpmdW5jdGlvbihnKXtpZihxeC5ib20uY2xpZW50LkVuZ2luZS5WRVJTSU9OPj04KXtyZXR1cm4gKGd8fHdpbmRvdykuZG9jdW1lbnQuZG9jdW1lbnRNb2RlPT09NTt9ZWxzZXtyZXR1cm4gKGd8fHdpbmRvdykuZG9jdW1lbnQuY29tcGF0TW9kZSE9PWY7fX0sIndlYmtpdCI6ZnVuY3Rpb24oaCl7aWYoZG9jdW1lbnQuY29tcGF0TW9kZT09PXVuZGVmaW5lZCl7dmFyIGk9KGh8fHdpbmRvdykuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChhKTtpLnN0eWxlLmNzc1RleHQ9ZTtyZXR1cm4gaS5zdHlsZS53aWR0aD09PWM/dHJ1ZTpmYWxzZTt9ZWxzZXtyZXR1cm4gKGh8fHdpbmRvdykuZG9jdW1lbnQuY29tcGF0TW9kZSE9PWY7fX0sImRlZmF1bHQiOmZ1bmN0aW9uKGope3JldHVybiAoanx8d2luZG93KS5kb2N1bWVudC5jb21wYXRNb2RlIT09Zjt9fSksaXNTdGFuZGFyZE1vZGU6ZnVuY3Rpb24oayl7cmV0dXJuICF0aGlzLmlzUXVpcmtzTW9kZShrKTt9LGdldFdpZHRoOmZ1bmN0aW9uKGwpe3ZhciBtPShsfHx3aW5kb3cpLmRvY3VtZW50O3ZhciBuPXF4LmJvbS5WaWV3cG9ydC5nZXRXaWR0aChsKTt2YXIgc2Nyb2xsPXRoaXMuaXNTdGFuZGFyZE1vZGUobCk/bS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGg6bS5ib2R5LnNjcm9sbFdpZHRoO3JldHVybiBNYXRoLm1heChzY3JvbGwsbik7fSxnZXRIZWlnaHQ6ZnVuY3Rpb24obyl7dmFyIHA9KG98fHdpbmRvdykuZG9jdW1lbnQ7dmFyIHE9cXguYm9tLlZpZXdwb3J0LmdldEhlaWdodChvKTt2YXIgc2Nyb2xsPXRoaXMuaXNTdGFuZGFyZE1vZGUobyk/cC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0OnAuYm9keS5zY3JvbGxIZWlnaHQ7cmV0dXJuIE1hdGgubWF4KHNjcm9sbCxxKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGM9ImxhbmRzY2FwZSIsYj0icXguZXZlbnQudHlwZS5PcmllbnRhdGlvbiIsYT0icG9ydHJhaXQiO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6cXguZXZlbnQudHlwZS5FdmVudCxtZW1iZXJzOntfX2VCOm51bGwsX19lQzpudWxsLGluaXQ6ZnVuY3Rpb24oZCxlKXtxeC5ldmVudC50eXBlLkV2ZW50LnByb3RvdHlwZS5pbml0LmNhbGwodGhpcyxmYWxzZSxmYWxzZSk7dGhpcy5fX2VCPWQ7dGhpcy5fX2VDPWU7cmV0dXJuIHRoaXM7fSxjbG9uZTpmdW5jdGlvbihmKXt2YXIgZz1xeC5ldmVudC50eXBlLkV2ZW50LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMsZik7Zy5fX2VCPXRoaXMuX19lQjtnLl9fZUM9dGhpcy5fX2VDO3JldHVybiBnO30sZ2V0T3JpZW50YXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2VCO30saXNMYW5kc2NhcGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2VDPT1jO30saXNQb3J0cmFpdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZUM9PWE7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC5ldmVudC50eXBlLkRvbSI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC5ldmVudC50eXBlLk5hdGl2ZSxzdGF0aWNzOntTSElGVF9NQVNLOjEsQ1RSTF9NQVNLOjIsQUxUX01BU0s6NCxNRVRBX01BU0s6OH0sbWVtYmVyczp7X2Nsb25lTmF0aXZlRXZlbnQ6ZnVuY3Rpb24oYixjKXt2YXIgYz1xeC5ldmVudC50eXBlLk5hdGl2ZS5wcm90b3R5cGUuX2Nsb25lTmF0aXZlRXZlbnQuY2FsbCh0aGlzLGIsYyk7Yy5zaGlmdEtleT1iLnNoaWZ0S2V5O2MuY3RybEtleT1iLmN0cmxLZXk7Yy5hbHRLZXk9Yi5hbHRLZXk7Yy5tZXRhS2V5PWIubWV0YUtleTtyZXR1cm4gYzt9LGdldE1vZGlmaWVyczpmdW5jdGlvbigpe3ZhciBlPTA7dmFyIGQ9dGhpcy5fbmF0aXZlO2lmKGQuc2hpZnRLZXkpe2V8PXF4LmV2ZW50LnR5cGUuRG9tLlNISUZUX01BU0s7fWlmKGQuY3RybEtleSl7ZXw9cXguZXZlbnQudHlwZS5Eb20uQ1RSTF9NQVNLO31pZihkLmFsdEtleSl7ZXw9cXguZXZlbnQudHlwZS5Eb20uQUxUX01BU0s7fWlmKGQubWV0YUtleSl7ZXw9cXguZXZlbnQudHlwZS5Eb20uTUVUQV9NQVNLO31yZXR1cm4gZTt9LGlzQ3RybFByZXNzZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmF0aXZlLmN0cmxLZXk7fSxpc1NoaWZ0UHJlc3NlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYXRpdmUuc2hpZnRLZXk7fSxpc0FsdFByZXNzZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmF0aXZlLmFsdEtleTt9LGlzTWV0YVByZXNzZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmF0aXZlLm1ldGFLZXk7fSxpc0N0cmxPckNvbW1hbmRQcmVzc2VkOmZ1bmN0aW9uKCl7aWYocXguYm9tLmNsaWVudC5QbGF0Zm9ybS5NQUMpe3JldHVybiB0aGlzLl9uYXRpdmUubWV0YUtleTt9ZWxzZXtyZXR1cm4gdGhpcy5fbmF0aXZlLmN0cmxLZXk7fX19fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYz0idG91Y2hjYW5jZWwiLGI9InF4LmV2ZW50LnR5cGUuVG91Y2giLGE9InRvdWNoZW5kIjtxeC5DbGFzcy5kZWZpbmUoYix7ZXh0ZW5kOnF4LmV2ZW50LnR5cGUuRG9tLG1lbWJlcnM6e19jbG9uZU5hdGl2ZUV2ZW50OmZ1bmN0aW9uKGQsZSl7dmFyIGU9cXguZXZlbnQudHlwZS5Eb20ucHJvdG90eXBlLl9jbG9uZU5hdGl2ZUV2ZW50LmNhbGwodGhpcyxkLGUpO2UucGFnZVg9ZC5wYWdlWDtlLnBhZ2VZPWQucGFnZVk7ZS5sYXllclg9ZC5sYXllclg7ZS5sYXllclk9ZC5sYXllclk7ZS5zY2FsZT1kLnNjYWxlO2Uucm90YXRpb249ZC5yb3RhdGlvbjtlLnNyY0VsZW1lbnQ9ZC5zcmNFbGVtZW50O2UudGFyZ2V0VG91Y2hlcz1bXTtmb3IodmFyIGk9MDtpPGQudGFyZ2V0VG91Y2hlcy5sZW5ndGg7aSsrKXtlLnRhcmdldFRvdWNoZXNbaV09ZC50YXJnZXRUb3VjaGVzW2ldO31lLmNoYW5nZWRUb3VjaGVzPVtdO2Zvcih2YXIgaT0wO2k8ZC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg7aSsrKXtlLmNoYW5nZWRUb3VjaGVzW2ldPWQuY2hhbmdlZFRvdWNoZXNbaV07fWUudG91Y2hlcz1bXTtmb3IodmFyIGk9MDtpPGQudG91Y2hlcy5sZW5ndGg7aSsrKXtlLnRvdWNoZXNbaV09ZC50b3VjaGVzW2ldO31yZXR1cm4gZTt9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLnN0b3BQcm9wYWdhdGlvbigpO30sZ2V0QWxsVG91Y2hlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYXRpdmUudG91Y2hlczt9LGdldFRhcmdldFRvdWNoZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmF0aXZlLnRhcmdldFRvdWNoZXM7fSxnZXRDaGFuZ2VkVGFyZ2V0VG91Y2hlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYXRpdmUuY2hhbmdlZFRvdWNoZXM7fSxpc011bHRpVG91Y2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NHKCkubGVuZ3RoPjE7fSxnZXRTY2FsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYXRpdmUuc2NhbGU7fSxnZXRSb3RhdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYXRpdmUucm90YXRpb247fSxnZXREb2N1bWVudExlZnQ6ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuX19jRihmKS5wYWdlWDt9LGdldERvY3VtZW50VG9wOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9fY0YoZykucGFnZVk7fSxnZXRTY3JlZW5MZWZ0OmZ1bmN0aW9uKGgpe3JldHVybiB0aGlzLl9fY0YoaCkuc2NyZWVuWDt9LGdldFNjcmVlblRvcDpmdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5fX2NGKGopLnNjcmVlblk7fSxnZXRWaWV3cG9ydExlZnQ6ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuX19jRihrKS5jbGllbnRYO30sZ2V0Vmlld3BvcnRUb3A6ZnVuY3Rpb24obCl7cmV0dXJuIHRoaXMuX19jRihsKS5jbGllbnRZO30sZ2V0SWRlbnRpZmllcjpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fX2NGKG0pLmlkZW50aWZpZXI7fSxfX2NGOmZ1bmN0aW9uKG4pe249bj09bnVsbD8wOm47cmV0dXJuIHRoaXMuX19jRygpW25dO30sX19jRzpmdW5jdGlvbigpe3ZhciBvPSh0aGlzLl9pc1RvdWNoRW5kKCk/dGhpcy5nZXRDaGFuZ2VkVGFyZ2V0VG91Y2hlcygpOnRoaXMuZ2V0VGFyZ2V0VG91Y2hlcygpKTtyZXR1cm4gbzt9LF9pc1RvdWNoRW5kOmZ1bmN0aW9uKCl7cmV0dXJuICh0aGlzLmdldFR5cGUoKT09YXx8dGhpcy5nZXRUeXBlKCk9PWMpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXguZXZlbnQudHlwZS5UYXAiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXguZXZlbnQudHlwZS5Ub3VjaCxtZW1iZXJzOntfaXNUb3VjaEVuZDpmdW5jdGlvbigpe3JldHVybiB0cnVlO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXguZXZlbnQudHlwZS5Td2lwZSI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC5ldmVudC50eXBlLlRvdWNoLG1lbWJlcnM6e19jbG9uZU5hdGl2ZUV2ZW50OmZ1bmN0aW9uKGIsYyl7dmFyIGM9cXguZXZlbnQudHlwZS5Ub3VjaC5wcm90b3R5cGUuX2Nsb25lTmF0aXZlRXZlbnQuY2FsbCh0aGlzLGIsYyk7Yy5zd2lwZT1iLnN3aXBlO3JldHVybiBjO30sX2lzVG91Y2hFbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9LGdldFN0YXJ0VGltZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYXRpdmUuc3dpcGUuc3RhcnRUaW1lO30sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmF0aXZlLnN3aXBlLmR1cmF0aW9uO30sZ2V0QXhpczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYXRpdmUuc3dpcGUuYXhpczt9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYXRpdmUuc3dpcGUuZGlyZWN0aW9uO30sZ2V0VmVsb2NpdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmF0aXZlLnN3aXBlLnZlbG9jaXR5O30sZ2V0RGlzdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmF0aXZlLnN3aXBlLmRpc3RhbmNlO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaD0ibGVmdCIsZz0icmlnaHQiLGY9Im1pZGRsZSIsZT0ibm9uZSIsZD0iY2xpY2siLGM9ImNvbnRleHRtZW51IixiPSJxeC5ldmVudC50eXBlLk1vdXNlIixhPSJxeC5jbGllbnQiO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6cXguZXZlbnQudHlwZS5Eb20sbWVtYmVyczp7X2Nsb25lTmF0aXZlRXZlbnQ6ZnVuY3Rpb24oaSxqKXt2YXIgaj1xeC5ldmVudC50eXBlLkRvbS5wcm90b3R5cGUuX2Nsb25lTmF0aXZlRXZlbnQuY2FsbCh0aGlzLGksaik7ai5idXR0b249aS5idXR0b247ai5jbGllbnRYPWkuY2xpZW50WDtqLmNsaWVudFk9aS5jbGllbnRZO2oucGFnZVg9aS5wYWdlWDtqLnBhZ2VZPWkucGFnZVk7ai5zY3JlZW5YPWkuc2NyZWVuWDtqLnNjcmVlblk9aS5zY3JlZW5ZO2oud2hlZWxEZWx0YT1pLndoZWVsRGVsdGE7ai5kZXRhaWw9aS5kZXRhaWw7ai5zcmNFbGVtZW50PWkuc3JjRWxlbWVudDtqLnRhcmdldD1pLnRhcmdldDtyZXR1cm4gajt9LF9fa0Q6ezA6aCwyOmcsMTpmfSxfX2tFOnsxOmgsMjpnLDQ6Zn0sc3RvcDpmdW5jdGlvbigpe3RoaXMuc3RvcFByb3BhZ2F0aW9uKCk7fSxnZXRCdXR0b246ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fdHlwZSl7Y2FzZSBjOnJldHVybiBnO2Nhc2UgZDppZih0aGlzLl9fa0Ype3JldHVybiB0aGlzLl9fa0YoKTt9ZGVmYXVsdDppZih0aGlzLl9uYXRpdmUudGFyZ2V0IT09dW5kZWZpbmVkKXtyZXR1cm4gdGhpcy5fX2tEW3RoaXMuX25hdGl2ZS5idXR0b25dfHxlO31lbHNle3JldHVybiB0aGlzLl9fa0VbdGhpcy5fbmF0aXZlLmJ1dHRvbl18fGU7fX19LF9fa0Y6cXguY29yZS5WYXJpYW50LnNlbGVjdChhLHsibXNodG1sIjpmdW5jdGlvbigpe3JldHVybiBoO30sImRlZmF1bHQiOm51bGx9KSxpc0xlZnRQcmVzc2VkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnV0dG9uKCk9PT1oO30saXNNaWRkbGVQcmVzc2VkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnV0dG9uKCk9PT1mO30saXNSaWdodFByZXNzZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdXR0b24oKT09PWc7fSxnZXRSZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbGF0ZWRUYXJnZXQ7fSxnZXRWaWV3cG9ydExlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmF0aXZlLmNsaWVudFg7fSxnZXRWaWV3cG9ydFRvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYXRpdmUuY2xpZW50WTt9LGdldERvY3VtZW50TGVmdDpmdW5jdGlvbigpe2lmKHRoaXMuX25hdGl2ZS5wYWdlWCE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMuX25hdGl2ZS5wYWdlWDt9ZWxzZXt2YXIgaz1xeC5kb20uTm9kZS5nZXRXaW5kb3codGhpcy5fbmF0aXZlLnNyY0VsZW1lbnQpO3JldHVybiB0aGlzLl9uYXRpdmUuY2xpZW50WCtxeC5ib20uVmlld3BvcnQuZ2V0U2Nyb2xsTGVmdChrKTt9fSxnZXREb2N1bWVudFRvcDpmdW5jdGlvbigpe2lmKHRoaXMuX25hdGl2ZS5wYWdlWSE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMuX25hdGl2ZS5wYWdlWTt9ZWxzZXt2YXIgbD1xeC5kb20uTm9kZS5nZXRXaW5kb3codGhpcy5fbmF0aXZlLnNyY0VsZW1lbnQpO3JldHVybiB0aGlzLl9uYXRpdmUuY2xpZW50WStxeC5ib20uVmlld3BvcnQuZ2V0U2Nyb2xsVG9wKGwpO319LGdldFNjcmVlbkxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmF0aXZlLnNjcmVlblg7fSxnZXRTY3JlZW5Ub3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmF0aXZlLnNjcmVlblk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBjPSJxeC5jbGllbnQiLGI9ImNocm9tZSIsYT0icXguZXZlbnQudHlwZS5Nb3VzZVdoZWVsIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LmV2ZW50LnR5cGUuTW91c2UsbWVtYmVyczp7c3RvcDpmdW5jdGlvbigpe3RoaXMuc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy5wcmV2ZW50RGVmYXVsdCgpO30sZ2V0V2hlZWxEZWx0YTpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGMseyJkZWZhdWx0IjpmdW5jdGlvbigpe3JldHVybiAtKHRoaXMuX25hdGl2ZS53aGVlbERlbHRhLzQwKTt9LCJnZWNrbyI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmF0aXZlLmRldGFpbDt9LCJ3ZWJraXQiOmZ1bmN0aW9uKCl7aWYocXguYm9tLmNsaWVudC5Ccm93c2VyLk5BTUU9PWIpe2lmKHF4LmJvbS5jbGllbnQuUGxhdGZvcm0uTUFDKXtyZXR1cm4gLSh0aGlzLl9uYXRpdmUud2hlZWxEZWx0YS8xMjAwKTt9ZWxzZXtyZXR1cm4gLSh0aGlzLl9uYXRpdmUud2hlZWxEZWx0YS8xMjApO319ZWxzZXtpZihxeC5ib20uY2xpZW50LlBsYXRmb3JtLldJTil7dmFyIGQ9MTIwO2lmKHF4LmJvbS5jbGllbnQuRW5naW5lLlZFUlNJT049PTUzMy4xNil7ZD0xMjAwO319ZWxzZXtkPTQwO2lmKHF4LmJvbS5jbGllbnQuRW5naW5lLlZFUlNJT049PTUzMy4xNnx8cXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTj09NTMzLjE3fHxxeC5ib20uY2xpZW50LkVuZ2luZS5WRVJTSU9OPT01MzMuMTgpe2Q9MTIwMDt9fXJldHVybiAtKHRoaXMuX25hdGl2ZS53aGVlbERlbHRhL2QpO319fSl9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaj0icXguY2xpZW50IixpPSJpZSIsaD0ibXNpZSIsZz0iYW5kcm9pZCIsZj0ib3BlcmFtaW5pIixlPSJtb2JpbGUgY2hyb21lIixkPSIpKC98ICkoWzAtOV0rXC5bMC05XSkiLGM9ImllbW9iaWxlIixiPSJvcGVyYSBtb2JpIixhPSJNb2JpbGUgU2FmYXJpIix4PSJvcGVyYW1vYmlsZSIsdz0ibW9iaWxlIHNhZmFyaSIsdj0iSUVNb2JpbGV8TWF4dGhvbnxNU0lFIix1PSJxeC5ib20uY2xpZW50LkJyb3dzZXIiLHQ9Im9wZXJhIG1pbmkiLHM9IigiLHI9Im9wZXJhIixxPSJtc2h0bWwiLHA9Ik9wZXJhIE1pbml8T3BlcmEgTW9iaXxPcGVyYSIsbz0iQWRvYmVBSVJ8VGl0YW5pdW18Rmx1aWR8Q2hyb21lfEFuZHJvaWR8RXBpcGhhbnl8S29ucXVlcm9yfGlDYWJ8T21uaVdlYnxNYXh0aG9ufFByZXxNb2JpbGUgU2FmYXJpfFNhZmFyaSIsbT0id2Via2l0IixuPSI1LjAiLGs9InByaXNtfEZlbm5lY3xDYW1pbm98S21lbGVvbnxHYWxlb258TmV0c2NhcGV8U2VhTW9ua2V5fEZpcmVmb3giLGw9Ik1vYmlsZS8iO3F4LkJvb3RzdHJhcC5kZWZpbmUodSx7c3RhdGljczp7VU5LTk9XTjp0cnVlLE5BTUU6InVua25vd24iLFRJVExFOiJ1bmtub3duIDAuMCIsVkVSU0lPTjowLjAsRlVMTFZFUlNJT046IjAuMC4wIixfX2xFOmZ1bmN0aW9uKHkpe3ZhciB6PW5hdmlnYXRvci51c2VyQWdlbnQ7dmFyIEI9bmV3IFJlZ0V4cChzK3krZCk7dmFyIEM9ei5tYXRjaChCKTtpZighQyl7cmV0dXJuO312YXIgbmFtZT1DWzFdLnRvTG93ZXJDYXNlKCk7dmFyIEE9Q1szXTtpZih6Lm1hdGNoKC9WZXJzaW9uKFwvfCApKFswLTldK1wuWzAtOV0pLykpe0E9UmVnRXhwLiQyO31pZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoaixtKSl7aWYobmFtZT09PWcpe25hbWU9ZTt9ZWxzZSBpZih6LmluZGV4T2YoYSkhPT0tMXx8ei5pbmRleE9mKGwpIT09LTEpe25hbWU9dzt9fWVsc2UgaWYocXguY29yZS5WYXJpYW50LmlzU2V0KGoscSkpe2lmKG5hbWU9PT1oKXtuYW1lPWk7aWYocXguYm9tLmNsaWVudC5TeXN0ZW0uV0lOQ0UmJm5hbWU9PT1pKXtuYW1lPWM7QT1uO319fWVsc2UgaWYocXguY29yZS5WYXJpYW50LmlzU2V0KGoscikpe2lmKG5hbWU9PT1iKXtuYW1lPXg7fWVsc2UgaWYobmFtZT09PXQpe25hbWU9Zjt9fXRoaXMuTkFNRT1uYW1lO3RoaXMuRlVMTFZFUlNJT049QTt0aGlzLlZFUlNJT049cGFyc2VGbG9hdChBLDEwKTt0aGlzLlRJVExFPW5hbWUrIiAiK3RoaXMuVkVSU0lPTjt0aGlzLlVOS05PV049ZmFsc2U7fX0sZGVmZXI6cXguY29yZS5WYXJpYW50LnNlbGVjdChqLHsid2Via2l0IjpmdW5jdGlvbihEKXtELl9fbEUobyk7fSwiZ2Vja28iOmZ1bmN0aW9uKEUpe0UuX19sRShrKTt9LCJtc2h0bWwiOmZ1bmN0aW9uKEYpe0YuX19sRSh2KTt9LCJvcGVyYSI6ZnVuY3Rpb24oRyl7Ry5fX2xFKHApO319KX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGY9InF4LmNsaWVudCIsZT0icXguZG9tLkhpZXJhcmNoeSIsZD0icHJldmlvdXNTaWJsaW5nIixjPSIqIixiPSJuZXh0U2libGluZyIsYT0icGFyZW50Tm9kZSI7cXguQ2xhc3MuZGVmaW5lKGUse3N0YXRpY3M6e2dldE5vZGVJbmRleDpmdW5jdGlvbihnKXt2YXIgaD0wO3doaWxlKGcmJihnPWcucHJldmlvdXNTaWJsaW5nKSl7aCsrO31yZXR1cm4gaDt9LGdldEVsZW1lbnRJbmRleDpmdW5jdGlvbihpKXt2YXIgaj0wO3ZhciBrPXF4LmRvbS5Ob2RlLkVMRU1FTlQ7d2hpbGUoaSYmKGk9aS5wcmV2aW91c1NpYmxpbmcpKXtpZihpLm5vZGVUeXBlPT1rKXtqKys7fX1yZXR1cm4gajt9LGdldE5leHRFbGVtZW50U2libGluZzpmdW5jdGlvbihsKXt3aGlsZShsJiYobD1sLm5leHRTaWJsaW5nKSYmIXF4LmRvbS5Ob2RlLmlzRWxlbWVudChsKSl7Y29udGludWU7fXJldHVybiBsfHxudWxsO30sZ2V0UHJldmlvdXNFbGVtZW50U2libGluZzpmdW5jdGlvbihtKXt3aGlsZShtJiYobT1tLnByZXZpb3VzU2libGluZykmJiFxeC5kb20uTm9kZS5pc0VsZW1lbnQobSkpe2NvbnRpbnVlO31yZXR1cm4gbXx8bnVsbDt9LGNvbnRhaW5zOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoZix7IndlYmtpdHxtc2h0bWx8b3BlcmEiOmZ1bmN0aW9uKG4sbyl7aWYocXguZG9tLk5vZGUuaXNEb2N1bWVudChuKSl7dmFyIHA9cXguZG9tLk5vZGUuZ2V0RG9jdW1lbnQobyk7cmV0dXJuIG4mJnA9PW47fWVsc2UgaWYocXguZG9tLk5vZGUuaXNEb2N1bWVudChvKSl7cmV0dXJuIGZhbHNlO31lbHNle3JldHVybiBuLmNvbnRhaW5zKG8pO319LCJnZWNrbyI6ZnVuY3Rpb24ocSxyKXtyZXR1cm4gISEocS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSYxNik7fSwiZGVmYXVsdCI6ZnVuY3Rpb24ocyx0KXt3aGlsZSh0KXtpZihzPT10KXtyZXR1cm4gdHJ1ZTt9dD10LnBhcmVudE5vZGU7fXJldHVybiBmYWxzZTt9fSksaXNSZW5kZXJlZDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGYseyJtc2h0bWwiOmZ1bmN0aW9uKHUpe2lmKCF1LnBhcmVudE5vZGV8fCF1Lm9mZnNldFBhcmVudCl7cmV0dXJuIGZhbHNlO312YXIgdj11Lm93bmVyRG9jdW1lbnR8fHUuZG9jdW1lbnQ7cmV0dXJuIHYuYm9keS5jb250YWlucyh1KTt9LCJnZWNrbyI6ZnVuY3Rpb24odyl7dmFyIHg9dy5vd25lckRvY3VtZW50fHx3LmRvY3VtZW50O3JldHVybiAhISh4LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHcpJjE2KTt9LCJkZWZhdWx0IjpmdW5jdGlvbih5KXtpZigheS5wYXJlbnROb2RlfHwheS5vZmZzZXRQYXJlbnQpe3JldHVybiBmYWxzZTt9dmFyIHo9eS5vd25lckRvY3VtZW50fHx5LmRvY3VtZW50O3JldHVybiB6LmJvZHkuY29udGFpbnMoeSk7fX0pLGlzRGVzY2VuZGFudE9mOmZ1bmN0aW9uKEEsQil7cmV0dXJuIHRoaXMuY29udGFpbnMoQixBKTt9LGdldENvbW1vblBhcmVudDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGYseyJtc2h0bWx8b3BlcmEiOmZ1bmN0aW9uKEMsRCl7aWYoQz09PUQpe3JldHVybiBDO313aGlsZShDJiZxeC5kb20uTm9kZS5pc0VsZW1lbnQoQykpe2lmKEMuY29udGFpbnMoRCkpe3JldHVybiBDO31DPUMucGFyZW50Tm9kZTt9cmV0dXJuIG51bGw7fSwiZGVmYXVsdCI6ZnVuY3Rpb24oRSxGKXtpZihFPT09Ril7cmV0dXJuIEU7fXZhciBHPXt9O3ZhciBKPXF4LmNvcmUuT2JqZWN0UmVnaXN0cnk7dmFyIEksSDt3aGlsZShFfHxGKXtpZihFKXtJPUoudG9IYXNoQ29kZShFKTtpZihHW0ldKXtyZXR1cm4gR1tJXTt9R1tJXT1FO0U9RS5wYXJlbnROb2RlO31pZihGKXtIPUoudG9IYXNoQ29kZShGKTtpZihHW0hdKXtyZXR1cm4gR1tIXTt9R1tIXT1GO0Y9Ri5wYXJlbnROb2RlO319cmV0dXJuIG51bGw7fX0pLGdldEFuY2VzdG9yczpmdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5fcmVjdXJzaXZlbHlDb2xsZWN0KEssYSk7fSxnZXRDaGlsZEVsZW1lbnRzOmZ1bmN0aW9uKEwpe0w9TC5maXJzdENoaWxkO2lmKCFMKXtyZXR1cm4gW107fXZhciBNPXRoaXMuZ2V0TmV4dFNpYmxpbmdzKEwpO2lmKEwubm9kZVR5cGU9PT0xKXtNLnVuc2hpZnQoTCk7fXJldHVybiBNO30sZ2V0RGVzY2VuZGFudHM6ZnVuY3Rpb24oTil7cmV0dXJuIHF4LmxhbmcuQXJyYXkuZnJvbUNvbGxlY3Rpb24oTi5nZXRFbGVtZW50c0J5VGFnTmFtZShjKSk7fSxnZXRGaXJzdERlc2NlbmRhbnQ6ZnVuY3Rpb24oTyl7Tz1PLmZpcnN0Q2hpbGQ7d2hpbGUoTyYmTy5ub2RlVHlwZSE9MSl7Tz1PLm5leHRTaWJsaW5nO31yZXR1cm4gTzt9LGdldExhc3REZXNjZW5kYW50OmZ1bmN0aW9uKFApe1A9UC5sYXN0Q2hpbGQ7d2hpbGUoUCYmUC5ub2RlVHlwZSE9MSl7UD1QLnByZXZpb3VzU2libGluZzt9cmV0dXJuIFA7fSxnZXRQcmV2aW91c1NpYmxpbmdzOmZ1bmN0aW9uKFEpe3JldHVybiB0aGlzLl9yZWN1cnNpdmVseUNvbGxlY3QoUSxkKTt9LGdldE5leHRTaWJsaW5nczpmdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5fcmVjdXJzaXZlbHlDb2xsZWN0KFIsYik7fSxfcmVjdXJzaXZlbHlDb2xsZWN0OmZ1bmN0aW9uKFMsVCl7dmFyIFU9W107d2hpbGUoUz1TW1RdKXtpZihTLm5vZGVUeXBlPT0xKXtVLnB1c2goUyk7fX1yZXR1cm4gVTt9LGdldFNpYmxpbmdzOmZ1bmN0aW9uKFYpe3JldHVybiB0aGlzLmdldFByZXZpb3VzU2libGluZ3MoVikucmV2ZXJzZSgpLmNvbmNhdCh0aGlzLmdldE5leHRTaWJsaW5ncyhWKSk7fSxpc0VtcHR5OmZ1bmN0aW9uKFcpe1c9Vy5maXJzdENoaWxkO3doaWxlKFcpe2lmKFcubm9kZVR5cGU9PT1xeC5kb20uTm9kZS5FTEVNRU5UfHxXLm5vZGVUeXBlPT09cXguZG9tLk5vZGUuVEVYVCl7cmV0dXJuIGZhbHNlO31XPVcubmV4dFNpYmxpbmc7fXJldHVybiB0cnVlO30sY2xlYW5XaGl0ZXNwYWNlOmZ1bmN0aW9uKFgpe3ZhciBZPVguZmlyc3RDaGlsZDt3aGlsZShZKXt2YXIgYmE9WS5uZXh0U2libGluZztpZihZLm5vZGVUeXBlPT0zJiYhL1xTLy50ZXN0KFkubm9kZVZhbHVlKSl7WC5yZW1vdmVDaGlsZChZKTt9WT1iYTt9fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC5ldmVudC50eXBlLktleUlucHV0IjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LmV2ZW50LnR5cGUuRG9tLG1lbWJlcnM6e2luaXQ6ZnVuY3Rpb24oYixjLGQpe3F4LmV2ZW50LnR5cGUuRG9tLnByb3RvdHlwZS5pbml0LmNhbGwodGhpcyxiLGMsbnVsbCx0cnVlLHRydWUpO3RoaXMuX2NoYXJDb2RlPWQ7cmV0dXJuIHRoaXM7fSxjbG9uZTpmdW5jdGlvbihlKXt2YXIgZj1xeC5ldmVudC50eXBlLkRvbS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzLGUpO2YuX2NoYXJDb2RlPXRoaXMuX2NoYXJDb2RlO3JldHVybiBmO30sZ2V0Q2hhckNvZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hhckNvZGU7fSxnZXRDaGFyOmZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY2hhckNvZGUpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXguZXZlbnQudHlwZS5LZXlTZXF1ZW5jZSI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC5ldmVudC50eXBlLkRvbSxtZW1iZXJzOntpbml0OmZ1bmN0aW9uKGIsYyxkKXtxeC5ldmVudC50eXBlLkRvbS5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMsYixjLG51bGwsdHJ1ZSx0cnVlKTt0aGlzLl9rZXlDb2RlPWIua2V5Q29kZTt0aGlzLl9pZGVudGlmaWVyPWQ7cmV0dXJuIHRoaXM7fSxjbG9uZTpmdW5jdGlvbihlKXt2YXIgZj1xeC5ldmVudC50eXBlLkRvbS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzLGUpO2YuX2tleUNvZGU9dGhpcy5fa2V5Q29kZTtmLl9pZGVudGlmaWVyPXRoaXMuX2lkZW50aWZpZXI7cmV0dXJuIGY7fSxnZXRLZXlJZGVudGlmaWVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lkZW50aWZpZXI7fSxnZXRLZXlDb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleUNvZGU7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBqPSJxeC5jbGllbnQiLGk9Im1vdXNlZG93biIsaD0ibW91c2V1cCIsZz0iYmx1ciIsZj0iZm9jdXMiLGU9Im9uIixkPSJzZWxlY3RzdGFydCIsYz0iRE9NRm9jdXNPdXQiLGI9ImZvY3VzaW4iLGE9ImZvY3Vzb3V0Iix6PSJET01Gb2N1c0luIix5PSJkcmFnZ2VzdHVyZSIseD0icXguZXZlbnQuaGFuZGxlci5Gb2N1cyIsdz0iX2FwcGx5Rm9jdXMiLHY9ImRlYWN0aXZhdGUiLHU9InRleHRhcmVhIix0PSJfYXBwbHlBY3RpdmUiLHM9J2NoYXJhY3Rlcicscj0iaW5wdXQiLHE9InF4U2VsZWN0YWJsZSIsbz0idGFiSW5kZXgiLHA9Im9mZiIsbT0iYWN0aXZhdGUiLG49Im1zaHRtbCIsaz0icXhLZWVwRm9jdXMiLGw9InF4S2VlcEFjdGl2ZSI7cXguQ2xhc3MuZGVmaW5lKHgse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6cXguZXZlbnQuSUV2ZW50SGFuZGxlcixjb25zdHJ1Y3Q6ZnVuY3Rpb24oQSl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9tYW5hZ2VyPUE7dGhpcy5fd2luZG93PUEuZ2V0V2luZG93KCk7dGhpcy5fZG9jdW1lbnQ9dGhpcy5fd2luZG93LmRvY3VtZW50O3RoaXMuX3Jvb3Q9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3RoaXMuX2JvZHk9dGhpcy5fZG9jdW1lbnQuYm9keTt0aGlzLl9pbml0T2JzZXJ2ZXIoKTt9LHByb3BlcnRpZXM6e2FjdGl2ZTp7YXBwbHk6dCxudWxsYWJsZTp0cnVlfSxmb2N1czp7YXBwbHk6dyxudWxsYWJsZTp0cnVlfX0sc3RhdGljczp7UFJJT1JJVFk6cXguZXZlbnQuUmVnaXN0cmF0aW9uLlBSSU9SSVRZX05PUk1BTCxTVVBQT1JURURfVFlQRVM6e2ZvY3VzOjEsYmx1cjoxLGZvY3VzaW46MSxmb2N1c291dDoxLGFjdGl2YXRlOjEsZGVhY3RpdmF0ZToxfSxJR05PUkVfQ0FOX0hBTkRMRTp0cnVlLEZPQ1VTQUJMRV9FTEVNRU5UUzpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KCJxeC5jbGllbnQiLHsibXNodG1sfGdlY2tvIjp7YToxLGJvZHk6MSxidXR0b246MSxmcmFtZToxLGlmcmFtZToxLGltZzoxLGlucHV0OjEsb2JqZWN0OjEsc2VsZWN0OjEsdGV4dGFyZWE6MX0sIm9wZXJhfHdlYmtpdCI6e2J1dHRvbjoxLGlucHV0OjEsc2VsZWN0OjEsdGV4dGFyZWE6MX19KX0sbWVtYmVyczp7X19qUTpudWxsLF9falI6bnVsbCxfX2pTOm51bGwsX19qVDpudWxsLF9falU6bnVsbCxfX2pWOm51bGwsX19qVzpudWxsLF9falg6bnVsbCxfX2pZOm51bGwsX19rYTpudWxsLGNhbkhhbmRsZUV2ZW50OmZ1bmN0aW9uKEIsQyl7fSxyZWdpc3RlckV2ZW50OmZ1bmN0aW9uKEQsRSxGKXt9LHVucmVnaXN0ZXJFdmVudDpmdW5jdGlvbihHLEgsSSl7fSxmb2N1czpmdW5jdGlvbihKKXtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoaixuKSl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0cnl7Si5mb2N1cygpO3ZhciBLPXF4LmJvbS5TZWxlY3Rpb24uZ2V0KEopO2lmKEsubGVuZ3RoPT0wKXt2YXIgTD1KLmNyZWF0ZVRleHRSYW5nZSgpO0wubW92ZVN0YXJ0KHMsSi52YWx1ZS5sZW5ndGgpO0wuY29sbGFwc2UoKTtMLnNlbGVjdCgpO319Y2F0Y2goTSl7fX0sMCk7fWVsc2V7dHJ5e0ouZm9jdXMoKTt9Y2F0Y2goTil7fX10aGlzLnNldEZvY3VzKEopO3RoaXMuc2V0QWN0aXZlKEopO30sYWN0aXZhdGU6ZnVuY3Rpb24oTyl7dGhpcy5zZXRBY3RpdmUoTyk7fSxibHVyOmZ1bmN0aW9uKFApe3RyeXtQLmJsdXIoKTt9Y2F0Y2goUSl7fWlmKHRoaXMuZ2V0QWN0aXZlKCk9PT1QKXt0aGlzLnJlc2V0QWN0aXZlKCk7fWlmKHRoaXMuZ2V0Rm9jdXMoKT09PVApe3RoaXMucmVzZXRGb2N1cygpO319LGRlYWN0aXZhdGU6ZnVuY3Rpb24oUil7aWYodGhpcy5nZXRBY3RpdmUoKT09PVIpe3RoaXMucmVzZXRBY3RpdmUoKTt9fSx0cnlBY3RpdmF0ZTpmdW5jdGlvbihTKXt2YXIgVD10aGlzLl9fa3AoUyk7aWYoVCl7dGhpcy5zZXRBY3RpdmUoVCk7fX0sX19rYjpmdW5jdGlvbihVLFYsVyxYKXt2YXIgYmE9cXguZXZlbnQuUmVnaXN0cmF0aW9uO3ZhciBZPWJhLmNyZWF0ZUV2ZW50KFcscXguZXZlbnQudHlwZS5Gb2N1cyxbVSxWLFhdKTtiYS5kaXNwYXRjaEV2ZW50KFUsWSk7fSxfd2luZG93Rm9jdXNlZDp0cnVlLF9fa2M6ZnVuY3Rpb24oKXtpZih0aGlzLl93aW5kb3dGb2N1c2VkKXt0aGlzLl93aW5kb3dGb2N1c2VkPWZhbHNlO3RoaXMuX19rYih0aGlzLl93aW5kb3csbnVsbCxnLGZhbHNlKTt9fSxfX2tkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX3dpbmRvd0ZvY3VzZWQpe3RoaXMuX3dpbmRvd0ZvY3VzZWQ9dHJ1ZTt0aGlzLl9fa2IodGhpcy5fd2luZG93LG51bGwsZixmYWxzZSk7fX0sX2luaXRPYnNlcnZlcjpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGoseyJnZWNrbyI6ZnVuY3Rpb24oKXt0aGlzLl9falE9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9fa2osdGhpcyk7dGhpcy5fX2pSPXF4LmxhbmcuRnVuY3Rpb24ubGlzdGVuZXIodGhpcy5fX2trLHRoaXMpO3RoaXMuX19qUz1xeC5sYW5nLkZ1bmN0aW9uLmxpc3RlbmVyKHRoaXMuX19raSx0aGlzKTt0aGlzLl9falQ9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9fa2gsdGhpcyk7dGhpcy5fX2pVPXF4LmxhbmcuRnVuY3Rpb24ubGlzdGVuZXIodGhpcy5fX2tlLHRoaXMpO3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcih0aGlzLl9kb2N1bWVudCxpLHRoaXMuX19qUSx0cnVlKTtxeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fZG9jdW1lbnQsaCx0aGlzLl9falIsdHJ1ZSk7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX3dpbmRvdyxmLHRoaXMuX19qUyx0cnVlKTtxeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fd2luZG93LGcsdGhpcy5fX2pULHRydWUpO3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcih0aGlzLl93aW5kb3cseSx0aGlzLl9falUsdHJ1ZSk7fSwibXNodG1sIjpmdW5jdGlvbigpe3RoaXMuX19qUT1xeC5sYW5nLkZ1bmN0aW9uLmxpc3RlbmVyKHRoaXMuX19raix0aGlzKTt0aGlzLl9falI9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9fa2ssdGhpcyk7dGhpcy5fX2pXPXF4LmxhbmcuRnVuY3Rpb24ubGlzdGVuZXIodGhpcy5fX2tmLHRoaXMpO3RoaXMuX19qWD1xeC5sYW5nLkZ1bmN0aW9uLmxpc3RlbmVyKHRoaXMuX19rZyx0aGlzKTt0aGlzLl9falY9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9fa20sdGhpcyk7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX2RvY3VtZW50LGksdGhpcy5fX2pRKTtxeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fZG9jdW1lbnQsaCx0aGlzLl9falIpO3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcih0aGlzLl9kb2N1bWVudCxiLHRoaXMuX19qVyk7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX2RvY3VtZW50LGEsdGhpcy5fX2pYKTtxeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fZG9jdW1lbnQsZCx0aGlzLl9falYpO30sIndlYmtpdCI6ZnVuY3Rpb24oKXt0aGlzLl9falE9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9fa2osdGhpcyk7dGhpcy5fX2pSPXF4LmxhbmcuRnVuY3Rpb24ubGlzdGVuZXIodGhpcy5fX2trLHRoaXMpO3RoaXMuX19qWD1xeC5sYW5nLkZ1bmN0aW9uLmxpc3RlbmVyKHRoaXMuX19rZyx0aGlzKTt0aGlzLl9falM9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9fa2ksdGhpcyk7dGhpcy5fX2pUPXF4LmxhbmcuRnVuY3Rpb24ubGlzdGVuZXIodGhpcy5fX2toLHRoaXMpO3RoaXMuX19qVj1xeC5sYW5nLkZ1bmN0aW9uLmxpc3RlbmVyKHRoaXMuX19rbSx0aGlzKTtxeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fZG9jdW1lbnQsaSx0aGlzLl9falEsdHJ1ZSk7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX2RvY3VtZW50LGgsdGhpcy5fX2pSLHRydWUpO3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcih0aGlzLl9kb2N1bWVudCxkLHRoaXMuX19qVixmYWxzZSk7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX3dpbmRvdyxjLHRoaXMuX19qWCx0cnVlKTtxeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fd2luZG93LGYsdGhpcy5fX2pTLHRydWUpO3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcih0aGlzLl93aW5kb3csZyx0aGlzLl9falQsdHJ1ZSk7fSwib3BlcmEiOmZ1bmN0aW9uKCl7dGhpcy5fX2pRPXF4LmxhbmcuRnVuY3Rpb24ubGlzdGVuZXIodGhpcy5fX2tqLHRoaXMpO3RoaXMuX19qUj1xeC5sYW5nLkZ1bmN0aW9uLmxpc3RlbmVyKHRoaXMuX19rayx0aGlzKTt0aGlzLl9falc9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9fa2YsdGhpcyk7dGhpcy5fX2pYPXF4LmxhbmcuRnVuY3Rpb24ubGlzdGVuZXIodGhpcy5fX2tnLHRoaXMpO3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcih0aGlzLl9kb2N1bWVudCxpLHRoaXMuX19qUSx0cnVlKTtxeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fZG9jdW1lbnQsaCx0aGlzLl9falIsdHJ1ZSk7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX3dpbmRvdyx6LHRoaXMuX19qVyx0cnVlKTtxeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fd2luZG93LGMsdGhpcy5fX2pYLHRydWUpO319KSxfc3RvcE9ic2VydmVyOnF4LmNvcmUuVmFyaWFudC5zZWxlY3Qoaix7ImdlY2tvIjpmdW5jdGlvbigpe3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl9kb2N1bWVudCxpLHRoaXMuX19qUSx0cnVlKTtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fZG9jdW1lbnQsaCx0aGlzLl9falIsdHJ1ZSk7cXguYm9tLkV2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKHRoaXMuX3dpbmRvdyxmLHRoaXMuX19qUyx0cnVlKTtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fd2luZG93LGcsdGhpcy5fX2pULHRydWUpO3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl93aW5kb3cseSx0aGlzLl9falUsdHJ1ZSk7fSwibXNodG1sIjpmdW5jdGlvbigpe3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl9kb2N1bWVudCxpLHRoaXMuX19qUSk7cXguYm9tLkV2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKHRoaXMuX2RvY3VtZW50LGgsdGhpcy5fX2pSKTtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fZG9jdW1lbnQsYix0aGlzLl9falcpO3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl9kb2N1bWVudCxhLHRoaXMuX19qWCk7cXguYm9tLkV2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKHRoaXMuX2RvY3VtZW50LGQsdGhpcy5fX2pWKTt9LCJ3ZWJraXQiOmZ1bmN0aW9uKCl7cXguYm9tLkV2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKHRoaXMuX2RvY3VtZW50LGksdGhpcy5fX2pRLHRydWUpO3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl9kb2N1bWVudCxoLHRoaXMuX19qUix0cnVlKTtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fZG9jdW1lbnQsZCx0aGlzLl9falYsZmFsc2UpO3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl93aW5kb3csYyx0aGlzLl9falgsdHJ1ZSk7cXguYm9tLkV2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKHRoaXMuX3dpbmRvdyxmLHRoaXMuX19qUyx0cnVlKTtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fd2luZG93LGcsdGhpcy5fX2pULHRydWUpO30sIm9wZXJhIjpmdW5jdGlvbigpe3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl9kb2N1bWVudCxpLHRoaXMuX19qUSx0cnVlKTtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fZG9jdW1lbnQsaCx0aGlzLl9falIsdHJ1ZSk7cXguYm9tLkV2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKHRoaXMuX3dpbmRvdyx6LHRoaXMuX19qVyx0cnVlKTtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fd2luZG93LGMsdGhpcy5fX2pYLHRydWUpO319KSxfX2tlOnF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QocXguY29yZS5WYXJpYW50LnNlbGVjdChqLHsiZ2Vja28iOmZ1bmN0aW9uKGJiKXt2YXIgYmM9cXguYm9tLkV2ZW50LmdldFRhcmdldChiYik7aWYoIXRoaXMuX19rcShiYykpe3F4LmJvbS5FdmVudC5wcmV2ZW50RGVmYXVsdChiYik7fX0sImRlZmF1bHQiOm51bGx9KSksX19rZjpxeC5ldmVudC5HbG9iYWxFcnJvci5vYnNlcnZlTWV0aG9kKHF4LmNvcmUuVmFyaWFudC5zZWxlY3Qoaix7Im1zaHRtbCI6ZnVuY3Rpb24oYmQpe3RoaXMuX19rZCgpO3ZhciBiZj1xeC5ib20uRXZlbnQuZ2V0VGFyZ2V0KGJkKTt2YXIgYmU9dGhpcy5fX2tvKGJmKTtpZihiZSl7dGhpcy5zZXRGb2N1cyhiZSk7fXRoaXMudHJ5QWN0aXZhdGUoYmYpO30sIm9wZXJhIjpmdW5jdGlvbihiZyl7dmFyIGJoPXF4LmJvbS5FdmVudC5nZXRUYXJnZXQoYmcpO2lmKGJoPT10aGlzLl9kb2N1bWVudHx8Ymg9PXRoaXMuX3dpbmRvdyl7dGhpcy5fX2tkKCk7aWYodGhpcy5fX2pZKXt0aGlzLnNldEZvY3VzKHRoaXMuX19qWSk7ZGVsZXRlIHRoaXMuX19qWTt9aWYodGhpcy5fX2thKXt0aGlzLnNldEFjdGl2ZSh0aGlzLl9fa2EpO2RlbGV0ZSB0aGlzLl9fa2E7fX1lbHNle3RoaXMuc2V0Rm9jdXMoYmgpO3RoaXMudHJ5QWN0aXZhdGUoYmgpO2lmKCF0aGlzLl9fa3EoYmgpKXtiaC5zZWxlY3Rpb25TdGFydD0wO2JoLnNlbGVjdGlvbkVuZD0wO319fSwiZGVmYXVsdCI6bnVsbH0pKSxfX2tnOnF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QocXguY29yZS5WYXJpYW50LnNlbGVjdChqLHsibXNodG1sIjpmdW5jdGlvbihiaSl7aWYoIWJpLnRvRWxlbWVudCl7dGhpcy5fX2tjKCk7dGhpcy5yZXNldEZvY3VzKCk7dGhpcy5yZXNldEFjdGl2ZSgpO319LCJ3ZWJraXQiOmZ1bmN0aW9uKGJqKXt2YXIgYms9cXguYm9tLkV2ZW50LmdldFRhcmdldChiaik7aWYoYms9PT10aGlzLmdldEZvY3VzKCkpe3RoaXMucmVzZXRGb2N1cygpO31pZihiaz09PXRoaXMuZ2V0QWN0aXZlKCkpe3RoaXMucmVzZXRBY3RpdmUoKTt9fSwib3BlcmEiOmZ1bmN0aW9uKGJsKXt2YXIgYm09cXguYm9tLkV2ZW50LmdldFRhcmdldChibCk7aWYoYm09PXRoaXMuX2RvY3VtZW50KXt0aGlzLl9fa2MoKTt0aGlzLl9falk9dGhpcy5nZXRGb2N1cygpO3RoaXMuX19rYT10aGlzLmdldEFjdGl2ZSgpO3RoaXMucmVzZXRGb2N1cygpO3RoaXMucmVzZXRBY3RpdmUoKTt9ZWxzZXtpZihibT09PXRoaXMuZ2V0Rm9jdXMoKSl7dGhpcy5yZXNldEZvY3VzKCk7fWlmKGJtPT09dGhpcy5nZXRBY3RpdmUoKSl7dGhpcy5yZXNldEFjdGl2ZSgpO319fSwiZGVmYXVsdCI6bnVsbH0pKSxfX2toOnF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QocXguY29yZS5WYXJpYW50LnNlbGVjdChqLHsiZ2Vja28iOmZ1bmN0aW9uKGJuKXt2YXIgYm89cXguYm9tLkV2ZW50LmdldFRhcmdldChibik7aWYoYm89PT10aGlzLl93aW5kb3d8fGJvPT09dGhpcy5fZG9jdW1lbnQpe3RoaXMuX19rYygpO3RoaXMucmVzZXRBY3RpdmUoKTt0aGlzLnJlc2V0Rm9jdXMoKTt9fSwid2Via2l0IjpmdW5jdGlvbihicCl7dmFyIGJxPXF4LmJvbS5FdmVudC5nZXRUYXJnZXQoYnApO2lmKGJxPT09dGhpcy5fd2luZG93fHxicT09PXRoaXMuX2RvY3VtZW50KXt0aGlzLl9fa2MoKTt0aGlzLl9falk9dGhpcy5nZXRGb2N1cygpO3RoaXMuX19rYT10aGlzLmdldEFjdGl2ZSgpO3RoaXMucmVzZXRBY3RpdmUoKTt0aGlzLnJlc2V0Rm9jdXMoKTt9fSwiZGVmYXVsdCI6bnVsbH0pKSxfX2tpOnF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QocXguY29yZS5WYXJpYW50LnNlbGVjdChqLHsiZ2Vja28iOmZ1bmN0aW9uKGJyKXt2YXIgYnM9cXguYm9tLkV2ZW50LmdldFRhcmdldChicik7aWYoYnM9PT10aGlzLl93aW5kb3d8fGJzPT09dGhpcy5fZG9jdW1lbnQpe3RoaXMuX19rZCgpO2JzPXRoaXMuX2JvZHk7fXRoaXMuc2V0Rm9jdXMoYnMpO3RoaXMudHJ5QWN0aXZhdGUoYnMpO30sIndlYmtpdCI6ZnVuY3Rpb24oYnQpe3ZhciBidT1xeC5ib20uRXZlbnQuZ2V0VGFyZ2V0KGJ0KTtpZihidT09PXRoaXMuX3dpbmRvd3x8YnU9PT10aGlzLl9kb2N1bWVudCl7dGhpcy5fX2tkKCk7aWYodGhpcy5fX2pZKXt0aGlzLnNldEZvY3VzKHRoaXMuX19qWSk7ZGVsZXRlIHRoaXMuX19qWTt9aWYodGhpcy5fX2thKXt0aGlzLnNldEFjdGl2ZSh0aGlzLl9fa2EpO2RlbGV0ZSB0aGlzLl9fa2E7fX1lbHNle3RoaXMuc2V0Rm9jdXMoYnUpO3RoaXMudHJ5QWN0aXZhdGUoYnUpO319LCJkZWZhdWx0IjpudWxsfSkpLF9fa2o6cXguZXZlbnQuR2xvYmFsRXJyb3Iub2JzZXJ2ZU1ldGhvZChxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGoseyJnZWNrbyI6ZnVuY3Rpb24oYnYpe3ZhciBieD1xeC5ib20uRXZlbnQuZ2V0VGFyZ2V0KGJ2KTt2YXIgYnc9dGhpcy5fX2tvKGJ4KTtpZighYncpe3F4LmJvbS5FdmVudC5wcmV2ZW50RGVmYXVsdChidik7fWVsc2UgaWYoYnc9PT10aGlzLl9ib2R5KXt0aGlzLnNldEZvY3VzKGJ3KTt9fSwibXNodG1sIjpmdW5jdGlvbihieSl7dmFyIGJBPXF4LmJvbS5FdmVudC5nZXRUYXJnZXQoYnkpO3ZhciBiej10aGlzLl9fa28oYkEpO2lmKGJ6KXtpZighdGhpcy5fX2txKGJBKSl7YkEudW5zZWxlY3RhYmxlPWU7dHJ5e2RvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpO31jYXRjaChiQil7fXRyeXtiei5mb2N1cygpO31jYXRjaChiQyl7fX19ZWxzZXtxeC5ib20uRXZlbnQucHJldmVudERlZmF1bHQoYnkpO2lmKCF0aGlzLl9fa3EoYkEpKXtiQS51bnNlbGVjdGFibGU9ZTt9fX0sIndlYmtpdCI6ZnVuY3Rpb24oYkQpe3ZhciBiRj1xeC5ib20uRXZlbnQuZ2V0VGFyZ2V0KGJEKTt2YXIgYkU9dGhpcy5fX2tvKGJGKTtpZihiRSl7dGhpcy5zZXRGb2N1cyhiRSk7fWVsc2V7cXguYm9tLkV2ZW50LnByZXZlbnREZWZhdWx0KGJEKTt9fSwib3BlcmEiOmZ1bmN0aW9uKGJHKXt2YXIgYko9cXguYm9tLkV2ZW50LmdldFRhcmdldChiRyk7dmFyIGJIPXRoaXMuX19rbyhiSik7aWYoIXRoaXMuX19rcShiSikpe3F4LmJvbS5FdmVudC5wcmV2ZW50RGVmYXVsdChiRyk7aWYoYkgpe3ZhciBiST10aGlzLmdldEZvY3VzKCk7aWYoYkkmJmJJLnNlbGVjdGlvbkVuZCl7Ykkuc2VsZWN0aW9uU3RhcnQ9MDtiSS5zZWxlY3Rpb25FbmQ9MDtiSS5ibHVyKCk7fWlmKGJIKXt0aGlzLnNldEZvY3VzKGJIKTt9fX1lbHNlIGlmKGJIKXt0aGlzLnNldEZvY3VzKGJIKTt9fSwiZGVmYXVsdCI6bnVsbH0pKSxfX2trOnF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QocXguY29yZS5WYXJpYW50LnNlbGVjdChqLHsibXNodG1sIjpmdW5jdGlvbihiSyl7dmFyIGJMPXF4LmJvbS5FdmVudC5nZXRUYXJnZXQoYkspO2lmKGJMLnVuc2VsZWN0YWJsZSl7YkwudW5zZWxlY3RhYmxlPXA7fXRoaXMudHJ5QWN0aXZhdGUodGhpcy5fX2tsKGJMKSk7fSwiZ2Vja28iOmZ1bmN0aW9uKGJNKXt2YXIgYk49cXguYm9tLkV2ZW50LmdldFRhcmdldChiTSk7d2hpbGUoYk4mJmJOLm9mZnNldFdpZHRoPT09dW5kZWZpbmVkKXtiTj1iTi5wYXJlbnROb2RlO31pZihiTil7dGhpcy50cnlBY3RpdmF0ZShiTik7fX0sIndlYmtpdHxvcGVyYSI6ZnVuY3Rpb24oYk8pe3ZhciBiUD1xeC5ib20uRXZlbnQuZ2V0VGFyZ2V0KGJPKTt0aGlzLnRyeUFjdGl2YXRlKHRoaXMuX19rbChiUCkpO30sImRlZmF1bHQiOm51bGx9KSksX19rbDpxeC5ldmVudC5HbG9iYWxFcnJvci5vYnNlcnZlTWV0aG9kKHF4LmNvcmUuVmFyaWFudC5zZWxlY3Qoaix7Im1zaHRtbHx3ZWJraXQiOmZ1bmN0aW9uKGJRKXt2YXIgYlI9dGhpcy5nZXRGb2N1cygpO2lmKGJSJiZiUSE9YlImJihiUi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09cnx8YlIubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXUpKXtiUT1iUjt9cmV0dXJuIGJRO30sImRlZmF1bHQiOmZ1bmN0aW9uKGJTKXtyZXR1cm4gYlM7fX0pKSxfX2ttOnF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QocXguY29yZS5WYXJpYW50LnNlbGVjdChqLHsibXNodG1sfHdlYmtpdCI6ZnVuY3Rpb24oYlQpe3ZhciBiVT1xeC5ib20uRXZlbnQuZ2V0VGFyZ2V0KGJUKTtpZighdGhpcy5fX2txKGJVKSl7cXguYm9tLkV2ZW50LnByZXZlbnREZWZhdWx0KGJUKTt9fSwiZGVmYXVsdCI6bnVsbH0pKSxfX2tuOmZ1bmN0aW9uKGJWKXt2YXIgYlc9cXguYm9tLmVsZW1lbnQuQXR0cmlidXRlLmdldChiVixvKTtpZihiVz49MSl7cmV0dXJuIHRydWU7fXZhciBiWD1xeC5ldmVudC5oYW5kbGVyLkZvY3VzLkZPQ1VTQUJMRV9FTEVNRU5UUztpZihiVz49MCYmYlhbYlYudGFnTmFtZV0pe3JldHVybiB0cnVlO31yZXR1cm4gZmFsc2U7fSxfX2tvOmZ1bmN0aW9uKGJZKXt3aGlsZShiWSYmYlkubm9kZVR5cGU9PT0xKXtpZihiWS5nZXRBdHRyaWJ1dGUoayk9PWUpe3JldHVybiBudWxsO31pZih0aGlzLl9fa24oYlkpKXtyZXR1cm4gYlk7fWJZPWJZLnBhcmVudE5vZGU7fXJldHVybiB0aGlzLl9ib2R5O30sX19rcDpmdW5jdGlvbihjYSl7dmFyIGNiPWNhO3doaWxlKGNhJiZjYS5ub2RlVHlwZT09PTEpe2lmKGNhLmdldEF0dHJpYnV0ZShsKT09ZSl7cmV0dXJuIG51bGw7fWNhPWNhLnBhcmVudE5vZGU7fXJldHVybiBjYjt9LF9fa3E6ZnVuY3Rpb24oY2Mpe3doaWxlKGNjJiZjYy5ub2RlVHlwZT09PTEpe3ZhciBjZD1jYy5nZXRBdHRyaWJ1dGUocSk7aWYoY2QhPW51bGwpe3JldHVybiBjZD09PWU7fWNjPWNjLnBhcmVudE5vZGU7fXJldHVybiB0cnVlO30sX2FwcGx5QWN0aXZlOmZ1bmN0aW9uKGNlLGNmKXtpZihjZil7dGhpcy5fX2tiKGNmLGNlLHYsdHJ1ZSk7fWlmKGNlKXt0aGlzLl9fa2IoY2UsY2YsbSx0cnVlKTt9fSxfYXBwbHlGb2N1czpmdW5jdGlvbihjZyxjaCl7aWYoY2gpe3RoaXMuX19rYihjaCxjZyxhLHRydWUpO31pZihjZyl7dGhpcy5fX2tiKGNnLGNoLGIsdHJ1ZSk7fWlmKGNoKXt0aGlzLl9fa2IoY2gsY2csZyxmYWxzZSk7fWlmKGNnKXt0aGlzLl9fa2IoY2csY2gsZixmYWxzZSk7fX19LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fc3RvcE9ic2VydmVyKCk7dGhpcy5fbWFuYWdlcj10aGlzLl93aW5kb3c9dGhpcy5fZG9jdW1lbnQ9dGhpcy5fcm9vdD10aGlzLl9ib2R5PXRoaXMuX19rcj1udWxsO30sZGVmZXI6ZnVuY3Rpb24oY2kpe3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5hZGRIYW5kbGVyKGNpKTt2YXIgY2o9Y2kuRk9DVVNBQkxFX0VMRU1FTlRTO2Zvcih2YXIgY2sgaW4gY2ope2NqW2NrLnRvVXBwZXJDYXNlKCldPTE7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSJxeC5jbGllbnQiLGo9ImNoYXJhY3RlciIsaT0iRW5kVG9FbmQiLGg9ImlucHV0IixnPSJ0ZXh0YXJlYSIsZj0iU3RhcnRUb1N0YXJ0IixlPSdjaGFyYWN0ZXInLGQ9InF4LmJvbS5TZWxlY3Rpb24iLGM9ImJ1dHRvbiIsYj0iI3RleHQiLGE9ImJvZHkiO3F4LkNsYXNzLmRlZmluZShkLHtzdGF0aWNzOntnZXRTZWxlY3Rpb25PYmplY3Q6cXguY29yZS5WYXJpYW50LnNlbGVjdChrLHsibXNodG1sIjpmdW5jdGlvbihsKXtyZXR1cm4gbC5zZWxlY3Rpb247fSwiZGVmYXVsdCI6ZnVuY3Rpb24obSl7cmV0dXJuIHF4LmRvbS5Ob2RlLmdldFdpbmRvdyhtKS5nZXRTZWxlY3Rpb24oKTt9fSksZ2V0OnF4LmNvcmUuVmFyaWFudC5zZWxlY3Qoayx7Im1zaHRtbCI6ZnVuY3Rpb24obil7dmFyIG89cXguYm9tLlJhbmdlLmdldChxeC5kb20uTm9kZS5nZXREb2N1bWVudChuKSk7cmV0dXJuIG8udGV4dDt9LCJkZWZhdWx0IjpmdW5jdGlvbihwKXtpZih0aGlzLl9fbGYocCkpe3JldHVybiBwLnZhbHVlLnN1YnN0cmluZyhwLnNlbGVjdGlvblN0YXJ0LHAuc2VsZWN0aW9uRW5kKTt9ZWxzZXtyZXR1cm4gdGhpcy5nZXRTZWxlY3Rpb25PYmplY3QocXguZG9tLk5vZGUuZ2V0RG9jdW1lbnQocCkpLnRvU3RyaW5nKCk7fX19KSxnZXRMZW5ndGg6cXguY29yZS5WYXJpYW50LnNlbGVjdChrLHsibXNodG1sIjpmdW5jdGlvbihxKXt2YXIgcz10aGlzLmdldChxKTt2YXIgcj1xeC51dGlsLlN0cmluZ1NwbGl0LnNwbGl0KHMsL1xyXG4vKTtyZXR1cm4gcy5sZW5ndGgtKHIubGVuZ3RoLTEpO30sIm9wZXJhIjpmdW5jdGlvbih0KXt2YXIgeSx3LHU7aWYodGhpcy5fX2xmKHQpKXt2YXIgeD10LnNlbGVjdGlvblN0YXJ0O3ZhciB2PXQuc2VsZWN0aW9uRW5kO3k9dC52YWx1ZS5zdWJzdHJpbmcoeCx2KTt3PXYteDt9ZWxzZXt5PXF4LmJvbS5TZWxlY3Rpb24uZ2V0KHQpO3c9eS5sZW5ndGg7fXU9cXgudXRpbC5TdHJpbmdTcGxpdC5zcGxpdCh5LC9cclxuLyk7cmV0dXJuIHctKHUubGVuZ3RoLTEpO30sImRlZmF1bHQiOmZ1bmN0aW9uKHope2lmKHRoaXMuX19sZih6KSl7cmV0dXJuIHouc2VsZWN0aW9uRW5kLXouc2VsZWN0aW9uU3RhcnQ7fWVsc2V7cmV0dXJuIHRoaXMuZ2V0KHopLmxlbmd0aDt9fX0pLGdldFN0YXJ0OnF4LmNvcmUuVmFyaWFudC5zZWxlY3Qoayx7Im1zaHRtbCI6ZnVuY3Rpb24oQSl7aWYodGhpcy5fX2xmKEEpKXt2YXIgRj1xeC5ib20uUmFuZ2UuZ2V0KCk7aWYoIUEuY29udGFpbnMoRi5wYXJlbnRFbGVtZW50KCkpKXtyZXR1cm4gLTE7fXZhciBHPXF4LmJvbS5SYW5nZS5nZXQoQSk7dmFyIEU9QS52YWx1ZS5sZW5ndGg7Ry5tb3ZlVG9Cb29rbWFyayhGLmdldEJvb2ttYXJrKCkpO0cubW92ZUVuZChlLEUpO3JldHVybiBFLUcudGV4dC5sZW5ndGg7fWVsc2V7dmFyIEc9cXguYm9tLlJhbmdlLmdldChBKTt2YXIgQz1HLnBhcmVudEVsZW1lbnQoKTt2YXIgSD1xeC5ib20uUmFuZ2UuZ2V0KCk7SC5tb3ZlVG9FbGVtZW50VGV4dChDKTt2YXIgQj1xeC5ib20uUmFuZ2UuZ2V0KHF4LmRvbS5Ob2RlLmdldEJvZHlFbGVtZW50KEEpKTtCLnNldEVuZFBvaW50KGYsRyk7Qi5zZXRFbmRQb2ludChpLEgpO2lmKEguY29tcGFyZUVuZFBvaW50cyhmLEIpPT0wKXtyZXR1cm4gMDt9dmFyIEQ7dmFyIEk9MDt3aGlsZSh0cnVlKXtEPUIubW92ZVN0YXJ0KGosLTEpO2lmKEguY29tcGFyZUVuZFBvaW50cyhmLEIpPT0wKXticmVhazt9aWYoRD09MCl7YnJlYWs7fWVsc2V7SSsrO319cmV0dXJuICsrSTt9fSwiZ2Vja298d2Via2l0IjpmdW5jdGlvbihKKXtpZih0aGlzLl9fbGYoSikpe3JldHVybiBKLnNlbGVjdGlvblN0YXJ0O31lbHNle3ZhciBMPXF4LmRvbS5Ob2RlLmdldERvY3VtZW50KEopO3ZhciBLPXRoaXMuZ2V0U2VsZWN0aW9uT2JqZWN0KEwpO2lmKEsuYW5jaG9yT2Zmc2V0PEsuZm9jdXNPZmZzZXQpe3JldHVybiBLLmFuY2hvck9mZnNldDt9ZWxzZXtyZXR1cm4gSy5mb2N1c09mZnNldDt9fX0sImRlZmF1bHQiOmZ1bmN0aW9uKE0pe2lmKHRoaXMuX19sZihNKSl7cmV0dXJuIE0uc2VsZWN0aW9uU3RhcnQ7fWVsc2V7cmV0dXJuIHF4LmJvbS5TZWxlY3Rpb24uZ2V0U2VsZWN0aW9uT2JqZWN0KHF4LmRvbS5Ob2RlLmdldERvY3VtZW50KE0pKS5hbmNob3JPZmZzZXQ7fX19KSxnZXRFbmQ6cXguY29yZS5WYXJpYW50LnNlbGVjdChrLHsibXNodG1sIjpmdW5jdGlvbihOKXtpZih0aGlzLl9fbGYoTikpe3ZhciBTPXF4LmJvbS5SYW5nZS5nZXQoKTtpZighTi5jb250YWlucyhTLnBhcmVudEVsZW1lbnQoKSkpe3JldHVybiAtMTt9dmFyIFQ9cXguYm9tLlJhbmdlLmdldChOKTt2YXIgUj1OLnZhbHVlLmxlbmd0aDtULm1vdmVUb0Jvb2ttYXJrKFMuZ2V0Qm9va21hcmsoKSk7VC5tb3ZlU3RhcnQoZSwtUik7cmV0dXJuIFQudGV4dC5sZW5ndGg7fWVsc2V7dmFyIFQ9cXguYm9tLlJhbmdlLmdldChOKTt2YXIgUD1ULnBhcmVudEVsZW1lbnQoKTt2YXIgVT1xeC5ib20uUmFuZ2UuZ2V0KCk7VS5tb3ZlVG9FbGVtZW50VGV4dChQKTt2YXIgUj1VLnRleHQubGVuZ3RoO3ZhciBPPXF4LmJvbS5SYW5nZS5nZXQocXguZG9tLk5vZGUuZ2V0Qm9keUVsZW1lbnQoTikpO08uc2V0RW5kUG9pbnQoaSxUKTtPLnNldEVuZFBvaW50KGYsVSk7aWYoVS5jb21wYXJlRW5kUG9pbnRzKGksTyk9PTApe3JldHVybiBSLTE7fXZhciBRO3ZhciBWPTA7d2hpbGUodHJ1ZSl7UT1PLm1vdmVFbmQoaiwxKTtpZihVLmNvbXBhcmVFbmRQb2ludHMoaSxPKT09MCl7YnJlYWs7fWlmKFE9PTApe2JyZWFrO31lbHNle1YrKzt9fXJldHVybiBSLSgrK1YpO319LCJnZWNrb3x3ZWJraXQiOmZ1bmN0aW9uKFcpe2lmKHRoaXMuX19sZihXKSl7cmV0dXJuIFcuc2VsZWN0aW9uRW5kO31lbHNle3ZhciBZPXF4LmRvbS5Ob2RlLmdldERvY3VtZW50KFcpO3ZhciBYPXRoaXMuZ2V0U2VsZWN0aW9uT2JqZWN0KFkpO2lmKFguZm9jdXNPZmZzZXQ+WC5hbmNob3JPZmZzZXQpe3JldHVybiBYLmZvY3VzT2Zmc2V0O31lbHNle3JldHVybiBYLmFuY2hvck9mZnNldDt9fX0sImRlZmF1bHQiOmZ1bmN0aW9uKGJhKXtpZih0aGlzLl9fbGYoYmEpKXtyZXR1cm4gYmEuc2VsZWN0aW9uRW5kO31lbHNle3JldHVybiBxeC5ib20uU2VsZWN0aW9uLmdldFNlbGVjdGlvbk9iamVjdChxeC5kb20uTm9kZS5nZXREb2N1bWVudChiYSkpLmZvY3VzT2Zmc2V0O319fSksX19sZjpmdW5jdGlvbihiYil7cmV0dXJuIHF4LmRvbS5Ob2RlLmlzRWxlbWVudChiYikmJihiYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT1ofHxiYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT1nKTt9LHNldDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGsseyJtc2h0bWwiOmZ1bmN0aW9uKGJjLGJkLGJlKXt2YXIgYmY7aWYocXguZG9tLk5vZGUuaXNEb2N1bWVudChiYykpe2JjPWJjLmJvZHk7fWlmKHF4LmRvbS5Ob2RlLmlzRWxlbWVudChiYyl8fHF4LmRvbS5Ob2RlLmlzVGV4dChiYykpe3N3aXRjaChiYy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtjYXNlIGg6Y2FzZSBnOmNhc2UgYzppZihiZT09PXVuZGVmaW5lZCl7YmU9YmMudmFsdWUubGVuZ3RoO31pZihiZD49MCYmYmQ8PWJjLnZhbHVlLmxlbmd0aCYmYmU+PTAmJmJlPD1iYy52YWx1ZS5sZW5ndGgpe2JmPXF4LmJvbS5SYW5nZS5nZXQoYmMpO2JmLmNvbGxhcHNlKHRydWUpO2JmLm1vdmVTdGFydChqLGJkKTtiZi5tb3ZlRW5kKGosYmUtYmQpO2JmLnNlbGVjdCgpO3JldHVybiB0cnVlO31icmVhaztjYXNlIGI6aWYoYmU9PT11bmRlZmluZWQpe2JlPWJjLm5vZGVWYWx1ZS5sZW5ndGg7fWlmKGJkPj0wJiZiZDw9YmMubm9kZVZhbHVlLmxlbmd0aCYmYmU+PTAmJmJlPD1iYy5ub2RlVmFsdWUubGVuZ3RoKXtiZj1xeC5ib20uUmFuZ2UuZ2V0KHF4LmRvbS5Ob2RlLmdldEJvZHlFbGVtZW50KGJjKSk7YmYubW92ZVRvRWxlbWVudFRleHQoYmMucGFyZW50Tm9kZSk7YmYuY29sbGFwc2UodHJ1ZSk7YmYubW92ZVN0YXJ0KGosYmQpO2JmLm1vdmVFbmQoaixiZS1iZCk7YmYuc2VsZWN0KCk7cmV0dXJuIHRydWU7fWJyZWFrO2RlZmF1bHQ6aWYoYmU9PT11bmRlZmluZWQpe2JlPWJjLmNoaWxkTm9kZXMubGVuZ3RoLTE7fWlmKGJjLmNoaWxkTm9kZXNbYmRdJiZiYy5jaGlsZE5vZGVzW2JlXSl7YmY9cXguYm9tLlJhbmdlLmdldChxeC5kb20uTm9kZS5nZXRCb2R5RWxlbWVudChiYykpO2JmLm1vdmVUb0VsZW1lbnRUZXh0KGJjLmNoaWxkTm9kZXNbYmRdKTtiZi5jb2xsYXBzZSh0cnVlKTt2YXIgYmc9cXguYm9tLlJhbmdlLmdldChxeC5kb20uTm9kZS5nZXRCb2R5RWxlbWVudChiYykpO2JnLm1vdmVUb0VsZW1lbnRUZXh0KGJjLmNoaWxkTm9kZXNbYmVdKTtiZi5zZXRFbmRQb2ludChpLGJnKTtiZi5zZWxlY3QoKTtyZXR1cm4gdHJ1ZTt9fX1yZXR1cm4gZmFsc2U7fSwiZGVmYXVsdCI6ZnVuY3Rpb24oYmgsYmksYmope3ZhciBibj1iaC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHF4LmRvbS5Ob2RlLmlzRWxlbWVudChiaCkmJihibj09aHx8Ym49PWcpKXtpZihiaj09PXVuZGVmaW5lZCl7Ymo9YmgudmFsdWUubGVuZ3RoO31pZihiaT49MCYmYmk8PWJoLnZhbHVlLmxlbmd0aCYmYmo+PTAmJmJqPD1iaC52YWx1ZS5sZW5ndGgpe2JoLmZvY3VzKCk7Ymguc2VsZWN0KCk7Ymguc2V0U2VsZWN0aW9uUmFuZ2UoYmksYmopO3JldHVybiB0cnVlO319ZWxzZXt2YXIgYmw9ZmFsc2U7dmFyIGJtPXF4LmRvbS5Ob2RlLmdldFdpbmRvdyhiaCkuZ2V0U2VsZWN0aW9uKCk7dmFyIGJrPXF4LmJvbS5SYW5nZS5nZXQoYmgpO2lmKHF4LmRvbS5Ob2RlLmlzVGV4dChiaCkpe2lmKGJqPT09dW5kZWZpbmVkKXtiaj1iaC5sZW5ndGg7fWlmKGJpPj0wJiZiaTxiaC5sZW5ndGgmJmJqPj0wJiZiajw9YmgubGVuZ3RoKXtibD10cnVlO319ZWxzZSBpZihxeC5kb20uTm9kZS5pc0VsZW1lbnQoYmgpKXtpZihiaj09PXVuZGVmaW5lZCl7Ymo9YmguY2hpbGROb2Rlcy5sZW5ndGgtMTt9aWYoYmk+PTAmJmJoLmNoaWxkTm9kZXNbYmldJiZiaj49MCYmYmguY2hpbGROb2Rlc1tial0pe2JsPXRydWU7fX1lbHNlIGlmKHF4LmRvbS5Ob2RlLmlzRG9jdW1lbnQoYmgpKXtiaD1iaC5ib2R5O2lmKGJqPT09dW5kZWZpbmVkKXtiaj1iaC5jaGlsZE5vZGVzLmxlbmd0aC0xO31pZihiaT49MCYmYmguY2hpbGROb2Rlc1tiaV0mJmJqPj0wJiZiaC5jaGlsZE5vZGVzW2JqXSl7Ymw9dHJ1ZTt9fWlmKGJsKXtpZighYm0uaXNDb2xsYXBzZWQpe2JtLmNvbGxhcHNlVG9TdGFydCgpO31iay5zZXRTdGFydChiaCxiaSk7aWYocXguZG9tLk5vZGUuaXNUZXh0KGJoKSl7Ymsuc2V0RW5kKGJoLGJqKTt9ZWxzZXtiay5zZXRFbmRBZnRlcihiaC5jaGlsZE5vZGVzW2JqXSk7fWlmKGJtLnJhbmdlQ291bnQ+MCl7Ym0ucmVtb3ZlQWxsUmFuZ2VzKCk7fWJtLmFkZFJhbmdlKGJrKTtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9fSksc2V0QWxsOmZ1bmN0aW9uKGJvKXtyZXR1cm4gcXguYm9tLlNlbGVjdGlvbi5zZXQoYm8sMCk7fSxjbGVhcjpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGsseyJtc2h0bWwiOmZ1bmN0aW9uKGJwKXt2YXIgYnE9cXguYm9tLlNlbGVjdGlvbi5nZXRTZWxlY3Rpb25PYmplY3QocXguZG9tLk5vZGUuZ2V0RG9jdW1lbnQoYnApKTt2YXIgYnI9cXguYm9tLlJhbmdlLmdldChicCk7dmFyIHBhcmVudD1ici5wYXJlbnRFbGVtZW50KCk7dmFyIGJzPXF4LmJvbS5SYW5nZS5nZXQocXguZG9tLk5vZGUuZ2V0RG9jdW1lbnQoYnApKTtpZihwYXJlbnQ9PWJzLnBhcmVudEVsZW1lbnQoKSYmcGFyZW50PT1icCl7YnEuZW1wdHkoKTt9fSwiZGVmYXVsdCI6ZnVuY3Rpb24oYnQpe3ZhciBidj1xeC5ib20uU2VsZWN0aW9uLmdldFNlbGVjdGlvbk9iamVjdChxeC5kb20uTm9kZS5nZXREb2N1bWVudChidCkpO3ZhciBieD1idC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHF4LmRvbS5Ob2RlLmlzRWxlbWVudChidCkmJihieD09aHx8Yng9PWcpKXtidC5zZXRTZWxlY3Rpb25SYW5nZSgwLDApO3F4LmJvbS5FbGVtZW50LmJsdXIoYnQpO31lbHNlIGlmKHF4LmRvbS5Ob2RlLmlzRG9jdW1lbnQoYnQpfHxieD09YSl7YnYuY29sbGFwc2UoYnQuYm9keT9idC5ib2R5OmJ0LDApO31lbHNle3ZhciBidz1xeC5ib20uUmFuZ2UuZ2V0KGJ0KTtpZighYncuY29sbGFwc2VkKXt2YXIgYnk7dmFyIGJ1PWJ3LmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO2lmKHF4LmRvbS5Ob2RlLmlzRWxlbWVudChidCkmJnF4LmRvbS5Ob2RlLmlzVGV4dChidSkpe2J5PWJ1LnBhcmVudE5vZGU7fWVsc2V7Ynk9YnU7fWlmKGJ5PT1idCl7YnYuY29sbGFwc2UoYnQsMCk7fX19fX0pfX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGw9ImJ1dHRvbiIsaz0icXguYm9tLlJhbmdlIixqPSJ0ZXh0IixpPSJwYXNzd29yZCIsaD0iZmlsZSIsZz0ic3VibWl0IixmPSJyZXNldCIsZT0idGV4dGFyZWEiLGQ9ImlucHV0IixjPSJoaWRkZW4iLGE9InF4LmNsaWVudCIsYj0iYm9keSI7cXguQ2xhc3MuZGVmaW5lKGsse3N0YXRpY3M6e2dldDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGEseyJtc2h0bWwiOmZ1bmN0aW9uKG0pe2lmKHF4LmRvbS5Ob2RlLmlzRWxlbWVudChtKSl7c3dpdGNoKG0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Y2FzZSBkOnN3aXRjaChtLnR5cGUpe2Nhc2UgajpjYXNlIGk6Y2FzZSBjOmNhc2UgbDpjYXNlIGY6Y2FzZSBoOmNhc2UgZzpyZXR1cm4gbS5jcmVhdGVUZXh0UmFuZ2UoKTticmVhaztkZWZhdWx0OnJldHVybiBxeC5ib20uU2VsZWN0aW9uLmdldFNlbGVjdGlvbk9iamVjdChxeC5kb20uTm9kZS5nZXREb2N1bWVudChtKSkuY3JlYXRlUmFuZ2UoKTt9YnJlYWs7Y2FzZSBlOmNhc2UgYjpjYXNlIGw6cmV0dXJuIG0uY3JlYXRlVGV4dFJhbmdlKCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gcXguYm9tLlNlbGVjdGlvbi5nZXRTZWxlY3Rpb25PYmplY3QocXguZG9tLk5vZGUuZ2V0RG9jdW1lbnQobSkpLmNyZWF0ZVJhbmdlKCk7fX1lbHNle2lmKG09PW51bGwpe209d2luZG93O31yZXR1cm4gcXguYm9tLlNlbGVjdGlvbi5nZXRTZWxlY3Rpb25PYmplY3QocXguZG9tLk5vZGUuZ2V0RG9jdW1lbnQobSkpLmNyZWF0ZVJhbmdlKCk7fX0sImRlZmF1bHQiOmZ1bmN0aW9uKG4pe3ZhciBvPXF4LmRvbS5Ob2RlLmdldERvY3VtZW50KG4pO3ZhciBwPXF4LmJvbS5TZWxlY3Rpb24uZ2V0U2VsZWN0aW9uT2JqZWN0KG8pO2lmKHAucmFuZ2VDb3VudD4wKXtyZXR1cm4gcC5nZXRSYW5nZUF0KDApO31lbHNle3JldHVybiBvLmNyZWF0ZVJhbmdlKCk7fX19KX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBqPSIiLGg9Im0iLGc9ImciLGY9Il4iLGU9InF4LnV0aWwuU3RyaW5nU3BsaXQiLGQ9ImkiLGM9IiQoPyFcXHMpIixiPSJbb2JqZWN0IFJlZ0V4cF0iLGE9InkiO3F4LkNsYXNzLmRlZmluZShlLHtzdGF0aWNzOntzcGxpdDpmdW5jdGlvbihrLGwsbSl7aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpIT09Yil7cmV0dXJuIFN0cmluZy5wcm90b3R5cGUuc3BsaXQuY2FsbChrLGwsbSk7fXZhciB0PVtdLG49MCxyPShsLmlnbm9yZUNhc2U/ZDpqKSsobC5tdWx0aWxpbmU/aDpqKSsobC5zdGlja3k/YTpqKSxsPVJlZ0V4cChsLnNvdXJjZSxyK2cpLHEsdSxvLHAscz0vKCk/Py8uZXhlYyhqKVsxXT09PXVuZGVmaW5lZDtrPWsrajtpZighcyl7cT1SZWdFeHAoZitsLnNvdXJjZStjLHIpO31pZihtPT09dW5kZWZpbmVkfHwrbTwwKXttPUluZmluaXR5O31lbHNle209TWF0aC5mbG9vcigrbSk7aWYoIW0pe3JldHVybiBbXTt9fXdoaWxlKHU9bC5leGVjKGspKXtvPXUuaW5kZXgrdVswXS5sZW5ndGg7aWYobz5uKXt0LnB1c2goay5zbGljZShuLHUuaW5kZXgpKTtpZighcyYmdS5sZW5ndGg+MSl7dVswXS5yZXBsYWNlKHEsZnVuY3Rpb24oKXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGgtMjtpKyspe2lmKGFyZ3VtZW50c1tpXT09PXVuZGVmaW5lZCl7dVtpXT11bmRlZmluZWQ7fX19KTt9aWYodS5sZW5ndGg+MSYmdS5pbmRleDxrLmxlbmd0aCl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodCx1LnNsaWNlKDEpKTt9cD11WzBdLmxlbmd0aDtuPW87aWYodC5sZW5ndGg+PW0pe2JyZWFrO319aWYobC5sYXN0SW5kZXg9PT11LmluZGV4KXtsLmxhc3RJbmRleCsrO319aWYobj09PWsubGVuZ3RoKXtpZihwfHwhbC50ZXN0KGopKXt0LnB1c2goaik7fX1lbHNle3QucHVzaChrLnNsaWNlKG4pKTt9cmV0dXJuIHQubGVuZ3RoPm0/dC5zbGljZSgwLG0pOnQ7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC5ldmVudC50eXBlLkZvY3VzIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LmV2ZW50LnR5cGUuRXZlbnQsbWVtYmVyczp7aW5pdDpmdW5jdGlvbihiLGMsZCl7cXguZXZlbnQudHlwZS5FdmVudC5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMsZCxmYWxzZSk7dGhpcy5fdGFyZ2V0PWI7dGhpcy5fcmVsYXRlZFRhcmdldD1jO3JldHVybiB0aGlzO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaj0iIixpPSJ1bmRlZmluZWQiLGg9InF4LmNsaWVudCIsZz0icmVhZE9ubHkiLGY9ImFjY2Vzc0tleSIsZT0icXguYm9tLmVsZW1lbnQuQXR0cmlidXRlIixkPSJyb3dTcGFuIixjPSJ2QWxpZ24iLGI9ImNsYXNzTmFtZSIsYT0idGV4dENvbnRlbnQiLHk9IiciLHg9Imh0bWxGb3IiLHc9ImxvbmdEZXNjIix2PSJjZWxsU3BhY2luZyIsdT0iZnJhbWVCb3JkZXIiLHQ9Ij0nIixzPSJ1c2VNYXAiLHI9ImlubmVyVGV4dCIscT0iaW5uZXJIVE1MIixwPSJ0YWJJbmRleCIsbj0iZGF0ZVRpbWUiLG89Im1heExlbmd0aCIsbD0ibXNodG1sIixtPSJjZWxsUGFkZGluZyIsaz0iY29sU3BhbiI7cXguQ2xhc3MuZGVmaW5lKGUse3N0YXRpY3M6e19faGI6e25hbWVzOnsiY2xhc3MiOmIsImZvciI6eCxodG1sOnEsdGV4dDpxeC5jb3JlLlZhcmlhbnQuaXNTZXQoaCxsKT9yOmEsY29sc3BhbjprLHJvd3NwYW46ZCx2YWxpZ246YyxkYXRldGltZTpuLGFjY2Vzc2tleTpmLHRhYmluZGV4OnAsbWF4bGVuZ3RoOm8scmVhZG9ubHk6Zyxsb25nZGVzYzp3LGNlbGxwYWRkaW5nOm0sY2VsbHNwYWNpbmc6dixmcmFtZWJvcmRlcjp1LHVzZW1hcDpzfSxydW50aW1lOnsiaHRtbCI6MSwidGV4dCI6MX0sYm9vbHM6e2NvbXBhY3Q6MSxub3dyYXA6MSxpc21hcDoxLGRlY2xhcmU6MSxub3NoYWRlOjEsY2hlY2tlZDoxLGRpc2FibGVkOjEscmVhZE9ubHk6MSxtdWx0aXBsZToxLHNlbGVjdGVkOjEsbm9yZXNpemU6MSxkZWZlcjoxLGFsbG93VHJhbnNwYXJlbmN5OjF9LHByb3BlcnR5OnskJGh0bWw6MSwkJHdpZGdldDoxLGRpc2FibGVkOjEsY2hlY2tlZDoxLHJlYWRPbmx5OjEsbXVsdGlwbGU6MSxzZWxlY3RlZDoxLHZhbHVlOjEsbWF4TGVuZ3RoOjEsY2xhc3NOYW1lOjEsaW5uZXJIVE1MOjEsaW5uZXJUZXh0OjEsdGV4dENvbnRlbnQ6MSxodG1sRm9yOjEsdGFiSW5kZXg6MX0scXhQcm9wZXJ0aWVzOnskJHdpZGdldDoxLCQkaHRtbDoxfSxwcm9wZXJ0eURlZmF1bHQ6e2Rpc2FibGVkOmZhbHNlLGNoZWNrZWQ6ZmFsc2UscmVhZE9ubHk6ZmFsc2UsbXVsdGlwbGU6ZmFsc2Usc2VsZWN0ZWQ6ZmFsc2UsdmFsdWU6aixjbGFzc05hbWU6aixpbm5lckhUTUw6aixpbm5lclRleHQ6aix0ZXh0Q29udGVudDpqLGh0bWxGb3I6aix0YWJJbmRleDowLG1heExlbmd0aDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGgseyJtc2h0bWwiOjIxNDc0ODM2NDcsIndlYmtpdCI6NTI0Mjg4LCJkZWZhdWx0IjotMX0pfSxyZW1vdmVhYmxlUHJvcGVydGllczp7ZGlzYWJsZWQ6MSxtdWx0aXBsZToxLG1heExlbmd0aDoxfSxvcmlnaW5hbDp7aHJlZjoxLHNyYzoxLHR5cGU6MX19LGNvbXBpbGU6ZnVuY3Rpb24oeil7dmFyIEE9W107dmFyIEM9dGhpcy5fX2hiLnJ1bnRpbWU7Zm9yKHZhciBCIGluIHope2lmKCFDW0JdKXtBLnB1c2goQix0LHpbQl0seSk7fX1yZXR1cm4gQS5qb2luKGopO30sZ2V0OnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoaCx7Im1zaHRtbCI6ZnVuY3Rpb24oRCxuYW1lKXt2YXIgRj10aGlzLl9faGI7dmFyIEU7bmFtZT1GLm5hbWVzW25hbWVdfHxuYW1lO2lmKEYub3JpZ2luYWxbbmFtZV0pe0U9RC5nZXRBdHRyaWJ1dGUobmFtZSwyKTt9ZWxzZSBpZihGLnByb3BlcnR5W25hbWVdKXtFPURbbmFtZV07aWYodHlwZW9mIEYucHJvcGVydHlEZWZhdWx0W25hbWVdIT09aSYmRT09Ri5wcm9wZXJ0eURlZmF1bHRbbmFtZV0pe2lmKHR5cGVvZiBGLmJvb2xzW25hbWVdPT09aSl7cmV0dXJuIG51bGw7fWVsc2V7cmV0dXJuIEU7fX19ZWxzZXtFPUQuZ2V0QXR0cmlidXRlKG5hbWUpO31pZihGLmJvb2xzW25hbWVdKXtyZXR1cm4gISFFO31yZXR1cm4gRTt9LCJkZWZhdWx0IjpmdW5jdGlvbihHLG5hbWUpe3ZhciBJPXRoaXMuX19oYjt2YXIgSDtuYW1lPUkubmFtZXNbbmFtZV18fG5hbWU7aWYoSS5wcm9wZXJ0eVtuYW1lXSl7SD1HW25hbWVdO2lmKHR5cGVvZiBJLnByb3BlcnR5RGVmYXVsdFtuYW1lXSE9PWkmJkg9PUkucHJvcGVydHlEZWZhdWx0W25hbWVdKXtpZih0eXBlb2YgSS5ib29sc1tuYW1lXT09PWkpe3JldHVybiBudWxsO31lbHNle3JldHVybiBIO319fWVsc2V7SD1HLmdldEF0dHJpYnV0ZShuYW1lKTt9aWYoSS5ib29sc1tuYW1lXSl7cmV0dXJuICEhSDt9cmV0dXJuIEg7fX0pLHNldDpmdW5jdGlvbihKLG5hbWUsSyl7aWYodHlwZW9mIEs9PT1pKXtyZXR1cm47fXZhciBMPXRoaXMuX19oYjtuYW1lPUwubmFtZXNbbmFtZV18fG5hbWU7aWYoTC5ib29sc1tuYW1lXSl7Sz0hIUs7fWlmKEwucHJvcGVydHlbbmFtZV0mJighKEpbbmFtZV09PT11bmRlZmluZWQpfHxMLnF4UHJvcGVydGllc1tuYW1lXSkpe2lmKEs9PW51bGwpe2lmKEwucmVtb3ZlYWJsZVByb3BlcnRpZXNbbmFtZV0pe0oucmVtb3ZlQXR0cmlidXRlKG5hbWUpO3JldHVybjt9ZWxzZSBpZih0eXBlb2YgTC5wcm9wZXJ0eURlZmF1bHRbbmFtZV0hPT1pKXtLPUwucHJvcGVydHlEZWZhdWx0W25hbWVdO319SltuYW1lXT1LO31lbHNle2lmKEs9PT10cnVlKXtKLnNldEF0dHJpYnV0ZShuYW1lLG5hbWUpO31lbHNlIGlmKEs9PT1mYWxzZXx8Sz09PW51bGwpe0oucmVtb3ZlQXR0cmlidXRlKG5hbWUpO31lbHNle0ouc2V0QXR0cmlidXRlKG5hbWUsSyk7fX19LHJlc2V0OmZ1bmN0aW9uKE0sbmFtZSl7dGhpcy5zZXQoTSxuYW1lLG51bGwpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXguZXZlbnQudHlwZS5EcmFnIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LmV2ZW50LnR5cGUuRXZlbnQsbWVtYmVyczp7aW5pdDpmdW5jdGlvbihiLGMpe3F4LmV2ZW50LnR5cGUuRXZlbnQucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzLHRydWUsYik7aWYoYyl7dGhpcy5fbmF0aXZlPWMuZ2V0TmF0aXZlRXZlbnQoKXx8bnVsbDt0aGlzLl9vcmlnaW5hbFRhcmdldD1jLmdldFRhcmdldCgpfHxudWxsO31lbHNle3RoaXMuX25hdGl2ZT1udWxsO3RoaXMuX29yaWdpbmFsVGFyZ2V0PW51bGw7fXJldHVybiB0aGlzO30sY2xvbmU6ZnVuY3Rpb24oZCl7dmFyIGU9cXguZXZlbnQudHlwZS5FdmVudC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzLGQpO2UuX25hdGl2ZT10aGlzLl9uYXRpdmU7cmV0dXJuIGU7fSxnZXREb2N1bWVudExlZnQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9uYXRpdmU9PW51bGwpe3JldHVybiAwO31pZih0aGlzLl9uYXRpdmUucGFnZVghPT11bmRlZmluZWQpe3JldHVybiB0aGlzLl9uYXRpdmUucGFnZVg7fWVsc2V7dmFyIGY9cXguZG9tLk5vZGUuZ2V0V2luZG93KHRoaXMuX25hdGl2ZS5zcmNFbGVtZW50KTtyZXR1cm4gdGhpcy5fbmF0aXZlLmNsaWVudFgrcXguYm9tLlZpZXdwb3J0LmdldFNjcm9sbExlZnQoZik7fX0sZ2V0RG9jdW1lbnRUb3A6ZnVuY3Rpb24oKXtpZih0aGlzLl9uYXRpdmU9PW51bGwpe3JldHVybiAwO31pZih0aGlzLl9uYXRpdmUucGFnZVkhPT11bmRlZmluZWQpe3JldHVybiB0aGlzLl9uYXRpdmUucGFnZVk7fWVsc2V7dmFyIGc9cXguZG9tLk5vZGUuZ2V0V2luZG93KHRoaXMuX25hdGl2ZS5zcmNFbGVtZW50KTtyZXR1cm4gdGhpcy5fbmF0aXZlLmNsaWVudFkrcXguYm9tLlZpZXdwb3J0LmdldFNjcm9sbFRvcChnKTt9fSxnZXRNYW5hZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5nZXRNYW5hZ2VyKHRoaXMuZ2V0VGFyZ2V0KCkpLmdldEhhbmRsZXIocXguZXZlbnQuaGFuZGxlci5EcmFnRHJvcCk7fSxhZGRUeXBlOmZ1bmN0aW9uKGgpe3RoaXMuZ2V0TWFuYWdlcigpLmFkZFR5cGUoaCk7fSxhZGRBY3Rpb246ZnVuY3Rpb24oaSl7dGhpcy5nZXRNYW5hZ2VyKCkuYWRkQWN0aW9uKGkpO30sc3VwcG9ydHNUeXBlOmZ1bmN0aW9uKGope3JldHVybiB0aGlzLmdldE1hbmFnZXIoKS5zdXBwb3J0c1R5cGUoaik7fSxzdXBwb3J0c0FjdGlvbjpmdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5nZXRNYW5hZ2VyKCkuc3VwcG9ydHNBY3Rpb24oayk7fSxhZGREYXRhOmZ1bmN0aW9uKGwsbSl7dGhpcy5nZXRNYW5hZ2VyKCkuYWRkRGF0YShsLG0pO30sZ2V0RGF0YTpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5nZXRNYW5hZ2VyKCkuZ2V0RGF0YShuKTt9LGdldEN1cnJlbnRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TWFuYWdlcigpLmdldEN1cnJlbnRUeXBlKCk7fSxnZXRDdXJyZW50QWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TWFuYWdlcigpLmdldEN1cnJlbnRBY3Rpb24oKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGg9ImludGVydmFsIixnPSJxeC5ldmVudC5UaW1lciIsZj0iX2FwcGx5SW50ZXJ2YWwiLGQ9Il9hcHBseUVuYWJsZWQiLGM9IkJvb2xlYW4iLGI9InF4LmV2ZW50LnR5cGUuRXZlbnQiLGE9IkludGVnZXIiO3F4LkNsYXNzLmRlZmluZShnLHtleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKGkpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7dGhpcy5zZXRFbmFibGVkKGZhbHNlKTtpZihpIT1udWxsKXt0aGlzLnNldEludGVydmFsKGkpO312YXIgc2VsZj10aGlzO3RoaXMuX19leT1mdW5jdGlvbigpe3NlbGYuX29uaW50ZXJ2YWwuY2FsbChzZWxmKTt9O30sZXZlbnRzOnsiaW50ZXJ2YWwiOmJ9LHN0YXRpY3M6e29uY2U6ZnVuY3Rpb24oaixrLGwpe3ZhciBtPW5ldyBxeC5ldmVudC5UaW1lcihsKTttLl9fZXo9ajttLmFkZExpc3RlbmVyKGgsZnVuY3Rpb24oZSl7bS5zdG9wKCk7ai5jYWxsKGssZSk7bS5kaXNwb3NlKCk7az1udWxsO30sayk7bS5zdGFydCgpO3JldHVybiBtO319LHByb3BlcnRpZXM6e2VuYWJsZWQ6e2luaXQ6dHJ1ZSxjaGVjazpjLGFwcGx5OmR9LGludGVydmFsOntjaGVjazphLGluaXQ6MTAwMCxhcHBseTpmfX0sbWVtYmVyczp7X19lQTpudWxsLF9fZXk6bnVsbCxfYXBwbHlJbnRlcnZhbDpmdW5jdGlvbihuLG8pe2lmKHRoaXMuZ2V0RW5hYmxlZCgpKXt0aGlzLnJlc3RhcnQoKTt9fSxfYXBwbHlFbmFibGVkOmZ1bmN0aW9uKHAscSl7aWYocSl7d2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fX2VBKTt0aGlzLl9fZUE9bnVsbDt9ZWxzZSBpZihwKXt0aGlzLl9fZUE9d2luZG93LnNldEludGVydmFsKHRoaXMuX19leSx0aGlzLmdldEludGVydmFsKCkpO319LHN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zZXRFbmFibGVkKHRydWUpO30sc3RhcnRXaXRoOmZ1bmN0aW9uKHIpe3RoaXMuc2V0SW50ZXJ2YWwocik7dGhpcy5zdGFydCgpO30sc3RvcDpmdW5jdGlvbigpe3RoaXMuc2V0RW5hYmxlZChmYWxzZSk7fSxyZXN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdG9wKCk7dGhpcy5zdGFydCgpO30scmVzdGFydFdpdGg6ZnVuY3Rpb24ocyl7dGhpcy5zdG9wKCk7dGhpcy5zdGFydFdpdGgocyk7fSxfb25pbnRlcnZhbDpxeC5ldmVudC5HbG9iYWxFcnJvci5vYnNlcnZlTWV0aG9kKGZ1bmN0aW9uKCl7aWYodGhpcy4kJGRpc3Bvc2VkKXtyZXR1cm47fWlmKHRoaXMuZ2V0RW5hYmxlZCgpKXt0aGlzLmZpcmVFdmVudChoKTt9fSl9LGRlc3RydWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5fX2VBKXt3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl9fZUEpO310aGlzLl9fZUE9dGhpcy5fX2V5PW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGg9Imxvc2VjYXB0dXJlIixnPSJxeC5jbGllbnQiLGY9ImJsdXIiLGU9ImZvY3VzIixkPSJjbGljayIsYz0icXguZXZlbnQuZGlzcGF0Y2guTW91c2VDYXB0dXJlIixiPSJjYXB0dXJlIixhPSJzY3JvbGwiO3F4LkNsYXNzLmRlZmluZShjLHtleHRlbmQ6cXguZXZlbnQuZGlzcGF0Y2guQWJzdHJhY3RCdWJibGluZyxjb25zdHJ1Y3Q6ZnVuY3Rpb24oaSxqKXtxeC5ldmVudC5kaXNwYXRjaC5BYnN0cmFjdEJ1YmJsaW5nLmNhbGwodGhpcyxpKTt0aGlzLl9faXg9aS5nZXRXaW5kb3coKTt0aGlzLl9faXk9ajtpLmFkZExpc3RlbmVyKHRoaXMuX19peCxmLHRoaXMucmVsZWFzZUNhcHR1cmUsdGhpcyk7aS5hZGRMaXN0ZW5lcih0aGlzLl9faXgsZSx0aGlzLnJlbGVhc2VDYXB0dXJlLHRoaXMpO2kuYWRkTGlzdGVuZXIodGhpcy5fX2l4LGEsdGhpcy5yZWxlYXNlQ2FwdHVyZSx0aGlzKTt9LHN0YXRpY3M6e1BSSU9SSVRZOnF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5QUklPUklUWV9GSVJTVH0sbWVtYmVyczp7X19peTpudWxsLF9faXo6bnVsbCxfX2lBOnRydWUsX19peDpudWxsLF9nZXRQYXJlbnQ6ZnVuY3Rpb24oayl7cmV0dXJuIGsucGFyZW50Tm9kZTt9LGNhbkRpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24obCxldmVudCxtKXtyZXR1cm4gKHRoaXMuX19peiYmdGhpcy5fX2lCW21dKTt9LGRpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24obixldmVudCxvKXtpZihvPT1kKXtldmVudC5zdG9wUHJvcGFnYXRpb24oKTt0aGlzLnJlbGVhc2VDYXB0dXJlKCk7cmV0dXJuO31pZih0aGlzLl9faUF8fCFxeC5kb20uSGllcmFyY2h5LmNvbnRhaW5zKHRoaXMuX19peixuKSl7bj10aGlzLl9faXo7fXF4LmV2ZW50LmRpc3BhdGNoLkFic3RyYWN0QnViYmxpbmcucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQuY2FsbCh0aGlzLG4sZXZlbnQsbyk7fSxfX2lCOnsibW91c2V1cCI6MSwibW91c2Vkb3duIjoxLCJjbGljayI6MSwiZGJsY2xpY2siOjEsIm1vdXNlbW92ZSI6MSwibW91c2VvdXQiOjEsIm1vdXNlb3ZlciI6MX0sYWN0aXZhdGVDYXB0dXJlOmZ1bmN0aW9uKHAscSl7dmFyIHE9cSE9PWZhbHNlO2lmKHRoaXMuX19pej09PXAmJnRoaXMuX19pQT09cSl7cmV0dXJuO31pZih0aGlzLl9faXope3RoaXMucmVsZWFzZUNhcHR1cmUoKTt9dGhpcy5uYXRpdmVTZXRDYXB0dXJlKHAscSk7aWYodGhpcy5oYXNOYXRpdmVDYXB0dXJlKXt2YXIgc2VsZj10aGlzO3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcihwLGgsZnVuY3Rpb24oKXtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIocCxoLGFyZ3VtZW50cy5jYWxsZWUpO3NlbGYucmVsZWFzZUNhcHR1cmUoKTt9KTt9dGhpcy5fX2lBPXE7dGhpcy5fX2l6PXA7dGhpcy5fX2l5LmZpcmVFdmVudChwLGIscXguZXZlbnQudHlwZS5FdmVudCxbdHJ1ZSxmYWxzZV0pO30sZ2V0Q2FwdHVyZUVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2l6O30scmVsZWFzZUNhcHR1cmU6ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9faXo7aWYoIXIpe3JldHVybjt9dGhpcy5fX2l6PW51bGw7dGhpcy5fX2l5LmZpcmVFdmVudChyLGgscXguZXZlbnQudHlwZS5FdmVudCxbdHJ1ZSxmYWxzZV0pO3RoaXMubmF0aXZlUmVsZWFzZUNhcHR1cmUocik7fSxoYXNOYXRpdmVDYXB0dXJlOnF4LmJvbS5jbGllbnQuRW5naW5lLk1TSFRNTCxuYXRpdmVTZXRDYXB0dXJlOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoZyx7Im1zaHRtbCI6ZnVuY3Rpb24ocyx0KXtxeC5ldmVudC5UaW1lci5vbmNlKGZ1bmN0aW9uKCl7cy5zZXRDYXB0dXJlKHQhPT1mYWxzZSk7fSx0aGlzLDApO30sImRlZmF1bHQiOnF4LmxhbmcuRnVuY3Rpb24uZW1wdHl9KSxuYXRpdmVSZWxlYXNlQ2FwdHVyZTpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGcseyJtc2h0bWwiOmZ1bmN0aW9uKHUpe3F4LmV2ZW50LlRpbWVyLm9uY2UoZnVuY3Rpb24oKXt1LnJlbGVhc2VDYXB0dXJlKCk7fSx0aGlzLDApO30sImRlZmF1bHQiOnF4LmxhbmcuRnVuY3Rpb24uZW1wdHl9KX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9faXo9dGhpcy5fX2l4PXRoaXMuX19peT1udWxsO30sZGVmZXI6ZnVuY3Rpb24odil7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmFkZERpc3BhdGNoZXIodik7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LmV2ZW50LmhhbmRsZXIuV2luZG93IjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGltcGxlbWVudDpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLGNvbnN0cnVjdDpmdW5jdGlvbihiKXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3RoaXMuX21hbmFnZXI9Yjt0aGlzLl93aW5kb3c9Yi5nZXRXaW5kb3coKTt0aGlzLl9pbml0V2luZG93T2JzZXJ2ZXIoKTt9LHN0YXRpY3M6e1BSSU9SSVRZOnF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5QUklPUklUWV9OT1JNQUwsU1VQUE9SVEVEX1RZUEVTOntlcnJvcjoxLGxvYWQ6MSxiZWZvcmV1bmxvYWQ6MSx1bmxvYWQ6MSxyZXNpemU6MSxzY3JvbGw6MSxiZWZvcmVzaHV0ZG93bjoxfSxUQVJHRVRfQ0hFQ0s6cXguZXZlbnQuSUV2ZW50SGFuZGxlci5UQVJHRVRfV0lORE9XLElHTk9SRV9DQU5fSEFORExFOnRydWV9LG1lbWJlcnM6e2NhbkhhbmRsZUV2ZW50OmZ1bmN0aW9uKGMsZCl7fSxyZWdpc3RlckV2ZW50OmZ1bmN0aW9uKGYsZyxoKXt9LHVucmVnaXN0ZXJFdmVudDpmdW5jdGlvbihpLGosayl7fSxfaW5pdFdpbmRvd09ic2VydmVyOmZ1bmN0aW9uKCl7dGhpcy5fb25OYXRpdmVXcmFwcGVyPXF4LmxhbmcuRnVuY3Rpb24ubGlzdGVuZXIodGhpcy5fb25OYXRpdmUsdGhpcyk7dmFyIG09cXguZXZlbnQuaGFuZGxlci5XaW5kb3cuU1VQUE9SVEVEX1RZUEVTO2Zvcih2YXIgbCBpbiBtKXtxeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fd2luZG93LGwsdGhpcy5fb25OYXRpdmVXcmFwcGVyKTt9fSxfc3RvcFdpbmRvd09ic2VydmVyOmZ1bmN0aW9uKCl7dmFyIG89cXguZXZlbnQuaGFuZGxlci5XaW5kb3cuU1VQUE9SVEVEX1RZUEVTO2Zvcih2YXIgbiBpbiBvKXtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fd2luZG93LG4sdGhpcy5fb25OYXRpdmVXcmFwcGVyKTt9fSxfb25OYXRpdmU6cXguZXZlbnQuR2xvYmFsRXJyb3Iub2JzZXJ2ZU1ldGhvZChmdW5jdGlvbihlKXtpZih0aGlzLmlzRGlzcG9zZWQoKSl7cmV0dXJuO312YXIgcT10aGlzLl93aW5kb3c7dHJ5e3ZhciB0PXEuZG9jdW1lbnQ7fWNhdGNoKGUpe3JldHVybiA7fXZhciByPXQuZG9jdW1lbnRFbGVtZW50O3ZhciBwPXF4LmJvbS5FdmVudC5nZXRUYXJnZXQoZSk7aWYocD09bnVsbHx8cD09PXF8fHA9PT10fHxwPT09cil7dmFyIGV2ZW50PXF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5jcmVhdGVFdmVudChlLnR5cGUscXguZXZlbnQudHlwZS5OYXRpdmUsW2UscV0pO3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5kaXNwYXRjaEV2ZW50KHEsZXZlbnQpO3ZhciBzPWV2ZW50LmdldFJldHVyblZhbHVlKCk7aWYocyE9bnVsbCl7ZS5yZXR1cm5WYWx1ZT1zO3JldHVybiBzO319fSl9LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fc3RvcFdpbmRvd09ic2VydmVyKCk7dGhpcy5fbWFuYWdlcj10aGlzLl93aW5kb3c9bnVsbDt9LGRlZmVyOmZ1bmN0aW9uKHUpe3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5hZGRIYW5kbGVyKHUpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBjPSJxeC5ib20uU2VsZWN0b3IiO3F4LkNsYXNzLmRlZmluZShjLHtzdGF0aWNzOntxdWVyeTpudWxsLG1hdGNoZXM6bnVsbH19KTsoZnVuY3Rpb24oKXt2YXIgbz0vKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86XFtbXlxbXF1dKlxdfFsnIl1bXiciXSpbJyJdfFteXFtcXSciXSspK1xdfFxcLnxbXiA+K34sKFxbXFxdKykrfFs+K35dKShccyosXHMqKT8oKD86LnxccnxcbikqKS9nLHY9MCxyPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcscD1mYWxzZSx4PXRydWU7WzAsMF0uc29ydChmdW5jdGlvbigpe3g9ZmFsc2U7cmV0dXJuIDA7fSk7dmFyIGc9ZnVuY3Rpb24oeixBLEIsQyl7Qj1CfHxbXTtBPUF8fGRvY3VtZW50O3ZhciBMPUE7aWYoQS5ub2RlVHlwZSE9PTEmJkEubm9kZVR5cGUhPT05KXtyZXR1cm4gW107fWlmKCF6fHx0eXBlb2YgeiE9PSJzdHJpbmciKXtyZXR1cm4gQjt9dmFyIG0sRixELEgsSixHLE0saSxOPXRydWUsRT1nLmlzWE1MKEEpLEk9W10sSz16O2Rve28uZXhlYygiIik7bT1vLmV4ZWMoSyk7aWYobSl7Sz1tWzNdO0kucHVzaChtWzFdKTtpZihtWzJdKXtIPW1bM107YnJlYWs7fX19d2hpbGUobSk7aWYoSS5sZW5ndGg+MSYmcS5leGVjKHopKXtpZihJLmxlbmd0aD09PTImJmsucmVsYXRpdmVbSVswXV0pe0Y9aChJWzBdK0lbMV0sQSk7fWVsc2V7Rj1rLnJlbGF0aXZlW0lbMF1dP1tBXTpnKEkuc2hpZnQoKSxBKTt3aGlsZShJLmxlbmd0aCl7ej1JLnNoaWZ0KCk7aWYoay5yZWxhdGl2ZVt6XSl7eis9SS5zaGlmdCgpO31GPWgoeixGKTt9fX1lbHNle2lmKCFDJiZJLmxlbmd0aD4xJiZBLm5vZGVUeXBlPT09OSYmIUUmJmsubWF0Y2guSUQudGVzdChJWzBdKSYmIWsubWF0Y2guSUQudGVzdChJW0kubGVuZ3RoLTFdKSl7Sj1nLmZpbmQoSS5zaGlmdCgpLEEsRSk7QT1KLmV4cHI/Zy5maWx0ZXIoSi5leHByLEouc2V0KVswXTpKLnNldFswXTt9aWYoQSl7Sj1DP3tleHByOkkucG9wKCksc2V0OmYoQyl9OmcuZmluZChJLnBvcCgpLEkubGVuZ3RoPT09MSYmKElbMF09PT0ifiJ8fElbMF09PT0iKyIpJiZBLnBhcmVudE5vZGU/QS5wYXJlbnROb2RlOkEsRSk7Rj1KLmV4cHI/Zy5maWx0ZXIoSi5leHByLEouc2V0KTpKLnNldDtpZihJLmxlbmd0aD4wKXtEPWYoRik7fWVsc2V7Tj1mYWxzZTt9d2hpbGUoSS5sZW5ndGgpe0c9SS5wb3AoKTtNPUc7aWYoIWsucmVsYXRpdmVbR10pe0c9IiI7fWVsc2V7TT1JLnBvcCgpO31pZihNPT1udWxsKXtNPUE7fWsucmVsYXRpdmVbR10oRCxNLEUpO319ZWxzZXtEPUk9W107fX1pZighRCl7RD1GO31pZighRCl7Zy5lcnJvcihHfHx6KTt9aWYoci5jYWxsKEQpPT09IltvYmplY3QgQXJyYXldIil7aWYoIU4pe0IucHVzaC5hcHBseShCLEQpO31lbHNlIGlmKEEmJkEubm9kZVR5cGU9PT0xKXtmb3IoaT0wO0RbaV0hPW51bGw7aSsrKXtpZihEW2ldJiYoRFtpXT09PXRydWV8fERbaV0ubm9kZVR5cGU9PT0xJiZnLmNvbnRhaW5zKEEsRFtpXSkpKXtCLnB1c2goRltpXSk7fX19ZWxzZXtmb3IoaT0wO0RbaV0hPW51bGw7aSsrKXtpZihEW2ldJiZEW2ldLm5vZGVUeXBlPT09MSl7Qi5wdXNoKEZbaV0pO319fX1lbHNle2YoRCxCKTt9aWYoSCl7ZyhILEwsQixDKTtnLnVuaXF1ZVNvcnQoQik7fXJldHVybiBCO307Zy51bmlxdWVTb3J0PWZ1bmN0aW9uKE8pe2lmKHMpe3A9eDtPLnNvcnQocyk7aWYocCl7Zm9yKHZhciBpPTE7aTxPLmxlbmd0aDtpKyspe2lmKE9baV09PT1PW2ktMV0pe08uc3BsaWNlKGktLSwxKTt9fX19cmV0dXJuIE87fTtnLm1hdGNoZXM9ZnVuY3Rpb24oUCxRKXtyZXR1cm4gZyhQLG51bGwsbnVsbCxRKTt9O2cubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKFIsUyl7cmV0dXJuIGcoUyxudWxsLG51bGwsW1JdKS5sZW5ndGg+MDt9O2cuZmluZD1mdW5jdGlvbihULFUsVil7dmFyIFc7aWYoIVQpe3JldHVybiBbXTt9Zm9yKHZhciBpPTAsbD1rLm9yZGVyLmxlbmd0aDtpPGw7aSsrKXt2YXIgWSxYPWsub3JkZXJbaV07aWYoKFk9ay5sZWZ0TWF0Y2hbWF0uZXhlYyhUKSkpe3ZhciBiYT1ZWzFdO1kuc3BsaWNlKDEsMSk7aWYoYmEuc3Vic3RyKGJhLmxlbmd0aC0xKSE9PSJcXCIpe1lbMV09KFlbMV18fCIiKS5yZXBsYWNlKC9cXC9nLCIiKTtXPWsuZmluZFtYXShZLFUsVik7aWYoVyE9bnVsbCl7VD1ULnJlcGxhY2Uoay5tYXRjaFtYXSwiIik7YnJlYWs7fX19fWlmKCFXKXtXPVUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTt9cmV0dXJuIHtzZXQ6VyxleHByOlR9O307Zy5maWx0ZXI9ZnVuY3Rpb24oYmIsYmMsYmQsYmUpe3ZhciBicixicSxiZj1iYixiaz1bXSxiZz1iYyxiaD1iYyYmYmNbMF0mJmcuaXNYTUwoYmNbMF0pO3doaWxlKGJiJiZiYy5sZW5ndGgpe2Zvcih2YXIgYm8gaW4gay5maWx0ZXIpe2lmKChicj1rLmxlZnRNYXRjaFtib10uZXhlYyhiYikpIT1udWxsJiZiclsyXSl7dmFyIGJuLGJqLGJpPWsuZmlsdGVyW2JvXSxicz1iclsxXTticT1mYWxzZTtici5zcGxpY2UoMSwxKTtpZihicy5zdWJzdHIoYnMubGVuZ3RoLTEpPT09IlxcIil7Y29udGludWU7fWlmKGJnPT09Ymspe2JrPVtdO31pZihrLnByZUZpbHRlcltib10pe2JyPWsucHJlRmlsdGVyW2JvXShicixiZyxiZCxiayxiZSxiaCk7aWYoIWJyKXticT1ibj10cnVlO31lbHNlIGlmKGJyPT09dHJ1ZSl7Y29udGludWU7fX1pZihicil7Zm9yKHZhciBpPTA7KGJqPWJnW2ldKSE9bnVsbDtpKyspe2lmKGJqKXtibj1iaShiaixicixpLGJnKTt2YXIgYm09YmVeISFibjtpZihiZCYmYm4hPW51bGwpe2lmKGJtKXticT10cnVlO31lbHNle2JnW2ldPWZhbHNlO319ZWxzZSBpZihibSl7YmsucHVzaChiaik7YnE9dHJ1ZTt9fX19aWYoYm4hPT11bmRlZmluZWQpe2lmKCFiZCl7Ymc9Yms7fWJiPWJiLnJlcGxhY2Uoay5tYXRjaFtib10sIiIpO2lmKCFicSl7cmV0dXJuIFtdO31icmVhazt9fX1pZihiYj09PWJmKXtpZihicT09bnVsbCl7Zy5lcnJvcihiYik7fWVsc2V7YnJlYWs7fX1iZj1iYjt9cmV0dXJuIGJnO307Zy5lcnJvcj1mdW5jdGlvbihidCl7dGhyb3cgIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYnQ7fTt2YXIgaz1nLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLENMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sTkFNRTovXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspWyciXSpcXS8sQVRUUjovXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooWyciXSopKC4qPylcM3wpXHMqXF0vLFRBRzovXigoPzpbXHdcdTAwYzAtXHVGRkZGXCpcLV18XFwuKSspLyxDSElMRDovOihvbmx5fG50aHxsYXN0fGZpcnN0KS1jaGlsZCg/OlwoKGV2ZW58b2RkfFtcZG4rXC1dKilcKSk/LyxQT1M6LzoobnRofGVxfGd0fGx0fGZpcnN0fGxhc3R8ZXZlbnxvZGQpKD86XCgoXGQqKVwpKT8oPz1bXlwtXXwkKS8sUFNFVURPOi86KCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspKD86XCgoWyciXT8pKCg/OlwoW15cKV0rXCl8W15cKFwpXSopKylcMlwpKT8vfSxsZWZ0TWF0Y2g6e30sYXR0ck1hcDp7ImNsYXNzIjoiY2xhc3NOYW1lIiwiZm9yIjoiaHRtbEZvciJ9LGF0dHJIYW5kbGU6e2hyZWY6ZnVuY3Rpb24oYnUpe3JldHVybiBidS5nZXRBdHRyaWJ1dGUoImhyZWYiKTt9fSxyZWxhdGl2ZTp7IisiOmZ1bmN0aW9uKGJ2LGJ3KXt2YXIgYng9dHlwZW9mIGJ3PT09InN0cmluZyIsYno9YngmJiEvXFcvLnRlc3QoYncpLGJBPWJ4JiYhYno7aWYoYnope2J3PWJ3LnRvTG93ZXJDYXNlKCk7fWZvcih2YXIgaT0wLGw9YnYubGVuZ3RoLGJ5O2k8bDtpKyspe2lmKChieT1idltpXSkpe3doaWxlKChieT1ieS5wcmV2aW91c1NpYmxpbmcpJiZieS5ub2RlVHlwZSE9PTEpe31idltpXT1iQXx8YnkmJmJ5Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1idz9ieXx8ZmFsc2U6Ynk9PT1idzt9fWlmKGJBKXtnLmZpbHRlcihidyxidix0cnVlKTt9fSwiPiI6ZnVuY3Rpb24oYkIsYkMpe3ZhciBiRSxiRD10eXBlb2YgYkM9PT0ic3RyaW5nIixpPTAsbD1iQi5sZW5ndGg7aWYoYkQmJiEvXFcvLnRlc3QoYkMpKXtiQz1iQy50b0xvd2VyQ2FzZSgpO2Zvcig7aTxsO2krKyl7YkU9YkJbaV07aWYoYkUpe3ZhciBwYXJlbnQ9YkUucGFyZW50Tm9kZTtiQltpXT1wYXJlbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJDP3BhcmVudDpmYWxzZTt9fX1lbHNle2Zvcig7aTxsO2krKyl7YkU9YkJbaV07aWYoYkUpe2JCW2ldPWJEP2JFLnBhcmVudE5vZGU6YkUucGFyZW50Tm9kZT09PWJDO319aWYoYkQpe2cuZmlsdGVyKGJDLGJCLHRydWUpO319fSwiIjpmdW5jdGlvbihiRixiRyxiSCl7dmFyIGJLLGJJPXYrKyxiSj13O2lmKHR5cGVvZiBiRz09PSJzdHJpbmciJiYhL1xXLy50ZXN0KGJHKSl7Ykc9YkcudG9Mb3dlckNhc2UoKTtiSz1iRztiSj15O31iSigicGFyZW50Tm9kZSIsYkcsYkksYkYsYkssYkgpO30sIn4iOmZ1bmN0aW9uKGJMLGJNLGJOKXt2YXIgYlEsYk89disrLGJQPXc7aWYodHlwZW9mIGJNPT09InN0cmluZyImJiEvXFcvLnRlc3QoYk0pKXtiTT1iTS50b0xvd2VyQ2FzZSgpO2JRPWJNO2JQPXk7fWJQKCJwcmV2aW91c1NpYmxpbmciLGJNLGJPLGJMLGJRLGJOKTt9fSxmaW5kOntJRDpmdW5jdGlvbihiUixiUyxiVCl7aWYodHlwZW9mIGJTLmdldEVsZW1lbnRCeUlkIT09InVuZGVmaW5lZCImJiFiVCl7dmFyIG09YlMuZ2V0RWxlbWVudEJ5SWQoYlJbMV0pO3JldHVybiBtJiZtLnBhcmVudE5vZGU/W21dOltdO319LE5BTUU6ZnVuY3Rpb24oYlUsYlYpe2lmKHR5cGVvZiBiVi5nZXRFbGVtZW50c0J5TmFtZSE9PSJ1bmRlZmluZWQiKXt2YXIgYlg9W10sYlc9YlYuZ2V0RWxlbWVudHNCeU5hbWUoYlVbMV0pO2Zvcih2YXIgaT0wLGw9YlcubGVuZ3RoO2k8bDtpKyspe2lmKGJXW2ldLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09YlVbMV0pe2JYLnB1c2goYldbaV0pO319cmV0dXJuIGJYLmxlbmd0aD09PTA/bnVsbDpiWDt9fSxUQUc6ZnVuY3Rpb24oYlksY2Epe3JldHVybiBjYS5nZXRFbGVtZW50c0J5VGFnTmFtZShiWVsxXSk7fX0scHJlRmlsdGVyOntDTEFTUzpmdW5jdGlvbihjYixjYyxjZCxjZSxjZixjZyl7Y2I9IiAiK2NiWzFdLnJlcGxhY2UoL1xcL2csIiIpKyIgIjtpZihjZyl7cmV0dXJuIGNiO31mb3IodmFyIGk9MCxjaDsoY2g9Y2NbaV0pIT1udWxsO2krKyl7aWYoY2gpe2lmKGNmXihjaC5jbGFzc05hbWUmJigiICIrY2guY2xhc3NOYW1lKyIgIikucmVwbGFjZSgvW1x0XG5dL2csIiAiKS5pbmRleE9mKGNiKT49MCkpe2lmKCFjZCl7Y2UucHVzaChjaCk7fX1lbHNlIGlmKGNkKXtjY1tpXT1mYWxzZTt9fX1yZXR1cm4gZmFsc2U7fSxJRDpmdW5jdGlvbihjaSl7cmV0dXJuIGNpWzFdLnJlcGxhY2UoL1xcL2csIiIpO30sVEFHOmZ1bmN0aW9uKGNqLGNrKXtyZXR1cm4gY2pbMV0udG9Mb3dlckNhc2UoKTt9LENISUxEOmZ1bmN0aW9uKGNsKXtpZihjbFsxXT09PSJudGgiKXt2YXIgY209LygtPykoXGQqKW4oKD86XCt8LSk/XGQqKS8uZXhlYyhjbFsyXT09PSJldmVuIiYmIjJuInx8Y2xbMl09PT0ib2RkIiYmIjJuKzEifHwhL1xELy50ZXN0KGNsWzJdKSYmIjBuKyIrY2xbMl18fGNsWzJdKTtjbFsyXT0oY21bMV0rKGNtWzJdfHwxKSktMDtjbFszXT1jbVszXS0wO31jbFswXT12Kys7cmV0dXJuIGNsO30sQVRUUjpmdW5jdGlvbihjbixjbyxjcCxjcSxjcixjcyl7dmFyIG5hbWU9Y25bMV0ucmVwbGFjZSgvXFwvZywiIik7aWYoIWNzJiZrLmF0dHJNYXBbbmFtZV0pe2NuWzFdPWsuYXR0ck1hcFtuYW1lXTt9aWYoY25bMl09PT0ifj0iKXtjbls0XT0iICIrY25bNF0rIiAiO31yZXR1cm4gY247fSxQU0VVRE86ZnVuY3Rpb24oY3QsY3UsY3YsY3csY3gpe2lmKGN0WzFdPT09Im5vdCIpe2lmKChvLmV4ZWMoY3RbM10pfHwiIikubGVuZ3RoPjF8fC9eXHcvLnRlc3QoY3RbM10pKXtjdFszXT1nKGN0WzNdLG51bGwsbnVsbCxjdSk7fWVsc2V7dmFyIGN5PWcuZmlsdGVyKGN0WzNdLGN1LGN2LHRydWVeY3gpO2lmKCFjdil7Y3cucHVzaC5hcHBseShjdyxjeSk7fXJldHVybiBmYWxzZTt9fWVsc2UgaWYoay5tYXRjaC5QT1MudGVzdChjdFswXSl8fGsubWF0Y2guQ0hJTEQudGVzdChjdFswXSkpe3JldHVybiB0cnVlO31yZXR1cm4gY3Q7fSxQT1M6ZnVuY3Rpb24oY3ope2N6LnVuc2hpZnQodHJ1ZSk7cmV0dXJuIGN6O319LGZpbHRlcnM6e2VuYWJsZWQ6ZnVuY3Rpb24oY0Epe3JldHVybiBjQS5kaXNhYmxlZD09PWZhbHNlJiZjQS50eXBlIT09ImhpZGRlbiI7fSxkaXNhYmxlZDpmdW5jdGlvbihjQil7cmV0dXJuIGNCLmRpc2FibGVkPT09dHJ1ZTt9LGNoZWNrZWQ6ZnVuY3Rpb24oY0Mpe3JldHVybiBjQy5jaGVja2VkPT09dHJ1ZTt9LHNlbGVjdGVkOmZ1bmN0aW9uKGNEKXtjRC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7cmV0dXJuIGNELnNlbGVjdGVkPT09dHJ1ZTt9LHBhcmVudDpmdW5jdGlvbihjRSl7cmV0dXJuICEhY0UuZmlyc3RDaGlsZDt9LGVtcHR5OmZ1bmN0aW9uKGNGKXtyZXR1cm4gIWNGLmZpcnN0Q2hpbGQ7fSxoYXM6ZnVuY3Rpb24oY0csaSxjSCl7cmV0dXJuICEhZyhjSFszXSxjRykubGVuZ3RoO30saGVhZGVyOmZ1bmN0aW9uKGNJKXtyZXR1cm4gKC9oXGQvaSkudGVzdChjSS5ub2RlTmFtZSk7fSx0ZXh0OmZ1bmN0aW9uKGNKKXtyZXR1cm4gInRleHQiPT09Y0oudHlwZTt9LHJhZGlvOmZ1bmN0aW9uKGNLKXtyZXR1cm4gInJhZGlvIj09PWNLLnR5cGU7fSxjaGVja2JveDpmdW5jdGlvbihjTCl7cmV0dXJuICJjaGVja2JveCI9PT1jTC50eXBlO30sZmlsZTpmdW5jdGlvbihjTSl7cmV0dXJuICJmaWxlIj09PWNNLnR5cGU7fSxwYXNzd29yZDpmdW5jdGlvbihjTil7cmV0dXJuICJwYXNzd29yZCI9PT1jTi50eXBlO30sc3VibWl0OmZ1bmN0aW9uKGNPKXtyZXR1cm4gInN1Ym1pdCI9PT1jTy50eXBlO30saW1hZ2U6ZnVuY3Rpb24oY1Ape3JldHVybiAiaW1hZ2UiPT09Y1AudHlwZTt9LHJlc2V0OmZ1bmN0aW9uKGNRKXtyZXR1cm4gInJlc2V0Ij09PWNRLnR5cGU7fSxidXR0b246ZnVuY3Rpb24oY1Ipe3JldHVybiAiYnV0dG9uIj09PWNSLnR5cGV8fGNSLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iYnV0dG9uIjt9LGlucHV0OmZ1bmN0aW9uKGNTKXtyZXR1cm4gKC9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kpLnRlc3QoY1Mubm9kZU5hbWUpO319LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGNULGkpe3JldHVybiBpPT09MDt9LGxhc3Q6ZnVuY3Rpb24oY1UsaSxjVixjVyl7cmV0dXJuIGk9PT1jVy5sZW5ndGgtMTt9LGV2ZW46ZnVuY3Rpb24oY1gsaSl7cmV0dXJuIGklMj09PTA7fSxvZGQ6ZnVuY3Rpb24oY1ksaSl7cmV0dXJuIGklMj09PTE7fSxsdDpmdW5jdGlvbihkYSxpLGRiKXtyZXR1cm4gaTxkYlszXS0wO30sZ3Q6ZnVuY3Rpb24oZGMsaSxkZCl7cmV0dXJuIGk+ZGRbM10tMDt9LG50aDpmdW5jdGlvbihkZSxpLGRmKXtyZXR1cm4gZGZbM10tMD09PWk7fSxlcTpmdW5jdGlvbihkZyxpLGRoKXtyZXR1cm4gZGhbM10tMD09PWk7fX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oZGksZGosaSxkayl7dmFyIG5hbWU9ZGpbMV0sZGw9ay5maWx0ZXJzW25hbWVdO2lmKGRsKXtyZXR1cm4gZGwoZGksaSxkaixkayk7fWVsc2UgaWYobmFtZT09PSJjb250YWlucyIpe3JldHVybiAoZGkudGV4dENvbnRlbnR8fGRpLmlubmVyVGV4dHx8Zy5nZXRUZXh0KFtkaV0pfHwiIikuaW5kZXhPZihkalszXSk+PTA7fWVsc2UgaWYobmFtZT09PSJub3QiKXt2YXIgZG09ZGpbM107Zm9yKHZhciBqPTAsbD1kbS5sZW5ndGg7ajxsO2orKyl7aWYoZG1bal09PT1kaSl7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7fWVsc2V7Zy5lcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIituYW1lKTt9fSxDSElMRDpmdW5jdGlvbihkbixkcCl7dmFyIGR2PWRwWzFdLGRxPWRuO3N3aXRjaChkdil7Y2FzZSAib25seSI6Y2FzZSAiZmlyc3QiOndoaWxlKChkcT1kcS5wcmV2aW91c1NpYmxpbmcpKXtpZihkcS5ub2RlVHlwZT09PTEpe3JldHVybiBmYWxzZTt9fWlmKGR2PT09ImZpcnN0Iil7cmV0dXJuIHRydWU7fWRxPWRuO2Nhc2UgImxhc3QiOndoaWxlKChkcT1kcS5uZXh0U2libGluZykpe2lmKGRxLm5vZGVUeXBlPT09MSl7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7Y2FzZSAibnRoIjp2YXIgZHc9ZHBbMl0sZHM9ZHBbM107aWYoZHc9PT0xJiZkcz09PTApe3JldHVybiB0cnVlO312YXIgZHU9ZHBbMF0scGFyZW50PWRuLnBhcmVudE5vZGU7aWYocGFyZW50JiYocGFyZW50LnNpemNhY2hlIT09ZHV8fCFkbi5ub2RlSW5kZXgpKXt2YXIgZHI9MDtmb3IoZHE9cGFyZW50LmZpcnN0Q2hpbGQ7ZHE7ZHE9ZHEubmV4dFNpYmxpbmcpe2lmKGRxLm5vZGVUeXBlPT09MSl7ZHEubm9kZUluZGV4PSsrZHI7fX1wYXJlbnQuc2l6Y2FjaGU9ZHU7fXZhciBkdD1kbi5ub2RlSW5kZXgtZHM7aWYoZHc9PT0wKXtyZXR1cm4gZHQ9PT0wO31lbHNle3JldHVybiAoZHQlZHc9PT0wJiZkdC9kdz49MCk7fX19LElEOmZ1bmN0aW9uKGR4LGR5KXtyZXR1cm4gZHgubm9kZVR5cGU9PT0xJiZkeC5nZXRBdHRyaWJ1dGUoImlkIik9PT1keTt9LFRBRzpmdW5jdGlvbihkeixkQSl7cmV0dXJuIChkQT09PSIqIiYmZHoubm9kZVR5cGU9PT0xKXx8ZHoubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWRBO30sQ0xBU1M6ZnVuY3Rpb24oZEIsZEMpe3JldHVybiAoIiAiKyhkQi5jbGFzc05hbWV8fGRCLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSkrIiAiKS5pbmRleE9mKGRDKT4tMTt9LEFUVFI6ZnVuY3Rpb24oZEQsZEUpe3ZhciBuYW1lPWRFWzFdLGRJPWsuYXR0ckhhbmRsZVtuYW1lXT9rLmF0dHJIYW5kbGVbbmFtZV0oZEQpOmREW25hbWVdIT1udWxsP2REW25hbWVdOmRELmdldEF0dHJpYnV0ZShuYW1lKSxkSD1kSSsiIixkRz1kRVsyXSxkRj1kRVs0XTtyZXR1cm4gZEk9PW51bGw/ZEc9PT0iIT0iOmRHPT09Ij0iP2RIPT09ZEY6ZEc9PT0iKj0iP2RILmluZGV4T2YoZEYpPj0wOmRHPT09In49Ij8oIiAiK2RIKyIgIikuaW5kZXhPZihkRik+PTA6IWRGP2RIJiZkSSE9PWZhbHNlOmRHPT09IiE9Ij9kSCE9PWRGOmRHPT09Il49Ij9kSC5pbmRleE9mKGRGKT09PTA6ZEc9PT0iJD0iP2RILnN1YnN0cihkSC5sZW5ndGgtZEYubGVuZ3RoKT09PWRGOmRHPT09Inw9Ij9kSD09PWRGfHxkSC5zdWJzdHIoMCxkRi5sZW5ndGgrMSk9PT1kRisiLSI6ZmFsc2U7fSxQT1M6ZnVuY3Rpb24oZEosZEssaSxkTCl7dmFyIG5hbWU9ZEtbMl0sZE09ay5zZXRGaWx0ZXJzW25hbWVdO2lmKGRNKXtyZXR1cm4gZE0oZEosaSxkSyxkTCk7fX19fTt2YXIgcT1rLm1hdGNoLlBPUyxkPWZ1bmN0aW9uKGROLGRPKXtyZXR1cm4gIlxcIisoZE8tMCsxKTt9O2Zvcih2YXIgdSBpbiBrLm1hdGNoKXtrLm1hdGNoW3VdPW5ldyBSZWdFeHAoay5tYXRjaFt1XS5zb3VyY2UrKC8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSkpO2subGVmdE1hdGNoW3VdPW5ldyBSZWdFeHAoLyheKD86LnxccnxcbikqPykvLnNvdXJjZStrLm1hdGNoW3VdLnNvdXJjZS5yZXBsYWNlKC9cXChcZCspL2csZCkpO312YXIgZj1mdW5jdGlvbihkUCxkUSl7ZFA9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZFAsMCk7aWYoZFEpe2RRLnB1c2guYXBwbHkoZFEsZFApO3JldHVybiBkUTt9cmV0dXJuIGRQO307dHJ5e0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLDApWzBdLm5vZGVUeXBlO31jYXRjaChlKXtmPWZ1bmN0aW9uKGRSLGRTKXt2YXIgaT0wLGRUPWRTfHxbXTtpZihyLmNhbGwoZFIpPT09IltvYmplY3QgQXJyYXldIil7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZFQsZFIpO31lbHNle2lmKHR5cGVvZiBkUi5sZW5ndGg9PT0ibnVtYmVyIil7Zm9yKHZhciBsPWRSLmxlbmd0aDtpPGw7aSsrKXtkVC5wdXNoKGRSW2ldKTt9fWVsc2V7Zm9yKDtkUltpXTtpKyspe2RULnB1c2goZFJbaV0pO319fXJldHVybiBkVDt9O312YXIgcyxuO2lmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbil7cz1mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtwPXRydWU7cmV0dXJuIDA7fWlmKCFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9ufHwhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbil7cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MTt9cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmND8tMToxO307fWVsc2V7cz1mdW5jdGlvbihhLGIpe3ZhciBkWSxkVyxlYT1bXSxlYj1bXSxkVj1hLnBhcmVudE5vZGUsZFg9Yi5wYXJlbnROb2RlLGRVPWRWO2lmKGE9PT1iKXtwPXRydWU7cmV0dXJuIDA7fWVsc2UgaWYoZFY9PT1kWCl7cmV0dXJuIG4oYSxiKTt9ZWxzZSBpZighZFYpe3JldHVybiAtMTt9ZWxzZSBpZighZFgpe3JldHVybiAxO313aGlsZShkVSl7ZWEudW5zaGlmdChkVSk7ZFU9ZFUucGFyZW50Tm9kZTt9ZFU9ZFg7d2hpbGUoZFUpe2ViLnVuc2hpZnQoZFUpO2RVPWRVLnBhcmVudE5vZGU7fWRZPWVhLmxlbmd0aDtkVz1lYi5sZW5ndGg7Zm9yKHZhciBpPTA7aTxkWSYmaTxkVztpKyspe2lmKGVhW2ldIT09ZWJbaV0pe3JldHVybiBuKGVhW2ldLGViW2ldKTt9fXJldHVybiBpPT09ZFk/bihhLGViW2ldLC0xKTpuKGVhW2ldLGIsMSk7fTtuPWZ1bmN0aW9uKGEsYixlYyl7aWYoYT09PWIpe3JldHVybiBlYzt9dmFyIGVkPWEubmV4dFNpYmxpbmc7d2hpbGUoZWQpe2lmKGVkPT09Yil7cmV0dXJuIC0xO31lZD1lZC5uZXh0U2libGluZzt9cmV0dXJuIDE7fTt9Zy5nZXRUZXh0PWZ1bmN0aW9uKGVlKXt2YXIgZWc9IiIsZWY7Zm9yKHZhciBpPTA7ZWVbaV07aSsrKXtlZj1lZVtpXTtpZihlZi5ub2RlVHlwZT09PTN8fGVmLm5vZGVUeXBlPT09NCl7ZWcrPWVmLm5vZGVWYWx1ZTt9ZWxzZSBpZihlZi5ub2RlVHlwZSE9PTgpe2VnKz1nLmdldFRleHQoZWYuY2hpbGROb2Rlcyk7fX1yZXR1cm4gZWc7fTsoZnVuY3Rpb24oKXt2YXIgZWo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZWk9InNjcmlwdCIrKG5ldyBEYXRlKCkpLmdldFRpbWUoKSxlaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZWouaW5uZXJIVE1MPSI8YSBuYW1lPSciK2VpKyInLz4iO2VoLmluc2VydEJlZm9yZShlaixlaC5maXJzdENoaWxkKTtpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlaSkpe2suZmluZC5JRD1mdW5jdGlvbihlayxlbCxlbSl7aWYodHlwZW9mIGVsLmdldEVsZW1lbnRCeUlkIT09InVuZGVmaW5lZCImJiFlbSl7dmFyIG09ZWwuZ2V0RWxlbWVudEJ5SWQoZWtbMV0pO3JldHVybiBtP20uaWQ9PT1la1sxXXx8dHlwZW9mIG0uZ2V0QXR0cmlidXRlTm9kZSE9PSJ1bmRlZmluZWQiJiZtLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9kZVZhbHVlPT09ZWtbMV0/W21dOnVuZGVmaW5lZDpbXTt9fTtrLmZpbHRlci5JRD1mdW5jdGlvbihlbixlbyl7dmFyIGVwPXR5cGVvZiBlbi5nZXRBdHRyaWJ1dGVOb2RlIT09InVuZGVmaW5lZCImJmVuLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGVuLm5vZGVUeXBlPT09MSYmZXAmJmVwLm5vZGVWYWx1ZT09PWVvO307fWVoLnJlbW92ZUNoaWxkKGVqKTtlaD1laj1udWxsO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGVxPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2VxLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpKTtpZihlcS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aD4wKXtrLmZpbmQuVEFHPWZ1bmN0aW9uKGVyLGVzKXt2YXIgZXU9ZXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZXJbMV0pO2lmKGVyWzFdPT09IioiKXt2YXIgZXQ9W107Zm9yKHZhciBpPTA7ZXVbaV07aSsrKXtpZihldVtpXS5ub2RlVHlwZT09PTEpe2V0LnB1c2goZXVbaV0pO319ZXU9ZXQ7fXJldHVybiBldTt9O31lcS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iO2lmKGVxLmZpcnN0Q2hpbGQmJnR5cGVvZiBlcS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PSJ1bmRlZmluZWQiJiZlcS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpIT09IiMiKXtrLmF0dHJIYW5kbGUuaHJlZj1mdW5jdGlvbihldil7cmV0dXJuIGV2LmdldEF0dHJpYnV0ZSgiaHJlZiIsMik7fTt9ZXE9bnVsbDt9KSgpO2lmKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwpeyhmdW5jdGlvbigpe3ZhciBleD1nLGV3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGV5PSJfX3NpenpsZV9fIjtldy5pbm5lckhUTUw9IjxwIGNsYXNzPSdURVNUJz48L3A+IjtpZihldy5xdWVyeVNlbGVjdG9yQWxsJiZldy5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aD09PTApe3JldHVybjt9Zz1mdW5jdGlvbihlQSxlQixlQyxlRCl7ZUI9ZUJ8fGRvY3VtZW50O2VBPWVBLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCFlRCYmIWcuaXNYTUwoZUIpKXtpZihlQi5ub2RlVHlwZT09PTkpe3RyeXtyZXR1cm4gZihlQi5xdWVyeVNlbGVjdG9yQWxsKGVBKSxlQyk7fWNhdGNoKGVHKXt9fWVsc2UgaWYoZUIubm9kZVR5cGU9PT0xJiZlQi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im9iamVjdCIpe3ZhciBlRT1lQi5nZXRBdHRyaWJ1dGUoImlkIiksZUY9ZUV8fGV5O2lmKCFlRSl7ZUIuc2V0QXR0cmlidXRlKCJpZCIsZUYpO310cnl7cmV0dXJuIGYoZUIucXVlcnlTZWxlY3RvckFsbCgiIyIrZUYrIiAiK2VBKSxlQyk7fWNhdGNoKGVIKXt9ZmluYWxseXtpZighZUUpe2VCLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTt9fX19cmV0dXJuIGV4KGVBLGVCLGVDLGVEKTt9O2Zvcih2YXIgZXogaW4gZXgpe2dbZXpdPWV4W2V6XTt9ZXc9bnVsbDt9KSgpO30oZnVuY3Rpb24oKXt2YXIgZUs9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGVJPWVLLm1hdGNoZXNTZWxlY3Rvcnx8ZUsubW96TWF0Y2hlc1NlbGVjdG9yfHxlSy53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGVLLm1zTWF0Y2hlc1NlbGVjdG9yLGVKPWZhbHNlO3RyeXtlSS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwiW3Rlc3QhPScnXTpzaXp6bGUiKTt9Y2F0Y2goZUwpe2VKPXRydWU7fWlmKGVJKXtnLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlTSxlTil7ZU49ZU4ucmVwbGFjZSgvXD1ccyooW14nIlxdXSopXHMqXF0vZywiPSckMSddIik7aWYoIWcuaXNYTUwoZU0pKXt0cnl7aWYoZUp8fCFrLm1hdGNoLlBTRVVETy50ZXN0KGVOKSYmIS8hPS8udGVzdChlTikpe3JldHVybiBlSS5jYWxsKGVNLGVOKTt9fWNhdGNoKGUpe319cmV0dXJuIGcoZU4sbnVsbCxudWxsLFtlTV0pLmxlbmd0aD4wO307fX0pKCk7KGZ1bmN0aW9uKCl7dmFyIGVPPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2VPLmlubmVySFRNTD0iPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iO2lmKCFlTy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lfHxlTy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MCl7cmV0dXJuO31lTy5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIjtpZihlTy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MSl7cmV0dXJuO31rLm9yZGVyLnNwbGljZSgxLDAsIkNMQVNTIik7ay5maW5kLkNMQVNTPWZ1bmN0aW9uKGVQLGVRLGVSKXtpZih0eXBlb2YgZVEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PSJ1bmRlZmluZWQiJiYhZVIpe3JldHVybiBlUS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGVQWzFdKTt9fTtlTz1udWxsO30pKCk7ZnVuY3Rpb24geShlUyxlVCxlVSxlVixlVyxlWCl7Zm9yKHZhciBpPTAsbD1lVi5sZW5ndGg7aTxsO2krKyl7dmFyIGZhPWVWW2ldO2lmKGZhKXt2YXIgZVk9ZmFsc2U7ZmE9ZmFbZVNdO3doaWxlKGZhKXtpZihmYS5zaXpjYWNoZT09PWVVKXtlWT1lVltmYS5zaXpzZXRdO2JyZWFrO31pZihmYS5ub2RlVHlwZT09PTEmJiFlWCl7ZmEuc2l6Y2FjaGU9ZVU7ZmEuc2l6c2V0PWk7fWlmKGZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1lVCl7ZVk9ZmE7YnJlYWs7fWZhPWZhW2VTXTt9ZVZbaV09ZVk7fX19ZnVuY3Rpb24gdyhmYixmYyxmZCxmZSxmZixmZyl7Zm9yKHZhciBpPTAsbD1mZS5sZW5ndGg7aTxsO2krKyl7dmFyIGZpPWZlW2ldO2lmKGZpKXt2YXIgZmg9ZmFsc2U7Zmk9ZmlbZmJdO3doaWxlKGZpKXtpZihmaS5zaXpjYWNoZT09PWZkKXtmaD1mZVtmaS5zaXpzZXRdO2JyZWFrO31pZihmaS5ub2RlVHlwZT09PTEpe2lmKCFmZyl7Zmkuc2l6Y2FjaGU9ZmQ7Zmkuc2l6c2V0PWk7fWlmKHR5cGVvZiBmYyE9PSJzdHJpbmciKXtpZihmaT09PWZjKXtmaD10cnVlO2JyZWFrO319ZWxzZSBpZihnLmZpbHRlcihmYyxbZmldKS5sZW5ndGg+MCl7Zmg9Zmk7YnJlYWs7fX1maT1maVtmYl07fWZlW2ldPWZoO319fWlmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyl7Zy5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiBhIT09YiYmKGEuY29udGFpbnM/YS5jb250YWlucyhiKTp0cnVlKTt9O31lbHNlIGlmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbil7Zy5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiAhIShhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjE2KTt9O31lbHNle2cuY29udGFpbnM9ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fTt9Zy5pc1hNTD1mdW5jdGlvbihmail7dmFyIGZrPShmaj9mai5vd25lckRvY3VtZW50fHxmajowKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGZrP2ZrLm5vZGVOYW1lIT09IkhUTUwiOmZhbHNlO307dmFyIGg9ZnVuY3Rpb24oZmwsZm0pe3ZhciBmcSxmbz1bXSxmbj0iIixmcD1mbS5ub2RlVHlwZT9bZm1dOmZtO3doaWxlKChmcT1rLm1hdGNoLlBTRVVETy5leGVjKGZsKSkpe2ZuKz1mcVswXTtmbD1mbC5yZXBsYWNlKGsubWF0Y2guUFNFVURPLCIiKTt9Zmw9ay5yZWxhdGl2ZVtmbF0/ZmwrIioiOmZsO2Zvcih2YXIgaT0wLGw9ZnAubGVuZ3RoO2k8bDtpKyspe2coZmwsZnBbaV0sZm8pO31yZXR1cm4gZy5maWx0ZXIoZm4sZm8pO307dmFyIHQ9cXguYm9tLlNlbGVjdG9yO3QucXVlcnk9ZnVuY3Rpb24oZnIsZnMpe3JldHVybiBnKGZyLGZzKTt9O3QubWF0Y2hlcz1mdW5jdGlvbihmdCxmdSl7cmV0dXJuIGcoZnQsbnVsbCxudWxsLGZ1KTt9O30pKCk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgcj0icXguY2xpZW50IixxPSIiLHA9Im1zaHRtbCIsbz0iJyIsbj0iU2VsZWN0aW9uTGFuZ3VhZ2UiLG09InF4LnhtbC5Eb2N1bWVudCIsaz0iIC8+IixqPSJNU1hNTDIuRE9NRG9jdW1lbnQuMy4wIixoPSc8XD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz5cbjwnLGc9Ik1TWE1MMi5YTUxIVFRQLjMuMCIsYz0iTVNYTUwyLlhNTEhUVFAuNi4wIixmPSIgeG1sbnM9JyIsZT0idGV4dC94bWwiLGI9IlhQYXRoIixhPSJNU1hNTDIuRE9NRG9jdW1lbnQuNi4wIixkPSJIVE1MIjtxeC5DbGFzcy5kZWZpbmUobSx7c3RhdGljczp7RE9NRE9DOm51bGwsWE1MSFRUUDpudWxsLGlzWG1sRG9jdW1lbnQ6ZnVuY3Rpb24ocyl7aWYocy5ub2RlVHlwZT09PTkpe3JldHVybiBzLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSE9PWQ7fWVsc2UgaWYocy5vd25lckRvY3VtZW50KXtyZXR1cm4gdGhpcy5pc1htbERvY3VtZW50KHMub3duZXJEb2N1bWVudCk7fWVsc2V7cmV0dXJuIGZhbHNlO319LGNyZWF0ZTpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KHIseyJtc2h0bWwiOmZ1bmN0aW9uKHQsdSl7dmFyIHY9bmV3IEFjdGl2ZVhPYmplY3QodGhpcy5ET01ET0MpO3Yuc2V0UHJvcGVydHkobixiKTtpZih1KXt2YXIgdz1oO3crPXU7aWYodCl7dys9Zit0K287fXcrPWs7di5sb2FkWE1MKHcpO31yZXR1cm4gdjt9LCJkZWZhdWx0IjpmdW5jdGlvbih4LHkpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCh4fHxxLHl8fHEsbnVsbCk7fX0pLGZyb21TdHJpbmc6cXguY29yZS5WYXJpYW50LnNlbGVjdChyLHsibXNodG1sIjpmdW5jdGlvbih6KXt2YXIgQT1xeC54bWwuRG9jdW1lbnQuY3JlYXRlKCk7QS5sb2FkWE1MKHopO3JldHVybiBBO30sImRlZmF1bHQiOmZ1bmN0aW9uKEIpe3ZhciBDPW5ldyBET01QYXJzZXIoKTtyZXR1cm4gQy5wYXJzZUZyb21TdHJpbmcoQixlKTt9fSl9LGRlZmVyOmZ1bmN0aW9uKEQpe2lmKHF4LmNvcmUuVmFyaWFudC5pc1NldChyLHApKXt2YXIgRT1bYSxqXTt2YXIgRj1bYyxnXTtmb3IodmFyIGk9MCxsPUUubGVuZ3RoO2k8bDtpKyspe3RyeXtuZXcgQWN0aXZlWE9iamVjdChFW2ldKTtuZXcgQWN0aXZlWE9iamVjdChGW2ldKTt9Y2F0Y2goRyl7Y29udGludWU7fUQuRE9NRE9DPUVbaV07RC5YTUxIVFRQPUZbaV07YnJlYWs7fX19fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaz0idmlzaWJsZSIsaj0ic2Nyb2xsIixpPSJib3JkZXJCb3R0b21XaWR0aCIsaD0iYm9yZGVyVG9wV2lkdGgiLGc9ImxlZnQiLGY9ImJvcmRlckxlZnRXaWR0aCIsZT0iYm90dG9tIixkPSJ0b3AiLGM9InJpZ2h0IixiPSJxeC5ib20uZWxlbWVudC5TY3JvbGwiLGE9ImJvcmRlclJpZ2h0V2lkdGgiO3F4LkNsYXNzLmRlZmluZShiLHtzdGF0aWNzOntpbnRvVmlld1g6ZnVuY3Rpb24obCxzdG9wLG0pe3ZhciBwYXJlbnQ9bC5wYXJlbnROb2RlO3ZhciByPXF4LmRvbS5Ob2RlLmdldERvY3VtZW50KGwpO3ZhciBuPXIuYm9keTt2YXIgeix4LHU7dmFyIEIscyxDO3ZhciB2LEQsRzt2YXIgRSxwLHksbzt2YXIgdCxGLHc7dmFyIHE9bT09PWc7dmFyIEE9bT09PWM7c3RvcD1zdG9wP3N0b3AucGFyZW50Tm9kZTpyO3doaWxlKHBhcmVudCYmcGFyZW50IT1zdG9wKXtpZihwYXJlbnQuc2Nyb2xsV2lkdGg+cGFyZW50LmNsaWVudFdpZHRoJiYocGFyZW50PT09bnx8cXguYm9tLmVsZW1lbnQuT3ZlcmZsb3cuZ2V0WShwYXJlbnQpIT1rKSl7aWYocGFyZW50PT09bil7eD1wYXJlbnQuc2Nyb2xsTGVmdDt1PXgrcXguYm9tLlZpZXdwb3J0LmdldFdpZHRoKCk7Qj1xeC5ib20uVmlld3BvcnQuZ2V0V2lkdGgoKTtzPXBhcmVudC5jbGllbnRXaWR0aDtDPXBhcmVudC5zY3JvbGxXaWR0aDt2PTA7RD0wO0c9MDt9ZWxzZXt6PXF4LmJvbS5lbGVtZW50LkxvY2F0aW9uLmdldChwYXJlbnQpO3g9ei5sZWZ0O3U9ei5yaWdodDtCPXBhcmVudC5vZmZzZXRXaWR0aDtzPXBhcmVudC5jbGllbnRXaWR0aDtDPXBhcmVudC5zY3JvbGxXaWR0aDt2PXBhcnNlSW50KHF4LmJvbS5lbGVtZW50LlN0eWxlLmdldChwYXJlbnQsZiksMTApfHwwO0Q9cGFyc2VJbnQocXguYm9tLmVsZW1lbnQuU3R5bGUuZ2V0KHBhcmVudCxhKSwxMCl8fDA7Rz1CLXMtdi1EO31FPXF4LmJvbS5lbGVtZW50LkxvY2F0aW9uLmdldChsKTtwPUUubGVmdDt5PUUucmlnaHQ7bz1sLm9mZnNldFdpZHRoO3Q9cC14LXY7Rj15LXUrRDt3PTA7aWYocSl7dz10O31lbHNlIGlmKEEpe3c9RitHO31lbHNlIGlmKHQ8MHx8bz5zKXt3PXQ7fWVsc2UgaWYoRj4wKXt3PUYrRzt9cGFyZW50LnNjcm9sbExlZnQrPXc7aWYocXguYm9tLmNsaWVudC5FbmdpbmUuR0VDS098fHF4LmJvbS5jbGllbnQuRW5naW5lLk9QRVJBKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZmlyZU5vbkJ1YmJsaW5nRXZlbnQocGFyZW50LGopO319aWYocGFyZW50PT09bil7YnJlYWs7fXBhcmVudD1wYXJlbnQucGFyZW50Tm9kZTt9fSxpbnRvVmlld1k6ZnVuY3Rpb24oSCxzdG9wLEkpe3ZhciBwYXJlbnQ9SC5wYXJlbnROb2RlO3ZhciBPPXF4LmRvbS5Ob2RlLmdldERvY3VtZW50KEgpO3ZhciBKPU8uYm9keTt2YXIgVyxLLFM7dmFyIFksVixRO3ZhciBNLE4sTDt2YXIgYmIsYmMsWCxSO3ZhciBVLFAsYmQ7dmFyIGJhPUk9PT1kO3ZhciBUPUk9PT1lO3N0b3A9c3RvcD9zdG9wLnBhcmVudE5vZGU6Tzt3aGlsZShwYXJlbnQmJnBhcmVudCE9c3RvcCl7aWYocGFyZW50LnNjcm9sbEhlaWdodD5wYXJlbnQuY2xpZW50SGVpZ2h0JiYocGFyZW50PT09Snx8cXguYm9tLmVsZW1lbnQuT3ZlcmZsb3cuZ2V0WShwYXJlbnQpIT1rKSl7aWYocGFyZW50PT09Sil7Sz1wYXJlbnQuc2Nyb2xsVG9wO1M9SytxeC5ib20uVmlld3BvcnQuZ2V0SGVpZ2h0KCk7WT1xeC5ib20uVmlld3BvcnQuZ2V0SGVpZ2h0KCk7Vj1wYXJlbnQuY2xpZW50SGVpZ2h0O1E9cGFyZW50LnNjcm9sbEhlaWdodDtNPTA7Tj0wO0w9MDt9ZWxzZXtXPXF4LmJvbS5lbGVtZW50LkxvY2F0aW9uLmdldChwYXJlbnQpO0s9Vy50b3A7Uz1XLmJvdHRvbTtZPXBhcmVudC5vZmZzZXRIZWlnaHQ7Vj1wYXJlbnQuY2xpZW50SGVpZ2h0O1E9cGFyZW50LnNjcm9sbEhlaWdodDtNPXBhcnNlSW50KHF4LmJvbS5lbGVtZW50LlN0eWxlLmdldChwYXJlbnQsaCksMTApfHwwO049cGFyc2VJbnQocXguYm9tLmVsZW1lbnQuU3R5bGUuZ2V0KHBhcmVudCxpKSwxMCl8fDA7TD1ZLVYtTS1OO31iYj1xeC5ib20uZWxlbWVudC5Mb2NhdGlvbi5nZXQoSCk7YmM9YmIudG9wO1g9YmIuYm90dG9tO1I9SC5vZmZzZXRIZWlnaHQ7VT1iYy1LLU07UD1YLVMrTjtiZD0wO2lmKGJhKXtiZD1VO31lbHNlIGlmKFQpe2JkPVArTDt9ZWxzZSBpZihVPDB8fFI+Vil7YmQ9VTt9ZWxzZSBpZihQPjApe2JkPVArTDt9cGFyZW50LnNjcm9sbFRvcCs9YmQ7aWYocXguYm9tLmNsaWVudC5FbmdpbmUuR0VDS098fHF4LmJvbS5jbGllbnQuRW5naW5lLk9QRVJBKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZmlyZU5vbkJ1YmJsaW5nRXZlbnQocGFyZW50LGopO319aWYocGFyZW50PT09Sil7YnJlYWs7fXBhcmVudD1wYXJlbnQucGFyZW50Tm9kZTt9fSxpbnRvVmlldzpmdW5jdGlvbihiZSxzdG9wLGJmLGJnKXt0aGlzLmludG9WaWV3WChiZSxzdG9wLGJmKTt0aGlzLmludG9WaWV3WShiZSxzdG9wLGJnKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGs9IiIsaj0icXguY2xpZW50IixpPSJoaWRkZW4iLGg9Ii1tb3otc2Nyb2xsYmFycy1ub25lIixnPSJvdmVyZmxvdyIsZj0iOyIsZT0ib3ZlcmZsb3dZIixkPSI6IixiPSJvdmVyZmxvd1giLGE9Im92ZXJmbG93OiIseT0ibm9uZSIseD0ic2Nyb2xsIix3PSJib3JkZXJMZWZ0U3R5bGUiLHY9ImJvcmRlclJpZ2h0U3R5bGUiLHU9ImRpdiIscj0iYm9yZGVyUmlnaHRXaWR0aCIscT0ib3ZlcmZsb3cteSIscD0iYm9yZGVyTGVmdFdpZHRoIixvPSItbW96LXNjcm9sbGJhcnMtdmVydGljYWwiLG49IjEwMHB4IixsPSJxeC5ib20uZWxlbWVudC5PdmVyZmxvdyIsbT0ib3ZlcmZsb3cteCI7cXguQ2xhc3MuZGVmaW5lKGwse3N0YXRpY3M6e19fa0w6bnVsbCxnZXRTY3JvbGxiYXJXaWR0aDpmdW5jdGlvbigpe2lmKHRoaXMuX19rTCE9PW51bGwpe3JldHVybiB0aGlzLl9fa0w7fXZhciB6PXF4LmJvbS5lbGVtZW50LlN0eWxlO3ZhciBCPWZ1bmN0aW9uKEYsRyl7cmV0dXJuIHBhcnNlSW50KHouZ2V0KEYsRyksMTApfHwwO307dmFyIEM9ZnVuY3Rpb24oSCl7cmV0dXJuICh6LmdldChILHYpPT15PzA6QihILHIpKTt9O3ZhciBBPWZ1bmN0aW9uKEkpe3JldHVybiAoei5nZXQoSSx3KT09eT8wOkIoSSxwKSk7fTt2YXIgRT1xeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGoseyJtc2h0bWwiOmZ1bmN0aW9uKEope2lmKHouZ2V0KEosZSk9PWl8fEouY2xpZW50V2lkdGg9PTApe3JldHVybiBDKEopO31yZXR1cm4gTWF0aC5tYXgoMCxKLm9mZnNldFdpZHRoLUouY2xpZW50TGVmdC1KLmNsaWVudFdpZHRoKTt9LCJkZWZhdWx0IjpmdW5jdGlvbihLKXtpZihLLmNsaWVudFdpZHRoPT0wKXt2YXIgTD16LmdldChLLGcpO3ZhciBNPShMPT14fHxMPT1vPzE2OjApO3JldHVybiBNYXRoLm1heCgwLEMoSykrTSk7fXJldHVybiBNYXRoLm1heCgwLChLLm9mZnNldFdpZHRoLUsuY2xpZW50V2lkdGgtQShLKSkpO319KTt2YXIgRD1mdW5jdGlvbihOKXtyZXR1cm4gRShOKS1DKE4pO307dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh1KTt2YXIgcz10LnN0eWxlO3MuaGVpZ2h0PXMud2lkdGg9bjtzLm92ZXJmbG93PXg7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTt2YXIgYz1EKHQpO3RoaXMuX19rTD1jP2M6MTY7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KTtyZXR1cm4gdGhpcy5fX2tMO30sX2NvbXBpbGU6cXguY29yZS5WYXJpYW50LnNlbGVjdChqLHsiZ2Vja28iOnF4LmJvbS5jbGllbnQuRW5naW5lLlZFUlNJT048MS44P2Z1bmN0aW9uKE8sUCl7aWYoUD09aSl7UD1oO31yZXR1cm4gYStQK2Y7fTpmdW5jdGlvbihRLFIpe3JldHVybiBRK2QrUitmO30sIm9wZXJhIjpxeC5ib20uY2xpZW50LkVuZ2luZS5WRVJTSU9OPDkuNT9mdW5jdGlvbihTLFQpe3JldHVybiBhK1QrZjt9OmZ1bmN0aW9uKFUsVil7cmV0dXJuIFUrZCtWK2Y7fSwiZGVmYXVsdCI6ZnVuY3Rpb24oVyxYKXtyZXR1cm4gVytkK1grZjt9fSksY29tcGlsZVg6ZnVuY3Rpb24oWSl7cmV0dXJuIHRoaXMuX2NvbXBpbGUobSxZKTt9LGNvbXBpbGVZOmZ1bmN0aW9uKGJhKXtyZXR1cm4gdGhpcy5fY29tcGlsZShxLGJhKTt9LGdldFg6cXguY29yZS5WYXJpYW50LnNlbGVjdChqLHsiZ2Vja28iOnF4LmJvbS5jbGllbnQuRW5naW5lLlZFUlNJT048MS44P2Z1bmN0aW9uKGJiLGJjKXt2YXIgYmQ9cXguYm9tLmVsZW1lbnQuU3R5bGUuZ2V0KGJiLGcsYmMsZmFsc2UpO2lmKGJkPT09aCl7YmQ9aTt9cmV0dXJuIGJkO306ZnVuY3Rpb24oYmUsYmYpe3JldHVybiBxeC5ib20uZWxlbWVudC5TdHlsZS5nZXQoYmUsYixiZixmYWxzZSk7fSwib3BlcmEiOnF4LmJvbS5jbGllbnQuRW5naW5lLlZFUlNJT048OS41P2Z1bmN0aW9uKGJnLGJoKXtyZXR1cm4gcXguYm9tLmVsZW1lbnQuU3R5bGUuZ2V0KGJnLGcsYmgsZmFsc2UpO306ZnVuY3Rpb24oYmksYmope3JldHVybiBxeC5ib20uZWxlbWVudC5TdHlsZS5nZXQoYmksYixiaixmYWxzZSk7fSwiZGVmYXVsdCI6ZnVuY3Rpb24oYmssYmwpe3JldHVybiBxeC5ib20uZWxlbWVudC5TdHlsZS5nZXQoYmssYixibCxmYWxzZSk7fX0pLHNldFg6cXguY29yZS5WYXJpYW50LnNlbGVjdChqLHsiZ2Vja28iOnF4LmJvbS5jbGllbnQuRW5naW5lLlZFUlNJT048MS44P2Z1bmN0aW9uKGJtLGJuKXtpZihibj09aSl7Ym49aDt9Ym0uc3R5bGUub3ZlcmZsb3c9Ym47fTpmdW5jdGlvbihibyxicCl7Ym8uc3R5bGUub3ZlcmZsb3dYPWJwO30sIm9wZXJhIjpxeC5ib20uY2xpZW50LkVuZ2luZS5WRVJTSU9OPDkuNT9mdW5jdGlvbihicSxicil7YnEuc3R5bGUub3ZlcmZsb3c9YnI7fTpmdW5jdGlvbihicyxidCl7YnMuc3R5bGUub3ZlcmZsb3dYPWJ0O30sImRlZmF1bHQiOmZ1bmN0aW9uKGJ1LGJ2KXtidS5zdHlsZS5vdmVyZmxvd1g9YnY7fX0pLHJlc2V0WDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGoseyJnZWNrbyI6cXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjwxLjg/ZnVuY3Rpb24oYncpe2J3LnN0eWxlLm92ZXJmbG93PWs7fTpmdW5jdGlvbihieCl7Ynguc3R5bGUub3ZlcmZsb3dYPWs7fSwib3BlcmEiOnF4LmJvbS5jbGllbnQuRW5naW5lLlZFUlNJT048OS41P2Z1bmN0aW9uKGJ5LGJ6KXtieS5zdHlsZS5vdmVyZmxvdz1rO306ZnVuY3Rpb24oYkEsYkIpe2JBLnN0eWxlLm92ZXJmbG93WD1rO30sImRlZmF1bHQiOmZ1bmN0aW9uKGJDKXtiQy5zdHlsZS5vdmVyZmxvd1g9azt9fSksZ2V0WTpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGoseyJnZWNrbyI6cXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjwxLjg/ZnVuY3Rpb24oYkQsYkUpe3ZhciBiRj1xeC5ib20uZWxlbWVudC5TdHlsZS5nZXQoYkQsZyxiRSxmYWxzZSk7aWYoYkY9PT1oKXtiRj1pO31yZXR1cm4gYkY7fTpmdW5jdGlvbihiRyxiSCl7cmV0dXJuIHF4LmJvbS5lbGVtZW50LlN0eWxlLmdldChiRyxlLGJILGZhbHNlKTt9LCJvcGVyYSI6cXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjw5LjU/ZnVuY3Rpb24oYkksYkope3JldHVybiBxeC5ib20uZWxlbWVudC5TdHlsZS5nZXQoYkksZyxiSixmYWxzZSk7fTpmdW5jdGlvbihiSyxiTCl7cmV0dXJuIHF4LmJvbS5lbGVtZW50LlN0eWxlLmdldChiSyxlLGJMLGZhbHNlKTt9LCJkZWZhdWx0IjpmdW5jdGlvbihiTSxiTil7cmV0dXJuIHF4LmJvbS5lbGVtZW50LlN0eWxlLmdldChiTSxlLGJOLGZhbHNlKTt9fSksc2V0WTpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGoseyJnZWNrbyI6cXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjwxLjg/ZnVuY3Rpb24oYk8sYlApe2lmKGJQPT09aSl7YlA9aDt9Yk8uc3R5bGUub3ZlcmZsb3c9YlA7fTpmdW5jdGlvbihiUSxiUil7YlEuc3R5bGUub3ZlcmZsb3dZPWJSO30sIm9wZXJhIjpxeC5ib20uY2xpZW50LkVuZ2luZS5WRVJTSU9OPDkuNT9mdW5jdGlvbihiUyxiVCl7YlMuc3R5bGUub3ZlcmZsb3c9YlQ7fTpmdW5jdGlvbihiVSxiVil7YlUuc3R5bGUub3ZlcmZsb3dZPWJWO30sImRlZmF1bHQiOmZ1bmN0aW9uKGJXLGJYKXtiVy5zdHlsZS5vdmVyZmxvd1k9Ylg7fX0pLHJlc2V0WTpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGoseyJnZWNrbyI6cXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjwxLjg/ZnVuY3Rpb24oYlkpe2JZLnN0eWxlLm92ZXJmbG93PWs7fTpmdW5jdGlvbihjYSl7Y2Euc3R5bGUub3ZlcmZsb3dZPWs7fSwib3BlcmEiOnF4LmJvbS5jbGllbnQuRW5naW5lLlZFUlNJT048OS41P2Z1bmN0aW9uKGNiLGNjKXtjYi5zdHlsZS5vdmVyZmxvdz1rO306ZnVuY3Rpb24oY2QsY2Upe2NkLnN0eWxlLm92ZXJmbG93WT1rO30sImRlZmF1bHQiOmZ1bmN0aW9uKGNmKXtjZi5zdHlsZS5vdmVyZmxvd1k9azt9fSl9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgcT0icXguY2xpZW50IixwPSIiLG89ImJveFNpemluZyIsbj0iYm94LXNpemluZyIsbT0iOiIsaz0iYm9yZGVyLWJveCIsaj0icXguYm9tLmVsZW1lbnQuQm94U2l6aW5nIixoPSJLaHRtbEJveFNpemluZyIsZz0iLW1vei1ib3gtc2l6aW5nIixmPSJXZWJraXRCb3hTaXppbmciLGM9IjsiLGU9Ii1raHRtbC1ib3gtc2l6aW5nIixkPSJjb250ZW50LWJveCIsYj0iLXdlYmtpdC1ib3gtc2l6aW5nIixhPSJNb3pCb3hTaXppbmciO3F4LkNsYXNzLmRlZmluZShqLHtzdGF0aWNzOntfX2NIOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QocSx7Im1zaHRtbCI6bnVsbCwid2Via2l0IjpbbyxoLGZdLCJnZWNrbyI6W2FdLCJvcGVyYSI6W29dfSksX19jSTpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KHEseyJtc2h0bWwiOm51bGwsIndlYmtpdCI6W24sZSxiXSwiZ2Vja28iOltnXSwib3BlcmEiOltuXX0pLF9fY0o6e3RhZ3M6e2J1dHRvbjp0cnVlLHNlbGVjdDp0cnVlfSx0eXBlczp7c2VhcmNoOnRydWUsYnV0dG9uOnRydWUsc3VibWl0OnRydWUscmVzZXQ6dHJ1ZSxjaGVja2JveDp0cnVlLHJhZGlvOnRydWV9fSxfX2NLOmZ1bmN0aW9uKHIpe3ZhciBzPXRoaXMuX19jSjtyZXR1cm4gcy50YWdzW3IudGFnTmFtZS50b0xvd2VyQ2FzZSgpXXx8cy50eXBlc1tyLnR5cGVdO30sY29tcGlsZTpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KHEseyJtc2h0bWwiOmZ1bmN0aW9uKHQpe3t9O30sImRlZmF1bHQiOmZ1bmN0aW9uKHUpe3ZhciB3PXRoaXMuX19jSTt2YXIgdj1wO2lmKHcpe2Zvcih2YXIgaT0wLGw9dy5sZW5ndGg7aTxsO2krKyl7dis9d1tpXSttK3UrYzt9fXJldHVybiB2O319KSxnZXQ6cXguY29yZS5WYXJpYW50LnNlbGVjdChxLHsibXNodG1sIjpmdW5jdGlvbih4KXtpZihxeC5ib20uRG9jdW1lbnQuaXNTdGFuZGFyZE1vZGUocXguZG9tLk5vZGUuZ2V0RG9jdW1lbnQoeCkpKXtpZighdGhpcy5fX2NLKHgpKXtyZXR1cm4gZDt9fXJldHVybiBrO30sImRlZmF1bHQiOmZ1bmN0aW9uKHkpe3ZhciBBPXRoaXMuX19jSDt2YXIgejtpZihBKXtmb3IodmFyIGk9MCxsPUEubGVuZ3RoO2k8bDtpKyspe3o9cXguYm9tLmVsZW1lbnQuU3R5bGUuZ2V0KHksQVtpXSxudWxsLGZhbHNlKTtpZih6IT1udWxsJiZ6IT09cCl7cmV0dXJuIHo7fX19cmV0dXJuIHA7fX0pLHNldDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KHEseyJtc2h0bWwiOmZ1bmN0aW9uKEIsQyl7e307fSwiZGVmYXVsdCI6ZnVuY3Rpb24oRCxFKXt2YXIgRj10aGlzLl9fY0g7aWYoRil7Zm9yKHZhciBpPTAsbD1GLmxlbmd0aDtpPGw7aSsrKXtELnN0eWxlW0ZbaV1dPUU7fX19fSkscmVzZXQ6ZnVuY3Rpb24oRyl7dGhpcy5zZXQoRyxwKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGs9Im4tcmVzaXplIixqPSJlLXJlc2l6ZSIsaT0ibnctcmVzaXplIixoPSJuZS1yZXNpemUiLGc9IiIsZj0iY3Vyc29yOiIsZT0icXguY2xpZW50IixkPSI7IixjPSJxeC5ib20uZWxlbWVudC5DdXJzb3IiLGI9ImN1cnNvciIsYT0iaGFuZCI7cXguQ2xhc3MuZGVmaW5lKGMse3N0YXRpY3M6e19fZVI6cXguY29yZS5WYXJpYW50LnNlbGVjdChlLHsibXNodG1sIjp7ImN1cnNvciI6YSwiZXctcmVzaXplIjpqLCJucy1yZXNpemUiOmssIm5lc3ctcmVzaXplIjpoLCJud3NlLXJlc2l6ZSI6aX0sIm9wZXJhIjp7ImNvbC1yZXNpemUiOmosInJvdy1yZXNpemUiOmssImV3LXJlc2l6ZSI6aiwibnMtcmVzaXplIjprLCJuZXN3LXJlc2l6ZSI6aCwibndzZS1yZXNpemUiOml9LCJkZWZhdWx0Ijp7fX0pLGNvbXBpbGU6ZnVuY3Rpb24obCl7cmV0dXJuIGYrKHRoaXMuX19lUltsXXx8bCkrZDt9LGdldDpmdW5jdGlvbihtLG4pe3JldHVybiBxeC5ib20uZWxlbWVudC5TdHlsZS5nZXQobSxiLG4sZmFsc2UpO30sc2V0OmZ1bmN0aW9uKG8scCl7by5zdHlsZS5jdXJzb3I9dGhpcy5fX2VSW3BdfHxwO30scmVzZXQ6ZnVuY3Rpb24ocSl7cS5zdHlsZS5jdXJzb3I9Zzt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIG89ImF1dG8iLG49InB4IixtPSIsIixsPSJjbGlwOmF1dG87IixrPSJyZWN0KCIsaj0iKTsiLGk9IiIsaD0iKSIsZz0icXguYm9tLmVsZW1lbnQuQ2xpcCIsZj0ic3RyaW5nIixjPSJjbGlwOnJlY3QoIixlPSIgIixkPSJjbGlwIixiPSJyZWN0KGF1dG8sYXV0byxhdXRvLGF1dG8pIixhPSJyZWN0KGF1dG8sIGF1dG8sIGF1dG8sIGF1dG8pIjtxeC5DbGFzcy5kZWZpbmUoZyx7c3RhdGljczp7Y29tcGlsZTpmdW5jdGlvbihwKXtpZighcCl7cmV0dXJuIGw7fXZhciB1PXAubGVmdDt2YXIgdG9wPXAudG9wO3ZhciB0PXAud2lkdGg7dmFyIHM9cC5oZWlnaHQ7dmFyIHEscjtpZih1PT1udWxsKXtxPSh0PT1udWxsP286dCtuKTt1PW87fWVsc2V7cT0odD09bnVsbD9vOnUrdCtuKTt1PXUrbjt9aWYodG9wPT1udWxsKXtyPShzPT1udWxsP286cytuKTt0b3A9bzt9ZWxzZXtyPShzPT1udWxsP286dG9wK3Mrbik7dG9wPXRvcCtuO31yZXR1cm4gYyt0b3ArbStxK20rcittK3Urajt9LGdldDpmdW5jdGlvbih2LHcpe3ZhciB5PXF4LmJvbS5lbGVtZW50LlN0eWxlLmdldCh2LGQsdyxmYWxzZSk7dmFyIEUsdG9wLEMsQjt2YXIgeCx6O2lmKHR5cGVvZiB5PT09ZiYmeSE9PW8mJnkhPT1pKXt5PXF4LmxhbmcuU3RyaW5nLnRyaW0oeSk7aWYoL1woKC4qKVwpLy50ZXN0KHkpKXt2YXIgRD1SZWdFeHAuJDE7aWYoLywvLnRlc3QoRCkpe3ZhciBBPUQuc3BsaXQobSk7fWVsc2V7dmFyIEE9RC5zcGxpdChlKTt9dG9wPXF4LmxhbmcuU3RyaW5nLnRyaW0oQVswXSk7eD1xeC5sYW5nLlN0cmluZy50cmltKEFbMV0pO3o9cXgubGFuZy5TdHJpbmcudHJpbShBWzJdKTtFPXF4LmxhbmcuU3RyaW5nLnRyaW0oQVszXSk7aWYoRT09PW8pe0U9bnVsbDt9aWYodG9wPT09byl7dG9wPW51bGw7fWlmKHg9PT1vKXt4PW51bGw7fWlmKHo9PT1vKXt6PW51bGw7fWlmKHRvcCE9bnVsbCl7dG9wPXBhcnNlSW50KHRvcCwxMCk7fWlmKHghPW51bGwpe3g9cGFyc2VJbnQoeCwxMCk7fWlmKHohPW51bGwpe3o9cGFyc2VJbnQoeiwxMCk7fWlmKEUhPW51bGwpe0U9cGFyc2VJbnQoRSwxMCk7fWlmKHghPW51bGwmJkUhPW51bGwpe0M9eC1FO31lbHNlIGlmKHghPW51bGwpe0M9eDt9aWYoeiE9bnVsbCYmdG9wIT1udWxsKXtCPXotdG9wO31lbHNlIGlmKHohPW51bGwpe0I9ejt9fWVsc2V7dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgcGFyc2UgY2xpcCBzdHJpbmc6ICIreSk7fX1yZXR1cm4ge2xlZnQ6RXx8bnVsbCx0b3A6dG9wfHxudWxsLHdpZHRoOkN8fG51bGwsaGVpZ2h0OkJ8fG51bGx9O30sc2V0OmZ1bmN0aW9uKEYsRyl7aWYoIUcpe0Yuc3R5bGUuY2xpcD1iO3JldHVybjt9dmFyIEw9Ry5sZWZ0O3ZhciB0b3A9Ry50b3A7dmFyIEs9Ry53aWR0aDt2YXIgSj1HLmhlaWdodDt2YXIgSCxJO2lmKEw9PW51bGwpe0g9KEs9PW51bGw/bzpLK24pO0w9bzt9ZWxzZXtIPShLPT1udWxsP286TCtLK24pO0w9TCtuO31pZih0b3A9PW51bGwpe0k9KEo9PW51bGw/bzpKK24pO3RvcD1vO31lbHNle0k9KEo9PW51bGw/bzp0b3ArSituKTt0b3A9dG9wK247fUYuc3R5bGUuY2xpcD1rK3RvcCttK0grbStJK20rTCtoO30scmVzZXQ6ZnVuY3Rpb24oTSl7TS5zdHlsZS5jbGlwPWE7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBtPSIiLGw9InF4LmNsaWVudCIsaz0iOyIsaj0ib3BhY2l0eToiLGk9Im9wYWNpdHkiLGg9ImZpbHRlciIsZz0iTW96T3BhY2l0eSIsZj0iKTsiLGU9IikiLGQ9Inpvb206MTtmaWx0ZXI6YWxwaGEob3BhY2l0eT0iLGE9InF4LmJvbS5lbGVtZW50Lk9wYWNpdHkiLGM9ImFscGhhKG9wYWNpdHk9IixiPSItbW96LW9wYWNpdHk6IjtxeC5DbGFzcy5kZWZpbmUoYSx7c3RhdGljczp7U1VQUE9SVF9DU1MzX09QQUNJVFk6ZmFsc2UsY29tcGlsZTpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGwseyJtc2h0bWwiOmZ1bmN0aW9uKG4pe2lmKG4+PTEpe249MTt9aWYobjwwLjAwMDAxKXtuPTA7fWlmKHF4LmJvbS5lbGVtZW50Lk9wYWNpdHkuU1VQUE9SVF9DU1MzX09QQUNJVFkpe3JldHVybiBqK24razt9ZWxzZXtyZXR1cm4gZCsobioxMDApK2Y7fX0sImdlY2tvIjpmdW5jdGlvbihvKXtpZihvPj0xKXtvPTAuOTk5OTk5O31pZighcXguYm9tLmVsZW1lbnQuT3BhY2l0eS5TVVBQT1JUX0NTUzNfT1BBQ0lUWSl7cmV0dXJuIGIrbytrO31lbHNle3JldHVybiBqK28razt9fSwiZGVmYXVsdCI6ZnVuY3Rpb24ocCl7aWYocD49MSl7cmV0dXJuIG07fXJldHVybiBqK3Arazt9fSksc2V0OnF4LmNvcmUuVmFyaWFudC5zZWxlY3QobCx7Im1zaHRtbCI6ZnVuY3Rpb24ocSxyKXtpZihxeC5ib20uZWxlbWVudC5PcGFjaXR5LlNVUFBPUlRfQ1NTM19PUEFDSVRZKXtpZihyPj0xKXtyPW07fXEuc3R5bGUub3BhY2l0eT1yO31lbHNle3ZhciBzPXF4LmJvbS5lbGVtZW50LlN0eWxlLmdldChxLGgscXguYm9tLmVsZW1lbnQuU3R5bGUuQ09NUFVURURfTU9ERSxmYWxzZSk7aWYocj49MSl7cj0xO31pZihyPDAuMDAwMDEpe3I9MDt9aWYoIXEuY3VycmVudFN0eWxlfHwhcS5jdXJyZW50U3R5bGUuaGFzTGF5b3V0KXtxLnN0eWxlLnpvb209MTt9cS5zdHlsZS5maWx0ZXI9cy5yZXBsYWNlKC9hbHBoYVwoW15cKV0qXCkvZ2ksbSkrYytyKjEwMCtlO319LCJnZWNrbyI6ZnVuY3Rpb24odCx1KXtpZih1Pj0xKXt1PTAuOTk5OTk5O31pZighcXguYm9tLmVsZW1lbnQuT3BhY2l0eS5TVVBQT1JUX0NTUzNfT1BBQ0lUWSl7dC5zdHlsZS5Nb3pPcGFjaXR5PXU7fWVsc2V7dC5zdHlsZS5vcGFjaXR5PXU7fX0sImRlZmF1bHQiOmZ1bmN0aW9uKHYsdyl7aWYodz49MSl7dz1tO312LnN0eWxlLm9wYWNpdHk9dzt9fSkscmVzZXQ6cXguY29yZS5WYXJpYW50LnNlbGVjdChsLHsibXNodG1sIjpmdW5jdGlvbih4KXtpZihxeC5ib20uZWxlbWVudC5PcGFjaXR5LlNVUFBPUlRfQ1NTM19PUEFDSVRZKXt4LnN0eWxlLm9wYWNpdHk9bTt9ZWxzZXt2YXIgeT1xeC5ib20uZWxlbWVudC5TdHlsZS5nZXQoeCxoLHF4LmJvbS5lbGVtZW50LlN0eWxlLkNPTVBVVEVEX01PREUsZmFsc2UpO3guc3R5bGUuZmlsdGVyPXkucmVwbGFjZSgvYWxwaGFcKFteXCldKlwpL2dpLG0pO319LCJnZWNrbyI6ZnVuY3Rpb24oeil7aWYoIXF4LmJvbS5lbGVtZW50Lk9wYWNpdHkuU1VQUE9SVF9DU1MzX09QQUNJVFkpe3ouc3R5bGUuTW96T3BhY2l0eT1tO31lbHNle3ouc3R5bGUub3BhY2l0eT1tO319LCJkZWZhdWx0IjpmdW5jdGlvbihBKXtBLnN0eWxlLm9wYWNpdHk9bTt9fSksZ2V0OnF4LmNvcmUuVmFyaWFudC5zZWxlY3QobCx7Im1zaHRtbCI6ZnVuY3Rpb24oQixDKXtpZihxeC5ib20uZWxlbWVudC5PcGFjaXR5LlNVUFBPUlRfQ1NTM19PUEFDSVRZKXt2YXIgRD1xeC5ib20uZWxlbWVudC5TdHlsZS5nZXQoQixpLEMsZmFsc2UpO2lmKEQhPW51bGwpe3JldHVybiBwYXJzZUZsb2F0KEQpO31yZXR1cm4gMS4wO31lbHNle3ZhciBFPXF4LmJvbS5lbGVtZW50LlN0eWxlLmdldChCLGgsQyxmYWxzZSk7aWYoRSl7dmFyIEQ9RS5tYXRjaCgvYWxwaGFcKG9wYWNpdHk9KC4qKVwpLyk7aWYoRCYmRFsxXSl7cmV0dXJuIHBhcnNlRmxvYXQoRFsxXSkvMTAwO319cmV0dXJuIDEuMDt9fSwiZ2Vja28iOmZ1bmN0aW9uKEYsRyl7dmFyIEg9cXguYm9tLmVsZW1lbnQuU3R5bGUuZ2V0KEYsIXF4LmJvbS5lbGVtZW50Lk9wYWNpdHkuU1VQUE9SVF9DU1MzX09QQUNJVFk/ZzppLEcsZmFsc2UpO2lmKEg9PTAuOTk5OTk5KXtIPTEuMDt9aWYoSCE9bnVsbCl7cmV0dXJuIHBhcnNlRmxvYXQoSCk7fXJldHVybiAxLjA7fSwiZGVmYXVsdCI6ZnVuY3Rpb24oSSxKKXt2YXIgSz1xeC5ib20uZWxlbWVudC5TdHlsZS5nZXQoSSxpLEosZmFsc2UpO2lmKEshPW51bGwpe3JldHVybiBwYXJzZUZsb2F0KEspO31yZXR1cm4gMS4wO319KX0sZGVmZXI6ZnVuY3Rpb24oTCl7TC5TVVBQT1JUX0NTUzNfT1BBQ0lUWT0odHlwZW9mIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vcGFjaXR5PT0ic3RyaW5nIik7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIG09IiIsaz0icXguY2xpZW50IixoPSJ1c2VyU2VsZWN0IixnPSJzdHlsZSIsZj0iTW96VXNlck1vZGlmeSIsZT0icHgiLGQ9ImZsb2F0IixjPSJib3JkZXJJbWFnZSIsYj0ic3R5bGVGbG9hdCIsYT0iYXBwZWFyYW5jZSIsRj0icGl4ZWxIZWlnaHQiLEU9J01zJyxEPSI6IixDPSJjc3NGbG9hdCIsQj0icGl4ZWxUb3AiLEE9InBpeGVsTGVmdCIsej0nTycseT0icXguYm9tLmVsZW1lbnQuU3R5bGUiLHg9J0todG1sJyx3PSdzdHJpbmcnLHQ9InBpeGVsUmlnaHQiLHU9J01veicscj0icGl4ZWxXaWR0aCIscz0icGl4ZWxCb3R0b20iLHA9IjsiLHE9InRleHRPdmVyZmxvdyIsbj0idXNlck1vZGlmeSIsbz0nV2Via2l0Jyx2PSJXZWJraXRVc2VyTW9kaWZ5IjtxeC5DbGFzcy5kZWZpbmUoeSx7c3RhdGljczp7X19jcjpmdW5jdGlvbigpe3ZhciBHPVthLGgscSxjXTt2YXIgSz17fTt2YXIgSD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7dmFyIEw9W3Usbyx4LHosRV07Zm9yKHZhciBpPTAsbD1HLmxlbmd0aDtpPGw7aSsrKXt2YXIgTT1HW2ldO3ZhciBJPU07aWYoSFtNXSl7S1tJXT1NO2NvbnRpbnVlO31NPXF4LmxhbmcuU3RyaW5nLmZpcnN0VXAoTSk7Zm9yKHZhciBqPTAsTj1MLmxlbmd0aDtqPE47aisrKXt2YXIgSj1MW2pdK007aWYodHlwZW9mIEhbSl09PXcpe0tbSV09SjticmVhazt9fX10aGlzLl9fY3M9Szt0aGlzLl9fY3Nbbl09cXguY29yZS5WYXJpYW50LnNlbGVjdChrLHsiZ2Vja28iOmYsIndlYmtpdCI6diwiZGVmYXVsdCI6aH0pO3RoaXMuX19jdD17fTtmb3IodmFyIEkgaW4gSyl7dGhpcy5fX2N0W0ldPXRoaXMuX19jeChLW0ldKTt9dGhpcy5fX2NzW2RdPXF4LmNvcmUuVmFyaWFudC5zZWxlY3Qoayx7Im1zaHRtbCI6YiwiZGVmYXVsdCI6Q30pO30sX19jdTp7d2lkdGg6cixoZWlnaHQ6RixsZWZ0OkEscmlnaHQ6dCx0b3A6Qixib3R0b206c30sX19jdjp7Y2xpcDpxeC5ib20uZWxlbWVudC5DbGlwLGN1cnNvcjpxeC5ib20uZWxlbWVudC5DdXJzb3Isb3BhY2l0eTpxeC5ib20uZWxlbWVudC5PcGFjaXR5LGJveFNpemluZzpxeC5ib20uZWxlbWVudC5Cb3hTaXppbmcsb3ZlcmZsb3dYOntzZXQ6cXgubGFuZy5GdW5jdGlvbi5iaW5kKHF4LmJvbS5lbGVtZW50Lk92ZXJmbG93LnNldFgscXguYm9tLmVsZW1lbnQuT3ZlcmZsb3cpLGdldDpxeC5sYW5nLkZ1bmN0aW9uLmJpbmQocXguYm9tLmVsZW1lbnQuT3ZlcmZsb3cuZ2V0WCxxeC5ib20uZWxlbWVudC5PdmVyZmxvdykscmVzZXQ6cXgubGFuZy5GdW5jdGlvbi5iaW5kKHF4LmJvbS5lbGVtZW50Lk92ZXJmbG93LnJlc2V0WCxxeC5ib20uZWxlbWVudC5PdmVyZmxvdyksY29tcGlsZTpxeC5sYW5nLkZ1bmN0aW9uLmJpbmQocXguYm9tLmVsZW1lbnQuT3ZlcmZsb3cuY29tcGlsZVgscXguYm9tLmVsZW1lbnQuT3ZlcmZsb3cpfSxvdmVyZmxvd1k6e3NldDpxeC5sYW5nLkZ1bmN0aW9uLmJpbmQocXguYm9tLmVsZW1lbnQuT3ZlcmZsb3cuc2V0WSxxeC5ib20uZWxlbWVudC5PdmVyZmxvdyksZ2V0OnF4LmxhbmcuRnVuY3Rpb24uYmluZChxeC5ib20uZWxlbWVudC5PdmVyZmxvdy5nZXRZLHF4LmJvbS5lbGVtZW50Lk92ZXJmbG93KSxyZXNldDpxeC5sYW5nLkZ1bmN0aW9uLmJpbmQocXguYm9tLmVsZW1lbnQuT3ZlcmZsb3cucmVzZXRZLHF4LmJvbS5lbGVtZW50Lk92ZXJmbG93KSxjb21waWxlOnF4LmxhbmcuRnVuY3Rpb24uYmluZChxeC5ib20uZWxlbWVudC5PdmVyZmxvdy5jb21waWxlWSxxeC5ib20uZWxlbWVudC5PdmVyZmxvdyl9fSxjb21waWxlOmZ1bmN0aW9uKE8pe3ZhciBRPVtdO3ZhciBTPXRoaXMuX19jdjt2YXIgUj10aGlzLl9fY3Q7dmFyIG5hbWUsUDtmb3IobmFtZSBpbiBPKXtQPU9bbmFtZV07aWYoUD09bnVsbCl7Y29udGludWU7fW5hbWU9UltuYW1lXXx8bmFtZTtpZihTW25hbWVdKXtRLnB1c2goU1tuYW1lXS5jb21waWxlKFApKTt9ZWxzZXtRLnB1c2godGhpcy5fX2N4KG5hbWUpLEQsUCxwKTt9fXJldHVybiBRLmpvaW4obSk7fSxfX2N3Ont9LF9fY3g6ZnVuY3Rpb24oVCl7dmFyIFU9dGhpcy5fX2N3O3ZhciBWPVVbVF07aWYoIVYpe1Y9VVtUXT1xeC5sYW5nLlN0cmluZy5oeXBoZW5hdGUoVCk7fXJldHVybiBWO30sc2V0Q3NzOnF4LmNvcmUuVmFyaWFudC5zZWxlY3Qoayx7Im1zaHRtbCI6ZnVuY3Rpb24oVyxYKXtXLnN0eWxlLmNzc1RleHQ9WDt9LCJkZWZhdWx0IjpmdW5jdGlvbihZLGJhKXtZLnNldEF0dHJpYnV0ZShnLGJhKTt9fSksZ2V0Q3NzOnF4LmNvcmUuVmFyaWFudC5zZWxlY3Qoayx7Im1zaHRtbCI6ZnVuY3Rpb24oYmIpe3JldHVybiBiYi5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCk7fSwiZGVmYXVsdCI6ZnVuY3Rpb24oYmMpe3JldHVybiBiYy5nZXRBdHRyaWJ1dGUoZyk7fX0pLGlzUHJvcGVydHlTdXBwb3J0ZWQ6ZnVuY3Rpb24oYmQpe3JldHVybiAodGhpcy5fX2N2W2JkXXx8dGhpcy5fX2NzW2JkXXx8YmQgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKTt9LENPTVBVVEVEX01PREU6MSxDQVNDQURFRF9NT0RFOjIsTE9DQUxfTU9ERTozLHNldDpmdW5jdGlvbihiZSxuYW1lLGJmLGJnKXt7fTtuYW1lPXRoaXMuX19jc1tuYW1lXXx8bmFtZTtpZihiZyE9PWZhbHNlJiZ0aGlzLl9fY3ZbbmFtZV0pe3JldHVybiB0aGlzLl9fY3ZbbmFtZV0uc2V0KGJlLGJmKTt9ZWxzZXtiZS5zdHlsZVtuYW1lXT1iZiE9PW51bGw/YmY6bTt9fSxzZXRTdHlsZXM6ZnVuY3Rpb24oYmgsYmksYmope3t9O3ZhciBibT10aGlzLl9fY3M7dmFyIGJvPXRoaXMuX19jdjt2YXIgYms9Ymguc3R5bGU7Zm9yKHZhciBibiBpbiBiaSl7dmFyIGJsPWJpW2JuXTt2YXIgbmFtZT1ibVtibl18fGJuO2lmKGJsPT09dW5kZWZpbmVkKXtpZihiaiE9PWZhbHNlJiZib1tuYW1lXSl7Ym9bbmFtZV0ucmVzZXQoYmgpO31lbHNle2JrW25hbWVdPW07fX1lbHNle2lmKGJqIT09ZmFsc2UmJmJvW25hbWVdKXtib1tuYW1lXS5zZXQoYmgsYmwpO31lbHNle2JrW25hbWVdPWJsIT09bnVsbD9ibDptO319fX0scmVzZXQ6ZnVuY3Rpb24oYnAsbmFtZSxicSl7bmFtZT10aGlzLl9fY3NbbmFtZV18fG5hbWU7aWYoYnEhPT1mYWxzZSYmdGhpcy5fX2N2W25hbWVdKXtyZXR1cm4gdGhpcy5fX2N2W25hbWVdLnJlc2V0KGJwKTt9ZWxzZXticC5zdHlsZVtuYW1lXT1tO319LGdldDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGsseyJtc2h0bWwiOmZ1bmN0aW9uKGJyLG5hbWUsYnMsYnQpe25hbWU9dGhpcy5fX2NzW25hbWVdfHxuYW1lO2lmKGJ0IT09ZmFsc2UmJnRoaXMuX19jdltuYW1lXSl7cmV0dXJuIHRoaXMuX19jdltuYW1lXS5nZXQoYnIsYnMpO31pZighYnIuY3VycmVudFN0eWxlKXtyZXR1cm4gYnIuc3R5bGVbbmFtZV18fG07fXN3aXRjaChicyl7Y2FzZSB0aGlzLkxPQ0FMX01PREU6cmV0dXJuIGJyLnN0eWxlW25hbWVdfHxtO2Nhc2UgdGhpcy5DQVNDQURFRF9NT0RFOnJldHVybiBici5jdXJyZW50U3R5bGVbbmFtZV18fG07ZGVmYXVsdDp2YXIgYng9YnIuY3VycmVudFN0eWxlW25hbWVdfHxtO2lmKC9eLT9bXC5cZF0rKHB4KT8kL2kudGVzdChieCkpe3JldHVybiBieDt9dmFyIGJ3PXRoaXMuX19jdVtuYW1lXTtpZihidyl7dmFyIGJ1PWJyLnN0eWxlW25hbWVdO2JyLnN0eWxlW25hbWVdPWJ4fHwwO3ZhciBidj1ici5zdHlsZVtid10rZTtici5zdHlsZVtuYW1lXT1idTtyZXR1cm4gYnY7fWlmKC9eLT9bXC5cZF0rKGVtfHB0fCUpPyQvaS50ZXN0KGJ4KSl7dGhyb3cgbmV3IEVycm9yKCJVbnRyYW5zbGF0ZWQgY29tcHV0ZWQgcHJvcGVydHkgdmFsdWU6ICIrbmFtZSsiLiBPbmx5IHBpeGVsIHZhbHVlcyB3b3JrIHdlbGwgYWNyb3NzIGRpZmZlcmVudCBjbGllbnRzLiIpO31yZXR1cm4gYng7fX0sImRlZmF1bHQiOmZ1bmN0aW9uKGJ5LG5hbWUsYnosYkEpe25hbWU9dGhpcy5fX2NzW25hbWVdfHxuYW1lO2lmKGJBIT09ZmFsc2UmJnRoaXMuX19jdltuYW1lXSl7cmV0dXJuIHRoaXMuX19jdltuYW1lXS5nZXQoYnksYnopO31zd2l0Y2goYnope2Nhc2UgdGhpcy5MT0NBTF9NT0RFOnJldHVybiBieS5zdHlsZVtuYW1lXXx8bTtjYXNlIHRoaXMuQ0FTQ0FERURfTU9ERTppZihieS5jdXJyZW50U3R5bGUpe3JldHVybiBieS5jdXJyZW50U3R5bGVbbmFtZV18fG07fXRocm93IG5ldyBFcnJvcigiQ2FzY2FkZWQgc3R5bGVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlciEiKTtkZWZhdWx0OnZhciBiQj1xeC5kb20uTm9kZS5nZXREb2N1bWVudChieSk7dmFyIGJDPWJCLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYnksbnVsbCk7cmV0dXJuIGJDP2JDW25hbWVdOm07fX19KX0sZGVmZXI6ZnVuY3Rpb24oYkQpe2JELl9fY3IoKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaj0iYm9yZGVyVG9wV2lkdGgiLGk9ImJvcmRlckxlZnRXaWR0aCIsaD0ibWFyZ2luVG9wIixnPSJtYXJnaW5MZWZ0IixmPSJzY3JvbGwiLGU9InF4LmNsaWVudCIsZD0iYm9yZGVyLWJveCIsYz0iYm9yZGVyQm90dG9tV2lkdGgiLGI9ImJvcmRlclJpZ2h0V2lkdGgiLGE9ImF1dG8iLHk9InBhZGRpbmciLHg9InF4LmJvbS5lbGVtZW50LkxvY2F0aW9uIix3PSJwYWRkaW5nTGVmdCIsdj0ic3RhdGljIix1PSJtYXJnaW5Cb3R0b20iLHQ9InZpc2libGUiLHM9IkJPRFkiLHI9InBhZGRpbmdCb3R0b20iLHE9InBhZGRpbmdUb3AiLHA9Im1hcmdpblJpZ2h0IixuPSJwb3NpdGlvbiIsbz0ibWFyZ2luIixsPSJvdmVyZmxvdyIsbT0icGFkZGluZ1JpZ2h0IixrPSJib3JkZXIiO3F4LkNsYXNzLmRlZmluZSh4LHtzdGF0aWNzOntfX2lZOmZ1bmN0aW9uKHosQSl7cmV0dXJuIHF4LmJvbS5lbGVtZW50LlN0eWxlLmdldCh6LEEscXguYm9tLmVsZW1lbnQuU3R5bGUuQ09NUFVURURfTU9ERSxmYWxzZSk7fSxfX2phOmZ1bmN0aW9uKEIsQyl7cmV0dXJuIHBhcnNlSW50KHF4LmJvbS5lbGVtZW50LlN0eWxlLmdldChCLEMscXguYm9tLmVsZW1lbnQuU3R5bGUuQ09NUFVURURfTU9ERSxmYWxzZSksMTApfHwwO30sX19qYjpmdW5jdGlvbihEKXt2YXIgRz0wLHRvcD0wO2lmKEQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYhcXguYm9tLmNsaWVudC5FbmdpbmUuT1BFUkEpe3ZhciBGPXF4LmRvbS5Ob2RlLmdldFdpbmRvdyhEKTtHLT1xeC5ib20uVmlld3BvcnQuZ2V0U2Nyb2xsTGVmdChGKTt0b3AtPXF4LmJvbS5WaWV3cG9ydC5nZXRTY3JvbGxUb3AoRik7fWVsc2V7dmFyIEU9cXguZG9tLk5vZGUuZ2V0RG9jdW1lbnQoRCkuYm9keTtEPUQucGFyZW50Tm9kZTt3aGlsZShEJiZEIT1FKXtHKz1ELnNjcm9sbExlZnQ7dG9wKz1ELnNjcm9sbFRvcDtEPUQucGFyZW50Tm9kZTt9fXJldHVybiB7bGVmdDpHLHRvcDp0b3B9O30sX19qYzpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGUseyJtc2h0bWwiOmZ1bmN0aW9uKEgpe3ZhciBKPXF4LmRvbS5Ob2RlLmdldERvY3VtZW50KEgpO3ZhciBJPUouYm9keTt2YXIgSz0wO3ZhciB0b3A9MDtLLT1JLmNsaWVudExlZnQrSi5kb2N1bWVudEVsZW1lbnQuY2xpZW50TGVmdDt0b3AtPUkuY2xpZW50VG9wK0ouZG9jdW1lbnRFbGVtZW50LmNsaWVudFRvcDtpZihxeC5ib20uY2xpZW50LkZlYXR1cmUuU1RBTkRBUkRfTU9ERSl7Sys9dGhpcy5fX2phKEksaSk7dG9wKz10aGlzLl9famEoSSxqKTt9cmV0dXJuIHtsZWZ0OkssdG9wOnRvcH07fSwid2Via2l0IjpmdW5jdGlvbihMKXt2YXIgTj1xeC5kb20uTm9kZS5nZXREb2N1bWVudChMKTt2YXIgTT1OLmJvZHk7dmFyIE89TS5vZmZzZXRMZWZ0O3ZhciB0b3A9TS5vZmZzZXRUb3A7aWYocXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjw1MzAuMTcpe08rPXRoaXMuX19qYShNLGkpO3RvcCs9dGhpcy5fX2phKE0saik7fXJldHVybiB7bGVmdDpPLHRvcDp0b3B9O30sImdlY2tvIjpmdW5jdGlvbihQKXt2YXIgUT1xeC5kb20uTm9kZS5nZXREb2N1bWVudChQKS5ib2R5O3ZhciBSPVEub2Zmc2V0TGVmdDt2YXIgdG9wPVEub2Zmc2V0VG9wO2lmKHF4LmJvbS5jbGllbnQuRW5naW5lLlZFUlNJT048MS45KXtSKz10aGlzLl9famEoUSxnKTt0b3ArPXRoaXMuX19qYShRLGgpO31pZihxeC5ib20uZWxlbWVudC5Cb3hTaXppbmcuZ2V0KFEpIT09ZCl7Uis9dGhpcy5fX2phKFEsaSk7dG9wKz10aGlzLl9famEoUSxqKTt9cmV0dXJuIHtsZWZ0OlIsdG9wOnRvcH07fSwiZGVmYXVsdCI6ZnVuY3Rpb24oUyl7dmFyIFQ9cXguZG9tLk5vZGUuZ2V0RG9jdW1lbnQoUykuYm9keTt2YXIgVT1ULm9mZnNldExlZnQ7dmFyIHRvcD1ULm9mZnNldFRvcDtyZXR1cm4ge2xlZnQ6VSx0b3A6dG9wfTt9fSksX19qZDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGUseyJtc2h0bWx8d2Via2l0IjpmdW5jdGlvbihWKXt2YXIgWD1xeC5kb20uTm9kZS5nZXREb2N1bWVudChWKTtpZihWLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7dmFyIFk9Vi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgYmE9WS5sZWZ0O3ZhciB0b3A9WS50b3A7fWVsc2V7dmFyIGJhPVYub2Zmc2V0TGVmdDt2YXIgdG9wPVYub2Zmc2V0VG9wO1Y9Vi5vZmZzZXRQYXJlbnQ7dmFyIFc9WC5ib2R5O3doaWxlKFYmJlYhPVcpe2JhKz1WLm9mZnNldExlZnQ7dG9wKz1WLm9mZnNldFRvcDtiYSs9dGhpcy5fX2phKFYsaSk7dG9wKz10aGlzLl9famEoVixqKTtWPVYub2Zmc2V0UGFyZW50O319cmV0dXJuIHtsZWZ0OmJhLHRvcDp0b3B9O30sImdlY2tvIjpmdW5jdGlvbihiYil7aWYoYmIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgYmU9YmIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIGJmPU1hdGgucm91bmQoYmUubGVmdCk7dmFyIHRvcD1NYXRoLnJvdW5kKGJlLnRvcCk7fWVsc2V7dmFyIGJmPTA7dmFyIHRvcD0wO3ZhciBiYz1xeC5kb20uTm9kZS5nZXREb2N1bWVudChiYikuYm9keTt2YXIgYmQ9cXguYm9tLmVsZW1lbnQuQm94U2l6aW5nO2lmKGJkLmdldChiYikhPT1kKXtiZi09dGhpcy5fX2phKGJiLGkpO3RvcC09dGhpcy5fX2phKGJiLGopO313aGlsZShiYiYmYmIhPT1iYyl7YmYrPWJiLm9mZnNldExlZnQ7dG9wKz1iYi5vZmZzZXRUb3A7aWYoYmQuZ2V0KGJiKSE9PWQpe2JmKz10aGlzLl9famEoYmIsaSk7dG9wKz10aGlzLl9famEoYmIsaik7fWlmKGJiLnBhcmVudE5vZGUmJnRoaXMuX19pWShiYi5wYXJlbnROb2RlLGwpIT10KXtiZis9dGhpcy5fX2phKGJiLnBhcmVudE5vZGUsaSk7dG9wKz10aGlzLl9famEoYmIucGFyZW50Tm9kZSxqKTt9YmI9YmIub2Zmc2V0UGFyZW50O319cmV0dXJuIHtsZWZ0OmJmLHRvcDp0b3B9O30sImRlZmF1bHQiOmZ1bmN0aW9uKGJnKXt2YXIgYmk9MDt2YXIgdG9wPTA7dmFyIGJoPXF4LmRvbS5Ob2RlLmdldERvY3VtZW50KGJnKS5ib2R5O3doaWxlKGJnJiZiZyE9PWJoKXtiaSs9Ymcub2Zmc2V0TGVmdDt0b3ArPWJnLm9mZnNldFRvcDtiZz1iZy5vZmZzZXRQYXJlbnQ7fXJldHVybiB7bGVmdDpiaSx0b3A6dG9wfTt9fSksZ2V0OmZ1bmN0aW9uKGJqLGJrKXtpZihiai50YWdOYW1lPT1zKXt2YXIgbG9jYXRpb249dGhpcy5fX2plKGJqKTt2YXIgYnI9bG9jYXRpb24ubGVmdDt2YXIgdG9wPWxvY2F0aW9uLnRvcDt9ZWxzZXt2YXIgYmw9dGhpcy5fX2pjKGJqKTt2YXIgYnE9dGhpcy5fX2pkKGJqKTt2YXIgc2Nyb2xsPXRoaXMuX19qYihiaik7dmFyIGJyPWJxLmxlZnQrYmwubGVmdC1zY3JvbGwubGVmdDt2YXIgdG9wPWJxLnRvcCtibC50b3Atc2Nyb2xsLnRvcDt9dmFyIGJtPWJyK2JqLm9mZnNldFdpZHRoO3ZhciBibj10b3ArYmoub2Zmc2V0SGVpZ2h0O2lmKGJrKXtpZihiaz09eXx8Yms9PWYpe3ZhciBibz1xeC5ib20uZWxlbWVudC5PdmVyZmxvdy5nZXRYKGJqKTtpZihibz09Znx8Ym89PWEpe2JtKz1iai5zY3JvbGxXaWR0aC1iai5vZmZzZXRXaWR0aCt0aGlzLl9famEoYmosaSkrdGhpcy5fX2phKGJqLGIpO312YXIgYnA9cXguYm9tLmVsZW1lbnQuT3ZlcmZsb3cuZ2V0WShiaik7aWYoYnA9PWZ8fGJwPT1hKXtibis9Ymouc2Nyb2xsSGVpZ2h0LWJqLm9mZnNldEhlaWdodCt0aGlzLl9famEoYmosaikrdGhpcy5fX2phKGJqLGMpO319c3dpdGNoKGJrKXtjYXNlIHk6YnIrPXRoaXMuX19qYShiaix3KTt0b3ArPXRoaXMuX19qYShiaixxKTtibS09dGhpcy5fX2phKGJqLG0pO2JuLT10aGlzLl9famEoYmoscik7Y2FzZSBmOmJyLT1iai5zY3JvbGxMZWZ0O3RvcC09Ymouc2Nyb2xsVG9wO2JtLT1iai5zY3JvbGxMZWZ0O2JuLT1iai5zY3JvbGxUb3A7Y2FzZSBrOmJyKz10aGlzLl9famEoYmosaSk7dG9wKz10aGlzLl9famEoYmosaik7Ym0tPXRoaXMuX19qYShiaixiKTtibi09dGhpcy5fX2phKGJqLGMpO2JyZWFrO2Nhc2Ugbzpici09dGhpcy5fX2phKGJqLGcpO3RvcC09dGhpcy5fX2phKGJqLGgpO2JtKz10aGlzLl9famEoYmoscCk7Ym4rPXRoaXMuX19qYShiaix1KTticmVhazt9fXJldHVybiB7bGVmdDpicix0b3A6dG9wLHJpZ2h0OmJtLGJvdHRvbTpibn07fSxfX2plOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoZSx7ImRlZmF1bHQiOmZ1bmN0aW9uKGJzKXt2YXIgdG9wPWJzLm9mZnNldFRvcCt0aGlzLl9famEoYnMsaCk7dmFyIGJ0PWJzLm9mZnNldExlZnQrdGhpcy5fX2phKGJzLGcpO3JldHVybiB7bGVmdDpidCx0b3A6dG9wfTt9LCJtc2h0bWwiOmZ1bmN0aW9uKGJ1KXt2YXIgdG9wPWJ1Lm9mZnNldFRvcDt2YXIgYnY9YnUub2Zmc2V0TGVmdDtpZighKChxeC5ib20uY2xpZW50LkVuZ2luZS5WRVJTSU9OPDh8fHF4LmJvbS5jbGllbnQuRW5naW5lLkRPQ1VNRU5UX01PREU8OCkmJiFxeC5ib20uY2xpZW50LkZlYXR1cmUuUVVJUktTX01PREUpKXt0b3ArPXRoaXMuX19qYShidSxoKTtidis9dGhpcy5fX2phKGJ1LGcpO31yZXR1cm4ge2xlZnQ6YnYsdG9wOnRvcH07fSwiZ2Vja28iOmZ1bmN0aW9uKGJ3KXt2YXIgdG9wPWJ3Lm9mZnNldFRvcCt0aGlzLl9famEoYncsaCkrdGhpcy5fX2phKGJ3LGkpO3ZhciBieD1idy5vZmZzZXRMZWZ0K3RoaXMuX19qYShidyxnKSt0aGlzLl9famEoYncsaik7cmV0dXJuIHtsZWZ0OmJ4LHRvcDp0b3B9O319KSxnZXRMZWZ0OmZ1bmN0aW9uKGJ5LGJ6KXtyZXR1cm4gdGhpcy5nZXQoYnksYnopLmxlZnQ7fSxnZXRUb3A6ZnVuY3Rpb24oYkEsYkIpe3JldHVybiB0aGlzLmdldChiQSxiQikudG9wO30sZ2V0UmlnaHQ6ZnVuY3Rpb24oYkMsYkQpe3JldHVybiB0aGlzLmdldChiQyxiRCkucmlnaHQ7fSxnZXRCb3R0b206ZnVuY3Rpb24oYkUsYkYpe3JldHVybiB0aGlzLmdldChiRSxiRikuYm90dG9tO30sZ2V0UmVsYXRpdmU6ZnVuY3Rpb24oYkcsYkgsYkksYkope3ZhciBiTD10aGlzLmdldChiRyxiSSk7dmFyIGJLPXRoaXMuZ2V0KGJILGJKKTtyZXR1cm4ge2xlZnQ6YkwubGVmdC1iSy5sZWZ0LHRvcDpiTC50b3AtYksudG9wLHJpZ2h0OmJMLnJpZ2h0LWJLLnJpZ2h0LGJvdHRvbTpiTC5ib3R0b20tYksuYm90dG9tfTt9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKGJNKXtyZXR1cm4gdGhpcy5nZXRSZWxhdGl2ZShiTSx0aGlzLmdldE9mZnNldFBhcmVudChiTSkpO30sZ2V0T2Zmc2V0UGFyZW50OmZ1bmN0aW9uKGJOKXt2YXIgYlA9Yk4ub2Zmc2V0UGFyZW50fHxkb2N1bWVudC5ib2R5O3ZhciBiTz1xeC5ib20uZWxlbWVudC5TdHlsZTt3aGlsZShiUCYmKCEvXmJvZHl8aHRtbCQvaS50ZXN0KGJQLnRhZ05hbWUpJiZiTy5nZXQoYlAsbik9PT12KSl7YlA9YlAub2Zmc2V0UGFyZW50O31yZXR1cm4gYlA7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJxeC51aS5jb3JlLnF1ZXVlLldpZGdldCIsYT0id2lkZ2V0IjtxeC5DbGFzcy5kZWZpbmUoYix7c3RhdGljczp7X19pUTp7fSxyZW1vdmU6ZnVuY3Rpb24oYyl7ZGVsZXRlIHRoaXMuX19pUVtjLiQkaGFzaF07fSxhZGQ6ZnVuY3Rpb24oZCl7dmFyIGU9dGhpcy5fX2lRO2lmKGVbZC4kJGhhc2hdKXtyZXR1cm47fWVbZC4kJGhhc2hdPWQ7cXgudWkuY29yZS5xdWV1ZS5NYW5hZ2VyLnNjaGVkdWxlRmx1c2goYSk7fSxmbHVzaDpmdW5jdGlvbigpe3ZhciBmPXRoaXMuX19pUTt2YXIgaDtmb3IodmFyIGcgaW4gZil7aD1mW2ddO2RlbGV0ZSBmW2ddO2guc3luY1dpZGdldCgpO31mb3IodmFyIGcgaW4gZil7cmV0dXJuO310aGlzLl9faVE9e307fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJxeC51aS5jb3JlLnF1ZXVlLlZpc2liaWxpdHkiLGE9InZpc2liaWxpdHkiO3F4LkNsYXNzLmRlZmluZShiLHtzdGF0aWNzOntfX2lDOnt9LF9faUQ6e30scmVtb3ZlOmZ1bmN0aW9uKGMpe3ZhciBkPWMuJCRoYXNoO2RlbGV0ZSB0aGlzLl9faURbZF07ZGVsZXRlIHRoaXMuX19pQ1tkXTt9LGlzVmlzaWJsZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2lEW2UuJCRoYXNoXXx8ZmFsc2U7fSxfX2lFOmZ1bmN0aW9uKGYpe3ZhciBoPXRoaXMuX19pRDt2YXIgZz1mLiQkaGFzaDt2YXIgaTtpZihmLmlzRXhjbHVkZWQoKSl7aT1mYWxzZTt9ZWxzZXt2YXIgcGFyZW50PWYuJCRwYXJlbnQ7aWYocGFyZW50KXtpPXRoaXMuX19pRShwYXJlbnQpO31lbHNle2k9Zi5pc1Jvb3RXaWRnZXQoKTt9fXJldHVybiBoW2ddPWk7fSxhZGQ6ZnVuY3Rpb24oail7dmFyIGs9dGhpcy5fX2lDO2lmKGtbai4kJGhhc2hdKXtyZXR1cm47fWtbai4kJGhhc2hdPWo7cXgudWkuY29yZS5xdWV1ZS5NYW5hZ2VyLnNjaGVkdWxlRmx1c2goYSk7fSxmbHVzaDpmdW5jdGlvbigpe3ZhciBsPXRoaXMuX19pQzt2YXIgcD10aGlzLl9faUQ7Zm9yKHZhciBtIGluIGwpe2lmKHBbbV0hPW51bGwpe2xbbV0uYWRkQ2hpbGRyZW5Ub1F1ZXVlKGwpO319dmFyIG89e307Zm9yKHZhciBtIGluIGwpe29bbV09cFttXTtwW21dPW51bGw7fWZvcih2YXIgbSBpbiBsKXt2YXIgbj1sW21dO2RlbGV0ZSBsW21dO2lmKHBbbV09PW51bGwpe3RoaXMuX19pRShuKTt9aWYocFttXSYmcFttXSE9b1ttXSl7bi5jaGVja0FwcGVhcmFuY2VOZWVkcygpO319dGhpcy5fX2lDPXt9O319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0iYXBwZWFyYW5jZSIsYT0icXgudWkuY29yZS5xdWV1ZS5BcHBlYXJhbmNlIjtxeC5DbGFzcy5kZWZpbmUoYSx7c3RhdGljczp7X19oTDp7fSxyZW1vdmU6ZnVuY3Rpb24oYyl7ZGVsZXRlIHRoaXMuX19oTFtjLiQkaGFzaF07fSxhZGQ6ZnVuY3Rpb24oZCl7dmFyIGU9dGhpcy5fX2hMO2lmKGVbZC4kJGhhc2hdKXtyZXR1cm47fWVbZC4kJGhhc2hdPWQ7cXgudWkuY29yZS5xdWV1ZS5NYW5hZ2VyLnNjaGVkdWxlRmx1c2goYik7fSxoYXM6ZnVuY3Rpb24oZil7cmV0dXJuICEhdGhpcy5fX2hMW2YuJCRoYXNoXTt9LGZsdXNoOmZ1bmN0aW9uKCl7dmFyIGo9cXgudWkuY29yZS5xdWV1ZS5WaXNpYmlsaXR5O3ZhciBnPXRoaXMuX19oTDt2YXIgaTtmb3IodmFyIGggaW4gZyl7aT1nW2hdO2RlbGV0ZSBnW2hdO2lmKGouaXNWaXNpYmxlKGkpKXtpLnN5bmNBcHBlYXJhbmNlKCk7fWVsc2V7aS4kJHN0YXRlQ2hhbmdlcz10cnVlO319fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJxeC51aS5jb3JlLnF1ZXVlLkxheW91dCIsYT0ibGF5b3V0IjtxeC5DbGFzcy5kZWZpbmUoYix7c3RhdGljczp7X19pZjp7fSxyZW1vdmU6ZnVuY3Rpb24oYyl7ZGVsZXRlIHRoaXMuX19pZltjLiQkaGFzaF07fSxhZGQ6ZnVuY3Rpb24oZCl7dGhpcy5fX2lmW2QuJCRoYXNoXT1kO3F4LnVpLmNvcmUucXVldWUuTWFuYWdlci5zY2hlZHVsZUZsdXNoKGEpO30sZmx1c2g6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9faWkoKTtmb3IodmFyIGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIGY9ZVtpXTtpZihmLmhhc1ZhbGlkTGF5b3V0KCkpe2NvbnRpbnVlO31pZihmLmlzUm9vdFdpZGdldCgpJiYhZi5oYXNVc2VyQm91bmRzKCkpe3ZhciBoPWYuZ2V0U2l6ZUhpbnQoKTtmLnJlbmRlckxheW91dCgwLDAsaC53aWR0aCxoLmhlaWdodCk7fWVsc2V7dmFyIGc9Zi5nZXRCb3VuZHMoKTtmLnJlbmRlckxheW91dChnLmxlZnQsZy50b3AsZy53aWR0aCxnLmhlaWdodCk7fX19LGdldE5lc3RpbmdMZXZlbDpmdW5jdGlvbihqKXt2YXIgaz10aGlzLl9faWg7dmFyIG09MDt2YXIgcGFyZW50PWo7d2hpbGUodHJ1ZSl7aWYoa1twYXJlbnQuJCRoYXNoXSE9bnVsbCl7bSs9a1twYXJlbnQuJCRoYXNoXTticmVhazt9aWYoIXBhcmVudC4kJHBhcmVudCl7YnJlYWs7fXBhcmVudD1wYXJlbnQuJCRwYXJlbnQ7bSs9MTt9dmFyIGw9bTt3aGlsZShqJiZqIT09cGFyZW50KXtrW2ouJCRoYXNoXT1sLS07aj1qLiQkcGFyZW50O31yZXR1cm4gbTt9LF9faWc6ZnVuY3Rpb24oKXt2YXIgcz1xeC51aS5jb3JlLnF1ZXVlLlZpc2liaWxpdHk7dGhpcy5fX2loPXt9O3ZhciByPVtdO3ZhciBxPXRoaXMuX19pZjt2YXIgbixwO2Zvcih2YXIgbyBpbiBxKXtuPXFbb107aWYocy5pc1Zpc2libGUobikpe3A9dGhpcy5nZXROZXN0aW5nTGV2ZWwobik7aWYoIXJbcF0pe3JbcF09e307fXJbcF1bb109bjtkZWxldGUgcVtvXTt9fXJldHVybiByO30sX19paTpmdW5jdGlvbigpe3ZhciB3PVtdO3ZhciB5PXRoaXMuX19pZygpO2Zvcih2YXIgdj15Lmxlbmd0aC0xO3Y+PTA7di0tKXtpZigheVt2XSl7Y29udGludWU7fWZvcih2YXIgdSBpbiB5W3ZdKXt2YXIgdD15W3ZdW3VdO2lmKHY9PTB8fHQuaXNSb290V2lkZ2V0KCl8fHQuaGFzVXNlckJvdW5kcygpKXt3LnB1c2godCk7dC5pbnZhbGlkYXRlTGF5b3V0Q2FjaGUoKTtjb250aW51ZTt9dmFyIEE9dC5nZXRTaXplSGludChmYWxzZSk7aWYoQSl7dC5pbnZhbGlkYXRlTGF5b3V0Q2FjaGUoKTt2YXIgeD10LmdldFNpemVIaW50KCk7dmFyIHo9KCF0LmdldEJvdW5kcygpfHxBLm1pbldpZHRoIT09eC5taW5XaWR0aHx8QS53aWR0aCE9PXgud2lkdGh8fEEubWF4V2lkdGghPT14Lm1heFdpZHRofHxBLm1pbkhlaWdodCE9PXgubWluSGVpZ2h0fHxBLmhlaWdodCE9PXguaGVpZ2h0fHxBLm1heEhlaWdodCE9PXgubWF4SGVpZ2h0KTt9ZWxzZXt6PXRydWU7fWlmKHope3ZhciBwYXJlbnQ9dC5nZXRMYXlvdXRQYXJlbnQoKTtpZigheVt2LTFdKXt5W3YtMV09e307fXlbdi0xXVtwYXJlbnQuJCRoYXNoXT1wYXJlbnQ7fWVsc2V7dy5wdXNoKHQpO319fXJldHVybiB3O319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0iZGlzcG9zZSIsYT0icXgudWkuY29yZS5xdWV1ZS5EaXNwb3NlIjtxeC5DbGFzcy5kZWZpbmUoYSx7c3RhdGljczp7X19lWDp7fSxhZGQ6ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5fX2VYO2lmKGRbYy4kJGhhc2hdKXtyZXR1cm47fWRbYy4kJGhhc2hdPWM7cXgudWkuY29yZS5xdWV1ZS5NYW5hZ2VyLnNjaGVkdWxlRmx1c2goYik7fSxmbHVzaDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19lWDtmb3IodmFyIGcgaW4gZSl7dmFyIGY9ZVtnXTtkZWxldGUgZVtnXTtmLmRpc3Bvc2UoKTt9Zm9yKHZhciBnIGluIGUpe3JldHVybjt9dGhpcy5fX2VYPXt9O319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgudWkuY29yZS5NQ2hpbGRyZW5IYW5kbGluZyI7cXguTWl4aW4uZGVmaW5lKGEse21lbWJlcnM6e2dldENoaWxkcmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldENoaWxkcmVuKCk7fSxoYXNDaGlsZHJlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNDaGlsZHJlbigpO30saW5kZXhPZjpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5faW5kZXhPZihiKTt9LGFkZDpmdW5jdGlvbihjLGQpe3RoaXMuX2FkZChjLGQpO30sYWRkQXQ6ZnVuY3Rpb24oZSxmLGcpe3RoaXMuX2FkZEF0KGUsZixnKTt9LGFkZEJlZm9yZTpmdW5jdGlvbihoLGksail7dGhpcy5fYWRkQmVmb3JlKGgsaSxqKTt9LGFkZEFmdGVyOmZ1bmN0aW9uKGssbCxtKXt0aGlzLl9hZGRBZnRlcihrLGwsbSk7fSxyZW1vdmU6ZnVuY3Rpb24obil7dGhpcy5fcmVtb3ZlKG4pO30scmVtb3ZlQXQ6ZnVuY3Rpb24obyl7cmV0dXJuIHRoaXMuX3JlbW92ZUF0KG8pO30scmVtb3ZlQWxsOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlQWxsKCk7fX0sc3RhdGljczp7cmVtYXA6ZnVuY3Rpb24ocCl7cC5nZXRDaGlsZHJlbj1wLl9nZXRDaGlsZHJlbjtwLmhhc0NoaWxkcmVuPXAuX2hhc0NoaWxkcmVuO3AuaW5kZXhPZj1wLl9pbmRleE9mO3AuYWRkPXAuX2FkZDtwLmFkZEF0PXAuX2FkZEF0O3AuYWRkQmVmb3JlPXAuX2FkZEJlZm9yZTtwLmFkZEFmdGVyPXAuX2FkZEFmdGVyO3AucmVtb3ZlPXAuX3JlbW92ZTtwLnJlbW92ZUF0PXAuX3JlbW92ZUF0O3AucmVtb3ZlQWxsPXAuX3JlbW92ZUFsbDt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LnVpLmNvcmUuTUxheW91dEhhbmRsaW5nIjtxeC5NaXhpbi5kZWZpbmUoYSx7bWVtYmVyczp7c2V0TGF5b3V0OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLl9zZXRMYXlvdXQoYik7fSxnZXRMYXlvdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0TGF5b3V0KCk7fX0sc3RhdGljczp7cmVtYXA6ZnVuY3Rpb24oYyl7Yy5nZXRMYXlvdXQ9Yy5fZ2V0TGF5b3V0O2Muc2V0TGF5b3V0PWMuX3NldExheW91dDt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGo9IkludGVnZXIiLGk9Il9hcHBseURpbWVuc2lvbiIsaD0iQm9vbGVhbiIsZz0iX2FwcGx5U3RyZXRjaGluZyIsZj0iX2FwcGx5TWFyZ2luIixlPSJzaG9ydGhhbmQiLGQ9Il9hcHBseUFsaWduIixjPSJhbGxvd1Nocmlua1kiLGI9ImJvdHRvbSIsYT0iYmFzZWxpbmUiLHg9Im1hcmdpbkJvdHRvbSIsdz0icXgudWkuY29yZS5MYXlvdXRJdGVtIix2PSJjZW50ZXIiLHU9Im1hcmdpblRvcCIsdD0iYWxsb3dHcm93WCIscz0ibWlkZGxlIixyPSJtYXJnaW5MZWZ0IixxPSJhbGxvd1Nocmlua1giLHA9InRvcCIsbz0icmlnaHQiLG09Im1hcmdpblJpZ2h0IixuPSJhYnN0cmFjdCIsaz0iYWxsb3dHcm93WSIsbD0ibGVmdCI7cXguQ2xhc3MuZGVmaW5lKHcse3R5cGU6bixleHRlbmQ6cXguY29yZS5PYmplY3QscHJvcGVydGllczp7bWluV2lkdGg6e2NoZWNrOmosbnVsbGFibGU6dHJ1ZSxhcHBseTppLGluaXQ6bnVsbCx0aGVtZWFibGU6dHJ1ZX0sd2lkdGg6e2NoZWNrOmosbnVsbGFibGU6dHJ1ZSxhcHBseTppLGluaXQ6bnVsbCx0aGVtZWFibGU6dHJ1ZX0sbWF4V2lkdGg6e2NoZWNrOmosbnVsbGFibGU6dHJ1ZSxhcHBseTppLGluaXQ6bnVsbCx0aGVtZWFibGU6dHJ1ZX0sbWluSGVpZ2h0OntjaGVjazpqLG51bGxhYmxlOnRydWUsYXBwbHk6aSxpbml0Om51bGwsdGhlbWVhYmxlOnRydWV9LGhlaWdodDp7Y2hlY2s6aixudWxsYWJsZTp0cnVlLGFwcGx5OmksaW5pdDpudWxsLHRoZW1lYWJsZTp0cnVlfSxtYXhIZWlnaHQ6e2NoZWNrOmosbnVsbGFibGU6dHJ1ZSxhcHBseTppLGluaXQ6bnVsbCx0aGVtZWFibGU6dHJ1ZX0sYWxsb3dHcm93WDp7Y2hlY2s6aCxhcHBseTpnLGluaXQ6dHJ1ZSx0aGVtZWFibGU6dHJ1ZX0sYWxsb3dTaHJpbmtYOntjaGVjazpoLGFwcGx5OmcsaW5pdDp0cnVlLHRoZW1lYWJsZTp0cnVlfSxhbGxvd0dyb3dZOntjaGVjazpoLGFwcGx5OmcsaW5pdDp0cnVlLHRoZW1lYWJsZTp0cnVlfSxhbGxvd1Nocmlua1k6e2NoZWNrOmgsYXBwbHk6Zyxpbml0OnRydWUsdGhlbWVhYmxlOnRydWV9LGFsbG93U3RyZXRjaFg6e2dyb3VwOlt0LHFdLG1vZGU6ZSx0aGVtZWFibGU6dHJ1ZX0sYWxsb3dTdHJldGNoWTp7Z3JvdXA6W2ssY10sbW9kZTplLHRoZW1lYWJsZTp0cnVlfSxtYXJnaW5Ub3A6e2NoZWNrOmosaW5pdDowLGFwcGx5OmYsdGhlbWVhYmxlOnRydWV9LG1hcmdpblJpZ2h0OntjaGVjazpqLGluaXQ6MCxhcHBseTpmLHRoZW1lYWJsZTp0cnVlfSxtYXJnaW5Cb3R0b206e2NoZWNrOmosaW5pdDowLGFwcGx5OmYsdGhlbWVhYmxlOnRydWV9LG1hcmdpbkxlZnQ6e2NoZWNrOmosaW5pdDowLGFwcGx5OmYsdGhlbWVhYmxlOnRydWV9LG1hcmdpbjp7Z3JvdXA6W3UsbSx4LHJdLG1vZGU6ZSx0aGVtZWFibGU6dHJ1ZX0sYWxpZ25YOntjaGVjazpbbCx2LG9dLG51bGxhYmxlOnRydWUsYXBwbHk6ZCx0aGVtZWFibGU6dHJ1ZX0sYWxpZ25ZOntjaGVjazpbcCxzLGIsYV0sbnVsbGFibGU6dHJ1ZSxhcHBseTpkLHRoZW1lYWJsZTp0cnVlfX0sbWVtYmVyczp7X19mejpudWxsLF9fZkE6bnVsbCxfX2ZCOm51bGwsX19mQzpudWxsLF9fZkQ6bnVsbCxfX2ZFOm51bGwsX19mRjpudWxsLGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZkV8fHRoaXMuX19mQXx8bnVsbDt9LGNsZWFyU2VwYXJhdG9yczpmdW5jdGlvbigpe30scmVuZGVyU2VwYXJhdG9yOmZ1bmN0aW9uKHkseil7fSxyZW5kZXJMYXlvdXQ6ZnVuY3Rpb24oQSx0b3AsQixDKXt2YXIgRDt7fTt2YXIgRT1udWxsO2lmKHRoaXMuZ2V0SGVpZ2h0KCk9PW51bGwmJnRoaXMuX2hhc0hlaWdodEZvcldpZHRoKCkpe3ZhciBFPXRoaXMuX2dldEhlaWdodEZvcldpZHRoKEIpO31pZihFIT1udWxsJiZFIT09dGhpcy5fX2Z6KXt0aGlzLl9fZno9RTtxeC51aS5jb3JlLnF1ZXVlLkxheW91dC5hZGQodGhpcyk7cmV0dXJuIG51bGw7fXZhciBHPXRoaXMuX19mQTtpZighRyl7Rz10aGlzLl9fZkE9e307fXZhciBGPXt9O2lmKEEhPT1HLmxlZnR8fHRvcCE9PUcudG9wKXtGLnBvc2l0aW9uPXRydWU7Ry5sZWZ0PUE7Ry50b3A9dG9wO31pZihCIT09Ry53aWR0aHx8QyE9PUcuaGVpZ2h0KXtGLnNpemU9dHJ1ZTtHLndpZHRoPUI7Ry5oZWlnaHQ9Qzt9aWYodGhpcy5fX2ZCKXtGLmxvY2FsPXRydWU7ZGVsZXRlIHRoaXMuX19mQjt9aWYodGhpcy5fX2ZEKXtGLm1hcmdpbj10cnVlO2RlbGV0ZSB0aGlzLl9fZkQ7fXJldHVybiBGO30saXNFeGNsdWRlZDpmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9LGhhc1ZhbGlkTGF5b3V0OmZ1bmN0aW9uKCl7cmV0dXJuICF0aGlzLl9fZkI7fSxzY2hlZHVsZUxheW91dFVwZGF0ZTpmdW5jdGlvbigpe3F4LnVpLmNvcmUucXVldWUuTGF5b3V0LmFkZCh0aGlzKTt9LGludmFsaWRhdGVMYXlvdXRDYWNoZTpmdW5jdGlvbigpe3RoaXMuX19mQj10cnVlO3RoaXMuX19mQz1udWxsO30sZ2V0U2l6ZUhpbnQ6ZnVuY3Rpb24oSCl7dmFyIEk9dGhpcy5fX2ZDO2lmKEkpe3JldHVybiBJO31pZihIPT09ZmFsc2Upe3JldHVybiBudWxsO31JPXRoaXMuX19mQz10aGlzLl9jb21wdXRlU2l6ZUhpbnQoKTtpZih0aGlzLl9oYXNIZWlnaHRGb3JXaWR0aCgpJiZ0aGlzLl9fZnomJnRoaXMuZ2V0SGVpZ2h0KCk9PW51bGwpe0kuaGVpZ2h0PXRoaXMuX19mejt9aWYoSS5taW5XaWR0aD5JLndpZHRoKXtJLndpZHRoPUkubWluV2lkdGg7fWlmKEkubWF4V2lkdGg8SS53aWR0aCl7SS53aWR0aD1JLm1heFdpZHRoO31pZighdGhpcy5nZXRBbGxvd0dyb3dYKCkpe0kubWF4V2lkdGg9SS53aWR0aDt9aWYoIXRoaXMuZ2V0QWxsb3dTaHJpbmtYKCkpe0kubWluV2lkdGg9SS53aWR0aDt9aWYoSS5taW5IZWlnaHQ+SS5oZWlnaHQpe0kuaGVpZ2h0PUkubWluSGVpZ2h0O31pZihJLm1heEhlaWdodDxJLmhlaWdodCl7SS5oZWlnaHQ9SS5tYXhIZWlnaHQ7fWlmKCF0aGlzLmdldEFsbG93R3Jvd1koKSl7SS5tYXhIZWlnaHQ9SS5oZWlnaHQ7fWlmKCF0aGlzLmdldEFsbG93U2hyaW5rWSgpKXtJLm1pbkhlaWdodD1JLmhlaWdodDt9cmV0dXJuIEk7fSxfY29tcHV0ZVNpemVIaW50OmZ1bmN0aW9uKCl7dmFyIE49dGhpcy5nZXRNaW5XaWR0aCgpfHwwO3ZhciBLPXRoaXMuZ2V0TWluSGVpZ2h0KCl8fDA7dmFyIE89dGhpcy5nZXRXaWR0aCgpfHxOO3ZhciBNPXRoaXMuZ2V0SGVpZ2h0KCl8fEs7dmFyIEo9dGhpcy5nZXRNYXhXaWR0aCgpfHxJbmZpbml0eTt2YXIgTD10aGlzLmdldE1heEhlaWdodCgpfHxJbmZpbml0eTtyZXR1cm4ge21pbldpZHRoOk4sd2lkdGg6TyxtYXhXaWR0aDpKLG1pbkhlaWdodDpLLGhlaWdodDpNLG1heEhlaWdodDpMfTt9LF9oYXNIZWlnaHRGb3JXaWR0aDpmdW5jdGlvbigpe3ZhciBQPXRoaXMuX2dldExheW91dCgpO2lmKFApe3JldHVybiBQLmhhc0hlaWdodEZvcldpZHRoKCk7fXJldHVybiBmYWxzZTt9LF9nZXRIZWlnaHRGb3JXaWR0aDpmdW5jdGlvbihRKXt2YXIgUj10aGlzLl9nZXRMYXlvdXQoKTtpZihSJiZSLmhhc0hlaWdodEZvcldpZHRoKCkpe3JldHVybiBSLmdldEhlaWdodEZvcldpZHRoKFEpO31yZXR1cm4gbnVsbDt9LF9nZXRMYXlvdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbDt9LF9hcHBseU1hcmdpbjpmdW5jdGlvbigpe3RoaXMuX19mRD10cnVlO3ZhciBwYXJlbnQ9dGhpcy4kJHBhcmVudDtpZihwYXJlbnQpe3BhcmVudC51cGRhdGVMYXlvdXRQcm9wZXJ0aWVzKCk7fX0sX2FwcGx5QWxpZ246ZnVuY3Rpb24oKXt2YXIgcGFyZW50PXRoaXMuJCRwYXJlbnQ7aWYocGFyZW50KXtwYXJlbnQudXBkYXRlTGF5b3V0UHJvcGVydGllcygpO319LF9hcHBseURpbWVuc2lvbjpmdW5jdGlvbigpe3F4LnVpLmNvcmUucXVldWUuTGF5b3V0LmFkZCh0aGlzKTt9LF9hcHBseVN0cmV0Y2hpbmc6ZnVuY3Rpb24oKXtxeC51aS5jb3JlLnF1ZXVlLkxheW91dC5hZGQodGhpcyk7fSxoYXNVc2VyQm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuICEhdGhpcy5fX2ZFO30sc2V0VXNlckJvdW5kczpmdW5jdGlvbihTLHRvcCxULFUpe3RoaXMuX19mRT17bGVmdDpTLHRvcDp0b3Asd2lkdGg6VCxoZWlnaHQ6VX07cXgudWkuY29yZS5xdWV1ZS5MYXlvdXQuYWRkKHRoaXMpO30scmVzZXRVc2VyQm91bmRzOmZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuX19mRTtxeC51aS5jb3JlLnF1ZXVlLkxheW91dC5hZGQodGhpcyk7fSxfX2ZHOnt9LHNldExheW91dFByb3BlcnRpZXM6ZnVuY3Rpb24oVil7aWYoVj09bnVsbCl7cmV0dXJuO312YXIgVz10aGlzLl9fZkY7aWYoIVcpe1c9dGhpcy5fX2ZGPXt9O312YXIgcGFyZW50PXRoaXMuZ2V0TGF5b3V0UGFyZW50KCk7aWYocGFyZW50KXtwYXJlbnQudXBkYXRlTGF5b3V0UHJvcGVydGllcyhWKTt9Zm9yKHZhciBYIGluIFYpe2lmKFZbWF09PW51bGwpe2RlbGV0ZSBXW1hdO31lbHNle1dbWF09VltYXTt9fX0sZ2V0TGF5b3V0UHJvcGVydGllczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZkZ8fHRoaXMuX19mRzt9LGNsZWFyTGF5b3V0UHJvcGVydGllczpmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLl9fZkY7fSx1cGRhdGVMYXlvdXRQcm9wZXJ0aWVzOmZ1bmN0aW9uKFkpe3ZhciBiYT10aGlzLl9nZXRMYXlvdXQoKTtpZihiYSl7dmFyIGJiO3t9O2JhLmludmFsaWRhdGVDaGlsZHJlbkNhY2hlKCk7fXF4LnVpLmNvcmUucXVldWUuTGF5b3V0LmFkZCh0aGlzKTt9LGdldEFwcGxpY2F0aW9uUm9vdDpmdW5jdGlvbigpe3JldHVybiBxeC5jb3JlLkluaXQuZ2V0QXBwbGljYXRpb24oKS5nZXRSb290KCk7fSxnZXRMYXlvdXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kJHBhcmVudHx8bnVsbDt9LHNldExheW91dFBhcmVudDpmdW5jdGlvbihwYXJlbnQpe2lmKHRoaXMuJCRwYXJlbnQ9PT1wYXJlbnQpe3JldHVybjt9dGhpcy4kJHBhcmVudD1wYXJlbnR8fG51bGw7cXgudWkuY29yZS5xdWV1ZS5WaXNpYmlsaXR5LmFkZCh0aGlzKTt9LGlzUm9vdFdpZGdldDpmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9LF9nZXRSb290OmZ1bmN0aW9uKCl7dmFyIHBhcmVudD10aGlzO3doaWxlKHBhcmVudCl7aWYocGFyZW50LmlzUm9vdFdpZGdldCgpKXtyZXR1cm4gcGFyZW50O31wYXJlbnQ9cGFyZW50LiQkcGFyZW50O31yZXR1cm4gbnVsbDt9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGJjPXF4LmNvcmUuT2JqZWN0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO3ZhciBiZD10aGlzLl9fZkY7aWYoYmQpe2JjLl9fZkY9cXgubGFuZy5PYmplY3QuY2xvbmUoYmQpO31yZXR1cm4gYmM7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLiQkcGFyZW50PXRoaXMuJCRzdWJwYXJlbnQ9dGhpcy5fX2ZGPXRoaXMuX19mQT10aGlzLl9fZkU9dGhpcy5fX2ZDPW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LmxvY2FsZS5NVHJhbnNsYXRpb24iO3F4Lk1peGluLmRlZmluZShhLHttZW1iZXJzOnt0cjpmdW5jdGlvbihiLGMpe3ZhciBkPXF4LmxvY2FsZS5NYW5hZ2VyO2lmKGQpe3JldHVybiBkLnRyLmFwcGx5KGQsYXJndW1lbnRzKTt9dGhyb3cgbmV3IEVycm9yKCJUbyBlbmFibGUgbG9jYWxpemF0aW9uIHBsZWFzZSBpbmNsdWRlIHF4LmxvY2FsZS5NYW5hZ2VyIGludG8geW91ciBidWlsZCEiKTt9LHRybjpmdW5jdGlvbihlLGYsZyxoKXt2YXIgaT1xeC5sb2NhbGUuTWFuYWdlcjtpZihpKXtyZXR1cm4gaS50cm4uYXBwbHkoaSxhcmd1bWVudHMpO310aHJvdyBuZXcgRXJyb3IoIlRvIGVuYWJsZSBsb2NhbGl6YXRpb24gcGxlYXNlIGluY2x1ZGUgcXgubG9jYWxlLk1hbmFnZXIgaW50byB5b3VyIGJ1aWxkISIpO30sdHJjOmZ1bmN0aW9uKGosayxsKXt2YXIgbT1xeC5sb2NhbGUuTWFuYWdlcjtpZihtKXtyZXR1cm4gbS50cmMuYXBwbHkobSxhcmd1bWVudHMpO310aHJvdyBuZXcgRXJyb3IoIlRvIGVuYWJsZSBsb2NhbGl6YXRpb24gcGxlYXNlIGluY2x1ZGUgcXgubG9jYWxlLk1hbmFnZXIgaW50byB5b3VyIGJ1aWxkISIpO30sbWFya3RyOmZ1bmN0aW9uKG4pe3ZhciBvPXF4LmxvY2FsZS5NYW5hZ2VyO2lmKG8pe3JldHVybiBvLm1hcmt0ci5hcHBseShvLGFyZ3VtZW50cyk7fXRocm93IG5ldyBFcnJvcigiVG8gZW5hYmxlIGxvY2FsaXphdGlvbiBwbGVhc2UgaW5jbHVkZSBxeC5sb2NhbGUuTWFuYWdlciBpbnRvIHlvdXIgYnVpbGQhIik7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJxeC51aS5jb3JlLkRlY29yYXRvckZhY3RvcnkiLGE9IiQkbm9wb29sJCQiO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9fY1U9e307fSxzdGF0aWNzOntNQVhfU0laRToxNSxfX2NWOmF9LG1lbWJlcnM6e19fY1U6bnVsbCxnZXREZWNvcmF0b3JFbGVtZW50OmZ1bmN0aW9uKGMpe3ZhciBoPXF4LnVpLmNvcmUuRGVjb3JhdG9yRmFjdG9yeTtpZihxeC5sYW5nLlR5cGUuaXNTdHJpbmcoYykpe3ZhciBmPWM7dmFyIGU9cXgudGhlbWUubWFuYWdlci5EZWNvcmF0aW9uLmdldEluc3RhbmNlKCkucmVzb2x2ZShjKTt9ZWxzZXt2YXIgZj1oLl9fY1Y7ZT1jO312YXIgZz10aGlzLl9fY1U7aWYoZ1tmXSYmZ1tmXS5sZW5ndGg+MCl7dmFyIGQ9Z1tmXS5wb3AoKTt9ZWxzZXt2YXIgZD10aGlzLl9jcmVhdGVEZWNvcmF0b3JFbGVtZW50KGUsZik7fWQuJCRwb29sZWQ9ZmFsc2U7cmV0dXJuIGQ7fSxwb29sRGVjb3JhdG9yOmZ1bmN0aW9uKGkpe2lmKCFpfHxpLiQkcG9vbGVkfHxpLmlzRGlzcG9zZWQoKSl7cmV0dXJuO312YXIgbD1xeC51aS5jb3JlLkRlY29yYXRvckZhY3Rvcnk7dmFyIGo9aS5nZXRJZCgpO2lmKGo9PWwuX19jVil7aS5kaXNwb3NlKCk7cmV0dXJuO312YXIgaz10aGlzLl9fY1U7aWYoIWtbal0pe2tbal09W107fWlmKGtbal0ubGVuZ3RoPmwuTUFYX1NJWkUpe2kuZGlzcG9zZSgpO31lbHNle2kuJCRwb29sZWQ9dHJ1ZTtrW2pdLnB1c2goaSk7fX0sX2NyZWF0ZURlY29yYXRvckVsZW1lbnQ6ZnVuY3Rpb24obSxuKXt2YXIgbz1uZXcgcXguaHRtbC5EZWNvcmF0b3IobSxuKTt7fTtyZXR1cm4gbzt9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHF4LmNvcmUuT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7aWYoIXF4LmNvcmUuT2JqZWN0UmVnaXN0cnkuaW5TaHV0RG93bil7dmFyIHE9dGhpcy5fX2NVO2Zvcih2YXIgcCBpbiBxKXtxeC51dGlsLkRpc3Bvc2VVdGlsLmRpc3Bvc2VBcnJheShxLHApO319dGhpcy5fX2NVPW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGJWPSJweCIsYlU9IkJvb2xlYW4iLGJUPSJxeC5ldmVudC50eXBlLkRyYWciLGJTPSJxeC5ldmVudC50eXBlLk1vdXNlIixiUj0idmlzaWJsZSIsYlE9InF4LmV2ZW50LnR5cGUuRm9jdXMiLGJQPSJvbiIsYk89IkludGVnZXIiLGJOPSJxeC5ldmVudC50eXBlLlRvdWNoIixiTT0iZXhjbHVkZWQiLGJ4PSJxeC5ldmVudC50eXBlLkRhdGEiLGJ3PSJfYXBwbHlQYWRkaW5nIixidj0icXguZXZlbnQudHlwZS5FdmVudCIsYnU9ImhpZGRlbiIsYnQ9ImNvbnRleHRtZW51Iixicz0iU3RyaW5nIixicj0idGFiSW5kZXgiLGJxPSJmb2N1c2VkIixicD0iY2hhbmdlVmlzaWJpbGl0eSIsYm89Im1zaHRtbCIsY2Q9ImhvdmVyZWQiLGNlPSJxeC5ldmVudC50eXBlLktleVNlcXVlbmNlIixjYj0icXguY2xpZW50IixjYz0iYWJzb2x1dGUiLGJZPSJiYWNrZ3JvdW5kQ29sb3IiLGNhPSJkcmFnIixiVz0iZGl2IixiWD0iZGlzYWJsZWQiLGNmPSJtb3ZlIixjZz0iZHJhZ3N0YXJ0IixiRj0icXguZHlubG9jYWxlIixiRT0iZHJhZ2NoYW5nZSIsYkg9ImRyYWdlbmQiLGJHPSJyZXNpemUiLGJKPSJEZWNvcmF0b3IiLGJJPSJ6SW5kZXgiLGJMPSJvcGFjaXR5IixiSz0iZGVmYXVsdCIsYkQ9IkNvbG9yIixiQz0iY2hhbmdlVG9vbFRpcFRleHQiLGM9ImJlZm9yZUNvbnRleHRtZW51T3BlbiIsZD0iX2FwcGx5TmF0aXZlQ29udGV4dE1lbnUiLGY9Il9hcHBseUJhY2tncm91bmRDb2xvciIsZz0iX2FwcGx5Rm9jdXNhYmxlIixoPSJjaGFuZ2VTaGFkb3ciLGo9InF4LmV2ZW50LnR5cGUuS2V5SW5wdXQiLGs9ImNyZWF0ZUNoaWxkQ29udHJvbCIsbT0iX19kUSIsbj0iRm9udCIsbz0iX2FwcGx5U2hhZG93Iixjaz0iX2FwcGx5RW5hYmxlZCIsY2o9Il9hcHBseVNlbGVjdGFibGUiLGNpPSJOdW1iZXIiLGNoPSJfYXBwbHlLZWVwQWN0aXZlIixjbz0iX19lYSIsY249Il9hcHBseVZpc2liaWxpdHkiLGNtPSJyZXBlYXQiLGNsPSJxeERyYWdnYWJsZSIsY3E9Il9fZFIiLGNwPSJzeW5jQXBwZWFyYW5jZSIsTj0icGFkZGluZ0xlZnQiLE89Il9hcHBseURyb3BwYWJsZSIsTD0iX19lYyIsTT0iIyIsUj0icXguZXZlbnQudHlwZS5Nb3VzZVdoZWVsIixTPSJfYXBwbHlDdXJzb3IiLFA9Il9hcHBseURyYWdnYWJsZSIsUT0iY2hhbmdlVGV4dENvbG9yIixKPSIkJHdpZGdldCIsSz0iY2hhbmdlQ29udGV4dE1lbnUiLHc9InBhZGRpbmdUb3AiLHY9ImNoYW5nZVNlbGVjdGFibGUiLHk9ImhpZGVGb2N1cyIseD0ibm9uZSIscz0ib3V0bGluZSIscj0iX2FwcGx5QXBwZWFyYW5jZSIsdT0iX2FwcGx5T3BhY2l0eSIsdD0idXJsKCIscT0iKSIscD0icXgudWkuY29yZS5XaWRnZXQiLFg9Il9hcHBseUZvbnQiLFk9ImN1cnNvciIsYmE9InF4RHJvcHBhYmxlIixiYj0iY2hhbmdlWkluZGV4IixUPSJjaGFuZ2VFbmFibGVkIixVPSJjaGFuZ2VGb250IixWPSJfX2VlIixXPSJfX2RVIixiYz0iX2FwcGx5RGVjb3JhdG9yIixiZD0iX2FwcGx5WkluZGV4IixHPSJfYXBwbHlUZXh0Q29sb3IiLEY9InF4LnVpLm1lbnUuTWVudSIsRT0iX2FwcGx5VG9vbFRpcFRleHQiLEQ9InRydWUiLEM9IndpZGdldCIsQj0iY2hhbmdlRGVjb3JhdG9yIixBPSJfX2RWIix6PSJfYXBwbHlUYWJJbmRleCIsST0iY2hhbmdlQXBwZWFyYW5jZSIsSD0ic2hvcnRoYW5kIixiZT0iLyIsYmY9IiIsYmc9Il9hcHBseUNvbnRleHRNZW51IixiaD0icGFkZGluZ0JvdHRvbSIsYmk9Il9fZFciLGJqPSJjaGFuZ2VOYXRpdmVDb250ZXh0TWVudSIsYms9InF4LnVpLnRvb2x0aXAuVG9vbFRpcCIsYmw9InF4S2VlcEFjdGl2ZSIsYm09Il9hcHBseUtlZXBGb2N1cyIsYm49InBhZGRpbmdSaWdodCIsYkI9ImNoYW5nZUJhY2tncm91bmRDb2xvciIsYkE9ImNoYW5nZUxvY2FsZSIsYno9InF4S2VlcEZvY3VzIixieT0icXgvc3RhdGljL2JsYW5rLmdpZiI7cXguQ2xhc3MuZGVmaW5lKHAse2V4dGVuZDpxeC51aS5jb3JlLkxheW91dEl0ZW0saW5jbHVkZTpbcXgubG9jYWxlLk1UcmFuc2xhdGlvbl0sY29uc3RydWN0OmZ1bmN0aW9uKCl7cXgudWkuY29yZS5MYXlvdXRJdGVtLmNhbGwodGhpcyk7dGhpcy5fX2RRPXRoaXMuX2NyZWF0ZUNvbnRhaW5lckVsZW1lbnQoKTt0aGlzLl9fZFI9dGhpcy5fX2VkKCk7dGhpcy5fX2RRLmFkZCh0aGlzLl9fZFIpO3RoaXMuaW5pdEZvY3VzYWJsZSgpO3RoaXMuaW5pdFNlbGVjdGFibGUoKTt0aGlzLmluaXROYXRpdmVDb250ZXh0TWVudSgpO30sZXZlbnRzOnthcHBlYXI6YnYsZGlzYXBwZWFyOmJ2LGNyZWF0ZUNoaWxkQ29udHJvbDpieCxyZXNpemU6YngsbW92ZTpieCxzeW5jQXBwZWFyYW5jZTpieCxtb3VzZW1vdmU6YlMsbW91c2VvdmVyOmJTLG1vdXNlb3V0OmJTLG1vdXNlZG93bjpiUyxtb3VzZXVwOmJTLGNsaWNrOmJTLGRibGNsaWNrOmJTLGNvbnRleHRtZW51OmJTLGJlZm9yZUNvbnRleHRtZW51T3BlbjpieCxtb3VzZXdoZWVsOlIsdG91Y2hzdGFydDpiTix0b3VjaGVuZDpiTix0b3VjaG1vdmU6Yk4sdG91Y2hjYW5jZWw6Yk4sdGFwOmJOLHN3aXBlOmJOLGtleXVwOmNlLGtleWRvd246Y2Usa2V5cHJlc3M6Y2Usa2V5aW5wdXQ6aixmb2N1czpiUSxibHVyOmJRLGZvY3VzaW46YlEsZm9jdXNvdXQ6YlEsYWN0aXZhdGU6YlEsZGVhY3RpdmF0ZTpiUSxjYXB0dXJlOmJ2LGxvc2VjYXB0dXJlOmJ2LGRyb3A6YlQsZHJhZ2xlYXZlOmJULGRyYWdvdmVyOmJULGRyYWc6YlQsZHJhZ3N0YXJ0OmJULGRyYWdlbmQ6YlQsZHJhZ2NoYW5nZTpiVCxkcm9wcmVxdWVzdDpiVH0scHJvcGVydGllczp7cGFkZGluZ1RvcDp7Y2hlY2s6Yk8saW5pdDowLGFwcGx5OmJ3LHRoZW1lYWJsZTp0cnVlfSxwYWRkaW5nUmlnaHQ6e2NoZWNrOmJPLGluaXQ6MCxhcHBseTpidyx0aGVtZWFibGU6dHJ1ZX0scGFkZGluZ0JvdHRvbTp7Y2hlY2s6Yk8saW5pdDowLGFwcGx5OmJ3LHRoZW1lYWJsZTp0cnVlfSxwYWRkaW5nTGVmdDp7Y2hlY2s6Yk8saW5pdDowLGFwcGx5OmJ3LHRoZW1lYWJsZTp0cnVlfSxwYWRkaW5nOntncm91cDpbdyxibixiaCxOXSxtb2RlOkgsdGhlbWVhYmxlOnRydWV9LHpJbmRleDp7bnVsbGFibGU6dHJ1ZSxpbml0Om51bGwsYXBwbHk6YmQsZXZlbnQ6YmIsY2hlY2s6Yk8sdGhlbWVhYmxlOnRydWV9LGRlY29yYXRvcjp7bnVsbGFibGU6dHJ1ZSxpbml0Om51bGwsYXBwbHk6YmMsZXZlbnQ6QixjaGVjazpiSix0aGVtZWFibGU6dHJ1ZX0sc2hhZG93OntudWxsYWJsZTp0cnVlLGluaXQ6bnVsbCxhcHBseTpvLGV2ZW50OmgsY2hlY2s6YkosdGhlbWVhYmxlOnRydWV9LGJhY2tncm91bmRDb2xvcjp7bnVsbGFibGU6dHJ1ZSxjaGVjazpiRCxhcHBseTpmLGV2ZW50OmJCLHRoZW1lYWJsZTp0cnVlfSx0ZXh0Q29sb3I6e251bGxhYmxlOnRydWUsY2hlY2s6YkQsYXBwbHk6RyxldmVudDpRLHRoZW1lYWJsZTp0cnVlLGluaGVyaXRhYmxlOnRydWV9LGZvbnQ6e251bGxhYmxlOnRydWUsYXBwbHk6WCxjaGVjazpuLGV2ZW50OlUsdGhlbWVhYmxlOnRydWUsaW5oZXJpdGFibGU6dHJ1ZSxkZXJlZmVyZW5jZTp0cnVlfSxvcGFjaXR5OntjaGVjazpjaSxhcHBseTp1LHRoZW1lYWJsZTp0cnVlLG51bGxhYmxlOnRydWUsaW5pdDpudWxsfSxjdXJzb3I6e2NoZWNrOmJzLGFwcGx5OlMsdGhlbWVhYmxlOnRydWUsaW5oZXJpdGFibGU6dHJ1ZSxudWxsYWJsZTp0cnVlLGluaXQ6bnVsbH0sdG9vbFRpcDp7Y2hlY2s6YmssbnVsbGFibGU6dHJ1ZX0sdG9vbFRpcFRleHQ6e2NoZWNrOmJzLG51bGxhYmxlOnRydWUsZXZlbnQ6YkMsYXBwbHk6RX0sdG9vbFRpcEljb246e2NoZWNrOmJzLG51bGxhYmxlOnRydWUsZXZlbnQ6YkN9LGJsb2NrVG9vbFRpcDp7Y2hlY2s6YlUsaW5pdDpmYWxzZX0sdmlzaWJpbGl0eTp7Y2hlY2s6W2JSLGJ1LGJNXSxpbml0OmJSLGFwcGx5OmNuLGV2ZW50OmJwfSxlbmFibGVkOntpbml0OnRydWUsY2hlY2s6YlUsaW5oZXJpdGFibGU6dHJ1ZSxhcHBseTpjayxldmVudDpUfSxhbm9ueW1vdXM6e2luaXQ6ZmFsc2UsY2hlY2s6YlV9LHRhYkluZGV4OntjaGVjazpiTyxudWxsYWJsZTp0cnVlLGFwcGx5Onp9LGZvY3VzYWJsZTp7Y2hlY2s6YlUsaW5pdDpmYWxzZSxhcHBseTpnfSxrZWVwRm9jdXM6e2NoZWNrOmJVLGluaXQ6ZmFsc2UsYXBwbHk6Ym19LGtlZXBBY3RpdmU6e2NoZWNrOmJVLGluaXQ6ZmFsc2UsYXBwbHk6Y2h9LGRyYWdnYWJsZTp7Y2hlY2s6YlUsaW5pdDpmYWxzZSxhcHBseTpQfSxkcm9wcGFibGU6e2NoZWNrOmJVLGluaXQ6ZmFsc2UsYXBwbHk6T30sc2VsZWN0YWJsZTp7Y2hlY2s6YlUsaW5pdDpmYWxzZSxldmVudDp2LGFwcGx5OmNqfSxjb250ZXh0TWVudTp7Y2hlY2s6RixhcHBseTpiZyxudWxsYWJsZTp0cnVlLGV2ZW50Okt9LG5hdGl2ZUNvbnRleHRNZW51OntjaGVjazpiVSxpbml0OmZhbHNlLHRoZW1lYWJsZTp0cnVlLGV2ZW50OmJqLGFwcGx5OmR9LGFwcGVhcmFuY2U6e2NoZWNrOmJzLGluaXQ6QyxhcHBseTpyLGV2ZW50Okl9fSxzdGF0aWNzOntERUJVRzpmYWxzZSxnZXRXaWRnZXRCeUVsZW1lbnQ6ZnVuY3Rpb24oY3IsY3Mpe3doaWxlKGNyKXt2YXIgY3Q9Y3IuJCR3aWRnZXQ7aWYoY3QhPW51bGwpe3ZhciBjdT1xeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LmZyb21IYXNoQ29kZShjdCk7aWYoIWNzfHwhY3UuZ2V0QW5vbnltb3VzKCkpe3JldHVybiBjdTt9fXRyeXtjcj1jci5wYXJlbnROb2RlO31jYXRjaChlKXtyZXR1cm4gbnVsbDt9fXJldHVybiBudWxsO30sY29udGFpbnM6ZnVuY3Rpb24ocGFyZW50LGN2KXt3aGlsZShjdil7aWYocGFyZW50PT1jdil7cmV0dXJuIHRydWU7fWN2PWN2LmdldExheW91dFBhcmVudCgpO31yZXR1cm4gZmFsc2U7fSxfX2RTOm5ldyBxeC51aS5jb3JlLkRlY29yYXRvckZhY3RvcnkoKSxfX2RUOm5ldyBxeC51aS5jb3JlLkRlY29yYXRvckZhY3RvcnkoKX0sbWVtYmVyczp7X19kUTpudWxsLF9fZFI6bnVsbCxfX2RVOm51bGwsX19kVjpudWxsLF9fZFc6bnVsbCxfX2RYOm51bGwsX19kWTpudWxsLF9fZWE6bnVsbCxfZ2V0TGF5b3V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19lYTt9LF9zZXRMYXlvdXQ6ZnVuY3Rpb24oY3cpe3t9O2lmKHRoaXMuX19lYSl7dGhpcy5fX2VhLmNvbm5lY3RUb1dpZGdldChudWxsKTt9aWYoY3cpe2N3LmNvbm5lY3RUb1dpZGdldCh0aGlzKTt9dGhpcy5fX2VhPWN3O3F4LnVpLmNvcmUucXVldWUuTGF5b3V0LmFkZCh0aGlzKTt9LHNldExheW91dFBhcmVudDpmdW5jdGlvbihwYXJlbnQpe2lmKHRoaXMuJCRwYXJlbnQ9PT1wYXJlbnQpe3JldHVybjt9dmFyIGN4PXRoaXMuZ2V0Q29udGFpbmVyRWxlbWVudCgpO2lmKHRoaXMuJCRwYXJlbnQmJiF0aGlzLiQkcGFyZW50LiQkZGlzcG9zZWQpe3RoaXMuJCRwYXJlbnQuZ2V0Q29udGVudEVsZW1lbnQoKS5yZW1vdmUoY3gpO310aGlzLiQkcGFyZW50PXBhcmVudHx8bnVsbDtpZihwYXJlbnQmJiFwYXJlbnQuJCRkaXNwb3NlZCl7dGhpcy4kJHBhcmVudC5nZXRDb250ZW50RWxlbWVudCgpLmFkZChjeCk7fXRoaXMuJCRyZWZyZXNoSW5oZXJpdGFibGVzKCk7cXgudWkuY29yZS5xdWV1ZS5WaXNpYmlsaXR5LmFkZCh0aGlzKTt9LF91cGRhdGVJbnNldHM6bnVsbCxfX2ViOmZ1bmN0aW9uKGEsYil7aWYoYT09Yil7cmV0dXJuIGZhbHNlO31pZihhPT1udWxsfHxiPT1udWxsKXtyZXR1cm4gdHJ1ZTt9dmFyIGN5PXF4LnRoZW1lLm1hbmFnZXIuRGVjb3JhdGlvbi5nZXRJbnN0YW5jZSgpO3ZhciBjQT1jeS5yZXNvbHZlKGEpLmdldEluc2V0cygpO3ZhciBjej1jeS5yZXNvbHZlKGIpLmdldEluc2V0cygpO2lmKGNBLnRvcCE9Y3oudG9wfHxjQS5yaWdodCE9Y3oucmlnaHR8fGNBLmJvdHRvbSE9Y3ouYm90dG9tfHxjQS5sZWZ0IT1jei5sZWZ0KXtyZXR1cm4gdHJ1ZTt9cmV0dXJuIGZhbHNlO30scmVuZGVyTGF5b3V0OmZ1bmN0aW9uKGNCLHRvcCxjQyxjRCl7dmFyIGNNPXF4LnVpLmNvcmUuTGF5b3V0SXRlbS5wcm90b3R5cGUucmVuZGVyTGF5b3V0LmNhbGwodGhpcyxjQix0b3AsY0MsY0QpO2lmKCFjTSl7cmV0dXJuIG51bGw7fXZhciBjRj10aGlzLmdldENvbnRhaW5lckVsZW1lbnQoKTt2YXIgY29udGVudD10aGlzLmdldENvbnRlbnRFbGVtZW50KCk7dmFyIGNKPWNNLnNpemV8fHRoaXMuX3VwZGF0ZUluc2V0czt2YXIgY049YlY7dmFyIGNLPXt9O2lmKGNNLnBvc2l0aW9uKXtjSy5sZWZ0PWNCK2NOO2NLLnRvcD10b3ArY047fWlmKGNNLnNpemUpe2NLLndpZHRoPWNDK2NOO2NLLmhlaWdodD1jRCtjTjt9aWYoY00ucG9zaXRpb258fGNNLnNpemUpe2NGLnNldFN0eWxlcyhjSyk7fWlmKGNKfHxjTS5sb2NhbHx8Y00ubWFyZ2luKXt2YXIgY0U9dGhpcy5nZXRJbnNldHMoKTt2YXIgaW5uZXJXaWR0aD1jQy1jRS5sZWZ0LWNFLnJpZ2h0O3ZhciBpbm5lckhlaWdodD1jRC1jRS50b3AtY0UuYm90dG9tO2lubmVyV2lkdGg9aW5uZXJXaWR0aDwwPzA6aW5uZXJXaWR0aDtpbm5lckhlaWdodD1pbm5lckhlaWdodDwwPzA6aW5uZXJIZWlnaHQ7fXZhciBjSD17fTtpZih0aGlzLl91cGRhdGVJbnNldHMpe2NILmxlZnQ9Y0UubGVmdCtjTjtjSC50b3A9Y0UudG9wK2NOO31pZihjSil7Y0gud2lkdGg9aW5uZXJXaWR0aCtjTjtjSC5oZWlnaHQ9aW5uZXJIZWlnaHQrY047fWlmKGNKfHx0aGlzLl91cGRhdGVJbnNldHMpe2NvbnRlbnQuc2V0U3R5bGVzKGNIKTt9aWYoY00uc2l6ZSl7dmFyIGNMPXRoaXMuX19kVztpZihjTCl7Y0wuc2V0U3R5bGVzKHt3aWR0aDpjQytiVixoZWlnaHQ6Y0QrYlZ9KTt9fWlmKGNNLnNpemV8fHRoaXMuX3VwZGF0ZUluc2V0cyl7aWYodGhpcy5fX2RVKXt0aGlzLl9fZFUucmVzaXplKGNDLGNEKTt9fWlmKGNNLnNpemUpe2lmKHRoaXMuX19kVil7dmFyIGNFPXRoaXMuX19kVi5nZXRJbnNldHMoKTt2YXIgY0k9Y0MrY0UubGVmdCtjRS5yaWdodDt2YXIgY0c9Y0QrY0UudG9wK2NFLmJvdHRvbTt0aGlzLl9fZFYucmVzaXplKGNJLGNHKTt9fWlmKGNKfHxjTS5sb2NhbHx8Y00ubWFyZ2luKXtpZih0aGlzLl9fZWEmJnRoaXMuaGFzTGF5b3V0Q2hpbGRyZW4oKSl7dGhpcy5fX2VhLnJlbmRlckxheW91dChpbm5lcldpZHRoLGlubmVySGVpZ2h0KTt9ZWxzZSBpZih0aGlzLmhhc0xheW91dENoaWxkcmVuKCkpe3Rocm93IG5ldyBFcnJvcigiQXQgbGVhc3Qgb25lIGNoaWxkIGluIGNvbnRyb2wgIit0aGlzLl9maW5kVG9wQ29udHJvbCgpKyIgcmVxdWlyZXMgYSBsYXlvdXQsIGJ1dCBubyBvbmUgd2FzIGRlZmluZWQhIik7fX1pZihjTS5wb3NpdGlvbiYmdGhpcy5oYXNMaXN0ZW5lcihjZikpe3RoaXMuZmlyZURhdGFFdmVudChjZix0aGlzLmdldEJvdW5kcygpKTt9aWYoY00uc2l6ZSYmdGhpcy5oYXNMaXN0ZW5lcihiRykpe3RoaXMuZmlyZURhdGFFdmVudChiRyx0aGlzLmdldEJvdW5kcygpKTt9ZGVsZXRlIHRoaXMuX3VwZGF0ZUluc2V0cztyZXR1cm4gY007fSxfX2VjOm51bGwsY2xlYXJTZXBhcmF0b3JzOmZ1bmN0aW9uKCl7dmFyIGNQPXRoaXMuX19lYztpZighY1Ape3JldHVybjt9dmFyIGNRPXF4LnVpLmNvcmUuV2lkZ2V0Ll9fZFM7dmFyIGNvbnRlbnQ9dGhpcy5nZXRDb250ZW50RWxlbWVudCgpO3ZhciBjTztmb3IodmFyIGk9MCxsPWNQLmxlbmd0aDtpPGw7aSsrKXtjTz1jUFtpXTtjUS5wb29sRGVjb3JhdG9yKGNPKTtjb250ZW50LnJlbW92ZShjTyk7fWNQLmxlbmd0aD0wO30scmVuZGVyU2VwYXJhdG9yOmZ1bmN0aW9uKGNSLGNTKXt2YXIgY1Q9cXgudWkuY29yZS5XaWRnZXQuX19kUy5nZXREZWNvcmF0b3JFbGVtZW50KGNSKTt0aGlzLmdldENvbnRlbnRFbGVtZW50KCkuYWRkKGNUKTtjVC5yZXNpemUoY1Mud2lkdGgsY1MuaGVpZ2h0KTtjVC5zZXRTdHlsZXMoe2xlZnQ6Y1MubGVmdCtiVix0b3A6Y1MudG9wK2JWfSk7aWYoIXRoaXMuX19lYyl7dGhpcy5fX2VjPVtjVF07fWVsc2V7dGhpcy5fX2VjLnB1c2goY1QpO319LF9jb21wdXRlU2l6ZUhpbnQ6ZnVuY3Rpb24oKXt2YXIgZGI9dGhpcy5nZXRXaWR0aCgpO3ZhciBkYT10aGlzLmdldE1pbldpZHRoKCk7dmFyIGNWPXRoaXMuZ2V0TWF4V2lkdGgoKTt2YXIgY1k9dGhpcy5nZXRIZWlnaHQoKTt2YXIgY1c9dGhpcy5nZXRNaW5IZWlnaHQoKTt2YXIgY1g9dGhpcy5nZXRNYXhIZWlnaHQoKTt7fTt2YXIgZGM9dGhpcy5fZ2V0Q29udGVudEhpbnQoKTt2YXIgY1U9dGhpcy5nZXRJbnNldHMoKTt2YXIgZGU9Y1UubGVmdCtjVS5yaWdodDt2YXIgZGQ9Y1UudG9wK2NVLmJvdHRvbTtpZihkYj09bnVsbCl7ZGI9ZGMud2lkdGgrZGU7fWlmKGNZPT1udWxsKXtjWT1kYy5oZWlnaHQrZGQ7fWlmKGRhPT1udWxsKXtkYT1kZTtpZihkYy5taW5XaWR0aCE9bnVsbCl7ZGErPWRjLm1pbldpZHRoO319aWYoY1c9PW51bGwpe2NXPWRkO2lmKGRjLm1pbkhlaWdodCE9bnVsbCl7Y1crPWRjLm1pbkhlaWdodDt9fWlmKGNWPT1udWxsKXtpZihkYy5tYXhXaWR0aD09bnVsbCl7Y1Y9SW5maW5pdHk7fWVsc2V7Y1Y9ZGMubWF4V2lkdGgrZGU7fX1pZihjWD09bnVsbCl7aWYoZGMubWF4SGVpZ2h0PT1udWxsKXtjWD1JbmZpbml0eTt9ZWxzZXtjWD1kYy5tYXhIZWlnaHQrZGQ7fX1yZXR1cm4ge3dpZHRoOmRiLG1pbldpZHRoOmRhLG1heFdpZHRoOmNWLGhlaWdodDpjWSxtaW5IZWlnaHQ6Y1csbWF4SGVpZ2h0OmNYfTt9LGludmFsaWRhdGVMYXlvdXRDYWNoZTpmdW5jdGlvbigpe3F4LnVpLmNvcmUuTGF5b3V0SXRlbS5wcm90b3R5cGUuaW52YWxpZGF0ZUxheW91dENhY2hlLmNhbGwodGhpcyk7aWYodGhpcy5fX2VhKXt0aGlzLl9fZWEuaW52YWxpZGF0ZUxheW91dENhY2hlKCk7fX0sX2dldENvbnRlbnRIaW50OmZ1bmN0aW9uKCl7dmFyIGRnPXRoaXMuX19lYTtpZihkZyl7aWYodGhpcy5oYXNMYXlvdXRDaGlsZHJlbigpKXt2YXIgZGY7dmFyIGRoPWRnLmdldFNpemVIaW50KCk7e307cmV0dXJuIGRoO31lbHNle3JldHVybiB7d2lkdGg6MCxoZWlnaHQ6MH07fX1lbHNle3JldHVybiB7d2lkdGg6MTAwLGhlaWdodDo1MH07fX0sX2dldEhlaWdodEZvcldpZHRoOmZ1bmN0aW9uKGRpKXt2YXIgZG09dGhpcy5nZXRJbnNldHMoKTt2YXIgZHE9ZG0ubGVmdCtkbS5yaWdodDt2YXIgZHA9ZG0udG9wK2RtLmJvdHRvbTt2YXIgZG49ZGktZHE7dmFyIGRrPXRoaXMuX2dldExheW91dCgpO2lmKGRrJiZkay5oYXNIZWlnaHRGb3JXaWR0aCgpKXt2YXIgZGo9ZGsuZ2V0SGVpZ2h0Rm9yV2lkdGgoZGkpO31lbHNle2RqPXRoaXMuX2dldENvbnRlbnRIZWlnaHRGb3JXaWR0aChkbik7fXZhciBkbD1kaitkcDtyZXR1cm4gZGw7fSxfZ2V0Q29udGVudEhlaWdodEZvcldpZHRoOmZ1bmN0aW9uKGRyKXt0aHJvdyBuZXcgRXJyb3IoIkFic3RyYWN0IG1ldGhvZCBjYWxsOiBfZ2V0Q29udGVudEhlaWdodEZvcldpZHRoKCkhIik7fSxnZXRJbnNldHM6ZnVuY3Rpb24oKXt2YXIgdG9wPXRoaXMuZ2V0UGFkZGluZ1RvcCgpO3ZhciBkdD10aGlzLmdldFBhZGRpbmdSaWdodCgpO3ZhciBkdj10aGlzLmdldFBhZGRpbmdCb3R0b20oKTt2YXIgZHU9dGhpcy5nZXRQYWRkaW5nTGVmdCgpO2lmKHRoaXMuX19kVSl7dmFyIGRzPXRoaXMuX19kVS5nZXRJbnNldHMoKTt7fTt0b3ArPWRzLnRvcDtkdCs9ZHMucmlnaHQ7ZHYrPWRzLmJvdHRvbTtkdSs9ZHMubGVmdDt9cmV0dXJuIHsidG9wIjp0b3AsInJpZ2h0IjpkdCwiYm90dG9tIjpkdiwibGVmdCI6ZHV9O30sZ2V0SW5uZXJTaXplOmZ1bmN0aW9uKCl7dmFyIGR4PXRoaXMuZ2V0Qm91bmRzKCk7aWYoIWR4KXtyZXR1cm4gbnVsbDt9dmFyIGR3PXRoaXMuZ2V0SW5zZXRzKCk7cmV0dXJuIHt3aWR0aDpkeC53aWR0aC1kdy5sZWZ0LWR3LnJpZ2h0LGhlaWdodDpkeC5oZWlnaHQtZHcudG9wLWR3LmJvdHRvbX07fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5zZXRWaXNpYmlsaXR5KGJSKTt9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLnNldFZpc2liaWxpdHkoYnUpO30sZXhjbHVkZTpmdW5jdGlvbigpe3RoaXMuc2V0VmlzaWJpbGl0eShiTSk7fSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRWaXNpYmlsaXR5KCk9PT1iUjt9LGlzSGlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VmlzaWJpbGl0eSgpIT09YlI7fSxpc0V4Y2x1ZGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VmlzaWJpbGl0eSgpPT09Yk07fSxpc1NlZWFibGU6ZnVuY3Rpb24oKXt2YXIgZHo9dGhpcy5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0RG9tRWxlbWVudCgpO2lmKGR6KXtyZXR1cm4gZHoub2Zmc2V0V2lkdGg+MDt9dmFyIGR5PXRoaXM7ZG97aWYoIWR5LmlzVmlzaWJsZSgpKXtyZXR1cm4gZmFsc2U7fWlmKGR5LmlzUm9vdFdpZGdldCgpKXtyZXR1cm4gdHJ1ZTt9ZHk9ZHkuZ2V0TGF5b3V0UGFyZW50KCk7fXdoaWxlKGR5KTtyZXR1cm4gZmFsc2U7fSxfY3JlYXRlQ29udGFpbmVyRWxlbWVudDpmdW5jdGlvbigpe3ZhciBkQj17IiQkd2lkZ2V0Ijp0aGlzLnRvSGFzaENvZGUoKX07e307dmFyIGRBPXt6SW5kZXg6MCxwb3NpdGlvbjpjY307cmV0dXJuIG5ldyBxeC5odG1sLkVsZW1lbnQoYlcsZEEsZEIpO30sX19lZDpmdW5jdGlvbigpe3ZhciBkQz10aGlzLl9jcmVhdGVDb250ZW50RWxlbWVudCgpO3t9O2RDLnNldFN0eWxlcyh7InBvc2l0aW9uIjpjYywiekluZGV4IjoxMH0pO3JldHVybiBkQzt9LF9jcmVhdGVDb250ZW50RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiBuZXcgcXguaHRtbC5FbGVtZW50KGJXLHtvdmVyZmxvd1g6YnUsb3ZlcmZsb3dZOmJ1fSk7fSxnZXRDb250YWluZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kUTt9LGdldENvbnRlbnRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kUjt9LGdldERlY29yYXRvckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2RVfHxudWxsO30sZ2V0U2hhZG93RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZFZ8fG51bGw7fSxfX2VlOm51bGwsZ2V0TGF5b3V0Q2hpbGRyZW46ZnVuY3Rpb24oKXt2YXIgZEU9dGhpcy5fX2VlO2lmKCFkRSl7cmV0dXJuIHRoaXMuX19lZjt9dmFyIGRGO2Zvcih2YXIgaT0wLGw9ZEUubGVuZ3RoO2k8bDtpKyspe3ZhciBkRD1kRVtpXTtpZihkRC5oYXNVc2VyQm91bmRzKCl8fGRELmlzRXhjbHVkZWQoKSl7aWYoZEY9PW51bGwpe2RGPWRFLmNvbmNhdCgpO31xeC5sYW5nLkFycmF5LnJlbW92ZShkRixkRCk7fX1yZXR1cm4gZEZ8fGRFO30sc2NoZWR1bGVMYXlvdXRVcGRhdGU6ZnVuY3Rpb24oKXtxeC51aS5jb3JlLnF1ZXVlLkxheW91dC5hZGQodGhpcyk7fSxpbnZhbGlkYXRlTGF5b3V0Q2hpbGRyZW46ZnVuY3Rpb24oKXt2YXIgZEc9dGhpcy5fX2VhO2lmKGRHKXtkRy5pbnZhbGlkYXRlQ2hpbGRyZW5DYWNoZSgpO31xeC51aS5jb3JlLnF1ZXVlLkxheW91dC5hZGQodGhpcyk7fSxoYXNMYXlvdXRDaGlsZHJlbjpmdW5jdGlvbigpe3ZhciBkSD10aGlzLl9fZWU7aWYoIWRIKXtyZXR1cm4gZmFsc2U7fXZhciBkSTtmb3IodmFyIGk9MCxsPWRILmxlbmd0aDtpPGw7aSsrKXtkST1kSFtpXTtpZighZEkuaGFzVXNlckJvdW5kcygpJiYhZEkuaXNFeGNsdWRlZCgpKXtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9LGdldENoaWxkcmVuQ29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM7fSxfX2VmOltdLF9nZXRDaGlsZHJlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZWV8fHRoaXMuX19lZjt9LF9pbmRleE9mOmZ1bmN0aW9uKGRKKXt2YXIgZEs9dGhpcy5fX2VlO2lmKCFkSyl7cmV0dXJuIC0xO31yZXR1cm4gZEsuaW5kZXhPZihkSik7fSxfaGFzQ2hpbGRyZW46ZnVuY3Rpb24oKXt2YXIgZEw9dGhpcy5fX2VlO3JldHVybiBkTCE9bnVsbCYmKCEhZExbMF0pO30sYWRkQ2hpbGRyZW5Ub1F1ZXVlOmZ1bmN0aW9uKGRNKXt2YXIgZE49dGhpcy5fX2VlO2lmKCFkTil7cmV0dXJuO312YXIgZE87Zm9yKHZhciBpPTAsbD1kTi5sZW5ndGg7aTxsO2krKyl7ZE89ZE5baV07ZE1bZE8uJCRoYXNoXT1kTztkTy5hZGRDaGlsZHJlblRvUXVldWUoZE0pO319LF9hZGQ6ZnVuY3Rpb24oZFAsZFEpe2lmKGRQLmdldExheW91dFBhcmVudCgpPT10aGlzKXtxeC5sYW5nLkFycmF5LnJlbW92ZSh0aGlzLl9fZWUsZFApO31pZih0aGlzLl9fZWUpe3RoaXMuX19lZS5wdXNoKGRQKTt9ZWxzZXt0aGlzLl9fZWU9W2RQXTt9dGhpcy5fX2VnKGRQLGRRKTt9LF9hZGRBdDpmdW5jdGlvbihkUixkUyxkVCl7aWYoIXRoaXMuX19lZSl7dGhpcy5fX2VlPVtdO31pZihkUi5nZXRMYXlvdXRQYXJlbnQoKT09dGhpcyl7cXgubGFuZy5BcnJheS5yZW1vdmUodGhpcy5fX2VlLGRSKTt9dmFyIGRVPXRoaXMuX19lZVtkU107aWYoZFU9PT1kUil7ZFIuc2V0TGF5b3V0UHJvcGVydGllcyhkVCk7fWlmKGRVKXtxeC5sYW5nLkFycmF5Lmluc2VydEJlZm9yZSh0aGlzLl9fZWUsZFIsZFUpO31lbHNle3RoaXMuX19lZS5wdXNoKGRSKTt9dGhpcy5fX2VnKGRSLGRUKTt9LF9hZGRCZWZvcmU6ZnVuY3Rpb24oZFYsZFcsZFgpe3t9O2lmKGRWPT1kVyl7cmV0dXJuO31pZighdGhpcy5fX2VlKXt0aGlzLl9fZWU9W107fWlmKGRWLmdldExheW91dFBhcmVudCgpPT10aGlzKXtxeC5sYW5nLkFycmF5LnJlbW92ZSh0aGlzLl9fZWUsZFYpO31xeC5sYW5nLkFycmF5Lmluc2VydEJlZm9yZSh0aGlzLl9fZWUsZFYsZFcpO3RoaXMuX19lZyhkVixkWCk7fSxfYWRkQWZ0ZXI6ZnVuY3Rpb24oZFksZWEsZWIpe3t9O2lmKGRZPT1lYSl7cmV0dXJuO31pZighdGhpcy5fX2VlKXt0aGlzLl9fZWU9W107fWlmKGRZLmdldExheW91dFBhcmVudCgpPT10aGlzKXtxeC5sYW5nLkFycmF5LnJlbW92ZSh0aGlzLl9fZWUsZFkpO31xeC5sYW5nLkFycmF5Lmluc2VydEFmdGVyKHRoaXMuX19lZSxkWSxlYSk7dGhpcy5fX2VnKGRZLGViKTt9LF9yZW1vdmU6ZnVuY3Rpb24oZWMpe2lmKCF0aGlzLl9fZWUpe3Rocm93IG5ldyBFcnJvcigiVGhpcyB3aWRnZXQgaGFzIG5vIGNoaWxkcmVuISIpO31xeC5sYW5nLkFycmF5LnJlbW92ZSh0aGlzLl9fZWUsZWMpO3RoaXMuX19laChlYyk7fSxfcmVtb3ZlQXQ6ZnVuY3Rpb24oZWQpe2lmKCF0aGlzLl9fZWUpe3Rocm93IG5ldyBFcnJvcigiVGhpcyB3aWRnZXQgaGFzIG5vIGNoaWxkcmVuISIpO312YXIgZWU9dGhpcy5fX2VlW2VkXTtxeC5sYW5nLkFycmF5LnJlbW92ZUF0KHRoaXMuX19lZSxlZCk7dGhpcy5fX2VoKGVlKTtyZXR1cm4gZWU7fSxfcmVtb3ZlQWxsOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19lZSl7cmV0dXJuO312YXIgZWY9dGhpcy5fX2VlLmNvbmNhdCgpO3RoaXMuX19lZS5sZW5ndGg9MDtmb3IodmFyIGk9ZWYubGVuZ3RoLTE7aT49MDtpLS0pe3RoaXMuX19laChlZltpXSk7fXF4LnVpLmNvcmUucXVldWUuTGF5b3V0LmFkZCh0aGlzKTt9LF9hZnRlckFkZENoaWxkOm51bGwsX2FmdGVyUmVtb3ZlQ2hpbGQ6bnVsbCxfX2VnOmZ1bmN0aW9uKGVnLGVoKXt7fTt2YXIgcGFyZW50PWVnLmdldExheW91dFBhcmVudCgpO2lmKHBhcmVudCYmcGFyZW50IT10aGlzKXtwYXJlbnQuX3JlbW92ZShlZyk7fWVnLnNldExheW91dFBhcmVudCh0aGlzKTtpZihlaCl7ZWcuc2V0TGF5b3V0UHJvcGVydGllcyhlaCk7fWVsc2V7dGhpcy51cGRhdGVMYXlvdXRQcm9wZXJ0aWVzKCk7fWlmKHRoaXMuX2FmdGVyQWRkQ2hpbGQpe3RoaXMuX2FmdGVyQWRkQ2hpbGQoZWcpO319LF9fZWg6ZnVuY3Rpb24oZWkpe3t9O2lmKGVpLmdldExheW91dFBhcmVudCgpIT09dGhpcyl7dGhyb3cgbmV3IEVycm9yKCJSZW1vdmUgRXJyb3I6ICIrZWkrIiBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIHdpZGdldCEiKTt9ZWkuc2V0TGF5b3V0UGFyZW50KG51bGwpO2lmKHRoaXMuX19lYSl7dGhpcy5fX2VhLmludmFsaWRhdGVDaGlsZHJlbkNhY2hlKCk7fXF4LnVpLmNvcmUucXVldWUuTGF5b3V0LmFkZCh0aGlzKTtpZih0aGlzLl9hZnRlclJlbW92ZUNoaWxkKXt0aGlzLl9hZnRlclJlbW92ZUNoaWxkKGVpKTt9fSxjYXB0dXJlOmZ1bmN0aW9uKGVqKXt0aGlzLmdldENvbnRhaW5lckVsZW1lbnQoKS5jYXB0dXJlKGVqKTt9LHJlbGVhc2VDYXB0dXJlOmZ1bmN0aW9uKCl7dGhpcy5nZXRDb250YWluZXJFbGVtZW50KCkucmVsZWFzZUNhcHR1cmUoKTt9LF9hcHBseVBhZGRpbmc6ZnVuY3Rpb24oZWssZW0sbmFtZSl7dGhpcy5fdXBkYXRlSW5zZXRzPXRydWU7cXgudWkuY29yZS5xdWV1ZS5MYXlvdXQuYWRkKHRoaXMpO30sX2NyZWF0ZVByb3RlY3RvckVsZW1lbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9fZFcpe3JldHVybjt9dmFyIGVuPXRoaXMuX19kVz1uZXcgcXguaHRtbC5FbGVtZW50O3t9O2VuLnNldFN0eWxlcyh7cG9zaXRpb246Y2MsdG9wOjAsbGVmdDowLHpJbmRleDo3fSk7dmFyIGVvPXRoaXMuZ2V0Qm91bmRzKCk7aWYoZW8pe3RoaXMuX19kVy5zZXRTdHlsZXMoe3dpZHRoOmVvLndpZHRoK2JWLGhlaWdodDplby5oZWlnaHQrYlZ9KTt9aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGNiLGJvKSl7ZW4uc2V0U3R5bGVzKHtiYWNrZ3JvdW5kSW1hZ2U6dCtxeC51dGlsLlJlc291cmNlTWFuYWdlci5nZXRJbnN0YW5jZSgpLnRvVXJpKGJ5KStxLGJhY2tncm91bmRSZXBlYXQ6Y219KTt9dGhpcy5nZXRDb250YWluZXJFbGVtZW50KCkuYWRkKGVuKTt9LF9hcHBseURlY29yYXRvcjpmdW5jdGlvbihlcCxlcSl7e307dmFyIGV0PXF4LnVpLmNvcmUuV2lkZ2V0Ll9fZFM7dmFyIGVyPXRoaXMuZ2V0Q29udGFpbmVyRWxlbWVudCgpO2lmKCF0aGlzLl9fZFcmJiFxeC5ib20uY2xpZW50LkZlYXR1cmUuQ1NTX1BPSU5URVJfRVZFTlRTKXt0aGlzLl9jcmVhdGVQcm90ZWN0b3JFbGVtZW50KCk7fWlmKGVxKXtlci5yZW1vdmUodGhpcy5fX2RVKTtldC5wb29sRGVjb3JhdG9yKHRoaXMuX19kVSk7fWlmKGVwKXt2YXIgZXM9dGhpcy5fX2RVPWV0LmdldERlY29yYXRvckVsZW1lbnQoZXApO2VzLnNldFN0eWxlKGJJLDUpO2VyLmFkZChlcyk7fWVsc2V7ZGVsZXRlIHRoaXMuX19kVTt9dGhpcy5fYXBwbHlCYWNrZ3JvdW5kQ29sb3IodGhpcy5nZXRCYWNrZ3JvdW5kQ29sb3IoKSk7aWYodGhpcy5fX2ViKGVxLGVwKSl7dGhpcy5fdXBkYXRlSW5zZXRzPXRydWU7cXgudWkuY29yZS5xdWV1ZS5MYXlvdXQuYWRkKHRoaXMpO31lbHNlIGlmKGVwKXt2YXIgZXU9dGhpcy5nZXRCb3VuZHMoKTtpZihldSl7ZXMucmVzaXplKGV1LndpZHRoLGV1LmhlaWdodCk7dGhpcy5fX2RXJiZ0aGlzLl9fZFcuc2V0U3R5bGVzKHt3aWR0aDpldS53aWR0aCtiVixoZWlnaHQ6ZXUuaGVpZ2h0K2JWfSk7fX19LF9hcHBseVNoYWRvdzpmdW5jdGlvbihldixldyl7dmFyIGVEPXF4LnVpLmNvcmUuV2lkZ2V0Ll9fZFQ7dmFyIGV5PXRoaXMuZ2V0Q29udGFpbmVyRWxlbWVudCgpO2lmKGV3KXtleS5yZW1vdmUodGhpcy5fX2RWKTtlRC5wb29sRGVjb3JhdG9yKHRoaXMuX19kVik7fWlmKGV2KXt2YXIgZUE9dGhpcy5fX2RWPWVELmdldERlY29yYXRvckVsZW1lbnQoZXYpO2V5LmFkZChlQSk7dmFyIGVDPWVBLmdldEluc2V0cygpO2VBLnNldFN0eWxlcyh7bGVmdDooLWVDLmxlZnQpK2JWLHRvcDooLWVDLnRvcCkrYlZ9KTt2YXIgZUI9dGhpcy5nZXRCb3VuZHMoKTtpZihlQil7dmFyIGV6PWVCLndpZHRoK2VDLmxlZnQrZUMucmlnaHQ7dmFyIGV4PWVCLmhlaWdodCtlQy50b3ArZUMuYm90dG9tO2VBLnJlc2l6ZShleixleCk7fWVBLnRpbnQobnVsbCk7fWVsc2V7ZGVsZXRlIHRoaXMuX19kVjt9fSxfYXBwbHlUb29sVGlwVGV4dDpmdW5jdGlvbihlRSxlRil7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGJGLGJQKSl7aWYodGhpcy5fX2RZKXtyZXR1cm47fXZhciBlRz1xeC5sb2NhbGUuTWFuYWdlci5nZXRJbnN0YW5jZSgpO3RoaXMuX19kWT1lRy5hZGRMaXN0ZW5lcihiQSxmdW5jdGlvbigpe3ZhciBlSD10aGlzLmdldFRvb2xUaXBUZXh0KCk7aWYoZUgmJmVILnRyYW5zbGF0ZSl7dGhpcy5zZXRUb29sVGlwVGV4dChlSC50cmFuc2xhdGUoKSk7fX0sdGhpcyk7fX0sX2FwcGx5VGV4dENvbG9yOmZ1bmN0aW9uKGVJLGVKKXt9LF9hcHBseVpJbmRleDpmdW5jdGlvbihlSyxlTCl7dGhpcy5nZXRDb250YWluZXJFbGVtZW50KCkuc2V0U3R5bGUoYkksZUs9PW51bGw/MDplSyk7fSxfYXBwbHlWaXNpYmlsaXR5OmZ1bmN0aW9uKGVNLGVOKXt2YXIgZU89dGhpcy5nZXRDb250YWluZXJFbGVtZW50KCk7aWYoZU09PT1iUil7ZU8uc2hvdygpO31lbHNle2VPLmhpZGUoKTt9dmFyIHBhcmVudD10aGlzLiQkcGFyZW50O2lmKHBhcmVudCYmKGVOPT1udWxsfHxlTT09bnVsbHx8ZU49PT1iTXx8ZU09PT1iTSkpe3BhcmVudC5pbnZhbGlkYXRlTGF5b3V0Q2hpbGRyZW4oKTt9cXgudWkuY29yZS5xdWV1ZS5WaXNpYmlsaXR5LmFkZCh0aGlzKTt9LF9hcHBseU9wYWNpdHk6ZnVuY3Rpb24oZVAsZVEpe3RoaXMuZ2V0Q29udGFpbmVyRWxlbWVudCgpLnNldFN0eWxlKGJMLGVQPT0xP251bGw6ZVApO2lmKHF4LmNvcmUuVmFyaWFudC5pc1NldChjYixibykmJnF4LmJvbS5lbGVtZW50LkRlY29yYXRpb24uaXNBbHBoYUltYWdlTG9hZGVyRW5hYmxlZCgpKXtpZighcXguQ2xhc3MuaXNTdWJDbGFzc09mKHRoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5jb25zdHJ1Y3RvcixxeC5odG1sLkltYWdlKSl7dmFyIGVSPShlUD09MXx8ZVA9PW51bGwpP251bGw6MC45OTt0aGlzLmdldENvbnRlbnRFbGVtZW50KCkuc2V0U3R5bGUoYkwsZVIpO319fSxfYXBwbHlDdXJzb3I6ZnVuY3Rpb24oZVMsZVQpe2lmKGVTPT1udWxsJiYhdGhpcy5pc1NlbGVjdGFibGUoKSl7ZVM9Yks7fXRoaXMuZ2V0Q29udGFpbmVyRWxlbWVudCgpLnNldFN0eWxlKFksZVMscXguYm9tLmNsaWVudC5FbmdpbmUuT1BFUkEpO30sX2FwcGx5QmFja2dyb3VuZENvbG9yOmZ1bmN0aW9uKGVVLGVWKXt2YXIgZVc9dGhpcy5nZXRCYWNrZ3JvdW5kQ29sb3IoKTt2YXIgZVk9dGhpcy5nZXRDb250YWluZXJFbGVtZW50KCk7aWYodGhpcy5fX2RVKXt0aGlzLl9fZFUudGludChlVyk7ZVkuc2V0U3R5bGUoYlksbnVsbCk7fWVsc2V7dmFyIGVYPXF4LnRoZW1lLm1hbmFnZXIuQ29sb3IuZ2V0SW5zdGFuY2UoKS5yZXNvbHZlKGVXKTtlWS5zZXRTdHlsZShiWSxlWCk7fX0sX2FwcGx5Rm9udDpmdW5jdGlvbihmYSxmYil7fSxfX2VpOm51bGwsJCRzdGF0ZUNoYW5nZXM6bnVsbCxfZm9yd2FyZFN0YXRlczpudWxsLGhhc1N0YXRlOmZ1bmN0aW9uKGZjKXt2YXIgZmQ9dGhpcy5fX2VpO3JldHVybiAhIWZkJiYhIWZkW2ZjXTt9LGFkZFN0YXRlOmZ1bmN0aW9uKGZlKXt2YXIgZmY9dGhpcy5fX2VpO2lmKCFmZil7ZmY9dGhpcy5fX2VpPXt9O31pZihmZltmZV0pe3JldHVybjt9dGhpcy5fX2VpW2ZlXT10cnVlO2lmKGZlPT09Y2Qpe3RoaXMuc3luY0FwcGVhcmFuY2UoKTt9ZWxzZSBpZighcXgudWkuY29yZS5xdWV1ZS5WaXNpYmlsaXR5LmlzVmlzaWJsZSh0aGlzKSl7dGhpcy4kJHN0YXRlQ2hhbmdlcz10cnVlO31lbHNle3F4LnVpLmNvcmUucXVldWUuQXBwZWFyYW5jZS5hZGQodGhpcyk7fXZhciBmb3J3YXJkPXRoaXMuX2ZvcndhcmRTdGF0ZXM7dmFyIGZpPXRoaXMuX19lbDtpZihmb3J3YXJkJiZmb3J3YXJkW2ZlXSYmZmkpe3ZhciBmZztmb3IodmFyIGZoIGluIGZpKXtmZz1maVtmaF07aWYoZmcgaW5zdGFuY2VvZiBxeC51aS5jb3JlLldpZGdldCl7ZmlbZmhdLmFkZFN0YXRlKGZlKTt9fX19LHJlbW92ZVN0YXRlOmZ1bmN0aW9uKGZqKXt2YXIgZms9dGhpcy5fX2VpO2lmKCFma3x8IWZrW2ZqXSl7cmV0dXJuO31kZWxldGUgdGhpcy5fX2VpW2ZqXTtpZihmaj09PWNkKXt0aGlzLnN5bmNBcHBlYXJhbmNlKCk7fWVsc2UgaWYoIXF4LnVpLmNvcmUucXVldWUuVmlzaWJpbGl0eS5pc1Zpc2libGUodGhpcykpe3RoaXMuJCRzdGF0ZUNoYW5nZXM9dHJ1ZTt9ZWxzZXtxeC51aS5jb3JlLnF1ZXVlLkFwcGVhcmFuY2UuYWRkKHRoaXMpO312YXIgZm9yd2FyZD10aGlzLl9mb3J3YXJkU3RhdGVzO3ZhciBmbj10aGlzLl9fZWw7aWYoZm9yd2FyZCYmZm9yd2FyZFtmal0mJmZuKXtmb3IodmFyIGZtIGluIGZuKXt2YXIgZmw9Zm5bZm1dO2lmKGZsIGluc3RhbmNlb2YgcXgudWkuY29yZS5XaWRnZXQpe2ZsLnJlbW92ZVN0YXRlKGZqKTt9fX19LHJlcGxhY2VTdGF0ZTpmdW5jdGlvbihmbyxmcCl7dmFyIGZxPXRoaXMuX19laTtpZighZnEpe2ZxPXRoaXMuX19laT17fTt9aWYoIWZxW2ZwXSl7ZnFbZnBdPXRydWU7fWlmKGZxW2ZvXSl7ZGVsZXRlIGZxW2ZvXTt9aWYoIXF4LnVpLmNvcmUucXVldWUuVmlzaWJpbGl0eS5pc1Zpc2libGUodGhpcykpe3RoaXMuJCRzdGF0ZUNoYW5nZXM9dHJ1ZTt9ZWxzZXtxeC51aS5jb3JlLnF1ZXVlLkFwcGVhcmFuY2UuYWRkKHRoaXMpO312YXIgZm9yd2FyZD10aGlzLl9mb3J3YXJkU3RhdGVzO3ZhciBmdD10aGlzLl9fZWw7aWYoZm9yd2FyZCYmZm9yd2FyZFtmcF0mJmZ0KXtmb3IodmFyIGZzIGluIGZ0KXt2YXIgZnI9ZnRbZnNdO2lmKGZyIGluc3RhbmNlb2YgcXgudWkuY29yZS5XaWRnZXQpe2ZyLnJlcGxhY2VTdGF0ZShmbyxmcCk7fX19fSxfX2VqOm51bGwsX19lazpudWxsLHN5bmNBcHBlYXJhbmNlOmZ1bmN0aW9uKCl7dmFyIGZ5PXRoaXMuX19laTt2YXIgZng9dGhpcy5fX2VqO3ZhciBmej1xeC50aGVtZS5tYW5hZ2VyLkFwcGVhcmFuY2UuZ2V0SW5zdGFuY2UoKTt2YXIgZnY9cXguY29yZS5Qcm9wZXJ0eS4kJG1ldGhvZC5zZXRUaGVtZWQ7dmFyIGZEPXF4LmNvcmUuUHJvcGVydHkuJCRtZXRob2QucmVzZXRUaGVtZWQ7aWYodGhpcy5fX2VrKXtkZWxldGUgdGhpcy5fX2VrO2lmKGZ4KXt2YXIgZnU9Znouc3R5bGVGcm9tKGZ4LGZ5LG51bGwsdGhpcy5nZXRBcHBlYXJhbmNlKCkpO2lmKGZ1KXtmeD1udWxsO319fWlmKCFmeCl7dmFyIGZ3PXRoaXM7dmFyIGZDPVtdO2Rve2ZDLnB1c2goZncuJCRzdWJjb250cm9sfHxmdy5nZXRBcHBlYXJhbmNlKCkpO313aGlsZShmdz1mdy4kJHN1YnBhcmVudCk7Zng9ZkMucmV2ZXJzZSgpLmpvaW4oYmUpLnJlcGxhY2UoLyNbMC05XSsvZyxiZik7dGhpcy5fX2VqPWZ4O312YXIgZkE9Znouc3R5bGVGcm9tKGZ4LGZ5LG51bGwsdGhpcy5nZXRBcHBlYXJhbmNlKCkpO2lmKGZBKXt2YXIgZkI7aWYoZnUpe2Zvcih2YXIgZkIgaW4gZnUpe2lmKGZBW2ZCXT09PXVuZGVmaW5lZCl7dGhpc1tmRFtmQl1dKCk7fX19e307Zm9yKHZhciBmQiBpbiBmQSl7ZkFbZkJdPT09dW5kZWZpbmVkP3RoaXNbZkRbZkJdXSgpOnRoaXNbZnZbZkJdXShmQVtmQl0pO319ZWxzZSBpZihmdSl7Zm9yKHZhciBmQiBpbiBmdSl7dGhpc1tmRFtmQl1dKCk7fX10aGlzLmZpcmVEYXRhRXZlbnQoY3AsdGhpcy5fX2VpKTt9LF9hcHBseUFwcGVhcmFuY2U6ZnVuY3Rpb24oZkUsZkYpe3RoaXMudXBkYXRlQXBwZWFyYW5jZSgpO30sY2hlY2tBcHBlYXJhbmNlTmVlZHM6ZnVuY3Rpb24oKXtpZighdGhpcy5fX2RYKXtxeC51aS5jb3JlLnF1ZXVlLkFwcGVhcmFuY2UuYWRkKHRoaXMpO3RoaXMuX19kWD10cnVlO31lbHNlIGlmKHRoaXMuJCRzdGF0ZUNoYW5nZXMpe3F4LnVpLmNvcmUucXVldWUuQXBwZWFyYW5jZS5hZGQodGhpcyk7ZGVsZXRlIHRoaXMuJCRzdGF0ZUNoYW5nZXM7fX0sdXBkYXRlQXBwZWFyYW5jZTpmdW5jdGlvbigpe3RoaXMuX19laz10cnVlO3F4LnVpLmNvcmUucXVldWUuQXBwZWFyYW5jZS5hZGQodGhpcyk7dmFyIGZJPXRoaXMuX19lbDtpZihmSSl7dmFyIGZHO2Zvcih2YXIgZkggaW4gZkkpe2ZHPWZJW2ZIXTtpZihmRyBpbnN0YW5jZW9mIHF4LnVpLmNvcmUuV2lkZ2V0KXtmRy51cGRhdGVBcHBlYXJhbmNlKCk7fX19fSxzeW5jV2lkZ2V0OmZ1bmN0aW9uKCl7fSxnZXRFdmVudFRhcmdldDpmdW5jdGlvbigpe3ZhciBmSj10aGlzO3doaWxlKGZKLmdldEFub255bW91cygpKXtmSj1mSi5nZXRMYXlvdXRQYXJlbnQoKTtpZighZkope3JldHVybiBudWxsO319cmV0dXJuIGZKO30sZ2V0Rm9jdXNUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgZks9dGhpcztpZighZksuZ2V0RW5hYmxlZCgpKXtyZXR1cm4gbnVsbDt9d2hpbGUoZksuZ2V0QW5vbnltb3VzKCl8fCFmSy5nZXRGb2N1c2FibGUoKSl7Zks9ZksuZ2V0TGF5b3V0UGFyZW50KCk7aWYoIWZLfHwhZksuZ2V0RW5hYmxlZCgpKXtyZXR1cm4gbnVsbDt9fXJldHVybiBmSzt9LGdldEZvY3VzRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldENvbnRhaW5lckVsZW1lbnQoKTt9LGlzVGFiYWJsZTpmdW5jdGlvbigpe3JldHVybiAoISF0aGlzLmdldENvbnRhaW5lckVsZW1lbnQoKS5nZXREb21FbGVtZW50KCkpJiZ0aGlzLmlzRm9jdXNhYmxlKCk7fSxfYXBwbHlGb2N1c2FibGU6ZnVuY3Rpb24oZkwsZk0pe3ZhciBmTj10aGlzLmdldEZvY3VzRWxlbWVudCgpO2lmKGZMKXt2YXIgZk89dGhpcy5nZXRUYWJJbmRleCgpO2lmKGZPPT1udWxsKXtmTz0xO31mTi5zZXRBdHRyaWJ1dGUoYnIsZk8pO2lmKHF4LmNvcmUuVmFyaWFudC5pc1NldChjYixibykpe2ZOLnNldEF0dHJpYnV0ZSh5LEQpO31lbHNle2ZOLnNldFN0eWxlKHMseCk7fX1lbHNle2lmKGZOLmlzTmF0aXZlbHlGb2N1c2FibGUoKSl7Zk4uc2V0QXR0cmlidXRlKGJyLC0xKTt9ZWxzZSBpZihmTSl7Zk4uc2V0QXR0cmlidXRlKGJyLG51bGwpO319fSxfYXBwbHlLZWVwRm9jdXM6ZnVuY3Rpb24oZlApe3ZhciBmUT10aGlzLmdldEZvY3VzRWxlbWVudCgpO2ZRLnNldEF0dHJpYnV0ZShieixmUD9iUDpudWxsKTt9LF9hcHBseUtlZXBBY3RpdmU6ZnVuY3Rpb24oZlIpe3ZhciBmUz10aGlzLmdldENvbnRhaW5lckVsZW1lbnQoKTtmUy5zZXRBdHRyaWJ1dGUoYmwsZlI/YlA6bnVsbCk7fSxfYXBwbHlUYWJJbmRleDpmdW5jdGlvbihmVCl7aWYoZlQ9PW51bGwpe2ZUPTE7fWVsc2UgaWYoZlQ8MXx8ZlQ+MzIwMDApe3Rocm93IG5ldyBFcnJvcigiVGFiSW5kZXggcHJvcGVydHkgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDMyMDAwIik7fWlmKHRoaXMuZ2V0Rm9jdXNhYmxlKCkmJmZUIT1udWxsKXt0aGlzLmdldEZvY3VzRWxlbWVudCgpLnNldEF0dHJpYnV0ZShicixmVCk7fX0sX2FwcGx5U2VsZWN0YWJsZTpmdW5jdGlvbihmVSxmVil7aWYoZlYhPT1udWxsKXt0aGlzLl9hcHBseUN1cnNvcih0aGlzLmdldEN1cnNvcigpKTt9dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNldFNlbGVjdGFibGUoZlUpO30sX2FwcGx5RW5hYmxlZDpmdW5jdGlvbihmVyxmWCl7aWYoZlc9PT1mYWxzZSl7dGhpcy5hZGRTdGF0ZShiWCk7dGhpcy5yZW1vdmVTdGF0ZShjZCk7aWYodGhpcy5pc0ZvY3VzYWJsZSgpKXt0aGlzLnJlbW92ZVN0YXRlKGJxKTt0aGlzLl9hcHBseUZvY3VzYWJsZShmYWxzZSx0cnVlKTt9aWYodGhpcy5pc0RyYWdnYWJsZSgpKXt0aGlzLl9hcHBseURyYWdnYWJsZShmYWxzZSx0cnVlKTt9aWYodGhpcy5pc0Ryb3BwYWJsZSgpKXt0aGlzLl9hcHBseURyb3BwYWJsZShmYWxzZSx0cnVlKTt9fWVsc2V7dGhpcy5yZW1vdmVTdGF0ZShiWCk7aWYodGhpcy5pc0ZvY3VzYWJsZSgpKXt0aGlzLl9hcHBseUZvY3VzYWJsZSh0cnVlLGZhbHNlKTt9aWYodGhpcy5pc0RyYWdnYWJsZSgpKXt0aGlzLl9hcHBseURyYWdnYWJsZSh0cnVlLGZhbHNlKTt9aWYodGhpcy5pc0Ryb3BwYWJsZSgpKXt0aGlzLl9hcHBseURyb3BwYWJsZSh0cnVlLGZhbHNlKTt9fX0sX2FwcGx5TmF0aXZlQ29udGV4dE1lbnU6ZnVuY3Rpb24oZlksZ2EsbmFtZSl7fSxfYXBwbHlDb250ZXh0TWVudTpmdW5jdGlvbihnYixnYyl7aWYoZ2Mpe2djLnJlbW92ZVN0YXRlKGJ0KTtpZihnYy5nZXRPcGVuZXIoKT09dGhpcyl7Z2MucmVzZXRPcGVuZXIoKTt9aWYoIWdiKXt0aGlzLnJlbW92ZUxpc3RlbmVyKGJ0LHRoaXMuX29uQ29udGV4dE1lbnVPcGVuKTtnYy5yZW1vdmVMaXN0ZW5lcihicCx0aGlzLl9vbkJlZm9yZUNvbnRleHRNZW51T3Blbix0aGlzKTt9fWlmKGdiKXtnYi5zZXRPcGVuZXIodGhpcyk7Z2IuYWRkU3RhdGUoYnQpO2lmKCFnYyl7dGhpcy5hZGRMaXN0ZW5lcihidCx0aGlzLl9vbkNvbnRleHRNZW51T3Blbik7Z2IuYWRkTGlzdGVuZXIoYnAsdGhpcy5fb25CZWZvcmVDb250ZXh0TWVudU9wZW4sdGhpcyk7fX19LF9vbkNvbnRleHRNZW51T3BlbjpmdW5jdGlvbihlKXt0aGlzLmdldENvbnRleHRNZW51KCkub3BlbkF0TW91c2UoZSk7ZS5zdG9wKCk7fSxfb25CZWZvcmVDb250ZXh0TWVudU9wZW46ZnVuY3Rpb24oZSl7aWYoZS5nZXREYXRhKCk9PWJSJiZ0aGlzLmhhc0xpc3RlbmVyKGMpKXt0aGlzLmZpcmVEYXRhRXZlbnQoYyxlKTt9fSxfb25TdG9wRXZlbnQ6ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTt9LF9hcHBseURyYWdnYWJsZTpmdW5jdGlvbihnZCxnZSl7aWYoIXRoaXMuaXNFbmFibGVkKCkmJmdkPT09dHJ1ZSl7Z2Q9ZmFsc2U7fXF4LnVpLmNvcmUuRHJhZ0Ryb3BDdXJzb3IuZ2V0SW5zdGFuY2UoKTtpZihnZCl7dGhpcy5hZGRMaXN0ZW5lcihjZyx0aGlzLl9vbkRyYWdTdGFydCk7dGhpcy5hZGRMaXN0ZW5lcihjYSx0aGlzLl9vbkRyYWcpO3RoaXMuYWRkTGlzdGVuZXIoYkgsdGhpcy5fb25EcmFnRW5kKTt0aGlzLmFkZExpc3RlbmVyKGJFLHRoaXMuX29uRHJhZ0NoYW5nZSk7fWVsc2V7dGhpcy5yZW1vdmVMaXN0ZW5lcihjZyx0aGlzLl9vbkRyYWdTdGFydCk7dGhpcy5yZW1vdmVMaXN0ZW5lcihjYSx0aGlzLl9vbkRyYWcpO3RoaXMucmVtb3ZlTGlzdGVuZXIoYkgsdGhpcy5fb25EcmFnRW5kKTt0aGlzLnJlbW92ZUxpc3RlbmVyKGJFLHRoaXMuX29uRHJhZ0NoYW5nZSk7fXRoaXMuZ2V0Q29udGFpbmVyRWxlbWVudCgpLnNldEF0dHJpYnV0ZShjbCxnZD9iUDpudWxsKTt9LF9hcHBseURyb3BwYWJsZTpmdW5jdGlvbihnZixnZyl7aWYoIXRoaXMuaXNFbmFibGVkKCkmJmdmPT09dHJ1ZSl7Z2Y9ZmFsc2U7fXRoaXMuZ2V0Q29udGFpbmVyRWxlbWVudCgpLnNldEF0dHJpYnV0ZShiYSxnZj9iUDpudWxsKTt9LF9vbkRyYWdTdGFydDpmdW5jdGlvbihlKXtxeC51aS5jb3JlLkRyYWdEcm9wQ3Vyc29yLmdldEluc3RhbmNlKCkucGxhY2VUb01vdXNlKGUpO3RoaXMuZ2V0QXBwbGljYXRpb25Sb290KCkuc2V0R2xvYmFsQ3Vyc29yKGJLKTt9LF9vbkRyYWc6ZnVuY3Rpb24oZSl7cXgudWkuY29yZS5EcmFnRHJvcEN1cnNvci5nZXRJbnN0YW5jZSgpLnBsYWNlVG9Nb3VzZShlKTt9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24oZSl7cXgudWkuY29yZS5EcmFnRHJvcEN1cnNvci5nZXRJbnN0YW5jZSgpLm1vdmVUbygtMTAwMCwtMTAwMCk7dGhpcy5nZXRBcHBsaWNhdGlvblJvb3QoKS5yZXNldEdsb2JhbEN1cnNvcigpO30sX29uRHJhZ0NoYW5nZTpmdW5jdGlvbihlKXt2YXIgZ2g9cXgudWkuY29yZS5EcmFnRHJvcEN1cnNvci5nZXRJbnN0YW5jZSgpO3ZhciBnaT1lLmdldEN1cnJlbnRBY3Rpb24oKTtnaT9naC5zZXRBY3Rpb24oZ2kpOmdoLnJlc2V0QWN0aW9uKCk7fSx2aXN1YWxpemVGb2N1czpmdW5jdGlvbigpe3RoaXMuYWRkU3RhdGUoYnEpO30sdmlzdWFsaXplQmx1cjpmdW5jdGlvbigpe3RoaXMucmVtb3ZlU3RhdGUoYnEpO30sc2Nyb2xsQ2hpbGRJbnRvVmlldzpmdW5jdGlvbihnaixnayxnbCxnbSl7dGhpcy5zY3JvbGxDaGlsZEludG9WaWV3WChnaixnayxnbSk7dGhpcy5zY3JvbGxDaGlsZEludG9WaWV3WShnaixnbCxnbSk7fSxzY3JvbGxDaGlsZEludG9WaWV3WDpmdW5jdGlvbihnbixnbyxncCl7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNjcm9sbENoaWxkSW50b1ZpZXdYKGduLmdldENvbnRhaW5lckVsZW1lbnQoKSxnbyxncCk7fSxzY3JvbGxDaGlsZEludG9WaWV3WTpmdW5jdGlvbihncSxncixncyl7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNjcm9sbENoaWxkSW50b1ZpZXdZKGdxLmdldENvbnRhaW5lckVsZW1lbnQoKSxncixncyk7fSxmb2N1czpmdW5jdGlvbigpe2lmKHRoaXMuaXNGb2N1c2FibGUoKSl7dGhpcy5nZXRGb2N1c0VsZW1lbnQoKS5mb2N1cygpO31lbHNle3Rocm93IG5ldyBFcnJvcigiV2lkZ2V0IGlzIG5vdCBmb2N1c2FibGUhIik7fX0sYmx1cjpmdW5jdGlvbigpe2lmKHRoaXMuaXNGb2N1c2FibGUoKSl7dGhpcy5nZXRGb2N1c0VsZW1lbnQoKS5ibHVyKCk7fWVsc2V7dGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgaXMgbm90IGZvY3VzYWJsZSEiKTt9fSxhY3RpdmF0ZTpmdW5jdGlvbigpe3RoaXMuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFjdGl2YXRlKCk7fSxkZWFjdGl2YXRlOmZ1bmN0aW9uKCl7dGhpcy5nZXRDb250YWluZXJFbGVtZW50KCkuZGVhY3RpdmF0ZSgpO30sdGFiRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLmdldEZvY3VzRWxlbWVudCgpLmZvY3VzKCk7fSxoYXNDaGlsZENvbnRyb2w6ZnVuY3Rpb24oZ3Qpe2lmKCF0aGlzLl9fZWwpe3JldHVybiBmYWxzZTt9cmV0dXJuICEhdGhpcy5fX2VsW2d0XTt9LF9fZWw6bnVsbCxfZ2V0Q3JlYXRlZENoaWxkQ29udHJvbHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2VsO30sZ2V0Q2hpbGRDb250cm9sOmZ1bmN0aW9uKGd1LGd2KXtpZighdGhpcy5fX2VsKXtpZihndil7cmV0dXJuIG51bGw7fXRoaXMuX19lbD17fTt9dmFyIGd3PXRoaXMuX19lbFtndV07aWYoZ3cpe3JldHVybiBndzt9aWYoZ3Y9PT10cnVlKXtyZXR1cm4gbnVsbDt9cmV0dXJuIHRoaXMuX2NyZWF0ZUNoaWxkQ29udHJvbChndSk7fSxfc2hvd0NoaWxkQ29udHJvbDpmdW5jdGlvbihneCl7dmFyIGd5PXRoaXMuZ2V0Q2hpbGRDb250cm9sKGd4KTtneS5zaG93KCk7cmV0dXJuIGd5O30sX2V4Y2x1ZGVDaGlsZENvbnRyb2w6ZnVuY3Rpb24oZ3ope3ZhciBnQT10aGlzLmdldENoaWxkQ29udHJvbChneix0cnVlKTtpZihnQSl7Z0EuZXhjbHVkZSgpO319LF9pc0NoaWxkQ29udHJvbFZpc2libGU6ZnVuY3Rpb24oZ0Ipe3ZhciBnQz10aGlzLmdldENoaWxkQ29udHJvbChnQix0cnVlKTtpZihnQyl7cmV0dXJuIGdDLmlzVmlzaWJsZSgpO31yZXR1cm4gZmFsc2U7fSxfY3JlYXRlQ2hpbGRDb250cm9sOmZ1bmN0aW9uKGdEKXtpZighdGhpcy5fX2VsKXt0aGlzLl9fZWw9e307fWVsc2UgaWYodGhpcy5fX2VsW2dEXSl7dGhyb3cgbmV3IEVycm9yKCJDaGlsZCBjb250cm9sICciK2dEKyInIGFscmVhZHkgY3JlYXRlZCEiKTt9dmFyIGdIPWdELmluZGV4T2YoTSk7aWYoZ0g9PS0xKXt2YXIgZ0U9dGhpcy5fY3JlYXRlQ2hpbGRDb250cm9sSW1wbChnRCk7fWVsc2V7dmFyIGdFPXRoaXMuX2NyZWF0ZUNoaWxkQ29udHJvbEltcGwoZ0Quc3Vic3RyaW5nKDAsZ0gpLGdELnN1YnN0cmluZyhnSCsxLGdELmxlbmd0aCkpO31pZighZ0Upe3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY29udHJvbDogIitnRCk7fWdFLiQkc3ViY29udHJvbD1nRDtnRS4kJHN1YnBhcmVudD10aGlzO3ZhciBnRj10aGlzLl9fZWk7dmFyIGZvcndhcmQ9dGhpcy5fZm9yd2FyZFN0YXRlcztpZihnRiYmZm9yd2FyZCYmZ0UgaW5zdGFuY2VvZiBxeC51aS5jb3JlLldpZGdldCl7Zm9yKHZhciBnRyBpbiBnRil7aWYoZm9yd2FyZFtnR10pe2dFLmFkZFN0YXRlKGdHKTt9fX10aGlzLmZpcmVEYXRhRXZlbnQoayxnRSk7cmV0dXJuIHRoaXMuX19lbFtnRF09Z0U7fSxfY3JlYXRlQ2hpbGRDb250cm9sSW1wbDpmdW5jdGlvbihnSSxnSil7cmV0dXJuIG51bGw7fSxfZGlzcG9zZUNoaWxkQ29udHJvbHM6ZnVuY3Rpb24oKXt2YXIgZ049dGhpcy5fX2VsO2lmKCFnTil7cmV0dXJuO312YXIgZ0w9cXgudWkuY29yZS5XaWRnZXQ7Zm9yKHZhciBnTSBpbiBnTil7dmFyIGdLPWdOW2dNXTtpZighZ0wuY29udGFpbnModGhpcyxnSykpe2dLLmRlc3Ryb3koKTt9ZWxzZXtnSy5kaXNwb3NlKCk7fX1kZWxldGUgdGhpcy5fX2VsO30sX2ZpbmRUb3BDb250cm9sOmZ1bmN0aW9uKCl7dmFyIGdPPXRoaXM7d2hpbGUoZ08pe2lmKCFnTy4kJHN1YnBhcmVudCl7cmV0dXJuIGdPO31nTz1nTy4kJHN1YnBhcmVudDt9cmV0dXJuIG51bGw7fSxnZXRDb250YWluZXJMb2NhdGlvbjpmdW5jdGlvbihnUCl7dmFyIGdRPXRoaXMuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmdldERvbUVsZW1lbnQoKTtyZXR1cm4gZ1E/cXguYm9tLmVsZW1lbnQuTG9jYXRpb24uZ2V0KGdRLGdQKTpudWxsO30sZ2V0Q29udGVudExvY2F0aW9uOmZ1bmN0aW9uKGdSKXt2YXIgZ1M9dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLmdldERvbUVsZW1lbnQoKTtyZXR1cm4gZ1M/cXguYm9tLmVsZW1lbnQuTG9jYXRpb24uZ2V0KGdTLGdSKTpudWxsO30sc2V0RG9tTGVmdDpmdW5jdGlvbihnVCl7dmFyIGdVPXRoaXMuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmdldERvbUVsZW1lbnQoKTtpZihnVSl7Z1Uuc3R5bGUubGVmdD1nVCtiVjt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIkRPTSBlbGVtZW50IGlzIG5vdCB5ZXQgY3JlYXRlZCEiKTt9fSxzZXREb21Ub3A6ZnVuY3Rpb24oZ1Ype3ZhciBnVz10aGlzLmdldENvbnRhaW5lckVsZW1lbnQoKS5nZXREb21FbGVtZW50KCk7aWYoZ1cpe2dXLnN0eWxlLnRvcD1nVitiVjt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIkRPTSBlbGVtZW50IGlzIG5vdCB5ZXQgY3JlYXRlZCEiKTt9fSxzZXREb21Qb3NpdGlvbjpmdW5jdGlvbihnWCx0b3Ape3ZhciBnWT10aGlzLmdldENvbnRhaW5lckVsZW1lbnQoKS5nZXREb21FbGVtZW50KCk7aWYoZ1kpe2dZLnN0eWxlLmxlZnQ9Z1grYlY7Z1kuc3R5bGUudG9wPXRvcCtiVjt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIkRPTSBlbGVtZW50IGlzIG5vdCB5ZXQgY3JlYXRlZCEiKTt9fSxkZXN0cm95OmZ1bmN0aW9uKCl7aWYodGhpcy4kJGRpc3Bvc2VkKXtyZXR1cm47fXZhciBwYXJlbnQ9dGhpcy4kJHBhcmVudDtpZihwYXJlbnQpe3BhcmVudC5fcmVtb3ZlKHRoaXMpO31xeC51aS5jb3JlLnF1ZXVlLkRpc3Bvc2UuYWRkKHRoaXMpO30sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgaGE9cXgudWkuY29yZS5MYXlvdXRJdGVtLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO2lmKHRoaXMuZ2V0Q2hpbGRyZW4pe3ZhciBoYj10aGlzLmdldENoaWxkcmVuKCk7Zm9yKHZhciBpPTAsbD1oYi5sZW5ndGg7aTxsO2krKyl7aGEuYWRkKGhiW2ldLmNsb25lKCkpO319cmV0dXJuIGhhO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7aWYoIXF4LmNvcmUuT2JqZWN0UmVnaXN0cnkuaW5TaHV0RG93bil7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGJGLGJQKSl7aWYodGhpcy5fX2RZKXtxeC5sb2NhbGUuTWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlbW92ZUxpc3RlbmVyQnlJZCh0aGlzLl9fZFkpO319dGhpcy5nZXRDb250YWluZXJFbGVtZW50KCkuc2V0QXR0cmlidXRlKEosbnVsbCx0cnVlKTt0aGlzLl9kaXNwb3NlQ2hpbGRDb250cm9scygpO3F4LnVpLmNvcmUucXVldWUuQXBwZWFyYW5jZS5yZW1vdmUodGhpcyk7cXgudWkuY29yZS5xdWV1ZS5MYXlvdXQucmVtb3ZlKHRoaXMpO3F4LnVpLmNvcmUucXVldWUuVmlzaWJpbGl0eS5yZW1vdmUodGhpcyk7cXgudWkuY29yZS5xdWV1ZS5XaWRnZXQucmVtb3ZlKHRoaXMpO31pZighcXguY29yZS5PYmplY3RSZWdpc3RyeS5pblNodXREb3duKXt2YXIgaGQ9cXgudWkuY29yZS5XaWRnZXQ7dmFyIGhjPXRoaXMuZ2V0Q29udGFpbmVyRWxlbWVudCgpO2lmKHRoaXMuX19kVSl7aGMucmVtb3ZlKHRoaXMuX19kVSk7aGQuX19kUy5wb29sRGVjb3JhdG9yKHRoaXMuX19kVSk7fWlmKHRoaXMuX19kVil7aGMucmVtb3ZlKHRoaXMuX19kVik7aGQuX19kVC5wb29sRGVjb3JhdG9yKHRoaXMuX19kVik7fXRoaXMuY2xlYXJTZXBhcmF0b3JzKCk7dGhpcy5fX2RVPXRoaXMuX19kVj10aGlzLl9fZWM9bnVsbDt9ZWxzZXt0aGlzLl9kaXNwb3NlQXJyYXkoTCk7dGhpcy5fZGlzcG9zZU9iamVjdHMoVyxBKTt9dGhpcy5fZGlzcG9zZUFycmF5KFYpO3RoaXMuX19laT10aGlzLl9fZWw9bnVsbDt0aGlzLl9kaXNwb3NlT2JqZWN0cyhjbyxtLGNxLGJpKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZD0icXguZXZlbnQudHlwZS5EYXRhIixjPSJxeC51aS5jb250YWluZXIuQ29tcG9zaXRlIixiPSJhZGRDaGlsZFdpZGdldCIsYT0icmVtb3ZlQ2hpbGRXaWRnZXQiO3F4LkNsYXNzLmRlZmluZShjLHtleHRlbmQ6cXgudWkuY29yZS5XaWRnZXQsaW5jbHVkZTpbcXgudWkuY29yZS5NQ2hpbGRyZW5IYW5kbGluZyxxeC51aS5jb3JlLk1MYXlvdXRIYW5kbGluZ10sY29uc3RydWN0OmZ1bmN0aW9uKGUpe3F4LnVpLmNvcmUuV2lkZ2V0LmNhbGwodGhpcyk7aWYoZSE9bnVsbCl7dGhpcy5fc2V0TGF5b3V0KGUpO319LGV2ZW50czp7YWRkQ2hpbGRXaWRnZXQ6ZCxyZW1vdmVDaGlsZFdpZGdldDpkfSxtZW1iZXJzOntfYWZ0ZXJBZGRDaGlsZDpmdW5jdGlvbihmKXt0aGlzLmZpcmVOb25CdWJibGluZ0V2ZW50KGIscXguZXZlbnQudHlwZS5EYXRhLFtmXSk7fSxfYWZ0ZXJSZW1vdmVDaGlsZDpmdW5jdGlvbihnKXt0aGlzLmZpcmVOb25CdWJibGluZ0V2ZW50KGEscXguZXZlbnQudHlwZS5EYXRhLFtnXSk7fX0sZGVmZXI6ZnVuY3Rpb24oaCxpKXtxeC51aS5jb3JlLk1DaGlsZHJlbkhhbmRsaW5nLnJlbWFwKGkpO3F4LnVpLmNvcmUuTUxheW91dEhhbmRsaW5nLnJlbWFwKGkpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBsPSJidXR0b24iLGs9IiIsaj0iY2xvc2UiLGk9IlN0cmluZyIsaD0iX2FwcGx5SWNvbiIsZz0icGFnZSIsZj0icXguZXZlbnQudHlwZS5FdmVudCIsZT0iX2FwcGx5U2hvd0Nsb3NlQnV0dG9uIixkPSJ0YWJ2aWV3LXBhZ2UiLGM9InF4LnVpLnRhYnZpZXcuUGFnZSIsYT0iX2FwcGx5TGFiZWwiLGI9IkJvb2xlYW4iO3F4LkNsYXNzLmRlZmluZShjLHtleHRlbmQ6cXgudWkuY29udGFpbmVyLkNvbXBvc2l0ZSxjb25zdHJ1Y3Q6ZnVuY3Rpb24obSxuKXtxeC51aS5jb250YWluZXIuQ29tcG9zaXRlLmNhbGwodGhpcyk7dGhpcy5fY3JlYXRlQ2hpbGRDb250cm9sKGwpO2lmKG0hPW51bGwpe3RoaXMuc2V0TGFiZWwobSk7fWlmKG4hPW51bGwpe3RoaXMuc2V0SWNvbihuKTt9fSxldmVudHM6eyJjbG9zZSI6Zn0scHJvcGVydGllczp7YXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDpkfSxsYWJlbDp7Y2hlY2s6aSxpbml0OmssYXBwbHk6YX0saWNvbjp7Y2hlY2s6aSxpbml0OmssYXBwbHk6aH0sc2hvd0Nsb3NlQnV0dG9uOntjaGVjazpiLGluaXQ6ZmFsc2UsYXBwbHk6ZX19LG1lbWJlcnM6e19mb3J3YXJkU3RhdGVzOntiYXJUb3A6MSxiYXJSaWdodDoxLGJhckJvdHRvbToxLGJhckxlZnQ6MSxmaXJzdFRhYjoxLGxhc3RUYWI6MX0sX2FwcGx5SWNvbjpmdW5jdGlvbihvLHApe3RoaXMuZ2V0Q2hpbGRDb250cm9sKGwpLnNldEljb24obyk7fSxfYXBwbHlMYWJlbDpmdW5jdGlvbihxLHIpe3RoaXMuZ2V0Q2hpbGRDb250cm9sKGwpLnNldExhYmVsKHEpO30sX2FwcGx5RW5hYmxlZDpmdW5jdGlvbihzLHQpe3F4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUucHJvdG90eXBlLl9hcHBseUVuYWJsZWQuY2FsbCh0aGlzLHMsdCk7dmFyIHU9dGhpcy5nZXRDaGlsZENvbnRyb2wobCk7cz09bnVsbD91LnJlc2V0RW5hYmxlZCgpOnUuc2V0RW5hYmxlZChzKTt9LF9jcmVhdGVDaGlsZENvbnRyb2xJbXBsOmZ1bmN0aW9uKHYsdyl7dmFyIHg7c3dpdGNoKHYpe2Nhc2UgbDp4PW5ldyBxeC51aS50YWJ2aWV3LlRhYkJ1dHRvbjt4LnNldEFsbG93R3Jvd1godHJ1ZSk7eC5zZXRBbGxvd0dyb3dZKHRydWUpO3guc2V0VXNlckRhdGEoZyx0aGlzKTt4LmFkZExpc3RlbmVyKGosdGhpcy5fb25CdXR0b25DbG9zZSx0aGlzKTticmVhazt9cmV0dXJuIHh8fHF4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUucHJvdG90eXBlLl9jcmVhdGVDaGlsZENvbnRyb2xJbXBsLmNhbGwodGhpcyx2KTt9LF9hcHBseVNob3dDbG9zZUJ1dHRvbjpmdW5jdGlvbih5LHope3RoaXMuZ2V0Q2hpbGRDb250cm9sKGwpLnNldFNob3dDbG9zZUJ1dHRvbih5KTt9LF9vbkJ1dHRvbkNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoaik7fSxnZXRCdXR0b246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRyb2wobCk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBpPSJzaG93UHJpdmF0ZSIsaD0iZXhwYW5kUHJvcGVydGllcyIsZz0ic2hvd0luaGVyaXRlZCIsZj0ic2hvd1Byb3RlY3RlZCIsZD0iX2FwcGx5Q2xhc3NOb2RlIixjPSJhcGl2aWV3ZXIudWkudGFidmlldy5BYnN0cmFjdFBhZ2UiLGI9Im5vZGVOYW1lIixhPSJhYnN0cmFjdCI7cXguQ2xhc3MuZGVmaW5lKGMse2V4dGVuZDpxeC51aS50YWJ2aWV3LlBhZ2UsdHlwZTphLGNvbnN0cnVjdDpmdW5jdGlvbihqKXtxeC51aS50YWJ2aWV3LlBhZ2UuY2FsbCh0aGlzKTt0aGlzLnNldExheW91dChuZXcgcXgudWkubGF5b3V0LkNhbnZhcygpKTt0aGlzLnNldFNob3dDbG9zZUJ1dHRvbih0cnVlKTt0aGlzLl9iaW5kaW5ncz1bXTt0aGlzLl92aWV3ZXI9dGhpcy5fY3JlYXRlVmlld2VyKCk7dGhpcy5hZGQodGhpcy5fdmlld2VyLHtlZGdlOjB9KTt0aGlzLl9fU28odGhpcy5fdmlld2VyKTt0aGlzLnNldENsYXNzTm9kZShqKTt9LHByb3BlcnRpZXM6e2NsYXNzTm9kZTp7YXBwbHk6ZH19LG1lbWJlcnM6e192aWV3ZXI6bnVsbCxfYmluZGluZ3M6bnVsbCxfY3JlYXRlVmlld2VyOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBtZXRob2QgY2FsbCEiKTt9LF9hcHBseUNsYXNzTm9kZTpmdW5jdGlvbihrLGwpe3RoaXMuX3ZpZXdlci5zZXREb2NOb2RlKGspO3RoaXMuc2V0TGFiZWwoay5nZXRGdWxsTmFtZSgpKTt0aGlzLnNldEljb24oYXBpdmlld2VyLlRyZWVVdGlsLmdldEljb25VcmwoaykpO3RoaXMuc2V0VXNlckRhdGEoYixrLmdldEZ1bGxOYW1lKCkpO3F4LmV2ZW50LlRpbWVyLm9uY2UoZnVuY3Rpb24oZSl7dGhpcy5fdmlld2VyLmdldENvbnRlbnRFbGVtZW50KCkuc2Nyb2xsVG9ZKDApO30sdGhpcywwKTt9LF9fU286ZnVuY3Rpb24obSl7dmFyIG49YXBpdmlld2VyLlVpTW9kZWwuZ2V0SW5zdGFuY2UoKTt2YXIgbz10aGlzLl9iaW5kaW5ncztvLnB1c2gobi5iaW5kKGcsbSxnKSk7by5wdXNoKG4uYmluZChoLG0saCkpO28ucHVzaChuLmJpbmQoZixtLGYpKTtvLnB1c2gobi5iaW5kKGksbSxpKSk7fSxfX1NwOmZ1bmN0aW9uKCl7dmFyIHA9YXBpdmlld2VyLlVpTW9kZWwuZ2V0SW5zdGFuY2UoKTt2YXIgcT10aGlzLl9iaW5kaW5nczt3aGlsZShxLmxlbmd0aD4wKXt2YXIgcj1xLnBvcCgpO3AucmVtb3ZlQmluZGluZyhyKTt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9fU3AoKTt0aGlzLl92aWV3ZXIuZGVzdHJveSgpO3RoaXMuX3ZpZXdlcj1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJhcGl2aWV3ZXIudWkudGFidmlldy5QYWNrYWdlUGFnZSI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDphcGl2aWV3ZXIudWkudGFidmlldy5BYnN0cmFjdFBhZ2UsbWVtYmVyczp7X2NyZWF0ZVZpZXdlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgYXBpdmlld2VyLnVpLlBhY2thZ2VWaWV3ZXIoKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIG09InJlYWR5IixsPSJxeC5jbGllbnQiLGs9Im1zaHRtbCIsaj0ibG9hZCIsaT0idW5sb2FkIixoPSJxeC5ldmVudC5oYW5kbGVyLkFwcGxpY2F0aW9uIixnPSJjb21wbGV0ZSIsZj0icXguYXBwbGljYXRpb24iLGQ9ImdlY2tvfG9wZXJhfHdlYmtpdCIsYz0ibGVmdCIsYT0iRE9NQ29udGVudExvYWRlZCIsYj0ic2h1dGRvd24iO3F4LkNsYXNzLmRlZmluZShoLHtleHRlbmQ6cXguY29yZS5PYmplY3QsaW1wbGVtZW50OnF4LmV2ZW50LklFdmVudEhhbmRsZXIsY29uc3RydWN0OmZ1bmN0aW9uKG4pe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7dGhpcy5fd2luZG93PW4uZ2V0V2luZG93KCk7dGhpcy5fX2lqPWZhbHNlO3RoaXMuX19paz1mYWxzZTt0aGlzLl9pbml0T2JzZXJ2ZXIoKTtxeC5ldmVudC5oYW5kbGVyLkFwcGxpY2F0aW9uLiQkaW5zdGFuY2U9dGhpczt9LHN0YXRpY3M6e1BSSU9SSVRZOnF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5QUklPUklUWV9OT1JNQUwsU1VQUE9SVEVEX1RZUEVTOntyZWFkeToxLHNodXRkb3duOjF9LFRBUkdFVF9DSEVDSzpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLlRBUkdFVF9XSU5ET1csSUdOT1JFX0NBTl9IQU5ETEU6dHJ1ZSxvblNjcmlwdExvYWRlZDpmdW5jdGlvbigpe3ZhciBvPXF4LmV2ZW50LmhhbmRsZXIuQXBwbGljYXRpb24uJCRpbnN0YW5jZTtpZihvKXtvLl9faW4oKTt9fX0sbWVtYmVyczp7Y2FuSGFuZGxlRXZlbnQ6ZnVuY3Rpb24ocCxxKXt9LHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24ocixzLHQpe30sdW5yZWdpc3RlckV2ZW50OmZ1bmN0aW9uKHUsdix3KXt9LF9faWw6bnVsbCxfX2lqOm51bGwsX19pazpudWxsLF9faW06bnVsbCxfX2luOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19pbCYmdGhpcy5fX2lqJiZxeC4kJGxvYWRlci5zY3JpcHRMb2FkZWQpe3RyeXt2YXIgeD1xeC5jb3JlLlNldHRpbmcuZ2V0KGYpO2lmKCFxeC5DbGFzcy5nZXRCeU5hbWUoeCkpe3JldHVybjt9fWNhdGNoKGUpe31pZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQobCxrKSl7aWYocXguZXZlbnQuUmVnaXN0cmF0aW9uLmhhc0xpc3RlbmVyKHRoaXMuX3dpbmRvdyxtKSl7dGhpcy5fX2lsPXRydWU7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmZpcmVFdmVudCh0aGlzLl93aW5kb3csbSk7fX1lbHNle3RoaXMuX19pbD10cnVlO3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5maXJlRXZlbnQodGhpcy5fd2luZG93LG0pO319fSxpc0FwcGxpY2F0aW9uUmVhZHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2lsO30sX2luaXRPYnNlcnZlcjpmdW5jdGlvbigpe2lmKHF4LiQkZG9tUmVhZHl8fGRvY3VtZW50LnJlYWR5U3RhdGU9PWd8fGRvY3VtZW50LnJlYWR5U3RhdGU9PW0pe3RoaXMuX19paj10cnVlO3RoaXMuX19pbigpO31lbHNle3RoaXMuX29uTmF0aXZlTG9hZFdyYXBwZWQ9cXgubGFuZy5GdW5jdGlvbi5iaW5kKHRoaXMuX29uTmF0aXZlTG9hZCx0aGlzKTtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQobCxkKSl7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX3dpbmRvdyxhLHRoaXMuX29uTmF0aXZlTG9hZFdyYXBwZWQpO31lbHNlIGlmKHF4LmNvcmUuVmFyaWFudC5pc1NldChsLGspKXt2YXIgc2VsZj10aGlzO3ZhciB5PWZ1bmN0aW9uKCl7dHJ5e2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbChjKTtpZihkb2N1bWVudC5ib2R5KXtzZWxmLl9vbk5hdGl2ZUxvYWRXcmFwcGVkKCk7fX1jYXRjaCh6KXt3aW5kb3cuc2V0VGltZW91dCh5LDEwMCk7fX07eSgpO31xeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIodGhpcy5fd2luZG93LGosdGhpcy5fb25OYXRpdmVMb2FkV3JhcHBlZCk7fXRoaXMuX29uTmF0aXZlVW5sb2FkV3JhcHBlZD1xeC5sYW5nLkZ1bmN0aW9uLmJpbmQodGhpcy5fb25OYXRpdmVVbmxvYWQsdGhpcyk7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX3dpbmRvdyxpLHRoaXMuX29uTmF0aXZlVW5sb2FkV3JhcHBlZCk7fSxfc3RvcE9ic2VydmVyOmZ1bmN0aW9uKCl7aWYodGhpcy5fb25OYXRpdmVMb2FkV3JhcHBlZCl7cXguYm9tLkV2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKHRoaXMuX3dpbmRvdyxqLHRoaXMuX29uTmF0aXZlTG9hZFdyYXBwZWQpO31xeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIodGhpcy5fd2luZG93LGksdGhpcy5fb25OYXRpdmVVbmxvYWRXcmFwcGVkKTt0aGlzLl9vbk5hdGl2ZUxvYWRXcmFwcGVkPW51bGw7dGhpcy5fb25OYXRpdmVVbmxvYWRXcmFwcGVkPW51bGw7fSxfb25OYXRpdmVMb2FkOnF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QoZnVuY3Rpb24oKXt0aGlzLl9faWo9dHJ1ZTt0aGlzLl9faW4oKTt9KSxfb25OYXRpdmVVbmxvYWQ6cXguZXZlbnQuR2xvYmFsRXJyb3Iub2JzZXJ2ZU1ldGhvZChmdW5jdGlvbigpe2lmKCF0aGlzLl9faW0pe3RoaXMuX19pbT10cnVlO3RyeXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZmlyZUV2ZW50KHRoaXMuX3dpbmRvdyxiKTt9Y2F0Y2goZSl7dGhyb3cgZTt9ZmluYWxseXtxeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LnNodXRkb3duKCk7fX19KX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9zdG9wT2JzZXJ2ZXIoKTt0aGlzLl93aW5kb3c9bnVsbDt9LGRlZmVyOmZ1bmN0aW9uKEEpe3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5hZGRIYW5kbGVyKEEpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBmPSJyZWFkeSIsZD0icXguYXBwbGljYXRpb24iLGM9ImJlZm9yZXVubG9hZCIsYj0icXguY29yZS5Jbml0IixhPSJzaHV0ZG93biI7cXguQ2xhc3MuZGVmaW5lKGIse3N0YXRpY3M6e2dldEFwcGxpY2F0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19rdXx8bnVsbDt9LHJlYWR5OmZ1bmN0aW9uKCl7aWYodGhpcy5fX2t1KXtyZXR1cm47fWlmKHF4LmJvbS5jbGllbnQuRW5naW5lLlVOS05PV05fRU5HSU5FKXtxeC5sb2cuTG9nZ2VyLndhcm4oIkNvdWxkIG5vdCBkZXRlY3QgZW5naW5lISIpO31pZihxeC5ib20uY2xpZW50LkVuZ2luZS5VTktOT1dOX1ZFUlNJT04pe3F4LmxvZy5Mb2dnZXIud2FybigiQ291bGQgbm90IGRldGVjdCB0aGUgdmVyc2lvbiBvZiB0aGUgZW5naW5lISIpO31pZihxeC5ib20uY2xpZW50LlBsYXRmb3JtLlVOS05PV05fUExBVEZPUk0pe3F4LmxvZy5Mb2dnZXIud2FybigiQ291bGQgbm90IGRldGVjdCBwbGF0Zm9ybSEiKTt9aWYocXguYm9tLmNsaWVudC5TeXN0ZW0uVU5LTk9XTl9TWVNURU0pe3F4LmxvZy5Mb2dnZXIud2FybigiQ291bGQgbm90IGRldGVjdCBzeXN0ZW0hIik7fXF4LmxvZy5Mb2dnZXIuZGVidWcodGhpcywiTG9hZCBydW50aW1lOiAiKyhuZXcgRGF0ZS1xeC5Cb290c3RyYXAuTE9BRFNUQVJUKSsibXMiKTt2YXIgaD1xeC5jb3JlLlNldHRpbmcuZ2V0KGQpO3ZhciBpPXF4LkNsYXNzLmdldEJ5TmFtZShoKTtpZihpKXt0aGlzLl9fa3U9bmV3IGk7dmFyIGc9bmV3IERhdGU7dGhpcy5fX2t1Lm1haW4oKTtxeC5sb2cuTG9nZ2VyLmRlYnVnKHRoaXMsIk1haW4gcnVudGltZTogIisobmV3IERhdGUtZykrIm1zIik7dmFyIGc9bmV3IERhdGU7dGhpcy5fX2t1LmZpbmFsaXplKCk7cXgubG9nLkxvZ2dlci5kZWJ1Zyh0aGlzLCJGaW5hbGl6ZSBydW50aW1lOiAiKyhuZXcgRGF0ZS1nKSsibXMiKTt9ZWxzZXtxeC5sb2cuTG9nZ2VyLndhcm4oIk1pc3NpbmcgYXBwbGljYXRpb24gY2xhc3M6ICIraCk7fX0sX19rdjpmdW5jdGlvbihlKXt2YXIgaj10aGlzLl9fa3U7aWYoail7ZS5zZXRSZXR1cm5WYWx1ZShqLmNsb3NlKCkpO319LF9fa3c6ZnVuY3Rpb24oKXt2YXIgaz10aGlzLl9fa3U7aWYoayl7ay50ZXJtaW5hdGUoKTt9fX0sZGVmZXI6ZnVuY3Rpb24obCl7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmFkZExpc3RlbmVyKHdpbmRvdyxmLGwucmVhZHksbCk7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmFkZExpc3RlbmVyKHdpbmRvdyxhLGwuX19rdyxsKTtxeC5ldmVudC5SZWdpc3RyYXRpb24uYWRkTGlzdGVuZXIod2luZG93LGMsbC5fX2t2LGwpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBoPSJvYmplY3QiLGc9Il9fY3EiLGY9Il9hcHBseVRoZW1lIixlPSJxeC50aGVtZS5tYW5hZ2VyLkRlY29yYXRpb24iLGQ9IlRoZW1lIixjPSJjaGFuZ2VUaGVtZSIsYj0ic3RyaW5nIixhPSJzaW5nbGV0b24iO3F4LkNsYXNzLmRlZmluZShlLHt0eXBlOmEsZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LHByb3BlcnRpZXM6e3RoZW1lOntjaGVjazpkLG51bGxhYmxlOnRydWUsYXBwbHk6ZixldmVudDpjfX0sbWVtYmVyczp7X19jcTpudWxsLHJlc29sdmU6ZnVuY3Rpb24oaSl7aWYoIWkpe3JldHVybiBudWxsO31pZih0eXBlb2YgaT09PWgpe3JldHVybiBpO312YXIgbD10aGlzLmdldFRoZW1lKCk7aWYoIWwpe3JldHVybiBudWxsO312YXIgbD10aGlzLmdldFRoZW1lKCk7aWYoIWwpe3JldHVybiBudWxsO312YXIgbT10aGlzLl9fY3E7aWYoIW0pe209dGhpcy5fX2NxPXt9O312YXIgaj1tW2ldO2lmKGope3JldHVybiBqO312YXIgaz1sLmRlY29yYXRpb25zW2ldO2lmKCFrKXtyZXR1cm4gbnVsbDt9dmFyIG49ay5kZWNvcmF0b3I7aWYobj09bnVsbCl7dGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIGRlZmluaXRpb24gb2Ygd2hpY2ggZGVjb3JhdG9yIHRvIHVzZSBpbiBlbnRyeTogIitpKyIhIik7fXJldHVybiBtW2ldPShuZXcgbikuc2V0KGsuc3R5bGUpO30saXNWYWxpZFByb3BlcnR5VmFsdWU6ZnVuY3Rpb24obyl7aWYodHlwZW9mIG89PT1iKXtyZXR1cm4gdGhpcy5pc0R5bmFtaWMobyk7fWVsc2UgaWYodHlwZW9mIG89PT1oKXt2YXIgcD1vLmNvbnN0cnVjdG9yO3JldHVybiBxeC5DbGFzcy5oYXNJbnRlcmZhY2UocCxxeC51aS5kZWNvcmF0aW9uLklEZWNvcmF0b3IpO31yZXR1cm4gZmFsc2U7fSxpc0R5bmFtaWM6ZnVuY3Rpb24ocSl7aWYoIXEpe3JldHVybiBmYWxzZTt9dmFyIHI9dGhpcy5nZXRUaGVtZSgpO2lmKCFyKXtyZXR1cm4gZmFsc2U7fXJldHVybiAhIXIuZGVjb3JhdGlvbnNbcV07fSxfYXBwbHlUaGVtZTpmdW5jdGlvbihzLHQpe3ZhciB2PXF4LnV0aWwuQWxpYXNNYW5hZ2VyLmdldEluc3RhbmNlKCk7aWYodCl7Zm9yKHZhciB1IGluIHQuYWxpYXNlcyl7di5yZW1vdmUodSk7fX1pZihzKXtmb3IodmFyIHUgaW4gcy5hbGlhc2VzKXt2LmFkZCh1LHMuYWxpYXNlc1t1XSk7fX1pZighcyl7dGhpcy5fX2NxPXt9O319fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX2Rpc3Bvc2VNYXAoZyk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LnVpLmRlY29yYXRpb24uSURlY29yYXRvciI7cXguSW50ZXJmYWNlLmRlZmluZShhLHttZW1iZXJzOntnZXRNYXJrdXA6ZnVuY3Rpb24oKXt9LHJlc2l6ZTpmdW5jdGlvbihiLGMsZCl7fSx0aW50OmZ1bmN0aW9uKGUsZil7fSxnZXRJbnNldHM6ZnVuY3Rpb24oKXt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9InF4LnV0aWwuVmFsdWVNYW5hZ2VyIixhPSJhYnN0cmFjdCI7cXguQ2xhc3MuZGVmaW5lKGIse3R5cGU6YSxleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9keW5hbWljPXt9O30sbWVtYmVyczp7X2R5bmFtaWM6bnVsbCxyZXNvbHZlRHluYW1pYzpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fZHluYW1pY1tjXTt9LGlzRHluYW1pYzpmdW5jdGlvbihkKXtyZXR1cm4gISF0aGlzLl9keW5hbWljW2RdO30scmVzb2x2ZTpmdW5jdGlvbihlKXtpZihlJiZ0aGlzLl9keW5hbWljW2VdKXtyZXR1cm4gdGhpcy5fZHluYW1pY1tlXTt9cmV0dXJuIGU7fSxfc2V0RHluYW1pYzpmdW5jdGlvbihmKXt0aGlzLl9keW5hbWljPWY7fSxfZ2V0RHluYW1pYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9keW5hbWljO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fZHluYW1pYz1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBqPSIvIixpPSIwIixoPSJxeC9zdGF0aWMiLGc9Imh0dHA6Ly8iLGY9Imh0dHBzOi8vIixlPSJmaWxlOi8vIixkPSJxeC51dGlsLkFsaWFzTWFuYWdlciIsYz0ic2luZ2xldG9uIixiPSIuIixhPSJzdGF0aWMiO3F4LkNsYXNzLmRlZmluZShkLHt0eXBlOmMsZXh0ZW5kOnF4LnV0aWwuVmFsdWVNYW5hZ2VyLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnV0aWwuVmFsdWVNYW5hZ2VyLmNhbGwodGhpcyk7dGhpcy5fX2dGPXt9O3RoaXMuYWRkKGEsaCk7fSxtZW1iZXJzOntfX2dGOm51bGwsX3ByZXByb2Nlc3M6ZnVuY3Rpb24oayl7dmFyIG49dGhpcy5fZ2V0RHluYW1pYygpO2lmKG5ba109PT1mYWxzZSl7cmV0dXJuIGs7fWVsc2UgaWYobltrXT09PXVuZGVmaW5lZCl7aWYoay5jaGFyQXQoMCk9PT1qfHxrLmNoYXJBdCgwKT09PWJ8fGsuaW5kZXhPZihnKT09PTB8fGsuaW5kZXhPZihmKT09PWl8fGsuaW5kZXhPZihlKT09PTApe25ba109ZmFsc2U7cmV0dXJuIGs7fWlmKHRoaXMuX19nRltrXSl7cmV0dXJuIHRoaXMuX19nRltrXTt9dmFyIG09ay5zdWJzdHJpbmcoMCxrLmluZGV4T2YoaikpO3ZhciBsPXRoaXMuX19nRlttXTtpZihsIT09dW5kZWZpbmVkKXtuW2tdPWwray5zdWJzdHJpbmcobS5sZW5ndGgpO319cmV0dXJuIGs7fSxhZGQ6ZnVuY3Rpb24obyxwKXt0aGlzLl9fZ0Zbb109cDt2YXIgcj10aGlzLl9nZXREeW5hbWljKCk7Zm9yKHZhciBxIGluIHIpe2lmKHEuc3Vic3RyaW5nKDAscS5pbmRleE9mKGopKT09PW8pe3JbcV09cCtxLnN1YnN0cmluZyhvLmxlbmd0aCk7fX19LHJlbW92ZTpmdW5jdGlvbihzKXtkZWxldGUgdGhpcy5fX2dGW3NdO30scmVzb2x2ZTpmdW5jdGlvbih0KXt2YXIgdT10aGlzLl9nZXREeW5hbWljKCk7aWYodCE9bnVsbCl7dD10aGlzLl9wcmVwcm9jZXNzKHQpO31yZXR1cm4gdVt0XXx8dDt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19nRj1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBjPSJub25lIixiPSJxeC5odG1sLkRlY29yYXRvciIsYT0iYWJzb2x1dGUiO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6cXguaHRtbC5FbGVtZW50LGNvbnN0cnVjdDpmdW5jdGlvbihkLGUpe3ZhciBmPXtwb3NpdGlvbjphLHRvcDowLGxlZnQ6MH07aWYocXguYm9tLmNsaWVudC5GZWF0dXJlLkNTU19QT0lOVEVSX0VWRU5UUyl7Zi5wb2ludGVyRXZlbnRzPWM7fXF4Lmh0bWwuRWxlbWVudC5jYWxsKHRoaXMsbnVsbCxmKTt0aGlzLl9fa3M9ZDt0aGlzLl9fa3Q9ZXx8ZC50b0hhc2hDb2RlKCk7dGhpcy51c2VNYXJrdXAoZC5nZXRNYXJrdXAoKSk7fSxtZW1iZXJzOntfX2t0Om51bGwsX19rczpudWxsLGdldElkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19rdDt9LGdldERlY29yYXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fa3M7fSxyZXNpemU6ZnVuY3Rpb24oZyxoKXt0aGlzLl9fa3MucmVzaXplKHRoaXMuZ2V0RG9tRWxlbWVudCgpLGcsaCk7fSx0aW50OmZ1bmN0aW9uKGkpe3RoaXMuX19rcy50aW50KHRoaXMuZ2V0RG9tRWxlbWVudCgpLGkpO30sZ2V0SW5zZXRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19rcy5nZXRJbnNldHMoKTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19rcz1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBmPSJibHVyIixlPSJmb2N1cyIsZD0iaW5wdXQiLGM9ImxvYWQiLGI9InF4LnVpLmNvcmUuRXZlbnRIYW5kbGVyIixhPSJhY3RpdmF0ZSI7cXguQ2xhc3MuZGVmaW5lKGIse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6cXguZXZlbnQuSUV2ZW50SGFuZGxlcixjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3RoaXMuX19lbT1xeC5ldmVudC5SZWdpc3RyYXRpb24uZ2V0TWFuYWdlcih3aW5kb3cpO30sc3RhdGljczp7UFJJT1JJVFk6cXguZXZlbnQuUmVnaXN0cmF0aW9uLlBSSU9SSVRZX0ZJUlNULFNVUFBPUlRFRF9UWVBFUzp7bW91c2Vtb3ZlOjEsbW91c2VvdmVyOjEsbW91c2VvdXQ6MSxtb3VzZWRvd246MSxtb3VzZXVwOjEsY2xpY2s6MSxkYmxjbGljazoxLGNvbnRleHRtZW51OjEsbW91c2V3aGVlbDoxLGtleXVwOjEsa2V5ZG93bjoxLGtleXByZXNzOjEsa2V5aW5wdXQ6MSxjYXB0dXJlOjEsbG9zZWNhcHR1cmU6MSxmb2N1c2luOjEsZm9jdXNvdXQ6MSxmb2N1czoxLGJsdXI6MSxhY3RpdmF0ZToxLGRlYWN0aXZhdGU6MSxhcHBlYXI6MSxkaXNhcHBlYXI6MSxkcmFnc3RhcnQ6MSxkcmFnZW5kOjEsZHJhZ292ZXI6MSxkcmFnbGVhdmU6MSxkcm9wOjEsZHJhZzoxLGRyYWdjaGFuZ2U6MSxkcm9wcmVxdWVzdDoxLHRvdWNoc3RhcnQ6MSx0b3VjaGVuZDoxLHRvdWNobW92ZToxLHRvdWNoY2FuY2VsOjEsdGFwOjEsc3dpcGU6MX0sSUdOT1JFX0NBTl9IQU5ETEU6ZmFsc2V9LG1lbWJlcnM6e19fZW06bnVsbCxfX2VuOntmb2N1c2luOjEsZm9jdXNvdXQ6MSxmb2N1czoxLGJsdXI6MX0sX19lbzp7bW91c2VvdmVyOjEsbW91c2VvdXQ6MSxhcHBlYXI6MSxkaXNhcHBlYXI6MX0sY2FuSGFuZGxlRXZlbnQ6ZnVuY3Rpb24oZyxoKXtyZXR1cm4gZyBpbnN0YW5jZW9mIHF4LnVpLmNvcmUuV2lkZ2V0O30sX2Rpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oail7dmFyIHA9ai5nZXRUYXJnZXQoKTt2YXIgbz1xeC51aS5jb3JlLldpZGdldC5nZXRXaWRnZXRCeUVsZW1lbnQocCk7dmFyIHE9ZmFsc2U7d2hpbGUobyYmby5pc0Fub255bW91cygpKXt2YXIgcT10cnVlO289by5nZXRMYXlvdXRQYXJlbnQoKTt9aWYobyYmcSYmai5nZXRUeXBlKCk9PWEpe28uZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFjdGl2YXRlKCk7fWlmKHRoaXMuX19lbltqLmdldFR5cGUoKV0pe289byYmby5nZXRGb2N1c1RhcmdldCgpO2lmKCFvKXtyZXR1cm47fX1pZihqLmdldFJlbGF0ZWRUYXJnZXQpe3ZhciB4PWouZ2V0UmVsYXRlZFRhcmdldCgpO3ZhciB3PXF4LnVpLmNvcmUuV2lkZ2V0LmdldFdpZGdldEJ5RWxlbWVudCh4KTt3aGlsZSh3JiZ3LmlzQW5vbnltb3VzKCkpe3c9dy5nZXRMYXlvdXRQYXJlbnQoKTt9aWYodyl7aWYodGhpcy5fX2VuW2ouZ2V0VHlwZSgpXSl7dz13LmdldEZvY3VzVGFyZ2V0KCk7fWlmKHc9PT1vKXtyZXR1cm47fX19dmFyIHM9ai5nZXRDdXJyZW50VGFyZ2V0KCk7dmFyIHU9cXgudWkuY29yZS5XaWRnZXQuZ2V0V2lkZ2V0QnlFbGVtZW50KHMpO2lmKCF1fHx1LmlzQW5vbnltb3VzKCkpe3JldHVybjt9aWYodGhpcy5fX2VuW2ouZ2V0VHlwZSgpXSl7dT11LmdldEZvY3VzVGFyZ2V0KCk7fXZhciB2PWouZ2V0VHlwZSgpO2lmKCF1fHwhKHUuaXNFbmFibGVkKCl8fHRoaXMuX19lb1t2XSkpe3JldHVybjt9dmFyIGs9ai5nZXRFdmVudFBoYXNlKCk9PXF4LmV2ZW50LnR5cGUuRXZlbnQuQ0FQVFVSSU5HX1BIQVNFO3ZhciByPXRoaXMuX19lbS5nZXRMaXN0ZW5lcnModSx2LGspO2lmKCFyfHxyLmxlbmd0aD09PTApe3JldHVybjt9dmFyIG09cXguZXZlbnQuUG9vbC5nZXRJbnN0YW5jZSgpLmdldE9iamVjdChqLmNvbnN0cnVjdG9yKTtqLmNsb25lKG0pO20uc2V0VGFyZ2V0KG8pO20uc2V0UmVsYXRlZFRhcmdldCh3fHxudWxsKTttLnNldEN1cnJlbnRUYXJnZXQodSk7dmFyIHk9ai5nZXRPcmlnaW5hbFRhcmdldCgpO2lmKHkpe3ZhciBuPXF4LnVpLmNvcmUuV2lkZ2V0LmdldFdpZGdldEJ5RWxlbWVudCh5KTt3aGlsZShuJiZuLmlzQW5vbnltb3VzKCkpe249bi5nZXRMYXlvdXRQYXJlbnQoKTt9bS5zZXRPcmlnaW5hbFRhcmdldChuKTt9ZWxzZXttLnNldE9yaWdpbmFsVGFyZ2V0KHApO31mb3IodmFyIGk9MCxsPXIubGVuZ3RoO2k8bDtpKyspe3ZhciB0PXJbaV0uY29udGV4dHx8dTtyW2ldLmhhbmRsZXIuY2FsbCh0LG0pO31pZihtLmdldFByb3BhZ2F0aW9uU3RvcHBlZCgpKXtqLnN0b3BQcm9wYWdhdGlvbigpO31pZihtLmdldERlZmF1bHRQcmV2ZW50ZWQoKSl7ai5wcmV2ZW50RGVmYXVsdCgpO31xeC5ldmVudC5Qb29sLmdldEluc3RhbmNlKCkucG9vbE9iamVjdChtKTt9LHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oeixBLEIpe3ZhciBDO2lmKEE9PT1lfHxBPT09Zil7Qz16LmdldEZvY3VzRWxlbWVudCgpO31lbHNlIGlmKEE9PT1jfHxBPT09ZCl7Qz16LmdldENvbnRlbnRFbGVtZW50KCk7fWVsc2V7Qz16LmdldENvbnRhaW5lckVsZW1lbnQoKTt9aWYoQyl7Qy5hZGRMaXN0ZW5lcihBLHRoaXMuX2Rpc3BhdGNoRXZlbnQsdGhpcyxCKTt9fSx1bnJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oRCxFLEYpe3ZhciBHO2lmKEU9PT1lfHxFPT09Zil7Rz1ELmdldEZvY3VzRWxlbWVudCgpO31lbHNlIGlmKEU9PT1jfHxFPT09ZCl7Rz1ELmdldENvbnRlbnRFbGVtZW50KCk7fWVsc2V7Rz1ELmdldENvbnRhaW5lckVsZW1lbnQoKTt9aWYoRyl7Ry5yZW1vdmVMaXN0ZW5lcihFLHRoaXMuX2Rpc3BhdGNoRXZlbnQsdGhpcyxGKTt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9fZW09bnVsbDt9LGRlZmVyOmZ1bmN0aW9uKEgpe3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5hZGRIYW5kbGVyKEgpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBpPSIiLGg9Ii8iLGc9Im1zaHRtbCIsZj0icXguY2xpZW50IixlPSIvLyIsZD0iPyIsYz0ic3RyaW5nIixiPSJxeC51dGlsLlJlc291cmNlTWFuYWdlciIsYT0ic2luZ2xldG9uIjtxeC5DbGFzcy5kZWZpbmUoYix7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LHR5cGU6YSxzdGF0aWNzOntfX2NvOnF4LiQkcmVzb3VyY2VzfHx7fSxfX2NwOnt9fSxtZW1iZXJzOntoYXM6ZnVuY3Rpb24oail7cmV0dXJuICEhdGhpcy5zZWxmKGFyZ3VtZW50cykuX19jb1tqXTt9LGdldERhdGE6ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuc2VsZihhcmd1bWVudHMpLl9fY29ba118fG51bGw7fSxnZXRJbWFnZVdpZHRoOmZ1bmN0aW9uKGwpe3ZhciBtPXRoaXMuc2VsZihhcmd1bWVudHMpLl9fY29bbF07cmV0dXJuIG0/bVswXTpudWxsO30sZ2V0SW1hZ2VIZWlnaHQ6ZnVuY3Rpb24obil7dmFyIG89dGhpcy5zZWxmKGFyZ3VtZW50cykuX19jb1tuXTtyZXR1cm4gbz9vWzFdOm51bGw7fSxnZXRJbWFnZUZvcm1hdDpmdW5jdGlvbihwKXt2YXIgcT10aGlzLnNlbGYoYXJndW1lbnRzKS5fX2NvW3BdO3JldHVybiBxP3FbMl06bnVsbDt9LGlzQ2xpcHBlZEltYWdlOmZ1bmN0aW9uKHIpe3ZhciBzPXRoaXMuc2VsZihhcmd1bWVudHMpLl9fY29bcl07cmV0dXJuIHMmJnMubGVuZ3RoPjQ7fSx0b1VyaTpmdW5jdGlvbih0KXtpZih0PT1udWxsKXtyZXR1cm4gdDt9dmFyIHU9dGhpcy5zZWxmKGFyZ3VtZW50cykuX19jb1t0XTtpZighdSl7cmV0dXJuIHQ7fWlmKHR5cGVvZiB1PT09Yyl7dmFyIHc9dTt9ZWxzZXt2YXIgdz11WzNdO2lmKCF3KXtyZXR1cm4gdDt9fXZhciB2PWk7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGYsZykmJnF4LmJvbS5jbGllbnQuRmVhdHVyZS5TU0wpe3Y9dGhpcy5zZWxmKGFyZ3VtZW50cykuX19jcFt3XTt9cmV0dXJuIHYrcXguJCRsaWJyYXJpZXNbd10ucmVzb3VyY2VVcmkraCt0O319LGRlZmVyOmZ1bmN0aW9uKHgpe2lmKHF4LmNvcmUuVmFyaWFudC5pc1NldChmLGcpKXtpZihxeC5ib20uY2xpZW50LkZlYXR1cmUuU1NMKXtmb3IodmFyIEIgaW4gcXguJCRsaWJyYXJpZXMpe3ZhciB6O2lmKHF4LiQkbGlicmFyaWVzW0JdLnJlc291cmNlVXJpKXt6PXF4LiQkbGlicmFyaWVzW0JdLnJlc291cmNlVXJpO31lbHNle3guX19jcFtCXT1pO2NvbnRpbnVlO31pZih6Lm1hdGNoKC9eXC9cLy8pIT1udWxsKXt4Ll9fY3BbQl09d2luZG93LmxvY2F0aW9uLnByb3RvY29sO31lbHNlIGlmKHoubWF0Y2goL15cLy8pIT1udWxsKXt4Ll9fY3BbQl09d2luZG93LmxvY2F0aW9uLnByb3RvY29sK2Urd2luZG93LmxvY2F0aW9uLmhvc3Q7fWVsc2UgaWYoei5tYXRjaCgvXlwuXC8vKSE9bnVsbCl7dmFyIHk9ZG9jdW1lbnQuVVJMO3guX19jcFtCXT15LnN1YnN0cmluZygwLHkubGFzdEluZGV4T2YoaCkrMSk7fWVsc2UgaWYoei5tYXRjaCgvXmh0dHAvKSE9bnVsbCl7eC5fX2NwW0JdPWk7fWVsc2V7dmFyIEM9d2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihkKTt2YXIgQTtpZihDPT0tMSl7QT13aW5kb3cubG9jYXRpb24uaHJlZjt9ZWxzZXtBPXdpbmRvdy5sb2NhdGlvbi5ocmVmLnN1YnN0cmluZygwLEMpO314Ll9fY3BbQl09QS5zdWJzdHJpbmcoMCxBLmxhc3RJbmRleE9mKGgpKzEpO319fX19fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYz0icXguYm9tLmNsaWVudC5Mb2NhbGUiLGI9Ii0iLGE9IiI7cXguQ2xhc3MuZGVmaW5lKGMse3N0YXRpY3M6e0xPQ0FMRToiIixWQVJJQU5UOiIiLF9fbEQ6ZnVuY3Rpb24oKXt2YXIgZD0obmF2aWdhdG9yLnVzZXJMYW5ndWFnZXx8bmF2aWdhdG9yLmxhbmd1YWdlKS50b0xvd2VyQ2FzZSgpO3ZhciBmPWE7dmFyIGU9ZC5pbmRleE9mKGIpO2lmKGUhPS0xKXtmPWQuc3Vic3RyKGUrMSk7ZD1kLnN1YnN0cigwLGUpO310aGlzLkxPQ0FMRT1kO3RoaXMuVkFSSUFOVD1mO319LGRlZmVyOmZ1bmN0aW9uKGcpe2cuX19sRCgpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciB0PSIiLHM9J2luZGV4T2YnLHI9J3NsaWNlJyxxPSdjb25jYXQnLHA9J3RvTG9jYWxlTG93ZXJDYXNlJyxvPSJxeC50eXBlLkJhc2VTdHJpbmciLG49J21hdGNoJyxtPSd0b0xvY2FsZVVwcGVyQ2FzZScsaz0nc2VhcmNoJyxqPSdyZXBsYWNlJyxjPSd0b0xvd2VyQ2FzZScsaD0nY2hhckNvZGVBdCcsZj0nc3BsaXQnLGI9J3N1YnN0cmluZycsYT0nbGFzdEluZGV4T2YnLGU9J3N1YnN0cicsZD0ndG9VcHBlckNhc2UnLGc9J2NoYXJBdCc7cXguQ2xhc3MuZGVmaW5lKG8se2V4dGVuZDpPYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKHUpe3ZhciB1PXV8fHQ7dGhpcy5fX21jPXU7dGhpcy5sZW5ndGg9dS5sZW5ndGg7fSxtZW1iZXJzOnskJGlzU3RyaW5nOnRydWUsbGVuZ3RoOjAsX19tYzpudWxsLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19tYzt9LGNoYXJBdDpudWxsLHZhbHVlT2Y6bnVsbCxjaGFyQ29kZUF0Om51bGwsY29uY2F0Om51bGwsaW5kZXhPZjpudWxsLGxhc3RJbmRleE9mOm51bGwsbWF0Y2g6bnVsbCxyZXBsYWNlOm51bGwsc2VhcmNoOm51bGwsc2xpY2U6bnVsbCxzcGxpdDpudWxsLHN1YnN0cjpudWxsLHN1YnN0cmluZzpudWxsLHRvTG93ZXJDYXNlOm51bGwsdG9VcHBlckNhc2U6bnVsbCx0b0hhc2hDb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHF4LmNvcmUuT2JqZWN0UmVnaXN0cnkudG9IYXNoQ29kZSh0aGlzKTt9LHRvTG9jYWxlTG93ZXJDYXNlOm51bGwsdG9Mb2NhbGVVcHBlckNhc2U6bnVsbCxiYXNlOmZ1bmN0aW9uKHYsdyl7cmV0dXJuIHF4LmNvcmUuT2JqZWN0LnByb3RvdHlwZS5iYXNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9fSxkZWZlcjpmdW5jdGlvbih4LHkpe3t9O3ZhciB6PVtnLGgscSxzLGEsbixqLGsscixmLGUsYixjLGQscCxtXTt5LnZhbHVlT2Y9eS50b1N0cmluZztpZihuZXcgeCh0KS52YWx1ZU9mKCk9PW51bGwpe2RlbGV0ZSB5LnZhbHVlT2Y7fWZvcih2YXIgaT0wLGw9ei5sZW5ndGg7aTxsO2krKyl7eVt6W2ldXT1TdHJpbmcucHJvdG90eXBlW3pbaV1dO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgubG9jYWxlLkxvY2FsaXplZFN0cmluZyI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC50eXBlLkJhc2VTdHJpbmcsY29uc3RydWN0OmZ1bmN0aW9uKGIsYyxkKXtxeC50eXBlLkJhc2VTdHJpbmcuY2FsbCh0aGlzLGIpO3RoaXMuX19lcD1jO3RoaXMuX19lcT1kO30sbWVtYmVyczp7X19lcDpudWxsLF9fZXE6bnVsbCx0cmFuc2xhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gcXgubG9jYWxlLk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS50cmFuc2xhdGUodGhpcy5fX2VwLHRoaXMuX19lcSk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSJfIixqPSIiLGg9Il9hcHBseUxvY2FsZSIsZz0iY2hhbmdlTG9jYWxlIixmPSJDIixlPSJxeC5keW5sb2NhbGUiLGQ9Im9uIixjPSJxeC5sb2NhbGUuTWFuYWdlciIsYj0iU3RyaW5nIixhPSJzaW5nbGV0b24iO3F4LkNsYXNzLmRlZmluZShjLHt0eXBlOmEsZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7dGhpcy5fX2pmPXF4LiQkdHJhbnNsYXRpb25zfHx7fTt0aGlzLl9famc9cXguJCRsb2NhbGVzfHx7fTt2YXIgbj1xeC5ib20uY2xpZW50LkxvY2FsZTt2YXIgbD1uLkxPQ0FMRTt2YXIgbT1uLlZBUklBTlQ7aWYobSE9PWope2wrPWsrbTt9dGhpcy5fX2poPWw7dGhpcy5zZXRMb2NhbGUobHx8dGhpcy5fX2ppKTt9LHN0YXRpY3M6e3RyOmZ1bmN0aW9uKG8scCl7dmFyIHE9cXgubGFuZy5BcnJheS5mcm9tQXJndW1lbnRzKGFyZ3VtZW50cyk7cS5zcGxpY2UoMCwxKTtyZXR1cm4gcXgubG9jYWxlLk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS50cmFuc2xhdGUobyxxKTt9LHRybjpmdW5jdGlvbihyLHMsdCx1KXt2YXIgdj1xeC5sYW5nLkFycmF5LmZyb21Bcmd1bWVudHMoYXJndW1lbnRzKTt2LnNwbGljZSgwLDMpO2lmKHQhPTEpe3JldHVybiBxeC5sb2NhbGUuTWFuYWdlci5nZXRJbnN0YW5jZSgpLnRyYW5zbGF0ZShzLHYpO31lbHNle3JldHVybiBxeC5sb2NhbGUuTWFuYWdlci5nZXRJbnN0YW5jZSgpLnRyYW5zbGF0ZShyLHYpO319LHRyYzpmdW5jdGlvbih3LHgseSl7dmFyIHo9cXgubGFuZy5BcnJheS5mcm9tQXJndW1lbnRzKGFyZ3VtZW50cyk7ei5zcGxpY2UoMCwyKTtyZXR1cm4gcXgubG9jYWxlLk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS50cmFuc2xhdGUoeCx6KTt9LG1hcmt0cjpmdW5jdGlvbihBKXtyZXR1cm4gQTt9fSxwcm9wZXJ0aWVzOntsb2NhbGU6e2NoZWNrOmIsbnVsbGFibGU6dHJ1ZSxhcHBseTpoLGV2ZW50Omd9fSxtZW1iZXJzOntfX2ppOmYsX19qajpudWxsLF9fams6bnVsbCxfX2pmOm51bGwsX19qZzpudWxsLF9famg6bnVsbCxnZXRMYW5ndWFnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fams7fSxnZXRUZXJyaXRvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMb2NhbGUoKS5zcGxpdChrKVsxXXx8ajt9LGdldEF2YWlsYWJsZUxvY2FsZXM6ZnVuY3Rpb24oKXt2YXIgQz1bXTtmb3IodmFyIEIgaW4gdGhpcy5fX2pnKXtpZihCIT10aGlzLl9famkpe0MucHVzaChCKTt9fXJldHVybiBDO30sX19qbDpmdW5jdGlvbihEKXt2YXIgRjt2YXIgRT1ELmluZGV4T2Yoayk7aWYoRT09LTEpe0Y9RDt9ZWxzZXtGPUQuc3Vic3RyaW5nKDAsRSk7fXJldHVybiBGO30sX2FwcGx5TG9jYWxlOmZ1bmN0aW9uKEcsSCl7e307dGhpcy5fX2pqPUc7dGhpcy5fX2prPXRoaXMuX19qbChHKTt9LGFkZFRyYW5zbGF0aW9uOmZ1bmN0aW9uKEksSil7dmFyIEs9dGhpcy5fX2pmO2lmKEtbSV0pe2Zvcih2YXIgTCBpbiBKKXtLW0ldW0xdPUpbTF07fX1lbHNle0tbSV09Sjt9fSxhZGRMb2NhbGU6ZnVuY3Rpb24oTSxOKXt2YXIgTz10aGlzLl9famc7aWYoT1tNXSl7Zm9yKHZhciBQIGluIE4pe09bTV1bUF09TltQXTt9fWVsc2V7T1tNXT1OO319LHRyYW5zbGF0ZTpmdW5jdGlvbihRLFIsUyl7dmFyIFQ9dGhpcy5fX2pmO3JldHVybiB0aGlzLl9fam0oVCxRLFIsUyk7fSxsb2NhbGl6ZTpmdW5jdGlvbihVLFYsVyl7dmFyIFg9dGhpcy5fX2pnO3JldHVybiB0aGlzLl9fam0oWCxVLFYsVyk7fSxfX2ptOmZ1bmN0aW9uKFksYmEsYmIsYmMpe3ZhciBiZDtpZighWSl7cmV0dXJuIGJhO31pZihiYyl7dmFyIGJmPXRoaXMuX19qbChiYyk7fWVsc2V7YmM9dGhpcy5fX2pqO2JmPXRoaXMuX19qazt9aWYoIWJkJiZZW2JjXSl7YmQ9WVtiY11bYmFdO31pZighYmQmJllbYmZdKXtiZD1ZW2JmXVtiYV07fWlmKCFiZCYmWVt0aGlzLl9famldKXtiZD1ZW3RoaXMuX19qaV1bYmFdO31pZighYmQpe2JkPWJhO31pZihiYi5sZW5ndGg+MCl7dmFyIGJlPVtdO2Zvcih2YXIgaT0wO2k8YmIubGVuZ3RoO2krKyl7dmFyIGJnPWJiW2ldO2lmKGJnJiZiZy50cmFuc2xhdGUpe2JlW2ldPWJnLnRyYW5zbGF0ZSgpO31lbHNle2JlW2ldPWJnO319YmQ9cXgubGFuZy5TdHJpbmcuZm9ybWF0KGJkLGJlKTt9aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGUsZCkpe2JkPW5ldyBxeC5sb2NhbGUuTG9jYWxpemVkU3RyaW5nKGJkLGJhLGJiKTt9cmV0dXJuIGJkO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX2pmPXRoaXMuX19qZz1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSJweCIsaj0icXguY2xpZW50IixpPSJkaXYiLGg9ImltZyIsZz0iIixmPSJuby1yZXBlYXQiLGQ9InNjYWxlLXgiLGM9Im1zaHRtbCIsYj0ic2NhbGUiLGE9InNjYWxlLXkiLEc9InF4L2ljb24iLEY9InJlcGVhdCIsRT0iLnBuZyIsRD0iY3JvcCIsQz0icHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSciLEI9JzxkaXYgc3R5bGU9IicsQT0icmVwZWF0LXkiLHo9JzxpbWcgc3JjPSInLHk9InF4LmJvbS5lbGVtZW50LkRlY29yYXRpb24iLHg9IicsIHNpemluZ01ldGhvZD0nIixyPSJwbmciLHM9IicpIixwPSciPjwvZGl2PicscT0nIi8+JyxuPSciIHN0eWxlPSInLG89Im5vbmUiLGw9IndlYmtpdCIsbT0iICIsdD0icmVwZWF0LXgiLHU9IkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIiLHc9InF4L3N0YXRpYy9ibGFuay5naWYiLHY9ImFic29sdXRlIjtxeC5DbGFzcy5kZWZpbmUoeSx7c3RhdGljczp7REVCVUc6ZmFsc2UsX19oeDp7fSxfX2h5OnF4LmNvcmUuVmFyaWFudC5pc1NldChqLGMpJiZxeC5ib20uY2xpZW50LkVuZ2luZS5WRVJTSU9OPDksX19oejpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGoseyJtc2h0bWwiOnsic2NhbGUteCI6dHJ1ZSwic2NhbGUteSI6dHJ1ZSwic2NhbGUiOnRydWUsIm5vLXJlcGVhdCI6dHJ1ZX0sImRlZmF1bHQiOm51bGx9KSxfX2hBOnsic2NhbGUteCI6aCwic2NhbGUteSI6aCwic2NhbGUiOmgsInJlcGVhdCI6aSwibm8tcmVwZWF0IjppLCJyZXBlYXQteCI6aSwicmVwZWF0LXkiOml9LHVwZGF0ZTpmdW5jdGlvbihILEksSixLKXt2YXIgTT10aGlzLmdldFRhZ05hbWUoSixJKTtpZihNIT1ILnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7dGhyb3cgbmV3IEVycm9yKCJJbWFnZSBtb2RpZmljYXRpb24gbm90IHBvc3NpYmxlIGJlY2F1c2UgZWxlbWVudHMgY291bGQgbm90IGJlIHJlcGxhY2VkIGF0IHJ1bnRpbWUgYW55bW9yZSEiKTt9dmFyIE49dGhpcy5nZXRBdHRyaWJ1dGVzKEksSixLKTtpZihNPT09aCl7SC5zcmM9Ti5zcmN8fHF4LnV0aWwuUmVzb3VyY2VNYW5hZ2VyLmdldEluc3RhbmNlKCkudG9Vcmkodyk7fWlmKEguc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uIT1nJiZOLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbj09PXVuZGVmaW5lZCl7Ti5zdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb249bnVsbDt9aWYoSC5zdHlsZS5jbGlwIT1nJiZOLnN0eWxlLmNsaXA9PT11bmRlZmluZWQpe04uc3R5bGUuY2xpcD1udWxsO312YXIgTD1xeC5ib20uZWxlbWVudC5TdHlsZTtMLnNldFN0eWxlcyhILE4uc3R5bGUpO2lmKHRoaXMuX19oeSl7dHJ5e0guZmlsdGVyc1t1XS5hcHBseSgpO31jYXRjaChlKXt9fX0sY3JlYXRlOmZ1bmN0aW9uKE8sUCxRKXt2YXIgUj10aGlzLmdldFRhZ05hbWUoUCxPKTt2YXIgVD10aGlzLmdldEF0dHJpYnV0ZXMoTyxQLFEpO3ZhciBTPXF4LmJvbS5lbGVtZW50LlN0eWxlLmNvbXBpbGUoVC5zdHlsZSk7aWYoUj09PWgpe3JldHVybiB6K1Quc3JjK24rUytxO31lbHNle3JldHVybiBCK1MrcDt9fSxnZXRUYWdOYW1lOmZ1bmN0aW9uKFUsVil7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGosYykpe2lmKFYmJnRoaXMuX19oeSYmdGhpcy5fX2h6W1VdJiZxeC5sYW5nLlN0cmluZy5lbmRzV2l0aChWLEUpKXtyZXR1cm4gaTt9fXJldHVybiB0aGlzLl9faEFbVV07fSxnZXRBdHRyaWJ1dGVzOmZ1bmN0aW9uKFcsWCxZKXtpZighWSl7WT17fTt9aWYoIVkucG9zaXRpb24pe1kucG9zaXRpb249djt9aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGosYykpe1kuZm9udFNpemU9MDtZLmxpbmVIZWlnaHQ9MDt9ZWxzZSBpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoaixsKSl7WS5XZWJraXRVc2VyRHJhZz1vO312YXIgYmI9cXgudXRpbC5SZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZUZvcm1hdChXKXx8cXguaW8uSW1hZ2VMb2FkZXIuZ2V0Rm9ybWF0KFcpO3t9O3ZhciBiYTtpZih0aGlzLl9faHkmJnRoaXMuX19oeltYXSYmYmI9PT1yKXtiYT10aGlzLl9faEQoWSxYLFcpO31lbHNle2lmKFg9PT1iKXtiYT10aGlzLl9faEUoWSxYLFcpO31lbHNlIGlmKFg9PT1kfHxYPT09YSl7YmE9dGhpcy5fX2hGKFksWCxXKTt9ZWxzZXtiYT10aGlzLl9faEkoWSxYLFcpO319cmV0dXJuIGJhO30sX19oQjpmdW5jdGlvbihiYyxiZCxiZSl7aWYoYmMud2lkdGg9PW51bGwmJmJkIT1udWxsKXtiYy53aWR0aD1iZCtrO31pZihiYy5oZWlnaHQ9PW51bGwmJmJlIT1udWxsKXtiYy5oZWlnaHQ9YmUrazt9cmV0dXJuIGJjO30sX19oQzpmdW5jdGlvbihiZil7dmFyIGJoPXF4LnV0aWwuUmVzb3VyY2VNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2VXaWR0aChiZil8fHF4LmlvLkltYWdlTG9hZGVyLmdldFdpZHRoKGJmKTt2YXIgYmk9cXgudXRpbC5SZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZUhlaWdodChiZil8fHF4LmlvLkltYWdlTG9hZGVyLmdldEhlaWdodChiZik7cmV0dXJuIHt3aWR0aDpiaCxoZWlnaHQ6Yml9O30sX19oRDpmdW5jdGlvbihiaixiayxibCl7dmFyIGJvPXRoaXMuX19oQyhibCk7Ymo9dGhpcy5fX2hCKGJqLGJvLndpZHRoLGJvLmhlaWdodCk7dmFyIGJuPWJrPT1mP0Q6Yjt2YXIgYm09QytxeC51dGlsLlJlc291cmNlTWFuYWdlci5nZXRJbnN0YW5jZSgpLnRvVXJpKGJsKSt4K2JuK3M7YmouZmlsdGVyPWJtO2JqLmJhY2tncm91bmRJbWFnZT1iai5iYWNrZ3JvdW5kUmVwZWF0PWc7cmV0dXJuIHtzdHlsZTpian07fSxfX2hFOmZ1bmN0aW9uKGJwLGJxLGJyKXt2YXIgYnM9cXgudXRpbC5SZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS50b1VyaShicik7dmFyIGJ0PXRoaXMuX19oQyhicik7YnA9dGhpcy5fX2hCKGJwLGJ0LndpZHRoLGJ0LmhlaWdodCk7cmV0dXJuIHtzcmM6YnMsc3R5bGU6YnB9O30sX19oRjpmdW5jdGlvbihidSxidixidyl7dmFyIGJBPXF4LnV0aWwuUmVzb3VyY2VNYW5hZ2VyLmdldEluc3RhbmNlKCk7dmFyIGJ6PWJBLmlzQ2xpcHBlZEltYWdlKGJ3KTt2YXIgYkI9dGhpcy5fX2hDKGJ3KTtpZihieil7dmFyIGJ5PWJBLmdldERhdGEoYncpO3ZhciBieD1iQS50b1VyaShieVs0XSk7aWYoYnY9PT1kKXtidT10aGlzLl9faEcoYnUsYnksYkIuaGVpZ2h0KTt9ZWxzZXtidT10aGlzLl9faEgoYnUsYnksYkIud2lkdGgpO31yZXR1cm4ge3NyYzpieCxzdHlsZTpidX07fWVsc2V7e307aWYoYnY9PWQpe2J1LmhlaWdodD1iQi5oZWlnaHQ9PW51bGw/bnVsbDpiQi5oZWlnaHQrazt9ZWxzZSBpZihidj09YSl7YnUud2lkdGg9YkIud2lkdGg9PW51bGw/bnVsbDpiQi53aWR0aCtrO312YXIgYng9YkEudG9VcmkoYncpO3JldHVybiB7c3JjOmJ4LHN0eWxlOmJ1fTt9fSxfX2hHOmZ1bmN0aW9uKGJDLGJELGJFKXt2YXIgYkY9cXgudXRpbC5SZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZUhlaWdodChiRFs0XSk7YkMuY2xpcD17dG9wOi1iRFs2XSxoZWlnaHQ6YkV9O2JDLmhlaWdodD1iRitrO2lmKGJDLnRvcCE9bnVsbCl7YkMudG9wPShwYXJzZUludChiQy50b3AsMTApK2JEWzZdKStrO31lbHNlIGlmKGJDLmJvdHRvbSE9bnVsbCl7YkMuYm90dG9tPShwYXJzZUludChiQy5ib3R0b20sMTApK2JFLWJGLWJEWzZdKStrO31yZXR1cm4gYkM7fSxfX2hIOmZ1bmN0aW9uKGJHLGJILGJJKXt2YXIgYko9cXgudXRpbC5SZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZVdpZHRoKGJIWzRdKTtiRy5jbGlwPXtsZWZ0Oi1iSFs1XSx3aWR0aDpiSX07Ykcud2lkdGg9YkoraztpZihiRy5sZWZ0IT1udWxsKXtiRy5sZWZ0PShwYXJzZUludChiRy5sZWZ0LDEwKStiSFs1XSkrazt9ZWxzZSBpZihiRy5yaWdodCE9bnVsbCl7YkcucmlnaHQ9KHBhcnNlSW50KGJHLnJpZ2h0LDEwKStiSS1iSi1iSFs1XSkrazt9cmV0dXJuIGJHO30sX19oSTpmdW5jdGlvbihiSyxiTCxiTSl7dmFyIGJSPXF4LnV0aWwuUmVzb3VyY2VNYW5hZ2VyLmdldEluc3RhbmNlKCkuaXNDbGlwcGVkSW1hZ2UoYk0pO3ZhciBiUT10aGlzLl9faEMoYk0pO2lmKGJSJiZiTCE9PUYpe3ZhciBiUD1xeC51dGlsLlJlc291cmNlTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldERhdGEoYk0pO3ZhciBiTz1xeC5ib20uZWxlbWVudC5CYWNrZ3JvdW5kLmdldFN0eWxlcyhiUFs0XSxiTCxiUFs1XSxiUFs2XSk7Zm9yKHZhciBiTiBpbiBiTyl7YktbYk5dPWJPW2JOXTt9aWYoYlEud2lkdGghPW51bGwmJmJLLndpZHRoPT1udWxsJiYoYkw9PUF8fGJMPT09Zikpe2JLLndpZHRoPWJRLndpZHRoK2s7fWlmKGJRLmhlaWdodCE9bnVsbCYmYksuaGVpZ2h0PT1udWxsJiYoYkw9PXR8fGJMPT09Zikpe2JLLmhlaWdodD1iUS5oZWlnaHQrazt9cmV0dXJuIHtzdHlsZTpiS307fWVsc2V7e307Yks9dGhpcy5fX2hCKGJLLGJRLndpZHRoLGJRLmhlaWdodCk7Yks9dGhpcy5fX2hKKGJLLGJNLGJMKTtyZXR1cm4ge3N0eWxlOmJLfTt9fSxfX2hKOmZ1bmN0aW9uKGJTLGJULGJVKXt2YXIgdG9wPW51bGw7dmFyIGJZPW51bGw7aWYoYlMuYmFja2dyb3VuZFBvc2l0aW9uKXt2YXIgYlY9YlMuYmFja2dyb3VuZFBvc2l0aW9uLnNwbGl0KG0pO2JZPXBhcnNlSW50KGJWWzBdLDEwKTtpZihpc05hTihiWSkpe2JZPWJWWzBdO310b3A9cGFyc2VJbnQoYlZbMV0sMTApO2lmKGlzTmFOKHRvcCkpe3RvcD1iVlsxXTt9fXZhciBiWD1xeC5ib20uZWxlbWVudC5CYWNrZ3JvdW5kLmdldFN0eWxlcyhiVCxiVSxiWSx0b3ApO2Zvcih2YXIgYlcgaW4gYlgpe2JTW2JXXT1iWFtiV107fWlmKGJTLmZpbHRlcil7YlMuZmlsdGVyPWc7fXJldHVybiBiUzt9LF9faEs6ZnVuY3Rpb24oY2Epe2lmKHRoaXMuREVCVUcmJnF4LnV0aWwuUmVzb3VyY2VNYW5hZ2VyLmdldEluc3RhbmNlKCkuaGFzKGNhKSYmY2EuaW5kZXhPZihHKT09LTEpe2lmKCF0aGlzLl9faHhbY2FdKXtxeC5sb2cuTG9nZ2VyLmRlYnVnKCJQb3RlbnRpYWwgY2xpcHBlZCBpbWFnZSBjYW5kaWRhdGU6ICIrY2EpO3RoaXMuX19oeFtjYV09dHJ1ZTt9fX0saXNBbHBoYUltYWdlTG9hZGVyRW5hYmxlZDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGoseyJtc2h0bWwiOmZ1bmN0aW9uKCl7cmV0dXJuIHF4LmJvbS5lbGVtZW50LkRlY29yYXRpb24uX19oeTt9LCJkZWZhdWx0IjpmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9fSl9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYz0icXguY2xpZW50IixiPSJsb2FkIixhPSJxeC5pby5JbWFnZUxvYWRlciI7cXguQm9vdHN0cmFwLmRlZmluZShhLHtzdGF0aWNzOntfX2xvOnt9LF9fbHA6e3dpZHRoOm51bGwsaGVpZ2h0Om51bGx9LF9fbHE6L1wuKHBuZ3xnaWZ8anBnfGpwZWd8Ym1wKVxiL2ksaXNMb2FkZWQ6ZnVuY3Rpb24oZCl7dmFyIGU9dGhpcy5fX2xvW2RdO3JldHVybiAhIShlJiZlLmxvYWRlZCk7fSxpc0ZhaWxlZDpmdW5jdGlvbihmKXt2YXIgZz10aGlzLl9fbG9bZl07cmV0dXJuICEhKGcmJmcuZmFpbGVkKTt9LGlzTG9hZGluZzpmdW5jdGlvbihoKXt2YXIgaj10aGlzLl9fbG9baF07cmV0dXJuICEhKGomJmoubG9hZGluZyk7fSxnZXRGb3JtYXQ6ZnVuY3Rpb24oayl7dmFyIG09dGhpcy5fX2xvW2tdO3JldHVybiBtP20uZm9ybWF0Om51bGw7fSxnZXRTaXplOmZ1bmN0aW9uKG4pe3ZhciBvPXRoaXMuX19sb1tuXTtyZXR1cm4gbz97d2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHR9OnRoaXMuX19scDt9LGdldFdpZHRoOmZ1bmN0aW9uKHApe3ZhciBxPXRoaXMuX19sb1twXTtyZXR1cm4gcT9xLndpZHRoOm51bGw7fSxnZXRIZWlnaHQ6ZnVuY3Rpb24ocil7dmFyIHM9dGhpcy5fX2xvW3JdO3JldHVybiBzP3MuaGVpZ2h0Om51bGw7fSxsb2FkOmZ1bmN0aW9uKHQsdSx2KXt2YXIgdz10aGlzLl9fbG9bdF07aWYoIXcpe3c9dGhpcy5fX2xvW3RdPXt9O31pZih1JiYhdil7dj13aW5kb3c7fWlmKHcubG9hZGVkfHx3LmxvYWRpbmd8fHcuZmFpbGVkKXtpZih1KXtpZih3LmxvYWRpbmcpe3cuY2FsbGJhY2tzLnB1c2godSx2KTt9ZWxzZXt1LmNhbGwodix0LHcpO319fWVsc2V7dy5sb2FkaW5nPXRydWU7dy5jYWxsYmFja3M9W107aWYodSl7dy5jYWxsYmFja3MucHVzaCh1LHYpO312YXIgeT1uZXcgSW1hZ2UoKTt2YXIgeD1xeC5sYW5nLkZ1bmN0aW9uLmxpc3RlbmVyKHRoaXMuX19scix0aGlzLHksdCk7eS5vbmxvYWQ9eDt5Lm9uZXJyb3I9eDt5LnNyYz10O3cuZWxlbWVudD15O319LGFib3J0OmZ1bmN0aW9uKHope3ZhciBBPXRoaXMuX19sb1t6XTtpZihBJiYhQS5sb2FkZWQpe0EuYWJvcnRlZD10cnVlO3ZhciBDPUEuY2FsbGJhY2tzO3ZhciBCPUEuZWxlbWVudDtCLm9ubG9hZD1CLm9uZXJyb3I9bnVsbDtkZWxldGUgQS5jYWxsYmFja3M7ZGVsZXRlIEEuZWxlbWVudDtkZWxldGUgQS5sb2FkaW5nO2Zvcih2YXIgaT0wLGw9Qy5sZW5ndGg7aTxsO2krPTIpe0NbaV0uY2FsbChDW2krMV0seixBKTt9fXRoaXMuX19sb1t6XT1udWxsO30sX19scjpxeC5ldmVudC5HbG9iYWxFcnJvci5vYnNlcnZlTWV0aG9kKGZ1bmN0aW9uKGV2ZW50LEQsRSl7dmFyIEY9dGhpcy5fX2xvW0VdO2lmKGV2ZW50LnR5cGU9PT1iKXtGLmxvYWRlZD10cnVlO0Yud2lkdGg9dGhpcy5fX2xzKEQpO0YuaGVpZ2h0PXRoaXMuX19sdChEKTt2YXIgRz10aGlzLl9fbHEuZXhlYyhFKTtpZihHIT1udWxsKXtGLmZvcm1hdD1HWzFdO319ZWxzZXtGLmZhaWxlZD10cnVlO31ELm9ubG9hZD1ELm9uZXJyb3I9bnVsbDt2YXIgSD1GLmNhbGxiYWNrcztkZWxldGUgRi5sb2FkaW5nO2RlbGV0ZSBGLmNhbGxiYWNrcztkZWxldGUgRi5lbGVtZW50O2Zvcih2YXIgaT0wLGw9SC5sZW5ndGg7aTxsO2krPTIpe0hbaV0uY2FsbChIW2krMV0sRSxGKTt9fSksX19sczpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGMseyJnZWNrbyI6ZnVuY3Rpb24oSSl7cmV0dXJuIEkubmF0dXJhbFdpZHRoO30sImRlZmF1bHQiOmZ1bmN0aW9uKEope3JldHVybiBKLndpZHRoO319KSxfX2x0OnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoYyx7ImdlY2tvIjpmdW5jdGlvbihLKXtyZXR1cm4gSy5uYXR1cmFsSGVpZ2h0O30sImRlZmF1bHQiOmZ1bmN0aW9uKEwpe3JldHVybiBMLmhlaWdodDt9fSl9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbT0ibnVtYmVyIixsPSIwIixrPSJweCIsaj0iOyIsaT0iYmFja2dyb3VuZC1pbWFnZTp1cmwoIixoPSIpOyIsZz0iIixmPSIpIixlPSJiYWNrZ3JvdW5kLXJlcGVhdDoiLGQ9IiAiLGE9InF4LmJvbS5lbGVtZW50LkJhY2tncm91bmQiLGM9InVybCgiLGI9ImJhY2tncm91bmQtcG9zaXRpb246IjtxeC5DbGFzcy5kZWZpbmUoYSx7c3RhdGljczp7X19kYTpbaSxudWxsLGgsYixudWxsLGosZSxudWxsLGpdLF9fZGI6e2JhY2tncm91bmRJbWFnZTpudWxsLGJhY2tncm91bmRQb3NpdGlvbjpudWxsLGJhY2tncm91bmRSZXBlYXQ6bnVsbH0sX19kYzpmdW5jdGlvbihuLHRvcCl7dmFyIG89cXguYm9tLmNsaWVudC5FbmdpbmU7aWYoby5HRUNLTyYmby5WRVJTSU9OPDEuOSYmbj09dG9wJiZ0eXBlb2Ygbj09bSl7dG9wKz0wLjAxO31pZihuKXt2YXIgcD0odHlwZW9mIG49PW0pP24razpuO31lbHNle3A9bDt9aWYodG9wKXt2YXIgcT0odHlwZW9mIHRvcD09bSk/dG9wK2s6dG9wO31lbHNle3E9bDt9cmV0dXJuIHArZCtxO30sY29tcGlsZTpmdW5jdGlvbihyLHMsdCx0b3Ape3ZhciB1PXRoaXMuX19kYyh0LHRvcCk7dmFyIHY9cXgudXRpbC5SZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS50b1VyaShyKTt2YXIgdz10aGlzLl9fZGE7d1sxXT12O3dbNF09dTt3WzddPXM7cmV0dXJuIHcuam9pbihnKTt9LGdldFN0eWxlczpmdW5jdGlvbih4LHkseix0b3Ape2lmKCF4KXtyZXR1cm4gdGhpcy5fX2RiO312YXIgQT10aGlzLl9fZGMoeix0b3ApO3ZhciBCPXF4LnV0aWwuUmVzb3VyY2VNYW5hZ2VyLmdldEluc3RhbmNlKCkudG9VcmkoeCk7dmFyIEM9e2JhY2tncm91bmRQb3NpdGlvbjpBLGJhY2tncm91bmRJbWFnZTpjK0IrZn07aWYoeSE9bnVsbCl7Qy5iYWNrZ3JvdW5kUmVwZWF0PXk7fXJldHVybiBDO30sc2V0OmZ1bmN0aW9uKEQsRSxGLEcsdG9wKXt2YXIgSD10aGlzLmdldFN0eWxlcyhFLEYsRyx0b3ApO2Zvcih2YXIgSSBpbiBIKXtELnN0eWxlW0ldPUhbSV07fX19fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaj0ic291cmNlIixpPSJzY2FsZSIsaD0ibm8tcmVwZWF0IixnPSJxeC5jbGllbnQiLGY9Im1zaHRtbCIsZT0id2Via2l0IixkPSJiYWNrZ3JvdW5kSW1hZ2UiLGM9ImRpdiIsYj0icXguaHRtbC5JbWFnZSIsYT0icXgvc3RhdGljL2JsYW5rLmdpZiI7cXguQ2xhc3MuZGVmaW5lKGIse2V4dGVuZDpxeC5odG1sLkVsZW1lbnQsbWVtYmVyczp7dGFnTmFtZUhpbnQ6bnVsbCxfYXBwbHlQcm9wZXJ0eTpmdW5jdGlvbihuYW1lLGspe3F4Lmh0bWwuRWxlbWVudC5wcm90b3R5cGUuX2FwcGx5UHJvcGVydHkuY2FsbCh0aGlzLG5hbWUsayk7aWYobmFtZT09PWope3ZhciBvPXRoaXMuZ2V0RG9tRWxlbWVudCgpO3ZhciBsPXRoaXMuZ2V0QWxsU3R5bGVzKCk7aWYodGhpcy5nZXROb2RlTmFtZSgpPT1jJiZ0aGlzLmdldFN0eWxlKGQpKXtsLmJhY2tncm91bmRQb3NpdGlvbj1udWxsO2wuYmFja2dyb3VuZFJlcGVhdD1udWxsO312YXIgbT10aGlzLl9nZXRQcm9wZXJ0eShqKTt2YXIgbj10aGlzLl9nZXRQcm9wZXJ0eShpKTt2YXIgcD1uP2k6aDtpZihtIT1udWxsKXtxeC5ib20uZWxlbWVudC5EZWNvcmF0aW9uLnVwZGF0ZShvLG0scCxsKTt9fX0sX2NyZWF0ZURvbUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRQcm9wZXJ0eShpKTt2YXIgcz1yP2k6aDtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoZyxmKSl7dmFyIHE9dGhpcy5fZ2V0UHJvcGVydHkoaik7aWYodGhpcy50YWdOYW1lSGludCE9bnVsbCl7dGhpcy5zZXROb2RlTmFtZSh0aGlzLnRhZ05hbWVIaW50KTt9ZWxzZXt0aGlzLnNldE5vZGVOYW1lKHF4LmJvbS5lbGVtZW50LkRlY29yYXRpb24uZ2V0VGFnTmFtZShzLHEpKTt9fWVsc2V7dGhpcy5zZXROb2RlTmFtZShxeC5ib20uZWxlbWVudC5EZWNvcmF0aW9uLmdldFRhZ05hbWUocykpO31yZXR1cm4gcXguaHRtbC5FbGVtZW50LnByb3RvdHlwZS5fY3JlYXRlRG9tRWxlbWVudC5jYWxsKHRoaXMpO30sX2NvcHlEYXRhOmZ1bmN0aW9uKHQpe3JldHVybiBxeC5odG1sLkVsZW1lbnQucHJvdG90eXBlLl9jb3B5RGF0YS5jYWxsKHRoaXMsdHJ1ZSk7fSxzZXRTb3VyY2U6ZnVuY3Rpb24odSl7dGhpcy5fc2V0UHJvcGVydHkoaix1KTtyZXR1cm4gdGhpczt9LGdldFNvdXJjZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRQcm9wZXJ0eShqKTt9LHJlc2V0U291cmNlOmZ1bmN0aW9uKCl7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGcsZSkpe3RoaXMuX3NldFByb3BlcnR5KGoscXgudXRpbC5SZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS50b1VyaShhKSk7fWVsc2V7dGhpcy5fcmVtb3ZlUHJvcGVydHkoaix0cnVlKTt9cmV0dXJuIHRoaXM7fSxzZXRTY2FsZTpmdW5jdGlvbih2KXt0aGlzLl9zZXRQcm9wZXJ0eShpLHYpO3JldHVybiB0aGlzO30sZ2V0U2NhbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0UHJvcGVydHkoaSk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBmPSJfYXBwbHlUaGVtZSIsZT0icXgudGhlbWUubWFuYWdlci5Db2xvciIsZD0iVGhlbWUiLGM9ImNoYW5nZVRoZW1lIixiPSJzdHJpbmciLGE9InNpbmdsZXRvbiI7cXguQ2xhc3MuZGVmaW5lKGUse3R5cGU6YSxleHRlbmQ6cXgudXRpbC5WYWx1ZU1hbmFnZXIscHJvcGVydGllczp7dGhlbWU6e2NoZWNrOmQsbnVsbGFibGU6dHJ1ZSxhcHBseTpmLGV2ZW50OmN9fSxtZW1iZXJzOntfYXBwbHlUaGVtZTpmdW5jdGlvbihnKXt2YXIgaD17fTtpZihnKXt2YXIgaT1nLmNvbG9yczt2YXIgaj1xeC51dGlsLkNvbG9yVXRpbDt2YXIgaztmb3IodmFyIGwgaW4gaSl7az1pW2xdO2lmKHR5cGVvZiBrPT09Yil7aWYoIWouaXNDc3NTdHJpbmcoaykpe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHBhcnNlIGNvbG9yOiAiK2spO319ZWxzZSBpZihrIGluc3RhbmNlb2YgQXJyYXkpe2s9ai5yZ2JUb1JnYlN0cmluZyhrKTt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBwYXJzZSBjb2xvcjogIitrKTt9aFtsXT1rO319dGhpcy5fc2V0RHluYW1pYyhoKTt9LHJlc29sdmU6ZnVuY3Rpb24obSl7dmFyIHA9dGhpcy5fZHluYW1pYzt2YXIgbj1wW21dO2lmKG4pe3JldHVybiBuO312YXIgbz10aGlzLmdldFRoZW1lKCk7aWYobyE9PW51bGwmJm8uY29sb3JzW21dKXtyZXR1cm4gcFttXT1vLmNvbG9yc1ttXTt9cmV0dXJuIG07fSxpc0R5bmFtaWM6ZnVuY3Rpb24ocSl7dmFyIHM9dGhpcy5fZHluYW1pYztpZihxJiYoc1txXSE9PXVuZGVmaW5lZCkpe3JldHVybiB0cnVlO312YXIgcj10aGlzLmdldFRoZW1lKCk7aWYociE9PW51bGwmJnEmJihyLmNvbG9yc1txXSE9PXVuZGVmaW5lZCkpe3NbcV09ci5jb2xvcnNbcV07cmV0dXJuIHRydWU7fXJldHVybiBmYWxzZTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGg9IiwiLGU9InJnYigiLGQ9IikiLGM9InF4LnRoZW1lLm1hbmFnZXIuQ29sb3IiLGE9InF4LnV0aWwuQ29sb3JVdGlsIjtxeC5DbGFzcy5kZWZpbmUoYSx7c3RhdGljczp7UkVHRVhQOntoZXgzOi9eIyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDY6L14jKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8scmdiOi9ecmdiXChccyooWzAtOV17MSwzfVwuezAsMX1bMC05XSopXHMqLFxzKihbMC05XXsxLDN9XC57MCwxfVswLTldKilccyosXHMqKFswLTldezEsM31cLnswLDF9WzAtOV0qKVxzKlwpJC8scmdiYTovXnJnYmFcKFxzKihbMC05XXsxLDN9XC57MCwxfVswLTldKilccyosXHMqKFswLTldezEsM31cLnswLDF9WzAtOV0qKVxzKixccyooWzAtOV17MSwzfVwuezAsMX1bMC05XSopXHMqLFxzKihbMC05XXsxLDN9XC57MCwxfVswLTldKilccypcKSQvfSxTWVNURU06e2FjdGl2ZWJvcmRlcjp0cnVlLGFjdGl2ZWNhcHRpb246dHJ1ZSxhcHB3b3Jrc3BhY2U6dHJ1ZSxiYWNrZ3JvdW5kOnRydWUsYnV0dG9uZmFjZTp0cnVlLGJ1dHRvbmhpZ2hsaWdodDp0cnVlLGJ1dHRvbnNoYWRvdzp0cnVlLGJ1dHRvbnRleHQ6dHJ1ZSxjYXB0aW9udGV4dDp0cnVlLGdyYXl0ZXh0OnRydWUsaGlnaGxpZ2h0OnRydWUsaGlnaGxpZ2h0dGV4dDp0cnVlLGluYWN0aXZlYm9yZGVyOnRydWUsaW5hY3RpdmVjYXB0aW9uOnRydWUsaW5hY3RpdmVjYXB0aW9udGV4dDp0cnVlLGluZm9iYWNrZ3JvdW5kOnRydWUsaW5mb3RleHQ6dHJ1ZSxtZW51OnRydWUsbWVudXRleHQ6dHJ1ZSxzY3JvbGxiYXI6dHJ1ZSx0aHJlZWRkYXJrc2hhZG93OnRydWUsdGhyZWVkZmFjZTp0cnVlLHRocmVlZGhpZ2hsaWdodDp0cnVlLHRocmVlZGxpZ2h0c2hhZG93OnRydWUsdGhyZWVkc2hhZG93OnRydWUsd2luZG93OnRydWUsd2luZG93ZnJhbWU6dHJ1ZSx3aW5kb3d0ZXh0OnRydWV9LE5BTUVEOntibGFjazpbMCwwLDBdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLGdyYXk6WzEyOCwxMjgsMTI4XSx3aGl0ZTpbMjU1LDI1NSwyNTVdLG1hcm9vbjpbMTI4LDAsMF0scmVkOlsyNTUsMCwwXSxwdXJwbGU6WzEyOCwwLDEyOF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxncmVlbjpbMCwxMjgsMF0sbGltZTpbMCwyNTUsMF0sb2xpdmU6WzEyOCwxMjgsMF0seWVsbG93OlsyNTUsMjU1LDBdLG5hdnk6WzAsMCwxMjhdLGJsdWU6WzAsMCwyNTVdLHRlYWw6WzAsMTI4LDEyOF0sYXF1YTpbMCwyNTUsMjU1XSx0cmFuc3BhcmVudDpbLTEsLTEsLTFdLG1hZ2VudGE6WzI1NSwwLDI1NV0sb3JhbmdlOlsyNTUsMTY1LDBdLGJyb3duOlsxNjUsNDIsNDJdfSxpc05hbWVkQ29sb3I6ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuTkFNRURbal0hPT11bmRlZmluZWQ7fSxpc1N5c3RlbUNvbG9yOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLlNZU1RFTVtrXSE9PXVuZGVmaW5lZDt9LHN1cHBvcnRzVGhlbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHF4LkNsYXNzLmlzRGVmaW5lZChjKTt9LGlzVGhlbWVkQ29sb3I6ZnVuY3Rpb24obCl7aWYoIXRoaXMuc3VwcG9ydHNUaGVtZXMoKSl7cmV0dXJuIGZhbHNlO31yZXR1cm4gcXgudGhlbWUubWFuYWdlci5Db2xvci5nZXRJbnN0YW5jZSgpLmlzRHluYW1pYyhsKTt9LHN0cmluZ1RvUmdiOmZ1bmN0aW9uKG0pe2lmKHRoaXMuc3VwcG9ydHNUaGVtZXMoKSYmdGhpcy5pc1RoZW1lZENvbG9yKG0pKXt2YXIgbT1xeC50aGVtZS5tYW5hZ2VyLkNvbG9yLmdldEluc3RhbmNlKCkucmVzb2x2ZUR5bmFtaWMobSk7fWlmKHRoaXMuaXNOYW1lZENvbG9yKG0pKXtyZXR1cm4gdGhpcy5OQU1FRFttXTt9ZWxzZSBpZih0aGlzLmlzU3lzdGVtQ29sb3IobSkpe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgc3lzdGVtIGNvbG9ycyB0byBSR0I6ICIrbSk7fWVsc2UgaWYodGhpcy5pc1JnYlN0cmluZyhtKSl7cmV0dXJuIHRoaXMuX19nQigpO31lbHNlIGlmKHRoaXMuaXNIZXgzU3RyaW5nKG0pKXtyZXR1cm4gdGhpcy5fX2dEKCk7fWVsc2UgaWYodGhpcy5pc0hleDZTdHJpbmcobSkpe3JldHVybiB0aGlzLl9fZ0UoKTt9dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgcGFyc2UgY29sb3I6ICIrbSk7fSxjc3NTdHJpbmdUb1JnYjpmdW5jdGlvbihuKXtpZih0aGlzLmlzTmFtZWRDb2xvcihuKSl7cmV0dXJuIHRoaXMuTkFNRURbbl07fWVsc2UgaWYodGhpcy5pc1N5c3RlbUNvbG9yKG4pKXt0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IHN5c3RlbSBjb2xvcnMgdG8gUkdCOiAiK24pO31lbHNlIGlmKHRoaXMuaXNSZ2JTdHJpbmcobikpe3JldHVybiB0aGlzLl9fZ0IoKTt9ZWxzZSBpZih0aGlzLmlzUmdiYVN0cmluZyhuKSl7cmV0dXJuIHRoaXMuX19nQygpO31lbHNlIGlmKHRoaXMuaXNIZXgzU3RyaW5nKG4pKXtyZXR1cm4gdGhpcy5fX2dEKCk7fWVsc2UgaWYodGhpcy5pc0hleDZTdHJpbmcobikpe3JldHVybiB0aGlzLl9fZ0UoKTt9dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgcGFyc2UgY29sb3I6ICIrbik7fSxzdHJpbmdUb1JnYlN0cmluZzpmdW5jdGlvbihvKXtyZXR1cm4gdGhpcy5yZ2JUb1JnYlN0cmluZyh0aGlzLnN0cmluZ1RvUmdiKG8pKTt9LHJnYlRvUmdiU3RyaW5nOmZ1bmN0aW9uKHMpe3JldHVybiBlK3NbMF0raCtzWzFdK2grc1syXStkO30scmdiVG9IZXhTdHJpbmc6ZnVuY3Rpb24odSl7cmV0dXJuIChxeC5sYW5nLlN0cmluZy5wYWQodVswXS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSwyKStxeC5sYW5nLlN0cmluZy5wYWQodVsxXS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSwyKStxeC5sYW5nLlN0cmluZy5wYWQodVsyXS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSwyKSk7fSxpc1ZhbGlkUHJvcGVydHlWYWx1ZTpmdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5pc1RoZW1lZENvbG9yKHYpfHx0aGlzLmlzTmFtZWRDb2xvcih2KXx8dGhpcy5pc0hleDNTdHJpbmcodil8fHRoaXMuaXNIZXg2U3RyaW5nKHYpfHx0aGlzLmlzUmdiU3RyaW5nKHYpO30saXNDc3NTdHJpbmc6ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuaXNTeXN0ZW1Db2xvcih3KXx8dGhpcy5pc05hbWVkQ29sb3Iodyl8fHRoaXMuaXNIZXgzU3RyaW5nKHcpfHx0aGlzLmlzSGV4NlN0cmluZyh3KXx8dGhpcy5pc1JnYlN0cmluZyh3KTt9LGlzSGV4M1N0cmluZzpmdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5SRUdFWFAuaGV4My50ZXN0KHgpO30saXNIZXg2U3RyaW5nOmZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLlJFR0VYUC5oZXg2LnRlc3QoeSk7fSxpc1JnYlN0cmluZzpmdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5SRUdFWFAucmdiLnRlc3Qoeik7fSxpc1JnYmFTdHJpbmc6ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuUkVHRVhQLnJnYmEudGVzdChBKTt9LF9fZ0I6ZnVuY3Rpb24oKXt2YXIgRD1wYXJzZUludChSZWdFeHAuJDEsMTApO3ZhciBDPXBhcnNlSW50KFJlZ0V4cC4kMiwxMCk7dmFyIEI9cGFyc2VJbnQoUmVnRXhwLiQzLDEwKTtyZXR1cm4gW0QsQyxCXTt9LF9fZ0M6ZnVuY3Rpb24oKXt2YXIgRz1wYXJzZUludChSZWdFeHAuJDEsMTApO3ZhciBGPXBhcnNlSW50KFJlZ0V4cC4kMiwxMCk7dmFyIEU9cGFyc2VJbnQoUmVnRXhwLiQzLDEwKTtyZXR1cm4gW0csRixFXTt9LF9fZ0Q6ZnVuY3Rpb24oKXt2YXIgSj1wYXJzZUludChSZWdFeHAuJDEsMTYpKjE3O3ZhciBJPXBhcnNlSW50KFJlZ0V4cC4kMiwxNikqMTc7dmFyIEg9cGFyc2VJbnQoUmVnRXhwLiQzLDE2KSoxNztyZXR1cm4gW0osSSxIXTt9LF9fZ0U6ZnVuY3Rpb24oKXt2YXIgTT0ocGFyc2VJbnQoUmVnRXhwLiQxLDE2KSoxNikrcGFyc2VJbnQoUmVnRXhwLiQyLDE2KTt2YXIgTD0ocGFyc2VJbnQoUmVnRXhwLiQzLDE2KSoxNikrcGFyc2VJbnQoUmVnRXhwLiQ0LDE2KTt2YXIgSz0ocGFyc2VJbnQoUmVnRXhwLiQ1LDE2KSoxNikrcGFyc2VJbnQoUmVnRXhwLiQ2LDE2KTtyZXR1cm4gW00sTCxLXTt9LGhleDNTdHJpbmdUb1JnYjpmdW5jdGlvbihOKXtpZih0aGlzLmlzSGV4M1N0cmluZyhOKSl7cmV0dXJuIHRoaXMuX19nRChOKTt9dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGhleDMgdmFsdWU6ICIrTik7fSxoZXg2U3RyaW5nVG9SZ2I6ZnVuY3Rpb24oTyl7aWYodGhpcy5pc0hleDZTdHJpbmcoTykpe3JldHVybiB0aGlzLl9fZ0UoTyk7fXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBoZXg2IHZhbHVlOiAiK08pO30saGV4U3RyaW5nVG9SZ2I6ZnVuY3Rpb24oUCl7aWYodGhpcy5pc0hleDNTdHJpbmcoUCkpe3JldHVybiB0aGlzLl9fZ0QoUCk7fWlmKHRoaXMuaXNIZXg2U3RyaW5nKFApKXtyZXR1cm4gdGhpcy5fX2dFKFApO310aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHZhbHVlOiAiK1ApO30scmdiVG9Ic2I6ZnVuY3Rpb24oUSl7dmFyIFMsVCxWO3ZhciBiYz1RWzBdO3ZhciBZPVFbMV07dmFyIFI9UVsyXTt2YXIgYmI9KGJjPlkpP2JjOlk7aWYoUj5iYil7YmI9Ujt9dmFyIFU9KGJjPFkpP2JjOlk7aWYoUjxVKXtVPVI7fVY9YmIvMjU1LjA7aWYoYmIhPTApe1Q9KGJiLVUpL2JiO31lbHNle1Q9MDt9aWYoVD09MCl7Uz0wO31lbHNle3ZhciBYPShiYi1iYykvKGJiLVUpO3ZhciBiYT0oYmItWSkvKGJiLVUpO3ZhciBXPShiYi1SKS8oYmItVSk7aWYoYmM9PWJiKXtTPVctYmE7fWVsc2UgaWYoWT09YmIpe1M9Mi4wK1gtVzt9ZWxzZXtTPTQuMCtiYS1YO31TPVMvNi4wO2lmKFM8MCl7Uz1TKzEuMDt9fXJldHVybiBbTWF0aC5yb3VuZChTKjM2MCksTWF0aC5yb3VuZChUKjEwMCksTWF0aC5yb3VuZChWKjEwMCldO30saHNiVG9SZ2I6ZnVuY3Rpb24oYmQpe3ZhciBpLGYscCxxLHQ7dmFyIGJlPWJkWzBdLzM2MDt2YXIgYmY9YmRbMV0vMTAwO3ZhciBiZz1iZFsyXS8xMDA7aWYoYmU+PTEuMCl7YmUlPTEuMDt9aWYoYmY+MS4wKXtiZj0xLjA7fWlmKGJnPjEuMCl7Ymc9MS4wO312YXIgYmg9TWF0aC5mbG9vcigyNTUqYmcpO3ZhciBiaT17fTtpZihiZj09MC4wKXtiaS5yZWQ9YmkuZ3JlZW49YmkuYmx1ZT1iaDt9ZWxzZXtiZSo9Ni4wO2k9TWF0aC5mbG9vcihiZSk7Zj1iZS1pO3A9TWF0aC5mbG9vcihiaCooMS4wLWJmKSk7cT1NYXRoLmZsb29yKGJoKigxLjAtKGJmKmYpKSk7dD1NYXRoLmZsb29yKGJoKigxLjAtKGJmKigxLjAtZikpKSk7c3dpdGNoKGkpe2Nhc2UgMDpiaS5yZWQ9Ymg7YmkuZ3JlZW49dDtiaS5ibHVlPXA7YnJlYWs7Y2FzZSAxOmJpLnJlZD1xO2JpLmdyZWVuPWJoO2JpLmJsdWU9cDticmVhaztjYXNlIDI6YmkucmVkPXA7YmkuZ3JlZW49Ymg7YmkuYmx1ZT10O2JyZWFrO2Nhc2UgMzpiaS5yZWQ9cDtiaS5ncmVlbj1xO2JpLmJsdWU9Ymg7YnJlYWs7Y2FzZSA0OmJpLnJlZD10O2JpLmdyZWVuPXA7YmkuYmx1ZT1iaDticmVhaztjYXNlIDU6YmkucmVkPWJoO2JpLmdyZWVuPXA7YmkuYmx1ZT1xO2JyZWFrO319cmV0dXJuIFtiaS5yZWQsYmkuZ3JlZW4sYmkuYmx1ZV07fSxyYW5kb21Db2xvcjpmdW5jdGlvbigpe3ZhciByPU1hdGgucm91bmQoTWF0aC5yYW5kb20oKSoyNTUpO3ZhciBnPU1hdGgucm91bmQoTWF0aC5yYW5kb20oKSoyNTUpO3ZhciBiPU1hdGgucm91bmQoTWF0aC5yYW5kb20oKSoyNTUpO3JldHVybiB0aGlzLnJnYlRvUmdiU3RyaW5nKFtyLGcsYl0pO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaD0ic3RyaW5nIixnPSJfYXBwbHlUaGVtZSIsZj0icXgudGhlbWUubWFuYWdlci5BcHBlYXJhbmNlIixlPSI6IixkPSJUaGVtZSIsYz0iY2hhbmdlVGhlbWUiLGI9Ii8iLGE9InNpbmdsZXRvbiI7cXguQ2xhc3MuZGVmaW5lKGYse3R5cGU6YSxleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9fZEw9e307dGhpcy5fX2RNPXt9O30scHJvcGVydGllczp7dGhlbWU6e2NoZWNrOmQsbnVsbGFibGU6dHJ1ZSxldmVudDpjLGFwcGx5Omd9fSxtZW1iZXJzOntfX2ROOnt9LF9fZEw6bnVsbCxfX2RNOm51bGwsX2FwcGx5VGhlbWU6ZnVuY3Rpb24oaixrKXt0aGlzLl9fZE09e307dGhpcy5fX2RMPXt9O30sX19kTzpmdW5jdGlvbihsLG0sbil7dmFyIHM9bS5hcHBlYXJhbmNlczt2YXIgdj1zW2xdO2lmKCF2KXt2YXIgdz1iO3ZhciBwPVtdO3ZhciB1PWwuc3BsaXQodyk7dmFyIHQ7d2hpbGUoIXYmJnUubGVuZ3RoPjApe3AudW5zaGlmdCh1LnBvcCgpKTt2YXIgcT11LmpvaW4odyk7dj1zW3FdO2lmKHYpe3Q9di5hbGlhc3x8djtpZih0eXBlb2YgdD09PWgpe3ZhciByPXQrdytwLmpvaW4odyk7cmV0dXJuIHRoaXMuX19kTyhyLG0sbik7fX19Zm9yKHZhciBpPTA7aTxwLmxlbmd0aC0xO2krKyl7cC5zaGlmdCgpO3ZhciBxPXAuam9pbih3KTt2YXIgbz10aGlzLl9fZE8ocSxtKTtpZihvKXtyZXR1cm4gbzt9fWlmKG4hPW51bGwpe3JldHVybiB0aGlzLl9fZE8obixtKTt9cmV0dXJuIG51bGw7fWVsc2UgaWYodHlwZW9mIHY9PT1oKXtyZXR1cm4gdGhpcy5fX2RPKHYsbSxuKTt9ZWxzZSBpZih2LmluY2x1ZGUmJiF2LnN0eWxlKXtyZXR1cm4gdGhpcy5fX2RPKHYuaW5jbHVkZSxtLG4pO31yZXR1cm4gbDt9LHN0eWxlRnJvbTpmdW5jdGlvbih4LHkseixBKXtpZigheil7ej10aGlzLmdldFRoZW1lKCk7fXZhciBHPXRoaXMuX19kTTt2YXIgQj1HW3hdO2lmKCFCKXtCPUdbeF09dGhpcy5fX2RPKHgseixBKTt9dmFyIEw9ei5hcHBlYXJhbmNlc1tCXTtpZighTCl7dGhpcy53YXJuKCJNaXNzaW5nIGFwcGVhcmFuY2U6ICIreCk7cmV0dXJuIG51bGw7fWlmKCFMLnN0eWxlKXtyZXR1cm4gbnVsbDt9dmFyIE09QjtpZih5KXt2YXIgTj1MLiQkYml0cztpZighTil7Tj1MLiQkYml0cz17fTtMLiQkbGVuZ3RoPTA7fXZhciBFPTA7Zm9yKHZhciBIIGluIHkpe2lmKCF5W0hdKXtjb250aW51ZTt9aWYoTltIXT09bnVsbCl7TltIXT0xPDxMLiQkbGVuZ3RoKys7fUUrPU5bSF07fWlmKEU+MCl7TSs9ZStFO319dmFyIEY9dGhpcy5fX2RMO2lmKEZbTV0hPT11bmRlZmluZWQpe3JldHVybiBGW01dO31pZigheSl7eT10aGlzLl9fZE47fXZhciBKO2lmKEwuaW5jbHVkZXx8TC5iYXNlKXt2YXIgRD1MLnN0eWxlKHkpO3ZhciBDO2lmKEwuaW5jbHVkZSl7Qz10aGlzLnN0eWxlRnJvbShMLmluY2x1ZGUseSx6LEEpO31KPXt9O2lmKEwuYmFzZSl7dmFyIEk9dGhpcy5zdHlsZUZyb20oQix5LEwuYmFzZSxBKTtpZihMLmluY2x1ZGUpe2Zvcih2YXIgSyBpbiBJKXtpZighQy5oYXNPd25Qcm9wZXJ0eShLKSYmIUQuaGFzT3duUHJvcGVydHkoSykpe0pbS109SVtLXTt9fX1lbHNle2Zvcih2YXIgSyBpbiBJKXtpZighRC5oYXNPd25Qcm9wZXJ0eShLKSl7SltLXT1JW0tdO319fX1pZihMLmluY2x1ZGUpe2Zvcih2YXIgSyBpbiBDKXtpZighRC5oYXNPd25Qcm9wZXJ0eShLKSl7SltLXT1DW0tdO319fWZvcih2YXIgSyBpbiBEKXtKW0tdPURbS107fX1lbHNle0o9TC5zdHlsZSh5KTt9cmV0dXJuIEZbTV09Snx8bnVsbDt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19kTD10aGlzLl9fZE09bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaj0ibm9uU2NhbGVkIixpPSJzY2FsZWQiLGg9ImFscGhhU2NhbGVkIixnPSIucG5nIixmPSJxeC5jbGllbnQiLGU9ImRpdiIsZD0icmVwbGFjZW1lbnQiLGM9InF4LmV2ZW50LnR5cGUuRXZlbnQiLGI9ImhpZGRlbiIsYT0iQm9vbGVhbiIseT0icHgiLHg9InNjYWxlIix3PSJjaGFuZ2VTb3VyY2UiLHY9Il9fZlAiLHU9InF4LnVpLmJhc2ljLkltYWdlIix0PSJsb2FkZWQiLHM9Ii1kaXNhYmxlZC4kMSIscj0ibG9hZGluZ0ZhaWxlZCIscT0iU3RyaW5nIixwPSJfYXBwbHlTb3VyY2UiLG49ImltZyIsbz0iaW1hZ2UiLGw9Im1zaHRtbCIsbT0iX2FwcGx5U2NhbGUiLGs9Im5vLXJlcGVhdCI7cXguQ2xhc3MuZGVmaW5lKHUse2V4dGVuZDpxeC51aS5jb3JlLldpZGdldCxjb25zdHJ1Y3Q6ZnVuY3Rpb24oeil7dGhpcy5fX2ZQPXt9O3F4LnVpLmNvcmUuV2lkZ2V0LmNhbGwodGhpcyk7aWYoeil7dGhpcy5zZXRTb3VyY2Uoeik7fX0scHJvcGVydGllczp7c291cmNlOntjaGVjazpxLGluaXQ6bnVsbCxudWxsYWJsZTp0cnVlLGV2ZW50OncsYXBwbHk6cCx0aGVtZWFibGU6dHJ1ZX0sc2NhbGU6e2NoZWNrOmEsaW5pdDpmYWxzZSx0aGVtZWFibGU6dHJ1ZSxhcHBseTptfSxhcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0Om99LGFsbG93U2hyaW5rWDp7cmVmaW5lOnRydWUsaW5pdDpmYWxzZX0sYWxsb3dTaHJpbmtZOntyZWZpbmU6dHJ1ZSxpbml0OmZhbHNlfSxhbGxvd0dyb3dYOntyZWZpbmU6dHJ1ZSxpbml0OmZhbHNlfSxhbGxvd0dyb3dZOntyZWZpbmU6dHJ1ZSxpbml0OmZhbHNlfX0sZXZlbnRzOntsb2FkaW5nRmFpbGVkOmMsbG9hZGVkOmN9LG1lbWJlcnM6e19fZlE6bnVsbCxfX2ZSOm51bGwsX19mUzpudWxsLF9fZlA6bnVsbCxnZXRDb250ZW50RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZlcoKTt9LF9jcmVhdGVDb250ZW50RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZlcoKTt9LF9nZXRDb250ZW50SGludDpmdW5jdGlvbigpe3JldHVybiB7d2lkdGg6dGhpcy5fX2ZRfHwwLGhlaWdodDp0aGlzLl9fZlJ8fDB9O30sX2FwcGx5RW5hYmxlZDpmdW5jdGlvbihBLEIpe3F4LnVpLmNvcmUuV2lkZ2V0LnByb3RvdHlwZS5fYXBwbHlFbmFibGVkLmNhbGwodGhpcyxBLEIpO2lmKHRoaXMuZ2V0U291cmNlKCkpe3RoaXMuX3N0eWxlU291cmNlKCk7fX0sX2FwcGx5U291cmNlOmZ1bmN0aW9uKEMpe3RoaXMuX3N0eWxlU291cmNlKCk7fSxfYXBwbHlTY2FsZTpmdW5jdGlvbihEKXt0aGlzLl9zdHlsZVNvdXJjZSgpO30sX19mVDpmdW5jdGlvbihFKXt0aGlzLl9fZlM9RTt9LF9fZlU6ZnVuY3Rpb24oKXtpZih0aGlzLl9fZlM9PW51bGwpe3ZhciBHPXRoaXMuZ2V0U291cmNlKCk7dmFyIEY9ZmFsc2U7aWYoRyE9bnVsbCl7Rj1xeC5sYW5nLlN0cmluZy5lbmRzV2l0aChHLGcpO31pZih0aGlzLmdldFNjYWxlKCkmJkYmJnF4LmJvbS5lbGVtZW50LkRlY29yYXRpb24uaXNBbHBoYUltYWdlTG9hZGVyRW5hYmxlZCgpKXt0aGlzLl9fZlM9aDt9ZWxzZSBpZih0aGlzLmdldFNjYWxlKCkpe3RoaXMuX19mUz1pO31lbHNle3RoaXMuX19mUz1qO319cmV0dXJuIHRoaXMuX19mUzt9LF9fZlY6ZnVuY3Rpb24oSCl7dmFyIEk7dmFyIEo7aWYoSD09aCl7ST10cnVlO0o9ZTt9ZWxzZSBpZihIPT1qKXtJPWZhbHNlO0o9ZTt9ZWxzZXtJPXRydWU7Sj1uO312YXIgSz1uZXcgcXguaHRtbC5JbWFnZShKKTtLLnNldFNjYWxlKEkpO0suc2V0U3R5bGVzKHsib3ZlcmZsb3dYIjpiLCJvdmVyZmxvd1kiOmJ9KTtyZXR1cm4gSzt9LF9fZlc6ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9fZlUoKTtpZih0aGlzLl9fZlBbTF09PW51bGwpe3RoaXMuX19mUFtMXT10aGlzLl9fZlYoTCk7fXJldHVybiB0aGlzLl9fZlBbTF07fSxfc3R5bGVTb3VyY2U6ZnVuY3Rpb24oKXt2YXIgTT1xeC51dGlsLkFsaWFzTWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlc29sdmUodGhpcy5nZXRTb3VyY2UoKSk7aWYoIU0pe3RoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5yZXNldFNvdXJjZSgpO3JldHVybjt9dGhpcy5fX2ZYKE0pO2lmKHF4LmNvcmUuVmFyaWFudC5pc1NldChmLGwpKXt2YXIgTj10aGlzLmdldFNjYWxlKCk/eDprO3RoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS50YWdOYW1lSGludD1xeC5ib20uZWxlbWVudC5EZWNvcmF0aW9uLmdldFRhZ05hbWUoTixNKTt9aWYocXgudXRpbC5SZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5oYXMoTSkpe3RoaXMuX19nYSh0aGlzLmdldENvbnRlbnRFbGVtZW50KCksTSk7fWVsc2UgaWYocXguaW8uSW1hZ2VMb2FkZXIuaXNMb2FkZWQoTSkpe3RoaXMuX19nYih0aGlzLmdldENvbnRlbnRFbGVtZW50KCksTSk7fWVsc2V7dGhpcy5fX2djKHRoaXMuZ2V0Q29udGVudEVsZW1lbnQoKSxNKTt9fSxfX2ZYOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoZix7Im1zaHRtbCI6ZnVuY3Rpb24oTyl7dmFyIFE9cXguYm9tLmVsZW1lbnQuRGVjb3JhdGlvbi5pc0FscGhhSW1hZ2VMb2FkZXJFbmFibGVkKCk7dmFyIFA9cXgubGFuZy5TdHJpbmcuZW5kc1dpdGgoTyxnKTtpZihRJiZQKXtpZih0aGlzLmdldFNjYWxlKCkmJnRoaXMuX19mVSgpIT1oKXt0aGlzLl9fZlQoaCk7fWVsc2UgaWYoIXRoaXMuZ2V0U2NhbGUoKSYmdGhpcy5fX2ZVKCkhPWope3RoaXMuX19mVChqKTt9fWVsc2V7aWYodGhpcy5nZXRTY2FsZSgpJiZ0aGlzLl9fZlUoKSE9aSl7dGhpcy5fX2ZUKGkpO31lbHNlIGlmKCF0aGlzLmdldFNjYWxlKCkmJnRoaXMuX19mVSgpIT1qKXt0aGlzLl9fZlQoaik7fX10aGlzLl9fZlkodGhpcy5fX2ZXKCkpO30sImRlZmF1bHQiOmZ1bmN0aW9uKFIpe2lmKHRoaXMuZ2V0U2NhbGUoKSYmdGhpcy5fX2ZVKCkhPWkpe3RoaXMuX19mVChpKTt9ZWxzZSBpZighdGhpcy5nZXRTY2FsZSgpJiZ0aGlzLl9fZlUoaikpe3RoaXMuX19mVChqKTt9dGhpcy5fX2ZZKHRoaXMuX19mVygpKTt9fSksX19mWTpmdW5jdGlvbihTKXt2YXIgVj10aGlzLmdldENvbnRhaW5lckVsZW1lbnQoKTt2YXIgVz1WLmdldENoaWxkKDApO2lmKFchPVMpe2lmKFchPW51bGwpe3ZhciBZPXk7dmFyIFQ9e307dmFyIFU9dGhpcy5nZXRJbm5lclNpemUoKTtpZihVIT1udWxsKXtULndpZHRoPVUud2lkdGgrWTtULmhlaWdodD1VLmhlaWdodCtZO312YXIgWD10aGlzLmdldEluc2V0cygpO1QubGVmdD1YLmxlZnQrWTtULnRvcD1YLnRvcCtZO1QuekluZGV4PTEwO1Muc2V0U3R5bGVzKFQsdHJ1ZSk7Uy5zZXRTZWxlY3RhYmxlKHRoaXMuZ2V0U2VsZWN0YWJsZSgpKTt9Vi5yZW1vdmVBdCgwKTtWLmFkZEF0KFMsMCk7fX0sX19nYTpmdW5jdGlvbihiYSxiYil7dmFyIGJkPXF4LnV0aWwuUmVzb3VyY2VNYW5hZ2VyLmdldEluc3RhbmNlKCk7aWYoIXRoaXMuZ2V0RW5hYmxlZCgpKXt2YXIgYmM9YmIucmVwbGFjZSgvXC4oW2Etel0rKSQvLHMpO2lmKGJkLmhhcyhiYykpe2JiPWJjO3RoaXMuYWRkU3RhdGUoZCk7fWVsc2V7dGhpcy5yZW1vdmVTdGF0ZShkKTt9fWlmKGJhLmdldFNvdXJjZSgpPT09YmIpe3JldHVybjt9YmEuc2V0U291cmNlKGJiKTt0aGlzLl9fZ2UoYmQuZ2V0SW1hZ2VXaWR0aChiYiksYmQuZ2V0SW1hZ2VIZWlnaHQoYmIpKTt9LF9fZ2I6ZnVuY3Rpb24oYmUsYmYpe3ZhciBiaD1xeC5pby5JbWFnZUxvYWRlcjtiZS5zZXRTb3VyY2UoYmYpO3ZhciBiZz1iaC5nZXRXaWR0aChiZik7dmFyIGJpPWJoLmdldEhlaWdodChiZik7dGhpcy5fX2dlKGJnLGJpKTt9LF9fZ2M6ZnVuY3Rpb24oYmosYmspe3ZhciBzZWxmO3ZhciBibD1xeC5pby5JbWFnZUxvYWRlcjt7fTtpZighYmwuaXNGYWlsZWQoYmspKXtibC5sb2FkKGJrLHRoaXMuX19nZCx0aGlzKTt9ZWxzZXtpZihiaiE9bnVsbCl7YmoucmVzZXRTb3VyY2UoKTt9fX0sX19nZDpmdW5jdGlvbihibSxibil7aWYodGhpcy4kJGRpc3Bvc2VkPT09dHJ1ZSl7cmV0dXJuO31pZihibSE9PXF4LnV0aWwuQWxpYXNNYW5hZ2VyLmdldEluc3RhbmNlKCkucmVzb2x2ZSh0aGlzLmdldFNvdXJjZSgpKSl7cmV0dXJuO31pZihibi5mYWlsZWQpe3RoaXMud2FybigiSW1hZ2UgY291bGQgbm90IGJlIGxvYWRlZDogIitibSk7dGhpcy5maXJlRXZlbnQocik7fWVsc2V7dGhpcy5maXJlRXZlbnQodCk7fXRoaXMuX3N0eWxlU291cmNlKCk7fSxfX2dlOmZ1bmN0aW9uKGJvLGJwKXtpZihibyE9PXRoaXMuX19mUXx8YnAhPT10aGlzLl9fZlIpe3RoaXMuX19mUT1ibzt0aGlzLl9fZlI9YnA7cXgudWkuY29yZS5xdWV1ZS5MYXlvdXQuYWRkKHRoaXMpO319fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX2Rpc3Bvc2VNYXAodik7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGo9IkludGVnZXIiLGk9ImludGVydmFsIixoPSJrZWVwLWFsaWduIixnPSJkaXNhcHBlYXIiLGY9ImJlc3QtZml0IixlPSJtb3VzZSIsZD0iYm90dG9tLWxlZnQiLGM9ImRpcmVjdCIsYj0iQm9vbGVhbiIsYT0iYm90dG9tLXJpZ2h0Iix4PSJ3aWRnZXQiLHc9InF4LnVpLmNvcmUuTVBsYWNlbWVudCIsdj0ibGVmdC10b3AiLHU9Im9mZnNldFJpZ2h0Iix0PSJzaG9ydGhhbmQiLHM9Im9mZnNldExlZnQiLHI9InRvcC1sZWZ0IixxPSJhcHBlYXIiLHA9Im9mZnNldEJvdHRvbSIsbz0idG9wLXJpZ2h0IixtPSJvZmZzZXRUb3AiLG49InJpZ2h0LWJvdHRvbSIsaz0icmlnaHQtdG9wIixsPSJsZWZ0LWJvdHRvbSI7cXguTWl4aW4uZGVmaW5lKHcse3N0YXRpY3M6e19faVI6bnVsbCxzZXRWaXNpYmxlRWxlbWVudDpmdW5jdGlvbih5KXt0aGlzLl9faVI9eTt9LGdldFZpc2libGVFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pUjt9fSxwcm9wZXJ0aWVzOntwb3NpdGlvbjp7Y2hlY2s6W3IsbyxkLGEsdixsLGssbl0saW5pdDpkLHRoZW1lYWJsZTp0cnVlfSxwbGFjZU1ldGhvZDp7Y2hlY2s6W3gsZV0saW5pdDplLHRoZW1lYWJsZTp0cnVlfSxkb21Nb3ZlOntjaGVjazpiLGluaXQ6ZmFsc2V9LHBsYWNlbWVudE1vZGVYOntjaGVjazpbYyxoLGZdLGluaXQ6aCx0aGVtZWFibGU6dHJ1ZX0scGxhY2VtZW50TW9kZVk6e2NoZWNrOltjLGgsZl0saW5pdDpoLHRoZW1lYWJsZTp0cnVlfSxvZmZzZXRMZWZ0OntjaGVjazpqLGluaXQ6MCx0aGVtZWFibGU6dHJ1ZX0sb2Zmc2V0VG9wOntjaGVjazpqLGluaXQ6MCx0aGVtZWFibGU6dHJ1ZX0sb2Zmc2V0UmlnaHQ6e2NoZWNrOmosaW5pdDowLHRoZW1lYWJsZTp0cnVlfSxvZmZzZXRCb3R0b206e2NoZWNrOmosaW5pdDowLHRoZW1lYWJsZTp0cnVlfSxvZmZzZXQ6e2dyb3VwOlttLHUscCxzXSxtb2RlOnQsdGhlbWVhYmxlOnRydWV9fSxtZW1iZXJzOntfX2lTOm51bGwsX19pVDpudWxsLF9faVU6bnVsbCxnZXRMYXlvdXRMb2NhdGlvbjpmdW5jdGlvbih6KXt2YXIgQyxCLEQsdG9wO0I9ei5nZXRCb3VuZHMoKTtEPUIubGVmdDt0b3A9Qi50b3A7dmFyIEU9Qjt6PXouZ2V0TGF5b3V0UGFyZW50KCk7d2hpbGUoeiYmIXouaXNSb290V2lkZ2V0KCkpe0I9ei5nZXRCb3VuZHMoKTtEKz1CLmxlZnQ7dG9wKz1CLnRvcDtDPXouZ2V0SW5zZXRzKCk7RCs9Qy5sZWZ0O3RvcCs9Qy50b3A7ej16LmdldExheW91dFBhcmVudCgpO31pZih6LmlzUm9vdFdpZGdldCgpKXt2YXIgQT16LmdldENvbnRhaW5lckxvY2F0aW9uKCk7aWYoQSl7RCs9QS5sZWZ0O3RvcCs9QS50b3A7fX1yZXR1cm4ge2xlZnQ6RCx0b3A6dG9wLHJpZ2h0OkQrRS53aWR0aCxib3R0b206dG9wK0UuaGVpZ2h0fTt9LG1vdmVUbzpmdW5jdGlvbihGLHRvcCl7dmFyIEg9cXgudWkuY29yZS5NUGxhY2VtZW50LmdldFZpc2libGVFbGVtZW50KCk7aWYoSCl7dmFyIEo9dGhpcy5nZXRCb3VuZHMoKTt2YXIgRz1ILmdldENvbnRlbnRMb2NhdGlvbigpO2lmKEomJkcpe3ZhciBLPXRvcCtKLmhlaWdodDt2YXIgST1GK0oud2lkdGg7aWYoKEk+Ry5sZWZ0JiZGPEcucmlnaHQpJiYoSz5HLnRvcCYmdG9wPEcuYm90dG9tKSl7Rj1NYXRoLm1heChHLmxlZnQtSi53aWR0aCwwKTt9fX1pZih0aGlzLmdldERvbU1vdmUoKSl7dGhpcy5zZXREb21Qb3NpdGlvbihGLHRvcCk7fWVsc2V7dGhpcy5zZXRMYXlvdXRQcm9wZXJ0aWVzKHtsZWZ0OkYsdG9wOnRvcH0pO319LHBsYWNlVG9XaWRnZXQ6ZnVuY3Rpb24oTCxNKXtpZihNKXt0aGlzLl9faVYoKTt0aGlzLl9faVM9cXgubGFuZy5GdW5jdGlvbi5iaW5kKHRoaXMucGxhY2VUb1dpZGdldCx0aGlzLEwsZmFsc2UpO3F4LmV2ZW50LklkbGUuZ2V0SW5zdGFuY2UoKS5hZGRMaXN0ZW5lcihpLHRoaXMuX19pUyk7dGhpcy5fX2lVPWZ1bmN0aW9uKCl7dGhpcy5fX2lWKCk7fTt0aGlzLmFkZExpc3RlbmVyKGcsdGhpcy5fX2lVLHRoaXMpO312YXIgTj1MLmdldENvbnRhaW5lckxvY2F0aW9uKCl8fHRoaXMuZ2V0TGF5b3V0TG9jYXRpb24oTCk7dGhpcy5fX2lYKE4pO30sX19pVjpmdW5jdGlvbigpe2lmKHRoaXMuX19pUyl7cXguZXZlbnQuSWRsZS5nZXRJbnN0YW5jZSgpLnJlbW92ZUxpc3RlbmVyKGksdGhpcy5fX2lTKTt0aGlzLl9faVM9bnVsbDt9aWYodGhpcy5fX2lVKXt0aGlzLnJlbW92ZUxpc3RlbmVyKGcsdGhpcy5fX2lVLHRoaXMpO3RoaXMuX19pVT1udWxsO319LHBsYWNlVG9Nb3VzZTpmdW5jdGlvbihldmVudCl7dmFyIFA9ZXZlbnQuZ2V0RG9jdW1lbnRMZWZ0KCk7dmFyIHRvcD1ldmVudC5nZXREb2N1bWVudFRvcCgpO3ZhciBPPXtsZWZ0OlAsdG9wOnRvcCxyaWdodDpQLGJvdHRvbTp0b3B9O3RoaXMuX19pWChPKTt9LHBsYWNlVG9FbGVtZW50OmZ1bmN0aW9uKFEsUil7dmFyIGxvY2F0aW9uPXF4LmJvbS5lbGVtZW50LkxvY2F0aW9uLmdldChRKTt2YXIgUz17bGVmdDpsb2NhdGlvbi5sZWZ0LHRvcDpsb2NhdGlvbi50b3AscmlnaHQ6bG9jYXRpb24ubGVmdCtRLm9mZnNldFdpZHRoLGJvdHRvbTpsb2NhdGlvbi50b3ArUS5vZmZzZXRIZWlnaHR9O2lmKFIpe3RoaXMuX19pUz1xeC5sYW5nLkZ1bmN0aW9uLmJpbmQodGhpcy5wbGFjZVRvRWxlbWVudCx0aGlzLFEsZmFsc2UpO3F4LmV2ZW50LklkbGUuZ2V0SW5zdGFuY2UoKS5hZGRMaXN0ZW5lcihpLHRoaXMuX19pUyk7dGhpcy5hZGRMaXN0ZW5lcihnLGZ1bmN0aW9uKCl7aWYodGhpcy5fX2lTKXtxeC5ldmVudC5JZGxlLmdldEluc3RhbmNlKCkucmVtb3ZlTGlzdGVuZXIoaSx0aGlzLl9faVMpO3RoaXMuX19pUz1udWxsO319LHRoaXMpO310aGlzLl9faVgoUyk7fSxwbGFjZVRvUG9pbnQ6ZnVuY3Rpb24oVCl7dmFyIFU9e2xlZnQ6VC5sZWZ0LHRvcDpULnRvcCxyaWdodDpULmxlZnQsYm90dG9tOlQudG9wfTt0aGlzLl9faVgoVSk7fSxfZ2V0UGxhY2VtZW50T2Zmc2V0czpmdW5jdGlvbigpe3JldHVybiB7bGVmdDp0aGlzLmdldE9mZnNldExlZnQoKSx0b3A6dGhpcy5nZXRPZmZzZXRUb3AoKSxyaWdodDp0aGlzLmdldE9mZnNldFJpZ2h0KCksYm90dG9tOnRoaXMuZ2V0T2Zmc2V0Qm90dG9tKCl9O30sX19pVzpmdW5jdGlvbihWKXt2YXIgVz1udWxsO2lmKHRoaXMuX2NvbXB1dGVQbGFjZW1lbnRTaXplKXt2YXIgVz10aGlzLl9jb21wdXRlUGxhY2VtZW50U2l6ZSgpO31lbHNlIGlmKHRoaXMuaXNWaXNpYmxlKCkpe3ZhciBXPXRoaXMuZ2V0Qm91bmRzKCk7fWlmKFc9PW51bGwpe3RoaXMuYWRkTGlzdGVuZXJPbmNlKHEsZnVuY3Rpb24oKXt0aGlzLl9faVcoVik7fSx0aGlzKTt9ZWxzZXtWLmNhbGwodGhpcyxXKTt9fSxfX2lYOmZ1bmN0aW9uKFgpe3RoaXMuX19pVyhmdW5jdGlvbihZKXt2YXIgYmE9cXgudXRpbC5wbGFjZW1lbnQuUGxhY2VtZW50LmNvbXB1dGUoWSx0aGlzLmdldExheW91dFBhcmVudCgpLmdldEJvdW5kcygpLFgsdGhpcy5fZ2V0UGxhY2VtZW50T2Zmc2V0cygpLHRoaXMuZ2V0UG9zaXRpb24oKSx0aGlzLmdldFBsYWNlbWVudE1vZGVYKCksdGhpcy5nZXRQbGFjZW1lbnRNb2RlWSgpKTt0aGlzLm1vdmVUbyhiYS5sZWZ0LGJhLnRvcCk7fSk7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9faVYoKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZz0iZHJhZ2Ryb3AtY3Vyc29yIixmPSJfYXBwbHlBY3Rpb24iLGU9ImFsaWFzIixkPSJxeC51aS5jb3JlLkRyYWdEcm9wQ3Vyc29yIixjPSJtb3ZlIixiPSJzaW5nbGV0b24iLGE9ImNvcHkiO3F4LkNsYXNzLmRlZmluZShkLHtleHRlbmQ6cXgudWkuYmFzaWMuSW1hZ2UsaW5jbHVkZTpxeC51aS5jb3JlLk1QbGFjZW1lbnQsdHlwZTpiLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnVpLmJhc2ljLkltYWdlLmNhbGwodGhpcyk7dGhpcy5zZXRaSW5kZXgoMWU4KTt0aGlzLnNldERvbU1vdmUodHJ1ZSk7dmFyIGg9dGhpcy5nZXRBcHBsaWNhdGlvblJvb3QoKTtoLmFkZCh0aGlzLHtsZWZ0Oi0xMDAwLHRvcDotMTAwMH0pO30scHJvcGVydGllczp7YXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDpnfSxhY3Rpb246e2NoZWNrOltlLGEsY10sYXBwbHk6ZixudWxsYWJsZTp0cnVlfX0sbWVtYmVyczp7X2FwcGx5QWN0aW9uOmZ1bmN0aW9uKGksail7aWYoail7dGhpcy5yZW1vdmVTdGF0ZShqKTt9aWYoaSl7dGhpcy5hZGRTdGF0ZShpKTt9fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBmPSJpbnRlcnZhbCIsZT0iTnVtYmVyIixkPSJfYXBwbHlUaW1lb3V0SW50ZXJ2YWwiLGM9InF4LmV2ZW50LnR5cGUuRXZlbnQiLGI9InF4LmV2ZW50LklkbGUiLGE9InNpbmdsZXRvbiI7cXguQ2xhc3MuZGVmaW5lKGIse2V4dGVuZDpxeC5jb3JlLk9iamVjdCx0eXBlOmEsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt2YXIgZz1uZXcgcXguZXZlbnQuVGltZXIodGhpcy5nZXRUaW1lb3V0SW50ZXJ2YWwoKSk7Zy5hZGRMaXN0ZW5lcihmLHRoaXMuX29uSW50ZXJ2YWwsdGhpcyk7Zy5zdGFydCgpO3RoaXMuX19rTT1nO30sZXZlbnRzOnsiaW50ZXJ2YWwiOmN9LHByb3BlcnRpZXM6e3RpbWVvdXRJbnRlcnZhbDp7Y2hlY2s6ZSxpbml0OjEwMCxhcHBseTpkfX0sbWVtYmVyczp7X19rTTpudWxsLF9hcHBseVRpbWVvdXRJbnRlcnZhbDpmdW5jdGlvbihoKXt0aGlzLl9fa00uc2V0SW50ZXJ2YWwoaCk7fSxfb25JbnRlcnZhbDpmdW5jdGlvbigpe3RoaXMuZmlyZUV2ZW50KGYpO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5fX2tNKXt0aGlzLl9fa00uc3RvcCgpO310aGlzLl9fa009bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbz0idG9wIixuPSJyaWdodCIsbT0iYm90dG9tIixsPSJsZWZ0IixrPSJhbGlnbi1zdGFydCIsaj0icXgudXRpbC5wbGFjZW1lbnQuQWJzdHJhY3RBeGlzIixpPSJlZGdlLXN0YXJ0IixoPSJhbGlnbi1lbmQiLGc9ImVkZ2UtZW5kIixmPSItIixjPSJiZXN0LWZpdCIsZT0icXgudXRpbC5wbGFjZW1lbnQuUGxhY2VtZW50IixkPSJrZWVwLWFsaWduIixiPSJkaXJlY3QiLGE9J19faE0nO3F4LkNsYXNzLmRlZmluZShlLHtleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9faE09bmV3IHF4LnV0aWwucGxhY2VtZW50LkRpcmVjdEF4aXMoKTt9LHByb3BlcnRpZXM6e2F4aXNYOntjaGVjazpqfSxheGlzWTp7Y2hlY2s6an0sZWRnZTp7Y2hlY2s6W28sbixtLGxdLGluaXQ6b30sYWxpZ246e2NoZWNrOltvLG4sbSxsXSxpbml0Om59fSxzdGF0aWNzOntfX2hOOm51bGwsY29tcHV0ZTpmdW5jdGlvbihwLHEscixzLHQsdSx2KXt0aGlzLl9faE49dGhpcy5fX2hOfHxuZXcgcXgudXRpbC5wbGFjZW1lbnQuUGxhY2VtZW50KCk7dmFyIHk9dC5zcGxpdChmKTt2YXIgeD15WzBdO3ZhciB3PXlbMV07dGhpcy5fX2hOLnNldCh7YXhpc1g6dGhpcy5fX2hSKHUpLGF4aXNZOnRoaXMuX19oUih2KSxlZGdlOngsYWxpZ246d30pO3JldHVybiB0aGlzLl9faE4uY29tcHV0ZShwLHEscixzKTt9LF9faE86bnVsbCxfX2hQOm51bGwsX19oUTpudWxsLF9faFI6ZnVuY3Rpb24oeil7c3dpdGNoKHope2Nhc2UgYjp0aGlzLl9faE89dGhpcy5fX2hPfHxuZXcgcXgudXRpbC5wbGFjZW1lbnQuRGlyZWN0QXhpcygpO3JldHVybiB0aGlzLl9faE87Y2FzZSBkOnRoaXMuX19oUD10aGlzLl9faFB8fG5ldyBxeC51dGlsLnBsYWNlbWVudC5LZWVwQWxpZ25BeGlzKCk7cmV0dXJuIHRoaXMuX19oUDtjYXNlIGM6dGhpcy5fX2hRPXRoaXMuX19oUXx8bmV3IHF4LnV0aWwucGxhY2VtZW50LkJlc3RGaXRBeGlzKCk7cmV0dXJuIHRoaXMuX19oUTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCAnbW9kZScgYXJndW1lbnQhJyIpO319fSxtZW1iZXJzOntfX2hNOm51bGwsY29tcHV0ZTpmdW5jdGlvbihBLEIsQyxEKXt7fTt2YXIgRT10aGlzLmdldEF4aXNYKCl8fHRoaXMuX19oTTt2YXIgRz1FLmNvbXB1dGVTdGFydChBLndpZHRoLHtzdGFydDpDLmxlZnQsZW5kOkMucmlnaHR9LHtzdGFydDpELmxlZnQsZW5kOkQucmlnaHR9LEIud2lkdGgsdGhpcy5fX2hTKCkpO3ZhciBGPXRoaXMuZ2V0QXhpc1koKXx8dGhpcy5fX2hNO3ZhciB0b3A9Ri5jb21wdXRlU3RhcnQoQS5oZWlnaHQse3N0YXJ0OkMudG9wLGVuZDpDLmJvdHRvbX0se3N0YXJ0OkQudG9wLGVuZDpELmJvdHRvbX0sQi5oZWlnaHQsdGhpcy5fX2hUKCkpO3JldHVybiB7bGVmdDpHLHRvcDp0b3B9O30sX19oUzpmdW5jdGlvbigpe3ZhciBJPXRoaXMuZ2V0RWRnZSgpO3ZhciBIPXRoaXMuZ2V0QWxpZ24oKTtpZihJPT1sKXtyZXR1cm4gaTt9ZWxzZSBpZihJPT1uKXtyZXR1cm4gZzt9ZWxzZSBpZihIPT1sKXtyZXR1cm4gazt9ZWxzZSBpZihIPT1uKXtyZXR1cm4gaDt9fSxfX2hUOmZ1bmN0aW9uKCl7dmFyIEs9dGhpcy5nZXRFZGdlKCk7dmFyIEo9dGhpcy5nZXRBbGlnbigpO2lmKEs9PW8pe3JldHVybiBpO31lbHNlIGlmKEs9PW0pe3JldHVybiBnO31lbHNlIGlmKEo9PW8pe3JldHVybiBrO31lbHNlIGlmKEo9PW0pe3JldHVybiBoO319fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX2Rpc3Bvc2VPYmplY3RzKGEpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBlPSJlZGdlLXN0YXJ0IixkPSJhbGlnbi1zdGFydCIsYz0iYWxpZ24tZW5kIixiPSJlZGdlLWVuZCIsYT0icXgudXRpbC5wbGFjZW1lbnQuQWJzdHJhY3RBeGlzIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LG1lbWJlcnM6e2NvbXB1dGVTdGFydDpmdW5jdGlvbihmLGcsaCxpLGope3Rocm93IG5ldyBFcnJvcigiYWJzdHJhY3QgbWV0aG9kIGNhbGwhIik7fSxfbW92ZVRvRWRnZUFuZEFsaWduOmZ1bmN0aW9uKGssbCxtLG4pe3N3aXRjaChuKXtjYXNlIGU6cmV0dXJuIGwuc3RhcnQtbS5lbmQtaztjYXNlIGI6cmV0dXJuIGwuZW5kK20uc3RhcnQ7Y2FzZSBkOnJldHVybiBsLnN0YXJ0K20uc3RhcnQ7Y2FzZSBjOnJldHVybiBsLmVuZC1tLmVuZC1rO319LF9pc0luUmFuZ2U6ZnVuY3Rpb24obyxwLHEpe3JldHVybiBvPj0wJiZvK3A8PXE7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC51dGlsLnBsYWNlbWVudC5EaXJlY3RBeGlzIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LnV0aWwucGxhY2VtZW50LkFic3RyYWN0QXhpcyxtZW1iZXJzOntjb21wdXRlU3RhcnQ6ZnVuY3Rpb24oYixjLGQsZSxmKXtyZXR1cm4gdGhpcy5fbW92ZVRvRWRnZUFuZEFsaWduKGIsYyxkLGYpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYz0icXgudXRpbC5wbGFjZW1lbnQuS2VlcEFsaWduQXhpcyIsYj0iZWRnZS1zdGFydCIsYT0iZWRnZS1lbmQiO3F4LkNsYXNzLmRlZmluZShjLHtleHRlbmQ6cXgudXRpbC5wbGFjZW1lbnQuQWJzdHJhY3RBeGlzLG1lbWJlcnM6e2NvbXB1dGVTdGFydDpmdW5jdGlvbihkLGUsZixnLGgpe3ZhciBpPXRoaXMuX21vdmVUb0VkZ2VBbmRBbGlnbihkLGUsZixoKTt2YXIgaixrO2lmKHRoaXMuX2lzSW5SYW5nZShpLGQsZykpe3JldHVybiBpO31pZihoPT1ifHxoPT1hKXtqPWUuc3RhcnQtZi5lbmQ7az1lLmVuZCtmLnN0YXJ0O31lbHNle2o9ZS5lbmQtZi5lbmQ7az1lLnN0YXJ0K2Yuc3RhcnQ7fWlmKGo+Zy1rKXtpPWotZDt9ZWxzZXtpPWs7fXJldHVybiBpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgudXRpbC5wbGFjZW1lbnQuQmVzdEZpdEF4aXMiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXgudXRpbC5wbGFjZW1lbnQuQWJzdHJhY3RBeGlzLG1lbWJlcnM6e2NvbXB1dGVTdGFydDpmdW5jdGlvbihiLGMsZCxlLGYpe3ZhciBnPXRoaXMuX21vdmVUb0VkZ2VBbmRBbGlnbihiLGMsZCxmKTtpZih0aGlzLl9pc0luUmFuZ2UoZyxiLGUpKXtyZXR1cm4gZzt9aWYoZzwwKXtnPU1hdGgubWluKDAsZS1iKTt9aWYoZytiPmUpe2c9TWF0aC5tYXgoMCxlLWIpO31yZXR1cm4gZzt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9InF4LnVpLmZvcm0uSVJhZGlvSXRlbSIsYT0icXguZXZlbnQudHlwZS5EYXRhIjtxeC5JbnRlcmZhY2UuZGVmaW5lKGIse2V2ZW50czp7ImNoYW5nZVZhbHVlIjphfSxtZW1iZXJzOntzZXRWYWx1ZTpmdW5jdGlvbihjKXt9LGdldFZhbHVlOmZ1bmN0aW9uKCl7fSxzZXRHcm91cDpmdW5jdGlvbihkKXt0aGlzLmFzc2VydEluc3RhbmNlKGQscXgudWkuZm9ybS5SYWRpb0dyb3VwKTt9LGdldEdyb3VwOmZ1bmN0aW9uKCl7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJjaGFuZ2VNb2RlbCIsYT0icXgudWkuZm9ybS5NTW9kZWxQcm9wZXJ0eSI7cXguTWl4aW4uZGVmaW5lKGEse3Byb3BlcnRpZXM6e21vZGVsOntudWxsYWJsZTp0cnVlLGV2ZW50OmIsZGVyZWZlcmVuY2U6dHJ1ZX19fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0icXgudWkuZm9ybS5JQm9vbGVhbkZvcm0iLGE9InF4LmV2ZW50LnR5cGUuRGF0YSI7cXguSW50ZXJmYWNlLmRlZmluZShiLHtldmVudHM6eyJjaGFuZ2VWYWx1ZSI6YX0sbWVtYmVyczp7c2V0VmFsdWU6ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PTE7fSxyZXNldFZhbHVlOmZ1bmN0aW9uKCl7fSxnZXRWYWx1ZTpmdW5jdGlvbigpe319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0icXgudWkuZm9ybS5JTW9kZWwiLGE9InF4LmV2ZW50LnR5cGUuRGF0YSI7cXguSW50ZXJmYWNlLmRlZmluZShiLHtldmVudHM6eyJjaGFuZ2VNb2RlbCI6YX0sbWVtYmVyczp7c2V0TW9kZWw6ZnVuY3Rpb24oYyl7fSxnZXRNb2RlbDpmdW5jdGlvbigpe30scmVzZXRNb2RlbDpmdW5jdGlvbigpe319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0icXguZXZlbnQudHlwZS5EYXRhIixhPSJxeC51aS5mb3JtLklGb3JtIjtxeC5JbnRlcmZhY2UuZGVmaW5lKGEse2V2ZW50czp7ImNoYW5nZUVuYWJsZWQiOmIsImNoYW5nZVZhbGlkIjpiLCJjaGFuZ2VJbnZhbGlkTWVzc2FnZSI6YiwiY2hhbmdlUmVxdWlyZWQiOmJ9LG1lbWJlcnM6e3NldEVuYWJsZWQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PTE7fSxnZXRFbmFibGVkOmZ1bmN0aW9uKCl7fSxzZXRSZXF1aXJlZDpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09MTt9LGdldFJlcXVpcmVkOmZ1bmN0aW9uKCl7fSxzZXRWYWxpZDpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09MTt9LGdldFZhbGlkOmZ1bmN0aW9uKCl7fSxzZXRJbnZhbGlkTWVzc2FnZTpmdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09MTt9LGdldEludmFsaWRNZXNzYWdlOmZ1bmN0aW9uKCl7fSxzZXRSZXF1aXJlZEludmFsaWRNZXNzYWdlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT0xO30sZ2V0UmVxdWlyZWRJbnZhbGlkTWVzc2FnZTpmdW5jdGlvbigpe319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0icXgudWkuZm9ybS5JRXhlY3V0YWJsZSIsYT0icXguZXZlbnQudHlwZS5EYXRhIjtxeC5JbnRlcmZhY2UuZGVmaW5lKGIse2V2ZW50czp7ImV4ZWN1dGUiOmF9LG1lbWJlcnM6e3NldENvbW1hbmQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PTE7fSxnZXRDb21tYW5kOmZ1bmN0aW9uKCl7fSxleGVjdXRlOmZ1bmN0aW9uKCl7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBuPSJleGVjdXRlIixtPSJ0b29sVGlwVGV4dCIsbD0iaWNvbiIsaz0ibGFiZWwiLGo9InF4LnVpLmNvcmUuTUV4ZWN1dGFibGUiLGg9InZhbHVlIixnPSJxeC5ldmVudC50eXBlLkV2ZW50IixmPSJfYXBwbHlDb21tYW5kIixkPSJlbmFibGVkIixjPSJtZW51IixhPSJjaGFuZ2VDb21tYW5kIixiPSJxeC51aS5jb3JlLkNvbW1hbmQiO3F4Lk1peGluLmRlZmluZShqLHtldmVudHM6eyJleGVjdXRlIjpnfSxwcm9wZXJ0aWVzOntjb21tYW5kOntjaGVjazpiLGFwcGx5OmYsZXZlbnQ6YSxudWxsYWJsZTp0cnVlfX0sbWVtYmVyczp7X19rTjpudWxsLF9fa086ZmFsc2UsX19rUDpudWxsLF9iaW5kYWJsZVByb3BlcnRpZXM6W2QsayxsLG0saCxjXSxleGVjdXRlOmZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRDb21tYW5kKCk7aWYobyl7aWYodGhpcy5fX2tPKXt0aGlzLl9fa089ZmFsc2U7fWVsc2V7dGhpcy5fX2tPPXRydWU7by5leGVjdXRlKHRoaXMpO319dGhpcy5maXJlRXZlbnQobik7fSxfX2tROmZ1bmN0aW9uKGUpe2lmKHRoaXMuX19rTyl7dGhpcy5fX2tPPWZhbHNlO3JldHVybjt9dGhpcy5fX2tPPXRydWU7dGhpcy5leGVjdXRlKCk7fSxfYXBwbHlDb21tYW5kOmZ1bmN0aW9uKHAscSl7aWYocSE9bnVsbCl7cS5yZW1vdmVMaXN0ZW5lckJ5SWQodGhpcy5fX2tQKTt9aWYocCE9bnVsbCl7dGhpcy5fX2tQPXAuYWRkTGlzdGVuZXIobix0aGlzLl9fa1EsdGhpcyk7fXZhciB0PXRoaXMuX19rTjtpZih0PT1udWxsKXt0aGlzLl9fa049dD17fTt9Zm9yKHZhciBpPTA7aTx0aGlzLl9iaW5kYWJsZVByb3BlcnRpZXMubGVuZ3RoO2krKyl7dmFyIHM9dGhpcy5fYmluZGFibGVQcm9wZXJ0aWVzW2ldO2lmKHEhPW51bGwmJnRbc10hPW51bGwpe3EucmVtb3ZlQmluZGluZyh0W3NdKTt0W3NdPW51bGw7fWlmKHAhPW51bGwmJnF4LkNsYXNzLmhhc1Byb3BlcnR5KHRoaXMuY29uc3RydWN0b3Iscykpe3ZhciByPXAuZ2V0KHMpO2lmKHI9PW51bGwpe3ZhciB1PXRoaXMuZ2V0KHMpO310W3NdPXAuYmluZChzLHRoaXMscyk7aWYodSl7dGhpcy5zZXQocyx1KTt9fX19fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19rTj1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBqPSJsYWJlbCIsaT0iaWNvbiIsaD0iQm9vbGVhbiIsZz0iYm90aCIsZj0iU3RyaW5nIixlPSJsZWZ0IixkPSJjaGFuZ2VHYXAiLGM9ImNoYW5nZVNob3ciLGI9ImJvdHRvbSIsYT0iX2FwcGx5Q2VudGVyIix5PSJjaGFuZ2VJY29uIix4PSJxeC51aS5iYXNpYy5BdG9tIix3PSJjaGFuZ2VMYWJlbCIsdj0iSW50ZWdlciIsdT0iX2FwcGx5SWNvblBvc2l0aW9uIix0PSJib3R0b20tbGVmdCIscz0idG9wLWxlZnQiLHI9InRvcCIscT0icmlnaHQiLHA9Il9hcHBseVJpY2giLG49Il9hcHBseUljb24iLG89Il9hcHBseVNob3ciLGw9Il9hcHBseUxhYmVsIixtPSJfYXBwbHlHYXAiLGs9ImF0b20iO3F4LkNsYXNzLmRlZmluZSh4LHtleHRlbmQ6cXgudWkuY29yZS5XaWRnZXQsY29uc3RydWN0OmZ1bmN0aW9uKHosQSl7e307cXgudWkuY29yZS5XaWRnZXQuY2FsbCh0aGlzKTt0aGlzLl9zZXRMYXlvdXQobmV3IHF4LnVpLmxheW91dC5BdG9tKCkpO2lmKHohPW51bGwpe3RoaXMuc2V0TGFiZWwoeik7fWlmKEEhPW51bGwpe3RoaXMuc2V0SWNvbihBKTt9fSxwcm9wZXJ0aWVzOnthcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0Omt9LGxhYmVsOnthcHBseTpsLG51bGxhYmxlOnRydWUsY2hlY2s6ZixldmVudDp3fSxyaWNoOntjaGVjazpoLGluaXQ6ZmFsc2UsYXBwbHk6cH0saWNvbjp7Y2hlY2s6ZixhcHBseTpuLG51bGxhYmxlOnRydWUsdGhlbWVhYmxlOnRydWUsZXZlbnQ6eX0sZ2FwOntjaGVjazp2LG51bGxhYmxlOmZhbHNlLGV2ZW50OmQsYXBwbHk6bSx0aGVtZWFibGU6dHJ1ZSxpbml0OjR9LHNob3c6e2luaXQ6ZyxjaGVjazpbZyxqLGldLHRoZW1lYWJsZTp0cnVlLGluaGVyaXRhYmxlOnRydWUsYXBwbHk6byxldmVudDpjfSxpY29uUG9zaXRpb246e2luaXQ6ZSxjaGVjazpbcixxLGIsZSxzLHRdLHRoZW1lYWJsZTp0cnVlLGFwcGx5OnV9LGNlbnRlcjp7aW5pdDpmYWxzZSxjaGVjazpoLHRoZW1lYWJsZTp0cnVlLGFwcGx5OmF9fSxtZW1iZXJzOntfY3JlYXRlQ2hpbGRDb250cm9sSW1wbDpmdW5jdGlvbihCLEMpe3ZhciBEO3N3aXRjaChCKXtjYXNlIGo6RD1uZXcgcXgudWkuYmFzaWMuTGFiZWwodGhpcy5nZXRMYWJlbCgpKTtELnNldEFub255bW91cyh0cnVlKTtELnNldFJpY2godGhpcy5nZXRSaWNoKCkpO3RoaXMuX2FkZChEKTtpZih0aGlzLmdldExhYmVsKCk9PW51bGx8fHRoaXMuZ2V0U2hvdygpPT09aSl7RC5leGNsdWRlKCk7fWJyZWFrO2Nhc2UgaTpEPW5ldyBxeC51aS5iYXNpYy5JbWFnZSh0aGlzLmdldEljb24oKSk7RC5zZXRBbm9ueW1vdXModHJ1ZSk7dGhpcy5fYWRkQXQoRCwwKTtpZih0aGlzLmdldEljb24oKT09bnVsbHx8dGhpcy5nZXRTaG93KCk9PT1qKXtELmV4Y2x1ZGUoKTt9YnJlYWs7fXJldHVybiBEfHxxeC51aS5jb3JlLldpZGdldC5wcm90b3R5cGUuX2NyZWF0ZUNoaWxkQ29udHJvbEltcGwuY2FsbCh0aGlzLEIpO30sX2ZvcndhcmRTdGF0ZXM6e2ZvY3VzZWQ6dHJ1ZSxob3ZlcmVkOnRydWV9LF9oYW5kbGVMYWJlbDpmdW5jdGlvbigpe2lmKHRoaXMuZ2V0TGFiZWwoKT09bnVsbHx8dGhpcy5nZXRTaG93KCk9PT1pKXt0aGlzLl9leGNsdWRlQ2hpbGRDb250cm9sKGopO31lbHNle3RoaXMuX3Nob3dDaGlsZENvbnRyb2woaik7fX0sX2hhbmRsZUljb246ZnVuY3Rpb24oKXtpZih0aGlzLmdldEljb24oKT09bnVsbHx8dGhpcy5nZXRTaG93KCk9PT1qKXt0aGlzLl9leGNsdWRlQ2hpbGRDb250cm9sKGkpO31lbHNle3RoaXMuX3Nob3dDaGlsZENvbnRyb2woaSk7fX0sX2FwcGx5TGFiZWw6ZnVuY3Rpb24oRSxGKXt2YXIgRz10aGlzLmdldENoaWxkQ29udHJvbChqLHRydWUpO2lmKEcpe0cuc2V0VmFsdWUoRSk7fXRoaXMuX2hhbmRsZUxhYmVsKCk7fSxfYXBwbHlSaWNoOmZ1bmN0aW9uKEgsSSl7dmFyIEo9dGhpcy5nZXRDaGlsZENvbnRyb2woaix0cnVlKTtpZihKKXtKLnNldFJpY2goSCk7fX0sX2FwcGx5SWNvbjpmdW5jdGlvbihLLEwpe3ZhciBNPXRoaXMuZ2V0Q2hpbGRDb250cm9sKGksdHJ1ZSk7aWYoTSl7TS5zZXRTb3VyY2UoSyk7fXRoaXMuX2hhbmRsZUljb24oKTt9LF9hcHBseUdhcDpmdW5jdGlvbihOLE8pe3RoaXMuX2dldExheW91dCgpLnNldEdhcChOKTt9LF9hcHBseVNob3c6ZnVuY3Rpb24oUCxRKXt0aGlzLl9oYW5kbGVMYWJlbCgpO3RoaXMuX2hhbmRsZUljb24oKTt9LF9hcHBseUljb25Qb3NpdGlvbjpmdW5jdGlvbihSLFMpe3RoaXMuX2dldExheW91dCgpLnNldEljb25Qb3NpdGlvbihSKTt9LF9hcHBseUNlbnRlcjpmdW5jdGlvbihULFUpe3RoaXMuX2dldExheW91dCgpLnNldENlbnRlcihUKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIG89InByZXNzZWQiLG49ImFiYW5kb25lZCIsbT0iaG92ZXJlZCIsbD0iRW50ZXIiLGs9IlNwYWNlIixqPSJkYmxjbGljayIsaT0icXgudWkuZm9ybS5CdXR0b24iLGg9Im1vdXNldXAiLGc9Im1vdXNlZG93biIsZj0ibW91c2VvdmVyIixiPSJtb3VzZW91dCIsZD0ia2V5ZG93biIsYz0iYnV0dG9uIixhPSJrZXl1cCI7cXguQ2xhc3MuZGVmaW5lKGkse2V4dGVuZDpxeC51aS5iYXNpYy5BdG9tLGluY2x1ZGU6W3F4LnVpLmNvcmUuTUV4ZWN1dGFibGVdLGltcGxlbWVudDpbcXgudWkuZm9ybS5JRXhlY3V0YWJsZV0sY29uc3RydWN0OmZ1bmN0aW9uKHAscSxyKXtxeC51aS5iYXNpYy5BdG9tLmNhbGwodGhpcyxwLHEpO2lmKHIhPW51bGwpe3RoaXMuc2V0Q29tbWFuZChyKTt9dGhpcy5hZGRMaXN0ZW5lcihmLHRoaXMuX29uTW91c2VPdmVyKTt0aGlzLmFkZExpc3RlbmVyKGIsdGhpcy5fb25Nb3VzZU91dCk7dGhpcy5hZGRMaXN0ZW5lcihnLHRoaXMuX29uTW91c2VEb3duKTt0aGlzLmFkZExpc3RlbmVyKGgsdGhpcy5fb25Nb3VzZVVwKTt0aGlzLmFkZExpc3RlbmVyKGQsdGhpcy5fb25LZXlEb3duKTt0aGlzLmFkZExpc3RlbmVyKGEsdGhpcy5fb25LZXlVcCk7dGhpcy5hZGRMaXN0ZW5lcihqLHRoaXMuX29uU3RvcEV2ZW50KTt9LHByb3BlcnRpZXM6e2FwcGVhcmFuY2U6e3JlZmluZTp0cnVlLGluaXQ6Y30sZm9jdXNhYmxlOntyZWZpbmU6dHJ1ZSxpbml0OnRydWV9fSxtZW1iZXJzOntfZm9yd2FyZFN0YXRlczp7Zm9jdXNlZDp0cnVlLGhvdmVyZWQ6dHJ1ZSxwcmVzc2VkOnRydWUsZGlzYWJsZWQ6dHJ1ZX0scHJlc3M6ZnVuY3Rpb24oKXtpZih0aGlzLmhhc1N0YXRlKG4pKXtyZXR1cm47fXRoaXMuYWRkU3RhdGUobyk7fSxyZWxlYXNlOmZ1bmN0aW9uKCl7aWYodGhpcy5oYXNTdGF0ZShvKSl7dGhpcy5yZW1vdmVTdGF0ZShvKTt9fSxyZXNldDpmdW5jdGlvbigpe3RoaXMucmVtb3ZlU3RhdGUobyk7dGhpcy5yZW1vdmVTdGF0ZShuKTt0aGlzLnJlbW92ZVN0YXRlKG0pO30sX29uTW91c2VPdmVyOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmlzRW5hYmxlZCgpfHxlLmdldFRhcmdldCgpIT09dGhpcyl7cmV0dXJuO31pZih0aGlzLmhhc1N0YXRlKG4pKXt0aGlzLnJlbW92ZVN0YXRlKG4pO3RoaXMuYWRkU3RhdGUobyk7fXRoaXMuYWRkU3RhdGUobSk7fSxfb25Nb3VzZU91dDpmdW5jdGlvbihlKXtpZighdGhpcy5pc0VuYWJsZWQoKXx8ZS5nZXRUYXJnZXQoKSE9PXRoaXMpe3JldHVybjt9dGhpcy5yZW1vdmVTdGF0ZShtKTtpZih0aGlzLmhhc1N0YXRlKG8pKXt0aGlzLnJlbW92ZVN0YXRlKG8pO3RoaXMuYWRkU3RhdGUobik7fX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKGUpe2lmKCFlLmlzTGVmdFByZXNzZWQoKSl7cmV0dXJuO31lLnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuY2FwdHVyZSgpO3RoaXMucmVtb3ZlU3RhdGUobik7dGhpcy5hZGRTdGF0ZShvKTt9LF9vbk1vdXNlVXA6ZnVuY3Rpb24oZSl7dGhpcy5yZWxlYXNlQ2FwdHVyZSgpO3ZhciBzPXRoaXMuaGFzU3RhdGUobyk7dmFyIHQ9dGhpcy5oYXNTdGF0ZShuKTtpZihzKXt0aGlzLnJlbW92ZVN0YXRlKG8pO31pZih0KXt0aGlzLnJlbW92ZVN0YXRlKG4pO31lbHNle3RoaXMuYWRkU3RhdGUobSk7aWYocyl7dGhpcy5leGVjdXRlKCk7fX1lLnN0b3BQcm9wYWdhdGlvbigpO30sX29uS2V5RG93bjpmdW5jdGlvbihlKXtzd2l0Y2goZS5nZXRLZXlJZGVudGlmaWVyKCkpe2Nhc2UgbDpjYXNlIGs6dGhpcy5yZW1vdmVTdGF0ZShuKTt0aGlzLmFkZFN0YXRlKG8pO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0sX29uS2V5VXA6ZnVuY3Rpb24oZSl7c3dpdGNoKGUuZ2V0S2V5SWRlbnRpZmllcigpKXtjYXNlIGw6Y2FzZSBrOmlmKHRoaXMuaGFzU3RhdGUobykpe3RoaXMucmVtb3ZlU3RhdGUobik7dGhpcy5yZW1vdmVTdGF0ZShvKTt0aGlzLmV4ZWN1dGUoKTtlLnN0b3BQcm9wYWdhdGlvbigpO319fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBtPSJxeC5keW5sb2NhbGUiLGw9IkJvb2xlYW4iLGs9ImNoYW5nZUxvY2FsZSIsaj0iY2hhbmdlSW52YWxpZE1lc3NhZ2UiLGk9Im9uIixoPSJTdHJpbmciLGc9ImludmFsaWQiLGY9IiIsZD0icXgudWkuZm9ybS5NRm9ybSIsYz0iX2FwcGx5VmFsaWQiLGE9ImNoYW5nZVJlcXVpcmVkIixiPSJjaGFuZ2VWYWxpZCI7cXguTWl4aW4uZGVmaW5lKGQse2NvbnN0cnVjdDpmdW5jdGlvbigpe2lmKHF4LmNvcmUuVmFyaWFudC5pc1NldChtLGkpKXtxeC5sb2NhbGUuTWFuYWdlci5nZXRJbnN0YW5jZSgpLmFkZExpc3RlbmVyKGssdGhpcy5fX2ZuLHRoaXMpO319LHByb3BlcnRpZXM6e3ZhbGlkOntjaGVjazpsLGluaXQ6dHJ1ZSxhcHBseTpjLGV2ZW50OmJ9LHJlcXVpcmVkOntjaGVjazpsLGluaXQ6ZmFsc2UsZXZlbnQ6YX0saW52YWxpZE1lc3NhZ2U6e2NoZWNrOmgsaW5pdDpmLGV2ZW50Omp9LHJlcXVpcmVkSW52YWxpZE1lc3NhZ2U6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZSxldmVudDpqfX0sbWVtYmVyczp7X2FwcGx5VmFsaWQ6ZnVuY3Rpb24obixvKXtuP3RoaXMucmVtb3ZlU3RhdGUoZyk6dGhpcy5hZGRTdGF0ZShnKTt9LF9fZm46cXguY29yZS5WYXJpYW50LnNlbGVjdChtLHsib24iOmZ1bmN0aW9uKGUpe3ZhciBwPXRoaXMuZ2V0SW52YWxpZE1lc3NhZ2UoKTtpZihwJiZwLnRyYW5zbGF0ZSl7dGhpcy5zZXRJbnZhbGlkTWVzc2FnZShwLnRyYW5zbGF0ZSgpKTt9dmFyIHE9dGhpcy5nZXRSZXF1aXJlZEludmFsaWRNZXNzYWdlKCk7aWYocSYmcS50cmFuc2xhdGUpe3RoaXMuc2V0UmVxdWlyZWRJbnZhbGlkTWVzc2FnZShxLnRyYW5zbGF0ZSgpKTt9fSwib2ZmIjpudWxsfSl9LGRlc3RydWN0OmZ1bmN0aW9uKCl7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KG0saSkpe3F4LmxvY2FsZS5NYW5hZ2VyLmdldEluc3RhbmNlKCkucmVtb3ZlTGlzdGVuZXIoayx0aGlzLl9fZm4sdGhpcyk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBvPSJjaGVja2VkIixuPSJrZXlwcmVzcyIsbT0iQm9vbGVhbiIsbD0iUmlnaHQiLGs9Il9hcHBseVZhbHVlIixqPSJjaGFuZ2VWYWx1ZSIsaT0icXgudWkuZm9ybS5SYWRpb0J1dHRvbiIsaD0icmFkaW9idXR0b24iLGc9IkxlZnQiLGY9InF4LnVpLmZvcm0uUmFkaW9Hcm91cCIsYj0iRG93biIsZD0iX2FwcGx5R3JvdXAiLGM9IlVwIixhPSJleGVjdXRlIjtxeC5DbGFzcy5kZWZpbmUoaSx7ZXh0ZW5kOnF4LnVpLmZvcm0uQnV0dG9uLGluY2x1ZGU6W3F4LnVpLmZvcm0uTUZvcm0scXgudWkuZm9ybS5NTW9kZWxQcm9wZXJ0eV0saW1wbGVtZW50OltxeC51aS5mb3JtLklSYWRpb0l0ZW0scXgudWkuZm9ybS5JRm9ybSxxeC51aS5mb3JtLklCb29sZWFuRm9ybSxxeC51aS5mb3JtLklNb2RlbF0sY29uc3RydWN0OmZ1bmN0aW9uKHApe3t9O3F4LnVpLmZvcm0uQnV0dG9uLmNhbGwodGhpcyxwKTt0aGlzLmFkZExpc3RlbmVyKGEsdGhpcy5fb25FeGVjdXRlKTt0aGlzLmFkZExpc3RlbmVyKG4sdGhpcy5fb25LZXlQcmVzcyk7fSxwcm9wZXJ0aWVzOntncm91cDp7Y2hlY2s6ZixudWxsYWJsZTp0cnVlLGFwcGx5OmR9LHZhbHVlOntjaGVjazptLG51bGxhYmxlOnRydWUsZXZlbnQ6aixhcHBseTprLGluaXQ6ZmFsc2V9LGFwcGVhcmFuY2U6e3JlZmluZTp0cnVlLGluaXQ6aH0sYWxsb3dHcm93WDp7cmVmaW5lOnRydWUsaW5pdDpmYWxzZX19LG1lbWJlcnM6e19hcHBseVZhbHVlOmZ1bmN0aW9uKHEscil7cT90aGlzLmFkZFN0YXRlKG8pOnRoaXMucmVtb3ZlU3RhdGUobyk7aWYocSYmdGhpcy5nZXRGb2N1c2FibGUoKSl7dGhpcy5mb2N1cygpO319LF9hcHBseUdyb3VwOmZ1bmN0aW9uKHMsdCl7aWYodCl7dC5yZW1vdmUodGhpcyk7fWlmKHMpe3MuYWRkKHRoaXMpO319LF9vbkV4ZWN1dGU6ZnVuY3Rpb24oZSl7dGhpcy5zZXRWYWx1ZSh0cnVlKTt9LF9vbktleVByZXNzOmZ1bmN0aW9uKGUpe3ZhciB1PXRoaXMuZ2V0R3JvdXAoKTtpZighdSl7cmV0dXJuO31zd2l0Y2goZS5nZXRLZXlJZGVudGlmaWVyKCkpe2Nhc2UgZzpjYXNlIGM6dS5zZWxlY3RQcmV2aW91cygpO2JyZWFrO2Nhc2UgbDpjYXNlIGI6dS5zZWxlY3ROZXh0KCk7YnJlYWs7fX19fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbz0iY2xvc2UtYnV0dG9uIixuPSJtaWRkbGUiLG09ImxlZnQiLGw9Imljb24iLGs9ImxhYmVsIixqPSJyaWdodCIsaT0iY2xpY2siLGg9IkJvb2xlYW4iLGc9ImJvdHRvbSIsZj0icXgudWkudGFidmlldy5UYWJCdXR0b24iLGM9ImNlbnRlciIsZT0iX2FwcGx5U2hvd0Nsb3NlQnV0dG9uIixkPSJ0b3AiLGI9ImNsb3NlIixhPSJxeC5ldmVudC50eXBlLkRhdGEiO3F4LkNsYXNzLmRlZmluZShmLHtleHRlbmQ6cXgudWkuZm9ybS5SYWRpb0J1dHRvbixpbXBsZW1lbnQ6cXgudWkuZm9ybS5JUmFkaW9JdGVtLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnVpLmZvcm0uUmFkaW9CdXR0b24uY2FsbCh0aGlzKTt2YXIgcD1uZXcgcXgudWkubGF5b3V0LkdyaWQoMiwwKTtwLnNldFJvd0FsaWduKDAsbSxuKTtwLnNldENvbHVtbkFsaWduKDAsaixuKTt0aGlzLl9nZXRMYXlvdXQoKS5kaXNwb3NlKCk7dGhpcy5fc2V0TGF5b3V0KHApO3RoaXMuaW5pdFNob3dDbG9zZUJ1dHRvbigpO30sZXZlbnRzOnsiY2xvc2UiOmF9LHByb3BlcnRpZXM6e3Nob3dDbG9zZUJ1dHRvbjp7Y2hlY2s6aCxpbml0OmZhbHNlLGFwcGx5OmV9fSxtZW1iZXJzOntfZm9yd2FyZFN0YXRlczp7Zm9jdXNlZDp0cnVlLGNoZWNrZWQ6dHJ1ZX0sX2FwcGx5SWNvblBvc2l0aW9uOmZ1bmN0aW9uKHEscil7dmFyIHM9e2ljb246dGhpcy5nZXRDaGlsZENvbnRyb2wobCksbGFiZWw6dGhpcy5nZXRDaGlsZENvbnRyb2woayksY2xvc2VCdXR0b246dGhpcy5nZXRTaG93Q2xvc2VCdXR0b24oKT90aGlzLmdldENoaWxkQ29udHJvbChvKTpudWxsfTtmb3IodmFyIHQgaW4gcyl7aWYoc1t0XSl7dGhpcy5fcmVtb3ZlKHNbdF0pO319c3dpdGNoKHEpe2Nhc2UgZDp0aGlzLl9hZGQocy5sYWJlbCx7cm93OjMsY29sdW1uOjJ9KTt0aGlzLl9hZGQocy5pY29uLHtyb3c6MSxjb2x1bW46Mn0pO2lmKHMuY2xvc2VCdXR0b24pe3RoaXMuX2FkZChzLmNsb3NlQnV0dG9uLHtyb3c6MCxjb2x1bW46NH0pO31icmVhaztjYXNlIGc6dGhpcy5fYWRkKHMubGFiZWwse3JvdzoxLGNvbHVtbjoyfSk7dGhpcy5fYWRkKHMuaWNvbix7cm93OjMsY29sdW1uOjJ9KTtpZihzLmNsb3NlQnV0dG9uKXt0aGlzLl9hZGQocy5jbG9zZUJ1dHRvbix7cm93OjAsY29sdW1uOjR9KTt9YnJlYWs7Y2FzZSBtOnRoaXMuX2FkZChzLmxhYmVsLHtyb3c6MCxjb2x1bW46Mn0pO3RoaXMuX2FkZChzLmljb24se3JvdzowLGNvbHVtbjowfSk7aWYocy5jbG9zZUJ1dHRvbil7dGhpcy5fYWRkKHMuY2xvc2VCdXR0b24se3JvdzowLGNvbHVtbjo0fSk7fWJyZWFrO2Nhc2Ugajp0aGlzLl9hZGQocy5sYWJlbCx7cm93OjAsY29sdW1uOjB9KTt0aGlzLl9hZGQocy5pY29uLHtyb3c6MCxjb2x1bW46Mn0pO2lmKHMuY2xvc2VCdXR0b24pe3RoaXMuX2FkZChzLmNsb3NlQnV0dG9uLHtyb3c6MCxjb2x1bW46NH0pO31icmVhazt9fSxfY3JlYXRlQ2hpbGRDb250cm9sSW1wbDpmdW5jdGlvbih1LHYpe3ZhciB3O3N3aXRjaCh1KXtjYXNlIGs6dmFyIHc9bmV3IHF4LnVpLmJhc2ljLkxhYmVsKHRoaXMuZ2V0TGFiZWwoKSk7dy5zZXRBbm9ueW1vdXModHJ1ZSk7dGhpcy5fYWRkKHcse3JvdzowLGNvbHVtbjoyfSk7dGhpcy5fZ2V0TGF5b3V0KCkuc2V0Q29sdW1uRmxleCgyLDEpO2JyZWFrO2Nhc2UgbDp3PW5ldyBxeC51aS5iYXNpYy5JbWFnZSh0aGlzLmdldEljb24oKSk7dy5zZXRBbm9ueW1vdXModHJ1ZSk7dGhpcy5fYWRkKHcse3JvdzowLGNvbHVtbjowfSk7YnJlYWs7Y2FzZSBvOnc9bmV3IHF4LnVpLmZvcm0uQnV0dG9uKCk7dy5hZGRMaXN0ZW5lcihpLHRoaXMuX29uQ2xvc2VCdXR0b25DbGljayx0aGlzKTt0aGlzLl9hZGQodyx7cm93OjAsY29sdW1uOjR9KTtpZighdGhpcy5nZXRTaG93Q2xvc2VCdXR0b24oKSl7dy5leGNsdWRlKCk7fWJyZWFrO31yZXR1cm4gd3x8cXgudWkuZm9ybS5SYWRpb0J1dHRvbi5wcm90b3R5cGUuX2NyZWF0ZUNoaWxkQ29udHJvbEltcGwuY2FsbCh0aGlzLHUpO30sX29uQ2xvc2VCdXR0b25DbGljazpmdW5jdGlvbigpe3RoaXMuZmlyZURhdGFFdmVudChiLHRoaXMpO30sX2FwcGx5U2hvd0Nsb3NlQnV0dG9uOmZ1bmN0aW9uKHgseSl7aWYoeCl7dGhpcy5fc2hvd0NoaWxkQ29udHJvbChvKTt9ZWxzZXt0aGlzLl9leGNsdWRlQ2hpbGRDb250cm9sKG8pO319LF9hcHBseUNlbnRlcjpmdW5jdGlvbih6KXt2YXIgQT10aGlzLl9nZXRMYXlvdXQoKTtpZih6KXtBLnNldENvbHVtbkFsaWduKDIsYyxuKTt9ZWxzZXtBLnNldENvbHVtbkFsaWduKDIsbSxuKTt9fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBlPSJjaGFuZ2UiLGQ9Il9fbXAiLGM9InF4LmV2ZW50LnR5cGUuRGF0YSIsYj0icXgudWkuZm9ybS5NTW9kZWxTZWxlY3Rpb24iLGE9ImNoYW5nZVNlbGVjdGlvbiI7cXguTWl4aW4uZGVmaW5lKGIse2NvbnN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19tcD1uZXcgcXguZGF0YS5BcnJheSgpO3RoaXMuX19tcC5hZGRMaXN0ZW5lcihlLHRoaXMuX19tcyx0aGlzKTt0aGlzLmFkZExpc3RlbmVyKGEsdGhpcy5fX21yLHRoaXMpO30sZXZlbnRzOntjaGFuZ2VNb2RlbFNlbGVjdGlvbjpjfSxtZW1iZXJzOntfX21wOm51bGwsX19tcTpmYWxzZSxfX21yOmZ1bmN0aW9uKCl7aWYodGhpcy5fX21xKXtyZXR1cm47fXZhciBoPXRoaXMuZ2V0U2VsZWN0aW9uKCk7dmFyIGY9W107Zm9yKHZhciBpPTA7aTxoLmxlbmd0aDtpKyspe3ZhciBrPWhbaV07dmFyIGc9ay5nZXRNb2RlbD9rLmdldE1vZGVsKCk6bnVsbDtpZihnIT09bnVsbCl7Zi5wdXNoKGcpO319aWYoZi5sZW5ndGg9PT1oLmxlbmd0aCl7dGhpcy5zZXRNb2RlbFNlbGVjdGlvbihmKTt9fSxfX21zOmZ1bmN0aW9uKCl7dGhpcy5fX21xPXRydWU7dmFyIG09dGhpcy5nZXRTZWxlY3RhYmxlcyh0cnVlKTt2YXIgbz1bXTt2YXIgbj10aGlzLl9fbXAudG9BcnJheSgpO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgcT1uW2ldO2Zvcih2YXIgaj0wO2o8bS5sZW5ndGg7aisrKXt2YXIgcj1tW2pdO3ZhciBsPXIuZ2V0TW9kZWw/ci5nZXRNb2RlbCgpOm51bGw7aWYocT09PWwpe28ucHVzaChyKTticmVhazt9fX10aGlzLnNldFNlbGVjdGlvbihvKTt0aGlzLl9fbXE9ZmFsc2U7dmFyIHA9dGhpcy5nZXRTZWxlY3Rpb24oKTtpZighcXgubGFuZy5BcnJheS5lcXVhbHMocCxvKSl7dGhpcy5fX21yKCk7fX0sZ2V0TW9kZWxTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX21wO30sc2V0TW9kZWxTZWxlY3Rpb246ZnVuY3Rpb24ocyl7aWYoIXMpe3RoaXMuX19tcC5yZW1vdmVBbGwoKTtyZXR1cm47fXt9O3MudW5zaGlmdCh0aGlzLl9fbXAuZ2V0TGVuZ3RoKCkpO3MudW5zaGlmdCgwKTt2YXIgdD10aGlzLl9fbXAuc3BsaWNlLmFwcGx5KHRoaXMuX19tcCxzKTt0LmRpc3Bvc2UoKTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX2Rpc3Bvc2VPYmplY3RzKGQpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC51aS5mb3JtLklNb2RlbFNlbGVjdGlvbiI7cXguSW50ZXJmYWNlLmRlZmluZShhLHttZW1iZXJzOntzZXRNb2RlbFNlbGVjdGlvbjpmdW5jdGlvbihiKXt9LGdldE1vZGVsU2VsZWN0aW9uOmZ1bmN0aW9uKCl7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJxeC51aS5jb3JlLklTaW5nbGVTZWxlY3Rpb24iLGE9InF4LmV2ZW50LnR5cGUuRGF0YSI7cXguSW50ZXJmYWNlLmRlZmluZShiLHtldmVudHM6eyJjaGFuZ2VTZWxlY3Rpb24iOmF9LG1lbWJlcnM6e2dldFNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0cnVlO30sc2V0U2VsZWN0aW9uOmZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT0xO30scmVzZXRTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9LGlzU2VsZWN0ZWQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PTE7fSxpc1NlbGVjdGlvbkVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRydWU7fSxnZXRTZWxlY3RhYmxlczpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09MTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGY9InF4LnVpLmNvcmUuTVNpbmdsZVNlbGVjdGlvbkhhbmRsaW5nIixkPSJfX215IixjPSJjaGFuZ2VTZWxlY3Rpb24iLGI9ImNoYW5nZVNlbGVjdGVkIixhPSJxeC5ldmVudC50eXBlLkRhdGEiO3F4Lk1peGluLmRlZmluZShmLHtldmVudHM6eyJjaGFuZ2VTZWxlY3Rpb24iOmF9LG1lbWJlcnM6e19fbXk6bnVsbCxnZXRTZWxlY3Rpb246ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9fbXooKS5nZXRTZWxlY3RlZCgpO2lmKGcpe3JldHVybiBbZ107fWVsc2V7cmV0dXJuIFtdO319LHNldFNlbGVjdGlvbjpmdW5jdGlvbihoKXtzd2l0Y2goaC5sZW5ndGgpe2Nhc2UgMDp0aGlzLnJlc2V0U2VsZWN0aW9uKCk7YnJlYWs7Y2FzZSAxOnRoaXMuX19teigpLnNldFNlbGVjdGVkKGhbMF0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBvbmx5IHNlbGVjdCBvbmUgaXRlbSwgYnV0IHRoZSBzZWxlY3Rpb24gIisiIGFycmF5IGNvbnRhaW5zICIraC5sZW5ndGgrIiBpdGVtcyEiKTt9fSxyZXNldFNlbGVjdGlvbjpmdW5jdGlvbigpe3RoaXMuX19teigpLnJlc2V0U2VsZWN0ZWQoKTt9LGlzU2VsZWN0ZWQ6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX19teigpLmlzU2VsZWN0ZWQoaSk7fSxpc1NlbGVjdGlvbkVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19teigpLmlzU2VsZWN0aW9uRW1wdHkoKTt9LGdldFNlbGVjdGFibGVzOmZ1bmN0aW9uKGope3JldHVybiB0aGlzLl9fbXooKS5nZXRTZWxlY3RhYmxlcyhqKTt9LF9vbkNoYW5nZVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciBsPWUuZ2V0RGF0YSgpO3ZhciBrPWUuZ2V0T2xkRGF0YSgpO2w9PW51bGw/bD1bXTpsPVtsXTtrPT1udWxsP2s9W106az1ba107dGhpcy5maXJlRGF0YUV2ZW50KGMsbCxrKTt9LF9fbXo6ZnVuY3Rpb24oKXtpZih0aGlzLl9fbXk9PW51bGwpe3ZhciBtPXRoaXM7dGhpcy5fX215PW5ldyBxeC51aS5jb3JlLlNpbmdsZVNlbGVjdGlvbk1hbmFnZXIoe2dldEl0ZW1zOmZ1bmN0aW9uKCl7cmV0dXJuIG0uX2dldEl0ZW1zKCk7fSxpc0l0ZW1TZWxlY3RhYmxlOmZ1bmN0aW9uKG4pe2lmKG0uX2lzSXRlbVNlbGVjdGFibGUpe3JldHVybiBtLl9pc0l0ZW1TZWxlY3RhYmxlKG4pO31lbHNle3JldHVybiBuLmlzVmlzaWJsZSgpO319fSk7dGhpcy5fX215LmFkZExpc3RlbmVyKGIsdGhpcy5fb25DaGFuZ2VTZWxlY3RlZCx0aGlzKTt9dGhpcy5fX215LnNldEFsbG93RW1wdHlTZWxlY3Rpb24odGhpcy5faXNBbGxvd0VtcHR5U2VsZWN0aW9uKCkpO3JldHVybiB0aGlzLl9fbXk7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlT2JqZWN0cyhkKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgcj0iQm9vbGVhbiIscT0iY2hhbmdlSW52YWxpZE1lc3NhZ2UiLHA9ImNoYW5nZVZhbHVlIixvPSJTdHJpbmciLG49Il9hcHBseUFsbG93RW1wdHlTZWxlY3Rpb24iLG09Il9hcHBseUludmFsaWRNZXNzYWdlIixrPSJxeC51aS5mb3JtLlJhZGlvR3JvdXAiLGo9Il9hcHBseVZhbGlkIixoPSIiLGc9ImNoYW5nZVJlcXVpcmVkIixjPSJjaGFuZ2VWYWxpZCIsZj0iY2hhbmdlRW5hYmxlZCIsZD0iX19hIixiPSJjaGFuZ2VTZWxlY3Rpb24iLGE9Il9hcHBseUVuYWJsZWQiO3F4LkNsYXNzLmRlZmluZShrLHtleHRlbmQ6cXguY29yZS5PYmplY3QsaW1wbGVtZW50OltxeC51aS5jb3JlLklTaW5nbGVTZWxlY3Rpb24scXgudWkuZm9ybS5JRm9ybSxxeC51aS5mb3JtLklNb2RlbFNlbGVjdGlvbl0saW5jbHVkZTpbcXgudWkuY29yZS5NU2luZ2xlU2VsZWN0aW9uSGFuZGxpbmcscXgudWkuZm9ybS5NTW9kZWxTZWxlY3Rpb25dLGNvbnN0cnVjdDpmdW5jdGlvbihzKXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3RoaXMuX19hPVtdO3RoaXMuYWRkTGlzdGVuZXIoYix0aGlzLl9fYix0aGlzKTtpZihzIT1udWxsKXt0aGlzLmFkZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fX0scHJvcGVydGllczp7ZW5hYmxlZDp7Y2hlY2s6cixhcHBseTphLGV2ZW50OmYsaW5pdDp0cnVlfSx3cmFwOntjaGVjazpyLGluaXQ6dHJ1ZX0sYWxsb3dFbXB0eVNlbGVjdGlvbjp7Y2hlY2s6cixpbml0OmZhbHNlLGFwcGx5Om59LHZhbGlkOntjaGVjazpyLGluaXQ6dHJ1ZSxhcHBseTpqLGV2ZW50OmN9LHJlcXVpcmVkOntjaGVjazpyLGluaXQ6ZmFsc2UsZXZlbnQ6Z30saW52YWxpZE1lc3NhZ2U6e2NoZWNrOm8saW5pdDpoLGV2ZW50OnEsYXBwbHk6bX0scmVxdWlyZWRJbnZhbGlkTWVzc2FnZTp7Y2hlY2s6byxudWxsYWJsZTp0cnVlLGV2ZW50OnF9fSxtZW1iZXJzOntfX2E6bnVsbCxnZXRJdGVtczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fYTt9LGFkZDpmdW5jdGlvbih0KXt2YXIgdT10aGlzLl9fYTt2YXIgdjtmb3IodmFyIGk9MCxsPWFyZ3VtZW50cy5sZW5ndGg7aTxsO2krKyl7dj1hcmd1bWVudHNbaV07aWYocXgubGFuZy5BcnJheS5jb250YWlucyh1LHYpKXtjb250aW51ZTt9di5hZGRMaXN0ZW5lcihwLHRoaXMuX29uSXRlbUNoYW5nZUNoZWNrZWQsdGhpcyk7dS5wdXNoKHYpO3Yuc2V0R3JvdXAodGhpcyk7aWYodi5nZXRWYWx1ZSgpKXt0aGlzLnNldFNlbGVjdGlvbihbdl0pO319aWYoIXRoaXMuaXNBbGxvd0VtcHR5U2VsZWN0aW9uKCkmJnUubGVuZ3RoPjAmJiF0aGlzLmdldFNlbGVjdGlvbigpWzBdKXt0aGlzLnNldFNlbGVjdGlvbihbdVswXV0pO319LHJlbW92ZTpmdW5jdGlvbih3KXt2YXIgeD10aGlzLl9fYTtpZihxeC5sYW5nLkFycmF5LmNvbnRhaW5zKHgsdykpe3F4LmxhbmcuQXJyYXkucmVtb3ZlKHgsdyk7aWYody5nZXRHcm91cCgpPT09dGhpcyl7dy5yZXNldEdyb3VwKCk7fXcucmVtb3ZlTGlzdGVuZXIocCx0aGlzLl9vbkl0ZW1DaGFuZ2VDaGVja2VkLHRoaXMpO2lmKHcuZ2V0VmFsdWUoKSl7dGhpcy5yZXNldFNlbGVjdGlvbigpO319fSxnZXRDaGlsZHJlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fYTt9LF9vbkl0ZW1DaGFuZ2VDaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB5PWUuZ2V0VGFyZ2V0KCk7aWYoeS5nZXRWYWx1ZSgpKXt0aGlzLnNldFNlbGVjdGlvbihbeV0pO31lbHNlIGlmKHRoaXMuZ2V0U2VsZWN0aW9uKClbMF09PXkpe3RoaXMucmVzZXRTZWxlY3Rpb24oKTt9fSxfYXBwbHlJbnZhbGlkTWVzc2FnZTpmdW5jdGlvbih6LEEpe2Zvcih2YXIgaT0wO2k8dGhpcy5fX2EubGVuZ3RoO2krKyl7dGhpcy5fX2FbaV0uc2V0SW52YWxpZE1lc3NhZ2Uoeik7fX0sX2FwcGx5VmFsaWQ6ZnVuY3Rpb24oQixDKXtmb3IodmFyIGk9MDtpPHRoaXMuX19hLmxlbmd0aDtpKyspe3RoaXMuX19hW2ldLnNldFZhbGlkKEIpO319LF9hcHBseUVuYWJsZWQ6ZnVuY3Rpb24oRCxFKXt2YXIgRj10aGlzLl9fYTtpZihEPT1udWxsKXtmb3IodmFyIGk9MCxsPUYubGVuZ3RoO2k8bDtpKyspe0ZbaV0ucmVzZXRFbmFibGVkKCk7fX1lbHNle2Zvcih2YXIgaT0wLGw9Ri5sZW5ndGg7aTxsO2krKyl7RltpXS5zZXRFbmFibGVkKEQpO319fSxfYXBwbHlBbGxvd0VtcHR5U2VsZWN0aW9uOmZ1bmN0aW9uKEcsSCl7aWYoIUcmJnRoaXMuaXNTZWxlY3Rpb25FbXB0eSgpKXt0aGlzLnJlc2V0U2VsZWN0aW9uKCk7fX0sc2VsZWN0TmV4dDpmdW5jdGlvbigpe3ZhciBJPXRoaXMuZ2V0U2VsZWN0aW9uKClbMF07dmFyIEs9dGhpcy5fX2E7dmFyIEo9Sy5pbmRleE9mKEkpO2lmKEo9PS0xKXtyZXR1cm47fXZhciBpPTA7dmFyIGxlbmd0aD1LLmxlbmd0aDtpZih0aGlzLmdldFdyYXAoKSl7Sj0oSisxKSVsZW5ndGg7fWVsc2V7Sj1NYXRoLm1pbihKKzEsbGVuZ3RoLTEpO313aGlsZShpPGxlbmd0aCYmIUtbSl0uZ2V0RW5hYmxlZCgpKXtKPShKKzEpJWxlbmd0aDtpKys7fXRoaXMuc2V0U2VsZWN0aW9uKFtLW0pdXSk7fSxzZWxlY3RQcmV2aW91czpmdW5jdGlvbigpe3ZhciBMPXRoaXMuZ2V0U2VsZWN0aW9uKClbMF07dmFyIE49dGhpcy5fX2E7dmFyIE09Ti5pbmRleE9mKEwpO2lmKE09PS0xKXtyZXR1cm47fXZhciBpPTA7dmFyIGxlbmd0aD1OLmxlbmd0aDtpZih0aGlzLmdldFdyYXAoKSl7TT0oTS0xK2xlbmd0aCklbGVuZ3RoO31lbHNle009TWF0aC5tYXgoTS0xLDApO313aGlsZShpPGxlbmd0aCYmIU5bTV0uZ2V0RW5hYmxlZCgpKXtNPShNLTErbGVuZ3RoKSVsZW5ndGg7aSsrO310aGlzLnNldFNlbGVjdGlvbihbTltNXV0pO30sX2dldEl0ZW1zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0SXRlbXMoKTt9LF9pc0FsbG93RW1wdHlTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0FsbG93RW1wdHlTZWxlY3Rpb24oKTt9LF9fYjpmdW5jdGlvbihlKXt2YXIgUD1lLmdldERhdGEoKVswXTt2YXIgTz1lLmdldE9sZERhdGEoKVswXTtpZihPKXtPLnNldFZhbHVlKGZhbHNlKTt9aWYoUCl7UC5zZXRWYWx1ZSh0cnVlKTt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlQXJyYXkoZCk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGg9IlsiLGc9Il0iLGY9Ii4iLGQ9ImlkQnViYmxlIixjPSJjaGFuZ2VCdWJibGUiLGI9InF4LmRhdGEubWFyc2hhbC5NRXZlbnRCdWJibGluZyIsYT0icXguZXZlbnQudHlwZS5EYXRhIjtxeC5NaXhpbi5kZWZpbmUoYix7ZXZlbnRzOnsiY2hhbmdlQnViYmxlIjphfSxtZW1iZXJzOntfYXBwbHlFdmVudFByb3BhZ2F0aW9uOmZ1bmN0aW9uKGksaixuYW1lKXt0aGlzLmZpcmVEYXRhRXZlbnQoYyx7dmFsdWU6aSxuYW1lOm5hbWUsb2xkOmp9KTt0aGlzLl9yZWdpc3RlckV2ZW50Q2hhaW5pbmcoaSxqLG5hbWUpO30sX3JlZ2lzdGVyRXZlbnRDaGFpbmluZzpmdW5jdGlvbihrLGwsbmFtZSl7aWYoKGsgaW5zdGFuY2VvZiBxeC5jb3JlLk9iamVjdCkmJnF4LkNsYXNzLmhhc01peGluKGsuY29uc3RydWN0b3IscXguZGF0YS5tYXJzaGFsLk1FdmVudEJ1YmJsaW5nKSl7dmFyIG09cXgubGFuZy5GdW5jdGlvbi5iaW5kKHRoaXMuX19tQSx0aGlzLG5hbWUpO3ZhciBuPWsuYWRkTGlzdGVuZXIoYyxtLHRoaXMpO2suc2V0VXNlckRhdGEoZCxuKTt9aWYobCE9bnVsbCYmbC5nZXRVc2VyRGF0YSYmbC5nZXRVc2VyRGF0YShkKSE9bnVsbCl7bC5yZW1vdmVMaXN0ZW5lckJ5SWQobC5nZXRVc2VyRGF0YShkKSk7fX0sX19tQTpmdW5jdGlvbihuYW1lLGUpe3ZhciB2PWUuZ2V0RGF0YSgpO3ZhciByPXYudmFsdWU7dmFyIHA9di5vbGQ7aWYocXguQ2xhc3MuaGFzSW50ZXJmYWNlKGUuZ2V0VGFyZ2V0KCkuY29uc3RydWN0b3IscXguZGF0YS5JTGlzdERhdGEpKXtpZih2Lm5hbWUuaW5kZXhPZil7dmFyIHU9di5uYW1lLmluZGV4T2YoZikhPS0xP3YubmFtZS5pbmRleE9mKGYpOnYubmFtZS5sZW5ndGg7dmFyIHM9di5uYW1lLmluZGV4T2YoaCkhPS0xP3YubmFtZS5pbmRleE9mKGgpOnYubmFtZS5sZW5ndGg7aWYodTxzKXt2YXIgbz12Lm5hbWUuc3Vic3RyaW5nKDAsdSk7dmFyIHQ9di5uYW1lLnN1YnN0cmluZyh1KzEsdi5uYW1lLmxlbmd0aCk7aWYodFswXSE9aCl7dD1mK3Q7fXZhciBxPW5hbWUraCtvK2crdDt9ZWxzZSBpZihzPHUpe3ZhciBvPXYubmFtZS5zdWJzdHJpbmcoMCxzKTt2YXIgdD12Lm5hbWUuc3Vic3RyaW5nKHMsdi5uYW1lLmxlbmd0aCk7dmFyIHE9bmFtZStoK28rZyt0O31lbHNle3ZhciBxPW5hbWUraCt2Lm5hbWUrZzt9fWVsc2V7dmFyIHE9bmFtZStoK3YubmFtZStnO319ZWxzZXt2YXIgcT1uYW1lK2Yrdi5uYW1lO310aGlzLmZpcmVEYXRhRXZlbnQoYyx7dmFsdWU6cixuYW1lOnEsb2xkOnB9KTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGw9ImNoYW5nZSIsaz0iYWRkIixqPSJyZW1vdmUiLGg9Im9yZGVyIixnPSJxeC5ldmVudC50eXBlLkRhdGEiLGY9IiIsZT0icXguZGF0YS5BcnJheSIsZD0iPyIsYz0iY2hhbmdlQnViYmxlIixiPSJudW1iZXIiLGE9ImNoYW5nZUxlbmd0aCI7cXguQ2xhc3MuZGVmaW5lKGUse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbmNsdWRlOnF4LmRhdGEubWFyc2hhbC5NRXZlbnRCdWJibGluZyxpbXBsZW1lbnQ6W3F4LmRhdGEuSUxpc3REYXRhXSxjb25zdHJ1Y3Q6ZnVuY3Rpb24obSl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTtpZihtPT11bmRlZmluZWQpe3RoaXMuX19tbT1bXTt9ZWxzZSBpZihhcmd1bWVudHMubGVuZ3RoPjEpe3RoaXMuX19tbT1bXTtmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt0aGlzLl9fbW0ucHVzaChhcmd1bWVudHNbaV0pO319ZWxzZSBpZih0eXBlb2YgbT09Yil7dGhpcy5fX21tPW5ldyBBcnJheShtKTt9ZWxzZSBpZihtIGluc3RhbmNlb2YgQXJyYXkpe3RoaXMuX19tbT1xeC5sYW5nLkFycmF5LmNsb25lKG0pO31lbHNle3RoaXMuX19tbT1bXTt0aHJvdyBuZXcgRXJyb3IoIlR5cGUgb2YgdGhlIHBhcmFtZXRlciBub3Qgc3VwcG9ydGVkISIpO31mb3IodmFyIGk9MDtpPHRoaXMuX19tbS5sZW5ndGg7aSsrKXt0aGlzLl9hcHBseUV2ZW50UHJvcGFnYXRpb24odGhpcy5fX21tW2ldLG51bGwsaSk7fXRoaXMuX19tbigpO30sZXZlbnRzOnsiY2hhbmdlIjpnLCJjaGFuZ2VMZW5ndGgiOmd9LG1lbWJlcnM6e19fbW06bnVsbCxjb25jYXQ6ZnVuY3Rpb24obil7aWYobil7dmFyIG89dGhpcy5fX21tLmNvbmNhdChuKTt9ZWxzZXt2YXIgbz10aGlzLl9fbW0uY29uY2F0KCk7fXJldHVybiBuZXcgcXguZGF0YS5BcnJheShvKTt9LGpvaW46ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuX19tbS5qb2luKHApO30scG9wOmZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5fX21tLnBvcCgpO3RoaXMuX19tbigpO3RoaXMuX2FwcGx5RXZlbnRQcm9wYWdhdGlvbihudWxsLHEsdGhpcy5sZW5ndGgtMSk7dGhpcy5maXJlRGF0YUV2ZW50KGwse3N0YXJ0OnRoaXMubGVuZ3RoLTEsZW5kOnRoaXMubGVuZ3RoLTEsdHlwZTpqLGl0ZW1zOltxXX0sbnVsbCk7cmV0dXJuIHE7fSxwdXNoOmZ1bmN0aW9uKHIpe2Zvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3RoaXMuX19tbS5wdXNoKGFyZ3VtZW50c1tpXSk7dGhpcy5fX21uKCk7dGhpcy5fYXBwbHlFdmVudFByb3BhZ2F0aW9uKGFyZ3VtZW50c1tpXSxudWxsLHRoaXMubGVuZ3RoLTEpO3RoaXMuZmlyZURhdGFFdmVudChsLHtzdGFydDp0aGlzLmxlbmd0aC0xLGVuZDp0aGlzLmxlbmd0aC0xLHR5cGU6ayxpdGVtczpbYXJndW1lbnRzW2ldXX0sbnVsbCk7fXJldHVybiB0aGlzLmxlbmd0aDt9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLl9fbW0ucmV2ZXJzZSgpO3RoaXMuZmlyZURhdGFFdmVudChsLHtzdGFydDowLGVuZDp0aGlzLmxlbmd0aC0xLHR5cGU6aCxpdGVtczpudWxsfSxudWxsKTt9LHNoaWZ0OmZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5fX21tLnNoaWZ0KCk7dGhpcy5fX21uKCk7dGhpcy5fYXBwbHlFdmVudFByb3BhZ2F0aW9uKG51bGwscyx0aGlzLmxlbmd0aC0xKTt0aGlzLmZpcmVEYXRhRXZlbnQobCx7c3RhcnQ6MCxlbmQ6dGhpcy5sZW5ndGgtMSx0eXBlOmosaXRlbXM6W3NdfSxudWxsKTtyZXR1cm4gczt9LHNsaWNlOmZ1bmN0aW9uKHQsdSl7cmV0dXJuIG5ldyBxeC5kYXRhLkFycmF5KHRoaXMuX19tbS5zbGljZSh0LHUpKTt9LHNwbGljZTpmdW5jdGlvbih2LHcseCl7dmFyIEQ9dGhpcy5fX21tLmxlbmd0aDt2YXIgQT10aGlzLl9fbW0uc3BsaWNlLmFwcGx5KHRoaXMuX19tbSxhcmd1bWVudHMpO2lmKHRoaXMuX19tbS5sZW5ndGghPUQpe3RoaXMuX19tbigpO312YXIgQj13PjA7dmFyIHk9YXJndW1lbnRzLmxlbmd0aD4yO3ZhciB6PW51bGw7aWYoQnx8eSl7aWYodGhpcy5fX21tLmxlbmd0aD5EKXt2YXIgQz1rO31lbHNlIGlmKHRoaXMuX19tbS5sZW5ndGg8RCl7dmFyIEM9ajt6PUE7fWVsc2V7dmFyIEM9aDt9dGhpcy5maXJlRGF0YUV2ZW50KGwse3N0YXJ0OnYsZW5kOnRoaXMubGVuZ3RoLTEsdHlwZTpDLGl0ZW1zOnp9LG51bGwpO31mb3IodmFyIGk9MjtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt0aGlzLl9yZWdpc3RlckV2ZW50Q2hhaW5pbmcoYXJndW1lbnRzW2ldLG51bGwsditpKTt9dGhpcy5maXJlRGF0YUV2ZW50KGMse3ZhbHVlOnRoaXMsbmFtZTpkLG9sZDpBfSk7Zm9yKHZhciBpPTA7aTxBLmxlbmd0aDtpKyspe3RoaXMuX2FwcGx5RXZlbnRQcm9wYWdhdGlvbihudWxsLEFbaV0saSk7fXJldHVybiAobmV3IHF4LmRhdGEuQXJyYXkoQSkpO30sc29ydDpmdW5jdGlvbihFKXt0aGlzLl9fbW0uc29ydC5hcHBseSh0aGlzLl9fbW0sYXJndW1lbnRzKTt0aGlzLmZpcmVEYXRhRXZlbnQobCx7c3RhcnQ6MCxlbmQ6dGhpcy5sZW5ndGgtMSx0eXBlOmgsaXRlbXM6bnVsbH0sbnVsbCk7fSx1bnNoaWZ0OmZ1bmN0aW9uKEYpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLTE7aT49MDtpLS0pe3RoaXMuX19tbS51bnNoaWZ0KGFyZ3VtZW50c1tpXSk7dGhpcy5fX21uKCk7dGhpcy5fYXBwbHlFdmVudFByb3BhZ2F0aW9uKGFyZ3VtZW50c1tpXSxudWxsLDApO3RoaXMuZmlyZURhdGFFdmVudChsLHtzdGFydDowLGVuZDp0aGlzLmxlbmd0aC0xLHR5cGU6ayxpdGVtczpbYXJndW1lbnRzW2ldXX0sbnVsbCk7fXJldHVybiB0aGlzLmxlbmd0aDt9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX21tO30sZ2V0SXRlbTpmdW5jdGlvbihHKXtyZXR1cm4gdGhpcy5fX21tW0ddO30sc2V0SXRlbTpmdW5jdGlvbihILEkpe3ZhciBKPXRoaXMuX19tbVtIXTtpZihKPT09SSl7cmV0dXJuO310aGlzLl9fbW1bSF09STt0aGlzLl9hcHBseUV2ZW50UHJvcGFnYXRpb24oSSxKLEgpO2lmKHRoaXMubGVuZ3RoIT10aGlzLl9fbW0ubGVuZ3RoKXt0aGlzLl9fbW4oKTt9dGhpcy5maXJlRGF0YUV2ZW50KGwse3N0YXJ0OkgsZW5kOkgsdHlwZTprLGl0ZW1zOltJXX0sbnVsbCk7fSxnZXRMZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg7fSxpbmRleE9mOmZ1bmN0aW9uKEspe3JldHVybiB0aGlzLl9fbW0uaW5kZXhPZihLKTt9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7aWYodGhpcy5fX21tIT1udWxsKXtyZXR1cm4gdGhpcy5fX21tLnRvU3RyaW5nKCk7fXJldHVybiBmO30sY29udGFpbnM6ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuX19tbS5pbmRleE9mKEwpIT09LTE7fSxjb3B5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uY2F0KCk7fSxpbnNlcnRBdDpmdW5jdGlvbihNLE4pe3RoaXMuc3BsaWNlKE0sMCxOKTt9LGluc2VydEJlZm9yZTpmdW5jdGlvbihPLFApe3ZhciBRPXRoaXMuaW5kZXhPZihPKTtpZihRPT0tMSl7dGhpcy5wdXNoKFApO31lbHNle3RoaXMuc3BsaWNlKFEsMCxQKTt9fSxpbnNlcnRBZnRlcjpmdW5jdGlvbihSLFMpe3ZhciBUPXRoaXMuaW5kZXhPZihSKTtpZihUPT0tMXx8VD09KHRoaXMubGVuZ3RoLTEpKXt0aGlzLnB1c2goUyk7fWVsc2V7dGhpcy5zcGxpY2UoVCsxLDAsUyk7fX0scmVtb3ZlQXQ6ZnVuY3Rpb24oVSl7cmV0dXJuIHRoaXMuc3BsaWNlKFUsMSkuZ2V0SXRlbSgwKTt9LHJlbW92ZUFsbDpmdW5jdGlvbigpe2Zvcih2YXIgaT0wO2k8dGhpcy5fX21tLmxlbmd0aDtpKyspe3RoaXMuX2FwcGx5RXZlbnRQcm9wYWdhdGlvbihudWxsLHRoaXMuX19tbVtpXSxpKTt9dmFyIFc9dGhpcy5nZXRMZW5ndGgoKTt2YXIgVj10aGlzLl9fbW0uY29uY2F0KCk7dGhpcy5fX21tLmxlbmd0aD0wO3RoaXMuX19tbigpO3RoaXMuZmlyZURhdGFFdmVudChsLHtzdGFydDowLGVuZDpXLTEsdHlwZTpqLGl0ZW1zOlZ9LG51bGwpO30sYXBwZW5kOmZ1bmN0aW9uKFgpe2lmKFggaW5zdGFuY2VvZiBxeC5kYXRhLkFycmF5KXtYPVgudG9BcnJheSgpO317fTtmb3IodmFyIGk9MDtpPFgubGVuZ3RoO2krKyl7dGhpcy5fYXBwbHlFdmVudFByb3BhZ2F0aW9uKFhbaV0sbnVsbCx0aGlzLl9fbW0ubGVuZ3RoK2kpO31BcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLl9fbW0sWCk7dmFyIFk9dGhpcy5sZW5ndGg7dGhpcy5fX21uKCk7dGhpcy5maXJlRGF0YUV2ZW50KGwse3N0YXJ0OlksZW5kOnRoaXMubGVuZ3RoLTEsdHlwZTprLGl0ZW1zOlh9LG51bGwpO30scmVtb3ZlOmZ1bmN0aW9uKGJhKXt2YXIgYmI9dGhpcy5pbmRleE9mKGJhKTtpZihiYiE9LTEpe3RoaXMuc3BsaWNlKGJiLDEpO3JldHVybiBiYTt9fSxlcXVhbHM6ZnVuY3Rpb24oYmMpe2lmKHRoaXMubGVuZ3RoIT09YmMubGVuZ3RoKXtyZXR1cm4gZmFsc2U7fWZvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXtpZih0aGlzLmdldEl0ZW0oaSkhPT1iYy5nZXRJdGVtKGkpKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTt9LHN1bTpmdW5jdGlvbigpe3ZhciBiZD0wO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXtiZCs9dGhpcy5nZXRJdGVtKGkpO31yZXR1cm4gYmQ7fSxtYXg6ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5nZXRJdGVtKDApO2Zvcih2YXIgaT0xO2k8dGhpcy5sZW5ndGg7aSsrKXtpZih0aGlzLmdldEl0ZW0oaSk+YmUpe2JlPXRoaXMuZ2V0SXRlbShpKTt9fXJldHVybiBiZT09PXVuZGVmaW5lZD9udWxsOmJlO30sbWluOmZ1bmN0aW9uKCl7dmFyIGJmPXRoaXMuZ2V0SXRlbSgwKTtmb3IodmFyIGk9MTtpPHRoaXMubGVuZ3RoO2krKyl7aWYodGhpcy5nZXRJdGVtKGkpPGJmKXtiZj10aGlzLmdldEl0ZW0oaSk7fX1yZXR1cm4gYmY9PT11bmRlZmluZWQ/bnVsbDpiZjt9LGZvckVhY2g6ZnVuY3Rpb24oYmcsYmgpe2Zvcih2YXIgaT0wO2k8dGhpcy5fX21tLmxlbmd0aDtpKyspe2JnLmNhbGwoYmgsdGhpcy5fX21tW2ldKTt9fSxfX21uOmZ1bmN0aW9uKCl7dmFyIGJpPXRoaXMubGVuZ3RoO3RoaXMubGVuZ3RoPXRoaXMuX19tbS5sZW5ndGg7dGhpcy5maXJlRGF0YUV2ZW50KGEsdGhpcy5sZW5ndGgsYmkpO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7Zm9yKHZhciBpPTA7aTx0aGlzLl9fbW0ubGVuZ3RoO2krKyl7dGhpcy5fYXBwbHlFdmVudFByb3BhZ2F0aW9uKG51bGwsdGhpcy5fX21tW2ldLGkpO310aGlzLl9fbW09bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZz0iQm9vbGVhbiIsZj0icXgudWkuY29yZS5TaW5nbGVTZWxlY3Rpb25NYW5hZ2VyIixlPSJfX212IixkPSJfX210IixjPSJfX211IixiPSJjaGFuZ2VTZWxlY3RlZCIsYT0icXguZXZlbnQudHlwZS5EYXRhIjtxeC5DbGFzcy5kZWZpbmUoZix7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbihoKXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3t9O3RoaXMuX19tdD1oO30sZXZlbnRzOnsiY2hhbmdlU2VsZWN0ZWQiOmF9LHByb3BlcnRpZXM6e2FsbG93RW1wdHlTZWxlY3Rpb246e2NoZWNrOmcsaW5pdDp0cnVlLGFwcGx5OmV9fSxtZW1iZXJzOntfX211Om51bGwsX19tdDpudWxsLGdldFNlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19tdTt9LHNldFNlbGVjdGVkOmZ1bmN0aW9uKGope2lmKCF0aGlzLl9fbXgoaikpe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHNlbGVjdCAiK2orIiwgYmVjYXVzZSBpdCBpcyBub3QgYSBjaGlsZCBlbGVtZW50ISIpO310aGlzLl9fbXcoaik7fSxyZXNldFNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5fX213KG51bGwpO30saXNTZWxlY3RlZDpmdW5jdGlvbihrKXtpZighdGhpcy5fX214KGspKXt0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBjaGVjayBpZiAiK2srIiBpcyBzZWxlY3RlZCwiKyIgYmVjYXVzZSBpdCBpcyBub3QgYSBjaGlsZCBlbGVtZW50ISIpO31yZXR1cm4gdGhpcy5fX211PT09azt9LGlzU2VsZWN0aW9uRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX211PT1udWxsO30sZ2V0U2VsZWN0YWJsZXM6ZnVuY3Rpb24obCl7dmFyIG09dGhpcy5fX210LmdldEl0ZW1zKCk7dmFyIG49W107Zm9yKHZhciBpPTA7aTxtLmxlbmd0aDtpKyspe2lmKHRoaXMuX19tdC5pc0l0ZW1TZWxlY3RhYmxlKG1baV0pKXtuLnB1c2gobVtpXSk7fX1pZighbCl7Zm9yKHZhciBpPW4ubGVuZ3RoLTE7aT49MDtpLS0pe2lmKCFuW2ldLmdldEVuYWJsZWQoKSl7bi5zcGxpY2UoaSwxKTt9fX1yZXR1cm4gbjt9LF9fbXY6ZnVuY3Rpb24obyxwKXtpZighbyl7dGhpcy5fX213KHRoaXMuX19tdSk7fX0sX19tdzpmdW5jdGlvbihxKXt2YXIgdD10aGlzLl9fbXU7dmFyIHM9cTtpZihzIT1udWxsJiZ0PT09cyl7cmV0dXJuO31pZighdGhpcy5pc0FsbG93RW1wdHlTZWxlY3Rpb24oKSYmcz09bnVsbCl7dmFyIHI9dGhpcy5nZXRTZWxlY3RhYmxlcyh0cnVlKVswXTtpZihyKXtzPXI7fX10aGlzLl9fbXU9czt0aGlzLmZpcmVEYXRhRXZlbnQoYixzLHQpO30sX19teDpmdW5jdGlvbih1KXt2YXIgdj10aGlzLl9fbXQuZ2V0SXRlbXMoKTtmb3IodmFyIGk9MDtpPHYubGVuZ3RoO2krKyl7aWYodltpXT09PXUpe3JldHVybiB0cnVlO319cmV0dXJuIGZhbHNlO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5fX210LnRvSGFzaENvZGUpe3RoaXMuX2Rpc3Bvc2VPYmplY3RzKGQpO31lbHNle3RoaXMuX19tdD1udWxsO310aGlzLl9kaXNwb3NlT2JqZWN0cyhjKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0iYWJzdHJhY3QiLGE9InF4LnVpLmxheW91dC5BYnN0cmFjdCI7cXguQ2xhc3MuZGVmaW5lKGEse3R5cGU6YixleHRlbmQ6cXguY29yZS5PYmplY3QsbWVtYmVyczp7X19nejpudWxsLF9pbnZhbGlkQ2hpbGRyZW5DYWNoZTpudWxsLF9fZ0E6bnVsbCxpbnZhbGlkYXRlTGF5b3V0Q2FjaGU6ZnVuY3Rpb24oKXt0aGlzLl9fZ3o9bnVsbDt9LHJlbmRlckxheW91dDpmdW5jdGlvbihjLGQpe3RoaXMud2FybigiTWlzc2luZyByZW5kZXJMYXlvdXQoKSBpbXBsZW1lbnRhdGlvbiEiKTt9LGdldFNpemVIaW50OmZ1bmN0aW9uKCl7aWYodGhpcy5fX2d6KXtyZXR1cm4gdGhpcy5fX2d6O31yZXR1cm4gdGhpcy5fX2d6PXRoaXMuX2NvbXB1dGVTaXplSGludCgpO30saGFzSGVpZ2h0Rm9yV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fSxnZXRIZWlnaHRGb3JXaWR0aDpmdW5jdGlvbihlKXt0aGlzLndhcm4oIk1pc3NpbmcgZ2V0SGVpZ2h0Rm9yV2lkdGgoKSBpbXBsZW1lbnRhdGlvbiEiKTtyZXR1cm4gbnVsbDt9LF9jb21wdXRlU2l6ZUhpbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbDt9LGludmFsaWRhdGVDaGlsZHJlbkNhY2hlOmZ1bmN0aW9uKCl7dGhpcy5faW52YWxpZENoaWxkcmVuQ2FjaGU9dHJ1ZTt9LHZlcmlmeUxheW91dFByb3BlcnR5Om51bGwsX2NsZWFyU2VwYXJhdG9yczpmdW5jdGlvbigpe3ZhciBmPXRoaXMuX19nQTtpZihmIGluc3RhbmNlb2YgcXgudWkuY29yZS5MYXlvdXRJdGVtKXtmLmNsZWFyU2VwYXJhdG9ycygpO319LF9yZW5kZXJTZXBhcmF0b3I6ZnVuY3Rpb24oZyxoKXt0aGlzLl9fZ0EucmVuZGVyU2VwYXJhdG9yKGcsaCk7fSxjb25uZWN0VG9XaWRnZXQ6ZnVuY3Rpb24oaSl7aWYoaSYmdGhpcy5fX2dBKXt0aHJvdyBuZXcgRXJyb3IoIkl0IGlzIG5vdCBwb3NzaWJsZSB0byBtYW51YWxseSBzZXQgdGhlIGNvbm5lY3RlZCB3aWRnZXQuIik7fXRoaXMuX19nQT1pO3RoaXMuaW52YWxpZGF0ZUNoaWxkcmVuQ2FjaGUoKTt9LF9nZXRXaWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dBO30sX2FwcGx5TGF5b3V0Q2hhbmdlOmZ1bmN0aW9uKCl7aWYodGhpcy5fX2dBKXt0aGlzLl9fZ0Euc2NoZWR1bGVMYXlvdXRVcGRhdGUoKTt9fSxfZ2V0TGF5b3V0Q2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dBLmdldExheW91dENoaWxkcmVuKCk7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9fZ0E9dGhpcy5fX2d6PW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIG09ImJvdHRvbSIsbD0idG9wIixrPSJfYXBwbHlMYXlvdXRDaGFuZ2UiLGo9InRvcC1sZWZ0IixoPSJib3R0b20tbGVmdCIsZz0ibGVmdCIsZj0icmlnaHQiLGU9Im1pZGRsZSIsZD0iY2VudGVyIixjPSJxeC51aS5sYXlvdXQuQXRvbSIsYT0iSW50ZWdlciIsYj0iQm9vbGVhbiI7cXguQ2xhc3MuZGVmaW5lKGMse2V4dGVuZDpxeC51aS5sYXlvdXQuQWJzdHJhY3QscHJvcGVydGllczp7Z2FwOntjaGVjazphLGluaXQ6NCxhcHBseTprfSxpY29uUG9zaXRpb246e2NoZWNrOltnLGwsZixtLGosaF0saW5pdDpnLGFwcGx5Omt9LGNlbnRlcjp7Y2hlY2s6Yixpbml0OmZhbHNlLGFwcGx5Omt9fSxtZW1iZXJzOnt2ZXJpZnlMYXlvdXRQcm9wZXJ0eTpudWxsLHJlbmRlckxheW91dDpmdW5jdGlvbihuLG8pe3ZhciB4PXF4LnVpLmxheW91dC5VdGlsO3ZhciBxPXRoaXMuZ2V0SWNvblBvc2l0aW9uKCk7dmFyIHQ9dGhpcy5fZ2V0TGF5b3V0Q2hpbGRyZW4oKTt2YXIgbGVuZ3RoPXQubGVuZ3RoO3ZhciBJLHRvcCx5LHI7dmFyIEQsdzt2YXIgQj10aGlzLmdldEdhcCgpO3ZhciBHPXRoaXMuZ2V0Q2VudGVyKCk7aWYocT09PW18fHE9PT1mKXt2YXIgej1sZW5ndGgtMTt2YXIgdT0tMTt2YXIgcz0tMTt9ZWxzZXt2YXIgej0wO3ZhciB1PWxlbmd0aDt2YXIgcz0xO31pZihxPT1sfHxxPT1tKXtpZihHKXt2YXIgQz0wO2Zvcih2YXIgaT16O2khPXU7aSs9cyl7cj10W2ldLmdldFNpemVIaW50KCkuaGVpZ2h0O2lmKHI+MCl7Qys9cjtpZihpIT16KXtDKz1CO319fXRvcD1NYXRoLnJvdW5kKChvLUMpLzIpO31lbHNle3RvcD0wO31mb3IodmFyIGk9ejtpIT11O2krPXMpe0Q9dFtpXTt3PUQuZ2V0U2l6ZUhpbnQoKTt5PU1hdGgubWluKHcubWF4V2lkdGgsTWF0aC5tYXgobix3Lm1pbldpZHRoKSk7cj13LmhlaWdodDtJPXguY29tcHV0ZUhvcml6b250YWxBbGlnbk9mZnNldChkLHksbik7RC5yZW5kZXJMYXlvdXQoSSx0b3AseSxyKTtpZihyPjApe3RvcCs9citCO319fWVsc2V7dmFyIHY9bjt2YXIgcD1udWxsO3ZhciBGPTA7Zm9yKHZhciBpPXo7aSE9dTtpKz1zKXtEPXRbaV07eT1ELmdldFNpemVIaW50KCkud2lkdGg7aWYoeT4wKXtpZighcCYmRCBpbnN0YW5jZW9mIHF4LnVpLmJhc2ljLkxhYmVsKXtwPUQ7fWVsc2V7di09eTt9RisrO319aWYoRj4xKXt2YXIgRT0oRi0xKSpCO3YtPUU7fWlmKHApe3ZhciB3PXAuZ2V0U2l6ZUhpbnQoKTt2YXIgQT1NYXRoLm1heCh3Lm1pbldpZHRoLE1hdGgubWluKHYsdy5tYXhXaWR0aCkpO3YtPUE7fWlmKEcmJnY+MCl7ST1NYXRoLnJvdW5kKHYvMik7fWVsc2V7ST0wO31mb3IodmFyIGk9ejtpIT11O2krPXMpe0Q9dFtpXTt3PUQuZ2V0U2l6ZUhpbnQoKTtyPU1hdGgubWluKHcubWF4SGVpZ2h0LE1hdGgubWF4KG8sdy5taW5IZWlnaHQpKTtpZihEPT09cCl7eT1BO31lbHNle3k9dy53aWR0aDt9dmFyIEg9ZTtpZihxPT1qKXtIPWw7fWVsc2UgaWYocT09aCl7SD1tO310b3A9eC5jb21wdXRlVmVydGljYWxBbGlnbk9mZnNldChILHcuaGVpZ2h0LG8pO0QucmVuZGVyTGF5b3V0KEksdG9wLHkscik7aWYoeT4wKXtJKz15K0I7fX19fSxfY29tcHV0ZVNpemVIaW50OmZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5fZ2V0TGF5b3V0Q2hpbGRyZW4oKTt2YXIgbGVuZ3RoPVQubGVuZ3RoO3ZhciBMLFI7aWYobGVuZ3RoPT09MSl7dmFyIEw9VFswXS5nZXRTaXplSGludCgpO1I9e3dpZHRoOkwud2lkdGgsaGVpZ2h0OkwuaGVpZ2h0LG1pbldpZHRoOkwubWluV2lkdGgsbWluSGVpZ2h0OkwubWluSGVpZ2h0fTt9ZWxzZXt2YXIgUD0wLFE9MDt2YXIgTT0wLE89MDt2YXIgTj10aGlzLmdldEljb25Qb3NpdGlvbigpO3ZhciBTPXRoaXMuZ2V0R2FwKCk7aWYoTj09PWx8fE49PT1tKXt2YXIgSj0wO2Zvcih2YXIgaT0wO2k8bGVuZ3RoO2krKyl7TD1UW2ldLmdldFNpemVIaW50KCk7UT1NYXRoLm1heChRLEwud2lkdGgpO1A9TWF0aC5tYXgoUCxMLm1pbldpZHRoKTtpZihMLmhlaWdodD4wKXtPKz1MLmhlaWdodDtNKz1MLm1pbkhlaWdodDtKKys7fX1pZihKPjEpe3ZhciBLPShKLTEpKlM7Tys9SztNKz1LO319ZWxzZXt2YXIgSj0wO2Zvcih2YXIgaT0wO2k8bGVuZ3RoO2krKyl7TD1UW2ldLmdldFNpemVIaW50KCk7Tz1NYXRoLm1heChPLEwuaGVpZ2h0KTtNPU1hdGgubWF4KE0sTC5taW5IZWlnaHQpO2lmKEwud2lkdGg+MCl7USs9TC53aWR0aDtQKz1MLm1pbldpZHRoO0orKzt9fWlmKEo+MSl7dmFyIEs9KEotMSkqUztRKz1LO1ArPUs7fX1SPXttaW5XaWR0aDpQLHdpZHRoOlEsbWluSGVpZ2h0Ok0saGVpZ2h0Ok99O31yZXR1cm4gUjt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGc9Im1pZGRsZSIsZj0icXgudWkubGF5b3V0LlV0aWwiLGU9ImxlZnQiLGQ9ImNlbnRlciIsYz0idG9wIixiPSJib3R0b20iLGE9InJpZ2h0IjtxeC5DbGFzcy5kZWZpbmUoZix7c3RhdGljczp7UEVSQ0VOVF9WQUxVRTovWzAtOV0rKD86XC5bMC05XSspPyUvLGNvbXB1dGVGbGV4T2Zmc2V0czpmdW5jdGlvbihoLGosayl7dmFyIG4scixtLHM7dmFyIG89aj5rO3ZhciB0PU1hdGguYWJzKGotayk7dmFyIHUscDt2YXIgcT17fTtmb3IociBpbiBoKXtuPWhbcl07cVtyXT17cG90ZW50aWFsOm8/bi5tYXgtbi52YWx1ZTpuLnZhbHVlLW4ubWluLGZsZXg6bz9uLmZsZXg6MS9uLmZsZXgsb2Zmc2V0OjB9O313aGlsZSh0IT0wKXtzPUluZmluaXR5O209MDtmb3IociBpbiBxKXtuPXFbcl07aWYobi5wb3RlbnRpYWw+MCl7bSs9bi5mbGV4O3M9TWF0aC5taW4ocyxuLnBvdGVudGlhbC9uLmZsZXgpO319aWYobT09MCl7YnJlYWs7fXM9TWF0aC5taW4odCxzKm0pL207dT0wO2ZvcihyIGluIHEpe249cVtyXTtpZihuLnBvdGVudGlhbD4wKXtwPU1hdGgubWluKHQsbi5wb3RlbnRpYWwsTWF0aC5jZWlsKHMqbi5mbGV4KSk7dSs9cC1zKm4uZmxleDtpZih1Pj0xKXt1LT0xO3AtPTE7fW4ucG90ZW50aWFsLT1wO2lmKG8pe24ub2Zmc2V0Kz1wO31lbHNle24ub2Zmc2V0LT1wO310LT1wO319fXJldHVybiBxO30sY29tcHV0ZUhvcml6b250YWxBbGlnbk9mZnNldDpmdW5jdGlvbih2LHcseCx5LHope2lmKHk9PW51bGwpe3k9MDt9aWYoej09bnVsbCl7ej0wO312YXIgQT0wO3N3aXRjaCh2KXtjYXNlIGU6QT15O2JyZWFrO2Nhc2UgYTpBPXgtdy16O2JyZWFrO2Nhc2UgZDpBPU1hdGgucm91bmQoKHgtdykvMik7aWYoQTx5KXtBPXk7fWVsc2UgaWYoQTx6KXtBPU1hdGgubWF4KHkseC13LXopO31icmVhazt9cmV0dXJuIEE7fSxjb21wdXRlVmVydGljYWxBbGlnbk9mZnNldDpmdW5jdGlvbihCLEMsRCxFLEYpe2lmKEU9PW51bGwpe0U9MDt9aWYoRj09bnVsbCl7Rj0wO312YXIgRz0wO3N3aXRjaChCKXtjYXNlIGM6Rz1FO2JyZWFrO2Nhc2UgYjpHPUQtQy1GO2JyZWFrO2Nhc2UgZzpHPU1hdGgucm91bmQoKEQtQykvMik7aWYoRzxFKXtHPUU7fWVsc2UgaWYoRzxGKXtHPU1hdGgubWF4KEUsRC1DLUYpO31icmVhazt9cmV0dXJuIEc7fSxjb2xsYXBzZU1hcmdpbnM6ZnVuY3Rpb24oSCl7dmFyIEk9MCxLPTA7Zm9yKHZhciBpPTAsbD1hcmd1bWVudHMubGVuZ3RoO2k8bDtpKyspe3ZhciBKPWFyZ3VtZW50c1tpXTtpZihKPDApe0s9TWF0aC5taW4oSyxKKTt9ZWxzZSBpZihKPjApe0k9TWF0aC5tYXgoSSxKKTt9fXJldHVybiBJK0s7fSxjb21wdXRlSG9yaXpvbnRhbEdhcHM6ZnVuY3Rpb24oTCxNLE4pe2lmKE09PW51bGwpe009MDt9dmFyIE89MDtpZihOKXtPKz1MWzBdLmdldE1hcmdpbkxlZnQoKTtmb3IodmFyIGk9MSxsPUwubGVuZ3RoO2k8bDtpKz0xKXtPKz10aGlzLmNvbGxhcHNlTWFyZ2lucyhNLExbaS0xXS5nZXRNYXJnaW5SaWdodCgpLExbaV0uZ2V0TWFyZ2luTGVmdCgpKTt9Tys9TFtsLTFdLmdldE1hcmdpblJpZ2h0KCk7fWVsc2V7Zm9yKHZhciBpPTEsbD1MLmxlbmd0aDtpPGw7aSs9MSl7Tys9TFtpXS5nZXRNYXJnaW5MZWZ0KCkrTFtpXS5nZXRNYXJnaW5SaWdodCgpO31PKz0oTSoobC0xKSk7fXJldHVybiBPO30sY29tcHV0ZVZlcnRpY2FsR2FwczpmdW5jdGlvbihQLFEsUil7aWYoUT09bnVsbCl7UT0wO312YXIgUz0wO2lmKFIpe1MrPVBbMF0uZ2V0TWFyZ2luVG9wKCk7Zm9yKHZhciBpPTEsbD1QLmxlbmd0aDtpPGw7aSs9MSl7Uys9dGhpcy5jb2xsYXBzZU1hcmdpbnMoUSxQW2ktMV0uZ2V0TWFyZ2luQm90dG9tKCksUFtpXS5nZXRNYXJnaW5Ub3AoKSk7fVMrPVBbbC0xXS5nZXRNYXJnaW5Cb3R0b20oKTt9ZWxzZXtmb3IodmFyIGk9MSxsPVAubGVuZ3RoO2k8bDtpKz0xKXtTKz1QW2ldLmdldE1hcmdpblRvcCgpK1BbaV0uZ2V0TWFyZ2luQm90dG9tKCk7fVMrPShRKihsLTEpKTt9cmV0dXJuIFM7fSxjb21wdXRlSG9yaXpvbnRhbFNlcGFyYXRvckdhcHM6ZnVuY3Rpb24oVCxVLFYpe3ZhciBZPXF4LnRoZW1lLm1hbmFnZXIuRGVjb3JhdGlvbi5nZXRJbnN0YW5jZSgpLnJlc29sdmUoVik7dmFyIFg9WS5nZXRJbnNldHMoKTt2YXIgVz1YLmxlZnQrWC5yaWdodDt2YXIgYmE9MDtmb3IodmFyIGk9MCxsPVQubGVuZ3RoO2k8bDtpKyspe3ZhciBiYj1UW2ldO2JhKz1iYi5nZXRNYXJnaW5MZWZ0KCkrYmIuZ2V0TWFyZ2luUmlnaHQoKTt9YmErPShVK1crVSkqKGwtMSk7cmV0dXJuIGJhO30sY29tcHV0ZVZlcnRpY2FsU2VwYXJhdG9yR2FwczpmdW5jdGlvbihiYyxiZCxiZSl7dmFyIGJoPXF4LnRoZW1lLm1hbmFnZXIuRGVjb3JhdGlvbi5nZXRJbnN0YW5jZSgpLnJlc29sdmUoYmUpO3ZhciBiZz1iaC5nZXRJbnNldHMoKTt2YXIgYmY9YmcudG9wK2JnLmJvdHRvbTt2YXIgYmk9MDtmb3IodmFyIGk9MCxsPWJjLmxlbmd0aDtpPGw7aSsrKXt2YXIgYmo9YmNbaV07YmkrPWJqLmdldE1hcmdpblRvcCgpK2JqLmdldE1hcmdpbkJvdHRvbSgpO31iaSs9KGJkK2JmK2JkKSoobC0xKTtyZXR1cm4gYmk7fSxhcnJhbmdlSWRlYWxzOmZ1bmN0aW9uKGJrLGJsLGJtLGJuLGJvLGJwKXtpZihibDxia3x8Ym88Ym4pe2lmKGJsPGJrJiZibzxibil7Ymw9Yms7Ym89Ym47fWVsc2UgaWYoYmw8Ymspe2JvLT0oYmstYmwpO2JsPWJrO2lmKGJvPGJuKXtibz1ibjt9fWVsc2UgaWYoYm88Ym4pe2JsLT0oYm4tYm8pO2JvPWJuO2lmKGJsPGJrKXtibD1iazt9fX1pZihibD5ibXx8Ym8+YnApe2lmKGJsPmJtJiZibz5icCl7Ymw9Ym07Ym89YnA7fWVsc2UgaWYoYmw+Ym0pe2JvKz0oYmwtYm0pO2JsPWJtO2lmKGJvPmJwKXtibz1icDt9fWVsc2UgaWYoYm8+YnApe2JsKz0oYm8tYnApO2JvPWJwO2lmKGJsPmJtKXtibD1ibTt9fX1yZXR1cm4ge2JlZ2luOmJsLGVuZDpib307fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJxeC5ldmVudC50eXBlLkRhdGEiLGE9InF4LnVpLmZvcm0uSVN0cmluZ0Zvcm0iO3F4LkludGVyZmFjZS5kZWZpbmUoYSx7ZXZlbnRzOnsiY2hhbmdlVmFsdWUiOmJ9LG1lbWJlcnM6e3NldFZhbHVlOmZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT0xO30scmVzZXRWYWx1ZTpmdW5jdGlvbigpe30sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGs9InF4LmR5bmxvY2FsZSIsaj0iQm9vbGVhbiIsaT0iY29sb3IiLGg9ImNoYW5nZUxvY2FsZSIsZz0iZW5hYmxlZCIsZj0ib24iLGQ9Il9hcHBseVRleHRBbGlnbiIsYz0icXgudWkuY29yZS5XaWRnZXQiLGI9Im5vd3JhcCIsYT0iY2hhbmdlVGV4dEFsaWduIixDPSJfYXBwbHlXcmFwIixCPSJBIixBPSJjaGFuZ2VDb250ZW50Iix6PSJxeC51aS5iYXNpYy5MYWJlbCIseT0id2hpdGVTcGFjZSIseD0iX2FwcGx5VmFsdWUiLHc9ImNlbnRlciIsdj0iX2FwcGx5QnVkZHkiLHU9IlN0cmluZyIsdD0idGV4dEFsaWduIixyPSJyaWdodCIscz0iY2hhbmdlUmljaCIscD0ibm9ybWFsIixxPSJfYXBwbHlSaWNoIixuPSJjbGljayIsbz0ibGFiZWwiLGw9ImxlZnQiLG09ImNoYW5nZVZhbHVlIjtxeC5DbGFzcy5kZWZpbmUoeix7ZXh0ZW5kOnF4LnVpLmNvcmUuV2lkZ2V0LGltcGxlbWVudDpbcXgudWkuZm9ybS5JU3RyaW5nRm9ybV0sY29uc3RydWN0OmZ1bmN0aW9uKEQpe3F4LnVpLmNvcmUuV2lkZ2V0LmNhbGwodGhpcyk7aWYoRCE9bnVsbCl7dGhpcy5zZXRWYWx1ZShEKTt9aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGssZikpe3F4LmxvY2FsZS5NYW5hZ2VyLmdldEluc3RhbmNlKCkuYWRkTGlzdGVuZXIoaCx0aGlzLl9vbkNoYW5nZUxvY2FsZSx0aGlzKTt9fSxwcm9wZXJ0aWVzOntyaWNoOntjaGVjazpqLGluaXQ6ZmFsc2UsZXZlbnQ6cyxhcHBseTpxfSx3cmFwOntjaGVjazpqLGluaXQ6dHJ1ZSxhcHBseTpDfSx2YWx1ZTp7Y2hlY2s6dSxhcHBseTp4LGV2ZW50Om0sbnVsbGFibGU6dHJ1ZX0sYnVkZHk6e2NoZWNrOmMsYXBwbHk6dixudWxsYWJsZTp0cnVlLGluaXQ6bnVsbCxkZXJlZmVyZW5jZTp0cnVlfSx0ZXh0QWxpZ246e2NoZWNrOltsLHcscl0sbnVsbGFibGU6dHJ1ZSx0aGVtZWFibGU6dHJ1ZSxhcHBseTpkLGV2ZW50OmF9LGFwcGVhcmFuY2U6e3JlZmluZTp0cnVlLGluaXQ6b30sc2VsZWN0YWJsZTp7cmVmaW5lOnRydWUsaW5pdDpmYWxzZX0sYWxsb3dHcm93WDp7cmVmaW5lOnRydWUsaW5pdDpmYWxzZX0sYWxsb3dHcm93WTp7cmVmaW5lOnRydWUsaW5pdDpmYWxzZX0sYWxsb3dTaHJpbmtZOntyZWZpbmU6dHJ1ZSxpbml0OmZhbHNlfX0sbWVtYmVyczp7X19nSTpudWxsLF9fZ0o6bnVsbCxfX2dLOm51bGwsX19nTDpudWxsLF9nZXRDb250ZW50SGludDpmdW5jdGlvbigpe2lmKHRoaXMuX19nSil7dGhpcy5fX2dNPXRoaXMuX19nTigpO2RlbGV0ZSB0aGlzLl9fZ0o7fXJldHVybiB7d2lkdGg6dGhpcy5fX2dNLndpZHRoLGhlaWdodDp0aGlzLl9fZ00uaGVpZ2h0fTt9LF9oYXNIZWlnaHRGb3JXaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFJpY2goKSYmdGhpcy5nZXRXcmFwKCk7fSxfYXBwbHlTZWxlY3RhYmxlOmZ1bmN0aW9uKEUpe2lmKCFxeC5ib20uY2xpZW50LkZlYXR1cmUuQ1NTX1RFWFRfT1ZFUkZMT1cmJnF4LmJvbS5jbGllbnQuRmVhdHVyZS5YVUwpe2lmKEUmJiF0aGlzLmlzUmljaCgpKXt7fTtyZXR1cm47fX1xeC51aS5jb3JlLldpZGdldC5wcm90b3R5cGUuX2FwcGx5U2VsZWN0YWJsZS5jYWxsKHRoaXMsRSk7fSxfZ2V0Q29udGVudEhlaWdodEZvcldpZHRoOmZ1bmN0aW9uKEYpe2lmKCF0aGlzLmdldFJpY2goKSYmIXRoaXMuZ2V0V3JhcCgpKXtyZXR1cm4gbnVsbDt9cmV0dXJuIHRoaXMuX19nTihGKS5oZWlnaHQ7fSxfY3JlYXRlQ29udGVudEVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHF4Lmh0bWwuTGFiZWw7fSxfYXBwbHlUZXh0QWxpZ246ZnVuY3Rpb24oRyxIKXt0aGlzLmdldENvbnRlbnRFbGVtZW50KCkuc2V0U3R5bGUodCxHKTt9LF9hcHBseVRleHRDb2xvcjpmdW5jdGlvbihJLEope2lmKEkpe3RoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5zZXRTdHlsZShpLHF4LnRoZW1lLm1hbmFnZXIuQ29sb3IuZ2V0SW5zdGFuY2UoKS5yZXNvbHZlKEkpKTt9ZWxzZXt0aGlzLmdldENvbnRlbnRFbGVtZW50KCkucmVtb3ZlU3R5bGUoaSk7fX0sX19nTTp7d2lkdGg6MCxoZWlnaHQ6MH0sX2FwcGx5Rm9udDpmdW5jdGlvbihLLEwpe3ZhciBNO2lmKEspe3RoaXMuX19nST1xeC50aGVtZS5tYW5hZ2VyLkZvbnQuZ2V0SW5zdGFuY2UoKS5yZXNvbHZlKEspO009dGhpcy5fX2dJLmdldFN0eWxlcygpO31lbHNle3RoaXMuX19nST1udWxsO009cXguYm9tLkZvbnQuZ2V0RGVmYXVsdFN0eWxlcygpO310aGlzLmdldENvbnRlbnRFbGVtZW50KCkuc2V0U3R5bGVzKE0pO3RoaXMuX19nSj10cnVlO3F4LnVpLmNvcmUucXVldWUuTGF5b3V0LmFkZCh0aGlzKTt9LF9fZ046ZnVuY3Rpb24oTil7dmFyIFI9cXguYm9tLkxhYmVsO3ZhciBQPXRoaXMuZ2V0Rm9udCgpO3ZhciBPPVA/dGhpcy5fX2dJLmdldFN0eWxlcygpOnF4LmJvbS5Gb250LmdldERlZmF1bHRTdHlsZXMoKTt2YXIgY29udGVudD10aGlzLmdldFZhbHVlKCl8fEI7dmFyIFE9dGhpcy5nZXRSaWNoKCk7cmV0dXJuIFE/Ui5nZXRIdG1sU2l6ZShjb250ZW50LE8sTik6Ui5nZXRUZXh0U2l6ZShjb250ZW50LE8pO30sX2FwcGx5QnVkZHk6ZnVuY3Rpb24oUyxUKXtpZihUIT1udWxsKXtULnJlbW92ZUJpbmRpbmcodGhpcy5fX2dLKTt0aGlzLl9fZ0s9bnVsbDt0aGlzLnJlbW92ZUxpc3RlbmVyQnlJZCh0aGlzLl9fZ0wpO3RoaXMuX19nTD1udWxsO31pZihTIT1udWxsKXt0aGlzLl9fZ0s9Uy5iaW5kKGcsdGhpcyxnKTt0aGlzLl9fZ0w9dGhpcy5hZGRMaXN0ZW5lcihuLGZ1bmN0aW9uKCl7aWYoUy5pc0ZvY3VzYWJsZSgpKXtTLmZvY3VzLmFwcGx5KFMpO319LHRoaXMpO319LF9hcHBseVJpY2g6ZnVuY3Rpb24oVSl7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNldFJpY2goVSk7dGhpcy5fX2dKPXRydWU7cXgudWkuY29yZS5xdWV1ZS5MYXlvdXQuYWRkKHRoaXMpO30sX2FwcGx5V3JhcDpmdW5jdGlvbihWLFcpe2lmKFYmJiF0aGlzLmlzUmljaCgpKXt7fTt9aWYodGhpcy5pc1JpY2goKSl7dmFyIFg9Vj9wOmI7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNldFN0eWxlKHksWCk7fX0sX29uQ2hhbmdlTG9jYWxlOnF4LmNvcmUuVmFyaWFudC5zZWxlY3Qoayx7Im9uIjpmdW5jdGlvbihlKXt2YXIgY29udGVudD10aGlzLmdldFZhbHVlKCk7aWYoY29udGVudCYmY29udGVudC50cmFuc2xhdGUpe3RoaXMuc2V0VmFsdWUoY29udGVudC50cmFuc2xhdGUoKSk7fX0sIm9mZiI6bnVsbH0pLF9hcHBseVZhbHVlOmZ1bmN0aW9uKFksYmEpe3RoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5zZXRWYWx1ZShZKTt0aGlzLl9fZ0o9dHJ1ZTtxeC51aS5jb3JlLnF1ZXVlLkxheW91dC5hZGQodGhpcyk7dGhpcy5maXJlRGF0YUV2ZW50KEEsWSxiYSk7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoayxmKSl7cXgubG9jYWxlLk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZW1vdmVMaXN0ZW5lcihoLHRoaXMuX29uQ2hhbmdlTG9jYWxlLHRoaXMpO31pZih0aGlzLl9fZ0shPW51bGwpe3ZhciBiYj10aGlzLmdldEJ1ZGR5KCk7aWYoYmIhPW51bGwmJiFiYi5pc0Rpc3Bvc2VkKCkpe2JiLnJlbW92ZUJpbmRpbmcodGhpcy5fX2dLKTt9fXRoaXMuX19nST10aGlzLl9fZ0s9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0idmFsdWUiLGE9InF4Lmh0bWwuTGFiZWwiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXguaHRtbC5FbGVtZW50LG1lbWJlcnM6e19fZFA6bnVsbCxfYXBwbHlQcm9wZXJ0eTpmdW5jdGlvbihuYW1lLGMpe3F4Lmh0bWwuRWxlbWVudC5wcm90b3R5cGUuX2FwcGx5UHJvcGVydHkuY2FsbCh0aGlzLG5hbWUsYyk7aWYobmFtZT09Yil7dmFyIGQ9dGhpcy5nZXREb21FbGVtZW50KCk7cXguYm9tLkxhYmVsLnNldFZhbHVlKGQsYyk7fX0sX2NyZWF0ZURvbUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZj10aGlzLl9fZFA7dmFyIGU9cXguYm9tLkxhYmVsLmNyZWF0ZSh0aGlzLl9jb250ZW50LGYpO3JldHVybiBlO30sX2NvcHlEYXRhOmZ1bmN0aW9uKGcpe3JldHVybiBxeC5odG1sLkVsZW1lbnQucHJvdG90eXBlLl9jb3B5RGF0YS5jYWxsKHRoaXMsdHJ1ZSk7fSxzZXRSaWNoOmZ1bmN0aW9uKGgpe3ZhciBpPXRoaXMuZ2V0RG9tRWxlbWVudCgpO2lmKGkpe3Rocm93IG5ldyBFcnJvcigiVGhlIGxhYmVsIG1vZGUgY2Fubm90IGJlIG1vZGlmaWVkIGFmdGVyIGluaXRpYWwgY3JlYXRpb24iKTt9aD0hIWg7aWYodGhpcy5fX2RQPT1oKXtyZXR1cm47fXRoaXMuX19kUD1oO3JldHVybiB0aGlzO30sc2V0VmFsdWU6ZnVuY3Rpb24oail7dGhpcy5fc2V0UHJvcGVydHkoYixqKTtyZXR1cm4gdGhpczt9LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFByb3BlcnR5KGIpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaj0iZGl2IixpPSJpbmhlcml0IixoPSJ0ZXh0IixnPSJxeC5jbGllbnQiLGY9InZhbHVlIixlPSIiLGQ9ImhpZGRlbiIsYz0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9rZXltYXN0ZXIvZ2F0ZWtlZXBlci90aGVyZS5pcy5vbmx5Lnh1bCIsYj0ibm93cmFwIixhPSJhdXRvIix6PSIwIix5PSJlbGxpcHNpcyIseD0ibm9ybWFsIix3PSJsYWJlbCIsdj0icHgiLHU9ImNyb3AiLHQ9ImdlY2tvIixzPSJlbmQiLHI9IjEwMCUiLHE9InZpc2libGUiLG89InF4LmJvbS5MYWJlbCIscD0ib3BlcmEiLG09Im1zaHRtbCIsbj0iYmxvY2siLGs9Ii0xMDAwcHgiLGw9ImFic29sdXRlIjtxeC5DbGFzcy5kZWZpbmUobyx7c3RhdGljczp7X19qbjp7Zm9udEZhbWlseToxLGZvbnRTaXplOjEsZm9udFdlaWdodDoxLGZvbnRTdHlsZToxLGxpbmVIZWlnaHQ6MX0sX19qbzpmdW5jdGlvbigpe3ZhciBBPXRoaXMuX19qcShmYWxzZSk7ZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUoQSxkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpO3JldHVybiB0aGlzLl90ZXh0RWxlbWVudD1BO30sX19qcDpmdW5jdGlvbigpe3ZhciBCPXRoaXMuX19qcSh0cnVlKTtkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShCLGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7cmV0dXJuIHRoaXMuX2h0bWxFbGVtZW50PUI7fSxfX2pxOmZ1bmN0aW9uKEMpe3ZhciBEPXF4LmJvbS5FbGVtZW50LmNyZWF0ZShqKTt2YXIgRT1ELnN0eWxlO0Uud2lkdGg9RS5oZWlnaHQ9YTtFLmxlZnQ9RS50b3A9aztFLnZpc2liaWxpdHk9ZDtFLnBvc2l0aW9uPWw7RS5vdmVyZmxvdz1xO2lmKEMpe0Uud2hpdGVTcGFjZT14O31lbHNle0Uud2hpdGVTcGFjZT1iO2lmKCFxeC5ib20uY2xpZW50LkZlYXR1cmUuQ1NTX1RFWFRfT1ZFUkZMT1cmJnF4LmJvbS5jbGllbnQuRmVhdHVyZS5YVUwpe3ZhciBGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhjLHcpO3ZhciBFPUYuc3R5bGU7RS5wYWRkaW5nPXo7Zm9yKHZhciBHIGluIHRoaXMuX19qbil7RVtHXT1pO31ELmFwcGVuZENoaWxkKEYpO319cmV0dXJuIEQ7fSxfX2pyOmZ1bmN0aW9uKEgpe3ZhciBJPXt9O2lmKEgpe0kud2hpdGVTcGFjZT14O31lbHNlIGlmKCFxeC5ib20uY2xpZW50LkZlYXR1cmUuQ1NTX1RFWFRfT1ZFUkZMT1cmJnF4LmJvbS5jbGllbnQuRmVhdHVyZS5YVUwpe0kuZGlzcGxheT1uO31lbHNle0kub3ZlcmZsb3c9ZDtJLndoaXRlU3BhY2U9YjtJLnRleHRPdmVyZmxvdz15O2lmKHF4LmNvcmUuVmFyaWFudC5pc1NldChnLHApKXtJLk9UZXh0T3ZlcmZsb3c9eTt9fXJldHVybiBJO30sY3JlYXRlOmZ1bmN0aW9uKGNvbnRlbnQsSixLKXtpZighSyl7Sz13aW5kb3c7fWlmKEope3ZhciBMPUsuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChqKTtMLnVzZUh0bWw9dHJ1ZTt9ZWxzZSBpZighcXguYm9tLmNsaWVudC5GZWF0dXJlLkNTU19URVhUX09WRVJGTE9XJiZxeC5ib20uY2xpZW50LkZlYXR1cmUuWFVMKXt2YXIgTD1LLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaik7dmFyIE49Sy5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYyx3KTt2YXIgTT1OLnN0eWxlO00uY3Vyc29yPWk7TS5jb2xvcj1pO00ub3ZlcmZsb3c9ZDtNLm1heFdpZHRoPXI7TS5wYWRkaW5nPXo7Zm9yKHZhciBPIGluIHRoaXMuX19qbil7Ti5zdHlsZVtPXT1pO31OLnNldEF0dHJpYnV0ZSh1LHMpO0wuYXBwZW5kQ2hpbGQoTik7fWVsc2V7dmFyIEw9Sy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KGopO3F4LmJvbS5lbGVtZW50LlN0eWxlLnNldFN0eWxlcyhMLHRoaXMuX19qcihKKSk7fWlmKGNvbnRlbnQpe3RoaXMuc2V0VmFsdWUoTCxjb250ZW50KTt9cmV0dXJuIEw7fSxzZXRWYWx1ZTpmdW5jdGlvbihQLFEpe1E9UXx8ZTtpZihQLnVzZUh0bWwpe1AuaW5uZXJIVE1MPVE7fWVsc2UgaWYoIXF4LmJvbS5jbGllbnQuRmVhdHVyZS5DU1NfVEVYVF9PVkVSRkxPVyYmcXguYm9tLmNsaWVudC5GZWF0dXJlLlhVTCl7UC5maXJzdENoaWxkLnNldEF0dHJpYnV0ZShmLFEpO31lbHNle3F4LmJvbS5lbGVtZW50LkF0dHJpYnV0ZS5zZXQoUCxoLFEpO319LGdldFZhbHVlOmZ1bmN0aW9uKFIpe2lmKFIudXNlSHRtbCl7cmV0dXJuIFIuaW5uZXJIVE1MO31lbHNlIGlmKCFxeC5ib20uY2xpZW50LkZlYXR1cmUuQ1NTX1RFWFRfT1ZFUkZMT1cmJnF4LmJvbS5jbGllbnQuRmVhdHVyZS5YVUwpe3JldHVybiBSLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKGYpfHxlO31lbHNle3JldHVybiBxeC5ib20uZWxlbWVudC5BdHRyaWJ1dGUuZ2V0KFIsaCk7fX0sZ2V0SHRtbFNpemU6ZnVuY3Rpb24oY29udGVudCxTLFQpe3ZhciBVPXRoaXMuX2h0bWxFbGVtZW50fHx0aGlzLl9fanAoKTtVLnN0eWxlLndpZHRoPVQhPT11bmRlZmluZWQ/VCt2OmE7VS5pbm5lckhUTUw9Y29udGVudDtyZXR1cm4gdGhpcy5fX2pzKFUsUyk7fSxnZXRUZXh0U2l6ZTpmdW5jdGlvbihWLFcpe3ZhciBYPXRoaXMuX3RleHRFbGVtZW50fHx0aGlzLl9fam8oKTtpZighcXguYm9tLmNsaWVudC5GZWF0dXJlLkNTU19URVhUX09WRVJGTE9XJiZxeC5ib20uY2xpZW50LkZlYXR1cmUuWFVMKXtYLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKGYsVik7fWVsc2V7cXguYm9tLmVsZW1lbnQuQXR0cmlidXRlLnNldChYLGgsVik7fXJldHVybiB0aGlzLl9fanMoWCxXKTt9LF9fanM6ZnVuY3Rpb24oWSxiYSl7dmFyIGJiPXRoaXMuX19qbjtpZighYmEpe2JhPXt9O31mb3IodmFyIGJjIGluIGJiKXtZLnN0eWxlW2JjXT1iYVtiY118fGU7fXZhciBiZD1xeC5ib20uZWxlbWVudC5EaW1lbnNpb24uZ2V0U2l6ZShZKTtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoZyx0KSl7aWYoIXF4LmJvbS5jbGllbnQuUGxhdGZvcm0uV0lOKXtiZC53aWR0aCsrO319aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGcsbSkmJnF4LmJvbS5jbGllbnQuRW5naW5lLlZFUlNJT04+PTkpe2JkLndpZHRoKys7fXJldHVybiBiZDt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGk9IjBweCIsaD0icXguY2xpZW50IixnPSJtc2h0bWwiLGY9InF4LmJvbS5lbGVtZW50LkRpbWVuc2lvbiIsZT0icGFkZGluZ1JpZ2h0IixkPSJwYWRkaW5nTGVmdCIsYz0ib3BlcmEiLGI9InBhZGRpbmdUb3AiLGE9InBhZGRpbmdCb3R0b20iO3F4LkNsYXNzLmRlZmluZShmLHtzdGF0aWNzOntnZXRXaWR0aDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGgseyJnZWNrbyI6ZnVuY3Rpb24oail7aWYoai5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBrPWouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIE1hdGgucm91bmQoay5yaWdodCktTWF0aC5yb3VuZChrLmxlZnQpO31lbHNle3JldHVybiBqLm9mZnNldFdpZHRoO319LCJkZWZhdWx0IjpmdW5jdGlvbihsKXtyZXR1cm4gbC5vZmZzZXRXaWR0aDt9fSksZ2V0SGVpZ2h0OnF4LmNvcmUuVmFyaWFudC5zZWxlY3QoaCx7ImdlY2tvIjpmdW5jdGlvbihtKXtpZihtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7dmFyIG49bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gTWF0aC5yb3VuZChuLmJvdHRvbSktTWF0aC5yb3VuZChuLnRvcCk7fWVsc2V7cmV0dXJuIG0ub2Zmc2V0SGVpZ2h0O319LCJkZWZhdWx0IjpmdW5jdGlvbihvKXtyZXR1cm4gby5vZmZzZXRIZWlnaHQ7fX0pLGdldFNpemU6ZnVuY3Rpb24ocCl7cmV0dXJuIHt3aWR0aDp0aGlzLmdldFdpZHRoKHApLGhlaWdodDp0aGlzLmdldEhlaWdodChwKX07fSxfX2lwOnt2aXNpYmxlOnRydWUsaGlkZGVuOnRydWV9LGdldENvbnRlbnRXaWR0aDpmdW5jdGlvbihxKXt2YXIgcz1xeC5ib20uZWxlbWVudC5TdHlsZTt2YXIgdD1xeC5ib20uZWxlbWVudC5PdmVyZmxvdy5nZXRYKHEpO3ZhciB1PXBhcnNlSW50KHMuZ2V0KHEsZCl8fGksMTApO3ZhciB4PXBhcnNlSW50KHMuZ2V0KHEsZSl8fGksMTApO2lmKHRoaXMuX19pcFt0XSl7dmFyIHc9cS5jbGllbnRXaWR0aDtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoaCxjKSl7dz13LXUteDt9ZWxzZXtpZihxeC5kb20uTm9kZS5pc0Jsb2NrTm9kZShxKSl7dz13LXUteDt9fXJldHVybiB3O31lbHNle2lmKHEuY2xpZW50V2lkdGg+PXEuc2Nyb2xsV2lkdGgpe3JldHVybiBNYXRoLm1heChxLmNsaWVudFdpZHRoLHEuc2Nyb2xsV2lkdGgpLXUteDt9ZWxzZXt2YXIgdj1xLnNjcm9sbFdpZHRoLXU7dmFyIHI9cXguYm9tLmNsaWVudC5FbmdpbmU7aWYoci5OQU1FPT09ZyYmci5WRVJTSU9OPT02KXt2LT14O31yZXR1cm4gdjt9fX0sZ2V0Q29udGVudEhlaWdodDpmdW5jdGlvbih5KXt2YXIgQT1xeC5ib20uZWxlbWVudC5TdHlsZTt2YXIgQz1xeC5ib20uZWxlbWVudC5PdmVyZmxvdy5nZXRZKHkpO3ZhciBEPXBhcnNlSW50KEEuZ2V0KHksYil8fGksMTApO3ZhciBCPXBhcnNlSW50KEEuZ2V0KHksYSl8fGksMTApO2lmKHRoaXMuX19pcFtDXSl7cmV0dXJuIHkuY2xpZW50SGVpZ2h0LUQtQjt9ZWxzZXtpZih5LmNsaWVudEhlaWdodD49eS5zY3JvbGxIZWlnaHQpe3JldHVybiBNYXRoLm1heCh5LmNsaWVudEhlaWdodCx5LnNjcm9sbEhlaWdodCktRC1CO31lbHNle3ZhciBFPXkuc2Nyb2xsSGVpZ2h0LUQ7dmFyIHo9cXguYm9tLmNsaWVudC5FbmdpbmU7aWYoei5OQU1FPT09ZyYmei5WRVJTSU9OPT02KXtFLT1CO31yZXR1cm4gRTt9fX0sZ2V0Q29udGVudFNpemU6ZnVuY3Rpb24oRil7cmV0dXJuIHt3aWR0aDp0aGlzLmdldENvbnRlbnRXaWR0aChGKSxoZWlnaHQ6dGhpcy5nZXRDb250ZW50SGVpZ2h0KEYpfTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGU9InF4LnRoZW1lLm1hbmFnZXIuRm9udCIsZD0iVGhlbWUiLGM9ImNoYW5nZVRoZW1lIixiPSJfYXBwbHlUaGVtZSIsYT0ic2luZ2xldG9uIjtxeC5DbGFzcy5kZWZpbmUoZSx7dHlwZTphLGV4dGVuZDpxeC51dGlsLlZhbHVlTWFuYWdlcixwcm9wZXJ0aWVzOnt0aGVtZTp7Y2hlY2s6ZCxudWxsYWJsZTp0cnVlLGFwcGx5OmIsZXZlbnQ6Y319LG1lbWJlcnM6e3Jlc29sdmVEeW5hbWljOmZ1bmN0aW9uKGYpe3ZhciBnPXRoaXMuX2R5bmFtaWM7cmV0dXJuIGYgaW5zdGFuY2VvZiBxeC5ib20uRm9udD9mOmdbZl07fSxyZXNvbHZlOmZ1bmN0aW9uKGgpe3ZhciBrPXRoaXMuX2R5bmFtaWM7dmFyIGk9a1toXTtpZihpKXtyZXR1cm4gaTt9dmFyIGo9dGhpcy5nZXRUaGVtZSgpO2lmKGohPT1udWxsJiZqLmZvbnRzW2hdKXtyZXR1cm4ga1toXT0obmV3IHF4LmJvbS5Gb250KS5zZXQoai5mb250c1toXSk7fXJldHVybiBoO30saXNEeW5hbWljOmZ1bmN0aW9uKGwpe3ZhciBuPXRoaXMuX2R5bmFtaWM7aWYobCYmKGwgaW5zdGFuY2VvZiBxeC5ib20uRm9udHx8bltsXSE9PXVuZGVmaW5lZCkpe3JldHVybiB0cnVlO312YXIgbT10aGlzLmdldFRoZW1lKCk7aWYobSE9PW51bGwmJmwmJm0uZm9udHNbbF0pe25bbF09KG5ldyBxeC5ib20uRm9udCkuc2V0KG0uZm9udHNbbF0pO3JldHVybiB0cnVlO31yZXR1cm4gZmFsc2U7fSxfX2lvOmZ1bmN0aW9uKG8scCl7aWYob1twXS5pbmNsdWRlKXt2YXIgcT1vW29bcF0uaW5jbHVkZV07b1twXS5pbmNsdWRlPW51bGw7ZGVsZXRlIG9bcF0uaW5jbHVkZTtvW3BdPXF4LmxhbmcuT2JqZWN0Lm1lcmdlV2l0aChvW3BdLHEsZmFsc2UpO3RoaXMuX19pbyhvLHApO319LF9hcHBseVRoZW1lOmZ1bmN0aW9uKHIpe3ZhciBzPXRoaXMuX2dldER5bmFtaWMoKTtmb3IodmFyIHYgaW4gcyl7aWYoc1t2XS50aGVtZWQpe3Nbdl0uZGlzcG9zZSgpO2RlbGV0ZSBzW3ZdO319aWYocil7dmFyIHQ9ci5mb250czt2YXIgdT1xeC5ib20uRm9udDtmb3IodmFyIHYgaW4gdCl7aWYodFt2XS5pbmNsdWRlJiZ0W3Rbdl0uaW5jbHVkZV0pe3RoaXMuX19pbyh0LHYpO31zW3ZdPShuZXcgdSkuc2V0KHRbdl0pO3Nbdl0udGhlbWVkPXRydWU7fX10aGlzLl9zZXREeW5hbWljKHMpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaz0iIixqPSJ1bmRlcmxpbmUiLGg9IkJvb2xlYW4iLGc9InB4IixmPSciJyxlPSJpdGFsaWMiLGQ9Im5vcm1hbCIsYz0iYm9sZCIsYj0iX2FwcGx5SXRhbGljIixhPSJfYXBwbHlCb2xkIix4PSJJbnRlZ2VyIix3PSJfYXBwbHlGYW1pbHkiLHY9Il9hcHBseUxpbmVIZWlnaHQiLHU9IkFycmF5Iix0PSJvdmVybGluZSIscz0ibGluZS10aHJvdWdoIixyPSJxeC5ib20uRm9udCIscT0iTnVtYmVyIixwPSJfYXBwbHlEZWNvcmF0aW9uIixvPSIgIixtPSJfYXBwbHlTaXplIixuPSIsIjtxeC5DbGFzcy5kZWZpbmUocix7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbih5LHope3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7aWYoeSE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTaXplKHkpO31pZih6IT09dW5kZWZpbmVkKXt0aGlzLnNldEZhbWlseSh6KTt9fSxzdGF0aWNzOntmcm9tU3RyaW5nOmZ1bmN0aW9uKEEpe3ZhciBFPW5ldyBxeC5ib20uRm9udCgpO3ZhciBDPUEuc3BsaXQoL1xzKy8pO3ZhciBuYW1lPVtdO3ZhciBEO2Zvcih2YXIgaT0wO2k8Qy5sZW5ndGg7aSsrKXtzd2l0Y2goRD1DW2ldKXtjYXNlIGM6RS5zZXRCb2xkKHRydWUpO2JyZWFrO2Nhc2UgZTpFLnNldEl0YWxpYyh0cnVlKTticmVhaztjYXNlIGo6RS5zZXREZWNvcmF0aW9uKGopO2JyZWFrO2RlZmF1bHQ6dmFyIEI9cGFyc2VJbnQoRCwxMCk7aWYoQj09RHx8cXgubGFuZy5TdHJpbmcuY29udGFpbnMoRCxnKSl7RS5zZXRTaXplKEIpO31lbHNle25hbWUucHVzaChEKTt9YnJlYWs7fX1pZihuYW1lLmxlbmd0aD4wKXtFLnNldEZhbWlseShuYW1lKTt9cmV0dXJuIEU7fSxmcm9tQ29uZmlnOmZ1bmN0aW9uKEYpe3ZhciBHPW5ldyBxeC5ib20uRm9udDtHLnNldChGKTtyZXR1cm4gRzt9LF9fY3k6e2ZvbnRGYW1pbHk6ayxmb250U2l6ZTprLGZvbnRXZWlnaHQ6ayxmb250U3R5bGU6ayx0ZXh0RGVjb3JhdGlvbjprLGxpbmVIZWlnaHQ6MS4yfSxnZXREZWZhdWx0U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jeTt9fSxwcm9wZXJ0aWVzOntzaXplOntjaGVjazp4LG51bGxhYmxlOnRydWUsYXBwbHk6bX0sbGluZUhlaWdodDp7Y2hlY2s6cSxudWxsYWJsZTp0cnVlLGFwcGx5OnZ9LGZhbWlseTp7Y2hlY2s6dSxudWxsYWJsZTp0cnVlLGFwcGx5Ond9LGJvbGQ6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZSxhcHBseTphfSxpdGFsaWM6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZSxhcHBseTpifSxkZWNvcmF0aW9uOntjaGVjazpbaixzLHRdLG51bGxhYmxlOnRydWUsYXBwbHk6cH19LG1lbWJlcnM6e19fY3o6bnVsbCxfX2NBOm51bGwsX19jQjpudWxsLF9fY0M6bnVsbCxfX2NEOm51bGwsX19jRTpudWxsLF9hcHBseVNpemU6ZnVuY3Rpb24oSCxJKXt0aGlzLl9fY3o9SD09PW51bGw/bnVsbDpIK2c7fSxfYXBwbHlMaW5lSGVpZ2h0OmZ1bmN0aW9uKEosSyl7dGhpcy5fX2NFPUo9PT1udWxsP251bGw6Sjt9LF9hcHBseUZhbWlseTpmdW5jdGlvbihMLE0pe3ZhciBOPWs7Zm9yKHZhciBpPTAsbD1MLmxlbmd0aDtpPGw7aSsrKXtpZihMW2ldLmluZGV4T2Yobyk+MCl7Tis9ZitMW2ldK2Y7fWVsc2V7Tis9TFtpXTt9aWYoaSE9PWwtMSl7Tis9bjt9fXRoaXMuX19jQT1OO30sX2FwcGx5Qm9sZDpmdW5jdGlvbihPLFApe3RoaXMuX19jQj1PPT09bnVsbD9udWxsOk8/YzpkO30sX2FwcGx5SXRhbGljOmZ1bmN0aW9uKFEsUil7dGhpcy5fX2NDPVE9PT1udWxsP251bGw6UT9lOmQ7fSxfYXBwbHlEZWNvcmF0aW9uOmZ1bmN0aW9uKFMsVCl7dGhpcy5fX2NEPVM9PT1udWxsP251bGw6Uzt9LGdldFN0eWxlczpmdW5jdGlvbigpe3JldHVybiB7Zm9udEZhbWlseTp0aGlzLl9fY0EsZm9udFNpemU6dGhpcy5fX2N6LGZvbnRXZWlnaHQ6dGhpcy5fX2NCLGZvbnRTdHlsZTp0aGlzLl9fY0MsdGV4dERlY29yYXRpb246dGhpcy5fX2NELGxpbmVIZWlnaHQ6dGhpcy5fX2NFfTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIHI9ImxlZnQiLHE9InRvcCIscD0iX2FwcGx5TGF5b3V0Q2hhbmdlIixvPSJoQWxpZ24iLG49ImZsZXgiLG09InZBbGlnbiIsaD0iSW50ZWdlciIsZz0ibWluV2lkdGgiLGY9IndpZHRoIixlPSJtaW5IZWlnaHQiLGI9InF4LnVpLmxheW91dC5HcmlkIixkPSJoZWlnaHQiLGM9Im1heEhlaWdodCIsYT0ibWF4V2lkdGgiO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6cXgudWkubGF5b3V0LkFic3RyYWN0LGNvbnN0cnVjdDpmdW5jdGlvbihzLHQpe3F4LnVpLmxheW91dC5BYnN0cmFjdC5jYWxsKHRoaXMpO3RoaXMuX19pRj1bXTt0aGlzLl9faUc9W107aWYocyl7dGhpcy5zZXRTcGFjaW5nWChzKTt9aWYodCl7dGhpcy5zZXRTcGFjaW5nWSh0KTt9fSxwcm9wZXJ0aWVzOntzcGFjaW5nWDp7Y2hlY2s6aCxpbml0OjAsYXBwbHk6cH0sc3BhY2luZ1k6e2NoZWNrOmgsaW5pdDowLGFwcGx5OnB9fSxtZW1iZXJzOntfX2lIOm51bGwsX19pRjpudWxsLF9faUc6bnVsbCxfX2lJOm51bGwsX19pSjpudWxsLF9faUs6bnVsbCxfX2lMOm51bGwsX19pTTpudWxsLF9faU46bnVsbCx2ZXJpZnlMYXlvdXRQcm9wZXJ0eTpudWxsLF9faU86ZnVuY3Rpb24oKXt2YXIgQj1bXTt2YXIgQT1bXTt2YXIgQz1bXTt2YXIgdz0tMTt2YXIgdj0tMTt2YXIgRT10aGlzLl9nZXRMYXlvdXRDaGlsZHJlbigpO2Zvcih2YXIgaT0wLGw9RS5sZW5ndGg7aTxsO2krKyl7dmFyIHo9RVtpXTt2YXIgRD16LmdldExheW91dFByb3BlcnRpZXMoKTt2YXIgRj1ELnJvdzt2YXIgdT1ELmNvbHVtbjtELmNvbFNwYW49RC5jb2xTcGFufHwxO0Qucm93U3Bhbj1ELnJvd1NwYW58fDE7aWYoRj09bnVsbHx8dT09bnVsbCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgbGF5b3V0IHByb3BlcnRpZXMgJ3JvdycgYW5kICdjb2x1bW4nIG9mIHRoZSBjaGlsZCB3aWRnZXQgJyIreisiJyBtdXN0IGJlIGRlZmluZWQhIik7fWlmKEJbRl0mJkJbRl1bdV0pe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGFkZCB3aWRnZXQgJyIreisiJyEuICIrIlRoZXJlIGlzIGFscmVhZHkgYSB3aWRnZXQgJyIrQltGXVt1XSsiJyBpbiB0aGlzIGNlbGwgKCIrRisiLCAiK3UrIikiKTt9Zm9yKHZhciB4PXU7eDx1K0QuY29sU3Bhbjt4Kyspe2Zvcih2YXIgeT1GO3k8RitELnJvd1NwYW47eSsrKXtpZihCW3ldPT11bmRlZmluZWQpe0JbeV09W107fUJbeV1beF09ejt2PU1hdGgubWF4KHYseCk7dz1NYXRoLm1heCh3LHkpO319aWYoRC5yb3dTcGFuPjEpe0MucHVzaCh6KTt9aWYoRC5jb2xTcGFuPjEpe0EucHVzaCh6KTt9fWZvcih2YXIgeT0wO3k8PXc7eSsrKXtpZihCW3ldPT11bmRlZmluZWQpe0JbeV09W107fX10aGlzLl9faUg9Qjt0aGlzLl9faUk9QTt0aGlzLl9faUo9Qzt0aGlzLl9faUs9dzt0aGlzLl9faUw9djt0aGlzLl9faU09bnVsbDt0aGlzLl9faU49bnVsbDtkZWxldGUgdGhpcy5faW52YWxpZENoaWxkcmVuQ2FjaGU7fSxfc2V0Um93RGF0YTpmdW5jdGlvbihHLEgsSSl7dmFyIEo9dGhpcy5fX2lGW0ddO2lmKCFKKXt0aGlzLl9faUZbR109e307dGhpcy5fX2lGW0ddW0hdPUk7fWVsc2V7SltIXT1JO319LF9zZXRDb2x1bW5EYXRhOmZ1bmN0aW9uKEssTCxNKXt2YXIgTj10aGlzLl9faUdbS107aWYoIU4pe3RoaXMuX19pR1tLXT17fTt0aGlzLl9faUdbS11bTF09TTt9ZWxzZXtOW0xdPU07fX0sc2V0U3BhY2luZzpmdW5jdGlvbihPKXt0aGlzLnNldFNwYWNpbmdZKE8pO3RoaXMuc2V0U3BhY2luZ1goTyk7cmV0dXJuIHRoaXM7fSxzZXRDb2x1bW5BbGlnbjpmdW5jdGlvbihQLFEsUil7e307dGhpcy5fc2V0Q29sdW1uRGF0YShQLG8sUSk7dGhpcy5fc2V0Q29sdW1uRGF0YShQLG0sUik7dGhpcy5fYXBwbHlMYXlvdXRDaGFuZ2UoKTtyZXR1cm4gdGhpczt9LGdldENvbHVtbkFsaWduOmZ1bmN0aW9uKFMpe3ZhciBUPXRoaXMuX19pR1tTXXx8e307cmV0dXJuIHt2QWxpZ246VC52QWxpZ258fHEsaEFsaWduOlQuaEFsaWdufHxyfTt9LHNldFJvd0FsaWduOmZ1bmN0aW9uKFUsVixXKXt7fTt0aGlzLl9zZXRSb3dEYXRhKFUsbyxWKTt0aGlzLl9zZXRSb3dEYXRhKFUsbSxXKTt0aGlzLl9hcHBseUxheW91dENoYW5nZSgpO3JldHVybiB0aGlzO30sZ2V0Um93QWxpZ246ZnVuY3Rpb24oWCl7dmFyIFk9dGhpcy5fX2lGW1hdfHx7fTtyZXR1cm4ge3ZBbGlnbjpZLnZBbGlnbnx8cSxoQWxpZ246WS5oQWxpZ258fHJ9O30sZ2V0Q2VsbFdpZGdldDpmdW5jdGlvbihiYSxiYil7aWYodGhpcy5faW52YWxpZENoaWxkcmVuQ2FjaGUpe3RoaXMuX19pTygpO312YXIgYmE9dGhpcy5fX2lIW2JhXXx8e307cmV0dXJuIGJhW2JiXXx8bnVsbDt9LGdldFJvd0NvdW50OmZ1bmN0aW9uKCl7aWYodGhpcy5faW52YWxpZENoaWxkcmVuQ2FjaGUpe3RoaXMuX19pTygpO31yZXR1cm4gdGhpcy5fX2lLKzE7fSxnZXRDb2x1bW5Db3VudDpmdW5jdGlvbigpe2lmKHRoaXMuX2ludmFsaWRDaGlsZHJlbkNhY2hlKXt0aGlzLl9faU8oKTt9cmV0dXJuIHRoaXMuX19pTCsxO30sZ2V0Q2VsbEFsaWduOmZ1bmN0aW9uKGJjLGJkKXt2YXIgYmo9cTt2YXIgYmg9cjt2YXIgYmk9dGhpcy5fX2lGW2JjXTt2YXIgYmY9dGhpcy5fX2lHW2JkXTt2YXIgYmU9dGhpcy5fX2lIW2JjXVtiZF07aWYoYmUpe3ZhciBiZz17dkFsaWduOmJlLmdldEFsaWduWSgpLGhBbGlnbjpiZS5nZXRBbGlnblgoKX07fWVsc2V7Ymc9e307fWlmKGJnLnZBbGlnbil7Ymo9YmcudkFsaWduO31lbHNlIGlmKGJpJiZiaS52QWxpZ24pe2JqPWJpLnZBbGlnbjt9ZWxzZSBpZihiZiYmYmYudkFsaWduKXtiaj1iZi52QWxpZ247fWlmKGJnLmhBbGlnbil7Ymg9YmcuaEFsaWduO31lbHNlIGlmKGJmJiZiZi5oQWxpZ24pe2JoPWJmLmhBbGlnbjt9ZWxzZSBpZihiaSYmYmkuaEFsaWduKXtiaD1iaS5oQWxpZ247fXJldHVybiB7dkFsaWduOmJqLGhBbGlnbjpiaH07fSxzZXRDb2x1bW5GbGV4OmZ1bmN0aW9uKGJrLGJsKXt0aGlzLl9zZXRDb2x1bW5EYXRhKGJrLG4sYmwpO3RoaXMuX2FwcGx5TGF5b3V0Q2hhbmdlKCk7cmV0dXJuIHRoaXM7fSxnZXRDb2x1bW5GbGV4OmZ1bmN0aW9uKGJtKXt2YXIgYm49dGhpcy5fX2lHW2JtXXx8e307cmV0dXJuIGJuLmZsZXghPT11bmRlZmluZWQ/Ym4uZmxleDowO30sc2V0Um93RmxleDpmdW5jdGlvbihibyxicCl7dGhpcy5fc2V0Um93RGF0YShibyxuLGJwKTt0aGlzLl9hcHBseUxheW91dENoYW5nZSgpO3JldHVybiB0aGlzO30sZ2V0Um93RmxleDpmdW5jdGlvbihicSl7dmFyIGJyPXRoaXMuX19pRlticV18fHt9O3ZhciBicz1ici5mbGV4IT09dW5kZWZpbmVkP2JyLmZsZXg6MDtyZXR1cm4gYnM7fSxzZXRDb2x1bW5NYXhXaWR0aDpmdW5jdGlvbihidCxidSl7dGhpcy5fc2V0Q29sdW1uRGF0YShidCxhLGJ1KTt0aGlzLl9hcHBseUxheW91dENoYW5nZSgpO3JldHVybiB0aGlzO30sZ2V0Q29sdW1uTWF4V2lkdGg6ZnVuY3Rpb24oYnYpe3ZhciBidz10aGlzLl9faUdbYnZdfHx7fTtyZXR1cm4gYncubWF4V2lkdGghPT11bmRlZmluZWQ/YncubWF4V2lkdGg6SW5maW5pdHk7fSxzZXRDb2x1bW5XaWR0aDpmdW5jdGlvbihieCxieSl7dGhpcy5fc2V0Q29sdW1uRGF0YShieCxmLGJ5KTt0aGlzLl9hcHBseUxheW91dENoYW5nZSgpO3JldHVybiB0aGlzO30sZ2V0Q29sdW1uV2lkdGg6ZnVuY3Rpb24oYnope3ZhciBiQT10aGlzLl9faUdbYnpdfHx7fTtyZXR1cm4gYkEud2lkdGghPT11bmRlZmluZWQ/YkEud2lkdGg6bnVsbDt9LHNldENvbHVtbk1pbldpZHRoOmZ1bmN0aW9uKGJCLGJDKXt0aGlzLl9zZXRDb2x1bW5EYXRhKGJCLGcsYkMpO3RoaXMuX2FwcGx5TGF5b3V0Q2hhbmdlKCk7cmV0dXJuIHRoaXM7fSxnZXRDb2x1bW5NaW5XaWR0aDpmdW5jdGlvbihiRCl7dmFyIGJFPXRoaXMuX19pR1tiRF18fHt9O3JldHVybiBiRS5taW5XaWR0aHx8MDt9LHNldFJvd01heEhlaWdodDpmdW5jdGlvbihiRixiRyl7dGhpcy5fc2V0Um93RGF0YShiRixjLGJHKTt0aGlzLl9hcHBseUxheW91dENoYW5nZSgpO3JldHVybiB0aGlzO30sZ2V0Um93TWF4SGVpZ2h0OmZ1bmN0aW9uKGJIKXt2YXIgYkk9dGhpcy5fX2lGW2JIXXx8e307cmV0dXJuIGJJLm1heEhlaWdodHx8SW5maW5pdHk7fSxzZXRSb3dIZWlnaHQ6ZnVuY3Rpb24oYkosYkspe3RoaXMuX3NldFJvd0RhdGEoYkosZCxiSyk7dGhpcy5fYXBwbHlMYXlvdXRDaGFuZ2UoKTtyZXR1cm4gdGhpczt9LGdldFJvd0hlaWdodDpmdW5jdGlvbihiTCl7dmFyIGJNPXRoaXMuX19pRltiTF18fHt9O3JldHVybiBiTS5oZWlnaHQhPT11bmRlZmluZWQ/Yk0uaGVpZ2h0Om51bGw7fSxzZXRSb3dNaW5IZWlnaHQ6ZnVuY3Rpb24oYk4sYk8pe3RoaXMuX3NldFJvd0RhdGEoYk4sZSxiTyk7dGhpcy5fYXBwbHlMYXlvdXRDaGFuZ2UoKTtyZXR1cm4gdGhpczt9LGdldFJvd01pbkhlaWdodDpmdW5jdGlvbihiUCl7dmFyIGJRPXRoaXMuX19pRltiUF18fHt9O3JldHVybiBiUS5taW5IZWlnaHR8fDA7fSxfX2lQOmZ1bmN0aW9uKGJSKXt2YXIgYlY9YlIuZ2V0U2l6ZUhpbnQoKTt2YXIgYlU9YlIuZ2V0TWFyZ2luTGVmdCgpK2JSLmdldE1hcmdpblJpZ2h0KCk7dmFyIGJUPWJSLmdldE1hcmdpblRvcCgpK2JSLmdldE1hcmdpbkJvdHRvbSgpO3ZhciBiUz17aGVpZ2h0OmJWLmhlaWdodCtiVCx3aWR0aDpiVi53aWR0aCtiVSxtaW5IZWlnaHQ6YlYubWluSGVpZ2h0K2JULG1pbldpZHRoOmJWLm1pbldpZHRoK2JVLG1heEhlaWdodDpiVi5tYXhIZWlnaHQrYlQsbWF4V2lkdGg6YlYubWF4V2lkdGgrYlV9O3JldHVybiBiUzt9LF9maXhIZWlnaHRzUm93U3BhbjpmdW5jdGlvbihiVyl7dmFyIGNrPXRoaXMuZ2V0U3BhY2luZ1koKTtmb3IodmFyIGk9MCxsPXRoaXMuX19pSi5sZW5ndGg7aTxsO2krKyl7dmFyIGNhPXRoaXMuX19pSltpXTt2YXIgY2M9dGhpcy5fX2lQKGNhKTt2YXIgY2Q9Y2EuZ2V0TGF5b3V0UHJvcGVydGllcygpO3ZhciBiWT1jZC5yb3c7dmFyIGNpPWNrKihjZC5yb3dTcGFuLTEpO3ZhciBiWD1jaTt2YXIgY2Y9e307Zm9yKHZhciBqPTA7ajxjZC5yb3dTcGFuO2orKyl7dmFyIGNtPWNkLnJvdytqO3ZhciBjYj1iV1tjbV07dmFyIGNsPXRoaXMuZ2V0Um93RmxleChjbSk7aWYoY2w+MCl7Y2ZbY21dPXttaW46Y2IubWluSGVpZ2h0LHZhbHVlOmNiLmhlaWdodCxtYXg6Y2IubWF4SGVpZ2h0LGZsZXg6Y2x9O31jaSs9Y2IuaGVpZ2h0O2JYKz1jYi5taW5IZWlnaHQ7fWlmKGNpPGNjLmhlaWdodCl7aWYoIXF4LmxhbmcuT2JqZWN0LmlzRW1wdHkoY2YpKXt2YXIgY2o9cXgudWkubGF5b3V0LlV0aWwuY29tcHV0ZUZsZXhPZmZzZXRzKGNmLGNjLmhlaWdodCxjaSk7Zm9yKHZhciBrPTA7azxjZC5yb3dTcGFuO2srKyl7dmFyIGNlPWNqW2JZK2tdP2NqW2JZK2tdLm9mZnNldDowO2JXW2JZK2tdLmhlaWdodCs9Y2U7fX1lbHNle3ZhciBjZz1jayooY2Qucm93U3Bhbi0xKTt2YXIgY2g9Y2MuaGVpZ2h0LWNnO3ZhciBjYj1NYXRoLmZsb29yKGNoL2NkLnJvd1NwYW4pO2Zvcih2YXIgaz0wO2s8Y2Qucm93U3BhbjtrKyspe2JXW2JZK2tdLmhlaWdodD1jYjt9fX1pZihiWDxjYy5taW5IZWlnaHQpe3ZhciBjaj1xeC51aS5sYXlvdXQuVXRpbC5jb21wdXRlRmxleE9mZnNldHMoY2YsY2MubWluSGVpZ2h0LGJYKTtmb3IodmFyIGo9MDtqPGNkLnJvd1NwYW47aisrKXt2YXIgY2U9Y2pbYlkral0/Y2pbYlkral0ub2Zmc2V0OjA7YldbYlkral0ubWluSGVpZ2h0Kz1jZTt9fX19LF9maXhXaWR0aHNDb2xTcGFuOmZ1bmN0aW9uKGNuKXt2YXIgY3I9dGhpcy5nZXRTcGFjaW5nWCgpO2Zvcih2YXIgaT0wLGw9dGhpcy5fX2lJLmxlbmd0aDtpPGw7aSsrKXt2YXIgY289dGhpcy5fX2lJW2ldO3ZhciBjcT10aGlzLl9faVAoY28pO3ZhciBjdD1jby5nZXRMYXlvdXRQcm9wZXJ0aWVzKCk7dmFyIGNwPWN0LmNvbHVtbjt2YXIgY3o9Y3IqKGN0LmNvbFNwYW4tMSk7dmFyIGNzPWN6O3ZhciBjdT17fTt2YXIgY3c7Zm9yKHZhciBqPTA7ajxjdC5jb2xTcGFuO2orKyl7dmFyIGNBPWN0LmNvbHVtbitqO3ZhciBjeT1jbltjQV07dmFyIGN4PXRoaXMuZ2V0Q29sdW1uRmxleChjQSk7aWYoY3g+MCl7Y3VbY0FdPXttaW46Y3kubWluV2lkdGgsdmFsdWU6Y3kud2lkdGgsbWF4OmN5Lm1heFdpZHRoLGZsZXg6Y3h9O31jeis9Y3kud2lkdGg7Y3MrPWN5Lm1pbldpZHRoO31pZihjejxjcS53aWR0aCl7dmFyIGN2PXF4LnVpLmxheW91dC5VdGlsLmNvbXB1dGVGbGV4T2Zmc2V0cyhjdSxjcS53aWR0aCxjeik7Zm9yKHZhciBqPTA7ajxjdC5jb2xTcGFuO2orKyl7Y3c9Y3ZbY3Aral0/Y3ZbY3Aral0ub2Zmc2V0OjA7Y25bY3Aral0ud2lkdGgrPWN3O319aWYoY3M8Y3EubWluV2lkdGgpe3ZhciBjdj1xeC51aS5sYXlvdXQuVXRpbC5jb21wdXRlRmxleE9mZnNldHMoY3UsY3EubWluV2lkdGgsY3MpO2Zvcih2YXIgaj0wO2o8Y3QuY29sU3BhbjtqKyspe2N3PWN2W2NwK2pdP2N2W2NwK2pdLm9mZnNldDowO2NuW2NwK2pdLm1pbldpZHRoKz1jdzt9fX19LF9nZXRSb3dIZWlnaHRzOmZ1bmN0aW9uKCl7aWYodGhpcy5fX2lNIT1udWxsKXtyZXR1cm4gdGhpcy5fX2lNO312YXIgY0s9W107dmFyIGNEPXRoaXMuX19pSzt2YXIgY0M9dGhpcy5fX2lMO2Zvcih2YXIgY0w9MDtjTDw9Y0Q7Y0wrKyl7dmFyIGNFPTA7dmFyIGNHPTA7dmFyIGNGPTA7Zm9yKHZhciBjSj0wO2NKPD1jQztjSisrKXt2YXIgY0I9dGhpcy5fX2lIW2NMXVtjSl07aWYoIWNCKXtjb250aW51ZTt9dmFyIGNIPWNCLmdldExheW91dFByb3BlcnRpZXMoKS5yb3dTcGFufHwwO2lmKGNIPjEpe2NvbnRpbnVlO312YXIgY0k9dGhpcy5fX2lQKGNCKTtpZih0aGlzLmdldFJvd0ZsZXgoY0wpPjApe2NFPU1hdGgubWF4KGNFLGNJLm1pbkhlaWdodCk7fWVsc2V7Y0U9TWF0aC5tYXgoY0UsY0kuaGVpZ2h0KTt9Y0c9TWF0aC5tYXgoY0csY0kuaGVpZ2h0KTt9dmFyIGNFPU1hdGgubWF4KGNFLHRoaXMuZ2V0Um93TWluSGVpZ2h0KGNMKSk7dmFyIGNGPXRoaXMuZ2V0Um93TWF4SGVpZ2h0KGNMKTtpZih0aGlzLmdldFJvd0hlaWdodChjTCkhPT1udWxsKXt2YXIgY0c9dGhpcy5nZXRSb3dIZWlnaHQoY0wpO31lbHNle3ZhciBjRz1NYXRoLm1heChjRSxNYXRoLm1pbihjRyxjRikpO31jS1tjTF09e21pbkhlaWdodDpjRSxoZWlnaHQ6Y0csbWF4SGVpZ2h0OmNGfTt9aWYodGhpcy5fX2lKLmxlbmd0aD4wKXt0aGlzLl9maXhIZWlnaHRzUm93U3BhbihjSyk7fXRoaXMuX19pTT1jSztyZXR1cm4gY0s7fSxfZ2V0Q29sV2lkdGhzOmZ1bmN0aW9uKCl7aWYodGhpcy5fX2lOIT1udWxsKXtyZXR1cm4gdGhpcy5fX2lOO312YXIgY1E9W107dmFyIGNOPXRoaXMuX19pTDt2YXIgY1A9dGhpcy5fX2lLO2Zvcih2YXIgY1Y9MDtjVjw9Y047Y1YrKyl7dmFyIGNUPTA7dmFyIGNTPTA7dmFyIGNPPUluZmluaXR5O2Zvcih2YXIgY1c9MDtjVzw9Y1A7Y1crKyl7dmFyIGNNPXRoaXMuX19pSFtjV11bY1ZdO2lmKCFjTSl7Y29udGludWU7fXZhciBjUj1jTS5nZXRMYXlvdXRQcm9wZXJ0aWVzKCkuY29sU3Bhbnx8MDtpZihjUj4xKXtjb250aW51ZTt9dmFyIGNVPXRoaXMuX19pUChjTSk7aWYodGhpcy5nZXRDb2x1bW5GbGV4KGNWKT4wKXtjUz1NYXRoLm1heChjUyxjVS5taW5XaWR0aCk7fWVsc2V7Y1M9TWF0aC5tYXgoY1MsY1Uud2lkdGgpO31jVD1NYXRoLm1heChjVCxjVS53aWR0aCk7fXZhciBjUz1NYXRoLm1heChjUyx0aGlzLmdldENvbHVtbk1pbldpZHRoKGNWKSk7dmFyIGNPPXRoaXMuZ2V0Q29sdW1uTWF4V2lkdGgoY1YpO2lmKHRoaXMuZ2V0Q29sdW1uV2lkdGgoY1YpIT09bnVsbCl7dmFyIGNUPXRoaXMuZ2V0Q29sdW1uV2lkdGgoY1YpO31lbHNle3ZhciBjVD1NYXRoLm1heChjUyxNYXRoLm1pbihjVCxjTykpO31jUVtjVl09e21pbldpZHRoOmNTLHdpZHRoOmNULG1heFdpZHRoOmNPfTt9aWYodGhpcy5fX2lJLmxlbmd0aD4wKXt0aGlzLl9maXhXaWR0aHNDb2xTcGFuKGNRKTt9dGhpcy5fX2lOPWNRO3JldHVybiBjUTt9LF9nZXRDb2x1bW5GbGV4T2Zmc2V0czpmdW5jdGlvbihjWCl7dmFyIGNZPXRoaXMuZ2V0U2l6ZUhpbnQoKTt2YXIgZGQ9Y1gtY1kud2lkdGg7aWYoZGQ9PTApe3JldHVybiB7fTt9dmFyIGRiPXRoaXMuX2dldENvbFdpZHRocygpO3ZhciBkYT17fTtmb3IodmFyIGk9MCxsPWRiLmxlbmd0aDtpPGw7aSsrKXt2YXIgZGU9ZGJbaV07dmFyIGRjPXRoaXMuZ2V0Q29sdW1uRmxleChpKTtpZigoZGM8PTApfHwoZGUud2lkdGg9PWRlLm1heFdpZHRoJiZkZD4wKXx8KGRlLndpZHRoPT1kZS5taW5XaWR0aCYmZGQ8MCkpe2NvbnRpbnVlO31kYVtpXT17bWluOmRlLm1pbldpZHRoLHZhbHVlOmRlLndpZHRoLG1heDpkZS5tYXhXaWR0aCxmbGV4OmRjfTt9cmV0dXJuIHF4LnVpLmxheW91dC5VdGlsLmNvbXB1dGVGbGV4T2Zmc2V0cyhkYSxjWCxjWS53aWR0aCk7fSxfZ2V0Um93RmxleE9mZnNldHM6ZnVuY3Rpb24oZGYpe3ZhciBkZz10aGlzLmdldFNpemVIaW50KCk7dmFyIGRqPWRmLWRnLmhlaWdodDtpZihkaj09MCl7cmV0dXJuIHt9O312YXIgZGs9dGhpcy5fZ2V0Um93SGVpZ2h0cygpO3ZhciBkaD17fTtmb3IodmFyIGk9MCxsPWRrLmxlbmd0aDtpPGw7aSsrKXt2YXIgZGw9ZGtbaV07dmFyIGRpPXRoaXMuZ2V0Um93RmxleChpKTtpZigoZGk8PTApfHwoZGwuaGVpZ2h0PT1kbC5tYXhIZWlnaHQmJmRqPjApfHwoZGwuaGVpZ2h0PT1kbC5taW5IZWlnaHQmJmRqPDApKXtjb250aW51ZTt9ZGhbaV09e21pbjpkbC5taW5IZWlnaHQsdmFsdWU6ZGwuaGVpZ2h0LG1heDpkbC5tYXhIZWlnaHQsZmxleDpkaX07fXJldHVybiBxeC51aS5sYXlvdXQuVXRpbC5jb21wdXRlRmxleE9mZnNldHMoZGgsZGYsZGcuaGVpZ2h0KTt9LHJlbmRlckxheW91dDpmdW5jdGlvbihkbSxkbil7aWYodGhpcy5faW52YWxpZENoaWxkcmVuQ2FjaGUpe3RoaXMuX19pTygpO312YXIgZEM9cXgudWkubGF5b3V0LlV0aWw7dmFyIGRxPXRoaXMuZ2V0U3BhY2luZ1goKTt2YXIgZHc9dGhpcy5nZXRTcGFjaW5nWSgpO3ZhciBkSD10aGlzLl9nZXRDb2xXaWR0aHMoKTt2YXIgZEc9dGhpcy5fZ2V0Q29sdW1uRmxleE9mZnNldHMoZG0pO3ZhciBkcj1bXTt2YXIgZEo9dGhpcy5fX2lMO3ZhciBkcD10aGlzLl9faUs7dmFyIGRJO2Zvcih2YXIgZEs9MDtkSzw9ZEo7ZEsrKyl7ZEk9ZEdbZEtdP2RHW2RLXS5vZmZzZXQ6MDtkcltkS109ZEhbZEtdLndpZHRoK2RJO312YXIgZHo9dGhpcy5fZ2V0Um93SGVpZ2h0cygpO3ZhciBkQj10aGlzLl9nZXRSb3dGbGV4T2Zmc2V0cyhkbik7dmFyIGRRPVtdO2Zvcih2YXIgZHg9MDtkeDw9ZHA7ZHgrKyl7ZEk9ZEJbZHhdP2RCW2R4XS5vZmZzZXQ6MDtkUVtkeF09ZHpbZHhdLmhlaWdodCtkSTt9dmFyIGRSPTA7Zm9yKHZhciBkSz0wO2RLPD1kSjtkSysrKXt2YXIgdG9wPTA7Zm9yKHZhciBkeD0wO2R4PD1kcDtkeCsrKXt2YXIgZEU9dGhpcy5fX2lIW2R4XVtkS107aWYoIWRFKXt0b3ArPWRRW2R4XStkdztjb250aW51ZTt9dmFyIGRzPWRFLmdldExheW91dFByb3BlcnRpZXMoKTtpZihkcy5yb3chPT1keHx8ZHMuY29sdW1uIT09ZEspe3RvcCs9ZFFbZHhdK2R3O2NvbnRpbnVlO312YXIgZFA9ZHEqKGRzLmNvbFNwYW4tMSk7Zm9yKHZhciBpPTA7aTxkcy5jb2xTcGFuO2krKyl7ZFArPWRyW2RLK2ldO312YXIgZEY9ZHcqKGRzLnJvd1NwYW4tMSk7Zm9yKHZhciBpPTA7aTxkcy5yb3dTcGFuO2krKyl7ZEYrPWRRW2R4K2ldO312YXIgZHQ9ZEUuZ2V0U2l6ZUhpbnQoKTt2YXIgZE49ZEUuZ2V0TWFyZ2luVG9wKCk7dmFyIGREPWRFLmdldE1hcmdpbkxlZnQoKTt2YXIgZEE9ZEUuZ2V0TWFyZ2luQm90dG9tKCk7dmFyIGR2PWRFLmdldE1hcmdpblJpZ2h0KCk7dmFyIGR5PU1hdGgubWF4KGR0Lm1pbldpZHRoLE1hdGgubWluKGRQLWRELWR2LGR0Lm1heFdpZHRoKSk7dmFyIGRPPU1hdGgubWF4KGR0Lm1pbkhlaWdodCxNYXRoLm1pbihkRi1kTi1kQSxkdC5tYXhIZWlnaHQpKTt2YXIgZEw9dGhpcy5nZXRDZWxsQWxpZ24oZHgsZEspO3ZhciBkTT1kUitkQy5jb21wdXRlSG9yaXpvbnRhbEFsaWduT2Zmc2V0KGRMLmhBbGlnbixkeSxkUCxkRCxkdik7dmFyIGR1PXRvcCtkQy5jb21wdXRlVmVydGljYWxBbGlnbk9mZnNldChkTC52QWxpZ24sZE8sZEYsZE4sZEEpO2RFLnJlbmRlckxheW91dChkTSxkdSxkeSxkTyk7dG9wKz1kUVtkeF0rZHc7fWRSKz1kcltkS10rZHE7fX0saW52YWxpZGF0ZUxheW91dENhY2hlOmZ1bmN0aW9uKCl7cXgudWkubGF5b3V0LkFic3RyYWN0LnByb3RvdHlwZS5pbnZhbGlkYXRlTGF5b3V0Q2FjaGUuY2FsbCh0aGlzKTt0aGlzLl9faU49bnVsbDt0aGlzLl9faU09bnVsbDt9LF9jb21wdXRlU2l6ZUhpbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9pbnZhbGlkQ2hpbGRyZW5DYWNoZSl7dGhpcy5fX2lPKCk7fXZhciBkVz10aGlzLl9nZXRDb2xXaWR0aHMoKTt2YXIgZFk9MCxlYT0wO2Zvcih2YXIgaT0wLGw9ZFcubGVuZ3RoO2k8bDtpKyspe3ZhciBlYj1kV1tpXTtpZih0aGlzLmdldENvbHVtbkZsZXgoaSk+MCl7ZFkrPWViLm1pbldpZHRoO31lbHNle2RZKz1lYi53aWR0aDt9ZWErPWViLndpZHRoO312YXIgZWM9dGhpcy5fZ2V0Um93SGVpZ2h0cygpO3ZhciBkVT0wLGRYPTA7Zm9yKHZhciBpPTAsbD1lYy5sZW5ndGg7aTxsO2krKyl7dmFyIGVkPWVjW2ldO2lmKHRoaXMuZ2V0Um93RmxleChpKT4wKXtkVSs9ZWQubWluSGVpZ2h0O31lbHNle2RVKz1lZC5oZWlnaHQ7fWRYKz1lZC5oZWlnaHQ7fXZhciBkVD10aGlzLmdldFNwYWNpbmdYKCkqKGRXLmxlbmd0aC0xKTt2YXIgZFM9dGhpcy5nZXRTcGFjaW5nWSgpKihlYy5sZW5ndGgtMSk7dmFyIGRWPXttaW5XaWR0aDpkWStkVCx3aWR0aDplYStkVCxtaW5IZWlnaHQ6ZFUrZFMsaGVpZ2h0OmRYK2RTfTtyZXR1cm4gZFY7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9faUg9dGhpcy5fX2lGPXRoaXMuX19pRz10aGlzLl9faUk9dGhpcy5fX2lKPXRoaXMuX19pTj10aGlzLl9faU09bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0ibnVtYmVyIixhPSJxeC51aS5sYXlvdXQuQ2FudmFzIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LnVpLmxheW91dC5BYnN0cmFjdCxtZW1iZXJzOnt2ZXJpZnlMYXlvdXRQcm9wZXJ0eTpudWxsLHJlbmRlckxheW91dDpmdW5jdGlvbihjLGQpe3ZhciBxPXRoaXMuX2dldExheW91dENoaWxkcmVuKCk7dmFyIGcscCxuO3ZhciBzLHRvcCxlLGYsaixoO3ZhciBvLG0scixrO2Zvcih2YXIgaT0wLGw9cS5sZW5ndGg7aTxsO2krKyl7Zz1xW2ldO3A9Zy5nZXRTaXplSGludCgpO249Zy5nZXRMYXlvdXRQcm9wZXJ0aWVzKCk7bz1nLmdldE1hcmdpblRvcCgpO209Zy5nZXRNYXJnaW5SaWdodCgpO3I9Zy5nZXRNYXJnaW5Cb3R0b20oKTtrPWcuZ2V0TWFyZ2luTGVmdCgpO3M9bi5sZWZ0IT1udWxsP24ubGVmdDpuLmVkZ2U7aWYocXgubGFuZy5UeXBlLmlzU3RyaW5nKHMpKXtzPU1hdGgucm91bmQocGFyc2VGbG9hdChzKSpjLzEwMCk7fWU9bi5yaWdodCE9bnVsbD9uLnJpZ2h0Om4uZWRnZTtpZihxeC5sYW5nLlR5cGUuaXNTdHJpbmcoZSkpe2U9TWF0aC5yb3VuZChwYXJzZUZsb2F0KGUpKmMvMTAwKTt9dG9wPW4udG9wIT1udWxsP24udG9wOm4uZWRnZTtpZihxeC5sYW5nLlR5cGUuaXNTdHJpbmcodG9wKSl7dG9wPU1hdGgucm91bmQocGFyc2VGbG9hdCh0b3ApKmQvMTAwKTt9Zj1uLmJvdHRvbSE9bnVsbD9uLmJvdHRvbTpuLmVkZ2U7aWYocXgubGFuZy5UeXBlLmlzU3RyaW5nKGYpKXtmPU1hdGgucm91bmQocGFyc2VGbG9hdChmKSpkLzEwMCk7fWlmKHMhPW51bGwmJmUhPW51bGwpe2o9Yy1zLWUtay1tO2lmKGo8cC5taW5XaWR0aCl7aj1wLm1pbldpZHRoO31lbHNlIGlmKGo+cC5tYXhXaWR0aCl7aj1wLm1heFdpZHRoO31zKz1rO31lbHNle2o9bi53aWR0aDtpZihqPT1udWxsKXtqPXAud2lkdGg7fWVsc2V7aj1NYXRoLnJvdW5kKHBhcnNlRmxvYXQoaikqYy8xMDApO2lmKGo8cC5taW5XaWR0aCl7aj1wLm1pbldpZHRoO31lbHNlIGlmKGo+cC5tYXhXaWR0aCl7aj1wLm1heFdpZHRoO319aWYoZSE9bnVsbCl7cz1jLWotZS1tLWs7fWVsc2UgaWYocz09bnVsbCl7cz1rO31lbHNle3MrPWs7fX1pZih0b3AhPW51bGwmJmYhPW51bGwpe2g9ZC10b3AtZi1vLXI7aWYoaDxwLm1pbkhlaWdodCl7aD1wLm1pbkhlaWdodDt9ZWxzZSBpZihoPnAubWF4SGVpZ2h0KXtoPXAubWF4SGVpZ2h0O310b3ArPW87fWVsc2V7aD1uLmhlaWdodDtpZihoPT1udWxsKXtoPXAuaGVpZ2h0O31lbHNle2g9TWF0aC5yb3VuZChwYXJzZUZsb2F0KGgpKmQvMTAwKTtpZihoPHAubWluSGVpZ2h0KXtoPXAubWluSGVpZ2h0O31lbHNlIGlmKGg+cC5tYXhIZWlnaHQpe2g9cC5tYXhIZWlnaHQ7fX1pZihmIT1udWxsKXt0b3A9ZC1oLWYtci1vO31lbHNlIGlmKHRvcD09bnVsbCl7dG9wPW87fWVsc2V7dG9wKz1vO319Zy5yZW5kZXJMYXlvdXQocyx0b3AsaixoKTt9fSxfY29tcHV0ZVNpemVIaW50OmZ1bmN0aW9uKCl7dmFyIEk9MCxIPTA7dmFyIEY9MCxEPTA7dmFyIEIsQTt2YXIgeix4O3ZhciB0PXRoaXMuX2dldExheW91dENoaWxkcmVuKCk7dmFyIHcsRyx2O3ZhciBKLHRvcCx1LHk7Zm9yKHZhciBpPTAsbD10Lmxlbmd0aDtpPGw7aSsrKXt3PXRbaV07Rz13LmdldExheW91dFByb3BlcnRpZXMoKTt2PXcuZ2V0U2l6ZUhpbnQoKTt2YXIgRT13LmdldE1hcmdpbkxlZnQoKSt3LmdldE1hcmdpblJpZ2h0KCk7dmFyIEM9dy5nZXRNYXJnaW5Ub3AoKSt3LmdldE1hcmdpbkJvdHRvbSgpO0I9di53aWR0aCtFO0E9di5taW5XaWR0aCtFO0o9Ry5sZWZ0IT1udWxsP0cubGVmdDpHLmVkZ2U7aWYoSiYmdHlwZW9mIEo9PT1iKXtCKz1KO0ErPUo7fXU9Ry5yaWdodCE9bnVsbD9HLnJpZ2h0OkcuZWRnZTtpZih1JiZ0eXBlb2YgdT09PWIpe0IrPXU7QSs9dTt9ST1NYXRoLm1heChJLEIpO0g9TWF0aC5tYXgoSCxBKTt6PXYuaGVpZ2h0K0M7eD12Lm1pbkhlaWdodCtDO3RvcD1HLnRvcCE9bnVsbD9HLnRvcDpHLmVkZ2U7aWYodG9wJiZ0eXBlb2YgdG9wPT09Yil7eis9dG9wO3grPXRvcDt9eT1HLmJvdHRvbSE9bnVsbD9HLmJvdHRvbTpHLmVkZ2U7aWYoeSYmdHlwZW9mIHk9PT1iKXt6Kz15O3grPXk7fUY9TWF0aC5tYXgoRix6KTtEPU1hdGgubWF4KEQseCk7fXJldHVybiB7d2lkdGg6SSxtaW5XaWR0aDpILGhlaWdodDpGLG1pbkhlaWdodDpEfTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGs9Il8iLGo9Il9QUk9UIixoPSJfUFVCIixnPSJtaXhpbiIsZj0iX1BSSVYiLGU9Il9BQlNUUkFDVCIsZD0iX1NUQVRJQyIsYz0iX0lOSEVSSVRFRCIsYj0iT1ZFUkxBWV8iLGE9Il9USEVNRUFCTEUiLEY9IklDT05fQ0hJTERDT05UUk9MIixFPSJfRVJST1IiLEQ9Il9PVkVSUklEREVOIixDPSJJQ09OX1BBQ0tBR0UiLEI9ImludGVyZmFjZSIsQT0iSUNPTl9DVE9SIix6PSJQUk9UIix5PSJJQ09OX0NMQVNTIix4PSJJQ09OX0lOVEVSRkFDRSIsdz0iYXBpdmlld2VyLlRyZWVVdGlsIixyPSJfTUlYSU4iLHM9IlBVQiIscD0iSUNPTl9FVkVOVCIscT0iSUNPTl9QUk9QRVJUWSIsbj0iX1dBUk4iLG89IklDT05fTUVUSE9EIixsPSJJQ09OX01JWElOIixtPSJJQ09OX0FQUEVBUkFOQ0UiLHQ9IlBSSVYiLHU9IklDT05fQ09OU1RBTlQiLHY9Il9TSU5HTEVUT04iO3F4LkNsYXNzLmRlZmluZSh3LHtleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt9LHN0YXRpY3M6e2dldENoaWxkOmZ1bmN0aW9uKEcsSCl7aWYoRyE9bnVsbCYmRy5jaGlsZHJlbiE9bnVsbCl7Zm9yKHZhciBpPTA7aTxHLmNoaWxkcmVuLmxlbmd0aDtpKyspe2lmKEcuY2hpbGRyZW5baV0udHlwZT09SCl7cmV0dXJuIEcuY2hpbGRyZW5baV07fX19cmV0dXJuIG51bGw7fSxnZXRDaGlsZEJ5QXR0cmlidXRlOmZ1bmN0aW9uKEksSixLKXtpZihJLmNoaWxkcmVuIT1udWxsKXtmb3IodmFyIGk9MDtpPEkuY2hpbGRyZW4ubGVuZ3RoO2krKyl7dmFyIEw9SS5jaGlsZHJlbltpXTtpZihMLmF0dHJpYnV0ZXMmJkwuYXR0cmlidXRlc1tKXT09Syl7cmV0dXJuIEw7fX19cmV0dXJuIG51bGw7fSxnZXRJY29uVXJsOmZ1bmN0aW9uKE0sTil7dmFyIE87dmFyIFA9YXBpdmlld2VyLmRhbztpZihNIGluc3RhbmNlb2YgUC5QYWNrYWdlKXtPPUM7fWVsc2UgaWYoTSBpbnN0YW5jZW9mIFAuQ2xhc3Mpe3N3aXRjaChNLmdldFR5cGUoKSl7Y2FzZSBnOk89bDticmVhaztjYXNlIEI6Tz14O2JyZWFrO2RlZmF1bHQ6Tz15O2lmKE0uaXNTdGF0aWMoKSl7Tys9ZDt9ZWxzZSBpZihNLmlzQWJzdHJhY3QoKSl7Tys9ZTt9ZWxzZSBpZihNLmlzU2luZ2xldG9uKCkpe08rPXY7fX19ZWxzZSBpZihNIGluc3RhbmNlb2YgUC5Qcm9wZXJ0eSl7Tz1xO2lmKE0uaXNQdWJsaWMoKSl7Tys9aDt9ZWxzZSBpZihNLmlzUHJvdGVjdGVkKCkpe08rPWo7fWVsc2UgaWYoTS5pc1ByaXZhdGUoKXx8TS5pc0ludGVybmFsKCkpe08rPWY7fWlmKE0uaXNUaGVtZWFibGUoKSl7Tys9YTt9fWVsc2UgaWYoTSBpbnN0YW5jZW9mIFAuRXZlbnQpe089cDt9ZWxzZSBpZihNIGluc3RhbmNlb2YgUC5NZXRob2Qpe2lmKE0uaXNDb25zdHJ1Y3RvcigpKXt2YXIgTz1BO31lbHNle089bztpZihNLmlzUHVibGljKCkpe08rPWg7fWVsc2UgaWYoTS5pc1Byb3RlY3RlZCgpKXtPKz1qO31lbHNlIGlmKE0uaXNQcml2YXRlKCl8fE0uaXNJbnRlcm5hbCgpKXtPKz1mO319aWYoTS5pc1N0YXRpYygpKXtPKz1kO31lbHNlIGlmKE0uaXNBYnN0cmFjdCgpKXtPKz1lO31pZihNLmdldENsYXNzKCkuZ2V0VHlwZSgpPT1nKXtPKz1yO319ZWxzZSBpZihNIGluc3RhbmNlb2YgUC5Db25zdGFudCl7Tz11O31lbHNlIGlmKE0gaW5zdGFuY2VvZiBQLkFwcGVhcmFuY2Upe089bTt9ZWxzZSBpZihNIGluc3RhbmNlb2YgUC5DaGlsZENvbnRyb2wpe089Rjt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbm9kZSB0eXBlOiAiK00udHlwZSk7fWlmKE0gaW5zdGFuY2VvZiBQLkNsYXNzSXRlbSl7aWYoTil7Tys9Yzt9ZWxzZSBpZihNLmdldE92ZXJyaWRkZW5Gcm9tJiZNLmdldE92ZXJyaWRkZW5Gcm9tKCkpe08rPUQ7fWlmKE0uZ2V0RXJyb3JzKCkubGVuZ3RoPjApe08rPUU7fX1pZihNLmhhc1dhcm5pbmcoKSl7Tys9bjt9cmV0dXJuIGFwaXZpZXdlci5UcmVlVXRpbC5pY29uTmFtZVRvSWNvblBhdGgoTyk7fSxpY29uTmFtZVRvSWNvblBhdGg6ZnVuY3Rpb24oUSl7dmFyIFQ9YXBpdmlld2VyLlRyZWVVdGlsW1FdO2lmKCFUKXt2YXIgUz1RLnNwbGl0KGspO3ZhciBWPVNbMF0raytTWzFdO2lmKFNbMl09PXN8fFNbMl09PXp8fFNbMl09PXQpe1YrPWsrU1syXTt2YXIgVT0zO31lbHNle1U9Mjt9VD1bYXBpdmlld2VyLlRyZWVVdGlsW1ZdXTtpZihUWzBdPT1udWxsKXt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gaW1nIGNvbnN0YW50OiAiK1YpO31mb3IodmFyIGk9VTtpPFMubGVuZ3RoO2krKyl7dmFyIFI9YXBpdmlld2VyLlRyZWVVdGlsW2IrU1tpXV07aWYoUj09bnVsbCl7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGltZyBjb25zdGFudDogT1ZFUkxBWV8iK1NbaV0pO31ULnB1c2goUik7fX1yZXR1cm4gVDt9LElDT05fQkxBTks6ImFwaXZpZXdlci9pbWFnZS9ibGFuay5naWYiLE9WRVJMQVlfQUJTVFJBQ1Q6ImFwaXZpZXdlci9pbWFnZS9vdmVybGF5X2Fic3RyYWN0MTguZ2lmIixPVkVSTEFZX0VSUk9SOiJhcGl2aWV3ZXIvaW1hZ2Uvb3ZlcmxheV9lcnJvcjE4LmdpZiIsT1ZFUkxBWV9JTkhFUklURUQ6ImFwaXZpZXdlci9pbWFnZS9vdmVybGF5X2luaGVyaXRlZDE4LmdpZiIsT1ZFUkxBWV9PVkVSUklEREVOOiJhcGl2aWV3ZXIvaW1hZ2Uvb3ZlcmxheV9vdmVycmlkZGVuMTguZ2lmIixPVkVSTEFZX1RIRU1FQUJMRToiYXBpdmlld2VyL2ltYWdlL292ZXJsYXlfdGhlbWVhYmxlMTguZ2lmIixPVkVSTEFZX1NUQVRJQzoiYXBpdmlld2VyL2ltYWdlL292ZXJsYXlfc3RhdGljMTguZ2lmIixPVkVSTEFZX1dBUk46ImFwaXZpZXdlci9pbWFnZS9vdmVybGF5X3dhcm5pbmcxOC5naWYiLE9WRVJMQVlfTUlYSU46ImFwaXZpZXdlci9pbWFnZS9vdmVybGF5X21peGluMTguZ2lmIixJQ09OX1BBQ0tBR0U6ImFwaXZpZXdlci9pbWFnZS9wYWNrYWdlMTguZ2lmIixJQ09OX1BBQ0tBR0VfV0FSTjoiYXBpdmlld2VyL2ltYWdlL3BhY2thZ2Vfd2FybmluZzE4LmdpZiIsSUNPTl9DTEFTUzoiYXBpdmlld2VyL2ltYWdlL2NsYXNzMTguZ2lmIixJQ09OX0NMQVNTX1dBUk46ImFwaXZpZXdlci9pbWFnZS9jbGFzc193YXJuaW5nMTguZ2lmIixJQ09OX0NMQVNTX0VSUk9SOiJhcGl2aWV3ZXIvaW1hZ2UvY2xhc3Nfd2FybmluZzE4LmdpZiIsSUNPTl9DTEFTU19TVEFUSUM6ImFwaXZpZXdlci9pbWFnZS9jbGFzc19zdGF0aWMxOC5naWYiLElDT05fQ0xBU1NfU1RBVElDX1dBUk46ImFwaXZpZXdlci9pbWFnZS9jbGFzc19zdGF0aWNfd2FybmluZzE4LmdpZiIsSUNPTl9DTEFTU19TVEFUSUNfRVJST1I6ImFwaXZpZXdlci9pbWFnZS9jbGFzc19zdGF0aWNfd2FybmluZzE4LmdpZiIsSUNPTl9DTEFTU19BQlNUUkFDVDoiYXBpdmlld2VyL2ltYWdlL2NsYXNzX2Fic3RyYWN0MTguZ2lmIixJQ09OX0NMQVNTX0FCU1RSQUNUX1dBUk46ImFwaXZpZXdlci9pbWFnZS9jbGFzc19hYnN0cmFjdF93YXJuaW5nMTguZ2lmIixJQ09OX0NMQVNTX0FCU1RSQUNUX0VSUk9SOiJhcGl2aWV3ZXIvaW1hZ2UvY2xhc3NfYWJzdHJhY3Rfd2FybmluZzE4LmdpZiIsSUNPTl9DTEFTU19TSU5HTEVUT046ImFwaXZpZXdlci9pbWFnZS9jbGFzc19zaW5nbGV0b24xOC5naWYiLElDT05fQ0xBU1NfU0lOR0xFVE9OX1dBUk46ImFwaXZpZXdlci9pbWFnZS9jbGFzc19zaW5nbGV0b25fd2FybmluZzE4LmdpZiIsSUNPTl9DTEFTU19TSU5HTEVUT05fRVJST1I6ImFwaXZpZXdlci9pbWFnZS9jbGFzc19zaW5nbGV0b25fd2FybmluZzE4LmdpZiIsSUNPTl9QUk9QRVJUWV9QVUI6ImFwaXZpZXdlci9pbWFnZS9wcm9wZXJ0eTE4LmdpZiIsSUNPTl9QUk9QRVJUWV9QUk9UOiJhcGl2aWV3ZXIvaW1hZ2UvcHJvcGVydHlfcHJvdGVjdGVkMTguZ2lmIixJQ09OX1BST1BFUlRZX1BSSVY6ImFwaXZpZXdlci9pbWFnZS9wcm9wZXJ0eV9wcml2YXRlMTguZ2lmIixJQ09OX1BST1BFUlRZX1BVQl9USEVNRUFCTEU6ImFwaXZpZXdlci9pbWFnZS9wcm9wZXJ0eV90aGVtZWFibGUxOC5naWYiLElDT05fRVZFTlQ6ImFwaXZpZXdlci9pbWFnZS9ldmVudDE4LmdpZiIsSUNPTl9JTlRFUkZBQ0U6ImFwaXZpZXdlci9pbWFnZS9pbnRlcmZhY2UxOC5naWYiLElDT05fSU5URVJGQUNFX1dBUk46ImFwaXZpZXdlci9pbWFnZS9pbnRlcmZhY2Vfd2FybmluZzE4LmdpZiIsSUNPTl9NSVhJTjoiYXBpdmlld2VyL2ltYWdlL21peGluMTguZ2lmIixJQ09OX01JWElOX1dBUk46ImFwaXZpZXdlci9pbWFnZS9taXhpbl93YXJuaW5nMTguZ2lmIixJQ09OX01FVEhPRF9QVUI6ImFwaXZpZXdlci9pbWFnZS9tZXRob2RfcHVibGljMTguZ2lmIixJQ09OX01FVEhPRF9QVUJfSU5IRVJJVEVEOiJhcGl2aWV3ZXIvaW1hZ2UvbWV0aG9kX3B1YmxpY19pbmhlcml0ZWQxOC5naWYiLElDT05fQ1RPUjoiYXBpdmlld2VyL2ltYWdlL2NvbnN0cnVjdG9yMTguZ2lmIixJQ09OX01FVEhPRF9QUk9UOiJhcGl2aWV3ZXIvaW1hZ2UvbWV0aG9kX3Byb3RlY3RlZDE4LmdpZiIsSUNPTl9NRVRIT0RfUFJJVjoiYXBpdmlld2VyL2ltYWdlL21ldGhvZF9wcml2YXRlMTguZ2lmIixJQ09OX0NPTlNUQU5UOiJhcGl2aWV3ZXIvaW1hZ2UvY29uc3RhbnQxOC5naWYiLElDT05fQVBQRUFSQU5DRToiYXBpdmlld2VyL2ltYWdlL2NvbnN0YW50MTguZ2lmIixJQ09OX0NISUxEQ09OVFJPTDoiYXBpdmlld2VyL2ltYWdlL2NoaWxkY29udHJvbDE4LmdpZiJ9LGRlZmVyOmZ1bmN0aW9uKFcsWCxZKXtXLlBSRUxPQURfSU1BR0VTPVtXLklDT05fSU5GTyxXLklDT05fU0VBUkNILFcuT1ZFUkxBWV9BQlNUUkFDVCxXLk9WRVJMQVlfRVJST1IsVy5PVkVSTEFZX0lOSEVSSVRFRCxXLk9WRVJMQVlfT1ZFUlJJRERFTixXLk9WRVJMQVlfU1RBVElDLFcuT1ZFUkxBWV9XQVJOLFcuT1ZFUkxBWV9NSVhJTixXLk9WRVJMQVlfVEhFTUVBQkxFLFcuSUNPTl9QQUNLQUdFLFcuSUNPTl9QQUNLQUdFX1dBUk4sVy5JQ09OX0NMQVNTLFcuSUNPTl9DTEFTU19XQVJOLFcuSUNPTl9DTEFTU19FUlJPUixXLklDT05fQ0xBU1NfU1RBVElDLFcuSUNPTl9DTEFTU19TVEFUSUNfV0FSTixXLklDT05fQ0xBU1NfU1RBVElDX0VSUk9SLFcuSUNPTl9DTEFTU19BQlNUUkFDVCxXLklDT05fQ0xBU1NfQUJTVFJBQ1RfV0FSTixXLklDT05fQ0xBU1NfQUJTVFJBQ1RfRVJST1IsVy5JQ09OX0NMQVNTX1NJTkdMRVRPTixXLklDT05fQ0xBU1NfU0lOR0xFVE9OX1dBUk4sVy5JQ09OX0NMQVNTX1NJTkdMRVRPTl9FUlJPUixXLklDT05fUFJPUEVSVFlfUFVCLFcuSUNPTl9QUk9QRVJUWV9QUk9ULFcuSUNPTl9QUk9QRVJUWV9QUklWLFcuSUNPTl9QUk9QRVJUWV9QVUJfVEhFTUVBQkxFLFcuSUNPTl9FVkVOVCxXLklDT05fSU5URVJGQUNFLFcuSUNPTl9JTlRFUkZBQ0VfV0FSTixXLklDT05fTUlYSU4sVy5JQ09OX01JWElOX1dBUk4sVy5JQ09OX01FVEhPRF9QVUIsVy5JQ09OX01FVEhPRF9QVUJfSU5IRVJJVEVELFcuSUNPTl9DVE9SLFcuSUNPTl9NRVRIT0RfUFJPVCxXLklDT05fTUVUSE9EX1BSSVYsVy5JQ09OX0NPTlNUQU5ULFcuSUNPTl9DSElMRENPTlRST0xdO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBnPSJCb29sZWFuIixmPSJjaGFuZ2VTaG93SW5oZXJpdGVkIixlPSJjaGFuZ2VTaG93UHJvdGVjdGVkIixkPSJjaGFuZ2VFeHBhbmRQcm9wZXJ0aWVzIixjPSJhcGl2aWV3ZXIuVWlNb2RlbCIsYj0iY2hhbmdlU2hvd1ByaXZhdGUiLGE9InNpbmdsZXRvbiI7cXguQ2xhc3MuZGVmaW5lKGMse2V4dGVuZDpxeC5jb3JlLk9iamVjdCx0eXBlOmEscHJvcGVydGllczp7c2hvd0luaGVyaXRlZDp7Y2hlY2s6Zyxpbml0OmZhbHNlLGV2ZW50OmZ9LGV4cGFuZFByb3BlcnRpZXM6e2NoZWNrOmcsaW5pdDpmYWxzZSxldmVudDpkfSxzaG93UHJvdGVjdGVkOntjaGVjazpnLGluaXQ6ZmFsc2UsZXZlbnQ6ZX0sc2hvd1ByaXZhdGU6e2NoZWNrOmcsaW5pdDpmYWxzZSxldmVudDpifX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBpPSJhdXRvIixoPSJvdmVyZmxvd1giLGc9InZpc2libGUiLGY9ImhpZGRlbiIsZT0ic2Nyb2xsIixkPSJvdmVyZmxvd1kiLGM9Il9hcHBseU92ZXJmbG93WCIsYj0iX2FwcGx5T3ZlcmZsb3dZIixhPSJxeC51aS5jb3JlLk1OYXRpdmVPdmVyZmxvdyI7cXguTWl4aW4uZGVmaW5lKGEse3Byb3BlcnRpZXM6e292ZXJmbG93WDp7Y2hlY2s6W2YsZyxlLGldLG51bGxhYmxlOnRydWUsYXBwbHk6Y30sb3ZlcmZsb3dZOntjaGVjazpbZixnLGUsaV0sbnVsbGFibGU6dHJ1ZSxhcHBseTpifSxvdmVyZmxvdzp7Z3JvdXA6W2gsZF19fSxtZW1iZXJzOntfYXBwbHlPdmVyZmxvd1g6ZnVuY3Rpb24oail7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNldFN0eWxlKGgsaik7fSxfYXBwbHlPdmVyZmxvd1k6ZnVuY3Rpb24oayl7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNldFN0eWxlKGQsayk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBvPSJub25lIixuPSJ0ZXh0IixtPSIiLGw9InVzZXJTZWxlY3QiLGs9ImNvbG9yIixqPSJTdHJpbmciLGk9IjBweCIsaD0id2Via2l0IixnPSJjaGFuZ2VIdG1sIixmPSJfYXBwbHlDc3NDbGFzcyIsYz0iY2xhc3MiLGU9InF4LnVpLmVtYmVkLkh0bWwiLGQ9Il9hcHBseUh0bWwiLGI9InF4LmNsaWVudCIsYT0iaHRtbCI7cXguQ2xhc3MuZGVmaW5lKGUse2V4dGVuZDpxeC51aS5jb3JlLldpZGdldCxpbmNsdWRlOltxeC51aS5jb3JlLk1OYXRpdmVPdmVyZmxvd10sY29uc3RydWN0OmZ1bmN0aW9uKHApe3F4LnVpLmNvcmUuV2lkZ2V0LmNhbGwodGhpcyk7aWYocCE9bnVsbCl7dGhpcy5zZXRIdG1sKHApO319LHByb3BlcnRpZXM6e2h0bWw6e2NoZWNrOmosYXBwbHk6ZCxldmVudDpnLG51bGxhYmxlOnRydWV9LGNzc0NsYXNzOntjaGVjazpqLGluaXQ6bSxhcHBseTpmfSxzZWxlY3RhYmxlOntyZWZpbmU6dHJ1ZSxpbml0OnRydWV9LGZvY3VzYWJsZTp7cmVmaW5lOnRydWUsaW5pdDp0cnVlfX0sbWVtYmVyczp7Z2V0Rm9jdXNFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q29udGVudEVsZW1lbnQoKTt9LF9hcHBseUh0bWw6ZnVuY3Rpb24ocSxyKXt2YXIgcz10aGlzLmdldENvbnRlbnRFbGVtZW50KCk7cy5zZXRBdHRyaWJ1dGUoYSxxfHxtKTtzLnNldFN0eWxlcyh7InBhZGRpbmciOmksImJvcmRlciI6b30pO30sX2FwcGx5Q3NzQ2xhc3M6ZnVuY3Rpb24odCx1KXt0aGlzLmdldENvbnRlbnRFbGVtZW50KCkuc2V0QXR0cmlidXRlKGMsdCk7fSxfYXBwbHlTZWxlY3RhYmxlOmZ1bmN0aW9uKHYpe3F4LnVpLmNvcmUuV2lkZ2V0LnByb3RvdHlwZS5fYXBwbHlTZWxlY3RhYmxlLmNhbGwodGhpcyx2KTtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoYixoKSl7dGhpcy5nZXRDb250YWluZXJFbGVtZW50KCkuc2V0U3R5bGUobCx2P246byk7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNldFN0eWxlKGwsdj9uOm8pO319LF9hcHBseUZvbnQ6ZnVuY3Rpb24odyx4KXt2YXIgeT13P3F4LnRoZW1lLm1hbmFnZXIuRm9udC5nZXRJbnN0YW5jZSgpLnJlc29sdmUodykuZ2V0U3R5bGVzKCk6cXguYm9tLkZvbnQuZ2V0RGVmYXVsdFN0eWxlcygpO3RoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5zZXRTdHlsZXMoeSk7fSxfYXBwbHlUZXh0Q29sb3I6ZnVuY3Rpb24oeixBKXtpZih6KXt0aGlzLmdldENvbnRlbnRFbGVtZW50KCkuc2V0U3R5bGUoayxxeC50aGVtZS5tYW5hZ2VyLkNvbG9yLmdldEluc3RhbmNlKCkucmVzb2x2ZSh6KSk7fWVsc2V7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnJlbW92ZVN0eWxlKGspO319fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGw9IkJvb2xlYW4iLGs9Il91cGRhdGVQYW5lbHMiLGo9ImF1dG8iLGg9JzwvZGl2PicsZz0nPGRpdj4nLGY9J2FwaXZpZXdlci9pbWFnZS9jbG9zZS5naWYnLGU9ImphdmFzY3JpcHQiLGQ9JzxkaXYgc3R5bGU9InBhZGRpbmc6MjRweDsiPicsYz0iX2JsYW5rIixiPSJhcGl2aWV3ZXIuZGFvLk5vZGUiLHk9InN0cmluZyIseD0iaHR0cDovLyIsdz0icHJlIix2PSJfaW5mb1BhbmVscyIsdT0nYXBpdmlld2VyL2ltYWdlL29wZW4uZ2lmJyx0PSJhcHBlYXIiLHM9ImltZyIscj0iX2FwcGx5RG9jTm9kZSIscT0iZGV0YWlsdmlld2VyIixwPSc8aDE+PC9oMT4nLG49ImFic3RyYWN0IixvPSJhcGl2aWV3ZXIudWkuQWJzdHJhY3RWaWV3ZXIiLG09ImEiO3F4LkNsYXNzLmRlZmluZShvLHt0eXBlOm4sZXh0ZW5kOnF4LnVpLmVtYmVkLkh0bWwsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXgudWkuZW1iZWQuSHRtbC5jYWxsKHRoaXMpO3RoaXMuX2luZm9QYW5lbEhhc2g9e307dGhpcy5faW5mb1BhbmVscz1bXTt0aGlzLnNldE92ZXJmbG93WChqKTt0aGlzLnNldE92ZXJmbG93WShqKTt0aGlzLnNldEFwcGVhcmFuY2UocSk7dGhpcy5faW5mb1BhbmVsSGFzaD17fTt0aGlzLl9pbmZvUGFuZWxzPVtdO2FwaXZpZXdlci5PYmplY3RSZWdpc3RyeS5yZWdpc3Rlcih0aGlzKTt9LHByb3BlcnRpZXM6e2RvY05vZGU6e2NoZWNrOmIsaW5pdDpudWxsLG51bGxhYmxlOnRydWUsYXBwbHk6cn0sc2hvd0luaGVyaXRlZDp7Y2hlY2s6bCxpbml0OmZhbHNlLGFwcGx5Omt9LGV4cGFuZFByb3BlcnRpZXM6e2NoZWNrOmwsaW5pdDpmYWxzZSxhcHBseTprfSxzaG93UHJvdGVjdGVkOntjaGVjazpsLGluaXQ6ZmFsc2UsYXBwbHk6a30sc2hvd1ByaXZhdGU6e2NoZWNrOmwsaW5pdDpmYWxzZSxhcHBseTprfX0sc3RhdGljczp7Zml4TGlua3M6ZnVuY3Rpb24oeil7dmFyIGE9ei5nZXRFbGVtZW50c0J5VGFnTmFtZShtKTtmb3IodmFyIGk9MDtpPGEubGVuZ3RoO2krKyl7aWYodHlwZW9mIGFbaV0uaHJlZj09eSYmYVtpXS5ocmVmLmluZGV4T2YoeCk9PTApe2FbaV0udGFyZ2V0PWM7fX19LGhpZ2hsaWdodENvZGU6ZnVuY3Rpb24oQSl7dmFyIEI9QS5nZXRFbGVtZW50c0J5VGFnTmFtZSh3KTtmb3IodmFyIGk9MDtpPEIubGVuZ3RoO2krKyl7dmFyIEM9QltpXTtpZihDLmNsYXNzTmFtZSE9PWUpe2NvbnRpbnVlO31DLmlubmVySFRNTD1xeC5kZXYuVG9rZW5pemVyLmphdmFTY3JpcHRUb0h0bWwoQy5pbm5lckhUTUwpO319fSxtZW1iZXJzOntfaW5mb1BhbmVsSGFzaDpudWxsLF9pbmZvUGFuZWxzOm51bGwsX19TcTpudWxsLF9pbml0OmZ1bmN0aW9uKEQpe3RoaXMuX19TcigpO3RoaXMuc2V0RG9jTm9kZShEKTt0aGlzLmFkZExpc3RlbmVyT25jZSh0LGZ1bmN0aW9uKCl7dGhpcy5fc3luY0h0bWwoKTt0aGlzLl9hcHBseURvY05vZGUodGhpcy5fX1NxKTt9LHRoaXMpO30sX19TcjpmdW5jdGlvbigpe3ZhciBGPW5ldyBxeC51dGlsLlN0cmluZ0J1aWxkZXIoKTtGLmFkZChkKTtGLmFkZChwKTtGLmFkZChnLGgpO3ZhciBFPXRoaXMuZ2V0UGFuZWxzKCk7Zm9yKHZhciBpPTA7aTxFLmxlbmd0aDtpKyspe3ZhciBHPUVbaV07Ri5hZGQoRy5nZXRQYW5lbEh0bWwodGhpcykpO31GLmFkZChoKTt0aGlzLnNldEh0bWwoRi5nZXQoKSk7fSxfZ2V0VGl0bGVIdG1sOmZ1bmN0aW9uKEgpe3Rocm93IG5ldyBFcnJvcigiQWJzdHJhY3QgbWV0aG9kIGNhbGxlZCEiKTt9LF9nZXREZXNjcmlwdGlvbkh0bWw6ZnVuY3Rpb24oSSl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBtZXRob2QgY2FsbGVkISIpO30sX3N5bmNIdG1sOmZ1bmN0aW9uKCl7dmFyIE09dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLmdldERvbUVsZW1lbnQoKS5maXJzdENoaWxkO3ZhciBKPU0uY2hpbGROb2Rlczt2YXIgSz10aGlzLmdldFBhbmVscygpO2FwaXZpZXdlci51aS5BYnN0cmFjdFZpZXdlci5maXhMaW5rcyhNKTt0aGlzLl90aXRsZUVsZW09SlswXTt0aGlzLl9jbGFzc0Rlc2NFbGVtPUpbMV07Zm9yKHZhciBpPTA7aTxLLmxlbmd0aDtpKyspe3ZhciBMPUtbaV07TC5zZXRFbGVtZW50KEpbaSsyXSk7fX0sYWRkSW5mb1BhbmVsOmZ1bmN0aW9uKE4pe3RoaXMuX2luZm9QYW5lbEhhc2hbTi50b0hhc2hDb2RlKCldPU47dGhpcy5faW5mb1BhbmVscy5wdXNoKE4pO30sZ2V0UGFuZWxzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2luZm9QYW5lbHM7fSxnZXRQYW5lbEZyb21IYXNoQ29kZTpmdW5jdGlvbihPKXtyZXR1cm4gdGhpcy5faW5mb1BhbmVsSGFzaFtPXTt9LF91cGRhdGVQYW5lbHM6ZnVuY3Rpb24oKXt2YXIgUD10aGlzLmdldFBhbmVscygpO2Zvcih2YXIgaT0wO2k8UC5sZW5ndGg7aSsrKXt2YXIgUT1QW2ldO1EudXBkYXRlKHRoaXMsdGhpcy5fX1NxKTt9fSxfYXBwbHlEb2NOb2RlOmZ1bmN0aW9uKFIpe3RoaXMuX19TcT1SO2lmKCF0aGlzLl90aXRsZUVsZW0pe3JldHVybiA7fXRoaXMuX3RpdGxlRWxlbS5pbm5lckhUTUw9dGhpcy5fZ2V0VGl0bGVIdG1sKFIpO3RoaXMuX2NsYXNzRGVzY0VsZW0uaW5uZXJIVE1MPXRoaXMuX2dldERlc2NyaXB0aW9uSHRtbChSKTthcGl2aWV3ZXIudWkuQWJzdHJhY3RWaWV3ZXIuZml4TGlua3ModGhpcy5fY2xhc3NEZXNjRWxlbSk7YXBpdmlld2VyLnVpLkFic3RyYWN0Vmlld2VyLmhpZ2hsaWdodENvZGUodGhpcy5fY2xhc3NEZXNjRWxlbSk7dGhpcy5fdXBkYXRlUGFuZWxzKCk7fSx0b2dnbGVQYW5lbFZpc2liaWxpdHk6ZnVuY3Rpb24oUyl7dHJ5e1Muc2V0SXNPcGVuKCFTLmdldElzT3BlbigpKTt2YXIgVD1TLmdldFRpdGxlRWxlbWVudCgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKHMpWzBdO1Quc3JjPXF4LnV0aWwuUmVzb3VyY2VNYW5hZ2VyLmdldEluc3RhbmNlKCkudG9VcmkoUy5nZXRJc09wZW4oKT9mOnUpO1MudXBkYXRlKHRoaXMsdGhpcy5nZXREb2NOb2RlKCkpO31jYXRjaChVKXt0aGlzLmVycm9yKCJUb2dnbGluZyBpbmZvIGJvZHkgZmFpbGVkIixVKTt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9jbGFzc0Rlc2NFbGVtPXRoaXMuX3RpdGxlRWxlbT10aGlzLl9pbmZvUGFuZWxIYXNoPXRoaXMuX19TcT1udWxsO3RoaXMuX2Rpc3Bvc2VBcnJheSh2LDEpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBuPSJjbGFzc2VzIixtPSJmdW5jdGlvbnMiLGw9IiIsaz0icGFja2FnZXMiLGo9ImNsYXNzIixpPSJpbnRlcmZhY2VzIixoPSc8ZGl2IGNsYXNzPSJjbGFzcy1kZXNjcmlwdGlvbiI+JyxnPSc8c21hbGw+cGFja2FnZTwvc21hbGw+JyxmPSc8L2Rpdj4nLGU9IkNsYXNzVmlld2VyIixiPSJtaXhpbnMiLGQ9ImludGVyZmFjZSIsYz0iYXBpdmlld2VyLnVpLlBhY2thZ2VWaWV3ZXIiLGE9Im1peGluIjtxeC5DbGFzcy5kZWZpbmUoYyx7ZXh0ZW5kOmFwaXZpZXdlci51aS5BYnN0cmFjdFZpZXdlcixjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXthcGl2aWV3ZXIudWkuQWJzdHJhY3RWaWV3ZXIuY2FsbCh0aGlzKTt0aGlzLmFkZEluZm9QYW5lbChuZXcgYXBpdmlld2VyLnVpLnBhbmVscy5NZXRob2RQYW5lbChtLG0pKTt0aGlzLmFkZEluZm9QYW5lbChuZXcgYXBpdmlld2VyLnVpLnBhbmVscy5DbGFzc1BhbmVsKG4sbixqKSk7dGhpcy5hZGRJbmZvUGFuZWwobmV3IGFwaXZpZXdlci51aS5wYW5lbHMuQ2xhc3NQYW5lbChuLGksZCkpO3RoaXMuYWRkSW5mb1BhbmVsKG5ldyBhcGl2aWV3ZXIudWkucGFuZWxzLkNsYXNzUGFuZWwobixiLGEpKTt0aGlzLmFkZEluZm9QYW5lbChuZXcgYXBpdmlld2VyLnVpLnBhbmVscy5QYWNrYWdlUGFuZWwoayxrKSk7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNldEF0dHJpYnV0ZShqLGUpO3RoaXMuX2luaXQobmV3IGFwaXZpZXdlci5kYW8uUGFja2FnZSh7fSkpO30sbWVtYmVyczp7X2dldFRpdGxlSHRtbDpmdW5jdGlvbihvKXt2YXIgcD1sO3ArPWc7cCs9by5nZXRGdWxsTmFtZSgpO3JldHVybiBwO30sX2dldERlc2NyaXB0aW9uSHRtbDpmdW5jdGlvbihxKXt2YXIgcj1uZXcgcXgudXRpbC5TdHJpbmdCdWlsZGVyKCk7dmFyIHM9cS5nZXREZXNjcmlwdGlvbigpO2lmKHMhPWwpe3IuYWRkKGgsYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwucmVzb2x2ZUxpbmtBdHRyaWJ1dGVzKHMscSksZik7fXJldHVybiByLmdldCgpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0iYXBpdmlld2VyLk9iamVjdFJlZ2lzdHJ5IjtxeC5DbGFzcy5kZWZpbmUoYSx7c3RhdGljczp7X19Tczp7fSxyZWdpc3RlcjpmdW5jdGlvbihiKXt2YXIgYz1xeC5jb3JlLk9iamVjdFJlZ2lzdHJ5LnRvSGFzaENvZGUoYik7dGhpcy5fX1NzW2NdPWI7fSxnZXRPYmplY3RGcm9tSGFzaENvZGU6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuX19Tc1tkXTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGw9Ijwvc3Bhbj4iLGs9InN5bSIsaj0ibmwiLGg9InF4a2V5IixnPSJ3cyIsZj0iPiIsZT0icXFzdHIiLGQ9IjwiLGM9InFzdHIiLGI9ImxpbmVjb21tZW50IixiZz0iaWRlbnQiLGJmPSJrZXl3b3JkIixiZT0icmVnZXhwIixiZD0iJiIsYmM9InwiLGJiPSJmdWxsY29tbWVudCIsYmE9ImF0b20iLFk9IlxcclxcbnxcXHJ8XFxuIixYPSJcXHMqXFwpKiIsVz0iXFxzIixzPSJeIix0PSdbIl1bXiJdKlsiXScscT0icmVhbCIscj0iXFxzKlssXFwpXSIsbz0iPHNwYW4gY2xhc3M9J3N0cmluZyc+IixwPSJbYS16QS1aX11bYS16QS1aMC05X10qXFxiIixtPSI8c3BhbiBjbGFzcz0nY29tbWVudCc+IixuPSJbKy1dP1xcZCsiLHc9IlxccypcXCgqXFxzKiIseD0iJm5ic3A7IixGPSJxeC5kZXYuVG9rZW5pemVyIixEPSJcXHQiLE09IlxccypcXCkqXFxzKlxcKSIsSD0iXFwuKD86cmVwbGFjZSlcXHMqXFwoXFxzKlxcKCpcXHMqIixTPSJcXCkqXFwuKD86dGVzdHxleGVjKVxccypcXChcXHMqIixRPSI8c3BhbiBjbGFzcz0ncmVnZXhwJz4iLHo9ImludCIsVj0iJz4iLFU9IjxzcGFuIGNsYXNzPSciLFQ9Iig/OlxcLyg/IVxcKilbXlxcdFxcblxcclxcZlxcdlxcL10rP1xcL1ttZ2ldKikiLHk9Ii4iLEI9IlxccypcXCkqXFxzKj8sPyIsQz0iW1xcKCxdXFxzKiIsRT0iPHNwYW4gY2xhc3M9J2lkZW50Jz4iLEc9ImciLEk9IlsrLV0/XFxkKygoWy5dXFxkKykqKFtlRV1bKy1dP1xcZCspKT8iLE49IlxcL1xcKig/Oi58W1xcblxccl0pKj9cXCpcXC8iLFI9IlxuIix1PSIkIix2PSJbJ11bXiddKlsnXSIsQT0idGFiIixMPSJcXC9cXC8uKj9bXFxuXFxyJF0iLEs9Ijxicj4iLEo9IiAiLFA9Iig/Ojp8PXxcXD8pXFxzKlxcKCpcXHMqIixPPSJcXC4oPzptYXRjaHxzZWFyY2h8c3BsaXQpXFxzKlxcKFxccypcXCgqXFxzKiI7cXguQ2xhc3MuZGVmaW5lKEYse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxzdGF0aWNzOnt0b2tlbml6ZUphdmFTY3JpcHQ6ZnVuY3Rpb24oYmgpe3ZhciBiTD17ImJyZWFrIjoxLCJjYXNlIjoxLCJjYXRjaCI6MSwiY29udGludWUiOjEsImRlZmF1bHQiOjEsImRlbGV0ZSI6MSwiZG8iOjEsImVsc2UiOjEsImZpbmFsbHkiOjEsImZvciI6MSwiZnVuY3Rpb24iOjEsImlmIjoxLCJpbiI6MSwiaW5zdGFuY2VvZiI6MSwibmV3IjoxLCJyZXR1cm4iOjEsInN3aXRjaCI6MSwidGhyb3ciOjEsInRyeSI6MSwidHlwZW9mIjoxLCJ2YXIiOjEsIndoaWxlIjoxLCJ3aXRoIjoxfTt2YXIgYkI9eyJ2b2lkIjoxLCJudWxsIjoxLCJ0cnVlIjoxLCJmYWxzZSI6MSwiTmFOIjoxLCJJbmZpbml0eSI6MSwidGhpcyI6MX07dmFyIGJ4PXsic3RhdGljcyI6MSwibWVtYmVycyI6MSwiY29uc3RydWN0IjoxLCJkZXN0cnVjdCI6MSwiZXZlbnRzIjoxLCJwcm9wZXJ0aWVzIjoxLCJleHRlbmQiOjEsImltcGxlbWVudCI6MX07dmFyIGJ0PWZ1bmN0aW9uKGJNKXtyZXR1cm4gbmV3IFJlZ0V4cChzK2JNK3UpO307dmFyIGJFPUw7dmFyIGJ1PU47dmFyIGJvPXA7dmFyIGJ3PW47dmFyIGJyPUk7dmFyIGJ6PXQ7dmFyIGJ5PXY7dmFyIGJtPUQ7dmFyIGJIPVk7dmFyIGJKPVc7dmFyIGJzPVQ7dmFyIGJ2PVtPK2JzK00sSCticytCLHcrYnMrUyxQK2JzK1gsQyticytyXS5qb2luKGJjKTt2YXIgYkY9YnQoYkUpO3ZhciBicD1idChidSk7dmFyIGJDPWJ0KGJvKTt2YXIgYmw9YnQoYncpO3ZhciBiST1idChicik7dmFyIGJrPWJ0KGJ6KTt2YXIgYmo9YnQoYnkpO3ZhciBiRD1idChibSk7dmFyIGJxPWJ0KGJIKTt2YXIgYmk9YnQoYkopO3ZhciBibj1idChidik7dmFyIGJBPW5ldyBSZWdFeHAoW2JFLGJ1LGJvLGJ3LGJyLGJ6LGJ5LGJ5LGJtLGJILGJKLGJ2LHldLmpvaW4oYmMpLEcpO3ZhciBiRz1bXTt2YXIgYT1iaC5tYXRjaChiQSk7Zm9yKHZhciBpPTA7aTxhLmxlbmd0aDtpKyspe3ZhciBiSz1hW2ldO2lmKGJLLm1hdGNoKGJGKSl7YkcucHVzaCh7dHlwZTpiLHZhbHVlOmJLfSk7fWVsc2UgaWYoYksubWF0Y2goYnApKXtiRy5wdXNoKHt0eXBlOmJiLHZhbHVlOmJLfSk7fWVsc2UgaWYoYksubWF0Y2goYm4pKXtiRy5wdXNoKHt0eXBlOmJlLHZhbHVlOmJLfSk7fWVsc2UgaWYoYksubWF0Y2goYmopKXtiRy5wdXNoKHt0eXBlOmMsdmFsdWU6Ykt9KTt9ZWxzZSBpZihiSy5tYXRjaChiaykpe2JHLnB1c2goe3R5cGU6ZSx2YWx1ZTpiS30pO31lbHNlIGlmKGJMW2JLXSl7YkcucHVzaCh7dHlwZTpiZix2YWx1ZTpiS30pO31lbHNlIGlmKGJCW2JLXSl7YkcucHVzaCh7dHlwZTpiYSx2YWx1ZTpiS30pO31lbHNlIGlmKGJ4W2JLXSl7YkcucHVzaCh7dHlwZTpoLHZhbHVlOmJLfSk7fWVsc2UgaWYoYksubWF0Y2goYkMpKXtiRy5wdXNoKHt0eXBlOmJnLHZhbHVlOmJLfSk7fWVsc2UgaWYoYksubWF0Y2goYkkpKXtiRy5wdXNoKHt0eXBlOnEsdmFsdWU6Ykt9KTt9ZWxzZSBpZihiSy5tYXRjaChibCkpe2JHLnB1c2goe3R5cGU6eix2YWx1ZTpiS30pO31lbHNlIGlmKGJLLm1hdGNoKGJxKSl7YkcucHVzaCh7dHlwZTpqLHZhbHVlOmJLfSk7fWVsc2UgaWYoYksubWF0Y2goYnQoYmkpKSl7YkcucHVzaCh7dHlwZTpnLHZhbHVlOmJLfSk7fWVsc2UgaWYoYksubWF0Y2goYkQpKXtiRy5wdXNoKHt0eXBlOkEsdmFsdWU6Ykt9KTt9ZWxzZSBpZihiSz09Zil7YkcucHVzaCh7dHlwZTprLHZhbHVlOmZ9KTt9ZWxzZSBpZihiSz09ZCl7YkcucHVzaCh7dHlwZTprLHZhbHVlOmR9KTt9ZWxzZSBpZihiSz09YmQpe2JHLnB1c2goe3R5cGU6ayx2YWx1ZTpiZH0pO31lbHNle2JHLnB1c2goe3R5cGU6ayx2YWx1ZTpiS30pO319cmV0dXJuIGJHO30samF2YVNjcmlwdFRvSHRtbDpmdW5jdGlvbihiTil7dmFyIGJSPXF4LmRldi5Ub2tlbml6ZXIudG9rZW5pemVKYXZhU2NyaXB0KGJOKTt2YXIgYlE9bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcigpO2Zvcih2YXIgaT0wO2k8YlIubGVuZ3RoO2krKyl7dmFyIGJTPWJSW2ldO3ZhciBiUD1xeC5ib20uU3RyaW5nLmVzY2FwZShiUy52YWx1ZSk7c3dpdGNoKGJTLnR5cGUpe2Nhc2UgYmU6YlEuYWRkKFEsYlAsbCk7YnJlYWs7Y2FzZSBiZzpiUS5hZGQoRSxiUCxsKTticmVhaztjYXNlIGI6Y2FzZSBiYjpiUS5hZGQobSxiUCxsKTticmVhaztjYXNlIGM6Y2FzZSBlOmJRLmFkZChvLGJQLGwpO2JyZWFrO2Nhc2UgYmY6Y2FzZSBiYTpjYXNlIGg6YlEuYWRkKFUsYlMudHlwZSxWLGJQLGwpO2JyZWFrO2Nhc2Ugajp2YXIgYk89cXguYm9tLmNsaWVudC5FbmdpbmUuTVNIVE1MP0s6UjtiUS5hZGQoYk8pO2JyZWFrO2Nhc2UgZzp2YXIgYlQ9cXguYm9tLmNsaWVudC5FbmdpbmUuTVNIVE1MP3g6SjtiUS5hZGQoYlQpO2JyZWFrO2RlZmF1bHQ6YlEuYWRkKGJQKTt9fXJldHVybiBiUS5nZXQoKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGY9Im1zaHRtbCIsZT0icG9wLnB1c2gucmV2ZXJzZS5zaGlmdC5zb3J0LnNwbGljZS51bnNoaWZ0LmpvaW4uc2xpY2UiLGQ9Im51bWJlciIsYz0icXgudHlwZS5CYXNlQXJyYXkiLGI9InF4LmNsaWVudCIsYT0iLiI7cXguQ2xhc3MuZGVmaW5lKGMse2V4dGVuZDpBcnJheSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oZyl7fSxtZW1iZXJzOnt0b0FycmF5Om51bGwsdmFsdWVPZjpudWxsLHBvcDpudWxsLHB1c2g6bnVsbCxyZXZlcnNlOm51bGwsc2hpZnQ6bnVsbCxzb3J0Om51bGwsc3BsaWNlOm51bGwsdW5zaGlmdDpudWxsLGNvbmNhdDpudWxsLGpvaW46bnVsbCxzbGljZTpudWxsLHRvU3RyaW5nOm51bGwsaW5kZXhPZjpudWxsLGxhc3RJbmRleE9mOm51bGwsZm9yRWFjaDpudWxsLGZpbHRlcjpudWxsLG1hcDpudWxsLHNvbWU6bnVsbCxldmVyeTpudWxsfX0pOyhmdW5jdGlvbigpe2Z1bmN0aW9uIGsobCl7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGIsZikpe2oucHJvdG90eXBlPXtsZW5ndGg6MCwkJGlzQXJyYXk6dHJ1ZX07dmFyIG89ZS5zcGxpdChhKTtmb3IodmFyIGxlbmd0aD1vLmxlbmd0aDtsZW5ndGg7KXtqLnByb3RvdHlwZVtvWy0tbGVuZ3RoXV09QXJyYXkucHJvdG90eXBlW29bbGVuZ3RoXV07fX12YXIgcD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ai5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5zbGljZSgwKTtmb3IodmFyIGk9MCxsZW5ndGg9YXJndW1lbnRzLmxlbmd0aDtpPGxlbmd0aDtpKyspe3ZhciBxO2lmKGFyZ3VtZW50c1tpXSBpbnN0YW5jZW9mIGope3E9cC5jYWxsKGFyZ3VtZW50c1tpXSwwKTt9ZWxzZSBpZihhcmd1bWVudHNbaV0gaW5zdGFuY2VvZiBBcnJheSl7cT1hcmd1bWVudHNbaV07fWVsc2V7cT1bYXJndW1lbnRzW2ldXTt9ci5wdXNoLmFwcGx5KHIscSk7fXJldHVybiByO307ai5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gcC5jYWxsKHRoaXMsMCkudG9TdHJpbmcoKTt9O2oucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHAuY2FsbCh0aGlzLDApLnRvTG9jYWxlU3RyaW5nKCk7fTtqLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1qO2oucHJvdG90eXBlLmluZGV4T2Y9cXgubGFuZy5Db3JlLmFycmF5SW5kZXhPZjtqLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1xeC5sYW5nLkNvcmUuYXJyYXlMYXN0SW5kZXhPZjtqLnByb3RvdHlwZS5mb3JFYWNoPXF4LmxhbmcuQ29yZS5hcnJheUZvckVhY2g7ai5wcm90b3R5cGUuc29tZT1xeC5sYW5nLkNvcmUuYXJyYXlTb21lO2oucHJvdG90eXBlLmV2ZXJ5PXF4LmxhbmcuQ29yZS5hcnJheUV2ZXJ5O3ZhciBtPXF4LmxhbmcuQ29yZS5hcnJheUZpbHRlcjt2YXIgbj1xeC5sYW5nLkNvcmUuYXJyYXlNYXA7ai5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKCl7dmFyIHM9bmV3IHRoaXMuY29uc3RydWN0b3I7cy5wdXNoLmFwcGx5KHMsbS5hcHBseSh0aGlzLGFyZ3VtZW50cykpO3JldHVybiBzO307ai5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHRoaXMuY29uc3RydWN0b3I7dC5wdXNoLmFwcGx5KHQsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpO3JldHVybiB0O307ai5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oKXt2YXIgdT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcjt1LnB1c2guYXBwbHkodSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKTtyZXR1cm4gdTt9O2oucHJvdG90eXBlLnNwbGljZT1mdW5jdGlvbigpe3ZhciB2PW5ldyB0aGlzLmNvbnN0cnVjdG9yO3YucHVzaC5hcHBseSh2LEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKTtyZXR1cm4gdjt9O2oucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcywwKTt9O2oucHJvdG90eXBlLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg7fTtyZXR1cm4gajt9ZnVuY3Rpb24gaihsZW5ndGgpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0xJiZ0eXBlb2YgbGVuZ3RoPT09ZCl7dGhpcy5sZW5ndGg9LTE8bGVuZ3RoJiZsZW5ndGg9PT1sZW5ndGg+Pi41P2xlbmd0aDp0aGlzLnB1c2gobGVuZ3RoKTt9ZWxzZSBpZihhcmd1bWVudHMubGVuZ3RoKXt0aGlzLnB1c2guYXBwbHkodGhpcyxhcmd1bWVudHMpO319ZnVuY3Rpb24gaCgpe31oLnByb3RvdHlwZT1bXTtqLnByb3RvdHlwZT1uZXcgaDtqLnByb3RvdHlwZS5sZW5ndGg9MDtxeC50eXBlLkJhc2VBcnJheT1rKGopO30pKCk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0iIixhPSJxeC51dGlsLlN0cmluZ0J1aWxkZXIiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXgudHlwZS5CYXNlQXJyYXksbWVtYmVyczp7Y2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aD0wO30sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuam9pbihiKTt9LGFkZDpudWxsLGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg9PT0wO30sc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmpvaW4oYikubGVuZ3RoO319LGRlZmVyOmZ1bmN0aW9uKGMsZCl7ZC5hZGQ9ZC5wdXNoO2QudG9TdHJpbmc9ZC5nZXQ7ZC52YWx1ZU9mPWQuZ2V0O319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBwPSIiLG89IiEiLG49IichIixtPSInIixrPSJFeHBlY3RlZCAnIixqPSInIChyZ2IoIixoPSIsIixnPSIpKSwgYnV0IGZvdW5kIHZhbHVlICciLGY9IkV2ZW50ICgiLGQ9IkV4cGVjdGVkIHZhbHVlIHRvIGJlIHRoZSBDU1MgY29sb3IgJyIsYnc9IicgYnV0IGZvdW5kICIsYnY9IlRoZSB2YWx1ZSAnIixidT0iICE9ICIsYnQ9InF4LmNvcmUuT2JqZWN0Iixicz0iRXhwZWN0ZWQgdmFsdWUgdG8gYmUgYW4gYXJyYXkgYnV0IGZvdW5kICIsYnI9Iikgd2FzIGZpcmVkLiIsYnE9IkV4cGVjdGVkIHZhbHVlIHRvIGJlIGFuIGludGVnZXIgPj0gMCBidXQgZm91bmQgIixicD0iJyB0byBiZSBub3QgZXF1YWwgd2l0aCAnIixibz0iJyB0byAnIixibj0icXgudWkuY29yZS5XaWRnZXQiLHc9IkNhbGxlZCBhc3NlcnRUcnVlIHdpdGggJyIseD0iRXhwZWN0ZWQgdmFsdWUgdG8gYmUgYSBtYXAgYnV0IGZvdW5kICIsdT0iVGhlIGZ1bmN0aW9uIGRpZCBub3QgcmFpc2UgYW4gZXhjZXB0aW9uISIsdj0iRXhwZWN0ZWQgdmFsdWUgdG8gYmUgdW5kZWZpbmVkIGJ1dCBmb3VuZCAiLHM9IkV4cGVjdGVkIHZhbHVlIHRvIGJlIGEgRE9NIGVsZW1lbnQgYnV0IGZvdW5kICAnIix0PSJFeHBlY3RlZCB2YWx1ZSB0byBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBidXQgZm91bmQgIixxPSInIHRvIGltcGxlbWVudCB0aGUgaW50ZXJmYWNlICciLHI9IkV4cGVjdGVkIHZhbHVlIHRvIGJlIG51bGwgYnV0IGZvdW5kICIsRT0iSW52YWxpZCBhcmd1bWVudCAndHlwZSciLEY9IkNhbGxlZCBhc3NlcnQgd2l0aCAnZmFsc2UnIixSPSJBc3NlcnRpb24gZXJyb3IhICIsTj0iRXhwZWN0ZWQgdmFsdWUgdG8gYmUgYSBzdHJpbmcgYnV0IGZvdW5kICIsYmE9Im51bGwiLFU9IicgYnV0IGZvdW5kICciLGJqPSInIG11c3QgbXVzdCBiZSBhIGtleSBvZiB0aGUgbWFwICciLGJmPSJUaGUgU3RyaW5nICciLEo9IkV4cGVjdGVkIHZhbHVlIG5vdCB0byBiZSB1bmRlZmluZWQgYnV0IGZvdW5kICIsYm09InF4LnV0aWwuQ29sb3JVdGlsIixibD0iOiAiLGJrPSJUaGUgcmFpc2VkIGV4Y2VwdGlvbiBkb2VzIG5vdCBoYXZlIHRoZSBleHBlY3RlZCB0eXBlISAiLEk9Iikgbm90IGZpcmVkLiIsTD0icXguY29yZS5Bc3NlcnQiLE09IkV4cGVjdGVkIHZhbHVlIHRvIGJlIHR5cGVvZiBvYmplY3QgYnV0IGZvdW5kICIsUD0iJyAoaWRlbnRpY2FsKSBidXQgZm91bmQgJyIsUz0iJyBtdXN0IGhhdmUgYW55IG9mIHRoZSB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgYXJyYXkgJyIsVj0iRXhwZWN0ZWQgdmFsdWUgdG8gYmUgYSBudW1iZXIgYnV0IGZvdW5kICIsYmM9IkNhbGxlZCBhc3NlcnRGYWxzZSB3aXRoICciLGJoPSJdIix5PSJFeHBlY3RlZCB2YWx1ZSB0byBiZSBhIHFvb3hkb28gb2JqZWN0IGJ1dCBmb3VuZCAiLHo9IicgYXJndW1lbnRzLiIsSz0iRXhwZWN0ZWQgdmFsdWUgbm90IHRvIGJlIG51bGwgYnV0IGZvdW5kICIsWT0iQXJyYXlbIixYPSInIGRvZXMgbm90IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gJyIsVz0iJyB0byBiZSBub3QgaWRlbnRpY2FsIHdpdGggJyIsYmU9IicgYXJndW1lbnRzIGJ1dCBmb3VuZCAnIixiZD0iJywgd2hpY2ggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIENTUyBjb2xvciEiLFQ9IkV4cGVjdGVkIG9iamVjdCAnIixiYj0icXguY29yZS5Bc3NlcnRpb25FcnJvciIsYT0iRXhwZWN0ZWQgdmFsdWUgdG8gYmUgYSBib29sZWFuIGJ1dCBmb3VuZCAiLGJnPSIpKSEiLEE9IkV4cGVjdGVkIHZhbHVlIHRvIGJlIGEgcW9veGRvbyB3aWRnZXQgYnV0IGZvdW5kICIsQj0iRXhwZWN0ZWQgdmFsdWUgJyUxJyB0byBiZSBpbiB0aGUgcmFuZ2UgJyUyJy4uJyUzJyEiLE89IkV4cGVjdGVkIHZhbHVlIHRvIGJlIHR5cGVvZiAnIixiPSJFeHBlY3RlZCB2YWx1ZSB0byBiZSB0eXBlb2YgZnVuY3Rpb24gYnV0IGZvdW5kICIsYz0iRXhwZWN0ZWQgdmFsdWUgdG8gYmUgYW4gaW50ZWdlciBidXQgZm91bmQgIixIPSJDYWxsZWQgZmFpbCgpLiIsQz0iVGhlIHBhcmFtZXRlciAncmUnIG11c3QgYmUgYSBzdHJpbmcgb3IgYSByZWd1bGFyIGV4cHJlc3Npb24uIixEPSJFeHBlY3RlZCB2YWx1ZSB0byBiZSBhIG51bWJlciA+PSAwIGJ1dCBmb3VuZCAiLEc9IkV4cGVjdGVkIHZhbHVlIHRvIGJlIGluc3RhbmNlb2YgJyIsUT0iV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBnaXZlbi4gRXhwZWN0ZWQgJyIsYmk9Im9iamVjdCI7cXguQ2xhc3MuZGVmaW5lKEwse3N0YXRpY3M6e19fdE46dHJ1ZSxfX3RPOmZ1bmN0aW9uKGJ4LGJ5KXt2YXIgYno9cDtmb3IodmFyIGk9MSxsPWFyZ3VtZW50cy5sZW5ndGg7aTxsO2krKyl7Yno9YnordGhpcy5fX3RQKGFyZ3VtZW50c1tpXSk7fXZhciBiQj1SK2J4K2JsK2J6O2lmKHRoaXMuX190Til7cXguQm9vdHN0cmFwLmVycm9yKGJCKTt9aWYocXguQ2xhc3MuaXNEZWZpbmVkKGJiKSl7dmFyIGJBPW5ldyBxeC5jb3JlLkFzc2VydGlvbkVycm9yKGJ4LGJ6KTtpZih0aGlzLl9fdE4pe3F4LkJvb3RzdHJhcC5lcnJvcigiU3RhY2sgdHJhY2U6IFxuIitiQS5nZXRTdGFja1RyYWNlKCkpO310aHJvdyBiQTt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoYkIpO319LF9fdFA6ZnVuY3Rpb24oYkMpe3ZhciBiRDtpZihiQz09PW51bGwpe2JEPWJhO31lbHNlIGlmKHF4LmxhbmcuVHlwZS5pc0FycmF5KGJDKSYmYkMubGVuZ3RoPjEwKXtiRD1ZK2JDLmxlbmd0aCtiaDt9ZWxzZSBpZigoYkMgaW5zdGFuY2VvZiBPYmplY3QpJiYoYkMudG9TdHJpbmc9PW51bGwpKXtiRD1xeC5sYW5nLkpzb24uc3RyaW5naWZ5KGJDLG51bGwsMik7fWVsc2V7dHJ5e2JEPWJDLnRvU3RyaW5nKCk7fWNhdGNoKGUpe2JEPXA7fX1yZXR1cm4gYkQ7fSxhc3NlcnQ6ZnVuY3Rpb24oYkUsYkYpe2JFPT10cnVlfHx0aGlzLl9fdE8oYkZ8fHAsRik7fSxmYWlsOmZ1bmN0aW9uKGJHKXt0aGlzLl9fdE8oYkd8fHAsSCk7fSxhc3NlcnRUcnVlOmZ1bmN0aW9uKGJILGJJKXsoYkg9PT10cnVlKXx8dGhpcy5fX3RPKGJJfHxwLHcsYkgsbSk7fSxhc3NlcnRGYWxzZTpmdW5jdGlvbihiSixiSyl7KGJKPT09ZmFsc2UpfHx0aGlzLl9fdE8oYkt8fHAsYmMsYkosbSk7fSxhc3NlcnRFcXVhbHM6ZnVuY3Rpb24oYkwsYk0sYk4pe2JMPT1iTXx8dGhpcy5fX3RPKGJOfHxwLGssYkwsVSxiTSxuKTt9LGFzc2VydE5vdEVxdWFsczpmdW5jdGlvbihiTyxiUCxiUSl7Yk8hPWJQfHx0aGlzLl9fdE8oYlF8fHAsayxiTyxicCxiUCxuKTt9LGFzc2VydElkZW50aWNhbDpmdW5jdGlvbihiUixiUyxiVCl7YlI9PT1iU3x8dGhpcy5fX3RPKGJUfHxwLGssYlIsUCxiUyxuKTt9LGFzc2VydE5vdElkZW50aWNhbDpmdW5jdGlvbihiVSxiVixiVyl7YlUhPT1iVnx8dGhpcy5fX3RPKGJXfHxwLGssYlUsVyxiVixuKTt9LGFzc2VydE5vdFVuZGVmaW5lZDpmdW5jdGlvbihiWCxiWSl7YlghPT11bmRlZmluZWR8fHRoaXMuX190TyhiWXx8cCxKLGJYLG8pO30sYXNzZXJ0VW5kZWZpbmVkOmZ1bmN0aW9uKGNhLGNiKXtjYT09PXVuZGVmaW5lZHx8dGhpcy5fX3RPKGNifHxwLHYsY2Esbyk7fSxhc3NlcnROb3ROdWxsOmZ1bmN0aW9uKGNjLGNkKXtjYyE9PW51bGx8fHRoaXMuX190TyhjZHx8cCxLLGNjLG8pO30sYXNzZXJ0TnVsbDpmdW5jdGlvbihjZSxjZil7Y2U9PT1udWxsfHx0aGlzLl9fdE8oY2Z8fHAscixjZSxvKTt9LGFzc2VydEpzb25FcXVhbHM6ZnVuY3Rpb24oY2csY2gsY2kpe3RoaXMuYXNzZXJ0RXF1YWxzKHF4LmxhbmcuSnNvbi5zdHJpbmdpZnkoY2cpLHF4LmxhbmcuSnNvbi5zdHJpbmdpZnkoY2gpLGNpKTt9LGFzc2VydE1hdGNoOmZ1bmN0aW9uKGNqLGNrLGNsKXt0aGlzLmFzc2VydFN0cmluZyhjaik7dGhpcy5hc3NlcnQocXgubGFuZy5UeXBlLmlzUmVnRXhwKGNrKXx8cXgubGFuZy5UeXBlLmlzU3RyaW5nKGNrKSxDKTtjai5zZWFyY2goY2spPj0wfHx0aGlzLl9fdE8oY2x8fHAsYmYsY2osWCxjay50b1N0cmluZygpLG4pO30sYXNzZXJ0QXJndW1lbnRzQ291bnQ6ZnVuY3Rpb24oY20sY24sY28sY3Ape3ZhciBjcT1jbS5sZW5ndGg7KGNxPj1jbiYmY3E8PWNvKXx8dGhpcy5fX3RPKGNwfHxwLFEsY24sYm8sY28sYmUsYXJndW1lbnRzLmxlbmd0aCx6KTt9LGFzc2VydEV2ZW50RmlyZWQ6ZnVuY3Rpb24oY3IsZXZlbnQsY3MsY3QsY3Upe3ZhciBjdz1mYWxzZTt2YXIgY3Y9ZnVuY3Rpb24oZSl7aWYoY3Qpe2N0LmNhbGwoY3IsZSk7fWN3PXRydWU7fTt2YXIgY3g7dHJ5e2N4PWNyLmFkZExpc3RlbmVyKGV2ZW50LGN2LGNyKTtjcy5jYWxsKCk7fWNhdGNoKGN5KXt0aHJvdyBjeTt9ZmluYWxseXt0cnl7Y3IucmVtb3ZlTGlzdGVuZXJCeUlkKGN4KTt9Y2F0Y2goY3ope319Y3c9PT10cnVlfHx0aGlzLl9fdE8oY3V8fHAsZixldmVudCxJKTt9LGFzc2VydEV2ZW50Tm90RmlyZWQ6ZnVuY3Rpb24oY0EsZXZlbnQsY0IsY0Mpe3ZhciBjRT1mYWxzZTt2YXIgY0Q9ZnVuY3Rpb24oZSl7Y0U9dHJ1ZTt9O3ZhciBjRj1jQS5hZGRMaXN0ZW5lcihldmVudCxjRCxjQSk7Y0IuY2FsbCgpO2NFPT09ZmFsc2V8fHRoaXMuX190TyhjQ3x8cCxmLGV2ZW50LGJyKTtjQS5yZW1vdmVMaXN0ZW5lckJ5SWQoY0YpO30sYXNzZXJ0RXhjZXB0aW9uOmZ1bmN0aW9uKGNHLGNILGNJLGNKKXt2YXIgY0g9Y0h8fEVycm9yO3ZhciBjSzt0cnl7dGhpcy5fX3ROPWZhbHNlO2NHKCk7fWNhdGNoKGNMKXtjSz1jTDt9ZmluYWxseXt0aGlzLl9fdE49dHJ1ZTt9aWYoY0s9PW51bGwpe3RoaXMuX190TyhjSnx8cCx1KTt9Y0sgaW5zdGFuY2VvZiBjSHx8dGhpcy5fX3RPKGNKfHxwLGJrLGNILGJ1LGNLKTtpZihjSSl7dGhpcy5hc3NlcnRNYXRjaChjSy50b1N0cmluZygpLGNJLGNKKTt9fSxhc3NlcnRJbkFycmF5OmZ1bmN0aW9uKGNNLGNOLGNPKXtjTi5pbmRleE9mKGNNKSE9PS0xfHx0aGlzLl9fdE8oY098fHAsYnYsY00sUyxjTixtKTt9LGFzc2VydEFycmF5RXF1YWxzOmZ1bmN0aW9uKGNQLGNRLGNSKXt0aGlzLmFzc2VydEFycmF5KGNQLGNSKTt0aGlzLmFzc2VydEFycmF5KGNRLGNSKTt0aGlzLmFzc2VydEVxdWFscyhjUC5sZW5ndGgsY1EubGVuZ3RoLGNSKTtmb3IodmFyIGk9MDtpPGNQLmxlbmd0aDtpKyspe3RoaXMuYXNzZXJ0SWRlbnRpY2FsKGNQW2ldLGNRW2ldLGNSKTt9fSxhc3NlcnRLZXlJbk1hcDpmdW5jdGlvbihjUyxjVCxjVSl7Y1RbY1NdIT09dW5kZWZpbmVkfHx0aGlzLl9fdE8oY1V8fHAsYnYsY1MsYmosY1QsbSk7fSxhc3NlcnRGdW5jdGlvbjpmdW5jdGlvbihjVixjVyl7cXgubGFuZy5UeXBlLmlzRnVuY3Rpb24oY1YpfHx0aGlzLl9fdE8oY1d8fHAsYixjVixvKTt9LGFzc2VydFN0cmluZzpmdW5jdGlvbihjWCxjWSl7cXgubGFuZy5UeXBlLmlzU3RyaW5nKGNYKXx8dGhpcy5fX3RPKGNZfHxwLE4sY1gsbyk7fSxhc3NlcnRCb29sZWFuOmZ1bmN0aW9uKGRhLGRiKXtxeC5sYW5nLlR5cGUuaXNCb29sZWFuKGRhKXx8dGhpcy5fX3RPKGRifHxwLGEsZGEsbyk7fSxhc3NlcnROdW1iZXI6ZnVuY3Rpb24oZGMsZGQpeyhxeC5sYW5nLlR5cGUuaXNOdW1iZXIoZGMpJiZpc0Zpbml0ZShkYykpfHx0aGlzLl9fdE8oZGR8fHAsVixkYyxvKTt9LGFzc2VydFBvc2l0aXZlTnVtYmVyOmZ1bmN0aW9uKGRlLGRmKXsocXgubGFuZy5UeXBlLmlzTnVtYmVyKGRlKSYmaXNGaW5pdGUoZGUpJiZkZT49MCl8fHRoaXMuX190TyhkZnx8cCxELGRlLG8pO30sYXNzZXJ0SW50ZWdlcjpmdW5jdGlvbihkZyxkaCl7KHF4LmxhbmcuVHlwZS5pc051bWJlcihkZykmJmlzRmluaXRlKGRnKSYmZGclMT09PTApfHx0aGlzLl9fdE8oZGh8fHAsYyxkZyxvKTt9LGFzc2VydFBvc2l0aXZlSW50ZWdlcjpmdW5jdGlvbihkaSxkail7dmFyIGRrPShxeC5sYW5nLlR5cGUuaXNOdW1iZXIoZGkpJiZpc0Zpbml0ZShkaSkmJmRpJTE9PT0wJiZkaT49MCk7ZGt8fHRoaXMuX190Tyhkanx8cCxicSxkaSxvKTt9LGFzc2VydEluUmFuZ2U6ZnVuY3Rpb24oZGwsZG0sZG4sZHApeyhkbD49ZG0mJmRsPD1kbil8fHRoaXMuX190TyhkcHx8cCxxeC5sYW5nLlN0cmluZy5mb3JtYXQoQixbZGwsZG0sZG5dKSk7fSxhc3NlcnRPYmplY3Q6ZnVuY3Rpb24oZHEsZHIpe3ZhciBkcz1kcSE9PW51bGwmJihxeC5sYW5nLlR5cGUuaXNPYmplY3QoZHEpfHx0eXBlb2YgZHE9PT1iaSk7ZHN8fHRoaXMuX190Tyhkcnx8cCxNLChkcSksbyk7fSxhc3NlcnRBcnJheTpmdW5jdGlvbihkdCxkdSl7cXgubGFuZy5UeXBlLmlzQXJyYXkoZHQpfHx0aGlzLl9fdE8oZHV8fHAsYnMsZHQsbyk7fSxhc3NlcnRNYXA6ZnVuY3Rpb24oZHYsZHcpe3F4LmxhbmcuVHlwZS5pc09iamVjdChkdil8fHRoaXMuX190Tyhkd3x8cCx4LGR2LG8pO30sYXNzZXJ0UmVnRXhwOmZ1bmN0aW9uKGR4LGR5KXtxeC5sYW5nLlR5cGUuaXNSZWdFeHAoZHgpfHx0aGlzLl9fdE8oZHl8fHAsdCxkeCxvKTt9LGFzc2VydFR5cGU6ZnVuY3Rpb24oZHosZEEsZEIpe3RoaXMuYXNzZXJ0U3RyaW5nKGRBLEUpO3R5cGVvZiAoZHopPT09ZEF8fHRoaXMuX190TyhkQnx8cCxPLGRBLGJ3LGR6LG8pO30sYXNzZXJ0SW5zdGFuY2U6ZnVuY3Rpb24oZEMsZEQsZEUpe3ZhciBkRj1kRC5jbGFzc25hbWV8fGREK3A7ZEMgaW5zdGFuY2VvZiBkRHx8dGhpcy5fX3RPKGRFfHxwLEcsZEYsYncsZEMsbyk7fSxhc3NlcnRJbnRlcmZhY2U6ZnVuY3Rpb24oZEcsZEgsZEkpe3F4LkNsYXNzLmltcGxlbWVudHNJbnRlcmZhY2UoZEcsZEgpfHx0aGlzLl9fdE8oZEl8fHAsVCxkRyxxLGRILG4pO30sYXNzZXJ0Q3NzQ29sb3I6ZnVuY3Rpb24oZEosZEssZEwpe3ZhciBkTT1xeC5DbGFzcy5nZXRCeU5hbWUoYm0pO2lmKCFkTSl7dGhyb3cgbmV3IEVycm9yKCJxeC51dGlsLkNvbG9yVXRpbCBub3QgYXZhaWxhYmxlISBZb3VyIGNvZGUgbXVzdCBoYXZlIGEgZGVwZW5kZW5jeSBvbiAncXgudXRpbC5Db2xvclV0aWwnIik7fXZhciBkTz1kTS5zdHJpbmdUb1JnYihkSik7dHJ5e3ZhciBkTj1kTS5zdHJpbmdUb1JnYihkSyk7fWNhdGNoKGRRKXt0aGlzLl9fdE8oZEx8fHAsZCxkSixqLGRPLmpvaW4oaCksZyxkSyxiZCk7fXZhciBkUD1kT1swXT09ZE5bMF0mJmRPWzFdPT1kTlsxXSYmZE9bMl09PWROWzJdO2RQfHx0aGlzLl9fdE8oZEx8fHAsZCxkTyxqLGRPLmpvaW4oaCksZyxkSyxqLGROLmpvaW4oaCksYmcpO30sYXNzZXJ0RWxlbWVudDpmdW5jdGlvbihkUixkUyl7ISEoZFImJmRSLm5vZGVUeXBlPT09MSl8fHRoaXMuX190TyhkU3x8cCxzLGRSLG4pO30sYXNzZXJ0UXhPYmplY3Q6ZnVuY3Rpb24oZFQsZFUpe3RoaXMuX190UShkVCxidCl8fHRoaXMuX190TyhkVXx8cCx5LGRULG8pO30sYXNzZXJ0UXhXaWRnZXQ6ZnVuY3Rpb24oZFYsZFcpe3RoaXMuX190UShkVixibil8fHRoaXMuX190TyhkV3x8cCxBLGRWLG8pO30sX190UTpmdW5jdGlvbihkWCxkWSl7aWYoIWRYKXtyZXR1cm4gZmFsc2U7fXZhciBlYT1kWC5jb25zdHJ1Y3Rvcjt3aGlsZShlYSl7aWYoZWEuY2xhc3NuYW1lPT09ZFkpe3JldHVybiB0cnVlO31lYT1lYS5zdXBlcmNsYXNzO31yZXR1cm4gZmFsc2U7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBwPScnLG89JyInLG09JzonLGw9J10nLGg9J251bGwnLGc9JzogJyxmPSdvYmplY3QnLGU9J2Z1bmN0aW9uJyxkPScsJyxiPSdcbicsYmE9J1xcdScsWT0nLFxuJyxYPScwMDAwJyxXPSdzdHJpbmcnLFY9IkNhbm5vdCBzdHJpbmdpZnkgYSByZWN1cnNpdmUgb2JqZWN0LiIsVT0nMCcsVD0nLScsUz0nfScsUj0nU3RyaW5nJyxRPSdCb29sZWFuJyx4PSdcXFxcJyx5PSdcXGYnLHU9J1xcdCcsdz0ne1xuJyxzPSdbXScsdD0icXgubGFuZy5Kc29uSW1wbCIscT0nWicscj0nXFxuJyx6PSdPYmplY3QnLEE9J3t9JyxIPSdAJyxGPScuJyxLPScoJyxKPSdBcnJheScsTT0nVCcsTD0nXFxyJyxDPSd7JyxQPSdKU09OLnBhcnNlJyxPPScgJyxOPSdbJyxCPSdOdW1iZXInLEQ9JyknLEU9J1tcbicsRz0nXFwiJyxJPSdcXGInO3F4LkNsYXNzLmRlZmluZSh0LHtleHRlbmQ6T2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbigpe3RoaXMuc3RyaW5naWZ5PXF4LmxhbmcuRnVuY3Rpb24uYmluZCh0aGlzLnN0cmluZ2lmeSx0aGlzKTt0aGlzLnBhcnNlPXF4LmxhbmcuRnVuY3Rpb24uYmluZCh0aGlzLnBhcnNlLHRoaXMpO30sbWVtYmVyczp7X190VDpudWxsLF9fdFU6bnVsbCxfX3RWOm51bGwsX190VzpudWxsLHN0cmluZ2lmeTpmdW5jdGlvbihiYixiYyxiZCl7dGhpcy5fX3RUPXA7dGhpcy5fX3RVPXA7dGhpcy5fX3RXPVtdO2lmKHF4LmxhbmcuVHlwZS5pc051bWJlcihiZCkpe3ZhciBiZD1NYXRoLm1pbigxMCxNYXRoLmZsb29yKGJkKSk7Zm9yKHZhciBpPTA7aTxiZDtpKz0xKXt0aGlzLl9fdFUrPU87fX1lbHNlIGlmKHF4LmxhbmcuVHlwZS5pc1N0cmluZyhiZCkpe2lmKGJkLmxlbmd0aD4xMCl7YmQ9YmQuc2xpY2UoMCwxMCk7fXRoaXMuX190VT1iZDt9aWYoYmMmJihxeC5sYW5nLlR5cGUuaXNGdW5jdGlvbihiYyl8fHF4LmxhbmcuVHlwZS5pc0FycmF5KGJjKSkpe3RoaXMuX190Vj1iYzt9ZWxzZXt0aGlzLl9fdFY9bnVsbDt9cmV0dXJuIHRoaXMuX190WChwLHsnJzpiYn0pO30sX190WDpmdW5jdGlvbihiZSxiZil7dmFyIGJpPXRoaXMuX190VCxiZyxiaj1iZltiZV07aWYoYmomJnF4LmxhbmcuVHlwZS5pc0Z1bmN0aW9uKGJqLnRvSlNPTikpe2JqPWJqLnRvSlNPTihiZSk7fWVsc2UgaWYocXgubGFuZy5UeXBlLmlzRGF0ZShiaikpe2JqPXRoaXMuZGF0ZVRvSlNPTihiaik7fWlmKHR5cGVvZiB0aGlzLl9fdFY9PT1lKXtiaj10aGlzLl9fdFYuY2FsbChiZixiZSxiaik7fWlmKGJqPT09bnVsbCl7cmV0dXJuIGg7fWlmKGJqPT09dW5kZWZpbmVkKXtyZXR1cm4gdW5kZWZpbmVkO31zd2l0Y2gocXgubGFuZy5UeXBlLmdldENsYXNzKGJqKSl7Y2FzZSBSOnJldHVybiB0aGlzLl9fdFkoYmopO2Nhc2UgQjpyZXR1cm4gaXNGaW5pdGUoYmopP1N0cmluZyhiaik6aDtjYXNlIFE6cmV0dXJuIFN0cmluZyhiaik7Y2FzZSBKOnRoaXMuX190VCs9dGhpcy5fX3RVO2JnPVtdO2lmKHRoaXMuX190Vy5pbmRleE9mKGJqKSE9PS0xKXt0aHJvdyBuZXcgVHlwZUVycm9yKFYpO310aGlzLl9fdFcucHVzaChiaik7dmFyIGxlbmd0aD1iai5sZW5ndGg7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSs9MSl7YmdbaV09dGhpcy5fX3RYKGksYmopfHxoO310aGlzLl9fdFcucG9wKCk7aWYoYmcubGVuZ3RoPT09MCl7dmFyIGJoPXM7fWVsc2UgaWYodGhpcy5fX3RUKXtiaD1FK3RoaXMuX190VCtiZy5qb2luKFkrdGhpcy5fX3RUKStiK2JpK2w7fWVsc2V7Ymg9TitiZy5qb2luKGQpK2w7fXRoaXMuX190VD1iaTtyZXR1cm4gYmg7Y2FzZSB6OnRoaXMuX190VCs9dGhpcy5fX3RVO2JnPVtdO2lmKHRoaXMuX190Vy5pbmRleE9mKGJqKSE9PS0xKXt0aHJvdyBuZXcgVHlwZUVycm9yKFYpO310aGlzLl9fdFcucHVzaChiaik7aWYodGhpcy5fX3RWJiZ0eXBlb2YgdGhpcy5fX3RWPT09Zil7dmFyIGxlbmd0aD10aGlzLl9fdFYubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bGVuZ3RoO2krPTEpe3ZhciBrPXRoaXMuX190VltpXTtpZih0eXBlb2Ygaz09PVcpe3ZhciB2PXRoaXMuX190WChrLGJqKTtpZih2KXtiZy5wdXNoKHRoaXMuX190WShrKSsodGhpcy5fX3RUP2c6bSkrdik7fX19fWVsc2V7Zm9yKHZhciBrIGluIGJqKXtpZihPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChiaixrKSl7dmFyIHY9dGhpcy5fX3RYKGssYmopO2lmKHYpe2JnLnB1c2godGhpcy5fX3RZKGspKyh0aGlzLl9fdFQ/ZzptKSt2KTt9fX19dGhpcy5fX3RXLnBvcCgpO2lmKGJnLmxlbmd0aD09PTApe3ZhciBiaD1BO31lbHNlIGlmKHRoaXMuX190VCl7Ymg9dyt0aGlzLl9fdFQrYmcuam9pbihZK3RoaXMuX190VCkrYitiaStTO31lbHNle2JoPUMrYmcuam9pbihkKStTO310aGlzLl9fdFQ9Ymk7cmV0dXJuIGJoO319LGRhdGVUb0pTT046ZnVuY3Rpb24oYmspe3ZhciBibD1mdW5jdGlvbihuKXtyZXR1cm4gbjwxMD9VK246bjt9O3ZhciBibT1mdW5jdGlvbihuKXt2YXIgYm49Ymwobik7cmV0dXJuIG48MTAwP1UrYm46Ym47fTtyZXR1cm4gaXNGaW5pdGUoYmsudmFsdWVPZigpKT9iay5nZXRVVENGdWxsWWVhcigpK1QrYmwoYmsuZ2V0VVRDTW9udGgoKSsxKStUK2JsKGJrLmdldFVUQ0RhdGUoKSkrTStibChiay5nZXRVVENIb3VycygpKSttK2JsKGJrLmdldFVUQ01pbnV0ZXMoKSkrbStibChiay5nZXRVVENTZWNvbmRzKCkpK0YrYm0oYmsuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpK3E6bnVsbDt9LF9fdFk6ZnVuY3Rpb24oYm8pe3ZhciBicD17J1xiJzpJLCdcdCc6dSwnXG4nOnIsJ1xmJzp5LCdccic6TCwnIic6RywnXFwnOnh9O3ZhciBicT0vW1xcXCJceDAwLVx4MWZceDdmLVx4OWZcdTAwYWRcdTA2MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBjLVx1MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVmZmYwLVx1ZmZmZl0vZzticS5sYXN0SW5kZXg9MDtpZihicS50ZXN0KGJvKSl7cmV0dXJuIG8rYm8ucmVwbGFjZShicSxmdW5jdGlvbihhKXt2YXIgYz1icFthXTtyZXR1cm4gdHlwZW9mIGM9PT1XP2M6YmErKFgrYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO30pK287fWVsc2V7cmV0dXJuIG8rYm8rbzt9fSxwYXJzZTpmdW5jdGlvbihicixicyl7dmFyIGJ0PS9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2c7YnQubGFzdEluZGV4PTA7aWYoYnQudGVzdChicikpe2JyPWJyLnJlcGxhY2UoYnQsZnVuY3Rpb24oYSl7cmV0dXJuIGJhKyhYK2EuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTt9KTt9aWYoL15bXF0sOnt9XHNdKiQvLnRlc3QoYnIucmVwbGFjZSgvXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLEgpLnJlcGxhY2UoLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLGwpLnJlcGxhY2UoLyg/Ol58OnwsKSg/OlxzKlxbKSsvZyxwKSkpe3ZhciBqPWV2YWwoSyticitEKTtyZXR1cm4gdHlwZW9mIGJzPT09ZT90aGlzLl9fdWEoeycnOmp9LHAsYnMpOmo7fXRocm93IG5ldyBTeW50YXhFcnJvcihQKTt9LF9fdWE6ZnVuY3Rpb24oYnUsYnYsYncpe3ZhciBieD1idVtidl07aWYoYngmJnR5cGVvZiBieD09PWYpe2Zvcih2YXIgayBpbiBieCl7aWYoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoYngsaykpe3ZhciB2PXRoaXMuX191YShieCxrLGJ3KTtpZih2IT09dW5kZWZpbmVkKXtieFtrXT12O31lbHNle2RlbGV0ZSBieFtrXTt9fX19cmV0dXJuIGJ3LmNhbGwoYnUsYnYsYngpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgubGFuZy5Kc29uIjtxeC5DbGFzcy5kZWZpbmUoYSx7c3RhdGljczp7SlNPTjoocXgubGFuZy5UeXBlLmdldENsYXNzKHdpbmRvdy5KU09OKT09IkpTT04iJiZKU09OLnBhcnNlKCd7IngiOjF9JykueD09PTEpP3dpbmRvdy5KU09OOm5ldyBxeC5sYW5nLkpzb25JbXBsKCksc3RyaW5naWZ5Om51bGwscGFyc2U6bnVsbH0sZGVmZXI6ZnVuY3Rpb24oYil7Yi5zdHJpbmdpZnk9Yi5KU09OLnN0cmluZ2lmeTtiLnBhcnNlPWIuSlNPTi5wYXJzZTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZz0iIixmPSI8YnIiLGU9IiAmbmJzcDsiLGQ9Ijxicj4iLGM9IiAiLGI9IlxuIixhPSJxeC5ib20uU3RyaW5nIjtxeC5DbGFzcy5kZWZpbmUoYSx7c3RhdGljczp7VE9fQ0hBUkNPREU6eyJxdW90IjozNCwiYW1wIjozOCwibHQiOjYwLCJndCI6NjIsIm5ic3AiOjE2MCwiaWV4Y2wiOjE2MSwiY2VudCI6MTYyLCJwb3VuZCI6MTYzLCJjdXJyZW4iOjE2NCwieWVuIjoxNjUsImJydmJhciI6MTY2LCJzZWN0IjoxNjcsInVtbCI6MTY4LCJjb3B5IjoxNjksIm9yZGYiOjE3MCwibGFxdW8iOjE3MSwibm90IjoxNzIsInNoeSI6MTczLCJyZWciOjE3NCwibWFjciI6MTc1LCJkZWciOjE3NiwicGx1c21uIjoxNzcsInN1cDIiOjE3OCwic3VwMyI6MTc5LCJhY3V0ZSI6MTgwLCJtaWNybyI6MTgxLCJwYXJhIjoxODIsIm1pZGRvdCI6MTgzLCJjZWRpbCI6MTg0LCJzdXAxIjoxODUsIm9yZG0iOjE4NiwicmFxdW8iOjE4NywiZnJhYzE0IjoxODgsImZyYWMxMiI6MTg5LCJmcmFjMzQiOjE5MCwiaXF1ZXN0IjoxOTEsIkFncmF2ZSI6MTkyLCJBYWN1dGUiOjE5MywiQWNpcmMiOjE5NCwiQXRpbGRlIjoxOTUsIkF1bWwiOjE5NiwiQXJpbmciOjE5NywiQUVsaWciOjE5OCwiQ2NlZGlsIjoxOTksIkVncmF2ZSI6MjAwLCJFYWN1dGUiOjIwMSwiRWNpcmMiOjIwMiwiRXVtbCI6MjAzLCJJZ3JhdmUiOjIwNCwiSWFjdXRlIjoyMDUsIkljaXJjIjoyMDYsIkl1bWwiOjIwNywiRVRIIjoyMDgsIk50aWxkZSI6MjA5LCJPZ3JhdmUiOjIxMCwiT2FjdXRlIjoyMTEsIk9jaXJjIjoyMTIsIk90aWxkZSI6MjEzLCJPdW1sIjoyMTQsInRpbWVzIjoyMTUsIk9zbGFzaCI6MjE2LCJVZ3JhdmUiOjIxNywiVWFjdXRlIjoyMTgsIlVjaXJjIjoyMTksIlV1bWwiOjIyMCwiWWFjdXRlIjoyMjEsIlRIT1JOIjoyMjIsInN6bGlnIjoyMjMsImFncmF2ZSI6MjI0LCJhYWN1dGUiOjIyNSwiYWNpcmMiOjIyNiwiYXRpbGRlIjoyMjcsImF1bWwiOjIyOCwiYXJpbmciOjIyOSwiYWVsaWciOjIzMCwiY2NlZGlsIjoyMzEsImVncmF2ZSI6MjMyLCJlYWN1dGUiOjIzMywiZWNpcmMiOjIzNCwiZXVtbCI6MjM1LCJpZ3JhdmUiOjIzNiwiaWFjdXRlIjoyMzcsImljaXJjIjoyMzgsIml1bWwiOjIzOSwiZXRoIjoyNDAsIm50aWxkZSI6MjQxLCJvZ3JhdmUiOjI0Miwib2FjdXRlIjoyNDMsIm9jaXJjIjoyNDQsIm90aWxkZSI6MjQ1LCJvdW1sIjoyNDYsImRpdmlkZSI6MjQ3LCJvc2xhc2giOjI0OCwidWdyYXZlIjoyNDksInVhY3V0ZSI6MjUwLCJ1Y2lyYyI6MjUxLCJ1dW1sIjoyNTIsInlhY3V0ZSI6MjUzLCJ0aG9ybiI6MjU0LCJ5dW1sIjoyNTUsImZub2YiOjQwMiwiQWxwaGEiOjkxMywiQmV0YSI6OTE0LCJHYW1tYSI6OTE1LCJEZWx0YSI6OTE2LCJFcHNpbG9uIjo5MTcsIlpldGEiOjkxOCwiRXRhIjo5MTksIlRoZXRhIjo5MjAsIklvdGEiOjkyMSwiS2FwcGEiOjkyMiwiTGFtYmRhIjo5MjMsIk11Ijo5MjQsIk51Ijo5MjUsIlhpIjo5MjYsIk9taWNyb24iOjkyNywiUGkiOjkyOCwiUmhvIjo5MjksIlNpZ21hIjo5MzEsIlRhdSI6OTMyLCJVcHNpbG9uIjo5MzMsIlBoaSI6OTM0LCJDaGkiOjkzNSwiUHNpIjo5MzYsIk9tZWdhIjo5MzcsImFscGhhIjo5NDUsImJldGEiOjk0NiwiZ2FtbWEiOjk0NywiZGVsdGEiOjk0OCwiZXBzaWxvbiI6OTQ5LCJ6ZXRhIjo5NTAsImV0YSI6OTUxLCJ0aGV0YSI6OTUyLCJpb3RhIjo5NTMsImthcHBhIjo5NTQsImxhbWJkYSI6OTU1LCJtdSI6OTU2LCJudSI6OTU3LCJ4aSI6OTU4LCJvbWljcm9uIjo5NTksInBpIjo5NjAsInJobyI6OTYxLCJzaWdtYWYiOjk2Miwic2lnbWEiOjk2MywidGF1Ijo5NjQsInVwc2lsb24iOjk2NSwicGhpIjo5NjYsImNoaSI6OTY3LCJwc2kiOjk2OCwib21lZ2EiOjk2OSwidGhldGFzeW0iOjk3NywidXBzaWgiOjk3OCwicGl2Ijo5ODIsImJ1bGwiOjgyMjYsImhlbGxpcCI6ODIzMCwicHJpbWUiOjgyNDIsIlByaW1lIjo4MjQzLCJvbGluZSI6ODI1NCwiZnJhc2wiOjgyNjAsIndlaWVycCI6ODQ3MiwiaW1hZ2UiOjg0NjUsInJlYWwiOjg0NzYsInRyYWRlIjo4NDgyLCJhbGVmc3ltIjo4NTAxLCJsYXJyIjo4NTkyLCJ1YXJyIjo4NTkzLCJyYXJyIjo4NTk0LCJkYXJyIjo4NTk1LCJoYXJyIjo4NTk2LCJjcmFyciI6ODYyOSwibEFyciI6ODY1NiwidUFyciI6ODY1NywickFyciI6ODY1OCwiZEFyciI6ODY1OSwiaEFyciI6ODY2MCwiZm9yYWxsIjo4NzA0LCJwYXJ0Ijo4NzA2LCJleGlzdCI6ODcwNywiZW1wdHkiOjg3MDksIm5hYmxhIjo4NzExLCJpc2luIjo4NzEyLCJub3RpbiI6ODcxMywibmkiOjg3MTUsInByb2QiOjg3MTksInN1bSI6ODcyMSwibWludXMiOjg3MjIsImxvd2FzdCI6ODcyNywicmFkaWMiOjg3MzAsInByb3AiOjg3MzMsImluZmluIjo4NzM0LCJhbmciOjg3MzYsImFuZCI6ODc0Mywib3IiOjg3NDQsImNhcCI6ODc0NSwiY3VwIjo4NzQ2LCJpbnQiOjg3NDcsInRoZXJlNCI6ODc1Niwic2ltIjo4NzY0LCJjb25nIjo4NzczLCJhc3ltcCI6ODc3NiwibmUiOjg4MDAsImVxdWl2Ijo4ODAxLCJsZSI6ODgwNCwiZ2UiOjg4MDUsInN1YiI6ODgzNCwic3VwIjo4ODM1LCJzdWJlIjo4ODM4LCJzdXBlIjo4ODM5LCJvcGx1cyI6ODg1Mywib3RpbWVzIjo4ODU1LCJwZXJwIjo4ODY5LCJzZG90Ijo4OTAxLCJsY2VpbCI6ODk2OCwicmNlaWwiOjg5NjksImxmbG9vciI6ODk3MCwicmZsb29yIjo4OTcxLCJsYW5nIjo5MDAxLCJyYW5nIjo5MDAyLCJsb3oiOjk2NzQsInNwYWRlcyI6OTgyNCwiY2x1YnMiOjk4MjcsImhlYXJ0cyI6OTgyOSwiZGlhbXMiOjk4MzAsIk9FbGlnIjozMzgsIm9lbGlnIjozMzksIlNjYXJvbiI6MzUyLCJzY2Fyb24iOjM1MywiWXVtbCI6Mzc2LCJjaXJjIjo3MTAsInRpbGRlIjo3MzIsImVuc3AiOjgxOTQsImVtc3AiOjgxOTUsInRoaW5zcCI6ODIwMSwienduaiI6ODIwNCwiendqIjo4MjA1LCJscm0iOjgyMDYsInJsbSI6ODIwNywibmRhc2giOjgyMTEsIm1kYXNoIjo4MjEyLCJsc3F1byI6ODIxNiwicnNxdW8iOjgyMTcsInNicXVvIjo4MjE4LCJsZHF1byI6ODIyMCwicmRxdW8iOjgyMjEsImJkcXVvIjo4MjIyLCJkYWdnZXIiOjgyMjQsIkRhZ2dlciI6ODIyNSwicGVybWlsIjo4MjQwLCJsc2FxdW8iOjgyNDksInJzYXF1byI6ODI1MCwiZXVybyI6ODM2NH0sZXNjYXBlOmZ1bmN0aW9uKGgpe3JldHVybiBxeC51dGlsLlN0cmluZ0VzY2FwZS5lc2NhcGUoaCxxeC5ib20uU3RyaW5nLkZST01fQ0hBUkNPREUpO30sdW5lc2NhcGU6ZnVuY3Rpb24oaSl7cmV0dXJuIHF4LnV0aWwuU3RyaW5nRXNjYXBlLnVuZXNjYXBlKGkscXguYm9tLlN0cmluZy5UT19DSEFSQ09ERSk7fSxmcm9tVGV4dDpmdW5jdGlvbihqKXtyZXR1cm4gcXguYm9tLlN0cmluZy5lc2NhcGUoaikucmVwbGFjZSgvKCAgfFxuKS9nLGZ1bmN0aW9uKGspe3ZhciBsPXsiICAiOmUsIlxuIjpkfTtyZXR1cm4gbFtrXXx8azt9KTt9LHRvVGV4dDpmdW5jdGlvbihtKXtyZXR1cm4gcXguYm9tLlN0cmluZy51bmVzY2FwZShtLnJlcGxhY2UoL1xzK3w8KFtePl0pKz4vZ2ksZnVuY3Rpb24obil7aWYobi5pbmRleE9mKGYpPT09MCl7cmV0dXJuIGI7fWVsc2UgaWYobi5sZW5ndGg+MCYmbi5yZXBsYWNlKC9eXHMqLyxnKS5yZXBsYWNlKC9ccyokLyxnKT09Zyl7cmV0dXJuIGM7fWVsc2V7cmV0dXJuIGc7fX0pKTt9fSxkZWZlcjpmdW5jdGlvbihvKXtvLkZST01fQ0hBUkNPREU9cXgubGFuZy5PYmplY3QuaW52ZXJ0KG8uVE9fQ0hBUkNPREUpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBnPSI7IixmPSImIixlPSdYJyxkPSIiLGM9JyMnLGI9IiYjIixhPSJxeC51dGlsLlN0cmluZ0VzY2FwZSI7cXguQ2xhc3MuZGVmaW5lKGEse3N0YXRpY3M6e2VzY2FwZTpmdW5jdGlvbihoLGope3ZhciBtLG89ZDtmb3IodmFyIGk9MCxsPWgubGVuZ3RoO2k8bDtpKyspe3ZhciBuPWguY2hhckF0KGkpO3ZhciBrPW4uY2hhckNvZGVBdCgwKTtpZihqW2tdKXttPWYraltrXStnO31lbHNle2lmKGs+MHg3Ril7bT1iK2srZzt9ZWxzZXttPW47fX1vKz1tO31yZXR1cm4gbzt9LHVuZXNjYXBlOmZ1bmN0aW9uKHAscSl7cmV0dXJuIHAucmVwbGFjZSgvJlsjXHddKzsvZ2ksZnVuY3Rpb24ocil7dmFyIHM9cjt2YXIgcj1yLnN1YnN0cmluZygxLHIubGVuZ3RoLTEpO3ZhciB0PXFbcl07aWYodCl7cz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO31lbHNle2lmKHIuY2hhckF0KDApPT1jKXtpZihyLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpPT1lKXt0PXIuc3Vic3RyaW5nKDIpO2lmKHQubWF0Y2goL15bMC05QS1GYS1mXSskL2dpKSl7cz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHQsMTYpKTt9fWVsc2V7dD1yLnN1YnN0cmluZygxKTtpZih0Lm1hdGNoKC9eXGQrJC9naSkpe3M9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0LDEwKSk7fX19fXJldHVybiBzO30pO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYlU9IiIsYlQ9JzwvZGl2PicsYlM9JzxkaXYgY2xhc3M9Iml0ZW0tZGV0YWlsLXRleHQiPicsYlI9JzxkaXYgY2xhc3M9Iml0ZW0tZGV0YWlsLWhlYWRsaW5lIj4nLGJRPSIjIixiUD0nPC90ZD4nLGJPPSInIixiTj0iKCIsYk09JyI+JyxiTD0iICIsYnY9Ii4iLGJ1PSIsJyIsYnQ9IikiLGJzPSIudG9nZ2xlU2hvd0l0ZW1EZXRhaWxzKCciLGJyPSciJyxicT0iJm5ic3A7IixicD0nPGRpdiBjbGFzcz0iaXRlbS1kZXRhaWwtZXJyb3IiPicsYm89Im5vbmUiLGJuPSI8L3A+IixibT0nIiBvbmNsaWNrPSInLGNjPScpIj4nLGNkPSJwcm9wZXJ0aWVzIixjYT0nPicsY2I9ImV2ZW50cyIsYlg9Im1ldGhvZHMiLGJZPSJtaXhpbiIsYlY9Jy50b2dnbGVQYW5lbFZpc2liaWxpdHkoJyxiVz0nPC9zcGFuPicsY2U9ImFwaXZpZXdlci5PYmplY3RSZWdpc3RyeS5nZXRPYmplY3RGcm9tSGFzaENvZGUoJyIsY2Y9Jzx0ZCBjbGFzcz0idHlwZSI+JyxiRT0nPHRkIGNsYXNzPSJ0b2dnbGUiPicsYkQ9ImFwaXZpZXdlci9pbWFnZS9vcGVuLmdpZiIsYkc9JzxkaXYgY2xhc3M9ImluZm8tcGFuZWwiPjxoMj4nLGJGPSJhcGl2aWV3ZXIuZGFvLk5vZGUiLGJJPSJJbmhlcml0ZWQgZnJvbToiLGJIPSdvcGVuLmdpZicsYks9J1wnKTsgcmV0dXJuIGZhbHNlOyInLGJKPScgdGl0bGU9IicsYkM9Jy8vJyxiQj0iPC9zcGFuPiIsYT0iJz4iLGI9IkRvY3VtZW50YXRpb24gZXJyb3JzOiIsYz0iPHNwYW4gY2xhc3M9JyIsZD0ncGFja2FnZScsZT0nIycsZj0nIiBvbm1vdXNldXA9ImFwaXZpZXdlci5UYWJWaWV3Q29udHJvbGxlci5pbnN0YW5jZS5vblNlbGVjdEl0ZW0oXCcnLGc9JyIgaHJlZj0iJyxoPSJJbmNsdWRlZCBmcm9tIG1peGluOiIsaz0nIG9uY2xpY2s9IicsbT0iLCBDb2x1bW46Iixjaj0iOyAiLGNpPSImIzE2MDsiLGNoPSJtYXJnaW4tbGVmdDoxOHB4OyIsY2c9Jzx0ZCBjbGFzcz0idGV4dCI+Jyxjbj0iIDxici8+IixjbT0iU2VlIGFsc286IixjbD0iRGVwcmVjYXRlZDoiLGNrPSc8YSBzdHlsZT0iJyxjcD0nPGltZyBzcmM9IicsY289IiBpcyBkZXByZWNhdGVkISIsTD0nYXBpdmlld2VyL2ltYWdlLycsTT0nYXBpdmlld2VyL2ltYWdlL29wZW4uZ2lmJyxKPSJbXSIsSz0iYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwiLFA9J2Nsb3NlLmdpZicsUT0iX2l0ZW1OYW1lIixOPSc8JyxPPSciIGFsdD0iJyxIPSJCb29sZWFuIixJPSJMaW5lOiAiLHU9JzxoMycsdD0iVGhpcyAiLHc9JzwvaDI+PGRpdj48L2Rpdj48L2Rpdj4nLHY9JzxzcGFuIG9uY2xpY2s9IicscT0iaXRlbS1wcml2YXRlIixwPSJjbGFzcyIscz0iaXRlbS1pbnRlcm5hbCIscj0iQWNjZXNzOiIsbz0iaW50ZXJmYWNlIixuPSd0aXRsZT0iJyxWPSc8dGQgY2xhc3M9Imljb24iICcsVz0nIiBvbmNsaWNrPSJyZXR1cm4gZmFsc2U7IicsWD0nPC9oMz4nLFk9IicpIixSPSIgfCAiLFM9IiwgIixUPSJwcml2YXRlIixVPSJFbGVtZW50IixiYT0nPHRyIGNsYXNzPSInLGJiPSdhcGl2aWV3ZXIvaW1hZ2UvY2xvc2UuZ2lmJyxFPSc8L3RyPicsRD0iaXRlbS1kZXByZWNhdGVkIixDPSJpdGVtLXByb3RlY3RlZCIsQj0nPGRpdiBfaXRlbU5hbWU9IicsQT0nJyx6PSc8L2E+PC9zcGFuPicseT0icXguY2xpZW50Iix4PSJSZXF1aXJlZCBieToiLEc9JykiLz4nLEY9Im92ZXJsYXlfIixiYz0nPGltZyBjbGFzcz0ib3BlbmNsb3NlIiBzcmM9IicsYmQ9IlN0cmluZyIsYmU9Ik92ZXJyaWRlczoiLGJmPSJfYXBwbHlFbGVtZW50IixiZz0iaW50ZXJuYWwiLGJoPSc8c3BhbiBzdHlsZT0id2hpdGUtc3BhY2U6IG5vd3JhcDsiPicsYmk9IlRCT0RZIixiaj0nPGRpdiBjbGFzcz0iaXRlbS1kZXNjIj4nLGJrPSc8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0iaW5mbyIgd2lkdGg9IjEwMCUiPicsYmw9JykiLz4gJyxiej0iYWJzdHJhY3QiLGJ5PSJwcm90ZWN0ZWQiLGJ4PSJ3ZWJraXQiLGJ3PSc8L3RhYmxlPicsYkE9InVuZGVmaW5lZCI7cXguQ2xhc3MuZGVmaW5lKEsse3R5cGU6YnosZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbihjcSxjcil7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLnNldExpc3ROYW1lKGNxKTt0aGlzLl9sYWJlbFRleHQ9Y3I7YXBpdmlld2VyLk9iamVjdFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMpO30scHJvcGVydGllczp7ZWxlbWVudDp7Y2hlY2s6VSxpbml0Om51bGwsbnVsbGFibGU6dHJ1ZSxhcHBseTpiZn0sbGlzdE5hbWU6e2NoZWNrOmJkfSxpc09wZW46e2NoZWNrOkgsaW5pdDp0cnVlfSxkb2NOb2RlOntjaGVjazpiRixudWxsYWJsZTp0cnVlfX0sc3RhdGljczp7SVRFTV9TUEVDX1JFR0VYOi9eKChbXHdcLl0rKT8oI1x3KyhcKFteXCldKlwpKT8pPykoXHMrKC4qKSk/JC8sU0VOVEVOQ0VfRU5EX1JFR0VYOi9bXlwuXS5cLihcc3w8KS8scmVzb2x2ZUxpbmtBdHRyaWJ1dGVzOmZ1bmN0aW9uKGNzLGN0KXt2YXIgY3c9L1x7QGxpbmsoW15cfV0qKVx9L21nO3ZhciBjdj1uZXcgcXgudXRpbC5TdHJpbmdCdWlsZGVyKCk7dmFyIGN1O3ZhciBjeD0wO3doaWxlKChjdT1jdy5leGVjKGNzKSkhPW51bGwpe2N2LmFkZChjcy5zdWJzdHJpbmcoY3gsY3UuaW5kZXgpK3RoaXMuY3JlYXRlSXRlbUxpbmtIdG1sKGN1WzFdLGN0KSk7Y3g9Y3UuaW5kZXgrY3VbMF0ubGVuZ3RoO31jdi5hZGQoY3Muc3Vic3RyaW5nKGN4LGNzLmxlbmd0aCkpO3JldHVybiBjdi5nZXQoKTt9LGNyZWF0ZUl0ZW1MaW5rSHRtbDpmdW5jdGlvbihjeSxjeixjQSxjQil7aWYoY0E9PW51bGwpe2NBPXRydWU7fWN5PXF4LmxhbmcuU3RyaW5nLnRyaW0oY3kpO2lmKGN5LmNoYXJBdCgwKT09YnJ8fGN5LmNoYXJBdCgwKT09Til7cmV0dXJuIGN5O31lbHNle3ZhciBjRT10aGlzLklURU1fU1BFQ19SRUdFWC5leGVjKGN5KTtpZihjRT09bnVsbCl7cmV0dXJuIGN5O31lbHNle3ZhciBjSz1jRVsyXTt2YXIgY1M9Y0VbM107dmFyIGNKPWNFWzZdO3ZhciBjRD1iVTtpZihjSz09bnVsbHx8Y0subGVuZ3RoPT0wKXtjSz1jei5nZXRGdWxsTmFtZSgpO31lbHNlIGlmKGN6JiZjSy5pbmRleE9mKGJ2KT09LTEpe3ZhciBuYW1lPWN6LmdldE5hbWUoKTtpZihjeiBpbnN0YW5jZW9mIGFwaXZpZXdlci5kYW8uUGFja2FnZSl7dmFyIGNHPWN6LmdldEZ1bGxOYW1lKCk7fWVsc2V7dmFyIGNRPWN6LmdldEZ1bGxOYW1lKCk7dmFyIGNHPWNRLnN1YnN0cmluZygwLGNRLmxlbmd0aC1uYW1lLmxlbmd0aC0xKTt9Y0s9Y0crYnYrY0s7fWlmKGNKPT1udWxsfHxjSi5sZW5ndGg9PTApe2NKPWNFWzFdO31pZihjQSl7dmFyIGNPPWFwaXZpZXdlci5kYW8uQ2xhc3MuZ2V0Q2xhc3NCeU5hbWUoY0spO2lmKGNPKXt2YXIgY1Q7aWYoY1Mpe3ZhciBjST1jUy5zdWJzdHJpbmcoMSk7dmFyIGNNPWNJLmluZGV4T2YoYk4pO2lmKGNNIT0tMSl7Y0k9cXgubGFuZy5TdHJpbmcudHJpbShjSS5zdWJzdHJpbmcoMCxjTSkpO31jVD10aGlzLl9fU3QoY0ksY08pO31lbHNle2NUPWNPO31pZihjVCl7aWYoY1QuZ2V0Tm9kZVR5cGUoKSE9PWQpe2NLPWNULmdldENsYXNzKCkuZ2V0RnVsbE5hbWUoKTt9dmFyIGNMPWFwaXZpZXdlci5UcmVlVXRpbC5nZXRJY29uVXJsKGNUKTt2YXIgY0M9YXBpdmlld2VyLnVpLkNsYXNzVmlld2VyLmNyZWF0ZUltYWdlSHRtbChjTCk7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KHksYngpKXtpZihjQy5pbmRleE9mKEYpIT09LTEpe2NEPWNoO319fX19dmFyIGNSPWNLKyhjUz9jUzpiVSk7dmFyIGNQLGNILGNOO2lmKHF4LmJvbS5jbGllbnQuRW5naW5lLk9QRVJBJiZxeC5ib20uY2xpZW50LkVuZ2luZS5WRVJTSU9OPjkpe2NQPWxvY2F0aW9uLnByb3RvY29sO2NIPWxvY2F0aW9uLmhvc3Q7Y049bG9jYXRpb24ucGF0aG5hbWU7fWVsc2V7Y1A9d2luZG93LmxvY2F0aW9uLnByb3RvY29sO2NIPXdpbmRvdy5sb2NhdGlvbi5ob3N0O2NOPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTt9dmFyIGNGPVtiaCwodHlwZW9mIGNDIT1iQT9jQzpiVSksY2srY0QrZytjUCxiQyxjSCxjTixlLGNSLFcsZixjUixiSyxiSixjUixiTSxjSix6XTtyZXR1cm4gY0Yuam9pbihiVSk7fX19LGNyZWF0ZVNlZUFsc29IdG1sOmZ1bmN0aW9uKGNVKXt2YXIgY1Y9Y1UuZ2V0U2VlKCk7aWYoY1YubGVuZ3RoPjApe3ZhciBjWD1uZXcgcXgudXRpbC5TdHJpbmdCdWlsZGVyKCk7Zm9yKHZhciBpPTA7aTxjVi5sZW5ndGg7aSsrKXtpZihjWC5sZW5ndGghPTApe2NYLmFkZChTKTt9Y1guYWRkKHRoaXMuY3JlYXRlSXRlbUxpbmtIdG1sKGNWW2ldLGNVLmdldENsYXNzKCkpKTt9aWYoIWNYLmlzRW1wdHkoKSl7dmFyIGNXPW5ldyBxeC51dGlsLlN0cmluZ0J1aWxkZXIoKTtjVy5hZGQoYlIsY20sYlQsYlMsY1gsYlQpO3JldHVybiBjVy5nZXQoKTt9fXJldHVybiBiVTt9LGNyZWF0ZUluaGVyaXRlZEZyb21IdG1sOmZ1bmN0aW9uKGNZLGRhKXtpZihjWS5nZXRDbGFzcygpLmdldFR5cGUoKSE9YlkmJmNZLmdldENsYXNzKCkhPWRhKXt2YXIgZGI9bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcihiUixiSSxiVCxiUyxhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVJdGVtTGlua0h0bWwoY1kuZ2V0Q2xhc3MoKS5nZXRGdWxsTmFtZSgpK2JRK2NZLmdldE5hbWUoKSksYlQpO3JldHVybiBkYi5nZXQoKTt9ZWxzZXtyZXR1cm4gYlU7fX0sY3JlYXRlT3ZlcndyaWRkZW5Gcm9tSHRtbDpmdW5jdGlvbihkYyl7aWYoZGMuZ2V0T3ZlcnJpZGRlbkZyb20oKSl7dmFyIGRkPW5ldyBxeC51dGlsLlN0cmluZ0J1aWxkZXIoYlIsYmUsYlQsYlMsYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlSXRlbUxpbmtIdG1sKGRjLmdldE92ZXJyaWRkZW5Gcm9tKCkuZ2V0RnVsbE5hbWUoKStiUStkYy5nZXROYW1lKCkpLGJUKTtyZXR1cm4gZGQuZ2V0KCk7fWVsc2V7cmV0dXJuIGJVO319LGNyZWF0ZUluY2x1ZGVkRnJvbUh0bWw6ZnVuY3Rpb24oZGUsZGYpe2lmKGRlLmdldENsYXNzKCkhPWRmKXtpZihkZS5nZXRDbGFzcygpLmdldFR5cGUoKT09Ylkpe3ZhciBkZz1uZXcgcXgudXRpbC5TdHJpbmdCdWlsZGVyKGJSLGgsYlQsYlMsYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlSXRlbUxpbmtIdG1sKGRlLmdldENsYXNzKCkuZ2V0RnVsbE5hbWUoKStiUStkZS5nZXROYW1lKCkpLGJUKTtyZXR1cm4gZGcuZ2V0KCk7fX1lbHNle3JldHVybiBiVTt9fSxfX1N0OmZ1bmN0aW9uKGRoLGRpKXt2YXIgZGs9ZGkuZ2V0SXRlbShkaCk7aWYoZGspe3JldHVybiBkazt9ZWxzZXt2YXIgZGw9ZGkuZ2V0Q2xhc3NIaWVyYXJjaHkoKTtmb3IodmFyIGk9MCxsPWRsLmxlbmd0aDtpPGw7aSsrKXt2YXIgZGo9ZGxbaV07ZGs9ZGouZ2V0SXRlbShkaCk7aWYoZGspe2JyZWFrO319cmV0dXJuIGRrO319LGNyZWF0ZURlc2NyaXB0aW9uSHRtbDpmdW5jdGlvbihkbSxkbixkcCl7dmFyIGRxPWRtLmdldERlc2NyaXB0aW9uKCk7aWYoZHEpe2lmKCFkcCl7ZHE9dGhpcy5fX1N1KGRxKTt9cmV0dXJuIGJqK3RoaXMucmVzb2x2ZUxpbmtBdHRyaWJ1dGVzKGRxLGRuKStiVDt9ZWxzZXtyZXR1cm4gYlU7fX0sX19TdTpmdW5jdGlvbihkcil7dmFyIGR1PWRyO3ZhciBkdD1kdS5pbmRleE9mKGJuKTtpZihkdCE9LTEpe2R1PWR1LnN1YnN0cigwLGR0KzQpO3ZhciBkcz10aGlzLlNFTlRFTkNFX0VORF9SRUdFWC5leGVjKGR1KTtpZihkcyE9bnVsbCl7ZHU9ZHIuc3Vic3RyaW5nKDAsZHMuaW5kZXgrZHNbMF0ubGVuZ3RoLTEpK2JuO319cmV0dXJuIGR1O30sZGVzY3JpcHRpb25IYXNEZXRhaWxzOmZ1bmN0aW9uKGR2KXt2YXIgZHc9ZHYuZ2V0RGVzY3JpcHRpb24oKTtpZihkdyl7cmV0dXJuIHRoaXMuX19TdShkdykhPWR3O31lbHNle3JldHVybiBmYWxzZTt9fSxjcmVhdGVUeXBlSHRtbDpmdW5jdGlvbihkeCxkeSxkeil7aWYoZHo9PW51bGwpe2R6PXRydWU7fXZhciBkRj1bXTt2YXIgZEEsZEIsZEM7aWYoZHgpe2RGPWR4LmdldFR5cGVzKCk7fXZhciBkRD1uZXcgcXgudXRpbC5TdHJpbmdCdWlsZGVyKCk7aWYoZEYubGVuZ3RoPT0wKXtkRC5hZGQoZHkpO31lbHNle2lmKGRGLmxlbmd0aD4xKXtkRC5hZGQoYk4pO31mb3IodmFyIGo9MDtqPGRGLmxlbmd0aDtqKyspe2lmKGo+MCl7ZEQuYWRkKFIpO31kQj1kRltqXS50eXBlO2RBPWRGW2pdLmRpbWVuc2lvbnM7aWYoYXBpdmlld2VyLnVpLkNsYXNzVmlld2VyLlBSSU1JVElWRVNbZEJdKXtkRC5hZGQoZEIpO31lbHNle2RDPWRCO2lmKGR6KXt2YXIgZEU9ZEIubGFzdEluZGV4T2YoYnYpO2lmKGRFIT0tMSl7ZEMrPWJMK2RCLnN1YnN0cmluZyhkRSsxKTt9fWRELmFkZChhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVJdGVtTGlua0h0bWwoZEMsZHguZ2V0Q2xhc3MoKSxmYWxzZSx0cnVlKSk7fWlmKGRBKXtmb3IodmFyIGk9MDtpPHBhcnNlSW50KGRBKTtpKyspe2RELmFkZChKKTt9fX1pZihkRi5sZW5ndGg+MSl7ZEQuYWRkKGJ0KTt9fXJldHVybiBkRC5nZXQoKTt9LGNyZWF0ZUVycm9ySHRtbDpmdW5jdGlvbihkRyxkSCl7dmFyIGRJPWRHLmdldERvY05vZGUoKTt2YXIgZEo9ZEkuZ2V0RXJyb3JzKCk7aWYoZEoubGVuZ3RoPjApe3ZhciBkSz1uZXcgcXgudXRpbC5TdHJpbmdCdWlsZGVyKGJwLGIsYlQpO2Zvcih2YXIgaT0wO2k8ZEoubGVuZ3RoO2krKyl7ZEsuYWRkKGJTLGRKW2ldLmF0dHJpYnV0ZXMubXNnLGNuKTtkSy5hZGQoYk4pO2lmKGRHLmdldENsYXNzKCkhPWRIKXtkSy5hZGQoZEcuZ2V0Q2xhc3MoKS5nZXRGdWxsTmFtZSgpLGNqKTt9ZEsuYWRkKEksZEpbaV0uYXR0cmlidXRlcy5saW5lLG0sZEpbaV0uYXR0cmlidXRlcy5jb2x1bW4rYnQsYlQpO31yZXR1cm4gZEsuZ2V0KCk7fWVsc2V7cmV0dXJuIGJVO319LGNyZWF0ZURlcHJlY2F0aW9uSHRtbDpmdW5jdGlvbihkTCxkTSl7aWYoIWRMLmlzRGVwcmVjYXRlZCgpKXtyZXR1cm4gYlU7fXZhciBkTj1uZXcgcXgudXRpbC5TdHJpbmdCdWlsZGVyKCk7ZE4uYWRkKGJwLGNsLGJUKTtkTi5hZGQoYlMpO3ZhciBkTz1kTC5nZXREZXByZWNhdGlvblRleHQoKTtpZihkTyl7ZE4uYWRkKGRPKTt9ZWxzZXtkTi5hZGQodCxkTSxjbyk7fWROLmFkZChiVCk7cmV0dXJuIGROLmdldCgpO30sY3JlYXRlQWNjZXNzSHRtbDpmdW5jdGlvbihkUCl7aWYoZFAuaXNQdWJsaWMoKSl7cmV0dXJuIGJVO312YXIgZFI9bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcigpO2RSLmFkZChiUixyLGJUKTtkUi5hZGQoYlMpO3ZhciBkUT1bXTtpZihkUC5pc1ByaXZhdGUoKSl7ZFEucHVzaChUKTt9aWYoZFAuaXNJbnRlcm5hbCgpKXtkUS5wdXNoKGJnKTt9aWYoZFAuaXNQcm90ZWN0ZWQoKSl7ZFEucHVzaChieSk7fWRSLmFkZChkUS5qb2luKGJMKSk7ZFIuYWRkKGJUKTtyZXR1cm4gZFIuZ2V0KCk7fSxjcmVhdGVJbmZvUmVxdWlyZWRCeUh0bWw6ZnVuY3Rpb24oZFMpe3ZhciBkVT1uZXcgcXgudXRpbC5TdHJpbmdCdWlsZGVyKCk7dmFyIGRUPWRTLmdldFJlcXVpcmVkQnkoKTtpZihkVC5sZW5ndGg+MCl7ZFUuYWRkKGJSLHgsYlQpO2Zvcih2YXIgaT0wO2k8ZFQubGVuZ3RoO2krKyl7ZFUuYWRkKGJTLGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLmNyZWF0ZUl0ZW1MaW5rSHRtbChkVFtpXS5nZXRGdWxsTmFtZSgpK2JRK2RTLmdldE5hbWUoKSksYlQpO319cmV0dXJuIGRVLmdldCgpO30sc2V0VGl0bGVDbGFzczpmdW5jdGlvbihkVixkVyl7dmFyIGRYPVtjLGJVLGEsZFcsYkJdO2RYWzFdPXRoaXMuZ2V0SXRlbUNzc0NsYXNzZXMoZFYpO3JldHVybiBkWC5qb2luKGJVKTt9LGdldEl0ZW1Dc3NDbGFzc2VzOmZ1bmN0aW9uKGRZKXt2YXIgZWE9W107aWYoZFkuaXNEZXByZWNhdGVkKCkpe2VhLnB1c2goRCk7fWlmKGRZLmlzUHJpdmF0ZSgpKXtlYS5wdXNoKHEpO31pZihkWS5pc0ludGVybmFsKCkpe2VhLnB1c2gocyk7fWlmKGRZLmlzUHJvdGVjdGVkKCkpe2VhLnB1c2goQyk7fXJldHVybiBlYS5qb2luKGJMKTt9fSxtZW1iZXJzOntjYW5EaXNwbGF5SXRlbTpmdW5jdGlvbihlYil7cmV0dXJuIChlYi5nZXRMaXN0TmFtZSgpPT10aGlzLmdldExpc3ROYW1lKCkpO30sZ2V0SXRlbVR5cGVIdG1sOmZ1bmN0aW9uKGVjLGVkKXt0aHJvdyBuZXcgRXJyb3IoIkFic3RyYWN0IG1ldGhvZCBjYWxsZWQhIik7fSxnZXRJdGVtVGl0bGVIdG1sOmZ1bmN0aW9uKGVlLGVmKXt0aHJvdyBuZXcgRXJyb3IoIkFic3RyYWN0IG1ldGhvZCBjYWxsZWQhIik7fSxnZXRJdGVtVGV4dEh0bWw6ZnVuY3Rpb24oZWcsZWgsZWkpe3Rocm93IG5ldyBFcnJvcigiQWJzdHJhY3QgbWV0aG9kIGNhbGxlZCEiKTt9LGdldEl0ZW1Ub29sdGlwOmZ1bmN0aW9uKGVqLGVrKXtyZXR1cm4gYlU7fSxnZXRJdGVtSHRtbDpmdW5jdGlvbihlbCxlbSxlbil7aWYoKGVsIGluc3RhbmNlb2YgYXBpdmlld2VyLmRhby5DbGFzcyl8fGVsIGluc3RhbmNlb2YgYXBpdmlld2VyLmRhby5QYWNrYWdlKXt2YXIgZXM9ZWwuZ2V0UGFja2FnZSgpO31lbHNle3ZhciBlcz1lbC5nZXRDbGFzcygpO312YXIgZXI9bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcigpO3ZhciBldD0oZXMhPWVtKSYmZXMuZ2V0VHlwZSgpPT1wO3ZhciBlcT1hcGl2aWV3ZXIuVHJlZVV0aWwuZ2V0SWNvblVybChlbCxldCk7ZXIuYWRkKGJhLGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLmdldEl0ZW1Dc3NDbGFzc2VzKGVsKSxiTSk7dmFyIGV1PXRoaXMuZ2V0SXRlbVRvb2x0aXAoZWwsZW0pO3ZhciBlcD1ldT9uK2V1K08rZXUrYnI6QTtlci5hZGQoVixlcCxjYSxhcGl2aWV3ZXIudWkuQ2xhc3NWaWV3ZXIuY3JlYXRlSW1hZ2VIdG1sKGVxKSxiUCk7dmFyIGVvPXRoaXMuZ2V0SXRlbVR5cGVIdG1sKGVsLGVtKTtlci5hZGQoY2YsKChlbyk/KGVvK2JxKTpicSksYlApO2VyLmFkZChiRSk7aWYodGhpcy5pdGVtSGFzRGV0YWlscyhlbCxlbSkpe2VyLmFkZChjcCxxeC51dGlsLlJlc291cmNlTWFuYWdlci5nZXRJbnN0YW5jZSgpLnRvVXJpKGJEKSxibSx0aGlzLl9fU3YodGhpcyksYnMsZWwuZ2V0TmFtZSgpLGJPLCgoZXMhPWVtKT9idStlcy5nZXRGdWxsTmFtZSgpK2JPOmJVKSxHKTt9ZWxzZXtlci5hZGQoY2kpO31lci5hZGQoYlApO2VyLmFkZChjZyk7ZXIuYWRkKHUpO2lmKHRoaXMuaXRlbUhhc0RldGFpbHMoZWwsZW0pKXtlci5hZGQoayx0aGlzLl9fU3YodGhpcyksYnMsZWwuZ2V0TmFtZSgpLGJPLCgoZXMhPWVtKT9idStlcy5nZXRGdWxsTmFtZSgpK2JPOmJVKSxjYyk7fWVsc2V7ZXIuYWRkKGNhKTt9ZXIuYWRkKHRoaXMuZ2V0SXRlbVRpdGxlSHRtbChlbCxlbSkpO2VyLmFkZChYKTtlci5hZGQoQixlbC5nZXROYW1lKCksYk0pO2VyLmFkZCh0aGlzLmdldEl0ZW1UZXh0SHRtbChlbCxlbSxlbikpO2VyLmFkZChiVCk7ZXIuYWRkKGJQKTtlci5hZGQoRSk7cmV0dXJuIGVyLmdldCgpO30saXRlbUhhc0RldGFpbHM6cXgubGFuZy5GdW5jdGlvbi5yZXR1cm5UcnVlLF9fU3Y6ZnVuY3Rpb24oZXYpe3JldHVybiBjZStldi50b0hhc2hDb2RlKCkrWTt9LGdldFBhbmVsSHRtbDpmdW5jdGlvbihldyl7dmFyIGV5PXRoaXMuX2xhYmVsVGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0aGlzLl9sYWJlbFRleHQuc3Vic3RyaW5nKDEpO3ZhciBleD1uZXcgcXgudXRpbC5TdHJpbmdCdWlsZGVyKGJHKTtleC5hZGQoYmMscXgudXRpbC5SZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS50b1VyaShMKyh0aGlzLmdldElzT3BlbigpP1A6YkgpKSxibSx0aGlzLl9fU3YoZXcpLGJWK3RoaXMuX19Tdih0aGlzKSxibCx2LHRoaXMuX19TdihldyksYlYsdGhpcy5fX1N2KHRoaXMpLGNjLGV5LGJXKTtleC5hZGQodyk7cmV0dXJuIGV4LmdldCgpO30sX2dldFBhbmVsSXRlbXM6ZnVuY3Rpb24oZXosZUEpe2lmKCFlQSl7cmV0dXJuIFtdO312YXIgZUI9dGhpcy5nZXRMaXN0TmFtZSgpO3ZhciBlRD1bXTt2YXIgZUc9e307aWYoZXomJihlQj09Y2J8fGVCPT1jZHx8ZUI9PWJYKSl7aWYoZUEuZ2V0VHlwZSgpPT1vKXt2YXIgZUU9ZUEuZ2V0SW50ZXJmYWNlSGllcmFyY2h5KCk7fWVsc2V7dmFyIGVFPWVBLmdldENsYXNzSGllcmFyY2h5KCk7fX1lbHNle2VFPVtlQV07fWZvcih2YXIgZUg9MDtlSDxlRS5sZW5ndGg7ZUgrKyl7dmFyIGVGPWVFW2VIXTt2YXIgZUM9ZUYuZ2V0SXRlbUxpc3QoZUIpO2lmKGVCPT1jYnx8ZUI9PWNkfHxlQj09Ylgpe3F4LmxhbmcuQXJyYXkuYXBwZW5kKGVDLGVGLmdldE5vZGVzT2ZUeXBlRnJvbU1peGlucyh0aGlzLmdldExpc3ROYW1lKCkpKTt9Zm9yKHZhciBpPTA7aTxlQy5sZW5ndGg7aSsrKXt2YXIgbmFtZT1lQ1tpXS5nZXROYW1lKCk7aWYoIShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZUcsbmFtZSkpKXtlR1tuYW1lXT1lRjtlRC5wdXNoKGVDW2ldKTt9fX1yZXR1cm4gZUQ7fSxfX1N3OmZ1bmN0aW9uKGVJLGVKLGVLLGVMLGVNKXt2YXIgZU89ZUkuY29uY2F0KCk7Zm9yKHZhciBpPWVJLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgZU49ZUlbaV07aWYoZU4uaXNQcm9wZXJ0eUdlbmVyYXRlZCgpJiYhZUope3F4LmxhbmcuQXJyYXkucmVtb3ZlQXQoZU8saSk7fWVsc2UgaWYoZU4uaXNQcml2YXRlKCkmJiFlTCl7cXgubGFuZy5BcnJheS5yZW1vdmVBdChlTyxpKTt9ZWxzZSBpZihlTi5pc1Byb3RlY3RlZCgpJiYhZUspe3F4LmxhbmcuQXJyYXkucmVtb3ZlQXQoZU8saSk7fWVsc2UgaWYoZU4uaXNJbnRlcm5hbCgpJiYhZU0pe3F4LmxhbmcuQXJyYXkucmVtb3ZlQXQoZU8saSk7fX1yZXR1cm4gZU87fSxfc29ydEl0ZW1zOmZ1bmN0aW9uKGVQKXtlUC5zb3J0KGZ1bmN0aW9uKGVRLGVSKXt2YXIgZVU9MDtpZihlUS5pc0ludGVybmFsKCkpe2VVKz00O31pZihlUS5pc1ByaXZhdGUoKSl7ZVUrPTI7fWlmKGVRLmlzUHJvdGVjdGVkKCkpe2VVKz0xO312YXIgZVQ9MDtpZihlUi5pc0ludGVybmFsKCkpe2VUKz00O31pZihlUi5pc1ByaXZhdGUoKSl7ZVQrPTI7fWlmKGVSLmlzUHJvdGVjdGVkKCkpe2VUKz0xO31pZihlVT09ZVQpe3ZhciBlVj1lUS5nZXROYW1lKCk7dmFyIGVTPWVSLmdldE5hbWUoKTtyZXR1cm4gZVYudG9Mb3dlckNhc2UoKTxlUy50b0xvd2VyQ2FzZSgpPy0xOjE7fWVsc2V7cmV0dXJuIGVVLWVUO319KTt9LF9kaXNwbGF5Tm9kZXM6ZnVuY3Rpb24oZVcsZVgpe2lmKGVXJiZlVy5sZW5ndGg+MCl7dmFyIGVZPW5ldyBxeC51dGlsLlN0cmluZ0J1aWxkZXIoYmspO2Zvcih2YXIgaT0wO2k8ZVcubGVuZ3RoO2krKyl7ZVkuYWRkKHRoaXMuZ2V0SXRlbUh0bWwoZVdbaV0sZVgsZmFsc2UpKTt9ZVkuYWRkKGJ3KTt0aGlzLmdldEJvZHlFbGVtZW50KCkuaW5uZXJIVE1MPWVZLmdldCgpO2FwaXZpZXdlci51aS5BYnN0cmFjdFZpZXdlci5maXhMaW5rcyh0aGlzLmdldEJvZHlFbGVtZW50KCkpO2FwaXZpZXdlci51aS5BYnN0cmFjdFZpZXdlci5oaWdobGlnaHRDb2RlKHRoaXMuZ2V0Qm9keUVsZW1lbnQoKSk7dGhpcy5nZXRCb2R5RWxlbWVudCgpLnN0eWxlLmRpc3BsYXk9IXRoaXMuZ2V0SXNPcGVuKCk/Ym86YlU7dGhpcy5nZXRFbGVtZW50KCkuc3R5bGUuZGlzcGxheT1iVTt9ZWxzZXt0aGlzLmdldEVsZW1lbnQoKS5zdHlsZS5kaXNwbGF5PWJvO319LHVwZGF0ZTpmdW5jdGlvbihmYSxmYil7aWYoIXRoaXMuZ2V0RWxlbWVudCgpKXtyZXR1cm47fXRoaXMuc2V0RG9jTm9kZShmYik7dmFyIGZmPWZhLmdldFNob3dJbmhlcml0ZWQoKTt2YXIgZmM9dGhpcy5fZ2V0UGFuZWxJdGVtcyhmZixmYik7aWYoZmMmJmZjLmxlbmd0aD4wKXt2YXIgZmg9ZmEuZ2V0RXhwYW5kUHJvcGVydGllcygpO3ZhciBmZD1mYS5nZXRTaG93UHJvdGVjdGVkKCk7dmFyIGZnPWZhLmdldFNob3dQcml2YXRlKCk7dmFyIGZlPWZnO2ZjPXRoaXMuX19TdyhmYyxmaCxmZCxmZyxmZSk7dGhpcy5fc29ydEl0ZW1zKGZjKTt9dGhpcy5fZGlzcGxheU5vZGVzKGZjLGZiKTt9LF9hcHBseUVsZW1lbnQ6ZnVuY3Rpb24oZmkpe3RoaXMuX3RpdGxlRWxlbWVudD1maS5maXJzdENoaWxkO3RoaXMuX2JvZHlFbGVtZW50PWZpLmxhc3RDaGlsZDt9LGdldFRpdGxlRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90aXRsZUVsZW1lbnQ7fSxnZXRCb2R5RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib2R5RWxlbWVudDt9LGdldEl0ZW1FbGVtZW50OmZ1bmN0aW9uKG5hbWUpe3ZhciBmaj10aGlzLmdldEJvZHlFbGVtZW50KCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYmkpWzBdLmNoaWxkTm9kZXM7Zm9yKHZhciBpPTA7aTxmai5sZW5ndGg7aSsrKXtpZihmaltpXS5jaGlsZE5vZGVzWzNdLmNoaWxkTm9kZXNbMV0uZ2V0QXR0cmlidXRlKFEpPT1uYW1lKXtyZXR1cm4gZmpbaV0uY2hpbGROb2Rlc1szXS5jaGlsZE5vZGVzWzFdO319fSx0b2dnbGVTaG93SXRlbURldGFpbHM6ZnVuY3Rpb24oZmssZmwpe3RyeXt2YXIgZm49dGhpcy5nZXRJdGVtRWxlbWVudChmayk7aWYoIWZuKXt0aHJvdyBFcnJvcigiRWxlbWVudCBmb3IgbmFtZSAnIitmaysiJyBub3QgZm91bmQhIik7fXZhciBmbT1mbi5fc2hvd0RldGFpbHM/IWZuLl9zaG93RGV0YWlsczp0cnVlO2ZuLl9zaG93RGV0YWlscz1mbTtpZihmbCl7dmFyIGZxPWFwaXZpZXdlci5kYW8uQ2xhc3MuZ2V0Q2xhc3NCeU5hbWUoZmwpO31lbHNle2ZxPXRoaXMuZ2V0RG9jTm9kZSgpO312YXIgZm89ZnEuZ2V0SXRlbUJ5TGlzdEFuZE5hbWUodGhpcy5nZXRMaXN0TmFtZSgpLGZrKTt2YXIgZnA9Zm4ucGFyZW50Tm9kZS5wcmV2aW91c1NpYmxpbmcuZmlyc3RDaGlsZDtmcC5zcmM9cXgudXRpbC5SZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS50b1VyaShmbT9iYjpNKTtmbi5pbm5lckhUTUw9dGhpcy5nZXRJdGVtVGV4dEh0bWwoZm8sdGhpcy5nZXREb2NOb2RlKCksZm0pO2FwaXZpZXdlci51aS5BYnN0cmFjdFZpZXdlci5maXhMaW5rcyhmbik7YXBpdmlld2VyLnVpLkFic3RyYWN0Vmlld2VyLmhpZ2hsaWdodENvZGUoZm4pO31jYXRjaChmcil7dGhpcy5lcnJvcigiVG9nZ2xpbmcgaXRlbSBkZXRhaWxzIGZhaWxlZCIpO3RoaXMuZXJyb3IoZnIpO319fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX3RpdGxlRWxlbWVudD10aGlzLl9ib2R5RWxlbWVudD1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSc8L2Rpdj4nLGo9JzxkaXYgY2xhc3M9Iml0ZW0tZGV0YWlsLXRleHQiPicsaD0nPGRpdiBjbGFzcz0iaXRlbS1kZXRhaWwtaGVhZGxpbmUiPicsZz0nPC9zcGFuPicsZj0idmFyIixlPSc8c3BhbiBjbGFzcz0icGFyYW1ldGVyLXR5cGUiPicsZD0iICIsYz0iZnVuY3Rpb24iLGI9Jzwvc3Bhbj4gPGNvZGU+JyxhPSI8Y29kZT4iLEQ9IlBhcmFtZXRlcnM6IixDPSJUaHJvd3M6IixCPSJBcHBseSBtZXRob2Qgb2YgcHJvcGVydHk6IixBPSc8L2NvZGU+Jyx6PSIpICIseT0iPC9jb2RlPiIseD0iYXBpdmlld2VyLnVpLnBhbmVscy5NZXRob2RQYW5lbCIsdz0idm9pZCIsdj0nPHNwYW4gY2xhc3M9Im1ldGhvZC1zaWduYXR1cmUiPjxzcGFuIGNsYXNzPSJwYXJlbnRoZXNpcyI+KDwvc3Bhbj4nLHU9IlJldHVybnM6IixyPSIgKGRlZmF1bHQ6ICIscz0iW10iLHA9JzxzcGFuIGNsYXNzPSJzZXBhcmF0b3IiPiw8L3NwYW4+ICcscT0nPHNwYW4gY2xhc3M9InBhcmVudGhlc2lzIj4pPC9zcGFuPjwvc3Bhbj4nLG49IkNyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgIixvPSc8c3BhbiBjbGFzcz0iaXRlbS1kZXRhaWwtb3B0aW9uYWwiPicsbD0iPyIsbT0iYWJzdHJhY3QgIix0PSIuIjtxeC5DbGFzcy5kZWZpbmUoeCx7ZXh0ZW5kOmFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLG1lbWJlcnM6e2dldEl0ZW1UaXRsZUh0bWw6ZnVuY3Rpb24oRSl7aWYoRS5pc0NvbnN0cnVjdG9yKCkpe3ZhciBJPUUuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7fWVsc2V7ST1FLmdldE5hbWUoKTt9dmFyIEY9bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcihhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5zZXRUaXRsZUNsYXNzKEUsSSkpO0YuYWRkKHYpO3ZhciBHPUUuZ2V0UGFyYW1zKCk7Zm9yKHZhciBpPTA7aTxHLmxlbmd0aDtpKyspe3ZhciBIPUdbaV07aWYoaSE9MCl7Ri5hZGQocCk7fUYuYWRkKGUsYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlVHlwZUh0bWwoSCxmKSxiLEguZ2V0TmFtZSgpLEEpO2lmKEguZ2V0RGVmYXVsdFZhbHVlKCkpe0YuYWRkKGwpO319Ri5hZGQocSk7cmV0dXJuIEYuZ2V0KCk7fSxnZXRJdGVtVHlwZUh0bWw6ZnVuY3Rpb24oSil7dmFyIEs9bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcigpO2lmKEouaXNBYnN0cmFjdCgpKXtLLmFkZChtKTt9aWYoIUouaXNDb25zdHJ1Y3RvcigpKXtLLmFkZChhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVUeXBlSHRtbChKLmdldERvY05vZGUoKS5nZXRSZXR1cm4oKSx3KSk7fXJldHVybiBLLmdldCgpO30sZ2V0SXRlbVRleHRIdG1sOmZ1bmN0aW9uKEwsTSxOKXt2YXIgVT1MLmdldENsYXNzKCk7dmFyIFg9bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcigpO2lmKEwuaXNDb25zdHJ1Y3RvcigpJiYhTC5nZXREZXNjcmlwdGlvbigpKXtYLmFkZChuLFUuZ2V0TmFtZSgpLHQpO31lbHNle1guYWRkKGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLmNyZWF0ZURlc2NyaXB0aW9uSHRtbChMLFUsTikpO31pZihOKXt2YXIgVj1MLmdldERvY05vZGUoKS5nZXRQYXJhbXMoKTtpZihWLmxlbmd0aD4wKXtYLmFkZChoLEQsayk7Zm9yKHZhciBpPTA7aTxWLmxlbmd0aDtpKyspe3ZhciBSPVZbaV07dmFyIE89Ui5nZXRUeXBlKCk/Ui5nZXRUeXBlKCk6Zjt2YXIgVD1SLmdldEFycmF5RGltZW5zaW9ucygpO2lmKFQpe2Zvcih2YXIgaT0wO2k8VDtpKyspe08rPXM7fX12YXIgWT1SLmdldERlZmF1bHRWYWx1ZSgpO1guYWRkKGopO2lmKFkpe1guYWRkKG8pO31YLmFkZChhLFIuZ2V0TmFtZSgpLHkpO2lmKFkpe1guYWRkKHIsWSx6LGcpO312YXIgYmE9Ui5nZXREZXNjcmlwdGlvbigpO2lmKGJhKXtYLmFkZChkLGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLnJlc29sdmVMaW5rQXR0cmlidXRlcyhiYSxVKSk7fVguYWRkKGspO319dmFyIFA9TC5nZXREb2NOb2RlKCkuZ2V0UmV0dXJuKCk7aWYoUCl7dmFyIGJhPVAuZ2V0RGVzY3JpcHRpb24oKTtpZihiYSl7WC5hZGQoaCx1LGssaixhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5yZXNvbHZlTGlua0F0dHJpYnV0ZXMoYmEsVSksayk7fX1pZihMLmdldEFwcGx5KCkpe1guYWRkKGgsQixrLGosYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlSXRlbUxpbmtIdG1sKEwuZ2V0QXBwbHkoKSxMLmdldENsYXNzKCksdHJ1ZSx0cnVlKSxrKTt9dmFyIFM9TC5nZXREb2NOb2RlKCkuZ2V0VGhyb3dzKCk7aWYoUy5sZW5ndGg+MCl7WC5hZGQoaCxDLGspO2Zvcih2YXIgaT0wO2k8Uy5sZW5ndGg7aSsrKXt2YXIgVz1TW2ldO3ZhciBRPVcuZ2V0VHlwZSgpP1cuZ2V0VHlwZSgpOlcuZ2V0RGVmYXVsdFR5cGUoKTtYLmFkZChqKTtYLmFkZChlLGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLmNyZWF0ZUl0ZW1MaW5rSHRtbChRKSxnKTt2YXIgYmE9Vy5nZXREZXNjcmlwdGlvbigpO2lmKGJhKXtYLmFkZChkLGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLnJlc29sdmVMaW5rQXR0cmlidXRlcyhiYSxVKSk7fVguYWRkKGspO319WC5hZGQoYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlQWNjZXNzSHRtbChMKSk7WC5hZGQoYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlSW5jbHVkZWRGcm9tSHRtbChMLE0pKTtYLmFkZChhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVPdmVyd3JpZGRlbkZyb21IdG1sKEwpKTtYLmFkZChhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVJbmhlcml0ZWRGcm9tSHRtbChMLE0pKTtYLmFkZChhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVJbmZvUmVxdWlyZWRCeUh0bWwoTCkpO1guYWRkKGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLmNyZWF0ZVNlZUFsc29IdG1sKEwpKTtYLmFkZChhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVFcnJvckh0bWwoTCxNKSk7WC5hZGQoYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlRGVwcmVjYXRpb25IdG1sKEwsYykpO31yZXR1cm4gWC5nZXQoKTt9LGl0ZW1IYXNEZXRhaWxzOmZ1bmN0aW9uKGJiLGJjKXt2YXIgYmQ9YmIuZ2V0RG9jTm9kZSgpO3ZhciBiZT1iZC5nZXRSZXR1cm4oKSYmYmQuZ2V0UmV0dXJuKCkuZ2V0RGVzY3JpcHRpb24oKTtyZXR1cm4gKGJiLmdldENsYXNzKCkhPWJjfHxiYi5nZXRPdmVycmlkZGVuRnJvbSgpIT1udWxsfHxiYi5nZXRSZXF1aXJlZEJ5KCkubGVuZ3RoPjB8fGJkLmdldFBhcmFtcygpLmxlbmd0aD4wfHxiZC5nZXRUaHJvd3MoKS5sZW5ndGg+MHx8YmV8fGJiLmdldFNlZSgpLmxlbmd0aD4wfHxiYi5nZXRFcnJvcnMoKS5sZW5ndGg+MHx8YmIuaXNEZXByZWNhdGVkKCl8fGJiLmdldEFwcGx5KCl8fGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLmRlc2NyaXB0aW9uSGFzRGV0YWlscyhiYikpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaD0iIixnPSJkZXByZWNhdGVkIixmPSJpbnRlcm5hbCIsZT0icHJvdGVjdGVkIixkPSJlcnJvcnMiLGM9ImFwaXZpZXdlci5kYW8uTm9kZSIsYj0ic3RyaW5nIixhPSJwcml2YXRlIjtxeC5DbGFzcy5kZWZpbmUoYyx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbihqKXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3RoaXMuX2RvY05vZGU9ajtqLmNoaWxkcmVuPWouY2hpbGRyZW58fFtdO2ouYXR0cmlidXRlcz1qLmF0dHJpYnV0ZXN8fHt9O2ouY2xzPXRoaXM7dGhpcy5faW5pdGlhbGl6ZUZpZWxkcygpO2Zvcih2YXIgaT0wO2k8ai5jaGlsZHJlbi5sZW5ndGg7aSsrKXt2YXIgaz1qLmNoaWxkcmVuW2ldO2lmKCF0aGlzLl9hZGRDaGlsZE5vZGUoaykpe3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBjaGlsZCB0eXBlOiAiK2sudHlwZSsiIG5vZGU6ICIrcXgudXRpbC5Kc29uLnN0cmluZ2lmeShrKSk7fX19LG1lbWJlcnM6e2dldE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9jTm9kZTt9LGdldE5vZGVUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUudHlwZTt9LGdldEVycm9yczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lcnJvcnM7fSxnZXREZXByZWNhdGlvblRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVwcmVjYXRlZHx8aDt9LGlzRGVwcmVjYXRlZDpmdW5jdGlvbigpe3JldHVybiB0eXBlb2YgKHRoaXMuX2RlcHJlY2F0ZWQpPT1iP3RydWU6ZmFsc2U7fSxpc0ludGVybmFsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5hY2Nlc3M9PWY7fSxpc1ByaXZhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9jTm9kZS5hdHRyaWJ1dGVzLmFjY2Vzcz09YTt9LGlzUHJvdGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5hY2Nlc3M9PWU7fSxpc1Byb3BlcnR5R2VuZXJhdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5mcm9tUHJvcGVydHkhPW51bGw7fSxpc1B1YmxpYzpmdW5jdGlvbigpe3JldHVybiAoIXRoaXMuaXNQcml2YXRlKCkmJiF0aGlzLmlzUHJvdGVjdGVkKCkmJiF0aGlzLmlzSW50ZXJuYWwoKSk7fSxoYXNXYXJuaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5oYXNXYXJuaW5nfHxmYWxzZTt9LF9jcmVhdGVOb2RlTGlzdDpmdW5jdGlvbihsLG0sbixvKXtpZihtKXt2YXIgcD1bXTtmb3IodmFyIGk9MDtpPGwuY2hpbGRyZW4ubGVuZ3RoO2krKyl7cC5wdXNoKG5ldyBtKGwuY2hpbGRyZW5baV0sbixvKSk7fXJldHVybiBwO31lbHNle3JldHVybiBsLmNoaWxkcmVuO319LF9pbml0aWFsaXplRmllbGRzOmZ1bmN0aW9uKCl7dGhpcy5fZXJyb3JzPVtdO30sX2FkZENoaWxkTm9kZTpmdW5jdGlvbihxKXtzd2l0Y2gocS50eXBlKXtjYXNlIGc6dGhpcy5fZGVwcmVjYXRlZD1xLmNoaWxkcmVuP3EuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy50ZXh0fHxoOmg7YnJlYWs7Y2FzZSBkOnRoaXMuX2Vycm9ycz10aGlzLl9jcmVhdGVOb2RlTGlzdChxKTticmVhaztkZWZhdWx0OnJldHVybiBmYWxzZTt9cmV0dXJuIHRydWU7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9kb2NOb2RlPXRoaXMuX2Vycm9ycz1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSIiLGg9ImdldENsYXNzZXMiLGc9ImdldFBhY2thZ2VzIixmPSJmdW5jdGlvbnMiLGU9ImdldEZ1bmN0aW9ucyIsZD0icGFja2FnZXMiLGM9ImRlc2MiLGI9ImNsYXNzZXMiLGE9ImFwaXZpZXdlci5kYW8uUGFja2FnZSI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDphcGl2aWV3ZXIuZGFvLk5vZGUsY29uc3RydWN0OmZ1bmN0aW9uKGwsbSl7YXBpdmlld2VyLmRhby5Ob2RlLmNhbGwodGhpcyxsKTt0aGlzLl9wYWNrYWdlPW07YXBpdmlld2VyLmRhby5DbGFzcy5yZWdpc3RlckNsYXNzKHRoaXMpO30sbWVtYmVyczp7Z2V0TmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMubmFtZTt9LGdldEZ1bGxOYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5mdWxsTmFtZXx8azt9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc2N8fGs7fSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsYXNzZXM7fSxnZXRGdW5jdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnVuY3Rpb25zO30sZ2V0UGFja2FnZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFja2FnZXM7fSxnZXRQYWNrYWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhY2thZ2U7fSxhZGRDbGFzczpmdW5jdGlvbihuKXt2YXIgbz1uLmdldEZ1bGxOYW1lKCk7dmFyIHA9dGhpcy5nZXRDbGFzc2VzKCk7Zm9yKHZhciBpPTA7aTxwLmxlbmd0aDtpKyspe2lmKHBbaV0uZ2V0RnVsbE5hbWUoKT09byl7cFtpXT1uO3JldHVybjt9fXAucHVzaChuKTt9LGdldEl0ZW06ZnVuY3Rpb24ocSl7dmFyIHI9W2gsZ107Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBzPXRoaXNbcltpXV0oKTtmb3IodmFyIGo9MDtqPHMubGVuZ3RoO2orKyl7aWYocT09c1tqXS5nZXROYW1lKCkpe3JldHVybiBzW2pdO319fX0sZ2V0SXRlbUxpc3Q6ZnVuY3Rpb24odCl7dmFyIHU9eyJjbGFzc2VzIjpoLCJwYWNrYWdlcyI6ZywiZnVuY3Rpb25zIjplfTtyZXR1cm4gdGhpc1t1W3RdXSgpO30sZ2V0SXRlbUJ5TGlzdEFuZE5hbWU6ZnVuY3Rpb24odix3KXt2YXIgeD10aGlzLmdldEl0ZW1MaXN0KHYpO2Zvcih2YXIgaj0wO2o8eC5sZW5ndGg7aisrKXtpZih3PT14W2pdLmdldE5hbWUoKSl7cmV0dXJuIHhbal07fX19LF9pbml0aWFsaXplRmllbGRzOmZ1bmN0aW9uKCl7YXBpdmlld2VyLmRhby5Ob2RlLnByb3RvdHlwZS5faW5pdGlhbGl6ZUZpZWxkcy5jYWxsKHRoaXMpO3RoaXMuX2NsYXNzZXM9W107dGhpcy5fcGFja2FnZXM9W107dGhpcy5fZnVuY3Rpb25zPVtdO30sX2FkZENoaWxkTm9kZTpmdW5jdGlvbih5KXtzd2l0Y2goeS50eXBlKXtjYXNlIGI6dGhpcy5fY2xhc3Nlcz10aGlzLl9jcmVhdGVOb2RlTGlzdCh5LGFwaXZpZXdlci5kYW8uQ2xhc3MsdGhpcyk7YnJlYWs7Y2FzZSBmOnRoaXMuX2Z1bmN0aW9ucz10aGlzLl9jcmVhdGVOb2RlTGlzdCh5LGFwaXZpZXdlci5kYW8uTWV0aG9kLHRoaXMpO2JyZWFrO2Nhc2UgZDp0aGlzLl9wYWNrYWdlcz10aGlzLl9jcmVhdGVOb2RlTGlzdCh5LGFwaXZpZXdlci5kYW8uUGFja2FnZSx0aGlzKTticmVhaztjYXNlIGM6dGhpcy5fZGVzYz15LmF0dHJpYnV0ZXMudGV4dHx8azticmVhaztkZWZhdWx0OnJldHVybiBhcGl2aWV3ZXIuZGFvLk5vZGUucHJvdG90eXBlLl9hZGRDaGlsZE5vZGUuY2FsbCh0aGlzLHkpO31yZXR1cm4gdHJ1ZTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX3BhY2thZ2U9dGhpcy5fY2xhc3Nlcz10aGlzLl9mdW5jdGlvbnM9dGhpcy5fcGFja2FnZXM9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbj0iLCIsbT0iIixrPSJzdHJpbmciLGo9Im51bGwiLGg9JyInLGc9JzonLGY9InF4Lmpzb25EZWJ1Z2dpbmciLGU9Jy0nLGQ9J1xcdTAwJyxjPSJfX3FMIixOPSJuZXcgRGF0ZShEYXRlLlVUQygiLE09J1xcXFwnLEw9J1xcZicsSz0nXFwiJyxKPSdaJyxJPSIpKSIsSD0iX19xQiIsRz0iX19xRCIsRj0ifSIsRT0nKCcsdT0nLicsdj0ieyIscz0nXFxyJyx0PSI6IixxPSdcXHQnLHI9Il0iLG89IlsiLHA9Il9fcUUiLHc9InF4Lmpzb25FbmNvZGVVbmRlZmluZWQiLHg9J1QnLHo9J1xcYicseT0iX19xQyIsQj0icXgudXRpbC5Kc29uIixBPScpJyxEPSdcXG4nLEM9Il9fcU0iO3F4LkNsYXNzLmRlZmluZShCLHtzdGF0aWNzOntfX3F6Om51bGwsQkVBVVRJRllJTkdfSU5ERU5UOiIgICIsQkVBVVRJRllJTkdfTElORV9FTkQ6IlxuIixDT05WRVJUX0RBVEVTOm51bGwsX19xQTp7ImZ1bmN0aW9uIjpILCJib29sZWFuIjp5LCJudW1iZXIiOkcsInN0cmluZyI6cCwib2JqZWN0IjpjLCJ1bmRlZmluZWQiOkN9LF9fcUI6ZnVuY3Rpb24oTyxQKXtyZXR1cm4gU3RyaW5nKE8pO30sX19xQzpmdW5jdGlvbihRLFIpe3JldHVybiBTdHJpbmcoUSk7fSxfX3FEOmZ1bmN0aW9uKFMsVCl7cmV0dXJuIGlzRmluaXRlKFMpP1N0cmluZyhTKTpqO30sX19xRTpmdW5jdGlvbihVLFYpe3ZhciBXO2lmKC9bIlxcXHgwMC1ceDFmXS8udGVzdChVKSl7Vz1VLnJlcGxhY2UoLyhbXHgwMC1ceDFmXFwiXSkvZyxxeC51dGlsLkpzb24uX19xRyk7fWVsc2V7Vz1VO31yZXR1cm4gaCtXK2g7fSxfX3FGOnsnXGInOnosJ1x0JzpxLCdcbic6RCwnXGYnOkwsJ1xyJzpzLCciJzpLLCdcXCc6TX0sX19xRzpmdW5jdGlvbihhLGIpe3ZhciBYPXF4LnV0aWwuSnNvbi5fX3FGW2JdO2lmKFgpe3JldHVybiBYO31YPWIuY2hhckNvZGVBdCgpO3JldHVybiBkK01hdGguZmxvb3IoWC8xNikudG9TdHJpbmcoMTYpKyhYJTE2KS50b1N0cmluZygxNik7fSxfX3FIOmZ1bmN0aW9uKFksYmEpe3ZhciBiYz1bXSxiZj10cnVlLGJlLGJiO3ZhciBiZD1xeC51dGlsLkpzb24uX19xTztiYy5wdXNoKG8pO2lmKGJkKXtxeC51dGlsLkpzb24uX19xSSs9cXgudXRpbC5Kc29uLkJFQVVUSUZZSU5HX0lOREVOVDtiYy5wdXNoKHF4LnV0aWwuSnNvbi5fX3FJKTt9Zm9yKHZhciBpPTAsbD1ZLmxlbmd0aDtpPGw7aSsrKXtiYj1ZW2ldO2JlPXRoaXMuX19xQVt0eXBlb2YgYmJdO2lmKGJlKXtiYj10aGlzW2JlXShiYixpK20pO2lmKHR5cGVvZiBiYj09ayl7aWYoIWJmKXtiYy5wdXNoKG4pO2lmKGJkKXtiYy5wdXNoKHF4LnV0aWwuSnNvbi5fX3FJKTt9fWJjLnB1c2goYmIpO2JmPWZhbHNlO319fWlmKGJkKXtxeC51dGlsLkpzb24uX19xST1xeC51dGlsLkpzb24uX19xSS5zdWJzdHJpbmcoMCxxeC51dGlsLkpzb24uX19xSS5sZW5ndGgtcXgudXRpbC5Kc29uLkJFQVVUSUZZSU5HX0lOREVOVC5sZW5ndGgpO2JjLnB1c2gocXgudXRpbC5Kc29uLl9fcUkpO31iYy5wdXNoKHIpO3JldHVybiBiYy5qb2luKG0pO30sX19xSjpmdW5jdGlvbihiZyxiaCl7aWYoIXF4LnV0aWwuSnNvbi5DT05WRVJUX0RBVEVTKXtpZihiZy50b0pTT04mJiFxeC5ib20uY2xpZW50LkVuZ2luZS5PUEVSQSl7cmV0dXJuIGJnLnRvSlNPTigpO312YXIgYmk9cXgudXRpbC5mb3JtYXQuTnVtYmVyRm9ybWF0LmdldEluc3RhbmNlKCk7Ymkuc2V0TWluaW11bUludGVnZXJEaWdpdHMoMik7dmFyIGJrPWJnLmdldFVUQ0Z1bGxZZWFyKCkrZStiaS5mb3JtYXQoYmcuZ2V0VVRDTW9udGgoKSsxKStlK2JpLmZvcm1hdChiZy5nZXRVVENEYXRlKCkpK3grYmkuZm9ybWF0KGJnLmdldFVUQ0hvdXJzKCkpK2crYmkuZm9ybWF0KGJnLmdldFVUQ01pbnV0ZXMoKSkrZytiaS5mb3JtYXQoYmcuZ2V0VVRDU2Vjb25kcygpKSt1O2JpLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKDMpO3JldHVybiBiaytiaS5mb3JtYXQoYmcuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpK0o7fWVsc2V7dmFyIGJqPWJnLmdldFVUQ0Z1bGxZZWFyKCkrbitiZy5nZXRVVENNb250aCgpK24rYmcuZ2V0VVRDRGF0ZSgpK24rYmcuZ2V0VVRDSG91cnMoKStuK2JnLmdldFVUQ01pbnV0ZXMoKStuK2JnLmdldFVUQ1NlY29uZHMoKStuK2JnLmdldFVUQ01pbGxpc2Vjb25kcygpO3JldHVybiBOK2JqK0k7fX0sX19xSzpmdW5jdGlvbihibCxibSl7dmFyIGJwPVtdLGJyPXRydWUsYm8sYm47dmFyIGJxPXF4LnV0aWwuSnNvbi5fX3FPO2JwLnB1c2godik7aWYoYnEpe3F4LnV0aWwuSnNvbi5fX3FJKz1xeC51dGlsLkpzb24uQkVBVVRJRllJTkdfSU5ERU5UO2JwLnB1c2gocXgudXRpbC5Kc29uLl9fcUkpO31mb3IodmFyIGJtIGluIGJsKXtibj1ibFtibV07Ym89dGhpcy5fX3FBW3R5cGVvZiBibl07aWYoYm8pe2JuPXRoaXNbYm9dKGJuLGJtKTtpZih0eXBlb2YgYm49PWspe2lmKCFicil7YnAucHVzaChuKTtpZihicSl7YnAucHVzaChxeC51dGlsLkpzb24uX19xSSk7fX1icC5wdXNoKHRoaXMuX19xRShibSksdCxibik7YnI9ZmFsc2U7fX19aWYoYnEpe3F4LnV0aWwuSnNvbi5fX3FJPXF4LnV0aWwuSnNvbi5fX3FJLnN1YnN0cmluZygwLHF4LnV0aWwuSnNvbi5fX3FJLmxlbmd0aC1xeC51dGlsLkpzb24uQkVBVVRJRllJTkdfSU5ERU5ULmxlbmd0aCk7YnAucHVzaChxeC51dGlsLkpzb24uX19xSSk7fWJwLnB1c2goRik7cmV0dXJuIGJwLmpvaW4obSk7fSxfX3FMOmZ1bmN0aW9uKGJzLGJ0KXtpZihicyl7aWYocXgubGFuZy5UeXBlLmlzRnVuY3Rpb24oYnMudG9KU09OKSYmYnMudG9KU09OIT09dGhpcy5fX3F6KXtyZXR1cm4gdGhpcy5fX3FOKGJzLnRvSlNPTihidCksYnQpO31lbHNlIGlmKHF4LmxhbmcuVHlwZS5pc0RhdGUoYnMpKXtyZXR1cm4gdGhpcy5fX3FKKGJzLGJ0KTt9ZWxzZSBpZihxeC5sYW5nLlR5cGUuaXNBcnJheShicykpe3JldHVybiB0aGlzLl9fcUgoYnMsYnQpO31lbHNlIGlmKHF4LmxhbmcuVHlwZS5pc09iamVjdChicykpe3JldHVybiB0aGlzLl9fcUsoYnMsYnQpO31yZXR1cm4gbTt9cmV0dXJuIGo7fSxfX3FNOmZ1bmN0aW9uKGJ1LGJ2KXtpZihxeC5jb3JlLlNldHRpbmcuZ2V0KHcpKXtyZXR1cm4gajt9fSxfX3FOOmZ1bmN0aW9uKGJ3LGJ4KXtyZXR1cm4gdGhpc1t0aGlzLl9fcUFbdHlwZW9mIGJ3XV0oYncsYngpO30sc3RyaW5naWZ5OmZ1bmN0aW9uKGJ5LGJ6KXt0aGlzLl9fcU89Yno7dGhpcy5fX3FJPXRoaXMuQkVBVVRJRllJTkdfTElORV9FTkQ7dmFyIGJBPXRoaXMuX19xTihieSxtKTtpZih0eXBlb2YgYkEhPWspe2JBPW51bGw7fWlmKHF4LmNvcmUuU2V0dGluZy5nZXQoZikpe3F4LmxvZy5Mb2dnZXIuZGVidWcodGhpcywiSlNPTiByZXF1ZXN0OiAiK2JBKTt9cmV0dXJuIGJBO30scGFyc2U6ZnVuY3Rpb24oYkIsYkMpe2lmKGJDPT09dW5kZWZpbmVkKXtiQz10cnVlO31pZihxeC5jb3JlLlNldHRpbmcuZ2V0KGYpKXtxeC5sb2cuTG9nZ2VyLmRlYnVnKHRoaXMsIkpTT04gcmVzcG9uc2U6ICIrYkIpO31pZihiQyl7aWYoL1teLDp7fVxbXF0wLTkuXC0rRWFlZmxuci11IFxuXHJcdF0vLnRlc3QoYkIucmVwbGFjZSgvIihcXC58W14iXFxdKSoiL2csbSkpKXt0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBwYXJzZSBKU09OIHN0cmluZyEiKTt9fXRyeXt2YXIgYkQ9KGJCJiZiQi5sZW5ndGg+MCk/ZXZhbChFK2JCK0EpOm51bGw7cmV0dXJuIGJEO31jYXRjaChiRSl7dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZXZhbHVhdGUgSlNPTiBzdHJpbmc6ICIrYkUubWVzc2FnZSk7fX19LHNldHRpbmdzOnsicXguanNvbkVuY29kZVVuZGVmaW5lZCI6dHJ1ZSwicXguanNvbkRlYnVnZ2luZyI6ZmFsc2V9LGRlZmVyOmZ1bmN0aW9uKGJGKXtiRi5fX3F6PURhdGUucHJvdG90eXBlLnRvSlNPTjt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgudXRpbC5mb3JtYXQuSUZvcm1hdCI7cXguSW50ZXJmYWNlLmRlZmluZShhLHttZW1iZXJzOntmb3JtYXQ6ZnVuY3Rpb24oYil7fSxwYXJzZTpmdW5jdGlvbihjKXt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIHQ9IiIscz0iTnVtYmVyIixyPSItIixxPSIwIixwPSJTdHJpbmciLG89ImNoYW5nZU51bWJlckZvcm1hdCIsbj0nKCcsbT0iZyIsbD0iQm9vbGVhbiIsaz0iJCIsZD0iTmFOIixqPScoWzAtOV17MSwzfSg/OicsZz0nezAsMX1bMC05XXszfSl7MCx9KScsYz0nXFxkKyl7MCwxfScsYj0icXgudXRpbC5mb3JtYXQuTnVtYmVyRm9ybWF0IixmPSJJbmZpbml0eSIsZT0iXiIsaD0iLiIsYT0iLUluZmluaXR5IixpPScoWy0rXSl7MCwxfSc7cXguQ2xhc3MuZGVmaW5lKGIse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6cXgudXRpbC5mb3JtYXQuSUZvcm1hdCxjb25zdHJ1Y3Q6ZnVuY3Rpb24odSl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9fcm89dTt9LHN0YXRpY3M6e2dldEludGVnZXJJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciB2PXF4LnV0aWwuZm9ybWF0Lk51bWJlckZvcm1hdDtpZih2Ll9pbnRlZ2VySW5zdGFuY2U9PW51bGwpe3YuX2ludGVnZXJJbnN0YW5jZT1uZXcgdigpO3YuX2ludGVnZXJJbnN0YW5jZS5zZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoMCk7fXJldHVybiB2Ll9pbnRlZ2VySW5zdGFuY2U7fSxnZXRJbnN0YW5jZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9pbnN0YW5jZSl7dGhpcy5faW5zdGFuY2U9bmV3IHRoaXM7fXJldHVybiB0aGlzLl9pbnN0YW5jZTt9fSxwcm9wZXJ0aWVzOnttaW5pbXVtSW50ZWdlckRpZ2l0czp7Y2hlY2s6cyxpbml0OjB9LG1heGltdW1JbnRlZ2VyRGlnaXRzOntjaGVjazpzLG51bGxhYmxlOnRydWV9LG1pbmltdW1GcmFjdGlvbkRpZ2l0czp7Y2hlY2s6cyxpbml0OjB9LG1heGltdW1GcmFjdGlvbkRpZ2l0czp7Y2hlY2s6cyxudWxsYWJsZTp0cnVlfSxncm91cGluZ1VzZWQ6e2NoZWNrOmwsaW5pdDp0cnVlfSxwcmVmaXg6e2NoZWNrOnAsaW5pdDp0LGV2ZW50Om99LHBvc3RmaXg6e2NoZWNrOnAsaW5pdDp0LGV2ZW50Om99fSxtZW1iZXJzOntfX3JvOm51bGwsZm9ybWF0OmZ1bmN0aW9uKHcpe3N3aXRjaCh3KXtjYXNlIEluZmluaXR5OnJldHVybiBmO2Nhc2UgLUluZmluaXR5OnJldHVybiBhO2Nhc2UgTmFOOnJldHVybiBkO312YXIgQT0odzwwKTtpZihBKXt3PS13O31pZih0aGlzLmdldE1heGltdW1GcmFjdGlvbkRpZ2l0cygpIT1udWxsKXt2YXIgSD1NYXRoLnBvdygxMCx0aGlzLmdldE1heGltdW1GcmFjdGlvbkRpZ2l0cygpKTt3PU1hdGgucm91bmQodypIKS9IO312YXIgRz1TdHJpbmcoTWF0aC5mbG9vcih3KSkubGVuZ3RoO3ZhciB4PXQrdzt2YXIgRD14LnN1YnN0cmluZygwLEcpO3doaWxlKEQubGVuZ3RoPHRoaXMuZ2V0TWluaW11bUludGVnZXJEaWdpdHMoKSl7RD1xK0Q7fWlmKHRoaXMuZ2V0TWF4aW11bUludGVnZXJEaWdpdHMoKSE9bnVsbCYmRC5sZW5ndGg+dGhpcy5nZXRNYXhpbXVtSW50ZWdlckRpZ2l0cygpKXtEPUQuc3Vic3RyaW5nKEQubGVuZ3RoLXRoaXMuZ2V0TWF4aW11bUludGVnZXJEaWdpdHMoKSk7fXZhciBDPXguc3Vic3RyaW5nKEcrMSk7d2hpbGUoQy5sZW5ndGg8dGhpcy5nZXRNaW5pbXVtRnJhY3Rpb25EaWdpdHMoKSl7Qys9cTt9aWYodGhpcy5nZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoKSE9bnVsbCYmQy5sZW5ndGg+dGhpcy5nZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoKSl7Qz1DLnN1YnN0cmluZygwLHRoaXMuZ2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKCkpO31pZih0aGlzLmdldEdyb3VwaW5nVXNlZCgpKXt2YXIgej1EO0Q9dDt2YXIgRjtmb3IoRj16Lmxlbmd0aDtGPjM7Ri09Myl7RD10K3F4LmxvY2FsZS5OdW1iZXIuZ2V0R3JvdXBTZXBhcmF0b3IodGhpcy5fX3JvKSt6LnN1YnN0cmluZyhGLTMsRikrRDt9RD16LnN1YnN0cmluZygwLEYpK0Q7fXZhciBCPXRoaXMuZ2V0UHJlZml4KCk/dGhpcy5nZXRQcmVmaXgoKTp0O3ZhciB5PXRoaXMuZ2V0UG9zdGZpeCgpP3RoaXMuZ2V0UG9zdGZpeCgpOnQ7dmFyIEU9QisoQT9yOnQpK0Q7aWYoQy5sZW5ndGg+MCl7RSs9dCtxeC5sb2NhbGUuTnVtYmVyLmdldERlY2ltYWxTZXBhcmF0b3IodGhpcy5fX3JvKStDO31FKz15O3JldHVybiBFO30scGFyc2U6ZnVuY3Rpb24oSSl7dmFyIE49cXgubGFuZy5TdHJpbmcuZXNjYXBlUmVnZXhwQ2hhcnMocXgubG9jYWxlLk51bWJlci5nZXRHcm91cFNlcGFyYXRvcih0aGlzLl9fcm8pK3QpO3ZhciBMPXF4LmxhbmcuU3RyaW5nLmVzY2FwZVJlZ2V4cENoYXJzKHF4LmxvY2FsZS5OdW1iZXIuZ2V0RGVjaW1hbFNlcGFyYXRvcih0aGlzLl9fcm8pK3QpO3ZhciBKPW5ldyBSZWdFeHAoZStxeC5sYW5nLlN0cmluZy5lc2NhcGVSZWdleHBDaGFycyh0aGlzLmdldFByZWZpeCgpKStpK2orTitnK24rTCtjK3F4LmxhbmcuU3RyaW5nLmVzY2FwZVJlZ2V4cENoYXJzKHRoaXMuZ2V0UG9zdGZpeCgpKStrKTt2YXIgTT1KLmV4ZWMoSSk7aWYoTT09bnVsbCl7dGhyb3cgbmV3IEVycm9yKCJOdW1iZXIgc3RyaW5nICciK0krIicgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBmb3JtYXQiKTt9dmFyIE89KE1bMV09PXIpO3ZhciBRPU1bMl07dmFyIFA9TVszXTtRPVEucmVwbGFjZShuZXcgUmVnRXhwKE4sbSksdCk7dmFyIEs9KE8/cjp0KStRO2lmKFAhPW51bGwmJlAubGVuZ3RoIT0wKXtQPVAucmVwbGFjZShuZXcgUmVnRXhwKEwpLHQpO0srPWgrUDt9cmV0dXJuIHBhcnNlRmxvYXQoSyk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBkPSJjbGRyX251bWJlcl9kZWNpbWFsX3NlcGFyYXRvciIsYz0iY2xkcl9udW1iZXJfcGVyY2VudF9mb3JtYXQiLGI9InF4LmxvY2FsZS5OdW1iZXIiLGE9ImNsZHJfbnVtYmVyX2dyb3VwX3NlcGFyYXRvciI7cXguQ2xhc3MuZGVmaW5lKGIse3N0YXRpY3M6e2dldERlY2ltYWxTZXBhcmF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHF4LmxvY2FsZS5NYW5hZ2VyLmdldEluc3RhbmNlKCkubG9jYWxpemUoZCxbXSxlKTt9LGdldEdyb3VwU2VwYXJhdG9yOmZ1bmN0aW9uKGYpe3JldHVybiBxeC5sb2NhbGUuTWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvY2FsaXplKGEsW10sZik7fSxnZXRQZXJjZW50Rm9ybWF0OmZ1bmN0aW9uKGcpe3JldHVybiBxeC5sb2NhbGUuTWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvY2FsaXplKGMsW10sZyk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBtPSIiLGs9IiwiLGg9ImNvbnN0cnVjdG9yIixnPSJhcHBlYXJhbmNlcyIsZj0iZ2V0QXBwZWFyYW5jZXMiLGU9ImdldFN0YXRpY3MiLGQ9ImdldENoaWxkQ29udHJvbHMiLGM9ImNvbnN0YW50cyIsYj0iZ2V0UHJvcGVydGllcyIsYT0ibWV0aG9kcyIsRD0icHJvcGVydGllcyIsQz0iZ2V0RXZlbnRzIixCPSJnZXRNZW1iZXJzIixBPSJldmVudHMiLHo9Im1ldGhvZHMtc3RhdGljIix5PSJnZXRDb25zdGFudHMiLHg9ImFwaXZpZXdlci5kYW8uQ2xhc3MiLHc9InN1cGVyTWl4aW5zIix2PSJjaGlsZENvbnRyb2xzIix1PSJjbGFzcyIscz0iX2NvbnN0cnVjdG9yIix0PSJkZXNjIixxPSJzZWUiLHI9ImdldENvbnN0cnVjdG9yIixvPSJnZXRTdXBlckludGVyZmFjZXMiLHA9InN1cGVySW50ZXJmYWNlcyIsbj0iZ2V0U3VwZXJNaXhpbnMiO3F4LkNsYXNzLmRlZmluZSh4LHtleHRlbmQ6YXBpdmlld2VyLmRhby5Ob2RlLGNvbnN0cnVjdDpmdW5jdGlvbihFLEYpe2FwaXZpZXdlci5kYW8uTm9kZS5jYWxsKHRoaXMsRSk7dGhpcy5zZWxmKGFyZ3VtZW50cykucmVnaXN0ZXJDbGFzcyh0aGlzKTt0aGlzLl9wYWNrYWdlPUY7fSxzdGF0aWNzOntfY2xhc3NfcmVnaXN0cnk6e30sX3RvcF9sZXZlbF9jbGFzc2VzOltdLHJlZ2lzdGVyQ2xhc3M6ZnVuY3Rpb24oRyl7aWYoIUcuZ2V0RnVsbE5hbWUoKSl7cmV0dXJuO310aGlzLl9jbGFzc19yZWdpc3RyeVtHLmdldEZ1bGxOYW1lKCldPUc7aWYoIUcuX2RvY05vZGUuYXR0cmlidXRlcy5zdXBlckNsYXNzKXt0aGlzLl90b3BfbGV2ZWxfY2xhc3Nlcy5wdXNoKEcpO319LGdldENsYXNzQnlOYW1lOmZ1bmN0aW9uKEgpe3JldHVybiB0aGlzLl9jbGFzc19yZWdpc3RyeVtIXTt9LGdldEFsbFRvcExldmVsQ2xhc3NlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b3BfbGV2ZWxfY2xhc3Nlczt9fSxtZW1iZXJzOntnZXROYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5uYW1lO30sZ2V0Q2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpczt9LGdldFBhY2thZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFja2FnZTt9LGlzTG9hZGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5leHRlcm5hbFJlZiE9dHJ1ZTt9LGdldEZ1bGxOYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5mdWxsTmFtZXx8bTt9LGdldFBhY2thZ2VOYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5wYWNrYWdlTmFtZXx8bTt9LGdldERlc2NyaXB0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc2N8fG07fSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy50eXBlfHx1O30saXNBYnN0cmFjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMuaXNBYnN0cmFjdHx8ZmFsc2U7fSxpc1N0YXRpYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMuaXNTdGF0aWN8fGZhbHNlO30saXNTaW5nbGV0b246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9jTm9kZS5hdHRyaWJ1dGVzLmlzU2luZ2xldG9ufHxmYWxzZTt9LGdldFNlZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWU7fSxnZXRTdXBlckNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZihhcmd1bWVudHMpLmdldENsYXNzQnlOYW1lKHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5zdXBlckNsYXNzKTt9LGdldENoaWxkQ2xhc3NlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMuY2hpbGRDbGFzc2VzP3RoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5jaGlsZENsYXNzZXMuc3BsaXQoayk6W107fSxnZXRJbnRlcmZhY2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5pbnRlcmZhY2VzP3RoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5pbnRlcmZhY2VzLnNwbGl0KGspOltdO30sZ2V0TWl4aW5zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5taXhpbnM/dGhpcy5fZG9jTm9kZS5hdHRyaWJ1dGVzLm1peGlucy5zcGxpdChrKTpbXTt9LGdldEltcGxlbWVudGF0aW9uczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMuaW1wbGVtZW50YXRpb25zP3RoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5pbXBsZW1lbnRhdGlvbnMuc3BsaXQoayk6W107fSxnZXRJbmNsdWRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMuaW5jbHVkZXI/dGhpcy5fZG9jTm9kZS5hdHRyaWJ1dGVzLmluY2x1ZGVyLnNwbGl0KGspOltdO30sZ2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLl9jb25zdHJ1Y3RvciE9bnVsbCl7cmV0dXJuIHRoaXMuX2NvbnN0cnVjdG9yO312YXIgST1hcGl2aWV3ZXIuVHJlZVV0aWwuZ2V0Q2hpbGQodGhpcy5nZXROb2RlKCksaCk7aWYoSSl7dGhpcy5fY29uc3RydWN0b3I9bmV3IGFwaXZpZXdlci5kYW8uTWV0aG9kKEkuY2hpbGRyZW5bMF0sdGhpcyxJLnR5cGUpO31lbHNle3RoaXMuX2NvbnN0cnVjdG9yPW07dmFyIEs9dGhpcy5nZXRTdXBlckNsYXNzKCk7d2hpbGUoSyl7dmFyIEo9Sy5nZXRDb25zdHJ1Y3RvcigpO2lmKEope3ZhciBJPUouZ2V0Tm9kZSgpO3RoaXMuX2NvbnN0cnVjdG9yPW5ldyBhcGl2aWV3ZXIuZGFvLk1ldGhvZChJLHRoaXMsaCk7YnJlYWs7fUs9Sy5nZXRTdXBlckNsYXNzKCk7fX1yZXR1cm4gdGhpcy5fY29uc3RydWN0b3I7fSxnZXRNZW1iZXJzOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWVtYmVycyE9bnVsbCl7cmV0dXJuIHRoaXMuX21lbWJlcnM7fWVsc2V7dmFyIEw9YXBpdmlld2VyLlRyZWVVdGlsLmdldENoaWxkKHRoaXMuZ2V0Tm9kZSgpLGEpO3RoaXMuX21lbWJlcnM9TD90aGlzLl9jcmVhdGVOb2RlTGlzdChMLGFwaXZpZXdlci5kYW8uTWV0aG9kLHRoaXMsTC50eXBlKTpbXTtyZXR1cm4gdGhpcy5fbWVtYmVyczt9fSxnZXRTdGF0aWNzOmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RhdGljcyE9bnVsbCl7cmV0dXJuIHRoaXMuX3N0YXRpY3M7fWVsc2V7dmFyIE09YXBpdmlld2VyLlRyZWVVdGlsLmdldENoaWxkKHRoaXMuZ2V0Tm9kZSgpLHopO3RoaXMuX3N0YXRpY3M9TT90aGlzLl9jcmVhdGVOb2RlTGlzdChNLGFwaXZpZXdlci5kYW8uTWV0aG9kLHRoaXMsTS50eXBlKTpbXTtyZXR1cm4gdGhpcy5fc3RhdGljczt9fSxnZXRFdmVudHM6ZnVuY3Rpb24oKXtpZih0aGlzLl9ldmVudHMhPW51bGwpe3JldHVybiB0aGlzLl9ldmVudHM7fWVsc2V7dmFyIE49YXBpdmlld2VyLlRyZWVVdGlsLmdldENoaWxkKHRoaXMuZ2V0Tm9kZSgpLEEpO3RoaXMuX2V2ZW50cz1OP3RoaXMuX2NyZWF0ZU5vZGVMaXN0KE4sYXBpdmlld2VyLmRhby5FdmVudCx0aGlzLE4udHlwZSk6W107cmV0dXJuIHRoaXMuX2V2ZW50czt9fSxnZXRQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7aWYodGhpcy5fcHJvcGVydGllcyE9bnVsbCl7cmV0dXJuIHRoaXMuX3Byb3BlcnRpZXM7fWVsc2V7dmFyIE89YXBpdmlld2VyLlRyZWVVdGlsLmdldENoaWxkKHRoaXMuZ2V0Tm9kZSgpLEQpO3RoaXMuX3Byb3BlcnRpZXM9Tz90aGlzLl9jcmVhdGVOb2RlTGlzdChPLGFwaXZpZXdlci5kYW8uUHJvcGVydHksdGhpcyxPLnR5cGUpOltdO3JldHVybiB0aGlzLl9wcm9wZXJ0aWVzO319LGdldENvbnN0YW50czpmdW5jdGlvbigpe2lmKHRoaXMuX2NvbnN0YW50cyE9bnVsbCl7cmV0dXJuIHRoaXMuX2NvbnN0YW50czt9ZWxzZXt2YXIgUD1hcGl2aWV3ZXIuVHJlZVV0aWwuZ2V0Q2hpbGQodGhpcy5nZXROb2RlKCksYyk7dGhpcy5fY29uc3RhbnRzPVA/dGhpcy5fY3JlYXRlTm9kZUxpc3QoUCxhcGl2aWV3ZXIuZGFvLkNvbnN0YW50LHRoaXMsUC50eXBlKTpbXTtyZXR1cm4gdGhpcy5fY29uc3RhbnRzO319LGdldEFwcGVhcmFuY2VzOmZ1bmN0aW9uKCl7aWYodGhpcy5fYXBwZWFyYW5jZXMhPW51bGwpe3JldHVybiB0aGlzLl9hcHBlYXJhbmNlczt9ZWxzZXt2YXIgUT1hcGl2aWV3ZXIuVHJlZVV0aWwuZ2V0Q2hpbGQodGhpcy5nZXROb2RlKCksZyk7dGhpcy5fYXBwZWFyYW5jZXM9UT90aGlzLl9jcmVhdGVOb2RlTGlzdChRLGFwaXZpZXdlci5kYW8uQXBwZWFyYW5jZSx0aGlzLFEudHlwZSk6W107cmV0dXJuIHRoaXMuX2FwcGVhcmFuY2VzO319LGdldFN1cGVySW50ZXJmYWNlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdXBlckludGVyZmFjZXM7fSxnZXRTdXBlck1peGluczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdXBlck1peGluczt9LGdldENoaWxkQ29udHJvbHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hpbGRDb250cm9sczt9LGdldENsYXNzSGllcmFyY2h5OmZ1bmN0aW9uKCl7dmFyIFM9W107dmFyIFI9dGhpczt3aGlsZShSKXtTLnB1c2goUik7Uj1SLmdldFN1cGVyQ2xhc3MoKTt9cmV0dXJuIFM7fSxnZXRJbnRlcmZhY2VIaWVyYXJjaHk6ZnVuY3Rpb24oKXt2YXIgVz10aGlzO3ZhciBVPVtXXTt2YXIgVj1XLmdldFN1cGVySW50ZXJmYWNlcygpO3doaWxlKFYmJlYubGVuZ3RoPjApe2Zvcih2YXIgaT0wLGw9Vi5sZW5ndGg7aTxsO2krKyl7dmFyIFQ9YXBpdmlld2VyLmRhby5DbGFzcy5nZXRDbGFzc0J5TmFtZShWW2ldLmdldE5hbWUoKSk7VS5wdXNoKFQpO1Y9VC5nZXRTdXBlckludGVyZmFjZXMoKTt9fXJldHVybiBVO30sZ2V0SXRlbTpmdW5jdGlvbihYKXt2YXIgWT1bQixlLEMsYix5LGYsZF07Zm9yKHZhciBpPTA7aTxZLmxlbmd0aDtpKyspe3ZhciBiYT10aGlzW1lbaV1dKCk7Zm9yKHZhciBqPTA7ajxiYS5sZW5ndGg7aisrKXtpZihYPT1iYVtqXS5nZXROYW1lKCkpe3JldHVybiBiYVtqXTt9fX19LGdldEl0ZW1MaXN0OmZ1bmN0aW9uKGJiKXt2YXIgYmM9eyJldmVudHMiOkMsImNvbnN0cnVjdG9yIjpyLCJwcm9wZXJ0aWVzIjpiLCJtZXRob2RzIjpCLCJtZXRob2RzLXN0YXRpYyI6ZSwiY29uc3RhbnRzIjp5LCJhcHBlYXJhbmNlcyI6Ziwic3VwZXJJbnRlcmZhY2VzIjpvLCJzdXBlck1peGlucyI6biwiY2hpbGRDb250cm9scyI6ZH07aWYoYmI9PWgpe3JldHVybiB0aGlzLmdldENvbnN0cnVjdG9yKCk/W3RoaXMuZ2V0Q29uc3RydWN0b3IoKV06W107fWVsc2V7cmV0dXJuIHRoaXNbYmNbYmJdXSgpO319LGdldEl0ZW1CeUxpc3RBbmROYW1lOmZ1bmN0aW9uKGJkLGJlKXt2YXIgYmY9dGhpcy5nZXRJdGVtTGlzdChiZCk7Zm9yKHZhciBqPTA7ajxiZi5sZW5ndGg7aisrKXtpZihiZT09YmZbal0uZ2V0TmFtZSgpKXtyZXR1cm4gYmZbal07fX19LGdldENsYXNzQXBwZWFyYW5jZTpmdW5jdGlvbigpe3ZhciBiZz10aGlzLmdldEFwcGVhcmFuY2VzKCk7Zm9yKHZhciBpPTA7aTxiZy5sZW5ndGg7aSsrKXtpZihiZ1tpXS5nZXRUeXBlKCk9PXRoaXMpe3JldHVybiBiZ1tpXTt9fXJldHVybiBudWxsO30sZ2V0QWxsSW50ZXJmYWNlczpmdW5jdGlvbihiaCl7aWYoYmgpe3ZhciBiaz10aGlzLmdldENsYXNzSGllcmFyY2h5KCk7fWVsc2V7Yms9W3RoaXNdO312YXIgYm49W107Zm9yKHZhciBibT0wO2JtPGJrLmxlbmd0aDtibSsrKXt2YXIgYmw9YmtbYm1dO3ZhciBiaT1mdW5jdGlvbihibyl7dmFyIGJwPWFwaXZpZXdlci5kYW8uQ2xhc3MuZ2V0Q2xhc3NCeU5hbWUoYm8pO2JuLnB1c2goYnApO3ZhciBicT1icC5nZXRTdXBlckludGVyZmFjZXMoKTtmb3IodmFyIGk9MDtpPGJxLmxlbmd0aDtpKyspe2JpKGJxW2ldLmdldE5hbWUoKSk7fX07dmFyIGJqPWJsLmdldEludGVyZmFjZXMoKTtmb3IodmFyIGk9MDtpPGJqLmxlbmd0aDtpKyspe2JpKGJqW2ldKTt9fXJldHVybiBibjt9LGdldE5vZGVzT2ZUeXBlRnJvbU1peGluczpmdW5jdGlvbihicil7dmFyIGJ1PXRoaXMuZ2V0TWl4aW5zKCk7dmFyIGJ2PVtdO2Zvcih2YXIgYnc9MDtidzxidS5sZW5ndGg7YncrKyl7dmFyIGJzPWZ1bmN0aW9uKGJ4KXt2YXIgYnk9YnguZ2V0SXRlbUxpc3QoYnIpO2Zvcih2YXIgaT0wO2k8YnkubGVuZ3RoO2krKyl7YnYucHVzaChieVtpXSk7fXZhciBiej1ieC5nZXRTdXBlck1peGlucygpO2Zvcih2YXIgaT0wO2k8YnoubGVuZ3RoO2krKyl7YnMoYXBpdmlld2VyLmRhby5DbGFzcy5nZXRDbGFzc0J5TmFtZShieltpXS5nZXROYW1lKCkpKTt9fTt2YXIgYnQ9YXBpdmlld2VyLmRhby5DbGFzcy5nZXRDbGFzc0J5TmFtZShidVtid10pO2JzKGJ0KTt9cmV0dXJuIGJ2O30sZ2V0RGVwZW5kZW5kQ2xhc3NlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maW5kQ2xhc3Nlcyh0aGlzLFtdKTt9LGdldERvY05vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpczt9LF9maW5kQ2xhc3NlczpmdW5jdGlvbihiQSxiQil7YkIucHVzaChiQSk7dmFyIGJKPWJBLmdldFN1cGVyQ2xhc3MoKTtpZihiSil7dGhpcy5fZmluZENsYXNzZXMoYkosYkIpO312YXIgYkc9YkEuZ2V0TWl4aW5zKCk7Zm9yKHZhciBpPTA7aTxiRy5sZW5ndGg7aSsrKXt2YXIgYks9YXBpdmlld2VyLmRhby5DbGFzcy5nZXRDbGFzc0J5TmFtZShiR1tpXSk7aWYoYkspe3RoaXMuX2ZpbmRDbGFzc2VzKGJLLGJCKTt9ZWxzZXt0aGlzLndhcm4oIk1pc3NpbmcgbWl4aW46ICIrYkdbaV0pO319dmFyIGJIPWJBLmdldFN1cGVyTWl4aW5zKCk7Zm9yKHZhciBpPTA7aTxiSC5sZW5ndGg7aSsrKXt2YXIgYkk9YXBpdmlld2VyLmRhby5DbGFzcy5nZXRDbGFzc0J5TmFtZShiSFtpXSk7aWYoYkkpe3RoaXMuX2ZpbmRDbGFzc2VzKGJJLGJCKTt9ZWxzZXt0aGlzLndhcm4oIk1pc3Npbmcgc3VwZXIgbWl4aW46ICIrYkhbaV0pO319dmFyIGJGPWJBLmdldEludGVyZmFjZXMoKTtmb3IodmFyIGk9MDtpPGJGLmxlbmd0aDtpKyspe3ZhciBiRD1hcGl2aWV3ZXIuZGFvLkNsYXNzLmdldENsYXNzQnlOYW1lKGJGW2ldKTtpZihiRCl7dGhpcy5fZmluZENsYXNzZXMoYkQsYkIpO31lbHNle3RoaXMud2FybigiTWlzc2luZyBpbnRlcmZhY2U6ICIrYkZbaV0pO319dmFyIGJFPWJBLmdldFN1cGVySW50ZXJmYWNlcygpO2Zvcih2YXIgaT0wO2k8YkUubGVuZ3RoO2krKyl7dmFyIGJDPWFwaXZpZXdlci5kYW8uQ2xhc3MuZ2V0Q2xhc3NCeU5hbWUoYkVbaV0pO2lmKGJDKXt0aGlzLl9maW5kQ2xhc3NlcyhiQyxiQik7fWVsc2V7dGhpcy53YXJuKCJNaXNzaW5nIHN1cGVyIGludGVyZmFjZTogIitiRVtpXSk7fX1yZXR1cm4gYkI7fSxfaW5pdGlhbGl6ZUZpZWxkczpmdW5jdGlvbigpe2FwaXZpZXdlci5kYW8uTm9kZS5wcm90b3R5cGUuX2luaXRpYWxpemVGaWVsZHMuY2FsbCh0aGlzKTt0aGlzLl9kZXNjPW07dGhpcy5fc2VlPVtdO3RoaXMuX3N1cGVySW50ZXJmYWNlcz1bXTt0aGlzLl9zdXBlck1peGlucz1bXTt0aGlzLl9jaGlsZENvbnRyb2xzPVtdO30sX2FkZENoaWxkTm9kZTpmdW5jdGlvbihiTCl7c3dpdGNoKGJMLnR5cGUpe2Nhc2UgaDpjYXNlIGE6Y2FzZSB6OmNhc2UgQTpjYXNlIEQ6Y2FzZSBjOmNhc2UgZzpicmVhaztjYXNlIHA6dGhpcy5fc3VwZXJJbnRlcmZhY2VzPXRoaXMuX2NyZWF0ZU5vZGVMaXN0KGJMLGFwaXZpZXdlci5kYW8uQ2xhc3NJdGVtLHRoaXMsYkwudHlwZSk7YnJlYWs7Y2FzZSB3OnRoaXMuX3N1cGVyTWl4aW5zPXRoaXMuX2NyZWF0ZU5vZGVMaXN0KGJMLGFwaXZpZXdlci5kYW8uQ2xhc3NJdGVtLHRoaXMsYkwudHlwZSk7YnJlYWs7Y2FzZSB2OnRoaXMuX2NoaWxkQ29udHJvbHM9dGhpcy5fY3JlYXRlTm9kZUxpc3QoYkwsYXBpdmlld2VyLmRhby5DaGlsZENvbnRyb2wsdGhpcyxiTC50eXBlKTticmVhaztjYXNlIHQ6dGhpcy5fZGVzYz1iTC5hdHRyaWJ1dGVzLnRleHR8fG07YnJlYWs7Y2FzZSBxOnRoaXMuX3NlZS5wdXNoKGJMLmF0dHJpYnV0ZXMubmFtZSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gYXBpdmlld2VyLmRhby5Ob2RlLnByb3RvdHlwZS5fYWRkQ2hpbGROb2RlLmNhbGwodGhpcyxiTCk7fXJldHVybiB0cnVlO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fc2VlPXRoaXMuX3N1cGVySW50ZXJmYWNlcz10aGlzLl9zdXBlck1peGlucz10aGlzLl9ldmVudHM9dGhpcy5fc3RhdGljcz10aGlzLl9wcm9wZXJ0aWVzPXRoaXMuX2NvbnN0YW50cz10aGlzLl9hcHBlYXJhbmNlcz10aGlzLl9tZW1iZXJzPXRoaXMuX3BhY2thZ2U9bnVsbDt0aGlzLl9kaXNwb3NlT2JqZWN0cyhzKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZj0iIixlPSJuYW1lIixkPSJkZXNjIixjPSJzZWUiLGI9InR5cGVzIixhPSJhcGl2aWV3ZXIuZGFvLkNsYXNzSXRlbSI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDphcGl2aWV3ZXIuZGFvLk5vZGUsY29uc3RydWN0OmZ1bmN0aW9uKGcsaCxrKXt0aGlzLl9jbGFzcz1oO3RoaXMuX2xpc3ROYW1lPWs7YXBpdmlld2VyLmRhby5Ob2RlLmNhbGwodGhpcyxnKTt9LG1lbWJlcnM6e2dldENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsYXNzO30sZ2V0TmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMubmFtZTt9LGdldExpc3ROYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xpc3ROYW1lO30sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXREb2NOb2RlKCkuX2Rlc2N8fGY7fSxnZXRUeXBlczpmdW5jdGlvbigpe3ZhciBtPVtdO2Zvcih2YXIgaT0wO2k8dGhpcy5fdHlwZXMubGVuZ3RoO2krKyl7dmFyIGw9e307aWYodGhpcy5fdHlwZXNbaV0uYXR0cmlidXRlcy5kaW1lbnNpb25zKXtsLmRpbWVuc2lvbnM9dGhpcy5fdHlwZXNbaV0uYXR0cmlidXRlcy5kaW1lbnNpb25zO31sLnR5cGU9dGhpcy5fdHlwZXNbaV0uYXR0cmlidXRlcy50eXBlO20ucHVzaChsKTt9cmV0dXJuIG07fSxnZXRTZWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VlO30sZ2V0T3ZlcnJpZGRlbkZyb206ZnVuY3Rpb24oKXtyZXR1cm4gYXBpdmlld2VyLmRhby5DbGFzcy5nZXRDbGFzc0J5TmFtZSh0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMub3ZlcnJpZGRlbkZyb20pO30sZ2V0RG9jTm9kZTpmdW5jdGlvbigpe2lmKHRoaXMuX2l0ZW1Eb2NOb2RlKXtyZXR1cm4gdGhpcy5faXRlbURvY05vZGU7fXRoaXMuX2l0ZW1Eb2NOb2RlPXRoaXM7dmFyIG49YXBpdmlld2VyLmRhby5DbGFzcy5nZXRDbGFzc0J5TmFtZSh0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMuZG9jRnJvbSk7aWYobil7dmFyIG89bi5nZXRJdGVtTGlzdCh0aGlzLl9saXN0TmFtZSk7Zm9yKHZhciBpPTA7aTxvLmxlbmd0aDtpKyspe2lmKG9baV0uZ2V0TmFtZSgpPT10aGlzLmdldE5hbWUoKSl7dGhpcy5faXRlbURvY05vZGU9b1tpXTticmVhazt9fX1yZXR1cm4gdGhpcy5faXRlbURvY05vZGU7fSxpc1JlcXVpcmVkQnlJbnRlcmZhY2U6ZnVuY3Rpb24ocCl7dmFyIHI9YXBpdmlld2VyLlRyZWVVdGlsLmdldENoaWxkKHAuZ2V0Tm9kZSgpLHRoaXMuX2xpc3ROYW1lKTtpZihyKXt2YXIgcT1hcGl2aWV3ZXIuVHJlZVV0aWwuZ2V0Q2hpbGRCeUF0dHJpYnV0ZShyLGUsdGhpcy5nZXROYW1lKCkpO3JldHVybiBxP3RydWU6ZmFsc2U7fXJldHVybiBmYWxzZTt9LGdldFJlcXVpcmVkQnk6ZnVuY3Rpb24oKXtpZih0aGlzLl9yZXF1aXJlZEJ5KXtyZXR1cm4gdGhpcy5fcmVxdWlyZWRCeTt9dmFyIHM9W107dmFyIHQ9dGhpcy5nZXRDbGFzcygpLmdldEFsbEludGVyZmFjZXModHJ1ZSk7Zm9yKHZhciBqPTA7ajx0Lmxlbmd0aDtqKyspe2lmKHRoaXMuaXNSZXF1aXJlZEJ5SW50ZXJmYWNlKHRbal0pKXtzLnB1c2godFtqXSk7fX10aGlzLl9yZXF1aXJlZEJ5PXM7cmV0dXJuIHM7fSxfaW5pdGlhbGl6ZUZpZWxkczpmdW5jdGlvbigpe2FwaXZpZXdlci5kYW8uTm9kZS5wcm90b3R5cGUuX2luaXRpYWxpemVGaWVsZHMuY2FsbCh0aGlzKTt0aGlzLl9zZWU9W107dGhpcy5fdHlwZXM9W107fSxfYWRkQ2hpbGROb2RlOmZ1bmN0aW9uKHUpe3N3aXRjaCh1LnR5cGUpe2Nhc2UgZDp0aGlzLl9kZXNjPXUuYXR0cmlidXRlcy50ZXh0fHxmO2JyZWFrO2Nhc2UgYzp0aGlzLl9zZWUucHVzaCh1LmF0dHJpYnV0ZXMubmFtZSk7YnJlYWs7Y2FzZSBiOnRoaXMuX3R5cGVzPXRoaXMuX2NyZWF0ZU5vZGVMaXN0KHUpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGFwaXZpZXdlci5kYW8uTm9kZS5wcm90b3R5cGUuX2FkZENoaWxkTm9kZS5jYWxsKHRoaXMsdSk7fXJldHVybiB0cnVlO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fY2xhc3M9dGhpcy5faXRlbURvY05vZGU9dGhpcy5fcmVxdWlyZWRCeT10aGlzLl9zZWU9dGhpcy5fdHlwZXM9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaD0icGFyYW1zIixnPSJyZXR1cm4iLGY9InRocm93cyIsZT0iIixkPSJhcGl2aWV3ZXIuZGFvLk1ldGhvZCIsYz0iX3JldHVybiIsYj0iY29uc3RydWN0IixhPSJwcm9wZXJ0aWVzIjtxeC5DbGFzcy5kZWZpbmUoZCx7ZXh0ZW5kOmFwaXZpZXdlci5kYW8uQ2xhc3NJdGVtLGNvbnN0cnVjdDpmdW5jdGlvbihpLGosayl7YXBpdmlld2VyLmRhby5DbGFzc0l0ZW0uY2FsbCh0aGlzLGksaixrKTt9LG1lbWJlcnM6e2dldE5hbWU6ZnVuY3Rpb24oKXtpZih0aGlzLmlzQ29uc3RydWN0b3IoKSl7cmV0dXJuIGI7fWVsc2V7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5uYW1lO319LGlzU3RhdGljOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5pc1N0YXRpY3x8ZmFsc2U7fSxpc0Fic3RyYWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5pc0Fic3RyYWN0fHxmYWxzZTt9LGlzQ29uc3RydWN0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9jTm9kZS5hdHRyaWJ1dGVzLmlzQ3Rvcnx8ZmFsc2U7fSxpc0Zyb21Qcm9wZXJ0eTpmdW5jdGlvbigpe3JldHVybiAhIXRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5mcm9tUHJvcGVydHk7fSxnZXRQYXJhbXM6ZnVuY3Rpb24oKXtpZih0aGlzLl9wYXJhbXMhPW51bGwpe3JldHVybiB0aGlzLl9wYXJhbXM7fWVsc2V7dmFyIGw9YXBpdmlld2VyLlRyZWVVdGlsLmdldENoaWxkKHRoaXMuZ2V0RG9jTm9kZSgpLmdldE5vZGUoKSxoKTt0aGlzLl9wYXJhbXM9bD90aGlzLl9jcmVhdGVOb2RlTGlzdChsLGFwaXZpZXdlci5kYW8uUGFyYW0sdGhpcy5nZXRDbGFzcygpLHRoaXMpOltdO3JldHVybiB0aGlzLl9wYXJhbXM7fX0sZ2V0UmV0dXJuOmZ1bmN0aW9uKCl7aWYodGhpcy5fcmV0dXJuIT1udWxsKXtyZXR1cm4gdGhpcy5fcmV0dXJuO31lbHNle3ZhciBtPWFwaXZpZXdlci5UcmVlVXRpbC5nZXRDaGlsZCh0aGlzLmdldERvY05vZGUoKS5nZXROb2RlKCksZyk7dGhpcy5fcmV0dXJuPW0/bmV3IGFwaXZpZXdlci5kYW8uUGFyYW0obSx0aGlzLmdldENsYXNzKCksdGhpcyk6ZTtyZXR1cm4gdGhpcy5fcmV0dXJuO319LGdldFRocm93czpmdW5jdGlvbigpe2lmKHRoaXMuX3Rocm93cyE9bnVsbCl7cmV0dXJuIHRoaXMuX3Rocm93czt9ZWxzZXt2YXIgbj1hcGl2aWV3ZXIuVHJlZVV0aWwuZ2V0Q2hpbGQodGhpcy5nZXREb2NOb2RlKCkuZ2V0Tm9kZSgpLGYpO3RoaXMuX3Rocm93cz1uP3RoaXMuX2NyZWF0ZU5vZGVMaXN0KG4sYXBpdmlld2VyLmRhby5UaHJvd3NFbnRyeSx0aGlzLmdldENsYXNzKCksdGhpcyk6W107cmV0dXJuIHRoaXMuX3Rocm93czt9fSxnZXRBcHBseTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMuYXBwbHk7fSxnZXRGcm9tUHJvcGVydHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRDbGFzcygpLmdldEl0ZW1CeUxpc3RBbmROYW1lKGEsdGhpcy5fZG9jTm9kZS5hdHRyaWJ1dGVzLmZyb21Qcm9wZXJ0eSk7fSxfYWRkQ2hpbGROb2RlOmZ1bmN0aW9uKG8pe3N3aXRjaChvLnR5cGUpe2Nhc2UgaDpjYXNlIGc6Y2FzZSBmOmJyZWFrO2RlZmF1bHQ6cmV0dXJuIGFwaXZpZXdlci5kYW8uQ2xhc3NJdGVtLnByb3RvdHlwZS5fYWRkQ2hpbGROb2RlLmNhbGwodGhpcyxvKTt9cmV0dXJuIHRydWU7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9wYXJhbXM9dGhpcy5fdGhyb3dzPW51bGw7dGhpcy5fZGlzcG9zZU9iamVjdHMoYyk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9ImFwaXZpZXdlci5kYW8uUGFyYW0iLGE9InByb3BlcnRpZXMiO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6YXBpdmlld2VyLmRhby5DbGFzc0l0ZW0sY29uc3RydWN0OmZ1bmN0aW9uKGMsZCxlKXthcGl2aWV3ZXIuZGFvLkNsYXNzSXRlbS5jYWxsKHRoaXMsYyxkKTt0aGlzLl9tZXRob2Q9ZTt9LG1lbWJlcnM6e2dldFR5cGVzOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5nZXRNZXRob2QoKS5nZXRGcm9tUHJvcGVydHkoKTtpZihpKXtpZihpLmlzUHJvcGVydHlHcm91cCgpKXt2YXIgZz10aGlzLmdldENsYXNzKCkuZ2V0SXRlbUJ5TGlzdEFuZE5hbWUoYSx0aGlzLmdldE5hbWUoKSk7aWYoZyl7cmV0dXJuIGcuZ2V0VHlwZXMoKTt9fWVsc2V7cmV0dXJuIGkuZ2V0VHlwZXMoKTt9fXZhciBoPWFwaXZpZXdlci5kYW8uQ2xhc3NJdGVtLnByb3RvdHlwZS5nZXRUeXBlcy5jYWxsKHRoaXMpO3ZhciBmPXRoaXMuX2RvY05vZGUuYXR0cmlidXRlcztpZihmLnR5cGUpe2gucHVzaCh7dHlwZTpmLnR5cGUsZGltZW5zaW9uczpmLmRpbWVuc2lvbnN9KTt9cmV0dXJuIGg7fSxnZXRNZXRob2Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWV0aG9kO30sZ2V0QXJyYXlEaW1lbnNpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5hcnJheURpbWVuc2lvbnM7fSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy50eXBlO30sZ2V0RGVmYXVsdFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5kZWZhdWx0VmFsdWU7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9tZXRob2Q9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0iYXBpdmlld2VyLmRhby5UaHJvd3NFbnRyeSIsYT0iRXJyb3IiO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6YXBpdmlld2VyLmRhby5DbGFzc0l0ZW0sY29uc3RydWN0OmZ1bmN0aW9uKGMsZCxlKXthcGl2aWV3ZXIuZGFvLkNsYXNzSXRlbS5jYWxsKHRoaXMsYyxkKTt9LG1lbWJlcnM6e2dldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9jTm9kZS5hdHRyaWJ1dGVzLnR5cGV8fG51bGw7fSxnZXREZWZhdWx0VHlwZTpmdW5jdGlvbigpe3JldHVybiBhO30sZ2V0RGVzY3JpcHRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9jTm9kZS5hdHRyaWJ1dGVzLnRleHQ7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJ0eXBlcyIsYT0iYXBpdmlld2VyLmRhby5FdmVudCI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDphcGl2aWV3ZXIuZGFvLkNsYXNzSXRlbSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oYyxkLGUpe2FwaXZpZXdlci5kYW8uQ2xhc3NJdGVtLmNhbGwodGhpcyxjLGQsZSk7fSxtZW1iZXJzOntnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIGFwaXZpZXdlci5kYW8uQ2xhc3MuZ2V0Q2xhc3NCeU5hbWUodGhpcy5fdHlwZSk7fSxnZXRUeXBlczpmdW5jdGlvbigpe2lmKHRoaXMuX3R5cGUpe3JldHVybiBbe3R5cGU6dGhpcy5fdHlwZX1dO31lbHNle3JldHVybiBudWxsO319LF9hZGRDaGlsZE5vZGU6ZnVuY3Rpb24oZil7c3dpdGNoKGYudHlwZSl7Y2FzZSBiOnRoaXMuX3R5cGU9Zi5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnR5cGU7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gYXBpdmlld2VyLmRhby5DbGFzc0l0ZW0ucHJvdG90eXBlLl9hZGRDaGlsZE5vZGUuY2FsbCh0aGlzLGYpO31yZXR1cm4gdHJ1ZTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGQ9IiwiLGM9Im5ldyIsYj0idHJ1ZSIsYT0iYXBpdmlld2VyLmRhby5Qcm9wZXJ0eSI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDphcGl2aWV3ZXIuZGFvLkNsYXNzSXRlbSxtZW1iZXJzOntnZXRUeXBlczpmdW5jdGlvbigpe3ZhciBnPWFwaXZpZXdlci5kYW8uQ2xhc3NJdGVtLnByb3RvdHlwZS5nZXRUeXBlcy5jYWxsKHRoaXMpO3ZhciBlPXRoaXMuZ2V0RG9jTm9kZSgpO3ZhciBmPWUuZ2V0VHlwZSgpO2lmKGYpe2cucHVzaCh7dHlwZTpmLGRpbWVuc2lvbnM6ZS5nZXROb2RlKCkuYXR0cmlidXRlcy5kaW1lbnNpb25zfSk7fXJldHVybiBnO30sZ2V0Q2hlY2s6ZnVuY3Rpb24oKXt2YXIgaD10aGlzLmdldERvY05vZGUoKS5fZG9jTm9kZS5hdHRyaWJ1dGVzO2lmKGguY2hlY2spe2lmKCFhcGl2aWV3ZXIuZGFvLkNsYXNzLmdldENsYXNzQnlOYW1lKGguY2hlY2spJiYhYXBpdmlld2VyLnVpLkNsYXNzVmlld2VyLlBSSU1JVElWRVNbaC5jaGVja10pe3JldHVybiBoLmNoZWNrO319cmV0dXJuIG51bGw7fSxnZXRDbGFzc25hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9jTm9kZS5hdHRyaWJ1dGVzLmNsYXNzbmFtZTt9LGdldEluc3RhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy5pbnN0YW5jZTt9LGdldFBvc3NpYmxlVmFsdWVzOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5fZG9jTm9kZS5hdHRyaWJ1dGVzLnBvc3NpYmxlVmFsdWVzO2lmKGkpe2k9aS5zcGxpdChkKTtyZXR1cm4gaTt9ZWxzZXtyZXR1cm4gW107fX0sZ2V0R3JvdXA6ZnVuY3Rpb24oKXt2YXIgaj10aGlzLmdldERvY05vZGUoKS5fZG9jTm9kZS5hdHRyaWJ1dGVzLmdyb3VwO2lmKGope3JldHVybiBqLnNwbGl0KGQpO31yZXR1cm4gW107fSxpc1Byb3BlcnR5R3JvdXA6ZnVuY3Rpb24oKXtyZXR1cm4gISF0aGlzLmdldERvY05vZGUoKS5fZG9jTm9kZS5hdHRyaWJ1dGVzLmdyb3VwO30sZ2V0VHlwZTpmdW5jdGlvbigpe3ZhciBrPXRoaXMuX2RvY05vZGUuYXR0cmlidXRlcztpZihrLnR5cGUpe3JldHVybiBrLnR5cGU7fWlmKGsuY2hlY2spe2lmKGFwaXZpZXdlci5kYW8uQ2xhc3MuZ2V0Q2xhc3NCeU5hbWUoay5jaGVjayl8fGFwaXZpZXdlci51aS5DbGFzc1ZpZXdlci5QUklNSVRJVkVTW2suY2hlY2tdKXtyZXR1cm4gay5jaGVjazt9fXJldHVybiBudWxsO30sZ2V0UHJvcGVydHlUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RG9jTm9kZSgpLl9kb2NOb2RlLmF0dHJpYnV0ZXMucHJvcGVydHlUeXBlfHxjO30sZ2V0RXZlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXREb2NOb2RlKCkuX2RvY05vZGUuYXR0cmlidXRlcy5ldmVudDt9LGdldEFwcGx5TWV0aG9kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RG9jTm9kZSgpLl9kb2NOb2RlLmF0dHJpYnV0ZXMuYXBwbHk7fSxpc051bGxhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RG9jTm9kZSgpLl9kb2NOb2RlLmF0dHJpYnV0ZXMuYWxsb3dOdWxsPT09Yjt9LGdldERlZmF1bHRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMuZGVmYXVsdFZhbHVlO30saXNJbmhlcml0YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldERvY05vZGUoKS5fZG9jTm9kZS5hdHRyaWJ1dGVzLmluaGVyaXRhYmxlfHxmYWxzZTt9LGlzVGhlbWVhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RG9jTm9kZSgpLl9kb2NOb2RlLmF0dHJpYnV0ZXMudGhlbWVhYmxlfHxmYWxzZTt9LGlzUmVmaW5lZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMucmVmaW5lfHxmYWxzZTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGJ2PSJtaXhpbiIsYnU9IiIsYnQ9JzwvZGl2PicsYnM9IjxoMj4iLGJyPSI8L2gyPiIsYnE9ImludGVyZmFjZSIsYnA9JycsYm89ImNvbnN0cnVjdG9yIixibj0nOycsYm09ImV2ZW50cyIsYmI9JzwvaDI+JyxiYT0iYXBpdmlld2VyL2ltYWdlL25leHRsZXZlbC5naWYiLFk9J3B4JyxYPSc8cD4nLFc9JyInLFY9JyI+JyxVPSJhcHBlYXJhbmNlcyIsVD0nPC9wPicsUz0iY29uc3RhbnRzIixSPSJUaGlzICIsYkM9J3B4O2hlaWdodDonLGJEPSc8aDIgY2xhc3M9Indhcm5pbmciPicsYkE9InByb3BlcnRpZXMiLGJCPScgc3R5bGU9IicsYnk9JzxkaXYgY2xhc3M9ImNsYXNzLWRlc2NyaXB0aW9uIj4nLGJ6PSJtZXRob2RzIixidz0iSW5oZXJpdGFuY2UgaGllcmFyY2h5OiIsYng9Jzwvc3Bhbj4nLGJFPSJJbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBpbnRlcmZhY2U6IixiRj0iY2hpbGRDb250cm9scyIsYmY9InN1YiBpbnRlcmZhY2VzIixiZT0iO3ZlcnRpY2FsLWFsaWduOnRvcCIsYmg9JyIgc3JjPSInLGJnPScgdGl0bGU9IicsYmo9IkludGVybmFsOiIsYmk9IndpZHRoOjE4cHgiLGJsPSJJbmNsdWRlZCBtaXhpbnM6Iixiaz0ibWFyZ2luLXJpZ2h0Oi0xOHB4OyIsYmQ9IkludGVyZmFjZSIsYmM9ImFwaXZpZXdlci9pbWFnZS9jcm9zcy5naWYiLGE9Jy8+JyxiPScgPC9zcGFuPicsYz0nPHNwYW4gc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO2Rpc3BsYXk6aW5saW5lO3BhZGRpbmctcmlnaHQ6MThweDtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTJweDtsZWZ0OjA7d2lkdGg6JyxkPSJzdXBlck1peGlucyIsZj0ibWV0aG9kcy1zdGF0aWMiLGc9InN0cmluZyIsaD0iPGJyIC8+XG4iLGs9IkRlcHJlY2F0ZWQ6IixsPSJzdWIgbWl4aW5zIixtPSI6IixiSj0nPGltZyBzcmM9IicsYkk9Jzwvc21hbGw+JyxiSD0iIGlzIGRlcHJlY2F0ZWQhIixiRz0icG9zaXRpb246YWJzb2x1dGU7dG9wOjBweDtsZWZ0OjBweCIsYk49IlNpbmdsZXRvbiAiLGJNPSciIGNsYXNzPSJpbWciJyxiTD0nIi8+JyxiSz0iRGlyZWN0ICIsYlA9InBvc2l0aW9uOmFic29sdXRlO3RvcDowcHg7bGVmdDowcHg7cGFkZGluZy1yaWdodDoxOHB4OyIsYk89ImFwaXZpZXdlci9pbWFnZS9ibGFuay5naWYiLEI9ImFwaXZpZXdlci9pbWFnZS9jbGFzczE4LmdpZiIsQz0nPHNwYW4gc3R5bGU9ImRpc3BsYXk6aW5saW5lO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMnB4O3dpZHRoOicsej0iIGlzIGludGVybmFsISIsQT0icHgiLEY9JzxzcGFuIGNsYXNzPSJ0eXBlIj4nLEc9IkNsYXNzZXMgaW5jbHVkaW5nIHRoaXMgbWl4aW46IixEPSc8aW1nJyxFPSJjbGFzcyIseD0iSW1wbGVtZW50ZWQgaW50ZXJmYWNlczoiLHk9IkNsYXNzIix1PSJ0b3AiLHQ9Ik9iamVjdDxici8+Iix3PSIsICIsdj0ibWFyZ2luLWxlZnQ6IixxPSJjb25zdHJ1Y3QiLHA9ImxlZnQiLHM9JzxkaXY+JyxyPSJjaGlsZCBjb250cm9scyIsbz0iQWJzdHJhY3QgIixuPSJzdWIgY2xhc3NlcyIsTD0idmVydGljYWwtYWxpZ246dG9wIixNPSJzdGF0aWMgbWV0aG9kcyIsTj0iQ2xhc3NWaWV3ZXIiLE89IlN0YXRpYyAiLEg9ImFwaXZpZXdlci51aS5DbGFzc1ZpZXdlciIsST0nPHNtYWxsPicsSj0iTWl4aW4iLEs9Im1hcmtlZCIsUD0iYXBpdmlld2VyL2ltYWdlL3ZsaW5lLmdpZiIsUT0ic3VwZXJJbnRlcmZhY2VzIjtxeC5DbGFzcy5kZWZpbmUoSCx7ZXh0ZW5kOmFwaXZpZXdlci51aS5BYnN0cmFjdFZpZXdlcixjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXthcGl2aWV3ZXIudWkuQWJzdHJhY3RWaWV3ZXIuY2FsbCh0aGlzKTt0aGlzLmFkZEluZm9QYW5lbChuZXcgYXBpdmlld2VyLnVpLnBhbmVscy5NZXRob2RQYW5lbChibyxibykpO3RoaXMuYWRkSW5mb1BhbmVsKG5ldyBhcGl2aWV3ZXIudWkucGFuZWxzLkV2ZW50UGFuZWwoYm0sYm0sdHJ1ZSx0cnVlKSk7dGhpcy5hZGRJbmZvUGFuZWwobmV3IGFwaXZpZXdlci51aS5wYW5lbHMuUHJvcGVydHlQYW5lbChiQSxiQSx0cnVlLHRydWUpKTt0aGlzLmFkZEluZm9QYW5lbChuZXcgYXBpdmlld2VyLnVpLnBhbmVscy5NZXRob2RQYW5lbChieixieikpO3RoaXMuYWRkSW5mb1BhbmVsKG5ldyBhcGl2aWV3ZXIudWkucGFuZWxzLk1ldGhvZFBhbmVsKGYsTSkpO3RoaXMuYWRkSW5mb1BhbmVsKG5ldyBhcGl2aWV3ZXIudWkucGFuZWxzLkNvbnN0YW50UGFuZWwoUyxTLGZhbHNlLHRydWUpKTt0aGlzLmFkZEluZm9QYW5lbChuZXcgYXBpdmlld2VyLnVpLnBhbmVscy5BcHBlYXJhbmNlUGFuZWwoVSxVLGZhbHNlLHRydWUpKTt0aGlzLmFkZEluZm9QYW5lbChuZXcgYXBpdmlld2VyLnVpLnBhbmVscy5DaGlsZENvbnRyb2xzUGFuZWwoYkYscikpO3RoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5zZXRBdHRyaWJ1dGUoRSxOKTt0aGlzLl9pbml0KG5ldyBhcGl2aWV3ZXIuZGFvLkNsYXNzKHt9KSk7fSxzdGF0aWNzOntQUklNSVRJVkVTOnsidmFyIjp0cnVlLCJ2b2lkIjp0cnVlLCJ1bmRlZmluZWQiOnRydWUsImFyZ3VtZW50cyI6dHJ1ZSwibnVsbCI6dHJ1ZSwidmFyYXJncyI6dHJ1ZSwiQm9vbGVhbiI6dHJ1ZSwiU3RyaW5nIjp0cnVlLCJOdW1iZXIiOnRydWUsIkludGVnZXIiOnRydWUsIlBvc2l0aXZlTnVtYmVyIjp0cnVlLCJQb3NpdGl2ZUludGVnZXIiOnRydWUsIkZsb2F0Ijp0cnVlLCJEb3VibGUiOnRydWUsIkVycm9yIjp0cnVlLCJSZWdFeHAiOnRydWUsIk9iamVjdCI6dHJ1ZSwiQXJyYXkiOnRydWUsIk1hcCI6dHJ1ZSwiRnVuY3Rpb24iOnRydWUsIkRhdGUiOnRydWUsIk5vZGUiOnRydWUsIkVsZW1lbnQiOnRydWUsIkRvY3VtZW50Ijp0cnVlLCJXaW5kb3ciOnRydWUsIkV2ZW50Ijp0cnVlLCJDbGFzcyI6dHJ1ZSwiQm9vdHN0cmFwIjp0cnVlLCJMaXN0Ijp0cnVlLCJNaXhpbiI6dHJ1ZSwiSW50ZXJmYWNlIjp0cnVlLCJUaGVtZSI6dHJ1ZSwiQ29sb3IiOnRydWUsIkRlY29yYXRvciI6dHJ1ZSwiRm9udCI6dHJ1ZX0sY3JlYXRlSW1hZ2VIdG1sOmZ1bmN0aW9uKGJRLGJSLGJTKXtpZih0eXBlb2YgYlE9PWcpe3JldHVybiBiSitxeC51dGlsLlJlc291cmNlTWFuYWdlci5nZXRJbnN0YW5jZSgpLnRvVXJpKGJRKStiTSsoYlM/YkIrYlMrVzpidSkrYTt9ZWxzZXtpZihiUyl7YlMrPWJlO31lbHNle2JTPUw7fXJldHVybiBhcGl2aWV3ZXIudWkuQ2xhc3NWaWV3ZXIuY3JlYXRlT3ZlcmxheUltYWdlSHRtbCgxOCwxOCxiUSxiUixiUyk7fX0sY3JlYXRlT3ZlcmxheUltYWdlSHRtbDpmdW5jdGlvbihiVCxiVSxiVixiVyxiWCl7dmFyIGNhPWJwO3ZhciBiWTtpZihxeC5ib20uY2xpZW50LkVuZ2luZS5XRUJLSVQpe2NhPUMrYlQrYkMrYlUrWSsoKGJYPT1udWxsKT9icDooYm4rYlgpKStWO31lbHNle2NhPWMrYlQrYkMrYlUrWSsoKGJYPT1udWxsKT9icDooYm4rYlgpKStWO31pZihxeC5ib20uY2xpZW50LkVuZ2luZS5XRUJLSVQpe2JZPWJQO31lbHNlIGlmKHF4LmJvbS5jbGllbnQuRW5naW5lLk9QRVJBKXtiWT1iazt9ZWxzZXtiWT1iRzt9Zm9yKHZhciBpPTA7aTxiVi5sZW5ndGg7aSsrKXtjYSs9RDtpZihiVyE9bnVsbCl7Y2ErPWJnK2JXK1c7fWNhKz1iQitiWStiaCtxeC51dGlsLlJlc291cmNlTWFuYWdlci5nZXRJbnN0YW5jZSgpLnRvVXJpKGJWW2ldKStiTDt9Y2ErPWJ4O3JldHVybiBjYTt9fSxtZW1iZXJzOntfZ2V0VGl0bGVIdG1sOmZ1bmN0aW9uKGNiKXtzd2l0Y2goY2IuZ2V0VHlwZSgpKXtjYXNlIGJ2OnZhciBjZD1KO2JyZWFrO2Nhc2UgYnE6dmFyIGNkPWJkO2JyZWFrO2RlZmF1bHQ6dmFyIGNkPXk7YnJlYWs7fXZhciBjYz1uZXcgcXgudXRpbC5TdHJpbmdCdWlsZGVyKCk7Y2MuYWRkKEksY2IuZ2V0UGFja2FnZU5hbWUoKSxiSSk7Y2MuYWRkKEYpO2lmKGNiLmlzQWJzdHJhY3QoKSl7Y2MuYWRkKG8pO31lbHNlIGlmKGNiLmlzU3RhdGljKCkpe2NjLmFkZChPKTt9ZWxzZSBpZihjYi5pc1NpbmdsZXRvbigpKXtjYy5hZGQoYk4pO31jYy5hZGQoY2QsYik7Y2MuYWRkKGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLnNldFRpdGxlQ2xhc3MoY2IsY2IuZ2V0TmFtZSgpKSk7cmV0dXJuIGNjLmdldCgpO30sX2dldERlc2NyaXB0aW9uSHRtbDpmdW5jdGlvbihjZSl7c3dpdGNoKGNlLmdldFR5cGUoKSl7Y2FzZSBidjp2YXIgY2Y9bDticmVhaztjYXNlIGJxOnZhciBjZj1iZjticmVhaztkZWZhdWx0OnZhciBjZj1uO2JyZWFrO312YXIgY2g9bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcigpO3ZhciBjaT1jZS5nZXREZXNjcmlwdGlvbigpO2lmKGNpIT1idSl7Y2guYWRkKGJ5LGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLnJlc29sdmVMaW5rQXR0cmlidXRlcyhjaSxjZSksYnQpO31pZihjZS5nZXRFcnJvcnMoKS5sZW5ndGg+MCl7Y2guYWRkKGJ5LGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLmNyZWF0ZUVycm9ySHRtbChjZSxjZSksYnQpO31zd2l0Y2goY2UuZ2V0VHlwZSgpKXtjYXNlIGJ2OmNhc2UgYnE6Y2guYWRkKHRoaXMuX19TeihjZSkpO2JyZWFrO2RlZmF1bHQ6Y2guYWRkKHRoaXMuX19TeShjZSkpO2JyZWFrO31jaC5hZGQodGhpcy5fX1N4KGNlLmdldENoaWxkQ2xhc3NlcygpLGJLK2NmK20pKTtjaC5hZGQodGhpcy5fX1N4KGNlLmdldEludGVyZmFjZXMoKSx4KSk7Y2guYWRkKHRoaXMuX19TeChjZS5nZXRNaXhpbnMoKSxibCkpO2NoLmFkZCh0aGlzLl9fU3goY2UuZ2V0SW1wbGVtZW50YXRpb25zKCksYkUpKTtjaC5hZGQodGhpcy5fX1N4KGNlLmdldEluY2x1ZGVyKCksRykpO3ZhciBjZz1jZS5nZXRDb25zdHJ1Y3RvcigpO2lmKGNnKXtjaC5hZGQoYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlU2VlQWxzb0h0bWwoY2cpKTt9aWYoY2UuaXNEZXByZWNhdGVkKCkpe2NoLmFkZChiRCxrLGJiKTtjaC5hZGQoWCk7dmFyIGNpPWNlLmdldERlcHJlY2F0aW9uVGV4dCgpO2lmKGNpKXtjaC5hZGQoY2kpO31lbHNle2NoLmFkZChSLGNlLmdldFR5cGUoKSxiSCk7fWNoLmFkZChUKTt9aWYoY2UuaXNJbnRlcm5hbCgpKXtjaC5hZGQoYkQsYmosYmIpO2NoLmFkZChYKTtjaC5hZGQoUixjZS5nZXRUeXBlKCkseik7Y2guYWRkKFQpO31yZXR1cm4gY2guZ2V0KCk7fSxfX1N4OmZ1bmN0aW9uKGNqLGNrKXtpZihjai5sZW5ndGg+MCl7dmFyIGNsPW5ldyBxeC51dGlsLlN0cmluZ0J1aWxkZXIoYnMsY2ssYnIpO2Zvcih2YXIgaT0wO2k8Y2oubGVuZ3RoO2krKyl7aWYoaSE9MCl7Y2wuYWRkKHcpO31jbC5hZGQoYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlSXRlbUxpbmtIdG1sKGNqW2ldLG51bGwsdHJ1ZSxmYWxzZSkpO31jbD1jbC5nZXQoKTt9ZWxzZXtjbD1idTt9cmV0dXJuIGNsO30sX19TeTpmdW5jdGlvbihjbSl7dmFyIGNvPWFwaXZpZXdlci51aS5DbGFzc1ZpZXdlcjt2YXIgY3A9bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcihicyxidyxicik7dmFyIGNxPWNtLmdldENsYXNzSGllcmFyY2h5KCk7Y3AuYWRkKGNvLmNyZWF0ZUltYWdlSHRtbChCKSx0KTt2YXIgY249MDtmb3IodmFyIGk9Y3EubGVuZ3RoLTE7aT49MDtpLS0pe2NwLmFkZChzKTtjcC5hZGQoY28uY3JlYXRlSW1hZ2VIdG1sKGJhLG51bGwsditjbitBKSxjby5jcmVhdGVJbWFnZUh0bWwoYXBpdmlld2VyLlRyZWVVdGlsLmdldEljb25VcmwoY3FbaV0pKSk7aWYoaSE9MCl7Y3AuYWRkKGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLmNyZWF0ZUl0ZW1MaW5rSHRtbChjcVtpXS5nZXRGdWxsTmFtZSgpLG51bGwsZmFsc2UpKTt9ZWxzZXtjcC5hZGQoY3FbaV0uZ2V0RnVsbE5hbWUoKSk7fWNuKz0xODtjcC5hZGQoYnQpO31yZXR1cm4gY3AuZ2V0KCk7fSxfX1N6OmZ1bmN0aW9uKGNyKXtpZihjci5nZXRUeXBlKCk9PWJ2KXt2YXIgY3M9ZDt9ZWxzZXtjcz1RO312YXIgY3U9YXBpdmlld2VyLnVpLkNsYXNzVmlld2VyO3ZhciBjdD1jdS5jcmVhdGVJbWFnZUh0bWwoYk8sbnVsbCxiaSk7dmFyIGN3PWZ1bmN0aW9uKGN4LGN5KXt2YXIgY0E9W107Zm9yKHZhciBjej0wO2N6PGN4Lmxlbmd0aDtjeisrKXt2YXIgY0Q9bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcigpO3ZhciBjQj1jeFtjel07aWYoIWN5KXtpZihjej09Y3gubGVuZ3RoLTEpe2NELmFkZChjdS5jcmVhdGVJbWFnZUh0bWwoYmEpKTt9ZWxzZXtjRC5hZGQoY3UuY3JlYXRlSW1hZ2VIdG1sKGJjKSk7fX1lbHNle2lmKCFjeSl7Y0QuYWRkKGN0KTt9fWNELmFkZChjdS5jcmVhdGVJbWFnZUh0bWwoYXBpdmlld2VyLlRyZWVVdGlsLmdldEljb25VcmwoY0IpKSk7aWYoIWN5KXtjRC5hZGQoYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlSXRlbUxpbmtIdG1sKGNCLmdldEZ1bGxOYW1lKCksbnVsbCxmYWxzZSkpO31lbHNle2NELmFkZChjQi5nZXRGdWxsTmFtZSgpKTt9Y0EucHVzaChjRC5nZXQoKSk7dmFyIGNDPXF4LmxhbmcuQXJyYXkuY2xvbmUoY0IuZ2V0SXRlbUxpc3QoY3MpKTtmb3IodmFyIGo9MDtqPGNDLmxlbmd0aDtqKyspe2NDW2pdPWFwaXZpZXdlci5kYW8uQ2xhc3MuZ2V0Q2xhc3NCeU5hbWUoY0Nbal0uZ2V0TmFtZSgpKTt9aWYoY0MubGVuZ3RoPjApe3ZhciBjRT1jdyhjQyk7Zm9yKHZhciBpPTA7aTxjRS5sZW5ndGg7aSsrKXtpZihjej09Y3gubGVuZ3RoLTEpe2lmKGN5KXtjQS5wdXNoKGNFW2ldKTt9ZWxzZXtjQS5wdXNoKGN0K2NFW2ldKTt9fWVsc2V7Y0EucHVzaChjdS5jcmVhdGVJbWFnZUh0bWwoUCkrY0VbaV0pO319fX1yZXR1cm4gY0E7fTt2YXIgY3Y9bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcigpO2lmKGNyLmdldEl0ZW1MaXN0KGNzKS5sZW5ndGg+MCl7Y3YuYWRkKGJzLGJ3LGJyKTtjdi5hZGQoY3coW2NyXSx0cnVlKS5qb2luKGgpKTt9cmV0dXJuIGN2LmdldCgpO30sc2hvd0l0ZW06ZnVuY3Rpb24oY0Ype3ZhciBjSTtpZihjRj09cSl7Y0k9dGhpcy5nZXREb2NOb2RlKCkuZ2V0Q29uc3RydWN0b3IoKTt9ZWxzZXtjST10aGlzLmdldERvY05vZGUoKS5nZXRJdGVtKGNGKTt9aWYoIWNJKXtyZXR1cm4gZmFsc2U7fXRoaXMuX19TQShjSSxjRik7dmFyIGNKPXRoaXMuX2dldFBhbmVsRm9ySXRlbU5vZGUoY0kpO3ZhciBjRz1jSi5nZXRJdGVtRWxlbWVudChjSS5nZXROYW1lKCkpO2lmKCFjRyl7cmV0dXJuIGZhbHNlO312YXIgY0g9Y0cucGFyZW50Tm9kZS5wYXJlbnROb2RlO2lmKHRoaXMuX21hcmtlZEVsZW1lbnQpe3RoaXMuX21hcmtlZEVsZW1lbnQuY2xhc3NOYW1lPWJ1O31jSC5jbGFzc05hbWU9Szt0aGlzLl9tYXJrZWRFbGVtZW50PWNIO3F4LmV2ZW50LlRpbWVyLm9uY2UoZnVuY3Rpb24oZSl7cXguYm9tLmVsZW1lbnQuU2Nyb2xsLmludG9WaWV3KGNILG51bGwscCx1KTt9LHRoaXMsMCk7cmV0dXJuIHRydWU7fSxfX1NBOmZ1bmN0aW9uKGNLLGNMKXt2YXIgY009YXBpdmlld2VyLlVpTW9kZWwuZ2V0SW5zdGFuY2UoKTtpZihjSy5pc0Zyb21Qcm9wZXJ0eSYmY0suaXNGcm9tUHJvcGVydHkoKSl7Y00uc2V0RXhwYW5kUHJvcGVydGllcyh0cnVlKTtpZihjSy5pc1Byb3RlY3RlZCgpKXtjTS5zZXRTaG93UHJvdGVjdGVkKHRydWUpO31pZihjSy5pc1ByaXZhdGUoKSl7Y00uc2V0U2hvd1ByaXZhdGUodHJ1ZSk7fX1lbHNlIGlmKGNLLmdldExpc3ROYW1lKCk9PSJtZXRob2RzIil7aWYoY0wuaW5kZXhPZigiX18iKT09PTApe2NNLnNldFNob3dQcml2YXRlKHRydWUpO31lbHNlIGlmKGNMLmluZGV4T2YoIl8iKT09PTApe2NNLnNldFNob3dQcm90ZWN0ZWQodHJ1ZSk7fX19LF9nZXRQYW5lbEZvckl0ZW1Ob2RlOmZ1bmN0aW9uKGNOKXt2YXIgY089dGhpcy5nZXRQYW5lbHMoKTtmb3IodmFyIGk9MDtpPGNPLmxlbmd0aDtpKyspe3ZhciBjUD1jT1tpXTtpZihjUC5jYW5EaXNwbGF5SXRlbShjTikpe3JldHVybiBjUDt9fX19LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fdGl0bGVFbGVtPXRoaXMuX2NsYXNzRGVzY0VsZW09dGhpcy5fbWFya2VkRWxlbWVudD1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBjPSJhcGl2aWV3ZXIudWkucGFuZWxzLkV2ZW50UGFuZWwiLGI9InZhciIsYT0iZXZlbnQiO3F4LkNsYXNzLmRlZmluZShjLHtleHRlbmQ6YXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwsbWVtYmVyczp7aXRlbUhhc0RldGFpbHM6ZnVuY3Rpb24oZCxlKXtyZXR1cm4gKGQuZ2V0Q2xhc3MoKSE9ZXx8ZC5nZXRTZWUoKS5sZW5ndGg+MHx8ZC5nZXRFcnJvcnMoKS5sZW5ndGg+MHx8YXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuZGVzY3JpcHRpb25IYXNEZXRhaWxzKGQpKTt9LGdldEl0ZW1UeXBlSHRtbDpmdW5jdGlvbihmKXtyZXR1cm4gYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlVHlwZUh0bWwoZixiKTt9LGdldEl0ZW1UaXRsZUh0bWw6ZnVuY3Rpb24oZyl7cmV0dXJuIGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLnNldFRpdGxlQ2xhc3MoZyxnLmdldE5hbWUoKSk7fSxnZXRJdGVtVGV4dEh0bWw6ZnVuY3Rpb24oaCxpLGope3ZhciBrPW5ldyBxeC51dGlsLlN0cmluZ0J1aWxkZXIoYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlRGVzY3JpcHRpb25IdG1sKGgsaC5nZXRDbGFzcygpLGopKTtpZihqKXtrLmFkZChhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVJbmhlcml0ZWRGcm9tSHRtbChoLGkpKTtrLmFkZChhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVTZWVBbHNvSHRtbChoKSk7ay5hZGQoYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlRXJyb3JIdG1sKGgsaSkpO2suYWRkKGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLmNyZWF0ZURlcHJlY2F0aW9uSHRtbChoLGEpKTt9cmV0dXJuIGsuZ2V0KCk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBqPSc8L2Rpdj4nLGk9JzxkaXYgY2xhc3M9Iml0ZW0tZGV0YWlsLWhlYWRsaW5lIj4nLGg9JzxkaXYgY2xhc3M9Iml0ZW0tZGV0YWlsLXRleHQiPicsZz0iIyIsZj0ibnVsbCIsZT0iaW5zdGFuY2VzIG9mICIsZD0iYXBpdmlld2VyLnVpLnBhbmVscy5Qcm9wZXJ0eVBhbmVsIixjPSc8ZGl2IGNsYXNzPSJqYXZhc2NyaXB0Ij4nLGI9InZhciIsYT0iQXBwbHkgbWV0aG9kOiIsdj0icHJvcGVydHkiLHU9IkNoZWNrOiIsdD0iQWxsb3dlZCB2YWx1ZXM6IixzPSc8L2NvZGU+JyxyPSI8L2NvZGU+IixxPSJhbnkgIixwPSJJbml0IHZhbHVlOiIsbz0nPGNvZGU+JyxuPSI8Y29kZT4iLG09IjwvY29kZT4sIDxjb2RlPiIsaz0iQ2hhbmdlIGV2ZW50OiIsbD0iIG9yIHN1YiBjbGFzc2VzIjtxeC5DbGFzcy5kZWZpbmUoZCx7ZXh0ZW5kOmFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLG1lbWJlcnM6e19fU0I6ZnVuY3Rpb24odyx4KXtpZih3LmlzUmVmaW5lZCgpKXtyZXR1cm4gIiI7fWlmKHcuaXNQcml2YXRlKCkpe3ZhciB5PSJfXyI7dmFyIG5hbWU9dy5nZXROYW1lKCkuc3Vic3RyaW5nKDIpO31lbHNlIGlmKHcuaXNQcm90ZWN0ZWQoKSl7eT0iXyI7bmFtZT13LmdldE5hbWUoKS5zdWJzdHJpbmcoMSk7fWVsc2V7eT0iIjtuYW1lPXcuZ2V0TmFtZSgpO31uYW1lPXF4LmxhbmcuU3RyaW5nLmZpcnN0VXAobmFtZSk7dmFyIEE9W107aWYody5nZXRQcm9wZXJ0eVR5cGUoKT09ImZhc3QiKXtBLnB1c2goIntAbGluayAjIit5KyJnZXQiK25hbWUrIn08L3RkPjx0ZD4gR2V0IHRoZSBwcm9wZXJ0eSB2YWx1ZS4iKTt9ZWxzZXtBLnB1c2goIntAbGluayAjIit5KyJzZXQiK25hbWUrIn08L3RkPjx0ZD4gU2V0IHRoZSBwcm9wZXJ0eSB2YWx1ZS4iKTtpZighdy5pc1Byb3BlcnR5R3JvdXAoKSl7QS5wdXNoKCJ7QGxpbmsgIyIreSsiZ2V0IituYW1lKyJ9PC90ZD48dGQ+IEdldCB0aGUgcHJvcGVydHkgdmFsdWUuIik7QS5wdXNoKCJ7QGxpbmsgIyIreSsiaW5pdCIrbmFtZSsifTwvdGQ+PHRkPiBDYWxsIGFwcGx5IG1ldGhvZCB3aXRoIHRoZSBpbml0IHZhbHVlLiIpO31BLnB1c2goIntAbGluayAjIit5KyJyZXNldCIrbmFtZSsifTwvdGQ+PHRkPiBSZXNldCB0aGUgcHJvcGVydHkgdmFsdWUuIik7aWYody5nZXRUeXBlKCk9PSJCb29sZWFuIil7QS5wdXNoKCJ7QGxpbmsgIyIreSsidG9nZ2xlIituYW1lKyJ9PC90ZD48dGQ+IFRvZ2dsZSB0aGUgcHJvcGVydHkgdmFsdWUuIik7QS5wdXNoKCJ7QGxpbmsgIyIreSsiaXMiK25hbWUrIn08L3RkPjx0ZD4gQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgZXF1YWxzIDxjb2RlPnRydWU8L2NvZGU+LiIpO319dmFyIHo9bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcigpO3ouYWRkKCc8ZGl2IGNsYXNzPSJpdGVtLWRldGFpbC1oZWFkbGluZSI+JywiR2VuZXJhdGVkIG1ldGhvZHM6IiwnPC9kaXY+JywnPGRpdiBjbGFzcz0iaXRlbS1kZXRhaWwtdGV4dCI+Jyk7ei5hZGQoIjx0YWJsZT48dHI+PHRkPiIpO3ouYWRkKEEuam9pbigiPC90ZD48L3RyPjx0cj48dGQ+IikpO3ouYWRkKCI8L3RkPjwvdHI+PC90YWJsZT4iKTt6LmFkZCgnPC9kaXY+Jyk7cmV0dXJuIGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLnJlc29sdmVMaW5rQXR0cmlidXRlcyh6LmdldCgpLHgpO30sX19TQzpmdW5jdGlvbihCKXt2YXIgQz1bXTtpZihCLmlzTnVsbGFibGUoKSl7Qy5wdXNoKCJUaGlzIHByb3BlcnR5IGFsbG93cyAnbnVsbCcgdmFsdWVzIik7fWlmKEIuaXNJbmhlcml0YWJsZSgpKXtDLnB1c2goIlRoZSBwcm9wZXJ0eSB2YWx1ZSBjYW4gYmUgaW5oZXJpdGVkIGZyb20gYSBwYXJlbnQgb2JqZWN0LiIpO31pZihCLmlzVGhlbWVhYmxlKCkpe0MucHVzaCgiVGhlIHByb3BlcnR5IHZhbHVlIGNhbiBiZSBzZXQgdXNpbmcgYXBwZWFyYW5jZSB0aGVtZXMuIik7fWlmKEIuaXNQcm9wZXJ0eUdyb3VwKCkpe0MucHVzaCgiVGhlIHByb3BlcnR5IGlzIGEgcHJvcGVydHkgZ3JvdXAuIik7fWlmKEIuaXNSZWZpbmVkKCkpe0MucHVzaCgiVGhlIHByb3BlcnR5IHJlZmluZXMgdGhlIGluaXQgdmFsdWUgb2YgYW4gZXhpc3RpbmcgcHJvcGVydHkuIik7fWlmKEMubGVuZ3RoPjApe3ZhciBEPW5ldyBxeC51dGlsLlN0cmluZ0J1aWxkZXIoKTtELmFkZCgnPGRpdiBjbGFzcz0iaXRlbS1kZXRhaWwtaGVhZGxpbmUiPicsIlByb3BlcnR5IGF0dHJpYnV0ZXM6IiwnPC9kaXY+JywnPGRpdiBjbGFzcz0iaXRlbS1kZXRhaWwtdGV4dCI+Jyk7RC5hZGQoIjx1bD48bGk+Iik7RC5hZGQoQy5qb2luKCI8L2xpPjxsaT4iKSk7RC5hZGQoIjwvbGk+PC91bD4iKTtELmFkZCgnPC9kaXY+Jyk7cmV0dXJuIEQuZ2V0KCk7fWVsc2V7cmV0dXJuICIiO319LF9fU0Q6ZnVuY3Rpb24oRSl7aWYoRS5pc1JlZmluZWQoKSl7dmFyIEY9bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcignPGRpdiBjbGFzcz0iaXRlbS1kZXRhaWwtaGVhZGxpbmUiPicsIlJlZmluZWQgcHJvcGVydHk6IiwnPC9kaXY+JywnPGRpdiBjbGFzcz0iaXRlbS1kZXRhaWwtdGV4dCI+JyxhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVJdGVtTGlua0h0bWwoRS5nZXRPdmVycmlkZGVuRnJvbSgpLmdldEZ1bGxOYW1lKCkrIiMiK0UuZ2V0TmFtZSgpKSwnPC9kaXY+Jyk7cmV0dXJuIEYuZ2V0KCk7fWVsc2V7cmV0dXJuICIiO319LGdldEl0ZW1UeXBlSHRtbDpmdW5jdGlvbihHKXtyZXR1cm4gYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlVHlwZUh0bWwoRyxiKTt9LGdldEl0ZW1UaXRsZUh0bWw6ZnVuY3Rpb24oSCl7cmV0dXJuIGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLnNldFRpdGxlQ2xhc3MoSCxILmdldE5hbWUoKSk7fSxnZXRJdGVtVGV4dEh0bWw6ZnVuY3Rpb24oSSxKLEspe3ZhciBMPUkuZ2V0RG9jTm9kZSgpO3ZhciBOPW5ldyBxeC51dGlsLlN0cmluZ0J1aWxkZXIoYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlRGVzY3JpcHRpb25IdG1sKEksSS5nZXRDbGFzcygpLEspKTtpZihLKXt2YXIgTz1udWxsO3ZhciBNPXF4LmxhbmcuQXJyYXkuY2xvbmUoSS5nZXRQb3NzaWJsZVZhbHVlcygpKTtpZihNLmxlbmd0aD4wKXtpZihJLmlzTnVsbGFibGUoKSl7TS5wdXNoKGYpO31PPW4rTS5qb2luKG0pK3I7fWVsc2UgaWYoSS5nZXRDbGFzc25hbWUoKSl7Tz1lK0kuZ2V0Q2xhc3NuYW1lKCk7fWVsc2UgaWYoSS5nZXRJbnN0YW5jZSgpKXtPPWUrSS5nZXRJbnN0YW5jZSgpK2w7fWVsc2UgaWYoSS5nZXRUeXBlKCkpe089cStJLmdldFR5cGUoKTt9aWYoTyl7Ti5hZGQoaSx0LGosaCk7Ti5hZGQoTyxqKTt9aWYoSS5nZXRDaGVjaygpKXtOLmFkZChpLHUsaixjLHF4LmRldi5Ub2tlbml6ZXIuamF2YVNjcmlwdFRvSHRtbChJLmdldENoZWNrKCkpLGopO31pZighSS5pc1Byb3BlcnR5R3JvdXAoKSl7Ti5hZGQoaSxwLGosaCxvLChJLmdldERlZmF1bHRWYWx1ZSgpP0kuZ2V0RGVmYXVsdFZhbHVlKCk6ZikscyxqKTt9aWYoSS5nZXRFdmVudCgpJiYhSS5pc1JlZmluZWQoKSl7Ti5hZGQoaSxrLGosaCxhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVJdGVtTGlua0h0bWwoZytJLmdldEV2ZW50KCksSS5nZXRDbGFzcygpLHRydWUsdHJ1ZSksaik7fWlmKEkuZ2V0QXBwbHlNZXRob2QoKSYmIUkuaXNSZWZpbmVkKCkpe04uYWRkKGksYSxqLGgsYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlSXRlbUxpbmtIdG1sKGcrSS5nZXRBcHBseU1ldGhvZCgpLEkuZ2V0Q2xhc3MoKSx0cnVlLHRydWUpLGopO31OLmFkZCh0aGlzLl9fU0MoSSkpO04uYWRkKHRoaXMuX19TQihJLEopKTtOLmFkZChhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVJbmNsdWRlZEZyb21IdG1sKEksSikpO04uYWRkKHRoaXMuX19TRChJKSk7Ti5hZGQoYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlSW5oZXJpdGVkRnJvbUh0bWwoSSxKKSk7Ti5hZGQoYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlSW5mb1JlcXVpcmVkQnlIdG1sKEkpKTtOLmFkZChhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVTZWVBbHNvSHRtbChMKSk7Ti5hZGQoYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlRXJyb3JIdG1sKEksSikpO04uYWRkKGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLmNyZWF0ZURlcHJlY2F0aW9uSHRtbChMLHYpKTt9cmV0dXJuIE4uZ2V0KCk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBjPSJhcGl2aWV3ZXIudWkucGFuZWxzLkNvbnN0YW50UGFuZWwiLGI9InZhciIsYT0iY29uc3RhbnQiO3F4LkNsYXNzLmRlZmluZShjLHtleHRlbmQ6YXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwsbWVtYmVyczp7aXRlbUhhc0RldGFpbHM6ZnVuY3Rpb24oZCxlKXtyZXR1cm4gKGQuZ2V0U2VlKCkubGVuZ3RoPjB8fGQuZ2V0RXJyb3JzKCkubGVuZ3RoPjB8fGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLmRlc2NyaXB0aW9uSGFzRGV0YWlscyhkKXx8dGhpcy5fX1NFKGQpKTt9LGdldEl0ZW1UeXBlSHRtbDpmdW5jdGlvbihmKXtyZXR1cm4gYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlVHlwZUh0bWwoZixiKTt9LGdldEl0ZW1UaXRsZUh0bWw6ZnVuY3Rpb24oZyl7cmV0dXJuIGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLnNldFRpdGxlQ2xhc3MoZyxnLmdldE5hbWUoKSk7fSxnZXRJdGVtVGV4dEh0bWw6ZnVuY3Rpb24oaCxpLGope3ZhciBrPWFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLmNyZWF0ZURlc2NyaXB0aW9uSHRtbChoLGguZ2V0Q2xhc3MoKSxqKTtpZihqKXtrKz10aGlzLl9fU0YoaCk7ays9YXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlU2VlQWxzb0h0bWwoaCk7ays9YXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlRXJyb3JIdG1sKGgsaSk7ays9YXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlRGVwcmVjYXRpb25IdG1sKGgsYSk7fXJldHVybiBrO30sX19TRTpmdW5jdGlvbihsKXtyZXR1cm4gbC5nZXRWYWx1ZSgpP3RydWU6ZmFsc2U7fSxfX1NGOmZ1bmN0aW9uKG0pe2lmKHRoaXMuX19TRShtKSl7dmFyIG49bmV3IHF4LnV0aWwuU3RyaW5nQnVpbGRlcignPGRpdiBjbGFzcz0iaXRlbS1kZXRhaWwtaGVhZGxpbmUiPicsIlZhbHVlOiAiLCc8L2Rpdj4nLCc8ZGl2IGNsYXNzPSJpdGVtLWRldGFpbC10ZXh0Ij4nLHF4LmJvbS5TdHJpbmcuZXNjYXBlKHF4LnV0aWwuSnNvbi5zdHJpbmdpZnkobS5nZXRWYWx1ZSgpKSksJzwvZGl2PicpO3JldHVybiBuLmdldCgpO31lbHNle3JldHVybiAiIjt9fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBtPSc8L2Rpdj4nLGw9IiA8c3BhbiBjbGFzcz0naXRlbS1kZXRhaWwtZGVmaW5lJz5kZWZpbmVkIGJ5ICIsaz0iIChkZWZhdWx0IGFwcGVhcmFuY2Ugb2YgdGhlIGNsYXNzKSIsaj0iPC9wPjwvZGl2PiIsaD0iPC9zcGFuPjogIixnPSc8ZGl2IGNsYXNzPSJpdGVtLWRlc2MiPicsZj0iICIsZT0iYXBpdmlld2VyLnVpLnBhbmVscy5BcHBlYXJhbmNlUGFuZWwiLGQ9JzxkaXYgY2xhc3M9Iml0ZW0tZGV0YWlsLWhlYWRsaW5lIj4nLGM9IjwvY29kZT48cD4iLGE9IjxkaXYgY2xhc3M9J2l0ZW0tZGV0YWlsLXRleHQnPjxjb2RlPiIsYj0iU3RhdGVzOiI7cXguQ2xhc3MuZGVmaW5lKGUse2V4dGVuZDphcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbCxtZW1iZXJzOntfX1NHOmZ1bmN0aW9uKG4pe3ZhciByPW4uZ2V0U3RhdGVzKCk7aWYoci5sZW5ndGg+MCl7dmFyIHQ9cXgubGFuZy5BcnJheS5jbG9uZShyKTt9ZWxzZXt0PVtdO312YXIgdT1uLmdldFR5cGUoKTt2YXIgdj1uLmdldENsYXNzKCk7dmFyIHM9MTtpZih1IT12KXt2PXU7cz0wO312YXIgcT12LmdldENsYXNzSGllcmFyY2h5KCk7Zm9yKHZhciBpPXM7aTxxLmxlbmd0aDtpKyspe3Y9cVtpXTt2YXIgbz12LmdldENsYXNzQXBwZWFyYW5jZSgpO2lmKG8pe3ZhciBwPW8uZ2V0U3RhdGVzKCk7aWYocCl7cXgubGFuZy5BcnJheS5hcHBlbmQodCxwKTt9fX1yZXR1cm4gdDt9LF9nZXRQYW5lbEl0ZW1zOmZ1bmN0aW9uKHcseCl7dmFyIHo9YXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwucHJvdG90eXBlLl9nZXRQYW5lbEl0ZW1zLmNhbGwodGhpcyx3LHgpO2lmKCF3KXtyZXR1cm4gejt9dmFyIEE9eC5nZXRDbGFzc0hpZXJhcmNoeSgpO2Zvcih2YXIgaT0wO2k8QS5sZW5ndGg7aSsrKXt2YXIgQj1BW2ldO3ZhciB5PUIuZ2V0Q2xhc3NBcHBlYXJhbmNlKCk7aWYoeSl7aWYoeS5nZXRUeXBlKCkhPXgpe3oucHVzaCh5KTt9cmV0dXJuIHo7fX19LGdldEl0ZW1UeXBlSHRtbDpmdW5jdGlvbihDKXt2YXIgRT1DLmdldE5hbWUoKTtpZihDLmdldFR5cGUoKT09Qy5nZXRDbGFzcygpKXt2YXIgRD1FK2s7fWVsc2V7dmFyIEQ9RTt9cmV0dXJuIEQ7fSxnZXRJdGVtVGl0bGVIdG1sOmZ1bmN0aW9uKEYpe3JldHVybiBhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5zZXRUaXRsZUNsYXNzKEYsRi5nZXROYW1lKCkpO30sZ2V0SXRlbVRleHRIdG1sOmZ1bmN0aW9uKEcsSCxJKXt2YXIgTT1uZXcgcXgudXRpbC5TdHJpbmdCdWlsZGVyKCk7TS5hZGQoZyxhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVEZXNjcmlwdGlvbkh0bWwoRyxHLmdldENsYXNzKCksdHJ1ZSksbSk7aWYoSSl7dmFyIEs9dGhpcy5fX1NHKEcpO2lmKEsubGVuZ3RoPjApe00uYWRkKGQsYixtKTtmb3IodmFyIGk9MDtpPEsubGVuZ3RoO2krKyl7dmFyIEw9S1tpXTtNLmFkZChhLEwuZ2V0TmFtZSgpLGMpO3ZhciBKPUwuZ2V0QXBwZWFyYW5jZSgpO2lmKEouZ2V0VHlwZSgpIT1HLmdldENsYXNzKCkpe00uYWRkKGwsYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlSXRlbUxpbmtIdG1sKEouZ2V0VHlwZSgpLmdldEZ1bGxOYW1lKCkpLGgpO312YXIgTj1MLmdldERlc2NyaXB0aW9uKCk7aWYoTil7TS5hZGQoZixhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5yZXNvbHZlTGlua0F0dHJpYnV0ZXMoTixMLmdldENsYXNzKCkpKTt9TS5hZGQoaik7fU0uYWRkKG0pO319cmV0dXJuIE0uZ2V0KCk7fSxpdGVtSGFzRGV0YWlsczpmdW5jdGlvbihPLFApe3JldHVybiB0aGlzLl9fU0coTykubGVuZ3RoPjA7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBpPSc8L2Rpdj4nLGg9ImFwaXZpZXdlci51aS5wYW5lbHMuQ2hpbGRDb250cm9sc1BhbmVsIixnPSJudWxsIixmPSJ2YXIiLGU9JzxkaXYgY2xhc3M9Iml0ZW0tZGV0YWlsLWhlYWRsaW5lIj4nLGQ9JzwvY29kZT4nLGM9Jzxjb2RlPicsYj0iRGVmYXVsdCB2YWx1ZToiLGE9JzxkaXYgY2xhc3M9Iml0ZW0tZGV0YWlsLXRleHQiPic7cXguQ2xhc3MuZGVmaW5lKGgse2V4dGVuZDphcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbCxtZW1iZXJzOntnZXRJdGVtVHlwZUh0bWw6ZnVuY3Rpb24oaixrKXtyZXR1cm4gYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuY3JlYXRlVHlwZUh0bWwoaixmLHRydWUpO30sZ2V0SXRlbVRpdGxlSHRtbDpmdW5jdGlvbihsLG0pe3JldHVybiBhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5zZXRUaXRsZUNsYXNzKGwsbC5nZXROYW1lKCkpO30sZ2V0SXRlbVRleHRIdG1sOmZ1bmN0aW9uKG4sbyxwKXt2YXIgcT1uZXcgcXgudXRpbC5TdHJpbmdCdWlsZGVyKG4uZ2V0RGVzY3JpcHRpb24oKSk7aWYocCl7cS5hZGQoZSxiLGksYSxjLChuLmdldERlZmF1bHRWYWx1ZSgpP24uZ2V0RGVmYXVsdFZhbHVlKCk6ZyksZCxpKTt9cmV0dXJuIHEuZ2V0KCk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJhcGl2aWV3ZXIuZGFvLkNvbnN0YW50IjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOmFwaXZpZXdlci5kYW8uQ2xhc3NJdGVtLGNvbnN0cnVjdDpmdW5jdGlvbihiLGMsZCl7YXBpdmlld2VyLmRhby5DbGFzc0l0ZW0uY2FsbCh0aGlzLGIsYyxkKTt9LG1lbWJlcnM6e2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY05vZGUuYXR0cmlidXRlcy52YWx1ZTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9InN0YXRlcyIsYT0iYXBpdmlld2VyLmRhby5BcHBlYXJhbmNlIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOmFwaXZpZXdlci5kYW8uQ2xhc3NJdGVtLGNvbnN0cnVjdDpmdW5jdGlvbihjLGQsZSl7YXBpdmlld2VyLmRhby5DbGFzc0l0ZW0uY2FsbCh0aGlzLGMsZCxlKTt9LG1lbWJlcnM6e2dldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gYXBpdmlld2VyLmRhby5DbGFzcy5nZXRDbGFzc0J5TmFtZSh0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMudHlwZSk7fSxnZXRUeXBlczpmdW5jdGlvbigpe3JldHVybiBbe3R5cGU6dGhpcy5fZG9jTm9kZS5hdHRyaWJ1dGVzLnR5cGV9XTt9LGdldEFwcGVhcmFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRDbGFzcygpO30sZ2V0U3RhdGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlc3x8W107fSxfYWRkQ2hpbGROb2RlOmZ1bmN0aW9uKGYpe3N3aXRjaChmLnR5cGUpe2Nhc2UgYjp0aGlzLl9zdGF0ZXM9dGhpcy5fY3JlYXRlTm9kZUxpc3QoZixhcGl2aWV3ZXIuZGFvLlN0YXRlLHRoaXMpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGFwaXZpZXdlci5kYW8uQ2xhc3NJdGVtLnByb3RvdHlwZS5fYWRkQ2hpbGROb2RlLmNhbGwodGhpcyxmKTt9cmV0dXJuIHRydWU7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJhcGl2aWV3ZXIuZGFvLlN0YXRlIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOmFwaXZpZXdlci5kYW8uQ2xhc3NJdGVtLGNvbnN0cnVjdDpmdW5jdGlvbihiLHBhcmVudCl7YXBpdmlld2VyLmRhby5DbGFzc0l0ZW0uY2FsbCh0aGlzLGIscGFyZW50KTt9LG1lbWJlcnM6e2dldENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsYXNzLmdldENsYXNzKCk7fSxnZXRBcHBlYXJhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsYXNzO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0iYXBpdmlld2VyLmRhby5DaGlsZENvbnRyb2wiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6YXBpdmlld2VyLmRhby5DbGFzc0l0ZW0sY29uc3RydWN0OmZ1bmN0aW9uKGIsYyxkKXthcGl2aWV3ZXIuZGFvLkNsYXNzSXRlbS5jYWxsKHRoaXMsYixjKTt0aGlzLl9saXN0TmFtZT1kO30sbWVtYmVyczp7Z2V0VHlwZXM6ZnVuY3Rpb24oKXt2YXIgZj1hcGl2aWV3ZXIuZGFvLkNsYXNzSXRlbS5wcm90b3R5cGUuZ2V0VHlwZXMuY2FsbCh0aGlzKTt2YXIgZT10aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXM7aWYoZS50eXBlKXtmLnB1c2goe3R5cGU6ZS50eXBlfSk7fXJldHVybiBmO30sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMudHlwZTt9LGdldERlZmF1bHRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NOb2RlLmF0dHJpYnV0ZXMuZGVmYXVsdFZhbHVlO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbj0iY2xhc3MiLG09ImludGVyZmFjZSIsbD0ibWl4aW4iLGs9Imxpc3QiLGo9IiIsaD0iYXBpdmlld2VyLnVpLnBhbmVscy5DbGFzc1BhbmVsIixnPSJTaW5nbGV0b24gIixmPSJBYnN0cmFjdCAiLGU9ImJvb3RzdHJhcCIsZD0iU3RhdGljICIsYT0iQ2xhc3MiLGM9IkludGVyZmFjZSIsYj0iTWl4aW4iO3F4LkNsYXNzLmRlZmluZShoLHtleHRlbmQ6YXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwsY29uc3RydWN0OmZ1bmN0aW9uKG8scCxxKXthcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jYWxsKHRoaXMsbyxwKTt0aGlzLnNldFR5cGUocSk7fSxwcm9wZXJ0aWVzOnt0eXBlOntjaGVjazpbbixsLG1dfX0sbWVtYmVyczp7Z2V0SXRlbVR5cGVIdG1sOmZ1bmN0aW9uKHIpe3JldHVybiBhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVJdGVtTGlua0h0bWwoci5nZXROYW1lKCkscixmYWxzZSx0cnVlKTt9LGdldEl0ZW1UaXRsZUh0bWw6ZnVuY3Rpb24ocyl7cmV0dXJuIHMuZ2V0RnVsbE5hbWUoKTt9LGdldEl0ZW1UZXh0SHRtbDpmdW5jdGlvbih0LHUsdil7aWYodil7cmV0dXJuIGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLnJlc29sdmVMaW5rQXR0cmlidXRlcyh0LmdldERlc2NyaXB0aW9uKCksdCk7fWVsc2V7cmV0dXJuIGFwaXZpZXdlci51aS5wYW5lbHMuSW5mb1BhbmVsLmNyZWF0ZURlc2NyaXB0aW9uSHRtbCh0LHQuZ2V0Q2xhc3MoKSx2KTt9fSxnZXRJdGVtVG9vbHRpcDpmdW5jdGlvbih3LHgpe2lmKHcuaXNBYnN0cmFjdCgpKXt2YXIgeT1mO31lbHNlIGlmKHcuaXNTdGF0aWMoKSl7dmFyIHk9ZDt9ZWxzZSBpZih3LmlzU2luZ2xldG9uKCkpe3ZhciB5PWc7fWVsc2V7dmFyIHk9ajt9c3dpdGNoKHcuZ2V0VHlwZSgpKXtjYXNlIGw6eSs9YjticmVhaztjYXNlIG06eSs9YzticmVhaztkZWZhdWx0OnkrPWE7YnJlYWs7fXJldHVybiB5O30saXRlbUhhc0RldGFpbHM6ZnVuY3Rpb24oeixBKXtyZXR1cm4gYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuZGVzY3JpcHRpb25IYXNEZXRhaWxzKHopO30sdXBkYXRlOmZ1bmN0aW9uKEIsQyl7aWYoIXRoaXMuZ2V0RWxlbWVudCgpKXtyZXR1cm47fXRoaXMuc2V0RG9jTm9kZShDKTt2YXIgRT1DLmdldENsYXNzZXMoKTt2YXIgRD1bXTt2YXIgRjtmb3IodmFyIGk9MDtpPEUubGVuZ3RoO2krKyl7Rj1FW2ldLmdldFR5cGUoKTtpZihGPT09ZXx8Rj09PWspe0Y9bjt9aWYoRj09PXRoaXMuZ2V0VHlwZSgpKXtELnB1c2goRVtpXSk7fX1pZihEJiZELmxlbmd0aD4wKXt0aGlzLl9zb3J0SXRlbXMoRCk7fXRoaXMuX2Rpc3BsYXlOb2RlcyhELEMpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0iUGFja2FnZSIsYT0iYXBpdmlld2VyLnVpLnBhbmVscy5QYWNrYWdlUGFuZWwiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6YXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwsbWVtYmVyczp7Z2V0SXRlbVR5cGVIdG1sOmZ1bmN0aW9uKGMpe3JldHVybiBhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVJdGVtTGlua0h0bWwoYy5nZXRGdWxsTmFtZSgpLG51bGwsZmFsc2UsdHJ1ZSk7fSxnZXRJdGVtVGl0bGVIdG1sOmZ1bmN0aW9uKGQpe3JldHVybiBkLmdldEZ1bGxOYW1lKCk7fSxnZXRJdGVtVGV4dEh0bWw6ZnVuY3Rpb24oZSxmLGcpe2lmKGcpe3JldHVybiBhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5yZXNvbHZlTGlua0F0dHJpYnV0ZXMoZS5nZXREZXNjcmlwdGlvbigpLGUpO31lbHNle3JldHVybiBhcGl2aWV3ZXIudWkucGFuZWxzLkluZm9QYW5lbC5jcmVhdGVEZXNjcmlwdGlvbkh0bWwoZSxlLmdldFBhY2thZ2UoKSxnKTt9fSxnZXRJdGVtVG9vbHRpcDpmdW5jdGlvbihoLGkpe3JldHVybiBiO30saXRlbUhhc0RldGFpbHM6ZnVuY3Rpb24oaixrKXtyZXR1cm4gYXBpdmlld2VyLnVpLnBhbmVscy5JbmZvUGFuZWwuZGVzY3JpcHRpb25IYXNEZXRhaWxzKGopO30sdXBkYXRlOmZ1bmN0aW9uKGwsbSl7aWYoIXRoaXMuZ2V0RWxlbWVudCgpKXtyZXR1cm47fXRoaXMuc2V0RG9jTm9kZShtKTt2YXIgbj1tLmdldFBhY2thZ2VzKCk7aWYobiYmbi5sZW5ndGg+MCl7dGhpcy5fc29ydEl0ZW1zKG4pO310aGlzLl9kaXNwbGF5Tm9kZXMobixtKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9ImFwaXZpZXdlci51aS50YWJ2aWV3LkNsYXNzUGFnZSI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDphcGl2aWV3ZXIudWkudGFidmlldy5BYnN0cmFjdFBhZ2UsbWVtYmVyczp7X2NyZWF0ZVZpZXdlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgYXBpdmlld2VyLnVpLkNsYXNzVmlld2VyKCk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBtPSJ2YWx1ZSIsbD0ic2VwYXJhdG9yLXZlcnRpY2FsIixrPSJfdGFiVmlldyIsaj0icW9veGRvbyIsaD0iX3BhY2thZ2VWaWV3ZXIiLGc9Il9zZWFyY2hWaWV3IixmPSJfdHJlZSIsZD0iX2RldGFpbExvYWRlciIsYz0iYXBpdmlld2VyLlZpZXdlciIsYj0iX2NsYXNzVmlld2VyIixhPSJ0cmVlIjtxeC5DbGFzcy5kZWZpbmUoYyx7ZXh0ZW5kOnF4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXgudWkuY29udGFpbmVyLkNvbXBvc2l0ZS5jYWxsKHRoaXMpO3RoaXMuX19TSD17fTt2YXIgcD1uZXcgcXgudWkubGF5b3V0LlZCb3g7cC5zZXRTZXBhcmF0b3IobCk7dGhpcy5zZXRMYXlvdXQocCk7dGhpcy5hZGQodGhpcy5fX1NRKCkpO3RoaXMuYWRkKHRoaXMuX19TTSgpKTt2YXIgbj1uZXcgYXBpdmlld2VyLnVpLlBhY2thZ2VUcmVlKCk7bi5zZXRJZChhKTt0aGlzLl9zZWFyY2hWaWV3PW5ldyBhcGl2aWV3ZXIudWkuU2VhcmNoVmlldygpO3ZhciBxPW5ldyBhcGl2aWV3ZXIudWkuTGVnZW5kVmlldygpO3ZhciByPXRoaXMuX19TTChuLHRoaXMuX3NlYXJjaFZpZXcscSk7dmFyIG89dGhpcy5fX1NOKCk7dGhpcy5hZGQodGhpcy5fX1NQKHIsbykse2ZsZXg6MX0pO30sbWVtYmVyczp7X19TSTpudWxsLF9fU0o6bnVsbCxfX1NIOm51bGwsX19TSzpudWxsLF9fU0w6ZnVuY3Rpb24ocyx0LHUpe3ZhciB2PW5ldyBxeC51aS5jb250YWluZXIuU3RhY2s7di5zZXRBcHBlYXJhbmNlKCJ0b2dnbGV2aWV3Iik7di5hZGQocyk7di5hZGQodCk7di5hZGQodSk7dGhpcy5fX1NLLmFkZExpc3RlbmVyKCJjaGFuZ2VTZWxlY3Rpb24iLGZ1bmN0aW9uKGUpe3ZhciB3PWUuZ2V0RGF0YSgpWzBdO3ZhciB4PXchPW51bGw/dy5nZXRVc2VyRGF0YSgidmFsdWUiKTpudWxsO3N3aXRjaCh4KXtjYXNlICJwYWNrYWdlcyI6di5zZXRTZWxlY3Rpb24oW3NdKTt2LnNob3coKTticmVhaztjYXNlICJzZWFyY2giOnYuc2V0U2VsZWN0aW9uKFt0XSk7di5zaG93KCk7cXgubGFuZy5GdW5jdGlvbi5kZWxheSh0aGlzLl9vblNob3dTZWFyY2gsMTAwLHRoaXMpO2JyZWFrO2Nhc2UgImxlZ2VuZCI6di5zZXRTZWxlY3Rpb24oW3VdKTt2LnNob3coKTticmVhaztkZWZhdWx0OnYuZXhjbHVkZSgpO319LHRoaXMpO3JldHVybiB2O30sX19TTTpmdW5jdGlvbigpe3ZhciB0b29sYmFyPW5ldyBxeC51aS50b29sYmFyLlRvb2xCYXI7dmFyIEI9bmV3IHF4LnVpLnRvb2xiYXIuUGFydDt0b29sYmFyLmFkZChCKTt0aGlzLl9fU0k9Qi50b0hhc2hDb2RlKCk7dmFyIEU9bmV3IHF4LnVpLnRvb2xiYXIuUmFkaW9CdXR0b24odGhpcy50cigiQ29udGVudCIpLCJpY29uLzIyL2FwcHMvdXRpbGl0aWVzLWRpY3Rpb25hcnkucG5nIik7RS5zZXRVc2VyRGF0YSgidmFsdWUiLCJwYWNrYWdlcyIpO0Uuc2V0VmFsdWUodHJ1ZSk7RS5zZXRUb29sVGlwVGV4dCh0aGlzLnRyKCJTaG93L2hpZGUgdGhlIHBhY2thZ2VzLiIpKTtCLmFkZChFKTt2YXIgSD1uZXcgcXgudWkudG9vbGJhci5SYWRpb0J1dHRvbih0aGlzLnRyKCJTZWFyY2giKSwiaWNvbi8yMi9hY3Rpb25zL2VkaXQtZmluZC5wbmciKTtILnNldFVzZXJEYXRhKCJ2YWx1ZSIsInNlYXJjaCIpO0guc2V0VG9vbFRpcFRleHQodGhpcy50cigiU2VhcmNoIGZvciBwYWNrYWdlcywgY2xhc3NlcyBhbmQgbWVtYmVycy4iKSk7Qi5hZGQoSCk7dmFyIHk9bmV3IHF4LnVpLnRvb2xiYXIuUmFkaW9CdXR0b24odGhpcy50cigiTGVnZW5kIiksImljb24vMjIvYXBwcy91dGlsaXRpZXMtaGVscC5wbmciKTt5LnNldFVzZXJEYXRhKCJ2YWx1ZSIsImxlZ2VuZCIpO3kuc2V0VG9vbFRpcFRleHQodGhpcy50cigiU2hvdy9oaWRlIHRoZSBsZWdlbmQuIikpO0IuYWRkKHkpO3ZhciB6PW5ldyBxeC51aS5mb3JtLlJhZGlvR3JvdXAoRSxILHkpO3ouc2V0QWxsb3dFbXB0eVNlbGVjdGlvbih0cnVlKTt0aGlzLl9fU0s9ejt0b29sYmFyLmFkZFNwYWNlcigpO3ZhciBCPW5ldyBxeC51aS50b29sYmFyLlBhcnQ7dG9vbGJhci5hZGQoQik7dmFyIEY9bmV3IHF4LnVpLnRvb2xiYXIuQ2hlY2tCb3godGhpcy50cigiUHJvcGVydGllcyIpLCJhcGl2aWV3ZXIvaW1hZ2UvcHJvcGVydHkxOC5naWYiKTtGLnNldElkKCJidG5fZXhwYW5kIik7Ri5zZXRWYWx1ZSh0cnVlKTtGLnNldFRvb2xUaXBUZXh0KHRoaXMudHIoIlNob3cvaGlkZSBhbGwgZ2VuZXJhdGVkIHByb3BlcnR5IG1ldGhvZHMuIikpO0IuYWRkKEYpO3ZhciBEPW5ldyBxeC51aS50b29sYmFyLkNoZWNrQm94KHRoaXMudHIoIkluaGVyaXRlZCIpLCJhcGl2aWV3ZXIvaW1hZ2UvbWV0aG9kX3B1YmxpY19pbmhlcml0ZWQxOC5naWYiKTtELnNldElkKCJidG5faW5oZXJpdGVkIik7RC5zZXRUb29sVGlwVGV4dCh0aGlzLnRyKCJTaG93L2hpZGUgaW5oZXJpdGVkIG1lbWJlcnMgb2YgdGhlIGN1cnJlbnQgY2xhc3MuIikpO0IuYWRkKEQpO3ZhciBBPW5ldyBxeC51aS50b29sYmFyLkNoZWNrQm94KHRoaXMudHIoIlByb3RlY3RlZCIpLCJhcGl2aWV3ZXIvaW1hZ2UvbWV0aG9kX3Byb3RlY3RlZDE4LmdpZiIpO0Euc2V0SWQoImJ0bl9wcm90ZWN0ZWQiKTtBLnNldFRvb2xUaXBUZXh0KHRoaXMudHIoIlNob3cvaGlkZSBwcm90ZWN0ZWQgbWVtYmVycyBvZiB0aGUgY3VycmVudCBjbGFzcy4iKSk7Qi5hZGQoQSk7dmFyIEc9bmV3IHF4LnVpLnRvb2xiYXIuQ2hlY2tCb3godGhpcy50cigiUHJpdmF0ZSIpLCJhcGl2aWV3ZXIvaW1hZ2UvbWV0aG9kX3ByaXZhdGUxOC5naWYiKTtHLnNldElkKCJidG5fcHJpdmF0ZSIpO0cuc2V0VG9vbFRpcFRleHQodGhpcy50cigiU2hvdy9oaWRlIHByaXZhdGUgbWVtYmVycyBvZiB0aGUgY3VycmVudCBjbGFzcy4iKSk7Qi5hZGQoRyk7dG9vbGJhci5zZXRPdmVyZmxvd0hhbmRsaW5nKHRydWUpO3ZhciBDPW5ldyBxeC51aS50b29sYmFyLk1lbnVCdXR0b24obnVsbCwiaWNvbi8yMi9hY3Rpb25zL21lZGlhLXNlZWstZm9yd2FyZC5wbmciKTtDLnNldEFwcGVhcmFuY2UoInRvb2xiYXItYnV0dG9uIik7dG9vbGJhci5hZGQoQyk7dG9vbGJhci5zZXRPdmVyZmxvd0luZGljYXRvcihDKTt0aGlzLl9fU0o9bmV3IHF4LnVpLm1lbnUuTWVudSgpO0Muc2V0TWVudSh0aGlzLl9fU0opO3Rvb2xiYXIuYWRkTGlzdGVuZXIoImhpZGVJdGVtIixmdW5jdGlvbihlKXt2YXIgST1lLmdldERhdGEoKTt2YXIgSj10aGlzLl9nZXRNZW51SXRlbXMoSSk7Zm9yKHZhciBpPTA7aTxKLmxlbmd0aDtpKyspe0pbaV0uc2V0VmlzaWJpbGl0eSgidmlzaWJsZSIpO319LHRoaXMpO3Rvb2xiYXIuYWRkTGlzdGVuZXIoInNob3dJdGVtIixmdW5jdGlvbihlKXt2YXIgSz1lLmdldERhdGEoKTt2YXIgTD10aGlzLl9nZXRNZW51SXRlbXMoSyk7Zm9yKHZhciBpPTA7aTxMLmxlbmd0aDtpKyspe0xbaV0uc2V0VmlzaWJpbGl0eSgiZXhjbHVkZWQiKTt9fSx0aGlzKTtyZXR1cm4gdG9vbGJhcjt9LF9nZXRNZW51SXRlbXM6ZnVuY3Rpb24oTSl7dmFyIE89TS5nZXRDaGlsZHJlbigpO3ZhciBQPVtdO2lmKE0udG9IYXNoQ29kZSgpPT09dGhpcy5fX1NJKXt2YXIgTj10aGlzLl9fU0hbTS50b0hhc2hDb2RlKCldO2lmKCFOKXtOPW5ldyBxeC51aS5tZW51LlNlcGFyYXRvcigpO3RoaXMuX19TSi5hZGRBdChOLDApO3RoaXMuX19TSFtNLnRvSGFzaENvZGUoKV09Tjt9UC5wdXNoKE4pO31mb3IodmFyIGk9Ty5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIFE9T1tpXTtOPXRoaXMuX19TSFtRLnRvSGFzaENvZGUoKV07aWYoIU4pe2lmKFEgaW5zdGFuY2VvZiBxeC51aS50b29sYmFyLlJhZGlvQnV0dG9uKXt2YXIgTj1uZXcgcXgudWkubWVudS5SYWRpb0J1dHRvbihRLmdldExhYmVsKCkpO31lbHNle049bmV3IHF4LnVpLm1lbnUuQ2hlY2tCb3goUS5nZXRMYWJlbCgpKTt9US5iaW5kKG0sTixtKTtOLmJpbmQobSxRLG0pO3RoaXMuX19TSi5hZGRBdChOLDApO3RoaXMuX19TSFtRLnRvSGFzaENvZGUoKV09Tjt9UC5wdXNoKE4pO31yZXR1cm4gUDt9LF9fU046ZnVuY3Rpb24oKXt2YXIgUj1uZXcgcXgudWkuY29udGFpbmVyLkNvbXBvc2l0ZShuZXcgcXgudWkubGF5b3V0LkNhbnZhcyk7Ui5nZXRDb250ZW50RWxlbWVudCgpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJjb250ZW50Iik7dGhpcy5fZGV0YWlsTG9hZGVyPW5ldyBxeC51aS5lbWJlZC5IdG1sKCc8ZGl2IHN0eWxlPSJwYWRkaW5nOjEwcHg7Ij48aDE+PHNtYWxsPnBsZWFzZSB3YWl0PC9zbWFsbD5Mb2FkaW5nIGRhdGEuLi48L2gxPjwvZGl2PicpO3RoaXMuX2RldGFpbExvYWRlci5nZXRDb250ZW50RWxlbWVudCgpLnNldEF0dHJpYnV0ZSgiaWQiLCJTcGxhc2hTY3JlZW4iKTt0aGlzLl9kZXRhaWxMb2FkZXIuc2V0QXBwZWFyYW5jZSgiZGV0YWlsdmlld2VyIik7dGhpcy5fZGV0YWlsTG9hZGVyLnNldElkKCJkZXRhaWxfbG9hZGVyIik7Ui5hZGQodGhpcy5fZGV0YWlsTG9hZGVyLHtlZGdlOjB9KTt0aGlzLl90YWJWaWV3PW5ldyBxeC51aS50YWJ2aWV3LlRhYlZpZXcoKTt0aGlzLl90YWJWaWV3LnNldElkKCJ0YWJWaWV3Iik7dGhpcy5fdGFiVmlldy5leGNsdWRlKCk7Ui5hZGQodGhpcy5fdGFiVmlldyx7ZWRnZTowfSk7cmV0dXJuIFI7fSxfX1NPOmZ1bmN0aW9uKHRvb2xiYXIsUyl7dmFyIFQ9bmV3IHF4LnVpLmNvbnRhaW5lci5Db21wb3NpdGU7VC5zZXRMYXlvdXQobmV3IHF4LnVpLmxheW91dC5WQm94KTtULmFkZCh0b29sYmFyKTtULmFkZChTLHtmbGV4OjF9KTtyZXR1cm4gVDt9LF9fU1A6ZnVuY3Rpb24oVSxWKXt2YXIgVz1uZXcgcXgudWkuc3BsaXRwYW5lLlBhbmUoImhvcml6b250YWwiKTtXLmFkZChVLDApO1cuYWRkKFYsMSk7cmV0dXJuIFc7fSxfX1NROmZ1bmN0aW9uKCl7dmFyIGJhPW5ldyBxeC51aS5sYXlvdXQuSEJveCgpO3ZhciBYPW5ldyBxeC51aS5jb250YWluZXIuQ29tcG9zaXRlKGJhKTtYLnNldEFwcGVhcmFuY2UoImFwcC1oZWFkZXIiKTt2YXIgYmI9bmV3IHF4LnVpLmJhc2ljLkxhYmVsKCJBUEkgRG9jdW1lbnRhdGlvbiIpO3ZhciBZPW5ldyBxeC51aS5iYXNpYy5MYWJlbCgicW9veGRvbyAiK3F4LmNvcmUuU2V0dGluZy5nZXQoInF4LnZlcnNpb24iKSk7WC5hZGQoYmIpO1guYWRkKG5ldyBxeC51aS5jb3JlLlNwYWNlcix7ZmxleDoxfSk7WC5hZGQoWSk7cmV0dXJuIFg7fSxfb25TaG93U2VhcmNoOmZ1bmN0aW9uKCl7dGhpcy5fc2VhcmNoVmlldy5zaW5wdXQuZm9jdXMoKTt9fSxzZXR0aW5nczp7ImFwaXZpZXdlci50aXRsZSI6aiwiYXBpdmlld2VyLmluaXRpYWxUcmVlRGVwdGgiOjF9LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fY2xhc3NUcmVlTm9kZUhhc2g9dGhpcy5fX1NLPW51bGw7dGhpcy5fZGlzcG9zZU9iamVjdHMoZixkLGIsaCxnLGspO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBuPSJfYXBwbHlMYXlvdXRDaGFuZ2UiLG09InRvcCIsaz0ibGVmdCIsaj0ibWlkZGxlIixoPSJEZWNvcmF0b3IiLGc9ImNlbnRlciIsZj0iX2FwcGx5UmV2ZXJzZWQiLGU9ImJvdHRvbSIsZD0icXgudWkubGF5b3V0LlZCb3giLGM9IkludGVnZXIiLGE9InJpZ2h0IixiPSJCb29sZWFuIjtxeC5DbGFzcy5kZWZpbmUoZCx7ZXh0ZW5kOnF4LnVpLmxheW91dC5BYnN0cmFjdCxjb25zdHJ1Y3Q6ZnVuY3Rpb24obyxwLHEpe3F4LnVpLmxheW91dC5BYnN0cmFjdC5jYWxsKHRoaXMpO2lmKG8pe3RoaXMuc2V0U3BhY2luZyhvKTt9aWYocCl7dGhpcy5zZXRBbGlnblkocCk7fWlmKHEpe3RoaXMuc2V0U2VwYXJhdG9yKHEpO319LHByb3BlcnRpZXM6e2FsaWduWTp7Y2hlY2s6W20saixlXSxpbml0Om0sYXBwbHk6bn0sYWxpZ25YOntjaGVjazpbayxnLGFdLGluaXQ6ayxhcHBseTpufSxzcGFjaW5nOntjaGVjazpjLGluaXQ6MCxhcHBseTpufSxzZXBhcmF0b3I6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZSxhcHBseTpufSxyZXZlcnNlZDp7Y2hlY2s6Yixpbml0OmZhbHNlLGFwcGx5OmZ9fSxtZW1iZXJzOntfX2VTOm51bGwsX19lVDpudWxsLF9fZVU6bnVsbCxfX2VWOm51bGwsX2FwcGx5UmV2ZXJzZWQ6ZnVuY3Rpb24oKXt0aGlzLl9pbnZhbGlkQ2hpbGRyZW5DYWNoZT10cnVlO3RoaXMuX2FwcGx5TGF5b3V0Q2hhbmdlKCk7fSxfX2VXOmZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fZ2V0TGF5b3V0Q2hpbGRyZW4oKTt2YXIgbGVuZ3RoPXcubGVuZ3RoO3ZhciBzPWZhbHNlO3ZhciByPXRoaXMuX19lUyYmdGhpcy5fX2VTLmxlbmd0aCE9bGVuZ3RoJiZ0aGlzLl9fZVQmJnRoaXMuX19lUzt2YXIgdTt2YXIgdD1yP3RoaXMuX19lUzpuZXcgQXJyYXkobGVuZ3RoKTt2YXIgdj1yP3RoaXMuX19lVDpuZXcgQXJyYXkobGVuZ3RoKTtpZih0aGlzLmdldFJldmVyc2VkKCkpe3c9dy5jb25jYXQoKS5yZXZlcnNlKCk7fWZvcih2YXIgaT0wO2k8bGVuZ3RoO2krKyl7dT13W2ldLmdldExheW91dFByb3BlcnRpZXMoKTtpZih1LmhlaWdodCE9bnVsbCl7dFtpXT1wYXJzZUZsb2F0KHUuaGVpZ2h0KS8xMDA7fWlmKHUuZmxleCE9bnVsbCl7dltpXT11LmZsZXg7cz10cnVlO31lbHNle3ZbaV09MDt9fWlmKCFyKXt0aGlzLl9fZVM9dDt0aGlzLl9fZVQ9djt9dGhpcy5fX2VVPXM7dGhpcy5fX2VWPXc7ZGVsZXRlIHRoaXMuX2ludmFsaWRDaGlsZHJlbkNhY2hlO30sdmVyaWZ5TGF5b3V0UHJvcGVydHk6bnVsbCxyZW5kZXJMYXlvdXQ6ZnVuY3Rpb24oeCx5KXtpZih0aGlzLl9pbnZhbGlkQ2hpbGRyZW5DYWNoZSl7dGhpcy5fX2VXKCk7fXZhciBGPXRoaXMuX19lVjt2YXIgbGVuZ3RoPUYubGVuZ3RoO3ZhciBQPXF4LnVpLmxheW91dC5VdGlsO3ZhciBPPXRoaXMuZ2V0U3BhY2luZygpO3ZhciBTPXRoaXMuZ2V0U2VwYXJhdG9yKCk7aWYoUyl7dmFyIEM9UC5jb21wdXRlVmVydGljYWxTZXBhcmF0b3JHYXBzKEYsTyxTKTt9ZWxzZXt2YXIgQz1QLmNvbXB1dGVWZXJ0aWNhbEdhcHMoRixPLHRydWUpO312YXIgaSxBLEIsSjt2YXIgSz1bXTt2YXIgUT1DO2ZvcihpPTA7aTxsZW5ndGg7aSs9MSl7Sj10aGlzLl9fZVNbaV07Qj1KIT1udWxsP01hdGguZmxvb3IoKHktQykqSik6RltpXS5nZXRTaXplSGludCgpLmhlaWdodDtLLnB1c2goQik7USs9Qjt9aWYodGhpcy5fX2VVJiZRIT15KXt2YXIgSD17fTt2YXIgTixSO2ZvcihpPTA7aTxsZW5ndGg7aSs9MSl7Tj10aGlzLl9fZVRbaV07aWYoTj4wKXtHPUZbaV0uZ2V0U2l6ZUhpbnQoKTtIW2ldPXttaW46Ry5taW5IZWlnaHQsdmFsdWU6S1tpXSxtYXg6Ry5tYXhIZWlnaHQsZmxleDpOfTt9fXZhciBEPVAuY29tcHV0ZUZsZXhPZmZzZXRzKEgseSxRKTtmb3IoaSBpbiBEKXtSPURbaV0ub2Zmc2V0O0tbaV0rPVI7USs9Ujt9fXZhciB0b3A9RlswXS5nZXRNYXJnaW5Ub3AoKTtpZihRPHkmJnRoaXMuZ2V0QWxpZ25ZKCkhPW0pe3RvcD15LVE7aWYodGhpcy5nZXRBbGlnblkoKT09PWope3RvcD1NYXRoLnJvdW5kKHRvcC8yKTt9fXZhciBHLFUsTCxCLEksTSxFO3RoaXMuX2NsZWFyU2VwYXJhdG9ycygpO2lmKFMpe3ZhciBUPXF4LnRoZW1lLm1hbmFnZXIuRGVjb3JhdGlvbi5nZXRJbnN0YW5jZSgpLnJlc29sdmUoUykuZ2V0SW5zZXRzKCk7dmFyIHo9VC50b3ArVC5ib3R0b207fWZvcihpPTA7aTxsZW5ndGg7aSs9MSl7QT1GW2ldO0I9S1tpXTtHPUEuZ2V0U2l6ZUhpbnQoKTtNPUEuZ2V0TWFyZ2luTGVmdCgpO0U9QS5nZXRNYXJnaW5SaWdodCgpO0w9TWF0aC5tYXgoRy5taW5XaWR0aCxNYXRoLm1pbih4LU0tRSxHLm1heFdpZHRoKSk7VT1QLmNvbXB1dGVIb3Jpem9udGFsQWxpZ25PZmZzZXQoQS5nZXRBbGlnblgoKXx8dGhpcy5nZXRBbGlnblgoKSxMLHgsTSxFKTtpZihpPjApe2lmKFMpe3RvcCs9SStPO3RoaXMuX3JlbmRlclNlcGFyYXRvcihTLHt0b3A6dG9wLGxlZnQ6MCxoZWlnaHQ6eix3aWR0aDp4fSk7dG9wKz16K08rQS5nZXRNYXJnaW5Ub3AoKTt9ZWxzZXt0b3ArPVAuY29sbGFwc2VNYXJnaW5zKE8sSSxBLmdldE1hcmdpblRvcCgpKTt9fUEucmVuZGVyTGF5b3V0KFUsdG9wLEwsQik7dG9wKz1CO0k9QS5nZXRNYXJnaW5Cb3R0b20oKTt9fSxfY29tcHV0ZVNpemVIaW50OmZ1bmN0aW9uKCl7aWYodGhpcy5faW52YWxpZENoaWxkcmVuQ2FjaGUpe3RoaXMuX19lVygpO312YXIgYmM9cXgudWkubGF5b3V0LlV0aWw7dmFyIGJrPXRoaXMuX19lVjt2YXIgWD0wLGJiPTAsYmE9MDt2YXIgVj0wLGJkPTA7dmFyIGJoLFcsYmo7Zm9yKHZhciBpPTAsbD1iay5sZW5ndGg7aTxsO2krPTEpe2JoPWJrW2ldO1c9YmguZ2V0U2l6ZUhpbnQoKTtiYis9Vy5oZWlnaHQ7dmFyIGJnPXRoaXMuX19lVFtpXTt2YXIgWT10aGlzLl9fZVNbaV07aWYoYmcpe1grPVcubWluSGVpZ2h0O31lbHNlIGlmKFkpe2JhPU1hdGgubWF4KGJhLE1hdGgucm91bmQoVy5taW5IZWlnaHQvWSkpO31lbHNle1grPVcuaGVpZ2h0O31iaj1iaC5nZXRNYXJnaW5MZWZ0KCkrYmguZ2V0TWFyZ2luUmlnaHQoKTtpZigoVy53aWR0aCtiaik+YmQpe2JkPVcud2lkdGgrYmo7fWlmKChXLm1pbldpZHRoK2JqKT5WKXtWPVcubWluV2lkdGgrYmo7fX1YKz1iYTt2YXIgYmY9dGhpcy5nZXRTcGFjaW5nKCk7dmFyIGJpPXRoaXMuZ2V0U2VwYXJhdG9yKCk7aWYoYmkpe3ZhciBiZT1iYy5jb21wdXRlVmVydGljYWxTZXBhcmF0b3JHYXBzKGJrLGJmLGJpKTt9ZWxzZXt2YXIgYmU9YmMuY29tcHV0ZVZlcnRpY2FsR2FwcyhiayxiZix0cnVlKTt9cmV0dXJuIHttaW5IZWlnaHQ6WCtiZSxoZWlnaHQ6YmIrYmUsbWluV2lkdGg6Vix3aWR0aDpiZH07fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9fZVM9dGhpcy5fX2VUPXRoaXMuX19lVj1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJxeC5uYXRpdmVTY3JvbGxCYXJzIixhPSJxeC51aS5jb3JlLnNjcm9sbC5NU2Nyb2xsQmFyRmFjdG9yeSI7cXguY29yZS5TZXR0aW5nLmRlZmluZShiLGZhbHNlKTtxeC5NaXhpbi5kZWZpbmUoYSx7bWVtYmVyczp7X2NyZWF0ZVNjcm9sbEJhcjpmdW5jdGlvbihjKXtpZihxeC5jb3JlLlNldHRpbmcuZ2V0KGIpKXtyZXR1cm4gbmV3IHF4LnVpLmNvcmUuc2Nyb2xsLk5hdGl2ZVNjcm9sbEJhcihjKTt9ZWxzZXtyZXR1cm4gbmV3IHF4LnVpLmNvcmUuc2Nyb2xsLlNjcm9sbEJhcihjKTt9fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSJzY3JvbGxiYXIteSIsaj0ic2Nyb2xsYmFyLXgiLGk9InBhbmUiLGg9ImF1dG8iLGc9ImNvcm5lciIsZj0ic2Nyb2xsYmFyLSIsZD0ib24iLGM9Il9jb21wdXRlU2Nyb2xsYmFycyIsYj0iZ2V0RG9jdW1lbnQiLGE9ImNoYW5nZVZpc2liaWxpdHkiLEQ9Im9mZiIsQz0ieCIsQj0ic2Nyb2xsIixBPSJ0b3VjaG1vdmUiLHo9InNjcm9sbFkiLHk9IkxlZnQiLHg9Im1vdXNld2hlZWwiLHc9InNjcm9sbGJhclgiLHY9InNjcm9sbGFyZWEiLHU9InkiLHI9InZlcnRpY2FsIixzPSJzY3JvbGxYIixwPSJ0b3VjaHN0YXJ0IixxPSJob3Jpem9udGFsIixuPSJxeC51aS5jb3JlLnNjcm9sbC5BYnN0cmFjdFNjcm9sbEFyZWEiLG89ImFic3RyYWN0IixsPSJ1cGRhdGUiLG09InNjcm9sbGJhclkiLHQ9IlRvcCI7cXguQ2xhc3MuZGVmaW5lKG4se2V4dGVuZDpxeC51aS5jb3JlLldpZGdldCxpbmNsdWRlOnF4LnVpLmNvcmUuc2Nyb2xsLk1TY3JvbGxCYXJGYWN0b3J5LHR5cGU6byxjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC51aS5jb3JlLldpZGdldC5jYWxsKHRoaXMpO3ZhciBFPW5ldyBxeC51aS5sYXlvdXQuR3JpZCgpO0Uuc2V0Q29sdW1uRmxleCgwLDEpO0Uuc2V0Um93RmxleCgwLDEpO3RoaXMuX3NldExheW91dChFKTt0aGlzLmFkZExpc3RlbmVyKHgsdGhpcy5fb25Nb3VzZVdoZWVsLHRoaXMpO2lmKHF4LmJvbS5jbGllbnQuRmVhdHVyZS5UT1VDSCl7dGhpcy5hZGRMaXN0ZW5lcihBLHRoaXMuX29uVG91Y2hNb3ZlLHRoaXMpO3RoaXMuYWRkTGlzdGVuZXIocCxmdW5jdGlvbigpe3RoaXMuX19xUD17IngiOjAsInkiOjB9O30sdGhpcyk7dGhpcy5fX3FQPXt9O3RoaXMuX19xUT17fTt9fSxwcm9wZXJ0aWVzOnthcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0OnZ9LHdpZHRoOntyZWZpbmU6dHJ1ZSxpbml0OjEwMH0saGVpZ2h0OntyZWZpbmU6dHJ1ZSxpbml0OjIwMH0sc2Nyb2xsYmFyWDp7Y2hlY2s6W2gsZCxEXSxpbml0OmgsdGhlbWVhYmxlOnRydWUsYXBwbHk6Y30sc2Nyb2xsYmFyWTp7Y2hlY2s6W2gsZCxEXSxpbml0OmgsdGhlbWVhYmxlOnRydWUsYXBwbHk6Y30sc2Nyb2xsYmFyOntncm91cDpbdyxtXX19LG1lbWJlcnM6e19fcVA6bnVsbCxfX3FROm51bGwsX2NyZWF0ZUNoaWxkQ29udHJvbEltcGw6ZnVuY3Rpb24oRixHKXt2YXIgSDtzd2l0Y2goRil7Y2FzZSBpOkg9bmV3IHF4LnVpLmNvcmUuc2Nyb2xsLlNjcm9sbFBhbmUoKTtILmFkZExpc3RlbmVyKGwsdGhpcy5fY29tcHV0ZVNjcm9sbGJhcnMsdGhpcyk7SC5hZGRMaXN0ZW5lcihzLHRoaXMuX29uU2Nyb2xsUGFuZVgsdGhpcyk7SC5hZGRMaXN0ZW5lcih6LHRoaXMuX29uU2Nyb2xsUGFuZVksdGhpcyk7dGhpcy5fYWRkKEgse3JvdzowLGNvbHVtbjowfSk7YnJlYWs7Y2FzZSBqOkg9dGhpcy5fY3JlYXRlU2Nyb2xsQmFyKHEpO0guc2V0TWluV2lkdGgoMCk7SC5leGNsdWRlKCk7SC5hZGRMaXN0ZW5lcihCLHRoaXMuX29uU2Nyb2xsQmFyWCx0aGlzKTtILmFkZExpc3RlbmVyKGEsdGhpcy5fb25DaGFuZ2VTY3JvbGxiYXJYVmlzaWJpbGl0eSx0aGlzKTt0aGlzLl9hZGQoSCx7cm93OjEsY29sdW1uOjB9KTticmVhaztjYXNlIGs6SD10aGlzLl9jcmVhdGVTY3JvbGxCYXIocik7SC5zZXRNaW5IZWlnaHQoMCk7SC5leGNsdWRlKCk7SC5hZGRMaXN0ZW5lcihCLHRoaXMuX29uU2Nyb2xsQmFyWSx0aGlzKTtILmFkZExpc3RlbmVyKGEsdGhpcy5fb25DaGFuZ2VTY3JvbGxiYXJZVmlzaWJpbGl0eSx0aGlzKTt0aGlzLl9hZGQoSCx7cm93OjAsY29sdW1uOjF9KTticmVhaztjYXNlIGc6SD1uZXcgcXgudWkuY29yZS5XaWRnZXQoKTtILnNldFdpZHRoKDApO0guc2V0SGVpZ2h0KDApO0guZXhjbHVkZSgpO3RoaXMuX2FkZChILHtyb3c6MSxjb2x1bW46MX0pO2JyZWFrO31yZXR1cm4gSHx8cXgudWkuY29yZS5XaWRnZXQucHJvdG90eXBlLl9jcmVhdGVDaGlsZENvbnRyb2xJbXBsLmNhbGwodGhpcyxGKTt9LGdldFBhbmVTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250cm9sKGkpLmdldElubmVyU2l6ZSgpO30sZ2V0SXRlbVRvcDpmdW5jdGlvbihJKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRyb2woaSkuZ2V0SXRlbVRvcChJKTt9LGdldEl0ZW1Cb3R0b206ZnVuY3Rpb24oSil7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250cm9sKGkpLmdldEl0ZW1Cb3R0b20oSik7fSxnZXRJdGVtTGVmdDpmdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRyb2woaSkuZ2V0SXRlbUxlZnQoSyk7fSxnZXRJdGVtUmlnaHQ6ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250cm9sKGkpLmdldEl0ZW1SaWdodChMKTt9LHNjcm9sbFRvWDpmdW5jdGlvbihNKXtxeC51aS5jb3JlLnF1ZXVlLk1hbmFnZXIuZmx1c2goKTt0aGlzLmdldENoaWxkQ29udHJvbChqKS5zY3JvbGxUbyhNKTt9LHNjcm9sbEJ5WDpmdW5jdGlvbihOKXtxeC51aS5jb3JlLnF1ZXVlLk1hbmFnZXIuZmx1c2goKTt0aGlzLmdldENoaWxkQ29udHJvbChqKS5zY3JvbGxCeShOKTt9LGdldFNjcm9sbFg6ZnVuY3Rpb24oKXt2YXIgTz10aGlzLmdldENoaWxkQ29udHJvbChqLHRydWUpO3JldHVybiBPP08uZ2V0UG9zaXRpb24oKTowO30sc2Nyb2xsVG9ZOmZ1bmN0aW9uKFApe3F4LnVpLmNvcmUucXVldWUuTWFuYWdlci5mbHVzaCgpO3RoaXMuZ2V0Q2hpbGRDb250cm9sKGspLnNjcm9sbFRvKFApO30sc2Nyb2xsQnlZOmZ1bmN0aW9uKFEpe3F4LnVpLmNvcmUucXVldWUuTWFuYWdlci5mbHVzaCgpO3RoaXMuZ2V0Q2hpbGRDb250cm9sKGspLnNjcm9sbEJ5KFEpO30sZ2V0U2Nyb2xsWTpmdW5jdGlvbigpe3ZhciBSPXRoaXMuZ2V0Q2hpbGRDb250cm9sKGssdHJ1ZSk7cmV0dXJuIFI/Ui5nZXRQb3NpdGlvbigpOjA7fSxfb25TY3JvbGxCYXJYOmZ1bmN0aW9uKGUpe3RoaXMuZ2V0Q2hpbGRDb250cm9sKGkpLnNjcm9sbFRvWChlLmdldERhdGEoKSk7fSxfb25TY3JvbGxCYXJZOmZ1bmN0aW9uKGUpe3RoaXMuZ2V0Q2hpbGRDb250cm9sKGkpLnNjcm9sbFRvWShlLmdldERhdGEoKSk7fSxfb25TY3JvbGxQYW5lWDpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRvWChlLmdldERhdGEoKSk7fSxfb25TY3JvbGxQYW5lWTpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRvWShlLmdldERhdGEoKSk7fSxfb25Nb3VzZVdoZWVsOmZ1bmN0aW9uKGUpe3ZhciBUPXRoaXMuX2lzQ2hpbGRDb250cm9sVmlzaWJsZShqKTt2YXIgVT10aGlzLl9pc0NoaWxkQ29udHJvbFZpc2libGUoayk7dmFyIFM9KFUpP3RoaXMuZ2V0Q2hpbGRDb250cm9sKGssdHJ1ZSk6KFQ/dGhpcy5nZXRDaGlsZENvbnRyb2woaix0cnVlKTpudWxsKTtpZihTKXtTLnNjcm9sbEJ5U3RlcHMoZS5nZXRXaGVlbERlbHRhKCkpO2Uuc3RvcCgpO319LF9vblRvdWNoTW92ZTpmdW5jdGlvbihlKXt0aGlzLl9vblRvdWNoTW92ZURpcmVjdGlvbmFsKEMsZSk7dGhpcy5fb25Ub3VjaE1vdmVEaXJlY3Rpb25hbCh1LGUpO2Uuc3RvcCgpO30sX29uVG91Y2hNb3ZlRGlyZWN0aW9uYWw6ZnVuY3Rpb24oVixlKXt2YXIgVz0oVj09Qz95OnQpO3ZhciBZPXRoaXMuZ2V0Q2hpbGRDb250cm9sKGYrVix0cnVlKTt2YXIgYmE9dGhpcy5faXNDaGlsZENvbnRyb2xWaXNpYmxlKGYrVik7aWYoYmEmJlkpe2lmKHRoaXMuX19xUFtWXT09MCl7dmFyIFg9MDt9ZWxzZXt2YXIgWD0tKGVbYitXXSgpLXRoaXMuX19xUFtWXSk7fXRoaXMuX19xUFtWXT1lW2IrV10oKTtZLnNjcm9sbEJ5KFgpO2lmKHRoaXMuX19xUVtWXSl7Y2xlYXJUaW1lb3V0KHRoaXMuX19xUVtWXSk7dGhpcy5fX3FRW1ZdPW51bGw7fXRoaXMuX19xUVtWXT1zZXRUaW1lb3V0KHF4LmxhbmcuRnVuY3Rpb24uYmluZChmdW5jdGlvbihiYil7dGhpcy5fX3FSKGJiLFYpO30sdGhpcyxYKSwxMDApO319LF9fcVI6ZnVuY3Rpb24oYmMsYmQpe3RoaXMuX19xUVtiZF09bnVsbDt2YXIgYmY9dGhpcy5faXNDaGlsZENvbnRyb2xWaXNpYmxlKGYrYmQpO2lmKGJjPT0wfHwhYmYpe3JldHVybjt9aWYoYmM+MCl7YmM9TWF0aC5tYXgoMCxiYy0zKTt9ZWxzZXtiYz1NYXRoLm1pbigwLGJjKzMpO310aGlzLl9fcVFbYmRdPXNldFRpbWVvdXQocXgubGFuZy5GdW5jdGlvbi5iaW5kKGZ1bmN0aW9uKGJnLGJoKXt0aGlzLl9fcVIoYmcsYmgpO30sdGhpcyxiYyxiZCksMjApO3ZhciBiZT10aGlzLmdldENoaWxkQ29udHJvbChmK2JkLHRydWUpO2JlLnNjcm9sbEJ5KGJjKTt9LF9vbkNoYW5nZVNjcm9sbGJhclhWaXNpYmlsaXR5OmZ1bmN0aW9uKGUpe3ZhciBiaT10aGlzLl9pc0NoaWxkQ29udHJvbFZpc2libGUoaik7dmFyIGJqPXRoaXMuX2lzQ2hpbGRDb250cm9sVmlzaWJsZShrKTtpZighYmkpe3RoaXMuc2Nyb2xsVG9YKDApO31iaSYmYmo/dGhpcy5fc2hvd0NoaWxkQ29udHJvbChnKTp0aGlzLl9leGNsdWRlQ2hpbGRDb250cm9sKGcpO30sX29uQ2hhbmdlU2Nyb2xsYmFyWVZpc2liaWxpdHk6ZnVuY3Rpb24oZSl7dmFyIGJrPXRoaXMuX2lzQ2hpbGRDb250cm9sVmlzaWJsZShqKTt2YXIgYmw9dGhpcy5faXNDaGlsZENvbnRyb2xWaXNpYmxlKGspO2lmKCFibCl7dGhpcy5zY3JvbGxUb1koMCk7fWJrJiZibD90aGlzLl9zaG93Q2hpbGRDb250cm9sKGcpOnRoaXMuX2V4Y2x1ZGVDaGlsZENvbnRyb2woZyk7fSxfY29tcHV0ZVNjcm9sbGJhcnM6ZnVuY3Rpb24oKXt2YXIgYnM9dGhpcy5nZXRDaGlsZENvbnRyb2woaSk7dmFyIGNvbnRlbnQ9YnMuZ2V0Q2hpbGRyZW4oKVswXTtpZighY29udGVudCl7dGhpcy5fZXhjbHVkZUNoaWxkQ29udHJvbChqKTt0aGlzLl9leGNsdWRlQ2hpbGRDb250cm9sKGspO3JldHVybjt9dmFyIGJtPXRoaXMuZ2V0SW5uZXJTaXplKCk7dmFyIGJyPWJzLmdldElubmVyU2l6ZSgpO3ZhciBicD1icy5nZXRTY3JvbGxTaXplKCk7aWYoIWJyfHwhYnApe3JldHVybjt9dmFyIGJ0PXRoaXMuZ2V0U2Nyb2xsYmFyWCgpO3ZhciBidT10aGlzLmdldFNjcm9sbGJhclkoKTtpZihidD09PWgmJmJ1PT09aCl7dmFyIGJxPWJwLndpZHRoPmJtLndpZHRoO3ZhciBidj1icC5oZWlnaHQ+Ym0uaGVpZ2h0O2lmKChicXx8YnYpJiYhKGJxJiZidikpe2lmKGJxKXtidj1icC5oZWlnaHQ+YnIuaGVpZ2h0O31lbHNlIGlmKGJ2KXticT1icC53aWR0aD5ici53aWR0aDt9fX1lbHNle3ZhciBicT1idD09PWQ7dmFyIGJ2PWJ1PT09ZDtpZihicC53aWR0aD4oYnE/YnIud2lkdGg6Ym0ud2lkdGgpJiZidD09PWgpe2JxPXRydWU7fWlmKGJwLmhlaWdodD4oYnE/YnIuaGVpZ2h0OmJtLmhlaWdodCkmJmJ1PT09aCl7YnY9dHJ1ZTt9fWlmKGJxKXt2YXIgYm89dGhpcy5nZXRDaGlsZENvbnRyb2woaik7Ym8uc2hvdygpO2JvLnNldE1heGltdW0oTWF0aC5tYXgoMCxicC53aWR0aC1ici53aWR0aCkpO2JvLnNldEtub2JGYWN0b3IoKGJwLndpZHRoPT09MCk/MDpici53aWR0aC9icC53aWR0aCk7fWVsc2V7dGhpcy5fZXhjbHVkZUNoaWxkQ29udHJvbChqKTt9aWYoYnYpe3ZhciBibj10aGlzLmdldENoaWxkQ29udHJvbChrKTtibi5zaG93KCk7Ym4uc2V0TWF4aW11bShNYXRoLm1heCgwLGJwLmhlaWdodC1ici5oZWlnaHQpKTtibi5zZXRLbm9iRmFjdG9yKChicC5oZWlnaHQ9PT0wKT8wOmJyLmhlaWdodC9icC5oZWlnaHQpO31lbHNle3RoaXMuX2V4Y2x1ZGVDaGlsZENvbnRyb2woayk7fX19fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgcD0iSW50ZWdlciIsbz0iX2FwcGx5Q29udGVudFBhZGRpbmciLG49InJlc2V0UGFkZGluZ1JpZ2h0IixtPSJzZXRQYWRkaW5nQm90dG9tIixsPSJyZXNldFBhZGRpbmdUb3AiLGs9InF4LnVpLmNvcmUuTUNvbnRlbnRQYWRkaW5nIixqPSJyZXNldFBhZGRpbmdMZWZ0IixpPSJzZXRQYWRkaW5nVG9wIixoPSJzZXRQYWRkaW5nUmlnaHQiLGc9InJlc2V0UGFkZGluZ0JvdHRvbSIsYz0iY29udGVudFBhZGRpbmdMZWZ0IixmPSJzZXRQYWRkaW5nTGVmdCIsZT0iY29udGVudFBhZGRpbmdUb3AiLGI9InNob3J0aGFuZCIsYT0iY29udGVudFBhZGRpbmdSaWdodCIsZD0iY29udGVudFBhZGRpbmdCb3R0b20iO3F4Lk1peGluLmRlZmluZShrLHtwcm9wZXJ0aWVzOntjb250ZW50UGFkZGluZ1RvcDp7Y2hlY2s6cCxpbml0OjAsYXBwbHk6byx0aGVtZWFibGU6dHJ1ZX0sY29udGVudFBhZGRpbmdSaWdodDp7Y2hlY2s6cCxpbml0OjAsYXBwbHk6byx0aGVtZWFibGU6dHJ1ZX0sY29udGVudFBhZGRpbmdCb3R0b206e2NoZWNrOnAsaW5pdDowLGFwcGx5Om8sdGhlbWVhYmxlOnRydWV9LGNvbnRlbnRQYWRkaW5nTGVmdDp7Y2hlY2s6cCxpbml0OjAsYXBwbHk6byx0aGVtZWFibGU6dHJ1ZX0sY29udGVudFBhZGRpbmc6e2dyb3VwOltlLGEsZCxjXSxtb2RlOmIsdGhlbWVhYmxlOnRydWV9fSxtZW1iZXJzOntfX2tWOntjb250ZW50UGFkZGluZ1RvcDppLGNvbnRlbnRQYWRkaW5nUmlnaHQ6aCxjb250ZW50UGFkZGluZ0JvdHRvbTptLGNvbnRlbnRQYWRkaW5nTGVmdDpmfSxfX2tXOntjb250ZW50UGFkZGluZ1RvcDpsLGNvbnRlbnRQYWRkaW5nUmlnaHQ6bixjb250ZW50UGFkZGluZ0JvdHRvbTpnLGNvbnRlbnRQYWRkaW5nTGVmdDpqfSxfYXBwbHlDb250ZW50UGFkZGluZzpmdW5jdGlvbihxLHIsbmFtZSl7dmFyIHM9dGhpcy5fZ2V0Q29udGVudFBhZGRpbmdUYXJnZXQoKTtpZihxPT1udWxsKXt2YXIgdD10aGlzLl9fa1dbbmFtZV07c1t0XSgpO31lbHNle3ZhciB1PXRoaXMuX19rVltuYW1lXTtzW3VdKHEpO319fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIHY9InNpbmdsZSIsdT0iQm9vbGVhbiIsdD0ib25lIixzPSJjaGFuZ2VTZWxlY3Rpb24iLHI9Il9fbnQiLHE9Im1vdXNldXAiLHA9Im1vdXNlZG93biIsbz0ibG9zZWNhcHR1cmUiLG49Im11bHRpIixtPSJfYXBwbHlRdWlja1NlbGVjdGlvbiIsZD0ibW91c2VvdmVyIixsPSJfYXBwbHlTZWxlY3Rpb25Nb2RlIixoPSJfYXBwbHlEcmFnU2VsZWN0aW9uIixjPSJxeC51aS5jb3JlLk1NdWx0aVNlbGVjdGlvbkhhbmRsaW5nIixiPSJyZW1vdmVJdGVtIixnPSJrZXlwcmVzcyIsZj0icXguZXZlbnQudHlwZS5EYXRhIixqPSJhZGRJdGVtIixhPSJhZGRpdGl2ZSIsaz0ibW91c2Vtb3ZlIjtxeC5NaXhpbi5kZWZpbmUoYyx7Y29uc3RydWN0OmZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5TRUxFQ1RJT05fTUFOQUdFUjt2YXIgdz10aGlzLl9fbnQ9bmV3IHgodGhpcyk7dGhpcy5hZGRMaXN0ZW5lcihwLHcuaGFuZGxlTW91c2VEb3duLHcpO3RoaXMuYWRkTGlzdGVuZXIocSx3LmhhbmRsZU1vdXNlVXAsdyk7dGhpcy5hZGRMaXN0ZW5lcihkLHcuaGFuZGxlTW91c2VPdmVyLHcpO3RoaXMuYWRkTGlzdGVuZXIoayx3LmhhbmRsZU1vdXNlTW92ZSx3KTt0aGlzLmFkZExpc3RlbmVyKG8sdy5oYW5kbGVMb3NlQ2FwdHVyZSx3KTt0aGlzLmFkZExpc3RlbmVyKGcsdy5oYW5kbGVLZXlQcmVzcyx3KTt0aGlzLmFkZExpc3RlbmVyKGosdy5oYW5kbGVBZGRJdGVtLHcpO3RoaXMuYWRkTGlzdGVuZXIoYix3LmhhbmRsZVJlbW92ZUl0ZW0sdyk7dy5hZGRMaXN0ZW5lcihzLHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlLHRoaXMpO30sZXZlbnRzOnsiY2hhbmdlU2VsZWN0aW9uIjpmfSxwcm9wZXJ0aWVzOntzZWxlY3Rpb25Nb2RlOntjaGVjazpbdixuLGEsdF0saW5pdDp2LGFwcGx5Omx9LGRyYWdTZWxlY3Rpb246e2NoZWNrOnUsaW5pdDpmYWxzZSxhcHBseTpofSxxdWlja1NlbGVjdGlvbjp7Y2hlY2s6dSxpbml0OmZhbHNlLGFwcGx5Om19fSxtZW1iZXJzOntfX250Om51bGwsc2VsZWN0QWxsOmZ1bmN0aW9uKCl7dGhpcy5fX250LnNlbGVjdEFsbCgpO30saXNTZWxlY3RlZDpmdW5jdGlvbih5KXtpZighcXgudWkuY29yZS5XaWRnZXQuY29udGFpbnModGhpcyx5KSl7dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgdGVzdCBpZiAiK3krIiBpcyBzZWxlY3RlZCwgYmVjYXVzZSBpdCBpcyBub3QgYSBjaGlsZCBlbGVtZW50ISIpO31yZXR1cm4gdGhpcy5fX250LmlzSXRlbVNlbGVjdGVkKHkpO30sYWRkVG9TZWxlY3Rpb246ZnVuY3Rpb24oeil7aWYoIXF4LnVpLmNvcmUuV2lkZ2V0LmNvbnRhaW5zKHRoaXMseikpe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGFkZCArICIreisiIHRvIHNlbGVjdGlvbiwgYmVjYXVzZSBpdCBpcyBub3QgYSBjaGlsZCBlbGVtZW50ISIpO310aGlzLl9fbnQuYWRkSXRlbSh6KTt9LHJlbW92ZUZyb21TZWxlY3Rpb246ZnVuY3Rpb24oQSl7aWYoIXF4LnVpLmNvcmUuV2lkZ2V0LmNvbnRhaW5zKHRoaXMsQSkpe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHJlbW92ZSAiK0ErIiBmcm9tIHNlbGVjdGlvbiwgYmVjYXVzZSBpdCBpcyBub3QgYSBjaGlsZCBlbGVtZW50ISIpO310aGlzLl9fbnQucmVtb3ZlSXRlbShBKTt9LHNlbGVjdFJhbmdlOmZ1bmN0aW9uKEIsQyl7dGhpcy5fX250LnNlbGVjdEl0ZW1SYW5nZShCLEMpO30scmVzZXRTZWxlY3Rpb246ZnVuY3Rpb24oKXt0aGlzLl9fbnQuY2xlYXJTZWxlY3Rpb24oKTt9LHNldFNlbGVjdGlvbjpmdW5jdGlvbihEKXtmb3IodmFyIGk9MDtpPEQubGVuZ3RoO2krKyl7aWYoIXF4LnVpLmNvcmUuV2lkZ2V0LmNvbnRhaW5zKHRoaXMsRFtpXSkpe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHNlbGVjdCAiK0RbaV0rIiwgYmVjYXVzZSBpdCBpcyBub3QgYSBjaGlsZCBlbGVtZW50ISIpO319aWYoRC5sZW5ndGg9PT0wKXt0aGlzLnJlc2V0U2VsZWN0aW9uKCk7fWVsc2V7dmFyIEU9dGhpcy5nZXRTZWxlY3Rpb24oKTtpZighcXgubGFuZy5BcnJheS5lcXVhbHMoRSxEKSl7dGhpcy5fX250LnJlcGxhY2VTZWxlY3Rpb24oRCk7fX19LGdldFNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbnQuZ2V0U2VsZWN0aW9uKCk7fSxnZXRTb3J0ZWRTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX250LmdldFNvcnRlZFNlbGVjdGlvbigpO30saXNTZWxlY3Rpb25FbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbnQuaXNTZWxlY3Rpb25FbXB0eSgpO30sZ2V0U2VsZWN0aW9uQ29udGV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbnQuZ2V0U2VsZWN0aW9uQ29udGV4dCgpO30sX2dldE1hbmFnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX250O30sZ2V0U2VsZWN0YWJsZXM6ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuX19udC5nZXRTZWxlY3RhYmxlcyhGKTt9LGludmVydFNlbGVjdGlvbjpmdW5jdGlvbigpe3RoaXMuX19udC5pbnZlcnRTZWxlY3Rpb24oKTt9LF9nZXRMZWFkSXRlbTpmdW5jdGlvbigpe3ZhciBHPXRoaXMuX19udC5nZXRNb2RlKCk7aWYoRz09PXZ8fEc9PT10KXtyZXR1cm4gdGhpcy5fX250LmdldFNlbGVjdGVkSXRlbSgpO31lbHNle3JldHVybiB0aGlzLl9fbnQuZ2V0TGVhZEl0ZW0oKTt9fSxfYXBwbHlTZWxlY3Rpb25Nb2RlOmZ1bmN0aW9uKEgsSSl7dGhpcy5fX250LnNldE1vZGUoSCk7fSxfYXBwbHlEcmFnU2VsZWN0aW9uOmZ1bmN0aW9uKEosSyl7dGhpcy5fX250LnNldERyYWcoSik7fSxfYXBwbHlRdWlja1NlbGVjdGlvbjpmdW5jdGlvbihMLE0pe3RoaXMuX19udC5zZXRRdWljayhMKTt9LF9vblNlbGVjdGlvbkNoYW5nZTpmdW5jdGlvbihlKXt0aGlzLmZpcmVEYXRhRXZlbnQocyxlLmdldERhdGEoKSk7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlT2JqZWN0cyhyKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgudWkuY29yZS5JTXVsdGlTZWxlY3Rpb24iO3F4LkludGVyZmFjZS5kZWZpbmUoYSx7ZXh0ZW5kOnF4LnVpLmNvcmUuSVNpbmdsZVNlbGVjdGlvbixtZW1iZXJzOntzZWxlY3RBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9LGFkZFRvU2VsZWN0aW9uOmZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT0xO30scmVtb3ZlRnJvbVNlbGVjdGlvbjpmdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09MTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIG89Im9uZSIsbj0ic2luZ2xlIixtPSJzZWxlY3RlZCIsaz0iYWRkaXRpdmUiLGo9Im11bHRpIixoPSJQYWdlVXAiLGc9InVuZGVyIixmPSJMZWZ0IixkPSJsZWFkIixjPSJEb3duIixNPSJVcCIsTD0iQm9vbGVhbiIsSz0iUGFnZURvd24iLEo9ImFuY2hvciIsST0iRW5kIixIPSJIb21lIixHPSJSaWdodCIsRj0icmlnaHQiLEU9ImNsaWNrIixEPSJhYm92ZSIsdj0ibGVmdCIsdz0iRXNjYXBlIix0PSJBIix1PSJTcGFjZSIscj0iX2FwcGx5TW9kZSIscz0iaW50ZXJ2YWwiLHA9ImNoYW5nZVNlbGVjdGlvbiIscT0icXguZXZlbnQudHlwZS5EYXRhIix4PSJxdWljayIseT0iX19vRyIsQT0ia2V5Iix6PSJhYnN0cmFjdCIsQz0iZHJhZyIsQj0icXgudWkuY29yZS5zZWxlY3Rpb24uQWJzdHJhY3QiO3F4LkNsYXNzLmRlZmluZShCLHt0eXBlOnosZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7dGhpcy5fX29EPXt9O30sZXZlbnRzOnsiY2hhbmdlU2VsZWN0aW9uIjpxfSxwcm9wZXJ0aWVzOnttb2RlOntjaGVjazpbbixqLGssb10saW5pdDpuLGFwcGx5OnJ9LGRyYWc6e2NoZWNrOkwsaW5pdDpmYWxzZX0scXVpY2s6e2NoZWNrOkwsaW5pdDpmYWxzZX19LG1lbWJlcnM6e19fb0U6MCxfX29GOjAsX19vRzpudWxsLF9fb0g6bnVsbCxfX29JOm51bGwsX19vSjpudWxsLF9fb0s6bnVsbCxfX29MOm51bGwsX19vTTpudWxsLF9fb046bnVsbCxfX29POm51bGwsX19vUDpudWxsLF9fb1E6bnVsbCxfX29SOm51bGwsX19vUzpudWxsLF9fb1Q6bnVsbCxfX29VOm51bGwsX19vRDpudWxsLF9fb1Y6bnVsbCxfX29XOm51bGwsX3VzZXJJbnRlcmFjdGlvbjpmYWxzZSxfX29YOm51bGwsZ2V0U2VsZWN0aW9uQ29udGV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb1Q7fSxzZWxlY3RBbGw6ZnVuY3Rpb24oKXt2YXIgTj10aGlzLmdldE1vZGUoKTtpZihOPT1ufHxOPT1vKXt0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3Qgc2VsZWN0IGFsbCBpdGVtcyBpbiBzZWxlY3Rpb24gbW9kZTogIitOKTt9dGhpcy5fc2VsZWN0QWxsSXRlbXMoKTt0aGlzLl9maXJlQ2hhbmdlKCk7fSxzZWxlY3RJdGVtOmZ1bmN0aW9uKE8pe3RoaXMuX3NldFNlbGVjdGVkSXRlbShPKTt2YXIgUD10aGlzLmdldE1vZGUoKTtpZihQIT09biYmUCE9PW8pe3RoaXMuX3NldExlYWRJdGVtKE8pO3RoaXMuX3NldEFuY2hvckl0ZW0oTyk7fXRoaXMuX3Njcm9sbEl0ZW1JbnRvVmlldyhPKTt0aGlzLl9maXJlQ2hhbmdlKCk7fSxhZGRJdGVtOmZ1bmN0aW9uKFEpe3ZhciBSPXRoaXMuZ2V0TW9kZSgpO2lmKFI9PT1ufHxSPT09byl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKFEpO31lbHNle2lmKCF0aGlzLl9nZXRBbmNob3JJdGVtKCkpe3RoaXMuX3NldEFuY2hvckl0ZW0oUSk7fXRoaXMuX3NldExlYWRJdGVtKFEpO3RoaXMuX2FkZFRvU2VsZWN0aW9uKFEpO310aGlzLl9zY3JvbGxJdGVtSW50b1ZpZXcoUSk7dGhpcy5fZmlyZUNoYW5nZSgpO30scmVtb3ZlSXRlbTpmdW5jdGlvbihTKXt0aGlzLl9yZW1vdmVGcm9tU2VsZWN0aW9uKFMpO2lmKHRoaXMuZ2V0TW9kZSgpPT09byYmdGhpcy5pc1NlbGVjdGlvbkVtcHR5KCkpe3ZhciBUPXRoaXMuX2dldEZpcnN0U2VsZWN0YWJsZSgpO2lmKFQpe3RoaXMuYWRkSXRlbShUKTt9aWYoVD09Uyl7cmV0dXJuO319aWYodGhpcy5nZXRMZWFkSXRlbSgpPT1TKXt0aGlzLl9zZXRMZWFkSXRlbShudWxsKTt9aWYodGhpcy5fZ2V0QW5jaG9ySXRlbSgpPT1TKXt0aGlzLl9zZXRBbmNob3JJdGVtKG51bGwpO310aGlzLl9maXJlQ2hhbmdlKCk7fSxzZWxlY3RJdGVtUmFuZ2U6ZnVuY3Rpb24oVSxWKXt2YXIgVz10aGlzLmdldE1vZGUoKTtpZihXPT1ufHxXPT1vKXt0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3Qgc2VsZWN0IG11bHRpcGxlIGl0ZW1zIGluIHNlbGVjdGlvbiBtb2RlOiAiK1cpO310aGlzLl9zZWxlY3RJdGVtUmFuZ2UoVSxWKTt0aGlzLl9zZXRBbmNob3JJdGVtKFUpO3RoaXMuX3NldExlYWRJdGVtKFYpO3RoaXMuX3Njcm9sbEl0ZW1JbnRvVmlldyhWKTt0aGlzLl9maXJlQ2hhbmdlKCk7fSxjbGVhclNlbGVjdGlvbjpmdW5jdGlvbigpe2lmKHRoaXMuZ2V0TW9kZSgpPT1vKXtyZXR1cm47fXRoaXMuX2NsZWFyU2VsZWN0aW9uKCk7dGhpcy5fc2V0TGVhZEl0ZW0obnVsbCk7dGhpcy5fc2V0QW5jaG9ySXRlbShudWxsKTt0aGlzLl9maXJlQ2hhbmdlKCk7fSxyZXBsYWNlU2VsZWN0aW9uOmZ1bmN0aW9uKFgpe3ZhciBZPXRoaXMuZ2V0TW9kZSgpO2lmKFk9PW98fFk9PT1uKXtpZihYLmxlbmd0aD4xKXt0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBzZWxlY3QgbW9yZSB0aGFuIG9uZSBpdGVtcyBpbiBtb2RlOiAiK1krIiEiKTt9aWYoWC5sZW5ndGg9PTEpe3RoaXMuc2VsZWN0SXRlbShYWzBdKTt9ZWxzZXt0aGlzLmNsZWFyU2VsZWN0aW9uKCk7fXJldHVybjt9ZWxzZXt0aGlzLl9yZXBsYWNlTXVsdGlTZWxlY3Rpb24oWCk7fX0sZ2V0U2VsZWN0ZWRJdGVtOmZ1bmN0aW9uKCl7dmFyIGJhPXRoaXMuZ2V0TW9kZSgpO2lmKGJhPT09bnx8YmE9PT1vKXtyZXR1cm4gdGhpcy5fZ2V0U2VsZWN0ZWRJdGVtKCl8fG51bGw7fXRocm93IG5ldyBFcnJvcigiVGhlIG1ldGhvZCBnZXRTZWxlY3RlZEl0ZW0oKSBpcyBvbmx5IHN1cHBvcnRlZCBpbiAnc2luZ2xlJyBhbmQgJ29uZScgc2VsZWN0aW9uIG1vZGUhIik7fSxnZXRTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gcXgubGFuZy5PYmplY3QuZ2V0VmFsdWVzKHRoaXMuX19vRCk7fSxnZXRTb3J0ZWRTZWxlY3Rpb246ZnVuY3Rpb24oKXt2YXIgYmM9dGhpcy5nZXRTZWxlY3RhYmxlcygpO3ZhciBiYj1xeC5sYW5nLk9iamVjdC5nZXRWYWx1ZXModGhpcy5fX29EKTtiYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGJjLmluZGV4T2YoYSktYmMuaW5kZXhPZihiKTt9KTtyZXR1cm4gYmI7fSxpc0l0ZW1TZWxlY3RlZDpmdW5jdGlvbihiZCl7dmFyIGJlPXRoaXMuX3NlbGVjdGFibGVUb0hhc2hDb2RlKGJkKTtyZXR1cm4gdGhpcy5fX29EW2JlXSE9PXVuZGVmaW5lZDt9LGlzU2VsZWN0aW9uRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gcXgubGFuZy5PYmplY3QuaXNFbXB0eSh0aGlzLl9fb0QpO30saW52ZXJ0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGJnPXRoaXMuZ2V0TW9kZSgpO2lmKGJnPT09bnx8Ymc9PT1vKXt0aHJvdyBuZXcgRXJyb3IoIlRoZSBtZXRob2QgaW52ZXJ0U2VsZWN0aW9uKCkgaXMgb25seSBzdXBwb3J0ZWQgaW4gJ211bHRpJyBhbmQgJ2FkZGl0aXZlJyBzZWxlY3Rpb24gbW9kZSEiKTt9dmFyIGJmPXRoaXMuZ2V0U2VsZWN0YWJsZXMoKTtmb3IodmFyIGk9MDtpPGJmLmxlbmd0aDtpKyspe3RoaXMuX3RvZ2dsZUluU2VsZWN0aW9uKGJmW2ldKTt9dGhpcy5fZmlyZUNoYW5nZSgpO30sX3NldExlYWRJdGVtOmZ1bmN0aW9uKGJoKXt2YXIgYmk9dGhpcy5fX29VO2lmKGJpIT09bnVsbCl7dGhpcy5fc3R5bGVTZWxlY3RhYmxlKGJpLGQsZmFsc2UpO31pZihiaCE9PW51bGwpe3RoaXMuX3N0eWxlU2VsZWN0YWJsZShiaCxkLHRydWUpO310aGlzLl9fb1U9Ymg7fSxnZXRMZWFkSXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb1UhPT1udWxsP3RoaXMuX19vVTpudWxsO30sX3NldEFuY2hvckl0ZW06ZnVuY3Rpb24oYmope3ZhciBiaz10aGlzLl9fb1Y7aWYoYmspe3RoaXMuX3N0eWxlU2VsZWN0YWJsZShiayxKLGZhbHNlKTt9aWYoYmope3RoaXMuX3N0eWxlU2VsZWN0YWJsZShiaixKLHRydWUpO310aGlzLl9fb1Y9Ymo7fSxfZ2V0QW5jaG9ySXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb1YhPT1udWxsP3RoaXMuX19vVjpudWxsO30sX2lzU2VsZWN0YWJsZTpmdW5jdGlvbihibCl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBtZXRob2QgY2FsbDogX2lzU2VsZWN0YWJsZSgpIik7fSxfZ2V0U2VsZWN0YWJsZUZyb21Nb3VzZUV2ZW50OmZ1bmN0aW9uKGV2ZW50KXt2YXIgYm09ZXZlbnQuZ2V0VGFyZ2V0KCk7aWYoYm0mJnRoaXMuX2lzU2VsZWN0YWJsZShibSkpe3JldHVybiBibTt9cmV0dXJuIG51bGw7fSxfc2VsZWN0YWJsZVRvSGFzaENvZGU6ZnVuY3Rpb24oYm4pe3Rocm93IG5ldyBFcnJvcigiQWJzdHJhY3QgbWV0aG9kIGNhbGw6IF9zZWxlY3RhYmxlVG9IYXNoQ29kZSgpIik7fSxfc3R5bGVTZWxlY3RhYmxlOmZ1bmN0aW9uKGJvLGJwLGJxKXt0aHJvdyBuZXcgRXJyb3IoIkFic3RyYWN0IG1ldGhvZCBjYWxsOiBfc3R5bGVTZWxlY3RhYmxlKCkiKTt9LF9jYXB0dXJlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBtZXRob2QgY2FsbDogX2NhcHR1cmUoKSIpO30sX3JlbGVhc2VDYXB0dXJlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBtZXRob2QgY2FsbDogX3JlbGVhc2VDYXB0dXJlKCkiKTt9LF9nZXRMb2NhdGlvbjpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQWJzdHJhY3QgbWV0aG9kIGNhbGw6IF9nZXRMb2NhdGlvbigpIik7fSxfZ2V0RGltZW5zaW9uOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBtZXRob2QgY2FsbDogX2dldERpbWVuc2lvbigpIik7fSxfZ2V0U2VsZWN0YWJsZUxvY2F0aW9uWDpmdW5jdGlvbihicil7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBtZXRob2QgY2FsbDogX2dldFNlbGVjdGFibGVMb2NhdGlvblgoKSIpO30sX2dldFNlbGVjdGFibGVMb2NhdGlvblk6ZnVuY3Rpb24oYnMpe3Rocm93IG5ldyBFcnJvcigiQWJzdHJhY3QgbWV0aG9kIGNhbGw6IF9nZXRTZWxlY3RhYmxlTG9jYXRpb25ZKCkiKTt9LF9nZXRTY3JvbGw6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkFic3RyYWN0IG1ldGhvZCBjYWxsOiBfZ2V0U2Nyb2xsKCkiKTt9LF9zY3JvbGxCeTpmdW5jdGlvbihidCxidSl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBtZXRob2QgY2FsbDogX3Njcm9sbEJ5KCkiKTt9LF9zY3JvbGxJdGVtSW50b1ZpZXc6ZnVuY3Rpb24oYnYpe3Rocm93IG5ldyBFcnJvcigiQWJzdHJhY3QgbWV0aG9kIGNhbGw6IF9zY3JvbGxJdGVtSW50b1ZpZXcoKSIpO30sZ2V0U2VsZWN0YWJsZXM6ZnVuY3Rpb24oYncpe3Rocm93IG5ldyBFcnJvcigiQWJzdHJhY3QgbWV0aG9kIGNhbGw6IGdldFNlbGVjdGFibGVzKCkiKTt9LF9nZXRTZWxlY3RhYmxlUmFuZ2U6ZnVuY3Rpb24oYngsYnkpe3Rocm93IG5ldyBFcnJvcigiQWJzdHJhY3QgbWV0aG9kIGNhbGw6IF9nZXRTZWxlY3RhYmxlUmFuZ2UoKSIpO30sX2dldEZpcnN0U2VsZWN0YWJsZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQWJzdHJhY3QgbWV0aG9kIGNhbGw6IF9nZXRGaXJzdFNlbGVjdGFibGUoKSIpO30sX2dldExhc3RTZWxlY3RhYmxlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBtZXRob2QgY2FsbDogX2dldExhc3RTZWxlY3RhYmxlKCkiKTt9LF9nZXRSZWxhdGVkU2VsZWN0YWJsZTpmdW5jdGlvbihieixiQSl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBtZXRob2QgY2FsbDogX2dldFJlbGF0ZWRTZWxlY3RhYmxlKCkiKTt9LF9nZXRQYWdlOmZ1bmN0aW9uKGJCLGJDKXt0aHJvdyBuZXcgRXJyb3IoIkFic3RyYWN0IG1ldGhvZCBjYWxsOiBfZ2V0UGFnZSgpIik7fSxfYXBwbHlNb2RlOmZ1bmN0aW9uKGJELGJFKXt0aGlzLl9zZXRMZWFkSXRlbShudWxsKTt0aGlzLl9zZXRBbmNob3JJdGVtKG51bGwpO3RoaXMuX2NsZWFyU2VsZWN0aW9uKCk7aWYoYkQ9PT1vKXt2YXIgYkY9dGhpcy5fZ2V0Rmlyc3RTZWxlY3RhYmxlKCk7aWYoYkYpe3RoaXMuX3NldFNlbGVjdGVkSXRlbShiRik7dGhpcy5fc2Nyb2xsSXRlbUludG9WaWV3KGJGKTt9fXRoaXMuX2ZpcmVDaGFuZ2UoKTt9LGhhbmRsZU1vdXNlT3ZlcjpmdW5jdGlvbihldmVudCl7aWYodGhpcy5fX29YIT1udWxsJiZ0aGlzLl9fb1ghPXRoaXMuX2dldFNjcm9sbCgpLnRvcCl7dGhpcy5fX29YPW51bGw7cmV0dXJuO310aGlzLl91c2VySW50ZXJhY3Rpb249dHJ1ZTtpZighdGhpcy5nZXRRdWljaygpKXt0aGlzLl91c2VySW50ZXJhY3Rpb249ZmFsc2U7cmV0dXJuO312YXIgYkg9dGhpcy5nZXRNb2RlKCk7aWYoYkghPT1vJiZiSCE9PW4pe3RoaXMuX3VzZXJJbnRlcmFjdGlvbj1mYWxzZTtyZXR1cm47fXZhciBiRz10aGlzLl9nZXRTZWxlY3RhYmxlRnJvbU1vdXNlRXZlbnQoZXZlbnQpO2lmKGJHPT09bnVsbCl7dGhpcy5fdXNlckludGVyYWN0aW9uPWZhbHNlO3JldHVybjt9dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGJHKTt0aGlzLl9maXJlQ2hhbmdlKHgpO3RoaXMuX3VzZXJJbnRlcmFjdGlvbj1mYWxzZTt9LGhhbmRsZU1vdXNlRG93bjpmdW5jdGlvbihldmVudCl7dGhpcy5fdXNlckludGVyYWN0aW9uPXRydWU7dmFyIGJKPXRoaXMuX2dldFNlbGVjdGFibGVGcm9tTW91c2VFdmVudChldmVudCk7aWYoYko9PT1udWxsKXt0aGlzLl91c2VySW50ZXJhY3Rpb249ZmFsc2U7cmV0dXJuO312YXIgYkw9ZXZlbnQuaXNDdHJsUHJlc3NlZCgpfHwocXguYm9tLmNsaWVudC5QbGF0Zm9ybS5NQUMmJmV2ZW50LmlzTWV0YVByZXNzZWQoKSk7dmFyIGJJPWV2ZW50LmlzU2hpZnRQcmVzc2VkKCk7aWYodGhpcy5pc0l0ZW1TZWxlY3RlZChiSikmJiFiSSYmIWJMJiYhdGhpcy5nZXREcmFnKCkpe3RoaXMuX19vVz1iSjt0aGlzLl91c2VySW50ZXJhY3Rpb249ZmFsc2U7cmV0dXJuO31lbHNle3RoaXMuX19vVz1udWxsO310aGlzLl9zY3JvbGxJdGVtSW50b1ZpZXcoYkopO3N3aXRjaCh0aGlzLmdldE1vZGUoKSl7Y2FzZSBuOmNhc2Ugbzp0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oYkopO2JyZWFrO2Nhc2Ugazp0aGlzLl9zZXRMZWFkSXRlbShiSik7dGhpcy5fc2V0QW5jaG9ySXRlbShiSik7dGhpcy5fdG9nZ2xlSW5TZWxlY3Rpb24oYkopO2JyZWFrO2Nhc2Ugajp0aGlzLl9zZXRMZWFkSXRlbShiSik7aWYoYkkpe3ZhciBiSz10aGlzLl9nZXRBbmNob3JJdGVtKCk7aWYoYks9PT1udWxsKXtiSz10aGlzLl9nZXRGaXJzdFNlbGVjdGFibGUoKTt0aGlzLl9zZXRBbmNob3JJdGVtKGJLKTt9dGhpcy5fc2VsZWN0SXRlbVJhbmdlKGJLLGJKLGJMKTt9ZWxzZSBpZihiTCl7dGhpcy5fc2V0QW5jaG9ySXRlbShiSik7dGhpcy5fdG9nZ2xlSW5TZWxlY3Rpb24oYkopO31lbHNle3RoaXMuX3NldEFuY2hvckl0ZW0oYkopO3RoaXMuX3NldFNlbGVjdGVkSXRlbShiSik7fWJyZWFrO312YXIgYk09dGhpcy5nZXRNb2RlKCk7aWYodGhpcy5nZXREcmFnKCkmJmJNIT09biYmYk0hPT1vJiYhYkkmJiFiTCl7dGhpcy5fX29LPXRoaXMuX2dldExvY2F0aW9uKCk7dGhpcy5fX29IPXRoaXMuX2dldFNjcm9sbCgpO3RoaXMuX19vTD1ldmVudC5nZXREb2N1bWVudExlZnQoKSt0aGlzLl9fb0gubGVmdDt0aGlzLl9fb009ZXZlbnQuZ2V0RG9jdW1lbnRUb3AoKSt0aGlzLl9fb0gudG9wO3RoaXMuX19vTj10cnVlO3RoaXMuX2NhcHR1cmUoKTt9dGhpcy5fZmlyZUNoYW5nZShFKTt0aGlzLl91c2VySW50ZXJhY3Rpb249ZmFsc2U7fSxoYW5kbGVNb3VzZVVwOmZ1bmN0aW9uKGV2ZW50KXt0aGlzLl91c2VySW50ZXJhY3Rpb249dHJ1ZTt2YXIgYlE9ZXZlbnQuaXNDdHJsUHJlc3NlZCgpfHwocXguYm9tLmNsaWVudC5QbGF0Zm9ybS5NQUMmJmV2ZW50LmlzTWV0YVByZXNzZWQoKSk7dmFyIGJOPWV2ZW50LmlzU2hpZnRQcmVzc2VkKCk7aWYoIWJRJiYhYk4mJnRoaXMuX19vVyl7dmFyIGJPPXRoaXMuX2dldFNlbGVjdGFibGVGcm9tTW91c2VFdmVudChldmVudCk7aWYoYk89PT1udWxsfHwhdGhpcy5pc0l0ZW1TZWxlY3RlZChiTykpe3RoaXMuX3VzZXJJbnRlcmFjdGlvbj1mYWxzZTtyZXR1cm47fXZhciBiUD10aGlzLmdldE1vZGUoKTtpZihiUD09PWspe3RoaXMuX3JlbW92ZUZyb21TZWxlY3Rpb24oYk8pO31lbHNle3RoaXMuX3NldFNlbGVjdGVkSXRlbShiTyk7aWYodGhpcy5nZXRNb2RlKCk9PT1qKXt0aGlzLl9zZXRMZWFkSXRlbShiTyk7dGhpcy5fc2V0QW5jaG9ySXRlbShiTyk7fX10aGlzLl91c2VySW50ZXJhY3Rpb249ZmFsc2U7fXRoaXMuX2NsZWFudXAoKTt9LGhhbmRsZUxvc2VDYXB0dXJlOmZ1bmN0aW9uKGV2ZW50KXt0aGlzLl9jbGVhbnVwKCk7fSxoYW5kbGVNb3VzZU1vdmU6ZnVuY3Rpb24oZXZlbnQpe2lmKCF0aGlzLl9fb04pe3JldHVybjt9dGhpcy5fX29PPWV2ZW50LmdldERvY3VtZW50TGVmdCgpO3RoaXMuX19vUD1ldmVudC5nZXREb2N1bWVudFRvcCgpO3RoaXMuX3VzZXJJbnRlcmFjdGlvbj10cnVlO3ZhciBiUz10aGlzLl9fb08rdGhpcy5fX29ILmxlZnQ7aWYoYlM+dGhpcy5fX29MKXt0aGlzLl9fb1E9MTt9ZWxzZSBpZihiUzx0aGlzLl9fb0wpe3RoaXMuX19vUT0tMTt9ZWxzZXt0aGlzLl9fb1E9MDt9dmFyIGJSPXRoaXMuX19vUCt0aGlzLl9fb0gudG9wO2lmKGJSPnRoaXMuX19vTSl7dGhpcy5fX29SPTE7fWVsc2UgaWYoYlI8dGhpcy5fX29NKXt0aGlzLl9fb1I9LTE7fWVsc2V7dGhpcy5fX29SPTA7fXZhciBsb2NhdGlvbj10aGlzLl9fb0s7aWYodGhpcy5fX29PPGxvY2F0aW9uLmxlZnQpe3RoaXMuX19vRT10aGlzLl9fb08tbG9jYXRpb24ubGVmdDt9ZWxzZSBpZih0aGlzLl9fb08+bG9jYXRpb24ucmlnaHQpe3RoaXMuX19vRT10aGlzLl9fb08tbG9jYXRpb24ucmlnaHQ7fWVsc2V7dGhpcy5fX29FPTA7fWlmKHRoaXMuX19vUDxsb2NhdGlvbi50b3Ape3RoaXMuX19vRj10aGlzLl9fb1AtbG9jYXRpb24udG9wO31lbHNlIGlmKHRoaXMuX19vUD5sb2NhdGlvbi5ib3R0b20pe3RoaXMuX19vRj10aGlzLl9fb1AtbG9jYXRpb24uYm90dG9tO31lbHNle3RoaXMuX19vRj0wO31pZighdGhpcy5fX29HKXt0aGlzLl9fb0c9bmV3IHF4LmV2ZW50LlRpbWVyKDEwMCk7dGhpcy5fX29HLmFkZExpc3RlbmVyKHMsdGhpcy5fb25JbnRlcnZhbCx0aGlzKTt9dGhpcy5fX29HLnN0YXJ0KCk7dGhpcy5fYXV0b1NlbGVjdCgpO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuX3VzZXJJbnRlcmFjdGlvbj1mYWxzZTt9LGhhbmRsZUFkZEl0ZW06ZnVuY3Rpb24oZSl7dmFyIGJUPWUuZ2V0RGF0YSgpO2lmKHRoaXMuZ2V0TW9kZSgpPT09byYmdGhpcy5pc1NlbGVjdGlvbkVtcHR5KCkpe3RoaXMuYWRkSXRlbShiVCk7fX0saGFuZGxlUmVtb3ZlSXRlbTpmdW5jdGlvbihlKXt0aGlzLnJlbW92ZUl0ZW0oZS5nZXREYXRhKCkpO30sX2NsZWFudXA6ZnVuY3Rpb24oKXtpZighdGhpcy5nZXREcmFnKCkmJnRoaXMuX19vTil7cmV0dXJuO31pZih0aGlzLl9fb1Mpe3RoaXMuX2ZpcmVDaGFuZ2UoRSk7fWRlbGV0ZSB0aGlzLl9fb047ZGVsZXRlIHRoaXMuX19vSTtkZWxldGUgdGhpcy5fX29KO3RoaXMuX3JlbGVhc2VDYXB0dXJlKCk7aWYodGhpcy5fX29HKXt0aGlzLl9fb0cuc3RvcCgpO319LF9vbkludGVydmFsOmZ1bmN0aW9uKGUpe3RoaXMuX3Njcm9sbEJ5KHRoaXMuX19vRSx0aGlzLl9fb0YpO3RoaXMuX19vSD10aGlzLl9nZXRTY3JvbGwoKTt0aGlzLl9hdXRvU2VsZWN0KCk7fSxfYXV0b1NlbGVjdDpmdW5jdGlvbigpe3ZhciBjZD10aGlzLl9nZXREaW1lbnNpb24oKTt2YXIgYlY9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLl9fb08tdGhpcy5fX29LLmxlZnQsY2Qud2lkdGgpKSt0aGlzLl9fb0gubGVmdDt2YXIgYlU9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLl9fb1AtdGhpcy5fX29LLnRvcCxjZC5oZWlnaHQpKSt0aGlzLl9fb0gudG9wO2lmKHRoaXMuX19vST09PWJWJiZ0aGlzLl9fb0o9PT1iVSl7cmV0dXJuO310aGlzLl9fb0k9YlY7dGhpcy5fX29KPWJVO3ZhciBjZj10aGlzLl9nZXRBbmNob3JJdGVtKCk7dmFyIGJYPWNmO3ZhciBjYj10aGlzLl9fb1E7dmFyIGNlLGJXO3doaWxlKGNiIT09MCl7Y2U9Y2I+MD90aGlzLl9nZXRSZWxhdGVkU2VsZWN0YWJsZShiWCxGKTp0aGlzLl9nZXRSZWxhdGVkU2VsZWN0YWJsZShiWCx2KTtpZihjZSE9PW51bGwpe2JXPXRoaXMuX2dldFNlbGVjdGFibGVMb2NhdGlvblgoY2UpO2lmKChjYj4wJiZiVy5sZWZ0PD1iVil8fChjYjwwJiZiVy5yaWdodD49YlYpKXtiWD1jZTtjb250aW51ZTt9fWJyZWFrO312YXIgY2M9dGhpcy5fX29SO3ZhciBjYSxiWTt3aGlsZShjYyE9PTApe2NhPWNjPjA/dGhpcy5fZ2V0UmVsYXRlZFNlbGVjdGFibGUoYlgsZyk6dGhpcy5fZ2V0UmVsYXRlZFNlbGVjdGFibGUoYlgsRCk7aWYoY2EhPT1udWxsKXtiWT10aGlzLl9nZXRTZWxlY3RhYmxlTG9jYXRpb25ZKGNhKTtpZigoY2M+MCYmYlkudG9wPD1iVSl8fChjYzwwJiZiWS5ib3R0b20+PWJVKSl7Ylg9Y2E7Y29udGludWU7fX1icmVhazt9dmFyIGNnPXRoaXMuZ2V0TW9kZSgpO2lmKGNnPT09ail7dGhpcy5fc2VsZWN0SXRlbVJhbmdlKGNmLGJYKTt9ZWxzZSBpZihjZz09PWspe2lmKHRoaXMuaXNJdGVtU2VsZWN0ZWQoY2YpKXt0aGlzLl9zZWxlY3RJdGVtUmFuZ2UoY2YsYlgsdHJ1ZSk7fWVsc2V7dGhpcy5fZGVzZWxlY3RJdGVtUmFuZ2UoY2YsYlgpO310aGlzLl9zZXRBbmNob3JJdGVtKGJYKTt9dGhpcy5fZmlyZUNoYW5nZShDKTt9LF9fb1k6e0hvbWU6MSxEb3duOjEsUmlnaHQ6MSxQYWdlRG93bjoxLEVuZDoxLFVwOjEsTGVmdDoxLFBhZ2VVcDoxfSxoYW5kbGVLZXlQcmVzczpmdW5jdGlvbihldmVudCl7dGhpcy5fdXNlckludGVyYWN0aW9uPXRydWU7dmFyIGNtLGNsO3ZhciBjbz1ldmVudC5nZXRLZXlJZGVudGlmaWVyKCk7dmFyIGNuPXRoaXMuZ2V0TW9kZSgpO3ZhciBjaT1ldmVudC5pc0N0cmxQcmVzc2VkKCl8fChxeC5ib20uY2xpZW50LlBsYXRmb3JtLk1BQyYmZXZlbnQuaXNNZXRhUHJlc3NlZCgpKTt2YXIgY2o9ZXZlbnQuaXNTaGlmdFByZXNzZWQoKTt2YXIgY2s9ZmFsc2U7aWYoY289PT10JiZjaSl7aWYoY24hPT1uJiZjbiE9PW8pe3RoaXMuX3NlbGVjdEFsbEl0ZW1zKCk7Y2s9dHJ1ZTt9fWVsc2UgaWYoY289PT13KXtpZihjbiE9PW4mJmNuIT09byl7dGhpcy5fY2xlYXJTZWxlY3Rpb24oKTtjaz10cnVlO319ZWxzZSBpZihjbz09PXUpe3ZhciBjaD10aGlzLmdldExlYWRJdGVtKCk7aWYoY2gmJiFjail7aWYoY2l8fGNuPT09ayl7dGhpcy5fdG9nZ2xlSW5TZWxlY3Rpb24oY2gpO31lbHNle3RoaXMuX3NldFNlbGVjdGVkSXRlbShjaCk7fWNrPXRydWU7fX1lbHNlIGlmKHRoaXMuX19vWVtjb10pe2NrPXRydWU7aWYoY249PT1ufHxjbj09byl7Y209dGhpcy5fZ2V0U2VsZWN0ZWRJdGVtKCk7fWVsc2V7Y209dGhpcy5nZXRMZWFkSXRlbSgpO31pZihjbSE9PW51bGwpe3N3aXRjaChjbyl7Y2FzZSBIOmNsPXRoaXMuX2dldEZpcnN0U2VsZWN0YWJsZSgpO2JyZWFrO2Nhc2UgSTpjbD10aGlzLl9nZXRMYXN0U2VsZWN0YWJsZSgpO2JyZWFrO2Nhc2UgTTpjbD10aGlzLl9nZXRSZWxhdGVkU2VsZWN0YWJsZShjbSxEKTticmVhaztjYXNlIGM6Y2w9dGhpcy5fZ2V0UmVsYXRlZFNlbGVjdGFibGUoY20sZyk7YnJlYWs7Y2FzZSBmOmNsPXRoaXMuX2dldFJlbGF0ZWRTZWxlY3RhYmxlKGNtLHYpO2JyZWFrO2Nhc2UgRzpjbD10aGlzLl9nZXRSZWxhdGVkU2VsZWN0YWJsZShjbSxGKTticmVhaztjYXNlIGg6Y2w9dGhpcy5fZ2V0UGFnZShjbSx0cnVlKTticmVhaztjYXNlIEs6Y2w9dGhpcy5fZ2V0UGFnZShjbSxmYWxzZSk7YnJlYWs7fX1lbHNle3N3aXRjaChjbyl7Y2FzZSBIOmNhc2UgYzpjYXNlIEc6Y2FzZSBLOmNsPXRoaXMuX2dldEZpcnN0U2VsZWN0YWJsZSgpO2JyZWFrO2Nhc2UgSTpjYXNlIE06Y2FzZSBmOmNhc2UgaDpjbD10aGlzLl9nZXRMYXN0U2VsZWN0YWJsZSgpO2JyZWFrO319aWYoY2whPT1udWxsKXtzd2l0Y2goY24pe2Nhc2UgbjpjYXNlIG86dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGNsKTticmVhaztjYXNlIGs6dGhpcy5fc2V0TGVhZEl0ZW0oY2wpO2JyZWFrO2Nhc2UgajppZihjail7dmFyIGNwPXRoaXMuX2dldEFuY2hvckl0ZW0oKTtpZihjcD09PW51bGwpe3RoaXMuX3NldEFuY2hvckl0ZW0oY3A9dGhpcy5fZ2V0Rmlyc3RTZWxlY3RhYmxlKCkpO310aGlzLl9zZXRMZWFkSXRlbShjbCk7dGhpcy5fc2VsZWN0SXRlbVJhbmdlKGNwLGNsLGNpKTt9ZWxzZXt0aGlzLl9zZXRBbmNob3JJdGVtKGNsKTt0aGlzLl9zZXRMZWFkSXRlbShjbCk7aWYoIWNpKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oY2wpO319YnJlYWs7fXRoaXMuX19vWD10aGlzLl9nZXRTY3JvbGwoKS50b3A7dGhpcy5fc2Nyb2xsSXRlbUludG9WaWV3KGNsKTt9fWlmKGNrKXtldmVudC5zdG9wKCk7dGhpcy5fZmlyZUNoYW5nZShBKTt9dGhpcy5fdXNlckludGVyYWN0aW9uPWZhbHNlO30sX3NlbGVjdEFsbEl0ZW1zOmZ1bmN0aW9uKCl7dmFyIGNxPXRoaXMuZ2V0U2VsZWN0YWJsZXMoKTtmb3IodmFyIGk9MCxsPWNxLmxlbmd0aDtpPGw7aSsrKXt0aGlzLl9hZGRUb1NlbGVjdGlvbihjcVtpXSk7fX0sX2NsZWFyU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGNyPXRoaXMuX19vRDtmb3IodmFyIGNzIGluIGNyKXt0aGlzLl9yZW1vdmVGcm9tU2VsZWN0aW9uKGNyW2NzXSk7fXRoaXMuX19vRD17fTt9LF9zZWxlY3RJdGVtUmFuZ2U6ZnVuY3Rpb24oY3QsY3UsY3Ype3ZhciBjeT10aGlzLl9nZXRTZWxlY3RhYmxlUmFuZ2UoY3QsY3UpO2lmKCFjdil7dmFyIGN4PXRoaXMuX19vRDt2YXIgY3o9dGhpcy5fX3BhKGN5KTtmb3IodmFyIGN3IGluIGN4KXtpZighY3pbY3ddKXt0aGlzLl9yZW1vdmVGcm9tU2VsZWN0aW9uKGN4W2N3XSk7fX19Zm9yKHZhciBpPTAsbD1jeS5sZW5ndGg7aTxsO2krKyl7dGhpcy5fYWRkVG9TZWxlY3Rpb24oY3lbaV0pO319LF9kZXNlbGVjdEl0ZW1SYW5nZTpmdW5jdGlvbihjQSxjQil7dmFyIGNDPXRoaXMuX2dldFNlbGVjdGFibGVSYW5nZShjQSxjQik7Zm9yKHZhciBpPTAsbD1jQy5sZW5ndGg7aTxsO2krKyl7dGhpcy5fcmVtb3ZlRnJvbVNlbGVjdGlvbihjQ1tpXSk7fX0sX19wYTpmdW5jdGlvbihjRCl7dmFyIGNGPXt9O3ZhciBjRTtmb3IodmFyIGk9MCxsPWNELmxlbmd0aDtpPGw7aSsrKXtjRT1jRFtpXTtjRlt0aGlzLl9zZWxlY3RhYmxlVG9IYXNoQ29kZShjRSldPWNFO31yZXR1cm4gY0Y7fSxfZ2V0U2VsZWN0ZWRJdGVtOmZ1bmN0aW9uKCl7Zm9yKHZhciBjRyBpbiB0aGlzLl9fb0Qpe3JldHVybiB0aGlzLl9fb0RbY0ddO31yZXR1cm4gbnVsbDt9LF9zZXRTZWxlY3RlZEl0ZW06ZnVuY3Rpb24oY0gpe2lmKHRoaXMuX2lzU2VsZWN0YWJsZShjSCkpe3ZhciBjST10aGlzLl9fb0Q7dmFyIGNKPXRoaXMuX3NlbGVjdGFibGVUb0hhc2hDb2RlKGNIKTtpZighY0lbY0pdfHxxeC5sYW5nLk9iamVjdC5oYXNNaW5MZW5ndGgoY0ksMikpe3RoaXMuX2NsZWFyU2VsZWN0aW9uKCk7dGhpcy5fYWRkVG9TZWxlY3Rpb24oY0gpO319fSxfYWRkVG9TZWxlY3Rpb246ZnVuY3Rpb24oY0spe3ZhciBjTD10aGlzLl9zZWxlY3RhYmxlVG9IYXNoQ29kZShjSyk7aWYoIXRoaXMuX19vRFtjTF0mJnRoaXMuX2lzU2VsZWN0YWJsZShjSykpe3RoaXMuX19vRFtjTF09Y0s7dGhpcy5fc3R5bGVTZWxlY3RhYmxlKGNLLG0sdHJ1ZSk7dGhpcy5fX29TPXRydWU7fX0sX3RvZ2dsZUluU2VsZWN0aW9uOmZ1bmN0aW9uKGNNKXt2YXIgY049dGhpcy5fc2VsZWN0YWJsZVRvSGFzaENvZGUoY00pO2lmKCF0aGlzLl9fb0RbY05dKXt0aGlzLl9fb0RbY05dPWNNO3RoaXMuX3N0eWxlU2VsZWN0YWJsZShjTSxtLHRydWUpO31lbHNle2RlbGV0ZSB0aGlzLl9fb0RbY05dO3RoaXMuX3N0eWxlU2VsZWN0YWJsZShjTSxtLGZhbHNlKTt9dGhpcy5fX29TPXRydWU7fSxfcmVtb3ZlRnJvbVNlbGVjdGlvbjpmdW5jdGlvbihjTyl7dmFyIGNQPXRoaXMuX3NlbGVjdGFibGVUb0hhc2hDb2RlKGNPKTtpZih0aGlzLl9fb0RbY1BdIT1udWxsKXtkZWxldGUgdGhpcy5fX29EW2NQXTt0aGlzLl9zdHlsZVNlbGVjdGFibGUoY08sbSxmYWxzZSk7dGhpcy5fX29TPXRydWU7fX0sX3JlcGxhY2VNdWx0aVNlbGVjdGlvbjpmdW5jdGlvbihjUSl7dmFyIGNUPWZhbHNlO3ZhciBjVyxjVjt2YXIgY1I9e307Zm9yKHZhciBpPTAsbD1jUS5sZW5ndGg7aTxsO2krKyl7Y1c9Y1FbaV07aWYodGhpcy5faXNTZWxlY3RhYmxlKGNXKSl7Y1Y9dGhpcy5fc2VsZWN0YWJsZVRvSGFzaENvZGUoY1cpO2NSW2NWXT1jVzt9fXZhciBjWD1jUVswXTt2YXIgY1M9Y1c7dmFyIGNVPXRoaXMuX19vRDtmb3IodmFyIGNWIGluIGNVKXtpZihjUltjVl0pe2RlbGV0ZSBjUltjVl07fWVsc2V7Y1c9Y1VbY1ZdO2RlbGV0ZSBjVVtjVl07dGhpcy5fc3R5bGVTZWxlY3RhYmxlKGNXLG0sZmFsc2UpO2NUPXRydWU7fX1mb3IodmFyIGNWIGluIGNSKXtjVz1jVVtjVl09Y1JbY1ZdO3RoaXMuX3N0eWxlU2VsZWN0YWJsZShjVyxtLHRydWUpO2NUPXRydWU7fWlmKCFjVCl7cmV0dXJuIGZhbHNlO310aGlzLl9zY3JvbGxJdGVtSW50b1ZpZXcoY1MpO3RoaXMuX3NldExlYWRJdGVtKGNYKTt0aGlzLl9zZXRBbmNob3JJdGVtKGNYKTt0aGlzLl9fb1M9dHJ1ZTt0aGlzLl9maXJlQ2hhbmdlKCk7fSxfZmlyZUNoYW5nZTpmdW5jdGlvbihjWSl7aWYodGhpcy5fX29TKXt0aGlzLl9fb1Q9Y1l8fG51bGw7dGhpcy5maXJlRGF0YUV2ZW50KHAsdGhpcy5nZXRTZWxlY3Rpb24oKSk7ZGVsZXRlIHRoaXMuX19vUzt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlT2JqZWN0cyh5KTt0aGlzLl9fb0Q9dGhpcy5fX29XPXRoaXMuX19vVj1udWxsO3RoaXMuX19vVT1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBmPSJ2ZXJ0aWNhbCIsZT0idW5kZXIiLGQ9ImFib3ZlIixjPSJxeC51aS5jb3JlLnNlbGVjdGlvbi5XaWRnZXQiLGI9ImxlZnQiLGE9InJpZ2h0IjtxeC5DbGFzcy5kZWZpbmUoYyx7ZXh0ZW5kOnF4LnVpLmNvcmUuc2VsZWN0aW9uLkFic3RyYWN0LGNvbnN0cnVjdDpmdW5jdGlvbihnKXtxeC51aS5jb3JlLnNlbGVjdGlvbi5BYnN0cmFjdC5jYWxsKHRoaXMpO3RoaXMuX19uVz1nO30sbWVtYmVyczp7X19uVzpudWxsLF9pc1NlbGVjdGFibGU6ZnVuY3Rpb24oaCl7cmV0dXJuIHRoaXMuX2lzSXRlbVNlbGVjdGFibGUoaCkmJmguZ2V0TGF5b3V0UGFyZW50KCk9PT10aGlzLl9fblc7fSxfc2VsZWN0YWJsZVRvSGFzaENvZGU6ZnVuY3Rpb24oail7cmV0dXJuIGouJCRoYXNoO30sX3N0eWxlU2VsZWN0YWJsZTpmdW5jdGlvbihrLG0sbil7bj9rLmFkZFN0YXRlKG0pOmsucmVtb3ZlU3RhdGUobSk7fSxfY2FwdHVyZTpmdW5jdGlvbigpe3RoaXMuX19uVy5jYXB0dXJlKCk7fSxfcmVsZWFzZUNhcHR1cmU6ZnVuY3Rpb24oKXt0aGlzLl9fblcucmVsZWFzZUNhcHR1cmUoKTt9LF9pc0l0ZW1TZWxlY3RhYmxlOmZ1bmN0aW9uKG8pe2lmKHRoaXMuX3VzZXJJbnRlcmFjdGlvbil7cmV0dXJuIG8uaXNWaXNpYmxlKCkmJm8uaXNFbmFibGVkKCk7fWVsc2V7cmV0dXJuIG8uaXNWaXNpYmxlKCk7fX0sX2dldFdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fblc7fSxfZ2V0TG9jYXRpb246ZnVuY3Rpb24oKXt2YXIgcD10aGlzLl9fblcuZ2V0Q29udGVudEVsZW1lbnQoKS5nZXREb21FbGVtZW50KCk7cmV0dXJuIHA/cXguYm9tLmVsZW1lbnQuTG9jYXRpb24uZ2V0KHApOm51bGw7fSxfZ2V0RGltZW5zaW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19uVy5nZXRJbm5lclNpemUoKTt9LF9nZXRTZWxlY3RhYmxlTG9jYXRpb25YOmZ1bmN0aW9uKHEpe3ZhciByPXEuZ2V0Qm91bmRzKCk7aWYocil7cmV0dXJuIHtsZWZ0OnIubGVmdCxyaWdodDpyLmxlZnQrci53aWR0aH07fX0sX2dldFNlbGVjdGFibGVMb2NhdGlvblk6ZnVuY3Rpb24ocyl7dmFyIHQ9cy5nZXRCb3VuZHMoKTtpZih0KXtyZXR1cm4ge3RvcDp0LnRvcCxib3R0b206dC50b3ArdC5oZWlnaHR9O319LF9nZXRTY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4ge2xlZnQ6MCx0b3A6MH07fSxfc2Nyb2xsQnk6ZnVuY3Rpb24odSx2KXt9LF9zY3JvbGxJdGVtSW50b1ZpZXc6ZnVuY3Rpb24odyl7dGhpcy5fX25XLnNjcm9sbENoaWxkSW50b1ZpZXcodyk7fSxnZXRTZWxlY3RhYmxlczpmdW5jdGlvbih4KXt2YXIgeT1mYWxzZTtpZigheCl7eT10aGlzLl91c2VySW50ZXJhY3Rpb247dGhpcy5fdXNlckludGVyYWN0aW9uPXRydWU7fXZhciBCPXRoaXMuX19uVy5nZXRDaGlsZHJlbigpO3ZhciB6PVtdO3ZhciBBO2Zvcih2YXIgaT0wLGw9Qi5sZW5ndGg7aTxsO2krKyl7QT1CW2ldO2lmKHRoaXMuX2lzSXRlbVNlbGVjdGFibGUoQSkpe3oucHVzaChBKTt9fXRoaXMuX3VzZXJJbnRlcmFjdGlvbj15O3JldHVybiB6O30sX2dldFNlbGVjdGFibGVSYW5nZTpmdW5jdGlvbihDLEQpe2lmKEM9PT1EKXtyZXR1cm4gW0NdO312YXIgSD10aGlzLl9fblcuZ2V0Q2hpbGRyZW4oKTt2YXIgRT1bXTt2YXIgRz1mYWxzZTt2YXIgRjtmb3IodmFyIGk9MCxsPUgubGVuZ3RoO2k8bDtpKyspe0Y9SFtpXTtpZihGPT09Q3x8Rj09PUQpe2lmKEcpe0UucHVzaChGKTticmVhazt9ZWxzZXtHPXRydWU7fX1pZihHJiZ0aGlzLl9pc0l0ZW1TZWxlY3RhYmxlKEYpKXtFLnB1c2goRik7fX1yZXR1cm4gRTt9LF9nZXRGaXJzdFNlbGVjdGFibGU6ZnVuY3Rpb24oKXt2YXIgST10aGlzLl9fblcuZ2V0Q2hpbGRyZW4oKTtmb3IodmFyIGk9MCxsPUkubGVuZ3RoO2k8bDtpKyspe2lmKHRoaXMuX2lzSXRlbVNlbGVjdGFibGUoSVtpXSkpe3JldHVybiBJW2ldO319cmV0dXJuIG51bGw7fSxfZ2V0TGFzdFNlbGVjdGFibGU6ZnVuY3Rpb24oKXt2YXIgSj10aGlzLl9fblcuZ2V0Q2hpbGRyZW4oKTtmb3IodmFyIGk9Si5sZW5ndGgtMTtpPjA7aS0tKXtpZih0aGlzLl9pc0l0ZW1TZWxlY3RhYmxlKEpbaV0pKXtyZXR1cm4gSltpXTt9fXJldHVybiBudWxsO30sX2dldFJlbGF0ZWRTZWxlY3RhYmxlOmZ1bmN0aW9uKEssTCl7dmFyIE89dGhpcy5fX25XLmdldE9yaWVudGF0aW9uKCk9PT1mO3ZhciBOPXRoaXMuX19uVy5nZXRDaGlsZHJlbigpO3ZhciBNPU4uaW5kZXhPZihLKTt2YXIgUDtpZigoTyYmTD09PWQpfHwoIU8mJkw9PT1iKSl7Zm9yKHZhciBpPU0tMTtpPj0wO2ktLSl7UD1OW2ldO2lmKHRoaXMuX2lzSXRlbVNlbGVjdGFibGUoUCkpe3JldHVybiBQO319fWVsc2UgaWYoKE8mJkw9PT1lKXx8KCFPJiZMPT09YSkpe2Zvcih2YXIgaT1NKzE7aTxOLmxlbmd0aDtpKyspe1A9TltpXTtpZih0aGlzLl9pc0l0ZW1TZWxlY3RhYmxlKFApKXtyZXR1cm4gUDt9fX1yZXR1cm4gbnVsbDt9LF9nZXRQYWdlOmZ1bmN0aW9uKFEsUil7aWYoUil7cmV0dXJuIHRoaXMuX2dldEZpcnN0U2VsZWN0YWJsZSgpO31lbHNle3JldHVybiB0aGlzLl9nZXRMYXN0U2VsZWN0YWJsZSgpO319fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19uVz1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC51aS5jb3JlLnNlbGVjdGlvbi5TY3JvbGxBcmVhIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LnVpLmNvcmUuc2VsZWN0aW9uLldpZGdldCxtZW1iZXJzOntfaXNTZWxlY3RhYmxlOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLl9pc0l0ZW1TZWxlY3RhYmxlKGIpJiZiLmdldExheW91dFBhcmVudCgpPT09dGhpcy5fZ2V0V2lkZ2V0KCkuZ2V0Q2hpbGRyZW5Db250YWluZXIoKTt9LF9nZXREaW1lbnNpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0V2lkZ2V0KCkuZ2V0UGFuZVNpemUoKTt9LF9nZXRTY3JvbGw6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLl9nZXRXaWRnZXQoKTtyZXR1cm4ge2xlZnQ6Yy5nZXRTY3JvbGxYKCksdG9wOmMuZ2V0U2Nyb2xsWSgpfTt9LF9zY3JvbGxCeTpmdW5jdGlvbihkLGUpe3ZhciBmPXRoaXMuX2dldFdpZGdldCgpO2Yuc2Nyb2xsQnlYKGQpO2Yuc2Nyb2xsQnlZKGUpO30sX2dldFBhZ2U6ZnVuY3Rpb24oZyxoKXt2YXIgbT10aGlzLmdldFNlbGVjdGFibGVzKCk7dmFyIGxlbmd0aD1tLmxlbmd0aDt2YXIgcD1tLmluZGV4T2YoZyk7aWYocD09PS0xKXt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGVhZCBpdGVtOiAiK2cpO312YXIgaj10aGlzLl9nZXRXaWRnZXQoKTt2YXIgcj1qLmdldFNjcm9sbFkoKTt2YXIgaW5uZXJIZWlnaHQ9ai5nZXRJbm5lclNpemUoKS5oZWlnaHQ7dmFyIHRvcCxsLHE7aWYoaCl7dmFyIG89cjt2YXIgaT1wO3doaWxlKDEpe2Zvcig7aT49MDtpLS0pe3RvcD1qLmdldEl0ZW1Ub3AobVtpXSk7aWYodG9wPG8pe3E9aSsxO2JyZWFrO319aWYocT09bnVsbCl7dmFyIHM9dGhpcy5fZ2V0Rmlyc3RTZWxlY3RhYmxlKCk7cmV0dXJuIHM9PWc/bnVsbDpzO31pZihxPj1wKXtvLT1pbm5lckhlaWdodCtyLWouZ2V0SXRlbUJvdHRvbShnKTtxPW51bGw7Y29udGludWU7fXJldHVybiBtW3FdO319ZWxzZXt2YXIgbj1pbm5lckhlaWdodCtyO3ZhciBpPXA7d2hpbGUoMSl7Zm9yKDtpPGxlbmd0aDtpKyspe2w9ai5nZXRJdGVtQm90dG9tKG1baV0pO2lmKGw+bil7cT1pLTE7YnJlYWs7fX1pZihxPT1udWxsKXt2YXIgaz10aGlzLl9nZXRMYXN0U2VsZWN0YWJsZSgpO3JldHVybiBrPT1nP251bGw6azt9aWYocTw9cCl7bis9ai5nZXRJdGVtVG9wKGcpLXI7cT1udWxsO2NvbnRpbnVlO31yZXR1cm4gbVtxXTt9fX19fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZT0icmlnaHQiLGQ9ImFib3ZlIixjPSJsZWZ0IixiPSJ1bmRlciIsYT0icXgudWkudHJlZS5TZWxlY3Rpb25NYW5hZ2VyIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LnVpLmNvcmUuc2VsZWN0aW9uLlNjcm9sbEFyZWEsbWVtYmVyczp7X2dldFNlbGVjdGFibGVMb2NhdGlvblk6ZnVuY3Rpb24oZil7dmFyIGc9Zi5nZXRCb3VuZHMoKTtpZihnKXt2YXIgdG9wPXRoaXMuX2dldFdpZGdldCgpLmdldEl0ZW1Ub3AoZik7cmV0dXJuIHt0b3A6dG9wLGJvdHRvbTp0b3ArZy5oZWlnaHR9O319LF9pc1NlbGVjdGFibGU6ZnVuY3Rpb24oaCl7cmV0dXJuIHRoaXMuX2lzSXRlbVNlbGVjdGFibGUoaCkmJmggaW5zdGFuY2VvZiBxeC51aS50cmVlLkFic3RyYWN0VHJlZUl0ZW07fSxfZ2V0U2VsZWN0YWJsZUZyb21Nb3VzZUV2ZW50OmZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gdGhpcy5fZ2V0V2lkZ2V0KCkuZ2V0VHJlZUl0ZW0oZXZlbnQuZ2V0VGFyZ2V0KCkpO30sZ2V0U2VsZWN0YWJsZXM6ZnVuY3Rpb24oail7dmFyIG09ZmFsc2U7aWYoIWope209dGhpcy5fdXNlckludGVyYWN0aW9uO3RoaXMuX3VzZXJJbnRlcmFjdGlvbj10cnVlO312YXIgbD10aGlzLl9nZXRXaWRnZXQoKTt2YXIgbj1bXTtpZihsLmdldFJvb3QoKSE9bnVsbCl7dmFyIGs9bC5nZXRSb290KCkuZ2V0SXRlbXModHJ1ZSwhIWosbC5nZXRIaWRlUm9vdCgpKTtmb3IodmFyIGk9MDtpPGsubGVuZ3RoO2krKyl7aWYodGhpcy5faXNTZWxlY3RhYmxlKGtbaV0pKXtuLnB1c2goa1tpXSk7fX19dGhpcy5fdXNlckludGVyYWN0aW9uPW07cmV0dXJuIG47fSxfZ2V0U2VsZWN0YWJsZVJhbmdlOmZ1bmN0aW9uKG8scCl7aWYobz09PXApe3JldHVybiBbb107fXZhciBxPXRoaXMuZ2V0U2VsZWN0YWJsZXMoKTt2YXIgcj1xLmluZGV4T2Yobyk7dmFyIHM9cS5pbmRleE9mKHApO2lmKHI8MHx8czwwKXtyZXR1cm4gW107fWlmKHI8cyl7cmV0dXJuIHEuc2xpY2UocixzKzEpO31lbHNle3JldHVybiBxLnNsaWNlKHMscisxKTt9fSxfZ2V0Rmlyc3RTZWxlY3RhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2VsZWN0YWJsZXMoKVswXXx8bnVsbDt9LF9nZXRMYXN0U2VsZWN0YWJsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0U2VsZWN0YWJsZXMoKTtpZih0Lmxlbmd0aD4wKXtyZXR1cm4gdFt0Lmxlbmd0aC0xXTt9ZWxzZXtyZXR1cm4gbnVsbDt9fSxfZ2V0UmVsYXRlZFNlbGVjdGFibGU6ZnVuY3Rpb24odSx2KXt2YXIgdz10aGlzLl9nZXRXaWRnZXQoKTt2YXIgeD1udWxsO3N3aXRjaCh2KXtjYXNlIGQ6eD13LmdldFByZXZpb3VzTm9kZU9mKHUsZmFsc2UpO2JyZWFrO2Nhc2UgYjp4PXcuZ2V0TmV4dE5vZGVPZih1LGZhbHNlKTticmVhaztjYXNlIGM6Y2FzZSBlOmJyZWFrO31pZigheCl7cmV0dXJuIG51bGw7fWlmKHRoaXMuX2lzU2VsZWN0YWJsZSh4KSl7cmV0dXJuIHg7fWVsc2V7cmV0dXJuIHRoaXMuX2dldFJlbGF0ZWRTZWxlY3RhYmxlKHgsdik7fX19fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbD0iZGJsY2xpY2siLGs9ImNsaWNrIixqPSJCb29sZWFuIixoPSJleGNsdWRlZCIsZz0idmlzaWJsZSIsZj0icXguZXZlbnQudHlwZS5EYXRhIixkPSJfYXBwbHlPcGVuTW9kZSIsYz0iU3BhY2UiLGI9IkxlZnQiLGE9IkVudGVyIix6PSJjaGFuZ2VPcGVuTW9kZSIseT0iX2FwcGx5Um9vdE9wZW5DbG9zZSIseD0iY2hhbmdlU2VsZWN0aW9uIix3PSJxeC51aS50cmVlLlRyZWUiLHY9InRyZWUiLHU9Il9hcHBseUhpZGVSb290Iix0PSJjaGFuZ2VSb290IixzPSJfYXBwbHlSb290IixyPSJrZXlwcmVzcyIscT0ibm9uZSIsbz0icGFuZSIscD0iUmlnaHQiLG09InF4LnVpLnRyZWUuQWJzdHJhY3RUcmVlSXRlbSIsbj0iX19zdiI7cXguQ2xhc3MuZGVmaW5lKHcse2V4dGVuZDpxeC51aS5jb3JlLnNjcm9sbC5BYnN0cmFjdFNjcm9sbEFyZWEsaW1wbGVtZW50OltxeC51aS5jb3JlLklNdWx0aVNlbGVjdGlvbixxeC51aS5mb3JtLklNb2RlbFNlbGVjdGlvbixxeC51aS5mb3JtLklGb3JtXSxpbmNsdWRlOltxeC51aS5jb3JlLk1NdWx0aVNlbGVjdGlvbkhhbmRsaW5nLHF4LnVpLmNvcmUuTUNvbnRlbnRQYWRkaW5nLHF4LnVpLmZvcm0uTU1vZGVsU2VsZWN0aW9uLHF4LnVpLmZvcm0uTUZvcm1dLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnVpLmNvcmUuc2Nyb2xsLkFic3RyYWN0U2Nyb2xsQXJlYS5jYWxsKHRoaXMpO3RoaXMuX19zdj1uZXcgcXgudWkuY29udGFpbmVyLkNvbXBvc2l0ZShuZXcgcXgudWkubGF5b3V0LlZCb3goKSkuc2V0KHthbGxvd1Nocmlua1k6ZmFsc2UsYWxsb3dHcm93WDp0cnVlfSk7dGhpcy5nZXRDaGlsZENvbnRyb2wobykuYWRkKHRoaXMuX19zdik7dGhpcy5pbml0T3Blbk1vZGUoKTt0aGlzLmluaXRSb290T3BlbkNsb3NlKCk7dGhpcy5hZGRMaXN0ZW5lcih4LHRoaXMuX29uQ2hhbmdlU2VsZWN0aW9uLHRoaXMpO3RoaXMuYWRkTGlzdGVuZXIocix0aGlzLl9vbktleVByZXNzLHRoaXMpO30sZXZlbnRzOnthZGRJdGVtOmYscmVtb3ZlSXRlbTpmfSxwcm9wZXJ0aWVzOntvcGVuTW9kZTp7Y2hlY2s6W2ssbCxxXSxpbml0OmwsYXBwbHk6ZCxldmVudDp6LHRoZW1lYWJsZTp0cnVlfSxyb290OntjaGVjazptLGluaXQ6bnVsbCxudWxsYWJsZTp0cnVlLGV2ZW50OnQsYXBwbHk6c30saGlkZVJvb3Q6e2NoZWNrOmosaW5pdDpmYWxzZSxhcHBseTp1fSxyb290T3BlbkNsb3NlOntjaGVjazpqLGluaXQ6ZmFsc2UsYXBwbHk6eX0sYXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDp2fSxmb2N1c2FibGU6e3JlZmluZTp0cnVlLGluaXQ6dHJ1ZX19LG1lbWJlcnM6e19fc3Y6bnVsbCxTRUxFQ1RJT05fTUFOQUdFUjpxeC51aS50cmVlLlNlbGVjdGlvbk1hbmFnZXIsZ2V0Q2hpbGRyZW5Db250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3N2O30sX2FwcGx5Um9vdDpmdW5jdGlvbihBLEIpe3ZhciBDPXRoaXMuZ2V0Q2hpbGRyZW5Db250YWluZXIoKTtpZihCKXtDLnJlbW92ZShCKTtpZihCLmhhc0NoaWxkcmVuKCkpe0MucmVtb3ZlKEIuZ2V0Q2hpbGRyZW5Db250YWluZXIoKSk7fX1pZihBKXtDLmFkZChBKTtpZihBLmhhc0NoaWxkcmVuKCkpe0MuYWRkKEEuZ2V0Q2hpbGRyZW5Db250YWluZXIoKSk7fUEuc2V0VmlzaWJpbGl0eSh0aGlzLmdldEhpZGVSb290KCk/aDpnKTtBLnJlY3Vyc2l2ZUFkZFRvV2lkZ2V0UXVldWUoKTt9fSxfYXBwbHlIaWRlUm9vdDpmdW5jdGlvbihELEUpe3ZhciBGPXRoaXMuZ2V0Um9vdCgpO2lmKCFGKXtyZXR1cm47fUYuc2V0VmlzaWJpbGl0eShEP2g6Zyk7Ri5yZWN1cnNpdmVBZGRUb1dpZGdldFF1ZXVlKCk7fSxfYXBwbHlSb290T3BlbkNsb3NlOmZ1bmN0aW9uKEcsSCl7dmFyIEk9dGhpcy5nZXRSb290KCk7aWYoIUkpe3JldHVybjt9SS5yZWN1cnNpdmVBZGRUb1dpZGdldFF1ZXVlKCk7fSxfZ2V0Q29udGVudFBhZGRpbmdUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3N2O30sZ2V0TmV4dE5vZGVPZjpmdW5jdGlvbihKLEspe2lmKChLIT09ZmFsc2V8fEouaXNPcGVuKCkpJiZKLmhhc0NoaWxkcmVuKCkpe3JldHVybiBKLmdldENoaWxkcmVuKClbMF07fXdoaWxlKEope3ZhciBwYXJlbnQ9Si5nZXRQYXJlbnQoKTtpZighcGFyZW50KXtyZXR1cm4gbnVsbDt9dmFyIE09cGFyZW50LmdldENoaWxkcmVuKCk7dmFyIEw9TS5pbmRleE9mKEopO2lmKEw+LTEmJkw8TS5sZW5ndGgtMSl7cmV0dXJuIE1bTCsxXTt9Sj1wYXJlbnQ7fXJldHVybiBudWxsO30sZ2V0UHJldmlvdXNOb2RlT2Y6ZnVuY3Rpb24oTixPKXt2YXIgcGFyZW50PU4uZ2V0UGFyZW50KCk7aWYoIXBhcmVudCl7cmV0dXJuIG51bGw7fWlmKHRoaXMuZ2V0SGlkZVJvb3QoKSl7aWYocGFyZW50PT10aGlzLmdldFJvb3QoKSl7aWYocGFyZW50LmdldENoaWxkcmVuKClbMF09PU4pe3JldHVybiBudWxsO319fWVsc2V7aWYoTj09dGhpcy5nZXRSb290KCkpe3JldHVybiBudWxsO319dmFyIFI9cGFyZW50LmdldENoaWxkcmVuKCk7dmFyIFA9Ui5pbmRleE9mKE4pO2lmKFA+MCl7dmFyIFE9UltQLTFdO3doaWxlKChPIT09ZmFsc2V8fFEuaXNPcGVuKCkpJiZRLmhhc0NoaWxkcmVuKCkpe3ZhciBTPVEuZ2V0Q2hpbGRyZW4oKTtRPVNbUy5sZW5ndGgtMV07fXJldHVybiBRO31lbHNle3JldHVybiBwYXJlbnQ7fX0sZ2V0TmV4dFNpYmxpbmdPZjpmdW5jdGlvbihUKXtpZihUPT10aGlzLmdldFJvb3QoKSl7cmV0dXJuIG51bGw7fXZhciBwYXJlbnQ9VC5nZXRQYXJlbnQoKTt2YXIgVT1wYXJlbnQuZ2V0Q2hpbGRyZW4oKTt2YXIgVj1VLmluZGV4T2YoVCk7aWYoVjxVLmxlbmd0aC0xKXtyZXR1cm4gVVtWKzFdO31yZXR1cm4gbnVsbDt9LGdldFByZXZpb3VzU2libGluZ09mOmZ1bmN0aW9uKFcpe2lmKFc9PXRoaXMuZ2V0Um9vdCgpKXtyZXR1cm4gbnVsbDt9dmFyIHBhcmVudD1XLmdldFBhcmVudCgpO3ZhciBYPXBhcmVudC5nZXRDaGlsZHJlbigpO3ZhciBZPVguaW5kZXhPZihXKTtpZihZPjApe3JldHVybiBYW1ktMV07fXJldHVybiBudWxsO30sZ2V0SXRlbXM6ZnVuY3Rpb24oYmEsYmIpe2lmKHRoaXMuZ2V0Um9vdCgpIT1udWxsKXtyZXR1cm4gdGhpcy5nZXRSb290KCkuZ2V0SXRlbXMoYmEsYmIsdGhpcy5nZXRIaWRlUm9vdCgpKTt9ZWxzZXtyZXR1cm4gW107fX0sZ2V0Q2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmdldFJvb3QoKSE9bnVsbCl7cmV0dXJuIFt0aGlzLmdldFJvb3QoKV07fWVsc2V7cmV0dXJuIFtdO319LGdldFRyZWVJdGVtOmZ1bmN0aW9uKGJjKXt3aGlsZShiYyl7aWYoYmM9PXRoaXMpe3JldHVybiBudWxsO31pZihiYyBpbnN0YW5jZW9mIHF4LnVpLnRyZWUuQWJzdHJhY3RUcmVlSXRlbSl7cmV0dXJuIGJjO31iYz1iYy5nZXRMYXlvdXRQYXJlbnQoKTt9cmV0dXJuIG51bGw7fSxfYXBwbHlPcGVuTW9kZTpmdW5jdGlvbihiZCxiZSl7aWYoYmU9PWspe3RoaXMucmVtb3ZlTGlzdGVuZXIoayx0aGlzLl9vbk9wZW4sdGhpcyk7fWVsc2UgaWYoYmU9PWwpe3RoaXMucmVtb3ZlTGlzdGVuZXIobCx0aGlzLl9vbk9wZW4sdGhpcyk7fWlmKGJkPT1rKXt0aGlzLmFkZExpc3RlbmVyKGssdGhpcy5fb25PcGVuLHRoaXMpO31lbHNlIGlmKGJkPT1sKXt0aGlzLmFkZExpc3RlbmVyKGwsdGhpcy5fb25PcGVuLHRoaXMpO319LF9vbk9wZW46ZnVuY3Rpb24oZSl7dmFyIGJmPXRoaXMuZ2V0VHJlZUl0ZW0oZS5nZXRUYXJnZXQoKSk7aWYoIWJmfHwhYmYuaXNPcGVuYWJsZSgpKXtyZXR1cm47fWJmLnNldE9wZW4oIWJmLmlzT3BlbigpKTtlLnN0b3BQcm9wYWdhdGlvbigpO30sX29uQ2hhbmdlU2VsZWN0aW9uOmZ1bmN0aW9uKGUpe3ZhciBiaD1lLmdldERhdGEoKTtmb3IodmFyIGk9MDtpPGJoLmxlbmd0aDtpKyspe3ZhciBiZz1iaFtpXTt3aGlsZShiZy5nZXRQYXJlbnQoKSE9bnVsbCl7Ymc9YmcuZ2V0UGFyZW50KCk7Ymcuc2V0T3Blbih0cnVlKTt9fX0sX29uS2V5UHJlc3M6ZnVuY3Rpb24oZSl7dmFyIGJpPXRoaXMuX2dldExlYWRJdGVtKCk7aWYoYmkhPT1udWxsKXtzd2l0Y2goZS5nZXRLZXlJZGVudGlmaWVyKCkpe2Nhc2UgYjppZihiaS5pc09wZW5hYmxlKCkmJmJpLmlzT3BlbigpKXtiaS5zZXRPcGVuKGZhbHNlKTt9YnJlYWs7Y2FzZSBwOmlmKGJpLmlzT3BlbmFibGUoKSYmIWJpLmlzT3BlbigpKXtiaS5zZXRPcGVuKHRydWUpO31icmVhaztjYXNlIGE6Y2FzZSBjOmlmKGJpLmlzT3BlbmFibGUoKSl7YmkudG9nZ2xlT3BlbigpO31icmVhazt9fX19LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fZGlzcG9zZU9iamVjdHMobik7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGQ9Ii4iLGM9ImFwaXZpZXdlci51aS5QYWNrYWdlVHJlZSIsYj0iRG9jdW1lbnRhdGlvbiIsYT0iX19TUiI7cXguQ2xhc3MuZGVmaW5lKGMse2V4dGVuZDpxeC51aS50cmVlLlRyZWUsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXgudWkudHJlZS5UcmVlLmNhbGwodGhpcyxiKTt0aGlzLnNldERlY29yYXRvcihudWxsKTt0aGlzLl9fU1I9bmV3IHF4LnVpLnRyZWUuVHJlZUZvbGRlcigiUGFja2FnZXMiKTt0aGlzLl9fU1Iuc2V0T3Blbih0cnVlKTt0aGlzLnNldFJvb3QodGhpcy5fX1NSKTt0aGlzLnNldFNlbGVjdGlvbihbdGhpcy5fX1NSXSk7dGhpcy5fY2xhc3NUcmVlTm9kZUhhc2g9e307fSxtZW1iZXJzOntfX1NSOm51bGwsc2V0VHJlZURhdGE6ZnVuY3Rpb24oZSl7dGhpcy5fZG9jVHJlZT1lO3RoaXMuX19TVCh0aGlzLl9fU1IsZSwwKTtpZih0aGlzLl93YW50ZWRDbGFzc05hbWUpe3RoaXMuc2VsZWN0VHJlZU5vZGVCeUNsYXNzTmFtZSh0aGlzLl93YW50ZWRDbGFzc05hbWUpO3RoaXMuX3dhbnRlZENsYXNzTmFtZT1udWxsO319LHNlbGVjdFRyZWVOb2RlQnlDbGFzc05hbWU6ZnVuY3Rpb24oZil7aWYodGhpcy5fZG9jVHJlZT09bnVsbCl7dGhpcy5fd2FudGVkQ2xhc3NOYW1lPWY7cmV0dXJuIHRydWU7fXZhciBqPWYuc3BsaXQoZCk7dmFyIGg9alswXTt2YXIgaT0wO2Rve3ZhciBnPXRoaXMuX2NsYXNzVHJlZU5vZGVIYXNoW2hdO2lmKCFnKXtyZXR1cm4gZmFsc2U7fWlmKCFnLmxvYWRlZCl7Zy5zZXRPcGVuKHRydWUpO31pKys7aCs9ZCtqW2ldO313aGlsZShpPGoubGVuZ3RoKTt0aGlzLnNldFNlbGVjdGlvbihbZ10pO3RoaXMuc2Nyb2xsQ2hpbGRJbnRvVmlldyhnKTtyZXR1cm4gdHJ1ZTt9LF9fU1M6ZnVuY3Rpb24oayxsLG0pe3ZhciBzZWxmPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWsubG9hZGVkKXtzZWxmLl9fU1QoayxsLG0rMSk7ay5zZXRPcGVuU3ltYm9sTW9kZSgiYWx3YXlzIik7fX07fSxfX1NUOmZ1bmN0aW9uKG4sbyxwKXtuLmxvYWRlZD10cnVlO3ZhciBzPWFwaXZpZXdlci51aS5QYWNrYWdlVHJlZTt2YXIgcT1vLmdldFBhY2thZ2VzKCk7Zm9yKHZhciBpPTA7aTxxLmxlbmd0aDtpKyspe3ZhciByPXFbaV07dmFyIHY9YXBpdmlld2VyLlRyZWVVdGlsLmdldEljb25Vcmwocik7dmFyIHc9bmV3IHF4LnVpLnRyZWUuVHJlZUZvbGRlcihyLmdldE5hbWUoKSk7dy5zZXRJY29uKHYpO3cuc2V0T3BlblN5bWJvbE1vZGUoImFsd2F5cyIpO3cuc2V0VXNlckRhdGEoIm5vZGVOYW1lIixyLmdldEZ1bGxOYW1lKCkpO24uYWRkKHcpO3cuYWRkTGlzdGVuZXIoImNoYW5nZU9wZW4iLHRoaXMuX19TUyh3LHIscCsxKSx0aGlzKTtpZihwPHF4LmNvcmUuU2V0dGluZy5nZXQoImFwaXZpZXdlci5pbml0aWFsVHJlZURlcHRoIikmJnIuZ2V0UGFja2FnZXMoKS5sZW5ndGg+MCl7dy5zZXRPcGVuKHRydWUpO310aGlzLl9jbGFzc1RyZWVOb2RlSGFzaFtyLmdldEZ1bGxOYW1lKCldPXc7fXZhciB4PW8uZ2V0Q2xhc3NlcygpO2Zvcih2YXIgaT0wO2k8eC5sZW5ndGg7aSsrKXt2YXIgdT14W2ldO3ZhciB2PWFwaXZpZXdlci5UcmVlVXRpbC5nZXRJY29uVXJsKHUpO3ZhciB0PW5ldyBxeC51aS50cmVlLlRyZWVGb2xkZXIodS5nZXROYW1lKCkpO3Quc2V0SWNvbih2KTt0LnNldFVzZXJEYXRhKCJub2RlTmFtZSIsdS5nZXRGdWxsTmFtZSgpKTt0LnRyZWVUeXBlPXMuUEFDS0FHRV9UUkVFO24uYWRkKHQpO3RoaXMuX2NsYXNzVHJlZU5vZGVIYXNoW3UuZ2V0RnVsbE5hbWUoKV09dDt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9kb2NUcmVlPXRoaXMuX2NsYXNzVHJlZU5vZGVIYXNoPW51bGw7dGhpcy5fZGlzcG9zZU9iamVjdHMoYSk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9InF4LnVpLmNvcmUuc2Nyb2xsLklTY3JvbGxCYXIiLGE9InF4LmV2ZW50LnR5cGUuRGF0YSI7cXguSW50ZXJmYWNlLmRlZmluZShiLHtldmVudHM6eyJzY3JvbGwiOmF9LHByb3BlcnRpZXM6e29yaWVudGF0aW9uOnt9LG1heGltdW06e30scG9zaXRpb246e30sa25vYkZhY3Rvcjp7fX0sbWVtYmVyczp7c2Nyb2xsVG86ZnVuY3Rpb24oYyl7dGhpcy5hc3NlcnROdW1iZXIoYyk7fSxzY3JvbGxCeTpmdW5jdGlvbihkKXt0aGlzLmFzc2VydE51bWJlcihkKTt9LHNjcm9sbEJ5U3RlcHM6ZnVuY3Rpb24oZSl7dGhpcy5hc3NlcnROdW1iZXIoZSk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSJob3Jpem9udGFsIixqPSJweCIsaT0ic2Nyb2xsIixoPSJ2ZXJ0aWNhbCIsZz0iLTFweCIsZj0icXguY2xpZW50IixkPSIwIixjPSJoaWRkZW4iLGI9Im1vdXNlZG93biIsYT0icXgudWkuY29yZS5zY3JvbGwuTmF0aXZlU2Nyb2xsQmFyIix6PSJQb3NpdGl2ZU51bWJlciIseT0iX19wVCIseD0iSW50ZWdlciIsdz0ibW91c2Vtb3ZlIix2PSJfYXBwbHlNYXhpbXVtIix1PSJfYXBwbHlPcmllbnRhdGlvbiIsdD0iYXBwZWFyIixzPSJvcGVyYSIscj0iUG9zaXRpdmVJbnRlZ2VyIixxPSJtc2h0bWwiLG89Im1vdXNldXAiLHA9Ik51bWJlciIsbT0iX2FwcGx5UG9zaXRpb24iLG49InNjcm9sbGJhciIsbD0ibmF0aXZlIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LnVpLmNvcmUuV2lkZ2V0LGltcGxlbWVudDpxeC51aS5jb3JlLnNjcm9sbC5JU2Nyb2xsQmFyLGNvbnN0cnVjdDpmdW5jdGlvbihBKXtxeC51aS5jb3JlLldpZGdldC5jYWxsKHRoaXMpO3RoaXMuYWRkU3RhdGUobCk7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLmFkZExpc3RlbmVyKGksdGhpcy5fb25TY3JvbGwsdGhpcyk7dGhpcy5hZGRMaXN0ZW5lcihiLHRoaXMuX3N0b3BQcm9wYWdhdGlvbix0aGlzKTt0aGlzLmFkZExpc3RlbmVyKG8sdGhpcy5fc3RvcFByb3BhZ2F0aW9uLHRoaXMpO3RoaXMuYWRkTGlzdGVuZXIodyx0aGlzLl9zdG9wUHJvcGFnYXRpb24sdGhpcyk7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGYscykpe3RoaXMuYWRkTGlzdGVuZXIodCx0aGlzLl9vbkFwcGVhcix0aGlzKTt9dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLmFkZCh0aGlzLl9nZXRTY3JvbGxQYW5lRWxlbWVudCgpKTtpZihBIT1udWxsKXt0aGlzLnNldE9yaWVudGF0aW9uKEEpO31lbHNle3RoaXMuaW5pdE9yaWVudGF0aW9uKCk7fX0scHJvcGVydGllczp7YXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDpufSxvcmllbnRhdGlvbjp7Y2hlY2s6W2ssaF0saW5pdDprLGFwcGx5OnV9LG1heGltdW06e2NoZWNrOnIsYXBwbHk6dixpbml0OjEwMH0scG9zaXRpb246e2NoZWNrOnAsaW5pdDowLGFwcGx5Om0sZXZlbnQ6aX0sc2luZ2xlU3RlcDp7Y2hlY2s6eCxpbml0OjIwfSxrbm9iRmFjdG9yOntjaGVjazp6LG51bGxhYmxlOnRydWV9fSxtZW1iZXJzOntfX3BTOm51bGwsX19wVDpudWxsLF9nZXRTY3JvbGxQYW5lRWxlbWVudDpmdW5jdGlvbigpe2lmKCF0aGlzLl9fcFQpe3RoaXMuX19wVD1uZXcgcXguaHRtbC5FbGVtZW50KCk7fXJldHVybiB0aGlzLl9fcFQ7fSxyZW5kZXJMYXlvdXQ6ZnVuY3Rpb24oQix0b3AsQyxEKXt2YXIgRT1xeC51aS5jb3JlLldpZGdldC5wcm90b3R5cGUucmVuZGVyTGF5b3V0LmNhbGwodGhpcyxCLHRvcCxDLEQpO3RoaXMuX3VwZGF0ZVNjcm9sbEJhcigpO3JldHVybiBFO30sX2dldENvbnRlbnRIaW50OmZ1bmN0aW9uKCl7dmFyIEY9cXguYm9tLmVsZW1lbnQuT3ZlcmZsb3cuZ2V0U2Nyb2xsYmFyV2lkdGgoKTtyZXR1cm4ge3dpZHRoOnRoaXMuX19wUz8xMDA6RixtYXhXaWR0aDp0aGlzLl9fcFM/bnVsbDpGLG1pbldpZHRoOnRoaXMuX19wUz9udWxsOkYsaGVpZ2h0OnRoaXMuX19wUz9GOjEwMCxtYXhIZWlnaHQ6dGhpcy5fX3BTP0Y6bnVsbCxtaW5IZWlnaHQ6dGhpcy5fX3BTP0Y6bnVsbH07fSxfYXBwbHlFbmFibGVkOmZ1bmN0aW9uKEcsSCl7cXgudWkuY29yZS5XaWRnZXQucHJvdG90eXBlLl9hcHBseUVuYWJsZWQuY2FsbCh0aGlzLEcsSCk7dGhpcy5fdXBkYXRlU2Nyb2xsQmFyKCk7fSxfYXBwbHlNYXhpbXVtOmZ1bmN0aW9uKEkpe3RoaXMuX3VwZGF0ZVNjcm9sbEJhcigpO30sX2FwcGx5UG9zaXRpb246ZnVuY3Rpb24oSil7dmFyIGNvbnRlbnQ9dGhpcy5nZXRDb250ZW50RWxlbWVudCgpO2lmKHRoaXMuX19wUyl7Y29udGVudC5zY3JvbGxUb1goSik7fWVsc2V7Y29udGVudC5zY3JvbGxUb1koSik7fX0sX2FwcGx5T3JpZW50YXRpb246ZnVuY3Rpb24oSyxMKXt2YXIgTT10aGlzLl9fcFM9Sz09PWs7dGhpcy5zZXQoe2FsbG93R3Jvd1g6TSxhbGxvd1Nocmlua1g6TSxhbGxvd0dyb3dZOiFNLGFsbG93U2hyaW5rWTohTX0pO2lmKE0pe3RoaXMucmVwbGFjZVN0YXRlKGgsayk7fWVsc2V7dGhpcy5yZXBsYWNlU3RhdGUoayxoKTt9dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNldFN0eWxlcyh7b3ZlcmZsb3dYOk0/aTpjLG92ZXJmbG93WTpNP2M6aX0pO3F4LnVpLmNvcmUucXVldWUuTGF5b3V0LmFkZCh0aGlzKTt9LF91cGRhdGVTY3JvbGxCYXI6ZnVuY3Rpb24oKXt2YXIgTz10aGlzLl9fcFM7dmFyIFA9dGhpcy5nZXRCb3VuZHMoKTtpZighUCl7cmV0dXJuO31pZih0aGlzLmlzRW5hYmxlZCgpKXt2YXIgUT1PP1Aud2lkdGg6UC5oZWlnaHQ7dmFyIE49dGhpcy5nZXRNYXhpbXVtKCkrUTt9ZWxzZXtOPTA7fWlmKHF4LmNvcmUuVmFyaWFudC5pc1NldChmLHEpKXt2YXIgUD10aGlzLmdldEJvdW5kcygpO3RoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5zZXRTdHlsZXMoe2xlZnQ6Tz9kOmcsdG9wOk8/ZzpkLHdpZHRoOihPP1Aud2lkdGg6UC53aWR0aCsxKStqLGhlaWdodDooTz9QLmhlaWdodCsxOlAuaGVpZ2h0KStqfSk7fXRoaXMuX2dldFNjcm9sbFBhbmVFbGVtZW50KCkuc2V0U3R5bGVzKHtsZWZ0OjAsdG9wOjAsd2lkdGg6KE8/TjoxKStqLGhlaWdodDooTz8xOk4pK2p9KTt0aGlzLnNjcm9sbFRvKHRoaXMuZ2V0UG9zaXRpb24oKSk7fSxzY3JvbGxUbzpmdW5jdGlvbihSKXt0aGlzLnNldFBvc2l0aW9uKE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRNYXhpbXVtKCksUikpKTt9LHNjcm9sbEJ5OmZ1bmN0aW9uKFMpe3RoaXMuc2Nyb2xsVG8odGhpcy5nZXRQb3NpdGlvbigpK1MpO30sc2Nyb2xsQnlTdGVwczpmdW5jdGlvbihUKXt2YXIgVT10aGlzLmdldFNpbmdsZVN0ZXAoKTt0aGlzLnNjcm9sbEJ5KFQqVSk7fSxfb25TY3JvbGw6ZnVuY3Rpb24oZSl7dmFyIFc9dGhpcy5nZXRDb250ZW50RWxlbWVudCgpO3ZhciBWPXRoaXMuX19wUz9XLmdldFNjcm9sbFgoKTpXLmdldFNjcm9sbFkoKTt0aGlzLnNldFBvc2l0aW9uKFYpO30sX29uQXBwZWFyOmZ1bmN0aW9uKGUpe3RoaXMuc2Nyb2xsVG8odGhpcy5nZXRQb3NpdGlvbigpKTt9LF9zdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX2Rpc3Bvc2VPYmplY3RzKHkpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSJzbGlkZXIiLGo9Imhvcml6b250YWwiLGk9ImJ1dHRvbi1iZWdpbiIsaD0idmVydGljYWwiLGc9ImJ1dHRvbi1lbmQiLGY9IkludGVnZXIiLGQ9ImV4ZWN1dGUiLGM9InJpZ2h0IixiPSJsZWZ0IixhPSJkb3duIix6PSJ1cCIseT0iUG9zaXRpdmVOdW1iZXIiLHg9ImNoYW5nZVZhbHVlIix3PSJxeC5sYW5nLlR5cGUuaXNOdW1iZXIodmFsdWUpJiZ2YWx1ZT49MCYmdmFsdWU8PXRoaXMuZ2V0TWF4aW11bSgpIix2PSJfYXBwbHlLbm9iRmFjdG9yIix1PSJrbm9iIix0PSJxeC51aS5jb3JlLnNjcm9sbC5TY3JvbGxCYXIiLHM9InJlc2l6ZSIscj0iX2FwcGx5T3JpZW50YXRpb24iLHE9Il9hcHBseVBhZ2VTdGVwIixvPSJQb3NpdGl2ZUludGVnZXIiLHA9InNjcm9sbCIsbT0iX2FwcGx5UG9zaXRpb24iLG49InNjcm9sbGJhciIsbD0iX2FwcGx5TWF4aW11bSI7cXguQ2xhc3MuZGVmaW5lKHQse2V4dGVuZDpxeC51aS5jb3JlLldpZGdldCxpbXBsZW1lbnQ6cXgudWkuY29yZS5zY3JvbGwuSVNjcm9sbEJhcixjb25zdHJ1Y3Q6ZnVuY3Rpb24oQSl7cXgudWkuY29yZS5XaWRnZXQuY2FsbCh0aGlzKTt0aGlzLl9jcmVhdGVDaGlsZENvbnRyb2woaSk7dGhpcy5fY3JlYXRlQ2hpbGRDb250cm9sKGspLmFkZExpc3RlbmVyKHMsdGhpcy5fb25SZXNpemVTbGlkZXIsdGhpcyk7dGhpcy5fY3JlYXRlQ2hpbGRDb250cm9sKGcpO2lmKEEhPW51bGwpe3RoaXMuc2V0T3JpZW50YXRpb24oQSk7fWVsc2V7dGhpcy5pbml0T3JpZW50YXRpb24oKTt9fSxwcm9wZXJ0aWVzOnthcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0Om59LG9yaWVudGF0aW9uOntjaGVjazpbaixoXSxpbml0OmosYXBwbHk6cn0sbWF4aW11bTp7Y2hlY2s6byxhcHBseTpsLGluaXQ6MTAwfSxwb3NpdGlvbjp7Y2hlY2s6dyxpbml0OjAsYXBwbHk6bSxldmVudDpwfSxzaW5nbGVTdGVwOntjaGVjazpmLGluaXQ6MjB9LHBhZ2VTdGVwOntjaGVjazpmLGluaXQ6MTAsYXBwbHk6cX0sa25vYkZhY3Rvcjp7Y2hlY2s6eSxhcHBseTp2LG51bGxhYmxlOnRydWV9fSxtZW1iZXJzOntfX29DOjIsX2NyZWF0ZUNoaWxkQ29udHJvbEltcGw6ZnVuY3Rpb24oQixDKXt2YXIgRDtzd2l0Y2goQil7Y2FzZSBrOkQ9bmV3IHF4LnVpLmNvcmUuc2Nyb2xsLlNjcm9sbFNsaWRlcigpO0Quc2V0UGFnZVN0ZXAoMTAwKTtELnNldEZvY3VzYWJsZShmYWxzZSk7RC5hZGRMaXN0ZW5lcih4LHRoaXMuX29uQ2hhbmdlU2xpZGVyVmFsdWUsdGhpcyk7dGhpcy5fYWRkKEQse2ZsZXg6MX0pO2JyZWFrO2Nhc2UgaTpEPW5ldyBxeC51aS5mb3JtLlJlcGVhdEJ1dHRvbigpO0Quc2V0Rm9jdXNhYmxlKGZhbHNlKTtELmFkZExpc3RlbmVyKGQsdGhpcy5fb25FeGVjdXRlQmVnaW4sdGhpcyk7dGhpcy5fYWRkKEQpO2JyZWFrO2Nhc2UgZzpEPW5ldyBxeC51aS5mb3JtLlJlcGVhdEJ1dHRvbigpO0Quc2V0Rm9jdXNhYmxlKGZhbHNlKTtELmFkZExpc3RlbmVyKGQsdGhpcy5fb25FeGVjdXRlRW5kLHRoaXMpO3RoaXMuX2FkZChEKTticmVhazt9cmV0dXJuIER8fHF4LnVpLmNvcmUuV2lkZ2V0LnByb3RvdHlwZS5fY3JlYXRlQ2hpbGRDb250cm9sSW1wbC5jYWxsKHRoaXMsQik7fSxfYXBwbHlNYXhpbXVtOmZ1bmN0aW9uKEUpe3RoaXMuZ2V0Q2hpbGRDb250cm9sKGspLnNldE1heGltdW0oRSk7fSxfYXBwbHlQb3NpdGlvbjpmdW5jdGlvbihGKXt0aGlzLmdldENoaWxkQ29udHJvbChrKS5zZXRWYWx1ZShGKTt9LF9hcHBseUtub2JGYWN0b3I6ZnVuY3Rpb24oRyl7dGhpcy5nZXRDaGlsZENvbnRyb2woaykuc2V0S25vYkZhY3RvcihHKTt9LF9hcHBseVBhZ2VTdGVwOmZ1bmN0aW9uKEgpe3RoaXMuZ2V0Q2hpbGRDb250cm9sKGspLnNldFBhZ2VTdGVwKEgpO30sX2FwcGx5T3JpZW50YXRpb246ZnVuY3Rpb24oSSxKKXt2YXIgSz10aGlzLl9nZXRMYXlvdXQoKTtpZihLKXtLLmRpc3Bvc2UoKTt9aWYoST09PWope3RoaXMuX3NldExheW91dChuZXcgcXgudWkubGF5b3V0LkhCb3goKSk7dGhpcy5zZXRBbGxvd1N0cmV0Y2hYKHRydWUpO3RoaXMuc2V0QWxsb3dTdHJldGNoWShmYWxzZSk7dGhpcy5yZXBsYWNlU3RhdGUoaCxqKTt0aGlzLmdldENoaWxkQ29udHJvbChpKS5yZXBsYWNlU3RhdGUoeixiKTt0aGlzLmdldENoaWxkQ29udHJvbChnKS5yZXBsYWNlU3RhdGUoYSxjKTt9ZWxzZXt0aGlzLl9zZXRMYXlvdXQobmV3IHF4LnVpLmxheW91dC5WQm94KCkpO3RoaXMuc2V0QWxsb3dTdHJldGNoWChmYWxzZSk7dGhpcy5zZXRBbGxvd1N0cmV0Y2hZKHRydWUpO3RoaXMucmVwbGFjZVN0YXRlKGosaCk7dGhpcy5nZXRDaGlsZENvbnRyb2woaSkucmVwbGFjZVN0YXRlKGIseik7dGhpcy5nZXRDaGlsZENvbnRyb2woZykucmVwbGFjZVN0YXRlKGMsYSk7fXRoaXMuZ2V0Q2hpbGRDb250cm9sKGspLnNldE9yaWVudGF0aW9uKEkpO30sc2Nyb2xsVG86ZnVuY3Rpb24oTCl7dGhpcy5nZXRDaGlsZENvbnRyb2woaykuc2xpZGVUbyhMKTt9LHNjcm9sbEJ5OmZ1bmN0aW9uKE0pe3RoaXMuZ2V0Q2hpbGRDb250cm9sKGspLnNsaWRlQnkoTSk7fSxzY3JvbGxCeVN0ZXBzOmZ1bmN0aW9uKE4pe3ZhciBPPXRoaXMuZ2V0U2luZ2xlU3RlcCgpO3RoaXMuZ2V0Q2hpbGRDb250cm9sKGspLnNsaWRlQnkoTipPKTt9LF9vbkV4ZWN1dGVCZWdpbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbEJ5KC10aGlzLmdldFNpbmdsZVN0ZXAoKSk7fSxfb25FeGVjdXRlRW5kOmZ1bmN0aW9uKGUpe3RoaXMuc2Nyb2xsQnkodGhpcy5nZXRTaW5nbGVTdGVwKCkpO30sX29uQ2hhbmdlU2xpZGVyVmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zZXRQb3NpdGlvbihlLmdldERhdGEoKSk7fSxfb25SZXNpemVTbGlkZXI6ZnVuY3Rpb24oZSl7dmFyIFA9dGhpcy5nZXRDaGlsZENvbnRyb2woaykuZ2V0Q2hpbGRDb250cm9sKHUpO3ZhciBTPVAuZ2V0U2l6ZUhpbnQoKTt2YXIgUT1mYWxzZTt2YXIgUj10aGlzLmdldENoaWxkQ29udHJvbChrKS5nZXRJbm5lclNpemUoKTtpZih0aGlzLmdldE9yaWVudGF0aW9uKCk9PWgpe2lmKFIuaGVpZ2h0PFMubWluSGVpZ2h0K3RoaXMuX19vQyl7UT10cnVlO319ZWxzZXtpZihSLndpZHRoPFMubWluV2lkdGgrdGhpcy5fX29DKXtRPXRydWU7fX1pZihRKXtQLmV4Y2x1ZGUoKTt9ZWxzZXtQLnNob3coKTt9fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC51aS5mb3JtLklSYW5nZSI7cXguSW50ZXJmYWNlLmRlZmluZShhLHttZW1iZXJzOntzZXRNaW5pbXVtOmZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT0xO30sZ2V0TWluaW11bTpmdW5jdGlvbigpe30sc2V0TWF4aW11bTpmdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09MTt9LGdldE1heGltdW06ZnVuY3Rpb24oKXt9LHNldFNpbmdsZVN0ZXA6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PTE7fSxnZXRTaW5nbGVTdGVwOmZ1bmN0aW9uKCl7fSxzZXRQYWdlU3RlcDpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09MTt9LGdldFBhZ2VTdGVwOmZ1bmN0aW9uKCl7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJxeC51aS5mb3JtLklOdW1iZXJGb3JtIixhPSJxeC5ldmVudC50eXBlLkRhdGEiO3F4LkludGVyZmFjZS5kZWZpbmUoYix7ZXZlbnRzOnsiY2hhbmdlVmFsdWUiOmF9LG1lbWJlcnM6e3NldFZhbHVlOmZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT0xO30scmVzZXRWYWx1ZTpmdW5jdGlvbigpe30sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGs9Imtub2IiLGo9Imhvcml6b250YWwiLGk9InZlcnRpY2FsIixoPSJJbnRlZ2VyIixnPSJob3ZlcmVkIixmPSJsZWZ0IixkPSJ0b3AiLGM9Im1vdXNldXAiLGI9InByZXNzZWQiLGE9InB4IixWPSJjaGFuZ2VWYWx1ZSIsVT0iaW50ZXJ2YWwiLFQ9Im1vdXNlbW92ZSIsUz0icmVzaXplIixSPSJzbGlkZXIiLFE9Im1vdXNlZG93biIsUD0iUGFnZVVwIixPPSJtb3VzZW91dCIsTj0ncXguZXZlbnQudHlwZS5EYXRhJyxNPSJMZWZ0IixyPSJEb3duIixzPSJVcCIscD0iZGJsY2xpY2siLHE9InF4LnVpLmZvcm0uU2xpZGVyIixuPSJQYWdlRG93biIsbz0ibW91c2V3aGVlbCIsbD0iX2FwcGx5VmFsdWUiLG09Il9hcHBseUtub2JGYWN0b3IiLHQ9IkVuZCIsdT0iaGVpZ2h0IixCPSJSaWdodCIsej0id2lkdGgiLEY9Il9hcHBseU9yaWVudGF0aW9uIixEPSJIb21lIixJPSJtb3VzZW92ZXIiLEg9ImZsb29yIix3PSJfYXBwbHlNaW5pbXVtIixMPSJjbGljayIsSz0idHlwZW9mIHZhbHVlPT09J251bWJlcicmJnZhbHVlPj10aGlzLmdldE1pbmltdW0oKSYmdmFsdWU8PXRoaXMuZ2V0TWF4aW11bSgpIixKPSJrZXlwcmVzcyIsdj0iY2VpbCIseD0ibG9zZWNhcHR1cmUiLHk9ImNvbnRleHRtZW51IixBPSJfYXBwbHlNYXhpbXVtIixDPSJOdW1iZXIiLEU9ImNoYW5nZU1heGltdW0iLEc9ImNoYW5nZU1pbmltdW0iO3F4LkNsYXNzLmRlZmluZShxLHtleHRlbmQ6cXgudWkuY29yZS5XaWRnZXQsaW1wbGVtZW50OltxeC51aS5mb3JtLklGb3JtLHF4LnVpLmZvcm0uSU51bWJlckZvcm0scXgudWkuZm9ybS5JUmFuZ2VdLGluY2x1ZGU6W3F4LnVpLmZvcm0uTUZvcm1dLGNvbnN0cnVjdDpmdW5jdGlvbihXKXtxeC51aS5jb3JlLldpZGdldC5jYWxsKHRoaXMpO3RoaXMuX3NldExheW91dChuZXcgcXgudWkubGF5b3V0LkNhbnZhcygpKTt0aGlzLmFkZExpc3RlbmVyKEosdGhpcy5fb25LZXlQcmVzcyk7dGhpcy5hZGRMaXN0ZW5lcihvLHRoaXMuX29uTW91c2VXaGVlbCk7dGhpcy5hZGRMaXN0ZW5lcihRLHRoaXMuX29uTW91c2VEb3duKTt0aGlzLmFkZExpc3RlbmVyKGMsdGhpcy5fb25Nb3VzZVVwKTt0aGlzLmFkZExpc3RlbmVyKHgsdGhpcy5fb25Nb3VzZVVwKTt0aGlzLmFkZExpc3RlbmVyKFMsdGhpcy5fb25VcGRhdGUpO3RoaXMuYWRkTGlzdGVuZXIoeSx0aGlzLl9vblN0b3BFdmVudCk7dGhpcy5hZGRMaXN0ZW5lcihMLHRoaXMuX29uU3RvcEV2ZW50KTt0aGlzLmFkZExpc3RlbmVyKHAsdGhpcy5fb25TdG9wRXZlbnQpO2lmKFchPW51bGwpe3RoaXMuc2V0T3JpZW50YXRpb24oVyk7fWVsc2V7dGhpcy5pbml0T3JpZW50YXRpb24oKTt9fSxldmVudHM6e2NoYW5nZVZhbHVlOk59LHByb3BlcnRpZXM6e2FwcGVhcmFuY2U6e3JlZmluZTp0cnVlLGluaXQ6Un0sZm9jdXNhYmxlOntyZWZpbmU6dHJ1ZSxpbml0OnRydWV9LG9yaWVudGF0aW9uOntjaGVjazpbaixpXSxpbml0OmosYXBwbHk6Rn0sdmFsdWU6e2NoZWNrOkssaW5pdDowLGFwcGx5OmwsbnVsbGFibGU6dHJ1ZX0sbWluaW11bTp7Y2hlY2s6aCxpbml0OjAsYXBwbHk6dyxldmVudDpHfSxtYXhpbXVtOntjaGVjazpoLGluaXQ6MTAwLGFwcGx5OkEsZXZlbnQ6RX0sc2luZ2xlU3RlcDp7Y2hlY2s6aCxpbml0OjF9LHBhZ2VTdGVwOntjaGVjazpoLGluaXQ6MTB9LGtub2JGYWN0b3I6e2NoZWNrOkMsYXBwbHk6bSxudWxsYWJsZTp0cnVlfX0sbWVtYmVyczp7X19uQTpudWxsLF9fbkI6bnVsbCxfX25DOm51bGwsX19uRDpudWxsLF9fbkU6bnVsbCxfX25GOm51bGwsX19uRzpudWxsLF9fbkg6bnVsbCxfX25JOm51bGwsX19uSjpudWxsLF9fbks6bnVsbCxfX25MOm51bGwsX2ZvcndhcmRTdGF0ZXM6e2ludmFsaWQ6dHJ1ZX0sX2NyZWF0ZUNoaWxkQ29udHJvbEltcGw6ZnVuY3Rpb24oWCxZKXt2YXIgYmE7c3dpdGNoKFgpe2Nhc2UgazpiYT1uZXcgcXgudWkuY29yZS5XaWRnZXQoKTtiYS5hZGRMaXN0ZW5lcihTLHRoaXMuX29uVXBkYXRlLHRoaXMpO2JhLmFkZExpc3RlbmVyKEksdGhpcy5fb25Nb3VzZU92ZXIpO2JhLmFkZExpc3RlbmVyKE8sdGhpcy5fb25Nb3VzZU91dCk7dGhpcy5fYWRkKGJhKTticmVhazt9cmV0dXJuIGJhfHxxeC51aS5jb3JlLldpZGdldC5wcm90b3R5cGUuX2NyZWF0ZUNoaWxkQ29udHJvbEltcGwuY2FsbCh0aGlzLFgpO30sX29uTW91c2VPdmVyOmZ1bmN0aW9uKGUpe3RoaXMuYWRkU3RhdGUoZyk7fSxfb25Nb3VzZU91dDpmdW5jdGlvbihlKXt0aGlzLnJlbW92ZVN0YXRlKGcpO30sX29uTW91c2VXaGVlbDpmdW5jdGlvbihlKXt2YXIgYmI9ZS5nZXRXaGVlbERlbHRhKCk+MD8xOi0xO3RoaXMuc2xpZGVCeShiYip0aGlzLmdldFNpbmdsZVN0ZXAoKSk7ZS5zdG9wKCk7fSxfb25LZXlQcmVzczpmdW5jdGlvbihlKXt2YXIgYmQ9dGhpcy5nZXRPcmllbnRhdGlvbigpPT09ajt2YXIgYmM9YmQ/TTpzO3ZhciBmb3J3YXJkPWJkP0I6cjtzd2l0Y2goZS5nZXRLZXlJZGVudGlmaWVyKCkpe2Nhc2UgZm9yd2FyZDp0aGlzLnNsaWRlRm9yd2FyZCgpO2JyZWFrO2Nhc2UgYmM6dGhpcy5zbGlkZUJhY2soKTticmVhaztjYXNlIG46dGhpcy5zbGlkZVBhZ2VGb3J3YXJkKCk7YnJlYWs7Y2FzZSBQOnRoaXMuc2xpZGVQYWdlQmFjaygpO2JyZWFrO2Nhc2UgRDp0aGlzLnNsaWRlVG9CZWdpbigpO2JyZWFrO2Nhc2UgdDp0aGlzLnNsaWRlVG9FbmQoKTticmVhaztkZWZhdWx0OnJldHVybjt9ZS5zdG9wKCk7fSxfb25Nb3VzZURvd246ZnVuY3Rpb24oZSl7aWYodGhpcy5fX25EKXtyZXR1cm47fXZhciBiZz10aGlzLl9fbk47dmFyIGJlPXRoaXMuZ2V0Q2hpbGRDb250cm9sKGspO3ZhciBiZj1iZz9mOmQ7dmFyIGJpPWJnP2UuZ2V0RG9jdW1lbnRMZWZ0KCk6ZS5nZXREb2N1bWVudFRvcCgpO3ZhciBiaj10aGlzLl9fbkE9cXguYm9tLmVsZW1lbnQuTG9jYXRpb24uZ2V0KHRoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5nZXREb21FbGVtZW50KCkpW2JmXTt2YXIgYmg9dGhpcy5fX25CPXF4LmJvbS5lbGVtZW50LkxvY2F0aW9uLmdldChiZS5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0RG9tRWxlbWVudCgpKVtiZl07aWYoZS5nZXRUYXJnZXQoKT09PWJlKXt0aGlzLl9fbkQ9dHJ1ZTtpZighdGhpcy5fX25KKXt0aGlzLl9fbko9bmV3IHF4LmV2ZW50LlRpbWVyKDEwMCk7dGhpcy5fX25KLmFkZExpc3RlbmVyKFUsdGhpcy5fZmlyZVZhbHVlLHRoaXMpO310aGlzLl9fbkouc3RhcnQoKTt0aGlzLl9fbkU9YmkrYmotYmg7YmUuYWRkU3RhdGUoYik7fWVsc2V7dGhpcy5fX25GPXRydWU7dGhpcy5fX25HPWJpPD1iaD8tMToxO3RoaXMuX19uTyhlKTt0aGlzLl9vbkludGVydmFsKCk7aWYoIXRoaXMuX19uSSl7dGhpcy5fX25JPW5ldyBxeC5ldmVudC5UaW1lcigxMDApO3RoaXMuX19uSS5hZGRMaXN0ZW5lcihVLHRoaXMuX29uSW50ZXJ2YWwsdGhpcyk7fXRoaXMuX19uSS5zdGFydCgpO310aGlzLmFkZExpc3RlbmVyKFQsdGhpcy5fb25Nb3VzZU1vdmUpO3RoaXMuY2FwdHVyZSgpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fSxfb25Nb3VzZVVwOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX19uRCl7dGhpcy5yZWxlYXNlQ2FwdHVyZSgpO2RlbGV0ZSB0aGlzLl9fbkQ7dGhpcy5fX25KLnN0b3AoKTt0aGlzLl9maXJlVmFsdWUoKTtkZWxldGUgdGhpcy5fX25FO3RoaXMuZ2V0Q2hpbGRDb250cm9sKGspLnJlbW92ZVN0YXRlKGIpO2lmKGUuZ2V0VHlwZSgpPT09Yyl7dmFyIGJsO3ZhciBibTt2YXIgYms7aWYodGhpcy5fX25OKXtibD1lLmdldERvY3VtZW50TGVmdCgpLSh0aGlzLl92YWx1ZVRvUG9zaXRpb24odGhpcy5nZXRWYWx1ZSgpKSt0aGlzLl9fbkEpO2JrPXF4LmJvbS5lbGVtZW50LkxvY2F0aW9uLmdldCh0aGlzLmdldENvbnRlbnRFbGVtZW50KCkuZ2V0RG9tRWxlbWVudCgpKVtkXTtibT1lLmdldERvY3VtZW50VG9wKCktKGJrK3RoaXMuZ2V0Q2hpbGRDb250cm9sKGspLmdldEJvdW5kcygpLnRvcCk7fWVsc2V7Ymw9ZS5nZXREb2N1bWVudFRvcCgpLSh0aGlzLl92YWx1ZVRvUG9zaXRpb24odGhpcy5nZXRWYWx1ZSgpKSt0aGlzLl9fbkEpO2JrPXF4LmJvbS5lbGVtZW50LkxvY2F0aW9uLmdldCh0aGlzLmdldENvbnRlbnRFbGVtZW50KCkuZ2V0RG9tRWxlbWVudCgpKVtmXTtibT1lLmdldERvY3VtZW50TGVmdCgpLShiayt0aGlzLmdldENoaWxkQ29udHJvbChrKS5nZXRCb3VuZHMoKS5sZWZ0KTt9aWYoYm08MHx8Ym0+dGhpcy5fX25DfHxibDwwfHxibD50aGlzLl9fbkMpe3RoaXMuZ2V0Q2hpbGRDb250cm9sKGspLnJlbW92ZVN0YXRlKGcpO319fWVsc2UgaWYodGhpcy5fX25GKXt0aGlzLl9fbkkuc3RvcCgpO3RoaXMucmVsZWFzZUNhcHR1cmUoKTtkZWxldGUgdGhpcy5fX25GO2RlbGV0ZSB0aGlzLl9fbkc7ZGVsZXRlIHRoaXMuX19uSDt9dGhpcy5yZW1vdmVMaXN0ZW5lcihULHRoaXMuX29uTW91c2VNb3ZlKTtpZihlLmdldFR5cGUoKT09PWMpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0sX29uTW91c2VNb3ZlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX19uRCl7dmFyIGJvPXRoaXMuX19uTj9lLmdldERvY3VtZW50TGVmdCgpOmUuZ2V0RG9jdW1lbnRUb3AoKTt2YXIgYm49Ym8tdGhpcy5fX25FO3RoaXMuc2xpZGVUbyh0aGlzLl9wb3NpdGlvblRvVmFsdWUoYm4pKTt9ZWxzZSBpZih0aGlzLl9fbkYpe3RoaXMuX19uTyhlKTt9ZS5zdG9wUHJvcGFnYXRpb24oKTt9LF9vbkludGVydmFsOmZ1bmN0aW9uKGUpe3ZhciBicD10aGlzLmdldFZhbHVlKCkrKHRoaXMuX19uRyp0aGlzLmdldFBhZ2VTdGVwKCkpO2lmKGJwPHRoaXMuZ2V0TWluaW11bSgpKXticD10aGlzLmdldE1pbmltdW0oKTt9ZWxzZSBpZihicD50aGlzLmdldE1heGltdW0oKSl7YnA9dGhpcy5nZXRNYXhpbXVtKCk7fXZhciBicT10aGlzLl9fbkc9PS0xO2lmKChicSYmYnA8PXRoaXMuX19uSCl8fCghYnEmJmJwPj10aGlzLl9fbkgpKXticD10aGlzLl9fbkg7fXRoaXMuc2xpZGVUbyhicCk7fSxfb25VcGRhdGU6ZnVuY3Rpb24oZSl7dmFyIGJzPXRoaXMuZ2V0SW5uZXJTaXplKCk7dmFyIGJ0PXRoaXMuZ2V0Q2hpbGRDb250cm9sKGspLmdldEJvdW5kcygpO3ZhciBicj10aGlzLl9fbk4/ejp1O3RoaXMuX3VwZGF0ZUtub2JTaXplKCk7dGhpcy5fX25NPWJzW2JyXS1idFticl07dGhpcy5fX25DPWJ0W2JyXTt0aGlzLl91cGRhdGVLbm9iUG9zaXRpb24oKTt9LF9fbk46ZmFsc2UsX19uTTowLF9fbk86ZnVuY3Rpb24oZSl7dmFyIGJ1PXRoaXMuX19uTjt2YXIgYkI9YnU/ZS5nZXREb2N1bWVudExlZnQoKTplLmdldERvY3VtZW50VG9wKCk7dmFyIGJEPXRoaXMuX19uQTt2YXIgYnY9dGhpcy5fX25CO3ZhciBiRj10aGlzLl9fbkM7dmFyIGJDPWJCLWJEO2lmKGJCPj1idil7YkMtPWJGO312YXIgYno9dGhpcy5fcG9zaXRpb25Ub1ZhbHVlKGJDKTt2YXIgYnc9dGhpcy5nZXRNaW5pbXVtKCk7dmFyIGJ4PXRoaXMuZ2V0TWF4aW11bSgpO2lmKGJ6PGJ3KXtiej1idzt9ZWxzZSBpZihiej5ieCl7Yno9Yng7fWVsc2V7dmFyIGJBPXRoaXMuZ2V0VmFsdWUoKTt2YXIgYnk9dGhpcy5nZXRQYWdlU3RlcCgpO3ZhciBiRT10aGlzLl9fbkc8MD9IOnY7Yno9YkErKE1hdGhbYkVdKChiei1iQSkvYnkpKmJ5KTt9aWYodGhpcy5fX25IPT1udWxsfHwodGhpcy5fX25HPT0tMSYmYno8PXRoaXMuX19uSCl8fCh0aGlzLl9fbkc9PTEmJmJ6Pj10aGlzLl9fbkgpKXt0aGlzLl9fbkg9Yno7fX0sX3Bvc2l0aW9uVG9WYWx1ZTpmdW5jdGlvbihiRyl7dmFyIGJIPXRoaXMuX19uTTtpZihiSD09bnVsbHx8Ykg9PTApe3JldHVybiAwO312YXIgYko9YkcvYkg7aWYoYko8MCl7Yko9MDt9ZWxzZSBpZihiSj4xKXtiSj0xO312YXIgYkk9dGhpcy5nZXRNYXhpbXVtKCktdGhpcy5nZXRNaW5pbXVtKCk7cmV0dXJuIHRoaXMuZ2V0TWluaW11bSgpK01hdGgucm91bmQoYkkqYkopO30sX3ZhbHVlVG9Qb3NpdGlvbjpmdW5jdGlvbihiSyl7dmFyIGJMPXRoaXMuX19uTTtpZihiTD09bnVsbCl7cmV0dXJuIDA7fXZhciBiTT10aGlzLmdldE1heGltdW0oKS10aGlzLmdldE1pbmltdW0oKTtpZihiTT09MCl7cmV0dXJuIDA7fXZhciBiSz1iSy10aGlzLmdldE1pbmltdW0oKTt2YXIgYk49YksvYk07aWYoYk48MCl7Yk49MDt9ZWxzZSBpZihiTj4xKXtiTj0xO31yZXR1cm4gTWF0aC5yb3VuZChiTCpiTik7fSxfdXBkYXRlS25vYlBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5fc2V0S25vYlBvc2l0aW9uKHRoaXMuX3ZhbHVlVG9Qb3NpdGlvbih0aGlzLmdldFZhbHVlKCkpKTt9LF9zZXRLbm9iUG9zaXRpb246ZnVuY3Rpb24oYk8pe3ZhciBiUD10aGlzLmdldENoaWxkQ29udHJvbChrKS5nZXRDb250YWluZXJFbGVtZW50KCk7aWYodGhpcy5fX25OKXtiUC5zZXRTdHlsZShmLGJPK2EsdHJ1ZSk7fWVsc2V7YlAuc2V0U3R5bGUoZCxiTythLHRydWUpO319LF91cGRhdGVLbm9iU2l6ZTpmdW5jdGlvbigpe3ZhciBiUj10aGlzLmdldEtub2JGYWN0b3IoKTtpZihiUj09bnVsbCl7cmV0dXJuO312YXIgYlE9dGhpcy5nZXRJbm5lclNpemUoKTtpZihiUT09bnVsbCl7cmV0dXJuO31pZih0aGlzLl9fbk4pe3RoaXMuZ2V0Q2hpbGRDb250cm9sKGspLnNldFdpZHRoKE1hdGgucm91bmQoYlIqYlEud2lkdGgpKTt9ZWxzZXt0aGlzLmdldENoaWxkQ29udHJvbChrKS5zZXRIZWlnaHQoTWF0aC5yb3VuZChiUipiUS5oZWlnaHQpKTt9fSxzbGlkZVRvQmVnaW46ZnVuY3Rpb24oKXt0aGlzLnNsaWRlVG8odGhpcy5nZXRNaW5pbXVtKCkpO30sc2xpZGVUb0VuZDpmdW5jdGlvbigpe3RoaXMuc2xpZGVUbyh0aGlzLmdldE1heGltdW0oKSk7fSxzbGlkZUZvcndhcmQ6ZnVuY3Rpb24oKXt0aGlzLnNsaWRlQnkodGhpcy5nZXRTaW5nbGVTdGVwKCkpO30sc2xpZGVCYWNrOmZ1bmN0aW9uKCl7dGhpcy5zbGlkZUJ5KC10aGlzLmdldFNpbmdsZVN0ZXAoKSk7fSxzbGlkZVBhZ2VGb3J3YXJkOmZ1bmN0aW9uKCl7dGhpcy5zbGlkZUJ5KHRoaXMuZ2V0UGFnZVN0ZXAoKSk7fSxzbGlkZVBhZ2VCYWNrOmZ1bmN0aW9uKCl7dGhpcy5zbGlkZUJ5KC10aGlzLmdldFBhZ2VTdGVwKCkpO30sc2xpZGVCeTpmdW5jdGlvbihiUyl7dGhpcy5zbGlkZVRvKHRoaXMuZ2V0VmFsdWUoKStiUyk7fSxzbGlkZVRvOmZ1bmN0aW9uKGJUKXtpZihiVDx0aGlzLmdldE1pbmltdW0oKSl7YlQ9dGhpcy5nZXRNaW5pbXVtKCk7fWVsc2UgaWYoYlQ+dGhpcy5nZXRNYXhpbXVtKCkpe2JUPXRoaXMuZ2V0TWF4aW11bSgpO31lbHNle2JUPXRoaXMuZ2V0TWluaW11bSgpK01hdGgucm91bmQoKGJULXRoaXMuZ2V0TWluaW11bSgpKS90aGlzLmdldFNpbmdsZVN0ZXAoKSkqdGhpcy5nZXRTaW5nbGVTdGVwKCk7fXRoaXMuc2V0VmFsdWUoYlQpO30sX2FwcGx5T3JpZW50YXRpb246ZnVuY3Rpb24oYlUsYlYpe3ZhciBiVz10aGlzLmdldENoaWxkQ29udHJvbChrKTt0aGlzLl9fbk49YlU9PT1qO2lmKHRoaXMuX19uTil7dGhpcy5yZW1vdmVTdGF0ZShpKTtiVy5yZW1vdmVTdGF0ZShpKTt0aGlzLmFkZFN0YXRlKGopO2JXLmFkZFN0YXRlKGopO2JXLnNldExheW91dFByb3BlcnRpZXMoe3RvcDowLHJpZ2h0Om51bGwsYm90dG9tOjB9KTt9ZWxzZXt0aGlzLnJlbW92ZVN0YXRlKGopO2JXLnJlbW92ZVN0YXRlKGopO3RoaXMuYWRkU3RhdGUoaSk7YlcuYWRkU3RhdGUoaSk7Ylcuc2V0TGF5b3V0UHJvcGVydGllcyh7cmlnaHQ6MCxib3R0b206bnVsbCxsZWZ0OjB9KTt9dGhpcy5fdXBkYXRlS25vYlBvc2l0aW9uKCk7fSxfYXBwbHlLbm9iRmFjdG9yOmZ1bmN0aW9uKGJYLGJZKXtpZihiWCE9bnVsbCl7dGhpcy5fdXBkYXRlS25vYlNpemUoKTt9ZWxzZXtpZih0aGlzLl9fbk4pe3RoaXMuZ2V0Q2hpbGRDb250cm9sKGspLnJlc2V0V2lkdGgoKTt9ZWxzZXt0aGlzLmdldENoaWxkQ29udHJvbChrKS5yZXNldEhlaWdodCgpO319fSxfYXBwbHlWYWx1ZTpmdW5jdGlvbihjYSxjYil7aWYoY2EhPW51bGwpe3RoaXMuX3VwZGF0ZUtub2JQb3NpdGlvbigpO2lmKHRoaXMuX19uRCl7dGhpcy5fX25MPVtjYSxjYl07fWVsc2V7dGhpcy5maXJlRXZlbnQoVixxeC5ldmVudC50eXBlLkRhdGEsW2NhLGNiXSk7fX1lbHNle3RoaXMucmVzZXRWYWx1ZSgpO319LF9maXJlVmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5fX25MKXtyZXR1cm47fXZhciBjYz10aGlzLl9fbkw7dGhpcy5fX25MPW51bGw7dGhpcy5maXJlRXZlbnQoVixxeC5ldmVudC50eXBlLkRhdGEsY2MpO30sX2FwcGx5TWluaW11bTpmdW5jdGlvbihjZCxjZSl7aWYodGhpcy5nZXRWYWx1ZSgpPGNkKXt0aGlzLnNldFZhbHVlKGNkKTt9dGhpcy5fdXBkYXRlS25vYlBvc2l0aW9uKCk7fSxfYXBwbHlNYXhpbXVtOmZ1bmN0aW9uKGNmLGNnKXtpZih0aGlzLmdldFZhbHVlKCk+Y2Ype3RoaXMuc2V0VmFsdWUoY2YpO310aGlzLl91cGRhdGVLbm9iUG9zaXRpb24oKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGQ9Imhvcml6b250YWwiLGM9Im1vdXNld2hlZWwiLGI9InF4LnVpLmNvcmUuc2Nyb2xsLlNjcm9sbFNsaWRlciIsYT0ia2V5cHJlc3MiO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6cXgudWkuZm9ybS5TbGlkZXIsY29uc3RydWN0OmZ1bmN0aW9uKGUpe3F4LnVpLmZvcm0uU2xpZGVyLmNhbGwodGhpcyxlKTt0aGlzLnJlbW92ZUxpc3RlbmVyKGEsdGhpcy5fb25LZXlQcmVzcyk7dGhpcy5yZW1vdmVMaXN0ZW5lcihjLHRoaXMuX29uTW91c2VXaGVlbCk7fSxtZW1iZXJzOntnZXRTaXplSGludDpmdW5jdGlvbihmKXt2YXIgZz1xeC51aS5mb3JtLlNsaWRlci5wcm90b3R5cGUuZ2V0U2l6ZUhpbnQuY2FsbCh0aGlzKTtpZih0aGlzLmdldE9yaWVudGF0aW9uKCk9PT1kKXtnLndpZHRoPTA7fWVsc2V7Zy5oZWlnaHQ9MDt9cmV0dXJuIGc7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBuPSJwcmVzc2VkIixtPSJhYmFuZG9uZWQiLGw9IkludGVnZXIiLGs9ImhvdmVyZWQiLGo9InF4LmV2ZW50LnR5cGUuRXZlbnQiLGk9IkVudGVyIixoPSJTcGFjZSIsZz0icHJlc3MiLGY9InF4LnVpLmZvcm0uUmVwZWF0QnV0dG9uIixkPSJyZWxlYXNlIixhPSJpbnRlcnZhbCIsYz0iX19uUyIsYj0iZXhlY3V0ZSI7cXguQ2xhc3MuZGVmaW5lKGYse2V4dGVuZDpxeC51aS5mb3JtLkJ1dHRvbixjb25zdHJ1Y3Q6ZnVuY3Rpb24obyxwKXtxeC51aS5mb3JtLkJ1dHRvbi5jYWxsKHRoaXMsbyxwKTt0aGlzLl9fblM9bmV3IHF4LmV2ZW50LkFjY2VsZXJhdGluZ1RpbWVyKCk7dGhpcy5fX25TLmFkZExpc3RlbmVyKGEsdGhpcy5fb25JbnRlcnZhbCx0aGlzKTt9LGV2ZW50czp7ImV4ZWN1dGUiOmosInByZXNzIjpqLCJyZWxlYXNlIjpqfSxwcm9wZXJ0aWVzOntpbnRlcnZhbDp7Y2hlY2s6bCxpbml0OjEwMH0sZmlyc3RJbnRlcnZhbDp7Y2hlY2s6bCxpbml0OjUwMH0sbWluVGltZXI6e2NoZWNrOmwsaW5pdDoyMH0sdGltZXJEZWNyZWFzZTp7Y2hlY2s6bCxpbml0OjJ9fSxtZW1iZXJzOntfX25UOm51bGwsX19uUzpudWxsLHByZXNzOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQoKSl7aWYoIXRoaXMuaGFzU3RhdGUobikpe3RoaXMuX19uVSgpO310aGlzLnJlbW92ZVN0YXRlKG0pO3RoaXMuYWRkU3RhdGUobik7fX0scmVsZWFzZTpmdW5jdGlvbihxKXtpZighdGhpcy5pc0VuYWJsZWQoKSl7cmV0dXJuO31pZih0aGlzLmhhc1N0YXRlKG4pKXtpZighdGhpcy5fX25UKXt0aGlzLmV4ZWN1dGUoKTt9fXRoaXMucmVtb3ZlU3RhdGUobik7dGhpcy5yZW1vdmVTdGF0ZShtKTt0aGlzLl9fblYoKTt9LF9hcHBseUVuYWJsZWQ6ZnVuY3Rpb24ocixzKXtxeC51aS5mb3JtLkJ1dHRvbi5wcm90b3R5cGUuX2FwcGx5RW5hYmxlZC5jYWxsKHRoaXMscixzKTtpZighcil7dGhpcy5yZW1vdmVTdGF0ZShuKTt0aGlzLnJlbW92ZVN0YXRlKG0pO3RoaXMuX19uVigpO319LF9vbk1vdXNlT3ZlcjpmdW5jdGlvbihlKXtpZighdGhpcy5pc0VuYWJsZWQoKXx8ZS5nZXRUYXJnZXQoKSE9PXRoaXMpe3JldHVybjt9aWYodGhpcy5oYXNTdGF0ZShtKSl7dGhpcy5yZW1vdmVTdGF0ZShtKTt0aGlzLmFkZFN0YXRlKG4pO3RoaXMuX19uUy5zdGFydCgpO310aGlzLmFkZFN0YXRlKGspO30sX29uTW91c2VPdXQ6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaXNFbmFibGVkKCl8fGUuZ2V0VGFyZ2V0KCkhPT10aGlzKXtyZXR1cm47fXRoaXMucmVtb3ZlU3RhdGUoayk7aWYodGhpcy5oYXNTdGF0ZShuKSl7dGhpcy5yZW1vdmVTdGF0ZShuKTt0aGlzLmFkZFN0YXRlKG0pO3RoaXMuX19uUy5zdG9wKCk7fX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKGUpe2lmKCFlLmlzTGVmdFByZXNzZWQoKSl7cmV0dXJuO310aGlzLmNhcHR1cmUoKTt0aGlzLl9fblUoKTtlLnN0b3BQcm9wYWdhdGlvbigpO30sX29uTW91c2VVcDpmdW5jdGlvbihlKXt0aGlzLnJlbGVhc2VDYXB0dXJlKCk7aWYoIXRoaXMuaGFzU3RhdGUobSkpe3RoaXMuYWRkU3RhdGUoayk7aWYodGhpcy5oYXNTdGF0ZShuKSYmIXRoaXMuX19uVCl7dGhpcy5leGVjdXRlKCk7fX10aGlzLl9fblYoKTtlLnN0b3BQcm9wYWdhdGlvbigpO30sX29uS2V5VXA6ZnVuY3Rpb24oZSl7c3dpdGNoKGUuZ2V0S2V5SWRlbnRpZmllcigpKXtjYXNlIGk6Y2FzZSBoOmlmKHRoaXMuaGFzU3RhdGUobikpe2lmKCF0aGlzLl9fblQpe3RoaXMuZXhlY3V0ZSgpO310aGlzLnJlbW92ZVN0YXRlKG4pO3RoaXMucmVtb3ZlU3RhdGUobSk7ZS5zdG9wUHJvcGFnYXRpb24oKTt0aGlzLl9fblYoKTt9fX0sX29uS2V5RG93bjpmdW5jdGlvbihlKXtzd2l0Y2goZS5nZXRLZXlJZGVudGlmaWVyKCkpe2Nhc2UgaTpjYXNlIGg6dGhpcy5yZW1vdmVTdGF0ZShtKTt0aGlzLmFkZFN0YXRlKG4pO2Uuc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy5fX25VKCk7fX0sX29uSW50ZXJ2YWw6ZnVuY3Rpb24oZSl7dGhpcy5fX25UPXRydWU7dGhpcy5maXJlRXZlbnQoYik7fSxfX25VOmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoZyk7dGhpcy5fX25UPWZhbHNlO3RoaXMuX19uUy5zZXQoe2ludGVydmFsOnRoaXMuZ2V0SW50ZXJ2YWwoKSxmaXJzdEludGVydmFsOnRoaXMuZ2V0Rmlyc3RJbnRlcnZhbCgpLG1pbmltdW06dGhpcy5nZXRNaW5UaW1lcigpLGRlY3JlYXNlOnRoaXMuZ2V0VGltZXJEZWNyZWFzZSgpfSkuc3RhcnQoKTt0aGlzLnJlbW92ZVN0YXRlKG0pO3RoaXMuYWRkU3RhdGUobik7fSxfX25WOmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoZCk7dGhpcy5fX25TLnN0b3AoKTt0aGlzLnJlbW92ZVN0YXRlKG0pO3RoaXMucmVtb3ZlU3RhdGUobik7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlT2JqZWN0cyhjKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZT0iSW50ZWdlciIsZD0iaW50ZXJ2YWwiLGM9InF4LmV2ZW50LnR5cGUuRXZlbnQiLGI9InF4LmV2ZW50LkFjY2VsZXJhdGluZ1RpbWVyIixhPSJfX3FuIjtxeC5DbGFzcy5kZWZpbmUoYix7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7dGhpcy5fX3FuPW5ldyBxeC5ldmVudC5UaW1lcih0aGlzLmdldEludGVydmFsKCkpO3RoaXMuX19xbi5hZGRMaXN0ZW5lcihkLHRoaXMuX29uSW50ZXJ2YWwsdGhpcyk7fSxldmVudHM6eyJpbnRlcnZhbCI6Y30scHJvcGVydGllczp7aW50ZXJ2YWw6e2NoZWNrOmUsaW5pdDoxMDB9LGZpcnN0SW50ZXJ2YWw6e2NoZWNrOmUsaW5pdDo1MDB9LG1pbmltdW06e2NoZWNrOmUsaW5pdDoyMH0sZGVjcmVhc2U6e2NoZWNrOmUsaW5pdDoyfX0sbWVtYmVyczp7X19xbjpudWxsLF9fcW86bnVsbCxzdGFydDpmdW5jdGlvbigpe3RoaXMuX19xbi5zZXRJbnRlcnZhbCh0aGlzLmdldEZpcnN0SW50ZXJ2YWwoKSk7dGhpcy5fX3FuLnN0YXJ0KCk7fSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fX3FuLnN0b3AoKTt0aGlzLl9fcW89bnVsbDt9LF9vbkludGVydmFsOmZ1bmN0aW9uKCl7dGhpcy5fX3FuLnN0b3AoKTtpZih0aGlzLl9fcW89PW51bGwpe3RoaXMuX19xbz10aGlzLmdldEludGVydmFsKCk7fXRoaXMuX19xbz1NYXRoLm1heCh0aGlzLmdldE1pbmltdW0oKSx0aGlzLl9fcW8tdGhpcy5nZXREZWNyZWFzZSgpKTt0aGlzLl9fcW4uc2V0SW50ZXJ2YWwodGhpcy5fX3FvKTt0aGlzLl9fcW4uc3RhcnQoKTt0aGlzLmZpcmVFdmVudChkKTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX2Rpc3Bvc2VPYmplY3RzKGEpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBuPSJfYXBwbHlMYXlvdXRDaGFuZ2UiLG09ImxlZnQiLGs9ImNlbnRlciIsaj0idG9wIixoPSJEZWNvcmF0b3IiLGc9Im1pZGRsZSIsZj0iX2FwcGx5UmV2ZXJzZWQiLGU9ImJvdHRvbSIsZD0iQm9vbGVhbiIsYz0icmlnaHQiLGE9IkludGVnZXIiLGI9InF4LnVpLmxheW91dC5IQm94IjtxeC5DbGFzcy5kZWZpbmUoYix7ZXh0ZW5kOnF4LnVpLmxheW91dC5BYnN0cmFjdCxjb25zdHJ1Y3Q6ZnVuY3Rpb24obyxwLHEpe3F4LnVpLmxheW91dC5BYnN0cmFjdC5jYWxsKHRoaXMpO2lmKG8pe3RoaXMuc2V0U3BhY2luZyhvKTt9aWYocCl7dGhpcy5zZXRBbGlnblgocCk7fWlmKHEpe3RoaXMuc2V0U2VwYXJhdG9yKHEpO319LHByb3BlcnRpZXM6e2FsaWduWDp7Y2hlY2s6W20sayxjXSxpbml0Om0sYXBwbHk6bn0sYWxpZ25ZOntjaGVjazpbaixnLGVdLGluaXQ6aixhcHBseTpufSxzcGFjaW5nOntjaGVjazphLGluaXQ6MCxhcHBseTpufSxzZXBhcmF0b3I6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZSxhcHBseTpufSxyZXZlcnNlZDp7Y2hlY2s6ZCxpbml0OmZhbHNlLGFwcGx5OmZ9fSxtZW1iZXJzOntfX2NQOm51bGwsX19jUTpudWxsLF9fY1I6bnVsbCxfX2NTOm51bGwsX2FwcGx5UmV2ZXJzZWQ6ZnVuY3Rpb24oKXt0aGlzLl9pbnZhbGlkQ2hpbGRyZW5DYWNoZT10cnVlO3RoaXMuX2FwcGx5TGF5b3V0Q2hhbmdlKCk7fSxfX2NUOmZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fZ2V0TGF5b3V0Q2hpbGRyZW4oKTt2YXIgbGVuZ3RoPXcubGVuZ3RoO3ZhciB0PWZhbHNlO3ZhciByPXRoaXMuX19jUCYmdGhpcy5fX2NQLmxlbmd0aCE9bGVuZ3RoJiZ0aGlzLl9fY1EmJnRoaXMuX19jUDt2YXIgdTt2YXIgcz1yP3RoaXMuX19jUDpuZXcgQXJyYXkobGVuZ3RoKTt2YXIgdj1yP3RoaXMuX19jUTpuZXcgQXJyYXkobGVuZ3RoKTtpZih0aGlzLmdldFJldmVyc2VkKCkpe3c9dy5jb25jYXQoKS5yZXZlcnNlKCk7fWZvcih2YXIgaT0wO2k8bGVuZ3RoO2krKyl7dT13W2ldLmdldExheW91dFByb3BlcnRpZXMoKTtpZih1LndpZHRoIT1udWxsKXtzW2ldPXBhcnNlRmxvYXQodS53aWR0aCkvMTAwO31pZih1LmZsZXghPW51bGwpe3ZbaV09dS5mbGV4O3Q9dHJ1ZTt9ZWxzZXt2W2ldPTA7fX1pZighcil7dGhpcy5fX2NQPXM7dGhpcy5fX2NRPXY7fXRoaXMuX19jUj10O3RoaXMuX19jUz13O2RlbGV0ZSB0aGlzLl9pbnZhbGlkQ2hpbGRyZW5DYWNoZTt9LHZlcmlmeUxheW91dFByb3BlcnR5Om51bGwscmVuZGVyTGF5b3V0OmZ1bmN0aW9uKHgseSl7aWYodGhpcy5faW52YWxpZENoaWxkcmVuQ2FjaGUpe3RoaXMuX19jVCgpO312YXIgRT10aGlzLl9fY1M7dmFyIGxlbmd0aD1FLmxlbmd0aDt2YXIgTj1xeC51aS5sYXlvdXQuVXRpbDt2YXIgTT10aGlzLmdldFNwYWNpbmcoKTt2YXIgUT10aGlzLmdldFNlcGFyYXRvcigpO2lmKFEpe3ZhciBCPU4uY29tcHV0ZUhvcml6b250YWxTZXBhcmF0b3JHYXBzKEUsTSxRKTt9ZWxzZXt2YXIgQj1OLmNvbXB1dGVIb3Jpem9udGFsR2FwcyhFLE0sdHJ1ZSk7fXZhciBpLHosSyxKO3ZhciBQPVtdO3ZhciBGPUI7Zm9yKGk9MDtpPGxlbmd0aDtpKz0xKXtKPXRoaXMuX19jUFtpXTtLPUohPW51bGw/TWF0aC5mbG9vcigoeC1CKSpKKTpFW2ldLmdldFNpemVIaW50KCkud2lkdGg7UC5wdXNoKEspO0YrPUs7fWlmKHRoaXMuX19jUiYmRiE9eCl7dmFyIEg9e307dmFyIEwsTztmb3IoaT0wO2k8bGVuZ3RoO2krPTEpe0w9dGhpcy5fX2NRW2ldO2lmKEw+MCl7Rz1FW2ldLmdldFNpemVIaW50KCk7SFtpXT17bWluOkcubWluV2lkdGgsdmFsdWU6UFtpXSxtYXg6Ry5tYXhXaWR0aCxmbGV4Okx9O319dmFyIEM9Ti5jb21wdXRlRmxleE9mZnNldHMoSCx4LEYpO2ZvcihpIGluIEMpe089Q1tpXS5vZmZzZXQ7UFtpXSs9TztGKz1PO319dmFyIFU9RVswXS5nZXRNYXJnaW5MZWZ0KCk7aWYoRjx4JiZ0aGlzLmdldEFsaWduWCgpIT1tKXtVPXgtRjtpZih0aGlzLmdldEFsaWduWCgpPT09ayl7VT1NYXRoLnJvdW5kKFUvMik7fX12YXIgRyx0b3AsQSxLLEQsUyxJO3ZhciBNPXRoaXMuZ2V0U3BhY2luZygpO3RoaXMuX2NsZWFyU2VwYXJhdG9ycygpO2lmKFEpe3ZhciBSPXF4LnRoZW1lLm1hbmFnZXIuRGVjb3JhdGlvbi5nZXRJbnN0YW5jZSgpLnJlc29sdmUoUSkuZ2V0SW5zZXRzKCk7dmFyIFQ9Ui5sZWZ0K1IucmlnaHQ7fWZvcihpPTA7aTxsZW5ndGg7aSs9MSl7ej1FW2ldO0s9UFtpXTtHPXouZ2V0U2l6ZUhpbnQoKTtTPXouZ2V0TWFyZ2luVG9wKCk7ST16LmdldE1hcmdpbkJvdHRvbSgpO0E9TWF0aC5tYXgoRy5taW5IZWlnaHQsTWF0aC5taW4oeS1TLUksRy5tYXhIZWlnaHQpKTt0b3A9Ti5jb21wdXRlVmVydGljYWxBbGlnbk9mZnNldCh6LmdldEFsaWduWSgpfHx0aGlzLmdldEFsaWduWSgpLEEseSxTLEkpO2lmKGk+MCl7aWYoUSl7VSs9RCtNO3RoaXMuX3JlbmRlclNlcGFyYXRvcihRLHtsZWZ0OlUsdG9wOjAsd2lkdGg6VCxoZWlnaHQ6eX0pO1UrPVQrTSt6LmdldE1hcmdpbkxlZnQoKTt9ZWxzZXtVKz1OLmNvbGxhcHNlTWFyZ2lucyhNLEQsei5nZXRNYXJnaW5MZWZ0KCkpO319ei5yZW5kZXJMYXlvdXQoVSx0b3AsSyxBKTtVKz1LO0Q9ei5nZXRNYXJnaW5SaWdodCgpO319LF9jb21wdXRlU2l6ZUhpbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9pbnZhbGlkQ2hpbGRyZW5DYWNoZSl7dGhpcy5fX2NUKCk7fXZhciBiYz1xeC51aS5sYXlvdXQuVXRpbDt2YXIgYms9dGhpcy5fX2NTO3ZhciBWPTAsYmQ9MCxiYT0wO3ZhciBZPTAsYmI9MDt2YXIgYmgsVyxiajtmb3IodmFyIGk9MCxsPWJrLmxlbmd0aDtpPGw7aSs9MSl7Ymg9YmtbaV07Vz1iaC5nZXRTaXplSGludCgpO2JkKz1XLndpZHRoO3ZhciBiZz10aGlzLl9fY1FbaV07dmFyIFg9dGhpcy5fX2NQW2ldO2lmKGJnKXtWKz1XLm1pbldpZHRoO31lbHNlIGlmKFgpe2JhPU1hdGgubWF4KGJhLE1hdGgucm91bmQoVy5taW5XaWR0aC9YKSk7fWVsc2V7Vis9Vy53aWR0aDt9Ymo9YmguZ2V0TWFyZ2luVG9wKCkrYmguZ2V0TWFyZ2luQm90dG9tKCk7aWYoKFcuaGVpZ2h0K2JqKT5iYil7YmI9Vy5oZWlnaHQrYmo7fWlmKChXLm1pbkhlaWdodCtiaik+WSl7WT1XLm1pbkhlaWdodCtiajt9fVYrPWJhO3ZhciBiZj10aGlzLmdldFNwYWNpbmcoKTt2YXIgYmk9dGhpcy5nZXRTZXBhcmF0b3IoKTtpZihiaSl7dmFyIGJlPWJjLmNvbXB1dGVIb3Jpem9udGFsU2VwYXJhdG9yR2FwcyhiayxiZixiaSk7fWVsc2V7dmFyIGJlPWJjLmNvbXB1dGVIb3Jpem9udGFsR2FwcyhiayxiZix0cnVlKTt9cmV0dXJuIHttaW5XaWR0aDpWK2JlLHdpZHRoOmJkK2JlLG1pbkhlaWdodDpZLGhlaWdodDpiYn07fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9fY1A9dGhpcy5fX2NRPXRoaXMuX19jUz1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBtPSJyZXNpemUiLGw9InNjcm9sbFkiLGs9InVwZGF0ZSIsaj0ic2Nyb2xsWCIsaT0iX2FwcGx5U2Nyb2xsWCIsaD0iX2FwcGx5U2Nyb2xsWSIsZz0icXgubGFuZy5UeXBlLmlzTnVtYmVyKHZhbHVlKSYmdmFsdWU+PTAmJnZhbHVlPD10aGlzLmdldFNjcm9sbE1heFgoKSIsZj0iYXBwZWFyIixkPSJxeC5sYW5nLlR5cGUuaXNOdW1iZXIodmFsdWUpJiZ2YWx1ZT49MCYmdmFsdWU8PXRoaXMuZ2V0U2Nyb2xsTWF4WSgpIixjPSJxeC5ldmVudC50eXBlLkV2ZW50IixhPSJxeC51aS5jb3JlLnNjcm9sbC5TY3JvbGxQYW5lIixiPSJzY3JvbGwiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXgudWkuY29yZS5XaWRnZXQsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXgudWkuY29yZS5XaWRnZXQuY2FsbCh0aGlzKTt0aGlzLnNldCh7bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH0pO3RoaXMuX3NldExheW91dChuZXcgcXgudWkubGF5b3V0Lkdyb3coKSk7dGhpcy5hZGRMaXN0ZW5lcihtLHRoaXMuX29uVXBkYXRlKTt2YXIgbj10aGlzLmdldENvbnRlbnRFbGVtZW50KCk7bi5hZGRMaXN0ZW5lcihiLHRoaXMuX29uU2Nyb2xsLHRoaXMpO24uYWRkTGlzdGVuZXIoZix0aGlzLl9vbkFwcGVhcix0aGlzKTt9LGV2ZW50czp7dXBkYXRlOmN9LHByb3BlcnRpZXM6e3Njcm9sbFg6e2NoZWNrOmcsYXBwbHk6aSxldmVudDpqLGluaXQ6MH0sc2Nyb2xsWTp7Y2hlY2s6ZCxhcHBseTpoLGV2ZW50OmwsaW5pdDowfX0sbWVtYmVyczp7YWRkOmZ1bmN0aW9uKG8pe3ZhciBwPXRoaXMuX2dldENoaWxkcmVuKClbMF07aWYocCl7dGhpcy5fcmVtb3ZlKHApO3AucmVtb3ZlTGlzdGVuZXIobSx0aGlzLl9vblVwZGF0ZSx0aGlzKTt9aWYobyl7dGhpcy5fYWRkKG8pO28uYWRkTGlzdGVuZXIobSx0aGlzLl9vblVwZGF0ZSx0aGlzKTt9fSxyZW1vdmU6ZnVuY3Rpb24ocSl7aWYocSl7dGhpcy5fcmVtb3ZlKHEpO3EucmVtb3ZlTGlzdGVuZXIobSx0aGlzLl9vblVwZGF0ZSx0aGlzKTt9fSxnZXRDaGlsZHJlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRDaGlsZHJlbigpO30sX29uVXBkYXRlOmZ1bmN0aW9uKGUpe3RoaXMuZmlyZUV2ZW50KGspO30sX29uU2Nyb2xsOmZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuZ2V0Q29udGVudEVsZW1lbnQoKTt0aGlzLnNldFNjcm9sbFgoci5nZXRTY3JvbGxYKCkpO3RoaXMuc2V0U2Nyb2xsWShyLmdldFNjcm9sbFkoKSk7fSxfb25BcHBlYXI6ZnVuY3Rpb24oZSl7dmFyIHY9dGhpcy5nZXRDb250ZW50RWxlbWVudCgpO3ZhciBzPXRoaXMuZ2V0U2Nyb2xsWCgpO3ZhciB0PXYuZ2V0U2Nyb2xsWCgpO2lmKHMhPXQpe3Yuc2Nyb2xsVG9YKHMpO312YXIgdz10aGlzLmdldFNjcm9sbFkoKTt2YXIgdT12LmdldFNjcm9sbFkoKTtpZih3IT11KXt2LnNjcm9sbFRvWSh3KTt9fSxnZXRJdGVtVG9wOmZ1bmN0aW9uKHope3ZhciB0b3A9MDtkb3t0b3ArPXouZ2V0Qm91bmRzKCkudG9wO3o9ei5nZXRMYXlvdXRQYXJlbnQoKTt9d2hpbGUoeiYmeiE9PXRoaXMpO3JldHVybiB0b3A7fSxnZXRJdGVtQm90dG9tOmZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLmdldEl0ZW1Ub3AoQSkrQS5nZXRCb3VuZHMoKS5oZWlnaHQ7fSxnZXRJdGVtTGVmdDpmdW5jdGlvbihCKXt2YXIgQz0wO3ZhciBwYXJlbnQ7ZG97Qys9Qi5nZXRCb3VuZHMoKS5sZWZ0O3BhcmVudD1CLmdldExheW91dFBhcmVudCgpO2lmKHBhcmVudCl7Qys9cGFyZW50LmdldEluc2V0cygpLmxlZnQ7fUI9cGFyZW50O313aGlsZShCJiZCIT09dGhpcyk7cmV0dXJuIEM7fSxnZXRJdGVtUmlnaHQ6ZnVuY3Rpb24oRCl7cmV0dXJuIHRoaXMuZ2V0SXRlbUxlZnQoRCkrRC5nZXRCb3VuZHMoKS53aWR0aDt9LGdldFNjcm9sbFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRDaGlsZHJlbigpWzBdLmdldEJvdW5kcygpO30sZ2V0U2Nyb2xsTWF4WDpmdW5jdGlvbigpe3ZhciBGPXRoaXMuZ2V0SW5uZXJTaXplKCk7dmFyIEU9dGhpcy5nZXRTY3JvbGxTaXplKCk7aWYoRiYmRSl7cmV0dXJuIE1hdGgubWF4KDAsRS53aWR0aC1GLndpZHRoKTt9cmV0dXJuIDA7fSxnZXRTY3JvbGxNYXhZOmZ1bmN0aW9uKCl7dmFyIEg9dGhpcy5nZXRJbm5lclNpemUoKTt2YXIgRz10aGlzLmdldFNjcm9sbFNpemUoKTtpZihIJiZHKXtyZXR1cm4gTWF0aC5tYXgoMCxHLmhlaWdodC1ILmhlaWdodCk7fXJldHVybiAwO30sc2Nyb2xsVG9YOmZ1bmN0aW9uKEkpe3ZhciBKPXRoaXMuZ2V0U2Nyb2xsTWF4WCgpO2lmKEk8MCl7ST0wO31lbHNlIGlmKEk+Sil7ST1KO310aGlzLnNldFNjcm9sbFgoSSk7fSxzY3JvbGxUb1k6ZnVuY3Rpb24oSyl7dmFyIEw9dGhpcy5nZXRTY3JvbGxNYXhZKCk7aWYoSzwwKXtLPTA7fWVsc2UgaWYoSz5MKXtLPUw7fXRoaXMuc2V0U2Nyb2xsWShLKTt9LHNjcm9sbEJ5WDpmdW5jdGlvbih4KXt0aGlzLnNjcm9sbFRvWCh0aGlzLmdldFNjcm9sbFgoKSt4KTt9LHNjcm9sbEJ5WTpmdW5jdGlvbih5KXt0aGlzLnNjcm9sbFRvWSh0aGlzLmdldFNjcm9sbFkoKSt5KTt9LF9hcHBseVNjcm9sbFg6ZnVuY3Rpb24oTSl7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNjcm9sbFRvWChNKTt9LF9hcHBseVNjcm9sbFk6ZnVuY3Rpb24oTil7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNjcm9sbFRvWShOKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LnVpLmxheW91dC5Hcm93IjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LnVpLmxheW91dC5BYnN0cmFjdCxtZW1iZXJzOnt2ZXJpZnlMYXlvdXRQcm9wZXJ0eTpudWxsLHJlbmRlckxheW91dDpmdW5jdGlvbihiLGMpe3ZhciBnPXRoaXMuX2dldExheW91dENoaWxkcmVuKCk7dmFyIGYsaCxlLGQ7Zm9yKHZhciBpPTAsbD1nLmxlbmd0aDtpPGw7aSsrKXtmPWdbaV07aD1mLmdldFNpemVIaW50KCk7ZT1iO2lmKGU8aC5taW5XaWR0aCl7ZT1oLm1pbldpZHRoO31lbHNlIGlmKGU+aC5tYXhXaWR0aCl7ZT1oLm1heFdpZHRoO31kPWM7aWYoZDxoLm1pbkhlaWdodCl7ZD1oLm1pbkhlaWdodDt9ZWxzZSBpZihkPmgubWF4SGVpZ2h0KXtkPWgubWF4SGVpZ2h0O31mLnJlbmRlckxheW91dCgwLDAsZSxkKTt9fSxfY29tcHV0ZVNpemVIaW50OmZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5fZ2V0TGF5b3V0Q2hpbGRyZW4oKTt2YXIgbyxzO3ZhciByPTAscD0wO3ZhciBuPTAsaz0wO3ZhciBqPUluZmluaXR5LG09SW5maW5pdHk7Zm9yKHZhciBpPTAsbD1xLmxlbmd0aDtpPGw7aSsrKXtvPXFbaV07cz1vLmdldFNpemVIaW50KCk7cj1NYXRoLm1heChyLHMud2lkdGgpO3A9TWF0aC5tYXgocCxzLmhlaWdodCk7bj1NYXRoLm1heChuLHMubWluV2lkdGgpO2s9TWF0aC5tYXgoayxzLm1pbkhlaWdodCk7aj1NYXRoLm1pbihqLHMubWF4V2lkdGgpO209TWF0aC5taW4obSxzLm1heEhlaWdodCk7fXJldHVybiB7d2lkdGg6cixoZWlnaHQ6cCxtaW5XaWR0aDpuLG1pbkhlaWdodDprLG1heFdpZHRoOmosbWF4SGVpZ2h0Om19O319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbT0ib3BlbiIsaz0iaWNvbiIsaj0iYXV0byIsaD0ibWlkZGxlIixnPSJTdHJpbmciLGY9ImxhYmVsIixkPSJjaGFuZ2VPcGVuIixjPSJleGNsdWRlZCIsYj0idmlzaWJsZSIsYT0ib3BlbmVkIixIPSJhbHdheXMiLEc9InF4LnVpLnRyZWUuQWJzdHJhY3RUcmVlSXRlbSIsRj0iX2FwcGx5SWNvbk9wZW5lZCIsRT0iQm9vbGVhbiIsRD0iX19weCIsQz0iSW50ZWdlciIsQj0iX2FwcGx5SW5kZW50IixBPSJjaGFuZ2VPcGVuU3ltYm9sTW9kZSIsej0iX2FwcGx5T3BlblN5bWJvbE1vZGUiLHk9Il9fcHUiLHQ9Il9fcHQiLHU9InJlc2l6ZSIscj0iIixzPSJyZW1vdmVJdGVtIixwPSJhZGRJdGVtIixxPSJpY29uT3BlbmVkIixuPSJhYnN0cmFjdCIsbz0ibmV2ZXIiLHY9Il9hcHBseUljb24iLHc9Il9hcHBseU9wZW4iLHg9Il9hcHBseUxhYmVsIjtxeC5DbGFzcy5kZWZpbmUoRyx7ZXh0ZW5kOnF4LnVpLmNvcmUuV2lkZ2V0LHR5cGU6bixpbmNsdWRlOltxeC51aS5mb3JtLk1Nb2RlbFByb3BlcnR5XSxpbXBsZW1lbnQ6W3F4LnVpLmZvcm0uSU1vZGVsXSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC51aS5jb3JlLldpZGdldC5jYWxsKHRoaXMpO3RoaXMuX19wdD1bXTt0aGlzLl9zZXRMYXlvdXQobmV3IHF4LnVpLmxheW91dC5IQm94KCkpO3RoaXMuX2FkZFdpZGdldHMoKTt0aGlzLmluaXRPcGVuKCk7fSxwcm9wZXJ0aWVzOntvcGVuOntjaGVjazpFLGluaXQ6ZmFsc2UsZXZlbnQ6ZCxhcHBseTp3fSxvcGVuU3ltYm9sTW9kZTp7Y2hlY2s6W0gsbyxqXSxpbml0OmosZXZlbnQ6QSxhcHBseTp6fSxpbmRlbnQ6e2NoZWNrOkMsaW5pdDoxOSxhcHBseTpCLHRoZW1lYWJsZTp0cnVlfSxwYXJlbnQ6e2NoZWNrOkcsbnVsbGFibGU6dHJ1ZX0saWNvbjp7Y2hlY2s6ZyxhcHBseTp2LG51bGxhYmxlOnRydWUsdGhlbWVhYmxlOnRydWV9LGljb25PcGVuZWQ6e2NoZWNrOmcsYXBwbHk6RixudWxsYWJsZTp0cnVlLHRoZW1lYWJsZTp0cnVlfSxsYWJlbDp7Y2hlY2s6ZyxhcHBseTp4LGluaXQ6cn19LG1lbWJlcnM6e19fcHQ6bnVsbCxfX3B1Om51bGwsX19wdjpudWxsLF9fcHc6bnVsbCxfX3B4Om51bGwsX19weTpudWxsLF9hZGRXaWRnZXRzOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBtZXRob2QgY2FsbC4iKTt9LF9jcmVhdGVDaGlsZENvbnRyb2xJbXBsOmZ1bmN0aW9uKEksSil7dmFyIEs7c3dpdGNoKEkpe2Nhc2UgZjpLPW5ldyBxeC51aS5iYXNpYy5MYWJlbCgpLnNldCh7YWxpZ25ZOmgsdmFsdWU6dGhpcy5nZXRMYWJlbCgpfSk7YnJlYWs7Y2FzZSBrOks9bmV3IHF4LnVpLmJhc2ljLkltYWdlKCkuc2V0KHthbGlnblk6aCxzb3VyY2U6dGhpcy5nZXRJY29uKCl9KTticmVhaztjYXNlIG06Sz1uZXcgcXgudWkudHJlZS5Gb2xkZXJPcGVuQnV0dG9uKCkuc2V0KHthbGlnblk6aH0pO0suYWRkTGlzdGVuZXIoZCx0aGlzLl9vbkNoYW5nZU9wZW4sdGhpcyk7Sy5hZGRMaXN0ZW5lcih1LHRoaXMuX3VwZGF0ZUluZGVudCx0aGlzKTticmVhazt9cmV0dXJuIEt8fHF4LnVpLmNvcmUuV2lkZ2V0LnByb3RvdHlwZS5fY3JlYXRlQ2hpbGRDb250cm9sSW1wbC5jYWxsKHRoaXMsSSk7fSxnZXRUcmVlOmZ1bmN0aW9uKCl7dmFyIE09dGhpczt3aGlsZShNLmdldFBhcmVudCgpKXtNPU0uZ2V0UGFyZW50KCk7fXZhciBMPU0uZ2V0TGF5b3V0UGFyZW50KCk/TS5nZXRMYXlvdXRQYXJlbnQoKS5nZXRMYXlvdXRQYXJlbnQoKTowO2lmKEwmJkwgaW5zdGFuY2VvZiBxeC51aS5jb3JlLnNjcm9sbC5TY3JvbGxQYW5lKXtyZXR1cm4gTC5nZXRMYXlvdXRQYXJlbnQoKTt9cmV0dXJuIG51bGw7fSxhZGRXaWRnZXQ6ZnVuY3Rpb24oTixPKXt0aGlzLl9hZGQoTixPKTt9LGFkZFNwYWNlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fcHgpe3RoaXMuX19weD1uZXcgcXgudWkuY29yZS5TcGFjZXIoKTt9ZWxzZXt0aGlzLl9yZW1vdmUodGhpcy5fX3B4KTt9dGhpcy5fYWRkKHRoaXMuX19weCk7fSxhZGRPcGVuQnV0dG9uOmZ1bmN0aW9uKCl7dGhpcy5fYWRkKHRoaXMuZ2V0Q2hpbGRDb250cm9sKG0pKTt9LF9vbkNoYW5nZU9wZW46ZnVuY3Rpb24oZSl7aWYodGhpcy5pc09wZW5hYmxlKCkpe3RoaXMuc2V0T3BlbihlLmdldERhdGEoKSk7fX0sYWRkSWNvbjpmdW5jdGlvbigpe3ZhciBQPXRoaXMuZ2V0Q2hpbGRDb250cm9sKGspO2lmKHRoaXMuX19wdyl7dGhpcy5fcmVtb3ZlKFApO310aGlzLl9hZGQoUCk7dGhpcy5fX3B3PXRydWU7fSxhZGRMYWJlbDpmdW5jdGlvbihRKXt2YXIgUj10aGlzLmdldENoaWxkQ29udHJvbChmKTtpZih0aGlzLl9fcHYpe3RoaXMuX3JlbW92ZShSKTt9aWYoUSl7dGhpcy5zZXRMYWJlbChRKTt9ZWxzZXtSLnNldFZhbHVlKHRoaXMuZ2V0TGFiZWwoKSk7fXRoaXMuX2FkZChSKTt0aGlzLl9fcHY9dHJ1ZTt9LGFkZFN0YXRlOmZ1bmN0aW9uKFMpe3F4LnVpLmNvcmUuV2lkZ2V0LnByb3RvdHlwZS5hZGRTdGF0ZS5jYWxsKHRoaXMsUyk7dmFyIFU9dGhpcy5fZ2V0Q2hpbGRyZW4oKTtmb3IodmFyIGk9MCxsPVUubGVuZ3RoO2k8bDtpKyspe3ZhciBUPVVbaV07aWYoVC5hZGRTdGF0ZSl7VVtpXS5hZGRTdGF0ZShTKTt9fX0scmVtb3ZlU3RhdGU6ZnVuY3Rpb24oVil7cXgudWkuY29yZS5XaWRnZXQucHJvdG90eXBlLnJlbW92ZVN0YXRlLmNhbGwodGhpcyxWKTt2YXIgWD10aGlzLl9nZXRDaGlsZHJlbigpO2Zvcih2YXIgaT0wLGw9WC5sZW5ndGg7aTxsO2krKyl7dmFyIFc9WFtpXTtpZihXLmFkZFN0YXRlKXtYW2ldLnJlbW92ZVN0YXRlKFYpO319fSxfYXBwbHlJY29uOmZ1bmN0aW9uKFksYmEpe2lmKCF0aGlzLl9fcEEoKSl7dGhpcy5fX3BCKFkpO31lbHNlIGlmKCF0aGlzLmlzT3BlbigpKXt0aGlzLl9fcEIoWSk7fX0sX2FwcGx5SWNvbk9wZW5lZDpmdW5jdGlvbihiYixiYyl7aWYodGhpcy5pc09wZW4oKSl7aWYodGhpcy5fX3B6KCkmJnRoaXMuX19wQSgpKXt0aGlzLl9fcEIoYmIpO31lbHNlIGlmKCF0aGlzLl9fcHooKSYmdGhpcy5fX3BBKCkpe3RoaXMuX19wQihiYik7fX19LF9hcHBseUxhYmVsOmZ1bmN0aW9uKGJkLGJlKXt2YXIgYmY9dGhpcy5nZXRDaGlsZENvbnRyb2woZix0cnVlKTtpZihiZil7YmYuc2V0VmFsdWUoYmQpO319LF9hcHBseU9wZW46ZnVuY3Rpb24oYmcsYmgpe2lmKHRoaXMuaGFzQ2hpbGRyZW4oKSl7dGhpcy5nZXRDaGlsZHJlbkNvbnRhaW5lcigpLnNldFZpc2liaWxpdHkoYmc/YjpjKTt9dmFyIG9wZW49dGhpcy5nZXRDaGlsZENvbnRyb2wobSx0cnVlKTtpZihvcGVuKXtvcGVuLnNldE9wZW4oYmcpO312YXIgYmk7aWYoYmcpe2JpPXRoaXMuX19wQSgpP3RoaXMuZ2V0SWNvbk9wZW5lZCgpOm51bGw7fWVsc2V7Ymk9dGhpcy5nZXRJY29uKCk7fWlmKGJpKXt0aGlzLl9fcEIoYmkpO31iZz90aGlzLmFkZFN0YXRlKGEpOnRoaXMucmVtb3ZlU3RhdGUoYSk7fSxfX3B6OmZ1bmN0aW9uKCl7cmV0dXJuIHF4LnV0aWwuUHJvcGVydHlVdGlsLmdldFVzZXJWYWx1ZSh0aGlzLGspO30sX19wQTpmdW5jdGlvbigpe3JldHVybiBxeC51dGlsLlByb3BlcnR5VXRpbC5nZXRVc2VyVmFsdWUodGhpcyxxKTt9LF9fcEI6ZnVuY3Rpb24oYmope3ZhciBiaz10aGlzLmdldENoaWxkQ29udHJvbChrLHRydWUpO2lmKGJrKXtiay5zZXRTb3VyY2UoYmopO319LGlzT3BlbmFibGU6ZnVuY3Rpb24oKXt2YXIgYmw9dGhpcy5nZXRPcGVuU3ltYm9sTW9kZSgpO3JldHVybiAoYmw9PT1IfHxibD09PWomJnRoaXMuaGFzQ2hpbGRyZW4oKSk7fSxfc2hvdWxkU2hvd09wZW5TeW1ib2w6ZnVuY3Rpb24oKXt2YXIgb3Blbj10aGlzLmdldENoaWxkQ29udHJvbChtLHRydWUpO2lmKCFvcGVuKXtyZXR1cm4gZmFsc2U7fXZhciBibT10aGlzLmdldFRyZWUoKTtpZighYm0uZ2V0Um9vdE9wZW5DbG9zZSgpKXtpZihibS5nZXRIaWRlUm9vdCgpKXtpZihibS5nZXRSb290KCk9PXRoaXMuZ2V0UGFyZW50KCkpe3JldHVybiBmYWxzZTt9fWVsc2V7aWYoYm0uZ2V0Um9vdCgpPT10aGlzKXtyZXR1cm4gZmFsc2U7fX19cmV0dXJuIHRoaXMuaXNPcGVuYWJsZSgpO30sX2FwcGx5T3BlblN5bWJvbE1vZGU6ZnVuY3Rpb24oYm4sYm8pe3RoaXMuX3VwZGF0ZUluZGVudCgpO30sX3VwZGF0ZUluZGVudDpmdW5jdGlvbigpe2lmKCF0aGlzLmdldFRyZWUoKSl7cmV0dXJuO312YXIgYnE9MDt2YXIgb3Blbj10aGlzLmdldENoaWxkQ29udHJvbChtLHRydWUpO2lmKG9wZW4pe2lmKHRoaXMuX3Nob3VsZFNob3dPcGVuU3ltYm9sKCkpe29wZW4uc2hvdygpO3ZhciBicD1vcGVuLmdldEJvdW5kcygpO2lmKGJwKXticT1icC53aWR0aDt9ZWxzZXtyZXR1cm47fX1lbHNle29wZW4uZXhjbHVkZSgpO319aWYodGhpcy5fX3B4KXt0aGlzLl9fcHguc2V0V2lkdGgoKHRoaXMuZ2V0TGV2ZWwoKSsxKSp0aGlzLmdldEluZGVudCgpLWJxKTt9fSxfYXBwbHlJbmRlbnQ6ZnVuY3Rpb24oYnIsYnMpe3RoaXMuX3VwZGF0ZUluZGVudCgpO30sZ2V0TGV2ZWw6ZnVuY3Rpb24oKXt2YXIgYnQ9dGhpcy5nZXRUcmVlKCk7aWYoIWJ0KXtyZXR1cm47fXZhciBidT10aGlzO3ZhciBidj0tMTt3aGlsZShidSl7YnU9YnUuZ2V0UGFyZW50KCk7YnYrPTE7fWlmKGJ0LmdldEhpZGVSb290KCkpe2J2LT0xO31pZighYnQuZ2V0Um9vdE9wZW5DbG9zZSgpKXtidi09MTt9cmV0dXJuIGJ2O30sc3luY1dpZGdldDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUluZGVudCgpO30sZ2V0Q2hpbGRyZW5Db250YWluZXI6ZnVuY3Rpb24oKXtpZighdGhpcy5fX3B1KXt0aGlzLl9fcHU9bmV3IHF4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUobmV3IHF4LnVpLmxheW91dC5WQm94KCkpLnNldCh7dmlzaWJpbGl0eTp0aGlzLmlzT3BlbigpP2I6Y30pO31yZXR1cm4gdGhpcy5fX3B1O30saGFzQ2hpbGRyZW5Db250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3B1O30sZ2V0UGFyZW50Q2hpbGRyZW5Db250YWluZXI6ZnVuY3Rpb24oKXtpZih0aGlzLmdldFBhcmVudCgpKXtyZXR1cm4gdGhpcy5nZXRQYXJlbnQoKS5nZXRDaGlsZHJlbkNvbnRhaW5lcigpO31lbHNlIGlmKHRoaXMuZ2V0TGF5b3V0UGFyZW50KCkpe3JldHVybiB0aGlzLmdldExheW91dFBhcmVudCgpO31lbHNle3JldHVybiBudWxsO319LGdldENoaWxkcmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wdDt9LGhhc0NoaWxkcmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wdD90aGlzLl9fcHQubGVuZ3RoPjA6ZmFsc2U7fSxnZXRJdGVtczpmdW5jdGlvbihidyxieCxieSl7aWYoYnkhPT1mYWxzZSl7dmFyIGJ6PVtdO31lbHNle3ZhciBiej1bdGhpc107fXZhciBiQz10aGlzLmhhc0NoaWxkcmVuKCkmJihieCE9PWZhbHNlfHx0aGlzLmlzT3BlbigpKTtpZihiQyl7dmFyIGJCPXRoaXMuZ2V0Q2hpbGRyZW4oKTtpZihidz09PWZhbHNlKXtiej1iei5jb25jYXQoYkIpO31lbHNle2Zvcih2YXIgaT0wLGJBPWJCLmxlbmd0aDtpPGJBO2krKyl7Yno9YnouY29uY2F0KGJCW2ldLmdldEl0ZW1zKGJ3LGJ4LGZhbHNlKSk7fX19cmV0dXJuIGJ6O30scmVjdXJzaXZlQWRkVG9XaWRnZXRRdWV1ZTpmdW5jdGlvbigpe3ZhciBiRD10aGlzLmdldEl0ZW1zKHRydWUsdHJ1ZSxmYWxzZSk7Zm9yKHZhciBpPTAsbD1iRC5sZW5ndGg7aTxsO2krKyl7cXgudWkuY29yZS5xdWV1ZS5XaWRnZXQuYWRkKGJEW2ldKTt9fSxfX3BDOmZ1bmN0aW9uKCl7aWYodGhpcy5nZXRQYXJlbnRDaGlsZHJlbkNvbnRhaW5lcigpKXt0aGlzLmdldFBhcmVudENoaWxkcmVuQ29udGFpbmVyKCkuX2FkZEFmdGVyKHRoaXMuZ2V0Q2hpbGRyZW5Db250YWluZXIoKSx0aGlzKTt9fSxhZGQ6ZnVuY3Rpb24oYkUpe3ZhciBiRj10aGlzLmdldENoaWxkcmVuQ29udGFpbmVyKCk7dmFyIGJJPXRoaXMuZ2V0VHJlZSgpO2Zvcih2YXIgaT0wLGw9YXJndW1lbnRzLmxlbmd0aDtpPGw7aSsrKXt2YXIgYko9YXJndW1lbnRzW2ldO3ZhciBiSD1iSi5nZXRQYXJlbnQoKTtpZihiSCl7YkgucmVtb3ZlKGJKKTt9Ykouc2V0UGFyZW50KHRoaXMpO3ZhciBiRz10aGlzLmhhc0NoaWxkcmVuKCk7YkYuYWRkKGJKKTtpZihiSi5oYXNDaGlsZHJlbigpKXtiRi5hZGQoYkouZ2V0Q2hpbGRyZW5Db250YWluZXIoKSk7fXRoaXMuX19wdC5wdXNoKGJKKTtpZighYkcpe3RoaXMuX19wQygpO31pZihiSSl7YkoucmVjdXJzaXZlQWRkVG9XaWRnZXRRdWV1ZSgpO2JJLmZpcmVOb25CdWJibGluZ0V2ZW50KHAscXguZXZlbnQudHlwZS5EYXRhLFtiSl0pO319aWYoYkkpe3F4LnVpLmNvcmUucXVldWUuV2lkZ2V0LmFkZCh0aGlzKTt9fSxhZGRBdDpmdW5jdGlvbihiSyxiTCl7e307aWYoYkw9PXRoaXMuX19wdC5sZW5ndGgpe3RoaXMuYWRkKGJLKTtyZXR1cm47fXZhciBiUD1iSy5nZXRQYXJlbnQoKTtpZihiUCl7YlAucmVtb3ZlKGJLKTt9dmFyIGJOPXRoaXMuZ2V0Q2hpbGRyZW5Db250YWluZXIoKTtiSy5zZXRQYXJlbnQodGhpcyk7dmFyIGJPPXRoaXMuaGFzQ2hpbGRyZW4oKTt2YXIgYk09dGhpcy5fX3B0W2JMXTtiTi5hZGRCZWZvcmUoYkssYk0pO2lmKGJLLmhhc0NoaWxkcmVuKCkpe2JOLmFkZEFmdGVyKGJLLmdldENoaWxkcmVuQ29udGFpbmVyKCksYkspO31xeC5sYW5nLkFycmF5Lmluc2VydEF0KHRoaXMuX19wdCxiSyxiTCk7aWYoIWJPKXt0aGlzLl9fcEMoKTt9aWYodGhpcy5nZXRUcmVlKCkpe2JLLnJlY3Vyc2l2ZUFkZFRvV2lkZ2V0UXVldWUoKTtxeC51aS5jb3JlLnF1ZXVlLldpZGdldC5hZGQodGhpcyk7fX0sYWRkQmVmb3JlOmZ1bmN0aW9uKGJRLGJSKXt7fTt2YXIgYlM9YlEuZ2V0UGFyZW50KCk7aWYoYlMpe2JTLnJlbW92ZShiUSk7fXRoaXMuYWRkQXQoYlEsdGhpcy5fX3B0LmluZGV4T2YoYlIpKTt9LGFkZEFmdGVyOmZ1bmN0aW9uKGJULGJVKXt7fTt2YXIgYlY9YlQuZ2V0UGFyZW50KCk7aWYoYlYpe2JWLnJlbW92ZShiVCk7fXRoaXMuYWRkQXQoYlQsdGhpcy5fX3B0LmluZGV4T2YoYlUpKzEpO30sYWRkQXRCZWdpbjpmdW5jdGlvbihiVyl7dGhpcy5hZGRBdChiVywwKTt9LHJlbW92ZTpmdW5jdGlvbihiWCl7Zm9yKHZhciBpPTAsbD1hcmd1bWVudHMubGVuZ3RoO2k8bDtpKyspe3ZhciBjYz1hcmd1bWVudHNbaV07aWYodGhpcy5fX3B0LmluZGV4T2YoY2MpPT0tMSl7dGhpcy53YXJuKCJDYW5ub3QgcmVtb3ZlIHRyZWVpdGVtICciK2NjKyInLiBJdCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIHRyZWUgaXRlbS4iKTtyZXR1cm47fXZhciBiWT10aGlzLmdldENoaWxkcmVuQ29udGFpbmVyKCk7aWYoY2MuaGFzQ2hpbGRyZW5Db250YWluZXIoKSl7dmFyIGNiPWNjLmdldENoaWxkcmVuQ29udGFpbmVyKCk7aWYoYlkuZ2V0Q2hpbGRyZW4oKS5pbmRleE9mKGNiKT49MCl7YlkucmVtb3ZlKGNiKTt9fXF4LmxhbmcuQXJyYXkucmVtb3ZlKHRoaXMuX19wdCxjYyk7Y2Muc2V0UGFyZW50KG51bGwpO2JZLnJlbW92ZShjYyk7fXZhciBjYT10aGlzLmdldFRyZWUoKTtpZihjYSl7Y2EuZmlyZU5vbkJ1YmJsaW5nRXZlbnQocyxxeC5ldmVudC50eXBlLkRhdGEsW2NjXSk7fXF4LnVpLmNvcmUucXVldWUuV2lkZ2V0LmFkZCh0aGlzKTt9LHJlbW92ZUF0OmZ1bmN0aW9uKGNkKXt2YXIgY2U9dGhpcy5fX3B0W2NkXTtpZihjZSl7dGhpcy5yZW1vdmUoY2UpO319LHJlbW92ZUFsbDpmdW5jdGlvbigpe2Zvcih2YXIgaT10aGlzLl9fcHQubGVuZ3RoLTE7aT49MDtpLS0pe3RoaXMucmVtb3ZlKHRoaXMuX19wdFtpXSk7fX19LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fZGlzcG9zZUFycmF5KHQpO3RoaXMuX2Rpc3Bvc2VPYmplY3RzKEQseSk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGk9Im9wZW5lZCIsaD0iY2xpY2siLGc9ImNoYW5nZU9wZW4iLGY9IkJvb2xlYW4iLGQ9InF4LnVpLnRyZWUuRm9sZGVyT3BlbkJ1dHRvbiIsYz0iX2FwcGx5T3BlbiIsYj0ibW91c2V1cCIsYT0ibW91c2Vkb3duIjtxeC5DbGFzcy5kZWZpbmUoZCx7ZXh0ZW5kOnF4LnVpLmJhc2ljLkltYWdlLGluY2x1ZGU6cXgudWkuY29yZS5NRXhlY3V0YWJsZSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC51aS5iYXNpYy5JbWFnZS5jYWxsKHRoaXMpO3RoaXMuaW5pdE9wZW4oKTt0aGlzLmFkZExpc3RlbmVyKGgsdGhpcy5fb25DbGljayk7dGhpcy5hZGRMaXN0ZW5lcihhLHRoaXMuX3N0b3BQcm9wYWdhdGlvbix0aGlzKTt0aGlzLmFkZExpc3RlbmVyKGIsdGhpcy5fc3RvcFByb3BhZ2F0aW9uLHRoaXMpO30scHJvcGVydGllczp7b3Blbjp7Y2hlY2s6Zixpbml0OmZhbHNlLGV2ZW50OmcsYXBwbHk6Y319LG1lbWJlcnM6e19hcHBseU9wZW46ZnVuY3Rpb24oaixrKXtqP3RoaXMuYWRkU3RhdGUoaSk6dGhpcy5yZW1vdmVTdGF0ZShpKTt0aGlzLmV4ZWN1dGUoKTt9LF9zdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTt9LF9vbkNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMudG9nZ2xlT3BlbigpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC51aS5jb3JlLlNwYWNlciI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC51aS5jb3JlLkxheW91dEl0ZW0sY29uc3RydWN0OmZ1bmN0aW9uKGIsYyl7cXgudWkuY29yZS5MYXlvdXRJdGVtLmNhbGwodGhpcyk7dGhpcy5zZXRXaWR0aChiIT1udWxsP2I6MCk7dGhpcy5zZXRIZWlnaHQoYyE9bnVsbD9jOjApO30sbWVtYmVyczp7Y2hlY2tBcHBlYXJhbmNlTmVlZHM6ZnVuY3Rpb24oKXt9LGFkZENoaWxkcmVuVG9RdWV1ZTpmdW5jdGlvbihkKXt9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLiQkZGlzcG9zZWQpe3JldHVybjt9dmFyIHBhcmVudD10aGlzLiQkcGFyZW50O2lmKHBhcmVudCl7cGFyZW50Ll9yZW1vdmUodGhpcyk7fXF4LnVpLmNvcmUucXVldWUuRGlzcG9zZS5hZGQodGhpcyk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBkPSIkJHRoZW1lXyIsYz0iJCR1c2VyXyIsYj0iJCRpbml0XyIsYT0icXgudXRpbC5Qcm9wZXJ0eVV0aWwiO3F4LkNsYXNzLmRlZmluZShhLHtzdGF0aWNzOntnZXRQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUpe3JldHVybiBlLiQkcHJvcGVydGllczt9LGdldEFsbFByb3BlcnRpZXM6ZnVuY3Rpb24oZil7dmFyIGk9e307dmFyIGo9Zjt3aGlsZShqIT1xeC5jb3JlLk9iamVjdCl7dmFyIGg9dGhpcy5nZXRQcm9wZXJ0aWVzKGopO2Zvcih2YXIgZyBpbiBoKXtpW2ddPWhbZ107fWo9ai5zdXBlcmNsYXNzO31yZXR1cm4gaTt9LGdldFVzZXJWYWx1ZTpmdW5jdGlvbihrLGwpe3JldHVybiBrW2MrbF07fSxzZXRVc2VyVmFsdWU6ZnVuY3Rpb24obSxuLG8pe21bYytuXT1vO30sZGVsZXRlVXNlclZhbHVlOmZ1bmN0aW9uKHAscSl7ZGVsZXRlIChwW2MrcV0pO30sZ2V0SW5pdFZhbHVlOmZ1bmN0aW9uKHIscyl7cmV0dXJuIHJbYitzXTt9LHNldEluaXRWYWx1ZTpmdW5jdGlvbih0LHUsdil7dFtiK3VdPXY7fSxkZWxldGVJbml0VmFsdWU6ZnVuY3Rpb24odyx4KXtkZWxldGUgKHdbYit4XSk7fSxnZXRUaGVtZVZhbHVlOmZ1bmN0aW9uKHkseil7cmV0dXJuIHlbZCt6XTt9LHNldFRoZW1lVmFsdWU6ZnVuY3Rpb24oQSxCLEMpe0FbZCtCXT1DO30sZGVsZXRlVGhlbWVWYWx1ZTpmdW5jdGlvbihELEUpe2RlbGV0ZSAoRFtkK0VdKTt9LHNldFRoZW1lZDpmdW5jdGlvbihGLEcsSCl7dmFyIEk9cXguY29yZS5Qcm9wZXJ0eS4kJG1ldGhvZC5zZXRUaGVtZWQ7RltJW0ddXShIKTt9LHJlc2V0VGhlbWVkOmZ1bmN0aW9uKEosSyl7dmFyIEw9cXguY29yZS5Qcm9wZXJ0eS4kJG1ldGhvZC5yZXNldFRoZW1lZDtKW0xbS11dKCk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJ0cmVlLWZvbGRlciIsYT0icXgudWkudHJlZS5UcmVlRm9sZGVyIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LnVpLnRyZWUuQWJzdHJhY3RUcmVlSXRlbSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oYyl7cXgudWkudHJlZS5BYnN0cmFjdFRyZWVJdGVtLmNhbGwodGhpcyk7aWYoYyl7dGhpcy5zZXRMYWJlbChjKTt9fSxwcm9wZXJ0aWVzOnthcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0OmJ9fSxtZW1iZXJzOntfYWRkV2lkZ2V0czpmdW5jdGlvbigpe3RoaXMuYWRkU3BhY2VyKCk7dGhpcy5hZGRPcGVuQnV0dG9uKCk7dGhpcy5hZGRJY29uKCk7dGhpcy5hZGRMYWJlbCgpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbz0iIixuPSIvIixtPSJpIixrPSJJQ09OXyIsaj0ic2VwYXJhdG9yLXZlcnRpY2FsIixoPSJzaW5wdXQiLGc9IikiLGY9ImZhaWxlZCIsZD0iQ0xBU1MiLGM9IklOVEVSRkFDRSIsSD0iX19TViIsRz0ibGlzdGRhdGEiLEY9IjEqIixFPSIjIixEPSJQQUNLQUdFIixDPSIwKiIsQj0iY2hhbmdlU2VsZWN0aW9uIixBPSJTZWFyY2guLi4iLHo9IlJlc3VsdHMiLHk9Il9fU1ciLHY9IigiLHc9ImNvbXBsZXRlZCIsdD0iLi9zY3JpcHQvYXBpaW5kZXguanNvbiIsdT0ia2V5dXAiLHI9InMiLHM9IiBSZXN1bHQiLHA9ImFwaXZpZXdlci51aS5TZWFyY2hWaWV3IixxPSJhcHBlYXIiLHg9ImRpc2FwcGVhciI7cXguQ2xhc3MuZGVmaW5lKHAse2V4dGVuZDpxeC51aS5jb250YWluZXIuQ29tcG9zaXRlLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUuY2FsbCh0aGlzKTt2YXIgST1uZXcgcXgudWkubGF5b3V0LlZCb3goKTtJLnNldFNlcGFyYXRvcihqKTt0aGlzLnNldExheW91dChJKTt0aGlzLl9fU1U9ZmFsc2U7dGhpcy5saXN0ZGF0YT1bXTt0aGlzLmFwaWluZGV4PXt9O3RoaXMuX3Nob3dTZWFyY2hGb3JtKCk7fSxtZW1iZXJzOntfX1NWOm51bGwsX19TVzpudWxsLF9fU1U6bnVsbCxfX1NYOm51bGwsX3Nob3dTZWFyY2hGb3JtOmZ1bmN0aW9uKCl7dmFyIFE9bmV3IHF4LnVpLmxheW91dC5IQm94KDQpO3ZhciBLPW5ldyBxeC51aS5jb250YWluZXIuQ29tcG9zaXRlKFEpO0suc2V0UGFkZGluZygxMCk7dGhpcy5zaW5wdXQ9bmV3IHF4LnVpLmZvcm0uVGV4dEZpZWxkKCkuc2V0KHthbGxvd0dyb3dZOnRydWUscGxhY2Vob2xkZXI6QX0pO3RoaXMuX19TVz1uZXcgcXgudWkuZm9ybS5CdXR0b24oIkZpbmQiKTt0aGlzLl9fU1cuc2V0RW5hYmxlZChmYWxzZSk7Sy5hZGQodGhpcy5zaW5wdXQse2ZsZXg6MX0pO0suYWRkKHRoaXMuX19TVyk7dGhpcy5hZGQoSyk7dmFyIE89W107dmFyIE49dGhpcy5fdGFibGVNb2RlbD1uZXcgcXgudWkudGFibGUubW9kZWwuU2ltcGxlKCk7Ti5zZXRDb2x1bW5zKFtvLHpdKTtOLnNldERhdGEoTyk7dmFyIEo9e3RhYmxlQ29sdW1uTW9kZWw6ZnVuY3Rpb24oUil7cmV0dXJuIG5ldyBxeC51aS50YWJsZS5jb2x1bW5tb2RlbC5SZXNpemUoUik7fX07dmFyIFA9bmV3IHF4LnVpLnRhYmxlLlRhYmxlKE4sSik7UC5zZXREZWNvcmF0b3IobnVsbCk7UC5zZXRTaG93Q2VsbEZvY3VzSW5kaWNhdG9yKGZhbHNlKTtQLnNldFN0YXR1c0JhclZpc2libGUoZmFsc2UpO1Auc2V0Q29sdW1uVmlzaWJpbGl0eUJ1dHRvblZpc2libGUoZmFsc2UpO3RoaXMuX3NlbGVjdGlvbk1vZGVsPVAuZ2V0U2VsZWN0aW9uTWFuYWdlcigpLmdldFNlbGVjdGlvbk1vZGVsKCk7dGhpcy5fc2VsZWN0aW9uTW9kZWwuYWRkTGlzdGVuZXIoQix0aGlzLl9jYWxsRGV0YWlsRnJhbWUsdGhpcyk7dGhpcy5fdGFibGU9UDt2YXIgTT1QLmdldFRhYmxlQ29sdW1uTW9kZWwoKTt2YXIgTD1NLmdldEJlaGF2aW9yKCk7TC5zZXQoMCx7d2lkdGg6QyxtaW5XaWR0aDo0MixtYXhXaWR0aDoxMDB9KTtMLnNldCgxLHt3aWR0aDpGfSk7dmFyIE09UC5nZXRUYWJsZUNvbHVtbk1vZGVsKCk7TS5zZXREYXRhQ2VsbFJlbmRlcmVyKDAsbmV3IHF4LnVpLnRhYmxlLmNlbGxyZW5kZXJlci5JbWFnZSgpKTt0aGlzLl9fU1U9dHJ1ZTt0aGlzLl9fU1g9UDtQLmFkZExpc3RlbmVyKHEsdGhpcy5fX1RhLHRoaXMpO1AuYWRkTGlzdGVuZXIoeCxmdW5jdGlvbihlKXt0aGlzLl9fU1YuaGlkZSgpO30sdGhpcyk7dGhpcy5hZGQoUCx7ZmxleDoxfSk7cXguZXZlbnQuVGltZXIub25jZSh0aGlzLl9sb2FkLHRoaXMsMCk7dGhpcy5zaW5wdXQuZm9jdXMoKTt0aGlzLnNpbnB1dC5hZGRMaXN0ZW5lcih1LGZ1bmN0aW9uKGUpe3RoaXMuX3NlYXJjaFJlc3VsdCh0aGlzLnNpbnB1dC5nZXRWYWx1ZSgpfHxvKTt9LHRoaXMpO30sX3NlYXJjaFJlc3VsdDpmdW5jdGlvbihTKXt2YXIgUz1xeC5sYW5nLlN0cmluZy50cmltKFMpO2lmKFMubGVuZ3RoPjApe3RoaXMuX19TVi5oaWRlKCk7fWVsc2V7dGhpcy5fX1NWLnNob3coKTt9aWYoUy5sZW5ndGg8Myl7aWYodGhpcy5fX1NVKXt0aGlzLmxpc3RkYXRhLnNwbGljZSgwLHRoaXMubGlzdGRhdGEubGVuZ3RoKTt9dGhpcy5fcmVzZXRFbGVtZW50cygpO3JldHVybjt9ZWxzZXt2YXIgVT1bXTt0cnl7dmFyIFQ9dGhpcy5fdmFsaWRhdGVJbnB1dChTKTtuZXcgUmVnRXhwKFRbMF0pO3RoaXMuX19TVy5zZXRFbmFibGVkKHRydWUpO31jYXRjaChWKXtpZih0aGlzLl9fU1Upe3RoaXMubGlzdGRhdGEuc3BsaWNlKDAsdGhpcy5saXN0ZGF0YS5sZW5ndGgpO310aGlzLl9yZXNldEVsZW1lbnRzKCk7cmV0dXJuO31VPXRoaXMuX3NlYXJjaEluZGV4KFRbMF0sVFsxXSk7dGhpcy5fdGFibGVNb2RlbC5zZXRDb2x1bW5zKFtvLChVLmxlbmd0aCtzKygoVS5sZW5ndGghPTEpP3I6bykpXSk7dGhpcy5fdGFibGVNb2RlbC5zZXREYXRhKFUpO3RoaXMuX3RhYmxlLnJlc2V0U2VsZWN0aW9uKCk7fX0sX3ZhbGlkYXRlSW5wdXQ6ZnVuY3Rpb24oVyl7dmFyIFg9W107aWYoL14oW1x3XC5dKlx3KykoI1x3K3xcLlx3K1woXCl8I1wuW1wqfFwrfFw/XT8pPyQvLnRlc3QoVykpe2lmKFJlZ0V4cC4kMiYmUmVnRXhwLiQyLmxlbmd0aD4xKXtYPVtSZWdFeHAuJDIsUmVnRXhwLiQxXTt9ZWxzZSBpZihSZWdFeHAuJDEubGVuZ3RoPjEpe1g9W1JlZ0V4cC4kMSxudWxsXTt9ZWxzZXtyZXR1cm4gbnVsbDt9fWVsc2V7WD1bVyxudWxsXTt9cmV0dXJuIFg7fSxfc2VhcmNoSW5kZXg6ZnVuY3Rpb24oWSxiYSl7dmFyIGJmPVtdO3ZhciBiZD1uZXcgUmVnRXhwKFksKC9eLipbQS1aXS4qJC8pLnRlc3QoWSk/bzptKTt2YXIgYmI9dGhpcy5hcGlpbmRleC5fX2luZGV4X187dmFyIGJlPXRoaXMuYXBpaW5kZXguX19mdWxsTmFtZXNfXzt2YXIgYmk9dGhpcy5hcGlpbmRleC5fX3R5cGVzX187Zm9yKHZhciBiZyBpbiBiYil7aWYoYmQudGVzdChiZykpe2lmKGJhKXtmb3IodmFyIGk9MCxsPWJiW2JnXS5sZW5ndGg7aTxsO2krKyl7dmFyIGJoPWJlW2JiW2JnXVtpXVsxXV07aWYobmV3IFJlZ0V4cChiYSxtKS50ZXN0KGJoKSl7dmFyIGJjPWJpW2JiW2JnXVtpXVswXV0udG9VcHBlckNhc2UoKTt2YXIgYmo9YXBpdmlld2VyLlRyZWVVdGlsW2srYmNdO2JmLnB1c2goW2JqLGJoK2JnXSk7fX19ZWxzZXtmb3IodmFyIGk9MCxsPWJiW2JnXS5sZW5ndGg7aTxsO2krKyl7YmM9YmlbYmJbYmddW2ldWzBdXS50b1VwcGVyQ2FzZSgpO2JoPWJlW2JiW2JnXVtpXVsxXV07aWYoYmM9PWQpe2JqPWFwaXZpZXdlci5UcmVlVXRpbC5nZXRJY29uVXJsKGFwaXZpZXdlci5kYW8uQ2xhc3MuZ2V0Q2xhc3NCeU5hbWUoYmgpKTt9ZWxzZXtpZihiYyE9RCYmYmMhPWMpe2JoKz1iZzt9Ymo9YXBpdmlld2VyLlRyZWVVdGlsW2srYmNdO31iZi5wdXNoKFtiaixiaF0pO319fX1yZXR1cm4gYmY7fSxfc2V0TGlzdGRhdGE6ZnVuY3Rpb24oYmspe2JrLnNvcnQoZnVuY3Rpb24oYSxiKXtpZihhWzFdPGJbMV0pe3JldHVybiAtMTt9aWYoYVsxXT5iWzFdKXtyZXR1cm4gMTt9cmV0dXJuIDA7fSk7Zm9yKHZhciBpPTAsbD1iay5sZW5ndGg7aTxsO2krKyl7dmFyIGJsPWJrW2ldWzBdO3ZhciBibT17aWNvbjpibCxodG1sOm8saWNvbldpZHRoOjE4LGljb25IZWlnaHQ6MTh9O3RoaXMubGlzdGRhdGEucHVzaCh7aWNvbjpibSxyZXN1bHQ6e3RleHQ6YmtbaV1bMV19fSk7fX0sX3NvcnRCeUljb25zOmZ1bmN0aW9uKGEsYil7dmFyIGJwPXsicGFja2FnZSI6MCwiY2xhc3MiOjEsImludGVyZmFjZSI6MiwibWl4aW4iOjMsIm1ldGhvZF9wdWJsaWMiOjQsIm1ldGhvZF9wcm90ZWN0ZWQiOjUsIm1ldGhvZF9wcml2YXRlIjo2LCJwcm9wZXJ0eSI6NywicHJvcGVydHlfcHJvdGVjdGVkIjo4LCJwcm9wZXJ0eV9wcml2YXRlIjo5LCJldmVudCI6MTAsImNvbnN0cnVjdG9yIjoxMSwiY29uc3RhbnQiOjEyLCJjaGlsZENvbnRyb2wiOjEzfTt2YXIgYm49YS5zdWJzdHIoYS5sYXN0SW5kZXhPZihuKSsxKTt2YXIgYm89Yi5zdWJzdHIoYi5sYXN0SW5kZXhPZihuKSsxKTthPWJwW2JuLnN1YnN0cigwLGJuLmxlbmd0aC02KV07Yj1icFtiby5zdWJzdHIoMCxiby5sZW5ndGgtNildO3JldHVybiBhLWI7fSxfbG9hZDpmdW5jdGlvbigpe3ZhciBicT10O3ZhciBicj1uZXcgcXguaW8ucmVtb3RlLlJlcXVlc3QoYnEpO2JyLnNldEFzeW5jaHJvbm91cyh0cnVlKTtici5zZXRUaW1lb3V0KDMwMDAwKTtici5zZXRQcm9oaWJpdENhY2hpbmcoZmFsc2UpO2JyLmFkZExpc3RlbmVyKHcsZnVuY3Rpb24oYnMpe3RoaXMuYXBpaW5kZXg9ZXZhbCh2K2JzLmdldENvbnRlbnQoKStnKTt9LHRoaXMpO2JyLmFkZExpc3RlbmVyKGYsZnVuY3Rpb24oYnQpe3RoaXMud2FybigiQ291bGRuJ3QgbG9hZCBmaWxlOiAiK2JxKTt9LHRoaXMpO2JyLnNlbmQoKTt9LF9jYWxsRGV0YWlsRnJhbWU6ZnVuY3Rpb24oKXt2YXIgYnY9dGhpcy5fc2VsZWN0aW9uTW9kZWwuZ2V0QW5jaG9yU2VsZWN0aW9uSW5kZXgoKTt2YXIgYnk9dGhpcy5fdGFibGVNb2RlbC5nZXREYXRhKClbYnZdO3ZhciBiQT1xeC5jb3JlLkluaXQuZ2V0QXBwbGljYXRpb24oKS5jb250cm9sbGVyO3ZhciBidT1hcGl2aWV3ZXIuVWlNb2RlbC5nZXRJbnN0YW5jZSgpO2lmKGJ5IT11bmRlZmluZWQpe3ZhciBiQj1ieVsxXTt2YXIgYnc9YnlbMF07dmFyIGJ6PWJCO3ZhciBiQz1udWxsO3ZhciBieD1iQi5pbmRleE9mKEUpO2lmKGJ4IT0tMSl7Yno9YkIuc3Vic3RyaW5nKDAsYngpO2JDPWJCLnN1YnN0cmluZyhieCsxKTt9aWYoL3Byb3RlY3RlZC8udGVzdChidykpe2J1LnNldFNob3dQcm90ZWN0ZWQodHJ1ZSk7fWVsc2UgaWYoL3ByaXZhdGUvLnRlc3QoYncpKXtidS5zZXRTaG93UHJpdmF0ZSh0cnVlKTt9YkEuX3VwZGF0ZUhpc3RvcnkoYkIpO319LF9yZXNldEVsZW1lbnRzOmZ1bmN0aW9uKCl7dGhpcy5fdGFibGVNb2RlbC5zZXREYXRhKFtdKTt0aGlzLl90YWJsZU1vZGVsLnNldENvbHVtbnMoW28sb10pO3RoaXMuX19TVy5zZXRFbmFibGVkKGZhbHNlKTt9LF9fU1k6ZnVuY3Rpb24oYkQpe3RoaXMuX19TVj1uZXcgcXgudWkucG9wdXAuUG9wdXAobmV3IHF4LnVpLmxheW91dC5DYW52YXMpLnNldCh7YXV0b0hpZGU6ZmFsc2Usd2lkdGg6MTcwfSk7dmFyIGJFPXRoaXMudHIoIkhpbnQ6IFlvdSBjYW4gdXNlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gdGhlIHNlYXJjaCBmaWVsZC4iKTt2YXIgYkY9bmV3IHF4LnVpLmJhc2ljLkxhYmVsKGJFKTtiRi5zZXRSaWNoKHRydWUpO3RoaXMuX19TVi5hZGQoYkYse2VkZ2U6M30pO3RoaXMuX19TVi5zZXRQb3NpdGlvbigiYm90dG9tLWxlZnQiKTt0aGlzLl9fU1YucGxhY2VUb1dpZGdldCh0aGlzLnNpbnB1dCxmYWxzZSk7dGhpcy5fX1NWLnNob3coKTt9LF9fVGE6ZnVuY3Rpb24oZSl7aWYodGhpcy5fX1NWKXtpZihxeC5sYW5nLlN0cmluZy50cmltKHRoaXMuc2lucHV0LmdldFZhbHVlKCl8fG8pLmxlbmd0aD09MCl7dGhpcy5fX1NWLnNob3coKTt9fWVsc2V7dGhpcy5fX1NZKCk7fX19LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5hcGlpbmRleD10aGlzLl90YWJsZT10aGlzLl9fU1g9dGhpcy5fdGFibGVNb2RlbD10aGlzLl9zZWxlY3Rpb25Nb2RlbD1udWxsO3RoaXMuX2Rpc3Bvc2VPYmplY3RzKGgseSxIKTt0aGlzLl9kaXNwb3NlQXJyYXkoRyk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGs9InNob3dpbmdQbGFjZWhvbGRlciIsaj0iIixpPSJub25lIixoPSJxeC5keW5sb2NhbGUiLGc9IkJvb2xlYW4iLGY9InF4LmNsaWVudCIsZD0iY29sb3IiLGM9InF4LmV2ZW50LnR5cGUuRGF0YSIsYj0icmVhZG9ubHkiLGE9InBsYWNlaG9sZGVyIixZPSJpbnB1dCIsWD0iZm9jdXNpbiIsVz0idmlzaWJpbGl0eSIsVj0iZm9jdXNvdXQiLFU9ImNoYW5nZUxvY2FsZSIsVD0ib24iLFM9InJlYWRPbmx5IixSPSJ0ZXh0IixRPSJfYXBwbHlUZXh0QWxpZ24iLFA9InB4IixyPSJSZWdFeHAiLHM9IikiLHA9InN5bmNBcHBlYXJhbmNlIixxPSJjaGFuZ2UiLG49InRleHRBbGlnbiIsbz0iZm9jdXNlZCIsbD0iY2VudGVyIixtPSJ2aXNpYmxlIix2PSJkaXNhYmxlZCIsdz0idXJsKCIsRD0ib2ZmIixCPSJTdHJpbmciLEg9InJlc2l6ZSIsRj0icXgudWkuZm9ybS5BYnN0cmFjdEZpZWxkIixMPSJ0cmFuc3BhcmVudCIsSj0ic3BlbGxjaGVjayIseT0iZmFsc2UiLE89InJpZ2h0IixOPSJQb3NpdGl2ZUludGVnZXIiLE09Im1zaHRtbCIseD0iYWJzdHJhY3QiLHo9ImJsb2NrIixBPSJ3ZWJraXQiLEM9Il9hcHBseVJlYWRPbmx5IixFPSJfYXBwbHlQbGFjZWhvbGRlciIsRz0iaGlkZGVuIixJPSJsZWZ0IixLPSJxeC9zdGF0aWMvYmxhbmsuZ2lmIix0PSJjaGFuZ2VSZWFkT25seSIsdT0iYWJzb2x1dGUiO3F4LkNsYXNzLmRlZmluZShGLHtleHRlbmQ6cXgudWkuY29yZS5XaWRnZXQsaW1wbGVtZW50OltxeC51aS5mb3JtLklTdHJpbmdGb3JtLHF4LnVpLmZvcm0uSUZvcm1dLGluY2x1ZGU6W3F4LnVpLmZvcm0uTUZvcm1dLHR5cGU6eCxjb25zdHJ1Y3Q6ZnVuY3Rpb24oYmEpe3F4LnVpLmNvcmUuV2lkZ2V0LmNhbGwodGhpcyk7dGhpcy5fX0g9IXF4LmJvbS5jbGllbnQuRmVhdHVyZS5QTEFDRUhPTERFUjtpZihiYSE9bnVsbCl7dGhpcy5zZXRWYWx1ZShiYSk7fXRoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5hZGRMaXN0ZW5lcihxLHRoaXMuX29uQ2hhbmdlQ29udGVudCx0aGlzKTtpZih0aGlzLl9fSCl7dGhpcy5hZGRMaXN0ZW5lcihwLHRoaXMuX3N5bmNQbGFjZWhvbGRlcix0aGlzKTt9aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGgsVCkpe3F4LmxvY2FsZS5NYW5hZ2VyLmdldEluc3RhbmNlKCkuYWRkTGlzdGVuZXIoVSx0aGlzLl9vbkNoYW5nZUxvY2FsZSx0aGlzKTt9fSxldmVudHM6eyJpbnB1dCI6YywiY2hhbmdlVmFsdWUiOmN9LHByb3BlcnRpZXM6e3RleHRBbGlnbjp7Y2hlY2s6W0ksbCxPXSxudWxsYWJsZTp0cnVlLHRoZW1lYWJsZTp0cnVlLGFwcGx5OlF9LHJlYWRPbmx5OntjaGVjazpnLGFwcGx5OkMsZXZlbnQ6dCxpbml0OmZhbHNlfSxzZWxlY3RhYmxlOntyZWZpbmU6dHJ1ZSxpbml0OnRydWV9LGZvY3VzYWJsZTp7cmVmaW5lOnRydWUsaW5pdDp0cnVlfSxtYXhMZW5ndGg6e2NoZWNrOk4saW5pdDpJbmZpbml0eX0sbGl2ZVVwZGF0ZTp7Y2hlY2s6Zyxpbml0OmZhbHNlfSxwbGFjZWhvbGRlcjp7Y2hlY2s6QixudWxsYWJsZTp0cnVlLGFwcGx5OkV9LGZpbHRlcjp7Y2hlY2s6cixudWxsYWJsZTp0cnVlLGluaXQ6bnVsbH19LG1lbWJlcnM6e19fSTp0cnVlLF9fSjpudWxsLF9fSzpudWxsLF9fTDpudWxsLF9fSDp0cnVlLGdldEZvY3VzRWxlbWVudDpmdW5jdGlvbigpe3ZhciBiYj10aGlzLmdldENvbnRlbnRFbGVtZW50KCk7aWYoYmIpe3JldHVybiBiYjt9fSxfY3JlYXRlSW5wdXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxeC5odG1sLklucHV0KFIpO30scmVuZGVyTGF5b3V0OmZ1bmN0aW9uKGJjLHRvcCxiZCxiZSl7dmFyIGJmPXRoaXMuX3VwZGF0ZUluc2V0czt2YXIgYmo9cXgudWkuY29yZS5XaWRnZXQucHJvdG90eXBlLnJlbmRlckxheW91dC5jYWxsKHRoaXMsYmMsdG9wLGJkLGJlKTtpZighYmope3JldHVybjt9dmFyIGJoPWJqLnNpemV8fGJmO3ZhciBiaz1QO2lmKGJofHxiai5sb2NhbHx8YmoubWFyZ2luKXt2YXIgYmc9dGhpcy5nZXRJbnNldHMoKTt2YXIgaW5uZXJXaWR0aD1iZC1iZy5sZWZ0LWJnLnJpZ2h0O3ZhciBpbm5lckhlaWdodD1iZS1iZy50b3AtYmcuYm90dG9tO2lubmVyV2lkdGg9aW5uZXJXaWR0aDwwPzA6aW5uZXJXaWR0aDtpbm5lckhlaWdodD1pbm5lckhlaWdodDwwPzA6aW5uZXJIZWlnaHQ7fXZhciBiaT10aGlzLmdldENvbnRlbnRFbGVtZW50KCk7aWYoYmYmJnRoaXMuX19IKXt0aGlzLl9fTygpLnNldFN0eWxlcyh7ImxlZnQiOmJnLmxlZnQrYmssInRvcCI6YmcudG9wK2JrfSk7fWlmKGJoKXtpZih0aGlzLl9fSCl7dGhpcy5fX08oKS5zZXRTdHlsZXMoeyJ3aWR0aCI6aW5uZXJXaWR0aCtiaywiaGVpZ2h0Ijppbm5lckhlaWdodCtia30pO31iaS5zZXRTdHlsZXMoeyJ3aWR0aCI6aW5uZXJXaWR0aCtiaywiaGVpZ2h0Ijppbm5lckhlaWdodCtia30pO3RoaXMuX3JlbmRlckNvbnRlbnRFbGVtZW50KGlubmVySGVpZ2h0LGJpKTt9fSxfcmVuZGVyQ29udGVudEVsZW1lbnQ6ZnVuY3Rpb24oaW5uZXJIZWlnaHQsYmwpe30sX2NyZWF0ZUNvbnRlbnRFbGVtZW50OmZ1bmN0aW9uKCl7dmFyIGJtPXRoaXMuX2NyZWF0ZUlucHV0RWxlbWVudCgpO2JtLnNldFN0eWxlcyh7ImJvcmRlciI6aSwicGFkZGluZyI6MCwibWFyZ2luIjowLCJkaXNwbGF5Ijp6LCJiYWNrZ3JvdW5kIjpMLCJvdXRsaW5lIjppLCJhcHBlYXJhbmNlIjppLCJwb3NpdGlvbiI6dSwiYXV0b0NvbXBsZXRlIjpEfSk7Ym0uc2V0U2VsZWN0YWJsZSh0aGlzLmdldFNlbGVjdGFibGUoKSk7Ym0uc2V0RW5hYmxlZCh0aGlzLmdldEVuYWJsZWQoKSk7Ym0uYWRkTGlzdGVuZXIoWSx0aGlzLl9vbkh0bWxJbnB1dCx0aGlzKTtibS5zZXRBdHRyaWJ1dGUoSix5KTtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoZixBKSl7Ym0uc2V0U3R5bGUoSCxpKTt9aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGYsTSkpe2JtLnNldFN0eWxlcyh7YmFja2dyb3VuZEltYWdlOncrcXgudXRpbC5SZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS50b1VyaShLKStzfSk7fXJldHVybiBibTt9LF9hcHBseUVuYWJsZWQ6ZnVuY3Rpb24oYm4sYm8pe3F4LnVpLmNvcmUuV2lkZ2V0LnByb3RvdHlwZS5fYXBwbHlFbmFibGVkLmNhbGwodGhpcyxibixibyk7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNldEVuYWJsZWQoYm4pO2lmKHRoaXMuX19IKXtpZihibil7dGhpcy5fc2hvd1BsYWNlaG9sZGVyKCk7fWVsc2V7dGhpcy5fcmVtb3ZlUGxhY2Vob2xkZXIoKTt9fWVsc2V7dmFyIGJwPXRoaXMuZ2V0Q29udGVudEVsZW1lbnQoKTticC5zZXRBdHRyaWJ1dGUoYSxibj90aGlzLmdldFBsYWNlaG9sZGVyKCk6aik7fX0sX19NOnt3aWR0aDoxNixoZWlnaHQ6MTZ9LF9nZXRDb250ZW50SGludDpmdW5jdGlvbigpe3JldHVybiB7d2lkdGg6dGhpcy5fX00ud2lkdGgqMTAsaGVpZ2h0OnRoaXMuX19NLmhlaWdodHx8MTZ9O30sX2FwcGx5Rm9udDpmdW5jdGlvbihicSxicil7dmFyIGJzO2lmKGJxKXt2YXIgYnQ9cXgudGhlbWUubWFuYWdlci5Gb250LmdldEluc3RhbmNlKCkucmVzb2x2ZShicSk7YnM9YnQuZ2V0U3R5bGVzKCk7fWVsc2V7YnM9cXguYm9tLkZvbnQuZ2V0RGVmYXVsdFN0eWxlcygpO310aGlzLmdldENvbnRlbnRFbGVtZW50KCkuc2V0U3R5bGVzKGJzKTtpZih0aGlzLl9fSCl7dGhpcy5fX08oKS5zZXRTdHlsZXMoYnMpO31pZihicSl7dGhpcy5fX009cXguYm9tLkxhYmVsLmdldFRleHRTaXplKCJBIixicyk7fWVsc2V7ZGVsZXRlIHRoaXMuX19NO31xeC51aS5jb3JlLnF1ZXVlLkxheW91dC5hZGQodGhpcyk7fSxfYXBwbHlUZXh0Q29sb3I6ZnVuY3Rpb24oYnUsYnYpe2lmKGJ1KXt0aGlzLmdldENvbnRlbnRFbGVtZW50KCkuc2V0U3R5bGUoZCxxeC50aGVtZS5tYW5hZ2VyLkNvbG9yLmdldEluc3RhbmNlKCkucmVzb2x2ZShidSkpO31lbHNle3RoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5yZW1vdmVTdHlsZShkKTt9fSx0YWJGb2N1czpmdW5jdGlvbigpe3F4LnVpLmNvcmUuV2lkZ2V0LnByb3RvdHlwZS50YWJGb2N1cy5jYWxsKHRoaXMpO3RoaXMuc2VsZWN0QWxsVGV4dCgpO30sX2dldFRleHRTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19NO30sX29uSHRtbElucHV0OmZ1bmN0aW9uKGUpe3ZhciBiej1lLmdldERhdGEoKTt2YXIgYnk9dHJ1ZTt0aGlzLl9fST1mYWxzZTtpZih0aGlzLmdldEZpbHRlcigpIT1udWxsKXt2YXIgYkE9ajt2YXIgYnc9Ynouc2VhcmNoKHRoaXMuZ2V0RmlsdGVyKCkpO3ZhciBieD1iejt3aGlsZShidz49MCl7YkE9YkErKGJ4LmNoYXJBdChidykpO2J4PWJ4LnN1YnN0cmluZyhidysxLGJ4Lmxlbmd0aCk7Ync9Ynguc2VhcmNoKHRoaXMuZ2V0RmlsdGVyKCkpO31pZihiQSE9Ynope2J5PWZhbHNlO2J6PWJBO3RoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5zZXRWYWx1ZShieik7fX1pZihiei5sZW5ndGg+dGhpcy5nZXRNYXhMZW5ndGgoKSl7dmFyIGJ5PWZhbHNlO3RoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5zZXRWYWx1ZShiei5zdWJzdHIoMCx0aGlzLmdldE1heExlbmd0aCgpKSk7fWlmKGJ5KXt0aGlzLmZpcmVEYXRhRXZlbnQoWSxieix0aGlzLl9fTCk7dGhpcy5fX0w9Yno7aWYodGhpcy5nZXRMaXZlVXBkYXRlKCkpe3RoaXMuX19OKGJ6KTt9fX0sX19OOmZ1bmN0aW9uKGJCKXt2YXIgYkM9dGhpcy5fX0s7dGhpcy5fX0s9YkI7aWYoYkMhPWJCKXt0aGlzLmZpcmVOb25CdWJibGluZ0V2ZW50KCJjaGFuZ2VWYWx1ZSIscXguZXZlbnQudHlwZS5EYXRhLFtiQixiQ10pO319LHNldFZhbHVlOmZ1bmN0aW9uKGJEKXtpZihiRD09PW51bGwpe2lmKHRoaXMuX19JKXtyZXR1cm4gYkQ7fWJEPWo7dGhpcy5fX0k9dHJ1ZTt9ZWxzZXt0aGlzLl9fST1mYWxzZTtpZih0aGlzLl9fSCl7dGhpcy5fcmVtb3ZlUGxhY2Vob2xkZXIoKTt9fWlmKHF4LmxhbmcuVHlwZS5pc1N0cmluZyhiRCkpe3ZhciBiRj10aGlzLmdldENvbnRlbnRFbGVtZW50KCk7aWYoYkQubGVuZ3RoPnRoaXMuZ2V0TWF4TGVuZ3RoKCkpe2JEPWJELnN1YnN0cigwLHRoaXMuZ2V0TWF4TGVuZ3RoKCkpO31pZihiRi5nZXRWYWx1ZSgpIT1iRCl7dmFyIGJHPWJGLmdldFZhbHVlKCk7YkYuc2V0VmFsdWUoYkQpO3ZhciBiRT10aGlzLl9fST9udWxsOmJEO3RoaXMuX19LPWJHO3RoaXMuX19OKGJFKTt9aWYodGhpcy5fX0gpe3RoaXMuX3Nob3dQbGFjZWhvbGRlcigpO31yZXR1cm4gYkQ7fXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZSB0eXBlOiAiK2JEKTt9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGJIPXRoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5nZXRWYWx1ZSgpO3JldHVybiB0aGlzLl9fST9udWxsOmJIO30scmVzZXRWYWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0VmFsdWUobnVsbCk7fSxfb25DaGFuZ2VDb250ZW50OmZ1bmN0aW9uKGUpe3RoaXMuX19JPWUuZ2V0RGF0YSgpPT09bnVsbDt0aGlzLl9fTihlLmdldERhdGEoKSk7fSxnZXRUZXh0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5nZXRUZXh0U2VsZWN0aW9uKCk7fSxnZXRUZXh0U2VsZWN0aW9uTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5nZXRUZXh0U2VsZWN0aW9uTGVuZ3RoKCk7fSxnZXRUZXh0U2VsZWN0aW9uU3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRDb250ZW50RWxlbWVudCgpLmdldFRleHRTZWxlY3Rpb25TdGFydCgpO30sZ2V0VGV4dFNlbGVjdGlvbkVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldENvbnRlbnRFbGVtZW50KCkuZ2V0VGV4dFNlbGVjdGlvbkVuZCgpO30sc2V0VGV4dFNlbGVjdGlvbjpmdW5jdGlvbihiSSxiSil7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNldFRleHRTZWxlY3Rpb24oYkksYkopO30sY2xlYXJUZXh0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLmNsZWFyVGV4dFNlbGVjdGlvbigpO30sc2VsZWN0QWxsVGV4dDpmdW5jdGlvbigpe3RoaXMuc2V0VGV4dFNlbGVjdGlvbigwKTt9LF9zaG93UGxhY2Vob2xkZXI6ZnVuY3Rpb24oKXt2YXIgYkw9dGhpcy5nZXRWYWx1ZSgpfHxqO3ZhciBiSz10aGlzLmdldFBsYWNlaG9sZGVyKCk7aWYoYkshPW51bGwmJmJMPT1qJiYhdGhpcy5oYXNTdGF0ZShvKSYmIXRoaXMuaGFzU3RhdGUodikpe2lmKHRoaXMuaGFzU3RhdGUoaykpe3RoaXMuX3N5bmNQbGFjZWhvbGRlcigpO31lbHNle3RoaXMuYWRkU3RhdGUoayk7fX19LF9yZW1vdmVQbGFjZWhvbGRlcjpmdW5jdGlvbigpe2lmKHRoaXMuaGFzU3RhdGUoaykpe3RoaXMuX19PKCkuc2V0U3R5bGUoVyxHKTt0aGlzLnJlbW92ZVN0YXRlKGspO319LF9zeW5jUGxhY2Vob2xkZXI6ZnVuY3Rpb24oKXtpZih0aGlzLmhhc1N0YXRlKGspKXt0aGlzLl9fTygpLnNldFN0eWxlKFcsbSk7fX0sX19POmZ1bmN0aW9uKCl7aWYodGhpcy5fX0o9PW51bGwpe3RoaXMuX19KPW5ldyBxeC5odG1sLkxhYmVsKCk7dmFyIGJNPXF4LnRoZW1lLm1hbmFnZXIuQ29sb3IuZ2V0SW5zdGFuY2UoKTt0aGlzLl9fSi5zZXRTdHlsZXMoeyJ2aXNpYmlsaXR5IjoiaGlkZGVuIiwiekluZGV4Ijo2LCJwb3NpdGlvbiI6ImFic29sdXRlIiwiY29sb3IiOmJNLnJlc29sdmUoInRleHQtcGxhY2Vob2xkZXIiKX0pO3RoaXMuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFkZCh0aGlzLl9fSik7fXJldHVybiB0aGlzLl9fSjt9LF9vbkNoYW5nZUxvY2FsZTpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGgseyJvbiI6ZnVuY3Rpb24oZSl7dmFyIGNvbnRlbnQ9dGhpcy5nZXRQbGFjZWhvbGRlcigpO2lmKGNvbnRlbnQmJmNvbnRlbnQudHJhbnNsYXRlKXt0aGlzLnNldFBsYWNlaG9sZGVyKGNvbnRlbnQudHJhbnNsYXRlKCkpO319LCJvZmYiOm51bGx9KSxfYXBwbHlQbGFjZWhvbGRlcjpmdW5jdGlvbihiTixiTyl7aWYodGhpcy5fX0gpe3RoaXMuX19PKCkuc2V0VmFsdWUoYk4pO2lmKGJOIT1udWxsKXt0aGlzLmFkZExpc3RlbmVyKFgsdGhpcy5fcmVtb3ZlUGxhY2Vob2xkZXIsdGhpcyk7dGhpcy5hZGRMaXN0ZW5lcihWLHRoaXMuX3Nob3dQbGFjZWhvbGRlcix0aGlzKTt0aGlzLl9zaG93UGxhY2Vob2xkZXIoKTt9ZWxzZXt0aGlzLnJlbW92ZUxpc3RlbmVyKFgsdGhpcy5fcmVtb3ZlUGxhY2Vob2xkZXIsdGhpcyk7dGhpcy5yZW1vdmVMaXN0ZW5lcihWLHRoaXMuX3Nob3dQbGFjZWhvbGRlcix0aGlzKTt0aGlzLl9yZW1vdmVQbGFjZWhvbGRlcigpO319ZWxzZXtpZih0aGlzLmdldEVuYWJsZWQoKSl7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNldEF0dHJpYnV0ZShhLGJOKTt9fX0sX2FwcGx5VGV4dEFsaWduOmZ1bmN0aW9uKGJQLGJRKXt0aGlzLmdldENvbnRlbnRFbGVtZW50KCkuc2V0U3R5bGUobixiUCk7fSxfYXBwbHlSZWFkT25seTpmdW5jdGlvbihiUixiUyl7dmFyIGJUPXRoaXMuZ2V0Q29udGVudEVsZW1lbnQoKTtiVC5zZXRBdHRyaWJ1dGUoUyxiUik7aWYoYlIpe3RoaXMuYWRkU3RhdGUoYik7dGhpcy5zZXRGb2N1c2FibGUoZmFsc2UpO31lbHNle3RoaXMucmVtb3ZlU3RhdGUoYik7dGhpcy5zZXRGb2N1c2FibGUodHJ1ZSk7fX19LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX0o9bnVsbDtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoaCxUKSl7cXgubG9jYWxlLk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZW1vdmVMaXN0ZW5lcihVLHRoaXMuX29uQ2hhbmdlTG9jYWxlLHRoaXMpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0icXgudWkuZm9ybS5UZXh0RmllbGQiLGE9InRleHRmaWVsZCI7cXguQ2xhc3MuZGVmaW5lKGIse2V4dGVuZDpxeC51aS5mb3JtLkFic3RyYWN0RmllbGQscHJvcGVydGllczp7YXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDphfSxhbGxvd0dyb3dZOntyZWZpbmU6dHJ1ZSxpbml0OmZhbHNlfSxhbGxvd1Nocmlua1k6e3JlZmluZTp0cnVlLGluaXQ6ZmFsc2V9fSxtZW1iZXJzOntfcmVuZGVyQ29udGVudEVsZW1lbnQ6ZnVuY3Rpb24oaW5uZXJIZWlnaHQsYyl7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSJ3cmFwIixqPSJ2YWx1ZSIsaT0idGV4dGFyZWEiLGg9Im5vbmUiLGc9InF4LmNsaWVudCIsZj0iIixlPSJpbnB1dCIsZD0icXguaHRtbC5JbnB1dCIsYz0ic2VsZWN0IixiPSJkaXNhYmxlZCIsYT0icmVhZC1vbmx5IjtxeC5DbGFzcy5kZWZpbmUoZCx7ZXh0ZW5kOnF4Lmh0bWwuRWxlbWVudCxjb25zdHJ1Y3Q6ZnVuY3Rpb24obCxtLG4pe2lmKGw9PT1jfHxsPT09aSl7dmFyIG89bDt9ZWxzZXtvPWU7fXF4Lmh0bWwuRWxlbWVudC5jYWxsKHRoaXMsbyxtLG4pO3RoaXMuX19jPWw7fSxtZW1iZXJzOntfX2M6bnVsbCxfX2Q6bnVsbCxfX2U6bnVsbCxfY3JlYXRlRG9tRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiBxeC5ib20uSW5wdXQuY3JlYXRlKHRoaXMuX19jKTt9LF9hcHBseVByb3BlcnR5OmZ1bmN0aW9uKG5hbWUscCl7cXguaHRtbC5FbGVtZW50LnByb3RvdHlwZS5fYXBwbHlQcm9wZXJ0eS5jYWxsKHRoaXMsbmFtZSxwKTt2YXIgcT10aGlzLmdldERvbUVsZW1lbnQoKTtpZihuYW1lPT09ail7cXguYm9tLklucHV0LnNldFZhbHVlKHEscCk7fWVsc2UgaWYobmFtZT09PWspe3F4LmJvbS5JbnB1dC5zZXRXcmFwKHEscCk7fX0sc2V0RW5hYmxlZDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGcseyJ3ZWJraXQiOmZ1bmN0aW9uKHIpe3RoaXMuX19lPXI7aWYoIXIpe3RoaXMuc2V0U3R5bGVzKHsidXNlck1vZGlmeSI6YSwidXNlclNlbGVjdCI6aH0pO31lbHNle3RoaXMuc2V0U3R5bGVzKHsidXNlck1vZGlmeSI6bnVsbCwidXNlclNlbGVjdCI6dGhpcy5fX2Q/bnVsbDpofSk7fX0sImRlZmF1bHQiOmZ1bmN0aW9uKHMpe3RoaXMuc2V0QXR0cmlidXRlKGIscz09PWZhbHNlKTt9fSksc2V0U2VsZWN0YWJsZTpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGcseyJ3ZWJraXQiOmZ1bmN0aW9uKHQpe3RoaXMuX19kPXQ7cXguaHRtbC5FbGVtZW50LnByb3RvdHlwZS5zZXRTZWxlY3RhYmxlLmNhbGwodGhpcyx0aGlzLl9fZSYmdCk7fSwiZGVmYXVsdCI6ZnVuY3Rpb24odSl7cXguaHRtbC5FbGVtZW50LnByb3RvdHlwZS5zZXRTZWxlY3RhYmxlLmNhbGwodGhpcyx1KTt9fSksc2V0VmFsdWU6ZnVuY3Rpb24odil7dmFyIHc9dGhpcy5nZXREb21FbGVtZW50KCk7aWYodyl7aWYody52YWx1ZSE9dil7cXguYm9tLklucHV0LnNldFZhbHVlKHcsdik7fX1lbHNle3RoaXMuX3NldFByb3BlcnR5KGosdik7fXJldHVybiB0aGlzO30sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgeD10aGlzLmdldERvbUVsZW1lbnQoKTtpZih4KXtyZXR1cm4gcXguYm9tLklucHV0LmdldFZhbHVlKHgpO31yZXR1cm4gdGhpcy5fZ2V0UHJvcGVydHkoail8fGY7fSxzZXRXcmFwOmZ1bmN0aW9uKHkpe2lmKHRoaXMuX19jPT09aSl7dGhpcy5fc2V0UHJvcGVydHkoayx5KTt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIlRleHQgd3JhcHBpbmcgaXMgb25seSBzdXBwb3J0IGJ5IHRleHRhcmVhcyEiKTt9cmV0dXJuIHRoaXM7fSxnZXRXcmFwOmZ1bmN0aW9uKCl7aWYodGhpcy5fX2M9PT1pKXtyZXR1cm4gdGhpcy5fZ2V0UHJvcGVydHkoayk7fWVsc2V7dGhyb3cgbmV3IEVycm9yKCJUZXh0IHdyYXBwaW5nIGlzIG9ubHkgc3VwcG9ydCBieSB0ZXh0YXJlYXMhIik7fX19fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgdz0iY2hhbmdlIix2PSJpbnB1dCIsdT0icXguY2xpZW50Iix0PSJ0ZXh0IixzPSJwYXNzd29yZCIscj0iY2hlY2tib3giLHE9InJhZGlvIixwPSJ0ZXh0YXJlYSIsbj0ia2V5cHJlc3MiLG09Im9wZXJhIixkPSJwcm9wZXJ0eWNoYW5nZSIsaz0iYmx1ciIsaD0ia2V5ZG93biIsYz0ia2V5dXAiLGI9InNlbGVjdC1tdWx0aXBsZSIsZz0iY2hlY2tlZCIsZj0idmFsdWUiLGo9InNlbGVjdCIsYT0icXguZXZlbnQuaGFuZGxlci5JbnB1dCI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6cXguZXZlbnQuSUV2ZW50SGFuZGxlcixjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3RoaXMuX29uQ2hhbmdlQ2hlY2tlZFdyYXBwZXI9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9vbkNoYW5nZUNoZWNrZWQsdGhpcyk7dGhpcy5fb25DaGFuZ2VWYWx1ZVdyYXBwZXI9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9vbkNoYW5nZVZhbHVlLHRoaXMpO3RoaXMuX29uSW5wdXRXcmFwcGVyPXF4LmxhbmcuRnVuY3Rpb24ubGlzdGVuZXIodGhpcy5fb25JbnB1dCx0aGlzKTt0aGlzLl9vblByb3BlcnR5V3JhcHBlcj1xeC5sYW5nLkZ1bmN0aW9uLmxpc3RlbmVyKHRoaXMuX29uUHJvcGVydHksdGhpcyk7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KHUsbSkpe3RoaXMuX29uS2V5RG93bldyYXBwZXI9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9vbktleURvd24sdGhpcyk7dGhpcy5fb25LZXlVcFdyYXBwZXI9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9vbktleVVwLHRoaXMpO3RoaXMuX29uQmx1cldyYXBwZXI9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9vbkJsdXIsdGhpcyk7fX0sc3RhdGljczp7UFJJT1JJVFk6cXguZXZlbnQuUmVnaXN0cmF0aW9uLlBSSU9SSVRZX05PUk1BTCxTVVBQT1JURURfVFlQRVM6e2lucHV0OjEsY2hhbmdlOjF9LFRBUkdFVF9DSEVDSzpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLlRBUkdFVF9ET01OT0RFLElHTk9SRV9DQU5fSEFORExFOmZhbHNlfSxtZW1iZXJzOntfX2c6ZmFsc2UsX19oOm51bGwsX19pOm51bGwsY2FuSGFuZGxlRXZlbnQ6ZnVuY3Rpb24oeCx5KXt2YXIgej14LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZih5PT09diYmKHo9PT12fHx6PT09cCkpe3JldHVybiB0cnVlO31pZih5PT09dyYmKHo9PT12fHx6PT09cHx8ej09PWopKXtyZXR1cm4gdHJ1ZTt9cmV0dXJuIGZhbHNlO30scmVnaXN0ZXJFdmVudDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KHUseyJtc2h0bWwiOmZ1bmN0aW9uKEEsQixDKXtpZighQS5fX2ope3ZhciBEPUEudGFnTmFtZS50b0xvd2VyQ2FzZSgpO3ZhciBFPUEudHlwZTtpZihFPT09dHx8RT09PXN8fEQ9PT1wfHxFPT09cnx8RT09PXEpe3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcihBLGQsdGhpcy5fb25Qcm9wZXJ0eVdyYXBwZXIpO31pZihFIT09ciYmRSE9PXEpe3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcihBLHcsdGhpcy5fb25DaGFuZ2VWYWx1ZVdyYXBwZXIpO31pZihFPT09dHx8RT09PXMpe3RoaXMuX29uS2V5UHJlc3NXcmFwcGVkPXF4LmxhbmcuRnVuY3Rpb24ubGlzdGVuZXIodGhpcy5fb25LZXlQcmVzcyx0aGlzLEEpO3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcihBLG4sdGhpcy5fb25LZXlQcmVzc1dyYXBwZWQpO31BLl9faj10cnVlO319LCJkZWZhdWx0IjpmdW5jdGlvbihGLEcsSCl7aWYoRz09PXYpe3RoaXMuX19rKEYpO31lbHNlIGlmKEc9PT13KXtpZihGLnR5cGU9PT1xfHxGLnR5cGU9PT1yKXtxeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIoRix3LHRoaXMuX29uQ2hhbmdlQ2hlY2tlZFdyYXBwZXIpO31lbHNle3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcihGLHcsdGhpcy5fb25DaGFuZ2VWYWx1ZVdyYXBwZXIpO31pZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQodSxtKSl7aWYoRi50eXBlPT09dHx8Ri50eXBlPT09cyl7dGhpcy5fb25LZXlQcmVzc1dyYXBwZWQ9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9vbktleVByZXNzLHRoaXMsRik7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKEYsbix0aGlzLl9vbktleVByZXNzV3JhcHBlZCk7fX19fX0pLF9fazpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KHUseyJtc2h0bWwiOm51bGwsIndlYmtpdCI6ZnVuY3Rpb24oSSl7dmFyIEo9SS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYocXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjw1MzImJko9PXApe3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcihJLG4sdGhpcy5fb25JbnB1dFdyYXBwZXIpO31xeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIoSSx2LHRoaXMuX29uSW5wdXRXcmFwcGVyKTt9LCJvcGVyYSI6ZnVuY3Rpb24oSyl7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKEssYyx0aGlzLl9vbktleVVwV3JhcHBlcik7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKEssaCx0aGlzLl9vbktleURvd25XcmFwcGVyKTtxeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIoSyxrLHRoaXMuX29uQmx1cldyYXBwZXIpO3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcihLLHYsdGhpcy5fb25JbnB1dFdyYXBwZXIpO30sImRlZmF1bHQiOmZ1bmN0aW9uKEwpe3F4LmJvbS5FdmVudC5hZGROYXRpdmVMaXN0ZW5lcihMLHYsdGhpcy5fb25JbnB1dFdyYXBwZXIpO319KSx1bnJlZ2lzdGVyRXZlbnQ6cXguY29yZS5WYXJpYW50LnNlbGVjdCh1LHsibXNodG1sIjpmdW5jdGlvbihNLE4pe2lmKE0uX19qKXt2YXIgTz1NLnRhZ05hbWUudG9Mb3dlckNhc2UoKTt2YXIgUD1NLnR5cGU7aWYoUD09PXR8fFA9PT1zfHxPPT09cHx8UD09PXJ8fFA9PT1xKXtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIoTSxkLHRoaXMuX29uUHJvcGVydHlXcmFwcGVyKTt9aWYoUCE9PXImJlAhPT1xKXtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIoTSx3LHRoaXMuX29uQ2hhbmdlVmFsdWVXcmFwcGVyKTt9aWYoUD09PXR8fFA9PT1zKXtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIoTSxuLHRoaXMuX29uS2V5UHJlc3NXcmFwcGVkKTt9dHJ5e2RlbGV0ZSBNLl9fajt9Y2F0Y2goUSl7TS5fX2o9bnVsbDt9fX0sImRlZmF1bHQiOmZ1bmN0aW9uKFIsUyl7aWYoUz09PXYpe3RoaXMuX19rKFIpO31lbHNlIGlmKFM9PT13KXtpZihSLnR5cGU9PT1xfHxSLnR5cGU9PT1yKXtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIoUix3LHRoaXMuX29uQ2hhbmdlQ2hlY2tlZFdyYXBwZXIpO31lbHNle3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcihSLHcsdGhpcy5fb25DaGFuZ2VWYWx1ZVdyYXBwZXIpO319aWYocXguY29yZS5WYXJpYW50LmlzU2V0KHUsbSkpe2lmKFIudHlwZT09PXR8fFIudHlwZT09PXMpe3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcihSLG4sdGhpcy5fb25LZXlQcmVzc1dyYXBwZWQpO319fX0pLF9fbDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KHUseyJtc2h0bWwiOm51bGwsIndlYmtpdCI6ZnVuY3Rpb24oVCl7dmFyIFU9VC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYocXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjw1MzImJlU9PXApe3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcihULG4sdGhpcy5fb25JbnB1dFdyYXBwZXIpO31xeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIoVCx2LHRoaXMuX29uSW5wdXRXcmFwcGVyKTt9LCJvcGVyYSI6ZnVuY3Rpb24oVil7cXguYm9tLkV2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKFYsYyx0aGlzLl9vbktleVVwV3JhcHBlcik7cXguYm9tLkV2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKFYsaCx0aGlzLl9vbktleURvd25XcmFwcGVyKTtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIoVixrLHRoaXMuX29uQmx1cldyYXBwZXIpO3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcihWLHYsdGhpcy5fb25JbnB1dFdyYXBwZXIpO30sImRlZmF1bHQiOmZ1bmN0aW9uKFcpe3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcihXLHYsdGhpcy5fb25JbnB1dFdyYXBwZXIpO319KSxfb25LZXlQcmVzczpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KHUseyJtc2h0bWx8b3BlcmEiOmZ1bmN0aW9uKGUsWCl7aWYoZS5rZXlDb2RlPT09MTMpe2lmKFgudmFsdWUhPT10aGlzLl9faSl7dGhpcy5fX2k9WC52YWx1ZTtxeC5ldmVudC5SZWdpc3RyYXRpb24uZmlyZUV2ZW50KFgsdyxxeC5ldmVudC50eXBlLkRhdGEsW1gudmFsdWVdKTt9fX0sImRlZmF1bHQiOm51bGx9KSxfb25LZXlEb3duOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QodSx7Im9wZXJhIjpmdW5jdGlvbihlKXtpZihlLmtleUNvZGU9PT0xMyl7dGhpcy5fX2c9dHJ1ZTt9fSwiZGVmYXVsdCI6bnVsbH0pLF9vbktleVVwOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QodSx7Im9wZXJhIjpmdW5jdGlvbihlKXtpZihlLmtleUNvZGU9PT0xMyl7dGhpcy5fX2c9ZmFsc2U7fX0sImRlZmF1bHQiOm51bGx9KSxfb25CbHVyOnF4LmNvcmUuVmFyaWFudC5zZWxlY3QodSx7Im9wZXJhIjpmdW5jdGlvbihlKXtpZih0aGlzLl9faCl7d2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9faCk7fX0sImRlZmF1bHQiOm51bGx9KSxfb25JbnB1dDpxeC5ldmVudC5HbG9iYWxFcnJvci5vYnNlcnZlTWV0aG9kKGZ1bmN0aW9uKGUpe3ZhciBZPXF4LmJvbS5FdmVudC5nZXRUYXJnZXQoZSk7aWYoIXRoaXMuX19nKXtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQodSxtKSl7dGhpcy5fX2g9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZmlyZUV2ZW50KFksdixxeC5ldmVudC50eXBlLkRhdGEsW1kudmFsdWVdKTt9LDApO31lbHNle3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5maXJlRXZlbnQoWSx2LHF4LmV2ZW50LnR5cGUuRGF0YSxbWS52YWx1ZV0pO319fSksX29uQ2hhbmdlVmFsdWU6cXguZXZlbnQuR2xvYmFsRXJyb3Iub2JzZXJ2ZU1ldGhvZChmdW5jdGlvbihlKXt2YXIgYmI9cXguYm9tLkV2ZW50LmdldFRhcmdldChlKTt2YXIgYmE9YmIudmFsdWU7aWYoYmIudHlwZT09PWIpe3ZhciBiYT1bXTtmb3IodmFyIGk9MCxvPWJiLm9wdGlvbnMsbD1vLmxlbmd0aDtpPGw7aSsrKXtpZihvW2ldLnNlbGVjdGVkKXtiYS5wdXNoKG9baV0udmFsdWUpO319fXF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5maXJlRXZlbnQoYmIsdyxxeC5ldmVudC50eXBlLkRhdGEsW2JhXSk7fSksX29uQ2hhbmdlQ2hlY2tlZDpxeC5ldmVudC5HbG9iYWxFcnJvci5vYnNlcnZlTWV0aG9kKGZ1bmN0aW9uKGUpe3ZhciBiYz1xeC5ib20uRXZlbnQuZ2V0VGFyZ2V0KGUpO2lmKGJjLnR5cGU9PT1xKXtpZihiYy5jaGVja2VkKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZmlyZUV2ZW50KGJjLHcscXguZXZlbnQudHlwZS5EYXRhLFtiYy52YWx1ZV0pO319ZWxzZXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZmlyZUV2ZW50KGJjLHcscXguZXZlbnQudHlwZS5EYXRhLFtiYy5jaGVja2VkXSk7fX0pLF9vblByb3BlcnR5OnF4LmNvcmUuVmFyaWFudC5zZWxlY3QodSx7Im1zaHRtbCI6cXguZXZlbnQuR2xvYmFsRXJyb3Iub2JzZXJ2ZU1ldGhvZChmdW5jdGlvbihlKXt2YXIgYmQ9cXguYm9tLkV2ZW50LmdldFRhcmdldChlKTt2YXIgYmU9ZS5wcm9wZXJ0eU5hbWU7aWYoYmU9PT1mJiYoYmQudHlwZT09PXR8fGJkLnR5cGU9PT1zfHxiZC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT1wKSl7aWYoIWJkLiQkaW5WYWx1ZVNldCl7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmZpcmVFdmVudChiZCx2LHF4LmV2ZW50LnR5cGUuRGF0YSxbYmQudmFsdWVdKTt9fWVsc2UgaWYoYmU9PT1nKXtpZihiZC50eXBlPT09cil7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmZpcmVFdmVudChiZCx3LHF4LmV2ZW50LnR5cGUuRGF0YSxbYmQuY2hlY2tlZF0pO31lbHNlIGlmKGJkLmNoZWNrZWQpe3F4LmV2ZW50LlJlZ2lzdHJhdGlvbi5maXJlRXZlbnQoYmQsdyxxeC5ldmVudC50eXBlLkRhdGEsW2JkLnZhbHVlXSk7fX19KSwiZGVmYXVsdCI6ZnVuY3Rpb24oKXt9fSl9LGRlZmVyOmZ1bmN0aW9uKGJmKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uYWRkSGFuZGxlcihiZik7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIHY9IiIsdT0ic2VsZWN0Iix0PSJzb2Z0IixzPSJvZmYiLHI9InF4LmNsaWVudCIscT0idGV4dGFyZWEiLHA9IndyYXAiLG89InRleHQiLG49Im1zaHRtbCIsbT0ibnVtYmVyIixkPSJjaGVja2JveCIsaz0ic2VsZWN0LW9uZSIsZz0iaW5wdXQiLGM9Im9wdGlvbiIsYj0idmFsdWUiLGY9InJhZGlvIixlPSJxeC5ib20uSW5wdXQiLGg9Im5vd3JhcCIsYT0iYXV0byIsaj0ibm9ybWFsIjtxeC5DbGFzcy5kZWZpbmUoZSx7c3RhdGljczp7X19mOnt0ZXh0OjEsdGV4dGFyZWE6MSxzZWxlY3Q6MSxjaGVja2JveDoxLHJhZGlvOjEscGFzc3dvcmQ6MSxoaWRkZW46MSxzdWJtaXQ6MSxpbWFnZToxLGZpbGU6MSxzZWFyY2g6MSxyZXNldDoxLGJ1dHRvbjoxfSxjcmVhdGU6ZnVuY3Rpb24odyx4LHkpe3t9O3ZhciB4PXg/cXgubGFuZy5PYmplY3QuY2xvbmUoeCk6e307dmFyIHo7aWYodz09PXF8fHc9PT11KXt6PXc7fWVsc2V7ej1nO3gudHlwZT13O31yZXR1cm4gcXguYm9tLkVsZW1lbnQuY3JlYXRlKHoseCx5KTt9LHNldFZhbHVlOmZ1bmN0aW9uKEEsQil7dmFyIEc9QS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3ZhciBEPUEudHlwZTt2YXIgQXJyYXk9cXgubGFuZy5BcnJheTt2YXIgSD1xeC5sYW5nLlR5cGU7aWYodHlwZW9mIEI9PT1tKXtCKz12O31pZigoRD09PWR8fEQ9PT1mKSl7aWYoSC5pc0FycmF5KEIpKXtBLmNoZWNrZWQ9QXJyYXkuY29udGFpbnMoQixBLnZhbHVlKTt9ZWxzZXtBLmNoZWNrZWQ9QS52YWx1ZT09Qjt9fWVsc2UgaWYoRz09PXUpe3ZhciBDPUguaXNBcnJheShCKTt2YXIgST1BLm9wdGlvbnM7dmFyIEUsRjtmb3IodmFyIGk9MCxsPUkubGVuZ3RoO2k8bDtpKyspe0U9SVtpXTtGPUUuZ2V0QXR0cmlidXRlKGIpO2lmKEY9PW51bGwpe0Y9RS50ZXh0O31FLnNlbGVjdGVkPUM/QXJyYXkuY29udGFpbnMoQixGKTpCPT1GO31pZihDJiZCLmxlbmd0aD09MCl7QS5zZWxlY3RlZEluZGV4PS0xO319ZWxzZSBpZigoRD09PW98fEQ9PT1xKSYmcXguY29yZS5WYXJpYW50LmlzU2V0KHIsbikpe0EuJCRpblZhbHVlU2V0PXRydWU7QS52YWx1ZT1CO0EuJCRpblZhbHVlU2V0PW51bGw7fWVsc2V7QS52YWx1ZT1CO319LGdldFZhbHVlOmZ1bmN0aW9uKEope3ZhciBQPUoubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihQPT09Yyl7cmV0dXJuIChKLmF0dHJpYnV0ZXMudmFsdWV8fHt9KS5zcGVjaWZpZWQ/Si52YWx1ZTpKLnRleHQ7fWlmKFA9PT11KXt2YXIgSz1KLnNlbGVjdGVkSW5kZXg7aWYoSzwwKXtyZXR1cm4gbnVsbDt9dmFyIFE9W107dmFyIFM9Si5vcHRpb25zO3ZhciBSPUoudHlwZT09azt2YXIgTz1xeC5ib20uSW5wdXQ7dmFyIE47Zm9yKHZhciBpPVI/SzowLE09Uj9LKzE6Uy5sZW5ndGg7aTxNO2krKyl7dmFyIEw9U1tpXTtpZihMLnNlbGVjdGVkKXtOPU8uZ2V0VmFsdWUoTCk7aWYoUil7cmV0dXJuIE47fVEucHVzaChOKTt9fXJldHVybiBRO31lbHNle3JldHVybiAoSi52YWx1ZXx8dikucmVwbGFjZSgvXHIvZyx2KTt9fSxzZXRXcmFwOnF4LmNvcmUuVmFyaWFudC5zZWxlY3Qocix7Im1zaHRtbCI6ZnVuY3Rpb24oVCxVKXtULndyYXA9VT90OnM7fSwiZ2Vja298d2Via2l0IjpmdW5jdGlvbihWLFcpe3ZhciBZPVc/dDpzO3ZhciBYPVc/djphO1Yuc2V0QXR0cmlidXRlKHAsWSk7Vi5zdHlsZS5vdmVyZmxvdz1YO30sImRlZmF1bHQiOmZ1bmN0aW9uKGJhLGJiKXtiYS5zdHlsZS53aGl0ZVNwYWNlPWJiP2o6aDt9fSl9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYz0icXguZXZlbnQudHlwZS5EYXRhIixiPSJxeC5ldmVudC50eXBlLkV2ZW50IixhPSJxeC51aS50YWJsZS5JVGFibGVNb2RlbCI7cXguSW50ZXJmYWNlLmRlZmluZShhLHtldmVudHM6eyJkYXRhQ2hhbmdlZCI6YywibWV0YURhdGFDaGFuZ2VkIjpiLCJzb3J0ZWQiOmN9LG1lbWJlcnM6e2dldFJvd0NvdW50OmZ1bmN0aW9uKCl7fSxnZXRSb3dEYXRhOmZ1bmN0aW9uKGQpe30sZ2V0Q29sdW1uQ291bnQ6ZnVuY3Rpb24oKXt9LGdldENvbHVtbklkOmZ1bmN0aW9uKGUpe30sZ2V0Q29sdW1uSW5kZXhCeUlkOmZ1bmN0aW9uKGYpe30sZ2V0Q29sdW1uTmFtZTpmdW5jdGlvbihnKXt9LGlzQ29sdW1uRWRpdGFibGU6ZnVuY3Rpb24oaCl7fSxpc0NvbHVtblNvcnRhYmxlOmZ1bmN0aW9uKGkpe30sc29ydEJ5Q29sdW1uOmZ1bmN0aW9uKGosayl7fSxnZXRTb3J0Q29sdW1uSW5kZXg6ZnVuY3Rpb24oKXt9LGlzU29ydEFzY2VuZGluZzpmdW5jdGlvbigpe30scHJlZmV0Y2hSb3dzOmZ1bmN0aW9uKGwsbSl7fSxnZXRWYWx1ZTpmdW5jdGlvbihuLG8pe30sZ2V0VmFsdWVCeUlkOmZ1bmN0aW9uKHAscSl7fSxzZXRWYWx1ZTpmdW5jdGlvbihyLHMsdCl7fSxzZXRWYWx1ZUJ5SWQ6ZnVuY3Rpb24odSx2LHcpe319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZT0ibWV0YURhdGFDaGFuZ2VkIixkPSJxeC5ldmVudC50eXBlLkRhdGEiLGM9InF4LmV2ZW50LnR5cGUuRXZlbnQiLGI9ImFic3RyYWN0IixhPSJxeC51aS50YWJsZS5tb2RlbC5BYnN0cmFjdCI7cXguQ2xhc3MuZGVmaW5lKGEse3R5cGU6YixleHRlbmQ6cXguY29yZS5PYmplY3QsaW1wbGVtZW50OnF4LnVpLnRhYmxlLklUYWJsZU1vZGVsLGV2ZW50czp7ImRhdGFDaGFuZ2VkIjpkLCJtZXRhRGF0YUNoYW5nZWQiOmMsInNvcnRlZCI6ZH0sY29uc3RydWN0OmZ1bmN0aW9uKCl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9fdk09W107dGhpcy5fX3ZOPVtdO3RoaXMuX192Tz17fTt9LG1lbWJlcnM6e19fdk06bnVsbCxfX3ZOOm51bGwsX192TzpudWxsLF9fdlA6bnVsbCxpbml0OmZ1bmN0aW9uKGYpe30sZ2V0Um93Q291bnQ6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoImdldFJvd0NvdW50IGlzIGFic3RyYWN0Iik7fSxnZXRSb3dEYXRhOmZ1bmN0aW9uKGcpe3JldHVybiBudWxsO30saXNDb2x1bW5FZGl0YWJsZTpmdW5jdGlvbihoKXtyZXR1cm4gZmFsc2U7fSxpc0NvbHVtblNvcnRhYmxlOmZ1bmN0aW9uKGope3JldHVybiBmYWxzZTt9LHNvcnRCeUNvbHVtbjpmdW5jdGlvbihrLGwpe30sZ2V0U29ydENvbHVtbkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIC0xO30saXNTb3J0QXNjZW5kaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRydWU7fSxwcmVmZXRjaFJvd3M6ZnVuY3Rpb24obSxuKXt9LGdldFZhbHVlOmZ1bmN0aW9uKG8scCl7dGhyb3cgbmV3IEVycm9yKCJnZXRWYWx1ZSBpcyBhYnN0cmFjdCIpO30sZ2V0VmFsdWVCeUlkOmZ1bmN0aW9uKHEscil7cmV0dXJuIHRoaXMuZ2V0VmFsdWUodGhpcy5nZXRDb2x1bW5JbmRleEJ5SWQocSkscik7fSxzZXRWYWx1ZTpmdW5jdGlvbihzLHQsdSl7dGhyb3cgbmV3IEVycm9yKCJzZXRWYWx1ZSBpcyBhYnN0cmFjdCIpO30sc2V0VmFsdWVCeUlkOmZ1bmN0aW9uKHYsdyx4KXt0aGlzLnNldFZhbHVlKHRoaXMuZ2V0Q29sdW1uSW5kZXhCeUlkKHYpLHcseCk7fSxnZXRDb2x1bW5Db3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdk0ubGVuZ3RoO30sZ2V0Q29sdW1uSW5kZXhCeUlkOmZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLl9fdk9beV07fSxnZXRDb2x1bW5JZDpmdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5fX3ZNW3pdO30sZ2V0Q29sdW1uTmFtZTpmdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5fX3ZOW0FdO30sc2V0Q29sdW1uSWRzOmZ1bmN0aW9uKEIpe3RoaXMuX192TT1CO3RoaXMuX192Tz17fTtmb3IodmFyIGk9MDtpPEIubGVuZ3RoO2krKyl7dGhpcy5fX3ZPW0JbaV1dPWk7fXRoaXMuX192Tj1uZXcgQXJyYXkoQi5sZW5ndGgpO2lmKCF0aGlzLl9fdlApe3RoaXMuZmlyZUV2ZW50KGUpO319LHNldENvbHVtbk5hbWVzQnlJbmRleDpmdW5jdGlvbihDKXtpZih0aGlzLl9fdk0ubGVuZ3RoIT1DLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCJ0aGlzLl9fY29sdW1uSWRBcnIgYW5kIGNvbHVtbk5hbWVBcnIgaGF2ZSBkaWZmZXJlbnQgbGVuZ3RoOiAiK3RoaXMuX192TS5sZW5ndGgrIiAhPSAiK0MubGVuZ3RoKTt9dGhpcy5fX3ZOPUM7dGhpcy5maXJlRXZlbnQoZSk7fSxzZXRDb2x1bW5OYW1lc0J5SWQ6ZnVuY3Rpb24oRCl7dGhpcy5fX3ZOPW5ldyBBcnJheSh0aGlzLl9fdk0ubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMuX192TS5sZW5ndGg7KytpKXt0aGlzLl9fdk5baV09RFt0aGlzLl9fdk1baV1dO319LHNldENvbHVtbnM6ZnVuY3Rpb24oRSxGKXt2YXIgRz10aGlzLl9fdk0ubGVuZ3RoPT0wfHxGO2lmKEY9PW51bGwpe2lmKHRoaXMuX192TS5sZW5ndGg9PTApe0Y9RTt9ZWxzZXtGPXRoaXMuX192TTt9fWlmKEYubGVuZ3RoIT1FLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCJjb2x1bW5JZEFyciBhbmQgY29sdW1uTmFtZUFyciBoYXZlIGRpZmZlcmVudCBsZW5ndGg6ICIrRi5sZW5ndGgrIiAhPSAiK0UubGVuZ3RoKTt9aWYoRyl7dGhpcy5fX3ZQPXRydWU7dGhpcy5zZXRDb2x1bW5JZHMoRik7dGhpcy5fX3ZQPWZhbHNlO310aGlzLnNldENvbHVtbk5hbWVzQnlJbmRleChFKTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX192TT10aGlzLl9fdk49dGhpcy5fX3ZPPW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGU9ImRhdGFDaGFuZ2VkIixkPSJtZXRhRGF0YUNoYW5nZWQiLGM9InF4LnVpLnRhYmxlLm1vZGVsLlNpbXBsZSIsYj0iQm9vbGVhbiIsYT0ic29ydGVkIjtxeC5DbGFzcy5kZWZpbmUoYyx7ZXh0ZW5kOnF4LnVpLnRhYmxlLm1vZGVsLkFic3RyYWN0LGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnVpLnRhYmxlLm1vZGVsLkFic3RyYWN0LmNhbGwodGhpcyk7dGhpcy5fX3hNPVtdO3RoaXMuX194Tj0tMTt0aGlzLl9feE89W107dGhpcy5fX3hQPW51bGw7fSxwcm9wZXJ0aWVzOntjYXNlU2Vuc2l0aXZlU29ydGluZzp7Y2hlY2s6Yixpbml0OnRydWV9fSxzdGF0aWNzOntfZGVmYXVsdFNvcnRDb21wYXJhdG9yQXNjZW5kaW5nOmZ1bmN0aW9uKGYsZyl7dmFyIGg9Zlthcmd1bWVudHMuY2FsbGVlLmNvbHVtbkluZGV4XTt2YXIgaz1nW2FyZ3VtZW50cy5jYWxsZWUuY29sdW1uSW5kZXhdO2lmKHF4LmxhbmcuVHlwZS5pc051bWJlcihoKSYmcXgubGFuZy5UeXBlLmlzTnVtYmVyKGspKXt2YXIgbD1pc05hTihoKT9pc05hTihrKT8wOjE6aXNOYU4oayk/LTE6bnVsbDtpZihsIT1udWxsKXtyZXR1cm4gbDt9fXJldHVybiAoaD5rKT8xOigoaD09ayk/MDotMSk7fSxfZGVmYXVsdFNvcnRDb21wYXJhdG9ySW5zZW5zaXRpdmVBc2NlbmRpbmc6ZnVuY3Rpb24obSxuKXt2YXIgbz0obVthcmd1bWVudHMuY2FsbGVlLmNvbHVtbkluZGV4XS50b0xvd2VyQ2FzZT9tW2FyZ3VtZW50cy5jYWxsZWUuY29sdW1uSW5kZXhdLnRvTG93ZXJDYXNlKCk6bVthcmd1bWVudHMuY2FsbGVlLmNvbHVtbkluZGV4XSk7dmFyIHA9KG5bYXJndW1lbnRzLmNhbGxlZS5jb2x1bW5JbmRleF0udG9Mb3dlckNhc2U/blthcmd1bWVudHMuY2FsbGVlLmNvbHVtbkluZGV4XS50b0xvd2VyQ2FzZSgpOm5bYXJndW1lbnRzLmNhbGxlZS5jb2x1bW5JbmRleF0pO2lmKHF4LmxhbmcuVHlwZS5pc051bWJlcihvKSYmcXgubGFuZy5UeXBlLmlzTnVtYmVyKHApKXt2YXIgcT1pc05hTihvKT9pc05hTihwKT8wOjE6aXNOYU4ocCk/LTE6bnVsbDtpZihxIT1udWxsKXtyZXR1cm4gcTt9fXJldHVybiAobz5wKT8xOigobz09cCk/MDotMSk7fSxfZGVmYXVsdFNvcnRDb21wYXJhdG9yRGVzY2VuZGluZzpmdW5jdGlvbihyLHMpe3ZhciB0PXJbYXJndW1lbnRzLmNhbGxlZS5jb2x1bW5JbmRleF07dmFyIHU9c1thcmd1bWVudHMuY2FsbGVlLmNvbHVtbkluZGV4XTtpZihxeC5sYW5nLlR5cGUuaXNOdW1iZXIodCkmJnF4LmxhbmcuVHlwZS5pc051bWJlcih1KSl7dmFyIHY9aXNOYU4odCk/aXNOYU4odSk/MDoxOmlzTmFOKHUpPy0xOm51bGw7aWYodiE9bnVsbCl7cmV0dXJuIHY7fX1yZXR1cm4gKHQ8dSk/MTooKHQ9PXUpPzA6LTEpO30sX2RlZmF1bHRTb3J0Q29tcGFyYXRvckluc2Vuc2l0aXZlRGVzY2VuZGluZzpmdW5jdGlvbih3LHgpe3ZhciB5PSh3W2FyZ3VtZW50cy5jYWxsZWUuY29sdW1uSW5kZXhdLnRvTG93ZXJDYXNlP3dbYXJndW1lbnRzLmNhbGxlZS5jb2x1bW5JbmRleF0udG9Mb3dlckNhc2UoKTp3W2FyZ3VtZW50cy5jYWxsZWUuY29sdW1uSW5kZXhdKTt2YXIgej0oeFthcmd1bWVudHMuY2FsbGVlLmNvbHVtbkluZGV4XS50b0xvd2VyQ2FzZT94W2FyZ3VtZW50cy5jYWxsZWUuY29sdW1uSW5kZXhdLnRvTG93ZXJDYXNlKCk6eFthcmd1bWVudHMuY2FsbGVlLmNvbHVtbkluZGV4XSk7aWYocXgubGFuZy5UeXBlLmlzTnVtYmVyKHkpJiZxeC5sYW5nLlR5cGUuaXNOdW1iZXIoeikpe3ZhciBBPWlzTmFOKHkpP2lzTmFOKHopPzA6MTppc05hTih6KT8tMTpudWxsO2lmKEEhPW51bGwpe3JldHVybiBBO319cmV0dXJuICh5PHopPzE6KCh5PT16KT8wOi0xKTt9fSxtZW1iZXJzOntfX3hNOm51bGwsX194UDpudWxsLF9feFE6bnVsbCxfX3hPOm51bGwsX194TjpudWxsLF9feFI6bnVsbCxnZXRSb3dEYXRhOmZ1bmN0aW9uKEIpe3ZhciBDPXRoaXMuX194TVtCXTtpZihDPT1udWxsfHxDLm9yaWdpbmFsRGF0YT09bnVsbCl7cmV0dXJuIEM7fWVsc2V7cmV0dXJuIEMub3JpZ2luYWxEYXRhO319LGdldFJvd0RhdGFBc01hcDpmdW5jdGlvbihEKXt2YXIgRj10aGlzLl9feE1bRF07aWYoRiE9bnVsbCl7dmFyIEU9e307Zm9yKHZhciBHPTA7Rzx0aGlzLmdldENvbHVtbkNvdW50KCk7RysrKXtFW3RoaXMuZ2V0Q29sdW1uSWQoRyldPUZbR107fWlmKEYub3JpZ2luYWxEYXRhIT1udWxsKXtmb3IodmFyIEggaW4gRi5vcmlnaW5hbERhdGEpe2lmKEVbSF09PXVuZGVmaW5lZCl7RVtIXT1GLm9yaWdpbmFsRGF0YVtIXTt9fX1yZXR1cm4gRTt9cmV0dXJuIChGJiZGLm9yaWdpbmFsRGF0YSk/Ri5vcmlnaW5hbERhdGE6bnVsbDt9LGdldERhdGFBc01hcEFycmF5OmZ1bmN0aW9uKCl7dmFyIEo9dGhpcy5nZXRSb3dDb3VudCgpO3ZhciBJPVtdO2Zvcih2YXIgaT0wO2k8SjtpKyspe0kucHVzaCh0aGlzLmdldFJvd0RhdGFBc01hcChpKSk7fXJldHVybiBJO30sc2V0RWRpdGFibGU6ZnVuY3Rpb24oSyl7dGhpcy5fX3hQPVtdO2Zvcih2YXIgTD0wO0w8dGhpcy5nZXRDb2x1bW5Db3VudCgpO0wrKyl7dGhpcy5fX3hQW0xdPUs7fXRoaXMuZmlyZUV2ZW50KGQpO30sc2V0Q29sdW1uRWRpdGFibGU6ZnVuY3Rpb24oTSxOKXtpZihOIT10aGlzLmlzQ29sdW1uRWRpdGFibGUoTSkpe2lmKHRoaXMuX194UD09bnVsbCl7dGhpcy5fX3hQPVtdO310aGlzLl9feFBbTV09Tjt0aGlzLmZpcmVFdmVudChkKTt9fSxpc0NvbHVtbkVkaXRhYmxlOmZ1bmN0aW9uKE8pe3JldHVybiB0aGlzLl9feFA/KHRoaXMuX194UFtPXT09dHJ1ZSk6ZmFsc2U7fSxzZXRDb2x1bW5Tb3J0YWJsZTpmdW5jdGlvbihQLFEpe2lmKFEhPXRoaXMuaXNDb2x1bW5Tb3J0YWJsZShQKSl7aWYodGhpcy5fX3hRPT1udWxsKXt0aGlzLl9feFE9W107fXRoaXMuX194UVtQXT1RO3RoaXMuZmlyZUV2ZW50KGQpO319LGlzQ29sdW1uU29ydGFibGU6ZnVuY3Rpb24oUil7cmV0dXJuICh0aGlzLl9feFE/KHRoaXMuX194UVtSXSE9PWZhbHNlKTp0cnVlKTt9LHNvcnRCeUNvbHVtbjpmdW5jdGlvbihTLFQpe3ZhciBXO3ZhciBWPXRoaXMuX194T1tTXTtpZihWKXtXPShUP1YuYXNjZW5kaW5nOlYuZGVzY2VuZGluZyk7fWVsc2V7aWYodGhpcy5nZXRDYXNlU2Vuc2l0aXZlU29ydGluZygpKXtXPShUP3F4LnVpLnRhYmxlLm1vZGVsLlNpbXBsZS5fZGVmYXVsdFNvcnRDb21wYXJhdG9yQXNjZW5kaW5nOnF4LnVpLnRhYmxlLm1vZGVsLlNpbXBsZS5fZGVmYXVsdFNvcnRDb21wYXJhdG9yRGVzY2VuZGluZyk7fWVsc2V7Vz0oVD9xeC51aS50YWJsZS5tb2RlbC5TaW1wbGUuX2RlZmF1bHRTb3J0Q29tcGFyYXRvckluc2Vuc2l0aXZlQXNjZW5kaW5nOnF4LnVpLnRhYmxlLm1vZGVsLlNpbXBsZS5fZGVmYXVsdFNvcnRDb21wYXJhdG9ySW5zZW5zaXRpdmVEZXNjZW5kaW5nKTt9fVcuY29sdW1uSW5kZXg9Uzt0aGlzLl9feE0uc29ydChXKTt0aGlzLl9feE49Uzt0aGlzLl9feFI9VDt2YXIgVT17Y29sdW1uSW5kZXg6Uyxhc2NlbmRpbmc6VH07dGhpcy5maXJlRGF0YUV2ZW50KGEsVSk7dGhpcy5maXJlRXZlbnQoZCk7fSxzZXRTb3J0TWV0aG9kczpmdW5jdGlvbihYLFkpe3ZhciBiYTtpZihxeC5sYW5nLlR5cGUuaXNGdW5jdGlvbihZKSl7YmE9e2FzY2VuZGluZzpZLGRlc2NlbmRpbmc6ZnVuY3Rpb24oYmIsYmMpe3JldHVybiBZKGJjLGJiKTt9fTt9ZWxzZXtiYT1ZO310aGlzLl9feE9bWF09YmE7fSxnZXRTb3J0TWV0aG9kczpmdW5jdGlvbihiZCl7cmV0dXJuIHRoaXMuX194T1tiZF07fSxjbGVhclNvcnRpbmc6ZnVuY3Rpb24oKXtpZih0aGlzLl9feE4hPS0xKXt0aGlzLl9feE49LTE7dGhpcy5fX3hSPXRydWU7dGhpcy5maXJlRXZlbnQoZCk7fX0sZ2V0U29ydENvbHVtbkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX194Tjt9LF9zZXRTb3J0Q29sdW1uSW5kZXg6ZnVuY3Rpb24oYmUpe3RoaXMuX194Tj1iZTt9LGlzU29ydEFzY2VuZGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9feFI7fSxfc2V0U29ydEFzY2VuZGluZzpmdW5jdGlvbihiZil7dGhpcy5fX3hSPWJmO30sZ2V0Um93Q291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3hNLmxlbmd0aDt9LGdldFZhbHVlOmZ1bmN0aW9uKGJnLGJoKXtpZihiaDwwfHxiaD49dGhpcy5fX3hNLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCJ0aGlzLl9fcm93QXJyIG91dCBvZiBib3VuZHM6ICIrYmgrIiAoMC4uIit0aGlzLl9feE0ubGVuZ3RoKyIpIik7fXJldHVybiB0aGlzLl9feE1bYmhdW2JnXTt9LHNldFZhbHVlOmZ1bmN0aW9uKGJpLGJqLGJrKXtpZih0aGlzLl9feE1bYmpdW2JpXSE9Ymspe3RoaXMuX194TVtial1bYmldPWJrO2lmKHRoaXMuaGFzTGlzdGVuZXIoZSkpe3ZhciBibD17Zmlyc3RSb3c6YmosbGFzdFJvdzpiaixmaXJzdENvbHVtbjpiaSxsYXN0Q29sdW1uOmJpfTt0aGlzLmZpcmVEYXRhRXZlbnQoZSxibCk7fWlmKGJpPT10aGlzLl9feE4pe3RoaXMuY2xlYXJTb3J0aW5nKCk7fX19LHNldERhdGE6ZnVuY3Rpb24oYm0sYm4pe3RoaXMuX194TT1ibTtpZih0aGlzLmhhc0xpc3RlbmVyKGUpKXt2YXIgYm89e2ZpcnN0Um93OjAsbGFzdFJvdzpibS5sZW5ndGgtMSxmaXJzdENvbHVtbjowLGxhc3RDb2x1bW46dGhpcy5nZXRDb2x1bW5Db3VudCgpLTF9O3RoaXMuZmlyZURhdGFFdmVudChlLGJvKTt9aWYoYm4hPT1mYWxzZSl7dGhpcy5jbGVhclNvcnRpbmcoKTt9fSxnZXREYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX194TTt9LHNldERhdGFBc01hcEFycmF5OmZ1bmN0aW9uKGJwLGJxLGJyKXt0aGlzLnNldERhdGEodGhpcy5fbWFwQXJyYXkyUm93QXJyKGJwLGJxKSxicik7fSxhZGRSb3dzOmZ1bmN0aW9uKGJzLGJ0LGJ1KXtpZihidD09bnVsbCl7YnQ9dGhpcy5fX3hNLmxlbmd0aDt9YnMuc3BsaWNlKDAsMCxidCwwKTtBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KHRoaXMuX194TSxicyk7dmFyIGJ2PXtmaXJzdFJvdzpidCxsYXN0Um93OnRoaXMuX194TS5sZW5ndGgtMSxmaXJzdENvbHVtbjowLGxhc3RDb2x1bW46dGhpcy5nZXRDb2x1bW5Db3VudCgpLTF9O3RoaXMuZmlyZURhdGFFdmVudChlLGJ2KTtpZihidSE9PWZhbHNlKXt0aGlzLmNsZWFyU29ydGluZygpO319LGFkZFJvd3NBc01hcEFycmF5OmZ1bmN0aW9uKGJ3LGJ4LGJ5LGJ6KXt0aGlzLmFkZFJvd3ModGhpcy5fbWFwQXJyYXkyUm93QXJyKGJ3LGJ5KSxieCxieik7fSxzZXRSb3dzOmZ1bmN0aW9uKGJBLGJCLGJDKXtpZihiQj09bnVsbCl7YkI9MDt9YkEuc3BsaWNlKDAsMCxiQixiQS5sZW5ndGgpO0FycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkodGhpcy5fX3hNLGJBKTt2YXIgYkQ9e2ZpcnN0Um93OmJCLGxhc3RSb3c6dGhpcy5fX3hNLmxlbmd0aC0xLGZpcnN0Q29sdW1uOjAsbGFzdENvbHVtbjp0aGlzLmdldENvbHVtbkNvdW50KCktMX07dGhpcy5maXJlRGF0YUV2ZW50KGUsYkQpO2lmKGJDIT09ZmFsc2Upe3RoaXMuY2xlYXJTb3J0aW5nKCk7fX0sc2V0Um93c0FzTWFwQXJyYXk6ZnVuY3Rpb24oYkUsYkYsYkcsYkgpe3RoaXMuc2V0Um93cyh0aGlzLl9tYXBBcnJheTJSb3dBcnIoYkUsYkcpLGJGLGJIKTt9LHJlbW92ZVJvd3M6ZnVuY3Rpb24oYkksYkosYkspe3RoaXMuX194TS5zcGxpY2UoYkksYkopO3ZhciBiTD17Zmlyc3RSb3c6YkksbGFzdFJvdzp0aGlzLl9feE0ubGVuZ3RoLTEsZmlyc3RDb2x1bW46MCxsYXN0Q29sdW1uOnRoaXMuZ2V0Q29sdW1uQ291bnQoKS0xLHJlbW92ZVN0YXJ0OmJJLHJlbW92ZUNvdW50OmJKfTt0aGlzLmZpcmVEYXRhRXZlbnQoZSxiTCk7aWYoYkshPT1mYWxzZSl7dGhpcy5jbGVhclNvcnRpbmcoKTt9fSxfbWFwQXJyYXkyUm93QXJyOmZ1bmN0aW9uKGJNLGJOKXt2YXIgYlI9Yk0ubGVuZ3RoO3ZhciBiTz10aGlzLmdldENvbHVtbkNvdW50KCk7dmFyIGJRPW5ldyBBcnJheShiUik7dmFyIGJQO2Zvcih2YXIgaT0wO2k8YlI7KytpKXtiUD1bXTtpZihiTil7YlAub3JpZ2luYWxEYXRhPWJNW2ldO31mb3IodmFyIGo9MDtqPGJPOysrail7YlBbal09Yk1baV1bdGhpcy5nZXRDb2x1bW5JZChqKV07fWJRW2ldPWJQO31yZXR1cm4gYlE7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9feE09dGhpcy5fX3hQPXRoaXMuX194Tz10aGlzLl9feFE9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgudWkudGFibGUuSUNlbGxFZGl0b3JGYWN0b3J5IjtxeC5JbnRlcmZhY2UuZGVmaW5lKGEse21lbWJlcnM6e2NyZWF0ZUNlbGxFZGl0b3I6ZnVuY3Rpb24oYil7cmV0dXJuIHRydWU7fSxnZXRDZWxsRWRpdG9yVmFsdWU6ZnVuY3Rpb24oYyl7cmV0dXJuIHRydWU7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBmPSIiLGU9IkZ1bmN0aW9uIixkPSJhYnN0cmFjdCIsYz0ibnVtYmVyIixiPSJhcHBlYXIiLGE9InF4LnVpLnRhYmxlLmNlbGxlZGl0b3IuQWJzdHJhY3RGaWVsZCI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6cXgudWkudGFibGUuSUNlbGxFZGl0b3JGYWN0b3J5LHR5cGU6ZCxwcm9wZXJ0aWVzOnt2YWxpZGF0aW9uRnVuY3Rpb246e2NoZWNrOmUsbnVsbGFibGU6dHJ1ZSxpbml0Om51bGx9fSxtZW1iZXJzOntfY3JlYXRlRWRpdG9yOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBtZXRob2QgY2FsbCEiKTt9LGNyZWF0ZUNlbGxFZGl0b3I6ZnVuY3Rpb24oZyl7dmFyIGg9dGhpcy5fY3JlYXRlRWRpdG9yKCk7aC5vcmlnaW5hbFZhbHVlPWcudmFsdWU7aWYoZy52YWx1ZT09PW51bGx8fGcudmFsdWU9PT11bmRlZmluZWQpe2cudmFsdWU9Zjt9aC5zZXRWYWx1ZShmK2cudmFsdWUpO2guYWRkTGlzdGVuZXIoYixmdW5jdGlvbigpe2guc2VsZWN0QWxsVGV4dCgpO30pO3JldHVybiBoO30sZ2V0Q2VsbEVkaXRvclZhbHVlOmZ1bmN0aW9uKGkpe3ZhciBrPWkuZ2V0VmFsdWUoKTt2YXIgaj10aGlzLmdldFZhbGlkYXRpb25GdW5jdGlvbigpO2lmKGope2s9aihrLGkub3JpZ2luYWxWYWx1ZSk7fWlmKHR5cGVvZiBpLm9yaWdpbmFsVmFsdWU9PWMpe2s9cGFyc2VGbG9hdChrKTt9cmV0dXJuIGs7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBjPSJudW1iZXIiLGI9InF4LnVpLnRhYmxlLmNlbGxlZGl0b3IuVGV4dEZpZWxkIixhPSJ0YWJsZS1lZGl0b3ItdGV4dGZpZWxkIjtxeC5DbGFzcy5kZWZpbmUoYix7ZXh0ZW5kOnF4LnVpLnRhYmxlLmNlbGxlZGl0b3IuQWJzdHJhY3RGaWVsZCxtZW1iZXJzOntnZXRDZWxsRWRpdG9yVmFsdWU6ZnVuY3Rpb24oZCl7dmFyIGY9ZC5nZXRWYWx1ZSgpO3ZhciBlPXRoaXMuZ2V0VmFsaWRhdGlvbkZ1bmN0aW9uKCk7aWYoZSl7Zj1lKGYsZC5vcmlnaW5hbFZhbHVlKTt9aWYodHlwZW9mIGQub3JpZ2luYWxWYWx1ZT09Yyl7aWYoZiE9bnVsbCl7Zj1wYXJzZUZsb2F0KGYpO319cmV0dXJuIGY7fSxfY3JlYXRlRWRpdG9yOmZ1bmN0aW9uKCl7dmFyIGc9bmV3IHF4LnVpLmZvcm0uVGV4dEZpZWxkKCk7Zy5zZXRBcHBlYXJhbmNlKGEpO3JldHVybiBnO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgudWkudGFibGUuSUhlYWRlclJlbmRlcmVyIjtxeC5JbnRlcmZhY2UuZGVmaW5lKGEse21lbWJlcnM6e2NyZWF0ZUhlYWRlckNlbGw6ZnVuY3Rpb24oYil7cmV0dXJuIHRydWU7fSx1cGRhdGVIZWFkZXJDZWxsOmZ1bmN0aW9uKGMsZCl7cmV0dXJuIHRydWU7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJxeC51aS50YWJsZS5oZWFkZXJyZW5kZXJlci5EZWZhdWx0IixhPSJTdHJpbmciO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6cXguY29yZS5PYmplY3QsaW1wbGVtZW50OnF4LnVpLnRhYmxlLklIZWFkZXJSZW5kZXJlcixzdGF0aWNzOntTVEFURV9TT1JURUQ6InNvcnRlZCIsU1RBVEVfU09SVEVEX0FTQ0VORElORzoic29ydGVkQXNjZW5kaW5nIn0scHJvcGVydGllczp7dG9vbFRpcDp7Y2hlY2s6YSxpbml0Om51bGwsbnVsbGFibGU6dHJ1ZX19LG1lbWJlcnM6e2NyZWF0ZUhlYWRlckNlbGw6ZnVuY3Rpb24oYyl7dmFyIGQ9bmV3IHF4LnVpLnRhYmxlLmhlYWRlcnJlbmRlcmVyLkhlYWRlckNlbGwoKTt0aGlzLnVwZGF0ZUhlYWRlckNlbGwoYyxkKTtyZXR1cm4gZDt9LHVwZGF0ZUhlYWRlckNlbGw6ZnVuY3Rpb24oZSxmKXt2YXIgZz1xeC51aS50YWJsZS5oZWFkZXJyZW5kZXJlci5EZWZhdWx0O2lmKGUubmFtZSYmZS5uYW1lLnRyYW5zbGF0ZSl7Zi5zZXRMYWJlbChlLm5hbWUudHJhbnNsYXRlKCkpO31lbHNle2Yuc2V0TGFiZWwoZS5uYW1lKTt9dmFyIGg9Zi5nZXRUb29sVGlwKCk7aWYodGhpcy5nZXRUb29sVGlwKCkhPW51bGwpe2lmKGg9PW51bGwpe2g9bmV3IHF4LnVpLnRvb2x0aXAuVG9vbFRpcCh0aGlzLmdldFRvb2xUaXAoKSk7Zi5zZXRUb29sVGlwKGgpO3F4LnV0aWwuRGlzcG9zZVV0aWwuZGlzcG9zZVRyaWdnZXJlZEJ5KGgsZik7fWVsc2V7aC5zZXRMYWJlbCh0aGlzLmdldFRvb2xUaXAoKSk7fX1lLnNvcnRlZD9mLmFkZFN0YXRlKGcuU1RBVEVfU09SVEVEKTpmLnJlbW92ZVN0YXRlKGcuU1RBVEVfU09SVEVEKTtlLnNvcnRlZEFzY2VuZGluZz9mLmFkZFN0YXRlKGcuU1RBVEVfU09SVEVEX0FTQ0VORElORyk6Zi5yZW1vdmVTdGF0ZShnLlNUQVRFX1NPUlRFRF9BU0NFTkRJTkcpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbD0icXguY2xpZW50IixrPSJoZWFkIixqPSJ0ZXh0L2NzcyIsaD0ic3R5bGVzaGVldCIsZz0ifSIsZj0nQGltcG9ydCAiJyxlPSJ7IixkPSciOycsYz0icXguYm9tLlN0eWxlc2hlZXQiLGI9ImxpbmsiLGE9InN0eWxlIjtxeC5DbGFzcy5kZWZpbmUoYyx7c3RhdGljczp7aW5jbHVkZUZpbGU6ZnVuY3Rpb24obSxuKXtpZighbil7bj1kb2N1bWVudDt9dmFyIG89bi5jcmVhdGVFbGVtZW50KGIpO28udHlwZT1qO28ucmVsPWg7by5ocmVmPXF4LnV0aWwuUmVzb3VyY2VNYW5hZ2VyLmdldEluc3RhbmNlKCkudG9VcmkobSk7dmFyIHA9bi5nZXRFbGVtZW50c0J5VGFnTmFtZShrKVswXTtwLmFwcGVuZENoaWxkKG8pO30sY3JlYXRlRWxlbWVudDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGwseyJtc2h0bWwiOmZ1bmN0aW9uKHEpe3ZhciByPWRvY3VtZW50LmNyZWF0ZVN0eWxlU2hlZXQoKTtpZihxKXtyLmNzc1RleHQ9cTt9cmV0dXJuIHI7fSwiZGVmYXVsdCI6ZnVuY3Rpb24ocyl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChhKTt0LnR5cGU9ajtpZihzKXt0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMpKTt9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoaylbMF0uYXBwZW5kQ2hpbGQodCk7cmV0dXJuIHQuc2hlZXQ7fX0pLGFkZFJ1bGU6cXguY29yZS5WYXJpYW50LnNlbGVjdChsLHsibXNodG1sIjpmdW5jdGlvbih1LHYsdyl7dS5hZGRSdWxlKHYsdyk7fSwiZGVmYXVsdCI6ZnVuY3Rpb24oeCx5LHope3guaW5zZXJ0UnVsZSh5K2UreitnLHguY3NzUnVsZXMubGVuZ3RoKTt9fSkscmVtb3ZlUnVsZTpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGwseyJtc2h0bWwiOmZ1bmN0aW9uKEEsQil7dmFyIEM9QS5ydWxlczt2YXIgRD1DLmxlbmd0aDtmb3IodmFyIGk9RC0xO2k+PTA7LS1pKXtpZihDW2ldLnNlbGVjdG9yVGV4dD09Qil7QS5yZW1vdmVSdWxlKGkpO319fSwiZGVmYXVsdCI6ZnVuY3Rpb24oRSxGKXt2YXIgRz1FLmNzc1J1bGVzO3ZhciBIPUcubGVuZ3RoO2Zvcih2YXIgaT1ILTE7aT49MDstLWkpe2lmKEdbaV0uc2VsZWN0b3JUZXh0PT1GKXtFLmRlbGV0ZVJ1bGUoaSk7fX19fSkscmVtb3ZlQWxsUnVsZXM6cXguY29yZS5WYXJpYW50LnNlbGVjdChsLHsibXNodG1sIjpmdW5jdGlvbihJKXt2YXIgSj1JLnJ1bGVzO3ZhciBLPUoubGVuZ3RoO2Zvcih2YXIgaT1LLTE7aT49MDtpLS0pe0kucmVtb3ZlUnVsZShpKTt9fSwiZGVmYXVsdCI6ZnVuY3Rpb24oTCl7dmFyIE09TC5jc3NSdWxlczt2YXIgTj1NLmxlbmd0aDtmb3IodmFyIGk9Ti0xO2k+PTA7aS0tKXtMLmRlbGV0ZVJ1bGUoaSk7fX19KSxhZGRJbXBvcnQ6cXguY29yZS5WYXJpYW50LnNlbGVjdChsLHsibXNodG1sIjpmdW5jdGlvbihPLFApe08uYWRkSW1wb3J0KFApO30sImRlZmF1bHQiOmZ1bmN0aW9uKFEsUil7US5pbnNlcnRSdWxlKGYrUitkLFEuY3NzUnVsZXMubGVuZ3RoKTt9fSkscmVtb3ZlSW1wb3J0OnF4LmNvcmUuVmFyaWFudC5zZWxlY3QobCx7Im1zaHRtbCI6ZnVuY3Rpb24oUyxUKXt2YXIgVT1TLmltcG9ydHM7dmFyIFY9VS5sZW5ndGg7Zm9yKHZhciBpPVYtMTtpPj0wO2ktLSl7aWYoVVtpXS5ocmVmPT1UKXtTLnJlbW92ZUltcG9ydChpKTt9fX0sImRlZmF1bHQiOmZ1bmN0aW9uKFcsWCl7dmFyIFk9Vy5jc3NSdWxlczt2YXIgYmE9WS5sZW5ndGg7Zm9yKHZhciBpPWJhLTE7aT49MDtpLS0pe2lmKFlbaV0uaHJlZj09WCl7Vy5kZWxldGVSdWxlKGkpO319fX0pLHJlbW92ZUFsbEltcG9ydHM6cXguY29yZS5WYXJpYW50LnNlbGVjdChsLHsibXNodG1sIjpmdW5jdGlvbihiYil7dmFyIGJjPWJiLmltcG9ydHM7dmFyIGJkPWJjLmxlbmd0aDtmb3IodmFyIGk9YmQtMTtpPj0wO2ktLSl7YmIucmVtb3ZlSW1wb3J0KGkpO319LCJkZWZhdWx0IjpmdW5jdGlvbihiZSl7dmFyIGJmPWJlLmNzc1J1bGVzO3ZhciBiZz1iZi5sZW5ndGg7Zm9yKHZhciBpPWJnLTE7aT49MDtpLS0pe2lmKGJmW2ldLnR5cGU9PWJmW2ldLklNUE9SVF9SVUxFKXtiZS5kZWxldGVSdWxlKGkpO319fX0pfX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LnVpLnRhYmxlLklDZWxsUmVuZGVyZXIiO3F4LkludGVyZmFjZS5kZWZpbmUoYSx7bWVtYmVyczp7Y3JlYXRlRGF0YUNlbGxIdG1sOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIHRydWU7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBqPSIiLGk9InB4OyIsaD0iLnFvb3hkb28tdGFibGUtY2VsbCB7IixnPSJxb294ZG9vLXRhYmxlLWNlbGwiLGY9JyIgJyxlPSJub3dyYXAiLGQ9ImRlZmF1bHQiLGM9InF4LmNsaWVudCIsYj0ifSIsYT0id2lkdGg6IixIPSIucW9veGRvby10YWJsZS1jZWxsLXJpZ2h0IHsgdGV4dC1hbGlnbjpyaWdodCB9ICIsRz0iMHB4IDZweCIsRj0nPGRpdiBjbGFzcz0iJyxFPSIwcHgiLEQ9ImhlaWdodDoiLEM9IjFweCBzb2xpZCAiLEI9Ii5xb294ZG9vLXRhYmxlLWNlbGwtYm9sZCB7IGZvbnQtd2VpZ2h0OmJvbGQgfSAiLEE9InRhYmxlLXJvdy1saW5lIix6PSJTdHJpbmciLHk9Jz4nLHE9Im1zaHRtbCIscj0nPC9kaXY+JyxvPSJlbGxpcHNpcyIscD0iY29udGVudC1ib3giLG09J2xlZnQ6JyxuPSJxeC51aS50YWJsZS5jZWxscmVuZGVyZXIuQWJzdHJhY3QiLGs9JyIgc3R5bGU9IicsbD0iYWJzdHJhY3QiLHM9Im5vbmUiLHQ9ImhpZGRlbiIsdj0ifSAiLHU9J3B4OycseD0iLnFvb3hkb28tdGFibGUtY2VsbC1pdGFsaWMgeyBmb250LXN0eWxlOml0YWxpY30gIix3PSJhYnNvbHV0ZSI7cXguQ2xhc3MuZGVmaW5lKG4se3R5cGU6bCxpbXBsZW1lbnQ6cXgudWkudGFibGUuSUNlbGxSZW5kZXJlcixleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt2YXIgST1xeC51aS50YWJsZS5jZWxscmVuZGVyZXIuQWJzdHJhY3Q7aWYoIUkuX193cCl7dmFyIEs9cXgudGhlbWUubWFuYWdlci5Db2xvci5nZXRJbnN0YW5jZSgpO0kuX193cD10aGlzLnNlbGYoYXJndW1lbnRzKTt2YXIgSj1oK3F4LmJvbS5lbGVtZW50LlN0eWxlLmNvbXBpbGUoe3Bvc2l0aW9uOncsdG9wOkUsb3ZlcmZsb3c6dCx3aGl0ZVNwYWNlOmUsYm9yZGVyUmlnaHQ6QytLLnJlc29sdmUoQSkscGFkZGluZzpHLGN1cnNvcjpkLHRleHRPdmVyZmxvdzpvLHVzZXJTZWxlY3Q6c30pK3YrSCt4K0I7aWYoIXF4LmNvcmUuVmFyaWFudC5pc1NldChjLHEpKXtKKz1oK3F4LmJvbS5lbGVtZW50LkJveFNpemluZy5jb21waWxlKHApK2I7fUkuX193cC5zdHlsZXNoZWV0PXF4LmJvbS5TdHlsZXNoZWV0LmNyZWF0ZUVsZW1lbnQoSik7fX0scHJvcGVydGllczp7ZGVmYXVsdENlbGxTdHlsZTp7aW5pdDpudWxsLGNoZWNrOnosbnVsbGFibGU6dHJ1ZX19LG1lbWJlcnM6e19pbnNldFg6Nis2KzEsX2luc2V0WTowLF9nZXRDZWxsQ2xhc3M6ZnVuY3Rpb24oTCl7cmV0dXJuIGc7fSxfZ2V0Q2VsbFN0eWxlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnN0eWxlfHxqO30sX2dldENlbGxBdHRyaWJ1dGVzOmZ1bmN0aW9uKE4pe3JldHVybiBqO30sX2dldENvbnRlbnRIdG1sOmZ1bmN0aW9uKE8pe3JldHVybiBPLnZhbHVlfHxqO30sX2dldENlbGxTaXplU3R5bGU6ZnVuY3Rpb24oUCxRLFIsUyl7dmFyIFQ9ajtpZihxeC5ib20uY2xpZW50LkZlYXR1cmUuQ09OVEVOVF9CT1gpe1AtPVI7US09Uzt9VCs9YStNYXRoLm1heChQLDApK2k7VCs9RCtNYXRoLm1heChRLDApK2k7cmV0dXJuIFQ7fSxjcmVhdGVEYXRhQ2VsbEh0bWw6ZnVuY3Rpb24oVSxWKXtWLnB1c2goRix0aGlzLl9nZXRDZWxsQ2xhc3MoVSksayxtLFUuc3R5bGVMZWZ0LHUsdGhpcy5fZ2V0Q2VsbFNpemVTdHlsZShVLnN0eWxlV2lkdGgsVS5zdHlsZUhlaWdodCx0aGlzLl9pbnNldFgsdGhpcy5faW5zZXRZKSx0aGlzLl9nZXRDZWxsU3R5bGUoVSksZix0aGlzLl9nZXRDZWxsQXR0cmlidXRlcyhVKSx5K3RoaXMuX2dldENvbnRlbnRIdG1sKFUpLHIpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaD0iIixnPSJudW1iZXIiLGY9IkJvb2xlYW4iLGU9InF4LnVpLnRhYmxlLmNlbGxyZW5kZXJlci5EZWZhdWx0IixkPSIgcW9veGRvby10YWJsZS1jZWxsLWJvbGQiLGM9IiBxb294ZG9vLXRhYmxlLWNlbGwtcmlnaHQiLGI9IiBxb294ZG9vLXRhYmxlLWNlbGwtaXRhbGljIixhPSJzdHJpbmciO3F4LkNsYXNzLmRlZmluZShlLHtleHRlbmQ6cXgudWkudGFibGUuY2VsbHJlbmRlcmVyLkFic3RyYWN0LHN0YXRpY3M6e1NUWUxFRkxBR19BTElHTl9SSUdIVDoxLFNUWUxFRkxBR19CT0xEOjIsU1RZTEVGTEFHX0lUQUxJQzo0LF9udW1iZXJGb3JtYXQ6bnVsbH0scHJvcGVydGllczp7dXNlQXV0b0FsaWduOntjaGVjazpmLGluaXQ6dHJ1ZX19LG1lbWJlcnM6e19nZXRTdHlsZUZsYWdzOmZ1bmN0aW9uKGkpe2lmKHRoaXMuZ2V0VXNlQXV0b0FsaWduKCkpe2lmKHR5cGVvZiBpLnZhbHVlPT1nKXtyZXR1cm4gcXgudWkudGFibGUuY2VsbHJlbmRlcmVyLkRlZmF1bHQuU1RZTEVGTEFHX0FMSUdOX1JJR0hUO319cmV0dXJuIDA7fSxfZ2V0Q2VsbENsYXNzOmZ1bmN0aW9uKGope3ZhciBrPXF4LnVpLnRhYmxlLmNlbGxyZW5kZXJlci5BYnN0cmFjdC5wcm90b3R5cGUuX2dldENlbGxDbGFzcy5jYWxsKHRoaXMsaik7aWYoIWspe3JldHVybiBoO312YXIgbD10aGlzLl9nZXRTdHlsZUZsYWdzKGopO2lmKGwmcXgudWkudGFibGUuY2VsbHJlbmRlcmVyLkRlZmF1bHQuU1RZTEVGTEFHX0FMSUdOX1JJR0hUKXtrKz1jO31pZihsJnF4LnVpLnRhYmxlLmNlbGxyZW5kZXJlci5EZWZhdWx0LlNUWUxFRkxBR19CT0xEKXtrKz1kO31pZihsJnF4LnVpLnRhYmxlLmNlbGxyZW5kZXJlci5EZWZhdWx0LlNUWUxFRkxBR19JVEFMSUMpe2srPWI7fXJldHVybiBrO30sX2dldENvbnRlbnRIdG1sOmZ1bmN0aW9uKG0pe3JldHVybiBxeC5ib20uU3RyaW5nLmVzY2FwZSh0aGlzLl9mb3JtYXRWYWx1ZShtKSk7fSxfZm9ybWF0VmFsdWU6ZnVuY3Rpb24obil7dmFyIHA9bi52YWx1ZTt2YXIgbztpZihwPT1udWxsKXtyZXR1cm4gaDt9aWYodHlwZW9mIHA9PWEpe3JldHVybiBwO31lbHNlIGlmKHR5cGVvZiBwPT1nKXtpZighcXgudWkudGFibGUuY2VsbHJlbmRlcmVyLkRlZmF1bHQuX251bWJlckZvcm1hdCl7cXgudWkudGFibGUuY2VsbHJlbmRlcmVyLkRlZmF1bHQuX251bWJlckZvcm1hdD1uZXcgcXgudXRpbC5mb3JtYXQuTnVtYmVyRm9ybWF0KCk7cXgudWkudGFibGUuY2VsbHJlbmRlcmVyLkRlZmF1bHQuX251bWJlckZvcm1hdC5zZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoMik7fXZhciBvPXF4LnVpLnRhYmxlLmNlbGxyZW5kZXJlci5EZWZhdWx0Ll9udW1iZXJGb3JtYXQuZm9ybWF0KHApO31lbHNlIGlmKHAgaW5zdGFuY2VvZiBEYXRlKXtvPXF4LnV0aWwuZm9ybWF0LkRhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKCkuZm9ybWF0KHApO31lbHNle289cDt9cmV0dXJuIG87fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSJxeC5ldmVudC50eXBlLkRhdGEiLGo9InZpc2liaWxpdHlDaGFuZ2VkIixoPSJvcmRlckNoYW5nZWQiLGc9InZpc2liaWxpdHlDaGFuZ2VkUHJlIixmPSJfX3d2IixlPSJfX3d3IixkPSJ3aWR0aENoYW5nZWQiLGM9InF4LnVpLnRhYmxlLmNvbHVtbm1vZGVsLkJhc2ljIixiPSJfX3d4IixhPSJoZWFkZXJDZWxsUmVuZGVyZXJDaGFuZ2VkIjtxeC5DbGFzcy5kZWZpbmUoYyx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7dGhpcy5fX3dxPVtdO3RoaXMuX193cj1bXTt9LGV2ZW50czp7IndpZHRoQ2hhbmdlZCI6aywidmlzaWJpbGl0eUNoYW5nZWRQcmUiOmssInZpc2liaWxpdHlDaGFuZ2VkIjprLCJvcmRlckNoYW5nZWQiOmssImhlYWRlckNlbGxSZW5kZXJlckNoYW5nZWQiOmt9LHN0YXRpY3M6e0RFRkFVTFRfV0lEVEg6MTAwLERFRkFVTFRfSEVBREVSX1JFTkRFUkVSOnF4LnVpLnRhYmxlLmhlYWRlcnJlbmRlcmVyLkRlZmF1bHQsREVGQVVMVF9EQVRBX1JFTkRFUkVSOnF4LnVpLnRhYmxlLmNlbGxyZW5kZXJlci5EZWZhdWx0LERFRkFVTFRfRURJVE9SX0ZBQ1RPUlk6cXgudWkudGFibGUuY2VsbGVkaXRvci5UZXh0RmllbGR9LG1lbWJlcnM6e19fd3M6bnVsbCxfX3d0Om51bGwsX193cjpudWxsLF9fd3E6bnVsbCxfX3d1Om51bGwsX193djpudWxsLF9fd3c6bnVsbCxfX3d4Om51bGwsaW5pdDpmdW5jdGlvbihsLG0pe3t9O3RoaXMuX193dT1bXTt2YXIgcT1xeC51aS50YWJsZS5jb2x1bW5tb2RlbC5CYXNpYy5ERUZBVUxUX1dJRFRIO3ZhciByPXRoaXMuX193dnx8KHRoaXMuX193dj1uZXcgcXgudWkudGFibGUuY29sdW1ubW9kZWwuQmFzaWMuREVGQVVMVF9IRUFERVJfUkVOREVSRVIoKSk7dmFyIG89dGhpcy5fX3d3fHwodGhpcy5fX3d3PW5ldyBxeC51aS50YWJsZS5jb2x1bW5tb2RlbC5CYXNpYy5ERUZBVUxUX0RBVEFfUkVOREVSRVIoKSk7dmFyIG49dGhpcy5fX3d4fHwodGhpcy5fX3d4PW5ldyBxeC51aS50YWJsZS5jb2x1bW5tb2RlbC5CYXNpYy5ERUZBVUxUX0VESVRPUl9GQUNUT1JZKCkpO3RoaXMuX193cT1bXTt0aGlzLl9fd3I9W107dmFyIHQ7aWYobSl7dD1tLmdldEluaXRpYWxseUhpZGRlbkNvbHVtbnMoKTt9dD10fHxbXTtmb3IodmFyIHU9MDt1PGw7dSsrKXt0aGlzLl9fd3VbdV09e3dpZHRoOnEsaGVhZGVyUmVuZGVyZXI6cixkYXRhUmVuZGVyZXI6byxlZGl0b3JGYWN0b3J5Om59O3RoaXMuX193cVt1XT11O3RoaXMuX193clt1XT11O310aGlzLl9fd3Q9bnVsbDt0aGlzLl9fd3M9dHJ1ZTtmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKyl7dGhpcy5zZXRDb2x1bW5WaXNpYmxlKHRbc10sZmFsc2UpO310aGlzLl9fd3M9ZmFsc2U7Zm9yKHU9MDt1PGw7dSsrKXt2YXIgcD17Y29sOnUsdmlzaWJsZTp0aGlzLmlzQ29sdW1uVmlzaWJsZSh1KX07dGhpcy5maXJlRGF0YUV2ZW50KGcscCk7dGhpcy5maXJlRGF0YUV2ZW50KGoscCk7fX0sZ2V0VmlzaWJsZUNvbHVtbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3dyIT1udWxsP3RoaXMuX193cjpbXTt9LHNldENvbHVtbldpZHRoOmZ1bmN0aW9uKHYsdyx5KXt7fTt2YXIgQT10aGlzLl9fd3Vbdl0ud2lkdGg7aWYoQSE9dyl7dGhpcy5fX3d1W3ZdLndpZHRoPXc7dmFyIHo9e2NvbDp2LG5ld1dpZHRoOncsb2xkV2lkdGg6QSxpc01vdXNlQWN0aW9uOnl8fGZhbHNlfTt0aGlzLmZpcmVEYXRhRXZlbnQoZCx6KTt9fSxnZXRDb2x1bW5XaWR0aDpmdW5jdGlvbihCKXt7fTtyZXR1cm4gdGhpcy5fX3d1W0JdLndpZHRoO30sc2V0SGVhZGVyQ2VsbFJlbmRlcmVyOmZ1bmN0aW9uKEMsRCl7e307dmFyIEU9dGhpcy5fX3d1W0NdLmhlYWRlclJlbmRlcmVyO2lmKEUhPT10aGlzLl9fd3Ype0UuZGlzcG9zZSgpO310aGlzLl9fd3VbQ10uaGVhZGVyUmVuZGVyZXI9RDt0aGlzLmZpcmVEYXRhRXZlbnQoYSx7Y29sOkN9KTt9LGdldEhlYWRlckNlbGxSZW5kZXJlcjpmdW5jdGlvbihGKXt7fTtyZXR1cm4gdGhpcy5fX3d1W0ZdLmhlYWRlclJlbmRlcmVyO30sc2V0RGF0YUNlbGxSZW5kZXJlcjpmdW5jdGlvbihHLEgpe3t9O3RoaXMuX193dVtHXS5kYXRhUmVuZGVyZXI9SDt2YXIgST10aGlzLl9fd3VbR10uZGF0YVJlbmRlcmVyO2lmKEkhPT10aGlzLl9fd3cpe3JldHVybiBJO31yZXR1cm4gbnVsbDt9LGdldERhdGFDZWxsUmVuZGVyZXI6ZnVuY3Rpb24oSil7e307cmV0dXJuIHRoaXMuX193dVtKXS5kYXRhUmVuZGVyZXI7fSxzZXRDZWxsRWRpdG9yRmFjdG9yeTpmdW5jdGlvbihLLEwpe3t9O3ZhciBNPXRoaXMuX193dVtLXS5oZWFkZXJSZW5kZXJlcjtpZihNIT09dGhpcy5fX3d4KXtNLmRpc3Bvc2UoKTt9dGhpcy5fX3d1W0tdLmVkaXRvckZhY3Rvcnk9TDt9LGdldENlbGxFZGl0b3JGYWN0b3J5OmZ1bmN0aW9uKE4pe3t9O3JldHVybiB0aGlzLl9fd3VbTl0uZWRpdG9yRmFjdG9yeTt9LF9nZXRDb2xUb1hQb3NNYXA6ZnVuY3Rpb24oKXtpZih0aGlzLl9fd3Q9PW51bGwpe3RoaXMuX193dD17fTtmb3IodmFyIFE9MDtRPHRoaXMuX193cS5sZW5ndGg7USsrKXt2YXIgUD10aGlzLl9fd3FbUV07dGhpcy5fX3d0W1BdPXtvdmVyWDpRfTt9Zm9yKHZhciBPPTA7Tzx0aGlzLl9fd3IubGVuZ3RoO08rKyl7dmFyIFA9dGhpcy5fX3dyW09dO3RoaXMuX193dFtQXS52aXNYPU87fX1yZXR1cm4gdGhpcy5fX3d0O30sZ2V0VmlzaWJsZUNvbHVtbkNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX193ciE9bnVsbD90aGlzLl9fd3IubGVuZ3RoOjA7fSxnZXRWaXNpYmxlQ29sdW1uQXRYOmZ1bmN0aW9uKFIpe3t9O3JldHVybiB0aGlzLl9fd3JbUl07fSxnZXRWaXNpYmxlWDpmdW5jdGlvbihTKXt7fTtyZXR1cm4gdGhpcy5fZ2V0Q29sVG9YUG9zTWFwKClbU10udmlzWDt9LGdldE92ZXJhbGxDb2x1bW5Db3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fd3EubGVuZ3RoO30sZ2V0T3ZlcmFsbENvbHVtbkF0WDpmdW5jdGlvbihUKXt7fTtyZXR1cm4gdGhpcy5fX3dxW1RdO30sZ2V0T3ZlcmFsbFg6ZnVuY3Rpb24oVSl7e307cmV0dXJuIHRoaXMuX2dldENvbFRvWFBvc01hcCgpW1VdLm92ZXJYO30saXNDb2x1bW5WaXNpYmxlOmZ1bmN0aW9uKFYpe3t9O3JldHVybiAodGhpcy5fZ2V0Q29sVG9YUG9zTWFwKClbVl0udmlzWCE9bnVsbCk7fSxzZXRDb2x1bW5WaXNpYmxlOmZ1bmN0aW9uKFcsWCl7e307aWYoWCE9dGhpcy5pc0NvbHVtblZpc2libGUoVykpe2lmKFgpe3ZhciBiZT10aGlzLl9nZXRDb2xUb1hQb3NNYXAoKTt2YXIgYmI9YmVbV10ub3Zlclg7aWYoYmI9PW51bGwpe3Rocm93IG5ldyBFcnJvcigiU2hvd2luZyBjb2x1bW4gZmFpbGVkOiAiK1crIi4gVGhlIGNvbHVtbiBpcyBub3QgYWRkZWQgdG8gdGhpcyBUYWJsZVBhbmVNb2RlbC4iKTt9dmFyIGJjO2Zvcih2YXIgeD1iYisxO3g8dGhpcy5fX3dxLmxlbmd0aDt4Kyspe3ZhciBiZD10aGlzLl9fd3FbeF07dmFyIFk9YmVbYmRdLnZpc1g7aWYoWSE9bnVsbCl7YmM9WTticmVhazt9fWlmKGJjPT1udWxsKXtiYz10aGlzLl9fd3IubGVuZ3RoO310aGlzLl9fd3Iuc3BsaWNlKGJjLDAsVyk7fWVsc2V7dmFyIGJhPXRoaXMuZ2V0VmlzaWJsZVgoVyk7dGhpcy5fX3dyLnNwbGljZShiYSwxKTt9dGhpcy5fX3d0PW51bGw7aWYoIXRoaXMuX193cyl7dmFyIGJmPXtjb2w6Vyx2aXNpYmxlOlh9O3RoaXMuZmlyZURhdGFFdmVudChnLGJmKTt0aGlzLmZpcmVEYXRhRXZlbnQoaixiZik7fX19LG1vdmVDb2x1bW46ZnVuY3Rpb24oYmcsYmgpe3t9O3RoaXMuX193cz10cnVlO3ZhciBiaz10aGlzLl9fd3FbYmddO3ZhciBiaT10aGlzLmlzQ29sdW1uVmlzaWJsZShiayk7aWYoYmkpe3RoaXMuc2V0Q29sdW1uVmlzaWJsZShiayxmYWxzZSk7fXRoaXMuX193cS5zcGxpY2UoYmcsMSk7dGhpcy5fX3dxLnNwbGljZShiaCwwLGJrKTt0aGlzLl9fd3Q9bnVsbDtpZihiaSl7dGhpcy5zZXRDb2x1bW5WaXNpYmxlKGJrLHRydWUpO310aGlzLl9fd3M9ZmFsc2U7dmFyIGJqPXtjb2w6YmssZnJvbU92ZXJYUG9zOmJnLHRvT3ZlclhQb3M6Ymh9O3RoaXMuZmlyZURhdGFFdmVudChoLGJqKTt9LHNldENvbHVtbnNPcmRlcjpmdW5jdGlvbihibCl7e307aWYoYmwubGVuZ3RoPT10aGlzLl9fd3EubGVuZ3RoKXt0aGlzLl9fd3M9dHJ1ZTt2YXIgYm89bmV3IEFycmF5KGJsLmxlbmd0aCk7Zm9yKHZhciBibT0wO2JtPHRoaXMuX193cS5sZW5ndGg7Ym0rKyl7dmFyIGJuPXRoaXMuaXNDb2x1bW5WaXNpYmxlKGJtKTtib1tibV09Ym47aWYoYm4pe3RoaXMuc2V0Q29sdW1uVmlzaWJsZShibSxmYWxzZSk7fX10aGlzLl9fd3E9cXgubGFuZy5BcnJheS5jbG9uZShibCk7dGhpcy5fX3d0PW51bGw7Zm9yKHZhciBibT0wO2JtPHRoaXMuX193cS5sZW5ndGg7Ym0rKyl7aWYoYm9bYm1dKXt0aGlzLnNldENvbHVtblZpc2libGUoYm0sdHJ1ZSk7fX10aGlzLl9fd3M9ZmFsc2U7dGhpcy5maXJlRGF0YUV2ZW50KGgpO31lbHNle3Rocm93IG5ldyBFcnJvcigic2V0Q29sdW1uc09yZGVyOiBJbnZhbGlkIG51bWJlciBvZiBjb2x1bW4gcG9zaXRpb25zIGdpdmVuLCBleHBlY3RlZCAiK3RoaXMuX193cS5sZW5ndGgrIiwgZ290ICIrYmwubGVuZ3RoKTt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXtmb3IodmFyIGk9MDtpPHRoaXMuX193dS5sZW5ndGg7aSsrKXt0aGlzLl9fd3VbaV0uaGVhZGVyUmVuZGVyZXIuZGlzcG9zZSgpO3RoaXMuX193dVtpXS5kYXRhUmVuZGVyZXIuZGlzcG9zZSgpO3RoaXMuX193dVtpXS5lZGl0b3JGYWN0b3J5LmRpc3Bvc2UoKTt9dGhpcy5fX3dxPXRoaXMuX193cj10aGlzLl9fd3U9dGhpcy5fX3d0PW51bGw7dGhpcy5fZGlzcG9zZU9iamVjdHMoZixlLGIpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBuPSJhcHBlYXIiLG09ImNvbHVtblZpc2liaWxpdHlNZW51Q3JlYXRlRW5kIixsPSJ0YWJsZVdpZHRoQ2hhbmdlZCIsaz0idmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkIixqPSJxeC51aS50YWJsZS5jb2x1bW5tb2RlbC5yZXNpemViZWhhdmlvci5BYnN0cmFjdCIsaT0icXgudWkudGFibGUuY29sdW1ubW9kZWwuUmVzaXplIixoPSJfYXBwbHlCZWhhdmlvciIsZz0ic2VwYXJhdG9yIixmPSJ2aXNpYmlsaXR5Q2hhbmdlZCIsZT0iUmVzZXQgY29sdW1uIHdpZHRocyIsYj0iY2hhbmdlQmVoYXZpb3IiLGQ9InVzZXItYnV0dG9uIixjPSJ3aWR0aENoYW5nZWQiLGE9ImV4ZWN1dGUiO3F4LkNsYXNzLmRlZmluZShpLHtleHRlbmQ6cXgudWkudGFibGUuY29sdW1ubW9kZWwuQmFzaWMsaW5jbHVkZTpxeC5sb2NhbGUuTVRyYW5zbGF0aW9uLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnVpLnRhYmxlLmNvbHVtbm1vZGVsLkJhc2ljLmNhbGwodGhpcyk7dGhpcy5fX3liPWZhbHNlO3RoaXMuX195Yz1mYWxzZTt9LHByb3BlcnRpZXM6e2JlaGF2aW9yOntjaGVjazpqLGluaXQ6bnVsbCxudWxsYWJsZTp0cnVlLGFwcGx5OmgsZXZlbnQ6Yn19LG1lbWJlcnM6e19feWM6bnVsbCxfX3liOm51bGwsX195ZDpudWxsLF9hcHBseUJlaGF2aW9yOmZ1bmN0aW9uKHAscSl7aWYocSE9bnVsbCl7cS5kaXNwb3NlKCk7cT1udWxsO31wLl9zZXROdW1Db2x1bW5zKHRoaXMuZ2V0T3ZlcmFsbENvbHVtbkNvdW50KCkpO3Auc2V0VGFibGVDb2x1bW5Nb2RlbCh0aGlzKTt9LGluaXQ6ZnVuY3Rpb24ocixzKXtxeC51aS50YWJsZS5jb2x1bW5tb2RlbC5CYXNpYy5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMscixzKTtpZih0aGlzLl9feWQ9PW51bGwpe3RoaXMuX195ZD1zO3MuYWRkTGlzdGVuZXIobix0aGlzLl9vbmFwcGVhcix0aGlzKTtzLmFkZExpc3RlbmVyKGwsdGhpcy5fb25UYWJsZVdpZHRoQ2hhbmdlZCx0aGlzKTtzLmFkZExpc3RlbmVyKGssdGhpcy5fb252ZXJ0aWNhbHNjcm9sbGJhcmNoYW5nZWQsdGhpcyk7cy5hZGRMaXN0ZW5lcihtLHRoaXMuX2FkZFJlc2V0Q29sdW1uV2lkdGhCdXR0b24sdGhpcyk7dGhpcy5hZGRMaXN0ZW5lcihjLHRoaXMuX29uY29sdW1ud2lkdGhjaGFuZ2VkLHRoaXMpO3RoaXMuYWRkTGlzdGVuZXIoZix0aGlzLl9vbnZpc2liaWxpdHljaGFuZ2VkLHRoaXMpO31pZih0aGlzLmdldEJlaGF2aW9yKCk9PW51bGwpe3RoaXMuc2V0QmVoYXZpb3IobmV3IHF4LnVpLnRhYmxlLmNvbHVtbm1vZGVsLnJlc2l6ZWJlaGF2aW9yLkRlZmF1bHQoKSk7fXRoaXMuZ2V0QmVoYXZpb3IoKS5fc2V0TnVtQ29sdW1ucyhyKTt9LGdldFRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX195ZDt9LF9hZGRSZXNldENvbHVtbldpZHRoQnV0dG9uOmZ1bmN0aW9uKGV2ZW50KXt2YXIgdj1ldmVudC5nZXREYXRhKCk7dmFyIHU9di5jb2x1bW5CdXR0b247dmFyIHQ9di5tZW51O3ZhciBvO289dS5mYWN0b3J5KGcpO3QuYWRkKG8pO289dS5mYWN0b3J5KGQse3RleHQ6dGhpcy50cihlKX0pO3QuYWRkKG8pO28uYWRkTGlzdGVuZXIoYSx0aGlzLl9vbmFwcGVhcix0aGlzKTt9LF9vbmFwcGVhcjpmdW5jdGlvbihldmVudCl7aWYodGhpcy5fX3liKXtyZXR1cm4gO310aGlzLl9feWI9dHJ1ZTt7fTt0aGlzLmdldEJlaGF2aW9yKCkub25BcHBlYXIoZXZlbnQsZXZlbnQuZ2V0VHlwZSgpIT09bik7dGhpcy5fX3lkLl91cGRhdGVTY3JvbGxlcldpZHRocygpO3RoaXMuX195ZC5fdXBkYXRlU2Nyb2xsQmFyVmlzaWJpbGl0eSgpO3RoaXMuX195Yj1mYWxzZTt0aGlzLl9feWM9dHJ1ZTt9LF9vblRhYmxlV2lkdGhDaGFuZ2VkOmZ1bmN0aW9uKGV2ZW50KXtpZih0aGlzLl9feWJ8fCF0aGlzLl9feWMpe3JldHVybiA7fXRoaXMuX195Yj10cnVlO3t9O3RoaXMuZ2V0QmVoYXZpb3IoKS5vblRhYmxlV2lkdGhDaGFuZ2VkKGV2ZW50KTt0aGlzLl9feWI9ZmFsc2U7fSxfb252ZXJ0aWNhbHNjcm9sbGJhcmNoYW5nZWQ6ZnVuY3Rpb24oZXZlbnQpe2lmKHRoaXMuX195Ynx8IXRoaXMuX195Yyl7cmV0dXJuIDt9dGhpcy5fX3liPXRydWU7e307dGhpcy5nZXRCZWhhdmlvcigpLm9uVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKGV2ZW50KTtxeC5ldmVudC5UaW1lci5vbmNlKGZ1bmN0aW9uKCl7aWYodGhpcy5fX3lkJiYhdGhpcy5fX3lkLmlzRGlzcG9zZWQoKSl7dGhpcy5fX3lkLl91cGRhdGVTY3JvbGxlcldpZHRocygpO3RoaXMuX195ZC5fdXBkYXRlU2Nyb2xsQmFyVmlzaWJpbGl0eSgpO319LHRoaXMsMCk7dGhpcy5fX3liPWZhbHNlO30sX29uY29sdW1ud2lkdGhjaGFuZ2VkOmZ1bmN0aW9uKGV2ZW50KXtpZih0aGlzLl9feWJ8fCF0aGlzLl9feWMpe3JldHVybiA7fXRoaXMuX195Yj10cnVlO3t9O3RoaXMuZ2V0QmVoYXZpb3IoKS5vbkNvbHVtbldpZHRoQ2hhbmdlZChldmVudCk7dGhpcy5fX3liPWZhbHNlO30sX29udmlzaWJpbGl0eWNoYW5nZWQ6ZnVuY3Rpb24oZXZlbnQpe2lmKHRoaXMuX195Ynx8IXRoaXMuX195Yyl7cmV0dXJuIDt9dGhpcy5fX3liPXRydWU7e307dGhpcy5nZXRCZWhhdmlvcigpLm9uVmlzaWJpbGl0eUNoYW5nZWQoZXZlbnQpO3RoaXMuX195Yj1mYWxzZTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX195ZD1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBpPSJpY29uIixoPSJsYWJlbCIsZz0iU3RyaW5nIixmPSJzb3J0LWljb24iLGU9Il9hcHBseVNvcnRJY29uIixkPSJfYXBwbHlJY29uIixjPSJ0YWJsZS1oZWFkZXItY2VsbCIsYj0icXgudWkudGFibGUuaGVhZGVycmVuZGVyZXIuSGVhZGVyQ2VsbCIsYT0iX2FwcGx5TGFiZWwiO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6cXgudWkuY29udGFpbmVyLkNvbXBvc2l0ZSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC51aS5jb250YWluZXIuQ29tcG9zaXRlLmNhbGwodGhpcyk7dmFyIGo9bmV3IHF4LnVpLmxheW91dC5HcmlkKCk7ai5zZXRSb3dGbGV4KDAsMSk7ai5zZXRDb2x1bW5GbGV4KDEsMSk7ai5zZXRDb2x1bW5GbGV4KDIsMSk7dGhpcy5zZXRMYXlvdXQoaik7fSxwcm9wZXJ0aWVzOnthcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0OmN9LGxhYmVsOntjaGVjazpnLGluaXQ6bnVsbCxudWxsYWJsZTp0cnVlLGFwcGx5OmF9LHNvcnRJY29uOntjaGVjazpnLGluaXQ6bnVsbCxudWxsYWJsZTp0cnVlLGFwcGx5OmUsdGhlbWVhYmxlOnRydWV9LGljb246e2NoZWNrOmcsaW5pdDpudWxsLG51bGxhYmxlOnRydWUsYXBwbHk6ZH19LG1lbWJlcnM6e19hcHBseUxhYmVsOmZ1bmN0aW9uKGssbCl7aWYoayl7dGhpcy5fc2hvd0NoaWxkQ29udHJvbChoKS5zZXRWYWx1ZShrKTt9ZWxzZXt0aGlzLl9leGNsdWRlQ2hpbGRDb250cm9sKGgpO319LF9hcHBseVNvcnRJY29uOmZ1bmN0aW9uKG0sbil7aWYobSl7dGhpcy5fc2hvd0NoaWxkQ29udHJvbChmKS5zZXRTb3VyY2UobSk7fWVsc2V7dGhpcy5fZXhjbHVkZUNoaWxkQ29udHJvbChmKTt9fSxfYXBwbHlJY29uOmZ1bmN0aW9uKG8scCl7aWYobyl7dGhpcy5fc2hvd0NoaWxkQ29udHJvbChpKS5zZXRTb3VyY2Uobyk7fWVsc2V7dGhpcy5fZXhjbHVkZUNoaWxkQ29udHJvbChpKTt9fSxfY3JlYXRlQ2hpbGRDb250cm9sSW1wbDpmdW5jdGlvbihxLHIpe3ZhciBzO3N3aXRjaChxKXtjYXNlIGg6cz1uZXcgcXgudWkuYmFzaWMuTGFiZWwodGhpcy5nZXRMYWJlbCgpKS5zZXQoe2Fub255bW91czp0cnVlLGFsbG93U2hyaW5rWDp0cnVlfSk7dGhpcy5fYWRkKHMse3JvdzowLGNvbHVtbjoxfSk7YnJlYWs7Y2FzZSBmOnM9bmV3IHF4LnVpLmJhc2ljLkltYWdlKHRoaXMuZ2V0U29ydEljb24oKSk7cy5zZXRBbm9ueW1vdXModHJ1ZSk7dGhpcy5fYWRkKHMse3JvdzowLGNvbHVtbjoyfSk7YnJlYWs7Y2FzZSBpOnM9bmV3IHF4LnVpLmJhc2ljLkltYWdlKHRoaXMuZ2V0SWNvbigpKS5zZXQoe2Fub255bW91czp0cnVlLGFsbG93U2hyaW5rWDp0cnVlfSk7dGhpcy5fYWRkKHMse3JvdzowLGNvbHVtbjowfSk7YnJlYWs7fXJldHVybiBzfHxxeC51aS5jb250YWluZXIuQ29tcG9zaXRlLnByb3RvdHlwZS5fY3JlYXRlQ2hpbGRDb250cm9sSW1wbC5jYWxsKHRoaXMscSk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBlPSJxeC51aS5wb3B1cC5Qb3B1cCIsZD0idmlzaWJsZSIsYz0iZXhjbHVkZWQiLGI9InBvcHVwIixhPSJCb29sZWFuIjtxeC5DbGFzcy5kZWZpbmUoZSx7ZXh0ZW5kOnF4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUsaW5jbHVkZTpxeC51aS5jb3JlLk1QbGFjZW1lbnQsY29uc3RydWN0OmZ1bmN0aW9uKGYpe3F4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUuY2FsbCh0aGlzLGYpO3F4LmNvcmUuSW5pdC5nZXRBcHBsaWNhdGlvbigpLmdldFJvb3QoKS5hZGQodGhpcyk7dGhpcy5pbml0VmlzaWJpbGl0eSgpO30scHJvcGVydGllczp7YXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDpifSx2aXNpYmlsaXR5OntyZWZpbmU6dHJ1ZSxpbml0OmN9LGF1dG9IaWRlOntjaGVjazphLGluaXQ6dHJ1ZX19LG1lbWJlcnM6e19hcHBseVZpc2liaWxpdHk6ZnVuY3Rpb24oZyxoKXtxeC51aS5jb250YWluZXIuQ29tcG9zaXRlLnByb3RvdHlwZS5fYXBwbHlWaXNpYmlsaXR5LmNhbGwodGhpcyxnLGgpO3ZhciBpPXF4LnVpLnBvcHVwLk1hbmFnZXIuZ2V0SW5zdGFuY2UoKTtnPT09ZD9pLmFkZCh0aGlzKTppLnJlbW92ZSh0aGlzKTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3F4LnVpLnBvcHVwLk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZW1vdmUodGhpcyk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGw9ImF0b20iLGs9IkludGVnZXIiLGo9IlN0cmluZyIsaT0iX2FwcGx5UmljaCIsaD0icXgudWkudG9vbHRpcC5Ub29sVGlwIixnPSJfYXBwbHlJY29uIixmPSJ0b29sdGlwIixkPSJxeC51aS5jb3JlLldpZGdldCIsYz0ibW91c2VvdmVyIixiPSJCb29sZWFuIixhPSJfYXBwbHlMYWJlbCI7cXguQ2xhc3MuZGVmaW5lKGgse2V4dGVuZDpxeC51aS5wb3B1cC5Qb3B1cCxjb25zdHJ1Y3Q6ZnVuY3Rpb24obSxuKXtxeC51aS5wb3B1cC5Qb3B1cC5jYWxsKHRoaXMpO3RoaXMuc2V0TGF5b3V0KG5ldyBxeC51aS5sYXlvdXQuR3Jvdyk7dGhpcy5fY3JlYXRlQ2hpbGRDb250cm9sKGwpO2lmKG0hPW51bGwpe3RoaXMuc2V0TGFiZWwobSk7fWlmKG4hPW51bGwpe3RoaXMuc2V0SWNvbihuKTt9dGhpcy5hZGRMaXN0ZW5lcihjLHRoaXMuX29uTW91c2VPdmVyLHRoaXMpO30scHJvcGVydGllczp7YXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDpmfSxzaG93VGltZW91dDp7Y2hlY2s6ayxpbml0OjcwMCx0aGVtZWFibGU6dHJ1ZX0saGlkZVRpbWVvdXQ6e2NoZWNrOmssaW5pdDo0MDAwLHRoZW1lYWJsZTp0cnVlfSxsYWJlbDp7Y2hlY2s6aixudWxsYWJsZTp0cnVlLGFwcGx5OmF9LGljb246e2NoZWNrOmosbnVsbGFibGU6dHJ1ZSxhcHBseTpnLHRoZW1lYWJsZTp0cnVlfSxyaWNoOntjaGVjazpiLGluaXQ6ZmFsc2UsYXBwbHk6aX0sb3BlbmVyOntjaGVjazpkLG51bGxhYmxlOnRydWV9fSxtZW1iZXJzOntfY3JlYXRlQ2hpbGRDb250cm9sSW1wbDpmdW5jdGlvbihvLHApe3ZhciBxO3N3aXRjaChvKXtjYXNlIGw6cT1uZXcgcXgudWkuYmFzaWMuQXRvbTt0aGlzLl9hZGQocSk7YnJlYWs7fXJldHVybiBxfHxxeC51aS5wb3B1cC5Qb3B1cC5wcm90b3R5cGUuX2NyZWF0ZUNoaWxkQ29udHJvbEltcGwuY2FsbCh0aGlzLG8pO30sX29uTW91c2VPdmVyOmZ1bmN0aW9uKGUpe3RoaXMuaGlkZSgpO30sX2FwcGx5SWNvbjpmdW5jdGlvbihyLHMpe3ZhciB0PXRoaXMuZ2V0Q2hpbGRDb250cm9sKGwpO3I9PW51bGw/dC5yZXNldEljb24oKTp0LnNldEljb24ocik7fSxfYXBwbHlMYWJlbDpmdW5jdGlvbih1LHYpe3ZhciB3PXRoaXMuZ2V0Q2hpbGRDb250cm9sKGwpO3U9PW51bGw/dy5yZXNldExhYmVsKCk6dy5zZXRMYWJlbCh1KTt9LF9hcHBseVJpY2g6ZnVuY3Rpb24oeCx5KXt2YXIgej10aGlzLmdldENoaWxkQ29udHJvbChsKTt6LnNldFJpY2goeCk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBmPSJtb3VzZWRvd24iLGQ9Il9fcnoiLGM9ImJsdXIiLGI9InNpbmdsZXRvbiIsYT0icXgudWkucG9wdXAuTWFuYWdlciI7cXguQ2xhc3MuZGVmaW5lKGEse3R5cGU6YixleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9fcno9W107cXguZXZlbnQuUmVnaXN0cmF0aW9uLmFkZExpc3RlbmVyKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxmLHRoaXMuX19yQix0aGlzLHRydWUpO3F4LmJvbS5FbGVtZW50LmFkZExpc3RlbmVyKHdpbmRvdyxjLHRoaXMuaGlkZUFsbCx0aGlzKTt9LG1lbWJlcnM6e19fcno6bnVsbCxhZGQ6ZnVuY3Rpb24oZyl7e307dGhpcy5fX3J6LnB1c2goZyk7dGhpcy5fX3JBKCk7fSxyZW1vdmU6ZnVuY3Rpb24oaCl7e307aWYodGhpcy5fX3J6KXtxeC5sYW5nLkFycmF5LnJlbW92ZSh0aGlzLl9fcnosaCk7dGhpcy5fX3JBKCk7fX0saGlkZUFsbDpmdW5jdGlvbigpe2lmKHRoaXMuX19yeil7Zm9yKHZhciBpPTA7aTx0aGlzLl9fcnoubGVuZ3RoO2krKyl7dGhpcy5fX3J6W2ldLmV4Y2x1ZGUoKTt9fX0sX19yQTpmdW5jdGlvbigpe3ZhciBqPTFlNztmb3IodmFyIGk9MDtpPHRoaXMuX19yei5sZW5ndGg7aSsrKXt0aGlzLl9fcnpbaV0uc2V0WkluZGV4KGorKyk7fX0sX19yQjpmdW5jdGlvbihlKXt2YXIgbD1xeC51aS5jb3JlLldpZGdldC5nZXRXaWRnZXRCeUVsZW1lbnQoZS5nZXRUYXJnZXQoKSk7dmFyIG09dGhpcy5fX3J6O2Zvcih2YXIgaT0wO2k8bS5sZW5ndGg7aSsrKXt2YXIgaz1tW2ldO2lmKCFrLmdldEF1dG9IaWRlKCl8fGw9PWt8fHF4LnVpLmNvcmUuV2lkZ2V0LmNvbnRhaW5zKGssbCkpe2NvbnRpbnVlO31rLmV4Y2x1ZGUoKTt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC5ldmVudC5SZWdpc3RyYXRpb24ucmVtb3ZlTGlzdGVuZXIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGYsdGhpcy5fX3JCLHRoaXMsdHJ1ZSk7dGhpcy5fZGlzcG9zZUFycmF5KGQpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiRD0iKFxcZFxcZD8pIixiQz0iZm9ybWF0IixiQj0iIixiQT0iYWJicmV2aWF0ZWQiLGJ6PSJ3aWRlIixieT0iKCIsYng9IikiLGJ3PSJ8Iixidj0ic3RhbmQtYWxvbmUiLGJ1PSJ3aWxkY2FyZCIsYmo9ImRlZmF1bHQiLGJpPSJsaXRlcmFsIixiaD0iJyIsYmc9ImhvdXIiLGJmPSIoXFxkXFxkP1xcZD8pIixiZT0ibXMiLGJkPSJuYXJyb3ciLGJjPSItIixiYj0icXVvdGVkX2xpdGVyYWwiLGJhPSdhJyxiSz0iSEg6bW06c3MiLGJMPSIrIixiST0iSEhtbXNzIixiSj0ibG9uZyIsYkc9J3onLGJIPSIwIixiRT0ic2VjIixiRj0iZGF5IixiTT0nWicsYk49IiAiLGJuPSJtaW4iLGJtPSJtbSIsYnA9IihcXGQrKSIsYm89ImgiLGJyPSJLSyIsYnE9J0wnLGJ0PSJaIixicz0iKFxcZFxcZCspIixibD0iRUVFRSIsYms9Il4iLGE9IjoiLGI9J3knLGM9IksiLGQ9ImEiLGU9IihbXFwrXFwtXVxcZFxcZDo/XFxkXFxkKSIsZj0iR01UIixnPSJkZCIsaD0icXgudXRpbC5mb3JtYXQuRGF0ZUZvcm1hdCIsaj0ieXl5IixrPSJIIixiUj0iWVlZWSIsYlE9InkiLGJQPSJISCIsYk89IkVFIixiVj0naCcsYlU9IlMiLGJUPSdzJyxiUz0nQScsYlg9Inl5eXl5eSIsYlc9ImtrIixKPSJzcyIsSz0nSCcsSD0nUycsST0iTU1NTSIsTj0nYycsTz0iZCIsTD0iKFthLXpBLVpdKykiLE09J2snLEY9Im0iLEc9J1knLHM9J0QnLHI9Inl5eXl5Iix1PSdLJyx0PSJoaCIsbz0iU1NTIixuPSJNTSIscT0ieXkiLHA9IihcXGRcXGRcXGRcXGRcXGRcXGQrKSIsbT0ieXl5eS1NTS1kZCBISDptbTpzcyIsbD0iKFxcZFxcZFxcZFxcZFxcZCspIixUPSJzaG9ydCIsVT0nZCcsVj0idW5rb3duIixXPSdtJyxQPSIoXFxkXFxkXFxkXFxkKSIsUT0iKFxcZFxcZFxcZCspIixSPSJrIixTPSdNJyxYPSIoXFxkXFxkXFxkXFxkKykiLFk9IlNTIixDPSJNTU0iLEI9InMiLEE9Ik0iLHo9J3cnLHk9IkVFRSIseD0iJCIsdz0iPyIsdj0nRScsRT0ieiIsRD0ieXl5eSI7cXguQ2xhc3MuZGVmaW5lKGgse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6cXgudXRpbC5mb3JtYXQuSUZvcm1hdCxjb25zdHJ1Y3Q6ZnVuY3Rpb24oYlksY2Epe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7aWYoIWNhKXt0aGlzLl9fd3k9cXgubG9jYWxlLk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRMb2NhbGUoKTt9ZWxzZXt0aGlzLl9fd3k9Y2E7fWlmKGJZIT1udWxsKXt0aGlzLl9fd3o9YlkudG9TdHJpbmcoKTt9ZWxzZXt0aGlzLl9fd3o9cXgubG9jYWxlLkRhdGUuZ2V0RGF0ZUZvcm1hdChiSix0aGlzLl9fd3kpK2JOK3F4LmxvY2FsZS5EYXRlLmdldERhdGVUaW1lRm9ybWF0KGJJLGJLLHRoaXMuX193eSk7fX0sc3RhdGljczp7Z2V0RGF0ZVRpbWVJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciBjYz1xeC51dGlsLmZvcm1hdC5EYXRlRm9ybWF0O3ZhciBjYj1xeC5sb2NhbGUuRGF0ZS5nZXREYXRlRm9ybWF0KGJKKStiTitxeC5sb2NhbGUuRGF0ZS5nZXREYXRlVGltZUZvcm1hdChiSSxiSyk7aWYoY2MuX2RhdGVJbnN0YW5jZT09bnVsbHx8Y2MuX2RhdGVJbnN0YW5jZS5fX3d6IT1jYil7Y2MuX2RhdGVUaW1lSW5zdGFuY2U9bmV3IGNjKCk7fXJldHVybiBjYy5fZGF0ZVRpbWVJbnN0YW5jZTt9LGdldERhdGVJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciBjZT1xeC51dGlsLmZvcm1hdC5EYXRlRm9ybWF0O3ZhciBjZD1xeC5sb2NhbGUuRGF0ZS5nZXREYXRlRm9ybWF0KFQpK2JCO2lmKGNlLl9kYXRlSW5zdGFuY2U9PW51bGx8fGNlLl9kYXRlSW5zdGFuY2UuX193eiE9Y2Qpe2NlLl9kYXRlSW5zdGFuY2U9bmV3IGNlKGNkKTt9cmV0dXJuIGNlLl9kYXRlSW5zdGFuY2U7fSxBU1NVTUVfWUVBUl8yMDAwX1RIUkVTSE9MRDozMCxMT0dHSU5HX0RBVEVfVElNRV9fZm9ybWF0Om0sQU1fTUFSS0VSOiJhbSIsUE1fTUFSS0VSOiJwbSIsTUVESVVNX1RJTUVaT05FX05BTUVTOlsiR01UIl0sRlVMTF9USU1FWk9ORV9OQU1FUzpbIkdyZWVud2ljaCBNZWFuIFRpbWUiXX0sbWVtYmVyczp7X193eTpudWxsLF9fd3o6bnVsbCxfX3dBOm51bGwsX193QjpudWxsLF9fd0M6bnVsbCxfX3dEOmZ1bmN0aW9uKGNmLGNnKXt2YXIgY2g9YkIrY2Y7d2hpbGUoY2gubGVuZ3RoPGNnKXtjaD1iSCtjaDt9cmV0dXJuIGNoO30sX193RTpmdW5jdGlvbihjaSl7dmFyIGNqPW5ldyBEYXRlKGNpLmdldFRpbWUoKSk7dmFyIGNrPWNqLmdldERhdGUoKTt3aGlsZShjai5nZXRNb250aCgpIT0wKXtjai5zZXREYXRlKC0xKTtjays9Y2ouZ2V0RGF0ZSgpKzE7fXJldHVybiBjazt9LF9fd0Y6ZnVuY3Rpb24oY2wpe3JldHVybiBuZXcgRGF0ZShjbC5nZXRUaW1lKCkrKDMtKChjbC5nZXREYXkoKSs2KSU3KSkqODY0MDAwMDApO30sX193RzpmdW5jdGlvbihjbSl7dmFyIGNvPXRoaXMuX193RihjbSk7dmFyIGNwPWNvLmdldEZ1bGxZZWFyKCk7dmFyIGNuPXRoaXMuX193RihuZXcgRGF0ZShjcCwwLDQpKTtyZXR1cm4gTWF0aC5mbG9vcigxLjUrKGNvLmdldFRpbWUoKS1jbi5nZXRUaW1lKCkpLzg2NDAwMDAwLzcpO30sZm9ybWF0OmZ1bmN0aW9uKGNxKXtpZihjcT09bnVsbCl7cmV0dXJuIG51bGw7fXZhciBjdz1xeC51dGlsLmZvcm1hdC5EYXRlRm9ybWF0O3ZhciBjeD10aGlzLl9fd3k7dmFyIGNIPWNxLmdldEZ1bGxZZWFyKCk7dmFyIGNCPWNxLmdldE1vbnRoKCk7dmFyIGNKPWNxLmdldERhdGUoKTt2YXIgY3I9Y3EuZ2V0RGF5KCk7dmFyIGNDPWNxLmdldEhvdXJzKCk7dmFyIGN5PWNxLmdldE1pbnV0ZXMoKTt2YXIgY0Q9Y3EuZ2V0U2Vjb25kcygpO3ZhciBjRj1jcS5nZXRNaWxsaXNlY29uZHMoKTt2YXIgY0k9Y3EuZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgY3U9Y0k+MD8xOi0xO3ZhciBjcz1NYXRoLmZsb29yKE1hdGguYWJzKGNJKS82MCk7dmFyIGN6PU1hdGguYWJzKGNJKSU2MDt0aGlzLl9fd0goKTt2YXIgY0c9YkI7Zm9yKHZhciBpPTA7aTx0aGlzLl9fd0MubGVuZ3RoO2krKyl7dmFyIGNFPXRoaXMuX193Q1tpXTtpZihjRS50eXBlPT1iaSl7Y0crPWNFLnRleHQ7fWVsc2V7dmFyIGN2PWNFLmNoYXJhY3Rlcjt2YXIgY0E9Y0Uuc2l6ZTt2YXIgY3Q9dztzd2l0Y2goY3Ype2Nhc2UgYjpjYXNlIEc6aWYoY0E9PTIpe2N0PXRoaXMuX193RChjSCUxMDAsMik7fWVsc2V7Y3Q9Y0grYkI7aWYoY0E+Y3QubGVuZ3RoKXtmb3IodmFyIGk9Y3QubGVuZ3RoO2k8Y0E7aSsrKXtjdD1iSCtjdDt9fX1icmVhaztjYXNlIHM6Y3Q9dGhpcy5fX3dEKHRoaXMuX193RShjcSksY0EpO2JyZWFrO2Nhc2UgVTpjdD10aGlzLl9fd0QoY0osY0EpO2JyZWFrO2Nhc2UgejpjdD10aGlzLl9fd0QodGhpcy5fX3dHKGNxKSxjQSk7YnJlYWs7Y2FzZSB2OmlmKGNBPT0yKXtjdD1xeC5sb2NhbGUuRGF0ZS5nZXREYXlOYW1lKGJkLGNyLGN4LGJDKTt9ZWxzZSBpZihjQT09Myl7Y3Q9cXgubG9jYWxlLkRhdGUuZ2V0RGF5TmFtZShiQSxjcixjeCxiQyk7fWVsc2UgaWYoY0E9PTQpe2N0PXF4LmxvY2FsZS5EYXRlLmdldERheU5hbWUoYnosY3IsY3gsYkMpO31icmVhaztjYXNlIE46aWYoY0E9PTIpe2N0PXF4LmxvY2FsZS5EYXRlLmdldERheU5hbWUoYmQsY3IsY3gsYnYpO31lbHNlIGlmKGNBPT0zKXtjdD1xeC5sb2NhbGUuRGF0ZS5nZXREYXlOYW1lKGJBLGNyLGN4LGJ2KTt9ZWxzZSBpZihjQT09NCl7Y3Q9cXgubG9jYWxlLkRhdGUuZ2V0RGF5TmFtZShieixjcixjeCxidik7fWJyZWFrO2Nhc2UgUzppZihjQT09MXx8Y0E9PTIpe2N0PXRoaXMuX193RChjQisxLGNBKTt9ZWxzZSBpZihjQT09Myl7Y3Q9cXgubG9jYWxlLkRhdGUuZ2V0TW9udGhOYW1lKGJBLGNCLGN4LGJDKTt9ZWxzZSBpZihjQT09NCl7Y3Q9cXgubG9jYWxlLkRhdGUuZ2V0TW9udGhOYW1lKGJ6LGNCLGN4LGJDKTt9YnJlYWs7Y2FzZSBicTppZihjQT09MXx8Y0E9PTIpe2N0PXRoaXMuX193RChjQisxLGNBKTt9ZWxzZSBpZihjQT09Myl7Y3Q9cXgubG9jYWxlLkRhdGUuZ2V0TW9udGhOYW1lKGJBLGNCLGN4LGJ2KTt9ZWxzZSBpZihjQT09NCl7Y3Q9cXgubG9jYWxlLkRhdGUuZ2V0TW9udGhOYW1lKGJ6LGNCLGN4LGJ2KTt9YnJlYWs7Y2FzZSBiYTpjdD0oY0M8MTIpP3F4LmxvY2FsZS5EYXRlLmdldEFtTWFya2VyKGN4KTpxeC5sb2NhbGUuRGF0ZS5nZXRQbU1hcmtlcihjeCk7YnJlYWs7Y2FzZSBLOmN0PXRoaXMuX193RChjQyxjQSk7YnJlYWs7Y2FzZSBNOmN0PXRoaXMuX193RCgoY0M9PTApPzI0OmNDLGNBKTticmVhaztjYXNlIHU6Y3Q9dGhpcy5fX3dEKGNDJTEyLGNBKTticmVhaztjYXNlIGJWOmN0PXRoaXMuX193RCgoKGNDJTEyKT09MCk/MTI6KGNDJTEyKSxjQSk7YnJlYWs7Y2FzZSBXOmN0PXRoaXMuX193RChjeSxjQSk7YnJlYWs7Y2FzZSBiVDpjdD10aGlzLl9fd0QoY0QsY0EpO2JyZWFrO2Nhc2UgSDpjdD10aGlzLl9fd0QoY0YsY0EpO2JyZWFrO2Nhc2UgYkc6aWYoY0E9PTEpe2N0PWYrKChjdT4wKT9iYzpiTCkrdGhpcy5fX3dEKE1hdGguYWJzKGNzKSkrYSt0aGlzLl9fd0QoY3osMik7fWVsc2UgaWYoY0E9PTIpe2N0PWN3Lk1FRElVTV9USU1FWk9ORV9OQU1FU1tjc107fWVsc2UgaWYoY0E9PTMpe2N0PWN3LkZVTExfVElNRVpPTkVfTkFNRVNbY3NdO31icmVhaztjYXNlIGJNOmN0PSgoY3U+MCk/YmM6YkwpK3RoaXMuX193RChNYXRoLmFicyhjcyksMikrdGhpcy5fX3dEKGN6LDIpO2JyZWFrO31jRys9Y3Q7fX1yZXR1cm4gY0c7fSxwYXJzZTpmdW5jdGlvbihjSyl7dGhpcy5fX3dJKCk7dmFyIGNRPXRoaXMuX193QS5yZWdleC5leGVjKGNLKTtpZihjUT09bnVsbCl7dGhyb3cgbmV3IEVycm9yKCJEYXRlIHN0cmluZyAnIitjSysiJyBkb2VzIG5vdCBtYXRjaCB0aGUgZGF0ZSBmb3JtYXQ6ICIrdGhpcy5fX3d6KTt9dmFyIGNMPXt5ZWFyOjE5NzAsbW9udGg6MCxkYXk6MSxob3VyOjAsaXNwbTpmYWxzZSxtaW46MCxzZWM6MCxtczowfTt2YXIgY009MTtmb3IodmFyIGk9MDtpPHRoaXMuX193QS51c2VkUnVsZXMubGVuZ3RoO2krKyl7dmFyIGNPPXRoaXMuX193QS51c2VkUnVsZXNbaV07dmFyIGNOPWNRW2NNXTtpZihjTy5maWVsZCE9bnVsbCl7Y0xbY08uZmllbGRdPXBhcnNlSW50KGNOLDEwKTt9ZWxzZXtjTy5tYW5pcHVsYXRvcihjTCxjTik7fWNNKz0oY08uZ3JvdXBzPT1udWxsKT8xOmNPLmdyb3Vwczt9dmFyIGNQPW5ldyBEYXRlKGNMLnllYXIsY0wubW9udGgsY0wuZGF5LChjTC5pc3BtKT8oY0wuaG91cisxMik6Y0wuaG91cixjTC5taW4sY0wuc2VjLGNMLm1zKTtpZihjTC5tb250aCE9Y1AuZ2V0TW9udGgoKXx8Y0wueWVhciE9Y1AuZ2V0RnVsbFllYXIoKSl7dGhyb3cgbmV3IEVycm9yKCJFcnJvciBwYXJzaW5nIGRhdGUgJyIrY0srIic6IHRoZSB2YWx1ZSBmb3IgZGF5IG9yIG1vbnRoIGlzIHRvbyBsYXJnZSIpO31yZXR1cm4gY1A7fSxfX3dIOmZ1bmN0aW9uKCl7aWYodGhpcy5fX3dDIT1udWxsKXtyZXR1cm47fXRoaXMuX193Qz1bXTt2YXIgY1Y7dmFyIGNUPTA7dmFyIGNYPWJCO3ZhciBjUj10aGlzLl9fd3o7dmFyIGNVPWJqO3ZhciBpPTA7d2hpbGUoaTxjUi5sZW5ndGgpe3ZhciBjVz1jUi5jaGFyQXQoaSk7c3dpdGNoKGNVKXtjYXNlIGJiOmlmKGNXPT1iaCl7aWYoaSsxPj1jUi5sZW5ndGgpe2krKzticmVhazt9dmFyIGNTPWNSLmNoYXJBdChpKzEpO2lmKGNTPT1iaCl7Y1grPWNXO2krKzt9ZWxzZXtpKys7Y1U9Vjt9fWVsc2V7Y1grPWNXO2krKzt9YnJlYWs7Y2FzZSBidTppZihjVz09Y1Ype2NUKys7aSsrO31lbHNle3RoaXMuX193Qy5wdXNoKHt0eXBlOmJ1LGNoYXJhY3RlcjpjVixzaXplOmNUfSk7Y1Y9bnVsbDtjVD0wO2NVPWJqO31icmVhaztkZWZhdWx0OmlmKChjVz49YmEmJmNXPD1iRyl8fChjVz49YlMmJmNXPD1iTSkpe2NWPWNXO2NVPWJ1O31lbHNlIGlmKGNXPT1iaCl7aWYoaSsxPj1jUi5sZW5ndGgpe2NYKz1jVztpKys7YnJlYWs7fXZhciBjUz1jUi5jaGFyQXQoaSsxKTtpZihjUz09Ymgpe2NYKz1jVztpKys7fWkrKztjVT1iYjt9ZWxzZXtjVT1iajt9aWYoY1UhPWJqKXtpZihjWC5sZW5ndGg+MCl7dGhpcy5fX3dDLnB1c2goe3R5cGU6YmksdGV4dDpjWH0pO2NYPWJCO319ZWxzZXtjWCs9Y1c7aSsrO31icmVhazt9fWlmKGNWIT1udWxsKXt0aGlzLl9fd0MucHVzaCh7dHlwZTpidSxjaGFyYWN0ZXI6Y1Ysc2l6ZTpjVH0pO31lbHNlIGlmKGNYLmxlbmd0aD4wKXt0aGlzLl9fd0MucHVzaCh7dHlwZTpiaSx0ZXh0OmNYfSk7fX0sX193STpmdW5jdGlvbigpe2lmKHRoaXMuX193QSE9bnVsbCl7cmV0dXJuIDt9dmFyIGRjPXRoaXMuX193ejt0aGlzLl9fd0ooKTt0aGlzLl9fd0goKTt2YXIgZGk9W107dmFyIGRlPWJrO2Zvcih2YXIgZGE9MDtkYTx0aGlzLl9fd0MubGVuZ3RoO2RhKyspe3ZhciBkaj10aGlzLl9fd0NbZGFdO2lmKGRqLnR5cGU9PWJpKXtkZSs9cXgubGFuZy5TdHJpbmcuZXNjYXBlUmVnZXhwQ2hhcnMoZGoudGV4dCk7fWVsc2V7dmFyIGRiPWRqLmNoYXJhY3Rlcjt2YXIgZGY9ZGouc2l6ZTt2YXIgZGQ7Zm9yKHZhciBkaz0wO2RrPHRoaXMuX193Qi5sZW5ndGg7ZGsrKyl7dmFyIGRnPXRoaXMuX193Qltka107aWYoZGI9PWRnLnBhdHRlcm4uY2hhckF0KDApJiZkZj09ZGcucGF0dGVybi5sZW5ndGgpe2RkPWRnO2JyZWFrO319aWYoZGQ9PW51bGwpe3ZhciBkaD1iQjtmb3IodmFyIGk9MDtpPGRmO2krKyl7ZGgrPWRiO310aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBkYXRlIGZvcm1hdDogIitkYysiLiBXaWxkY2FyZCAiK2RoKyIgaXMgbm90IHN1cHBvcnRlZCIpO31lbHNle2RpLnB1c2goZGQpO2RlKz1kZC5yZWdleDt9fX1kZSs9eDt2YXIgY1k7dHJ5e2NZPW5ldyBSZWdFeHAoZGUpO31jYXRjaChkbCl7dGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgZGF0ZSBmb3JtYXQ6ICIrZGMpO310aGlzLl9fd0E9e3JlZ2V4OmNZLCJ1c2VkUnVsZXMiOmRpLHBhdHRlcm46ZGV9O30sX193SjpmdW5jdGlvbigpe3ZhciBkdz1xeC51dGlsLmZvcm1hdC5EYXRlRm9ybWF0O3ZhciBkej1xeC5sYW5nLlN0cmluZztpZih0aGlzLl9fd0IhPW51bGwpe3JldHVybiA7fXZhciBkeD10aGlzLl9fd0I9W107dmFyIGRuPXF4LmxvY2FsZS5EYXRlLmdldEFtTWFya2VyKHRoaXMuX193eSkudG9TdHJpbmcoKXx8ZHcuQU1fTUFSS0VSO3ZhciBkRT1xeC5sb2NhbGUuRGF0ZS5nZXRQbU1hcmtlcih0aGlzLl9fd3kpLnRvU3RyaW5nKCl8fGR3LlBNX01BUktFUjt2YXIgZHM9ZnVuY3Rpb24oZEksZEope2RKPXBhcnNlSW50KGRKLDEwKTtpZihkSjxkdy5BU1NVTUVfWUVBUl8yMDAwX1RIUkVTSE9MRCl7ZEorPTIwMDA7fWVsc2UgaWYoZEo8MTAwKXtkSis9MTkwMDt9ZEkueWVhcj1kSjt9O3ZhciBkdT1mdW5jdGlvbihkSyxkTCl7ZEsubW9udGg9cGFyc2VJbnQoZEwsMTApLTE7fTt2YXIgZHE9ZnVuY3Rpb24oZE0sZE4pe3ZhciBkTz1xeC5sb2NhbGUuRGF0ZS5nZXRQbU1hcmtlcih0aGlzLl9fd3kpLnRvU3RyaW5nKCl8fGR3LlBNX01BUktFUjtkTS5pc3BtPShkTj09ZE8pO307dmFyIGRHPWZ1bmN0aW9uKGRQLGRRKXtkUC5ob3VyPXBhcnNlSW50KGRRLDEwKSUyNDt9O3ZhciBkcD1mdW5jdGlvbihkUixkUyl7ZFIuaG91cj1wYXJzZUludChkUywxMCklMTI7fTt2YXIgZEI9ZnVuY3Rpb24oZFQsZFUpe3JldHVybjt9O3ZhciBkSD1xeC5sb2NhbGUuRGF0ZS5nZXRNb250aE5hbWVzKGJBLHRoaXMuX193eSxiQyk7Zm9yKHZhciBpPTA7aTxkSC5sZW5ndGg7aSsrKXtkSFtpXT1kei5lc2NhcGVSZWdleHBDaGFycyhkSFtpXS50b1N0cmluZygpKTt9dmFyIGRyPWZ1bmN0aW9uKGRWLGRXKXtkVz1kei5lc2NhcGVSZWdleHBDaGFycyhkVyk7ZFYubW9udGg9ZEguaW5kZXhPZihkVyk7fTt2YXIgZHk9cXgubG9jYWxlLkRhdGUuZ2V0TW9udGhOYW1lcyhieix0aGlzLl9fd3ksYkMpO2Zvcih2YXIgaT0wO2k8ZHkubGVuZ3RoO2krKyl7ZHlbaV09ZHouZXNjYXBlUmVnZXhwQ2hhcnMoZHlbaV0udG9TdHJpbmcoKSk7fXZhciBkQz1mdW5jdGlvbihkWCxkWSl7ZFk9ZHouZXNjYXBlUmVnZXhwQ2hhcnMoZFkpO2RYLm1vbnRoPWR5LmluZGV4T2YoZFkpO307dmFyIGRtPXF4LmxvY2FsZS5EYXRlLmdldERheU5hbWVzKGJkLHRoaXMuX193eSxiQyk7Zm9yKHZhciBpPTA7aTxkbS5sZW5ndGg7aSsrKXtkbVtpXT1kei5lc2NhcGVSZWdleHBDaGFycyhkbVtpXS50b1N0cmluZygpKTt9dmFyIGRGPWZ1bmN0aW9uKGVhLGViKXtlYj1kei5lc2NhcGVSZWdleHBDaGFycyhlYik7ZWEubW9udGg9ZG0uaW5kZXhPZihlYik7fTt2YXIgZEQ9cXgubG9jYWxlLkRhdGUuZ2V0RGF5TmFtZXMoYkEsdGhpcy5fX3d5LGJDKTtmb3IodmFyIGk9MDtpPGRELmxlbmd0aDtpKyspe2REW2ldPWR6LmVzY2FwZVJlZ2V4cENoYXJzKGREW2ldLnRvU3RyaW5nKCkpO312YXIgZHQ9ZnVuY3Rpb24oZWMsZWQpe2VkPWR6LmVzY2FwZVJlZ2V4cENoYXJzKGVkKTtlYy5tb250aD1kRC5pbmRleE9mKGVkKTt9O3ZhciBkQT1xeC5sb2NhbGUuRGF0ZS5nZXREYXlOYW1lcyhieix0aGlzLl9fd3ksYkMpO2Zvcih2YXIgaT0wO2k8ZEEubGVuZ3RoO2krKyl7ZEFbaV09ZHouZXNjYXBlUmVnZXhwQ2hhcnMoZEFbaV0udG9TdHJpbmcoKSk7fXZhciBkdj1mdW5jdGlvbihlZSxlZil7ZWY9ZHouZXNjYXBlUmVnZXhwQ2hhcnMoZWYpO2VlLm1vbnRoPWRBLmluZGV4T2YoZWYpO307ZHgucHVzaCh7cGF0dGVybjpiUixyZWdleDpQLG1hbmlwdWxhdG9yOmRzfSk7ZHgucHVzaCh7cGF0dGVybjpiUSxyZWdleDpicCxtYW5pcHVsYXRvcjpkc30pO2R4LnB1c2goe3BhdHRlcm46cSxyZWdleDpicyxtYW5pcHVsYXRvcjpkc30pO2R4LnB1c2goe3BhdHRlcm46aixyZWdleDpRLG1hbmlwdWxhdG9yOmRzfSk7ZHgucHVzaCh7cGF0dGVybjpELHJlZ2V4OlgsbWFuaXB1bGF0b3I6ZHN9KTtkeC5wdXNoKHtwYXR0ZXJuOnIscmVnZXg6bCxtYW5pcHVsYXRvcjpkc30pO2R4LnB1c2goe3BhdHRlcm46YlgscmVnZXg6cCxtYW5pcHVsYXRvcjpkc30pO2R4LnB1c2goe3BhdHRlcm46QSxyZWdleDpiRCxtYW5pcHVsYXRvcjpkdX0pO2R4LnB1c2goe3BhdHRlcm46bixyZWdleDpiRCxtYW5pcHVsYXRvcjpkdX0pO2R4LnB1c2goe3BhdHRlcm46QyxyZWdleDpieStkSC5qb2luKGJ3KStieCxtYW5pcHVsYXRvcjpkcn0pO2R4LnB1c2goe3BhdHRlcm46SSxyZWdleDpieStkeS5qb2luKGJ3KStieCxtYW5pcHVsYXRvcjpkQ30pO2R4LnB1c2goe3BhdHRlcm46ZyxyZWdleDpiRCxmaWVsZDpiRn0pO2R4LnB1c2goe3BhdHRlcm46TyxyZWdleDpiRCxmaWVsZDpiRn0pO2R4LnB1c2goe3BhdHRlcm46Yk8scmVnZXg6YnkrZG0uam9pbihidykrYngsbWFuaXB1bGF0b3I6ZEZ9KTtkeC5wdXNoKHtwYXR0ZXJuOnkscmVnZXg6YnkrZEQuam9pbihidykrYngsbWFuaXB1bGF0b3I6ZHR9KTtkeC5wdXNoKHtwYXR0ZXJuOmJsLHJlZ2V4OmJ5K2RBLmpvaW4oYncpK2J4LG1hbmlwdWxhdG9yOmR2fSk7ZHgucHVzaCh7cGF0dGVybjpkLHJlZ2V4OmJ5K2RuK2J3K2RFK2J4LG1hbmlwdWxhdG9yOmRxfSk7ZHgucHVzaCh7cGF0dGVybjpiUCxyZWdleDpiRCxmaWVsZDpiZ30pO2R4LnB1c2goe3BhdHRlcm46ayxyZWdleDpiRCxmaWVsZDpiZ30pO2R4LnB1c2goe3BhdHRlcm46YlcscmVnZXg6YkQsbWFuaXB1bGF0b3I6ZEd9KTtkeC5wdXNoKHtwYXR0ZXJuOlIscmVnZXg6YkQsbWFuaXB1bGF0b3I6ZEd9KTtkeC5wdXNoKHtwYXR0ZXJuOmJyLHJlZ2V4OmJELGZpZWxkOmJnfSk7ZHgucHVzaCh7cGF0dGVybjpjLHJlZ2V4OmJELGZpZWxkOmJnfSk7ZHgucHVzaCh7cGF0dGVybjp0LHJlZ2V4OmJELG1hbmlwdWxhdG9yOmRwfSk7ZHgucHVzaCh7cGF0dGVybjpibyxyZWdleDpiRCxtYW5pcHVsYXRvcjpkcH0pO2R4LnB1c2goe3BhdHRlcm46Ym0scmVnZXg6YkQsZmllbGQ6Ym59KTtkeC5wdXNoKHtwYXR0ZXJuOkYscmVnZXg6YkQsZmllbGQ6Ym59KTtkeC5wdXNoKHtwYXR0ZXJuOkoscmVnZXg6YkQsZmllbGQ6YkV9KTtkeC5wdXNoKHtwYXR0ZXJuOkIscmVnZXg6YkQsZmllbGQ6YkV9KTtkeC5wdXNoKHtwYXR0ZXJuOm8scmVnZXg6YmYsZmllbGQ6YmV9KTtkeC5wdXNoKHtwYXR0ZXJuOlkscmVnZXg6YmYsZmllbGQ6YmV9KTtkeC5wdXNoKHtwYXR0ZXJuOmJVLHJlZ2V4OmJmLGZpZWxkOmJlfSk7ZHgucHVzaCh7cGF0dGVybjpidCxyZWdleDplLG1hbmlwdWxhdG9yOmRCfSk7ZHgucHVzaCh7cGF0dGVybjpFLHJlZ2V4OkwsbWFuaXB1bGF0b3I6ZEJ9KTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX193Qz10aGlzLl9fd0E9dGhpcy5fX3dCPW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGs9Il8iLGo9ImZvcm1hdCIsaD0idGh1IixnPSJzYXQiLGY9ImNsZHJfZGF5XyIsZT0iY2xkcl9tb250aF8iLGQ9IndlZCIsYz0iZnJpIixiPSJ0dWUiLGE9Im1vbiIsQj0ic3VuIixBPSJzaG9ydCIsej0iSEg6bW0iLHk9IkhIbW1zc3p6Iix4PSJISG1tIix3PSJISG1tc3MiLHY9ImNsZHJfZGF0ZV9mb3JtYXRfIix1PSJISDptbTpzcyB6eiIsdD0iZnVsbCIscz0iY2xkcl9wbSIscT0ibG9uZyIscj0ibWVkaXVtIixvPSJjbGRyX2FtIixwPSJxeC5sb2NhbGUuRGF0ZSIsbT0iY2xkcl9kYXRlX3RpbWVfZm9ybWF0XyIsbj0iY2xkcl90aW1lX2Zvcm1hdF8iLGw9IkhIOm1tOnNzIjtxeC5DbGFzcy5kZWZpbmUocCx7c3RhdGljczp7X193SzpxeC5sb2NhbGUuTWFuYWdlci5nZXRJbnN0YW5jZSgpLGdldEFtTWFya2VyOmZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLl9fd0subG9jYWxpemUobyxbXSxDKTt9LGdldFBtTWFya2VyOmZ1bmN0aW9uKEQpe3JldHVybiB0aGlzLl9fd0subG9jYWxpemUocyxbXSxEKTt9LGdldERheU5hbWVzOmZ1bmN0aW9uKGxlbmd0aCxFLEYpe3ZhciBGPUY/RjpqO3t9O3ZhciBIPVtCLGEsYixkLGgsYyxnXTt2YXIgST1bXTtmb3IodmFyIGk9MDtpPEgubGVuZ3RoO2krKyl7dmFyIEc9ZitGK2srbGVuZ3RoK2srSFtpXTtJLnB1c2godGhpcy5fX3dLLmxvY2FsaXplKEcsW10sRSkpO31yZXR1cm4gSTt9LGdldERheU5hbWU6ZnVuY3Rpb24obGVuZ3RoLEosSyxMKXt2YXIgTD1MP0w6ajt7fTt2YXIgTj1bQixhLGIsZCxoLGMsZ107dmFyIE09ZitMK2srbGVuZ3RoK2srTltKXTtyZXR1cm4gdGhpcy5fX3dLLmxvY2FsaXplKE0sW10sSyk7fSxnZXRNb250aE5hbWVzOmZ1bmN0aW9uKGxlbmd0aCxPLFApe3ZhciBQPVA/UDpqO3t9O3ZhciBSPVtdO2Zvcih2YXIgaT0wO2k8MTI7aSsrKXt2YXIgUT1lK1AraytsZW5ndGgraysoaSsxKTtSLnB1c2godGhpcy5fX3dLLmxvY2FsaXplKFEsW10sTykpO31yZXR1cm4gUjt9LGdldE1vbnRoTmFtZTpmdW5jdGlvbihsZW5ndGgsUyxULFUpe3ZhciBVPVU/VTpqO3t9O3ZhciBWPWUrVStrK2xlbmd0aCtrKyhTKzEpO3JldHVybiB0aGlzLl9fd0subG9jYWxpemUoVixbXSxUKTt9LGdldERhdGVGb3JtYXQ6ZnVuY3Rpb24oVyxYKXt7fTt2YXIgWT12K1c7cmV0dXJuIHRoaXMuX193Sy5sb2NhbGl6ZShZLFtdLFgpO30sZ2V0RGF0ZVRpbWVGb3JtYXQ6ZnVuY3Rpb24oYmEsYmIsYmMpe3ZhciBiZT1tK2JhO3ZhciBiZD10aGlzLl9fd0subG9jYWxpemUoYmUsW10sYmMpO2lmKGJkPT1iZSl7YmQ9YmI7fXJldHVybiBiZDt9LGdldFRpbWVGb3JtYXQ6ZnVuY3Rpb24oYmYsYmcpe3t9O3ZhciBiaT1uK2JmO3ZhciBiaD10aGlzLl9fd0subG9jYWxpemUoYmksW10sYmcpO2lmKGJoIT1iaSl7cmV0dXJuIGJoO31zd2l0Y2goYmYpe2Nhc2UgQTpjYXNlIHI6cmV0dXJuIHF4LmxvY2FsZS5EYXRlLmdldERhdGVUaW1lRm9ybWF0KHgseik7Y2FzZSBxOnJldHVybiBxeC5sb2NhbGUuRGF0ZS5nZXREYXRlVGltZUZvcm1hdCh3LGwpO2Nhc2UgdDpyZXR1cm4gcXgubG9jYWxlLkRhdGUuZ2V0RGF0ZVRpbWVGb3JtYXQoeSx1KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVGhpcyBjYXNlIHNob3VsZCBuZXZlciBoYXBwZW4uIik7fX0sZ2V0V2Vla1N0YXJ0OmZ1bmN0aW9uKGJqKXt2YXIgYms9eyJNViI6NSwiQUUiOjYsIkFGIjo2LCJCSCI6NiwiREoiOjYsIkRaIjo2LCJFRyI6NiwiRVIiOjYsIkVUIjo2LCJJUSI6NiwiSVIiOjYsIkpPIjo2LCJLRSI6NiwiS1ciOjYsIkxCIjo2LCJMWSI6NiwiTUEiOjYsIk9NIjo2LCJRQSI6NiwiU0EiOjYsIlNEIjo2LCJTTyI6NiwiVE4iOjYsIllFIjo2LCJBUyI6MCwiQVUiOjAsIkFaIjowLCJCVyI6MCwiQ0EiOjAsIkNOIjowLCJGTyI6MCwiR0UiOjAsIkdMIjowLCJHVSI6MCwiSEsiOjAsIklFIjowLCJJTCI6MCwiSVMiOjAsIkpNIjowLCJKUCI6MCwiS0ciOjAsIktSIjowLCJMQSI6MCwiTUgiOjAsIk1OIjowLCJNTyI6MCwiTVAiOjAsIk1UIjowLCJOWiI6MCwiUEgiOjAsIlBLIjowLCJTRyI6MCwiVEgiOjAsIlRUIjowLCJUVyI6MCwiVU0iOjAsIlVTIjowLCJVWiI6MCwiVkkiOjAsIlpBIjowLCJaVyI6MCwiTVciOjAsIk5HIjowLCJUSiI6MH07dmFyIGJsPXF4LmxvY2FsZS5EYXRlLl9nZXRUZXJyaXRvcnkoYmopO3JldHVybiBia1tibF0hPW51bGw/YmtbYmxdOjE7fSxnZXRXZWVrZW5kU3RhcnQ6ZnVuY3Rpb24oYm0pe3ZhciBibz17IkVHIjo1LCJJTCI6NSwiU1kiOjUsIklOIjowLCJBRSI6NCwiQkgiOjQsIkRaIjo0LCJJUSI6NCwiSk8iOjQsIktXIjo0LCJMQiI6NCwiTFkiOjQsIk1BIjo0LCJPTSI6NCwiUUEiOjQsIlNBIjo0LCJTRCI6NCwiVE4iOjQsIllFIjo0fTt2YXIgYm49cXgubG9jYWxlLkRhdGUuX2dldFRlcnJpdG9yeShibSk7cmV0dXJuIGJvW2JuXSE9bnVsbD9ib1tibl06Njt9LGdldFdlZWtlbmRFbmQ6ZnVuY3Rpb24oYnApe3ZhciBicT17IkFFIjo1LCJCSCI6NSwiRFoiOjUsIklRIjo1LCJKTyI6NSwiS1ciOjUsIkxCIjo1LCJMWSI6NSwiTUEiOjUsIk9NIjo1LCJRQSI6NSwiU0EiOjUsIlNEIjo1LCJUTiI6NSwiWUUiOjUsIkFGIjo1LCJJUiI6NSwiRUciOjYsIklMIjo2LCJTWSI6Nn07dmFyIGJyPXF4LmxvY2FsZS5EYXRlLl9nZXRUZXJyaXRvcnkoYnApO3JldHVybiBicVticl0hPW51bGw/YnFbYnJdOjA7fSxpc1dlZWtlbmQ6ZnVuY3Rpb24oYnMsYnQpe3ZhciBidj1xeC5sb2NhbGUuRGF0ZS5nZXRXZWVrZW5kU3RhcnQoYnQpO3ZhciBidT1xeC5sb2NhbGUuRGF0ZS5nZXRXZWVrZW5kRW5kKGJ0KTtpZihidT5idil7cmV0dXJuICgoYnM+PWJ2KSYmKGJzPD1idSkpO31lbHNle3JldHVybiAoKGJzPj1idil8fChiczw9YnUpKTt9fSxfZ2V0VGVycml0b3J5OmZ1bmN0aW9uKGJ3KXtpZihidyl7dmFyIGJ4PWJ3LnNwbGl0KGspWzFdfHxidzt9ZWxzZXtieD10aGlzLl9fd0suZ2V0VGVycml0b3J5KCl8fHRoaXMuX193Sy5nZXRMYW5ndWFnZSgpO31yZXR1cm4gYngudG9VcHBlckNhc2UoKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGU9ImF1dG8iLGQ9InN0cmluZyIsYz0ibnVtYmVyIixiPSIqIixhPSJxeC51aS5jb3JlLkNvbHVtbkRhdGEiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXgudWkuY29yZS5MYXlvdXRJdGVtLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnVpLmNvcmUuTGF5b3V0SXRlbS5jYWxsKHRoaXMpO3RoaXMuc2V0Q29sdW1uV2lkdGgoZSk7fSxtZW1iZXJzOntfX3llOm51bGwscmVuZGVyTGF5b3V0OmZ1bmN0aW9uKGYsdG9wLGcsaCl7dGhpcy5fX3llPWc7fSxnZXRDb21wdXRlZFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX195ZTt9LGdldEZsZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMYXlvdXRQcm9wZXJ0aWVzKCkuZmxleHx8MDt9LHNldENvbHVtbldpZHRoOmZ1bmN0aW9uKGksail7dmFyIGo9anx8MDt2YXIgaz1udWxsO2lmKHR5cGVvZiBpPT1jKXt0aGlzLnNldFdpZHRoKGkpO31lbHNlIGlmKHR5cGVvZiBpPT1kKXtpZihpPT1lKXtqPTE7fWVsc2V7dmFyIGw9aS5tYXRjaCgvXlswLTldKyg/OlwuWzAtOV0rKT8oWyVcKl0pJC8pO2lmKGwpe2lmKGxbMV09PWIpe2o9cGFyc2VGbG9hdChpKTt9ZWxzZXtrPWk7fX19fXRoaXMuc2V0TGF5b3V0UHJvcGVydGllcyh7ZmxleDpqLHdpZHRoOmt9KTt9fSxzZXR0aW5nczp7InF4LnRhYmxlUmVzaXplRGVidWciOmZhbHNlfX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9InF4LnVpLnRhYmxlLmNvbHVtbm1vZGVsLnJlc2l6ZWJlaGF2aW9yLkFic3RyYWN0IixhPSJhYnN0cmFjdCI7cXguQ2xhc3MuZGVmaW5lKGIse3R5cGU6YSxleHRlbmQ6cXguY29yZS5PYmplY3QsbWVtYmVyczp7X3NldE51bUNvbHVtbnM6ZnVuY3Rpb24oYyl7dGhyb3cgbmV3IEVycm9yKCJfc2V0TnVtQ29sdW1ucyBpcyBhYnN0cmFjdCIpO30sb25BcHBlYXI6ZnVuY3Rpb24oZXZlbnQsZCl7dGhyb3cgbmV3IEVycm9yKCJvbkFwcGVhciBpcyBhYnN0cmFjdCIpO30sb25UYWJsZVdpZHRoQ2hhbmdlZDpmdW5jdGlvbihldmVudCl7dGhyb3cgbmV3IEVycm9yKCJvblRhYmxlV2lkdGhDaGFuZ2VkIGlzIGFic3RyYWN0Iik7fSxvblZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZDpmdW5jdGlvbihldmVudCl7dGhyb3cgbmV3IEVycm9yKCJvblZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCBpcyBhYnN0cmFjdCIpO30sb25Db2x1bW5XaWR0aENoYW5nZWQ6ZnVuY3Rpb24oZXZlbnQpe3Rocm93IG5ldyBFcnJvcigib25Db2x1bW5XaWR0aENoYW5nZWQgaXMgYWJzdHJhY3QiKTt9LG9uVmlzaWJpbGl0eUNoYW5nZWQ6ZnVuY3Rpb24oZXZlbnQpe3Rocm93IG5ldyBFcnJvcigib25WaXNpYmlsaXR5Q2hhbmdlZCBpcyBhYnN0cmFjdCIpO30sX2dldEF2YWlsYWJsZVdpZHRoOmZ1bmN0aW9uKCl7dmFyIGY9dGhpcy5nZXRUYWJsZUNvbHVtbk1vZGVsKCk7dmFyIGk9Zi5nZXRUYWJsZSgpO3ZhciBlPWkuX2dldFBhbmVTY3JvbGxlckFycigpO2lmKCFlWzBdfHwhZVswXS5nZXRMYXlvdXRQYXJlbnQoKS5nZXRCb3VuZHMoKSl7cmV0dXJuIG51bGw7fXZhciBoPWVbMF0uZ2V0TGF5b3V0UGFyZW50KCkuZ2V0Qm91bmRzKCkud2lkdGg7dmFyIGc9ZVtlLmxlbmd0aC0xXTtoLT1nLmdldFBhbmVJbnNldFJpZ2h0KCk7cmV0dXJuIGg7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBqPSJGdW5jdGlvbiIsaD0iQm9vbGVhbiIsZz0ibWluV2lkdGgiLGY9IndpZHRoIixlPSJfX3lnIixkPSJxeC51aS50YWJsZS5jb2x1bW5tb2RlbC5SZXNpemUiLGM9InF4LnVpLnRhYmxlLmNvbHVtbm1vZGVsLnJlc2l6ZWJlaGF2aW9yLkRlZmF1bHQiLGI9Il9feWgiLGE9Im1heFdpZHRoIjtxeC5DbGFzcy5kZWZpbmUoYyx7ZXh0ZW5kOnF4LnVpLnRhYmxlLmNvbHVtbm1vZGVsLnJlc2l6ZWJlaGF2aW9yLkFic3RyYWN0LGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnVpLnRhYmxlLmNvbHVtbm1vZGVsLnJlc2l6ZWJlaGF2aW9yLkFic3RyYWN0LmNhbGwodGhpcyk7dGhpcy5fX3lmPVtdO3RoaXMuX195Zz1uZXcgcXgudWkubGF5b3V0LkhCb3goKTt0aGlzLl9feWcuY29ubmVjdFRvV2lkZ2V0KHRoaXMpO3RoaXMuX195aD1uZXcgcXgudXRpbC5EZWZlcnJlZENhbGwodGhpcy5fY29tcHV0ZUNvbHVtbnNGbGV4V2lkdGgsdGhpcyk7fSxwcm9wZXJ0aWVzOntuZXdSZXNpemVCZWhhdmlvckNvbHVtbkRhdGE6e2NoZWNrOmosaW5pdDpmdW5jdGlvbihrKXtyZXR1cm4gbmV3IHF4LnVpLmNvcmUuQ29sdW1uRGF0YSgpO319LGluaXRpYWxpemVXaWR0aHNPbkV2ZXJ5QXBwZWFyOntjaGVjazpoLGluaXQ6ZmFsc2V9LHRhYmxlQ29sdW1uTW9kZWw6e2NoZWNrOmR9fSxtZW1iZXJzOntfX3lnOm51bGwsX195aTpudWxsLF9feWY6bnVsbCxfX3loOm51bGwsX195ajpmYWxzZSxzZXRXaWR0aDpmdW5jdGlvbihtLG4sbyl7aWYobT49dGhpcy5fX3lmLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCJDb2x1bW4gbnVtYmVyIG91dCBvZiByYW5nZSIpO310aGlzLl9feWZbbV0uc2V0Q29sdW1uV2lkdGgobixvKTt0aGlzLl9feWguc2NoZWR1bGUoKTt9LHNldE1pbldpZHRoOmZ1bmN0aW9uKHAscSl7aWYocD49dGhpcy5fX3lmLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCJDb2x1bW4gbnVtYmVyIG91dCBvZiByYW5nZSIpO310aGlzLl9feWZbcF0uc2V0TWluV2lkdGgocSk7dGhpcy5fX3loLnNjaGVkdWxlKCk7fSxzZXRNYXhXaWR0aDpmdW5jdGlvbihyLHMpe2lmKHI+PXRoaXMuX195Zi5sZW5ndGgpe3Rocm93IG5ldyBFcnJvcigiQ29sdW1uIG51bWJlciBvdXQgb2YgcmFuZ2UiKTt9dGhpcy5fX3lmW3JdLnNldE1heFdpZHRoKHMpO3RoaXMuX195aC5zY2hlZHVsZSgpO30sc2V0OmZ1bmN0aW9uKHQsdSl7Zm9yKHZhciB2IGluIHUpe3N3aXRjaCh2KXtjYXNlIGY6dGhpcy5zZXRXaWR0aCh0LHVbdl0pO2JyZWFrO2Nhc2UgZzp0aGlzLnNldE1pbldpZHRoKHQsdVt2XSk7YnJlYWs7Y2FzZSBhOnRoaXMuc2V0TWF4V2lkdGgodCx1W3ZdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcm9wZXJ0eTogIit2KTt9fX0sb25BcHBlYXI6ZnVuY3Rpb24oZXZlbnQsdyl7aWYodz09PXRydWV8fCF0aGlzLl9feWp8fHRoaXMuZ2V0SW5pdGlhbGl6ZVdpZHRoc09uRXZlcnlBcHBlYXIoKSl7dGhpcy5fY29tcHV0ZUNvbHVtbnNGbGV4V2lkdGgoKTt0aGlzLl9feWo9dHJ1ZTt9fSxvblRhYmxlV2lkdGhDaGFuZ2VkOmZ1bmN0aW9uKGV2ZW50KXt0aGlzLl9jb21wdXRlQ29sdW1uc0ZsZXhXaWR0aCgpO30sb25WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQ6ZnVuY3Rpb24oZXZlbnQpe3RoaXMuX2NvbXB1dGVDb2x1bW5zRmxleFdpZHRoKCk7fSxvbkNvbHVtbldpZHRoQ2hhbmdlZDpmdW5jdGlvbihldmVudCl7dGhpcy5fZXh0ZW5kTmV4dENvbHVtbihldmVudCk7fSxvblZpc2liaWxpdHlDaGFuZ2VkOmZ1bmN0aW9uKGV2ZW50KXt2YXIgeD1ldmVudC5nZXREYXRhKCk7aWYoeC52aXNpYmxlKXt0aGlzLl9jb21wdXRlQ29sdW1uc0ZsZXhXaWR0aCgpO3JldHVybjt9dGhpcy5fZXh0ZW5kTGFzdENvbHVtbihldmVudCk7fSxfc2V0TnVtQ29sdW1uczpmdW5jdGlvbih5KXt2YXIgej10aGlzLl9feWY7aWYoeTw9ei5sZW5ndGgpe3ouc3BsaWNlKHksei5sZW5ndGgpO3JldHVybjt9Zm9yKHZhciBpPXoubGVuZ3RoO2k8eTtpKyspe3pbaV09dGhpcy5nZXROZXdSZXNpemVCZWhhdmlvckNvbHVtbkRhdGEoKSgpO3pbaV0uY29sdW1uTnVtYmVyPWk7fX0sZ2V0TGF5b3V0Q2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3lpO30sX2NvbXB1dGVDb2x1bW5zRmxleFdpZHRoOmZ1bmN0aW9uKCl7dGhpcy5fX3loLmNhbmNlbCgpO3ZhciBFPXRoaXMuX2dldEF2YWlsYWJsZVdpZHRoKCk7aWYoRT09PW51bGwpe3JldHVybjt9dmFyIEE9dGhpcy5nZXRUYWJsZUNvbHVtbk1vZGVsKCk7dmFyIEM9QS5nZXRWaXNpYmxlQ29sdW1ucygpO3ZhciBEPUMubGVuZ3RoO3ZhciBCPXRoaXMuX195Zjt2YXIgaSxsO2lmKEQ9PT0wKXtyZXR1cm47fXZhciBHPVtdO2ZvcihpPTA7aTxEO2krKyl7Ry5wdXNoKEJbQ1tpXV0pO310aGlzLl9feWk9Rzt0aGlzLl9feWsoKTt0aGlzLl9feWcucmVuZGVyTGF5b3V0KEUsMTAwKTtmb3IoaT0wLGw9Ry5sZW5ndGg7aTxsO2krKyl7dmFyIEY9R1tpXS5nZXRDb21wdXRlZFdpZHRoKCk7QS5zZXRDb2x1bW5XaWR0aChDW2ldLEYpO319LF9feWs6ZnVuY3Rpb24oKXt0aGlzLl9feWcuaW52YWxpZGF0ZUNoaWxkcmVuQ2FjaGUoKTt2YXIgSD10aGlzLl9feWk7Zm9yKHZhciBpPTAsbD1ILmxlbmd0aDtpPGw7aSsrKXtIW2ldLmludmFsaWRhdGVMYXlvdXRDYWNoZSgpO319LF9leHRlbmROZXh0Q29sdW1uOmZ1bmN0aW9uKGV2ZW50KXt2YXIgTT10aGlzLmdldFRhYmxlQ29sdW1uTW9kZWwoKTt2YXIgUD1ldmVudC5nZXREYXRhKCk7dmFyIEs9TS5nZXRWaXNpYmxlQ29sdW1ucygpO3ZhciBKPXRoaXMuX2dldEF2YWlsYWJsZVdpZHRoKCk7dmFyIEk9Sy5sZW5ndGg7aWYoUC5uZXdXaWR0aD5QLm9sZFdpZHRoKXtyZXR1cm4gO312YXIgaTt2YXIgTDt2YXIgTz0wO2ZvcihpPTA7aTxJO2krKyl7Tys9TS5nZXRDb2x1bW5XaWR0aChLW2ldKTt9aWYoTzxKKXtmb3IoaT0wO2k8Sy5sZW5ndGg7aSsrKXtpZihLW2ldPT1QLmNvbCl7TD1LW2krMV07YnJlYWs7fX1pZihMKXt2YXIgTj0oSi0oTy1NLmdldENvbHVtbldpZHRoKEwpKSk7TS5zZXRDb2x1bW5XaWR0aChMLE4pO319fSxfZXh0ZW5kTGFzdENvbHVtbjpmdW5jdGlvbihldmVudCl7dmFyIFQ9dGhpcy5nZXRUYWJsZUNvbHVtbk1vZGVsKCk7dmFyIFg9ZXZlbnQuZ2V0RGF0YSgpO2lmKFgudmlzaWJsZSl7cmV0dXJuO312YXIgUz1ULmdldFZpc2libGVDb2x1bW5zKCk7aWYoUy5sZW5ndGg9PTApe3JldHVybjt9dmFyIFI9dGhpcy5fZ2V0QXZhaWxhYmxlV2lkdGgoVCk7dmFyIFE9Uy5sZW5ndGg7dmFyIGk7dmFyIFY7dmFyIFc9MDtmb3IoaT0wO2k8UTtpKyspe1crPVQuZ2V0Q29sdW1uV2lkdGgoU1tpXSk7fWlmKFc8Uil7Vj1TW1MubGVuZ3RoLTFdO3ZhciBVPShSLShXLVQuZ2V0Q29sdW1uV2lkdGgoVikpKTtULnNldENvbHVtbldpZHRoKFYsVSk7fX0sX2dldFJlc2l6ZUNvbHVtbkRhdGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3lmO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX3lmPXRoaXMuX195aT1udWxsO3RoaXMuX2Rpc3Bvc2VPYmplY3RzKGUsYik7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIHA9IkJvb2xlYW4iLG89ImNvbHVtbi1idXR0b24iLG49IkZ1bmN0aW9uIixtPSJxeC5ldmVudC50eXBlLkRhdGEiLGs9InN0YXR1c2JhciIsaj0icXgudWkudGFibGUucGFuZS5DZWxsRXZlbnQiLGg9ImZ1bmN0aW9uIixnPSJQYWdlVXAiLGY9ImRhdGFDaGFuZ2VkIixlPSciJyxiRj0iY2hhbmdlTG9jYWxlIixiRT0iY2hhbmdlU2VsZWN0aW9uIixiRD0icXguZHlubG9jYWxlIixiQz0iX193ZCIsYkI9IkVudGVyIixiQT0ibWV0YURhdGFDaGFuZ2VkIixiej0ib24iLGJ5PSJfYXBwbHlTdGF0dXNCYXJWaXNpYmxlIixieD0iY29sdW1uVmlzaWJpbGl0eU1lbnVDcmVhdGVTdGFydCIsYnc9ImJsdXIiLHc9InF4LnVpLnRhYmxlLlRhYmxlIix5PSJjb2x1bW5WaXNpYmlsaXR5TWVudUNyZWF0ZUVuZCIsdT0iY2hhbmdlVmlzaWJsZSIsdj0iX2FwcGx5UmVzZXRTZWxlY3Rpb25PbkhlYWRlckNsaWNrIixzPSJfYXBwbHlNZXRhQ29sdW1uQ291bnRzIix0PSJmb2N1cyIscT0iY2hhbmdlRGF0YVJvd1JlbmRlcmVyIixyPSJjaGFuZ2VIZWFkZXJDZWxsSGVpZ2h0IixGPSJFc2NhcGUiLEc9IkEiLFg9ImNoYW5nZVNlbGVjdGlvbk1vZGVsIixUPSJMZWZ0IixiZz0iX192UyIsYmI9IkRvd24iLGJzPSJJbnRlZ2VyIixibT0iX2FwcGx5SGVhZGVyQ2VsbEhlaWdodCIsTj0iX193YiIsYnY9InZpc2liaWxpdHlDaGFuZ2VkIixidT0icXgudWkudGFibGUuSVRhYmxlTW9kZWwiLGJ0PSJvcmRlckNoYW5nZWQiLEw9Il9hcHBseVNlbGVjdGlvbk1vZGVsIixQPSJtZW51LWJ1dHRvbiIsUj0ibWVudSIsVj0iX2FwcGx5QWRkaXRpb25hbFN0YXR1c0JhclRleHQiLFk9Il9hcHBseUZvY3VzQ2VsbE9uTW91c2VNb3ZlIixiYz0idGFibGUiLGJpPSJfYXBwbHlDb2x1bW5WaXNpYmlsaXR5QnV0dG9uVmlzaWJsZSIsYm89ImNoYW5nZVRhYmxlTW9kZWwiLHo9InF4LmV2ZW50LnR5cGUuRXZlbnQiLEE9InRhYmxlV2lkdGhDaGFuZ2VkIixPPSJfYXBwbHlIZWFkZXJDZWxsc1Zpc2libGUiLGJmPSJPYmplY3QiLGJlPSJfYXBwbHlTaG93Q2VsbEZvY3VzSW5kaWNhdG9yIixiZD0icmVzaXplIixiaz0idmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkIixiaj0iX193YyIsYmE9ImNoYW5nZVNjcm9sbFkiLGJoPSJfYXBwbHlUYWJsZU1vZGVsIixhPSJFbmQiLGJuPSJfYXBwbHlLZWVwRmlyc3RWaXNpYmxlUm93Q29tcGxldGUiLEI9IndpZHRoQ2hhbmdlZCIsQz0ib25lIG9mIG9uZSByb3ciLFU9IkhvbWUiLGI9Il9hcHBseVJvd0hlaWdodCIsZD0iRjIiLEs9ImFwcGVhciIsRD0iVXAiLEU9IiUxIHJvd3MiLEk9InF4LnVpLnRhYmxlLnNlbGVjdGlvbi5Nb2RlbCIsVz0ib25lIHJvdyIsYnE9IlBhZ2VEb3duIixicD0iJTEgb2YgJTIgcm93cyIsUT0ia2V5cHJlc3MiLGJyPSJjaGFuZ2VSb3dIZWlnaHQiLE09Il9fdlQiLGJsPSJOdW1iZXIiLEg9ImhlYWRlciIsSj0icXgudWkudGFibGUuSVJvd1JlbmRlcmVyIixjPSJSaWdodCIsUz0iU3BhY2UiO3F4LkNsYXNzLmRlZmluZSh3LHtleHRlbmQ6cXgudWkuY29yZS5XaWRnZXQsY29uc3RydWN0OmZ1bmN0aW9uKGJHLGJIKXtxeC51aS5jb3JlLldpZGdldC5jYWxsKHRoaXMpO2lmKCFiSCl7Ykg9e307fWlmKGJILmluaXRpYWxseUhpZGRlbkNvbHVtbnMpe3RoaXMuc2V0SW5pdGlhbGx5SGlkZGVuQ29sdW1ucyhiSC5pbml0aWFsbHlIaWRkZW5Db2x1bW5zKTt9aWYoYkguc2VsZWN0aW9uTWFuYWdlcil7dGhpcy5zZXROZXdTZWxlY3Rpb25NYW5hZ2VyKGJILnNlbGVjdGlvbk1hbmFnZXIpO31pZihiSC5zZWxlY3Rpb25Nb2RlbCl7dGhpcy5zZXROZXdTZWxlY3Rpb25Nb2RlbChiSC5zZWxlY3Rpb25Nb2RlbCk7fWlmKGJILnRhYmxlQ29sdW1uTW9kZWwpe3RoaXMuc2V0TmV3VGFibGVDb2x1bW5Nb2RlbChiSC50YWJsZUNvbHVtbk1vZGVsKTt9aWYoYkgudGFibGVQYW5lKXt0aGlzLnNldE5ld1RhYmxlUGFuZShiSC50YWJsZVBhbmUpO31pZihiSC50YWJsZVBhbmVIZWFkZXIpe3RoaXMuc2V0TmV3VGFibGVQYW5lSGVhZGVyKGJILnRhYmxlUGFuZUhlYWRlcik7fWlmKGJILnRhYmxlUGFuZVNjcm9sbGVyKXt0aGlzLnNldE5ld1RhYmxlUGFuZVNjcm9sbGVyKGJILnRhYmxlUGFuZVNjcm9sbGVyKTt9aWYoYkgudGFibGVQYW5lTW9kZWwpe3RoaXMuc2V0TmV3VGFibGVQYW5lTW9kZWwoYkgudGFibGVQYW5lTW9kZWwpO31pZihiSC5jb2x1bW5NZW51KXt0aGlzLnNldE5ld0NvbHVtbk1lbnUoYkguY29sdW1uTWVudSk7fXRoaXMuX3NldExheW91dChuZXcgcXgudWkubGF5b3V0LlZCb3goKSk7dGhpcy5fX3ZTPW5ldyBxeC51aS5jb250YWluZXIuQ29tcG9zaXRlKG5ldyBxeC51aS5sYXlvdXQuSEJveCgpKTt0aGlzLl9hZGQodGhpcy5fX3ZTLHtmbGV4OjF9KTt0aGlzLnNldERhdGFSb3dSZW5kZXJlcihuZXcgcXgudWkudGFibGUucm93cmVuZGVyZXIuRGVmYXVsdCh0aGlzKSk7dGhpcy5fX3ZUPXRoaXMuZ2V0TmV3U2VsZWN0aW9uTWFuYWdlcigpKHRoaXMpO3RoaXMuc2V0U2VsZWN0aW9uTW9kZWwodGhpcy5nZXROZXdTZWxlY3Rpb25Nb2RlbCgpKHRoaXMpKTt0aGlzLnNldFRhYmxlTW9kZWwoYkd8fHRoaXMuZ2V0RW1wdHlUYWJsZU1vZGVsKCkpO3RoaXMuc2V0TWV0YUNvbHVtbkNvdW50cyhbLTFdKTt0aGlzLnNldFRhYkluZGV4KDEpO3RoaXMuYWRkTGlzdGVuZXIoUSx0aGlzLl9vbktleVByZXNzKTt0aGlzLmFkZExpc3RlbmVyKHQsdGhpcy5fb25Gb2N1c0NoYW5nZWQpO3RoaXMuYWRkTGlzdGVuZXIoYncsdGhpcy5fb25Gb2N1c0NoYW5nZWQpO3ZhciBiST1uZXcgcXgudWkuY29yZS5XaWRnZXQoKS5zZXQoe2hlaWdodDowfSk7dGhpcy5fYWRkKGJJKTtiSS5hZGRMaXN0ZW5lcihiZCx0aGlzLl9vblJlc2l6ZSx0aGlzKTt0aGlzLl9fdlU9bnVsbDt0aGlzLl9fdlY9bnVsbDtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoYkQsYnopKXtxeC5sb2NhbGUuTWFuYWdlci5nZXRJbnN0YW5jZSgpLmFkZExpc3RlbmVyKGJGLHRoaXMuX29uQ2hhbmdlTG9jYWxlLHRoaXMpO310aGlzLmluaXRTdGF0dXNCYXJWaXNpYmxlKCk7Ykc9dGhpcy5nZXRUYWJsZU1vZGVsKCk7aWYoYkcuaW5pdCYmdHlwZW9mIChiRy5pbml0KT09aCl7YkcuaW5pdCh0aGlzKTt9fSxldmVudHM6eyJjb2x1bW5WaXNpYmlsaXR5TWVudUNyZWF0ZVN0YXJ0IjptLCJjb2x1bW5WaXNpYmlsaXR5TWVudUNyZWF0ZUVuZCI6bSwidGFibGVXaWR0aENoYW5nZWQiOnosInZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCI6bSwiY2VsbENsaWNrIjpqLCJjZWxsRGJsY2xpY2siOmosImNlbGxDb250ZXh0bWVudSI6aiwiZGF0YUVkaXRlZCI6bX0sc3RhdGljczp7X192Vzp7Y2VsbENsaWNrOjEsY2VsbERibGNsaWNrOjEsY2VsbENvbnRleHRtZW51OjF9fSxwcm9wZXJ0aWVzOnthcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0OmJjfSxmb2N1c2FibGU6e3JlZmluZTp0cnVlLGluaXQ6dHJ1ZX0sbWluV2lkdGg6e3JlZmluZTp0cnVlLGluaXQ6NTB9LGluaXRpYWxseUhpZGRlbkNvbHVtbnM6e2luaXQ6bnVsbH0sc2VsZWN0YWJsZTp7cmVmaW5lOnRydWUsaW5pdDpmYWxzZX0sc2VsZWN0aW9uTW9kZWw6e2NoZWNrOkksYXBwbHk6TCxldmVudDpYfSx0YWJsZU1vZGVsOntjaGVjazpidSxhcHBseTpiaCxldmVudDpib30scm93SGVpZ2h0OntjaGVjazpibCxpbml0OjIwLGFwcGx5OmIsZXZlbnQ6YnJ9LGZvcmNlTGluZUhlaWdodDp7Y2hlY2s6cCxpbml0OnRydWV9LGhlYWRlckNlbGxzVmlzaWJsZTp7Y2hlY2s6cCxpbml0OnRydWUsYXBwbHk6T30saGVhZGVyQ2VsbEhlaWdodDp7Y2hlY2s6YnMsaW5pdDoxNixhcHBseTpibSxldmVudDpyLG51bGxhYmxlOnRydWV9LHN0YXR1c0JhclZpc2libGU6e2NoZWNrOnAsaW5pdDp0cnVlLGFwcGx5OmJ5fSxhZGRpdGlvbmFsU3RhdHVzQmFyVGV4dDp7bnVsbGFibGU6dHJ1ZSxpbml0Om51bGwsYXBwbHk6Vn0sY29sdW1uVmlzaWJpbGl0eUJ1dHRvblZpc2libGU6e2NoZWNrOnAsaW5pdDp0cnVlLGFwcGx5OmJpfSxtZXRhQ29sdW1uQ291bnRzOntjaGVjazpiZixhcHBseTpzfSxmb2N1c0NlbGxPbk1vdXNlTW92ZTp7Y2hlY2s6cCxpbml0OmZhbHNlLGFwcGx5Oll9LHJvd0ZvY3VzQ2hhbmdlTW9kaWZpZXNTZWxlY3Rpb246e2NoZWNrOnAsaW5pdDp0cnVlfSxzaG93Q2VsbEZvY3VzSW5kaWNhdG9yOntjaGVjazpwLGluaXQ6dHJ1ZSxhcHBseTpiZX0sa2VlcEZpcnN0VmlzaWJsZVJvd0NvbXBsZXRlOntjaGVjazpwLGluaXQ6dHJ1ZSxhcHBseTpibn0sYWx3YXlzVXBkYXRlQ2VsbHM6e2NoZWNrOnAsaW5pdDpmYWxzZX0scmVzZXRTZWxlY3Rpb25PbkhlYWRlckNsaWNrOntjaGVjazpwLGluaXQ6dHJ1ZSxhcHBseTp2fSxkYXRhUm93UmVuZGVyZXI6e2NoZWNrOkosaW5pdDpudWxsLG51bGxhYmxlOnRydWUsZXZlbnQ6cX0sbW9kYWxDZWxsRWRpdG9yUHJlT3BlbkZ1bmN0aW9uOntjaGVjazpuLGluaXQ6bnVsbCxudWxsYWJsZTp0cnVlfSxuZXdDb2x1bW5NZW51OntjaGVjazpuLGluaXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHF4LnVpLnRhYmxlLmNvbHVtbm1lbnUuQnV0dG9uKCk7fX0sbmV3U2VsZWN0aW9uTWFuYWdlcjp7Y2hlY2s6bixpbml0OmZ1bmN0aW9uKGJKKXtyZXR1cm4gbmV3IHF4LnVpLnRhYmxlLnNlbGVjdGlvbi5NYW5hZ2VyKGJKKTt9fSxuZXdTZWxlY3Rpb25Nb2RlbDp7Y2hlY2s6bixpbml0OmZ1bmN0aW9uKGJLKXtyZXR1cm4gbmV3IHF4LnVpLnRhYmxlLnNlbGVjdGlvbi5Nb2RlbChiSyk7fX0sbmV3VGFibGVDb2x1bW5Nb2RlbDp7Y2hlY2s6bixpbml0OmZ1bmN0aW9uKGJMKXtyZXR1cm4gbmV3IHF4LnVpLnRhYmxlLmNvbHVtbm1vZGVsLkJhc2ljKGJMKTt9fSxuZXdUYWJsZVBhbmU6e2NoZWNrOm4saW5pdDpmdW5jdGlvbihiTSl7cmV0dXJuIG5ldyBxeC51aS50YWJsZS5wYW5lLlBhbmUoYk0pO319LG5ld1RhYmxlUGFuZUhlYWRlcjp7Y2hlY2s6bixpbml0OmZ1bmN0aW9uKGJOKXtyZXR1cm4gbmV3IHF4LnVpLnRhYmxlLnBhbmUuSGVhZGVyKGJOKTt9fSxuZXdUYWJsZVBhbmVTY3JvbGxlcjp7Y2hlY2s6bixpbml0OmZ1bmN0aW9uKGJPKXtyZXR1cm4gbmV3IHF4LnVpLnRhYmxlLnBhbmUuU2Nyb2xsZXIoYk8pO319LG5ld1RhYmxlUGFuZU1vZGVsOntjaGVjazpuLGluaXQ6ZnVuY3Rpb24oYlApe3JldHVybiBuZXcgcXgudWkudGFibGUucGFuZS5Nb2RlbChiUCk7fX19LG1lbWJlcnM6e19fdlU6bnVsbCxfX3ZWOm51bGwsX192UzpudWxsLF9fdlQ6bnVsbCxfX3ZYOm51bGwsX192WTpudWxsLF9fd2E6bnVsbCxfX3diOm51bGwsX193YzpudWxsLF9fd2Q6bnVsbCxfY3JlYXRlQ2hpbGRDb250cm9sSW1wbDpmdW5jdGlvbihiUSxiUil7dmFyIGJTO3N3aXRjaChiUSl7Y2FzZSBrOmJTPW5ldyBxeC51aS5iYXNpYy5MYWJlbCgpO2JTLnNldCh7YWxsb3dHcm93WDp0cnVlfSk7dGhpcy5fYWRkKGJTKTticmVhaztjYXNlIG86YlM9dGhpcy5nZXROZXdDb2x1bW5NZW51KCkoKTtiUy5zZXQoe2ZvY3VzYWJsZTpmYWxzZX0pO3ZhciBiVD1iUy5mYWN0b3J5KFIse3RhYmxlOnRoaXN9KTtiVC5hZGRMaXN0ZW5lcihLLHRoaXMuX2luaXRDb2x1bW5NZW51LHRoaXMpO2JyZWFrO31yZXR1cm4gYlN8fHF4LnVpLmNvcmUuV2lkZ2V0LnByb3RvdHlwZS5fY3JlYXRlQ2hpbGRDb250cm9sSW1wbC5jYWxsKHRoaXMsYlEpO30sX2FwcGx5U2VsZWN0aW9uTW9kZWw6ZnVuY3Rpb24oYlUsYlYpe3RoaXMuX192VC5zZXRTZWxlY3Rpb25Nb2RlbChiVSk7aWYoYlYhPW51bGwpe2JWLnJlbW92ZUxpc3RlbmVyKGJFLHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlZCx0aGlzKTt9YlUuYWRkTGlzdGVuZXIoYkUsdGhpcy5fb25TZWxlY3Rpb25DaGFuZ2VkLHRoaXMpO30sX2FwcGx5Um93SGVpZ2h0OmZ1bmN0aW9uKGJXLGJYKXt2YXIgYlk9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7Zm9yKHZhciBpPTA7aTxiWS5sZW5ndGg7aSsrKXtiWVtpXS51cGRhdGVWZXJTY3JvbGxCYXJNYXhpbXVtKCk7fX0sX2FwcGx5SGVhZGVyQ2VsbHNWaXNpYmxlOmZ1bmN0aW9uKGNhLGNiKXt2YXIgY2M9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7Zm9yKHZhciBpPTA7aTxjYy5sZW5ndGg7aSsrKXtjY1tpXS5fZXhjbHVkZUNoaWxkQ29udHJvbChIKTt9fSxfYXBwbHlIZWFkZXJDZWxsSGVpZ2h0OmZ1bmN0aW9uKGNkLGNlKXt2YXIgY2Y9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7Zm9yKHZhciBpPTA7aTxjZi5sZW5ndGg7aSsrKXtjZltpXS5nZXRIZWFkZXIoKS5zZXRIZWlnaHQoY2QpO319LGdldEVtcHR5VGFibGVNb2RlbDpmdW5jdGlvbigpe2lmKCF0aGlzLl9fd2Qpe3RoaXMuX193ZD1uZXcgcXgudWkudGFibGUubW9kZWwuU2ltcGxlKCk7dGhpcy5fX3dkLnNldENvbHVtbnMoW10pO3RoaXMuX193ZC5zZXREYXRhKFtdKTt9cmV0dXJuIHRoaXMuX193ZDt9LF9hcHBseVRhYmxlTW9kZWw6ZnVuY3Rpb24oY2csY2gpe3RoaXMuZ2V0VGFibGVDb2x1bW5Nb2RlbCgpLmluaXQoY2cuZ2V0Q29sdW1uQ291bnQoKSx0aGlzKTtpZihjaCE9bnVsbCl7Y2gucmVtb3ZlTGlzdGVuZXIoYkEsdGhpcy5fb25UYWJsZU1vZGVsTWV0YURhdGFDaGFuZ2VkLHRoaXMpO2NoLnJlbW92ZUxpc3RlbmVyKGYsdGhpcy5fb25UYWJsZU1vZGVsRGF0YUNoYW5nZWQsdGhpcyk7fWNnLmFkZExpc3RlbmVyKGJBLHRoaXMuX29uVGFibGVNb2RlbE1ldGFEYXRhQ2hhbmdlZCx0aGlzKTtjZy5hZGRMaXN0ZW5lcihmLHRoaXMuX29uVGFibGVNb2RlbERhdGFDaGFuZ2VkLHRoaXMpO3RoaXMuX3VwZGF0ZVN0YXR1c0JhcigpO3RoaXMuX3VwZGF0ZVRhYmxlRGF0YSgwLGNnLmdldFJvd0NvdW50KCksMCxjZy5nZXRDb2x1bW5Db3VudCgpKTt0aGlzLl9vblRhYmxlTW9kZWxNZXRhRGF0YUNoYW5nZWQoKTtpZihjaCYmY2cuaW5pdCYmdHlwZW9mIChjZy5pbml0KT09aCl7Y2cuaW5pdCh0aGlzKTt9fSxnZXRUYWJsZUNvbHVtbk1vZGVsOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX193Yyl7dmFyIGNrPXRoaXMuX193Yz10aGlzLmdldE5ld1RhYmxlQ29sdW1uTW9kZWwoKSh0aGlzKTtjay5hZGRMaXN0ZW5lcihidix0aGlzLl9vbkNvbFZpc2liaWxpdHlDaGFuZ2VkLHRoaXMpO2NrLmFkZExpc3RlbmVyKEIsdGhpcy5fb25Db2xXaWR0aENoYW5nZWQsdGhpcyk7Y2suYWRkTGlzdGVuZXIoYnQsdGhpcy5fb25Db2xPcmRlckNoYW5nZWQsdGhpcyk7dmFyIGNqPXRoaXMuZ2V0VGFibGVNb2RlbCgpO2NrLmluaXQoY2ouZ2V0Q29sdW1uQ291bnQoKSx0aGlzKTt2YXIgY2k9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7Zm9yKHZhciBpPTA7aTxjaS5sZW5ndGg7aSsrKXt2YXIgY2w9Y2lbaV07dmFyIGNtPWNsLmdldFRhYmxlUGFuZU1vZGVsKCk7Y20uc2V0VGFibGVDb2x1bW5Nb2RlbChjayk7fX1yZXR1cm4gdGhpcy5fX3djO30sX2FwcGx5U3RhdHVzQmFyVmlzaWJsZTpmdW5jdGlvbihjbixjbyl7aWYoY24pe3RoaXMuX3Nob3dDaGlsZENvbnRyb2woayk7fWVsc2V7dGhpcy5fZXhjbHVkZUNoaWxkQ29udHJvbChrKTt9aWYoY24pe3RoaXMuX3VwZGF0ZVN0YXR1c0JhcigpO319LF9hcHBseUFkZGl0aW9uYWxTdGF0dXNCYXJUZXh0OmZ1bmN0aW9uKGNwLGNxKXt0aGlzLl9fdlg9Y3A7dGhpcy5fdXBkYXRlU3RhdHVzQmFyKCk7fSxfYXBwbHlDb2x1bW5WaXNpYmlsaXR5QnV0dG9uVmlzaWJsZTpmdW5jdGlvbihjcixjcyl7aWYoY3Ipe3RoaXMuX3Nob3dDaGlsZENvbnRyb2wobyk7fWVsc2V7dGhpcy5fZXhjbHVkZUNoaWxkQ29udHJvbChvKTt9fSxfYXBwbHlNZXRhQ29sdW1uQ291bnRzOmZ1bmN0aW9uKGN0LGN1KXt2YXIgY0I9Y3Q7dmFyIGN2PXRoaXMuX2dldFBhbmVTY3JvbGxlckFycigpO3ZhciBjej17fTtpZihjdD5jdSl7dmFyIGNEPXF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5nZXRNYW5hZ2VyKGN2WzBdKTtmb3IodmFyIGNFIGluIHF4LnVpLnRhYmxlLlRhYmxlLl9fdlcpe2N6W2NFXT17fTtjeltjRV0uY2FwdHVyZT1jRC5nZXRMaXN0ZW5lcnMoY3ZbMF0sY0UsdHJ1ZSk7Y3pbY0VdLmJ1YmJsZT1jRC5nZXRMaXN0ZW5lcnMoY3ZbMF0sY0UsZmFsc2UpO319dGhpcy5fY2xlYW5VcE1ldGFDb2x1bW5zKGNCLmxlbmd0aCk7dmFyIGNBPTA7Zm9yKHZhciBpPTA7aTxjdi5sZW5ndGg7aSsrKXt2YXIgY0Y9Y3ZbaV07dmFyIGNDPWNGLmdldFRhYmxlUGFuZU1vZGVsKCk7Y0Muc2V0Rmlyc3RDb2x1bW5YKGNBKTtjQy5zZXRNYXhDb2x1bW5Db3VudChjQltpXSk7Y0ErPWNCW2ldO31pZihjQi5sZW5ndGg+Y3YubGVuZ3RoKXt2YXIgY3k9dGhpcy5nZXRUYWJsZUNvbHVtbk1vZGVsKCk7Zm9yKHZhciBpPWN2Lmxlbmd0aDtpPGNCLmxlbmd0aDtpKyspe3ZhciBjQz10aGlzLmdldE5ld1RhYmxlUGFuZU1vZGVsKCkoY3kpO2NDLnNldEZpcnN0Q29sdW1uWChjQSk7Y0Muc2V0TWF4Q29sdW1uQ291bnQoY0JbaV0pO2NBKz1jQltpXTt2YXIgY0Y9dGhpcy5nZXROZXdUYWJsZVBhbmVTY3JvbGxlcigpKHRoaXMpO2NGLnNldFRhYmxlUGFuZU1vZGVsKGNDKTtjRi5hZGRMaXN0ZW5lcihiYSx0aGlzLl9vblNjcm9sbFksdGhpcyk7Zm9yKGNFIGluIHF4LnVpLnRhYmxlLlRhYmxlLl9fdlcpe2lmKCFjeltjRV0pe2JyZWFrO31pZihjeltjRV0uY2FwdHVyZSYmY3pbY0VdLmNhcHR1cmUubGVuZ3RoPjApe3ZhciBjdz1jeltjRV0uY2FwdHVyZTtmb3IodmFyIGk9MDtpPGN3Lmxlbmd0aDtpKyspe3ZhciBjeD1jd1tpXS5jb250ZXh0O2lmKCFjeCl7Y3g9dGhpczt9ZWxzZSBpZihjeD09Y3ZbMF0pe2N4PWNGO31jRi5hZGRMaXN0ZW5lcihjRSxjd1tpXS5oYW5kbGVyLGN4LHRydWUpO319aWYoY3pbY0VdLmJ1YmJsZSYmY3pbY0VdLmJ1YmJsZS5sZW5ndGg+MCl7dmFyIGNIPWN6W2NFXS5idWJibGU7Zm9yKHZhciBpPTA7aTxjSC5sZW5ndGg7aSsrKXt2YXIgY3g9Y0hbaV0uY29udGV4dDtpZighY3gpe2N4PXRoaXM7fWVsc2UgaWYoY3g9PWN2WzBdKXtjeD1jRjt9Y0YuYWRkTGlzdGVuZXIoY0UsY0hbaV0uaGFuZGxlcixjeCxmYWxzZSk7fX19dmFyIGNHPShpPT1jQi5sZW5ndGgtMSk/MTowO3RoaXMuX192Uy5hZGQoY0Yse2ZsZXg6Y0d9KTtjdj10aGlzLl9nZXRQYW5lU2Nyb2xsZXJBcnIoKTt9fWZvcih2YXIgaT0wO2k8Y3YubGVuZ3RoO2krKyl7dmFyIGNGPWN2W2ldO3ZhciBjST0oaT09KGN2Lmxlbmd0aC0xKSk7Y0YuZ2V0SGVhZGVyKCkuc2V0SGVpZ2h0KHRoaXMuZ2V0SGVhZGVyQ2VsbEhlaWdodCgpKTtjRi5zZXRUb3BSaWdodFdpZGdldChjST90aGlzLmdldENoaWxkQ29udHJvbChvKTpudWxsKTt9aWYoIXRoaXMuaXNDb2x1bW5WaXNpYmlsaXR5QnV0dG9uVmlzaWJsZSgpKXt0aGlzLl9leGNsdWRlQ2hpbGRDb250cm9sKG8pO310aGlzLl91cGRhdGVTY3JvbGxlcldpZHRocygpO3RoaXMuX3VwZGF0ZVNjcm9sbEJhclZpc2liaWxpdHkoKTt9LF9hcHBseUZvY3VzQ2VsbE9uTW91c2VNb3ZlOmZ1bmN0aW9uKGNKLGNLKXt2YXIgY0w9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7Zm9yKHZhciBpPTA7aTxjTC5sZW5ndGg7aSsrKXtjTFtpXS5zZXRGb2N1c0NlbGxPbk1vdXNlTW92ZShjSik7fX0sX2FwcGx5U2hvd0NlbGxGb2N1c0luZGljYXRvcjpmdW5jdGlvbihjTSxjTil7dmFyIGNPPXRoaXMuX2dldFBhbmVTY3JvbGxlckFycigpO2Zvcih2YXIgaT0wO2k8Y08ubGVuZ3RoO2krKyl7Y09baV0uc2V0U2hvd0NlbGxGb2N1c0luZGljYXRvcihjTSk7fX0sX2FwcGx5S2VlcEZpcnN0VmlzaWJsZVJvd0NvbXBsZXRlOmZ1bmN0aW9uKGNQLGNRKXt2YXIgY1I9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7Zm9yKHZhciBpPTA7aTxjUi5sZW5ndGg7aSsrKXtjUltpXS5vbktlZXBGaXJzdFZpc2libGVSb3dDb21wbGV0ZUNoYW5nZWQoKTt9fSxfYXBwbHlSZXNldFNlbGVjdGlvbk9uSGVhZGVyQ2xpY2s6ZnVuY3Rpb24oY1MsY1Qpe3ZhciBjVT10aGlzLl9nZXRQYW5lU2Nyb2xsZXJBcnIoKTtmb3IodmFyIGk9MDtpPGNVLmxlbmd0aDtpKyspe2NVW2ldLnNldFJlc2V0U2VsZWN0aW9uT25IZWFkZXJDbGljayhjUyk7fX0sZ2V0U2VsZWN0aW9uTWFuYWdlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdlQ7fSxfZ2V0UGFuZVNjcm9sbGVyQXJyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX192Uy5nZXRDaGlsZHJlbigpO30sZ2V0UGFuZVNjcm9sbGVyOmZ1bmN0aW9uKGNWKXtyZXR1cm4gdGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKClbY1ZdO30sX2NsZWFuVXBNZXRhQ29sdW1uczpmdW5jdGlvbihjVyl7dmFyIGNYPXRoaXMuX2dldFBhbmVTY3JvbGxlckFycigpO2lmKGNYIT1udWxsKXtmb3IodmFyIGk9Y1gubGVuZ3RoLTE7aT49Y1c7aS0tKXtjWFtpXS5kZXN0cm95KCk7fX19LF9vbkNoYW5nZUxvY2FsZTpmdW5jdGlvbihjWSl7dGhpcy51cGRhdGVDb250ZW50KCk7dGhpcy5fdXBkYXRlU3RhdHVzQmFyKCk7fSxfb25TZWxlY3Rpb25DaGFuZ2VkOmZ1bmN0aW9uKGRhKXt2YXIgZGI9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7Zm9yKHZhciBpPTA7aTxkYi5sZW5ndGg7aSsrKXtkYltpXS5vblNlbGVjdGlvbkNoYW5nZWQoKTt9dGhpcy5fdXBkYXRlU3RhdHVzQmFyKCk7fSxfb25UYWJsZU1vZGVsTWV0YURhdGFDaGFuZ2VkOmZ1bmN0aW9uKGRjKXt2YXIgZGQ9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7Zm9yKHZhciBpPTA7aTxkZC5sZW5ndGg7aSsrKXtkZFtpXS5vblRhYmxlTW9kZWxNZXRhRGF0YUNoYW5nZWQoKTt9dGhpcy5fdXBkYXRlU3RhdHVzQmFyKCk7fSxfb25UYWJsZU1vZGVsRGF0YUNoYW5nZWQ6ZnVuY3Rpb24oZGUpe3ZhciBkZj1kZS5nZXREYXRhKCk7dGhpcy5fdXBkYXRlVGFibGVEYXRhKGRmLmZpcnN0Um93LGRmLmxhc3RSb3csZGYuZmlyc3RDb2x1bW4sZGYubGFzdENvbHVtbixkZi5yZW1vdmVTdGFydCxkZi5yZW1vdmVDb3VudCk7fSxfdXBkYXRlVGFibGVEYXRhOmZ1bmN0aW9uKGRnLGRoLGRpLGRqLGRrLGRsKXt2YXIgZG09dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7aWYoZGwpe3RoaXMuZ2V0U2VsZWN0aW9uTW9kZWwoKS5yZW1vdmVTZWxlY3Rpb25JbnRlcnZhbChkayxkaytkbCk7aWYodGhpcy5fX3ZWPj1kayYmdGhpcy5fX3ZWPChkaytkbCkpe3RoaXMuc2V0Rm9jdXNlZENlbGwoKTt9fWZvcih2YXIgaT0wO2k8ZG0ubGVuZ3RoO2krKyl7ZG1baV0ub25UYWJsZU1vZGVsRGF0YUNoYW5nZWQoZGcsZGgsZGksZGopO312YXIgZG49dGhpcy5nZXRUYWJsZU1vZGVsKCkuZ2V0Um93Q291bnQoKTtpZihkbiE9dGhpcy5fX3ZZKXt0aGlzLl9fdlk9ZG47dGhpcy5fdXBkYXRlU2Nyb2xsQmFyVmlzaWJpbGl0eSgpO3RoaXMuX3VwZGF0ZVN0YXR1c0JhcigpO319LF9vblNjcm9sbFk6ZnVuY3Rpb24oZHApe2lmKCF0aGlzLl9fd2Epe3RoaXMuX193YT10cnVlO3ZhciBkcT10aGlzLl9nZXRQYW5lU2Nyb2xsZXJBcnIoKTtmb3IodmFyIGk9MDtpPGRxLmxlbmd0aDtpKyspe2RxW2ldLnNldFNjcm9sbFkoZHAuZ2V0RGF0YSgpKTt9dGhpcy5fX3dhPWZhbHNlO319LF9vbktleVByZXNzOmZ1bmN0aW9uKGRyKXtpZighdGhpcy5nZXRFbmFibGVkKCkpe3JldHVybjt9dmFyIGR5PXRoaXMuX192Vjt2YXIgZHY9dHJ1ZTt2YXIgZHo9ZHIuZ2V0S2V5SWRlbnRpZmllcigpO2lmKHRoaXMuaXNFZGl0aW5nKCkpe2lmKGRyLmdldE1vZGlmaWVycygpPT0wKXtzd2l0Y2goZHope2Nhc2UgYkI6dGhpcy5zdG9wRWRpdGluZygpO3ZhciBkeT10aGlzLl9fdlY7dGhpcy5tb3ZlRm9jdXNlZENlbGwoMCwxKTtpZih0aGlzLl9fdlYhPWR5KXtkdj10aGlzLnN0YXJ0RWRpdGluZygpO31icmVhaztjYXNlIEY6dGhpcy5jYW5jZWxFZGl0aW5nKCk7dGhpcy5mb2N1cygpO2JyZWFrO2RlZmF1bHQ6ZHY9ZmFsc2U7YnJlYWs7fX19ZWxzZXtpZihkci5pc0N0cmxQcmVzc2VkKCkpe2R2PXRydWU7c3dpdGNoKGR6KXtjYXNlIEc6dmFyIGR3PXRoaXMuZ2V0VGFibGVNb2RlbCgpLmdldFJvd0NvdW50KCk7aWYoZHc+MCl7dGhpcy5nZXRTZWxlY3Rpb25Nb2RlbCgpLnNldFNlbGVjdGlvbkludGVydmFsKDAsZHctMSk7fWJyZWFrO2RlZmF1bHQ6ZHY9ZmFsc2U7YnJlYWs7fX1lbHNle3N3aXRjaChkeil7Y2FzZSBTOnRoaXMuX192VC5oYW5kbGVTZWxlY3RLZXlEb3duKHRoaXMuX192Vixkcik7YnJlYWs7Y2FzZSBkOmNhc2UgYkI6dGhpcy5zdGFydEVkaXRpbmcoKTtkdj10cnVlO2JyZWFrO2Nhc2UgVTp0aGlzLnNldEZvY3VzZWRDZWxsKHRoaXMuX192VSwwLHRydWUpO2JyZWFrO2Nhc2UgYTp2YXIgZHc9dGhpcy5nZXRUYWJsZU1vZGVsKCkuZ2V0Um93Q291bnQoKTt0aGlzLnNldEZvY3VzZWRDZWxsKHRoaXMuX192VSxkdy0xLHRydWUpO2JyZWFrO2Nhc2UgVDp0aGlzLm1vdmVGb2N1c2VkQ2VsbCgtMSwwKTticmVhaztjYXNlIGM6dGhpcy5tb3ZlRm9jdXNlZENlbGwoMSwwKTticmVhaztjYXNlIEQ6dGhpcy5tb3ZlRm9jdXNlZENlbGwoMCwtMSk7YnJlYWs7Y2FzZSBiYjp0aGlzLm1vdmVGb2N1c2VkQ2VsbCgwLDEpO2JyZWFrO2Nhc2UgZzpjYXNlIGJxOnZhciBkdT10aGlzLmdldFBhbmVTY3JvbGxlcigwKTt2YXIgZHg9ZHUuZ2V0VGFibGVQYW5lKCk7dmFyIGR0PXRoaXMuZ2V0Um93SGVpZ2h0KCk7dmFyIGRzPShkej09Zyk/LTE6MTtkdz1keC5nZXRWaXNpYmxlUm93Q291bnQoKS0xO2R1LnNldFNjcm9sbFkoZHUuZ2V0U2Nyb2xsWSgpK2RzKmR3KmR0KTt0aGlzLm1vdmVGb2N1c2VkQ2VsbCgwLGRzKmR3KTticmVhaztkZWZhdWx0OmR2PWZhbHNlO319fWlmKGR5IT10aGlzLl9fdlYmJnRoaXMuZ2V0Um93Rm9jdXNDaGFuZ2VNb2RpZmllc1NlbGVjdGlvbigpKXt0aGlzLl9fdlQuaGFuZGxlTW92ZUtleURvd24odGhpcy5fX3ZWLGRyKTt9aWYoZHYpe2RyLnByZXZlbnREZWZhdWx0KCk7ZHIuc3RvcFByb3BhZ2F0aW9uKCk7fX0sX29uRm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKGRBKXt2YXIgZEI9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7Zm9yKHZhciBpPTA7aTxkQi5sZW5ndGg7aSsrKXtkQltpXS5vbkZvY3VzQ2hhbmdlZCgpO319LF9vbkNvbFZpc2liaWxpdHlDaGFuZ2VkOmZ1bmN0aW9uKGRDKXt2YXIgZEQ9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7Zm9yKHZhciBpPTA7aTxkRC5sZW5ndGg7aSsrKXtkRFtpXS5vbkNvbFZpc2liaWxpdHlDaGFuZ2VkKCk7fXZhciBkRT1kQy5nZXREYXRhKCk7aWYodGhpcy5fX3diIT1udWxsJiZkRS5jb2whPW51bGwmJmRFLnZpc2libGUhPW51bGwpe3RoaXMuX193YltkRS5jb2xdLnNldFZpc2libGUoZEUudmlzaWJsZSk7fXRoaXMuX3VwZGF0ZVNjcm9sbGVyV2lkdGhzKCk7dGhpcy5fdXBkYXRlU2Nyb2xsQmFyVmlzaWJpbGl0eSgpO30sX29uQ29sV2lkdGhDaGFuZ2VkOmZ1bmN0aW9uKGRGKXt2YXIgZEc9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7Zm9yKHZhciBpPTA7aTxkRy5sZW5ndGg7aSsrKXt2YXIgZEg9ZEYuZ2V0RGF0YSgpO2RHW2ldLnNldENvbHVtbldpZHRoKGRILmNvbCxkSC5uZXdXaWR0aCk7fXRoaXMuX3VwZGF0ZVNjcm9sbGVyV2lkdGhzKCk7dGhpcy5fdXBkYXRlU2Nyb2xsQmFyVmlzaWJpbGl0eSgpO30sX29uQ29sT3JkZXJDaGFuZ2VkOmZ1bmN0aW9uKGRJKXt2YXIgZEo9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7Zm9yKHZhciBpPTA7aTxkSi5sZW5ndGg7aSsrKXtkSltpXS5vbkNvbE9yZGVyQ2hhbmdlZCgpO310aGlzLl91cGRhdGVTY3JvbGxlcldpZHRocygpO3RoaXMuX3VwZGF0ZVNjcm9sbEJhclZpc2liaWxpdHkoKTt9LGdldFRhYmxlUGFuZVNjcm9sbGVyQXRQYWdlWDpmdW5jdGlvbihkSyl7dmFyIGRMPXRoaXMuX2dldE1ldGFDb2x1bW5BdFBhZ2VYKGRLKTtyZXR1cm4gKGRMIT0tMSk/dGhpcy5nZXRQYW5lU2Nyb2xsZXIoZEwpOm51bGw7fSxzZXRGb2N1c2VkQ2VsbDpmdW5jdGlvbihkTSxkTixkTyl7aWYoIXRoaXMuaXNFZGl0aW5nKCkmJihkTSE9dGhpcy5fX3ZVfHxkTiE9dGhpcy5fX3ZWKSl7aWYoZE09PT1udWxsKXtkTT0wO310aGlzLl9fdlU9ZE07dGhpcy5fX3ZWPWROO3ZhciBkUD10aGlzLl9nZXRQYW5lU2Nyb2xsZXJBcnIoKTtmb3IodmFyIGk9MDtpPGRQLmxlbmd0aDtpKyspe2RQW2ldLnNldEZvY3VzZWRDZWxsKGRNLGROKTt9aWYoZE0hPT1udWxsJiZkTyl7dGhpcy5zY3JvbGxDZWxsVmlzaWJsZShkTSxkTik7fX19LHJlc2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5nZXRTZWxlY3Rpb25Nb2RlbCgpLnJlc2V0U2VsZWN0aW9uKCk7fSxyZXNldENlbGxGb2N1czpmdW5jdGlvbigpe3RoaXMuc2V0Rm9jdXNlZENlbGwobnVsbCxudWxsLGZhbHNlKTt9LGdldEZvY3VzZWRDb2x1bW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3ZVO30sZ2V0Rm9jdXNlZFJvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdlY7fSxoaWdobGlnaHRGb2N1c2VkUm93OmZ1bmN0aW9uKGRRKXt0aGlzLmdldERhdGFSb3dSZW5kZXJlcigpLnNldEhpZ2hsaWdodEZvY3VzUm93KGRRKTt9LGNsZWFyRm9jdXNlZFJvd0hpZ2hsaWdodDpmdW5jdGlvbihkUil7aWYoZFIpe3ZhciBkVD1kUi5nZXRSZWxhdGVkVGFyZ2V0KCk7aWYoZFQgaW5zdGFuY2VvZiBxeC51aS50YWJsZS5wYW5lLlBhbmV8fGRUIGluc3RhbmNlb2YgcXgudWkudGFibGUucGFuZS5Gb2N1c0luZGljYXRvcil7cmV0dXJuO319dGhpcy5yZXNldENlbGxGb2N1cygpO3ZhciBkUz10aGlzLl9nZXRQYW5lU2Nyb2xsZXJBcnIoKTtmb3IodmFyIGk9MDtpPGRTLmxlbmd0aDtpKyspe2RTW2ldLm9uRm9jdXNDaGFuZ2VkKCk7fX0sbW92ZUZvY3VzZWRDZWxsOmZ1bmN0aW9uKGRVLGRWKXt2YXIgZWE9dGhpcy5fX3ZVO3ZhciBlYj10aGlzLl9fdlY7aWYoZWE9PT1udWxsfHxlYj09PW51bGwpe3JldHVybjt9aWYoZFUhPTApe3ZhciBkWT10aGlzLmdldFRhYmxlQ29sdW1uTW9kZWwoKTt2YXIgeD1kWS5nZXRWaXNpYmxlWChlYSk7dmFyIGRYPWRZLmdldFZpc2libGVDb2x1bW5Db3VudCgpO3g9cXgubGFuZy5OdW1iZXIubGltaXQoeCtkVSwwLGRYLTEpO2VhPWRZLmdldFZpc2libGVDb2x1bW5BdFgoeCk7fWlmKGRWIT0wKXt2YXIgZFc9dGhpcy5nZXRUYWJsZU1vZGVsKCk7ZWI9cXgubGFuZy5OdW1iZXIubGltaXQoZWIrZFYsMCxkVy5nZXRSb3dDb3VudCgpLTEpO310aGlzLnNldEZvY3VzZWRDZWxsKGVhLGViLHRydWUpO30sc2Nyb2xsQ2VsbFZpc2libGU6ZnVuY3Rpb24oZWMsZWQpe3ZhciBlZT10aGlzLmdldFRhYmxlQ29sdW1uTW9kZWwoKTt2YXIgeD1lZS5nZXRWaXNpYmxlWChlYyk7dmFyIGVmPXRoaXMuX2dldE1ldGFDb2x1bW5BdENvbHVtblgoeCk7aWYoZWYhPS0xKXt0aGlzLmdldFBhbmVTY3JvbGxlcihlZikuc2Nyb2xsQ2VsbFZpc2libGUoZWMsZWQpO319LGlzRWRpdGluZzpmdW5jdGlvbigpe2lmKHRoaXMuX192VSE9bnVsbCl7dmFyIHg9dGhpcy5nZXRUYWJsZUNvbHVtbk1vZGVsKCkuZ2V0VmlzaWJsZVgodGhpcy5fX3ZVKTt2YXIgZWc9dGhpcy5fZ2V0TWV0YUNvbHVtbkF0Q29sdW1uWCh4KTtyZXR1cm4gdGhpcy5nZXRQYW5lU2Nyb2xsZXIoZWcpLmlzRWRpdGluZygpO31yZXR1cm4gZmFsc2U7fSxzdGFydEVkaXRpbmc6ZnVuY3Rpb24oKXtpZih0aGlzLl9fdlUhPW51bGwpe3ZhciB4PXRoaXMuZ2V0VGFibGVDb2x1bW5Nb2RlbCgpLmdldFZpc2libGVYKHRoaXMuX192VSk7dmFyIGVpPXRoaXMuX2dldE1ldGFDb2x1bW5BdENvbHVtblgoeCk7dmFyIGVoPXRoaXMuZ2V0UGFuZVNjcm9sbGVyKGVpKS5zdGFydEVkaXRpbmcoKTtyZXR1cm4gZWg7fXJldHVybiBmYWxzZTt9LHN0b3BFZGl0aW5nOmZ1bmN0aW9uKCl7aWYodGhpcy5fX3ZVIT1udWxsKXt2YXIgeD10aGlzLmdldFRhYmxlQ29sdW1uTW9kZWwoKS5nZXRWaXNpYmxlWCh0aGlzLl9fdlUpO3ZhciBlaj10aGlzLl9nZXRNZXRhQ29sdW1uQXRDb2x1bW5YKHgpO3RoaXMuZ2V0UGFuZVNjcm9sbGVyKGVqKS5zdG9wRWRpdGluZygpO319LGNhbmNlbEVkaXRpbmc6ZnVuY3Rpb24oKXtpZih0aGlzLl9fdlUhPW51bGwpe3ZhciB4PXRoaXMuZ2V0VGFibGVDb2x1bW5Nb2RlbCgpLmdldFZpc2libGVYKHRoaXMuX192VSk7dmFyIGVrPXRoaXMuX2dldE1ldGFDb2x1bW5BdENvbHVtblgoeCk7dGhpcy5nZXRQYW5lU2Nyb2xsZXIoZWspLmNhbmNlbEVkaXRpbmcoKTt9fSx1cGRhdGVDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGVsPXRoaXMuX2dldFBhbmVTY3JvbGxlckFycigpO2Zvcih2YXIgaT0wO2k8ZWwubGVuZ3RoO2krKyl7ZWxbaV0uZ2V0VGFibGVQYW5lKCkudXBkYXRlQ29udGVudCh0cnVlKTt9fSxibG9ja0hlYWRlckVsZW1lbnRzOmZ1bmN0aW9uKCl7dmFyIGVtPXRoaXMuX2dldFBhbmVTY3JvbGxlckFycigpO2Zvcih2YXIgaT0wO2k8ZW0ubGVuZ3RoO2krKyl7ZW1baV0uZ2V0SGVhZGVyKCkuZ2V0QmxvY2tlcigpLmJsb2NrQ29udGVudCgyMCk7fXRoaXMuZ2V0Q2hpbGRDb250cm9sKG8pLmdldEJsb2NrZXIoKS5ibG9ja0NvbnRlbnQoMjApO30sdW5ibG9ja0hlYWRlckVsZW1lbnRzOmZ1bmN0aW9uKCl7dmFyIGVuPXRoaXMuX2dldFBhbmVTY3JvbGxlckFycigpO2Zvcih2YXIgaT0wO2k8ZW4ubGVuZ3RoO2krKyl7ZW5baV0uZ2V0SGVhZGVyKCkuZ2V0QmxvY2tlcigpLnVuYmxvY2tDb250ZW50KCk7fXRoaXMuZ2V0Q2hpbGRDb250cm9sKG8pLmdldEJsb2NrZXIoKS51bmJsb2NrQ29udGVudCgpO30sX2dldE1ldGFDb2x1bW5BdFBhZ2VYOmZ1bmN0aW9uKGVvKXt2YXIgZXA9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7Zm9yKHZhciBpPTA7aTxlcC5sZW5ndGg7aSsrKXt2YXIgZXE9ZXBbaV0uZ2V0Q29udGFpbmVyTG9jYXRpb24oKTtpZihlbz49ZXEubGVmdCYmZW88PWVxLnJpZ2h0KXtyZXR1cm4gaTt9fXJldHVybiAtMTt9LF9nZXRNZXRhQ29sdW1uQXRDb2x1bW5YOmZ1bmN0aW9uKGVyKXt2YXIgZXQ9dGhpcy5nZXRNZXRhQ29sdW1uQ291bnRzKCk7dmFyIGV1PTA7Zm9yKHZhciBpPTA7aTxldC5sZW5ndGg7aSsrKXt2YXIgZXM9ZXRbaV07ZXUrPWVzO2lmKGVzPT0tMXx8ZXI8ZXUpe3JldHVybiBpO319cmV0dXJuIC0xO30sX3VwZGF0ZVN0YXR1c0JhcjpmdW5jdGlvbigpe3ZhciBldj10aGlzLmdldFRhYmxlTW9kZWwoKTtpZih0aGlzLmdldFN0YXR1c0JhclZpc2libGUoKSl7dmFyIGV3PXRoaXMuZ2V0U2VsZWN0aW9uTW9kZWwoKS5nZXRTZWxlY3RlZENvdW50KCk7dmFyIGV5PWV2LmdldFJvd0NvdW50KCk7dmFyIGV4O2lmKGV5Pj0wKXtpZihldz09MCl7ZXg9dGhpcy50cm4oVyxFLGV5LGV5KTt9ZWxzZXtleD10aGlzLnRybihDLGJwLGV5LGV3LGV5KTt9fWlmKHRoaXMuX192WCl7aWYoZXgpe2V4Kz10aGlzLl9fdlg7fWVsc2V7ZXg9dGhpcy5fX3ZYO319aWYoZXgpe3RoaXMuZ2V0Q2hpbGRDb250cm9sKGspLnNldFZhbHVlKGV4KTt9fX0sX3VwZGF0ZVNjcm9sbGVyV2lkdGhzOmZ1bmN0aW9uKCl7dmFyIGV6PXRoaXMuX2dldFBhbmVTY3JvbGxlckFycigpO2Zvcih2YXIgaT0wO2k8ZXoubGVuZ3RoO2krKyl7dmFyIGVCPShpPT0oZXoubGVuZ3RoLTEpKTt2YXIgZUM9ZXpbaV0uZ2V0VGFibGVQYW5lTW9kZWwoKS5nZXRUb3RhbFdpZHRoKCk7ZXpbaV0uc2V0UGFuZVdpZHRoKGVDKTt2YXIgZUE9ZUI/MTowO2V6W2ldLnNldExheW91dFByb3BlcnRpZXMoe2ZsZXg6ZUF9KTt9fSxfdXBkYXRlU2Nyb2xsQmFyVmlzaWJpbGl0eTpmdW5jdGlvbigpe2lmKCF0aGlzLmdldEJvdW5kcygpKXtyZXR1cm47fXZhciBlRz1xeC51aS50YWJsZS5wYW5lLlNjcm9sbGVyLkhPUklaT05UQUxfU0NST0xMQkFSO3ZhciBlSj1xeC51aS50YWJsZS5wYW5lLlNjcm9sbGVyLlZFUlRJQ0FMX1NDUk9MTEJBUjt2YXIgZUQ9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7dmFyIGVGPWZhbHNlO3ZhciBlST1mYWxzZTtmb3IodmFyIGk9MDtpPGVELmxlbmd0aDtpKyspe3ZhciBlSz0oaT09KGVELmxlbmd0aC0xKSk7dmFyIGVFPWVEW2ldLmdldE5lZWRlZFNjcm9sbEJhcnMoZUYsIWVLKTtpZihlRSZlRyl7ZUY9dHJ1ZTt9aWYoZUsmJihlRSZlSikpe2VJPXRydWU7fX1mb3IodmFyIGk9MDtpPGVELmxlbmd0aDtpKyspe3ZhciBlSz0oaT09KGVELmxlbmd0aC0xKSk7dmFyIGVIO2VEW2ldLnNldEhvcml6b250YWxTY3JvbGxCYXJWaXNpYmxlKGVGKTtpZihlSyl7ZUg9ZURbaV0uZ2V0VmVydGljYWxTY3JvbGxCYXJWaXNpYmxlKCk7fWVEW2ldLnNldFZlcnRpY2FsU2Nyb2xsQmFyVmlzaWJsZShlSyYmZUkpO2lmKGVLJiZlSSE9ZUgpe3RoaXMuZmlyZURhdGFFdmVudChiayxlSSk7fX19LF9pbml0Q29sdW1uTWVudTpmdW5jdGlvbigpe3ZhciBlTj10aGlzLmdldFRhYmxlTW9kZWwoKTt2YXIgZU89dGhpcy5nZXRUYWJsZUNvbHVtbk1vZGVsKCk7dmFyIGVQPXRoaXMuZ2V0Q2hpbGRDb250cm9sKG8pO2VQLmVtcHR5KCk7dmFyIGVNPWVQLmdldE1lbnUoKTt2YXIgZVE9e3RhYmxlOnRoaXMsbWVudTplTSxjb2x1bW5CdXR0b246ZVB9O3RoaXMuZmlyZURhdGFFdmVudChieCxlUSk7dGhpcy5fX3diPXt9O2Zvcih2YXIgZVI9MCxsPWVOLmdldENvbHVtbkNvdW50KCk7ZVI8bDtlUisrKXt2YXIgZUw9ZVAuZmFjdG9yeShQLHt0ZXh0OmVOLmdldENvbHVtbk5hbWUoZVIpLGNvbHVtbjplUixiVmlzaWJsZTplTy5pc0NvbHVtblZpc2libGUoZVIpfSk7cXguY29yZS5Bc3NlcnQuYXNzZXJ0SW50ZXJmYWNlKGVMLHF4LnVpLnRhYmxlLklDb2x1bW5NZW51SXRlbSk7ZUwuYWRkTGlzdGVuZXIodSx0aGlzLl9jcmVhdGVDb2x1bW5WaXNpYmlsaXR5Q2hlY2tCb3hIYW5kbGVyKGVSKSx0aGlzKTt0aGlzLl9fd2JbZVJdPWVMO31lUT17dGFibGU6dGhpcyxtZW51OmVNLGNvbHVtbkJ1dHRvbjplUH07dGhpcy5maXJlRGF0YUV2ZW50KHksZVEpO30sX2NyZWF0ZUNvbHVtblZpc2liaWxpdHlDaGVja0JveEhhbmRsZXI6ZnVuY3Rpb24oZVMpe3JldHVybiBmdW5jdGlvbihlVCl7dmFyIGVVPXRoaXMuZ2V0VGFibGVDb2x1bW5Nb2RlbCgpO2VVLnNldENvbHVtblZpc2libGUoZVMsZVQuZ2V0RGF0YSgpKTt9O30sc2V0Q29sdW1uV2lkdGg6ZnVuY3Rpb24oZVYsZVcpe3RoaXMuZ2V0VGFibGVDb2x1bW5Nb2RlbCgpLnNldENvbHVtbldpZHRoKGVWLGVXKTt9LF9vblJlc2l6ZTpmdW5jdGlvbigpe3RoaXMuZmlyZUV2ZW50KEEpO3RoaXMuX3VwZGF0ZVNjcm9sbGVyV2lkdGhzKCk7dGhpcy5fdXBkYXRlU2Nyb2xsQmFyVmlzaWJpbGl0eSgpO30sYWRkTGlzdGVuZXI6ZnVuY3Rpb24oZVgsZVksc2VsZixmYSl7aWYodGhpcy5zZWxmKGFyZ3VtZW50cykuX192V1tlWF0pe3ZhciBmYz1bZVhdO2Zvcih2YXIgaT0wLGZiPXRoaXMuX2dldFBhbmVTY3JvbGxlckFycigpO2k8ZmIubGVuZ3RoO2krKyl7ZmMucHVzaChmYltpXS5hZGRMaXN0ZW5lci5hcHBseShmYltpXSxhcmd1bWVudHMpKTt9cmV0dXJuIGZjLmpvaW4oZSk7fWVsc2V7cmV0dXJuIHF4LnVpLmNvcmUuV2lkZ2V0LnByb3RvdHlwZS5hZGRMaXN0ZW5lci5jYWxsKHRoaXMsZVgsZVksc2VsZixmYSk7fX0scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oZmQsZmUsc2VsZixmZil7aWYodGhpcy5zZWxmKGFyZ3VtZW50cykuX192V1tmZF0pe2Zvcih2YXIgaT0wLGZnPXRoaXMuX2dldFBhbmVTY3JvbGxlckFycigpO2k8ZmcubGVuZ3RoO2krKyl7ZmdbaV0ucmVtb3ZlTGlzdGVuZXIuYXBwbHkoZmdbaV0sYXJndW1lbnRzKTt9fWVsc2V7cXgudWkuY29yZS5XaWRnZXQucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxmZCxmZSxzZWxmLGZmKTt9fSxyZW1vdmVMaXN0ZW5lckJ5SWQ6ZnVuY3Rpb24oZmgpe3ZhciBmbD1maC5zcGxpdChlKTt2YXIgZms9Zmwuc2hpZnQoKTtpZih0aGlzLnNlbGYoYXJndW1lbnRzKS5fX3ZXW2ZrXSl7dmFyIGZqPXRydWU7Zm9yKHZhciBpPTAsZmk9dGhpcy5fZ2V0UGFuZVNjcm9sbGVyQXJyKCk7aTxmaS5sZW5ndGg7aSsrKXtmaj1maVtpXS5yZW1vdmVMaXN0ZW5lckJ5SWQuY2FsbChmaVtpXSxmbFtpXSkmJmZqO31yZXR1cm4gZmo7fWVsc2V7cmV0dXJuIHF4LnVpLmNvcmUuV2lkZ2V0LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lckJ5SWQuY2FsbCh0aGlzLGZoKTt9fSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5nZXRDaGlsZENvbnRyb2wobykuZ2V0TWVudSgpLmRlc3Ryb3koKTtxeC51aS5jb3JlLldpZGdldC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KGJELGJ6KSl7cXgubG9jYWxlLk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZW1vdmVMaXN0ZW5lcihiRix0aGlzLl9vbkNoYW5nZUxvY2FsZSx0aGlzKTt9dmFyIGZuPXRoaXMuZ2V0U2VsZWN0aW9uTW9kZWwoKTtpZihmbil7Zm4uZGlzcG9zZSgpO312YXIgZm09dGhpcy5nZXREYXRhUm93UmVuZGVyZXIoKTtpZihmbSl7Zm0uZGlzcG9zZSgpO310aGlzLl9jbGVhblVwTWV0YUNvbHVtbnMoMCk7dGhpcy5nZXRUYWJsZUNvbHVtbk1vZGVsKCkuZGlzcG9zZSgpO3RoaXMuX2Rpc3Bvc2VPYmplY3RzKE0sYmcsYkMsYkMsYmopO3RoaXMuX2Rpc3Bvc2VNYXAoTik7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LnVpLnRhYmxlLklSb3dSZW5kZXJlciI7cXguSW50ZXJmYWNlLmRlZmluZShhLHttZW1iZXJzOnt1cGRhdGVEYXRhUm93RWxlbWVudDpmdW5jdGlvbihiLGMpe30sZ2V0Um93SGVpZ2h0U3R5bGU6ZnVuY3Rpb24oZCl7fSxjcmVhdGVSb3dTdHlsZTpmdW5jdGlvbihlKXt9LGdldFJvd0NsYXNzOmZ1bmN0aW9uKGYpe319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgdD0iIixzPSJ0YWJsZS1yb3ctYmFja2dyb3VuZC1ldmVuIixyPSJ0YWJsZS1yb3ctYmFja2dyb3VuZC1zZWxlY3RlZCIscT0idGFibGUtcm93IixwPSJiYWNrZ3JvdW5kLWNvbG9yOiIsbz0idGFibGUtcm93LWJhY2tncm91bmQtZm9jdXNlZCIsbj0nO2JvcmRlci1ib3R0b206IDFweCBzb2xpZCAnLG09Jztjb2xvcjonLGw9InRhYmxlLXJvdy1zZWxlY3RlZCIsaz0idGFibGUtcm93LWJhY2tncm91bmQtb2RkIixkPSJkZWZhdWx0IixqPSJ0YWJsZS1yb3ctYmFja2dyb3VuZC1mb2N1c2VkLXNlbGVjdGVkIixnPSJxeC51aS50YWJsZS5yb3dyZW5kZXJlci5EZWZhdWx0IixjPSJ0YWJsZS1yb3ctbGluZSIsYj0iJyIsZj0iaGVpZ2h0OiIsZT0iOyIsaD0icHg7IixhPSIxcHggc29saWQgIixpPSJCb29sZWFuIjtxeC5DbGFzcy5kZWZpbmUoZyx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGltcGxlbWVudDpxeC51aS50YWJsZS5JUm93UmVuZGVyZXIsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9fd2k9dDt0aGlzLl9fd2k9e307dGhpcy5fX3dqPXt9O3RoaXMuX3JlbmRlckZvbnQocXgudGhlbWUubWFuYWdlci5Gb250LmdldEluc3RhbmNlKCkucmVzb2x2ZShkKSk7dmFyIHU9cXgudGhlbWUubWFuYWdlci5Db2xvci5nZXRJbnN0YW5jZSgpO3RoaXMuX193ai5iZ2NvbEZvY3VzZWRTZWxlY3RlZD11LnJlc29sdmUoaik7dGhpcy5fX3dqLmJnY29sRm9jdXNlZD11LnJlc29sdmUobyk7dGhpcy5fX3dqLmJnY29sU2VsZWN0ZWQ9dS5yZXNvbHZlKHIpO3RoaXMuX193ai5iZ2NvbEV2ZW49dS5yZXNvbHZlKHMpO3RoaXMuX193ai5iZ2NvbE9kZD11LnJlc29sdmUoayk7dGhpcy5fX3dqLmNvbFNlbGVjdGVkPXUucmVzb2x2ZShsKTt0aGlzLl9fd2ouY29sTm9ybWFsPXUucmVzb2x2ZShxKTt0aGlzLl9fd2ouaG9yTGluZT11LnJlc29sdmUoYyk7fSxwcm9wZXJ0aWVzOntoaWdobGlnaHRGb2N1c1Jvdzp7Y2hlY2s6aSxpbml0OnRydWV9fSxtZW1iZXJzOntfX3dqOm51bGwsX193azpudWxsLF9fd2k6bnVsbCxfaW5zZXRZOjEsX3JlbmRlckZvbnQ6ZnVuY3Rpb24odil7aWYodil7dGhpcy5fX3drPXYuZ2V0U3R5bGVzKCk7dGhpcy5fX3dpPXF4LmJvbS5lbGVtZW50LlN0eWxlLmNvbXBpbGUodGhpcy5fX3drKTt0aGlzLl9fd2k9dGhpcy5fX3dpLnJlcGxhY2UoLyIvZyxiKTt9ZWxzZXt0aGlzLl9fd2k9dDt0aGlzLl9fd2s9cXguYm9tLkZvbnQuZ2V0RGVmYXVsdFN0eWxlcygpO319LHVwZGF0ZURhdGFSb3dFbGVtZW50OmZ1bmN0aW9uKHcseCl7dmFyIHo9dGhpcy5fX3drO3ZhciB5PXguc3R5bGU7cXguYm9tLmVsZW1lbnQuU3R5bGUuc2V0U3R5bGVzKHgseik7aWYody5mb2N1c2VkUm93JiZ0aGlzLmdldEhpZ2hsaWdodEZvY3VzUm93KCkpe3kuYmFja2dyb3VuZENvbG9yPXcuc2VsZWN0ZWQ/dGhpcy5fX3dqLmJnY29sRm9jdXNlZFNlbGVjdGVkOnRoaXMuX193ai5iZ2NvbEZvY3VzZWQ7fWVsc2V7aWYody5zZWxlY3RlZCl7eS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5fX3dqLmJnY29sU2VsZWN0ZWQ7fWVsc2V7eS5iYWNrZ3JvdW5kQ29sb3I9KHcucm93JTI9PTApP3RoaXMuX193ai5iZ2NvbEV2ZW46dGhpcy5fX3dqLmJnY29sT2RkO319eS5jb2xvcj13LnNlbGVjdGVkP3RoaXMuX193ai5jb2xTZWxlY3RlZDp0aGlzLl9fd2ouY29sTm9ybWFsO3kuYm9yZGVyQm90dG9tPWErdGhpcy5fX3dqLmhvckxpbmU7fSxnZXRSb3dIZWlnaHRTdHlsZTpmdW5jdGlvbihBKXtpZihxeC5ib20uY2xpZW50LkZlYXR1cmUuQ09OVEVOVF9CT1gpe0EtPXRoaXMuX2luc2V0WTt9cmV0dXJuIGYrQStoO30sY3JlYXRlUm93U3R5bGU6ZnVuY3Rpb24oQil7dmFyIEM9W107Qy5wdXNoKGUpO0MucHVzaCh0aGlzLl9fd2kpO0MucHVzaChwKTtpZihCLmZvY3VzZWRSb3cmJnRoaXMuZ2V0SGlnaGxpZ2h0Rm9jdXNSb3coKSl7Qy5wdXNoKEIuc2VsZWN0ZWQ/dGhpcy5fX3dqLmJnY29sRm9jdXNlZFNlbGVjdGVkOnRoaXMuX193ai5iZ2NvbEZvY3VzZWQpO31lbHNle2lmKEIuc2VsZWN0ZWQpe0MucHVzaCh0aGlzLl9fd2ouYmdjb2xTZWxlY3RlZCk7fWVsc2V7Qy5wdXNoKChCLnJvdyUyPT0wKT90aGlzLl9fd2ouYmdjb2xFdmVuOnRoaXMuX193ai5iZ2NvbE9kZCk7fX1DLnB1c2gobSk7Qy5wdXNoKEIuc2VsZWN0ZWQ/dGhpcy5fX3dqLmNvbFNlbGVjdGVkOnRoaXMuX193ai5jb2xOb3JtYWwpO0MucHVzaChuLHRoaXMuX193ai5ob3JMaW5lKTtyZXR1cm4gQy5qb2luKHQpO30sZ2V0Um93Q2xhc3M6ZnVuY3Rpb24oRCl7cmV0dXJuIHQ7fSxnZXRSb3dBdHRyaWJ1dGVzOmZ1bmN0aW9uKEUpe3JldHVybiB0O319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX3dqPXRoaXMuX193az10aGlzLl9fd2k9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgudWkudGFibGUuSUNvbHVtbk1lbnVCdXR0b24iO3F4LkludGVyZmFjZS5kZWZpbmUoYSx7cHJvcGVydGllczp7bWVudTp7fX0sbWVtYmVyczp7ZmFjdG9yeTpmdW5jdGlvbihiLGMpe3JldHVybiB0cnVlO30sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGw9InByZXNzZWQiLGs9ImhvdmVyZWQiLGo9ImNoYW5nZVZpc2liaWxpdHkiLGk9InF4LnVpLm1lbnUuTWVudSIsaD0ic3VibWVudSIsZz0iRW50ZXIiLGY9ImNvbnRleHRtZW51IixkPSJjaGFuZ2VNZW51IixjPSJxeC51aS5mb3JtLk1lbnVCdXR0b24iLGI9ImFiYW5kb25lZCIsYT0iX2FwcGx5TWVudSI7cXguQ2xhc3MuZGVmaW5lKGMse2V4dGVuZDpxeC51aS5mb3JtLkJ1dHRvbixjb25zdHJ1Y3Q6ZnVuY3Rpb24obSxuLG8pe3F4LnVpLmZvcm0uQnV0dG9uLmNhbGwodGhpcyxtLG4pO2lmKG8hPW51bGwpe3RoaXMuc2V0TWVudShvKTt9fSxwcm9wZXJ0aWVzOnttZW51OntjaGVjazppLG51bGxhYmxlOnRydWUsYXBwbHk6YSxldmVudDpkfX0sbWVtYmVyczp7X2FwcGx5TWVudTpmdW5jdGlvbihwLHEpe2lmKHEpe3EucmVtb3ZlTGlzdGVuZXIoaix0aGlzLl9vbk1lbnVDaGFuZ2UsdGhpcyk7cS5yZXNldE9wZW5lcigpO31pZihwKXtwLmFkZExpc3RlbmVyKGosdGhpcy5fb25NZW51Q2hhbmdlLHRoaXMpO3Auc2V0T3BlbmVyKHRoaXMpO3AucmVtb3ZlU3RhdGUoaCk7cC5yZW1vdmVTdGF0ZShmKTt9fSxvcGVuOmZ1bmN0aW9uKHIpe3ZhciBzPXRoaXMuZ2V0TWVudSgpO2lmKHMpe3F4LnVpLm1lbnUuTWFuYWdlci5nZXRJbnN0YW5jZSgpLmhpZGVBbGwoKTtzLnNldE9wZW5lcih0aGlzKTtzLm9wZW4oKTtpZihyKXt2YXIgdD1zLmdldFNlbGVjdGFibGVzKClbMF07aWYodCl7cy5zZXRTZWxlY3RlZEJ1dHRvbih0KTt9fX19LF9vbk1lbnVDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHU9dGhpcy5nZXRNZW51KCk7aWYodS5pc1Zpc2libGUoKSl7dGhpcy5hZGRTdGF0ZShsKTt9ZWxzZXt0aGlzLnJlbW92ZVN0YXRlKGwpO319LF9vbk1vdXNlRG93bjpmdW5jdGlvbihlKXtxeC51aS5mb3JtLkJ1dHRvbi5wcm90b3R5cGUuX29uTW91c2VEb3duLmNhbGwodGhpcyxlKTt2YXIgdj10aGlzLmdldE1lbnUoKTtpZih2KXtpZighdi5pc1Zpc2libGUoKSl7dGhpcy5vcGVuKCk7fWVsc2V7di5leGNsdWRlKCk7fWUuc3RvcFByb3BhZ2F0aW9uKCk7fX0sX29uTW91c2VVcDpmdW5jdGlvbihlKXtxeC51aS5mb3JtLkJ1dHRvbi5wcm90b3R5cGUuX29uTW91c2VVcC5jYWxsKHRoaXMsZSk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9LF9vbk1vdXNlT3ZlcjpmdW5jdGlvbihlKXt0aGlzLmFkZFN0YXRlKGspO30sX29uTW91c2VPdXQ6ZnVuY3Rpb24oZSl7dGhpcy5yZW1vdmVTdGF0ZShrKTt9LF9vbktleURvd246ZnVuY3Rpb24oZSl7c3dpdGNoKGUuZ2V0S2V5SWRlbnRpZmllcigpKXtjYXNlIGc6dGhpcy5yZW1vdmVTdGF0ZShiKTt0aGlzLmFkZFN0YXRlKGwpO3ZhciB3PXRoaXMuZ2V0TWVudSgpO2lmKHcpe2lmKCF3LmlzVmlzaWJsZSgpKXt0aGlzLm9wZW4oKTt9ZWxzZXt3LmV4Y2x1ZGUoKTt9fWUuc3RvcFByb3BhZ2F0aW9uKCk7fX0sX29uS2V5VXA6ZnVuY3Rpb24oZSl7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXtpZih0aGlzLmdldE1lbnUoKSl7aWYoIXF4LmNvcmUuT2JqZWN0UmVnaXN0cnkuaW5TaHV0RG93bil7dGhpcy5nZXRNZW51KCkuZGVzdHJveSgpO319fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGY9Im1lbnUtYnV0dG9uIixlPSJ0YWJsZS1jb2x1bW4tcmVzZXQtYnV0dG9uIixkPSJzZXBhcmF0b3IiLGM9InVzZXItYnV0dG9uIixiPSJxeC51aS50YWJsZS5jb2x1bW5tZW51LkJ1dHRvbiIsYT0ibWVudSI7cXguQ2xhc3MuZGVmaW5lKGIse2V4dGVuZDpxeC51aS5mb3JtLk1lbnVCdXR0b24saW1wbGVtZW50OnF4LnVpLnRhYmxlLklDb2x1bW5NZW51QnV0dG9uLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnVpLmZvcm0uTWVudUJ1dHRvbi5jYWxsKHRoaXMpO3RoaXMuX193bD1uZXcgcXgudWkuY29yZS5CbG9ja2VyKHRoaXMpO30sbWVtYmVyczp7X193bTpudWxsLF9fd2w6bnVsbCxmYWN0b3J5OmZ1bmN0aW9uKGcsaCl7c3dpdGNoKGcpe2Nhc2UgYTp2YXIgaj1uZXcgcXgudWkubWVudS5NZW51KCk7dGhpcy5zZXRNZW51KGopO3JldHVybiBqO2Nhc2UgZjp2YXIgbT1uZXcgcXgudWkudGFibGUuY29sdW1ubWVudS5NZW51SXRlbShoLnRleHQpO20uc2V0VmlzaWJsZShoLmJWaXNpYmxlKTt0aGlzLmdldE1lbnUoKS5hZGQobSk7cmV0dXJuIG07Y2FzZSBjOnZhciBrPW5ldyBxeC51aS5tZW51LkJ1dHRvbihoLnRleHQpO2suc2V0KHthcHBlYXJhbmNlOmV9KTtyZXR1cm4gaztjYXNlIGQ6cmV0dXJuIG5ldyBxeC51aS5tZW51LlNlcGFyYXRvcigpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgZmFjdG9yeSByZXF1ZXN0OiAiK2cpO319LGdldEJsb2NrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3dsO30sZW1wdHk6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLmdldE1lbnUoKTt2YXIgbz1uLmdldENoaWxkcmVuKCk7Zm9yKHZhciBpPTAsbD1vLmxlbmd0aDtpPGw7aSsrKXtvWzBdLmRlc3Ryb3koKTt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9fd2wuZGlzcG9zZSgpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciB0PSJrZXlwcmVzcyIscz0iaW50ZXJ2YWwiLHI9ImtleWRvd24iLHE9Im1vdXNlZG93biIscD0ia2V5dXAiLG89Il9fb24iLG49ImJsdXIiLG09IkVudGVyIixsPSJfX29vIixrPSJVcCIsYz0iRXNjYXBlIixqPSJxeC51aS5tZW51Lk1hbmFnZXIiLGc9IkxlZnQiLGI9Il9fb20iLGE9IkRvd24iLGY9IlJpZ2h0IixkPSJzaW5nbGV0b24iLGg9IlNwYWNlIjtxeC5DbGFzcy5kZWZpbmUoaix7dHlwZTpkLGV4dGVuZDpxeC5jb3JlLk9iamVjdCxjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3RoaXMuX19vbT1bXTt2YXIgdT1kb2N1bWVudC5ib2R5O3ZhciB2PXF4LmV2ZW50LlJlZ2lzdHJhdGlvbjt2LmFkZExpc3RlbmVyKHdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscSx0aGlzLl9vbk1vdXNlRG93bix0aGlzLHRydWUpO3YuYWRkTGlzdGVuZXIodSxyLHRoaXMuX29uS2V5VXBEb3duLHRoaXMsdHJ1ZSk7di5hZGRMaXN0ZW5lcih1LHAsdGhpcy5fb25LZXlVcERvd24sdGhpcyx0cnVlKTt2LmFkZExpc3RlbmVyKHUsdCx0aGlzLl9vbktleVByZXNzLHRoaXMsdHJ1ZSk7aWYoIXF4LmJvbS5jbGllbnQuRmVhdHVyZS5UT1VDSCl7cXguYm9tLkVsZW1lbnQuYWRkTGlzdGVuZXIod2luZG93LG4sdGhpcy5oaWRlQWxsLHRoaXMpO310aGlzLl9fb249bmV3IHF4LmV2ZW50LlRpbWVyO3RoaXMuX19vbi5hZGRMaXN0ZW5lcihzLHRoaXMuX29uT3BlbkludGVydmFsLHRoaXMpO3RoaXMuX19vbz1uZXcgcXguZXZlbnQuVGltZXI7dGhpcy5fX29vLmFkZExpc3RlbmVyKHMsdGhpcy5fb25DbG9zZUludGVydmFsLHRoaXMpO30sbWVtYmVyczp7X19vcDpudWxsLF9fb3E6bnVsbCxfX29uOm51bGwsX19vbzpudWxsLF9fb206bnVsbCxfZ2V0Q2hpbGQ6ZnVuY3Rpb24odyx4LHkseil7dmFyIEE9dy5nZXRDaGlsZHJlbigpO3ZhciBsZW5ndGg9QS5sZW5ndGg7dmFyIEI7Zm9yKHZhciBpPXg7aTxsZW5ndGgmJmk+PTA7aSs9eSl7Qj1BW2ldO2lmKEIuaXNFbmFibGVkKCkmJiFCLmlzQW5vbnltb3VzKCkpe3JldHVybiBCO319aWYoeil7aT1pPT1sZW5ndGg/MDpsZW5ndGgtMTtmb3IoO2khPXg7aSs9eSl7Qj1BW2ldO2lmKEIuaXNFbmFibGVkKCkmJiFCLmlzQW5vbnltb3VzKCkpe3JldHVybiBCO319fXJldHVybiBudWxsO30sX2lzSW5NZW51OmZ1bmN0aW9uKEMpe3doaWxlKEMpe2lmKEMgaW5zdGFuY2VvZiBxeC51aS5tZW51Lk1lbnUpe3JldHVybiB0cnVlO31DPUMuZ2V0TGF5b3V0UGFyZW50KCk7fXJldHVybiBmYWxzZTt9LF9nZXRNZW51QnV0dG9uOmZ1bmN0aW9uKEQpe3doaWxlKEQpe2lmKEQgaW5zdGFuY2VvZiBxeC51aS5tZW51LkFic3RyYWN0QnV0dG9uKXtyZXR1cm4gRDt9RD1ELmdldExheW91dFBhcmVudCgpO31yZXR1cm4gbnVsbDt9LGFkZDpmdW5jdGlvbihFKXt7fTt2YXIgRj10aGlzLl9fb207Ri5wdXNoKEUpO0Uuc2V0WkluZGV4KDFlNitGLmxlbmd0aCk7fSxyZW1vdmU6ZnVuY3Rpb24oRyl7e307dmFyIEg9dGhpcy5fX29tO2lmKEgpe3F4LmxhbmcuQXJyYXkucmVtb3ZlKEgsRyk7fX0saGlkZUFsbDpmdW5jdGlvbigpe3ZhciBJPXRoaXMuX19vbTtpZihJKXtmb3IodmFyIGk9SS5sZW5ndGgtMTtpPj0wO2ktLSl7SVtpXS5leGNsdWRlKCk7fX19LGdldEFjdGl2ZU1lbnU6ZnVuY3Rpb24oKXt2YXIgSj10aGlzLl9fb207cmV0dXJuIEoubGVuZ3RoPjA/SltKLmxlbmd0aC0xXTpudWxsO30sc2NoZWR1bGVPcGVuOmZ1bmN0aW9uKEspe3RoaXMuY2FuY2VsQ2xvc2UoSyk7aWYoSy5pc1Zpc2libGUoKSl7aWYodGhpcy5fX29wKXt0aGlzLmNhbmNlbE9wZW4odGhpcy5fX29wKTt9fWVsc2UgaWYodGhpcy5fX29wIT1LKXt0aGlzLl9fb3A9Szt0aGlzLl9fb24ucmVzdGFydFdpdGgoSy5nZXRPcGVuSW50ZXJ2YWwoKSk7fX0sc2NoZWR1bGVDbG9zZTpmdW5jdGlvbihMKXt0aGlzLmNhbmNlbE9wZW4oTCk7aWYoIUwuaXNWaXNpYmxlKCkpe2lmKHRoaXMuX19vcSl7dGhpcy5jYW5jZWxDbG9zZSh0aGlzLl9fb3EpO319ZWxzZSBpZih0aGlzLl9fb3EhPUwpe3RoaXMuX19vcT1MO3RoaXMuX19vby5yZXN0YXJ0V2l0aChMLmdldENsb3NlSW50ZXJ2YWwoKSk7fX0sY2FuY2VsT3BlbjpmdW5jdGlvbihNKXtpZih0aGlzLl9fb3A9PU0pe3RoaXMuX19vbi5zdG9wKCk7dGhpcy5fX29wPW51bGw7fX0sY2FuY2VsQ2xvc2U6ZnVuY3Rpb24oTil7aWYodGhpcy5fX29xPT1OKXt0aGlzLl9fb28uc3RvcCgpO3RoaXMuX19vcT1udWxsO319LF9vbk9wZW5JbnRlcnZhbDpmdW5jdGlvbihlKXt0aGlzLl9fb24uc3RvcCgpO3RoaXMuX19vcC5vcGVuKCk7dGhpcy5fX29wPW51bGw7fSxfb25DbG9zZUludGVydmFsOmZ1bmN0aW9uKGUpe3RoaXMuX19vby5zdG9wKCk7dGhpcy5fX29xLmV4Y2x1ZGUoKTt0aGlzLl9fb3E9bnVsbDt9LF9vbk1vdXNlRG93bjpmdW5jdGlvbihlKXt2YXIgTz1lLmdldFRhcmdldCgpO089cXgudWkuY29yZS5XaWRnZXQuZ2V0V2lkZ2V0QnlFbGVtZW50KE8sdHJ1ZSk7aWYoTz09bnVsbCl7dGhpcy5oaWRlQWxsKCk7cmV0dXJuO31pZihPLmdldE1lbnUmJk8uZ2V0TWVudSgpJiZPLmdldE1lbnUoKS5pc1Zpc2libGUoKSl7cmV0dXJuO31pZih0aGlzLl9fb20ubGVuZ3RoPjAmJiF0aGlzLl9pc0luTWVudShPKSl7dGhpcy5oaWRlQWxsKCk7fX0sX19vcjp7IkVudGVyIjoxLCJTcGFjZSI6MX0sX19vczp7IkVzY2FwZSI6MSwiVXAiOjEsIkRvd24iOjEsIkxlZnQiOjEsIlJpZ2h0IjoxfSxfb25LZXlVcERvd246ZnVuY3Rpb24oZSl7dmFyIFA9dGhpcy5nZXRBY3RpdmVNZW51KCk7aWYoIVApe3JldHVybjt9dmFyIFE9ZS5nZXRLZXlJZGVudGlmaWVyKCk7aWYodGhpcy5fX29zW1FdfHwodGhpcy5fX29yW1FdJiZQLmdldFNlbGVjdGVkQnV0dG9uKCkpKXtlLnN0b3BQcm9wYWdhdGlvbigpO319LF9vbktleVByZXNzOmZ1bmN0aW9uKGUpe3ZhciBSPXRoaXMuZ2V0QWN0aXZlTWVudSgpO2lmKCFSKXtyZXR1cm47fXZhciBTPWUuZ2V0S2V5SWRlbnRpZmllcigpO3ZhciBVPXRoaXMuX19vc1tTXTt2YXIgVD10aGlzLl9fb3JbU107aWYoVSl7c3dpdGNoKFMpe2Nhc2Ugazp0aGlzLl9vbktleVByZXNzVXAoUik7YnJlYWs7Y2FzZSBhOnRoaXMuX29uS2V5UHJlc3NEb3duKFIpO2JyZWFrO2Nhc2UgZzp0aGlzLl9vbktleVByZXNzTGVmdChSKTticmVhaztjYXNlIGY6dGhpcy5fb25LZXlQcmVzc1JpZ2h0KFIpO2JyZWFrO2Nhc2UgYzp0aGlzLmhpZGVBbGwoKTticmVhazt9ZS5zdG9wUHJvcGFnYXRpb24oKTtlLnByZXZlbnREZWZhdWx0KCk7fWVsc2UgaWYoVCl7dmFyIFY9Ui5nZXRTZWxlY3RlZEJ1dHRvbigpO2lmKFYpe3N3aXRjaChTKXtjYXNlIG06dGhpcy5fb25LZXlQcmVzc0VudGVyKFIsVixlKTticmVhaztjYXNlIGg6dGhpcy5fb25LZXlQcmVzc1NwYWNlKFIsVixlKTticmVhazt9ZS5zdG9wUHJvcGFnYXRpb24oKTtlLnByZXZlbnREZWZhdWx0KCk7fX19LF9vbktleVByZXNzVXA6ZnVuY3Rpb24oVyl7dmFyIFg9Vy5nZXRTZWxlY3RlZEJ1dHRvbigpO3ZhciBZPVcuZ2V0Q2hpbGRyZW4oKTt2YXIgYmI9WD9XLmluZGV4T2YoWCktMTpZLmxlbmd0aC0xO3ZhciBiYT10aGlzLl9nZXRDaGlsZChXLGJiLC0xLHRydWUpO2lmKGJhKXtXLnNldFNlbGVjdGVkQnV0dG9uKGJhKTt9ZWxzZXtXLnJlc2V0U2VsZWN0ZWRCdXR0b24oKTt9fSxfb25LZXlQcmVzc0Rvd246ZnVuY3Rpb24oYmMpe3ZhciBiZD1iYy5nZXRTZWxlY3RlZEJ1dHRvbigpO3ZhciBiZj1iZD9iYy5pbmRleE9mKGJkKSsxOjA7dmFyIGJlPXRoaXMuX2dldENoaWxkKGJjLGJmLDEsdHJ1ZSk7aWYoYmUpe2JjLnNldFNlbGVjdGVkQnV0dG9uKGJlKTt9ZWxzZXtiYy5yZXNldFNlbGVjdGVkQnV0dG9uKCk7fX0sX29uS2V5UHJlc3NMZWZ0OmZ1bmN0aW9uKGJnKXt2YXIgYmw9YmcuZ2V0T3BlbmVyKCk7aWYoIWJsKXtyZXR1cm47fWlmKGJsIGluc3RhbmNlb2YgcXgudWkubWVudS5BYnN0cmFjdEJ1dHRvbil7dmFyIGJpPWJsLmdldExheW91dFBhcmVudCgpO2JpLnJlc2V0T3BlbmVkQnV0dG9uKCk7Ymkuc2V0U2VsZWN0ZWRCdXR0b24oYmwpO31lbHNlIGlmKGJsIGluc3RhbmNlb2YgcXgudWkubWVudWJhci5CdXR0b24pe3ZhciBiaz1ibC5nZXRNZW51QmFyKCkuZ2V0TWVudUJ1dHRvbnMoKTt2YXIgYmg9YmsuaW5kZXhPZihibCk7aWYoYmg9PT0tMSl7cmV0dXJuO312YXIgYm09bnVsbDt2YXIgbGVuZ3RoPWJrLmxlbmd0aDtmb3IodmFyIGk9MTtpPD1sZW5ndGg7aSsrKXt2YXIgYmo9YmtbKGJoLWkrbGVuZ3RoKSVsZW5ndGhdO2lmKGJqLmlzRW5hYmxlZCgpKXtibT1iajticmVhazt9fWlmKGJtJiZibSE9Ymwpe2JtLm9wZW4odHJ1ZSk7fX19LF9vbktleVByZXNzUmlnaHQ6ZnVuY3Rpb24oYm4pe3ZhciBicD1ibi5nZXRTZWxlY3RlZEJ1dHRvbigpO2lmKGJwKXt2YXIgYm89YnAuZ2V0TWVudSgpO2lmKGJvKXtibi5zZXRPcGVuZWRCdXR0b24oYnApO3ZhciBidj10aGlzLl9nZXRDaGlsZChibywwLDEpO2lmKGJ2KXtiby5zZXRTZWxlY3RlZEJ1dHRvbihidik7fXJldHVybjt9fWVsc2UgaWYoIWJuLmdldE9wZW5lZEJ1dHRvbigpKXt2YXIgYnY9dGhpcy5fZ2V0Q2hpbGQoYm4sMCwxKTtpZihidil7Ym4uc2V0U2VsZWN0ZWRCdXR0b24oYnYpO2lmKGJ2LmdldE1lbnUoKSl7Ym4uc2V0T3BlbmVkQnV0dG9uKGJ2KTt9cmV0dXJuO319dmFyIGJ0PWJuLmdldE9wZW5lcigpO2lmKGJ0IGluc3RhbmNlb2YgcXgudWkubWVudS5CdXR0b24mJmJwKXt3aGlsZShidCl7YnQ9YnQuZ2V0TGF5b3V0UGFyZW50KCk7aWYoYnQgaW5zdGFuY2VvZiBxeC51aS5tZW51Lk1lbnUpe2J0PWJ0LmdldE9wZW5lcigpO2lmKGJ0IGluc3RhbmNlb2YgcXgudWkubWVudWJhci5CdXR0b24pe2JyZWFrO319ZWxzZXticmVhazt9fWlmKCFidCl7cmV0dXJuO319aWYoYnQgaW5zdGFuY2VvZiBxeC51aS5tZW51YmFyLkJ1dHRvbil7dmFyIGJzPWJ0LmdldE1lbnVCYXIoKS5nZXRNZW51QnV0dG9ucygpO3ZhciBicT1icy5pbmRleE9mKGJ0KTtpZihicT09PS0xKXtyZXR1cm47fXZhciBidT1udWxsO3ZhciBsZW5ndGg9YnMubGVuZ3RoO2Zvcih2YXIgaT0xO2k8PWxlbmd0aDtpKyspe3ZhciBicj1ic1soYnEraSklbGVuZ3RoXTtpZihici5pc0VuYWJsZWQoKSl7YnU9YnI7YnJlYWs7fX1pZihidSYmYnUhPWJ0KXtidS5vcGVuKHRydWUpO319fSxfb25LZXlQcmVzc0VudGVyOmZ1bmN0aW9uKGJ3LGJ4LGUpe2lmKGJ4Lmhhc0xpc3RlbmVyKHQpKXt2YXIgYnk9ZS5jbG9uZSgpO2J5LnNldEJ1YmJsZXMoZmFsc2UpO2J5LnNldFRhcmdldChieCk7YnguZGlzcGF0Y2hFdmVudChieSk7fXRoaXMuaGlkZUFsbCgpO30sX29uS2V5UHJlc3NTcGFjZTpmdW5jdGlvbihieixiQSxlKXtpZihiQS5oYXNMaXN0ZW5lcih0KSl7dmFyIGJCPWUuY2xvbmUoKTtiQi5zZXRCdWJibGVzKGZhbHNlKTtiQi5zZXRUYXJnZXQoYkEpO2JBLmRpc3BhdGNoRXZlbnQoYkIpO319fSxkZXN0cnVjdDpmdW5jdGlvbigpe3ZhciBiRD1xeC5ldmVudC5SZWdpc3RyYXRpb247dmFyIGJDPWRvY3VtZW50LmJvZHk7YkQucmVtb3ZlTGlzdGVuZXIod2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxxLHRoaXMuX29uTW91c2VEb3duLHRoaXMsdHJ1ZSk7YkQucmVtb3ZlTGlzdGVuZXIoYkMscix0aGlzLl9vbktleVVwRG93bix0aGlzLHRydWUpO2JELnJlbW92ZUxpc3RlbmVyKGJDLHAsdGhpcy5fb25LZXlVcERvd24sdGhpcyx0cnVlKTtiRC5yZW1vdmVMaXN0ZW5lcihiQyx0LHRoaXMuX29uS2V5UHJlc3MsdGhpcyx0cnVlKTt0aGlzLl9kaXNwb3NlT2JqZWN0cyhvLGwpO3RoaXMuX2Rpc3Bvc2VBcnJheShiKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbD0iaW5kZXhPZiIsaz0iYWRkQWZ0ZXIiLGo9ImFkZCIsaT0iYWRkQmVmb3JlIixoPSJfIixnPSJhZGRBdCIsZj0iaGFzQ2hpbGRyZW4iLGU9InJlbW92ZUF0IixkPSJyZW1vdmVBbGwiLGM9ImdldENoaWxkcmVuIixhPSJyZW1vdmUiLGI9InF4LnVpLmNvcmUuTVJlbW90ZUNoaWxkcmVuSGFuZGxpbmciO3F4Lk1peGluLmRlZmluZShiLHttZW1iZXJzOntfX2V4OmZ1bmN0aW9uKG0sbixvLHApe3ZhciBxPXRoaXMuZ2V0Q2hpbGRyZW5Db250YWluZXIoKTtpZihxPT09dGhpcyl7bT1oK207fXJldHVybiAocVttXSkobixvLHApO30sZ2V0Q2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2V4KGMpO30saGFzQ2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2V4KGYpO30sYWRkOmZ1bmN0aW9uKHIscyl7cmV0dXJuIHRoaXMuX19leChqLHIscyk7fSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19leChhLHQpO30scmVtb3ZlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19leChkKTt9LGluZGV4T2Y6ZnVuY3Rpb24odSl7cmV0dXJuIHRoaXMuX19leChsLHUpO30sYWRkQXQ6ZnVuY3Rpb24odix3LHgpe3RoaXMuX19leChnLHYsdyx4KTt9LGFkZEJlZm9yZTpmdW5jdGlvbih5LHosQSl7dGhpcy5fX2V4KGkseSx6LEEpO30sYWRkQWZ0ZXI6ZnVuY3Rpb24oQixDLEQpe3RoaXMuX19leChrLEIsQyxEKTt9LHJlbW92ZUF0OmZ1bmN0aW9uKEUpe3RoaXMuX19leChlLEUpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbD0ic2xpZGViYXIiLGs9IkludGVnZXIiLGo9InJlc2l6ZSIsaD0icXgudWkuY29yZS5XaWRnZXQiLGc9InNlbGVjdGVkIixmPSJ2aXNpYmxlIixkPSJCb29sZWFuIixjPSJtb3VzZW91dCIsYj0iZXhjbHVkZWQiLGE9Im1lbnUiLEE9Il9hcHBseVNlbGVjdGVkQnV0dG9uIix6PSJfYXBwbHlPcGVuSW50ZXJ2YWwiLHk9Il9hcHBseVNwYWNpbmdZIix4PSJfYmxvY2tlciIsdz0iX2FwcGx5Q2xvc2VJbnRlcnZhbCIsdj0iX2FwcGx5QmxvY2tlckNvbG9yIix1PSJfYXBwbHlJY29uQ29sdW1uV2lkdGgiLHQ9Im1vdXNlb3ZlciIscz0icXgudWkubWVudS5NZW51IixyPSJDb2xvciIscD0iTnVtYmVyIixxPSJfYXBwbHlPcGVuZWRCdXR0b24iLG49Il9hcHBseVNwYWNpbmdYIixvPSJfYXBwbHlCbG9ja2VyT3BhY2l0eSIsbT0iX2FwcGx5QXJyb3dDb2x1bW5XaWR0aCI7cXguQ2xhc3MuZGVmaW5lKHMse2V4dGVuZDpxeC51aS5jb3JlLldpZGdldCxpbmNsdWRlOltxeC51aS5jb3JlLk1QbGFjZW1lbnQscXgudWkuY29yZS5NUmVtb3RlQ2hpbGRyZW5IYW5kbGluZ10sY29uc3RydWN0OmZ1bmN0aW9uKCl7cXgudWkuY29yZS5XaWRnZXQuY2FsbCh0aGlzKTt0aGlzLl9zZXRMYXlvdXQobmV3IHF4LnVpLm1lbnUuTGF5b3V0KTt2YXIgQj10aGlzLmdldEFwcGxpY2F0aW9uUm9vdCgpO0IuYWRkKHRoaXMpO3RoaXMuYWRkTGlzdGVuZXIodCx0aGlzLl9vbk1vdXNlT3Zlcik7dGhpcy5hZGRMaXN0ZW5lcihjLHRoaXMuX29uTW91c2VPdXQpO3RoaXMuYWRkTGlzdGVuZXIoaix0aGlzLl9vblJlc2l6ZSx0aGlzKTtCLmFkZExpc3RlbmVyKGosdGhpcy5fb25SZXNpemUsdGhpcyk7dGhpcy5fYmxvY2tlcj1uZXcgcXgudWkuY29yZS5CbG9ja2VyKEIpO3RoaXMuaW5pdFZpc2liaWxpdHkoKTt0aGlzLmluaXRLZWVwRm9jdXMoKTt0aGlzLmluaXRLZWVwQWN0aXZlKCk7fSxwcm9wZXJ0aWVzOnthcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0OmF9LGFsbG93R3Jvd1g6e3JlZmluZTp0cnVlLGluaXQ6ZmFsc2V9LGFsbG93R3Jvd1k6e3JlZmluZTp0cnVlLGluaXQ6ZmFsc2V9LHZpc2liaWxpdHk6e3JlZmluZTp0cnVlLGluaXQ6Yn0sa2VlcEZvY3VzOntyZWZpbmU6dHJ1ZSxpbml0OnRydWV9LGtlZXBBY3RpdmU6e3JlZmluZTp0cnVlLGluaXQ6dHJ1ZX0sc3BhY2luZ1g6e2NoZWNrOmssYXBwbHk6bixpbml0OjAsdGhlbWVhYmxlOnRydWV9LHNwYWNpbmdZOntjaGVjazprLGFwcGx5OnksaW5pdDowLHRoZW1lYWJsZTp0cnVlfSxpY29uQ29sdW1uV2lkdGg6e2NoZWNrOmssaW5pdDowLHRoZW1lYWJsZTp0cnVlLGFwcGx5OnV9LGFycm93Q29sdW1uV2lkdGg6e2NoZWNrOmssaW5pdDowLHRoZW1lYWJsZTp0cnVlLGFwcGx5Om19LGJsb2NrZXJDb2xvcjp7Y2hlY2s6cixpbml0Om51bGwsbnVsbGFibGU6dHJ1ZSxhcHBseTp2LHRoZW1lYWJsZTp0cnVlfSxibG9ja2VyT3BhY2l0eTp7Y2hlY2s6cCxpbml0OjEsYXBwbHk6byx0aGVtZWFibGU6dHJ1ZX0sc2VsZWN0ZWRCdXR0b246e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZSxhcHBseTpBfSxvcGVuZWRCdXR0b246e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZSxhcHBseTpxfSxvcGVuZXI6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZX0sb3BlbkludGVydmFsOntjaGVjazprLHRoZW1lYWJsZTp0cnVlLGluaXQ6MjUwLGFwcGx5Onp9LGNsb3NlSW50ZXJ2YWw6e2NoZWNrOmssdGhlbWVhYmxlOnRydWUsaW5pdDoyNTAsYXBwbHk6d30sYmxvY2tCYWNrZ3JvdW5kOntjaGVjazpkLHRoZW1lYWJsZTp0cnVlLGluaXQ6ZmFsc2V9fSxtZW1iZXJzOntfX3F2Om51bGwsX19xdzpudWxsLF9ibG9ja2VyOm51bGwsb3BlbjpmdW5jdGlvbigpe2lmKHRoaXMuZ2V0T3BlbmVyKCkhPW51bGwpe3RoaXMucGxhY2VUb1dpZGdldCh0aGlzLmdldE9wZW5lcigpKTt0aGlzLl9fcXkoKTt0aGlzLnNob3coKTt0aGlzLl9wbGFjZW1lbnRUYXJnZXQ9dGhpcy5nZXRPcGVuZXIoKTt9ZWxzZXt0aGlzLndhcm4oIlRoZSBtZW51IGluc3RhbmNlIG5lZWRzIGEgY29uZmlndXJlZCAnb3BlbmVyJyB3aWRnZXQhIik7fX0sb3BlbkF0TW91c2U6ZnVuY3Rpb24oZSl7dGhpcy5wbGFjZVRvTW91c2UoZSk7dGhpcy5fX3F5KCk7dGhpcy5zaG93KCk7dGhpcy5fcGxhY2VtZW50VGFyZ2V0PXtsZWZ0OmUuZ2V0RG9jdW1lbnRMZWZ0KCksdG9wOmUuZ2V0RG9jdW1lbnRUb3AoKX07fSxvcGVuQXRQb2ludDpmdW5jdGlvbihDKXt0aGlzLnBsYWNlVG9Qb2ludChDKTt0aGlzLl9fcXkoKTt0aGlzLnNob3coKTt0aGlzLl9wbGFjZW1lbnRUYXJnZXQ9Qzt9LGFkZFNlcGFyYXRvcjpmdW5jdGlvbigpe3RoaXMuYWRkKG5ldyBxeC51aS5tZW51LlNlcGFyYXRvcik7fSxnZXRDb2x1bW5TaXplczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRNZW51TGF5b3V0KCkuZ2V0Q29sdW1uU2l6ZXMoKTt9LGdldFNlbGVjdGFibGVzOmZ1bmN0aW9uKCl7dmFyIEQ9W107dmFyIEU9dGhpcy5nZXRDaGlsZHJlbigpO2Zvcih2YXIgaT0wO2k8RS5sZW5ndGg7aSsrKXtpZihFW2ldLmlzRW5hYmxlZCgpKXtELnB1c2goRVtpXSk7fX1yZXR1cm4gRDt9LF9hcHBseUljb25Db2x1bW5XaWR0aDpmdW5jdGlvbihGLEcpe3RoaXMuX2dldE1lbnVMYXlvdXQoKS5zZXRJY29uQ29sdW1uV2lkdGgoRik7fSxfYXBwbHlBcnJvd0NvbHVtbldpZHRoOmZ1bmN0aW9uKEgsSSl7dGhpcy5fZ2V0TWVudUxheW91dCgpLnNldEFycm93Q29sdW1uV2lkdGgoSCk7fSxfYXBwbHlTcGFjaW5nWDpmdW5jdGlvbihKLEspe3RoaXMuX2dldE1lbnVMYXlvdXQoKS5zZXRDb2x1bW5TcGFjaW5nKEopO30sX2FwcGx5U3BhY2luZ1k6ZnVuY3Rpb24oTCxNKXt0aGlzLl9nZXRNZW51TGF5b3V0KCkuc2V0U3BhY2luZyhMKTt9LF9hcHBseVZpc2liaWxpdHk6ZnVuY3Rpb24oTixPKXtxeC51aS5jb3JlLldpZGdldC5wcm90b3R5cGUuX2FwcGx5VmlzaWJpbGl0eS5jYWxsKHRoaXMsTixPKTt2YXIgUD1xeC51aS5tZW51Lk1hbmFnZXIuZ2V0SW5zdGFuY2UoKTtpZihOPT09Zil7UC5hZGQodGhpcyk7dmFyIFE9dGhpcy5nZXRQYXJlbnRNZW51KCk7aWYoUSl7US5zZXRPcGVuZWRCdXR0b24odGhpcy5nZXRPcGVuZXIoKSk7fX1lbHNlIGlmKE89PT1mKXtQLnJlbW92ZSh0aGlzKTt2YXIgUT10aGlzLmdldFBhcmVudE1lbnUoKTtpZihRJiZRLmdldE9wZW5lZEJ1dHRvbigpPT10aGlzLmdldE9wZW5lcigpKXtRLnJlc2V0T3BlbmVkQnV0dG9uKCk7fXRoaXMucmVzZXRPcGVuZWRCdXR0b24oKTt0aGlzLnJlc2V0U2VsZWN0ZWRCdXR0b24oKTt9dGhpcy5fX3F4KCk7fSxfX3F4OmZ1bmN0aW9uKCl7aWYodGhpcy5pc1Zpc2libGUoKSl7aWYodGhpcy5nZXRCbG9ja0JhY2tncm91bmQoKSl7dmFyIFI9dGhpcy5nZXRaSW5kZXgoKTt0aGlzLl9ibG9ja2VyLmJsb2NrQ29udGVudChSLTEpO319ZWxzZXtpZih0aGlzLl9ibG9ja2VyLmlzQ29udGVudEJsb2NrZWQoKSl7dGhpcy5fYmxvY2tlci51bmJsb2NrQ29udGVudCgpO319fSxnZXRQYXJlbnRNZW51OmZ1bmN0aW9uKCl7dmFyIFM9dGhpcy5nZXRPcGVuZXIoKTtpZighU3x8IShTIGluc3RhbmNlb2YgcXgudWkubWVudS5BYnN0cmFjdEJ1dHRvbikpe3JldHVybiBudWxsO313aGlsZShTJiYhKFMgaW5zdGFuY2VvZiBxeC51aS5tZW51Lk1lbnUpKXtTPVMuZ2V0TGF5b3V0UGFyZW50KCk7fXJldHVybiBTO30sX2FwcGx5U2VsZWN0ZWRCdXR0b246ZnVuY3Rpb24oVCxVKXtpZihVKXtVLnJlbW92ZVN0YXRlKGcpO31pZihUKXtULmFkZFN0YXRlKGcpO319LF9hcHBseU9wZW5lZEJ1dHRvbjpmdW5jdGlvbihWLFcpe2lmKFcpe1cuZ2V0TWVudSgpLmV4Y2x1ZGUoKTt9aWYoVil7Vi5nZXRNZW51KCkub3BlbigpO319LF9hcHBseUJsb2NrZXJDb2xvcjpmdW5jdGlvbihYLFkpe3RoaXMuX2Jsb2NrZXIuc2V0Q29sb3IoWCk7fSxfYXBwbHlCbG9ja2VyT3BhY2l0eTpmdW5jdGlvbihiYSxiYil7dGhpcy5fYmxvY2tlci5zZXRPcGFjaXR5KGJhKTt9LGdldENoaWxkcmVuQ29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250cm9sKGwsdHJ1ZSl8fHRoaXM7fSxfY3JlYXRlQ2hpbGRDb250cm9sSW1wbDpmdW5jdGlvbihiYyxiZCl7dmFyIGJlO3N3aXRjaChiYyl7Y2FzZSBsOnZhciBiZT1uZXcgcXgudWkubWVudS5NZW51U2xpZGVCYXIoKTt2YXIgYmc9dGhpcy5fZ2V0TGF5b3V0KCk7dGhpcy5fc2V0TGF5b3V0KG5ldyBxeC51aS5sYXlvdXQuR3JvdygpKTt2YXIgYmY9YmUuZ2V0TGF5b3V0KCk7YmUuc2V0TGF5b3V0KGJnKTtiZi5kaXNwb3NlKCk7dmFyIGJoPXF4LmxhbmcuQXJyYXkuY2xvbmUodGhpcy5nZXRDaGlsZHJlbigpKTtmb3IodmFyIGk9MDtpPGJoLmxlbmd0aDtpKyspe2JlLmFkZChiaFtpXSk7fXRoaXMucmVtb3ZlTGlzdGVuZXIoaix0aGlzLl9vblJlc2l6ZSx0aGlzKTtiZS5nZXRDaGlsZHJlbkNvbnRhaW5lcigpLmFkZExpc3RlbmVyKGosdGhpcy5fb25SZXNpemUsdGhpcyk7dGhpcy5fYWRkKGJlKTticmVhazt9cmV0dXJuIGJlfHxxeC51aS5jb3JlLldpZGdldC5wcm90b3R5cGUuX2NyZWF0ZUNoaWxkQ29udHJvbEltcGwuY2FsbCh0aGlzLGJjKTt9LF9nZXRNZW51TGF5b3V0OmZ1bmN0aW9uKCl7aWYodGhpcy5oYXNDaGlsZENvbnRyb2wobCkpe3JldHVybiB0aGlzLmdldENoaWxkQ29udHJvbChsKS5nZXRDaGlsZHJlbkNvbnRhaW5lcigpLmdldExheW91dCgpO31lbHNle3JldHVybiB0aGlzLl9nZXRMYXlvdXQoKTt9fSxfZ2V0TWVudUJvdW5kczpmdW5jdGlvbigpe2lmKHRoaXMuaGFzQ2hpbGRDb250cm9sKGwpKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRyb2wobCkuZ2V0Q2hpbGRyZW5Db250YWluZXIoKS5nZXRCb3VuZHMoKTt9ZWxzZXtyZXR1cm4gdGhpcy5nZXRCb3VuZHMoKTt9fSxfY29tcHV0ZVBsYWNlbWVudFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0TWVudUJvdW5kcygpO30sX19xeTpmdW5jdGlvbigpe3ZhciBiaj10aGlzLl9nZXRNZW51Qm91bmRzKCk7aWYoIWJqKXt0aGlzLmFkZExpc3RlbmVyT25jZShqLHRoaXMuX19xeSx0aGlzKTtyZXR1cm47fXZhciBiaT10aGlzLmdldExheW91dFBhcmVudCgpLmdldEJvdW5kcygpLmhlaWdodDt2YXIgdG9wPXRoaXMuZ2V0TGF5b3V0UHJvcGVydGllcygpLnRvcDt2YXIgYms9dGhpcy5nZXRMYXlvdXRQcm9wZXJ0aWVzKCkubGVmdDtpZih0b3A8MCl7dGhpcy5fYXNzZXJ0U2xpZGVCYXIoZnVuY3Rpb24oKXt0aGlzLnNldEhlaWdodChiai5oZWlnaHQrdG9wKTt0aGlzLm1vdmVUbyhiaywwKTt9KTt9ZWxzZSBpZih0b3ArYmouaGVpZ2h0PmJpKXt0aGlzLl9hc3NlcnRTbGlkZUJhcihmdW5jdGlvbigpe3RoaXMuc2V0SGVpZ2h0KGJpLXRvcCk7fSk7fWVsc2V7dGhpcy5zZXRIZWlnaHQobnVsbCk7fX0sX2Fzc2VydFNsaWRlQmFyOmZ1bmN0aW9uKGJsKXtpZih0aGlzLmhhc0NoaWxkQ29udHJvbChsKSl7cmV0dXJuIGJsLmNhbGwodGhpcyk7fXRoaXMuX19xdz1ibDtxeC51aS5jb3JlLnF1ZXVlLldpZGdldC5hZGQodGhpcyk7fSxzeW5jV2lkZ2V0OmZ1bmN0aW9uKCl7dGhpcy5nZXRDaGlsZENvbnRyb2wobCk7aWYodGhpcy5fX3F3KXt0aGlzLl9fcXcuY2FsbCh0aGlzKTtkZWxldGUgdGhpcy5fX3F3O319LF9vblJlc2l6ZTpmdW5jdGlvbigpe2lmKHRoaXMuaXNWaXNpYmxlKCkpe3ZhciBibT10aGlzLl9wbGFjZW1lbnRUYXJnZXQ7aWYoIWJtKXtyZXR1cm47fWVsc2UgaWYoYm0gaW5zdGFuY2VvZiBxeC51aS5jb3JlLldpZGdldCl7dGhpcy5wbGFjZVRvV2lkZ2V0KGJtKTt9ZWxzZSBpZihibS50b3AhPT11bmRlZmluZWQpe3RoaXMucGxhY2VUb1BvaW50KGJtKTt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gdGFyZ2V0OiAiK2JtKTt9dGhpcy5fX3F5KCk7fX0sX29uTW91c2VPdmVyOmZ1bmN0aW9uKGUpe3ZhciBibz1xeC51aS5tZW51Lk1hbmFnZXIuZ2V0SW5zdGFuY2UoKTtiby5jYW5jZWxDbG9zZSh0aGlzKTt2YXIgYnA9ZS5nZXRUYXJnZXQoKTtpZihicC5pc0VuYWJsZWQoKSYmYnAgaW5zdGFuY2VvZiBxeC51aS5tZW51LkFic3RyYWN0QnV0dG9uKXt0aGlzLnNldFNlbGVjdGVkQnV0dG9uKGJwKTt2YXIgYm49YnAuZ2V0TWVudSYmYnAuZ2V0TWVudSgpO2lmKGJuKXtibi5zZXRPcGVuZXIoYnApO2JvLnNjaGVkdWxlT3Blbihibik7dGhpcy5fX3F2PWJuO31lbHNle3ZhciBicT10aGlzLmdldE9wZW5lZEJ1dHRvbigpO2lmKGJxKXtiby5zY2hlZHVsZUNsb3NlKGJxLmdldE1lbnUoKSk7fWlmKHRoaXMuX19xdil7Ym8uY2FuY2VsT3Blbih0aGlzLl9fcXYpO3RoaXMuX19xdj1udWxsO319fWVsc2UgaWYoIXRoaXMuZ2V0T3BlbmVkQnV0dG9uKCkpe3RoaXMucmVzZXRTZWxlY3RlZEJ1dHRvbigpO319LF9vbk1vdXNlT3V0OmZ1bmN0aW9uKGUpe3ZhciBicj1xeC51aS5tZW51Lk1hbmFnZXIuZ2V0SW5zdGFuY2UoKTtpZighcXgudWkuY29yZS5XaWRnZXQuY29udGFpbnModGhpcyxlLmdldFJlbGF0ZWRUYXJnZXQoKSkpe3ZhciBicz10aGlzLmdldE9wZW5lZEJ1dHRvbigpO2JzP3RoaXMuc2V0U2VsZWN0ZWRCdXR0b24oYnMpOnRoaXMucmVzZXRTZWxlY3RlZEJ1dHRvbigpO2lmKGJzKXtici5jYW5jZWxDbG9zZShicy5nZXRNZW51KCkpO31pZih0aGlzLl9fcXYpe2JyLmNhbmNlbE9wZW4odGhpcy5fX3F2KTt9fX19LGRlc3RydWN0OmZ1bmN0aW9uKCl7aWYoIXF4LmNvcmUuT2JqZWN0UmVnaXN0cnkuaW5TaHV0RG93bil7cXgudWkubWVudS5NYW5hZ2VyLmdldEluc3RhbmNlKCkucmVtb3ZlKHRoaXMpO310aGlzLmdldEFwcGxpY2F0aW9uUm9vdCgpLnJlbW92ZUxpc3RlbmVyKGosdGhpcy5fb25SZXNpemUsdGhpcyk7dGhpcy5fcGxhY2VtZW50VGFyZ2V0PW51bGw7dGhpcy5fZGlzcG9zZU9iamVjdHMoeCk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGM9IkludGVnZXIiLGI9Il9hcHBseUxheW91dENoYW5nZSIsYT0icXgudWkubWVudS5MYXlvdXQiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXgudWkubGF5b3V0LlZCb3gscHJvcGVydGllczp7Y29sdW1uU3BhY2luZzp7Y2hlY2s6Yyxpbml0OjAsYXBwbHk6Yn0sc3BhbkNvbHVtbjp7Y2hlY2s6Yyxpbml0OjEsbnVsbGFibGU6dHJ1ZSxhcHBseTpifSxpY29uQ29sdW1uV2lkdGg6e2NoZWNrOmMsaW5pdDowLHRoZW1lYWJsZTp0cnVlLGFwcGx5OmJ9LGFycm93Q29sdW1uV2lkdGg6e2NoZWNrOmMsaW5pdDowLHRoZW1lYWJsZTp0cnVlLGFwcGx5OmJ9fSxtZW1iZXJzOntfX3FtOm51bGwsX2NvbXB1dGVTaXplSGludDpmdW5jdGlvbigpe3ZhciBxPXRoaXMuX2dldExheW91dENoaWxkcmVuKCk7dmFyIG8sZyxqO3ZhciBlPXRoaXMuZ2V0U3BhbkNvbHVtbigpO3ZhciBoPXRoaXMuX19xbT1bMCwwLDAsMF07dmFyIG09dGhpcy5nZXRDb2x1bW5TcGFjaW5nKCk7dmFyIGs9MDt2YXIgZj0wO2Zvcih2YXIgaT0wLGw9cS5sZW5ndGg7aTxsO2krKyl7bz1xW2ldO2lmKG8uaXNBbm9ueW1vdXMoKSl7Y29udGludWU7fWc9by5nZXRDaGlsZHJlblNpemVzKCk7Zm9yKHZhciBuPTA7bjxnLmxlbmd0aDtuKyspe2lmKGUhPW51bGwmJm49PWUmJmdbZSsxXT09MCl7az1NYXRoLm1heChrLGdbbl0pO31lbHNle2hbbl09TWF0aC5tYXgoaFtuXSxnW25dKTt9fXZhciBkPXFbaV0uZ2V0SW5zZXRzKCk7Zj1NYXRoLm1heChmLGQubGVmdCtkLnJpZ2h0KTt9aWYoZSE9bnVsbCYmaFtlXSttK2hbZSsxXTxrKXtoW2VdPWstaFtlKzFdLW07fWlmKGs9PTApe2o9bSoyO31lbHNle2o9bSozO31pZihoWzBdPT0wKXtoWzBdPXRoaXMuZ2V0SWNvbkNvbHVtbldpZHRoKCk7fWlmKGhbM109PTApe2hbM109dGhpcy5nZXRBcnJvd0NvbHVtbldpZHRoKCk7fXZhciBwPXF4LnVpLmxheW91dC5WQm94LnByb3RvdHlwZS5fY29tcHV0ZVNpemVIaW50LmNhbGwodGhpcykuaGVpZ2h0O3JldHVybiB7bWluSGVpZ2h0OnAsaGVpZ2h0OnAsd2lkdGg6cXgubGFuZy5BcnJheS5zdW0oaCkrZitqfTt9LGdldENvbHVtblNpemVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19xbXx8bnVsbDt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19xbT1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBsPSJ6SW5kZXgiLGs9InB4IixqPSJrZXlkb3duIixoPSJkZWFjdGl2YXRlIixnPSJyZXNpemUiLGY9ImtleXVwIixkPSJrZXlwcmVzcyIsYz0iYmFja2dyb3VuZENvbG9yIixiPSJfYXBwbHlPcGFjaXR5IixhPSJCb29sZWFuIix4PSJfX3NnIix3PSJfX3NlIix2PSJvcGFjaXR5Iix1PSJpbnRlcnZhbCIsdD0iVGFiIixzPSJDb2xvciIscj0icXgudWkucm9vdC5QYWdlIixxPSJOdW1iZXIiLHA9InF4LnVpLmNvcmUuQmxvY2tlciIsbz0iX19zYyIsbT0icXgudWkucm9vdC5BcHBsaWNhdGlvbiIsbj0iX2FwcGx5Q29sb3IiO3F4LkNsYXNzLmRlZmluZShwLHtleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKHkpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7dGhpcy5fd2lkZ2V0PXk7dGhpcy5faXNQYWdlUm9vdD0ocXguQ2xhc3MuaXNEZWZpbmVkKHIpJiZ5IGluc3RhbmNlb2YgcXgudWkucm9vdC5QYWdlKTtpZih0aGlzLl9pc1BhZ2VSb290KXt5LmFkZExpc3RlbmVyKGcsdGhpcy5fX3NoLHRoaXMpO31pZihxeC5DbGFzcy5pc0RlZmluZWQobSkmJnkgaW5zdGFuY2VvZiBxeC51aS5yb290LkFwcGxpY2F0aW9uKXt0aGlzLnNldEtlZXBCbG9ja2VyQWN0aXZlKHRydWUpO310aGlzLl9fclk9W107dGhpcy5fX3NhPVtdO3RoaXMuX19zYj1bXTt9LHByb3BlcnRpZXM6e2NvbG9yOntjaGVjazpzLGluaXQ6bnVsbCxudWxsYWJsZTp0cnVlLGFwcGx5Om4sdGhlbWVhYmxlOnRydWV9LG9wYWNpdHk6e2NoZWNrOnEsaW5pdDoxLGFwcGx5OmIsdGhlbWVhYmxlOnRydWV9LGtlZXBCbG9ja2VyQWN0aXZlOntjaGVjazphLGluaXQ6ZmFsc2V9fSxtZW1iZXJzOntfX3NjOm51bGwsX19zZDowLF9fc2U6bnVsbCxfX3NiOm51bGwsX19yWTpudWxsLF9fc2E6bnVsbCxfX3NmOm51bGwsX19zZzpudWxsLF9pc1BhZ2VSb290OmZhbHNlLF93aWRnZXQ6bnVsbCxfX3NoOmZ1bmN0aW9uKGUpe3ZhciB6PWUuZ2V0RGF0YSgpO2lmKHRoaXMuaXNDb250ZW50QmxvY2tlZCgpKXt0aGlzLmdldENvbnRlbnRCbG9ja2VyRWxlbWVudCgpLnNldFN0eWxlcyh7d2lkdGg6ei53aWR0aCxoZWlnaHQ6ei5oZWlnaHR9KTt9aWYodGhpcy5pc0Jsb2NrZWQoKSl7dGhpcy5nZXRCbG9ja2VyRWxlbWVudCgpLnNldFN0eWxlcyh7d2lkdGg6ei53aWR0aCxoZWlnaHQ6ei5oZWlnaHR9KTt9fSxfYXBwbHlDb2xvcjpmdW5jdGlvbihBLEIpe3ZhciBDPXF4LnRoZW1lLm1hbmFnZXIuQ29sb3IuZ2V0SW5zdGFuY2UoKS5yZXNvbHZlKEEpO3RoaXMuX19zaShjLEMpO30sX2FwcGx5T3BhY2l0eTpmdW5jdGlvbihELEUpe3RoaXMuX19zaSh2LEQpO30sX19zaTpmdW5jdGlvbihGLEcpe3ZhciBIPVtdO3RoaXMuX19zYyYmSC5wdXNoKHRoaXMuX19zYyk7dGhpcy5fX3NlJiZILnB1c2godGhpcy5fX3NlKTtmb3IodmFyIGk9MDtpPEgubGVuZ3RoO2krKyl7SFtpXS5zZXRTdHlsZShGLEcpO319LF9iYWNrdXBBY3RpdmVXaWRnZXQ6ZnVuY3Rpb24oKXt2YXIgST1xeC5ldmVudC5SZWdpc3RyYXRpb24uZ2V0TWFuYWdlcih3aW5kb3cpLmdldEhhbmRsZXIocXguZXZlbnQuaGFuZGxlci5Gb2N1cyk7dGhpcy5fX3JZLnB1c2goSS5nZXRBY3RpdmUoKSk7dGhpcy5fX3NhLnB1c2goSS5nZXRGb2N1cygpKTtpZih0aGlzLl93aWRnZXQuaXNGb2N1c2FibGUoKSl7dGhpcy5fd2lkZ2V0LmZvY3VzKCk7fX0sX3Jlc3RvcmVBY3RpdmVXaWRnZXQ6ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9fclkubGVuZ3RoO2lmKEw+MCl7dmFyIEs9dGhpcy5fX3JZW0wtMV07aWYoSyl7cXguYm9tLkVsZW1lbnQuYWN0aXZhdGUoSyk7fXRoaXMuX19yWS5wb3AoKTt9dmFyIEo9dGhpcy5fX3NhLmxlbmd0aDtpZihKPjApe3ZhciBLPXRoaXMuX19zYVtKLTFdO2lmKEspe3F4LmJvbS5FbGVtZW50LmZvY3VzKHRoaXMuX19zYVtKLTFdKTt9dGhpcy5fX3NhLnBvcCgpO319LF9fc2o6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHF4Lmh0bWwuQmxvY2tlcih0aGlzLmdldENvbG9yKCksdGhpcy5nZXRPcGFjaXR5KCkpO30sZ2V0QmxvY2tlckVsZW1lbnQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fX3NjKXt0aGlzLl9fc2M9dGhpcy5fX3NqKCk7dGhpcy5fX3NjLnNldFN0eWxlKGwsMTUpO3RoaXMuX3dpZGdldC5nZXRDb250YWluZXJFbGVtZW50KCkuYWRkKHRoaXMuX19zYyk7dGhpcy5fX3NjLmV4Y2x1ZGUoKTt9cmV0dXJuIHRoaXMuX19zYzt9LGJsb2NrOmZ1bmN0aW9uKCl7dGhpcy5fX3NkKys7aWYodGhpcy5fX3NkPDIpe3RoaXMuX2JhY2t1cEFjdGl2ZVdpZGdldCgpO3ZhciBNPXRoaXMuZ2V0QmxvY2tlckVsZW1lbnQoKTtNLmluY2x1ZGUoKTtNLmFjdGl2YXRlKCk7TS5hZGRMaXN0ZW5lcihoLHRoaXMuX19zbyx0aGlzKTtNLmFkZExpc3RlbmVyKGQsdGhpcy5fX3NuLHRoaXMpO00uYWRkTGlzdGVuZXIoaix0aGlzLl9fc24sdGhpcyk7TS5hZGRMaXN0ZW5lcihmLHRoaXMuX19zbix0aGlzKTt9fSxpc0Jsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NkPjA7fSx1bmJsb2NrOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNCbG9ja2VkKCkpe3JldHVybjt9dGhpcy5fX3NkLS07aWYodGhpcy5fX3NkPDEpe3RoaXMuX19zaygpO3RoaXMuX19zZD0wO319LGZvcmNlVW5ibG9jazpmdW5jdGlvbigpe2lmKCF0aGlzLmlzQmxvY2tlZCgpKXtyZXR1cm47fXRoaXMuX19zZD0wO3RoaXMuX19zaygpO30sX19zazpmdW5jdGlvbigpe3RoaXMuX3Jlc3RvcmVBY3RpdmVXaWRnZXQoKTt2YXIgTj10aGlzLmdldEJsb2NrZXJFbGVtZW50KCk7Ti5yZW1vdmVMaXN0ZW5lcihoLHRoaXMuX19zbyx0aGlzKTtOLnJlbW92ZUxpc3RlbmVyKGQsdGhpcy5fX3NuLHRoaXMpO04ucmVtb3ZlTGlzdGVuZXIoaix0aGlzLl9fc24sdGhpcyk7Ti5yZW1vdmVMaXN0ZW5lcihmLHRoaXMuX19zbix0aGlzKTtOLmV4Y2x1ZGUoKTt9LGdldENvbnRlbnRCbG9ja2VyRWxlbWVudDpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2Upe3RoaXMuX19zZT10aGlzLl9fc2ooKTt0aGlzLl93aWRnZXQuZ2V0Q29udGVudEVsZW1lbnQoKS5hZGQodGhpcy5fX3NlKTt0aGlzLl9fc2UuZXhjbHVkZSgpO31yZXR1cm4gdGhpcy5fX3NlO30sYmxvY2tDb250ZW50OmZ1bmN0aW9uKE8pe3ZhciBQPXRoaXMuZ2V0Q29udGVudEJsb2NrZXJFbGVtZW50KCk7UC5zZXRTdHlsZShsLE8pO3RoaXMuX19zYi5wdXNoKE8pO2lmKHRoaXMuX19zYi5sZW5ndGg8Mil7UC5pbmNsdWRlKCk7aWYodGhpcy5faXNQYWdlUm9vdCl7aWYoIXRoaXMuX19zZyl7dGhpcy5fX3NnPW5ldyBxeC5ldmVudC5UaW1lcigzMDApO3RoaXMuX19zZy5hZGRMaXN0ZW5lcih1LHRoaXMuX19zbSx0aGlzKTt9dGhpcy5fX3NnLnN0YXJ0KCk7dGhpcy5fX3NtKCk7fX19LGlzQ29udGVudEJsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NiLmxlbmd0aD4wO30sdW5ibG9ja0NvbnRlbnQ6ZnVuY3Rpb24oKXtpZighdGhpcy5pc0NvbnRlbnRCbG9ja2VkKCkpe3JldHVybjt9dGhpcy5fX3NiLnBvcCgpO3ZhciBRPXRoaXMuX19zYlt0aGlzLl9fc2IubGVuZ3RoLTFdO3ZhciBSPXRoaXMuZ2V0Q29udGVudEJsb2NrZXJFbGVtZW50KCk7Ui5zZXRTdHlsZShsLFEpO2lmKHRoaXMuX19zYi5sZW5ndGg8MSl7dGhpcy5fX3NsKCk7dGhpcy5fX3NiPVtdO319LGZvcmNlVW5ibG9ja0NvbnRlbnQ6ZnVuY3Rpb24oKXtpZighdGhpcy5pc0NvbnRlbnRCbG9ja2VkKCkpe3JldHVybjt9dGhpcy5fX3NiPVtdO3ZhciBTPXRoaXMuZ2V0Q29udGVudEJsb2NrZXJFbGVtZW50KCk7Uy5zZXRTdHlsZShsLG51bGwpO3RoaXMuX19zbCgpO30sX19zbDpmdW5jdGlvbigpe3RoaXMuZ2V0Q29udGVudEJsb2NrZXJFbGVtZW50KCkuZXhjbHVkZSgpO2lmKHRoaXMuX2lzUGFnZVJvb3Qpe3RoaXMuX19zZy5zdG9wKCk7fX0sX19zbTpmdW5jdGlvbigpe3ZhciBUPXRoaXMuX3dpZGdldC5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0RG9tRWxlbWVudCgpO3ZhciBVPXF4LmRvbS5Ob2RlLmdldERvY3VtZW50KFQpO3RoaXMuZ2V0Q29udGVudEJsb2NrZXJFbGVtZW50KCkuc2V0U3R5bGVzKHtoZWlnaHQ6VS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0K2ssd2lkdGg6VS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGgra30pO30sX19zbjpmdW5jdGlvbihlKXtpZihlLmdldEtleUlkZW50aWZpZXIoKT09dCl7ZS5zdG9wKCk7fX0sX19zbzpmdW5jdGlvbigpe2lmKHRoaXMuZ2V0S2VlcEJsb2NrZXJBY3RpdmUoKSl7dGhpcy5nZXRCbG9ja2VyRWxlbWVudCgpLmFjdGl2YXRlKCk7fX19LGRlc3RydWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5faXNQYWdlUm9vdCl7dGhpcy5fd2lkZ2V0LnJlbW92ZUxpc3RlbmVyKGcsdGhpcy5fX3NoLHRoaXMpO310aGlzLl9kaXNwb3NlT2JqZWN0cyh3LG8seCk7dGhpcy5fX3NmPXRoaXMuX19yWT10aGlzLl9fc2E9dGhpcy5fd2lkZ2V0PXRoaXMuX19zYj1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBpPSJxeC51aS53aW5kb3cuV2luZG93IixoPSJjaGFuZ2VNb2RhbCIsZz0iY2hhbmdlVmlzaWJpbGl0eSIsZj0iY2hhbmdlQWN0aXZlIixkPSJfYXBwbHlBY3RpdmVXaW5kb3ciLGM9Il9fb2ciLGI9Il9fb2YiLGE9InF4LnVpLndpbmRvdy5NRGVza3RvcCI7cXguTWl4aW4uZGVmaW5lKGEse3Byb3BlcnRpZXM6e2FjdGl2ZVdpbmRvdzp7Y2hlY2s6aSxhcHBseTpkLGluaXQ6bnVsbCxudWxsYWJsZTp0cnVlfX0sbWVtYmVyczp7X19vZjpudWxsLF9fb2c6bnVsbCxnZXRXaW5kb3dNYW5hZ2VyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19vZyl7dGhpcy5zZXRXaW5kb3dNYW5hZ2VyKG5ldyBxeC51aS53aW5kb3cuV2luZG93LkRFRkFVTFRfTUFOQUdFUl9DTEFTUygpKTt9cmV0dXJuIHRoaXMuX19vZzt9LHN1cHBvcnRzTWF4aW1pemU6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9LHNldFdpbmRvd01hbmFnZXI6ZnVuY3Rpb24oail7aWYodGhpcy5fX29nKXt0aGlzLl9fb2cuc2V0RGVza3RvcChudWxsKTt9ai5zZXREZXNrdG9wKHRoaXMpO3RoaXMuX19vZz1qO30sX29uQ2hhbmdlQWN0aXZlOmZ1bmN0aW9uKGUpe2lmKGUuZ2V0RGF0YSgpKXt0aGlzLnNldEFjdGl2ZVdpbmRvdyhlLmdldFRhcmdldCgpKTt9ZWxzZSBpZih0aGlzLmdldEFjdGl2ZVdpbmRvdygpPT1lLmdldFRhcmdldCgpKXt0aGlzLnNldEFjdGl2ZVdpbmRvdyhudWxsKTt9fSxfYXBwbHlBY3RpdmVXaW5kb3c6ZnVuY3Rpb24oayxsKXt0aGlzLmdldFdpbmRvd01hbmFnZXIoKS5jaGFuZ2VBY3RpdmVXaW5kb3coayxsKTt0aGlzLmdldFdpbmRvd01hbmFnZXIoKS51cGRhdGVTdGFjaygpO30sX29uQ2hhbmdlTW9kYWw6ZnVuY3Rpb24oZSl7dGhpcy5nZXRXaW5kb3dNYW5hZ2VyKCkudXBkYXRlU3RhY2soKTt9LF9vbkNoYW5nZVZpc2liaWxpdHk6ZnVuY3Rpb24oKXt0aGlzLmdldFdpbmRvd01hbmFnZXIoKS51cGRhdGVTdGFjaygpO30sX2FmdGVyQWRkQ2hpbGQ6ZnVuY3Rpb24obSl7aWYocXguQ2xhc3MuaXNEZWZpbmVkKGkpJiZtIGluc3RhbmNlb2YgcXgudWkud2luZG93LldpbmRvdyl7dGhpcy5fYWRkV2luZG93KG0pO319LF9hZGRXaW5kb3c6ZnVuY3Rpb24obil7aWYoIXF4LmxhbmcuQXJyYXkuY29udGFpbnModGhpcy5nZXRXaW5kb3dzKCksbikpe3RoaXMuZ2V0V2luZG93cygpLnB1c2gobik7bi5hZGRMaXN0ZW5lcihmLHRoaXMuX29uQ2hhbmdlQWN0aXZlLHRoaXMpO24uYWRkTGlzdGVuZXIoaCx0aGlzLl9vbkNoYW5nZU1vZGFsLHRoaXMpO24uYWRkTGlzdGVuZXIoZyx0aGlzLl9vbkNoYW5nZVZpc2liaWxpdHksdGhpcyk7fWlmKG4uZ2V0QWN0aXZlKCkpe3RoaXMuc2V0QWN0aXZlV2luZG93KG4pO310aGlzLmdldFdpbmRvd01hbmFnZXIoKS51cGRhdGVTdGFjaygpO30sX2FmdGVyUmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24obyl7aWYocXguQ2xhc3MuaXNEZWZpbmVkKGkpJiZvIGluc3RhbmNlb2YgcXgudWkud2luZG93LldpbmRvdyl7dGhpcy5fcmVtb3ZlV2luZG93KG8pO319LF9yZW1vdmVXaW5kb3c6ZnVuY3Rpb24ocCl7cXgubGFuZy5BcnJheS5yZW1vdmUodGhpcy5nZXRXaW5kb3dzKCkscCk7cC5yZW1vdmVMaXN0ZW5lcihmLHRoaXMuX29uQ2hhbmdlQWN0aXZlLHRoaXMpO3AucmVtb3ZlTGlzdGVuZXIoaCx0aGlzLl9vbkNoYW5nZU1vZGFsLHRoaXMpO3AucmVtb3ZlTGlzdGVuZXIoZyx0aGlzLl9vbkNoYW5nZVZpc2liaWxpdHksdGhpcyk7dGhpcy5nZXRXaW5kb3dNYW5hZ2VyKCkudXBkYXRlU3RhY2soKTt9LGdldFdpbmRvd3M6ZnVuY3Rpb24oKXtpZighdGhpcy5fX29mKXt0aGlzLl9fb2Y9W107fXJldHVybiB0aGlzLl9fb2Y7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlQXJyYXkoYik7dGhpcy5fZGlzcG9zZU9iamVjdHMoYyk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGY9Il9hcHBseUJsb2NrZXJDb2xvciIsZT0iTnVtYmVyIixkPSJfX3JRIixjPSJxeC51aS5jb3JlLk1CbG9ja2VyIixiPSJfYXBwbHlCbG9ja2VyT3BhY2l0eSIsYT0iQ29sb3IiO3F4Lk1peGluLmRlZmluZShjLHtjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9fclE9bmV3IHF4LnVpLmNvcmUuQmxvY2tlcih0aGlzKTt9LHByb3BlcnRpZXM6e2Jsb2NrZXJDb2xvcjp7Y2hlY2s6YSxpbml0Om51bGwsbnVsbGFibGU6dHJ1ZSxhcHBseTpmLHRoZW1lYWJsZTp0cnVlfSxibG9ja2VyT3BhY2l0eTp7Y2hlY2s6ZSxpbml0OjEsYXBwbHk6Yix0aGVtZWFibGU6dHJ1ZX19LG1lbWJlcnM6e19fclE6bnVsbCxfYXBwbHlCbG9ja2VyQ29sb3I6ZnVuY3Rpb24oZyxoKXt0aGlzLl9fclEuc2V0Q29sb3IoZyk7fSxfYXBwbHlCbG9ja2VyT3BhY2l0eTpmdW5jdGlvbihpLGope3RoaXMuX19yUS5zZXRPcGFjaXR5KGkpO30sYmxvY2s6ZnVuY3Rpb24oKXt0aGlzLl9fclEuYmxvY2soKTt9LGlzQmxvY2tlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fclEuaXNCbG9ja2VkKCk7fSx1bmJsb2NrOmZ1bmN0aW9uKCl7dGhpcy5fX3JRLnVuYmxvY2soKTt9LGZvcmNlVW5ibG9jazpmdW5jdGlvbigpe3RoaXMuX19yUS5mb3JjZVVuYmxvY2soKTt9LGJsb2NrQ29udGVudDpmdW5jdGlvbihrKXt0aGlzLl9fclEuYmxvY2tDb250ZW50KGspO30saXNDb250ZW50QmxvY2tlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fclEuaXNDb250ZW50QmxvY2tlZCgpO30sdW5ibG9ja0NvbnRlbnQ6ZnVuY3Rpb24oKXt0aGlzLl9fclEudW5ibG9ja0NvbnRlbnQoKTt9LGZvcmNlVW5ibG9ja0NvbnRlbnQ6ZnVuY3Rpb24oKXt0aGlzLl9fclEuZm9yY2VVbmJsb2NrQ29udGVudCgpO30sZ2V0QmxvY2tlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fclE7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlT2JqZWN0cyhkKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgcD0iY29udGV4dG1lbnUiLG89ImhlbHAiLG49InF4LmNsaWVudCIsbT0iY2hhbmdlR2xvYmFsQ3Vyc29yIixsPSJhYnN0cmFjdCIsaz0iQm9vbGVhbiIsaj0icm9vdCIsaT0iIixoPSIgIWltcG9ydGFudCIsZz0iX2FwcGx5R2xvYmFsQ3Vyc29yIixjPSJfYXBwbHlOYXRpdmVIZWxwIixmPSI7IixkPSJxeC51aS5yb290LkFic3RyYWN0IixiPSJTdHJpbmciLGE9IioiO3F4LkNsYXNzLmRlZmluZShkLHt0eXBlOmwsZXh0ZW5kOnF4LnVpLmNvcmUuV2lkZ2V0LGluY2x1ZGU6W3F4LnVpLmNvcmUuTUNoaWxkcmVuSGFuZGxpbmcscXgudWkuY29yZS5NQmxvY2tlcixxeC51aS53aW5kb3cuTURlc2t0b3BdLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnVpLmNvcmUuV2lkZ2V0LmNhbGwodGhpcyk7cXgudWkuY29yZS5Gb2N1c0hhbmRsZXIuZ2V0SW5zdGFuY2UoKS5hZGRSb290KHRoaXMpO3F4LnVpLmNvcmUucXVldWUuVmlzaWJpbGl0eS5hZGQodGhpcyk7dGhpcy5pbml0TmF0aXZlSGVscCgpO30scHJvcGVydGllczp7YXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDpqfSxlbmFibGVkOntyZWZpbmU6dHJ1ZSxpbml0OnRydWV9LGZvY3VzYWJsZTp7cmVmaW5lOnRydWUsaW5pdDp0cnVlfSxnbG9iYWxDdXJzb3I6e2NoZWNrOmIsbnVsbGFibGU6dHJ1ZSx0aGVtZWFibGU6dHJ1ZSxhcHBseTpnLGV2ZW50Om19LG5hdGl2ZUNvbnRleHRNZW51OntyZWZpbmU6dHJ1ZSxpbml0OmZhbHNlfSxuYXRpdmVIZWxwOntjaGVjazprLGluaXQ6ZmFsc2UsYXBwbHk6Y319LG1lbWJlcnM6e19fbVM6bnVsbCxpc1Jvb3RXaWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9LGdldExheW91dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRMYXlvdXQoKTt9LF9hcHBseUdsb2JhbEN1cnNvcjpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KG4seyJtc2h0bWwiOmZ1bmN0aW9uKHEscil7fSwiZGVmYXVsdCI6ZnVuY3Rpb24ocyx0KXt2YXIgdT1xeC5ib20uU3R5bGVzaGVldDt2YXIgdj10aGlzLl9fbVM7aWYoIXYpe3RoaXMuX19tUz12PXUuY3JlYXRlRWxlbWVudCgpO311LnJlbW92ZUFsbFJ1bGVzKHYpO2lmKHMpe3UuYWRkUnVsZSh2LGEscXguYm9tLmVsZW1lbnQuQ3Vyc29yLmNvbXBpbGUocykucmVwbGFjZShmLGkpK2gpO319fSksX2FwcGx5TmF0aXZlQ29udGV4dE1lbnU6ZnVuY3Rpb24odyx4KXtpZih3KXt0aGlzLnJlbW92ZUxpc3RlbmVyKHAsdGhpcy5fb25OYXRpdmVDb250ZXh0TWVudSx0aGlzLHRydWUpO31lbHNle3RoaXMuYWRkTGlzdGVuZXIocCx0aGlzLl9vbk5hdGl2ZUNvbnRleHRNZW51LHRoaXMsdHJ1ZSk7fX0sX29uTmF0aXZlQ29udGV4dE1lbnU6ZnVuY3Rpb24oZSl7aWYoZS5nZXRUYXJnZXQoKS5nZXROYXRpdmVDb250ZXh0TWVudSgpKXtyZXR1cm47fWUucHJldmVudERlZmF1bHQoKTt9LF9hcHBseU5hdGl2ZUhlbHA6cXguY29yZS5WYXJpYW50LnNlbGVjdChuLHsibXNodG1sIjpmdW5jdGlvbih5LHope2lmKHo9PT1mYWxzZSl7cXguYm9tLkV2ZW50LnJlbW92ZU5hdGl2ZUxpc3RlbmVyKGRvY3VtZW50LG8scXgubGFuZy5GdW5jdGlvbi5yZXR1cm5GYWxzZSk7fWlmKHk9PT1mYWxzZSl7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKGRvY3VtZW50LG8scXgubGFuZy5GdW5jdGlvbi5yZXR1cm5GYWxzZSk7fX0sImRlZmF1bHQiOmZ1bmN0aW9uKCl7fX0pfSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19tUz1udWxsO30sZGVmZXI6ZnVuY3Rpb24oQSxCKXtxeC51aS5jb3JlLk1DaGlsZHJlbkhhbmRsaW5nLnJlbWFwKEIpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBuPSJyZXNpemUiLG09InBvc2l0aW9uIixsPSIwcHgiLGs9IndlYmtpdCIsaj0icGFkZGluZ0xlZnQiLGk9IiQkd2lkZ2V0IixoPSJxeC51aS5yb290LkFwcGxpY2F0aW9uIixnPSJoaWRkZW4iLGY9InF4LmNsaWVudCIsZD0iZGl2IixhPSJwYWRkaW5nVG9wIixjPSIxMDAlIixiPSJhYnNvbHV0ZSI7cXguQ2xhc3MuZGVmaW5lKGgse2V4dGVuZDpxeC51aS5yb290LkFic3RyYWN0LGNvbnN0cnVjdDpmdW5jdGlvbihvKXt0aGlzLl9fcGo9cXguZG9tLk5vZGUuZ2V0V2luZG93KG8pO3RoaXMuX19waz1vO3F4LnVpLnJvb3QuQWJzdHJhY3QuY2FsbCh0aGlzKTtxeC5ldmVudC5SZWdpc3RyYXRpb24uYWRkTGlzdGVuZXIodGhpcy5fX3BqLG4sdGhpcy5fb25SZXNpemUsdGhpcyk7dGhpcy5fc2V0TGF5b3V0KG5ldyBxeC51aS5sYXlvdXQuQ2FudmFzKCkpO3F4LnVpLmNvcmUucXVldWUuTGF5b3V0LmFkZCh0aGlzKTtxeC51aS5jb3JlLkZvY3VzSGFuZGxlci5nZXRJbnN0YW5jZSgpLmNvbm5lY3RUbyh0aGlzKTt0aGlzLmdldENvbnRlbnRFbGVtZW50KCkuZGlzYWJsZVNjcm9sbGluZygpO30sbWVtYmVyczp7X19wajpudWxsLF9fcGs6bnVsbCxfY3JlYXRlQ29udGFpbmVyRWxlbWVudDpmdW5jdGlvbigpe3ZhciBwPXRoaXMuX19waztpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoZixrKSl7aWYoIXAuYm9keSl7YWxlcnQoIlRoZSBhcHBsaWNhdGlvbiBjb3VsZCBub3QgYmUgc3RhcnRlZCBkdWUgdG8gYSBtaXNzaW5nIGJvZHkgdGFnIGluIHRoZSBIVE1MIGZpbGUhIik7fX12YXIgdD1wLmRvY3VtZW50RWxlbWVudC5zdHlsZTt2YXIgcT1wLmJvZHkuc3R5bGU7dC5vdmVyZmxvdz1xLm92ZXJmbG93PWc7dC5wYWRkaW5nPXQubWFyZ2luPXEucGFkZGluZz1xLm1hcmdpbj1sO3Qud2lkdGg9dC5oZWlnaHQ9cS53aWR0aD1xLmhlaWdodD1jO3ZhciBzPXAuY3JlYXRlRWxlbWVudChkKTtwLmJvZHkuYXBwZW5kQ2hpbGQocyk7dmFyIHI9bmV3IHF4Lmh0bWwuUm9vdChzKTtyLnNldFN0eWxlKG0sYik7ci5zZXRBdHRyaWJ1dGUoaSx0aGlzLnRvSGFzaENvZGUoKSk7cmV0dXJuIHI7fSxfb25SZXNpemU6ZnVuY3Rpb24oZSl7cXgudWkuY29yZS5xdWV1ZS5MYXlvdXQuYWRkKHRoaXMpO30sX2NvbXB1dGVTaXplSGludDpmdW5jdGlvbigpe3ZhciB1PXF4LmJvbS5WaWV3cG9ydC5nZXRXaWR0aCh0aGlzLl9fcGopO3ZhciB2PXF4LmJvbS5WaWV3cG9ydC5nZXRIZWlnaHQodGhpcy5fX3BqKTtyZXR1cm4ge21pbldpZHRoOnUsd2lkdGg6dSxtYXhXaWR0aDp1LG1pbkhlaWdodDp2LGhlaWdodDp2LG1heEhlaWdodDp2fTt9LF9hcHBseVBhZGRpbmc6ZnVuY3Rpb24odyx4LG5hbWUpe2lmKHcmJihuYW1lPT1hfHxuYW1lPT1qKSl7dGhyb3cgbmV3IEVycm9yKCJUaGUgcm9vdCB3aWRnZXQgZG9lcyBub3Qgc3VwcG9ydCAnbGVmdCcsIG9yICd0b3AnIHBhZGRpbmdzISIpO31xeC51aS5yb290LkFic3RyYWN0LnByb3RvdHlwZS5fYXBwbHlQYWRkaW5nLmNhbGwodGhpcyx3LHgsbmFtZSk7fSxfYXBwbHlEZWNvcmF0b3I6ZnVuY3Rpb24oeSx6KXtxeC51aS5yb290LkFic3RyYWN0LnByb3RvdHlwZS5fYXBwbHlEZWNvcmF0b3IuY2FsbCh0aGlzLHkseik7aWYoIXkpe3JldHVybjt9dmFyIEE9dGhpcy5nZXREZWNvcmF0b3JFbGVtZW50KCkuZ2V0SW5zZXRzKCk7aWYoQS5sZWZ0fHxBLnRvcCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgcm9vdCB3aWRnZXQgZG9lcyBub3Qgc3VwcG9ydCBkZWNvcmF0b3JzIHdpdGggJ2xlZnQnLCBvciAndG9wJyBpbnNldHMhIik7fX19LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX3BqPXRoaXMuX19waz1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSJrZXlwcmVzcyIsaj0iZm9jdXNvdXQiLGg9ImFjdGl2YXRlIixnPSJUYWIiLGY9InNpbmdsZXRvbiIsZD0iX19iRSIsYz0iZGVhY3RpdmF0ZSIsYj0iZm9jdXNpbiIsYT0icXgudWkuY29yZS5Gb2N1c0hhbmRsZXIiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXguY29yZS5PYmplY3QsdHlwZTpmLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7dGhpcy5fX2JFPXt9O30sbWVtYmVyczp7X19iRTpudWxsLF9fYkY6bnVsbCxfX2JHOm51bGwsX19iSDpudWxsLGNvbm5lY3RUbzpmdW5jdGlvbihtKXttLmFkZExpc3RlbmVyKGssdGhpcy5fX2JJLHRoaXMpO20uYWRkTGlzdGVuZXIoYix0aGlzLl9vbkZvY3VzSW4sdGhpcyx0cnVlKTttLmFkZExpc3RlbmVyKGosdGhpcy5fb25Gb2N1c091dCx0aGlzLHRydWUpO20uYWRkTGlzdGVuZXIoaCx0aGlzLl9vbkFjdGl2YXRlLHRoaXMsdHJ1ZSk7bS5hZGRMaXN0ZW5lcihjLHRoaXMuX29uRGVhY3RpdmF0ZSx0aGlzLHRydWUpO30sYWRkUm9vdDpmdW5jdGlvbihuKXt0aGlzLl9fYkVbbi4kJGhhc2hdPW47fSxyZW1vdmVSb290OmZ1bmN0aW9uKG8pe2RlbGV0ZSB0aGlzLl9fYkVbby4kJGhhc2hdO30sZ2V0QWN0aXZlV2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19iRjt9LGlzQWN0aXZlOmZ1bmN0aW9uKHApe3JldHVybiB0aGlzLl9fYkY9PXA7fSxnZXRGb2N1c2VkV2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19iRzt9LGlzRm9jdXNlZDpmdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5fX2JHPT1xO30saXNGb2N1c1Jvb3Q6ZnVuY3Rpb24ocil7cmV0dXJuICEhdGhpcy5fX2JFW3IuJCRoYXNoXTt9LF9vbkFjdGl2YXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0VGFyZ2V0KCk7dGhpcy5fX2JGPXQ7dmFyIHM9dGhpcy5fX2JKKHQpO2lmKHMhPXRoaXMuX19iSCl7dGhpcy5fX2JIPXM7fX0sX29uRGVhY3RpdmF0ZTpmdW5jdGlvbihlKXt2YXIgdT1lLmdldFRhcmdldCgpO2lmKHRoaXMuX19iRj09dSl7dGhpcy5fX2JGPW51bGw7fX0sX29uRm9jdXNJbjpmdW5jdGlvbihlKXt2YXIgdj1lLmdldFRhcmdldCgpO2lmKHYhPXRoaXMuX19iRyl7dGhpcy5fX2JHPXY7di52aXN1YWxpemVGb2N1cygpO319LF9vbkZvY3VzT3V0OmZ1bmN0aW9uKGUpe3ZhciB3PWUuZ2V0VGFyZ2V0KCk7aWYodz09dGhpcy5fX2JHKXt0aGlzLl9fYkc9bnVsbDt3LnZpc3VhbGl6ZUJsdXIoKTt9fSxfX2JJOmZ1bmN0aW9uKGUpe2lmKGUuZ2V0S2V5SWRlbnRpZmllcigpIT1nKXtyZXR1cm47fWlmKCF0aGlzLl9fYkgpe3JldHVybjt9ZS5zdG9wUHJvcGFnYXRpb24oKTtlLnByZXZlbnREZWZhdWx0KCk7dmFyIHg9dGhpcy5fX2JHO2lmKCFlLmlzU2hpZnRQcmVzc2VkKCkpe3ZhciB5PXg/dGhpcy5fX2JOKHgpOnRoaXMuX19iTCgpO31lbHNle3ZhciB5PXg/dGhpcy5fX2JPKHgpOnRoaXMuX19iTSgpO31pZih5KXt5LnRhYkZvY3VzKCk7fX0sX19iSjpmdW5jdGlvbih6KXt2YXIgQT10aGlzLl9fYkU7d2hpbGUoeil7aWYoQVt6LiQkaGFzaF0pe3JldHVybiB6O316PXouZ2V0TGF5b3V0UGFyZW50KCk7fXJldHVybiBudWxsO30sX19iSzpmdW5jdGlvbihCLEMpe2lmKEI9PT1DKXtyZXR1cm4gMDt9dmFyIEU9Qi5nZXRUYWJJbmRleCgpfHwwO3ZhciBEPUMuZ2V0VGFiSW5kZXgoKXx8MDtpZihFIT1EKXtyZXR1cm4gRS1EO312YXIgSj1CLmdldENvbnRhaW5lckVsZW1lbnQoKS5nZXREb21FbGVtZW50KCk7dmFyIEk9Qy5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0RG9tRWxlbWVudCgpO3ZhciBIPXF4LmJvbS5lbGVtZW50LkxvY2F0aW9uO3ZhciBHPUguZ2V0KEopO3ZhciBGPUguZ2V0KEkpO2lmKEcudG9wIT1GLnRvcCl7cmV0dXJuIEcudG9wLUYudG9wO31pZihHLmxlZnQhPUYubGVmdCl7cmV0dXJuIEcubGVmdC1GLmxlZnQ7fXZhciBLPUIuZ2V0WkluZGV4KCk7dmFyIEw9Qy5nZXRaSW5kZXgoKTtpZihLIT1MKXtyZXR1cm4gSy1MO31yZXR1cm4gMDt9LF9fYkw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2JSKHRoaXMuX19iSCxudWxsKTt9LF9fYk06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2JTKHRoaXMuX19iSCxudWxsKTt9LF9fYk46ZnVuY3Rpb24oTSl7dmFyIE49dGhpcy5fX2JIO2lmKE49PU0pe3JldHVybiB0aGlzLl9fYkwoKTt9d2hpbGUoTSYmTS5nZXRBbm9ueW1vdXMoKSl7TT1NLmdldExheW91dFBhcmVudCgpO31pZihNPT1udWxsKXtyZXR1cm4gW107fXZhciBPPVtdO3RoaXMuX19iUChOLE0sTyk7Ty5zb3J0KHRoaXMuX19iSyk7dmFyIFA9Ty5sZW5ndGg7cmV0dXJuIFA+MD9PWzBdOnRoaXMuX19iTCgpO30sX19iTzpmdW5jdGlvbihRKXt2YXIgUj10aGlzLl9fYkg7aWYoUj09USl7cmV0dXJuIHRoaXMuX19iTSgpO313aGlsZShRJiZRLmdldEFub255bW91cygpKXtRPVEuZ2V0TGF5b3V0UGFyZW50KCk7fWlmKFE9PW51bGwpe3JldHVybiBbXTt9dmFyIFM9W107dGhpcy5fX2JRKFIsUSxTKTtTLnNvcnQodGhpcy5fX2JLKTt2YXIgVD1TLmxlbmd0aDtyZXR1cm4gVD4wP1NbVC0xXTp0aGlzLl9fYk0oKTt9LF9fYlA6ZnVuY3Rpb24ocGFyZW50LFUsVil7dmFyIFc9cGFyZW50LmdldExheW91dENoaWxkcmVuKCk7dmFyIFg7Zm9yKHZhciBpPTAsbD1XLmxlbmd0aDtpPGw7aSsrKXtYPVdbaV07aWYoIShYIGluc3RhbmNlb2YgcXgudWkuY29yZS5XaWRnZXQpKXtjb250aW51ZTt9aWYoIXRoaXMuaXNGb2N1c1Jvb3QoWCkmJlguaXNFbmFibGVkKCkmJlguaXNWaXNpYmxlKCkpe2lmKFguaXNUYWJhYmxlKCkmJnRoaXMuX19iSyhVLFgpPDApe1YucHVzaChYKTt9dGhpcy5fX2JQKFgsVSxWKTt9fX0sX19iUTpmdW5jdGlvbihwYXJlbnQsWSxiYSl7dmFyIGJiPXBhcmVudC5nZXRMYXlvdXRDaGlsZHJlbigpO3ZhciBiYztmb3IodmFyIGk9MCxsPWJiLmxlbmd0aDtpPGw7aSsrKXtiYz1iYltpXTtpZighKGJjIGluc3RhbmNlb2YgcXgudWkuY29yZS5XaWRnZXQpKXtjb250aW51ZTt9aWYoIXRoaXMuaXNGb2N1c1Jvb3QoYmMpJiZiYy5pc0VuYWJsZWQoKSYmYmMuaXNWaXNpYmxlKCkpe2lmKGJjLmlzVGFiYWJsZSgpJiZ0aGlzLl9fYksoWSxiYyk+MCl7YmEucHVzaChiYyk7fXRoaXMuX19iUShiYyxZLGJhKTt9fX0sX19iUjpmdW5jdGlvbihwYXJlbnQsYmQpe3ZhciBiZT1wYXJlbnQuZ2V0TGF5b3V0Q2hpbGRyZW4oKTt2YXIgYmY7Zm9yKHZhciBpPTAsbD1iZS5sZW5ndGg7aTxsO2krKyl7YmY9YmVbaV07aWYoIShiZiBpbnN0YW5jZW9mIHF4LnVpLmNvcmUuV2lkZ2V0KSl7Y29udGludWU7fWlmKCF0aGlzLmlzRm9jdXNSb290KGJmKSYmYmYuaXNFbmFibGVkKCkmJmJmLmlzVmlzaWJsZSgpKXtpZihiZi5pc1RhYmFibGUoKSl7aWYoYmQ9PW51bGx8fHRoaXMuX19iSyhiZixiZCk8MCl7YmQ9YmY7fX1iZD10aGlzLl9fYlIoYmYsYmQpO319cmV0dXJuIGJkO30sX19iUzpmdW5jdGlvbihwYXJlbnQsYmcpe3ZhciBiaD1wYXJlbnQuZ2V0TGF5b3V0Q2hpbGRyZW4oKTt2YXIgYmk7Zm9yKHZhciBpPTAsbD1iaC5sZW5ndGg7aTxsO2krKyl7Ymk9YmhbaV07aWYoIShiaSBpbnN0YW5jZW9mIHF4LnVpLmNvcmUuV2lkZ2V0KSl7Y29udGludWU7fWlmKCF0aGlzLmlzRm9jdXNSb290KGJpKSYmYmkuaXNFbmFibGVkKCkmJmJpLmlzVmlzaWJsZSgpKXtpZihiaS5pc1RhYmFibGUoKSl7aWYoYmc9PW51bGx8fHRoaXMuX19iSyhiaSxiZyk+MCl7Ymc9Ymk7fX1iZz10aGlzLl9fYlMoYmksYmcpO319cmV0dXJuIGJnO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fZGlzcG9zZU1hcChkKTt0aGlzLl9fYkc9dGhpcy5fX2JGPXRoaXMuX19iSD1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC5odG1sLlJvb3QiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXguaHRtbC5FbGVtZW50LGNvbnN0cnVjdDpmdW5jdGlvbihiKXtxeC5odG1sLkVsZW1lbnQuY2FsbCh0aGlzKTtpZihiIT1udWxsKXt0aGlzLnVzZUVsZW1lbnQoYik7fX0sbWVtYmVyczp7dXNlRWxlbWVudDpmdW5jdGlvbihjKXtxeC5odG1sLkVsZW1lbnQucHJvdG90eXBlLnVzZUVsZW1lbnQuY2FsbCh0aGlzLGMpO3RoaXMuc2V0Um9vdCh0cnVlKTtxeC5odG1sLkVsZW1lbnQuX21vZGlmaWVkW3RoaXMuJCRoYXNoXT10aGlzO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaz0iY3Vyc29yIixqPSIxMDAlIixpPSJyZXBlYXQiLGg9Im1vdXNlZG93biIsZz0idXJsKCIsZj0iKSIsZD0ibW91c2VvdXQiLGM9InF4LmNsaWVudCIsYj0iZGl2IixhPSJkYmxjbGljayIsdz0ibW91c2V3aGVlbCIsdj0icXguaHRtbC5CbG9ja2VyIix1PSJtb3VzZW1vdmUiLHQ9Im1vdXNlb3ZlciIscz0iYXBwZWFyIixyPSJjbGljayIscT0ibXNodG1sIixwPSJtb3VzZXVwIixvPSJjb250ZXh0bWVudSIsbj0iZGlzYXBwZWFyIixsPSJxeC9zdGF0aWMvYmxhbmsuZ2lmIixtPSJhYnNvbHV0ZSI7cXguQ2xhc3MuZGVmaW5lKHYse2V4dGVuZDpxeC5odG1sLkVsZW1lbnQsY29uc3RydWN0OmZ1bmN0aW9uKHgseSl7dmFyIHg9eD9xeC50aGVtZS5tYW5hZ2VyLkNvbG9yLmdldEluc3RhbmNlKCkucmVzb2x2ZSh4KTpudWxsO3ZhciB6PXtwb3NpdGlvbjptLHdpZHRoOmosaGVpZ2h0Omosb3BhY2l0eTp5fHwwLGJhY2tncm91bmRDb2xvcjp4fTtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoYyxxKSl7ei5iYWNrZ3JvdW5kSW1hZ2U9ZytxeC51dGlsLlJlc291cmNlTWFuYWdlci5nZXRJbnN0YW5jZSgpLnRvVXJpKGwpK2Y7ei5iYWNrZ3JvdW5kUmVwZWF0PWk7fXF4Lmh0bWwuRWxlbWVudC5jYWxsKHRoaXMsYix6KTt0aGlzLmFkZExpc3RlbmVyKGgsdGhpcy5fc3RvcFByb3BhZ2F0aW9uLHRoaXMpO3RoaXMuYWRkTGlzdGVuZXIocCx0aGlzLl9zdG9wUHJvcGFnYXRpb24sdGhpcyk7dGhpcy5hZGRMaXN0ZW5lcihyLHRoaXMuX3N0b3BQcm9wYWdhdGlvbix0aGlzKTt0aGlzLmFkZExpc3RlbmVyKGEsdGhpcy5fc3RvcFByb3BhZ2F0aW9uLHRoaXMpO3RoaXMuYWRkTGlzdGVuZXIodSx0aGlzLl9zdG9wUHJvcGFnYXRpb24sdGhpcyk7dGhpcy5hZGRMaXN0ZW5lcih0LHRoaXMuX3N0b3BQcm9wYWdhdGlvbix0aGlzKTt0aGlzLmFkZExpc3RlbmVyKGQsdGhpcy5fc3RvcFByb3BhZ2F0aW9uLHRoaXMpO3RoaXMuYWRkTGlzdGVuZXIodyx0aGlzLl9zdG9wUHJvcGFnYXRpb24sdGhpcyk7dGhpcy5hZGRMaXN0ZW5lcihvLHRoaXMuX3N0b3BQcm9wYWdhdGlvbix0aGlzKTt0aGlzLmFkZExpc3RlbmVyKHMsdGhpcy5fX3FwLHRoaXMpO3RoaXMuYWRkTGlzdGVuZXIobix0aGlzLl9fcXAsdGhpcyk7fSxtZW1iZXJzOntfc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7fSxfX3FwOmZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5nZXRTdHlsZShrKTt0aGlzLnNldFN0eWxlKGssbnVsbCx0cnVlKTt0aGlzLnNldFN0eWxlKGssQSx0cnVlKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9Im1lbnUtc2VwYXJhdG9yIixhPSJxeC51aS5tZW51LlNlcGFyYXRvciI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC51aS5jb3JlLldpZGdldCxwcm9wZXJ0aWVzOnthcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0OmJ9LGFub255bW91czp7cmVmaW5lOnRydWUsaW5pdDp0cnVlfX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciB0PSJpY29uIixzPSJsYWJlbCIscj0iYXJyb3ciLHE9InNob3J0Y3V0IixwPSJjaGFuZ2VMb2NhbGUiLG89InF4LmR5bmxvY2FsZSIsbj0ic3VibWVudSIsbT0ib24iLGw9IlN0cmluZyIsaz0icXgudWkubWVudS5NZW51IixkPSJxeC51aS5tZW51LkFic3RyYWN0QnV0dG9uIixqPSJrZXlwcmVzcyIsaD0iIixjPSJfYXBwbHlJY29uIixiPSJtb3VzZXVwIixnPSJhYnN0cmFjdCIsZj0iX2FwcGx5TGFiZWwiLGk9Il9hcHBseU1lbnUiLGE9ImNoYW5nZUNvbW1hbmQiO3F4LkNsYXNzLmRlZmluZShkLHtleHRlbmQ6cXgudWkuY29yZS5XaWRnZXQsaW5jbHVkZTpbcXgudWkuY29yZS5NRXhlY3V0YWJsZV0saW1wbGVtZW50OltxeC51aS5mb3JtLklFeGVjdXRhYmxlXSx0eXBlOmcsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXgudWkuY29yZS5XaWRnZXQuY2FsbCh0aGlzKTt0aGlzLl9zZXRMYXlvdXQobmV3IHF4LnVpLm1lbnUuQnV0dG9uTGF5b3V0KTt0aGlzLmFkZExpc3RlbmVyKGIsdGhpcy5fb25Nb3VzZVVwKTt0aGlzLmFkZExpc3RlbmVyKGosdGhpcy5fb25LZXlQcmVzcyk7dGhpcy5hZGRMaXN0ZW5lcihhLHRoaXMuX29uQ2hhbmdlQ29tbWFuZCx0aGlzKTt9LHByb3BlcnRpZXM6e2Jsb2NrVG9vbFRpcDp7cmVmaW5lOnRydWUsaW5pdDp0cnVlfSxsYWJlbDp7Y2hlY2s6bCxhcHBseTpmLG51bGxhYmxlOnRydWV9LG1lbnU6e2NoZWNrOmssYXBwbHk6aSxudWxsYWJsZTp0cnVlLGRlcmVmZXJlbmNlOnRydWV9LGljb246e2NoZWNrOmwsYXBwbHk6Yyx0aGVtZWFibGU6dHJ1ZSxudWxsYWJsZTp0cnVlfX0sbWVtYmVyczp7X2NyZWF0ZUNoaWxkQ29udHJvbEltcGw6ZnVuY3Rpb24odSx2KXt2YXIgdztzd2l0Y2godSl7Y2FzZSB0Onc9bmV3IHF4LnVpLmJhc2ljLkltYWdlO3cuc2V0QW5vbnltb3VzKHRydWUpO3RoaXMuX2FkZCh3LHtjb2x1bW46MH0pO2JyZWFrO2Nhc2Ugczp3PW5ldyBxeC51aS5iYXNpYy5MYWJlbDt3LnNldEFub255bW91cyh0cnVlKTt0aGlzLl9hZGQodyx7Y29sdW1uOjF9KTticmVhaztjYXNlIHE6dz1uZXcgcXgudWkuYmFzaWMuTGFiZWw7dy5zZXRBbm9ueW1vdXModHJ1ZSk7dGhpcy5fYWRkKHcse2NvbHVtbjoyfSk7YnJlYWs7Y2FzZSByOnc9bmV3IHF4LnVpLmJhc2ljLkltYWdlO3cuc2V0QW5vbnltb3VzKHRydWUpO3RoaXMuX2FkZCh3LHtjb2x1bW46M30pO2JyZWFrO31yZXR1cm4gd3x8cXgudWkuY29yZS5XaWRnZXQucHJvdG90eXBlLl9jcmVhdGVDaGlsZENvbnRyb2xJbXBsLmNhbGwodGhpcyx1KTt9LF9mb3J3YXJkU3RhdGVzOntzZWxlY3RlZDoxfSxnZXRDaGlsZHJlblNpemVzOmZ1bmN0aW9uKCl7dmFyIHg9MCx5PTAsej0wLEQ9MDtpZih0aGlzLl9pc0NoaWxkQ29udHJvbFZpc2libGUodCkpe3ZhciBFPXRoaXMuZ2V0Q2hpbGRDb250cm9sKHQpO3g9RS5nZXRNYXJnaW5MZWZ0KCkrRS5nZXRTaXplSGludCgpLndpZHRoK0UuZ2V0TWFyZ2luUmlnaHQoKTt9aWYodGhpcy5faXNDaGlsZENvbnRyb2xWaXNpYmxlKHMpKXt2YXIgQj10aGlzLmdldENoaWxkQ29udHJvbChzKTt5PUIuZ2V0TWFyZ2luTGVmdCgpK0IuZ2V0U2l6ZUhpbnQoKS53aWR0aCtCLmdldE1hcmdpblJpZ2h0KCk7fWlmKHRoaXMuX2lzQ2hpbGRDb250cm9sVmlzaWJsZShxKSl7dmFyIEE9dGhpcy5nZXRDaGlsZENvbnRyb2wocSk7ej1BLmdldE1hcmdpbkxlZnQoKStBLmdldFNpemVIaW50KCkud2lkdGgrQS5nZXRNYXJnaW5SaWdodCgpO31pZih0aGlzLl9pc0NoaWxkQ29udHJvbFZpc2libGUocikpe3ZhciBDPXRoaXMuZ2V0Q2hpbGRDb250cm9sKHIpO0Q9Qy5nZXRNYXJnaW5MZWZ0KCkrQy5nZXRTaXplSGludCgpLndpZHRoK0MuZ2V0TWFyZ2luUmlnaHQoKTt9cmV0dXJuIFt4LHkseixEXTt9LF9vbk1vdXNlVXA6ZnVuY3Rpb24oZSl7fSxfb25LZXlQcmVzczpmdW5jdGlvbihlKXt9LF9vbkNoYW5nZUNvbW1hbmQ6ZnVuY3Rpb24oZSl7dmFyIEg9ZS5nZXREYXRhKCk7aWYocXguY29yZS5WYXJpYW50LmlzU2V0KG8sbSkpe3ZhciBGPWUuZ2V0T2xkRGF0YSgpO2lmKCFGKXtxeC5sb2NhbGUuTWFuYWdlci5nZXRJbnN0YW5jZSgpLmFkZExpc3RlbmVyKHAsdGhpcy5fb25DaGFuZ2VMb2NhbGUsdGhpcyk7fWlmKCFIKXtxeC5sb2NhbGUuTWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlbW92ZUxpc3RlbmVyKHAsdGhpcy5fb25DaGFuZ2VMb2NhbGUsdGhpcyk7fX12YXIgRz1IIT1udWxsP0gudG9TdHJpbmcoKTpoO3RoaXMuZ2V0Q2hpbGRDb250cm9sKHEpLnNldFZhbHVlKEcpO30sX29uQ2hhbmdlTG9jYWxlOnF4LmNvcmUuVmFyaWFudC5zZWxlY3Qobyx7Im9uIjpmdW5jdGlvbihlKXt2YXIgST10aGlzLmdldENvbW1hbmQoKTtpZihJIT1udWxsKXt0aGlzLmdldENoaWxkQ29udHJvbChxKS5zZXRWYWx1ZShJLnRvU3RyaW5nKCkpO319LCJvZmYiOm51bGx9KSxfYXBwbHlJY29uOmZ1bmN0aW9uKEosSyl7aWYoSil7dGhpcy5fc2hvd0NoaWxkQ29udHJvbCh0KS5zZXRTb3VyY2UoSik7fWVsc2V7dGhpcy5fZXhjbHVkZUNoaWxkQ29udHJvbCh0KTt9fSxfYXBwbHlMYWJlbDpmdW5jdGlvbihMLE0pe2lmKEwpe3RoaXMuX3Nob3dDaGlsZENvbnRyb2wocykuc2V0VmFsdWUoTCk7fWVsc2V7dGhpcy5fZXhjbHVkZUNoaWxkQ29udHJvbChzKTt9fSxfYXBwbHlNZW51OmZ1bmN0aW9uKE4sTyl7aWYoTyl7Ty5yZXNldE9wZW5lcigpO08ucmVtb3ZlU3RhdGUobik7fWlmKE4pe3RoaXMuX3Nob3dDaGlsZENvbnRyb2wocik7Ti5zZXRPcGVuZXIodGhpcyk7Ti5hZGRTdGF0ZShuKTt9ZWxzZXt0aGlzLl9leGNsdWRlQ2hpbGRDb250cm9sKHIpO319fSxkZXN0cnVjdDpmdW5jdGlvbigpe2lmKHRoaXMuZ2V0TWVudSgpKXtpZighcXguY29yZS5PYmplY3RSZWdpc3RyeS5pblNodXREb3duKXt0aGlzLmdldE1lbnUoKS5kZXN0cm95KCk7fX1pZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQobyxtKSl7cXgubG9jYWxlLk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZW1vdmVMaXN0ZW5lcihwLHRoaXMuX29uQ2hhbmdlTG9jYWxlLHRoaXMpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYz0ibWlkZGxlIixiPSJxeC51aS5tZW51LkJ1dHRvbkxheW91dCIsYT0ibGVmdCI7cXguQ2xhc3MuZGVmaW5lKGIse2V4dGVuZDpxeC51aS5sYXlvdXQuQWJzdHJhY3QsbWVtYmVyczp7dmVyaWZ5TGF5b3V0UHJvcGVydHk6bnVsbCxyZW5kZXJMYXlvdXQ6ZnVuY3Rpb24oZCxlKXt2YXIgcT10aGlzLl9nZXRMYXlvdXRDaGlsZHJlbigpO3ZhciBwO3ZhciBnO3ZhciBoPVtdO2Zvcih2YXIgaT0wLGw9cS5sZW5ndGg7aTxsO2krKyl7cD1xW2ldO2c9cC5nZXRMYXlvdXRQcm9wZXJ0aWVzKCkuY29sdW1uO2hbZ109cDt9dmFyIG89dGhpcy5fX29iKHFbMF0pO3ZhciByPW8uZ2V0Q29sdW1uU2l6ZXMoKTt2YXIgaz1vLmdldFNwYWNpbmdYKCk7dmFyIGo9cXgubGFuZy5BcnJheS5zdW0ocikrayooci5sZW5ndGgtMSk7aWYoajxkKXtyWzFdKz1kLWo7fXZhciBzPTAsdG9wPTA7dmFyIG09cXgudWkubGF5b3V0LlV0aWw7Zm9yKHZhciBpPTAsbD1yLmxlbmd0aDtpPGw7aSsrKXtwPWhbaV07aWYocCl7dmFyIGY9cC5nZXRTaXplSGludCgpO3ZhciB0b3A9bS5jb21wdXRlVmVydGljYWxBbGlnbk9mZnNldChwLmdldEFsaWduWSgpfHxjLGYuaGVpZ2h0LGUsMCwwKTt2YXIgbj1tLmNvbXB1dGVIb3Jpem9udGFsQWxpZ25PZmZzZXQocC5nZXRBbGlnblgoKXx8YSxmLndpZHRoLHJbaV0scC5nZXRNYXJnaW5MZWZ0KCkscC5nZXRNYXJnaW5SaWdodCgpKTtwLnJlbmRlckxheW91dChzK24sdG9wLGYud2lkdGgsZi5oZWlnaHQpO31zKz1yW2ldK2s7fX0sX19vYjpmdW5jdGlvbih0KXt3aGlsZSghKHQgaW5zdGFuY2VvZiBxeC51aS5tZW51Lk1lbnUpKXt0PXQuZ2V0TGF5b3V0UGFyZW50KCk7fXJldHVybiB0O30sX2NvbXB1dGVTaXplSGludDpmdW5jdGlvbigpe3ZhciB3PXRoaXMuX2dldExheW91dENoaWxkcmVuKCk7dmFyIHY9MDt2YXIgeD0wO2Zvcih2YXIgaT0wLGw9dy5sZW5ndGg7aTxsO2krKyl7dmFyIHU9d1tpXS5nZXRTaXplSGludCgpO3grPXUud2lkdGg7dj1NYXRoLm1heCh2LHUuaGVpZ2h0KTt9cmV0dXJuIHt3aWR0aDp4LGhlaWdodDp2fTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LnVpLmNvcmUuTVJlbW90ZUxheW91dEhhbmRsaW5nIjtxeC5NaXhpbi5kZWZpbmUoYSx7bWVtYmVyczp7c2V0TGF5b3V0OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmdldENoaWxkcmVuQ29udGFpbmVyKCkuc2V0TGF5b3V0KGIpO30sZ2V0TGF5b3V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW5Db250YWluZXIoKS5nZXRMYXlvdXQoKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIHE9Imhvcml6b250YWwiLHA9InNjcm9sbHBhbmUiLG89InZlcnRpY2FsIixuPSJidXR0b24tYmFja3dhcmQiLG09ImJ1dHRvbi1mb3J3YXJkIixsPSJjb250ZW50IixrPSJleGVjdXRlIixqPSJxeC51aS5jb250YWluZXIuU2xpZGVCYXIiLGk9InNjcm9sbFkiLGg9InJlbW92ZUNoaWxkV2lkZ2V0IixjPSJzY3JvbGxYIixnPSJfYXBwbHlPcmllbnRhdGlvbiIsZj0ibW91c2V3aGVlbCIsYj0iSW50ZWdlciIsYT0ic2xpZGViYXIiLGQ9InVwZGF0ZSI7cXguQ2xhc3MuZGVmaW5lKGose2V4dGVuZDpxeC51aS5jb3JlLldpZGdldCxpbmNsdWRlOltxeC51aS5jb3JlLk1SZW1vdGVDaGlsZHJlbkhhbmRsaW5nLHF4LnVpLmNvcmUuTVJlbW90ZUxheW91dEhhbmRsaW5nXSxjb25zdHJ1Y3Q6ZnVuY3Rpb24ocil7cXgudWkuY29yZS5XaWRnZXQuY2FsbCh0aGlzKTt2YXIgcz10aGlzLmdldENoaWxkQ29udHJvbChwKTt0aGlzLl9hZGQocyx7ZmxleDoxfSk7aWYociE9bnVsbCl7dGhpcy5zZXRPcmllbnRhdGlvbihyKTt9ZWxzZXt0aGlzLmluaXRPcmllbnRhdGlvbigpO310aGlzLmFkZExpc3RlbmVyKGYsdGhpcy5fb25Nb3VzZVdoZWVsLHRoaXMpO30scHJvcGVydGllczp7YXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDphfSxvcmllbnRhdGlvbjp7Y2hlY2s6W3Esb10saW5pdDpxLGFwcGx5Omd9LHNjcm9sbFN0ZXA6e2NoZWNrOmIsaW5pdDoxNSx0aGVtZWFibGU6dHJ1ZX19LG1lbWJlcnM6e2dldENoaWxkcmVuQ29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250cm9sKGwpO30sX2NyZWF0ZUNoaWxkQ29udHJvbEltcGw6ZnVuY3Rpb24odCx1KXt2YXIgdjtzd2l0Y2godCl7Y2FzZSBtOnY9bmV3IHF4LnVpLmZvcm0uUmVwZWF0QnV0dG9uO3YuYWRkTGlzdGVuZXIoayx0aGlzLl9vbkV4ZWN1dGVGb3J3YXJkLHRoaXMpO3Yuc2V0Rm9jdXNhYmxlKGZhbHNlKTt0aGlzLl9hZGRBdCh2LDIpO2JyZWFrO2Nhc2Ugbjp2PW5ldyBxeC51aS5mb3JtLlJlcGVhdEJ1dHRvbjt2LmFkZExpc3RlbmVyKGssdGhpcy5fb25FeGVjdXRlQmFja3dhcmQsdGhpcyk7di5zZXRGb2N1c2FibGUoZmFsc2UpO3RoaXMuX2FkZEF0KHYsMCk7YnJlYWs7Y2FzZSBsOnY9bmV3IHF4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUoKTtpZihxeC5ib20uY2xpZW50LkVuZ2luZS5HRUNLTyl7di5hZGRMaXN0ZW5lcihoLHRoaXMuX29uUmVtb3ZlQ2hpbGQsdGhpcyk7fXRoaXMuZ2V0Q2hpbGRDb250cm9sKHApLmFkZCh2KTticmVhaztjYXNlIHA6dj1uZXcgcXgudWkuY29yZS5zY3JvbGwuU2Nyb2xsUGFuZSgpO3YuYWRkTGlzdGVuZXIoZCx0aGlzLl9vblJlc2l6ZSx0aGlzKTt2LmFkZExpc3RlbmVyKGMsdGhpcy5fb25TY3JvbGwsdGhpcyk7di5hZGRMaXN0ZW5lcihpLHRoaXMuX29uU2Nyb2xsLHRoaXMpO2JyZWFrO31yZXR1cm4gdnx8cXgudWkuY29yZS5XaWRnZXQucHJvdG90eXBlLl9jcmVhdGVDaGlsZENvbnRyb2xJbXBsLmNhbGwodGhpcyx0KTt9LF9mb3J3YXJkU3RhdGVzOntiYXJMZWZ0OnRydWUsYmFyVG9wOnRydWUsYmFyUmlnaHQ6dHJ1ZSxiYXJCb3R0b206dHJ1ZX0sc2Nyb2xsQnk6ZnVuY3Rpb24odyl7dmFyIHg9dGhpcy5nZXRDaGlsZENvbnRyb2wocCk7aWYodGhpcy5nZXRPcmllbnRhdGlvbigpPT09cSl7eC5zY3JvbGxCeVgodyk7fWVsc2V7eC5zY3JvbGxCeVkodyk7fX0sc2Nyb2xsVG86ZnVuY3Rpb24oeSl7dmFyIHo9dGhpcy5nZXRDaGlsZENvbnRyb2wocCk7aWYodGhpcy5nZXRPcmllbnRhdGlvbigpPT09cSl7ei5zY3JvbGxUb1goeSk7fWVsc2V7ei5zY3JvbGxUb1koeSk7fX0sX2FwcGx5T3JpZW50YXRpb246ZnVuY3Rpb24oQSxCKXt2YXIgRT1bdGhpcy5nZXRMYXlvdXQoKSx0aGlzLl9nZXRMYXlvdXQoKV07dmFyIEQ9dGhpcy5nZXRDaGlsZENvbnRyb2wobSk7dmFyIEM9dGhpcy5nZXRDaGlsZENvbnRyb2wobik7aWYoQj09byl7RC5yZW1vdmVTdGF0ZShvKTtDLnJlbW92ZVN0YXRlKG8pO0QuYWRkU3RhdGUocSk7Qy5hZGRTdGF0ZShxKTt9ZWxzZSBpZihCPT1xKXtELnJlbW92ZVN0YXRlKHEpO0MucmVtb3ZlU3RhdGUocSk7RC5hZGRTdGF0ZShvKTtDLmFkZFN0YXRlKG8pO31pZihBPT1xKXt0aGlzLl9zZXRMYXlvdXQobmV3IHF4LnVpLmxheW91dC5IQm94KCkpO3RoaXMuc2V0TGF5b3V0KG5ldyBxeC51aS5sYXlvdXQuSEJveCgpKTt9ZWxzZXt0aGlzLl9zZXRMYXlvdXQobmV3IHF4LnVpLmxheW91dC5WQm94KCkpO3RoaXMuc2V0TGF5b3V0KG5ldyBxeC51aS5sYXlvdXQuVkJveCgpKTt9aWYoRVswXSl7RVswXS5kaXNwb3NlKCk7fWlmKEVbMV0pe0VbMV0uZGlzcG9zZSgpO319LF9vbk1vdXNlV2hlZWw6ZnVuY3Rpb24oZSl7dGhpcy5zY3JvbGxCeShlLmdldFdoZWVsRGVsdGEoKSp0aGlzLmdldFNjcm9sbFN0ZXAoKSk7ZS5zdG9wKCk7fSxfb25TY3JvbGw6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBcnJvd3NFbmFibGVkKCk7fSxfb25SZXNpemU6ZnVuY3Rpb24oZSl7dmFyIGNvbnRlbnQ9dGhpcy5nZXRDaGlsZENvbnRyb2wocCkuZ2V0Q2hpbGRyZW4oKVswXTtpZighY29udGVudCl7cmV0dXJuO312YXIgRj10aGlzLmdldElubmVyU2l6ZSgpO3ZhciBIPWNvbnRlbnQuZ2V0Qm91bmRzKCk7dmFyIEc9KHRoaXMuZ2V0T3JpZW50YXRpb24oKT09PXEpP0gud2lkdGg+Ri53aWR0aDpILmhlaWdodD5GLmhlaWdodDtpZihHKXt0aGlzLl9zaG93QXJyb3dzKCk7dGhpcy5fdXBkYXRlQXJyb3dzRW5hYmxlZCgpO31lbHNle3RoaXMuX2hpZGVBcnJvd3MoKTt9fSxfb25FeGVjdXRlQmFja3dhcmQ6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbEJ5KC10aGlzLmdldFNjcm9sbFN0ZXAoKSk7fSxfb25FeGVjdXRlRm9yd2FyZDpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsQnkodGhpcy5nZXRTY3JvbGxTdGVwKCkpO30sX29uUmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24oKXtxeC5ldmVudC5UaW1lci5vbmNlKGZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxCeSh0aGlzLmdldENoaWxkQ29udHJvbChwKS5nZXRTY3JvbGxYKCkpO30sdGhpcyw1MCk7fSxfdXBkYXRlQXJyb3dzRW5hYmxlZDpmdW5jdGlvbigpe3ZhciBKPXRoaXMuZ2V0Q2hpbGRDb250cm9sKHApO2lmKHRoaXMuZ2V0T3JpZW50YXRpb24oKT09PXEpe3ZhciBJPUouZ2V0U2Nyb2xsWCgpO3ZhciBLPUouZ2V0U2Nyb2xsTWF4WCgpO31lbHNle3ZhciBJPUouZ2V0U2Nyb2xsWSgpO3ZhciBLPUouZ2V0U2Nyb2xsTWF4WSgpO310aGlzLmdldENoaWxkQ29udHJvbChuKS5zZXRFbmFibGVkKEk+MCk7dGhpcy5nZXRDaGlsZENvbnRyb2wobSkuc2V0RW5hYmxlZChJPEspO30sX3Nob3dBcnJvd3M6ZnVuY3Rpb24oKXt0aGlzLl9zaG93Q2hpbGRDb250cm9sKG0pO3RoaXMuX3Nob3dDaGlsZENvbnRyb2wobik7fSxfaGlkZUFycm93czpmdW5jdGlvbigpe3RoaXMuX2V4Y2x1ZGVDaGlsZENvbnRyb2wobSk7dGhpcy5fZXhjbHVkZUNoaWxkQ29udHJvbChuKTt0aGlzLnNjcm9sbFRvKDApO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZj0iZXhlY3V0ZSIsZT0iYnV0dG9uLWJhY2t3YXJkIixkPSJ2ZXJ0aWNhbCIsYz0iYnV0dG9uLWZvcndhcmQiLGI9Im1lbnUtc2xpZGViYXIiLGE9InF4LnVpLm1lbnUuTWVudVNsaWRlQmFyIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LnVpLmNvbnRhaW5lci5TbGlkZUJhcixjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC51aS5jb250YWluZXIuU2xpZGVCYXIuY2FsbCh0aGlzLGQpO30scHJvcGVydGllczp7YXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDpifX0sbWVtYmVyczp7X2NyZWF0ZUNoaWxkQ29udHJvbEltcGw6ZnVuY3Rpb24oZyxoKXt2YXIgaTtzd2l0Y2goZyl7Y2FzZSBjOmk9bmV3IHF4LnVpLmZvcm0uSG92ZXJCdXR0b24oKTtpLmFkZExpc3RlbmVyKGYsdGhpcy5fb25FeGVjdXRlRm9yd2FyZCx0aGlzKTt0aGlzLl9hZGRBdChpLDIpO2JyZWFrO2Nhc2UgZTppPW5ldyBxeC51aS5mb3JtLkhvdmVyQnV0dG9uKCk7aS5hZGRMaXN0ZW5lcihmLHRoaXMuX29uRXhlY3V0ZUJhY2t3YXJkLHRoaXMpO3RoaXMuX2FkZEF0KGksMCk7YnJlYWs7fXJldHVybiBpfHxxeC51aS5jb250YWluZXIuU2xpZGVCYXIucHJvdG90eXBlLl9jcmVhdGVDaGlsZENvbnRyb2xJbXBsLmNhbGwodGhpcyxnKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGk9IkludGVnZXIiLGg9ImhvdmVyZWQiLGc9ImhvdmVyLWJ1dHRvbiIsZj0iaW50ZXJ2YWwiLGQ9Im1vdXNlb3ZlciIsYz0ibW91c2VvdXQiLGI9Il9fbmsiLGE9InF4LnVpLmZvcm0uSG92ZXJCdXR0b24iO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXgudWkuYmFzaWMuQXRvbSxpbmNsdWRlOltxeC51aS5jb3JlLk1FeGVjdXRhYmxlXSxpbXBsZW1lbnQ6W3F4LnVpLmZvcm0uSUV4ZWN1dGFibGVdLGNvbnN0cnVjdDpmdW5jdGlvbihqLGspe3F4LnVpLmJhc2ljLkF0b20uY2FsbCh0aGlzLGosayk7dGhpcy5hZGRMaXN0ZW5lcihkLHRoaXMuX29uTW91c2VPdmVyLHRoaXMpO3RoaXMuYWRkTGlzdGVuZXIoYyx0aGlzLl9vbk1vdXNlT3V0LHRoaXMpO3RoaXMuX19uaz1uZXcgcXguZXZlbnQuQWNjZWxlcmF0aW5nVGltZXIoKTt0aGlzLl9fbmsuYWRkTGlzdGVuZXIoZix0aGlzLl9vbkludGVydmFsLHRoaXMpO30scHJvcGVydGllczp7YXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDpnfSxpbnRlcnZhbDp7Y2hlY2s6aSxpbml0OjgwfSxmaXJzdEludGVydmFsOntjaGVjazppLGluaXQ6MjAwfSxtaW5UaW1lcjp7Y2hlY2s6aSxpbml0OjIwfSx0aW1lckRlY3JlYXNlOntjaGVjazppLGluaXQ6Mn19LG1lbWJlcnM6e19fbms6bnVsbCxfb25Nb3VzZU92ZXI6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaXNFbmFibGVkKCl8fGUuZ2V0VGFyZ2V0KCkhPT10aGlzKXtyZXR1cm47fXRoaXMuX19uay5zZXQoe2ludGVydmFsOnRoaXMuZ2V0SW50ZXJ2YWwoKSxmaXJzdEludGVydmFsOnRoaXMuZ2V0Rmlyc3RJbnRlcnZhbCgpLG1pbmltdW06dGhpcy5nZXRNaW5UaW1lcigpLGRlY3JlYXNlOnRoaXMuZ2V0VGltZXJEZWNyZWFzZSgpfSkuc3RhcnQoKTt0aGlzLmFkZFN0YXRlKGgpO30sX29uTW91c2VPdXQ6ZnVuY3Rpb24oZSl7dGhpcy5fX25rLnN0b3AoKTt0aGlzLnJlbW92ZVN0YXRlKGgpO2lmKCF0aGlzLmlzRW5hYmxlZCgpfHxlLmdldFRhcmdldCgpIT09dGhpcyl7cmV0dXJuO319LF9vbkludGVydmFsOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQoKSl7dGhpcy5leGVjdXRlKCk7fWVsc2V7dGhpcy5fX25rLnN0b3AoKTt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlT2JqZWN0cyhiKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaD0icHJlc3NlZCIsZz0iaG92ZXJlZCIsZj0iaW5oZXJpdCIsZD0icXgudWkubWVudWJhci5CdXR0b24iLGM9ImtleWRvd24iLGI9Im1lbnViYXItYnV0dG9uIixhPSJrZXl1cCI7cXguQ2xhc3MuZGVmaW5lKGQse2V4dGVuZDpxeC51aS5mb3JtLk1lbnVCdXR0b24sY29uc3RydWN0OmZ1bmN0aW9uKGksaixrKXtxeC51aS5mb3JtLk1lbnVCdXR0b24uY2FsbCh0aGlzLGksaixrKTt0aGlzLnJlbW92ZUxpc3RlbmVyKGMsdGhpcy5fb25LZXlEb3duKTt0aGlzLnJlbW92ZUxpc3RlbmVyKGEsdGhpcy5fb25LZXlVcCk7fSxwcm9wZXJ0aWVzOnthcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0OmJ9LHNob3c6e3JlZmluZTp0cnVlLGluaXQ6Zn0sZm9jdXNhYmxlOntyZWZpbmU6dHJ1ZSxpbml0OmZhbHNlfX0sbWVtYmVyczp7Z2V0TWVudUJhcjpmdW5jdGlvbigpe3ZhciBwYXJlbnQ9dGhpczt3aGlsZShwYXJlbnQpe2lmKHBhcmVudCBpbnN0YW5jZW9mIHF4LnVpLnRvb2xiYXIuVG9vbEJhcil7cmV0dXJuIHBhcmVudDt9cGFyZW50PXBhcmVudC5nZXRMYXlvdXRQYXJlbnQoKTt9cmV0dXJuIG51bGw7fSxvcGVuOmZ1bmN0aW9uKGwpe3F4LnVpLmZvcm0uTWVudUJ1dHRvbi5wcm90b3R5cGUub3Blbi5jYWxsKHRoaXMsbCk7dmFyIG1lbnViYXI9dGhpcy5nZXRNZW51QmFyKCk7bWVudWJhci5fc2V0QWxsb3dNZW51T3BlbkhvdmVyKHRydWUpO30sX29uTWVudUNoYW5nZTpmdW5jdGlvbihlKXt2YXIgbT10aGlzLmdldE1lbnUoKTt2YXIgbWVudWJhcj10aGlzLmdldE1lbnVCYXIoKTtpZihtLmlzVmlzaWJsZSgpKXt0aGlzLmFkZFN0YXRlKGgpO2lmKG1lbnViYXIpe21lbnViYXIuc2V0T3Blbk1lbnUobSk7fX1lbHNle3RoaXMucmVtb3ZlU3RhdGUoaCk7aWYobWVudWJhciYmbWVudWJhci5nZXRPcGVuTWVudSgpPT1tKXttZW51YmFyLnJlc2V0T3Blbk1lbnUoKTttZW51YmFyLl9zZXRBbGxvd01lbnVPcGVuSG92ZXIoZmFsc2UpO319fSxfb25Nb3VzZVVwOmZ1bmN0aW9uKGUpe3F4LnVpLmZvcm0uTWVudUJ1dHRvbi5wcm90b3R5cGUuX29uTW91c2VVcC5jYWxsKHRoaXMsZSk7dmFyIG49dGhpcy5nZXRNZW51KCk7aWYobiYmbi5pc1Zpc2libGUoKSYmIXRoaXMuaGFzU3RhdGUoaCkpe3RoaXMuYWRkU3RhdGUoaCk7fX0sX29uTW91c2VPdmVyOmZ1bmN0aW9uKGUpe3RoaXMuYWRkU3RhdGUoZyk7aWYodGhpcy5nZXRNZW51KCkpe3ZhciBtZW51YmFyPXRoaXMuZ2V0TWVudUJhcigpO2lmKG1lbnViYXIuX2lzQWxsb3dNZW51T3BlbkhvdmVyKCkpe3F4LnVpLm1lbnUuTWFuYWdlci5nZXRJbnN0YW5jZSgpLmhpZGVBbGwoKTttZW51YmFyLl9zZXRBbGxvd01lbnVPcGVuSG92ZXIodHJ1ZSk7aWYodGhpcy5pc0VuYWJsZWQoKSl7dGhpcy5vcGVuKCk7fX19fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciB3PSJ2aXNpYmxlIix2PSJleGNsdWRlZCIsdT0icmVzaXplIix0PSJxeC5ldmVudC50eXBlLkRhdGEiLHM9ImJvdGgiLHI9InF4LnVpLm1lbnUuTWVudSIscT0iX2FwcGx5U3BhY2luZyIscD0ic2hvd0l0ZW0iLG89IkJvb2xlYW4iLG49Imljb24iLGQ9ImxhYmVsIixtPSJxeC51aS5jb3JlLldpZGdldCIsaD0iX2FwcGx5T3ZlcmZsb3dJbmRpY2F0b3IiLGM9Il9hcHBseU92ZXJmbG93SGFuZGxpbmciLGI9ImNoYW5nZVNob3ciLGc9IkludGVnZXIiLGY9InF4LnVpLnRvb2xiYXIuVG9vbEJhciIsaj0iaGlkZUl0ZW0iLGE9InRvb2xiYXIiLGs9ImNoYW5nZU9wZW5NZW51IjtxeC5DbGFzcy5kZWZpbmUoZix7ZXh0ZW5kOnF4LnVpLmNvcmUuV2lkZ2V0LGluY2x1ZGU6cXgudWkuY29yZS5NQ2hpbGRyZW5IYW5kbGluZyxjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC51aS5jb3JlLldpZGdldC5jYWxsKHRoaXMpO3RoaXMuX3NldExheW91dChuZXcgcXgudWkubGF5b3V0LkhCb3goKSk7dGhpcy5fX3JwPVtdO3RoaXMuX19ycT1bXTt9LHByb3BlcnRpZXM6e2FwcGVhcmFuY2U6e3JlZmluZTp0cnVlLGluaXQ6YX0sb3Blbk1lbnU6e2NoZWNrOnIsZXZlbnQ6ayxudWxsYWJsZTp0cnVlfSxzaG93Ontpbml0OnMsY2hlY2s6W3MsZCxuXSxpbmhlcml0YWJsZTp0cnVlLGV2ZW50OmJ9LHNwYWNpbmc6e251bGxhYmxlOnRydWUsY2hlY2s6Zyx0aGVtZWFibGU6dHJ1ZSxhcHBseTpxfSxvdmVyZmxvd0luZGljYXRvcjp7Y2hlY2s6bSxudWxsYWJsZTp0cnVlLGFwcGx5Omh9LG92ZXJmbG93SGFuZGxpbmc6e2luaXQ6ZmFsc2UsY2hlY2s6byxhcHBseTpjfX0sZXZlbnRzOnsiaGlkZUl0ZW0iOnQsInNob3dJdGVtIjp0fSxtZW1iZXJzOntfX3JwOm51bGwsX19ycTpudWxsLF9jb21wdXRlU2l6ZUhpbnQ6ZnVuY3Rpb24oKXt2YXIgej1xeC51aS5jb3JlLldpZGdldC5wcm90b3R5cGUuX2NvbXB1dGVTaXplSGludC5jYWxsKHRoaXMpO2lmKHRydWUmJnRoaXMuZ2V0T3ZlcmZsb3dIYW5kbGluZygpKXt2YXIgeD0wO3ZhciB5PXRoaXMuZ2V0T3ZlcmZsb3dJbmRpY2F0b3IoKTtpZih5KXt4PXkuZ2V0U2l6ZUhpbnQoKS53aWR0aCt0aGlzLmdldFNwYWNpbmcoKTt9ei5taW5XaWR0aD14O31yZXR1cm4gejt9LF9vblJlc2l6ZTpmdW5jdGlvbihlKXt0aGlzLl9yZWNhbGN1bGF0ZU92ZXJmbG93KGUuZ2V0RGF0YSgpLndpZHRoKTt9LF9yZWNhbGN1bGF0ZU92ZXJmbG93OmZ1bmN0aW9uKEEpe2lmKCF0aGlzLmdldE92ZXJmbG93SGFuZGxpbmcoKSl7cmV0dXJuO312YXIgQz10aGlzLmdldFNpemVIaW50KCkud2lkdGg7dmFyIEI9dGhpcy5nZXRPdmVyZmxvd0luZGljYXRvcigpO3ZhciBGPTA7aWYoQil7Rj1CLmdldFNpemVIaW50KCkud2lkdGg7fWlmKEE8Qyl7ZG97dmFyIEc9dGhpcy5fZ2V0TmV4dFRvSGlkZSgpO2lmKCFHKXtyZXR1cm47fXZhciBIPUcuZ2V0TWFyZ2luTGVmdCgpK0cuZ2V0TWFyZ2luUmlnaHQoKTt2YXIgRT1HLmdldFNpemVIaW50KCkud2lkdGgrSDt0aGlzLl9fcnMoRyk7Qy09RTtpZihCJiZCLmdldFZpc2liaWxpdHkoKSE9dyl7Qi5zZXRWaXNpYmlsaXR5KHcpO0MrPUY7fX13aGlsZShDPkEpO31lbHNle2Rve3ZhciBJPXRoaXMuX19ycFswXTtpZihJKXt2YXIgSD1JLmdldE1hcmdpbkxlZnQoKStJLmdldE1hcmdpblJpZ2h0KCk7dmFyIEQ9SS5nZXRTaXplSGludCgpLndpZHRoK0g7aWYoQT5DK0QrdGhpcy5nZXRTcGFjaW5nKCl8fCh0aGlzLl9fcnAubGVuZ3RoPT0xJiZBPkMrRC1GK3RoaXMuZ2V0U3BhY2luZygpKSl7dGhpcy5fX3JyKEkpO0ErPUQ7aWYoQiYmdGhpcy5fX3JwLmxlbmd0aD09MCl7Qi5zZXRWaXNpYmlsaXR5KHYpO319ZWxzZXtyZXR1cm47fX19d2hpbGUoQT49QyYmdGhpcy5fX3JwLmxlbmd0aD4wKTt9fSxfX3JyOmZ1bmN0aW9uKEope0ouc2V0VmlzaWJpbGl0eSh3KTt0aGlzLl9fcnAuc2hpZnQoKTt0aGlzLmZpcmVEYXRhRXZlbnQocCxKKTt9LF9fcnM6ZnVuY3Rpb24oSyl7aWYoIUspe3JldHVybjt9dGhpcy5fX3JwLnVuc2hpZnQoSyk7Sy5zZXRWaXNpYmlsaXR5KHYpO3RoaXMuZmlyZURhdGFFdmVudChqLEspO30sX2dldE5leHRUb0hpZGU6ZnVuY3Rpb24oKXtmb3IodmFyIGk9dGhpcy5fX3JxLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgTD10aGlzLl9fcnFbaV07aWYoTCYmTC5nZXRWaXNpYmlsaXR5JiZMLmdldFZpc2liaWxpdHkoKT09dyl7cmV0dXJuIEw7fX12YXIgTT10aGlzLl9nZXRDaGlsZHJlbigpO2Zvcih2YXIgaT1NLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgTj1NW2ldO2lmKE49PXRoaXMuZ2V0T3ZlcmZsb3dJbmRpY2F0b3IoKSl7Y29udGludWU7fWlmKE4uZ2V0VmlzaWJpbGl0eSYmTi5nZXRWaXNpYmlsaXR5KCk9PXcpe3JldHVybiBOO319fSxzZXRSZW1vdmVQcmlvcml0eTpmdW5jdGlvbihPLFAsUSl7aWYoIVEmJnRoaXMuX19ycVtQXSE9dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoIlByaW9yaXR5IGFscmVhZHkgaW4gdXNlISIpO310aGlzLl9fcnFbUF09Tzt9LF9hcHBseU92ZXJmbG93SGFuZGxpbmc6ZnVuY3Rpb24oUixTKXt0aGlzLmludmFsaWRhdGVMYXlvdXRDYWNoZSgpO3ZhciBwYXJlbnQ9dGhpcy5nZXRMYXlvdXRQYXJlbnQoKTtpZihwYXJlbnQpe3BhcmVudC5pbnZhbGlkYXRlTGF5b3V0Q2FjaGUoKTt9dmFyIFU9dGhpcy5nZXRCb3VuZHMoKTtpZihVJiZVLndpZHRoKXt0aGlzLl9yZWNhbGN1bGF0ZU92ZXJmbG93KFUud2lkdGgpO31pZihSKXt0aGlzLmFkZExpc3RlbmVyKHUsdGhpcy5fb25SZXNpemUsdGhpcyk7fWVsc2V7dGhpcy5yZW1vdmVMaXN0ZW5lcih1LHRoaXMuX29uUmVzaXplLHRoaXMpO3ZhciBUPXRoaXMuZ2V0T3ZlcmZsb3dJbmRpY2F0b3IoKTtpZihUKXtULnNldFZpc2liaWxpdHkodik7fWZvcih2YXIgaT0wO2k8dGhpcy5fX3JwLmxlbmd0aDtpKyspe3RoaXMuX19ycFtpXS5zZXRWaXNpYmlsaXR5KHcpO310aGlzLl9fcnA9W107fX0sX2FwcGx5T3ZlcmZsb3dJbmRpY2F0b3I6ZnVuY3Rpb24oVixXKXtpZihXKXt0aGlzLl9yZW1vdmUoVyk7fWlmKFYpe2lmKHRoaXMuX2luZGV4T2YoVik9PS0xKXt0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGJlIGNoaWxkIG9mIHRoZSB0b29sYmFyLiIpO31WLnNldFZpc2liaWxpdHkodik7fX0sX19ydDpmYWxzZSxfc2V0QWxsb3dNZW51T3BlbkhvdmVyOmZ1bmN0aW9uKFgpe3RoaXMuX19ydD1YO30sX2lzQWxsb3dNZW51T3BlbkhvdmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19ydDt9LF9hcHBseVNwYWNpbmc6ZnVuY3Rpb24oWSxiYSl7dmFyIGJiPXRoaXMuX2dldExheW91dCgpO1k9PW51bGw/YmIucmVzZXRTcGFjaW5nKCk6YmIuc2V0U3BhY2luZyhZKTt9LGFkZFNwYWNlcjpmdW5jdGlvbigpe3ZhciBiYz1uZXcgcXgudWkuY29yZS5TcGFjZXI7dGhpcy5fYWRkKGJjLHtmbGV4OjF9KTtyZXR1cm4gYmM7fSxhZGRTZXBhcmF0b3I6ZnVuY3Rpb24oKXt0aGlzLmFkZChuZXcgcXgudWkudG9vbGJhci5TZXBhcmF0b3IpO30sZ2V0TWVudUJ1dHRvbnM6ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5nZXRDaGlsZHJlbigpO3ZhciBiZD1bXTt2YXIgYmY7Zm9yKHZhciBpPTAsbD1iZS5sZW5ndGg7aTxsO2krKyl7YmY9YmVbaV07aWYoYmYgaW5zdGFuY2VvZiBxeC51aS5tZW51YmFyLkJ1dHRvbil7YmQucHVzaChiZik7fWVsc2UgaWYoYmYgaW5zdGFuY2VvZiBxeC51aS50b29sYmFyLlBhcnQpe2JkLnB1c2guYXBwbHkoYmQsYmYuZ2V0TWVudUJ1dHRvbnMoKSk7fX1yZXR1cm4gYmQ7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0xpc3RlbmVyKHUpKXt0aGlzLnJlbW92ZUxpc3RlbmVyKHUsdGhpcy5fb25SZXNpemUsdGhpcyk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJ0b29sYmFyLXNlcGFyYXRvciIsYT0icXgudWkudG9vbGJhci5TZXBhcmF0b3IiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXgudWkuY29yZS5XaWRnZXQscHJvcGVydGllczp7YXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDpifSxhbm9ueW1vdXM6e3JlZmluZTp0cnVlLGluaXQ6dHJ1ZX0sd2lkdGg6e3JlZmluZTp0cnVlLGluaXQ6MH0saGVpZ2h0OntyZWZpbmU6dHJ1ZSxpbml0OjB9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIG09ImNvbnRhaW5lciIsaz0iaGFuZGxlIixqPSJib3RoIixoPSJJbnRlZ2VyIixnPSJtaWRkbGUiLGY9InF4LnVpLnRvb2xiYXIuUGFydCIsZT0iaWNvbiIsZD0ibGFiZWwiLGM9ImNoYW5nZVNob3ciLGI9Il9hcHBseVNwYWNpbmciLGE9InRvb2xiYXIvcGFydCI7cXguQ2xhc3MuZGVmaW5lKGYse2V4dGVuZDpxeC51aS5jb3JlLldpZGdldCxpbmNsdWRlOltxeC51aS5jb3JlLk1SZW1vdGVDaGlsZHJlbkhhbmRsaW5nXSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC51aS5jb3JlLldpZGdldC5jYWxsKHRoaXMpO3RoaXMuX3NldExheW91dChuZXcgcXgudWkubGF5b3V0LkhCb3gpO3RoaXMuX2NyZWF0ZUNoaWxkQ29udHJvbChrKTt9LHByb3BlcnRpZXM6e2FwcGVhcmFuY2U6e3JlZmluZTp0cnVlLGluaXQ6YX0sc2hvdzp7aW5pdDpqLGNoZWNrOltqLGQsZV0saW5oZXJpdGFibGU6dHJ1ZSxldmVudDpjfSxzcGFjaW5nOntudWxsYWJsZTp0cnVlLGNoZWNrOmgsdGhlbWVhYmxlOnRydWUsYXBwbHk6Yn19LG1lbWJlcnM6e19jcmVhdGVDaGlsZENvbnRyb2xJbXBsOmZ1bmN0aW9uKG4sbyl7dmFyIHA7c3dpdGNoKG4pe2Nhc2UgazpwPW5ldyBxeC51aS5iYXNpYy5JbWFnZSgpO3Auc2V0QWxpZ25ZKGcpO3RoaXMuX2FkZChwKTticmVhaztjYXNlIG06cD1uZXcgcXgudWkudG9vbGJhci5QYXJ0Q29udGFpbmVyO3RoaXMuX2FkZChwKTticmVhazt9cmV0dXJuIHB8fHF4LnVpLmNvcmUuV2lkZ2V0LnByb3RvdHlwZS5fY3JlYXRlQ2hpbGRDb250cm9sSW1wbC5jYWxsKHRoaXMsbik7fSxnZXRDaGlsZHJlbkNvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldENoaWxkQ29udHJvbChtKTt9LF9hcHBseVNwYWNpbmc6ZnVuY3Rpb24ocSxyKXt2YXIgcz10aGlzLmdldENoaWxkQ29udHJvbChtKS5nZXRMYXlvdXQoKTtxPT1udWxsP3MucmVzZXRTcGFjaW5nKCk6cy5zZXRTcGFjaW5nKHEpO30sYWRkU2VwYXJhdG9yOmZ1bmN0aW9uKCl7dGhpcy5hZGQobmV3IHF4LnVpLnRvb2xiYXIuU2VwYXJhdG9yKTt9LGdldE1lbnVCdXR0b25zOmZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5nZXRDaGlsZHJlbigpO3ZhciB0PVtdO3ZhciB2O2Zvcih2YXIgaT0wLGw9dS5sZW5ndGg7aTxsO2krKyl7dj11W2ldO2lmKHYgaW5zdGFuY2VvZiBxeC51aS5tZW51YmFyLkJ1dHRvbil7dC5wdXNoKHYpO319cmV0dXJuIHQ7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBmPSJib3RoIixlPSJ0b29sYmFyL3BhcnQvY29udGFpbmVyIixkPSJpY29uIixjPSJjaGFuZ2VTaG93IixiPSJxeC51aS50b29sYmFyLlBhcnRDb250YWluZXIiLGE9ImxhYmVsIjtxeC5DbGFzcy5kZWZpbmUoYix7ZXh0ZW5kOnF4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXgudWkuY29udGFpbmVyLkNvbXBvc2l0ZS5jYWxsKHRoaXMpO3RoaXMuX3NldExheW91dChuZXcgcXgudWkubGF5b3V0LkhCb3gpO30scHJvcGVydGllczp7YXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDplfSxzaG93Ontpbml0OmYsY2hlY2s6W2YsYSxkXSxpbmhlcml0YWJsZTp0cnVlLGV2ZW50OmN9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9InF4LnVpLm1lbnUuQnV0dG9uIixhPSJtZW51LWJ1dHRvbiI7cXguQ2xhc3MuZGVmaW5lKGIse2V4dGVuZDpxeC51aS5tZW51LkFic3RyYWN0QnV0dG9uLGNvbnN0cnVjdDpmdW5jdGlvbihjLGQsZixnKXtxeC51aS5tZW51LkFic3RyYWN0QnV0dG9uLmNhbGwodGhpcyk7aWYoYyE9bnVsbCl7dGhpcy5zZXRMYWJlbChjKTt9aWYoZCE9bnVsbCl7dGhpcy5zZXRJY29uKGQpO31pZihmIT1udWxsKXt0aGlzLnNldENvbW1hbmQoZik7fWlmKGchPW51bGwpe3RoaXMuc2V0TWVudShnKTt9fSxwcm9wZXJ0aWVzOnthcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0OmF9fSxtZW1iZXJzOntfb25Nb3VzZVVwOmZ1bmN0aW9uKGUpe2lmKGUuaXNMZWZ0UHJlc3NlZCgpKXt0aGlzLmV4ZWN1dGUoKTtpZih0aGlzLmdldE1lbnUoKSl7cmV0dXJuO319cXgudWkubWVudS5NYW5hZ2VyLmdldEluc3RhbmNlKCkuaGlkZUFsbCgpO30sX29uS2V5UHJlc3M6ZnVuY3Rpb24oZSl7dGhpcy5leGVjdXRlKCk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJxeC51aS50YWJsZS5JQ29sdW1uTWVudUl0ZW0iLGE9InF4LmV2ZW50LnR5cGUuRGF0YSI7cXguSW50ZXJmYWNlLmRlZmluZShiLHtwcm9wZXJ0aWVzOnt2aXNpYmxlOnt9fSxldmVudHM6e2NoYW5nZVZpc2libGU6YX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBoPSJjaGVja2VkIixnPSJtZW51LWNoZWNrYm94IixmPSJCb29sZWFuIixkPSJfYXBwbHlWYWx1ZSIsYz0iY2hhbmdlVmFsdWUiLGI9InF4LnVpLm1lbnUuQ2hlY2tCb3giLGE9ImV4ZWN1dGUiO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6cXgudWkubWVudS5BYnN0cmFjdEJ1dHRvbixpbXBsZW1lbnQ6W3F4LnVpLmZvcm0uSUJvb2xlYW5Gb3JtXSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oaSxqKXtxeC51aS5tZW51LkFic3RyYWN0QnV0dG9uLmNhbGwodGhpcyk7aWYoaSE9bnVsbCl7aWYoaS50cmFuc2xhdGUpe3RoaXMuc2V0TGFiZWwoaS50cmFuc2xhdGUoKSk7fWVsc2V7dGhpcy5zZXRMYWJlbChpKTt9fWlmKGohPW51bGwpe3RoaXMuc2V0TWVudShqKTt9dGhpcy5hZGRMaXN0ZW5lcihhLHRoaXMuX29uRXhlY3V0ZSx0aGlzKTt9LHByb3BlcnRpZXM6e2FwcGVhcmFuY2U6e3JlZmluZTp0cnVlLGluaXQ6Z30sdmFsdWU6e2NoZWNrOmYsaW5pdDpmYWxzZSxhcHBseTpkLGV2ZW50OmMsbnVsbGFibGU6dHJ1ZX19LG1lbWJlcnM6e19hcHBseVZhbHVlOmZ1bmN0aW9uKGssbCl7az90aGlzLmFkZFN0YXRlKGgpOnRoaXMucmVtb3ZlU3RhdGUoaCk7fSxfb25FeGVjdXRlOmZ1bmN0aW9uKGUpe3RoaXMudG9nZ2xlVmFsdWUoKTt9LF9vbk1vdXNlVXA6ZnVuY3Rpb24oZSl7aWYoZS5pc0xlZnRQcmVzc2VkKCkpe3RoaXMuZXhlY3V0ZSgpO31xeC51aS5tZW51Lk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5oaWRlQWxsKCk7fSxfb25LZXlQcmVzczpmdW5jdGlvbihlKXt0aGlzLmV4ZWN1dGUoKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGY9ImNoYW5nZVZpc2libGUiLGQ9InF4LnVpLnRhYmxlLmNvbHVtbm1lbnUuTWVudUl0ZW0iLGM9Il9hcHBseVZpc2libGUiLGI9IkJvb2xlYW4iLGE9ImNoYW5nZVZhbHVlIjtxeC5DbGFzcy5kZWZpbmUoZCx7ZXh0ZW5kOnF4LnVpLm1lbnUuQ2hlY2tCb3gsaW1wbGVtZW50OnF4LnVpLnRhYmxlLklDb2x1bW5NZW51SXRlbSxwcm9wZXJ0aWVzOnt2aXNpYmxlOntjaGVjazpiLGluaXQ6dHJ1ZSxhcHBseTpjLGV2ZW50OmZ9fSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oZyl7cXgudWkubWVudS5DaGVja0JveC5jYWxsKHRoaXMsZyk7dGhpcy5hZGRMaXN0ZW5lcihhLGZ1bmN0aW9uKGUpe3RoaXMuYkluTGlzdGVuZXI9dHJ1ZTt0aGlzLnNldFZpc2libGUoZS5nZXREYXRhKCkpO3RoaXMuYkluTGlzdGVuZXI9ZmFsc2U7fSk7fSxtZW1iZXJzOntfX3duOmZhbHNlLF9hcHBseVZpc2libGU6ZnVuY3Rpb24oaCxpKXtpZighdGhpcy5iSW5MaXN0ZW5lcil7dGhpcy5zZXRWYWx1ZShoKTt9fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJxeC51aS50YWJsZS5zZWxlY3Rpb24uTW9kZWwiLGE9InF4LnVpLnRhYmxlLnNlbGVjdGlvbi5NYW5hZ2VyIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7fSxwcm9wZXJ0aWVzOntzZWxlY3Rpb25Nb2RlbDp7Y2hlY2s6Yn19LG1lbWJlcnM6e19fd286bnVsbCxoYW5kbGVNb3VzZURvd246ZnVuY3Rpb24oYyxkKXtpZihkLmlzTGVmdFByZXNzZWQoKSl7dmFyIGU9dGhpcy5nZXRTZWxlY3Rpb25Nb2RlbCgpO2lmKCFlLmlzU2VsZWN0ZWRJbmRleChjKSl7dGhpcy5faGFuZGxlU2VsZWN0RXZlbnQoYyxkKTt0aGlzLl9fd289dHJ1ZTt9ZWxzZXt0aGlzLl9fd289ZmFsc2U7fX1lbHNlIGlmKGQuaXNSaWdodFByZXNzZWQoKSYmZC5nZXRNb2RpZmllcnMoKT09MCl7dmFyIGU9dGhpcy5nZXRTZWxlY3Rpb25Nb2RlbCgpO2lmKCFlLmlzU2VsZWN0ZWRJbmRleChjKSl7ZS5zZXRTZWxlY3Rpb25JbnRlcnZhbChjLGMpO319fSxoYW5kbGVNb3VzZVVwOmZ1bmN0aW9uKGYsZyl7aWYoZy5pc0xlZnRQcmVzc2VkKCkmJiF0aGlzLl9fd28pe3RoaXMuX2hhbmRsZVNlbGVjdEV2ZW50KGYsZyk7fX0saGFuZGxlQ2xpY2s6ZnVuY3Rpb24oaCxpKXt9LGhhbmRsZVNlbGVjdEtleURvd246ZnVuY3Rpb24oaixrKXt0aGlzLl9oYW5kbGVTZWxlY3RFdmVudChqLGspO30saGFuZGxlTW92ZUtleURvd246ZnVuY3Rpb24obCxtKXt2YXIgbz10aGlzLmdldFNlbGVjdGlvbk1vZGVsKCk7c3dpdGNoKG0uZ2V0TW9kaWZpZXJzKCkpe2Nhc2UgMDpvLnNldFNlbGVjdGlvbkludGVydmFsKGwsbCk7YnJlYWs7Y2FzZSBxeC5ldmVudC50eXBlLkRvbS5TSElGVF9NQVNLOnZhciBuPW8uZ2V0QW5jaG9yU2VsZWN0aW9uSW5kZXgoKTtpZihuPT0tMSl7by5zZXRTZWxlY3Rpb25JbnRlcnZhbChsLGwpO31lbHNle28uc2V0U2VsZWN0aW9uSW50ZXJ2YWwobixsKTt9YnJlYWs7fX0sX2hhbmRsZVNlbGVjdEV2ZW50OmZ1bmN0aW9uKHAscSl7dmFyIHQ9dGhpcy5nZXRTZWxlY3Rpb25Nb2RlbCgpO3ZhciByPXQuZ2V0TGVhZFNlbGVjdGlvbkluZGV4KCk7dmFyIHM9dC5nZXRBbmNob3JTZWxlY3Rpb25JbmRleCgpO2lmKHEuaXNTaGlmdFByZXNzZWQoKSl7aWYocCE9cnx8dC5pc1NlbGVjdGlvbkVtcHR5KCkpe2lmKHM9PS0xKXtzPXA7fWlmKHEuaXNDdHJsT3JDb21tYW5kUHJlc3NlZCgpKXt0LmFkZFNlbGVjdGlvbkludGVydmFsKHMscCk7fWVsc2V7dC5zZXRTZWxlY3Rpb25JbnRlcnZhbChzLHApO319fWVsc2UgaWYocS5pc0N0cmxPckNvbW1hbmRQcmVzc2VkKCkpe2lmKHQuaXNTZWxlY3RlZEluZGV4KHApKXt0LnJlbW92ZVNlbGVjdGlvbkludGVydmFsKHAscCk7fWVsc2V7dC5hZGRTZWxlY3Rpb25JbnRlcnZhbChwLHApO319ZWxzZXt0LnNldFNlbGVjdGlvbkludGVydmFsKHAscCk7fX19fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbD0iXSIsaz0iLi4iLGg9ImNoYW5nZVNlbGVjdGlvbiIsZz0iX2FwcGx5U2VsZWN0aW9uTW9kZSIsZj0naWUnLGQ9InF4LmV2ZW50LnR5cGUuRXZlbnQiLGM9IlJhbmdlczoiLGI9InF4LnVpLnRhYmxlLnNlbGVjdGlvbi5Nb2RlbCIsYT0iIFsiO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9fd2U9W107dGhpcy5fX3dmPS0xO3RoaXMuX193Zz0tMTt0aGlzLmhhc0JhdGNoTW9kZVJlZkNvdW50PTA7dGhpcy5fX3doPWZhbHNlO30sZXZlbnRzOnsiY2hhbmdlU2VsZWN0aW9uIjpkfSxzdGF0aWNzOntOT19TRUxFQ1RJT046MSxTSU5HTEVfU0VMRUNUSU9OOjIsU0lOR0xFX0lOVEVSVkFMX1NFTEVDVElPTjozLE1VTFRJUExFX0lOVEVSVkFMX1NFTEVDVElPTjo0LE1VTFRJUExFX0lOVEVSVkFMX1NFTEVDVElPTl9UT0dHTEU6NX0scHJvcGVydGllczp7c2VsZWN0aW9uTW9kZTp7aW5pdDoyLGNoZWNrOlsxLDIsMyw0LDVdLGFwcGx5Omd9fSxtZW1iZXJzOntfX3doOm51bGwsX193ZjpudWxsLF9fd2c6bnVsbCxfX3dlOm51bGwsX2FwcGx5U2VsZWN0aW9uTW9kZTpmdW5jdGlvbihtKXt0aGlzLnJlc2V0U2VsZWN0aW9uKCk7fSxzZXRCYXRjaE1vZGU6ZnVuY3Rpb24obil7aWYobil7dGhpcy5oYXNCYXRjaE1vZGVSZWZDb3VudCs9MTt9ZWxzZXtpZih0aGlzLmhhc0JhdGNoTW9kZVJlZkNvdW50PT0wKXt0aHJvdyBuZXcgRXJyb3IoIlRyeSB0byB0dXJuIG9mZiBiYXRjaCBtb2RlIGFsdGhvdWcgaXQgd2FzIG5vdCB0dXJuZWQgb24uIik7fXRoaXMuaGFzQmF0Y2hNb2RlUmVmQ291bnQtPTE7aWYodGhpcy5fX3doKXt0aGlzLl9fd2g9ZmFsc2U7dGhpcy5fZmlyZUNoYW5nZVNlbGVjdGlvbigpO319cmV0dXJuIHRoaXMuaGFzQmF0Y2hNb2RlKCk7fSxoYXNCYXRjaE1vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNCYXRjaE1vZGVSZWZDb3VudD4wO30sZ2V0QW5jaG9yU2VsZWN0aW9uSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3dmO30sX3NldEFuY2hvclNlbGVjdGlvbkluZGV4OmZ1bmN0aW9uKG8pe3RoaXMuX193Zj1vO30sZ2V0TGVhZFNlbGVjdGlvbkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX193Zzt9LF9zZXRMZWFkU2VsZWN0aW9uSW5kZXg6ZnVuY3Rpb24ocCl7dGhpcy5fX3dnPXA7fSxfZ2V0U2VsZWN0ZWRSYW5nZUFycjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fd2U7fSxyZXNldFNlbGVjdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzLmlzU2VsZWN0aW9uRW1wdHkoKSl7dGhpcy5fcmVzZXRTZWxlY3Rpb24oKTt0aGlzLl9maXJlQ2hhbmdlU2VsZWN0aW9uKCk7fX0saXNTZWxlY3Rpb25FbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fd2UubGVuZ3RoPT0wO30sZ2V0U2VsZWN0ZWRDb3VudDpmdW5jdGlvbigpe3ZhciByPTA7Zm9yKHZhciBpPTA7aTx0aGlzLl9fd2UubGVuZ3RoO2krKyl7dmFyIHE9dGhpcy5fX3dlW2ldO3IrPXEubWF4SW5kZXgtcS5taW5JbmRleCsxO31yZXR1cm4gcjt9LGlzU2VsZWN0ZWRJbmRleDpmdW5jdGlvbihzKXtmb3IodmFyIGk9MDtpPHRoaXMuX193ZS5sZW5ndGg7aSsrKXt2YXIgdD10aGlzLl9fd2VbaV07aWYocz49dC5taW5JbmRleCYmczw9dC5tYXhJbmRleCl7cmV0dXJuIHRydWU7fX1yZXR1cm4gZmFsc2U7fSxnZXRTZWxlY3RlZFJhbmdlczpmdW5jdGlvbigpe3ZhciB1PVtdO2Zvcih2YXIgaT0wO2k8dGhpcy5fX3dlLmxlbmd0aDtpKyspe3UucHVzaCh7bWluSW5kZXg6dGhpcy5fX3dlW2ldLm1pbkluZGV4LG1heEluZGV4OnRoaXMuX193ZVtpXS5tYXhJbmRleH0pO31yZXR1cm4gdTt9LGl0ZXJhdGVTZWxlY3Rpb246ZnVuY3Rpb24odix3KXtmb3IodmFyIGk9MDtpPHRoaXMuX193ZS5sZW5ndGg7aSsrKXtmb3IodmFyIGo9dGhpcy5fX3dlW2ldLm1pbkluZGV4O2o8PXRoaXMuX193ZVtpXS5tYXhJbmRleDtqKyspe3YuY2FsbCh3LGopO319fSxzZXRTZWxlY3Rpb25JbnRlcnZhbDpmdW5jdGlvbih4LHkpe3ZhciB6PXRoaXMuc2VsZihhcmd1bWVudHMpO3N3aXRjaCh0aGlzLmdldFNlbGVjdGlvbk1vZGUoKSl7Y2FzZSB6Lk5PX1NFTEVDVElPTjpyZXR1cm47Y2FzZSB6LlNJTkdMRV9TRUxFQ1RJT046aWYodGhpcy5pc1NlbGVjdGVkSW5kZXgoeSkpe3JldHVybjt9eD15O2JyZWFrO2Nhc2Ugei5NVUxUSVBMRV9JTlRFUlZBTF9TRUxFQ1RJT05fVE9HR0xFOnRoaXMuc2V0QmF0Y2hNb2RlKHRydWUpO3RyeXtmb3IodmFyIGk9eDtpPD15O2krKyl7aWYoIXRoaXMuaXNTZWxlY3RlZEluZGV4KGkpKXt0aGlzLl9hZGRTZWxlY3Rpb25JbnRlcnZhbChpLGkpO31lbHNle3RoaXMucmVtb3ZlU2VsZWN0aW9uSW50ZXJ2YWwoaSxpKTt9fX1jYXRjaChlKXtpZihxeC5ib20uY2xpZW50LkJyb3dzZXIuTkFNRT09ZiYmcXguYm9tLmNsaWVudC5Ccm93c2VyLlZFUlNJT048PTcpe3RoaXMuc2V0QmF0Y2hNb2RlKGZhbHNlKTt9dGhyb3cgZTt9ZmluYWxseXt0aGlzLnNldEJhdGNoTW9kZShmYWxzZSk7fXRoaXMuX2ZpcmVDaGFuZ2VTZWxlY3Rpb24oKTtyZXR1cm47fXRoaXMuX3Jlc2V0U2VsZWN0aW9uKCk7dGhpcy5fYWRkU2VsZWN0aW9uSW50ZXJ2YWwoeCx5KTt0aGlzLl9maXJlQ2hhbmdlU2VsZWN0aW9uKCk7fSxhZGRTZWxlY3Rpb25JbnRlcnZhbDpmdW5jdGlvbihBLEIpe3ZhciBDPXF4LnVpLnRhYmxlLnNlbGVjdGlvbi5Nb2RlbDtzd2l0Y2godGhpcy5nZXRTZWxlY3Rpb25Nb2RlKCkpe2Nhc2UgQy5OT19TRUxFQ1RJT046cmV0dXJuO2Nhc2UgQy5NVUxUSVBMRV9JTlRFUlZBTF9TRUxFQ1RJT046Y2FzZSBDLk1VTFRJUExFX0lOVEVSVkFMX1NFTEVDVElPTl9UT0dHTEU6dGhpcy5fYWRkU2VsZWN0aW9uSW50ZXJ2YWwoQSxCKTt0aGlzLl9maXJlQ2hhbmdlU2VsZWN0aW9uKCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnNldFNlbGVjdGlvbkludGVydmFsKEEsQik7YnJlYWs7fX0scmVtb3ZlU2VsZWN0aW9uSW50ZXJ2YWw6ZnVuY3Rpb24oRCxFKXt0aGlzLl9fd2Y9RDt0aGlzLl9fd2c9RTt2YXIgRj1NYXRoLm1pbihELEUpO3ZhciBIPU1hdGgubWF4KEQsRSk7Zm9yKHZhciBpPTA7aTx0aGlzLl9fd2UubGVuZ3RoO2krKyl7dmFyIEo9dGhpcy5fX3dlW2ldO2lmKEoubWluSW5kZXg+SCl7YnJlYWs7fWVsc2UgaWYoSi5tYXhJbmRleD49Ril7dmFyIEs9KEoubWluSW5kZXg+PUYpJiYoSi5taW5JbmRleDw9SCk7dmFyIEk9KEoubWF4SW5kZXg+PUYpJiYoSi5tYXhJbmRleDw9SCk7aWYoSyYmSSl7dGhpcy5fX3dlLnNwbGljZShpLDEpO2ktLTt9ZWxzZSBpZihLKXtKLm1pbkluZGV4PUgrMTt9ZWxzZSBpZihJKXtKLm1heEluZGV4PUYtMTt9ZWxzZXt2YXIgRz17bWluSW5kZXg6SCsxLG1heEluZGV4OkoubWF4SW5kZXh9O3RoaXMuX193ZS5zcGxpY2UoaSsxLDAsRyk7Si5tYXhJbmRleD1GLTE7YnJlYWs7fX19dGhpcy5fZmlyZUNoYW5nZVNlbGVjdGlvbigpO30sX3Jlc2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5fX3dlPVtdO3RoaXMuX193Zj0tMTt0aGlzLl9fd2c9LTE7fSxfYWRkU2VsZWN0aW9uSW50ZXJ2YWw6ZnVuY3Rpb24oTCxNKXt0aGlzLl9fd2Y9TDt0aGlzLl9fd2c9TTt2YXIgTj1NYXRoLm1pbihMLE0pO3ZhciBQPU1hdGgubWF4KEwsTSk7dmFyIE89MDtmb3IoO088dGhpcy5fX3dlLmxlbmd0aDtPKyspe3ZhciBRPXRoaXMuX193ZVtPXTtpZihRLm1pbkluZGV4Pk4pe2JyZWFrO319dGhpcy5fX3dlLnNwbGljZShPLDAse21pbkluZGV4Ok4sbWF4SW5kZXg6UH0pO3ZhciBSPXRoaXMuX193ZVswXTtmb3IodmFyIGk9MTtpPHRoaXMuX193ZS5sZW5ndGg7aSsrKXt2YXIgUT10aGlzLl9fd2VbaV07aWYoUi5tYXhJbmRleCsxPj1RLm1pbkluZGV4KXtSLm1heEluZGV4PU1hdGgubWF4KFIubWF4SW5kZXgsUS5tYXhJbmRleCk7dGhpcy5fX3dlLnNwbGljZShpLDEpO2ktLTt9ZWxzZXtSPVE7fX19LF9kdW1wUmFuZ2VzOmZ1bmN0aW9uKCl7dmFyIFM9Yztmb3IodmFyIGk9MDtpPHRoaXMuX193ZS5sZW5ndGg7aSsrKXt2YXIgVD10aGlzLl9fd2VbaV07Uys9YStULm1pbkluZGV4K2srVC5tYXhJbmRleCtsO310aGlzLmRlYnVnKFMpO30sX2ZpcmVDaGFuZ2VTZWxlY3Rpb246ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0JhdGNoTW9kZSgpKXt0aGlzLl9fd2g9dHJ1ZTt9ZWxzZXt0aGlzLmZpcmVFdmVudChoKTt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9fd2U9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaz0iIixqPSJOdW1iZXIiLGg9JzwvZGl2PicsZz0nIiAnLGY9InBhbmVVcGRhdGVkIixlPSc8ZGl2PicsZD0iPC9kaXY+IixjPSJvdmVyZmxvdzogaGlkZGVuOyIsYj0icXguZXZlbnQudHlwZS5EYXRhIixhPSJwYW5lUmVsb2Fkc0RhdGEiLEU9ImRpdiIsRD0nc3R5bGU9IicsQz0iX2FwcGx5TWF4Q2FjaGVMaW5lcyIsQj0icXgudWkudGFibGUucGFuZS5QYW5lIixBPSJ3aWR0aDogMTAwJTsiLHo9InF4LmV2ZW50LnR5cGUuRXZlbnQiLHc9Il9hcHBseVZpc2libGVSb3dDb3VudCIsdj0nPicsdT0ibGluZS1oZWlnaHQ6ICIsdD0iYXBwZWFyIixyPSdjbGFzcz0iJyxzPSJ3aWR0aDoxMDAlOyIscD0icHg7IixxPSc8ZGl2ICcsbj0iJz4iLG89Il9hcHBseUZpcnN0VmlzaWJsZVJvdyIsbD0iPGRpdiBzdHlsZT0nIixtPSI7cG9zaXRpb246cmVsYXRpdmU7IjtxeC5DbGFzcy5kZWZpbmUoQix7ZXh0ZW5kOnF4LnVpLmNvcmUuV2lkZ2V0LGNvbnN0cnVjdDpmdW5jdGlvbihGKXtxeC51aS5jb3JlLldpZGdldC5jYWxsKHRoaXMpO3RoaXMuX193TD1GO3RoaXMuX193TT0wO3RoaXMuX193Tj0wO3RoaXMuX193Tz1bXTt9LGV2ZW50czp7InBhbmVSZWxvYWRzRGF0YSI6YiwicGFuZVVwZGF0ZWQiOnp9LHByb3BlcnRpZXM6e2ZpcnN0VmlzaWJsZVJvdzp7Y2hlY2s6aixpbml0OjAsYXBwbHk6b30sdmlzaWJsZVJvd0NvdW50OntjaGVjazpqLGluaXQ6MCxhcHBseTp3fSxtYXhDYWNoZUxpbmVzOntjaGVjazpqLGluaXQ6MTAwMCxhcHBseTpDfSxhbGxvd1Nocmlua1g6e3JlZmluZTp0cnVlLGluaXQ6ZmFsc2V9fSxtZW1iZXJzOntfX3dOOm51bGwsX193TTpudWxsLF9fd0w6bnVsbCxfX3dQOm51bGwsX193UTpudWxsLF9fd1I6bnVsbCxfX3dPOm51bGwsX193UzowLF9hcHBseUZpcnN0VmlzaWJsZVJvdzpmdW5jdGlvbihHLEgpe3RoaXMudXBkYXRlQ29udGVudChmYWxzZSxHLUgpO30sX2FwcGx5VmlzaWJsZVJvd0NvdW50OmZ1bmN0aW9uKEksSil7dGhpcy51cGRhdGVDb250ZW50KHRydWUpO30sX2dldENvbnRlbnRIaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHt3aWR0aDp0aGlzLmdldFBhbmVTY3JvbGxlcigpLmdldFRhYmxlUGFuZU1vZGVsKCkuZ2V0VG90YWxXaWR0aCgpLGhlaWdodDo0MDB9O30sZ2V0UGFuZVNjcm9sbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX193TDt9LGdldFRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX193TC5nZXRUYWJsZSgpO30sc2V0Rm9jdXNlZENlbGw6ZnVuY3Rpb24oSyxMLE0pe2lmKEshPXRoaXMuX193Unx8TCE9dGhpcy5fX3dRKXt2YXIgTj10aGlzLl9fd1E7dGhpcy5fX3dSPUs7dGhpcy5fX3dRPUw7aWYoTCE9TiYmIU0pe2lmKE4hPT1udWxsKXt0aGlzLnVwZGF0ZUNvbnRlbnQoZmFsc2UsbnVsbCxOLHRydWUpO31pZihMIT09bnVsbCl7dGhpcy51cGRhdGVDb250ZW50KGZhbHNlLG51bGwsTCx0cnVlKTt9fX19LG9uU2VsZWN0aW9uQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMudXBkYXRlQ29udGVudChmYWxzZSxudWxsLG51bGwsdHJ1ZSk7fSxvbkZvY3VzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMudXBkYXRlQ29udGVudChmYWxzZSxudWxsLG51bGwsdHJ1ZSk7fSxzZXRDb2x1bW5XaWR0aDpmdW5jdGlvbihPLFApe3RoaXMudXBkYXRlQ29udGVudCh0cnVlKTt9LG9uQ29sT3JkZXJDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGVDb250ZW50KHRydWUpO30sb25QYW5lTW9kZWxDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGVDb250ZW50KHRydWUpO30sb25UYWJsZU1vZGVsRGF0YUNoYW5nZWQ6ZnVuY3Rpb24oUSxSLFMsVCl7dGhpcy5fX3dUKCk7dmFyIFY9dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKTt2YXIgVT10aGlzLmdldFZpc2libGVSb3dDb3VudCgpO2lmKFI9PS0xfHxSPj1WJiZRPFYrVSl7dGhpcy51cGRhdGVDb250ZW50KCk7fX0sb25UYWJsZU1vZGVsTWV0YURhdGFDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGVDb250ZW50KHRydWUpO30sX2FwcGx5TWF4Q2FjaGVMaW5lczpmdW5jdGlvbihXLFgpe2lmKHRoaXMuX193Uz49VyYmVyE9PS0xKXt0aGlzLl9fd1QoKTt9fSxfX3dUOmZ1bmN0aW9uKCl7dGhpcy5fX3dPPVtdO3RoaXMuX193Uz0wO30sX193VTpmdW5jdGlvbihZLGJhLGJiKXtpZighYmEmJiFiYiYmdGhpcy5fX3dPW1ldKXtyZXR1cm4gdGhpcy5fX3dPW1ldO31lbHNle3JldHVybiBudWxsO319LF9fd1Y6ZnVuY3Rpb24oYmMsYmQsYmUsYmYpe3ZhciBiZz10aGlzLmdldE1heENhY2hlTGluZXMoKTtpZighYmUmJiFiZiYmIXRoaXMuX193T1tiY10mJmJnPjApe3RoaXMuX2FwcGx5TWF4Q2FjaGVMaW5lcyhiZyk7dGhpcy5fX3dPW2JjXT1iZDt0aGlzLl9fd1MrPTE7fX0sdXBkYXRlQ29udGVudDpmdW5jdGlvbihiaCxiaSxiaixiayl7aWYoYmgpe3RoaXMuX193VCgpO31pZihiaSYmTWF0aC5hYnMoYmkpPD1NYXRoLm1pbigxMCx0aGlzLmdldFZpc2libGVSb3dDb3VudCgpKSl7dGhpcy5fc2Nyb2xsQ29udGVudChiaSk7fWVsc2UgaWYoYmsmJiF0aGlzLmdldFRhYmxlKCkuZ2V0QWx3YXlzVXBkYXRlQ2VsbHMoKSl7dGhpcy5fdXBkYXRlUm93U3R5bGVzKGJqKTt9ZWxzZXt0aGlzLl91cGRhdGVBbGxSb3dzKCk7fX0sX3VwZGF0ZVJvd1N0eWxlczpmdW5jdGlvbihibCl7dmFyIGJwPXRoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5nZXREb21FbGVtZW50KCk7aWYoIWJwfHwhYnAuZmlyc3RDaGlsZCl7dGhpcy5fdXBkYXRlQWxsUm93cygpO3JldHVybjt9dmFyIGJ0PXRoaXMuZ2V0VGFibGUoKTt2YXIgYm49YnQuZ2V0U2VsZWN0aW9uTW9kZWwoKTt2YXIgYnE9YnQuZ2V0VGFibGVNb2RlbCgpO3ZhciBidT1idC5nZXREYXRhUm93UmVuZGVyZXIoKTt2YXIgYm89YnAuZmlyc3RDaGlsZC5jaGlsZE5vZGVzO3ZhciBicz17dGFibGU6YnR9O3ZhciBidj10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpO3ZhciB5PTA7dmFyIGJtPWJvLmxlbmd0aDtpZihibCE9bnVsbCl7dmFyIGJyPWJsLWJ2O2lmKGJyPj0wJiZicjxibSl7YnY9Ymw7eT1icjtibT1icisxO31lbHNle3JldHVybjt9fWZvcig7eTxibTt5KyssYnYrKyl7YnMucm93PWJ2O2JzLnNlbGVjdGVkPWJuLmlzU2VsZWN0ZWRJbmRleChidik7YnMuZm9jdXNlZFJvdz0odGhpcy5fX3dRPT1idik7YnMucm93RGF0YT1icS5nZXRSb3dEYXRhKGJ2KTtidS51cGRhdGVEYXRhUm93RWxlbWVudChicyxib1t5XSk7fX0sX2dldFJvd3NIdG1sOmZ1bmN0aW9uKGJ3LGJ4KXt2YXIgYkQ9dGhpcy5nZXRUYWJsZSgpO3ZhciBiRz1iRC5nZXRTZWxlY3Rpb25Nb2RlbCgpO3ZhciBiQT1iRC5nZXRUYWJsZU1vZGVsKCk7dmFyIGJCPWJELmdldFRhYmxlQ29sdW1uTW9kZWwoKTt2YXIgYlY9dGhpcy5nZXRQYW5lU2Nyb2xsZXIoKS5nZXRUYWJsZVBhbmVNb2RlbCgpO3ZhciBiTD1iRC5nZXREYXRhUm93UmVuZGVyZXIoKTtiQS5wcmVmZXRjaFJvd3MoYncsYncrYngtMSk7dmFyIGJTPWJELmdldFJvd0hlaWdodCgpO3ZhciBiVT1iVi5nZXRDb2x1bW5Db3VudCgpO3ZhciBiQz0wO3ZhciBiej1bXTtmb3IodmFyIHg9MDt4PGJVO3grKyl7dmFyIGJZPWJWLmdldENvbHVtbkF0WCh4KTt2YXIgYkY9YkIuZ2V0Q29sdW1uV2lkdGgoYlkpO2J6LnB1c2goe2NvbDpiWSx4UG9zOngsZWRpdGFibGU6YkEuaXNDb2x1bW5FZGl0YWJsZShiWSksZm9jdXNlZENvbDp0aGlzLl9fd1I9PWJZLHN0eWxlTGVmdDpiQyxzdHlsZVdpZHRoOmJGfSk7YkMrPWJGO312YXIgYlg9W107dmFyIGNhPWZhbHNlO2Zvcih2YXIgYkU9Ync7YkU8YncrYng7YkUrKyl7dmFyIGJIPWJHLmlzU2VsZWN0ZWRJbmRleChiRSk7dmFyIGJLPSh0aGlzLl9fd1E9PWJFKTt2YXIgYlA9dGhpcy5fX3dVKGJFLGJILGJLKTtpZihiUCl7YlgucHVzaChiUCk7Y29udGludWU7fXZhciBieT1bXTt2YXIgYlI9e3RhYmxlOmJEfTtiUi5zdHlsZUhlaWdodD1iUztiUi5yb3c9YkU7YlIuc2VsZWN0ZWQ9Ykg7YlIuZm9jdXNlZFJvdz1iSztiUi5yb3dEYXRhPWJBLmdldFJvd0RhdGEoYkUpO2lmKCFiUi5yb3dEYXRhKXtjYT10cnVlO31ieS5wdXNoKHEpO3ZhciBiTz1iTC5nZXRSb3dBdHRyaWJ1dGVzKGJSKTtpZihiTyl7YnkucHVzaChiTyk7fXZhciBiTj1iTC5nZXRSb3dDbGFzcyhiUik7aWYoYk4pe2J5LnB1c2gocixiTixnKTt9dmFyIGJNPWJMLmNyZWF0ZVJvd1N0eWxlKGJSKTtiTSs9bStiTC5nZXRSb3dIZWlnaHRTdHlsZShiUykrcztpZihiTSl7YnkucHVzaChELGJNLGcpO31ieS5wdXNoKHYpO3ZhciBiVz1mYWxzZTtmb3IoeD0wO3g8YlUmJiFiVzt4Kyspe3ZhciBiST1ielt4XTtmb3IodmFyIGJUIGluIGJJKXtiUltiVF09YklbYlRdO312YXIgYlk9YlIuY29sO2JSLnZhbHVlPWJBLmdldFZhbHVlKGJZLGJFKTt2YXIgYko9YkIuZ2V0RGF0YUNlbGxSZW5kZXJlcihiWSk7YlIuc3R5bGU9YkouZ2V0RGVmYXVsdENlbGxTdHlsZSgpO2JXPWJKLmNyZWF0ZURhdGFDZWxsSHRtbChiUixieSl8fGZhbHNlO31ieS5wdXNoKGgpO3ZhciBiUT1ieS5qb2luKGspO3RoaXMuX193VihiRSxiUSxiSCxiSyk7YlgucHVzaChiUSk7fXRoaXMuZmlyZURhdGFFdmVudChhLGNhKTtyZXR1cm4gYlguam9pbihrKTt9LF9zY3JvbGxDb250ZW50OmZ1bmN0aW9uKGNiKXt2YXIgY2M9dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLmdldERvbUVsZW1lbnQoKTtpZighKGNjJiZjYy5maXJzdENoaWxkKSl7dGhpcy5fdXBkYXRlQWxsUm93cygpO3JldHVybjt9dmFyIGNsPWNjLmZpcnN0Q2hpbGQ7dmFyIGNkPWNsLmNoaWxkTm9kZXM7dmFyIGNqPXRoaXMuZ2V0VmlzaWJsZVJvd0NvdW50KCk7dmFyIGNpPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCk7dmFyIGNnPXRoaXMuZ2V0VGFibGUoKS5nZXRUYWJsZU1vZGVsKCk7dmFyIGNtPTA7Y209Y2cuZ2V0Um93Q291bnQoKTtpZihjaStjaj5jbSl7dGhpcy5fdXBkYXRlQWxsUm93cygpO3JldHVybjt9dmFyIGNuPWNiPDA/Y2orY2I6MDt2YXIgY2U9Y2I8MD8wOmNqLWNiO2ZvcihpPU1hdGguYWJzKGNiKS0xO2k+PTA7aS0tKXt2YXIgY2g9Y2RbY25dO3RyeXtjbC5yZW1vdmVDaGlsZChjaCk7fWNhdGNoKGNvKXticmVhazt9fWlmKCF0aGlzLl9fd1Ape3RoaXMuX193UD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KEUpO312YXIgY2s9ZTtjays9dGhpcy5fZ2V0Um93c0h0bWwoY2krY2UsTWF0aC5hYnMoY2IpKTtjays9aDt0aGlzLl9fd1AuaW5uZXJIVE1MPWNrO3ZhciBjZj10aGlzLl9fd1AuZmlyc3RDaGlsZC5jaGlsZE5vZGVzO2lmKGNiPjApe2Zvcih2YXIgaT1jZi5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIGNoPWNmWzBdO2NsLmFwcGVuZENoaWxkKGNoKTt9fWVsc2V7Zm9yKHZhciBpPWNmLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgY2g9Y2ZbY2YubGVuZ3RoLTFdO2NsLmluc2VydEJlZm9yZShjaCxjbC5maXJzdENoaWxkKTt9fWlmKHRoaXMuX193USE9PW51bGwpe3RoaXMuX3VwZGF0ZVJvd1N0eWxlcyh0aGlzLl9fd1EtY2IpO3RoaXMuX3VwZGF0ZVJvd1N0eWxlcyh0aGlzLl9fd1EpO310aGlzLmZpcmVFdmVudChmKTt9LF91cGRhdGVBbGxSb3dzOmZ1bmN0aW9uKCl7dmFyIGNzPXRoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5nZXREb21FbGVtZW50KCk7aWYoIWNzKXt0aGlzLmFkZExpc3RlbmVyT25jZSh0LGFyZ3VtZW50cy5jYWxsZWUsdGhpcyk7cmV0dXJuO312YXIgY3k9dGhpcy5nZXRUYWJsZSgpO3ZhciBjdj1jeS5nZXRUYWJsZU1vZGVsKCk7dmFyIGN4PXRoaXMuZ2V0UGFuZVNjcm9sbGVyKCkuZ2V0VGFibGVQYW5lTW9kZWwoKTt2YXIgY3c9Y3guZ2V0Q29sdW1uQ291bnQoKTt2YXIgY3A9Y3kuZ2V0Um93SGVpZ2h0KCk7dmFyIGN0PXRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCk7dmFyIGNxPXRoaXMuZ2V0VmlzaWJsZVJvd0NvdW50KCk7dmFyIGN6PWN2LmdldFJvd0NvdW50KCk7aWYoY3QrY3E+Y3ope2NxPU1hdGgubWF4KDAsY3otY3QpO312YXIgY3I9Y3guZ2V0VG90YWxXaWR0aCgpO3ZhciBjdTtpZihjcT4wKXtjdT1bbCxBLChjeS5nZXRGb3JjZUxpbmVIZWlnaHQoKT91K2NwK3A6ayksYyxuLHRoaXMuX2dldFJvd3NIdG1sKGN0LGNxKSxkXTt9ZWxzZXtjdT1bXTt9dmFyIGNBPWN1LmpvaW4oayk7Y3MuaW5uZXJIVE1MPWNBO3RoaXMuc2V0V2lkdGgoY3IpO3RoaXMuX193TT1jdzt0aGlzLl9fd049Y3E7dGhpcy5maXJlRXZlbnQoZik7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9fd1A9dGhpcy5fX3dMPXRoaXMuX193Tz1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBjPSJob3ZlcmVkIixiPSJfX3dYIixhPSJxeC51aS50YWJsZS5wYW5lLkhlYWRlciI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC51aS5jb3JlLldpZGdldCxjb25zdHJ1Y3Q6ZnVuY3Rpb24oZCl7cXgudWkuY29yZS5XaWRnZXQuY2FsbCh0aGlzKTt0aGlzLl9zZXRMYXlvdXQobmV3IHF4LnVpLmxheW91dC5IQm94KCkpO3RoaXMuX193Vz1uZXcgcXgudWkuY29yZS5CbG9ja2VyKHRoaXMpO3RoaXMuX193WD1kO30sbWVtYmVyczp7X193WDpudWxsLF9fd1k6bnVsbCxfX3hhOm51bGwsX193VzpudWxsLGdldFBhbmVTY3JvbGxlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fd1g7fSxnZXRUYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fd1guZ2V0VGFibGUoKTt9LGdldEJsb2NrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3dXO30sb25Db2xPcmRlckNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVDb250ZW50KHRydWUpO30sb25QYW5lTW9kZWxDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlQ29udGVudCh0cnVlKTt9LG9uVGFibGVNb2RlbE1ldGFEYXRhQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUNvbnRlbnQoKTt9LHNldENvbHVtbldpZHRoOmZ1bmN0aW9uKGUsZixnKXt2YXIgaD10aGlzLmdldEhlYWRlcldpZGdldEF0Q29sdW1uKGUpO2lmKGghPW51bGwpe2guc2V0V2lkdGgoZik7fX0sc2V0TW91c2VPdmVyQ29sdW1uOmZ1bmN0aW9uKGkpe2lmKGkhPXRoaXMuX194YSl7aWYodGhpcy5fX3hhIT1udWxsKXt2YXIgaj10aGlzLmdldEhlYWRlcldpZGdldEF0Q29sdW1uKHRoaXMuX194YSk7aWYoaiE9bnVsbCl7ai5yZW1vdmVTdGF0ZShjKTt9fWlmKGkhPW51bGwpe3RoaXMuZ2V0SGVhZGVyV2lkZ2V0QXRDb2x1bW4oaSkuYWRkU3RhdGUoYyk7fXRoaXMuX194YT1pO319LGdldEhlYWRlcldpZGdldEF0Q29sdW1uOmZ1bmN0aW9uKGspe3ZhciBsPXRoaXMuZ2V0UGFuZVNjcm9sbGVyKCkuZ2V0VGFibGVQYW5lTW9kZWwoKS5nZXRYKGspO3JldHVybiB0aGlzLl9nZXRDaGlsZHJlbigpW2xdO30sc2hvd0NvbHVtbk1vdmVGZWVkYmFjazpmdW5jdGlvbihtLHgpe3ZhciBxPXRoaXMuZ2V0Q29udGFpbmVyTG9jYXRpb24oKTtpZih0aGlzLl9fd1k9PW51bGwpe3ZhciB2PXRoaXMuZ2V0VGFibGUoKTt2YXIgbj10aGlzLmdldFBhbmVTY3JvbGxlcigpLmdldFRhYmxlUGFuZU1vZGVsKCkuZ2V0WChtKTt2YXIgcD10aGlzLl9nZXRDaGlsZHJlbigpW25dO3ZhciByPXYuZ2V0VGFibGVNb2RlbCgpO3ZhciB0PXYuZ2V0VGFibGVDb2x1bW5Nb2RlbCgpO3ZhciB1PXt4UG9zOm4sY29sOm0sbmFtZTpyLmdldENvbHVtbk5hbWUobSksdGFibGU6dn07dmFyIHM9dC5nZXRIZWFkZXJDZWxsUmVuZGVyZXIobSk7dmFyIG89cy5jcmVhdGVIZWFkZXJDZWxsKHUpO3ZhciB3PXAuZ2V0Qm91bmRzKCk7by5zZXRXaWR0aCh3LndpZHRoKTtvLnNldEhlaWdodCh3LmhlaWdodCk7by5zZXRaSW5kZXgoMTAwMDAwMCk7by5zZXRPcGFjaXR5KDAuOCk7by5zZXRMYXlvdXRQcm9wZXJ0aWVzKHt0b3A6cS50b3B9KTt0aGlzLmdldEFwcGxpY2F0aW9uUm9vdCgpLmFkZChvKTt0aGlzLl9fd1k9bzt9dGhpcy5fX3dZLnNldExheW91dFByb3BlcnRpZXMoe2xlZnQ6cS5sZWZ0K3h9KTt0aGlzLl9fd1kuc2hvdygpO30saGlkZUNvbHVtbk1vdmVGZWVkYmFjazpmdW5jdGlvbigpe2lmKHRoaXMuX193WSE9bnVsbCl7dGhpcy5fX3dZLmRlc3Ryb3koKTt0aGlzLl9fd1k9bnVsbDt9fSxpc1Nob3dpbmdDb2x1bW5Nb3ZlRmVlZGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3dZIT1udWxsO30sX3VwZGF0ZUNvbnRlbnQ6ZnVuY3Rpb24oeSl7dmFyIEk9dGhpcy5nZXRUYWJsZSgpO3ZhciBDPUkuZ2V0VGFibGVNb2RlbCgpO3ZhciBGPUkuZ2V0VGFibGVDb2x1bW5Nb2RlbCgpO3ZhciBIPXRoaXMuZ2V0UGFuZVNjcm9sbGVyKCkuZ2V0VGFibGVQYW5lTW9kZWwoKTt2YXIgSz10aGlzLl9nZXRDaGlsZHJlbigpO3ZhciBEPUguZ2V0Q29sdW1uQ291bnQoKTt2YXIgRz1DLmdldFNvcnRDb2x1bW5JbmRleCgpO2lmKHkpe3RoaXMuX2NsZWFuVXBDZWxscygpO312YXIgej17fTt6LnNvcnRlZEFzY2VuZGluZz1DLmlzU29ydEFzY2VuZGluZygpO2Zvcih2YXIgeD0wO3g8RDt4Kyspe3ZhciBCPUguZ2V0Q29sdW1uQXRYKHgpO2lmKEI9PT11bmRlZmluZWQpe2NvbnRpbnVlO312YXIgSj1GLmdldENvbHVtbldpZHRoKEIpO3ZhciBFPUYuZ2V0SGVhZGVyQ2VsbFJlbmRlcmVyKEIpO3oueFBvcz14O3ouY29sPUI7ei5uYW1lPUMuZ2V0Q29sdW1uTmFtZShCKTt6LmVkaXRhYmxlPUMuaXNDb2x1bW5FZGl0YWJsZShCKTt6LnNvcnRlZD0oQj09Ryk7ei50YWJsZT1JO3ZhciBBPUtbeF07aWYoQT09bnVsbCl7QT1FLmNyZWF0ZUhlYWRlckNlbGwoeik7QS5zZXQoe3dpZHRoOkp9KTt0aGlzLl9hZGQoQSk7fWVsc2V7RS51cGRhdGVIZWFkZXJDZWxsKHosQSk7fX19LF9jbGVhblVwQ2VsbHM6ZnVuY3Rpb24oKXt2YXIgTT10aGlzLl9nZXRDaGlsZHJlbigpO2Zvcih2YXIgeD1NLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgTD1NW3hdO0wuZGVzdHJveSgpO319fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX193Vy5kaXNwb3NlKCk7dGhpcy5fZGlzcG9zZU9iamVjdHMoYik7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIG09IkJvb2xlYW4iLGw9InJlc2l6ZS1saW5lIixrPSJtb3VzZWRvd24iLGo9InF4LmV2ZW50LnR5cGUuRGF0YSIsaT0ibW91c2V1cCIsaD0icXgudWkudGFibGUucGFuZS5DZWxsRXZlbnQiLGc9InNjcm9sbCIsZD0iZm9jdXMtaW5kaWNhdG9yIixjPSJleGNsdWRlZCIsYj0ic2Nyb2xsYmFyLXkiLGJtPSJ0YWJsZS1zY3JvbGxlci1mb2N1cy1pbmRpY2F0b3IiLGJsPSJ2aXNpYmxlIixiaz0ibW91c2Vtb3ZlIixiaj0iaGVhZGVyIixiaT0iZWRpdGluZyIsYmg9ImNsaWNrIixiZz0ibW9kZWxDaGFuZ2VkIixiZj0ic2Nyb2xsYmFyLXgiLGJlPSJjZWxsQ2xpY2siLGJkPSJwYW5lIix0PSJfX3hpIix1PSJfX3hjIixyPSJtb3VzZW91dCIscz0iX194aCIscD0iY2hhbmdlSG9yaXpvbnRhbFNjcm9sbEJhclZpc2libGUiLHE9ImJvdHRvbSIsbj0iX2FwcGx5U2Nyb2xsVGltZW91dCIsbz0iY2hhbmdlU2Nyb2xsWCIsej0iX2FwcGx5VGFibGVQYW5lTW9kZWwiLEE9IkludGVnZXIiLEk9Il9feGciLEc9ImRibGNsaWNrIixRPSJkYXRhRWRpdGVkIixMPSJtb3VzZXdoZWVsIixZPSJpbnRlcnZhbCIsVj0icXgudWkudGFibGUucGFuZS5TY3JvbGxlciIsQz0iX194ayIsYmM9Il9hcHBseVNob3dDZWxsRm9jdXNJbmRpY2F0b3IiLGJiPSJfX3hlIixiYT0icmVzaXplIixCPSJ2ZXJ0aWNhbCIsRT0iY2hhbmdlU2Nyb2xsWSIsRj0iYXBwZWFyIixIPSJ0YWJsZS1zY3JvbGxlciIsSj0iYmVmb3JlU29ydCIsTT0iX194ZCIsUz0iY2VsbERibGNsaWNrIixYPSJob3Jpem9udGFsIix2PSJsb3NlY2FwdHVyZSIsdz0iY29udGV4dG1lbnUiLEQ9ImNvbC1yZXNpemUiLFA9ImRpc2FwcGVhciIsTz0iX2FwcGx5VmVydGljYWxTY3JvbGxCYXJWaXNpYmxlIixOPSJfYXBwbHlIb3Jpem9udGFsU2Nyb2xsQmFyVmlzaWJsZSIsVT0iY2VsbENvbnRleHRtZW51IixUPSJfX3hqIixLPSJjbG9zZSIsUj0iY2hhbmdlVGFibGVQYW5lTW9kZWwiLGE9Il9feGYiLFc9InF4LnVpLnRhYmxlLnBhbmUuTW9kZWwiLHk9ImNoYW5nZVZlcnRpY2FsU2Nyb2xsQmFyVmlzaWJsZSI7cXguQ2xhc3MuZGVmaW5lKFYse2V4dGVuZDpxeC51aS5jb3JlLldpZGdldCxpbmNsdWRlOnF4LnVpLmNvcmUuc2Nyb2xsLk1TY3JvbGxCYXJGYWN0b3J5LGNvbnN0cnVjdDpmdW5jdGlvbihibil7cXgudWkuY29yZS5XaWRnZXQuY2FsbCh0aGlzKTt0aGlzLl9feGI9Ym47dmFyIGJvPW5ldyBxeC51aS5sYXlvdXQuR3JpZCgpO2JvLnNldENvbHVtbkZsZXgoMCwxKTtiby5zZXRSb3dGbGV4KDEsMSk7dGhpcy5fc2V0TGF5b3V0KGJvKTt0aGlzLl9feGM9dGhpcy5fc2hvd0NoaWxkQ29udHJvbChiZik7dGhpcy5fX3hkPXRoaXMuX3Nob3dDaGlsZENvbnRyb2woYik7dGhpcy5fX3hlPXRoaXMuX3Nob3dDaGlsZENvbnRyb2woYmopO3RoaXMuX194Zj10aGlzLl9zaG93Q2hpbGRDb250cm9sKGJkKTt0aGlzLl9feGc9bmV3IHF4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUobmV3IHF4LnVpLmxheW91dC5IQm94KCkpLnNldCh7bWluV2lkdGg6MH0pO3RoaXMuX2FkZCh0aGlzLl9feGcse3JvdzowLGNvbHVtbjowLGNvbFNwYW46Mn0pO3RoaXMuX194aD1uZXcgcXgudWkudGFibGUucGFuZS5DbGlwcGVyKCk7dGhpcy5fX3hoLmFkZCh0aGlzLl9feGUpO3RoaXMuX194aC5hZGRMaXN0ZW5lcih2LHRoaXMuX29uQ2hhbmdlQ2FwdHVyZUhlYWRlcix0aGlzKTt0aGlzLl9feGguYWRkTGlzdGVuZXIoYmssdGhpcy5fb25Nb3VzZW1vdmVIZWFkZXIsdGhpcyk7dGhpcy5fX3hoLmFkZExpc3RlbmVyKGssdGhpcy5fb25Nb3VzZWRvd25IZWFkZXIsdGhpcyk7dGhpcy5fX3hoLmFkZExpc3RlbmVyKGksdGhpcy5fb25Nb3VzZXVwSGVhZGVyLHRoaXMpO3RoaXMuX194aC5hZGRMaXN0ZW5lcihiaCx0aGlzLl9vbkNsaWNrSGVhZGVyLHRoaXMpO3RoaXMuX194Zy5hZGQodGhpcy5fX3hoLHtmbGV4OjF9KTt0aGlzLl9feGk9bmV3IHF4LnVpLnRhYmxlLnBhbmUuQ2xpcHBlcigpO3RoaXMuX194aS5hZGQodGhpcy5fX3hmKTt0aGlzLl9feGkuYWRkTGlzdGVuZXIoTCx0aGlzLl9vbk1vdXNld2hlZWwsdGhpcyk7dGhpcy5fX3hpLmFkZExpc3RlbmVyKGJrLHRoaXMuX29uTW91c2Vtb3ZlUGFuZSx0aGlzKTt0aGlzLl9feGkuYWRkTGlzdGVuZXIoayx0aGlzLl9vbk1vdXNlZG93blBhbmUsdGhpcyk7dGhpcy5fX3hpLmFkZExpc3RlbmVyKGksdGhpcy5fb25Nb3VzZXVwUGFuZSx0aGlzKTt0aGlzLl9feGkuYWRkTGlzdGVuZXIoYmgsdGhpcy5fb25DbGlja1BhbmUsdGhpcyk7dGhpcy5fX3hpLmFkZExpc3RlbmVyKHcsdGhpcy5fb25Db250ZXh0TWVudSx0aGlzKTt0aGlzLl9feGkuYWRkTGlzdGVuZXIoRyx0aGlzLl9vbkRibGNsaWNrUGFuZSx0aGlzKTt0aGlzLl9feGkuYWRkTGlzdGVuZXIoYmEsdGhpcy5fb25SZXNpemVQYW5lLHRoaXMpO3RoaXMuX2FkZCh0aGlzLl9feGkse3JvdzoxLGNvbHVtbjowfSk7dGhpcy5fX3hqPXRoaXMuZ2V0Q2hpbGRDb250cm9sKGQpO3RoaXMuaW5pdFNob3dDZWxsRm9jdXNJbmRpY2F0b3IoKTt0aGlzLmdldENoaWxkQ29udHJvbChsKS5oaWRlKCk7dGhpcy5hZGRMaXN0ZW5lcihyLHRoaXMuX29uTW91c2VvdXQsdGhpcyk7dGhpcy5hZGRMaXN0ZW5lcihGLHRoaXMuX29uQXBwZWFyLHRoaXMpO3RoaXMuYWRkTGlzdGVuZXIoUCx0aGlzLl9vbkRpc2FwcGVhcix0aGlzKTt0aGlzLl9feGs9bmV3IHF4LmV2ZW50LlRpbWVyKCk7dGhpcy5fX3hrLmFkZExpc3RlbmVyKFksdGhpcy5fb25pbnRlcnZhbCx0aGlzKTt0aGlzLmluaXRTY3JvbGxUaW1lb3V0KCk7fSxzdGF0aWNzOntNSU5fQ09MVU1OX1dJRFRIOjEwLFJFU0laRV9SRUdJT05fUkFESVVTOjUsQ0xJQ0tfVE9MRVJBTkNFOjUsSE9SSVpPTlRBTF9TQ1JPTExCQVI6MSxWRVJUSUNBTF9TQ1JPTExCQVI6Mn0sZXZlbnRzOnsiY2hhbmdlU2Nyb2xsWSI6aiwiY2hhbmdlU2Nyb2xsWCI6aiwiY2VsbENsaWNrIjpoLCJjZWxsRGJsY2xpY2siOmgsImNlbGxDb250ZXh0bWVudSI6aCwiYmVmb3JlU29ydCI6an0scHJvcGVydGllczp7aG9yaXpvbnRhbFNjcm9sbEJhclZpc2libGU6e2NoZWNrOm0saW5pdDp0cnVlLGFwcGx5Ok4sZXZlbnQ6cH0sdmVydGljYWxTY3JvbGxCYXJWaXNpYmxlOntjaGVjazptLGluaXQ6dHJ1ZSxhcHBseTpPLGV2ZW50Onl9LHRhYmxlUGFuZU1vZGVsOntjaGVjazpXLGFwcGx5OnosZXZlbnQ6Un0sbGl2ZVJlc2l6ZTp7Y2hlY2s6bSxpbml0OmZhbHNlfSxmb2N1c0NlbGxPbk1vdXNlTW92ZTp7Y2hlY2s6bSxpbml0OmZhbHNlfSxzZWxlY3RCZWZvcmVGb2N1czp7Y2hlY2s6bSxpbml0OmZhbHNlfSxzaG93Q2VsbEZvY3VzSW5kaWNhdG9yOntjaGVjazptLGluaXQ6dHJ1ZSxhcHBseTpiY30scmVzZXRTZWxlY3Rpb25PbkhlYWRlckNsaWNrOntjaGVjazptLGluaXQ6dHJ1ZX0sc2Nyb2xsVGltZW91dDp7Y2hlY2s6QSxpbml0OjEwMCxhcHBseTpufSxhcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0Okh9fSxtZW1iZXJzOntfX3hsOm51bGwsX194YjpudWxsLF9feG06bnVsbCxfX3huOm51bGwsX194bzpudWxsLF9feHA6bnVsbCxfX3hxOm51bGwsX194cjpudWxsLF9feHM6bnVsbCxfX3h0Om51bGwsX194dTpudWxsLF9feHY6bnVsbCxfX3h3Om51bGwsX194eDpudWxsLF9feHk6ZmFsc2UsX194ejpudWxsLF9feEE6bnVsbCxfX3hCOm51bGwsX194QzpudWxsLF9feEQ6bnVsbCxfX3hFOm51bGwsX194RjpudWxsLF9feEc6bnVsbCxfX3hjOm51bGwsX194ZDpudWxsLF9feGU6bnVsbCxfX3hoOm51bGwsX194ZjpudWxsLF9feGk6bnVsbCxfX3hqOm51bGwsX194ZzpudWxsLF9feGs6bnVsbCxnZXRQYW5lSW5zZXRSaWdodDpmdW5jdGlvbigpe3ZhciBicT10aGlzLmdldFRvcFJpZ2h0V2lkZ2V0KCk7dmFyIGJyPWJxJiZicS5pc1Zpc2libGUoKSYmYnEuZ2V0Qm91bmRzKCk/YnEuZ2V0Qm91bmRzKCkud2lkdGg6MDt2YXIgYnA9dGhpcy5nZXRWZXJ0aWNhbFNjcm9sbEJhclZpc2libGUoKT90aGlzLmdldFZlcnRpY2FsU2Nyb2xsQmFyV2lkdGgoKTowO3JldHVybiBNYXRoLm1heChicixicCk7fSxzZXRQYW5lV2lkdGg6ZnVuY3Rpb24oYnMpe2lmKHRoaXMuaXNWZXJ0aWNhbFNjcm9sbEJhclZpc2libGUoKSl7YnMrPXRoaXMuZ2V0UGFuZUluc2V0UmlnaHQoKTt9dGhpcy5zZXRXaWR0aChicyk7fSxfY3JlYXRlQ2hpbGRDb250cm9sSW1wbDpmdW5jdGlvbihidCxidSl7dmFyIGJ2O3N3aXRjaChidCl7Y2FzZSBiajpidj0odGhpcy5nZXRUYWJsZSgpLmdldE5ld1RhYmxlUGFuZUhlYWRlcigpKSh0aGlzKTticmVhaztjYXNlIGJkOmJ2PSh0aGlzLmdldFRhYmxlKCkuZ2V0TmV3VGFibGVQYW5lKCkpKHRoaXMpO2JyZWFrO2Nhc2UgZDpidj1uZXcgcXgudWkudGFibGUucGFuZS5Gb2N1c0luZGljYXRvcih0aGlzKTtidi5zZXRVc2VyQm91bmRzKDAsMCwwLDApO2J2LnNldFpJbmRleCgxMDAwKTtidi5hZGRMaXN0ZW5lcihpLHRoaXMuX29uTW91c2V1cEZvY3VzSW5kaWNhdG9yLHRoaXMpO3RoaXMuX194aS5hZGQoYnYpO2J2LnNob3coKTtidi5zZXREZWNvcmF0b3IobnVsbCk7YnJlYWs7Y2FzZSBsOmJ2PW5ldyBxeC51aS5jb3JlLldpZGdldCgpO2J2LnNldFVzZXJCb3VuZHMoMCwwLDAsMCk7YnYuc2V0WkluZGV4KDEwMDApO3RoaXMuX194aS5hZGQoYnYpO2JyZWFrO2Nhc2UgYmY6YnY9dGhpcy5fY3JlYXRlU2Nyb2xsQmFyKFgpLnNldCh7bWluV2lkdGg6MCxhbGlnblk6cX0pO2J2LmFkZExpc3RlbmVyKGcsdGhpcy5fb25TY3JvbGxYLHRoaXMpO3RoaXMuX2FkZChidix7cm93OjIsY29sdW1uOjB9KTticmVhaztjYXNlIGI6YnY9dGhpcy5fY3JlYXRlU2Nyb2xsQmFyKEIpO2J2LmFkZExpc3RlbmVyKGcsdGhpcy5fb25TY3JvbGxZLHRoaXMpO3RoaXMuX2FkZChidix7cm93OjEsY29sdW1uOjF9KTticmVhazt9cmV0dXJuIGJ2fHxxeC51aS5jb3JlLldpZGdldC5wcm90b3R5cGUuX2NyZWF0ZUNoaWxkQ29udHJvbEltcGwuY2FsbCh0aGlzLGJ0KTt9LF9hcHBseUhvcml6b250YWxTY3JvbGxCYXJWaXNpYmxlOmZ1bmN0aW9uKGJ3LGJ4KXt0aGlzLl9feGMuc2V0VmlzaWJpbGl0eShidz9ibDpjKTt9LF9hcHBseVZlcnRpY2FsU2Nyb2xsQmFyVmlzaWJsZTpmdW5jdGlvbihieSxieil7dGhpcy5fX3hkLnNldFZpc2liaWxpdHkoYnk/Ymw6Yyk7fSxfYXBwbHlUYWJsZVBhbmVNb2RlbDpmdW5jdGlvbihiQSxiQil7aWYoYkIhPW51bGwpe2JCLnJlbW92ZUxpc3RlbmVyKGJnLHRoaXMuX29uUGFuZU1vZGVsQ2hhbmdlZCx0aGlzKTt9YkEuYWRkTGlzdGVuZXIoYmcsdGhpcy5fb25QYW5lTW9kZWxDaGFuZ2VkLHRoaXMpO30sX2FwcGx5U2hvd0NlbGxGb2N1c0luZGljYXRvcjpmdW5jdGlvbihiQyxiRCl7aWYoYkMpe3RoaXMuX194ai5zZXREZWNvcmF0b3IoYm0pO3RoaXMuX3VwZGF0ZUZvY3VzSW5kaWNhdG9yKCk7fWVsc2V7aWYodGhpcy5fX3hqKXt0aGlzLl9feGouc2V0RGVjb3JhdG9yKG51bGwpO319fSxnZXRTY3JvbGxZOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX194ZC5nZXRQb3NpdGlvbigpO30sc2V0U2Nyb2xsWTpmdW5jdGlvbihzY3JvbGxZLGJFKXt0aGlzLl9feGQuc2Nyb2xsVG8oc2Nyb2xsWSk7aWYoYkUpe3RoaXMuX3VwZGF0ZUNvbnRlbnQoKTt9fSxnZXRTY3JvbGxYOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX194Yy5nZXRQb3NpdGlvbigpO30sc2V0U2Nyb2xsWDpmdW5jdGlvbihzY3JvbGxYKXt0aGlzLl9feGMuc2Nyb2xsVG8oc2Nyb2xsWCk7fSxnZXRUYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9feGI7fSxvbkNvbFZpc2liaWxpdHlDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGVIb3JTY3JvbGxCYXJNYXhpbXVtKCk7dGhpcy5fdXBkYXRlRm9jdXNJbmRpY2F0b3IoKTt9LHNldENvbHVtbldpZHRoOmZ1bmN0aW9uKGJGLGJHKXt0aGlzLl9feGUuc2V0Q29sdW1uV2lkdGgoYkYsYkcpO3RoaXMuX194Zi5zZXRDb2x1bW5XaWR0aChiRixiRyk7dmFyIGJIPXRoaXMuZ2V0VGFibGVQYW5lTW9kZWwoKTt2YXIgeD1iSC5nZXRYKGJGKTtpZih4IT0tMSl7dGhpcy51cGRhdGVIb3JTY3JvbGxCYXJNYXhpbXVtKCk7dGhpcy5fdXBkYXRlRm9jdXNJbmRpY2F0b3IoKTt9fSxvbkNvbE9yZGVyQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX194ZS5vbkNvbE9yZGVyQ2hhbmdlZCgpO3RoaXMuX194Zi5vbkNvbE9yZGVyQ2hhbmdlZCgpO3RoaXMudXBkYXRlSG9yU2Nyb2xsQmFyTWF4aW11bSgpO30sb25UYWJsZU1vZGVsRGF0YUNoYW5nZWQ6ZnVuY3Rpb24oYkksYkosYkssYkwpe3RoaXMuX194Zi5vblRhYmxlTW9kZWxEYXRhQ2hhbmdlZChiSSxiSixiSyxiTCk7dmFyIGJNPXRoaXMuZ2V0VGFibGUoKS5nZXRUYWJsZU1vZGVsKCkuZ2V0Um93Q291bnQoKTtpZihiTSE9dGhpcy5fX3hsKXt0aGlzLnVwZGF0ZVZlclNjcm9sbEJhck1heGltdW0oKTtpZih0aGlzLmdldEZvY3VzZWRSb3coKT49Yk0pe2lmKGJNPT0wKXt0aGlzLnNldEZvY3VzZWRDZWxsKG51bGwsbnVsbCk7fWVsc2V7dGhpcy5zZXRGb2N1c2VkQ2VsbCh0aGlzLmdldEZvY3VzZWRDb2x1bW4oKSxiTS0xKTt9fXRoaXMuX194bD1iTTt9fSxvblNlbGVjdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9feGYub25TZWxlY3Rpb25DaGFuZ2VkKCk7fSxvbkZvY3VzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX194Zi5vbkZvY3VzQ2hhbmdlZCgpO30sb25UYWJsZU1vZGVsTWV0YURhdGFDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fX3hlLm9uVGFibGVNb2RlbE1ldGFEYXRhQ2hhbmdlZCgpO3RoaXMuX194Zi5vblRhYmxlTW9kZWxNZXRhRGF0YUNoYW5nZWQoKTt9LF9vblBhbmVNb2RlbENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9feGUub25QYW5lTW9kZWxDaGFuZ2VkKCk7dGhpcy5fX3hmLm9uUGFuZU1vZGVsQ2hhbmdlZCgpO30sX29uUmVzaXplUGFuZTpmdW5jdGlvbigpe3RoaXMudXBkYXRlSG9yU2Nyb2xsQmFyTWF4aW11bSgpO3RoaXMudXBkYXRlVmVyU2Nyb2xsQmFyTWF4aW11bSgpO3RoaXMuX3VwZGF0ZUNvbnRlbnQoKTt0aGlzLl9feGUuX3VwZGF0ZUNvbnRlbnQoKTt0aGlzLl9feGIuX3VwZGF0ZVNjcm9sbEJhclZpc2liaWxpdHkoKTt9LHVwZGF0ZUhvclNjcm9sbEJhck1heGltdW06ZnVuY3Rpb24oKXt2YXIgYlE9dGhpcy5fX3hpLmdldElubmVyU2l6ZSgpO2lmKCFiUSl7cmV0dXJuIDt9dmFyIGJPPXRoaXMuZ2V0VGFibGVQYW5lTW9kZWwoKS5nZXRUb3RhbFdpZHRoKCk7dmFyIGJQPXRoaXMuX194YztpZihiUS53aWR0aDxiTyl7dmFyIGJOPU1hdGgubWF4KDAsYk8tYlEud2lkdGgpO2JQLnNldE1heGltdW0oYk4pO2JQLnNldEtub2JGYWN0b3IoYlEud2lkdGgvYk8pO3ZhciBiUj1iUC5nZXRQb3NpdGlvbigpO2JQLnNldFBvc2l0aW9uKE1hdGgubWluKGJSLGJOKSk7fWVsc2V7YlAuc2V0TWF4aW11bSgwKTtiUC5zZXRLbm9iRmFjdG9yKDEpO2JQLnNldFBvc2l0aW9uKDApO319LHVwZGF0ZVZlclNjcm9sbEJhck1heGltdW06ZnVuY3Rpb24oKXt2YXIgY2E9dGhpcy5fX3hpLmdldElubmVyU2l6ZSgpO2lmKCFjYSl7cmV0dXJuIDt9dmFyIGJYPXRoaXMuZ2V0VGFibGUoKS5nZXRUYWJsZU1vZGVsKCk7dmFyIGJUPWJYLmdldFJvd0NvdW50KCk7aWYodGhpcy5nZXRUYWJsZSgpLmdldEtlZXBGaXJzdFZpc2libGVSb3dDb21wbGV0ZSgpKXtiVCs9MTt9dmFyIGJTPXRoaXMuZ2V0VGFibGUoKS5nZXRSb3dIZWlnaHQoKTt2YXIgYlY9YlQqYlM7dmFyIGJZPXRoaXMuX194ZDtpZihjYS5oZWlnaHQ8YlYpe3ZhciBiVT1NYXRoLm1heCgwLGJWLWNhLmhlaWdodCk7Ylkuc2V0TWF4aW11bShiVSk7Ylkuc2V0S25vYkZhY3RvcihjYS5oZWlnaHQvYlYpO3ZhciBiVz1iWS5nZXRQb3NpdGlvbigpO2JZLnNldFBvc2l0aW9uKE1hdGgubWluKGJXLGJVKSk7fWVsc2V7Ylkuc2V0TWF4aW11bSgwKTtiWS5zZXRLbm9iRmFjdG9yKDEpO2JZLnNldFBvc2l0aW9uKDApO319LG9uS2VlcEZpcnN0VmlzaWJsZVJvd0NvbXBsZXRlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMudXBkYXRlVmVyU2Nyb2xsQmFyTWF4aW11bSgpO3RoaXMuX3VwZGF0ZUNvbnRlbnQoKTt9LF9vbkFwcGVhcjpmdW5jdGlvbigpe3RoaXMuX3N0YXJ0SW50ZXJ2YWwodGhpcy5nZXRTY3JvbGxUaW1lb3V0KCkpO30sX29uRGlzYXBwZWFyOmZ1bmN0aW9uKCl7dGhpcy5fc3RvcEludGVydmFsKCk7fSxfb25TY3JvbGxYOmZ1bmN0aW9uKGUpe3ZhciBjYj1lLmdldERhdGEoKTt0aGlzLmZpcmVEYXRhRXZlbnQobyxjYixlLmdldE9sZERhdGEoKSk7dGhpcy5fX3hoLnNjcm9sbFRvWChjYik7dGhpcy5fX3hpLnNjcm9sbFRvWChjYik7fSxfb25TY3JvbGxZOmZ1bmN0aW9uKGUpe3RoaXMuZmlyZURhdGFFdmVudChFLGUuZ2V0RGF0YSgpLGUuZ2V0T2xkRGF0YSgpKTt0aGlzLl9wb3N0cG9uZWRVcGRhdGVDb250ZW50KCk7fSxfb25Nb3VzZXdoZWVsOmZ1bmN0aW9uKGUpe3ZhciBjYz10aGlzLmdldFRhYmxlKCk7aWYoIWNjLmdldEVuYWJsZWQoKSl7cmV0dXJuO312YXIgY2U9cXguYm9tLmNsaWVudC5FbmdpbmUuR0VDS08/MTozO3ZhciBjZD10aGlzLl9feGQuZ2V0UG9zaXRpb24oKSsoKGUuZ2V0V2hlZWxEZWx0YSgpKmNlKSpjYy5nZXRSb3dIZWlnaHQoKSk7dGhpcy5fX3hkLnNjcm9sbFRvKGNkKTtpZih0aGlzLl9feEEmJnRoaXMuZ2V0Rm9jdXNDZWxsT25Nb3VzZU1vdmUoKSl7dGhpcy5fZm9jdXNDZWxsQXRQYWdlUG9zKHRoaXMuX194QSx0aGlzLl9feEIpO31lLnN0b3AoKTt9LF9feEg6ZnVuY3Rpb24oY2Ype3ZhciBjaz10aGlzLmdldFRhYmxlKCk7dmFyIGNsPXRoaXMuX194ZS5nZXRIZWFkZXJXaWRnZXRBdENvbHVtbih0aGlzLl9feHUpO3ZhciBjZz1jbC5nZXRTaXplSGludCgpLm1pbldpZHRoO3ZhciBjaT1NYXRoLm1heChjZyx0aGlzLl9feHcrY2YtdGhpcy5fX3h2KTtpZih0aGlzLmdldExpdmVSZXNpemUoKSl7dmFyIGNoPWNrLmdldFRhYmxlQ29sdW1uTW9kZWwoKTtjaC5zZXRDb2x1bW5XaWR0aCh0aGlzLl9feHUsY2ksdHJ1ZSk7fWVsc2V7dGhpcy5fX3hlLnNldENvbHVtbldpZHRoKHRoaXMuX194dSxjaSx0cnVlKTt2YXIgY2o9dGhpcy5nZXRUYWJsZVBhbmVNb2RlbCgpO3RoaXMuX3Nob3dSZXNpemVMaW5lKGNqLmdldENvbHVtbkxlZnQodGhpcy5fX3h1KStjaSk7fXRoaXMuX194dis9Y2ktdGhpcy5fX3h3O3RoaXMuX194dz1jaTt9LF9feEk6ZnVuY3Rpb24oY20pe3ZhciBjbj1xeC51aS50YWJsZS5wYW5lLlNjcm9sbGVyLkNMSUNLX1RPTEVSQU5DRTtpZih0aGlzLl9feGUuaXNTaG93aW5nQ29sdW1uTW92ZUZlZWRiYWNrKCl8fGNtPnRoaXMuX194dCtjbnx8Y208dGhpcy5fX3h0LWNuKXt0aGlzLl9feHErPWNtLXRoaXMuX194dDt0aGlzLl9feGUuc2hvd0NvbHVtbk1vdmVGZWVkYmFjayh0aGlzLl9feHAsdGhpcy5fX3hxKTt2YXIgY289dGhpcy5fX3hiLmdldFRhYmxlUGFuZVNjcm9sbGVyQXRQYWdlWChjbSk7aWYodGhpcy5fX3hzJiZ0aGlzLl9feHMhPWNvKXt0aGlzLl9feHMuaGlkZUNvbHVtbk1vdmVGZWVkYmFjaygpO31pZihjbyE9bnVsbCl7dGhpcy5fX3hyPWNvLnNob3dDb2x1bW5Nb3ZlRmVlZGJhY2soY20pO31lbHNle3RoaXMuX194cj1udWxsO310aGlzLl9feHM9Y287dGhpcy5fX3h0PWNtO319LF9vbk1vdXNlbW92ZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgY3Y9dGhpcy5nZXRUYWJsZSgpO2lmKCFjdi5nZXRFbmFibGVkKCkpe3JldHVybjt9dmFyIGN3PWZhbHNlO3ZhciBjcD1udWxsO3ZhciBjdD1lLmdldERvY3VtZW50TGVmdCgpO3ZhciBjdT1lLmdldERvY3VtZW50VG9wKCk7dGhpcy5fX3hBPWN0O3RoaXMuX194Qj1jdTtpZih0aGlzLl9feHUhPW51bGwpe3RoaXMuX194SChjdCk7Y3c9dHJ1ZTtlLnN0b3BQcm9wYWdhdGlvbigpO31lbHNlIGlmKHRoaXMuX194cCE9bnVsbCl7dGhpcy5fX3hJKGN0KTtlLnN0b3BQcm9wYWdhdGlvbigpO31lbHNle3ZhciBjcT10aGlzLl9nZXRSZXNpemVDb2x1bW5Gb3JQYWdlWChjdCk7aWYoY3EhPS0xKXtjdz10cnVlO31lbHNle3ZhciBjcz1jdi5nZXRUYWJsZU1vZGVsKCk7dmFyIGN4PXRoaXMuX2dldENvbHVtbkZvclBhZ2VYKGN0KTtpZihjeCE9bnVsbCYmY3MuaXNDb2x1bW5Tb3J0YWJsZShjeCkpe2NwPWN4O319fXZhciBjcj1jdz9EOm51bGw7dGhpcy5nZXRBcHBsaWNhdGlvblJvb3QoKS5zZXRHbG9iYWxDdXJzb3IoY3IpO3RoaXMuc2V0Q3Vyc29yKGNyKTt0aGlzLl9feGUuc2V0TW91c2VPdmVyQ29sdW1uKGNwKTt9LF9vbk1vdXNlbW92ZVBhbmU6ZnVuY3Rpb24oZSl7dmFyIGN5PXRoaXMuZ2V0VGFibGUoKTtpZighY3kuZ2V0RW5hYmxlZCgpKXtyZXR1cm47fXZhciBjQT1lLmdldERvY3VtZW50TGVmdCgpO3ZhciBjQj1lLmdldERvY3VtZW50VG9wKCk7dGhpcy5fX3hBPWNBO3RoaXMuX194Qj1jQjt2YXIgY3o9dGhpcy5fZ2V0Um93Rm9yUGFnZVBvcyhjQSxjQik7aWYoY3ohPW51bGwmJnRoaXMuX2dldENvbHVtbkZvclBhZ2VYKGNBKSE9bnVsbCl7aWYodGhpcy5nZXRGb2N1c0NlbGxPbk1vdXNlTW92ZSgpKXt0aGlzLl9mb2N1c0NlbGxBdFBhZ2VQb3MoY0EsY0IpO319dGhpcy5fX3hlLnNldE1vdXNlT3ZlckNvbHVtbihudWxsKTt9LF9vbk1vdXNlZG93bkhlYWRlcjpmdW5jdGlvbihlKXtpZighdGhpcy5nZXRUYWJsZSgpLmdldEVuYWJsZWQoKSl7cmV0dXJuO312YXIgY0Q9ZS5nZXREb2N1bWVudExlZnQoKTt2YXIgY0U9dGhpcy5fZ2V0UmVzaXplQ29sdW1uRm9yUGFnZVgoY0QpO2lmKGNFIT0tMSl7dGhpcy5fc3RhcnRSZXNpemVIZWFkZXIoY0UsY0QpO2Uuc3RvcCgpO31lbHNle3ZhciBjQz10aGlzLl9nZXRDb2x1bW5Gb3JQYWdlWChjRCk7aWYoY0MhPW51bGwpe3RoaXMuX3N0YXJ0TW92ZUhlYWRlcihjQyxjRCk7ZS5zdG9wKCk7fX19LF9zdGFydFJlc2l6ZUhlYWRlcjpmdW5jdGlvbihjRixjRyl7dmFyIGNIPXRoaXMuZ2V0VGFibGUoKS5nZXRUYWJsZUNvbHVtbk1vZGVsKCk7dGhpcy5fX3h1PWNGO3RoaXMuX194dj1jRzt0aGlzLl9feHc9Y0guZ2V0Q29sdW1uV2lkdGgodGhpcy5fX3h1KTt0aGlzLl9feGguY2FwdHVyZSgpO30sX3N0YXJ0TW92ZUhlYWRlcjpmdW5jdGlvbihjSSxjSil7dGhpcy5fX3hwPWNJO3RoaXMuX194dD1jSjt0aGlzLl9feHE9dGhpcy5nZXRUYWJsZVBhbmVNb2RlbCgpLmdldENvbHVtbkxlZnQoY0kpO3RoaXMuX194aC5jYXB0dXJlKCk7fSxfb25Nb3VzZWRvd25QYW5lOmZ1bmN0aW9uKGUpe3ZhciBjTj10aGlzLmdldFRhYmxlKCk7aWYoIWNOLmdldEVuYWJsZWQoKSl7cmV0dXJuO31pZihjTi5pc0VkaXRpbmcoKSl7Y04uc3RvcEVkaXRpbmcoKTt9dmFyIGNLPWUuZ2V0RG9jdW1lbnRMZWZ0KCk7dmFyIGNNPWUuZ2V0RG9jdW1lbnRUb3AoKTt2YXIgY1A9dGhpcy5fZ2V0Um93Rm9yUGFnZVBvcyhjSyxjTSk7dmFyIGNPPXRoaXMuX2dldENvbHVtbkZvclBhZ2VYKGNLKTtpZihjUCE9PW51bGwpe3RoaXMuX194eD17cm93OmNQLGNvbDpjT307dGhpcy5fX3h5PWZhbHNlO3ZhciBjTD10aGlzLmdldFNlbGVjdEJlZm9yZUZvY3VzKCk7aWYoY0wpe2NOLmdldFNlbGVjdGlvbk1hbmFnZXIoKS5oYW5kbGVNb3VzZURvd24oY1AsZSk7fWlmKCF0aGlzLmdldEZvY3VzQ2VsbE9uTW91c2VNb3ZlKCkpe3RoaXMuX2ZvY3VzQ2VsbEF0UGFnZVBvcyhjSyxjTSk7fWlmKCFjTCl7Y04uZ2V0U2VsZWN0aW9uTWFuYWdlcigpLmhhbmRsZU1vdXNlRG93bihjUCxlKTt9fX0sX29uTW91c2V1cEZvY3VzSW5kaWNhdG9yOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX194eCYmIXRoaXMuX194eSYmIXRoaXMuaXNFZGl0aW5nKCkmJnRoaXMuX194ai5nZXRSb3coKT09dGhpcy5fX3h4LnJvdyYmdGhpcy5fX3hqLmdldENvbHVtbigpPT10aGlzLl9feHguY29sKXt0aGlzLmZpcmVFdmVudChiZSxxeC51aS50YWJsZS5wYW5lLkNlbGxFdmVudCxbdGhpcyxlLHRoaXMuX194eC5yb3csdGhpcy5fX3h4LmNvbF0sdHJ1ZSk7dGhpcy5fX3h5PXRydWU7fWVsc2UgaWYoIXRoaXMuaXNFZGl0aW5nKCkpe3RoaXMuX29uTW91c2Vkb3duUGFuZShlKTt9fSxfb25DaGFuZ2VDYXB0dXJlSGVhZGVyOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX194dSE9bnVsbCl7dGhpcy5fc3RvcFJlc2l6ZUhlYWRlcigpO31pZih0aGlzLl9feHAhPW51bGwpe3RoaXMuX3N0b3BNb3ZlSGVhZGVyKCk7fX0sX3N0b3BSZXNpemVIZWFkZXI6ZnVuY3Rpb24oKXt2YXIgY1E9dGhpcy5nZXRUYWJsZSgpLmdldFRhYmxlQ29sdW1uTW9kZWwoKTtpZighdGhpcy5nZXRMaXZlUmVzaXplKCkpe3RoaXMuX2hpZGVSZXNpemVMaW5lKCk7Y1Euc2V0Q29sdW1uV2lkdGgodGhpcy5fX3h1LHRoaXMuX194dyx0cnVlKTt9dGhpcy5fX3h1PW51bGw7dGhpcy5fX3hoLnJlbGVhc2VDYXB0dXJlKCk7dGhpcy5nZXRBcHBsaWNhdGlvblJvb3QoKS5zZXRHbG9iYWxDdXJzb3IobnVsbCk7dGhpcy5zZXRDdXJzb3IobnVsbCk7aWYodGhpcy5pc0VkaXRpbmcoKSl7dmFyIGNSPXRoaXMuX194RS5nZXRCb3VuZHMoKS5oZWlnaHQ7dGhpcy5fX3hFLnNldFVzZXJCb3VuZHMoMCwwLHRoaXMuX194dyxjUik7fX0sX3N0b3BNb3ZlSGVhZGVyOmZ1bmN0aW9uKCl7dmFyIGNXPXRoaXMuZ2V0VGFibGUoKS5nZXRUYWJsZUNvbHVtbk1vZGVsKCk7dmFyIGNYPXRoaXMuZ2V0VGFibGVQYW5lTW9kZWwoKTt0aGlzLl9feGUuaGlkZUNvbHVtbk1vdmVGZWVkYmFjaygpO2lmKHRoaXMuX194cyl7dGhpcy5fX3hzLmhpZGVDb2x1bW5Nb3ZlRmVlZGJhY2soKTt9aWYodGhpcy5fX3hyIT1udWxsKXt2YXIgZGE9Y1guZ2V0Rmlyc3RDb2x1bW5YKCkrY1guZ2V0WCh0aGlzLl9feHApO3ZhciBjVj10aGlzLl9feHI7aWYoY1YhPWRhJiZjViE9ZGErMSl7dmFyIGNZPWNXLmdldFZpc2libGVDb2x1bW5BdFgoZGEpO3ZhciBjVT1jVy5nZXRWaXNpYmxlQ29sdW1uQXRYKGNWKTt2YXIgY1Q9Y1cuZ2V0T3ZlcmFsbFgoY1kpO3ZhciBjUz0oY1UhPW51bGwpP2NXLmdldE92ZXJhbGxYKGNVKTpjVy5nZXRPdmVyYWxsQ29sdW1uQ291bnQoKTtpZihjUz5jVCl7Y1MtLTt9Y1cubW92ZUNvbHVtbihjVCxjUyk7dGhpcy5fdXBkYXRlRm9jdXNJbmRpY2F0b3IoKTt9fXRoaXMuX194cD1udWxsO3RoaXMuX194cj1udWxsO3RoaXMuX194aC5yZWxlYXNlQ2FwdHVyZSgpO30sX29uTW91c2V1cFBhbmU6ZnVuY3Rpb24oZSl7dmFyIGRiPXRoaXMuZ2V0VGFibGUoKTtpZighZGIuZ2V0RW5hYmxlZCgpKXtyZXR1cm47fXZhciBkYz10aGlzLl9nZXRSb3dGb3JQYWdlUG9zKGUuZ2V0RG9jdW1lbnRMZWZ0KCksZS5nZXREb2N1bWVudFRvcCgpKTtpZihkYyE9LTEmJmRjIT1udWxsJiZ0aGlzLl9nZXRDb2x1bW5Gb3JQYWdlWChlLmdldERvY3VtZW50TGVmdCgpKSE9bnVsbCl7ZGIuZ2V0U2VsZWN0aW9uTWFuYWdlcigpLmhhbmRsZU1vdXNlVXAoZGMsZSk7fX0sX29uTW91c2V1cEhlYWRlcjpmdW5jdGlvbihlKXt2YXIgZGQ9dGhpcy5nZXRUYWJsZSgpO2lmKCFkZC5nZXRFbmFibGVkKCkpe3JldHVybjt9aWYodGhpcy5fX3h1IT1udWxsKXt0aGlzLl9zdG9wUmVzaXplSGVhZGVyKCk7dGhpcy5fX3h6PXRydWU7ZS5zdG9wKCk7fWVsc2UgaWYodGhpcy5fX3hwIT1udWxsKXt0aGlzLl9zdG9wTW92ZUhlYWRlcigpO2Uuc3RvcCgpO319LF9vbkNsaWNrSGVhZGVyOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX194eil7dGhpcy5fX3h6PWZhbHNlO3JldHVybjt9dmFyIGRpPXRoaXMuZ2V0VGFibGUoKTtpZighZGkuZ2V0RW5hYmxlZCgpKXtyZXR1cm47fXZhciBkZz1kaS5nZXRUYWJsZU1vZGVsKCk7dmFyIGRoPWUuZ2V0RG9jdW1lbnRMZWZ0KCk7dmFyIGRmPXRoaXMuX2dldFJlc2l6ZUNvbHVtbkZvclBhZ2VYKGRoKTtpZihkZj09LTEpe3ZhciBkbD10aGlzLl9nZXRDb2x1bW5Gb3JQYWdlWChkaCk7aWYoZGwhPW51bGwmJmRnLmlzQ29sdW1uU29ydGFibGUoZGwpKXt2YXIgZGU9ZGcuZ2V0U29ydENvbHVtbkluZGV4KCk7dmFyIGRqPShkbCE9ZGUpP3RydWU6IWRnLmlzU29ydEFzY2VuZGluZygpO3ZhciBkaz17Y29sdW1uOmRsLGFzY2VuZGluZzpkaixjbGlja0V2ZW50OmV9O2lmKHRoaXMuZmlyZURhdGFFdmVudChKLGRrLG51bGwsdHJ1ZSkpe2RnLnNvcnRCeUNvbHVtbihkbCxkaik7aWYodGhpcy5nZXRSZXNldFNlbGVjdGlvbk9uSGVhZGVyQ2xpY2soKSl7ZGkuZ2V0U2VsZWN0aW9uTW9kZWwoKS5yZXNldFNlbGVjdGlvbigpO319fX1lLnN0b3AoKTt9LF9vbkNsaWNrUGFuZTpmdW5jdGlvbihlKXt2YXIgZG09dGhpcy5nZXRUYWJsZSgpO2lmKCFkbS5nZXRFbmFibGVkKCkpe3JldHVybjt9dmFyIGRxPWUuZ2V0RG9jdW1lbnRMZWZ0KCk7dmFyIGRyPWUuZ2V0RG9jdW1lbnRUb3AoKTt2YXIgZG49dGhpcy5fZ2V0Um93Rm9yUGFnZVBvcyhkcSxkcik7dmFyIGRwPXRoaXMuX2dldENvbHVtbkZvclBhZ2VYKGRxKTtpZihkbiE9bnVsbCYmZHAhPW51bGwpe2RtLmdldFNlbGVjdGlvbk1hbmFnZXIoKS5oYW5kbGVDbGljayhkbixlKTtpZih0aGlzLl9feGouaXNIaWRkZW4oKXx8KHRoaXMuX194eCYmIXRoaXMuX194eSYmIXRoaXMuaXNFZGl0aW5nKCkmJmRuPT10aGlzLl9feHgucm93JiZkcD09dGhpcy5fX3h4LmNvbCkpe3RoaXMuZmlyZUV2ZW50KGJlLHF4LnVpLnRhYmxlLnBhbmUuQ2VsbEV2ZW50LFt0aGlzLGUsZG4sZHBdLHRydWUpO3RoaXMuX194eT10cnVlO319fSxfb25Db250ZXh0TWVudTpmdW5jdGlvbihlKXt2YXIgZHY9ZS5nZXREb2N1bWVudExlZnQoKTt2YXIgZHc9ZS5nZXREb2N1bWVudFRvcCgpO3ZhciBkdD10aGlzLl9nZXRSb3dGb3JQYWdlUG9zKGR2LGR3KTt2YXIgZHU9dGhpcy5fZ2V0Q29sdW1uRm9yUGFnZVgoZHYpO2lmKHRoaXMuX194ai5pc0hpZGRlbigpfHwodGhpcy5fX3h4JiZkdD09dGhpcy5fX3h4LnJvdyYmZHU9PXRoaXMuX194eC5jb2wpKXt0aGlzLmZpcmVFdmVudChVLHF4LnVpLnRhYmxlLnBhbmUuQ2VsbEV2ZW50LFt0aGlzLGUsZHQsZHVdLHRydWUpO3ZhciBkcz10aGlzLmdldFRhYmxlKCkuZ2V0Q29udGV4dE1lbnUoKTtpZihkcyl7aWYoZHMuZ2V0Q2hpbGRyZW4oKS5sZW5ndGg+MCl7ZHMub3BlbkF0TW91c2UoZSk7fWVsc2V7ZHMuZXhjbHVkZSgpO31lLnByZXZlbnREZWZhdWx0KCk7fX19LF9vbkNvbnRleHRNZW51T3BlbjpmdW5jdGlvbihlKXt9LF9vbkRibGNsaWNrUGFuZTpmdW5jdGlvbihlKXt2YXIgZHk9ZS5nZXREb2N1bWVudExlZnQoKTt2YXIgZHo9ZS5nZXREb2N1bWVudFRvcCgpO3RoaXMuX2ZvY3VzQ2VsbEF0UGFnZVBvcyhkeSxkeik7dGhpcy5zdGFydEVkaXRpbmcoKTt2YXIgZHg9dGhpcy5fZ2V0Um93Rm9yUGFnZVBvcyhkeSxkeik7aWYoZHghPS0xJiZkeCE9bnVsbCl7dGhpcy5maXJlRXZlbnQoUyxxeC51aS50YWJsZS5wYW5lLkNlbGxFdmVudCxbdGhpcyxlLGR4XSx0cnVlKTt9fSxfb25Nb3VzZW91dDpmdW5jdGlvbihlKXt2YXIgZEE9dGhpcy5nZXRUYWJsZSgpO2lmKCFkQS5nZXRFbmFibGVkKCkpe3JldHVybjt9aWYodGhpcy5fX3h1PT1udWxsKXt0aGlzLnNldEN1cnNvcihudWxsKTt0aGlzLmdldEFwcGxpY2F0aW9uUm9vdCgpLnNldEdsb2JhbEN1cnNvcihudWxsKTt9dGhpcy5fX3hlLnNldE1vdXNlT3ZlckNvbHVtbihudWxsKTt9LF9zaG93UmVzaXplTGluZTpmdW5jdGlvbih4KXt2YXIgZEM9dGhpcy5fc2hvd0NoaWxkQ29udHJvbChsKTt2YXIgZEI9ZEMuZ2V0V2lkdGgoKTt2YXIgZEQ9dGhpcy5fX3hpLmdldEJvdW5kcygpO2RDLnNldFVzZXJCb3VuZHMoeC1NYXRoLnJvdW5kKGRCLzIpLDAsZEIsZEQuaGVpZ2h0KTt9LF9oaWRlUmVzaXplTGluZTpmdW5jdGlvbigpe3RoaXMuX2V4Y2x1ZGVDaGlsZENvbnRyb2wobCk7fSxzaG93Q29sdW1uTW92ZUZlZWRiYWNrOmZ1bmN0aW9uKGRFKXt2YXIgZE49dGhpcy5nZXRUYWJsZVBhbmVNb2RlbCgpO3ZhciBkTT10aGlzLmdldFRhYmxlKCkuZ2V0VGFibGVDb2x1bW5Nb2RlbCgpO3ZhciBkSD10aGlzLl9feGYuZ2V0Q29udGFpbmVyTG9jYXRpb24oKS5sZWZ0O3ZhciBkTD1kTi5nZXRDb2x1bW5Db3VudCgpO3ZhciBkST0wO3ZhciBkRz0wO3ZhciBkUT1kSDtmb3IodmFyIGRGPTA7ZEY8ZEw7ZEYrKyl7dmFyIGRKPWROLmdldENvbHVtbkF0WChkRik7dmFyIGRPPWRNLmdldENvbHVtbldpZHRoKGRKKTtpZihkRTxkUStkTy8yKXticmVhazt9ZFErPWRPO2RJPWRGKzE7ZEc9ZFEtZEg7fXZhciBkSz10aGlzLl9feGkuZ2V0Q29udGFpbmVyTG9jYXRpb24oKS5sZWZ0O3ZhciBkUD10aGlzLl9feGkuZ2V0Qm91bmRzKCkud2lkdGg7dmFyIHNjcm9sbFg9ZEstZEg7ZEc9cXgubGFuZy5OdW1iZXIubGltaXQoZEcsc2Nyb2xsWCsyLHNjcm9sbFgrZFAtMSk7dGhpcy5fc2hvd1Jlc2l6ZUxpbmUoZEcpO3JldHVybiBkTi5nZXRGaXJzdENvbHVtblgoKStkSTt9LGhpZGVDb2x1bW5Nb3ZlRmVlZGJhY2s6ZnVuY3Rpb24oKXt0aGlzLl9oaWRlUmVzaXplTGluZSgpO30sX2ZvY3VzQ2VsbEF0UGFnZVBvczpmdW5jdGlvbihkUixkUyl7dmFyIGRVPXRoaXMuX2dldFJvd0ZvclBhZ2VQb3MoZFIsZFMpO2lmKGRVIT0tMSYmZFUhPW51bGwpe3ZhciBkVD10aGlzLl9nZXRDb2x1bW5Gb3JQYWdlWChkUik7dGhpcy5fX3hiLnNldEZvY3VzZWRDZWxsKGRULGRVKTt9fSxzZXRGb2N1c2VkQ2VsbDpmdW5jdGlvbihkVixkVyl7aWYoIXRoaXMuaXNFZGl0aW5nKCkpe3RoaXMuX194Zi5zZXRGb2N1c2VkQ2VsbChkVixkVyx0aGlzLl9feG4pO3RoaXMuX194Qz1kVjt0aGlzLl9feEQ9ZFc7dGhpcy5fdXBkYXRlRm9jdXNJbmRpY2F0b3IoKTt9fSxnZXRGb2N1c2VkQ29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX194Qzt9LGdldEZvY3VzZWRSb3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3hEO30sc2Nyb2xsQ2VsbFZpc2libGU6ZnVuY3Rpb24oZFgsZFkpe3ZhciBlaj10aGlzLmdldFRhYmxlUGFuZU1vZGVsKCk7dmFyIGVhPWVqLmdldFgoZFgpO2lmKGVhIT0tMSl7dmFyIGVnPXRoaXMuX194aS5nZXRJbm5lclNpemUoKTtpZighZWcpe3JldHVybjt9dmFyIGVoPXRoaXMuZ2V0VGFibGUoKS5nZXRUYWJsZUNvbHVtbk1vZGVsKCk7dmFyIGVkPWVqLmdldENvbHVtbkxlZnQoZFgpO3ZhciBlaz1laC5nZXRDb2x1bW5XaWR0aChkWCk7dmFyIGViPXRoaXMuZ2V0VGFibGUoKS5nZXRSb3dIZWlnaHQoKTt2YXIgZWw9ZFkqZWI7dmFyIHNjcm9sbFg9dGhpcy5nZXRTY3JvbGxYKCk7dmFyIHNjcm9sbFk9dGhpcy5nZXRTY3JvbGxZKCk7dmFyIGVpPU1hdGgubWluKGVkLGVkK2VrLWVnLndpZHRoKTt2YXIgZWY9ZWQ7dGhpcy5zZXRTY3JvbGxYKE1hdGgubWF4KGVpLE1hdGgubWluKGVmLHNjcm9sbFgpKSk7dmFyIGVjPWVsK2ViLWVnLmhlaWdodDtpZih0aGlzLmdldFRhYmxlKCkuZ2V0S2VlcEZpcnN0VmlzaWJsZVJvd0NvbXBsZXRlKCkpe2VjKz1lYjt9dmFyIGVlPWVsO3RoaXMuc2V0U2Nyb2xsWShNYXRoLm1heChlYyxNYXRoLm1pbihlZSxzY3JvbGxZKSksdHJ1ZSk7fX0saXNFZGl0aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX194RSE9bnVsbDt9LHN0YXJ0RWRpdGluZzpmdW5jdGlvbigpe3ZhciBlcT10aGlzLmdldFRhYmxlKCk7dmFyIGVvPWVxLmdldFRhYmxlTW9kZWwoKTt2YXIgZXM9dGhpcy5fX3hDO2lmKCF0aGlzLmlzRWRpdGluZygpJiYoZXMhPW51bGwpJiZlby5pc0NvbHVtbkVkaXRhYmxlKGVzKSl7dmFyIGV0PXRoaXMuX194RDt2YXIgZW09dGhpcy5nZXRUYWJsZVBhbmVNb2RlbCgpLmdldFgoZXMpO3ZhciBlbj1lby5nZXRWYWx1ZShlcyxldCk7dGhpcy5fX3hGPWVxLmdldFRhYmxlQ29sdW1uTW9kZWwoKS5nZXRDZWxsRWRpdG9yRmFjdG9yeShlcyk7dmFyIGVwPXtjb2w6ZXMscm93OmV0LHhQb3M6ZW0sdmFsdWU6ZW4sdGFibGU6ZXF9O3RoaXMuX194RT10aGlzLl9feEYuY3JlYXRlQ2VsbEVkaXRvcihlcCk7aWYodGhpcy5fX3hFPT09bnVsbCl7cmV0dXJuIGZhbHNlO31lbHNlIGlmKHRoaXMuX194RSBpbnN0YW5jZW9mIHF4LnVpLndpbmRvdy5XaW5kb3cpe3RoaXMuX194RS5zZXRNb2RhbCh0cnVlKTt0aGlzLl9feEUuc2V0U2hvd0Nsb3NlKGZhbHNlKTt0aGlzLl9feEUuYWRkTGlzdGVuZXIoSyx0aGlzLl9vbkNlbGxFZGl0b3JNb2RhbFdpbmRvd0Nsb3NlLHRoaXMpO3ZhciBmPWVxLmdldE1vZGFsQ2VsbEVkaXRvclByZU9wZW5GdW5jdGlvbigpO2lmKGYhPW51bGwpe2YodGhpcy5fX3hFLGVwKTt9dGhpcy5fX3hFLm9wZW4oKTt9ZWxzZXt2YXIgZXI9dGhpcy5fX3hqLmdldElubmVyU2l6ZSgpO3RoaXMuX194RS5zZXRVc2VyQm91bmRzKDAsMCxlci53aWR0aCxlci5oZWlnaHQpO3RoaXMuX194ai5hZGRMaXN0ZW5lcihrLGZ1bmN0aW9uKGUpe3RoaXMuX194eD17cm93OnRoaXMuX194RCxjb2w6dGhpcy5fX3hDfTtlLnN0b3BQcm9wYWdhdGlvbigpO30sdGhpcyk7dGhpcy5fX3hqLmFkZCh0aGlzLl9feEUpO3RoaXMuX194ai5hZGRTdGF0ZShiaSk7dGhpcy5fX3hqLnNldEtlZXBBY3RpdmUoZmFsc2UpO3RoaXMuX194ai5zZXREZWNvcmF0b3IoYm0pO3RoaXMuX194RS5mb2N1cygpO3RoaXMuX194RS5hY3RpdmF0ZSgpO31yZXR1cm4gdHJ1ZTt9cmV0dXJuIGZhbHNlO30sc3RvcEVkaXRpbmc6ZnVuY3Rpb24oKXtpZighdGhpcy5nZXRTaG93Q2VsbEZvY3VzSW5kaWNhdG9yKCkpe3RoaXMuX194ai5zZXREZWNvcmF0b3IobnVsbCk7fXRoaXMuZmx1c2hFZGl0b3IoKTt0aGlzLmNhbmNlbEVkaXRpbmcoKTt9LGZsdXNoRWRpdG9yOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0VkaXRpbmcoKSl7dmFyIGV2PXRoaXMuX194Ri5nZXRDZWxsRWRpdG9yVmFsdWUodGhpcy5fX3hFKTt2YXIgZXU9dGhpcy5nZXRUYWJsZSgpLmdldFRhYmxlTW9kZWwoKS5nZXRWYWx1ZSh0aGlzLl9feEMsdGhpcy5fX3hEKTt0aGlzLmdldFRhYmxlKCkuZ2V0VGFibGVNb2RlbCgpLnNldFZhbHVlKHRoaXMuX194Qyx0aGlzLl9feEQsZXYpO3RoaXMuX194Yi5mb2N1cygpO3RoaXMuX194Yi5maXJlRGF0YUV2ZW50KFEse3Jvdzp0aGlzLl9feEQsY29sOnRoaXMuX194QyxvbGRWYWx1ZTpldSx2YWx1ZTpldn0pO319LGNhbmNlbEVkaXRpbmc6ZnVuY3Rpb24oKXtpZih0aGlzLmlzRWRpdGluZygpJiYhdGhpcy5fX3hFLnBlbmRpbmdEaXNwb3NlKXtpZih0aGlzLl9jZWxsRWRpdG9ySXNNb2RhbFdpbmRvdyl7dGhpcy5fX3hFLmRlc3Ryb3koKTt0aGlzLl9feEU9bnVsbDt0aGlzLl9feEY9bnVsbDt0aGlzLl9feEUucGVuZGluZ0Rpc3Bvc2U9dHJ1ZTt9ZWxzZXt0aGlzLl9feGoucmVtb3ZlU3RhdGUoYmkpO3RoaXMuX194ai5zZXRLZWVwQWN0aXZlKHRydWUpO3RoaXMuX194RS5kZXN0cm95KCk7dGhpcy5fX3hFPW51bGw7dGhpcy5fX3hGPW51bGw7fX19LF9vbkNlbGxFZGl0b3JNb2RhbFdpbmRvd0Nsb3NlOmZ1bmN0aW9uKGUpe3RoaXMuc3RvcEVkaXRpbmcoKTt9LF9nZXRDb2x1bW5Gb3JQYWdlWDpmdW5jdGlvbihldyl7dmFyIGV6PXRoaXMuZ2V0VGFibGUoKS5nZXRUYWJsZUNvbHVtbk1vZGVsKCk7dmFyIGVBPXRoaXMuZ2V0VGFibGVQYW5lTW9kZWwoKTt2YXIgZXk9ZUEuZ2V0Q29sdW1uQ291bnQoKTt2YXIgZUM9dGhpcy5fX3hlLmdldENvbnRhaW5lckxvY2F0aW9uKCkubGVmdDtmb3IodmFyIHg9MDt4PGV5O3grKyl7dmFyIGV4PWVBLmdldENvbHVtbkF0WCh4KTt2YXIgZUI9ZXouZ2V0Q29sdW1uV2lkdGgoZXgpO2VDKz1lQjtpZihldzxlQyl7cmV0dXJuIGV4O319cmV0dXJuIG51bGw7fSxfZ2V0UmVzaXplQ29sdW1uRm9yUGFnZVg6ZnVuY3Rpb24oZUQpe3ZhciBlSD10aGlzLmdldFRhYmxlKCkuZ2V0VGFibGVDb2x1bW5Nb2RlbCgpO3ZhciBlST10aGlzLmdldFRhYmxlUGFuZU1vZGVsKCk7dmFyIGVHPWVJLmdldENvbHVtbkNvdW50KCk7dmFyIGVLPXRoaXMuX194ZS5nZXRDb250YWluZXJMb2NhdGlvbigpLmxlZnQ7dmFyIGVFPXF4LnVpLnRhYmxlLnBhbmUuU2Nyb2xsZXIuUkVTSVpFX1JFR0lPTl9SQURJVVM7Zm9yKHZhciB4PTA7eDxlRzt4Kyspe3ZhciBlRj1lSS5nZXRDb2x1bW5BdFgoeCk7dmFyIGVKPWVILmdldENvbHVtbldpZHRoKGVGKTtlSys9ZUo7aWYoZUQ+PShlSy1lRSkmJmVEPD0oZUsrZUUpKXtyZXR1cm4gZUY7fX1yZXR1cm4gLTE7fSxfZ2V0Um93Rm9yUGFnZVBvczpmdW5jdGlvbihlTCxlTSl7dmFyIGVOPXRoaXMuX194Zi5nZXRDb250ZW50TG9jYXRpb24oKTtpZihlTDxlTi5sZWZ0fHxlTD5lTi5yaWdodCl7cmV0dXJuIG51bGw7fWlmKGVNPj1lTi50b3AmJmVNPD1lTi5ib3R0b20pe3ZhciBlTz10aGlzLmdldFRhYmxlKCkuZ2V0Um93SGVpZ2h0KCk7dmFyIHNjcm9sbFk9dGhpcy5fX3hkLmdldFBvc2l0aW9uKCk7aWYodGhpcy5nZXRUYWJsZSgpLmdldEtlZXBGaXJzdFZpc2libGVSb3dDb21wbGV0ZSgpKXtzY3JvbGxZPU1hdGguZmxvb3Ioc2Nyb2xsWS9lTykqZU87fXZhciBlUj1zY3JvbGxZK2VNLWVOLnRvcDt2YXIgZVQ9TWF0aC5mbG9vcihlUi9lTyk7dmFyIGVTPXRoaXMuZ2V0VGFibGUoKS5nZXRUYWJsZU1vZGVsKCk7dmFyIGVQPWVTLmdldFJvd0NvdW50KCk7cmV0dXJuIChlVDxlUCk/ZVQ6bnVsbDt9dmFyIGVRPXRoaXMuX194ZS5nZXRDb250YWluZXJMb2NhdGlvbigpO2lmKGVNPj1lUS50b3AmJmVNPD1lUS5ib3R0b20mJmVMPD1lUS5yaWdodCl7cmV0dXJuIC0xO31yZXR1cm4gbnVsbDt9LHNldFRvcFJpZ2h0V2lkZ2V0OmZ1bmN0aW9uKGVVKXt2YXIgZVY9dGhpcy5fX3hHO2lmKGVWIT1udWxsKXt0aGlzLl9feGcucmVtb3ZlKGVWKTt9aWYoZVUhPW51bGwpe3RoaXMuX194Zy5hZGQoZVUpO310aGlzLl9feEc9ZVU7fSxnZXRUb3BSaWdodFdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9feEc7fSxnZXRIZWFkZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3hlO30sZ2V0VGFibGVQYW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX194Zjt9LGdldFZlcnRpY2FsU2Nyb2xsQmFyV2lkdGg6ZnVuY3Rpb24oKXt2YXIgZVc9dGhpcy5fX3hkO3JldHVybiBlVy5pc1Zpc2libGUoKT8oZVcuZ2V0U2l6ZUhpbnQoKS53aWR0aHx8MCk6MDt9LGdldE5lZWRlZFNjcm9sbEJhcnM6ZnVuY3Rpb24oZVgsZVkpe3ZhciBmZj10aGlzLl9feGQuZ2V0U2l6ZUhpbnQoKS53aWR0aDt2YXIgZmc9dGhpcy5fX3hpLmdldElubmVyU2l6ZSgpO3ZhciBmYT1mZz9mZy53aWR0aDowO2lmKHRoaXMuZ2V0VmVydGljYWxTY3JvbGxCYXJWaXNpYmxlKCkpe2ZhKz1mZjt9dmFyIGZqPWZnP2ZnLmhlaWdodDowO2lmKHRoaXMuZ2V0SG9yaXpvbnRhbFNjcm9sbEJhclZpc2libGUoKSl7ZmorPWZmO312YXIgZmQ9dGhpcy5nZXRUYWJsZSgpLmdldFRhYmxlTW9kZWwoKTt2YXIgZmg9ZmQuZ2V0Um93Q291bnQoKTt2YXIgZms9dGhpcy5nZXRUYWJsZVBhbmVNb2RlbCgpLmdldFRvdGFsV2lkdGgoKTt2YXIgZmk9dGhpcy5nZXRUYWJsZSgpLmdldFJvd0hlaWdodCgpKmZoO3ZhciBmYz1mYWxzZTt2YXIgZmw9ZmFsc2U7aWYoZms+ZmEpe2ZjPXRydWU7aWYoZmk+ZmotZmYpe2ZsPXRydWU7fX1lbHNlIGlmKGZpPmZqKXtmbD10cnVlO2lmKCFlWSYmKGZrPmZhLWZmKSl7ZmM9dHJ1ZTt9fXZhciBmZT1xeC51aS50YWJsZS5wYW5lLlNjcm9sbGVyLkhPUklaT05UQUxfU0NST0xMQkFSO3ZhciBmYj1xeC51aS50YWJsZS5wYW5lLlNjcm9sbGVyLlZFUlRJQ0FMX1NDUk9MTEJBUjtyZXR1cm4gKChlWHx8ZmMpP2ZlOjApfCgoZVl8fCFmbCk/MDpmYik7fSxnZXRQYW5lQ2xpcHBlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9feGk7fSxfYXBwbHlTY3JvbGxUaW1lb3V0OmZ1bmN0aW9uKGZtLGZuKXt0aGlzLl9zdGFydEludGVydmFsKGZtKTt9LF9zdGFydEludGVydmFsOmZ1bmN0aW9uKGZvKXt0aGlzLl9feGsuc2V0SW50ZXJ2YWwoZm8pO3RoaXMuX194ay5zdGFydCgpO30sX3N0b3BJbnRlcnZhbDpmdW5jdGlvbigpe3RoaXMuX194ay5zdG9wKCk7fSxfcG9zdHBvbmVkVXBkYXRlQ29udGVudDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUNvbnRlbnQoKTt9LF9vbmludGVydmFsOnF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QoZnVuY3Rpb24oKXtpZih0aGlzLl9feG4mJiF0aGlzLl9feGYuX2xheW91dFBlbmRpbmcpe3RoaXMuX194bj1mYWxzZTt0aGlzLl91cGRhdGVDb250ZW50KCk7fX0pLF91cGRhdGVDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGZ0PXRoaXMuX194aS5nZXRJbm5lclNpemUoKTtpZighZnQpe3JldHVybjt9dmFyIGZ3PWZ0LmhlaWdodDt2YXIgc2Nyb2xsWD10aGlzLl9feGMuZ2V0UG9zaXRpb24oKTt2YXIgc2Nyb2xsWT10aGlzLl9feGQuZ2V0UG9zaXRpb24oKTt2YXIgZnE9dGhpcy5nZXRUYWJsZSgpLmdldFJvd0hlaWdodCgpO3ZhciBmcj1NYXRoLmZsb29yKHNjcm9sbFkvZnEpO3ZhciBmdj10aGlzLl9feGYuZ2V0Rmlyc3RWaXNpYmxlUm93KCk7dGhpcy5fX3hmLnNldEZpcnN0VmlzaWJsZVJvdyhmcik7dmFyIGZzPU1hdGguY2VpbChmdy9mcSk7dmFyIGZwPTA7dmFyIGZ1PXRoaXMuZ2V0VGFibGUoKS5nZXRLZWVwRmlyc3RWaXNpYmxlUm93Q29tcGxldGUoKTtpZighZnUpe2ZzKys7ZnA9c2Nyb2xsWSVmcTt9dGhpcy5fX3hmLnNldFZpc2libGVSb3dDb3VudChmcyk7aWYoZnIhPWZ2KXt0aGlzLl91cGRhdGVGb2N1c0luZGljYXRvcigpO310aGlzLl9feGkuc2Nyb2xsVG9YKHNjcm9sbFgpO2lmKCFmdSl7dGhpcy5fX3hpLnNjcm9sbFRvWShmcCk7fX0sX3VwZGF0ZUZvY3VzSW5kaWNhdG9yOmZ1bmN0aW9uKCl7dmFyIGZ4PXRoaXMuZ2V0VGFibGUoKTtpZighZnguZ2V0RW5hYmxlZCgpKXtyZXR1cm47fXRoaXMuX194ai5tb3ZlVG9DZWxsKHRoaXMuX194Qyx0aGlzLl9feEQpO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fc3RvcEludGVydmFsKCk7dmFyIGZ5PXRoaXMuZ2V0VGFibGVQYW5lTW9kZWwoKTtpZihmeSl7ZnkuZGlzcG9zZSgpO310aGlzLl9feHg9dGhpcy5fX3hHPXRoaXMuX194Yj1udWxsO3RoaXMuX2Rpc3Bvc2VPYmplY3RzKHUsTSxzLHQsVCxiYixhLEksQyk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LnVpLnRhYmxlLnBhbmUuQ2xpcHBlciI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC51aS5jb250YWluZXIuQ29tcG9zaXRlLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUuY2FsbCh0aGlzLG5ldyBxeC51aS5sYXlvdXQuR3JvdygpKTt0aGlzLnNldE1pbldpZHRoKDApO30sbWVtYmVyczp7c2Nyb2xsVG9YOmZ1bmN0aW9uKGIpe3RoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5zY3JvbGxUb1goYixmYWxzZSk7fSxzY3JvbGxUb1k6ZnVuY3Rpb24oYyl7dGhpcy5nZXRDb250ZW50RWxlbWVudCgpLnNjcm9sbFRvWShjLHRydWUpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZz0iSW50ZWdlciIsZj0iRXNjYXBlIixkPSJrZXlwcmVzcyIsYz0iRW50ZXIiLGI9ImV4Y2x1ZGVkIixhPSJxeC51aS50YWJsZS5wYW5lLkZvY3VzSW5kaWNhdG9yIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUsY29uc3RydWN0OmZ1bmN0aW9uKGgpe3F4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUuY2FsbCh0aGlzKTt0aGlzLl9feEo9aDt0aGlzLnNldEtlZXBBY3RpdmUodHJ1ZSk7dGhpcy5hZGRMaXN0ZW5lcihkLHRoaXMuX29uS2V5UHJlc3MsdGhpcyk7fSxwcm9wZXJ0aWVzOnt2aXNpYmlsaXR5OntyZWZpbmU6dHJ1ZSxpbml0OmJ9LHJvdzp7Y2hlY2s6ZyxudWxsYWJsZTp0cnVlfSxjb2x1bW46e2NoZWNrOmcsbnVsbGFibGU6dHJ1ZX19LG1lbWJlcnM6e19feEo6bnVsbCxfb25LZXlQcmVzczpmdW5jdGlvbihlKXt2YXIgaT1lLmdldEtleUlkZW50aWZpZXIoKTtpZihpIT09ZiYmaSE9PWMpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0sbW92ZVRvQ2VsbDpmdW5jdGlvbihqLGspe2lmKCF0aGlzLl9feEouZ2V0U2hvd0NlbGxGb2N1c0luZGljYXRvcigpJiYhdGhpcy5fX3hKLmdldFRhYmxlKCkuZ2V0VGFibGVNb2RlbCgpLmlzQ29sdW1uRWRpdGFibGUoaikpe3RoaXMuZXhjbHVkZSgpO3JldHVybjt9ZWxzZXt0aGlzLnNob3coKTt9aWYoaj09bnVsbCl7dGhpcy5oaWRlKCk7dGhpcy5zZXRSb3cobnVsbCk7dGhpcy5zZXRDb2x1bW4obnVsbCk7fWVsc2V7dmFyIGw9dGhpcy5fX3hKLmdldFRhYmxlUGFuZU1vZGVsKCkuZ2V0WChqKTtpZihsPT0tMSl7dGhpcy5oaWRlKCk7dGhpcy5zZXRSb3cobnVsbCk7dGhpcy5zZXRDb2x1bW4obnVsbCk7fWVsc2V7dmFyIHE9dGhpcy5fX3hKLmdldFRhYmxlKCk7dmFyIG89cS5nZXRUYWJsZUNvbHVtbk1vZGVsKCk7dmFyIHA9dGhpcy5fX3hKLmdldFRhYmxlUGFuZU1vZGVsKCk7dmFyIG49dGhpcy5fX3hKLmdldFRhYmxlUGFuZSgpLmdldEZpcnN0VmlzaWJsZVJvdygpO3ZhciBtPXEuZ2V0Um93SGVpZ2h0KCk7dGhpcy5zZXRVc2VyQm91bmRzKHAuZ2V0Q29sdW1uTGVmdChqKS0yLChrLW4pKm0tMixvLmdldENvbHVtbldpZHRoKGopKzMsbSszKTt0aGlzLnNob3coKTt0aGlzLnNldFJvdyhrKTt0aGlzLnNldENvbHVtbihqKTt9fX19LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX3hKPW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9IkludGVnZXIiLGE9InF4LnVpLnRhYmxlLnBhbmUuQ2VsbEV2ZW50IjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LmV2ZW50LnR5cGUuTW91c2UscHJvcGVydGllczp7cm93OntjaGVjazpiLG51bGxhYmxlOnRydWV9LGNvbHVtbjp7Y2hlY2s6YixudWxsYWJsZTp0cnVlfX0sbWVtYmVyczp7aW5pdDpmdW5jdGlvbihjLGQsZSxmKXtkLmNsb25lKHRoaXMpO3RoaXMuc2V0QnViYmxlcyhmYWxzZSk7aWYoZSE9bnVsbCl7dGhpcy5zZXRSb3coZSk7fWVsc2V7dGhpcy5zZXRSb3coYy5fZ2V0Um93Rm9yUGFnZVBvcyh0aGlzLmdldERvY3VtZW50TGVmdCgpLHRoaXMuZ2V0RG9jdW1lbnRUb3AoKSkpO31pZihmIT1udWxsKXt0aGlzLnNldENvbHVtbihmKTt9ZWxzZXt0aGlzLnNldENvbHVtbihjLl9nZXRDb2x1bW5Gb3JQYWdlWCh0aGlzLmdldERvY3VtZW50TGVmdCgpKSk7fX0sY2xvbmU6ZnVuY3Rpb24oZyl7dmFyIGg9cXguZXZlbnQudHlwZS5Nb3VzZS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzLGcpO2guc2V0KHtyb3c6dGhpcy5nZXRSb3coKSxjb2x1bW46dGhpcy5nZXRDb2x1bW4oKX0pO3JldHVybiBoO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgubGFuZy5OdW1iZXIiO3F4LkNsYXNzLmRlZmluZShhLHtzdGF0aWNzOntpc0luUmFuZ2U6ZnVuY3Rpb24oYixjLGQpe3JldHVybiBiPj1jJiZiPD1kO30saXNCZXR3ZWVuUmFuZ2U6ZnVuY3Rpb24oZSxmLGcpe3JldHVybiBlPmYmJmU8Zzt9LGxpbWl0OmZ1bmN0aW9uKGgsaSxqKXtpZihqIT1udWxsJiZoPmope3JldHVybiBqO31lbHNlIGlmKGkhPW51bGwmJmg8aSl7cmV0dXJuIGk7fWVsc2V7cmV0dXJuIGg7fX19fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbD0ibW92ZSIsaz0iQm9vbGVhbiIsaj0ibW91c2V1cCIsaT0ibW91c2Vkb3duIixoPSJsb3NlY2FwdHVyZSIsZz0icXgudWkuY29yZS5NTW92YWJsZSIsZj0iX19ZIixkPSJfX2JhIixjPSJtb3VzZW1vdmUiLGI9Im1heGltaXplZCIsYT0ibW92ZS1mcmFtZSI7cXguTWl4aW4uZGVmaW5lKGcse3Byb3BlcnRpZXM6e21vdmFibGU6e2NoZWNrOmssaW5pdDp0cnVlfSx1c2VNb3ZlRnJhbWU6e2NoZWNrOmssaW5pdDpmYWxzZX19LG1lbWJlcnM6e19fWTpudWxsLF9fYmE6bnVsbCxfX2JiOm51bGwsX19iYzpudWxsLF9fYmQ6bnVsbCxfX2JlOm51bGwsX19iZjpudWxsLF9fYmc6ZmFsc2UsX19iaDpudWxsLF9fYmk6MCxfYWN0aXZhdGVNb3ZlSGFuZGxlOmZ1bmN0aW9uKG0pe2lmKHRoaXMuX19ZKXt0aHJvdyBuZXcgRXJyb3IoIlRoZSBtb3ZlIGhhbmRsZSBjb3VsZCBub3QgYmUgcmVkZWZpbmVkISIpO310aGlzLl9fWT1tO20uYWRkTGlzdGVuZXIoaSx0aGlzLl9vbk1vdmVNb3VzZURvd24sdGhpcyk7bS5hZGRMaXN0ZW5lcihqLHRoaXMuX29uTW92ZU1vdXNlVXAsdGhpcyk7bS5hZGRMaXN0ZW5lcihjLHRoaXMuX29uTW92ZU1vdXNlTW92ZSx0aGlzKTttLmFkZExpc3RlbmVyKGgsdGhpcy5fX2JtLHRoaXMpO30sX19iajpmdW5jdGlvbigpe3ZhciBuPXRoaXMuX19iYTtpZighbil7bj10aGlzLl9fYmE9bmV3IHF4LnVpLmNvcmUuV2lkZ2V0KCk7bi5zZXRBcHBlYXJhbmNlKGEpO24uZXhjbHVkZSgpO3F4LmNvcmUuSW5pdC5nZXRBcHBsaWNhdGlvbigpLmdldFJvb3QoKS5hZGQobik7fXJldHVybiBuO30sX19iazpmdW5jdGlvbigpe3ZhciBsb2NhdGlvbj10aGlzLmdldENvbnRhaW5lckxvY2F0aW9uKCk7dmFyIHA9dGhpcy5nZXRCb3VuZHMoKTt2YXIgbz10aGlzLl9fYmooKTtvLnNldFVzZXJCb3VuZHMobG9jYXRpb24ubGVmdCxsb2NhdGlvbi50b3AscC53aWR0aCxwLmhlaWdodCk7by5zaG93KCk7by5zZXRaSW5kZXgodGhpcy5nZXRaSW5kZXgoKSsxKTt9LF9fYmw6ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fX2JiO3ZhciB1PU1hdGgubWF4KHIubGVmdCxNYXRoLm1pbihyLnJpZ2h0LGUuZ2V0RG9jdW1lbnRMZWZ0KCkpKTt2YXIgdD1NYXRoLm1heChyLnRvcCxNYXRoLm1pbihyLmJvdHRvbSxlLmdldERvY3VtZW50VG9wKCkpKTt2YXIgcT10aGlzLl9fYmMrdTt2YXIgcz10aGlzLl9fYmQrdDtyZXR1cm4ge3ZpZXdwb3J0TGVmdDpxLHZpZXdwb3J0VG9wOnMscGFyZW50TGVmdDpxLXRoaXMuX19iZSxwYXJlbnRUb3A6cy10aGlzLl9fYmZ9O30sX29uTW92ZU1vdXNlRG93bjpmdW5jdGlvbihlKXtpZighdGhpcy5nZXRNb3ZhYmxlKCl8fHRoaXMuaGFzU3RhdGUoYikpe3JldHVybjt9dmFyIHBhcmVudD10aGlzLmdldExheW91dFBhcmVudCgpO3ZhciB3PXBhcmVudC5nZXRDb250ZW50TG9jYXRpb24oKTt2YXIgeD1wYXJlbnQuZ2V0Qm91bmRzKCk7aWYocXguQ2xhc3MuaW1wbGVtZW50c0ludGVyZmFjZShwYXJlbnQscXgudWkud2luZG93LklEZXNrdG9wKSl7aWYoIXBhcmVudC5pc0NvbnRlbnRCbG9ja2VkKCkpe3RoaXMuX19iaD1wYXJlbnQuZ2V0QmxvY2tlckNvbG9yKCk7dGhpcy5fX2JpPXBhcmVudC5nZXRCbG9ja2VyT3BhY2l0eSgpO3BhcmVudC5zZXRCbG9ja2VyQ29sb3IobnVsbCk7cGFyZW50LnNldEJsb2NrZXJPcGFjaXR5KDEpO3BhcmVudC5ibG9ja0NvbnRlbnQodGhpcy5nZXRaSW5kZXgoKS0xKTt0aGlzLl9fYmc9dHJ1ZTt9fXRoaXMuX19iYj17bGVmdDp3LmxlZnQsdG9wOncudG9wLHJpZ2h0OncubGVmdCt4LndpZHRoLGJvdHRvbTp3LnRvcCt4LmhlaWdodH07dmFyIHY9dGhpcy5nZXRDb250YWluZXJMb2NhdGlvbigpO3RoaXMuX19iZT13LmxlZnQ7dGhpcy5fX2JmPXcudG9wO3RoaXMuX19iYz12LmxlZnQtZS5nZXREb2N1bWVudExlZnQoKTt0aGlzLl9fYmQ9di50b3AtZS5nZXREb2N1bWVudFRvcCgpO3RoaXMuYWRkU3RhdGUobCk7dGhpcy5fX1kuY2FwdHVyZSgpO2lmKHRoaXMuZ2V0VXNlTW92ZUZyYW1lKCkpe3RoaXMuX19iaygpO31lLnN0b3AoKTt9LF9vbk1vdmVNb3VzZU1vdmU6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaGFzU3RhdGUobCkpe3JldHVybjt9dmFyIHk9dGhpcy5fX2JsKGUpO2lmKHRoaXMuZ2V0VXNlTW92ZUZyYW1lKCkpe3RoaXMuX19iaigpLnNldERvbVBvc2l0aW9uKHkudmlld3BvcnRMZWZ0LHkudmlld3BvcnRUb3ApO31lbHNle3RoaXMuc2V0RG9tUG9zaXRpb24oeS5wYXJlbnRMZWZ0LHkucGFyZW50VG9wKTt9ZS5zdG9wUHJvcGFnYXRpb24oKTt9LF9vbk1vdmVNb3VzZVVwOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmhhc1N0YXRlKGwpKXtyZXR1cm47fXRoaXMucmVtb3ZlU3RhdGUobCk7dmFyIHBhcmVudD10aGlzLmdldExheW91dFBhcmVudCgpO2lmKHF4LkNsYXNzLmltcGxlbWVudHNJbnRlcmZhY2UocGFyZW50LHF4LnVpLndpbmRvdy5JRGVza3RvcCkpe2lmKHRoaXMuX19iZyl7cGFyZW50LnVuYmxvY2tDb250ZW50KCk7cGFyZW50LnNldEJsb2NrZXJDb2xvcih0aGlzLl9fYmgpO3BhcmVudC5zZXRCbG9ja2VyT3BhY2l0eSh0aGlzLl9fYmkpO3RoaXMuX19iaD1udWxsO3RoaXMuX19iaT0wO3RoaXMuX19iZz1mYWxzZTt9fXRoaXMuX19ZLnJlbGVhc2VDYXB0dXJlKCk7dmFyIHo9dGhpcy5fX2JsKGUpO3RoaXMuc2V0TGF5b3V0UHJvcGVydGllcyh7bGVmdDp6LnBhcmVudExlZnQsdG9wOnoucGFyZW50VG9wfSk7aWYodGhpcy5nZXRVc2VNb3ZlRnJhbWUoKSl7dGhpcy5fX2JqKCkuZXhjbHVkZSgpO31lLnN0b3BQcm9wYWdhdGlvbigpO30sX19ibTpmdW5jdGlvbihlKXtpZighdGhpcy5oYXNTdGF0ZShsKSl7cmV0dXJuO310aGlzLnJlbW92ZVN0YXRlKGwpO2lmKHRoaXMuZ2V0VXNlTW92ZUZyYW1lKCkpe3RoaXMuX19iaigpLmV4Y2x1ZGUoKTt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlT2JqZWN0cyhkLGYpO3RoaXMuX19iYj1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSJCb29sZWFuIixqPSJyZXNpemUiLGk9Im1vdXNlZG93biIsaD0idy1yZXNpemUiLGc9InN3LXJlc2l6ZSIsZj0ibi1yZXNpemUiLGQ9InJlc2l6YWJsZVJpZ2h0IixjPSJuZS1yZXNpemUiLGI9InNlLXJlc2l6ZSIsYT0iSW50ZWdlciIsej0iZS1yZXNpemUiLHk9InJlc2l6YWJsZUxlZnQiLHg9Im1vdXNlbW92ZSIsdz0ibW92ZSIsdj0ic2hvcnRoYW5kIix1PSJtYXhpbWl6ZWQiLHQ9Im53LXJlc2l6ZSIscz0ibW91c2VvdXQiLHI9InF4LnVpLmNvcmUuTVJlc2l6YWJsZSIscT0ibW91c2V1cCIsbz0ibG9zZWNhcHR1cmUiLHA9InJlc2l6ZS1mcmFtZSIsbT0icmVzaXphYmxlQm90dG9tIixuPSJzLXJlc2l6ZSIsbD0icmVzaXphYmxlVG9wIjtxeC5NaXhpbi5kZWZpbmUocix7Y29uc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5hZGRMaXN0ZW5lcihpLHRoaXMuX19ieix0aGlzLHRydWUpO3RoaXMuYWRkTGlzdGVuZXIocSx0aGlzLl9fYkEsdGhpcyk7dGhpcy5hZGRMaXN0ZW5lcih4LHRoaXMuX19iQyx0aGlzKTt0aGlzLmFkZExpc3RlbmVyKHMsdGhpcy5fX2JELHRoaXMpO3RoaXMuYWRkTGlzdGVuZXIobyx0aGlzLl9fYkIsdGhpcyk7dmFyIEE9dGhpcy5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0RG9tRWxlbWVudCgpO2lmKEE9PW51bGwpe0E9d2luZG93O310aGlzLl9fYm49cXguZXZlbnQuUmVnaXN0cmF0aW9uLmdldE1hbmFnZXIoQSkuZ2V0SGFuZGxlcihxeC5ldmVudC5oYW5kbGVyLkRyYWdEcm9wKTt9LHByb3BlcnRpZXM6e3Jlc2l6YWJsZVRvcDp7Y2hlY2s6ayxpbml0OnRydWV9LHJlc2l6YWJsZVJpZ2h0OntjaGVjazprLGluaXQ6dHJ1ZX0scmVzaXphYmxlQm90dG9tOntjaGVjazprLGluaXQ6dHJ1ZX0scmVzaXphYmxlTGVmdDp7Y2hlY2s6ayxpbml0OnRydWV9LHJlc2l6YWJsZTp7Z3JvdXA6W2wsZCxtLHldLG1vZGU6dn0scmVzaXplU2Vuc2l0aXZpdHk6e2NoZWNrOmEsaW5pdDo1fSx1c2VSZXNpemVGcmFtZTp7Y2hlY2s6ayxpbml0OnRydWV9fSxtZW1iZXJzOntfX2JuOm51bGwsX19ibzpudWxsLF9fYnA6bnVsbCxfX2JxOm51bGwsX19icjpudWxsLF9fYnM6bnVsbCxfX2J0Om51bGwsUkVTSVpFX1RPUDoxLFJFU0laRV9CT1RUT006MixSRVNJWkVfTEVGVDo0LFJFU0laRV9SSUdIVDo4LF9fYnU6ZnVuY3Rpb24oKXt2YXIgQj10aGlzLl9fYm87aWYoIUIpe0I9dGhpcy5fX2JvPW5ldyBxeC51aS5jb3JlLldpZGdldCgpO0Iuc2V0QXBwZWFyYW5jZShwKTtCLmV4Y2x1ZGUoKTtxeC5jb3JlLkluaXQuZ2V0QXBwbGljYXRpb24oKS5nZXRSb290KCkuYWRkKEIpO31yZXR1cm4gQjt9LF9fYnY6ZnVuY3Rpb24oKXt2YXIgRD10aGlzLl9fYnM7dmFyIEM9dGhpcy5fX2J1KCk7Qy5zZXRVc2VyQm91bmRzKEQubGVmdCxELnRvcCxELndpZHRoLEQuaGVpZ2h0KTtDLnNob3coKTtDLnNldFpJbmRleCh0aGlzLmdldFpJbmRleCgpKzEpO30sX19idzpmdW5jdGlvbihlKXt2YXIgRj10aGlzLl9fYnA7dmFyIEc9dGhpcy5nZXRTaXplSGludCgpO3ZhciBKPXRoaXMuX19idDt2YXIgST10aGlzLl9fYnM7dmFyIEU9SS53aWR0aDt2YXIgSD1JLmhlaWdodDt2YXIgTD1JLmxlZnQ7dmFyIHRvcD1JLnRvcDt2YXIgSztpZigoRiZ0aGlzLlJFU0laRV9UT1ApfHwoRiZ0aGlzLlJFU0laRV9CT1RUT00pKXtLPU1hdGgubWF4KEoudG9wLE1hdGgubWluKEouYm90dG9tLGUuZ2V0RG9jdW1lbnRUb3AoKSkpLXRoaXMuX19icjtpZihGJnRoaXMuUkVTSVpFX1RPUCl7SC09Szt9ZWxzZXtIKz1LO31pZihIPEcubWluSGVpZ2h0KXtIPUcubWluSGVpZ2h0O31lbHNlIGlmKEg+Ry5tYXhIZWlnaHQpe0g9Ry5tYXhIZWlnaHQ7fWlmKEYmdGhpcy5SRVNJWkVfVE9QKXt0b3ArPUkuaGVpZ2h0LUg7fX1pZigoRiZ0aGlzLlJFU0laRV9MRUZUKXx8KEYmdGhpcy5SRVNJWkVfUklHSFQpKXtLPU1hdGgubWF4KEoubGVmdCxNYXRoLm1pbihKLnJpZ2h0LGUuZ2V0RG9jdW1lbnRMZWZ0KCkpKS10aGlzLl9fYnE7aWYoRiZ0aGlzLlJFU0laRV9MRUZUKXtFLT1LO31lbHNle0UrPUs7fWlmKEU8Ry5taW5XaWR0aCl7RT1HLm1pbldpZHRoO31lbHNlIGlmKEU+Ry5tYXhXaWR0aCl7RT1HLm1heFdpZHRoO31pZihGJnRoaXMuUkVTSVpFX0xFRlQpe0wrPUkud2lkdGgtRTt9fXJldHVybiB7dmlld3BvcnRMZWZ0Okwsdmlld3BvcnRUb3A6dG9wLHBhcmVudExlZnQ6SS5ib3VuZHMubGVmdCtMLUkubGVmdCxwYXJlbnRUb3A6SS5ib3VuZHMudG9wK3RvcC1JLnRvcCx3aWR0aDpFLGhlaWdodDpIfTt9LF9fYng6ezE6ZiwyOm4sNDpoLDg6eiw1OnQsNjpnLDk6YywxMDpifSxfX2J5OmZ1bmN0aW9uKGUpe3ZhciBPPXRoaXMuZ2V0Q29udGVudExvY2F0aW9uKCk7dmFyIE09dGhpcy5nZXRSZXNpemVTZW5zaXRpdml0eSgpO3ZhciBRPWUuZ2V0RG9jdW1lbnRMZWZ0KCk7dmFyIFA9ZS5nZXREb2N1bWVudFRvcCgpO3ZhciBOPTA7aWYodGhpcy5nZXRSZXNpemFibGVUb3AoKSYmTWF0aC5hYnMoTy50b3AtUCk8TSl7Tis9dGhpcy5SRVNJWkVfVE9QO31lbHNlIGlmKHRoaXMuZ2V0UmVzaXphYmxlQm90dG9tKCkmJk1hdGguYWJzKE8uYm90dG9tLVApPE0pe04rPXRoaXMuUkVTSVpFX0JPVFRPTTt9aWYodGhpcy5nZXRSZXNpemFibGVMZWZ0KCkmJk1hdGguYWJzKE8ubGVmdC1RKTxNKXtOKz10aGlzLlJFU0laRV9MRUZUO31lbHNlIGlmKHRoaXMuZ2V0UmVzaXphYmxlUmlnaHQoKSYmTWF0aC5hYnMoTy5yaWdodC1RKTxNKXtOKz10aGlzLlJFU0laRV9SSUdIVDt9dGhpcy5fX2JwPU47fSxfX2J6OmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9fYnApe3JldHVybjt9dGhpcy5hZGRTdGF0ZShqKTt0aGlzLl9fYnE9ZS5nZXREb2N1bWVudExlZnQoKTt0aGlzLl9fYnI9ZS5nZXREb2N1bWVudFRvcCgpO3ZhciBsb2NhdGlvbj10aGlzLmdldENvbnRhaW5lckxvY2F0aW9uKCk7dmFyIFQ9dGhpcy5nZXRCb3VuZHMoKTt0aGlzLl9fYnM9e3RvcDpsb2NhdGlvbi50b3AsbGVmdDpsb2NhdGlvbi5sZWZ0LHdpZHRoOlQud2lkdGgsaGVpZ2h0OlQuaGVpZ2h0LGJvdW5kczpxeC5sYW5nLk9iamVjdC5jbG9uZShUKX07dmFyIHBhcmVudD10aGlzLmdldExheW91dFBhcmVudCgpO3ZhciBSPXBhcmVudC5nZXRDb250ZW50TG9jYXRpb24oKTt2YXIgUz1wYXJlbnQuZ2V0Qm91bmRzKCk7dGhpcy5fX2J0PXtsZWZ0OlIubGVmdCx0b3A6Ui50b3AscmlnaHQ6Ui5sZWZ0K1Mud2lkdGgsYm90dG9tOlIudG9wK1MuaGVpZ2h0fTtpZih0aGlzLmdldFVzZVJlc2l6ZUZyYW1lKCkpe3RoaXMuX19idigpO310aGlzLmNhcHR1cmUoKTtlLnN0b3AoKTt9LF9fYkE6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaGFzU3RhdGUoaikpe3JldHVybjt9aWYodGhpcy5nZXRVc2VSZXNpemVGcmFtZSgpKXt0aGlzLl9fYnUoKS5leGNsdWRlKCk7fXZhciBVPXRoaXMuX19idyhlKTt0aGlzLnNldFdpZHRoKFUud2lkdGgpO3RoaXMuc2V0SGVpZ2h0KFUuaGVpZ2h0KTtpZih0aGlzLmdldFJlc2l6YWJsZUxlZnQoKXx8dGhpcy5nZXRSZXNpemFibGVUb3AoKSl7dGhpcy5zZXRMYXlvdXRQcm9wZXJ0aWVzKHtsZWZ0OlUucGFyZW50TGVmdCx0b3A6VS5wYXJlbnRUb3B9KTt9dGhpcy5fX2JwPTA7dGhpcy5yZW1vdmVTdGF0ZShqKTt0aGlzLnJlc2V0Q3Vyc29yKCk7dGhpcy5nZXRBcHBsaWNhdGlvblJvb3QoKS5yZXNldEdsb2JhbEN1cnNvcigpO3RoaXMucmVsZWFzZUNhcHR1cmUoKTtlLnN0b3BQcm9wYWdhdGlvbigpO30sX19iQjpmdW5jdGlvbihlKXtpZighdGhpcy5fX2JwKXtyZXR1cm47fXRoaXMucmVzZXRDdXJzb3IoKTt0aGlzLmdldEFwcGxpY2F0aW9uUm9vdCgpLnJlc2V0R2xvYmFsQ3Vyc29yKCk7dGhpcy5yZW1vdmVTdGF0ZSh3KTtpZih0aGlzLmdldFVzZVJlc2l6ZUZyYW1lKCkpe3RoaXMuX19idSgpLmV4Y2x1ZGUoKTt9fSxfX2JDOmZ1bmN0aW9uKGUpe2lmKHRoaXMuaGFzU3RhdGUoaikpe3ZhciBZPXRoaXMuX19idyhlKTtpZih0aGlzLmdldFVzZVJlc2l6ZUZyYW1lKCkpe3ZhciBXPXRoaXMuX19idSgpO1cuc2V0VXNlckJvdW5kcyhZLnZpZXdwb3J0TGVmdCxZLnZpZXdwb3J0VG9wLFkud2lkdGgsWS5oZWlnaHQpO31lbHNle3RoaXMuc2V0V2lkdGgoWS53aWR0aCk7dGhpcy5zZXRIZWlnaHQoWS5oZWlnaHQpO2lmKHRoaXMuZ2V0UmVzaXphYmxlTGVmdCgpfHx0aGlzLmdldFJlc2l6YWJsZVRvcCgpKXt0aGlzLnNldExheW91dFByb3BlcnRpZXMoe2xlZnQ6WS5wYXJlbnRMZWZ0LHRvcDpZLnBhcmVudFRvcH0pO319ZS5zdG9wUHJvcGFnYXRpb24oKTt9ZWxzZSBpZighdGhpcy5oYXNTdGF0ZSh1KSYmIXRoaXMuX19ibi5pc1Nlc3Npb25BY3RpdmUoKSl7dGhpcy5fX2J5KGUpO3ZhciBiYT10aGlzLl9fYnA7dmFyIFg9dGhpcy5nZXRBcHBsaWNhdGlvblJvb3QoKTtpZihiYSl7dmFyIFY9dGhpcy5fX2J4W2JhXTt0aGlzLnNldEN1cnNvcihWKTtYLnNldEdsb2JhbEN1cnNvcihWKTt9ZWxzZSBpZih0aGlzLmdldEN1cnNvcigpKXt0aGlzLnJlc2V0Q3Vyc29yKCk7WC5yZXNldEdsb2JhbEN1cnNvcigpO319fSxfX2JEOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZ2V0Q3Vyc29yKCkmJiF0aGlzLmhhc1N0YXRlKGopKXt0aGlzLnJlc2V0Q3Vyc29yKCk7dGhpcy5nZXRBcHBsaWNhdGlvblJvb3QoKS5yZXNldEdsb2JhbEN1cnNvcigpO319fSxkZXN0cnVjdDpmdW5jdGlvbigpe2lmKHRoaXMuX19ibyE9bnVsbCYmIXF4LmNvcmUuT2JqZWN0UmVnaXN0cnkuaW5TaHV0RG93bil7dGhpcy5fX2JvLmRlc3Ryb3koKTt0aGlzLl9fYm89bnVsbDt9dGhpcy5fX2JuPW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LnVpLndpbmRvdy5JV2luZG93TWFuYWdlciI7cXguSW50ZXJmYWNlLmRlZmluZShhLHttZW1iZXJzOntzZXREZXNrdG9wOmZ1bmN0aW9uKGIpe3RoaXMuYXNzZXJ0SW50ZXJmYWNlKGIscXgudWkud2luZG93LklEZXNrdG9wKTt9LGNoYW5nZUFjdGl2ZVdpbmRvdzpmdW5jdGlvbihjLGQpe30sdXBkYXRlU3RhY2s6ZnVuY3Rpb24oKXt9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbihlKXt0aGlzLmFzc2VydEluc3RhbmNlKGUscXgudWkud2luZG93LldpbmRvdyk7fSxzZW5kVG9CYWNrOmZ1bmN0aW9uKGYpe3RoaXMuYXNzZXJ0SW5zdGFuY2UoZixxeC51aS53aW5kb3cuV2luZG93KTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9Il9fWCIsYT0icXgudWkud2luZG93Lk1hbmFnZXIiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXguY29yZS5PYmplY3QsaW1wbGVtZW50OnF4LnVpLndpbmRvdy5JV2luZG93TWFuYWdlcixtZW1iZXJzOntfX1g6bnVsbCxzZXREZXNrdG9wOmZ1bmN0aW9uKGMpe3RoaXMuX19YPWM7dGhpcy51cGRhdGVTdGFjaygpO30sZ2V0RGVza3RvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fWDt9LGNoYW5nZUFjdGl2ZVdpbmRvdzpmdW5jdGlvbihkLGUpe2lmKGQpe3RoaXMuYnJpbmdUb0Zyb250KGQpO2Quc2V0QWN0aXZlKHRydWUpO31pZihlKXtlLnJlc2V0QWN0aXZlKCk7fX0sX21pblpJbmRleDoxZTUsdXBkYXRlU3RhY2s6ZnVuY3Rpb24oKXtxeC51aS5jb3JlLnF1ZXVlLldpZGdldC5hZGQodGhpcyk7fSxzeW5jV2lkZ2V0OmZ1bmN0aW9uKCl7dGhpcy5fX1guZm9yY2VVbmJsb2NrQ29udGVudCgpO3ZhciBmPXRoaXMuX19YLmdldFdpbmRvd3MoKTt2YXIgaD10aGlzLl9taW5aSW5kZXg7dmFyIG09aCtmLmxlbmd0aCoyO3ZhciBqPWgrZi5sZW5ndGgqNDt2YXIgaz1udWxsO2Zvcih2YXIgaT0wLGw9Zi5sZW5ndGg7aTxsO2krKyl7dmFyIGc9ZltpXTtpZighZy5pc1Zpc2libGUoKSl7Y29udGludWU7fWs9a3x8ZztpZihnLmlzTW9kYWwoKSl7Zy5zZXRaSW5kZXgoaik7dGhpcy5fX1guYmxvY2tDb250ZW50KGotMSk7ais9MjtrPWc7fWVsc2UgaWYoZy5pc0Fsd2F5c09uVG9wKCkpe2cuc2V0WkluZGV4KG0pO20rPTI7fWVsc2V7Zy5zZXRaSW5kZXgoaCk7aCs9Mjt9aWYoIWsuaXNNb2RhbCgpJiZnLmlzQWN0aXZlKCl8fGcuZ2V0WkluZGV4KCk+ay5nZXRaSW5kZXgoKSl7az1nO319dGhpcy5fX1guc2V0QWN0aXZlV2luZG93KGspO30sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKG4pe3ZhciBvPXRoaXMuX19YLmdldFdpbmRvd3MoKTt2YXIgcD1xeC5sYW5nLkFycmF5LnJlbW92ZShvLG4pO2lmKHApe28ucHVzaChuKTt0aGlzLnVwZGF0ZVN0YWNrKCk7fX0sc2VuZFRvQmFjazpmdW5jdGlvbihxKXt2YXIgcj10aGlzLl9fWC5nZXRXaW5kb3dzKCk7dmFyIHM9cXgubGFuZy5BcnJheS5yZW1vdmUocixxKTtpZihzKXtyLnVuc2hpZnQocSk7dGhpcy51cGRhdGVTdGFjaygpO319fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX2Rpc3Bvc2VPYmplY3RzKGIpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSJCb29sZWFuIixqPSJxeC5ldmVudC50eXBlLkV2ZW50IixpPSJjYXB0aW9uYmFyIixoPSJfYXBwbHlDYXB0aW9uQmFyQ2hhbmdlIixnPSJtYXhpbWl6ZS1idXR0b24iLGY9InJlc3RvcmUtYnV0dG9uIixkPSJtaW5pbWl6ZS1idXR0b24iLGM9ImNsb3NlLWJ1dHRvbiIsYj0ibWF4aW1pemVkIixhPSJleGVjdXRlIixRPSJwYW5lIixQPSJ0aXRsZSIsTz0iaWNvbiIsTj0ic3RhdHVzYmFyLXRleHQiLE09InN0YXR1c2JhciIsTD0iU3RyaW5nIixLPSJub3JtYWwiLEo9ImFjdGl2ZSIsST0iYmVmb3JlQ2xvc2UiLEg9ImJlZm9yZU1pbmltaXplIixyPSJtb3VzZWRvd24iLHM9ImNoYW5nZVN0YXR1cyIscD0iY2hhbmdlSWNvbiIscT0iZXhjbHVkZWQiLG49ImRibGNsaWNrIixvPSJfYXBwbHlBY3RpdmUiLGw9ImJlZm9yZVJlc3RvcmUiLG09Im1pbmltaXplIix0PSJjaGFuZ2VNb2RhbCIsdT0iY2hhbmdlQWx3YXlzT25Ub3AiLHo9Il9hcHBseVNob3dTdGF0dXNiYXIiLHk9Il9hcHBseVN0YXR1cyIsQj0icXgudWkud2luZG93LldpbmRvdyIsQT0iY2hhbmdlQ2FwdGlvbiIsRD0iZm9jdXNvdXQiLEM9ImJlZm9yZU1heGltaXplIix3PSJtYXhpbWl6ZSIsRz0icmVzdG9yZSIsRj0id2luZG93IixFPSJjbG9zZSIsdj0iY2hhbmdlQWN0aXZlIix4PSJtaW5pbWl6ZWQiO3F4LkNsYXNzLmRlZmluZShCLHtleHRlbmQ6cXgudWkuY29yZS5XaWRnZXQsaW5jbHVkZTpbcXgudWkuY29yZS5NUmVtb3RlQ2hpbGRyZW5IYW5kbGluZyxxeC51aS5jb3JlLk1SZW1vdGVMYXlvdXRIYW5kbGluZyxxeC51aS5jb3JlLk1SZXNpemFibGUscXgudWkuY29yZS5NTW92YWJsZSxxeC51aS5jb3JlLk1Db250ZW50UGFkZGluZ10sY29uc3RydWN0OmZ1bmN0aW9uKFIsUyl7cXgudWkuY29yZS5XaWRnZXQuY2FsbCh0aGlzKTt0aGlzLl9zZXRMYXlvdXQobmV3IHF4LnVpLmxheW91dC5WQm94KCkpO3RoaXMuX2NyZWF0ZUNoaWxkQ29udHJvbChpKTt0aGlzLl9jcmVhdGVDaGlsZENvbnRyb2woUSk7aWYoUyE9bnVsbCl7dGhpcy5zZXRJY29uKFMpO31pZihSIT1udWxsKXt0aGlzLnNldENhcHRpb24oUik7fXRoaXMuX3VwZGF0ZUNhcHRpb25CYXIoKTt0aGlzLmFkZExpc3RlbmVyKHIsdGhpcy5fb25XaW5kb3dNb3VzZURvd24sdGhpcyx0cnVlKTt0aGlzLmFkZExpc3RlbmVyKEQsdGhpcy5fb25XaW5kb3dGb2N1c091dCx0aGlzKTtxeC5jb3JlLkluaXQuZ2V0QXBwbGljYXRpb24oKS5nZXRSb290KCkuYWRkKHRoaXMpO3RoaXMuaW5pdFZpc2liaWxpdHkoKTtxeC51aS5jb3JlLkZvY3VzSGFuZGxlci5nZXRJbnN0YW5jZSgpLmFkZFJvb3QodGhpcyk7fSxzdGF0aWNzOntERUZBVUxUX01BTkFHRVJfQ0xBU1M6cXgudWkud2luZG93Lk1hbmFnZXJ9LGV2ZW50czp7ImJlZm9yZUNsb3NlIjpqLCJjbG9zZSI6aiwiYmVmb3JlTWluaW1pemUiOmosIm1pbmltaXplIjpqLCJiZWZvcmVNYXhpbWl6ZSI6aiwibWF4aW1pemUiOmosImJlZm9yZVJlc3RvcmUiOmosInJlc3RvcmUiOmp9LHByb3BlcnRpZXM6e2FwcGVhcmFuY2U6e3JlZmluZTp0cnVlLGluaXQ6Rn0sdmlzaWJpbGl0eTp7cmVmaW5lOnRydWUsaW5pdDpxfSxmb2N1c2FibGU6e3JlZmluZTp0cnVlLGluaXQ6dHJ1ZX0sYWN0aXZlOntjaGVjazprLGluaXQ6ZmFsc2UsYXBwbHk6byxldmVudDp2fSxhbHdheXNPblRvcDp7Y2hlY2s6ayxpbml0OmZhbHNlLGV2ZW50OnV9LG1vZGFsOntjaGVjazprLGluaXQ6ZmFsc2UsZXZlbnQ6dH0sY2FwdGlvbjp7YXBwbHk6aCxldmVudDpBLG51bGxhYmxlOnRydWV9LGljb246e2NoZWNrOkwsbnVsbGFibGU6dHJ1ZSxhcHBseTpoLGV2ZW50OnAsdGhlbWVhYmxlOnRydWV9LHN0YXR1czp7Y2hlY2s6TCxudWxsYWJsZTp0cnVlLGFwcGx5OnksZXZlbnQ6c30sc2hvd0Nsb3NlOntjaGVjazprLGluaXQ6dHJ1ZSxhcHBseTpoLHRoZW1lYWJsZTp0cnVlfSxzaG93TWF4aW1pemU6e2NoZWNrOmssaW5pdDp0cnVlLGFwcGx5OmgsdGhlbWVhYmxlOnRydWV9LHNob3dNaW5pbWl6ZTp7Y2hlY2s6ayxpbml0OnRydWUsYXBwbHk6aCx0aGVtZWFibGU6dHJ1ZX0sYWxsb3dDbG9zZTp7Y2hlY2s6ayxpbml0OnRydWUsYXBwbHk6aH0sYWxsb3dNYXhpbWl6ZTp7Y2hlY2s6ayxpbml0OnRydWUsYXBwbHk6aH0sYWxsb3dNaW5pbWl6ZTp7Y2hlY2s6ayxpbml0OnRydWUsYXBwbHk6aH0sc2hvd1N0YXR1c2Jhcjp7Y2hlY2s6ayxpbml0OmZhbHNlLGFwcGx5Onp9fSxtZW1iZXJzOntfX1Y6bnVsbCxfX1c6bnVsbCxnZXRDaGlsZHJlbkNvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldENoaWxkQ29udHJvbChRKTt9LF9mb3J3YXJkU3RhdGVzOnthY3RpdmU6dHJ1ZSxtYXhpbWl6ZWQ6dHJ1ZX0sc2V0TGF5b3V0UGFyZW50OmZ1bmN0aW9uKHBhcmVudCl7e307cXgudWkuY29yZS5XaWRnZXQucHJvdG90eXBlLnNldExheW91dFBhcmVudC5jYWxsKHRoaXMscGFyZW50KTt9LF9jcmVhdGVDaGlsZENvbnRyb2xJbXBsOmZ1bmN0aW9uKFQsVSl7dmFyIFY7c3dpdGNoKFQpe2Nhc2UgTTpWPW5ldyBxeC51aS5jb250YWluZXIuQ29tcG9zaXRlKG5ldyBxeC51aS5sYXlvdXQuSEJveCgpKTt0aGlzLl9hZGQoVik7Vi5hZGQodGhpcy5nZXRDaGlsZENvbnRyb2woTikpO2JyZWFrO2Nhc2UgTjpWPW5ldyBxeC51aS5iYXNpYy5MYWJlbCgpO1Yuc2V0VmFsdWUodGhpcy5nZXRTdGF0dXMoKSk7YnJlYWs7Y2FzZSBROlY9bmV3IHF4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUoKTt0aGlzLl9hZGQoVix7ZmxleDoxfSk7YnJlYWs7Y2FzZSBpOnZhciBYPW5ldyBxeC51aS5sYXlvdXQuR3JpZCgpO1guc2V0Um93RmxleCgwLDEpO1guc2V0Q29sdW1uRmxleCgxLDEpO1Y9bmV3IHF4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUoWCk7dGhpcy5fYWRkKFYpO1YuYWRkTGlzdGVuZXIobix0aGlzLl9vbkNhcHRpb25Nb3VzZURibENsaWNrLHRoaXMpO3RoaXMuX2FjdGl2YXRlTW92ZUhhbmRsZShWKTticmVhaztjYXNlIE86Vj1uZXcgcXgudWkuYmFzaWMuSW1hZ2UodGhpcy5nZXRJY29uKCkpO3RoaXMuZ2V0Q2hpbGRDb250cm9sKGkpLmFkZChWLHtyb3c6MCxjb2x1bW46MH0pO2JyZWFrO2Nhc2UgUDpWPW5ldyBxeC51aS5iYXNpYy5MYWJlbCh0aGlzLmdldENhcHRpb24oKSk7Vi5zZXRXaWR0aCgwKTtWLnNldEFsbG93R3Jvd1godHJ1ZSk7dmFyIFc9dGhpcy5nZXRDaGlsZENvbnRyb2woaSk7Vy5hZGQoVix7cm93OjAsY29sdW1uOjF9KTticmVhaztjYXNlIGQ6Vj1uZXcgcXgudWkuZm9ybS5CdXR0b24oKTtWLnNldEZvY3VzYWJsZShmYWxzZSk7Vi5hZGRMaXN0ZW5lcihhLHRoaXMuX29uTWluaW1pemVCdXR0b25DbGljayx0aGlzKTt0aGlzLmdldENoaWxkQ29udHJvbChpKS5hZGQoVix7cm93OjAsY29sdW1uOjJ9KTticmVhaztjYXNlIGY6Vj1uZXcgcXgudWkuZm9ybS5CdXR0b24oKTtWLnNldEZvY3VzYWJsZShmYWxzZSk7Vi5hZGRMaXN0ZW5lcihhLHRoaXMuX29uUmVzdG9yZUJ1dHRvbkNsaWNrLHRoaXMpO3RoaXMuZ2V0Q2hpbGRDb250cm9sKGkpLmFkZChWLHtyb3c6MCxjb2x1bW46M30pO2JyZWFrO2Nhc2UgZzpWPW5ldyBxeC51aS5mb3JtLkJ1dHRvbigpO1Yuc2V0Rm9jdXNhYmxlKGZhbHNlKTtWLmFkZExpc3RlbmVyKGEsdGhpcy5fb25NYXhpbWl6ZUJ1dHRvbkNsaWNrLHRoaXMpO3RoaXMuZ2V0Q2hpbGRDb250cm9sKGkpLmFkZChWLHtyb3c6MCxjb2x1bW46NH0pO2JyZWFrO2Nhc2UgYzpWPW5ldyBxeC51aS5mb3JtLkJ1dHRvbigpO1Yuc2V0Rm9jdXNhYmxlKGZhbHNlKTtWLmFkZExpc3RlbmVyKGEsdGhpcy5fb25DbG9zZUJ1dHRvbkNsaWNrLHRoaXMpO3RoaXMuZ2V0Q2hpbGRDb250cm9sKGkpLmFkZChWLHtyb3c6MCxjb2x1bW46Nn0pO2JyZWFrO31yZXR1cm4gVnx8cXgudWkuY29yZS5XaWRnZXQucHJvdG90eXBlLl9jcmVhdGVDaGlsZENvbnRyb2xJbXBsLmNhbGwodGhpcyxUKTt9LF91cGRhdGVDYXB0aW9uQmFyOmZ1bmN0aW9uKCl7dmFyIGJhO3ZhciBiYj10aGlzLmdldEljb24oKTtpZihiYil7dGhpcy5nZXRDaGlsZENvbnRyb2woTykuc2V0U291cmNlKGJiKTt0aGlzLl9zaG93Q2hpbGRDb250cm9sKE8pO31lbHNle3RoaXMuX2V4Y2x1ZGVDaGlsZENvbnRyb2woTyk7fXZhciBZPXRoaXMuZ2V0Q2FwdGlvbigpO2lmKFkpe3RoaXMuZ2V0Q2hpbGRDb250cm9sKFApLnNldFZhbHVlKFkpO3RoaXMuX3Nob3dDaGlsZENvbnRyb2woUCk7fWVsc2V7dGhpcy5fZXhjbHVkZUNoaWxkQ29udHJvbChQKTt9aWYodGhpcy5nZXRTaG93TWluaW1pemUoKSl7dGhpcy5fc2hvd0NoaWxkQ29udHJvbChkKTtiYT10aGlzLmdldENoaWxkQ29udHJvbChkKTt0aGlzLmdldEFsbG93TWluaW1pemUoKT9iYS5yZXNldEVuYWJsZWQoKTpiYS5zZXRFbmFibGVkKGZhbHNlKTt9ZWxzZXt0aGlzLl9leGNsdWRlQ2hpbGRDb250cm9sKGQpO31pZih0aGlzLmdldFNob3dNYXhpbWl6ZSgpKXtpZih0aGlzLmlzTWF4aW1pemVkKCkpe3RoaXMuX3Nob3dDaGlsZENvbnRyb2woZik7dGhpcy5fZXhjbHVkZUNoaWxkQ29udHJvbChnKTt9ZWxzZXt0aGlzLl9zaG93Q2hpbGRDb250cm9sKGcpO3RoaXMuX2V4Y2x1ZGVDaGlsZENvbnRyb2woZik7fWJhPXRoaXMuZ2V0Q2hpbGRDb250cm9sKGcpO3RoaXMuZ2V0QWxsb3dNYXhpbWl6ZSgpP2JhLnJlc2V0RW5hYmxlZCgpOmJhLnNldEVuYWJsZWQoZmFsc2UpO31lbHNle3RoaXMuX2V4Y2x1ZGVDaGlsZENvbnRyb2woZyk7dGhpcy5fZXhjbHVkZUNoaWxkQ29udHJvbChmKTt9aWYodGhpcy5nZXRTaG93Q2xvc2UoKSl7dGhpcy5fc2hvd0NoaWxkQ29udHJvbChjKTtiYT10aGlzLmdldENoaWxkQ29udHJvbChjKTt0aGlzLmdldEFsbG93Q2xvc2UoKT9iYS5yZXNldEVuYWJsZWQoKTpiYS5zZXRFbmFibGVkKGZhbHNlKTt9ZWxzZXt0aGlzLl9leGNsdWRlQ2hpbGRDb250cm9sKGMpO319LGNsb3NlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNWaXNpYmxlKCkpe3JldHVybjt9aWYodGhpcy5maXJlTm9uQnViYmxpbmdFdmVudChJLHF4LmV2ZW50LnR5cGUuRXZlbnQsW2ZhbHNlLHRydWVdKSl7dGhpcy5oaWRlKCk7dGhpcy5maXJlRXZlbnQoRSk7fX0sb3BlbjpmdW5jdGlvbigpe3RoaXMuc2hvdygpO3RoaXMuc2V0QWN0aXZlKHRydWUpO3RoaXMuZm9jdXMoKTt9LGNlbnRlcjpmdW5jdGlvbigpe3ZhciBwYXJlbnQ9dGhpcy5nZXRMYXlvdXRQYXJlbnQoKTtpZihwYXJlbnQpe3ZhciBiZD1wYXJlbnQuZ2V0Qm91bmRzKCk7aWYoYmQpe3ZhciBiZT10aGlzLmdldFNpemVIaW50KCk7dmFyIGJjPU1hdGgucm91bmQoKGJkLndpZHRoLWJlLndpZHRoKS8yKTt2YXIgdG9wPU1hdGgucm91bmQoKGJkLmhlaWdodC1iZS5oZWlnaHQpLzIpO2lmKHRvcDwwKXt0b3A9MDt9dGhpcy5tb3ZlVG8oYmMsdG9wKTtyZXR1cm47fX17fTt9LG1heGltaXplOmZ1bmN0aW9uKCl7aWYodGhpcy5pc01heGltaXplZCgpKXtyZXR1cm47fXZhciBwYXJlbnQ9dGhpcy5nZXRMYXlvdXRQYXJlbnQoKTtpZihwYXJlbnQhPW51bGwmJnBhcmVudC5zdXBwb3J0c01heGltaXplKCkpe2lmKHRoaXMuZmlyZU5vbkJ1YmJsaW5nRXZlbnQoQyxxeC5ldmVudC50eXBlLkV2ZW50LFtmYWxzZSx0cnVlXSkpe2lmKCF0aGlzLmlzVmlzaWJsZSgpKXt0aGlzLm9wZW4oKTt9dmFyIGJmPXRoaXMuZ2V0TGF5b3V0UHJvcGVydGllcygpO3RoaXMuX19XPWJmLmxlZnQ9PT11bmRlZmluZWQ/MDpiZi5sZWZ0O3RoaXMuX19WPWJmLnRvcD09PXVuZGVmaW5lZD8wOmJmLnRvcDt0aGlzLnNldExheW91dFByb3BlcnRpZXMoe2xlZnQ6bnVsbCx0b3A6bnVsbCxlZGdlOjB9KTt0aGlzLmFkZFN0YXRlKGIpO3RoaXMuX3VwZGF0ZUNhcHRpb25CYXIoKTt0aGlzLmZpcmVFdmVudCh3KTt9fX0sbWluaW1pemU6ZnVuY3Rpb24oKXtpZighdGhpcy5pc1Zpc2libGUoKSl7cmV0dXJuO31pZih0aGlzLmZpcmVOb25CdWJibGluZ0V2ZW50KEgscXguZXZlbnQudHlwZS5FdmVudCxbZmFsc2UsdHJ1ZV0pKXt2YXIgYmc9dGhpcy5nZXRMYXlvdXRQcm9wZXJ0aWVzKCk7dGhpcy5fX1c9YmcubGVmdD09PXVuZGVmaW5lZD8wOmJnLmxlZnQ7dGhpcy5fX1Y9YmcudG9wPT09dW5kZWZpbmVkPzA6YmcudG9wO3RoaXMucmVtb3ZlU3RhdGUoYik7dGhpcy5oaWRlKCk7dGhpcy5maXJlRXZlbnQobSk7fX0scmVzdG9yZTpmdW5jdGlvbigpe2lmKHRoaXMuZ2V0TW9kZSgpPT09Syl7cmV0dXJuO31pZih0aGlzLmZpcmVOb25CdWJibGluZ0V2ZW50KGwscXguZXZlbnQudHlwZS5FdmVudCxbZmFsc2UsdHJ1ZV0pKXtpZighdGhpcy5pc1Zpc2libGUoKSl7dGhpcy5vcGVuKCk7fXZhciBiaD10aGlzLl9fVzt2YXIgdG9wPXRoaXMuX19WO3RoaXMuc2V0TGF5b3V0UHJvcGVydGllcyh7ZWRnZTpudWxsLGxlZnQ6YmgsdG9wOnRvcH0pO3RoaXMucmVtb3ZlU3RhdGUoYik7dGhpcy5fdXBkYXRlQ2FwdGlvbkJhcigpO3RoaXMuZmlyZUV2ZW50KEcpO319LG1vdmVUbzpmdW5jdGlvbihiaSx0b3Ape2lmKHRoaXMuaXNNYXhpbWl6ZWQoKSl7cmV0dXJuO310aGlzLnNldExheW91dFByb3BlcnRpZXMoe2xlZnQ6YmksdG9wOnRvcH0pO30saXNNYXhpbWl6ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNTdGF0ZShiKTt9LGdldE1vZGU6ZnVuY3Rpb24oKXtpZighdGhpcy5pc1Zpc2libGUoKSl7cmV0dXJuIHg7fWVsc2V7aWYodGhpcy5pc01heGltaXplZCgpKXtyZXR1cm4gYjt9ZWxzZXtyZXR1cm4gSzt9fX0sX2FwcGx5QWN0aXZlOmZ1bmN0aW9uKGJqLGJrKXtpZihiayl7dGhpcy5yZW1vdmVTdGF0ZShKKTt9ZWxzZXt0aGlzLmFkZFN0YXRlKEopO319LF9nZXRDb250ZW50UGFkZGluZ1RhcmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldENoaWxkQ29udHJvbChRKTt9LF9hcHBseVNob3dTdGF0dXNiYXI6ZnVuY3Rpb24oYmwsYm0pe2lmKGJsKXt0aGlzLl9zaG93Q2hpbGRDb250cm9sKE0pO31lbHNle3RoaXMuX2V4Y2x1ZGVDaGlsZENvbnRyb2woTSk7fX0sX2FwcGx5Q2FwdGlvbkJhckNoYW5nZTpmdW5jdGlvbihibixibyl7dGhpcy5fdXBkYXRlQ2FwdGlvbkJhcigpO30sX2FwcGx5U3RhdHVzOmZ1bmN0aW9uKGJwLGJxKXt2YXIgYnI9dGhpcy5nZXRDaGlsZENvbnRyb2woTix0cnVlKTtpZihicil7YnIuc2V0VmFsdWUoYnApO319LF9vbldpbmRvd0V2ZW50U3RvcDpmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpO30sX29uV2luZG93TW91c2VEb3duOmZ1bmN0aW9uKGUpe3RoaXMuc2V0QWN0aXZlKHRydWUpO30sX29uV2luZG93Rm9jdXNPdXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5nZXRNb2RhbCgpKXtyZXR1cm47fXZhciBicz1lLmdldFJlbGF0ZWRUYXJnZXQoKTtpZihicyE9bnVsbCYmIXF4LnVpLmNvcmUuV2lkZ2V0LmNvbnRhaW5zKHRoaXMsYnMpKXt0aGlzLnNldEFjdGl2ZShmYWxzZSk7fX0sX29uQ2FwdGlvbk1vdXNlRGJsQ2xpY2s6ZnVuY3Rpb24oZSl7aWYodGhpcy5nZXRBbGxvd01heGltaXplKCkpe3RoaXMuaXNNYXhpbWl6ZWQoKT90aGlzLnJlc3RvcmUoKTp0aGlzLm1heGltaXplKCk7fX0sX29uTWluaW1pemVCdXR0b25DbGljazpmdW5jdGlvbihlKXt0aGlzLm1pbmltaXplKCk7dGhpcy5nZXRDaGlsZENvbnRyb2woZCkucmVzZXQoKTt9LF9vblJlc3RvcmVCdXR0b25DbGljazpmdW5jdGlvbihlKXt0aGlzLnJlc3RvcmUoKTt0aGlzLmdldENoaWxkQ29udHJvbChmKS5yZXNldCgpO30sX29uTWF4aW1pemVCdXR0b25DbGljazpmdW5jdGlvbihlKXt0aGlzLm1heGltaXplKCk7dGhpcy5nZXRDaGlsZENvbnRyb2woZykucmVzZXQoKTt9LF9vbkNsb3NlQnV0dG9uQ2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5jbG9zZSgpO3RoaXMuZ2V0Q2hpbGRDb250cm9sKGMpLnJlc2V0KCk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC51aS53aW5kb3cuSURlc2t0b3AiO3F4LkludGVyZmFjZS5kZWZpbmUoYSx7bWVtYmVyczp7c2V0V2luZG93TWFuYWdlcjpmdW5jdGlvbihiKXt0aGlzLmFzc2VydEludGVyZmFjZShiLHF4LnVpLndpbmRvdy5JV2luZG93TWFuYWdlcik7fSxnZXRXaW5kb3dzOmZ1bmN0aW9uKCl7fSxzdXBwb3J0c01heGltaXplOmZ1bmN0aW9uKCl7fSxibG9ja0NvbnRlbnQ6ZnVuY3Rpb24oYyl7dGhpcy5hc3NlcnRJbnRlZ2VyKGMpO30sdW5ibG9ja0NvbnRlbnQ6ZnVuY3Rpb24oKXt9LGlzQ29udGVudEJsb2NrZWQ6ZnVuY3Rpb24oKXt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGg9ImhlYWRlckNlbGxSZW5kZXJlckNoYW5nZWQiLGc9InZpc2liaWxpdHlDaGFuZ2VkUHJlIixmPSJOdW1iZXIiLGU9InF4LmV2ZW50LnR5cGUuRXZlbnQiLGQ9Il9hcHBseUZpcnN0Q29sdW1uWCIsYz0iSW50ZWdlciIsYj0icXgudWkudGFibGUucGFuZS5Nb2RlbCIsYT0iX2FwcGx5TWF4Q29sdW1uQ291bnQiO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKGkpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7dGhpcy5zZXRUYWJsZUNvbHVtbk1vZGVsKGkpO30sZXZlbnRzOnsibW9kZWxDaGFuZ2VkIjplfSxzdGF0aWNzOntFVkVOVF9UWVBFX01PREVMX0NIQU5HRUQ6Im1vZGVsQ2hhbmdlZCJ9LHByb3BlcnRpZXM6e2ZpcnN0Q29sdW1uWDp7Y2hlY2s6Yyxpbml0OjAsYXBwbHk6ZH0sbWF4Q29sdW1uQ291bnQ6e2NoZWNrOmYsaW5pdDotMSxhcHBseTphfX0sbWVtYmVyczp7X194SzpudWxsLF9feEw6bnVsbCxfYXBwbHlGaXJzdENvbHVtblg6ZnVuY3Rpb24oaixrKXt0aGlzLl9feEs9bnVsbDt0aGlzLmZpcmVFdmVudChxeC51aS50YWJsZS5wYW5lLk1vZGVsLkVWRU5UX1RZUEVfTU9ERUxfQ0hBTkdFRCk7fSxfYXBwbHlNYXhDb2x1bW5Db3VudDpmdW5jdGlvbihsLG0pe3RoaXMuX194Sz1udWxsO3RoaXMuZmlyZUV2ZW50KHF4LnVpLnRhYmxlLnBhbmUuTW9kZWwuRVZFTlRfVFlQRV9NT0RFTF9DSEFOR0VEKTt9LHNldFRhYmxlQ29sdW1uTW9kZWw6ZnVuY3Rpb24obil7aWYodGhpcy5fX3hMKXt0aGlzLl9feEwucmVtb3ZlTGlzdGVuZXIoZyx0aGlzLl9vbkNvbFZpc2liaWxpdHlDaGFuZ2VkLHRoaXMpO3RoaXMuX194TC5yZW1vdmVMaXN0ZW5lcihoLHRoaXMuX29uQ29sVmlzaWJpbGl0eUNoYW5nZWQsdGhpcyk7fXRoaXMuX194TD1uO3RoaXMuX194TC5hZGRMaXN0ZW5lcihnLHRoaXMuX29uQ29sVmlzaWJpbGl0eUNoYW5nZWQsdGhpcyk7dGhpcy5fX3hMLmFkZExpc3RlbmVyKGgsdGhpcy5fb25IZWFkZXJDZWxsUmVuZGVyZXJDaGFuZ2VkLHRoaXMpO3RoaXMuX194Sz1udWxsO30sX29uQ29sVmlzaWJpbGl0eUNoYW5nZWQ6ZnVuY3Rpb24obyl7dGhpcy5fX3hLPW51bGw7dGhpcy5maXJlRXZlbnQocXgudWkudGFibGUucGFuZS5Nb2RlbC5FVkVOVF9UWVBFX01PREVMX0NIQU5HRUQpO30sX29uSGVhZGVyQ2VsbFJlbmRlcmVyQ2hhbmdlZDpmdW5jdGlvbihwKXt0aGlzLmZpcmVFdmVudChxeC51aS50YWJsZS5wYW5lLk1vZGVsLkVWRU5UX1RZUEVfTU9ERUxfQ0hBTkdFRCk7fSxnZXRDb2x1bW5Db3VudDpmdW5jdGlvbigpe2lmKHRoaXMuX194Sz09bnVsbCl7dmFyIHE9dGhpcy5nZXRGaXJzdENvbHVtblgoKTt2YXIgcz10aGlzLmdldE1heENvbHVtbkNvdW50KCk7dmFyIHI9dGhpcy5fX3hMLmdldFZpc2libGVDb2x1bW5Db3VudCgpO2lmKHM9PS0xfHwocStzKT5yKXt0aGlzLl9feEs9ci1xO31lbHNle3RoaXMuX194Sz1zO319cmV0dXJuIHRoaXMuX194Szt9LGdldENvbHVtbkF0WDpmdW5jdGlvbih0KXt2YXIgdT10aGlzLmdldEZpcnN0Q29sdW1uWCgpO3JldHVybiB0aGlzLl9feEwuZ2V0VmlzaWJsZUNvbHVtbkF0WCh1K3QpO30sZ2V0WDpmdW5jdGlvbih2KXt2YXIgdz10aGlzLmdldEZpcnN0Q29sdW1uWCgpO3ZhciB5PXRoaXMuZ2V0TWF4Q29sdW1uQ291bnQoKTt2YXIgeD10aGlzLl9feEwuZ2V0VmlzaWJsZVgodiktdztpZih4Pj0wJiYoeT09LTF8fHg8eSkpe3JldHVybiB4O31lbHNle3JldHVybiAtMTt9fSxnZXRDb2x1bW5MZWZ0OmZ1bmN0aW9uKHope3ZhciBDPTA7dmFyIEI9dGhpcy5nZXRDb2x1bW5Db3VudCgpO2Zvcih2YXIgeD0wO3g8Qjt4Kyspe3ZhciBBPXRoaXMuZ2V0Q29sdW1uQXRYKHgpO2lmKEE9PXope3JldHVybiBDO31DKz10aGlzLl9feEwuZ2V0Q29sdW1uV2lkdGgoQSk7fXJldHVybiAtMTt9LGdldFRvdGFsV2lkdGg6ZnVuY3Rpb24oKXt2YXIgRD0wO3ZhciBFPXRoaXMuZ2V0Q29sdW1uQ291bnQoKTtmb3IodmFyIHg9MDt4PEU7eCsrKXt2YXIgRj10aGlzLmdldENvbHVtbkF0WCh4KTtEKz10aGlzLl9feEwuZ2V0Q29sdW1uV2lkdGgoRik7fXJldHVybiBEO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5fX3hMKXt0aGlzLl9feEwucmVtb3ZlTGlzdGVuZXIoZyx0aGlzLl9vbkNvbFZpc2liaWxpdHlDaGFuZ2VkLHRoaXMpO3RoaXMuX194TC5yZW1vdmVMaXN0ZW5lcihoLHRoaXMuX29uQ29sVmlzaWJpbGl0eUNoYW5nZWQsdGhpcyk7fXRoaXMuX194TD1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciByPSJweCIscT0iLnFvb3hkb28tdGFibGUtY2VsbC1pY29uIHsiLHA9ImFic3RyYWN0IixvPSIiLG49InF4LnVpLnRhYmxlLmNlbGxyZW5kZXJlci5BYnN0cmFjdEltYWdlIixtPSIgcW9veGRvby10YWJsZS1jZWxsLWljb24iLGw9IjxkaXY+PC9kaXY+IixrPSInIixqPSJuby1yZXBlYXQiLGk9In0iLGM9IiAgdGV4dC1hbGlnbjpjZW50ZXI7IixoPSJpbmxpbmUtYmxvY2siLGY9InN0YXRpYyIsYj0idG9wIixhPSIgIHBhZGRpbmctdG9wOjFweDsiLGU9InRpdGxlPSciLGQ9InN0cmluZyIsZz0iLW1vei1pbmxpbmUtYm94IjtxeC5DbGFzcy5kZWZpbmUobix7ZXh0ZW5kOnF4LnVpLnRhYmxlLmNlbGxyZW5kZXJlci5BYnN0cmFjdCx0eXBlOnAsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXgudWkudGFibGUuY2VsbHJlbmRlcmVyLkFic3RyYWN0LmNhbGwodGhpcyk7dmFyIHM9dGhpcy5zZWxmKGFyZ3VtZW50cyk7aWYoIXMuc3R5bGVzaGVldCl7cy5zdHlsZXNoZWV0PXF4LmJvbS5TdHlsZXNoZWV0LmNyZWF0ZUVsZW1lbnQocStjK2EraSk7fX0sbWVtYmVyczp7X19IdzoxNixfX0h4OjE2LF9fSHk6bnVsbCxfaW5zZXRZOjIsX2lkZW50aWZ5SW1hZ2U6ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJfaWRlbnRpZnlJbWFnZSBpcyBhYnN0cmFjdCIpO30sX2dldEltYWdlSW5mb3M6ZnVuY3Rpb24odSl7dmFyIHY9dGhpcy5faWRlbnRpZnlJbWFnZSh1KTtpZih2PT1udWxsfHx0eXBlb2Ygdj09ZCl7dj17dXJsOnYsdG9vbHRpcDpudWxsfTt9aWYoIXYuaW1hZ2VXaWR0aHx8IXYuaW1hZ2VIZWlnaHQpe3ZhciB3PXRoaXMuX19Ieih2LnVybCk7di5pbWFnZVdpZHRoPXcud2lkdGg7di5pbWFnZUhlaWdodD13LmhlaWdodDt9di53aWR0aD12LmltYWdlV2lkdGg7di5oZWlnaHQ9di5pbWFnZUhlaWdodDtyZXR1cm4gdjt9LF9fSHo6ZnVuY3Rpb24oeCl7dmFyIEE9cXgudXRpbC5SZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKTt2YXIgej1xeC5pby5JbWFnZUxvYWRlcjt2YXIgeSxCO2lmKEEuaGFzKHgpKXt5PUEuZ2V0SW1hZ2VXaWR0aCh4KTtCPUEuZ2V0SW1hZ2VIZWlnaHQoeCk7fWVsc2UgaWYoei5pc0xvYWRlZCh4KSl7eT16LmdldFdpZHRoKHgpO0I9ei5nZXRIZWlnaHQoeCk7fWVsc2V7eT10aGlzLl9fSHc7Qj10aGlzLl9fSHg7fXJldHVybiB7d2lkdGg6eSxoZWlnaHQ6Qn07fSxjcmVhdGVEYXRhQ2VsbEh0bWw6ZnVuY3Rpb24oQyxEKXt0aGlzLl9fSHk9dGhpcy5fZ2V0SW1hZ2VJbmZvcyhDKTtyZXR1cm4gcXgudWkudGFibGUuY2VsbHJlbmRlcmVyLkFic3RyYWN0LnByb3RvdHlwZS5jcmVhdGVEYXRhQ2VsbEh0bWwuY2FsbCh0aGlzLEMsRCk7fSxfZ2V0Q2VsbENsYXNzOmZ1bmN0aW9uKEUpe3JldHVybiBxeC51aS50YWJsZS5jZWxscmVuZGVyZXIuQWJzdHJhY3QucHJvdG90eXBlLl9nZXRDZWxsQ2xhc3MuY2FsbCh0aGlzKSttO30sX2dldENvbnRlbnRIdG1sOmZ1bmN0aW9uKEYpe3ZhciBjb250ZW50PWw7aWYodGhpcy5fX0h5LnVybCl7Y29udGVudD1xeC5ib20uZWxlbWVudC5EZWNvcmF0aW9uLmNyZWF0ZSh0aGlzLl9fSHkudXJsLGose3dpZHRoOnRoaXMuX19IeS53aWR0aCtyLGhlaWdodDp0aGlzLl9fSHkuaGVpZ2h0K3IsZGlzcGxheTpxeC5ib20uY2xpZW50LkVuZ2luZS5HRUNLTyYmcXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjwxLjk/ZzpoLHZlcnRpY2FsQWxpZ246Yixwb3NpdGlvbjpmfSk7fXJldHVybiBjb250ZW50O30sX2dldENlbGxBdHRyaWJ1dGVzOmZ1bmN0aW9uKEcpe3ZhciBIPXRoaXMuX19IeS50b29sdGlwO2lmKEgpe3JldHVybiBlK0grazt9ZWxzZXtyZXR1cm4gbzt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9fSHk9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0icXgudWkudGFibGUuY2VsbHJlbmRlcmVyLkltYWdlIixhPSIiO3F4LkNsYXNzLmRlZmluZShiLHtleHRlbmQ6cXgudWkudGFibGUuY2VsbHJlbmRlcmVyLkFic3RyYWN0SW1hZ2UsY29uc3RydWN0OmZ1bmN0aW9uKGMsZCl7cXgudWkudGFibGUuY2VsbHJlbmRlcmVyLkFic3RyYWN0SW1hZ2UuY2FsbCh0aGlzKTtpZihjKXt0aGlzLl9fSEE9Yzt9aWYoZCl7dGhpcy5fX0hCPWQ7fXRoaXMuX19IQz1xeC51dGlsLkFsaWFzTWFuYWdlci5nZXRJbnN0YW5jZSgpO30sbWVtYmVyczp7X19IQzpudWxsLF9fSEI6MTYsX19IQToxNixfaWRlbnRpZnlJbWFnZTpmdW5jdGlvbihlKXt2YXIgZj17aW1hZ2VXaWR0aDp0aGlzLl9fSEEsaW1hZ2VIZWlnaHQ6dGhpcy5fX0hCfTtpZihlLnZhbHVlPT1hKXtmLnVybD1udWxsO31lbHNle2YudXJsPXRoaXMuX19IQy5yZXNvbHZlKGUudmFsdWUpO31mLnRvb2x0aXA9ZS50b29sdGlwO3JldHVybiBmO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX0hDPW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGs9IkJvb2xlYW4iLGo9InF4LmV2ZW50LnR5cGUuRXZlbnQiLGk9InF1ZXVlZCIsaD0iU3RyaW5nIixnPSJzZW5kaW5nIixmPSJyZWNlaXZpbmciLGQ9ImFib3J0ZWQiLGM9ImZhaWxlZCIsYj0ibm9jYWNoZSIsYT0iY29tcGxldGVkIixQPSJxeC5pby5yZW1vdGUuUmVzcG9uc2UiLE89IlBPU1QiLE49ImNvbmZpZ3VyZWQiLE09InRpbWVvdXQiLEw9IkdFVCIsSz0iUHJhZ21hIixKPSJuby11cmwtcGFyYW1zLW9uLXBvc3QiLEk9IlBVVCIsSD0ibm8tY2FjaGUiLEc9IkNhY2hlLUNvbnRyb2wiLHI9IkNvbnRlbnQtVHlwZSIscz0idGV4dC9wbGFpbiIscD0iYXBwbGljYXRpb24veG1sIixxPSJhcHBsaWNhdGlvbi9qc29uIixuPSJ0ZXh0L2h0bWwiLG89ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsbD0icXguaW8ucmVtb3RlLkV4Y2hhbmdlIixtPSJJbnRlZ2VyIix0PSJYLVFvb3hkb28tUmVzcG9uc2UtVHlwZSIsdT0iSEVBRCIseT0icXguaW8ucmVtb3RlLlJlcXVlc3QiLHg9Il9hcHBseVJlc3BvbnNlVHlwZSIsQT0iX2FwcGx5U3RhdGUiLHo9InRleHQvamF2YXNjcmlwdCIsQz0iY2hhbmdlU3RhdGUiLEI9Il9hcHBseVByb2hpYml0Q2FjaGluZyIsdz0iIixGPSJfYXBwbHlNZXRob2QiLEU9IkRFTEVURSIsRD0iYm9vbGVhbiI7cXguQ2xhc3MuZGVmaW5lKHkse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxjb25zdHJ1Y3Q6ZnVuY3Rpb24oUSxSLFMpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7dGhpcy5fX3NwPXt9O3RoaXMuX19zcT17fTt0aGlzLl9fc3I9e307dGhpcy5fX3NzPXt9O2lmKFEhPT11bmRlZmluZWQpe3RoaXMuc2V0VXJsKFEpO31pZihSIT09dW5kZWZpbmVkKXt0aGlzLnNldE1ldGhvZChSKTt9aWYoUyE9PXVuZGVmaW5lZCl7dGhpcy5zZXRSZXNwb25zZVR5cGUoUyk7fXRoaXMuc2V0UHJvaGliaXRDYWNoaW5nKHRydWUpO3RoaXMuX19zdD0rK3F4LmlvLnJlbW90ZS5SZXF1ZXN0Ll9fc3Q7fSxldmVudHM6eyJjcmVhdGVkIjpqLCJjb25maWd1cmVkIjpqLCJzZW5kaW5nIjpqLCJyZWNlaXZpbmciOmosImNvbXBsZXRlZCI6UCwiYWJvcnRlZCI6aiwiZmFpbGVkIjpQLCJ0aW1lb3V0IjpQfSxzdGF0aWNzOntfX3N0OjAsbWV0aG9kQWxsb3dzUmVxdWVzdEJvZHk6ZnVuY3Rpb24oVCl7cmV0dXJuIChUPT1PKXx8KFQ9PUkpO319LHByb3BlcnRpZXM6e3VybDp7Y2hlY2s6aCxpbml0Ond9LG1ldGhvZDp7Y2hlY2s6W0wsTyxJLHUsRV0sYXBwbHk6Rixpbml0Okx9LGFzeW5jaHJvbm91czp7Y2hlY2s6ayxpbml0OnRydWV9LGRhdGE6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZX0sdXNlcm5hbWU6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZX0scGFzc3dvcmQ6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZX0sc3RhdGU6e2NoZWNrOltOLGksZyxmLGEsZCxNLGNdLGluaXQ6TixhcHBseTpBLGV2ZW50OkN9LHJlc3BvbnNlVHlwZTp7Y2hlY2s6W3MseixxLHAsbl0saW5pdDpzLGFwcGx5Onh9LHRpbWVvdXQ6e2NoZWNrOm0sbnVsbGFibGU6dHJ1ZX0scHJvaGliaXRDYWNoaW5nOntjaGVjazpmdW5jdGlvbih2KXtyZXR1cm4gdHlwZW9mIHY9PUR8fHY9PT1KO30saW5pdDp0cnVlLGFwcGx5OkJ9LGNyb3NzRG9tYWluOntjaGVjazprLGluaXQ6ZmFsc2V9LGZpbGVVcGxvYWQ6e2NoZWNrOmssaW5pdDpmYWxzZX0sdHJhbnNwb3J0OntjaGVjazpsLG51bGxhYmxlOnRydWV9LHVzZUJhc2ljSHR0cEF1dGg6e2NoZWNrOmssaW5pdDpmYWxzZX0scGFyc2VKc29uOntjaGVjazprLGluaXQ6dHJ1ZX19LG1lbWJlcnM6e19fc3A6bnVsbCxfX3NxOm51bGwsX19zcjpudWxsLF9fc3M6bnVsbCxfX3N0Om51bGwsc2VuZDpmdW5jdGlvbigpe3F4LmlvLnJlbW90ZS5SZXF1ZXN0UXVldWUuZ2V0SW5zdGFuY2UoKS5hZGQodGhpcyk7fSxhYm9ydDpmdW5jdGlvbigpe3F4LmlvLnJlbW90ZS5SZXF1ZXN0UXVldWUuZ2V0SW5zdGFuY2UoKS5hYm9ydCh0aGlzKTt9LHJlc2V0OmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZ2V0U3RhdGUoKSl7Y2FzZSBnOmNhc2UgZjp0aGlzLmVycm9yKCJBYm9ydGluZyBhbHJlYWR5IHNlbnQgcmVxdWVzdCEiKTtjYXNlIGk6dGhpcy5hYm9ydCgpO2JyZWFrO319LGlzQ29uZmlndXJlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFN0YXRlKCk9PT1OO30saXNRdWV1ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTdGF0ZSgpPT09aTt9LGlzU2VuZGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFN0YXRlKCk9PT1nO30saXNSZWNlaXZpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTdGF0ZSgpPT09Zjt9LGlzQ29tcGxldGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U3RhdGUoKT09PWE7fSxpc0Fib3J0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTdGF0ZSgpPT09ZDt9LGlzVGltZW91dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFN0YXRlKCk9PT1NO30saXNGYWlsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTdGF0ZSgpPT09Yzt9LF9fc3U6cXguZXZlbnQuR2xvYmFsRXJyb3Iub2JzZXJ2ZU1ldGhvZChmdW5jdGlvbihlKXt2YXIgVT1lLmNsb25lKCk7VS5zZXRUYXJnZXQodGhpcyk7dGhpcy5kaXNwYXRjaEV2ZW50KFUpO30pLF9vbnF1ZXVlZDpmdW5jdGlvbihlKXt0aGlzLnNldFN0YXRlKGkpO3RoaXMuX19zdShlKTt9LF9vbnNlbmRpbmc6ZnVuY3Rpb24oZSl7dGhpcy5zZXRTdGF0ZShnKTt0aGlzLl9fc3UoZSk7fSxfb25yZWNlaXZpbmc6ZnVuY3Rpb24oZSl7dGhpcy5zZXRTdGF0ZShmKTt0aGlzLl9fc3UoZSk7fSxfb25jb21wbGV0ZWQ6ZnVuY3Rpb24oZSl7dGhpcy5zZXRTdGF0ZShhKTt0aGlzLl9fc3UoZSk7dGhpcy5kaXNwb3NlKCk7fSxfb25hYm9ydGVkOmZ1bmN0aW9uKGUpe3RoaXMuc2V0U3RhdGUoZCk7dGhpcy5fX3N1KGUpO3RoaXMuZGlzcG9zZSgpO30sX29udGltZW91dDpmdW5jdGlvbihlKXt0aGlzLnNldFN0YXRlKE0pO3RoaXMuX19zdShlKTt0aGlzLmRpc3Bvc2UoKTt9LF9vbmZhaWxlZDpmdW5jdGlvbihlKXt0aGlzLnNldFN0YXRlKGMpO3RoaXMuX19zdShlKTt0aGlzLmRpc3Bvc2UoKTt9LF9hcHBseVN0YXRlOmZ1bmN0aW9uKFYsVyl7e307fSxfYXBwbHlQcm9oaWJpdENhY2hpbmc6ZnVuY3Rpb24oWCxZKXtpZighWCl7dGhpcy5yZW1vdmVQYXJhbWV0ZXIoYik7dGhpcy5yZW1vdmVSZXF1ZXN0SGVhZGVyKEspO3RoaXMucmVtb3ZlUmVxdWVzdEhlYWRlcihHKTtyZXR1cm47fWlmKFghPT1KfHx0aGlzLmdldE1ldGhvZCgpIT1PKXt0aGlzLnNldFBhcmFtZXRlcihiLG5ldyBEYXRlKCkudmFsdWVPZigpKTt9ZWxzZXt0aGlzLnJlbW92ZVBhcmFtZXRlcihiKTt9dGhpcy5zZXRSZXF1ZXN0SGVhZGVyKEssSCk7dGhpcy5zZXRSZXF1ZXN0SGVhZGVyKEcsSCk7fSxfYXBwbHlNZXRob2Q6ZnVuY3Rpb24oYmEsYmIpe2lmKHF4LmlvLnJlbW90ZS5SZXF1ZXN0Lm1ldGhvZEFsbG93c1JlcXVlc3RCb2R5KGJhKSl7dGhpcy5zZXRSZXF1ZXN0SGVhZGVyKHIsbyk7fWVsc2V7dGhpcy5yZW1vdmVSZXF1ZXN0SGVhZGVyKHIpO312YXIgYmM9dGhpcy5nZXRQcm9oaWJpdENhY2hpbmcoKTt0aGlzLl9hcHBseVByb2hpYml0Q2FjaGluZyhiYyxiYyk7fSxfYXBwbHlSZXNwb25zZVR5cGU6ZnVuY3Rpb24oYmQsYmUpe3RoaXMuc2V0UmVxdWVzdEhlYWRlcih0LGJkKTt9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oYmYsYmcpe3RoaXMuX19zcFtiZl09Ymc7fSxyZW1vdmVSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGJoKXtkZWxldGUgdGhpcy5fX3NwW2JoXTt9LGdldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oYmkpe3JldHVybiB0aGlzLl9fc3BbYmldfHxudWxsO30sZ2V0UmVxdWVzdEhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NwO30sc2V0UGFyYW1ldGVyOmZ1bmN0aW9uKGJqLGJrLGJsKXtpZihibCl7dGhpcy5fX3NyW2JqXT1iazt9ZWxzZXt0aGlzLl9fc3FbYmpdPWJrO319LHJlbW92ZVBhcmFtZXRlcjpmdW5jdGlvbihibSxibil7aWYoYm4pe2RlbGV0ZSB0aGlzLl9fc3JbYm1dO31lbHNle2RlbGV0ZSB0aGlzLl9fc3FbYm1dO319LGdldFBhcmFtZXRlcjpmdW5jdGlvbihibyxicCl7aWYoYnApe3JldHVybiB0aGlzLl9fc3JbYm9dfHxudWxsO31lbHNle3JldHVybiB0aGlzLl9fc3FbYm9dfHxudWxsO319LGdldFBhcmFtZXRlcnM6ZnVuY3Rpb24oYnEpe3JldHVybiAoYnE/dGhpcy5fX3NyOnRoaXMuX19zcSk7fSxzZXRGb3JtRmllbGQ6ZnVuY3Rpb24oYnIsYnMpe3RoaXMuX19zc1ticl09YnM7fSxyZW1vdmVGb3JtRmllbGQ6ZnVuY3Rpb24oYnQpe2RlbGV0ZSB0aGlzLl9fc3NbYnRdO30sZ2V0Rm9ybUZpZWxkOmZ1bmN0aW9uKGJ1KXtyZXR1cm4gdGhpcy5fX3NzW2J1XXx8bnVsbDt9LGdldEZvcm1GaWVsZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3NzO30sZ2V0U2VxdWVuY2VOdW1iZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3N0O319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5zZXRUcmFuc3BvcnQobnVsbCk7dGhpcy5fX3NwPXRoaXMuX19zcT10aGlzLl9fc3I9dGhpcy5fX3NzPW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGI9Ii4iLGE9InF4LmJvbS5jbGllbnQuVHJhbnNwb3J0IjtxeC5DbGFzcy5kZWZpbmUoYSx7c3RhdGljczp7Z2V0TWF4Q29uY3VycmVudFJlcXVlc3RDb3VudDpmdW5jdGlvbigpe3ZhciBoO3ZhciBjPXF4LmJvbS5jbGllbnQuRW5naW5lO3ZhciBnPWMuRlVMTFZFUlNJT04uc3BsaXQoYik7dmFyIGU9MDt2YXIgZD0wO3ZhciBmPTA7aWYoZ1swXSl7ZT1nWzBdO31pZihnWzFdKXtkPWdbMV07fWlmKGdbMl0pe2Y9Z1syXTt9aWYod2luZG93Lm1heENvbm5lY3Rpb25zUGVyU2VydmVyKXtoPXdpbmRvdy5tYXhDb25uZWN0aW9uc1BlclNlcnZlcjt9ZWxzZSBpZihjLk9QRVJBKXtoPTg7fWVsc2UgaWYoYy5XRUJLSVQpe2g9NDt9ZWxzZSBpZihjLkdFQ0tPJiYoKGU+MSl8fCgoZT09MSkmJihkPjkpKXx8KChlPT0xKSYmKGQ9PTkpJiYoZj49MSkpKSl7aD02O31lbHNle2g9Mjt9cmV0dXJuIGg7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBzPSJJbnRlZ2VyIixyPSJhYm9ydGVkIixxPSJfb25hYm9ydGVkIixwPSJfb24iLG89Il9hcHBseUVuYWJsZWQiLG49IkJvb2xlYW4iLG09InNlbmRpbmciLGw9Il9fcGMiLGs9ImludGVydmFsIixqPSJfX3BlIixjPSJmYWlsZWQiLGg9InF4LmlvLnJlbW90ZS5SZXF1ZXN0UXVldWUiLGc9InRpbWVvdXQiLGI9ImNvbXBsZXRlZCIsYT0icXVldWVkIixmPSJyZWNlaXZpbmciLGQ9InNpbmdsZXRvbiI7cXguQ2xhc3MuZGVmaW5lKGgse3R5cGU6ZCxleHRlbmQ6cXguY29yZS5PYmplY3QsY29uc3RydWN0OmZ1bmN0aW9uKCl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLl9fcGI9W107dGhpcy5fX3BjPVtdO3RoaXMuX19wZD0wO3RoaXMuX19wZT1uZXcgcXguZXZlbnQuVGltZXIoNTAwKTt0aGlzLl9fcGUuYWRkTGlzdGVuZXIoayx0aGlzLl9vbmludGVydmFsLHRoaXMpO30scHJvcGVydGllczp7ZW5hYmxlZDp7aW5pdDp0cnVlLGNoZWNrOm4sYXBwbHk6b30sbWF4VG90YWxSZXF1ZXN0czp7Y2hlY2s6cyxudWxsYWJsZTp0cnVlfSxtYXhDb25jdXJyZW50UmVxdWVzdHM6e2NoZWNrOnMsaW5pdDpxeC5ib20uY2xpZW50LlRyYW5zcG9ydC5nZXRNYXhDb25jdXJyZW50UmVxdWVzdENvdW50KCl9LGRlZmF1bHRUaW1lb3V0OntjaGVjazpzLGluaXQ6NTAwMH19LG1lbWJlcnM6e19fcGI6bnVsbCxfX3BjOm51bGwsX19wZDpudWxsLF9fcGU6bnVsbCxnZXRSZXF1ZXN0UXVldWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3BiO30sZ2V0QWN0aXZlUXVldWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3BjO30sX2RlYnVnOmZ1bmN0aW9uKCl7dmFyIHQ7e307fSxfY2hlY2s6ZnVuY3Rpb24oKXt0aGlzLl9kZWJ1ZygpO2lmKHRoaXMuX19wYy5sZW5ndGg9PTAmJnRoaXMuX19wYi5sZW5ndGg9PTApe3RoaXMuX19wZS5zdG9wKCk7fWlmKCF0aGlzLmdldEVuYWJsZWQoKSl7cmV0dXJuO31pZih0aGlzLl9fcGIubGVuZ3RoPT0wfHwodGhpcy5fX3BiWzBdLmlzQXN5bmNocm9ub3VzKCkmJnRoaXMuX19wYy5sZW5ndGg+PXRoaXMuZ2V0TWF4Q29uY3VycmVudFJlcXVlc3RzKCkpKXtyZXR1cm47fWlmKHRoaXMuZ2V0TWF4VG90YWxSZXF1ZXN0cygpIT1udWxsJiZ0aGlzLl9fcGQ+PXRoaXMuZ2V0TWF4VG90YWxSZXF1ZXN0cygpKXtyZXR1cm47fXZhciB1PXRoaXMuX19wYi5zaGlmdCgpO3ZhciB2PW5ldyBxeC5pby5yZW1vdGUuRXhjaGFuZ2UodSk7dGhpcy5fX3BkKys7dGhpcy5fX3BjLnB1c2godik7dGhpcy5fZGVidWcoKTt2LmFkZExpc3RlbmVyKG0sdGhpcy5fb25zZW5kaW5nLHRoaXMpO3YuYWRkTGlzdGVuZXIoZix0aGlzLl9vbnJlY2VpdmluZyx0aGlzKTt2LmFkZExpc3RlbmVyKGIsdGhpcy5fb25jb21wbGV0ZWQsdGhpcyk7di5hZGRMaXN0ZW5lcihyLHRoaXMuX29uY29tcGxldGVkLHRoaXMpO3YuYWRkTGlzdGVuZXIoZyx0aGlzLl9vbmNvbXBsZXRlZCx0aGlzKTt2LmFkZExpc3RlbmVyKGMsdGhpcy5fb25jb21wbGV0ZWQsdGhpcyk7di5fc3RhcnQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7di5zZW5kKCk7aWYodGhpcy5fX3BiLmxlbmd0aD4wKXt0aGlzLl9jaGVjaygpO319LF9yZW1vdmU6ZnVuY3Rpb24odyl7cXgubGFuZy5BcnJheS5yZW1vdmUodGhpcy5fX3BjLHcpO3cuZGlzcG9zZSgpO3RoaXMuX2NoZWNrKCk7fSxfX3BmOjAsX29uc2VuZGluZzpmdW5jdGlvbihlKXt7fTtlLmdldFRhcmdldCgpLmdldFJlcXVlc3QoKS5fb25zZW5kaW5nKGUpO30sX29ucmVjZWl2aW5nOmZ1bmN0aW9uKGUpe2UuZ2V0VGFyZ2V0KCkuZ2V0UmVxdWVzdCgpLl9vbnJlY2VpdmluZyhlKTt9LF9vbmNvbXBsZXRlZDpmdW5jdGlvbihlKXt7fTt2YXIgeT1lLmdldFRhcmdldCgpLmdldFJlcXVlc3QoKTt2YXIgeD1wK2UuZ2V0VHlwZSgpO3RyeXtpZih5W3hdKXt5W3hdKGUpO319Y2F0Y2goeil7dGhpcy5lcnJvcigiUmVxdWVzdCAiK3krIiBoYW5kbGVyICIreCsiIHRocmV3IGFuIGVycm9yOiAiLHopO3RyeXtpZih5W3FdKXt2YXIgZXZlbnQ9cXguZXZlbnQuUmVnaXN0cmF0aW9uLmNyZWF0ZUV2ZW50KHIscXguZXZlbnQudHlwZS5FdmVudCk7eVtxXShldmVudCk7fX1jYXRjaChBKXt9fWZpbmFsbHl7dGhpcy5fcmVtb3ZlKGUuZ2V0VGFyZ2V0KCkpO319LF9vbmludGVydmFsOmZ1bmN0aW9uKGUpe3ZhciBIPXRoaXMuX19wYztpZihILmxlbmd0aD09MCl7dGhpcy5fX3BlLnN0b3AoKTtyZXR1cm47fXZhciBDPShuZXcgRGF0ZSkudmFsdWVPZigpO3ZhciBGO3ZhciBEO3ZhciBHPXRoaXMuZ2V0RGVmYXVsdFRpbWVvdXQoKTt2YXIgRTt2YXIgQjtmb3IodmFyIGk9SC5sZW5ndGgtMTtpPj0wO2ktLSl7Rj1IW2ldO0Q9Ri5nZXRSZXF1ZXN0KCk7aWYoRC5pc0FzeW5jaHJvbm91cygpKXtFPUQuZ2V0VGltZW91dCgpO2lmKEU9PTApe2NvbnRpbnVlO31pZihFPT1udWxsKXtFPUc7fUI9Qy1GLl9zdGFydDtpZihCPkUpe3RoaXMud2FybigiVGltZW91dDogdHJhbnNwb3J0ICIrRi50b0hhc2hDb2RlKCkpO3RoaXMud2FybihCKyJtcyA+ICIrRSsibXMiKTtGLnRpbWVvdXQoKTt9fX19LF9hcHBseUVuYWJsZWQ6ZnVuY3Rpb24oSSxKKXtpZihJKXt0aGlzLl9jaGVjaygpO310aGlzLl9fcGUuc2V0RW5hYmxlZChJKTt9LGFkZDpmdW5jdGlvbihLKXtLLnNldFN0YXRlKGEpO2lmKEsuaXNBc3luY2hyb25vdXMoKSl7dGhpcy5fX3BiLnB1c2goSyk7fWVsc2V7dGhpcy5fX3BiLnVuc2hpZnQoSyk7fXRoaXMuX2NoZWNrKCk7aWYodGhpcy5nZXRFbmFibGVkKCkpe3RoaXMuX19wZS5zdGFydCgpO319LGFib3J0OmZ1bmN0aW9uKEwpe3ZhciBNPUwuZ2V0VHJhbnNwb3J0KCk7aWYoTSl7TS5hYm9ydCgpO31lbHNlIGlmKHF4LmxhbmcuQXJyYXkuY29udGFpbnModGhpcy5fX3BiLEwpKXtxeC5sYW5nLkFycmF5LnJlbW92ZSh0aGlzLl9fcGIsTCk7fX19LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fZGlzcG9zZUFycmF5KGwpO3RoaXMuX2Rpc3Bvc2VPYmplY3RzKGopO3RoaXMuX19wYj1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBvPSJmYWlsZWQiLG49InNlbmRpbmciLG09ImNvbXBsZXRlZCIsaz0icmVjZWl2aW5nIixqPSJhYm9ydGVkIixoPSJ0aW1lb3V0IixnPSJxeC5ldmVudC50eXBlLkV2ZW50IixmPSJDb25uZWN0aW9uIGRyb3BwZWQiLGQ9InF4LmlvLnJlbW90ZS5SZXNwb25zZSIsYz0iPSIsYnA9ImNvbmZpZ3VyZWQiLGJvPSImIixibj0iVW5rbm93biBzdGF0dXMgY29kZS4gIixibT0icXguaW8ucmVtb3RlLnRyYW5zcG9ydC5YbWxIdHRwIixibD0icXguaW8ucmVtb3RlLnRyYW5zcG9ydC5BYnN0cmFjdCIsYms9IlJlcXVlc3QtVVJMIHRvbyBsYXJnZSIsYmo9Ik1TSFRNTC1zcGVjaWZpYyBIVFRQIHN0YXR1cyBjb2RlIixiaT0iTm90IGF2YWlsYWJsZSIsYmg9IlByZWNvbmRpdGlvbiBmYWlsZWQiLGJnPSJTZXJ2ZXIgZXJyb3IiLHY9Ik1vdmVkIHRlbXBvcmFyaWx5Iix3PSJxeC5pby5yZW1vdGUuRXhjaGFuZ2UiLHQ9IlBvc3NpYmx5IGR1ZSB0byBhIGNyb3NzLWRvbWFpbiByZXF1ZXN0PyIsdT0iQmFkIGdhdGV3YXkiLHI9IkdvbmUiLHM9IlNlZSBvdGhlciIscD0iUGFydGlhbCBjb250ZW50IixxPSJTZXJ2ZXIgdGltZW91dCIsQj0icXguaW8ucmVtb3RlLnRyYW5zcG9ydC5TY3JpcHQiLEM9IkhUVFAgdmVyc2lvbiBub3Qgc3VwcG9ydGVkIixMPSJVbmF1dGhvcml6ZWQiLEk9IlBvc3NpYmx5IGR1ZSB0byBhcHBsaWNhdGlvbiBVUkwgdXNpbmcgJ2ZpbGU6JyBwcm90b2NvbD8iLFQ9Ik11bHRpcGxlIGNob2ljZXMiLE89IlBheW1lbnQgcmVxdWlyZWQiLGJjPSJOb3QgaW1wbGVtZW50ZWQiLFk9IlByb3h5IGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIixFPSJMZW5ndGggcmVxdWlyZWQiLGJmPSJfYXBwbHlTdGF0ZSIsYmU9ImNoYW5nZVN0YXRlIixiZD0iTm90IG1vZGlmaWVkIixEPSJxeC5pby5yZW1vdGUuUmVxdWVzdCIsRz0iQ29ubmVjdGlvbiBjbG9zZWQgYnkgc2VydmVyIixIPSJNb3ZlZCBwZXJtYW5lbnRseSIsSz0iX2FwcGx5SW1wbGVtZW50YXRpb24iLE09IiIsUD0iTWV0aG9kIG5vdCBhbGxvd2VkIixWPSJGb3JiaWRkZW4iLGJiPSJVc2UgcHJveHkiLHg9Ik9rIix5PSJDb25mbGljdCIsRj0iTm90IGZvdW5kIixTPSJOb3QgYWNjZXB0YWJsZSIsUj0iUmVxdWVzdCB0aW1lLW91dCIsUT0iQmFkIHJlcXVlc3QiLFg9Ik5vIGNvbnRlbnQiLFc9ImZpbGU6IixOPSJxeC5pby5yZW1vdGUudHJhbnNwb3J0LklmcmFtZSIsVT0iUmVxdWVzdCBlbnRpdHkgdG9vIGxhcmdlIixhPSJVbmtub3duIHN0YXR1cyBjb2RlIixiYT0iVW5zdXBwb3J0ZWQgbWVkaWEgdHlwZSIsej0iR2F0ZXdheSB0aW1lLW91dCIsQT0iY3JlYXRlZCIsSj0iT3V0IG9mIHJlc291cmNlcyIsYj0idW5kZWZpbmVkIjtxeC5DbGFzcy5kZWZpbmUodyx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbihicSl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTt0aGlzLnNldFJlcXVlc3QoYnEpO2JxLnNldFRyYW5zcG9ydCh0aGlzKTt9LGV2ZW50czp7InNlbmRpbmciOmcsInJlY2VpdmluZyI6ZywiY29tcGxldGVkIjpkLCJhYm9ydGVkIjpnLCJmYWlsZWQiOmQsInRpbWVvdXQiOmR9LHN0YXRpY3M6e3R5cGVzT3JkZXI6W2JtLE4sQl0sdHlwZXNSZWFkeTpmYWxzZSx0eXBlc0F2YWlsYWJsZTp7fSx0eXBlc1N1cHBvcnRlZDp7fSxyZWdpc3RlclR5cGU6ZnVuY3Rpb24oYnIsYnMpe3F4LmlvLnJlbW90ZS5FeGNoYW5nZS50eXBlc0F2YWlsYWJsZVtic109YnI7fSxpbml0VHlwZXM6ZnVuY3Rpb24oKXtpZihxeC5pby5yZW1vdGUuRXhjaGFuZ2UudHlwZXNSZWFkeSl7cmV0dXJuO31mb3IodmFyIGJ1IGluIHF4LmlvLnJlbW90ZS5FeGNoYW5nZS50eXBlc0F2YWlsYWJsZSl7dmFyIGJ0PXF4LmlvLnJlbW90ZS5FeGNoYW5nZS50eXBlc0F2YWlsYWJsZVtidV07aWYoYnQuaXNTdXBwb3J0ZWQoKSl7cXguaW8ucmVtb3RlLkV4Y2hhbmdlLnR5cGVzU3VwcG9ydGVkW2J1XT1idDt9fXF4LmlvLnJlbW90ZS5FeGNoYW5nZS50eXBlc1JlYWR5PXRydWU7aWYocXgubGFuZy5PYmplY3QuaXNFbXB0eShxeC5pby5yZW1vdGUuRXhjaGFuZ2UudHlwZXNTdXBwb3J0ZWQpKXt0aHJvdyBuZXcgRXJyb3IoIk5vIHN1cHBvcnRlZCB0cmFuc3BvcnQgdHlwZXMgd2VyZSBmb3VuZCEiKTt9fSxjYW5IYW5kbGU6ZnVuY3Rpb24oYnYsYncsYngpe2lmKCFxeC5sYW5nLkFycmF5LmNvbnRhaW5zKGJ2LmhhbmRsZXMucmVzcG9uc2VUeXBlcyxieCkpe3JldHVybiBmYWxzZTt9Zm9yKHZhciBieSBpbiBidyl7aWYoIWJ2LmhhbmRsZXNbYnldKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTt9LF9uYXRpdmVNYXA6ezA6QSwxOmJwLDI6biwzOmssNDptfSx3YXNTdWNjZXNzZnVsOmZ1bmN0aW9uKGJ6LGJBLGJCKXtpZihiQil7c3dpdGNoKGJ6KXtjYXNlIG51bGw6Y2FzZSAwOnJldHVybiB0cnVlO2Nhc2UgLTE6cmV0dXJuIGJBPDQ7ZGVmYXVsdDpyZXR1cm4gdHlwZW9mIGJ6PT09Yjt9fWVsc2V7c3dpdGNoKGJ6KXtjYXNlIC0xOnt9O3JldHVybiBiQTw0O2Nhc2UgMjAwOmNhc2UgMzA0OnJldHVybiB0cnVlO2Nhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjAzOmNhc2UgMjA0OmNhc2UgMjA1OnJldHVybiB0cnVlO2Nhc2UgMjA2Ont9O3JldHVybiBiQSE9PTQ7Y2FzZSAzMDA6Y2FzZSAzMDE6Y2FzZSAzMDI6Y2FzZSAzMDM6Y2FzZSAzMDU6Y2FzZSA0MDA6Y2FzZSA0MDE6Y2FzZSA0MDI6Y2FzZSA0MDM6Y2FzZSA0MDQ6Y2FzZSA0MDU6Y2FzZSA0MDY6Y2FzZSA0MDc6Y2FzZSA0MDg6Y2FzZSA0MDk6Y2FzZSA0MTA6Y2FzZSA0MTE6Y2FzZSA0MTI6Y2FzZSA0MTM6Y2FzZSA0MTQ6Y2FzZSA0MTU6Y2FzZSA1MDA6Y2FzZSA1MDE6Y2FzZSA1MDI6Y2FzZSA1MDM6Y2FzZSA1MDQ6Y2FzZSA1MDU6e307cmV0dXJuIGZhbHNlO2Nhc2UgMTIwMDI6Y2FzZSAxMjAwNzpjYXNlIDEyMDI5OmNhc2UgMTIwMzA6Y2FzZSAxMjAzMTpjYXNlIDEyMTUyOmNhc2UgMTMwMzA6e307cmV0dXJuIGZhbHNlO2RlZmF1bHQ6aWYoYno+MjA2JiZiejwzMDApe3JldHVybiB0cnVlO31xeC5sb2cuTG9nZ2VyLmRlYnVnKHRoaXMsIlVua25vd24gc3RhdHVzIGNvZGU6ICIrYnorIiAoIitiQSsiKSIpO3JldHVybiBmYWxzZTt9fX0sc3RhdHVzQ29kZVRvU3RyaW5nOmZ1bmN0aW9uKGJDKXtzd2l0Y2goYkMpe2Nhc2UgLTE6cmV0dXJuIGJpO2Nhc2UgMDp2YXIgYkQ9d2luZG93LmxvY2F0aW9uLmhyZWY7aWYocXgubGFuZy5TdHJpbmcuc3RhcnRzV2l0aChiRC50b0xvd2VyQ2FzZSgpLFcpKXtyZXR1cm4gKGJuK0kpO31lbHNle3JldHVybiAoYm4rdCk7fWJyZWFrO2Nhc2UgMjAwOnJldHVybiB4O2Nhc2UgMzA0OnJldHVybiBiZDtjYXNlIDIwNjpyZXR1cm4gcDtjYXNlIDIwNDpyZXR1cm4gWDtjYXNlIDMwMDpyZXR1cm4gVDtjYXNlIDMwMTpyZXR1cm4gSDtjYXNlIDMwMjpyZXR1cm4gdjtjYXNlIDMwMzpyZXR1cm4gcztjYXNlIDMwNTpyZXR1cm4gYmI7Y2FzZSA0MDA6cmV0dXJuIFE7Y2FzZSA0MDE6cmV0dXJuIEw7Y2FzZSA0MDI6cmV0dXJuIE87Y2FzZSA0MDM6cmV0dXJuIFY7Y2FzZSA0MDQ6cmV0dXJuIEY7Y2FzZSA0MDU6cmV0dXJuIFA7Y2FzZSA0MDY6cmV0dXJuIFM7Y2FzZSA0MDc6cmV0dXJuIFk7Y2FzZSA0MDg6cmV0dXJuIFI7Y2FzZSA0MDk6cmV0dXJuIHk7Y2FzZSA0MTA6cmV0dXJuIHI7Y2FzZSA0MTE6cmV0dXJuIEU7Y2FzZSA0MTI6cmV0dXJuIGJoO2Nhc2UgNDEzOnJldHVybiBVO2Nhc2UgNDE0OnJldHVybiBiaztjYXNlIDQxNTpyZXR1cm4gYmE7Y2FzZSA1MDA6cmV0dXJuIGJnO2Nhc2UgNTAxOnJldHVybiBiYztjYXNlIDUwMjpyZXR1cm4gdTtjYXNlIDUwMzpyZXR1cm4gSjtjYXNlIDUwNDpyZXR1cm4gejtjYXNlIDUwNTpyZXR1cm4gQztjYXNlIDEyMDAyOnJldHVybiBxO2Nhc2UgMTIwMjk6cmV0dXJuIGY7Y2FzZSAxMjAzMDpyZXR1cm4gZjtjYXNlIDEyMDMxOnJldHVybiBmO2Nhc2UgMTIxNTI6cmV0dXJuIEc7Y2FzZSAxMzAzMDpyZXR1cm4gYmo7ZGVmYXVsdDpyZXR1cm4gYTt9fX0scHJvcGVydGllczp7cmVxdWVzdDp7Y2hlY2s6RCxudWxsYWJsZTp0cnVlfSxpbXBsZW1lbnRhdGlvbjp7Y2hlY2s6YmwsbnVsbGFibGU6dHJ1ZSxhcHBseTpLfSxzdGF0ZTp7Y2hlY2s6W2JwLG4sayxtLGosaCxvXSxpbml0OmJwLGV2ZW50OmJlLGFwcGx5OmJmfX0sbWVtYmVyczp7c2VuZDpmdW5jdGlvbigpe3ZhciBiSD10aGlzLmdldFJlcXVlc3QoKTtpZighYkgpe3JldHVybiB0aGlzLmVycm9yKCJQbGVhc2UgYXR0YWNoIGEgcmVxdWVzdCBvYmplY3QgZmlyc3QiKTt9cXguaW8ucmVtb3RlLkV4Y2hhbmdlLmluaXRUeXBlcygpO3ZhciBiRj1xeC5pby5yZW1vdGUuRXhjaGFuZ2UudHlwZXNPcmRlcjt2YXIgYkU9cXguaW8ucmVtb3RlLkV4Y2hhbmdlLnR5cGVzU3VwcG9ydGVkO3ZhciBiSj1iSC5nZXRSZXNwb25zZVR5cGUoKTt2YXIgYks9e307aWYoYkguZ2V0QXN5bmNocm9ub3VzKCkpe2JLLmFzeW5jaHJvbm91cz10cnVlO31lbHNle2JLLnN5bmNocm9ub3VzPXRydWU7fWlmKGJILmdldENyb3NzRG9tYWluKCkpe2JLLmNyb3NzRG9tYWluPXRydWU7fWlmKGJILmdldEZpbGVVcGxvYWQoKSl7YksuZmlsZVVwbG9hZD10cnVlO31mb3IodmFyIGJJIGluIGJILmdldEZvcm1GaWVsZHMoKSl7YksucHJvZ3JhbWF0aWNGb3JtRmllbGRzPXRydWU7YnJlYWs7fXZhciBiTCxiRztmb3IodmFyIGk9MCxsPWJGLmxlbmd0aDtpPGw7aSsrKXtiTD1iRVtiRltpXV07aWYoYkwpe2lmKCFxeC5pby5yZW1vdGUuRXhjaGFuZ2UuY2FuSGFuZGxlKGJMLGJLLGJKKSl7Y29udGludWU7fXRyeXt7fTtiRz1uZXcgYkw7dGhpcy5zZXRJbXBsZW1lbnRhdGlvbihiRyk7Ykcuc2V0VXNlQmFzaWNIdHRwQXV0aChiSC5nZXRVc2VCYXNpY0h0dHBBdXRoKCkpO2JHLnNlbmQoKTtyZXR1cm4gdHJ1ZTt9Y2F0Y2goYk0pe3RoaXMuZXJyb3IoIlJlcXVlc3QgaGFuZGxlciB0aHJvd3MgZXJyb3IiKTt0aGlzLmVycm9yKGJNKTtyZXR1cm47fX19dGhpcy5lcnJvcigiVGhlcmUgaXMgbm8gdHJhbnNwb3J0IGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byBoYW5kbGUgdGhpcyByZXF1ZXN0OiAiK2JIKTt9LGFib3J0OmZ1bmN0aW9uKCl7dmFyIGJOPXRoaXMuZ2V0SW1wbGVtZW50YXRpb24oKTtpZihiTil7e307Yk4uYWJvcnQoKTt9ZWxzZXt7fTt0aGlzLnNldFN0YXRlKGopO319LHRpbWVvdXQ6ZnVuY3Rpb24oKXt2YXIgYlE9dGhpcy5nZXRJbXBsZW1lbnRhdGlvbigpO2lmKGJRKXt2YXIgYlA9TTtmb3IodmFyIGJPIGluIGJRLmdldFBhcmFtZXRlcnMoKSl7YlArPWJvK2JPK2MrYlEuZ2V0UGFyYW1ldGVycygpW2JPXTt9dGhpcy53YXJuKCJUaW1lb3V0OiBpbXBsZW1lbnRhdGlvbiAiK2JRLnRvSGFzaENvZGUoKSsiLCAiK2JRLmdldFVybCgpKyIgWyIrYlEuZ2V0TWV0aG9kKCkrIl0sICIrYlApO2JRLnRpbWVvdXQoKTt9ZWxzZXt0aGlzLndhcm4oIlRpbWVvdXQ6IGZvcmNpbmcgc3RhdGUgdG8gdGltZW91dCIpO3RoaXMuc2V0U3RhdGUoaCk7fXRoaXMuX19yeCgpO30sX19yeDpmdW5jdGlvbigpe3ZhciBiUj10aGlzLmdldFJlcXVlc3QoKTtpZihiUil7YlIuc2V0VGltZW91dCgwKTt9fSxfb25zZW5kaW5nOmZ1bmN0aW9uKGUpe3RoaXMuc2V0U3RhdGUobik7fSxfb25yZWNlaXZpbmc6ZnVuY3Rpb24oZSl7dGhpcy5zZXRTdGF0ZShrKTt9LF9vbmNvbXBsZXRlZDpmdW5jdGlvbihlKXt0aGlzLnNldFN0YXRlKG0pO30sX29uYWJvcnQ6ZnVuY3Rpb24oZSl7dGhpcy5zZXRTdGF0ZShqKTt9LF9vbmZhaWxlZDpmdW5jdGlvbihlKXt0aGlzLnNldFN0YXRlKG8pO30sX29udGltZW91dDpmdW5jdGlvbihlKXt0aGlzLnNldFN0YXRlKGgpO30sX2FwcGx5SW1wbGVtZW50YXRpb246ZnVuY3Rpb24oYlMsYlQpe2lmKGJUKXtiVC5yZW1vdmVMaXN0ZW5lcihuLHRoaXMuX29uc2VuZGluZyx0aGlzKTtiVC5yZW1vdmVMaXN0ZW5lcihrLHRoaXMuX29ucmVjZWl2aW5nLHRoaXMpO2JULnJlbW92ZUxpc3RlbmVyKG0sdGhpcy5fb25jb21wbGV0ZWQsdGhpcyk7YlQucmVtb3ZlTGlzdGVuZXIoaix0aGlzLl9vbmFib3J0LHRoaXMpO2JULnJlbW92ZUxpc3RlbmVyKGgsdGhpcy5fb250aW1lb3V0LHRoaXMpO2JULnJlbW92ZUxpc3RlbmVyKG8sdGhpcy5fb25mYWlsZWQsdGhpcyk7fWlmKGJTKXt2YXIgYlY9dGhpcy5nZXRSZXF1ZXN0KCk7YlMuc2V0VXJsKGJWLmdldFVybCgpKTtiUy5zZXRNZXRob2QoYlYuZ2V0TWV0aG9kKCkpO2JTLnNldEFzeW5jaHJvbm91cyhiVi5nZXRBc3luY2hyb25vdXMoKSk7YlMuc2V0VXNlcm5hbWUoYlYuZ2V0VXNlcm5hbWUoKSk7YlMuc2V0UGFzc3dvcmQoYlYuZ2V0UGFzc3dvcmQoKSk7YlMuc2V0UGFyYW1ldGVycyhiVi5nZXRQYXJhbWV0ZXJzKGZhbHNlKSk7YlMuc2V0Rm9ybUZpZWxkcyhiVi5nZXRGb3JtRmllbGRzKCkpO2JTLnNldFJlcXVlc3RIZWFkZXJzKGJWLmdldFJlcXVlc3RIZWFkZXJzKCkpO2lmKGJTIGluc3RhbmNlb2YgcXguaW8ucmVtb3RlLnRyYW5zcG9ydC5YbWxIdHRwKXtiUy5zZXRQYXJzZUpzb24oYlYuZ2V0UGFyc2VKc29uKCkpO312YXIgYlk9YlYuZ2V0RGF0YSgpO2lmKGJZPT09bnVsbCl7dmFyIGNhPWJWLmdldFBhcmFtZXRlcnModHJ1ZSk7dmFyIGJYPVtdO2Zvcih2YXIgYlUgaW4gY2Epe3ZhciBiVz1jYVtiVV07aWYoYlcgaW5zdGFuY2VvZiBBcnJheSl7Zm9yKHZhciBpPTA7aTxiVy5sZW5ndGg7aSsrKXtiWC5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChiVSkrYytlbmNvZGVVUklDb21wb25lbnQoYldbaV0pKTt9fWVsc2V7YlgucHVzaChlbmNvZGVVUklDb21wb25lbnQoYlUpK2MrZW5jb2RlVVJJQ29tcG9uZW50KGJXKSk7fX1pZihiWC5sZW5ndGg+MCl7YlMuc2V0RGF0YShiWC5qb2luKGJvKSk7fX1lbHNle2JTLnNldERhdGEoYlkpO31iUy5zZXRSZXNwb25zZVR5cGUoYlYuZ2V0UmVzcG9uc2VUeXBlKCkpO2JTLmFkZExpc3RlbmVyKG4sdGhpcy5fb25zZW5kaW5nLHRoaXMpO2JTLmFkZExpc3RlbmVyKGssdGhpcy5fb25yZWNlaXZpbmcsdGhpcyk7YlMuYWRkTGlzdGVuZXIobSx0aGlzLl9vbmNvbXBsZXRlZCx0aGlzKTtiUy5hZGRMaXN0ZW5lcihqLHRoaXMuX29uYWJvcnQsdGhpcyk7YlMuYWRkTGlzdGVuZXIoaCx0aGlzLl9vbnRpbWVvdXQsdGhpcyk7YlMuYWRkTGlzdGVuZXIobyx0aGlzLl9vbmZhaWxlZCx0aGlzKTt9fSxfYXBwbHlTdGF0ZTpmdW5jdGlvbihjYixjYyl7e307c3dpdGNoKGNiKXtjYXNlIG46dGhpcy5maXJlRXZlbnQobik7YnJlYWs7Y2FzZSBrOnRoaXMuZmlyZUV2ZW50KGspO2JyZWFrO2Nhc2UgbTpjYXNlIGo6Y2FzZSBoOmNhc2Ugbzp2YXIgY2U9dGhpcy5nZXRJbXBsZW1lbnRhdGlvbigpO2lmKCFjZSl7YnJlYWs7fXRoaXMuX19yeCgpO2lmKHRoaXMuaGFzTGlzdGVuZXIoY2IpKXt2YXIgY2Y9cXguZXZlbnQuUmVnaXN0cmF0aW9uLmNyZWF0ZUV2ZW50KGNiLHF4LmlvLnJlbW90ZS5SZXNwb25zZSk7aWYoY2I9PW0pe3ZhciBjZD1jZS5nZXRSZXNwb25zZUNvbnRlbnQoKTtjZi5zZXRDb250ZW50KGNkKTtpZihjZD09PW51bGwpe3t9O2NiPW87fX1lbHNlIGlmKGNiPT1vKXtjZi5zZXRDb250ZW50KGNlLmdldFJlc3BvbnNlQ29udGVudCgpKTt9Y2Yuc2V0U3RhdHVzQ29kZShjZS5nZXRTdGF0dXNDb2RlKCkpO2NmLnNldFJlc3BvbnNlSGVhZGVycyhjZS5nZXRSZXNwb25zZUhlYWRlcnMoKSk7dGhpcy5kaXNwYXRjaEV2ZW50KGNmKTt9dGhpcy5zZXRJbXBsZW1lbnRhdGlvbihudWxsKTtjZS5kaXNwb3NlKCk7YnJlYWs7fX19LHNldHRpbmdzOnsicXguaW9SZW1vdGVEZWJ1ZyI6ZmFsc2UsInF4LmlvUmVtb3RlRGVidWdEYXRhIjpmYWxzZX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt2YXIgY2c9dGhpcy5nZXRJbXBsZW1lbnRhdGlvbigpO2lmKGNnKXt0aGlzLnNldEltcGxlbWVudGF0aW9uKG51bGwpO2NnLmRpc3Bvc2UoKTt9dGhpcy5zZXRSZXF1ZXN0KG51bGwpO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBxPSJxeC5ldmVudC50eXBlLkV2ZW50IixwPSJTdHJpbmciLG89ImZhaWxlZCIsbj0idGltZW91dCIsbT0iY3JlYXRlZCIsbD0iYWJvcnRlZCIsaz0ic2VuZGluZyIsaj0iY29uZmlndXJlZCIsaT0icmVjZWl2aW5nIixoPSJjb21wbGV0ZWQiLGM9Ik9iamVjdCIsZz0iQm9vbGVhbiIsZj0iYWJzdHJhY3QiLGI9Il9hcHBseVN0YXRlIixhPSJHRVQiLGU9ImNoYW5nZVN0YXRlIixkPSJxeC5pby5yZW1vdGUudHJhbnNwb3J0LkFic3RyYWN0IjtxeC5DbGFzcy5kZWZpbmUoZCx7dHlwZTpmLGV4dGVuZDpxeC5jb3JlLk9iamVjdCxjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3RoaXMuc2V0UmVxdWVzdEhlYWRlcnMoe30pO3RoaXMuc2V0UGFyYW1ldGVycyh7fSk7dGhpcy5zZXRGb3JtRmllbGRzKHt9KTt9LGV2ZW50czp7ImNyZWF0ZWQiOnEsImNvbmZpZ3VyZWQiOnEsInNlbmRpbmciOnEsInJlY2VpdmluZyI6cSwiY29tcGxldGVkIjpxLCJhYm9ydGVkIjpxLCJmYWlsZWQiOnEsInRpbWVvdXQiOnF9LHByb3BlcnRpZXM6e3VybDp7Y2hlY2s6cCxudWxsYWJsZTp0cnVlfSxtZXRob2Q6e2NoZWNrOnAsbnVsbGFibGU6dHJ1ZSxpbml0OmF9LGFzeW5jaHJvbm91czp7Y2hlY2s6ZyxudWxsYWJsZTp0cnVlLGluaXQ6dHJ1ZX0sZGF0YTp7Y2hlY2s6cCxudWxsYWJsZTp0cnVlfSx1c2VybmFtZTp7Y2hlY2s6cCxudWxsYWJsZTp0cnVlfSxwYXNzd29yZDp7Y2hlY2s6cCxudWxsYWJsZTp0cnVlfSxzdGF0ZTp7Y2hlY2s6W20saixrLGksaCxsLG4sb10saW5pdDptLGV2ZW50OmUsYXBwbHk6Yn0scmVxdWVzdEhlYWRlcnM6e2NoZWNrOmMsbnVsbGFibGU6dHJ1ZX0scGFyYW1ldGVyczp7Y2hlY2s6YyxudWxsYWJsZTp0cnVlfSxmb3JtRmllbGRzOntjaGVjazpjLG51bGxhYmxlOnRydWV9LHJlc3BvbnNlVHlwZTp7Y2hlY2s6cCxudWxsYWJsZTp0cnVlfSx1c2VCYXNpY0h0dHBBdXRoOntjaGVjazpnLG51bGxhYmxlOnRydWV9fSxtZW1iZXJzOntzZW5kOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJzZW5kIGlzIGFic3RyYWN0Iik7fSxhYm9ydDpmdW5jdGlvbigpe3t9O3RoaXMuc2V0U3RhdGUobCk7fSx0aW1lb3V0OmZ1bmN0aW9uKCl7e307dGhpcy5zZXRTdGF0ZShuKTt9LGZhaWxlZDpmdW5jdGlvbigpe3t9O3RoaXMuc2V0U3RhdGUobyk7fSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKHIscyl7dGhyb3cgbmV3IEVycm9yKCJzZXRSZXF1ZXN0SGVhZGVyIGlzIGFic3RyYWN0Iik7fSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoImdldFJlc3BvbnNlSGVhZGVyIGlzIGFic3RyYWN0Iik7fSxnZXRSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoImdldFJlc3BvbnNlSGVhZGVycyBpcyBhYnN0cmFjdCIpO30sZ2V0U3RhdHVzQ29kZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiZ2V0U3RhdHVzQ29kZSBpcyBhYnN0cmFjdCIpO30sZ2V0U3RhdHVzVGV4dDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiZ2V0U3RhdHVzVGV4dCBpcyBhYnN0cmFjdCIpO30sZ2V0UmVzcG9uc2VUZXh0OmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJnZXRSZXNwb25zZVRleHQgaXMgYWJzdHJhY3QiKTt9LGdldFJlc3BvbnNlWG1sOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJnZXRSZXNwb25zZVhtbCBpcyBhYnN0cmFjdCIpO30sZ2V0RmV0Y2hlZExlbmd0aDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiZ2V0RmV0Y2hlZExlbmd0aCBpcyBhYnN0cmFjdCIpO30sX2FwcGx5U3RhdGU6ZnVuY3Rpb24odSx2KXt7fTtzd2l0Y2godSl7Y2FzZSBtOnRoaXMuZmlyZUV2ZW50KG0pO2JyZWFrO2Nhc2Ugajp0aGlzLmZpcmVFdmVudChqKTticmVhaztjYXNlIGs6dGhpcy5maXJlRXZlbnQoayk7YnJlYWs7Y2FzZSBpOnRoaXMuZmlyZUV2ZW50KGkpO2JyZWFrO2Nhc2UgaDp0aGlzLmZpcmVFdmVudChoKTticmVhaztjYXNlIGw6dGhpcy5maXJlRXZlbnQobCk7YnJlYWs7Y2FzZSBvOnRoaXMuZmlyZUV2ZW50KG8pO2JyZWFrO2Nhc2Ugbjp0aGlzLmZpcmVFdmVudChuKTticmVhazt9cmV0dXJuIHRydWU7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLnNldFJlcXVlc3RIZWFkZXJzKG51bGwpO3RoaXMuc2V0UGFyYW1ldGVycyhudWxsKTt0aGlzLnNldEZvcm1GaWVsZHMobnVsbCk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGw9Ij0iLGs9IiIsaj0iJiIsaD0iYXBwbGljYXRpb24veG1sIixnPSJhcHBsaWNhdGlvbi9qc29uIixmPSJ0ZXh0L2h0bWwiLGQ9InF4LmNsaWVudCIsYz0idGV4dGFyZWEiLGI9Il9kYXRhXyIsYT0ibG9hZCIsRz0idGV4dC9wbGFpbiIsRj0idGV4dC9qYXZhc2NyaXB0IixFPSJjb21wbGV0ZWQiLEQ9InJlYWR5c3RhdGVjaGFuZ2UiLEM9Ij8iLEI9InF4LmlvLnJlbW90ZS50cmFuc3BvcnQuSWZyYW1lIixBPSJub25lIix6PSJkaXNwbGF5Iix5PSJnZWNrbyIseD0iZnJhbWVfIixzPSJhYm9ydGVkIix0PSJwcmUiLHE9ImphdmFzY3JpcHQ6dm9pZCgwKSIscj0ic2VuZGluZyIsbz0iZm9ybSIscD0iZmFpbGVkIixtPSJtc2h0bWwiLG49ImZvcm1fIix1PSJvcGVyYSIsdj0idGltZW91dCIsdz0icXgvc3RhdGljL2JsYW5rLmdpZiI7cXguQ2xhc3MuZGVmaW5lKEIse2V4dGVuZDpxeC5pby5yZW1vdGUudHJhbnNwb3J0LkFic3RyYWN0LGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LmlvLnJlbW90ZS50cmFuc3BvcnQuQWJzdHJhY3QuY2FsbCh0aGlzKTt2YXIgSD0obmV3IERhdGUpLnZhbHVlT2YoKTt2YXIgST14K0g7dmFyIEo9bitIO3ZhciBLO2lmKHF4LmNvcmUuVmFyaWFudC5pc1NldChkLG0pKXtLPXE7fXRoaXMuX19vaD1xeC5ib20uSWZyYW1lLmNyZWF0ZSh7aWQ6SSxuYW1lOkksc3JjOkt9KTtxeC5ib20uZWxlbWVudC5TdHlsZS5zZXQodGhpcy5fX29oLHosQSk7dGhpcy5fX29pPXF4LmJvbS5FbGVtZW50LmNyZWF0ZShvLHtpZDpKLG5hbWU6Six0YXJnZXQ6SX0pO3F4LmJvbS5lbGVtZW50LlN0eWxlLnNldCh0aGlzLl9fb2kseixBKTtxeC5kb20uRWxlbWVudC5pbnNlcnRFbmQodGhpcy5fX29pLHF4LmRvbS5Ob2RlLmdldEJvZHlFbGVtZW50KGRvY3VtZW50KSk7dGhpcy5fX29qPXF4LmJvbS5FbGVtZW50LmNyZWF0ZShjLHtpZDpiLG5hbWU6Yn0pO3F4LmRvbS5FbGVtZW50Lmluc2VydEVuZCh0aGlzLl9fb2osdGhpcy5fX29pKTtxeC5kb20uRWxlbWVudC5pbnNlcnRFbmQodGhpcy5fX29oLHF4LmRvbS5Ob2RlLmdldEJvZHlFbGVtZW50KGRvY3VtZW50KSk7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmFkZExpc3RlbmVyKHRoaXMuX19vaCxhLHRoaXMuX29ubG9hZCx0aGlzKTt0aGlzLl9fb2s9cXgubGFuZy5GdW5jdGlvbi5saXN0ZW5lcih0aGlzLl9vbnJlYWR5c3RhdGVjaGFuZ2UsdGhpcyk7cXguYm9tLkV2ZW50LmFkZE5hdGl2ZUxpc3RlbmVyKHRoaXMuX19vaCxELHRoaXMuX19vayk7fSxzdGF0aWNzOntoYW5kbGVzOntzeW5jaHJvbm91czpmYWxzZSxhc3luY2hyb25vdXM6dHJ1ZSxjcm9zc0RvbWFpbjpmYWxzZSxmaWxlVXBsb2FkOnRydWUscHJvZ3JhbWF0aWNGb3JtRmllbGRzOnRydWUscmVzcG9uc2VUeXBlczpbRyxGLGcsaCxmXX0saXNTdXBwb3J0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9LF9udW1lcmljTWFwOnsidW5pbml0aWFsaXplZCI6MSwibG9hZGluZyI6MiwibG9hZGVkIjoyLCJpbnRlcmFjdGl2ZSI6MywiY29tcGxldGUiOjR9fSxtZW1iZXJzOntfX29qOm51bGwsX19vbDowLF9fb2k6bnVsbCxfX29oOm51bGwsX19vazpudWxsLHNlbmQ6ZnVuY3Rpb24oKXt2YXIgTT10aGlzLmdldE1ldGhvZCgpO3ZhciBPPXRoaXMuZ2V0VXJsKCk7dmFyIFM9dGhpcy5nZXRQYXJhbWV0ZXJzKGZhbHNlKTt2YXIgUj1bXTtmb3IodmFyIE4gaW4gUyl7dmFyIFA9U1tOXTtpZihQIGluc3RhbmNlb2YgQXJyYXkpe2Zvcih2YXIgaT0wO2k8UC5sZW5ndGg7aSsrKXtSLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KE4pK2wrZW5jb2RlVVJJQ29tcG9uZW50KFBbaV0pKTt9fWVsc2V7Ui5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChOKStsK2VuY29kZVVSSUNvbXBvbmVudChQKSk7fX1pZihSLmxlbmd0aD4wKXtPKz0oTy5pbmRleE9mKEMpPj0wP2o6QykrUi5qb2luKGopO31pZih0aGlzLmdldERhdGEoKT09PW51bGwpe3ZhciBTPXRoaXMuZ2V0UGFyYW1ldGVycyh0cnVlKTt2YXIgUj1bXTtmb3IodmFyIE4gaW4gUyl7dmFyIFA9U1tOXTtpZihQIGluc3RhbmNlb2YgQXJyYXkpe2Zvcih2YXIgaT0wO2k8UC5sZW5ndGg7aSsrKXtSLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KE4pK2wrZW5jb2RlVVJJQ29tcG9uZW50KFBbaV0pKTt9fWVsc2V7Ui5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChOKStsK2VuY29kZVVSSUNvbXBvbmVudChQKSk7fX1pZihSLmxlbmd0aD4wKXt0aGlzLnNldERhdGEoUi5qb2luKGopKTt9fXZhciBMPXRoaXMuZ2V0Rm9ybUZpZWxkcygpO2Zvcih2YXIgTiBpbiBMKXt2YXIgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGMpO1EubmFtZT1OO1EuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoTFtOXSkpO3RoaXMuX19vaS5hcHBlbmRDaGlsZChRKTt9dGhpcy5fX29pLmFjdGlvbj1PO3RoaXMuX19vaS5tZXRob2Q9TTt0aGlzLl9fb2ouYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5nZXREYXRhKCkpKTt0aGlzLl9fb2kuc3VibWl0KCk7dGhpcy5zZXRTdGF0ZShyKTt9LF9vbmxvYWQ6cXguZXZlbnQuR2xvYmFsRXJyb3Iub2JzZXJ2ZU1ldGhvZChmdW5jdGlvbihlKXtpZihxeC5ib20uY2xpZW50LkVuZ2luZS5OQU1FPT11JiZ0aGlzLmdldElmcmFtZUh0bWxDb250ZW50KCk9PWspe3JldHVybjt9aWYodGhpcy5fX29pLnNyYyl7cmV0dXJuO310aGlzLl9zd2l0Y2hSZWFkeVN0YXRlKHF4LmlvLnJlbW90ZS50cmFuc3BvcnQuSWZyYW1lLl9udW1lcmljTWFwLmNvbXBsZXRlKTt9KSxfb25yZWFkeXN0YXRlY2hhbmdlOnF4LmV2ZW50Lkdsb2JhbEVycm9yLm9ic2VydmVNZXRob2QoZnVuY3Rpb24oZSl7dGhpcy5fc3dpdGNoUmVhZHlTdGF0ZShxeC5pby5yZW1vdGUudHJhbnNwb3J0LklmcmFtZS5fbnVtZXJpY01hcFt0aGlzLl9fb2gucmVhZHlTdGF0ZV0pO30pLF9zd2l0Y2hSZWFkeVN0YXRlOmZ1bmN0aW9uKFQpe3N3aXRjaCh0aGlzLmdldFN0YXRlKCkpe2Nhc2UgRTpjYXNlIHM6Y2FzZSBwOmNhc2Ugdjp0aGlzLndhcm4oIklnbm9yZSBSZWFkeSBTdGF0ZSBDaGFuZ2UiKTtyZXR1cm47fXdoaWxlKHRoaXMuX19vbDxUKXt0aGlzLnNldFN0YXRlKHF4LmlvLnJlbW90ZS5FeGNoYW5nZS5fbmF0aXZlTWFwWysrdGhpcy5fX29sXSk7fX0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihVLFYpe30sZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oVyl7cmV0dXJuIG51bGw7fSxnZXRSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4ge307fSxnZXRTdGF0dXNDb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIDIwMDt9LGdldFN0YXR1c1RleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gazt9LGdldElmcmFtZVdpbmRvdzpmdW5jdGlvbigpe3JldHVybiBxeC5ib20uSWZyYW1lLmdldFdpbmRvdyh0aGlzLl9fb2gpO30sZ2V0SWZyYW1lRG9jdW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gcXguYm9tLklmcmFtZS5nZXREb2N1bWVudCh0aGlzLl9fb2gpO30sZ2V0SWZyYW1lQm9keTpmdW5jdGlvbigpe3JldHVybiBxeC5ib20uSWZyYW1lLmdldEJvZHkodGhpcy5fX29oKTt9LGdldElmcmFtZVRleHRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5nZXRJZnJhbWVCb2R5KCk7aWYoIVgpe3JldHVybiBudWxsO31pZighWC5maXJzdENoaWxkKXtyZXR1cm4gazt9aWYoWC5maXJzdENoaWxkLnRhZ05hbWUmJlguZmlyc3RDaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PXQpe3JldHVybiBYLmZpcnN0Q2hpbGQuaW5uZXJIVE1MO31lbHNle3JldHVybiBYLmlubmVySFRNTDt9fSxnZXRJZnJhbWVIdG1sQ29udGVudDpmdW5jdGlvbigpe3ZhciBZPXRoaXMuZ2V0SWZyYW1lQm9keSgpO3JldHVybiBZP1kuaW5uZXJIVE1MOm51bGw7fSxnZXRGZXRjaGVkTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIDA7fSxnZXRSZXNwb25zZUNvbnRlbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLmdldFN0YXRlKCkhPT1FKXt7fTtyZXR1cm4gbnVsbDt9e307dmFyIGJhPXRoaXMuZ2V0SWZyYW1lVGV4dENvbnRlbnQoKTtzd2l0Y2godGhpcy5nZXRSZXNwb25zZVR5cGUoKSl7Y2FzZSBHOnt9O3JldHVybiBiYTticmVhaztjYXNlIGY6YmE9dGhpcy5nZXRJZnJhbWVIdG1sQ29udGVudCgpO3t9O3JldHVybiBiYTticmVhaztjYXNlIGc6YmE9dGhpcy5nZXRJZnJhbWVIdG1sQ29udGVudCgpO3t9O3RyeXtyZXR1cm4gYmEmJmJhLmxlbmd0aD4wP3F4LnV0aWwuSnNvbi5wYXJzZShiYSxmYWxzZSk6bnVsbDt9Y2F0Y2goYmIpe3JldHVybiB0aGlzLmVycm9yKCJDb3VsZCBub3QgZXhlY3V0ZSBqc29uOiAoIitiYSsiKSIsYmIpO31jYXNlIEY6YmE9dGhpcy5nZXRJZnJhbWVIdG1sQ29udGVudCgpO3t9O3RyeXtyZXR1cm4gYmEmJmJhLmxlbmd0aD4wP3dpbmRvdy5ldmFsKGJhKTpudWxsO31jYXRjaChiYyl7cmV0dXJuIHRoaXMuZXJyb3IoIkNvdWxkIG5vdCBleGVjdXRlIGphdmFzY3JpcHQ6ICgiK2JhKyIpIixiYyk7fWNhc2UgaDpiYT10aGlzLmdldElmcmFtZURvY3VtZW50KCk7e307cmV0dXJuIGJhO2RlZmF1bHQ6dGhpcy53YXJuKCJObyB2YWxpZCByZXNwb25zZVR5cGUgc3BlY2lmaWVkICgiK3RoaXMuZ2V0UmVzcG9uc2VUeXBlKCkrIikhIik7cmV0dXJuIG51bGw7fX19LGRlZmVyOmZ1bmN0aW9uKCl7cXguaW8ucmVtb3RlLkV4Y2hhbmdlLnJlZ2lzdGVyVHlwZShxeC5pby5yZW1vdGUudHJhbnNwb3J0LklmcmFtZSxCKTt9LGRlc3RydWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5fX29oKXtxeC5ldmVudC5SZWdpc3RyYXRpb24ucmVtb3ZlTGlzdGVuZXIodGhpcy5fX29oLGEsdGhpcy5fb25sb2FkLHRoaXMpO3F4LmJvbS5FdmVudC5yZW1vdmVOYXRpdmVMaXN0ZW5lcih0aGlzLl9fb2gsRCx0aGlzLl9fb2spO2lmKHF4LmNvcmUuVmFyaWFudC5pc1NldChkLHkpKXt0aGlzLl9fb2guc3JjPXF4LnV0aWwuUmVzb3VyY2VNYW5hZ2VyLmdldEluc3RhbmNlKCkudG9Vcmkodyk7fXF4LmRvbS5FbGVtZW50LnJlbW92ZSh0aGlzLl9fb2gpO31pZih0aGlzLl9fb2kpe3F4LmRvbS5FbGVtZW50LnJlbW92ZSh0aGlzLl9fb2kpO310aGlzLl9fb2g9dGhpcy5fX29pPXRoaXMuX19vaj1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBjPSJxeC5ldmVudC5oYW5kbGVyLklmcmFtZSIsYj0ibG9hZCIsYT0iaWZyYW1lIjtxeC5DbGFzcy5kZWZpbmUoYyx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGltcGxlbWVudDpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLHN0YXRpY3M6e1BSSU9SSVRZOnF4LmV2ZW50LlJlZ2lzdHJhdGlvbi5QUklPUklUWV9OT1JNQUwsU1VQUE9SVEVEX1RZUEVTOntsb2FkOjF9LFRBUkdFVF9DSEVDSzpxeC5ldmVudC5JRXZlbnRIYW5kbGVyLlRBUkdFVF9ET01OT0RFLElHTk9SRV9DQU5fSEFORExFOmZhbHNlLG9uZXZlbnQ6cXguZXZlbnQuR2xvYmFsRXJyb3Iub2JzZXJ2ZU1ldGhvZChmdW5jdGlvbihkKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uZmlyZUV2ZW50KGQsYik7fSl9LG1lbWJlcnM6e2NhbkhhbmRsZUV2ZW50OmZ1bmN0aW9uKGUsZil7cmV0dXJuIGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT09YTt9LHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oZyxoLGkpe30sdW5yZWdpc3RlckV2ZW50OmZ1bmN0aW9uKGosayxsKXt9fSxkZWZlcjpmdW5jdGlvbihtKXtxeC5ldmVudC5SZWdpc3RyYXRpb24uYWRkSGFuZGxlcihtKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZT0icXguY2xpZW50IixkPSJ3ZWJraXQiLGM9ImJvZHkiLGI9ImlmcmFtZSIsYT0icXguYm9tLklmcmFtZSI7cXguQ2xhc3MuZGVmaW5lKGEse3N0YXRpY3M6e0RFRkFVTFRfQVRUUklCVVRFUzp7b25sb2FkOiJxeC5ldmVudC5oYW5kbGVyLklmcmFtZS5vbmV2ZW50KHRoaXMpIixmcmFtZUJvcmRlcjowLGZyYW1lU3BhY2luZzowLG1hcmdpbldpZHRoOjAsbWFyZ2luSGVpZ2h0OjAsaHNwYWNlOjAsdnNwYWNlOjAsYm9yZGVyOjAsYWxsb3dUcmFuc3BhcmVuY3k6dHJ1ZX0sY3JlYXRlOmZ1bmN0aW9uKGYsZyl7dmFyIGY9Zj9xeC5sYW5nLk9iamVjdC5jbG9uZShmKTp7fTt2YXIgaD1xeC5ib20uSWZyYW1lLkRFRkFVTFRfQVRUUklCVVRFUztmb3IodmFyIGkgaW4gaCl7aWYoZltpXT09bnVsbCl7ZltpXT1oW2ldO319cmV0dXJuIHF4LmJvbS5FbGVtZW50LmNyZWF0ZShiLGYsZyk7fSxnZXRXaW5kb3c6cXguY29yZS5WYXJpYW50LnNlbGVjdChlLHsibXNodG1sfGdlY2tvIjpmdW5jdGlvbihqKXt0cnl7cmV0dXJuIGouY29udGVudFdpbmRvdzt9Y2F0Y2goayl7cmV0dXJuIG51bGw7fX0sImRlZmF1bHQiOmZ1bmN0aW9uKGwpe3RyeXt2YXIgbT10aGlzLmdldERvY3VtZW50KGwpO3JldHVybiBtP20uZGVmYXVsdFZpZXc6bnVsbDt9Y2F0Y2gobil7cmV0dXJuIG51bGw7fX19KSxnZXREb2N1bWVudDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGUseyJtc2h0bWwiOmZ1bmN0aW9uKG8pe3RyeXt2YXIgcD10aGlzLmdldFdpbmRvdyhvKTtyZXR1cm4gcD9wLmRvY3VtZW50Om51bGw7fWNhdGNoKHEpe3JldHVybiBudWxsO319LCJkZWZhdWx0IjpmdW5jdGlvbihyKXt0cnl7cmV0dXJuIHIuY29udGVudERvY3VtZW50O31jYXRjaChzKXtyZXR1cm4gbnVsbDt9fX0pLGdldEJvZHk6ZnVuY3Rpb24odCl7dHJ5e3ZhciB1PXRoaXMuZ2V0RG9jdW1lbnQodCk7cmV0dXJuIHU/dS5nZXRFbGVtZW50c0J5VGFnTmFtZShjKVswXTpudWxsO31jYXRjaCh2KXtyZXR1cm4gbnVsbDt9fSxzZXRTb3VyY2U6ZnVuY3Rpb24odyx4KXt0cnl7aWYodGhpcy5nZXRXaW5kb3codykmJnF4LmRvbS5IaWVyYXJjaHkuaXNSZW5kZXJlZCh3KSl7dHJ5e2lmKHF4LmNvcmUuVmFyaWFudC5pc1NldChlLGQpJiZxeC5ib20uY2xpZW50LlBsYXRmb3JtLk1BQyl7dmFyIHk9dGhpcy5nZXRDb250ZW50V2luZG93KCk7aWYoeSl7eS5zdG9wKCk7fX10aGlzLmdldFdpbmRvdyh3KS5sb2NhdGlvbi5yZXBsYWNlKHgpO31jYXRjaCh6KXt3LnNyYz14O319ZWxzZXt3LnNyYz14O319Y2F0Y2goQSl7cXgubG9nLkxvZ2dlci53YXJuKCJJZnJhbWUgc291cmNlIGNvdWxkIG5vdCBiZSBzZXQhIik7fX0scXVlcnlDdXJyZW50VXJsOmZ1bmN0aW9uKEIpe3ZhciBDPXRoaXMuZ2V0RG9jdW1lbnQoQik7dHJ5e2lmKEMmJkMubG9jYXRpb24pe3JldHVybiBDLmxvY2F0aW9uLmhyZWY7fX1jYXRjaChEKXt9cmV0dXJuIG51bGw7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC5kb20uRWxlbWVudCI7cXguQ2xhc3MuZGVmaW5lKGEse3N0YXRpY3M6e2hhc0NoaWxkOmZ1bmN0aW9uKHBhcmVudCxiKXtyZXR1cm4gYi5wYXJlbnROb2RlPT09cGFyZW50O30saGFzQ2hpbGRyZW46ZnVuY3Rpb24oYyl7cmV0dXJuICEhYy5maXJzdENoaWxkO30saGFzQ2hpbGRFbGVtZW50czpmdW5jdGlvbihkKXtkPWQuZmlyc3RDaGlsZDt3aGlsZShkKXtpZihkLm5vZGVUeXBlPT09MSl7cmV0dXJuIHRydWU7fWQ9ZC5uZXh0U2libGluZzt9cmV0dXJuIGZhbHNlO30sZ2V0UGFyZW50RWxlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlO30saXNJbkRvbTpmdW5jdGlvbihmLGcpe2lmKCFnKXtnPXdpbmRvdzt9dmFyIGg9Zy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShmLm5vZGVOYW1lKTtmb3IodmFyIGk9MCxsPWgubGVuZ3RoO2k8bDtpKyspe2lmKGhbaV09PT1mKXtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9LGluc2VydEF0OmZ1bmN0aW9uKGoscGFyZW50LGspe3ZhciBtPXBhcmVudC5jaGlsZE5vZGVzW2tdO2lmKG0pe3BhcmVudC5pbnNlcnRCZWZvcmUoaixtKTt9ZWxzZXtwYXJlbnQuYXBwZW5kQ2hpbGQoaik7fXJldHVybiB0cnVlO30saW5zZXJ0QmVnaW46ZnVuY3Rpb24obixwYXJlbnQpe2lmKHBhcmVudC5maXJzdENoaWxkKXt0aGlzLmluc2VydEJlZm9yZShuLHBhcmVudC5maXJzdENoaWxkKTt9ZWxzZXtwYXJlbnQuYXBwZW5kQ2hpbGQobik7fX0saW5zZXJ0RW5kOmZ1bmN0aW9uKG8scGFyZW50KXtwYXJlbnQuYXBwZW5kQ2hpbGQobyk7fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24ocCxxKXtxLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHAscSk7cmV0dXJuIHRydWU7fSxpbnNlcnRBZnRlcjpmdW5jdGlvbihyLHMpe3ZhciBwYXJlbnQ9cy5wYXJlbnROb2RlO2lmKHM9PXBhcmVudC5sYXN0Q2hpbGQpe3BhcmVudC5hcHBlbmRDaGlsZChyKTt9ZWxzZXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUocixzLm5leHRTaWJsaW5nKTt9cmV0dXJuIHRydWU7fSxyZW1vdmU6ZnVuY3Rpb24odCl7aWYoIXQucGFyZW50Tm9kZSl7cmV0dXJuIGZhbHNlO310LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCk7cmV0dXJuIHRydWU7fSxyZW1vdmVDaGlsZDpmdW5jdGlvbih1LHBhcmVudCl7aWYodS5wYXJlbnROb2RlIT09cGFyZW50KXtyZXR1cm4gZmFsc2U7fXBhcmVudC5yZW1vdmVDaGlsZCh1KTtyZXR1cm4gdHJ1ZTt9LHJlbW92ZUNoaWxkQXQ6ZnVuY3Rpb24odixwYXJlbnQpe3ZhciB3PXBhcmVudC5jaGlsZE5vZGVzW3ZdO2lmKCF3KXtyZXR1cm4gZmFsc2U7fXBhcmVudC5yZW1vdmVDaGlsZCh3KTtyZXR1cm4gdHJ1ZTt9LHJlcGxhY2VDaGlsZDpmdW5jdGlvbih4LHkpe2lmKCF5LnBhcmVudE5vZGUpe3JldHVybiBmYWxzZTt9eS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh4LHkpO3JldHVybiB0cnVlO30scmVwbGFjZUF0OmZ1bmN0aW9uKHosQSxwYXJlbnQpe3ZhciBCPXBhcmVudC5jaGlsZE5vZGVzW0FdO2lmKCFCKXtyZXR1cm4gZmFsc2U7fXBhcmVudC5yZXBsYWNlQ2hpbGQoeixCKTtyZXR1cm4gdHJ1ZTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIHI9IiYiLHE9Ij0iLHA9Ij8iLG89ImFwcGxpY2F0aW9uL2pzb24iLG49ImNvbXBsZXRlZCIsbT0idGV4dC9wbGFpbiIsbD0idGV4dC9qYXZhc2NyaXB0IixrPSJxeC5pby5yZW1vdGUudHJhbnNwb3J0LlNjcmlwdCIsaj0iIixoPSJfU2NyaXB0VHJhbnNwb3J0X2RhdGEiLGM9InNjcmlwdCIsZz0idGltZW91dCIsZj0iX1NjcmlwdFRyYW5zcG9ydF8iLGI9Il9TY3JpcHRUcmFuc3BvcnRfaWQiLGE9ImFib3J0ZWQiLGU9InV0Zi04IixkPSJmYWlsZWQiO3F4LkNsYXNzLmRlZmluZShrLHtleHRlbmQ6cXguaW8ucmVtb3RlLnRyYW5zcG9ydC5BYnN0cmFjdCxjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC5pby5yZW1vdGUudHJhbnNwb3J0LkFic3RyYWN0LmNhbGwodGhpcyk7dmFyIHM9KytxeC5pby5yZW1vdGUudHJhbnNwb3J0LlNjcmlwdC5fX3BnO2lmKHM+PTIwMDAwMDAwMDApe3F4LmlvLnJlbW90ZS50cmFuc3BvcnQuU2NyaXB0Ll9fcGc9cz0xO310aGlzLl9fcGg9bnVsbDt0aGlzLl9fcGc9czt9LHN0YXRpY3M6e19fcGc6MCxfaW5zdGFuY2VSZWdpc3RyeTp7fSxTY3JpcHRUcmFuc3BvcnRfUFJFRklYOmYsU2NyaXB0VHJhbnNwb3J0X0lEX1BBUkFNOmIsU2NyaXB0VHJhbnNwb3J0X0RBVEFfUEFSQU06aCxoYW5kbGVzOntzeW5jaHJvbm91czpmYWxzZSxhc3luY2hyb25vdXM6dHJ1ZSxjcm9zc0RvbWFpbjp0cnVlLGZpbGVVcGxvYWQ6ZmFsc2UscHJvZ3JhbWF0aWNGb3JtRmllbGRzOmZhbHNlLHJlc3BvbnNlVHlwZXM6W20sbCxvXX0saXNTdXBwb3J0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9LF9udW1lcmljTWFwOnsidW5pbml0aWFsaXplZCI6MSwibG9hZGluZyI6MiwibG9hZGVkIjoyLCJpbnRlcmFjdGl2ZSI6MywiY29tcGxldGUiOjR9LF9yZXF1ZXN0RmluaXNoZWQ6cXguZXZlbnQuR2xvYmFsRXJyb3Iub2JzZXJ2ZU1ldGhvZChmdW5jdGlvbih0LGNvbnRlbnQpe3ZhciB1PXF4LmlvLnJlbW90ZS50cmFuc3BvcnQuU2NyaXB0Ll9pbnN0YW5jZVJlZ2lzdHJ5W3RdO2lmKHU9PW51bGwpe3t9O31lbHNle3UuX3Jlc3BvbnNlQ29udGVudD1jb250ZW50O3UuX3N3aXRjaFJlYWR5U3RhdGUocXguaW8ucmVtb3RlLnRyYW5zcG9ydC5TY3JpcHQuX251bWVyaWNNYXAuY29tcGxldGUpO319KX0sbWVtYmVyczp7X19waTowLF9fcGg6bnVsbCxfX3BnOm51bGwsc2VuZDpmdW5jdGlvbigpe3ZhciB4PXRoaXMuZ2V0VXJsKCk7eCs9KHguaW5kZXhPZihwKT49MD9yOnApK3F4LmlvLnJlbW90ZS50cmFuc3BvcnQuU2NyaXB0LlNjcmlwdFRyYW5zcG9ydF9JRF9QQVJBTStxK3RoaXMuX19wZzt2YXIgQT10aGlzLmdldFBhcmFtZXRlcnMoKTt2YXIgej1bXTtmb3IodmFyIHcgaW4gQSl7aWYody5pbmRleE9mKHF4LmlvLnJlbW90ZS50cmFuc3BvcnQuU2NyaXB0LlNjcmlwdFRyYW5zcG9ydF9QUkVGSVgpPT0wKXt0aGlzLmVycm9yKCJJbGxlZ2FsIHBhcmFtZXRlciBuYW1lLiBUaGUgZm9sbG93aW5nIHByZWZpeCBpcyB1c2VkIGludGVybmFsbHkgYnkgcW9veGRvbyk6ICIrcXguaW8ucmVtb3RlLnRyYW5zcG9ydC5TY3JpcHQuU2NyaXB0VHJhbnNwb3J0X1BSRUZJWCk7fXZhciB5PUFbd107aWYoeSBpbnN0YW5jZW9mIEFycmF5KXtmb3IodmFyIGk9MDtpPHkubGVuZ3RoO2krKyl7ei5wdXNoKGVuY29kZVVSSUNvbXBvbmVudCh3KStxK2VuY29kZVVSSUNvbXBvbmVudCh5W2ldKSk7fX1lbHNle3oucHVzaChlbmNvZGVVUklDb21wb25lbnQodykrcStlbmNvZGVVUklDb21wb25lbnQoeSkpO319aWYoei5sZW5ndGg+MCl7eCs9cit6LmpvaW4ocik7fXZhciB2PXRoaXMuZ2V0RGF0YSgpO2lmKHYhPW51bGwpe3grPXIrcXguaW8ucmVtb3RlLnRyYW5zcG9ydC5TY3JpcHQuU2NyaXB0VHJhbnNwb3J0X0RBVEFfUEFSQU0rcStlbmNvZGVVUklDb21wb25lbnQodik7fXF4LmlvLnJlbW90ZS50cmFuc3BvcnQuU2NyaXB0Ll9pbnN0YW5jZVJlZ2lzdHJ5W3RoaXMuX19wZ109dGhpczt0aGlzLl9fcGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjKTt0aGlzLl9fcGguY2hhcnNldD1lO3RoaXMuX19waC5zcmM9eDt7fTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX19waCk7fSxfc3dpdGNoUmVhZHlTdGF0ZTpmdW5jdGlvbihCKXtzd2l0Y2godGhpcy5nZXRTdGF0ZSgpKXtjYXNlIG46Y2FzZSBhOmNhc2UgZDpjYXNlIGc6dGhpcy53YXJuKCJJZ25vcmUgUmVhZHkgU3RhdGUgQ2hhbmdlIik7cmV0dXJuO313aGlsZSh0aGlzLl9fcGk8Qil7dGhpcy5zZXRTdGF0ZShxeC5pby5yZW1vdGUuRXhjaGFuZ2UuX25hdGl2ZU1hcFsrK3RoaXMuX19waV0pO319LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oQyxEKXt9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKEUpe3JldHVybiBudWxsO30sZ2V0UmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHt9O30sZ2V0U3RhdHVzQ29kZTpmdW5jdGlvbigpe3JldHVybiAyMDA7fSxnZXRTdGF0dXNUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGo7fSxnZXRGZXRjaGVkTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIDA7fSxnZXRSZXNwb25zZUNvbnRlbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLmdldFN0YXRlKCkhPT1uKXt7fTtyZXR1cm4gbnVsbDt9e307c3dpdGNoKHRoaXMuZ2V0UmVzcG9uc2VUeXBlKCkpe2Nhc2UgbTpjYXNlIG86Y2FzZSBsOnt9O3ZhciBGPXRoaXMuX3Jlc3BvbnNlQ29udGVudDtyZXR1cm4gKEY9PT0wPzA6KEZ8fG51bGwpKTtkZWZhdWx0OnRoaXMud2FybigiTm8gdmFsaWQgcmVzcG9uc2VUeXBlIHNwZWNpZmllZCAoIit0aGlzLmdldFJlc3BvbnNlVHlwZSgpKyIpISIpO3JldHVybiBudWxsO319fSxkZWZlcjpmdW5jdGlvbigpe3F4LmlvLnJlbW90ZS5FeGNoYW5nZS5yZWdpc3RlclR5cGUocXguaW8ucmVtb3RlLnRyYW5zcG9ydC5TY3JpcHQsayk7fSxkZXN0cnVjdDpmdW5jdGlvbigpe2lmKHRoaXMuX19waCl7ZGVsZXRlIHF4LmlvLnJlbW90ZS50cmFuc3BvcnQuU2NyaXB0Ll9pbnN0YW5jZVJlZ2lzdHJ5W3RoaXMuX19wZ107ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLl9fcGgpO310aGlzLl9fcGg9dGhpcy5fcmVzcG9uc2VDb250ZW50PW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIG09ImZhaWxlZCIsaz0iY29tcGxldGVkIixqPSI9IixoPSJhYm9ydGVkIixnPSIiLGY9InNlbmRpbmciLGQ9IiYiLGM9ImNvbmZpZ3VyZWQiLGI9InRpbWVvdXQiLGE9ImFwcGxpY2F0aW9uL3htbCIsSj0icXguaW8ucmVtb3RlLnRyYW5zcG9ydC5YbWxIdHRwIixJPSJhcHBsaWNhdGlvbi9qc29uIixIPSJ0ZXh0L2h0bWwiLEc9InF4LmNsaWVudCIsRj0icmVjZWl2aW5nIixFPSJ0ZXh0L3BsYWluIixEPSJ0ZXh0L2phdmFzY3JpcHQiLEM9Ij8iLEI9ImNyZWF0ZWQiLEE9IkJvb2xlYW4iLHU9J1JlZmVyZXInLHY9J0Jhc2ljICcscj0iXG48L3ByZT4iLHQ9InN0cmluZyIscD0nQXV0aG9yaXphdGlvbicscT0iPHByZT5Db3VsZCBub3QgZXhlY3V0ZSBqc29uOiBcbiIsbj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLG89JzonLHc9InBhcnNlZXJyb3IiLHg9ImZpbGU6Iix6PSJ3ZWJraXQiLHk9Im9iamVjdCI7cXguQ2xhc3MuZGVmaW5lKEose2V4dGVuZDpxeC5pby5yZW1vdGUudHJhbnNwb3J0LkFic3RyYWN0LHN0YXRpY3M6e2hhbmRsZXM6e3N5bmNocm9ub3VzOnRydWUsYXN5bmNocm9ub3VzOnRydWUsY3Jvc3NEb21haW46ZmFsc2UsZmlsZVVwbG9hZDpmYWxzZSxwcm9ncmFtYXRpY0Zvcm1GaWVsZHM6ZmFsc2UscmVzcG9uc2VUeXBlczpbRSxELEksYSxIXX0scmVxdWVzdE9iamVjdHM6W10scmVxdWVzdE9iamVjdENvdW50OjAsY3JlYXRlUmVxdWVzdE9iamVjdDpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KEcseyJkZWZhdWx0IjpmdW5jdGlvbigpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3Q7fSwibXNodG1sIjpmdW5jdGlvbigpe2lmKHdpbmRvdy5BY3RpdmVYT2JqZWN0JiZxeC54bWwuRG9jdW1lbnQuWE1MSFRUUCl7cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KHF4LnhtbC5Eb2N1bWVudC5YTUxIVFRQKTt9aWYod2luZG93LlhNTEh0dHBSZXF1ZXN0KXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0O319fSksaXNTdXBwb3J0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gISF0aGlzLmNyZWF0ZVJlcXVlc3RPYmplY3QoKTt9fSxwcm9wZXJ0aWVzOntwYXJzZUpzb246e2NoZWNrOkEsaW5pdDp0cnVlfX0sbWVtYmVyczp7X19uaDpmYWxzZSxfX25pOjAsX19uajpudWxsLGdldFJlcXVlc3Q6ZnVuY3Rpb24oKXtpZih0aGlzLl9fbmo9PT1udWxsKXt0aGlzLl9fbmo9cXguaW8ucmVtb3RlLnRyYW5zcG9ydC5YbWxIdHRwLmNyZWF0ZVJlcXVlc3RPYmplY3QoKTt0aGlzLl9fbmoub25yZWFkeXN0YXRlY2hhbmdlPXF4LmxhbmcuRnVuY3Rpb24uYmluZCh0aGlzLl9vbnJlYWR5c3RhdGVjaGFuZ2UsdGhpcyk7fXJldHVybiB0aGlzLl9fbmo7fSxzZW5kOmZ1bmN0aW9uKCl7dGhpcy5fX25pPTA7dmFyIE89dGhpcy5nZXRSZXF1ZXN0KCk7dmFyIEs9dGhpcy5nZXRNZXRob2QoKTt2YXIgUj10aGlzLmdldEFzeW5jaHJvbm91cygpO3ZhciBRPXRoaXMuZ2V0VXJsKCk7dmFyIE09KHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbD09PXgmJiEoL15odHRwKHMpezAsMX1cOi8udGVzdChRKSkpO3RoaXMuX19uaD1NO3ZhciBVPXRoaXMuZ2V0UGFyYW1ldGVycyhmYWxzZSk7dmFyIFM9W107Zm9yKHZhciBMIGluIFUpe3ZhciBQPVVbTF07aWYoUCBpbnN0YW5jZW9mIEFycmF5KXtmb3IodmFyIGk9MDtpPFAubGVuZ3RoO2krKyl7Uy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChMKStqK2VuY29kZVVSSUNvbXBvbmVudChQW2ldKSk7fX1lbHNle1MucHVzaChlbmNvZGVVUklDb21wb25lbnQoTCkraitlbmNvZGVVUklDb21wb25lbnQoUCkpO319aWYoUy5sZW5ndGg+MCl7USs9KFEuaW5kZXhPZihDKT49MD9kOkMpK1Muam9pbihkKTt9aWYodGhpcy5nZXREYXRhKCk9PT1udWxsKXt2YXIgVT10aGlzLmdldFBhcmFtZXRlcnModHJ1ZSk7dmFyIFM9W107Zm9yKHZhciBMIGluIFUpe3ZhciBQPVVbTF07aWYoUCBpbnN0YW5jZW9mIEFycmF5KXtmb3IodmFyIGk9MDtpPFAubGVuZ3RoO2krKyl7Uy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChMKStqK2VuY29kZVVSSUNvbXBvbmVudChQW2ldKSk7fX1lbHNle1MucHVzaChlbmNvZGVVUklDb21wb25lbnQoTCkraitlbmNvZGVVUklDb21wb25lbnQoUCkpO319aWYoUy5sZW5ndGg+MCl7dGhpcy5zZXREYXRhKFMuam9pbihkKSk7fX12YXIgVD1mdW5jdGlvbihWKXt2YXIgYmI9bjt2YXIgYmY9Zzt2YXIgWSxYLFc7dmFyIGJjLGJkLGJlLGJhO3ZhciBpPTA7ZG97WT1WLmNoYXJDb2RlQXQoaSsrKTtYPVYuY2hhckNvZGVBdChpKyspO1c9Vi5jaGFyQ29kZUF0KGkrKyk7YmM9WT4+MjtiZD0oKFkmMyk8PDQpfChYPj40KTtiZT0oKFgmMTUpPDwyKXwoVz4+Nik7YmE9VyY2MztpZihpc05hTihYKSl7YmU9YmE9NjQ7fWVsc2UgaWYoaXNOYU4oVykpe2JhPTY0O31iZis9YmIuY2hhckF0KGJjKStiYi5jaGFyQXQoYmQpK2JiLmNoYXJBdChiZSkrYmIuY2hhckF0KGJhKTt9d2hpbGUoaTxWLmxlbmd0aCk7cmV0dXJuIGJmO307dHJ5e2lmKHRoaXMuZ2V0VXNlcm5hbWUoKSl7aWYodGhpcy5nZXRVc2VCYXNpY0h0dHBBdXRoKCkpe08ub3BlbihLLFEsUik7Ty5zZXRSZXF1ZXN0SGVhZGVyKHAsditUKHRoaXMuZ2V0VXNlcm5hbWUoKStvK3RoaXMuZ2V0UGFzc3dvcmQoKSkpO31lbHNle08ub3BlbihLLFEsUix0aGlzLmdldFVzZXJuYW1lKCksdGhpcy5nZXRQYXNzd29yZCgpKTt9fWVsc2V7Ty5vcGVuKEssUSxSKTt9fWNhdGNoKGJnKXt0aGlzLmVycm9yKCJGYWlsZWQgd2l0aCBleGNlcHRpb246ICIrYmcpO3RoaXMuZmFpbGVkKCk7cmV0dXJuO31pZighcXguY29yZS5WYXJpYW50LmlzU2V0KEcseikpe08uc2V0UmVxdWVzdEhlYWRlcih1LHdpbmRvdy5sb2NhdGlvbi5ocmVmKTt9dmFyIE49dGhpcy5nZXRSZXF1ZXN0SGVhZGVycygpO2Zvcih2YXIgTCBpbiBOKXtPLnNldFJlcXVlc3RIZWFkZXIoTCxOW0xdKTt9dHJ5e3t9O08uc2VuZCh0aGlzLmdldERhdGEoKSk7fWNhdGNoKGJoKXtpZihNKXt0aGlzLmZhaWxlZExvY2FsbHkoKTt9ZWxzZXt0aGlzLmVycm9yKCJGYWlsZWQgdG8gc2VuZCBkYXRhOiAiK2JoLCJzZW5kIik7dGhpcy5mYWlsZWQoKTt9cmV0dXJuO31pZighUil7dGhpcy5fb25yZWFkeXN0YXRlY2hhbmdlKCk7fX0sZmFpbGVkTG9jYWxseTpmdW5jdGlvbigpe2lmKHRoaXMuZ2V0U3RhdGUoKT09PW0pe3JldHVybjt9dGhpcy53YXJuKCJDb3VsZCBub3QgbG9hZCBmcm9tIGZpbGU6ICIrdGhpcy5nZXRVcmwoKSk7dGhpcy5mYWlsZWQoKTt9LF9vbnJlYWR5c3RhdGVjaGFuZ2U6cXguZXZlbnQuR2xvYmFsRXJyb3Iub2JzZXJ2ZU1ldGhvZChmdW5jdGlvbihlKXtzd2l0Y2godGhpcy5nZXRTdGF0ZSgpKXtjYXNlIGs6Y2FzZSBoOmNhc2UgbTpjYXNlIGI6e307cmV0dXJuO312YXIgYmk9dGhpcy5nZXRSZWFkeVN0YXRlKCk7aWYoYmk9PTQpe2lmKCFxeC5pby5yZW1vdGUuRXhjaGFuZ2Uud2FzU3VjY2Vzc2Z1bCh0aGlzLmdldFN0YXR1c0NvZGUoKSxiaSx0aGlzLl9fbmgpKXtpZih0aGlzLmdldFN0YXRlKCk9PT1jKXt0aGlzLnNldFN0YXRlKGYpO310aGlzLmZhaWxlZCgpO3JldHVybjt9fXdoaWxlKHRoaXMuX19uaTxiaSl7dGhpcy5zZXRTdGF0ZShxeC5pby5yZW1vdGUuRXhjaGFuZ2UuX25hdGl2ZU1hcFsrK3RoaXMuX19uaV0pO319KSxnZXRSZWFkeVN0YXRlOmZ1bmN0aW9uKCl7dmFyIGJqPW51bGw7dHJ5e2JqPXRoaXMuZ2V0UmVxdWVzdCgpLnJlYWR5U3RhdGU7fWNhdGNoKGJrKXt9cmV0dXJuIGJqO30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihibCxibSl7dGhpcy5nZXRSZXF1ZXN0SGVhZGVycygpW2JsXT1ibTt9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGJuKXt2YXIgYm89bnVsbDt0cnl7Ym89dGhpcy5nZXRSZXF1ZXN0KCkuZ2V0UmVzcG9uc2VIZWFkZXIoYm4pfHxudWxsO31jYXRjaChicCl7fXJldHVybiBibzt9LGdldFN0cmluZ1Jlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3ZhciBicj1udWxsO3RyeXt2YXIgYnE9dGhpcy5nZXRSZXF1ZXN0KCkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7aWYoYnEpe2JyPWJxO319Y2F0Y2goYnMpe31yZXR1cm4gYnI7fSxnZXRSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXt2YXIgYnY9dGhpcy5nZXRTdHJpbmdSZXNwb25zZUhlYWRlcnMoKTt2YXIgYnc9e307aWYoYnYpe3ZhciBidD1idi5zcGxpdCgvW1xyXG5dKy9nKTtmb3IodmFyIGk9MCxsPWJ0Lmxlbmd0aDtpPGw7aSsrKXt2YXIgYnU9YnRbaV0ubWF0Y2goL14oW146XSspXHMqOlxzKiguKykkL2kpO2lmKGJ1KXtid1tidVsxXV09YnVbMl07fX19cmV0dXJuIGJ3O30sZ2V0U3RhdHVzQ29kZTpmdW5jdGlvbigpe3ZhciBieD0tMTt0cnl7Yng9dGhpcy5nZXRSZXF1ZXN0KCkuc3RhdHVzO31jYXRjaChieSl7fXJldHVybiBieDt9LGdldFN0YXR1c1RleHQ6ZnVuY3Rpb24oKXt2YXIgYno9Zzt0cnl7Yno9dGhpcy5nZXRSZXF1ZXN0KCkuc3RhdHVzVGV4dDt9Y2F0Y2goYkEpe31yZXR1cm4gYno7fSxnZXRSZXNwb25zZVRleHQ6ZnVuY3Rpb24oKXt2YXIgYkI9bnVsbDt0cnl7YkI9dGhpcy5nZXRSZXF1ZXN0KCkucmVzcG9uc2VUZXh0O31jYXRjaChiQyl7YkI9bnVsbDt9cmV0dXJuIGJCO30sZ2V0UmVzcG9uc2VYbWw6ZnVuY3Rpb24oKXt2YXIgYkY9bnVsbDt2YXIgYkQ9dGhpcy5nZXRTdGF0dXNDb2RlKCk7dmFyIGJFPXRoaXMuZ2V0UmVhZHlTdGF0ZSgpO2lmKHF4LmlvLnJlbW90ZS5FeGNoYW5nZS53YXNTdWNjZXNzZnVsKGJELGJFLHRoaXMuX19uaCkpe3RyeXtiRj10aGlzLmdldFJlcXVlc3QoKS5yZXNwb25zZVhNTDt9Y2F0Y2goYkcpe319aWYodHlwZW9mIGJGPT15JiZiRiE9bnVsbCl7aWYoIWJGLmRvY3VtZW50RWxlbWVudCl7dmFyIHM9U3RyaW5nKHRoaXMuZ2V0UmVxdWVzdCgpLnJlc3BvbnNlVGV4dCkucmVwbGFjZSgvPFw/eG1sW15cP10qXD8+LyxnKTtiRi5sb2FkWE1MKHMpO31pZighYkYuZG9jdW1lbnRFbGVtZW50KXt0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgRG9jdW1lbnQgRWxlbWVudCEiKTt9aWYoYkYuZG9jdW1lbnRFbGVtZW50LnRhZ05hbWU9PXcpe3Rocm93IG5ldyBFcnJvcigiWE1MLUZpbGUgaXMgbm90IHdlbGwtZm9ybWVkISIpO319ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIHdhcyBub3QgYSB2YWxpZCB4bWwgZG9jdW1lbnQgWyIrdGhpcy5nZXRSZXF1ZXN0KCkucmVzcG9uc2VUZXh0KyJdIik7fXJldHVybiBiRjt9LGdldEZldGNoZWRMZW5ndGg6ZnVuY3Rpb24oKXt2YXIgYkg9dGhpcy5nZXRSZXNwb25zZVRleHQoKTtyZXR1cm4gdHlwZW9mIGJIPT10P2JILmxlbmd0aDowO30sZ2V0UmVzcG9uc2VDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGJJPXRoaXMuZ2V0U3RhdGUoKTtpZihiSSE9PWsmJmJJIT1tKXt7fTtyZXR1cm4gbnVsbDt9e307dmFyIGJLPXRoaXMuZ2V0UmVzcG9uc2VUZXh0KCk7aWYoYkk9PW0pe3t9O3JldHVybiBiSzt9c3dpdGNoKHRoaXMuZ2V0UmVzcG9uc2VUeXBlKCkpe2Nhc2UgRTpjYXNlIEg6e307cmV0dXJuIGJLO2Nhc2UgSTp7fTt0cnl7aWYoYksmJmJLLmxlbmd0aD4wKXt2YXIgYko7aWYodGhpcy5nZXRQYXJzZUpzb24oKSl7Yko9cXgudXRpbC5Kc29uLnBhcnNlKGJLLGZhbHNlKTtiSj0oYko9PT0wPzA6KGJKfHxudWxsKSk7fWVsc2V7Yko9Yks7fXJldHVybiBiSjt9ZWxzZXtyZXR1cm4gbnVsbDt9fWNhdGNoKGJMKXt0aGlzLmVycm9yKCJDb3VsZCBub3QgZXhlY3V0ZSBqc29uOiBbIitiSysiXSIsYkwpO3JldHVybiBxK2JLK3I7fWNhc2UgRDp7fTt0cnl7aWYoYksmJmJLLmxlbmd0aD4wKXt2YXIgYko9d2luZG93LmV2YWwoYkspO3JldHVybiAoYko9PT0wPzA6KGJKfHxudWxsKSk7fWVsc2V7cmV0dXJuIG51bGw7fX1jYXRjaChiTSl7dGhpcy5lcnJvcigiQ291bGQgbm90IGV4ZWN1dGUgamF2YXNjcmlwdDogWyIrYksrIl0iLGJNKTtyZXR1cm4gbnVsbDt9Y2FzZSBhOmJLPXRoaXMuZ2V0UmVzcG9uc2VYbWwoKTt7fTtyZXR1cm4gKGJLPT09MD8wOihiS3x8bnVsbCkpO2RlZmF1bHQ6dGhpcy53YXJuKCJObyB2YWxpZCByZXNwb25zZVR5cGUgc3BlY2lmaWVkICgiK3RoaXMuZ2V0UmVzcG9uc2VUeXBlKCkrIikhIik7cmV0dXJuIG51bGw7fX0sX2FwcGx5U3RhdGU6ZnVuY3Rpb24oYk4sYk8pe3t9O3N3aXRjaChiTil7Y2FzZSBCOnRoaXMuZmlyZUV2ZW50KEIpO2JyZWFrO2Nhc2UgYzp0aGlzLmZpcmVFdmVudChjKTticmVhaztjYXNlIGY6dGhpcy5maXJlRXZlbnQoZik7YnJlYWs7Y2FzZSBGOnRoaXMuZmlyZUV2ZW50KEYpO2JyZWFrO2Nhc2Ugazp0aGlzLmZpcmVFdmVudChrKTticmVhaztjYXNlIG06dGhpcy5maXJlRXZlbnQobSk7YnJlYWs7Y2FzZSBoOnRoaXMuZ2V0UmVxdWVzdCgpLmFib3J0KCk7dGhpcy5maXJlRXZlbnQoaCk7YnJlYWs7Y2FzZSBiOnRoaXMuZ2V0UmVxdWVzdCgpLmFib3J0KCk7dGhpcy5maXJlRXZlbnQoYik7YnJlYWs7fX19LGRlZmVyOmZ1bmN0aW9uKCl7cXguaW8ucmVtb3RlLkV4Y2hhbmdlLnJlZ2lzdGVyVHlwZShxeC5pby5yZW1vdGUudHJhbnNwb3J0LlhtbEh0dHAsSik7fSxkZXN0cnVjdDpmdW5jdGlvbigpe3ZhciBiUD10aGlzLmdldFJlcXVlc3QoKTtpZihiUCl7YlAub25yZWFkeXN0YXRlY2hhbmdlPXF4LmxhbmcuRnVuY3Rpb24uZW1wdHk7c3dpdGNoKGJQLnJlYWR5U3RhdGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmJQLmFib3J0KCk7fX10aGlzLl9fbmo9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYz0iSW50ZWdlciIsYj0iT2JqZWN0IixhPSJxeC5pby5yZW1vdGUuUmVzcG9uc2UiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXguZXZlbnQudHlwZS5FdmVudCxwcm9wZXJ0aWVzOntzdGF0ZTp7Y2hlY2s6YyxudWxsYWJsZTp0cnVlfSxzdGF0dXNDb2RlOntjaGVjazpjLG51bGxhYmxlOnRydWV9LGNvbnRlbnQ6e251bGxhYmxlOnRydWV9LHJlc3BvbnNlSGVhZGVyczp7Y2hlY2s6YixudWxsYWJsZTp0cnVlfX0sbWVtYmVyczp7Y2xvbmU6ZnVuY3Rpb24oZCl7dmFyIGU9cXguZXZlbnQudHlwZS5FdmVudC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzLGQpO2Uuc2V0VHlwZSh0aGlzLmdldFR5cGUoKSk7ZS5zZXRTdGF0ZSh0aGlzLmdldFN0YXRlKCkpO2Uuc2V0U3RhdHVzQ29kZSh0aGlzLmdldFN0YXR1c0NvZGUoKSk7ZS5zZXRDb250ZW50KHRoaXMuZ2V0Q29udGVudCgpKTtlLnNldFJlc3BvbnNlSGVhZGVycyh0aGlzLmdldFJlc3BvbnNlSGVhZGVycygpKTtyZXR1cm4gZTt9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGYpe3ZhciBnPXRoaXMuZ2V0UmVzcG9uc2VIZWFkZXJzKCk7aWYoZyl7cmV0dXJuIGdbZl18fG51bGw7fXJldHVybiBudWxsO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0icGFuZSIsYT0icXgudWkuY29udGFpbmVyLlNjcm9sbCI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC51aS5jb3JlLnNjcm9sbC5BYnN0cmFjdFNjcm9sbEFyZWEsaW5jbHVkZTpbcXgudWkuY29yZS5NQ29udGVudFBhZGRpbmddLGNvbnN0cnVjdDpmdW5jdGlvbihjb250ZW50KXtxeC51aS5jb3JlLnNjcm9sbC5BYnN0cmFjdFNjcm9sbEFyZWEuY2FsbCh0aGlzKTtpZihjb250ZW50KXt0aGlzLmFkZChjb250ZW50KTt9fSxtZW1iZXJzOnthZGQ6ZnVuY3Rpb24oYyl7dGhpcy5nZXRDaGlsZENvbnRyb2woYikuYWRkKGMpO30scmVtb3ZlOmZ1bmN0aW9uKGQpe3RoaXMuZ2V0Q2hpbGRDb250cm9sKGIpLnJlbW92ZShkKTt9LGdldENoaWxkcmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250cm9sKGIpLmdldENoaWxkcmVuKCk7fSxfZ2V0Q29udGVudFBhZGRpbmdUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRyb2woYik7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBrPSJsZWdlbmR2aWV3LWxhYmVsLWltcG9ydGFudCIsaj0iUGFja2FnZS9DbGFzcy9NaXhpbi9JbnRlcmZhY2UgaXMgbm90IGZ1bGx5IGRvY3VtZW50ZWQiLGg9IklDT05fUFJPUEVSVFlfUFVCIixnPSJUaGVtZWFibGUgUHJvcGVydHkiLGY9IkNoaWxkIENvbnRyb2wiLGU9IklDT05fQ0xBU1NfU0lOR0xFVE9OIixkPSJQdWJsaWMgUHJvcGVydHkiLGM9IlByaXZhdGUgTWV0aG9kIixiPSJQdWJsaWMgTWV0aG9kIixhPSJJQ09OX0NISUxEQ09OVFJPTCIsYmQ9InN0cmluZyIsYmM9IklDT05fSU5URVJGQUNFIixiYj0nPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO2NvbG9yOiAjNzE5M2I5OyI+ZGVwcmVjYXRlZDwvc3Bhbj4nLGJhPSJjZW50ZXIiLFk9IklDT05fRVZFTlQiLFg9ImFwaXZpZXdlci51aS5MZWdlbmRWaWV3IixXPSJTaW5nbGV0b24gQ2xhc3MiLFY9IlByaXZhdGUgUHJvcGVydHkiLFU9Ik9WRVJMQVlfV0FSTiIsVD0iSUNPTl9QQUNLQUdFIixyPSJNZXRob2QvUHJvcGVydHkvRXZlbnQgaXMgaW5oZXJpdGVkIGZyb20gb25lIG9mIHRoZSBzdXBlciBjbGFzc2VzIixzPSJsZWdlbmQiLHA9IklDT05fUFJPUEVSVFlfUFJJViIscT0ibWlkZGxlIixuPSJJQ09OX0JMQU5LIixvPSJfX1RiIixsPSJJQ09OX1BST1BFUlRZX1BST1QiLG09IklDT05fQ0xBU1NfQUJTVFJBQ1QiLHY9IklDT05fQ0xBU1MiLHc9IklDT05fUFJPUEVSVFlfUFVCX1RIRU1FQUJMRSIsRT0iUHJvdGVjdGVkIE1ldGhvZCIsQz0iQ29uc3RhbnQiLEw9Ik1ldGhvZC9Qcm9wZXJ0eS9FdmVudCBpcyBub3QgZnVsbHkgZG9jdW1lbnRlZCIsRz0iT1ZFUkxBWV9PVkVSUklEREVOIixQPSJBYnN0cmFjdCBDbGFzcyIsTj0iT1ZFUkxBWV9NSVhJTiIseT0iQ2xhc3MiLFM9IkludGVyZmFjZSIsUj0iSUNPTl9NRVRIT0RfUFVCIixRPSJFdmVudCIseD0iTWl4aW4iLEE9IlBhY2thZ2UiLEI9IlByb3RlY3RlZCBQcm9wZXJ0eSIsRD0iT1ZFUkxBWV9FUlJPUiIsRj0iSUNPTl9NSVhJTiIsSD0ibGVnZW5kdmlldy1sYWJlbCIsTT0iSUNPTl9DTEFTU19TVEFUSUMiLE89Ik1ldGhvZC9Qcm9wZXJ0eSBvdmVycmlkZXMgdGhlIE1ldGhvZC9Qcm9wZXJ0eSBvZiB0aGUgc3VwZXIgY2xhc3MiLHQ9IklDT05fTUVUSE9EX1BSSVYiLHU9IlN0YXRpYyBDbGFzcyIsej0iTWV0aG9kL1Byb3BlcnR5IGlzIGluY2x1ZGVkIGZyb20gYSBtaXhpbiIsSz0iSUNPTl9NRVRIT0RfUFJPVCIsSj0iT1ZFUkxBWV9JTkhFUklURUQiLEk9IklDT05fQ09OU1RBTlQiO3F4LkNsYXNzLmRlZmluZShYLHtleHRlbmQ6cXgudWkuY29udGFpbmVyLlNjcm9sbCxjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC51aS5jb250YWluZXIuU2Nyb2xsLmNhbGwodGhpcyk7dGhpcy5zZXRBcHBlYXJhbmNlKHMpO3ZhciBiZT1uZXcgcXgudWkubGF5b3V0LkdyaWQoMTAsMTApO2JlLnNldENvbHVtbldpZHRoKDEsMTUwKTtiZS5zZXRDb2x1bW5GbGV4KDEsMSk7dmFyIGNvbnRlbnQ9bmV3IHF4LnVpLmNvbnRhaW5lci5Db21wb3NpdGUoYmUpO3RoaXMuX19UYj1be2ljb246VCxkZXNjOkF9LHtpY29uOnYsZGVzYzp5fSx7aWNvbjpNLGRlc2M6dX0se2ljb246bSxkZXNjOlB9LHtpY29uOmUsZGVzYzpXfSx7aWNvbjpiYyxkZXNjOlN9LHtpY29uOkYsZGVzYzp4fSx7aWNvbjphLGRlc2M6Zn0se2ljb246UixkZXNjOmJ9LHtpY29uOkssZGVzYzpFfSx7aWNvbjp0LGRlc2M6Y30se2ljb246aCxkZXNjOmR9LHtpY29uOmwsZGVzYzpCfSx7aWNvbjpwLGRlc2M6Vn0se2ljb246dyxkZXNjOmd9LHtpY29uOlksZGVzYzpRfSx7aWNvbjpJLGRlc2M6Q30se2ljb246bixkZXNjOmJifSx7aWNvbjpVLGRlc2M6an0se2ljb246RCxkZXNjOkx9LHtpY29uOk4sZGVzYzp6fSx7aWNvbjpKLGRlc2M6cn0se2ljb246RyxkZXNjOk99XTt2YXIgbGVuZ3RoPXRoaXMuX19UYi5sZW5ndGg7dmFyIGJnLGJmO2Zvcih2YXIgaT0wO2k8bGVuZ3RoO2krKyl7Ymc9dGhpcy5fX1RiW2ldO2JmPWFwaXZpZXdlci5UcmVlVXRpbC5pY29uTmFtZVRvSWNvblBhdGgoYmcuaWNvbik7aWYodHlwZW9mIChiZikhPWJkKXtiZj1iZlswXTt9Y29udGVudC5hZGQobmV3IHF4LnVpLmJhc2ljLkltYWdlKGJmKS5zZXQoe2FsaWduWDpiYSxhbGlnblk6cX0pLHtyb3c6aSxjb2x1bW46MH0pO2NvbnRlbnQuYWRkKG5ldyBxeC51aS5iYXNpYy5MYWJlbChiZy5kZXNjKS5zZXQoe3JpY2g6dHJ1ZSxhcHBlYXJhbmNlOihpPDE3KT9rOkh9KSx7cm93OmksY29sdW1uOjF9KTt9dGhpcy5hZGQoY29udGVudCk7fSxtZW1iZXJzOntfX1RiOm51bGx9LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fZGlzcG9zZU1hcChvKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZD0iX2FwcGx5RHluYW1pYyIsYz0iY2hhbmdlU2VsZWN0aW9uIixiPSJCb29sZWFuIixhPSJxeC51aS5jb250YWluZXIuU3RhY2siO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXgudWkuY29yZS5XaWRnZXQsaW1wbGVtZW50OnF4LnVpLmNvcmUuSVNpbmdsZVNlbGVjdGlvbixpbmNsdWRlOnF4LnVpLmNvcmUuTVNpbmdsZVNlbGVjdGlvbkhhbmRsaW5nLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LnVpLmNvcmUuV2lkZ2V0LmNhbGwodGhpcyk7dGhpcy5fc2V0TGF5b3V0KG5ldyBxeC51aS5sYXlvdXQuR3Jvdyk7dGhpcy5hZGRMaXN0ZW5lcihjLHRoaXMuX19udSx0aGlzKTt9LHByb3BlcnRpZXM6e2R5bmFtaWM6e2NoZWNrOmIsaW5pdDpmYWxzZSxhcHBseTpkfX0sbWVtYmVyczp7X2FwcGx5RHluYW1pYzpmdW5jdGlvbihmKXt2YXIgaD10aGlzLl9nZXRDaGlsZHJlbigpO3ZhciBnPXRoaXMuZ2V0U2VsZWN0aW9uKClbMF07dmFyIGo7Zm9yKHZhciBpPTAsbD1oLmxlbmd0aDtpPGw7aSsrKXtqPWhbaV07aWYoaiE9Zyl7aWYoZil7aFtpXS5leGNsdWRlKCk7fWVsc2V7aFtpXS5oaWRlKCk7fX19fSxfZ2V0SXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRDaGlsZHJlbigpO30sX2lzQWxsb3dFbXB0eVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0cnVlO30sX2lzSXRlbVNlbGVjdGFibGU6ZnVuY3Rpb24oayl7cmV0dXJuIHRydWU7fSxfX251OmZ1bmN0aW9uKGUpe3ZhciBtPWUuZ2V0T2xkRGF0YSgpWzBdO3ZhciBuPWUuZ2V0RGF0YSgpWzBdO2lmKG0pe2lmKHRoaXMuaXNEeW5hbWljKCkpe20uZXhjbHVkZSgpO31lbHNle20uaGlkZSgpO319aWYobil7bi5zaG93KCk7fX0sYWRkOmZ1bmN0aW9uKG8pe3RoaXMuX2FkZChvKTt2YXIgcD10aGlzLmdldFNlbGVjdGlvbigpWzBdO2lmKCFwKXt0aGlzLnNldFNlbGVjdGlvbihbb10pO31lbHNlIGlmKHAhPT1vKXtpZih0aGlzLmlzRHluYW1pYygpKXtvLmV4Y2x1ZGUoKTt9ZWxzZXtvLmhpZGUoKTt9fX0scmVtb3ZlOmZ1bmN0aW9uKHEpe3RoaXMuX3JlbW92ZShxKTtpZih0aGlzLmdldFNlbGVjdGlvbigpWzBdPT09cSl7dmFyIHI9dGhpcy5fZ2V0Q2hpbGRyZW4oKVswXTtpZihyKXt0aGlzLnNldFNlbGVjdGlvbihbcl0pO31lbHNle3RoaXMucmVzZXRTZWxlY3Rpb24oKTt9fX0saW5kZXhPZjpmdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5faW5kZXhPZihzKTt9LGdldENoaWxkcmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldENoaWxkcmVuKCk7fSxwcmV2aW91czpmdW5jdGlvbigpe3ZhciB2PXRoaXMuZ2V0U2VsZWN0aW9uKClbMF07dmFyIHQ9dGhpcy5faW5kZXhPZih2KS0xO3ZhciB3PXRoaXMuX2dldENoaWxkcmVuKCk7aWYodDwwKXt0PXcubGVuZ3RoLTE7fXZhciB1PXdbdF07dGhpcy5zZXRTZWxlY3Rpb24oW3VdKTt9LG5leHQ6ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmdldFNlbGVjdGlvbigpWzBdO3ZhciB4PXRoaXMuX2luZGV4T2YoeSkrMTt2YXIgej10aGlzLl9nZXRDaGlsZHJlbigpO3ZhciBBPXpbeF18fHpbMF07dGhpcy5zZXRTZWxlY3Rpb24oW0FdKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGs9InByZXNzZWQiLGo9ImFiYW5kb25lZCIsaT0iaG92ZXJlZCIsaD0iQm9vbGVhbiIsZz0iU3BhY2UiLGY9InVuZGV0ZXJtaW5lZCIsZD0iRW50ZXIiLGM9ImNoZWNrZWQiLGI9Im1vdXNlZG93biIsYT0iX2FwcGx5VHJpU3RhdGUiLHc9Im1vdXNlb3V0Iix2PSJjaGFuZ2VWYWx1ZSIsdT0ia2V5ZG93biIsdD0iX2FwcGx5R3JvdXAiLHM9ImJ1dHRvbiIscj0iZXhlY3V0ZSIscT0icXgudWkuZm9ybS5SYWRpb0dyb3VwIixwPSJfYXBwbHlWYWx1ZSIsbz0icXgudWkuZm9ybS5Ub2dnbGVCdXR0b24iLG49Im1vdXNlb3ZlciIsbD0ia2V5dXAiLG09Im1vdXNldXAiO3F4LkNsYXNzLmRlZmluZShvLHtleHRlbmQ6cXgudWkuYmFzaWMuQXRvbSxpbmNsdWRlOltxeC51aS5jb3JlLk1FeGVjdXRhYmxlXSxpbXBsZW1lbnQ6W3F4LnVpLmZvcm0uSUJvb2xlYW5Gb3JtLHF4LnVpLmZvcm0uSUV4ZWN1dGFibGUscXgudWkuZm9ybS5JUmFkaW9JdGVtXSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oeCx5KXtxeC51aS5iYXNpYy5BdG9tLmNhbGwodGhpcyx4LHkpO3RoaXMuYWRkTGlzdGVuZXIobix0aGlzLl9vbk1vdXNlT3Zlcik7dGhpcy5hZGRMaXN0ZW5lcih3LHRoaXMuX29uTW91c2VPdXQpO3RoaXMuYWRkTGlzdGVuZXIoYix0aGlzLl9vbk1vdXNlRG93bik7dGhpcy5hZGRMaXN0ZW5lcihtLHRoaXMuX29uTW91c2VVcCk7dGhpcy5hZGRMaXN0ZW5lcih1LHRoaXMuX29uS2V5RG93bik7dGhpcy5hZGRMaXN0ZW5lcihsLHRoaXMuX29uS2V5VXApO3RoaXMuYWRkTGlzdGVuZXIocix0aGlzLl9vbkV4ZWN1dGUsdGhpcyk7fSxwcm9wZXJ0aWVzOnthcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0OnN9LGZvY3VzYWJsZTp7cmVmaW5lOnRydWUsaW5pdDp0cnVlfSx2YWx1ZTp7Y2hlY2s6aCxudWxsYWJsZTp0cnVlLGV2ZW50OnYsYXBwbHk6cCxpbml0OmZhbHNlfSxncm91cDp7Y2hlY2s6cSxudWxsYWJsZTp0cnVlLGFwcGx5OnR9LHRyaVN0YXRlOntjaGVjazpoLGFwcGx5OmEsbnVsbGFibGU6dHJ1ZSxpbml0Om51bGx9fSxtZW1iZXJzOntfYXBwbHlHcm91cDpmdW5jdGlvbih6LEEpe2lmKEEpe0EucmVtb3ZlKHRoaXMpO31pZih6KXt6LmFkZCh0aGlzKTt9fSxfYXBwbHlWYWx1ZTpmdW5jdGlvbihCLEMpe0I/dGhpcy5hZGRTdGF0ZShjKTp0aGlzLnJlbW92ZVN0YXRlKGMpO2lmKHRoaXMuaXNUcmlTdGF0ZSgpKXtpZihCPT09bnVsbCl7dGhpcy5hZGRTdGF0ZShmKTt9ZWxzZSBpZihDPT09bnVsbCl7dGhpcy5yZW1vdmVTdGF0ZShmKTt9fX0sX2FwcGx5VHJpU3RhdGU6ZnVuY3Rpb24oRCxFKXt0aGlzLl9hcHBseVZhbHVlKHRoaXMuZ2V0VmFsdWUoKSk7fSxfb25FeGVjdXRlOmZ1bmN0aW9uKGUpe3RoaXMudG9nZ2xlVmFsdWUoKTt9LF9vbk1vdXNlT3ZlcjpmdW5jdGlvbihlKXtpZihlLmdldFRhcmdldCgpIT09dGhpcyl7cmV0dXJuO310aGlzLmFkZFN0YXRlKGkpO2lmKHRoaXMuaGFzU3RhdGUoaikpe3RoaXMucmVtb3ZlU3RhdGUoaik7dGhpcy5hZGRTdGF0ZShrKTt9fSxfb25Nb3VzZU91dDpmdW5jdGlvbihlKXtpZihlLmdldFRhcmdldCgpIT09dGhpcyl7cmV0dXJuO310aGlzLnJlbW92ZVN0YXRlKGkpO2lmKHRoaXMuaGFzU3RhdGUoaykpe2lmKCF0aGlzLmdldFZhbHVlKCkpe3RoaXMucmVtb3ZlU3RhdGUoayk7fXRoaXMuYWRkU3RhdGUoaik7fX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKGUpe2lmKCFlLmlzTGVmdFByZXNzZWQoKSl7cmV0dXJuO310aGlzLmNhcHR1cmUoKTt0aGlzLnJlbW92ZVN0YXRlKGopO3RoaXMuYWRkU3RhdGUoayk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9LF9vbk1vdXNlVXA6ZnVuY3Rpb24oZSl7dGhpcy5yZWxlYXNlQ2FwdHVyZSgpO2lmKHRoaXMuaGFzU3RhdGUoaikpe3RoaXMucmVtb3ZlU3RhdGUoaik7fWVsc2UgaWYodGhpcy5oYXNTdGF0ZShrKSl7dGhpcy5leGVjdXRlKCk7fXRoaXMucmVtb3ZlU3RhdGUoayk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9LF9vbktleURvd246ZnVuY3Rpb24oZSl7c3dpdGNoKGUuZ2V0S2V5SWRlbnRpZmllcigpKXtjYXNlIGQ6Y2FzZSBnOnRoaXMucmVtb3ZlU3RhdGUoaik7dGhpcy5hZGRTdGF0ZShrKTtlLnN0b3BQcm9wYWdhdGlvbigpO319LF9vbktleVVwOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmhhc1N0YXRlKGspKXtyZXR1cm47fXN3aXRjaChlLmdldEtleUlkZW50aWZpZXIoKSl7Y2FzZSBkOmNhc2UgZzp0aGlzLnJlbW92ZVN0YXRlKGopO3RoaXMuZXhlY3V0ZSgpO3RoaXMucmVtb3ZlU3RhdGUoayk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBlPSJpbmhlcml0IixkPSJ0b29sYmFyLWJ1dHRvbiIsYz0icXgudWkudG9vbGJhci5DaGVja0JveCIsYj0ia2V5ZG93biIsYT0ia2V5dXAiO3F4LkNsYXNzLmRlZmluZShjLHtleHRlbmQ6cXgudWkuZm9ybS5Ub2dnbGVCdXR0b24sY29uc3RydWN0OmZ1bmN0aW9uKGYsZyl7cXgudWkuZm9ybS5Ub2dnbGVCdXR0b24uY2FsbCh0aGlzLGYsZyk7dGhpcy5yZW1vdmVMaXN0ZW5lcihiLHRoaXMuX29uS2V5RG93bik7dGhpcy5yZW1vdmVMaXN0ZW5lcihhLHRoaXMuX29uS2V5VXApO30scHJvcGVydGllczp7YXBwZWFyYW5jZTp7cmVmaW5lOnRydWUsaW5pdDpkfSxzaG93OntyZWZpbmU6dHJ1ZSxpbml0OmV9LGZvY3VzYWJsZTp7cmVmaW5lOnRydWUsaW5pdDpmYWxzZX19fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYT0icXgudWkudG9vbGJhci5SYWRpb0J1dHRvbiI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC51aS50b29sYmFyLkNoZWNrQm94LGluY2x1ZGU6W3F4LnVpLmZvcm0uTU1vZGVsUHJvcGVydHldLGltcGxlbWVudDpbcXgudWkuZm9ybS5JTW9kZWwscXgudWkuZm9ybS5JUmFkaW9JdGVtXSxtZW1iZXJzOntfYXBwbHlWYWx1ZTpmdW5jdGlvbihiLGMpe3F4LnVpLnRvb2xiYXIuQ2hlY2tCb3gucHJvdG90eXBlLl9hcHBseVZhbHVlLmNhbGwodGhpcyxiLGMpO2lmKGIpe3ZhciBkPXRoaXMuZ2V0R3JvdXAoKTtpZihkKXtkLnNldFNlbGVjdGlvbihbdGhpc10pO319fSxfb25FeGVjdXRlOmZ1bmN0aW9uKGUpe3ZhciBmPXRoaXMuZ2V0R3JvdXAoKTtpZihmJiZmLmdldEFsbG93RW1wdHlTZWxlY3Rpb24oKXx8IWYpe3RoaXMudG9nZ2xlVmFsdWUoKTt9ZWxzZXt0aGlzLnNldFZhbHVlKHRydWUpO319fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGU9ImFycm93IixkPSJxeC51aS50b29sYmFyLk1lbnVCdXR0b24iLGM9IkJvb2xlYW4iLGI9Il9hcHBseVNob3dBcnJvdyIsYT0idG9vbGJhci1tZW51YnV0dG9uIjtxeC5DbGFzcy5kZWZpbmUoZCx7ZXh0ZW5kOnF4LnVpLm1lbnViYXIuQnV0dG9uLHByb3BlcnRpZXM6e2FwcGVhcmFuY2U6e3JlZmluZTp0cnVlLGluaXQ6YX0sc2hvd0Fycm93OntjaGVjazpjLGluaXQ6ZmFsc2UsdGhlbWVhYmxlOnRydWUsYXBwbHk6Yn19LG1lbWJlcnM6e19jcmVhdGVDaGlsZENvbnRyb2xJbXBsOmZ1bmN0aW9uKGYsZyl7dmFyIGg7c3dpdGNoKGYpe2Nhc2UgZTpoPW5ldyBxeC51aS5iYXNpYy5JbWFnZSgpO2guc2V0QW5vbnltb3VzKHRydWUpO3RoaXMuX2FkZEF0KGgsMTApO2JyZWFrO31yZXR1cm4gaHx8cXgudWkubWVudWJhci5CdXR0b24ucHJvdG90eXBlLl9jcmVhdGVDaGlsZENvbnRyb2xJbXBsLmNhbGwodGhpcyxmKTt9LF9hcHBseVNob3dBcnJvdzpmdW5jdGlvbihpLGope2lmKGkpe3RoaXMuX3Nob3dDaGlsZENvbnRyb2woZSk7fWVsc2V7dGhpcy5fZXhjbHVkZUNoaWxkQ29udHJvbChlKTt9fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBqPSJjaGVja2VkIixpPSJxeC51aS5mb3JtLlJhZGlvR3JvdXAiLGg9IkJvb2xlYW4iLGc9Im1lbnUtcmFkaW9idXR0b24iLGY9Il9hcHBseVZhbHVlIixkPSJxeC51aS5tZW51LlJhZGlvQnV0dG9uIixjPSJjaGFuZ2VWYWx1ZSIsYj0iX2FwcGx5R3JvdXAiLGE9ImV4ZWN1dGUiO3F4LkNsYXNzLmRlZmluZShkLHtleHRlbmQ6cXgudWkubWVudS5BYnN0cmFjdEJ1dHRvbixpbmNsdWRlOltxeC51aS5mb3JtLk1Nb2RlbFByb3BlcnR5XSxpbXBsZW1lbnQ6W3F4LnVpLmZvcm0uSVJhZGlvSXRlbSxxeC51aS5mb3JtLklCb29sZWFuRm9ybSxxeC51aS5mb3JtLklNb2RlbF0sY29uc3RydWN0OmZ1bmN0aW9uKGssbCl7cXgudWkubWVudS5BYnN0cmFjdEJ1dHRvbi5jYWxsKHRoaXMpO2lmKGshPW51bGwpe3RoaXMuc2V0TGFiZWwoayk7fWlmKGwhPW51bGwpe3RoaXMuc2V0TWVudShsKTt9dGhpcy5hZGRMaXN0ZW5lcihhLHRoaXMuX29uRXhlY3V0ZSx0aGlzKTt9LHByb3BlcnRpZXM6e2FwcGVhcmFuY2U6e3JlZmluZTp0cnVlLGluaXQ6Z30sdmFsdWU6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZSxldmVudDpjLGFwcGx5OmYsaW5pdDpmYWxzZX0sZ3JvdXA6e2NoZWNrOmksbnVsbGFibGU6dHJ1ZSxhcHBseTpifX0sbWVtYmVyczp7X2FwcGx5VmFsdWU6ZnVuY3Rpb24obSxuKXttP3RoaXMuYWRkU3RhdGUoaik6dGhpcy5yZW1vdmVTdGF0ZShqKTt9LF9hcHBseUdyb3VwOmZ1bmN0aW9uKG8scCl7aWYocCl7cC5yZW1vdmUodGhpcyk7fWlmKG8pe28uYWRkKHRoaXMpO319LF9vbkV4ZWN1dGU6ZnVuY3Rpb24oZSl7dGhpcy5zZXRWYWx1ZSh0cnVlKTt9LF9vbk1vdXNlVXA6ZnVuY3Rpb24oZSl7aWYoZS5pc0xlZnRQcmVzc2VkKCkpe3RoaXMuZXhlY3V0ZSgpO31xeC51aS5tZW51Lk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5oaWRlQWxsKCk7fSxfb25LZXlQcmVzczpmdW5jdGlvbihlKXt0aGlzLmV4ZWN1dGUoKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIHg9InBhbmUiLHc9Imxhc3RUYWIiLHY9InBhZ2UiLHU9ImJhciIsdD0iZmlyc3RUYWIiLHM9InJpZ2h0IixyPSJidXR0b24iLHE9ImJvdHRvbSIscD0ibGVmdCIsbz0iY2xvc2UiLGY9InRvcCIsbj0iY2hhbmdlU2VsZWN0aW9uIixqPSJ0YWJ2aWV3IixjPSJ2ZXJ0aWNhbCIsYj0iaG9yaXpvbnRhbCIsaD0iX2FwcGx5QmFyUG9zaXRpb24iLGc9ImJlZm9yZUNoYW5nZVNlbGVjdGlvbiIsaz0iX19EUSIsYT0icXgudWkudGFidmlldy5UYWJWaWV3IixtPSJjbG9zZS1idXR0b24iLGQ9InF4LmV2ZW50LnR5cGUuRGF0YSI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC51aS5jb3JlLldpZGdldCxpbXBsZW1lbnQ6cXgudWkuY29yZS5JU2luZ2xlU2VsZWN0aW9uLGluY2x1ZGU6W3F4LnVpLmNvcmUuTUNvbnRlbnRQYWRkaW5nXSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oeSl7cXgudWkuY29yZS5XaWRnZXQuY2FsbCh0aGlzKTt0aGlzLl9fRFA9e3RvcDoiYmFyVG9wIixyaWdodDoiYmFyUmlnaHQiLGJvdHRvbToiYmFyQm90dG9tIixsZWZ0OiJiYXJMZWZ0In07dGhpcy5fY3JlYXRlQ2hpbGRDb250cm9sKHUpO3RoaXMuX2NyZWF0ZUNoaWxkQ29udHJvbCh4KTt2YXIgej10aGlzLl9fRFE9bmV3IHF4LnVpLmZvcm0uUmFkaW9Hcm91cDt6LnNldFdyYXAoZmFsc2UpO3ouYWRkTGlzdGVuZXIobix0aGlzLl9vbkNoYW5nZVNlbGVjdGlvbix0aGlzKTtpZih5IT1udWxsKXt0aGlzLnNldEJhclBvc2l0aW9uKHkpO31lbHNle3RoaXMuaW5pdEJhclBvc2l0aW9uKCk7fX0sZXZlbnRzOnsiY2hhbmdlU2VsZWN0aW9uIjpkfSxwcm9wZXJ0aWVzOnthcHBlYXJhbmNlOntyZWZpbmU6dHJ1ZSxpbml0Omp9LGJhclBvc2l0aW9uOntjaGVjazpbcCxzLGYscV0saW5pdDpmLGFwcGx5Omh9fSxtZW1iZXJzOntfX0RROm51bGwsX2NyZWF0ZUNoaWxkQ29udHJvbEltcGw6ZnVuY3Rpb24oQSxCKXt2YXIgQztzd2l0Y2goQSl7Y2FzZSB1OkM9bmV3IHF4LnVpLmNvbnRhaW5lci5TbGlkZUJhcigpO0Muc2V0WkluZGV4KDEwKTt0aGlzLl9hZGQoQyk7YnJlYWs7Y2FzZSB4OkM9bmV3IHF4LnVpLmNvbnRhaW5lci5TdGFjaztDLnNldFpJbmRleCg1KTt0aGlzLl9hZGQoQyx7ZmxleDoxfSk7YnJlYWs7fXJldHVybiBDfHxxeC51aS5jb3JlLldpZGdldC5wcm90b3R5cGUuX2NyZWF0ZUNoaWxkQ29udHJvbEltcGwuY2FsbCh0aGlzLEEpO30sX2dldENvbnRlbnRQYWRkaW5nVGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250cm9sKHgpO30sYWRkOmZ1bmN0aW9uKEQpe3t9O3ZhciBFPUQuZ2V0QnV0dG9uKCk7dmFyIEY9dGhpcy5nZXRDaGlsZENvbnRyb2wodSk7dmFyIEg9dGhpcy5nZXRDaGlsZENvbnRyb2woeCk7RC5leGNsdWRlKCk7Ri5hZGQoRSk7SC5hZGQoRCk7dGhpcy5fX0RRLmFkZChFKTtELmFkZFN0YXRlKHRoaXMuX19EUFt0aGlzLmdldEJhclBvc2l0aW9uKCldKTtELmFkZFN0YXRlKHcpO3ZhciBHPXRoaXMuZ2V0Q2hpbGRyZW4oKTtpZihHWzBdPT1EKXtELmFkZFN0YXRlKHQpO31lbHNle0dbRy5sZW5ndGgtMl0ucmVtb3ZlU3RhdGUodyk7fUQuYWRkTGlzdGVuZXIobyx0aGlzLl9vblBhZ2VDbG9zZSx0aGlzKTt9LHJlbW92ZTpmdW5jdGlvbihJKXt2YXIgTj10aGlzLmdldENoaWxkQ29udHJvbCh4KTt2YXIgTD10aGlzLmdldENoaWxkQ29udHJvbCh1KTt2YXIgSz1JLmdldEJ1dHRvbigpO3ZhciBNPU4uZ2V0Q2hpbGRyZW4oKTtpZih0aGlzLmdldFNlbGVjdGlvbigpWzBdPT1JKXt2YXIgSj1NLmluZGV4T2YoSSk7aWYoSj09MCl7aWYoTVsxXSl7dGhpcy5zZXRTZWxlY3Rpb24oW01bMV1dKTt9ZWxzZXt0aGlzLnJlc2V0U2VsZWN0aW9uKCk7fX1lbHNle3RoaXMuc2V0U2VsZWN0aW9uKFtNW0otMV1dKTt9fUwucmVtb3ZlKEspO04ucmVtb3ZlKEkpO3RoaXMuX19EUS5yZW1vdmUoSyk7SS5yZW1vdmVTdGF0ZSh0aGlzLl9fRFBbdGhpcy5nZXRCYXJQb3NpdGlvbigpXSk7aWYoSS5oYXNTdGF0ZSh0KSl7SS5yZW1vdmVTdGF0ZSh0KTtpZihNWzBdKXtNWzBdLmFkZFN0YXRlKHQpO319aWYoSS5oYXNTdGF0ZSh3KSl7SS5yZW1vdmVTdGF0ZSh3KTtpZihNLmxlbmd0aD4wKXtNW00ubGVuZ3RoLTFdLmFkZFN0YXRlKHcpO319SS5yZW1vdmVMaXN0ZW5lcihvLHRoaXMuX29uUGFnZUNsb3NlLHRoaXMpO30sZ2V0Q2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRyb2woeCkuZ2V0Q2hpbGRyZW4oKTt9LGluZGV4T2Y6ZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250cm9sKHgpLmluZGV4T2YoTyk7fSxfX0RQOm51bGwsX2FwcGx5QmFyUG9zaXRpb246ZnVuY3Rpb24oUCxRKXt2YXIgUj10aGlzLmdldENoaWxkQ29udHJvbCh1KTt2YXIgVz1QPT1wfHxQPT1zO3ZhciBVPVA9PXN8fFA9PXE7dmFyIFY9Vz9xeC51aS5sYXlvdXQuSEJveDpxeC51aS5sYXlvdXQuVkJveDt2YXIgWT10aGlzLl9nZXRMYXlvdXQoKTtpZihZJiZZIGluc3RhbmNlb2YgVil7fWVsc2V7dGhpcy5fc2V0TGF5b3V0KFk9bmV3IFYpO31ZLnNldFJldmVyc2VkKFUpO1Iuc2V0T3JpZW50YXRpb24oVz9jOmIpO3ZhciBYPXRoaXMuZ2V0Q2hpbGRyZW4oKTtpZihRKXt2YXIgUz10aGlzLl9fRFBbUV07Ui5yZW1vdmVTdGF0ZShTKTtmb3IodmFyIGk9MCxsPVgubGVuZ3RoO2k8bDtpKyspe1hbaV0ucmVtb3ZlU3RhdGUoUyk7fX1pZihQKXt2YXIgVD10aGlzLl9fRFBbUF07Ui5hZGRTdGF0ZShUKTtmb3IodmFyIGk9MCxsPVgubGVuZ3RoO2k8bDtpKyspe1hbaV0uYWRkU3RhdGUoVCk7fX19LGdldFNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciBiYT10aGlzLl9fRFEuZ2V0U2VsZWN0aW9uKCk7dmFyIGJiPVtdO2Zvcih2YXIgaT0wO2k8YmEubGVuZ3RoO2krKyl7YmIucHVzaChiYVtpXS5nZXRVc2VyRGF0YSh2KSk7fXJldHVybiBiYjt9LHNldFNlbGVjdGlvbjpmdW5jdGlvbihiYyl7dmFyIGJkPVtdO2Zvcih2YXIgaT0wO2k8YmMubGVuZ3RoO2krKyl7YmQucHVzaChiY1tpXS5nZXRDaGlsZENvbnRyb2wocikpO310aGlzLl9fRFEuc2V0U2VsZWN0aW9uKGJkKTt9LHJlc2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5fX0RRLnJlc2V0U2VsZWN0aW9uKCk7fSxpc1NlbGVjdGVkOmZ1bmN0aW9uKGJlKXt2YXIgYmY9YmUuZ2V0Q2hpbGRDb250cm9sKHIpO3JldHVybiB0aGlzLl9fRFEuaXNTZWxlY3RlZChiZik7fSxpc1NlbGVjdGlvbkVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19EUS5pc1NlbGVjdGlvbkVtcHR5KCk7fSxnZXRTZWxlY3RhYmxlczpmdW5jdGlvbihiZyl7dmFyIGJoPXRoaXMuX19EUS5nZXRTZWxlY3RhYmxlcyhiZyk7dmFyIGJpPVtdO2Zvcih2YXIgaT0wO2k8YmgubGVuZ3RoO2krKyl7YmkucHVzaChiaFtpXS5nZXRVc2VyRGF0YSh2KSk7fXJldHVybiBiaTt9LF9vbkNoYW5nZVNlbGVjdGlvbjpmdW5jdGlvbihlKXt2YXIgYm49dGhpcy5nZXRDaGlsZENvbnRyb2woeCk7dmFyIGJrPWUuZ2V0RGF0YSgpWzBdO3ZhciBibT1lLmdldE9sZERhdGEoKVswXTt2YXIgYmo9W107dmFyIGJsPVtdO2lmKGJrKXtiaj1bYmsuZ2V0VXNlckRhdGEodildO2JuLnNldFNlbGVjdGlvbihiaik7YmsuZm9jdXMoKTt0aGlzLnNjcm9sbENoaWxkSW50b1ZpZXcoYmssbnVsbCxudWxsLGZhbHNlKTt9ZWxzZXtibi5yZXNldFNlbGVjdGlvbigpO31pZihibSl7Ymw9W2JtLmdldFVzZXJEYXRhKHYpXTt9dGhpcy5maXJlRGF0YUV2ZW50KG4sYmosYmwpO30sX29uQmVmb3JlQ2hhbmdlU2VsZWN0aW9uOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpcmVOb25CdWJibGluZ0V2ZW50KGcscXguZXZlbnQudHlwZS5FdmVudCxbZmFsc2UsdHJ1ZV0pKXtlLnByZXZlbnREZWZhdWx0KCk7fX0sX29uUmFkaW9DaGFuZ2VTZWxlY3Rpb246ZnVuY3Rpb24oZSl7dmFyIGJvPWUuZ2V0RGF0YSgpWzBdO2lmKGJvKXt0aGlzLnNldFNlbGVjdGlvbihbYm8uZ2V0VXNlckRhdGEodildKTt9ZWxzZXt0aGlzLnJlc2V0U2VsZWN0aW9uKCk7fX0sX29uUGFnZUNsb3NlOmZ1bmN0aW9uKGUpe3ZhciBicT1lLmdldFRhcmdldCgpO3ZhciBicD1icS5nZXRCdXR0b24oKS5nZXRDaGlsZENvbnRyb2wobSk7YnAucmVzZXQoKTt0aGlzLnJlbW92ZShicSk7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlT2JqZWN0cyhrKTt0aGlzLl9fRFA9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgaz0ic2xpZGVyIixqPSJzcGxpdHRlciIsaT0iaG9yaXpvbnRhbCIsaD0icHgiLGc9InZlcnRpY2FsIixmPSJrbm9iIixkPSJtb3VzZWRvd24iLGM9Im1vdXNlb3V0IixiPSJJbnRlZ2VyIixhPSJoZWlnaHQiLEQ9Im1vdXNlbW92ZSIsQz0ibW92ZSIsQj0ibWF4SGVpZ2h0IixBPSJyZXNpemUiLHo9IndpZHRoIix3PSJfYXBwbHlPcmllbnRhdGlvbiIsdj0iX2FwcGx5T2Zmc2V0Iix1PSJzcGxpdHBhbmUiLHQ9InF4LnVpLnNwbGl0cGFuZS5QYW5lIixzPSJ0b3AiLHE9Im1pbkhlaWdodCIscj0ibW91c2V1cCIsbz0ibWluV2lkdGgiLHA9ImFwcGVhciIsbT0ibG9zZWNhcHR1cmUiLG49ImxlZnQiLGw9Im1heFdpZHRoIjtxeC5DbGFzcy5kZWZpbmUodCx7ZXh0ZW5kOnF4LnVpLmNvcmUuV2lkZ2V0LGNvbnN0cnVjdDpmdW5jdGlvbihFKXtxeC51aS5jb3JlLldpZGdldC5jYWxsKHRoaXMpO3RoaXMuX19tVD1bXTtpZihFKXt0aGlzLnNldE9yaWVudGF0aW9uKEUpO31lbHNle3RoaXMuaW5pdE9yaWVudGF0aW9uKCk7fXRoaXMuX19uYy5hZGRMaXN0ZW5lcihkLHRoaXMuX29uTW91c2VEb3duLHRoaXMpO3RoaXMuX19uYy5hZGRMaXN0ZW5lcihyLHRoaXMuX29uTW91c2VVcCx0aGlzKTt0aGlzLl9fbmMuYWRkTGlzdGVuZXIoRCx0aGlzLl9vbk1vdXNlTW92ZSx0aGlzKTt0aGlzLl9fbmMuYWRkTGlzdGVuZXIoYyx0aGlzLl9vbk1vdXNlT3V0LHRoaXMpO3RoaXMuX19uYy5hZGRMaXN0ZW5lcihtLHRoaXMuX29uTW91c2VVcCx0aGlzKTt9LHByb3BlcnRpZXM6e2FwcGVhcmFuY2U6e3JlZmluZTp0cnVlLGluaXQ6dX0sb2Zmc2V0OntjaGVjazpiLGluaXQ6NixhcHBseTp2fSxvcmllbnRhdGlvbjp7aW5pdDppLGNoZWNrOltpLGddLGFwcGx5Ond9fSxtZW1iZXJzOntfX21VOm51bGwsX19tVjpmYWxzZSxfX21XOm51bGwsX19tWDpudWxsLF9fbVk6bnVsbCxfX25hOm51bGwsX19uYjpudWxsLF9fbVQ6bnVsbCxfX25jOm51bGwsX2NyZWF0ZUNoaWxkQ29udHJvbEltcGw6ZnVuY3Rpb24oRixHKXt2YXIgSDtzd2l0Y2goRil7Y2FzZSBrOkg9bmV3IHF4LnVpLnNwbGl0cGFuZS5TbGlkZXIodGhpcyk7SC5leGNsdWRlKCk7dGhpcy5fYWRkKEgse3R5cGU6Rn0pO2JyZWFrO2Nhc2UgajpIPW5ldyBxeC51aS5zcGxpdHBhbmUuU3BsaXR0ZXIodGhpcyk7dGhpcy5fYWRkKEgse3R5cGU6Rn0pO0guYWRkTGlzdGVuZXIoQyx0aGlzLl9fbmQsdGhpcyk7YnJlYWs7fXJldHVybiBIfHxxeC51aS5jb3JlLldpZGdldC5wcm90b3R5cGUuX2NyZWF0ZUNoaWxkQ29udHJvbEltcGwuY2FsbCh0aGlzLEYpO30sX19uZDpmdW5jdGlvbihlKXt0aGlzLl9fbmYoZS5nZXREYXRhKCkpO30sX19uZTpmdW5jdGlvbihJKXt0aGlzLl9fbmM9bmV3IHF4LnVpLnNwbGl0cGFuZS5CbG9ja2VyKEkpO3RoaXMuZ2V0Q29udGVudEVsZW1lbnQoKS5hZGQodGhpcy5fX25jKTt2YXIgSj10aGlzLmdldENoaWxkQ29udHJvbChqKTt2YXIgSz1KLmdldFdpZHRoKCk7aWYoIUspe0ouYWRkTGlzdGVuZXJPbmNlKHAsZnVuY3Rpb24oKXt0aGlzLl9fbmYoKTt9LHRoaXMpO31KLmFkZExpc3RlbmVyKEEsZnVuY3Rpb24oZSl7dmFyIEw9ZS5nZXREYXRhKCk7aWYoTC5oZWlnaHQ9PTB8fEwud2lkdGg9PTApe3RoaXMuX19uYy5oaWRlKCk7fWVsc2V7dGhpcy5fX25jLnNob3coKTt9fSx0aGlzKTt9LGdldEJsb2NrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX25jO30sX2FwcGx5T3JpZW50YXRpb246ZnVuY3Rpb24oTSxOKXt2YXIgTz10aGlzLmdldENoaWxkQ29udHJvbChrKTt2YXIgUj10aGlzLmdldENoaWxkQ29udHJvbChqKTt0aGlzLl9fbVk9TT09PWk7aWYoIXRoaXMuX19uYyl7dGhpcy5fX25lKE0pO310aGlzLl9fbmMuc2V0T3JpZW50YXRpb24oTSk7dmFyIFE9dGhpcy5fZ2V0TGF5b3V0KCk7aWYoUSl7US5kaXNwb3NlKCk7fXZhciBQPU09PT1nP25ldyBxeC51aS5zcGxpdHBhbmUuVkxheW91dDpuZXcgcXgudWkuc3BsaXRwYW5lLkhMYXlvdXQ7dGhpcy5fc2V0TGF5b3V0KFApO1IucmVtb3ZlU3RhdGUoTik7Ui5hZGRTdGF0ZShNKTtSLmdldENoaWxkQ29udHJvbChmKS5yZW1vdmVTdGF0ZShOKTtSLmdldENoaWxkQ29udHJvbChmKS5hZGRTdGF0ZShNKTtPLnJlbW92ZVN0YXRlKE4pO08uYWRkU3RhdGUoTSk7cXgudWkuY29yZS5xdWV1ZS5NYW5hZ2VyLmZsdXNoKCk7dGhpcy5fX25mKCk7fSxfYXBwbHlPZmZzZXQ6ZnVuY3Rpb24oUyxUKXt0aGlzLl9fbmYoKTt9LF9fbmY6ZnVuY3Rpb24oVSl7dmFyIFY9dGhpcy5nZXRDaGlsZENvbnRyb2woaik7dmFyIGJhPXRoaXMuZ2V0T2Zmc2V0KCk7dmFyIGJiPVYuZ2V0Qm91bmRzKCk7dmFyIFk9Vi5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0RG9tRWxlbWVudCgpO2lmKCFZKXtyZXR1cm47fWlmKHRoaXMuX19tWSl7dmFyIFg9bnVsbDtpZihVKXtYPVUud2lkdGg7fWVsc2UgaWYoYmIpe1g9YmIud2lkdGg7fXZhciBiYz1VJiZVLmxlZnQ7aWYoWCl7aWYoIWJjKXtiYz1xeC5ib20uZWxlbWVudC5Mb2NhdGlvbi5nZXRQb3NpdGlvbihZKS5sZWZ0O310aGlzLl9fbmMuc2V0V2lkdGgoYmEsWCk7dGhpcy5fX25jLnNldExlZnQoYmEsYmMpO319ZWxzZXt2YXIgVz1udWxsO2lmKFUpe1c9VS5oZWlnaHQ7fWVsc2UgaWYoYmIpe1c9YmIuaGVpZ2h0O312YXIgdG9wPVUmJlUudG9wO2lmKFcpe2lmKCF0b3Ape3RvcD1xeC5ib20uZWxlbWVudC5Mb2NhdGlvbi5nZXRQb3NpdGlvbihZKS50b3A7fXRoaXMuX19uYy5zZXRIZWlnaHQoYmEsVyk7dGhpcy5fX25jLnNldFRvcChiYSx0b3ApO319fSxhZGQ6ZnVuY3Rpb24oYmQsYmUpe2lmKGJlPT1udWxsKXt0aGlzLl9hZGQoYmQpO31lbHNle3RoaXMuX2FkZChiZCx7ZmxleDpiZX0pO310aGlzLl9fbVQucHVzaChiZCk7fSxyZW1vdmU6ZnVuY3Rpb24oYmYpe3RoaXMuX3JlbW92ZShiZik7cXgubGFuZy5BcnJheS5yZW1vdmUodGhpcy5fX21ULGJmKTt9LGdldENoaWxkcmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19tVDt9LF9vbk1vdXNlRG93bjpmdW5jdGlvbihlKXtpZighZS5pc0xlZnRQcmVzc2VkKCkpe3JldHVybjt9dmFyIGJnPXRoaXMuZ2V0Q2hpbGRDb250cm9sKGopO3ZhciBiaT1iZy5nZXRDb250YWluZXJMb2NhdGlvbigpO3ZhciBiaD10aGlzLmdldENvbnRlbnRMb2NhdGlvbigpO3RoaXMuX19tVT10aGlzLl9fbVk/ZS5nZXREb2N1bWVudExlZnQoKS1iaS5sZWZ0K2JoLmxlZnQ6ZS5nZXREb2N1bWVudFRvcCgpLWJpLnRvcCtiaC50b3A7dmFyIGJrPXRoaXMuZ2V0Q2hpbGRDb250cm9sKGspO3ZhciBiaj1iZy5nZXRCb3VuZHMoKTtiay5zZXRVc2VyQm91bmRzKGJqLmxlZnQsYmoudG9wLGJqLndpZHRoLGJqLmhlaWdodCk7Ymsuc2V0WkluZGV4KGJnLmdldFpJbmRleCgpKzEpO2JrLnNob3coKTt0aGlzLl9fbVY9dHJ1ZTt0aGlzLl9fbmMuY2FwdHVyZSgpO2Uuc3RvcCgpO30sX29uTW91c2VNb3ZlOmZ1bmN0aW9uKGUpe3RoaXMuX3NldExhc3RNb3VzZVBvc2l0aW9uKGUuZ2V0RG9jdW1lbnRMZWZ0KCksZS5nZXREb2N1bWVudFRvcCgpKTtpZih0aGlzLl9fbVYpe3RoaXMuX19uZygpO3ZhciBibD10aGlzLmdldENoaWxkQ29udHJvbChrKTt2YXIgYm09dGhpcy5fX25hO2lmKHRoaXMuX19tWSl7Ymwuc2V0RG9tTGVmdChibSk7dGhpcy5fX25jLnNldFN0eWxlKG4sKGJtLXRoaXMuZ2V0T2Zmc2V0KCkpK2gpO31lbHNle2JsLnNldERvbVRvcChibSk7dGhpcy5fX25jLnNldFN0eWxlKHMsKGJtLXRoaXMuZ2V0T2Zmc2V0KCkpK2gpO31lLnN0b3AoKTt9fSxfb25Nb3VzZU91dDpmdW5jdGlvbihlKXt0aGlzLl9zZXRMYXN0TW91c2VQb3NpdGlvbihlLmdldERvY3VtZW50TGVmdCgpLGUuZ2V0RG9jdW1lbnRUb3AoKSk7fSxfb25Nb3VzZVVwOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9fbVYpe3JldHVybjt9dGhpcy5fZmluYWxpemVTaXplcygpO3ZhciBibj10aGlzLmdldENoaWxkQ29udHJvbChrKTtibi5leGNsdWRlKCk7dGhpcy5fX21WPWZhbHNlO3RoaXMucmVsZWFzZUNhcHR1cmUoKTtlLnN0b3AoKTt9LF9maW5hbGl6ZVNpemVzOmZ1bmN0aW9uKCl7dmFyIGJyPXRoaXMuX19uYTt2YXIgYm89dGhpcy5fX25iO2lmKGJyPT1udWxsKXtyZXR1cm47fXZhciBidD10aGlzLl9nZXRDaGlsZHJlbigpO3ZhciBicz1idFsyXTt2YXIgYnA9YnRbM107dmFyIGJxPWJzLmdldExheW91dFByb3BlcnRpZXMoKS5mbGV4O3ZhciBidT1icC5nZXRMYXlvdXRQcm9wZXJ0aWVzKCkuZmxleDtpZigoYnEhPTApJiYoYnUhPTApKXticy5zZXRMYXlvdXRQcm9wZXJ0aWVzKHtmbGV4OmJyfSk7YnAuc2V0TGF5b3V0UHJvcGVydGllcyh7ZmxleDpib30pO31lbHNle2lmKHRoaXMuX19tWSl7YnMuc2V0V2lkdGgoYnIpO2JwLnNldFdpZHRoKGJvKTt9ZWxzZXticy5zZXRIZWlnaHQoYnIpO2JwLnNldEhlaWdodChibyk7fX19LF9fbmc6ZnVuY3Rpb24oKXtpZih0aGlzLl9fbVkpe3ZhciBieD1vLGJFPXosYnk9bCxiQz10aGlzLl9fbVc7fWVsc2V7dmFyIGJ4PXEsYkU9YSxieT1CLGJDPXRoaXMuX19tWDt9dmFyIGJEPXRoaXMuX2dldENoaWxkcmVuKCk7dmFyIGJ2PWJEWzJdLmdldFNpemVIaW50KCk7dmFyIGJBPWJEWzNdLmdldFNpemVIaW50KCk7dmFyIGJCPWJEWzJdLmdldEJvdW5kcygpW2JFXStiRFszXS5nZXRCb3VuZHMoKVtiRV07dmFyIGJ6PWJDLXRoaXMuX19tVTt2YXIgYnc9YkItYno7aWYoYno8YnZbYnhdKXtidy09YnZbYnhdLWJ6O2J6PWJ2W2J4XTt9ZWxzZSBpZihidzxiQVtieF0pe2J6LT1iQVtieF0tYnc7Ync9YkFbYnhdO31pZihiej5idltieV0pe2J3Kz1iei1idltieV07Yno9YnZbYnldO31lbHNlIGlmKGJ3PmJBW2J5XSl7YnorPWJ3LWJBW2J5XTtidz1iQVtieV07fXRoaXMuX19uYT1iejt0aGlzLl9fbmI9Ync7fSxfaXNBY3RpdmVEcmFnU2Vzc2lvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbVY7fSxfc2V0TGFzdE1vdXNlUG9zaXRpb246ZnVuY3Rpb24oeCx5KXt0aGlzLl9fbVc9eDt0aGlzLl9fbVg9eTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19tVD1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJxeC51aS5zcGxpdHBhbmUuU2xpZGVyIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LnVpLmNvcmUuV2lkZ2V0LHByb3BlcnRpZXM6e2FsbG93U2hyaW5rWDp7cmVmaW5lOnRydWUsaW5pdDpmYWxzZX0sYWxsb3dTaHJpbmtZOntyZWZpbmU6dHJ1ZSxpbml0OmZhbHNlfX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBlPSJjZW50ZXIiLGQ9Imtub2IiLGM9Im1pZGRsZSIsYj0icXgudWkuc3BsaXRwYW5lLlNwbGl0dGVyIixhPSJ2ZXJ0aWNhbCI7cXguQ2xhc3MuZGVmaW5lKGIse2V4dGVuZDpxeC51aS5jb3JlLldpZGdldCxjb25zdHJ1Y3Q6ZnVuY3Rpb24oZil7cXgudWkuY29yZS5XaWRnZXQuY2FsbCh0aGlzKTtpZihmLmdldE9yaWVudGF0aW9uKCk9PWEpe3RoaXMuX3NldExheW91dChuZXcgcXgudWkubGF5b3V0LkhCb3goMCxlKSk7dGhpcy5fZ2V0TGF5b3V0KCkuc2V0QWxpZ25ZKGMpO31lbHNle3RoaXMuX3NldExheW91dChuZXcgcXgudWkubGF5b3V0LlZCb3goMCxjKSk7dGhpcy5fZ2V0TGF5b3V0KCkuc2V0QWxpZ25YKGUpO310aGlzLl9jcmVhdGVDaGlsZENvbnRyb2woZCk7fSxwcm9wZXJ0aWVzOnthbGxvd1Nocmlua1g6e3JlZmluZTp0cnVlLGluaXQ6ZmFsc2V9LGFsbG93U2hyaW5rWTp7cmVmaW5lOnRydWUsaW5pdDpmYWxzZX19LG1lbWJlcnM6e19jcmVhdGVDaGlsZENvbnRyb2xJbXBsOmZ1bmN0aW9uKGcsaCl7dmFyIGk7c3dpdGNoKGcpe2Nhc2UgZDppPW5ldyBxeC51aS5iYXNpYy5JbWFnZTt0aGlzLl9hZGQoaSk7YnJlYWs7fXJldHVybiBpfHxxeC51aS5jb3JlLldpZGdldC5wcm90b3R5cGUuX2NyZWF0ZUNoaWxkQ29udHJvbEltcGwuY2FsbCh0aGlzLGcpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbz0icHgiLG49Imhvcml6b250YWwiLG09InRvcCIsbD0iaGVpZ2h0IixrPSJ3aWR0aCIsaj0ibGVmdCIsaT0iMTAwJSIsaD0iY3Vyc29yIixnPSJ2ZXJ0aWNhbCIsZj0iX2FwcGx5T3JpZW50YXRpb24iLGM9InF4LnVpLnNwbGl0cGFuZS5CbG9ja2VyIixlPSJjb2wtcmVzaXplIixkPSJyb3ctcmVzaXplIixiPSJkaXYiLGE9ImFic29sdXRlIjtxeC5DbGFzcy5kZWZpbmUoYyx7ZXh0ZW5kOnF4Lmh0bWwuRWxlbWVudCxjb25zdHJ1Y3Q6ZnVuY3Rpb24ocCl7dmFyIHE9e3Bvc2l0aW9uOmEsekluZGV4OjExfTtxeC5odG1sLkVsZW1lbnQuY2FsbCh0aGlzLGIscSk7aWYocCl7dGhpcy5zZXRPcmllbnRhdGlvbihwKTt9ZWxzZXt0aGlzLmluaXRPcmllbnRhdGlvbigpO319LHByb3BlcnRpZXM6e29yaWVudGF0aW9uOntpbml0Om4sY2hlY2s6W24sZ10sYXBwbHk6Zn19LG1lbWJlcnM6e19hcHBseU9yaWVudGF0aW9uOmZ1bmN0aW9uKHIscyl7aWYocj09bil7dGhpcy5zZXRTdHlsZShsLGkpO3RoaXMuc2V0U3R5bGUoaCxlKTt0aGlzLnNldFN0eWxlKG0sbnVsbCk7fWVsc2V7dGhpcy5zZXRTdHlsZShrLGkpO3RoaXMuc2V0U3R5bGUoaixudWxsKTt0aGlzLnNldFN0eWxlKGgsZCk7fX0sc2V0V2lkdGg6ZnVuY3Rpb24odCx1KXt2YXIgdj11KzIqdDt0aGlzLnNldFN0eWxlKGssditvKTt9LHNldEhlaWdodDpmdW5jdGlvbih3LHgpe3ZhciB5PXgrMip3O3RoaXMuc2V0U3R5bGUobCx5K28pO30sc2V0TGVmdDpmdW5jdGlvbih6LEEpe3ZhciBCPUEtejt0aGlzLnNldFN0eWxlKGosQitvKTt9LHNldFRvcDpmdW5jdGlvbihDLEQpe3ZhciB0b3A9RC1DO3RoaXMuc2V0U3R5bGUobSx0b3Arbyk7fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBjPSJzbGlkZXIiLGI9InNwbGl0dGVyIixhPSJxeC51aS5zcGxpdHBhbmUuVkxheW91dCI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC51aS5sYXlvdXQuQWJzdHJhY3QsbWVtYmVyczp7dmVyaWZ5TGF5b3V0UHJvcGVydHk6bnVsbCxyZW5kZXJMYXlvdXQ6ZnVuY3Rpb24oZCxlKXt2YXIgdj10aGlzLl9nZXRMYXlvdXRDaGlsZHJlbigpO3ZhciBsZW5ndGg9di5sZW5ndGg7dmFyIHIsdTt2YXIgZyxmLHAsaDtmb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe3I9dltpXTt1PXIuZ2V0TGF5b3V0UHJvcGVydGllcygpLnR5cGU7aWYodT09PWIpe2Y9cjt9ZWxzZSBpZih1PT09Yyl7cD1yO31lbHNlIGlmKCFnKXtnPXI7fWVsc2V7aD1yO319aWYoZyYmaCl7dmFyIHg9Zy5nZXRMYXlvdXRQcm9wZXJ0aWVzKCkuZmxleDt2YXIgaz1oLmdldExheW91dFByb3BlcnRpZXMoKS5mbGV4O2lmKHg9PW51bGwpe3g9MTt9aWYoaz09bnVsbCl7az0xO312YXIgdz1nLmdldFNpemVIaW50KCk7dmFyIG49Zi5nZXRTaXplSGludCgpO3ZhciBvPWguZ2V0U2l6ZUhpbnQoKTt2YXIgaj13LmhlaWdodDt2YXIgcz1uLmhlaWdodDt2YXIgdD1vLmhlaWdodDtpZih4PjAmJms+MCl7dmFyIGw9eCtrO3ZhciBtPWUtczt2YXIgaj1NYXRoLnJvdW5kKChtL2wpKngpO3ZhciB0PW0tajt2YXIgcT1xeC51aS5sYXlvdXQuVXRpbC5hcnJhbmdlSWRlYWxzKHcubWluSGVpZ2h0LGosdy5tYXhIZWlnaHQsby5taW5IZWlnaHQsdCxvLm1heEhlaWdodCk7aj1xLmJlZ2luO3Q9cS5lbmQ7fWVsc2UgaWYoeD4wKXtqPWUtcy10O2lmKGo8dy5taW5IZWlnaHQpe2o9dy5taW5IZWlnaHQ7fWlmKGo+dy5tYXhIZWlnaHQpe2o9dy5tYXhIZWlnaHQ7fX1lbHNlIGlmKGs+MCl7dD1lLWotcztpZih0PG8ubWluSGVpZ2h0KXt0PW8ubWluSGVpZ2h0O31pZih0Pm8ubWF4SGVpZ2h0KXt0PW8ubWF4SGVpZ2h0O319Zy5yZW5kZXJMYXlvdXQoMCwwLGQsaik7Zi5yZW5kZXJMYXlvdXQoMCxqLGQscyk7aC5yZW5kZXJMYXlvdXQoMCxqK3MsZCx0KTt9ZWxzZXtmLnJlbmRlckxheW91dCgwLDAsMCwwKTtpZihnKXtnLnJlbmRlckxheW91dCgwLDAsZCxlKTt9ZWxzZSBpZihoKXtoLnJlbmRlckxheW91dCgwLDAsZCxlKTt9fX0sX2NvbXB1dGVTaXplSGludDpmdW5jdGlvbigpe3ZhciBIPXRoaXMuX2dldExheW91dENoaWxkcmVuKCk7dmFyIGxlbmd0aD1ILmxlbmd0aDt2YXIgQSx6LEc7dmFyIEI9MCxEPTAsQz0wO3ZhciBFPTAsRj0wLHk9MDtmb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe0E9SFtpXTtHPUEuZ2V0TGF5b3V0UHJvcGVydGllcygpO2lmKEcudHlwZT09PWMpe2NvbnRpbnVlO316PUEuZ2V0U2l6ZUhpbnQoKTtCKz16Lm1pbkhlaWdodDtEKz16LmhlaWdodDtDKz16Lm1heEhlaWdodDtpZih6Lm1pbldpZHRoPkUpe0U9ei5taW5XaWR0aDt9aWYoei53aWR0aD5GKXtGPXoud2lkdGg7fWlmKHoubWF4V2lkdGg+eSl7eT16Lm1heFdpZHRoO319cmV0dXJuIHttaW5IZWlnaHQ6QixoZWlnaHQ6RCxtYXhIZWlnaHQ6QyxtaW5XaWR0aDpFLHdpZHRoOkYsbWF4V2lkdGg6eX07fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBjPSJzbGlkZXIiLGI9InNwbGl0dGVyIixhPSJxeC51aS5zcGxpdHBhbmUuSExheW91dCI7cXguQ2xhc3MuZGVmaW5lKGEse2V4dGVuZDpxeC51aS5sYXlvdXQuQWJzdHJhY3QsbWVtYmVyczp7dmVyaWZ5TGF5b3V0UHJvcGVydHk6bnVsbCxyZW5kZXJMYXlvdXQ6ZnVuY3Rpb24oZCxlKXt2YXIgdj10aGlzLl9nZXRMYXlvdXRDaGlsZHJlbigpO3ZhciBsZW5ndGg9di5sZW5ndGg7dmFyIHMsdTt2YXIgZyxmLHAsaDtmb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe3M9dltpXTt1PXMuZ2V0TGF5b3V0UHJvcGVydGllcygpLnR5cGU7aWYodT09PWIpe2Y9czt9ZWxzZSBpZih1PT09Yyl7cD1zO31lbHNlIGlmKCFnKXtnPXM7fWVsc2V7aD1zO319aWYoZyYmaCl7dmFyIHg9Zy5nZXRMYXlvdXRQcm9wZXJ0aWVzKCkuZmxleDt2YXIgaj1oLmdldExheW91dFByb3BlcnRpZXMoKS5mbGV4O2lmKHg9PW51bGwpe3g9MTt9aWYoaj09bnVsbCl7aj0xO312YXIgdz1nLmdldFNpemVIaW50KCk7dmFyIG09Zi5nZXRTaXplSGludCgpO3ZhciBvPWguZ2V0U2l6ZUhpbnQoKTt2YXIgdD13LndpZHRoO3ZhciByPW0ud2lkdGg7dmFyIHE9by53aWR0aDtpZih4PjAmJmo+MCl7dmFyIGs9eCtqO3ZhciBsPWQtcjt2YXIgdD1NYXRoLnJvdW5kKChsL2spKngpO3ZhciBxPWwtdDt2YXIgbj1xeC51aS5sYXlvdXQuVXRpbC5hcnJhbmdlSWRlYWxzKHcubWluV2lkdGgsdCx3Lm1heFdpZHRoLG8ubWluV2lkdGgscSxvLm1heFdpZHRoKTt0PW4uYmVnaW47cT1uLmVuZDt9ZWxzZSBpZih4PjApe3Q9ZC1yLXE7aWYodDx3Lm1pbldpZHRoKXt0PXcubWluV2lkdGg7fWlmKHQ+dy5tYXhXaWR0aCl7dD13Lm1heFdpZHRoO319ZWxzZSBpZihqPjApe3E9ZC10LXI7aWYocTxvLm1pbldpZHRoKXtxPW8ubWluV2lkdGg7fWlmKHE+by5tYXhXaWR0aCl7cT1vLm1heFdpZHRoO319Zy5yZW5kZXJMYXlvdXQoMCwwLHQsZSk7Zi5yZW5kZXJMYXlvdXQodCwwLHIsZSk7aC5yZW5kZXJMYXlvdXQodCtyLDAscSxlKTt9ZWxzZXtmLnJlbmRlckxheW91dCgwLDAsMCwwKTtpZihnKXtnLnJlbmRlckxheW91dCgwLDAsZCxlKTt9ZWxzZSBpZihoKXtoLnJlbmRlckxheW91dCgwLDAsZCxlKTt9fX0sX2NvbXB1dGVTaXplSGludDpmdW5jdGlvbigpe3ZhciBIPXRoaXMuX2dldExheW91dENoaWxkcmVuKCk7dmFyIGxlbmd0aD1ILmxlbmd0aDt2YXIgQSx6LEc7dmFyIEU9MCxGPTAseT0wO3ZhciBCPTAsRD0wLEM9MDtmb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe0E9SFtpXTtHPUEuZ2V0TGF5b3V0UHJvcGVydGllcygpO2lmKEcudHlwZT09PWMpe2NvbnRpbnVlO316PUEuZ2V0U2l6ZUhpbnQoKTtFKz16Lm1pbldpZHRoO0YrPXoud2lkdGg7eSs9ei5tYXhXaWR0aDtpZih6Lm1pbkhlaWdodD5CKXtCPXoubWluSGVpZ2h0O31pZih6LmhlaWdodD5EKXtEPXouaGVpZ2h0O31pZih6Lm1heEhlaWdodD5DKXtDPXoubWF4SGVpZ2h0O319cmV0dXJuIHttaW5XaWR0aDpFLHdpZHRoOkYsbWF4V2lkdGg6eSxtaW5IZWlnaHQ6QixoZWlnaHQ6RCxtYXhIZWlnaHQ6Q307fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJhcGl2aWV3ZXIudGVzdC5MYXlvdXRJdGVtIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LG1lbWJlcnM6e3JlbmRlclNlcGFyYXRvcjpmdW5jdGlvbihiLGMpe319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgcD0ib3RoZXIiLG89IndpZGdldHMiLG49ImZvbnRzIixtPSJhcHBlYXJhbmNlcyIsaz0icXguVGhlbWUiLGo9Il0iLGg9IltUaGVtZSAiLGc9ImNvbG9ycyIsZj0iZGVjb3JhdGlvbnMiLGU9IlRoZW1lIixiPSJtZXRhIixkPSJib3JkZXJzIixjPSJpY29ucyI7cXguQm9vdHN0cmFwLmRlZmluZShrLHtzdGF0aWNzOntkZWZpbmU6ZnVuY3Rpb24obmFtZSxxKXtpZighcSl7dmFyIHE9e307fXEuaW5jbHVkZT10aGlzLl9fcmcocS5pbmNsdWRlKTtxLnBhdGNoPXRoaXMuX19yZyhxLnBhdGNoKTt7fTt2YXIgcj17JCR0eXBlOmUsbmFtZTpuYW1lLHRpdGxlOnEudGl0bGUsdG9TdHJpbmc6dGhpcy5nZW5lcmljVG9TdHJpbmd9O2lmKHEuZXh0ZW5kKXtyLnN1cGVydGhlbWU9cS5leHRlbmQ7fXIuYmFzZW5hbWU9cXguQm9vdHN0cmFwLmNyZWF0ZU5hbWVzcGFjZShuYW1lLHIpO3RoaXMuX19yaihyLHEpO3RoaXMuX19yaChyLHEpO3RoaXMuJCRyZWdpc3RyeVtuYW1lXT1yO2Zvcih2YXIgaT0wLGE9cS5pbmNsdWRlLGw9YS5sZW5ndGg7aTxsO2krKyl7dGhpcy5pbmNsdWRlKHIsYVtpXSk7fWZvcih2YXIgaT0wLGE9cS5wYXRjaCxsPWEubGVuZ3RoO2k8bDtpKyspe3RoaXMucGF0Y2gocixhW2ldKTt9fSxfX3JnOmZ1bmN0aW9uKHMpe2lmKCFzKXtyZXR1cm4gW107fWlmKHF4LkJvb3RzdHJhcC5pc0FycmF5KHMpKXtyZXR1cm4gczt9ZWxzZXtyZXR1cm4gW3NdO319LF9fcmg6ZnVuY3Rpb24odCx1KXt2YXIgdj11LmFsaWFzZXN8fHt9O2lmKHUuZXh0ZW5kJiZ1LmV4dGVuZC5hbGlhc2VzKXtxeC5Cb290c3RyYXAub2JqZWN0TWVyZ2VXaXRoKHYsdS5leHRlbmQuYWxpYXNlcyxmYWxzZSk7fXQuYWxpYXNlcz12O30sZ2V0QWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJCRyZWdpc3RyeTt9LGdldEJ5TmFtZTpmdW5jdGlvbihuYW1lKXtyZXR1cm4gdGhpcy4kJHJlZ2lzdHJ5W25hbWVdO30saXNEZWZpbmVkOmZ1bmN0aW9uKG5hbWUpe3JldHVybiB0aGlzLmdldEJ5TmFtZShuYW1lKSE9PXVuZGVmaW5lZDt9LGdldFRvdGFsTnVtYmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHF4LkJvb3RzdHJhcC5vYmplY3RHZXRMZW5ndGgodGhpcy4kJHJlZ2lzdHJ5KTt9LGdlbmVyaWNUb1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBoK3RoaXMubmFtZStqO30sX19yaTpmdW5jdGlvbih3KXtmb3IodmFyIGk9MCx4PXRoaXMuX19yayxsPXgubGVuZ3RoO2k8bDtpKyspe2lmKHdbeFtpXV0pe3JldHVybiB4W2ldO319fSxfX3JqOmZ1bmN0aW9uKHkseil7dmFyIEM9dGhpcy5fX3JpKHopO2lmKHouZXh0ZW5kJiYhQyl7Qz16LmV4dGVuZC50eXBlO315LnR5cGU9Q3x8cDtpZighQyl7cmV0dXJuO312YXIgRT1mdW5jdGlvbigpe307aWYoei5leHRlbmQpe0UucHJvdG90eXBlPW5ldyB6LmV4dGVuZC4kJGNsYXp6O312YXIgRD1FLnByb3RvdHlwZTt2YXIgQj16W0NdO2Zvcih2YXIgQSBpbiBCKXtEW0FdPUJbQV07aWYoRFtBXS5iYXNlKXt7fTtEW0FdLmJhc2U9ei5leHRlbmQ7fX15LiQkY2xheno9RTt5W0NdPW5ldyBFO30sJCRyZWdpc3RyeTp7fSxfX3JrOltnLGQsZixuLGMsbyxtLGJdLF9fcmw6bnVsbCxfX3JtOm51bGwsX19ybjpmdW5jdGlvbigpe30scGF0Y2g6ZnVuY3Rpb24oRixHKXt2YXIgST10aGlzLl9fcmkoRyk7aWYoSSE9PXRoaXMuX19yaShGKSl7dGhyb3cgbmV3IEVycm9yKCJUaGUgbWl4aW5zICciK0YubmFtZSsiJyBhcmUgbm90IGNvbXBhdGlibGUgJyIrRy5uYW1lKyInISIpO312YXIgSD1HW0ldO3ZhciBKPUYuJCRjbGF6ei5wcm90b3R5cGU7Zm9yKHZhciBLIGluIEgpe0pbS109SFtLXTt9fSxpbmNsdWRlOmZ1bmN0aW9uKEwsTSl7dmFyIE89TS50eXBlO2lmKE8hPT1MLnR5cGUpe3Rocm93IG5ldyBFcnJvcigiVGhlIG1peGlucyAnIitMLm5hbWUrIicgYXJlIG5vdCBjb21wYXRpYmxlICciK00ubmFtZSsiJyEiKTt9dmFyIE49TVtPXTt2YXIgUD1MLiQkY2xhenoucHJvdG90eXBlO2Zvcih2YXIgUSBpbiBOKXtpZihQW1FdIT09dW5kZWZpbmVkKXtjb250aW51ZTt9UFtRXT1OW1FdO319fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGROPSJidXR0b24tZnJhbWUiLGRNPSJhdG9tIixkTD0id2lkZ2V0IixkSz0ibWFpbiIsZEo9ImJ1dHRvbiIsZEk9ImJvbGQiLGRIPSJ0ZXh0LXNlbGVjdGVkIixkRz0iaW1hZ2UiLGRGPSJtaWRkbGUiLGRFPSJzZWxlY3RlZCIsY289ImJhY2tncm91bmQtbGlnaHQiLGNuPSJjZWxsIixjbT0idGV4dC1kaXNhYmxlZCIsY2w9Imdyb3VwYm94Iixjaz0iZGVjb3JhdGlvbi9hcnJvd3MvZG93bi5wbmciLGNqPSJsYWJlbCIsY2k9ImJvcmRlci1pbnZhbGlkIixjaD0iaW5wdXQiLGNnPSJ3aGl0ZSIsY2Y9ImlucHV0LWRpc2FibGVkIixkVT0ibWVudS1idXR0b24iLGRWPSJpbnB1dC1mb2N1c2VkLWludmFsaWQiLGRTPSJ0b29sYmFyLWJ1dHRvbiIsZFQ9InNwaW5uZXIiLGRRPSJpbnB1dC1mb2N1c2VkIixkUj0icG9wdXAiLGRPPSJ0b29sdGlwIixkUD0ibGlzdCIsZFc9InRyZWUtaXRlbSIsZFg9InRyZWV2aXJ0dWFsLWNvbnRyYWN0Iixkaz0ic2Nyb2xsYmFyIixkaj0iZGF0ZWNob29zZXIvbmF2LWJ1dHRvbiIsZG09InRleHQtaG92ZXJlZCIsZGw9ImNlbnRlciIsZHA9InRyZWV2aXJ0dWFsLWV4cGFuZCIsZG49InRleHRmaWVsZCIsZHI9ImRlY29yYXRpb24vYXJyb3dzL3JpZ2h0LnBuZyIsZHE9ImJhY2tncm91bmQtYXBwbGljYXRpb24iLGRpPSJyYWRpb2J1dHRvbiIsZGg9ImludmFsaWQiLGs9ImNvbWJvYm94IixsPSJyaWdodC10b3AiLG09ImNoZWNrYm94IixuPSJ0ZXh0LXRpdGxlIixvPSJpY29uLzE2L3BsYWNlcy9mb2xkZXItb3Blbi5wbmciLHA9InF4L3N0YXRpYy9ibGFuay5naWYiLHE9InNjcm9sbGJhci9idXR0b24iLHI9InJpZ2h0IixzPSJjb21ib2JveC9idXR0b24iLHQ9Imljb24vMTYvcGxhY2VzL2ZvbGRlci5wbmciLGVtPSJ0ZXh0LWxhYmVsIixlbD0iZGVjb3JhdGlvbi90cmVlL2Nsb3NlZC5wbmciLGVrPSJzY3JvbGxiYXItc2xpZGVyLWhvcml6b250YWwiLGVqPSJjaGVja2JveC1jaGVja2VkIixlcT0iZGVjb3JhdGlvbi9hcnJvd3MvbGVmdC5wbmciLGVwPSJidXR0b24tZm9jdXNlZCIsZW89InRleHQtbGlnaHQiLGVuPSJtZW51LXNsaWRlYmFyLWJ1dHRvbiIsZXM9ImNoZWNrYm94LXVuZGV0ZXJtaW5lZCIsZXI9InRleHQtaW5wdXQiLGJtPSJzbGlkZWJhci9idXR0b24tZm9yd2FyZCIsYm49ImJhY2tncm91bmQtc3BsaXRwYW5lIixiaz0iLnBuZyIsYmw9ImRlY29yYXRpb24vdHJlZS9vcGVuLnBuZyIsYnE9ImRlZmF1bHQiLGJyPSJkZWNvcmF0aW9uL2Fycm93cy9kb3duLXNtYWxsLnBuZyIsYm89ImRhdGVjaG9vc2VyIixicD0ic2xpZGViYXIvYnV0dG9uLWJhY2t3YXJkIixiaT0ic2VsZWN0Ym94Iixiaj0idHJlZXZpcnR1YWwtZm9sZGVyIixOPSJzaGFkb3ctcG9wdXAiLE09Imljb24vMTYvbWltZXR5cGVzL29mZmljZS1kb2N1bWVudC5wbmciLFA9ImJhY2tncm91bmQtbWVkaXVtIixPPSJpY29uLzMyL3BsYWNlcy9mb2xkZXItb3Blbi5wbmciLEo9Imljb24vMjIvcGxhY2VzL2ZvbGRlci1vcGVuLnBuZyIsST0idGFibGUiLEw9ImRlY29yYXRpb24vYXJyb3dzL3VwLnBuZyIsSz0iZGVjb3JhdGlvbi9mb3JtLyIsSD0iIixHPSItaW52YWxpZCIsYng9ImJ1dHRvbi1jaGVja2VkIixieT0iZGVjb3JhdGlvbi93aW5kb3cvbWF4aW1pemUtYWN0aXZlLWhvdmVyZWQucG5nIixiej0icmFkaW9idXR0b24taG92ZXJlZCIsYkE9ImtleWJvYXJkLWZvY3VzIixidD0iZ3JvdXAtaXRlbSIsYnU9ImRlY29yYXRpb24vY3Vyc29ycy8iLGJ2PSJzbGlkZWJhciIsYnc9InRvb2x0aXAtZXJyb3ItYXJyb3ciLGJCPSJ0YWJsZS1zY3JvbGxlci1mb2N1cy1pbmRpY2F0b3IiLGJDPSJtb3ZlLWZyYW1lIixiYj0ibm9kcm9wIixiYT0iZGVjb3JhdGlvbi90YWJsZS9ib29sZWFuLXRydWUucG5nIixZPSJ0YWJsZS1oZWFkZXItY2VsbCIsWD0ibWVudSIsVz0iYXBwLWhlYWRlciIsVj0icm93LWxheWVyIixVPSJ0ZXh0LWluYWN0aXZlIixUPSJtb3ZlIixiZj0icmFkaW9idXR0b24tY2hlY2tlZC1mb2N1c2VkIixiZT0iZGVjb3JhdGlvbi93aW5kb3cvcmVzdG9yZS1hY3RpdmUtaG92ZXJlZC5wbmciLGJEPSJzaGFkb3ctd2luZG93IixiRT0idGFibGUtY29sdW1uLWJ1dHRvbiIsYkY9InJpZ2h0LnBuZyIsYkc9ImNoZWNrYm94LXVuZGV0ZXJtaW5lZC1ob3ZlcmVkIixiSD0idGFidmlldy1wYWdlLWJ1dHRvbi1ib3R0b20taW5hY3RpdmUiLGJJPSJ0b29sdGlwLWVycm9yIixiSj0id2luZG93LXN0YXR1c2JhciIsYks9ImJ1dHRvbi1ob3ZlcmVkIixiTD0iZGVjb3JhdGlvbi9zY3JvbGxiYXIvc2Nyb2xsYmFyLSIsYk09ImJhY2tncm91bmQtdGlwIixjdz0ic2Nyb2xsYmFyLXNsaWRlci1ob3Jpem9udGFsLWRpc2FibGVkIixjdj0idGFibGUtc2Nyb2xsZXItaGVhZGVyIixjdT0iYnV0dG9uLXByZXNzZWQiLGN0PSJ0YWJsZS1wYW5lIixjQT0iZGVjb3JhdGlvbi93aW5kb3cvY2xvc2UtYWN0aXZlLnBuZyIsY3o9Im5hdGl2ZSIsY3k9ImNoZWNrYm94LWhvdmVyZWQiLGN4PSJidXR0b24taW52YWxpZC1zaGFkb3ciLGNFPSJkZWNvcmF0aW9uL3dpbmRvdy9taW5pbWl6ZS1hY3RpdmUtaG92ZXJlZC5wbmciLGNEPSJtZW51YmFyIixkYz0iaWNvbi8xNi9hY3Rpb25zL2RpYWxvZy1jYW5jZWwucG5nIixkZD0idGFidmlldy1wYWdlLWJ1dHRvbi10b3AtaW5hY3RpdmUiLGRhPSJ0YWJ2aWV3LXBhZ2UtYnV0dG9uLWxlZnQtaW5hY3RpdmUiLGRiPSJtZW51LXNsaWRlYmFyIixjWD0idG9vbGJhci1idXR0b24tY2hlY2tlZCIsY1k9ImRlY29yYXRpb24vdHJlZS9vcGVuLXNlbGVjdGVkLnBuZyIsY1Y9InJhZGlvYnV0dG9uLWNoZWNrZWQiLGNXPSJkZWNvcmF0aW9uL3dpbmRvdy9taW5pbWl6ZS1pbmFjdGl2ZS5wbmciLGRlPSJpY29uLzE2L2FwcHMvb2ZmaWNlLWNhbGVuZGFyLnBuZyIsZGY9Imdyb3VwIixkdj0idGFidmlldy1wYWdlLWJ1dHRvbi1yaWdodC1pbmFjdGl2ZSIsZHU9ImRlY29yYXRpb24vd2luZG93L21pbmltaXplLWFjdGl2ZS5wbmciLGR4PSJkZWNvcmF0aW9uL3dpbmRvdy9yZXN0b3JlLWluYWN0aXZlLnBuZyIsZHc9ImNoZWNrYm94LWNoZWNrZWQtZm9jdXNlZCIsZHo9InNwbGl0cGFuZSIsZHk9ImNvbWJvYm94L3RleHRmaWVsZCIsZEI9ImJ1dHRvbi1wcmVzZWxlY3RlZC1mb2N1c2VkIixkQT0iZGVjb3JhdGlvbi93aW5kb3cvY2xvc2UtYWN0aXZlLWhvdmVyZWQucG5nIixkdD0icXgvaWNvbi9UYW5nby8xNi9hY3Rpb25zL3dpbmRvdy1jbG9zZS5wbmciLGRzPSJjaGVja2JveC1wcmVzc2VkIixlZj0iYnV0dG9uLWRpc2FibGVkIixlZz0ic2VsZWN0ZWQtZHJhZ292ZXIiLGVoPSJib3JkZXItc2VwYXJhdG9yIixlaT0iZGVjb3JhdGlvbi93aW5kb3cvbWF4aW1pemUtaW5hY3RpdmUucG5nIixlYj0iZHJhZ292ZXIiLGVjPSJzY3JvbGxhcmVhIixlZD0ic2Nyb2xsYmFyLXZlcnRpY2FsIixlZT0iZGVjb3JhdGlvbi9tZW51L2NoZWNrYm94LWludmVydC5naWYiLGRZPSJkZWNvcmF0aW9uL3Rvb2xiYXIvdG9vbGJhci1oYW5kbGUta25vYi5naWYiLGVhPSJpY29uLzIyL21pbWV0eXBlcy9vZmZpY2UtZG9jdW1lbnQucG5nIixqPSJidXR0b24tcHJlc2VsZWN0ZWQiLGk9ImJ1dHRvbi1jaGVja2VkLWZvY3VzZWQiLGg9InVwLnBuZyIsZz0iYmVzdC1maXQiLGY9ImRlY29yYXRpb24vdHJlZS9jbG9zZWQtc2VsZWN0ZWQucG5nIixlPSJxeC50aGVtZS5tb2Rlcm4uQXBwZWFyYW5jZSIsZD0idGV4dC1hY3RpdmUiLGM9InRvb2xiYXItYnV0dG9uLWhvdmVyZWQiLGI9InByb2dyZXNzaXZlLXRhYmxlLWhlYWRlciIsYT0iZGVjb3JhdGlvbi90YWJsZS9zZWxlY3QtY29sdW1uLW9yZGVyLnBuZyIsdz0iZGVjb3JhdGlvbi9tZW51L3JhZGlvYnV0dG9uLmdpZiIseD0iZGVjb3JhdGlvbi9hcnJvd3MvZm9yd2FyZC5wbmciLHU9ImRlY29yYXRpb24vdGFibGUvZGVzY2VuZGluZy5wbmciLHY9InByb2dyZXNzYmFyIixBPSJ3aW5kb3ctY2FwdGlvbmJhci1hY3RpdmUiLEI9ImNoZWNrYm94LWNoZWNrZWQtaG92ZXJlZCIseT0ic2Nyb2xsYmFyLXNsaWRlci12ZXJ0aWNhbCIsej0idG9vbGJhciIsRD0iYWxpYXMiLEU9ImRlY29yYXRpb24vd2luZG93L3Jlc3RvcmUtYWN0aXZlLnBuZyIsY0k9ImRlY29yYXRpb24vdGFibGUvYm9vbGVhbi1mYWxzZS5wbmciLGNDPSJpY29uLzMyL21pbWV0eXBlcy9vZmZpY2UtZG9jdW1lbnQucG5nIixjUD0icmFkaW9idXR0b24tY2hlY2tlZC1kaXNhYmxlZCIsY0w9InRhYnZpZXctcGFuZSIsY3I9ImRlY29yYXRpb24vYXJyb3dzL3Jld2luZC5wbmciLGNwPSJjaGVja2JveC1mb2N1c2VkIixSPSJ0b3AiLGNzPSJpY29uLzE2L2FjdGlvbnMvZGlhbG9nLW9rLnBuZyIsYmQ9InJhZGlvYnV0dG9uLWNoZWNrZWQtaG92ZXJlZCIsYmM9InRhYmxlLWhlYWRlci1jZWxsLWhvdmVyZWQiLGJXPSJ3aW5kb3ciLGJYPSJ0ZXh0LWdyYXkiLGJZPSJkZWNvcmF0aW9uL21lbnUvcmFkaW9idXR0b24taW52ZXJ0LmdpZiIsY2E9InRleHQtcGxhY2Vob2xkZXIiLGNiPSJzbGlkZXIiLGNjPSJrZWVwLWFsaWduIixjZD0iZG93bi5wbmciLGNlPSJ0YWJ2aWV3LXBhZ2UtYnV0dG9uLXRvcC1hY3RpdmUiLGJUPSJpY29uLzIyL3BsYWNlcy9mb2xkZXIucG5nIixiVT0iZGVjb3JhdGlvbi93aW5kb3cvbWF4aW1pemUtYWN0aXZlLnBuZyIsY3E9ImNoZWNrYm94LWNoZWNrZWQtcHJlc3NlZCIsY089ImRlY29yYXRpb24vd2luZG93L2Nsb3NlLWluYWN0aXZlLnBuZyIsY049InRhYnZpZXctcGFnZS1idXR0b24tbGVmdC1hY3RpdmUiLGNNPSJ0b29sYmFyLXBhcnQiLGNUPSJkZWNvcmF0aW9uL3NwbGl0cGFuZS9rbm9iLXZlcnRpY2FsLnBuZyIsY1M9Ii5naWYiLGNSPSJyYWRpb2J1dHRvbi1jaGVja2VkLXByZXNzZWQiLGNRPSJ0YWJsZS1zdGF0dXNiYXIiLGNLPSJyYWRpb2J1dHRvbi1wcmVzc2VkIixjSj0id2luZG93LWNhcHRpb25iYXItaW5hY3RpdmUiLEM9ImNvcHkiLGJoPSJyYWRpb2J1dHRvbi1mb2N1c2VkIixiZz0iZGVjb3JhdGlvbi9hcnJvd3MvZG93bi1pbnZlcnQucG5nIixjQj0iZGVjb3JhdGlvbi9tZW51L2NoZWNrYm94LmdpZiIsYnM9ImRlY29yYXRpb24vc3BsaXRwYW5lL2tub2ItaG9yaXpvbnRhbC5wbmciLGNIPSJpY29uLzMyL3BsYWNlcy9mb2xkZXIucG5nIixjRz0idG9vbGJhci1zZXBhcmF0b3IiLGNGPSJ0YWJ2aWV3LXBhZ2UtYnV0dG9uLWJvdHRvbS1hY3RpdmUiLFE9ImRlY29yYXRpb24vYXJyb3dzL3VwLXNtYWxsLnBuZyIsY1U9ImRlY29yYXRpb24vdGFibGUvYXNjZW5kaW5nLnBuZyIsRj0iZGVjb3JhdGlvbi9hcnJvd3MvdXAtaW52ZXJ0LnBuZyIsUz0ic21hbGwiLGJOPSJ0YWJ2aWV3LXBhZ2UtYnV0dG9uLXJpZ2h0LWFjdGl2ZSIsYk89Ii1kaXNhYmxlZCIsYlA9InNjcm9sbGJhci1ob3Jpem9udGFsIixiUT0iY2hlY2tib3gtdW5kZXRlcm1pbmVkLWZvY3VzZWQiLGJSPSJwcm9ncmVzc2l2ZS10YWJsZS1oZWFkZXItY2VsbCIsYlM9Im1lbnUtc2VwYXJhdG9yIixkZz0icGFuZSIsYlY9ImRlY29yYXRpb24vYXJyb3dzL3JpZ2h0LWludmVydC5wbmciLGREPSJsZWZ0LnBuZyIsZEM9Imljb24vMTYvYWN0aW9ucy92aWV3LXJlZnJlc2gucG5nIjtxeC5UaGVtZS5kZWZpbmUoZSx7YXBwZWFyYW5jZXM6eyJ3aWRnZXQiOnt9LCJyb290Ijp7c3R5bGU6ZnVuY3Rpb24oZXQpe3JldHVybiB7YmFja2dyb3VuZENvbG9yOmRxLHRleHRDb2xvcjplbSxmb250OmJxfTt9fSwibGFiZWwiOntzdHlsZTpmdW5jdGlvbihldSl7cmV0dXJuIHt0ZXh0Q29sb3I6ZXUuZGlzYWJsZWQ/Y206dW5kZWZpbmVkfTt9fSwibW92ZS1mcmFtZSI6e3N0eWxlOmZ1bmN0aW9uKGV2KXtyZXR1cm4ge2RlY29yYXRvcjpkS307fX0sInJlc2l6ZS1mcmFtZSI6YkMsImRyYWdkcm9wLWN1cnNvciI6e3N0eWxlOmZ1bmN0aW9uKGV3KXt2YXIgZXg9YmI7aWYoZXcuY29weSl7ZXg9Qzt9ZWxzZSBpZihldy5tb3ZlKXtleD1UO31lbHNlIGlmKGV3LmFsaWFzKXtleD1EO31yZXR1cm4ge3NvdXJjZTpidStleCtjUyxwb3NpdGlvbjpsLG9mZnNldDpbMiwxNiwyLDZdfTt9fSwiaW1hZ2UiOntzdHlsZTpmdW5jdGlvbihleSl7cmV0dXJuIHtvcGFjaXR5OiFleS5yZXBsYWNlbWVudCYmZXkuZGlzYWJsZWQ/MC4zOjF9O319LCJhdG9tIjp7fSwiYXRvbS9sYWJlbCI6Y2osImF0b20vaWNvbiI6ZEcsInBvcHVwIjp7c3R5bGU6ZnVuY3Rpb24oZXope3JldHVybiB7ZGVjb3JhdG9yOmRLLGJhY2tncm91bmRDb2xvcjpjbyxzaGFkb3c6Tn07fX0sImJ1dHRvbi1mcmFtZSI6e2FsaWFzOmRNLHN0eWxlOmZ1bmN0aW9uKGVBKXt2YXIgZUMsZUI7aWYoZUEuY2hlY2tlZCYmZUEuZm9jdXNlZCYmIWVBLmlubmVyKXtlQz1pO2VCPXVuZGVmaW5lZDt9ZWxzZSBpZihlQS5kaXNhYmxlZCl7ZUM9ZWY7ZUI9dW5kZWZpbmVkO31lbHNlIGlmKGVBLnByZXNzZWQpe2VDPWN1O2VCPWRtO31lbHNlIGlmKGVBLmNoZWNrZWQpe2VDPWJ4O2VCPXVuZGVmaW5lZDt9ZWxzZSBpZihlQS5ob3ZlcmVkKXtlQz1iSztlQj1kbTt9ZWxzZSBpZihlQS5wcmVzZWxlY3RlZCYmZUEuZm9jdXNlZCYmIWVBLmlubmVyKXtlQz1kQjtlQj1kbTt9ZWxzZSBpZihlQS5wcmVzZWxlY3RlZCl7ZUM9ajtlQj1kbTt9ZWxzZSBpZihlQS5mb2N1c2VkJiYhZUEuaW5uZXIpe2VDPWVwO2VCPXVuZGVmaW5lZDt9ZWxzZXtlQz1kSjtlQj11bmRlZmluZWQ7fXJldHVybiB7ZGVjb3JhdG9yOmVDLHRleHRDb2xvcjplQixzaGFkb3c6ZUEuaW52YWxpZCYmIWVBLmRpc2FibGVkP2N4OnVuZGVmaW5lZH07fX0sImJ1dHRvbi1mcmFtZS9pbWFnZSI6e3N0eWxlOmZ1bmN0aW9uKGVEKXtyZXR1cm4ge29wYWNpdHk6IWVELnJlcGxhY2VtZW50JiZlRC5kaXNhYmxlZD8wLjU6MX07fX0sImJ1dHRvbiI6e2FsaWFzOmROLGluY2x1ZGU6ZE4sc3R5bGU6ZnVuY3Rpb24oZUUpe3JldHVybiB7cGFkZGluZzpbMiw4XSxjZW50ZXI6dHJ1ZX07fX0sImhvdmVyLWJ1dHRvbiI6e2FsaWFzOmRNLGluY2x1ZGU6ZE0sc3R5bGU6ZnVuY3Rpb24oZUYpe3JldHVybiB7ZGVjb3JhdG9yOmVGLmhvdmVyZWQ/ZEU6dW5kZWZpbmVkLHRleHRDb2xvcjplRi5ob3ZlcmVkP2RIOnVuZGVmaW5lZH07fX0sInNwbGl0YnV0dG9uIjp7fSwic3BsaXRidXR0b24vYnV0dG9uIjpkSiwic3BsaXRidXR0b24vYXJyb3ciOnthbGlhczpkSixpbmNsdWRlOmRKLHN0eWxlOmZ1bmN0aW9uKGVHKXtyZXR1cm4ge2ljb246Y2sscGFkZGluZzoyLG1hcmdpbkxlZnQ6MX07fX0sImNoZWNrYm94Ijp7YWxpYXM6ZE0sc3R5bGU6ZnVuY3Rpb24oZUgpe3ZhciBlSjtpZihlSC5jaGVja2VkKXtpZihlSC5kaXNhYmxlZCl7ZUo9ZWo7fWVsc2UgaWYoZUguZm9jdXNlZCl7ZUo9ZHc7fWVsc2UgaWYoZUgucHJlc3NlZCl7ZUo9Y3E7fWVsc2UgaWYoZUguaG92ZXJlZCl7ZUo9Qjt9ZWxzZXtlSj1lajt9fWVsc2UgaWYoZUgudW5kZXRlcm1pbmVkKXtpZihlSC5kaXNhYmxlZCl7ZUo9ZXM7fWVsc2UgaWYoZUguZm9jdXNlZCl7ZUo9YlE7fWVsc2UgaWYoZUguaG92ZXJlZCl7ZUo9Ykc7fWVsc2V7ZUo9ZXM7fX1lbHNlIGlmKCFlSC5kaXNhYmxlZCl7aWYoZUguZm9jdXNlZCl7ZUo9Y3A7fWVsc2UgaWYoZUgucHJlc3NlZCl7ZUo9ZHM7fWVsc2UgaWYoZUguaG92ZXJlZCl7ZUo9Y3k7fX1lSj1lSnx8bTt2YXIgZUk9ZUguaW52YWxpZCYmIWVILmRpc2FibGVkP0c6SDtyZXR1cm4ge2ljb246SytlSitlSStiayxnYXA6Nn07fX0sInJhZGlvYnV0dG9uIjp7YWxpYXM6ZE0sc3R5bGU6ZnVuY3Rpb24oZUspe3ZhciBlTTtpZihlSy5jaGVja2VkJiZlSy5mb2N1c2VkKXtlTT1iZjt9ZWxzZSBpZihlSy5jaGVja2VkJiZlSy5kaXNhYmxlZCl7ZU09Y1A7fWVsc2UgaWYoZUsuY2hlY2tlZCYmZUsucHJlc3NlZCl7ZU09Y1I7fWVsc2UgaWYoZUsuY2hlY2tlZCYmZUsuaG92ZXJlZCl7ZU09YmQ7fWVsc2UgaWYoZUsuY2hlY2tlZCl7ZU09Y1Y7fWVsc2UgaWYoZUsuZm9jdXNlZCl7ZU09Ymg7fWVsc2UgaWYoZUsucHJlc3NlZCl7ZU09Y0s7fWVsc2UgaWYoZUsuaG92ZXJlZCl7ZU09Yno7fWVsc2V7ZU09ZGk7fXZhciBlTD1lSy5pbnZhbGlkJiYhZUsuZGlzYWJsZWQ/RzpIO3JldHVybiB7aWNvbjpLK2VNK2VMK2JrLGdhcDo2fTt9fSwidGV4dGZpZWxkIjp7c3R5bGU6ZnVuY3Rpb24oZU4pe3ZhciBlUzt2YXIgZVE9ISFlTi5mb2N1c2VkO3ZhciBlUj0hIWVOLmludmFsaWQ7dmFyIGVPPSEhZU4uZGlzYWJsZWQ7aWYoZVEmJmVSJiYhZU8pe2VTPWRWO31lbHNlIGlmKGVRJiYhZVImJiFlTyl7ZVM9ZFE7fWVsc2UgaWYoZU8pe2VTPWNmO31lbHNlIGlmKCFlUSYmZVImJiFlTyl7ZVM9Y2k7fWVsc2V7ZVM9Y2g7fXZhciBlUDtpZihlTi5kaXNhYmxlZCl7ZVA9Y207fWVsc2UgaWYoZU4uc2hvd2luZ1BsYWNlaG9sZGVyKXtlUD1jYTt9ZWxzZXtlUD1lcjt9cmV0dXJuIHtkZWNvcmF0b3I6ZVMscGFkZGluZzpbMiw0LDFdLHRleHRDb2xvcjplUH07fX0sInRleHRhcmVhIjp7aW5jbHVkZTpkbixzdHlsZTpmdW5jdGlvbihlVCl7cmV0dXJuIHtwYWRkaW5nOjR9O319LCJzcGlubmVyIjp7c3R5bGU6ZnVuY3Rpb24oZVUpe3ZhciBlWTt2YXIgZVc9ISFlVS5mb2N1c2VkO3ZhciBlWD0hIWVVLmludmFsaWQ7dmFyIGVWPSEhZVUuZGlzYWJsZWQ7aWYoZVcmJmVYJiYhZVYpe2VZPWRWO31lbHNlIGlmKGVXJiYhZVgmJiFlVil7ZVk9ZFE7fWVsc2UgaWYoZVYpe2VZPWNmO31lbHNlIGlmKCFlVyYmZVgmJiFlVil7ZVk9Y2k7fWVsc2V7ZVk9Y2g7fXJldHVybiB7ZGVjb3JhdG9yOmVZfTt9fSwic3Bpbm5lci90ZXh0ZmllbGQiOntzdHlsZTpmdW5jdGlvbihmYSl7cmV0dXJuIHttYXJnaW5SaWdodDoyLHBhZGRpbmc6WzIsNCwxXSx0ZXh0Q29sb3I6ZmEuZGlzYWJsZWQ/Y206ZXJ9O319LCJzcGlubmVyL3VwYnV0dG9uIjp7YWxpYXM6ZE4saW5jbHVkZTpkTixzdHlsZTpmdW5jdGlvbihmYil7cmV0dXJuIHtpY29uOlEscGFkZGluZzpmYi5wcmVzc2VkP1syLDIsMCw0XTpbMSwzLDEsM10sc2hhZG93OnVuZGVmaW5lZH07fX0sInNwaW5uZXIvZG93bmJ1dHRvbiI6e2FsaWFzOmROLGluY2x1ZGU6ZE4sc3R5bGU6ZnVuY3Rpb24oZmMpe3JldHVybiB7aWNvbjpicixwYWRkaW5nOmZjLnByZXNzZWQ/WzIsMiwwLDRdOlsxLDMsMSwzXSxzaGFkb3c6dW5kZWZpbmVkfTt9fSwiZGF0ZWZpZWxkIjprLCJkYXRlZmllbGQvYnV0dG9uIjp7YWxpYXM6cyxpbmNsdWRlOnMsc3R5bGU6ZnVuY3Rpb24oZmQpe3JldHVybiB7aWNvbjpkZSxwYWRkaW5nOlswLDNdLGRlY29yYXRvcjp1bmRlZmluZWR9O319LCJkYXRlZmllbGQvdGV4dGZpZWxkIjpkeSwiZGF0ZWZpZWxkL2xpc3QiOnthbGlhczpibyxpbmNsdWRlOmJvLHN0eWxlOmZ1bmN0aW9uKGZlKXtyZXR1cm4ge2RlY29yYXRvcjp1bmRlZmluZWR9O319LCJncm91cGJveCI6e3N0eWxlOmZ1bmN0aW9uKGZmKXtyZXR1cm4ge2xlZ2VuZFBvc2l0aW9uOlJ9O319LCJncm91cGJveC9sZWdlbmQiOnthbGlhczpkTSxzdHlsZTpmdW5jdGlvbihmZyl7cmV0dXJuIHtwYWRkaW5nOlsxLDAsMSw0XSx0ZXh0Q29sb3I6ZmcuaW52YWxpZD9kaDpuLGZvbnQ6ZEl9O319LCJncm91cGJveC9mcmFtZSI6e3N0eWxlOmZ1bmN0aW9uKGZoKXtyZXR1cm4ge3BhZGRpbmc6MTIsZGVjb3JhdG9yOmRmfTt9fSwiY2hlY2stZ3JvdXBib3giOmNsLCJjaGVjay1ncm91cGJveC9sZWdlbmQiOnthbGlhczptLGluY2x1ZGU6bSxzdHlsZTpmdW5jdGlvbihmaSl7cmV0dXJuIHtwYWRkaW5nOlsxLDAsMSw0XSx0ZXh0Q29sb3I6ZmkuaW52YWxpZD9kaDpuLGZvbnQ6ZEl9O319LCJyYWRpby1ncm91cGJveCI6Y2wsInJhZGlvLWdyb3VwYm94L2xlZ2VuZCI6e2FsaWFzOmRpLGluY2x1ZGU6ZGksc3R5bGU6ZnVuY3Rpb24oZmope3JldHVybiB7cGFkZGluZzpbMSwwLDEsNF0sdGV4dENvbG9yOmZqLmludmFsaWQ/ZGg6bixmb250OmRJfTt9fSwic2Nyb2xsYXJlYSI6e3N0eWxlOmZ1bmN0aW9uKGZrKXtyZXR1cm4ge21pbldpZHRoOjUwLG1pbkhlaWdodDo1MH07fX0sInNjcm9sbGFyZWEvY29ybmVyIjp7c3R5bGU6ZnVuY3Rpb24oZmwpe3JldHVybiB7YmFja2dyb3VuZENvbG9yOmRxfTt9fSwic2Nyb2xsYXJlYS9wYW5lIjpkTCwic2Nyb2xsYXJlYS9zY3JvbGxiYXIteCI6ZGssInNjcm9sbGFyZWEvc2Nyb2xsYmFyLXkiOmRrLCJzY3JvbGxiYXIiOntzdHlsZTpmdW5jdGlvbihmbSl7aWYoZm1bY3pdKXtyZXR1cm4ge307fXJldHVybiB7d2lkdGg6Zm0uaG9yaXpvbnRhbD91bmRlZmluZWQ6MTYsaGVpZ2h0OmZtLmhvcml6b250YWw/MTY6dW5kZWZpbmVkLGRlY29yYXRvcjpmbS5ob3Jpem9udGFsP2JQOmVkLHBhZGRpbmc6MX07fX0sInNjcm9sbGJhci9zbGlkZXIiOnthbGlhczpjYixzdHlsZTpmdW5jdGlvbihmbil7cmV0dXJuIHtwYWRkaW5nOmZuLmhvcml6b250YWw/WzAsMSwwLDFdOlsxLDAsMSwwXX07fX0sInNjcm9sbGJhci9zbGlkZXIva25vYiI6e2luY2x1ZGU6ZE4sc3R5bGU6ZnVuY3Rpb24oZm8pe3ZhciBmcD1mby5ob3Jpem9udGFsP2VrOnk7aWYoZm8uZGlzYWJsZWQpe2ZwKz1iTzt9cmV0dXJuIHtkZWNvcmF0b3I6ZnAsbWluSGVpZ2h0OmZvLmhvcml6b250YWw/dW5kZWZpbmVkOjksbWluV2lkdGg6Zm8uaG9yaXpvbnRhbD85OnVuZGVmaW5lZH07fX0sInNjcm9sbGJhci9idXR0b24iOnthbGlhczpkTixpbmNsdWRlOmROLHN0eWxlOmZ1bmN0aW9uKGZxKXt2YXIgZnI9Ykw7aWYoZnEubGVmdCl7ZnIrPWREO31lbHNlIGlmKGZxLnJpZ2h0KXtmcis9YkY7fWVsc2UgaWYoZnEudXApe2ZyKz1oO31lbHNle2ZyKz1jZDt9aWYoZnEubGVmdHx8ZnEucmlnaHQpe3JldHVybiB7cGFkZGluZzpbMCwwLDAsZnEubGVmdD8zOjRdLGljb246ZnIsd2lkdGg6MTUsaGVpZ2h0OjE0fTt9ZWxzZXtyZXR1cm4ge3BhZGRpbmc6WzAsMCwwLDJdLGljb246ZnIsd2lkdGg6MTQsaGVpZ2h0OjE1fTt9fX0sInNjcm9sbGJhci9idXR0b24tYmVnaW4iOnEsInNjcm9sbGJhci9idXR0b24tZW5kIjpxLCJzbGlkZXIiOntzdHlsZTpmdW5jdGlvbihmcyl7dmFyIGZ3O3ZhciBmdT0hIWZzLmZvY3VzZWQ7dmFyIGZ2PSEhZnMuaW52YWxpZDt2YXIgZnQ9ISFmcy5kaXNhYmxlZDtpZihmdSYmZnYmJiFmdCl7Znc9ZFY7fWVsc2UgaWYoZnUmJiFmdiYmIWZ0KXtmdz1kUTt9ZWxzZSBpZihmdCl7Znc9Y2Y7fWVsc2UgaWYoIWZ1JiZmdiYmIWZ0KXtmdz1jaTt9ZWxzZXtmdz1jaDt9cmV0dXJuIHtkZWNvcmF0b3I6Znd9O319LCJzbGlkZXIva25vYiI6e2luY2x1ZGU6ZE4sc3R5bGU6ZnVuY3Rpb24oZngpe3JldHVybiB7ZGVjb3JhdG9yOmZ4LmRpc2FibGVkP2N3OmVrLHNoYWRvdzp1bmRlZmluZWQsaGVpZ2h0OjE0LHdpZHRoOjE0fTt9fSwibGlzdCI6e2FsaWFzOmVjLHN0eWxlOmZ1bmN0aW9uKGZ5KXt2YXIgZkM7dmFyIGZBPSEhZnkuZm9jdXNlZDt2YXIgZkI9ISFmeS5pbnZhbGlkO3ZhciBmej0hIWZ5LmRpc2FibGVkO2lmKGZBJiZmQiYmIWZ6KXtmQz1kVjt9ZWxzZSBpZihmQSYmIWZCJiYhZnope2ZDPWRRO31lbHNlIGlmKGZ6KXtmQz1jZjt9ZWxzZSBpZighZkEmJmZCJiYhZnope2ZDPWNpO31lbHNle2ZDPWNoO31yZXR1cm4ge2JhY2tncm91bmRDb2xvcjpjbyxkZWNvcmF0b3I6ZkN9O319LCJsaXN0L3BhbmUiOmRMLCJsaXN0aXRlbSI6e2FsaWFzOmRNLHN0eWxlOmZ1bmN0aW9uKGZEKXt2YXIgZkU7aWYoZkQuZHJhZ292ZXIpe2ZFPWZELnNlbGVjdGVkP2VnOmViO31lbHNle2ZFPWZELnNlbGVjdGVkP2RFOnVuZGVmaW5lZDt9cmV0dXJuIHtwYWRkaW5nOmZELmRyYWdvdmVyP1s0LDQsMiw0XTo0LHRleHRDb2xvcjpmRC5zZWxlY3RlZD9kSDp1bmRlZmluZWQsZGVjb3JhdG9yOmZFfTt9fSwic2xpZGViYXIiOnt9LCJzbGlkZWJhci9zY3JvbGxwYW5lIjp7fSwic2xpZGViYXIvY29udGVudCI6e30sInNsaWRlYmFyL2J1dHRvbi1mb3J3YXJkIjp7YWxpYXM6ZE4saW5jbHVkZTpkTixzdHlsZTpmdW5jdGlvbihmRil7cmV0dXJuIHtwYWRkaW5nOjUsY2VudGVyOnRydWUsaWNvbjpmRi52ZXJ0aWNhbD9jazpkcn07fX0sInNsaWRlYmFyL2J1dHRvbi1iYWNrd2FyZCI6e2FsaWFzOmROLGluY2x1ZGU6ZE4sc3R5bGU6ZnVuY3Rpb24oZkcpe3JldHVybiB7cGFkZGluZzo1LGNlbnRlcjp0cnVlLGljb246ZkcudmVydGljYWw/TDplcX07fX0sInRhYnZpZXciOntzdHlsZTpmdW5jdGlvbihmSCl7cmV0dXJuIHtjb250ZW50UGFkZGluZzoxNn07fX0sInRhYnZpZXcvYmFyIjp7YWxpYXM6YnYsc3R5bGU6ZnVuY3Rpb24oZkkpe3ZhciBmSj17bWFyZ2luQm90dG9tOmZJLmJhclRvcD8tMTowLG1hcmdpblRvcDpmSS5iYXJCb3R0b20/LTQ6MCxtYXJnaW5MZWZ0OmZJLmJhclJpZ2h0Py0zOjAsbWFyZ2luUmlnaHQ6ZkkuYmFyTGVmdD8tMTowLHBhZGRpbmdUb3A6MCxwYWRkaW5nUmlnaHQ6MCxwYWRkaW5nQm90dG9tOjAscGFkZGluZ0xlZnQ6MH07aWYoZkkuYmFyVG9wfHxmSS5iYXJCb3R0b20pe2ZKLnBhZGRpbmdMZWZ0PTU7ZkoucGFkZGluZ1JpZ2h0PTc7fWVsc2V7ZkoucGFkZGluZ1RvcD01O2ZKLnBhZGRpbmdCb3R0b209Nzt9cmV0dXJuIGZKO319LCJ0YWJ2aWV3L2Jhci9idXR0b24tZm9yd2FyZCI6e2luY2x1ZGU6Ym0sYWxpYXM6Ym0sc3R5bGU6ZnVuY3Rpb24oZkspe2lmKGZLLmJhclRvcHx8ZksuYmFyQm90dG9tKXtyZXR1cm4ge21hcmdpblRvcDoyLG1hcmdpbkJvdHRvbToyfTt9ZWxzZXtyZXR1cm4ge21hcmdpbkxlZnQ6MixtYXJnaW5SaWdodDoyfTt9fX0sInRhYnZpZXcvYmFyL2J1dHRvbi1iYWNrd2FyZCI6e2luY2x1ZGU6YnAsYWxpYXM6YnAsc3R5bGU6ZnVuY3Rpb24oZkwpe2lmKGZMLmJhclRvcHx8ZkwuYmFyQm90dG9tKXtyZXR1cm4ge21hcmdpblRvcDoyLG1hcmdpbkJvdHRvbToyfTt9ZWxzZXtyZXR1cm4ge21hcmdpbkxlZnQ6MixtYXJnaW5SaWdodDoyfTt9fX0sInRhYnZpZXcvYmFyL3Njcm9sbHBhbmUiOnt9LCJ0YWJ2aWV3L3BhbmUiOntzdHlsZTpmdW5jdGlvbihmTSl7cmV0dXJuIHtkZWNvcmF0b3I6Y0wsbWluSGVpZ2h0OjEwMCxtYXJnaW5Cb3R0b206Zk0uYmFyQm90dG9tPy0xOjAsbWFyZ2luVG9wOmZNLmJhclRvcD8tMTowLG1hcmdpbkxlZnQ6Zk0uYmFyTGVmdD8tMTowLG1hcmdpblJpZ2h0OmZNLmJhclJpZ2h0Py0xOjB9O319LCJ0YWJ2aWV3LXBhZ2UiOmRMLCJ0YWJ2aWV3LXBhZ2UvYnV0dG9uIjp7YWxpYXM6ZE0sc3R5bGU6ZnVuY3Rpb24oZk4pe3ZhciBmVCxmUD0wO3ZhciBmUz0wLGZPPTAsZlE9MCxmUj0wO2lmKGZOLmNoZWNrZWQpe2lmKGZOLmJhclRvcCl7ZlQ9Y2U7ZlA9WzYsMTRdO2ZRPWZOLmZpcnN0VGFiPzA6LTU7ZlI9Zk4ubGFzdFRhYj8wOi01O31lbHNlIGlmKGZOLmJhckJvdHRvbSl7ZlQ9Y0Y7ZlA9WzYsMTRdO2ZRPWZOLmZpcnN0VGFiPzA6LTU7ZlI9Zk4ubGFzdFRhYj8wOi01O31lbHNlIGlmKGZOLmJhclJpZ2h0KXtmVD1iTjtmUD1bNiwxM107ZlM9Zk4uZmlyc3RUYWI/MDotNTtmTz1mTi5sYXN0VGFiPzA6LTU7fWVsc2V7ZlQ9Y047ZlA9WzYsMTNdO2ZTPWZOLmZpcnN0VGFiPzA6LTU7Zk89Zk4ubGFzdFRhYj8wOi01O319ZWxzZXtpZihmTi5iYXJUb3Ape2ZUPWRkO2ZQPVs0LDEwXTtmUz00O2ZRPWZOLmZpcnN0VGFiPzU6MTtmUj0xO31lbHNlIGlmKGZOLmJhckJvdHRvbSl7ZlQ9Ykg7ZlA9WzQsMTBdO2ZPPTQ7ZlE9Zk4uZmlyc3RUYWI/NToxO2ZSPTE7fWVsc2UgaWYoZk4uYmFyUmlnaHQpe2ZUPWR2O2ZQPVs0LDEwXTtmUj01O2ZTPWZOLmZpcnN0VGFiPzU6MTtmTz0xO2ZRPTE7fWVsc2V7ZlQ9ZGE7ZlA9WzQsMTBdO2ZRPTU7ZlM9Zk4uZmlyc3RUYWI/NToxO2ZPPTE7ZlI9MTt9fXJldHVybiB7ekluZGV4OmZOLmNoZWNrZWQ/MTA6NSxkZWNvcmF0b3I6ZlQscGFkZGluZzpmUCxtYXJnaW5Ub3A6ZlMsbWFyZ2luQm90dG9tOmZPLG1hcmdpbkxlZnQ6ZlEsbWFyZ2luUmlnaHQ6ZlIsdGV4dENvbG9yOmZOLmNoZWNrZWQ/ZDpVfTt9fSwidGFidmlldy1wYWdlL2J1dHRvbi9sYWJlbCI6e2FsaWFzOmNqLHN0eWxlOmZ1bmN0aW9uKGZVKXtyZXR1cm4ge3BhZGRpbmc6WzAsMSwwLDFdLG1hcmdpbjpmVS5mb2N1c2VkPzA6MSxkZWNvcmF0b3I6ZlUuZm9jdXNlZD9iQTp1bmRlZmluZWR9O319LCJ0YWJ2aWV3LXBhZ2UvYnV0dG9uL2Nsb3NlLWJ1dHRvbiI6e2FsaWFzOmRNLHN0eWxlOmZ1bmN0aW9uKGZWKXtyZXR1cm4ge2ljb246ZHR9O319LCJ0b29sYmFyIjp7c3R5bGU6ZnVuY3Rpb24oZlcpe3JldHVybiB7ZGVjb3JhdG9yOnosc3BhY2luZzoyfTt9fSwidG9vbGJhci9wYXJ0Ijp7c3R5bGU6ZnVuY3Rpb24oZlgpe3JldHVybiB7ZGVjb3JhdG9yOmNNLHNwYWNpbmc6Mn07fX0sInRvb2xiYXIvcGFydC9jb250YWluZXIiOntzdHlsZTpmdW5jdGlvbihmWSl7cmV0dXJuIHtwYWRkaW5nTGVmdDoyLHBhZGRpbmdSaWdodDoyfTt9fSwidG9vbGJhci9wYXJ0L2hhbmRsZSI6e3N0eWxlOmZ1bmN0aW9uKGdhKXtyZXR1cm4ge3NvdXJjZTpkWSxtYXJnaW5MZWZ0OjMsbWFyZ2luUmlnaHQ6M307fX0sInRvb2xiYXItYnV0dG9uIjp7YWxpYXM6ZE0sc3R5bGU6ZnVuY3Rpb24oZ2Ipe3JldHVybiB7bWFyZ2luVG9wOjIsbWFyZ2luQm90dG9tOjIscGFkZGluZzooZ2IucHJlc3NlZHx8Z2IuY2hlY2tlZHx8Z2IuaG92ZXJlZCkmJiFnYi5kaXNhYmxlZHx8KGdiLmRpc2FibGVkJiZnYi5jaGVja2VkKT8zOjUsZGVjb3JhdG9yOmdiLnByZXNzZWR8fChnYi5jaGVja2VkJiYhZ2IuaG92ZXJlZCl8fChnYi5jaGVja2VkJiZnYi5kaXNhYmxlZCk/Y1g6Z2IuaG92ZXJlZCYmIWdiLmRpc2FibGVkP2M6dW5kZWZpbmVkfTt9fSwidG9vbGJhci1tZW51YnV0dG9uIjp7YWxpYXM6ZFMsaW5jbHVkZTpkUyxzdHlsZTpmdW5jdGlvbihnYyl7cmV0dXJuIHtzaG93QXJyb3c6dHJ1ZX07fX0sInRvb2xiYXItbWVudWJ1dHRvbi9hcnJvdyI6e2FsaWFzOmRHLGluY2x1ZGU6ZEcsc3R5bGU6ZnVuY3Rpb24oZ2Qpe3JldHVybiB7c291cmNlOmJyfTt9fSwidG9vbGJhci1zcGxpdGJ1dHRvbiI6e3N0eWxlOmZ1bmN0aW9uKGdlKXtyZXR1cm4ge21hcmdpblRvcDoyLG1hcmdpbkJvdHRvbToyfTt9fSwidG9vbGJhci1zcGxpdGJ1dHRvbi9idXR0b24iOnthbGlhczpkUyxpbmNsdWRlOmRTLHN0eWxlOmZ1bmN0aW9uKGdmKXtyZXR1cm4ge2ljb246Y2ssbWFyZ2luVG9wOnVuZGVmaW5lZCxtYXJnaW5Cb3R0b206dW5kZWZpbmVkfTt9fSwidG9vbGJhci1zcGxpdGJ1dHRvbi9hcnJvdyI6e2FsaWFzOmRTLGluY2x1ZGU6ZFMsc3R5bGU6ZnVuY3Rpb24oZ2cpe2lmKGdnLnByZXNzZWR8fGdnLmNoZWNrZWR8fChnZy5ob3ZlcmVkJiYhZ2cuZGlzYWJsZWQpKXt2YXIgZ2g9MTt9ZWxzZXt2YXIgZ2g9Mzt9cmV0dXJuIHtwYWRkaW5nOmdoLGljb246Y2ssbWFyZ2luVG9wOnVuZGVmaW5lZCxtYXJnaW5Cb3R0b206dW5kZWZpbmVkfTt9fSwidG9vbGJhci1zZXBhcmF0b3IiOntzdHlsZTpmdW5jdGlvbihnaSl7cmV0dXJuIHtkZWNvcmF0b3I6Y0csbWFyZ2luOjd9O319LCJ0cmVlIjpkUCwidHJlZS1pdGVtIjp7c3R5bGU6ZnVuY3Rpb24oZ2ope3JldHVybiB7cGFkZGluZzpbMiw2XSx0ZXh0Q29sb3I6Z2ouc2VsZWN0ZWQ/ZEg6dW5kZWZpbmVkLGRlY29yYXRvcjpnai5zZWxlY3RlZD9kRTp1bmRlZmluZWR9O319LCJ0cmVlLWl0ZW0vaWNvbiI6e2luY2x1ZGU6ZEcsc3R5bGU6ZnVuY3Rpb24oZ2spe3JldHVybiB7cGFkZGluZ1JpZ2h0OjV9O319LCJ0cmVlLWl0ZW0vbGFiZWwiOmNqLCJ0cmVlLWl0ZW0vb3BlbiI6e2luY2x1ZGU6ZEcsc3R5bGU6ZnVuY3Rpb24oZ2wpe3ZhciBnbTtpZihnbC5zZWxlY3RlZCYmZ2wub3BlbmVkKXtnbT1jWTt9ZWxzZSBpZihnbC5zZWxlY3RlZCYmIWdsLm9wZW5lZCl7Z209Zjt9ZWxzZSBpZihnbC5vcGVuZWQpe2dtPWJsO31lbHNle2dtPWVsO31yZXR1cm4ge3BhZGRpbmc6WzAsNSwwLDJdLHNvdXJjZTpnbX07fX0sInRyZWUtZm9sZGVyIjp7aW5jbHVkZTpkVyxhbGlhczpkVyxzdHlsZTpmdW5jdGlvbihnbil7dmFyIGdwLGdvO2lmKGduLnNtYWxsKXtncD1nbi5vcGVuZWQ/bzp0O2dvPW87fWVsc2UgaWYoZ24ubGFyZ2Upe2dwPWduLm9wZW5lZD9POmNIO2dvPU87fWVsc2V7Z3A9Z24ub3BlbmVkP0o6YlQ7Z289Sjt9cmV0dXJuIHtpY29uOmdwLGljb25PcGVuZWQ6Z299O319LCJ0cmVlLWZpbGUiOntpbmNsdWRlOmRXLGFsaWFzOmRXLHN0eWxlOmZ1bmN0aW9uKGdxKXtyZXR1cm4ge2ljb246Z3Euc21hbGw/TTpncS5sYXJnZT9jQzplYX07fX0sInRyZWV2aXJ0dWFsIjpJLCJ0cmVldmlydHVhbC1mb2xkZXIiOntzdHlsZTpmdW5jdGlvbihncil7cmV0dXJuIHtpY29uOmdyLm9wZW5lZD9vOnR9O319LCJ0cmVldmlydHVhbC1maWxlIjp7aW5jbHVkZTpiaixhbGlhczpiaixzdHlsZTpmdW5jdGlvbihncyl7cmV0dXJuIHtpY29uOk19O319LCJ0cmVldmlydHVhbC1saW5lIjp7c3R5bGU6ZnVuY3Rpb24oZ3Qpe3JldHVybiB7aWNvbjpwfTt9fSwidHJlZXZpcnR1YWwtY29udHJhY3QiOntzdHlsZTpmdW5jdGlvbihndSl7cmV0dXJuIHtpY29uOmJsLHBhZGRpbmdMZWZ0OjUscGFkZGluZ1RvcDoyfTt9fSwidHJlZXZpcnR1YWwtZXhwYW5kIjp7c3R5bGU6ZnVuY3Rpb24oZ3Ype3JldHVybiB7aWNvbjplbCxwYWRkaW5nTGVmdDo1LHBhZGRpbmdUb3A6Mn07fX0sInRyZWV2aXJ0dWFsLW9ubHktY29udHJhY3QiOmRYLCJ0cmVldmlydHVhbC1vbmx5LWV4cGFuZCI6ZHAsInRyZWV2aXJ0dWFsLXN0YXJ0LWNvbnRyYWN0IjpkWCwidHJlZXZpcnR1YWwtc3RhcnQtZXhwYW5kIjpkcCwidHJlZXZpcnR1YWwtZW5kLWNvbnRyYWN0IjpkWCwidHJlZXZpcnR1YWwtZW5kLWV4cGFuZCI6ZHAsInRyZWV2aXJ0dWFsLWNyb3NzLWNvbnRyYWN0IjpkWCwidHJlZXZpcnR1YWwtY3Jvc3MtZXhwYW5kIjpkcCwidHJlZXZpcnR1YWwtZW5kIjp7c3R5bGU6ZnVuY3Rpb24oZ3cpe3JldHVybiB7aWNvbjpwfTt9fSwidHJlZXZpcnR1YWwtY3Jvc3MiOntzdHlsZTpmdW5jdGlvbihneCl7cmV0dXJuIHtpY29uOnB9O319LCJ0b29sdGlwIjp7aW5jbHVkZTpkUixzdHlsZTpmdW5jdGlvbihneSl7cmV0dXJuIHtiYWNrZ3JvdW5kQ29sb3I6Yk0scGFkZGluZzpbMSwzLDIsM10sb2Zmc2V0OlsxNSw1LDUsNV19O319LCJ0b29sdGlwL2F0b20iOmRNLCJ0b29sdGlwLWVycm9yIjp7aW5jbHVkZTpkTyxzdHlsZTpmdW5jdGlvbihneil7cmV0dXJuIHt0ZXh0Q29sb3I6ZEgscGxhY2VNZXRob2Q6ZEwsb2Zmc2V0OlswLDAsMCwxNF0sbWFyZ2luVG9wOi0yLHBvc2l0aW9uOmwsc2hvd1RpbWVvdXQ6MTAwLGhpZGVUaW1lb3V0OjEwMDAwLGRlY29yYXRvcjpiSSxzaGFkb3c6YncsZm9udDpkSX07fX0sInRvb2x0aXAtZXJyb3IvYXRvbSI6ZE0sIndpbmRvdyI6e3N0eWxlOmZ1bmN0aW9uKGdBKXtyZXR1cm4ge3NoYWRvdzpiRCxjb250ZW50UGFkZGluZzpbMTAsMTAsMTAsMTBdfTt9fSwid2luZG93L3BhbmUiOntzdHlsZTpmdW5jdGlvbihnQil7cmV0dXJuIHtkZWNvcmF0b3I6Yld9O319LCJ3aW5kb3cvY2FwdGlvbmJhciI6e3N0eWxlOmZ1bmN0aW9uKGdDKXtyZXR1cm4ge2RlY29yYXRvcjpnQy5hY3RpdmU/QTpjSix0ZXh0Q29sb3I6Z0MuYWN0aXZlP2NnOmJYLG1pbkhlaWdodDoyNixwYWRkaW5nUmlnaHQ6Mn07fX0sIndpbmRvdy9pY29uIjp7c3R5bGU6ZnVuY3Rpb24oZ0Qpe3JldHVybiB7bWFyZ2luOls1LDAsMyw2XX07fX0sIndpbmRvdy90aXRsZSI6e3N0eWxlOmZ1bmN0aW9uKGdFKXtyZXR1cm4ge2FsaWduWTpkRixmb250OmRJLG1hcmdpbkxlZnQ6NixtYXJnaW5SaWdodDoxMn07fX0sIndpbmRvdy9taW5pbWl6ZS1idXR0b24iOnthbGlhczpkTSxzdHlsZTpmdW5jdGlvbihnRil7cmV0dXJuIHtpY29uOmdGLmFjdGl2ZT9nRi5ob3ZlcmVkP2NFOmR1OmNXLG1hcmdpbjpbNCw4LDIsMF19O319LCJ3aW5kb3cvcmVzdG9yZS1idXR0b24iOnthbGlhczpkTSxzdHlsZTpmdW5jdGlvbihnRyl7cmV0dXJuIHtpY29uOmdHLmFjdGl2ZT9nRy5ob3ZlcmVkP2JlOkU6ZHgsbWFyZ2luOls1LDgsMiwwXX07fX0sIndpbmRvdy9tYXhpbWl6ZS1idXR0b24iOnthbGlhczpkTSxzdHlsZTpmdW5jdGlvbihnSCl7cmV0dXJuIHtpY29uOmdILmFjdGl2ZT9nSC5ob3ZlcmVkP2J5OmJVOmVpLG1hcmdpbjpbNCw4LDIsMF19O319LCJ3aW5kb3cvY2xvc2UtYnV0dG9uIjp7YWxpYXM6ZE0sc3R5bGU6ZnVuY3Rpb24oZ0kpe3JldHVybiB7aWNvbjpnSS5hY3RpdmU/Z0kuaG92ZXJlZD9kQTpjQTpjTyxtYXJnaW46WzQsOCwyLDBdfTt9fSwid2luZG93L3N0YXR1c2JhciI6e3N0eWxlOmZ1bmN0aW9uKGdKKXtyZXR1cm4ge3BhZGRpbmc6WzIsNl0sZGVjb3JhdG9yOmJKLG1pbkhlaWdodDoxOH07fX0sIndpbmRvdy9zdGF0dXNiYXItdGV4dCI6e3N0eWxlOmZ1bmN0aW9uKGdLKXtyZXR1cm4ge2ZvbnQ6U307fX0sImlmcmFtZSI6e3N0eWxlOmZ1bmN0aW9uKGdMKXtyZXR1cm4ge2RlY29yYXRvcjpkS307fX0sInJlc2l6ZXIiOntzdHlsZTpmdW5jdGlvbihnTSl7cmV0dXJuIHtkZWNvcmF0b3I6ZGd9O319LCJzcGxpdHBhbmUiOntzdHlsZTpmdW5jdGlvbihnTil7cmV0dXJuIHtkZWNvcmF0b3I6ZHp9O319LCJzcGxpdHBhbmUvc3BsaXR0ZXIiOntzdHlsZTpmdW5jdGlvbihnTyl7cmV0dXJuIHt3aWR0aDpnTy5ob3Jpem9udGFsPzM6dW5kZWZpbmVkLGhlaWdodDpnTy52ZXJ0aWNhbD8zOnVuZGVmaW5lZCxiYWNrZ3JvdW5kQ29sb3I6Ym59O319LCJzcGxpdHBhbmUvc3BsaXR0ZXIva25vYiI6e3N0eWxlOmZ1bmN0aW9uKGdQKXtyZXR1cm4ge3NvdXJjZTpnUC5ob3Jpem9udGFsP2JzOmNUfTt9fSwic3BsaXRwYW5lL3NsaWRlciI6e3N0eWxlOmZ1bmN0aW9uKGdRKXtyZXR1cm4ge3dpZHRoOmdRLmhvcml6b250YWw/Mzp1bmRlZmluZWQsaGVpZ2h0OmdRLnZlcnRpY2FsPzM6dW5kZWZpbmVkLGJhY2tncm91bmRDb2xvcjpibn07fX0sInNlbGVjdGJveCI6e2FsaWFzOmROLGluY2x1ZGU6ZE4sc3R5bGU6ZnVuY3Rpb24oZ1Ipe3JldHVybiB7cGFkZGluZzpbMiw4XX07fX0sInNlbGVjdGJveC9hdG9tIjpkTSwic2VsZWN0Ym94L3BvcHVwIjpkUiwic2VsZWN0Ym94L2xpc3QiOnthbGlhczpkUH0sInNlbGVjdGJveC9hcnJvdyI6e2luY2x1ZGU6ZEcsc3R5bGU6ZnVuY3Rpb24oZ1Mpe3JldHVybiB7c291cmNlOmNrLHBhZGRpbmdMZWZ0OjV9O319LCJkYXRlY2hvb3NlciI6e3N0eWxlOmZ1bmN0aW9uKGdUKXt2YXIgZ1g7dmFyIGdWPSEhZ1QuZm9jdXNlZDt2YXIgZ1c9ISFnVC5pbnZhbGlkO3ZhciBnVT0hIWdULmRpc2FibGVkO2lmKGdWJiZnVyYmIWdVKXtnWD1kVjt9ZWxzZSBpZihnViYmIWdXJiYhZ1Upe2dYPWRRO31lbHNlIGlmKGdVKXtnWD1jZjt9ZWxzZSBpZighZ1YmJmdXJiYhZ1Upe2dYPWNpO31lbHNle2dYPWNoO31yZXR1cm4ge3BhZGRpbmc6MixkZWNvcmF0b3I6Z1gsYmFja2dyb3VuZENvbG9yOmNvfTt9fSwiZGF0ZWNob29zZXIvbmF2aWdhdGlvbi1iYXIiOnt9LCJkYXRlY2hvb3Nlci9uYXYtYnV0dG9uIjp7aW5jbHVkZTpkTixhbGlhczpkTixzdHlsZTpmdW5jdGlvbihnWSl7dmFyIGhhPXtwYWRkaW5nOlsyLDRdLHNoYWRvdzp1bmRlZmluZWR9O2lmKGdZLmxhc3RZZWFyKXtoYS5pY29uPWNyO2hhLm1hcmdpblJpZ2h0PTE7fWVsc2UgaWYoZ1kubGFzdE1vbnRoKXtoYS5pY29uPWVxO31lbHNlIGlmKGdZLm5leHRZZWFyKXtoYS5pY29uPXg7aGEubWFyZ2luTGVmdD0xO31lbHNlIGlmKGdZLm5leHRNb250aCl7aGEuaWNvbj1kcjt9cmV0dXJuIGhhO319LCJkYXRlY2hvb3Nlci9sYXN0LXllYXItYnV0dG9uLXRvb2x0aXAiOmRPLCJkYXRlY2hvb3Nlci9sYXN0LW1vbnRoLWJ1dHRvbi10b29sdGlwIjpkTywiZGF0ZWNob29zZXIvbmV4dC15ZWFyLWJ1dHRvbi10b29sdGlwIjpkTywiZGF0ZWNob29zZXIvbmV4dC1tb250aC1idXR0b24tdG9vbHRpcCI6ZE8sImRhdGVjaG9vc2VyL2xhc3QteWVhci1idXR0b24iOmRqLCJkYXRlY2hvb3Nlci9sYXN0LW1vbnRoLWJ1dHRvbiI6ZGosImRhdGVjaG9vc2VyL25leHQtbW9udGgtYnV0dG9uIjpkaiwiZGF0ZWNob29zZXIvbmV4dC15ZWFyLWJ1dHRvbiI6ZGosImRhdGVjaG9vc2VyL21vbnRoLXllYXItbGFiZWwiOntzdHlsZTpmdW5jdGlvbihoYil7cmV0dXJuIHtmb250OmRJLHRleHRBbGlnbjpkbCx0ZXh0Q29sb3I6aGIuZGlzYWJsZWQ/Y206dW5kZWZpbmVkfTt9fSwiZGF0ZWNob29zZXIvZGF0ZS1wYW5lIjp7c3R5bGU6ZnVuY3Rpb24oaGMpe3JldHVybiB7dGV4dENvbG9yOmhjLmRpc2FibGVkP2NtOnVuZGVmaW5lZCxtYXJnaW5Ub3A6Mn07fX0sImRhdGVjaG9vc2VyL3dlZWtkYXkiOntzdHlsZTpmdW5jdGlvbihoZCl7cmV0dXJuIHt0ZXh0Q29sb3I6aGQuZGlzYWJsZWQ/Y206aGQud2Vla2VuZD9lbzp1bmRlZmluZWQsdGV4dEFsaWduOmRsLHBhZGRpbmdUb3A6MixiYWNrZ3JvdW5kQ29sb3I6UH07fX0sImRhdGVjaG9vc2VyL3dlZWsiOntzdHlsZTpmdW5jdGlvbihoZSl7cmV0dXJuIHt0ZXh0QWxpZ246ZGwscGFkZGluZzpbMiw0XSxiYWNrZ3JvdW5kQ29sb3I6UH07fX0sImRhdGVjaG9vc2VyL2RheSI6e3N0eWxlOmZ1bmN0aW9uKGhmKXtyZXR1cm4ge3RleHRBbGlnbjpkbCxkZWNvcmF0b3I6aGYuZGlzYWJsZWQ/dW5kZWZpbmVkOmhmLnNlbGVjdGVkP2RFOnVuZGVmaW5lZCx0ZXh0Q29sb3I6aGYuZGlzYWJsZWQ/Y206aGYuc2VsZWN0ZWQ/ZEg6aGYub3RoZXJNb250aD9lbzp1bmRlZmluZWQsZm9udDpoZi50b2RheT9kSTp1bmRlZmluZWQscGFkZGluZzpbMiw0XX07fX0sImNvbWJvYm94Ijp7c3R5bGU6ZnVuY3Rpb24oaGcpe3ZhciBoazt2YXIgaGk9ISFoZy5mb2N1c2VkO3ZhciBoaj0hIWhnLmludmFsaWQ7dmFyIGhoPSEhaGcuZGlzYWJsZWQ7aWYoaGkmJmhqJiYhaGgpe2hrPWRWO31lbHNlIGlmKGhpJiYhaGomJiFoaCl7aGs9ZFE7fWVsc2UgaWYoaGgpe2hrPWNmO31lbHNlIGlmKCFoaSYmaGomJiFoaCl7aGs9Y2k7fWVsc2V7aGs9Y2g7fXJldHVybiB7ZGVjb3JhdG9yOmhrfTt9fSwiY29tYm9ib3gvcG9wdXAiOmRSLCJjb21ib2JveC9saXN0Ijp7YWxpYXM6ZFB9LCJjb21ib2JveC9idXR0b24iOntpbmNsdWRlOmROLGFsaWFzOmROLHN0eWxlOmZ1bmN0aW9uKGhsKXt2YXIgaG09e2ljb246Y2sscGFkZGluZzoyfTtpZihobC5zZWxlY3RlZCl7aG0uZGVjb3JhdG9yPWVwO31yZXR1cm4gaG07fX0sImNvbWJvYm94L3RleHRmaWVsZCI6e2luY2x1ZGU6ZG4sc3R5bGU6ZnVuY3Rpb24oaG4pe3JldHVybiB7ZGVjb3JhdG9yOnVuZGVmaW5lZH07fX0sIm1lbnUiOntzdHlsZTpmdW5jdGlvbihobyl7dmFyIGhwPXtkZWNvcmF0b3I6WCxzaGFkb3c6TixzcGFjaW5nWDo2LHNwYWNpbmdZOjEsaWNvbkNvbHVtbldpZHRoOjE2LGFycm93Q29sdW1uV2lkdGg6NCxwbGFjZW1lbnRNb2RlWTpoby5zdWJtZW51fHxoby5jb250ZXh0bWVudT9nOmNjfTtpZihoby5zdWJtZW51KXtocC5wb3NpdGlvbj1sO2hwLm9mZnNldD1bLTIsLTNdO31yZXR1cm4gaHA7fX0sIm1lbnUvc2xpZGViYXIiOmRiLCJtZW51LXNsaWRlYmFyIjpkTCwibWVudS1zbGlkZWJhci1idXR0b24iOntzdHlsZTpmdW5jdGlvbihocSl7cmV0dXJuIHtkZWNvcmF0b3I6aHEuaG92ZXJlZD9kRTp1bmRlZmluZWQscGFkZGluZzo3LGNlbnRlcjp0cnVlfTt9fSwibWVudS1zbGlkZWJhci9idXR0b24tYmFja3dhcmQiOntpbmNsdWRlOmVuLHN0eWxlOmZ1bmN0aW9uKGhyKXtyZXR1cm4ge2ljb246aHIuaG92ZXJlZD9GOkx9O319LCJtZW51LXNsaWRlYmFyL2J1dHRvbi1mb3J3YXJkIjp7aW5jbHVkZTplbixzdHlsZTpmdW5jdGlvbihocyl7cmV0dXJuIHtpY29uOmhzLmhvdmVyZWQ/Ymc6Y2t9O319LCJtZW51LXNlcGFyYXRvciI6e3N0eWxlOmZ1bmN0aW9uKGh0KXtyZXR1cm4ge2hlaWdodDowLGRlY29yYXRvcjpiUyxtYXJnaW46WzQsMl19O319LCJtZW51LWJ1dHRvbiI6e2FsaWFzOmRNLHN0eWxlOmZ1bmN0aW9uKGh1KXtyZXR1cm4ge2RlY29yYXRvcjpodS5zZWxlY3RlZD9kRTp1bmRlZmluZWQsdGV4dENvbG9yOmh1LnNlbGVjdGVkP2RIOnVuZGVmaW5lZCxwYWRkaW5nOls0LDZdfTt9fSwibWVudS1idXR0b24vaWNvbiI6e2luY2x1ZGU6ZEcsc3R5bGU6ZnVuY3Rpb24oaHYpe3JldHVybiB7YWxpZ25ZOmRGfTt9fSwibWVudS1idXR0b24vbGFiZWwiOntpbmNsdWRlOmNqLHN0eWxlOmZ1bmN0aW9uKGh3KXtyZXR1cm4ge2FsaWduWTpkRixwYWRkaW5nOjF9O319LCJtZW51LWJ1dHRvbi9zaG9ydGN1dCI6e2luY2x1ZGU6Y2osc3R5bGU6ZnVuY3Rpb24oaHgpe3JldHVybiB7YWxpZ25ZOmRGLG1hcmdpbkxlZnQ6MTQscGFkZGluZzoxfTt9fSwibWVudS1idXR0b24vYXJyb3ciOntpbmNsdWRlOmRHLHN0eWxlOmZ1bmN0aW9uKGh5KXtyZXR1cm4ge3NvdXJjZTpoeS5zZWxlY3RlZD9iVjpkcixhbGlnblk6ZEZ9O319LCJtZW51LWNoZWNrYm94Ijp7YWxpYXM6ZFUsaW5jbHVkZTpkVSxzdHlsZTpmdW5jdGlvbihoeil7cmV0dXJuIHtpY29uOiFoei5jaGVja2VkP3VuZGVmaW5lZDpoei5zZWxlY3RlZD9lZTpjQn07fX0sIm1lbnUtcmFkaW9idXR0b24iOnthbGlhczpkVSxpbmNsdWRlOmRVLHN0eWxlOmZ1bmN0aW9uKGhBKXtyZXR1cm4ge2ljb246IWhBLmNoZWNrZWQ/dW5kZWZpbmVkOmhBLnNlbGVjdGVkP2JZOnd9O319LCJtZW51YmFyIjp7c3R5bGU6ZnVuY3Rpb24oaEIpe3JldHVybiB7ZGVjb3JhdG9yOmNEfTt9fSwibWVudWJhci1idXR0b24iOnthbGlhczpkTSxzdHlsZTpmdW5jdGlvbihoQyl7cmV0dXJuIHtkZWNvcmF0b3I6KGhDLnByZXNzZWR8fGhDLmhvdmVyZWQpJiYhaEMuZGlzYWJsZWQ/ZEU6dW5kZWZpbmVkLHRleHRDb2xvcjpoQy5wcmVzc2VkfHxoQy5ob3ZlcmVkP2RIOnVuZGVmaW5lZCxwYWRkaW5nOlszLDhdfTt9fSwiY29sb3JzZWxlY3RvciI6ZEwsImNvbG9yc2VsZWN0b3IvY29udHJvbC1iYXIiOmRMLCJjb2xvcnNlbGVjdG9yL2NvbnRyb2wtcGFuZSI6ZEwsImNvbG9yc2VsZWN0b3IvdmlzdWFsLXBhbmUiOmNsLCJjb2xvcnNlbGVjdG9yL3ByZXNldC1ncmlkIjpkTCwiY29sb3JzZWxlY3Rvci9jb2xvcmJ1Y2tldCI6e3N0eWxlOmZ1bmN0aW9uKGhEKXtyZXR1cm4ge2RlY29yYXRvcjpkSyx3aWR0aDoxNixoZWlnaHQ6MTZ9O319LCJjb2xvcnNlbGVjdG9yL3ByZXNldC1maWVsZC1zZXQiOmNsLCJjb2xvcnNlbGVjdG9yL2lucHV0LWZpZWxkLXNldCI6Y2wsImNvbG9yc2VsZWN0b3IvcHJldmlldy1maWVsZC1zZXQiOmNsLCJjb2xvcnNlbGVjdG9yL2hleC1maWVsZC1jb21wb3NpdGUiOmRMLCJjb2xvcnNlbGVjdG9yL2hleC1maWVsZCI6ZG4sImNvbG9yc2VsZWN0b3IvcmdiLXNwaW5uZXItY29tcG9zaXRlIjpkTCwiY29sb3JzZWxlY3Rvci9yZ2Itc3Bpbm5lci1yZWQiOmRULCJjb2xvcnNlbGVjdG9yL3JnYi1zcGlubmVyLWdyZWVuIjpkVCwiY29sb3JzZWxlY3Rvci9yZ2Itc3Bpbm5lci1ibHVlIjpkVCwiY29sb3JzZWxlY3Rvci9oc2Itc3Bpbm5lci1jb21wb3NpdGUiOmRMLCJjb2xvcnNlbGVjdG9yL2hzYi1zcGlubmVyLWh1ZSI6ZFQsImNvbG9yc2VsZWN0b3IvaHNiLXNwaW5uZXItc2F0dXJhdGlvbiI6ZFQsImNvbG9yc2VsZWN0b3IvaHNiLXNwaW5uZXItYnJpZ2h0bmVzcyI6ZFQsImNvbG9yc2VsZWN0b3IvcHJldmlldy1jb250ZW50LW9sZCI6e3N0eWxlOmZ1bmN0aW9uKGhFKXtyZXR1cm4ge2RlY29yYXRvcjpkSyx3aWR0aDo1MCxoZWlnaHQ6MTB9O319LCJjb2xvcnNlbGVjdG9yL3ByZXZpZXctY29udGVudC1uZXciOntzdHlsZTpmdW5jdGlvbihoRil7cmV0dXJuIHtkZWNvcmF0b3I6ZEssYmFja2dyb3VuZENvbG9yOmNvLHdpZHRoOjUwLGhlaWdodDoxMH07fX0sImNvbG9yc2VsZWN0b3IvaHVlLXNhdHVyYXRpb24tZmllbGQiOntzdHlsZTpmdW5jdGlvbihoRyl7cmV0dXJuIHtkZWNvcmF0b3I6ZEssbWFyZ2luOjV9O319LCJjb2xvcnNlbGVjdG9yL2JyaWdodG5lc3MtZmllbGQiOntzdHlsZTpmdW5jdGlvbihoSCl7cmV0dXJuIHtkZWNvcmF0b3I6ZEssbWFyZ2luOls1LDddfTt9fSwiY29sb3JzZWxlY3Rvci9odWUtc2F0dXJhdGlvbi1wYW5lIjpkTCwiY29sb3JzZWxlY3Rvci9odWUtc2F0dXJhdGlvbi1oYW5kbGUiOmRMLCJjb2xvcnNlbGVjdG9yL2JyaWdodG5lc3MtcGFuZSI6ZEwsImNvbG9yc2VsZWN0b3IvYnJpZ2h0bmVzcy1oYW5kbGUiOmRMLCJjb2xvcnBvcHVwIjp7YWxpYXM6ZFIsaW5jbHVkZTpkUixzdHlsZTpmdW5jdGlvbihoSSl7cmV0dXJuIHtwYWRkaW5nOjUsYmFja2dyb3VuZENvbG9yOmRxfTt9fSwiY29sb3Jwb3B1cC9maWVsZCI6e3N0eWxlOmZ1bmN0aW9uKGhKKXtyZXR1cm4ge2RlY29yYXRvcjpkSyxtYXJnaW46Mix3aWR0aDoxNCxoZWlnaHQ6MTQsYmFja2dyb3VuZENvbG9yOmNvfTt9fSwiY29sb3Jwb3B1cC9zZWxlY3Rvci1idXR0b24iOmRKLCJjb2xvcnBvcHVwL2F1dG8tYnV0dG9uIjpkSiwiY29sb3Jwb3B1cC9wcmV2aWV3LXBhbmUiOmNsLCJjb2xvcnBvcHVwL2N1cnJlbnQtcHJldmlldyI6e3N0eWxlOmZ1bmN0aW9uKGhLKXtyZXR1cm4ge2hlaWdodDoyMCxwYWRkaW5nOjQsbWFyZ2luTGVmdDo0LGRlY29yYXRvcjpkSyxhbGxvd0dyb3dYOnRydWV9O319LCJjb2xvcnBvcHVwL3NlbGVjdGVkLXByZXZpZXciOntzdHlsZTpmdW5jdGlvbihoTCl7cmV0dXJuIHtoZWlnaHQ6MjAscGFkZGluZzo0LG1hcmdpblJpZ2h0OjQsZGVjb3JhdG9yOmRLLGFsbG93R3Jvd1g6dHJ1ZX07fX0sImNvbG9ycG9wdXAvY29sb3JzZWxlY3Rvci1va2J1dHRvbiI6e2FsaWFzOmRKLGluY2x1ZGU6ZEosc3R5bGU6ZnVuY3Rpb24oaE0pe3JldHVybiB7aWNvbjpjc307fX0sImNvbG9ycG9wdXAvY29sb3JzZWxlY3Rvci1jYW5jZWxidXR0b24iOnthbGlhczpkSixpbmNsdWRlOmRKLHN0eWxlOmZ1bmN0aW9uKGhOKXtyZXR1cm4ge2ljb246ZGN9O319LCJ0YWJsZSI6e2FsaWFzOmRMLHN0eWxlOmZ1bmN0aW9uKGhPKXtyZXR1cm4ge2RlY29yYXRvcjpJfTt9fSwidGFibGUtaGVhZGVyIjp7fSwidGFibGUvc3RhdHVzYmFyIjp7c3R5bGU6ZnVuY3Rpb24oaFApe3JldHVybiB7ZGVjb3JhdG9yOmNRLHBhZGRpbmc6WzAsMl19O319LCJ0YWJsZS9jb2x1bW4tYnV0dG9uIjp7YWxpYXM6ZE4sc3R5bGU6ZnVuY3Rpb24oaFEpe3JldHVybiB7ZGVjb3JhdG9yOmJFLHBhZGRpbmc6MyxpY29uOmF9O319LCJ0YWJsZS1jb2x1bW4tcmVzZXQtYnV0dG9uIjp7aW5jbHVkZTpkVSxhbGlhczpkVSxzdHlsZTpmdW5jdGlvbigpe3JldHVybiB7aWNvbjpkQ307fX0sInRhYmxlLXNjcm9sbGVyIjpkTCwidGFibGUtc2Nyb2xsZXIvc2Nyb2xsYmFyLXgiOmRrLCJ0YWJsZS1zY3JvbGxlci9zY3JvbGxiYXIteSI6ZGssInRhYmxlLXNjcm9sbGVyL2hlYWRlciI6e3N0eWxlOmZ1bmN0aW9uKGhSKXtyZXR1cm4ge2RlY29yYXRvcjpjdn07fX0sInRhYmxlLXNjcm9sbGVyL3BhbmUiOntzdHlsZTpmdW5jdGlvbihoUyl7cmV0dXJuIHtiYWNrZ3JvdW5kQ29sb3I6Y3R9O319LCJ0YWJsZS1zY3JvbGxlci9mb2N1cy1pbmRpY2F0b3IiOntzdHlsZTpmdW5jdGlvbihoVCl7cmV0dXJuIHtkZWNvcmF0b3I6YkJ9O319LCJ0YWJsZS1zY3JvbGxlci9yZXNpemUtbGluZSI6e3N0eWxlOmZ1bmN0aW9uKGhVKXtyZXR1cm4ge2JhY2tncm91bmRDb2xvcjplaCx3aWR0aDoyfTt9fSwidGFibGUtaGVhZGVyLWNlbGwiOnthbGlhczpkTSxzdHlsZTpmdW5jdGlvbihoVil7cmV0dXJuIHttaW5XaWR0aDoxMyxtaW5IZWlnaHQ6MjAscGFkZGluZzpoVi5ob3ZlcmVkP1szLDQsMiw0XTpbMyw0XSxkZWNvcmF0b3I6aFYuaG92ZXJlZD9iYzpZLHNvcnRJY29uOmhWLnNvcnRlZD8oaFYuc29ydGVkQXNjZW5kaW5nP2NVOnUpOnVuZGVmaW5lZH07fX0sInRhYmxlLWhlYWRlci1jZWxsL2xhYmVsIjp7c3R5bGU6ZnVuY3Rpb24oaFcpe3JldHVybiB7bWluV2lkdGg6MCxhbGlnblk6ZEYscGFkZGluZ1JpZ2h0OjV9O319LCJ0YWJsZS1oZWFkZXItY2VsbC9zb3J0LWljb24iOntzdHlsZTpmdW5jdGlvbihoWCl7cmV0dXJuIHthbGlnblk6ZEYsYWxpZ25YOnJ9O319LCJ0YWJsZS1oZWFkZXItY2VsbC9pY29uIjp7c3R5bGU6ZnVuY3Rpb24oaFkpe3JldHVybiB7bWluV2lkdGg6MCxhbGlnblk6ZEYscGFkZGluZ1JpZ2h0OjV9O319LCJ0YWJsZS1lZGl0b3ItdGV4dGZpZWxkIjp7aW5jbHVkZTpkbixzdHlsZTpmdW5jdGlvbihpYSl7cmV0dXJuIHtkZWNvcmF0b3I6dW5kZWZpbmVkLHBhZGRpbmc6WzIsMl0sYmFja2dyb3VuZENvbG9yOmNvfTt9fSwidGFibGUtZWRpdG9yLXNlbGVjdGJveCI6e2luY2x1ZGU6YmksYWxpYXM6Ymksc3R5bGU6ZnVuY3Rpb24oaWIpe3JldHVybiB7cGFkZGluZzpbMCwyXSxiYWNrZ3JvdW5kQ29sb3I6Y299O319LCJ0YWJsZS1lZGl0b3ItY29tYm9ib3giOntpbmNsdWRlOmssYWxpYXM6ayxzdHlsZTpmdW5jdGlvbihpYyl7cmV0dXJuIHtkZWNvcmF0b3I6dW5kZWZpbmVkLGJhY2tncm91bmRDb2xvcjpjb307fX0sInByb2dyZXNzaXZlLXRhYmxlLWhlYWRlciI6e2FsaWFzOmRMLHN0eWxlOmZ1bmN0aW9uKGlkKXtyZXR1cm4ge2RlY29yYXRvcjpifTt9fSwicHJvZ3Jlc3NpdmUtdGFibGUtaGVhZGVyLWNlbGwiOnthbGlhczpkTSxzdHlsZTpmdW5jdGlvbihpZSl7cmV0dXJuIHttaW5XaWR0aDo0MCxtaW5IZWlnaHQ6MjUscGFkZGluZ0xlZnQ6NixkZWNvcmF0b3I6YlJ9O319LCJhcHAtaGVhZGVyIjp7c3R5bGU6ZnVuY3Rpb24oaWcpe3JldHVybiB7Zm9udDpkSSx0ZXh0Q29sb3I6ZEgscGFkZGluZzpbOCwxMl0sZGVjb3JhdG9yOld9O319LCJ2aXJ0dWFsLWxpc3QiOmRQLCJ2aXJ0dWFsLWxpc3Qvcm93LWxheWVyIjpWLCJyb3ctbGF5ZXIiOntzdHlsZTpmdW5jdGlvbihpaCl7cmV0dXJuIHtjb2xvckV2ZW46Y2csY29sb3JPZGQ6Y2d9O319LCJncm91cC1pdGVtIjp7aW5jbHVkZTpjaixhbGlhczpjaixzdHlsZTpmdW5jdGlvbihpaSl7cmV0dXJuIHtwYWRkaW5nOjQsZGVjb3JhdG9yOmJ0LHRleHRDb2xvcjpjZyxmb250OmRJfTt9fSwiY29sdW1uLWxheWVyIjpkTCwiY2VsbCI6e3N0eWxlOmZ1bmN0aW9uKGlqKXtyZXR1cm4ge3RleHRDb2xvcjppai5zZWxlY3RlZD9kSDplbSxwYWRkaW5nOlszLDZdLGZvbnQ6YnF9O319LCJjZWxsLXN0cmluZyI6Y24sImNlbGwtbnVtYmVyIjp7aW5jbHVkZTpjbixzdHlsZTpmdW5jdGlvbihpayl7cmV0dXJuIHt0ZXh0QWxpZ246cn07fX0sImNlbGwtaW1hZ2UiOmNuLCJjZWxsLWJvb2xlYW4iOntpbmNsdWRlOmNuLHN0eWxlOmZ1bmN0aW9uKGlsKXtyZXR1cm4ge2ljb25UcnVlOmJhLGljb25GYWxzZTpjSX07fX0sImNlbGwtYXRvbSI6Y24sImNlbGwtZGF0ZSI6Y24sImNlbGwtaHRtbCI6Y24sImh0bWxhcmVhIjp7ImluY2x1ZGUiOmRMLHN0eWxlOmZ1bmN0aW9uKGltKXtyZXR1cm4ge2JhY2tncm91bmRDb2xvcjpjZ307fX0sInByb2dyZXNzYmFyIjp7c3R5bGU6ZnVuY3Rpb24oaW8pe3JldHVybiB7ZGVjb3JhdG9yOnYscGFkZGluZzpbMV0sYmFja2dyb3VuZENvbG9yOmNnfTt9fSwicHJvZ3Jlc3NiYXIvcHJvZ3Jlc3MiOntzdHlsZTpmdW5jdGlvbihpcCl7cmV0dXJuIHtkZWNvcmF0b3I6ZEV9O319fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGc9IiMxMzQyNzUiLGY9InNjcm9sbGFyZWEiLGU9Im1haW4iLGQ9IlRoZW1lIGZvciBBUEkgVmlld2VyIixjPSJhcGl2aWV3ZXIuQXBwZWFyYW5jZSIsYj0id2hpdGUiLGE9ImJvbGQiO3F4LlRoZW1lLmRlZmluZShjLHt0aXRsZTpkLGV4dGVuZDpxeC50aGVtZS5tb2Rlcm4uQXBwZWFyYW5jZSxhcHBlYXJhbmNlczp7InRvZ2dsZXZpZXciOntzdHlsZTpmdW5jdGlvbihoKXtyZXR1cm4ge3dpZHRoOjI0MCxkZWNvcmF0b3I6ZX07fX0sImRldGFpbHZpZXdlciI6e3N0eWxlOmZ1bmN0aW9uKGkpe3JldHVybiB7YmFja2dyb3VuZENvbG9yOmIsZGVjb3JhdG9yOmV9O319LCJsZWdlbmQiOntpbmNsdWRlOmYsYWxpYXM6ZixzdHlsZTpmdW5jdGlvbihqKXtyZXR1cm4ge2NvbnRlbnRQYWRkaW5nOlsxMCwxMCwxMCwxMF19O319LCJsZWdlbmR2aWV3LWxhYmVsLWltcG9ydGFudCI6e3N0eWxlOmZ1bmN0aW9uKGspe3JldHVybiB7dGV4dENvbG9yOmcsZm9udDphfTt9fSwibGVnZW5kdmlldy1sYWJlbCI6e3N0eWxlOmZ1bmN0aW9uKGwpe3JldHVybiB7dGV4dENvbG9yOmd9O319LCJ0YWJ2aWV3Ijp7c3R5bGU6ZnVuY3Rpb24obSl7cmV0dXJuIHtjb250ZW50UGFkZGluZzowfTt9fSwidGFidmlldy9wYW5lIjp7c3R5bGU6ZnVuY3Rpb24obil7cmV0dXJuIHttaW5IZWlnaHQ6MTAwLG1hcmdpbkJvdHRvbTpuLmJhckJvdHRvbT8tMTowLG1hcmdpblRvcDpuLmJhclRvcD8tMTowLG1hcmdpbkxlZnQ6bi5iYXJMZWZ0Py0xOjAsbWFyZ2luUmlnaHQ6bi5iYXJSaWdodD8tMTowfTt9fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJhcGl2aWV3ZXIudGVzdC5XaWRnZXQiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6YXBpdmlld2VyLnRlc3QuTGF5b3V0SXRlbSxtZW1iZXJzOntyZW5kZXJTZXBhcmF0b3I6ZnVuY3Rpb24oYixjKXt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9ImFwaXZpZXdlci50ZXN0Lk1ldGhvZHMiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6T2JqZWN0LG1lbWJlcnM6e3RvU3RyaW5nOmZ1bmN0aW9uKCl7fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7fSxpc1Byb3RvdHlwZU9mOmZ1bmN0aW9uKCl7fSxoYXNPd25Qcm9wZXJ0eTpmdW5jdGlvbigpe30sdG9Mb2NhbGVTdHJpbmc6ZnVuY3Rpb24oKXt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGg9ImFwaXZpZXdlci5DbGFzc0xvYWRlciIsZz0iKCIsZj0iKSIsZT0iLmpzb24iLGQ9ImNvbXBsZXRlZCIsYz0iLiIsYj0iLyIsYT0iZmFpbGVkIjtxeC5DbGFzcy5kZWZpbmUoaCx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbihqKXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3RoaXMuX2Jhc2VVcmk9ajt9LG1lbWJlcnM6e2xvYWQ6ZnVuY3Rpb24oayxsLG0sc2VsZil7dmFyIG49dGhpcy5fYmFzZVVyaStiK2srZTt2YXIgbz1uZXcgcXguaW8ucmVtb3RlLlJlcXVlc3Qobik7dmFyIHA9bnVsbDtvLnNldEFzeW5jaHJvbm91cyhsKTtvLnNldFRpbWVvdXQoMzAwMDApO28uc2V0UHJvaGliaXRDYWNoaW5nKGZhbHNlKTtvLmFkZExpc3RlbmVyKGQsZnVuY3Rpb24ocSl7dmFyIGNvbnRlbnQ9ZXZhbChnK3EuZ2V0Q29udGVudCgpK2YpO3ZhciByPWsuc3Vic3RyaW5nKDAsay5sYXN0SW5kZXhPZihjKSk7dmFyIHM9YXBpdmlld2VyLmRhby5DbGFzcy5nZXRDbGFzc0J5TmFtZShyKTtwPW5ldyBhcGl2aWV3ZXIuZGFvLkNsYXNzKGNvbnRlbnQscyk7cy5hZGRDbGFzcyhwKTt0aGlzLl9fVGMocCxtLHNlbGYpO30sdGhpcyk7by5hZGRMaXN0ZW5lcihhLGZ1bmN0aW9uKHQpe2FsZXJ0KCJDb3VsZG4ndCBsb2FkIGZpbGU6ICIrbik7fSx0aGlzKTtvLnNlbmQoKTtyZXR1cm4gcDt9LF9fVGM6ZnVuY3Rpb24odSx2LHNlbGYpe2lmKHYpe2lmKHNlbGYpe3YuY2FsbChzZWxmLHUpO31lbHNle3YodSk7fX19LF9fVGQ6ZnVuY3Rpb24odyx4LHNlbGYpe3ZhciB6PVtdO3ZhciB5PTA7dmFyIEEsaTtmb3IoaT0wO2k8dy5sZW5ndGg7aSsrKXtBPXdbaV07aWYoIUEuaXNMb2FkZWQoKSl7ei5wdXNoKEEpO319Zm9yKGk9MDtpPHoubGVuZ3RoO2krKyl7dGhpcy5sb2FkKHpbaV0uZ2V0RnVsbE5hbWUoKSx0cnVlLGZ1bmN0aW9uKEIpe3krPTE7aWYoeT09ei5sZW5ndGgpe3RoaXMuX19UYyhhcGl2aWV3ZXIuZGFvLkNsYXNzLmdldENsYXNzQnlOYW1lKHdbMF0uZ2V0RnVsbE5hbWUoKSkseCxzZWxmKTt9fSx0aGlzKTt9aWYoei5sZW5ndGg9PTApe3RoaXMuX19UYyh3WzBdLHgsc2VsZik7fX0sY2xhc3NMb2FkRGVwZW5kZW5kQ2xhc3NlczpmdW5jdGlvbihDLEQsc2VsZil7dmFyIEU9Qy5nZXREZXBlbmRlbmRDbGFzc2VzKCk7dGhpcy5fX1RkKEUsRCxzZWxmKTt9LHBhY2thZ2VMb2FkRGVwZW5kZW5kQ2xhc3NlczpmdW5jdGlvbihGLEcsc2VsZil7dmFyIEg9Ri5nZXRDbGFzc2VzKCk7dGhpcy5fX1RkKEgsRyxzZWxmKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LmFwcGxpY2F0aW9uLklBcHBsaWNhdGlvbiI7cXguSW50ZXJmYWNlLmRlZmluZShhLHttZW1iZXJzOnttYWluOmZ1bmN0aW9uKCl7fSxmaW5hbGl6ZTpmdW5jdGlvbigpe30sY2xvc2U6ZnVuY3Rpb24oKXt9LHRlcm1pbmF0ZTpmdW5jdGlvbigpe319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYj0iYWJzdHJhY3QiLGE9InF4LmFwcGxpY2F0aW9uLkFic3RyYWN0R3VpIjtxeC5DbGFzcy5kZWZpbmUoYSx7dHlwZTpiLGV4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6W3F4LmFwcGxpY2F0aW9uLklBcHBsaWNhdGlvbl0saW5jbHVkZTpxeC5sb2NhbGUuTVRyYW5zbGF0aW9uLG1lbWJlcnM6e19fbnY6bnVsbCxfY3JlYXRlUm9vdFdpZGdldDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQWJzdHJhY3QgbWV0aG9kIGNhbGwiKTt9LGdldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX252O30sbWFpbjpmdW5jdGlvbigpe3F4LnRoZW1lLm1hbmFnZXIuTWV0YS5nZXRJbnN0YW5jZSgpLmluaXRpYWxpemUoKTtxeC51aS50b29sdGlwLk1hbmFnZXIuZ2V0SW5zdGFuY2UoKTt0aGlzLl9fbnY9dGhpcy5fY3JlYXRlUm9vdFdpZGdldCgpO30sZmluYWxpemU6ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpO30scmVuZGVyOmZ1bmN0aW9uKCl7cXgudWkuY29yZS5xdWV1ZS5NYW5hZ2VyLmZsdXNoKCk7fSxjbG9zZTpmdW5jdGlvbihjKXt9LHRlcm1pbmF0ZTpmdW5jdGlvbigpe319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX252PW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGE9InF4LmFwcGxpY2F0aW9uLlN0YW5kYWxvbmUiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6cXguYXBwbGljYXRpb24uQWJzdHJhY3RHdWksbWVtYmVyczp7X2NyZWF0ZVJvb3RXaWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHF4LnVpLnJvb3QuQXBwbGljYXRpb24oZG9jdW1lbnQpO319fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZT0iY29udHJvbGxlciIsZD0ic2NyaXB0L2FwaWRhdGEuanNvbiIsYz0iYXBpdmlld2VyL2Nzcy9hcGl2aWV3ZXIuY3NzIixiPSJhcGl2aWV3ZXIuQXBwbGljYXRpb24iLGE9InZpZXdlciI7cXguQ2xhc3MuZGVmaW5lKGIse2V4dGVuZDpxeC5hcHBsaWNhdGlvbi5TdGFuZGFsb25lLGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LmFwcGxpY2F0aW9uLlN0YW5kYWxvbmUuY2FsbCh0aGlzKTtxeC5ib20uU3R5bGVzaGVldC5pbmNsdWRlRmlsZShjKTt9LG1lbWJlcnM6e21haW46ZnVuY3Rpb24oKXtxeC5hcHBsaWNhdGlvbi5TdGFuZGFsb25lLnByb3RvdHlwZS5tYWluLmNhbGwodGhpcyk7e307cXguQ2xhc3MuaW5jbHVkZShxeC51aS5jb3JlLldpZGdldCxhcGl2aWV3ZXIuTVdpZGdldFJlZ2lzdHJ5KTt0aGlzLnZpZXdlcj1uZXcgYXBpdmlld2VyLlZpZXdlcigpO3RoaXMuY29udHJvbGxlcj1uZXcgYXBpdmlld2VyLkNvbnRyb2xsZXIoKTt0aGlzLmdldFJvb3QoKS5hZGQodGhpcy52aWV3ZXIse2VkZ2U6MH0pO30sZmluYWxpemU6ZnVuY3Rpb24oKXtxeC5hcHBsaWNhdGlvbi5TdGFuZGFsb25lLnByb3RvdHlwZS5maW5hbGl6ZS5jYWxsKHRoaXMpO3RoaXMuY29udHJvbGxlci5sb2FkKGQpO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fZGlzcG9zZU9iamVjdHMoYSxlKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgZj0iX2FwcGx5VGhlbWUiLGU9InF4LnRoZW1lIixkPSJxeC50aGVtZS5tYW5hZ2VyLk1ldGEiLGM9InF4LnRoZW1lLk1vZGVybiIsYj0iVGhlbWUiLGE9InNpbmdsZXRvbiI7cXguQ2xhc3MuZGVmaW5lKGQse3R5cGU6YSxleHRlbmQ6cXguY29yZS5PYmplY3QscHJvcGVydGllczp7dGhlbWU6e2NoZWNrOmIsbnVsbGFibGU6dHJ1ZSxhcHBseTpmfX0sbWVtYmVyczp7X2FwcGx5VGhlbWU6ZnVuY3Rpb24oZyxoKXt2YXIgaz1udWxsO3ZhciBuPW51bGw7dmFyIHE9bnVsbDt2YXIgcj1udWxsO3ZhciBtPW51bGw7aWYoZyl7az1nLm1ldGEuY29sb3J8fG51bGw7bj1nLm1ldGEuZGVjb3JhdGlvbnx8bnVsbDtxPWcubWV0YS5mb250fHxudWxsO3I9Zy5tZXRhLmljb258fG51bGw7bT1nLm1ldGEuYXBwZWFyYW5jZXx8bnVsbDt9dmFyIG89cXgudGhlbWUubWFuYWdlci5Db2xvci5nZXRJbnN0YW5jZSgpO3ZhciBwPXF4LnRoZW1lLm1hbmFnZXIuRGVjb3JhdGlvbi5nZXRJbnN0YW5jZSgpO3ZhciBpPXF4LnRoZW1lLm1hbmFnZXIuRm9udC5nZXRJbnN0YW5jZSgpO3ZhciBsPXF4LnRoZW1lLm1hbmFnZXIuSWNvbi5nZXRJbnN0YW5jZSgpO3ZhciBqPXF4LnRoZW1lLm1hbmFnZXIuQXBwZWFyYW5jZS5nZXRJbnN0YW5jZSgpO28uc2V0VGhlbWUoayk7cC5zZXRUaGVtZShuKTtpLnNldFRoZW1lKHEpO2wuc2V0VGhlbWUocik7ai5zZXRUaGVtZShtKTt9LGluaXRpYWxpemU6ZnVuY3Rpb24oKXt2YXIgdD1xeC5jb3JlLlNldHRpbmc7dmFyIHMsdTtzPXQuZ2V0KGUpO2lmKHMpe3U9cXguVGhlbWUuZ2V0QnlOYW1lKHMpO2lmKCF1KXt0aHJvdyBuZXcgRXJyb3IoIlRoZSB0aGVtZSB0byB1c2UgaXMgbm90IGF2YWlsYWJsZTogIitzKTt9dGhpcy5zZXRUaGVtZSh1KTt9fX0sc2V0dGluZ3M6eyJxeC50aGVtZSI6Y319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBlPSJxeC50aGVtZS5tYW5hZ2VyLkljb24iLGQ9IlRoZW1lIixjPSJjaGFuZ2VUaGVtZSIsYj0iX2FwcGx5VGhlbWUiLGE9InNpbmdsZXRvbiI7cXguQ2xhc3MuZGVmaW5lKGUse3R5cGU6YSxleHRlbmQ6cXguY29yZS5PYmplY3QscHJvcGVydGllczp7dGhlbWU6e2NoZWNrOmQsbnVsbGFibGU6dHJ1ZSxhcHBseTpiLGV2ZW50OmN9fSxtZW1iZXJzOntfYXBwbHlUaGVtZTpmdW5jdGlvbihmLGcpe3ZhciBpPXF4LnV0aWwuQWxpYXNNYW5hZ2VyLmdldEluc3RhbmNlKCk7aWYoZyl7Zm9yKHZhciBoIGluIGcuYWxpYXNlcyl7aS5yZW1vdmUoaCk7fX1pZihmKXtmb3IodmFyIGggaW4gZi5hbGlhc2VzKXtpLmFkZChoLGYuYWxpYXNlc1toXSk7fX19fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIHA9IkJvb2xlYW4iLG89ImZvY3Vzb3V0IixuPSJpbnRlcnZhbCIsbT0ibW91c2VvdmVyIixsPSJtb3VzZW91dCIsaz0ibW91c2Vtb3ZlIixqPSJ3aWRnZXQiLGk9InF4LnVpLnRvb2x0aXAuVG9vbFRpcCIsaD0iX2FwcGx5Q3VycmVudCIsZz0icXgudWkudG9vbHRpcC5NYW5hZ2VyIixjPSJfX3FWIixmPSJfX3FTIixkPSJ0b29sdGlwLWVycm9yIixiPSJfX3FUIixhPSJzaW5nbGV0b24iO3F4LkNsYXNzLmRlZmluZShnLHt0eXBlOmEsZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LmNvcmUuT2JqZWN0LmNhbGwodGhpcyk7cXguZXZlbnQuUmVnaXN0cmF0aW9uLmFkZExpc3RlbmVyKGRvY3VtZW50LmJvZHksbSx0aGlzLl9fcmQsdGhpcyx0cnVlKTt0aGlzLl9fcVM9bmV3IHF4LmV2ZW50LlRpbWVyKCk7dGhpcy5fX3FTLmFkZExpc3RlbmVyKG4sdGhpcy5fX3JhLHRoaXMpO3RoaXMuX19xVD1uZXcgcXguZXZlbnQuVGltZXIoKTt0aGlzLl9fcVQuYWRkTGlzdGVuZXIobix0aGlzLl9fcmIsdGhpcyk7dGhpcy5fX3FVPXtsZWZ0OjAsdG9wOjB9O30scHJvcGVydGllczp7Y3VycmVudDp7Y2hlY2s6aSxudWxsYWJsZTp0cnVlLGFwcGx5Omh9LHNob3dJbnZhbGlkVG9vbFRpcHM6e2NoZWNrOnAsaW5pdDp0cnVlfSxzaG93VG9vbFRpcHM6e2NoZWNrOnAsaW5pdDp0cnVlfX0sbWVtYmVyczp7X19xVTpudWxsLF9fcVQ6bnVsbCxfX3FTOm51bGwsX19xVjpudWxsLF9fcVc6bnVsbCxfX3FYOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19xVil7dGhpcy5fX3FWPW5ldyBxeC51aS50b29sdGlwLlRvb2xUaXAoKS5zZXQoe3JpY2g6dHJ1ZX0pO31yZXR1cm4gdGhpcy5fX3FWO30sX19xWTpmdW5jdGlvbigpe2lmKCF0aGlzLl9fcVcpe3RoaXMuX19xVz1uZXcgcXgudWkudG9vbHRpcC5Ub29sVGlwKCkuc2V0KHthcHBlYXJhbmNlOmR9KTt0aGlzLl9fcVcuc3luY0FwcGVhcmFuY2UoKTt9cmV0dXJuIHRoaXMuX19xVzt9LF9hcHBseUN1cnJlbnQ6ZnVuY3Rpb24ocSxyKXtpZihyJiZxeC51aS5jb3JlLldpZGdldC5jb250YWlucyhyLHEpKXtyZXR1cm47fWlmKHIpe2lmKCFyLmlzRGlzcG9zZWQoKSl7ci5leGNsdWRlKCk7fXRoaXMuX19xUy5zdG9wKCk7dGhpcy5fX3FULnN0b3AoKTt9dmFyIHQ9cXguZXZlbnQuUmVnaXN0cmF0aW9uO3ZhciBzPWRvY3VtZW50LmJvZHk7aWYocSl7dGhpcy5fX3FTLnN0YXJ0V2l0aChxLmdldFNob3dUaW1lb3V0KCkpO3QuYWRkTGlzdGVuZXIocyxsLHRoaXMuX19yZSx0aGlzLHRydWUpO3QuYWRkTGlzdGVuZXIocyxvLHRoaXMuX19yZix0aGlzLHRydWUpO3QuYWRkTGlzdGVuZXIocyxrLHRoaXMuX19yYyx0aGlzLHRydWUpO31lbHNle3QucmVtb3ZlTGlzdGVuZXIocyxsLHRoaXMuX19yZSx0aGlzLHRydWUpO3QucmVtb3ZlTGlzdGVuZXIocyxvLHRoaXMuX19yZix0aGlzLHRydWUpO3QucmVtb3ZlTGlzdGVuZXIocyxrLHRoaXMuX19yYyx0aGlzLHRydWUpO319LF9fcmE6ZnVuY3Rpb24oZSl7dmFyIHU9dGhpcy5nZXRDdXJyZW50KCk7aWYodSYmIXUuaXNEaXNwb3NlZCgpKXt0aGlzLl9fcVQuc3RhcnRXaXRoKHUuZ2V0SGlkZVRpbWVvdXQoKSk7aWYodS5nZXRQbGFjZU1ldGhvZCgpPT1qKXt1LnBsYWNlVG9XaWRnZXQodS5nZXRPcGVuZXIoKSk7fWVsc2V7dS5wbGFjZVRvUG9pbnQodGhpcy5fX3FVKTt9dS5zaG93KCk7fXRoaXMuX19xUy5zdG9wKCk7fSxfX3JiOmZ1bmN0aW9uKGUpe3ZhciB2PXRoaXMuZ2V0Q3VycmVudCgpO2lmKHYmJiF2LmlzRGlzcG9zZWQoKSl7di5leGNsdWRlKCk7fXRoaXMuX19xVC5zdG9wKCk7dGhpcy5yZXNldEN1cnJlbnQoKTt9LF9fcmM6ZnVuY3Rpb24oZSl7dmFyIHc9dGhpcy5fX3FVO3cubGVmdD1lLmdldERvY3VtZW50TGVmdCgpO3cudG9wPWUuZ2V0RG9jdW1lbnRUb3AoKTt9LF9fcmQ6ZnVuY3Rpb24oZSl7dmFyIHo9cXgudWkuY29yZS5XaWRnZXQuZ2V0V2lkZ2V0QnlFbGVtZW50KGUuZ2V0VGFyZ2V0KCkpO2lmKCF6KXtyZXR1cm47fXZhciBBLEIseSx4O3doaWxlKHohPW51bGwpe0E9ei5nZXRUb29sVGlwKCk7Qj16LmdldFRvb2xUaXBUZXh0KCl8fG51bGw7eT16LmdldFRvb2xUaXBJY29uKCl8fG51bGw7aWYocXguQ2xhc3MuaGFzSW50ZXJmYWNlKHouY29uc3RydWN0b3IscXgudWkuZm9ybS5JRm9ybSkmJiF6LmlzVmFsaWQoKSl7eD16LmdldEludmFsaWRNZXNzYWdlKCk7fWlmKEF8fEJ8fHl8fHgpe2JyZWFrO316PXouZ2V0TGF5b3V0UGFyZW50KCk7fWlmKCF6fHwhei5nZXRFbmFibGVkKCl8fHouaXNCbG9ja1Rvb2xUaXAoKXx8KCF4JiYhdGhpcy5nZXRTaG93VG9vbFRpcHMoKSl8fCh4JiYhdGhpcy5nZXRTaG93SW52YWxpZFRvb2xUaXBzKCkpKXtyZXR1cm47fWlmKHgpe0E9dGhpcy5fX3FZKCkuc2V0KHtsYWJlbDp4fSk7fWlmKCFBKXtBPXRoaXMuX19xWCgpLnNldCh7bGFiZWw6QixpY29uOnl9KTt9dGhpcy5zZXRDdXJyZW50KEEpO0Euc2V0T3BlbmVyKHopO30sX19yZTpmdW5jdGlvbihlKXt2YXIgQz1xeC51aS5jb3JlLldpZGdldC5nZXRXaWRnZXRCeUVsZW1lbnQoZS5nZXRUYXJnZXQoKSk7aWYoIUMpe3JldHVybjt9dmFyIEQ9cXgudWkuY29yZS5XaWRnZXQuZ2V0V2lkZ2V0QnlFbGVtZW50KGUuZ2V0UmVsYXRlZFRhcmdldCgpKTtpZighRCl7cmV0dXJuO312YXIgRT10aGlzLmdldEN1cnJlbnQoKTtpZihFJiYoRD09RXx8cXgudWkuY29yZS5XaWRnZXQuY29udGFpbnMoRSxEKSkpe3JldHVybjt9aWYoRCYmQyYmcXgudWkuY29yZS5XaWRnZXQuY29udGFpbnMoQyxEKSl7cmV0dXJuO31pZihFJiYhRCl7dGhpcy5zZXRDdXJyZW50KG51bGwpO31lbHNle3RoaXMucmVzZXRDdXJyZW50KCk7fX0sX19yZjpmdW5jdGlvbihlKXt2YXIgRj1xeC51aS5jb3JlLldpZGdldC5nZXRXaWRnZXRCeUVsZW1lbnQoZS5nZXRUYXJnZXQoKSk7aWYoIUYpe3JldHVybjt9dmFyIEc9dGhpcy5nZXRDdXJyZW50KCk7aWYoRyYmRz09Ri5nZXRUb29sVGlwKCkpe3RoaXMuc2V0Q3VycmVudChudWxsKTt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC5ldmVudC5SZWdpc3RyYXRpb24ucmVtb3ZlTGlzdGVuZXIoZG9jdW1lbnQuYm9keSxtLHRoaXMuX19yZCx0aGlzLHRydWUpO3RoaXMuX2Rpc3Bvc2VPYmplY3RzKGYsYixjKTt0aGlzLl9fcVU9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgYz0iX2FwcGx5SWQiLGI9IlN0cmluZyIsYT0iYXBpdmlld2VyLk1XaWRnZXRSZWdpc3RyeSI7cXguTWl4aW4uZGVmaW5lKGEse3Byb3BlcnRpZXM6e2lkOntjaGVjazpiLGFwcGx5OmMsbnVsbGFibGU6dHJ1ZSxpbml0Om51bGx9fSxtZW1iZXJzOntfYXBwbHlJZDpmdW5jdGlvbihkLGUpe3ZhciBmPWFwaXZpZXdlci5NV2lkZ2V0UmVnaXN0cnk7aWYoZSl7Zi51bnJlZ2lzdGVyKHRoaXMsZSk7fWlmKGQpe2YucmVnaXN0ZXIodGhpcyxkKTt9fSxnZXRXaWRnZXRCeUlkOmZ1bmN0aW9uKGcpe3JldHVybiBhcGl2aWV3ZXIuTVdpZGdldFJlZ2lzdHJ5LmdldFdpZGdldEJ5SWQoZyk7fX0sc3RhdGljczp7X19UZTp7fSxnZXRXaWRnZXRCeUlkOmZ1bmN0aW9uKGgpe3JldHVybiB0aGlzLl9fVGVbaF07fSxyZWdpc3RlcjpmdW5jdGlvbihpLGope2lmKHRoaXMuX19UZVtqXSl7dGhyb3cgbmV3IEVycm9yKCJBbiBvYmplY3Qgd2l0aCB0aGUgaWQgJyIraisiJyBhbHJlYWR5IGV4aXN0cy4iKTt9dGhpcy5fX1RlW2pdPWk7fSx1bnJlZ2lzdGVyOmZ1bmN0aW9uKGssbCl7aWYodGhpcy5fX1RlW2xdIT09ayl7dGhyb3cgbmV3IEVycm9yKCJUaGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkIHdpdGggdGhlIGlkICciK2wrIicuIik7fWRlbGV0ZSAodGhpcy5fX1RlW2xdKTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGs9InZhbHVlIixqPSJub2RlTmFtZSIsaT0ic2hvd1ByaXZhdGUiLGg9IiMiLGc9ImV4cGFuZFByb3BlcnRpZXMiLGY9ImNoYW5nZVNlbGVjdGlvbiIsZD0iKCIsYz0ic2hvd0luaGVyaXRlZCIsYj0ic2hvd1Byb3RlY3RlZCIsYT0icmVxdWVzdCIsTD0ibW91c2Vkb3duIixLPSJidG5faW5oZXJpdGVkIixKPSIpIixJPSJhcHBsaWNhdGlvbiIsSD0iX2RldGFpbExvYWRlciIsRz0iYWJvcnRlZCIsRj0iX2NsYXNzTG9hZGVyIixFPSJidG5fcHJvdGVjdGVkIixEPSJkZXRhaWxfbG9hZGVyIixDPSIgLSAiLHI9ImJ0bl9leHBhbmQiLHM9IiQxIyQyIixwPSJwYWNrYWdlIixxPSJ0cmVlIixuPSIuL3NjcmlwdCIsbz0iYnRuX3ByaXZhdGUiLGw9ImFwaXZpZXdlci5Db250cm9sbGVyIixtPSJfdGFiVmlld0NvbnRyb2xsZXIiLHQ9ImNvbXBsZXRlZCIsdT0iZmFpbGVkIix4PSIkMX4kMiIsdz0iQVBJIERvY3VtZW50YXRpb24iLHo9ImZpbGU6Iix5PSJfaGlzdG9yeSIsQj0iX3RyZWUiLEE9Iml0ZW1OYW1lIix2PSJjbGFzc0xpbmtDbGlja2VkIjtxeC5DbGFzcy5kZWZpbmUobCx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LGNvbnN0cnVjdDpmdW5jdGlvbihNKXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3RoaXMuX3dpZGdldFJlZ2lzdHJ5PWFwaXZpZXdlci5NV2lkZ2V0UmVnaXN0cnk7dGhpcy5fdGl0bGVQcmVmaXg9dztkb2N1bWVudC50aXRsZT10aGlzLl90aXRsZVByZWZpeDt0aGlzLl9jbGFzc0xvYWRlcj1uZXcgYXBpdmlld2VyLkNsYXNzTG9hZGVyKG4pO3RoaXMuX2RldGFpbExvYWRlcj10aGlzLl93aWRnZXRSZWdpc3RyeS5nZXRXaWRnZXRCeUlkKEQpO3RoaXMuX3RhYlZpZXdDb250cm9sbGVyPW5ldyBhcGl2aWV3ZXIuVGFiVmlld0NvbnRyb2xsZXIodGhpcy5fd2lkZ2V0UmVnaXN0cnkpO3RoaXMuX19UZygpO3RoaXMuX3RyZWU9dGhpcy5fd2lkZ2V0UmVnaXN0cnkuZ2V0V2lkZ2V0QnlJZChxKTt0aGlzLl9fVGgoKTt0aGlzLl9fVGkoKTt0aGlzLl9oaXN0b3J5PXF4LmJvbS5IaXN0b3J5LmdldEluc3RhbmNlKCk7dGhpcy5fX1RqKCk7cXguY29yZS5Jbml0LmdldEFwcGxpY2F0aW9uKCkuZ2V0Um9vdCgpLmFkZExpc3RlbmVyKEwsZnVuY3Rpb24oZSl7dGhpcy5fX1RmPWUuaXNTaGlmdFByZXNzZWQoKXx8ZS5pc0N0cmxPckNvbW1hbmRQcmVzc2VkKCk7fSx0aGlzLHRydWUpO30sbWVtYmVyczp7X19UZjpmYWxzZSwkJGxvZ0NhdGVnb3J5OkksbG9hZDpmdW5jdGlvbihOKXt2YXIgUD1uZXcgcXguaW8ucmVtb3RlLlJlcXVlc3QoTik7UC5zZXRUaW1lb3V0KDE4MDAwMCk7UC5zZXRQcm9oaWJpdENhY2hpbmcoZmFsc2UpO1AuYWRkTGlzdGVuZXIodCxmdW5jdGlvbihSKXt2YXIgVj1uZXcgRGF0ZSgpO3t9O3ZhciBjb250ZW50PVIuZ2V0Q29udGVudCgpO3ZhciBTPW5ldyBEYXRlKCk7dmFyIFQ9ZXZhbChkK2NvbnRlbnQrSik7dmFyIFU9bmV3IERhdGUoKTt7fTtxeC5ldmVudC5UaW1lci5vbmNlKGZ1bmN0aW9uKCl7dGhpcy5fX1RrKFQpO3F4LmV2ZW50LlRpbWVyLm9uY2UoZnVuY3Rpb24oKXt2YXIgVz10aGlzLl9oaXN0b3J5LmdldFN0YXRlKCk7aWYoVyl7dGhpcy5fX1RsKHRoaXMuX19UbihXKSk7fWVsc2V7dmFyIFk9dGhpcy5fX1RvKFQpO3ZhciBYPVkuYXR0cmlidXRlcy5mdWxsTmFtZTt0aGlzLl9fVGwoWCk7fX0sdGhpcywwKTt9LHRoaXMsMCk7fSx0aGlzKTt2YXIgTz1mdW5jdGlvbihiYSl7dGhpcy5lcnJvcigiQ291bGRuJ3QgbG9hZCBmaWxlOiAiK04pO2lmKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbD09eil7YWxlcnQoIkZhaWxlZCB0byBsb2FkIEFQSSBkYXRhIGZyb20gdGhlIGZpbGUgc3lzdGVtLlxuXG4iKyJUaGUgc2VjdXJpdHkgc2V0dGluZ3Mgb2YgeW91ciBicm93c2VyIG1heSBwcm9oaWJpdCBBSkFYICIrIndoZW4gdXNpbmcgdGhlIGZpbGUgcHJvdG9jb2wuIFBsZWFzZSB0cnkgdGhlIGh0dHAgcHJvdG9jb2wgIisiaW5zdGVhZC4iKTt9fTtQLmFkZExpc3RlbmVyKHUsTyx0aGlzKTtQLmFkZExpc3RlbmVyKEcsTyx0aGlzKTt2YXIgUT1uZXcgRGF0ZSgpO1Auc2VuZCgpO30sX19UZzpmdW5jdGlvbigpe3RoaXMuX3RhYlZpZXdDb250cm9sbGVyLmFkZExpc3RlbmVyKHYsZnVuY3Rpb24oYmIpe3RoaXMuX3VwZGF0ZUhpc3RvcnkoYmIuZ2V0RGF0YSgpKTt9LHRoaXMpO3RoaXMuX3RhYlZpZXdDb250cm9sbGVyLmFkZExpc3RlbmVyKGYsZnVuY3Rpb24oYmMpe3ZhciBiZT1iYy5nZXREYXRhKClbMF07aWYodGhpcy5faWdub3JlVGFiVmlld1NlbGVjdGlvbj09dHJ1ZSl7cmV0dXJuO31pZihiZSYmYmUuZ2V0VXNlckRhdGEoaikpe3ZhciBiZj1iZS5nZXRVc2VyRGF0YShqKTt2YXIgYmQ9YmUuZ2V0VXNlckRhdGEoQSk7aWYoYmQhPW51bGwpe3RoaXMuX3VwZGF0ZUhpc3RvcnkoYmYraCtiZCk7fWVsc2V7dGhpcy5fdXBkYXRlSGlzdG9yeShiZik7fX1lbHNle3RoaXMuX3RyZWUucmVzZXRTZWxlY3Rpb24oKTt9fSx0aGlzKTt9LF9fVGg6ZnVuY3Rpb24oKXt0aGlzLl90cmVlLmFkZExpc3RlbmVyKGYsZnVuY3Rpb24oYmcpe3ZhciBiaD1iZy5nZXREYXRhKClbMF07aWYoYmgmJmJoLmdldFVzZXJEYXRhKGopJiYhdGhpcy5faWdub3JlVHJlZVNlbGVjdGlvbil7dmFyIGJpPWJoLmdldFVzZXJEYXRhKGopO3RoaXMuX3VwZGF0ZUhpc3RvcnkoYmkpO319LHRoaXMpO30sX19UaTpmdW5jdGlvbigpe3ZhciBiaz1hcGl2aWV3ZXIuVWlNb2RlbC5nZXRJbnN0YW5jZSgpO3ZhciBibT10aGlzLl93aWRnZXRSZWdpc3RyeS5nZXRXaWRnZXRCeUlkKEspO2JtLmJpbmQoayxiayxjKTtiay5iaW5kKGMsYm0sayk7dmFyIGJqPXRoaXMuX3dpZGdldFJlZ2lzdHJ5LmdldFdpZGdldEJ5SWQocik7YmouYmluZChrLGJrLGcpO2JrLmJpbmQoZyxiaixrKTt2YXIgYmw9dGhpcy5fd2lkZ2V0UmVnaXN0cnkuZ2V0V2lkZ2V0QnlJZChFKTtibC5iaW5kKGssYmssYik7YmsuYmluZChiLGJsLGspO3ZhciBibj10aGlzLl93aWRnZXRSZWdpc3RyeS5nZXRXaWRnZXRCeUlkKG8pO2JuLmJpbmQoayxiayxpKTtiay5iaW5kKGksYm4sayk7fSxfX1RqOmZ1bmN0aW9uKCl7dGhpcy5faGlzdG9yeS5hZGRMaXN0ZW5lcihhLGZ1bmN0aW9uKGJvKXt2YXIgYnA9dGhpcy5fX1RuKGJvLmdldERhdGEoKSk7aWYoYnApe3RoaXMuX19UbChicCk7fX0sdGhpcyk7fSxfX1RrOmZ1bmN0aW9uKGJxKXt2YXIgYnI9bmV3IERhdGUoKTt2YXIgYnM9bmV3IGFwaXZpZXdlci5kYW8uUGFja2FnZShicSk7dmFyIGJ0PW5ldyBEYXRlKCk7e307dmFyIGJyPW5ldyBEYXRlKCk7dGhpcy5fdHJlZS5zZXRUcmVlRGF0YShicyk7dmFyIGJ0PW5ldyBEYXRlKCk7e307cmV0dXJuIHRydWU7fSxfdXBkYXRlSGlzdG9yeTpmdW5jdGlvbihidSl7dmFyIGJ2PWJ1K0MrdGhpcy5fdGl0bGVQcmVmaXg7cXguYm9tLkhpc3RvcnkuZ2V0SW5zdGFuY2UoKS5hZGRUb0hpc3RvcnkodGhpcy5fX1RtKGJ1KSxidik7fSxfc2VsZWN0Q2xhc3M6ZnVuY3Rpb24oYncsYngsc2VsZil7dGhpcy5fZGV0YWlsTG9hZGVyLmV4Y2x1ZGUoKTt0aGlzLl90YWJWaWV3Q29udHJvbGxlci5zaG93VGFiVmlldygpO3ZhciBieT1ieD9xeC5sYW5nLkZ1bmN0aW9uLmJpbmQoYngsc2VsZik6ZnVuY3Rpb24oKXt9O2lmKGJ3IGluc3RhbmNlb2YgYXBpdmlld2VyLmRhby5DbGFzcyl7dGhpcy5fY2xhc3NMb2FkZXIuY2xhc3NMb2FkRGVwZW5kZW5kQ2xhc3NlcyhidyxmdW5jdGlvbihieil7dGhpcy5fdGFiVmlld0NvbnRyb2xsZXIub3BlbkNsYXNzKGJ6LHRoaXMuX19UZik7YnkoKTt9LHRoaXMpO31lbHNle3RoaXMuX2NsYXNzTG9hZGVyLnBhY2thZ2VMb2FkRGVwZW5kZW5kQ2xhc3NlcyhidyxmdW5jdGlvbigpe3RoaXMuX3RhYlZpZXdDb250cm9sbGVyLm9wZW5QYWNrYWdlKGJ3LHRoaXMuX19UZik7YnkoKTt9LHRoaXMpO319LF9fVGw6ZnVuY3Rpb24oYkEpe3ZhciBiRD1iQTt2YXIgYkc9bnVsbDt2YXIgYkM9YkEuaW5kZXhPZihoKTtpZihiQyE9LTEpe2JEPWJBLnN1YnN0cmluZygwLGJDKTtiRz1iQS5zdWJzdHJpbmcoYkMrMSk7dmFyIGJFPWJHLmluZGV4T2YoZCk7aWYoYkUhPS0xKXtiRz1xeC5sYW5nLlN0cmluZy50cmltKGJHLnN1YnN0cmluZygwLGJFKSk7fX10aGlzLl9pZ25vcmVUcmVlU2VsZWN0aW9uPXRydWU7dmFyIGJGPXRoaXMuX3RyZWUuc2VsZWN0VHJlZU5vZGVCeUNsYXNzTmFtZShiRCk7dGhpcy5faWdub3JlVHJlZVNlbGVjdGlvbj1mYWxzZTtpZighYkYpe3RoaXMuZXJyb3IoIlVua25vd24gY2xhc3M6ICIrYkQpO2FsZXJ0KCJVbmtub3duIGNsYXNzOiAiK2JEKTtyZXR1cm47fXZhciBiQj10aGlzLl90cmVlLmdldFNlbGVjdGlvbigpWzBdLmdldFVzZXJEYXRhKGopfHxiRDt0aGlzLl9pZ25vcmVUYWJWaWV3U2VsZWN0aW9uPXRydWU7dGhpcy5fc2VsZWN0Q2xhc3MoYXBpdmlld2VyLmRhby5DbGFzcy5nZXRDbGFzc0J5TmFtZShiQiksZnVuY3Rpb24oKXtpZihiRyl7aWYoIXRoaXMuX3RhYlZpZXdDb250cm9sbGVyLnNob3dJdGVtKGJHKSl7dGhpcy5lcnJvcigiVW5rbm93biBpdGVtIG9mIGNsYXNzICciK2JEKyInOiAiK2JHKTthbGVydCgiVW5rbm93biBpdGVtIG9mIGNsYXNzICciK2JEKyInOiAiK2JHKTt0aGlzLl91cGRhdGVIaXN0b3J5KGJEKTt0aGlzLl9pZ25vcmVUYWJWaWV3U2VsZWN0aW9uPWZhbHNlO3JldHVybjt9fXRoaXMuX3VwZGF0ZUhpc3RvcnkoYkEpO3RoaXMuX2lnbm9yZVRhYlZpZXdTZWxlY3Rpb249ZmFsc2U7fSx0aGlzKTt9LF9fVG06ZnVuY3Rpb24oYkgpe3JldHVybiBiSC5yZXBsYWNlKC8oLiopIyguKikvZyx4KTt9LF9fVG46ZnVuY3Rpb24oYkkpe3JldHVybiBiSS5yZXBsYWNlKC8oLiopfiguKikvZyxzKTt9LF9fVG86ZnVuY3Rpb24oYkope2lmKGJKLnR5cGUmJmJKLnR5cGU9PXApe3JldHVybiBiSjt9ZWxzZXtyZXR1cm4gdGhpcy5fX1RvKGJKLmNoaWxkcmVuWzBdKTt9fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl93aWRnZXRSZWdpc3RyeT1udWxsO3RoaXMuX2Rpc3Bvc2VPYmplY3RzKEgsRixCLHksbSk7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIG09IiIsbD0nIycsaz0iU3RyaW5nIixqPSJyZXF1ZXN0IixpPSJtc2h0bWwiLGg9ImNoYW5nZVRpdGxlIixnPSJhYnN0cmFjdCIsZj0iX2FwcGx5U3RhdGUiLGU9InF4LmNsaWVudCIsZD0iY2hhbmdlU3RhdGUiLGE9InF4LmJvbS5IaXN0b3J5IixjPSJfYXBwbHlUaXRsZSIsYj0icXguZXZlbnQudHlwZS5EYXRhIjtxeC5DbGFzcy5kZWZpbmUoYSx7ZXh0ZW5kOnF4LmNvcmUuT2JqZWN0LHR5cGU6Zyxjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXtxeC5jb3JlLk9iamVjdC5jYWxsKHRoaXMpO3RoaXMuX2Jhc2VVcmw9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQobClbMF0rbDt0aGlzLl9fdng9e307dGhpcy5fc2V0SW5pdGlhbFN0YXRlKCk7fSxldmVudHM6eyJyZXF1ZXN0IjpifSxzdGF0aWNzOntTVVBQT1JUU19IQVNIX0NIQU5HRV9FVkVOVDoocXguYm9tLmNsaWVudC5FbmdpbmUuTVNIVE1MJiZkb2N1bWVudC5kb2N1bWVudE1vZGU+PTgpfHwoIXF4LmJvbS5jbGllbnQuRW5naW5lLk1TSFRNTCYmZG9jdW1lbnQuZG9jdW1lbnRNb2RlJiYib25oYXNoY2hhbmdlIiBpbiB3aW5kb3cpLGdldEluc3RhbmNlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuJCRpbnN0YW5jZSl7aWYodGhpcy5TVVBQT1JUU19IQVNIX0NIQU5HRV9FVkVOVCl7dGhpcy4kJGluc3RhbmNlPW5ldyBxeC5ib20uTmF0aXZlSGlzdG9yeSgpO31lbHNlIGlmKHF4LmNvcmUuVmFyaWFudC5pc1NldChlLGkpKXt0aGlzLiQkaW5zdGFuY2U9bmV3IHF4LmJvbS5JZnJhbWVIaXN0b3J5KCk7fWVsc2V7dGhpcy4kJGluc3RhbmNlPW5ldyBxeC5ib20uTmF0aXZlSGlzdG9yeSgpO319cmV0dXJuIHRoaXMuJCRpbnN0YW5jZTt9fSxwcm9wZXJ0aWVzOnt0aXRsZTp7Y2hlY2s6ayxldmVudDpoLG51bGxhYmxlOnRydWUsYXBwbHk6Y30sc3RhdGU6e2NoZWNrOmssZXZlbnQ6ZCxudWxsYWJsZTp0cnVlLGFwcGx5OmZ9fSxtZW1iZXJzOntfX3Z4Om51bGwsX2FwcGx5U3RhdGU6ZnVuY3Rpb24obixvKXt0aGlzLl93cml0ZVN0YXRlKG4pO30sX3NldEluaXRpYWxTdGF0ZTpmdW5jdGlvbigpe3RoaXMuc2V0U3RhdGUodGhpcy5fcmVhZFN0YXRlKCkpO30sX2VuY29kZTpmdW5jdGlvbihwKXtpZihxeC5sYW5nLlR5cGUuaXNTdHJpbmcocCkpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQocCk7fXJldHVybiBtO30sX2RlY29kZTpmdW5jdGlvbihxKXtpZihxeC5sYW5nLlR5cGUuaXNTdHJpbmcocSkpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQocSk7fXJldHVybiBtO30sX2FwcGx5VGl0bGU6ZnVuY3Rpb24ocil7aWYociE9bnVsbCl7ZG9jdW1lbnQudGl0bGU9cnx8bTt9fSxhZGRUb0hpc3Rvcnk6ZnVuY3Rpb24ocyx0KXtpZighcXgubGFuZy5UeXBlLmlzU3RyaW5nKHMpKXtzPXMrbTt9aWYocXgubGFuZy5UeXBlLmlzU3RyaW5nKHQpKXt0aGlzLnNldFRpdGxlKHQpO3RoaXMuX192eFtzXT10O31pZih0aGlzLmdldFN0YXRlKCkhPT1zKXt0aGlzLl93cml0ZVN0YXRlKHMpO319LG5hdmlnYXRlQmFjazpmdW5jdGlvbigpe3F4LmV2ZW50LlRpbWVyLm9uY2UoZnVuY3Rpb24oKXtoaXN0b3J5LmJhY2soKTt9LDApO30sbmF2aWdhdGVGb3J3YXJkOmZ1bmN0aW9uKCl7cXguZXZlbnQuVGltZXIub25jZShmdW5jdGlvbigpe2hpc3RvcnkuZm9yd2FyZCgpO30sMCk7fSxfb25IaXN0b3J5TG9hZDpmdW5jdGlvbih1KXt0aGlzLnNldFN0YXRlKHUpO3RoaXMuZmlyZURhdGFFdmVudChqLHUpO2lmKHRoaXMuX192eFt1XSE9bnVsbCl7dGhpcy5zZXRUaXRsZSh0aGlzLl9fdnhbdV0pO319LF9yZWFkU3RhdGU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkFic3RyYWN0IG1ldGhvZCBjYWxsIik7fSxfd3JpdGVTdGF0ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQWJzdHJhY3QgbWV0aG9kIGNhbGwiKTt9LF9zZXRIYXNoOmZ1bmN0aW9uKHYpe3ZhciB3PXRoaXMuX2Jhc2VVcmwrKHZ8fG0pO3ZhciB4PXdpbmRvdy5sb2NhdGlvbjtpZih3IT14LmhyZWYpe3guaHJlZj13O319LF9nZXRIYXNoOmZ1bmN0aW9uKCl7dmFyIHk9LyMoLiopJC8uZXhlYyh3aW5kb3cubG9jYXRpb24uaHJlZik7cmV0dXJuIHkmJnlbMV0/eVsxXTptO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX3Z4PW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGQ9Imhhc2hjaGFuZ2UiLGM9ImludGVydmFsIixiPSJxeC5ib20uTmF0aXZlSGlzdG9yeSIsYT0icXguY2xpZW50IjtxeC5DbGFzcy5kZWZpbmUoYix7ZXh0ZW5kOnF4LmJvbS5IaXN0b3J5LGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LmJvbS5IaXN0b3J5LmNhbGwodGhpcyk7dGhpcy5fX3Z6KCk7fSxtZW1iZXJzOntfX3Z5Om51bGwsX192ejpmdW5jdGlvbigpe2lmKHF4LmJvbS5IaXN0b3J5LlNVUFBPUlRTX0hBU0hfQ0hBTkdFX0VWRU5UKXt0aGlzLl9fdnk9cXgubGFuZy5GdW5jdGlvbi5iaW5kKHRoaXMuX192Qix0aGlzKTtxeC5ib20uRXZlbnQuYWRkTmF0aXZlTGlzdGVuZXIod2luZG93LGQsdGhpcy5fX3Z5KTt9ZWxzZXtxeC5ldmVudC5JZGxlLmdldEluc3RhbmNlKCkuYWRkTGlzdGVuZXIoYyx0aGlzLl9fdkIsdGhpcyk7fX0sX192QTpmdW5jdGlvbigpe2lmKHF4LmJvbS5IaXN0b3J5LlNVUFBPUlRTX0hBU0hfQ0hBTkdFX0VWRU5UKXtxeC5ib20uRXZlbnQucmVtb3ZlTmF0aXZlTGlzdGVuZXIod2luZG93LGQsdGhpcy5fX3Z5KTt9ZWxzZXtxeC5ldmVudC5JZGxlLmdldEluc3RhbmNlKCkucmVtb3ZlTGlzdGVuZXIoYyx0aGlzLl9fdkIsdGhpcyk7fX0sX192QjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3JlYWRTdGF0ZSgpO2lmKHF4LmxhbmcuVHlwZS5pc1N0cmluZyhlKSYmZSE9dGhpcy5nZXRTdGF0ZSgpKXt0aGlzLl9vbkhpc3RvcnlMb2FkKGUpO319LF9yZWFkU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVjb2RlKHRoaXMuX2dldEhhc2goKSk7fSxfd3JpdGVTdGF0ZTpxeC5jb3JlLlZhcmlhbnQuc2VsZWN0KGEseyJvcGVyYSI6ZnVuY3Rpb24oZil7cXguZXZlbnQuVGltZXIub25jZShmdW5jdGlvbigpe3RoaXMuX3NldEhhc2godGhpcy5fZW5jb2RlKGYpKTt9LHRoaXMsMCk7fSwiZGVmYXVsdCI6ZnVuY3Rpb24oZyl7dGhpcy5fc2V0SGFzaCh0aGlzLl9lbmNvZGUoZykpO319KX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9fdkEoKTt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbj0iaW50ZXJ2YWwiLG09Ii0xMDAwcHgiLGw9Im1zaHRtbCIsaz0iIixqPSJxeC5ib20uSWZyYW1lSGlzdG9yeSIsaT0icXgvc3RhdGljL2JsYW5rLmh0bWwiLGg9InN0YXRlIixnPSc8aHRtbD48Ym9keT48ZGl2IGlkPSJzdGF0ZSI+JyxmPSc8L2Rpdj48L2JvZHk+PC9odG1sPicsZD0iaGlkZGVuIixhPSJxeC5jbGllbnQiLGM9InVuZGVmaW5lZCIsYj0iYWJzb2x1dGUiO2lmKHF4LmNvcmUuVmFyaWFudC5pc1NldChhLGwpKXtxeC5DbGFzcy5kZWZpbmUoaix7ZXh0ZW5kOnF4LmJvbS5IaXN0b3J5LGNvbnN0cnVjdDpmdW5jdGlvbigpe3F4LmJvbS5IaXN0b3J5LmNhbGwodGhpcyk7dGhpcy5fX3ZGKCk7fSxtZW1iZXJzOntfX3ZDOm51bGwsX192RDpmYWxzZSxfX3ZFOm51bGwsX3NldEluaXRpYWxTdGF0ZTpmdW5jdGlvbigpe3F4LmJvbS5IaXN0b3J5LnByb3RvdHlwZS5fc2V0SW5pdGlhbFN0YXRlLmNhbGwodGhpcyk7dGhpcy5fX3ZFPXRoaXMuX2dldEhhc2goKTt9LF9zZXRIYXNoOmZ1bmN0aW9uKG8pe3F4LmJvbS5IaXN0b3J5LnByb3RvdHlwZS5fc2V0SGFzaC5jYWxsKHRoaXMsbyk7dGhpcy5fX3ZFPXRoaXMuX2VuY29kZShvKTt9LF9yZWFkU3RhdGU6ZnVuY3Rpb24oKXtpZighdGhpcy5fX3ZEKXtyZXR1cm4gdGhpcy5fZGVjb2RlKHRoaXMuX2dldEhhc2goKSk7fXZhciBwPXRoaXMuX192Qy5jb250ZW50V2luZG93LmRvY3VtZW50O3ZhciBxPXAuZ2V0RWxlbWVudEJ5SWQoaCk7cmV0dXJuIHE/dGhpcy5fZGVjb2RlKHEuaW5uZXJUZXh0KTprO30sX3dyaXRlU3RhdGU6ZnVuY3Rpb24ocil7dmFyIHI9dGhpcy5fZW5jb2RlKHIpO3RoaXMuX3NldEhhc2gocik7dGhpcy5fX3ZFPXI7dHJ5e3ZhciBzPXRoaXMuX192Qy5jb250ZW50V2luZG93LmRvY3VtZW50O3Mub3BlbigpO3Mud3JpdGUoZytyK2YpO3MuY2xvc2UoKTt9Y2F0Y2godCl7fX0sX192RjpmdW5jdGlvbigpe3RoaXMuX192SihmdW5jdGlvbigpe3F4LmV2ZW50LklkbGUuZ2V0SW5zdGFuY2UoKS5hZGRMaXN0ZW5lcihuLHRoaXMuX192Ryx0aGlzKTt9KTt9LF9fdkc6ZnVuY3Rpb24oZSl7dmFyIHY9bnVsbDt2YXIgdT10aGlzLl9nZXRIYXNoKCk7aWYoIXRoaXMuX192SSh1KSl7dj10aGlzLl9fdkgodSk7fWVsc2V7dj10aGlzLl9yZWFkU3RhdGUoKTt9aWYocXgubGFuZy5UeXBlLmlzU3RyaW5nKHYpJiZ2IT10aGlzLmdldFN0YXRlKCkpe3RoaXMuX29uSGlzdG9yeUxvYWQodik7fX0sX192SDpmdW5jdGlvbih3KXt3PXRoaXMuX2RlY29kZSh3KTt0aGlzLl93cml0ZVN0YXRlKHcpO3JldHVybiB3O30sX192STpmdW5jdGlvbih4KXtyZXR1cm4gcXgubGFuZy5UeXBlLmlzU3RyaW5nKHgpJiZ4PT10aGlzLl9fdkU7fSxfX3ZKOmZ1bmN0aW9uKHkpe3RoaXMuX192Qz10aGlzLl9fdksoKTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX192Qyk7dGhpcy5fX3ZMKGZ1bmN0aW9uKCl7dGhpcy5fd3JpdGVTdGF0ZSh0aGlzLmdldFN0YXRlKCkpO2lmKHkpe3kuY2FsbCh0aGlzKTt9fSx0aGlzKTt9LF9fdks6ZnVuY3Rpb24oKXt2YXIgej1xeC5ib20uSWZyYW1lLmNyZWF0ZSh7c3JjOnF4LnV0aWwuUmVzb3VyY2VNYW5hZ2VyLmdldEluc3RhbmNlKCkudG9VcmkoaSl9KTt6LnN0eWxlLnZpc2liaWxpdHk9ZDt6LnN0eWxlLnBvc2l0aW9uPWI7ei5zdHlsZS5sZWZ0PW07ei5zdHlsZS50b3A9bTtyZXR1cm4gejt9LF9fdkw6ZnVuY3Rpb24oQSxCLEMpe2lmKHR5cGVvZiBDPT09Yyl7Qz0wO31pZighdGhpcy5fX3ZDLmNvbnRlbnRXaW5kb3d8fCF0aGlzLl9fdkMuY29udGVudFdpbmRvdy5kb2N1bWVudCl7aWYoQz4yMCl7dGhyb3cgbmV3IEVycm9yKCJjYW4ndCBpbml0aWFsaXplIGlmcmFtZSIpO31xeC5ldmVudC5UaW1lci5vbmNlKGZ1bmN0aW9uKCl7dGhpcy5fX3ZMKEEsQiwrK0MpO30sdGhpcywxMCk7cmV0dXJuO310aGlzLl9fdkQ9dHJ1ZTtBLmNhbGwoQnx8d2luZG93KTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX192Qz1udWxsO3F4LmV2ZW50LklkbGUuZ2V0SW5zdGFuY2UoKS5hZGRMaXN0ZW5lcihuLHRoaXMuX192Ryx0aGlzKTt9fSk7fX0pKCk7KGZ1bmN0aW9uKCl7dmFyIG49IkxpYmVyYXRpb24gU2FucyIsbT0iQXJpYWwiLGw9Ikx1Y2lkYSBHcmFuZGUiLGs9InNhbnMtc2VyaWYiLGo9IlRhaG9tYSIsaT0iQ2FuZGFyYSIsaD0iU2Vnb2UgVUkiLGc9IkNvbnNvbGFzIixmPSJDb3VyaWVyIE5ldyIsZT0iTW9uYWNvIixiPSJtb25vc3BhY2UiLGQ9Ikx1Y2lkYSBDb25zb2xlIixjPSJxeC50aGVtZS5tb2Rlcm4uRm9udCIsYT0iRGVqYVZ1IFNhbnMgTW9ubyI7cXguVGhlbWUuZGVmaW5lKGMse2ZvbnRzOnsiZGVmYXVsdCI6e3NpemU6KHF4LmJvbS5jbGllbnQuU3lzdGVtLldJTlZJU1RBfHxxeC5ib20uY2xpZW50LlN5c3RlbS5XSU43KT8xMjoxMSxsaW5lSGVpZ2h0OjEuNCxmYW1pbHk6cXguYm9tLmNsaWVudC5QbGF0Zm9ybS5NQUM/W2xdOihxeC5ib20uY2xpZW50LlN5c3RlbS5XSU5WSVNUQXx8cXguYm9tLmNsaWVudC5TeXN0ZW0uV0lONyk/W2gsaV06W2osbixtLGtdfSwiYm9sZCI6e3NpemU6KHF4LmJvbS5jbGllbnQuU3lzdGVtLldJTlZJU1RBfHxxeC5ib20uY2xpZW50LlN5c3RlbS5XSU43KT8xMjoxMSxsaW5lSGVpZ2h0OjEuNCxmYW1pbHk6cXguYm9tLmNsaWVudC5QbGF0Zm9ybS5NQUM/W2xdOihxeC5ib20uY2xpZW50LlN5c3RlbS5XSU5WSVNUQXx8cXguYm9tLmNsaWVudC5TeXN0ZW0uV0lONyk/W2gsaV06W2osbixtLGtdLGJvbGQ6dHJ1ZX0sInNtYWxsIjp7c2l6ZToocXguYm9tLmNsaWVudC5TeXN0ZW0uV0lOVklTVEF8fHF4LmJvbS5jbGllbnQuU3lzdGVtLldJTjcpPzExOjEwLGxpbmVIZWlnaHQ6MS40LGZhbWlseTpxeC5ib20uY2xpZW50LlBsYXRmb3JtLk1BQz9bbF06KHF4LmJvbS5jbGllbnQuU3lzdGVtLldJTlZJU1RBfHxxeC5ib20uY2xpZW50LlN5c3RlbS5XSU43KT9baCxpXTpbaixuLG0sa119LCJtb25vc3BhY2UiOntzaXplOjExLGxpbmVIZWlnaHQ6MS40LGZhbWlseTpxeC5ib20uY2xpZW50LlBsYXRmb3JtLk1BQz9bZCxlXToocXguYm9tLmNsaWVudC5TeXN0ZW0uV0lOVklTVEF8fHF4LmJvbS5jbGllbnQuU3lzdGVtLldJTjcpP1tnXTpbZyxhLGYsYl19fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGM9IlRhbmdvIixiPSJxeC9pY29uL1RhbmdvIixhPSJxeC50aGVtZS5pY29uLlRhbmdvIjtxeC5UaGVtZS5kZWZpbmUoYSx7dGl0bGU6YyxhbGlhc2VzOnsiaWNvbiI6Yn0saWNvbnM6e319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBpPSJOdW1iZXIiLGg9Il9hcHBseUluc2V0cyIsZz0iYWJzdHJhY3QiLGY9Imluc2V0UmlnaHQiLGU9Imluc2V0VG9wIixkPSJpbnNldEJvdHRvbSIsYz0icXgudWkuZGVjb3JhdGlvbi5BYnN0cmFjdCIsYj0ic2hvcnRoYW5kIixhPSJpbnNldExlZnQiO3F4LkNsYXNzLmRlZmluZShjLHtleHRlbmQ6cXguY29yZS5PYmplY3QsaW1wbGVtZW50OltxeC51aS5kZWNvcmF0aW9uLklEZWNvcmF0b3JdLHR5cGU6Zyxwcm9wZXJ0aWVzOntpbnNldExlZnQ6e2NoZWNrOmksbnVsbGFibGU6dHJ1ZSxhcHBseTpofSxpbnNldFJpZ2h0OntjaGVjazppLG51bGxhYmxlOnRydWUsYXBwbHk6aH0saW5zZXRCb3R0b206e2NoZWNrOmksbnVsbGFibGU6dHJ1ZSxhcHBseTpofSxpbnNldFRvcDp7Y2hlY2s6aSxudWxsYWJsZTp0cnVlLGFwcGx5Omh9LGluc2V0czp7Z3JvdXA6W2UsZixkLGFdLG1vZGU6Yn19LG1lbWJlcnM6e19fb2E6bnVsbCxfZ2V0RGVmYXVsdEluc2V0czpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQWJzdHJhY3QgbWV0aG9kIGNhbGxlZC4iKTt9LF9pc0luaXRpYWxpemVkOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBtZXRob2QgY2FsbGVkLiIpO30sX3Jlc2V0SW5zZXRzOmZ1bmN0aW9uKCl7dGhpcy5fX29hPW51bGw7fSxnZXRJbnNldHM6ZnVuY3Rpb24oKXtpZih0aGlzLl9fb2Epe3JldHVybiB0aGlzLl9fb2E7fXZhciBqPXRoaXMuX2dldERlZmF1bHRJbnNldHMoKTtyZXR1cm4gdGhpcy5fX29hPXtsZWZ0OnRoaXMuZ2V0SW5zZXRMZWZ0KCk9PW51bGw/ai5sZWZ0OnRoaXMuZ2V0SW5zZXRMZWZ0KCkscmlnaHQ6dGhpcy5nZXRJbnNldFJpZ2h0KCk9PW51bGw/ai5yaWdodDp0aGlzLmdldEluc2V0UmlnaHQoKSxib3R0b206dGhpcy5nZXRJbnNldEJvdHRvbSgpPT1udWxsP2ouYm90dG9tOnRoaXMuZ2V0SW5zZXRCb3R0b20oKSx0b3A6dGhpcy5nZXRJbnNldFRvcCgpPT1udWxsP2oudG9wOnRoaXMuZ2V0SW5zZXRUb3AoKX07fSxfYXBwbHlJbnNldHM6ZnVuY3Rpb24oKXt7fTt0aGlzLl9fb2E9bnVsbDt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19vYT1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBxPSJfYXBwbHlCYWNrZ3JvdW5kIixwPSJyZXBlYXQiLG89Im1zaHRtbCIsbj0iYmFja2dyb3VuZFBvc2l0aW9uWCIsbT0iIixsPSJiYWNrZ3JvdW5kUG9zaXRpb25ZIixrPSJuby1yZXBlYXQiLGo9InNjYWxlIixpPSIgIixoPSJyZXBlYXQteCIsYz0icXguY2xpZW50IixnPSJyZXBlYXQteSIsZj0iaGlkZGVuIixiPSJxeC51aS5kZWNvcmF0aW9uLk1CYWNrZ3JvdW5kSW1hZ2UiLGE9IlN0cmluZyIsZT0nIj48L2Rpdj4nLGQ9JzxkaXYgc3R5bGU9Iic7cXguTWl4aW4uZGVmaW5lKGIse3Byb3BlcnRpZXM6e2JhY2tncm91bmRJbWFnZTp7Y2hlY2s6YSxudWxsYWJsZTp0cnVlLGFwcGx5OnF9LGJhY2tncm91bmRSZXBlYXQ6e2NoZWNrOltwLGgsZyxrLGpdLGluaXQ6cCxhcHBseTpxfSxiYWNrZ3JvdW5kUG9zaXRpb25YOntudWxsYWJsZTp0cnVlLGFwcGx5OnF9LGJhY2tncm91bmRQb3NpdGlvblk6e251bGxhYmxlOnRydWUsYXBwbHk6cX0sYmFja2dyb3VuZFBvc2l0aW9uOntncm91cDpbbCxuXX19LG1lbWJlcnM6e19nZW5lcmF0ZUJhY2tncm91bmRNYXJrdXA6ZnVuY3Rpb24ocil7dmFyIHY9bTt2YXIgdT10aGlzLmdldEJhY2tncm91bmRJbWFnZSgpO3ZhciB0PXRoaXMuZ2V0QmFja2dyb3VuZFJlcGVhdCgpO3ZhciB0b3A9dGhpcy5nZXRCYWNrZ3JvdW5kUG9zaXRpb25ZKCk7aWYodG9wPT1udWxsKXt0b3A9MDt9dmFyIHc9dGhpcy5nZXRCYWNrZ3JvdW5kUG9zaXRpb25YKCk7aWYodz09bnVsbCl7dz0wO31yLmJhY2tncm91bmRQb3NpdGlvbj13K2krdG9wO2lmKHUpe3ZhciBzPXF4LnV0aWwuQWxpYXNNYW5hZ2VyLmdldEluc3RhbmNlKCkucmVzb2x2ZSh1KTt2PXF4LmJvbS5lbGVtZW50LkRlY29yYXRpb24uY3JlYXRlKHMsdCxyKTt9ZWxzZXtpZihyKXtpZihxeC5jb3JlLlZhcmlhbnQuaXNTZXQoYyxvKSl7aWYocXguYm9tLmNsaWVudC5FbmdpbmUuVkVSU0lPTjw3fHxxeC5ib20uY2xpZW50LkZlYXR1cmUuUVVJUktTX01PREUpe3Iub3ZlcmZsb3c9Zjt9fXY9ZCtxeC5ib20uZWxlbWVudC5TdHlsZS5jb21waWxlKHIpK2U7fX1yZXR1cm4gdjt9LF9hcHBseUJhY2tncm91bmQ6ZnVuY3Rpb24oKXt7fTt9fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGo9Il9hcHBseVN0eWxlIixpPSJzb2xpZCIsaD0iQ29sb3IiLGc9IiIsZj0iZG91YmxlIixlPSJweCIsZD0icHggIixjPSJkb3R0ZWQiLGI9Il9hcHBseVdpZHRoIixhPSJkYXNoZWQiLEU9Ik51bWJlciIsRD0iICIsQz0ic2hvcnRoYW5kIixCPSJ3aWR0aFRvcCIsQT0ic3R5bGVSaWdodCIsej0ic3R5bGVMZWZ0Iix5PSJ3aWR0aExlZnQiLHg9IndpZHRoQm90dG9tIix3PSJzdHlsZVRvcCIsdj0iY29sb3JCb3R0b20iLHE9InN0eWxlQm90dG9tIixyPSJ3aWR0aFJpZ2h0IixvPSJjb2xvckxlZnQiLHA9ImNvbG9yUmlnaHQiLG09ImNvbG9yVG9wIixuPSJib3JkZXItdG9wIixrPSJib3JkZXItbGVmdCIsbD0iYm9yZGVyLXJpZ2h0IixzPSJxeC51aS5kZWNvcmF0aW9uLlNpbmdsZSIsdD0iYm9yZGVyLWJvdHRvbSIsdT0iYWJzb2x1dGUiO3F4LkNsYXNzLmRlZmluZShzLHtleHRlbmQ6cXgudWkuZGVjb3JhdGlvbi5BYnN0cmFjdCxpbmNsdWRlOltxeC51aS5kZWNvcmF0aW9uLk1CYWNrZ3JvdW5kSW1hZ2VdLGNvbnN0cnVjdDpmdW5jdGlvbihGLEcsSCl7cXgudWkuZGVjb3JhdGlvbi5BYnN0cmFjdC5jYWxsKHRoaXMpO2lmKEYhPW51bGwpe3RoaXMuc2V0V2lkdGgoRik7fWlmKEchPW51bGwpe3RoaXMuc2V0U3R5bGUoRyk7fWlmKEghPW51bGwpe3RoaXMuc2V0Q29sb3IoSCk7fX0scHJvcGVydGllczp7d2lkdGhUb3A6e2NoZWNrOkUsaW5pdDowLGFwcGx5OmJ9LHdpZHRoUmlnaHQ6e2NoZWNrOkUsaW5pdDowLGFwcGx5OmJ9LHdpZHRoQm90dG9tOntjaGVjazpFLGluaXQ6MCxhcHBseTpifSx3aWR0aExlZnQ6e2NoZWNrOkUsaW5pdDowLGFwcGx5OmJ9LHN0eWxlVG9wOntudWxsYWJsZTp0cnVlLGNoZWNrOltpLGMsYSxmXSxpbml0OmksYXBwbHk6an0sc3R5bGVSaWdodDp7bnVsbGFibGU6dHJ1ZSxjaGVjazpbaSxjLGEsZl0saW5pdDppLGFwcGx5Omp9LHN0eWxlQm90dG9tOntudWxsYWJsZTp0cnVlLGNoZWNrOltpLGMsYSxmXSxpbml0OmksYXBwbHk6an0sc3R5bGVMZWZ0OntudWxsYWJsZTp0cnVlLGNoZWNrOltpLGMsYSxmXSxpbml0OmksYXBwbHk6an0sY29sb3JUb3A6e251bGxhYmxlOnRydWUsY2hlY2s6aCxhcHBseTpqfSxjb2xvclJpZ2h0OntudWxsYWJsZTp0cnVlLGNoZWNrOmgsYXBwbHk6an0sY29sb3JCb3R0b206e251bGxhYmxlOnRydWUsY2hlY2s6aCxhcHBseTpqfSxjb2xvckxlZnQ6e251bGxhYmxlOnRydWUsY2hlY2s6aCxhcHBseTpqfSxiYWNrZ3JvdW5kQ29sb3I6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZSxhcHBseTpqfSxsZWZ0Ontncm91cDpbeSx6LG9dfSxyaWdodDp7Z3JvdXA6W3IsQSxwXX0sdG9wOntncm91cDpbQix3LG1dfSxib3R0b206e2dyb3VwOlt4LHEsdl19LHdpZHRoOntncm91cDpbQixyLHgseV0sbW9kZTpDfSxzdHlsZTp7Z3JvdXA6W3csQSxxLHpdLG1vZGU6Q30sY29sb3I6e2dyb3VwOlttLHAsdixvXSxtb2RlOkN9fSxtZW1iZXJzOntfX3BsOm51bGwsX2dldERlZmF1bHRJbnNldHM6ZnVuY3Rpb24oKXtyZXR1cm4ge3RvcDp0aGlzLmdldFdpZHRoVG9wKCkscmlnaHQ6dGhpcy5nZXRXaWR0aFJpZ2h0KCksYm90dG9tOnRoaXMuZ2V0V2lkdGhCb3R0b20oKSxsZWZ0OnRoaXMuZ2V0V2lkdGhMZWZ0KCl9O30sX2lzSW5pdGlhbGl6ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gISF0aGlzLl9fcGw7fSxnZXRNYXJrdXA6ZnVuY3Rpb24oSSl7aWYodGhpcy5fX3BsKXtyZXR1cm4gdGhpcy5fX3BsO312YXIgSj1xeC50aGVtZS5tYW5hZ2VyLkNvbG9yLmdldEluc3RhbmNlKCk7dmFyIEs9e307dmFyIE09dGhpcy5nZXRXaWR0aFRvcCgpO2lmKE0+MCl7S1tuXT1NK2QrdGhpcy5nZXRTdHlsZVRvcCgpK0QrKEoucmVzb2x2ZSh0aGlzLmdldENvbG9yVG9wKCkpfHxnKTt9dmFyIE09dGhpcy5nZXRXaWR0aFJpZ2h0KCk7aWYoTT4wKXtLW2xdPU0rZCt0aGlzLmdldFN0eWxlUmlnaHQoKStEKyhKLnJlc29sdmUodGhpcy5nZXRDb2xvclJpZ2h0KCkpfHxnKTt9dmFyIE09dGhpcy5nZXRXaWR0aEJvdHRvbSgpO2lmKE0+MCl7S1t0XT1NK2QrdGhpcy5nZXRTdHlsZUJvdHRvbSgpK0QrKEoucmVzb2x2ZSh0aGlzLmdldENvbG9yQm90dG9tKCkpfHxnKTt9dmFyIE09dGhpcy5nZXRXaWR0aExlZnQoKTtpZihNPjApe0tba109TStkK3RoaXMuZ2V0U3R5bGVMZWZ0KCkrRCsoSi5yZXNvbHZlKHRoaXMuZ2V0Q29sb3JMZWZ0KCkpfHxnKTt9e307Sy5wb3NpdGlvbj11O0sudG9wPTA7Sy5sZWZ0PTA7dmFyIEw9dGhpcy5fZ2VuZXJhdGVCYWNrZ3JvdW5kTWFya3VwKEspO3JldHVybiB0aGlzLl9fcGw9TDt9LHJlc2l6ZTpmdW5jdGlvbihOLE8sUCl7dmFyIFE9dGhpcy5nZXRJbnNldHMoKTtPLT1RLmxlZnQrUS5yaWdodDtQLT1RLnRvcCtRLmJvdHRvbTtpZihPPDApe089MDt9aWYoUDwwKXtQPTA7fU4uc3R5bGUud2lkdGg9TytlO04uc3R5bGUuaGVpZ2h0PVArZTtOLnN0eWxlLmxlZnQ9KHBhcnNlSW50KE4uc3R5bGUubGVmdCwxMCkrUS5sZWZ0LXRoaXMuZ2V0V2lkdGhMZWZ0KCkpK2U7Ti5zdHlsZS50b3A9KHBhcnNlSW50KE4uc3R5bGUudG9wLDEwKStRLnRvcC10aGlzLmdldFdpZHRoVG9wKCkpK2U7fSx0aW50OmZ1bmN0aW9uKFIsUyl7dmFyIFQ9cXgudGhlbWUubWFuYWdlci5Db2xvci5nZXRJbnN0YW5jZSgpO2lmKFM9PW51bGwpe1M9dGhpcy5nZXRCYWNrZ3JvdW5kQ29sb3IoKTt9Ui5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9VC5yZXNvbHZlKFMpfHxnO30sX2FwcGx5V2lkdGg6ZnVuY3Rpb24oKXt7fTt0aGlzLl9yZXNldEluc2V0cygpO30sX2FwcGx5U3R5bGU6ZnVuY3Rpb24oKXt7fTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19wbD1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBmPSJweCIsZT0icXgudWkuZGVjb3JhdGlvbi5CYWNrZ3JvdW5kIixkPSIiLGM9Il9hcHBseVN0eWxlIixiPSJDb2xvciIsYT0iYWJzb2x1dGUiO3F4LkNsYXNzLmRlZmluZShlLHtleHRlbmQ6cXgudWkuZGVjb3JhdGlvbi5BYnN0cmFjdCxpbmNsdWRlOltxeC51aS5kZWNvcmF0aW9uLk1CYWNrZ3JvdW5kSW1hZ2VdLGNvbnN0cnVjdDpmdW5jdGlvbihnKXtxeC51aS5kZWNvcmF0aW9uLkFic3RyYWN0LmNhbGwodGhpcyk7aWYoZyE9bnVsbCl7dGhpcy5zZXRCYWNrZ3JvdW5kQ29sb3IoZyk7fX0scHJvcGVydGllczp7YmFja2dyb3VuZENvbG9yOntjaGVjazpiLG51bGxhYmxlOnRydWUsYXBwbHk6Y319LG1lbWJlcnM6e19fb2U6bnVsbCxfZ2V0RGVmYXVsdEluc2V0czpmdW5jdGlvbigpe3JldHVybiB7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9O30sX2lzSW5pdGlhbGl6ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gISF0aGlzLl9fb2U7fSxnZXRNYXJrdXA6ZnVuY3Rpb24oKXtpZih0aGlzLl9fb2Upe3JldHVybiB0aGlzLl9fb2U7fXZhciBoPXtwb3NpdGlvbjphLHRvcDowLGxlZnQ6MH07dmFyIGk9dGhpcy5fZ2VuZXJhdGVCYWNrZ3JvdW5kTWFya3VwKGgpO3JldHVybiB0aGlzLl9fb2U9aTt9LHJlc2l6ZTpmdW5jdGlvbihqLGssbCl7dmFyIG09dGhpcy5nZXRJbnNldHMoKTtqLnN0eWxlLndpZHRoPShrLW0ubGVmdC1tLnJpZ2h0KStmO2ouc3R5bGUuaGVpZ2h0PShsLW0udG9wLW0uYm90dG9tKStmO2ouc3R5bGUubGVmdD0tbS5sZWZ0K2Y7ai5zdHlsZS50b3A9LW0udG9wK2Y7fSx0aW50OmZ1bmN0aW9uKG4sbyl7dmFyIHA9cXgudGhlbWUubWFuYWdlci5Db2xvci5nZXRJbnN0YW5jZSgpO2lmKG89PW51bGwpe289dGhpcy5nZXRCYWNrZ3JvdW5kQ29sb3IoKTt9bi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9cC5yZXNvbHZlKG8pfHxkO30sX2FwcGx5U3R5bGU6ZnVuY3Rpb24oKXt7fTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19vZT1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBqPSJfYXBwbHlTdHlsZSIsaT0nIj48L2Rpdj4nLGg9IkNvbG9yIixnPSIxcHgiLGY9JzxkaXYgc3R5bGU9IicsZT0nYm9yZGVyOicsZD0iMXB4IHNvbGlkICIsYz0iIixiPSI7IixhPSJweCIsdj0nPC9kaXY+Jyx1PSJxeC51aS5kZWNvcmF0aW9uLkJldmVsZWQiLHQ9JzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDoxcHg7bGVmdDoxcHg7JyxzPSdib3JkZXItYm90dG9tOicscj0nYm9yZGVyLXJpZ2h0OicscT0nYm9yZGVyLWxlZnQ6JyxwPSdib3JkZXItdG9wOicsbz0iTnVtYmVyIixuPSc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MXB4O2xlZnQ6MHB4OycsbT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjBweDtsZWZ0OjFweDsnLGs9JzxkaXYgc3R5bGU9Im92ZXJmbG93OmhpZGRlbjtmb250LXNpemU6MDtsaW5lLWhlaWdodDowOyI+JyxsPSJhYnNvbHV0ZSI7cXguQ2xhc3MuZGVmaW5lKHUse2V4dGVuZDpxeC51aS5kZWNvcmF0aW9uLkFic3RyYWN0LGluY2x1ZGU6W3F4LnVpLmRlY29yYXRpb24uTUJhY2tncm91bmRJbWFnZV0sY29uc3RydWN0OmZ1bmN0aW9uKHcseCx5KXtxeC51aS5kZWNvcmF0aW9uLkFic3RyYWN0LmNhbGwodGhpcyk7aWYodyE9bnVsbCl7dGhpcy5zZXRPdXRlckNvbG9yKHcpO31pZih4IT1udWxsKXt0aGlzLnNldElubmVyQ29sb3IoeCk7fWlmKHkhPW51bGwpe3RoaXMuc2V0SW5uZXJPcGFjaXR5KHkpO319LHByb3BlcnRpZXM6e2lubmVyQ29sb3I6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZSxhcHBseTpqfSxpbm5lck9wYWNpdHk6e2NoZWNrOm8saW5pdDoxLGFwcGx5Omp9LG91dGVyQ29sb3I6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZSxhcHBseTpqfSxiYWNrZ3JvdW5kQ29sb3I6e2NoZWNrOmgsbnVsbGFibGU6dHJ1ZSxhcHBseTpqfX0sbWVtYmVyczp7X19yeTpudWxsLF9nZXREZWZhdWx0SW5zZXRzOmZ1bmN0aW9uKCl7cmV0dXJuIHt0b3A6MixyaWdodDoyLGJvdHRvbToyLGxlZnQ6Mn07fSxfaXNJbml0aWFsaXplZDpmdW5jdGlvbigpe3JldHVybiAhIXRoaXMuX19yeTt9LF9hcHBseVN0eWxlOmZ1bmN0aW9uKCl7e307fSxnZXRNYXJrdXA6ZnVuY3Rpb24oKXtpZih0aGlzLl9fcnkpe3JldHVybiB0aGlzLl9fcnk7fXZhciB6PXF4LnRoZW1lLm1hbmFnZXIuQ29sb3IuZ2V0SW5zdGFuY2UoKTt2YXIgQT1bXTt2YXIgRD1kK3oucmVzb2x2ZSh0aGlzLmdldE91dGVyQ29sb3IoKSkrYjt2YXIgQz1kK3oucmVzb2x2ZSh0aGlzLmdldElubmVyQ29sb3IoKSkrYjtBLnB1c2goayk7QS5wdXNoKGYpO0EucHVzaChlLEQpO0EucHVzaChxeC5ib20uZWxlbWVudC5PcGFjaXR5LmNvbXBpbGUoMC4zNSkpO0EucHVzaChpKTtBLnB1c2gobik7QS5wdXNoKHEsRCk7QS5wdXNoKHIsRCk7QS5wdXNoKHF4LmJvbS5lbGVtZW50Lk9wYWNpdHkuY29tcGlsZSgxKSk7QS5wdXNoKGkpO0EucHVzaChmKTtBLnB1c2gobSk7QS5wdXNoKHAsRCk7QS5wdXNoKHMsRCk7QS5wdXNoKHF4LmJvbS5lbGVtZW50Lk9wYWNpdHkuY29tcGlsZSgxKSk7QS5wdXNoKGkpO3ZhciBCPXtwb3NpdGlvbjpsLHRvcDpnLGxlZnQ6ZyxvcGFjaXR5OjF9O0EucHVzaCh0aGlzLl9nZW5lcmF0ZUJhY2tncm91bmRNYXJrdXAoQikpO0EucHVzaCh0KTtBLnB1c2goZSxDKTtBLnB1c2gocXguYm9tLmVsZW1lbnQuT3BhY2l0eS5jb21waWxlKHRoaXMuZ2V0SW5uZXJPcGFjaXR5KCkpKTtBLnB1c2goaSk7QS5wdXNoKHYpO3JldHVybiB0aGlzLl9fcnk9QS5qb2luKGMpO30scmVzaXplOmZ1bmN0aW9uKEUsRixHKXtpZihGPDQpe0Y9NDt9aWYoRzw0KXtHPTQ7fWlmKHF4LmJvbS5jbGllbnQuRmVhdHVyZS5DT05URU5UX0JPWCl7dmFyIG91dGVyV2lkdGg9Ri0yO3ZhciBvdXRlckhlaWdodD1HLTI7dmFyIE09b3V0ZXJXaWR0aDt2YXIgTD1vdXRlckhlaWdodDt2YXIgaW5uZXJXaWR0aD1GLTQ7dmFyIGlubmVySGVpZ2h0PUctNDt9ZWxzZXt2YXIgb3V0ZXJXaWR0aD1GO3ZhciBvdXRlckhlaWdodD1HO3ZhciBNPUYtMjt2YXIgTD1HLTI7dmFyIGlubmVyV2lkdGg9TTt2YXIgaW5uZXJIZWlnaHQ9TDt9dmFyIE89YTt2YXIgSz1FLmNoaWxkTm9kZXNbMF0uc3R5bGU7Sy53aWR0aD1vdXRlcldpZHRoK087Sy5oZWlnaHQ9b3V0ZXJIZWlnaHQrTzt2YXIgSj1FLmNoaWxkTm9kZXNbMV0uc3R5bGU7Si53aWR0aD1vdXRlcldpZHRoK087Si5oZWlnaHQ9TCtPO3ZhciBJPUUuY2hpbGROb2Rlc1syXS5zdHlsZTtJLndpZHRoPU0rTztJLmhlaWdodD1vdXRlckhlaWdodCtPO3ZhciBIPUUuY2hpbGROb2Rlc1szXS5zdHlsZTtILndpZHRoPU0rTztILmhlaWdodD1MK087dmFyIE49RS5jaGlsZE5vZGVzWzRdLnN0eWxlO04ud2lkdGg9aW5uZXJXaWR0aCtPO04uaGVpZ2h0PWlubmVySGVpZ2h0K087fSx0aW50OmZ1bmN0aW9uKFAsUSl7dmFyIFI9cXgudGhlbWUubWFuYWdlci5Db2xvci5nZXRJbnN0YW5jZSgpO2lmKFE9PW51bGwpe1E9dGhpcy5nZXRCYWNrZ3JvdW5kQ29sb3IoKTt9UC5jaGlsZE5vZGVzWzNdLnN0eWxlLmJhY2tncm91bmRDb2xvcj1SLnJlc29sdmUoUSl8fGM7fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9fcnk9bnVsbDt9fSk7fSkoKTsoZnVuY3Rpb24oKXt2YXIgbz0iX2FwcGx5U3R5bGUiLG49IiIsbT0iQ29sb3IiLGw9InB4IixrPSJzb2xpZCIsaj0iZG90dGVkIixpPSJkb3VibGUiLGg9ImRhc2hlZCIsZz0iX2FwcGx5V2lkdGgiLGY9InF4LnVpLmRlY29yYXRpb24uVW5pZm9ybSIsYz0icHggIixlPSIgIixkPSJzY2FsZSIsYj0iUG9zaXRpdmVJbnRlZ2VyIixhPSJhYnNvbHV0ZSI7cXguQ2xhc3MuZGVmaW5lKGYse2V4dGVuZDpxeC51aS5kZWNvcmF0aW9uLkFic3RyYWN0LGluY2x1ZGU6W3F4LnVpLmRlY29yYXRpb24uTUJhY2tncm91bmRJbWFnZV0sY29uc3RydWN0OmZ1bmN0aW9uKHAscSxyKXtxeC51aS5kZWNvcmF0aW9uLkFic3RyYWN0LmNhbGwodGhpcyk7aWYocCE9bnVsbCl7dGhpcy5zZXRXaWR0aChwKTt9aWYocSE9bnVsbCl7dGhpcy5zZXRTdHlsZShxKTt9aWYociE9bnVsbCl7dGhpcy5zZXRDb2xvcihyKTt9fSxwcm9wZXJ0aWVzOnt3aWR0aDp7Y2hlY2s6Yixpbml0OjAsYXBwbHk6Z30sc3R5bGU6e251bGxhYmxlOnRydWUsY2hlY2s6W2ssaixoLGldLGluaXQ6ayxhcHBseTpvfSxjb2xvcjp7bnVsbGFibGU6dHJ1ZSxjaGVjazptLGFwcGx5Om99LGJhY2tncm91bmRDb2xvcjp7Y2hlY2s6bSxudWxsYWJsZTp0cnVlLGFwcGx5Om99fSxtZW1iZXJzOntfX3JQOm51bGwsX2dldERlZmF1bHRJbnNldHM6ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldFdpZHRoKCk7cmV0dXJuIHt0b3A6cyxyaWdodDpzLGJvdHRvbTpzLGxlZnQ6c307fSxfaXNJbml0aWFsaXplZDpmdW5jdGlvbigpe3JldHVybiAhIXRoaXMuX19yUDt9LGdldE1hcmt1cDpmdW5jdGlvbigpe2lmKHRoaXMuX19yUCl7cmV0dXJuIHRoaXMuX19yUDt9dmFyIHQ9e3Bvc2l0aW9uOmEsdG9wOjAsbGVmdDowfTt2YXIgdT10aGlzLmdldFdpZHRoKCk7e307dmFyIHc9cXgudGhlbWUubWFuYWdlci5Db2xvci5nZXRJbnN0YW5jZSgpO3QuYm9yZGVyPXUrYyt0aGlzLmdldFN0eWxlKCkrZSsody5yZXNvbHZlKHRoaXMuZ2V0Q29sb3IoKSl8fG4pO3ZhciB2PXRoaXMuX2dlbmVyYXRlQmFja2dyb3VuZE1hcmt1cCh0KTtyZXR1cm4gdGhpcy5fX3JQPXY7fSxyZXNpemU6ZnVuY3Rpb24oeCx5LHope3ZhciBCPXRoaXMuZ2V0QmFja2dyb3VuZEltYWdlKCkmJnRoaXMuZ2V0QmFja2dyb3VuZFJlcGVhdCgpPT1kO2lmKEJ8fHF4LmJvbS5jbGllbnQuRmVhdHVyZS5DT05URU5UX0JPWCl7dmFyIEE9dGhpcy5nZXRXaWR0aCgpKjI7eS09QTt6LT1BO2lmKHk8MCl7eT0wO31pZih6PDApe3o9MDt9fXguc3R5bGUud2lkdGg9eStsO3guc3R5bGUuaGVpZ2h0PXorbDt9LHRpbnQ6ZnVuY3Rpb24oQyxEKXt2YXIgRT1xeC50aGVtZS5tYW5hZ2VyLkNvbG9yLmdldEluc3RhbmNlKCk7aWYoRD09bnVsbCl7RD10aGlzLmdldEJhY2tncm91bmRDb2xvcigpO31DLnN0eWxlLmJhY2tncm91bmRDb2xvcj1FLnJlc29sdmUoRCl8fG47fSxfYXBwbHlXaWR0aDpmdW5jdGlvbigpe3t9O3RoaXMuX3Jlc2V0SW5zZXRzKCk7fSxfYXBwbHlTdHlsZTpmdW5jdGlvbigpe3t9O319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX3JQPW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIG09Ik51bWJlciIsbD0iX2FwcGx5SW5zZXRzIixrPSItbCIsaj0iaW5zZXRSaWdodCIsaT0iaW5zZXRUb3AiLGg9Il9hcHBseUJhc2VJbWFnZSIsZz0iaW5zZXRCb3R0b20iLGY9InNldCIsZT0ic2hvcnRoYW5kIixkPSItdCIsYT0iaW5zZXRMZWZ0IixjPSJTdHJpbmciLGI9InF4LnVpLmRlY29yYXRpb24uR3JpZCI7cXguQ2xhc3MuZGVmaW5lKGIse2V4dGVuZDpxeC5jb3JlLk9iamVjdCxpbXBsZW1lbnQ6W3F4LnVpLmRlY29yYXRpb24uSURlY29yYXRvcl0sY29uc3RydWN0OmZ1bmN0aW9uKG4sbyl7cXguY29yZS5PYmplY3QuY2FsbCh0aGlzKTtpZihxeC51aS5kZWNvcmF0aW9uLmNzczMuQm9yZGVySW1hZ2UuSVNfU1VQUE9SVEVEKXt0aGlzLl9fb0E9bmV3IHF4LnVpLmRlY29yYXRpb24uY3NzMy5Cb3JkZXJJbWFnZSgpO2lmKG4pe3RoaXMuX19vQihuKTt9fWVsc2V7dGhpcy5fX29BPW5ldyBxeC51aS5kZWNvcmF0aW9uLkdyaWREaXYobik7fWlmKG8hPW51bGwpe3RoaXMuX19vQS5zZXRJbnNldHMobyk7fX0scHJvcGVydGllczp7YmFzZUltYWdlOntjaGVjazpjLG51bGxhYmxlOnRydWUsYXBwbHk6aH0saW5zZXRMZWZ0OntjaGVjazptLG51bGxhYmxlOnRydWUsYXBwbHk6bH0saW5zZXRSaWdodDp7Y2hlY2s6bSxudWxsYWJsZTp0cnVlLGFwcGx5Omx9LGluc2V0Qm90dG9tOntjaGVjazptLG51bGxhYmxlOnRydWUsYXBwbHk6bH0saW5zZXRUb3A6e2NoZWNrOm0sbnVsbGFibGU6dHJ1ZSxhcHBseTpsfSxpbnNldHM6e2dyb3VwOltpLGosZyxhXSxtb2RlOmV9fSxtZW1iZXJzOntfX29BOm51bGwsZ2V0TWFya3VwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vQS5nZXRNYXJrdXAoKTt9LHJlc2l6ZTpmdW5jdGlvbihwLHEscil7dGhpcy5fX29BLnJlc2l6ZShwLHEscik7fSx0aW50OmZ1bmN0aW9uKHMsdCl7fSxnZXRJbnNldHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX29BLmdldEluc2V0cygpO30sX2FwcGx5SW5zZXRzOmZ1bmN0aW9uKHUsdixuYW1lKXt2YXIgdz1mK3F4LmxhbmcuU3RyaW5nLmZpcnN0VXAobmFtZSk7dGhpcy5fX29BW3ddKHUpO30sX2FwcGx5QmFzZUltYWdlOmZ1bmN0aW9uKHgseSl7aWYodGhpcy5fX29BIGluc3RhbmNlb2YgcXgudWkuZGVjb3JhdGlvbi5HcmlkRGl2KXt0aGlzLl9fb0Euc2V0QmFzZUltYWdlKHgpO31lbHNle3RoaXMuX19vQih4KTt9fSxfX29COmZ1bmN0aW9uKHope3ZhciBCLEQ7dGhpcy5fX29BLnNldEJvcmRlckltYWdlKHopO3ZhciBGPXF4LnV0aWwuQWxpYXNNYW5hZ2VyLmdldEluc3RhbmNlKCkucmVzb2x2ZSh6KTt2YXIgRz0vKC4qKShcLlthLXpdKykkLy5leGVjKEYpO3ZhciBDPUdbMV07dmFyIEU9R1syXTt2YXIgQT1xeC51dGlsLlJlc291cmNlTWFuYWdlci5nZXRJbnN0YW5jZSgpO3ZhciBIPUEuZ2V0SW1hZ2VIZWlnaHQoQytkK0UpO3ZhciBJPUEuZ2V0SW1hZ2VXaWR0aChDK2srRSk7e307dGhpcy5fX29BLnNldFNsaWNlKFtILEldKTt9fSxkZXN0cnVjdDpmdW5jdGlvbigpe3RoaXMuX19vQT1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBtPSJzb2xpZCIsbD0ic2NhbGUiLGs9ImJvcmRlci1tYWluIixqPSJ3aGl0ZSIsaT0icmVwZWF0LXgiLGg9ImJvcmRlci1zZXBhcmF0b3IiLGc9ImJhY2tncm91bmQtbGlnaHQiLGY9ImludmFsaWQiLGU9ImJvcmRlci1mb2N1c2VkLWludmFsaWQiLGQ9ImJvcmRlci1pbnB1dCIsYnQ9ImJvcmRlci1kaXNhYmxlZCIsYnM9ImRlY29yYXRpb24vdGFibGUvaGVhZGVyLWNlbGwucG5nIixicj0iZGVjb3JhdGlvbi9mb3JtL2lucHV0LnBuZyIsYnE9IiNmOGY4ZjgiLGJwPSJkZWNvcmF0aW9uL3Njcm9sbGJhci9zY3JvbGxiYXItYnV0dG9uLWJnLWhvcml6b250YWwucG5nIixibz0iI2I2YjZiNiIsYm49ImJhY2tncm91bmQtcGFuZSIsYm09InJlcGVhdC15IixibD0iZGVjb3JhdGlvbi9mb3JtL2lucHV0LWZvY3VzZWQucG5nIixiaz0iIzMzNTA4RCIsdD0iZGVjb3JhdGlvbi9zZWxlY3Rpb24ucG5nIix1PSJkZWNvcmF0aW9uL3Njcm9sbGJhci9zY3JvbGxiYXItYnV0dG9uLWJnLXZlcnRpY2FsLnBuZyIscj0iZGVjb3JhdGlvbi90YWJ2aWV3L3RhYi1idXR0b24tdG9wLWFjdGl2ZS5wbmciLHM9ImJsYWNrIixwPSJkZWNvcmF0aW9uL2dyb3VwLWl0ZW0ucG5nIixxPSJkZWNvcmF0aW9uL2Zvcm0vYnV0dG9uLWMucG5nIixuPSJkZWNvcmF0aW9uL3Njcm9sbGJhci9zY3JvbGxiYXItYmctdmVydGljYWwucG5nIixvPSJkZWNvcmF0aW9uL2Zvcm0vYnV0dG9uLnBuZyIsQj0iZGVjb3JhdGlvbi9mb3JtL2J1dHRvbi1jaGVja2VkLnBuZyIsQz0iZGVjb3JhdGlvbi90YWJ2aWV3L3RhYi1idXR0b24tbGVmdC1pbmFjdGl2ZS5wbmciLE89ImRlY29yYXRpb24vZ3JvdXBib3gvZ3JvdXBib3gucG5nIixLPSIjRkFGQUZBIixXPSJkZWNvcmF0aW9uL3BhbmUvcGFuZS5wbmciLFI9ImRvdHRlZCIsYmc9ImRlY29yYXRpb24vdG9vbGJhci90b29sYmFyLXBhcnQuZ2lmIixiYz0iZGVjb3JhdGlvbi90YWJ2aWV3L3RhYi1idXR0b24tdG9wLWluYWN0aXZlLnBuZyIsRz0iZGVjb3JhdGlvbi9tZW51L2Jhci1iYWNrZ3JvdW5kLnBuZyIsYmo9ImNlbnRlciIsYmk9ImRlY29yYXRpb24vdGFidmlldy90YWItYnV0dG9uLWJvdHRvbS1hY3RpdmUucG5nIixiaD0iZGVjb3JhdGlvbi9mb3JtL2J1dHRvbi1ob3ZlcmVkLnBuZyIsRj0iZGVjb3JhdGlvbi9mb3JtL3Rvb2x0aXAtZXJyb3ItYXJyb3cucG5nIixJPSJkZWNvcmF0aW9uL3dpbmRvdy9jYXB0aW9uYmFyLWluYWN0aXZlLnBuZyIsSj0icXgvZGVjb3JhdGlvbi9Nb2Rlcm4iLE09ImRlY29yYXRpb24vbWVudS9iYWNrZ3JvdW5kLnBuZyIsUD0iZGVjb3JhdGlvbi93aW5kb3cvc3RhdHVzYmFyLnBuZyIsUz0iYm9yZGVyLWZvY3VzZWQiLFk9InRhYmxlLWZvY3VzLWluZGljYXRvciIsYmU9IiNGMkYyRjIiLHY9ImRlY29yYXRpb24vZm9ybS9idXR0b24tY2hlY2tlZC1jLnBuZyIsdz0iZGVjb3JhdGlvbi9zY3JvbGxiYXIvc2Nyb2xsYmFyLWJnLWhvcml6b250YWwucG5nIixIPSJxeC50aGVtZS5tb2Rlcm4uRGVjb3JhdGlvbiIsVj0iI2Y0ZjRmNCIsVT0iZGVjb3JhdGlvbi9zaGFkb3cvc2hhZG93LXNtYWxsLnBuZyIsVD0iZGVjb3JhdGlvbi9hcHAtaGVhZGVyLnBuZyIsYmI9ImRlY29yYXRpb24vdGFidmlldy90YWJ2aWV3LXBhbmUucG5nIixiYT0iZGVjb3JhdGlvbi9mb3JtL3Rvb2x0aXAtZXJyb3IucG5nIixRPSJkZWNvcmF0aW9uL2Zvcm0vYnV0dG9uLWZvY3VzZWQucG5nIixYPSJkZWNvcmF0aW9uL3RhYnZpZXcvdGFiLWJ1dHRvbi1ib3R0b20taW5hY3RpdmUucG5nIixhPSJkZWNvcmF0aW9uL2Zvcm0vYnV0dG9uLWRpc2FibGVkLnBuZyIsYmQ9ImRlY29yYXRpb24vdGFidmlldy90YWItYnV0dG9uLXJpZ2h0LWFjdGl2ZS5wbmciLHg9ImRlY29yYXRpb24vZm9ybS9idXR0b24tcHJlc3NlZC5wbmciLHk9Im5vLXJlcGVhdCIsTD0iZGVjb3JhdGlvbi93aW5kb3cvY2FwdGlvbmJhci1hY3RpdmUucG5nIixiPSJkZWNvcmF0aW9uL3RhYnZpZXcvdGFiLWJ1dHRvbi1sZWZ0LWFjdGl2ZS5wbmciLGM9ImJhY2tncm91bmQtc3BsaXRwYW5lIixFPSJkZWNvcmF0aW9uL2Zvcm0vYnV0dG9uLWNoZWNrZWQtZm9jdXNlZC5wbmciLHo9IiNDNUM1QzUiLEE9ImRlY29yYXRpb24vdG9vbGJhci90b29sYmFyLWdyYWRpZW50LnBuZyIsRD0iZGVjb3JhdGlvbi90YWJ2aWV3L3RhYi1idXR0b24tcmlnaHQtaW5hY3RpdmUucG5nIixOPSIjYjhiOGI4IixiZj0iZGVjb3JhdGlvbi9zaGFkb3cvc2hhZG93LnBuZyI7cXguVGhlbWUuZGVmaW5lKEgse2FsaWFzZXM6e2RlY29yYXRpb246Sn0sZGVjb3JhdGlvbnM6eyJtYWluIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uVW5pZm9ybSxzdHlsZTp7d2lkdGg6MSxjb2xvcjprfX0sInNlbGVjdGVkIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uQmFja2dyb3VuZCxzdHlsZTp7YmFja2dyb3VuZEltYWdlOnQsYmFja2dyb3VuZFJlcGVhdDpsfX0sInNlbGVjdGVkLWRyYWdvdmVyIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uU2luZ2xlLHN0eWxlOntiYWNrZ3JvdW5kSW1hZ2U6dCxiYWNrZ3JvdW5kUmVwZWF0OmwsYm90dG9tOlsyLG0sYmtdfX0sImRyYWdvdmVyIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uU2luZ2xlLHN0eWxlOntib3R0b206WzIsbSxia119fSwicGFuZSI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkdyaWQsc3R5bGU6e2Jhc2VJbWFnZTpXLGluc2V0czpbMCwyLDMsMF19fSwiZ3JvdXAiOntkZWNvcmF0b3I6cXgudWkuZGVjb3JhdGlvbi5HcmlkLHN0eWxlOntiYXNlSW1hZ2U6T319LCJib3JkZXItaW52YWxpZCI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkJldmVsZWQsc3R5bGU6e291dGVyQ29sb3I6Zixpbm5lckNvbG9yOmosaW5uZXJPcGFjaXR5OjAuNSxiYWNrZ3JvdW5kSW1hZ2U6YnIsYmFja2dyb3VuZFJlcGVhdDppLGJhY2tncm91bmRDb2xvcjpnfX0sImtleWJvYXJkLWZvY3VzIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uU2luZ2xlLHN0eWxlOnt3aWR0aDoxLGNvbG9yOnMsc3R5bGU6Un19LCJzZXBhcmF0b3ItaG9yaXpvbnRhbCI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLlNpbmdsZSxzdHlsZTp7d2lkdGhMZWZ0OjEsY29sb3JMZWZ0Omh9fSwic2VwYXJhdG9yLXZlcnRpY2FsIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uU2luZ2xlLHN0eWxlOnt3aWR0aFRvcDoxLGNvbG9yVG9wOmh9fSwidG9vbHRpcC1lcnJvciI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkdyaWQsc3R5bGU6e2Jhc2VJbWFnZTpiYSxpbnNldHM6WzIsNSw1LDJdfX0sInRvb2x0aXAtZXJyb3ItYXJyb3ciOntkZWNvcmF0b3I6cXgudWkuZGVjb3JhdGlvbi5CYWNrZ3JvdW5kLHN0eWxlOntiYWNrZ3JvdW5kSW1hZ2U6RixiYWNrZ3JvdW5kUG9zaXRpb25ZOmJqLGJhY2tncm91bmRSZXBlYXQ6eSxpbnNldHM6WzAsMCwwLDEwXX19LCJzaGFkb3ctd2luZG93Ijp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uR3JpZCxzdHlsZTp7YmFzZUltYWdlOmJmLGluc2V0czpbNCw4LDgsNF19fSwic2hhZG93LXBvcHVwIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uR3JpZCxzdHlsZTp7YmFzZUltYWdlOlUsaW5zZXRzOlswLDMsMywwXX19LCJzY3JvbGxiYXItaG9yaXpvbnRhbCI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkJhY2tncm91bmQsc3R5bGU6e2JhY2tncm91bmRJbWFnZTp3LGJhY2tncm91bmRSZXBlYXQ6aX19LCJzY3JvbGxiYXItdmVydGljYWwiOntkZWNvcmF0b3I6cXgudWkuZGVjb3JhdGlvbi5CYWNrZ3JvdW5kLHN0eWxlOntiYWNrZ3JvdW5kSW1hZ2U6bixiYWNrZ3JvdW5kUmVwZWF0OmJtfX0sInNjcm9sbGJhci1zbGlkZXItaG9yaXpvbnRhbCI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkJldmVsZWQsc3R5bGU6e2JhY2tncm91bmRJbWFnZTpicCxiYWNrZ3JvdW5kUmVwZWF0Omwsb3V0ZXJDb2xvcjprLGlubmVyQ29sb3I6aixpbm5lck9wYWNpdHk6MC41fX0sInNjcm9sbGJhci1zbGlkZXItaG9yaXpvbnRhbC1kaXNhYmxlZCI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkJldmVsZWQsc3R5bGU6e2JhY2tncm91bmRJbWFnZTpicCxiYWNrZ3JvdW5kUmVwZWF0Omwsb3V0ZXJDb2xvcjpidCxpbm5lckNvbG9yOmosaW5uZXJPcGFjaXR5OjAuM319LCJzY3JvbGxiYXItc2xpZGVyLXZlcnRpY2FsIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uQmV2ZWxlZCxzdHlsZTp7YmFja2dyb3VuZEltYWdlOnUsYmFja2dyb3VuZFJlcGVhdDpsLG91dGVyQ29sb3I6ayxpbm5lckNvbG9yOmosaW5uZXJPcGFjaXR5OjAuNX19LCJzY3JvbGxiYXItc2xpZGVyLXZlcnRpY2FsLWRpc2FibGVkIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uQmV2ZWxlZCxzdHlsZTp7YmFja2dyb3VuZEltYWdlOnUsYmFja2dyb3VuZFJlcGVhdDpsLG91dGVyQ29sb3I6YnQsaW5uZXJDb2xvcjpqLGlubmVyT3BhY2l0eTowLjN9fSwiYnV0dG9uIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uR3JpZCxzdHlsZTp7YmFzZUltYWdlOm8saW5zZXRzOjJ9fSwiYnV0dG9uLWRpc2FibGVkIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uR3JpZCxzdHlsZTp7YmFzZUltYWdlOmEsaW5zZXRzOjJ9fSwiYnV0dG9uLWZvY3VzZWQiOntkZWNvcmF0b3I6cXgudWkuZGVjb3JhdGlvbi5HcmlkLHN0eWxlOntiYXNlSW1hZ2U6USxpbnNldHM6Mn19LCJidXR0b24taG92ZXJlZCI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkdyaWQsc3R5bGU6e2Jhc2VJbWFnZTpiaCxpbnNldHM6Mn19LCJidXR0b24tcHJlc3NlZCI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkdyaWQsc3R5bGU6e2Jhc2VJbWFnZTp4LGluc2V0czoyfX0sImJ1dHRvbi1jaGVja2VkIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uR3JpZCxzdHlsZTp7YmFzZUltYWdlOkIsaW5zZXRzOjJ9fSwiYnV0dG9uLWNoZWNrZWQtZm9jdXNlZCI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkdyaWQsc3R5bGU6e2Jhc2VJbWFnZTpFLGluc2V0czoyfX0sImJ1dHRvbi1pbnZhbGlkLXNoYWRvdyI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkJldmVsZWQsc3R5bGU6e291dGVyQ29sb3I6Zixpbm5lckNvbG9yOmUsaW5zZXRzOlsxXX19LCJjaGVja2JveC1pbnZhbGlkLXNoYWRvdyI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkJldmVsZWQsc3R5bGU6e291dGVyQ29sb3I6Zixpbm5lckNvbG9yOmUsaW5zZXRzOlswXX19LCJpbnB1dCI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkJldmVsZWQsc3R5bGU6e291dGVyQ29sb3I6ZCxpbm5lckNvbG9yOmosaW5uZXJPcGFjaXR5OjAuNSxiYWNrZ3JvdW5kSW1hZ2U6YnIsYmFja2dyb3VuZFJlcGVhdDppLGJhY2tncm91bmRDb2xvcjpnfX0sImlucHV0LWZvY3VzZWQiOntkZWNvcmF0b3I6cXgudWkuZGVjb3JhdGlvbi5CZXZlbGVkLHN0eWxlOntvdXRlckNvbG9yOmQsaW5uZXJDb2xvcjpTLGJhY2tncm91bmRJbWFnZTpibCxiYWNrZ3JvdW5kUmVwZWF0OmksYmFja2dyb3VuZENvbG9yOmd9fSwiaW5wdXQtZm9jdXNlZC1pbnZhbGlkIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uQmV2ZWxlZCxzdHlsZTp7b3V0ZXJDb2xvcjpmLGlubmVyQ29sb3I6ZSxiYWNrZ3JvdW5kSW1hZ2U6YmwsYmFja2dyb3VuZFJlcGVhdDppLGJhY2tncm91bmRDb2xvcjpnLGluc2V0czpbMl19fSwiaW5wdXQtZGlzYWJsZWQiOntkZWNvcmF0b3I6cXgudWkuZGVjb3JhdGlvbi5CZXZlbGVkLHN0eWxlOntvdXRlckNvbG9yOmJ0LGlubmVyQ29sb3I6aixpbm5lck9wYWNpdHk6MC41LGJhY2tncm91bmRJbWFnZTpicixiYWNrZ3JvdW5kUmVwZWF0OmksYmFja2dyb3VuZENvbG9yOmd9fSwidG9vbGJhciI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkJhY2tncm91bmQsc3R5bGU6e2JhY2tncm91bmRJbWFnZTpBLGJhY2tncm91bmRSZXBlYXQ6bH19LCJ0b29sYmFyLWJ1dHRvbi1ob3ZlcmVkIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uQmV2ZWxlZCxzdHlsZTp7b3V0ZXJDb2xvcjpibyxpbm5lckNvbG9yOmJxLGJhY2tncm91bmRJbWFnZTpxLGJhY2tncm91bmRSZXBlYXQ6bH19LCJ0b29sYmFyLWJ1dHRvbi1jaGVja2VkIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uQmV2ZWxlZCxzdHlsZTp7b3V0ZXJDb2xvcjpibyxpbm5lckNvbG9yOmJxLGJhY2tncm91bmRJbWFnZTp2LGJhY2tncm91bmRSZXBlYXQ6bH19LCJ0b29sYmFyLXNlcGFyYXRvciI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLlNpbmdsZSxzdHlsZTp7d2lkdGhMZWZ0OjEsd2lkdGhSaWdodDoxLGNvbG9yTGVmdDpOLGNvbG9yUmlnaHQ6VixzdHlsZUxlZnQ6bSxzdHlsZVJpZ2h0Om19fSwidG9vbGJhci1wYXJ0Ijp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uQmFja2dyb3VuZCxzdHlsZTp7YmFja2dyb3VuZEltYWdlOmJnLGJhY2tncm91bmRSZXBlYXQ6Ym19fSwidGFidmlldy1wYW5lIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uR3JpZCxzdHlsZTp7YmFzZUltYWdlOmJiLGluc2V0czpbNCw2LDcsNF19fSwidGFidmlldy1wYWdlLWJ1dHRvbi10b3AtYWN0aXZlIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uR3JpZCxzdHlsZTp7YmFzZUltYWdlOnJ9fSwidGFidmlldy1wYWdlLWJ1dHRvbi10b3AtaW5hY3RpdmUiOntkZWNvcmF0b3I6cXgudWkuZGVjb3JhdGlvbi5HcmlkLHN0eWxlOntiYXNlSW1hZ2U6YmN9fSwidGFidmlldy1wYWdlLWJ1dHRvbi1ib3R0b20tYWN0aXZlIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uR3JpZCxzdHlsZTp7YmFzZUltYWdlOmJpfX0sInRhYnZpZXctcGFnZS1idXR0b24tYm90dG9tLWluYWN0aXZlIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uR3JpZCxzdHlsZTp7YmFzZUltYWdlOlh9fSwidGFidmlldy1wYWdlLWJ1dHRvbi1sZWZ0LWFjdGl2ZSI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkdyaWQsc3R5bGU6e2Jhc2VJbWFnZTpifX0sInRhYnZpZXctcGFnZS1idXR0b24tbGVmdC1pbmFjdGl2ZSI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkdyaWQsc3R5bGU6e2Jhc2VJbWFnZTpDfX0sInRhYnZpZXctcGFnZS1idXR0b24tcmlnaHQtYWN0aXZlIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uR3JpZCxzdHlsZTp7YmFzZUltYWdlOmJkfX0sInRhYnZpZXctcGFnZS1idXR0b24tcmlnaHQtaW5hY3RpdmUiOntkZWNvcmF0b3I6cXgudWkuZGVjb3JhdGlvbi5HcmlkLHN0eWxlOntiYXNlSW1hZ2U6RH19LCJzcGxpdHBhbmUiOntkZWNvcmF0b3I6cXgudWkuZGVjb3JhdGlvbi5Vbmlmb3JtLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6Ym4sd2lkdGg6Myxjb2xvcjpjLHN0eWxlOm19fSwid2luZG93Ijp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uU2luZ2xlLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6Ym4sd2lkdGg6MSxjb2xvcjprLHdpZHRoVG9wOjB9fSwid2luZG93LWNhcHRpb25iYXItYWN0aXZlIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uR3JpZCxzdHlsZTp7YmFzZUltYWdlOkx9fSwid2luZG93LWNhcHRpb25iYXItaW5hY3RpdmUiOntkZWNvcmF0b3I6cXgudWkuZGVjb3JhdGlvbi5HcmlkLHN0eWxlOntiYXNlSW1hZ2U6SX19LCJ3aW5kb3ctc3RhdHVzYmFyIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uR3JpZCxzdHlsZTp7YmFzZUltYWdlOlB9fSwidGFibGUiOntkZWNvcmF0b3I6cXgudWkuZGVjb3JhdGlvbi5TaW5nbGUsc3R5bGU6e3dpZHRoOjEsY29sb3I6ayxzdHlsZTptfX0sInRhYmxlLXN0YXR1c2JhciI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLlNpbmdsZSxzdHlsZTp7d2lkdGhUb3A6MSxjb2xvclRvcDprLHN0eWxlOm19fSwidGFibGUtc2Nyb2xsZXItaGVhZGVyIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uU2luZ2xlLHN0eWxlOntiYWNrZ3JvdW5kSW1hZ2U6YnMsYmFja2dyb3VuZFJlcGVhdDpsLHdpZHRoQm90dG9tOjEsY29sb3JCb3R0b206ayxzdHlsZTptfX0sInRhYmxlLWhlYWRlci1jZWxsIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uU2luZ2xlLHN0eWxlOnt3aWR0aFJpZ2h0OjEsY29sb3JSaWdodDpoLHN0eWxlUmlnaHQ6bX19LCJ0YWJsZS1oZWFkZXItY2VsbC1ob3ZlcmVkIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uU2luZ2xlLHN0eWxlOnt3aWR0aFJpZ2h0OjEsY29sb3JSaWdodDpoLHN0eWxlUmlnaHQ6bSx3aWR0aEJvdHRvbToxLGNvbG9yQm90dG9tOmosc3R5bGVCb3R0b206bX19LCJ0YWJsZS1jb2x1bW4tYnV0dG9uIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uU2luZ2xlLHN0eWxlOntiYWNrZ3JvdW5kSW1hZ2U6YnMsYmFja2dyb3VuZFJlcGVhdDpsLHdpZHRoQm90dG9tOjEsY29sb3JCb3R0b206ayxzdHlsZTptfX0sInRhYmxlLXNjcm9sbGVyLWZvY3VzLWluZGljYXRvciI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLlNpbmdsZSxzdHlsZTp7d2lkdGg6Mixjb2xvcjpZLHN0eWxlOm19fSwicHJvZ3Jlc3NpdmUtdGFibGUtaGVhZGVyIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uU2luZ2xlLHN0eWxlOnt3aWR0aDoxLGNvbG9yOmssc3R5bGU6bX19LCJwcm9ncmVzc2l2ZS10YWJsZS1oZWFkZXItY2VsbCI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLlNpbmdsZSxzdHlsZTp7YmFja2dyb3VuZEltYWdlOmJzLGJhY2tncm91bmRSZXBlYXQ6bCx3aWR0aFJpZ2h0OjEsY29sb3JSaWdodDpiZSxzdHlsZTptfX0sIm1lbnUiOntkZWNvcmF0b3I6cXgudWkuZGVjb3JhdGlvbi5TaW5nbGUsc3R5bGU6e2JhY2tncm91bmRJbWFnZTpNLGJhY2tncm91bmRSZXBlYXQ6bCx3aWR0aDoxLGNvbG9yOmssc3R5bGU6bX19LCJtZW51LXNlcGFyYXRvciI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLlNpbmdsZSxzdHlsZTp7d2lkdGhUb3A6MSxjb2xvclRvcDp6LHdpZHRoQm90dG9tOjEsY29sb3JCb3R0b206S319LCJtZW51YmFyIjp7ZGVjb3JhdG9yOnF4LnVpLmRlY29yYXRpb24uU2luZ2xlLHN0eWxlOntiYWNrZ3JvdW5kSW1hZ2U6RyxiYWNrZ3JvdW5kUmVwZWF0Omwsd2lkdGg6MSxjb2xvcjpoLHN0eWxlOm19fSwiYXBwLWhlYWRlciI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLkJhY2tncm91bmQsc3R5bGU6e2JhY2tncm91bmRJbWFnZTpULGJhY2tncm91bmRSZXBlYXQ6bH19LCJwcm9ncmVzc2JhciI6e2RlY29yYXRvcjpxeC51aS5kZWNvcmF0aW9uLlNpbmdsZSxzdHlsZTp7d2lkdGg6MSxjb2xvcjpkfX0sImdyb3VwLWl0ZW0iOntkZWNvcmF0b3I6cXgudWkuZGVjb3JhdGlvbi5CYWNrZ3JvdW5kLHN0eWxlOntiYWNrZ3JvdW5kSW1hZ2U6cCxiYWNrZ3JvdW5kUmVwZWF0Omx9fX19KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBqPSIjQ0NDQ0NDIixpPSIjRjNGM0YzIixoPSIjRTRFNEU0IixnPSIjMWExYTFhIixmPSIjMDg0RkFCIixlPSJncmF5IixkPSIjZmZmZWZlIixjPSJ3aGl0ZSIsYj0iIzRhNGE0YSIsYT0iI0VFRUVFRSIsSz0iIzgwQjRFRiIsSj0iI0M3MkIyQiIsST0iI2ZmZmZkZCIsSD0iIzMzNDg2NiIsRz0iIzAwMjA0RCIsRj0iIzY2NjY2NiIsRT0iI0NCQzhDRCIsRD0iIzk5QzNGRSIsQz0iIzgwODA4MCIsQj0iI0Y0RjRGNCIscT0iIzAwMTUzMyIscj0iIzkwOTA5MCIsbz0iI0ZDRkNGQyIscD0iIzMxNGE2ZSIsbT0iI0I2QjZCNiIsbj0iIzA4ODBFRiIsaz0iIzRkNGQ0ZCIsbD0iI0RGREZERiIscz0iIzAwMDAwMCIsdD0iI0ZGOTk5OSIsdz0iIzdCN0E3RSIsdj0iIzI2MzY0RCIseT0iIzk5MDAwMCIseD0iI0FGQUZBRiIsQT0iIzQwNDk1NSIsej0iI0FBQUFBQSIsdT0icXgudGhlbWUubW9kZXJuLkNvbG9yIjtxeC5UaGVtZS5kZWZpbmUodSx7Y29sb3JzOnsiYmFja2dyb3VuZC1hcHBsaWNhdGlvbiI6bCwiYmFja2dyb3VuZC1wYW5lIjppLCJiYWNrZ3JvdW5kLWxpZ2h0IjpvLCJiYWNrZ3JvdW5kLW1lZGl1bSI6YSwiYmFja2dyb3VuZC1zcGxpdHBhbmUiOngsImJhY2tncm91bmQtdGlwIjpJLCJiYWNrZ3JvdW5kLXRpcC1lcnJvciI6SiwiYmFja2dyb3VuZC1vZGQiOmgsInRleHQtbGlnaHQiOnIsInRleHQtZ3JheSI6YiwidGV4dC1sYWJlbCI6ZywidGV4dC10aXRsZSI6cCwidGV4dC1pbnB1dCI6cywidGV4dC1ob3ZlcmVkIjpxLCJ0ZXh0LWRpc2FibGVkIjp3LCJ0ZXh0LXNlbGVjdGVkIjpkLCJ0ZXh0LWFjdGl2ZSI6diwidGV4dC1pbmFjdGl2ZSI6QSwidGV4dC1wbGFjZWhvbGRlciI6RSwiYm9yZGVyLW1haW4iOmssImJvcmRlci1zZXBhcmF0b3IiOkMsImJvcmRlci1pbnB1dCI6SCwiYm9yZGVyLWRpc2FibGVkIjptLCJib3JkZXItcGFuZSI6RywiYm9yZGVyLWJ1dHRvbiI6RiwiYm9yZGVyLWNvbHVtbiI6aiwiYm9yZGVyLWZvY3VzZWQiOkQsImludmFsaWQiOnksImJvcmRlci1mb2N1c2VkLWludmFsaWQiOnQsInRhYmxlLXBhbmUiOmksInRhYmxlLWZvY3VzLWluZGljYXRvciI6biwidGFibGUtcm93LWJhY2tncm91bmQtZm9jdXNlZC1zZWxlY3RlZCI6ZiwidGFibGUtcm93LWJhY2tncm91bmQtZm9jdXNlZCI6SywidGFibGUtcm93LWJhY2tncm91bmQtc2VsZWN0ZWQiOmYsInRhYmxlLXJvdy1iYWNrZ3JvdW5kLWV2ZW4iOmksInRhYmxlLXJvdy1iYWNrZ3JvdW5kLW9kZCI6aCwidGFibGUtcm93LXNlbGVjdGVkIjpkLCJ0YWJsZS1yb3ciOmcsInRhYmxlLXJvdy1saW5lIjpqLCJ0YWJsZS1jb2x1bW4tbGluZSI6aiwicHJvZ3Jlc3NpdmUtdGFibGUtaGVhZGVyIjp6LCJwcm9ncmVzc2l2ZS10YWJsZS1yb3ctYmFja2dyb3VuZC1ldmVuIjpCLCJwcm9ncmVzc2l2ZS10YWJsZS1yb3ctYmFja2dyb3VuZC1vZGQiOmgsInByb2dyZXNzaXZlLXByb2dyZXNzYmFyLWJhY2tncm91bmQiOmUsInByb2dyZXNzaXZlLXByb2dyZXNzYmFyLWluZGljYXRvci1kb25lIjpqLCJwcm9ncmVzc2l2ZS1wcm9ncmVzc2Jhci1pbmRpY2F0b3ItdW5kb25lIjpjLCJwcm9ncmVzc2l2ZS1wcm9ncmVzc2Jhci1wZXJjZW50LWJhY2tncm91bmQiOmUsInByb2dyZXNzaXZlLXByb2dyZXNzYmFyLXBlcmNlbnQtdGV4dCI6Y319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBiPSJhcGl2aWV3ZXIuVGhlbWUiLGE9IkFQSVZpZXdlciB0aGVtZSI7cXguVGhlbWUuZGVmaW5lKGIse3RpdGxlOmEsbWV0YTp7Y29sb3I6cXgudGhlbWUubW9kZXJuLkNvbG9yLGRlY29yYXRpb246cXgudGhlbWUubW9kZXJuLkRlY29yYXRpb24sZm9udDpxeC50aGVtZS5tb2Rlcm4uRm9udCxhcHBlYXJhbmNlOmFwaXZpZXdlci5BcHBlYXJhbmNlLGljb246cXgudGhlbWUuaWNvbi5UYW5nb319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBqPSJfYXBwbHlTdHlsZSIsaT0ic3RyZXRjaCIsaD0iSW50ZWdlciIsZz0icHgiLGY9IiAiLGU9InJlcGVhdCIsZD0icm91bmQiLGM9InNob3J0aGFuZCIsYj0icHggIixhPSJzbGljZUJvdHRvbSIseT0iOyc+PC9kaXY+Iix4PSI8ZGl2IHN0eWxlPSciLHc9InNsaWNlTGVmdCIsdj0ic2xpY2VSaWdodCIsdT0icmVwZWF0WCIsdD0iU3RyaW5nIixzPSJxeC51aS5kZWNvcmF0aW9uLmNzczMuQm9yZGVySW1hZ2UiLHI9ImJvcmRlci1ib3giLHE9IiIscD0nIikgJyxuPSJzbGljZVRvcCIsbz0ndXJsKCInLGw9ImhpZGRlbiIsbT0icmVwZWF0WSIsaz0iYWJzb2x1dGUiO3F4LkNsYXNzLmRlZmluZShzLHtleHRlbmQ6cXgudWkuZGVjb3JhdGlvbi5BYnN0cmFjdCxjb25zdHJ1Y3Q6ZnVuY3Rpb24oeixBKXtxeC51aS5kZWNvcmF0aW9uLkFic3RyYWN0LmNhbGwodGhpcyk7aWYoeiE9bnVsbCl7dGhpcy5zZXRCb3JkZXJJbWFnZSh6KTt9aWYoQSE9bnVsbCl7dGhpcy5zZXRTbGljZShBKTt9fSxzdGF0aWNzOntJU19TVVBQT1JURUQ6cXguYm9tLmVsZW1lbnQuU3R5bGUuaXNQcm9wZXJ0eVN1cHBvcnRlZCgiYm9yZGVySW1hZ2UiKX0scHJvcGVydGllczp7Ym9yZGVySW1hZ2U6e2NoZWNrOnQsbnVsbGFibGU6dHJ1ZSxhcHBseTpqfSxzbGljZVRvcDp7Y2hlY2s6aCxpbml0OjAsYXBwbHk6an0sc2xpY2VSaWdodDp7Y2hlY2s6aCxpbml0OjAsYXBwbHk6an0sc2xpY2VCb3R0b206e2NoZWNrOmgsaW5pdDowLGFwcGx5Omp9LHNsaWNlTGVmdDp7Y2hlY2s6aCxpbml0OjAsYXBwbHk6an0sc2xpY2U6e2dyb3VwOltuLHYsYSx3XSxtb2RlOmN9LHJlcGVhdFg6e2NoZWNrOltpLGUsZF0saW5pdDppLGFwcGx5Omp9LHJlcGVhdFk6e2NoZWNrOltpLGUsZF0saW5pdDppLGFwcGx5Omp9LHJlcGVhdDp7Z3JvdXA6W3UsbV0sbW9kZTpjfX0sbWVtYmVyczp7X19udzpudWxsLF9nZXREZWZhdWx0SW5zZXRzOmZ1bmN0aW9uKCl7cmV0dXJuIHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH07fSxfaXNJbml0aWFsaXplZDpmdW5jdGlvbigpe3JldHVybiAhIXRoaXMuX19udzt9LGdldE1hcmt1cDpmdW5jdGlvbigpe2lmKHRoaXMuX19udyl7cmV0dXJuIHRoaXMuX19udzt9dmFyIEI9dGhpcy5fcmVzb2x2ZUltYWdlVXJsKHRoaXMuZ2V0Qm9yZGVySW1hZ2UoKSk7dmFyIEM9W3RoaXMuZ2V0U2xpY2VUb3AoKSx0aGlzLmdldFNsaWNlUmlnaHQoKSx0aGlzLmdldFNsaWNlQm90dG9tKCksdGhpcy5nZXRTbGljZUxlZnQoKV07dmFyIEQ9W3RoaXMuZ2V0UmVwZWF0WCgpLHRoaXMuZ2V0UmVwZWF0WSgpXS5qb2luKGYpO3RoaXMuX19udz1beCxxeC5ib20uZWxlbWVudC5TdHlsZS5jb21waWxlKHsiYm9yZGVySW1hZ2UiOm8rQitwK0Muam9pbihmKStmK0QscG9zaXRpb246ayxsaW5lSGVpZ2h0OjAsZm9udFNpemU6MCxvdmVyZmxvdzpsLGJveFNpemluZzpyLGJvcmRlcldpZHRoOkMuam9pbihiKStnfSkseV0uam9pbihxKTtyZXR1cm4gdGhpcy5fX253O30scmVzaXplOmZ1bmN0aW9uKEUsRixHKXtFLnN0eWxlLndpZHRoPUYrZztFLnN0eWxlLmhlaWdodD1HK2c7fSx0aW50OmZ1bmN0aW9uKEgsSSl7fSxfYXBwbHlTdHlsZTpmdW5jdGlvbigpe3t9O30sX3Jlc29sdmVJbWFnZVVybDpmdW5jdGlvbihKKXtyZXR1cm4gcXgudXRpbC5SZXNvdXJjZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS50b1VyaShxeC51dGlsLkFsaWFzTWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlc29sdmUoSikpO319LGRlc3RydWN0OmZ1bmN0aW9uKCl7dGhpcy5fX253PW51bGw7fX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGo9InB4IixpPSIwcHgiLGg9Ii0xcHgiLGc9Im5vLXJlcGVhdCIsZj0ic2NhbGUteCIsZT0ic2NhbGUteSIsZD0iLXRyIixjPSItbCIsYj0nPC9kaXY+JyxhPSJzY2FsZSIseD0icXguY2xpZW50Iix3PSItYnIiLHY9Ii10Iix1PSItdGwiLHQ9Ii1yIixzPSc8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVuO2ZvbnQtc2l6ZTowO2xpbmUtaGVpZ2h0OjA7Ij4nLHI9Il9hcHBseUJhc2VJbWFnZSIscT0iLWIiLHA9IlN0cmluZyIsbz0iIixtPSItYmwiLG49InF4LnVpLmRlY29yYXRpb24uR3JpZERpdiIsaz0iLWMiLGw9Im1zaHRtbCI7cXguQ2xhc3MuZGVmaW5lKG4se2V4dGVuZDpxeC51aS5kZWNvcmF0aW9uLkFic3RyYWN0LGNvbnN0cnVjdDpmdW5jdGlvbih5LHope3F4LnVpLmRlY29yYXRpb24uQWJzdHJhY3QuY2FsbCh0aGlzKTtpZih5IT1udWxsKXt0aGlzLnNldEJhc2VJbWFnZSh5KTt9aWYoeiE9bnVsbCl7dGhpcy5zZXRJbnNldHMoeik7fX0scHJvcGVydGllczp7YmFzZUltYWdlOntjaGVjazpwLG51bGxhYmxlOnRydWUsYXBwbHk6cn19LG1lbWJlcnM6e19fbng6bnVsbCxfX255Om51bGwsX19uejpudWxsLF9nZXREZWZhdWx0SW5zZXRzOmZ1bmN0aW9uKCl7cmV0dXJuIHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH07fSxfaXNJbml0aWFsaXplZDpmdW5jdGlvbigpe3JldHVybiAhIXRoaXMuX19ueDt9LGdldE1hcmt1cDpmdW5jdGlvbigpe2lmKHRoaXMuX19ueCl7cmV0dXJuIHRoaXMuX19ueDt9dmFyIEE9cXguYm9tLmVsZW1lbnQuRGVjb3JhdGlvbjt2YXIgQj10aGlzLl9fbnk7dmFyIEM9dGhpcy5fX256O3ZhciBEPVtdO0QucHVzaChzKTtELnB1c2goQS5jcmVhdGUoQi50bCxnLHt0b3A6MCxsZWZ0OjB9KSk7RC5wdXNoKEEuY3JlYXRlKEIudCxmLHt0b3A6MCxsZWZ0OkMubGVmdCtqfSkpO0QucHVzaChBLmNyZWF0ZShCLnRyLGcse3RvcDowLHJpZ2h0OjB9KSk7RC5wdXNoKEEuY3JlYXRlKEIuYmwsZyx7Ym90dG9tOjAsbGVmdDowfSkpO0QucHVzaChBLmNyZWF0ZShCLmIsZix7Ym90dG9tOjAsbGVmdDpDLmxlZnQran0pKTtELnB1c2goQS5jcmVhdGUoQi5icixnLHtib3R0b206MCxyaWdodDowfSkpO0QucHVzaChBLmNyZWF0ZShCLmwsZSx7dG9wOkMudG9wK2osbGVmdDowfSkpO0QucHVzaChBLmNyZWF0ZShCLmMsYSx7dG9wOkMudG9wK2osbGVmdDpDLmxlZnQran0pKTtELnB1c2goQS5jcmVhdGUoQi5yLGUse3RvcDpDLnRvcCtqLHJpZ2h0OjB9KSk7RC5wdXNoKGIpO3JldHVybiB0aGlzLl9fbng9RC5qb2luKG8pO30scmVzaXplOmZ1bmN0aW9uKEUsRixHKXt2YXIgSD10aGlzLl9fbno7dmFyIGlubmVyV2lkdGg9Ri1ILmxlZnQtSC5yaWdodDt2YXIgaW5uZXJIZWlnaHQ9Ry1ILnRvcC1ILmJvdHRvbTtpZihpbm5lcldpZHRoPDApe2lubmVyV2lkdGg9MDt9aWYoaW5uZXJIZWlnaHQ8MCl7aW5uZXJIZWlnaHQ9MDt9RS5zdHlsZS53aWR0aD1GK2o7RS5zdHlsZS5oZWlnaHQ9RytqO0UuY2hpbGROb2Rlc1sxXS5zdHlsZS53aWR0aD1pbm5lcldpZHRoK2o7RS5jaGlsZE5vZGVzWzRdLnN0eWxlLndpZHRoPWlubmVyV2lkdGgrajtFLmNoaWxkTm9kZXNbN10uc3R5bGUud2lkdGg9aW5uZXJXaWR0aCtqO0UuY2hpbGROb2Rlc1s2XS5zdHlsZS5oZWlnaHQ9aW5uZXJIZWlnaHQrajtFLmNoaWxkTm9kZXNbN10uc3R5bGUuaGVpZ2h0PWlubmVySGVpZ2h0K2o7RS5jaGlsZE5vZGVzWzhdLnN0eWxlLmhlaWdodD1pbm5lckhlaWdodCtqO2lmKHF4LmNvcmUuVmFyaWFudC5pc1NldCh4LGwpKXtpZihxeC5ib20uY2xpZW50LkVuZ2luZS5WRVJTSU9OPDd8fChxeC5ib20uY2xpZW50LkZlYXR1cmUuUVVJUktTX01PREUmJnF4LmJvbS5jbGllbnQuRW5naW5lLlZFUlNJT048OCkpe2lmKEYlMj09MSl7RS5jaGlsZE5vZGVzWzJdLnN0eWxlLm1hcmdpblJpZ2h0PWg7RS5jaGlsZE5vZGVzWzVdLnN0eWxlLm1hcmdpblJpZ2h0PWg7RS5jaGlsZE5vZGVzWzhdLnN0eWxlLm1hcmdpblJpZ2h0PWg7fWVsc2V7RS5jaGlsZE5vZGVzWzJdLnN0eWxlLm1hcmdpblJpZ2h0PWk7RS5jaGlsZE5vZGVzWzVdLnN0eWxlLm1hcmdpblJpZ2h0PWk7RS5jaGlsZE5vZGVzWzhdLnN0eWxlLm1hcmdpblJpZ2h0PWk7fWlmKEclMj09MSl7RS5jaGlsZE5vZGVzWzNdLnN0eWxlLm1hcmdpbkJvdHRvbT1oO0UuY2hpbGROb2Rlc1s0XS5zdHlsZS5tYXJnaW5Cb3R0b209aDtFLmNoaWxkTm9kZXNbNV0uc3R5bGUubWFyZ2luQm90dG9tPWg7fWVsc2V7RS5jaGlsZE5vZGVzWzNdLnN0eWxlLm1hcmdpbkJvdHRvbT1pO0UuY2hpbGROb2Rlc1s0XS5zdHlsZS5tYXJnaW5Cb3R0b209aTtFLmNoaWxkTm9kZXNbNV0uc3R5bGUubWFyZ2luQm90dG9tPWk7fX19fSx0aW50OmZ1bmN0aW9uKEksSil7fSxfYXBwbHlCYXNlSW1hZ2U6ZnVuY3Rpb24oSyxMKXt7fTtpZihLKXt2YXIgUD10aGlzLl9yZXNvbHZlSW1hZ2VVcmwoSyk7dmFyIFE9LyguKikoXC5bYS16XSspJC8uZXhlYyhQKTt2YXIgTz1RWzFdO3ZhciBOPVFbMl07dmFyIE09dGhpcy5fX255PXt0bDpPK3UrTix0Ok8rditOLHRyOk8rZCtOLGJsOk8rbStOLGI6TytxK04sYnI6Tyt3K04sbDpPK2MrTixjOk8raytOLHI6Tyt0K059O3RoaXMuX19uej10aGlzLl9jb21wdXRlRWRnZVNpemVzKE0pO319LF9yZXNvbHZlSW1hZ2VVcmw6ZnVuY3Rpb24oUil7cmV0dXJuIHF4LnV0aWwuQWxpYXNNYW5hZ2VyLmdldEluc3RhbmNlKCkucmVzb2x2ZShSKTt9LF9jb21wdXRlRWRnZVNpemVzOmZ1bmN0aW9uKFMpe3ZhciBUPXF4LnV0aWwuUmVzb3VyY2VNYW5hZ2VyLmdldEluc3RhbmNlKCk7cmV0dXJuIHt0b3A6VC5nZXRJbWFnZUhlaWdodChTLnQpLGJvdHRvbTpULmdldEltYWdlSGVpZ2h0KFMuYiksbGVmdDpULmdldEltYWdlV2lkdGgoUy5sKSxyaWdodDpULmdldEltYWdlV2lkdGgoUy5yKX07fX0sZGVzdHJ1Y3Q6ZnVuY3Rpb24oKXt0aGlzLl9fbng9dGhpcy5fX255PXRoaXMuX19uej1udWxsO319KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBhPSJhcGl2aWV3ZXIudGVzdC5TdHJpbmdFeHRlbmQiO3F4LkNsYXNzLmRlZmluZShhLHtleHRlbmQ6U3RyaW5nLG1lbWJlcnM6e319KTt9KSgpOwotCi1xeC4kJGxvYWRlci5pbml0KCk7Ci0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL2Jvb3RzdHJhcC5qcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL2Jvb3RzdHJhcC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdiOWQ4OS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9iZW5jaC9ib290c3RyYXAuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxODI5ICswLDAgQEAKLS8qIE1vZGlmaWNhdGlvbnM6IHJlcGxhY2VkIG9uZSA7IHdpdGggXG4gZm9yIHRlc3RpbmcgcHVycG9zZXMKLSAqIEJlZm9yZSB0aGUgc2Vjb25kICFmdW5jdGlvbiAtLSBuZCAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGJvb3RzdHJhcC10cmFuc2l0aW9uLmpzIHYyLjAuNAotICogaHR0cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlwdC5odG1sI3RyYW5zaXRpb25zCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0KLSFmdW5jdGlvbiAoJCkgewotCi0gICQoZnVuY3Rpb24gKCkgewotCi0gICAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187Ci0KLQotICAgIC8qIENTUyBUUkFOU0lUSU9OIFNVUFBPUlQgKGh0dHA6Ly93d3cubW9kZXJuaXpyLmNvbS8pCi0gICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gPSAoZnVuY3Rpb24gKCkgewotCi0gICAgICB2YXIgdHJhbnNpdGlvbkVuZCA9IChmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYm9vdHN0cmFwJykKLSAgICAgICAgICAsIHRyYW5zRW5kRXZlbnROYW1lcyA9IHsKLSAgICAgICAgICAgICAgICdXZWJraXRUcmFuc2l0aW9uJyA6ICd3ZWJraXRUcmFuc2l0aW9uRW5kJwotICAgICAgICAgICAgLCAgJ01velRyYW5zaXRpb24nICAgIDogJ3RyYW5zaXRpb25lbmQnCi0gICAgICAgICAgICAsICAnT1RyYW5zaXRpb24nICAgICAgOiAnb1RyYW5zaXRpb25FbmQnCi0gICAgICAgICAgICAsICAnbXNUcmFuc2l0aW9uJyAgICAgOiAnTVNUcmFuc2l0aW9uRW5kJwotICAgICAgICAgICAgLCAgJ3RyYW5zaXRpb24nICAgICAgIDogJ3RyYW5zaXRpb25lbmQnCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgLCBuYW1lCi0KLSAgICAgICAgZm9yIChuYW1lIGluIHRyYW5zRW5kRXZlbnROYW1lcyl7Ci0gICAgICAgICAgaWYgKGVsLnN0eWxlW25hbWVdICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgIHJldHVybiB0cmFuc0VuZEV2ZW50TmFtZXNbbmFtZV0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgfSgpKQotCi0gICAgICByZXR1cm4gdHJhbnNpdGlvbkVuZCAmJiB7Ci0gICAgICAgIGVuZDogdHJhbnNpdGlvbkVuZAotICAgICAgfQotCi0gICAgfSkoKQotCi0gIH0pCi0KLX0od2luZG93LmpRdWVyeSkKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGJvb3RzdHJhcC1hbGVydC5qcyB2Mi4wLjQKLSAqIGh0dHA6Ly90d2l0dGVyLmdpdGh1Yi5jb20vYm9vdHN0cmFwL2phdmFzY3JpcHQuaHRtbCNhbGVydHMKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0KLSFmdW5jdGlvbiAoJCkgewotCi0gICJ1c2Ugc3RyaWN0IjsgLy8ganNoaW50IDtfOwotCi0KLSAvKiBBTEVSVCBDTEFTUyBERUZJTklUSU9OCi0gICogPT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gIHZhciBkaXNtaXNzID0gJ1tkYXRhLWRpc21pc3M9ImFsZXJ0Il0nCi0gICAgLCBBbGVydCA9IGZ1bmN0aW9uIChlbCkgewotICAgICAgICAkKGVsKS5vbignY2xpY2snLCBkaXNtaXNzLCB0aGlzLmNsb3NlKQotICAgICAgfQotCi0gIEFsZXJ0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uIChlKSB7Ci0gICAgdmFyICR0aGlzID0gJCh0aGlzKQotICAgICAgLCBzZWxlY3RvciA9ICR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JykKLSAgICAgICwgJHBhcmVudAotCi0gICAgaWYgKCFzZWxlY3RvcikgewotICAgICAgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdocmVmJykKLSAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IgJiYgc2VsZWN0b3IucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCAnJykgLy9zdHJpcCBmb3IgaWU3Ci0gICAgfQotCi0gICAgJHBhcmVudCA9ICQoc2VsZWN0b3IpCi0KLSAgICBlICYmIGUucHJldmVudERlZmF1bHQoKQotCi0gICAgJHBhcmVudC5sZW5ndGggfHwgKCRwYXJlbnQgPSAkdGhpcy5oYXNDbGFzcygnYWxlcnQnKSA/ICR0aGlzIDogJHRoaXMucGFyZW50KCkpCi0KLSAgICAkcGFyZW50LnRyaWdnZXIoZSA9ICQuRXZlbnQoJ2Nsb3NlJykpCi0KLSAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuCi0KLSAgICAkcGFyZW50LnJlbW92ZUNsYXNzKCdpbicpCi0KLSAgICBmdW5jdGlvbiByZW1vdmVFbGVtZW50KCkgewotICAgICAgJHBhcmVudAotICAgICAgICAudHJpZ2dlcignY2xvc2VkJykKLSAgICAgICAgLnJlbW92ZSgpCi0gICAgfQotCi0gICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgJHBhcmVudC5oYXNDbGFzcygnZmFkZScpID8KLSAgICAgICRwYXJlbnQub24oJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCByZW1vdmVFbGVtZW50KSA6Ci0gICAgICByZW1vdmVFbGVtZW50KCkKLSAgfQotCi0KLSAvKiBBTEVSVCBQTFVHSU4gREVGSU5JVElPTgotICAqID09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLSAgJC5mbi5hbGVydCA9IGZ1bmN0aW9uIChvcHRpb24pIHsKLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciAkdGhpcyA9ICQodGhpcykKLSAgICAgICAgLCBkYXRhID0gJHRoaXMuZGF0YSgnYWxlcnQnKQotICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdhbGVydCcsIChkYXRhID0gbmV3IEFsZXJ0KHRoaXMpKSkKLSAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0uY2FsbCgkdGhpcykKLSAgICB9KQotICB9Ci0KLSAgJC5mbi5hbGVydC5Db25zdHJ1Y3RvciA9IEFsZXJ0Ci0KLQotIC8qIEFMRVJUIERBVEEtQVBJCi0gICogPT09PT09PT09PT09PT0gKi8KLQotICAkKGZ1bmN0aW9uICgpIHsKLSAgICAkKCdib2R5Jykub24oJ2NsaWNrLmFsZXJ0LmRhdGEtYXBpJywgZGlzbWlzcywgQWxlcnQucHJvdG90eXBlLmNsb3NlKQotICB9KQotCi19KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogYm9vdHN0cmFwLWJ1dHRvbi5qcyB2Mi4wLjQKLSAqIGh0dHA6Ly90d2l0dGVyLmdpdGh1Yi5jb20vYm9vdHN0cmFwL2phdmFzY3JpcHQuaHRtbCNidXR0b25zCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLQotIWZ1bmN0aW9uICgkKSB7Ci0KLSAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187Ci0KLQotIC8qIEJVVFRPTiBQVUJMSUMgQ0xBU1MgREVGSU5JVElPTgotICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gIHZhciBCdXR0b24gPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykgewotICAgIHRoaXMuJGVsZW1lbnQgPSAkKGVsZW1lbnQpCi0gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sICQuZm4uYnV0dG9uLmRlZmF1bHRzLCBvcHRpb25zKQotICB9Ci0KLSAgQnV0dG9uLnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSkgewotICAgIHZhciBkID0gJ2Rpc2FibGVkJwotICAgICAgLCAkZWwgPSB0aGlzLiRlbGVtZW50Ci0gICAgICAsIGRhdGEgPSAkZWwuZGF0YSgpCi0gICAgICAsIHZhbCA9ICRlbC5pcygnaW5wdXQnKSA/ICd2YWwnIDogJ2h0bWwnCi0KLSAgICBzdGF0ZSA9IHN0YXRlICsgJ1RleHQnCi0gICAgZGF0YS5yZXNldFRleHQgfHwgJGVsLmRhdGEoJ3Jlc2V0VGV4dCcsICRlbFt2YWxdKCkpCi0KLSAgICAkZWxbdmFsXShkYXRhW3N0YXRlXSB8fCB0aGlzLm9wdGlvbnNbc3RhdGVdKQotCi0gICAgLy8gcHVzaCB0byBldmVudCBsb29wIHRvIGFsbG93IGZvcm1zIHRvIHN1Ym1pdAotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewotICAgICAgc3RhdGUgPT0gJ2xvYWRpbmdUZXh0JyA/Ci0gICAgICAgICRlbC5hZGRDbGFzcyhkKS5hdHRyKGQsIGQpIDoKLSAgICAgICAgJGVsLnJlbW92ZUNsYXNzKGQpLnJlbW92ZUF0dHIoZCkKLSAgICB9LCAwKQotICB9Ci0KLSAgQnV0dG9uLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyICRwYXJlbnQgPSB0aGlzLiRlbGVtZW50LnBhcmVudCgnW2RhdGEtdG9nZ2xlPSJidXR0b25zLXJhZGlvIl0nKQotCi0gICAgJHBhcmVudCAmJiAkcGFyZW50Ci0gICAgICAuZmluZCgnLmFjdGl2ZScpCi0gICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpCi0KLSAgICB0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKCdhY3RpdmUnKQotICB9Ci0KLQotIC8qIEJVVFRPTiBQTFVHSU4gREVGSU5JVElPTgotICAqID09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gICQuZm4uYnV0dG9uID0gZnVuY3Rpb24gKG9wdGlvbikgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgewotICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQotICAgICAgICAsIGRhdGEgPSAkdGhpcy5kYXRhKCdidXR0b24nKQotICAgICAgICAsIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbgotICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdidXR0b24nLCAoZGF0YSA9IG5ldyBCdXR0b24odGhpcywgb3B0aW9ucykpKQotICAgICAgaWYgKG9wdGlvbiA9PSAndG9nZ2xlJykgZGF0YS50b2dnbGUoKQotICAgICAgZWxzZSBpZiAob3B0aW9uKSBkYXRhLnNldFN0YXRlKG9wdGlvbikKLSAgICB9KQotICB9Ci0KLSAgJC5mbi5idXR0b24uZGVmYXVsdHMgPSB7Ci0gICAgbG9hZGluZ1RleHQ6ICdsb2FkaW5nLi4uJwotICB9Ci0KLSAgJC5mbi5idXR0b24uQ29uc3RydWN0b3IgPSBCdXR0b24KLQotCi0gLyogQlVUVE9OIERBVEEtQVBJCi0gICogPT09PT09PT09PT09PT09ICovCi0KLSAgJChmdW5jdGlvbiAoKSB7Ci0gICAgJCgnYm9keScpLm9uKCdjbGljay5idXR0b24uZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlXj1idXR0b25dJywgZnVuY3Rpb24gKCBlICkgewotICAgICAgdmFyICRidG4gPSAkKGUudGFyZ2V0KQotICAgICAgaWYgKCEkYnRuLmhhc0NsYXNzKCdidG4nKSkgJGJ0biA9ICRidG4uY2xvc2VzdCgnLmJ0bicpCi0gICAgICAkYnRuLmJ1dHRvbigndG9nZ2xlJykKLSAgICB9KQotICB9KQotCi19KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGJvb3RzdHJhcC1jYXJvdXNlbC5qcyB2Mi4wLjQKLSAqIGh0dHA6Ly90d2l0dGVyLmdpdGh1Yi5jb20vYm9vdHN0cmFwL2phdmFzY3JpcHQuaHRtbCNjYXJvdXNlbAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLQotIWZ1bmN0aW9uICgkKSB7Ci0KLSAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187Ci0KLQotIC8qIENBUk9VU0VMIENMQVNTIERFRklOSVRJT04KLSAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLSAgdmFyIENhcm91c2VsID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKLSAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KQotICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMKLSAgICB0aGlzLm9wdGlvbnMuc2xpZGUgJiYgdGhpcy5zbGlkZSh0aGlzLm9wdGlvbnMuc2xpZGUpCi0gICAgdGhpcy5vcHRpb25zLnBhdXNlID09ICdob3ZlcicgJiYgdGhpcy4kZWxlbWVudAotICAgICAgLm9uKCdtb3VzZWVudGVyJywgJC5wcm94eSh0aGlzLnBhdXNlLCB0aGlzKSkKLSAgICAgIC5vbignbW91c2VsZWF2ZScsICQucHJveHkodGhpcy5jeWNsZSwgdGhpcykpCi0gIH0KLQotICBDYXJvdXNlbC5wcm90b3R5cGUgPSB7Ci0KLSAgICBjeWNsZTogZnVuY3Rpb24gKGUpIHsKLSAgICAgIGlmICghZSkgdGhpcy5wYXVzZWQgPSBmYWxzZQotICAgICAgdGhpcy5vcHRpb25zLmludGVydmFsCi0gICAgICAgICYmICF0aGlzLnBhdXNlZAotICAgICAgICAmJiAodGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCQucHJveHkodGhpcy5uZXh0LCB0aGlzKSwgdGhpcy5vcHRpb25zLmludGVydmFsKSkKLSAgICAgIHJldHVybiB0aGlzCi0gICAgfQotCi0gICwgdG86IGZ1bmN0aW9uIChwb3MpIHsKLSAgICAgIHZhciAkYWN0aXZlID0gdGhpcy4kZWxlbWVudC5maW5kKCcuYWN0aXZlJykKLSAgICAgICAgLCBjaGlsZHJlbiA9ICRhY3RpdmUucGFyZW50KCkuY2hpbGRyZW4oKQotICAgICAgICAsIGFjdGl2ZVBvcyA9IGNoaWxkcmVuLmluZGV4KCRhY3RpdmUpCi0gICAgICAgICwgdGhhdCA9IHRoaXMKLQotICAgICAgaWYgKHBvcyA+IChjaGlsZHJlbi5sZW5ndGggLSAxKSB8fCBwb3MgPCAwKSByZXR1cm4KLQotICAgICAgaWYgKHRoaXMuc2xpZGluZykgewotICAgICAgICByZXR1cm4gdGhpcy4kZWxlbWVudC5vbmUoJ3NsaWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgdGhhdC50byhwb3MpCi0gICAgICAgIH0pCi0gICAgICB9Ci0KLSAgICAgIGlmIChhY3RpdmVQb3MgPT0gcG9zKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnBhdXNlKCkuY3ljbGUoKQotICAgICAgfQotCi0gICAgICByZXR1cm4gdGhpcy5zbGlkZShwb3MgPiBhY3RpdmVQb3MgPyAnbmV4dCcgOiAncHJldicsICQoY2hpbGRyZW5bcG9zXSkpCi0gICAgfQotCi0gICwgcGF1c2U6IGZ1bmN0aW9uIChlKSB7Ci0gICAgICBpZiAoIWUpIHRoaXMucGF1c2VkID0gdHJ1ZQotICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKQotICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGwKLSAgICAgIHJldHVybiB0aGlzCi0gICAgfQotCi0gICwgbmV4dDogZnVuY3Rpb24gKCkgewotICAgICAgaWYgKHRoaXMuc2xpZGluZykgcmV0dXJuCi0gICAgICByZXR1cm4gdGhpcy5zbGlkZSgnbmV4dCcpCi0gICAgfQotCi0gICwgcHJldjogZnVuY3Rpb24gKCkgewotICAgICAgaWYgKHRoaXMuc2xpZGluZykgcmV0dXJuCi0gICAgICByZXR1cm4gdGhpcy5zbGlkZSgncHJldicpCi0gICAgfQotCi0gICwgc2xpZGU6IGZ1bmN0aW9uICh0eXBlLCBuZXh0KSB7Ci0gICAgICB2YXIgJGFjdGl2ZSA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmFjdGl2ZScpCi0gICAgICAgICwgJG5leHQgPSBuZXh0IHx8ICRhY3RpdmVbdHlwZV0oKQotICAgICAgICAsIGlzQ3ljbGluZyA9IHRoaXMuaW50ZXJ2YWwKLSAgICAgICAgLCBkaXJlY3Rpb24gPSB0eXBlID09ICduZXh0JyA/ICdsZWZ0JyA6ICdyaWdodCcKLSAgICAgICAgLCBmYWxsYmFjayAgPSB0eXBlID09ICduZXh0JyA/ICdmaXJzdCcgOiAnbGFzdCcKLSAgICAgICAgLCB0aGF0ID0gdGhpcwotICAgICAgICAsIGUgPSAkLkV2ZW50KCdzbGlkZScpCi0KLSAgICAgIHRoaXMuc2xpZGluZyA9IHRydWUKLQotICAgICAgaXNDeWNsaW5nICYmIHRoaXMucGF1c2UoKQotCi0gICAgICAkbmV4dCA9ICRuZXh0Lmxlbmd0aCA/ICRuZXh0IDogdGhpcy4kZWxlbWVudC5maW5kKCcuaXRlbScpW2ZhbGxiYWNrXSgpCi0KLSAgICAgIGlmICgkbmV4dC5oYXNDbGFzcygnYWN0aXZlJykpIHJldHVybgotCi0gICAgICBpZiAoJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnc2xpZGUnKSkgewotICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSkKLSAgICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybgotICAgICAgICAkbmV4dC5hZGRDbGFzcyh0eXBlKQotICAgICAgICAkbmV4dFswXS5vZmZzZXRXaWR0aCAvLyBmb3JjZSByZWZsb3cKLSAgICAgICAgJGFjdGl2ZS5hZGRDbGFzcyhkaXJlY3Rpb24pCi0gICAgICAgICRuZXh0LmFkZENsYXNzKGRpcmVjdGlvbikKLSAgICAgICAgdGhpcy4kZWxlbWVudC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgJG5leHQucmVtb3ZlQ2xhc3MoW3R5cGUsIGRpcmVjdGlvbl0uam9pbignICcpKS5hZGRDbGFzcygnYWN0aXZlJykKLSAgICAgICAgICAkYWN0aXZlLnJlbW92ZUNsYXNzKFsnYWN0aXZlJywgZGlyZWN0aW9uXS5qb2luKCcgJykpCi0gICAgICAgICAgdGhhdC5zbGlkaW5nID0gZmFsc2UKLSAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhhdC4kZWxlbWVudC50cmlnZ2VyKCdzbGlkJykgfSwgMCkKLSAgICAgICAgfSkKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKQotICAgICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuCi0gICAgICAgICRhY3RpdmUucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpCi0gICAgICAgICRuZXh0LmFkZENsYXNzKCdhY3RpdmUnKQotICAgICAgICB0aGlzLnNsaWRpbmcgPSBmYWxzZQotICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3NsaWQnKQotICAgICAgfQotCi0gICAgICBpc0N5Y2xpbmcgJiYgdGhpcy5jeWNsZSgpCi0KLSAgICAgIHJldHVybiB0aGlzCi0gICAgfQotCi0gIH0KLQotCi0gLyogQ0FST1VTRUwgUExVR0lOIERFRklOSVRJT04KLSAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gICQuZm4uY2Fyb3VzZWwgPSBmdW5jdGlvbiAob3B0aW9uKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCi0gICAgICAgICwgZGF0YSA9ICR0aGlzLmRhdGEoJ2Nhcm91c2VsJykKLSAgICAgICAgLCBvcHRpb25zID0gJC5leHRlbmQoe30sICQuZm4uY2Fyb3VzZWwuZGVmYXVsdHMsIHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uKQotICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdjYXJvdXNlbCcsIChkYXRhID0gbmV3IENhcm91c2VsKHRoaXMsIG9wdGlvbnMpKSkKLSAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdudW1iZXInKSBkYXRhLnRvKG9wdGlvbikKLSAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycgfHwgKG9wdGlvbiA9IG9wdGlvbnMuc2xpZGUpKSBkYXRhW29wdGlvbl0oKQotICAgICAgZWxzZSBpZiAob3B0aW9ucy5pbnRlcnZhbCkgZGF0YS5jeWNsZSgpCi0gICAgfSkKLSAgfQotCi0gICQuZm4uY2Fyb3VzZWwuZGVmYXVsdHMgPSB7Ci0gICAgaW50ZXJ2YWw6IDUwMDAKLSAgLCBwYXVzZTogJ2hvdmVyJwotICB9Ci0KLSAgJC5mbi5jYXJvdXNlbC5Db25zdHJ1Y3RvciA9IENhcm91c2VsCi0KLQotIC8qIENBUk9VU0VMIERBVEEtQVBJCi0gICogPT09PT09PT09PT09PT09PT0gKi8KLQotICAkKGZ1bmN0aW9uICgpIHsKLSAgICAkKCdib2R5Jykub24oJ2NsaWNrLmNhcm91c2VsLmRhdGEtYXBpJywgJ1tkYXRhLXNsaWRlXScsIGZ1bmN0aW9uICggZSApIHsKLSAgICAgIHZhciAkdGhpcyA9ICQodGhpcyksIGhyZWYKLSAgICAgICAgLCAkdGFyZ2V0ID0gJCgkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpIHx8IChocmVmID0gJHRoaXMuYXR0cignaHJlZicpKSAmJiBocmVmLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywgJycpKSAvL3N0cmlwIGZvciBpZTcKLSAgICAgICAgLCBvcHRpb25zID0gISR0YXJnZXQuZGF0YSgnbW9kYWwnKSAmJiAkLmV4dGVuZCh7fSwgJHRhcmdldC5kYXRhKCksICR0aGlzLmRhdGEoKSkKLSAgICAgICR0YXJnZXQuY2Fyb3VzZWwob3B0aW9ucykKLSAgICAgIGUucHJldmVudERlZmF1bHQoKQotICAgIH0pCi0gIH0pCi0KLX0od2luZG93LmpRdWVyeSk7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogYm9vdHN0cmFwLWNvbGxhcHNlLmpzIHYyLjAuNAotICogaHR0cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlwdC5odG1sI2NvbGxhcHNlCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0KLSFmdW5jdGlvbiAoJCkgewotCi0gICJ1c2Ugc3RyaWN0IjsgLy8ganNoaW50IDtfOwotCi0KLSAvKiBDT0xMQVBTRSBQVUJMSUMgQ0xBU1MgREVGSU5JVElPTgotICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLSAgdmFyIENvbGxhcHNlID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKLSAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KQotICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkLmZuLmNvbGxhcHNlLmRlZmF1bHRzLCBvcHRpb25zKQotCi0gICAgaWYgKHRoaXMub3B0aW9ucy5wYXJlbnQpIHsKLSAgICAgIHRoaXMuJHBhcmVudCA9ICQodGhpcy5vcHRpb25zLnBhcmVudCkKLSAgICB9Ci0KLSAgICB0aGlzLm9wdGlvbnMudG9nZ2xlICYmIHRoaXMudG9nZ2xlKCkKLSAgfQotCi0gIENvbGxhcHNlLnByb3RvdHlwZSA9IHsKLQotICAgIGNvbnN0cnVjdG9yOiBDb2xsYXBzZQotCi0gICwgZGltZW5zaW9uOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgaGFzV2lkdGggPSB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCd3aWR0aCcpCi0gICAgICByZXR1cm4gaGFzV2lkdGggPyAnd2lkdGgnIDogJ2hlaWdodCcKLSAgICB9Ci0KLSAgLCBzaG93OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgZGltZW5zaW9uCi0gICAgICAgICwgc2Nyb2xsCi0gICAgICAgICwgYWN0aXZlcwotICAgICAgICAsIGhhc0RhdGEKLQotICAgICAgaWYgKHRoaXMudHJhbnNpdGlvbmluZykgcmV0dXJuCi0KLSAgICAgIGRpbWVuc2lvbiA9IHRoaXMuZGltZW5zaW9uKCkKLSAgICAgIHNjcm9sbCA9ICQuY2FtZWxDYXNlKFsnc2Nyb2xsJywgZGltZW5zaW9uXS5qb2luKCctJykpCi0gICAgICBhY3RpdmVzID0gdGhpcy4kcGFyZW50ICYmIHRoaXMuJHBhcmVudC5maW5kKCc+IC5hY2NvcmRpb24tZ3JvdXAgPiAuaW4nKQotCi0gICAgICBpZiAoYWN0aXZlcyAmJiBhY3RpdmVzLmxlbmd0aCkgewotICAgICAgICBoYXNEYXRhID0gYWN0aXZlcy5kYXRhKCdjb2xsYXBzZScpCi0gICAgICAgIGlmIChoYXNEYXRhICYmIGhhc0RhdGEudHJhbnNpdGlvbmluZykgcmV0dXJuCi0gICAgICAgIGFjdGl2ZXMuY29sbGFwc2UoJ2hpZGUnKQotICAgICAgICBoYXNEYXRhIHx8IGFjdGl2ZXMuZGF0YSgnY29sbGFwc2UnLCBudWxsKQotICAgICAgfQotCi0gICAgICB0aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0oMCkKLSAgICAgIHRoaXMudHJhbnNpdGlvbignYWRkQ2xhc3MnLCAkLkV2ZW50KCdzaG93JyksICdzaG93bicpCi0gICAgICB0aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0odGhpcy4kZWxlbWVudFswXVtzY3JvbGxdKQotICAgIH0KLQotICAsIGhpZGU6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBkaW1lbnNpb24KLSAgICAgIGlmICh0aGlzLnRyYW5zaXRpb25pbmcpIHJldHVybgotICAgICAgZGltZW5zaW9uID0gdGhpcy5kaW1lbnNpb24oKQotICAgICAgdGhpcy5yZXNldCh0aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0oKSkKLSAgICAgIHRoaXMudHJhbnNpdGlvbigncmVtb3ZlQ2xhc3MnLCAkLkV2ZW50KCdoaWRlJyksICdoaWRkZW4nKQotICAgICAgdGhpcy4kZWxlbWVudFtkaW1lbnNpb25dKDApCi0gICAgfQotCi0gICwgcmVzZXQ6IGZ1bmN0aW9uIChzaXplKSB7Ci0gICAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5kaW1lbnNpb24oKQotCi0gICAgICB0aGlzLiRlbGVtZW50Ci0gICAgICAgIC5yZW1vdmVDbGFzcygnY29sbGFwc2UnKQotICAgICAgICBbZGltZW5zaW9uXShzaXplIHx8ICdhdXRvJykKLSAgICAgICAgWzBdLm9mZnNldFdpZHRoCi0KLSAgICAgIHRoaXMuJGVsZW1lbnRbc2l6ZSAhPT0gbnVsbCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXSgnY29sbGFwc2UnKQotCi0gICAgICByZXR1cm4gdGhpcwotICAgIH0KLQotICAsIHRyYW5zaXRpb246IGZ1bmN0aW9uIChtZXRob2QsIHN0YXJ0RXZlbnQsIGNvbXBsZXRlRXZlbnQpIHsKLSAgICAgIHZhciB0aGF0ID0gdGhpcwotICAgICAgICAsIGNvbXBsZXRlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgaWYgKHN0YXJ0RXZlbnQudHlwZSA9PSAnc2hvdycpIHRoYXQucmVzZXQoKQotICAgICAgICAgICAgdGhhdC50cmFuc2l0aW9uaW5nID0gMAotICAgICAgICAgICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKGNvbXBsZXRlRXZlbnQpCi0gICAgICAgICAgfQotCi0gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoc3RhcnRFdmVudCkKLQotICAgICAgaWYgKHN0YXJ0RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybgotCi0gICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSAxCi0KLSAgICAgIHRoaXMuJGVsZW1lbnRbbWV0aG9kXSgnaW4nKQotCi0gICAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdjb2xsYXBzZScpID8KLSAgICAgICAgdGhpcy4kZWxlbWVudC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCBjb21wbGV0ZSkgOgotICAgICAgICBjb21wbGV0ZSgpCi0gICAgfQotCi0gICwgdG9nZ2xlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2luJykgPyAnaGlkZScgOiAnc2hvdyddKCkKLSAgICB9Ci0KLSAgfQotCi0KLSAvKiBDT0xMQVBTSUJMRSBQTFVHSU4gREVGSU5JVElPTgotICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gICQuZm4uY29sbGFwc2UgPSBmdW5jdGlvbiAob3B0aW9uKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCi0gICAgICAgICwgZGF0YSA9ICR0aGlzLmRhdGEoJ2NvbGxhcHNlJykKLSAgICAgICAgLCBvcHRpb25zID0gdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb24KLSAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnY29sbGFwc2UnLCAoZGF0YSA9IG5ldyBDb2xsYXBzZSh0aGlzLCBvcHRpb25zKSkpCi0gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKCkKLSAgICB9KQotICB9Ci0KLSAgJC5mbi5jb2xsYXBzZS5kZWZhdWx0cyA9IHsKLSAgICB0b2dnbGU6IHRydWUKLSAgfQotCi0gICQuZm4uY29sbGFwc2UuQ29uc3RydWN0b3IgPSBDb2xsYXBzZQotCi0KLSAvKiBDT0xMQVBTSUJMRSBEQVRBLUFQSQotICAqID09PT09PT09PT09PT09PT09PT09ICovCi0KLSAgJChmdW5jdGlvbiAoKSB7Ci0gICAgJCgnYm9keScpLm9uKCdjbGljay5jb2xsYXBzZS5kYXRhLWFwaScsICdbZGF0YS10b2dnbGU9Y29sbGFwc2VdJywgZnVuY3Rpb24gKCBlICkgewotICAgICAgdmFyICR0aGlzID0gJCh0aGlzKSwgaHJlZgotICAgICAgICAsIHRhcmdldCA9ICR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JykKLSAgICAgICAgICB8fCBlLnByZXZlbnREZWZhdWx0KCkKLSAgICAgICAgICB8fCAoaHJlZiA9ICR0aGlzLmF0dHIoJ2hyZWYnKSkgJiYgaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sICcnKSAvL3N0cmlwIGZvciBpZTcKLSAgICAgICAgLCBvcHRpb24gPSAkKHRhcmdldCkuZGF0YSgnY29sbGFwc2UnKSA/ICd0b2dnbGUnIDogJHRoaXMuZGF0YSgpCi0gICAgICAkKHRhcmdldCkuY29sbGFwc2Uob3B0aW9uKQotICAgIH0pCi0gIH0pCi0KLX0od2luZG93LmpRdWVyeSk7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBib290c3RyYXAtZHJvcGRvd24uanMgdjIuMC40Ci0gKiBodHRwOi8vdHdpdHRlci5naXRodWIuY29tL2Jvb3RzdHJhcC9qYXZhc2NyaXB0Lmh0bWwjZHJvcGRvd25zCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLQotIWZ1bmN0aW9uICgkKSB7Ci0KLSAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187Ci0KLQotIC8qIERST1BET1dOIENMQVNTIERFRklOSVRJT04KLSAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLSAgdmFyIHRvZ2dsZSA9ICdbZGF0YS10b2dnbGU9ImRyb3Bkb3duIl0nCi0gICAgLCBEcm9wZG93biA9IGZ1bmN0aW9uIChlbGVtZW50KSB7Ci0gICAgICAgIHZhciAkZWwgPSAkKGVsZW1lbnQpLm9uKCdjbGljay5kcm9wZG93bi5kYXRhLWFwaScsIHRoaXMudG9nZ2xlKQotICAgICAgICAkKCdodG1sJykub24oJ2NsaWNrLmRyb3Bkb3duLmRhdGEtYXBpJywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICRlbC5wYXJlbnQoKS5yZW1vdmVDbGFzcygnb3BlbicpCi0gICAgICAgIH0pCi0gICAgICB9Ci0KLSAgRHJvcGRvd24ucHJvdG90eXBlID0gewotCi0gICAgY29uc3RydWN0b3I6IERyb3Bkb3duCi0KLSAgLCB0b2dnbGU6IGZ1bmN0aW9uIChlKSB7Ci0gICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCi0gICAgICAgICwgJHBhcmVudAotICAgICAgICAsIHNlbGVjdG9yCi0gICAgICAgICwgaXNBY3RpdmUKLQotICAgICAgaWYgKCR0aGlzLmlzKCcuZGlzYWJsZWQsIDpkaXNhYmxlZCcpKSByZXR1cm4KLQotICAgICAgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpCi0KLSAgICAgIGlmICghc2VsZWN0b3IpIHsKLSAgICAgICAgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdocmVmJykKLSAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvciAmJiBzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sICcnKSAvL3N0cmlwIGZvciBpZTcKLSAgICAgIH0KLQotICAgICAgJHBhcmVudCA9ICQoc2VsZWN0b3IpCi0gICAgICAkcGFyZW50Lmxlbmd0aCB8fCAoJHBhcmVudCA9ICR0aGlzLnBhcmVudCgpKQotCi0gICAgICBpc0FjdGl2ZSA9ICRwYXJlbnQuaGFzQ2xhc3MoJ29wZW4nKQotCi0gICAgICBjbGVhck1lbnVzKCkKLQotICAgICAgaWYgKCFpc0FjdGl2ZSkgJHBhcmVudC50b2dnbGVDbGFzcygnb3BlbicpCi0KLSAgICAgIHJldHVybiBmYWxzZQotICAgIH0KLQotICB9Ci0KLSAgZnVuY3Rpb24gY2xlYXJNZW51cygpIHsKLSAgICAkKHRvZ2dsZSkucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ29wZW4nKQotICB9Ci0KLQotICAvKiBEUk9QRE9XTiBQTFVHSU4gREVGSU5JVElPTgotICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gICQuZm4uZHJvcGRvd24gPSBmdW5jdGlvbiAob3B0aW9uKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCi0gICAgICAgICwgZGF0YSA9ICR0aGlzLmRhdGEoJ2Ryb3Bkb3duJykKLSAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnZHJvcGRvd24nLCAoZGF0YSA9IG5ldyBEcm9wZG93bih0aGlzKSkpCi0gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dLmNhbGwoJHRoaXMpCi0gICAgfSkKLSAgfQotCi0gICQuZm4uZHJvcGRvd24uQ29uc3RydWN0b3IgPSBEcm9wZG93bgotCi0KLSAgLyogQVBQTFkgVE8gU1RBTkRBUkQgRFJPUERPV04gRUxFTUVOVFMKLSAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotICAkKGZ1bmN0aW9uICgpIHsKLSAgICAkKCdodG1sJykub24oJ2NsaWNrLmRyb3Bkb3duLmRhdGEtYXBpJywgY2xlYXJNZW51cykKLSAgICAkKCdib2R5JykKLSAgICAgIC5vbignY2xpY2suZHJvcGRvd24nLCAnLmRyb3Bkb3duIGZvcm0nLCBmdW5jdGlvbiAoZSkgeyBlLnN0b3BQcm9wYWdhdGlvbigpIH0pCi0gICAgICAub24oJ2NsaWNrLmRyb3Bkb3duLmRhdGEtYXBpJywgdG9nZ2xlLCBEcm9wZG93bi5wcm90b3R5cGUudG9nZ2xlKQotICB9KQotCi19KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogYm9vdHN0cmFwLW1vZGFsLmpzIHYyLjAuNAotICogaHR0cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlwdC5odG1sI21vZGFscwotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0KLSFmdW5jdGlvbiAoJCkgewotCi0gICJ1c2Ugc3RyaWN0IjsgLy8ganNoaW50IDtfOwotCi0KLSAvKiBNT0RBTCBDTEFTUyBERUZJTklUSU9OCi0gICogPT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gIHZhciBNb2RhbCA9IGZ1bmN0aW9uIChjb250ZW50LCBvcHRpb25zKSB7Ci0gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucwotICAgIHRoaXMuJGVsZW1lbnQgPSAkKGNvbnRlbnQpCi0gICAgICAuZGVsZWdhdGUoJ1tkYXRhLWRpc21pc3M9Im1vZGFsIl0nLCAnY2xpY2suZGlzbWlzcy5tb2RhbCcsICQucHJveHkodGhpcy5oaWRlLCB0aGlzKSkKLSAgfQotCi0gIE1vZGFsLnByb3RvdHlwZSA9IHsKLQotICAgICAgY29uc3RydWN0b3I6IE1vZGFsCi0KLSAgICAsIHRvZ2dsZTogZnVuY3Rpb24gKCkgewotICAgICAgICByZXR1cm4gdGhpc1shdGhpcy5pc1Nob3duID8gJ3Nob3cnIDogJ2hpZGUnXSgpCi0gICAgICB9Ci0KLSAgICAsIHNob3c6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIHRoYXQgPSB0aGlzCi0gICAgICAgICAgLCBlID0gJC5FdmVudCgnc2hvdycpCi0KLSAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpCi0KLSAgICAgICAgaWYgKHRoaXMuaXNTaG93biB8fCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm4KLQotICAgICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ21vZGFsLW9wZW4nKQotCi0gICAgICAgIHRoaXMuaXNTaG93biA9IHRydWUKLQotICAgICAgICBlc2NhcGUuY2FsbCh0aGlzKQotICAgICAgICBiYWNrZHJvcC5jYWxsKHRoaXMsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICB2YXIgdHJhbnNpdGlvbiA9ICQuc3VwcG9ydC50cmFuc2l0aW9uICYmIHRoYXQuJGVsZW1lbnQuaGFzQ2xhc3MoJ2ZhZGUnKQotCi0gICAgICAgICAgaWYgKCF0aGF0LiRlbGVtZW50LnBhcmVudCgpLmxlbmd0aCkgewotICAgICAgICAgICAgdGhhdC4kZWxlbWVudC5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KSAvL2Rvbid0IG1vdmUgbW9kYWxzIGRvbSBwb3NpdGlvbgotICAgICAgICAgIH0KLQotICAgICAgICAgIHRoYXQuJGVsZW1lbnQKLSAgICAgICAgICAgIC5zaG93KCkKLQotICAgICAgICAgIGlmICh0cmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICB0aGF0LiRlbGVtZW50WzBdLm9mZnNldFdpZHRoIC8vIGZvcmNlIHJlZmxvdwotICAgICAgICAgIH0KLQotICAgICAgICAgIHRoYXQuJGVsZW1lbnQuYWRkQ2xhc3MoJ2luJykKLQotICAgICAgICAgIHRyYW5zaXRpb24gPwotICAgICAgICAgICAgdGhhdC4kZWxlbWVudC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCBmdW5jdGlvbiAoKSB7IHRoYXQuJGVsZW1lbnQudHJpZ2dlcignc2hvd24nKSB9KSA6Ci0gICAgICAgICAgICB0aGF0LiRlbGVtZW50LnRyaWdnZXIoJ3Nob3duJykKLQotICAgICAgICB9KQotICAgICAgfQotCi0gICAgLCBoaWRlOiBmdW5jdGlvbiAoZSkgewotICAgICAgICBlICYmIGUucHJldmVudERlZmF1bHQoKQotCi0gICAgICAgIHZhciB0aGF0ID0gdGhpcwotCi0gICAgICAgIGUgPSAkLkV2ZW50KCdoaWRlJykKLQotICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSkKLQotICAgICAgICBpZiAoIXRoaXMuaXNTaG93biB8fCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm4KLQotICAgICAgICB0aGlzLmlzU2hvd24gPSBmYWxzZQotCi0gICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygnbW9kYWwtb3BlbicpCi0KLSAgICAgICAgZXNjYXBlLmNhbGwodGhpcykKLQotICAgICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCdpbicpCi0KLSAgICAgICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpID8KLSAgICAgICAgICBoaWRlV2l0aFRyYW5zaXRpb24uY2FsbCh0aGlzKSA6Ci0gICAgICAgICAgaGlkZU1vZGFsLmNhbGwodGhpcykKLSAgICAgIH0KLQotICB9Ci0KLQotIC8qIE1PREFMIFBSSVZBVEUgTUVUSE9EUwotICAqID09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gIGZ1bmN0aW9uIGhpZGVXaXRoVHJhbnNpdGlvbigpIHsKLSAgICB2YXIgdGhhdCA9IHRoaXMKLSAgICAgICwgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewotICAgICAgICAgIHRoYXQuJGVsZW1lbnQub2ZmKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCkKLSAgICAgICAgICBoaWRlTW9kYWwuY2FsbCh0aGF0KQotICAgICAgICB9LCA1MDApCi0KLSAgICB0aGlzLiRlbGVtZW50Lm9uZSgkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KQotICAgICAgaGlkZU1vZGFsLmNhbGwodGhhdCkKLSAgICB9KQotICB9Ci0KLSAgZnVuY3Rpb24gaGlkZU1vZGFsKHRoYXQpIHsKLSAgICB0aGlzLiRlbGVtZW50Ci0gICAgICAuaGlkZSgpCi0gICAgICAudHJpZ2dlcignaGlkZGVuJykKLQotICAgIGJhY2tkcm9wLmNhbGwodGhpcykKLSAgfQotCi0gIGZ1bmN0aW9uIGJhY2tkcm9wKGNhbGxiYWNrKSB7Ci0gICAgdmFyIHRoYXQgPSB0aGlzCi0gICAgICAsIGFuaW1hdGUgPSB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykgPyAnZmFkZScgOiAnJwotCi0gICAgaWYgKHRoaXMuaXNTaG93biAmJiB0aGlzLm9wdGlvbnMuYmFja2Ryb3ApIHsKLSAgICAgIHZhciBkb0FuaW1hdGUgPSAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiBhbmltYXRlCi0KLSAgICAgIHRoaXMuJGJhY2tkcm9wID0gJCgnPGRpdiBjbGFzcz0ibW9kYWwtYmFja2Ryb3AgJyArIGFuaW1hdGUgKyAnIiAvPicpCi0gICAgICAgIC5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KQotCi0gICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2tkcm9wICE9ICdzdGF0aWMnKSB7Ci0gICAgICAgIHRoaXMuJGJhY2tkcm9wLmNsaWNrKCQucHJveHkodGhpcy5oaWRlLCB0aGlzKSkKLSAgICAgIH0KLQotICAgICAgaWYgKGRvQW5pbWF0ZSkgdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGggLy8gZm9yY2UgcmVmbG93Ci0KLSAgICAgIHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCdpbicpCi0KLSAgICAgIGRvQW5pbWF0ZSA/Ci0gICAgICAgIHRoaXMuJGJhY2tkcm9wLm9uZSgkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsIGNhbGxiYWNrKSA6Ci0gICAgICAgIGNhbGxiYWNrKCkKLQotICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNTaG93biAmJiB0aGlzLiRiYWNrZHJvcCkgewotICAgICAgdGhpcy4kYmFja2Ryb3AucmVtb3ZlQ2xhc3MoJ2luJykKLQotICAgICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpPwotICAgICAgICB0aGlzLiRiYWNrZHJvcC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCAkLnByb3h5KHJlbW92ZUJhY2tkcm9wLCB0aGlzKSkgOgotICAgICAgICByZW1vdmVCYWNrZHJvcC5jYWxsKHRoaXMpCi0KLSAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICBjYWxsYmFjaygpCi0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcmVtb3ZlQmFja2Ryb3AoKSB7Ci0gICAgdGhpcy4kYmFja2Ryb3AucmVtb3ZlKCkKLSAgICB0aGlzLiRiYWNrZHJvcCA9IG51bGwKLSAgfQotCi0gIGZ1bmN0aW9uIGVzY2FwZSgpIHsKLSAgICB2YXIgdGhhdCA9IHRoaXMKLSAgICBpZiAodGhpcy5pc1Nob3duICYmIHRoaXMub3B0aW9ucy5rZXlib2FyZCkgewotICAgICAgJChkb2N1bWVudCkub24oJ2tleXVwLmRpc21pc3MubW9kYWwnLCBmdW5jdGlvbiAoIGUgKSB7Ci0gICAgICAgIGUud2hpY2ggPT0gMjcgJiYgdGhhdC5oaWRlKCkKLSAgICAgIH0pCi0gICAgfSBlbHNlIGlmICghdGhpcy5pc1Nob3duKSB7Ci0gICAgICAkKGRvY3VtZW50KS5vZmYoJ2tleXVwLmRpc21pc3MubW9kYWwnKQotICAgIH0KLSAgfQotCi0KLSAvKiBNT0RBTCBQTFVHSU4gREVGSU5JVElPTgotICAqID09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLSAgJC5mbi5tb2RhbCA9IGZ1bmN0aW9uIChvcHRpb24pIHsKLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciAkdGhpcyA9ICQodGhpcykKLSAgICAgICAgLCBkYXRhID0gJHRoaXMuZGF0YSgnbW9kYWwnKQotICAgICAgICAsIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgJC5mbi5tb2RhbC5kZWZhdWx0cywgJHRoaXMuZGF0YSgpLCB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbikKLSAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnbW9kYWwnLCAoZGF0YSA9IG5ldyBNb2RhbCh0aGlzLCBvcHRpb25zKSkpCi0gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKCkKLSAgICAgIGVsc2UgaWYgKG9wdGlvbnMuc2hvdykgZGF0YS5zaG93KCkKLSAgICB9KQotICB9Ci0KLSAgJC5mbi5tb2RhbC5kZWZhdWx0cyA9IHsKLSAgICAgIGJhY2tkcm9wOiB0cnVlCi0gICAgLCBrZXlib2FyZDogdHJ1ZQotICAgICwgc2hvdzogdHJ1ZQotICB9Ci0KLSAgJC5mbi5tb2RhbC5Db25zdHJ1Y3RvciA9IE1vZGFsCi0KLQotIC8qIE1PREFMIERBVEEtQVBJCi0gICogPT09PT09PT09PT09PT0gKi8KLQotICAkKGZ1bmN0aW9uICgpIHsKLSAgICAkKCdib2R5Jykub24oJ2NsaWNrLm1vZGFsLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZT0ibW9kYWwiXScsIGZ1bmN0aW9uICggZSApIHsKLSAgICAgIHZhciAkdGhpcyA9ICQodGhpcyksIGhyZWYKLSAgICAgICAgLCAkdGFyZ2V0ID0gJCgkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpIHx8IChocmVmID0gJHRoaXMuYXR0cignaHJlZicpKSAmJiBocmVmLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywgJycpKSAvL3N0cmlwIGZvciBpZTcKLSAgICAgICAgLCBvcHRpb24gPSAkdGFyZ2V0LmRhdGEoJ21vZGFsJykgPyAndG9nZ2xlJyA6ICQuZXh0ZW5kKHt9LCAkdGFyZ2V0LmRhdGEoKSwgJHRoaXMuZGF0YSgpKQotCi0gICAgICBlLnByZXZlbnREZWZhdWx0KCkKLSAgICAgICR0YXJnZXQubW9kYWwob3B0aW9uKQotICAgIH0pCi0gIH0pCi0KLX0od2luZG93LmpRdWVyeSk7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIGJvb3RzdHJhcC10b29sdGlwLmpzIHYyLjAuNAotICogaHR0cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlwdC5odG1sI3Rvb2x0aXBzCi0gKiBJbnNwaXJlZCBieSB0aGUgb3JpZ2luYWwgalF1ZXJ5LnRpcHN5IGJ5IEphc29uIEZyYW1lCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLQotIWZ1bmN0aW9uICgkKSB7Ci0KLSAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187Ci0KLQotIC8qIFRPT0xUSVAgUFVCTElDIENMQVNTIERFRklOSVRJT04KLSAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLSAgdmFyIFRvb2x0aXAgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykgewotICAgIHRoaXMuaW5pdCgndG9vbHRpcCcsIGVsZW1lbnQsIG9wdGlvbnMpCi0gIH0KLQotICBUb29sdGlwLnByb3RvdHlwZSA9IHsKLQotICAgIGNvbnN0cnVjdG9yOiBUb29sdGlwCi0KLSAgLCBpbml0OiBmdW5jdGlvbiAodHlwZSwgZWxlbWVudCwgb3B0aW9ucykgewotICAgICAgdmFyIGV2ZW50SW4KLSAgICAgICAgLCBldmVudE91dAotCi0gICAgICB0aGlzLnR5cGUgPSB0eXBlCi0gICAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KQotICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKG9wdGlvbnMpCi0gICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlCi0KLSAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJpZ2dlciAhPSAnbWFudWFsJykgewotICAgICAgICBldmVudEluICA9IHRoaXMub3B0aW9ucy50cmlnZ2VyID09ICdob3ZlcicgPyAnbW91c2VlbnRlcicgOiAnZm9jdXMnCi0gICAgICAgIGV2ZW50T3V0ID0gdGhpcy5vcHRpb25zLnRyaWdnZXIgPT0gJ2hvdmVyJyA/ICdtb3VzZWxlYXZlJyA6ICdibHVyJwotICAgICAgICB0aGlzLiRlbGVtZW50Lm9uKGV2ZW50SW4sIHRoaXMub3B0aW9ucy5zZWxlY3RvciwgJC5wcm94eSh0aGlzLmVudGVyLCB0aGlzKSkKLSAgICAgICAgdGhpcy4kZWxlbWVudC5vbihldmVudE91dCwgdGhpcy5vcHRpb25zLnNlbGVjdG9yLCAkLnByb3h5KHRoaXMubGVhdmUsIHRoaXMpKQotICAgICAgfQotCi0gICAgICB0aGlzLm9wdGlvbnMuc2VsZWN0b3IgPwotICAgICAgICAodGhpcy5fb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIHsgdHJpZ2dlcjogJ21hbnVhbCcsIHNlbGVjdG9yOiAnJyB9KSkgOgotICAgICAgICB0aGlzLmZpeFRpdGxlKCkKLSAgICB9Ci0KLSAgLCBnZXRPcHRpb25zOiBmdW5jdGlvbiAob3B0aW9ucykgewotICAgICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkLmZuW3RoaXMudHlwZV0uZGVmYXVsdHMsIG9wdGlvbnMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpKQotCi0gICAgICBpZiAob3B0aW9ucy5kZWxheSAmJiB0eXBlb2Ygb3B0aW9ucy5kZWxheSA9PSAnbnVtYmVyJykgewotICAgICAgICBvcHRpb25zLmRlbGF5ID0gewotICAgICAgICAgIHNob3c6IG9wdGlvbnMuZGVsYXkKLSAgICAgICAgLCBoaWRlOiBvcHRpb25zLmRlbGF5Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIG9wdGlvbnMKLSAgICB9Ci0KLSAgLCBlbnRlcjogZnVuY3Rpb24gKGUpIHsKLSAgICAgIHZhciBzZWxmID0gJChlLmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpCi0KLSAgICAgIGlmICghc2VsZi5vcHRpb25zLmRlbGF5IHx8ICFzZWxmLm9wdGlvbnMuZGVsYXkuc2hvdykgcmV0dXJuIHNlbGYuc2hvdygpCi0KLSAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpCi0gICAgICBzZWxmLmhvdmVyU3RhdGUgPSAnaW4nCi0gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoc2VsZi5ob3ZlclN0YXRlID09ICdpbicpIHNlbGYuc2hvdygpCi0gICAgICB9LCBzZWxmLm9wdGlvbnMuZGVsYXkuc2hvdykKLSAgICB9Ci0KLSAgLCBsZWF2ZTogZnVuY3Rpb24gKGUpIHsKLSAgICAgIHZhciBzZWxmID0gJChlLmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpCi0KLSAgICAgIGlmICh0aGlzLnRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpCi0gICAgICBpZiAoIXNlbGYub3B0aW9ucy5kZWxheSB8fCAhc2VsZi5vcHRpb25zLmRlbGF5LmhpZGUpIHJldHVybiBzZWxmLmhpZGUoKQotCi0gICAgICBzZWxmLmhvdmVyU3RhdGUgPSAnb3V0JwotICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHNlbGYuaG92ZXJTdGF0ZSA9PSAnb3V0Jykgc2VsZi5oaWRlKCkKLSAgICAgIH0sIHNlbGYub3B0aW9ucy5kZWxheS5oaWRlKQotICAgIH0KLQotICAsIHNob3c6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciAkdGlwCi0gICAgICAgICwgaW5zaWRlCi0gICAgICAgICwgcG9zCi0gICAgICAgICwgYWN0dWFsV2lkdGgKLSAgICAgICAgLCBhY3R1YWxIZWlnaHQKLSAgICAgICAgLCBwbGFjZW1lbnQKLSAgICAgICAgLCB0cAotCi0gICAgICBpZiAodGhpcy5oYXNDb250ZW50KCkgJiYgdGhpcy5lbmFibGVkKSB7Ci0gICAgICAgICR0aXAgPSB0aGlzLnRpcCgpCi0gICAgICAgIHRoaXMuc2V0Q29udGVudCgpCi0KLSAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRpb24pIHsKLSAgICAgICAgICAkdGlwLmFkZENsYXNzKCdmYWRlJykKLSAgICAgICAgfQotCi0gICAgICAgIHBsYWNlbWVudCA9IHR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50ID09ICdmdW5jdGlvbicgPwotICAgICAgICAgIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLCAkdGlwWzBdLCB0aGlzLiRlbGVtZW50WzBdKSA6Ci0gICAgICAgICAgdGhpcy5vcHRpb25zLnBsYWNlbWVudAotCi0gICAgICAgIGluc2lkZSA9IC9pbi8udGVzdChwbGFjZW1lbnQpCi0KLSAgICAgICAgJHRpcAotICAgICAgICAgIC5yZW1vdmUoKQotICAgICAgICAgIC5jc3MoeyB0b3A6IDAsIGxlZnQ6IDAsIGRpc3BsYXk6ICdibG9jaycgfSkKLSAgICAgICAgICAuYXBwZW5kVG8oaW5zaWRlID8gdGhpcy4kZWxlbWVudCA6IGRvY3VtZW50LmJvZHkpCi0KLSAgICAgICAgcG9zID0gdGhpcy5nZXRQb3NpdGlvbihpbnNpZGUpCi0KLSAgICAgICAgYWN0dWFsV2lkdGggPSAkdGlwWzBdLm9mZnNldFdpZHRoCi0gICAgICAgIGFjdHVhbEhlaWdodCA9ICR0aXBbMF0ub2Zmc2V0SGVpZ2h0Ci0KLSAgICAgICAgc3dpdGNoIChpbnNpZGUgPyBwbGFjZW1lbnQuc3BsaXQoJyAnKVsxXSA6IHBsYWNlbWVudCkgewotICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6Ci0gICAgICAgICAgICB0cCA9IHt0b3A6IHBvcy50b3AgKyBwb3MuaGVpZ2h0LCBsZWZ0OiBwb3MubGVmdCArIHBvcy53aWR0aCAvIDIgLSBhY3R1YWxXaWR0aCAvIDJ9Ci0gICAgICAgICAgICBicmVhawotICAgICAgICAgIGNhc2UgJ3RvcCc6Ci0gICAgICAgICAgICB0cCA9IHt0b3A6IHBvcy50b3AgLSBhY3R1YWxIZWlnaHQsIGxlZnQ6IHBvcy5sZWZ0ICsgcG9zLndpZHRoIC8gMiAtIGFjdHVhbFdpZHRoIC8gMn0KLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgY2FzZSAnbGVmdCc6Ci0gICAgICAgICAgICB0cCA9IHt0b3A6IHBvcy50b3AgKyBwb3MuaGVpZ2h0IC8gMiAtIGFjdHVhbEhlaWdodCAvIDIsIGxlZnQ6IHBvcy5sZWZ0IC0gYWN0dWFsV2lkdGh9Ci0gICAgICAgICAgICBicmVhawotICAgICAgICAgIGNhc2UgJ3JpZ2h0JzoKLSAgICAgICAgICAgIHRwID0ge3RvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQgLyAyIC0gYWN0dWFsSGVpZ2h0IC8gMiwgbGVmdDogcG9zLmxlZnQgKyBwb3Mud2lkdGh9Ci0gICAgICAgICAgICBicmVhawotICAgICAgICB9Ci0KLSAgICAgICAgJHRpcAotICAgICAgICAgIC5jc3ModHApCi0gICAgICAgICAgLmFkZENsYXNzKHBsYWNlbWVudCkKLSAgICAgICAgICAuYWRkQ2xhc3MoJ2luJykKLSAgICAgIH0KLSAgICB9Ci0KLSAgLCBpc0hUTUw6IGZ1bmN0aW9uKHRleHQpIHsKLSAgICAgIC8vIGh0bWwgc3RyaW5nIGRldGVjdGlvbiBsb2dpYyBhZGFwdGVkIGZyb20galF1ZXJ5Ci0gICAgICByZXR1cm4gdHlwZW9mIHRleHQgIT0gJ3N0cmluZycKLSAgICAgICAgfHwgKCB0ZXh0LmNoYXJBdCgwKSA9PT0gIjwiCi0gICAgICAgICAgJiYgdGV4dC5jaGFyQXQoIHRleHQubGVuZ3RoIC0gMSApID09PSAiPiIKLSAgICAgICAgICAmJiB0ZXh0Lmxlbmd0aCA+PSAzCi0gICAgICAgICkgfHwgL14oPzpbXjxdKjxbXHdcV10rPltePl0qJCkvLmV4ZWModGV4dCkKLSAgICB9Ci0KLSAgLCBzZXRDb250ZW50OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgJHRpcCA9IHRoaXMudGlwKCkKLSAgICAgICAgLCB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoKQotCi0gICAgICAkdGlwLmZpbmQoJy50b29sdGlwLWlubmVyJylbdGhpcy5pc0hUTUwodGl0bGUpID8gJ2h0bWwnIDogJ3RleHQnXSh0aXRsZSkKLSAgICAgICR0aXAucmVtb3ZlQ2xhc3MoJ2ZhZGUgaW4gdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0JykKLSAgICB9Ci0KLSAgLCBoaWRlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgdGhhdCA9IHRoaXMKLSAgICAgICAgLCAkdGlwID0gdGhpcy50aXAoKQotCi0gICAgICAkdGlwLnJlbW92ZUNsYXNzKCdpbicpCi0KLSAgICAgIGZ1bmN0aW9uIHJlbW92ZVdpdGhBbmltYXRpb24oKSB7Ci0gICAgICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgJHRpcC5vZmYoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKS5yZW1vdmUoKQotICAgICAgICB9LCA1MDApCi0KLSAgICAgICAgJHRpcC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpCi0gICAgICAgICAgJHRpcC5yZW1vdmUoKQotICAgICAgICB9KQotICAgICAgfQotCi0gICAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiR0aXAuaGFzQ2xhc3MoJ2ZhZGUnKSA/Ci0gICAgICAgIHJlbW92ZVdpdGhBbmltYXRpb24oKSA6Ci0gICAgICAgICR0aXAucmVtb3ZlKCkKLSAgICB9Ci0KLSAgLCBmaXhUaXRsZTogZnVuY3Rpb24gKCkgewotICAgICAgdmFyICRlID0gdGhpcy4kZWxlbWVudAotICAgICAgaWYgKCRlLmF0dHIoJ3RpdGxlJykgfHwgdHlwZW9mKCRlLmF0dHIoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnKSkgIT0gJ3N0cmluZycpIHsKLSAgICAgICAgJGUuYXR0cignZGF0YS1vcmlnaW5hbC10aXRsZScsICRlLmF0dHIoJ3RpdGxlJykgfHwgJycpLnJlbW92ZUF0dHIoJ3RpdGxlJykKLSAgICAgIH0KLSAgICB9Ci0KLSAgLCBoYXNDb250ZW50OiBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gdGhpcy5nZXRUaXRsZSgpCi0gICAgfQotCi0gICwgZ2V0UG9zaXRpb246IGZ1bmN0aW9uIChpbnNpZGUpIHsKLSAgICAgIHJldHVybiAkLmV4dGVuZCh7fSwgKGluc2lkZSA/IHt0b3A6IDAsIGxlZnQ6IDB9IDogdGhpcy4kZWxlbWVudC5vZmZzZXQoKSksIHsKLSAgICAgICAgd2lkdGg6IHRoaXMuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgKLSAgICAgICwgaGVpZ2h0OiB0aGlzLiRlbGVtZW50WzBdLm9mZnNldEhlaWdodAotICAgICAgfSkKLSAgICB9Ci0KLSAgLCBnZXRUaXRsZTogZnVuY3Rpb24gKCkgewotICAgICAgdmFyIHRpdGxlCi0gICAgICAgICwgJGUgPSB0aGlzLiRlbGVtZW50Ci0gICAgICAgICwgbyA9IHRoaXMub3B0aW9ucwotCi0gICAgICB0aXRsZSA9ICRlLmF0dHIoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnKQotICAgICAgICB8fCAodHlwZW9mIG8udGl0bGUgPT0gJ2Z1bmN0aW9uJyA/IG8udGl0bGUuY2FsbCgkZVswXSkgOiAgby50aXRsZSkKLQotICAgICAgcmV0dXJuIHRpdGxlCi0gICAgfQotCi0gICwgdGlwOiBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gdGhpcy4kdGlwID0gdGhpcy4kdGlwIHx8ICQodGhpcy5vcHRpb25zLnRlbXBsYXRlKQotICAgIH0KLQotICAsIHZhbGlkYXRlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICBpZiAoIXRoaXMuJGVsZW1lbnRbMF0ucGFyZW50Tm9kZSkgewotICAgICAgICB0aGlzLmhpZGUoKQotICAgICAgICB0aGlzLiRlbGVtZW50ID0gbnVsbAotICAgICAgICB0aGlzLm9wdGlvbnMgPSBudWxsCi0gICAgICB9Ci0gICAgfQotCi0gICwgZW5hYmxlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlCi0gICAgfQotCi0gICwgZGlzYWJsZTogZnVuY3Rpb24gKCkgewotICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2UKLSAgICB9Ci0KLSAgLCB0b2dnbGVFbmFibGVkOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlzLmVuYWJsZWQgPSAhdGhpcy5lbmFibGVkCi0gICAgfQotCi0gICwgdG9nZ2xlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlzW3RoaXMudGlwKCkuaGFzQ2xhc3MoJ2luJykgPyAnaGlkZScgOiAnc2hvdyddKCkKLSAgICB9Ci0KLSAgfQotCi0KLSAvKiBUT09MVElQIFBMVUdJTiBERUZJTklUSU9OCi0gICogPT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gICQuZm4udG9vbHRpcCA9IGZ1bmN0aW9uICggb3B0aW9uICkgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgewotICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQotICAgICAgICAsIGRhdGEgPSAkdGhpcy5kYXRhKCd0b29sdGlwJykKLSAgICAgICAgLCBvcHRpb25zID0gdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb24KLSAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgndG9vbHRpcCcsIChkYXRhID0gbmV3IFRvb2x0aXAodGhpcywgb3B0aW9ucykpKQotICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCi0gICAgfSkKLSAgfQotCi0gICQuZm4udG9vbHRpcC5Db25zdHJ1Y3RvciA9IFRvb2x0aXAKLQotICAkLmZuLnRvb2x0aXAuZGVmYXVsdHMgPSB7Ci0gICAgYW5pbWF0aW9uOiB0cnVlCi0gICwgcGxhY2VtZW50OiAndG9wJwotICAsIHNlbGVjdG9yOiBmYWxzZQotICAsIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz0idG9vbHRpcCI+PGRpdiBjbGFzcz0idG9vbHRpcC1hcnJvdyI+PC9kaXY+PGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciI+PC9kaXY+PC9kaXY+JwotICAsIHRyaWdnZXI6ICdob3ZlcicKLSAgLCB0aXRsZTogJycKLSAgLCBkZWxheTogMAotICB9Ci0KLX0od2luZG93LmpRdWVyeSk7Ci0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogYm9vdHN0cmFwLXBvcG92ZXIuanMgdjIuMC40Ci0gKiBodHRwOi8vdHdpdHRlci5naXRodWIuY29tL2Jvb3RzdHJhcC9qYXZhc2NyaXB0Lmh0bWwjcG9wb3ZlcnMKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLQotIWZ1bmN0aW9uICgkKSB7Ci0KLSAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187Ci0KLQotIC8qIFBPUE9WRVIgUFVCTElDIENMQVNTIERFRklOSVRJT04KLSAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLSAgdmFyIFBvcG92ZXIgPSBmdW5jdGlvbiAoIGVsZW1lbnQsIG9wdGlvbnMgKSB7Ci0gICAgdGhpcy5pbml0KCdwb3BvdmVyJywgZWxlbWVudCwgb3B0aW9ucykKLSAgfQotCi0KLSAgLyogTk9URTogUE9QT1ZFUiBFWFRFTkRTIEJPT1RTVFJBUC1UT09MVElQLmpzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gIFBvcG92ZXIucHJvdG90eXBlID0gJC5leHRlbmQoe30sICQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUsIHsKLQotICAgIGNvbnN0cnVjdG9yOiBQb3BvdmVyCi0KLSAgLCBzZXRDb250ZW50OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgJHRpcCA9IHRoaXMudGlwKCkKLSAgICAgICAgLCB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoKQotICAgICAgICAsIGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKQotCi0gICAgICAkdGlwLmZpbmQoJy5wb3BvdmVyLXRpdGxlJylbdGhpcy5pc0hUTUwodGl0bGUpID8gJ2h0bWwnIDogJ3RleHQnXSh0aXRsZSkKLSAgICAgICR0aXAuZmluZCgnLnBvcG92ZXItY29udGVudCA+IConKVt0aGlzLmlzSFRNTChjb250ZW50KSA/ICdodG1sJyA6ICd0ZXh0J10oY29udGVudCkKLQotICAgICAgJHRpcC5yZW1vdmVDbGFzcygnZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW4nKQotICAgIH0KLQotICAsIGhhc0NvbnRlbnQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiB0aGlzLmdldFRpdGxlKCkgfHwgdGhpcy5nZXRDb250ZW50KCkKLSAgICB9Ci0KLSAgLCBnZXRDb250ZW50OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgY29udGVudAotICAgICAgICAsICRlID0gdGhpcy4kZWxlbWVudAotICAgICAgICAsIG8gPSB0aGlzLm9wdGlvbnMKLQotICAgICAgY29udGVudCA9ICRlLmF0dHIoJ2RhdGEtY29udGVudCcpCi0gICAgICAgIHx8ICh0eXBlb2Ygby5jb250ZW50ID09ICdmdW5jdGlvbicgPyBvLmNvbnRlbnQuY2FsbCgkZVswXSkgOiAgby5jb250ZW50KQotCi0gICAgICByZXR1cm4gY29udGVudAotICAgIH0KLQotICAsIHRpcDogZnVuY3Rpb24gKCkgewotICAgICAgaWYgKCF0aGlzLiR0aXApIHsKLSAgICAgICAgdGhpcy4kdGlwID0gJCh0aGlzLm9wdGlvbnMudGVtcGxhdGUpCi0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy4kdGlwCi0gICAgfQotCi0gIH0pCi0KLQotIC8qIFBPUE9WRVIgUExVR0lOIERFRklOSVRJT04KLSAgKiA9PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gICQuZm4ucG9wb3ZlciA9IGZ1bmN0aW9uIChvcHRpb24pIHsKLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciAkdGhpcyA9ICQodGhpcykKLSAgICAgICAgLCBkYXRhID0gJHRoaXMuZGF0YSgncG9wb3ZlcicpCi0gICAgICAgICwgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCi0gICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ3BvcG92ZXInLCAoZGF0YSA9IG5ldyBQb3BvdmVyKHRoaXMsIG9wdGlvbnMpKSkKLSAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oKQotICAgIH0pCi0gIH0KLQotICAkLmZuLnBvcG92ZXIuQ29uc3RydWN0b3IgPSBQb3BvdmVyCi0KLSAgJC5mbi5wb3BvdmVyLmRlZmF1bHRzID0gJC5leHRlbmQoe30gLCAkLmZuLnRvb2x0aXAuZGVmYXVsdHMsIHsKLSAgICBwbGFjZW1lbnQ6ICdyaWdodCcKLSAgLCBjb250ZW50OiAnJwotICAsIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz0icG9wb3ZlciI+PGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InBvcG92ZXItaW5uZXIiPjxoMyBjbGFzcz0icG9wb3Zlci10aXRsZSI+PC9oMz48ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiPjxwPjwvcD48L2Rpdj48L2Rpdj48L2Rpdj4nCi0gIH0pCi0KLX0od2luZG93LmpRdWVyeSk7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogYm9vdHN0cmFwLXNjcm9sbHNweS5qcyB2Mi4wLjQKLSAqIGh0dHA6Ly90d2l0dGVyLmdpdGh1Yi5jb20vYm9vdHN0cmFwL2phdmFzY3JpcHQuaHRtbCNzY3JvbGxzcHkKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotCi0hZnVuY3Rpb24gKCQpIHsKLQotICAidXNlIHN0cmljdCI7IC8vIGpzaGludCA7XzsKLQotCi0gIC8qIFNDUk9MTFNQWSBDTEFTUyBERUZJTklUSU9OCi0gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLSAgZnVuY3Rpb24gU2Nyb2xsU3B5KCBlbGVtZW50LCBvcHRpb25zKSB7Ci0gICAgdmFyIHByb2Nlc3MgPSAkLnByb3h5KHRoaXMucHJvY2VzcywgdGhpcykKLSAgICAgICwgJGVsZW1lbnQgPSAkKGVsZW1lbnQpLmlzKCdib2R5JykgPyAkKHdpbmRvdykgOiAkKGVsZW1lbnQpCi0gICAgICAsIGhyZWYKLSAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgJC5mbi5zY3JvbGxzcHkuZGVmYXVsdHMsIG9wdGlvbnMpCi0gICAgdGhpcy4kc2Nyb2xsRWxlbWVudCA9ICRlbGVtZW50Lm9uKCdzY3JvbGwuc2Nyb2xsLmRhdGEtYXBpJywgcHJvY2VzcykKLSAgICB0aGlzLnNlbGVjdG9yID0gKHRoaXMub3B0aW9ucy50YXJnZXQKLSAgICAgIHx8ICgoaHJlZiA9ICQoZWxlbWVudCkuYXR0cignaHJlZicpKSAmJiBocmVmLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywgJycpKSAvL3N0cmlwIGZvciBpZTcKLSAgICAgIHx8ICcnKSArICcgLm5hdiBsaSA+IGEnCi0gICAgdGhpcy4kYm9keSA9ICQoJ2JvZHknKQotICAgIHRoaXMucmVmcmVzaCgpCi0gICAgdGhpcy5wcm9jZXNzKCkKLSAgfQotCi0gIFNjcm9sbFNweS5wcm90b3R5cGUgPSB7Ci0KLSAgICAgIGNvbnN0cnVjdG9yOiBTY3JvbGxTcHkKLQotICAgICwgcmVmcmVzaDogZnVuY3Rpb24gKCkgewotICAgICAgICB2YXIgc2VsZiA9IHRoaXMKLSAgICAgICAgICAsICR0YXJnZXRzCi0KLSAgICAgICAgdGhpcy5vZmZzZXRzID0gJChbXSkKLSAgICAgICAgdGhpcy50YXJnZXRzID0gJChbXSkKLQotICAgICAgICAkdGFyZ2V0cyA9IHRoaXMuJGJvZHkKLSAgICAgICAgICAuZmluZCh0aGlzLnNlbGVjdG9yKQotICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyICRlbCA9ICQodGhpcykKLSAgICAgICAgICAgICAgLCBocmVmID0gJGVsLmRhdGEoJ3RhcmdldCcpIHx8ICRlbC5hdHRyKCdocmVmJykKLSAgICAgICAgICAgICAgLCAkaHJlZiA9IC9eI1x3Ly50ZXN0KGhyZWYpICYmICQoaHJlZikKLSAgICAgICAgICAgIHJldHVybiAoICRocmVmCi0gICAgICAgICAgICAgICYmIGhyZWYubGVuZ3RoCi0gICAgICAgICAgICAgICYmIFtbICRocmVmLnBvc2l0aW9uKCkudG9wLCBocmVmIF1dICkgfHwgbnVsbAotICAgICAgICAgIH0pCi0gICAgICAgICAgLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGFbMF0gLSBiWzBdIH0pCi0gICAgICAgICAgLmVhY2goZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgc2VsZi5vZmZzZXRzLnB1c2godGhpc1swXSkKLSAgICAgICAgICAgIHNlbGYudGFyZ2V0cy5wdXNoKHRoaXNbMV0pCi0gICAgICAgICAgfSkKLSAgICAgIH0KLQotICAgICwgcHJvY2VzczogZnVuY3Rpb24gKCkgewotICAgICAgICB2YXIgc2Nyb2xsVG9wID0gdGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSArIHRoaXMub3B0aW9ucy5vZmZzZXQKLSAgICAgICAgICAsIHNjcm9sbEhlaWdodCA9IHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0IHx8IHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0Ci0gICAgICAgICAgLCBtYXhTY3JvbGwgPSBzY3JvbGxIZWlnaHQgLSB0aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpCi0gICAgICAgICAgLCBvZmZzZXRzID0gdGhpcy5vZmZzZXRzCi0gICAgICAgICAgLCB0YXJnZXRzID0gdGhpcy50YXJnZXRzCi0gICAgICAgICAgLCBhY3RpdmVUYXJnZXQgPSB0aGlzLmFjdGl2ZVRhcmdldAotICAgICAgICAgICwgaQotCi0gICAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWF4U2Nyb2xsKSB7Ci0gICAgICAgICAgcmV0dXJuIGFjdGl2ZVRhcmdldCAhPSAoaSA9IHRhcmdldHMubGFzdCgpWzBdKQotICAgICAgICAgICAgJiYgdGhpcy5hY3RpdmF0ZSAoIGkgKQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpID0gb2Zmc2V0cy5sZW5ndGg7IGktLTspIHsKLSAgICAgICAgICBhY3RpdmVUYXJnZXQgIT0gdGFyZ2V0c1tpXQotICAgICAgICAgICAgJiYgc2Nyb2xsVG9wID49IG9mZnNldHNbaV0KLSAgICAgICAgICAgICYmICghb2Zmc2V0c1tpICsgMV0gfHwgc2Nyb2xsVG9wIDw9IG9mZnNldHNbaSArIDFdKQotICAgICAgICAgICAgJiYgdGhpcy5hY3RpdmF0ZSggdGFyZ2V0c1tpXSApCi0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICwgYWN0aXZhdGU6IGZ1bmN0aW9uICh0YXJnZXQpIHsKLSAgICAgICAgdmFyIGFjdGl2ZQotICAgICAgICAgICwgc2VsZWN0b3IKLQotICAgICAgICB0aGlzLmFjdGl2ZVRhcmdldCA9IHRhcmdldAotCi0gICAgICAgICQodGhpcy5zZWxlY3RvcikKLSAgICAgICAgICAucGFyZW50KCcuYWN0aXZlJykKLSAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpCi0KLSAgICAgICAgc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yCi0gICAgICAgICAgKyAnW2RhdGEtdGFyZ2V0PSInICsgdGFyZ2V0ICsgJyJdLCcKLSAgICAgICAgICArIHRoaXMuc2VsZWN0b3IgKyAnW2hyZWY9IicgKyB0YXJnZXQgKyAnIl0nCi0KLSAgICAgICAgYWN0aXZlID0gJChzZWxlY3RvcikKLSAgICAgICAgICAucGFyZW50KCdsaScpCi0gICAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKQotCi0gICAgICAgIGlmIChhY3RpdmUucGFyZW50KCcuZHJvcGRvd24tbWVudScpKSAgewotICAgICAgICAgIGFjdGl2ZSA9IGFjdGl2ZS5jbG9zZXN0KCdsaS5kcm9wZG93bicpLmFkZENsYXNzKCdhY3RpdmUnKQotICAgICAgICB9Ci0KLSAgICAgICAgYWN0aXZlLnRyaWdnZXIoJ2FjdGl2YXRlJykKLSAgICAgIH0KLQotICB9Ci0KLQotIC8qIFNDUk9MTFNQWSBQTFVHSU4gREVGSU5JVElPTgotICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gICQuZm4uc2Nyb2xsc3B5ID0gZnVuY3Rpb24gKCBvcHRpb24gKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCi0gICAgICAgICwgZGF0YSA9ICR0aGlzLmRhdGEoJ3Njcm9sbHNweScpCi0gICAgICAgICwgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCi0gICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ3Njcm9sbHNweScsIChkYXRhID0gbmV3IFNjcm9sbFNweSh0aGlzLCBvcHRpb25zKSkpCi0gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKCkKLSAgICB9KQotICB9Ci0KLSAgJC5mbi5zY3JvbGxzcHkuQ29uc3RydWN0b3IgPSBTY3JvbGxTcHkKLQotICAkLmZuLnNjcm9sbHNweS5kZWZhdWx0cyA9IHsKLSAgICBvZmZzZXQ6IDEwCi0gIH0KLQotCi0gLyogU0NST0xMU1BZIERBVEEtQVBJCi0gICogPT09PT09PT09PT09PT09PT09ICovCi0KLSAgJChmdW5jdGlvbiAoKSB7Ci0gICAgJCgnW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rpb24gKCkgewotICAgICAgdmFyICRzcHkgPSAkKHRoaXMpCi0gICAgICAkc3B5LnNjcm9sbHNweSgkc3B5LmRhdGEoKSkKLSAgICB9KQotICB9KQotCi19KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBib290c3RyYXAtdGFiLmpzIHYyLjAuNAotICogaHR0cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlwdC5odG1sI3RhYnMKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLQotIWZ1bmN0aW9uICgkKSB7Ci0KLSAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187Ci0KLQotIC8qIFRBQiBDTEFTUyBERUZJTklUSU9OCi0gICogPT09PT09PT09PT09PT09PT09PT0gKi8KLQotICB2YXIgVGFiID0gZnVuY3Rpb24gKCBlbGVtZW50ICkgewotICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCkKLSAgfQotCi0gIFRhYi5wcm90b3R5cGUgPSB7Ci0KLSAgICBjb25zdHJ1Y3RvcjogVGFiCi0KLSAgLCBzaG93OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgJHRoaXMgPSB0aGlzLmVsZW1lbnQKLSAgICAgICAgLCAkdWwgPSAkdGhpcy5jbG9zZXN0KCd1bDpub3QoLmRyb3Bkb3duLW1lbnUpJykKLSAgICAgICAgLCBzZWxlY3RvciA9ICR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JykKLSAgICAgICAgLCBwcmV2aW91cwotICAgICAgICAsICR0YXJnZXQKLSAgICAgICAgLCBlCi0KLSAgICAgIGlmICghc2VsZWN0b3IpIHsKLSAgICAgICAgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdocmVmJykKLSAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvciAmJiBzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sICcnKSAvL3N0cmlwIGZvciBpZTcKLSAgICAgIH0KLQotICAgICAgaWYgKCAkdGhpcy5wYXJlbnQoJ2xpJykuaGFzQ2xhc3MoJ2FjdGl2ZScpICkgcmV0dXJuCi0KLSAgICAgIHByZXZpb3VzID0gJHVsLmZpbmQoJy5hY3RpdmUgYScpLmxhc3QoKVswXQotCi0gICAgICBlID0gJC5FdmVudCgnc2hvdycsIHsKLSAgICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXMKLSAgICAgIH0pCi0KLSAgICAgICR0aGlzLnRyaWdnZXIoZSkKLQotICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybgotCi0gICAgICAkdGFyZ2V0ID0gJChzZWxlY3RvcikKLQotICAgICAgdGhpcy5hY3RpdmF0ZSgkdGhpcy5wYXJlbnQoJ2xpJyksICR1bCkKLSAgICAgIHRoaXMuYWN0aXZhdGUoJHRhcmdldCwgJHRhcmdldC5wYXJlbnQoKSwgZnVuY3Rpb24gKCkgewotICAgICAgICAkdGhpcy50cmlnZ2VyKHsKLSAgICAgICAgICB0eXBlOiAnc2hvd24nCi0gICAgICAgICwgcmVsYXRlZFRhcmdldDogcHJldmlvdXMKLSAgICAgICAgfSkKLSAgICAgIH0pCi0gICAgfQotCi0gICwgYWN0aXZhdGU6IGZ1bmN0aW9uICggZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykgewotICAgICAgdmFyICRhY3RpdmUgPSBjb250YWluZXIuZmluZCgnPiAuYWN0aXZlJykKLSAgICAgICAgLCB0cmFuc2l0aW9uID0gY2FsbGJhY2sKLSAgICAgICAgICAgICYmICQuc3VwcG9ydC50cmFuc2l0aW9uCi0gICAgICAgICAgICAmJiAkYWN0aXZlLmhhc0NsYXNzKCdmYWRlJykKLQotICAgICAgZnVuY3Rpb24gbmV4dCgpIHsKLSAgICAgICAgJGFjdGl2ZQotICAgICAgICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJykKLSAgICAgICAgICAuZmluZCgnPiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUnKQotICAgICAgICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJykKLQotICAgICAgICBlbGVtZW50LmFkZENsYXNzKCdhY3RpdmUnKQotCi0gICAgICAgIGlmICh0cmFuc2l0aW9uKSB7Ci0gICAgICAgICAgZWxlbWVudFswXS5vZmZzZXRXaWR0aCAvLyByZWZsb3cgZm9yIHRyYW5zaXRpb24KLSAgICAgICAgICBlbGVtZW50LmFkZENsYXNzKCdpbicpCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcygnZmFkZScpCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoIGVsZW1lbnQucGFyZW50KCcuZHJvcGRvd24tbWVudScpICkgewotICAgICAgICAgIGVsZW1lbnQuY2xvc2VzdCgnbGkuZHJvcGRvd24nKS5hZGRDbGFzcygnYWN0aXZlJykKLSAgICAgICAgfQotCi0gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCkKLSAgICAgIH0KLQotICAgICAgdHJhbnNpdGlvbiA/Ci0gICAgICAgICRhY3RpdmUub25lKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgbmV4dCkgOgotICAgICAgICBuZXh0KCkKLQotICAgICAgJGFjdGl2ZS5yZW1vdmVDbGFzcygnaW4nKQotICAgIH0KLSAgfQotCi0KLSAvKiBUQUIgUExVR0lOIERFRklOSVRJT04KLSAgKiA9PT09PT09PT09PT09PT09PT09PT0gKi8KLQotICAkLmZuLnRhYiA9IGZ1bmN0aW9uICggb3B0aW9uICkgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgewotICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQotICAgICAgICAsIGRhdGEgPSAkdGhpcy5kYXRhKCd0YWInKQotICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCd0YWInLCAoZGF0YSA9IG5ldyBUYWIodGhpcykpKQotICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCi0gICAgfSkKLSAgfQotCi0gICQuZm4udGFiLkNvbnN0cnVjdG9yID0gVGFiCi0KLQotIC8qIFRBQiBEQVRBLUFQSQotICAqID09PT09PT09PT09PSAqLwotCi0gICQoZnVuY3Rpb24gKCkgewotICAgICQoJ2JvZHknKS5vbignY2xpY2sudGFiLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZT0idGFiIl0sIFtkYXRhLXRvZ2dsZT0icGlsbCJdJywgZnVuY3Rpb24gKGUpIHsKLSAgICAgIGUucHJldmVudERlZmF1bHQoKQotICAgICAgJCh0aGlzKS50YWIoJ3Nob3cnKQotICAgIH0pCi0gIH0pCi0KLX0od2luZG93LmpRdWVyeSk7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogYm9vdHN0cmFwLXR5cGVhaGVhZC5qcyB2Mi4wLjQKLSAqIGh0dHA6Ly90d2l0dGVyLmdpdGh1Yi5jb20vYm9vdHN0cmFwL2phdmFzY3JpcHQuaHRtbCN0eXBlYWhlYWQKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLQotIWZ1bmN0aW9uKCQpewotCi0gICJ1c2Ugc3RyaWN0IjsgLy8ganNoaW50IDtfOwotCi0KLSAvKiBUWVBFQUhFQUQgUFVCTElDIENMQVNTIERFRklOSVRJT04KLSAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotICB2YXIgVHlwZWFoZWFkID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKLSAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KQotICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkLmZuLnR5cGVhaGVhZC5kZWZhdWx0cywgb3B0aW9ucykKLSAgICB0aGlzLm1hdGNoZXIgPSB0aGlzLm9wdGlvbnMubWF0Y2hlciB8fCB0aGlzLm1hdGNoZXIKLSAgICB0aGlzLnNvcnRlciA9IHRoaXMub3B0aW9ucy5zb3J0ZXIgfHwgdGhpcy5zb3J0ZXIKLSAgICB0aGlzLmhpZ2hsaWdodGVyID0gdGhpcy5vcHRpb25zLmhpZ2hsaWdodGVyIHx8IHRoaXMuaGlnaGxpZ2h0ZXIKLSAgICB0aGlzLnVwZGF0ZXIgPSB0aGlzLm9wdGlvbnMudXBkYXRlciB8fCB0aGlzLnVwZGF0ZXIKLSAgICB0aGlzLiRtZW51ID0gJCh0aGlzLm9wdGlvbnMubWVudSkuYXBwZW5kVG8oJ2JvZHknKQotICAgIHRoaXMuc291cmNlID0gdGhpcy5vcHRpb25zLnNvdXJjZQotICAgIHRoaXMuc2hvd24gPSBmYWxzZQotICAgIHRoaXMubGlzdGVuKCkKLSAgfQotCi0gIFR5cGVhaGVhZC5wcm90b3R5cGUgPSB7Ci0KLSAgICBjb25zdHJ1Y3RvcjogVHlwZWFoZWFkCi0KLSAgLCBzZWxlY3Q6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciB2YWwgPSB0aGlzLiRtZW51LmZpbmQoJy5hY3RpdmUnKS5hdHRyKCdkYXRhLXZhbHVlJykKLSAgICAgIHRoaXMuJGVsZW1lbnQKLSAgICAgICAgLnZhbCh0aGlzLnVwZGF0ZXIodmFsKSkKLSAgICAgICAgLmNoYW5nZSgpCi0gICAgICByZXR1cm4gdGhpcy5oaWRlKCkKLSAgICB9Ci0KLSAgLCB1cGRhdGVyOiBmdW5jdGlvbiAoaXRlbSkgewotICAgICAgcmV0dXJuIGl0ZW0KLSAgICB9Ci0KLSAgLCBzaG93OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgcG9zID0gJC5leHRlbmQoe30sIHRoaXMuJGVsZW1lbnQub2Zmc2V0KCksIHsKLSAgICAgICAgaGVpZ2h0OiB0aGlzLiRlbGVtZW50WzBdLm9mZnNldEhlaWdodAotICAgICAgfSkKLQotICAgICAgdGhpcy4kbWVudS5jc3MoewotICAgICAgICB0b3A6IHBvcy50b3AgKyBwb3MuaGVpZ2h0Ci0gICAgICAsIGxlZnQ6IHBvcy5sZWZ0Ci0gICAgICB9KQotCi0gICAgICB0aGlzLiRtZW51LnNob3coKQotICAgICAgdGhpcy5zaG93biA9IHRydWUKLSAgICAgIHJldHVybiB0aGlzCi0gICAgfQotCi0gICwgaGlkZTogZnVuY3Rpb24gKCkgewotICAgICAgdGhpcy4kbWVudS5oaWRlKCkKLSAgICAgIHRoaXMuc2hvd24gPSBmYWxzZQotICAgICAgcmV0dXJuIHRoaXMKLSAgICB9Ci0KLSAgLCBsb29rdXA6IGZ1bmN0aW9uIChldmVudCkgewotICAgICAgdmFyIHRoYXQgPSB0aGlzCi0gICAgICAgICwgaXRlbXMKLSAgICAgICAgLCBxCi0KLSAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRlbGVtZW50LnZhbCgpCi0KLSAgICAgIGlmICghdGhpcy5xdWVyeSkgewotICAgICAgICByZXR1cm4gdGhpcy5zaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcwotICAgICAgfQotCi0gICAgICBpdGVtcyA9ICQuZ3JlcCh0aGlzLnNvdXJjZSwgZnVuY3Rpb24gKGl0ZW0pIHsKLSAgICAgICAgcmV0dXJuIHRoYXQubWF0Y2hlcihpdGVtKQotICAgICAgfSkKLQotICAgICAgaXRlbXMgPSB0aGlzLnNvcnRlcihpdGVtcykKLQotICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKGl0ZW1zLnNsaWNlKDAsIHRoaXMub3B0aW9ucy5pdGVtcykpLnNob3coKQotICAgIH0KLQotICAsIG1hdGNoZXI6IGZ1bmN0aW9uIChpdGVtKSB7Ci0gICAgICByZXR1cm4gfml0ZW0udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMucXVlcnkudG9Mb3dlckNhc2UoKSkKLSAgICB9Ci0KLSAgLCBzb3J0ZXI6IGZ1bmN0aW9uIChpdGVtcykgewotICAgICAgdmFyIGJlZ2luc3dpdGggPSBbXQotICAgICAgICAsIGNhc2VTZW5zaXRpdmUgPSBbXQotICAgICAgICAsIGNhc2VJbnNlbnNpdGl2ZSA9IFtdCi0gICAgICAgICwgaXRlbQotCi0gICAgICB3aGlsZSAoaXRlbSA9IGl0ZW1zLnNoaWZ0KCkpIHsKLSAgICAgICAgaWYgKCFpdGVtLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnF1ZXJ5LnRvTG93ZXJDYXNlKCkpKSBiZWdpbnN3aXRoLnB1c2goaXRlbSkKLSAgICAgICAgZWxzZSBpZiAofml0ZW0uaW5kZXhPZih0aGlzLnF1ZXJ5KSkgY2FzZVNlbnNpdGl2ZS5wdXNoKGl0ZW0pCi0gICAgICAgIGVsc2UgY2FzZUluc2Vuc2l0aXZlLnB1c2goaXRlbSkKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGJlZ2luc3dpdGguY29uY2F0KGNhc2VTZW5zaXRpdmUsIGNhc2VJbnNlbnNpdGl2ZSkKLSAgICB9Ci0KLSAgLCBoaWdobGlnaHRlcjogZnVuY3Rpb24gKGl0ZW0pIHsKLSAgICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnkucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywgJ1xcJCYnKQotICAgICAgcmV0dXJuIGl0ZW0ucmVwbGFjZShuZXcgUmVnRXhwKCcoJyArIHF1ZXJ5ICsgJyknLCAnaWcnKSwgZnVuY3Rpb24gKCQxLCBtYXRjaCkgewotICAgICAgICByZXR1cm4gJzxzdHJvbmc+JyArIG1hdGNoICsgJzwvc3Ryb25nPicKLSAgICAgIH0pCi0gICAgfQotCi0gICwgcmVuZGVyOiBmdW5jdGlvbiAoaXRlbXMpIHsKLSAgICAgIHZhciB0aGF0ID0gdGhpcwotCi0gICAgICBpdGVtcyA9ICQoaXRlbXMpLm1hcChmdW5jdGlvbiAoaSwgaXRlbSkgewotICAgICAgICBpID0gJCh0aGF0Lm9wdGlvbnMuaXRlbSkuYXR0cignZGF0YS12YWx1ZScsIGl0ZW0pCi0gICAgICAgIGkuZmluZCgnYScpLmh0bWwodGhhdC5oaWdobGlnaHRlcihpdGVtKSkKLSAgICAgICAgcmV0dXJuIGlbMF0KLSAgICAgIH0pCi0KLSAgICAgIGl0ZW1zLmZpcnN0KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpCi0gICAgICB0aGlzLiRtZW51Lmh0bWwoaXRlbXMpCi0gICAgICByZXR1cm4gdGhpcwotICAgIH0KLQotICAsIG5leHQ6IGZ1bmN0aW9uIChldmVudCkgewotICAgICAgdmFyIGFjdGl2ZSA9IHRoaXMuJG1lbnUuZmluZCgnLmFjdGl2ZScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKQotICAgICAgICAsIG5leHQgPSBhY3RpdmUubmV4dCgpCi0KLSAgICAgIGlmICghbmV4dC5sZW5ndGgpIHsKLSAgICAgICAgbmV4dCA9ICQodGhpcy4kbWVudS5maW5kKCdsaScpWzBdKQotICAgICAgfQotCi0gICAgICBuZXh0LmFkZENsYXNzKCdhY3RpdmUnKQotICAgIH0KLQotICAsIHByZXY6IGZ1bmN0aW9uIChldmVudCkgewotICAgICAgdmFyIGFjdGl2ZSA9IHRoaXMuJG1lbnUuZmluZCgnLmFjdGl2ZScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKQotICAgICAgICAsIHByZXYgPSBhY3RpdmUucHJldigpCi0KLSAgICAgIGlmICghcHJldi5sZW5ndGgpIHsKLSAgICAgICAgcHJldiA9IHRoaXMuJG1lbnUuZmluZCgnbGknKS5sYXN0KCkKLSAgICAgIH0KLQotICAgICAgcHJldi5hZGRDbGFzcygnYWN0aXZlJykKLSAgICB9Ci0KLSAgLCBsaXN0ZW46IGZ1bmN0aW9uICgpIHsKLSAgICAgIHRoaXMuJGVsZW1lbnQKLSAgICAgICAgLm9uKCdibHVyJywgICAgICQucHJveHkodGhpcy5ibHVyLCB0aGlzKSkKLSAgICAgICAgLm9uKCdrZXlwcmVzcycsICQucHJveHkodGhpcy5rZXlwcmVzcywgdGhpcykpCi0gICAgICAgIC5vbigna2V5dXAnLCAgICAkLnByb3h5KHRoaXMua2V5dXAsIHRoaXMpKQotCi0gICAgICBpZiAoJC5icm93c2VyLndlYmtpdCB8fCAkLmJyb3dzZXIubXNpZSkgewotICAgICAgICB0aGlzLiRlbGVtZW50Lm9uKCdrZXlkb3duJywgJC5wcm94eSh0aGlzLmtleXByZXNzLCB0aGlzKSkKLSAgICAgIH0KLQotICAgICAgdGhpcy4kbWVudQotICAgICAgICAub24oJ2NsaWNrJywgJC5wcm94eSh0aGlzLmNsaWNrLCB0aGlzKSkKLSAgICAgICAgLm9uKCdtb3VzZWVudGVyJywgJ2xpJywgJC5wcm94eSh0aGlzLm1vdXNlZW50ZXIsIHRoaXMpKQotICAgIH0KLQotICAsIGtleXVwOiBmdW5jdGlvbiAoZSkgewotICAgICAgc3dpdGNoKGUua2V5Q29kZSkgewotICAgICAgICBjYXNlIDQwOiAvLyBkb3duIGFycm93Ci0gICAgICAgIGNhc2UgMzg6IC8vIHVwIGFycm93Ci0gICAgICAgICAgYnJlYWsKLQotICAgICAgICBjYXNlIDk6IC8vIHRhYgotICAgICAgICBjYXNlIDEzOiAvLyBlbnRlcgotICAgICAgICAgIGlmICghdGhpcy5zaG93bikgcmV0dXJuCi0gICAgICAgICAgdGhpcy5zZWxlY3QoKQotICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgY2FzZSAyNzogLy8gZXNjYXBlCi0gICAgICAgICAgaWYgKCF0aGlzLnNob3duKSByZXR1cm4KLSAgICAgICAgICB0aGlzLmhpZGUoKQotICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICB0aGlzLmxvb2t1cCgpCi0gICAgICB9Ci0KLSAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCkKLSAgICAgIGUucHJldmVudERlZmF1bHQoKQotICB9Ci0KLSAgLCBrZXlwcmVzczogZnVuY3Rpb24gKGUpIHsKLSAgICAgIGlmICghdGhpcy5zaG93bikgcmV0dXJuCi0KLSAgICAgIHN3aXRjaChlLmtleUNvZGUpIHsKLSAgICAgICAgY2FzZSA5OiAvLyB0YWIKLSAgICAgICAgY2FzZSAxMzogLy8gZW50ZXIKLSAgICAgICAgY2FzZSAyNzogLy8gZXNjYXBlCi0gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpCi0gICAgICAgICAgYnJlYWsKLQotICAgICAgICBjYXNlIDM4OiAvLyB1cCBhcnJvdwotICAgICAgICAgIGlmIChlLnR5cGUgIT0gJ2tleWRvd24nKSBicmVhawotICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKQotICAgICAgICAgIHRoaXMucHJldigpCi0gICAgICAgICAgYnJlYWsKLQotICAgICAgICBjYXNlIDQwOiAvLyBkb3duIGFycm93Ci0gICAgICAgICAgaWYgKGUudHlwZSAhPSAna2V5ZG93bicpIGJyZWFrCi0gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpCi0gICAgICAgICAgdGhpcy5uZXh0KCkKLSAgICAgICAgICBicmVhawotICAgICAgfQotCi0gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpCi0gICAgfQotCi0gICwgYmx1cjogZnVuY3Rpb24gKGUpIHsKLSAgICAgIHZhciB0aGF0ID0gdGhpcwotICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoYXQuaGlkZSgpIH0sIDE1MCkKLSAgICB9Ci0KLSAgLCBjbGljazogZnVuY3Rpb24gKGUpIHsKLSAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCkKLSAgICAgIGUucHJldmVudERlZmF1bHQoKQotICAgICAgdGhpcy5zZWxlY3QoKQotICAgIH0KLQotICAsIG1vdXNlZW50ZXI6IGZ1bmN0aW9uIChlKSB7Ci0gICAgICB0aGlzLiRtZW51LmZpbmQoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJykKLSAgICAgICQoZS5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygnYWN0aXZlJykKLSAgICB9Ci0KLSAgfQotCi0KLSAgLyogVFlQRUFIRUFEIFBMVUdJTiBERUZJTklUSU9OCi0gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gICQuZm4udHlwZWFoZWFkID0gZnVuY3Rpb24gKG9wdGlvbikgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgewotICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQotICAgICAgICAsIGRhdGEgPSAkdGhpcy5kYXRhKCd0eXBlYWhlYWQnKQotICAgICAgICAsIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbgotICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCd0eXBlYWhlYWQnLCAoZGF0YSA9IG5ldyBUeXBlYWhlYWQodGhpcywgb3B0aW9ucykpKQotICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCi0gICAgfSkKLSAgfQotCi0gICQuZm4udHlwZWFoZWFkLmRlZmF1bHRzID0gewotICAgIHNvdXJjZTogW10KLSAgLCBpdGVtczogOAotICAsIG1lbnU6ICc8dWwgY2xhc3M9InR5cGVhaGVhZCBkcm9wZG93bi1tZW51Ij48L3VsPicKLSAgLCBpdGVtOiAnPGxpPjxhIGhyZWY9IiMiPjwvYT48L2xpPicKLSAgfQotCi0gICQuZm4udHlwZWFoZWFkLkNvbnN0cnVjdG9yID0gVHlwZWFoZWFkCi0KLQotIC8qIFRZUEVBSEVBRCBEQVRBLUFQSQotICAqID09PT09PT09PT09PT09PT09PSAqLwotCi0gICQoZnVuY3Rpb24gKCkgewotICAgICQoJ2JvZHknKS5vbignZm9jdXMudHlwZWFoZWFkLmRhdGEtYXBpJywgJ1tkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCJdJywgZnVuY3Rpb24gKGUpIHsKLSAgICAgIHZhciAkdGhpcyA9ICQodGhpcykKLSAgICAgIGlmICgkdGhpcy5kYXRhKCd0eXBlYWhlYWQnKSkgcmV0dXJuCi0gICAgICBlLnByZXZlbnREZWZhdWx0KCkKLSAgICAgICR0aGlzLnR5cGVhaGVhZCgkdGhpcy5kYXRhKCkpCi0gICAgfSkKLSAgfSkKLQotfSh3aW5kb3cualF1ZXJ5KTsKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL2pxdWVyeS0xLjcuMS5qcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL2pxdWVyeS0xLjcuMS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNjZDBlYS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9iZW5jaC9qcXVlcnktMS43LjEuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5MjY2ICswLDAgQEAKLS8qIQotICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2MS43LjEKLSAqIGh0dHA6Ly9qcXVlcnkuY29tLwotICoKLSAqIENvcHlyaWdodCAyMDExLCBKb2huIFJlc2lnCi0gKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KLSAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKLSAqCi0gKiBJbmNsdWRlcyBTaXp6bGUuanMKLSAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vCi0gKiBDb3B5cmlnaHQgMjAxMSwgVGhlIERvam8gRm91bmRhdGlvbgotICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2VzLgotICoKLSAqIERhdGU6IE1vbiBOb3YgMjEgMjE6MTE6MDMgMjAxMSAtMDUwMAotICovCi0oZnVuY3Rpb24oIHdpbmRvdywgdW5kZWZpbmVkICkgewotCi0vLyBVc2UgdGhlIGNvcnJlY3QgZG9jdW1lbnQgYWNjb3JkaW5nbHkgd2l0aCB3aW5kb3cgYXJndW1lbnQgKHNhbmRib3gpCi12YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQsCi0JbmF2aWdhdG9yID0gd2luZG93Lm5hdmlnYXRvciwKLQlsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjsKLXZhciBqUXVlcnkgPSAoZnVuY3Rpb24oKSB7Ci0KLS8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5Ci12YXIgalF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewotCQkvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCcKLQkJcmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3RqUXVlcnkgKTsKLQl9LAotCi0JLy8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlCi0JX2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksCi0KLQkvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZQotCV8kID0gd2luZG93LiQsCi0KLQkvLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudCkKLQlyb290alF1ZXJ5LAotCi0JLy8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Mgb3IgSUQgc3RyaW5ncwotCS8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSkKLQlxdWlja0V4cHIgPSAvXig/OlteIzxdKig8W1x3XFddKz4pW14+XSokfCMoW1x3XC1dKikkKS8sCi0KLQkvLyBDaGVjayBpZiBhIHN0cmluZyBoYXMgYSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gaXQKLQlybm90d2hpdGUgPSAvXFMvLAotCi0JLy8gVXNlZCBmb3IgdHJpbW1pbmcgd2hpdGVzcGFjZQotCXRyaW1MZWZ0ID0gL15ccysvLAotCXRyaW1SaWdodCA9IC9ccyskLywKLQotCS8vIE1hdGNoIGEgc3RhbmRhbG9uZSB0YWcKLQlyc2luZ2xlVGFnID0gL148KFx3KylccypcLz8+KD86PFwvXDE+KT8kLywKLQotCS8vIEpTT04gUmVnRXhwCi0JcnZhbGlkY2hhcnMgPSAvXltcXSw6e31cc10qJC8sCi0JcnZhbGlkZXNjYXBlID0gL1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywKLQlydmFsaWR0b2tlbnMgPSAvIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2csCi0JcnZhbGlkYnJhY2VzID0gLyg/Ol58OnwsKSg/OlxzKlxbKSsvZywKLQotCS8vIFVzZXJhZ2VudCBSZWdFeHAKLQlyd2Via2l0ID0gLyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8sCi0Jcm9wZXJhID0gLyhvcGVyYSkoPzouKnZlcnNpb24pP1sgXC9dKFtcdy5dKykvLAotCXJtc2llID0gLyhtc2llKSAoW1x3Ll0rKS8sCi0Jcm1vemlsbGEgPSAvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLAotCi0JLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nCi0JcmRhc2hBbHBoYSA9IC8tKFthLXpdfFswLTldKS9pZywKLQlybXNQcmVmaXggPSAvXi1tcy0vLAotCi0JLy8gVXNlZCBieSBqUXVlcnkuY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKQotCWZjYW1lbENhc2UgPSBmdW5jdGlvbiggYWxsLCBsZXR0ZXIgKSB7Ci0JCXJldHVybiAoIGxldHRlciArICIiICkudG9VcHBlckNhc2UoKTsKLQl9LAotCi0JLy8gS2VlcCBhIFVzZXJBZ2VudCBzdHJpbmcgZm9yIHVzZSB3aXRoIGpRdWVyeS5icm93c2VyCi0JdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudCwKLQotCS8vIEZvciBtYXRjaGluZyB0aGUgZW5naW5lIGFuZCB2ZXJzaW9uIG9mIHRoZSBicm93c2VyCi0JYnJvd3Nlck1hdGNoLAotCi0JLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5Ci0JcmVhZHlMaXN0LAotCi0JLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIKLQlET01Db250ZW50TG9hZGVkLAotCi0JLy8gU2F2ZSBhIHJlZmVyZW5jZSB0byBzb21lIGNvcmUgbWV0aG9kcwotCXRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywKLQloYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LAotCXB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaCwKLQlzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZSwKLQl0cmltID0gU3RyaW5nLnByb3RvdHlwZS50cmltLAotCWluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiwKLQotCS8vIFtbQ2xhc3NdXSAtPiB0eXBlIHBhaXJzCi0JY2xhc3MydHlwZSA9IHt9OwotCi1qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0gewotCWNvbnN0cnVjdG9yOiBqUXVlcnksCi0JaW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5ICkgewotCQl2YXIgbWF0Y2gsIGVsZW0sIHJldCwgZG9jOwotCi0JCS8vIEhhbmRsZSAkKCIiKSwgJChudWxsKSwgb3IgJCh1bmRlZmluZWQpCi0JCWlmICggIXNlbGVjdG9yICkgewotCQkJcmV0dXJuIHRoaXM7Ci0JCX0KLQotCQkvLyBIYW5kbGUgJChET01FbGVtZW50KQotCQlpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkgewotCQkJdGhpcy5jb250ZXh0ID0gdGhpc1swXSA9IHNlbGVjdG9yOwotCQkJdGhpcy5sZW5ndGggPSAxOwotCQkJcmV0dXJuIHRoaXM7Ci0JCX0KLQotCQkvLyBUaGUgYm9keSBlbGVtZW50IG9ubHkgZXhpc3RzIG9uY2UsIG9wdGltaXplIGZpbmRpbmcgaXQKLQkJaWYgKCBzZWxlY3RvciA9PT0gImJvZHkiICYmICFjb250ZXh0ICYmIGRvY3VtZW50LmJvZHkgKSB7Ci0JCQl0aGlzLmNvbnRleHQgPSBkb2N1bWVudDsKLQkJCXRoaXNbMF0gPSBkb2N1bWVudC5ib2R5OwotCQkJdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yOwotCQkJdGhpcy5sZW5ndGggPSAxOwotCQkJcmV0dXJuIHRoaXM7Ci0JCX0KLQotCQkvLyBIYW5kbGUgSFRNTCBzdHJpbmdzCi0JCWlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKLQkJCS8vIEFyZSB3ZSBkZWFsaW5nIHdpdGggSFRNTCBzdHJpbmcgb3IgYW4gSUQ/Ci0JCQlpZiAoIHNlbGVjdG9yLmNoYXJBdCgwKSA9PT0gIjwiICYmIHNlbGVjdG9yLmNoYXJBdCggc2VsZWN0b3IubGVuZ3RoIC0gMSApID09PSAiPiIgJiYgc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7Ci0JCQkJLy8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKLQkJCQltYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTsKLQotCQkJfSBlbHNlIHsKLQkJCQltYXRjaCA9IHF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApOwotCQkJfQotCi0JCQkvLyBWZXJpZnkgYSBtYXRjaCwgYW5kIHRoYXQgbm8gY29udGV4dCB3YXMgc3BlY2lmaWVkIGZvciAjaWQKLQkJCWlmICggbWF0Y2ggJiYgKG1hdGNoWzFdIHx8ICFjb250ZXh0KSApIHsKLQotCQkJCS8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KQotCQkJCWlmICggbWF0Y2hbMV0gKSB7Ci0JCQkJCWNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFswXSA6IGNvbnRleHQ7Ci0JCQkJCWRvYyA9ICggY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQgKTsKLQotCQkJCQkvLyBJZiBhIHNpbmdsZSBzdHJpbmcgaXMgcGFzc2VkIGluIGFuZCBpdCdzIGEgc2luZ2xlIHRhZwotCQkJCQkvLyBqdXN0IGRvIGEgY3JlYXRlRWxlbWVudCBhbmQgc2tpcCB0aGUgcmVzdAotCQkJCQlyZXQgPSByc2luZ2xlVGFnLmV4ZWMoIHNlbGVjdG9yICk7Ci0KLQkJCQkJaWYgKCByZXQgKSB7Ci0JCQkJCQlpZiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7Ci0JCQkJCQkJc2VsZWN0b3IgPSBbIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIHJldFsxXSApIF07Ci0JCQkJCQkJalF1ZXJ5LmZuLmF0dHIuY2FsbCggc2VsZWN0b3IsIGNvbnRleHQsIHRydWUgKTsKLQotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQlzZWxlY3RvciA9IFsgZG9jLmNyZWF0ZUVsZW1lbnQoIHJldFsxXSApIF07Ci0JCQkJCQl9Ci0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXJldCA9IGpRdWVyeS5idWlsZEZyYWdtZW50KCBbIG1hdGNoWzFdIF0sIFsgZG9jIF0gKTsKLQkJCQkJCXNlbGVjdG9yID0gKCByZXQuY2FjaGVhYmxlID8galF1ZXJ5LmNsb25lKHJldC5mcmFnbWVudCkgOiByZXQuZnJhZ21lbnQgKS5jaGlsZE5vZGVzOwotCQkJCQl9Ci0KLQkJCQkJcmV0dXJuIGpRdWVyeS5tZXJnZSggdGhpcywgc2VsZWN0b3IgKTsKLQotCQkJCS8vIEhBTkRMRTogJCgiI2lkIikKLQkJCQl9IGVsc2UgewotCQkJCQllbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWzJdICk7Ci0KLQkJCQkJLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKLQkJCQkJLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAjNjk2MwotCQkJCQlpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgewotCQkJCQkJLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIElFIGFuZCBPcGVyYSByZXR1cm4gaXRlbXMKLQkJCQkJCS8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAotCQkJCQkJaWYgKCBlbGVtLmlkICE9PSBtYXRjaFsyXSApIHsKLQkJCQkJCQlyZXR1cm4gcm9vdGpRdWVyeS5maW5kKCBzZWxlY3RvciApOwotCQkJCQkJfQotCi0JCQkJCQkvLyBPdGhlcndpc2UsIHdlIGluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0Ci0JCQkJCQl0aGlzLmxlbmd0aCA9IDE7Ci0JCQkJCQl0aGlzWzBdID0gZWxlbTsKLQkJCQkJfQotCi0JCQkJCXRoaXMuY29udGV4dCA9IGRvY3VtZW50OwotCQkJCQl0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7Ci0JCQkJCXJldHVybiB0aGlzOwotCQkJCX0KLQotCQkJLy8gSEFORExFOiAkKGV4cHIsICQoLi4uKSkKLQkJCX0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkgewotCQkJCXJldHVybiAoIGNvbnRleHQgfHwgcm9vdGpRdWVyeSApLmZpbmQoIHNlbGVjdG9yICk7Ci0KLQkJCS8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KQotCQkJLy8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpCi0JCQl9IGVsc2UgewotCQkJCXJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTsKLQkJCX0KLQotCQkvLyBIQU5ETEU6ICQoZnVuY3Rpb24pCi0JCS8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeQotCQl9IGVsc2UgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHsKLQkJCXJldHVybiByb290alF1ZXJ5LnJlYWR5KCBzZWxlY3RvciApOwotCQl9Ci0KLQkJaWYgKCBzZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkICkgewotCQkJdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yOwotCQkJdGhpcy5jb250ZXh0ID0gc2VsZWN0b3IuY29udGV4dDsKLQkJfQotCi0JCXJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApOwotCX0sCi0KLQkvLyBTdGFydCB3aXRoIGFuIGVtcHR5IHNlbGVjdG9yCi0Jc2VsZWN0b3I6ICIiLAotCi0JLy8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZAotCWpxdWVyeTogIjEuNy4xIiwKLQotCS8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMAotCWxlbmd0aDogMCwKLQotCS8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0Ci0Jc2l6ZTogZnVuY3Rpb24oKSB7Ci0JCXJldHVybiB0aGlzLmxlbmd0aDsKLQl9LAotCi0JdG9BcnJheTogZnVuY3Rpb24oKSB7Ci0JCXJldHVybiBzbGljZS5jYWxsKCB0aGlzLCAwICk7Ci0JfSwKLQotCS8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKLQkvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheQotCWdldDogZnVuY3Rpb24oIG51bSApIHsKLQkJcmV0dXJuIG51bSA9PSBudWxsID8KLQotCQkJLy8gUmV0dXJuIGEgJ2NsZWFuJyBhcnJheQotCQkJdGhpcy50b0FycmF5KCkgOgotCi0JCQkvLyBSZXR1cm4ganVzdCB0aGUgb2JqZWN0Ci0JCQkoIG51bSA8IDAgPyB0aGlzWyB0aGlzLmxlbmd0aCArIG51bSBdIDogdGhpc1sgbnVtIF0gKTsKLQl9LAotCi0JLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFjawotCS8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KQotCXB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zLCBuYW1lLCBzZWxlY3RvciApIHsKLQkJLy8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXQKLQkJdmFyIHJldCA9IHRoaXMuY29uc3RydWN0b3IoKTsKLQotCQlpZiAoIGpRdWVyeS5pc0FycmF5KCBlbGVtcyApICkgewotCQkJcHVzaC5hcHBseSggcmV0LCBlbGVtcyApOwotCi0JCX0gZWxzZSB7Ci0JCQlqUXVlcnkubWVyZ2UoIHJldCwgZWxlbXMgKTsKLQkJfQotCi0JCS8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCi0JCXJldC5wcmV2T2JqZWN0ID0gdGhpczsKLQotCQlyZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDsKLQotCQlpZiAoIG5hbWUgPT09ICJmaW5kIiApIHsKLQkJCXJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKyAoIHRoaXMuc2VsZWN0b3IgPyAiICIgOiAiIiApICsgc2VsZWN0b3I7Ci0JCX0gZWxzZSBpZiAoIG5hbWUgKSB7Ci0JCQlyZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yICsgIi4iICsgbmFtZSArICIoIiArIHNlbGVjdG9yICsgIikiOwotCQl9Ci0KLQkJLy8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXQKLQkJcmV0dXJuIHJldDsKLQl9LAotCi0JLy8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC4KLQkvLyAoWW91IGNhbiBzZWVkIHRoZSBhcmd1bWVudHMgd2l0aCBhbiBhcnJheSBvZiBhcmdzLCBidXQgdGhpcyBpcwotCS8vIG9ubHkgdXNlZCBpbnRlcm5hbGx5LikKLQllYWNoOiBmdW5jdGlvbiggY2FsbGJhY2ssIGFyZ3MgKSB7Ci0JCXJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2ssIGFyZ3MgKTsKLQl9LAotCi0JcmVhZHk6IGZ1bmN0aW9uKCBmbiApIHsKLQkJLy8gQXR0YWNoIHRoZSBsaXN0ZW5lcnMKLQkJalF1ZXJ5LmJpbmRSZWFkeSgpOwotCi0JCS8vIEFkZCB0aGUgY2FsbGJhY2sKLQkJcmVhZHlMaXN0LmFkZCggZm4gKTsKLQotCQlyZXR1cm4gdGhpczsKLQl9LAotCi0JZXE6IGZ1bmN0aW9uKCBpICkgewotCQlpID0gK2k7Ci0JCXJldHVybiBpID09PSAtMSA/Ci0JCQl0aGlzLnNsaWNlKCBpICkgOgotCQkJdGhpcy5zbGljZSggaSwgaSArIDEgKTsKLQl9LAotCi0JZmlyc3Q6IGZ1bmN0aW9uKCkgewotCQlyZXR1cm4gdGhpcy5lcSggMCApOwotCX0sCi0KLQlsYXN0OiBmdW5jdGlvbigpIHsKLQkJcmV0dXJuIHRoaXMuZXEoIC0xICk7Ci0JfSwKLQotCXNsaWNlOiBmdW5jdGlvbigpIHsKLQkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICksCi0JCQkic2xpY2UiLCBzbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpICk7Ci0JfSwKLQotCW1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkgewotCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAodGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7Ci0JCQlyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApOwotCQl9KSk7Ci0JfSwKLQotCWVuZDogZnVuY3Rpb24oKSB7Ci0JCXJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcihudWxsKTsKLQl9LAotCi0JLy8gRm9yIGludGVybmFsIHVzZSBvbmx5LgotCS8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLgotCXB1c2g6IHB1c2gsCi0Jc29ydDogW10uc29ydCwKLQlzcGxpY2U6IFtdLnNwbGljZQotfTsKLQotLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvbgotalF1ZXJ5LmZuLmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuOwotCi1qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkgewotCXZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSwKLQkJdGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8IHt9LAotCQlpID0gMSwKLQkJbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwKLQkJZGVlcCA9IGZhbHNlOwotCi0JLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvbgotCWlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgewotCQlkZWVwID0gdGFyZ2V0OwotCQl0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307Ci0JCS8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKLQkJaSA9IDI7Ci0JfQotCi0JLy8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCi0JaWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSAib2JqZWN0IiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSApIHsKLQkJdGFyZ2V0ID0ge307Ci0JfQotCi0JLy8gZXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkCi0JaWYgKCBsZW5ndGggPT09IGkgKSB7Ci0JCXRhcmdldCA9IHRoaXM7Ci0JCS0taTsKLQl9Ci0KLQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKLQkJLy8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlcwotCQlpZiAoIChvcHRpb25zID0gYXJndW1lbnRzWyBpIF0pICE9IG51bGwgKSB7Ci0JCQkvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0Ci0JCQlmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7Ci0JCQkJc3JjID0gdGFyZ2V0WyBuYW1lIF07Ci0JCQkJY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKLQotCQkJCS8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3AKLQkJCQlpZiAoIHRhcmdldCA9PT0gY29weSApIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCi0JCQkJLy8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzCi0JCQkJaWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJyYXkgPSBqUXVlcnkuaXNBcnJheShjb3B5KSkgKSApIHsKLQkJCQkJaWYgKCBjb3B5SXNBcnJheSApIHsKLQkJCQkJCWNvcHlJc0FycmF5ID0gZmFsc2U7Ci0JCQkJCQljbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNBcnJheShzcmMpID8gc3JjIDogW107Ci0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7fTsKLQkJCQkJfQotCi0JCQkJCS8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbQotCQkJCQl0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7Ci0KLQkJCQkvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzCi0JCQkJfSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkgewotCQkJCQl0YXJnZXRbIG5hbWUgXSA9IGNvcHk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3QKLQlyZXR1cm4gdGFyZ2V0OwotfTsKLQotalF1ZXJ5LmV4dGVuZCh7Ci0Jbm9Db25mbGljdDogZnVuY3Rpb24oIGRlZXAgKSB7Ci0JCWlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHsKLQkJCXdpbmRvdy4kID0gXyQ7Ci0JCX0KLQotCQlpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkgewotCQkJd2luZG93LmpRdWVyeSA9IF9qUXVlcnk7Ci0JCX0KLQotCQlyZXR1cm4galF1ZXJ5OwotCX0sCi0KLQkvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLgotCWlzUmVhZHk6IGZhbHNlLAotCi0JLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZQotCS8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxCi0JcmVhZHlXYWl0OiAxLAotCi0JLy8gSG9sZCAob3IgcmVsZWFzZSkgdGhlIHJlYWR5IGV2ZW50Ci0JaG9sZFJlYWR5OiBmdW5jdGlvbiggaG9sZCApIHsKLQkJaWYgKCBob2xkICkgewotCQkJalF1ZXJ5LnJlYWR5V2FpdCsrOwotCQl9IGVsc2UgewotCQkJalF1ZXJ5LnJlYWR5KCB0cnVlICk7Ci0JCX0KLQl9LAotCi0JLy8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeQotCXJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHsKLQkJLy8gRWl0aGVyIGEgcmVsZWFzZWQgaG9sZCBvciBhbiBET01yZWFkeS9sb2FkIGV2ZW50IGFuZCBub3QgeWV0IHJlYWR5Ci0JCWlmICggKHdhaXQgPT09IHRydWUgJiYgIS0talF1ZXJ5LnJlYWR5V2FpdCkgfHwgKHdhaXQgIT09IHRydWUgJiYgIWpRdWVyeS5pc1JlYWR5KSApIHsKLQkJCS8vIE1ha2Ugc3VyZSBib2R5IGV4aXN0cywgYXQgbGVhc3QsIGluIGNhc2UgSUUgZ2V0cyBhIGxpdHRsZSBvdmVyemVhbG91cyAodGlja2V0ICM1NDQzKS4KLQkJCWlmICggIWRvY3VtZW50LmJvZHkgKSB7Ci0JCQkJcmV0dXJuIHNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSwgMSApOwotCQkJfQotCi0JCQkvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHkKLQkJCWpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTsKLQotCQkJLy8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmUKLQkJCWlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkgewotCQkJCXJldHVybjsKLQkJCX0KLQotCQkJLy8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZQotCQkJcmVhZHlMaXN0LmZpcmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApOwotCi0JCQkvLyBUcmlnZ2VyIGFueSBib3VuZCByZWFkeSBldmVudHMKLQkJCWlmICggalF1ZXJ5LmZuLnRyaWdnZXIgKSB7Ci0JCQkJalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoICJyZWFkeSIgKS5vZmYoICJyZWFkeSIgKTsKLQkJCX0KLQkJfQotCX0sCi0KLQliaW5kUmVhZHk6IGZ1bmN0aW9uKCkgewotCQlpZiAoIHJlYWR5TGlzdCApIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCXJlYWR5TGlzdCA9IGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKTsKLQotCQkvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZCBhZnRlciB0aGUKLQkJLy8gYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4KLQkJaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgewotCQkJLy8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5Ci0JCQlyZXR1cm4gc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5LCAxICk7Ci0JCX0KLQotCQkvLyBNb3ppbGxhLCBPcGVyYSBhbmQgd2Via2l0IG5pZ2h0bGllcyBjdXJyZW50bHkgc3VwcG9ydCB0aGlzIGV2ZW50Ci0JCWlmICggZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKLQkJCS8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2sKLQkJCWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgRE9NQ29udGVudExvYWRlZCwgZmFsc2UgKTsKLQotCQkJLy8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKLQkJCXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAibG9hZCIsIGpRdWVyeS5yZWFkeSwgZmFsc2UgKTsKLQotCQkvLyBJZiBJRSBldmVudCBtb2RlbCBpcyB1c2VkCi0JCX0gZWxzZSBpZiAoIGRvY3VtZW50LmF0dGFjaEV2ZW50ICkgewotCQkJLy8gZW5zdXJlIGZpcmluZyBiZWZvcmUgb25sb2FkLAotCQkJLy8gbWF5YmUgbGF0ZSBidXQgc2FmZSBhbHNvIGZvciBpZnJhbWVzCi0JCQlkb2N1bWVudC5hdHRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIERPTUNvbnRlbnRMb2FkZWQgKTsKLQotCQkJLy8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKLQkJCXdpbmRvdy5hdHRhY2hFdmVudCggIm9ubG9hZCIsIGpRdWVyeS5yZWFkeSApOwotCi0JCQkvLyBJZiBJRSBhbmQgbm90IGEgZnJhbWUKLQkJCS8vIGNvbnRpbnVhbGx5IGNoZWNrIHRvIHNlZSBpZiB0aGUgZG9jdW1lbnQgaXMgcmVhZHkKLQkJCXZhciB0b3BsZXZlbCA9IGZhbHNlOwotCi0JCQl0cnkgewotCQkJCXRvcGxldmVsID0gd2luZG93LmZyYW1lRWxlbWVudCA9PSBudWxsOwotCQkJfSBjYXRjaChlKSB7fQotCi0JCQlpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCAmJiB0b3BsZXZlbCApIHsKLQkJCQlkb1Njcm9sbENoZWNrKCk7Ci0JCQl9Ci0JCX0KLQl9LAotCi0JLy8gU2VlIHRlc3QvdW5pdC9jb3JlLmpzIGZvciBkZXRhaWxzIGNvbmNlcm5pbmcgaXNGdW5jdGlvbi4KLQkvLyBTaW5jZSB2ZXJzaW9uIDEuMywgRE9NIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBsaWtlIGFsZXJ0Ci0JLy8gYXJlbid0IHN1cHBvcnRlZC4gVGhleSByZXR1cm4gZmFsc2Ugb24gSUUgKCMyOTY4KS4KLQlpc0Z1bmN0aW9uOiBmdW5jdGlvbiggb2JqICkgewotCQlyZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gImZ1bmN0aW9uIjsKLQl9LAotCi0JaXNBcnJheTogQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiggb2JqICkgewotCQlyZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gImFycmF5IjsKLQl9LAotCi0JLy8gQSBjcnVkZSB3YXkgb2YgZGV0ZXJtaW5pbmcgaWYgYW4gb2JqZWN0IGlzIGEgd2luZG93Ci0JaXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7Ci0JCXJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gIm9iamVjdCIgJiYgInNldEludGVydmFsIiBpbiBvYmo7Ci0JfSwKLQotCWlzTnVtZXJpYzogZnVuY3Rpb24oIG9iaiApIHsKLQkJcmV0dXJuICFpc05hTiggcGFyc2VGbG9hdChvYmopICkgJiYgaXNGaW5pdGUoIG9iaiApOwotCX0sCi0KLQl0eXBlOiBmdW5jdGlvbiggb2JqICkgewotCQlyZXR1cm4gb2JqID09IG51bGwgPwotCQkJU3RyaW5nKCBvYmogKSA6Ci0JCQljbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKG9iaikgXSB8fCAib2JqZWN0IjsKLQl9LAotCi0JaXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKLQkJLy8gTXVzdCBiZSBhbiBPYmplY3QuCi0JCS8vIEJlY2F1c2Ugb2YgSUUsIHdlIGFsc28gaGF2ZSB0byBjaGVjayB0aGUgcHJlc2VuY2Ugb2YgdGhlIGNvbnN0cnVjdG9yIHByb3BlcnR5LgotCQkvLyBNYWtlIHN1cmUgdGhhdCBET00gbm9kZXMgYW5kIHdpbmRvdyBvYmplY3RzIGRvbid0IHBhc3MgdGhyb3VnaCwgYXMgd2VsbAotCQlpZiAoICFvYmogfHwgalF1ZXJ5LnR5cGUob2JqKSAhPT0gIm9iamVjdCIgfHwgb2JqLm5vZGVUeXBlIHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQl0cnkgewotCQkJLy8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdAotCQkJaWYgKCBvYmouY29uc3RydWN0b3IgJiYKLQkJCQkhaGFzT3duLmNhbGwob2JqLCAiY29uc3RydWN0b3IiKSAmJgotCQkJCSFoYXNPd24uY2FsbChvYmouY29uc3RydWN0b3IucHJvdG90eXBlLCAiaXNQcm90b3R5cGVPZiIpICkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfSBjYXRjaCAoIGUgKSB7Ci0JCQkvLyBJRTgsOSBXaWxsIHRocm93IGV4Y2VwdGlvbnMgb24gY2VydGFpbiBob3N0IG9iamVjdHMgIzk4OTcKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCS8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNvIHRvIHNwZWVkIHVwLAotCQkvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93bi4KLQotCQl2YXIga2V5OwotCQlmb3IgKCBrZXkgaW4gb2JqICkge30KLQotCQlyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgaGFzT3duLmNhbGwoIG9iaiwga2V5ICk7Ci0JfSwKLQotCWlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7Ci0JCWZvciAoIHZhciBuYW1lIGluIG9iaiApIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9LAotCi0JZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7Ci0JCXRocm93IG5ldyBFcnJvciggbXNnICk7Ci0JfSwKLQotCXBhcnNlSlNPTjogZnVuY3Rpb24oIGRhdGEgKSB7Ci0JCWlmICggdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciIHx8ICFkYXRhICkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQkvLyBNYWtlIHN1cmUgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQgKElFIGNhbid0IGhhbmRsZSBpdCkKLQkJZGF0YSA9IGpRdWVyeS50cmltKCBkYXRhICk7Ci0KLQkJLy8gQXR0ZW1wdCB0byBwYXJzZSB1c2luZyB0aGUgbmF0aXZlIEpTT04gcGFyc2VyIGZpcnN0Ci0JCWlmICggd2luZG93LkpTT04gJiYgd2luZG93LkpTT04ucGFyc2UgKSB7Ci0JCQlyZXR1cm4gd2luZG93LkpTT04ucGFyc2UoIGRhdGEgKTsKLQkJfQotCi0JCS8vIE1ha2Ugc3VyZSB0aGUgaW5jb21pbmcgZGF0YSBpcyBhY3R1YWwgSlNPTgotCQkvLyBMb2dpYyBib3Jyb3dlZCBmcm9tIGh0dHA6Ly9qc29uLm9yZy9qc29uMi5qcwotCQlpZiAoIHJ2YWxpZGNoYXJzLnRlc3QoIGRhdGEucmVwbGFjZSggcnZhbGlkZXNjYXBlLCAiQCIgKQotCQkJLnJlcGxhY2UoIHJ2YWxpZHRva2VucywgIl0iICkKLQkJCS5yZXBsYWNlKCBydmFsaWRicmFjZXMsICIiKSkgKSB7Ci0KLQkJCXJldHVybiAoIG5ldyBGdW5jdGlvbiggInJldHVybiAiICsgZGF0YSApICkoKTsKLQotCQl9Ci0JCWpRdWVyeS5lcnJvciggIkludmFsaWQgSlNPTjogIiArIGRhdGEgKTsKLQl9LAotCi0JLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZwotCXBhcnNlWE1MOiBmdW5jdGlvbiggZGF0YSApIHsKLQkJdmFyIHhtbCwgdG1wOwotCQl0cnkgewotCQkJaWYgKCB3aW5kb3cuRE9NUGFyc2VyICkgeyAvLyBTdGFuZGFyZAotCQkJCXRtcCA9IG5ldyBET01QYXJzZXIoKTsKLQkJCQl4bWwgPSB0bXAucGFyc2VGcm9tU3RyaW5nKCBkYXRhICwgInRleHQveG1sIiApOwotCQkJfSBlbHNlIHsgLy8gSUUKLQkJCQl4bWwgPSBuZXcgQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxET00iICk7Ci0JCQkJeG1sLmFzeW5jID0gImZhbHNlIjsKLQkJCQl4bWwubG9hZFhNTCggZGF0YSApOwotCQkJfQotCQl9IGNhdGNoKCBlICkgewotCQkJeG1sID0gdW5kZWZpbmVkOwotCQl9Ci0JCWlmICggIXhtbCB8fCAheG1sLmRvY3VtZW50RWxlbWVudCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJwYXJzZXJlcnJvciIgKS5sZW5ndGggKSB7Ci0JCQlqUXVlcnkuZXJyb3IoICJJbnZhbGlkIFhNTDogIiArIGRhdGEgKTsKLQkJfQotCQlyZXR1cm4geG1sOwotCX0sCi0KLQlub29wOiBmdW5jdGlvbigpIHt9LAotCi0JLy8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHQKLQkvLyBXb3JrYXJvdW5kcyBiYXNlZCBvbiBmaW5kaW5ncyBieSBKaW0gRHJpc2NvbGwKLQkvLyBodHRwOi8vd2VibG9ncy5qYXZhLm5ldC9ibG9nL2RyaXNjb2xsL2FyY2hpdmUvMjAwOS8wOS8wOC9ldmFsLWphdmFzY3JpcHQtZ2xvYmFsLWNvbnRleHQKLQlnbG9iYWxFdmFsOiBmdW5jdGlvbiggZGF0YSApIHsKLQkJaWYgKCBkYXRhICYmIHJub3R3aGl0ZS50ZXN0KCBkYXRhICkgKSB7Ci0JCQkvLyBXZSB1c2UgZXhlY1NjcmlwdCBvbiBJbnRlcm5ldCBFeHBsb3JlcgotCQkJLy8gV2UgdXNlIGFuIGFub255bW91cyBmdW5jdGlvbiBzbyB0aGF0IGNvbnRleHQgaXMgd2luZG93Ci0JCQkvLyByYXRoZXIgdGhhbiBqUXVlcnkgaW4gRmlyZWZveAotCQkJKCB3aW5kb3cuZXhlY1NjcmlwdCB8fCBmdW5jdGlvbiggZGF0YSApIHsKLQkJCQl3aW5kb3dbICJldmFsIiBdLmNhbGwoIHdpbmRvdywgZGF0YSApOwotCQkJfSApKCBkYXRhICk7Ci0JCX0KLQl9LAotCi0JLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcwotCS8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MikKLQljYW1lbENhc2U6IGZ1bmN0aW9uKCBzdHJpbmcgKSB7Ci0JCXJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCAibXMtIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTsKLQl9LAotCi0Jbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotCQlyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5hbWUudG9VcHBlckNhc2UoKTsKLQl9LAotCi0JLy8gYXJncyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQotCWVhY2g6IGZ1bmN0aW9uKCBvYmplY3QsIGNhbGxiYWNrLCBhcmdzICkgewotCQl2YXIgbmFtZSwgaSA9IDAsCi0JCQlsZW5ndGggPSBvYmplY3QubGVuZ3RoLAotCQkJaXNPYmogPSBsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNGdW5jdGlvbiggb2JqZWN0ICk7Ci0KLQkJaWYgKCBhcmdzICkgewotCQkJaWYgKCBpc09iaiApIHsKLQkJCQlmb3IgKCBuYW1lIGluIG9iamVjdCApIHsKLQkJCQkJaWYgKCBjYWxsYmFjay5hcHBseSggb2JqZWN0WyBuYW1lIF0sIGFyZ3MgKSA9PT0gZmFsc2UgKSB7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJZm9yICggOyBpIDwgbGVuZ3RoOyApIHsKLQkJCQkJaWYgKCBjYWxsYmFjay5hcHBseSggb2JqZWN0WyBpKysgXSwgYXJncyApID09PSBmYWxzZSApIHsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCS8vIEEgc3BlY2lhbCwgZmFzdCwgY2FzZSBmb3IgdGhlIG1vc3QgY29tbW9uIHVzZSBvZiBlYWNoCi0JCX0gZWxzZSB7Ci0JCQlpZiAoIGlzT2JqICkgewotCQkJCWZvciAoIG5hbWUgaW4gb2JqZWN0ICkgewotCQkJCQlpZiAoIGNhbGxiYWNrLmNhbGwoIG9iamVjdFsgbmFtZSBdLCBuYW1lLCBvYmplY3RbIG5hbWUgXSApID09PSBmYWxzZSApIHsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlmb3IgKCA7IGkgPCBsZW5ndGg7ICkgewotCQkJCQlpZiAoIGNhbGxiYWNrLmNhbGwoIG9iamVjdFsgaSBdLCBpLCBvYmplY3RbIGkrKyBdICkgPT09IGZhbHNlICkgewotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gb2JqZWN0OwotCX0sCi0KLQkvLyBVc2UgbmF0aXZlIFN0cmluZy50cmltIGZ1bmN0aW9uIHdoZXJldmVyIHBvc3NpYmxlCi0JdHJpbTogdHJpbSA/Ci0JCWZ1bmN0aW9uKCB0ZXh0ICkgewotCQkJcmV0dXJuIHRleHQgPT0gbnVsbCA/Ci0JCQkJIiIgOgotCQkJCXRyaW0uY2FsbCggdGV4dCApOwotCQl9IDoKLQotCQkvLyBPdGhlcndpc2UgdXNlIG91ciBvd24gdHJpbW1pbmcgZnVuY3Rpb25hbGl0eQotCQlmdW5jdGlvbiggdGV4dCApIHsKLQkJCXJldHVybiB0ZXh0ID09IG51bGwgPwotCQkJCSIiIDoKLQkJCQl0ZXh0LnRvU3RyaW5nKCkucmVwbGFjZSggdHJpbUxlZnQsICIiICkucmVwbGFjZSggdHJpbVJpZ2h0LCAiIiApOwotCQl9LAotCi0JLy8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQotCW1ha2VBcnJheTogZnVuY3Rpb24oIGFycmF5LCByZXN1bHRzICkgewotCQl2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTsKLQotCQlpZiAoIGFycmF5ICE9IG51bGwgKSB7Ci0JCQkvLyBUaGUgd2luZG93LCBzdHJpbmdzIChhbmQgZnVuY3Rpb25zKSBhbHNvIGhhdmUgJ2xlbmd0aCcKLQkJCS8vIFR3ZWFrZWQgbG9naWMgc2xpZ2h0bHkgdG8gaGFuZGxlIEJsYWNrYmVycnkgNC43IFJlZ0V4cCBpc3N1ZXMgIzY5MzAKLQkJCXZhciB0eXBlID0galF1ZXJ5LnR5cGUoIGFycmF5ICk7Ci0KLQkJCWlmICggYXJyYXkubGVuZ3RoID09IG51bGwgfHwgdHlwZSA9PT0gInN0cmluZyIgfHwgdHlwZSA9PT0gImZ1bmN0aW9uIiB8fCB0eXBlID09PSAicmVnZXhwIiB8fCBqUXVlcnkuaXNXaW5kb3coIGFycmF5ICkgKSB7Ci0JCQkJcHVzaC5jYWxsKCByZXQsIGFycmF5ICk7Ci0JCQl9IGVsc2UgewotCQkJCWpRdWVyeS5tZXJnZSggcmV0LCBhcnJheSApOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJldDsKLQl9LAotCi0JaW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFycmF5LCBpICkgewotCQl2YXIgbGVuOwotCi0JCWlmICggYXJyYXkgKSB7Ci0JCQlpZiAoIGluZGV4T2YgKSB7Ci0JCQkJcmV0dXJuIGluZGV4T2YuY2FsbCggYXJyYXksIGVsZW0sIGkgKTsKLQkJCX0KLQotCQkJbGVuID0gYXJyYXkubGVuZ3RoOwotCQkJaSA9IGkgPyBpIDwgMCA/IE1hdGgubWF4KCAwLCBsZW4gKyBpICkgOiBpIDogMDsKLQotCQkJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7Ci0JCQkJLy8gU2tpcCBhY2Nlc3NpbmcgaW4gc3BhcnNlIGFycmF5cwotCQkJCWlmICggaSBpbiBhcnJheSAmJiBhcnJheVsgaSBdID09PSBlbGVtICkgewotCQkJCQlyZXR1cm4gaTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gLTE7Ci0JfSwKLQotCW1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHsKLQkJdmFyIGkgPSBmaXJzdC5sZW5ndGgsCi0JCQlqID0gMDsKLQotCQlpZiAoIHR5cGVvZiBzZWNvbmQubGVuZ3RoID09PSAibnVtYmVyIiApIHsKLQkJCWZvciAoIHZhciBsID0gc2Vjb25kLmxlbmd0aDsgaiA8IGw7IGorKyApIHsKLQkJCQlmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTsKLQkJCX0KLQotCQl9IGVsc2UgewotCQkJd2hpbGUgKCBzZWNvbmRbal0gIT09IHVuZGVmaW5lZCApIHsKLQkJCQlmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGorKyBdOwotCQkJfQotCQl9Ci0KLQkJZmlyc3QubGVuZ3RoID0gaTsKLQotCQlyZXR1cm4gZmlyc3Q7Ci0JfSwKLQotCWdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludiApIHsKLQkJdmFyIHJldCA9IFtdLCByZXRWYWw7Ci0JCWludiA9ICEhaW52OwotCi0JCS8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXMKLQkJLy8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb24KLQkJZm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApIHsKLQkJCXJldFZhbCA9ICEhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKLQkJCWlmICggaW52ICE9PSByZXRWYWwgKSB7Ci0JCQkJcmV0LnB1c2goIGVsZW1zWyBpIF0gKTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfSwKLQotCS8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQotCW1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkgewotCQl2YXIgdmFsdWUsIGtleSwgcmV0ID0gW10sCi0JCQlpID0gMCwKLQkJCWxlbmd0aCA9IGVsZW1zLmxlbmd0aCwKLQkJCS8vIGpxdWVyeSBvYmplY3RzIGFyZSB0cmVhdGVkIGFzIGFycmF5cwotCQkJaXNBcnJheSA9IGVsZW1zIGluc3RhbmNlb2YgalF1ZXJ5IHx8IGxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBsZW5ndGggPT09ICJudW1iZXIiICYmICggKCBsZW5ndGggPiAwICYmIGVsZW1zWyAwIF0gJiYgZWxlbXNbIGxlbmd0aCAtMSBdICkgfHwgbGVuZ3RoID09PSAwIHx8IGpRdWVyeS5pc0FycmF5KCBlbGVtcyApICkgOwotCi0JCS8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpcgotCQlpZiAoIGlzQXJyYXkgKSB7Ci0JCQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKLQkJCQl2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKLQotCQkJCWlmICggdmFsdWUgIT0gbnVsbCApIHsKLQkJCQkJcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJLy8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCwKLQkJfSBlbHNlIHsKLQkJCWZvciAoIGtleSBpbiBlbGVtcyApIHsKLQkJCQl2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sga2V5IF0sIGtleSwgYXJnICk7Ci0KLQkJCQlpZiAoIHZhbHVlICE9IG51bGwgKSB7Ci0JCQkJCXJldFsgcmV0Lmxlbmd0aCBdID0gdmFsdWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cwotCQlyZXR1cm4gcmV0LmNvbmNhdC5hcHBseSggW10sIHJldCApOwotCX0sCi0KLQkvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHMKLQlndWlkOiAxLAotCi0JLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55Ci0JLy8gYXJndW1lbnRzLgotCXByb3h5OiBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7Ci0JCWlmICggdHlwZW9mIGNvbnRleHQgPT09ICJzdHJpbmciICkgewotCQkJdmFyIHRtcCA9IGZuWyBjb250ZXh0IF07Ci0JCQljb250ZXh0ID0gZm47Ci0JCQlmbiA9IHRtcDsKLQkJfQotCi0JCS8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjCi0JCS8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuCi0JCWlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApICkgewotCQkJcmV0dXJuIHVuZGVmaW5lZDsKLQkJfQotCi0JCS8vIFNpbXVsYXRlZCBiaW5kCi0JCXZhciBhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICksCi0JCQlwcm94eSA9IGZ1bmN0aW9uKCkgewotCQkJCXJldHVybiBmbi5hcHBseSggY29udGV4dCwgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTsKLQkJCX07Ci0KLQkJLy8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkCi0JCXByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBwcm94eS5ndWlkIHx8IGpRdWVyeS5ndWlkKys7Ci0KLQkJcmV0dXJuIHByb3h5OwotCX0sCi0KLQkvLyBNdXRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIHRvIGEgY29sbGVjdGlvbgotCS8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvbgotCWFjY2VzczogZnVuY3Rpb24oIGVsZW1zLCBrZXksIHZhbHVlLCBleGVjLCBmbiwgcGFzcyApIHsKLQkJdmFyIGxlbmd0aCA9IGVsZW1zLmxlbmd0aDsKLQotCQkvLyBTZXR0aW5nIG1hbnkgYXR0cmlidXRlcwotCQlpZiAoIHR5cGVvZiBrZXkgPT09ICJvYmplY3QiICkgewotCQkJZm9yICggdmFyIGsgaW4ga2V5ICkgewotCQkJCWpRdWVyeS5hY2Nlc3MoIGVsZW1zLCBrLCBrZXlba10sIGV4ZWMsIGZuLCB2YWx1ZSApOwotCQkJfQotCQkJcmV0dXJuIGVsZW1zOwotCQl9Ci0KLQkJLy8gU2V0dGluZyBvbmUgYXR0cmlidXRlCi0JCWlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKLQkJCS8vIE9wdGlvbmFsbHksIGZ1bmN0aW9uIHZhbHVlcyBnZXQgZXhlY3V0ZWQgaWYgZXhlYyBpcyB0cnVlCi0JCQlleGVjID0gIXBhc3MgJiYgZXhlYyAmJiBqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSk7Ci0KLQkJCWZvciAoIHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrICkgewotCQkJCWZuKCBlbGVtc1tpXSwga2V5LCBleGVjID8gdmFsdWUuY2FsbCggZWxlbXNbaV0sIGksIGZuKCBlbGVtc1tpXSwga2V5ICkgKSA6IHZhbHVlLCBwYXNzICk7Ci0JCQl9Ci0KLQkJCXJldHVybiBlbGVtczsKLQkJfQotCi0JCS8vIEdldHRpbmcgYW4gYXR0cmlidXRlCi0JCXJldHVybiBsZW5ndGggPyBmbiggZWxlbXNbMF0sIGtleSApIDogdW5kZWZpbmVkOwotCX0sCi0KLQlub3c6IGZ1bmN0aW9uKCkgewotCQlyZXR1cm4gKCBuZXcgRGF0ZSgpICkuZ2V0VGltZSgpOwotCX0sCi0KLQkvLyBVc2Ugb2YgalF1ZXJ5LmJyb3dzZXIgaXMgZnJvd25lZCB1cG9uLgotCS8vIE1vcmUgZGV0YWlsczogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VdGlsaXRpZXMvalF1ZXJ5LmJyb3dzZXIKLQl1YU1hdGNoOiBmdW5jdGlvbiggdWEgKSB7Ci0JCXVhID0gdWEudG9Mb3dlckNhc2UoKTsKLQotCQl2YXIgbWF0Y2ggPSByd2Via2l0LmV4ZWMoIHVhICkgfHwKLQkJCXJvcGVyYS5leGVjKCB1YSApIHx8Ci0JCQlybXNpZS5leGVjKCB1YSApIHx8Ci0JCQl1YS5pbmRleE9mKCJjb21wYXRpYmxlIikgPCAwICYmIHJtb3ppbGxhLmV4ZWMoIHVhICkgfHwKLQkJCVtdOwotCi0JCXJldHVybiB7IGJyb3dzZXI6IG1hdGNoWzFdIHx8ICIiLCB2ZXJzaW9uOiBtYXRjaFsyXSB8fCAiMCIgfTsKLQl9LAotCi0Jc3ViOiBmdW5jdGlvbigpIHsKLQkJZnVuY3Rpb24galF1ZXJ5U3ViKCBzZWxlY3RvciwgY29udGV4dCApIHsKLQkJCXJldHVybiBuZXcgalF1ZXJ5U3ViLmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7Ci0JCX0KLQkJalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgalF1ZXJ5U3ViLCB0aGlzICk7Ci0JCWpRdWVyeVN1Yi5zdXBlcmNsYXNzID0gdGhpczsKLQkJalF1ZXJ5U3ViLmZuID0galF1ZXJ5U3ViLnByb3RvdHlwZSA9IHRoaXMoKTsKLQkJalF1ZXJ5U3ViLmZuLmNvbnN0cnVjdG9yID0galF1ZXJ5U3ViOwotCQlqUXVlcnlTdWIuc3ViID0gdGhpcy5zdWI7Ci0JCWpRdWVyeVN1Yi5mbi5pbml0ID0gZnVuY3Rpb24gaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKSB7Ci0JCQlpZiAoIGNvbnRleHQgJiYgY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSAmJiAhKGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnlTdWIpICkgewotCQkJCWNvbnRleHQgPSBqUXVlcnlTdWIoIGNvbnRleHQgKTsKLQkJCX0KLQotCQkJcmV0dXJuIGpRdWVyeS5mbi5pbml0LmNhbGwoIHRoaXMsIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5U3ViICk7Ci0JCX07Ci0JCWpRdWVyeVN1Yi5mbi5pbml0LnByb3RvdHlwZSA9IGpRdWVyeVN1Yi5mbjsKLQkJdmFyIHJvb3RqUXVlcnlTdWIgPSBqUXVlcnlTdWIoZG9jdW1lbnQpOwotCQlyZXR1cm4galF1ZXJ5U3ViOwotCX0sCi0KLQlicm93c2VyOiB7fQotfSk7Ci0KLS8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcAotalF1ZXJ5LmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QiLnNwbGl0KCIgIiksIGZ1bmN0aW9uKGksIG5hbWUpIHsKLQljbGFzczJ0eXBlWyAiW29iamVjdCAiICsgbmFtZSArICJdIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpOwotfSk7Ci0KLWJyb3dzZXJNYXRjaCA9IGpRdWVyeS51YU1hdGNoKCB1c2VyQWdlbnQgKTsKLWlmICggYnJvd3Nlck1hdGNoLmJyb3dzZXIgKSB7Ci0JalF1ZXJ5LmJyb3dzZXJbIGJyb3dzZXJNYXRjaC5icm93c2VyIF0gPSB0cnVlOwotCWpRdWVyeS5icm93c2VyLnZlcnNpb24gPSBicm93c2VyTWF0Y2gudmVyc2lvbjsKLX0KLQotLy8gRGVwcmVjYXRlZCwgdXNlIGpRdWVyeS5icm93c2VyLndlYmtpdCBpbnN0ZWFkCi1pZiAoIGpRdWVyeS5icm93c2VyLndlYmtpdCApIHsKLQlqUXVlcnkuYnJvd3Nlci5zYWZhcmkgPSB0cnVlOwotfQotCi0vLyBJRSBkb2Vzbid0IG1hdGNoIG5vbi1icmVha2luZyBzcGFjZXMgd2l0aCBccwotaWYgKCBybm90d2hpdGUudGVzdCggIlx4QTAiICkgKSB7Ci0JdHJpbUxlZnQgPSAvXltcc1x4QTBdKy87Ci0JdHJpbVJpZ2h0ID0gL1tcc1x4QTBdKyQvOwotfQotCi0vLyBBbGwgalF1ZXJ5IG9iamVjdHMgc2hvdWxkIHBvaW50IGJhY2sgdG8gdGhlc2UKLXJvb3RqUXVlcnkgPSBqUXVlcnkoZG9jdW1lbnQpOwotCi0vLyBDbGVhbnVwIGZ1bmN0aW9ucyBmb3IgdGhlIGRvY3VtZW50IHJlYWR5IG1ldGhvZAotaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICkgewotCURPTUNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpIHsKLQkJZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBET01Db250ZW50TG9hZGVkLCBmYWxzZSApOwotCQlqUXVlcnkucmVhZHkoKTsKLQl9OwotCi19IGVsc2UgaWYgKCBkb2N1bWVudC5hdHRhY2hFdmVudCApIHsKLQlET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24oKSB7Ci0JCS8vIE1ha2Ugc3VyZSBib2R5IGV4aXN0cywgYXQgbGVhc3QsIGluIGNhc2UgSUUgZ2V0cyBhIGxpdHRsZSBvdmVyemVhbG91cyAodGlja2V0ICM1NDQzKS4KLQkJaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgewotCQkJZG9jdW1lbnQuZGV0YWNoRXZlbnQoICJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBET01Db250ZW50TG9hZGVkICk7Ci0JCQlqUXVlcnkucmVhZHkoKTsKLQkJfQotCX07Ci19Ci0KLS8vIFRoZSBET00gcmVhZHkgY2hlY2sgZm9yIEludGVybmV0IEV4cGxvcmVyCi1mdW5jdGlvbiBkb1Njcm9sbENoZWNrKCkgewotCWlmICggalF1ZXJ5LmlzUmVhZHkgKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQl0cnkgewotCQkvLyBJZiBJRSBpcyB1c2VkLCB1c2UgdGhlIHRyaWNrIGJ5IERpZWdvIFBlcmluaQotCQkvLyBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkLwotCQlkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKTsKLQl9IGNhdGNoKGUpIHsKLQkJc2V0VGltZW91dCggZG9TY3JvbGxDaGVjaywgMSApOwotCQlyZXR1cm47Ci0JfQotCi0JLy8gYW5kIGV4ZWN1dGUgYW55IHdhaXRpbmcgZnVuY3Rpb25zCi0JalF1ZXJ5LnJlYWR5KCk7Ci19Ci0KLXJldHVybiBqUXVlcnk7Ci0KLX0pKCk7Ci0KLQotLy8gU3RyaW5nIHRvIE9iamVjdCBmbGFncyBmb3JtYXQgY2FjaGUKLXZhciBmbGFnc0NhY2hlID0ge307Ci0KLS8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBmbGFncyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lcyBhbmQgc3RvcmUgaW4gY2FjaGUKLWZ1bmN0aW9uIGNyZWF0ZUZsYWdzKCBmbGFncyApIHsKLQl2YXIgb2JqZWN0ID0gZmxhZ3NDYWNoZVsgZmxhZ3MgXSA9IHt9LAotCQlpLCBsZW5ndGg7Ci0JZmxhZ3MgPSBmbGFncy5zcGxpdCggL1xzKy8gKTsKLQlmb3IgKCBpID0gMCwgbGVuZ3RoID0gZmxhZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0JCW9iamVjdFsgZmxhZ3NbaV0gXSA9IHRydWU7Ci0JfQotCXJldHVybiBvYmplY3Q7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKLSAqCi0gKglmbGFnczoJYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgZmxhZ3MgdGhhdCB3aWxsIGNoYW5nZSBob3cKLSAqCQkJdGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcwotICoKLSAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlCi0gKiAiZmlyZWQiIG11bHRpcGxlIHRpbWVzLgotICoKLSAqIFBvc3NpYmxlIGZsYWdzOgotICoKLSAqCW9uY2U6CQkJd2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKQotICoKLSAqCW1lbW9yeToJCQl3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkCi0gKgkJCQkJYWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgIm1lbW9yaXplZCIKLSAqCQkJCQl2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZCkKLSAqCi0gKgl1bmlxdWU6CQkJd2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpCi0gKgotICoJc3RvcE9uRmFsc2U6CWludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZQotICoKLSAqLwotalF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBmbGFncyApIHsKLQotCS8vIENvbnZlcnQgZmxhZ3MgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQKLQkvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpCi0JZmxhZ3MgPSBmbGFncyA/ICggZmxhZ3NDYWNoZVsgZmxhZ3MgXSB8fCBjcmVhdGVGbGFncyggZmxhZ3MgKSApIDoge307Ci0KLQl2YXIgLy8gQWN0dWFsIGNhbGxiYWNrIGxpc3QKLQkJbGlzdCA9IFtdLAotCQkvLyBTdGFjayBvZiBmaXJlIGNhbGxzIGZvciByZXBlYXRhYmxlIGxpc3RzCi0JCXN0YWNrID0gW10sCi0JCS8vIExhc3QgZmlyZSB2YWx1ZSAoZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0cykKLQkJbWVtb3J5LAotCQkvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nCi0JCWZpcmluZywKLQkJLy8gRmlyc3QgY2FsbGJhY2sgdG8gZmlyZSAodXNlZCBpbnRlcm5hbGx5IGJ5IGFkZCBhbmQgZmlyZVdpdGgpCi0JCWZpcmluZ1N0YXJ0LAotCQkvLyBFbmQgb2YgdGhlIGxvb3Agd2hlbiBmaXJpbmcKLQkJZmlyaW5nTGVuZ3RoLAotCQkvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSByZW1vdmUgaWYgbmVlZGVkKQotCQlmaXJpbmdJbmRleCwKLQkJLy8gQWRkIG9uZSBvciBzZXZlcmFsIGNhbGxiYWNrcyB0byB0aGUgbGlzdAotCQlhZGQgPSBmdW5jdGlvbiggYXJncyApIHsKLQkJCXZhciBpLAotCQkJCWxlbmd0aCwKLQkJCQllbGVtLAotCQkJCXR5cGUsCi0JCQkJYWN0dWFsOwotCQkJZm9yICggaSA9IDAsIGxlbmd0aCA9IGFyZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0JCQkJZWxlbSA9IGFyZ3NbIGkgXTsKLQkJCQl0eXBlID0galF1ZXJ5LnR5cGUoIGVsZW0gKTsKLQkJCQlpZiAoIHR5cGUgPT09ICJhcnJheSIgKSB7Ci0JCQkJCS8vIEluc3BlY3QgcmVjdXJzaXZlbHkKLQkJCQkJYWRkKCBlbGVtICk7Ci0JCQkJfSBlbHNlIGlmICggdHlwZSA9PT0gImZ1bmN0aW9uIiApIHsKLQkJCQkJLy8gQWRkIGlmIG5vdCBpbiB1bmlxdWUgbW9kZSBhbmQgY2FsbGJhY2sgaXMgbm90IGluCi0JCQkJCWlmICggIWZsYWdzLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGVsZW0gKSApIHsKLQkJCQkJCWxpc3QucHVzaCggZWxlbSApOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9LAotCQkvLyBGaXJlIGNhbGxiYWNrcwotCQlmaXJlID0gZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7Ci0JCQlhcmdzID0gYXJncyB8fCBbXTsKLQkJCW1lbW9yeSA9ICFmbGFncy5tZW1vcnkgfHwgWyBjb250ZXh0LCBhcmdzIF07Ci0JCQlmaXJpbmcgPSB0cnVlOwotCQkJZmlyaW5nSW5kZXggPSBmaXJpbmdTdGFydCB8fCAwOwotCQkJZmlyaW5nU3RhcnQgPSAwOwotCQkJZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7Ci0JCQlmb3IgKCA7IGxpc3QgJiYgZmlyaW5nSW5kZXggPCBmaXJpbmdMZW5ndGg7IGZpcmluZ0luZGV4KysgKSB7Ci0JCQkJaWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBjb250ZXh0LCBhcmdzICkgPT09IGZhbHNlICYmIGZsYWdzLnN0b3BPbkZhbHNlICkgewotCQkJCQltZW1vcnkgPSB0cnVlOyAvLyBNYXJrIGFzIGhhbHRlZAotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlmaXJpbmcgPSBmYWxzZTsKLQkJCWlmICggbGlzdCApIHsKLQkJCQlpZiAoICFmbGFncy5vbmNlICkgewotCQkJCQlpZiAoIHN0YWNrICYmIHN0YWNrLmxlbmd0aCApIHsKLQkJCQkJCW1lbW9yeSA9IHN0YWNrLnNoaWZ0KCk7Ci0JCQkJCQlzZWxmLmZpcmVXaXRoKCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKTsKLQkJCQkJfQotCQkJCX0gZWxzZSBpZiAoIG1lbW9yeSA9PT0gdHJ1ZSApIHsKLQkJCQkJc2VsZi5kaXNhYmxlKCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbGlzdCA9IFtdOwotCQkJCX0KLQkJCX0KLQkJfSwKLQkJLy8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3QKLQkJc2VsZiA9IHsKLQkJCS8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3QKLQkJCWFkZDogZnVuY3Rpb24oKSB7Ci0JCQkJaWYgKCBsaXN0ICkgewotCQkJCQl2YXIgbGVuZ3RoID0gbGlzdC5sZW5ndGg7Ci0JCQkJCWFkZCggYXJndW1lbnRzICk7Ci0JCQkJCS8vIERvIHdlIG5lZWQgdG8gYWRkIHRoZSBjYWxsYmFja3MgdG8gdGhlCi0JCQkJCS8vIGN1cnJlbnQgZmlyaW5nIGJhdGNoPwotCQkJCQlpZiAoIGZpcmluZyApIHsKLQkJCQkJCWZpcmluZ0xlbmd0aCA9IGxpc3QubGVuZ3RoOwotCQkJCQkvLyBXaXRoIG1lbW9yeSwgaWYgd2UncmUgbm90IGZpcmluZyB0aGVuCi0JCQkJCS8vIHdlIHNob3VsZCBjYWxsIHJpZ2h0IGF3YXksIHVubGVzcyBwcmV2aW91cwotCQkJCQkvLyBmaXJpbmcgd2FzIGhhbHRlZCAoc3RvcE9uRmFsc2UpCi0JCQkJCX0gZWxzZSBpZiAoIG1lbW9yeSAmJiBtZW1vcnkgIT09IHRydWUgKSB7Ci0JCQkJCQlmaXJpbmdTdGFydCA9IGxlbmd0aDsKLQkJCQkJCWZpcmUoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApOwotCQkJCQl9Ci0JCQkJfQotCQkJCXJldHVybiB0aGlzOwotCQkJfSwKLQkJCS8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3QKLQkJCXJlbW92ZTogZnVuY3Rpb24oKSB7Ci0JCQkJaWYgKCBsaXN0ICkgewotCQkJCQl2YXIgYXJncyA9IGFyZ3VtZW50cywKLQkJCQkJCWFyZ0luZGV4ID0gMCwKLQkJCQkJCWFyZ0xlbmd0aCA9IGFyZ3MubGVuZ3RoOwotCQkJCQlmb3IgKCA7IGFyZ0luZGV4IDwgYXJnTGVuZ3RoIDsgYXJnSW5kZXgrKyApIHsKLQkJCQkJCWZvciAoIHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKysgKSB7Ci0JCQkJCQkJaWYgKCBhcmdzWyBhcmdJbmRleCBdID09PSBsaXN0WyBpIF0gKSB7Ci0JCQkJCQkJCS8vIEhhbmRsZSBmaXJpbmdJbmRleCBhbmQgZmlyaW5nTGVuZ3RoCi0JCQkJCQkJCWlmICggZmlyaW5nICkgewotCQkJCQkJCQkJaWYgKCBpIDw9IGZpcmluZ0xlbmd0aCApIHsKLQkJCQkJCQkJCQlmaXJpbmdMZW5ndGgtLTsKLQkJCQkJCQkJCQlpZiAoIGkgPD0gZmlyaW5nSW5kZXggKSB7Ci0JCQkJCQkJCQkJCWZpcmluZ0luZGV4LS07Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJfQotCQkJCQkJCQl9Ci0JCQkJCQkJCS8vIFJlbW92ZSB0aGUgZWxlbWVudAotCQkJCQkJCQlsaXN0LnNwbGljZSggaS0tLCAxICk7Ci0JCQkJCQkJCS8vIElmIHdlIGhhdmUgc29tZSB1bmljaXR5IHByb3BlcnR5IHRoZW4KLQkJCQkJCQkJLy8gd2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgb25jZQotCQkJCQkJCQlpZiAoIGZsYWdzLnVuaXF1ZSApIHsKLQkJCQkJCQkJCWJyZWFrOwotCQkJCQkJCQl9Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJCXJldHVybiB0aGlzOwotCQkJfSwKLQkJCS8vIENvbnRyb2wgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdAotCQkJaGFzOiBmdW5jdGlvbiggZm4gKSB7Ci0JCQkJaWYgKCBsaXN0ICkgewotCQkJCQl2YXIgaSA9IDAsCi0JCQkJCQlsZW5ndGggPSBsaXN0Lmxlbmd0aDsKLQkJCQkJZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0JCQkJCQlpZiAoIGZuID09PSBsaXN0WyBpIF0gKSB7Ci0JCQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfSwKLQkJCS8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3QKLQkJCWVtcHR5OiBmdW5jdGlvbigpIHsKLQkJCQlsaXN0ID0gW107Ci0JCQkJcmV0dXJuIHRoaXM7Ci0JCQl9LAotCQkJLy8gSGF2ZSB0aGUgbGlzdCBkbyBub3RoaW5nIGFueW1vcmUKLQkJCWRpc2FibGU6IGZ1bmN0aW9uKCkgewotCQkJCWxpc3QgPSBzdGFjayA9IG1lbW9yeSA9IHVuZGVmaW5lZDsKLQkJCQlyZXR1cm4gdGhpczsKLQkJCX0sCi0JCQkvLyBJcyBpdCBkaXNhYmxlZD8KLQkJCWRpc2FibGVkOiBmdW5jdGlvbigpIHsKLQkJCQlyZXR1cm4gIWxpc3Q7Ci0JCQl9LAotCQkJLy8gTG9jayB0aGUgbGlzdCBpbiBpdHMgY3VycmVudCBzdGF0ZQotCQkJbG9jazogZnVuY3Rpb24oKSB7Ci0JCQkJc3RhY2sgPSB1bmRlZmluZWQ7Ci0JCQkJaWYgKCAhbWVtb3J5IHx8IG1lbW9yeSA9PT0gdHJ1ZSApIHsKLQkJCQkJc2VsZi5kaXNhYmxlKCk7Ci0JCQkJfQotCQkJCXJldHVybiB0aGlzOwotCQkJfSwKLQkJCS8vIElzIGl0IGxvY2tlZD8KLQkJCWxvY2tlZDogZnVuY3Rpb24oKSB7Ci0JCQkJcmV0dXJuICFzdGFjazsKLQkJCX0sCi0JCQkvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzCi0JCQlmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7Ci0JCQkJaWYgKCBzdGFjayApIHsKLQkJCQkJaWYgKCBmaXJpbmcgKSB7Ci0JCQkJCQlpZiAoICFmbGFncy5vbmNlICkgewotCQkJCQkJCXN0YWNrLnB1c2goIFsgY29udGV4dCwgYXJncyBdICk7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSBpZiAoICEoIGZsYWdzLm9uY2UgJiYgbWVtb3J5ICkgKSB7Ci0JCQkJCQlmaXJlKCBjb250ZXh0LCBhcmdzICk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcmV0dXJuIHRoaXM7Ci0JCQl9LAotCQkJLy8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMKLQkJCWZpcmU6IGZ1bmN0aW9uKCkgewotCQkJCXNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApOwotCQkJCXJldHVybiB0aGlzOwotCQkJfSwKLQkJCS8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZQotCQkJZmlyZWQ6IGZ1bmN0aW9uKCkgewotCQkJCXJldHVybiAhIW1lbW9yeTsKLQkJCX0KLQkJfTsKLQotCXJldHVybiBzZWxmOwotfTsKLQotCi0KLQotdmFyIC8vIFN0YXRpYyByZWZlcmVuY2UgdG8gc2xpY2UKLQlzbGljZURlZmVycmVkID0gW10uc2xpY2U7Ci0KLWpRdWVyeS5leHRlbmQoewotCi0JRGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkgewotCQl2YXIgZG9uZUxpc3QgPSBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksCi0JCQlmYWlsTGlzdCA9IGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwKLQkJCXByb2dyZXNzTGlzdCA9IGpRdWVyeS5DYWxsYmFja3MoICJtZW1vcnkiICksCi0JCQlzdGF0ZSA9ICJwZW5kaW5nIiwKLQkJCWxpc3RzID0gewotCQkJCXJlc29sdmU6IGRvbmVMaXN0LAotCQkJCXJlamVjdDogZmFpbExpc3QsCi0JCQkJbm90aWZ5OiBwcm9ncmVzc0xpc3QKLQkJCX0sCi0JCQlwcm9taXNlID0gewotCQkJCWRvbmU6IGRvbmVMaXN0LmFkZCwKLQkJCQlmYWlsOiBmYWlsTGlzdC5hZGQsCi0JCQkJcHJvZ3Jlc3M6IHByb2dyZXNzTGlzdC5hZGQsCi0KLQkJCQlzdGF0ZTogZnVuY3Rpb24oKSB7Ci0JCQkJCXJldHVybiBzdGF0ZTsKLQkJCQl9LAotCi0JCQkJLy8gRGVwcmVjYXRlZAotCQkJCWlzUmVzb2x2ZWQ6IGRvbmVMaXN0LmZpcmVkLAotCQkJCWlzUmVqZWN0ZWQ6IGZhaWxMaXN0LmZpcmVkLAotCi0JCQkJdGhlbjogZnVuY3Rpb24oIGRvbmVDYWxsYmFja3MsIGZhaWxDYWxsYmFja3MsIHByb2dyZXNzQ2FsbGJhY2tzICkgewotCQkJCQlkZWZlcnJlZC5kb25lKCBkb25lQ2FsbGJhY2tzICkuZmFpbCggZmFpbENhbGxiYWNrcyApLnByb2dyZXNzKCBwcm9ncmVzc0NhbGxiYWNrcyApOwotCQkJCQlyZXR1cm4gdGhpczsKLQkJCQl9LAotCQkJCWFsd2F5czogZnVuY3Rpb24oKSB7Ci0JCQkJCWRlZmVycmVkLmRvbmUuYXBwbHkoIGRlZmVycmVkLCBhcmd1bWVudHMgKS5mYWlsLmFwcGx5KCBkZWZlcnJlZCwgYXJndW1lbnRzICk7Ci0JCQkJCXJldHVybiB0aGlzOwotCQkJCX0sCi0JCQkJcGlwZTogZnVuY3Rpb24oIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICkgewotCQkJCQlyZXR1cm4galF1ZXJ5LkRlZmVycmVkKGZ1bmN0aW9uKCBuZXdEZWZlciApIHsKLQkJCQkJCWpRdWVyeS5lYWNoKCB7Ci0JCQkJCQkJZG9uZTogWyBmbkRvbmUsICJyZXNvbHZlIiBdLAotCQkJCQkJCWZhaWw6IFsgZm5GYWlsLCAicmVqZWN0IiBdLAotCQkJCQkJCXByb2dyZXNzOiBbIGZuUHJvZ3Jlc3MsICJub3RpZnkiIF0KLQkJCQkJCX0sIGZ1bmN0aW9uKCBoYW5kbGVyLCBkYXRhICkgewotCQkJCQkJCXZhciBmbiA9IGRhdGFbIDAgXSwKLQkJCQkJCQkJYWN0aW9uID0gZGF0YVsgMSBdLAotCQkJCQkJCQlyZXR1cm5lZDsKLQkJCQkJCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApICkgewotCQkJCQkJCQlkZWZlcnJlZFsgaGFuZGxlciBdKGZ1bmN0aW9uKCkgewotCQkJCQkJCQkJcmV0dXJuZWQgPSBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0JCQkJCQkJCQlpZiAoIHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7Ci0JCQkJCQkJCQkJcmV0dXJuZWQucHJvbWlzZSgpLnRoZW4oIG5ld0RlZmVyLnJlc29sdmUsIG5ld0RlZmVyLnJlamVjdCwgbmV3RGVmZXIubm90aWZ5ICk7Ci0JCQkJCQkJCQl9IGVsc2UgewotCQkJCQkJCQkJCW5ld0RlZmVyWyBhY3Rpb24gKyAiV2l0aCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyBuZXdEZWZlciA6IHRoaXMsIFsgcmV0dXJuZWQgXSApOwotCQkJCQkJCQkJfQotCQkJCQkJCQl9KTsKLQkJCQkJCQl9IGVsc2UgewotCQkJCQkJCQlkZWZlcnJlZFsgaGFuZGxlciBdKCBuZXdEZWZlclsgYWN0aW9uIF0gKTsKLQkJCQkJCQl9Ci0JCQkJCQl9KTsKLQkJCQkJfSkucHJvbWlzZSgpOwotCQkJCX0sCi0JCQkJLy8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZAotCQkJCS8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3QKLQkJCQlwcm9taXNlOiBmdW5jdGlvbiggb2JqICkgewotCQkJCQlpZiAoIG9iaiA9PSBudWxsICkgewotCQkJCQkJb2JqID0gcHJvbWlzZTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWZvciAoIHZhciBrZXkgaW4gcHJvbWlzZSApIHsKLQkJCQkJCQlvYmpbIGtleSBdID0gcHJvbWlzZVsga2V5IF07Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJcmV0dXJuIG9iajsKLQkJCQl9Ci0JCQl9LAotCQkJZGVmZXJyZWQgPSBwcm9taXNlLnByb21pc2Uoe30pLAotCQkJa2V5OwotCi0JCWZvciAoIGtleSBpbiBsaXN0cyApIHsKLQkJCWRlZmVycmVkWyBrZXkgXSA9IGxpc3RzWyBrZXkgXS5maXJlOwotCQkJZGVmZXJyZWRbIGtleSArICJXaXRoIiBdID0gbGlzdHNbIGtleSBdLmZpcmVXaXRoOwotCQl9Ci0KLQkJLy8gSGFuZGxlIHN0YXRlCi0JCWRlZmVycmVkLmRvbmUoIGZ1bmN0aW9uKCkgewotCQkJc3RhdGUgPSAicmVzb2x2ZWQiOwotCQl9LCBmYWlsTGlzdC5kaXNhYmxlLCBwcm9ncmVzc0xpc3QubG9jayApLmZhaWwoIGZ1bmN0aW9uKCkgewotCQkJc3RhdGUgPSAicmVqZWN0ZWQiOwotCQl9LCBkb25lTGlzdC5kaXNhYmxlLCBwcm9ncmVzc0xpc3QubG9jayApOwotCi0JCS8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnkKLQkJaWYgKCBmdW5jICkgewotCQkJZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTsKLQkJfQotCi0JCS8vIEFsbCBkb25lIQotCQlyZXR1cm4gZGVmZXJyZWQ7Ci0JfSwKLQotCS8vIERlZmVycmVkIGhlbHBlcgotCXdoZW46IGZ1bmN0aW9uKCBmaXJzdFBhcmFtICkgewotCQl2YXIgYXJncyA9IHNsaWNlRGVmZXJyZWQuY2FsbCggYXJndW1lbnRzLCAwICksCi0JCQlpID0gMCwKLQkJCWxlbmd0aCA9IGFyZ3MubGVuZ3RoLAotCQkJcFZhbHVlcyA9IG5ldyBBcnJheSggbGVuZ3RoICksCi0JCQljb3VudCA9IGxlbmd0aCwKLQkJCXBDb3VudCA9IGxlbmd0aCwKLQkJCWRlZmVycmVkID0gbGVuZ3RoIDw9IDEgJiYgZmlyc3RQYXJhbSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggZmlyc3RQYXJhbS5wcm9taXNlICkgPwotCQkJCWZpcnN0UGFyYW0gOgotCQkJCWpRdWVyeS5EZWZlcnJlZCgpLAotCQkJcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2UoKTsKLQkJZnVuY3Rpb24gcmVzb2x2ZUZ1bmMoIGkgKSB7Ci0JCQlyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkgewotCQkJCWFyZ3NbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2VEZWZlcnJlZC5jYWxsKCBhcmd1bWVudHMsIDAgKSA6IHZhbHVlOwotCQkJCWlmICggISggLS1jb3VudCApICkgewotCQkJCQlkZWZlcnJlZC5yZXNvbHZlV2l0aCggZGVmZXJyZWQsIGFyZ3MgKTsKLQkJCQl9Ci0JCQl9OwotCQl9Ci0JCWZ1bmN0aW9uIHByb2dyZXNzRnVuYyggaSApIHsKLQkJCXJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0JCQkJcFZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZURlZmVycmVkLmNhbGwoIGFyZ3VtZW50cywgMCApIDogdmFsdWU7Ci0JCQkJZGVmZXJyZWQubm90aWZ5V2l0aCggcHJvbWlzZSwgcFZhbHVlcyApOwotCQkJfTsKLQkJfQotCQlpZiAoIGxlbmd0aCA+IDEgKSB7Ci0JCQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKLQkJCQlpZiAoIGFyZ3NbIGkgXSAmJiBhcmdzWyBpIF0ucHJvbWlzZSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggYXJnc1sgaSBdLnByb21pc2UgKSApIHsKLQkJCQkJYXJnc1sgaSBdLnByb21pc2UoKS50aGVuKCByZXNvbHZlRnVuYyhpKSwgZGVmZXJyZWQucmVqZWN0LCBwcm9ncmVzc0Z1bmMoaSkgKTsKLQkJCQl9IGVsc2UgewotCQkJCQktLWNvdW50OwotCQkJCX0KLQkJCX0KLQkJCWlmICggIWNvdW50ICkgewotCQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBkZWZlcnJlZCwgYXJncyApOwotCQkJfQotCQl9IGVsc2UgaWYgKCBkZWZlcnJlZCAhPT0gZmlyc3RQYXJhbSApIHsKLQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBkZWZlcnJlZCwgbGVuZ3RoID8gWyBmaXJzdFBhcmFtIF0gOiBbXSApOwotCQl9Ci0JCXJldHVybiBwcm9taXNlOwotCX0KLX0pOwotCi0KLQotCi1qUXVlcnkuc3VwcG9ydCA9IChmdW5jdGlvbigpIHsKLQotCXZhciBzdXBwb3J0LAotCQlhbGwsCi0JCWEsCi0JCXNlbGVjdCwKLQkJb3B0LAotCQlpbnB1dCwKLQkJbWFyZ2luRGl2LAotCQlmcmFnbWVudCwKLQkJdGRzLAotCQlldmVudHMsCi0JCWV2ZW50TmFtZSwKLQkJaSwKLQkJaXNTdXBwb3J0ZWQsCi0JCWRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICksCi0JCWRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKLQotCS8vIFByZWxpbWluYXJ5IHRlc3RzCi0JZGl2LnNldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIiwgInQiKTsKLQlkaXYuaW5uZXJIVE1MID0gIiAgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYScgc3R5bGU9J3RvcDoxcHg7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41NTsnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IjsKLQotCWFsbCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggIioiICk7Ci0JYSA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggImEiIClbIDAgXTsKLQotCS8vIENhbid0IGdldCBiYXNpYyB0ZXN0IHN1cHBvcnQKLQlpZiAoICFhbGwgfHwgIWFsbC5sZW5ndGggfHwgIWEgKSB7Ci0JCXJldHVybiB7fTsKLQl9Ci0KLQkvLyBGaXJzdCBiYXRjaCBvZiBzdXBwb3J0cyB0ZXN0cwotCXNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJzZWxlY3QiICk7Ci0Jb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSApOwotCWlucHV0ID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiaW5wdXQiIClbIDAgXTsKLQotCXN1cHBvcnQgPSB7Ci0JCS8vIElFIHN0cmlwcyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiAuaW5uZXJIVE1MIGlzIHVzZWQKLQkJbGVhZGluZ1doaXRlc3BhY2U6ICggZGl2LmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDMgKSwKLQotCQkvLyBNYWtlIHN1cmUgdGhhdCB0Ym9keSBlbGVtZW50cyBhcmVuJ3QgYXV0b21hdGljYWxseSBpbnNlcnRlZAotCQkvLyBJRSB3aWxsIGluc2VydCB0aGVtIGludG8gZW1wdHkgdGFibGVzCi0JCXRib2R5OiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCwKLQotCQkvLyBNYWtlIHN1cmUgdGhhdCBsaW5rIGVsZW1lbnRzIGdldCBzZXJpYWxpemVkIGNvcnJlY3RseSBieSBpbm5lckhUTUwKLQkJLy8gVGhpcyByZXF1aXJlcyBhIHdyYXBwZXIgZWxlbWVudCBpbiBJRQotCQlodG1sU2VyaWFsaXplOiAhIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCwKLQotCQkvLyBHZXQgdGhlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20gZ2V0QXR0cmlidXRlCi0JCS8vIChJRSB1c2VzIC5jc3NUZXh0IGluc3RlYWQpCi0JCXN0eWxlOiAvdG9wLy50ZXN0KCBhLmdldEF0dHJpYnV0ZSgic3R5bGUiKSApLAotCi0JCS8vIE1ha2Ugc3VyZSB0aGF0IFVSTHMgYXJlbid0IG1hbmlwdWxhdGVkCi0JCS8vIChJRSBub3JtYWxpemVzIGl0IGJ5IGRlZmF1bHQpCi0JCWhyZWZOb3JtYWxpemVkOiAoIGEuZ2V0QXR0cmlidXRlKCJocmVmIikgPT09ICIvYSIgKSwKLQotCQkvLyBNYWtlIHN1cmUgdGhhdCBlbGVtZW50IG9wYWNpdHkgZXhpc3RzCi0JCS8vIChJRSB1c2VzIGZpbHRlciBpbnN0ZWFkKQotCQkvLyBVc2UgYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIFdlYktpdCBpc3N1ZS4gU2VlICM1MTQ1Ci0JCW9wYWNpdHk6IC9eMC41NS8udGVzdCggYS5zdHlsZS5vcGFjaXR5ICksCi0KLQkJLy8gVmVyaWZ5IHN0eWxlIGZsb2F0IGV4aXN0ZW5jZQotCQkvLyAoSUUgdXNlcyBzdHlsZUZsb2F0IGluc3RlYWQgb2YgY3NzRmxvYXQpCi0JCWNzc0Zsb2F0OiAhIWEuc3R5bGUuY3NzRmxvYXQsCi0KLQkJLy8gTWFrZSBzdXJlIHRoYXQgaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkIGZvciBhIGNoZWNrYm94Ci0JCS8vIHRoYXQgaXQgZGVmYXVsdHMgdG8gIm9uIi4KLQkJLy8gKFdlYktpdCBkZWZhdWx0cyB0byAiIiBpbnN0ZWFkKQotCQljaGVja09uOiAoIGlucHV0LnZhbHVlID09PSAib24iICksCi0KLQkJLy8gTWFrZSBzdXJlIHRoYXQgYSBzZWxlY3RlZC1ieS1kZWZhdWx0IG9wdGlvbiBoYXMgYSB3b3JraW5nIHNlbGVjdGVkIHByb3BlcnR5LgotCQkvLyAoV2ViS2l0IGRlZmF1bHRzIHRvIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZSwgSUUgdG9vLCBpZiBpdCdzIGluIGFuIG9wdGdyb3VwKQotCQlvcHRTZWxlY3RlZDogb3B0LnNlbGVjdGVkLAotCi0JCS8vIFRlc3Qgc2V0QXR0cmlidXRlIG9uIGNhbWVsQ2FzZSBjbGFzcy4gSWYgaXQgd29ya3MsIHdlIG5lZWQgYXR0ckZpeGVzIHdoZW4gZG9pbmcgZ2V0L3NldEF0dHJpYnV0ZSAoaWU2LzcpCi0JCWdldFNldEF0dHJpYnV0ZTogZGl2LmNsYXNzTmFtZSAhPT0gInQiLAotCi0JCS8vIFRlc3RzIGZvciBlbmN0eXBlIHN1cHBvcnQgb24gYSBmb3JtKCM2NzQzKQotCQllbmN0eXBlOiAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLAotCi0JCS8vIE1ha2VzIHN1cmUgY2xvbmluZyBhbiBodG1sNSBlbGVtZW50IGRvZXMgbm90IGNhdXNlIHByb2JsZW1zCi0JCS8vIFdoZXJlIG91dGVySFRNTCBpcyB1bmRlZmluZWQsIHRoaXMgc3RpbGwgd29ya3MKLQkJaHRtbDVDbG9uZTogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCB0cnVlICkub3V0ZXJIVE1MICE9PSAiPDpuYXY+PC86bmF2PiIsCi0KLQkJLy8gV2lsbCBiZSBkZWZpbmVkIGxhdGVyCi0JCXN1Ym1pdEJ1YmJsZXM6IHRydWUsCi0JCWNoYW5nZUJ1YmJsZXM6IHRydWUsCi0JCWZvY3VzaW5CdWJibGVzOiBmYWxzZSwKLQkJZGVsZXRlRXhwYW5kbzogdHJ1ZSwKLQkJbm9DbG9uZUV2ZW50OiB0cnVlLAotCQlpbmxpbmVCbG9ja05lZWRzTGF5b3V0OiBmYWxzZSwKLQkJc2hyaW5rV3JhcEJsb2NrczogZmFsc2UsCi0JCXJlbGlhYmxlTWFyZ2luUmlnaHQ6IHRydWUKLQl9OwotCi0JLy8gTWFrZSBzdXJlIGNoZWNrZWQgc3RhdHVzIGlzIHByb3Blcmx5IGNsb25lZAotCWlucHV0LmNoZWNrZWQgPSB0cnVlOwotCXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSBpbnB1dC5jbG9uZU5vZGUoIHRydWUgKS5jaGVja2VkOwotCi0JLy8gTWFrZSBzdXJlIHRoYXQgdGhlIG9wdGlvbnMgaW5zaWRlIGRpc2FibGVkIHNlbGVjdHMgYXJlbid0IG1hcmtlZCBhcyBkaXNhYmxlZAotCS8vIChXZWJLaXQgbWFya3MgdGhlbSBhcyBkaXNhYmxlZCkKLQlzZWxlY3QuZGlzYWJsZWQgPSB0cnVlOwotCXN1cHBvcnQub3B0RGlzYWJsZWQgPSAhb3B0LmRpc2FibGVkOwotCi0JLy8gVGVzdCB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkZWxldGUgYW4gZXhwYW5kbyBmcm9tIGFuIGVsZW1lbnQKLQkvLyBGYWlscyBpbiBJbnRlcm5ldCBFeHBsb3JlcgotCXRyeSB7Ci0JCWRlbGV0ZSBkaXYudGVzdDsKLQl9IGNhdGNoKCBlICkgewotCQlzdXBwb3J0LmRlbGV0ZUV4cGFuZG8gPSBmYWxzZTsKLQl9Ci0KLQlpZiAoICFkaXYuYWRkRXZlbnRMaXN0ZW5lciAmJiBkaXYuYXR0YWNoRXZlbnQgJiYgZGl2LmZpcmVFdmVudCApIHsKLQkJZGl2LmF0dGFjaEV2ZW50KCAib25jbGljayIsIGZ1bmN0aW9uKCkgewotCQkJLy8gQ2xvbmluZyBhIG5vZGUgc2hvdWxkbid0IGNvcHkgb3ZlciBhbnkKLQkJCS8vIGJvdW5kIGV2ZW50IGhhbmRsZXJzIChJRSBkb2VzIHRoaXMpCi0JCQlzdXBwb3J0Lm5vQ2xvbmVFdmVudCA9IGZhbHNlOwotCQl9KTsKLQkJZGl2LmNsb25lTm9kZSggdHJ1ZSApLmZpcmVFdmVudCggIm9uY2xpY2siICk7Ci0JfQotCi0JLy8gQ2hlY2sgaWYgYSByYWRpbyBtYWludGFpbnMgaXRzIHZhbHVlCi0JLy8gYWZ0ZXIgYmVpbmcgYXBwZW5kZWQgdG8gdGhlIERPTQotCWlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLQlpbnB1dC52YWx1ZSA9ICJ0IjsKLQlpbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAicmFkaW8iKTsKLQlzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gInQiOwotCi0JaW5wdXQuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwgImNoZWNrZWQiKTsKLQlkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7Ci0JZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0JZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRpdi5sYXN0Q2hpbGQgKTsKLQotCS8vIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50cwotCXN1cHBvcnQuY2hlY2tDbG9uZSA9IGZyYWdtZW50LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkOwotCi0JLy8gQ2hlY2sgaWYgYSBkaXNjb25uZWN0ZWQgY2hlY2tib3ggd2lsbCByZXRhaW4gaXRzIGNoZWNrZWQKLQkvLyB2YWx1ZSBvZiB0cnVlIGFmdGVyIGFwcGVuZGVkIHRvIHRoZSBET00gKElFNi83KQotCXN1cHBvcnQuYXBwZW5kQ2hlY2tlZCA9IGlucHV0LmNoZWNrZWQ7Ci0KLQlmcmFnbWVudC5yZW1vdmVDaGlsZCggaW5wdXQgKTsKLQlmcmFnbWVudC5hcHBlbmRDaGlsZCggZGl2ICk7Ci0KLQlkaXYuaW5uZXJIVE1MID0gIiI7Ci0KLQkvLyBDaGVjayBpZiBkaXYgd2l0aCBleHBsaWNpdCB3aWR0aCBhbmQgbm8gbWFyZ2luLXJpZ2h0IGluY29ycmVjdGx5Ci0JLy8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmlnaHQgYmFzZWQgb24gd2lkdGggb2YgY29udGFpbmVyLiBGb3IgbW9yZQotCS8vIGluZm8gc2VlIGJ1ZyAjMzMzMwotCS8vIEZhaWxzIGluIFdlYktpdCBiZWZvcmUgRmViIDIwMTEgbmlnaHRsaWVzCi0JLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0Ci0JaWYgKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSApIHsKLQkJbWFyZ2luRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKTsKLQkJbWFyZ2luRGl2LnN0eWxlLndpZHRoID0gIjAiOwotCQltYXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSAiMCI7Ci0JCWRpdi5zdHlsZS53aWR0aCA9ICIycHgiOwotCQlkaXYuYXBwZW5kQ2hpbGQoIG1hcmdpbkRpdiApOwotCQlzdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQgPQotCQkJKCBwYXJzZUludCggKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2LCBudWxsICkgfHwgeyBtYXJnaW5SaWdodDogMCB9ICkubWFyZ2luUmlnaHQsIDEwICkgfHwgMCApID09PSAwOwotCX0KLQotCS8vIFRlY2huaXF1ZSBmcm9tIEp1cml5IFpheXRzZXYKLQkvLyBodHRwOi8vcGVyZmVjdGlvbmtpbGxzLmNvbS9kZXRlY3RpbmctZXZlbnQtc3VwcG9ydC13aXRob3V0LWJyb3dzZXItc25pZmZpbmcvCi0JLy8gV2Ugb25seSBjYXJlIGFib3V0IHRoZSBjYXNlIHdoZXJlIG5vbi1zdGFuZGFyZCBldmVudCBzeXN0ZW1zCi0JLy8gYXJlIHVzZWQsIG5hbWVseSBpbiBJRS4gU2hvcnQtY2lyY3VpdGluZyBoZXJlIGhlbHBzIHVzIHRvCi0JLy8gYXZvaWQgYW4gZXZhbCBjYWxsIChpbiBzZXRBdHRyaWJ1dGUpIHdoaWNoIGNhbiBjYXVzZSBDU1AKLQkvLyB0byBnbyBoYXl3aXJlLiBTZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL1NlY3VyaXR5L0NTUAotCWlmICggZGl2LmF0dGFjaEV2ZW50ICkgewotCQlmb3IoIGkgaW4gewotCQkJc3VibWl0OiAxLAotCQkJY2hhbmdlOiAxLAotCQkJZm9jdXNpbjogMQotCQl9KSB7Ci0JCQlldmVudE5hbWUgPSAib24iICsgaTsKLQkJCWlzU3VwcG9ydGVkID0gKCBldmVudE5hbWUgaW4gZGl2ICk7Ci0JCQlpZiAoICFpc1N1cHBvcnRlZCApIHsKLQkJCQlkaXYuc2V0QXR0cmlidXRlKCBldmVudE5hbWUsICJyZXR1cm47IiApOwotCQkJCWlzU3VwcG9ydGVkID0gKCB0eXBlb2YgZGl2WyBldmVudE5hbWUgXSA9PT0gImZ1bmN0aW9uIiApOwotCQkJfQotCQkJc3VwcG9ydFsgaSArICJCdWJibGVzIiBdID0gaXNTdXBwb3J0ZWQ7Ci0JCX0KLQl9Ci0KLQlmcmFnbWVudC5yZW1vdmVDaGlsZCggZGl2ICk7Ci0KLQkvLyBOdWxsIGVsZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGluIElFCi0JZnJhZ21lbnQgPSBzZWxlY3QgPSBvcHQgPSBtYXJnaW5EaXYgPSBkaXYgPSBpbnB1dCA9IG51bGw7Ci0KLQkvLyBSdW4gdGVzdHMgdGhhdCBuZWVkIGEgYm9keSBhdCBkb2MgcmVhZHkKLQlqUXVlcnkoZnVuY3Rpb24oKSB7Ci0JCXZhciBjb250YWluZXIsIG91dGVyLCBpbm5lciwgdGFibGUsIHRkLCBvZmZzZXRTdXBwb3J0LAotCQkJY29uTWFyZ2luVG9wLCBwdGxtLCB2Yiwgc3R5bGUsIGh0bWwsCi0JCQlib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTsKLQotCQlpZiAoICFib2R5ICkgewotCQkJLy8gUmV0dXJuIGZvciBmcmFtZXNldCBkb2NzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJvZHkKLQkJCXJldHVybjsKLQkJfQotCi0JCWNvbk1hcmdpblRvcCA9IDE7Ci0JCXB0bG0gPSAicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjFweDtoZWlnaHQ6MXB4O21hcmdpbjowOyI7Ci0JCXZiID0gInZpc2liaWxpdHk6aGlkZGVuO2JvcmRlcjowOyI7Ci0JCXN0eWxlID0gInN0eWxlPSciICsgcHRsbSArICJib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowOyciOwotCQlodG1sID0gIjxkaXYgIiArIHN0eWxlICsgIj48ZGl2PjwvZGl2PjwvZGl2PiIgKwotCQkJIjx0YWJsZSAiICsgc3R5bGUgKyAiIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+IiArCi0JCQkiPHRyPjx0ZD48L3RkPjwvdHI+PC90YWJsZT4iOwotCi0JCWNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotCQljb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IHZiICsgIndpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246c3RhdGljO3RvcDowO21hcmdpbi10b3A6IiArIGNvbk1hcmdpblRvcCArICJweCI7Ci0JCWJvZHkuaW5zZXJ0QmVmb3JlKCBjb250YWluZXIsIGJvZHkuZmlyc3RDaGlsZCApOwotCi0JCS8vIENvbnN0cnVjdCB0aGUgdGVzdCBlbGVtZW50Ci0JCWRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotCQljb250YWluZXIuYXBwZW5kQ2hpbGQoIGRpdiApOwotCi0JCS8vIENoZWNrIGlmIHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUgb2Zmc2V0V2lkdGgvSGVpZ2h0IHdoZW4gdGhleSBhcmUgc2V0Ci0JCS8vIHRvIGRpc3BsYXk6bm9uZSBhbmQgdGhlcmUgYXJlIHN0aWxsIG90aGVyIHZpc2libGUgdGFibGUgY2VsbHMgaW4gYQotCQkvLyB0YWJsZSByb3c7IGlmIHNvLCBvZmZzZXRXaWR0aC9IZWlnaHQgYXJlIG5vdCByZWxpYWJsZSBmb3IgdXNlIHdoZW4KLQkJLy8gZGV0ZXJtaW5pbmcgaWYgYW4gZWxlbWVudCBoYXMgYmVlbiBoaWRkZW4gZGlyZWN0bHkgdXNpbmcKLQkJLy8gZGlzcGxheTpub25lIChpdCBpcyBzdGlsbCBzYWZlIHRvIHVzZSBvZmZzZXRzIGlmIGEgcGFyZW50IGVsZW1lbnQgaXMKLQkJLy8gaGlkZGVuOyBkb24gc2FmZXR5IGdvZ2dsZXMgYW5kIHNlZSBidWcgIzQ1MTIgZm9yIG1vcmUgaW5mb3JtYXRpb24pLgotCQkvLyAob25seSBJRSA4IGZhaWxzIHRoaXMgdGVzdCkKLQkJZGl2LmlubmVySFRNTCA9ICI8dGFibGU+PHRyPjx0ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiI7Ci0JCXRkcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggInRkIiApOwotCQlpc1N1cHBvcnRlZCA9ICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7Ci0KLQkJdGRzWyAwIF0uc3R5bGUuZGlzcGxheSA9ICIiOwotCQl0ZHNbIDEgXS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotCi0JCS8vIENoZWNrIGlmIGVtcHR5IHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUgb2Zmc2V0V2lkdGgvSGVpZ2h0Ci0JCS8vIChJRSA8PSA4IGZhaWwgdGhpcyB0ZXN0KQotCQlzdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyA9IGlzU3VwcG9ydGVkICYmICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7Ci0KLQkJLy8gRmlndXJlIG91dCBpZiB0aGUgVzNDIGJveCBtb2RlbCB3b3JrcyBhcyBleHBlY3RlZAotCQlkaXYuaW5uZXJIVE1MID0gIiI7Ci0JCWRpdi5zdHlsZS53aWR0aCA9IGRpdi5zdHlsZS5wYWRkaW5nTGVmdCA9ICIxcHgiOwotCQlqUXVlcnkuYm94TW9kZWwgPSBzdXBwb3J0LmJveE1vZGVsID0gZGl2Lm9mZnNldFdpZHRoID09PSAyOwotCi0JCWlmICggdHlwZW9mIGRpdi5zdHlsZS56b29tICE9PSAidW5kZWZpbmVkIiApIHsKLQkJCS8vIENoZWNrIGlmIG5hdGl2ZWx5IGJsb2NrLWxldmVsIGVsZW1lbnRzIGFjdCBsaWtlIGlubGluZS1ibG9jawotCQkJLy8gZWxlbWVudHMgd2hlbiBzZXR0aW5nIHRoZWlyIGRpc3BsYXkgdG8gJ2lubGluZScgYW5kIGdpdmluZwotCQkJLy8gdGhlbSBsYXlvdXQKLQkJCS8vIChJRSA8IDggZG9lcyB0aGlzKQotCQkJZGl2LnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsKLQkJCWRpdi5zdHlsZS56b29tID0gMTsKLQkJCXN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCA9ICggZGl2Lm9mZnNldFdpZHRoID09PSAyICk7Ci0KLQkJCS8vIENoZWNrIGlmIGVsZW1lbnRzIHdpdGggbGF5b3V0IHNocmluay13cmFwIHRoZWlyIGNoaWxkcmVuCi0JCQkvLyAoSUUgNiBkb2VzIHRoaXMpCi0JCQlkaXYuc3R5bGUuZGlzcGxheSA9ICIiOwotCQkJZGl2LmlubmVySFRNTCA9ICI8ZGl2IHN0eWxlPSd3aWR0aDo0cHg7Jz48L2Rpdj4iOwotCQkJc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzID0gKCBkaXYub2Zmc2V0V2lkdGggIT09IDIgKTsKLQkJfQotCi0JCWRpdi5zdHlsZS5jc3NUZXh0ID0gcHRsbSArIHZiOwotCQlkaXYuaW5uZXJIVE1MID0gaHRtbDsKLQotCQlvdXRlciA9IGRpdi5maXJzdENoaWxkOwotCQlpbm5lciA9IG91dGVyLmZpcnN0Q2hpbGQ7Ci0JCXRkID0gb3V0ZXIubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5maXJzdENoaWxkOwotCi0JCW9mZnNldFN1cHBvcnQgPSB7Ci0JCQlkb2VzTm90QWRkQm9yZGVyOiAoIGlubmVyLm9mZnNldFRvcCAhPT0gNSApLAotCQkJZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHM6ICggdGQub2Zmc2V0VG9wID09PSA1ICkKLQkJfTsKLQotCQlpbm5lci5zdHlsZS5wb3NpdGlvbiA9ICJmaXhlZCI7Ci0JCWlubmVyLnN0eWxlLnRvcCA9ICIyMHB4IjsKLQotCQkvLyBzYWZhcmkgc3VidHJhY3RzIHBhcmVudCBib3JkZXIgd2lkdGggaGVyZSB3aGljaCBpcyA1cHgKLQkJb2Zmc2V0U3VwcG9ydC5maXhlZFBvc2l0aW9uID0gKCBpbm5lci5vZmZzZXRUb3AgPT09IDIwIHx8IGlubmVyLm9mZnNldFRvcCA9PT0gMTUgKTsKLQkJaW5uZXIuc3R5bGUucG9zaXRpb24gPSBpbm5lci5zdHlsZS50b3AgPSAiIjsKLQotCQlvdXRlci5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwotCQlvdXRlci5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7Ci0KLQkJb2Zmc2V0U3VwcG9ydC5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGUgPSAoIGlubmVyLm9mZnNldFRvcCA9PT0gLTUgKTsKLQkJb2Zmc2V0U3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCA9ICggYm9keS5vZmZzZXRUb3AgIT09IGNvbk1hcmdpblRvcCApOwotCi0JCWJvZHkucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApOwotCQlkaXYgID0gY29udGFpbmVyID0gbnVsbDsKLQotCQlqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCBvZmZzZXRTdXBwb3J0ICk7Ci0JfSk7Ci0KLQlyZXR1cm4gc3VwcG9ydDsKLX0pKCk7Ci0KLQotCi0KLXZhciByYnJhY2UgPSAvXig/Olx7LipcfXxcWy4qXF0pJC8sCi0Jcm11bHRpRGFzaCA9IC8oW0EtWl0pL2c7Ci0KLWpRdWVyeS5leHRlbmQoewotCWNhY2hlOiB7fSwKLQotCS8vIFBsZWFzZSB1c2Ugd2l0aCBjYXV0aW9uCi0JdXVpZDogMCwKLQotCS8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZQotCS8vIE5vbi1kaWdpdHMgcmVtb3ZlZCB0byBtYXRjaCByaW5saW5lalF1ZXJ5Ci0JZXhwYW5kbzogImpRdWVyeSIgKyAoIGpRdWVyeS5mbi5qcXVlcnkgKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xEL2csICIiICksCi0KLQkvLyBUaGUgZm9sbG93aW5nIGVsZW1lbnRzIHRocm93IHVuY2F0Y2hhYmxlIGV4Y2VwdGlvbnMgaWYgeW91Ci0JLy8gYXR0ZW1wdCB0byBhZGQgZXhwYW5kbyBwcm9wZXJ0aWVzIHRvIHRoZW0uCi0Jbm9EYXRhOiB7Ci0JCSJlbWJlZCI6IHRydWUsCi0JCS8vIEJhbiBhbGwgb2JqZWN0cyBleGNlcHQgZm9yIEZsYXNoICh3aGljaCBoYW5kbGUgZXhwYW5kb3MpCi0JCSJvYmplY3QiOiAiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIiwKLQkJImFwcGxldCI6IHRydWUKLQl9LAotCi0JaGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCWVsZW0gPSBlbGVtLm5vZGVUeXBlID8galF1ZXJ5LmNhY2hlWyBlbGVtW2pRdWVyeS5leHBhbmRvXSBdIDogZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXTsKLQkJcmV0dXJuICEhZWxlbSAmJiAhaXNFbXB0eURhdGFPYmplY3QoIGVsZW0gKTsKLQl9LAotCi0JZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEsIHB2dCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKLQkJaWYgKCAhalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCXZhciBwcml2YXRlQ2FjaGUsIHRoaXNDYWNoZSwgcmV0LAotCQkJaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKLQkJCWdldEJ5TmFtZSA9IHR5cGVvZiBuYW1lID09PSAic3RyaW5nIiwKLQotCQkJLy8gV2UgaGF2ZSB0byBoYW5kbGUgRE9NIG5vZGVzIGFuZCBKUyBvYmplY3RzIGRpZmZlcmVudGx5IGJlY2F1c2UgSUU2LTcKLQkJCS8vIGNhbid0IEdDIG9iamVjdCByZWZlcmVuY2VzIHByb3Blcmx5IGFjcm9zcyB0aGUgRE9NLUpTIGJvdW5kYXJ5Ci0JCQlpc05vZGUgPSBlbGVtLm5vZGVUeXBlLAotCi0JCQkvLyBPbmx5IERPTSBub2RlcyBuZWVkIHRoZSBnbG9iYWwgalF1ZXJ5IGNhY2hlOyBKUyBvYmplY3QgZGF0YSBpcwotCQkJLy8gYXR0YWNoZWQgZGlyZWN0bHkgdG8gdGhlIG9iamVjdCBzbyBHQyBjYW4gb2NjdXIgYXV0b21hdGljYWxseQotCQkJY2FjaGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAotCi0JCQkvLyBPbmx5IGRlZmluaW5nIGFuIElEIGZvciBKUyBvYmplY3RzIGlmIGl0cyBjYWNoZSBhbHJlYWR5IGV4aXN0cyBhbGxvd3MKLQkJCS8vIHRoZSBjb2RlIHRvIHNob3J0Y3V0IG9uIHRoZSBzYW1lIHBhdGggYXMgYSBET00gbm9kZSB3aXRoIG5vIGNhY2hlCi0JCQlpZCA9IGlzTm9kZSA/IGVsZW1bIGludGVybmFsS2V5IF0gOiBlbGVtWyBpbnRlcm5hbEtleSBdICYmIGludGVybmFsS2V5LAotCQkJaXNFdmVudHMgPSBuYW1lID09PSAiZXZlbnRzIjsKLQotCQkvLyBBdm9pZCBkb2luZyBhbnkgbW9yZSB3b3JrIHRoYW4gd2UgbmVlZCB0byB3aGVuIHRyeWluZyB0byBnZXQgZGF0YSBvbiBhbgotCQkvLyBvYmplY3QgdGhhdCBoYXMgbm8gZGF0YSBhdCBhbGwKLQkJaWYgKCAoIWlkIHx8ICFjYWNoZVtpZF0gfHwgKCFpc0V2ZW50cyAmJiAhcHZ0ICYmICFjYWNoZVtpZF0uZGF0YSkpICYmIGdldEJ5TmFtZSAmJiBkYXRhID09PSB1bmRlZmluZWQgKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlpZiAoICFpZCApIHsKLQkJCS8vIE9ubHkgRE9NIG5vZGVzIG5lZWQgYSBuZXcgdW5pcXVlIElEIGZvciBlYWNoIGVsZW1lbnQgc2luY2UgdGhlaXIgZGF0YQotCQkJLy8gZW5kcyB1cCBpbiB0aGUgZ2xvYmFsIGNhY2hlCi0JCQlpZiAoIGlzTm9kZSApIHsKLQkJCQllbGVtWyBpbnRlcm5hbEtleSBdID0gaWQgPSArK2pRdWVyeS51dWlkOwotCQkJfSBlbHNlIHsKLQkJCQlpZCA9IGludGVybmFsS2V5OwotCQkJfQotCQl9Ci0KLQkJaWYgKCAhY2FjaGVbIGlkIF0gKSB7Ci0JCQljYWNoZVsgaWQgXSA9IHt9OwotCi0JCQkvLyBBdm9pZHMgZXhwb3NpbmcgalF1ZXJ5IG1ldGFkYXRhIG9uIHBsYWluIEpTIG9iamVjdHMgd2hlbiB0aGUgb2JqZWN0Ci0JCQkvLyBpcyBzZXJpYWxpemVkIHVzaW5nIEpTT04uc3RyaW5naWZ5Ci0JCQlpZiAoICFpc05vZGUgKSB7Ci0JCQkJY2FjaGVbIGlkIF0udG9KU09OID0galF1ZXJ5Lm5vb3A7Ci0JCQl9Ci0JCX0KLQotCQkvLyBBbiBvYmplY3QgY2FuIGJlIHBhc3NlZCB0byBqUXVlcnkuZGF0YSBpbnN0ZWFkIG9mIGEga2V5L3ZhbHVlIHBhaXI7IHRoaXMgZ2V0cwotCQkvLyBzaGFsbG93IGNvcGllZCBvdmVyIG9udG8gdGhlIGV4aXN0aW5nIGNhY2hlCi0JCWlmICggdHlwZW9mIG5hbWUgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBuYW1lID09PSAiZnVuY3Rpb24iICkgewotCQkJaWYgKCBwdnQgKSB7Ci0JCQkJY2FjaGVbIGlkIF0gPSBqUXVlcnkuZXh0ZW5kKCBjYWNoZVsgaWQgXSwgbmFtZSApOwotCQkJfSBlbHNlIHsKLQkJCQljYWNoZVsgaWQgXS5kYXRhID0galF1ZXJ5LmV4dGVuZCggY2FjaGVbIGlkIF0uZGF0YSwgbmFtZSApOwotCQkJfQotCQl9Ci0KLQkJcHJpdmF0ZUNhY2hlID0gdGhpc0NhY2hlID0gY2FjaGVbIGlkIF07Ci0KLQkJLy8galF1ZXJ5IGRhdGEoKSBpcyBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBvYmplY3QgaW5zaWRlIHRoZSBvYmplY3QncyBpbnRlcm5hbCBkYXRhCi0JCS8vIGNhY2hlIGluIG9yZGVyIHRvIGF2b2lkIGtleSBjb2xsaXNpb25zIGJldHdlZW4gaW50ZXJuYWwgZGF0YSBhbmQgdXNlci1kZWZpbmVkCi0JCS8vIGRhdGEuCi0JCWlmICggIXB2dCApIHsKLQkJCWlmICggIXRoaXNDYWNoZS5kYXRhICkgewotCQkJCXRoaXNDYWNoZS5kYXRhID0ge307Ci0JCQl9Ci0KLQkJCXRoaXNDYWNoZSA9IHRoaXNDYWNoZS5kYXRhOwotCQl9Ci0KLQkJaWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7Ci0JCQl0aGlzQ2FjaGVbIGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSBdID0gZGF0YTsKLQkJfQotCi0JCS8vIFVzZXJzIHNob3VsZCBub3QgYXR0ZW1wdCB0byBpbnNwZWN0IHRoZSBpbnRlcm5hbCBldmVudHMgb2JqZWN0IHVzaW5nIGpRdWVyeS5kYXRhLAotCQkvLyBpdCBpcyB1bmRvY3VtZW50ZWQgYW5kIHN1YmplY3QgdG8gY2hhbmdlLiBCdXQgZG9lcyBhbnlvbmUgbGlzdGVuPyBOby4KLQkJaWYgKCBpc0V2ZW50cyAmJiAhdGhpc0NhY2hlWyBuYW1lIF0gKSB7Ci0JCQlyZXR1cm4gcHJpdmF0ZUNhY2hlLmV2ZW50czsKLQkJfQotCi0JCS8vIENoZWNrIGZvciBib3RoIGNvbnZlcnRlZC10by1jYW1lbCBhbmQgbm9uLWNvbnZlcnRlZCBkYXRhIHByb3BlcnR5IG5hbWVzCi0JCS8vIElmIGEgZGF0YSBwcm9wZXJ0eSB3YXMgc3BlY2lmaWVkCi0JCWlmICggZ2V0QnlOYW1lICkgewotCi0JCQkvLyBGaXJzdCBUcnkgdG8gZmluZCBhcy1pcyBwcm9wZXJ0eSBkYXRhCi0JCQlyZXQgPSB0aGlzQ2FjaGVbIG5hbWUgXTsKLQotCQkJLy8gVGVzdCBmb3IgbnVsbHx1bmRlZmluZWQgcHJvcGVydHkgZGF0YQotCQkJaWYgKCByZXQgPT0gbnVsbCApIHsKLQotCQkJCS8vIFRyeSB0byBmaW5kIHRoZSBjYW1lbENhc2VkIHByb3BlcnR5Ci0JCQkJcmV0ID0gdGhpc0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXJldCA9IHRoaXNDYWNoZTsKLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfSwKLQotCXJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7Ci0JCWlmICggIWpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQl2YXIgdGhpc0NhY2hlLCBpLCBsLAotCi0JCQkvLyBSZWZlcmVuY2UgdG8gaW50ZXJuYWwgZGF0YSBjYWNoZSBrZXkKLQkJCWludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCi0KLQkJCWlzTm9kZSA9IGVsZW0ubm9kZVR5cGUsCi0KLQkJCS8vIFNlZSBqUXVlcnkuZGF0YSBmb3IgbW9yZSBpbmZvcm1hdGlvbgotCQkJY2FjaGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAotCi0JCQkvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KLQkJCWlkID0gaXNOb2RlID8gZWxlbVsgaW50ZXJuYWxLZXkgXSA6IGludGVybmFsS2V5OwotCi0JCS8vIElmIHRoZXJlIGlzIGFscmVhZHkgbm8gY2FjaGUgZW50cnkgZm9yIHRoaXMgb2JqZWN0LCB0aGVyZSBpcyBubwotCQkvLyBwdXJwb3NlIGluIGNvbnRpbnVpbmcKLQkJaWYgKCAhY2FjaGVbIGlkIF0gKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlpZiAoIG5hbWUgKSB7Ci0KLQkJCXRoaXNDYWNoZSA9IHB2dCA/IGNhY2hlWyBpZCBdIDogY2FjaGVbIGlkIF0uZGF0YTsKLQotCQkJaWYgKCB0aGlzQ2FjaGUgKSB7Ci0KLQkJCQkvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgbmFtZXMgZm9yIGRhdGEga2V5cwotCQkJCWlmICggIWpRdWVyeS5pc0FycmF5KCBuYW1lICkgKSB7Ci0KLQkJCQkJLy8gdHJ5IHRoZSBzdHJpbmcgYXMgYSBrZXkgYmVmb3JlIGFueSBtYW5pcHVsYXRpb24KLQkJCQkJaWYgKCBuYW1lIGluIHRoaXNDYWNoZSApIHsKLQkJCQkJCW5hbWUgPSBbIG5hbWUgXTsKLQkJCQkJfSBlbHNlIHsKLQotCQkJCQkJLy8gc3BsaXQgdGhlIGNhbWVsIGNhc2VkIHZlcnNpb24gYnkgc3BhY2VzIHVubGVzcyBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzCi0JCQkJCQluYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApOwotCQkJCQkJaWYgKCBuYW1lIGluIHRoaXNDYWNoZSApIHsKLQkJCQkJCQluYW1lID0gWyBuYW1lIF07Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCW5hbWUgPSBuYW1lLnNwbGl0KCAiICIgKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQotCQkJCWZvciAoIGkgPSAwLCBsID0gbmFtZS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7Ci0JCQkJCWRlbGV0ZSB0aGlzQ2FjaGVbIG5hbWVbaV0gXTsKLQkJCQl9Ci0KLQkJCQkvLyBJZiB0aGVyZSBpcyBubyBkYXRhIGxlZnQgaW4gdGhlIGNhY2hlLCB3ZSB3YW50IHRvIGNvbnRpbnVlCi0JCQkJLy8gYW5kIGxldCB0aGUgY2FjaGUgb2JqZWN0IGl0c2VsZiBnZXQgZGVzdHJveWVkCi0JCQkJaWYgKCAhKCBwdnQgPyBpc0VtcHR5RGF0YU9iamVjdCA6IGpRdWVyeS5pc0VtcHR5T2JqZWN0ICkoIHRoaXNDYWNoZSApICkgewotCQkJCQlyZXR1cm47Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uCi0JCWlmICggIXB2dCApIHsKLQkJCWRlbGV0ZSBjYWNoZVsgaWQgXS5kYXRhOwotCi0JCQkvLyBEb24ndCBkZXN0cm95IHRoZSBwYXJlbnQgY2FjaGUgdW5sZXNzIHRoZSBpbnRlcm5hbCBkYXRhIG9iamVjdAotCQkJLy8gaGFkIGJlZW4gdGhlIG9ubHkgdGhpbmcgbGVmdCBpbiBpdAotCQkJaWYgKCAhaXNFbXB0eURhdGFPYmplY3QoY2FjaGVbIGlkIF0pICkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCi0JCS8vIEJyb3dzZXJzIHRoYXQgZmFpbCBleHBhbmRvIGRlbGV0aW9uIGFsc28gcmVmdXNlIHRvIGRlbGV0ZSBleHBhbmRvcyBvbgotCQkvLyB0aGUgd2luZG93LCBidXQgaXQgd2lsbCBhbGxvdyBpdCBvbiBhbGwgb3RoZXIgSlMgb2JqZWN0czsgb3RoZXIgYnJvd3NlcnMKLQkJLy8gZG9uJ3QgY2FyZQotCQkvLyBFbnN1cmUgdGhhdCBgY2FjaGVgIGlzIG5vdCBhIHdpbmRvdyBvYmplY3QgIzEwMDgwCi0JCWlmICggalF1ZXJ5LnN1cHBvcnQuZGVsZXRlRXhwYW5kbyB8fCAhY2FjaGUuc2V0SW50ZXJ2YWwgKSB7Ci0JCQlkZWxldGUgY2FjaGVbIGlkIF07Ci0JCX0gZWxzZSB7Ci0JCQljYWNoZVsgaWQgXSA9IG51bGw7Ci0JCX0KLQotCQkvLyBXZSBkZXN0cm95ZWQgdGhlIGNhY2hlIGFuZCBuZWVkIHRvIGVsaW1pbmF0ZSB0aGUgZXhwYW5kbyBvbiB0aGUgbm9kZSB0byBhdm9pZAotCQkvLyBmYWxzZSBsb29rdXBzIGluIHRoZSBjYWNoZSBmb3IgZW50cmllcyB0aGF0IG5vIGxvbmdlciBleGlzdAotCQlpZiAoIGlzTm9kZSApIHsKLQkJCS8vIElFIGRvZXMgbm90IGFsbG93IHVzIHRvIGRlbGV0ZSBleHBhbmRvIHByb3BlcnRpZXMgZnJvbSBub2RlcywKLQkJCS8vIG5vciBkb2VzIGl0IGhhdmUgYSByZW1vdmVBdHRyaWJ1dGUgZnVuY3Rpb24gb24gRG9jdW1lbnQgbm9kZXM7Ci0JCQkvLyB3ZSBtdXN0IGhhbmRsZSBhbGwgb2YgdGhlc2UgY2FzZXMKLQkJCWlmICggalF1ZXJ5LnN1cHBvcnQuZGVsZXRlRXhwYW5kbyApIHsKLQkJCQlkZWxldGUgZWxlbVsgaW50ZXJuYWxLZXkgXTsKLQkJCX0gZWxzZSBpZiAoIGVsZW0ucmVtb3ZlQXR0cmlidXRlICkgewotCQkJCWVsZW0ucmVtb3ZlQXR0cmlidXRlKCBpbnRlcm5hbEtleSApOwotCQkJfSBlbHNlIHsKLQkJCQllbGVtWyBpbnRlcm5hbEtleSBdID0gbnVsbDsKLQkJCX0KLQkJfQotCX0sCi0KLQkvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCi0JX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgewotCQlyZXR1cm4galF1ZXJ5LmRhdGEoIGVsZW0sIG5hbWUsIGRhdGEsIHRydWUgKTsKLQl9LAotCi0JLy8gQSBtZXRob2QgZm9yIGRldGVybWluaW5nIGlmIGEgRE9NIG5vZGUgY2FuIGhhbmRsZSB0aGUgZGF0YSBleHBhbmRvCi0JYWNjZXB0RGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCWlmICggZWxlbS5ub2RlTmFtZSApIHsKLQkJCXZhciBtYXRjaCA9IGpRdWVyeS5ub0RhdGFbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOwotCi0JCQlpZiAoIG1hdGNoICkgewotCQkJCXJldHVybiAhKG1hdGNoID09PSB0cnVlIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFzc2lkIikgIT09IG1hdGNoKTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiB0cnVlOwotCX0KLX0pOwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLQlkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKLQkJdmFyIHBhcnRzLCBhdHRyLCBuYW1lLAotCQkJZGF0YSA9IG51bGw7Ci0KLQkJaWYgKCB0eXBlb2Yga2V5ID09PSAidW5kZWZpbmVkIiApIHsKLQkJCWlmICggdGhpcy5sZW5ndGggKSB7Ci0JCQkJZGF0YSA9IGpRdWVyeS5kYXRhKCB0aGlzWzBdICk7Ci0KLQkJCQlpZiAoIHRoaXNbMF0ubm9kZVR5cGUgPT09IDEgJiYgIWpRdWVyeS5fZGF0YSggdGhpc1swXSwgInBhcnNlZEF0dHJzIiApICkgewotCQkJCQlhdHRyID0gdGhpc1swXS5hdHRyaWJ1dGVzOwotCQkJCQlmb3IgKCB2YXIgaSA9IDAsIGwgPSBhdHRyLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLQkJCQkJCW5hbWUgPSBhdHRyW2ldLm5hbWU7Ci0KLQkJCQkJCWlmICggbmFtZS5pbmRleE9mKCAiZGF0YS0iICkgPT09IDAgKSB7Ci0JCQkJCQkJbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUuc3Vic3RyaW5nKDUpICk7Ci0KLQkJCQkJCQlkYXRhQXR0ciggdGhpc1swXSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJalF1ZXJ5Ll9kYXRhKCB0aGlzWzBdLCAicGFyc2VkQXR0cnMiLCB0cnVlICk7Ci0JCQkJfQotCQkJfQotCi0JCQlyZXR1cm4gZGF0YTsKLQotCQl9IGVsc2UgaWYgKCB0eXBlb2Yga2V5ID09PSAib2JqZWN0IiApIHsKLQkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0JCQkJalF1ZXJ5LmRhdGEoIHRoaXMsIGtleSApOwotCQkJfSk7Ci0JCX0KLQotCQlwYXJ0cyA9IGtleS5zcGxpdCgiLiIpOwotCQlwYXJ0c1sxXSA9IHBhcnRzWzFdID8gIi4iICsgcGFydHNbMV0gOiAiIjsKLQotCQlpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7Ci0JCQlkYXRhID0gdGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIgKyBwYXJ0c1sxXSArICIhIiwgW3BhcnRzWzBdXSk7Ci0KLQkJCS8vIFRyeSB0byBmZXRjaCBhbnkgaW50ZXJuYWxseSBzdG9yZWQgZGF0YSBmaXJzdAotCQkJaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgdGhpcy5sZW5ndGggKSB7Ci0JCQkJZGF0YSA9IGpRdWVyeS5kYXRhKCB0aGlzWzBdLCBrZXkgKTsKLQkJCQlkYXRhID0gZGF0YUF0dHIoIHRoaXNbMF0sIGtleSwgZGF0YSApOwotCQkJfQotCi0JCQlyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkICYmIHBhcnRzWzFdID8KLQkJCQl0aGlzLmRhdGEoIHBhcnRzWzBdICkgOgotCQkJCWRhdGE7Ci0KLQkJfSBlbHNlIHsKLQkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0JCQkJdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKLQkJCQkJYXJncyA9IFsgcGFydHNbMF0sIHZhbHVlIF07Ci0KLQkJCQlzZWxmLnRyaWdnZXJIYW5kbGVyKCAic2V0RGF0YSIgKyBwYXJ0c1sxXSArICIhIiwgYXJncyApOwotCQkJCWpRdWVyeS5kYXRhKCB0aGlzLCBrZXksIHZhbHVlICk7Ci0JCQkJc2VsZi50cmlnZ2VySGFuZGxlciggImNoYW5nZURhdGEiICsgcGFydHNbMV0gKyAiISIsIGFyZ3MgKTsKLQkJCX0pOwotCQl9Ci0JfSwKLQotCXJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7Ci0JCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0JCQlqUXVlcnkucmVtb3ZlRGF0YSggdGhpcywga2V5ICk7Ci0JCX0pOwotCX0KLX0pOwotCi1mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkgewotCS8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnkKLQkvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGUKLQlpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgewotCi0JCXZhciBuYW1lID0gImRhdGEtIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCAiLSQxIiApLnRvTG93ZXJDYXNlKCk7Ci0KLQkJZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7Ci0KLQkJaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgKSB7Ci0JCQl0cnkgewotCQkJCWRhdGEgPSBkYXRhID09PSAidHJ1ZSIgPyB0cnVlIDoKLQkJCQlkYXRhID09PSAiZmFsc2UiID8gZmFsc2UgOgotCQkJCWRhdGEgPT09ICJudWxsIiA/IG51bGwgOgotCQkJCWpRdWVyeS5pc051bWVyaWMoIGRhdGEgKSA/IHBhcnNlRmxvYXQoIGRhdGEgKSA6Ci0JCQkJCXJicmFjZS50ZXN0KCBkYXRhICkgPyBqUXVlcnkucGFyc2VKU09OKCBkYXRhICkgOgotCQkJCQlkYXRhOwotCQkJfSBjYXRjaCggZSApIHt9Ci0KLQkJCS8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlcgotCQkJalF1ZXJ5LmRhdGEoIGVsZW0sIGtleSwgZGF0YSApOwotCi0JCX0gZWxzZSB7Ci0JCQlkYXRhID0gdW5kZWZpbmVkOwotCQl9Ci0JfQotCi0JcmV0dXJuIGRhdGE7Ci19Ci0KLS8vIGNoZWNrcyBhIGNhY2hlIG9iamVjdCBmb3IgZW1wdGluZXNzCi1mdW5jdGlvbiBpc0VtcHR5RGF0YU9iamVjdCggb2JqICkgewotCWZvciAoIHZhciBuYW1lIGluIG9iaiApIHsKLQotCQkvLyBpZiB0aGUgcHVibGljIGRhdGEgb2JqZWN0IGlzIGVtcHR5LCB0aGUgcHJpdmF0ZSBpcyBzdGlsbCBlbXB0eQotCQlpZiAoIG5hbWUgPT09ICJkYXRhIiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb2JqW25hbWVdICkgKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIG5hbWUgIT09ICJ0b0pTT04iICkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLQotCi0KLWZ1bmN0aW9uIGhhbmRsZVF1ZXVlTWFya0RlZmVyKCBlbGVtLCB0eXBlLCBzcmMgKSB7Ci0JdmFyIGRlZmVyRGF0YUtleSA9IHR5cGUgKyAiZGVmZXIiLAotCQlxdWV1ZURhdGFLZXkgPSB0eXBlICsgInF1ZXVlIiwKLQkJbWFya0RhdGFLZXkgPSB0eXBlICsgIm1hcmsiLAotCQlkZWZlciA9IGpRdWVyeS5fZGF0YSggZWxlbSwgZGVmZXJEYXRhS2V5ICk7Ci0JaWYgKCBkZWZlciAmJgotCQkoIHNyYyA9PT0gInF1ZXVlIiB8fCAhalF1ZXJ5Ll9kYXRhKGVsZW0sIHF1ZXVlRGF0YUtleSkgKSAmJgotCQkoIHNyYyA9PT0gIm1hcmsiIHx8ICFqUXVlcnkuX2RhdGEoZWxlbSwgbWFya0RhdGFLZXkpICkgKSB7Ci0JCS8vIEdpdmUgcm9vbSBmb3IgaGFyZC1jb2RlZCBjYWxsYmFja3MgdG8gZmlyZSBmaXJzdAotCQkvLyBhbmQgZXZlbnR1YWxseSBtYXJrL3F1ZXVlIHNvbWV0aGluZyBlbHNlIG9uIHRoZSBlbGVtZW50Ci0JCXNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgewotCQkJaWYgKCAhalF1ZXJ5Ll9kYXRhKCBlbGVtLCBxdWV1ZURhdGFLZXkgKSAmJgotCQkJCSFqUXVlcnkuX2RhdGEoIGVsZW0sIG1hcmtEYXRhS2V5ICkgKSB7Ci0JCQkJalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sIGRlZmVyRGF0YUtleSwgdHJ1ZSApOwotCQkJCWRlZmVyLmZpcmUoKTsKLQkJCX0KLQkJfSwgMCApOwotCX0KLX0KLQotalF1ZXJ5LmV4dGVuZCh7Ci0KLQlfbWFyazogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7Ci0JCWlmICggZWxlbSApIHsKLQkJCXR5cGUgPSAoIHR5cGUgfHwgImZ4IiApICsgIm1hcmsiOwotCQkJalF1ZXJ5Ll9kYXRhKCBlbGVtLCB0eXBlLCAoalF1ZXJ5Ll9kYXRhKCBlbGVtLCB0eXBlICkgfHwgMCkgKyAxICk7Ci0JCX0KLQl9LAotCi0JX3VubWFyazogZnVuY3Rpb24oIGZvcmNlLCBlbGVtLCB0eXBlICkgewotCQlpZiAoIGZvcmNlICE9PSB0cnVlICkgewotCQkJdHlwZSA9IGVsZW07Ci0JCQllbGVtID0gZm9yY2U7Ci0JCQlmb3JjZSA9IGZhbHNlOwotCQl9Ci0JCWlmICggZWxlbSApIHsKLQkJCXR5cGUgPSB0eXBlIHx8ICJmeCI7Ci0JCQl2YXIga2V5ID0gdHlwZSArICJtYXJrIiwKLQkJCQljb3VudCA9IGZvcmNlID8gMCA6ICggKGpRdWVyeS5fZGF0YSggZWxlbSwga2V5ICkgfHwgMSkgLSAxICk7Ci0JCQlpZiAoIGNvdW50ICkgewotCQkJCWpRdWVyeS5fZGF0YSggZWxlbSwga2V5LCBjb3VudCApOwotCQkJfSBlbHNlIHsKLQkJCQlqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwga2V5LCB0cnVlICk7Ci0JCQkJaGFuZGxlUXVldWVNYXJrRGVmZXIoIGVsZW0sIHR5cGUsICJtYXJrIiApOwotCQkJfQotCQl9Ci0JfSwKLQotCXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHsKLQkJdmFyIHE7Ci0JCWlmICggZWxlbSApIHsKLQkJCXR5cGUgPSAoIHR5cGUgfHwgImZ4IiApICsgInF1ZXVlIjsKLQkJCXEgPSBqUXVlcnkuX2RhdGEoIGVsZW0sIHR5cGUgKTsKLQotCQkJLy8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cAotCQkJaWYgKCBkYXRhICkgewotCQkJCWlmICggIXEgfHwgalF1ZXJ5LmlzQXJyYXkoZGF0YSkgKSB7Ci0JCQkJCXEgPSBqUXVlcnkuX2RhdGEoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoZGF0YSkgKTsKLQkJCQl9IGVsc2UgewotCQkJCQlxLnB1c2goIGRhdGEgKTsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gcSB8fCBbXTsKLQkJfQotCX0sCi0KLQlkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKLQkJdHlwZSA9IHR5cGUgfHwgImZ4IjsKLQotCQl2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKLQkJCWZuID0gcXVldWUuc2hpZnQoKSwKLQkJCWhvb2tzID0ge307Ci0KLQkJLy8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbAotCQlpZiAoIGZuID09PSAiaW5wcm9ncmVzcyIgKSB7Ci0JCQlmbiA9IHF1ZXVlLnNoaWZ0KCk7Ci0JCX0KLQotCQlpZiAoIGZuICkgewotCQkJLy8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZwotCQkJLy8gYXV0b21hdGljYWxseSBkZXF1ZXVlZAotCQkJaWYgKCB0eXBlID09PSAiZngiICkgewotCQkJCXF1ZXVlLnVuc2hpZnQoICJpbnByb2dyZXNzIiApOwotCQkJfQotCi0JCQlqUXVlcnkuX2RhdGEoIGVsZW0sIHR5cGUgKyAiLnJ1biIsIGhvb2tzICk7Ci0JCQlmbi5jYWxsKCBlbGVtLCBmdW5jdGlvbigpIHsKLQkJCQlqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApOwotCQkJfSwgaG9va3MgKTsKLQkJfQotCi0JCWlmICggIXF1ZXVlLmxlbmd0aCApIHsKLQkJCWpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCB0eXBlICsgInF1ZXVlICIgKyB0eXBlICsgIi5ydW4iLCB0cnVlICk7Ci0JCQloYW5kbGVRdWV1ZU1hcmtEZWZlciggZWxlbSwgdHlwZSwgInF1ZXVlIiApOwotCQl9Ci0JfQotfSk7Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotCXF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKLQkJaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7Ci0JCQlkYXRhID0gdHlwZTsKLQkJCXR5cGUgPSAiZngiOwotCQl9Ci0KLQkJaWYgKCBkYXRhID09PSB1bmRlZmluZWQgKSB7Ci0JCQlyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWzBdLCB0eXBlICk7Ci0JCX0KLQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLQkJCXZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApOwotCi0JCQlpZiAoIHR5cGUgPT09ICJmeCIgJiYgcXVldWVbMF0gIT09ICJpbnByb2dyZXNzIiApIHsKLQkJCQlqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwotCQkJfQotCQl9KTsKLQl9LAotCWRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgewotCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotCQkJalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKLQkJfSk7Ci0JfSwKLQkvLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uCi0JLy8gaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5LwotCWRlbGF5OiBmdW5jdGlvbiggdGltZSwgdHlwZSApIHsKLQkJdGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTsKLQkJdHlwZSA9IHR5cGUgfHwgImZ4IjsKLQotCQlyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkgewotCQkJdmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7Ci0JCQlob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7Ci0JCQkJY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7Ci0JCQl9OwotCQl9KTsKLQl9LAotCWNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgewotCQlyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCAiZngiLCBbXSApOwotCX0sCi0JLy8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZQotCS8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KQotCXByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmplY3QgKSB7Ci0JCWlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewotCQkJb2JqZWN0ID0gdHlwZTsKLQkJCXR5cGUgPSB1bmRlZmluZWQ7Ci0JCX0KLQkJdHlwZSA9IHR5cGUgfHwgImZ4IjsKLQkJdmFyIGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksCi0JCQllbGVtZW50cyA9IHRoaXMsCi0JCQlpID0gZWxlbWVudHMubGVuZ3RoLAotCQkJY291bnQgPSAxLAotCQkJZGVmZXJEYXRhS2V5ID0gdHlwZSArICJkZWZlciIsCi0JCQlxdWV1ZURhdGFLZXkgPSB0eXBlICsgInF1ZXVlIiwKLQkJCW1hcmtEYXRhS2V5ID0gdHlwZSArICJtYXJrIiwKLQkJCXRtcDsKLQkJZnVuY3Rpb24gcmVzb2x2ZSgpIHsKLQkJCWlmICggISggLS1jb3VudCApICkgewotCQkJCWRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7Ci0JCQl9Ci0JCX0KLQkJd2hpbGUoIGktLSApIHsKLQkJCWlmICgoIHRtcCA9IGpRdWVyeS5kYXRhKCBlbGVtZW50c1sgaSBdLCBkZWZlckRhdGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSApIHx8Ci0JCQkJCSggalF1ZXJ5LmRhdGEoIGVsZW1lbnRzWyBpIF0sIHF1ZXVlRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgfHwKLQkJCQkJCWpRdWVyeS5kYXRhKCBlbGVtZW50c1sgaSBdLCBtYXJrRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgKSAmJgotCQkJCQlqUXVlcnkuZGF0YSggZWxlbWVudHNbIGkgXSwgZGVmZXJEYXRhS2V5LCBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksIHRydWUgKSApKSB7Ci0JCQkJY291bnQrKzsKLQkJCQl0bXAuYWRkKCByZXNvbHZlICk7Ci0JCQl9Ci0JCX0KLQkJcmVzb2x2ZSgpOwotCQlyZXR1cm4gZGVmZXIucHJvbWlzZSgpOwotCX0KLX0pOwotCi0KLQotCi12YXIgcmNsYXNzID0gL1tcblx0XHJdL2csCi0JcnNwYWNlID0gL1xzKy8sCi0JcnJldHVybiA9IC9cci9nLAotCXJ0eXBlID0gL14oPzpidXR0b258aW5wdXQpJC9pLAotCXJmb2N1c2FibGUgPSAvXig/OmJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSwKLQlyY2xpY2thYmxlID0gL15hKD86cmVhKT8kL2ksCi0JcmJvb2xlYW4gPSAvXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSwKLQlnZXRTZXRBdHRyaWJ1dGUgPSBqUXVlcnkuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUsCi0Jbm9kZUhvb2ssIGJvb2xIb29rLCBmaXhTcGVjaWZpZWQ7Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotCWF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKLQkJcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIG5hbWUsIHZhbHVlLCB0cnVlLCBqUXVlcnkuYXR0ciApOwotCX0sCi0KLQlyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHsKLQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLQkJCWpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7Ci0JCX0pOwotCX0sCi0KLQlwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Ci0JCXJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBuYW1lLCB2YWx1ZSwgdHJ1ZSwgalF1ZXJ5LnByb3AgKTsKLQl9LAotCi0JcmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7Ci0JCW5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7Ci0JCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0JCQkvLyB0cnkvY2F0Y2ggaGFuZGxlcyBjYXNlcyB3aGVyZSBJRSBiYWxrcyAoc3VjaCBhcyByZW1vdmluZyBhIHByb3BlcnR5IG9uIHdpbmRvdykKLQkJCXRyeSB7Ci0JCQkJdGhpc1sgbmFtZSBdID0gdW5kZWZpbmVkOwotCQkJCWRlbGV0ZSB0aGlzWyBuYW1lIF07Ci0JCQl9IGNhdGNoKCBlICkge30KLQkJfSk7Ci0JfSwKLQotCWFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0JCXZhciBjbGFzc05hbWVzLCBpLCBsLCBlbGVtLAotCQkJc2V0Q2xhc3MsIGMsIGNsOwotCi0JCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7Ci0JCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBqICkgewotCQkJCWpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGosIHRoaXMuY2xhc3NOYW1lKSApOwotCQkJfSk7Ci0JCX0KLQotCQlpZiAoIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgKSB7Ci0JCQljbGFzc05hbWVzID0gdmFsdWUuc3BsaXQoIHJzcGFjZSApOwotCi0JCQlmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotCQkJCWVsZW0gPSB0aGlzWyBpIF07Ci0KLQkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0JCQkJCWlmICggIWVsZW0uY2xhc3NOYW1lICYmIGNsYXNzTmFtZXMubGVuZ3RoID09PSAxICkgewotCQkJCQkJZWxlbS5jbGFzc05hbWUgPSB2YWx1ZTsKLQotCQkJCQl9IGVsc2UgewotCQkJCQkJc2V0Q2xhc3MgPSAiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIjsKLQotCQkJCQkJZm9yICggYyA9IDAsIGNsID0gY2xhc3NOYW1lcy5sZW5ndGg7IGMgPCBjbDsgYysrICkgewotCQkJCQkJCWlmICggIX5zZXRDbGFzcy5pbmRleE9mKCAiICIgKyBjbGFzc05hbWVzWyBjIF0gKyAiICIgKSApIHsKLQkJCQkJCQkJc2V0Q2xhc3MgKz0gY2xhc3NOYW1lc1sgYyBdICsgIiAiOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJCWVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIHNldENsYXNzICk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gdGhpczsKLQl9LAotCi0JcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLQkJdmFyIGNsYXNzTmFtZXMsIGksIGwsIGVsZW0sIGNsYXNzTmFtZSwgYywgY2w7Ci0KLQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKLQkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7Ci0JCQkJalF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaiwgdGhpcy5jbGFzc05hbWUpICk7Ci0JCQl9KTsKLQkJfQotCi0JCWlmICggKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIpIHx8IHZhbHVlID09PSB1bmRlZmluZWQgKSB7Ci0JCQljbGFzc05hbWVzID0gKCB2YWx1ZSB8fCAiIiApLnNwbGl0KCByc3BhY2UgKTsKLQotCQkJZm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLQkJCQllbGVtID0gdGhpc1sgaSBdOwotCi0JCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmIGVsZW0uY2xhc3NOYW1lICkgewotCQkJCQlpZiAoIHZhbHVlICkgewotCQkJCQkJY2xhc3NOYW1lID0gKCIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAiKS5yZXBsYWNlKCByY2xhc3MsICIgIiApOwotCQkJCQkJZm9yICggYyA9IDAsIGNsID0gY2xhc3NOYW1lcy5sZW5ndGg7IGMgPCBjbDsgYysrICkgewotCQkJCQkJCWNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKCIgIiArIGNsYXNzTmFtZXNbIGMgXSArICIgIiwgIiAiKTsKLQkJCQkJCX0KLQkJCQkJCWVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIGNsYXNzTmFtZSApOwotCi0JCQkJCX0gZWxzZSB7Ci0JCQkJCQllbGVtLmNsYXNzTmFtZSA9ICIiOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHRoaXM7Ci0JfSwKLQotCXRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkgewotCQl2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSwKLQkJCWlzQm9vbCA9IHR5cGVvZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4iOwotCi0JCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7Ci0JCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewotCQkJCWpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGksIHRoaXMuY2xhc3NOYW1lLCBzdGF0ZVZhbCksIHN0YXRlVmFsICk7Ci0JCQl9KTsKLQkJfQotCi0JCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0JCQlpZiAoIHR5cGUgPT09ICJzdHJpbmciICkgewotCQkJCS8vIHRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzCi0JCQkJdmFyIGNsYXNzTmFtZSwKLQkJCQkJaSA9IDAsCi0JCQkJCXNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKLQkJCQkJc3RhdGUgPSBzdGF0ZVZhbCwKLQkJCQkJY2xhc3NOYW1lcyA9IHZhbHVlLnNwbGl0KCByc3BhY2UgKTsKLQotCQkJCXdoaWxlICggKGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdKSApIHsKLQkJCQkJLy8gY2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGVyYXRlZCBsaXN0Ci0JCQkJCXN0YXRlID0gaXNCb29sID8gc3RhdGUgOiAhc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICk7Ci0JCQkJCXNlbGZbIHN0YXRlID8gImFkZENsYXNzIiA6ICJyZW1vdmVDbGFzcyIgXSggY2xhc3NOYW1lICk7Ci0JCQkJfQotCi0JCQl9IGVsc2UgaWYgKCB0eXBlID09PSAidW5kZWZpbmVkIiB8fCB0eXBlID09PSAiYm9vbGVhbiIgKSB7Ci0JCQkJaWYgKCB0aGlzLmNsYXNzTmFtZSApIHsKLQkJCQkJLy8gc3RvcmUgY2xhc3NOYW1lIGlmIHNldAotCQkJCQlqUXVlcnkuX2RhdGEoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiwgdGhpcy5jbGFzc05hbWUgKTsKLQkJCQl9Ci0KLQkJCQkvLyB0b2dnbGUgd2hvbGUgY2xhc3NOYW1lCi0JCQkJdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgPyAiIiA6IGpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18iICkgfHwgIiI7Ci0JCQl9Ci0JCX0pOwotCX0sCi0KLQloYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotCQl2YXIgY2xhc3NOYW1lID0gIiAiICsgc2VsZWN0b3IgKyAiICIsCi0JCQlpID0gMCwKLQkJCWwgPSB0aGlzLmxlbmd0aDsKLQkJZm9yICggOyBpIDwgbDsgaSsrICkgewotCQkJaWYgKCB0aGlzW2ldLm5vZGVUeXBlID09PSAxICYmICgiICIgKyB0aGlzW2ldLmNsYXNzTmFtZSArICIgIikucmVwbGFjZShyY2xhc3MsICIgIikuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9LAotCi0JdmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0JCXZhciBob29rcywgcmV0LCBpc0Z1bmN0aW9uLAotCQkJZWxlbSA9IHRoaXNbMF07Ci0KLQkJaWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHsKLQkJCWlmICggZWxlbSApIHsKLQkJCQlob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXTsKLQotCQkJCWlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgInZhbHVlIiApKSAhPT0gdW5kZWZpbmVkICkgewotCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0KLQotCQkJCXJldCA9IGVsZW0udmFsdWU7Ci0KLQkJCQlyZXR1cm4gdHlwZW9mIHJldCA9PT0gInN0cmluZyIgPwotCQkJCQkvLyBoYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzCi0JCQkJCXJldC5yZXBsYWNlKHJyZXR1cm4sICIiKSA6Ci0JCQkJCS8vIGhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlcgotCQkJCQlyZXQgPT0gbnVsbCA/ICIiIDogcmV0OwotCQkJfQotCi0JCQlyZXR1cm47Ci0JCX0KLQotCQlpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7Ci0KLQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKLQkJCXZhciBzZWxmID0galF1ZXJ5KHRoaXMpLCB2YWw7Ci0KLQkJCWlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0KLQkJCWlmICggaXNGdW5jdGlvbiApIHsKLQkJCQl2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBzZWxmLnZhbCgpICk7Ci0JCQl9IGVsc2UgewotCQkJCXZhbCA9IHZhbHVlOwotCQkJfQotCi0JCQkvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyAiIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZwotCQkJaWYgKCB2YWwgPT0gbnVsbCApIHsKLQkJCQl2YWwgPSAiIjsKLQkJCX0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09ICJudW1iZXIiICkgewotCQkJCXZhbCArPSAiIjsKLQkJCX0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSApIHsKLQkJCQl2YWwgPSBqUXVlcnkubWFwKHZhbCwgZnVuY3Rpb24gKCB2YWx1ZSApIHsKLQkJCQkJcmV0dXJuIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICsgIiI7Ci0JCQkJfSk7Ci0JCQl9Ci0KLQkJCWhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdOwotCi0JCQkvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZwotCQkJaWYgKCAhaG9va3MgfHwgISgic2V0IiBpbiBob29rcykgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsICJ2YWx1ZSIgKSA9PT0gdW5kZWZpbmVkICkgewotCQkJCXRoaXMudmFsdWUgPSB2YWw7Ci0JCQl9Ci0JCX0pOwotCX0KLX0pOwotCi1qUXVlcnkuZXh0ZW5kKHsKLQl2YWxIb29rczogewotCQlvcHRpb246IHsKLQkJCWdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCQkJLy8gYXR0cmlidXRlcy52YWx1ZSBpcyB1bmRlZmluZWQgaW4gQmxhY2tiZXJyeSA0LjcgYnV0Ci0JCQkJLy8gdXNlcyAudmFsdWUuIFNlZSAjNjkzMgotCQkJCXZhciB2YWwgPSBlbGVtLmF0dHJpYnV0ZXMudmFsdWU7Ci0JCQkJcmV0dXJuICF2YWwgfHwgdmFsLnNwZWNpZmllZCA/IGVsZW0udmFsdWUgOiBlbGVtLnRleHQ7Ci0JCQl9Ci0JCX0sCi0JCXNlbGVjdDogewotCQkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLQkJCQl2YXIgdmFsdWUsIGksIG1heCwgb3B0aW9uLAotCQkJCQlpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCwKLQkJCQkJdmFsdWVzID0gW10sCi0JCQkJCW9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCi0JCQkJCW9uZSA9IGVsZW0udHlwZSA9PT0gInNlbGVjdC1vbmUiOwotCi0JCQkJLy8gTm90aGluZyB3YXMgc2VsZWN0ZWQKLQkJCQlpZiAoIGluZGV4IDwgMCApIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCi0JCQkJLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucwotCQkJCWkgPSBvbmUgPyBpbmRleCA6IDA7Ci0JCQkJbWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7Ci0JCQkJZm9yICggOyBpIDwgbWF4OyBpKysgKSB7Ci0JCQkJCW9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKLQotCQkJCQkvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwCi0JCQkJCWlmICggb3B0aW9uLnNlbGVjdGVkICYmIChqUXVlcnkuc3VwcG9ydC5vcHREaXNhYmxlZCA/ICFvcHRpb24uZGlzYWJsZWQgOiBvcHRpb24uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpID09PSBudWxsKSAmJgotCQkJCQkJCSghb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHwgIWpRdWVyeS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsICJvcHRncm91cCIgKSkgKSB7Ci0KLQkJCQkJCS8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb24KLQkJCQkJCXZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTsKLQotCQkJCQkJLy8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHMKLQkJCQkJCWlmICggb25lICkgewotCQkJCQkJCXJldHVybiB2YWx1ZTsKLQkJCQkJCX0KLQotCQkJCQkJLy8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXkKLQkJCQkJCXZhbHVlcy5wdXNoKCB2YWx1ZSApOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJLy8gRml4ZXMgQnVnICMyNTUxIC0tIHNlbGVjdC52YWwoKSBicm9rZW4gaW4gSUUgYWZ0ZXIgZm9ybS5yZXNldCgpCi0JCQkJaWYgKCBvbmUgJiYgIXZhbHVlcy5sZW5ndGggJiYgb3B0aW9ucy5sZW5ndGggKSB7Ci0JCQkJCXJldHVybiBqUXVlcnkoIG9wdGlvbnNbIGluZGV4IF0gKS52YWwoKTsKLQkJCQl9Ci0KLQkJCQlyZXR1cm4gdmFsdWVzOwotCQkJfSwKLQotCQkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0JCQkJdmFyIHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICk7Ci0KLQkJCQlqUXVlcnkoZWxlbSkuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigpIHsKLQkJCQkJdGhpcy5zZWxlY3RlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkodGhpcykudmFsKCksIHZhbHVlcyApID49IDA7Ci0JCQkJfSk7Ci0KLQkJCQlpZiAoICF2YWx1ZXMubGVuZ3RoICkgewotCQkJCQllbGVtLnNlbGVjdGVkSW5kZXggPSAtMTsKLQkJCQl9Ci0JCQkJcmV0dXJuIHZhbHVlczsKLQkJCX0KLQkJfQotCX0sCi0KLQlhdHRyRm46IHsKLQkJdmFsOiB0cnVlLAotCQljc3M6IHRydWUsCi0JCWh0bWw6IHRydWUsCi0JCXRleHQ6IHRydWUsCi0JCWRhdGE6IHRydWUsCi0JCXdpZHRoOiB0cnVlLAotCQloZWlnaHQ6IHRydWUsCi0JCW9mZnNldDogdHJ1ZQotCX0sCi0KLQlhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIHBhc3MgKSB7Ci0JCXZhciByZXQsIGhvb2tzLCBub3R4bWwsCi0JCQluVHlwZSA9IGVsZW0ubm9kZVR5cGU7Ci0KLQkJLy8gZG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcwotCQlpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaWYgKCBwYXNzICYmIG5hbWUgaW4galF1ZXJ5LmF0dHJGbiApIHsKLQkJCXJldHVybiBqUXVlcnkoIGVsZW0gKVsgbmFtZSBdKCB2YWx1ZSApOwotCQl9Ci0KLQkJLy8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKLQkJaWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09ICJ1bmRlZmluZWQiICkgewotCQkJcmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApOwotCQl9Ci0KLQkJbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApOwotCi0JCS8vIEFsbCBhdHRyaWJ1dGVzIGFyZSBsb3dlcmNhc2UKLQkJLy8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZAotCQlpZiAoIG5vdHhtbCApIHsKLQkJCW5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7Ci0JCQlob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSB8fCAoIHJib29sZWFuLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogbm9kZUhvb2sgKTsKLQkJfQotCi0JCWlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKLQotCQkJaWYgKCB2YWx1ZSA9PT0gbnVsbCApIHsKLQkJCQlqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApOwotCQkJCXJldHVybjsKLQotCQkJfSBlbHNlIGlmICggaG9va3MgJiYgInNldCIgaW4gaG9va3MgJiYgbm90eG1sICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkpICE9PSB1bmRlZmluZWQgKSB7Ci0JCQkJcmV0dXJuIHJldDsKLQotCQkJfSBlbHNlIHsKLQkJCQllbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgIiIgKyB2YWx1ZSApOwotCQkJCXJldHVybiB2YWx1ZTsKLQkJCX0KLQotCQl9IGVsc2UgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiBub3R4bWwgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApKSAhPT0gbnVsbCApIHsKLQkJCXJldHVybiByZXQ7Ci0KLQkJfSBlbHNlIHsKLQotCQkJcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsKLQotCQkJLy8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWQKLQkJCXJldHVybiByZXQgPT09IG51bGwgPwotCQkJCXVuZGVmaW5lZCA6Ci0JCQkJcmV0OwotCQl9Ci0JfSwKLQotCXJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLQkJdmFyIHByb3BOYW1lLCBhdHRyTmFtZXMsIG5hbWUsIGwsCi0JCQlpID0gMDsKLQotCQlpZiAoIHZhbHVlICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0JCQlhdHRyTmFtZXMgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCByc3BhY2UgKTsKLQkJCWwgPSBhdHRyTmFtZXMubGVuZ3RoOwotCi0JCQlmb3IgKCA7IGkgPCBsOyBpKysgKSB7Ci0JCQkJbmFtZSA9IGF0dHJOYW1lc1sgaSBdOwotCi0JCQkJaWYgKCBuYW1lICkgewotCQkJCQlwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKLQotCQkJCQkvLyBTZWUgIzk2OTkgZm9yIGV4cGxhbmF0aW9uIG9mIHRoaXMgYXBwcm9hY2ggKHNldHRpbmcgZmlyc3QsIHRoZW4gcmVtb3ZhbCkKLQkJCQkJalF1ZXJ5LmF0dHIoIGVsZW0sIG5hbWUsICIiICk7Ci0JCQkJCWVsZW0ucmVtb3ZlQXR0cmlidXRlKCBnZXRTZXRBdHRyaWJ1dGUgPyBuYW1lIDogcHJvcE5hbWUgKTsKLQotCQkJCQkvLyBTZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB0byBmYWxzZSBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCi0JCQkJCWlmICggcmJvb2xlYW4udGVzdCggbmFtZSApICYmIHByb3BOYW1lIGluIGVsZW0gKSB7Ci0JCQkJCQllbGVtWyBwcm9wTmFtZSBdID0gZmFsc2U7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9LAotCi0JYXR0ckhvb2tzOiB7Ci0JCXR5cGU6IHsKLQkJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotCQkJCS8vIFdlIGNhbid0IGFsbG93IHRoZSB0eXBlIHByb3BlcnR5IHRvIGJlIGNoYW5nZWQgKHNpbmNlIGl0IGNhdXNlcyBwcm9ibGVtcyBpbiBJRSkKLQkJCQlpZiAoIHJ0eXBlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7Ci0JCQkJCWpRdWVyeS5lcnJvciggInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIgKTsKLQkJCQl9IGVsc2UgaWYgKCAhalF1ZXJ5LnN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gInJhZGlvIiAmJiBqUXVlcnkubm9kZU5hbWUoZWxlbSwgImlucHV0IikgKSB7Ci0JCQkJCS8vIFNldHRpbmcgdGhlIHR5cGUgb24gYSByYWRpbyBidXR0b24gYWZ0ZXIgdGhlIHZhbHVlIHJlc2V0cyB0aGUgdmFsdWUgaW4gSUU2LTkKLQkJCQkJLy8gUmVzZXQgdmFsdWUgdG8gaXQncyBkZWZhdWx0IGluIGNhc2UgdHlwZSBpcyBzZXQgYWZ0ZXIgdmFsdWUKLQkJCQkJLy8gVGhpcyBpcyBmb3IgZWxlbWVudCBjcmVhdGlvbgotCQkJCQl2YXIgdmFsID0gZWxlbS52YWx1ZTsKLQkJCQkJZWxlbS5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgdmFsdWUgKTsKLQkJCQkJaWYgKCB2YWwgKSB7Ci0JCQkJCQllbGVtLnZhbHVlID0gdmFsOwotCQkJCQl9Ci0JCQkJCXJldHVybiB2YWx1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0sCi0JCS8vIFVzZSB0aGUgdmFsdWUgcHJvcGVydHkgZm9yIGJhY2sgY29tcGF0Ci0JCS8vIFVzZSB0aGUgbm9kZUhvb2sgZm9yIGJ1dHRvbiBlbGVtZW50cyBpbiBJRTYvNyAoIzE5NTQpCi0JCXZhbHVlOiB7Ci0JCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotCQkJCWlmICggbm9kZUhvb2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApICkgewotCQkJCQlyZXR1cm4gbm9kZUhvb2suZ2V0KCBlbGVtLCBuYW1lICk7Ci0JCQkJfQotCQkJCXJldHVybiBuYW1lIGluIGVsZW0gPwotCQkJCQllbGVtLnZhbHVlIDoKLQkJCQkJbnVsbDsKLQkJCX0sCi0JCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKLQkJCQlpZiAoIG5vZGVIb29rICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIgKSApIHsKLQkJCQkJcmV0dXJuIG5vZGVIb29rLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKTsKLQkJCQl9Ci0JCQkJLy8gRG9lcyBub3QgcmV0dXJuIHNvIHRoYXQgc2V0QXR0cmlidXRlIGlzIGFsc28gdXNlZAotCQkJCWVsZW0udmFsdWUgPSB2YWx1ZTsKLQkJCX0KLQkJfQotCX0sCi0KLQlwcm9wRml4OiB7Ci0JCXRhYmluZGV4OiAidGFiSW5kZXgiLAotCQlyZWFkb25seTogInJlYWRPbmx5IiwKLQkJImZvciI6ICJodG1sRm9yIiwKLQkJImNsYXNzIjogImNsYXNzTmFtZSIsCi0JCW1heGxlbmd0aDogIm1heExlbmd0aCIsCi0JCWNlbGxzcGFjaW5nOiAiY2VsbFNwYWNpbmciLAotCQljZWxscGFkZGluZzogImNlbGxQYWRkaW5nIiwKLQkJcm93c3BhbjogInJvd1NwYW4iLAotCQljb2xzcGFuOiAiY29sU3BhbiIsCi0JCXVzZW1hcDogInVzZU1hcCIsCi0JCWZyYW1lYm9yZGVyOiAiZnJhbWVCb3JkZXIiLAotCQljb250ZW50ZWRpdGFibGU6ICJjb250ZW50RWRpdGFibGUiCi0JfSwKLQotCXByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKLQkJdmFyIHJldCwgaG9va3MsIG5vdHhtbCwKLQkJCW5UeXBlID0gZWxlbS5ub2RlVHlwZTsKLQotCQkvLyBkb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCi0JCWlmICggIWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlub3R4bWwgPSBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7Ci0KLQkJaWYgKCBub3R4bWwgKSB7Ci0JCQkvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzCi0JCQluYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOwotCQkJaG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07Ci0JCX0KLQotCQlpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7Ci0JCQlpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkpICE9PSB1bmRlZmluZWQgKSB7Ci0JCQkJcmV0dXJuIHJldDsKLQotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApOwotCQkJfQotCi0JCX0gZWxzZSB7Ci0JCQlpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7Ci0JCQkJcmV0dXJuIHJldDsKLQotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gZWxlbVsgbmFtZSBdOwotCQkJfQotCQl9Ci0JfSwKLQotCXByb3BIb29rczogewotCQl0YWJJbmRleDogewotCQkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLQkJCQkvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0Ci0JCQkJLy8gaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC8KLQkJCQl2YXIgYXR0cmlidXRlTm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTsKLQotCQkJCXJldHVybiBhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkID8KLQkJCQkJcGFyc2VJbnQoIGF0dHJpYnV0ZU5vZGUudmFsdWUsIDEwICkgOgotCQkJCQlyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fCByY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiBlbGVtLmhyZWYgPwotCQkJCQkJMCA6Ci0JCQkJCQl1bmRlZmluZWQ7Ci0JCQl9Ci0JCX0KLQl9Ci19KTsKLQotLy8gQWRkIHRoZSB0YWJJbmRleCBwcm9wSG9vayB0byBhdHRySG9va3MgZm9yIGJhY2stY29tcGF0IChkaWZmZXJlbnQgY2FzZSBpcyBpbnRlbnRpb25hbCkKLWpRdWVyeS5hdHRySG9va3MudGFiaW5kZXggPSBqUXVlcnkucHJvcEhvb2tzLnRhYkluZGV4OwotCi0vLyBIb29rIGZvciBib29sZWFuIGF0dHJpYnV0ZXMKLWJvb2xIb29rID0gewotCWdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0JCS8vIEFsaWduIGJvb2xlYW4gYXR0cmlidXRlcyB3aXRoIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcwotCQkvLyBGYWxsIGJhY2sgdG8gYXR0cmlidXRlIHByZXNlbmNlIHdoZXJlIHNvbWUgYm9vbGVhbnMgYXJlIG5vdCBzdXBwb3J0ZWQKLQkJdmFyIGF0dHJOb2RlLAotCQkJcHJvcGVydHkgPSBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSApOwotCQlyZXR1cm4gcHJvcGVydHkgPT09IHRydWUgfHwgdHlwZW9mIHByb3BlcnR5ICE9PSAiYm9vbGVhbiIgJiYgKCBhdHRyTm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShuYW1lKSApICYmIGF0dHJOb2RlLm5vZGVWYWx1ZSAhPT0gZmFsc2UgPwotCQkJbmFtZS50b0xvd2VyQ2FzZSgpIDoKLQkJCXVuZGVmaW5lZDsKLQl9LAotCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewotCQl2YXIgcHJvcE5hbWU7Ci0JCWlmICggdmFsdWUgPT09IGZhbHNlICkgewotCQkJLy8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZQotCQkJalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKLQkJfSBlbHNlIHsKLQkJCS8vIHZhbHVlIGlzIHRydWUgc2luY2Ugd2Uga25vdyBhdCB0aGlzIHBvaW50IGl0J3MgdHlwZSBib29sZWFuIGFuZCBub3QgZmFsc2UKLQkJCS8vIFNldCBib29sZWFuIGF0dHJpYnV0ZXMgdG8gdGhlIHNhbWUgbmFtZSBhbmQgc2V0IHRoZSBET00gcHJvcGVydHkKLQkJCXByb3BOYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOwotCQkJaWYgKCBwcm9wTmFtZSBpbiBlbGVtICkgewotCQkJCS8vIE9ubHkgc2V0IHRoZSBJREwgc3BlY2lmaWNhbGx5IGlmIGl0IGFscmVhZHkgZXhpc3RzIG9uIHRoZSBlbGVtZW50Ci0JCQkJZWxlbVsgcHJvcE5hbWUgXSA9IHRydWU7Ci0JCQl9Ci0KLQkJCWVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgKTsKLQkJfQotCQlyZXR1cm4gbmFtZTsKLQl9Ci19OwotCi0vLyBJRTYvNyBkbyBub3Qgc3VwcG9ydCBnZXR0aW5nL3NldHRpbmcgc29tZSBhdHRyaWJ1dGVzIHdpdGggZ2V0L3NldEF0dHJpYnV0ZQotaWYgKCAhZ2V0U2V0QXR0cmlidXRlICkgewotCi0JZml4U3BlY2lmaWVkID0gewotCQluYW1lOiB0cnVlLAotCQlpZDogdHJ1ZQotCX07Ci0KLQkvLyBVc2UgdGhpcyBmb3IgYW55IGF0dHJpYnV0ZSBpbiBJRTYvNwotCS8vIFRoaXMgZml4ZXMgYWxtb3N0IGV2ZXJ5IElFNi83IGlzc3VlCi0Jbm9kZUhvb2sgPSBqUXVlcnkudmFsSG9va3MuYnV0dG9uID0gewotCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotCQkJdmFyIHJldDsKLQkJCXJldCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwotCQkJcmV0dXJuIHJldCAmJiAoIGZpeFNwZWNpZmllZFsgbmFtZSBdID8gcmV0Lm5vZGVWYWx1ZSAhPT0gIiIgOiByZXQuc3BlY2lmaWVkICkgPwotCQkJCXJldC5ub2RlVmFsdWUgOgotCQkJCXVuZGVmaW5lZDsKLQkJfSwKLQkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7Ci0JCQkvLyBTZXQgdGhlIGV4aXN0aW5nIG9yIGNyZWF0ZSBhIG5ldyBhdHRyaWJ1dGUgbm9kZQotCQkJdmFyIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwotCQkJaWYgKCAhcmV0ICkgewotCQkJCXJldCA9IGRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSggbmFtZSApOwotCQkJCWVsZW0uc2V0QXR0cmlidXRlTm9kZSggcmV0ICk7Ci0JCQl9Ci0JCQlyZXR1cm4gKCByZXQubm9kZVZhbHVlID0gdmFsdWUgKyAiIiApOwotCQl9Ci0JfTsKLQotCS8vIEFwcGx5IHRoZSBub2RlSG9vayB0byB0YWJpbmRleAotCWpRdWVyeS5hdHRySG9va3MudGFiaW5kZXguc2V0ID0gbm9kZUhvb2suc2V0OwotCi0JLy8gU2V0IHdpZHRoIGFuZCBoZWlnaHQgdG8gYXV0byBpbnN0ZWFkIG9mIDAgb24gZW1wdHkgc3RyaW5nKCBCdWcgIzgxNTAgKQotCS8vIFRoaXMgaXMgZm9yIHJlbW92YWxzCi0JalF1ZXJ5LmVhY2goWyAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKLQkJalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7Ci0JCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLQkJCQlpZiAoIHZhbHVlID09PSAiIiApIHsKLQkJCQkJZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsICJhdXRvIiApOwotCQkJCQlyZXR1cm4gdmFsdWU7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQl9KTsKLQotCS8vIFNldCBjb250ZW50ZWRpdGFibGUgdG8gZmFsc2Ugb24gcmVtb3ZhbHMoIzEwNDI5KQotCS8vIFNldHRpbmcgdG8gZW1wdHkgc3RyaW5nIHRocm93cyBhbiBlcnJvciBhcyBhbiBpbnZhbGlkIHZhbHVlCi0JalF1ZXJ5LmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGUgPSB7Ci0JCWdldDogbm9kZUhvb2suZ2V0LAotCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKLQkJCWlmICggdmFsdWUgPT09ICIiICkgewotCQkJCXZhbHVlID0gImZhbHNlIjsKLQkJCX0KLQkJCW5vZGVIb29rLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKTsKLQkJfQotCX07Ci19Ci0KLQotLy8gU29tZSBhdHRyaWJ1dGVzIHJlcXVpcmUgYSBzcGVjaWFsIGNhbGwgb24gSUUKLWlmICggIWpRdWVyeS5zdXBwb3J0LmhyZWZOb3JtYWxpemVkICkgewotCWpRdWVyeS5lYWNoKFsgImhyZWYiLCAic3JjIiwgIndpZHRoIiwgImhlaWdodCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0JCWpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSwgewotCQkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLQkJCQl2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIDIgKTsKLQkJCQlyZXR1cm4gcmV0ID09PSBudWxsID8gdW5kZWZpbmVkIDogcmV0OwotCQkJfQotCQl9KTsKLQl9KTsKLX0KLQotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3R5bGUgKSB7Ci0JalF1ZXJ5LmF0dHJIb29rcy5zdHlsZSA9IHsKLQkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLQkJCS8vIFJldHVybiB1bmRlZmluZWQgaW4gdGhlIGNhc2Ugb2YgZW1wdHkgc3RyaW5nCi0JCQkvLyBOb3JtYWxpemUgdG8gbG93ZXJjYXNlIHNpbmNlIElFIHVwcGVyY2FzZXMgY3NzIHByb3BlcnR5IG5hbWVzCi0JCQlyZXR1cm4gZWxlbS5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCkgfHwgdW5kZWZpbmVkOwotCQl9LAotCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLQkJCXJldHVybiAoIGVsZW0uc3R5bGUuY3NzVGV4dCA9ICIiICsgdmFsdWUgKTsKLQkJfQotCX07Ci19Ci0KLS8vIFNhZmFyaSBtaXMtcmVwb3J0cyB0aGUgZGVmYXVsdCBzZWxlY3RlZCBwcm9wZXJ0eSBvZiBhbiBvcHRpb24KLS8vIEFjY2Vzc2luZyB0aGUgcGFyZW50J3Mgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eSBmaXhlcyBpdAotaWYgKCAhalF1ZXJ5LnN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7Ci0JalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQsIHsKLQkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLQkJCXZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7Ci0KLQkJCWlmICggcGFyZW50ICkgewotCQkJCXBhcmVudC5zZWxlY3RlZEluZGV4OwotCi0JCQkJLy8gTWFrZSBzdXJlIHRoYXQgaXQgYWxzbyB3b3JrcyB3aXRoIG9wdGdyb3Vwcywgc2VlICM1NzAxCi0JCQkJaWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHsKLQkJCQkJcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0pOwotfQotCi0vLyBJRTYvNyBjYWxsIGVuY3R5cGUgZW5jb2RpbmcKLWlmICggIWpRdWVyeS5zdXBwb3J0LmVuY3R5cGUgKSB7Ci0JalF1ZXJ5LnByb3BGaXguZW5jdHlwZSA9ICJlbmNvZGluZyI7Ci19Ci0KLS8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5jaGVja09uICkgewotCWpRdWVyeS5lYWNoKFsgInJhZGlvIiwgImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKLQkJalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7Ci0JCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotCQkJCS8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBpbiBXZWJraXQgIiIgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiAib24iIGlmIGEgdmFsdWUgaXNuJ3Qgc3BlY2lmaWVkCi0JCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpID09PSBudWxsID8gIm9uIiA6IGVsZW0udmFsdWU7Ci0JCQl9Ci0JCX07Ci0JfSk7Ci19Ci1qUXVlcnkuZWFjaChbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7Ci0JalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSwgewotCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLQkJCWlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7Ci0JCQkJcmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeShlbGVtKS52YWwoKSwgdmFsdWUgKSA+PSAwICk7Ci0JCQl9Ci0JCX0KLQl9KTsKLX0pOwotCi0KLQotCi12YXIgcmZvcm1FbGVtcyA9IC9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSwKLQlydHlwZW5hbWVzcGFjZSA9IC9eKFteXC5dKik/KD86XC4oLispKT8kLywKLQlyaG92ZXJIYWNrID0gL1xiaG92ZXIoXC5cUyspP1xiLywKLQlya2V5RXZlbnQgPSAvXmtleS8sCi0Jcm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sCi0JcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sCi0JcnF1aWNrSXMgPSAvXihcdyopKD86IyhbXHdcLV0rKSk/KD86XC4oW1x3XC1dKykpPyQvLAotCXF1aWNrUGFyc2UgPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0JCXZhciBxdWljayA9IHJxdWlja0lzLmV4ZWMoIHNlbGVjdG9yICk7Ci0JCWlmICggcXVpY2sgKSB7Ci0JCQkvLyAgIDAgIDEgICAgMiAgIDMKLQkJCS8vIFsgXywgdGFnLCBpZCwgY2xhc3MgXQotCQkJcXVpY2tbMV0gPSAoIHF1aWNrWzFdIHx8ICIiICkudG9Mb3dlckNhc2UoKTsKLQkJCXF1aWNrWzNdID0gcXVpY2tbM10gJiYgbmV3IFJlZ0V4cCggIig/Ol58XFxzKSIgKyBxdWlja1szXSArICIoPzpcXHN8JCkiICk7Ci0JCX0KLQkJcmV0dXJuIHF1aWNrOwotCX0sCi0JcXVpY2tJcyA9IGZ1bmN0aW9uKCBlbGVtLCBtICkgewotCQl2YXIgYXR0cnMgPSBlbGVtLmF0dHJpYnV0ZXMgfHwge307Ci0JCXJldHVybiAoCi0JCQkoIW1bMV0gfHwgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBtWzFdKSAmJgotCQkJKCFtWzJdIHx8IChhdHRycy5pZCB8fCB7fSkudmFsdWUgPT09IG1bMl0pICYmCi0JCQkoIW1bM10gfHwgbVszXS50ZXN0KCAoYXR0cnNbICJjbGFzcyIgXSB8fCB7fSkudmFsdWUgKSkKLQkJKTsKLQl9LAotCWhvdmVySGFjayA9IGZ1bmN0aW9uKCBldmVudHMgKSB7Ci0JCXJldHVybiBqUXVlcnkuZXZlbnQuc3BlY2lhbC5ob3ZlciA/IGV2ZW50cyA6IGV2ZW50cy5yZXBsYWNlKCByaG92ZXJIYWNrLCAibW91c2VlbnRlciQxIG1vdXNlbGVhdmUkMSIgKTsKLQl9OwotCi0vKgotICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgotICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy4KLSAqLwotalF1ZXJ5LmV2ZW50ID0gewotCi0JYWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkgewotCi0JCXZhciBlbGVtRGF0YSwgZXZlbnRIYW5kbGUsIGV2ZW50cywKLQkJCXQsIHRucywgdHlwZSwgbmFtZXNwYWNlcywgaGFuZGxlT2JqLAotCQkJaGFuZGxlT2JqSW4sIHF1aWNrLCBoYW5kbGVycywgc3BlY2lhbDsKLQotCQkvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5vRGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGFsbG93IHBsYWluIG9iamVjdHMgdGhvKQotCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhdHlwZXMgfHwgIWhhbmRsZXIgfHwgIShlbGVtRGF0YSA9IGpRdWVyeS5fZGF0YSggZWxlbSApKSApIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCS8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlcgotCQlpZiAoIGhhbmRsZXIuaGFuZGxlciApIHsKLQkJCWhhbmRsZU9iakluID0gaGFuZGxlcjsKLQkJCWhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyOwotCQl9Ci0KLQkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyCi0JCWlmICggIWhhbmRsZXIuZ3VpZCApIHsKLQkJCWhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7Ci0JCX0KLQotCQkvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0Ci0JCWV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50czsKLQkJaWYgKCAhZXZlbnRzICkgewotCQkJZWxlbURhdGEuZXZlbnRzID0gZXZlbnRzID0ge307Ci0JCX0KLQkJZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGU7Ci0JCWlmICggIWV2ZW50SGFuZGxlICkgewotCQkJZWxlbURhdGEuaGFuZGxlID0gZXZlbnRIYW5kbGUgPSBmdW5jdGlvbiggZSApIHsKLQkJCQkvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZAotCQkJCS8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWQKLQkJCQlyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gInVuZGVmaW5lZCIgJiYgKCFlIHx8IGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSkgPwotCQkJCQlqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGV2ZW50SGFuZGxlLmVsZW0sIGFyZ3VtZW50cyApIDoKLQkJCQkJdW5kZWZpbmVkOwotCQkJfTsKLQkJCS8vIEFkZCBlbGVtIGFzIGEgcHJvcGVydHkgb2YgdGhlIGhhbmRsZSBmbiB0byBwcmV2ZW50IGEgbWVtb3J5IGxlYWsgd2l0aCBJRSBub24tbmF0aXZlIGV2ZW50cwotCQkJZXZlbnRIYW5kbGUuZWxlbSA9IGVsZW07Ci0JCX0KLQotCQkvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlCi0JCS8vIGpRdWVyeSguLi4pLmJpbmQoIm1vdXNlb3ZlciBtb3VzZW91dCIsIGZuKTsKLQkJdHlwZXMgPSBqUXVlcnkudHJpbSggaG92ZXJIYWNrKHR5cGVzKSApLnNwbGl0KCAiICIgKTsKLQkJZm9yICggdCA9IDA7IHQgPCB0eXBlcy5sZW5ndGg7IHQrKyApIHsKLQotCQkJdG5zID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbdF0gKSB8fCBbXTsKLQkJCXR5cGUgPSB0bnNbMV07Ci0JCQluYW1lc3BhY2VzID0gKCB0bnNbMl0gfHwgIiIgKS5zcGxpdCggIi4iICkuc29ydCgpOwotCi0JCQkvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGUKLQkJCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwotCi0JCQkvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGUKLQkJCXR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsKLQotCQkJLy8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZQotCQkJc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307Ci0KLQkJCS8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzCi0JCQloYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKHsKLQkJCQl0eXBlOiB0eXBlLAotCQkJCW9yaWdUeXBlOiB0bnNbMV0sCi0JCQkJZGF0YTogZGF0YSwKLQkJCQloYW5kbGVyOiBoYW5kbGVyLAotCQkJCWd1aWQ6IGhhbmRsZXIuZ3VpZCwKLQkJCQlzZWxlY3Rvcjogc2VsZWN0b3IsCi0JCQkJcXVpY2s6IHF1aWNrUGFyc2UoIHNlbGVjdG9yICksCi0JCQkJbmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIi4iKQotCQkJfSwgaGFuZGxlT2JqSW4gKTsKLQotCQkJLy8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3QKLQkJCWhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF07Ci0JCQlpZiAoICFoYW5kbGVycyApIHsKLQkJCQloYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107Ci0JCQkJaGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7Ci0KLQkJCQkvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyL2F0dGFjaEV2ZW50IGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2UKLQkJCQlpZiAoICFzcGVjaWFsLnNldHVwIHx8IHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7Ci0JCQkJCS8vIEJpbmQgdGhlIGdsb2JhbCBldmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50Ci0JCQkJCWlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkgewotCQkJCQkJZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSwgZmFsc2UgKTsKLQotCQkJCQl9IGVsc2UgaWYgKCBlbGVtLmF0dGFjaEV2ZW50ICkgewotCQkJCQkJZWxlbS5hdHRhY2hFdmVudCggIm9uIiArIHR5cGUsIGV2ZW50SGFuZGxlICk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmICggc3BlY2lhbC5hZGQgKSB7Ci0JCQkJc3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7Ci0KLQkJCQlpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkgewotCQkJCQloYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkOwotCQkJCX0KLQkJCX0KLQotCQkJLy8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnQKLQkJCWlmICggc2VsZWN0b3IgKSB7Ci0JCQkJaGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApOwotCQkJfSBlbHNlIHsKLQkJCQloYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTsKLQkJCX0KLQotCQkJLy8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvbgotCQkJalF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTsKLQkJfQotCi0JCS8vIE51bGxpZnkgZWxlbSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBJRQotCQllbGVtID0gbnVsbDsKLQl9LAotCi0JZ2xvYmFsOiB7fSwKLQotCS8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudAotCXJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7Ci0KLQkJdmFyIGVsZW1EYXRhID0galF1ZXJ5Lmhhc0RhdGEoIGVsZW0gKSAmJiBqUXVlcnkuX2RhdGEoIGVsZW0gKSwKLQkJCXQsIHRucywgdHlwZSwgb3JpZ1R5cGUsIG5hbWVzcGFjZXMsIG9yaWdDb3VudCwKLQkJCWosIGV2ZW50cywgc3BlY2lhbCwgaGFuZGxlLCBldmVudFR5cGUsIGhhbmRsZU9iajsKLQotCQlpZiAoICFlbGVtRGF0YSB8fCAhKGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cykgKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQkvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkCi0JCXR5cGVzID0galF1ZXJ5LnRyaW0oIGhvdmVySGFjayggdHlwZXMgfHwgIiIgKSApLnNwbGl0KCIgIik7Ci0JCWZvciAoIHQgPSAwOyB0IDwgdHlwZXMubGVuZ3RoOyB0KysgKSB7Ci0JCQl0bnMgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdOwotCQkJdHlwZSA9IG9yaWdUeXBlID0gdG5zWzFdOwotCQkJbmFtZXNwYWNlcyA9IHRuc1syXTsKLQotCQkJLy8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50Ci0JCQlpZiAoICF0eXBlICkgewotCQkJCWZvciAoIHR5cGUgaW4gZXZlbnRzICkgewotCQkJCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTsKLQkJCQl9Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwotCQkJdHlwZSA9ICggc2VsZWN0b3I/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7Ci0JCQlldmVudFR5cGUgPSBldmVudHNbIHR5cGUgXSB8fCBbXTsKLQkJCW9yaWdDb3VudCA9IGV2ZW50VHlwZS5sZW5ndGg7Ci0JCQluYW1lc3BhY2VzID0gbmFtZXNwYWNlcyA/IG5ldyBSZWdFeHAoIihefFxcLikiICsgbmFtZXNwYWNlcy5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxcLik/IikgKyAiKFxcLnwkKSIpIDogbnVsbDsKLQotCQkJLy8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50cwotCQkJZm9yICggaiA9IDA7IGogPCBldmVudFR5cGUubGVuZ3RoOyBqKysgKSB7Ci0JCQkJaGFuZGxlT2JqID0gZXZlbnRUeXBlWyBqIF07Ci0KLQkJCQlpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmCi0JCQkJCSAoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJgotCQkJCQkgKCAhbmFtZXNwYWNlcyB8fCBuYW1lc3BhY2VzLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmCi0JCQkJCSAoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSAiKioiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkgewotCQkJCQlldmVudFR5cGUuc3BsaWNlKCBqLS0sIDEgKTsKLQotCQkJCQlpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHsKLQkJCQkJCWV2ZW50VHlwZS5kZWxlZ2F0ZUNvdW50LS07Ci0JCQkJCX0KLQkJCQkJaWYgKCBzcGVjaWFsLnJlbW92ZSApIHsKLQkJCQkJCXNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQkvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0Ci0JCQkvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycykKLQkJCWlmICggZXZlbnRUeXBlLmxlbmd0aCA9PT0gMCAmJiBvcmlnQ291bnQgIT09IGV2ZW50VHlwZS5sZW5ndGggKSB7Ci0JCQkJaWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fCBzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMgKSA9PT0gZmFsc2UgKSB7Ci0JCQkJCWpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7Ci0JCQkJfQotCi0JCQkJZGVsZXRlIGV2ZW50c1sgdHlwZSBdOwotCQkJfQotCQl9Ci0KLQkJLy8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWQKLQkJaWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7Ci0JCQloYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGU7Ci0JCQlpZiAoIGhhbmRsZSApIHsKLQkJCQloYW5kbGUuZWxlbSA9IG51bGw7Ci0JCQl9Ci0KLQkJCS8vIHJlbW92ZURhdGEgYWxzbyBjaGVja3MgZm9yIGVtcHRpbmVzcyBhbmQgY2xlYXJzIHRoZSBleHBhbmRvIGlmIGVtcHR5Ci0JCQkvLyBzbyB1c2UgaXQgaW5zdGVhZCBvZiBkZWxldGUKLQkJCWpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCBbICJldmVudHMiLCAiaGFuZGxlIiBdLCB0cnVlICk7Ci0JCX0KLQl9LAotCi0JLy8gRXZlbnRzIHRoYXQgYXJlIHNhZmUgdG8gc2hvcnQtY2lyY3VpdCBpZiBubyBoYW5kbGVycyBhcmUgYXR0YWNoZWQuCi0JLy8gTmF0aXZlIERPTSBldmVudHMgc2hvdWxkIG5vdCBiZSBhZGRlZCwgdGhleSBtYXkgaGF2ZSBpbmxpbmUgaGFuZGxlcnMuCi0JY3VzdG9tRXZlbnQ6IHsKLQkJImdldERhdGEiOiB0cnVlLAotCQkic2V0RGF0YSI6IHRydWUsCi0JCSJjaGFuZ2VEYXRhIjogdHJ1ZQotCX0sCi0KLQl0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHsKLQkJLy8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKLQkJaWYgKCBlbGVtICYmIChlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDgpICkgewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLy8gRXZlbnQgb2JqZWN0IG9yIGV2ZW50IHR5cGUKLQkJdmFyIHR5cGUgPSBldmVudC50eXBlIHx8IGV2ZW50LAotCQkJbmFtZXNwYWNlcyA9IFtdLAotCQkJY2FjaGUsIGV4Y2x1c2l2ZSwgaSwgY3VyLCBvbGQsIG9udHlwZSwgc3BlY2lhbCwgaGFuZGxlLCBldmVudFBhdGgsIGJ1YmJsZVR5cGU7Ci0KLQkJLy8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93Ci0JCWlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCWlmICggdHlwZS5pbmRleE9mKCAiISIgKSA+PSAwICkgewotCQkJLy8gRXhjbHVzaXZlIGV2ZW50cyB0cmlnZ2VyIG9ubHkgZm9yIHRoZSBleGFjdCBldmVudCAobm8gbmFtZXNwYWNlcykKLQkJCXR5cGUgPSB0eXBlLnNsaWNlKDAsIC0xKTsKLQkJCWV4Y2x1c2l2ZSA9IHRydWU7Ci0JCX0KLQotCQlpZiAoIHR5cGUuaW5kZXhPZiggIi4iICkgPj0gMCApIHsKLQkJCS8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKCkKLQkJCW5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7Ci0JCQl0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpOwotCQkJbmFtZXNwYWNlcy5zb3J0KCk7Ci0JCX0KLQotCQlpZiAoICghZWxlbSB8fCBqUXVlcnkuZXZlbnQuY3VzdG9tRXZlbnRbIHR5cGUgXSkgJiYgIWpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSApIHsKLQkJCS8vIE5vIGpRdWVyeSBoYW5kbGVycyBmb3IgdGhpcyBldmVudCB0eXBlLCBhbmQgaXQgY2FuJ3QgaGF2ZSBpbmxpbmUgaGFuZGxlcnMKLQkJCXJldHVybjsKLQkJfQotCi0JCS8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBFdmVudCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nCi0JCWV2ZW50ID0gdHlwZW9mIGV2ZW50ID09PSAib2JqZWN0IiA/Ci0JCQkvLyBqUXVlcnkuRXZlbnQgb2JqZWN0Ci0JCQlldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/IGV2ZW50IDoKLQkJCS8vIE9iamVjdCBsaXRlcmFsCi0JCQluZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCBldmVudCApIDoKLQkJCS8vIEp1c3QgdGhlIGV2ZW50IHR5cGUgKHN0cmluZykKLQkJCW5ldyBqUXVlcnkuRXZlbnQoIHR5cGUgKTsKLQotCQlldmVudC50eXBlID0gdHlwZTsKLQkJZXZlbnQuaXNUcmlnZ2VyID0gdHJ1ZTsKLQkJZXZlbnQuZXhjbHVzaXZlID0gZXhjbHVzaXZlOwotCQlldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oICIuIiApOwotCQlldmVudC5uYW1lc3BhY2VfcmUgPSBldmVudC5uYW1lc3BhY2U/IG5ldyBSZWdFeHAoIihefFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCJcXC4oPzouKlxcLik/IikgKyAiKFxcLnwkKSIpIDogbnVsbDsKLQkJb250eXBlID0gdHlwZS5pbmRleE9mKCAiOiIgKSA8IDAgPyAib24iICsgdHlwZSA6ICIiOwotCi0JCS8vIEhhbmRsZSBhIGdsb2JhbCB0cmlnZ2VyCi0JCWlmICggIWVsZW0gKSB7Ci0KLQkJCS8vIFRPRE86IFN0b3AgdGF1bnRpbmcgdGhlIGRhdGEgY2FjaGU7IHJlbW92ZSBnbG9iYWwgZXZlbnRzIGFuZCBhbHdheXMgYXR0YWNoIHRvIGRvY3VtZW50Ci0JCQljYWNoZSA9IGpRdWVyeS5jYWNoZTsKLQkJCWZvciAoIGkgaW4gY2FjaGUgKSB7Ci0JCQkJaWYgKCBjYWNoZVsgaSBdLmV2ZW50cyAmJiBjYWNoZVsgaSBdLmV2ZW50c1sgdHlwZSBdICkgewotCQkJCQlqUXVlcnkuZXZlbnQudHJpZ2dlciggZXZlbnQsIGRhdGEsIGNhY2hlWyBpIF0uaGFuZGxlLmVsZW0sIHRydWUgKTsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQkvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWQKLQkJZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkOwotCQlpZiAoICFldmVudC50YXJnZXQgKSB7Ci0JCQlldmVudC50YXJnZXQgPSBlbGVtOwotCQl9Ci0KLQkJLy8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdAotCQlkYXRhID0gZGF0YSAhPSBudWxsID8galF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApIDogW107Ci0JCWRhdGEudW5zaGlmdCggZXZlbnQgKTsKLQotCQkvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzCi0JCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwotCQlpZiAoIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQkvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSkKLQkJLy8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNCkKLQkJZXZlbnRQYXRoID0gW1sgZWxlbSwgc3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlIF1dOwotCQlpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgewotCi0JCQlidWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTsKLQkJCWN1ciA9IHJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgPyBlbGVtIDogZWxlbS5wYXJlbnROb2RlOwotCQkJb2xkID0gbnVsbDsKLQkJCWZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHsKLQkJCQlldmVudFBhdGgucHVzaChbIGN1ciwgYnViYmxlVHlwZSBdKTsKLQkJCQlvbGQgPSBjdXI7Ci0JCQl9Ci0KLQkJCS8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKQotCQkJaWYgKCBvbGQgJiYgb2xkID09PSBlbGVtLm93bmVyRG9jdW1lbnQgKSB7Ci0JCQkJZXZlbnRQYXRoLnB1c2goWyBvbGQuZGVmYXVsdFZpZXcgfHwgb2xkLnBhcmVudFdpbmRvdyB8fCB3aW5kb3csIGJ1YmJsZVR5cGUgXSk7Ci0JCQl9Ci0JCX0KLQotCQkvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoCi0JCWZvciAoIGkgPSAwOyBpIDwgZXZlbnRQYXRoLmxlbmd0aCAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTsgaSsrICkgewotCi0JCQljdXIgPSBldmVudFBhdGhbaV1bMF07Ci0JCQlldmVudC50eXBlID0gZXZlbnRQYXRoW2ldWzFdOwotCi0JCQloYW5kbGUgPSAoIGpRdWVyeS5fZGF0YSggY3VyLCAiZXZlbnRzIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSAmJiBqUXVlcnkuX2RhdGEoIGN1ciwgImhhbmRsZSIgKTsKLQkJCWlmICggaGFuZGxlICkgewotCQkJCWhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7Ci0JCQl9Ci0JCQkvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIGJhcmUgSlMgZnVuY3Rpb24gYW5kIG5vdCBhIGpRdWVyeSBoYW5kbGVyCi0JCQloYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTsKLQkJCWlmICggaGFuZGxlICYmIGpRdWVyeS5hY2NlcHREYXRhKCBjdXIgKSAmJiBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApID09PSBmYWxzZSApIHsKLQkJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotCQkJfQotCQl9Ci0JCWV2ZW50LnR5cGUgPSB0eXBlOwotCi0JCS8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3cKLQkJaWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKLQotCQkJaWYgKCAoIXNwZWNpYWwuX2RlZmF1bHQgfHwgc3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZWxlbS5vd25lckRvY3VtZW50LCBkYXRhICkgPT09IGZhbHNlKSAmJgotCQkJCSEodHlwZSA9PT0gImNsaWNrIiAmJiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJhIiApKSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewotCi0JCQkJLy8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIG5hbWUgYXMgdGhlIGV2ZW50LgotCQkJCS8vIENhbid0IHVzZSBhbiAuaXNGdW5jdGlvbigpIGNoZWNrIGhlcmUgYmVjYXVzZSBJRTYvNyBmYWlscyB0aGF0IHRlc3QuCi0JCQkJLy8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKQotCQkJCS8vIElFPDkgZGllcyBvbiBmb2N1cy9ibHVyIHRvIGhpZGRlbiBlbGVtZW50ICgjMTQ4NikKLQkJCQlpZiAoIG9udHlwZSAmJiBlbGVtWyB0eXBlIF0gJiYgKCh0eXBlICE9PSAiZm9jdXMiICYmIHR5cGUgIT09ICJibHVyIikgfHwgZXZlbnQudGFyZ2V0Lm9mZnNldFdpZHRoICE9PSAwKSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7Ci0KLQkJCQkJLy8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZAotCQkJCQlvbGQgPSBlbGVtWyBvbnR5cGUgXTsKLQotCQkJCQlpZiAoIG9sZCApIHsKLQkJCQkJCWVsZW1bIG9udHlwZSBdID0gbnVsbDsKLQkJCQkJfQotCi0JCQkJCS8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlCi0JCQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlOwotCQkJCQllbGVtWyB0eXBlIF0oKTsKLQkJCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDsKLQotCQkJCQlpZiAoIG9sZCApIHsKLQkJCQkJCWVsZW1bIG9udHlwZSBdID0gb2xkOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGV2ZW50LnJlc3VsdDsKLQl9LAotCi0JZGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKLQotCQkvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3QKLQkJZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBldmVudCB8fCB3aW5kb3cuZXZlbnQgKTsKLQotCQl2YXIgaGFuZGxlcnMgPSAoIChqUXVlcnkuX2RhdGEoIHRoaXMsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlwZSBdIHx8IFtdKSwKLQkJCWRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LAotCQkJYXJncyA9IFtdLnNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMCApLAotCQkJcnVuX2FsbCA9ICFldmVudC5leGNsdXNpdmUgJiYgIWV2ZW50Lm5hbWVzcGFjZSwKLQkJCWhhbmRsZXJRdWV1ZSA9IFtdLAotCQkJaSwgaiwgY3VyLCBqcWN1ciwgcmV0LCBzZWxNYXRjaCwgbWF0Y2hlZCwgbWF0Y2hlcywgaGFuZGxlT2JqLCBzZWwsIHJlbGF0ZWQ7Ci0KLQkJLy8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnQKLQkJYXJnc1swXSA9IGV2ZW50OwotCQlldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7Ci0KLQkJLy8gRGV0ZXJtaW5lIGhhbmRsZXJzIHRoYXQgc2hvdWxkIHJ1biBpZiB0aGVyZSBhcmUgZGVsZWdhdGVkIGV2ZW50cwotCQkvLyBBdm9pZCBkaXNhYmxlZCBlbGVtZW50cyBpbiBJRSAoIzY5MTEpIGFuZCBub24tbGVmdC1jbGljayBidWJibGluZyBpbiBGaXJlZm94ICgjMzg2MSkKLQkJaWYgKCBkZWxlZ2F0ZUNvdW50ICYmICFldmVudC50YXJnZXQuZGlzYWJsZWQgJiYgIShldmVudC5idXR0b24gJiYgZXZlbnQudHlwZSA9PT0gImNsaWNrIikgKSB7Ci0KLQkJCS8vIFByZWdlbmVyYXRlIGEgc2luZ2xlIGpRdWVyeSBvYmplY3QgZm9yIHJldXNlIHdpdGggLmlzKCkKLQkJCWpxY3VyID0galF1ZXJ5KHRoaXMpOwotCQkJanFjdXIuY29udGV4dCA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzOwotCi0JCQlmb3IgKCBjdXIgPSBldmVudC50YXJnZXQ7IGN1ciAhPSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkgewotCQkJCXNlbE1hdGNoID0ge307Ci0JCQkJbWF0Y2hlcyA9IFtdOwotCQkJCWpxY3VyWzBdID0gY3VyOwotCQkJCWZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkgewotCQkJCQloYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdOwotCQkJCQlzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3I7Ci0KLQkJCQkJaWYgKCBzZWxNYXRjaFsgc2VsIF0gPT09IHVuZGVmaW5lZCApIHsKLQkJCQkJCXNlbE1hdGNoWyBzZWwgXSA9ICgKLQkJCQkJCQloYW5kbGVPYmoucXVpY2sgPyBxdWlja0lzKCBjdXIsIGhhbmRsZU9iai5xdWljayApIDoganFjdXIuaXMoIHNlbCApCi0JCQkJCQkpOwotCQkJCQl9Ci0JCQkJCWlmICggc2VsTWF0Y2hbIHNlbCBdICkgewotCQkJCQkJbWF0Y2hlcy5wdXNoKCBoYW5kbGVPYmogKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAoIG1hdGNoZXMubGVuZ3RoICkgewotCQkJCQloYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IGN1ciwgbWF0Y2hlczogbWF0Y2hlcyB9KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzCi0JCWlmICggaGFuZGxlcnMubGVuZ3RoID4gZGVsZWdhdGVDb3VudCApIHsKLQkJCWhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogdGhpcywgbWF0Y2hlczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9KTsKLQkJfQotCi0JCS8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzCi0JCWZvciAoIGkgPSAwOyBpIDwgaGFuZGxlclF1ZXVlLmxlbmd0aCAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTsgaSsrICkgewotCQkJbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSBdOwotCQkJZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTsKLQotCQkJZm9yICggaiA9IDA7IGogPCBtYXRjaGVkLm1hdGNoZXMubGVuZ3RoICYmICFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpOyBqKysgKSB7Ci0JCQkJaGFuZGxlT2JqID0gbWF0Y2hlZC5tYXRjaGVzWyBqIF07Ci0KLQkJCQkvLyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCBlaXRoZXIgMSkgYmUgbm9uLWV4Y2x1c2l2ZSBhbmQgaGF2ZSBubyBuYW1lc3BhY2UsIG9yCi0JCQkJLy8gMikgaGF2ZSBuYW1lc3BhY2UocykgYSBzdWJzZXQgb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIGJvdW5kIGV2ZW50IChib3RoIGNhbiBoYXZlIG5vIG5hbWVzcGFjZSkuCi0JCQkJaWYgKCBydW5fYWxsIHx8ICghZXZlbnQubmFtZXNwYWNlICYmICFoYW5kbGVPYmoubmFtZXNwYWNlKSB8fCBldmVudC5uYW1lc3BhY2VfcmUgJiYgZXZlbnQubmFtZXNwYWNlX3JlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHsKLQotCQkJCQlldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7Ci0JCQkJCWV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajsKLQotCQkJCQlyZXQgPSAoIChqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30pLmhhbmRsZSB8fCBoYW5kbGVPYmouaGFuZGxlciApCi0JCQkJCQkJLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTsKLQotCQkJCQlpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkgewotCQkJCQkJZXZlbnQucmVzdWx0ID0gcmV0OwotCQkJCQkJaWYgKCByZXQgPT09IGZhbHNlICkgewotCQkJCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0JCQkJCQkJZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gZXZlbnQucmVzdWx0OwotCX0sCi0KLQkvLyBJbmNsdWRlcyBzb21lIGV2ZW50IHByb3BzIHNoYXJlZCBieSBLZXlFdmVudCBhbmQgTW91c2VFdmVudAotCS8vICoqKiBhdHRyQ2hhbmdlIGF0dHJOYW1lIHJlbGF0ZWROb2RlIHNyY0VsZW1lbnQgIGFyZSBub3Qgbm9ybWFsaXplZCwgbm9uLVczQywgZGVwcmVjYXRlZCwgd2lsbCBiZSByZW1vdmVkIGluIDEuOCAqKioKLQlwcm9wczogImF0dHJDaGFuZ2UgYXR0ck5hbWUgcmVsYXRlZE5vZGUgc3JjRWxlbWVudCBhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBldmVudFBoYXNlIG1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2giLnNwbGl0KCIgIiksCi0KLQlmaXhIb29rczoge30sCi0KLQlrZXlIb29rczogewotCQlwcm9wczogImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksCi0JCWZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHsKLQotCQkJLy8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzCi0JCQlpZiAoIGV2ZW50LndoaWNoID09IG51bGwgKSB7Ci0JCQkJZXZlbnQud2hpY2ggPSBvcmlnaW5hbC5jaGFyQ29kZSAhPSBudWxsID8gb3JpZ2luYWwuY2hhckNvZGUgOiBvcmlnaW5hbC5rZXlDb2RlOwotCQkJfQotCi0JCQlyZXR1cm4gZXZlbnQ7Ci0JCX0KLQl9LAotCi0JbW91c2VIb29rczogewotCQlwcm9wczogImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBmcm9tRWxlbWVudCBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIuc3BsaXQoIiAiKSwKLQkJZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkgewotCQkJdmFyIGV2ZW50RG9jLCBkb2MsIGJvZHksCi0JCQkJYnV0dG9uID0gb3JpZ2luYWwuYnV0dG9uLAotCQkJCWZyb21FbGVtZW50ID0gb3JpZ2luYWwuZnJvbUVsZW1lbnQ7Ci0KLQkJCS8vIENhbGN1bGF0ZSBwYWdlWC9ZIGlmIG1pc3NpbmcgYW5kIGNsaWVudFgvWSBhdmFpbGFibGUKLQkJCWlmICggZXZlbnQucGFnZVggPT0gbnVsbCAmJiBvcmlnaW5hbC5jbGllbnRYICE9IG51bGwgKSB7Ci0JCQkJZXZlbnREb2MgPSBldmVudC50YXJnZXQub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDsKLQkJCQlkb2MgPSBldmVudERvYy5kb2N1bWVudEVsZW1lbnQ7Ci0JCQkJYm9keSA9IGV2ZW50RG9jLmJvZHk7Ci0KLQkJCQlldmVudC5wYWdlWCA9IG9yaWdpbmFsLmNsaWVudFggKyAoIGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsTGVmdCB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50TGVmdCB8fCBib2R5ICYmIGJvZHkuY2xpZW50TGVmdCB8fCAwICk7Ci0JCQkJZXZlbnQucGFnZVkgPSBvcmlnaW5hbC5jbGllbnRZICsgKCBkb2MgJiYgZG9jLnNjcm9sbFRvcCAgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRvcCAgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudFRvcCAgfHwgYm9keSAmJiBib2R5LmNsaWVudFRvcCAgfHwgMCApOwotCQkJfQotCi0JCQkvLyBBZGQgcmVsYXRlZFRhcmdldCwgaWYgbmVjZXNzYXJ5Ci0JCQlpZiAoICFldmVudC5yZWxhdGVkVGFyZ2V0ICYmIGZyb21FbGVtZW50ICkgewotCQkJCWV2ZW50LnJlbGF0ZWRUYXJnZXQgPSBmcm9tRWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0ID8gb3JpZ2luYWwudG9FbGVtZW50IDogZnJvbUVsZW1lbnQ7Ci0JCQl9Ci0KLQkJCS8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHQKLQkJCS8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28gZG9uJ3QgdXNlIGl0Ci0JCQlpZiAoICFldmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCApIHsKLQkJCQlldmVudC53aGljaCA9ICggYnV0dG9uICYgMSA/IDEgOiAoIGJ1dHRvbiAmIDIgPyAzIDogKCBidXR0b24gJiA0ID8gMiA6IDAgKSApICk7Ci0JCQl9Ci0KLQkJCXJldHVybiBldmVudDsKLQkJfQotCX0sCi0KLQlmaXg6IGZ1bmN0aW9uKCBldmVudCApIHsKLQkJaWYgKCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHsKLQkJCXJldHVybiBldmVudDsKLQkJfQotCi0JCS8vIENyZWF0ZSBhIHdyaXRhYmxlIGNvcHkgb2YgdGhlIGV2ZW50IG9iamVjdCBhbmQgbm9ybWFsaXplIHNvbWUgcHJvcGVydGllcwotCQl2YXIgaSwgcHJvcCwKLQkJCW9yaWdpbmFsRXZlbnQgPSBldmVudCwKLQkJCWZpeEhvb2sgPSBqUXVlcnkuZXZlbnQuZml4SG9va3NbIGV2ZW50LnR5cGUgXSB8fCB7fSwKLQkJCWNvcHkgPSBmaXhIb29rLnByb3BzID8gdGhpcy5wcm9wcy5jb25jYXQoIGZpeEhvb2sucHJvcHMgKSA6IHRoaXMucHJvcHM7Ci0KLQkJZXZlbnQgPSBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTsKLQotCQlmb3IgKCBpID0gY29weS5sZW5ndGg7IGk7ICkgewotCQkJcHJvcCA9IGNvcHlbIC0taSBdOwotCQkJZXZlbnRbIHByb3AgXSA9IG9yaWdpbmFsRXZlbnRbIHByb3AgXTsKLQkJfQotCi0JCS8vIEZpeCB0YXJnZXQgcHJvcGVydHksIGlmIG5lY2Vzc2FyeSAoIzE5MjUsIElFIDYvNy84ICYgU2FmYXJpMikKLQkJaWYgKCAhZXZlbnQudGFyZ2V0ICkgewotCQkJZXZlbnQudGFyZ2V0ID0gb3JpZ2luYWxFdmVudC5zcmNFbGVtZW50IHx8IGRvY3VtZW50OwotCQl9Ci0KLQkJLy8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsIFNhZmFyaSkKLQkJaWYgKCBldmVudC50YXJnZXQubm9kZVR5cGUgPT09IDMgKSB7Ci0JCQlldmVudC50YXJnZXQgPSBldmVudC50YXJnZXQucGFyZW50Tm9kZTsKLQkJfQotCi0JCS8vIEZvciBtb3VzZS9rZXkgZXZlbnRzOyBhZGQgbWV0YUtleSBpZiBpdCdzIG5vdCB0aGVyZSAoIzMzNjgsIElFNi83LzgpCi0JCWlmICggZXZlbnQubWV0YUtleSA9PT0gdW5kZWZpbmVkICkgewotCQkJZXZlbnQubWV0YUtleSA9IGV2ZW50LmN0cmxLZXk7Ci0JCX0KLQotCQlyZXR1cm4gZml4SG9vay5maWx0ZXI/IGZpeEhvb2suZmlsdGVyKCBldmVudCwgb3JpZ2luYWxFdmVudCApIDogZXZlbnQ7Ci0JfSwKLQotCXNwZWNpYWw6IHsKLQkJcmVhZHk6IHsKLQkJCS8vIE1ha2Ugc3VyZSB0aGUgcmVhZHkgZXZlbnQgaXMgc2V0dXAKLQkJCXNldHVwOiBqUXVlcnkuYmluZFJlYWR5Ci0JCX0sCi0KLQkJbG9hZDogewotCQkJLy8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZAotCQkJbm9CdWJibGU6IHRydWUKLQkJfSwKLQotCQlmb2N1czogewotCQkJZGVsZWdhdGVUeXBlOiAiZm9jdXNpbiIKLQkJfSwKLQkJYmx1cjogewotCQkJZGVsZWdhdGVUeXBlOiAiZm9jdXNvdXQiCi0JCX0sCi0KLQkJYmVmb3JldW5sb2FkOiB7Ci0JCQlzZXR1cDogZnVuY3Rpb24oIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgewotCQkJCS8vIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIHNwZWNpYWwgY2FzZSBvbiB3aW5kb3dzCi0JCQkJaWYgKCBqUXVlcnkuaXNXaW5kb3coIHRoaXMgKSApIHsKLQkJCQkJdGhpcy5vbmJlZm9yZXVubG9hZCA9IGV2ZW50SGFuZGxlOwotCQkJCX0KLQkJCX0sCi0KLQkJCXRlYXJkb3duOiBmdW5jdGlvbiggbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSB7Ci0JCQkJaWYgKCB0aGlzLm9uYmVmb3JldW5sb2FkID09PSBldmVudEhhbmRsZSApIHsKLQkJCQkJdGhpcy5vbmJlZm9yZXVubG9hZCA9IG51bGw7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfSwKLQotCXNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQsIGJ1YmJsZSApIHsKLQkJLy8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lLgotCQkvLyBGYWtlIG9yaWdpbmFsRXZlbnQgdG8gYXZvaWQgZG9ub3IncyBzdG9wUHJvcGFnYXRpb24sIGJ1dCBpZiB0aGUKLQkJLy8gc2ltdWxhdGVkIGV2ZW50IHByZXZlbnRzIGRlZmF1bHQgdGhlbiB3ZSBkbyB0aGUgc2FtZSBvbiB0aGUgZG9ub3IuCi0JCXZhciBlID0galF1ZXJ5LmV4dGVuZCgKLQkJCW5ldyBqUXVlcnkuRXZlbnQoKSwKLQkJCWV2ZW50LAotCQkJeyB0eXBlOiB0eXBlLAotCQkJCWlzU2ltdWxhdGVkOiB0cnVlLAotCQkJCW9yaWdpbmFsRXZlbnQ6IHt9Ci0JCQl9Ci0JCSk7Ci0JCWlmICggYnViYmxlICkgewotCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTsKLQkJfSBlbHNlIHsKLQkJCWpRdWVyeS5ldmVudC5kaXNwYXRjaC5jYWxsKCBlbGVtLCBlICk7Ci0JCX0KLQkJaWYgKCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpICkgewotCQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKLQkJfQotCX0KLX07Ci0KLS8vIFNvbWUgcGx1Z2lucyBhcmUgdXNpbmcsIGJ1dCBpdCdzIHVuZG9jdW1lbnRlZC9kZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuCi0vLyBUaGUgMS43IHNwZWNpYWwgZXZlbnQgaW50ZXJmYWNlIHNob3VsZCBwcm92aWRlIGFsbCB0aGUgaG9va3MgbmVlZGVkIG5vdy4KLWpRdWVyeS5ldmVudC5oYW5kbGUgPSBqUXVlcnkuZXZlbnQuZGlzcGF0Y2g7Ci0KLWpRdWVyeS5yZW1vdmVFdmVudCA9IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIgPwotCWZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7Ci0JCWlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkgewotCQkJZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUsIGZhbHNlICk7Ci0JCX0KLQl9IDoKLQlmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkgewotCQlpZiAoIGVsZW0uZGV0YWNoRXZlbnQgKSB7Ci0JCQllbGVtLmRldGFjaEV2ZW50KCAib24iICsgdHlwZSwgaGFuZGxlICk7Ci0JCX0KLQl9OwotCi1qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHsKLQkvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQKLQlpZiAoICEodGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCkgKSB7Ci0JCXJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7Ci0JfQotCi0JLy8gRXZlbnQgb2JqZWN0Ci0JaWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7Ci0JCXRoaXMub3JpZ2luYWxFdmVudCA9IHNyYzsKLQkJdGhpcy50eXBlID0gc3JjLnR5cGU7Ci0KLQkJLy8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWQKLQkJLy8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuCi0JCXRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKCBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fCBzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlIHx8Ci0JCQlzcmMuZ2V0UHJldmVudERlZmF1bHQgJiYgc3JjLmdldFByZXZlbnREZWZhdWx0KCkgKSA/IHJldHVyblRydWUgOiByZXR1cm5GYWxzZTsKLQotCS8vIEV2ZW50IHR5cGUKLQl9IGVsc2UgewotCQl0aGlzLnR5cGUgPSBzcmM7Ci0JfQotCi0JLy8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3QKLQlpZiAoIHByb3BzICkgewotCQlqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApOwotCX0KLQotCS8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lCi0JdGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBqUXVlcnkubm93KCk7Ci0KLQkvLyBNYXJrIGl0IGFzIGZpeGVkCi0JdGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7Ci19OwotCi1mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHsKLQlyZXR1cm4gZmFsc2U7Ci19Ci1mdW5jdGlvbiByZXR1cm5UcnVlKCkgewotCXJldHVybiB0cnVlOwotfQotCi0vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAotalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHsKLQlwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7Ci0JCXRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTsKLQotCQl2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKLQkJaWYgKCAhZSApIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCS8vIGlmIHByZXZlbnREZWZhdWx0IGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50Ci0JCWlmICggZS5wcmV2ZW50RGVmYXVsdCApIHsKLQkJCWUucHJldmVudERlZmF1bHQoKTsKLQotCQkvLyBvdGhlcndpc2Ugc2V0IHRoZSByZXR1cm5WYWx1ZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gZmFsc2UgKElFKQotCQl9IGVsc2UgewotCQkJZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwotCQl9Ci0JfSwKLQlzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgewotCQl0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKLQotCQl2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKLQkJaWYgKCAhZSApIHsKLQkJCXJldHVybjsKLQkJfQotCQkvLyBpZiBzdG9wUHJvcGFnYXRpb24gZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKLQkJaWYgKCBlLnN0b3BQcm9wYWdhdGlvbiApIHsKLQkJCWUuc3RvcFByb3BhZ2F0aW9uKCk7Ci0JCX0KLQkJLy8gb3RoZXJ3aXNlIHNldCB0aGUgY2FuY2VsQnViYmxlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0cnVlIChJRSkKLQkJZS5jYW5jZWxCdWJibGUgPSB0cnVlOwotCX0sCi0Jc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKLQkJdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7Ci0JCXRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7Ci0JfSwKLQlpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLAotCWlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKLQlpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UKLX07Ci0KLS8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrcwotalF1ZXJ5LmVhY2goewotCW1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAotCW1vdXNlbGVhdmU6ICJtb3VzZW91dCIKLX0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7Ci0JalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHsKLQkJZGVsZWdhdGVUeXBlOiBmaXgsCi0JCWJpbmRUeXBlOiBmaXgsCi0KLQkJaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0JCQl2YXIgdGFyZ2V0ID0gdGhpcywKLQkJCQlyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCwKLQkJCQloYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmosCi0JCQkJc2VsZWN0b3IgPSBoYW5kbGVPYmouc2VsZWN0b3IsCi0JCQkJcmV0OwotCi0JCQkvLyBGb3IgbW91c2VudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuCi0JCQkvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdwotCQkJaWYgKCAhcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApKSApIHsKLQkJCQlldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlOwotCQkJCXJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLQkJCQlldmVudC50eXBlID0gZml4OwotCQkJfQotCQkJcmV0dXJuIHJldDsKLQkJfQotCX07Ci19KTsKLQotLy8gSUUgc3VibWl0IGRlbGVnYXRpb24KLWlmICggIWpRdWVyeS5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMgKSB7Ci0KLQlqUXVlcnkuZXZlbnQuc3BlY2lhbC5zdWJtaXQgPSB7Ci0JCXNldHVwOiBmdW5jdGlvbigpIHsKLQkJCS8vIE9ubHkgbmVlZCB0aGlzIGZvciBkZWxlZ2F0ZWQgZm9ybSBzdWJtaXQgZXZlbnRzCi0JCQlpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGhpcywgImZvcm0iICkgKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCi0JCQkvLyBMYXp5LWFkZCBhIHN1Ym1pdCBoYW5kbGVyIHdoZW4gYSBkZXNjZW5kYW50IGZvcm0gbWF5IHBvdGVudGlhbGx5IGJlIHN1Ym1pdHRlZAotCQkJalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsIGZ1bmN0aW9uKCBlICkgewotCQkJCS8vIE5vZGUgbmFtZSBjaGVjayBhdm9pZHMgYSBWTUwtcmVsYXRlZCBjcmFzaCBpbiBJRSAoIzk4MDcpCi0JCQkJdmFyIGVsZW0gPSBlLnRhcmdldCwKLQkJCQkJZm9ybSA9IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIgKSA/IGVsZW0uZm9ybSA6IHVuZGVmaW5lZDsKLQkJCQlpZiAoIGZvcm0gJiYgIWZvcm0uX3N1Ym1pdF9hdHRhY2hlZCApIHsKLQkJCQkJalF1ZXJ5LmV2ZW50LmFkZCggZm9ybSwgInN1Ym1pdC5fc3VibWl0IiwgZnVuY3Rpb24oIGV2ZW50ICkgewotCQkJCQkJLy8gSWYgZm9ybSB3YXMgc3VibWl0dGVkIGJ5IHRoZSB1c2VyLCBidWJibGUgdGhlIGV2ZW50IHVwIHRoZSB0cmVlCi0JCQkJCQlpZiAoIHRoaXMucGFyZW50Tm9kZSAmJiAhZXZlbnQuaXNUcmlnZ2VyICkgewotCQkJCQkJCWpRdWVyeS5ldmVudC5zaW11bGF0ZSggInN1Ym1pdCIsIHRoaXMucGFyZW50Tm9kZSwgZXZlbnQsIHRydWUgKTsKLQkJCQkJCX0KLQkJCQkJfSk7Ci0JCQkJCWZvcm0uX3N1Ym1pdF9hdHRhY2hlZCA9IHRydWU7Ci0JCQkJfQotCQkJfSk7Ci0JCQkvLyByZXR1cm4gdW5kZWZpbmVkIHNpbmNlIHdlIGRvbid0IG5lZWQgYW4gZXZlbnQgbGlzdGVuZXIKLQkJfSwKLQotCQl0ZWFyZG93bjogZnVuY3Rpb24oKSB7Ci0JCQkvLyBPbmx5IG5lZWQgdGhpcyBmb3IgZGVsZWdhdGVkIGZvcm0gc3VibWl0IGV2ZW50cwotCQkJaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQotCQkJLy8gUmVtb3ZlIGRlbGVnYXRlZCBoYW5kbGVyczsgY2xlYW5EYXRhIGV2ZW50dWFsbHkgcmVhcHMgc3VibWl0IGhhbmRsZXJzIGF0dGFjaGVkIGFib3ZlCi0JCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLl9zdWJtaXQiICk7Ci0JCX0KLQl9OwotfQotCi0vLyBJRSBjaGFuZ2UgZGVsZWdhdGlvbiBhbmQgY2hlY2tib3gvcmFkaW8gZml4Ci1pZiAoICFqUXVlcnkuc3VwcG9ydC5jaGFuZ2VCdWJibGVzICkgewotCi0JalF1ZXJ5LmV2ZW50LnNwZWNpYWwuY2hhbmdlID0gewotCi0JCXNldHVwOiBmdW5jdGlvbigpIHsKLQotCQkJaWYgKCByZm9ybUVsZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKSApIHsKLQkJCQkvLyBJRSBkb2Vzbid0IGZpcmUgY2hhbmdlIG9uIGEgY2hlY2svcmFkaW8gdW50aWwgYmx1cjsgdHJpZ2dlciBpdCBvbiBjbGljawotCQkJCS8vIGFmdGVyIGEgcHJvcGVydHljaGFuZ2UuIEVhdCB0aGUgYmx1ci1jaGFuZ2UgaW4gc3BlY2lhbC5jaGFuZ2UuaGFuZGxlLgotCQkJCS8vIFRoaXMgc3RpbGwgZmlyZXMgb25jaGFuZ2UgYSBzZWNvbmQgdGltZSBmb3IgY2hlY2svcmFkaW8gYWZ0ZXIgYmx1ci4KLQkJCQlpZiAoIHRoaXMudHlwZSA9PT0gImNoZWNrYm94IiB8fCB0aGlzLnR5cGUgPT09ICJyYWRpbyIgKSB7Ci0JCQkJCWpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIiwgZnVuY3Rpb24oIGV2ZW50ICkgewotCQkJCQkJaWYgKCBldmVudC5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZSA9PT0gImNoZWNrZWQiICkgewotCQkJCQkJCXRoaXMuX2p1c3RfY2hhbmdlZCA9IHRydWU7Ci0JCQkJCQl9Ci0JCQkJCX0pOwotCQkJCQlqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCAiY2xpY2suX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKLQkJCQkJCWlmICggdGhpcy5fanVzdF9jaGFuZ2VkICYmICFldmVudC5pc1RyaWdnZXIgKSB7Ci0JCQkJCQkJdGhpcy5fanVzdF9jaGFuZ2VkID0gZmFsc2U7Ci0JCQkJCQkJalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAiY2hhbmdlIiwgdGhpcywgZXZlbnQsIHRydWUgKTsKLQkJCQkJCX0KLQkJCQkJfSk7Ci0JCQkJfQotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCS8vIERlbGVnYXRlZCBldmVudDsgbGF6eS1hZGQgYSBjaGFuZ2UgaGFuZGxlciBvbiBkZXNjZW5kYW50IGlucHV0cwotCQkJalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImJlZm9yZWFjdGl2YXRlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZSApIHsKLQkJCQl2YXIgZWxlbSA9IGUudGFyZ2V0OwotCi0JCQkJaWYgKCByZm9ybUVsZW1zLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiAhZWxlbS5fY2hhbmdlX2F0dGFjaGVkICkgewotCQkJCQlqUXVlcnkuZXZlbnQuYWRkKCBlbGVtLCAiY2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7Ci0JCQkJCQlpZiAoIHRoaXMucGFyZW50Tm9kZSAmJiAhZXZlbnQuaXNTaW11bGF0ZWQgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKLQkJCQkJCQlqUXVlcnkuZXZlbnQuc2ltdWxhdGUoICJjaGFuZ2UiLCB0aGlzLnBhcmVudE5vZGUsIGV2ZW50LCB0cnVlICk7Ci0JCQkJCQl9Ci0JCQkJCX0pOwotCQkJCQllbGVtLl9jaGFuZ2VfYXR0YWNoZWQgPSB0cnVlOwotCQkJCX0KLQkJCX0pOwotCQl9LAotCi0JCWhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgewotCQkJdmFyIGVsZW0gPSBldmVudC50YXJnZXQ7Ci0KLQkJCS8vIFN3YWxsb3cgbmF0aXZlIGNoYW5nZSBldmVudHMgZnJvbSBjaGVja2JveC9yYWRpbywgd2UgYWxyZWFkeSB0cmlnZ2VyZWQgdGhlbSBhYm92ZQotCQkJaWYgKCB0aGlzICE9PSBlbGVtIHx8IGV2ZW50LmlzU2ltdWxhdGVkIHx8IGV2ZW50LmlzVHJpZ2dlciB8fCAoZWxlbS50eXBlICE9PSAicmFkaW8iICYmIGVsZW0udHlwZSAhPT0gImNoZWNrYm94IikgKSB7Ci0JCQkJcmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLQkJCX0KLQkJfSwKLQotCQl0ZWFyZG93bjogZnVuY3Rpb24oKSB7Ci0JCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLl9jaGFuZ2UiICk7Ci0KLQkJCXJldHVybiByZm9ybUVsZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKTsKLQkJfQotCX07Ci19Ci0KLS8vIENyZWF0ZSAiYnViYmxpbmciIGZvY3VzIGFuZCBibHVyIGV2ZW50cwotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXMgKSB7Ci0JalF1ZXJ5LmVhY2goeyBmb2N1czogImZvY3VzaW4iLCBibHVyOiAiZm9jdXNvdXQiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7Ci0KLQkJLy8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dAotCQl2YXIgYXR0YWNoZXMgPSAwLAotCQkJaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHsKLQkJCQlqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApLCB0cnVlICk7Ci0JCQl9OwotCi0JCWpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHsKLQkJCXNldHVwOiBmdW5jdGlvbigpIHsKLQkJCQlpZiAoIGF0dGFjaGVzKysgPT09IDAgKSB7Ci0JCQkJCWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKLQkJCQl9Ci0JCQl9LAotCQkJdGVhcmRvd246IGZ1bmN0aW9uKCkgewotCQkJCWlmICggLS1hdHRhY2hlcyA9PT0gMCApIHsKLQkJCQkJZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApOwotCQkJCX0KLQkJCX0KLQkJfTsKLQl9KTsKLX0KLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0KLQlvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIC8qSU5URVJOQUwqLyBvbmUgKSB7Ci0JCXZhciBvcmlnRm4sIHR5cGU7Ci0KLQkJLy8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzCi0JCWlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKLQkJCS8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApCi0JCQlpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7Ci0JCQkJLy8gKCB0eXBlcy1PYmplY3QsIGRhdGEgKQotCQkJCWRhdGEgPSBzZWxlY3RvcjsKLQkJCQlzZWxlY3RvciA9IHVuZGVmaW5lZDsKLQkJCX0KLQkJCWZvciAoIHR5cGUgaW4gdHlwZXMgKSB7Ci0JCQkJdGhpcy5vbiggdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApOwotCQkJfQotCQkJcmV0dXJuIHRoaXM7Ci0JCX0KLQotCQlpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkgewotCQkJLy8gKCB0eXBlcywgZm4gKQotCQkJZm4gPSBzZWxlY3RvcjsKLQkJCWRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDsKLQkJfSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHsKLQkJCWlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKLQkJCQkvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKQotCQkJCWZuID0gZGF0YTsKLQkJCQlkYXRhID0gdW5kZWZpbmVkOwotCQkJfSBlbHNlIHsKLQkJCQkvLyAoIHR5cGVzLCBkYXRhLCBmbiApCi0JCQkJZm4gPSBkYXRhOwotCQkJCWRhdGEgPSBzZWxlY3RvcjsKLQkJCQlzZWxlY3RvciA9IHVuZGVmaW5lZDsKLQkJCX0KLQkJfQotCQlpZiAoIGZuID09PSBmYWxzZSApIHsKLQkJCWZuID0gcmV0dXJuRmFsc2U7Ci0JCX0gZWxzZSBpZiAoICFmbiApIHsKLQkJCXJldHVybiB0aGlzOwotCQl9Ci0KLQkJaWYgKCBvbmUgPT09IDEgKSB7Ci0JCQlvcmlnRm4gPSBmbjsKLQkJCWZuID0gZnVuY3Rpb24oIGV2ZW50ICkgewotCQkJCS8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mbwotCQkJCWpRdWVyeSgpLm9mZiggZXZlbnQgKTsKLQkJCQlyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLQkJCX07Ci0JCQkvLyBVc2Ugc2FtZSBndWlkIHNvIGNhbGxlciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdGbgotCQkJZm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7Ci0JCX0KLQkJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7Ci0JCQlqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7Ci0JCX0pOwotCX0sCi0Jb25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHsKLQkJcmV0dXJuIHRoaXMub24uY2FsbCggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApOwotCX0sCi0Jb2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHsKLQkJaWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7Ci0JCQkvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50Ci0JCQl2YXIgaGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqOwotCQkJalF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZigKLQkJCQloYW5kbGVPYmoubmFtZXNwYWNlPyBoYW5kbGVPYmoudHlwZSArICIuIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOiBoYW5kbGVPYmoudHlwZSwKLQkJCQloYW5kbGVPYmouc2VsZWN0b3IsCi0JCQkJaGFuZGxlT2JqLmhhbmRsZXIKLQkJCSk7Ci0JCQlyZXR1cm4gdGhpczsKLQkJfQotCQlpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgKSB7Ci0JCQkvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKQotCQkJZm9yICggdmFyIHR5cGUgaW4gdHlwZXMgKSB7Ci0JCQkJdGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7Ci0JCQl9Ci0JCQlyZXR1cm4gdGhpczsKLQkJfQotCQlpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlvbiIgKSB7Ci0JCQkvLyAoIHR5cGVzIFssIGZuXSApCi0JCQlmbiA9IHNlbGVjdG9yOwotCQkJc2VsZWN0b3IgPSB1bmRlZmluZWQ7Ci0JCX0KLQkJaWYgKCBmbiA9PT0gZmFsc2UgKSB7Ci0JCQlmbiA9IHJldHVybkZhbHNlOwotCQl9Ci0JCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0JCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7Ci0JCX0pOwotCX0sCi0KLQliaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkgewotCQlyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7Ci0JfSwKLQl1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7Ci0JCXJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7Ci0JfSwKLQotCWxpdmU6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7Ci0JCWpRdWVyeSggdGhpcy5jb250ZXh0ICkub24oIHR5cGVzLCB0aGlzLnNlbGVjdG9yLCBkYXRhLCBmbiApOwotCQlyZXR1cm4gdGhpczsKLQl9LAotCWRpZTogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHsKLQkJalF1ZXJ5KCB0aGlzLmNvbnRleHQgKS5vZmYoIHR5cGVzLCB0aGlzLnNlbGVjdG9yIHx8ICIqKiIsIGZuICk7Ci0JCXJldHVybiB0aGlzOwotCX0sCi0KLQlkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7Ci0JCXJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7Ci0JfSwKLQl1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKLQkJLy8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKQotCQlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PSAxPyB0aGlzLm9mZiggc2VsZWN0b3IsICIqKiIgKSA6IHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IsIGZuICk7Ci0JfSwKLQotCXRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgewotCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTsKLQkJfSk7Ci0JfSwKLQl0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7Ci0JCWlmICggdGhpc1swXSApIHsKLQkJCXJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpc1swXSwgdHJ1ZSApOwotCQl9Ci0JfSwKLQotCXRvZ2dsZTogZnVuY3Rpb24oIGZuICkgewotCQkvLyBTYXZlIHJlZmVyZW5jZSB0byBhcmd1bWVudHMgZm9yIGFjY2VzcyBpbiBjbG9zdXJlCi0JCXZhciBhcmdzID0gYXJndW1lbnRzLAotCQkJZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKywKLQkJCWkgPSAwLAotCQkJdG9nZ2xlciA9IGZ1bmN0aW9uKCBldmVudCApIHsKLQkJCQkvLyBGaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9uIHRvIGV4ZWN1dGUKLQkJCQl2YXIgbGFzdFRvZ2dsZSA9ICggalF1ZXJ5Ll9kYXRhKCB0aGlzLCAibGFzdFRvZ2dsZSIgKyBmbi5ndWlkICkgfHwgMCApICUgaTsKLQkJCQlqUXVlcnkuX2RhdGEoIHRoaXMsICJsYXN0VG9nZ2xlIiArIGZuLmd1aWQsIGxhc3RUb2dnbGUgKyAxICk7Ci0KLQkJCQkvLyBNYWtlIHN1cmUgdGhhdCBjbGlja3Mgc3RvcAotCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0KLQkJCQkvLyBhbmQgZXhlY3V0ZSB0aGUgZnVuY3Rpb24KLQkJCQlyZXR1cm4gYXJnc1sgbGFzdFRvZ2dsZSBdLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSB8fCBmYWxzZTsKLQkJCX07Ci0KLQkJLy8gbGluayBhbGwgdGhlIGZ1bmN0aW9ucywgc28gYW55IG9mIHRoZW0gY2FuIHVuYmluZCB0aGlzIGNsaWNrIGhhbmRsZXIKLQkJdG9nZ2xlci5ndWlkID0gZ3VpZDsKLQkJd2hpbGUgKCBpIDwgYXJncy5sZW5ndGggKSB7Ci0JCQlhcmdzWyBpKysgXS5ndWlkID0gZ3VpZDsKLQkJfQotCi0JCXJldHVybiB0aGlzLmNsaWNrKCB0b2dnbGVyICk7Ci0JfSwKLQotCWhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHsKLQkJcmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7Ci0JfQotfSk7Ci0KLWpRdWVyeS5lYWNoKCAoImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrICIgKwotCSJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKLQkiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIpLnNwbGl0KCIgIiksIGZ1bmN0aW9uKCBpLCBuYW1lICkgewotCi0JLy8gSGFuZGxlIGV2ZW50IGJpbmRpbmcKLQlqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHsKLQkJaWYgKCBmbiA9PSBudWxsICkgewotCQkJZm4gPSBkYXRhOwotCQkJZGF0YSA9IG51bGw7Ci0JCX0KLQotCQlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgPwotCQkJdGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6Ci0JCQl0aGlzLnRyaWdnZXIoIG5hbWUgKTsKLQl9OwotCi0JaWYgKCBqUXVlcnkuYXR0ckZuICkgewotCQlqUXVlcnkuYXR0ckZuWyBuYW1lIF0gPSB0cnVlOwotCX0KLQotCWlmICggcmtleUV2ZW50LnRlc3QoIG5hbWUgKSApIHsKLQkJalF1ZXJ5LmV2ZW50LmZpeEhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXZlbnQua2V5SG9va3M7Ci0JfQotCi0JaWYgKCBybW91c2VFdmVudC50ZXN0KCBuYW1lICkgKSB7Ci0JCWpRdWVyeS5ldmVudC5maXhIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV2ZW50Lm1vdXNlSG9va3M7Ci0JfQotfSk7Ci0KLQotCi0vKiEKLSAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lCi0gKiAgQ29weXJpZ2h0IDIwMTEsIFRoZSBEb2pvIEZvdW5kYXRpb24KLSAqICBSZWxlYXNlZCB1bmRlciB0aGUgTUlULCBCU0QsIGFuZCBHUEwgTGljZW5zZXMuCi0gKiAgTW9yZSBpbmZvcm1hdGlvbjogaHR0cDovL3NpenpsZWpzLmNvbS8KLSAqLwotKGZ1bmN0aW9uKCl7Ci0KLXZhciBjaHVua2VyID0gLygoPzpcKCg/OlwoW14oKV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxbJyJdW14nIl0qWyciXXxbXlxbXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZywKLQlleHBhbmRvID0gInNpemNhY2hlIiArIChNYXRoLnJhbmRvbSgpICsgJycpLnJlcGxhY2UoJy4nLCAnJyksCi0JZG9uZSA9IDAsCi0JdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLAotCWhhc0R1cGxpY2F0ZSA9IGZhbHNlLAotCWJhc2VIYXNEdXBsaWNhdGUgPSB0cnVlLAotCXJCYWNrc2xhc2ggPSAvXFwvZywKLQlyUmV0dXJuID0gL1xyXG4vZywKLQlyTm9uV29yZCA9IC9cVy87Ci0KLS8vIEhlcmUgd2UgY2hlY2sgaWYgdGhlIEphdmFTY3JpcHQgZW5naW5lIGlzIHVzaW5nIHNvbWUgc29ydCBvZgotLy8gb3B0aW1pemF0aW9uIHdoZXJlIGl0IGRvZXMgbm90IGFsd2F5cyBjYWxsIG91ciBjb21wYXJpc2lvbgotLy8gZnVuY3Rpb24uIElmIHRoYXQgaXMgdGhlIGNhc2UsIGRpc2NhcmQgdGhlIGhhc0R1cGxpY2F0ZSB2YWx1ZS4KLS8vICAgVGh1cyBmYXIgdGhhdCBpbmNsdWRlcyBHb29nbGUgQ2hyb21lLgotWzAsIDBdLnNvcnQoZnVuY3Rpb24oKSB7Ci0JYmFzZUhhc0R1cGxpY2F0ZSA9IGZhbHNlOwotCXJldHVybiAwOwotfSk7Ci0KLXZhciBTaXp6bGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7Ci0JcmVzdWx0cyA9IHJlc3VsdHMgfHwgW107Ci0JY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7Ci0KLQl2YXIgb3JpZ0NvbnRleHQgPSBjb250ZXh0OwotCi0JaWYgKCBjb250ZXh0Lm5vZGVUeXBlICE9PSAxICYmIGNvbnRleHQubm9kZVR5cGUgIT09IDkgKSB7Ci0JCXJldHVybiBbXTsKLQl9Ci0JCi0JaWYgKCAhc2VsZWN0b3IgfHwgdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsKLQkJcmV0dXJuIHJlc3VsdHM7Ci0JfQotCi0JdmFyIG0sIHNldCwgY2hlY2tTZXQsIGV4dHJhLCByZXQsIGN1ciwgcG9wLCBpLAotCQlwcnVuZSA9IHRydWUsCi0JCWNvbnRleHRYTUwgPSBTaXp6bGUuaXNYTUwoIGNvbnRleHQgKSwKLQkJcGFydHMgPSBbXSwKLQkJc29GYXIgPSBzZWxlY3RvcjsKLQkKLQkvLyBSZXNldCB0aGUgcG9zaXRpb24gb2YgdGhlIGNodW5rZXIgcmVnZXhwIChzdGFydCBmcm9tIGhlYWQpCi0JZG8gewotCQljaHVua2VyLmV4ZWMoICIiICk7Ci0JCW0gPSBjaHVua2VyLmV4ZWMoIHNvRmFyICk7Ci0KLQkJaWYgKCBtICkgewotCQkJc29GYXIgPSBtWzNdOwotCQkKLQkJCXBhcnRzLnB1c2goIG1bMV0gKTsKLQkJCi0JCQlpZiAoIG1bMl0gKSB7Ci0JCQkJZXh0cmEgPSBtWzNdOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfSB3aGlsZSAoIG0gKTsKLQotCWlmICggcGFydHMubGVuZ3RoID4gMSAmJiBvcmlnUE9TLmV4ZWMoIHNlbGVjdG9yICkgKSB7Ci0KLQkJaWYgKCBwYXJ0cy5sZW5ndGggPT09IDIgJiYgRXhwci5yZWxhdGl2ZVsgcGFydHNbMF0gXSApIHsKLQkJCXNldCA9IHBvc1Byb2Nlc3MoIHBhcnRzWzBdICsgcGFydHNbMV0sIGNvbnRleHQsIHNlZWQgKTsKLQotCQl9IGVsc2UgewotCQkJc2V0ID0gRXhwci5yZWxhdGl2ZVsgcGFydHNbMF0gXSA/Ci0JCQkJWyBjb250ZXh0IF0gOgotCQkJCVNpenpsZSggcGFydHMuc2hpZnQoKSwgY29udGV4dCApOwotCi0JCQl3aGlsZSAoIHBhcnRzLmxlbmd0aCApIHsKLQkJCQlzZWxlY3RvciA9IHBhcnRzLnNoaWZ0KCk7Ci0KLQkJCQlpZiAoIEV4cHIucmVsYXRpdmVbIHNlbGVjdG9yIF0gKSB7Ci0JCQkJCXNlbGVjdG9yICs9IHBhcnRzLnNoaWZ0KCk7Ci0JCQkJfQotCQkJCQotCQkJCXNldCA9IHBvc1Byb2Nlc3MoIHNlbGVjdG9yLCBzZXQsIHNlZWQgKTsKLQkJCX0KLQkJfQotCi0JfSBlbHNlIHsKLQkJLy8gVGFrZSBhIHNob3J0Y3V0IGFuZCBzZXQgdGhlIGNvbnRleHQgaWYgdGhlIHJvb3Qgc2VsZWN0b3IgaXMgYW4gSUQKLQkJLy8gKGJ1dCBub3QgaWYgaXQnbGwgYmUgZmFzdGVyIGlmIHRoZSBpbm5lciBzZWxlY3RvciBpcyBhbiBJRCkKLQkJaWYgKCAhc2VlZCAmJiBwYXJ0cy5sZW5ndGggPiAxICYmIGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgIWNvbnRleHRYTUwgJiYKLQkJCQlFeHByLm1hdGNoLklELnRlc3QocGFydHNbMF0pICYmICFFeHByLm1hdGNoLklELnRlc3QocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pICkgewotCi0JCQlyZXQgPSBTaXp6bGUuZmluZCggcGFydHMuc2hpZnQoKSwgY29udGV4dCwgY29udGV4dFhNTCApOwotCQkJY29udGV4dCA9IHJldC5leHByID8KLQkJCQlTaXp6bGUuZmlsdGVyKCByZXQuZXhwciwgcmV0LnNldCApWzBdIDoKLQkJCQlyZXQuc2V0WzBdOwotCQl9Ci0KLQkJaWYgKCBjb250ZXh0ICkgewotCQkJcmV0ID0gc2VlZCA/Ci0JCQkJeyBleHByOiBwYXJ0cy5wb3AoKSwgc2V0OiBtYWtlQXJyYXkoc2VlZCkgfSA6Ci0JCQkJU2l6emxlLmZpbmQoIHBhcnRzLnBvcCgpLCBwYXJ0cy5sZW5ndGggPT09IDEgJiYgKHBhcnRzWzBdID09PSAifiIgfHwgcGFydHNbMF0gPT09ICIrIikgJiYgY29udGV4dC5wYXJlbnROb2RlID8gY29udGV4dC5wYXJlbnROb2RlIDogY29udGV4dCwgY29udGV4dFhNTCApOwotCi0JCQlzZXQgPSByZXQuZXhwciA/Ci0JCQkJU2l6emxlLmZpbHRlciggcmV0LmV4cHIsIHJldC5zZXQgKSA6Ci0JCQkJcmV0LnNldDsKLQotCQkJaWYgKCBwYXJ0cy5sZW5ndGggPiAwICkgewotCQkJCWNoZWNrU2V0ID0gbWFrZUFycmF5KCBzZXQgKTsKLQotCQkJfSBlbHNlIHsKLQkJCQlwcnVuZSA9IGZhbHNlOwotCQkJfQotCi0JCQl3aGlsZSAoIHBhcnRzLmxlbmd0aCApIHsKLQkJCQljdXIgPSBwYXJ0cy5wb3AoKTsKLQkJCQlwb3AgPSBjdXI7Ci0KLQkJCQlpZiAoICFFeHByLnJlbGF0aXZlWyBjdXIgXSApIHsKLQkJCQkJY3VyID0gIiI7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcG9wID0gcGFydHMucG9wKCk7Ci0JCQkJfQotCi0JCQkJaWYgKCBwb3AgPT0gbnVsbCApIHsKLQkJCQkJcG9wID0gY29udGV4dDsKLQkJCQl9Ci0KLQkJCQlFeHByLnJlbGF0aXZlWyBjdXIgXSggY2hlY2tTZXQsIHBvcCwgY29udGV4dFhNTCApOwotCQkJfQotCi0JCX0gZWxzZSB7Ci0JCQljaGVja1NldCA9IHBhcnRzID0gW107Ci0JCX0KLQl9Ci0KLQlpZiAoICFjaGVja1NldCApIHsKLQkJY2hlY2tTZXQgPSBzZXQ7Ci0JfQotCi0JaWYgKCAhY2hlY2tTZXQgKSB7Ci0JCVNpenpsZS5lcnJvciggY3VyIHx8IHNlbGVjdG9yICk7Ci0JfQotCi0JaWYgKCB0b1N0cmluZy5jYWxsKGNoZWNrU2V0KSA9PT0gIltvYmplY3QgQXJyYXldIiApIHsKLQkJaWYgKCAhcHJ1bmUgKSB7Ci0JCQlyZXN1bHRzLnB1c2guYXBwbHkoIHJlc3VsdHMsIGNoZWNrU2V0ICk7Ci0KLQkJfSBlbHNlIGlmICggY29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID09PSAxICkgewotCQkJZm9yICggaSA9IDA7IGNoZWNrU2V0W2ldICE9IG51bGw7IGkrKyApIHsKLQkJCQlpZiAoIGNoZWNrU2V0W2ldICYmIChjaGVja1NldFtpXSA9PT0gdHJ1ZSB8fCBjaGVja1NldFtpXS5ub2RlVHlwZSA9PT0gMSAmJiBTaXp6bGUuY29udGFpbnMoY29udGV4dCwgY2hlY2tTZXRbaV0pKSApIHsKLQkJCQkJcmVzdWx0cy5wdXNoKCBzZXRbaV0gKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJfSBlbHNlIHsKLQkJCWZvciAoIGkgPSAwOyBjaGVja1NldFtpXSAhPSBudWxsOyBpKysgKSB7Ci0JCQkJaWYgKCBjaGVja1NldFtpXSAmJiBjaGVja1NldFtpXS5ub2RlVHlwZSA9PT0gMSApIHsKLQkJCQkJcmVzdWx0cy5wdXNoKCBzZXRbaV0gKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCW1ha2VBcnJheSggY2hlY2tTZXQsIHJlc3VsdHMgKTsKLQl9Ci0KLQlpZiAoIGV4dHJhICkgewotCQlTaXp6bGUoIGV4dHJhLCBvcmlnQ29udGV4dCwgcmVzdWx0cywgc2VlZCApOwotCQlTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApOwotCX0KLQotCXJldHVybiByZXN1bHRzOwotfTsKLQotU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHsKLQlpZiAoIHNvcnRPcmRlciApIHsKLQkJaGFzRHVwbGljYXRlID0gYmFzZUhhc0R1cGxpY2F0ZTsKLQkJcmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTsKLQotCQlpZiAoIGhhc0R1cGxpY2F0ZSApIHsKLQkJCWZvciAoIHZhciBpID0gMTsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKysgKSB7Ci0JCQkJaWYgKCByZXN1bHRzW2ldID09PSByZXN1bHRzWyBpIC0gMSBdICkgewotCQkJCQlyZXN1bHRzLnNwbGljZSggaS0tLCAxICk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIHJlc3VsdHM7Ci19OwotCi1TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBzZXQgKSB7Ci0JcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgc2V0ICk7Ci19OwotCi1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIG5vZGUsIGV4cHIgKSB7Ci0JcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgW25vZGVdICkubGVuZ3RoID4gMDsKLX07Ci0KLVNpenpsZS5maW5kID0gZnVuY3Rpb24oIGV4cHIsIGNvbnRleHQsIGlzWE1MICkgewotCXZhciBzZXQsIGksIGxlbiwgbWF0Y2gsIHR5cGUsIGxlZnQ7Ci0KLQlpZiAoICFleHByICkgewotCQlyZXR1cm4gW107Ci0JfQotCi0JZm9yICggaSA9IDAsIGxlbiA9IEV4cHIub3JkZXIubGVuZ3RoOyBpIDwgbGVuOyBpKysgKSB7Ci0JCXR5cGUgPSBFeHByLm9yZGVyW2ldOwotCQkKLQkJaWYgKCAobWF0Y2ggPSBFeHByLmxlZnRNYXRjaFsgdHlwZSBdLmV4ZWMoIGV4cHIgKSkgKSB7Ci0JCQlsZWZ0ID0gbWF0Y2hbMV07Ci0JCQltYXRjaC5zcGxpY2UoIDEsIDEgKTsKLQotCQkJaWYgKCBsZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGggLSAxICkgIT09ICJcXCIgKSB7Ci0JCQkJbWF0Y2hbMV0gPSAobWF0Y2hbMV0gfHwgIiIpLnJlcGxhY2UoIHJCYWNrc2xhc2gsICIiICk7Ci0JCQkJc2V0ID0gRXhwci5maW5kWyB0eXBlIF0oIG1hdGNoLCBjb250ZXh0LCBpc1hNTCApOwotCi0JCQkJaWYgKCBzZXQgIT0gbnVsbCApIHsKLQkJCQkJZXhwciA9IGV4cHIucmVwbGFjZSggRXhwci5tYXRjaFsgdHlwZSBdLCAiIiApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoICFzZXQgKSB7Ci0JCXNldCA9IHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiA/Ci0JCQljb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIgKSA6Ci0JCQlbXTsKLQl9Ci0KLQlyZXR1cm4geyBzZXQ6IHNldCwgZXhwcjogZXhwciB9OwotfTsKLQotU2l6emxlLmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBzZXQsIGlucGxhY2UsIG5vdCApIHsKLQl2YXIgbWF0Y2gsIGFueUZvdW5kLAotCQl0eXBlLCBmb3VuZCwgaXRlbSwgZmlsdGVyLCBsZWZ0LAotCQlpLCBwYXNzLAotCQlvbGQgPSBleHByLAotCQlyZXN1bHQgPSBbXSwKLQkJY3VyTG9vcCA9IHNldCwKLQkJaXNYTUxGaWx0ZXIgPSBzZXQgJiYgc2V0WzBdICYmIFNpenpsZS5pc1hNTCggc2V0WzBdICk7Ci0KLQl3aGlsZSAoIGV4cHIgJiYgc2V0Lmxlbmd0aCApIHsKLQkJZm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHsKLQkJCWlmICggKG1hdGNoID0gRXhwci5sZWZ0TWF0Y2hbIHR5cGUgXS5leGVjKCBleHByICkpICE9IG51bGwgJiYgbWF0Y2hbMl0gKSB7Ci0JCQkJZmlsdGVyID0gRXhwci5maWx0ZXJbIHR5cGUgXTsKLQkJCQlsZWZ0ID0gbWF0Y2hbMV07Ci0KLQkJCQlhbnlGb3VuZCA9IGZhbHNlOwotCi0JCQkJbWF0Y2guc3BsaWNlKDEsMSk7Ci0KLQkJCQlpZiAoIGxlZnQuc3Vic3RyKCBsZWZ0Lmxlbmd0aCAtIDEgKSA9PT0gIlxcIiApIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCi0JCQkJaWYgKCBjdXJMb29wID09PSByZXN1bHQgKSB7Ci0JCQkJCXJlc3VsdCA9IFtdOwotCQkJCX0KLQotCQkJCWlmICggRXhwci5wcmVGaWx0ZXJbIHR5cGUgXSApIHsKLQkJCQkJbWF0Y2ggPSBFeHByLnByZUZpbHRlclsgdHlwZSBdKCBtYXRjaCwgY3VyTG9vcCwgaW5wbGFjZSwgcmVzdWx0LCBub3QsIGlzWE1MRmlsdGVyICk7Ci0KLQkJCQkJaWYgKCAhbWF0Y2ggKSB7Ci0JCQkJCQlhbnlGb3VuZCA9IGZvdW5kID0gdHJ1ZTsKLQotCQkJCQl9IGVsc2UgaWYgKCBtYXRjaCA9PT0gdHJ1ZSApIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJaWYgKCBtYXRjaCApIHsKLQkJCQkJZm9yICggaSA9IDA7IChpdGVtID0gY3VyTG9vcFtpXSkgIT0gbnVsbDsgaSsrICkgewotCQkJCQkJaWYgKCBpdGVtICkgewotCQkJCQkJCWZvdW5kID0gZmlsdGVyKCBpdGVtLCBtYXRjaCwgaSwgY3VyTG9vcCApOwotCQkJCQkJCXBhc3MgPSBub3QgXiBmb3VuZDsKLQotCQkJCQkJCWlmICggaW5wbGFjZSAmJiBmb3VuZCAhPSBudWxsICkgewotCQkJCQkJCQlpZiAoIHBhc3MgKSB7Ci0JCQkJCQkJCQlhbnlGb3VuZCA9IHRydWU7Ci0KLQkJCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkJCWN1ckxvb3BbaV0gPSBmYWxzZTsKLQkJCQkJCQkJfQotCi0JCQkJCQkJfSBlbHNlIGlmICggcGFzcyApIHsKLQkJCQkJCQkJcmVzdWx0LnB1c2goIGl0ZW0gKTsKLQkJCQkJCQkJYW55Rm91bmQgPSB0cnVlOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQotCQkJCWlmICggZm91bmQgIT09IHVuZGVmaW5lZCApIHsKLQkJCQkJaWYgKCAhaW5wbGFjZSApIHsKLQkJCQkJCWN1ckxvb3AgPSByZXN1bHQ7Ci0JCQkJCX0KLQotCQkJCQlleHByID0gZXhwci5yZXBsYWNlKCBFeHByLm1hdGNoWyB0eXBlIF0sICIiICk7Ci0KLQkJCQkJaWYgKCAhYW55Rm91bmQgKSB7Ci0JCQkJCQlyZXR1cm4gW107Ci0JCQkJCX0KLQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvLyBJbXByb3BlciBleHByZXNzaW9uCi0JCWlmICggZXhwciA9PT0gb2xkICkgewotCQkJaWYgKCBhbnlGb3VuZCA9PSBudWxsICkgewotCQkJCVNpenpsZS5lcnJvciggZXhwciApOwotCi0JCQl9IGVsc2UgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJb2xkID0gZXhwcjsKLQl9Ci0KLQlyZXR1cm4gY3VyTG9vcDsKLX07Ci0KLVNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7Ci0JdGhyb3cgbmV3IEVycm9yKCAiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIG1zZyApOwotfTsKLQotLyoqCi0gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyZWl2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2RlcwotICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtCi0gKi8KLXZhciBnZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSApIHsKLSAgICB2YXIgaSwgbm9kZSwKLQkJbm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlLAotCQlyZXQgPSAiIjsKLQotCWlmICggbm9kZVR5cGUgKSB7Ci0JCWlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgKSB7Ci0JCQkvLyBVc2UgdGV4dENvbnRlbnQgfHwgaW5uZXJUZXh0IGZvciBlbGVtZW50cwotCQkJaWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gJ3N0cmluZycgKSB7Ci0JCQkJcmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7Ci0JCQl9IGVsc2UgaWYgKCB0eXBlb2YgZWxlbS5pbm5lclRleHQgPT09ICdzdHJpbmcnICkgewotCQkJCS8vIFJlcGxhY2UgSUUncyBjYXJyaWFnZSByZXR1cm5zCi0JCQkJcmV0dXJuIGVsZW0uaW5uZXJUZXh0LnJlcGxhY2UoIHJSZXR1cm4sICcnICk7Ci0JCQl9IGVsc2UgewotCQkJCS8vIFRyYXZlcnNlIGl0J3MgY2hpbGRyZW4KLQkJCQlmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZykgewotCQkJCQlyZXQgKz0gZ2V0VGV4dCggZWxlbSApOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7Ci0JCQlyZXR1cm4gZWxlbS5ub2RlVmFsdWU7Ci0JCX0KLQl9IGVsc2UgewotCi0JCS8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5Ci0JCWZvciAoIGkgPSAwOyAobm9kZSA9IGVsZW1baV0pOyBpKysgKSB7Ci0JCQkvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2RlcwotCQkJaWYgKCBub2RlLm5vZGVUeXBlICE9PSA4ICkgewotCQkJCXJldCArPSBnZXRUZXh0KCBub2RlICk7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldDsKLX07Ci0KLXZhciBFeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHsKLQlvcmRlcjogWyAiSUQiLCAiTkFNRSIsICJUQUciIF0sCi0KLQltYXRjaDogewotCQlJRDogLyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLAotCQlDTEFTUzogL1wuKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLywKLQkJTkFNRTogL1xbbmFtZT1bJyJdKigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVsnIl0qXF0vLAotCQlBVFRSOiAvXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLywKLQkJVEFHOiAvXigoPzpbXHdcdTAwYzAtXHVGRkZGXCpcLV18XFwuKSspLywKLQkJQ0hJTEQ6IC86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNoaWxkKD86XChccyooZXZlbnxvZGR8KD86WytcLV0/XGQrfCg/OlsrXC1dP1xkKik/blxzKig/OlsrXC1dXHMqXGQrKT8pKVxzKlwpKT8vLAotCQlQT1M6IC86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLAotCQlQU0VVRE86IC86KCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspKD86XCgoWyciXT8pKCg/OlwoW15cKV0rXCl8W15cKFwpXSopKylcMlwpKT8vCi0JfSwKLQotCWxlZnRNYXRjaDoge30sCi0KLQlhdHRyTWFwOiB7Ci0JCSJjbGFzcyI6ICJjbGFzc05hbWUiLAotCQkiZm9yIjogImh0bWxGb3IiCi0JfSwKLQotCWF0dHJIYW5kbGU6IHsKLQkJaHJlZjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCQlyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoICJocmVmIiApOwotCQl9LAotCQl0eXBlOiBmdW5jdGlvbiggZWxlbSApIHsKLQkJCXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggInR5cGUiICk7Ci0JCX0KLQl9LAotCi0JcmVsYXRpdmU6IHsKLQkJIisiOiBmdW5jdGlvbihjaGVja1NldCwgcGFydCl7Ci0JCQl2YXIgaXNQYXJ0U3RyID0gdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciLAotCQkJCWlzVGFnID0gaXNQYXJ0U3RyICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICksCi0JCQkJaXNQYXJ0U3RyTm90VGFnID0gaXNQYXJ0U3RyICYmICFpc1RhZzsKLQotCQkJaWYgKCBpc1RhZyApIHsKLQkJCQlwYXJ0ID0gcGFydC50b0xvd2VyQ2FzZSgpOwotCQkJfQotCi0JCQlmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVja1NldC5sZW5ndGgsIGVsZW07IGkgPCBsOyBpKysgKSB7Ci0JCQkJaWYgKCAoZWxlbSA9IGNoZWNrU2V0W2ldKSApIHsKLQkJCQkJd2hpbGUgKCAoZWxlbSA9IGVsZW0ucHJldmlvdXNTaWJsaW5nKSAmJiBlbGVtLm5vZGVUeXBlICE9PSAxICkge30KLQotCQkJCQljaGVja1NldFtpXSA9IGlzUGFydFN0ck5vdFRhZyB8fCBlbGVtICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcGFydCA/Ci0JCQkJCQllbGVtIHx8IGZhbHNlIDoKLQkJCQkJCWVsZW0gPT09IHBhcnQ7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoIGlzUGFydFN0ck5vdFRhZyApIHsKLQkJCQlTaXp6bGUuZmlsdGVyKCBwYXJ0LCBjaGVja1NldCwgdHJ1ZSApOwotCQkJfQotCQl9LAotCi0JCSI+IjogZnVuY3Rpb24oIGNoZWNrU2V0LCBwYXJ0ICkgewotCQkJdmFyIGVsZW0sCi0JCQkJaXNQYXJ0U3RyID0gdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciLAotCQkJCWkgPSAwLAotCQkJCWwgPSBjaGVja1NldC5sZW5ndGg7Ci0KLQkJCWlmICggaXNQYXJ0U3RyICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7Ci0JCQkJcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTsKLQotCQkJCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKLQkJCQkJZWxlbSA9IGNoZWNrU2V0W2ldOwotCi0JCQkJCWlmICggZWxlbSApIHsKLQkJCQkJCXZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7Ci0JCQkJCQljaGVja1NldFtpXSA9IHBhcmVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBwYXJ0ID8gcGFyZW50IDogZmFsc2U7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCX0gZWxzZSB7Ci0JCQkJZm9yICggOyBpIDwgbDsgaSsrICkgewotCQkJCQllbGVtID0gY2hlY2tTZXRbaV07Ci0KLQkJCQkJaWYgKCBlbGVtICkgewotCQkJCQkJY2hlY2tTZXRbaV0gPSBpc1BhcnRTdHIgPwotCQkJCQkJCWVsZW0ucGFyZW50Tm9kZSA6Ci0JCQkJCQkJZWxlbS5wYXJlbnROb2RlID09PSBwYXJ0OwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJaWYgKCBpc1BhcnRTdHIgKSB7Ci0JCQkJCVNpenpsZS5maWx0ZXIoIHBhcnQsIGNoZWNrU2V0LCB0cnVlICk7Ci0JCQkJfQotCQkJfQotCQl9LAotCi0JCSIiOiBmdW5jdGlvbihjaGVja1NldCwgcGFydCwgaXNYTUwpewotCQkJdmFyIG5vZGVDaGVjaywKLQkJCQlkb25lTmFtZSA9IGRvbmUrKywKLQkJCQljaGVja0ZuID0gZGlyQ2hlY2s7Ci0KLQkJCWlmICggdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7Ci0JCQkJcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTsKLQkJCQlub2RlQ2hlY2sgPSBwYXJ0OwotCQkJCWNoZWNrRm4gPSBkaXJOb2RlQ2hlY2s7Ci0JCQl9Ci0KLQkJCWNoZWNrRm4oICJwYXJlbnROb2RlIiwgcGFydCwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MICk7Ci0JCX0sCi0KLQkJIn4iOiBmdW5jdGlvbiggY2hlY2tTZXQsIHBhcnQsIGlzWE1MICkgewotCQkJdmFyIG5vZGVDaGVjaywKLQkJCQlkb25lTmFtZSA9IGRvbmUrKywKLQkJCQljaGVja0ZuID0gZGlyQ2hlY2s7Ci0KLQkJCWlmICggdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7Ci0JCQkJcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTsKLQkJCQlub2RlQ2hlY2sgPSBwYXJ0OwotCQkJCWNoZWNrRm4gPSBkaXJOb2RlQ2hlY2s7Ci0JCQl9Ci0KLQkJCWNoZWNrRm4oICJwcmV2aW91c1NpYmxpbmciLCBwYXJ0LCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVDaGVjaywgaXNYTUwgKTsKLQkJfQotCX0sCi0KLQlmaW5kOiB7Ci0JCUlEOiBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQsIGlzWE1MICkgewotCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgIWlzWE1MICkgewotCQkJCXZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZChtYXRjaFsxXSk7Ci0JCQkJLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKLQkJCQkvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCi0JCQkJcmV0dXJuIG0gJiYgbS5wYXJlbnROb2RlID8gW21dIDogW107Ci0JCQl9Ci0JCX0sCi0KLQkJTkFNRTogZnVuY3Rpb24oIG1hdGNoLCBjb250ZXh0ICkgewotCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7Ci0JCQkJdmFyIHJldCA9IFtdLAotCQkJCQlyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggbWF0Y2hbMV0gKTsKLQotCQkJCWZvciAoIHZhciBpID0gMCwgbCA9IHJlc3VsdHMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotCQkJCQlpZiAoIHJlc3VsdHNbaV0uZ2V0QXR0cmlidXRlKCJuYW1lIikgPT09IG1hdGNoWzFdICkgewotCQkJCQkJcmV0LnB1c2goIHJlc3VsdHNbaV0gKTsKLQkJCQkJfQotCQkJCX0KLQotCQkJCXJldHVybiByZXQubGVuZ3RoID09PSAwID8gbnVsbCA6IHJldDsKLQkJCX0KLQkJfSwKLQotCQlUQUc6IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCApIHsKLQkJCWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICkgewotCQkJCXJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBtYXRjaFsxXSApOwotCQkJfQotCQl9Ci0JfSwKLQlwcmVGaWx0ZXI6IHsKLQkJQ0xBU1M6IGZ1bmN0aW9uKCBtYXRjaCwgY3VyTG9vcCwgaW5wbGFjZSwgcmVzdWx0LCBub3QsIGlzWE1MICkgewotCQkJbWF0Y2ggPSAiICIgKyBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApICsgIiAiOwotCi0JCQlpZiAoIGlzWE1MICkgewotCQkJCXJldHVybiBtYXRjaDsKLQkJCX0KLQotCQkJZm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IGN1ckxvb3BbaV0pICE9IG51bGw7IGkrKyApIHsKLQkJCQlpZiAoIGVsZW0gKSB7Ci0JCQkJCWlmICggbm90IF4gKGVsZW0uY2xhc3NOYW1lICYmICgiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIikucmVwbGFjZSgvW1x0XG5ccl0vZywgIiAiKS5pbmRleE9mKG1hdGNoKSA+PSAwKSApIHsKLQkJCQkJCWlmICggIWlucGxhY2UgKSB7Ci0JCQkJCQkJcmVzdWx0LnB1c2goIGVsZW0gKTsKLQkJCQkJCX0KLQotCQkJCQl9IGVsc2UgaWYgKCBpbnBsYWNlICkgewotCQkJCQkJY3VyTG9vcFtpXSA9IGZhbHNlOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0sCi0KLQkJSUQ6IGZ1bmN0aW9uKCBtYXRjaCApIHsKLQkJCXJldHVybiBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApOwotCQl9LAotCi0JCVRBRzogZnVuY3Rpb24oIG1hdGNoLCBjdXJMb29wICkgewotCQkJcmV0dXJuIG1hdGNoWzFdLnJlcGxhY2UoIHJCYWNrc2xhc2gsICIiICkudG9Mb3dlckNhc2UoKTsKLQkJfSwKLQotCQlDSElMRDogZnVuY3Rpb24oIG1hdGNoICkgewotCQkJaWYgKCBtYXRjaFsxXSA9PT0gIm50aCIgKSB7Ci0JCQkJaWYgKCAhbWF0Y2hbMl0gKSB7Ci0JCQkJCVNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKLQkJCQl9Ci0KLQkJCQltYXRjaFsyXSA9IG1hdGNoWzJdLnJlcGxhY2UoL15cK3xccyovZywgJycpOwotCi0JCQkJLy8gcGFyc2UgZXF1YXRpb25zIGxpa2UgJ2V2ZW4nLCAnb2RkJywgJzUnLCAnMm4nLCAnM24rMicsICc0bi0xJywgJy1uKzYnCi0JCQkJdmFyIHRlc3QgPSAvKC0/KShcZCopKD86bihbK1wtXT9cZCopKT8vLmV4ZWMoCi0JCQkJCW1hdGNoWzJdID09PSAiZXZlbiIgJiYgIjJuIiB8fCBtYXRjaFsyXSA9PT0gIm9kZCIgJiYgIjJuKzEiIHx8Ci0JCQkJCSEvXEQvLnRlc3QoIG1hdGNoWzJdICkgJiYgIjBuKyIgKyBtYXRjaFsyXSB8fCBtYXRjaFsyXSk7Ci0KLQkJCQkvLyBjYWxjdWxhdGUgdGhlIG51bWJlcnMgKGZpcnN0KW4rKGxhc3QpIGluY2x1ZGluZyBpZiB0aGV5IGFyZSBuZWdhdGl2ZQotCQkJCW1hdGNoWzJdID0gKHRlc3RbMV0gKyAodGVzdFsyXSB8fCAxKSkgLSAwOwotCQkJCW1hdGNoWzNdID0gdGVzdFszXSAtIDA7Ci0JCQl9Ci0JCQllbHNlIGlmICggbWF0Y2hbMl0gKSB7Ci0JCQkJU2l6emxlLmVycm9yKCBtYXRjaFswXSApOwotCQkJfQotCi0JCQkvLyBUT0RPOiBNb3ZlIHRvIG5vcm1hbCBjYWNoaW5nIHN5c3RlbQotCQkJbWF0Y2hbMF0gPSBkb25lKys7Ci0KLQkJCXJldHVybiBtYXRjaDsKLQkJfSwKLQotCQlBVFRSOiBmdW5jdGlvbiggbWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTCApIHsKLQkJCXZhciBuYW1lID0gbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApOwotCQkJCi0JCQlpZiAoICFpc1hNTCAmJiBFeHByLmF0dHJNYXBbbmFtZV0gKSB7Ci0JCQkJbWF0Y2hbMV0gPSBFeHByLmF0dHJNYXBbbmFtZV07Ci0JCQl9Ci0KLQkJCS8vIEhhbmRsZSBpZiBhbiB1bi1xdW90ZWQgdmFsdWUgd2FzIHVzZWQKLQkJCW1hdGNoWzRdID0gKCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAiIiApLnJlcGxhY2UoIHJCYWNrc2xhc2gsICIiICk7Ci0KLQkJCWlmICggbWF0Y2hbMl0gPT09ICJ+PSIgKSB7Ci0JCQkJbWF0Y2hbNF0gPSAiICIgKyBtYXRjaFs0XSArICIgIjsKLQkJCX0KLQotCQkJcmV0dXJuIG1hdGNoOwotCQl9LAotCi0JCVBTRVVETzogZnVuY3Rpb24oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1bHQsIG5vdCApIHsKLQkJCWlmICggbWF0Y2hbMV0gPT09ICJub3QiICkgewotCQkJCS8vIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNvbXBsZXggZXhwcmVzc2lvbiwgb3IgYSBzaW1wbGUgb25lCi0JCQkJaWYgKCAoIGNodW5rZXIuZXhlYyhtYXRjaFszXSkgfHwgIiIgKS5sZW5ndGggPiAxIHx8IC9eXHcvLnRlc3QobWF0Y2hbM10pICkgewotCQkJCQltYXRjaFszXSA9IFNpenpsZShtYXRjaFszXSwgbnVsbCwgbnVsbCwgY3VyTG9vcCk7Ci0KLQkJCQl9IGVsc2UgewotCQkJCQl2YXIgcmV0ID0gU2l6emxlLmZpbHRlcihtYXRjaFszXSwgY3VyTG9vcCwgaW5wbGFjZSwgdHJ1ZSBeIG5vdCk7Ci0KLQkJCQkJaWYgKCAhaW5wbGFjZSApIHsKLQkJCQkJCXJlc3VsdC5wdXNoLmFwcGx5KCByZXN1bHQsIHJldCApOwotCQkJCQl9Ci0KLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQotCQkJfSBlbHNlIGlmICggRXhwci5tYXRjaC5QT1MudGVzdCggbWF0Y2hbMF0gKSB8fCBFeHByLm1hdGNoLkNISUxELnRlc3QoIG1hdGNoWzBdICkgKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiBtYXRjaDsKLQkJfSwKLQotCQlQT1M6IGZ1bmN0aW9uKCBtYXRjaCApIHsKLQkJCW1hdGNoLnVuc2hpZnQoIHRydWUgKTsKLQotCQkJcmV0dXJuIG1hdGNoOwotCQl9Ci0JfSwKLQkKLQlmaWx0ZXJzOiB7Ci0JCWVuYWJsZWQ6IGZ1bmN0aW9uKCBlbGVtICkgewotCQkJcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICYmIGVsZW0udHlwZSAhPT0gImhpZGRlbiI7Ci0JCX0sCi0KLQkJZGlzYWJsZWQ6IGZ1bmN0aW9uKCBlbGVtICkgewotCQkJcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7Ci0JCX0sCi0KLQkJY2hlY2tlZDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCQlyZXR1cm4gZWxlbS5jaGVja2VkID09PSB0cnVlOwotCQl9LAotCQkKLQkJc2VsZWN0ZWQ6IGZ1bmN0aW9uKCBlbGVtICkgewotCQkJLy8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdAotCQkJLy8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseQotCQkJaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7Ci0JCQkJZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOwotCQl9LAotCi0JCXBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCQlyZXR1cm4gISFlbGVtLmZpcnN0Q2hpbGQ7Ci0JCX0sCi0KLQkJZW1wdHk6IGZ1bmN0aW9uKCBlbGVtICkgewotCQkJcmV0dXJuICFlbGVtLmZpcnN0Q2hpbGQ7Ci0JCX0sCi0KLQkJaGFzOiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7Ci0JCQlyZXR1cm4gISFTaXp6bGUoIG1hdGNoWzNdLCBlbGVtICkubGVuZ3RoOwotCQl9LAotCi0JCWhlYWRlcjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCQlyZXR1cm4gKC9oXGQvaSkudGVzdCggZWxlbS5ub2RlTmFtZSApOwotCQl9LAotCi0JCXRleHQ6IGZ1bmN0aW9uKCBlbGVtICkgewotCQkJdmFyIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSggInR5cGUiICksIHR5cGUgPSBlbGVtLnR5cGU7Ci0JCQkvLyBJRTYgYW5kIDcgd2lsbCBtYXAgZWxlbS50eXBlIHRvICd0ZXh0JyBmb3IgbmV3IEhUTUw1IHR5cGVzIChzZWFyY2gsIGV0YykgCi0JCQkvLyB1c2UgZ2V0QXR0cmlidXRlIGluc3RlYWQgdG8gdGVzdCB0aGlzIGNhc2UKLQkJCXJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgInRleHQiID09PSB0eXBlICYmICggYXR0ciA9PT0gdHlwZSB8fCBhdHRyID09PSBudWxsICk7Ci0JCX0sCi0KLQkJcmFkaW86IGZ1bmN0aW9uKCBlbGVtICkgewotCQkJcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJiAicmFkaW8iID09PSBlbGVtLnR5cGU7Ci0JCX0sCi0KLQkJY2hlY2tib3g6IGZ1bmN0aW9uKCBlbGVtICkgewotCQkJcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJiAiY2hlY2tib3giID09PSBlbGVtLnR5cGU7Ci0JCX0sCi0KLQkJZmlsZTogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCQlyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYmICJmaWxlIiA9PT0gZWxlbS50eXBlOwotCQl9LAotCi0JCXBhc3N3b3JkOiBmdW5jdGlvbiggZWxlbSApIHsKLQkJCXJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgInBhc3N3b3JkIiA9PT0gZWxlbS50eXBlOwotCQl9LAotCi0JCXN1Ym1pdDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCQl2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLQkJCXJldHVybiAobmFtZSA9PT0gImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgInN1Ym1pdCIgPT09IGVsZW0udHlwZTsKLQkJfSwKLQotCQlpbWFnZTogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCQlyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYmICJpbWFnZSIgPT09IGVsZW0udHlwZTsKLQkJfSwKLQotCQlyZXNldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCQl2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLQkJCXJldHVybiAobmFtZSA9PT0gImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgInJlc2V0IiA9PT0gZWxlbS50eXBlOwotCQl9LAotCi0JCWJ1dHRvbjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCQl2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLQkJCXJldHVybiBuYW1lID09PSAiaW5wdXQiICYmICJidXR0b24iID09PSBlbGVtLnR5cGUgfHwgbmFtZSA9PT0gImJ1dHRvbiI7Ci0JCX0sCi0KLQkJaW5wdXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotCQkJcmV0dXJuICgvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pKS50ZXN0KCBlbGVtLm5vZGVOYW1lICk7Ci0JCX0sCi0KLQkJZm9jdXM6IGZ1bmN0aW9uKCBlbGVtICkgewotCQkJcmV0dXJuIGVsZW0gPT09IGVsZW0ub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50OwotCQl9Ci0JfSwKLQlzZXRGaWx0ZXJzOiB7Ci0JCWZpcnN0OiBmdW5jdGlvbiggZWxlbSwgaSApIHsKLQkJCXJldHVybiBpID09PSAwOwotCQl9LAotCi0JCWxhc3Q6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCwgYXJyYXkgKSB7Ci0JCQlyZXR1cm4gaSA9PT0gYXJyYXkubGVuZ3RoIC0gMTsKLQkJfSwKLQotCQlldmVuOiBmdW5jdGlvbiggZWxlbSwgaSApIHsKLQkJCXJldHVybiBpICUgMiA9PT0gMDsKLQkJfSwKLQotCQlvZGQ6IGZ1bmN0aW9uKCBlbGVtLCBpICkgewotCQkJcmV0dXJuIGkgJSAyID09PSAxOwotCQl9LAotCi0JCWx0OiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7Ci0JCQlyZXR1cm4gaSA8IG1hdGNoWzNdIC0gMDsKLQkJfSwKLQotCQlndDogZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNoICkgewotCQkJcmV0dXJuIGkgPiBtYXRjaFszXSAtIDA7Ci0JCX0sCi0KLQkJbnRoOiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7Ci0JCQlyZXR1cm4gbWF0Y2hbM10gLSAwID09PSBpOwotCQl9LAotCi0JCWVxOiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7Ci0JCQlyZXR1cm4gbWF0Y2hbM10gLSAwID09PSBpOwotCQl9Ci0JfSwKLQlmaWx0ZXI6IHsKLQkJUFNFVURPOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2gsIGksIGFycmF5ICkgewotCQkJdmFyIG5hbWUgPSBtYXRjaFsxXSwKLQkJCQlmaWx0ZXIgPSBFeHByLmZpbHRlcnNbIG5hbWUgXTsKLQotCQkJaWYgKCBmaWx0ZXIgKSB7Ci0JCQkJcmV0dXJuIGZpbHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7Ci0KLQkJCX0gZWxzZSBpZiAoIG5hbWUgPT09ICJjb250YWlucyIgKSB7Ci0JCQkJcmV0dXJuIChlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoWyBlbGVtIF0pIHx8ICIiKS5pbmRleE9mKG1hdGNoWzNdKSA+PSAwOwotCi0JCQl9IGVsc2UgaWYgKCBuYW1lID09PSAibm90IiApIHsKLQkJCQl2YXIgbm90ID0gbWF0Y2hbM107Ci0KLQkJCQlmb3IgKCB2YXIgaiA9IDAsIGwgPSBub3QubGVuZ3RoOyBqIDwgbDsgaisrICkgewotCQkJCQlpZiAoIG5vdFtqXSA9PT0gZWxlbSApIHsKLQkJCQkJCXJldHVybiBmYWxzZTsKLQkJCQkJfQotCQkJCX0KLQotCQkJCXJldHVybiB0cnVlOwotCi0JCQl9IGVsc2UgewotCQkJCVNpenpsZS5lcnJvciggbmFtZSApOwotCQkJfQotCQl9LAotCi0JCUNISUxEOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2ggKSB7Ci0JCQl2YXIgZmlyc3QsIGxhc3QsCi0JCQkJZG9uZU5hbWUsIHBhcmVudCwgY2FjaGUsCi0JCQkJY291bnQsIGRpZmYsCi0JCQkJdHlwZSA9IG1hdGNoWzFdLAotCQkJCW5vZGUgPSBlbGVtOwotCi0JCQlzd2l0Y2ggKCB0eXBlICkgewotCQkJCWNhc2UgIm9ubHkiOgotCQkJCWNhc2UgImZpcnN0IjoKLQkJCQkJd2hpbGUgKCAobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSApCSB7Ci0JCQkJCQlpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7IAotCQkJCQkJCXJldHVybiBmYWxzZTsgCi0JCQkJCQl9Ci0JCQkJCX0KLQotCQkJCQlpZiAoIHR5cGUgPT09ICJmaXJzdCIgKSB7IAotCQkJCQkJcmV0dXJuIHRydWU7IAotCQkJCQl9Ci0KLQkJCQkJbm9kZSA9IGVsZW07Ci0KLQkJCQljYXNlICJsYXN0IjoKLQkJCQkJd2hpbGUgKCAobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpICkJIHsKLQkJCQkJCWlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsgCi0JCQkJCQkJcmV0dXJuIGZhbHNlOyAKLQkJCQkJCX0KLQkJCQkJfQotCi0JCQkJCXJldHVybiB0cnVlOwotCi0JCQkJY2FzZSAibnRoIjoKLQkJCQkJZmlyc3QgPSBtYXRjaFsyXTsKLQkJCQkJbGFzdCA9IG1hdGNoWzNdOwotCi0JCQkJCWlmICggZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCApIHsKLQkJCQkJCXJldHVybiB0cnVlOwotCQkJCQl9Ci0JCQkJCQotCQkJCQlkb25lTmFtZSA9IG1hdGNoWzBdOwotCQkJCQlwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7Ci0JCi0JCQkJCWlmICggcGFyZW50ICYmIChwYXJlbnRbIGV4cGFuZG8gXSAhPT0gZG9uZU5hbWUgfHwgIWVsZW0ubm9kZUluZGV4KSApIHsKLQkJCQkJCWNvdW50ID0gMDsKLQkJCQkJCQotCQkJCQkJZm9yICggbm9kZSA9IHBhcmVudC5maXJzdENoaWxkOyBub2RlOyBub2RlID0gbm9kZS5uZXh0U2libGluZyApIHsKLQkJCQkJCQlpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7Ci0JCQkJCQkJCW5vZGUubm9kZUluZGV4ID0gKytjb3VudDsKLQkJCQkJCQl9Ci0JCQkJCQl9IAotCi0JCQkJCQlwYXJlbnRbIGV4cGFuZG8gXSA9IGRvbmVOYW1lOwotCQkJCQl9Ci0JCQkJCQotCQkJCQlkaWZmID0gZWxlbS5ub2RlSW5kZXggLSBsYXN0OwotCi0JCQkJCWlmICggZmlyc3QgPT09IDAgKSB7Ci0JCQkJCQlyZXR1cm4gZGlmZiA9PT0gMDsKLQotCQkJCQl9IGVsc2UgewotCQkJCQkJcmV0dXJuICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7Ci0JCQkJCX0KLQkJCX0KLQkJfSwKLQotCQlJRDogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgewotCQkJcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImlkIikgPT09IG1hdGNoOwotCQl9LAotCi0JCVRBRzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgewotCQkJcmV0dXJuIChtYXRjaCA9PT0gIioiICYmIGVsZW0ubm9kZVR5cGUgPT09IDEpIHx8ICEhZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG1hdGNoOwotCQl9LAotCQkKLQkJQ0xBU1M6IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsKLQkJCXJldHVybiAoIiAiICsgKGVsZW0uY2xhc3NOYW1lIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSArICIgIikKLQkJCQkuaW5kZXhPZiggbWF0Y2ggKSA+IC0xOwotCQl9LAotCi0JCUFUVFI6IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsKLQkJCXZhciBuYW1lID0gbWF0Y2hbMV0sCi0JCQkJcmVzdWx0ID0gU2l6emxlLmF0dHIgPwotCQkJCQlTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApIDoKLQkJCQkJRXhwci5hdHRySGFuZGxlWyBuYW1lIF0gPwotCQkJCQlFeHByLmF0dHJIYW5kbGVbIG5hbWUgXSggZWxlbSApIDoKLQkJCQkJZWxlbVsgbmFtZSBdICE9IG51bGwgPwotCQkJCQkJZWxlbVsgbmFtZSBdIDoKLQkJCQkJCWVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICksCi0JCQkJdmFsdWUgPSByZXN1bHQgKyAiIiwKLQkJCQl0eXBlID0gbWF0Y2hbMl0sCi0JCQkJY2hlY2sgPSBtYXRjaFs0XTsKLQotCQkJcmV0dXJuIHJlc3VsdCA9PSBudWxsID8KLQkJCQl0eXBlID09PSAiIT0iIDoKLQkJCQkhdHlwZSAmJiBTaXp6bGUuYXR0ciA/Ci0JCQkJcmVzdWx0ICE9IG51bGwgOgotCQkJCXR5cGUgPT09ICI9IiA/Ci0JCQkJdmFsdWUgPT09IGNoZWNrIDoKLQkJCQl0eXBlID09PSAiKj0iID8KLQkJCQl2YWx1ZS5pbmRleE9mKGNoZWNrKSA+PSAwIDoKLQkJCQl0eXBlID09PSAifj0iID8KLQkJCQkoIiAiICsgdmFsdWUgKyAiICIpLmluZGV4T2YoY2hlY2spID49IDAgOgotCQkJCSFjaGVjayA/Ci0JCQkJdmFsdWUgJiYgcmVzdWx0ICE9PSBmYWxzZSA6Ci0JCQkJdHlwZSA9PT0gIiE9IiA/Ci0JCQkJdmFsdWUgIT09IGNoZWNrIDoKLQkJCQl0eXBlID09PSAiXj0iID8KLQkJCQl2YWx1ZS5pbmRleE9mKGNoZWNrKSA9PT0gMCA6Ci0JCQkJdHlwZSA9PT0gIiQ9IiA/Ci0JCQkJdmFsdWUuc3Vic3RyKHZhbHVlLmxlbmd0aCAtIGNoZWNrLmxlbmd0aCkgPT09IGNoZWNrIDoKLQkJCQl0eXBlID09PSAifD0iID8KLQkJCQl2YWx1ZSA9PT0gY2hlY2sgfHwgdmFsdWUuc3Vic3RyKDAsIGNoZWNrLmxlbmd0aCArIDEpID09PSBjaGVjayArICItIiA6Ci0JCQkJZmFsc2U7Ci0JCX0sCi0KLQkJUE9TOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2gsIGksIGFycmF5ICkgewotCQkJdmFyIG5hbWUgPSBtYXRjaFsyXSwKLQkJCQlmaWx0ZXIgPSBFeHByLnNldEZpbHRlcnNbIG5hbWUgXTsKLQotCQkJaWYgKCBmaWx0ZXIgKSB7Ci0JCQkJcmV0dXJuIGZpbHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7Ci0JCQl9Ci0JCX0KLQl9Ci19OwotCi12YXIgb3JpZ1BPUyA9IEV4cHIubWF0Y2guUE9TLAotCWZlc2NhcGUgPSBmdW5jdGlvbihhbGwsIG51bSl7Ci0JCXJldHVybiAiXFwiICsgKG51bSAtIDAgKyAxKTsKLQl9OwotCi1mb3IgKCB2YXIgdHlwZSBpbiBFeHByLm1hdGNoICkgewotCUV4cHIubWF0Y2hbIHR5cGUgXSA9IG5ldyBSZWdFeHAoIEV4cHIubWF0Y2hbIHR5cGUgXS5zb3VyY2UgKyAoLyg/IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291cmNlKSApOwotCUV4cHIubGVmdE1hdGNoWyB0eXBlIF0gPSBuZXcgUmVnRXhwKCAvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlICsgRXhwci5tYXRjaFsgdHlwZSBdLnNvdXJjZS5yZXBsYWNlKC9cXChcZCspL2csIGZlc2NhcGUpICk7Ci19Ci0KLXZhciBtYWtlQXJyYXkgPSBmdW5jdGlvbiggYXJyYXksIHJlc3VsdHMgKSB7Ci0JYXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggYXJyYXksIDAgKTsKLQotCWlmICggcmVzdWx0cyApIHsKLQkJcmVzdWx0cy5wdXNoLmFwcGx5KCByZXN1bHRzLCBhcnJheSApOwotCQlyZXR1cm4gcmVzdWx0czsKLQl9Ci0JCi0JcmV0dXJuIGFycmF5OwotfTsKLQotLy8gUGVyZm9ybSBhIHNpbXBsZSBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgY2FwYWJsZSBvZgotLy8gY29udmVydGluZyBhIE5vZGVMaXN0IHRvIGFuIGFycmF5IHVzaW5nIGJ1aWx0aW4gbWV0aG9kcy4KLS8vIEFsc28gdmVyaWZpZXMgdGhhdCB0aGUgcmV0dXJuZWQgYXJyYXkgaG9sZHMgRE9NIG5vZGVzCi0vLyAod2hpY2ggaXMgbm90IHRoZSBjYXNlIGluIHRoZSBCbGFja2JlcnJ5IGJyb3dzZXIpCi10cnkgewotCUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcywgMCApWzBdLm5vZGVUeXBlOwotCi0vLyBQcm92aWRlIGEgZmFsbGJhY2sgbWV0aG9kIGlmIGl0IGRvZXMgbm90IHdvcmsKLX0gY2F0Y2goIGUgKSB7Ci0JbWFrZUFycmF5ID0gZnVuY3Rpb24oIGFycmF5LCByZXN1bHRzICkgewotCQl2YXIgaSA9IDAsCi0JCQlyZXQgPSByZXN1bHRzIHx8IFtdOwotCi0JCWlmICggdG9TdHJpbmcuY2FsbChhcnJheSkgPT09ICJbb2JqZWN0IEFycmF5XSIgKSB7Ci0JCQlBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSggcmV0LCBhcnJheSApOwotCi0JCX0gZWxzZSB7Ci0JCQlpZiAoIHR5cGVvZiBhcnJheS5sZW5ndGggPT09ICJudW1iZXIiICkgewotCQkJCWZvciAoIHZhciBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotCQkJCQlyZXQucHVzaCggYXJyYXlbaV0gKTsKLQkJCQl9Ci0KLQkJCX0gZWxzZSB7Ci0JCQkJZm9yICggOyBhcnJheVtpXTsgaSsrICkgewotCQkJCQlyZXQucHVzaCggYXJyYXlbaV0gKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmV0OwotCX07Ci19Ci0KLXZhciBzb3J0T3JkZXIsIHNpYmxpbmdDaGVjazsKLQotaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24gKSB7Ci0Jc29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7Ci0JCWlmICggYSA9PT0gYiApIHsKLQkJCWhhc0R1cGxpY2F0ZSA9IHRydWU7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWlmICggIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24gKSB7Ci0JCQlyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/IC0xIDogMTsKLQkJfQotCi0JCXJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNCA/IC0xIDogMTsKLQl9OwotCi19IGVsc2UgewotCXNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkgewotCQkvLyBUaGUgbm9kZXMgYXJlIGlkZW50aWNhbCwgd2UgY2FuIGV4aXQgZWFybHkKLQkJaWYgKCBhID09PSBiICkgewotCQkJaGFzRHVwbGljYXRlID0gdHJ1ZTsKLQkJCXJldHVybiAwOwotCi0JCS8vIEZhbGxiYWNrIHRvIHVzaW5nIHNvdXJjZUluZGV4IChpbiBJRSkgaWYgaXQncyBhdmFpbGFibGUgb24gYm90aCBub2RlcwotCQl9IGVsc2UgaWYgKCBhLnNvdXJjZUluZGV4ICYmIGIuc291cmNlSW5kZXggKSB7Ci0JCQlyZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7Ci0JCX0KLQotCQl2YXIgYWwsIGJsLAotCQkJYXAgPSBbXSwKLQkJCWJwID0gW10sCi0JCQlhdXAgPSBhLnBhcmVudE5vZGUsCi0JCQlidXAgPSBiLnBhcmVudE5vZGUsCi0JCQljdXIgPSBhdXA7Ci0KLQkJLy8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncyAob3IgaWRlbnRpY2FsKSB3ZSBjYW4gZG8gYSBxdWljayBjaGVjawotCQlpZiAoIGF1cCA9PT0gYnVwICkgewotCQkJcmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApOwotCi0JCS8vIElmIG5vIHBhcmVudHMgd2VyZSBmb3VuZCB0aGVuIHRoZSBub2RlcyBhcmUgZGlzY29ubmVjdGVkCi0JCX0gZWxzZSBpZiAoICFhdXAgKSB7Ci0JCQlyZXR1cm4gLTE7Ci0KLQkJfSBlbHNlIGlmICggIWJ1cCApIHsKLQkJCXJldHVybiAxOwotCQl9Ci0KLQkJLy8gT3RoZXJ3aXNlIHRoZXkncmUgc29tZXdoZXJlIGVsc2UgaW4gdGhlIHRyZWUgc28gd2UgbmVlZAotCQkvLyB0byBidWlsZCB1cCBhIGZ1bGwgbGlzdCBvZiB0aGUgcGFyZW50Tm9kZXMgZm9yIGNvbXBhcmlzb24KLQkJd2hpbGUgKCBjdXIgKSB7Ci0JCQlhcC51bnNoaWZ0KCBjdXIgKTsKLQkJCWN1ciA9IGN1ci5wYXJlbnROb2RlOwotCQl9Ci0KLQkJY3VyID0gYnVwOwotCi0JCXdoaWxlICggY3VyICkgewotCQkJYnAudW5zaGlmdCggY3VyICk7Ci0JCQljdXIgPSBjdXIucGFyZW50Tm9kZTsKLQkJfQotCi0JCWFsID0gYXAubGVuZ3RoOwotCQlibCA9IGJwLmxlbmd0aDsKLQotCQkvLyBTdGFydCB3YWxraW5nIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeQotCQlmb3IgKCB2YXIgaSA9IDA7IGkgPCBhbCAmJiBpIDwgYmw7IGkrKyApIHsKLQkJCWlmICggYXBbaV0gIT09IGJwW2ldICkgewotCQkJCXJldHVybiBzaWJsaW5nQ2hlY2soIGFwW2ldLCBicFtpXSApOwotCQkJfQotCQl9Ci0KLQkJLy8gV2UgZW5kZWQgc29tZXBsYWNlIHVwIHRoZSB0cmVlIHNvIGRvIGEgc2libGluZyBjaGVjawotCQlyZXR1cm4gaSA9PT0gYWwgPwotCQkJc2libGluZ0NoZWNrKCBhLCBicFtpXSwgLTEgKSA6Ci0JCQlzaWJsaW5nQ2hlY2soIGFwW2ldLCBiLCAxICk7Ci0JfTsKLQotCXNpYmxpbmdDaGVjayA9IGZ1bmN0aW9uKCBhLCBiLCByZXQgKSB7Ci0JCWlmICggYSA9PT0gYiApIHsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQl2YXIgY3VyID0gYS5uZXh0U2libGluZzsKLQotCQl3aGlsZSAoIGN1ciApIHsKLQkJCWlmICggY3VyID09PSBiICkgewotCQkJCXJldHVybiAtMTsKLQkJCX0KLQotCQkJY3VyID0gY3VyLm5leHRTaWJsaW5nOwotCQl9Ci0KLQkJcmV0dXJuIDE7Ci0JfTsKLX0KLQotLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBicm93c2VyIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZSB3aGVuCi0vLyBxdWVyeWluZyBieSBnZXRFbGVtZW50QnlJZCAoYW5kIHByb3ZpZGUgYSB3b3JrYXJvdW5kKQotKGZ1bmN0aW9uKCl7Ci0JLy8gV2UncmUgZ29pbmcgdG8gaW5qZWN0IGEgZmFrZSBpbnB1dCBlbGVtZW50IHdpdGggYSBzcGVjaWZpZWQgbmFtZQotCXZhciBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksCi0JCWlkID0gInNjcmlwdCIgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpLAotCQlyb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwotCi0JZm9ybS5pbm5lckhUTUwgPSAiPGEgbmFtZT0nIiArIGlkICsgIicvPiI7Ci0KLQkvLyBJbmplY3QgaXQgaW50byB0aGUgcm9vdCBlbGVtZW50LCBjaGVjayBpdHMgc3RhdHVzLCBhbmQgcmVtb3ZlIGl0IHF1aWNrbHkKLQlyb290Lmluc2VydEJlZm9yZSggZm9ybSwgcm9vdC5maXJzdENoaWxkICk7Ci0KLQkvLyBUaGUgd29ya2Fyb3VuZCBoYXMgdG8gZG8gYWRkaXRpb25hbCBjaGVja3MgYWZ0ZXIgYSBnZXRFbGVtZW50QnlJZAotCS8vIFdoaWNoIHNsb3dzIHRoaW5ncyBkb3duIGZvciBvdGhlciBicm93c2VycyAoaGVuY2UgdGhlIGJyYW5jaGluZykKLQlpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBpZCApICkgewotCQlFeHByLmZpbmQuSUQgPSBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQsIGlzWE1MICkgewotCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgIWlzWE1MICkgewotCQkJCXZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZChtYXRjaFsxXSk7Ci0KLQkJCQlyZXR1cm4gbSA/Ci0JCQkJCW0uaWQgPT09IG1hdGNoWzFdIHx8IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmIG0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFsdWUgPT09IG1hdGNoWzFdID8KLQkJCQkJCVttXSA6Ci0JCQkJCQl1bmRlZmluZWQgOgotCQkJCQlbXTsKLQkJCX0KLQkJfTsKLQotCQlFeHByLmZpbHRlci5JRCA9IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsKLQkJCXZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gInVuZGVmaW5lZCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOwotCi0JCQlyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBub2RlICYmIG5vZGUubm9kZVZhbHVlID09PSBtYXRjaDsKLQkJfTsKLQl9Ci0KLQlyb290LnJlbW92ZUNoaWxkKCBmb3JtICk7Ci0KLQkvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQotCXJvb3QgPSBmb3JtID0gbnVsbDsKLX0pKCk7Ci0KLShmdW5jdGlvbigpewotCS8vIENoZWNrIHRvIHNlZSBpZiB0aGUgYnJvd3NlciByZXR1cm5zIG9ubHkgZWxlbWVudHMKLQkvLyB3aGVuIGRvaW5nIGdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikKLQotCS8vIENyZWF0ZSBhIGZha2UgZWxlbWVudAotCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLQlkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpICk7Ci0KLQkvLyBNYWtlIHN1cmUgbm8gY29tbWVudHMgYXJlIGZvdW5kCi0JaWYgKCBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGggPiAwICkgewotCQlFeHByLmZpbmQuVEFHID0gZnVuY3Rpb24oIG1hdGNoLCBjb250ZXh0ICkgewotCQkJdmFyIHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBtYXRjaFsxXSApOwotCi0JCQkvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzCi0JCQlpZiAoIG1hdGNoWzFdID09PSAiKiIgKSB7Ci0JCQkJdmFyIHRtcCA9IFtdOwotCi0JCQkJZm9yICggdmFyIGkgPSAwOyByZXN1bHRzW2ldOyBpKysgKSB7Ci0JCQkJCWlmICggcmVzdWx0c1tpXS5ub2RlVHlwZSA9PT0gMSApIHsKLQkJCQkJCXRtcC5wdXNoKCByZXN1bHRzW2ldICk7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlyZXN1bHRzID0gdG1wOwotCQkJfQotCi0JCQlyZXR1cm4gcmVzdWx0czsKLQkJfTsKLQl9Ci0KLQkvLyBDaGVjayB0byBzZWUgaWYgYW4gYXR0cmlidXRlIHJldHVybnMgbm9ybWFsaXplZCBocmVmIGF0dHJpYnV0ZXMKLQlkaXYuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMnPjwvYT4iOwotCi0JaWYgKCBkaXYuZmlyc3RDaGlsZCAmJiB0eXBlb2YgZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlICE9PSAidW5kZWZpbmVkIiAmJgotCQkJZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikgIT09ICIjIiApIHsKLQotCQlFeHByLmF0dHJIYW5kbGUuaHJlZiA9IGZ1bmN0aW9uKCBlbGVtICkgewotCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCAiaHJlZiIsIDIgKTsKLQkJfTsKLQl9Ci0KLQkvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQotCWRpdiA9IG51bGw7Ci19KSgpOwotCi1pZiAoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7Ci0JKGZ1bmN0aW9uKCl7Ci0JCXZhciBvbGRTaXp6bGUgPSBTaXp6bGUsCi0JCQlkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwKLQkJCWlkID0gIl9fc2l6emxlX18iOwotCi0JCWRpdi5pbm5lckhUTUwgPSAiPHAgY2xhc3M9J1RFU1QnPjwvcD4iOwotCi0JCS8vIFNhZmFyaSBjYW4ndCBoYW5kbGUgdXBwZXJjYXNlIG9yIHVuaWNvZGUgY2hhcmFjdGVycyB3aGVuCi0JCS8vIGluIHF1aXJrcyBtb2RlLgotCQlpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsICYmIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aCA9PT0gMCApIHsKLQkJCXJldHVybjsKLQkJfQotCQotCQlTaXp6bGUgPSBmdW5jdGlvbiggcXVlcnksIGNvbnRleHQsIGV4dHJhLCBzZWVkICkgewotCQkJY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7Ci0KLQkJCS8vIE9ubHkgdXNlIHF1ZXJ5U2VsZWN0b3JBbGwgb24gbm9uLVhNTCBkb2N1bWVudHMKLQkJCS8vIChJRCBzZWxlY3RvcnMgZG9uJ3Qgd29yayBpbiBub24tSFRNTCBkb2N1bWVudHMpCi0JCQlpZiAoICFzZWVkICYmICFTaXp6bGUuaXNYTUwoY29udGV4dCkgKSB7Ci0JCQkJLy8gU2VlIGlmIHdlIGZpbmQgYSBzZWxlY3RvciB0byBzcGVlZCB1cAotCQkJCXZhciBtYXRjaCA9IC9eKFx3KyQpfF5cLihbXHdcLV0rJCl8XiMoW1x3XC1dKyQpLy5leGVjKCBxdWVyeSApOwotCQkJCQotCQkJCWlmICggbWF0Y2ggJiYgKGNvbnRleHQubm9kZVR5cGUgPT09IDEgfHwgY29udGV4dC5ub2RlVHlwZSA9PT0gOSkgKSB7Ci0JCQkJCS8vIFNwZWVkLXVwOiBTaXp6bGUoIlRBRyIpCi0JCQkJCWlmICggbWF0Y2hbMV0gKSB7Ci0JCQkJCQlyZXR1cm4gbWFrZUFycmF5KCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBxdWVyeSApLCBleHRyYSApOwotCQkJCQkKLQkJCQkJLy8gU3BlZWQtdXA6IFNpenpsZSgiLkNMQVNTIikKLQkJCQkJfSBlbHNlIGlmICggbWF0Y2hbMl0gJiYgRXhwci5maW5kLkNMQVNTICYmIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHsKLQkJCQkJCXJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbWF0Y2hbMl0gKSwgZXh0cmEgKTsKLQkJCQkJfQotCQkJCX0KLQkJCQkKLQkJCQlpZiAoIGNvbnRleHQubm9kZVR5cGUgPT09IDkgKSB7Ci0JCQkJCS8vIFNwZWVkLXVwOiBTaXp6bGUoImJvZHkiKQotCQkJCQkvLyBUaGUgYm9keSBlbGVtZW50IG9ubHkgZXhpc3RzIG9uY2UsIG9wdGltaXplIGZpbmRpbmcgaXQKLQkJCQkJaWYgKCBxdWVyeSA9PT0gImJvZHkiICYmIGNvbnRleHQuYm9keSApIHsKLQkJCQkJCXJldHVybiBtYWtlQXJyYXkoIFsgY29udGV4dC5ib2R5IF0sIGV4dHJhICk7Ci0JCQkJCQkKLQkJCQkJLy8gU3BlZWQtdXA6IFNpenpsZSgiI0lEIikKLQkJCQkJfSBlbHNlIGlmICggbWF0Y2ggJiYgbWF0Y2hbM10gKSB7Ci0JCQkJCQl2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWzNdICk7Ci0KLQkJCQkJCS8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCi0JCQkJCQkvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCi0JCQkJCQlpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgewotCQkJCQkJCS8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEgcmV0dXJuIGl0ZW1zCi0JCQkJCQkJLy8gYnkgbmFtZSBpbnN0ZWFkIG9mIElECi0JCQkJCQkJaWYgKCBlbGVtLmlkID09PSBtYXRjaFszXSApIHsKLQkJCQkJCQkJcmV0dXJuIG1ha2VBcnJheSggWyBlbGVtIF0sIGV4dHJhICk7Ci0JCQkJCQkJfQotCQkJCQkJCQotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQlyZXR1cm4gbWFrZUFycmF5KCBbXSwgZXh0cmEgKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQkKLQkJCQkJdHJ5IHsKLQkJCQkJCXJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChxdWVyeSksIGV4dHJhICk7Ci0JCQkJCX0gY2F0Y2gocXNhRXJyb3IpIHt9Ci0KLQkJCQkvLyBxU0Egd29ya3Mgc3RyYW5nZWx5IG9uIEVsZW1lbnQtcm9vdGVkIHF1ZXJpZXMKLQkJCQkvLyBXZSBjYW4gd29yayBhcm91bmQgdGhpcyBieSBzcGVjaWZ5aW5nIGFuIGV4dHJhIElEIG9uIHRoZSByb290Ci0JCQkJLy8gYW5kIHdvcmtpbmcgdXAgZnJvbSB0aGVyZSAoVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoZSB0ZWNobmlxdWUpCi0JCQkJLy8gSUUgOCBkb2Vzbid0IHdvcmsgb24gb2JqZWN0IGVsZW1lbnRzCi0JCQkJfSBlbHNlIGlmICggY29udGV4dC5ub2RlVHlwZSA9PT0gMSAmJiBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgewotCQkJCQl2YXIgb2xkQ29udGV4dCA9IGNvbnRleHQsCi0JCQkJCQlvbGQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggImlkIiApLAotCQkJCQkJbmlkID0gb2xkIHx8IGlkLAotCQkJCQkJaGFzUGFyZW50ID0gY29udGV4dC5wYXJlbnROb2RlLAotCQkJCQkJcmVsYXRpdmVIaWVyYXJjaHlTZWxlY3RvciA9IC9eXHMqWyt+XS8udGVzdCggcXVlcnkgKTsKLQotCQkJCQlpZiAoICFvbGQgKSB7Ci0JCQkJCQljb250ZXh0LnNldEF0dHJpYnV0ZSggImlkIiwgbmlkICk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQluaWQgPSBuaWQucmVwbGFjZSggLycvZywgIlxcJCYiICk7Ci0JCQkJCX0KLQkJCQkJaWYgKCByZWxhdGl2ZUhpZXJhcmNoeVNlbGVjdG9yICYmIGhhc1BhcmVudCApIHsKLQkJCQkJCWNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7Ci0JCQkJCX0KLQotCQkJCQl0cnkgewotCQkJCQkJaWYgKCAhcmVsYXRpdmVIaWVyYXJjaHlTZWxlY3RvciB8fCBoYXNQYXJlbnQgKSB7Ci0JCQkJCQkJcmV0dXJuIG1ha2VBcnJheSggY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCAiW2lkPSciICsgbmlkICsgIiddICIgKyBxdWVyeSApLCBleHRyYSApOwotCQkJCQkJfQotCi0JCQkJCX0gY2F0Y2gocHNldWRvRXJyb3IpIHsKLQkJCQkJfSBmaW5hbGx5IHsKLQkJCQkJCWlmICggIW9sZCApIHsKLQkJCQkJCQlvbGRDb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggImlkIiApOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkKLQkJCXJldHVybiBvbGRTaXp6bGUocXVlcnksIGNvbnRleHQsIGV4dHJhLCBzZWVkKTsKLQkJfTsKLQotCQlmb3IgKCB2YXIgcHJvcCBpbiBvbGRTaXp6bGUgKSB7Ci0JCQlTaXp6bGVbIHByb3AgXSA9IG9sZFNpenpsZVsgcHJvcCBdOwotCQl9Ci0KLQkJLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKLQkJZGl2ID0gbnVsbDsKLQl9KSgpOwotfQotCi0oZnVuY3Rpb24oKXsKLQl2YXIgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKLQkJbWF0Y2hlcyA9IGh0bWwubWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwubW96TWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwubXNNYXRjaGVzU2VsZWN0b3I7Ci0KLQlpZiAoIG1hdGNoZXMgKSB7Ci0JCS8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvcgotCQkvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5IGZhaWxzIHRoaXMpCi0JCXZhciBkaXNjb25uZWN0ZWRNYXRjaCA9ICFtYXRjaGVzLmNhbGwoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICksICJkaXYiICksCi0JCQlwc2V1ZG9Xb3JrcyA9IGZhbHNlOwotCi0JCXRyeSB7Ci0JCQkvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCi0JCQkvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkCi0JCQltYXRjaGVzLmNhbGwoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgIlt0ZXN0IT0nJ106c2l6emxlIiApOwotCQotCQl9IGNhdGNoKCBwc2V1ZG9FcnJvciApIHsKLQkJCXBzZXVkb1dvcmtzID0gdHJ1ZTsKLQkJfQotCi0JCVNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggbm9kZSwgZXhwciApIHsKLQkJCS8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZAotCQkJZXhwciA9IGV4cHIucmVwbGFjZSgvXD1ccyooW14nIlxdXSopXHMqXF0vZywgIj0nJDEnXSIpOwotCi0JCQlpZiAoICFTaXp6bGUuaXNYTUwoIG5vZGUgKSApIHsKLQkJCQl0cnkgeyAKLQkJCQkJaWYgKCBwc2V1ZG9Xb3JrcyB8fCAhRXhwci5tYXRjaC5QU0VVRE8udGVzdCggZXhwciApICYmICEvIT0vLnRlc3QoIGV4cHIgKSApIHsKLQkJCQkJCXZhciByZXQgPSBtYXRjaGVzLmNhbGwoIG5vZGUsIGV4cHIgKTsKLQotCQkJCQkJLy8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2RlcwotCQkJCQkJaWYgKCByZXQgfHwgIWRpc2Nvbm5lY3RlZE1hdGNoIHx8Ci0JCQkJCQkJCS8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBiZSBpbiBhIGRvY3VtZW50Ci0JCQkJCQkJCS8vIGZyYWdtZW50IGluIElFIDksIHNvIGNoZWNrIGZvciB0aGF0Ci0JCQkJCQkJCW5vZGUuZG9jdW1lbnQgJiYgbm9kZS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7Ci0JCQkJCQkJcmV0dXJuIHJldDsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0gY2F0Y2goZSkge30KLQkJCX0KLQotCQkJcmV0dXJuIFNpenpsZShleHByLCBudWxsLCBudWxsLCBbbm9kZV0pLmxlbmd0aCA+IDA7Ci0JCX07Ci0JfQotfSkoKTsKLQotKGZ1bmN0aW9uKCl7Ci0JdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotCi0JZGl2LmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2PjxkaXYgY2xhc3M9J3Rlc3QnPjwvZGl2PiI7Ci0KLQkvLyBPcGVyYSBjYW4ndCBmaW5kIGEgc2Vjb25kIGNsYXNzbmFtZSAoaW4gOS42KQotCS8vIEFsc28sIG1ha2Ugc3VyZSB0aGF0IGdldEVsZW1lbnRzQnlDbGFzc05hbWUgYWN0dWFsbHkgZXhpc3RzCi0JaWYgKCAhZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGggPT09IDAgKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQkvLyBTYWZhcmkgY2FjaGVzIGNsYXNzIGF0dHJpYnV0ZXMsIGRvZXNuJ3QgY2F0Y2ggY2hhbmdlcyAoaW4gMy4yKQotCWRpdi5sYXN0Q2hpbGQuY2xhc3NOYW1lID0gImUiOwotCi0JaWYgKCBkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCA9PT0gMSApIHsKLQkJcmV0dXJuOwotCX0KLQkKLQlFeHByLm9yZGVyLnNwbGljZSgxLCAwLCAiQ0xBU1MiKTsKLQlFeHByLmZpbmQuQ0xBU1MgPSBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQsIGlzWE1MICkgewotCQlpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09ICJ1bmRlZmluZWQiICYmICFpc1hNTCApIHsKLQkJCXJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobWF0Y2hbMV0pOwotCQl9Ci0JfTsKLQotCS8vIHJlbGVhc2UgbWVtb3J5IGluIElFCi0JZGl2ID0gbnVsbDsKLX0pKCk7Ci0KLWZ1bmN0aW9uIGRpck5vZGVDaGVjayggZGlyLCBjdXIsIGRvbmVOYW1lLCBjaGVja1NldCwgbm9kZUNoZWNrLCBpc1hNTCApIHsKLQlmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVja1NldC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7Ci0JCXZhciBlbGVtID0gY2hlY2tTZXRbaV07Ci0KLQkJaWYgKCBlbGVtICkgewotCQkJdmFyIG1hdGNoID0gZmFsc2U7Ci0KLQkJCWVsZW0gPSBlbGVtW2Rpcl07Ci0KLQkJCXdoaWxlICggZWxlbSApIHsKLQkJCQlpZiAoIGVsZW1bIGV4cGFuZG8gXSA9PT0gZG9uZU5hbWUgKSB7Ci0JCQkJCW1hdGNoID0gY2hlY2tTZXRbZWxlbS5zaXpzZXRdOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWlzWE1MICl7Ci0JCQkJCWVsZW1bIGV4cGFuZG8gXSA9IGRvbmVOYW1lOwotCQkJCQllbGVtLnNpenNldCA9IGk7Ci0JCQkJfQotCi0JCQkJaWYgKCBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IGN1ciApIHsKLQkJCQkJbWF0Y2ggPSBlbGVtOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQllbGVtID0gZWxlbVtkaXJdOwotCQkJfQotCi0JCQljaGVja1NldFtpXSA9IG1hdGNoOwotCQl9Ci0JfQotfQotCi1mdW5jdGlvbiBkaXJDaGVjayggZGlyLCBjdXIsIGRvbmVOYW1lLCBjaGVja1NldCwgbm9kZUNoZWNrLCBpc1hNTCApIHsKLQlmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVja1NldC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7Ci0JCXZhciBlbGVtID0gY2hlY2tTZXRbaV07Ci0KLQkJaWYgKCBlbGVtICkgewotCQkJdmFyIG1hdGNoID0gZmFsc2U7Ci0JCQkKLQkJCWVsZW0gPSBlbGVtW2Rpcl07Ci0KLQkJCXdoaWxlICggZWxlbSApIHsKLQkJCQlpZiAoIGVsZW1bIGV4cGFuZG8gXSA9PT0gZG9uZU5hbWUgKSB7Ci0JCQkJCW1hdGNoID0gY2hlY2tTZXRbZWxlbS5zaXpzZXRdOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0JCQkJCWlmICggIWlzWE1MICkgewotCQkJCQkJZWxlbVsgZXhwYW5kbyBdID0gZG9uZU5hbWU7Ci0JCQkJCQllbGVtLnNpenNldCA9IGk7Ci0JCQkJCX0KLQotCQkJCQlpZiAoIHR5cGVvZiBjdXIgIT09ICJzdHJpbmciICkgewotCQkJCQkJaWYgKCBlbGVtID09PSBjdXIgKSB7Ci0JCQkJCQkJbWF0Y2ggPSB0cnVlOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCi0JCQkJCX0gZWxzZSBpZiAoIFNpenpsZS5maWx0ZXIoIGN1ciwgW2VsZW1dICkubGVuZ3RoID4gMCApIHsKLQkJCQkJCW1hdGNoID0gZWxlbTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJZWxlbSA9IGVsZW1bZGlyXTsKLQkJCX0KLQotCQkJY2hlY2tTZXRbaV0gPSBtYXRjaDsKLQkJfQotCX0KLX0KLQotaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMgKSB7Ci0JU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGEsIGIgKSB7Ci0JCXJldHVybiBhICE9PSBiICYmIChhLmNvbnRhaW5zID8gYS5jb250YWlucyhiKSA6IHRydWUpOwotCX07Ci0KLX0gZWxzZSBpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApIHsKLQlTaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbiggYSwgYiApIHsKLQkJcmV0dXJuICEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiAxNik7Ci0JfTsKLQotfSBlbHNlIHsKLQlTaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbigpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX07Ci19Ci0KLVNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkgewotCS8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QKLQkvLyAoc3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMykgCi0JdmFyIGRvY3VtZW50RWxlbWVudCA9IChlbGVtID8gZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gOiAwKS5kb2N1bWVudEVsZW1lbnQ7Ci0KLQlyZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSAiSFRNTCIgOiBmYWxzZTsKLX07Ci0KLXZhciBwb3NQcm9jZXNzID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCBzZWVkICkgewotCXZhciBtYXRjaCwKLQkJdG1wU2V0ID0gW10sCi0JCWxhdGVyID0gIiIsCi0JCXJvb3QgPSBjb250ZXh0Lm5vZGVUeXBlID8gW2NvbnRleHRdIDogY29udGV4dDsKLQotCS8vIFBvc2l0aW9uIHNlbGVjdG9ycyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIGZpbHRlcgotCS8vIEFuZCBzbyBtdXN0IDpub3QocG9zaXRpb25hbCkgc28gd2UgbW92ZSBhbGwgUFNFVURPcyB0byB0aGUgZW5kCi0Jd2hpbGUgKCAobWF0Y2ggPSBFeHByLm1hdGNoLlBTRVVETy5leGVjKCBzZWxlY3RvciApKSApIHsKLQkJbGF0ZXIgKz0gbWF0Y2hbMF07Ci0JCXNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZSggRXhwci5tYXRjaC5QU0VVRE8sICIiICk7Ci0JfQotCi0Jc2VsZWN0b3IgPSBFeHByLnJlbGF0aXZlW3NlbGVjdG9yXSA/IHNlbGVjdG9yICsgIioiIDogc2VsZWN0b3I7Ci0KLQlmb3IgKCB2YXIgaSA9IDAsIGwgPSByb290Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLQkJU2l6emxlKCBzZWxlY3Rvciwgcm9vdFtpXSwgdG1wU2V0LCBzZWVkICk7Ci0JfQotCi0JcmV0dXJuIFNpenpsZS5maWx0ZXIoIGxhdGVyLCB0bXBTZXQgKTsKLX07Ci0KLS8vIEVYUE9TRQotLy8gT3ZlcnJpZGUgc2l6emxlIGF0dHJpYnV0ZSByZXRyaWV2YWwKLVNpenpsZS5hdHRyID0galF1ZXJ5LmF0dHI7Ci1TaXp6bGUuc2VsZWN0b3JzLmF0dHJNYXAgPSB7fTsKLWpRdWVyeS5maW5kID0gU2l6emxlOwotalF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzOwotalF1ZXJ5LmV4cHJbIjoiXSA9IGpRdWVyeS5leHByLmZpbHRlcnM7Ci1qUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7Ci1qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0OwotalF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MOwotalF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zOwotCi0KLX0pKCk7Ci0KLQotdmFyIHJ1bnRpbCA9IC9VbnRpbCQvLAotCXJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLAotCS8vIE5vdGU6IFRoaXMgUmVnRXhwIHNob3VsZCBiZSBpbXByb3ZlZCwgb3IgbGlrZWx5IHB1bGxlZCBmcm9tIFNpenpsZQotCXJtdWx0aXNlbGVjdG9yID0gLywvLAotCWlzU2ltcGxlID0gL14uW146I1xbXC4sXSokLywKLQlzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZSwKLQlQT1MgPSBqUXVlcnkuZXhwci5tYXRjaC5QT1MsCi0JLy8gbWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXQKLQlndWFyYW50ZWVkVW5pcXVlID0gewotCQljaGlsZHJlbjogdHJ1ZSwKLQkJY29udGVudHM6IHRydWUsCi0JCW5leHQ6IHRydWUsCi0JCXByZXY6IHRydWUKLQl9OwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLQlmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0JCXZhciBzZWxmID0gdGhpcywKLQkJCWksIGw7Ci0KLQkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgewotCQkJcmV0dXJuIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoZnVuY3Rpb24oKSB7Ci0JCQkJZm9yICggaSA9IDAsIGwgPSBzZWxmLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLQkJCQkJaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkgewotCQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJfQotCi0JCXZhciByZXQgPSB0aGlzLnB1c2hTdGFjayggIiIsICJmaW5kIiwgc2VsZWN0b3IgKSwKLQkJCWxlbmd0aCwgbiwgcjsKLQotCQlmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotCQkJbGVuZ3RoID0gcmV0Lmxlbmd0aDsKLQkJCWpRdWVyeS5maW5kKCBzZWxlY3RvciwgdGhpc1tpXSwgcmV0ICk7Ci0KLQkJCWlmICggaSA+IDAgKSB7Ci0JCQkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc3VsdHMgYXJlIHVuaXF1ZQotCQkJCWZvciAoIG4gPSBsZW5ndGg7IG4gPCByZXQubGVuZ3RoOyBuKysgKSB7Ci0JCQkJCWZvciAoIHIgPSAwOyByIDwgbGVuZ3RoOyByKysgKSB7Ci0JCQkJCQlpZiAoIHJldFtyXSA9PT0gcmV0W25dICkgewotCQkJCQkJCXJldC5zcGxpY2Uobi0tLCAxKTsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfSwKLQotCWhhczogZnVuY3Rpb24oIHRhcmdldCApIHsKLQkJdmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCApOwotCQlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKSB7Ci0JCQlmb3IgKCB2YXIgaSA9IDAsIGwgPSB0YXJnZXRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLQkJCQlpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1tpXSApICkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCX0sCi0KLQlub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLQkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IsIGZhbHNlKSwgIm5vdCIsIHNlbGVjdG9yKTsKLQl9LAotCi0JZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0JCXJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCB0cnVlKSwgImZpbHRlciIsIHNlbGVjdG9yICk7Ci0JfSwKLQotCWlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0JCXJldHVybiAhIXNlbGVjdG9yICYmICggCi0JCQl0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciID8KLQkJCQkvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbCBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0Ci0JCQkJLy8gc28gJCgicDpmaXJzdCIpLmlzKCJwOmxhc3QiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gInAiLgotCQkJCVBPUy50ZXN0KCBzZWxlY3RvciApID8gCi0JCQkJCWpRdWVyeSggc2VsZWN0b3IsIHRoaXMuY29udGV4dCApLmluZGV4KCB0aGlzWzBdICkgPj0gMCA6Ci0JCQkJCWpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCB0aGlzICkubGVuZ3RoID4gMCA6Ci0JCQkJdGhpcy5maWx0ZXIoIHNlbGVjdG9yICkubGVuZ3RoID4gMCApOwotCX0sCi0KLQljbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkgewotCQl2YXIgcmV0ID0gW10sIGksIGwsIGN1ciA9IHRoaXNbMF07Ci0JCQotCQkvLyBBcnJheSAoZGVwcmVjYXRlZCBhcyBvZiBqUXVlcnkgMS43KQotCQlpZiAoIGpRdWVyeS5pc0FycmF5KCBzZWxlY3RvcnMgKSApIHsKLQkJCXZhciBsZXZlbCA9IDE7Ci0KLQkJCXdoaWxlICggY3VyICYmIGN1ci5vd25lckRvY3VtZW50ICYmIGN1ciAhPT0gY29udGV4dCApIHsKLQkJCQlmb3IgKCBpID0gMDsgaSA8IHNlbGVjdG9ycy5sZW5ndGg7IGkrKyApIHsKLQotCQkJCQlpZiAoIGpRdWVyeSggY3VyICkuaXMoIHNlbGVjdG9yc1sgaSBdICkgKSB7Ci0JCQkJCQlyZXQucHVzaCh7IHNlbGVjdG9yOiBzZWxlY3RvcnNbIGkgXSwgZWxlbTogY3VyLCBsZXZlbDogbGV2ZWwgfSk7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQljdXIgPSBjdXIucGFyZW50Tm9kZTsKLQkJCQlsZXZlbCsrOwotCQkJfQotCi0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJLy8gU3RyaW5nCi0JCXZhciBwb3MgPSBQT1MudGVzdCggc2VsZWN0b3JzICkgfHwgdHlwZW9mIHNlbGVjdG9ycyAhPT0gInN0cmluZyIgPwotCQkJCWpRdWVyeSggc2VsZWN0b3JzLCBjb250ZXh0IHx8IHRoaXMuY29udGV4dCApIDoKLQkJCQkwOwotCi0JCWZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7Ci0JCQljdXIgPSB0aGlzW2ldOwotCi0JCQl3aGlsZSAoIGN1ciApIHsKLQkJCQlpZiAoIHBvcyA/IHBvcy5pbmRleChjdXIpID4gLTEgOiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoY3VyLCBzZWxlY3RvcnMpICkgewotCQkJCQlyZXQucHVzaCggY3VyICk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJfSBlbHNlIHsKLQkJCQkJY3VyID0gY3VyLnBhcmVudE5vZGU7Ci0JCQkJCWlmICggIWN1ciB8fCAhY3VyLm93bmVyRG9jdW1lbnQgfHwgY3VyID09PSBjb250ZXh0IHx8IGN1ci5ub2RlVHlwZSA9PT0gMTEgKSB7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldCA9IHJldC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQ7Ci0KLQkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsICJjbG9zZXN0Iiwgc2VsZWN0b3JzICk7Ci0JfSwKLQotCS8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4KLQkvLyB0aGUgbWF0Y2hlZCBzZXQgb2YgZWxlbWVudHMKLQlpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0KLQkJLy8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnQKLQkJaWYgKCAhZWxlbSApIHsKLQkJCXJldHVybiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgPyB0aGlzLnByZXZBbGwoKS5sZW5ndGggOiAtMTsKLQkJfQotCi0JCS8vIGluZGV4IGluIHNlbGVjdG9yCi0JCWlmICggdHlwZW9mIGVsZW0gPT09ICJzdHJpbmciICkgewotCQkJcmV0dXJuIGpRdWVyeS5pbkFycmF5KCB0aGlzWzBdLCBqUXVlcnkoIGVsZW0gKSApOwotCQl9Ci0KLQkJLy8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50Ci0JCXJldHVybiBqUXVlcnkuaW5BcnJheSgKLQkJCS8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZAotCQkJZWxlbS5qcXVlcnkgPyBlbGVtWzBdIDogZWxlbSwgdGhpcyApOwotCX0sCi0KLQlhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKLQkJdmFyIHNldCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgPwotCQkJCWpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSA6Ci0JCQkJalF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IgJiYgc2VsZWN0b3Iubm9kZVR5cGUgPyBbIHNlbGVjdG9yIF0gOiBzZWxlY3RvciApLAotCQkJYWxsID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBzZXQgKTsKLQotCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGlzRGlzY29ubmVjdGVkKCBzZXRbMF0gKSB8fCBpc0Rpc2Nvbm5lY3RlZCggYWxsWzBdICkgPwotCQkJYWxsIDoKLQkJCWpRdWVyeS51bmlxdWUoIGFsbCApICk7Ci0JfSwKLQotCWFuZFNlbGY6IGZ1bmN0aW9uKCkgewotCQlyZXR1cm4gdGhpcy5hZGQoIHRoaXMucHJldk9iamVjdCApOwotCX0KLX0pOwotCi0vLyBBIHBhaW5mdWxseSBzaW1wbGUgY2hlY2sgdG8gc2VlIGlmIGFuIGVsZW1lbnQgaXMgZGlzY29ubmVjdGVkCi0vLyBmcm9tIGEgZG9jdW1lbnQgKHNob3VsZCBiZSBpbXByb3ZlZCwgd2hlcmUgZmVhc2libGUpLgotZnVuY3Rpb24gaXNEaXNjb25uZWN0ZWQoIG5vZGUgKSB7Ci0JcmV0dXJuICFub2RlIHx8ICFub2RlLnBhcmVudE5vZGUgfHwgbm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSAxMTsKLX0KLQotalF1ZXJ5LmVhY2goewotCXBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCXZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7Ci0JCXJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7Ci0JfSwKLQlwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKLQkJcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwYXJlbnROb2RlIiApOwotCX0sCi0JcGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7Ci0JCXJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicGFyZW50Tm9kZSIsIHVudGlsICk7Ci0JfSwKLQluZXh0OiBmdW5jdGlvbiggZWxlbSApIHsKLQkJcmV0dXJuIGpRdWVyeS5udGgoIGVsZW0sIDIsICJuZXh0U2libGluZyIgKTsKLQl9LAotCXByZXY6IGZ1bmN0aW9uKCBlbGVtICkgewotCQlyZXR1cm4galF1ZXJ5Lm50aCggZWxlbSwgMiwgInByZXZpb3VzU2libGluZyIgKTsKLQl9LAotCW5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkgewotCQlyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgIm5leHRTaWJsaW5nIiApOwotCX0sCi0JcHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCXJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiApOwotCX0sCi0JbmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7Ci0JCXJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciLCB1bnRpbCApOwotCX0sCi0JcHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7Ci0JCXJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiwgdW50aWwgKTsKLQl9LAotCXNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHsKLQkJcmV0dXJuIGpRdWVyeS5zaWJsaW5nKCBlbGVtLnBhcmVudE5vZGUuZmlyc3RDaGlsZCwgZWxlbSApOwotCX0sCi0JY2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkgewotCQlyZXR1cm4galF1ZXJ5LnNpYmxpbmcoIGVsZW0uZmlyc3RDaGlsZCApOwotCX0sCi0JY29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkgewotCQlyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaWZyYW1lIiApID8KLQkJCWVsZW0uY29udGVudERvY3VtZW50IHx8IGVsZW0uY29udGVudFdpbmRvdy5kb2N1bWVudCA6Ci0JCQlqUXVlcnkubWFrZUFycmF5KCBlbGVtLmNoaWxkTm9kZXMgKTsKLQl9Ci19LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7Ci0JalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkgewotCQl2YXIgcmV0ID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7Ci0KLQkJaWYgKCAhcnVudGlsLnRlc3QoIG5hbWUgKSApIHsKLQkJCXNlbGVjdG9yID0gdW50aWw7Ci0JCX0KLQotCQlpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7Ci0JCQlyZXQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgcmV0ICk7Ci0JCX0KLQotCQlyZXQgPSB0aGlzLmxlbmd0aCA+IDEgJiYgIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0OwotCi0JCWlmICggKHRoaXMubGVuZ3RoID4gMSB8fCBybXVsdGlzZWxlY3Rvci50ZXN0KCBzZWxlY3RvciApKSAmJiBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkgewotCQkJcmV0ID0gcmV0LnJldmVyc2UoKTsKLQkJfQotCi0JCXJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCBuYW1lLCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKS5qb2luKCIsIikgKTsKLQl9OwotfSk7Ci0KLWpRdWVyeS5leHRlbmQoewotCWZpbHRlcjogZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7Ci0JCWlmICggbm90ICkgewotCQkJZXhwciA9ICI6bm90KCIgKyBleHByICsgIikiOwotCQl9Ci0KLQkJcmV0dXJuIGVsZW1zLmxlbmd0aCA9PT0gMSA/Ci0JCQlqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoZWxlbXNbMF0sIGV4cHIpID8gWyBlbGVtc1swXSBdIDogW10gOgotCQkJalF1ZXJ5LmZpbmQubWF0Y2hlcyhleHByLCBlbGVtcyk7Ci0JfSwKLQotCWRpcjogZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7Ci0JCXZhciBtYXRjaGVkID0gW10sCi0JCQljdXIgPSBlbGVtWyBkaXIgXTsKLQotCQl3aGlsZSAoIGN1ciAmJiBjdXIubm9kZVR5cGUgIT09IDkgJiYgKHVudGlsID09PSB1bmRlZmluZWQgfHwgY3VyLm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkoIGN1ciApLmlzKCB1bnRpbCApKSApIHsKLQkJCWlmICggY3VyLm5vZGVUeXBlID09PSAxICkgewotCQkJCW1hdGNoZWQucHVzaCggY3VyICk7Ci0JCQl9Ci0JCQljdXIgPSBjdXJbZGlyXTsKLQkJfQotCQlyZXR1cm4gbWF0Y2hlZDsKLQl9LAotCi0JbnRoOiBmdW5jdGlvbiggY3VyLCByZXN1bHQsIGRpciwgZWxlbSApIHsKLQkJcmVzdWx0ID0gcmVzdWx0IHx8IDE7Ci0JCXZhciBudW0gPSAwOwotCi0JCWZvciAoIDsgY3VyOyBjdXIgPSBjdXJbZGlyXSApIHsKLQkJCWlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICsrbnVtID09PSByZXN1bHQgKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gY3VyOwotCX0sCi0KLQlzaWJsaW5nOiBmdW5jdGlvbiggbiwgZWxlbSApIHsKLQkJdmFyIHIgPSBbXTsKLQotCQlmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkgewotCQkJaWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7Ci0JCQkJci5wdXNoKCBuICk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcjsKLQl9Ci19KTsKLQotLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3QKLWZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwga2VlcCApIHsKLQotCS8vIENhbid0IHBhc3MgbnVsbCBvciB1bmRlZmluZWQgdG8gaW5kZXhPZiBpbiBGaXJlZm94IDQKLQkvLyBTZXQgdG8gMCB0byBza2lwIHN0cmluZyBjaGVjawotCXF1YWxpZmllciA9IHF1YWxpZmllciB8fCAwOwotCi0JaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7Ci0JCXJldHVybiBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7Ci0JCQl2YXIgcmV0VmFsID0gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApOwotCQkJcmV0dXJuIHJldFZhbCA9PT0ga2VlcDsKLQkJfSk7Ci0KLQl9IGVsc2UgaWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7Ci0JCXJldHVybiBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7Ci0JCQlyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSA9PT0ga2VlcDsKLQkJfSk7Ci0KLQl9IGVsc2UgaWYgKCB0eXBlb2YgcXVhbGlmaWVyID09PSAic3RyaW5nIiApIHsKLQkJdmFyIGZpbHRlcmVkID0galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgewotCQkJcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7Ci0JCX0pOwotCi0JCWlmICggaXNTaW1wbGUudGVzdCggcXVhbGlmaWVyICkgKSB7Ci0JCQlyZXR1cm4galF1ZXJ5LmZpbHRlcihxdWFsaWZpZXIsIGZpbHRlcmVkLCAha2VlcCk7Ci0JCX0gZWxzZSB7Ci0JCQlxdWFsaWZpZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGZpbHRlcmVkICk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewotCQlyZXR1cm4gKCBqUXVlcnkuaW5BcnJheSggZWxlbSwgcXVhbGlmaWVyICkgPj0gMCApID09PSBrZWVwOwotCX0pOwotfQotCi0KLQotCi1mdW5jdGlvbiBjcmVhdGVTYWZlRnJhZ21lbnQoIGRvY3VtZW50ICkgewotCXZhciBsaXN0ID0gbm9kZU5hbWVzLnNwbGl0KCAifCIgKSwKLQlzYWZlRnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotCWlmICggc2FmZUZyYWcuY3JlYXRlRWxlbWVudCApIHsKLQkJd2hpbGUgKCBsaXN0Lmxlbmd0aCApIHsKLQkJCXNhZmVGcmFnLmNyZWF0ZUVsZW1lbnQoCi0JCQkJbGlzdC5wb3AoKQotCQkJKTsKLQkJfQotCX0KLQlyZXR1cm4gc2FmZUZyYWc7Ci19Ci0KLXZhciBub2RlTmFtZXMgPSAiYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGNhbnZhc3xkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnwiICsKLQkJImhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIiwKLQlyaW5saW5lalF1ZXJ5ID0gLyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZywKLQlybGVhZGluZ1doaXRlc3BhY2UgPSAvXlxzKy8sCi0JcnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9pZywKLQlydGFnTmFtZSA9IC88KFtcdzpdKykvLAotCXJ0Ym9keSA9IC88dGJvZHkvaSwKLQlyaHRtbCA9IC88fCYjP1x3KzsvLAotCXJub0lubmVyaHRtbCA9IC88KD86c2NyaXB0fHN0eWxlKS9pLAotCXJub2NhY2hlID0gLzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSwKLQlybm9zaGltY2FjaGUgPSBuZXcgUmVnRXhwKCI8KD86IiArIG5vZGVOYW1lcyArICIpIiwgImkiKSwKLQkvLyBjaGVja2VkPSJjaGVja2VkIiBvciBjaGVja2VkCi0JcmNoZWNrZWQgPSAvY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSwKLQlyc2NyaXB0VHlwZSA9IC9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksCi0JcmNsZWFuU2NyaXB0ID0gL15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8sCi0Jd3JhcE1hcCA9IHsKLQkJb3B0aW9uOiBbIDEsICI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwgIjwvc2VsZWN0PiIgXSwKLQkJbGVnZW5kOiBbIDEsICI8ZmllbGRzZXQ+IiwgIjwvZmllbGRzZXQ+IiBdLAotCQl0aGVhZDogWyAxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiIgXSwKLQkJdHI6IFsgMiwgIjx0YWJsZT48dGJvZHk+IiwgIjwvdGJvZHk+PC90YWJsZT4iIF0sCi0JCXRkOiBbIDMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90cj48L3Rib2R5PjwvdGFibGU+IiBdLAotCQljb2w6IFsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4iIF0sCi0JCWFyZWE6IFsgMSwgIjxtYXA+IiwgIjwvbWFwPiIgXSwKLQkJX2RlZmF1bHQ6IFsgMCwgIiIsICIiIF0KLQl9LAotCXNhZmVGcmFnbWVudCA9IGNyZWF0ZVNhZmVGcmFnbWVudCggZG9jdW1lbnQgKTsKLQotd3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uOwotd3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDsKLXdyYXBNYXAudGggPSB3cmFwTWFwLnRkOwotCi0vLyBJRSBjYW4ndCBzZXJpYWxpemUgPGxpbms+IGFuZCA8c2NyaXB0PiB0YWdzIG5vcm1hbGx5Ci1pZiAoICFqUXVlcnkuc3VwcG9ydC5odG1sU2VyaWFsaXplICkgewotCXdyYXBNYXAuX2RlZmF1bHQgPSBbIDEsICJkaXY8ZGl2PiIsICI8L2Rpdj4iIF07Ci19Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotCXRleHQ6IGZ1bmN0aW9uKCB0ZXh0ICkgewotCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKHRleHQpICkgewotCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7Ci0JCQkJdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKLQotCQkJCXNlbGYudGV4dCggdGV4dC5jYWxsKHRoaXMsIGksIHNlbGYudGV4dCgpKSApOwotCQkJfSk7Ci0JCX0KLQotCQlpZiAoIHR5cGVvZiB0ZXh0ICE9PSAib2JqZWN0IiAmJiB0ZXh0ICE9PSB1bmRlZmluZWQgKSB7Ci0JCQlyZXR1cm4gdGhpcy5lbXB0eSgpLmFwcGVuZCggKHRoaXNbMF0gJiYgdGhpc1swXS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZSggdGV4dCApICk7Ci0JCX0KLQotCQlyZXR1cm4galF1ZXJ5LnRleHQoIHRoaXMgKTsKLQl9LAotCi0Jd3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7Ci0JCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKLQkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewotCQkJCWpRdWVyeSh0aGlzKS53cmFwQWxsKCBodG1sLmNhbGwodGhpcywgaSkgKTsKLQkJCX0pOwotCQl9Ci0KLQkJaWYgKCB0aGlzWzBdICkgewotCQkJLy8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmQKLQkJCXZhciB3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWzBdLm93bmVyRG9jdW1lbnQgKS5lcSgwKS5jbG9uZSh0cnVlKTsKLQotCQkJaWYgKCB0aGlzWzBdLnBhcmVudE5vZGUgKSB7Ci0JCQkJd3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbMF0gKTsKLQkJCX0KLQotCQkJd3JhcC5tYXAoZnVuY3Rpb24oKSB7Ci0JCQkJdmFyIGVsZW0gPSB0aGlzOwotCi0JCQkJd2hpbGUgKCBlbGVtLmZpcnN0Q2hpbGQgJiYgZWxlbS5maXJzdENoaWxkLm5vZGVUeXBlID09PSAxICkgewotCQkJCQllbGVtID0gZWxlbS5maXJzdENoaWxkOwotCQkJCX0KLQotCQkJCXJldHVybiBlbGVtOwotCQkJfSkuYXBwZW5kKCB0aGlzICk7Ci0JCX0KLQotCQlyZXR1cm4gdGhpczsKLQl9LAotCi0Jd3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHsKLQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkgewotCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7Ci0JCQkJalF1ZXJ5KHRoaXMpLndyYXBJbm5lciggaHRtbC5jYWxsKHRoaXMsIGkpICk7Ci0JCQl9KTsKLQkJfQotCi0JCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0JCQl2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLAotCQkJCWNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpOwotCi0JCQlpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHsKLQkJCQljb250ZW50cy53cmFwQWxsKCBodG1sICk7Ci0KLQkJCX0gZWxzZSB7Ci0JCQkJc2VsZi5hcHBlbmQoIGh0bWwgKTsKLQkJCX0KLQkJfSk7Ci0JfSwKLQotCXdyYXA6IGZ1bmN0aW9uKCBodG1sICkgewotCQl2YXIgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICk7Ci0KLQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7Ci0JCQlqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBpc0Z1bmN0aW9uID8gaHRtbC5jYWxsKHRoaXMsIGkpIDogaHRtbCApOwotCQl9KTsKLQl9LAotCi0JdW53cmFwOiBmdW5jdGlvbigpIHsKLQkJcmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpIHsKLQkJCWlmICggIWpRdWVyeS5ub2RlTmFtZSggdGhpcywgImJvZHkiICkgKSB7Ci0JCQkJalF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApOwotCQkJfQotCQl9KS5lbmQoKTsKLQl9LAotCi0JYXBwZW5kOiBmdW5jdGlvbigpIHsKLQkJcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCB0cnVlLCBmdW5jdGlvbiggZWxlbSApIHsKLQkJCWlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSApIHsKLQkJCQl0aGlzLmFwcGVuZENoaWxkKCBlbGVtICk7Ci0JCQl9Ci0JCX0pOwotCX0sCi0KLQlwcmVwZW5kOiBmdW5jdGlvbigpIHsKLQkJcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCB0cnVlLCBmdW5jdGlvbiggZWxlbSApIHsKLQkJCWlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSApIHsKLQkJCQl0aGlzLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5maXJzdENoaWxkICk7Ci0JCQl9Ci0JCX0pOwotCX0sCi0KLQliZWZvcmU6IGZ1bmN0aW9uKCkgewotCQlpZiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgewotCQkJcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCBmYWxzZSwgZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCQkJdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApOwotCQkJfSk7Ci0JCX0gZWxzZSBpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7Ci0JCQl2YXIgc2V0ID0galF1ZXJ5LmNsZWFuKCBhcmd1bWVudHMgKTsKLQkJCXNldC5wdXNoLmFwcGx5KCBzZXQsIHRoaXMudG9BcnJheSgpICk7Ci0JCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNldCwgImJlZm9yZSIsIGFyZ3VtZW50cyApOwotCQl9Ci0JfSwKLQotCWFmdGVyOiBmdW5jdGlvbigpIHsKLQkJaWYgKCB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSApIHsKLQkJCXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVtICkgewotCQkJCXRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTsKLQkJCX0pOwotCQl9IGVsc2UgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgewotCQkJdmFyIHNldCA9IHRoaXMucHVzaFN0YWNrKCB0aGlzLCAiYWZ0ZXIiLCBhcmd1bWVudHMgKTsKLQkJCXNldC5wdXNoLmFwcGx5KCBzZXQsIGpRdWVyeS5jbGVhbihhcmd1bWVudHMpICk7Ci0JCQlyZXR1cm4gc2V0OwotCQl9Ci0JfSwKLQotCS8vIGtlZXBEYXRhIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS0tZG8gbm90IGRvY3VtZW50Ci0JcmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IsIGtlZXBEYXRhICkgewotCQlmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gdGhpc1tpXSkgIT0gbnVsbDsgaSsrICkgewotCQkJaWYgKCAhc2VsZWN0b3IgfHwgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIFsgZWxlbSBdICkubGVuZ3RoICkgewotCQkJCWlmICggIWtlZXBEYXRhICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0JCQkJCWpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwotCQkJCQlqUXVlcnkuY2xlYW5EYXRhKCBbIGVsZW0gXSApOwotCQkJCX0KLQotCQkJCWlmICggZWxlbS5wYXJlbnROb2RlICkgewotCQkJCQllbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gdGhpczsKLQl9LAotCi0JZW1wdHk6IGZ1bmN0aW9uKCkgewotCQlmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gdGhpc1tpXSkgIT0gbnVsbDsgaSsrICkgewotCQkJLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzCi0JCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0JCQkJalF1ZXJ5LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpICk7Ci0JCQl9Ci0KLQkJCS8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzCi0JCQl3aGlsZSAoIGVsZW0uZmlyc3RDaGlsZCApIHsKLQkJCQllbGVtLnJlbW92ZUNoaWxkKCBlbGVtLmZpcnN0Q2hpbGQgKTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiB0aGlzOwotCX0sCi0KLQljbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkgewotCQlkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzOwotCQlkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7Ci0KLQkJcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbiAoKSB7Ci0JCQlyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApOwotCQl9KTsKLQl9LAotCi0JaHRtbDogZnVuY3Rpb24oIHZhbHVlICkgewotCQlpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7Ci0JCQlyZXR1cm4gdGhpc1swXSAmJiB0aGlzWzBdLm5vZGVUeXBlID09PSAxID8KLQkJCQl0aGlzWzBdLmlubmVySFRNTC5yZXBsYWNlKHJpbmxpbmVqUXVlcnksICIiKSA6Ci0JCQkJbnVsbDsKLQotCQkvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MCi0JCX0gZWxzZSBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmCi0JCQkoalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgfHwgIXJsZWFkaW5nV2hpdGVzcGFjZS50ZXN0KCB2YWx1ZSApKSAmJgotCQkJIXdyYXBNYXBbIChydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsiIiwgIiJdKVsxXS50b0xvd2VyQ2FzZSgpIF0gKSB7Ci0KLQkJCXZhbHVlID0gdmFsdWUucmVwbGFjZShyeGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKLQotCQkJdHJ5IHsKLQkJCQlmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLQkJCQkJLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzCi0JCQkJCWlmICggdGhpc1tpXS5ub2RlVHlwZSA9PT0gMSApIHsKLQkJCQkJCWpRdWVyeS5jbGVhbkRhdGEoIHRoaXNbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwotCQkJCQkJdGhpc1tpXS5pbm5lckhUTUwgPSB2YWx1ZTsKLQkJCQkJfQotCQkJCX0KLQotCQkJLy8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kCi0JCQl9IGNhdGNoKGUpIHsKLQkJCQl0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOwotCQkJfQotCi0JCX0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewotCQkJdGhpcy5lYWNoKGZ1bmN0aW9uKGkpewotCQkJCXZhciBzZWxmID0galF1ZXJ5KCB0aGlzICk7Ci0KLQkJCQlzZWxmLmh0bWwoIHZhbHVlLmNhbGwodGhpcywgaSwgc2VsZi5odG1sKCkpICk7Ci0JCQl9KTsKLQotCQl9IGVsc2UgewotCQkJdGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTsKLQkJfQotCi0JCXJldHVybiB0aGlzOwotCX0sCi0KLQlyZXBsYWNlV2l0aDogZnVuY3Rpb24oIHZhbHVlICkgewotCQlpZiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgewotCQkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGVsZW1lbnRzIGFyZSByZW1vdmVkIGZyb20gdGhlIERPTSBiZWZvcmUgdGhleSBhcmUgaW5zZXJ0ZWQKLQkJCS8vIHRoaXMgY2FuIGhlbHAgZml4IHJlcGxhY2luZyBhIHBhcmVudCB3aXRoIGNoaWxkIGVsZW1lbnRzCi0JCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewotCQkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewotCQkJCQl2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKSwgb2xkID0gc2VsZi5odG1sKCk7Ci0JCQkJCXNlbGYucmVwbGFjZVdpdGgoIHZhbHVlLmNhbGwoIHRoaXMsIGksIG9sZCApICk7Ci0JCQkJfSk7Ci0JCQl9Ci0KLQkJCWlmICggdHlwZW9mIHZhbHVlICE9PSAic3RyaW5nIiApIHsKLQkJCQl2YWx1ZSA9IGpRdWVyeSggdmFsdWUgKS5kZXRhY2goKTsKLQkJCX0KLQotCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLQkJCQl2YXIgbmV4dCA9IHRoaXMubmV4dFNpYmxpbmcsCi0JCQkJCXBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKLQotCQkJCWpRdWVyeSggdGhpcyApLnJlbW92ZSgpOwotCi0JCQkJaWYgKCBuZXh0ICkgewotCQkJCQlqUXVlcnkobmV4dCkuYmVmb3JlKCB2YWx1ZSApOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWpRdWVyeShwYXJlbnQpLmFwcGVuZCggdmFsdWUgKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiB0aGlzLmxlbmd0aCA/Ci0JCQkJdGhpcy5wdXNoU3RhY2soIGpRdWVyeShqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWUpLCAicmVwbGFjZVdpdGgiLCB2YWx1ZSApIDoKLQkJCQl0aGlzOwotCQl9Ci0JfSwKLQotCWRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotCQlyZXR1cm4gdGhpcy5yZW1vdmUoIHNlbGVjdG9yLCB0cnVlICk7Ci0JfSwKLQotCWRvbU1hbmlwOiBmdW5jdGlvbiggYXJncywgdGFibGUsIGNhbGxiYWNrICkgewotCQl2YXIgcmVzdWx0cywgZmlyc3QsIGZyYWdtZW50LCBwYXJlbnQsCi0JCQl2YWx1ZSA9IGFyZ3NbMF0sCi0JCQlzY3JpcHRzID0gW107Ci0KLQkJLy8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0Ci0JCWlmICggIWpRdWVyeS5zdXBwb3J0LmNoZWNrQ2xvbmUgJiYgYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSB7Ci0JCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotCQkJCWpRdWVyeSh0aGlzKS5kb21NYW5pcCggYXJncywgdGFibGUsIGNhbGxiYWNrLCB0cnVlICk7Ci0JCQl9KTsKLQkJfQotCi0JCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpICkgewotCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7Ci0JCQkJdmFyIHNlbGYgPSBqUXVlcnkodGhpcyk7Ci0JCQkJYXJnc1swXSA9IHZhbHVlLmNhbGwodGhpcywgaSwgdGFibGUgPyBzZWxmLmh0bWwoKSA6IHVuZGVmaW5lZCk7Ci0JCQkJc2VsZi5kb21NYW5pcCggYXJncywgdGFibGUsIGNhbGxiYWNrICk7Ci0JCQl9KTsKLQkJfQotCi0JCWlmICggdGhpc1swXSApIHsKLQkJCXBhcmVudCA9IHZhbHVlICYmIHZhbHVlLnBhcmVudE5vZGU7Ci0KLQkJCS8vIElmIHdlJ3JlIGluIGEgZnJhZ21lbnQsIGp1c3QgdXNlIHRoYXQgaW5zdGVhZCBvZiBidWlsZGluZyBhIG5ldyBvbmUKLQkJCWlmICggalF1ZXJ5LnN1cHBvcnQucGFyZW50Tm9kZSAmJiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSAxMSAmJiBwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IHRoaXMubGVuZ3RoICkgewotCQkJCXJlc3VsdHMgPSB7IGZyYWdtZW50OiBwYXJlbnQgfTsKLQotCQkJfSBlbHNlIHsKLQkJCQlyZXN1bHRzID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIGFyZ3MsIHRoaXMsIHNjcmlwdHMgKTsKLQkJCX0KLQotCQkJZnJhZ21lbnQgPSByZXN1bHRzLmZyYWdtZW50OwotCi0JCQlpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkgewotCQkJCWZpcnN0ID0gZnJhZ21lbnQgPSBmcmFnbWVudC5maXJzdENoaWxkOwotCQkJfSBlbHNlIHsKLQkJCQlmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7Ci0JCQl9Ci0KLQkJCWlmICggZmlyc3QgKSB7Ci0JCQkJdGFibGUgPSB0YWJsZSAmJiBqUXVlcnkubm9kZU5hbWUoIGZpcnN0LCAidHIiICk7Ci0KLQkJCQlmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aCwgbGFzdEluZGV4ID0gbCAtIDE7IGkgPCBsOyBpKysgKSB7Ci0JCQkJCWNhbGxiYWNrLmNhbGwoCi0JCQkJCQl0YWJsZSA/Ci0JCQkJCQkJcm9vdCh0aGlzW2ldLCBmaXJzdCkgOgotCQkJCQkJCXRoaXNbaV0sCi0JCQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgbGVhayBtZW1vcnkgYnkgaW5hZHZlcnRlbnRseSBkaXNjYXJkaW5nCi0JCQkJCQkvLyB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgKHdoaWNoIG1pZ2h0IGhhdmUgYXR0YWNoZWQgZGF0YSkgaW5zdGVhZCBvZgotCQkJCQkJLy8gdXNpbmcgaXQ7IGluIGFkZGl0aW9uLCB1c2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IG9iamVjdCBmb3IgdGhlIGxhc3QKLQkJCQkJCS8vIGl0ZW0gaW5zdGVhZCBvZiBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXAgYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseQotCQkJCQkJLy8gaW4gY2VydGFpbiBzaXR1YXRpb25zIChCdWcgIzgwNzApLgotCQkJCQkJLy8gRnJhZ21lbnRzIGZyb20gdGhlIGZyYWdtZW50IGNhY2hlIG11c3QgYWx3YXlzIGJlIGNsb25lZCBhbmQgbmV2ZXIgdXNlZAotCQkJCQkJLy8gaW4gcGxhY2UuCi0JCQkJCQlyZXN1bHRzLmNhY2hlYWJsZSB8fCAoIGwgPiAxICYmIGkgPCBsYXN0SW5kZXggKSA/Ci0JCQkJCQkJalF1ZXJ5LmNsb25lKCBmcmFnbWVudCwgdHJ1ZSwgdHJ1ZSApIDoKLQkJCQkJCQlmcmFnbWVudAotCQkJCQkpOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKCBzY3JpcHRzLmxlbmd0aCApIHsKLQkJCQlqUXVlcnkuZWFjaCggc2NyaXB0cywgZXZhbFNjcmlwdCApOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHRoaXM7Ci0JfQotfSk7Ci0KLWZ1bmN0aW9uIHJvb3QoIGVsZW0sIGN1ciApIHsKLQlyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKGVsZW0sICJ0YWJsZSIpID8KLQkJKGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF0gfHwKLQkJZWxlbS5hcHBlbmRDaGlsZChlbGVtLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSkpIDoKLQkJZWxlbTsKLX0KLQotZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHsKLQotCWlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSB8fCAhalF1ZXJ5Lmhhc0RhdGEoIHNyYyApICkgewotCQlyZXR1cm47Ci0JfQotCi0JdmFyIHR5cGUsIGksIGwsCi0JCW9sZERhdGEgPSBqUXVlcnkuX2RhdGEoIHNyYyApLAotCQljdXJEYXRhID0galF1ZXJ5Ll9kYXRhKCBkZXN0LCBvbGREYXRhICksCi0JCWV2ZW50cyA9IG9sZERhdGEuZXZlbnRzOwotCi0JaWYgKCBldmVudHMgKSB7Ci0JCWRlbGV0ZSBjdXJEYXRhLmhhbmRsZTsKLQkJY3VyRGF0YS5ldmVudHMgPSB7fTsKLQotCQlmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKLQkJCWZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotCQkJCWpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUgKyAoIGV2ZW50c1sgdHlwZSBdWyBpIF0ubmFtZXNwYWNlID8gIi4iIDogIiIgKSArIGV2ZW50c1sgdHlwZSBdWyBpIF0ubmFtZXNwYWNlLCBldmVudHNbIHR5cGUgXVsgaSBdLCBldmVudHNbIHR5cGUgXVsgaSBdLmRhdGEgKTsKLQkJCX0KLQkJfQotCX0KLQotCS8vIG1ha2UgdGhlIGNsb25lZCBwdWJsaWMgZGF0YSBvYmplY3QgYSBjb3B5IGZyb20gdGhlIG9yaWdpbmFsCi0JaWYgKCBjdXJEYXRhLmRhdGEgKSB7Ci0JCWN1ckRhdGEuZGF0YSA9IGpRdWVyeS5leHRlbmQoIHt9LCBjdXJEYXRhLmRhdGEgKTsKLQl9Ci19Ci0KLWZ1bmN0aW9uIGNsb25lRml4QXR0cmlidXRlcyggc3JjLCBkZXN0ICkgewotCXZhciBub2RlTmFtZTsKLQotCS8vIFdlIGRvIG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciBub24tRWxlbWVudHMKLQlpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQkvLyBjbGVhckF0dHJpYnV0ZXMgcmVtb3ZlcyB0aGUgYXR0cmlidXRlcywgd2hpY2ggd2UgZG9uJ3Qgd2FudCwKLQkvLyBidXQgYWxzbyByZW1vdmVzIHRoZSBhdHRhY2hFdmVudCBldmVudHMsIHdoaWNoIHdlICpkbyogd2FudAotCWlmICggZGVzdC5jbGVhckF0dHJpYnV0ZXMgKSB7Ci0JCWRlc3QuY2xlYXJBdHRyaWJ1dGVzKCk7Ci0JfQotCi0JLy8gbWVyZ2VBdHRyaWJ1dGVzLCBpbiBjb250cmFzdCwgb25seSBtZXJnZXMgYmFjayBvbiB0aGUKLQkvLyBvcmlnaW5hbCBhdHRyaWJ1dGVzLCBub3QgdGhlIGV2ZW50cwotCWlmICggZGVzdC5tZXJnZUF0dHJpYnV0ZXMgKSB7Ci0JCWRlc3QubWVyZ2VBdHRyaWJ1dGVzKCBzcmMgKTsKLQl9Ci0KLQlub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLQotCS8vIElFNi04IGZhaWwgdG8gY2xvbmUgY2hpbGRyZW4gaW5zaWRlIG9iamVjdCBlbGVtZW50cyB0aGF0IHVzZQotCS8vIHRoZSBwcm9wcmlldGFyeSBjbGFzc2lkIGF0dHJpYnV0ZSB2YWx1ZSAocmF0aGVyIHRoYW4gdGhlIHR5cGUKLQkvLyBhdHRyaWJ1dGUpIHRvIGlkZW50aWZ5IHRoZSB0eXBlIG9mIGNvbnRlbnQgdG8gZGlzcGxheQotCWlmICggbm9kZU5hbWUgPT09ICJvYmplY3QiICkgewotCQlkZXN0Lm91dGVySFRNTCA9IHNyYy5vdXRlckhUTUw7Ci0KLQl9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiAmJiAoc3JjLnR5cGUgPT09ICJjaGVja2JveCIgfHwgc3JjLnR5cGUgPT09ICJyYWRpbyIpICkgewotCQkvLyBJRTYtOCBmYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94Ci0JCS8vIG9yIHJhZGlvIGJ1dHRvbi4gV29yc2UsIElFNi03IGZhaWwgdG8gZ2l2ZSB0aGUgY2xvbmVkIGVsZW1lbnQKLQkJLy8gYSBjaGVja2VkIGFwcGVhcmFuY2UgaWYgdGhlIGRlZmF1bHRDaGVja2VkIHZhbHVlIGlzbid0IGFsc28gc2V0Ci0JCWlmICggc3JjLmNoZWNrZWQgKSB7Ci0JCQlkZXN0LmRlZmF1bHRDaGVja2VkID0gZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7Ci0JCX0KLQotCQkvLyBJRTYtNyBnZXQgY29uZnVzZWQgYW5kIGVuZCB1cCBzZXR0aW5nIHRoZSB2YWx1ZSBvZiBhIGNsb25lZAotCQkvLyBjaGVja2JveC9yYWRpbyBidXR0b24gdG8gYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQgb2YgIm9uIgotCQlpZiAoIGRlc3QudmFsdWUgIT09IHNyYy52YWx1ZSApIHsKLQkJCWRlc3QudmFsdWUgPSBzcmMudmFsdWU7Ci0JCX0KLQotCS8vIElFNi04IGZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkCi0JLy8gc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnMKLQl9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gIm9wdGlvbiIgKSB7Ci0JCWRlc3Quc2VsZWN0ZWQgPSBzcmMuZGVmYXVsdFNlbGVjdGVkOwotCi0JLy8gSUU2LTggZmFpbHMgdG8gc2V0IHRoZSBkZWZhdWx0VmFsdWUgdG8gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbgotCS8vIGNsb25pbmcgb3RoZXIgdHlwZXMgb2YgaW5wdXQgZmllbGRzCi0JfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgfHwgbm9kZU5hbWUgPT09ICJ0ZXh0YXJlYSIgKSB7Ci0JCWRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTsKLQl9Ci0KLQkvLyBFdmVudCBkYXRhIGdldHMgcmVmZXJlbmNlZCBpbnN0ZWFkIG9mIGNvcGllZCBpZiB0aGUgZXhwYW5kbwotCS8vIGdldHMgY29waWVkIHRvbwotCWRlc3QucmVtb3ZlQXR0cmlidXRlKCBqUXVlcnkuZXhwYW5kbyApOwotfQotCi1qUXVlcnkuYnVpbGRGcmFnbWVudCA9IGZ1bmN0aW9uKCBhcmdzLCBub2Rlcywgc2NyaXB0cyApIHsKLQl2YXIgZnJhZ21lbnQsIGNhY2hlYWJsZSwgY2FjaGVyZXN1bHRzLCBkb2MsCi0JZmlyc3QgPSBhcmdzWyAwIF07Ci0KLQkvLyBub2RlcyBtYXkgY29udGFpbiBlaXRoZXIgYW4gZXhwbGljaXQgZG9jdW1lbnQgb2JqZWN0LAotCS8vIGEgalF1ZXJ5IGNvbGxlY3Rpb24gb3IgY29udGV4dCBvYmplY3QuCi0JLy8gSWYgbm9kZXNbMF0gY29udGFpbnMgYSB2YWxpZCBvYmplY3QgdG8gYXNzaWduIHRvIGRvYwotCWlmICggbm9kZXMgJiYgbm9kZXNbMF0gKSB7Ci0JCWRvYyA9IG5vZGVzWzBdLm93bmVyRG9jdW1lbnQgfHwgbm9kZXNbMF07Ci0JfQotCi0JLy8gRW5zdXJlIHRoYXQgYW4gYXR0ciBvYmplY3QgZG9lc24ndCBpbmNvcnJlY3RseSBzdGFuZCBpbiBhcyBhIGRvY3VtZW50IG9iamVjdAotCS8vIENocm9tZSBhbmQgRmlyZWZveCBzZWVtIHRvIGFsbG93IHRoaXMgdG8gb2NjdXIgYW5kIHdpbGwgdGhyb3cgZXhjZXB0aW9uCi0JLy8gRml4ZXMgIzg5NTAKLQlpZiAoICFkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCApIHsKLQkJZG9jID0gZG9jdW1lbnQ7Ci0JfQotCi0JLy8gT25seSBjYWNoZSAic21hbGwiICgxLzIgS0IpIEhUTUwgc3RyaW5ncyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1haW4gZG9jdW1lbnQKLQkvLyBDbG9uaW5nIG9wdGlvbnMgbG9zZXMgdGhlIHNlbGVjdGVkIHN0YXRlLCBzbyBkb24ndCBjYWNoZSB0aGVtCi0JLy8gSUUgNiBkb2Vzbid0IGxpa2UgaXQgd2hlbiB5b3UgcHV0IDxvYmplY3Q+IG9yIDxlbWJlZD4gZWxlbWVudHMgaW4gYSBmcmFnbWVudAotCS8vIEFsc28sIFdlYktpdCBkb2VzIG5vdCBjbG9uZSAnY2hlY2tlZCcgYXR0cmlidXRlcyBvbiBjbG9uZU5vZGUsIHNvIGRvbid0IGNhY2hlCi0JLy8gTGFzdGx5LCBJRTYsNyw4IHdpbGwgbm90IGNvcnJlY3RseSByZXVzZSBjYWNoZWQgZnJhZ21lbnRzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gdW5rbm93biBlbGVtcyAjMTA1MDEKLQlpZiAoIGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBmaXJzdCA9PT0gInN0cmluZyIgJiYgZmlyc3QubGVuZ3RoIDwgNTEyICYmIGRvYyA9PT0gZG9jdW1lbnQgJiYKLQkJZmlyc3QuY2hhckF0KDApID09PSAiPCIgJiYgIXJub2NhY2hlLnRlc3QoIGZpcnN0ICkgJiYKLQkJKGpRdWVyeS5zdXBwb3J0LmNoZWNrQ2xvbmUgfHwgIXJjaGVja2VkLnRlc3QoIGZpcnN0ICkpICYmCi0JCShqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lIHx8ICFybm9zaGltY2FjaGUudGVzdCggZmlyc3QgKSkgKSB7Ci0KLQkJY2FjaGVhYmxlID0gdHJ1ZTsKLQotCQljYWNoZXJlc3VsdHMgPSBqUXVlcnkuZnJhZ21lbnRzWyBmaXJzdCBdOwotCQlpZiAoIGNhY2hlcmVzdWx0cyAmJiBjYWNoZXJlc3VsdHMgIT09IDEgKSB7Ci0JCQlmcmFnbWVudCA9IGNhY2hlcmVzdWx0czsKLQkJfQotCX0KLQotCWlmICggIWZyYWdtZW50ICkgewotCQlmcmFnbWVudCA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0JCWpRdWVyeS5jbGVhbiggYXJncywgZG9jLCBmcmFnbWVudCwgc2NyaXB0cyApOwotCX0KLQotCWlmICggY2FjaGVhYmxlICkgewotCQlqUXVlcnkuZnJhZ21lbnRzWyBmaXJzdCBdID0gY2FjaGVyZXN1bHRzID8gZnJhZ21lbnQgOiAxOwotCX0KLQotCXJldHVybiB7IGZyYWdtZW50OiBmcmFnbWVudCwgY2FjaGVhYmxlOiBjYWNoZWFibGUgfTsKLX07Ci0KLWpRdWVyeS5mcmFnbWVudHMgPSB7fTsKLQotalF1ZXJ5LmVhY2goewotCWFwcGVuZFRvOiAiYXBwZW5kIiwKLQlwcmVwZW5kVG86ICJwcmVwZW5kIiwKLQlpbnNlcnRCZWZvcmU6ICJiZWZvcmUiLAotCWluc2VydEFmdGVyOiAiYWZ0ZXIiLAotCXJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0aCIKLX0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHsKLQlqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLQkJdmFyIHJldCA9IFtdLAotCQkJaW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLAotCQkJcGFyZW50ID0gdGhpcy5sZW5ndGggPT09IDEgJiYgdGhpc1swXS5wYXJlbnROb2RlOwotCi0JCWlmICggcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gMTEgJiYgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICYmIGluc2VydC5sZW5ndGggPT09IDEgKSB7Ci0JCQlpbnNlcnRbIG9yaWdpbmFsIF0oIHRoaXNbMF0gKTsKLQkJCXJldHVybiB0aGlzOwotCi0JCX0gZWxzZSB7Ci0JCQlmb3IgKCB2YXIgaSA9IDAsIGwgPSBpbnNlcnQubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotCQkJCXZhciBlbGVtcyA9ICggaSA+IDAgPyB0aGlzLmNsb25lKHRydWUpIDogdGhpcyApLmdldCgpOwotCQkJCWpRdWVyeSggaW5zZXJ0W2ldIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7Ci0JCQkJcmV0ID0gcmV0LmNvbmNhdCggZWxlbXMgKTsKLQkJCX0KLQotCQkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsIG5hbWUsIGluc2VydC5zZWxlY3RvciApOwotCQl9Ci0JfTsKLX0pOwotCi1mdW5jdGlvbiBnZXRBbGwoIGVsZW0gKSB7Ci0JaWYgKCB0eXBlb2YgZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7Ci0JCXJldHVybiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIgKTsKLQotCX0gZWxzZSBpZiAoIHR5cGVvZiBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwgIT09ICJ1bmRlZmluZWQiICkgewotCQlyZXR1cm4gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKCAiKiIgKTsKLQotCX0gZWxzZSB7Ci0JCXJldHVybiBbXTsKLQl9Ci19Ci0KLS8vIFVzZWQgaW4gY2xlYW4sIGZpeGVzIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wZXJ0eQotZnVuY3Rpb24gZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKSB7Ci0JaWYgKCBlbGVtLnR5cGUgPT09ICJjaGVja2JveCIgfHwgZWxlbS50eXBlID09PSAicmFkaW8iICkgewotCQllbGVtLmRlZmF1bHRDaGVja2VkID0gZWxlbS5jaGVja2VkOwotCX0KLX0KLS8vIEZpbmRzIGFsbCBpbnB1dHMgYW5kIHBhc3NlcyB0aGVtIHRvIGZpeERlZmF1bHRDaGVja2VkCi1mdW5jdGlvbiBmaW5kSW5wdXRzKCBlbGVtICkgewotCXZhciBub2RlTmFtZSA9ICggZWxlbS5ub2RlTmFtZSB8fCAiIiApLnRvTG93ZXJDYXNlKCk7Ci0JaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiApIHsKLQkJZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKTsKLQkvLyBTa2lwIHNjcmlwdHMsIGdldCBvdGhlciBjaGlsZHJlbgotCX0gZWxzZSBpZiAoIG5vZGVOYW1lICE9PSAic2NyaXB0IiAmJiB0eXBlb2YgZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7Ci0JCWpRdWVyeS5ncmVwKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLCBmaXhEZWZhdWx0Q2hlY2tlZCApOwotCX0KLX0KLQotLy8gRGVyaXZlZCBGcm9tOiBodHRwOi8vd3d3LmllY3NzLmNvbS9zaGltcHJvdmUvamF2YXNjcmlwdC9zaGltcHJvdmUuMS0wLTEuanMKLWZ1bmN0aW9uIHNoaW1DbG9uZU5vZGUoIGVsZW0gKSB7Ci0JdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICk7Ci0Jc2FmZUZyYWdtZW50LmFwcGVuZENoaWxkKCBkaXYgKTsKLQotCWRpdi5pbm5lckhUTUwgPSBlbGVtLm91dGVySFRNTDsKLQlyZXR1cm4gZGl2LmZpcnN0Q2hpbGQ7Ci19Ci0KLWpRdWVyeS5leHRlbmQoewotCWNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7Ci0JCXZhciBzcmNFbGVtZW50cywKLQkJCWRlc3RFbGVtZW50cywKLQkJCWksCi0JCQkvLyBJRTw9OCBkb2VzIG5vdCBwcm9wZXJseSBjbG9uZSBkZXRhY2hlZCwgdW5rbm93biBlbGVtZW50IG5vZGVzCi0JCQljbG9uZSA9IGpRdWVyeS5zdXBwb3J0Lmh0bWw1Q2xvbmUgfHwgIXJub3NoaW1jYWNoZS50ZXN0KCAiPCIgKyBlbGVtLm5vZGVOYW1lICkgPwotCQkJCWVsZW0uY2xvbmVOb2RlKCB0cnVlICkgOgotCQkJCXNoaW1DbG9uZU5vZGUoIGVsZW0gKTsKLQotCQlpZiAoICghalF1ZXJ5LnN1cHBvcnQubm9DbG9uZUV2ZW50IHx8ICFqUXVlcnkuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkgJiYKLQkJCQkoZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSkgJiYgIWpRdWVyeS5pc1hNTERvYyhlbGVtKSApIHsKLQkJCS8vIElFIGNvcGllcyBldmVudHMgYm91bmQgdmlhIGF0dGFjaEV2ZW50IHdoZW4gdXNpbmcgY2xvbmVOb2RlLgotCQkJLy8gQ2FsbGluZyBkZXRhY2hFdmVudCBvbiB0aGUgY2xvbmUgd2lsbCBhbHNvIHJlbW92ZSB0aGUgZXZlbnRzCi0JCQkvLyBmcm9tIHRoZSBvcmlnaW5hbC4gSW4gb3JkZXIgdG8gZ2V0IGFyb3VuZCB0aGlzLCB3ZSB1c2Ugc29tZQotCQkJLy8gcHJvcHJpZXRhcnkgbWV0aG9kcyB0byBjbGVhciB0aGUgZXZlbnRzLiBUaGFua3MgdG8gTW9vVG9vbHMKLQkJCS8vIGd1eXMgZm9yIHRoaXMgaG90bmVzcy4KLQotCQkJY2xvbmVGaXhBdHRyaWJ1dGVzKCBlbGVtLCBjbG9uZSApOwotCi0JCQkvLyBVc2luZyBTaXp6bGUgaGVyZSBpcyBjcmF6eSBzbG93LCBzbyB3ZSB1c2UgZ2V0RWxlbWVudHNCeVRhZ05hbWUgaW5zdGVhZAotCQkJc3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTsKLQkJCWRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKLQotCQkJLy8gV2VpcmQgaXRlcmF0aW9uIGJlY2F1c2UgSUUgd2lsbCByZXBsYWNlIHRoZSBsZW5ndGggcHJvcGVydHkKLQkJCS8vIHdpdGggYW4gZWxlbWVudCBpZiB5b3UgYXJlIGNsb25pbmcgdGhlIGJvZHkgYW5kIG9uZSBvZiB0aGUKLQkJCS8vIGVsZW1lbnRzIG9uIHRoZSBwYWdlIGhhcyBhIG5hbWUgb3IgaWQgb2YgImxlbmd0aCIKLQkJCWZvciAoIGkgPSAwOyBzcmNFbGVtZW50c1tpXTsgKytpICkgewotCQkJCS8vIEVuc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBub2RlIGlzIG5vdCBudWxsOyBGaXhlcyAjOTU4NwotCQkJCWlmICggZGVzdEVsZW1lbnRzW2ldICkgewotCQkJCQljbG9uZUZpeEF0dHJpYnV0ZXMoIHNyY0VsZW1lbnRzW2ldLCBkZXN0RWxlbWVudHNbaV0gKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lCi0JCWlmICggZGF0YUFuZEV2ZW50cyApIHsKLQkJCWNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApOwotCi0JCQlpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkgewotCQkJCXNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7Ci0JCQkJZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApOwotCi0JCQkJZm9yICggaSA9IDA7IHNyY0VsZW1lbnRzW2ldOyArK2kgKSB7Ci0JCQkJCWNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1tpXSwgZGVzdEVsZW1lbnRzW2ldICk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJc3JjRWxlbWVudHMgPSBkZXN0RWxlbWVudHMgPSBudWxsOwotCi0JCS8vIFJldHVybiB0aGUgY2xvbmVkIHNldAotCQlyZXR1cm4gY2xvbmU7Ci0JfSwKLQotCWNsZWFuOiBmdW5jdGlvbiggZWxlbXMsIGNvbnRleHQsIGZyYWdtZW50LCBzY3JpcHRzICkgewotCQl2YXIgY2hlY2tTY3JpcHRUeXBlOwotCi0JCWNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OwotCi0JCS8vICFjb250ZXh0LmNyZWF0ZUVsZW1lbnQgZmFpbHMgaW4gSUUgd2l0aCBhbiBlcnJvciBidXQgcmV0dXJucyB0eXBlb2YgJ29iamVjdCcKLQkJaWYgKCB0eXBlb2YgY29udGV4dC5jcmVhdGVFbGVtZW50ID09PSAidW5kZWZpbmVkIiApIHsKLQkJCWNvbnRleHQgPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dFswXSAmJiBjb250ZXh0WzBdLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7Ci0JCX0KLQotCQl2YXIgcmV0ID0gW10sIGo7Ci0KLQkJZm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7Ci0JCQlpZiAoIHR5cGVvZiBlbGVtID09PSAibnVtYmVyIiApIHsKLQkJCQllbGVtICs9ICIiOwotCQkJfQotCi0JCQlpZiAoICFlbGVtICkgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQkvLyBDb252ZXJ0IGh0bWwgc3RyaW5nIGludG8gRE9NIG5vZGVzCi0JCQlpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKLQkJCQlpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7Ci0JCQkJCWVsZW0gPSBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLy8gRml4ICJYSFRNTCItc3R5bGUgdGFncyBpbiBhbGwgYnJvd3NlcnMKLQkJCQkJZWxlbSA9IGVsZW0ucmVwbGFjZShyeGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKLQotCQkJCQkvLyBUcmltIHdoaXRlc3BhY2UsIG90aGVyd2lzZSBpbmRleE9mIHdvbid0IHdvcmsgYXMgZXhwZWN0ZWQKLQkJCQkJdmFyIHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsiIiwgIiJdIClbMV0udG9Mb3dlckNhc2UoKSwKLQkJCQkJCXdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0LAotCQkJCQkJZGVwdGggPSB3cmFwWzBdLAotCQkJCQkJZGl2ID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLQotCQkJCQkvLyBBcHBlbmQgd3JhcHBlciBlbGVtZW50IHRvIHVua25vd24gZWxlbWVudCBzYWZlIGRvYyBmcmFnbWVudAotCQkJCQlpZiAoIGNvbnRleHQgPT09IGRvY3VtZW50ICkgewotCQkJCQkJLy8gVXNlIHRoZSBmcmFnbWVudCB3ZSd2ZSBhbHJlYWR5IGNyZWF0ZWQgZm9yIHRoaXMgZG9jdW1lbnQKLQkJCQkJCXNhZmVGcmFnbWVudC5hcHBlbmRDaGlsZCggZGl2ICk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQkvLyBVc2UgYSBmcmFnbWVudCBjcmVhdGVkIHdpdGggdGhlIG93bmVyIGRvY3VtZW50Ci0JCQkJCQljcmVhdGVTYWZlRnJhZ21lbnQoIGNvbnRleHQgKS5hcHBlbmRDaGlsZCggZGl2ICk7Ci0JCQkJCX0KLQotCQkJCQkvLyBHbyB0byBodG1sIGFuZCBiYWNrLCB0aGVuIHBlZWwgb2ZmIGV4dHJhIHdyYXBwZXJzCi0JCQkJCWRpdi5pbm5lckhUTUwgPSB3cmFwWzFdICsgZWxlbSArIHdyYXBbMl07Ci0KLQkJCQkJLy8gTW92ZSB0byB0aGUgcmlnaHQgZGVwdGgKLQkJCQkJd2hpbGUgKCBkZXB0aC0tICkgewotCQkJCQkJZGl2ID0gZGl2Lmxhc3RDaGlsZDsKLQkJCQkJfQotCi0JCQkJCS8vIFJlbW92ZSBJRSdzIGF1dG9pbnNlcnRlZCA8dGJvZHk+IGZyb20gdGFibGUgZnJhZ21lbnRzCi0JCQkJCWlmICggIWpRdWVyeS5zdXBwb3J0LnRib2R5ICkgewotCi0JCQkJCQkvLyBTdHJpbmcgd2FzIGEgPHRhYmxlPiwgKm1heSogaGF2ZSBzcHVyaW91cyA8dGJvZHk+Ci0JCQkJCQl2YXIgaGFzQm9keSA9IHJ0Ym9keS50ZXN0KGVsZW0pLAotCQkJCQkJCXRib2R5ID0gdGFnID09PSAidGFibGUiICYmICFoYXNCb2R5ID8KLQkJCQkJCQkJZGl2LmZpcnN0Q2hpbGQgJiYgZGl2LmZpcnN0Q2hpbGQuY2hpbGROb2RlcyA6Ci0KLQkJCQkJCQkJLy8gU3RyaW5nIHdhcyBhIGJhcmUgPHRoZWFkPiBvciA8dGZvb3Q+Ci0JCQkJCQkJCXdyYXBbMV0gPT09ICI8dGFibGU+IiAmJiAhaGFzQm9keSA/Ci0JCQkJCQkJCQlkaXYuY2hpbGROb2RlcyA6Ci0JCQkJCQkJCQlbXTsKLQotCQkJCQkJZm9yICggaiA9IHRib2R5Lmxlbmd0aCAtIDE7IGogPj0gMCA7IC0taiApIHsKLQkJCQkJCQlpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGJvZHlbIGogXSwgInRib2R5IiApICYmICF0Ym9keVsgaiBdLmNoaWxkTm9kZXMubGVuZ3RoICkgewotCQkJCQkJCQl0Ym9keVsgaiBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRib2R5WyBqIF0gKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQotCQkJCQkvLyBJRSBjb21wbGV0ZWx5IGtpbGxzIGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVuIGlubmVySFRNTCBpcyB1c2VkCi0JCQkJCWlmICggIWpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlICYmIHJsZWFkaW5nV2hpdGVzcGFjZS50ZXN0KCBlbGVtICkgKSB7Ci0JCQkJCQlkaXYuaW5zZXJ0QmVmb3JlKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBybGVhZGluZ1doaXRlc3BhY2UuZXhlYyhlbGVtKVswXSApLCBkaXYuZmlyc3RDaGlsZCApOwotCQkJCQl9Ci0KLQkJCQkJZWxlbSA9IGRpdi5jaGlsZE5vZGVzOwotCQkJCX0KLQkJCX0KLQotCQkJLy8gUmVzZXRzIGRlZmF1bHRDaGVja2VkIGZvciBhbnkgcmFkaW9zIGFuZCBjaGVja2JveGVzCi0JCQkvLyBhYm91dCB0byBiZSBhcHBlbmRlZCB0byB0aGUgRE9NIGluIElFIDYvNyAoIzgwNjApCi0JCQl2YXIgbGVuOwotCQkJaWYgKCAhalF1ZXJ5LnN1cHBvcnQuYXBwZW5kQ2hlY2tlZCApIHsKLQkJCQlpZiAoIGVsZW1bMF0gJiYgdHlwZW9mIChsZW4gPSBlbGVtLmxlbmd0aCkgPT09ICJudW1iZXIiICkgewotCQkJCQlmb3IgKCBqID0gMDsgaiA8IGxlbjsgaisrICkgewotCQkJCQkJZmluZElucHV0cyggZWxlbVtqXSApOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmluZElucHV0cyggZWxlbSApOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKCBlbGVtLm5vZGVUeXBlICkgewotCQkJCXJldC5wdXNoKCBlbGVtICk7Ci0JCQl9IGVsc2UgewotCQkJCXJldCA9IGpRdWVyeS5tZXJnZSggcmV0LCBlbGVtICk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoIGZyYWdtZW50ICkgewotCQkJY2hlY2tTY3JpcHRUeXBlID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCQkJcmV0dXJuICFlbGVtLnR5cGUgfHwgcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlICk7Ci0JCQl9OwotCQkJZm9yICggaSA9IDA7IHJldFtpXTsgaSsrICkgewotCQkJCWlmICggc2NyaXB0cyAmJiBqUXVlcnkubm9kZU5hbWUoIHJldFtpXSwgInNjcmlwdCIgKSAmJiAoIXJldFtpXS50eXBlIHx8IHJldFtpXS50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICJ0ZXh0L2phdmFzY3JpcHQiKSApIHsKLQkJCQkJc2NyaXB0cy5wdXNoKCByZXRbaV0ucGFyZW50Tm9kZSA/IHJldFtpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCByZXRbaV0gKSA6IHJldFtpXSApOwotCi0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKCByZXRbaV0ubm9kZVR5cGUgPT09IDEgKSB7Ci0JCQkJCQl2YXIganNUYWdzID0galF1ZXJ5LmdyZXAoIHJldFtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSggInNjcmlwdCIgKSwgY2hlY2tTY3JpcHRUeXBlICk7Ci0KLQkJCQkJCXJldC5zcGxpY2UuYXBwbHkoIHJldCwgW2kgKyAxLCAwXS5jb25jYXQoIGpzVGFncyApICk7Ci0JCQkJCX0KLQkJCQkJZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIHJldFtpXSApOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfSwKLQotCWNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkgewotCQl2YXIgZGF0YSwgaWQsCi0JCQljYWNoZSA9IGpRdWVyeS5jYWNoZSwKLQkJCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCwKLQkJCWRlbGV0ZUV4cGFuZG8gPSBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvOwotCi0JCWZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgewotCQkJaWYgKCBlbGVtLm5vZGVOYW1lICYmIGpRdWVyeS5ub0RhdGFbZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSApIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaWQgPSBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOwotCi0JCQlpZiAoIGlkICkgewotCQkJCWRhdGEgPSBjYWNoZVsgaWQgXTsKLQotCQkJCWlmICggZGF0YSAmJiBkYXRhLmV2ZW50cyApIHsKLQkJCQkJZm9yICggdmFyIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7Ci0JCQkJCQlpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHsKLQkJCQkJCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7Ci0KLQkJCQkJCS8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWQKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOwotCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkJLy8gTnVsbCB0aGUgRE9NIHJlZmVyZW5jZSB0byBhdm9pZCBJRTYvNy84IGxlYWsgKCM3MDU0KQotCQkJCQlpZiAoIGRhdGEuaGFuZGxlICkgewotCQkJCQkJZGF0YS5oYW5kbGUuZWxlbSA9IG51bGw7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlpZiAoIGRlbGV0ZUV4cGFuZG8gKSB7Ci0JCQkJCWRlbGV0ZSBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOwotCi0JCQkJfSBlbHNlIGlmICggZWxlbS5yZW1vdmVBdHRyaWJ1dGUgKSB7Ci0JCQkJCWVsZW0ucmVtb3ZlQXR0cmlidXRlKCBqUXVlcnkuZXhwYW5kbyApOwotCQkJCX0KLQotCQkJCWRlbGV0ZSBjYWNoZVsgaWQgXTsKLQkJCX0KLQkJfQotCX0KLX0pOwotCi1mdW5jdGlvbiBldmFsU2NyaXB0KCBpLCBlbGVtICkgewotCWlmICggZWxlbS5zcmMgKSB7Ci0JCWpRdWVyeS5hamF4KHsKLQkJCXVybDogZWxlbS5zcmMsCi0JCQlhc3luYzogZmFsc2UsCi0JCQlkYXRhVHlwZTogInNjcmlwdCIKLQkJfSk7Ci0JfSBlbHNlIHsKLQkJalF1ZXJ5Lmdsb2JhbEV2YWwoICggZWxlbS50ZXh0IHx8IGVsZW0udGV4dENvbnRlbnQgfHwgZWxlbS5pbm5lckhUTUwgfHwgIiIgKS5yZXBsYWNlKCByY2xlYW5TY3JpcHQsICIvKiQwKi8iICkgKTsKLQl9Ci0KLQlpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKLQkJZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7Ci0JfQotfQotCi0KLQotCi12YXIgcmFscGhhID0gL2FscGhhXChbXildKlwpL2ksCi0Jcm9wYWNpdHkgPSAvb3BhY2l0eT0oW14pXSopLywKLQkvLyBmaXhlZCBmb3IgSUU5LCBzZWUgIzgzNDYKLQlydXBwZXIgPSAvKFtBLVpdfF5tcykvZywKLQlybnVtcHggPSAvXi0/XGQrKD86cHgpPyQvaSwKLQlybnVtID0gL14tP1xkLywKLQlycmVsTnVtID0gL14oW1wtK10pPShbXC0rLlxkZV0rKS8sCi0KLQljc3NTaG93ID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIsIGRpc3BsYXk6ICJibG9jayIgfSwKLQljc3NXaWR0aCA9IFsgIkxlZnQiLCAiUmlnaHQiIF0sCi0JY3NzSGVpZ2h0ID0gWyAiVG9wIiwgIkJvdHRvbSIgXSwKLQljdXJDU1MsCi0KLQlnZXRDb21wdXRlZFN0eWxlLAotCWN1cnJlbnRTdHlsZTsKLQotalF1ZXJ5LmZuLmNzcyA9IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKLQkvLyBTZXR0aW5nICd1bmRlZmluZWQnIGlzIGEgbm8tb3AKLQlpZiAoIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKLQkJcmV0dXJuIHRoaXM7Ci0JfQotCi0JcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIG5hbWUsIHZhbHVlLCB0cnVlLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7Ci0JCXJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8KLQkJCWpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6Ci0JCQlqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7Ci0JfSk7Ci19OwotCi1qUXVlcnkuZXh0ZW5kKHsKLQkvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKLQkvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHkKLQljc3NIb29rczogewotCQlvcGFjaXR5OiB7Ci0JCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKLQkJCQlpZiAoIGNvbXB1dGVkICkgewotCQkJCQkvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eQotCQkJCQl2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCAib3BhY2l0eSIsICJvcGFjaXR5IiApOwotCQkJCQlyZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJldDsKLQotCQkJCX0gZWxzZSB7Ci0JCQkJCXJldHVybiBlbGVtLnN0eWxlLm9wYWNpdHk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfSwKLQotCS8vIEV4Y2x1ZGUgdGhlIGZvbGxvd2luZyBjc3MgcHJvcGVydGllcyB0byBhZGQgcHgKLQljc3NOdW1iZXI6IHsKLQkJImZpbGxPcGFjaXR5IjogdHJ1ZSwKLQkJImZvbnRXZWlnaHQiOiB0cnVlLAotCQkibGluZUhlaWdodCI6IHRydWUsCi0JCSJvcGFjaXR5IjogdHJ1ZSwKLQkJIm9ycGhhbnMiOiB0cnVlLAotCQkid2lkb3dzIjogdHJ1ZSwKLQkJInpJbmRleCI6IHRydWUsCi0JCSJ6b29tIjogdHJ1ZQotCX0sCi0KLQkvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlCi0JLy8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZQotCWNzc1Byb3BzOiB7Ci0JCS8vIG5vcm1hbGl6ZSBmbG9hdCBjc3MgcHJvcGVydHkKLQkJImZsb2F0IjogalF1ZXJ5LnN1cHBvcnQuY3NzRmxvYXQgPyAiY3NzRmxvYXQiIDogInN0eWxlRmxvYXQiCi0JfSwKLQotCS8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlCi0Jc3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7Ci0JCS8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwotCQlpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCS8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQotCQl2YXIgcmV0LCB0eXBlLCBvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSwKLQkJCXN0eWxlID0gZWxlbS5zdHlsZSwgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07Ci0KLQkJbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fCBvcmlnTmFtZTsKLQotCQkvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWUKLQkJaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewotCQkJdHlwZSA9IHR5cGVvZiB2YWx1ZTsKLQotCQkJLy8gY29udmVydCByZWxhdGl2ZSBudW1iZXIgc3RyaW5ncyAoKz0gb3IgLT0pIHRvIHJlbGF0aXZlIG51bWJlcnMuICM3MzQ1Ci0JCQlpZiAoIHR5cGUgPT09ICJzdHJpbmciICYmIChyZXQgPSBycmVsTnVtLmV4ZWMoIHZhbHVlICkpICkgewotCQkJCXZhbHVlID0gKCArKCByZXRbMV0gKyAxKSAqICtyZXRbMl0gKSArIHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKSApOwotCQkJCS8vIEZpeGVzIGJ1ZyAjOTIzNwotCQkJCXR5cGUgPSAibnVtYmVyIjsKLQkJCX0KLQotCQkJLy8gTWFrZSBzdXJlIHRoYXQgTmFOIGFuZCBudWxsIHZhbHVlcyBhcmVuJ3Qgc2V0LiBTZWU6ICM3MTE2Ci0JCQlpZiAoIHZhbHVlID09IG51bGwgfHwgdHlwZSA9PT0gIm51bWJlciIgJiYgaXNOYU4oIHZhbHVlICkgKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCi0JCQkvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgJ3B4JyB0byB0aGUgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcykKLQkJCWlmICggdHlwZSA9PT0gIm51bWJlciIgJiYgIWpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gKSB7Ci0JCQkJdmFsdWUgKz0gInB4IjsKLQkJCX0KLQotCQkJLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlCi0JCQlpZiAoICFob29rcyB8fCAhKCJzZXQiIGluIGhvb2tzKSB8fCAodmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlICkpICE9PSB1bmRlZmluZWQgKSB7Ci0JCQkJLy8gV3JhcHBlZCB0byBwcmV2ZW50IElFIGZyb20gdGhyb3dpbmcgZXJyb3JzIHdoZW4gJ2ludmFsaWQnIHZhbHVlcyBhcmUgcHJvdmlkZWQKLQkJCQkvLyBGaXhlcyBidWcgIzU1MDkKLQkJCQl0cnkgewotCQkJCQlzdHlsZVsgbmFtZSBdID0gdmFsdWU7Ci0JCQkJfSBjYXRjaChlKSB7fQotCQkJfQotCi0JCX0gZWxzZSB7Ci0JCQkvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKLQkJCWlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQotCQkJLy8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3QKLQkJCXJldHVybiBzdHlsZVsgbmFtZSBdOwotCQl9Ci0JfSwKLQotCWNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhICkgewotCQl2YXIgcmV0LCBob29rczsKLQotCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKLQkJbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKLQkJaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTsKLQkJbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IG5hbWU7Ci0KLQkJLy8gY3NzRmxvYXQgbmVlZHMgYSBzcGVjaWFsIHRyZWF0bWVudAotCQlpZiAoIG5hbWUgPT09ICJjc3NGbG9hdCIgKSB7Ci0JCQluYW1lID0gImZsb2F0IjsKLQkJfQotCi0JCS8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCi0JCWlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5lZCApIHsKLQkJCXJldHVybiByZXQ7Ci0KLQkJLy8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXQKLQkJfSBlbHNlIGlmICggY3VyQ1NTICkgewotCQkJcmV0dXJuIGN1ckNTUyggZWxlbSwgbmFtZSApOwotCQl9Ci0JfSwKLQotCS8vIEEgbWV0aG9kIGZvciBxdWlja2x5IHN3YXBwaW5nIGluL291dCBDU1MgcHJvcGVydGllcyB0byBnZXQgY29ycmVjdCBjYWxjdWxhdGlvbnMKLQlzd2FwOiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2sgKSB7Ci0JCXZhciBvbGQgPSB7fTsKLQotCQkvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXMKLQkJZm9yICggdmFyIG5hbWUgaW4gb3B0aW9ucyApIHsKLQkJCW9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOwotCQkJZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdOwotCQl9Ci0KLQkJY2FsbGJhY2suY2FsbCggZWxlbSApOwotCi0JCS8vIFJldmVydCB0aGUgb2xkIHZhbHVlcwotCQlmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7Ci0JCQllbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsKLQkJfQotCX0KLX0pOwotCi0vLyBERVBSRUNBVEVELCBVc2UgalF1ZXJ5LmNzcygpIGluc3RlYWQKLWpRdWVyeS5jdXJDU1MgPSBqUXVlcnkuY3NzOwotCi1qUXVlcnkuZWFjaChbImhlaWdodCIsICJ3aWR0aCJdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKLQlqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSA9IHsKLQkJZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkgewotCQkJdmFyIHZhbDsKLQotCQkJaWYgKCBjb21wdXRlZCApIHsKLQkJCQlpZiAoIGVsZW0ub2Zmc2V0V2lkdGggIT09IDAgKSB7Ci0JCQkJCXJldHVybiBnZXRXSCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKLQkJCQl9IGVsc2UgewotCQkJCQlqUXVlcnkuc3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7Ci0JCQkJCQl2YWwgPSBnZXRXSCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKLQkJCQkJfSk7Ci0JCQkJfQotCi0JCQkJcmV0dXJuIHZhbDsKLQkJCX0KLQkJfSwKLQotCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLQkJCWlmICggcm51bXB4LnRlc3QoIHZhbHVlICkgKSB7Ci0JCQkJLy8gaWdub3JlIG5lZ2F0aXZlIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzICMxNTk5Ci0JCQkJdmFsdWUgPSBwYXJzZUZsb2F0KCB2YWx1ZSApOwotCi0JCQkJaWYgKCB2YWx1ZSA+PSAwICkgewotCQkJCQlyZXR1cm4gdmFsdWUgKyAicHgiOwotCQkJCX0KLQotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gdmFsdWU7Ci0JCQl9Ci0JCX0KLQl9OwotfSk7Ci0KLWlmICggIWpRdWVyeS5zdXBwb3J0Lm9wYWNpdHkgKSB7Ci0JalF1ZXJ5LmNzc0hvb2tzLm9wYWNpdHkgPSB7Ci0JCWdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewotCQkJLy8gSUUgdXNlcyBmaWx0ZXJzIGZvciBvcGFjaXR5Ci0JCQlyZXR1cm4gcm9wYWNpdHkudGVzdCggKGNvbXB1dGVkICYmIGVsZW0uY3VycmVudFN0eWxlID8gZWxlbS5jdXJyZW50U3R5bGUuZmlsdGVyIDogZWxlbS5zdHlsZS5maWx0ZXIpIHx8ICIiICkgPwotCQkJCSggcGFyc2VGbG9hdCggUmVnRXhwLiQxICkgLyAxMDAgKSArICIiIDoKLQkJCQljb21wdXRlZCA/ICIxIiA6ICIiOwotCQl9LAotCi0JCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotCQkJdmFyIHN0eWxlID0gZWxlbS5zdHlsZSwKLQkJCQljdXJyZW50U3R5bGUgPSBlbGVtLmN1cnJlbnRTdHlsZSwKLQkJCQlvcGFjaXR5ID0galF1ZXJ5LmlzTnVtZXJpYyggdmFsdWUgKSA/ICJhbHBoYShvcGFjaXR5PSIgKyB2YWx1ZSAqIDEwMCArICIpIiA6ICIiLAotCQkJCWZpbHRlciA9IGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUuZmlsdGVyIHx8IHN0eWxlLmZpbHRlciB8fCAiIjsKLQotCQkJLy8gSUUgaGFzIHRyb3VibGUgd2l0aCBvcGFjaXR5IGlmIGl0IGRvZXMgbm90IGhhdmUgbGF5b3V0Ci0JCQkvLyBGb3JjZSBpdCBieSBzZXR0aW5nIHRoZSB6b29tIGxldmVsCi0JCQlzdHlsZS56b29tID0gMTsKLQotCQkJLy8gaWYgc2V0dGluZyBvcGFjaXR5IHRvIDEsIGFuZCBubyBvdGhlciBmaWx0ZXJzIGV4aXN0IC0gYXR0ZW1wdCB0byByZW1vdmUgZmlsdGVyIGF0dHJpYnV0ZSAjNjY1MgotCQkJaWYgKCB2YWx1ZSA+PSAxICYmIGpRdWVyeS50cmltKCBmaWx0ZXIucmVwbGFjZSggcmFscGhhLCAiIiApICkgPT09ICIiICkgewotCi0JCQkJLy8gU2V0dGluZyBzdHlsZS5maWx0ZXIgdG8gbnVsbCwgIiIgJiAiICIgc3RpbGwgbGVhdmUgImZpbHRlcjoiIGluIHRoZSBjc3NUZXh0Ci0JCQkJLy8gaWYgImZpbHRlcjoiIGlzIHByZXNlbnQgYXQgYWxsLCBjbGVhclR5cGUgaXMgZGlzYWJsZWQsIHdlIHdhbnQgdG8gYXZvaWQgdGhpcwotCQkJCS8vIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSBpcyBJRSBPbmx5LCBidXQgc28gYXBwYXJlbnRseSBpcyB0aGlzIGNvZGUgcGF0aC4uLgotCQkJCXN0eWxlLnJlbW92ZUF0dHJpYnV0ZSggImZpbHRlciIgKTsKLQotCQkJCS8vIGlmIHRoZXJlIHRoZXJlIGlzIG5vIGZpbHRlciBzdHlsZSBhcHBsaWVkIGluIGEgY3NzIHJ1bGUsIHdlIGFyZSBkb25lCi0JCQkJaWYgKCBjdXJyZW50U3R5bGUgJiYgIWN1cnJlbnRTdHlsZS5maWx0ZXIgKSB7Ci0JCQkJCXJldHVybjsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8vIG90aGVyd2lzZSwgc2V0IG5ldyBmaWx0ZXIgdmFsdWVzCi0JCQlzdHlsZS5maWx0ZXIgPSByYWxwaGEudGVzdCggZmlsdGVyICkgPwotCQkJCWZpbHRlci5yZXBsYWNlKCByYWxwaGEsIG9wYWNpdHkgKSA6Ci0JCQkJZmlsdGVyICsgIiAiICsgb3BhY2l0eTsKLQkJfQotCX07Ci19Ci0KLWpRdWVyeShmdW5jdGlvbigpIHsKLQkvLyBUaGlzIGhvb2sgY2Fubm90IGJlIGFkZGVkIHVudGlsIERPTSByZWFkeSBiZWNhdXNlIHRoZSBzdXBwb3J0IHRlc3QKLQkvLyBmb3IgaXQgaXMgbm90IHJ1biB1bnRpbCBhZnRlciBET00gcmVhZHkKLQlpZiAoICFqUXVlcnkuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ICkgewotCQlqUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSB7Ci0JCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKLQkJCQkvLyBXZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHQKLQkJCQkvLyBXb3JrIGFyb3VuZCBieSB0ZW1wb3JhcmlseSBzZXR0aW5nIGVsZW1lbnQgZGlzcGxheSB0byBpbmxpbmUtYmxvY2sKLQkJCQl2YXIgcmV0OwotCQkJCWpRdWVyeS5zd2FwKCBlbGVtLCB7ICJkaXNwbGF5IjogImlubGluZS1ibG9jayIgfSwgZnVuY3Rpb24oKSB7Ci0JCQkJCWlmICggY29tcHV0ZWQgKSB7Ci0JCQkJCQlyZXQgPSBjdXJDU1MoIGVsZW0sICJtYXJnaW4tcmlnaHQiLCAibWFyZ2luUmlnaHQiICk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlyZXQgPSBlbGVtLnN0eWxlLm1hcmdpblJpZ2h0OwotCQkJCQl9Ci0JCQkJfSk7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJfTsKLQl9Ci19KTsKLQotaWYgKCBkb2N1bWVudC5kZWZhdWx0VmlldyAmJiBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlICkgewotCWdldENvbXB1dGVkU3R5bGUgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKLQkJdmFyIHJldCwgZGVmYXVsdFZpZXcsIGNvbXB1dGVkU3R5bGU7Ci0KLQkJbmFtZSA9IG5hbWUucmVwbGFjZSggcnVwcGVyLCAiLSQxIiApLnRvTG93ZXJDYXNlKCk7Ci0KLQkJaWYgKCAoZGVmYXVsdFZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpICYmCi0JCQkJKGNvbXB1dGVkU3R5bGUgPSBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtLCBudWxsICkpICkgewotCQkJcmV0ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICk7Ci0JCQlpZiAoIHJldCA9PT0gIiIgJiYgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgZWxlbSApICkgewotCQkJCXJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJldDsKLQl9OwotfQotCi1pZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUgKSB7Ci0JY3VycmVudFN0eWxlID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0JCXZhciBsZWZ0LCByc0xlZnQsIHVuY29tcHV0ZWQsCi0JCQlyZXQgPSBlbGVtLmN1cnJlbnRTdHlsZSAmJiBlbGVtLmN1cnJlbnRTdHlsZVsgbmFtZSBdLAotCQkJc3R5bGUgPSBlbGVtLnN0eWxlOwotCi0JCS8vIEF2b2lkIHNldHRpbmcgcmV0IHRvIGVtcHR5IHN0cmluZyBoZXJlCi0JCS8vIHNvIHdlIGRvbid0IGRlZmF1bHQgdG8gYXV0bwotCQlpZiAoIHJldCA9PT0gbnVsbCAmJiBzdHlsZSAmJiAodW5jb21wdXRlZCA9IHN0eWxlWyBuYW1lIF0pICkgewotCQkJcmV0ID0gdW5jb21wdXRlZDsKLQkJfQotCi0JCS8vIEZyb20gdGhlIGF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHMKLQkJLy8gaHR0cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50LTEwMjI5MQotCi0JCS8vIElmIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSByZWd1bGFyIHBpeGVsIG51bWJlcgotCQkvLyBidXQgYSBudW1iZXIgdGhhdCBoYXMgYSB3ZWlyZCBlbmRpbmcsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMKLQkJaWYgKCAhcm51bXB4LnRlc3QoIHJldCApICYmIHJudW0udGVzdCggcmV0ICkgKSB7Ci0KLQkJCS8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKLQkJCWxlZnQgPSBzdHlsZS5sZWZ0OwotCQkJcnNMZWZ0ID0gZWxlbS5ydW50aW1lU3R5bGUgJiYgZWxlbS5ydW50aW1lU3R5bGUubGVmdDsKLQotCQkJLy8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAotCQkJaWYgKCByc0xlZnQgKSB7Ci0JCQkJZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IGVsZW0uY3VycmVudFN0eWxlLmxlZnQ7Ci0JCQl9Ci0JCQlzdHlsZS5sZWZ0ID0gbmFtZSA9PT0gImZvbnRTaXplIiA/ICIxZW0iIDogKCByZXQgfHwgMCApOwotCQkJcmV0ID0gc3R5bGUucGl4ZWxMZWZ0ICsgInB4IjsKLQotCQkJLy8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlcwotCQkJc3R5bGUubGVmdCA9IGxlZnQ7Ci0JCQlpZiAoIHJzTGVmdCApIHsKLQkJCQllbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0ID0gcnNMZWZ0OwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJldCA9PT0gIiIgPyAiYXV0byIgOiByZXQ7Ci0JfTsKLX0KLQotY3VyQ1NTID0gZ2V0Q29tcHV0ZWRTdHlsZSB8fCBjdXJyZW50U3R5bGU7Ci0KLWZ1bmN0aW9uIGdldFdIKCBlbGVtLCBuYW1lLCBleHRyYSApIHsKLQotCS8vIFN0YXJ0IHdpdGggb2Zmc2V0IHByb3BlcnR5Ci0JdmFyIHZhbCA9IG5hbWUgPT09ICJ3aWR0aCIgPyBlbGVtLm9mZnNldFdpZHRoIDogZWxlbS5vZmZzZXRIZWlnaHQsCi0JCXdoaWNoID0gbmFtZSA9PT0gIndpZHRoIiA/IGNzc1dpZHRoIDogY3NzSGVpZ2h0LAotCQlpID0gMCwKLQkJbGVuID0gd2hpY2gubGVuZ3RoOwotCi0JaWYgKCB2YWwgPiAwICkgewotCQlpZiAoIGV4dHJhICE9PSAiYm9yZGVyIiApIHsKLQkJCWZvciAoIDsgaSA8IGxlbjsgaSsrICkgewotCQkJCWlmICggIWV4dHJhICkgewotCQkJCQl2YWwgLT0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgInBhZGRpbmciICsgd2hpY2hbIGkgXSApICkgfHwgMDsKLQkJCQl9Ci0JCQkJaWYgKCBleHRyYSA9PT0gIm1hcmdpbiIgKSB7Ci0JCQkJCXZhbCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIHdoaWNoWyBpIF0gKSApIHx8IDA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdmFsIC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sICJib3JkZXIiICsgd2hpY2hbIGkgXSArICJXaWR0aCIgKSApIHx8IDA7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHZhbCArICJweCI7Ci0JfQotCi0JLy8gRmFsbCBiYWNrIHRvIGNvbXB1dGVkIHRoZW4gdW5jb21wdXRlZCBjc3MgaWYgbmVjZXNzYXJ5Ci0JdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBuYW1lICk7Ci0JaWYgKCB2YWwgPCAwIHx8IHZhbCA9PSBudWxsICkgewotCQl2YWwgPSBlbGVtLnN0eWxlWyBuYW1lIF0gfHwgMDsKLQl9Ci0JLy8gTm9ybWFsaXplICIiLCBhdXRvLCBhbmQgcHJlcGFyZSBmb3IgZXh0cmEKLQl2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOwotCi0JLy8gQWRkIHBhZGRpbmcsIGJvcmRlciwgbWFyZ2luCi0JaWYgKCBleHRyYSApIHsKLQkJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7Ci0JCQl2YWwgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgInBhZGRpbmciICsgd2hpY2hbIGkgXSApICkgfHwgMDsKLQkJCWlmICggZXh0cmEgIT09ICJwYWRkaW5nIiApIHsKLQkJCQl2YWwgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgImJvcmRlciIgKyB3aGljaFsgaSBdICsgIldpZHRoIiApICkgfHwgMDsKLQkJCX0KLQkJCWlmICggZXh0cmEgPT09ICJtYXJnaW4iICkgewotCQkJCXZhbCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIHdoaWNoWyBpIF0gKSApIHx8IDA7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdmFsICsgInB4IjsKLX0KLQotaWYgKCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgewotCWpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCXZhciB3aWR0aCA9IGVsZW0ub2Zmc2V0V2lkdGgsCi0JCQloZWlnaHQgPSBlbGVtLm9mZnNldEhlaWdodDsKLQotCQlyZXR1cm4gKCB3aWR0aCA9PT0gMCAmJiBoZWlnaHQgPT09IDAgKSB8fCAoIWpRdWVyeS5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyAmJiAoKGVsZW0uc3R5bGUgJiYgZWxlbS5zdHlsZS5kaXNwbGF5KSB8fCBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSkgPT09ICJub25lIik7Ci0JfTsKLQotCWpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkgewotCQlyZXR1cm4gIWpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuKCBlbGVtICk7Ci0JfTsKLX0KLQotCi0KLQotdmFyIHIyMCA9IC8lMjAvZywKLQlyYnJhY2tldCA9IC9cW1xdJC8sCi0JckNSTEYgPSAvXHI/XG4vZywKLQlyaGFzaCA9IC8jLiokLywKLQlyaGVhZGVycyA9IC9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsIC8vIElFIGxlYXZlcyBhbiBcciBjaGFyYWN0ZXIgYXQgRU9MCi0JcmlucHV0ID0gL14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLAotCS8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvbgotCXJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwXC1zdG9yYWdlfC4rXC1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLywKLQlybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLywKLQlycHJvdG9jb2wgPSAvXlwvXC8vLAotCXJxdWVyeSA9IC9cPy8sCi0JcnNjcmlwdCA9IC88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLAotCXJzZWxlY3RUZXh0YXJlYSA9IC9eKD86c2VsZWN0fHRleHRhcmVhKS9pLAotCXJzcGFjZXNBamF4ID0gL1xzKy8sCi0JcnRzID0gLyhbPyZdKV89W14mXSovLAotCXJ1cmwgPSAvXihbXHdcK1wuXC1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspKT8pPy8sCi0KLQkvLyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGxvYWQgbWV0aG9kCi0JX2xvYWQgPSBqUXVlcnkuZm4ubG9hZCwKLQotCS8qIFByZWZpbHRlcnMKLQkgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKQotCSAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6Ci0JICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydAotCSAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSkKLQkgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlCi0JICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKLQkgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvICIqIiBpZiBuZWVkZWQKLQkgKi8KLQlwcmVmaWx0ZXJzID0ge30sCi0KLQkvKiBUcmFuc3BvcnRzIGJpbmRpbmdzCi0JICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZQotCSAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCi0JICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gIioiIGlmIG5lZWRlZAotCSAqLwotCXRyYW5zcG9ydHMgPSB7fSwKLQotCS8vIERvY3VtZW50IGxvY2F0aW9uCi0JYWpheExvY2F0aW9uLAotCi0JLy8gRG9jdW1lbnQgbG9jYXRpb24gc2VnbWVudHMKLQlhamF4TG9jUGFydHMsCi0KLQkvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb24KLQlhbGxUeXBlcyA9IFsiKi8iXSArIFsiKiJdOwotCi0vLyAjODEzOCwgSUUgbWF5IHRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIGFjY2Vzc2luZwotLy8gYSBmaWVsZCBmcm9tIHdpbmRvdy5sb2NhdGlvbiBpZiBkb2N1bWVudC5kb21haW4gaGFzIGJlZW4gc2V0Ci10cnkgewotCWFqYXhMb2NhdGlvbiA9IGxvY2F0aW9uLmhyZWY7Ci19IGNhdGNoKCBlICkgewotCS8vIFVzZSB0aGUgaHJlZiBhdHRyaWJ1dGUgb2YgYW4gQSBlbGVtZW50Ci0JLy8gc2luY2UgSUUgd2lsbCBtb2RpZnkgaXQgZ2l2ZW4gZG9jdW1lbnQubG9jYXRpb24KLQlhamF4TG9jYXRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiYSIgKTsKLQlhamF4TG9jYXRpb24uaHJlZiA9ICIiOwotCWFqYXhMb2NhdGlvbiA9IGFqYXhMb2NhdGlvbi5ocmVmOwotfQotCi0vLyBTZWdtZW50IGxvY2F0aW9uIGludG8gcGFydHMKLWFqYXhMb2NQYXJ0cyA9IHJ1cmwuZXhlYyggYWpheExvY2F0aW9uLnRvTG93ZXJDYXNlKCkgKSB8fCBbXTsKLQotLy8gQmFzZSAiY29uc3RydWN0b3IiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnQKLWZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkgewotCi0JLy8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byAiKiIKLQlyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHsKLQotCQlpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09ICJzdHJpbmciICkgewotCQkJZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjsKLQkJCWRhdGFUeXBlRXhwcmVzc2lvbiA9ICIqIjsKLQkJfQotCi0JCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGZ1bmMgKSApIHsKLQkJCXZhciBkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5zcGxpdCggcnNwYWNlc0FqYXggKSwKLQkJCQlpID0gMCwKLQkJCQlsZW5ndGggPSBkYXRhVHlwZXMubGVuZ3RoLAotCQkJCWRhdGFUeXBlLAotCQkJCWxpc3QsCi0JCQkJcGxhY2VCZWZvcmU7Ci0KLQkJCS8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb24KLQkJCWZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotCQkJCWRhdGFUeXBlID0gZGF0YVR5cGVzWyBpIF07Ci0JCQkJLy8gV2UgY29udHJvbCBpZiB3ZSdyZSBhc2tlZCB0byBhZGQgYmVmb3JlCi0JCQkJLy8gYW55IGV4aXN0aW5nIGVsZW1lbnQKLQkJCQlwbGFjZUJlZm9yZSA9IC9eXCsvLnRlc3QoIGRhdGFUeXBlICk7Ci0JCQkJaWYgKCBwbGFjZUJlZm9yZSApIHsKLQkJCQkJZGF0YVR5cGUgPSBkYXRhVHlwZS5zdWJzdHIoIDEgKSB8fCAiKiI7Ci0JCQkJfQotCQkJCWxpc3QgPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW107Ci0JCQkJLy8gdGhlbiB3ZSBhZGQgdG8gdGhlIHN0cnVjdHVyZSBhY2NvcmRpbmdseQotCQkJCWxpc3RbIHBsYWNlQmVmb3JlID8gInVuc2hpZnQiIDogInB1c2giIF0oIGZ1bmMgKTsKLQkJCX0KLQkJfQotCX07Ci19Ci0KLS8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0cwotZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiwKLQkJZGF0YVR5cGUgLyogaW50ZXJuYWwgKi8sIGluc3BlY3RlZCAvKiBpbnRlcm5hbCAqLyApIHsKLQotCWRhdGFUeXBlID0gZGF0YVR5cGUgfHwgb3B0aW9ucy5kYXRhVHlwZXNbIDAgXTsKLQlpbnNwZWN0ZWQgPSBpbnNwZWN0ZWQgfHwge307Ci0KLQlpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlOwotCi0JdmFyIGxpc3QgPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0sCi0JCWkgPSAwLAotCQlsZW5ndGggPSBsaXN0ID8gbGlzdC5sZW5ndGggOiAwLAotCQlleGVjdXRlT25seSA9ICggc3RydWN0dXJlID09PSBwcmVmaWx0ZXJzICksCi0JCXNlbGVjdGlvbjsKLQotCWZvciAoIDsgaSA8IGxlbmd0aCAmJiAoIGV4ZWN1dGVPbmx5IHx8ICFzZWxlY3Rpb24gKTsgaSsrICkgewotCQlzZWxlY3Rpb24gPSBsaXN0WyBpIF0oIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTsKLQkJLy8gSWYgd2UgZ290IHJlZGlyZWN0ZWQgdG8gYW5vdGhlciBkYXRhVHlwZQotCQkvLyB3ZSB0cnkgdGhlcmUgaWYgZXhlY3V0aW5nIG9ubHkgYW5kIG5vdCBkb25lIGFscmVhZHkKLQkJaWYgKCB0eXBlb2Ygc2VsZWN0aW9uID09PSAic3RyaW5nIiApIHsKLQkJCWlmICggIWV4ZWN1dGVPbmx5IHx8IGluc3BlY3RlZFsgc2VsZWN0aW9uIF0gKSB7Ci0JCQkJc2VsZWN0aW9uID0gdW5kZWZpbmVkOwotCQkJfSBlbHNlIHsKLQkJCQlvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBzZWxlY3Rpb24gKTsKLQkJCQlzZWxlY3Rpb24gPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cygKLQkJCQkJCXN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiwgc2VsZWN0aW9uLCBpbnNwZWN0ZWQgKTsKLQkJCX0KLQkJfQotCX0KLQkvLyBJZiB3ZSdyZSBvbmx5IGV4ZWN1dGluZyBvciBub3RoaW5nIHdhcyBzZWxlY3RlZAotCS8vIHdlIHRyeSB0aGUgY2F0Y2hhbGwgZGF0YVR5cGUgaWYgbm90IGRvbmUgYWxyZWFkeQotCWlmICggKCBleGVjdXRlT25seSB8fCAhc2VsZWN0aW9uICkgJiYgIWluc3BlY3RlZFsgIioiIF0gKSB7Ci0JCXNlbGVjdGlvbiA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKAotCQkJCXN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiwgIioiLCBpbnNwZWN0ZWQgKTsKLQl9Ci0JLy8gdW5uZWNlc3Nhcnkgd2hlbiBvbmx5IGV4ZWN1dGluZyAocHJlZmlsdGVycykKLQkvLyBidXQgaXQnbGwgYmUgaWdub3JlZCBieSB0aGUgY2FsbGVyIGluIHRoYXQgY2FzZQotCXJldHVybiBzZWxlY3Rpb247Ci19Ci0KLS8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9ucwotLy8gdGhhdCB0YWtlcyAiZmxhdCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpCi0vLyBGaXhlcyAjOTg4NwotZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7Ci0JdmFyIGtleSwgZGVlcCwKLQkJZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9OwotCWZvciAoIGtleSBpbiBzcmMgKSB7Ci0JCWlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkgewotCQkJKCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTsKLQkJfQotCX0KLQlpZiAoIGRlZXAgKSB7Ci0JCWpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApOwotCX0KLX0KLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0JbG9hZDogZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHsKLQkJaWYgKCB0eXBlb2YgdXJsICE9PSAic3RyaW5nIiAmJiBfbG9hZCApIHsKLQkJCXJldHVybiBfbG9hZC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0KLQkJLy8gRG9uJ3QgZG8gYSByZXF1ZXN0IGlmIG5vIGVsZW1lbnRzIGFyZSBiZWluZyByZXF1ZXN0ZWQKLQkJfSBlbHNlIGlmICggIXRoaXMubGVuZ3RoICkgewotCQkJcmV0dXJuIHRoaXM7Ci0JCX0KLQotCQl2YXIgb2ZmID0gdXJsLmluZGV4T2YoICIgIiApOwotCQlpZiAoIG9mZiA+PSAwICkgewotCQkJdmFyIHNlbGVjdG9yID0gdXJsLnNsaWNlKCBvZmYsIHVybC5sZW5ndGggKTsKLQkJCXVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7Ci0JCX0KLQotCQkvLyBEZWZhdWx0IHRvIGEgR0VUIHJlcXVlc3QKLQkJdmFyIHR5cGUgPSAiR0VUIjsKLQotCQkvLyBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQKLQkJaWYgKCBwYXJhbXMgKSB7Ci0JCQkvLyBJZiBpdCdzIGEgZnVuY3Rpb24KLQkJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFtcyApICkgewotCQkJCS8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrCi0JCQkJY2FsbGJhY2sgPSBwYXJhbXM7Ci0JCQkJcGFyYW1zID0gdW5kZWZpbmVkOwotCi0JCQkvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nCi0JCQl9IGVsc2UgaWYgKCB0eXBlb2YgcGFyYW1zID09PSAib2JqZWN0IiApIHsKLQkJCQlwYXJhbXMgPSBqUXVlcnkucGFyYW0oIHBhcmFtcywgalF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCApOwotCQkJCXR5cGUgPSAiUE9TVCI7Ci0JCQl9Ci0JCX0KLQotCQl2YXIgc2VsZiA9IHRoaXM7Ci0KLQkJLy8gUmVxdWVzdCB0aGUgcmVtb3RlIGRvY3VtZW50Ci0JCWpRdWVyeS5hamF4KHsKLQkJCXVybDogdXJsLAotCQkJdHlwZTogdHlwZSwKLQkJCWRhdGFUeXBlOiAiaHRtbCIsCi0JCQlkYXRhOiBwYXJhbXMsCi0JCQkvLyBDb21wbGV0ZSBjYWxsYmFjayAocmVzcG9uc2VUZXh0IGlzIHVzZWQgaW50ZXJuYWxseSkKLQkJCWNvbXBsZXRlOiBmdW5jdGlvbigganFYSFIsIHN0YXR1cywgcmVzcG9uc2VUZXh0ICkgewotCQkJCS8vIFN0b3JlIHRoZSByZXNwb25zZSBhcyBzcGVjaWZpZWQgYnkgdGhlIGpxWEhSIG9iamVjdAotCQkJCXJlc3BvbnNlVGV4dCA9IGpxWEhSLnJlc3BvbnNlVGV4dDsKLQkJCQkvLyBJZiBzdWNjZXNzZnVsLCBpbmplY3QgdGhlIEhUTUwgaW50byBhbGwgdGhlIG1hdGNoZWQgZWxlbWVudHMKLQkJCQlpZiAoIGpxWEhSLmlzUmVzb2x2ZWQoKSApIHsKLQkJCQkJLy8gIzQ4MjU6IEdldCB0aGUgYWN0dWFsIHJlc3BvbnNlIGluIGNhc2UKLQkJCQkJLy8gYSBkYXRhRmlsdGVyIGlzIHByZXNlbnQgaW4gYWpheFNldHRpbmdzCi0JCQkJCWpxWEhSLmRvbmUoZnVuY3Rpb24oIHIgKSB7Ci0JCQkJCQlyZXNwb25zZVRleHQgPSByOwotCQkJCQl9KTsKLQkJCQkJLy8gU2VlIGlmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZAotCQkJCQlzZWxmLmh0bWwoIHNlbGVjdG9yID8KLQkJCQkJCS8vIENyZWF0ZSBhIGR1bW15IGRpdiB0byBob2xkIHRoZSByZXN1bHRzCi0JCQkJCQlqUXVlcnkoIjxkaXY+IikKLQkJCQkJCQkvLyBpbmplY3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudCBpbiwgcmVtb3ZpbmcgdGhlIHNjcmlwdHMKLQkJCQkJCQkvLyB0byBhdm9pZCBhbnkgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnMgaW4gSUUKLQkJCQkJCQkuYXBwZW5kKHJlc3BvbnNlVGV4dC5yZXBsYWNlKHJzY3JpcHQsICIiKSkKLQotCQkJCQkJCS8vIExvY2F0ZSB0aGUgc3BlY2lmaWVkIGVsZW1lbnRzCi0JCQkJCQkJLmZpbmQoc2VsZWN0b3IpIDoKLQotCQkJCQkJLy8gSWYgbm90LCBqdXN0IGluamVjdCB0aGUgZnVsbCByZXN1bHQKLQkJCQkJCXJlc3BvbnNlVGV4dCApOwotCQkJCX0KLQotCQkJCWlmICggY2FsbGJhY2sgKSB7Ci0JCQkJCXNlbGYuZWFjaCggY2FsbGJhY2ssIFsgcmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCi0JCXJldHVybiB0aGlzOwotCX0sCi0KLQlzZXJpYWxpemU6IGZ1bmN0aW9uKCkgewotCQlyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTsKLQl9LAotCi0Jc2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkgewotCQlyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXsKLQkJCXJldHVybiB0aGlzLmVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggdGhpcy5lbGVtZW50cyApIDogdGhpczsKLQkJfSkKLQkJLmZpbHRlcihmdW5jdGlvbigpewotCQkJcmV0dXJuIHRoaXMubmFtZSAmJiAhdGhpcy5kaXNhYmxlZCAmJgotCQkJCSggdGhpcy5jaGVja2VkIHx8IHJzZWxlY3RUZXh0YXJlYS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgfHwKLQkJCQkJcmlucHV0LnRlc3QoIHRoaXMudHlwZSApICk7Ci0JCX0pCi0JCS5tYXAoZnVuY3Rpb24oIGksIGVsZW0gKXsKLQkJCXZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTsKLQotCQkJcmV0dXJuIHZhbCA9PSBudWxsID8KLQkJCQludWxsIDoKLQkJCQlqUXVlcnkuaXNBcnJheSggdmFsICkgPwotCQkJCQlqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwsIGkgKXsKLQkJCQkJCXJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKLQkJCQkJfSkgOgotCQkJCQl7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKLQkJfSkuZ2V0KCk7Ci0JfQotfSk7Ci0KLS8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzCi1qUXVlcnkuZWFjaCggImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCggIiAiICksIGZ1bmN0aW9uKCBpLCBvICl7Ci0JalF1ZXJ5LmZuWyBvIF0gPSBmdW5jdGlvbiggZiApewotCQlyZXR1cm4gdGhpcy5vbiggbywgZiApOwotCX07Ci19KTsKLQotalF1ZXJ5LmVhY2goIFsgImdldCIsICJwb3N0IiBdLCBmdW5jdGlvbiggaSwgbWV0aG9kICkgewotCWpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHsKLQkJLy8gc2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWQKLQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkgewotCQkJdHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7Ci0JCQljYWxsYmFjayA9IGRhdGE7Ci0JCQlkYXRhID0gdW5kZWZpbmVkOwotCQl9Ci0KLQkJcmV0dXJuIGpRdWVyeS5hamF4KHsKLQkJCXR5cGU6IG1ldGhvZCwKLQkJCXVybDogdXJsLAotCQkJZGF0YTogZGF0YSwKLQkJCXN1Y2Nlc3M6IGNhbGxiYWNrLAotCQkJZGF0YVR5cGU6IHR5cGUKLQkJfSk7Ci0JfTsKLX0pOwotCi1qUXVlcnkuZXh0ZW5kKHsKLQotCWdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7Ci0JCXJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7Ci0JfSwKLQotCWdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkgewotCQlyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7Ci0JfSwKLQotCS8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0Ci0JLy8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLgotCS8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuCi0JYWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHsKLQkJaWYgKCBzZXR0aW5ncyApIHsKLQkJCS8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0Ci0JCQlhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKTsKLQkJfSBlbHNlIHsKLQkJCS8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3MKLQkJCXNldHRpbmdzID0gdGFyZ2V0OwotCQkJdGFyZ2V0ID0galF1ZXJ5LmFqYXhTZXR0aW5nczsKLQkJfQotCQlhamF4RXh0ZW5kKCB0YXJnZXQsIHNldHRpbmdzICk7Ci0JCXJldHVybiB0YXJnZXQ7Ci0JfSwKLQotCWFqYXhTZXR0aW5nczogewotCQl1cmw6IGFqYXhMb2NhdGlvbiwKLQkJaXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggYWpheExvY1BhcnRzWyAxIF0gKSwKLQkJZ2xvYmFsOiB0cnVlLAotCQl0eXBlOiAiR0VUIiwKLQkJY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLAotCQlwcm9jZXNzRGF0YTogdHJ1ZSwKLQkJYXN5bmM6IHRydWUsCi0JCS8qCi0JCXRpbWVvdXQ6IDAsCi0JCWRhdGE6IG51bGwsCi0JCWRhdGFUeXBlOiBudWxsLAotCQl1c2VybmFtZTogbnVsbCwKLQkJcGFzc3dvcmQ6IG51bGwsCi0JCWNhY2hlOiBudWxsLAotCQl0cmFkaXRpb25hbDogZmFsc2UsCi0JCWhlYWRlcnM6IHt9LAotCQkqLwotCi0JCWFjY2VwdHM6IHsKLQkJCXhtbDogImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLAotCQkJaHRtbDogInRleHQvaHRtbCIsCi0JCQl0ZXh0OiAidGV4dC9wbGFpbiIsCi0JCQlqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwKLQkJCSIqIjogYWxsVHlwZXMKLQkJfSwKLQotCQljb250ZW50czogewotCQkJeG1sOiAveG1sLywKLQkJCWh0bWw6IC9odG1sLywKLQkJCWpzb246IC9qc29uLwotCQl9LAotCi0JCXJlc3BvbnNlRmllbGRzOiB7Ci0JCQl4bWw6ICJyZXNwb25zZVhNTCIsCi0JCQl0ZXh0OiAicmVzcG9uc2VUZXh0IgotCQl9LAotCi0JCS8vIExpc3Qgb2YgZGF0YSBjb252ZXJ0ZXJzCi0JCS8vIDEpIGtleSBmb3JtYXQgaXMgInNvdXJjZV90eXBlIGRlc3RpbmF0aW9uX3R5cGUiIChhIHNpbmdsZSBzcGFjZSBpbi1iZXR3ZWVuKQotCQkvLyAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZCBmb3Igc291cmNlX3R5cGUKLQkJY29udmVydGVyczogewotCi0JCQkvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHQKLQkJCSIqIHRleHQiOiB3aW5kb3cuU3RyaW5nLAotCi0JCQkvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbikKLQkJCSJ0ZXh0IGh0bWwiOiB0cnVlLAotCi0JCQkvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uCi0JCQkidGV4dCBqc29uIjogalF1ZXJ5LnBhcnNlSlNPTiwKLQotCQkJLy8gUGFyc2UgdGV4dCBhcyB4bWwKLQkJCSJ0ZXh0IHhtbCI6IGpRdWVyeS5wYXJzZVhNTAotCQl9LAotCi0JCS8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6Ci0JCS8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWYKLQkJLy8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmUKLQkJLy8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpCi0JCWZsYXRPcHRpb25zOiB7Ci0JCQljb250ZXh0OiB0cnVlLAotCQkJdXJsOiB0cnVlCi0JCX0KLQl9LAotCi0JYWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksCi0JYWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksCi0KLQkvLyBNYWluIG1ldGhvZAotCWFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7Ci0KLQkJLy8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmUKLQkJaWYgKCB0eXBlb2YgdXJsID09PSAib2JqZWN0IiApIHsKLQkJCW9wdGlvbnMgPSB1cmw7Ci0JCQl1cmwgPSB1bmRlZmluZWQ7Ci0JCX0KLQotCQkvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdAotCQlvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotCQl2YXIgLy8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdAotCQkJcyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksCi0JCQkvLyBDYWxsYmFja3MgY29udGV4dAotCQkJY2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsCi0JCQkvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzCi0JCQkvLyBJdCdzIHRoZSBjYWxsYmFja0NvbnRleHQgaWYgb25lIHdhcyBwcm92aWRlZCBpbiB0aGUgb3B0aW9ucwotCQkJLy8gYW5kIGlmIGl0J3MgYSBET00gbm9kZSBvciBhIGpRdWVyeSBjb2xsZWN0aW9uCi0JCQlnbG9iYWxFdmVudENvbnRleHQgPSBjYWxsYmFja0NvbnRleHQgIT09IHMgJiYKLQkJCQkoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgKSA/Ci0JCQkJCQlqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDogalF1ZXJ5LmV2ZW50LAotCQkJLy8gRGVmZXJyZWRzCi0JCQlkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLAotCQkJY29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwKLQkJCS8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCi0JCQlzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LAotCQkJLy8gaWZNb2RpZmllZCBrZXkKLQkJCWlmTW9kaWZpZWRLZXksCi0JCQkvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKQotCQkJcmVxdWVzdEhlYWRlcnMgPSB7fSwKLQkJCXJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSwKLQkJCS8vIFJlc3BvbnNlIGhlYWRlcnMKLQkJCXJlc3BvbnNlSGVhZGVyc1N0cmluZywKLQkJCXJlc3BvbnNlSGVhZGVycywKLQkJCS8vIHRyYW5zcG9ydAotCQkJdHJhbnNwb3J0LAotCQkJLy8gdGltZW91dCBoYW5kbGUKLQkJCXRpbWVvdXRUaW1lciwKLQkJCS8vIENyb3NzLWRvbWFpbiBkZXRlY3Rpb24gdmFycwotCQkJcGFydHMsCi0JCQkvLyBUaGUganFYSFIgc3RhdGUKLQkJCXN0YXRlID0gMCwKLQkJCS8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZAotCQkJZmlyZUdsb2JhbHMsCi0JCQkvLyBMb29wIHZhcmlhYmxlCi0JCQlpLAotCQkJLy8gRmFrZSB4aHIKLQkJCWpxWEhSID0gewotCi0JCQkJcmVhZHlTdGF0ZTogMCwKLQotCQkJCS8vIENhY2hlcyB0aGUgaGVhZGVyCi0JCQkJc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewotCQkJCQlpZiAoICFzdGF0ZSApIHsKLQkJCQkJCXZhciBsbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKLQkJCQkJCW5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSB8fCBuYW1lOwotCQkJCQkJcmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlOwotCQkJCQl9Ci0JCQkJCXJldHVybiB0aGlzOwotCQkJCX0sCi0KLQkJCQkvLyBSYXcgc3RyaW5nCi0JCQkJZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHsKLQkJCQkJcmV0dXJuIHN0YXRlID09PSAyID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDsKLQkJCQl9LAotCi0JCQkJLy8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZAotCQkJCWdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkgewotCQkJCQl2YXIgbWF0Y2g7Ci0JCQkJCWlmICggc3RhdGUgPT09IDIgKSB7Ci0JCQkJCQlpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7Ci0JCQkJCQkJcmVzcG9uc2VIZWFkZXJzID0ge307Ci0JCQkJCQkJd2hpbGUoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkgewotCQkJCQkJCQlyZXNwb25zZUhlYWRlcnNbIG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJbWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07Ci0JCQkJCX0KLQkJCQkJcmV0dXJuIG1hdGNoID09PSB1bmRlZmluZWQgPyBudWxsIDogbWF0Y2g7Ci0JCQkJfSwKLQotCQkJCS8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyCi0JCQkJb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7Ci0JCQkJCWlmICggIXN0YXRlICkgewotCQkJCQkJcy5taW1lVHlwZSA9IHR5cGU7Ci0JCQkJCX0KLQkJCQkJcmV0dXJuIHRoaXM7Ci0JCQkJfSwKLQotCQkJCS8vIENhbmNlbCB0aGUgcmVxdWVzdAotCQkJCWFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHsKLQkJCQkJc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQgfHwgImFib3J0IjsKLQkJCQkJaWYgKCB0cmFuc3BvcnQgKSB7Ci0JCQkJCQl0cmFuc3BvcnQuYWJvcnQoIHN0YXR1c1RleHQgKTsKLQkJCQkJfQotCQkJCQlkb25lKCAwLCBzdGF0dXNUZXh0ICk7Ci0JCQkJCXJldHVybiB0aGlzOwotCQkJCX0KLQkJCX07Ci0KLQkJLy8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lCi0JCS8vIEl0IGlzIGRlZmluZWQgaGVyZSBiZWNhdXNlIGpzbGludCBjb21wbGFpbnMgaWYgaXQgaXMgZGVjbGFyZWQKLQkJLy8gYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gKHdoaWNoIHdvdWxkIGJlIG1vcmUgbG9naWNhbCBhbmQgcmVhZGFibGUpCi0JCWZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkgewotCi0JCQkvLyBDYWxsZWQgb25jZQotCQkJaWYgKCBzdGF0ZSA9PT0gMiApIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0KLQkJCS8vIFN0YXRlIGlzICJkb25lIiBub3cKLQkJCXN0YXRlID0gMjsKLQotCQkJLy8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHMKLQkJCWlmICggdGltZW91dFRpbWVyICkgewotCQkJCWNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7Ci0JCQl9Ci0KLQkJCS8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uCi0JCQkvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKQotCQkJdHJhbnNwb3J0ID0gdW5kZWZpbmVkOwotCi0JCQkvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzCi0JCQlyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8ICIiOwotCi0JCQkvLyBTZXQgcmVhZHlTdGF0ZQotCQkJanFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDsKLQotCQkJdmFyIGlzU3VjY2VzcywKLQkJCQlzdWNjZXNzLAotCQkJCWVycm9yLAotCQkJCXN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0LAotCQkJCXJlc3BvbnNlID0gcmVzcG9uc2VzID8gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIDogdW5kZWZpbmVkLAotCQkJCWxhc3RNb2RpZmllZCwKLQkJCQlldGFnOwotCi0JCQkvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZwotCQkJaWYgKCBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNCApIHsKLQotCQkJCS8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCi0JCQkJaWYgKCBzLmlmTW9kaWZpZWQgKSB7Ci0KLQkJCQkJaWYgKCAoIGxhc3RNb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiTGFzdC1Nb2RpZmllZCIgKSApICkgewotCQkJCQkJalF1ZXJ5Lmxhc3RNb2RpZmllZFsgaWZNb2RpZmllZEtleSBdID0gbGFzdE1vZGlmaWVkOwotCQkJCQl9Ci0JCQkJCWlmICggKCBldGFnID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJFdGFnIiApICkgKSB7Ci0JCQkJCQlqUXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtleSBdID0gZXRhZzsKLQkJCQkJfQotCQkJCX0KLQotCQkJCS8vIElmIG5vdCBtb2RpZmllZAotCQkJCWlmICggc3RhdHVzID09PSAzMDQgKSB7Ci0KLQkJCQkJc3RhdHVzVGV4dCA9ICJub3Rtb2RpZmllZCI7Ci0JCQkJCWlzU3VjY2VzcyA9IHRydWU7Ci0KLQkJCQkvLyBJZiB3ZSBoYXZlIGRhdGEKLQkJCQl9IGVsc2UgewotCi0JCQkJCXRyeSB7Ci0JCQkJCQlzdWNjZXNzID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlICk7Ci0JCQkJCQlzdGF0dXNUZXh0ID0gInN1Y2Nlc3MiOwotCQkJCQkJaXNTdWNjZXNzID0gdHJ1ZTsKLQkJCQkJfSBjYXRjaChlKSB7Ci0JCQkJCQkvLyBXZSBoYXZlIGEgcGFyc2VyZXJyb3IKLQkJCQkJCXN0YXR1c1RleHQgPSAicGFyc2VyZXJyb3IiOwotCQkJCQkJZXJyb3IgPSBlOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvLyBXZSBleHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dAotCQkJCS8vIHRoZW4gbm9ybWFsaXplIHN0YXR1c1RleHQgYW5kIHN0YXR1cyBmb3Igbm9uLWFib3J0cwotCQkJCWVycm9yID0gc3RhdHVzVGV4dDsKLQkJCQlpZiAoICFzdGF0dXNUZXh0IHx8IHN0YXR1cyApIHsKLQkJCQkJc3RhdHVzVGV4dCA9ICJlcnJvciI7Ci0JCQkJCWlmICggc3RhdHVzIDwgMCApIHsKLQkJCQkJCXN0YXR1cyA9IDA7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCS8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0Ci0JCQlqcVhIUi5zdGF0dXMgPSBzdGF0dXM7Ci0JCQlqcVhIUi5zdGF0dXNUZXh0ID0gIiIgKyAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApOwotCi0JCQkvLyBTdWNjZXNzL0Vycm9yCi0JCQlpZiAoIGlzU3VjY2VzcyApIHsKLQkJCQlkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7Ci0JCQl9Ci0KLQkJCS8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCi0JCQlqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7Ci0JCQlzdGF0dXNDb2RlID0gdW5kZWZpbmVkOwotCi0JCQlpZiAoIGZpcmVHbG9iYWxzICkgewotCQkJCWdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheCIgKyAoIGlzU3VjY2VzcyA/ICJTdWNjZXNzIiA6ICJFcnJvciIgKSwKLQkJCQkJCVsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7Ci0JCQl9Ci0KLQkJCS8vIENvbXBsZXRlCi0JCQljb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApOwotCi0JCQlpZiAoIGZpcmVHbG9iYWxzICkgewotCQkJCWdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheENvbXBsZXRlIiwgWyBqcVhIUiwgcyBdICk7Ci0JCQkJLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyCi0JCQkJaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKLQkJCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvLyBBdHRhY2ggZGVmZXJyZWRzCi0JCWRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7Ci0JCWpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lOwotCQlqcVhIUi5lcnJvciA9IGpxWEhSLmZhaWw7Ci0JCWpxWEhSLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7Ci0KLQkJLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKLQkJanFYSFIuc3RhdHVzQ29kZSA9IGZ1bmN0aW9uKCBtYXAgKSB7Ci0JCQlpZiAoIG1hcCApIHsKLQkJCQl2YXIgdG1wOwotCQkJCWlmICggc3RhdGUgPCAyICkgewotCQkJCQlmb3IgKCB0bXAgaW4gbWFwICkgewotCQkJCQkJc3RhdHVzQ29kZVsgdG1wIF0gPSBbIHN0YXR1c0NvZGVbdG1wXSwgbWFwW3RtcF0gXTsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCXRtcCA9IG1hcFsganFYSFIuc3RhdHVzIF07Ci0JCQkJCWpxWEhSLnRoZW4oIHRtcCwgdG1wICk7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIHRoaXM7Ci0JCX07Ci0KLQkJLy8gUmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pCi0JCS8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKCM1ODY2OiBJRTcgaXNzdWUgd2l0aCBwcm90b2NvbC1sZXNzIHVybHMpCi0JCS8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZQotCQlzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgKSArICIiICkucmVwbGFjZSggcmhhc2gsICIiICkucmVwbGFjZSggcnByb3RvY29sLCBhamF4TG9jUGFydHNbIDEgXSArICIvLyIgKTsKLQotCQkvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0Ci0JCXMuZGF0YVR5cGVzID0galF1ZXJ5LnRyaW0oIHMuZGF0YVR5cGUgfHwgIioiICkudG9Mb3dlckNhc2UoKS5zcGxpdCggcnNwYWNlc0FqYXggKTsKLQotCQkvLyBEZXRlcm1pbmUgaWYgYSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlcgotCQlpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHsKLQkJCXBhcnRzID0gcnVybC5leGVjKCBzLnVybC50b0xvd2VyQ2FzZSgpICk7Ci0JCQlzLmNyb3NzRG9tYWluID0gISEoIHBhcnRzICYmCi0JCQkJKCBwYXJ0c1sgMSBdICE9IGFqYXhMb2NQYXJ0c1sgMSBdIHx8IHBhcnRzWyAyIF0gIT0gYWpheExvY1BhcnRzWyAyIF0gfHwKLQkJCQkJKCBwYXJ0c1sgMyBdIHx8ICggcGFydHNbIDEgXSA9PT0gImh0dHA6IiA/IDgwIDogNDQzICkgKSAhPQotCQkJCQkJKCBhamF4TG9jUGFydHNbIDMgXSB8fCAoIGFqYXhMb2NQYXJ0c1sgMSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICkKLQkJCSk7Ci0JCX0KLQotCQkvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmcKLQkJaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSAic3RyaW5nIiApIHsKLQkJCXMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7Ci0JCX0KLQotCQkvLyBBcHBseSBwcmVmaWx0ZXJzCi0JCWluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApOwotCi0JCS8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsZXIsIHN0b3AgdGhlcmUKLQkJaWYgKCBzdGF0ZSA9PT0gMiApIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCS8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCi0JCWZpcmVHbG9iYWxzID0gcy5nbG9iYWw7Ci0KLQkJLy8gVXBwZXJjYXNlIHRoZSB0eXBlCi0JCXMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpOwotCi0JCS8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50Ci0JCXMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApOwotCi0JCS8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHMKLQkJaWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7Ci0JCQlqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdGFydCIgKTsKLQkJfQotCi0JCS8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50Ci0JCWlmICggIXMuaGFzQ29udGVudCApIHsKLQotCQkJLy8gSWYgZGF0YSBpcyBhdmFpbGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybAotCQkJaWYgKCBzLmRhdGEgKSB7Ci0JCQkJcy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/ICImIiA6ICI/IiApICsgcy5kYXRhOwotCQkJCS8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnkKLQkJCQlkZWxldGUgcy5kYXRhOwotCQkJfQotCi0JCQkvLyBHZXQgaWZNb2RpZmllZEtleSBiZWZvcmUgYWRkaW5nIHRoZSBhbnRpLWNhY2hlIHBhcmFtZXRlcgotCQkJaWZNb2RpZmllZEtleSA9IHMudXJsOwotCi0JCQkvLyBBZGQgYW50aS1jYWNoZSBpbiB1cmwgaWYgbmVlZGVkCi0JCQlpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkgewotCi0JCQkJdmFyIHRzID0galF1ZXJ5Lm5vdygpLAotCQkJCQkvLyB0cnkgcmVwbGFjaW5nIF89IGlmIGl0IGlzIHRoZXJlCi0JCQkJCXJldCA9IHMudXJsLnJlcGxhY2UoIHJ0cywgIiQxXz0iICsgdHMgKTsKLQotCQkJCS8vIGlmIG5vdGhpbmcgd2FzIHJlcGxhY2VkLCBhZGQgdGltZXN0YW1wIHRvIHRoZSBlbmQKLQkJCQlzLnVybCA9IHJldCArICggKCByZXQgPT09IHMudXJsICkgPyAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyAiXz0iICsgdHMgOiAiIiApOwotCQkJfQotCQl9Ci0KLQkJLy8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50Ci0JCWlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkgewotCQkJanFYSFIuc2V0UmVxdWVzdEhlYWRlciggIkNvbnRlbnQtVHlwZSIsIHMuY29udGVudFR5cGUgKTsKLQkJfQotCi0JCS8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCi0JCWlmICggcy5pZk1vZGlmaWVkICkgewotCQkJaWZNb2RpZmllZEtleSA9IGlmTW9kaWZpZWRLZXkgfHwgcy51cmw7Ci0JCQlpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkgXSApIHsKLQkJCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2UiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKTsKLQkJCX0KLQkJCWlmICggalF1ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkgXSApIHsKLQkJCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gKTsKLQkJCX0KLQkJfQotCi0JCS8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGUKLQkJanFYSFIuc2V0UmVxdWVzdEhlYWRlcigKLQkJCSJBY2NlcHQiLAotCQkJcy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gPwotCQkJCXMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbMF0gXSArICggcy5kYXRhVHlwZXNbIDAgXSAhPT0gIioiID8gIiwgIiArIGFsbFR5cGVzICsgIjsgcT0wLjAxIiA6ICIiICkgOgotCQkJCXMuYWNjZXB0c1sgIioiIF0KLQkJKTsKLQotCQkvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KLQkJZm9yICggaSBpbiBzLmhlYWRlcnMgKSB7Ci0JCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApOwotCQl9Ci0KLQkJLy8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydAotCQlpZiAoIHMuYmVmb3JlU2VuZCAmJiAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7Ci0JCQkJLy8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeQotCQkJCWpxWEhSLmFib3J0KCk7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCi0JCX0KLQotCQkvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHMKLQkJZm9yICggaSBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9ICkgewotCQkJanFYSFJbIGkgXSggc1sgaSBdICk7Ci0JCX0KLQotCQkvLyBHZXQgdHJhbnNwb3J0Ci0JCXRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApOwotCi0JCS8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydAotCQlpZiAoICF0cmFuc3BvcnQgKSB7Ci0JCQlkb25lKCAtMSwgIk5vIFRyYW5zcG9ydCIgKTsKLQkJfSBlbHNlIHsKLQkJCWpxWEhSLnJlYWR5U3RhdGUgPSAxOwotCQkJLy8gU2VuZCBnbG9iYWwgZXZlbnQKLQkJCWlmICggZmlyZUdsb2JhbHMgKSB7Ci0JCQkJZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoICJhamF4U2VuZCIsIFsganFYSFIsIHMgXSApOwotCQkJfQotCQkJLy8gVGltZW91dAotCQkJaWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7Ci0JCQkJdGltZW91dFRpbWVyID0gc2V0VGltZW91dCggZnVuY3Rpb24oKXsKLQkJCQkJanFYSFIuYWJvcnQoICJ0aW1lb3V0IiApOwotCQkJCX0sIHMudGltZW91dCApOwotCQkJfQotCi0JCQl0cnkgewotCQkJCXN0YXRlID0gMTsKLQkJCQl0cmFuc3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTsKLQkJCX0gY2F0Y2ggKGUpIHsKLQkJCQkvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5vdCBkb25lCi0JCQkJaWYgKCBzdGF0ZSA8IDIgKSB7Ci0JCQkJCWRvbmUoIC0xLCBlICk7Ci0JCQkJLy8gU2ltcGx5IHJldGhyb3cgb3RoZXJ3aXNlCi0JCQkJfSBlbHNlIHsKLQkJCQkJdGhyb3cgZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4ganFYSFI7Ci0JfSwKLQotCS8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mCi0JLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nCi0JcGFyYW06IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHsKLQkJdmFyIHMgPSBbXSwKLQkJCWFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewotCQkJCS8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgcmV0dXJuIGl0cyB2YWx1ZQotCQkJCXZhbHVlID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgPyB2YWx1ZSgpIDogdmFsdWU7Ci0JCQkJc1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlICk7Ci0JCQl9OwotCi0JCS8vIFNldCB0cmFkaXRpb25hbCB0byB0cnVlIGZvciBqUXVlcnkgPD0gMS4zLjIgYmVoYXZpb3IuCi0JCWlmICggdHJhZGl0aW9uYWwgPT09IHVuZGVmaW5lZCApIHsKLQkJCXRyYWRpdGlvbmFsID0galF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbDsKLQkJfQotCi0JCS8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuCi0JCWlmICggalF1ZXJ5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7Ci0JCQkvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHMKLQkJCWpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHsKLQkJCQlhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApOwotCQkJfSk7Ci0KLQkJfSBlbHNlIHsKLQkJCS8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlICJvbGQiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlcgotCQkJLy8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuCi0JCQlmb3IgKCB2YXIgcHJlZml4IGluIGEgKSB7Ci0JCQkJYnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKLQkJCX0KLQkJfQotCi0JCS8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb24KLQkJcmV0dXJuIHMuam9pbiggIiYiICkucmVwbGFjZSggcjIwLCAiKyIgKTsKLQl9Ci19KTsKLQotZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkgewotCWlmICggalF1ZXJ5LmlzQXJyYXkoIG9iaiApICkgewotCQkvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS4KLQkJalF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7Ci0JCQlpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgewotCQkJCS8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KLQkJCQlhZGQoIHByZWZpeCwgdiApOwotCi0JCQl9IGVsc2UgewotCQkJCS8vIElmIGFycmF5IGl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cwotCQkJCS8vIG51bWVyaWMgaW5kZXggdG8gcmVzb2x2ZSBkZXNlcmlhbGl6YXRpb24gYW1iaWd1aXR5IGlzc3Vlcy4KLQkJCQkvLyBOb3RlIHRoYXQgcmFjayAoYXMgb2YgMS4wLjApIGNhbid0IGN1cnJlbnRseSBkZXNlcmlhbGl6ZQotCQkJCS8vIG5lc3RlZCBhcnJheXMgcHJvcGVybHksIGFuZCBhdHRlbXB0aW5nIHRvIGRvIHNvIG1heSBjYXVzZQotCQkJCS8vIGEgc2VydmVyIGVycm9yLiBQb3NzaWJsZSBmaXhlcyBhcmUgdG8gbW9kaWZ5IHJhY2sncwotCQkJCS8vIGRlc2VyaWFsaXphdGlvbiBhbGdvcml0aG0gb3IgdG8gcHJvdmlkZSBhbiBvcHRpb24gb3IgZmxhZwotCQkJCS8vIHRvIGZvcmNlIGFycmF5IHNlcmlhbGl6YXRpb24gdG8gYmUgc2hhbGxvdy4KLQkJCQlidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgKCB0eXBlb2YgdiA9PT0gIm9iamVjdCIgfHwgalF1ZXJ5LmlzQXJyYXkodikgPyBpIDogIiIgKSArICJdIiwgdiwgdHJhZGl0aW9uYWwsIGFkZCApOwotCQkJfQotCQl9KTsKLQotCX0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiBvYmogIT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAib2JqZWN0IiApIHsKLQkJLy8gU2VyaWFsaXplIG9iamVjdCBpdGVtLgotCQlmb3IgKCB2YXIgbmFtZSBpbiBvYmogKSB7Ci0JCQlidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgbmFtZSArICJdIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKLQkJfQotCi0JfSBlbHNlIHsKLQkJLy8gU2VyaWFsaXplIHNjYWxhciBpdGVtLgotCQlhZGQoIHByZWZpeCwgb2JqICk7Ci0JfQotfQotCi0vLyBUaGlzIGlzIHN0aWxsIG9uIHRoZSBqUXVlcnkgb2JqZWN0Li4uIGZvciBub3cKLS8vIFdhbnQgdG8gbW92ZSB0aGlzIHRvIGpRdWVyeS5hamF4IHNvbWUgZGF5Ci1qUXVlcnkuZXh0ZW5kKHsKLQotCS8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllcwotCWFjdGl2ZTogMCwKLQotCS8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3QKLQlsYXN0TW9kaWZpZWQ6IHt9LAotCWV0YWc6IHt9Ci0KLX0pOwotCi0vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6Ci0gKiAtIHNldHMgYWxsIHJlc3BvbnNlWFhYIGZpZWxkcyBhY2NvcmRpbmdseQotICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSkKLSAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQotICovCi1mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkgewotCi0JdmFyIGNvbnRlbnRzID0gcy5jb250ZW50cywKLQkJZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMsCi0JCXJlc3BvbnNlRmllbGRzID0gcy5yZXNwb25zZUZpZWxkcywKLQkJY3QsCi0JCXR5cGUsCi0JCWZpbmFsRGF0YVR5cGUsCi0JCWZpcnN0RGF0YVR5cGU7Ci0KLQkvLyBGaWxsIHJlc3BvbnNlWFhYIGZpZWxkcwotCWZvciAoIHR5cGUgaW4gcmVzcG9uc2VGaWVsZHMgKSB7Ci0JCWlmICggdHlwZSBpbiByZXNwb25zZXMgKSB7Ci0JCQlqcVhIUlsgcmVzcG9uc2VGaWVsZHNbdHlwZV0gXSA9IHJlc3BvbnNlc1sgdHlwZSBdOwotCQl9Ci0JfQotCi0JLy8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3MKLQl3aGlsZSggZGF0YVR5cGVzWyAwIF0gPT09ICIqIiApIHsKLQkJZGF0YVR5cGVzLnNoaWZ0KCk7Ci0JCWlmICggY3QgPT09IHVuZGVmaW5lZCApIHsKLQkJCWN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggImNvbnRlbnQtdHlwZSIgKTsKLQkJfQotCX0KLQotCS8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZQotCWlmICggY3QgKSB7Ci0JCWZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7Ci0JCQlpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkgewotCQkJCWRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGUKLQlpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHsKLQkJZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdOwotCX0gZWxzZSB7Ci0JCS8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXMKLQkJZm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7Ci0JCQlpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyAiICIgKyBkYXRhVHlwZXNbMF0gXSApIHsKLQkJCQlmaW5hbERhdGFUeXBlID0gdHlwZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICggIWZpcnN0RGF0YVR5cGUgKSB7Ci0JCQkJZmlyc3REYXRhVHlwZSA9IHR5cGU7Ci0JCQl9Ci0JCX0KLQkJLy8gT3IganVzdCB1c2UgZmlyc3Qgb25lCi0JCWZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7Ci0JfQotCi0JLy8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZQotCS8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkCi0JLy8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQotCWlmICggZmluYWxEYXRhVHlwZSApIHsKLQkJaWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHsKLQkJCWRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7Ci0JCX0KLQkJcmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdOwotCX0KLX0KLQotLy8gQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZQotZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlICkgewotCi0JLy8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWQKLQlpZiAoIHMuZGF0YUZpbHRlciApIHsKLQkJcmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7Ci0JfQotCi0JdmFyIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLAotCQljb252ZXJ0ZXJzID0ge30sCi0JCWksCi0JCWtleSwKLQkJbGVuZ3RoID0gZGF0YVR5cGVzLmxlbmd0aCwKLQkJdG1wLAotCQkvLyBDdXJyZW50IGFuZCBwcmV2aW91cyBkYXRhVHlwZXMKLQkJY3VycmVudCA9IGRhdGFUeXBlc1sgMCBdLAotCQlwcmV2LAotCQkvLyBDb252ZXJzaW9uIGV4cHJlc3Npb24KLQkJY29udmVyc2lvbiwKLQkJLy8gQ29udmVyc2lvbiBmdW5jdGlvbgotCQljb252LAotCQkvLyBDb252ZXJzaW9uIGZ1bmN0aW9ucyAodHJhbnNpdGl2ZSBjb252ZXJzaW9uKQotCQljb252MSwKLQkJY29udjI7Ci0KLQkvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgY2hhaW4KLQlmb3IgKCBpID0gMTsgaSA8IGxlbmd0aDsgaSsrICkgewotCi0JCS8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcAotCQkvLyB3aXRoIGxvd2VyY2FzZWQga2V5cwotCQlpZiAoIGkgPT09IDEgKSB7Ci0JCQlmb3IgKCBrZXkgaW4gcy5jb252ZXJ0ZXJzICkgewotCQkJCWlmICggdHlwZW9mIGtleSA9PT0gInN0cmluZyIgKSB7Ci0JCQkJCWNvbnZlcnRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGtleSBdOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8vIEdldCB0aGUgZGF0YVR5cGVzCi0JCXByZXYgPSBjdXJyZW50OwotCQljdXJyZW50ID0gZGF0YVR5cGVzWyBpIF07Ci0KLQkJLy8gSWYgY3VycmVudCBpcyBhdXRvIGRhdGFUeXBlLCB1cGRhdGUgaXQgdG8gcHJldgotCQlpZiAoIGN1cnJlbnQgPT09ICIqIiApIHsKLQkJCWN1cnJlbnQgPSBwcmV2OwotCQkvLyBJZiBubyBhdXRvIGFuZCBkYXRhVHlwZXMgYXJlIGFjdHVhbGx5IGRpZmZlcmVudAotCQl9IGVsc2UgaWYgKCBwcmV2ICE9PSAiKiIgJiYgcHJldiAhPT0gY3VycmVudCApIHsKLQotCQkJLy8gR2V0IHRoZSBjb252ZXJ0ZXIKLQkJCWNvbnZlcnNpb24gPSBwcmV2ICsgIiAiICsgY3VycmVudDsKLQkJCWNvbnYgPSBjb252ZXJ0ZXJzWyBjb252ZXJzaW9uIF0gfHwgY29udmVydGVyc1sgIiogIiArIGN1cnJlbnQgXTsKLQotCQkJLy8gSWYgdGhlcmUgaXMgbm8gZGlyZWN0IGNvbnZlcnRlciwgc2VhcmNoIHRyYW5zaXRpdmVseQotCQkJaWYgKCAhY29udiApIHsKLQkJCQljb252MiA9IHVuZGVmaW5lZDsKLQkJCQlmb3IgKCBjb252MSBpbiBjb252ZXJ0ZXJzICkgewotCQkJCQl0bXAgPSBjb252MS5zcGxpdCggIiAiICk7Ci0JCQkJCWlmICggdG1wWyAwIF0gPT09IHByZXYgfHwgdG1wWyAwIF0gPT09ICIqIiApIHsKLQkJCQkJCWNvbnYyID0gY29udmVydGVyc1sgdG1wWzFdICsgIiAiICsgY3VycmVudCBdOwotCQkJCQkJaWYgKCBjb252MiApIHsKLQkJCQkJCQljb252MSA9IGNvbnZlcnRlcnNbIGNvbnYxIF07Ci0JCQkJCQkJaWYgKCBjb252MSA9PT0gdHJ1ZSApIHsKLQkJCQkJCQkJY29udiA9IGNvbnYyOwotCQkJCQkJCX0gZWxzZSBpZiAoIGNvbnYyID09PSB0cnVlICkgewotCQkJCQkJCQljb252ID0gY29udjE7Ci0JCQkJCQkJfQotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJLy8gSWYgd2UgZm91bmQgbm8gY29udmVydGVyLCBkaXNwYXRjaCBhbiBlcnJvcgotCQkJaWYgKCAhKCBjb252IHx8IGNvbnYyICkgKSB7Ci0JCQkJalF1ZXJ5LmVycm9yKCAiTm8gY29udmVyc2lvbiBmcm9tICIgKyBjb252ZXJzaW9uLnJlcGxhY2UoIiAiLCIgdG8gIikgKTsKLQkJCX0KLQkJCS8vIElmIGZvdW5kIGNvbnZlcnRlciBpcyBub3QgYW4gZXF1aXZhbGVuY2UKLQkJCWlmICggY29udiAhPT0gdHJ1ZSApIHsKLQkJCQkvLyBDb252ZXJ0IHdpdGggMSBvciAyIGNvbnZlcnRlcnMgYWNjb3JkaW5nbHkKLQkJCQlyZXNwb25zZSA9IGNvbnYgPyBjb252KCByZXNwb25zZSApIDogY29udjIoIGNvbnYxKHJlc3BvbnNlKSApOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiByZXNwb25zZTsKLX0KLQotCi0KLQotdmFyIGpzYyA9IGpRdWVyeS5ub3coKSwKLQlqc3JlID0gLyhcPSlcPygmfCQpfFw/XD8vaTsKLQotLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5ncwotalF1ZXJ5LmFqYXhTZXR1cCh7Ci0JanNvbnA6ICJjYWxsYmFjayIsCi0JanNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7Ci0JCXJldHVybiBqUXVlcnkuZXhwYW5kbyArICJfIiArICgganNjKysgKTsKLQl9Ci19KTsKLQotLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzCi1qUXVlcnkuYWpheFByZWZpbHRlciggImpzb24ganNvbnAiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7Ci0KLQl2YXIgaW5zcGVjdERhdGEgPSBzLmNvbnRlbnRUeXBlID09PSAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiAmJgotCQkoIHR5cGVvZiBzLmRhdGEgPT09ICJzdHJpbmciICk7Ci0KLQlpZiAoIHMuZGF0YVR5cGVzWyAwIF0gPT09ICJqc29ucCIgfHwKLQkJcy5qc29ucCAhPT0gZmFsc2UgJiYgKCBqc3JlLnRlc3QoIHMudXJsICkgfHwKLQkJCQlpbnNwZWN0RGF0YSAmJiBqc3JlLnRlc3QoIHMuZGF0YSApICkgKSB7Ci0KLQkJdmFyIHJlc3BvbnNlQ29udGFpbmVyLAotCQkJanNvbnBDYWxsYmFjayA9IHMuanNvbnBDYWxsYmFjayA9Ci0JCQkJalF1ZXJ5LmlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID8gcy5qc29ucENhbGxiYWNrKCkgOiBzLmpzb25wQ2FsbGJhY2ssCi0JCQlwcmV2aW91cyA9IHdpbmRvd1sganNvbnBDYWxsYmFjayBdLAotCQkJdXJsID0gcy51cmwsCi0JCQlkYXRhID0gcy5kYXRhLAotCQkJcmVwbGFjZSA9ICIkMSIgKyBqc29ucENhbGxiYWNrICsgIiQyIjsKLQotCQlpZiAoIHMuanNvbnAgIT09IGZhbHNlICkgewotCQkJdXJsID0gdXJsLnJlcGxhY2UoIGpzcmUsIHJlcGxhY2UgKTsKLQkJCWlmICggcy51cmwgPT09IHVybCApIHsKLQkJCQlpZiAoIGluc3BlY3REYXRhICkgewotCQkJCQlkYXRhID0gZGF0YS5yZXBsYWNlKCBqc3JlLCByZXBsYWNlICk7Ci0JCQkJfQotCQkJCWlmICggcy5kYXRhID09PSBkYXRhICkgewotCQkJCQkvLyBBZGQgY2FsbGJhY2sgbWFudWFsbHkKLQkJCQkJdXJsICs9ICgvXD8vLnRlc3QoIHVybCApID8gIiYiIDogIj8iKSArIHMuanNvbnAgKyAiPSIgKyBqc29ucENhbGxiYWNrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXMudXJsID0gdXJsOwotCQlzLmRhdGEgPSBkYXRhOwotCi0JCS8vIEluc3RhbGwgY2FsbGJhY2sKLQkJd2luZG93WyBqc29ucENhbGxiYWNrIF0gPSBmdW5jdGlvbiggcmVzcG9uc2UgKSB7Ci0JCQlyZXNwb25zZUNvbnRhaW5lciA9IFsgcmVzcG9uc2UgXTsKLQkJfTsKLQotCQkvLyBDbGVhbi11cCBmdW5jdGlvbgotCQlqcVhIUi5hbHdheXMoZnVuY3Rpb24oKSB7Ci0JCQkvLyBTZXQgY2FsbGJhY2sgYmFjayB0byBwcmV2aW91cyB2YWx1ZQotCQkJd2luZG93WyBqc29ucENhbGxiYWNrIF0gPSBwcmV2aW91czsKLQkJCS8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZQotCQkJaWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcHJldmlvdXMgKSApIHsKLQkJCQl3aW5kb3dbIGpzb25wQ2FsbGJhY2sgXSggcmVzcG9uc2VDb250YWluZXJbIDAgXSApOwotCQkJfQotCQl9KTsKLQotCQkvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uCi0JCXMuY29udmVydGVyc1sic2NyaXB0IGpzb24iXSA9IGZ1bmN0aW9uKCkgewotCQkJaWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7Ci0JCQkJalF1ZXJ5LmVycm9yKCBqc29ucENhbGxiYWNrICsgIiB3YXMgbm90IGNhbGxlZCIgKTsKLQkJCX0KLQkJCXJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdOwotCQl9OwotCi0JCS8vIGZvcmNlIGpzb24gZGF0YVR5cGUKLQkJcy5kYXRhVHlwZXNbIDAgXSA9ICJqc29uIjsKLQotCQkvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKLQkJcmV0dXJuICJzY3JpcHQiOwotCX0KLX0pOwotCi0KLQotCi0vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZQotalF1ZXJ5LmFqYXhTZXR1cCh7Ci0JYWNjZXB0czogewotCQlzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIKLQl9LAotCWNvbnRlbnRzOiB7Ci0JCXNjcmlwdDogL2phdmFzY3JpcHR8ZWNtYXNjcmlwdC8KLQl9LAotCWNvbnZlcnRlcnM6IHsKLQkJInRleHQgc2NyaXB0IjogZnVuY3Rpb24oIHRleHQgKSB7Ci0JCQlqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApOwotCQkJcmV0dXJuIHRleHQ7Ci0JCX0KLQl9Ci19KTsKLQotLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBnbG9iYWwKLWpRdWVyeS5hamF4UHJlZmlsdGVyKCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7Ci0JaWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7Ci0JCXMuY2FjaGUgPSBmYWxzZTsKLQl9Ci0JaWYgKCBzLmNyb3NzRG9tYWluICkgewotCQlzLnR5cGUgPSAiR0VUIjsKLQkJcy5nbG9iYWwgPSBmYWxzZTsKLQl9Ci19KTsKLQotLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0Ci1qUXVlcnkuYWpheFRyYW5zcG9ydCggInNjcmlwdCIsIGZ1bmN0aW9uKHMpIHsKLQotCS8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMKLQlpZiAoIHMuY3Jvc3NEb21haW4gKSB7Ci0KLQkJdmFyIHNjcmlwdCwKLQkJCWhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiaGVhZCIgKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Ci0KLQkJcmV0dXJuIHsKLQotCQkJc2VuZDogZnVuY3Rpb24oIF8sIGNhbGxiYWNrICkgewotCi0JCQkJc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNjcmlwdCIgKTsKLQotCQkJCXNjcmlwdC5hc3luYyA9ICJhc3luYyI7Ci0KLQkJCQlpZiAoIHMuc2NyaXB0Q2hhcnNldCApIHsKLQkJCQkJc2NyaXB0LmNoYXJzZXQgPSBzLnNjcmlwdENoYXJzZXQ7Ci0JCQkJfQotCi0JCQkJc2NyaXB0LnNyYyA9IHMudXJsOwotCi0JCQkJLy8gQXR0YWNoIGhhbmRsZXJzIGZvciBhbGwgYnJvd3NlcnMKLQkJCQlzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkgewotCi0JCQkJCWlmICggaXNBYm9ydCB8fCAhc2NyaXB0LnJlYWR5U3RhdGUgfHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdCggc2NyaXB0LnJlYWR5U3RhdGUgKSApIHsKLQotCQkJCQkJLy8gSGFuZGxlIG1lbW9yeSBsZWFrIGluIElFCi0JCQkJCQlzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7Ci0KLQkJCQkJCS8vIFJlbW92ZSB0aGUgc2NyaXB0Ci0JCQkJCQlpZiAoIGhlYWQgJiYgc2NyaXB0LnBhcmVudE5vZGUgKSB7Ci0JCQkJCQkJaGVhZC5yZW1vdmVDaGlsZCggc2NyaXB0ICk7Ci0JCQkJCQl9Ci0KLQkJCQkJCS8vIERlcmVmZXJlbmNlIHRoZSBzY3JpcHQKLQkJCQkJCXNjcmlwdCA9IHVuZGVmaW5lZDsKLQotCQkJCQkJLy8gQ2FsbGJhY2sgaWYgbm90IGFib3J0Ci0JCQkJCQlpZiAoICFpc0Fib3J0ICkgewotCQkJCQkJCWNhbGxiYWNrKCAyMDAsICJzdWNjZXNzIiApOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfTsKLQkJCQkvLyBVc2UgaW5zZXJ0QmVmb3JlIGluc3RlYWQgb2YgYXBwZW5kQ2hpbGQgIHRvIGNpcmN1bXZlbnQgYW4gSUU2IGJ1Zy4KLQkJCQkvLyBUaGlzIGFyaXNlcyB3aGVuIGEgYmFzZSBub2RlIGlzIHVzZWQgKCMyNzA5IGFuZCAjNDM3OCkuCi0JCQkJaGVhZC5pbnNlcnRCZWZvcmUoIHNjcmlwdCwgaGVhZC5maXJzdENoaWxkICk7Ci0JCQl9LAotCi0JCQlhYm9ydDogZnVuY3Rpb24oKSB7Ci0JCQkJaWYgKCBzY3JpcHQgKSB7Ci0JCQkJCXNjcmlwdC5vbmxvYWQoIDAsIDEgKTsKLQkJCQl9Ci0JCQl9Ci0JCX07Ci0JfQotfSk7Ci0KLQotCi0KLXZhciAvLyAjNTI4MDogSW50ZXJuZXQgRXhwbG9yZXIgd2lsbCBrZWVwIGNvbm5lY3Rpb25zIGFsaXZlIGlmIHdlIGRvbid0IGFib3J0IG9uIHVubG9hZAotCXhock9uVW5sb2FkQWJvcnQgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCA/IGZ1bmN0aW9uKCkgewotCQkvLyBBYm9ydCBhbGwgcGVuZGluZyByZXF1ZXN0cwotCQlmb3IgKCB2YXIga2V5IGluIHhockNhbGxiYWNrcyApIHsKLQkJCXhockNhbGxiYWNrc1sga2V5IF0oIDAsIDEgKTsKLQkJfQotCX0gOiBmYWxzZSwKLQl4aHJJZCA9IDAsCi0JeGhyQ2FsbGJhY2tzOwotCi0vLyBGdW5jdGlvbnMgdG8gY3JlYXRlIHhocnMKLWZ1bmN0aW9uIGNyZWF0ZVN0YW5kYXJkWEhSKCkgewotCXRyeSB7Ci0JCXJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7Ci0JfSBjYXRjaCggZSApIHt9Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZUFjdGl2ZVhIUigpIHsKLQl0cnkgewotCQlyZXR1cm4gbmV3IHdpbmRvdy5BY3RpdmVYT2JqZWN0KCAiTWljcm9zb2Z0LlhNTEhUVFAiICk7Ci0JfSBjYXRjaCggZSApIHt9Ci19Ci0KLS8vIENyZWF0ZSB0aGUgcmVxdWVzdCBvYmplY3QKLS8vIChUaGlzIGlzIHN0aWxsIGF0dGFjaGVkIHRvIGFqYXhTZXR0aW5ncyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkKLWpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gd2luZG93LkFjdGl2ZVhPYmplY3QgPwotCS8qIE1pY3Jvc29mdCBmYWlsZWQgdG8gcHJvcGVybHkKLQkgKiBpbXBsZW1lbnQgdGhlIFhNTEh0dHBSZXF1ZXN0IGluIElFNyAoY2FuJ3QgcmVxdWVzdCBsb2NhbCBmaWxlcyksCi0JICogc28gd2UgdXNlIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4gaXQgaXMgYXZhaWxhYmxlCi0JICogQWRkaXRpb25hbGx5IFhNTEh0dHBSZXF1ZXN0IGNhbiBiZSBkaXNhYmxlZCBpbiBJRTcvSUU4IHNvCi0JICogd2UgbmVlZCBhIGZhbGxiYWNrLgotCSAqLwotCWZ1bmN0aW9uKCkgewotCQlyZXR1cm4gIXRoaXMuaXNMb2NhbCAmJiBjcmVhdGVTdGFuZGFyZFhIUigpIHx8IGNyZWF0ZUFjdGl2ZVhIUigpOwotCX0gOgotCS8vIEZvciBhbGwgb3RoZXIgYnJvd3NlcnMsIHVzZSB0aGUgc3RhbmRhcmQgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0Ci0JY3JlYXRlU3RhbmRhcmRYSFI7Ci0KLS8vIERldGVybWluZSBzdXBwb3J0IHByb3BlcnRpZXMKLShmdW5jdGlvbiggeGhyICkgewotCWpRdWVyeS5leHRlbmQoIGpRdWVyeS5zdXBwb3J0LCB7Ci0JCWFqYXg6ICEheGhyLAotCQljb3JzOiAhIXhociAmJiAoICJ3aXRoQ3JlZGVudGlhbHMiIGluIHhociApCi0JfSk7Ci19KSggalF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKSApOwotCi0vLyBDcmVhdGUgdHJhbnNwb3J0IGlmIHRoZSBicm93c2VyIGNhbiBwcm92aWRlIGFuIHhocgotaWYgKCBqUXVlcnkuc3VwcG9ydC5hamF4ICkgewotCi0JalF1ZXJ5LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oIHMgKSB7Ci0JCS8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3QKLQkJaWYgKCAhcy5jcm9zc0RvbWFpbiB8fCBqUXVlcnkuc3VwcG9ydC5jb3JzICkgewotCi0JCQl2YXIgY2FsbGJhY2s7Ci0KLQkJCXJldHVybiB7Ci0JCQkJc2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkgewotCi0JCQkJCS8vIEdldCBhIG5ldyB4aHIKLQkJCQkJdmFyIHhociA9IHMueGhyKCksCi0JCQkJCQloYW5kbGUsCi0JCQkJCQlpOwotCi0JCQkJCS8vIE9wZW4gdGhlIHNvY2tldAotCQkJCQkvLyBQYXNzaW5nIG51bGwgdXNlcm5hbWUsIGdlbmVyYXRlcyBhIGxvZ2luIHBvcHVwIG9uIE9wZXJhICgjMjg2NSkKLQkJCQkJaWYgKCBzLnVzZXJuYW1lICkgewotCQkJCQkJeGhyLm9wZW4oIHMudHlwZSwgcy51cmwsIHMuYXN5bmMsIHMudXNlcm5hbWUsIHMucGFzc3dvcmQgKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXhoci5vcGVuKCBzLnR5cGUsIHMudXJsLCBzLmFzeW5jICk7Ci0JCQkJCX0KLQotCQkJCQkvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkCi0JCQkJCWlmICggcy54aHJGaWVsZHMgKSB7Ci0JCQkJCQlmb3IgKCBpIGluIHMueGhyRmllbGRzICkgewotCQkJCQkJCXhoclsgaSBdID0gcy54aHJGaWVsZHNbIGkgXTsKLQkJCQkJCX0KLQkJCQkJfQotCi0JCQkJCS8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWQKLQkJCQkJaWYgKCBzLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkgewotCQkJCQkJeGhyLm92ZXJyaWRlTWltZVR5cGUoIHMubWltZVR5cGUgKTsKLQkJCQkJfQotCi0JCQkJCS8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyCi0JCQkJCS8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmUKLQkJCQkJLy8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS4KLQkJCQkJLy8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApCi0JCQkJCS8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLgotCQkJCQlpZiAoICFzLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyJYLVJlcXVlc3RlZC1XaXRoIl0gKSB7Ci0JCQkJCQloZWFkZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7Ci0JCQkJCX0KLQotCQkJCQkvLyBOZWVkIGFuIGV4dHJhIHRyeS9jYXRjaCBmb3IgY3Jvc3MgZG9tYWluIHJlcXVlc3RzIGluIEZpcmVmb3ggMwotCQkJCQl0cnkgewotCQkJCQkJZm9yICggaSBpbiBoZWFkZXJzICkgewotCQkJCQkJCXhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTsKLQkJCQkJCX0KLQkJCQkJfSBjYXRjaCggXyApIHt9Ci0KLQkJCQkJLy8gRG8gc2VuZCB0aGUgcmVxdWVzdAotCQkJCQkvLyBUaGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24gd2hpY2ggaXMgYWN0dWFsbHkKLQkJCQkJLy8gaGFuZGxlZCBpbiBqUXVlcnkuYWpheCAoc28gbm8gdHJ5L2NhdGNoIGhlcmUpCi0JCQkJCXhoci5zZW5kKCAoIHMuaGFzQ29udGVudCAmJiBzLmRhdGEgKSB8fCBudWxsICk7Ci0KLQkJCQkJLy8gTGlzdGVuZXIKLQkJCQkJY2FsbGJhY2sgPSBmdW5jdGlvbiggXywgaXNBYm9ydCApIHsKLQotCQkJCQkJdmFyIHN0YXR1cywKLQkJCQkJCQlzdGF0dXNUZXh0LAotCQkJCQkJCXJlc3BvbnNlSGVhZGVycywKLQkJCQkJCQlyZXNwb25zZXMsCi0JCQkJCQkJeG1sOwotCi0JCQkJCQkvLyBGaXJlZm94IHRocm93cyBleGNlcHRpb25zIHdoZW4gYWNjZXNzaW5nIHByb3BlcnRpZXMKLQkJCQkJCS8vIG9mIGFuIHhociB3aGVuIGEgbmV0d29yayBlcnJvciBvY2N1cmVkCi0JCQkJCQkvLyBodHRwOi8vaGVscGZ1bC5rbm9icy1kaWFscy5jb20vaW5kZXgucGhwL0NvbXBvbmVudF9yZXR1cm5lZF9mYWlsdXJlX2NvZGU6XzB4ODAwNDAxMTFfKE5TX0VSUk9SX05PVF9BVkFJTEFCTEUpCi0JCQkJCQl0cnkgewotCi0JCQkJCQkJLy8gV2FzIG5ldmVyIGNhbGxlZCBhbmQgaXMgYWJvcnRlZCBvciBjb21wbGV0ZQotCQkJCQkJCWlmICggY2FsbGJhY2sgJiYgKCBpc0Fib3J0IHx8IHhoci5yZWFkeVN0YXRlID09PSA0ICkgKSB7Ci0KLQkJCQkJCQkJLy8gT25seSBjYWxsZWQgb25jZQotCQkJCQkJCQljYWxsYmFjayA9IHVuZGVmaW5lZDsKLQotCQkJCQkJCQkvLyBEbyBub3Qga2VlcCBhcyBhY3RpdmUgYW55bW9yZQotCQkJCQkJCQlpZiAoIGhhbmRsZSApIHsKLQkJCQkJCQkJCXhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBqUXVlcnkubm9vcDsKLQkJCQkJCQkJCWlmICggeGhyT25VbmxvYWRBYm9ydCApIHsKLQkJCQkJCQkJCQlkZWxldGUgeGhyQ2FsbGJhY2tzWyBoYW5kbGUgXTsKLQkJCQkJCQkJCX0KLQkJCQkJCQkJfQotCi0JCQkJCQkJCS8vIElmIGl0J3MgYW4gYWJvcnQKLQkJCQkJCQkJaWYgKCBpc0Fib3J0ICkgewotCQkJCQkJCQkJLy8gQWJvcnQgaXQgbWFudWFsbHkgaWYgbmVlZGVkCi0JCQkJCQkJCQlpZiAoIHhoci5yZWFkeVN0YXRlICE9PSA0ICkgewotCQkJCQkJCQkJCXhoci5hYm9ydCgpOwotCQkJCQkJCQkJfQotCQkJCQkJCQl9IGVsc2UgewotCQkJCQkJCQkJc3RhdHVzID0geGhyLnN0YXR1czsKLQkJCQkJCQkJCXJlc3BvbnNlSGVhZGVycyA9IHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKLQkJCQkJCQkJCXJlc3BvbnNlcyA9IHt9OwotCQkJCQkJCQkJeG1sID0geGhyLnJlc3BvbnNlWE1MOwotCi0JCQkJCQkJCQkvLyBDb25zdHJ1Y3QgcmVzcG9uc2UgbGlzdAotCQkJCQkJCQkJaWYgKCB4bWwgJiYgeG1sLmRvY3VtZW50RWxlbWVudCAvKiAjNDk1OCAqLyApIHsKLQkJCQkJCQkJCQlyZXNwb25zZXMueG1sID0geG1sOwotCQkJCQkJCQkJfQotCQkJCQkJCQkJcmVzcG9uc2VzLnRleHQgPSB4aHIucmVzcG9uc2VUZXh0OwotCi0JCQkJCQkJCQkvLyBGaXJlZm94IHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKLQkJCQkJCQkJCS8vIHN0YXR1c1RleHQgZm9yIGZhdWx0eSBjcm9zcy1kb21haW4gcmVxdWVzdHMKLQkJCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCQkJc3RhdHVzVGV4dCA9IHhoci5zdGF0dXNUZXh0OwotCQkJCQkJCQkJfSBjYXRjaCggZSApIHsKLQkJCQkJCQkJCQkvLyBXZSBub3JtYWxpemUgd2l0aCBXZWJraXQgZ2l2aW5nIGFuIGVtcHR5IHN0YXR1c1RleHQKLQkJCQkJCQkJCQlzdGF0dXNUZXh0ID0gIiI7Ci0JCQkJCQkJCQl9Ci0KLQkJCQkJCQkJCS8vIEZpbHRlciBzdGF0dXMgZm9yIG5vbiBzdGFuZGFyZCBiZWhhdmlvcnMKLQotCQkJCQkJCQkJLy8gSWYgdGhlIHJlcXVlc3QgaXMgbG9jYWwgYW5kIHdlIGhhdmUgZGF0YTogYXNzdW1lIGEgc3VjY2VzcwotCQkJCQkJCQkJLy8gKHN1Y2Nlc3Mgd2l0aCBubyBkYXRhIHdvbid0IGdldCBub3RpZmllZCwgdGhhdCdzIHRoZSBiZXN0IHdlCi0JCQkJCQkJCQkvLyBjYW4gZG8gZ2l2ZW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbnMpCi0JCQkJCQkJCQlpZiAoICFzdGF0dXMgJiYgcy5pc0xvY2FsICYmICFzLmNyb3NzRG9tYWluICkgewotCQkJCQkJCQkJCXN0YXR1cyA9IHJlc3BvbnNlcy50ZXh0ID8gMjAwIDogNDA0OwotCQkJCQkJCQkJLy8gSUUgLSAjMTQ1MDogc29tZXRpbWVzIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDQKLQkJCQkJCQkJCX0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMTIyMyApIHsKLQkJCQkJCQkJCQlzdGF0dXMgPSAyMDQ7Ci0JCQkJCQkJCQl9Ci0JCQkJCQkJCX0KLQkJCQkJCQl9Ci0JCQkJCQl9IGNhdGNoKCBmaXJlZm94QWNjZXNzRXhjZXB0aW9uICkgewotCQkJCQkJCWlmICggIWlzQWJvcnQgKSB7Ci0JCQkJCQkJCWNvbXBsZXRlKCAtMSwgZmlyZWZveEFjY2Vzc0V4Y2VwdGlvbiApOwotCQkJCQkJCX0KLQkJCQkJCX0KLQotCQkJCQkJLy8gQ2FsbCBjb21wbGV0ZSBpZiBuZWVkZWQKLQkJCQkJCWlmICggcmVzcG9uc2VzICkgewotCQkJCQkJCWNvbXBsZXRlKCBzdGF0dXMsIHN0YXR1c1RleHQsIHJlc3BvbnNlcywgcmVzcG9uc2VIZWFkZXJzICk7Ci0JCQkJCQl9Ci0JCQkJCX07Ci0KLQkJCQkJLy8gaWYgd2UncmUgaW4gc3luYyBtb2RlIG9yIGl0J3MgaW4gY2FjaGUKLQkJCQkJLy8gYW5kIGhhcyBiZWVuIHJldHJpZXZlZCBkaXJlY3RseSAoSUU2ICYgSUU3KQotCQkJCQkvLyB3ZSBuZWVkIHRvIG1hbnVhbGx5IGZpcmUgdGhlIGNhbGxiYWNrCi0JCQkJCWlmICggIXMuYXN5bmMgfHwgeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7Ci0JCQkJCQljYWxsYmFjaygpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJaGFuZGxlID0gKyt4aHJJZDsKLQkJCQkJCWlmICggeGhyT25VbmxvYWRBYm9ydCApIHsKLQkJCQkJCQkvLyBDcmVhdGUgdGhlIGFjdGl2ZSB4aHJzIGNhbGxiYWNrcyBsaXN0IGlmIG5lZWRlZAotCQkJCQkJCS8vIGFuZCBhdHRhY2ggdGhlIHVubG9hZCBoYW5kbGVyCi0JCQkJCQkJaWYgKCAheGhyQ2FsbGJhY2tzICkgewotCQkJCQkJCQl4aHJDYWxsYmFja3MgPSB7fTsKLQkJCQkJCQkJalF1ZXJ5KCB3aW5kb3cgKS51bmxvYWQoIHhock9uVW5sb2FkQWJvcnQgKTsKLQkJCQkJCQl9Ci0JCQkJCQkJLy8gQWRkIHRvIGxpc3Qgb2YgYWN0aXZlIHhocnMgY2FsbGJhY2tzCi0JCQkJCQkJeGhyQ2FsbGJhY2tzWyBoYW5kbGUgXSA9IGNhbGxiYWNrOwotCQkJCQkJfQotCQkJCQkJeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGNhbGxiYWNrOwotCQkJCQl9Ci0JCQkJfSwKLQotCQkJCWFib3J0OiBmdW5jdGlvbigpIHsKLQkJCQkJaWYgKCBjYWxsYmFjayApIHsKLQkJCQkJCWNhbGxiYWNrKDAsMSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9OwotCQl9Ci0JfSk7Ci19Ci0KLQotCi0KLXZhciBlbGVtZGlzcGxheSA9IHt9LAotCWlmcmFtZSwgaWZyYW1lRG9jLAotCXJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLAotCXJmeG51bSA9IC9eKFsrXC1dPSk/KFtcZCsuXC1dKykoW2EteiVdKikkL2ksCi0JdGltZXJJZCwKLQlmeEF0dHJzID0gWwotCQkvLyBoZWlnaHQgYW5pbWF0aW9ucwotCQlbICJoZWlnaHQiLCAibWFyZ2luVG9wIiwgIm1hcmdpbkJvdHRvbSIsICJwYWRkaW5nVG9wIiwgInBhZGRpbmdCb3R0b20iIF0sCi0JCS8vIHdpZHRoIGFuaW1hdGlvbnMKLQkJWyAid2lkdGgiLCAibWFyZ2luTGVmdCIsICJtYXJnaW5SaWdodCIsICJwYWRkaW5nTGVmdCIsICJwYWRkaW5nUmlnaHQiIF0sCi0JCS8vIG9wYWNpdHkgYW5pbWF0aW9ucwotCQlbICJvcGFjaXR5IiBdCi0JXSwKLQlmeE5vdzsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0Jc2hvdzogZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewotCQl2YXIgZWxlbSwgZGlzcGxheTsKLQotCQlpZiAoIHNwZWVkIHx8IHNwZWVkID09PSAwICkgewotCQkJcmV0dXJuIHRoaXMuYW5pbWF0ZSggZ2VuRngoInNob3ciLCAzKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKLQotCQl9IGVsc2UgewotCQkJZm9yICggdmFyIGkgPSAwLCBqID0gdGhpcy5sZW5ndGg7IGkgPCBqOyBpKysgKSB7Ci0JCQkJZWxlbSA9IHRoaXNbIGkgXTsKLQotCQkJCWlmICggZWxlbS5zdHlsZSApIHsKLQkJCQkJZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTsKLQotCQkJCQkvLyBSZXNldCB0aGUgaW5saW5lIGRpc3BsYXkgb2YgdGhpcyBlbGVtZW50IHRvIGxlYXJuIGlmIGl0IGlzCi0JCQkJCS8vIGJlaW5nIGhpZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3QKLQkJCQkJaWYgKCAhalF1ZXJ5Ll9kYXRhKGVsZW0sICJvbGRkaXNwbGF5IikgJiYgZGlzcGxheSA9PT0gIm5vbmUiICkgewotCQkJCQkJZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSA9ICIiOwotCQkJCQl9Ci0KLQkJCQkJLy8gU2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdpdGggZGlzcGxheTogbm9uZQotCQkJCQkvLyBpbiBhIHN0eWxlc2hlZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1bHQgYnJvd3NlciBzdHlsZSBpcwotCQkJCQkvLyBmb3Igc3VjaCBhbiBlbGVtZW50Ci0JCQkJCWlmICggZGlzcGxheSA9PT0gIiIgJiYgalF1ZXJ5LmNzcyhlbGVtLCAiZGlzcGxheSIpID09PSAibm9uZSIgKSB7Ci0JCQkJCQlqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNwbGF5IiwgZGVmYXVsdERpc3BsYXkoZWxlbS5ub2RlTmFtZSkgKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQkJLy8gU2V0IHRoZSBkaXNwbGF5IG9mIG1vc3Qgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AKLQkJCS8vIHRvIGF2b2lkIHRoZSBjb25zdGFudCByZWZsb3cKLQkJCWZvciAoIGkgPSAwOyBpIDwgajsgaSsrICkgewotCQkJCWVsZW0gPSB0aGlzWyBpIF07Ci0KLQkJCQlpZiAoIGVsZW0uc3R5bGUgKSB7Ci0JCQkJCWRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7Ci0KLQkJCQkJaWYgKCBkaXNwbGF5ID09PSAiIiB8fCBkaXNwbGF5ID09PSAibm9uZSIgKSB7Ci0JCQkJCQllbGVtLnN0eWxlLmRpc3BsYXkgPSBqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNwbGF5IiApIHx8ICIiOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQlyZXR1cm4gdGhpczsKLQkJfQotCX0sCi0KLQloaWRlOiBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7Ci0JCWlmICggc3BlZWQgfHwgc3BlZWQgPT09IDAgKSB7Ci0JCQlyZXR1cm4gdGhpcy5hbmltYXRlKCBnZW5GeCgiaGlkZSIsIDMpLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayk7Ci0KLQkJfSBlbHNlIHsKLQkJCXZhciBlbGVtLCBkaXNwbGF5LAotCQkJCWkgPSAwLAotCQkJCWogPSB0aGlzLmxlbmd0aDsKLQotCQkJZm9yICggOyBpIDwgajsgaSsrICkgewotCQkJCWVsZW0gPSB0aGlzW2ldOwotCQkJCWlmICggZWxlbS5zdHlsZSApIHsKLQkJCQkJZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApOwotCi0JCQkJCWlmICggZGlzcGxheSAhPT0gIm5vbmUiICYmICFqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNwbGF5IiApICkgewotCQkJCQkJalF1ZXJ5Ll9kYXRhKCBlbGVtLCAib2xkZGlzcGxheSIsIGRpc3BsYXkgKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQkJLy8gU2V0IHRoZSBkaXNwbGF5IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wCi0JCQkvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQgcmVmbG93Ci0JCQlmb3IgKCBpID0gMDsgaSA8IGo7IGkrKyApIHsKLQkJCQlpZiAoIHRoaXNbaV0uc3R5bGUgKSB7Ci0JCQkJCXRoaXNbaV0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLQkJCQl9Ci0JCQl9Ci0KLQkJCXJldHVybiB0aGlzOwotCQl9Ci0JfSwKLQotCS8vIFNhdmUgdGhlIG9sZCB0b2dnbGUgZnVuY3Rpb24KLQlfdG9nZ2xlOiBqUXVlcnkuZm4udG9nZ2xlLAotCi0JdG9nZ2xlOiBmdW5jdGlvbiggZm4sIGZuMiwgY2FsbGJhY2sgKSB7Ci0JCXZhciBib29sID0gdHlwZW9mIGZuID09PSAiYm9vbGVhbiI7Ci0KLQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbihmbikgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oZm4yKSApIHsKLQkJCXRoaXMuX3RvZ2dsZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0KLQkJfSBlbHNlIGlmICggZm4gPT0gbnVsbCB8fCBib29sICkgewotCQkJdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotCQkJCXZhciBzdGF0ZSA9IGJvb2wgPyBmbiA6IGpRdWVyeSh0aGlzKS5pcygiOmhpZGRlbiIpOwotCQkJCWpRdWVyeSh0aGlzKVsgc3RhdGUgPyAic2hvdyIgOiAiaGlkZSIgXSgpOwotCQkJfSk7Ci0KLQkJfSBlbHNlIHsKLQkJCXRoaXMuYW5pbWF0ZShnZW5GeCgidG9nZ2xlIiwgMyksIGZuLCBmbjIsIGNhbGxiYWNrKTsKLQkJfQotCi0JCXJldHVybiB0aGlzOwotCX0sCi0KLQlmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7Ci0JCXJldHVybiB0aGlzLmZpbHRlcigiOmhpZGRlbiIpLmNzcygib3BhY2l0eSIsIDApLnNob3coKS5lbmQoKQotCQkJCQkuYW5pbWF0ZSh7b3BhY2l0eTogdG99LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayk7Ci0JfSwKLQotCWFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKLQkJdmFyIG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKLQotCQlpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICkgKSB7Ci0JCQlyZXR1cm4gdGhpcy5lYWNoKCBvcHRhbGwuY29tcGxldGUsIFsgZmFsc2UgXSApOwotCQl9Ci0KLQkJLy8gRG8gbm90IGNoYW5nZSByZWZlcmVuY2VkIHByb3BlcnRpZXMgYXMgcGVyLXByb3BlcnR5IGVhc2luZyB3aWxsIGJlIGxvc3QKLQkJcHJvcCA9IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICk7Ci0KLQkJZnVuY3Rpb24gZG9BbmltYXRpb24oKSB7Ci0JCQkvLyBYWFggJ3RoaXMnIGRvZXMgbm90IGFsd2F5cyBoYXZlIGEgbm9kZU5hbWUgd2hlbiBydW5uaW5nIHRoZQotCQkJLy8gdGVzdCBzdWl0ZQotCi0JCQlpZiAoIG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgKSB7Ci0JCQkJalF1ZXJ5Ll9tYXJrKCB0aGlzICk7Ci0JCQl9Ci0KLQkJCXZhciBvcHQgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0YWxsICksCi0JCQkJaXNFbGVtZW50ID0gdGhpcy5ub2RlVHlwZSA9PT0gMSwKLQkJCQloaWRkZW4gPSBpc0VsZW1lbnQgJiYgalF1ZXJ5KHRoaXMpLmlzKCI6aGlkZGVuIiksCi0JCQkJbmFtZSwgdmFsLCBwLCBlLAotCQkJCXBhcnRzLCBzdGFydCwgZW5kLCB1bml0LAotCQkJCW1ldGhvZDsKLQotCQkJLy8gd2lsbCBzdG9yZSBwZXIgcHJvcGVydHkgZWFzaW5nIGFuZCBiZSB1c2VkIHRvIGRldGVybWluZSB3aGVuIGFuIGFuaW1hdGlvbiBpcyBjb21wbGV0ZQotCQkJb3B0LmFuaW1hdGVkUHJvcGVydGllcyA9IHt9OwotCi0JCQlmb3IgKCBwIGluIHByb3AgKSB7Ci0KLQkJCQkvLyBwcm9wZXJ0eSBuYW1lIG5vcm1hbGl6YXRpb24KLQkJCQluYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggcCApOwotCQkJCWlmICggcCAhPT0gbmFtZSApIHsKLQkJCQkJcHJvcFsgbmFtZSBdID0gcHJvcFsgcCBdOwotCQkJCQlkZWxldGUgcHJvcFsgcCBdOwotCQkJCX0KLQotCQkJCXZhbCA9IHByb3BbIG5hbWUgXTsKLQotCQkJCS8vIGVhc2luZyByZXNvbHV0aW9uOiBwZXIgcHJvcGVydHkgPiBvcHQuc3BlY2lhbEVhc2luZyA+IG9wdC5lYXNpbmcgPiAnc3dpbmcnIChkZWZhdWx0KQotCQkJCWlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkgewotCQkJCQlvcHQuYW5pbWF0ZWRQcm9wZXJ0aWVzWyBuYW1lIF0gPSB2YWxbIDEgXTsKLQkJCQkJdmFsID0gcHJvcFsgbmFtZSBdID0gdmFsWyAwIF07Ci0JCQkJfSBlbHNlIHsKLQkJCQkJb3B0LmFuaW1hdGVkUHJvcGVydGllc1sgbmFtZSBdID0gb3B0LnNwZWNpYWxFYXNpbmcgJiYgb3B0LnNwZWNpYWxFYXNpbmdbIG5hbWUgXSB8fCBvcHQuZWFzaW5nIHx8ICdzd2luZyc7Ci0JCQkJfQotCi0JCQkJaWYgKCB2YWwgPT09ICJoaWRlIiAmJiBoaWRkZW4gfHwgdmFsID09PSAic2hvdyIgJiYgIWhpZGRlbiApIHsKLQkJCQkJcmV0dXJuIG9wdC5jb21wbGV0ZS5jYWxsKCB0aGlzICk7Ci0JCQkJfQotCi0JCQkJaWYgKCBpc0VsZW1lbnQgJiYgKCBuYW1lID09PSAiaGVpZ2h0IiB8fCBuYW1lID09PSAid2lkdGgiICkgKSB7Ci0JCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgc25lYWtzIG91dAotCQkJCQkvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90Ci0JCQkJCS8vIGNoYW5nZSB0aGUgb3ZlcmZsb3cgYXR0cmlidXRlIHdoZW4gb3ZlcmZsb3dYIGFuZAotCQkJCQkvLyBvdmVyZmxvd1kgYXJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZQotCQkJCQlvcHQub3ZlcmZsb3cgPSBbIHRoaXMuc3R5bGUub3ZlcmZsb3csIHRoaXMuc3R5bGUub3ZlcmZsb3dYLCB0aGlzLnN0eWxlLm92ZXJmbG93WSBdOwotCi0JCQkJCS8vIFNldCBkaXNwbGF5IHByb3BlcnR5IHRvIGlubGluZS1ibG9jayBmb3IgaGVpZ2h0L3dpZHRoCi0JCQkJCS8vIGFuaW1hdGlvbnMgb24gaW5saW5lIGVsZW1lbnRzIHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQgYW5pbWF0ZWQKLQkJCQkJaWYgKCBqUXVlcnkuY3NzKCB0aGlzLCAiZGlzcGxheSIgKSA9PT0gImlubGluZSIgJiYKLQkJCQkJCQlqUXVlcnkuY3NzKCB0aGlzLCAiZmxvYXQiICkgPT09ICJub25lIiApIHsKLQotCQkJCQkJLy8gaW5saW5lLWxldmVsIGVsZW1lbnRzIGFjY2VwdCBpbmxpbmUtYmxvY2s7Ci0JCQkJCQkvLyBibG9jay1sZXZlbCBlbGVtZW50cyBuZWVkIHRvIGJlIGlubGluZSB3aXRoIGxheW91dAotCQkJCQkJaWYgKCAhalF1ZXJ5LnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCB8fCBkZWZhdWx0RGlzcGxheSggdGhpcy5ub2RlTmFtZSApID09PSAiaW5saW5lIiApIHsKLQkJCQkJCQl0aGlzLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKLQotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQl0aGlzLnN0eWxlLnpvb20gPSAxOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoIG9wdC5vdmVyZmxvdyAhPSBudWxsICkgewotCQkJCXRoaXMuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKLQkJCX0KLQotCQkJZm9yICggcCBpbiBwcm9wICkgewotCQkJCWUgPSBuZXcgalF1ZXJ5LmZ4KCB0aGlzLCBvcHQsIHAgKTsKLQkJCQl2YWwgPSBwcm9wWyBwIF07Ci0KLQkJCQlpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbCApICkgewotCi0JCQkJCS8vIFRyYWNrcyB3aGV0aGVyIHRvIHNob3cgb3IgaGlkZSBiYXNlZCBvbiBwcml2YXRlCi0JCQkJCS8vIGRhdGEgYXR0YWNoZWQgdG8gdGhlIGVsZW1lbnQKLQkJCQkJbWV0aG9kID0galF1ZXJ5Ll9kYXRhKCB0aGlzLCAidG9nZ2xlIiArIHAgKSB8fCAoIHZhbCA9PT0gInRvZ2dsZSIgPyBoaWRkZW4gPyAic2hvdyIgOiAiaGlkZSIgOiAwICk7Ci0JCQkJCWlmICggbWV0aG9kICkgewotCQkJCQkJalF1ZXJ5Ll9kYXRhKCB0aGlzLCAidG9nZ2xlIiArIHAsIG1ldGhvZCA9PT0gInNob3ciID8gImhpZGUiIDogInNob3ciICk7Ci0JCQkJCQllWyBtZXRob2QgXSgpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJZVsgdmFsIF0oKTsKLQkJCQkJfQotCi0JCQkJfSBlbHNlIHsKLQkJCQkJcGFydHMgPSByZnhudW0uZXhlYyggdmFsICk7Ci0JCQkJCXN0YXJ0ID0gZS5jdXIoKTsKLQotCQkJCQlpZiAoIHBhcnRzICkgewotCQkJCQkJZW5kID0gcGFyc2VGbG9hdCggcGFydHNbMl0gKTsKLQkJCQkJCXVuaXQgPSBwYXJ0c1szXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHAgXSA/ICIiIDogInB4IiApOwotCi0JCQkJCQkvLyBXZSBuZWVkIHRvIGNvbXB1dGUgc3RhcnRpbmcgdmFsdWUKLQkJCQkJCWlmICggdW5pdCAhPT0gInB4IiApIHsKLQkJCQkJCQlqUXVlcnkuc3R5bGUoIHRoaXMsIHAsIChlbmQgfHwgMSkgKyB1bml0KTsKLQkJCQkJCQlzdGFydCA9ICggKGVuZCB8fCAxKSAvIGUuY3VyKCkgKSAqIHN0YXJ0OwotCQkJCQkJCWpRdWVyeS5zdHlsZSggdGhpcywgcCwgc3RhcnQgKyB1bml0KTsKLQkJCQkJCX0KLQotCQkJCQkJLy8gSWYgYSArPS8tPSB0b2tlbiB3YXMgcHJvdmlkZWQsIHdlJ3JlIGRvaW5nIGEgcmVsYXRpdmUgYW5pbWF0aW9uCi0JCQkJCQlpZiAoIHBhcnRzWzFdICkgewotCQkJCQkJCWVuZCA9ICggKHBhcnRzWyAxIF0gPT09ICItPSIgPyAtMSA6IDEpICogZW5kICkgKyBzdGFydDsKLQkJCQkJCX0KLQotCQkJCQkJZS5jdXN0b20oIHN0YXJ0LCBlbmQsIHVuaXQgKTsKLQotCQkJCQl9IGVsc2UgewotCQkJCQkJZS5jdXN0b20oIHN0YXJ0LCB2YWwsICIiICk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCS8vIEZvciBKUyBzdHJpY3QgY29tcGxpYW5jZQotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlyZXR1cm4gb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/Ci0JCQl0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOgotCQkJdGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApOwotCX0sCi0KLQlzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHsKLQkJaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7Ci0JCQlnb3RvRW5kID0gY2xlYXJRdWV1ZTsKLQkJCWNsZWFyUXVldWUgPSB0eXBlOwotCQkJdHlwZSA9IHVuZGVmaW5lZDsKLQkJfQotCQlpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFsc2UgKSB7Ci0JCQl0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7Ci0JCX0KLQotCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotCQkJdmFyIGluZGV4LAotCQkJCWhhZFRpbWVycyA9IGZhbHNlLAotCQkJCXRpbWVycyA9IGpRdWVyeS50aW1lcnMsCi0JCQkJZGF0YSA9IGpRdWVyeS5fZGF0YSggdGhpcyApOwotCi0JCQkvLyBjbGVhciBtYXJrZXIgY291bnRlcnMgaWYgd2Uga25vdyB0aGV5IHdvbid0IGJlCi0JCQlpZiAoICFnb3RvRW5kICkgewotCQkJCWpRdWVyeS5fdW5tYXJrKCB0cnVlLCB0aGlzICk7Ci0JCQl9Ci0KLQkJCWZ1bmN0aW9uIHN0b3BRdWV1ZSggZWxlbSwgZGF0YSwgaW5kZXggKSB7Ci0JCQkJdmFyIGhvb2tzID0gZGF0YVsgaW5kZXggXTsKLQkJCQlqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgaW5kZXgsIHRydWUgKTsKLQkJCQlob29rcy5zdG9wKCBnb3RvRW5kICk7Ci0JCQl9Ci0KLQkJCWlmICggdHlwZSA9PSBudWxsICkgewotCQkJCWZvciAoIGluZGV4IGluIGRhdGEgKSB7Ci0JCQkJCWlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgaW5kZXguaW5kZXhPZigiLnJ1biIpID09PSBpbmRleC5sZW5ndGggLSA0ICkgewotCQkJCQkJc3RvcFF1ZXVlKCB0aGlzLCBkYXRhLCBpbmRleCApOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIGlmICggZGF0YVsgaW5kZXggPSB0eXBlICsgIi5ydW4iIF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICl7Ci0JCQkJc3RvcFF1ZXVlKCB0aGlzLCBkYXRhLCBpbmRleCApOwotCQkJfQotCi0JCQlmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkgewotCQkJCWlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgKHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUpICkgewotCQkJCQlpZiAoIGdvdG9FbmQgKSB7Ci0KLQkJCQkJCS8vIGZvcmNlIHRoZSBuZXh0IHN0ZXAgdG8gYmUgdGhlIGxhc3QKLQkJCQkJCXRpbWVyc1sgaW5kZXggXSggdHJ1ZSApOwotCQkJCQl9IGVsc2UgewotCQkJCQkJdGltZXJzWyBpbmRleCBdLnNhdmVTdGF0ZSgpOwotCQkJCQl9Ci0JCQkJCWhhZFRpbWVycyA9IHRydWU7Ci0JCQkJCXRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7Ci0JCQkJfQotCQkJfQotCi0JCQkvLyBzdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkCi0JCQkvLyB0aW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoIHdpbGwgZGVxdWV1ZQotCQkJLy8gYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQKLQkJCWlmICggISggZ290b0VuZCAmJiBoYWRUaW1lcnMgKSApIHsKLQkJCQlqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwotCQkJfQotCQl9KTsKLQl9Ci0KLX0pOwotCi0vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5Ci1mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHsKLQlzZXRUaW1lb3V0KCBjbGVhckZ4Tm93LCAwICk7Ci0JcmV0dXJuICggZnhOb3cgPSBqUXVlcnkubm93KCkgKTsKLX0KLQotZnVuY3Rpb24gY2xlYXJGeE5vdygpIHsKLQlmeE5vdyA9IHVuZGVmaW5lZDsKLX0KLQotLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb24KLWZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBudW0gKSB7Ci0JdmFyIG9iaiA9IHt9OwotCi0JalF1ZXJ5LmVhY2goIGZ4QXR0cnMuY29uY2F0LmFwcGx5KFtdLCBmeEF0dHJzLnNsaWNlKCAwLCBudW0gKSksIGZ1bmN0aW9uKCkgewotCQlvYmpbIHRoaXMgXSA9IHR5cGU7Ci0JfSk7Ci0KLQlyZXR1cm4gb2JqOwotfQotCi0vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zCi1qUXVlcnkuZWFjaCh7Ci0Jc2xpZGVEb3duOiBnZW5GeCggInNob3ciLCAxICksCi0Jc2xpZGVVcDogZ2VuRngoICJoaWRlIiwgMSApLAotCXNsaWRlVG9nZ2xlOiBnZW5GeCggInRvZ2dsZSIsIDEgKSwKLQlmYWRlSW46IHsgb3BhY2l0eTogInNob3ciIH0sCi0JZmFkZU91dDogeyBvcGFjaXR5OiAiaGlkZSIgfSwKLQlmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KLX0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHsKLQlqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKLQkJcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7Ci0JfTsKLX0pOwotCi1qUXVlcnkuZXh0ZW5kKHsKLQlzcGVlZDogZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkgewotCQl2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSAib2JqZWN0IiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDogewotCQkJY29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKLQkJCQlqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCwKLQkJCWR1cmF0aW9uOiBzcGVlZCwKLQkJCWVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZwotCQl9OwotCi0JCW9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5vZmYgPyAwIDogdHlwZW9mIG9wdC5kdXJhdGlvbiA9PT0gIm51bWJlciIgPyBvcHQuZHVyYXRpb24gOgotCQkJb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPyBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7Ci0KLQkJLy8gbm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gImZ4IgotCQlpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHsKLQkJCW9wdC5xdWV1ZSA9ICJmeCI7Ci0JCX0KLQotCQkvLyBRdWV1ZWluZwotCQlvcHQub2xkID0gb3B0LmNvbXBsZXRlOwotCi0JCW9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCBub1VubWFyayApIHsKLQkJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHsKLQkJCQlvcHQub2xkLmNhbGwoIHRoaXMgKTsKLQkJCX0KLQotCQkJaWYgKCBvcHQucXVldWUgKSB7Ci0JCQkJalF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApOwotCQkJfSBlbHNlIGlmICggbm9Vbm1hcmsgIT09IGZhbHNlICkgewotCQkJCWpRdWVyeS5fdW5tYXJrKCB0aGlzICk7Ci0JCQl9Ci0JCX07Ci0KLQkJcmV0dXJuIG9wdDsKLQl9LAotCi0JZWFzaW5nOiB7Ci0JCWxpbmVhcjogZnVuY3Rpb24oIHAsIG4sIGZpcnN0TnVtLCBkaWZmICkgewotCQkJcmV0dXJuIGZpcnN0TnVtICsgZGlmZiAqIHA7Ci0JCX0sCi0JCXN3aW5nOiBmdW5jdGlvbiggcCwgbiwgZmlyc3ROdW0sIGRpZmYgKSB7Ci0JCQlyZXR1cm4gKCAoIC1NYXRoLmNvcyggcCpNYXRoLlBJICkgLyAyICkgKyAwLjUgKSAqIGRpZmYgKyBmaXJzdE51bTsKLQkJfQotCX0sCi0KLQl0aW1lcnM6IFtdLAotCi0JZng6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wICkgewotCQl0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotCQl0aGlzLmVsZW0gPSBlbGVtOwotCQl0aGlzLnByb3AgPSBwcm9wOwotCi0JCW9wdGlvbnMub3JpZyA9IG9wdGlvbnMub3JpZyB8fCB7fTsKLQl9Ci0KLX0pOwotCi1qUXVlcnkuZngucHJvdG90eXBlID0gewotCS8vIFNpbXBsZSBmdW5jdGlvbiBmb3Igc2V0dGluZyBhIHN0eWxlIHZhbHVlCi0JdXBkYXRlOiBmdW5jdGlvbigpIHsKLQkJaWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHsKLQkJCXRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTsKLQkJfQotCi0JCSggalF1ZXJ5LmZ4LnN0ZXBbIHRoaXMucHJvcCBdIHx8IGpRdWVyeS5meC5zdGVwLl9kZWZhdWx0ICkoIHRoaXMgKTsKLQl9LAotCi0JLy8gR2V0IHRoZSBjdXJyZW50IHNpemUKLQljdXI6IGZ1bmN0aW9uKCkgewotCQlpZiAoIHRoaXMuZWxlbVsgdGhpcy5wcm9wIF0gIT0gbnVsbCAmJiAoIXRoaXMuZWxlbS5zdHlsZSB8fCB0aGlzLmVsZW0uc3R5bGVbIHRoaXMucHJvcCBdID09IG51bGwpICkgewotCQkJcmV0dXJuIHRoaXMuZWxlbVsgdGhpcy5wcm9wIF07Ci0JCX0KLQotCQl2YXIgcGFyc2VkLAotCQkJciA9IGpRdWVyeS5jc3MoIHRoaXMuZWxlbSwgdGhpcy5wcm9wICk7Ci0JCS8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMCwKLQkJLy8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyAicm90YXRlKDFyYWQpIiBhcmUgcmV0dXJuZWQgYXMgaXMsCi0JCS8vIHNpbXBsZSB2YWx1ZXMgc3VjaCBhcyAiMTBweCIgYXJlIHBhcnNlZCB0byBGbG9hdC4KLQkJcmV0dXJuIGlzTmFOKCBwYXJzZWQgPSBwYXJzZUZsb2F0KCByICkgKSA/ICFyIHx8IHIgPT09ICJhdXRvIiA/IDAgOiByIDogcGFyc2VkOwotCX0sCi0KLQkvLyBTdGFydCBhbiBhbmltYXRpb24gZnJvbSBvbmUgbnVtYmVyIHRvIGFub3RoZXIKLQljdXN0b206IGZ1bmN0aW9uKCBmcm9tLCB0bywgdW5pdCApIHsKLQkJdmFyIHNlbGYgPSB0aGlzLAotCQkJZnggPSBqUXVlcnkuZng7Ci0KLQkJdGhpcy5zdGFydFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpOwotCQl0aGlzLmVuZCA9IHRvOwotCQl0aGlzLm5vdyA9IHRoaXMuc3RhcnQgPSBmcm9tOwotCQl0aGlzLnBvcyA9IHRoaXMuc3RhdGUgPSAwOwotCQl0aGlzLnVuaXQgPSB1bml0IHx8IHRoaXMudW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHRoaXMucHJvcCBdID8gIiIgOiAicHgiICk7Ci0KLQkJZnVuY3Rpb24gdCggZ290b0VuZCApIHsKLQkJCXJldHVybiBzZWxmLnN0ZXAoIGdvdG9FbmQgKTsKLQkJfQotCi0JCXQucXVldWUgPSB0aGlzLm9wdGlvbnMucXVldWU7Ci0JCXQuZWxlbSA9IHRoaXMuZWxlbTsKLQkJdC5zYXZlU3RhdGUgPSBmdW5jdGlvbigpIHsKLQkJCWlmICggc2VsZi5vcHRpb25zLmhpZGUgJiYgalF1ZXJ5Ll9kYXRhKCBzZWxmLmVsZW0sICJmeHNob3ciICsgc2VsZi5wcm9wICkgPT09IHVuZGVmaW5lZCApIHsKLQkJCQlqUXVlcnkuX2RhdGEoIHNlbGYuZWxlbSwgImZ4c2hvdyIgKyBzZWxmLnByb3AsIHNlbGYuc3RhcnQgKTsKLQkJCX0KLQkJfTsKLQotCQlpZiAoIHQoKSAmJiBqUXVlcnkudGltZXJzLnB1c2godCkgJiYgIXRpbWVySWQgKSB7Ci0JCQl0aW1lcklkID0gc2V0SW50ZXJ2YWwoIGZ4LnRpY2ssIGZ4LmludGVydmFsICk7Ci0JCX0KLQl9LAotCi0JLy8gU2ltcGxlICdzaG93JyBmdW5jdGlvbgotCXNob3c6IGZ1bmN0aW9uKCkgewotCQl2YXIgZGF0YVNob3cgPSBqUXVlcnkuX2RhdGEoIHRoaXMuZWxlbSwgImZ4c2hvdyIgKyB0aGlzLnByb3AgKTsKLQotCQkvLyBSZW1lbWJlciB3aGVyZSB3ZSBzdGFydGVkLCBzbyB0aGF0IHdlIGNhbiBnbyBiYWNrIHRvIGl0IGxhdGVyCi0JCXRoaXMub3B0aW9ucy5vcmlnWyB0aGlzLnByb3AgXSA9IGRhdGFTaG93IHx8IGpRdWVyeS5zdHlsZSggdGhpcy5lbGVtLCB0aGlzLnByb3AgKTsKLQkJdGhpcy5vcHRpb25zLnNob3cgPSB0cnVlOwotCi0JCS8vIEJlZ2luIHRoZSBhbmltYXRpb24KLQkJLy8gTWFrZSBzdXJlIHRoYXQgd2Ugc3RhcnQgYXQgYSBzbWFsbCB3aWR0aC9oZWlnaHQgdG8gYXZvaWQgYW55IGZsYXNoIG9mIGNvbnRlbnQKLQkJaWYgKCBkYXRhU2hvdyAhPT0gdW5kZWZpbmVkICkgewotCQkJLy8gVGhpcyBzaG93IGlzIHBpY2tpbmcgdXAgd2hlcmUgYSBwcmV2aW91cyBoaWRlIG9yIHNob3cgbGVmdCBvZmYKLQkJCXRoaXMuY3VzdG9tKCB0aGlzLmN1cigpLCBkYXRhU2hvdyApOwotCQl9IGVsc2UgewotCQkJdGhpcy5jdXN0b20oIHRoaXMucHJvcCA9PT0gIndpZHRoIiB8fCB0aGlzLnByb3AgPT09ICJoZWlnaHQiID8gMSA6IDAsIHRoaXMuY3VyKCkgKTsKLQkJfQotCi0JCS8vIFN0YXJ0IGJ5IHNob3dpbmcgdGhlIGVsZW1lbnQKLQkJalF1ZXJ5KCB0aGlzLmVsZW0gKS5zaG93KCk7Ci0JfSwKLQotCS8vIFNpbXBsZSAnaGlkZScgZnVuY3Rpb24KLQloaWRlOiBmdW5jdGlvbigpIHsKLQkJLy8gUmVtZW1iZXIgd2hlcmUgd2Ugc3RhcnRlZCwgc28gdGhhdCB3ZSBjYW4gZ28gYmFjayB0byBpdCBsYXRlcgotCQl0aGlzLm9wdGlvbnMub3JpZ1sgdGhpcy5wcm9wIF0gPSBqUXVlcnkuX2RhdGEoIHRoaXMuZWxlbSwgImZ4c2hvdyIgKyB0aGlzLnByb3AgKSB8fCBqUXVlcnkuc3R5bGUoIHRoaXMuZWxlbSwgdGhpcy5wcm9wICk7Ci0JCXRoaXMub3B0aW9ucy5oaWRlID0gdHJ1ZTsKLQotCQkvLyBCZWdpbiB0aGUgYW5pbWF0aW9uCi0JCXRoaXMuY3VzdG9tKCB0aGlzLmN1cigpLCAwICk7Ci0JfSwKLQotCS8vIEVhY2ggc3RlcCBvZiBhbiBhbmltYXRpb24KLQlzdGVwOiBmdW5jdGlvbiggZ290b0VuZCApIHsKLQkJdmFyIHAsIG4sIGNvbXBsZXRlLAotCQkJdCA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksCi0JCQlkb25lID0gdHJ1ZSwKLQkJCWVsZW0gPSB0aGlzLmVsZW0sCi0JCQlvcHRpb25zID0gdGhpcy5vcHRpb25zOwotCi0JCWlmICggZ290b0VuZCB8fCB0ID49IG9wdGlvbnMuZHVyYXRpb24gKyB0aGlzLnN0YXJ0VGltZSApIHsKLQkJCXRoaXMubm93ID0gdGhpcy5lbmQ7Ci0JCQl0aGlzLnBvcyA9IHRoaXMuc3RhdGUgPSAxOwotCQkJdGhpcy51cGRhdGUoKTsKLQotCQkJb3B0aW9ucy5hbmltYXRlZFByb3BlcnRpZXNbIHRoaXMucHJvcCBdID0gdHJ1ZTsKLQotCQkJZm9yICggcCBpbiBvcHRpb25zLmFuaW1hdGVkUHJvcGVydGllcyApIHsKLQkJCQlpZiAoIG9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0aWVzWyBwIF0gIT09IHRydWUgKSB7Ci0JCQkJCWRvbmUgPSBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmICggZG9uZSApIHsKLQkJCQkvLyBSZXNldCB0aGUgb3ZlcmZsb3cKLQkJCQlpZiAoIG9wdGlvbnMub3ZlcmZsb3cgIT0gbnVsbCAmJiAhalF1ZXJ5LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyApIHsKLQotCQkJCQlqUXVlcnkuZWFjaCggWyAiIiwgIlgiLCAiWSIgXSwgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHsKLQkJCQkJCWVsZW0uc3R5bGVbICJvdmVyZmxvdyIgKyB2YWx1ZSBdID0gb3B0aW9ucy5vdmVyZmxvd1sgaW5kZXggXTsKLQkJCQkJfSk7Ci0JCQkJfQotCi0JCQkJLy8gSGlkZSB0aGUgZWxlbWVudCBpZiB0aGUgImhpZGUiIG9wZXJhdGlvbiB3YXMgZG9uZQotCQkJCWlmICggb3B0aW9ucy5oaWRlICkgewotCQkJCQlqUXVlcnkoIGVsZW0gKS5oaWRlKCk7Ci0JCQkJfQotCi0JCQkJLy8gUmVzZXQgdGhlIHByb3BlcnRpZXMsIGlmIHRoZSBpdGVtIGhhcyBiZWVuIGhpZGRlbiBvciBzaG93bgotCQkJCWlmICggb3B0aW9ucy5oaWRlIHx8IG9wdGlvbnMuc2hvdyApIHsKLQkJCQkJZm9yICggcCBpbiBvcHRpb25zLmFuaW1hdGVkUHJvcGVydGllcyApIHsKLQkJCQkJCWpRdWVyeS5zdHlsZSggZWxlbSwgcCwgb3B0aW9ucy5vcmlnWyBwIF0gKTsKLQkJCQkJCWpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCAiZnhzaG93IiArIHAsIHRydWUgKTsKLQkJCQkJCS8vIFRvZ2dsZSBkYXRhIGlzIG5vIGxvbmdlciBuZWVkZWQKLQkJCQkJCWpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCAidG9nZ2xlIiArIHAsIHRydWUgKTsKLQkJCQkJfQotCQkJCX0KLQotCQkJCS8vIEV4ZWN1dGUgdGhlIGNvbXBsZXRlIGZ1bmN0aW9uCi0JCQkJLy8gaW4gdGhlIGV2ZW50IHRoYXQgdGhlIGNvbXBsZXRlIGZ1bmN0aW9uIHRocm93cyBhbiBleGNlcHRpb24KLQkJCQkvLyB3ZSBtdXN0IGVuc3VyZSBpdCB3b24ndCBiZSBjYWxsZWQgdHdpY2UuICM1Njg0Ci0KLQkJCQljb21wbGV0ZSA9IG9wdGlvbnMuY29tcGxldGU7Ci0JCQkJaWYgKCBjb21wbGV0ZSApIHsKLQotCQkJCQlvcHRpb25zLmNvbXBsZXRlID0gZmFsc2U7Ci0JCQkJCWNvbXBsZXRlLmNhbGwoIGVsZW0gKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCXJldHVybiBmYWxzZTsKLQotCQl9IGVsc2UgewotCQkJLy8gY2xhc3NpY2FsIGVhc2luZyBjYW5ub3QgYmUgdXNlZCB3aXRoIGFuIEluZmluaXR5IGR1cmF0aW9uCi0JCQlpZiAoIG9wdGlvbnMuZHVyYXRpb24gPT0gSW5maW5pdHkgKSB7Ci0JCQkJdGhpcy5ub3cgPSB0OwotCQkJfSBlbHNlIHsKLQkJCQluID0gdCAtIHRoaXMuc3RhcnRUaW1lOwotCQkJCXRoaXMuc3RhdGUgPSBuIC8gb3B0aW9ucy5kdXJhdGlvbjsKLQotCQkJCS8vIFBlcmZvcm0gdGhlIGVhc2luZyBmdW5jdGlvbiwgZGVmYXVsdHMgdG8gc3dpbmcKLQkJCQl0aGlzLnBvcyA9IGpRdWVyeS5lYXNpbmdbIG9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0aWVzW3RoaXMucHJvcF0gXSggdGhpcy5zdGF0ZSwgbiwgMCwgMSwgb3B0aW9ucy5kdXJhdGlvbiApOwotCQkJCXRoaXMubm93ID0gdGhpcy5zdGFydCArICggKHRoaXMuZW5kIC0gdGhpcy5zdGFydCkgKiB0aGlzLnBvcyApOwotCQkJfQotCQkJLy8gUGVyZm9ybSB0aGUgbmV4dCBzdGVwIG9mIHRoZSBhbmltYXRpb24KLQkJCXRoaXMudXBkYXRlKCk7Ci0JCX0KLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci19OwotCi1qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZngsIHsKLQl0aWNrOiBmdW5jdGlvbigpIHsKLQkJdmFyIHRpbWVyLAotCQkJdGltZXJzID0galF1ZXJ5LnRpbWVycywKLQkJCWkgPSAwOwotCi0JCWZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHsKLQkJCXRpbWVyID0gdGltZXJzWyBpIF07Ci0JCQkvLyBDaGVja3MgdGhlIHRpbWVyIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlbW92ZWQKLQkJCWlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkgewotCQkJCXRpbWVycy5zcGxpY2UoIGktLSwgMSApOwotCQkJfQotCQl9Ci0KLQkJaWYgKCAhdGltZXJzLmxlbmd0aCApIHsKLQkJCWpRdWVyeS5meC5zdG9wKCk7Ci0JCX0KLQl9LAotCi0JaW50ZXJ2YWw6IDEzLAotCi0Jc3RvcDogZnVuY3Rpb24oKSB7Ci0JCWNsZWFySW50ZXJ2YWwoIHRpbWVySWQgKTsKLQkJdGltZXJJZCA9IG51bGw7Ci0JfSwKLQotCXNwZWVkczogewotCQlzbG93OiA2MDAsCi0JCWZhc3Q6IDIwMCwKLQkJLy8gRGVmYXVsdCBzcGVlZAotCQlfZGVmYXVsdDogNDAwCi0JfSwKLQotCXN0ZXA6IHsKLQkJb3BhY2l0eTogZnVuY3Rpb24oIGZ4ICkgewotCQkJalF1ZXJ5LnN0eWxlKCBmeC5lbGVtLCAib3BhY2l0eSIsIGZ4Lm5vdyApOwotCQl9LAotCi0JCV9kZWZhdWx0OiBmdW5jdGlvbiggZnggKSB7Ci0JCQlpZiAoIGZ4LmVsZW0uc3R5bGUgJiYgZnguZWxlbS5zdHlsZVsgZngucHJvcCBdICE9IG51bGwgKSB7Ci0JCQkJZnguZWxlbS5zdHlsZVsgZngucHJvcCBdID0gZngubm93ICsgZngudW5pdDsKLQkJCX0gZWxzZSB7Ci0JCQkJZnguZWxlbVsgZngucHJvcCBdID0gZngubm93OwotCQkJfQotCQl9Ci0JfQotfSk7Ci0KLS8vIEFkZHMgd2lkdGgvaGVpZ2h0IHN0ZXAgZnVuY3Rpb25zCi0vLyBEbyBub3Qgc2V0IGFueXRoaW5nIGJlbG93IDAKLWpRdWVyeS5lYWNoKFsgIndpZHRoIiwgImhlaWdodCIgXSwgZnVuY3Rpb24oIGksIHByb3AgKSB7Ci0JalF1ZXJ5LmZ4LnN0ZXBbIHByb3AgXSA9IGZ1bmN0aW9uKCBmeCApIHsKLQkJalF1ZXJ5LnN0eWxlKCBmeC5lbGVtLCBwcm9wLCBNYXRoLm1heCgwLCBmeC5ub3cpICsgZngudW5pdCApOwotCX07Ci19KTsKLQotaWYgKCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgewotCWpRdWVyeS5leHByLmZpbHRlcnMuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHsKLQkJcmV0dXJuIGpRdWVyeS5ncmVwKGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHsKLQkJCXJldHVybiBlbGVtID09PSBmbi5lbGVtOwotCQl9KS5sZW5ndGg7Ci0JfTsKLX0KLQotLy8gVHJ5IHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgZGlzcGxheSB2YWx1ZSBvZiBhbiBlbGVtZW50Ci1mdW5jdGlvbiBkZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7Ci0KLQlpZiAoICFlbGVtZGlzcGxheVsgbm9kZU5hbWUgXSApIHsKLQotCQl2YXIgYm9keSA9IGRvY3VtZW50LmJvZHksCi0JCQllbGVtID0galF1ZXJ5KCAiPCIgKyBub2RlTmFtZSArICI+IiApLmFwcGVuZFRvKCBib2R5ICksCi0JCQlkaXNwbGF5ID0gZWxlbS5jc3MoICJkaXNwbGF5IiApOwotCQllbGVtLnJlbW92ZSgpOwotCi0JCS8vIElmIHRoZSBzaW1wbGUgd2F5IGZhaWxzLAotCQkvLyBnZXQgZWxlbWVudCdzIHJlYWwgZGVmYXVsdCBkaXNwbGF5IGJ5IGF0dGFjaGluZyBpdCB0byBhIHRlbXAgaWZyYW1lCi0JCWlmICggZGlzcGxheSA9PT0gIm5vbmUiIHx8IGRpc3BsYXkgPT09ICIiICkgewotCQkJLy8gTm8gaWZyYW1lIHRvIHVzZSB5ZXQsIHNvIGNyZWF0ZSBpdAotCQkJaWYgKCAhaWZyYW1lICkgewotCQkJCWlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpZnJhbWUiICk7Ci0JCQkJaWZyYW1lLmZyYW1lQm9yZGVyID0gaWZyYW1lLndpZHRoID0gaWZyYW1lLmhlaWdodCA9IDA7Ci0JCQl9Ci0KLQkJCWJvZHkuYXBwZW5kQ2hpbGQoIGlmcmFtZSApOwotCi0JCQkvLyBDcmVhdGUgYSBjYWNoZWFibGUgY29weSBvZiB0aGUgaWZyYW1lIGRvY3VtZW50IG9uIGZpcnN0IGNhbGwuCi0JCQkvLyBJRSBhbmQgT3BlcmEgd2lsbCBhbGxvdyB1cyB0byByZXVzZSB0aGUgaWZyYW1lRG9jIHdpdGhvdXQgcmUtd3JpdGluZyB0aGUgZmFrZSBIVE1MCi0JCQkvLyBkb2N1bWVudCB0byBpdDsgV2ViS2l0ICYgRmlyZWZveCB3b24ndCBhbGxvdyByZXVzaW5nIHRoZSBpZnJhbWUgZG9jdW1lbnQuCi0JCQlpZiAoICFpZnJhbWVEb2MgfHwgIWlmcmFtZS5jcmVhdGVFbGVtZW50ICkgewotCQkJCWlmcmFtZURvYyA9ICggaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLmNvbnRlbnREb2N1bWVudCApLmRvY3VtZW50OwotCQkJCWlmcmFtZURvYy53cml0ZSggKCBkb2N1bWVudC5jb21wYXRNb2RlID09PSAiQ1NTMUNvbXBhdCIgPyAiPCFkb2N0eXBlIGh0bWw+IiA6ICIiICkgKyAiPGh0bWw+PGJvZHk+IiApOwotCQkJCWlmcmFtZURvYy5jbG9zZSgpOwotCQkJfQotCi0JCQllbGVtID0gaWZyYW1lRG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICk7Ci0KLQkJCWlmcmFtZURvYy5ib2R5LmFwcGVuZENoaWxkKCBlbGVtICk7Ci0KLQkJCWRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKTsKLQkJCWJvZHkucmVtb3ZlQ2hpbGQoIGlmcmFtZSApOwotCQl9Ci0KLQkJLy8gU3RvcmUgdGhlIGNvcnJlY3QgZGVmYXVsdCBkaXNwbGF5Ci0JCWVsZW1kaXNwbGF5WyBub2RlTmFtZSBdID0gZGlzcGxheTsKLQl9Ci0KLQlyZXR1cm4gZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF07Ci19Ci0KLQotCi0KLXZhciBydGFibGUgPSAvXnQoPzphYmxlfGR8aCkkL2ksCi0JcnJvb3QgPSAvXig/OmJvZHl8aHRtbCkkL2k7Ci0KLWlmICggImdldEJvdW5kaW5nQ2xpZW50UmVjdCIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICkgewotCWpRdWVyeS5mbi5vZmZzZXQgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsKLQkJdmFyIGVsZW0gPSB0aGlzWzBdLCBib3g7Ci0KLQkJaWYgKCBvcHRpb25zICkgewotCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKLQkJCQlqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOwotCQkJfSk7Ci0JCX0KLQotCQlpZiAoICFlbGVtIHx8ICFlbGVtLm93bmVyRG9jdW1lbnQgKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCWlmICggZWxlbSA9PT0gZWxlbS5vd25lckRvY3VtZW50LmJvZHkgKSB7Ci0JCQlyZXR1cm4galF1ZXJ5Lm9mZnNldC5ib2R5T2Zmc2V0KCBlbGVtICk7Ci0JCX0KLQotCQl0cnkgewotCQkJYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLQkJfSBjYXRjaChlKSB7fQotCi0JCXZhciBkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsCi0JCQlkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDsKLQotCQkvLyBNYWtlIHN1cmUgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBhIGRpc2Nvbm5lY3RlZCBET00gbm9kZQotCQlpZiAoICFib3ggfHwgIWpRdWVyeS5jb250YWlucyggZG9jRWxlbSwgZWxlbSApICkgewotCQkJcmV0dXJuIGJveCA/IHsgdG9wOiBib3gudG9wLCBsZWZ0OiBib3gubGVmdCB9IDogeyB0b3A6IDAsIGxlZnQ6IDAgfTsKLQkJfQotCi0JCXZhciBib2R5ID0gZG9jLmJvZHksCi0JCQl3aW4gPSBnZXRXaW5kb3coZG9jKSwKLQkJCWNsaWVudFRvcCAgPSBkb2NFbGVtLmNsaWVudFRvcCAgfHwgYm9keS5jbGllbnRUb3AgIHx8IDAsCi0JCQljbGllbnRMZWZ0ID0gZG9jRWxlbS5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAwLAotCQkJc2Nyb2xsVG9wICA9IHdpbi5wYWdlWU9mZnNldCB8fCBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCAmJiBkb2NFbGVtLnNjcm9sbFRvcCAgfHwgYm9keS5zY3JvbGxUb3AsCi0JCQlzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0IHx8IGpRdWVyeS5zdXBwb3J0LmJveE1vZGVsICYmIGRvY0VsZW0uc2Nyb2xsTGVmdCB8fCBib2R5LnNjcm9sbExlZnQsCi0JCQl0b3AgID0gYm94LnRvcCAgKyBzY3JvbGxUb3AgIC0gY2xpZW50VG9wLAotCQkJbGVmdCA9IGJveC5sZWZ0ICsgc2Nyb2xsTGVmdCAtIGNsaWVudExlZnQ7Ci0KLQkJcmV0dXJuIHsgdG9wOiB0b3AsIGxlZnQ6IGxlZnQgfTsKLQl9OwotCi19IGVsc2UgewotCWpRdWVyeS5mbi5vZmZzZXQgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsKLQkJdmFyIGVsZW0gPSB0aGlzWzBdOwotCi0JCWlmICggb3B0aW9ucyApIHsKLQkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7Ci0JCQkJalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTsKLQkJCX0pOwotCQl9Ci0KLQkJaWYgKCAhZWxlbSB8fCAhZWxlbS5vd25lckRvY3VtZW50ICkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlpZiAoIGVsZW0gPT09IGVsZW0ub3duZXJEb2N1bWVudC5ib2R5ICkgewotCQkJcmV0dXJuIGpRdWVyeS5vZmZzZXQuYm9keU9mZnNldCggZWxlbSApOwotCQl9Ci0KLQkJdmFyIGNvbXB1dGVkU3R5bGUsCi0JCQlvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCwKLQkJCXByZXZPZmZzZXRQYXJlbnQgPSBlbGVtLAotCQkJZG9jID0gZWxlbS5vd25lckRvY3VtZW50LAotCQkJZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQsCi0JCQlib2R5ID0gZG9jLmJvZHksCi0JCQlkZWZhdWx0VmlldyA9IGRvYy5kZWZhdWx0VmlldywKLQkJCXByZXZDb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXcgPyBkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtLCBudWxsICkgOiBlbGVtLmN1cnJlbnRTdHlsZSwKLQkJCXRvcCA9IGVsZW0ub2Zmc2V0VG9wLAotCQkJbGVmdCA9IGVsZW0ub2Zmc2V0TGVmdDsKLQotCQl3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtICE9PSBib2R5ICYmIGVsZW0gIT09IGRvY0VsZW0gKSB7Ci0JCQlpZiAoIGpRdWVyeS5zdXBwb3J0LmZpeGVkUG9zaXRpb24gJiYgcHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICJmaXhlZCIgKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWNvbXB1dGVkU3R5bGUgPSBkZWZhdWx0VmlldyA/IGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkgOiBlbGVtLmN1cnJlbnRTdHlsZTsKLQkJCXRvcCAgLT0gZWxlbS5zY3JvbGxUb3A7Ci0JCQlsZWZ0IC09IGVsZW0uc2Nyb2xsTGVmdDsKLQotCQkJaWYgKCBlbGVtID09PSBvZmZzZXRQYXJlbnQgKSB7Ci0JCQkJdG9wICArPSBlbGVtLm9mZnNldFRvcDsKLQkJCQlsZWZ0ICs9IGVsZW0ub2Zmc2V0TGVmdDsKLQotCQkJCWlmICggalF1ZXJ5LnN1cHBvcnQuZG9lc05vdEFkZEJvcmRlciAmJiAhKGpRdWVyeS5zdXBwb3J0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzICYmIHJ0YWJsZS50ZXN0KGVsZW0ubm9kZU5hbWUpKSApIHsKLQkJCQkJdG9wICArPSBwYXJzZUZsb2F0KCBjb21wdXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoICApIHx8IDA7Ci0JCQkJCWxlZnQgKz0gcGFyc2VGbG9hdCggY29tcHV0ZWRTdHlsZS5ib3JkZXJMZWZ0V2lkdGggKSB8fCAwOwotCQkJCX0KLQotCQkJCXByZXZPZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7Ci0JCQkJb2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQ7Ci0JCQl9Ci0KLQkJCWlmICggalF1ZXJ5LnN1cHBvcnQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlICYmIGNvbXB1dGVkU3R5bGUub3ZlcmZsb3cgIT09ICJ2aXNpYmxlIiApIHsKLQkJCQl0b3AgICs9IHBhcnNlRmxvYXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVyVG9wV2lkdGggICkgfHwgMDsKLQkJCQlsZWZ0ICs9IHBhcnNlRmxvYXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVyTGVmdFdpZHRoICkgfHwgMDsKLQkJCX0KLQotCQkJcHJldkNvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlOwotCQl9Ci0KLQkJaWYgKCBwcmV2Q29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gInJlbGF0aXZlIiB8fCBwcmV2Q29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7Ci0JCQl0b3AgICs9IGJvZHkub2Zmc2V0VG9wOwotCQkJbGVmdCArPSBib2R5Lm9mZnNldExlZnQ7Ci0JCX0KLQotCQlpZiAoIGpRdWVyeS5zdXBwb3J0LmZpeGVkUG9zaXRpb24gJiYgcHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICJmaXhlZCIgKSB7Ci0JCQl0b3AgICs9IE1hdGgubWF4KCBkb2NFbGVtLnNjcm9sbFRvcCwgYm9keS5zY3JvbGxUb3AgKTsKLQkJCWxlZnQgKz0gTWF0aC5tYXgoIGRvY0VsZW0uc2Nyb2xsTGVmdCwgYm9keS5zY3JvbGxMZWZ0ICk7Ci0JCX0KLQotCQlyZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OwotCX07Ci19Ci0KLWpRdWVyeS5vZmZzZXQgPSB7Ci0KLQlib2R5T2Zmc2V0OiBmdW5jdGlvbiggYm9keSApIHsKLQkJdmFyIHRvcCA9IGJvZHkub2Zmc2V0VG9wLAotCQkJbGVmdCA9IGJvZHkub2Zmc2V0TGVmdDsKLQotCQlpZiAoIGpRdWVyeS5zdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0ICkgewotCQkJdG9wICArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHksICJtYXJnaW5Ub3AiKSApIHx8IDA7Ci0JCQlsZWZ0ICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoYm9keSwgIm1hcmdpbkxlZnQiKSApIHx8IDA7Ci0JCX0KLQotCQlyZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OwotCX0sCi0KLQlzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkgewotCQl2YXIgcG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICk7Ci0KLQkJLy8gc2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbQotCQlpZiAoIHBvc2l0aW9uID09PSAic3RhdGljIiApIHsKLQkJCWVsZW0uc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwotCQl9Ci0KLQkJdmFyIGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSwKLQkJCWN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCksCi0JCQljdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCAidG9wIiApLAotCQkJY3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiApLAotCQkJY2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1dGUiIHx8IHBvc2l0aW9uID09PSAiZml4ZWQiICkgJiYgalF1ZXJ5LmluQXJyYXkoImF1dG8iLCBbY3VyQ1NTVG9wLCBjdXJDU1NMZWZ0XSkgPiAtMSwKLQkJCXByb3BzID0ge30sIGN1clBvc2l0aW9uID0ge30sIGN1clRvcCwgY3VyTGVmdDsKLQotCQkvLyBuZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlciB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWQKLQkJaWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHsKLQkJCWN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpOwotCQkJY3VyVG9wID0gY3VyUG9zaXRpb24udG9wOwotCQkJY3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7Ci0JCX0gZWxzZSB7Ci0JCQljdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOwotCQkJY3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOwotCQl9Ci0KLQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9ucyApICkgewotCQkJb3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgY3VyT2Zmc2V0ICk7Ci0JCX0KLQotCQlpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7Ci0JCQlwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wOwotCQl9Ci0JCWlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7Ci0JCQlwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDsKLQkJfQotCi0JCWlmICggInVzaW5nIiBpbiBvcHRpb25zICkgewotCQkJb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOwotCQl9IGVsc2UgewotCQkJY3VyRWxlbS5jc3MoIHByb3BzICk7Ci0JCX0KLQl9Ci19OwotCi0KLWpRdWVyeS5mbi5leHRlbmQoewotCi0JcG9zaXRpb246IGZ1bmN0aW9uKCkgewotCQlpZiAoICF0aGlzWzBdICkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQl2YXIgZWxlbSA9IHRoaXNbMF0sCi0KLQkJLy8gR2V0ICpyZWFsKiBvZmZzZXRQYXJlbnQKLQkJb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKSwKLQotCQkvLyBHZXQgY29ycmVjdCBvZmZzZXRzCi0JCW9mZnNldCAgICAgICA9IHRoaXMub2Zmc2V0KCksCi0JCXBhcmVudE9mZnNldCA9IHJyb290LnRlc3Qob2Zmc2V0UGFyZW50WzBdLm5vZGVOYW1lKSA/IHsgdG9wOiAwLCBsZWZ0OiAwIH0gOiBvZmZzZXRQYXJlbnQub2Zmc2V0KCk7Ci0KLQkJLy8gU3VidHJhY3QgZWxlbWVudCBtYXJnaW5zCi0JCS8vIG5vdGU6IHdoZW4gYW4gZWxlbWVudCBoYXMgbWFyZ2luOiBhdXRvIHRoZSBvZmZzZXRMZWZ0IGFuZCBtYXJnaW5MZWZ0Ci0JCS8vIGFyZSB0aGUgc2FtZSBpbiBTYWZhcmkgY2F1c2luZyBvZmZzZXQubGVmdCB0byBpbmNvcnJlY3RseSBiZSAwCi0JCW9mZnNldC50b3AgIC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwgIm1hcmdpblRvcCIpICkgfHwgMDsKLQkJb2Zmc2V0LmxlZnQgLT0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhlbGVtLCAibWFyZ2luTGVmdCIpICkgfHwgMDsKLQotCQkvLyBBZGQgb2Zmc2V0UGFyZW50IGJvcmRlcnMKLQkJcGFyZW50T2Zmc2V0LnRvcCAgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnRbMF0sICJib3JkZXJUb3BXaWR0aCIpICkgfHwgMDsKLQkJcGFyZW50T2Zmc2V0LmxlZnQgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnRbMF0sICJib3JkZXJMZWZ0V2lkdGgiKSApIHx8IDA7Ci0KLQkJLy8gU3VidHJhY3QgdGhlIHR3byBvZmZzZXRzCi0JCXJldHVybiB7Ci0JCQl0b3A6ICBvZmZzZXQudG9wICAtIHBhcmVudE9mZnNldC50b3AsCi0JCQlsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0Ci0JCX07Ci0JfSwKLQotCW9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7Ci0JCXJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpIHsKLQkJCXZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCB8fCBkb2N1bWVudC5ib2R5OwotCQkJd2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgKCFycm9vdC50ZXN0KG9mZnNldFBhcmVudC5ub2RlTmFtZSkgJiYgalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnQsICJwb3NpdGlvbiIpID09PSAic3RhdGljIikgKSB7Ci0JCQkJb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDsKLQkJCX0KLQkJCXJldHVybiBvZmZzZXRQYXJlbnQ7Ci0JCX0pOwotCX0KLX0pOwotCi0KLS8vIENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kcwotalF1ZXJ5LmVhY2goIFsiTGVmdCIsICJUb3AiXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0JdmFyIG1ldGhvZCA9ICJzY3JvbGwiICsgbmFtZTsKLQotCWpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkgewotCQl2YXIgZWxlbSwgd2luOwotCi0JCWlmICggdmFsID09PSB1bmRlZmluZWQgKSB7Ci0JCQllbGVtID0gdGhpc1sgMCBdOwotCi0JCQlpZiAoICFlbGVtICkgewotCQkJCXJldHVybiBudWxsOwotCQkJfQotCi0JCQl3aW4gPSBnZXRXaW5kb3coIGVsZW0gKTsKLQotCQkJLy8gUmV0dXJuIHRoZSBzY3JvbGwgb2Zmc2V0Ci0JCQlyZXR1cm4gd2luID8gKCJwYWdlWE9mZnNldCIgaW4gd2luKSA/IHdpblsgaSA/ICJwYWdlWU9mZnNldCIgOiAicGFnZVhPZmZzZXQiIF0gOgotCQkJCWpRdWVyeS5zdXBwb3J0LmJveE1vZGVsICYmIHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIG1ldGhvZCBdIHx8Ci0JCQkJCXdpbi5kb2N1bWVudC5ib2R5WyBtZXRob2QgXSA6Ci0JCQkJZWxlbVsgbWV0aG9kIF07Ci0JCX0KLQotCQkvLyBTZXQgdGhlIHNjcm9sbCBvZmZzZXQKLQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLQkJCXdpbiA9IGdldFdpbmRvdyggdGhpcyApOwotCi0JCQlpZiAoIHdpbiApIHsKLQkJCQl3aW4uc2Nyb2xsVG8oCi0JCQkJCSFpID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxMZWZ0KCksCi0JCQkJCSBpID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxUb3AoKQotCQkJCSk7Ci0KLQkJCX0gZWxzZSB7Ci0JCQkJdGhpc1sgbWV0aG9kIF0gPSB2YWw7Ci0JCQl9Ci0JCX0pOwotCX07Ci19KTsKLQotZnVuY3Rpb24gZ2V0V2luZG93KCBlbGVtICkgewotCXJldHVybiBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSA/Ci0JCWVsZW0gOgotCQllbGVtLm5vZGVUeXBlID09PSA5ID8KLQkJCWVsZW0uZGVmYXVsdFZpZXcgfHwgZWxlbS5wYXJlbnRXaW5kb3cgOgotCQkJZmFsc2U7Ci19Ci0KLQotCi0KLS8vIENyZWF0ZSB3aWR0aCwgaGVpZ2h0LCBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kcwotalF1ZXJ5LmVhY2goWyAiSGVpZ2h0IiwgIldpZHRoIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKLQotCXZhciB0eXBlID0gbmFtZS50b0xvd2VyQ2FzZSgpOwotCi0JLy8gaW5uZXJIZWlnaHQgYW5kIGlubmVyV2lkdGgKLQlqUXVlcnkuZm5bICJpbm5lciIgKyBuYW1lIF0gPSBmdW5jdGlvbigpIHsKLQkJdmFyIGVsZW0gPSB0aGlzWzBdOwotCQlyZXR1cm4gZWxlbSA/Ci0JCQllbGVtLnN0eWxlID8KLQkJCXBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsICJwYWRkaW5nIiApICkgOgotCQkJdGhpc1sgdHlwZSBdKCkgOgotCQkJbnVsbDsKLQl9OwotCi0JLy8gb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGgKLQlqUXVlcnkuZm5bICJvdXRlciIgKyBuYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luICkgewotCQl2YXIgZWxlbSA9IHRoaXNbMF07Ci0JCXJldHVybiBlbGVtID8KLQkJCWVsZW0uc3R5bGUgPwotCQkJcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgbWFyZ2luID8gIm1hcmdpbiIgOiAiYm9yZGVyIiApICkgOgotCQkJdGhpc1sgdHlwZSBdKCkgOgotCQkJbnVsbDsKLQl9OwotCi0JalF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggc2l6ZSApIHsKLQkJLy8gR2V0IHdpbmRvdyB3aWR0aCBvciBoZWlnaHQKLQkJdmFyIGVsZW0gPSB0aGlzWzBdOwotCQlpZiAoICFlbGVtICkgewotCQkJcmV0dXJuIHNpemUgPT0gbnVsbCA/IG51bGwgOiB0aGlzOwotCQl9Ci0KLQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc2l6ZSApICkgewotCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKLQkJCQl2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApOwotCQkJCXNlbGZbIHR5cGUgXSggc2l6ZS5jYWxsKCB0aGlzLCBpLCBzZWxmWyB0eXBlIF0oKSApICk7Ci0JCQl9KTsKLQkJfQotCi0JCWlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7Ci0JCQkvLyBFdmVyeW9uZSBlbHNlIHVzZSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgb3IgZG9jdW1lbnQuYm9keSBkZXBlbmRpbmcgb24gUXVpcmtzIHZzIFN0YW5kYXJkcyBtb2RlCi0JCQkvLyAzcmQgY29uZGl0aW9uIGFsbG93cyBOb2tpYSBzdXBwb3J0LCBhcyBpdCBzdXBwb3J0cyB0aGUgZG9jRWxlbSBwcm9wIGJ1dCBub3QgQ1NTMUNvbXBhdAotCQkJdmFyIGRvY0VsZW1Qcm9wID0gZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbICJjbGllbnQiICsgbmFtZSBdLAotCQkJCWJvZHkgPSBlbGVtLmRvY3VtZW50LmJvZHk7Ci0JCQlyZXR1cm4gZWxlbS5kb2N1bWVudC5jb21wYXRNb2RlID09PSAiQ1NTMUNvbXBhdCIgJiYgZG9jRWxlbVByb3AgfHwKLQkJCQlib2R5ICYmIGJvZHlbICJjbGllbnQiICsgbmFtZSBdIHx8IGRvY0VsZW1Qcm9wOwotCi0JCS8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHQKLQkJfSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsKLQkJCS8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSwgd2hpY2hldmVyIGlzIGdyZWF0ZXIKLQkJCXJldHVybiBNYXRoLm1heCgKLQkJCQllbGVtLmRvY3VtZW50RWxlbWVudFsiY2xpZW50IiArIG5hbWVdLAotCQkJCWVsZW0uYm9keVsic2Nyb2xsIiArIG5hbWVdLCBlbGVtLmRvY3VtZW50RWxlbWVudFsic2Nyb2xsIiArIG5hbWVdLAotCQkJCWVsZW0uYm9keVsib2Zmc2V0IiArIG5hbWVdLCBlbGVtLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IiArIG5hbWVdCi0JCQkpOwotCi0JCS8vIEdldCBvciBzZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50Ci0JCX0gZWxzZSBpZiAoIHNpemUgPT09IHVuZGVmaW5lZCApIHsKLQkJCXZhciBvcmlnID0galF1ZXJ5LmNzcyggZWxlbSwgdHlwZSApLAotCQkJCXJldCA9IHBhcnNlRmxvYXQoIG9yaWcgKTsKLQotCQkJcmV0dXJuIGpRdWVyeS5pc051bWVyaWMoIHJldCApID8gcmV0IDogb3JpZzsKLQotCQkvLyBTZXQgdGhlIHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCAoZGVmYXVsdCB0byBwaXhlbHMgaWYgdmFsdWUgaXMgdW5pdGxlc3MpCi0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gdGhpcy5jc3MoIHR5cGUsIHR5cGVvZiBzaXplID09PSAic3RyaW5nIiA/IHNpemUgOiBzaXplICsgInB4IiApOwotCQl9Ci0JfTsKLQotfSk7Ci0KLQotCi0KLS8vIEV4cG9zZSBqUXVlcnkgdG8gdGhlIGdsb2JhbCBvYmplY3QKLXdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTsKLQotLy8gRXhwb3NlIGpRdWVyeSBhcyBhbiBBTUQgbW9kdWxlLCBidXQgb25seSBmb3IgQU1EIGxvYWRlcnMgdGhhdAotLy8gdW5kZXJzdGFuZCB0aGUgaXNzdWVzIHdpdGggbG9hZGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBqUXVlcnkKLS8vIGluIGEgcGFnZSB0aGF0IGFsbCBtaWdodCBjYWxsIGRlZmluZSgpLiBUaGUgbG9hZGVyIHdpbGwgaW5kaWNhdGUKLS8vIHRoZXkgaGF2ZSBzcGVjaWFsIGFsbG93YW5jZXMgZm9yIG11bHRpcGxlIGpRdWVyeSB2ZXJzaW9ucyBieQotLy8gc3BlY2lmeWluZyBkZWZpbmUuYW1kLmpRdWVyeSA9IHRydWUuIFJlZ2lzdGVyIGFzIGEgbmFtZWQgbW9kdWxlLAotLy8gc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlciBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLAotLy8gYnV0IG5vdCB1c2UgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdCB1bmRlcnN0YW5kcyBhbm9ueW1vdXMKLS8vIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0IHdheSB0byByZWdpc3Rlci4KLS8vIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlIGRlcml2ZWQgZnJvbQotLy8gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2UgZmlsZSBuYW1lLgotLy8gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50cyB0byBjYWxsCi0vLyBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLgotaWYgKCB0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQgJiYgZGVmaW5lLmFtZC5qUXVlcnkgKSB7Ci0JZGVmaW5lKCAianF1ZXJ5IiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpRdWVyeTsgfSApOwotfQotCi0KLQotfSkoIHdpbmRvdyApOwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vYmVuY2gvanNtaW4uYyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL2pzbWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMTU4MjguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vYmVuY2gvanNtaW4uYworKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0vKiBqc21pbi5jCi0gICAyMDExLTAxLTIyCi0KLUNvcHlyaWdodCAoYykgMjAwMiBEb3VnbGFzIENyb2NrZm9yZCAgKHd3dy5jcm9ja2ZvcmQuY29tKQotCi1QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi10aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLW9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi1UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKLWNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0KLVRoZSBTb2Z0d2FyZSBzaGFsbCBiZSB1c2VkIGZvciBHb29kLCBub3QgRXZpbC4KLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLUlNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi1BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi1MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLVNPRlRXQVJFLgotKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLXN0YXRpYyBpbnQgICB0aGVBOwotc3RhdGljIGludCAgIHRoZUI7Ci1zdGF0aWMgaW50ICAgdGhlTG9va2FoZWFkID0gRU9GOwotCi0KLS8qIGlzQWxwaGFudW0gLS0gcmV0dXJuIHRydWUgaWYgdGhlIGNoYXJhY3RlciBpcyBhIGxldHRlciwgZGlnaXQsIHVuZGVyc2NvcmUsCi0gICAgICAgIGRvbGxhciBzaWduLCBvciBub24tQVNDSUkgY2hhcmFjdGVyLgotKi8KLQotc3RhdGljIGludAotaXNBbHBoYW51bShpbnQgYykKLXsKLSAgICByZXR1cm4gKChjID49ICdhJyAmJiBjIDw9ICd6JykgfHwgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB8fAotICAgICAgICAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IGMgPT0gJ18nIHx8IGMgPT0gJyQnIHx8IGMgPT0gJ1xcJyB8fAotICAgICAgICBjID4gMTI2KTsKLX0KLQotCi0vKiBnZXQgLS0gcmV0dXJuIHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHN0ZGluLiBXYXRjaCBvdXQgZm9yIGxvb2thaGVhZC4gSWYKLSAgICAgICAgdGhlIGNoYXJhY3RlciBpcyBhIGNvbnRyb2wgY2hhcmFjdGVyLCB0cmFuc2xhdGUgaXQgdG8gYSBzcGFjZSBvcgotICAgICAgICBsaW5lZmVlZC4KLSovCi0KLXN0YXRpYyBpbnQKLWdldCgpCi17Ci0gICAgaW50IGMgPSB0aGVMb29rYWhlYWQ7Ci0gICAgdGhlTG9va2FoZWFkID0gRU9GOwotICAgIGlmIChjID09IEVPRikgewotICAgICAgICBjID0gZ2V0YyhzdGRpbik7Ci0gICAgfQotICAgIGlmIChjID49ICcgJyB8fCBjID09ICdcbicgfHwgYyA9PSBFT0YpIHsKLSAgICAgICAgcmV0dXJuIGM7Ci0gICAgfQotICAgIGlmIChjID09ICdccicpIHsKLSAgICAgICAgcmV0dXJuICdcbic7Ci0gICAgfQotICAgIHJldHVybiAnICc7Ci19Ci0KLQotLyogcGVlayAtLSBnZXQgdGhlIG5leHQgY2hhcmFjdGVyIHdpdGhvdXQgZ2V0dGluZyBpdC4KLSovCi0KLXN0YXRpYyBpbnQKLXBlZWsoKQotewotICAgIHRoZUxvb2thaGVhZCA9IGdldCgpOwotICAgIHJldHVybiB0aGVMb29rYWhlYWQ7Ci19Ci0KLQotLyogbmV4dCAtLSBnZXQgdGhlIG5leHQgY2hhcmFjdGVyLCBleGNsdWRpbmcgY29tbWVudHMuIHBlZWsoKSBpcyB1c2VkIHRvIHNlZQotICAgICAgICBpZiBhICcvJyBpcyBmb2xsb3dlZCBieSBhICcvJyBvciAnKicuCi0qLwotCi1zdGF0aWMgaW50Ci1uZXh0KCkKLXsKLSAgICBpbnQgYyA9IGdldCgpOwotICAgIGlmICAoYyA9PSAnLycpIHsKLSAgICAgICAgc3dpdGNoIChwZWVrKCkpIHsKLSAgICAgICAgY2FzZSAnLyc6Ci0gICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgYyA9IGdldCgpOwotICAgICAgICAgICAgICAgIGlmIChjIDw9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBjYXNlICcqJzoKLSAgICAgICAgICAgIGdldCgpOwotICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlICcqJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBlZWsoKSA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcgJzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEVPRjoKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogSlNNSU4gVW50ZXJtaW5hdGVkIGNvbW1lbnQuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gYzsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYzsKLX0KLQotCi0vKiBhY3Rpb24gLS0gZG8gc29tZXRoaW5nISBXaGF0IHlvdSBkbyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhcmd1bWVudDoKLSAgICAgICAgMSAgIE91dHB1dCBBLiBDb3B5IEIgdG8gQS4gR2V0IHRoZSBuZXh0IEIuCi0gICAgICAgIDIgICBDb3B5IEIgdG8gQS4gR2V0IHRoZSBuZXh0IEIuIChEZWxldGUgQSkuCi0gICAgICAgIDMgICBHZXQgdGhlIG5leHQgQi4gKERlbGV0ZSBCKS4KLSAgIGFjdGlvbiB0cmVhdHMgYSBzdHJpbmcgYXMgYSBzaW5nbGUgY2hhcmFjdGVyLiBXb3chCi0gICBhY3Rpb24gcmVjb2duaXplcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpZiBpdCBpcyBwcmVjZWRlZCBieSAoIG9yICwgb3IgPS4KLSovCi0KLXN0YXRpYyB2b2lkCi1hY3Rpb24oaW50IGQpCi17Ci0gICAgc3dpdGNoIChkKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICBwdXRjKHRoZUEsIHN0ZG91dCk7Ci0gICAgY2FzZSAyOgotICAgICAgICB0aGVBID0gdGhlQjsKLSAgICAgICAgaWYgKHRoZUEgPT0gJ1wnJyB8fCB0aGVBID09ICciJykgewotICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgIHB1dGModGhlQSwgc3Rkb3V0KTsKLSAgICAgICAgICAgICAgICB0aGVBID0gZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRoZUEgPT0gdGhlQikgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRoZUEgPT0gJ1xcJykgewotICAgICAgICAgICAgICAgICAgICBwdXRjKHRoZUEsIHN0ZG91dCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoZUEgPSBnZXQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRoZUEgPT0gRU9GKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IEpTTUlOIHVudGVybWluYXRlZCBzdHJpbmcgbGl0ZXJhbC4iKTsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICBjYXNlIDM6Ci0gICAgICAgIHRoZUIgPSBuZXh0KCk7Ci0gICAgICAgIGlmICh0aGVCID09ICcvJyAmJiAodGhlQSA9PSAnKCcgfHwgdGhlQSA9PSAnLCcgfHwgdGhlQSA9PSAnPScgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVBID09ICc6JyB8fCB0aGVBID09ICdbJyB8fCB0aGVBID09ICchJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZUEgPT0gJyYnIHx8IHRoZUEgPT0gJ3wnIHx8IHRoZUEgPT0gJz8nIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlQSA9PSAneycgfHwgdGhlQSA9PSAnfScgfHwgdGhlQSA9PSAnOycgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVBID09ICdcbicpKSB7Ci0gICAgICAgICAgICBwdXRjKHRoZUEsIHN0ZG91dCk7Ci0gICAgICAgICAgICBwdXRjKHRoZUIsIHN0ZG91dCk7Ci0gICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgdGhlQSA9IGdldCgpOwotICAgICAgICAgICAgICAgIGlmICh0aGVBID09ICdbJykgewotCQkJCQlmb3IgKDs7KSB7Ci0JCQkJCQlwdXRjKHRoZUEsIHN0ZG91dCk7Ci0JCQkJCQl0aGVBID0gZ2V0KCk7Ci0JCQkJCQlpZiAodGhlQSA9PSAnXScpIHsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0gCi0JCQkJCQlpZiAodGhlQSA9PSAnXFwnKSB7Ci0JCQkJCQkJcHV0Yyh0aGVBLCBzdGRvdXQpOwotCQkJCQkJCXRoZUEgPSBnZXQoKTsKLQkJCQkJCX0gCi0JCQkJCQlpZiAodGhlQSA9PSBFT0YpIHsKLQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwgCi0JCQkJCQkJCSJFcnJvcjogSlNNSU4gdW50ZXJtaW5hdGVkIHNldCBpbiBSZWd1bGFyIEV4cHJlc3Npb24gbGl0ZXJhbC5cbiIpOwotCQkJCQkJCWV4aXQoMSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IGVsc2UgaWYgKHRoZUEgPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhlQSA9PSdcXCcpIHsKLSAgICAgICAgICAgICAgICAgICAgcHV0Yyh0aGVBLCBzdGRvdXQpOwotICAgICAgICAgICAgICAgICAgICB0aGVBID0gZ2V0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0aGVBID09IEVPRikgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLQkJCQkJCSJFcnJvcjogSlNNSU4gdW50ZXJtaW5hdGVkIFJlZ3VsYXIgRXhwcmVzc2lvbiBsaXRlcmFsLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHB1dGModGhlQSwgc3Rkb3V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoZUIgPSBuZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLQotLyoganNtaW4gLS0gQ29weSB0aGUgaW5wdXQgdG8gdGhlIG91dHB1dCwgZGVsZXRpbmcgdGhlIGNoYXJhY3RlcnMgd2hpY2ggYXJlCi0gICAgICAgIGluc2lnbmlmaWNhbnQgdG8gSmF2YVNjcmlwdC4gQ29tbWVudHMgd2lsbCBiZSByZW1vdmVkLiBUYWJzIHdpbGwgYmUKLSAgICAgICAgcmVwbGFjZWQgd2l0aCBzcGFjZXMuIENhcnJpYWdlIHJldHVybnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGxpbmVmZWVkcy4KLSAgICAgICAgTW9zdCBzcGFjZXMgYW5kIGxpbmVmZWVkcyB3aWxsIGJlIHJlbW92ZWQuCi0qLwotCi1zdGF0aWMgdm9pZAotanNtaW4oKQotewotICAgIHRoZUEgPSAnXG4nOwotICAgIGFjdGlvbigzKTsKLSAgICB3aGlsZSAodGhlQSAhPSBFT0YpIHsKLSAgICAgICAgc3dpdGNoICh0aGVBKSB7Ci0gICAgICAgIGNhc2UgJyAnOgotICAgICAgICAgICAgaWYgKGlzQWxwaGFudW0odGhlQikpIHsKLSAgICAgICAgICAgICAgICBhY3Rpb24oMSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFjdGlvbigyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdcbic6Ci0gICAgICAgICAgICBzd2l0Y2ggKHRoZUIpIHsKLSAgICAgICAgICAgIGNhc2UgJ3snOgotICAgICAgICAgICAgY2FzZSAnWyc6Ci0gICAgICAgICAgICBjYXNlICcoJzoKLSAgICAgICAgICAgIGNhc2UgJysnOgotICAgICAgICAgICAgY2FzZSAnLSc6Ci0gICAgICAgICAgICAgICAgYWN0aW9uKDEpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnICc6Ci0gICAgICAgICAgICAgICAgYWN0aW9uKDMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoaXNBbHBoYW51bSh0aGVCKSkgewotICAgICAgICAgICAgICAgICAgICBhY3Rpb24oMSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uKDIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3dpdGNoICh0aGVCKSB7Ci0gICAgICAgICAgICBjYXNlICcgJzoKLSAgICAgICAgICAgICAgICBpZiAoaXNBbHBoYW51bSh0aGVBKSkgewotICAgICAgICAgICAgICAgICAgICBhY3Rpb24oMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhY3Rpb24oMyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdcbic6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0aGVBKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAnfSc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnXSc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnKSc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnKyc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnLSc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICAgICAgY2FzZSAnXCcnOgotICAgICAgICAgICAgICAgICAgICBhY3Rpb24oMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0FscGhhbnVtKHRoZUEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24oMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24oMyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGFjdGlvbigxKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotCi0vKiBtYWluIC0tIE91dHB1dCBhbnkgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhcyBjb21tZW50cwotICAgICAgICBhbmQgdGhlbiBtaW5pZnkgdGhlIGlucHV0LgotKi8KLWV4dGVybiBpbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKLXsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSArPSAxKSB7Ci0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiLy8gJXNcbiIsIGFyZ3ZbaV0pOwotICAgIH0KLSAgICBqc21pbigpOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vYmVuY2gvanNtaW4ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9iZW5jaC9qc21pbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFmN2RkNy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9iZW5jaC9qc21pbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotIyBUaGlzIGNvZGUgaXMgb3JpZ2luYWwgZnJvbSBqc21pbiBieSBEb3VnbGFzIENyb2NrZm9yZCwgaXQgd2FzIHRyYW5zbGF0ZWQgdG8KLSMgUHl0aG9uIGJ5IEJhcnVjaCBFdmVuLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCi0jIGxpY2Vuc2UuCi0jCi0jIC8qIGpzbWluLmMKLSMgICAgMjAwNy0wNS0yMgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDIgRG91Z2xhcyBDcm9ja2ZvcmQgICh3d3cuY3JvY2tmb3JkLmNvbSkKLSMKLSMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotIyB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotIyB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCi0jIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCi0jIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotIyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0jCi0jIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotIyBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotIwotIyBUaGUgU29mdHdhcmUgc2hhbGwgYmUgdXNlZCBmb3IgR29vZCwgbm90IEV2aWwuCi0jCi0jIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0jIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotIyBTT0ZUV0FSRS4KLSMgKi8KLQotIyBpbXBvcnRzIGFkanVzdGVkIGZvciBzcGVlZCAoY1N0cmluZ0lPKSBhbmQgcHl0aG9uIDMgKGlvKSAtLSBuZAotdHJ5OgotICAgIGZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHRyeToKLSAgICAgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCi0KLQotZGVmIGpzbWluKGpzKToKLSAgICBpbnMgPSBTdHJpbmdJTyhqcykKLSAgICBvdXRzID0gU3RyaW5nSU8oKQotICAgIEphdmFzY3JpcHRNaW5pZnkoKS5taW5pZnkoaW5zLCBvdXRzKQotICAgIHN0ciA9IG91dHMuZ2V0dmFsdWUoKQotICAgIGlmIGxlbihzdHIpID4gMCBhbmQgc3RyWzBdID09ICdcbic6Ci0gICAgICAgIHN0ciA9IHN0clsxOl0KLSAgICByZXR1cm4gc3RyCi0KLWRlZiBpc0FscGhhbnVtKGMpOgotICAgICIiInJldHVybiB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgaXMgYSBsZXR0ZXIsIGRpZ2l0LCB1bmRlcnNjb3JlLAotICAgICAgICAgICBkb2xsYXIgc2lnbiwgb3Igbm9uLUFTQ0lJIGNoYXJhY3Rlci4KLSAgICAiIiIKLSAgICByZXR1cm4gKChjID49ICdhJyBhbmQgYyA8PSAneicpIG9yIChjID49ICcwJyBhbmQgYyA8PSAnOScpIG9yCi0gICAgICAgICAgICAoYyA+PSAnQScgYW5kIGMgPD0gJ1onKSBvciBjID09ICdfJyBvciBjID09ICckJyBvciBjID09ICdcXCcgb3IgKGMgaXMgbm90IE5vbmUgYW5kIG9yZChjKSA+IDEyNikpOwotCi1jbGFzcyBVbnRlcm1pbmF0ZWRDb21tZW50KEV4Y2VwdGlvbik6Ci0gICAgcGFzcwotCi1jbGFzcyBVbnRlcm1pbmF0ZWRTdHJpbmdMaXRlcmFsKEV4Y2VwdGlvbik6Ci0gICAgcGFzcwotCi1jbGFzcyBVbnRlcm1pbmF0ZWRSZWd1bGFyRXhwcmVzc2lvbihFeGNlcHRpb24pOgotICAgIHBhc3MKLQotY2xhc3MgSmF2YXNjcmlwdE1pbmlmeShvYmplY3QpOgotCi0gICAgZGVmIF9vdXRBKHNlbGYpOgotICAgICAgICBzZWxmLm91dHN0cmVhbS53cml0ZShzZWxmLnRoZUEpCi0gICAgZGVmIF9vdXRCKHNlbGYpOgotICAgICAgICBzZWxmLm91dHN0cmVhbS53cml0ZShzZWxmLnRoZUIpCi0KLSAgICBkZWYgX2dldChzZWxmKToKLSAgICAgICAgIiIicmV0dXJuIHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHN0ZGluLiBXYXRjaCBvdXQgZm9yIGxvb2thaGVhZC4gSWYKLSAgICAgICAgICAgdGhlIGNoYXJhY3RlciBpcyBhIGNvbnRyb2wgY2hhcmFjdGVyLCB0cmFuc2xhdGUgaXQgdG8gYSBzcGFjZSBvcgotICAgICAgICAgICBsaW5lZmVlZC4KLSAgICAgICAgIiIiCi0gICAgICAgIGMgPSBzZWxmLnRoZUxvb2thaGVhZAotICAgICAgICBzZWxmLnRoZUxvb2thaGVhZCA9IE5vbmUKLSAgICAgICAgaWYgYyA9PSBOb25lOgotICAgICAgICAgICAgYyA9IHNlbGYuaW5zdHJlYW0ucmVhZCgxKQotICAgICAgICBpZiBjID49ICcgJyBvciBjID09ICdcbic6Ci0gICAgICAgICAgICByZXR1cm4gYwotICAgICAgICBpZiBjID09ICcnOiAjIEVPRgotICAgICAgICAgICAgcmV0dXJuICdcMDAwJwotICAgICAgICBpZiBjID09ICdccic6Ci0gICAgICAgICAgICByZXR1cm4gJ1xuJwotICAgICAgICByZXR1cm4gJyAnCi0KLSAgICBkZWYgX3BlZWsoc2VsZik6Ci0gICAgICAgIHNlbGYudGhlTG9va2FoZWFkID0gc2VsZi5fZ2V0KCkKLSAgICAgICAgcmV0dXJuIHNlbGYudGhlTG9va2FoZWFkCi0KLSAgICBkZWYgX25leHQoc2VsZik6Ci0gICAgICAgICIiImdldCB0aGUgbmV4dCBjaGFyYWN0ZXIsIGV4Y2x1ZGluZyBjb21tZW50cy4gcGVlaygpIGlzIHVzZWQgdG8gc2VlCi0gICAgICAgICAgIGlmIGFuIHVuZXNjYXBlZCAnLycgaXMgZm9sbG93ZWQgYnkgYSAnLycgb3IgJyonLgotICAgICAgICAiIiIKLSAgICAgICAgYyA9IHNlbGYuX2dldCgpCi0gICAgICAgIGlmIGMgPT0gJy8nIGFuZCBzZWxmLnRoZUEgIT0gJ1xcJzoKLSAgICAgICAgICAgIHAgPSBzZWxmLl9wZWVrKCkKLSAgICAgICAgICAgIGlmIHAgPT0gJy8nOgotICAgICAgICAgICAgICAgIGMgPSBzZWxmLl9nZXQoKQotICAgICAgICAgICAgICAgIHdoaWxlIGMgPiAnXG4nOgotICAgICAgICAgICAgICAgICAgICBjID0gc2VsZi5fZ2V0KCkKLSAgICAgICAgICAgICAgICByZXR1cm4gYwotICAgICAgICAgICAgaWYgcCA9PSAnKic6Ci0gICAgICAgICAgICAgICAgYyA9IHNlbGYuX2dldCgpCi0gICAgICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICAgICAgYyA9IHNlbGYuX2dldCgpCi0gICAgICAgICAgICAgICAgICAgIGlmIGMgPT0gJyonOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fcGVlaygpID09ICcvJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9nZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnICcKLSAgICAgICAgICAgICAgICAgICAgaWYgYyA9PSAnXDAwMCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBVbnRlcm1pbmF0ZWRDb21tZW50KCkKLQotICAgICAgICByZXR1cm4gYwotCi0gICAgZGVmIF9hY3Rpb24oc2VsZiwgYWN0aW9uKToKLSAgICAgICAgIiIiZG8gc29tZXRoaW5nISBXaGF0IHlvdSBkbyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhcmd1bWVudDoKLSAgICAgICAgICAgMSAgIE91dHB1dCBBLiBDb3B5IEIgdG8gQS4gR2V0IHRoZSBuZXh0IEIuCi0gICAgICAgICAgIDIgICBDb3B5IEIgdG8gQS4gR2V0IHRoZSBuZXh0IEIuIChEZWxldGUgQSkuCi0gICAgICAgICAgIDMgICBHZXQgdGhlIG5leHQgQi4gKERlbGV0ZSBCKS4KLSAgICAgICAgICAgYWN0aW9uIHRyZWF0cyBhIHN0cmluZyBhcyBhIHNpbmdsZSBjaGFyYWN0ZXIuIFdvdyEKLSAgICAgICAgICAgYWN0aW9uIHJlY29nbml6ZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gaWYgaXQgaXMgcHJlY2VkZWQgYnkgKCBvciAsIG9yID0uCi0gICAgICAgICIiIgotICAgICAgICBpZiBhY3Rpb24gPD0gMToKLSAgICAgICAgICAgIHNlbGYuX291dEEoKQotCi0gICAgICAgIGlmIGFjdGlvbiA8PSAyOgotICAgICAgICAgICAgc2VsZi50aGVBID0gc2VsZi50aGVCCi0gICAgICAgICAgICBpZiBzZWxmLnRoZUEgPT0gIiciIG9yIHNlbGYudGhlQSA9PSAnIic6Ci0gICAgICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3V0QSgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYudGhlQSA9IHNlbGYuX2dldCgpCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudGhlQSA9PSBzZWxmLnRoZUI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnRoZUEgPD0gJ1xuJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFVudGVybWluYXRlZFN0cmluZ0xpdGVyYWwoKQotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnRoZUEgPT0gJ1xcJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX291dEEoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVBID0gc2VsZi5fZ2V0KCkKLQotCi0gICAgICAgIGlmIGFjdGlvbiA8PSAzOgotICAgICAgICAgICAgc2VsZi50aGVCID0gc2VsZi5fbmV4dCgpCi0gICAgICAgICAgICBpZiBzZWxmLnRoZUIgPT0gJy8nIGFuZCAoc2VsZi50aGVBID09ICcoJyBvciBzZWxmLnRoZUEgPT0gJywnIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVBID09ICc9JyBvciBzZWxmLnRoZUEgPT0gJzonIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVBID09ICdbJyBvciBzZWxmLnRoZUEgPT0gJz8nIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVBID09ICchJyBvciBzZWxmLnRoZUEgPT0gJyYnIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVBID09ICd8JyBvciBzZWxmLnRoZUEgPT0gJzsnIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVBID09ICd7JyBvciBzZWxmLnRoZUEgPT0gJ30nIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVBID09ICdcbicpOgotICAgICAgICAgICAgICAgIHNlbGYuX291dEEoKQotICAgICAgICAgICAgICAgIHNlbGYuX291dEIoKQotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYudGhlQSA9IHNlbGYuX2dldCgpCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudGhlQSA9PSAnLyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBlbGlmIHNlbGYudGhlQSA9PSAnXFwnOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3V0QSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRoZUEgPSBzZWxmLl9nZXQoKQotICAgICAgICAgICAgICAgICAgICBlbGlmIHNlbGYudGhlQSA8PSAnXG4nOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVW50ZXJtaW5hdGVkUmVndWxhckV4cHJlc3Npb24oKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9vdXRBKCkKLSAgICAgICAgICAgICAgICBzZWxmLnRoZUIgPSBzZWxmLl9uZXh0KCkKLQotCi0gICAgZGVmIF9qc21pbihzZWxmKToKLSAgICAgICAgIiIiQ29weSB0aGUgaW5wdXQgdG8gdGhlIG91dHB1dCwgZGVsZXRpbmcgdGhlIGNoYXJhY3RlcnMgd2hpY2ggYXJlCi0gICAgICAgICAgIGluc2lnbmlmaWNhbnQgdG8gSmF2YVNjcmlwdC4gQ29tbWVudHMgd2lsbCBiZSByZW1vdmVkLiBUYWJzIHdpbGwgYmUKLSAgICAgICAgICAgcmVwbGFjZWQgd2l0aCBzcGFjZXMuIENhcnJpYWdlIHJldHVybnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGxpbmVmZWVkcy4KLSAgICAgICAgICAgTW9zdCBzcGFjZXMgYW5kIGxpbmVmZWVkcyB3aWxsIGJlIHJlbW92ZWQuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLnRoZUEgPSAnXG4nCi0gICAgICAgIHNlbGYuX2FjdGlvbigzKQotCi0gICAgICAgIHdoaWxlIHNlbGYudGhlQSAhPSAnXDAwMCc6Ci0gICAgICAgICAgICBpZiBzZWxmLnRoZUEgPT0gJyAnOgotICAgICAgICAgICAgICAgIGlmIGlzQWxwaGFudW0oc2VsZi50aGVCKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWN0aW9uKDEpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWN0aW9uKDIpCi0gICAgICAgICAgICBlbGlmIHNlbGYudGhlQSA9PSAnXG4nOgotICAgICAgICAgICAgICAgIGlmIHNlbGYudGhlQiBpbiBbJ3snLCAnWycsICcoJywgJysnLCAnLSddOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9hY3Rpb24oMSkKLSAgICAgICAgICAgICAgICBlbGlmIHNlbGYudGhlQiA9PSAnICc6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2FjdGlvbigzKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlzQWxwaGFudW0oc2VsZi50aGVCKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FjdGlvbigxKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWN0aW9uKDIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIHNlbGYudGhlQiA9PSAnICc6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlzQWxwaGFudW0oc2VsZi50aGVBKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FjdGlvbigxKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWN0aW9uKDMpCi0gICAgICAgICAgICAgICAgZWxpZiBzZWxmLnRoZUIgPT0gJ1xuJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi50aGVBIGluIFsnfScsICddJywgJyknLCAnKycsICctJywgJyInLCAnXCcnXToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FjdGlvbigxKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNBbHBoYW51bShzZWxmLnRoZUEpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FjdGlvbigxKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hY3Rpb24oMykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9hY3Rpb24oMSkKLQotICAgIGRlZiBtaW5pZnkoc2VsZiwgaW5zdHJlYW0sIG91dHN0cmVhbSk6Ci0gICAgICAgIHNlbGYuaW5zdHJlYW0gPSBpbnN0cmVhbQotICAgICAgICBzZWxmLm91dHN0cmVhbSA9IG91dHN0cmVhbQotICAgICAgICBzZWxmLnRoZUEgPSAnXG4nCi0gICAgICAgIHNlbGYudGhlQiA9IE5vbmUKLSAgICAgICAgc2VsZi50aGVMb29rYWhlYWQgPSBOb25lCi0KLSAgICAgICAgc2VsZi5fanNtaW4oKQotICAgICAgICBzZWxmLmluc3RyZWFtLmNsb3NlKCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpbXBvcnQgc3lzCi0gICAganNtID0gSmF2YXNjcmlwdE1pbmlmeSgpCi0gICAganNtLm1pbmlmeShzeXMuc3RkaW4sIHN5cy5zdGRvdXQpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9iZW5jaC9qc21pbl8yXzBfOS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL2pzbWluXzJfMF85LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2JlZDYwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL2pzbWluXzJfMF85LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLSMgVGhpcyBjb2RlIGlzIG9yaWdpbmFsIGZyb20ganNtaW4gYnkgRG91Z2xhcyBDcm9ja2ZvcmQsIGl0IHdhcyB0cmFuc2xhdGVkIHRvCi0jIFB5dGhvbiBieSBCYXJ1Y2ggRXZlbi4gSXQgd2FzIHJld3JpdHRlbiBieSBEYXZlIFN0Lkdlcm1haW4gZm9yIHNwZWVkLgotIwotIyBUaGUgTUlUIExpY2Vuc2UgKE1JVCkKLSMgCi0jIENvcHlyaWdodCAoYykgMjAxMyBEYXZlIFN0Lkdlcm1haW4KLSMgCi0jIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0jIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotIyAKLSMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0jIAotIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0jIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotIyBUSEUgU09GVFdBUkUuCi0KLQotaW1wb3J0IHN5cwotaXNfMyA9IHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDApCi1pZiBpc18zOgotICAgIGltcG9ydCBpbwotZWxzZToKLSAgICBpbXBvcnQgU3RyaW5nSU8KLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCBjU3RyaW5nSU8KLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIGNTdHJpbmdJTyA9IE5vbmUKLQotCi1fX2FsbF9fID0gWydqc21pbicsICdKYXZhc2NyaXB0TWluaWZ5J10KLV9fdmVyc2lvbl9fID0gJzIuMC45JwotCi0KLWRlZiBqc21pbihqcyk6Ci0gICAgIiIiCi0gICAgcmV0dXJucyBhIG1pbmlmaWVkIHZlcnNpb24gb2YgdGhlIGphdmFzY3JpcHQgc3RyaW5nCi0gICAgIiIiCi0gICAgaWYgbm90IGlzXzM6ICAgICAgICAKLSAgICAgICAgaWYgY1N0cmluZ0lPIGFuZCBub3QgaXNpbnN0YW5jZShqcywgdW5pY29kZSk6Ci0gICAgICAgICAgICAjIHN0cmluZ3MgY2FuIHVzZSBjU3RyaW5nSU8gZm9yIGEgM3ggcGVyZm9ybWFuY2UKLSAgICAgICAgICAgICMgaW1wcm92ZW1lbnQsIGJ1dCB1bmljb2RlIChpbiBweXRob24yKSBjYW5ub3QKLSAgICAgICAgICAgIGtsYXNzID0gY1N0cmluZ0lPLlN0cmluZ0lPCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBrbGFzcyA9IFN0cmluZ0lPLlN0cmluZ0lPCi0gICAgZWxzZToKLSAgICAgICAga2xhc3MgPSBpby5TdHJpbmdJTwotICAgIGlucyA9IGtsYXNzKGpzKQotICAgIG91dHMgPSBrbGFzcygpCi0gICAgSmF2YXNjcmlwdE1pbmlmeShpbnMsIG91dHMpLm1pbmlmeSgpCi0gICAgcmV0dXJuIG91dHMuZ2V0dmFsdWUoKQotCi0KLWNsYXNzIEphdmFzY3JpcHRNaW5pZnkob2JqZWN0KToKLSAgICAiIiIKLSAgICBNaW5pZnkgYW4gaW5wdXQgc3RyZWFtIG9mIGphdmFzY3JpcHQsIHdyaXRpbmcKLSAgICB0byBhbiBvdXRwdXQgc3RyZWFtCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaW5zdHJlYW09Tm9uZSwgb3V0c3RyZWFtPU5vbmUpOgotICAgICAgICBzZWxmLmlucyA9IGluc3RyZWFtCi0gICAgICAgIHNlbGYub3V0cyA9IG91dHN0cmVhbQotCi0gICAgZGVmIG1pbmlmeShzZWxmLCBpbnN0cmVhbT1Ob25lLCBvdXRzdHJlYW09Tm9uZSk6Ci0gICAgICAgIGlmIGluc3RyZWFtIGFuZCBvdXRzdHJlYW06Ci0gICAgICAgICAgICBzZWxmLmlucywgc2VsZi5vdXRzID0gaW5zdHJlYW0sIG91dHN0cmVhbQotICAgICAgICAKLSAgICAgICAgc2VsZi5pc19yZXR1cm4gPSBGYWxzZQotICAgICAgICBzZWxmLnJldHVybl9idWYgPSAnJwotICAgICAgICAKLSAgICAgICAgZGVmIHdyaXRlKGNoYXIpOgotICAgICAgICAgICAgIyBhbGwgb2YgdGhpcyBpcyB0byBzdXBwb3J0IGxpdGVyYWwgcmVndWxhciBleHByZXNzaW9ucy4KLSAgICAgICAgICAgICMgc2lnaAotICAgICAgICAgICAgaWYgY2hhciBpbiAncmV0dXJuJzoKLSAgICAgICAgICAgICAgICBzZWxmLnJldHVybl9idWYgKz0gY2hhcgotICAgICAgICAgICAgICAgIHNlbGYuaXNfcmV0dXJuID0gc2VsZi5yZXR1cm5fYnVmID09ICdyZXR1cm4nCi0gICAgICAgICAgICBzZWxmLm91dHMud3JpdGUoY2hhcikKLSAgICAgICAgICAgIGlmIHNlbGYuaXNfcmV0dXJuOgotICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuX2J1ZiA9ICcnCi0KLSAgICAgICAgcmVhZCA9IHNlbGYuaW5zLnJlYWQKLQotICAgICAgICBzcGFjZV9zdHJpbmdzID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IlwKLSAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OV8kXFwiCi0gICAgICAgIHN0YXJ0ZXJzLCBlbmRlcnMgPSAne1soKy0nLCAnfV0pKy0iXCcnCi0gICAgICAgIG5ld2xpbmVzdGFydF9zdHJpbmdzID0gc3RhcnRlcnMgKyBzcGFjZV9zdHJpbmdzCi0gICAgICAgIG5ld2xpbmVlbmRfc3RyaW5ncyA9IGVuZGVycyArIHNwYWNlX3N0cmluZ3MKLSAgICAgICAgZG9fbmV3bGluZSA9IEZhbHNlCi0gICAgICAgIGRvX3NwYWNlID0gRmFsc2UKLSAgICAgICAgZXNjYXBlX3NsYXNoX2NvdW50ID0gMAotICAgICAgICBkb2luZ19zaW5nbGVfY29tbWVudCA9IEZhbHNlCi0gICAgICAgIHByZXZpb3VzX2JlZm9yZV9jb21tZW50ID0gJycKLSAgICAgICAgZG9pbmdfbXVsdGlfY29tbWVudCA9IEZhbHNlCi0gICAgICAgIGluX3JlID0gRmFsc2UKLSAgICAgICAgaW5fcXVvdGUgPSAnJwotICAgICAgICBxdW90ZV9idWYgPSBbXQotICAgICAgICAKLSAgICAgICAgcHJldmlvdXMgPSByZWFkKDEpCi0gICAgICAgIGlmIHByZXZpb3VzID09ICdcXCc6Ci0gICAgICAgICAgICBlc2NhcGVfc2xhc2hfY291bnQgKz0gMQotICAgICAgICBuZXh0MSA9IHJlYWQoMSkKLSAgICAgICAgaWYgcHJldmlvdXMgPT0gJy8nOgotICAgICAgICAgICAgaWYgbmV4dDEgPT0gJy8nOgotICAgICAgICAgICAgICAgIGRvaW5nX3NpbmdsZV9jb21tZW50ID0gVHJ1ZQotICAgICAgICAgICAgZWxpZiBuZXh0MSA9PSAnKic6Ci0gICAgICAgICAgICAgICAgZG9pbmdfbXVsdGlfY29tbWVudCA9IFRydWUKLSAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG5leHQxCi0gICAgICAgICAgICAgICAgbmV4dDEgPSByZWFkKDEpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHdyaXRlKHByZXZpb3VzKQotICAgICAgICBlbGlmIG5vdCBwcmV2aW91czoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBlbGlmIHByZXZpb3VzID49ICchJzoKLSAgICAgICAgICAgIGlmIHByZXZpb3VzIGluICInXCIiOgotICAgICAgICAgICAgICAgIGluX3F1b3RlID0gcHJldmlvdXMKLSAgICAgICAgICAgIHdyaXRlKHByZXZpb3VzKQotICAgICAgICAgICAgcHJldmlvdXNfbm9uX3NwYWNlID0gcHJldmlvdXMKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByZXZpb3VzX25vbl9zcGFjZSA9ICcgJwotICAgICAgICBpZiBub3QgbmV4dDE6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgbmV4dDIgPSByZWFkKDEpCi0gICAgICAgICAgICBpZiBub3QgbmV4dDI6Ci0gICAgICAgICAgICAgICAgbGFzdCA9IG5leHQxLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgKGRvaW5nX3NpbmdsZV9jb21tZW50IG9yIGRvaW5nX211bHRpX2NvbW1lbnQpXAotICAgICAgICAgICAgICAgICAgICBhbmQgbGFzdCBub3QgaW4gKCcnLCAnLycpOgotICAgICAgICAgICAgICAgICAgICBpZiBpbl9xdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCcnLmpvaW4ocXVvdGVfYnVmKSkKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUobGFzdCkKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgaWYgZG9pbmdfbXVsdGlfY29tbWVudDoKLSAgICAgICAgICAgICAgICBpZiBuZXh0MSA9PSAnKicgYW5kIG5leHQyID09ICcvJzoKLSAgICAgICAgICAgICAgICAgICAgZG9pbmdfbXVsdGlfY29tbWVudCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIG5leHQyID0gcmVhZCgxKQotICAgICAgICAgICAgZWxpZiBkb2luZ19zaW5nbGVfY29tbWVudDoKLSAgICAgICAgICAgICAgICBpZiBuZXh0MSBpbiAnXHJcbic6Ci0gICAgICAgICAgICAgICAgICAgIGRvaW5nX3NpbmdsZV9jb21tZW50ID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgbmV4dDIgaW4gJ1xyXG4nOgotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDIgPSByZWFkKDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV4dDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgaWYgcHJldmlvdXNfYmVmb3JlX2NvbW1lbnQgaW4gJyl9XSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb19uZXdsaW5lID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICBlbGlmIHByZXZpb3VzX2JlZm9yZV9jb21tZW50IGluIHNwYWNlX3N0cmluZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnXG4nKQotICAgICAgICAgICAgZWxpZiBpbl9xdW90ZToKLSAgICAgICAgICAgICAgICBxdW90ZV9idWYuYXBwZW5kKG5leHQxKQotCi0gICAgICAgICAgICAgICAgaWYgbmV4dDEgPT0gaW5fcXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgIG51bXNsYXNoZXMgPSAwCi0gICAgICAgICAgICAgICAgICAgIGZvciBjIGluIHJldmVyc2VkKHF1b3RlX2J1Zls6LTFdKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGMgIT0gJ1xcJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1zbGFzaGVzICs9IDEKLSAgICAgICAgICAgICAgICAgICAgaWYgbnVtc2xhc2hlcyAlIDIgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGluX3F1b3RlID0gJycKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCcnLmpvaW4ocXVvdGVfYnVmKSkKLSAgICAgICAgICAgIGVsaWYgbmV4dDEgaW4gJ1xyXG4nOgotICAgICAgICAgICAgICAgIGlmIHByZXZpb3VzX25vbl9zcGFjZSBpbiBuZXdsaW5lZW5kX3N0cmluZ3MgXAotICAgICAgICAgICAgICAgICAgICBvciBwcmV2aW91c19ub25fc3BhY2UgPiAnfic6Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBuZXh0MiA8ICchJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0MiA9IHJlYWQoMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV4dDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5leHQyIGluIG5ld2xpbmVzdGFydF9zdHJpbmdzIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgbmV4dDIgPiAnficgb3IgbmV4dDIgPT0gJy8nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19uZXdsaW5lID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbGlmIG5leHQxIDwgJyEnIGFuZCBub3QgaW5fcmU6Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzX25vbl9zcGFjZSBpbiBzcGFjZV9zdHJpbmdzIFwKLSAgICAgICAgICAgICAgICAgICAgb3IgcHJldmlvdXNfbm9uX3NwYWNlID4gJ34nKSBcCi0gICAgICAgICAgICAgICAgICAgIGFuZCAobmV4dDIgaW4gc3BhY2Vfc3RyaW5ncyBvciBuZXh0MiA+ICd+Jyk6Ci0gICAgICAgICAgICAgICAgICAgIGRvX3NwYWNlID0gVHJ1ZQotICAgICAgICAgICAgICAgIGVsaWYgcHJldmlvdXNfbm9uX3NwYWNlIGluICctKycgYW5kIG5leHQyID09IHByZXZpb3VzX25vbl9zcGFjZToKLSAgICAgICAgICAgICAgICAgICAgIyBwcm90ZWN0IGFnYWluc3QgKyArKyBvciAtIC0tIHNlcXVlbmNlcwotICAgICAgICAgICAgICAgICAgICBkb19zcGFjZSA9IFRydWUKLSAgICAgICAgICAgICAgICBlbGlmIHNlbGYuaXNfcmV0dXJuIGFuZCBuZXh0MiA9PSAnLyc6Ci0gICAgICAgICAgICAgICAgICAgICMgcmV0dXJuaW5nIGEgcmVnZXguLi4KLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyAnKQotICAgICAgICAgICAgZWxpZiBuZXh0MSA9PSAnLyc6Ci0gICAgICAgICAgICAgICAgaWYgZG9fc3BhY2U6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKCcgJykKLSAgICAgICAgICAgICAgICBpZiBpbl9yZToKLSAgICAgICAgICAgICAgICAgICAgaWYgcHJldmlvdXMgIT0gJ1xcJyBvciAobm90IGVzY2FwZV9zbGFzaF9jb3VudCAlIDIpIG9yIG5leHQyIGluICdnaW15JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGluX3JlID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoJy8nKQotICAgICAgICAgICAgICAgIGVsaWYgbmV4dDIgPT0gJy8nOiAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGRvaW5nX3NpbmdsZV9jb21tZW50ID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19iZWZvcmVfY29tbWVudCA9IHByZXZpb3VzX25vbl9zcGFjZQotICAgICAgICAgICAgICAgIGVsaWYgbmV4dDIgPT0gJyonOgotICAgICAgICAgICAgICAgICAgICBkb2luZ19tdWx0aV9jb21tZW50ID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG5leHQxCi0gICAgICAgICAgICAgICAgICAgIG5leHQxID0gbmV4dDIKLSAgICAgICAgICAgICAgICAgICAgbmV4dDIgPSByZWFkKDEpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaW5fcmUgPSBwcmV2aW91c19ub25fc3BhY2UgaW4gJygsPTpbPyEmfCcgb3Igc2VsZi5pc19yZXR1cm4gIyBsaXRlcmFsIHJlZ3VsYXIgZXhwcmVzc2lvbgotICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLycpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIGRvX3NwYWNlOgotICAgICAgICAgICAgICAgICAgICBkb19zcGFjZSA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIHdyaXRlKCcgJykKLSAgICAgICAgICAgICAgICBpZiBkb19uZXdsaW5lOgotICAgICAgICAgICAgICAgICAgICB3cml0ZSgnXG4nKQotICAgICAgICAgICAgICAgICAgICBkb19uZXdsaW5lID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgd3JpdGUobmV4dDEpCi0gICAgICAgICAgICAgICAgaWYgbm90IGluX3JlIGFuZCBuZXh0MSBpbiAiJ1wiIjoKLSAgICAgICAgICAgICAgICAgICAgaW5fcXVvdGUgPSBuZXh0MQotICAgICAgICAgICAgICAgICAgICBxdW90ZV9idWYgPSBbXQotCi0gICAgICAgICAgICBwcmV2aW91cyA9IG5leHQxCi0gICAgICAgICAgICBuZXh0MSA9IG5leHQyCi0KLSAgICAgICAgICAgIGlmIHByZXZpb3VzID49ICchJzoKLSAgICAgICAgICAgICAgICBwcmV2aW91c19ub25fc3BhY2UgPSBwcmV2aW91cwotCi0gICAgICAgICAgICBpZiBwcmV2aW91cyA9PSAnXFwnOgotICAgICAgICAgICAgICAgIGVzY2FwZV9zbGFzaF9jb3VudCArPSAxCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGVzY2FwZV9zbGFzaF9jb3VudCA9IDAKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL2tub2Nrb3V0LTIuMC4wLmpzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vYmVuY2gva25vY2tvdXQtMi4wLjAuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NTc3ZWIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vYmVuY2gva25vY2tvdXQtMi4wLjAuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vLyBLbm9ja291dCBKYXZhU2NyaXB0IGxpYnJhcnkgdjIuMC4wCi0vLyAoYykgU3RldmVuIFNhbmRlcnNvbiAtIGh0dHA6Ly9rbm9ja291dGpzLmNvbS8KLS8vIExpY2Vuc2U6IE1JVCAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApCi0KLShmdW5jdGlvbih3aW5kb3csdW5kZWZpbmVkKXsgCi1mdW5jdGlvbiBjKGEpe3Rocm93IGE7fXZhciBsPXZvaWQgMCxtPSEwLG89bnVsbCxwPSExLHI9d2luZG93LmtvPXt9O3IuYj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgZD1hLnNwbGl0KCIuIiksZT13aW5kb3csZj0wO2Y8ZC5sZW5ndGgtMTtmKyspZT1lW2RbZl1dO2VbZFtkLmxlbmd0aC0xXV09Yn07ci5sPWZ1bmN0aW9uKGEsYixkKXthW2JdPWR9Owotci5hPW5ldyBmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxlKXtpZigiSU5QVVQiIT1hLnRhZ05hbWV8fCFhLnR5cGUpcmV0dXJuIHA7aWYoImNsaWNrIiE9ZS50b0xvd2VyQ2FzZSgpKXJldHVybiBwO3ZhciBiPWEudHlwZS50b0xvd2VyQ2FzZSgpO3JldHVybiJjaGVja2JveCI9PWJ8fCJyYWRpbyI9PWJ9dmFyIGI9L14oXHN8XHUwMEEwKSt8KFxzfFx1MDBBMCkrJC9nLGQ9e30sZT17fTtkWy9GaXJlZm94XC8yL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT8iS2V5Ym9hcmRFdmVudCI6IlVJRXZlbnRzIl09WyJrZXl1cCIsImtleWRvd24iLCJrZXlwcmVzcyJdO2QuTW91c2VFdmVudHM9ImNsaWNrLGRibGNsaWNrLG1vdXNlZG93bixtb3VzZXVwLG1vdXNlbW92ZSxtb3VzZW92ZXIsbW91c2VvdXQsbW91c2VlbnRlcixtb3VzZWxlYXZlIi5zcGxpdCgiLCIpO2Zvcih2YXIgZiBpbiBkKXt2YXIgaD1kW2ZdO2lmKGgubGVuZ3RoKWZvcih2YXIgZz0wLGk9aC5sZW5ndGg7ZzxpO2crKyllW2hbZ11dPQotZn12YXIgaj1mdW5jdGlvbigpe2Zvcih2YXIgYT0zLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksYj1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpIik7ZS5pbm5lckhUTUw9IjxcIS0tW2lmIGd0IElFICIrICsrYSsiXT48aT48L2k+PCFbZW5kaWZdLS1cPiIsYlswXTspO3JldHVybiA0PGE/YTpsfSgpO3JldHVybntCYTpbImF1dGhlbnRpY2l0eV90b2tlbiIsL15fX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbihfLiopPyQvXSxuOmZ1bmN0aW9uKGEsZSl7Zm9yKHZhciBiPTAsZj1hLmxlbmd0aDtiPGY7YisrKWUoYVtiXSl9LGs6ZnVuY3Rpb24oYSxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXkucHJvdG90eXBlLmluZGV4T2YpcmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYSxlKTtmb3IodmFyIGI9MCxmPWEubGVuZ3RoO2I8ZjtiKyspaWYoYVtiXT09PWUpcmV0dXJuIGI7cmV0dXJuLTF9LFdhOmZ1bmN0aW9uKGEsZSxiKXtmb3IodmFyIGY9MCxkPQotYS5sZW5ndGg7ZjxkO2YrKylpZihlLmNhbGwoYixhW2ZdKSlyZXR1cm4gYVtmXTtyZXR1cm4gb30sY2E6ZnVuY3Rpb24oYSxlKXt2YXIgYj1yLmEuayhhLGUpOzA8PWImJmEuc3BsaWNlKGIsMSl9LHlhOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYT1hfHxbXSxlPVtdLGI9MCxmPWEubGVuZ3RoO2I8ZjtiKyspMD5yLmEuayhlLGFbYl0pJiZlLnB1c2goYVtiXSk7cmV0dXJuIGV9LGJhOmZ1bmN0aW9uKGEsZSl7Zm9yKHZhciBhPWF8fFtdLGI9W10sZj0wLGQ9YS5sZW5ndGg7ZjxkO2YrKyliLnB1c2goZShhW2ZdKSk7cmV0dXJuIGJ9LGFhOmZ1bmN0aW9uKGEsZSl7Zm9yKHZhciBhPWF8fFtdLGI9W10sZj0wLGQ9YS5sZW5ndGg7ZjxkO2YrKyllKGFbZl0pJiZiLnB1c2goYVtmXSk7cmV0dXJuIGJ9LEo6ZnVuY3Rpb24oYSxlKXtmb3IodmFyIGI9MCxmPWUubGVuZ3RoO2I8ZjtiKyspYS5wdXNoKGVbYl0pO3JldHVybiBhfSxleHRlbmQ6ZnVuY3Rpb24oYSxlKXtmb3IodmFyIGIgaW4gZSllLmhhc093blByb3BlcnR5KGIpJiYKLShhW2JdPWVbYl0pO3JldHVybiBhfSxVOmZ1bmN0aW9uKGEpe2Zvcig7YS5maXJzdENoaWxkOylyLnJlbW92ZU5vZGUoYS5maXJzdENoaWxkKX0sb2E6ZnVuY3Rpb24oYSxlKXtyLmEuVShhKTtlJiZyLmEubihlLGZ1bmN0aW9uKGUpe2EuYXBwZW5kQ2hpbGQoZSl9KX0sSmE6ZnVuY3Rpb24oYSxlKXt2YXIgYj1hLm5vZGVUeXBlP1thXTphO2lmKDA8Yi5sZW5ndGgpe2Zvcih2YXIgZj1iWzBdLGQ9Zi5wYXJlbnROb2RlLGg9MCxnPWUubGVuZ3RoO2g8ZztoKyspZC5pbnNlcnRCZWZvcmUoZVtoXSxmKTtoPTA7Zm9yKGc9Yi5sZW5ndGg7aDxnO2grKylyLnJlbW92ZU5vZGUoYltoXSl9fSxMYTpmdW5jdGlvbihhLGUpezA8PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTVNJRSA2Iik/YS5zZXRBdHRyaWJ1dGUoInNlbGVjdGVkIixlKTphLnNlbGVjdGVkPWV9LHo6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fCIiKS5yZXBsYWNlKGIsIiIpfSxEYjpmdW5jdGlvbihhLGUpe2Zvcih2YXIgYj0KLVtdLGY9KGF8fCIiKS5zcGxpdChlKSxkPTAsaD1mLmxlbmd0aDtkPGg7ZCsrKXt2YXIgZz1yLmEueihmW2RdKTsiIiE9PWcmJmIucHVzaChnKX1yZXR1cm4gYn0sQ2I6ZnVuY3Rpb24oYSxlKXthPWF8fCIiO3JldHVybiBlLmxlbmd0aD5hLmxlbmd0aD9wOmEuc3Vic3RyaW5nKDAsZS5sZW5ndGgpPT09ZX0saGI6ZnVuY3Rpb24oYSl7Zm9yKHZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxiPSJyZXR1cm4gKCIrYSsiKSIsZj0wO2Y8ZS5sZW5ndGg7ZisrKWVbZl0mJiJvYmplY3QiPT10eXBlb2YgZVtmXSYmKGI9IndpdGgoc2NbIitmKyJdKSB7ICIrYisiIH0gIik7cmV0dXJuKG5ldyBGdW5jdGlvbigic2MiLGIpKShlKX0sZmI6ZnVuY3Rpb24oYSxlKXtpZihlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXJldHVybiAxNj09KGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmMTYpO2Zvcig7YSE9bzspe2lmKGE9PWUpcmV0dXJuIG07YT1hLnBhcmVudE5vZGV9cmV0dXJuIHB9LAotZ2E6ZnVuY3Rpb24oYSl7cmV0dXJuIHIuYS5mYihhLGRvY3VtZW50KX0sczpmdW5jdGlvbihlLGIsZil7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkpe2lmKGEoZSxiKSl2YXIgZD1mLGY9ZnVuY3Rpb24oYSxlKXt2YXIgYj10aGlzLmNoZWNrZWQ7aWYoZSl0aGlzLmNoZWNrZWQ9ZS5ZYSE9PW07ZC5jYWxsKHRoaXMsYSk7dGhpcy5jaGVja2VkPWJ9O2pRdWVyeShlKS5iaW5kKGIsZil9ZWxzZSJmdW5jdGlvbiI9PXR5cGVvZiBlLmFkZEV2ZW50TGlzdGVuZXI/ZS5hZGRFdmVudExpc3RlbmVyKGIsZixwKToidW5kZWZpbmVkIiE9dHlwZW9mIGUuYXR0YWNoRXZlbnQ/ZS5hdHRhY2hFdmVudCgib24iK2IsZnVuY3Rpb24oYSl7Zi5jYWxsKGUsYSl9KTpjKEVycm9yKCJCcm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBhZGRFdmVudExpc3RlbmVyIG9yIGF0dGFjaEV2ZW50IikpfSxzYTpmdW5jdGlvbihiLGYpeyghYnx8IWIubm9kZVR5cGUpJiZjKEVycm9yKCJlbGVtZW50IG11c3QgYmUgYSBET00gbm9kZSB3aGVuIGNhbGxpbmcgdHJpZ2dlckV2ZW50IikpOwotaWYoInVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkpe3ZhciBkPVtdO2EoYixmKSYmZC5wdXNoKHtZYTpiLmNoZWNrZWR9KTtqUXVlcnkoYikudHJpZ2dlcihmLGQpfWVsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRvY3VtZW50LmNyZWF0ZUV2ZW50KSJmdW5jdGlvbiI9PXR5cGVvZiBiLmRpc3BhdGNoRXZlbnQ/KGQ9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoZVtmXXx8IkhUTUxFdmVudHMiKSxkLmluaXRFdmVudChmLG0sbSx3aW5kb3csMCwwLDAsMCwwLHAscCxwLHAsMCxiKSxiLmRpc3BhdGNoRXZlbnQoZCkpOmMoRXJyb3IoIlRoZSBzdXBwbGllZCBlbGVtZW50IGRvZXNuJ3Qgc3VwcG9ydCBkaXNwYXRjaEV2ZW50IikpO2Vsc2UgaWYoInVuZGVmaW5lZCIhPXR5cGVvZiBiLmZpcmVFdmVudCl7aWYoImNsaWNrIj09ZiYmIklOUFVUIj09Yi50YWdOYW1lJiYoImNoZWNrYm94Ij09Yi50eXBlLnRvTG93ZXJDYXNlKCl8fCJyYWRpbyI9PWIudHlwZS50b0xvd2VyQ2FzZSgpKSliLmNoZWNrZWQ9Ci1iLmNoZWNrZWQhPT1tO2IuZmlyZUV2ZW50KCJvbiIrZil9ZWxzZSBjKEVycm9yKCJCcm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCB0cmlnZ2VyaW5nIGV2ZW50cyIpKX0sZDpmdW5jdGlvbihhKXtyZXR1cm4gci5WKGEpP2EoKTphfSxlYjpmdW5jdGlvbihhLGUpe3JldHVybiAwPD1yLmEuaygoYS5jbGFzc05hbWV8fCIiKS5zcGxpdCgvXHMrLyksZSl9LFFhOmZ1bmN0aW9uKGEsZSxiKXt2YXIgZj1yLmEuZWIoYSxlKTtpZihiJiYhZilhLmNsYXNzTmFtZT0oYS5jbGFzc05hbWV8fCIiKSsiICIrZTtlbHNlIGlmKGYmJiFiKXtmb3IodmFyIGI9KGEuY2xhc3NOYW1lfHwiIikuc3BsaXQoL1xzKy8pLGY9IiIsZD0wO2Q8Yi5sZW5ndGg7ZCsrKWJbZF0hPWUmJihmKz1iW2RdKyIgIik7YS5jbGFzc05hbWU9ci5hLnooZil9fSxvdXRlckhUTUw6ZnVuY3Rpb24oYSl7aWYoaj09PWwpe3ZhciBlPWEub3V0ZXJIVE1MO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZX1lPXdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLWUuYXBwZW5kQ2hpbGQoYS5jbG9uZU5vZGUobSkpO3JldHVybiBlLmlubmVySFRNTH0sTWE6ZnVuY3Rpb24oYSxlKXt2YXIgYj1yLmEuZChlKTtpZihiPT09b3x8Yj09PWwpYj0iIjsiaW5uZXJUZXh0ImluIGE/YS5pbm5lclRleHQ9YjphLnRleHRDb250ZW50PWI7aWYoOTw9ailhLmlubmVySFRNTD1hLmlubmVySFRNTH0seWI6ZnVuY3Rpb24oYSxlKXtmb3IodmFyIGE9ci5hLmQoYSksZT1yLmEuZChlKSxiPVtdLGY9YTtmPD1lO2YrKyliLnB1c2goZik7cmV0dXJuIGJ9LFg6ZnVuY3Rpb24oYSl7Zm9yKHZhciBlPVtdLGI9MCxmPWEubGVuZ3RoO2I8ZjtiKyspZS5wdXNoKGFbYl0pO3JldHVybiBlfSxvYjo2PT09aixwYjo3PT09aixDYTpmdW5jdGlvbihhLGUpe2Zvcih2YXIgYj1yLmEuWChhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJTlBVVCIpKS5jb25jYXQoci5hLlgoYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEVYVEFSRUEiKSkpLGY9InN0cmluZyI9PXR5cGVvZiBlP2Z1bmN0aW9uKGEpe3JldHVybiBhLm5hbWU9PT0KLWV9OmZ1bmN0aW9uKGEpe3JldHVybiBlLnRlc3QoYS5uYW1lKX0sZD1bXSxoPWIubGVuZ3RoLTE7MDw9aDtoLS0pZihiW2hdKSYmZC5wdXNoKGJbaF0pO3JldHVybiBkfSx2YjpmdW5jdGlvbihhKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGEmJihhPXIuYS56KGEpKT93aW5kb3cuSlNPTiYmd2luZG93LkpTT04ucGFyc2U/d2luZG93LkpTT04ucGFyc2UoYSk6KG5ldyBGdW5jdGlvbigicmV0dXJuICIrYSkpKCk6b30scWE6ZnVuY3Rpb24oYSl7KCJ1bmRlZmluZWQiPT10eXBlb2YgSlNPTnx8InVuZGVmaW5lZCI9PXR5cGVvZiBKU09OLnN0cmluZ2lmeSkmJmMoRXJyb3IoIkNhbm5vdCBmaW5kIEpTT04uc3RyaW5naWZ5KCkuIFNvbWUgYnJvd3NlcnMgKGUuZy4sIElFIDwgOCkgZG9uJ3Qgc3VwcG9ydCBpdCBuYXRpdmVseSwgYnV0IHlvdSBjYW4gb3ZlcmNvbWUgdGhpcyBieSBhZGRpbmcgYSBzY3JpcHQgcmVmZXJlbmNlIHRvIGpzb24yLmpzLCBkb3dubG9hZGFibGUgZnJvbSBodHRwOi8vd3d3Lmpzb24ub3JnL2pzb24yLmpzIikpOwotcmV0dXJuIEpTT04uc3RyaW5naWZ5KHIuYS5kKGEpKX0sd2I6ZnVuY3Rpb24oYSxlLGIpe3ZhciBiPWJ8fHt9LGY9Yi5wYXJhbXN8fHt9LGQ9Yi5pbmNsdWRlRmllbGRzfHx0aGlzLkJhLGg9YTtpZigib2JqZWN0Ij09dHlwZW9mIGEmJiJGT1JNIj09YS50YWdOYW1lKWZvcih2YXIgaD1hLmFjdGlvbixnPWQubGVuZ3RoLTE7MDw9ZztnLS0pZm9yKHZhciBqPXIuYS5DYShhLGRbZ10pLGk9ai5sZW5ndGgtMTswPD1pO2ktLSlmW2pbaV0ubmFtZV09altpXS52YWx1ZTt2YXIgZT1yLmEuZChlKSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkZPUk0iKTt1LnN0eWxlLmRpc3BsYXk9Im5vbmUiO3UuYWN0aW9uPWg7dS5tZXRob2Q9InBvc3QiO2Zvcih2YXIgeSBpbiBlKWE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKSxhLm5hbWU9eSxhLnZhbHVlPXIuYS5xYShyLmEuZChlW3ldKSksdS5hcHBlbmRDaGlsZChhKTtmb3IoeSBpbiBmKWE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKSwKLWEubmFtZT15LGEudmFsdWU9Zlt5XSx1LmFwcGVuZENoaWxkKGEpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodSk7Yi5zdWJtaXR0ZXI/Yi5zdWJtaXR0ZXIodSk6dS5zdWJtaXQoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHUpfSwwKX19fTtyLmIoImtvLnV0aWxzIixyLmEpOwotci5hLm4oW1siYXJyYXlGb3JFYWNoIixyLmEubl0sWyJhcnJheUZpcnN0IixyLmEuV2FdLFsiYXJyYXlGaWx0ZXIiLHIuYS5hYV0sWyJhcnJheUdldERpc3RpbmN0VmFsdWVzIixyLmEueWFdLFsiYXJyYXlJbmRleE9mIixyLmEua10sWyJhcnJheU1hcCIsci5hLmJhXSxbImFycmF5UHVzaEFsbCIsci5hLkpdLFsiYXJyYXlSZW1vdmVJdGVtIixyLmEuY2FdLFsiZXh0ZW5kIixyLmEuZXh0ZW5kXSxbImZpZWxkc0luY2x1ZGVkV2l0aEpzb25Qb3N0IixyLmEuQmFdLFsiZ2V0Rm9ybUZpZWxkcyIsci5hLkNhXSxbInBvc3RKc29uIixyLmEud2JdLFsicGFyc2VKc29uIixyLmEudmJdLFsicmVnaXN0ZXJFdmVudEhhbmRsZXIiLHIuYS5zXSxbInN0cmluZ2lmeUpzb24iLHIuYS5xYV0sWyJyYW5nZSIsci5hLnliXSxbInRvZ2dsZURvbU5vZGVDc3NDbGFzcyIsci5hLlFhXSxbInRyaWdnZXJFdmVudCIsci5hLnNhXSxbInVud3JhcE9ic2VydmFibGUiLHIuYS5kXV0sZnVuY3Rpb24oYSl7ci5iKCJrby51dGlscy4iKwotYVswXSxhWzFdKX0pO0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHwoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksYT1kLnNoaWZ0KCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGIuYXBwbHkoYSxkLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSl9fSk7Ci1yLmEuZT1uZXcgZnVuY3Rpb24oKXt2YXIgYT0wLGI9Il9fa29fXyIrKG5ldyBEYXRlKS5nZXRUaW1lKCksZD17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGEsYil7dmFyIGQ9ci5hLmUuZ2V0QWxsKGEscCk7cmV0dXJuIGQ9PT1sP2w6ZFtiXX0sc2V0OmZ1bmN0aW9uKGEsYixkKXtkPT09bCYmci5hLmUuZ2V0QWxsKGEscCk9PT1sfHwoci5hLmUuZ2V0QWxsKGEsbSlbYl09ZCl9LGdldEFsbDpmdW5jdGlvbihlLGYpe3ZhciBoPWVbYl07aWYoIShoJiYibnVsbCIhPT1oKSl7aWYoIWYpcmV0dXJuO2g9ZVtiXT0ia28iK2ErKztkW2hdPXt9fXJldHVybiBkW2hdfSxjbGVhcjpmdW5jdGlvbihhKXt2YXIgZj1hW2JdO2YmJihkZWxldGUgZFtmXSxhW2JdPW8pfX19O3IuYigia28udXRpbHMuZG9tRGF0YSIsci5hLmUpO3IuYigia28udXRpbHMuZG9tRGF0YS5jbGVhciIsci5hLmUuY2xlYXIpOwotci5hLkE9bmV3IGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe3ZhciBoPXIuYS5lLmdldChhLGQpO2g9PT1sJiZiJiYoaD1bXSxyLmEuZS5zZXQoYSxkLGgpKTtyZXR1cm4gaH1mdW5jdGlvbiBiKGUpe3ZhciBiPWEoZSxwKTtpZihiKWZvcih2YXIgYj1iLnNsaWNlKDApLGQ9MDtkPGIubGVuZ3RoO2QrKyliW2RdKGUpO3IuYS5lLmNsZWFyKGUpOyJmdW5jdGlvbiI9PXR5cGVvZiBqUXVlcnkmJiJmdW5jdGlvbiI9PXR5cGVvZiBqUXVlcnkuY2xlYW5EYXRhJiZqUXVlcnkuY2xlYW5EYXRhKFtlXSl9dmFyIGQ9Il9fa29fZG9tTm9kZURpc3Bvc2FsX18iKyhuZXcgRGF0ZSkuZ2V0VGltZSgpO3JldHVybnt2YTpmdW5jdGlvbihlLGIpeyJmdW5jdGlvbiIhPXR5cGVvZiBiJiZjKEVycm9yKCJDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKSk7YShlLG0pLnB1c2goYil9LElhOmZ1bmN0aW9uKGUsYil7dmFyIGg9YShlLHApO2gmJihyLmEuY2EoaCxiKSwwPT1oLmxlbmd0aCYmci5hLmUuc2V0KGUsCi1kLGwpKX0sRjpmdW5jdGlvbihhKXtpZighKDEhPWEubm9kZVR5cGUmJjkhPWEubm9kZVR5cGUpKXtiKGEpO3ZhciBmPVtdO3IuYS5KKGYsYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTtmb3IodmFyIGE9MCxkPWYubGVuZ3RoO2E8ZDthKyspYihmW2FdKX19LHJlbW92ZU5vZGU6ZnVuY3Rpb24oYSl7ci5GKGEpO2EucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfX19O3IuRj1yLmEuQS5GO3IucmVtb3ZlTm9kZT1yLmEuQS5yZW1vdmVOb2RlO3IuYigia28uY2xlYW5Ob2RlIixyLkYpO3IuYigia28ucmVtb3ZlTm9kZSIsci5yZW1vdmVOb2RlKTtyLmIoImtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbCIsci5hLkEpO3IuYigia28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayIsci5hLkEudmEpO3IuYigia28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLnJlbW92ZURpc3Bvc2VDYWxsYmFjayIsci5hLkEuSWEpOwotci5hLm1hPWZ1bmN0aW9uKGEpe3ZhciBiO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgalF1ZXJ5KXtpZigoYj1qUXVlcnkuY2xlYW4oW2FdKSkmJmJbMF0pe2ZvcihhPWJbMF07YS5wYXJlbnROb2RlJiYxMSE9PWEucGFyZW50Tm9kZS5ub2RlVHlwZTspYT1hLnBhcmVudE5vZGU7YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSl9fWVsc2V7dmFyIGQ9ci5hLnooYSkudG9Mb3dlckNhc2UoKTtiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Q9ZC5tYXRjaCgvXjwodGhlYWR8dGJvZHl8dGZvb3QpLykmJlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXXx8IWQuaW5kZXhPZigiPHRyIikmJlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXXx8KCFkLmluZGV4T2YoIjx0ZCIpfHwhZC5pbmRleE9mKCI8dGgiKSkmJlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXXx8WzAsIiIsIiJdO2E9Imlnbm9yZWQ8ZGl2PiIrCi1kWzFdK2ErZFsyXSsiPC9kaXY+Ijtmb3IoImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5pbm5lclNoaXY/Yi5hcHBlbmRDaGlsZCh3aW5kb3cuaW5uZXJTaGl2KGEpKTpiLmlubmVySFRNTD1hO2RbMF0tLTspYj1iLmxhc3RDaGlsZDtiPXIuYS5YKGIubGFzdENoaWxkLmNoaWxkTm9kZXMpfXJldHVybiBifTtyLmEuWj1mdW5jdGlvbihhLGIpe3IuYS5VKGEpO2lmKGIhPT1vJiZiIT09bClpZigic3RyaW5nIiE9dHlwZW9mIGImJihiPWIudG9TdHJpbmcoKSksInVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkpalF1ZXJ5KGEpLmh0bWwoYik7ZWxzZSBmb3IodmFyIGQ9ci5hLm1hKGIpLGU9MDtlPGQubGVuZ3RoO2UrKylhLmFwcGVuZENoaWxkKGRbZV0pfTtyLmIoImtvLnV0aWxzLnBhcnNlSHRtbEZyYWdtZW50IixyLmEubWEpO3IuYigia28udXRpbHMuc2V0SHRtbCIsci5hLlopOwotci5yPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe3JldHVybig0Mjk0OTY3Mjk2KigxK01hdGgucmFuZG9tKCkpfDApLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSl9ZnVuY3Rpb24gYihhLGYpe2lmKGEpaWYoOD09YS5ub2RlVHlwZSl7dmFyIGQ9ci5yLkdhKGEubm9kZVZhbHVlKTtkIT1vJiZmLnB1c2goe2NiOmEsdGI6ZH0pfWVsc2UgaWYoMT09YS5ub2RlVHlwZSlmb3IodmFyIGQ9MCxnPWEuY2hpbGROb2RlcyxpPWcubGVuZ3RoO2Q8aTtkKyspYihnW2RdLGYpfXZhciBkPXt9O3JldHVybntrYTpmdW5jdGlvbihiKXsiZnVuY3Rpb24iIT10eXBlb2YgYiYmYyhFcnJvcigiWW91IGNhbiBvbmx5IHBhc3MgYSBmdW5jdGlvbiB0byBrby5tZW1vaXphdGlvbi5tZW1vaXplKCkiKSk7dmFyIGY9YSgpK2EoKTtkW2ZdPWI7cmV0dXJuIjxcIS0tW2tvX21lbW86IitmKyJdLS1cPiJ9LFJhOmZ1bmN0aW9uKGEsYil7dmFyIGg9ZFthXTtoPT09bCYmYyhFcnJvcigiQ291bGRuJ3QgZmluZCBhbnkgbWVtbyB3aXRoIElEICIrCi1hKyIuIFBlcmhhcHMgaXQncyBhbHJlYWR5IGJlZW4gdW5tZW1vaXplZC4iKSk7dHJ5e3JldHVybiBoLmFwcGx5KG8sYnx8W10pLG19ZmluYWxseXtkZWxldGUgZFthXX19LFNhOmZ1bmN0aW9uKGEsZil7dmFyIGQ9W107YihhLGQpO2Zvcih2YXIgZz0wLGk9ZC5sZW5ndGg7ZzxpO2crKyl7dmFyIGo9ZFtnXS5jYixrPVtqXTtmJiZyLmEuSihrLGYpO3Iuci5SYShkW2ddLnRiLGspO2oubm9kZVZhbHVlPSIiO2oucGFyZW50Tm9kZSYmai5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGopfX0sR2E6ZnVuY3Rpb24oYSl7cmV0dXJuKGE9YS5tYXRjaCgvXlxba29fbWVtb1w6KC4qPylcXSQvKSk/YVsxXTpvfX19KCk7ci5iKCJrby5tZW1vaXphdGlvbiIsci5yKTtyLmIoImtvLm1lbW9pemF0aW9uLm1lbW9pemUiLHIuci5rYSk7ci5iKCJrby5tZW1vaXphdGlvbi51bm1lbW9pemUiLHIuci5SYSk7ci5iKCJrby5tZW1vaXphdGlvbi5wYXJzZU1lbW9UZXh0IixyLnIuR2EpOwotci5iKCJrby5tZW1vaXphdGlvbi51bm1lbW9pemVEb21Ob2RlQW5kRGVzY2VuZGFudHMiLHIuci5TYSk7ci5BYT17dGhyb3R0bGU6ZnVuY3Rpb24oYSxiKXthLnRocm90dGxlRXZhbHVhdGlvbj1iO3ZhciBkPW87cmV0dXJuIHIuaSh7cmVhZDphLHdyaXRlOmZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dChkKTtkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthKGUpfSxiKX19KX0sbm90aWZ5OmZ1bmN0aW9uKGEsYil7YS5lcXVhbGl0eUNvbXBhcmVyPSJhbHdheXMiPT1iP2Z1bmN0aW9uKCl7cmV0dXJuIHB9OnIudy5mbi5lcXVhbGl0eUNvbXBhcmVyO3JldHVybiBhfX07ci5iKCJrby5leHRlbmRlcnMiLHIuQWEpO3IuT2E9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhPWE7dGhpcy5iYj1iO3IubCh0aGlzLCJkaXNwb3NlIix0aGlzLnYpfTtyLk9hLnByb3RvdHlwZS52PWZ1bmN0aW9uKCl7dGhpcy5uYj1tO3RoaXMuYmIoKX07Ci1yLlI9ZnVuY3Rpb24oKXt0aGlzLnU9e307ci5hLmV4dGVuZCh0aGlzLHIuUi5mbik7ci5sKHRoaXMsInN1YnNjcmliZSIsdGhpcy5yYSk7ci5sKHRoaXMsImV4dGVuZCIsdGhpcy5leHRlbmQpO3IubCh0aGlzLCJnZXRTdWJzY3JpcHRpb25zQ291bnQiLHRoaXMua2IpfTsKLXIuUi5mbj17cmE6ZnVuY3Rpb24oYSxiLGQpe3ZhciBkPWR8fCJjaGFuZ2UiLGE9Yj9hLmJpbmQoYik6YSxlPW5ldyByLk9hKGEsZnVuY3Rpb24oKXtyLmEuY2EodGhpcy51W2RdLGUpfS5iaW5kKHRoaXMpKTt0aGlzLnVbZF18fCh0aGlzLnVbZF09W10pO3RoaXMudVtkXS5wdXNoKGUpO3JldHVybiBlfSxub3RpZnlTdWJzY3JpYmVyczpmdW5jdGlvbihhLGIpe2I9Ynx8ImNoYW5nZSI7dGhpcy51W2JdJiZyLmEubih0aGlzLnVbYl0uc2xpY2UoMCksZnVuY3Rpb24oYil7YiYmYi5uYiE9PW0mJmIuZGEoYSl9KX0sa2I6ZnVuY3Rpb24oKXt2YXIgYT0wLGI7Zm9yKGIgaW4gdGhpcy51KXRoaXMudS5oYXNPd25Qcm9wZXJ0eShiKSYmKGErPXRoaXMudVtiXS5sZW5ndGgpO3JldHVybiBhfSxleHRlbmQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZihhKWZvcih2YXIgZCBpbiBhKXt2YXIgZT1yLkFhW2RdOyJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoYj1lKGIsYVtkXSkpfXJldHVybiBifX07Ci1yLkVhPWZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBhLnJhJiYiZnVuY3Rpb24iPT10eXBlb2YgYS5ub3RpZnlTdWJzY3JpYmVyc307ci5iKCJrby5zdWJzY3JpYmFibGUiLHIuUik7ci5iKCJrby5pc1N1YnNjcmliYWJsZSIsci5FYSk7ci5UPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJue1hhOmZ1bmN0aW9uKGIpe2EucHVzaCh7ZGE6Yix6YTpbXX0pfSxlbmQ6ZnVuY3Rpb24oKXthLnBvcCgpfSxIYTpmdW5jdGlvbihiKXtyLkVhKGIpfHxjKCJPbmx5IHN1YnNjcmliYWJsZSB0aGluZ3MgY2FuIGFjdCBhcyBkZXBlbmRlbmNpZXMiKTtpZigwPGEubGVuZ3RoKXt2YXIgZD1hW2EubGVuZ3RoLTFdOzA8PXIuYS5rKGQuemEsYil8fChkLnphLnB1c2goYiksZC5kYShiKSl9fX19KCk7dmFyIEI9e3VuZGVmaW5lZDptLCJib29sZWFuIjptLG51bWJlcjptLHN0cmluZzptfTsKLXIudz1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7aWYoMDxhcmd1bWVudHMubGVuZ3RoKXtpZighYi5lcXVhbGl0eUNvbXBhcmVyfHwhYi5lcXVhbGl0eUNvbXBhcmVyKGQsYXJndW1lbnRzWzBdKSliLkgoKSxkPWFyZ3VtZW50c1swXSxiLkcoKTtyZXR1cm4gdGhpc31yLlQuSGEoYik7cmV0dXJuIGR9dmFyIGQ9YTtyLlIuY2FsbChiKTtiLkc9ZnVuY3Rpb24oKXtiLm5vdGlmeVN1YnNjcmliZXJzKGQpfTtiLkg9ZnVuY3Rpb24oKXtiLm5vdGlmeVN1YnNjcmliZXJzKGQsImJlZm9yZUNoYW5nZSIpfTtyLmEuZXh0ZW5kKGIsci53LmZuKTtyLmwoYiwidmFsdWVIYXNNdXRhdGVkIixiLkcpO3IubChiLCJ2YWx1ZVdpbGxNdXRhdGUiLGIuSCk7cmV0dXJuIGJ9O3Iudy5mbj17QjpyLncsZXF1YWxpdHlDb21wYXJlcjpmdW5jdGlvbihhLGIpe3JldHVybiBhPT09b3x8dHlwZW9mIGEgaW4gQj9hPT09YjpwfX07Ci1yLlY9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1vfHxhPT09bHx8YS5CPT09bD9wOmEuQj09PXIudz9tOnIuVihhLkIpfTtyLlA9ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGEmJmEuQj09PXIudz9tOiJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhLkI9PT1yLmkmJmEubGI/bTpwfTtyLmIoImtvLm9ic2VydmFibGUiLHIudyk7ci5iKCJrby5pc09ic2VydmFibGUiLHIuVik7ci5iKCJrby5pc1dyaXRlYWJsZU9ic2VydmFibGUiLHIuUCk7Ci1yLlE9ZnVuY3Rpb24oYSl7MD09YXJndW1lbnRzLmxlbmd0aCYmKGE9W10pO2EhPT1vJiZhIT09bCYmISgibGVuZ3RoImluIGEpJiZjKEVycm9yKCJUaGUgYXJndW1lbnQgcGFzc2VkIHdoZW4gaW5pdGlhbGl6aW5nIGFuIG9ic2VydmFibGUgYXJyYXkgbXVzdCBiZSBhbiBhcnJheSwgb3IgbnVsbCwgb3IgdW5kZWZpbmVkLiIpKTt2YXIgYj1uZXcgci53KGEpO3IuYS5leHRlbmQoYixyLlEuZm4pO3IubChiLCJyZW1vdmUiLGIucmVtb3ZlKTtyLmwoYiwicmVtb3ZlQWxsIixiLnpiKTtyLmwoYiwiZGVzdHJveSIsYi5mYSk7ci5sKGIsImRlc3Ryb3lBbGwiLGIuYWIpO3IubChiLCJpbmRleE9mIixiLmluZGV4T2YpO3IubChiLCJyZXBsYWNlIixiLnJlcGxhY2UpO3JldHVybiBifTsKLXIuUS5mbj17cmVtb3ZlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzKCksZD1bXSxlPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2E6ZnVuY3Rpb24oYil7cmV0dXJuIGI9PT1hfSxmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBoPWJbZl07ZShoKSYmKDA9PT1kLmxlbmd0aCYmdGhpcy5IKCksZC5wdXNoKGgpLGIuc3BsaWNlKGYsMSksZi0tKX1kLmxlbmd0aCYmdGhpcy5HKCk7cmV0dXJuIGR9LHpiOmZ1bmN0aW9uKGEpe2lmKGE9PT1sKXt2YXIgYj10aGlzKCksZD1iLnNsaWNlKDApO3RoaXMuSCgpO2Iuc3BsaWNlKDAsYi5sZW5ndGgpO3RoaXMuRygpO3JldHVybiBkfXJldHVybiFhP1tdOnRoaXMucmVtb3ZlKGZ1bmN0aW9uKGIpe3JldHVybiAwPD1yLmEuayhhLGIpfSl9LGZhOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMoKSxkPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2E6ZnVuY3Rpb24oYil7cmV0dXJuIGI9PT1hfTt0aGlzLkgoKTtmb3IodmFyIGU9Yi5sZW5ndGgtMTswPD1lO2UtLSlkKGJbZV0pJiYKLShiW2VdLl9kZXN0cm95PW0pO3RoaXMuRygpfSxhYjpmdW5jdGlvbihhKXtyZXR1cm4gYT09PWw/dGhpcy5mYShmdW5jdGlvbigpe3JldHVybiBtfSk6IWE/W106dGhpcy5mYShmdW5jdGlvbihiKXtyZXR1cm4gMDw9ci5hLmsoYSxiKX0pfSxpbmRleE9mOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMoKTtyZXR1cm4gci5hLmsoYixhKX0scmVwbGFjZTpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuaW5kZXhPZihhKTswPD1kJiYodGhpcy5IKCksdGhpcygpW2RdPWIsdGhpcy5HKCkpfX07ci5hLm4oInBvcCxwdXNoLHJldmVyc2Usc2hpZnQsc29ydCxzcGxpY2UsdW5zaGlmdCIuc3BsaXQoIiwiKSxmdW5jdGlvbihhKXtyLlEuZm5bYV09ZnVuY3Rpb24oKXt2YXIgYj10aGlzKCk7dGhpcy5IKCk7Yj1iW2FdLmFwcGx5KGIsYXJndW1lbnRzKTt0aGlzLkcoKTtyZXR1cm4gYn19KTsKLXIuYS5uKFsic2xpY2UiXSxmdW5jdGlvbihhKXtyLlEuZm5bYV09ZnVuY3Rpb24oKXt2YXIgYj10aGlzKCk7cmV0dXJuIGJbYV0uYXBwbHkoYixhcmd1bWVudHMpfX0pO3IuYigia28ub2JzZXJ2YWJsZUFycmF5IixyLlEpO2Z1bmN0aW9uIEMoYSxiKXthJiYib2JqZWN0Ij09dHlwZW9mIGE/Yj1hOihiPWJ8fHt9LGIucmVhZD1hfHxiLnJlYWQpOyJmdW5jdGlvbiIhPXR5cGVvZiBiLnJlYWQmJmMoIlBhc3MgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBkZXBlbmRlbnRPYnNlcnZhYmxlIik7cmV0dXJuIGJ9Ci1yLmk9ZnVuY3Rpb24oYSxiLGQpe2Z1bmN0aW9uIGUoKXtyLmEubihxLGZ1bmN0aW9uKGEpe2EudigpfSk7cT1bXX1mdW5jdGlvbiBmKCl7dmFyIGE9Zy50aHJvdHRsZUV2YWx1YXRpb247YSYmMDw9YT8oY2xlYXJUaW1lb3V0KHYpLHY9c2V0VGltZW91dChoLGEpKTpoKCl9ZnVuY3Rpb24gaCgpe2lmKGomJiJmdW5jdGlvbiI9PXR5cGVvZiBkLmRpc3Bvc2VXaGVuJiZkLmRpc3Bvc2VXaGVuKCkpZy52KCk7ZWxzZXt0cnl7ZSgpO3IuVC5YYShmdW5jdGlvbihhKXtxLnB1c2goYS5yYShmKSl9KTt2YXIgYT1kLnJlYWQuY2FsbChkLm93bmVyfHxiKTtnLm5vdGlmeVN1YnNjcmliZXJzKGksImJlZm9yZUNoYW5nZSIpO2k9YX1maW5hbGx5e3IuVC5lbmQoKX1nLm5vdGlmeVN1YnNjcmliZXJzKGkpO2o9bX19ZnVuY3Rpb24gZygpe2lmKDA8YXJndW1lbnRzLmxlbmd0aCkiZnVuY3Rpb24iPT09dHlwZW9mIGQud3JpdGU/ZC53cml0ZS5hcHBseShkLm93bmVyfHxiLGFyZ3VtZW50cyk6YygiQ2Fubm90IHdyaXRlIGEgdmFsdWUgdG8gYSBkZXBlbmRlbnRPYnNlcnZhYmxlIHVubGVzcyB5b3Ugc3BlY2lmeSBhICd3cml0ZScgb3B0aW9uLiBJZiB5b3Ugd2lzaCB0byByZWFkIHRoZSBjdXJyZW50IHZhbHVlLCBkb24ndCBwYXNzIGFueSBwYXJhbWV0ZXJzLiIpOwotZWxzZSByZXR1cm4ganx8aCgpLHIuVC5IYShnKSxpfXZhciBpLGo9cCxkPUMoYSxkKSxrPSJvYmplY3QiPT10eXBlb2YgZC5kaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ/ZC5kaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ6byxuPW87aWYoayl7bj1mdW5jdGlvbigpe2cudigpfTtyLmEuQS52YShrLG4pO3ZhciB0PWQuZGlzcG9zZVdoZW47ZC5kaXNwb3NlV2hlbj1mdW5jdGlvbigpe3JldHVybiFyLmEuZ2Eoayl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0KCl9fXZhciBxPVtdLHY9bztnLmpiPWZ1bmN0aW9uKCl7cmV0dXJuIHEubGVuZ3RofTtnLmxiPSJmdW5jdGlvbiI9PT10eXBlb2YgZC53cml0ZTtnLnY9ZnVuY3Rpb24oKXtrJiZyLmEuQS5JYShrLG4pO2UoKX07ci5SLmNhbGwoZyk7ci5hLmV4dGVuZChnLHIuaS5mbik7ZC5kZWZlckV2YWx1YXRpb24hPT1tJiZoKCk7ci5sKGcsImRpc3Bvc2UiLGcudik7ci5sKGcsImdldERlcGVuZGVuY2llc0NvdW50IixnLmpiKTtyZXR1cm4gZ307Ci1yLmkuZm49e0I6ci5pfTtyLmkuQj1yLnc7ci5iKCJrby5kZXBlbmRlbnRPYnNlcnZhYmxlIixyLmkpO3IuYigia28uY29tcHV0ZWQiLHIuaSk7Ci0oZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGUsZixoKXtoPWh8fG5ldyBkO2U9ZihlKTtpZighKCJvYmplY3QiPT10eXBlb2YgZSYmZSE9PW8mJmUhPT1sJiYhKGUgaW5zdGFuY2VvZiBEYXRlKSkpcmV0dXJuIGU7dmFyIGc9ZSBpbnN0YW5jZW9mIEFycmF5P1tdOnt9O2guc2F2ZShlLGcpO2IoZSxmdW5jdGlvbihiKXt2YXIgZD1mKGVbYl0pO3N3aXRjaCh0eXBlb2YgZCl7Y2FzZSAiYm9vbGVhbiI6Y2FzZSAibnVtYmVyIjpjYXNlICJzdHJpbmciOmNhc2UgImZ1bmN0aW9uIjpnW2JdPWQ7YnJlYWs7Y2FzZSAib2JqZWN0IjpjYXNlICJ1bmRlZmluZWQiOnZhciBrPWguZ2V0KGQpO2dbYl09ayE9PWw/azphKGQsZixoKX19KTtyZXR1cm4gZ31mdW5jdGlvbiBiKGEsYil7aWYoYSBpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKWIoZCk7ZWxzZSBmb3IoZCBpbiBhKWIoZCl9ZnVuY3Rpb24gZCgpe3ZhciBhPVtdLGI9W107dGhpcy5zYXZlPWZ1bmN0aW9uKGQsZyl7dmFyIGk9Ci1yLmEuayhhLGQpOzA8PWk/YltpXT1nOihhLnB1c2goZCksYi5wdXNoKGcpKX07dGhpcy5nZXQ9ZnVuY3Rpb24oZCl7ZD1yLmEuayhhLGQpO3JldHVybiAwPD1kP2JbZF06bH19ci5QYT1mdW5jdGlvbihiKXswPT1hcmd1bWVudHMubGVuZ3RoJiZjKEVycm9yKCJXaGVuIGNhbGxpbmcga28udG9KUywgcGFzcyB0aGUgb2JqZWN0IHlvdSB3YW50IHRvIGNvbnZlcnQuIikpO3JldHVybiBhKGIsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTA7ci5WKGEpJiYxMD5iO2IrKylhPWEoKTtyZXR1cm4gYX0pfTtyLnRvSlNPTj1mdW5jdGlvbihhKXthPXIuUGEoYSk7cmV0dXJuIHIuYS5xYShhKX19KSgpO3IuYigia28udG9KUyIsci5QYSk7ci5iKCJrby50b0pTT04iLHIudG9KU09OKTsKLXIuaD17cTpmdW5jdGlvbihhKXtyZXR1cm4iT1BUSU9OIj09YS50YWdOYW1lP2EuX19rb19faGFzRG9tRGF0YU9wdGlvblZhbHVlX189PT1tP3IuYS5lLmdldChhLHIuYy5vcHRpb25zLmxhKTphLmdldEF0dHJpYnV0ZSgidmFsdWUiKToiU0VMRUNUIj09YS50YWdOYW1lPzA8PWEuc2VsZWN0ZWRJbmRleD9yLmgucShhLm9wdGlvbnNbYS5zZWxlY3RlZEluZGV4XSk6bDphLnZhbHVlfSxTOmZ1bmN0aW9uKGEsYil7aWYoIk9QVElPTiI9PWEudGFnTmFtZSlzd2l0Y2godHlwZW9mIGIpe2Nhc2UgInN0cmluZyI6ci5hLmUuc2V0KGEsci5jLm9wdGlvbnMubGEsbCk7Il9fa29fX2hhc0RvbURhdGFPcHRpb25WYWx1ZV9fImluIGEmJmRlbGV0ZSBhLl9fa29fX2hhc0RvbURhdGFPcHRpb25WYWx1ZV9fO2EudmFsdWU9YjticmVhaztkZWZhdWx0OnIuYS5lLnNldChhLHIuYy5vcHRpb25zLmxhLGIpLGEuX19rb19faGFzRG9tRGF0YU9wdGlvblZhbHVlX189bSxhLnZhbHVlPSJudW1iZXIiPT09dHlwZW9mIGI/Ci1iOiIifWVsc2UgaWYoIlNFTEVDVCI9PWEudGFnTmFtZSlmb3IodmFyIGQ9YS5vcHRpb25zLmxlbmd0aC0xOzA8PWQ7ZC0tKXtpZihyLmgucShhLm9wdGlvbnNbZF0pPT1iKXthLnNlbGVjdGVkSW5kZXg9ZDticmVha319ZWxzZXtpZihiPT09b3x8Yj09PWwpYj0iIjthLnZhbHVlPWJ9fX07ci5iKCJrby5zZWxlY3RFeHRlbnNpb25zIixyLmgpO3IuYigia28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUiLHIuaC5xKTtyLmIoImtvLnNlbGVjdEV4dGVuc2lvbnMud3JpdGVWYWx1ZSIsci5oLlMpOwotci5qPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGUpe2Zvcih2YXIgZD1vO2EhPWQ7KWQ9YSxhPWEucmVwbGFjZShiLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGVbYl19KTtyZXR1cm4gYX12YXIgYj0vXEBrb190b2tlbl8oXGQrKVxAL2csZD0vXltcXyRhLXpdW1xfJGEtejAtOV0qKFxbLio/XF0pKihcLltcXyRhLXpdW1xfJGEtejAtOV0qKFxbLio/XF0pKikqJC9pLGU9WyJ0cnVlIiwiZmFsc2UiXTtyZXR1cm57RDpbXSxZOmZ1bmN0aW9uKGIpe3ZhciBlPXIuYS56KGIpO2lmKDM+ZS5sZW5ndGgpcmV0dXJuW107InsiPT09ZS5jaGFyQXQoMCkmJihlPWUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSkpO2Zvcih2YXIgYj1bXSxkPW8saSxqPTA7ajxlLmxlbmd0aDtqKyspe3ZhciBrPWUuY2hhckF0KGopO2lmKGQ9PT1vKXN3aXRjaChrKXtjYXNlICciJzpjYXNlICInIjpjYXNlICIvIjpkPWosaT1rfWVsc2UgaWYoaz09aSYmIlxcIiE9PWUuY2hhckF0KGotMSkpe2s9ZS5zdWJzdHJpbmcoZCxqKwotMSk7Yi5wdXNoKGspO3ZhciBuPSJAa29fdG9rZW5fIisoYi5sZW5ndGgtMSkrIkAiLGU9ZS5zdWJzdHJpbmcoMCxkKStuK2Uuc3Vic3RyaW5nKGorMSksaj1qLShrLmxlbmd0aC1uLmxlbmd0aCksZD1vfX1pPWQ9bztmb3IodmFyIHQ9MCxxPW8saj0wO2o8ZS5sZW5ndGg7aisrKXtrPWUuY2hhckF0KGopO2lmKGQ9PT1vKXN3aXRjaChrKXtjYXNlICJ7IjpkPWo7cT1rO2k9In0iO2JyZWFrO2Nhc2UgIigiOmQ9ajtxPWs7aT0iKSI7YnJlYWs7Y2FzZSAiWyI6ZD1qLHE9ayxpPSJdIn1rPT09cT90Kys6az09PWkmJih0LS0sMD09PXQmJihrPWUuc3Vic3RyaW5nKGQsaisxKSxiLnB1c2goayksbj0iQGtvX3Rva2VuXyIrKGIubGVuZ3RoLTEpKyJAIixlPWUuc3Vic3RyaW5nKDAsZCkrbitlLnN1YnN0cmluZyhqKzEpLGotPWsubGVuZ3RoLW4ubGVuZ3RoLGQ9bykpfWk9W107ZT1lLnNwbGl0KCIsIik7ZD0wO2ZvcihqPWUubGVuZ3RoO2Q8ajtkKyspdD1lW2RdLHE9dC5pbmRleE9mKCI6IiksCi0wPHEmJnE8dC5sZW5ndGgtMT8oaz10LnN1YnN0cmluZyhxKzEpLGkucHVzaCh7a2V5OmEodC5zdWJzdHJpbmcoMCxxKSxiKSx2YWx1ZTphKGssYil9KSk6aS5wdXNoKHt1bmtub3duOmEodCxiKX0pO3JldHVybiBpfSxpYTpmdW5jdGlvbihhKXtmb3IodmFyIGI9InN0cmluZyI9PT10eXBlb2YgYT9yLmouWShhKTphLGc9W10sYT1bXSxpLGo9MDtpPWJbal07aisrKWlmKDA8Zy5sZW5ndGgmJmcucHVzaCgiLCIpLGkua2V5KXt2YXIgazthOntrPWkua2V5O3ZhciBuPXIuYS56KGspO3N3aXRjaChuLmxlbmd0aCYmbi5jaGFyQXQoMCkpe2Nhc2UgIiciOmNhc2UgJyInOmJyZWFrIGE7ZGVmYXVsdDprPSInIituKyInIn19aT1pLnZhbHVlO2cucHVzaChrKTtnLnB1c2goIjoiKTtnLnB1c2goaSk7bj1yLmEueihpKTtpZigwPD1yLmEuayhlLHIuYS56KG4pLnRvTG93ZXJDYXNlKCkpPzA6bi5tYXRjaChkKSE9PW8pMDxhLmxlbmd0aCYmYS5wdXNoKCIsICIpLGEucHVzaChrKyIgOiBmdW5jdGlvbihfX2tvX3ZhbHVlKSB7ICIrCi1pKyIgPSBfX2tvX3ZhbHVlOyB9Iil9ZWxzZSBpLnVua25vd24mJmcucHVzaChpLnVua25vd24pO2I9Zy5qb2luKCIiKTswPGEubGVuZ3RoJiYoYj1iKyIsICdfa29fcHJvcGVydHlfd3JpdGVycycgOiB7ICIrYS5qb2luKCIiKSsiIH0gIik7cmV0dXJuIGJ9LHJiOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspaWYoci5hLnooYVtlXS5rZXkpPT1iKXJldHVybiBtO3JldHVybiBwfX19KCk7ci5iKCJrby5qc29uRXhwcmVzc2lvblJld3JpdGluZyIsci5qKTtyLmIoImtvLmpzb25FeHByZXNzaW9uUmV3cml0aW5nLmJpbmRpbmdSZXdyaXRlVmFsaWRhdG9ycyIsci5qLkQpO3IuYigia28uanNvbkV4cHJlc3Npb25SZXdyaXRpbmcucGFyc2VPYmplY3RMaXRlcmFsIixyLmouWSk7ci5iKCJrby5qc29uRXhwcmVzc2lvblJld3JpdGluZy5pbnNlcnRQcm9wZXJ0eUFjY2Vzc29yc0ludG9Kc29uIixyLmouaWEpOwotKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gOD09YS5ub2RlVHlwZSYmKGY/YS50ZXh0OmEubm9kZVZhbHVlKS5tYXRjaChoKX1mdW5jdGlvbiBiKGEpe3JldHVybiA4PT1hLm5vZGVUeXBlJiYoZj9hLnRleHQ6YS5ub2RlVmFsdWUpLm1hdGNoKGcpfWZ1bmN0aW9uIGQoZSxkKXtmb3IodmFyIGY9ZSxnPTEsaD1bXTtmPWYubmV4dFNpYmxpbmc7KXtpZihiKGYpJiYoZy0tLDA9PT1nKSlyZXR1cm4gaDtoLnB1c2goZik7YShmKSYmZysrfWR8fGMoRXJyb3IoIkNhbm5vdCBmaW5kIGNsb3NpbmcgY29tbWVudCB0YWcgdG8gbWF0Y2g6ICIrZS5ub2RlVmFsdWUpKTtyZXR1cm4gb31mdW5jdGlvbiBlKGEsYil7dmFyIGU9ZChhLGIpO3JldHVybiBlPzA8ZS5sZW5ndGg/ZVtlLmxlbmd0aC0xXS5uZXh0U2libGluZzphLm5leHRTaWJsaW5nOm99dmFyIGY9IjxcIS0tdGVzdC0tXD4iPT09ZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgidGVzdCIpLnRleHQsaD1mPy9ePFwhLS1ccyprb1xzKyguKlw6LiopXHMqLS1cPiQvOgotL15ccyprb1xzKyguKlw6LiopXHMqJC8sZz1mPy9ePFwhLS1ccypcL2tvXHMqLS1cPiQvOi9eXHMqXC9rb1xzKiQvLGk9e3VsOm0sb2w6bX07ci5mPXtDOnt9LGNoaWxkTm9kZXM6ZnVuY3Rpb24oYil7cmV0dXJuIGEoYik/ZChiKTpiLmNoaWxkTm9kZXN9LGhhOmZ1bmN0aW9uKGIpe2lmKGEoYikpZm9yKHZhciBiPXIuZi5jaGlsZE5vZGVzKGIpLGU9MCxkPWIubGVuZ3RoO2U8ZDtlKyspci5yZW1vdmVOb2RlKGJbZV0pO2Vsc2Ugci5hLlUoYil9LG9hOmZ1bmN0aW9uKGIsZSl7aWYoYShiKSl7ci5mLmhhKGIpO2Zvcih2YXIgZD1iLm5leHRTaWJsaW5nLGY9MCxnPWUubGVuZ3RoO2Y8ZztmKyspZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlW2ZdLGQpfWVsc2Ugci5hLm9hKGIsZSl9LHhiOmZ1bmN0aW9uKGIsZSl7YShiKT9iLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsYi5uZXh0U2libGluZyk6Yi5maXJzdENoaWxkP2IuaW5zZXJ0QmVmb3JlKGUsYi5maXJzdENoaWxkKTpiLmFwcGVuZENoaWxkKGUpfSwKLW1iOmZ1bmN0aW9uKGIsZSxkKXthKGIpP2IucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSxkLm5leHRTaWJsaW5nKTpkLm5leHRTaWJsaW5nP2IuaW5zZXJ0QmVmb3JlKGUsZC5uZXh0U2libGluZyk6Yi5hcHBlbmRDaGlsZChlKX0sbmV4dFNpYmxpbmc6ZnVuY3Rpb24oZCl7cmV0dXJuIGEoZCk/ZShkKS5uZXh0U2libGluZzpkLm5leHRTaWJsaW5nJiZiKGQubmV4dFNpYmxpbmcpP2w6ZC5uZXh0U2libGluZ30sdGE6ZnVuY3Rpb24oYil7cmV0dXJuKGI9YShiKSk/YlsxXTpvfSxpYjpmdW5jdGlvbihhKXtpZihyLmYudGEoYSkpe3ZhciBiO2I9ci5mLmNoaWxkTm9kZXMoYSk7Zm9yKHZhciBlPVtdLGQ9MCxmPWIubGVuZ3RoO2Q8ZjtkKyspci5hLkEuRihiW2RdKSxlLnB1c2goci5hLm91dGVySFRNTChiW2RdKSk7Yj1TdHJpbmcucHJvdG90eXBlLmNvbmNhdC5hcHBseSgiIixlKTtyLmYuaGEoYSk7KG5ldyByLm0uSShhKSkudGV4dChiKX19LEZhOmZ1bmN0aW9uKGQpe2lmKGlbZC50YWdOYW1lLnRvTG93ZXJDYXNlKCldKXt2YXIgZj0KLWQuZmlyc3RDaGlsZDtpZihmKXtkbyBpZigxPT09Zi5ub2RlVHlwZSl7dmFyIGc7Zz1mLmZpcnN0Q2hpbGQ7dmFyIGg9bztpZihnKXtkbyBpZihoKWgucHVzaChnKTtlbHNlIGlmKGEoZykpe3ZhciBxPWUoZyxtKTtxP2c9cTpoPVtnXX1lbHNlIGIoZykmJihoPVtnXSk7d2hpbGUoZz1nLm5leHRTaWJsaW5nKX1pZihnPWgpe2g9Zi5uZXh0U2libGluZztmb3IocT0wO3E8Zy5sZW5ndGg7cSsrKWg/ZC5pbnNlcnRCZWZvcmUoZ1txXSxoKTpkLmFwcGVuZENoaWxkKGdbcV0pfX13aGlsZShmPWYubmV4dFNpYmxpbmcpfX19fX0pKCk7ci5MPWZ1bmN0aW9uKCl7fTsKLXIuYS5leHRlbmQoci5MLnByb3RvdHlwZSx7bm9kZUhhc0JpbmRpbmdzOmZ1bmN0aW9uKGEpe3N3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDE6cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJkYXRhLWJpbmQiKSE9bztjYXNlIDg6cmV0dXJuIHIuZi50YShhKSE9bztkZWZhdWx0OnJldHVybiBwfX0sZ2V0QmluZGluZ3M6ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzLmdldEJpbmRpbmdzU3RyaW5nKGEsYik7cmV0dXJuIGQ/dGhpcy5wYXJzZUJpbmRpbmdzU3RyaW5nKGQsYik6b30sZ2V0QmluZGluZ3NTdHJpbmc6ZnVuY3Rpb24oYSl7c3dpdGNoKGEubm9kZVR5cGUpe2Nhc2UgMTpyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImRhdGEtYmluZCIpO2Nhc2UgODpyZXR1cm4gci5mLnRhKGEpO2RlZmF1bHQ6cmV0dXJuIG99fSxwYXJzZUJpbmRpbmdzU3RyaW5nOmZ1bmN0aW9uKGEsYil7dHJ5e3ZhciBkPWIuJGRhdGEsZT0iIHsgIityLmouaWEoYSkrIiB9ICI7cmV0dXJuIHIuYS5oYihlLGQ9PT1vP3dpbmRvdzoKLWQsYil9Y2F0Y2goZil7YyhFcnJvcigiVW5hYmxlIHRvIHBhcnNlIGJpbmRpbmdzLlxuTWVzc2FnZTogIitmKyI7XG5CaW5kaW5ncyB2YWx1ZTogIithKSl9fX0pO3IuTC5pbnN0YW5jZT1uZXcgci5MO3IuYigia28uYmluZGluZ1Byb3ZpZGVyIixyLkwpOwotKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGQpe2Zvcih2YXIgaCxnPWQuY2hpbGROb2Rlc1swXTtoPWc7KWc9ci5mLm5leHRTaWJsaW5nKGgpLGIoYSxoLHApfWZ1bmN0aW9uIGIoYixmLGgpe3ZhciBnPW0saT0xPT1mLm5vZGVUeXBlO2kmJnIuZi5GYShmKTtpZihpJiZofHxyLkwuaW5zdGFuY2Uubm9kZUhhc0JpbmRpbmdzKGYpKWc9ZChmLG8sYixoKS5CYjtpJiZnJiZhKGIsZil9ZnVuY3Rpb24gZChhLGIsZCxnKXtmdW5jdGlvbiBpKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuW2FdfX1mdW5jdGlvbiBqKCl7cmV0dXJuIG59dmFyIGs9MDtyLmYuaWIoYSk7dmFyIG4sdDtuZXcgci5pKGZ1bmN0aW9uKCl7dmFyIHE9ZCYmZCBpbnN0YW5jZW9mIHIuSz9kOm5ldyByLksoci5hLmQoZCkpLHY9cS4kZGF0YTtnJiZyLk5hKGEscSk7aWYobj0oImZ1bmN0aW9uIj09dHlwZW9mIGI/YigpOmIpfHxyLkwuaW5zdGFuY2UuZ2V0QmluZGluZ3MoYSxxKSl7aWYoMD09PWspe2s9MTtmb3IodmFyIHMgaW4gbil7dmFyIHc9Ci1yLmNbc107dyYmOD09PWEubm9kZVR5cGUmJiFyLmYuQ1tzXSYmYyhFcnJvcigiVGhlIGJpbmRpbmcgJyIrcysiJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHZpcnR1YWwgZWxlbWVudHMiKSk7aWYodyYmImZ1bmN0aW9uIj09dHlwZW9mIHcuaW5pdCYmKHc9KDAsdy5pbml0KShhLGkocyksaix2LHEpKSYmdy5jb250cm9sc0Rlc2NlbmRhbnRCaW5kaW5ncyl0IT09bCYmYyhFcnJvcigiTXVsdGlwbGUgYmluZGluZ3MgKCIrdCsiIGFuZCAiK3MrIikgYXJlIHRyeWluZyB0byBjb250cm9sIGRlc2NlbmRhbnQgYmluZGluZ3Mgb2YgdGhlIHNhbWUgZWxlbWVudC4gWW91IGNhbm5vdCB1c2UgdGhlc2UgYmluZGluZ3MgdG9nZXRoZXIgb24gdGhlIHNhbWUgZWxlbWVudC4iKSksdD1zfWs9Mn1pZigyPT09aylmb3IocyBpbiBuKSh3PXIuY1tzXSkmJiJmdW5jdGlvbiI9PXR5cGVvZiB3LnVwZGF0ZSYmKDAsdy51cGRhdGUpKGEsaShzKSxqLHYscSl9fSxvLHtkaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ6YX0pOwotcmV0dXJue0JiOnQ9PT1sfX1yLmM9e307ci5LPWZ1bmN0aW9uKGEsYil7dGhpcy4kZGF0YT1hO2I/KHRoaXMuJHBhcmVudD1iLiRkYXRhLHRoaXMuJHBhcmVudHM9KGIuJHBhcmVudHN8fFtdKS5zbGljZSgwKSx0aGlzLiRwYXJlbnRzLnVuc2hpZnQodGhpcy4kcGFyZW50KSx0aGlzLiRyb290PWIuJHJvb3QpOih0aGlzLiRwYXJlbnRzPVtdLHRoaXMuJHJvb3Q9YSl9O3IuSy5wcm90b3R5cGUuY3JlYXRlQ2hpbGRDb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgci5LKGEsdGhpcyl9O3IuTmE9ZnVuY3Rpb24oYSxiKXtpZigyPT1hcmd1bWVudHMubGVuZ3RoKXIuYS5lLnNldChhLCJfX2tvX2JpbmRpbmdDb250ZXh0X18iLGIpO2Vsc2UgcmV0dXJuIHIuYS5lLmdldChhLCJfX2tvX2JpbmRpbmdDb250ZXh0X18iKX07ci54YT1mdW5jdGlvbihhLGIsaCl7MT09PWEubm9kZVR5cGUmJnIuZi5GYShhKTtyZXR1cm4gZChhLGIsaCxtKX07ci5UYT1mdW5jdGlvbihiLGQpezE9PT1kLm5vZGVUeXBlJiYKLWEoYixkKX07ci53YT1mdW5jdGlvbihhLGQpe2QmJjEhPT1kLm5vZGVUeXBlJiY4IT09ZC5ub2RlVHlwZSYmYyhFcnJvcigia28uYXBwbHlCaW5kaW5nczogZmlyc3QgcGFyYW1ldGVyIHNob3VsZCBiZSB5b3VyIHZpZXcgbW9kZWw7IHNlY29uZCBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgRE9NIG5vZGUiKSk7ZD1kfHx3aW5kb3cuZG9jdW1lbnQuYm9keTtiKGEsZCxtKX07ci5lYT1mdW5jdGlvbihhKXtzd2l0Y2goYS5ub2RlVHlwZSl7Y2FzZSAxOmNhc2UgODp2YXIgYj1yLk5hKGEpO2lmKGIpcmV0dXJuIGI7aWYoYS5wYXJlbnROb2RlKXJldHVybiByLmVhKGEucGFyZW50Tm9kZSl9fTtyLiRhPWZ1bmN0aW9uKGEpe3JldHVybihhPXIuZWEoYSkpP2EuJGRhdGE6bH07ci5iKCJrby5iaW5kaW5nSGFuZGxlcnMiLHIuYyk7ci5iKCJrby5hcHBseUJpbmRpbmdzIixyLndhKTtyLmIoImtvLmFwcGx5QmluZGluZ3NUb0Rlc2NlbmRhbnRzIixyLlRhKTtyLmIoImtvLmFwcGx5QmluZGluZ3NUb05vZGUiLAotci54YSk7ci5iKCJrby5jb250ZXh0Rm9yIixyLmVhKTtyLmIoImtvLmRhdGFGb3IiLHIuJGEpfSkoKTtyLmEubihbImNsaWNrIl0sZnVuY3Rpb24oYSl7ci5jW2FdPXtpbml0OmZ1bmN0aW9uKGIsZCxlLGYpe3JldHVybiByLmMuZXZlbnQuaW5pdC5jYWxsKHRoaXMsYixmdW5jdGlvbigpe3ZhciBiPXt9O2JbYV09ZCgpO3JldHVybiBifSxlLGYpfX19KTsKLXIuYy5ldmVudD17aW5pdDpmdW5jdGlvbihhLGIsZCxlKXt2YXIgZj1iKCl8fHt9LGg7Zm9yKGggaW4gZikoZnVuY3Rpb24oKXt2YXIgZj1oOyJzdHJpbmciPT10eXBlb2YgZiYmci5hLnMoYSxmLGZ1bmN0aW9uKGEpe3ZhciBoLGs9YigpW2ZdO2lmKGspe3ZhciBuPWQoKTt0cnl7dmFyIHQ9ci5hLlgoYXJndW1lbnRzKTt0LnVuc2hpZnQoZSk7aD1rLmFwcGx5KGUsdCl9ZmluYWxseXtpZihoIT09bSlhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPXB9aWYobltmKyJCdWJibGUiXT09PXApYS5jYW5jZWxCdWJibGU9bSxhLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKX19KX0pKCl9fTsKLXIuYy5zdWJtaXQ9e2luaXQ6ZnVuY3Rpb24oYSxiLGQsZSl7ImZ1bmN0aW9uIiE9dHlwZW9mIGIoKSYmYyhFcnJvcigiVGhlIHZhbHVlIGZvciBhIHN1Ym1pdCBiaW5kaW5nIG11c3QgYmUgYSBmdW5jdGlvbiIpKTtyLmEucyhhLCJzdWJtaXQiLGZ1bmN0aW9uKGQpe3ZhciBoLGc9YigpO3RyeXtoPWcuY2FsbChlLGEpfWZpbmFsbHl7aWYoaCE9PW0pZC5wcmV2ZW50RGVmYXVsdD9kLnByZXZlbnREZWZhdWx0KCk6ZC5yZXR1cm5WYWx1ZT1wfX0pfX07ci5jLnZpc2libGU9e3VwZGF0ZTpmdW5jdGlvbihhLGIpe3ZhciBkPXIuYS5kKGIoKSksZT0ibm9uZSIhPWEuc3R5bGUuZGlzcGxheTtpZihkJiYhZSlhLnN0eWxlLmRpc3BsYXk9IiI7ZWxzZSBpZighZCYmZSlhLnN0eWxlLmRpc3BsYXk9Im5vbmUifX07Ci1yLmMuZW5hYmxlPXt1cGRhdGU6ZnVuY3Rpb24oYSxiKXt2YXIgZD1yLmEuZChiKCkpO2lmKGQmJmEuZGlzYWJsZWQpYS5yZW1vdmVBdHRyaWJ1dGUoImRpc2FibGVkIik7ZWxzZSBpZighZCYmIWEuZGlzYWJsZWQpYS5kaXNhYmxlZD1tfX07ci5jLmRpc2FibGU9e3VwZGF0ZTpmdW5jdGlvbihhLGIpe3IuYy5lbmFibGUudXBkYXRlKGEsZnVuY3Rpb24oKXtyZXR1cm4hci5hLmQoYigpKX0pfX07ZnVuY3Rpb24gRChhLGIsZCl7ZCYmYiE9PXIuaC5xKGEpJiZyLmguUyhhLGIpO2IhPT1yLmgucShhKSYmci5hLnNhKGEsImNoYW5nZSIpfQotci5jLnZhbHVlPXtpbml0OmZ1bmN0aW9uKGEsYixkKXt2YXIgZT1bImNoYW5nZSJdLGY9ZCgpLnZhbHVlVXBkYXRlO2YmJigic3RyaW5nIj09dHlwZW9mIGYmJihmPVtmXSksci5hLkooZSxmKSxlPXIuYS55YShlKSk7ci5hLm4oZSxmdW5jdGlvbihlKXt2YXIgZj1wO3IuYS5DYihlLCJhZnRlciIpJiYoZj1tLGU9ZS5zdWJzdHJpbmcoNSkpO3ZhciBpPWY/ZnVuY3Rpb24oYSl7c2V0VGltZW91dChhLDApfTpmdW5jdGlvbihhKXthKCl9O3IuYS5zKGEsZSxmdW5jdGlvbigpe2koZnVuY3Rpb24oKXt2YXIgZT1iKCksZj1yLmgucShhKTtyLlAoZSk/ZShmKTooZT1kKCksZS5fa29fcHJvcGVydHlfd3JpdGVycyYmZS5fa29fcHJvcGVydHlfd3JpdGVycy52YWx1ZSYmZS5fa29fcHJvcGVydHlfd3JpdGVycy52YWx1ZShmKSl9KX0pfSl9LHVwZGF0ZTpmdW5jdGlvbihhLGIpe3ZhciBkPXIuYS5kKGIoKSksZT1yLmgucShhKSxmPWQhPWU7MD09PWQmJjAhPT1lJiYiMCIhPT1lJiYoZj1tKTtmJiYKLShlPWZ1bmN0aW9uKCl7ci5oLlMoYSxkKX0sZSgpLCJTRUxFQ1QiPT1hLnRhZ05hbWUmJnNldFRpbWVvdXQoZSwwKSk7IlNFTEVDVCI9PWEudGFnTmFtZSYmMDxhLmxlbmd0aCYmRChhLGQscCl9fTsKLXIuYy5vcHRpb25zPXt1cGRhdGU6ZnVuY3Rpb24oYSxiLGQpeyJTRUxFQ1QiIT1hLnRhZ05hbWUmJmMoRXJyb3IoIm9wdGlvbnMgYmluZGluZyBhcHBsaWVzIG9ubHkgdG8gU0VMRUNUIGVsZW1lbnRzIikpO3ZhciBlPTA9PWEubGVuZ3RoLGY9ci5hLmJhKHIuYS5hYShhLmNoaWxkTm9kZXMsZnVuY3Rpb24oYSl7cmV0dXJuIGEudGFnTmFtZSYmIk9QVElPTiI9PWEudGFnTmFtZSYmYS5zZWxlY3RlZH0pLGZ1bmN0aW9uKGEpe3JldHVybiByLmgucShhKXx8YS5pbm5lclRleHR8fGEudGV4dENvbnRlbnR9KSxoPWEuc2Nyb2xsVG9wO2Euc2Nyb2xsVG9wPTA7Zm9yKHZhciBnPXIuYS5kKGIoKSk7MDxhLmxlbmd0aDspci5GKGEub3B0aW9uc1swXSksYS5yZW1vdmUoMCk7aWYoZyl7ZD1kKCk7Im51bWJlciIhPXR5cGVvZiBnLmxlbmd0aCYmKGc9W2ddKTtpZihkLm9wdGlvbnNDYXB0aW9uKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTtyLmEuWihpLGQub3B0aW9uc0NhcHRpb24pOwotci5oLlMoaSxsKTthLmFwcGVuZENoaWxkKGkpfWZvcih2YXIgYj0wLGo9Zy5sZW5ndGg7YjxqO2IrKyl7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiT1BUSU9OIiksaz0ic3RyaW5nIj09dHlwZW9mIGQub3B0aW9uc1ZhbHVlP2dbYl1bZC5vcHRpb25zVmFsdWVdOmdbYl0saz1yLmEuZChrKTtyLmguUyhpLGspO3ZhciBuPWQub3B0aW9uc1RleHQsaz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uKGdbYl0pOiJzdHJpbmciPT10eXBlb2Ygbj9nW2JdW25dOms7aWYoaz09PW98fGs9PT1sKWs9IiI7ci5hLk1hKGksayk7YS5hcHBlbmRDaGlsZChpKX1nPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIk9QVElPTiIpO2I9aT0wO2ZvcihqPWcubGVuZ3RoO2I8ajtiKyspMDw9ci5hLmsoZixyLmgucShnW2JdKSkmJihyLmEuTGEoZ1tiXSxtKSxpKyspO2lmKGgpYS5zY3JvbGxUb3A9aDtlJiYidmFsdWUiaW4gZCYmRChhLHIuYS5kKGQudmFsdWUpLG0pfX19O3IuYy5vcHRpb25zLmxhPSJfX2tvLm9wdGlvblZhbHVlRG9tRGF0YV9fIjsKLXIuYy5zZWxlY3RlZE9wdGlvbnM9e0RhOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxhPWEuY2hpbGROb2RlcyxkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKXt2YXIgZj1hW2RdOyJPUFRJT04iPT1mLnRhZ05hbWUmJmYuc2VsZWN0ZWQmJmIucHVzaChyLmgucShmKSl9cmV0dXJuIGJ9LGluaXQ6ZnVuY3Rpb24oYSxiLGQpe3IuYS5zKGEsImNoYW5nZSIsZnVuY3Rpb24oKXt2YXIgYT1iKCk7ci5QKGEpP2Eoci5jLnNlbGVjdGVkT3B0aW9ucy5EYSh0aGlzKSk6KGE9ZCgpLGEuX2tvX3Byb3BlcnR5X3dyaXRlcnMmJmEuX2tvX3Byb3BlcnR5X3dyaXRlcnMudmFsdWUmJmEuX2tvX3Byb3BlcnR5X3dyaXRlcnMudmFsdWUoci5jLnNlbGVjdGVkT3B0aW9ucy5EYSh0aGlzKSkpfSl9LHVwZGF0ZTpmdW5jdGlvbihhLGIpeyJTRUxFQ1QiIT1hLnRhZ05hbWUmJmMoRXJyb3IoInZhbHVlcyBiaW5kaW5nIGFwcGxpZXMgb25seSB0byBTRUxFQ1QgZWxlbWVudHMiKSk7dmFyIGQ9ci5hLmQoYigpKTtpZihkJiYKLSJudW1iZXIiPT10eXBlb2YgZC5sZW5ndGgpZm9yKHZhciBlPWEuY2hpbGROb2RlcyxmPTAsaD1lLmxlbmd0aDtmPGg7ZisrKXt2YXIgZz1lW2ZdOyJPUFRJT04iPT1nLnRhZ05hbWUmJnIuYS5MYShnLDA8PXIuYS5rKGQsci5oLnEoZykpKX19fTtyLmMudGV4dD17dXBkYXRlOmZ1bmN0aW9uKGEsYil7ci5hLk1hKGEsYigpKX19O3IuYy5odG1sPXtpbml0OmZ1bmN0aW9uKCl7cmV0dXJue2NvbnRyb2xzRGVzY2VuZGFudEJpbmRpbmdzOm19fSx1cGRhdGU6ZnVuY3Rpb24oYSxiKXt2YXIgZD1yLmEuZChiKCkpO3IuYS5aKGEsZCl9fTtyLmMuY3NzPXt1cGRhdGU6ZnVuY3Rpb24oYSxiKXt2YXIgZD1yLmEuZChiKCl8fHt9KSxlO2ZvcihlIGluIGQpaWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgZj1yLmEuZChkW2VdKTtyLmEuUWEoYSxlLGYpfX19Owotci5jLnN0eWxlPXt1cGRhdGU6ZnVuY3Rpb24oYSxiKXt2YXIgZD1yLmEuZChiKCl8fHt9KSxlO2ZvcihlIGluIGQpaWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgZj1yLmEuZChkW2VdKTthLnN0eWxlW2VdPWZ8fCIifX19O3IuYy51bmlxdWVOYW1lPXtpbml0OmZ1bmN0aW9uKGEsYil7aWYoYigpKWEubmFtZT0ia29fdW5pcXVlXyIrICsrci5jLnVuaXF1ZU5hbWUuWmEsKHIuYS5vYnx8ci5hLnBiKSYmYS5tZXJnZUF0dHJpYnV0ZXMoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiPGlucHV0IG5hbWU9JyIrYS5uYW1lKyInLz4iKSxwKX19O3IuYy51bmlxdWVOYW1lLlphPTA7Ci1yLmMuY2hlY2tlZD17aW5pdDpmdW5jdGlvbihhLGIsZCl7ci5hLnMoYSwiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIGU7aWYoImNoZWNrYm94Ij09YS50eXBlKWU9YS5jaGVja2VkO2Vsc2UgaWYoInJhZGlvIj09YS50eXBlJiZhLmNoZWNrZWQpZT1hLnZhbHVlO2Vsc2UgcmV0dXJuO3ZhciBmPWIoKTsiY2hlY2tib3giPT1hLnR5cGUmJnIuYS5kKGYpaW5zdGFuY2VvZiBBcnJheT8oZT1yLmEuayhyLmEuZChmKSxhLnZhbHVlKSxhLmNoZWNrZWQmJjA+ZT9mLnB1c2goYS52YWx1ZSk6IWEuY2hlY2tlZCYmMDw9ZSYmZi5zcGxpY2UoZSwxKSk6ci5QKGYpP2YoKSE9PWUmJmYoZSk6KGY9ZCgpLGYuX2tvX3Byb3BlcnR5X3dyaXRlcnMmJmYuX2tvX3Byb3BlcnR5X3dyaXRlcnMuY2hlY2tlZCYmZi5fa29fcHJvcGVydHlfd3JpdGVycy5jaGVja2VkKGUpKX0pOyJyYWRpbyI9PWEudHlwZSYmIWEubmFtZSYmci5jLnVuaXF1ZU5hbWUuaW5pdChhLGZ1bmN0aW9uKCl7cmV0dXJuIG19KX0sdXBkYXRlOmZ1bmN0aW9uKGEsCi1iKXt2YXIgZD1yLmEuZChiKCkpO2lmKCJjaGVja2JveCI9PWEudHlwZSlhLmNoZWNrZWQ9ZCBpbnN0YW5jZW9mIEFycmF5PzA8PXIuYS5rKGQsYS52YWx1ZSk6ZDtlbHNlIGlmKCJyYWRpbyI9PWEudHlwZSlhLmNoZWNrZWQ9YS52YWx1ZT09ZH19O3IuYy5hdHRyPXt1cGRhdGU6ZnVuY3Rpb24oYSxiKXt2YXIgZD1yLmEuZChiKCkpfHx7fSxlO2ZvcihlIGluIGQpaWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgZj1yLmEuZChkW2VdKTtmPT09cHx8Zj09PW98fGY9PT1sP2EucmVtb3ZlQXR0cmlidXRlKGUpOmEuc2V0QXR0cmlidXRlKGUsZi50b1N0cmluZygpKX19fTsKLXIuYy5oYXNmb2N1cz17aW5pdDpmdW5jdGlvbihhLGIsZCl7ZnVuY3Rpb24gZShhKXt2YXIgZT1iKCk7YSE9ci5hLmQoZSkmJihyLlAoZSk/ZShhKTooZT1kKCksZS5fa29fcHJvcGVydHlfd3JpdGVycyYmZS5fa29fcHJvcGVydHlfd3JpdGVycy5oYXNmb2N1cyYmZS5fa29fcHJvcGVydHlfd3JpdGVycy5oYXNmb2N1cyhhKSkpfXIuYS5zKGEsImZvY3VzIixmdW5jdGlvbigpe2UobSl9KTtyLmEucyhhLCJmb2N1c2luIixmdW5jdGlvbigpe2UobSl9KTtyLmEucyhhLCJibHVyIixmdW5jdGlvbigpe2UocCl9KTtyLmEucyhhLCJmb2N1c291dCIsZnVuY3Rpb24oKXtlKHApfSl9LHVwZGF0ZTpmdW5jdGlvbihhLGIpe3ZhciBkPXIuYS5kKGIoKSk7ZD9hLmZvY3VzKCk6YS5ibHVyKCk7ci5hLnNhKGEsZD8iZm9jdXNpbiI6ImZvY3Vzb3V0Iil9fTsKLXIuY1sid2l0aCJdPXtvOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBiPWEoKTtyZXR1cm57ImlmIjpiLGRhdGE6Yix0ZW1wbGF0ZUVuZ2luZTpyLnAuTX19fSxpbml0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHIuYy50ZW1wbGF0ZS5pbml0KGEsci5jWyJ3aXRoIl0ubyhiKSl9LHVwZGF0ZTpmdW5jdGlvbihhLGIsZCxlLGYpe3JldHVybiByLmMudGVtcGxhdGUudXBkYXRlKGEsci5jWyJ3aXRoIl0ubyhiKSxkLGUsZil9fTtyLmouRFsid2l0aCJdPXA7ci5mLkNbIndpdGgiXT1tO3IuY1siaWYiXT17bzpmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm57ImlmIjphKCksdGVtcGxhdGVFbmdpbmU6ci5wLk19fX0saW5pdDpmdW5jdGlvbihhLGIpe3JldHVybiByLmMudGVtcGxhdGUuaW5pdChhLHIuY1siaWYiXS5vKGIpKX0sdXBkYXRlOmZ1bmN0aW9uKGEsYixkLGUsZil7cmV0dXJuIHIuYy50ZW1wbGF0ZS51cGRhdGUoYSxyLmNbImlmIl0ubyhiKSxkLGUsZil9fTsKLXIuai5EWyJpZiJdPXA7ci5mLkNbImlmIl09bTtyLmMuaWZub3Q9e286ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJue2lmbm90OmEoKSx0ZW1wbGF0ZUVuZ2luZTpyLnAuTX19fSxpbml0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHIuYy50ZW1wbGF0ZS5pbml0KGEsci5jLmlmbm90Lm8oYikpfSx1cGRhdGU6ZnVuY3Rpb24oYSxiLGQsZSxmKXtyZXR1cm4gci5jLnRlbXBsYXRlLnVwZGF0ZShhLHIuYy5pZm5vdC5vKGIpLGQsZSxmKX19O3Iuai5ELmlmbm90PXA7ci5mLkMuaWZub3Q9bTsKLXIuYy5mb3JlYWNoPXtvOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBiPXIuYS5kKGEoKSk7cmV0dXJuIWJ8fCJudW1iZXIiPT10eXBlb2YgYi5sZW5ndGg/e2ZvcmVhY2g6Yix0ZW1wbGF0ZUVuZ2luZTpyLnAuTX06e2ZvcmVhY2g6Yi5kYXRhLGluY2x1ZGVEZXN0cm95ZWQ6Yi5pbmNsdWRlRGVzdHJveWVkLGFmdGVyQWRkOmIuYWZ0ZXJBZGQsYmVmb3JlUmVtb3ZlOmIuYmVmb3JlUmVtb3ZlLGFmdGVyUmVuZGVyOmIuYWZ0ZXJSZW5kZXIsdGVtcGxhdGVFbmdpbmU6ci5wLk19fX0saW5pdDpmdW5jdGlvbihhLGIpe3JldHVybiByLmMudGVtcGxhdGUuaW5pdChhLHIuYy5mb3JlYWNoLm8oYikpfSx1cGRhdGU6ZnVuY3Rpb24oYSxiLGQsZSxmKXtyZXR1cm4gci5jLnRlbXBsYXRlLnVwZGF0ZShhLHIuYy5mb3JlYWNoLm8oYiksZCxlLGYpfX07ci5qLkQuZm9yZWFjaD1wO3IuZi5DLmZvcmVhY2g9bTtyLmIoImtvLmFsbG93ZWRWaXJ0dWFsRWxlbWVudEJpbmRpbmdzIixyLmYuQyk7Ci1yLnQ9ZnVuY3Rpb24oKXt9O3IudC5wcm90b3R5cGUucmVuZGVyVGVtcGxhdGVTb3VyY2U9ZnVuY3Rpb24oKXtjKCJPdmVycmlkZSByZW5kZXJUZW1wbGF0ZVNvdXJjZSIpfTtyLnQucHJvdG90eXBlLmNyZWF0ZUphdmFTY3JpcHRFdmFsdWF0b3JCbG9jaz1mdW5jdGlvbigpe2MoIk92ZXJyaWRlIGNyZWF0ZUphdmFTY3JpcHRFdmFsdWF0b3JCbG9jayIpfTtyLnQucHJvdG90eXBlLm1ha2VUZW1wbGF0ZVNvdXJjZT1mdW5jdGlvbihhKXtpZigic3RyaW5nIj09dHlwZW9mIGEpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpO2J8fGMoRXJyb3IoIkNhbm5vdCBmaW5kIHRlbXBsYXRlIHdpdGggSUQgIithKSk7cmV0dXJuIG5ldyByLm0uZyhiKX1pZigxPT1hLm5vZGVUeXBlfHw4PT1hLm5vZGVUeXBlKXJldHVybiBuZXcgci5tLkkoYSk7YyhFcnJvcigiVW5rbm93biB0ZW1wbGF0ZSB0eXBlOiAiK2EpKX07Ci1yLnQucHJvdG90eXBlLnJlbmRlclRlbXBsYXRlPWZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gdGhpcy5yZW5kZXJUZW1wbGF0ZVNvdXJjZSh0aGlzLm1ha2VUZW1wbGF0ZVNvdXJjZShhKSxiLGQpfTtyLnQucHJvdG90eXBlLmlzVGVtcGxhdGVSZXdyaXR0ZW49ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYWxsb3dUZW1wbGF0ZVJld3JpdGluZz09PXA/bTp0aGlzLlcmJnRoaXMuV1thXT9tOnRoaXMubWFrZVRlbXBsYXRlU291cmNlKGEpLmRhdGEoImlzUmV3cml0dGVuIil9O3IudC5wcm90b3R5cGUucmV3cml0ZVRlbXBsYXRlPWZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcy5tYWtlVGVtcGxhdGVTb3VyY2UoYSksZT1iKGQudGV4dCgpKTtkLnRleHQoZSk7ZC5kYXRhKCJpc1Jld3JpdHRlbiIsbSk7aWYoInN0cmluZyI9PXR5cGVvZiBhKXRoaXMuVz10aGlzLld8fHt9LHRoaXMuV1thXT1tfTtyLmIoImtvLnRlbXBsYXRlRW5naW5lIixyLnQpOwotci4kPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIsZCl7Zm9yKHZhciBhPXIuai5ZKGEpLGc9ci5qLkQsaT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgaj1hW2ldLmtleTtpZihnLmhhc093blByb3BlcnR5KGopKXt2YXIgaz1nW2pdOyJmdW5jdGlvbiI9PT10eXBlb2Ygaz8oaj1rKGFbaV0udmFsdWUpKSYmYyhFcnJvcihqKSk6a3x8YyhFcnJvcigiVGhpcyB0ZW1wbGF0ZSBlbmdpbmUgZG9lcyBub3Qgc3VwcG9ydCB0aGUgJyIraisiJyBiaW5kaW5nIHdpdGhpbiBpdHMgdGVtcGxhdGVzIikpfX1hPSJrby50ZW1wbGF0ZVJld3JpdGluZy5hcHBseU1lbW9pemVkQmluZGluZ3NUb05leHRTaWJsaW5nKGZ1bmN0aW9uKCkgeyAgICAgICAgICAgICByZXR1cm4gKGZ1bmN0aW9uKCkgeyByZXR1cm4geyAiK3Iuai5pYShhKSsiIH0gfSkoKSAgICAgICAgIH0pIjtyZXR1cm4gZC5jcmVhdGVKYXZhU2NyaXB0RXZhbHVhdG9yQmxvY2soYSkrYn12YXIgYj0vKDxbYS16XStcZCooXHMrKD8hZGF0YS1iaW5kPSlbYS16MC05XC1dKyg9KFwiW15cIl0qXCJ8XCdbXlwnXSpcJykpPykqXHMrKWRhdGEtYmluZD0oWyInXSkoW1xzXFNdKj8pXDUvZ2ksCi1kPS88XCEtLVxzKmtvXGJccyooW1xzXFNdKj8pXHMqLS1cPi9nO3JldHVybntnYjpmdW5jdGlvbihhLGIpe2IuaXNUZW1wbGF0ZVJld3JpdHRlbihhKXx8Yi5yZXdyaXRlVGVtcGxhdGUoYSxmdW5jdGlvbihhKXtyZXR1cm4gci4kLnViKGEsYil9KX0sdWI6ZnVuY3Rpb24oZSxmKXtyZXR1cm4gZS5yZXBsYWNlKGIsZnVuY3Rpb24oYixlLGQsaixrLG4sdCl7cmV0dXJuIGEodCxlLGYpfSkucmVwbGFjZShkLGZ1bmN0aW9uKGIsZSl7cmV0dXJuIGEoZSwiPFwhLS0ga28gLS1cPiIsZil9KX0sVWE6ZnVuY3Rpb24oYSl7cmV0dXJuIHIuci5rYShmdW5jdGlvbihiLGQpe2IubmV4dFNpYmxpbmcmJnIueGEoYi5uZXh0U2libGluZyxhLGQpfSl9fX0oKTtyLmIoImtvLnRlbXBsYXRlUmV3cml0aW5nIixyLiQpO3IuYigia28udGVtcGxhdGVSZXdyaXRpbmcuYXBwbHlNZW1vaXplZEJpbmRpbmdzVG9OZXh0U2libGluZyIsci4kLlVhKTtyLm09e307ci5tLmc9ZnVuY3Rpb24oYSl7dGhpcy5nPWF9Owotci5tLmcucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oKXtpZigwPT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiJzY3JpcHQiPT10aGlzLmcudGFnTmFtZS50b0xvd2VyQ2FzZSgpP3RoaXMuZy50ZXh0OnRoaXMuZy5pbm5lckhUTUw7dmFyIGE9YXJndW1lbnRzWzBdOyJzY3JpcHQiPT10aGlzLmcudGFnTmFtZS50b0xvd2VyQ2FzZSgpP3RoaXMuZy50ZXh0PWE6ci5hLloodGhpcy5nLGEpfTtyLm0uZy5wcm90b3R5cGUuZGF0YT1mdW5jdGlvbihhKXtpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gci5hLmUuZ2V0KHRoaXMuZywidGVtcGxhdGVTb3VyY2VEYXRhXyIrYSk7ci5hLmUuc2V0KHRoaXMuZywidGVtcGxhdGVTb3VyY2VEYXRhXyIrYSxhcmd1bWVudHNbMV0pfTtyLm0uST1mdW5jdGlvbihhKXt0aGlzLmc9YX07ci5tLkkucHJvdG90eXBlPW5ldyByLm0uZzsKLXIubS5JLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKCl7aWYoMD09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gci5hLmUuZ2V0KHRoaXMuZywiX19rb19hbm9uX3RlbXBsYXRlX18iKTtyLmEuZS5zZXQodGhpcy5nLCJfX2tvX2Fub25fdGVtcGxhdGVfXyIsYXJndW1lbnRzWzBdKX07ci5iKCJrby50ZW1wbGF0ZVNvdXJjZXMiLHIubSk7ci5iKCJrby50ZW1wbGF0ZVNvdXJjZXMuZG9tRWxlbWVudCIsci5tLmcpO3IuYigia28udGVtcGxhdGVTb3VyY2VzLmFub255bW91c1RlbXBsYXRlIixyLm0uSSk7Ci0oZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYixkKXtmb3IodmFyIGc9MDtub2RlPWFbZ107ZysrKW5vZGUucGFyZW50Tm9kZT09PWImJigxPT09bm9kZS5ub2RlVHlwZXx8OD09PW5vZGUubm9kZVR5cGUpJiZkKG5vZGUpfWZ1bmN0aW9uIGIoYSxiLGgsZyxpKXt2YXIgaT1pfHx7fSxqPWkudGVtcGxhdGVFbmdpbmV8fGQ7ci4kLmdiKGgsaik7aD1qLnJlbmRlclRlbXBsYXRlKGgsZyxpKTsoIm51bWJlciIhPXR5cGVvZiBoLmxlbmd0aHx8MDxoLmxlbmd0aCYmIm51bWJlciIhPXR5cGVvZiBoWzBdLm5vZGVUeXBlKSYmYygiVGVtcGxhdGUgZW5naW5lIG11c3QgcmV0dXJuIGFuIGFycmF5IG9mIERPTSBub2RlcyIpO2o9cDtzd2l0Y2goYil7Y2FzZSAicmVwbGFjZUNoaWxkcmVuIjpyLmYub2EoYSxoKTtqPW07YnJlYWs7Y2FzZSAicmVwbGFjZU5vZGUiOnIuYS5KYShhLGgpO2o9bTticmVhaztjYXNlICJpZ25vcmVUYXJnZXROb2RlIjpicmVhaztkZWZhdWx0OmMoRXJyb3IoIlVua25vd24gcmVuZGVyTW9kZTogIisKLWIpKX1qJiYoci51YShoLGcpLGkuYWZ0ZXJSZW5kZXImJmkuYWZ0ZXJSZW5kZXIoaCxnLiRkYXRhKSk7cmV0dXJuIGh9dmFyIGQ7ci5wYT1mdW5jdGlvbihhKXthIT1sJiYhKGEgaW5zdGFuY2VvZiByLnQpJiZjKCJ0ZW1wbGF0ZUVuZ2luZSBtdXN0IGluaGVyaXQgZnJvbSBrby50ZW1wbGF0ZUVuZ2luZSIpO2Q9YX07ci51YT1mdW5jdGlvbihiLGQpe3ZhciBoPXIuYS5KKFtdLGIpLGc9MDxiLmxlbmd0aD9iWzBdLnBhcmVudE5vZGU6bzthKGgsZyxmdW5jdGlvbihhKXtyLndhKGQsYSl9KTthKGgsZyxmdW5jdGlvbihhKXtyLnIuU2EoYSxbZF0pfSl9O3IubmE9ZnVuY3Rpb24oYSxmLGgsZyxpKXtoPWh8fHt9OyhoLnRlbXBsYXRlRW5naW5lfHxkKT09bCYmYygiU2V0IGEgdGVtcGxhdGUgZW5naW5lIGJlZm9yZSBjYWxsaW5nIHJlbmRlclRlbXBsYXRlIik7aT1pfHwicmVwbGFjZUNoaWxkcmVuIjtpZihnKXt2YXIgaj1nLm5vZGVUeXBlP2c6MDxnLmxlbmd0aD9nWzBdOm87cmV0dXJuIG5ldyByLmkoZnVuY3Rpb24oKXt2YXIgZD0KLWYmJmYgaW5zdGFuY2VvZiByLks/ZjpuZXcgci5LKHIuYS5kKGYpKSxuPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoZC4kZGF0YSk6YSxkPWIoZyxpLG4sZCxoKTsicmVwbGFjZU5vZGUiPT1pJiYoZz1kLGo9Zy5ub2RlVHlwZT9nOjA8Zy5sZW5ndGg/Z1swXTpvKX0sbyx7ZGlzcG9zZVdoZW46ZnVuY3Rpb24oKXtyZXR1cm4hanx8IXIuYS5nYShqKX0sZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkOmomJiJyZXBsYWNlTm9kZSI9PWk/ai5wYXJlbnROb2RlOmp9KX1yZXR1cm4gci5yLmthKGZ1bmN0aW9uKGIpe3IubmEoYSxmLGgsYiwicmVwbGFjZU5vZGUiKX0pfTtyLkFiPWZ1bmN0aW9uKGEsZCxoLGcsaSl7ZnVuY3Rpb24gaihhLGIpe3ZhciBkPWsoYSk7ci51YShiLGQpO2guYWZ0ZXJSZW5kZXImJmguYWZ0ZXJSZW5kZXIoYixkLiRkYXRhKX1mdW5jdGlvbiBrKGEpe3JldHVybiBpLmNyZWF0ZUNoaWxkQ29udGV4dChyLmEuZChhKSl9cmV0dXJuIG5ldyByLmkoZnVuY3Rpb24oKXt2YXIgaT0KLXIuYS5kKGQpfHxbXTsidW5kZWZpbmVkIj09dHlwZW9mIGkubGVuZ3RoJiYoaT1baV0pO2k9ci5hLmFhKGksZnVuY3Rpb24oYSl7cmV0dXJuIGguaW5jbHVkZURlc3Ryb3llZHx8YT09PWx8fGE9PT1vfHwhci5hLmQoYS5fZGVzdHJveSl9KTtyLmEuS2EoZyxpLGZ1bmN0aW9uKGQpe3ZhciBmPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoZCk6YTtyZXR1cm4gYihvLCJpZ25vcmVUYXJnZXROb2RlIixmLGsoZCksaCl9LGgsail9LG8se2Rpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDpnfSl9O3IuYy50ZW1wbGF0ZT17aW5pdDpmdW5jdGlvbihhLGIpe3ZhciBkPXIuYS5kKGIoKSk7InN0cmluZyIhPXR5cGVvZiBkJiYhZC5uYW1lJiYxPT1hLm5vZGVUeXBlJiYoKG5ldyByLm0uSShhKSkudGV4dChhLmlubmVySFRNTCksci5hLlUoYSkpO3JldHVybntjb250cm9sc0Rlc2NlbmRhbnRCaW5kaW5nczptfX0sdXBkYXRlOmZ1bmN0aW9uKGEsYixkLGcsaSl7Yj1yLmEuZChiKCkpO2c9bTsic3RyaW5nIj09Ci10eXBlb2YgYj9kPWI6KGQ9Yi5uYW1lLCJpZiJpbiBiJiYoZz1nJiZyLmEuZChiWyJpZiJdKSksImlmbm90ImluIGImJihnPWcmJiFyLmEuZChiLmlmbm90KSkpO3ZhciBqPW87Im9iamVjdCI9PT10eXBlb2YgYiYmImZvcmVhY2giaW4gYj9qPXIuQWIoZHx8YSxnJiZiLmZvcmVhY2h8fFtdLGIsYSxpKTpnPyhpPSJvYmplY3QiPT10eXBlb2YgYiYmImRhdGEiaW4gYj9pLmNyZWF0ZUNoaWxkQ29udGV4dChyLmEuZChiLmRhdGEpKTppLGo9ci5uYShkfHxhLGksYixhKSk6ci5mLmhhKGEpO2k9ajsoYj1yLmEuZS5nZXQoYSwiX19rb19fdGVtcGxhdGVTdWJzY3JpcHRpb25Eb21EYXRhS2V5X18iKSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLnYmJmIudigpO3IuYS5lLnNldChhLCJfX2tvX190ZW1wbGF0ZVN1YnNjcmlwdGlvbkRvbURhdGFLZXlfXyIsaSl9fTtyLmouRC50ZW1wbGF0ZT1mdW5jdGlvbihhKXthPXIuai5ZKGEpO3JldHVybiAxPT1hLmxlbmd0aCYmYVswXS51bmtub3duP286ci5qLnJiKGEsCi0ibmFtZSIpP286IlRoaXMgdGVtcGxhdGUgZW5naW5lIGRvZXMgbm90IHN1cHBvcnQgYW5vbnltb3VzIHRlbXBsYXRlcyBuZXN0ZWQgd2l0aGluIGl0cyB0ZW1wbGF0ZXMifTtyLmYuQy50ZW1wbGF0ZT1tfSkoKTtyLmIoImtvLnNldFRlbXBsYXRlRW5naW5lIixyLnBhKTtyLmIoImtvLnJlbmRlclRlbXBsYXRlIixyLm5hKTsKLXIuYS5OPWZ1bmN0aW9uKGEsYixkKXtpZihkPT09bClyZXR1cm4gci5hLk4oYSxiLDEpfHxyLmEuTihhLGIsMTApfHxyLmEuTihhLGIsTnVtYmVyLk1BWF9WQUxVRSk7Zm9yKHZhciBhPWF8fFtdLGI9Ynx8W10sZT1hLGY9YixoPVtdLGc9MDtnPD1mLmxlbmd0aDtnKyspaFtnXT1bXTtmb3IodmFyIGc9MCxpPU1hdGgubWluKGUubGVuZ3RoLGQpO2c8PWk7ZysrKWhbMF1bZ109ZztnPTE7Zm9yKGk9TWF0aC5taW4oZi5sZW5ndGgsZCk7Zzw9aTtnKyspaFtnXVswXT1nO2Zvcih2YXIgaT1lLmxlbmd0aCxqLGs9Zi5sZW5ndGgsZz0xO2c8PWk7ZysrKXtqPU1hdGgubWF4KDEsZy1kKTtmb3IodmFyIG49TWF0aC5taW4oayxnK2QpO2o8PW47aisrKWhbal1bZ109ZVtnLTFdPT09ZltqLTFdP2hbai0xXVtnLTFdOk1hdGgubWluKGhbai0xXVtnXT09PWw/TnVtYmVyLk1BWF9WQUxVRTpoW2otMV1bZ10rMSxoW2pdW2ctMV09PT1sP051bWJlci5NQVhfVkFMVUU6aFtqXVtnLTFdKzEpfWQ9YS5sZW5ndGg7Ci1lPWIubGVuZ3RoO2Y9W107Zz1oW2VdW2RdO2lmKGc9PT1sKWg9bztlbHNle2Zvcig7MDxkfHwwPGU7KXtpPWhbZV1bZF07az0wPGU/aFtlLTFdW2RdOmcrMTtuPTA8ZD9oW2VdW2QtMV06ZysxO2o9MDxlJiYwPGQ/aFtlLTFdW2QtMV06ZysxO2lmKGs9PT1sfHxrPGktMSlrPWcrMTtpZihuPT09bHx8bjxpLTEpbj1nKzE7ajxpLTEmJihqPWcrMSk7azw9biYmazxqPyhmLnB1c2goe3N0YXR1czoiYWRkZWQiLHZhbHVlOmJbZS0xXX0pLGUtLSk6KG48ayYmbjxqP2YucHVzaCh7c3RhdHVzOiJkZWxldGVkIix2YWx1ZTphW2QtMV19KTooZi5wdXNoKHtzdGF0dXM6InJldGFpbmVkIix2YWx1ZTphW2QtMV19KSxlLS0pLGQtLSl9aD1mLnJldmVyc2UoKX1yZXR1cm4gaH07ci5iKCJrby51dGlscy5jb21wYXJlQXJyYXlzIixyLmEuTik7Ci0oZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe2lmKDI8YS5sZW5ndGgpe2Zvcih2YXIgYj1hWzBdLGY9YVthLmxlbmd0aC0xXSxoPVtiXTtiIT09Zjspe2I9Yi5uZXh0U2libGluZztpZighYilyZXR1cm47aC5wdXNoKGIpfUFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoYSxbMCxhLmxlbmd0aF0uY29uY2F0KGgpKX19ZnVuY3Rpb24gYihiLGUsZixoKXt2YXIgZz1bXSxiPXIuaShmdW5jdGlvbigpe3ZhciBiPWUoZil8fFtdOzA8Zy5sZW5ndGgmJihhKGcpLHIuYS5KYShnLGIpLGgmJmgoZixiKSk7Zy5zcGxpY2UoMCxnLmxlbmd0aCk7ci5hLkooZyxiKX0sbyx7ZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkOmIsZGlzcG9zZVdoZW46ZnVuY3Rpb24oKXtyZXR1cm4gMD09Zy5sZW5ndGh8fCFyLmEuZ2EoZ1swXSl9fSk7cmV0dXJue3NiOmcsaTpifX1yLmEuS2E9ZnVuY3Rpb24oZCxlLGYsaCxnKXtmb3IodmFyIGU9ZXx8W10saD1ofHx7fSxpPXIuYS5lLmdldChkLCJzZXREb21Ob2RlQ2hpbGRyZW5Gcm9tQXJyYXlNYXBwaW5nX2xhc3RNYXBwaW5nUmVzdWx0Iik9PT0KLWwsaj1yLmEuZS5nZXQoZCwic2V0RG9tTm9kZUNoaWxkcmVuRnJvbUFycmF5TWFwcGluZ19sYXN0TWFwcGluZ1Jlc3VsdCIpfHxbXSxrPXIuYS5iYShqLGZ1bmN0aW9uKGEpe3JldHVybiBhLlZhfSksbj1yLmEuTihrLGUpLGU9W10sdD0wLHE9W10saz1bXSx2PW8scz0wLHc9bi5sZW5ndGg7czx3O3MrKylzd2l0Y2gobltzXS5zdGF0dXMpe2Nhc2UgInJldGFpbmVkIjp2YXIgeD1qW3RdO2UucHVzaCh4KTswPHguTy5sZW5ndGgmJih2PXguT1t4Lk8ubGVuZ3RoLTFdKTt0Kys7YnJlYWs7Y2FzZSAiZGVsZXRlZCI6alt0XS5pLnYoKTthKGpbdF0uTyk7ci5hLm4oalt0XS5PLGZ1bmN0aW9uKGEpe3EucHVzaCh7ZWxlbWVudDphLGluZGV4OnMsdmFsdWU6bltzXS52YWx1ZX0pO3Y9YX0pO3QrKzticmVhaztjYXNlICJhZGRlZCI6dmFyIHg9bltzXS52YWx1ZSx6PWIoZCxmLHgsZyksdT16LnNiO2UucHVzaCh7VmE6bltzXS52YWx1ZSxPOnUsaTp6Lml9KTtmb3IodmFyIHo9MCx5PXUubGVuZ3RoO3o8Ci15O3orKyl7dmFyIEE9dVt6XTtrLnB1c2goe2VsZW1lbnQ6QSxpbmRleDpzLHZhbHVlOm5bc10udmFsdWV9KTt2PT1vP3IuZi54YihkLEEpOnIuZi5tYihkLEEsdik7dj1BfWcmJmcoeCx1KX1yLmEubihxLGZ1bmN0aW9uKGEpe3IuRihhLmVsZW1lbnQpfSk7Zj1wO2lmKCFpKXtpZihoLmFmdGVyQWRkKWZvcihzPTA7czxrLmxlbmd0aDtzKyspaC5hZnRlckFkZChrW3NdLmVsZW1lbnQsa1tzXS5pbmRleCxrW3NdLnZhbHVlKTtpZihoLmJlZm9yZVJlbW92ZSl7Zm9yKHM9MDtzPHEubGVuZ3RoO3MrKyloLmJlZm9yZVJlbW92ZShxW3NdLmVsZW1lbnQscVtzXS5pbmRleCxxW3NdLnZhbHVlKTtmPW19fWZ8fHIuYS5uKHEsZnVuY3Rpb24oYSl7ci5yZW1vdmVOb2RlKGEuZWxlbWVudCl9KTtyLmEuZS5zZXQoZCwic2V0RG9tTm9kZUNoaWxkcmVuRnJvbUFycmF5TWFwcGluZ19sYXN0TWFwcGluZ1Jlc3VsdCIsZSl9fSkoKTsKLXIuYigia28udXRpbHMuc2V0RG9tTm9kZUNoaWxkcmVuRnJvbUFycmF5TWFwcGluZyIsci5hLkthKTtyLnA9ZnVuY3Rpb24oKXt0aGlzLmFsbG93VGVtcGxhdGVSZXdyaXRpbmc9cH07ci5wLnByb3RvdHlwZT1uZXcgci50O3IucC5wcm90b3R5cGUucmVuZGVyVGVtcGxhdGVTb3VyY2U9ZnVuY3Rpb24oYSl7YT1hLnRleHQoKTtyZXR1cm4gci5hLm1hKGEpfTtyLnAuTT1uZXcgci5wO3IucGEoci5wLk0pO3IuYigia28ubmF0aXZlVGVtcGxhdGVFbmdpbmUiLHIucCk7Ci0oZnVuY3Rpb24oKXtyLmphPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5xYj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgalF1ZXJ5fHwhalF1ZXJ5LnRtcGwpcmV0dXJuIDA7dHJ5e2lmKDA8PWpRdWVyeS50bXBsLnRhZy50bXBsLm9wZW4udG9TdHJpbmcoKS5pbmRleE9mKCJfXyIpKXJldHVybiAyfWNhdGNoKGEpe31yZXR1cm4gMX0oKTt0aGlzLnJlbmRlclRlbXBsYXRlU291cmNlPWZ1bmN0aW9uKGQsZSxmKXtmPWZ8fHt9OzI+YSYmYyhFcnJvcigiWW91ciB2ZXJzaW9uIG9mIGpRdWVyeS50bXBsIGlzIHRvbyBvbGQuIFBsZWFzZSB1cGdyYWRlIHRvIGpRdWVyeS50bXBsIDEuMC4wcHJlIG9yIGxhdGVyLiIpKTt2YXIgaD1kLmRhdGEoInByZWNvbXBpbGVkIik7aHx8KGg9ZC50ZXh0KCl8fCIiLGg9alF1ZXJ5LnRlbXBsYXRlKG8sInt7a29fd2l0aCAkaXRlbS5rb0JpbmRpbmdDb250ZXh0fX0iK2grInt7L2tvX3dpdGh9fSIpLGQuZGF0YSgicHJlY29tcGlsZWQiLGgpKTsKLWQ9W2UuJGRhdGFdO2U9alF1ZXJ5LmV4dGVuZCh7a29CaW5kaW5nQ29udGV4dDplfSxmLnRlbXBsYXRlT3B0aW9ucyk7ZT1qUXVlcnkudG1wbChoLGQsZSk7ZS5hcHBlbmRUbyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7alF1ZXJ5LmZyYWdtZW50cz17fTtyZXR1cm4gZX07dGhpcy5jcmVhdGVKYXZhU2NyaXB0RXZhbHVhdG9yQmxvY2s9ZnVuY3Rpb24oYSl7cmV0dXJuInt7a29fY29kZSAoKGZ1bmN0aW9uKCkgeyByZXR1cm4gIithKyIgfSkoKSkgfX0ifTt0aGlzLmFkZFRlbXBsYXRlPWZ1bmN0aW9uKGEsYil7ZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgdHlwZT0ndGV4dC9odG1sJyBpZD0nIithKyInPiIrYisiPFwvc2NyaXB0PiIpfTtpZigwPGEpalF1ZXJ5LnRtcGwudGFnLmtvX2NvZGU9e29wZW46Il9fLnB1c2goJDEgfHwgJycpOyJ9LGpRdWVyeS50bXBsLnRhZy5rb193aXRoPXtvcGVuOiJ3aXRoKCQxKSB7IixjbG9zZToifSAifX07ci5qYS5wcm90b3R5cGU9bmV3IHIudDsKLXZhciBhPW5ldyByLmphOzA8YS5xYiYmci5wYShhKTtyLmIoImtvLmpxdWVyeVRtcGxUZW1wbGF0ZUVuZ2luZSIsci5qYSl9KSgpOwotfSkod2luZG93KTsgICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL21haW4ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9iZW5jaC9tYWluLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDM4MTA1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL21haW4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIC0qLSBjb2Rpbmc6IGFzY2lpIC0qLQotciIiIgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gQmVuY2htYXJrIGpzbWluIGltcGxlbWVudGF0aW9ucwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUJlbmNobWFyayBqc21pbiBpbXBsZW1lbnRhdGlvbnMuCi0KLTpDb3B5cmlnaHQ6Ci0KLSBDb3B5cmlnaHQgMjAxMSAtIDIwMTUKLSBBbmRyXHhlOSBNYWxvIG9yIGhpcyBsaWNlbnNvcnMsIGFzIGFwcGxpY2FibGUKLQotOkxpY2Vuc2U6Ci0KLSBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLVVzYWdlOjoKLQotICAgIHB5dGhvbiAtbWJlbmNoLm1haW4gWy1jIENPVU5UXSBbLXAgZmlsZV0ganNmaWxlIC4uLgotCi0gICAgLWMgQ09VTlQgIG51bWJlciBvZiBydW5zIHBlciBqc2ZpbGUgYW5kIG1pbmlmaWVyLiBEZWZhdWx0cyB0byAxMC4KLSAgICAtcCBmaWxlICAgRmlsZSB0byB3cml0ZSB0aGUgYmVuY2htYXJrIHJlc3VsdHMgaW4gKHBpY2tsZWQpCi0KLSIiIgotaWYgX19kb2NfXzoKLSAgICBfX2RvY19fID0gX19kb2NfXy5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpCi1fX2F1dGhvcl9fID0gciJBbmRyXHhlOSBNYWxvIi5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpCi1fX2RvY2Zvcm1hdF9fID0gInJlc3RydWN0dXJlZHRleHQgZW4iCi1fX2xpY2Vuc2VfXyA9ICJBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAiCi1fX3ZlcnNpb25fXyA9ICIxLjAuMCIKLQotaW1wb3J0IHN5cyBhcyBfc3lzCi1pbXBvcnQgdGltZSBhcyBfdGltZQotCi1pbXBvcnRfbm90ZXMgPSBbXQotY2xhc3MganNtaW5zKG9iamVjdCk6Ci0gICAgZnJvbSBiZW5jaCBpbXBvcnQganNtaW4gYXMgcF8wMV9zaW1wbGVfcG9ydAotICAgIGlmIF9zeXMudmVyc2lvbl9pbmZvID49ICgyLCA0KToKLSAgICAgICAgZnJvbSBiZW5jaCBpbXBvcnQganNtaW5fMl8wXzkgYXMgcF8wMl9qc21pbl8yXzBfOQotICAgIGVsc2U6Ci0gICAgICAgIGltcG9ydF9ub3Rlcy5hcHBlbmQoCi0gICAgICAgICAgICAianNtaW5fMl8wXzkgYXZhaWxhYmxlIGZvciBweXRob24gMi40IGFuZCBsYXRlci4uLiIKLSAgICAgICAgKQotICAgICAgICBwcmludChpbXBvcnRfbm90ZXNbLTFdKQotCi0gICAgaW1wb3J0IHJqc21pbiBhcyBwXzA1X3Jqc21pbgotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IF9yanNtaW4gYXMgcF8wNl9fcmpzbWluCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBpbXBvcnRfbm90ZXMuYXBwZW5kKCJfcmpzbWluIChDLVBvcnQpIG5vdCBhdmFpbGFibGUiKQotICAgICAgICBwcmludChpbXBvcnRfbm90ZXNbLTFdKQotanNtaW5zLnBfMDVfcmpzbWluLmpzbWluID0ganNtaW5zLnBfMDVfcmpzbWluLl9tYWtlX2pzbWluKAotICAgIHB5dGhvbl9vbmx5PVRydWUKLSkKLXByaW50KCJQeXRob24gUmVsZWFzZTogJXMiICUgIi4iLmpvaW4obWFwKHN0ciwgX3N5cy52ZXJzaW9uX2luZm9bOjNdKSkpCi1wcmludCgiIikKLQotCi1kZWYgc2x1cnAoZmlsZW5hbWUpOgotICAgICIiIiBMb2FkIGEgZmlsZSAiIiIKLSAgICBmcCA9IG9wZW4oZmlsZW5hbWUpCi0gICAgdHJ5OgotICAgICAgICByZXR1cm4gZnAucmVhZCgpCi0gICAgZmluYWxseToKLSAgICAgICAgZnAuY2xvc2UoKQotCi0KLWRlZiBwcmludF8oKnZhbHVlLCAqKmt3YXJncyk6Ci0gICAgIiIiIFByaW50IHN0dWZmICIiIgotICAgIChrd2FyZ3MuZ2V0KCdmaWxlJykgb3IgX3N5cy5zdGRvdXQpLndyaXRlKAotICAgICAgICAnJy5qb2luKHZhbHVlKSArIGt3YXJncy5nZXQoJ2VuZCcsICdcbicpCi0gICAgKQotCi0KLWRlZiBiZW5jaChmaWxlbmFtZXMsIGNvdW50KToKLSAgICAiIiIKLSAgICBCZW5jaG1hcmsgdGhlIG1pbmlmaWVycyB3aXRoIGdpdmVuIGphdmFzY3JpcHQgc2FtcGxlcwotCi0gICAgOlBhcmFtZXRlcnM6Ci0gICAgICBgZmlsZW5hbWVzYCA6IHNlcXVlbmNlCi0gICAgICAgIExpc3Qgb2YgZmlsZW5hbWVzCi0KLSAgICAgIGBjb3VudGAgOiBgYGludGBgCi0gICAgICAgIE51bWJlciBvZiBydW5zIHBlciBqcyBmaWxlIGFuZCBtaW5pZmllcgotCi0gICAgOkV4Y2VwdGlvbnM6Ci0gICAgICAtIGBSdW50aW1lRXJyb3JgIDogZW1wdHkgZmlsZW5hbWVzIHNlcXVlbmNlCi0gICAgIiIiCi0gICAgaWYgbm90IGZpbGVuYW1lczoKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJNaXNzaW5nIGZpbGVzIHRvIGJlbmNobWFyayIpCi0gICAgdHJ5OgotICAgICAgICB4cmFuZ2UKLSAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICB4cmFuZ2UgPSByYW5nZQotICAgIHRyeToKLSAgICAgICAgY21wCi0gICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgY21wID0gbGFtYmRhIGEsIGI6IChhID4gYikgLSAoYSA8IGIpCi0KLSAgICBwb3J0cyA9IFtpdGVtIGZvciBpdGVtIGluIGRpcihqc21pbnMpIGlmIGl0ZW0uc3RhcnRzd2l0aCgncF8nKV0KLSAgICBwb3J0cy5zb3J0KCkKLSAgICBzcGFjZSA9IG1heChtYXAobGVuLCBwb3J0cykpIC0gNAotICAgIHBvcnRzID0gWyhpdGVtWzU6XSwgZ2V0YXR0cihqc21pbnMsIGl0ZW0pLmpzbWluKSBmb3IgaXRlbSBpbiBwb3J0c10KLSAgICBmbHVzaCA9IF9zeXMuc3Rkb3V0LmZsdXNoCi0KLSAgICBzdHJ1Y3QgPSBbXQotICAgIGlucHV0cyA9IFsoZmlsZW5hbWUsIHNsdXJwKGZpbGVuYW1lKSkgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lc10KLSAgICBmb3IgZmlsZW5hbWUsIHNjcmlwdCBpbiBpbnB1dHM6Ci0gICAgICAgIHByaW50XygiQmVuY2htYXJraW5nICVyLi4uIiAlIGZpbGVuYW1lLCBlbmQ9IiAiKQotICAgICAgICBmbHVzaCgpCi0gICAgICAgIG91dHB1dHMgPSBbXQotICAgICAgICBmb3IgXywganNtaW4gaW4gcG9ydHM6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoanNtaW4oc2NyaXB0KSkKLSAgICAgICAgICAgIGV4Y2VwdCAoU3lzdGVtRXhpdCwgS2V5Ym9hcmRJbnRlcnJ1cHQpOgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoTm9uZSkKLSAgICAgICAgc3RydWN0LmFwcGVuZChkaWN0KAotICAgICAgICAgICAgZmlsZW5hbWU9ZmlsZW5hbWUsCi0gICAgICAgICAgICBzaXplcz1bCi0gICAgICAgICAgICAgICAgKGl0ZW0gaXMgbm90IE5vbmUgYW5kIGxlbihpdGVtKSBvciBOb25lKSBmb3IgaXRlbSBpbiBvdXRwdXRzCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgc2l6ZT1sZW4oc2NyaXB0KSwKLSAgICAgICAgICAgIG1lc3NhZ2VzPVtdLAotICAgICAgICAgICAgdGltZXM9W10sCi0gICAgICAgICkpCi0gICAgICAgIHByaW50XygiKCUuMWYgS2lCKSIgJSAoc3RydWN0Wy0xXVsnc2l6ZSddIC8gMTAyNC4wLCkpCi0gICAgICAgIGZsdXNoKCkKLSAgICAgICAgdGltZXMgPSBbXQotICAgICAgICBmb3IgaWR4LCAobmFtZSwganNtaW4pIGluIGVudW1lcmF0ZShwb3J0cyk6Ci0gICAgICAgICAgICBpZiBvdXRwdXRzW2lkeF0gaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwcmludF8oIiAgRkFJTEVEICVzIiAlIChuYW1lLCkpCi0gICAgICAgICAgICAgICAgc3RydWN0Wy0xXVsndGltZXMnXS5hcHBlbmQoKG5hbWUsIE5vbmUpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludF8oIiAgVGltaW5nICVzJXMuLi4gKCU1LjFmIEtpQiAlcykiICUgKAotICAgICAgICAgICAgICAgICAgICBuYW1lLAotICAgICAgICAgICAgICAgICAgICAiICIgKiAoc3BhY2UgLSBsZW4obmFtZSkpLAotICAgICAgICAgICAgICAgICAgICBsZW4ob3V0cHV0c1tpZHhdKSAvIDEwMjQuMCwKLSAgICAgICAgICAgICAgICAgICAgaWR4ID09IDAgYW5kICcqJyBvciBbJz0nLCAnPicsICc8J11bCi0gICAgICAgICAgICAgICAgICAgICAgICBjbXAobGVuKG91dHB1dHNbaWR4XSksIGxlbihvdXRwdXRzWzBdKSkKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICApLCBlbmQ9IiAiKQotICAgICAgICAgICAgICAgIGZsdXNoKCkKLQotICAgICAgICAgICAgICAgIHhjb3VudCA9IGNvdW50Ci0gICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgICAgY291bnRlZCA9IFtOb25lIGZvciBfIGluIHhyYW5nZSh4Y291bnQpXQotICAgICAgICAgICAgICAgICAgICBzdGFydCA9IF90aW1lLnRpbWUoKQotICAgICAgICAgICAgICAgICAgICBmb3IgXyBpbiBjb3VudGVkOgotICAgICAgICAgICAgICAgICAgICAgICAganNtaW4oc2NyaXB0KQotICAgICAgICAgICAgICAgICAgICBlbmQgPSBfdGltZS50aW1lKCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gKGVuZCAtIHN0YXJ0KSAqIDEwMDAKLSAgICAgICAgICAgICAgICAgICAgaWYgcmVzdWx0IDwgMTA6ICMgYXZvaWQgbWVhc3VyaW5nIHdpdGhpbiB0aGUgZXJyb3IgcmFuZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHhjb3VudCAqPSAxMAotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgdGltZXMuYXBwZW5kKHJlc3VsdCAvIHhjb3VudCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLQotICAgICAgICAgICAgICAgIHByaW50XygiJTguMmYgbXMiICUgdGltZXNbLTFdLCBlbmQ9IiAiKQotICAgICAgICAgICAgICAgIGZsdXNoKCkKLSAgICAgICAgICAgICAgICBpZiBsZW4odGltZXMpIDw9IDE6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50XygpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRfKCIoZmFjdG9yOiAlcykiICUgKCcsICcuam9pbihbCi0gICAgICAgICAgICAgICAgICAgICAgICAnJS4yZicgJSAodGltZWQgLyB0aW1lc1stMV0pIGZvciB0aW1lZCBpbiB0aW1lc1s6LTFdCi0gICAgICAgICAgICAgICAgICAgIF0pKSkKLSAgICAgICAgICAgICAgICBzdHJ1Y3RbLTFdWyd0aW1lcyddLmFwcGVuZCgobmFtZSwgdGltZXNbLTFdKSkKLQotICAgICAgICAgICAgZmx1c2goKQotICAgICAgICBwcmludF8oKQotCi0gICAgcmV0dXJuIHN0cnVjdAotCi0KLWRlZiBtYWluKGFyZ3Y9Tm9uZSk6Ci0gICAgIiIiIE1haW4gIiIiCi0gICAgaW1wb3J0IGdldG9wdCBhcyBfZ2V0b3B0Ci0gICAgaW1wb3J0IG9zIGFzIF9vcwotICAgIGltcG9ydCBwaWNrbGUgYXMgX3BpY2tsZQotCi0gICAgaWYgYXJndiBpcyBOb25lOgotICAgICAgICBhcmd2ID0gX3N5cy5hcmd2WzE6XQotICAgIHRyeToKLSAgICAgICAgb3B0cywgYXJncyA9IF9nZXRvcHQuZ2V0b3B0KGFyZ3YsICJoYzpwOiIsIFsiaGVscCJdKQotICAgIGV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3I6Ci0gICAgICAgIGUgPSBfc3lzLmV4Y19pbmZvKClbMF0oX3N5cy5leGNfaW5mbygpWzFdKQotICAgICAgICBwcmludCA+PiBfc3lzLnN0ZGVyciwgIiVzXG5UcnkgJXMgLW1iZW5jaC5tYWluIC0taGVscCIgJSAoCi0gICAgICAgICAgICBlLAotICAgICAgICAgICAgX29zLnBhdGguYmFzZW5hbWUoX3N5cy5leGVjdXRhYmxlKSwKLSAgICAgICAgKQotICAgICAgICBfc3lzLmV4aXQoMikKLQotICAgIGNvdW50LCBwaWNrbGUgPSAxMCwgTm9uZQotICAgIGZvciBrZXksIHZhbHVlIGluIG9wdHM6Ci0gICAgICAgIGlmIGtleSBpbiAoIi1oIiwgIi0taGVscCIpOgotICAgICAgICAgICAgcHJpbnQgPj4gX3N5cy5zdGRlcnIsICgKLSAgICAgICAgICAgICAgICAiJXMgLW1iZW5jaC5tYWluIFstYyBjb3VudF0gWy1wIGZpbGVdIGNzc2ZpbGUgLi4uIiAlICgKLSAgICAgICAgICAgICAgICAgICAgX29zLnBhdGguYmFzZW5hbWUoX3N5cy5leGVjdXRhYmxlKSwKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICApCi0gICAgICAgICAgICBfc3lzLmV4aXQoMCkKLSAgICAgICAgZWxpZiBrZXkgPT0gJy1jJzoKLSAgICAgICAgICAgIGNvdW50ID0gaW50KHZhbHVlKQotICAgICAgICBlbGlmIGtleSA9PSAnLXAnOgotICAgICAgICAgICAgcGlja2xlID0gc3RyKHZhbHVlKQotCi0gICAgc3RydWN0ID0gYmVuY2goYXJncywgY291bnQpCi0gICAgaWYgcGlja2xlOgotICAgICAgICBmcCA9IG9wZW4ocGlja2xlLCAnd2InKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmcC53cml0ZShfcGlja2xlLmR1bXBzKCgKLSAgICAgICAgICAgICAgICAiLiIuam9pbihtYXAoc3RyLCBfc3lzLnZlcnNpb25faW5mb1s6M10pKSwKLSAgICAgICAgICAgICAgICBpbXBvcnRfbm90ZXMsCi0gICAgICAgICAgICAgICAgc3RydWN0LAotICAgICAgICAgICAgKSwgMCkpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL21hcmtlcm1hbmFnZXIuanMgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9iZW5jaC9tYXJrZXJtYW5hZ2VyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDA2NjUwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2JlbmNoL21hcmtlcm1hbmFnZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5NzYgKzAsMCBAQAotLyoqCi0gKiBAbmFtZSBNYXJrZXJNYW5hZ2VyIHYzCi0gKiBAdmVyc2lvbiAxLjAKLSAqIEBjb3B5cmlnaHQgKGMpIDIwMDcgR29vZ2xlIEluYy4KLSAqIEBhdXRob3IgRG91ZyBSaWNrZXQsIEJqb3JuIEJyYWxhIChwb3J0IHRvIHYzKSwgb3RoZXJzLAotICoKLSAqIEBmaWxlb3ZlcnZpZXcgTWFya2VyIG1hbmFnZXIgaXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIG1hcCBhbmQgdGhlIHVzZXIsCi0gKiBkZXNpZ25lZCB0byBtYW5hZ2UgYWRkaW5nIGFuZCByZW1vdmluZyBtYW55IHBvaW50cyB3aGVuIHRoZSB2aWV3cG9ydCBjaGFuZ2VzLgotICogPGJyIC8+PGJyIC8+Ci0gKiA8Yj5Ib3cgaXQgV29ya3M8L2I+Ojxici8+Ci0gKiBUaGUgTWFya2VyTWFuYWdlciBwbGFjZXMgaXRzIG1hcmtlcnMgb250byBhIGdyaWQsIHNpbWlsYXIgdG8gdGhlIG1hcCB0aWxlcy4KLSAqIFdoZW4gdGhlIHVzZXIgbW92ZXMgdGhlIHZpZXdwb3J0LCBpdCBjb21wdXRlcyB3aGljaCBncmlkIGNlbGxzIGhhdmUKLSAqIGVudGVyZWQgb3IgbGVmdCB0aGUgdmlld3BvcnQsIGFuZCBzaG93cyBvciBoaWRlcyBhbGwgdGhlIG1hcmtlcnMgaW4gdGhvc2UKLSAqIGNlbGxzLgotICogKElmIHRoZSB1c2VycyBzY3JvbGxzIHRoZSB2aWV3cG9ydCBiZXlvbmQgdGhlIG1hcmtlcnMgdGhhdCBhcmUgbG9hZGVkLAotICogbm8gbWFya2VycyB3aWxsIGJlIHZpc2libGUgdW50aWwgdGhlIDxjb2RlPkVWRU5UX21vdmVlbmQ8L2NvZGU+Ci0gKiB0cmlnZ2VycyBhbiB1cGRhdGUuKQotICogSW4gcHJhY3RpY2FsIGNvbnNlcXVlbmNlcywgdGhpcyBhbGxvd3MgMTAsMDAwIG1hcmtlcnMgdG8gYmUgZGlzdHJpYnV0ZWQgb3ZlcgotICogYSBsYXJnZSBhcmVhLCBhbmQgYXMgbG9uZyBhcyBvbmx5IDEwMC0yMDAgYXJlIHZpc2libGUgaW4gYW55IGdpdmVuIHZpZXdwb3J0LAotICogdGhlIHVzZXIgd2lsbCBzZWUgZ29vZCBwZXJmb3JtYW5jZSBjb3JyZXNwb25kaW5nIHRvIHRoZSAxMDAgdmlzaWJsZSBtYXJrZXJzLAotICogcmF0aGVyIHRoYW4gcG9vciBwZXJmb3JtYW5jZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB0b3RhbCAxMCwwMDAgbWFya2Vycy4KLSAqIE5vdGUgdGhhdCBzb21lIGNvZGUgaXMgb3B0aW1pemVkIGZvciBzcGVlZCBvdmVyIHNwYWNlLAotICogd2l0aCB0aGUgZ29hbCBvZiBhY2NvbW1vZGF0aW5nIHRob3VzYW5kcyBvZiBtYXJrZXJzLgotICovCi0KLS8qCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBuYW1lIE1hcmtlck1hbmFnZXJPcHRpb25zCi0gKiBAY2xhc3MgVGhpcyBjbGFzcyByZXByZXNlbnRzIG9wdGlvbmFsIGFyZ3VtZW50cyB0byB0aGUge0BsaW5rIE1hcmtlck1hbmFnZXJ9Ci0gKiAgICAgY29uc3RydWN0b3IuCi0gKiBAcHJvcGVydHkge051bWJlcn0gbWF4Wm9vbSBTZXRzIHRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgbW9uaXRvcmVkIGJ5IGEKLSAqICAgICBtYXJrZXIgbWFuYWdlci4gSWYgbm90IGdpdmVuLCB0aGUgbWFuYWdlciBhc3N1bWVzIHRoZSBtYXhpbXVtIG1hcCB6b29tCi0gKiAgICAgbGV2ZWwuIFRoaXMgdmFsdWUgaXMgYWxzbyB1c2VkIHdoZW4gbWFya2VycyBhcmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIKLSAqICAgICB3aXRob3V0IHRoZSBvcHRpb25hbCB7QGxpbmsgbWF4Wm9vbX0gcGFyYW1ldGVyLgotICogQHByb3BlcnR5IHtOdW1iZXJ9IGJvcmRlclBhZGRpbmcgU3BlY2lmaWVzLCBpbiBwaXhlbHMsIHRoZSBleHRyYSBwYWRkaW5nCi0gKiAgICAgb3V0c2lkZSB0aGUgbWFwJ3MgY3VycmVudCB2aWV3cG9ydCBtb25pdG9yZWQgYnkgYSBtYW5hZ2VyLiBNYXJrZXJzIHRoYXQKLSAqICAgICBmYWxsIHdpdGhpbiB0aGlzIHBhZGRpbmcgYXJlIGFkZGVkIHRvIHRoZSBtYXAsIGV2ZW4gaWYgdGhleSBhcmUgbm90IGZ1bGx5Ci0gKiAgICAgdmlzaWJsZS4KLSAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gdHJhY2tNYXJrZXJzPWZhbHNlIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhIG1hcmtlcgotICogICAgIG1hbmFnZXIgc2hvdWxkIHRyYWNrIG1hcmtlcnMnIG1vdmVtZW50cy4gSWYgeW91IHdpc2ggdG8gbW92ZSBtYW5hZ2VkCi0gKiAgICAgbWFya2VycyB1c2luZyB0aGUge0BsaW5rIHNldFBvaW50fS97QGxpbmsgc2V0TGF0TG5nfSBtZXRob2RzLAotICogICAgIHRoaXMgb3B0aW9uIHNob3VsZCBiZSBzZXQgdG8ge0BsaW5rIHRydWV9LgotICovCi0KLS8qKgotICogQ3JlYXRlcyBhIG5ldyBNYXJrZXJNYW5hZ2VyIHRoYXQgd2lsbCBzaG93L2hpZGUgbWFya2VycyBvbiBhIG1hcC4KLSAqCi0gKiBFdmVudHM6Ci0gKiBAZXZlbnQgY2hhbmdlZCAoUGFyYW1ldGVyczogc2hvd24gYm91bmRzLCBzaG93biBtYXJrZXJzKSBOb3RpZnkgbGlzdGVuZXJzIHdoZW4gdGhlIHN0YXRlIG9mIHdoYXQgaXMgZGlzcGxheWVkIGNoYW5nZXMuCi0gKiBAZXZlbnQgbG9hZGVkIE1hcmtlck1hbmFnZXIgaGFzIHN1Y2Nlc2Z1bGx5IGJlZW4gaW5pdGlhbGl6ZWQuCi0gKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge01hcH0gbWFwIFRoZSBtYXAgdG8gbWFuYWdlLgotICogQHBhcmFtIHtPYmplY3R9IG9wdF9vcHRzIEEgY29udGFpbmVyIGZvciBvcHRpb25hbCBhcmd1bWVudHM6Ci0gKiAgIHtOdW1iZXJ9IG1heFpvb20gVGhlIG1heGltdW0gem9vbSBsZXZlbCBmb3Igd2hpY2ggdG8gY3JlYXRlIHRpbGVzLgotICogICB7TnVtYmVyfSBib3JkZXJQYWRkaW5nIFRoZSB3aWR0aCBpbiBwaXhlbHMgYmV5b25kIHRoZSBtYXAgYm9yZGVyLAotICogICAgICAgICAgICAgICAgICAgd2hlcmUgbWFya2VycyBzaG91bGQgYmUgZGlzcGxheS4KLSAqICAge0Jvb2xlYW59IHRyYWNrTWFya2VycyBXaGV0aGVyIG9yIG5vdCB0aGlzIG1hbmFnZXIgc2hvdWxkIHRyYWNrIG1hcmtlcgotICogICAgICAgICAgICAgICAgICAgbW92ZW1lbnRzLgotICovCi1mdW5jdGlvbiBNYXJrZXJNYW5hZ2VyKG1hcCwgb3B0X29wdHMpIHsKLSAgdmFyIG1lID0gdGhpczsKLSAgbWUubWFwXyA9IG1hcDsKLSAgbWUubWFwWm9vbV8gPSBtYXAuZ2V0Wm9vbSgpOwotCi0gIG1lLnByb2plY3Rpb25IZWxwZXJfID0gbmV3IFByb2plY3Rpb25IZWxwZXJPdmVybGF5KG1hcCk7Ci0gIGdvb2dsZS5tYXBzLmV2ZW50LmFkZExpc3RlbmVyKG1lLnByb2plY3Rpb25IZWxwZXJfLCAncmVhZHknLCBmdW5jdGlvbiAoKSB7Ci0gICAgbWUucHJvamVjdGlvbl8gPSB0aGlzLmdldFByb2plY3Rpb24oKTsKLSAgICBtZS5pbml0aWFsaXplKG1hcCwgb3B0X29wdHMpOwotICB9KTsKLX0KLQotCi1NYXJrZXJNYW5hZ2VyLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKG1hcCwgb3B0X29wdHMpIHsKLSAgdmFyIG1lID0gdGhpczsKLQotICBvcHRfb3B0cyA9IG9wdF9vcHRzIHx8IHt9OwotICBtZS50aWxlU2l6ZV8gPSBNYXJrZXJNYW5hZ2VyLkRFRkFVTFRfVElMRV9TSVpFXzsKLQotICB2YXIgbWFwVHlwZXMgPSBtYXAubWFwVHlwZXM7Ci0KLSAgLy8gRmluZCBtYXggem9vbSBsZXZlbAotICB2YXIgbWFwTWF4Wm9vbSA9IDE7Ci0gIGZvciAodmFyIHNUeXBlIGluIG1hcFR5cGVzICkgewotICAgIGlmICh0eXBlb2YgbWFwLm1hcFR5cGVzLmdldChzVHlwZSkgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtYXAubWFwVHlwZXMuZ2V0KHNUeXBlKS5tYXhab29tID09PSAnbnVtYmVyJykgewotICAgICAgdmFyIG1hcFR5cGVNYXhab29tID0gbWFwLm1hcFR5cGVzLmdldChzVHlwZSkubWF4Wm9vbTsKLSAgICAgIGlmIChtYXBUeXBlTWF4Wm9vbSA+IG1hcE1heFpvb20pIHsKLSAgICAgICAgbWFwTWF4Wm9vbSA9IG1hcFR5cGVNYXhab29tOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIG1lLm1heFpvb21fICA9IG9wdF9vcHRzLm1heFpvb20gfHwgMTk7Ci0KLSAgbWUudHJhY2tNYXJrZXJzXyA9IG9wdF9vcHRzLnRyYWNrTWFya2VyczsKLSAgbWUuc2hvd18gPSBvcHRfb3B0cy5zaG93IHx8IHRydWU7Ci0KLSAgdmFyIHBhZGRpbmc7Ci0gIGlmICh0eXBlb2Ygb3B0X29wdHMuYm9yZGVyUGFkZGluZyA9PT0gJ251bWJlcicpIHsKLSAgICBwYWRkaW5nID0gb3B0X29wdHMuYm9yZGVyUGFkZGluZzsKLSAgfSBlbHNlIHsKLSAgICBwYWRkaW5nID0gTWFya2VyTWFuYWdlci5ERUZBVUxUX0JPUkRFUl9QQURESU5HXzsKLSAgfQotICAvLyBUaGUgcGFkZGluZyBpbiBwaXhlbHMgYmV5b25kIHRoZSB2aWV3cG9ydCwgd2hlcmUgd2Ugd2lsbCBwcmUtbG9hZCBtYXJrZXJzLgotICBtZS5zd1BhZGRpbmdfID0gbmV3IGdvb2dsZS5tYXBzLlNpemUoLXBhZGRpbmcsIHBhZGRpbmcpOwotICBtZS5uZVBhZGRpbmdfID0gbmV3IGdvb2dsZS5tYXBzLlNpemUocGFkZGluZywgLXBhZGRpbmcpOwotICBtZS5ib3JkZXJQYWRkaW5nXyA9IHBhZGRpbmc7Ci0KLSAgbWUuZ3JpZFdpZHRoXyA9IHt9OwotCi0gIG1lLmdyaWRfID0ge307Ci0gIG1lLmdyaWRfW21lLm1heFpvb21fXSA9IHt9OwotICBtZS5udW1NYXJrZXJzXyA9IHt9OwotICBtZS5udW1NYXJrZXJzX1ttZS5tYXhab29tX10gPSAwOwotCi0KLSAgZ29vZ2xlLm1hcHMuZXZlbnQuYWRkTGlzdGVuZXIobWFwLCAnZHJhZ2VuZCcsIGZ1bmN0aW9uICgpIHsKLSAgICBtZS5vbk1hcE1vdmVFbmRfKCk7Ci0gIH0pOwotICBnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lcihtYXAsICd6b29tX2NoYW5nZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgbWUub25NYXBNb3ZlRW5kXygpOwotICB9KTsKLQotCi0KLSAgLyoqCi0gICAqIFRoaXMgY2xvc3VyZSBwcm92aWRlIGVhc3kgYWNjZXNzIHRvIHRoZSBtYXAuCi0gICAqIFRoZXkgYXJlIHVzZWQgYXMgY2FsbGJhY2tzLCBub3QgYXMgbWV0aG9kcy4KLSAgICogQHBhcmFtIEdNYXJrZXIgbWFya2VyIE1hcmtlciB0byBiZSByZW1vdmVkIGZyb20gdGhlIG1hcAotICAgKiBAcHJpdmF0ZQotICAgKi8KLSAgbWUucmVtb3ZlT3ZlcmxheV8gPSBmdW5jdGlvbiAobWFya2VyKSB7Ci0gICAgbWFya2VyLnNldE1hcChudWxsKTsKLSAgICBtZS5zaG93bk1hcmtlcnNfLS07Ci0gIH07Ci0KLSAgLyoqCi0gICAqIFRoaXMgY2xvc3VyZSBwcm92aWRlIGVhc3kgYWNjZXNzIHRvIHRoZSBtYXAuCi0gICAqIFRoZXkgYXJlIHVzZWQgYXMgY2FsbGJhY2tzLCBub3QgYXMgbWV0aG9kcy4KLSAgICogQHBhcmFtIEdNYXJrZXIgbWFya2VyIE1hcmtlciB0byBiZSBhZGRlZCB0byB0aGUgbWFwCi0gICAqIEBwcml2YXRlCi0gICAqLwotICBtZS5hZGRPdmVybGF5XyA9IGZ1bmN0aW9uIChtYXJrZXIpIHsKLSAgICBpZiAobWUuc2hvd18pIHsKLSAgICAgIG1hcmtlci5zZXRNYXAobWUubWFwXyk7Ci0gICAgICBtZS5zaG93bk1hcmtlcnNfKys7Ci0gICAgfQotICB9OwotCi0gIG1lLnJlc2V0TWFuYWdlcl8oKTsKLSAgbWUuc2hvd25NYXJrZXJzXyA9IDA7Ci0KLSAgbWUuc2hvd25Cb3VuZHNfID0gbWUuZ2V0TWFwR3JpZEJvdW5kc18oKTsKLQotICBnb29nbGUubWFwcy5ldmVudC50cmlnZ2VyKG1lLCAnbG9hZGVkJyk7Ci0KLX07Ci0KLS8qKgotICogIERlZmF1bHQgdGlsZSBzaXplIHVzZWQgZm9yIGRldmlkaW5nIHRoZSBtYXAgaW50byBhIGdyaWQuCi0gKi8KLU1hcmtlck1hbmFnZXIuREVGQVVMVF9USUxFX1NJWkVfID0gMTAyNDsKLQotLyoKLSAqICBIb3cgbXVjaCBleHRyYSBzcGFjZSB0byBzaG93IGFyb3VuZCB0aGUgbWFwIGJvcmRlciBzbwotICogIGRyYWdnaW5nIGRvZXNuJ3QgcmVzdWx0IGluIGFuIGVtcHR5IHBsYWNlLgotICovCi1NYXJrZXJNYW5hZ2VyLkRFRkFVTFRfQk9SREVSX1BBRERJTkdfID0gMTAwOwotCi0vKioKLSAqICBEZWZhdWx0IHRpbGVzaXplIG9mIHNpbmdsZSB0aWxlIHdvcmxkLgotICovCi1NYXJrZXJNYW5hZ2VyLk1FUkNBVE9SX1pPT01fTEVWRUxfWkVST19SQU5HRSA9IDI1NjsKLQotCi0vKioKLSAqIEluaXRpYWxpemVzIE1hcmtlck1hbmFnZXIgYXJyYXlzIGZvciBhbGwgem9vbSBsZXZlbHMKLSAqIENhbGxlZCBieSBjb25zdHJ1Y3RvciBhbmQgYnkgY2xlYXJBbGxNYXJrZXJzCi0gKi8KLU1hcmtlck1hbmFnZXIucHJvdG90eXBlLnJlc2V0TWFuYWdlcl8gPSBmdW5jdGlvbiAoKSB7Ci0gIHZhciBtYXBXaWR0aCA9IE1hcmtlck1hbmFnZXIuTUVSQ0FUT1JfWk9PTV9MRVZFTF9aRVJPX1JBTkdFOwotICBmb3IgKHZhciB6b29tID0gMDsgem9vbSA8PSB0aGlzLm1heFpvb21fOyArK3pvb20pIHsKLSAgICB0aGlzLmdyaWRfW3pvb21dID0ge307Ci0gICAgdGhpcy5udW1NYXJrZXJzX1t6b29tXSA9IDA7Ci0gICAgdGhpcy5ncmlkV2lkdGhfW3pvb21dID0gTWF0aC5jZWlsKG1hcFdpZHRoIC8gdGhpcy50aWxlU2l6ZV8pOwotICAgIG1hcFdpZHRoIDw8PSAxOwotICB9Ci0KLX07Ci0KLS8qKgotICogUmVtb3ZlcyBhbGwgbWFya2VycyBpbiB0aGUgbWFuYWdlciwgYW5kCi0gKiByZW1vdmVzIGFueSB2aXNpYmxlIG1hcmtlcnMgZnJvbSB0aGUgbWFwLgotICovCi1NYXJrZXJNYW5hZ2VyLnByb3RvdHlwZS5jbGVhck1hcmtlcnMgPSBmdW5jdGlvbiAoKSB7Ci0gIHRoaXMucHJvY2Vzc0FsbF8odGhpcy5zaG93bkJvdW5kc18sIHRoaXMucmVtb3ZlT3ZlcmxheV8pOwotICB0aGlzLnJlc2V0TWFuYWdlcl8oKTsKLX07Ci0KLQotLyoqCi0gKiBHZXRzIHRoZSB0aWxlIGNvb3JkaW5hdGUgZm9yIGEgZ2l2ZW4gbGF0bG5nIHBvaW50LgotICoKLSAqIEBwYXJhbSB7TGF0TG5nfSBsYXRsbmcgVGhlIGdlb2dyYXBoaWNhbCBwb2ludC4KLSAqIEBwYXJhbSB7TnVtYmVyfSB6b29tIFRoZSB6b29tIGxldmVsLgotICogQHBhcmFtIHtnb29nbGUubWFwcy5TaXplfSBwYWRkaW5nIFRoZSBwYWRkaW5nIHVzZWQgdG8gc2hpZnQgdGhlIHBpeGVsIGNvb3JkaW5hdGUuCi0gKiAgICAgICAgICAgICAgIFVzZWQgZm9yIGV4cGFuZGluZyBhIGJvdW5kcyB0byBpbmNsdWRlIGFuIGV4dHJhIHBhZGRpbmcKLSAqICAgICAgICAgICAgICAgb2YgcGl4ZWxzIHN1cnJvdW5kaW5nIHRoZSBib3VuZHMuCi0gKiBAcmV0dXJuIHtHUG9pbnR9IFRoZSBwb2ludCBpbiB0aWxlIGNvb3JkaW5hdGVzLgotICoKLSAqLwotTWFya2VyTWFuYWdlci5wcm90b3R5cGUuZ2V0VGlsZVBvaW50XyA9IGZ1bmN0aW9uIChsYXRsbmcsIHpvb20sIHBhZGRpbmcpIHsKLQotICB2YXIgcGl4ZWxQb2ludCA9IHRoaXMucHJvamVjdGlvbkhlbHBlcl8uTGF0TG5nVG9QaXhlbChsYXRsbmcsIHpvb20pOwotCi0gIHZhciBwb2ludCA9IG5ldyBnb29nbGUubWFwcy5Qb2ludCgKLSAgICBNYXRoLmZsb29yKChwaXhlbFBvaW50LnggKyBwYWRkaW5nLndpZHRoKSAvIHRoaXMudGlsZVNpemVfKSwKLSAgICBNYXRoLmZsb29yKChwaXhlbFBvaW50LnkgKyBwYWRkaW5nLmhlaWdodCkgLyB0aGlzLnRpbGVTaXplXykKLSAgKTsKLQotICByZXR1cm4gcG9pbnQ7Ci19OwotCi0KLS8qKgotICogRmluZHMgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIHRvIGFkZCB0aGUgbWFya2VyIHRvIHRoZSBncmlkLgotICogT3B0aW1pemVkIGZvciBzcGVlZDsgZG9lcyBub3QgYWN0dWFsbHkgYWRkIHRoZSBtYXJrZXIgdG8gdGhlIG1hcC4KLSAqIERlc2lnbmVkIGZvciBiYXRjaC1wcm9jZXNzaW5nIHRob3VzYW5kcyBvZiBtYXJrZXJzLgotICoKLSAqIEBwYXJhbSB7TWFya2VyfSBtYXJrZXIgVGhlIG1hcmtlciB0byBhZGQuCi0gKiBAcGFyYW0ge051bWJlcn0gbWluWm9vbSBUaGUgbWluaW11bSB6b29tIGZvciBkaXNwbGF5aW5nIHRoZSBtYXJrZXIuCi0gKiBAcGFyYW0ge051bWJlcn0gbWF4Wm9vbSBUaGUgbWF4aW11bSB6b29tIGZvciBkaXNwbGF5aW5nIHRoZSBtYXJrZXIuCi0gKi8KLU1hcmtlck1hbmFnZXIucHJvdG90eXBlLmFkZE1hcmtlckJhdGNoXyA9IGZ1bmN0aW9uIChtYXJrZXIsIG1pblpvb20sIG1heFpvb20pIHsKLSAgdmFyIG1lID0gdGhpczsKLQotICB2YXIgbVBvaW50ID0gbWFya2VyLmdldFBvc2l0aW9uKCk7Ci0gIG1hcmtlci5NYXJrZXJNYW5hZ2VyX21pblpvb20gPSBtaW5ab29tOwotCi0KLSAgLy8gVHJhY2tpbmcgbWFya2VycyBpcyBleHBlbnNpdmUsIHNvIHdlIGRvIHRoaXMgb25seSBpZiB0aGUKLSAgLy8gdXNlciBleHBsaWNpdGx5IHJlcXVlc3RlZCBpdCB3aGVuIGNyZWF0aW5nIG1hcmtlciBtYW5hZ2VyLgotICBpZiAodGhpcy50cmFja01hcmtlcnNfKSB7Ci0gICAgZ29vZ2xlLm1hcHMuZXZlbnQuYWRkTGlzdGVuZXIobWFya2VyLCAnY2hhbmdlZCcsIGZ1bmN0aW9uIChhLCBiLCBjKSB7Ci0gICAgICBtZS5vbk1hcmtlck1vdmVkXyhhLCBiLCBjKTsKLSAgICB9KTsKLSAgfQotCi0gIHZhciBncmlkUG9pbnQgPSB0aGlzLmdldFRpbGVQb2ludF8obVBvaW50LCBtYXhab29tLCBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgwLCAwLCAwLCAwKSk7Ci0KLSAgZm9yICh2YXIgem9vbSA9IG1heFpvb207IHpvb20gPj0gbWluWm9vbTsgem9vbS0tKSB7Ci0gICAgdmFyIGNlbGwgPSB0aGlzLmdldEdyaWRDZWxsQ3JlYXRlXyhncmlkUG9pbnQueCwgZ3JpZFBvaW50LnksIHpvb20pOwotICAgIGNlbGwucHVzaChtYXJrZXIpOwotCi0gICAgZ3JpZFBvaW50LnggPSBncmlkUG9pbnQueCA+PiAxOwotICAgIGdyaWRQb2ludC55ID0gZ3JpZFBvaW50LnkgPj4gMTsKLSAgfQotfTsKLQotCi0vKioKLSAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHBvaW50IGlzIHZpc2libGUgaW4gdGhlIHNob3duIGJvdW5kcy4gVGhpcwotICogaXMgYSBoZWxwZXIgbWV0aG9kIHRoYXQgdGFrZXMgY2FyZSBvZiB0aGUgY29ybmVyIGNhc2UsIHdoZW4gc2hvd25Cb3VuZHMgaGF2ZQotICogbmVnYXRpdmUgbWluWCB2YWx1ZS4KLSAqCi0gKiBAcGFyYW0ge1BvaW50fSBwb2ludCBhIHBvaW50IG9uIGEgZ3JpZC4KLSAqIEByZXR1cm4ge0Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBwb2ludCBpcyB2aXNpYmxlIGluIHRoZSBjdXJyZW50bHkKLSAqIHNob3duIGJvdW5kcy4KLSAqLwotTWFya2VyTWFuYWdlci5wcm90b3R5cGUuaXNHcmlkUG9pbnRWaXNpYmxlXyA9IGZ1bmN0aW9uIChwb2ludCkgewotICB2YXIgdmVydGljYWwgPSB0aGlzLnNob3duQm91bmRzXy5taW5ZIDw9IHBvaW50LnkgJiYKLSAgICAgIHBvaW50LnkgPD0gdGhpcy5zaG93bkJvdW5kc18ubWF4WTsKLSAgdmFyIG1pblggPSB0aGlzLnNob3duQm91bmRzXy5taW5YOwotICB2YXIgaG9yaXpvbnRhbCA9IG1pblggPD0gcG9pbnQueCAmJiBwb2ludC54IDw9IHRoaXMuc2hvd25Cb3VuZHNfLm1heFg7Ci0gIGlmICghaG9yaXpvbnRhbCAmJiBtaW5YIDwgMCkgewotICAgIC8vIFNoaWZ0cyB0aGUgbmVnYXRpdmUgcGFydCBvZiB0aGUgcmVjdGFuZ2xlLiBBcyBwb2ludC54IGlzIGFsd2F5cyBsZXNzCi0gICAgLy8gdGhhbiBncmlkIHdpZHRoLCBvbmx5IHRlc3Qgc2hpZnRlZCBtaW5YIC4uIDAgcGFydCBvZiB0aGUgc2hvd24gYm91bmRzLgotICAgIHZhciB3aWR0aCA9IHRoaXMuZ3JpZFdpZHRoX1t0aGlzLnNob3duQm91bmRzXy56XTsKLSAgICBob3Jpem9udGFsID0gbWluWCArIHdpZHRoIDw9IHBvaW50LnggJiYgcG9pbnQueCA8PSB3aWR0aCAtIDE7Ci0gIH0KLSAgcmV0dXJuIHZlcnRpY2FsICYmIGhvcml6b250YWw7Ci19OwotCi0KLS8qKgotICogUmVhY3RzIHRvIGEgbm90aWZpY2F0aW9uIGZyb20gYSBtYXJrZXIgdGhhdCBpdCBoYXMgbW92ZWQgdG8gYSBuZXcgbG9jYXRpb24uCi0gKiBJdCBzY2FucyB0aGUgZ3JpZCBhbGwgYWxsIHpvb20gbGV2ZWxzIGFuZCBtb3ZlcyB0aGUgbWFya2VyIGZyb20gdGhlIG9sZCBncmlkCi0gKiBsb2NhdGlvbiB0byBhIG5ldyBncmlkIGxvY2F0aW9uLgotICoKLSAqIEBwYXJhbSB7TWFya2VyfSBtYXJrZXIgVGhlIG1hcmtlciB0aGF0IG1vdmVkLgotICogQHBhcmFtIHtMYXRMbmd9IG9sZFBvaW50IFRoZSBvbGQgcG9zaXRpb24gb2YgdGhlIG1hcmtlci4KLSAqIEBwYXJhbSB7TGF0TG5nfSBuZXdQb2ludCBUaGUgbmV3IHBvc2l0aW9uIG9mIHRoZSBtYXJrZXIuCi0gKi8KLU1hcmtlck1hbmFnZXIucHJvdG90eXBlLm9uTWFya2VyTW92ZWRfID0gZnVuY3Rpb24gKG1hcmtlciwgb2xkUG9pbnQsIG5ld1BvaW50KSB7Ci0gIC8vIE5PVEU6IFdlIGRvIG5vdCBrbm93IHRoZSBtaW5pbXVtIG9yIG1heGltdW0gem9vbSB0aGUgbWFya2VyIHdhcwotICAvLyBhZGRlZCBhdCwgc28gd2Ugc3RhcnQgYXQgdGhlIGFic29sdXRlIG1heGltdW0uIFdoZW5ldmVyIHdlIHN1Y2Nlc3NmdWxseQotICAvLyByZW1vdmUgYSBtYXJrZXIgYXQgYSBnaXZlbiB6b29tLCB3ZSBhZGQgaXQgYXQgdGhlIG5ldyBncmlkIGNvb3JkaW5hdGVzLgotICB2YXIgem9vbSA9IHRoaXMubWF4Wm9vbV87Ci0gIHZhciBjaGFuZ2VkID0gZmFsc2U7Ci0gIHZhciBvbGRHcmlkID0gdGhpcy5nZXRUaWxlUG9pbnRfKG9sZFBvaW50LCB6b29tLCBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgwLCAwLCAwLCAwKSk7Ci0gIHZhciBuZXdHcmlkID0gdGhpcy5nZXRUaWxlUG9pbnRfKG5ld1BvaW50LCB6b29tLCBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgwLCAwLCAwLCAwKSk7Ci0gIHdoaWxlICh6b29tID49IDAgJiYgKG9sZEdyaWQueCAhPT0gbmV3R3JpZC54IHx8IG9sZEdyaWQueSAhPT0gbmV3R3JpZC55KSkgewotICAgIHZhciBjZWxsID0gdGhpcy5nZXRHcmlkQ2VsbE5vQ3JlYXRlXyhvbGRHcmlkLngsIG9sZEdyaWQueSwgem9vbSk7Ci0gICAgaWYgKGNlbGwpIHsKLSAgICAgIGlmICh0aGlzLnJlbW92ZUZyb21BcnJheV8oY2VsbCwgbWFya2VyKSkgewotICAgICAgICB0aGlzLmdldEdyaWRDZWxsQ3JlYXRlXyhuZXdHcmlkLngsIG5ld0dyaWQueSwgem9vbSkucHVzaChtYXJrZXIpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBGb3IgdGhlIGN1cnJlbnQgem9vbSB3ZSBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSBtYXAuIE1hcmtlcnMgdGhhdCBubwotICAgIC8vIGxvbmdlciBhcmUgdmlzaWJsZSBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBtYXAuIE1hcmtlcnMgdGhhdCBtb3ZlZCBpbnRvCi0gICAgLy8gdGhlIHNob3duIGJvdW5kcyBhcmUgYWRkZWQgdG8gdGhlIG1hcC4gVGhpcyBhbHNvIGxldHMgdXMga2VlcCB0aGUgY291bnQKLSAgICAvLyBvZiB2aXNpYmxlIG1hcmtlcnMgdXAgdG8gZGF0ZS4KLSAgICBpZiAoem9vbSA9PT0gdGhpcy5tYXBab29tXykgewotICAgICAgaWYgKHRoaXMuaXNHcmlkUG9pbnRWaXNpYmxlXyhvbGRHcmlkKSkgewotICAgICAgICBpZiAoIXRoaXMuaXNHcmlkUG9pbnRWaXNpYmxlXyhuZXdHcmlkKSkgewotICAgICAgICAgIHRoaXMucmVtb3ZlT3ZlcmxheV8obWFya2VyKTsKLSAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHRoaXMuaXNHcmlkUG9pbnRWaXNpYmxlXyhuZXdHcmlkKSkgewotICAgICAgICAgIHRoaXMuYWRkT3ZlcmxheV8obWFya2VyKTsKLSAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBvbGRHcmlkLnggPSBvbGRHcmlkLnggPj4gMTsKLSAgICBvbGRHcmlkLnkgPSBvbGRHcmlkLnkgPj4gMTsKLSAgICBuZXdHcmlkLnggPSBuZXdHcmlkLnggPj4gMTsKLSAgICBuZXdHcmlkLnkgPSBuZXdHcmlkLnkgPj4gMTsKLSAgICAtLXpvb207Ci0gIH0KLSAgaWYgKGNoYW5nZWQpIHsKLSAgICB0aGlzLm5vdGlmeUxpc3RlbmVyc18oKTsKLSAgfQotfTsKLQotCi0vKioKLSAqIFJlbW92ZXMgbWFya2VyIGZyb20gdGhlIG1hbmFnZXIgYW5kIGZyb20gdGhlIG1hcAotICogKGlmIGl0J3MgY3VycmVudGx5IHZpc2libGUpLgotICogQHBhcmFtIHtHTWFya2VyfSBtYXJrZXIgVGhlIG1hcmtlciB0byBkZWxldGUuCi0gKi8KLU1hcmtlck1hbmFnZXIucHJvdG90eXBlLnJlbW92ZU1hcmtlciA9IGZ1bmN0aW9uIChtYXJrZXIpIHsKLSAgdmFyIHpvb20gPSB0aGlzLm1heFpvb21fOwotICB2YXIgY2hhbmdlZCA9IGZhbHNlOwotICB2YXIgcG9pbnQgPSBtYXJrZXIuZ2V0UG9zaXRpb24oKTsKLSAgdmFyIGdyaWQgPSB0aGlzLmdldFRpbGVQb2ludF8ocG9pbnQsIHpvb20sIG5ldyBnb29nbGUubWFwcy5TaXplKDAsIDAsIDAsIDApKTsKLSAgd2hpbGUgKHpvb20gPj0gMCkgewotICAgIHZhciBjZWxsID0gdGhpcy5nZXRHcmlkQ2VsbE5vQ3JlYXRlXyhncmlkLngsIGdyaWQueSwgem9vbSk7Ci0KLSAgICBpZiAoY2VsbCkgewotICAgICAgdGhpcy5yZW1vdmVGcm9tQXJyYXlfKGNlbGwsIG1hcmtlcik7Ci0gICAgfQotICAgIC8vIEZvciB0aGUgY3VycmVudCB6b29tIHdlIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIG1hcC4gTWFya2VycyB0aGF0IG5vCi0gICAgLy8gbG9uZ2VyIGFyZSB2aXNpYmxlIGFyZSByZW1vdmVkIGZyb20gdGhlIG1hcC4gVGhpcyBhbHNvIGxldHMgdXMga2VlcCB0aGUgY291bnQKLSAgICAvLyBvZiB2aXNpYmxlIG1hcmtlcnMgdXAgdG8gZGF0ZS4KLSAgICBpZiAoem9vbSA9PT0gdGhpcy5tYXBab29tXykgewotICAgICAgaWYgKHRoaXMuaXNHcmlkUG9pbnRWaXNpYmxlXyhncmlkKSkgewotICAgICAgICB0aGlzLnJlbW92ZU92ZXJsYXlfKG1hcmtlcik7Ci0gICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICBncmlkLnggPSBncmlkLnggPj4gMTsKLSAgICBncmlkLnkgPSBncmlkLnkgPj4gMTsKLSAgICAtLXpvb207Ci0gIH0KLSAgaWYgKGNoYW5nZWQpIHsKLSAgICB0aGlzLm5vdGlmeUxpc3RlbmVyc18oKTsKLSAgfQotICB0aGlzLm51bU1hcmtlcnNfW21hcmtlci5NYXJrZXJNYW5hZ2VyX21pblpvb21dLS07Ci19OwotCi0KLS8qKgotICogQWRkIG1hbnkgbWFya2VycyBhdCBvbmNlLgotICogRG9lcyBub3QgYWN0dWFsbHkgdXBkYXRlIHRoZSBtYXAsIGp1c3QgdGhlIGludGVybmFsIGdyaWQuCi0gKgotICogQHBhcmFtIHtBcnJheSBvZiBNYXJrZXJ9IG1hcmtlcnMgVGhlIG1hcmtlcnMgdG8gYWRkLgotICogQHBhcmFtIHtOdW1iZXJ9IG1pblpvb20gVGhlIG1pbmltdW0gem9vbSBsZXZlbCB0byBkaXNwbGF5IHRoZSBtYXJrZXJzLgotICogQHBhcmFtIHtOdW1iZXJ9IG9wdF9tYXhab29tIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gZGlzcGxheSB0aGUgbWFya2Vycy4KLSAqLwotTWFya2VyTWFuYWdlci5wcm90b3R5cGUuYWRkTWFya2VycyA9IGZ1bmN0aW9uIChtYXJrZXJzLCBtaW5ab29tLCBvcHRfbWF4Wm9vbSkgewotICB2YXIgbWF4Wm9vbSA9IHRoaXMuZ2V0T3B0TWF4Wm9vbV8ob3B0X21heFpvb20pOwotICBmb3IgKHZhciBpID0gbWFya2Vycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewotICAgIHRoaXMuYWRkTWFya2VyQmF0Y2hfKG1hcmtlcnNbaV0sIG1pblpvb20sIG1heFpvb20pOwotICB9Ci0KLSAgdGhpcy5udW1NYXJrZXJzX1ttaW5ab29tXSArPSBtYXJrZXJzLmxlbmd0aDsKLX07Ci0KLQotLyoqCi0gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgb3B0aW9uYWwgbWF4aW11bSB6b29tLiBUaGlzIG1ldGhvZCBpcyBkZWZpbmVkIHNvCi0gKiB0aGF0IHdlIGhhdmUganVzdCBvbmUgcGxhY2Ugd2hlcmUgb3B0aW9uYWwgbWF4aW11bSB6b29tIGlzIGNhbGN1bGF0ZWQuCi0gKgotICogQHBhcmFtIHtOdW1iZXJ9IG9wdF9tYXhab29tIFRoZSBvcHRpbmFsIG1heGltdW0gem9vbS4KLSAqIEByZXR1cm4gVGhlIG1heGltdW0gem9vbS4KLSAqLwotTWFya2VyTWFuYWdlci5wcm90b3R5cGUuZ2V0T3B0TWF4Wm9vbV8gPSBmdW5jdGlvbiAob3B0X21heFpvb20pIHsKLSAgcmV0dXJuIG9wdF9tYXhab29tIHx8IHRoaXMubWF4Wm9vbV87Ci19OwotCi0KLS8qKgotICogQ2FsY3VsYXRlcyB0aGUgdG90YWwgbnVtYmVyIG9mIG1hcmtlcnMgcG90ZW50aWFsbHkgdmlzaWJsZSBhdCBhIGdpdmVuCi0gKiB6b29tIGxldmVsLgotICoKLSAqIEBwYXJhbSB7TnVtYmVyfSB6b29tIFRoZSB6b29tIGxldmVsIHRvIGNoZWNrLgotICovCi1NYXJrZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRNYXJrZXJDb3VudCA9IGZ1bmN0aW9uICh6b29tKSB7Ci0gIHZhciB0b3RhbCA9IDA7Ci0gIGZvciAodmFyIHogPSAwOyB6IDw9IHpvb207IHorKykgewotICAgIHRvdGFsICs9IHRoaXMubnVtTWFya2Vyc19bel07Ci0gIH0KLSAgcmV0dXJuIHRvdGFsOwotfTsKLQotLyoqCi0gKiBSZXR1cm5zIGEgbWFya2VyIGdpdmVuIGxhdGl0dWRlLCBsb25naXR1ZGUgYW5kIHpvb20uIElmIHRoZSBtYXJrZXIgZG9lcyBub3QKLSAqIGV4aXN0LCB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIGEgbmV3IG1hcmtlci4gSWYgYSBuZXcgbWFya2VyIGlzIGNyZWF0ZWQsCi0gKiBpdCB3aWxsIE5PVCBiZSBhZGRlZCB0byB0aGUgbWFuYWdlci4KLSAqCi0gKiBAcGFyYW0ge051bWJlcn0gbGF0IC0gdGhlIGxhdGl0dWRlIG9mIGEgbWFya2VyLgotICogQHBhcmFtIHtOdW1iZXJ9IGxuZyAtIHRoZSBsb25naXR1ZGUgb2YgYSBtYXJrZXIuCi0gKiBAcGFyYW0ge051bWJlcn0gem9vbSAtIHRoZSB6b29tIGxldmVsCi0gKiBAcmV0dXJuIHtHTWFya2VyfSBtYXJrZXIgLSB0aGUgbWFya2VyIGZvdW5kIGF0IGxhdCBhbmQgbG5nCi0gKi8KLU1hcmtlck1hbmFnZXIucHJvdG90eXBlLmdldE1hcmtlciA9IGZ1bmN0aW9uIChsYXQsIGxuZywgem9vbSkgewotICB2YXIgbVBvaW50ID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXQsIGxuZyk7Ci0gIHZhciBncmlkUG9pbnQgPSB0aGlzLmdldFRpbGVQb2ludF8obVBvaW50LCB6b29tLCBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgwLCAwLCAwLCAwKSk7Ci0KLSAgdmFyIG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe3Bvc2l0aW9uOiBtUG9pbnR9KTsKLQotICB2YXIgY2VsbEFycmF5ID0gdGhpcy5nZXRHcmlkQ2VsbE5vQ3JlYXRlXyhncmlkUG9pbnQueCwgZ3JpZFBvaW50LnksIHpvb20pOwotICBpZiAoY2VsbEFycmF5ICE9PSB1bmRlZmluZWQpIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxBcnJheS5sZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICBpZiAobGF0ID09PSBjZWxsQXJyYXlbaV0uZ2V0TGF0TG5nKCkubGF0KCkgJiYgbG5nID09PSBjZWxsQXJyYXlbaV0uZ2V0TGF0TG5nKCkubG5nKCkpIHsKLSAgICAgICAgbWFya2VyID0gY2VsbEFycmF5W2ldOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gbWFya2VyOwotfTsKLQotLyoqCi0gKiBBZGQgYSBzaW5nbGUgbWFya2VyIHRvIHRoZSBtYXAuCi0gKgotICogQHBhcmFtIHtNYXJrZXJ9IG1hcmtlciBUaGUgbWFya2VyIHRvIGFkZC4KLSAqIEBwYXJhbSB7TnVtYmVyfSBtaW5ab29tIFRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgdG8gZGlzcGxheSB0aGUgbWFya2VyLgotICogQHBhcmFtIHtOdW1iZXJ9IG9wdF9tYXhab29tIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gZGlzcGxheSB0aGUgbWFya2VyLgotICovCi1NYXJrZXJNYW5hZ2VyLnByb3RvdHlwZS5hZGRNYXJrZXIgPSBmdW5jdGlvbiAobWFya2VyLCBtaW5ab29tLCBvcHRfbWF4Wm9vbSkgewotICB2YXIgbWF4Wm9vbSA9IHRoaXMuZ2V0T3B0TWF4Wm9vbV8ob3B0X21heFpvb20pOwotICB0aGlzLmFkZE1hcmtlckJhdGNoXyhtYXJrZXIsIG1pblpvb20sIG1heFpvb20pOwotICB2YXIgZ3JpZFBvaW50ID0gdGhpcy5nZXRUaWxlUG9pbnRfKG1hcmtlci5nZXRQb3NpdGlvbigpLCB0aGlzLm1hcFpvb21fLCBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSgwLCAwLCAwLCAwKSk7Ci0gIGlmICh0aGlzLmlzR3JpZFBvaW50VmlzaWJsZV8oZ3JpZFBvaW50KSAmJgotICAgICAgbWluWm9vbSA8PSB0aGlzLnNob3duQm91bmRzXy56ICYmCi0gICAgICB0aGlzLnNob3duQm91bmRzXy56IDw9IG1heFpvb20pIHsKLSAgICB0aGlzLmFkZE92ZXJsYXlfKG1hcmtlcik7Ci0gICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnNfKCk7Ci0gIH0KLSAgdGhpcy5udW1NYXJrZXJzX1ttaW5ab29tXSsrOwotfTsKLQotCi0vKioKLSAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBib3VuZHMgb2YgSU5UIHJhbmdlcy4KLSAqIEBwYXJhbSBib3VuZHMgQXJyYXkuPE9iamVjdC48c3RyaW5nLCBudW1iZXI+PiBCb3VuZHMgb2JqZWN0LgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIEdyaWRCb3VuZHMoYm91bmRzKSB7Ci0gIC8vIFtzdywgbmVdCi0KLSAgdGhpcy5taW5YID0gTWF0aC5taW4oYm91bmRzWzBdLngsIGJvdW5kc1sxXS54KTsKLSAgdGhpcy5tYXhYID0gTWF0aC5tYXgoYm91bmRzWzBdLngsIGJvdW5kc1sxXS54KTsKLSAgdGhpcy5taW5ZID0gTWF0aC5taW4oYm91bmRzWzBdLnksIGJvdW5kc1sxXS55KTsKLSAgdGhpcy5tYXhZID0gTWF0aC5tYXgoYm91bmRzWzBdLnksIGJvdW5kc1sxXS55KTsKLQotfQotCi0vKioKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGJvdW5kcyBlcXVhbCB0aGUgZ2l2ZW4gYm91bmRzLgotICogQHBhcmFtIHtHcmlkQm91bmRzfSBncmlkQm91bmRzIEdyaWRCb3VuZHMgVGhlIGJvdW5kcyB0byB0ZXN0LgotICogQHJldHVybiB7Qm9vbGVhbn0gVGhpcyBCb3VuZHMgZXF1YWxzIHRoZSBnaXZlbiBHcmlkQm91bmRzLgotICovCi1HcmlkQm91bmRzLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAoZ3JpZEJvdW5kcykgewotICBpZiAodGhpcy5tYXhYID09PSBncmlkQm91bmRzLm1heFggJiYgdGhpcy5tYXhZID09PSBncmlkQm91bmRzLm1heFkgJiYgdGhpcy5taW5YID09PSBncmlkQm91bmRzLm1pblggJiYgdGhpcy5taW5ZID09PSBncmlkQm91bmRzLm1pblkpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX07Ci0KLS8qKgotICogUmV0dXJucyB0cnVlIGlmIHRoaXMgYm91bmRzIChpbmNsdXNpdmVseSkgY29udGFpbnMgdGhlIGdpdmVuIHBvaW50LgotICogQHBhcmFtIHtQb2ludH0gcG9pbnQgIFRoZSBwb2ludCB0byB0ZXN0LgotICogQHJldHVybiB7Qm9vbGVhbn0gVGhpcyBCb3VuZHMgY29udGFpbnMgdGhlIGdpdmVuIFBvaW50LgotICovCi1HcmlkQm91bmRzLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24gKHBvaW50KSB7Ci0gIHZhciBvdXRlciA9IHRoaXM7Ci0gIHJldHVybiAob3V0ZXIubWluWCA8PSBwb2ludC54ICYmIG91dGVyLm1heFggPj0gcG9pbnQueCAmJiBvdXRlci5taW5ZIDw9IHBvaW50LnkgJiYgb3V0ZXIubWF4WSA+PSBwb2ludC55KTsKLX07Ci0KLS8qKgotICogR2V0IGEgY2VsbCBpbiB0aGUgZ3JpZCwgY3JlYXRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5LgotICoKLSAqIE9wdGltaXphdGlvbiBjYW5kaWRhdGUKLSAqCi0gKiBAcGFyYW0ge051bWJlcn0geCBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBjZWxsLgotICogQHBhcmFtIHtOdW1iZXJ9IHkgVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgY2VsbC4KLSAqIEBwYXJhbSB7TnVtYmVyfSB6IFRoZSB6IGNvb3JkaW5hdGUgb2YgdGhlIGNlbGwuCi0gKiBAcmV0dXJuIHtBcnJheX0gVGhlIGNlbGwgaW4gdGhlIGFycmF5LgotICovCi1NYXJrZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRHcmlkQ2VsbENyZWF0ZV8gPSBmdW5jdGlvbiAoeCwgeSwgeikgewotICB2YXIgZ3JpZCA9IHRoaXMuZ3JpZF9bel07Ci0gIGlmICh4IDwgMCkgewotICAgIHggKz0gdGhpcy5ncmlkV2lkdGhfW3pdOwotICB9Ci0gIHZhciBncmlkQ29sID0gZ3JpZFt4XTsKLSAgaWYgKCFncmlkQ29sKSB7Ci0gICAgZ3JpZENvbCA9IGdyaWRbeF0gPSBbXTsKLSAgICByZXR1cm4gKGdyaWRDb2xbeV0gPSBbXSk7Ci0gIH0KLSAgdmFyIGdyaWRDZWxsID0gZ3JpZENvbFt5XTsKLSAgaWYgKCFncmlkQ2VsbCkgewotICAgIHJldHVybiAoZ3JpZENvbFt5XSA9IFtdKTsKLSAgfQotICByZXR1cm4gZ3JpZENlbGw7Ci19OwotCi0KLS8qKgotICogR2V0IGEgY2VsbCBpbiB0aGUgZ3JpZCwgcmV0dXJuaW5nIHVuZGVmaW5lZCBpZiBpdCBkb2VzIG5vdCBleGlzdC4KLSAqCi0gKiBOT1RFOiBPcHRpbWl6ZWQgZm9yIHNwZWVkIC0tIG90aGVyd2lzZSBjb3VsZCBjb21iaW5lIHdpdGggZ2V0R3JpZENlbGxDcmVhdGVfLgotICoKLSAqIEBwYXJhbSB7TnVtYmVyfSB4IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbGwuCi0gKiBAcGFyYW0ge051bWJlcn0geSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBjZWxsLgotICogQHBhcmFtIHtOdW1iZXJ9IHogVGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgY2VsbC4KLSAqIEByZXR1cm4ge0FycmF5fSBUaGUgY2VsbCBpbiB0aGUgYXJyYXkuCi0gKi8KLU1hcmtlck1hbmFnZXIucHJvdG90eXBlLmdldEdyaWRDZWxsTm9DcmVhdGVfID0gZnVuY3Rpb24gKHgsIHksIHopIHsKLSAgdmFyIGdyaWQgPSB0aGlzLmdyaWRfW3pdOwotCi0gIGlmICh4IDwgMCkgewotICAgIHggKz0gdGhpcy5ncmlkV2lkdGhfW3pdOwotICB9Ci0gIHZhciBncmlkQ29sID0gZ3JpZFt4XTsKLSAgcmV0dXJuIGdyaWRDb2wgPyBncmlkQ29sW3ldIDogdW5kZWZpbmVkOwotfTsKLQotCi0vKioKLSAqIFR1cm5zIGF0IGdlb2dyYXBoaWNhbCBib3VuZHMgaW50byBhIGdyaWQtc3BhY2UgYm91bmRzLgotICoKLSAqIEBwYXJhbSB7TGF0TG5nQm91bmRzfSBib3VuZHMgVGhlIGdlb2dyYXBoaWNhbCBib3VuZHMuCi0gKiBAcGFyYW0ge051bWJlcn0gem9vbSBUaGUgem9vbSBsZXZlbCBvZiB0aGUgYm91bmRzLgotICogQHBhcmFtIHtnb29nbGUubWFwcy5TaXplfSBzd1BhZGRpbmcgVGhlIHBhZGRpbmcgaW4gcGl4ZWxzIHRvIGV4dGVuZCBiZXlvbmQgdGhlCi0gKiBnaXZlbiBib3VuZHMuCi0gKiBAcGFyYW0ge2dvb2dsZS5tYXBzLlNpemV9IG5lUGFkZGluZyBUaGUgcGFkZGluZyBpbiBwaXhlbHMgdG8gZXh0ZW5kIGJleW9uZCB0aGUKLSAqIGdpdmVuIGJvdW5kcy4KLSAqIEByZXR1cm4ge0dyaWRCb3VuZHN9IFRoZSBib3VuZHMgaW4gZ3JpZCBzcGFjZS4KLSAqLwotTWFya2VyTWFuYWdlci5wcm90b3R5cGUuZ2V0R3JpZEJvdW5kc18gPSBmdW5jdGlvbiAoYm91bmRzLCB6b29tLCBzd1BhZGRpbmcsIG5lUGFkZGluZykgewotICB6b29tID0gTWF0aC5taW4oem9vbSwgdGhpcy5tYXhab29tXyk7Ci0KLSAgdmFyIGJsID0gYm91bmRzLmdldFNvdXRoV2VzdCgpOwotICB2YXIgdHIgPSBib3VuZHMuZ2V0Tm9ydGhFYXN0KCk7Ci0gIHZhciBzdyA9IHRoaXMuZ2V0VGlsZVBvaW50XyhibCwgem9vbSwgc3dQYWRkaW5nKTsKLQotICB2YXIgbmUgPSB0aGlzLmdldFRpbGVQb2ludF8odHIsIHpvb20sIG5lUGFkZGluZyk7Ci0gIHZhciBndyA9IHRoaXMuZ3JpZFdpZHRoX1t6b29tXTsKLQotICAvLyBDcm9zc2luZyB0aGUgcHJpbWUgbWVyaWRpYW4gcmVxdWlyZXMgY29ycmVjdGlvbiBvZiBib3VuZHMuCi0gIGlmICh0ci5sbmcoKSA8IGJsLmxuZygpIHx8IG5lLnggPCBzdy54KSB7Ci0gICAgc3cueCAtPSBndzsKLSAgfQotICBpZiAobmUueCAtIHN3LnggICsgMSA+PSBndykgewotICAgIC8vIENvbXB1dGVkIGdyaWQgYm91bmRzIGFyZSBsYXJnZXIgdGhhbiB0aGUgd29ybGQ7IHRydW5jYXRlLgotICAgIHN3LnggPSAwOwotICAgIG5lLnggPSBndyAtIDE7Ci0gIH0KLQotICB2YXIgZ3JpZEJvdW5kcyA9IG5ldyBHcmlkQm91bmRzKFtzdywgbmVdKTsKLSAgZ3JpZEJvdW5kcy56ID0gem9vbTsKLQotICByZXR1cm4gZ3JpZEJvdW5kczsKLX07Ci0KLQotLyoqCi0gKiBHZXRzIHRoZSBncmlkLXNwYWNlIGJvdW5kcyBmb3IgdGhlIGN1cnJlbnQgbWFwIHZpZXdwb3J0LgotICoKLSAqIEByZXR1cm4ge0JvdW5kc30gVGhlIGJvdW5kcyBpbiBncmlkIHNwYWNlLgotICovCi1NYXJrZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRNYXBHcmlkQm91bmRzXyA9IGZ1bmN0aW9uICgpIHsKLSAgcmV0dXJuIHRoaXMuZ2V0R3JpZEJvdW5kc18odGhpcy5tYXBfLmdldEJvdW5kcygpLCB0aGlzLm1hcFpvb21fLCB0aGlzLnN3UGFkZGluZ18sIHRoaXMubmVQYWRkaW5nXyk7Ci19OwotCi0KLS8qKgotICogRXZlbnQgbGlzdGVuZXIgZm9yIG1hcDptb3ZlbmQuCi0gKiBOT1RFOiBVc2UgYSB0aW1lb3V0IHNvIHRoYXQgdGhlIHVzZXIgaXMgbm90IGJsb2NrZWQKLSAqIGZyb20gbW92aW5nIHRoZSBtYXAuCi0gKgotICogUmVtb3ZlZCB0aGlzIGJlY2F1c2UgYSBhIGxhY2sgb2YgYSBzY29weSBvdmVycmlkZS9jYWxsYmFjayBmdW5jdGlvbiBvbiBldmVudHMuCi0gKi8KLU1hcmtlck1hbmFnZXIucHJvdG90eXBlLm9uTWFwTW92ZUVuZF8gPSBmdW5jdGlvbiAoKSB7Ci0gIHRoaXMub2JqZWN0U2V0VGltZW91dF8odGhpcywgdGhpcy51cGRhdGVNYXJrZXJzXywgMCk7Ci19OwotCi0KLS8qKgotICogQ2FsbCBhIGZ1bmN0aW9uIG9yIGV2YWx1YXRlIGFuIGV4cHJlc3Npb24gYWZ0ZXIgYSBzcGVjaWZpZWQgbnVtYmVyIG9mCi0gKiBtaWxsaXNlY29uZHMuCi0gKgotICogRXF1aXZhbGVudCB0byB0aGUgc3RhbmRhcmQgd2luZG93LnNldFRpbWVvdXQgZnVuY3Rpb24sIGJ1dCB0aGUgZ2l2ZW4KLSAqIGZ1bmN0aW9uIGV4ZWN1dGVzIGFzIGEgbWV0aG9kIG9mIHRoaXMgaW5zdGFuY2UuIFNvIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8KLSAqIG9iamVjdFNldFRpbWVvdXQgY2FuIGNvbnRhaW4gcmVmZXJlbmNlcyB0byB0aGlzLgotICogICAgb2JqZWN0U2V0VGltZW91dCh0aGlzLCBmdW5jdGlvbiAoKSB7IGFsZXJ0KHRoaXMueCkgfSwgMTAwMCk7Ci0gKgotICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAgVGhlIHRhcmdldCBvYmplY3QuCi0gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21tYW5kICBUaGUgY29tbWFuZCB0byBydW4uCi0gKiBAcGFyYW0ge051bWJlcn0gbWlsbGlzZWNvbmRzICBUaGUgZGVsYXkuCi0gKiBAcmV0dXJuIHtCb29sZWFufSAgU3VjY2Vzcy4KLSAqLwotTWFya2VyTWFuYWdlci5wcm90b3R5cGUub2JqZWN0U2V0VGltZW91dF8gPSBmdW5jdGlvbiAob2JqZWN0LCBjb21tYW5kLCBtaWxsaXNlY29uZHMpIHsKLSAgcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKLSAgICBjb21tYW5kLmNhbGwob2JqZWN0KTsKLSAgfSwgbWlsbGlzZWNvbmRzKTsKLX07Ci0KLQotLyoqCi0gKiBJcyB0aGlzIGxheWVyIHZpc2libGU/Ci0gKgotICogUmV0dXJucyB2aXNpYmlsaXR5IHNldHRpbmcKLSAqCi0gKiBAcmV0dXJuIHtCb29sZWFufSBWaXNpYmxlCi0gKi8KLU1hcmtlck1hbmFnZXIucHJvdG90eXBlLnZpc2libGUgPSBmdW5jdGlvbiAoKSB7Ci0gIHJldHVybiB0aGlzLnNob3dfID8gdHJ1ZSA6IGZhbHNlOwotfTsKLQotCi0vKioKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFuYWdlciBpcyBoaWRkZW4uCi0gKiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KLSAqIEByZXR1cm4ge0Jvb2xlYW59IEhpZGRlbgotICovCi1NYXJrZXJNYW5hZ2VyLnByb3RvdHlwZS5pc0hpZGRlbiA9IGZ1bmN0aW9uICgpIHsKLSAgcmV0dXJuICF0aGlzLnNob3dfOwotfTsKLQotCi0vKioKLSAqIFNob3dzIHRoZSBtYW5hZ2VyIGlmIGl0J3MgY3VycmVudGx5IGhpZGRlbi4KLSAqLwotTWFya2VyTWFuYWdlci5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uICgpIHsKLSAgdGhpcy5zaG93XyA9IHRydWU7Ci0gIHRoaXMucmVmcmVzaCgpOwotfTsKLQotCi0vKioKLSAqIEhpZGVzIHRoZSBtYW5hZ2VyIGlmIGl0J3MgY3VycmVudGx5IHZpc2libGUKLSAqLwotTWFya2VyTWFuYWdlci5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uICgpIHsKLSAgdGhpcy5zaG93XyA9IGZhbHNlOwotICB0aGlzLnJlZnJlc2goKTsKLX07Ci0KLQotLyoqCi0gKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBtYW5hZ2VyLgotICovCi1NYXJrZXJNYW5hZ2VyLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoKSB7Ci0gIHRoaXMuc2hvd18gPSAhdGhpcy5zaG93XzsKLSAgdGhpcy5yZWZyZXNoKCk7Ci19OwotCi0KLS8qKgotICogUmVmcmVzaCBmb3JjZXMgdGhlIG1hcmtlci1tYW5hZ2VyIGludG8gYSBnb29kIHN0YXRlLgotICogPG9sPgotICogICA8bGk+SWYgbmV2ZXIgYmVmb3JlIGluaXRpYWxpemVkLCBzaG93cyBhbGwgdGhlIG1hcmtlcnMuPC9saT4KLSAqICAgPGxpPklmIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQsIHJlbW92ZXMgYW5kIHJlLWFkZHMgYWxsIG1hcmtlcnMuPC9saT4KLSAqIDwvb2w+Ci0gKi8KLU1hcmtlck1hbmFnZXIucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7Ci0gIGlmICh0aGlzLnNob3duTWFya2Vyc18gPiAwKSB7Ci0gICAgdGhpcy5wcm9jZXNzQWxsXyh0aGlzLnNob3duQm91bmRzXywgdGhpcy5yZW1vdmVPdmVybGF5Xyk7Ci0gIH0KLSAgLy8gQW4gZXh0cmEgY2hlY2sgb24gdGhpcy5zaG93XyB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZSAobm8gbmVlZCB0byBwcm9jZXNzQWxsXykKLSAgaWYgKHRoaXMuc2hvd18pIHsKLSAgICB0aGlzLnByb2Nlc3NBbGxfKHRoaXMuc2hvd25Cb3VuZHNfLCB0aGlzLmFkZE92ZXJsYXlfKTsKLSAgfQotICB0aGlzLm5vdGlmeUxpc3RlbmVyc18oKTsKLX07Ci0KLQotLyoqCi0gKiBBZnRlciB0aGUgdmlld3BvcnQgbWF5IGhhdmUgY2hhbmdlZCwgYWRkIG9yIHJlbW92ZSBtYXJrZXJzIGFzIG5lZWRlZC4KLSAqLwotTWFya2VyTWFuYWdlci5wcm90b3R5cGUudXBkYXRlTWFya2Vyc18gPSBmdW5jdGlvbiAoKSB7Ci0gIHRoaXMubWFwWm9vbV8gPSB0aGlzLm1hcF8uZ2V0Wm9vbSgpOwotICB2YXIgbmV3Qm91bmRzID0gdGhpcy5nZXRNYXBHcmlkQm91bmRzXygpOwotCi0gIC8vIElmIHRoZSBtb3ZlIGRvZXMgbm90IGluY2x1ZGUgbmV3IGdyaWQgc2VjdGlvbnMsCi0gIC8vIHdlIGhhdmUgbm8gd29yayB0byBkbzoKLSAgaWYgKG5ld0JvdW5kcy5lcXVhbHModGhpcy5zaG93bkJvdW5kc18pICYmIG5ld0JvdW5kcy56ID09PSB0aGlzLnNob3duQm91bmRzXy56KSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKG5ld0JvdW5kcy56ICE9PSB0aGlzLnNob3duQm91bmRzXy56KSB7Ci0gICAgdGhpcy5wcm9jZXNzQWxsXyh0aGlzLnNob3duQm91bmRzXywgdGhpcy5yZW1vdmVPdmVybGF5Xyk7Ci0gICAgaWYgKHRoaXMuc2hvd18pIHsgLy8gcGVyZm9ybWFuY2UKLSAgICAgIHRoaXMucHJvY2Vzc0FsbF8obmV3Qm91bmRzLCB0aGlzLmFkZE92ZXJsYXlfKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLy8gUmVtb3ZlIG1hcmtlcnM6Ci0gICAgdGhpcy5yZWN0YW5nbGVEaWZmXyh0aGlzLnNob3duQm91bmRzXywgbmV3Qm91bmRzLCB0aGlzLnJlbW92ZUNlbGxNYXJrZXJzXyk7Ci0KLSAgICAvLyBBZGQgbWFya2VyczoKLSAgICBpZiAodGhpcy5zaG93XykgeyAvLyBwZXJmb3JtYW5jZQotICAgICAgdGhpcy5yZWN0YW5nbGVEaWZmXyhuZXdCb3VuZHMsIHRoaXMuc2hvd25Cb3VuZHNfLCB0aGlzLmFkZENlbGxNYXJrZXJzXyk7Ci0gICAgfQotICB9Ci0gIHRoaXMuc2hvd25Cb3VuZHNfID0gbmV3Qm91bmRzOwotCi0gIHRoaXMubm90aWZ5TGlzdGVuZXJzXygpOwotfTsKLQotCi0vKioKLSAqIE5vdGlmeSBsaXN0ZW5lcnMgd2hlbiB0aGUgc3RhdGUgb2Ygd2hhdCBpcyBkaXNwbGF5ZWQgY2hhbmdlcy4KLSAqLwotTWFya2VyTWFuYWdlci5wcm90b3R5cGUubm90aWZ5TGlzdGVuZXJzXyA9IGZ1bmN0aW9uICgpIHsKLSAgZ29vZ2xlLm1hcHMuZXZlbnQudHJpZ2dlcih0aGlzLCAnY2hhbmdlZCcsIHRoaXMuc2hvd25Cb3VuZHNfLCB0aGlzLnNob3duTWFya2Vyc18pOwotfTsKLQotCi0vKioKLSAqIFByb2Nlc3MgYWxsIG1hcmtlcnMgaW4gdGhlIGJvdW5kcyBwcm92aWRlZCwgdXNpbmcgYSBjYWxsYmFjay4KLSAqCi0gKiBAcGFyYW0ge0JvdW5kc30gYm91bmRzIFRoZSBib3VuZHMgaW4gZ3JpZCBzcGFjZS4KLSAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIG1hcmtlci4KLSAqLwotTWFya2VyTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0FsbF8gPSBmdW5jdGlvbiAoYm91bmRzLCBjYWxsYmFjaykgewotICBmb3IgKHZhciB4ID0gYm91bmRzLm1pblg7IHggPD0gYm91bmRzLm1heFg7IHgrKykgewotICAgIGZvciAodmFyIHkgPSBib3VuZHMubWluWTsgeSA8PSBib3VuZHMubWF4WTsgeSsrKSB7Ci0gICAgICB0aGlzLnByb2Nlc3NDZWxsTWFya2Vyc18oeCwgeSwgIGJvdW5kcy56LCBjYWxsYmFjayk7Ci0gICAgfQotICB9Ci19OwotCi0KLS8qKgotICogUHJvY2VzcyBhbGwgbWFya2VycyBpbiB0aGUgZ3JpZCBjZWxsLCB1c2luZyBhIGNhbGxiYWNrLgotICoKLSAqIEBwYXJhbSB7TnVtYmVyfSB4IFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbGwuCi0gKiBAcGFyYW0ge051bWJlcn0geSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBjZWxsLgotICogQHBhcmFtIHtOdW1iZXJ9IHogVGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgY2VsbC4KLSAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIG1hcmtlci4KLSAqLwotTWFya2VyTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0NlbGxNYXJrZXJzXyA9IGZ1bmN0aW9uICh4LCB5LCB6LCBjYWxsYmFjaykgewotICB2YXIgY2VsbCA9IHRoaXMuZ2V0R3JpZENlbGxOb0NyZWF0ZV8oeCwgeSwgeik7Ci0gIGlmIChjZWxsKSB7Ci0gICAgZm9yICh2YXIgaSA9IGNlbGwubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgIGNhbGxiYWNrKGNlbGxbaV0pOwotICAgIH0KLSAgfQotfTsKLQotCi0vKioKLSAqIFJlbW92ZSBhbGwgbWFya2VycyBpbiBhIGdyaWQgY2VsbC4KLSAqCi0gKiBAcGFyYW0ge051bWJlcn0geCBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBjZWxsLgotICogQHBhcmFtIHtOdW1iZXJ9IHkgVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgY2VsbC4KLSAqIEBwYXJhbSB7TnVtYmVyfSB6IFRoZSB6IGNvb3JkaW5hdGUgb2YgdGhlIGNlbGwuCi0gKi8KLU1hcmtlck1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUNlbGxNYXJrZXJzXyA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7Ci0gIHRoaXMucHJvY2Vzc0NlbGxNYXJrZXJzXyh4LCB5LCB6LCB0aGlzLnJlbW92ZU92ZXJsYXlfKTsKLX07Ci0KLQotLyoqCi0gKiBBZGQgYWxsIG1hcmtlcnMgaW4gYSBncmlkIGNlbGwuCi0gKgotICogQHBhcmFtIHtOdW1iZXJ9IHggVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgY2VsbC4KLSAqIEBwYXJhbSB7TnVtYmVyfSB5IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbGwuCi0gKiBAcGFyYW0ge051bWJlcn0geiBUaGUgeiBjb29yZGluYXRlIG9mIHRoZSBjZWxsLgotICovCi1NYXJrZXJNYW5hZ2VyLnByb3RvdHlwZS5hZGRDZWxsTWFya2Vyc18gPSBmdW5jdGlvbiAoeCwgeSwgeikgewotICB0aGlzLnByb2Nlc3NDZWxsTWFya2Vyc18oeCwgeSwgeiwgdGhpcy5hZGRPdmVybGF5Xyk7Ci19OwotCi0KLS8qKgotICogVXNlIHRoZSByZWN0YW5nbGVEaWZmQ29vcmRzXyBmdW5jdGlvbiB0byBwcm9jZXNzIGFsbCBncmlkIGNlbGxzCi0gKiB0aGF0IGFyZSBpbiBib3VuZHMxIGJ1dCBub3QgYm91bmRzMiwgdXNpbmcgYSBjYWxsYmFjaywgYW5kIHVzaW5nCi0gKiB0aGUgY3VycmVudCBNYXJrZXJNYW5hZ2VyIG9iamVjdCBhcyB0aGUgaW5zdGFuY2UuCi0gKgotICogUGFzcyB0aGUgeiBwYXJhbWV0ZXIgdG8gdGhlIGNhbGxiYWNrIGluIGFkZGl0aW9uIHRvIHggYW5kIHkuCi0gKgotICogQHBhcmFtIHtCb3VuZHN9IGJvdW5kczEgVGhlIGJvdW5kcyBvZiBhbGwgcG9pbnRzIHdlIG1heSBwcm9jZXNzLgotICogQHBhcmFtIHtCb3VuZHN9IGJvdW5kczIgVGhlIGJvdW5kcyBvZiBwb2ludHMgdG8gZXhjbHVkZS4KLSAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsCi0gKiAgICAgICAgICAgICAgICAgICBmb3IgZWFjaCBncmlkIGNvb3JkaW5hdGUgKHgsIHksIHopLgotICovCi1NYXJrZXJNYW5hZ2VyLnByb3RvdHlwZS5yZWN0YW5nbGVEaWZmXyA9IGZ1bmN0aW9uIChib3VuZHMxLCBib3VuZHMyLCBjYWxsYmFjaykgewotICB2YXIgbWUgPSB0aGlzOwotICBtZS5yZWN0YW5nbGVEaWZmQ29vcmRzXyhib3VuZHMxLCBib3VuZHMyLCBmdW5jdGlvbiAoeCwgeSkgewotICAgIGNhbGxiYWNrLmFwcGx5KG1lLCBbeCwgeSwgYm91bmRzMS56XSk7Ci0gIH0pOwotfTsKLQotCi0vKioKLSAqIENhbGxzIHRoZSBmdW5jdGlvbiBmb3IgYWxsIHBvaW50cyBpbiBib3VuZHMxLCBub3QgaW4gYm91bmRzMgotICoKLSAqIEBwYXJhbSB7Qm91bmRzfSBib3VuZHMxIFRoZSBib3VuZHMgb2YgYWxsIHBvaW50cyB3ZSBtYXkgcHJvY2Vzcy4KLSAqIEBwYXJhbSB7Qm91bmRzfSBib3VuZHMyIFRoZSBib3VuZHMgb2YgcG9pbnRzIHRvIGV4Y2x1ZGUuCi0gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbAotICogICAgICAgICAgICAgICAgICAgZm9yIGVhY2ggZ3JpZCBjb29yZGluYXRlLgotICovCi1NYXJrZXJNYW5hZ2VyLnByb3RvdHlwZS5yZWN0YW5nbGVEaWZmQ29vcmRzXyA9IGZ1bmN0aW9uIChib3VuZHMxLCBib3VuZHMyLCBjYWxsYmFjaykgewotICB2YXIgbWluWDEgPSBib3VuZHMxLm1pblg7Ci0gIHZhciBtaW5ZMSA9IGJvdW5kczEubWluWTsKLSAgdmFyIG1heFgxID0gYm91bmRzMS5tYXhYOwotICB2YXIgbWF4WTEgPSBib3VuZHMxLm1heFk7Ci0gIHZhciBtaW5YMiA9IGJvdW5kczIubWluWDsKLSAgdmFyIG1pblkyID0gYm91bmRzMi5taW5ZOwotICB2YXIgbWF4WDIgPSBib3VuZHMyLm1heFg7Ci0gIHZhciBtYXhZMiA9IGJvdW5kczIubWF4WTsKLQotICB2YXIgeCwgeTsKLSAgZm9yICh4ID0gbWluWDE7IHggPD0gbWF4WDE7IHgrKykgeyAgLy8gQWxsIHggaW4gUjEKLSAgICAvLyBBbGwgYWJvdmU6Ci0gICAgZm9yICh5ID0gbWluWTE7IHkgPD0gbWF4WTEgJiYgeSA8IG1pblkyOyB5KyspIHsgIC8vIHkgaW4gUjEgYWJvdmUgUjIKLSAgICAgIGNhbGxiYWNrKHgsIHkpOwotICAgIH0KLSAgICAvLyBBbGwgYmVsb3c6Ci0gICAgZm9yICh5ID0gTWF0aC5tYXgobWF4WTIgKyAxLCBtaW5ZMSk7ICAvLyB5IGluIFIxIGJlbG93IFIyCi0gICAgICAgICB5IDw9IG1heFkxOyB5KyspIHsKLSAgICAgIGNhbGxiYWNrKHgsIHkpOwotICAgIH0KLSAgfQotCi0gIGZvciAoeSA9IE1hdGgubWF4KG1pblkxLCBtaW5ZMik7Ci0gICAgICAgeSA8PSBNYXRoLm1pbihtYXhZMSwgbWF4WTIpOyB5KyspIHsgIC8vIEFsbCB5IGluIFIyIGFuZCBpbiBSMQotICAgIC8vIFN0cmljdGx5IGxlZnQ6Ci0gICAgZm9yICh4ID0gTWF0aC5taW4obWF4WDEgKyAxLCBtaW5YMikgLSAxOwotICAgICAgICAgeCA+PSBtaW5YMTsgeC0tKSB7ICAvLyB4IGluIFIxIGxlZnQgb2YgUjIKLSAgICAgIGNhbGxiYWNrKHgsIHkpOwotICAgIH0KLSAgICAvLyBTdHJpY3RseSByaWdodDoKLSAgICBmb3IgKHggPSBNYXRoLm1heChtaW5YMSwgbWF4WDIgKyAxKTsgIC8vIHggaW4gUjEgcmlnaHQgb2YgUjIKLSAgICAgICAgIHggPD0gbWF4WDE7IHgrKykgewotICAgICAgY2FsbGJhY2soeCwgeSk7Ci0gICAgfQotICB9Ci19OwotCi0KLS8qKgotICogUmVtb3ZlcyB2YWx1ZSBmcm9tIGFycmF5LiBPKE4pLgotICoKLSAqIEBwYXJhbSB7QXJyYXl9IGFycmF5ICBUaGUgYXJyYXkgdG8gbW9kaWZ5LgotICogQHBhcmFtIHthbnl9IHZhbHVlICBUaGUgdmFsdWUgdG8gcmVtb3ZlLgotICogQHBhcmFtIHtCb29sZWFufSBvcHRfbm90eXBlICBGbGFnIHRvIGRpc2FibGUgdHlwZSBjaGVja2luZyBpbiBlcXVhbGl0eS4KLSAqIEByZXR1cm4ge051bWJlcn0gIFRoZSBudW1iZXIgb2YgaW5zdGFuY2VzIG9mIHZhbHVlIHRoYXQgd2VyZSByZW1vdmVkLgotICovCi1NYXJrZXJNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVGcm9tQXJyYXlfID0gZnVuY3Rpb24gKGFycmF5LCB2YWx1ZSwgb3B0X25vdHlwZSkgewotICB2YXIgc2hpZnQgPSAwOwotICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7Ci0gICAgaWYgKGFycmF5W2ldID09PSB2YWx1ZSB8fCAob3B0X25vdHlwZSAmJiBhcnJheVtpXSA9PT0gdmFsdWUpKSB7Ci0gICAgICBhcnJheS5zcGxpY2UoaS0tLCAxKTsKLSAgICAgIHNoaWZ0Kys7Ci0gICAgfQotICB9Ci0gIHJldHVybiBzaGlmdDsKLX07Ci0KLQotCi0KLQotCi0KLS8qKgotKiAgIFByb2plY3Rpb24gb3ZlcmxheSBoZWxwZXIuIEhlbHBzIGluIGNhbGN1bGF0aW5nCi0qICAgdGhhdCBtYXJrZXJzIGdldCBpbnRvIHRoZSByaWdodCBncmlkLgotKiAgIEBjb25zdHJ1Y3RvcgotKiAgIEBwYXJhbSB7TWFwfSBtYXAgVGhlIG1hcCB0byBtYW5hZ2UuCi0qKi8KLWZ1bmN0aW9uIFByb2plY3Rpb25IZWxwZXJPdmVybGF5KG1hcCkgewotCi0gIHRoaXMuc2V0TWFwKG1hcCk7Ci0KLSAgdmFyIFRJTEVGQUNUT1IgPSA4OwotICB2YXIgVElMRVNJREUgPSAxIDw8IFRJTEVGQUNUT1I7Ci0gIHZhciBSQURJVVMgPSA3OwotCi0gIHRoaXMuX21hcCA9IG1hcDsKLSAgdGhpcy5fem9vbSA9IC0xOwotICB0aGlzLl9YMCA9Ci0gIHRoaXMuX1kwID0KLSAgdGhpcy5fWDEgPQotICB0aGlzLl9ZMSA9IC0xOwotCi0KLX0KLWlmICh0eXBlb2YoZ29vZ2xlKSAhPSAndW5kZWZpbmVkJyAmJiBnb29nbGUubWFwcykgeyAvLyBtYWtlIHN1cmUgaXQgZXhpc3RzIC0tIGFtYWxvCi1Qcm9qZWN0aW9uSGVscGVyT3ZlcmxheS5wcm90b3R5cGUgPSBuZXcgZ29vZ2xlLm1hcHMuT3ZlcmxheVZpZXcoKTsKLX0KLQotLyoqCi0gKiAgSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgTG5nIHRvIFgKLSAqICBAcHJpdmF0ZQotICogIEBwYXJhbSB7ZmxvYXR9IGxuZwotICoqLwotUHJvamVjdGlvbkhlbHBlck92ZXJsYXkucHJvdG90eXBlLkxuZ1RvWF8gPSBmdW5jdGlvbiAobG5nKSB7Ci0gIHJldHVybiAoMSArIGxuZyAvIDE4MCk7Ci19OwotCi0vKioKLSAqICBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBMYXQgdG8gWQotICogIEBwcml2YXRlCi0gKiAgQHBhcmFtIHtmbG9hdH0gbGF0Ci0gKiovCi1Qcm9qZWN0aW9uSGVscGVyT3ZlcmxheS5wcm90b3R5cGUuTGF0VG9ZXyA9IGZ1bmN0aW9uIChsYXQpIHsKLSAgdmFyIHNpbm9mcGhpID0gTWF0aC5zaW4obGF0ICogTWF0aC5QSSAvIDE4MCk7Ci0gIHJldHVybiAoMSAtIDAuNSAvIE1hdGguUEkgKiBNYXRoLmxvZygoMSArIHNpbm9mcGhpKSAvICgxIC0gc2lub2ZwaGkpKSk7Ci19OwotCi0vKioKLSogICBPbGQgc2Nob29sIExhdExuZ1RvUGl4ZWwKLSogICBAcGFyYW0ge0xhdExuZ30gbGF0bG5nIGdvb2dsZS5tYXBzLkxhdExuZyBvYmplY3QKLSogICBAcGFyYW0ge051bWJlcn0gem9vbSBab29tIGxldmVsCi0qICAgQHJldHVybiB7cG9zaXRpb259IHt4OiBwaXhlbFBvc2l0aW9uWCwgeTogcGl4ZWxQb3NpdGlvbll9Ci0qKi8KLVByb2plY3Rpb25IZWxwZXJPdmVybGF5LnByb3RvdHlwZS5MYXRMbmdUb1BpeGVsID0gZnVuY3Rpb24gKGxhdGxuZywgem9vbSkgewotICB2YXIgbWFwID0gdGhpcy5fbWFwOwotICB2YXIgZGl2ID0gdGhpcy5nZXRQcm9qZWN0aW9uKCkuZnJvbUxhdExuZ1RvRGl2UGl4ZWwobGF0bG5nKTsKLSAgdmFyIGFicyA9IHt4OiB+figwLjUgKyB0aGlzLkxuZ1RvWF8obGF0bG5nLmxuZygpKSAqICgyIDw8ICh6b29tICsgNikpKSwgeTogfn4oMC41ICsgdGhpcy5MYXRUb1lfKGxhdGxuZy5sYXQoKSkgKiAoMiA8PCAoem9vbSArIDYpKSl9OwotICByZXR1cm4gYWJzOwotfTsKLQotCi0vKioKLSAqIERyYXcgZnVuY3Rpb24gb25seSB0cmlnZ2VycyBhIHJlYWR5IGV2ZW50IGZvcgotICogTWFya2VyTWFuYWdlciB0byBrbm93IHByb2plY3Rpb24gY2FuIHByb2NlZWQgdG8KLSAqIGluaXRpYWxpemUuCi0gKi8KLVByb2plY3Rpb25IZWxwZXJPdmVybGF5LnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKCkgewotICBpZiAoIXRoaXMucmVhZHkpIHsKLSAgICB0aGlzLnJlYWR5ID0gdHJ1ZTsKLSAgICBnb29nbGUubWFwcy5ldmVudC50cmlnZ2VyKHRoaXMsICdyZWFkeScpOwotICB9Ci19OwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vYmVuY2gvd3JpdGUucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9iZW5jaC93cml0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkxYzNkMC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9iZW5jaC93cml0ZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDM0NSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgLSotIGNvZGluZzogYXNjaWkgLSotCi1yIiIiCi09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gV3JpdGUgYmVuY2htYXJrIHJlc3VsdHMKLT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotV3JpdGUgYmVuY2htYXJrIHJlc3VsdHMuCi0KLTpDb3B5cmlnaHQ6Ci0KLSBDb3B5cmlnaHQgMjAxNCAtIDIwMTUKLSBBbmRyXHhlOSBNYWxvIG9yIGhpcyBsaWNlbnNvcnMsIGFzIGFwcGxpY2FibGUKLQotOkxpY2Vuc2U6Ci0KLSBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLVVzYWdlOjoKLQotICAgIHB5dGhvbiAtbWJlbmNoLndyaXRlIFstcCBwbGFpbl0gWy10IHRhYmxlXSA8cGlja2xlZAotCi0gICAgLXAgcGxhaW4gIFBsYWluIGZpbGUgdG8gd3JpdGUgdG8gKGxpa2UgZG9jcy9CRU5DSE1BUktTKS4KLSAgICAtdCB0YWJsZSAgVGFibGUgZmlsZSB0byB3cml0ZSB0byAobGlrZSBkb2NzL191c2VyZG9jL2JlbmNobWFyay50eHQpLgotCi0iIiIKLWlmIF9fZG9jX186Ci0gICAgX19kb2NfXyA9IF9fZG9jX18uZW5jb2RlKCdhc2NpaScpLmRlY29kZSgndW5pY29kZV9lc2NhcGUnKQotX19hdXRob3JfXyA9IHIiQW5kclx4ZTkgTWFsbyIuZW5jb2RlKCdhc2NpaScpLmRlY29kZSgndW5pY29kZV9lc2NhcGUnKQotX19kb2Nmb3JtYXRfXyA9ICJyZXN0cnVjdHVyZWR0ZXh0IGVuIgotX19saWNlbnNlX18gPSAiQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wIgotX192ZXJzaW9uX18gPSAiMS4wLjAiCi0KLWltcG9ydCBvcyBhcyBfb3MKLWltcG9ydCByZSBhcyBfcmUKLWltcG9ydCBzeXMgYXMgX3N5cwotCi0KLXRyeToKLSAgICB1bmljb2RlCi1leGNlcHQgTmFtZUVycm9yOgotICAgIGRlZiB1bmkodik6Ci0gICAgICAgIGlmIGhhc2F0dHIodiwgJ2RlY29kZScpOgotICAgICAgICAgICAgcmV0dXJuIHYuZGVjb2RlKCdsYXRpbi0xJykKLSAgICAgICAgcmV0dXJuIHN0cih2KQotZWxzZToKLSAgICBkZWYgdW5pKHYpOgotICAgICAgICBpZiBpc2luc3RhbmNlKHYsIHVuaWNvZGUpOgotICAgICAgICAgICAgcmV0dXJuIHYuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIHJldHVybiBzdHIodikKLQotCi1kZWYgd3JpdGVfdGFibGUoZmlsZW5hbWUsIHJlc3VsdHMpOgotICAgICIiIgotICAgIE91dHB1dCB0YWJsZWQgYmVuY2htYXJrIHJlc3VsdHMKLQotICAgIDpQYXJhbWV0ZXJzOgotICAgICAgYGZpbGVuYW1lYCA6IGBgc3RyYGAKLSAgICAgICAgRmlsZW5hbWUgdG8gd3JpdGUgdG8KLQotICAgICAgYHJlc3VsdHNgIDogYGBsaXN0YGAKLSAgICAgICAgUmVzdWx0cwotICAgICIiIgotICAgIHRyeToKLSAgICAgICAgbmV4dAotICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgIG5leHQgPSBsYW1iZGEgaTogKGdldGF0dHIoaSwgJ25leHQnLCBOb25lKSBvciBpLl9fbmV4dF9fKSgpCi0gICAgdHJ5OgotICAgICAgICBjbXAKLSAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICBjbXAgPSBsYW1iZGEgYSwgYjogKGEgPiBiKSAtIChhIDwgYikKLQotICAgIG5hbWVzID0gWwotICAgICAgICAoJ3NpbXBsZV9wb3J0JywgJ1NpbXBsZSBQb3J0JyksCi0gICAgICAgICgnanNtaW5fMl8wXzknLCAnanNtaW4gMi4wLjknKSwKLSAgICAgICAgKCdyanNtaW4nLCAnfHJqc21pbnwnKSwKLSAgICAgICAgKCdfcmpzbWluJywgcidfXCB8cmpzbWlufCcpLAotICAgIF0KLSAgICBiZW5jaGVkX3Blcl90YWJsZSA9IDIKLQotICAgIHJlc3VsdHMgPSBzb3J0ZWQocmVzdWx0cywgcmV2ZXJzZT1UcnVlKQotCi0gICAgIyBGaXJzdCB3ZSB0cmFuc2Zvcm0gb3VyIGRhdGEgaW50byBhIHRhYmxlIChsaXN0IG9mIGxpc3RzKQotICAgIHB5dGhvbnMsIHdpZHRocyA9IFtdLCBbMF0gKiAoYmVuY2hlZF9wZXJfdGFibGUgKyAxKQotICAgIGxhc3RfdmVyc2lvbiA9IE5vbmUKLSAgICBmb3IgdmVyc2lvbiwgXywgcmVzdWx0IGluIHJlc3VsdHM6Ci0gICAgICAgIHZlcnNpb24gPSB1bmkodmVyc2lvbikKLSAgICAgICAgaWYgbm90KGxhc3RfdmVyc2lvbiBpcyBOb25lIG9yIHZlcnNpb24uc3RhcnRzd2l0aCgnMi4nKSk6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBsYXN0X3ZlcnNpb24gPSB2ZXJzaW9uCi0KLSAgICAgICAgbmFtZXN1YiA9IF9yZS5jb21waWxlKHInKD86LVxkKyg/OlwuXGQrKSopP1wuanMkJykuc3ViCi0gICAgICAgIHJlc3VsdCA9IGl0ZXIocmVzdWx0KQotICAgICAgICB0YWJsZXMgPSBbXQotCi0gICAgICAgICMgZ2l2ZW4gb3VyIGRhdGEgaXQncyBlYXNpZXIgdG8gY3JlYXRlIHRoZSB0YWJsZSB0cmFuc3Bvc2VkLi4uCi0gICAgICAgIGZvciBiZW5jaGVkIGluIHJlc3VsdDoKLSAgICAgICAgICAgIHJvd3MgPSBbWydOYW1lJ10gKyBbZGVzYyBmb3IgXywgZGVzYyBpbiBuYW1lc11dCi0gICAgICAgICAgICBmb3IgXyBpbiByYW5nZShiZW5jaGVkX3Blcl90YWJsZSk6Ci0gICAgICAgICAgICAgICAgaWYgXzoKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgYmVuY2hlZCA9IG5leHQocmVzdWx0KQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MuYXBwZW5kKFsnJ10gKyBbJycgZm9yIF8gaW4gbmFtZXNdKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgICAgIHRpbWVzID0gZGljdCgoCi0gICAgICAgICAgICAgICAgICAgIHVuaShwb3J0KSwgKHRpbWUsIGJlbmNoZWRbJ3NpemVzJ11baWR4XSkKLSAgICAgICAgICAgICAgICApIGZvciBpZHgsIChwb3J0LCB0aW1lKSBpbiBlbnVtZXJhdGUoYmVuY2hlZFsndGltZXMnXSkpCi0gICAgICAgICAgICAgICAgY29sdW1ucyA9IFsnJXMgKCUuMWYpJyAlICgKLSAgICAgICAgICAgICAgICAgICAgbmFtZXN1YignJywgX29zLnBhdGguYmFzZW5hbWUodW5pKGJlbmNoZWRbJ2ZpbGVuYW1lJ10pKSksCi0gICAgICAgICAgICAgICAgICAgIGJlbmNoZWRbJ3NpemUnXSAvIDEwMjQuMCwKLSAgICAgICAgICAgICAgICApXQotICAgICAgICAgICAgICAgIGZvciBpZHgsIChwb3J0LCBfKSBpbiBlbnVtZXJhdGUobmFtZXMpOgotICAgICAgICAgICAgICAgICAgICBpZiBwb3J0IG5vdCBpbiB0aW1lczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMuYXBwZW5kKCduL2EnKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgdGltZSwgc2l6ZSA9IHRpbWVzW3BvcnRdCi0gICAgICAgICAgICAgICAgICAgIGlmIHRpbWUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMuYXBwZW5kKCcoZmFpbGVkKScpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLmFwcGVuZCgnJXMlLjJmIG1zICglLjFmICVzKScgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHggPT0gMCBhbmQgJyAnIG9yICcnLAotICAgICAgICAgICAgICAgICAgICAgICAgdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgLyAxMDI0LjAsCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHggPT0gMCBhbmQgJ1xcKicgb3IgWyc9JywgJz4nLCAnPCddWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtcChzaXplLCBiZW5jaGVkWydzaXplcyddWzBdKQotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgKSkKLSAgICAgICAgICAgICAgICByb3dzLmFwcGVuZChjb2x1bW5zKQotCi0gICAgICAgICAgICAjIGNhbGN1bGF0ZSBjb2x1bW4gd2lkdGhzIChnbG9iYWwgZm9yIGFsbCB0YWJsZXMpCi0gICAgICAgICAgICBmb3IgaWR4LCByb3cgaW4gZW51bWVyYXRlKHJvd3MpOgotICAgICAgICAgICAgICAgIHdpZHRoc1tpZHhdID0gbWF4KHdpZHRoc1tpZHhdLCBtYXgobWFwKGxlbiwgcm93KSkpCi0KLSAgICAgICAgICAgICMgLi4uIGFuZCB0cmFuc3Bvc2UgaXQgYmFjay4KLSAgICAgICAgICAgIHRhYmxlcy5hcHBlbmQoemlwKCpyb3dzKSkKLSAgICAgICAgcHl0aG9ucy5hcHBlbmQoKHZlcnNpb24sIHRhYmxlcykpCi0KLSAgICAgICAgaWYgbGFzdF92ZXJzaW9uLnN0YXJ0c3dpdGgoJzIuJyk6Ci0gICAgICAgICAgICBicmVhawotCi0gICAgIyBTZWNvbmQgd2UgY3JlYXRlIGEgcmVzdCB0YWJsZSBmcm9tIGl0Ci0gICAgbGluZXMgPSBbXQotICAgIHNlcGFyYXRvciA9IGxhbWJkYSBjPSctJzogJysnLmpvaW4oWycnXSArIFsKLSAgICAgICAgYyAqICh3aWR0aCArIDIpIGZvciB3aWR0aCBpbiB3aWR0aHMKLSAgICBdICsgWycnXSkKLQotICAgIGZvciBpZHgsICh2ZXJzaW9uLCB0YWJsZXMpIGluIGVudW1lcmF0ZShweXRob25zKToKLSAgICAgICAgaWYgaWR4OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotCi0gICAgICAgIGxpbmUgPSAnUHl0aG9uICVzJyAlICh2ZXJzaW9uLCkKLSAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnficgKiBsZW4obGluZSkpCi0KLSAgICAgICAgZm9yIHRhYmxlIGluIHRhYmxlczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnLi4gcnN0LWNsYXNzOjogYmVuY2htYXJrJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLQotICAgICAgICAgICAgZm9yIGlkeCwgcm93IGluIGVudW1lcmF0ZSh0YWJsZSk6Ci0gICAgICAgICAgICAgICAgaWYgaWR4ID09IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgaGVhZGVyCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZXBhcmF0b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd8Jy5qb2luKFsnJ10gKyBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnICVzJSpzICcgJSAoY29sLCBsZW4oY29sKSAtIHdpZHRoLCAnJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciB3aWR0aCwgY29sIGluIHppcCh3aWR0aHMsIHJvdykKLSAgICAgICAgICAgICAgICAgICAgXSArIFsnJ10pKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VwYXJhdG9yKCc9JykpCi0gICAgICAgICAgICAgICAgZWxzZTogIyBkYXRhCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnfCcuam9pbihbJyddICsgWwotICAgICAgICAgICAgICAgICAgICAgICAgaiA9PSAwIGFuZCAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAlcyUqcyAnICUgKGNvbCwgbGVuKGNvbCkgLSB3aWR0aHNbal0sICcnKQotICAgICAgICAgICAgICAgICAgICAgICAgKSBvciAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyclKnMgICcsICcgJSpzICddW2lkeCA9PSAxXSAlICh3aWR0aHNbal0sIGNvbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBqLCBjb2wgaW4gZW51bWVyYXRlKHJvdykKLSAgICAgICAgICAgICAgICAgICAgXSArIFsnJ10pKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VwYXJhdG9yKCkpCi0KLSAgICBmcGxpbmVzID0gW10KLSAgICBmcCA9IG9wZW4oZmlsZW5hbWUpCi0gICAgdHJ5OgotICAgICAgICBmcGl0ZXIgPSBpdGVyKGZwKQotICAgICAgICBmb3IgbGluZSBpbiBmcGl0ZXI6Ci0gICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQotICAgICAgICAgICAgaWYgbGluZSA9PSAnLi4gYmVnaW4gdGFibGVzJzoKLSAgICAgICAgICAgICAgICBidWYgPSBbXQotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZwaXRlcjoKLSAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGluZSA9PSAnLi4gZW5kIHRhYmxlcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcGxpbmVzLmFwcGVuZCgnLi4gYmVnaW4gdGFibGVzJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAgICAgICAgICAgICAgZnBsaW5lcy5leHRlbmQobGluZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBmcGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwbGluZXMuYXBwZW5kKCcuLiBlbmQgdGFibGVzJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IFtdCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChsaW5lKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGZwbGluZXMuZXh0ZW5kKGJ1ZikKLSAgICAgICAgICAgICAgICAgICAgX3N5cy5zdGRlcnIud3JpdGUoIlBsYWNlaG9sZGVyIGNvbnRhaW5lciBub3QgZm91bmQhXG4iKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmcGxpbmVzLmFwcGVuZChsaW5lKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGZwLmNsb3NlKCkKLQotICAgIGZwID0gb3BlbihmaWxlbmFtZSwgJ3cnKQotICAgIHRyeToKLSAgICAgICAgZnAud3JpdGUoJ1xuJy5qb2luKGZwbGluZXMpICsgJ1xuJykKLSAgICBmaW5hbGx5OgotICAgICAgICBmcC5jbG9zZSgpCi0KLQotZGVmIHdyaXRlX3BsYWluKGZpbGVuYW1lLCByZXN1bHRzKToKLSAgICAiIiIKLSAgICBPdXRwdXQgcGxhaW4gYmVuY2htYXJrIHJlc3VsdHMKLQotICAgIDpQYXJhbWV0ZXJzOgotICAgICAgYGZpbGVuYW1lYCA6IGBgc3RyYGAKLSAgICAgICAgRmlsZW5hbWUgdG8gd3JpdGUgdG8KLQotICAgICAgYHJlc3VsdHNgIDogYGBsaXN0YGAKLSAgICAgICAgUmVzdWx0cwotICAgICIiIgotICAgIGxpbmVzID0gW10KLSAgICByZXN1bHRzID0gc29ydGVkKHJlc3VsdHMsIHJldmVyc2U9VHJ1ZSkKLSAgICBmb3IgaWR4LCAodmVyc2lvbiwgaW1wb3J0X25vdGVzLCByZXN1bHQpIGluIGVudW1lcmF0ZShyZXN1bHRzKToKLSAgICAgICAgaWYgaWR4OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJCBweXRob24lcyAtT08gYmVuY2gvbWFpbi5weSBiZW5jaC8qLmpzJyAlICgKLSAgICAgICAgICAgICcuJy5qb2luKHZlcnNpb24uc3BsaXQoJy4nKVs6Ml0pCi0gICAgICAgICkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnficgKiA3MikKLSAgICAgICAgZm9yIG5vdGUgaW4gaW1wb3J0X25vdGVzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKHVuaShub3RlKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdQeXRob24gUmVsZWFzZTogJXMnICUgKHZlcnNpb24sKSkKLQotICAgICAgICBmb3Igc2luZ2xlIGluIHJlc3VsdDoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQmVuY2htYXJraW5nICVyLi4uICglLjFmIEtpQiknICUgKAotICAgICAgICAgICAgICAgIHVuaShzaW5nbGVbJ2ZpbGVuYW1lJ10pLCBzaW5nbGVbJ3NpemUnXSAvIDEwMjQuMAotICAgICAgICAgICAgKSkKLSAgICAgICAgICAgIGZvciBtc2cgaW4gc2luZ2xlWydtZXNzYWdlcyddOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChtc2cpCi0gICAgICAgICAgICB0aW1lcyA9IFtdCi0gICAgICAgICAgICBzcGFjZSA9IG1heChbbGVuKHVuaShwb3J0KSkgZm9yIHBvcnQsIF8gaW4gc2luZ2xlWyd0aW1lcyddXSkKLSAgICAgICAgICAgIGZvciBpZHgsIChwb3J0LCB0aW1lKSBpbiBlbnVtZXJhdGUoc2luZ2xlWyd0aW1lcyddKToKLSAgICAgICAgICAgICAgICBwb3J0ID0gdW5pKHBvcnQpCi0gICAgICAgICAgICAgICAgaWYgdGltZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgRkFJTEVEICVzIiAlIChwb3J0LCkpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdGltZXMuYXBwZW5kKHRpbWUpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICIgIFRpbWluZyAlcyVzIC4uLiAoJTUuMWYgS2lCICVzKSAlOC4yZiBtcyIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKiAoc3BhY2UgLSBsZW4ocG9ydCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVsnc2l6ZXMnXVtpZHhdIC8gMTAyNC4wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9PSAwIGFuZCAnKicgb3IgWyc9JywgJz4nLCAnPCddWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXAoc2luZ2xlWydzaXplcyddW2lkeF0sIHNpbmdsZVsnc2l6ZXMnXVswXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICBpZiBsZW4odGltZXMpID4gMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzWy0xXSArPSAiIChmYWN0b3I6ICVzKSIgJSAoJywgJy5qb2luKFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJS4yZicgJSAodGltZWQgLyB0aW1lKSBmb3IgdGltZWQgaW4gdGltZXNbOi0xXQotICAgICAgICAgICAgICAgICAgICAgICAgXSkpCi0KLSAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgbGluZXMuYXBwZW5kKCcnKQotICAgIGxpbmVzLmFwcGVuZCgnIyB2aW06IG5vd3JhcCcpCi0gICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAndycpCi0gICAgdHJ5OgotICAgICAgICBmcC53cml0ZSgnXG4nLmpvaW4obGluZXMpICsgJ1xuJykKLSAgICBmaW5hbGx5OgotICAgICAgICBmcC5jbG9zZSgpCi0KLQotZGVmIG1haW4oYXJndj1Ob25lKToKLSAgICAiIiIgTWFpbiAiIiIKLSAgICBpbXBvcnQgZ2V0b3B0IGFzIF9nZXRvcHQKLSAgICBpbXBvcnQgcGlja2xlIGFzIF9waWNrbGUKLQotICAgIGlmIGFyZ3YgaXMgTm9uZToKLSAgICAgICAgYXJndiA9IF9zeXMuYXJndlsxOl0KLSAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBfZ2V0b3B0LmdldG9wdChhcmd2LCAiaHA6dDoiLCBbImhlbHAiXSkKLSAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yOgotICAgICAgICBlID0gX3N5cy5leGNfaW5mbygpWzBdKF9zeXMuZXhjX2luZm8oKVsxXSkKLSAgICAgICAgcHJpbnQgPj4gX3N5cy5zdGRlcnIsICIlc1xuVHJ5ICVzIC1tYmVuY2gud3JpdGUgLS1oZWxwIiAlICgKLSAgICAgICAgICAgIGUsCi0gICAgICAgICAgICBfb3MucGF0aC5iYXNlbmFtZShfc3lzLmV4ZWN1dGFibGUpLAotICAgICAgICApCi0gICAgICAgIF9zeXMuZXhpdCgyKQotCi0gICAgcGxhaW4sIHRhYmxlID0gTm9uZSwgTm9uZQotICAgIGZvciBrZXksIHZhbHVlIGluIG9wdHM6Ci0gICAgICAgIGlmIGtleSBpbiAoIi1oIiwgIi0taGVscCIpOgotICAgICAgICAgICAgcHJpbnQgPj4gX3N5cy5zdGRlcnIsICgKLSAgICAgICAgICAgICAgICAiJXMgLW1iZW5jaC53cml0ZSBbLXAgcGxhaW5dIFstdCB0YWJsZV0gPHBpY2tsZWQiICUgKAotICAgICAgICAgICAgICAgICAgICBfb3MucGF0aC5iYXNlbmFtZShfc3lzLmV4ZWN1dGFibGUpLAotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIF9zeXMuZXhpdCgwKQotICAgICAgICBlbGlmIGtleSA9PSAnLXAnOgotICAgICAgICAgICAgcGxhaW4gPSBzdHIodmFsdWUpCi0gICAgICAgIGVsaWYga2V5ID09ICctdCc6Ci0gICAgICAgICAgICB0YWJsZSA9IHN0cih2YWx1ZSkKLQotICAgIHN0cnVjdCA9IFtdCi0gICAgX3N5cy5zdGRpbiA9IGdldGF0dHIoX3N5cy5zdGRpbiwgJ2RldGFjaCcsIGxhbWJkYTogX3N5cy5zdGRpbikoKQotICAgIHRyeToKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHZlcnNpb24sIGltcG9ydF9ub3RlcywgcmVzdWx0ID0gX3BpY2tsZS5sb2FkKF9zeXMuc3RkaW4pCi0gICAgICAgICAgICBpZiBoYXNhdHRyKHZlcnNpb24sICdkZWNvZGUnKToKLSAgICAgICAgICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbi5kZWNvZGUoJ2xhdGluLTEnKQotICAgICAgICAgICAgc3RydWN0LmFwcGVuZCgodmVyc2lvbiwgaW1wb3J0X25vdGVzLCByZXN1bHQpKQotICAgIGV4Y2VwdCBFT0ZFcnJvcjoKLSAgICAgICAgcGFzcwotCi0gICAgaWYgcGxhaW46Ci0gICAgICAgIHdyaXRlX3BsYWluKHBsYWluLCBzdHJ1Y3QpCi0KLSAgICBpZiB0YWJsZToKLSAgICAgICAgd3JpdGVfdGFibGUodGFibGUsIHN0cnVjdCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9CRU5DSE1BUktTIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9CRU5DSE1BUktTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGZiYzkwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvQkVOQ0hNQVJLUworKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0kIHB5dGhvbjMuNSAtT08gYmVuY2gvbWFpbi5weSBiZW5jaC8qLmpzCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLVB5dGhvbiBSZWxlYXNlOiAzLjUuMAotCi1CZW5jaG1hcmtpbmcgJ2JlbmNoL2FwaXZpZXdlci5qcycuLi4gKDk1My4yIEtpQikKLSAgVGltaW5nIHNpbXBsZV9wb3J0IC4uLiAoOTUxLjUgS2lCICopICAxNDE3LjE0IG1zCi0gIFRpbWluZyBqc21pbl8yXzBfOSAuLi4gKDk1MS41IEtpQiA+KSAgMTY4Mi40MyBtcyAoZmFjdG9yOiAwLjg0KQotICBUaW1pbmcgcmpzbWluICAgICAgLi4uICg5NTEuNSBLaUIgPSkgICAgMzYuMzggbXMgKGZhY3RvcjogMzguOTUsIDQ2LjI1KQotICBUaW1pbmcgX3Jqc21pbiAgICAgLi4uICg5NTEuNSBLaUIgPSkgICAgIDEuODEgbXMgKGZhY3RvcjogNzgzLjU0LCA5MzAuMjIsIDIwLjExKQotCi1CZW5jaG1hcmtpbmcgJ2JlbmNoL2Jvb3RzdHJhcC5qcycuLi4gKDQ5LjAgS2lCKQotICBUaW1pbmcgc2ltcGxlX3BvcnQgLi4uICggMjYuNCBLaUIgKikgICAgNTguNDkgbXMKLSAgVGltaW5nIGpzbWluXzJfMF85IC4uLiAoIDI2LjQgS2lCID4pICAgIDIzLjE4IG1zIChmYWN0b3I6IDIuNTIpCi0gIFRpbWluZyByanNtaW4gICAgICAuLi4gKCAyNi40IEtpQiA+KSAgICAgOC45MyBtcyAoZmFjdG9yOiA2LjU1LCAyLjYwKQotICBUaW1pbmcgX3Jqc21pbiAgICAgLi4uICggMjYuNCBLaUIgPikgICAgIDAuMTMgbXMgKGZhY3RvcjogNDQ0LjYyLCAxNzYuMjUsIDY3Ljg5KQotCi1CZW5jaG1hcmtpbmcgJ2JlbmNoL0RhdGVUaW1lU2hvcnRjdXRzLmpzJy4uLiAoMTguMyBLaUIpCi0gIFRpbWluZyBzaW1wbGVfcG9ydCAuLi4gKCAxMC4yIEtpQiAqKSAgICAyMS44MyBtcwotICBUaW1pbmcganNtaW5fMl8wXzkgLi4uICggMTAuMyBLaUIgPikgICAgIDguODcgbXMgKGZhY3RvcjogMi40NikKLSAgVGltaW5nIHJqc21pbiAgICAgIC4uLiAoIDEwLjIgS2lCID4pICAgICAyLjQyIG1zIChmYWN0b3I6IDkuMDMsIDMuNjcpCi0gIFRpbWluZyBfcmpzbWluICAgICAuLi4gKCAxMC4yIEtpQiA+KSAgICAgMC4wNSBtcyAoZmFjdG9yOiA0NzkuODEsIDE5NC45NywgNTMuMTYpCi0KLUJlbmNobWFya2luZyAnYmVuY2gvanF1ZXJ5LTEuNy4xLmpzJy4uLiAoMjQyLjQgS2lCKQotICBUaW1pbmcgc2ltcGxlX3BvcnQgLi4uICgxMzUuOSBLaUIgKikgICAzMDYuNDEgbXMKLSAgVGltaW5nIGpzbWluXzJfMF85IC4uLiAoMTM2LjggS2lCID4pICAgMTU2LjQ1IG1zIChmYWN0b3I6IDEuOTYpCi0gIFRpbWluZyByanNtaW4gICAgICAuLi4gKDEzNS45IEtpQiA9KSAgICA2MS41NyBtcyAoZmFjdG9yOiA0Ljk4LCAyLjU0KQotICBUaW1pbmcgX3Jqc21pbiAgICAgLi4uICgxMzUuOSBLaUIgPSkgICAgIDAuODMgbXMgKGZhY3RvcjogMzY4LjUyLCAxODguMTcsIDc0LjA1KQotCi1CZW5jaG1hcmtpbmcgJ2JlbmNoL2tub2Nrb3V0LTIuMC4wLmpzJy4uLiAoMzguOSBLaUIpCi0gIFRpbWluZyBzaW1wbGVfcG9ydCAuLi4gKCAzOC42IEtpQiAqKSAgICA1Ni41OCBtcwotICBUaW1pbmcganNtaW5fMl8wXzkgLi4uICggMzguNiBLaUIgPikgICAgMjUuNTMgbXMgKGZhY3RvcjogMi4yMikKLSAgVGltaW5nIHJqc21pbiAgICAgIC4uLiAoIDM4LjYgS2lCID4pICAgICAxLjg4IG1zIChmYWN0b3I6IDMwLjExLCAxMy41OCkKLSAgVGltaW5nIF9yanNtaW4gICAgIC4uLiAoIDM4LjYgS2lCID4pICAgICAwLjA4IG1zIChmYWN0b3I6IDczNi41MSwgMzMyLjI3LCAyNC40NikKLQotQmVuY2htYXJraW5nICdiZW5jaC9tYXJrZXJtYW5hZ2VyLmpzJy4uLiAoMjguNiBLaUIpCi0gIFRpbWluZyBzaW1wbGVfcG9ydCAuLi4gKCAxMS42IEtpQiAqKSAgICAyOC42MSBtcwotICBUaW1pbmcganNtaW5fMl8wXzkgLi4uICggMTEuNiBLaUIgPikgICAgMTEuNzQgbXMgKGZhY3RvcjogMi40NCkKLSAgVGltaW5nIHJqc21pbiAgICAgIC4uLiAoIDExLjYgS2lCID0pICAgICAzLjgxIG1zIChmYWN0b3I6IDcuNTEsIDMuMDgpCi0gIFRpbWluZyBfcmpzbWluICAgICAuLi4gKCAxMS42IEtpQiA9KSAgICAgMC4wNiBtcyAoZmFjdG9yOiA0OTcuNDksIDIwNC4xOSwgNjYuMjUpCi0KLQotJCBweXRob24zLjQgLU9PIGJlbmNoL21haW4ucHkgYmVuY2gvKi5qcwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1QeXRob24gUmVsZWFzZTogMy40LjMKLQotQmVuY2htYXJraW5nICdiZW5jaC9hcGl2aWV3ZXIuanMnLi4uICg5NTMuMiBLaUIpCi0gIFRpbWluZyBzaW1wbGVfcG9ydCAuLi4gKDk1MS41IEtpQiAqKSAgMTQ4Ni4wMiBtcwotICBUaW1pbmcganNtaW5fMl8wXzkgLi4uICg5NTEuNSBLaUIgPikgIDE3OTguNjEgbXMgKGZhY3RvcjogMC44MykKLSAgVGltaW5nIHJqc21pbiAgICAgIC4uLiAoOTUxLjUgS2lCID0pICAgIDM3LjQ5IG1zIChmYWN0b3I6IDM5LjY0LCA0Ny45OCkKLSAgVGltaW5nIF9yanNtaW4gICAgIC4uLiAoOTUxLjUgS2lCID0pICAgICAxLjkwIG1zIChmYWN0b3I6IDc4MC4zOSwgOTQ0LjU1LCAxOS42OSkKLQotQmVuY2htYXJraW5nICdiZW5jaC9ib290c3RyYXAuanMnLi4uICg0OS4wIEtpQikKLSAgVGltaW5nIHNpbXBsZV9wb3J0IC4uLiAoIDI2LjQgS2lCICopICAgIDYzLjI5IG1zCi0gIFRpbWluZyBqc21pbl8yXzBfOSAuLi4gKCAyNi40IEtpQiA+KSAgICAyNy40NyBtcyAoZmFjdG9yOiAyLjMwKQotICBUaW1pbmcgcmpzbWluICAgICAgLi4uICggMjYuNCBLaUIgPikgICAgIDkuMzAgbXMgKGZhY3RvcjogNi44MCwgMi45NSkKLSAgVGltaW5nIF9yanNtaW4gICAgIC4uLiAoIDI2LjQgS2lCID4pICAgICAwLjE0IG1zIChmYWN0b3I6IDQ1OS4xMiwgMTk5LjI5LCA2Ny40NykKLQotQmVuY2htYXJraW5nICdiZW5jaC9EYXRlVGltZVNob3J0Y3V0cy5qcycuLi4gKDE4LjMgS2lCKQotICBUaW1pbmcgc2ltcGxlX3BvcnQgLi4uICggMTAuMiBLaUIgKikgICAgMjMuNzAgbXMKLSAgVGltaW5nIGpzbWluXzJfMF85IC4uLiAoIDEwLjMgS2lCID4pICAgICA5LjY2IG1zIChmYWN0b3I6IDIuNDUpCi0gIFRpbWluZyByanNtaW4gICAgICAuLi4gKCAxMC4yIEtpQiA+KSAgICAgMi41MSBtcyAoZmFjdG9yOiA5LjQ0LCAzLjg1KQotICBUaW1pbmcgX3Jqc21pbiAgICAgLi4uICggMTAuMiBLaUIgPikgICAgIDAuMDUgbXMgKGZhY3RvcjogNDg1LjIyLCAxOTcuODAsIDUxLjM4KQotCi1CZW5jaG1hcmtpbmcgJ2JlbmNoL2pxdWVyeS0xLjcuMS5qcycuLi4gKDI0Mi40IEtpQikKLSAgVGltaW5nIHNpbXBsZV9wb3J0IC4uLiAoMTM1LjkgS2lCICopICAgMzMyLjA1IG1zCi0gIFRpbWluZyBqc21pbl8yXzBfOSAuLi4gKDEzNi44IEtpQiA+KSAgIDE3MC43NyBtcyAoZmFjdG9yOiAxLjk0KQotICBUaW1pbmcgcmpzbWluICAgICAgLi4uICgxMzUuOSBLaUIgPSkgICAgNjQuMjkgbXMgKGZhY3RvcjogNS4xNywgMi42NikKLSAgVGltaW5nIF9yanNtaW4gICAgIC4uLiAoMTM1LjkgS2lCID0pICAgICAwLjg2IG1zIChmYWN0b3I6IDM4NS41OSwgMTk4LjMwLCA3NC42NSkKLQotQmVuY2htYXJraW5nICdiZW5jaC9rbm9ja291dC0yLjAuMC5qcycuLi4gKDM4LjkgS2lCKQotICBUaW1pbmcgc2ltcGxlX3BvcnQgLi4uICggMzguNiBLaUIgKikgICAgNjAuOTAgbXMKLSAgVGltaW5nIGpzbWluXzJfMF85IC4uLiAoIDM4LjYgS2lCID4pICAgIDI3LjA2IG1zIChmYWN0b3I6IDIuMjUpCi0gIFRpbWluZyByanNtaW4gICAgICAuLi4gKCAzOC42IEtpQiA+KSAgICAgMS45OSBtcyAoZmFjdG9yOiAzMC41NSwgMTMuNTcpCi0gIFRpbWluZyBfcmpzbWluICAgICAuLi4gKCAzOC42IEtpQiA+KSAgICAgMC4wOCBtcyAoZmFjdG9yOiA3MzEuODQsIDMyNS4xNiwgMjMuOTYpCi0KLUJlbmNobWFya2luZyAnYmVuY2gvbWFya2VybWFuYWdlci5qcycuLi4gKDI4LjYgS2lCKQotICBUaW1pbmcgc2ltcGxlX3BvcnQgLi4uICggMTEuNiBLaUIgKikgICAgMzEuMDggbXMKLSAgVGltaW5nIGpzbWluXzJfMF85IC4uLiAoIDExLjYgS2lCID4pICAgIDEyLjg5IG1zIChmYWN0b3I6IDIuNDEpCi0gIFRpbWluZyByanNtaW4gICAgICAuLi4gKCAxMS42IEtpQiA9KSAgICAgMy45OSBtcyAoZmFjdG9yOiA3Ljc4LCAzLjIzKQotICBUaW1pbmcgX3Jqc21pbiAgICAgLi4uICggMTEuNiBLaUIgPSkgICAgIDAuMDYgbXMgKGZhY3RvcjogNTEyLjcwLCAyMTIuNjQsIDY1Ljg4KQotCi0KLSQgcHl0aG9uMy4zIC1PTyBiZW5jaC9tYWluLnB5IGJlbmNoLyouanMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotUHl0aG9uIFJlbGVhc2U6IDMuMy41Ci0KLUJlbmNobWFya2luZyAnYmVuY2gvYXBpdmlld2VyLmpzJy4uLiAoOTUzLjIgS2lCKQotICBUaW1pbmcgc2ltcGxlX3BvcnQgLi4uICg5NTEuNSBLaUIgKikgIDE4MjQuOTUgbXMKLSAgVGltaW5nIGpzbWluXzJfMF85IC4uLiAoOTUxLjUgS2lCID4pICAxODc0LjE3IG1zIChmYWN0b3I6IDAuOTcpCi0gIFRpbWluZyByanNtaW4gICAgICAuLi4gKDk1MS41IEtpQiA9KSAgICA0NS4wMyBtcyAoZmFjdG9yOiA0MC41MywgNDEuNjMpCi0gIFRpbWluZyBfcmpzbWluICAgICAuLi4gKDk1MS41IEtpQiA9KSAgICAgMS44NiBtcyAoZmFjdG9yOiA5ODIuNDgsIDEwMDguOTgsIDI0LjI0KQotCi1CZW5jaG1hcmtpbmcgJ2JlbmNoL2Jvb3RzdHJhcC5qcycuLi4gKDQ5LjAgS2lCKQotICBUaW1pbmcgc2ltcGxlX3BvcnQgLi4uICggMjYuNCBLaUIgKikgICAgNzIuODcgbXMKLSAgVGltaW5nIGpzbWluXzJfMF85IC4uLiAoIDI2LjQgS2lCID4pICAgIDI3LjgwIG1zIChmYWN0b3I6IDIuNjIpCi0gIFRpbWluZyByanNtaW4gICAgICAuLi4gKCAyNi40IEtpQiA+KSAgICAxMC41OCBtcyAoZmFjdG9yOiA2Ljg5LCAyLjYzKQotICBUaW1pbmcgX3Jqc21pbiAgICAgLi4uICggMjYuNCBLaUIgPikgICAgIDAuMTQgbXMgKGZhY3RvcjogNTI4LjQ1LCAyMDEuNTcsIDc2Ljc0KQotCi1CZW5jaG1hcmtpbmcgJ2JlbmNoL0RhdGVUaW1lU2hvcnRjdXRzLmpzJy4uLiAoMTguMyBLaUIpCi0gIFRpbWluZyBzaW1wbGVfcG9ydCAuLi4gKCAxMC4yIEtpQiAqKSAgICAyNy4xMiBtcwotICBUaW1pbmcganNtaW5fMl8wXzkgLi4uICggMTAuMyBLaUIgPikgICAgMTAuNTQgbXMgKGZhY3RvcjogMi41NykKLSAgVGltaW5nIHJqc21pbiAgICAgIC4uLiAoIDEwLjIgS2lCID4pICAgICAyLjc2IG1zIChmYWN0b3I6IDkuODIsIDMuODIpCi0gIFRpbWluZyBfcmpzbWluICAgICAuLi4gKCAxMC4yIEtpQiA+KSAgICAgMC4wNSBtcyAoZmFjdG9yOiA1NjAuMDAsIDIxNy42NSwgNTcuMDApCi0KLUJlbmNobWFya2luZyAnYmVuY2gvanF1ZXJ5LTEuNy4xLmpzJy4uLiAoMjQyLjQgS2lCKQotICBUaW1pbmcgc2ltcGxlX3BvcnQgLi4uICgxMzUuOSBLaUIgKikgICAzODUuNDMgbXMKLSAgVGltaW5nIGpzbWluXzJfMF85IC4uLiAoMTM2LjggS2lCID4pICAgMTgzLjMxIG1zIChmYWN0b3I6IDIuMTApCi0gIFRpbWluZyByanNtaW4gICAgICAuLi4gKDEzNS45IEtpQiA9KSAgICA3My4wMyBtcyAoZmFjdG9yOiA1LjI4LCAyLjUxKQotICBUaW1pbmcgX3Jqc21pbiAgICAgLi4uICgxMzUuOSBLaUIgPSkgICAgIDAuODcgbXMgKGZhY3RvcjogNDQ1LjMwLCAyMTEuNzgsIDg0LjM4KQotCi1CZW5jaG1hcmtpbmcgJ2JlbmNoL2tub2Nrb3V0LTIuMC4wLmpzJy4uLiAoMzguOSBLaUIpCi0gIFRpbWluZyBzaW1wbGVfcG9ydCAuLi4gKCAzOC42IEtpQiAqKSAgICA3MS44NSBtcwotICBUaW1pbmcganNtaW5fMl8wXzkgLi4uICggMzguNiBLaUIgPikgICAgMjkuODAgbXMgKGZhY3RvcjogMi40MSkKLSAgVGltaW5nIHJqc21pbiAgICAgIC4uLiAoIDM4LjYgS2lCID4pICAgICAyLjM3IG1zIChmYWN0b3I6IDMwLjI4LCAxMi41NikKLSAgVGltaW5nIF9yanNtaW4gICAgIC4uLiAoIDM4LjYgS2lCID4pICAgICAwLjA4IG1zIChmYWN0b3I6IDg5Ny41NywgMzcyLjI5LCAyOS42NCkKLQotQmVuY2htYXJraW5nICdiZW5jaC9tYXJrZXJtYW5hZ2VyLmpzJy4uLiAoMjguNiBLaUIpCi0gIFRpbWluZyBzaW1wbGVfcG9ydCAuLi4gKCAxMS42IEtpQiAqKSAgICAzNS41NCBtcwotICBUaW1pbmcganNtaW5fMl8wXzkgLi4uICggMTEuNiBLaUIgPikgICAgMTQuMTcgbXMgKGZhY3RvcjogMi41MSkKLSAgVGltaW5nIHJqc21pbiAgICAgIC4uLiAoIDExLjYgS2lCID0pICAgICA0LjgwIG1zIChmYWN0b3I6IDcuNDAsIDIuOTUpCi0gIFRpbWluZyBfcmpzbWluICAgICAuLi4gKCAxMS42IEtpQiA9KSAgICAgMC4wNiBtcyAoZmFjdG9yOiA1OTIuMTEsIDIzNi4wNCwgODAuMDMpCi0KLQotJCBweXRob24yLjcgLU9PIGJlbmNoL21haW4ucHkgYmVuY2gvKi5qcwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1QeXRob24gUmVsZWFzZTogMi43LjEwCi0KLUJlbmNobWFya2luZyAnYmVuY2gvYXBpdmlld2VyLmpzJy4uLiAoOTUzLjIgS2lCKQotICBUaW1pbmcgc2ltcGxlX3BvcnQgLi4uICg5NTEuNSBLaUIgKikgIDE4MzguMjggbXMKLSAgVGltaW5nIGpzbWluXzJfMF85IC4uLiAoOTUxLjUgS2lCID4pICAyMDMxLjI1IG1zIChmYWN0b3I6IDAuOTEpCi0gIFRpbWluZyByanNtaW4gICAgICAuLi4gKDk1MS41IEtpQiA9KSAgICA0NC4zOSBtcyAoZmFjdG9yOiA0MS40MSwgNDUuNzYpCi0gIFRpbWluZyBfcmpzbWluICAgICAuLi4gKDk1MS41IEtpQiA9KSAgICAgMS42NSBtcyAoZmFjdG9yOiAxMTE0LjExLCAxMjMxLjA2LCAyNi45MCkKLQotQmVuY2htYXJraW5nICdiZW5jaC9ib290c3RyYXAuanMnLi4uICg0OS4wIEtpQikKLSAgVGltaW5nIHNpbXBsZV9wb3J0IC4uLiAoIDI2LjQgS2lCICopICAgIDczLjk1IG1zCi0gIFRpbWluZyBqc21pbl8yXzBfOSAuLi4gKCAyNi40IEtpQiA+KSAgICAzMS4wMiBtcyAoZmFjdG9yOiAyLjM4KQotICBUaW1pbmcgcmpzbWluICAgICAgLi4uICggMjYuNCBLaUIgPikgICAgIDkuMzYgbXMgKGZhY3RvcjogNy45MCwgMy4zMikKLSAgVGltaW5nIF9yanNtaW4gICAgIC4uLiAoIDI2LjQgS2lCID4pICAgICAwLjEzIG1zIChmYWN0b3I6IDU4Mi42MiwgMjQ0LjQyLCA3My43MSkKLQotQmVuY2htYXJraW5nICdiZW5jaC9EYXRlVGltZVNob3J0Y3V0cy5qcycuLi4gKDE4LjMgS2lCKQotICBUaW1pbmcgc2ltcGxlX3BvcnQgLi4uICggMTAuMiBLaUIgKikgICAgMjcuMjIgbXMKLSAgVGltaW5nIGpzbWluXzJfMF85IC4uLiAoIDEwLjMgS2lCID4pICAgIDExLjc2IG1zIChmYWN0b3I6IDIuMzIpCi0gIFRpbWluZyByanNtaW4gICAgICAuLi4gKCAxMC4yIEtpQiA+KSAgICAgMi41NyBtcyAoZmFjdG9yOiAxMC41OSwgNC41NykKLSAgVGltaW5nIF9yanNtaW4gICAgIC4uLiAoIDEwLjIgS2lCID4pICAgICAwLjA0IG1zIChmYWN0b3I6IDc3Mi4wMSwgMzMzLjQzLCA3Mi45MikKLQotQmVuY2htYXJraW5nICdiZW5jaC9qcXVlcnktMS43LjEuanMnLi4uICgyNDIuNCBLaUIpCi0gIFRpbWluZyBzaW1wbGVfcG9ydCAuLi4gKDEzNS45IEtpQiAqKSAgIDM3OS42MiBtcwotICBUaW1pbmcganNtaW5fMl8wXzkgLi4uICgxMzYuOCBLaUIgPikgICAyMDcuNjAgbXMgKGZhY3RvcjogMS44MykKLSAgVGltaW5nIHJqc21pbiAgICAgIC4uLiAoMTM1LjkgS2lCID0pICAgIDY1LjUwIG1zIChmYWN0b3I6IDUuODAsIDMuMTcpCi0gIFRpbWluZyBfcmpzbWluICAgICAuLi4gKDEzNS45IEtpQiA9KSAgICAgMC44MCBtcyAoZmFjdG9yOiA0NzUuODIsIDI2MC4yMSwgODIuMTApCi0KLUJlbmNobWFya2luZyAnYmVuY2gva25vY2tvdXQtMi4wLjAuanMnLi4uICgzOC45IEtpQikKLSAgVGltaW5nIHNpbXBsZV9wb3J0IC4uLiAoIDM4LjYgS2lCICopICAgIDczLjQ0IG1zCi0gIFRpbWluZyBqc21pbl8yXzBfOSAuLi4gKCAzOC42IEtpQiA+KSAgICAzNC42MyBtcyAoZmFjdG9yOiAyLjEyKQotICBUaW1pbmcgcmpzbWluICAgICAgLi4uICggMzguNiBLaUIgPikgICAgIDIuMDUgbXMgKGZhY3RvcjogMzUuODAsIDE2Ljg5KQotICBUaW1pbmcgX3Jqc21pbiAgICAgLi4uICggMzguNiBLaUIgPikgICAgIDAuMDcgbXMgKGZhY3RvcjogMTAwMC4wOSwgNDcxLjY1LCAyNy45MykKLQotQmVuY2htYXJraW5nICdiZW5jaC9tYXJrZXJtYW5hZ2VyLmpzJy4uLiAoMjguNiBLaUIpCi0gIFRpbWluZyBzaW1wbGVfcG9ydCAuLi4gKCAxMS42IEtpQiAqKSAgICAzNi4yNiBtcwotICBUaW1pbmcganNtaW5fMl8wXzkgLi4uICggMTEuNiBLaUIgPikgICAgMTUuNTQgbXMgKGZhY3RvcjogMi4zMykKLSAgVGltaW5nIHJqc21pbiAgICAgIC4uLiAoIDExLjYgS2lCID0pICAgICA0LjA2IG1zIChmYWN0b3I6IDguOTQsIDMuODMpCi0gIFRpbWluZyBfcmpzbWluICAgICAuLi4gKCAxMS42IEtpQiA9KSAgICAgMC4wNSBtcyAoZmFjdG9yOiA2NjMuNTYsIDI4NC40NCwgNzQuMjQpCi0KLQotIyB2aW06IG5vd3JhcApkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9DSEFOR0VTIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9DSEFOR0VTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTc0YzRjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvQ0hBTkdFUworKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi1DaGFuZ2VzIHdpdGggdmVyc2lvbiAxLjAuMTIKLQotICopIEJlbmNobWFyayB1cGRhdGVzLCBkcm9wcGVkIHNsaW1pdCBiZW5jaG1hcmtzLCBiZWNhdXNlIG9mIGluc3RhbGxhdGlvbgotICAgIHRyb3VibGUKLQotICopIFJld29ya2VkIGhhbmRsaW5nIG9mIGNvbW1lbnRzIHN0YXJ0aW5nIHdpdGggZXhjbGFtYXRpb24gbWFya3MuIFRoZSBtYXRjaGVyCi0gICAgc2hvdWxkIG5vIGxvbmdlciBnZXQgb3V0IG9mIHN5bmMsIGV2ZW4gaWYgdGhleSBhcHBlYXIgaW4gdGhlIG1pZGRsZSBvZiBvdGhlcgotICAgIG1hdGNoZXMuCi0KLSAqKSBIYW5kbGUgbGluZSB0ZXJtaW5hdG9ycyBiZWZvcmUgYW5kIGFmdGVyIHJlZ2V4IGxpdGVyYWxzIG1vcmUgc2Vuc2libGUKLQotCi1DaGFuZ2VzIHdpdGggdmVyc2lvbiAxLjAuMTEKLQotICopIEJlbmNobWFyayB1cGRhdGVzCi0KLSAqKSBMaWZ0ZWQgbWF4IHJlc3RyaWN0aW9ucyBmb3IgQ1B5dGhvbiBhbmQgSnl0aG9uIGFzIHdlbGwuCi0KLSAqKSBMaWZ0ZWQgbWF4IHJlc3RyaWN0aW9ucyBmb3IgcHlweSB2ZXJzaW9ucy4gQWRkZWQgcHlweTMgc3VwcG9ydC4KLSAgICBTdWJtaXR0ZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL3RvbnkKLQotCi1DaGFuZ2VzIHdpdGggdmVyc2lvbiAxLjAuMTAKLQotICopIEFkZGVkIHN1cHBvcnQgZm9yIHB5cHkgMi4yCi0KLSAqKSBSZWxpbnQgd2l0aCBuZXdlciBweWxpbnQKLQotICopIEZpeCBsb2NhbGUgcHJvYmxlbSB3aXRoIHRoZSBzZXR1cCBzY3JpcHQgb24gcHl0aG9uMy4KLSAgICBTdWJtaXR0ZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL3N2ZW5zdGFybwotCi0KLUNoYW5nZXMgd2l0aCB2ZXJzaW9uIDEuMC45Ci0KLSAqKSBEb2N1bWVudGF0aW9uIGFuZCBiZW5jaG1hcmsgdXBkYXRlcwotCi0KLUNoYW5nZXMgd2l0aCB2ZXJzaW9uIDEuMC44Ci0KLSAqKSBVcGRhdGVkIGJlbmNobWFya3MKLQotICopIEFkZGVkIGNvbW1hbmQgbGluZSBvcHRpb24gZm9yIGtlZXBpbmcgY29tbWVudHMgc3RhcnRpbmcgd2l0aCBhbiBleGNsYW1hdGlvbgotICAgIG1hcmsgKC1iKQotCi0gKikgQWRkZWQgY29tbWFuZCBsaW5lIG9wdGlvbiBmb3IgZGlzYWJsaW5nIHRoZSBDIGltcGxlbWVudGlvbiAoLXApCi0KLSAqKSBBZGRlZCBzdXBwb3J0IGZvciBweXRob24gMy40Ci0KLSAqKSBBZGRlZCBzdXBwb3J0IGZvciBrZWVwaW5nIGNvbW1lbnRzIHN0YXJ0aW5nIHdpdGggYW4gZXhjbGFtYXRpb24gbWFyay4gVGhpcwotICAgIGZlYXR1cmUgY2FuIGJlIGVuYWJsZWQgYnkgcGFzc2luZyBrZWVwX2JhbmdfY29tbWVudHM9VHJ1ZSB0byB0aGUganNtaW4KLSAgICBmdW5jdGlvbi4KLQotCi1DaGFuZ2VzIHdpdGggdmVyc2lvbiAxLjAuNwotCi0gKikgRml4IGluY29uc2lzdGVuY3kgYmV0d2VlbiBQeXRob24gYW5kIEMgKFB5dGhvbiBpbXBsZW1lbnRhdGlvbiB3YXMgYnVnZ3kpLgotICAgIFNwb3R0ZWQgYnk6IERhdmUgU21pdGggPGRhdmUgdGhlc21pdGhmYW0ub3JnPgotCi0gKikgQWRkZWQgc3VwcG9ydCBmb3Iganl0aG9uIDIuNwotCi0KLUNoYW5nZXMgd2l0aCB2ZXJzaW9uIDEuMC42Ci0KLSAqKSBBZGRlZCBjb21wYXQgb3B0aW9uIHRvIHNldHVwLnB5IHN1cHBvcnRpbmcgdGhlIHBpcCBpbnN0YWxsZXIKLQotICopIEFkZGVkIHN1cHBvcnQgZm9yIHB5cHkgKDEuOSwgMi4wKQotCi0gKikgQWRkZWQgc3VwcG9ydCBmb3Iganl0aG9uICgyLjUpCi0KLQotQ2hhbmdlcyB3aXRoIHZlcnNpb24gMS4wLjUKLQotICopIE5ld2xpbmUgcmVtb3ZhbCBiZWZvcmUgISBvcGVyYXRvciB3YXMgbWFkZSBtb3JlIHNlbnNpYmxlLgotCi0KLUNoYW5nZXMgd2l0aCB2ZXJzaW9uIDEuMC40Ci0KLSAqKSBBZGRlZCBzdXBwb3J0IGZvciBQeXRob24gMy4zCi0KLSAqKSBDb2xsYXBzaW9uIHByb3RlY3Rpb24gd2FzIHJlZHVjZWQgdG8gIisgKyIgYW5kICItIC0iIHNlcXVlbmNlcyAod2hpY2gKLSAgICBzdGlsbCBpbmNsdWRlcyBsb25nZXIgc2VxdWVuY2VzIGxpa2UgIisgKysiKQotCi0KLUNoYW5nZXMgd2l0aCB2ZXJzaW9uIDEuMC4zCi0KLSAqKSAiKyArKyIgYW5kICItIC0tIiBzZXF1ZW5jZXMgYXJlIG5vIGxvbmdlciBjb2xsYXBzZWQuIFRoZXkgd2VyZSBiZWZvcmUsCi0gICAgYmVjYXVzZSB0aGUgb3JpZ2luYWwganNtaW4gY29sbGFwc2VkIHRoZW0sIHRvby4KLQotICopIFVwZGF0ZWQgYmVuY2htYXJrcywgYWRkZWQgc2xpbWl0IGFuZCByZW1vdmVkIGpzbWluIHY4IChiZWNhdXNlIGl0IHByb2R1Y2VkCi0gICAgaW52YWxpZCByZXN1bHRzKS4KLQotICopIFJlbW92ZWQgImNsYXNzaWMiIHJlZ2V4IHZhcmlhbnQuCi0KLQotQ2hhbmdlcyB3aXRoIHZlcnNpb24gMS4wLjIKLQotICopIEFsdGhvdWdoIGl0IHNob3VsZCB3b3JrLCBweXRob24gMi4zIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuCi0gICAgKE5vIHN1aXRhYmxlIHRlc3QgZW52aXJvbm1lbnQpCi0KLSAqKSAicmV0dXJuIC9yZWdleC8iIGlzIG5vdyByZWNvZ25pemVkIGFzIHJlZ2V4IGV4cHJlc3Npb24uIEl0IHdhc24ndCBiZWZvcmUsCi0gICAgYmVjYXVzZSB0aGUgb3JpZ2luYWwganNtaW4gaWdub3JlZCB0aGF0LCB0b28uCi0KLQotQ2hhbmdlcyB3aXRoIHZlcnNpb24gMS4wLjEKLQotICopIEFkZCBDIGV4dGVuc2lvbiByZWltcGxlbWVudGluZyB0aGUgcmVnZXggZnJvbSByanNtaW4ucHkKLQotCi1DaGFuZ2VzIHdpdGggdmVyc2lvbiAxLjAuMAotCi0gKikgRmlyc3Qgc3RhYmxlIHJlbGVhc2UuCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL0NMQVNTSUZJRVJTIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9DTEFTU0lGSUVSUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBkNTk2NS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL0NMQVNTSUZJRVJTCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDUgLSBQcm9kdWN0aW9uL1N0YWJsZQotRW52aXJvbm1lbnQgOjogV2ViIEVudmlyb25tZW50Ci1JbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzCi1MaWNlbnNlIDo6IE9TSSBBcHByb3ZlZAotTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi1PcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50Ci1Qcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBDCi1Qcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24KLVByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyCi1Qcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMwotUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IEltcGxlbWVudGF0aW9uIDo6IENQeXRob24KLVByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiBJbXBsZW1lbnRhdGlvbiA6OiBKeXRob24KLVByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiBJbXBsZW1lbnRhdGlvbiA6OiBQeVB5Ci1Ub3BpYyA6OiBJbnRlcm5ldCA6OiBXV1cvSFRUUCA6OiBEeW5hbWljIENvbnRlbnQKLVRvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcwotVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzIDo6IFB5dGhvbiBNb2R1bGVzCi1Ub3BpYyA6OiBUZXh0IFByb2Nlc3NpbmcKLVRvcGljIDo6IFRleHQgUHJvY2Vzc2luZyA6OiBGaWx0ZXJzCi1Ub3BpYyA6OiBVdGlsaXRpZXMKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvREVTQ1JJUFRJT04gYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL0RFU0NSSVBUSU9OCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmE1ZmIzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvREVTQ1JJUFRJT04KKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi09PT09PT09PT09PT09PT09PT09PT0KLSBKYXZhc2NyaXB0IE1pbmlmaWVyCi09PT09PT09PT09PT09PT09PT09PT0KLQotckpTbWluIGlzIGEgamF2YXNjcmlwdCBtaW5pZmllciB3cml0dGVuIGluIHB5dGhvbi4KLQotVGhlIG1pbmlmaWVyIGlzIGJhc2VkIG9uIHRoZSBzZW1hbnRpY3Mgb2YgYGpzbWluLmMgYnkgRG91Z2xhcyBDcm9ja2ZvcmRgX1wuCi0KLVRoZSBtb2R1bGUgaXMgYSByZS1pbXBsZW1lbnRhdGlvbiBhaW1pbmcgZm9yIHNwZWVkLCBzbyBpdCBjYW4gYmUgdXNlZCBhdAotcnVudGltZSAocmF0aGVyIHRoYW4gZHVyaW5nIGEgcHJlcHJvY2Vzc2luZyBzdGVwKS4gVXN1YWxseSBpdCBwcm9kdWNlcyB0aGUKLXNhbWUgcmVzdWx0cyBhcyB0aGUgb3JpZ2luYWwgYGBqc21pbi5jYGAuIEl0IGRpZmZlcnMgaW4gdGhlIGZvbGxvd2luZyB3YXlzOgotCi0tIHRoZXJlIGlzIG5vIGVycm9yIGRldGVjdGlvbjogdW50ZXJtaW5hdGVkIHN0cmluZywgcmVnZXggYW5kIGNvbW1lbnQKLSAgbGl0ZXJhbHMgYXJlIHRyZWF0ZWQgYXMgcmVndWxhciBqYXZhc2NyaXB0IGNvZGUgYW5kIG1pbmlmaWVkIGFzIHN1Y2guCi0tIENvbnRyb2wgY2hhcmFjdGVycyBpbnNpZGUgc3RyaW5nIGFuZCByZWdleCBsaXRlcmFscyBhcmUgbGVmdCB1bnRvdWNoZWQ7IHRoZXkKLSAgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gc3BhY2VzIChub3IgdG8gXG4pCi0tIE5ld2xpbmUgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQgaW5zaWRlIHN0cmluZyBhbmQgcmVnZXggbGl0ZXJhbHMsIGV4Y2VwdAotICBmb3IgbGluZSBjb250aW51YXRpb25zIGluIHN0cmluZyBsaXRlcmFscyAoRUNNQS01KS4KLS0gInJldHVybiAvcmVnZXgvIiBpcyByZWNvZ25pemVkIGNvcnJlY3RseS4KLS0gTGluZSB0ZXJtaW5hdG9ycyBhZnRlciByZWdleCBsaXRlcmFscyBhcmUgaGFuZGxlZCBtb3JlIHNlbnNpYmx5Ci0tICIrICsiIGFuZCAiLSAtIiBzZXF1ZW5jZXMgYXJlIG5vdCBjb2xsYXBzZWQgdG8gJysrJyBvciAnLS0nCi0tIE5ld2xpbmVzIGJlZm9yZSAhIG9wZXJhdG9ycyBhcmUgcmVtb3ZlZCBtb3JlIHNlbnNpYmx5Ci0tIENvbW1lbnRzIHN0YXJ0aW5nIHdpdGggYW4gZXhjbGFtYXRpb24gbWFyayAoYGAhYGApIGNhbiBiZSBrZXB0IG9wdGlvbmFsbHkKLS0gckpTbWluIGRvZXMgbm90IGhhbmRsZSBzdHJlYW1zLCBidXQgb25seSBjb21wbGV0ZSBzdHJpbmdzLiAoSG93ZXZlciwgdGhlCi0gIG1vZHVsZSBwcm92aWRlcyBhICJzdHJlYW15IiBpbnRlcmZhY2UpLgotCi1TaW5jZSBtb3N0IHBhcnRzIG9mIHRoZSBsb2dpYyBhcmUgaGFuZGxlZCBieSB0aGUgcmVnZXggZW5naW5lIGl0J3Mgd2F5IGZhc3RlcgotdGhhbiB0aGUgb3JpZ2luYWwgcHl0aG9uIHBvcnQgb2YgYGBqc21pbi5jYGAgYnkgQmFydWNoIEV2ZW4uIFRoZSBzcGVlZCBmYWN0b3IKLXZhcmllcyBiZXR3ZWVuIGFib3V0IDYgYW5kIDU1IGRlcGVuZGluZyBvbiBpbnB1dCBhbmQgcHl0aG9uIHZlcnNpb24gKGl0IGdldHMKLWZhc3RlciB0aGUgbW9yZSBjb21wcmVzc2VkIHRoZSBpbnB1dCBhbHJlYWR5IGlzKS4gIENvbXBhcmVkIHRvIHRoZQotc3BlZWQtcmVmYWN0b3JlZCBweXRob24gcG9ydCBieSBEYXZlIFN0Lkdlcm1haW4gdGhlIHBlcmZvcm1hbmNlIGdhaW4gaXMgbGVzcwotZHJhbWF0aWMgYnV0IHN0aWxsIGJldHdlZW4gMyBhbmQgNTAgKGZvciBodWdlIGlucHV0cykpLiBTZWUgdGhlCi1kb2NzL0JFTkNITUFSS1MgZmlsZSBmb3IgZGV0YWlscy4KLQotcmpzbWluLmMgaXMgYSByZWltcGxlbWVudGF0aW9uIG9mIHJqc21pbi5weSBpbiBDIGFuZCBzcGVlZHMgaXQgdXAgZXZlbiBtb3JlLgotCi1Cb3RoIHB5dGhvbiAyICg+PTIuNCkgYW5kIHB5dGhvbiAzIGFyZSBzdXBwb3J0ZWQuCi0KLS4uIF9qc21pbi5jIGJ5IERvdWdsYXMgQ3JvY2tmb3JkOiBodHRwOi8vd3d3LmNyb2NrZm9yZC5jb20vamF2YXNjcmlwdC9qc21pbi5jCi0KLQotQ29weXJpZ2h0IGFuZCBMaWNlbnNlCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotQ29weXJpZ2h0IDIwMTEgLSAyMDE1Ci1BbmRyw6kgTWFsbyBvciBoaXMgbGljZW5zb3JzLCBhcyBhcHBsaWNhYmxlLgotCi1UaGUgd2hvbGUgcGFja2FnZSAoZXhjZXB0IGZvciB0aGUgZmlsZXMgaW4gdGhlIGJlbmNoLyBkaXJlY3RvcnkpIGlzCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAuIFlvdSdsbCBmaW5kIGEgY29weSBpbiB0aGUKLXJvb3QgZGlyZWN0b3J5IG9mIHRoZSBkaXN0cmlidXRpb24gb3Igb25saW5lIGF0OgotPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMD4uCi0KLQotQnVncwotfn5+fgotCi1ObyBidWdzLCBvZiBjb3Vyc2UuIDstKQotQnV0IGlmIHlvdSd2ZSBmb3VuZCBvbmUgb3IgaGF2ZSBhbiBpZGVhIGhvdyB0byBpbXByb3ZlIHJqc21pbiwgZmVlbCBmcmVlCi10byBzZW5kIGEgcHVsbCByZXF1ZXN0IG9uIGBnaXRodWIgPGh0dHBzOi8vZ2l0aHViLmNvbS9uZHBhcmtlci9yanNtaW4+YF8KLW9yIHNlbmQgYSBtYWlsIHRvIDxyanNtaW4tYnVnc0BwZXJsaWcuZGU+LgotCi0KLUF1dGhvciBJbmZvcm1hdGlvbgotfn5+fn5+fn5+fn5+fn5+fn5+Ci0KLUFuZHLDqSAibmQiIE1hbG8gPG5kIHBlcmxpZy5kZT4KLUdQRzogMHg4MTAzQTM3RQotCi0KLSAgICBJZiBHb2QgaW50ZW5kZWQgcGVvcGxlIHRvIGJlIG5ha2VkLCB0aGV5IHdvdWxkIGJlIGJvcm4gdGhhdCB3YXkuCi0gICAgLS0gT3NjYXIgV2lsZGUKLQotLi4gdmltOnR3PTcyIHN5bnRheD1yZXN0CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL1BST1ZJREVTIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9QUk9WSURFUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU5ZTY2My4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL1BST1ZJREVTCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotcmpzbWluICgxLjApCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL1NVTU1BUlkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL1NVTU1BUlkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMDY0Y2UuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9TVU1NQVJZCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotSmF2YXNjcmlwdCBNaW5pZmllcgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvYXBpLW9iamVjdHMudHh0IGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvYXBpLW9iamVjdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWYyZTgyLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvYXBpZG9jL2FwaS1vYmplY3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotcmpzbWluCXJqc21pbi1tb2R1bGUuaHRtbAotcmpzbWluLl9fbGljZW5zZV9fCXJqc21pbi1tb2R1bGUuaHRtbCNfX2xpY2Vuc2VfXwotcmpzbWluLmpzbWluCXJqc21pbi1tb2R1bGUuaHRtbCNqc21pbgotcmpzbWluLl9fcGFja2FnZV9fCXJqc21pbi1tb2R1bGUuaHRtbCNfX3BhY2thZ2VfXwotcmpzbWluLl9tYWtlX2pzbWluCXJqc21pbi1tb2R1bGUuaHRtbCNfbWFrZV9qc21pbgotcmpzbWluLmpzbWluX2Zvcl9wb3NlcnMJcmpzbWluLW1vZHVsZS5odG1sI2pzbWluX2Zvcl9wb3NlcnMKLXJqc21pbi5fX2RvY19fCXJqc21pbi1tb2R1bGUuaHRtbCNfX2RvY19fCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL2FwaWRvYy9jcmFyci5wbmcgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL2FwaWRvYy9jcmFyci5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2YjQzYzUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvY3JhcnIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvZXB5ZG9jLmNzcyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvYXBpZG9jL2VweWRvYy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZDQxNzAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvZXB5ZG9jLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMyMiArMCwwIEBACi0KLQotLyogRXB5ZG9jIENTUyBTdHlsZXNoZWV0Ci0gKgotICogVGhpcyBzdHlsZXNoZWV0IGNhbiBiZSB1c2VkIHRvIGN1c3RvbWl6ZSB0aGUgYXBwZWFyYW5jZSBvZiBlcHlkb2MncwotICogSFRNTCBvdXRwdXQuCi0gKgotICovCi0KLS8qIERlZmF1bHQgQ29sb3JzICYgU3R5bGVzCi0gKiAgIC0gU2V0IHRoZSBkZWZhdWx0IGZvcmVncm91bmQgJiBiYWNrZ3JvdW5kIGNvbG9yIHdpdGggJ2JvZHknOyBhbmQgCi0gKiAgICAgbGluayBjb2xvcnMgd2l0aCAnYTpsaW5rJyBhbmQgJ2E6dmlzaXRlZCcuCi0gKiAgIC0gVXNlIGJvbGQgZm9yIGRlY2lzaW9uIGxpc3QgdGVybXMuCi0gKiAgIC0gVGhlIGhlYWRpbmcgc3R5bGVzIGRlZmluZWQgaGVyZSBhcmUgdXNlZCBmb3IgaGVhZGluZ3MgKndpdGhpbioKLSAqICAgICBkb2NzdHJpbmcgZGVzY3JpcHRpb25zLiAgQWxsIGhlYWRpbmdzIHVzZWQgYnkgZXB5ZG9jIGl0c2VsZiB1c2UKLSAqICAgICBlaXRoZXIgY2xhc3M9J2VweWRvYycgb3IgY2xhc3M9J3RvYycgKENTUyBzdHlsZXMgZm9yIGJvdGgKLSAqICAgICBkZWZpbmVkIGJlbG93KS4KLSAqLwotYm9keSAgICAgICAgICAgICAgICAgICAgICAgIHsgYmFja2dyb3VuZDogI2ZmZmZmZjsgY29sb3I6ICMwMDAwMDA7IH0KLXAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG1hcmdpbi10b3A6IDAuNWVtOyBtYXJnaW4tYm90dG9tOiAwLjVlbTsgfQotYTpsaW5rICAgICAgICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDAwZmY7IH0KLWE6dmlzaXRlZCAgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMjA0MDgwOyB9Ci1kdCAgICAgICAgICAgICAgICAgICAgICAgICAgeyBmb250LXdlaWdodDogYm9sZDsgfQotaDEgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiArMTQwJTsgZm9udC1zdHlsZTogaXRhbGljOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLWgyICAgICAgICAgICAgICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogKzEyNSU7IGZvbnQtc3R5bGU6IGl0YWxpYzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci1oMyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBmb250LXNpemU6ICsxMTAlOyBmb250LXN0eWxlOiBpdGFsaWM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOyB9Ci1jb2RlICAgICAgICAgICAgICAgICAgICAgICAgeyBmb250LXNpemU6IDEwMCU7IH0KLS8qIE4uQi46IGNsYXNzLCBub3QgcHNldWRvY2xhc3MgKi8KLWEubGluayAgICAgICAgICAgICAgICAgICAgICB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IH0KLSAKLS8qIFBhZ2UgSGVhZGVyICYgRm9vdGVyCi0gKiAgIC0gVGhlIHN0YW5kYXJkIHBhZ2UgaGVhZGVyIGNvbnNpc3RzIG9mIGEgbmF2aWdhdGlvbiBiYXIgKHdpdGgKLSAqICAgICBwb2ludGVycyB0byBzdGFuZGFyZCBwYWdlcyBzdWNoIGFzICdob21lJyBhbmQgJ3RyZWVzJyk7IGEKLSAqICAgICBicmVhZGNydW1icyBsaXN0LCB3aGljaCBjYW4gYmUgdXNlZCB0byBuYXZpZ2F0ZSB0byBjb250YWluaW5nCi0gKiAgICAgY2xhc3NlcyBvciBtb2R1bGVzOyBvcHRpb25zIGxpbmtzLCB0byBzaG93L2hpZGUgcHJpdmF0ZQotICogICAgIHZhcmlhYmxlcyBhbmQgdG8gc2hvdy9oaWRlIGZyYW1lczsgYW5kIGEgcGFnZSB0aXRsZSAodXNpbmcKLSAqICAgICA8aDE+KS4gIFRoZSBwYWdlIHRpdGxlIG1heSBiZSBmb2xsb3dlZCBieSBhIGxpbmsgdG8gdGhlCi0gKiAgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSAodXNpbmcgJ3NwYW4uY29kZWxpbmsnKS4KLSAqICAgLSBUaGUgZm9vdGVyIGNvbnNpc3RzIG9mIGEgbmF2aWdhdGlvbiBiYXIsIGEgdGltZXN0YW1wLCBhbmQgYQotICogICAgIHBvaW50ZXIgdG8gZXB5ZG9jJ3MgaG9tZXBhZ2UuCi0gKi8gCi1oMS5lcHlkb2MgICAgICAgICAgICAgICAgICAgeyBtYXJnaW46IDA7IGZvbnQtc2l6ZTogKzE0MCU7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci1oMi5lcHlkb2MgICAgICAgICAgICAgICAgICAgeyBmb250LXNpemU6ICsxMzAlOyBmb250LXdlaWdodDogYm9sZDsgfQotaDMuZXB5ZG9jICAgICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiArMTE1JTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwLjJlbTsgfQotdGQgaDMuZXB5ZG9jICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiArMTE1JTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOyB9Ci10YWJsZS5uYXZiYXIgICAgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kOiAjYTBjMGZmOyBjb2xvcjogIzAwMDAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMnB4IGdyb292ZSAjYzBkMGQwOyB9Ci10YWJsZS5uYXZiYXIgdGFibGUgICAgICAgICAgeyBjb2xvcjogIzAwMDAwMDsgfQotdGgubmF2YmFyLXNlbGVjdCAgICAgICAgICAgIHsgYmFja2dyb3VuZDogIzcwYjBmZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMDAwMDAwOyB9IAotdGFibGUubmF2YmFyIGEgICAgICAgICAgICAgIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9ICAKLXRhYmxlLm5hdmJhciBhOmxpbmsgICAgICAgICB7IGNvbG9yOiAjMDAwMGZmOyB9Ci10YWJsZS5uYXZiYXIgYTp2aXNpdGVkICAgICAgeyBjb2xvcjogIzIwNDA4MDsgfQotc3Bhbi5icmVhZGNydW1icyAgICAgICAgICAgIHsgZm9udC1zaXplOiA4NSU7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci1zcGFuLm9wdGlvbnMgICAgICAgICAgICAgICAgeyBmb250LXNpemU6IDcwJTsgfQotc3Bhbi5jb2RlbGluayAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiA4NSU7IH0KLXRkLmZvb3RlciAgICAgICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogODUlOyB9Ci0KLS8qIFRhYmxlIEhlYWRlcnMKLSAqICAgLSBFYWNoIHN1bW1hcnkgdGFibGUgYW5kIGRldGFpbHMgc2VjdGlvbiBiZWdpbnMgd2l0aCBhICdoZWFkZXInCi0gKiAgICAgcm93LiAgVGhpcyByb3cgY29udGFpbnMgYSBzZWN0aW9uIHRpdGxlIChtYXJrZWQgYnkKLSAqICAgICAnc3Bhbi50YWJsZS1oZWFkZXInKSBhcyB3ZWxsIGFzIGEgc2hvdy9oaWRlIHByaXZhdGUgbGluawotICogICAgIChtYXJrZWQgYnkgJ3NwYW4ub3B0aW9ucycsIGRlZmluZWQgYWJvdmUpLgotICogICAtIFN1bW1hcnkgdGFibGVzIHRoYXQgY29udGFpbiB1c2VyLWRlZmluZWQgZ3JvdXBzIG1hcmsgdGhvc2UKLSAqICAgICBncm91cHMgdXNpbmcgJ2dyb3VwIGhlYWRlcicgcm93cy4KLSAqLwotdGQudGFibGUtaGVhZGVyICAgICAgICAgICAgIHsgYmFja2dyb3VuZDogIzcwYjBmZjsgY29sb3I6ICMwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNjA4MDkwOyB9Ci10ZC50YWJsZS1oZWFkZXIgdGFibGUgICAgICAgeyBjb2xvcjogIzAwMDAwMDsgfQotdGQudGFibGUtaGVhZGVyIHRhYmxlIGE6bGluayAgICAgIHsgY29sb3I6ICMwMDAwZmY7IH0KLXRkLnRhYmxlLWhlYWRlciB0YWJsZSBhOnZpc2l0ZWQgICB7IGNvbG9yOiAjMjA0MDgwOyB9Ci1zcGFuLnRhYmxlLWhlYWRlciAgICAgICAgICAgeyBmb250LXNpemU6IDEyMCU7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci10aC5ncm91cC1oZWFkZXIgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kOiAjYzBlMGY4OyBjb2xvcjogIzAwMDAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IGZvbnQtc3R5bGU6IGl0YWxpYzsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDExNSU7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzYwODA5MDsgfQotCi0vKiBTdW1tYXJ5IFRhYmxlcyAoZnVuY3Rpb25zLCB2YXJpYWJsZXMsIGV0YykKLSAqICAgLSBFYWNoIG9iamVjdCBpcyBkZXNjcmliZWQgYnkgYSBzaW5nbGUgcm93IG9mIHRoZSB0YWJsZSB3aXRoCi0gKiAgICAgdHdvIGNlbGxzLiAgVGhlIGxlZnQgY2VsbCBnaXZlcyB0aGUgb2JqZWN0J3MgdHlwZSwgYW5kIGlzCi0gKiAgICAgbWFya2VkIHdpdGggJ2NvZGUuc3VtbWFyeS10eXBlJy4gIFRoZSByaWdodCBjZWxsIGdpdmVzIHRoZQotICogICAgIG9iamVjdCdzIG5hbWUgYW5kIGEgc3VtbWFyeSBkZXNjcmlwdGlvbi4KLSAqICAgLSBDU1Mgc3R5bGVzIGZvciB0aGUgdGFibGUncyBoZWFkZXIgYW5kIGdyb3VwIGhlYWRlcnMgYXJlCi0gKiAgICAgZGVmaW5lZCBhYm92ZSwgdW5kZXIgJ1RhYmxlIEhlYWRlcnMnCi0gKi8KLXRhYmxlLnN1bW1hcnkgICAgICAgICAgICAgICB7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZThmMGY4OyBjb2xvcjogIzAwMDAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM2MDgwOTA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsgfQotdGQuc3VtbWFyeSAgICAgICAgICAgICAgICAgIHsgYm9yZGVyOiAxcHggc29saWQgIzYwODA5MDsgfQotY29kZS5zdW1tYXJ5LXR5cGUgICAgICAgICAgIHsgZm9udC1zaXplOiA4NSU7IH0KLXRhYmxlLnN1bW1hcnkgYTpsaW5rICAgICAgICB7IGNvbG9yOiAjMDAwMGZmOyB9Ci10YWJsZS5zdW1tYXJ5IGE6dmlzaXRlZCAgICAgeyBjb2xvcjogIzIwNDA4MDsgfQotCi0KLS8qIERldGFpbHMgVGFibGVzIChmdW5jdGlvbnMsIHZhcmlhYmxlcywgZXRjKQotICogICAtIEVhY2ggb2JqZWN0IGlzIGRlc2NyaWJlZCBpbiBpdHMgb3duIGRpdi4KLSAqICAgLSBBIHNpbmdsZS1yb3cgc3VtbWFyeSB0YWJsZSB3LyB0YWJsZS1oZWFkZXIgaXMgdXNlZCBhcwotICogICAgIGEgaGVhZGVyIGZvciBlYWNoIGRldGFpbHMgc2VjdGlvbiAoQ1NTIHN0eWxlIGZvciB0YWJsZS1oZWFkZXIKLSAqICAgICBpcyBkZWZpbmVkIGFib3ZlLCB1bmRlciAnVGFibGUgSGVhZGVycycpLgotICovCi10YWJsZS5kZXRhaWxzICAgICAgICAgICAgICAgeyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2U4ZjBmODsgY29sb3I6ICMwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNjA4MDkwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAuMmVtIDAgMCAwOyB9Ci10YWJsZS5kZXRhaWxzIHRhYmxlICAgICAgICAgeyBjb2xvcjogIzAwMDAwMDsgfQotdGFibGUuZGV0YWlscyBhOmxpbmsgICAgICAgIHsgY29sb3I6ICMwMDAwZmY7IH0KLXRhYmxlLmRldGFpbHMgYTp2aXNpdGVkICAgICB7IGNvbG9yOiAjMjA0MDgwOyB9Ci0KLS8qIEZpZWxkcyAqLwotZGwuZmllbGRzICAgICAgICAgICAgICAgICAgIHsgbWFyZ2luLWxlZnQ6IDJlbTsgbWFyZ2luLXRvcDogMWVtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtOyB9Ci1kbC5maWVsZHMgZGQgdWwgICAgICAgICAgICAgeyBtYXJnaW4tbGVmdDogMGVtOyBwYWRkaW5nLWxlZnQ6IDBlbTsgfQotZGwuZmllbGRzIGRkIHVsIGxpIHVsICAgICAgIHsgbWFyZ2luLWxlZnQ6IDJlbTsgcGFkZGluZy1sZWZ0OiAwZW07IH0KLWRpdi5maWVsZHMgICAgICAgICAgICAgICAgICB7IG1hcmdpbi1sZWZ0OiAyZW07IH0KLWRpdi5maWVsZHMgcCAgICAgICAgICAgICAgICB7IG1hcmdpbi1ib3R0b206IDAuNWVtOyB9Ci0KLS8qIEluZGV4IHRhYmxlcyAoaWRlbnRpZmllciBpbmRleCwgdGVybSBpbmRleCwgZXRjKQotICogICAtIGxpbmstaW5kZXggaXMgdXNlZCBmb3IgaW5kaWNlcyBjb250YWluaW5nIGxpc3RzIG9mIGxpbmtzCi0gKiAgICAgKG5hbWVseSwgdGhlIGlkZW50aWZpZXIgaW5kZXggJiB0ZXJtIGluZGV4KS4KLSAqICAgLSBpbmRleC13aGVyZSBpcyB1c2VkIGluIGxpbmsgaW5kaWNlcyBmb3IgdGhlIHRleHQgaW5kaWNhdGluZwotICogICAgIHRoZSBjb250YWluZXIvc291cmNlIGZvciBlYWNoIGxpbmsuCi0gKiAgIC0gbWV0YWRhdGEtaW5kZXggaXMgdXNlZCBmb3IgaW5kaWNlcyBjb250YWluaW5nIG1ldGFkYXRhCi0gKiAgICAgZXh0cmFjdGVkIGZyb20gZmllbGRzIChuYW1lbHksIHRoZSBidWcgaW5kZXggJiB0b2RvIGluZGV4KS4KLSAqLwotdGFibGUubGluay1pbmRleCAgICAgICAgICAgIHsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlOGYwZjg7IGNvbG9yOiAjMDAwMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzYwODA5MDsgfQotdGQubGluay1pbmRleCAgICAgICAgICAgICAgIHsgYm9yZGVyLXdpZHRoOiAwcHg7IH0KLXRhYmxlLmxpbmstaW5kZXggYTpsaW5rICAgICB7IGNvbG9yOiAjMDAwMGZmOyB9Ci10YWJsZS5saW5rLWluZGV4IGE6dmlzaXRlZCAgeyBjb2xvcjogIzIwNDA4MDsgfQotc3Bhbi5pbmRleC13aGVyZSAgICAgICAgICAgIHsgZm9udC1zaXplOiA3MCU7IH0KLXRhYmxlLm1ldGFkYXRhLWluZGV4ICAgICAgICB7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZThmMGY4OyBjb2xvcjogIzAwMDAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM2MDgwOTA7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAuMmVtIDAgMCAwOyB9Ci10ZC5tZXRhZGF0YS1pbmRleCAgICAgICAgICAgeyBib3JkZXItd2lkdGg6IDFweDsgYm9yZGVyLXN0eWxlOiBzb2xpZDsgfQotdGFibGUubWV0YWRhdGEtaW5kZXggYTpsaW5rIHsgY29sb3I6ICMwMDAwZmY7IH0KLXRhYmxlLm1ldGFkYXRhLWluZGV4IGE6dmlzaXRlZCAgeyBjb2xvcjogIzIwNDA4MDsgfQotCi0vKiBGdW5jdGlvbiBzaWduYXR1cmVzCi0gKiAgIC0gc2lnKiBpcyB1c2VkIGZvciB0aGUgc2lnbmF0dXJlIGluIHRoZSBkZXRhaWxzIHNlY3Rpb24uCi0gKiAgIC0gLnN1bW1hcnktc2lnKiBpcyB1c2VkIGZvciB0aGUgc2lnbmF0dXJlIGluIHRoZSBzdW1tYXJ5IAotICogICAgIHRhYmxlLCBhbmQgd2hlbiBsaXN0aW5nIHByb3BlcnR5IGFjY2Vzc29yIGZ1bmN0aW9ucy4KLSAqICovCi0uc2lnLW5hbWUgICAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzAwNjA4MDsgfQotLnNpZy1hcmcgICAgICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDgwNjA7IH0KLS5zaWctZGVmYXVsdCAgICAgICAgICAgICAgICB7IGNvbG9yOiAjNjAyMDAwOyB9Ci0uc3VtbWFyeS1zaWcgICAgICAgICAgICAgICAgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOyB9Ci0uc3VtbWFyeS1zaWctbmFtZSAgICAgICAgICAgeyBjb2xvcjogIzAwNjA4MDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLXRhYmxlLnN1bW1hcnkgYS5zdW1tYXJ5LXNpZy1uYW1lOmxpbmsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDA2MDgwOyBmb250LXdlaWdodDogYm9sZDsgfQotdGFibGUuc3VtbWFyeSBhLnN1bW1hcnktc2lnLW5hbWU6dmlzaXRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDYwODA7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci0uc3VtbWFyeS1zaWctYXJnICAgICAgICAgICAgeyBjb2xvcjogIzAwNjA0MDsgfQotLnN1bW1hcnktc2lnLWRlZmF1bHQgICAgICAgIHsgY29sb3I6ICM1MDE4MDA7IH0KLQotLyogU3ViY2xhc3MgbGlzdAotICovCi11bC5zdWJjbGFzcy1saXN0IHsgZGlzcGxheTogaW5saW5lOyB9Ci11bC5zdWJjbGFzcy1saXN0IGxpIHsgZGlzcGxheTogaW5saW5lOyB9Ci0KLS8qIFRvIHJlbmRlciB2YXJpYWJsZXMsIGNsYXNzZXMgZXRjLiBsaWtlIGZ1bmN0aW9ucyAqLwotdGFibGUuc3VtbWFyeSAuc3VtbWFyeS1uYW1lIHsgY29sb3I6ICMwMDYwODA7IGZvbnQtd2VpZ2h0OiBib2xkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgfQotdGFibGUuc3VtbWFyeQotICAgICBhLnN1bW1hcnktbmFtZTpsaW5rICAgIHsgY29sb3I6ICMwMDYwODA7IGZvbnQtd2VpZ2h0OiBib2xkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgfQotdGFibGUuc3VtbWFyeQotICAgIGEuc3VtbWFyeS1uYW1lOnZpc2l0ZWQgIHsgY29sb3I6ICMwMDYwODA7IGZvbnQtd2VpZ2h0OiBib2xkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgfQotCi0vKiBWYXJpYWJsZSB2YWx1ZXMKLSAqICAgLSBJbiB0aGUgJ3ZhcmlhYmxlIGRldGFpbHMnIHNlY3Rpb25zLCBlYWNoIHZhcmFpYmxlJ3MgdmFsdWUgaXMKLSAqICAgICBsaXN0ZWQgaW4gYSAncHJlLnZhcmlhYmxlJyBib3guICBUaGUgd2lkdGggb2YgdGhpcyBib3ggaXMKLSAqICAgICByZXN0cmljdGVkIHRvIDgwIGNoYXJzOyBpZiB0aGUgdmFsdWUncyByZXByIGlzIGxvbmdlciB0aGFuCi0gKiAgICAgdGhpcyBpdCB3aWxsIGJlIHdyYXBwZWQsIHVzaW5nIGEgYmFja3NsYXNoIG1hcmtlZCB3aXRoCi0gKiAgICAgY2xhc3MgJ3ZhcmlhYmxlLWxpbmV3cmFwJy4gIElmIHRoZSB2YWx1ZSdzIHJlcHIgaXMgbG9uZ2VyCi0gKiAgICAgdGhhbiAzIGxpbmVzLCB0aGUgcmVzdCB3aWxsIGJlIGVsbGlkZWQ7IGFuZCBhbiBlbGxpcHNpcwotICogICAgIG1hcmtlciAoJy4uLicgbWFya2VkIHdpdGggJ3ZhcmlhYmxlLWVsbGlwc2lzJykgd2lsbCBiZSB1c2VkLgotICogICAtIElmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZywgaXRzIHF1b3RlIG1hcmtzIHdpbGwgYmUgbWFya2VkCi0gKiAgICAgd2l0aCAndmFyaWFibGUtcXVvdGUnLgotICogICAtIElmIHRoZSB2YXJpYWJsZSBpcyBhIHJlZ2V4cCwgaXQgaXMgc3ludGF4LWhpZ2hsaWdodGVkIHVzaW5nCi0gKiAgICAgdGhlIHJlKiBDU1MgY2xhc3Nlcy4KLSAqLwotcHJlLnZhcmlhYmxlICAgICAgICAgICAgICAgIHsgcGFkZGluZzogLjVlbTsgbWFyZ2luOiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2RjZTRlYzsgY29sb3I6ICMwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNzA4ODkwOyB9Ci0udmFyaWFibGUtbGluZXdyYXAgICAgICAgICAgeyBjb2xvcjogIzYwNDAwMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLS52YXJpYWJsZS1lbGxpcHNpcyAgICAgICAgICB7IGNvbG9yOiAjNjA0MDAwOyBmb250LXdlaWdodDogYm9sZDsgfQotLnZhcmlhYmxlLXF1b3RlICAgICAgICAgICAgIHsgY29sb3I6ICM2MDQwMDA7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci0udmFyaWFibGUtZ3JvdXAgICAgICAgICAgICAgeyBjb2xvcjogIzAwODAwMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLS52YXJpYWJsZS1vcCAgICAgICAgICAgICAgICB7IGNvbG9yOiAjNjA0MDAwOyBmb250LXdlaWdodDogYm9sZDsgfQotLnZhcmlhYmxlLXN0cmluZyAgICAgICAgICAgIHsgY29sb3I6ICMwMDYwMzA7IH0KLS52YXJpYWJsZS11bmtub3duICAgICAgICAgICB7IGNvbG9yOiAjYTAwMDAwOyBmb250LXdlaWdodDogYm9sZDsgfQotLnJlICAgICAgICAgICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDAwMDA7IH0KLS5yZS1jaGFyICAgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDA2MDMwOyB9Ci0ucmUtb3AgICAgICAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzYwMDAwMDsgfQotLnJlLWdyb3VwICAgICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDMwNjA7IH0KLS5yZS1yZWYgICAgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjNDA0MDQwOyB9Ci0KLS8qIEJhc2UgdHJlZQotICogICAtIFVzZWQgYnkgY2xhc3MgcGFnZXMgdG8gZGlzcGxheSB0aGUgYmFzZSBjbGFzcyBoaWVyYXJjaHkuCi0gKi8KLXByZS5iYXNlLXRyZWUgICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogODAlOyBtYXJnaW46IDA7IH0KLQotLyogRnJhbWVzLWJhc2VkIHRhYmxlIG9mIGNvbnRlbnRzIGhlYWRlcnMKLSAqICAgLSBDb25zaXN0cyBvZiB0d28gZnJhbWVzOiBvbmUgZm9yIHNlbGVjdGluZyBtb2R1bGVzOyBhbmQKLSAqICAgICB0aGUgb3RoZXIgbGlzdGluZyB0aGUgY29udGVudHMgb2YgdGhlIHNlbGVjdGVkIG1vZHVsZS4KLSAqICAgLSBoMS50b2MgaXMgdXNlZCBmb3IgZWFjaCBmcmFtZSdzIGhlYWRpbmcKLSAqICAgLSBoMi50b2MgaXMgdXNlZCBmb3Igc3ViaGVhZGluZ3Mgd2l0aGluIGVhY2ggZnJhbWUuCi0gKi8KLWgxLnRvYyAgICAgICAgICAgICAgICAgICAgICB7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOiAxMDUlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwOyBmb250LXdlaWdodDogYm9sZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7IH0KLWgyLnRvYyAgICAgICAgICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogMTAwJTsgZm9udC13ZWlnaHQ6IGJvbGQ7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwLjVlbSAwIDAgLTAuM2VtOyB9Ci0KLS8qIFN5bnRheCBIaWdobGlnaHRpbmcgZm9yIFNvdXJjZSBDb2RlCi0gKiAgIC0gZG9jdGVzdCBleGFtcGxlcyBhcmUgZGlzcGxheWVkIGluIGEgJ3ByZS5weS1kb2N0ZXN0JyBibG9jay4KLSAqICAgICBJZiB0aGUgZXhhbXBsZSBpcyBpbiBhIGRldGFpbHMgdGFibGUgZW50cnksIHRoZW4gaXQgd2lsbCB1c2UKLSAqICAgICB0aGUgY29sb3JzIHNwZWNpZmllZCBieSB0aGUgJ3RhYmxlIHByZS5weS1kb2N0ZXN0JyBsaW5lLgotICogICAtIFNvdXJjZSBjb2RlIGxpc3RpbmdzIGFyZSBkaXNwbGF5ZWQgaW4gYSAncHJlLnB5LXNyYycgYmxvY2suCi0gKiAgICAgRWFjaCBsaW5lIGlzIG1hcmtlZCB3aXRoICdzcGFuLnB5LWxpbmUnICh1c2VkIHRvIGRyYXcgYSBsaW5lCi0gKiAgICAgZG93biB0aGUgbGVmdCBtYXJnaW4sIHNlcGFyYXRpbmcgdGhlIGNvZGUgZnJvbSB0aGUgbGluZQotICogICAgIG51bWJlcnMpLiAgTGluZSBudW1iZXJzIGFyZSBkaXNwbGF5ZWQgd2l0aCAnc3Bhbi5weS1saW5lbm8nLgotICogICAgIFRoZSBleHBhbmQvY29sbGFwc2UgYmxvY2sgdG9nZ2xlIGJ1dHRvbiBpcyBkaXNwbGF5ZWQgd2l0aAotICogICAgICdhLnB5LXRvZ2dsZScgKE5vdGU6IHRoZSBDU1Mgc3R5bGUgZm9yICdhLnB5LXRvZ2dsZScgc2hvdWxkIG5vdAotICogICAgIG1vZGlmeSB0aGUgZm9udCBzaXplIG9mIHRoZSB0ZXh0LikKLSAqICAgLSBJZiBhIHNvdXJjZSBjb2RlIHBhZ2UgaXMgb3BlbmVkIHdpdGggYW4gYW5jaG9yLCB0aGVuIHRoZQotICogICAgIGNvcnJlc3BvbmRpbmcgY29kZSBibG9jayB3aWxsIGJlIGhpZ2hsaWdodGVkLiAgVGhlIGNvZGUKLSAqICAgICBibG9jaydzIGhlYWRlciBpcyBoaWdobGlnaHRlZCB3aXRoICdweS1oaWdobGlnaHQtaGRyJzsgYW5kCi0gKiAgICAgdGhlIGNvZGUgYmxvY2sncyBib2R5IGlzIGhpZ2hsaWdodGVkIHdpdGggJ3B5LWhpZ2hsaWdodCcuCi0gKiAgIC0gVGhlIHJlbWFpbmluZyBweS0qIGNsYXNzZXMgYXJlIHVzZWQgdG8gcGVyZm9ybSBzeW50YXgKLSAqICAgICBoaWdobGlnaHRpbmcgKHB5LXN0cmluZyBmb3Igc3RyaW5nIGxpdGVyYWxzLCBweS1uYW1lIGZvciBuYW1lcywKLSAqICAgICBldGMuKQotICovCi1wcmUucHktZG9jdGVzdCAgICAgICAgICAgICAgeyBwYWRkaW5nOiAuNWVtOyBtYXJnaW46IDFlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlOGYwZjg7IGNvbG9yOiAjMDAwMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzcwODg5MDsgfQotdGFibGUgcHJlLnB5LWRvY3Rlc3QgICAgICAgIHsgYmFja2dyb3VuZDogI2RjZTRlYzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMDAwMDAwOyB9Ci1wcmUucHktc3JjICAgICAgICAgICAgICAgICAgeyBib3JkZXI6IDJweCBzb2xpZCAjMDAwMDAwOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmMGYwZjA7IGNvbG9yOiAjMDAwMDAwOyB9Ci0ucHktbGluZSAgICAgICAgICAgICAgICAgICAgeyBib3JkZXItbGVmdDogMnB4IHNvbGlkICMwMDAwMDA7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC4yZW07IHBhZGRpbmctbGVmdDogLjRlbTsgfQotLnB5LWxpbmVubyAgICAgICAgICAgICAgICAgIHsgZm9udC1zdHlsZTogaXRhbGljOyBmb250LXNpemU6IDkwJTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogLjVlbTsgfQotYS5weS10b2dnbGUgICAgICAgICAgICAgICAgIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9Ci1kaXYucHktaGlnaGxpZ2h0LWhkciAgICAgICAgeyBib3JkZXItdG9wOiAycHggc29saWQgIzAwMDAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjMDAwMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Q4ZThlODsgfQotZGl2LnB5LWhpZ2hsaWdodCAgICAgICAgICAgIHsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZDBlMGUwOyB9Ci0ucHktcHJvbXB0ICAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzAwNTA1MDsgZm9udC13ZWlnaHQ6IGJvbGQ7fQotLnB5LW1vcmUgICAgICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDUwNTA7IGZvbnQtd2VpZ2h0OiBib2xkO30KLS5weS1zdHJpbmcgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDA2MDMwOyB9Ci0ucHktY29tbWVudCAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzAwMzA2MDsgfQotLnB5LWtleXdvcmQgICAgICAgICAgICAgICAgIHsgY29sb3I6ICM2MDAwMDA7IH0KLS5weS1vdXRwdXQgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjNDA0MDQwOyB9Ci0ucHktbmFtZSAgICAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzAwMDA1MDsgfQotLnB5LW5hbWU6bGluayAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDAwNTAgIWltcG9ydGFudDsgfQotLnB5LW5hbWU6dmlzaXRlZCAgICAgICAgICAgIHsgY29sb3I6ICMwMDAwNTAgIWltcG9ydGFudDsgfQotLnB5LW51bWJlciAgICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDUwMDA7IH0KLS5weS1kZWZuYW1lICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDAwMDYwOyBmb250LXdlaWdodDogYm9sZDsgfQotLnB5LWRlZi1uYW1lICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDAwNjA7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci0ucHktYmFzZS1jbGFzcyAgICAgICAgICAgICAgeyBjb2xvcjogIzAwMDA2MDsgfQotLnB5LXBhcmFtICAgICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDAwNjA7IH0KLS5weS1kb2NzdHJpbmcgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDA2MDMwOyB9Ci0ucHktZGVjb3JhdG9yICAgICAgICAgICAgICAgeyBjb2xvcjogIzgwNDAyMDsgfQotLyogVXNlIHRoaXMgaWYgeW91IGRvbid0IHdhbnQgbGlua3MgdG8gbmFtZXMgdW5kZXJsaW5lZDogKi8KLS8qYS5weS1uYW1lICAgICAgICAgICAgICAgICAgIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9Ki8KLQotLyogR3JhcGhzICYgRGlhZ3JhbXMKLSAqICAgLSBUaGVzZSBDU1Mgc3R5bGVzIGFyZSB1c2VkIGZvciBncmFwaHMgJiBkaWFncmFtcyBnZW5lcmF0ZWQgdXNpbmcKLSAqICAgICBHcmFwaHZpeiBkb3QuICAnaW1nLmdyYXBoLXdpdGhvdXQtdGl0bGUnIGlzIHVzZWQgZm9yIGJhcmUKLSAqICAgICBkaWFncmFtcyAodG8gcmVtb3ZlIHRoZSBib3JkZXIgY3JlYXRlZCBieSBtYWtpbmcgdGhlIGltYWdlCi0gKiAgICAgY2xpY2thYmxlKS4KLSAqLwotaW1nLmdyYXBoLXdpdGhvdXQtdGl0bGUgICAgIHsgYm9yZGVyOiBub25lOyB9Ci1pbWcuZ3JhcGgtd2l0aC10aXRsZSAgICAgICAgeyBib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwOyB9Ci1zcGFuLmdyYXBoLXRpdGxlICAgICAgICAgICAgeyBmb250LXdlaWdodDogYm9sZDsgfQotc3Bhbi5ncmFwaC1jYXB0aW9uICAgICAgICAgIHsgfQotCi0vKiBHZW5lcmFsLXB1cnBvc2UgY2xhc3NlcwotICogICAtICdwLmluZGVudC13cmFwcGVkLWxpbmVzJyBkZWZpbmVzIGEgcGFyYWdyYXBoIHdob3NlIGZpcnN0IGxpbmUKLSAqICAgICBpcyBub3QgaW5kZW50ZWQsIGJ1dCB3aG9zZSBzdWJzZXF1ZW50IGxpbmVzIGFyZS4KLSAqICAgLSBUaGUgJ25vbWFyZ2luLXRvcCcgY2xhc3MgaXMgdXNlZCB0byByZW1vdmUgdGhlIHRvcCBtYXJnaW4gKGUuZy4KLSAqICAgICBmcm9tIGxpc3RzKS4gIFRoZSAnbm9tYXJnaW4nIGNsYXNzIGlzIHVzZWQgdG8gcmVtb3ZlIGJvdGggdGhlCi0gKiAgICAgdG9wIGFuZCBib3R0b20gbWFyZ2luIChidXQgbm90IHRoZSBsZWZ0IG9yIHJpZ2h0IG1hcmdpbiAtLQotICogICAgIGZvciBsaXN0cywgdGhhdCB3b3VsZCBjYXVzZSB0aGUgYnVsbGV0cyB0byBkaXNhcHBlYXIuKQotICovCi1wLmluZGVudC13cmFwcGVkLWxpbmVzICAgICAgeyBwYWRkaW5nOiAwIDAgMCA3ZW07IHRleHQtaW5kZW50OiAtN2VtOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDsgfQotLm5vbWFyZ2luLXRvcCAgICAgICAgICAgICAgIHsgbWFyZ2luLXRvcDogMDsgfQotLm5vbWFyZ2luICAgICAgICAgICAgICAgICAgIHsgbWFyZ2luLXRvcDogMDsgbWFyZ2luLWJvdHRvbTogMDsgfQotCi0vKiBIVE1MIExvZyAqLwotZGl2LmxvZy1ibG9jayAgICAgICAgICAgICAgIHsgcGFkZGluZzogMDsgbWFyZ2luOiAuNWVtIDAgLjVlbSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2U4ZjBmODsgY29sb3I6ICMwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwOyB9Ci1kaXYubG9nLWVycm9yICAgICAgICAgICAgICAgeyBwYWRkaW5nOiAuMWVtIC4zZW0gLjFlbSAuM2VtOyBtYXJnaW46IDRweDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmIwYjA7IGNvbG9yOiAjMDAwMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzAwMDAwMDsgfQotZGl2LmxvZy13YXJuaW5nICAgICAgICAgICAgIHsgcGFkZGluZzogLjFlbSAuM2VtIC4xZW0gLjNlbTsgbWFyZ2luOiA0cHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmIwOyBjb2xvcjogIzAwMDAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDAwMDA7IH0KLWRpdi5sb2ctaW5mbyAgICAgICAgICAgICAgIHsgcGFkZGluZzogLjFlbSAuM2VtIC4xZW0gLjNlbTsgbWFyZ2luOiA0cHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjYjBmZmIwOyBjb2xvcjogIzAwMDAwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDAwMDA7IH0KLWgyLmxvZy1oZHIgICAgICAgICAgICAgICAgICB7IGJhY2tncm91bmQ6ICM3MGIwZmY7IGNvbG9yOiAjMDAwMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwOyBwYWRkaW5nOiAwZW0gMC41ZW0gMGVtIDAuNWVtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDA7IGZvbnQtc2l6ZTogMTEwJTsgfQotcC5sb2cgICAgICAgICAgICAgICAgICAgICAgIHsgZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbjogLjVlbSAwIC41ZW0gMDsgfQotdHIub3B0LWNoYW5nZWQgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDAwMDA7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Ci10ci5vcHQtZGVmYXVsdCAgICAgICAgICAgICAgeyBjb2xvcjogIzYwNjA2MDsgfQotcHJlLmxvZyAgICAgICAgICAgICAgICAgICAgIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBwYWRkaW5nLWxlZnQ6IDFlbTsgfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvZXB5ZG9jLmpzIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvZXB5ZG9jLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzg3ZGJjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvYXBpZG9jL2VweWRvYy5qcworKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi1mdW5jdGlvbiB0b2dnbGVfcHJpdmF0ZSgpIHsKLSAgICAgICAgLy8gU2VhcmNoIGZvciBhbnkgcHJpdmF0ZS9wdWJsaWMgbGlua3Mgb24gdGhpcyBwYWdlLiAgU3RvcmUKLSAgICAgICAgLy8gdGhlaXIgb2xkIHRleHQgaW4gImNtZCwiIHNvIHdlIHdpbGwga25vdyB3aGF0IGFjdGlvbiB0bwotICAgICAgICAvLyB0YWtlOyBhbmQgY2hhbmdlIHRoZWlyIHRleHQgdG8gdGhlIG9wcG9zaXRlIGFjdGlvbi4KLSAgICAgICAgdmFyIGNtZCA9ICI/IjsKLSAgICAgICAgdmFyIGVsdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpOwotICAgICAgICBmb3IodmFyIGk9MDsgaTxlbHRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgaWYgKGVsdHNbaV0uY2xhc3NOYW1lID09ICJwcml2YXRlbGluayIpIHsKLSAgICAgICAgICAgIGNtZCA9IGVsdHNbaV0uaW5uZXJIVE1MOwotICAgICAgICAgICAgZWx0c1tpXS5pbm5lckhUTUwgPSAoKGNtZCAmJiBjbWQuc3Vic3RyKDAsNCk9PSJzaG93Iik/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGlkZSZuYnNwO3ByaXZhdGUiOiJzaG93Jm5ic3A7cHJpdmF0ZSIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBVcGRhdGUgYWxsIERJVnMgY29udGFpbmluZyBwcml2YXRlIG9iamVjdHMuCi0gICAgICAgIHZhciBlbHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpOwotICAgICAgICBmb3IodmFyIGk9MDsgaTxlbHRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgaWYgKGVsdHNbaV0uY2xhc3NOYW1lID09ICJwcml2YXRlIikgewotICAgICAgICAgICAgZWx0c1tpXS5zdHlsZS5kaXNwbGF5ID0gKChjbWQgJiYgY21kLnN1YnN0cigwLDQpPT0iaGlkZSIpPyJub25lIjoiYmxvY2siKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoZWx0c1tpXS5jbGFzc05hbWUgPT0gInB1YmxpYyIpIHsKLSAgICAgICAgICAgIGVsdHNbaV0uc3R5bGUuZGlzcGxheSA9ICgoY21kICYmIGNtZC5zdWJzdHIoMCw0KT09ImhpZGUiKT8iYmxvY2siOiJub25lIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFVwZGF0ZSBhbGwgdGFibGUgcm93cyBjb250YWluaW5nIHByaXZhdGUgb2JqZWN0cy4gIE5vdGUsIHdlCi0gICAgICAgIC8vIHVzZSAiIiBpbnN0ZWFkIG9mICJibG9jayIgYmVjYXVlIElFICYgZmlyZWZveCBkaXNhZ3JlZSBvbiB3aGF0Ci0gICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIChibG9jayB2cyB0YWJsZS1yb3cpLCBhbmQgIiIganVzdCBnaXZlcyB0aGUKLSAgICAgICAgLy8gZGVmYXVsdCBmb3IgYm90aCBicm93c2Vycy4KLSAgICAgICAgdmFyIGVsdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHIiKTsKLSAgICAgICAgZm9yKHZhciBpPTA7IGk8ZWx0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIGlmIChlbHRzW2ldLmNsYXNzTmFtZSA9PSAicHJpdmF0ZSIpIHsKLSAgICAgICAgICAgIGVsdHNbaV0uc3R5bGUuZGlzcGxheSA9ICgoY21kICYmIGNtZC5zdWJzdHIoMCw0KT09ImhpZGUiKT8ibm9uZSI6IiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBVcGRhdGUgYWxsIGxpc3QgaXRlbXMgY29udGFpbmluZyBwcml2YXRlIG9iamVjdHMuCi0gICAgICAgIHZhciBlbHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpIik7Ci0gICAgICAgIGZvcih2YXIgaT0wOyBpPGVsdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBpZiAoZWx0c1tpXS5jbGFzc05hbWUgPT0gInByaXZhdGUiKSB7Ci0gICAgICAgICAgICBlbHRzW2ldLnN0eWxlLmRpc3BsYXkgPSAoKGNtZCAmJiBjbWQuc3Vic3RyKDAsNCk9PSJoaWRlIik/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbmUiOiIiKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVXBkYXRlIGFsbCBsaXN0IGl0ZW1zIGNvbnRhaW5pbmcgcHJpdmF0ZSBvYmplY3RzLgotICAgICAgICB2YXIgZWx0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ1bCIpOwotICAgICAgICBmb3IodmFyIGk9MDsgaTxlbHRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgaWYgKGVsdHNbaV0uY2xhc3NOYW1lID09ICJwcml2YXRlIikgewotICAgICAgICAgICAgZWx0c1tpXS5zdHlsZS5kaXNwbGF5ID0gKChjbWQgJiYgY21kLnN1YnN0cigwLDQpPT0iaGlkZSIpPyJub25lIjoiYmxvY2siKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2V0IGEgY29va2llIHRvIHJlbWVtYmVyIHRoZSBjdXJyZW50IG9wdGlvbi4KLSAgICAgICAgZG9jdW1lbnQuY29va2llID0gIkVweWRvY1ByaXZhdGU9IitjbWQ7Ci0gICAgICB9Ci1mdW5jdGlvbiBzaG93X3ByaXZhdGUoKSB7Ci0gICAgICAgIHZhciBlbHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKTsKLSAgICAgICAgZm9yKHZhciBpPTA7IGk8ZWx0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIGlmIChlbHRzW2ldLmNsYXNzTmFtZSA9PSAicHJpdmF0ZWxpbmsiKSB7Ci0gICAgICAgICAgICBjbWQgPSBlbHRzW2ldLmlubmVySFRNTDsKLSAgICAgICAgICAgIGlmIChjbWQgJiYgY21kLnN1YnN0cigwLDQpPT0ic2hvdyIpCi0gICAgICAgICAgICAgICAgdG9nZ2xlX3ByaXZhdGUoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLWZ1bmN0aW9uIGdldENvb2tpZShuYW1lKSB7Ci0gICAgICAgIHZhciBkYyA9IGRvY3VtZW50LmNvb2tpZTsKLSAgICAgICAgdmFyIHByZWZpeCA9IG5hbWUgKyAiPSI7Ci0gICAgICAgIHZhciBiZWdpbiA9IGRjLmluZGV4T2YoIjsgIiArIHByZWZpeCk7Ci0gICAgICAgIGlmIChiZWdpbiA9PSAtMSkgewotICAgICAgICAgIGJlZ2luID0gZGMuaW5kZXhPZihwcmVmaXgpOwotICAgICAgICAgIGlmIChiZWdpbiAhPSAwKSByZXR1cm4gbnVsbDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgIHsgYmVnaW4gKz0gMjsgfQotICAgICAgICB2YXIgZW5kID0gZG9jdW1lbnQuY29va2llLmluZGV4T2YoIjsiLCBiZWdpbik7Ci0gICAgICAgIGlmIChlbmQgPT0gLTEpCi0gICAgICAgIHsgZW5kID0gZGMubGVuZ3RoOyB9Ci0gICAgICAgIHJldHVybiB1bmVzY2FwZShkYy5zdWJzdHJpbmcoYmVnaW4gKyBwcmVmaXgubGVuZ3RoLCBlbmQpKTsKLSAgICAgIH0KLWZ1bmN0aW9uIHNldEZyYW1lKHVybDEsIHVybDIpIHsKLSAgICAgICAgICBwYXJlbnQuZnJhbWVzWzFdLmxvY2F0aW9uLmhyZWYgPSB1cmwxOwotICAgICAgICAgIHBhcmVudC5mcmFtZXNbMl0ubG9jYXRpb24uaHJlZiA9IHVybDI7Ci0gICAgICB9Ci1mdW5jdGlvbiBjaGVja0Nvb2tpZSgpIHsKLSAgICAgICAgdmFyIGNtZD1nZXRDb29raWUoIkVweWRvY1ByaXZhdGUiKTsKLSAgICAgICAgaWYgKGNtZCAmJiBjbWQuc3Vic3RyKDAsNCkhPSJzaG93IiAmJiBsb2NhdGlvbi5ocmVmLmluZGV4T2YoIiNfIikgPCAwKQotICAgICAgICAgICAgdG9nZ2xlX3ByaXZhdGUoKTsKLSAgICAgIH0KLWZ1bmN0aW9uIHRvZ2dsZUNhbGxHcmFwaChpZCkgewotICAgICAgICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwotICAgICAgICBpZiAoZWx0LnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKQotICAgICAgICAgICAgZWx0LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbHQuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLSAgICAgIH0KLWZ1bmN0aW9uIGV4cGFuZChpZCkgewotICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQrIi1leHBhbmRlZCIpOwotICBpZiAoZWx0KSBlbHQuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7Ci0gIHZhciBlbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCsiLWV4cGFuZGVkLWxpbmVudW1zIik7Ci0gIGlmIChlbHQpIGVsdC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKyItY29sbGFwc2VkIik7Ci0gIGlmIChlbHQpIHsgZWx0LmlubmVySFRNTCA9ICIiOyBlbHQuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgfQotICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQrIi1jb2xsYXBzZWQtbGluZW51bXMiKTsKLSAgaWYgKGVsdCkgeyBlbHQuaW5uZXJIVE1MID0gIiI7IGVsdC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOyB9Ci0gIHZhciBlbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCsiLXRvZ2dsZSIpOwotICBpZiAoZWx0KSB7IGVsdC5pbm5lckhUTUwgPSAiLSI7IH0KLX0KLQotZnVuY3Rpb24gY29sbGFwc2UoaWQpIHsKLSAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKyItZXhwYW5kZWQiKTsKLSAgaWYgKGVsdCkgZWx0LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gIHZhciBlbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCsiLWV4cGFuZGVkLWxpbmVudW1zIik7Ci0gIGlmIChlbHQpIGVsdC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQrIi1jb2xsYXBzZWQtbGluZW51bXMiKTsKLSAgaWYgKGVsdCkgeyBlbHQuaW5uZXJIVE1MID0gIjxiciAvPiI7IGVsdC5zdHlsZS5kaXNwbGF5PSJibG9jayI7IH0KLSAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKyItdG9nZ2xlIik7Ci0gIGlmIChlbHQpIHsgZWx0LmlubmVySFRNTCA9ICIrIjsgfQotICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQrIi1jb2xsYXBzZWQiKTsKLSAgaWYgKGVsdCkgewotICAgIGVsdC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICAKLSAgICB2YXIgaW5kZW50ID0gZWx0LmdldEF0dHJpYnV0ZSgiaW5kZW50Iik7Ci0gICAgdmFyIHBhZCA9IGVsdC5nZXRBdHRyaWJ1dGUoInBhZCIpOwotICAgIHZhciBzID0gIjx0dCBjbGFzcz0ncHktbGluZW5vJz4iOwotICAgIGZvciAodmFyIGk9MDsgaTxwYWQubGVuZ3RoOyBpKyspIHsgcyArPSAiJm5ic3A7IiB9Ci0gICAgcyArPSAiPC90dD4iOwotICAgIHMgKz0gIiZuYnNwOyZuYnNwOzx0dCBjbGFzcz0ncHktbGluZSc+IjsKLSAgICBmb3IgKHZhciBpPTA7IGk8aW5kZW50Lmxlbmd0aDsgaSsrKSB7IHMgKz0gIiZuYnNwOyIgfQotICAgIHMgKz0gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2V4cGFuZChcIiIgKyBpZDsKLSAgICBzICs9ICJcIik7cmV0dXJuIGZhbHNlJz4uLi48L2E+PC90dD48YnIgLz4iOwotICAgIGVsdC5pbm5lckhUTUwgPSBzOwotICB9Ci19Ci0KLWZ1bmN0aW9uIHRvZ2dsZShpZCkgewotICBlbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCsiLXRvZ2dsZSIpOwotICBpZiAoZWx0LmlubmVySFRNTCA9PSAiLSIpCi0gICAgICBjb2xsYXBzZShpZCk7IAotICBlbHNlCi0gICAgICBleHBhbmQoaWQpOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWZ1bmN0aW9uIGhpZ2hsaWdodChpZCkgewotICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQrIi1kZWYiKTsKLSAgaWYgKGVsdCkgZWx0LmNsYXNzTmFtZSA9ICJweS1oaWdobGlnaHQtaGRyIjsKLSAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKyItZXhwYW5kZWQiKTsKLSAgaWYgKGVsdCkgZWx0LmNsYXNzTmFtZSA9ICJweS1oaWdobGlnaHQiOwotICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQrIi1jb2xsYXBzZWQiKTsKLSAgaWYgKGVsdCkgZWx0LmNsYXNzTmFtZSA9ICJweS1oaWdobGlnaHQiOwotfQotCi1mdW5jdGlvbiBudW1fbGluZXMocykgewotICB2YXIgbiA9IDE7Ci0gIHZhciBwb3MgPSBzLmluZGV4T2YoIlxuIik7Ci0gIHdoaWxlICggcG9zID4gMCkgewotICAgIG4gKz0gMTsKLSAgICBwb3MgPSBzLmluZGV4T2YoIlxuIiwgcG9zKzEpOwotICB9Ci0gIHJldHVybiBuOwotfQotCi0vLyBDb2xsYXBzZSBhbGwgYmxvY2tzIHRoYXQgbWF2ZSBtb3JlIHRoYW4gYG1pbl9saW5lc2AgbGluZXMuCi1mdW5jdGlvbiBjb2xsYXBzZV9hbGwobWluX2xpbmVzKSB7Ci0gIHZhciBlbHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpOwotICBmb3IgKHZhciBpPTA7IGk8ZWx0cy5sZW5ndGg7IGkrKykgewotICAgIHZhciBlbHQgPSBlbHRzW2ldOwotICAgIHZhciBzcGxpdCA9IGVsdC5pZC5pbmRleE9mKCItIik7Ci0gICAgaWYgKHNwbGl0ID4gMCkKLSAgICAgIGlmIChlbHQuaWQuc3Vic3RyaW5nKHNwbGl0LCBlbHQuaWQubGVuZ3RoKSA9PSAiLWV4cGFuZGVkIikKLSAgICAgICAgaWYgKG51bV9saW5lcyhlbHQuaW5uZXJIVE1MKSA+IG1pbl9saW5lcykKLSAgICAgICAgICBjb2xsYXBzZShlbHQuaWQuc3Vic3RyaW5nKDAsIHNwbGl0KSk7Ci0gIH0KLX0KLQotZnVuY3Rpb24gZXhwYW5kdG8oaHJlZikgewotICB2YXIgc3RhcnQgPSBocmVmLmluZGV4T2YoIiMiKSsxOwotICBpZiAoc3RhcnQgIT0gMCAmJiBzdGFydCAhPSBocmVmLmxlbmd0aCkgewotICAgIGlmIChocmVmLnN1YnN0cmluZyhzdGFydCwgaHJlZi5sZW5ndGgpICE9ICItIikgewotICAgICAgY29sbGFwc2VfYWxsKDQpOwotICAgICAgcG9zID0gaHJlZi5pbmRleE9mKCIuIiwgc3RhcnQpOwotICAgICAgd2hpbGUgKHBvcyAhPSAtMSkgewotICAgICAgICB2YXIgaWQgPSBocmVmLnN1YnN0cmluZyhzdGFydCwgcG9zKTsKLSAgICAgICAgZXhwYW5kKGlkKTsKLSAgICAgICAgcG9zID0gaHJlZi5pbmRleE9mKCIuIiwgcG9zKzEpOwotICAgICAgfQotICAgICAgdmFyIGlkID0gaHJlZi5zdWJzdHJpbmcoc3RhcnQsIGhyZWYubGVuZ3RoKTsKLSAgICAgIGV4cGFuZChpZCk7Ci0gICAgICBoaWdobGlnaHQoaWQpOwotICAgIH0KLSAgfQotfQotCi1mdW5jdGlvbiBraWxsX2RvY2xpbmsoaWQpIHsKLSAgdmFyIHBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKLSAgcGFyZW50LnJlbW92ZUNoaWxkKHBhcmVudC5jaGlsZE5vZGVzLml0ZW0oMCkpOwotfQotZnVuY3Rpb24gYXV0b19raWxsX2RvY2xpbmsoZXYpIHsKLSAgaWYgKCFldikgdmFyIGV2ID0gd2luZG93LmV2ZW50OwotICBpZiAoIXRoaXMuY29udGFpbnMoZXYudG9FbGVtZW50KSkgewotICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnBhcmVudElEKTsKLSAgICBwYXJlbnQucmVtb3ZlQ2hpbGQocGFyZW50LmNoaWxkTm9kZXMuaXRlbSgwKSk7Ci0gIH0KLX0KLQotZnVuY3Rpb24gZG9jbGluayhpZCwgbmFtZSwgdGFyZ2V0c19pZCkgewotICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwotCi0gIC8vIElmIHdlIGFscmVhZHkgb3BlbmVkIHRoZSBib3gsIHRoZW4gZGVzdHJveSBpdC4KLSAgLy8gKFRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgb2NjdXIsIGJ1dCBsZWF2ZSBpdCBpbiBqdXN0IGluIGNhc2UuKQotICBpZiAoZWx0LmNoaWxkTm9kZXMubGVuZ3RoID4gMSkgewotICAgIGVsdC5yZW1vdmVDaGlsZChlbHQuY2hpbGROb2Rlcy5pdGVtKDApKTsKLSAgfQotICBlbHNlIHsKLSAgICAvLyBUaGUgb3V0ZXIgYm94OiByZWxhdGl2ZSArIGlubGluZSBwb3NpdGlvbmluZy4KLSAgICB2YXIgYm94MSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIGJveDEuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwotICAgIGJveDEuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUiOwotICAgIGJveDEuc3R5bGUudG9wID0gMDsKLSAgICBib3gxLnN0eWxlLmxlZnQgPSAwOwotICAKLSAgICAvLyBBIHNoYWRvdyBmb3IgZnVuCi0gICAgdmFyIHNoYWRvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHNoYWRvdy5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7Ci0gICAgc2hhZG93LnN0eWxlLmxlZnQgPSAiLTEuM2VtIjsKLSAgICBzaGFkb3cuc3R5bGUudG9wID0gIi0xLjNlbSI7Ci0gICAgc2hhZG93LnN0eWxlLmJhY2tncm91bmQgPSAiIzQwNDA0MCI7Ci0gICAgCi0gICAgLy8gVGhlIGlubmVyIGJveDogYWJzb2x1dGUgcG9zaXRpb25pbmcuCi0gICAgdmFyIGJveDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBib3gyLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKLSAgICBib3gyLnN0eWxlLmJvcmRlciA9ICIxcHggc29saWQgI2EwYTBhMCI7Ci0gICAgYm94Mi5zdHlsZS5sZWZ0ID0gIi0uMmVtIjsKLSAgICBib3gyLnN0eWxlLnRvcCA9ICItLjJlbSI7Ci0gICAgYm94Mi5zdHlsZS5iYWNrZ3JvdW5kID0gIndoaXRlIjsKLSAgICBib3gyLnN0eWxlLnBhZGRpbmcgPSAiLjNlbSAuNGVtIC4zZW0gLjRlbSI7Ci0gICAgYm94Mi5zdHlsZS5mb250U3R5bGUgPSAibm9ybWFsIjsKLSAgICBib3gyLm9ubW91c2VvdXQ9YXV0b19raWxsX2RvY2xpbms7Ci0gICAgYm94Mi5wYXJlbnRJRCA9IGlkOwotCi0gICAgLy8gR2V0IHRoZSB0YXJnZXRzCi0gICAgdmFyIHRhcmdldHNfZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0c19pZCk7Ci0gICAgdmFyIHRhcmdldHMgPSB0YXJnZXRzX2VsdC5nZXRBdHRyaWJ1dGUoInRhcmdldHMiKTsKLSAgICB2YXIgbGlua3MgPSAiIjsKLSAgICB0YXJnZXRfbGlzdCA9IHRhcmdldHMuc3BsaXQoIiwiKTsKLSAgICBmb3IgKHZhciBpPTA7IGk8dGFyZ2V0X2xpc3QubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldF9saXN0W2ldLnNwbGl0KCI9Iik7Ci0gICAgICAgIGxpbmtzICs9ICI8bGk+PGEgaHJlZj0nIiArIHRhcmdldFsxXSArIAotICAgICAgICAgICAgICAgIicgc3R5bGU9J3RleHQtZGVjb3JhdGlvbjpub25lJz4iICsKLSAgICAgICAgICAgICAgIHRhcmdldFswXSArICI8L2E+PC9saT4iOwotICAgIH0KLSAgCi0gICAgLy8gUHV0IGl0IGFsbCB0b2dldGhlci4KLSAgICBlbHQuaW5zZXJ0QmVmb3JlKGJveDEsIGVsdC5jaGlsZE5vZGVzLml0ZW0oMCkpOwotICAgIC8vYm94MS5hcHBlbmRDaGlsZChib3gyKTsKLSAgICBib3gxLmFwcGVuZENoaWxkKHNoYWRvdyk7Ci0gICAgc2hhZG93LmFwcGVuZENoaWxkKGJveDIpOwotICAgIGJveDIuaW5uZXJIVE1MID0KLSAgICAgICAgIldoaWNoIDxiPiIrbmFtZSsiPC9iPiBkbyB5b3Ugd2FudCB0byBzZWUgZG9jdW1lbnRhdGlvbiBmb3I/IiArCi0gICAgICAgICI8dWwgc3R5bGU9J21hcmdpbi1ib3R0b206IDA7Jz4iICsKLSAgICAgICAgbGlua3MgKyAKLSAgICAgICAgIjxsaT48YSBocmVmPScjJyBzdHlsZT0ndGV4dC1kZWNvcmF0aW9uOm5vbmUnICIgKwotICAgICAgICAib25jbGljaz0na2lsbF9kb2NsaW5rKFwiIitpZCsiXCIpO3JldHVybiBmYWxzZTsnPiIrCi0gICAgICAgICI8aT5Ob25lIG9mIHRoZSBhYm92ZTwvaT48L2E+PC9saT48L3VsPiI7Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi1mdW5jdGlvbiBnZXRfYW5jaG9yKCkgewotICAgICAgICAgIHZhciBocmVmID0gbG9jYXRpb24uaHJlZjsKLSAgICAgICAgICB2YXIgc3RhcnQgPSBocmVmLmluZGV4T2YoIiMiKSsxOwotICAgICAgICAgIGlmICgoc3RhcnQgIT0gMCkgJiYgKHN0YXJ0ICE9IGhyZWYubGVuZ3RoKSkKLSAgICAgICAgICAgICAgcmV0dXJuIGhyZWYuc3Vic3RyaW5nKHN0YXJ0LCBocmVmLmxlbmd0aCk7Ci0gICAgICB9Ci1mdW5jdGlvbiByZWRpcmVjdF91cmwoZG90dGVkTmFtZSkgewotICAgICAgICAgIC8vIFNjYW4gdGhyb3VnaCBlYWNoIGVsZW1lbnQgb2YgdGhlICJwYWdlcyIgbGlzdCwgYW5kIGNoZWNrCi0gICAgICAgICAgLy8gaWYgIm5hbWUiIG1hdGNoZXMgd2l0aCBhbnkgb2YgdGhlbS4KLSAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8cGFnZXMubGVuZ3RoOyBpKyspIHsKLQotICAgICAgICAgICAgICAvLyBFYWNoIHBhZ2UgaGFzIHRoZSBmb3JtICI8cGFnZW5hbWU+LW0iIG9yICI8cGFnZW5hbWU+LWMiOwotICAgICAgICAgICAgICAvLyBleHRyYWN0IHRoZSA8cGFnZW5hbWU+IHBvcnRpb24gJiBjb21wYXJlIGl0IHRvIGRvdHRlZE5hbWUuCi0gICAgICAgICAgICAgIHZhciBwYWdlbmFtZSA9IHBhZ2VzW2ldLnN1YnN0cmluZygwLCBwYWdlc1tpXS5sZW5ndGgtMik7Ci0gICAgICAgICAgICAgIGlmIChwYWdlbmFtZSA9PSBkb3R0ZWROYW1lLnN1YnN0cmluZygwLHBhZ2VuYW1lLmxlbmd0aCkpIHsKLQotICAgICAgICAgICAgICAgICAgLy8gV2UndmUgZm91bmQgYSBwYWdlIHRoYXQgbWF0Y2hlcyBgZG90dGVkTmFtZWA7Ci0gICAgICAgICAgICAgICAgICAvLyBjb25zdHJ1Y3QgaXRzIFVSTCwgdXNpbmcgbGVmdG92ZXIgYGRvdHRlZE5hbWVgCi0gICAgICAgICAgICAgICAgICAvLyBjb250ZW50IHRvIGZvcm0gYW4gYW5jaG9yLgotICAgICAgICAgICAgICAgICAgdmFyIHBhZ2V0eXBlID0gcGFnZXNbaV0uY2hhckF0KHBhZ2VzW2ldLmxlbmd0aC0xKTsKLSAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBwYWdlbmFtZSArICgocGFnZXR5cGU9PSJtIik/Ii1tb2R1bGUuaHRtbCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItY2xhc3MuaHRtbCIpOwotICAgICAgICAgICAgICAgICAgaWYgKGRvdHRlZE5hbWUubGVuZ3RoID4gcGFnZW5hbWUubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICAgIHVybCArPSAiIyIgKyBkb3R0ZWROYW1lLnN1YnN0cmluZyhwYWdlbmFtZS5sZW5ndGgrMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90dGVkTmFtZS5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgIH0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvYXBpZG9jL2hlbHAuaHRtbCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvYXBpZG9jL2hlbHAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI5YmI4OS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL2FwaWRvYy9oZWxwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iYXNjaWkiPz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgICAgICAgIkRURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLSAgPHRpdGxlPkhlbHA8L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImVweWRvYy5jc3MiIHR5cGU9InRleHQvY3NzIiAvPgotICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJlcHlkb2MuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9ImJsdWUiIHZsaW5rPSIjMjA0MDgwIgotICAgICAgYWxpbms9IiMyMDQwODAiPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PSBOQVZJR0FUSU9OIEJBUiA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YWJsZSBjbGFzcz0ibmF2YmFyIiBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIKLSAgICAgICBiZ2NvbG9yPSIjYTBjMGZmIiBjZWxsc3BhY2luZz0iMCI+Ci0gIDx0ciB2YWxpZ249Im1pZGRsZSI+Ci0gIDwhLS0gSG9tZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9InJqc21pbi1tb2R1bGUuaHRtbCI+SG9tZTwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gVHJlZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9Im1vZHVsZS10cmVlLmh0bWwiPlRyZWVzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBJbmRleCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImlkZW50aWZpZXItaW5kZXguaHRtbCI+SW5kaWNlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSGVscCBsaW5rIC0tPgotICAgICAgPHRoIGJnY29sb3I9IiM3MGIwZjAiIGNsYXNzPSJuYXZiYXItc2VsZWN0IgotICAgICAgICAgID4mbmJzcDsmbmJzcDsmbmJzcDtIZWxwJm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFByb2plY3QgaG9tZXBhZ2UgLS0+Ci0gICAgICA8dGggY2xhc3M9Im5hdmJhciIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMTAwJSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgICAgPHRyPjx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgPjxhIGhyZWY9Imh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yanNtaW4vIiB0YXJnZXQ9Il90b3AiPlZpc2l0IHJqc21pbiBPbmxpbmU8L2E+PC90aD4KLSAgICAgICAgICA8L3RyPjwvdGFibGU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gIDx0ciB2YWxpZ249InRvcCI+Ci0gICAgPHRkIHdpZHRoPSIxMDAlIj4mbmJzcDs8L3RkPgotICAgIDx0ZD4KLSAgICAgIDx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgICAgICA8IS0tIGhpZGUvc2hvdyBwcml2YXRlIC0tPgotICAgICAgPC90YWJsZT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLQotPGgxIGNsYXNzPSJlcHlkb2MiPiBBUEkgRG9jdW1lbnRhdGlvbiA8L2gxPgotCi08cD4gVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgQVBJIChBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UpCi1kb2N1bWVudGF0aW9uIGZvciB0aGlzIHByb2plY3QuICBEb2N1bWVudGF0aW9uIGZvciB0aGUgUHl0aG9uCi1vYmplY3RzIGRlZmluZWQgYnkgdGhlIHByb2plY3QgaXMgZGl2aWRlZCBpbnRvIHNlcGFyYXRlIHBhZ2VzIGZvciBlYWNoCi1wYWNrYWdlLCBtb2R1bGUsIGFuZCBjbGFzcy4gIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBhbHNvIGluY2x1ZGVzIHR3bwotcGFnZXMgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvamVjdCBhcyBhIHdob2xlOiBhIHRyZWVzCi1wYWdlLCBhbmQgYW4gaW5kZXggcGFnZS4gIDwvcD4KLQotPGgyPiBPYmplY3QgRG9jdW1lbnRhdGlvbiA8L2gyPgotCi0gIDxwPkVhY2ggPHN0cm9uZz5QYWNrYWdlIERvY3VtZW50YXRpb248L3N0cm9uZz4gcGFnZSBjb250YWluczogPC9wPgotICA8dWw+Ci0gICAgPGxpPiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBwYWNrYWdlLiA8L2xpPgotICAgIDxsaT4gQSBsaXN0IG9mIHRoZSBtb2R1bGVzIGFuZCBzdWItcGFja2FnZXMgY29udGFpbmVkIGJ5IHRoZQotICAgIHBhY2thZ2UuICA8L2xpPgotICAgIDxsaT4gQSBzdW1tYXJ5IG9mIHRoZSBjbGFzc2VzIGRlZmluZWQgYnkgdGhlIHBhY2thZ2UuIDwvbGk+Ci0gICAgPGxpPiBBIHN1bW1hcnkgb2YgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGJ5IHRoZSBwYWNrYWdlLiA8L2xpPgotICAgIDxsaT4gQSBzdW1tYXJ5IG9mIHRoZSB2YXJpYWJsZXMgZGVmaW5lZCBieSB0aGUgcGFja2FnZS4gPC9saT4KLSAgICA8bGk+IEEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgZWFjaCBmdW5jdGlvbiBkZWZpbmVkIGJ5IHRoZQotICAgIHBhY2thZ2UuIDwvbGk+Ci0gICAgPGxpPiBBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGVhY2ggdmFyaWFibGUgZGVmaW5lZCBieSB0aGUKLSAgICBwYWNrYWdlLiA8L2xpPgotICA8L3VsPgotICAKLSAgPHA+RWFjaCA8c3Ryb25nPk1vZHVsZSBEb2N1bWVudGF0aW9uPC9zdHJvbmc+IHBhZ2UgY29udGFpbnM6PC9wPgotICA8dWw+Ci0gICAgPGxpPiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBtb2R1bGUuIDwvbGk+Ci0gICAgPGxpPiBBIHN1bW1hcnkgb2YgdGhlIGNsYXNzZXMgZGVmaW5lZCBieSB0aGUgbW9kdWxlLiA8L2xpPgotICAgIDxsaT4gQSBzdW1tYXJ5IG9mIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBieSB0aGUgbW9kdWxlLiA8L2xpPgotICAgIDxsaT4gQSBzdW1tYXJ5IG9mIHRoZSB2YXJpYWJsZXMgZGVmaW5lZCBieSB0aGUgbW9kdWxlLiA8L2xpPgotICAgIDxsaT4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBlYWNoIGZ1bmN0aW9uIGRlZmluZWQgYnkgdGhlCi0gICAgbW9kdWxlLiA8L2xpPgotICAgIDxsaT4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBlYWNoIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlCi0gICAgbW9kdWxlLiA8L2xpPgotICA8L3VsPgotICAKLSAgPHA+RWFjaCA8c3Ryb25nPkNsYXNzIERvY3VtZW50YXRpb248L3N0cm9uZz4gcGFnZSBjb250YWluczogPC9wPgotICA8dWw+Ci0gICAgPGxpPiBBIGNsYXNzIGluaGVyaXRhbmNlIGRpYWdyYW0uIDwvbGk+Ci0gICAgPGxpPiBBIGxpc3Qgb2Yga25vd24gc3ViY2xhc3Nlcy4gPC9saT4KLSAgICA8bGk+IEEgZGVzY3JpcHRpb24gb2YgdGhlIGNsYXNzLiA8L2xpPgotICAgIDxsaT4gQSBzdW1tYXJ5IG9mIHRoZSBtZXRob2RzIGRlZmluZWQgYnkgdGhlIGNsYXNzLiA8L2xpPgotICAgIDxsaT4gQSBzdW1tYXJ5IG9mIHRoZSBpbnN0YW5jZSB2YXJpYWJsZXMgZGVmaW5lZCBieSB0aGUgY2xhc3MuIDwvbGk+Ci0gICAgPGxpPiBBIHN1bW1hcnkgb2YgdGhlIGNsYXNzIChzdGF0aWMpIHZhcmlhYmxlcyBkZWZpbmVkIGJ5IHRoZQotICAgIGNsYXNzLiA8L2xpPiAKLSAgICA8bGk+IEEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgZWFjaCBtZXRob2QgZGVmaW5lZCBieSB0aGUKLSAgICBjbGFzcy4gPC9saT4KLSAgICA8bGk+IEEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgZWFjaCBpbnN0YW5jZSB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZQotICAgIGNsYXNzLiA8L2xpPiAKLSAgICA8bGk+IEEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgZWFjaCBjbGFzcyAoc3RhdGljKSB2YXJpYWJsZSBkZWZpbmVkCi0gICAgYnkgdGhlIGNsYXNzLiA8L2xpPiAKLSAgPC91bD4KLQotPGgyPiBQcm9qZWN0IERvY3VtZW50YXRpb24gPC9oMj4KLQotICA8cD4gVGhlIDxzdHJvbmc+VHJlZXM8L3N0cm9uZz4gcGFnZSBjb250YWlucyB0aGUgbW9kdWxlIGFuZCBjbGFzcyBoaWVyYXJjaGllczogPC9wPgotICA8dWw+Ci0gICAgPGxpPiBUaGUgPGVtPm1vZHVsZSBoaWVyYXJjaHk8L2VtPiBsaXN0cyBldmVyeSBwYWNrYWdlIGFuZCBtb2R1bGUsIHdpdGgKLSAgICBtb2R1bGVzIGdyb3VwZWQgaW50byBwYWNrYWdlcy4gIEF0IHRoZSB0b3AgbGV2ZWwsIGFuZCB3aXRoaW4gZWFjaAotICAgIHBhY2thZ2UsIG1vZHVsZXMgYW5kIHN1Yi1wYWNrYWdlcyBhcmUgbGlzdGVkIGFscGhhYmV0aWNhbGx5LiA8L2xpPgotICAgIDxsaT4gVGhlIDxlbT5jbGFzcyBoaWVyYXJjaHk8L2VtPiBsaXN0cyBldmVyeSBjbGFzcywgZ3JvdXBlZCBieSBiYXNlCi0gICAgY2xhc3MuICBJZiBhIGNsYXNzIGhhcyBtb3JlIHRoYW4gb25lIGJhc2UgY2xhc3MsIHRoZW4gaXQgd2lsbCBiZQotICAgIGxpc3RlZCB1bmRlciBlYWNoIGJhc2UgY2xhc3MuICBBdCB0aGUgdG9wIGxldmVsLCBhbmQgdW5kZXIgZWFjaCBiYXNlCi0gICAgY2xhc3MsIGNsYXNzZXMgYXJlIGxpc3RlZCBhbHBoYWJldGljYWxseS4gPC9saT4KLSAgPC91bD4KLSAgCi0gIDxwPiBUaGUgPHN0cm9uZz5JbmRleDwvc3Ryb25nPiBwYWdlIGNvbnRhaW5zIGluZGljZXMgb2YgdGVybXMgYW5kCi0gIGlkZW50aWZpZXJzOiA8L3A+Ci0gIDx1bD4KLSAgICA8bGk+IFRoZSA8ZW0+dGVybSBpbmRleDwvZW0+IGxpc3RzIGV2ZXJ5IHRlcm0gaW5kZXhlZCBieSBhbnkgb2JqZWN0J3MKLSAgICBkb2N1bWVudGF0aW9uLiAgRm9yIGVhY2ggdGVybSwgdGhlIGluZGV4IHByb3ZpZGVzIGxpbmtzIHRvIGVhY2gKLSAgICBwbGFjZSB3aGVyZSB0aGUgdGVybSBpcyBpbmRleGVkLiA8L2xpPgotICAgIDxsaT4gVGhlIDxlbT5pZGVudGlmaWVyIGluZGV4PC9lbT4gbGlzdHMgdGhlIChzaG9ydCkgbmFtZSBvZiBldmVyeSBwYWNrYWdlLAotICAgIG1vZHVsZSwgY2xhc3MsIG1ldGhvZCwgZnVuY3Rpb24sIHZhcmlhYmxlLCBhbmQgcGFyYW1ldGVyLiAgRm9yIGVhY2gKLSAgICBpZGVudGlmaWVyLCB0aGUgaW5kZXggcHJvdmlkZXMgYSBzaG9ydCBkZXNjcmlwdGlvbiwgYW5kIGEgbGluayB0bwotICAgIGl0cyBkb2N1bWVudGF0aW9uLiA8L2xpPgotICA8L3VsPgotCi08aDI+IFRoZSBUYWJsZSBvZiBDb250ZW50cyA8L2gyPgotCi08cD4gVGhlIHRhYmxlIG9mIGNvbnRlbnRzIG9jY3VwaWVzIHRoZSB0d28gZnJhbWVzIG9uIHRoZSBsZWZ0IHNpZGUgb2YKLXRoZSB3aW5kb3cuICBUaGUgdXBwZXItbGVmdCBmcmFtZSBkaXNwbGF5cyB0aGUgPGVtPnByb2plY3QKLWNvbnRlbnRzPC9lbT4sIGFuZCB0aGUgbG93ZXItbGVmdCBmcmFtZSBkaXNwbGF5cyB0aGUgPGVtPm1vZHVsZQotY29udGVudHM8L2VtPjogPC9wPgotCi08dGFibGUgY2xhc3M9ImhlbHAgc3VtbWFyeSIgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiPgotICA8dHIgc3R5bGU9ImhlaWdodDogMzAlIj4KLSAgICA8dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImZvbnQtc2l6ZTogc21hbGwiPgotICAgICAgIFByb2plY3Q8YnIgLz5Db250ZW50czxociAvPi4uLjwvdGQ+Ci0gICAgPHRkIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJmb250LXNpemU6IHNtYWxsIiByb3dzcGFuPSIyIiB3aWR0aD0iNzAlIj4KLSAgICAgIEFQSTxiciAvPkRvY3VtZW50YXRpb248YnIgLz5GcmFtZTxiciAvPjxiciAvPjxiciAvPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImZvbnQtc2l6ZTogc21hbGwiPgotICAgICAgTW9kdWxlPGJyIC8+Q29udGVudHM8aHIgLz4mbmJzcDs8YnIgLz4uLi48YnIgLz4mbmJzcDsKLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT48YnIgLz4KLQotPHA+IFRoZSA8c3Ryb25nPnByb2plY3QgY29udGVudHMgZnJhbWU8L3N0cm9uZz4gY29udGFpbnMgYSBsaXN0IG9mIGFsbCBwYWNrYWdlcwotYW5kIG1vZHVsZXMgdGhhdCBhcmUgZGVmaW5lZCBieSB0aGUgcHJvamVjdC4gIENsaWNraW5nIG9uIGFuIGVudHJ5Ci13aWxsIGRpc3BsYXkgaXRzIGNvbnRlbnRzIGluIHRoZSBtb2R1bGUgY29udGVudHMgZnJhbWUuICBDbGlja2luZyBvbiBhCi1zcGVjaWFsIGVudHJ5LCBsYWJlbGVkICJFdmVyeXRoaW5nLCIgd2lsbCBkaXNwbGF5IHRoZSBjb250ZW50cyBvZgotdGhlIGVudGlyZSBwcm9qZWN0LiA8L3A+Ci0KLTxwPiBUaGUgPHN0cm9uZz5tb2R1bGUgY29udGVudHMgZnJhbWU8L3N0cm9uZz4gY29udGFpbnMgYSBsaXN0IG9mIGV2ZXJ5Ci1zdWJtb2R1bGUsIGNsYXNzLCB0eXBlLCBleGNlcHRpb24sIGZ1bmN0aW9uLCBhbmQgdmFyaWFibGUgZGVmaW5lZCBieSBhCi1tb2R1bGUgb3IgcGFja2FnZS4gIENsaWNraW5nIG9uIGFuIGVudHJ5IHdpbGwgZGlzcGxheSBpdHMKLWRvY3VtZW50YXRpb24gaW4gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZyYW1lLiAgQ2xpY2tpbmcgb24gdGhlIG5hbWUgb2YKLXRoZSBtb2R1bGUsIGF0IHRoZSB0b3Agb2YgdGhlIGZyYW1lLCB3aWxsIGRpc3BsYXkgdGhlIGRvY3VtZW50YXRpb24KLWZvciB0aGUgbW9kdWxlIGl0c2VsZi4gPC9wPgotCi08cD4gVGhlICI8c3Ryb25nPmZyYW1lczwvc3Ryb25nPiIgYW5kICI8c3Ryb25nPm5vIGZyYW1lczwvc3Ryb25nPiIgYnV0dG9ucyBiZWxvdyB0aGUgdG9wCi1uYXZpZ2F0aW9uIGJhciBjYW4gYmUgdXNlZCB0byBjb250cm9sIHdoZXRoZXIgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIGlzCi1kaXNwbGF5ZWQgb3Igbm90LiA8L3A+Ci0KLTxoMj4gVGhlIE5hdmlnYXRpb24gQmFyIDwvaDI+Ci0KLTxwPiBBIG5hdmlnYXRpb24gYmFyIGlzIGxvY2F0ZWQgYXQgdGhlIHRvcCBhbmQgYm90dG9tIG9mIGV2ZXJ5IHBhZ2UuCi1JdCBpbmRpY2F0ZXMgd2hhdCB0eXBlIG9mIHBhZ2UgeW91IGFyZSBjdXJyZW50bHkgdmlld2luZywgYW5kIGFsbG93cwoteW91IHRvIGdvIHRvIHJlbGF0ZWQgcGFnZXMuICBUaGUgZm9sbG93aW5nIHRhYmxlIGRlc2NyaWJlcyB0aGUgbGFiZWxzCi1vbiB0aGUgbmF2aWdhdGlvbiBiYXIuICBOb3RlIHRoYXQgbm90IHNvbWUgbGFiZWxzIChzdWNoIGFzCi1bUGFyZW50XSkgYXJlIG5vdCBkaXNwbGF5ZWQgb24gYWxsIHBhZ2VzLiA8L3A+Ci0KLTx0YWJsZSBjbGFzcz0ic3VtbWFyeSIgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiIHdpZHRoPSIxMDAlIj4KLTx0ciBjbGFzcz0ic3VtbWFyeSI+Ci0gIDx0aD5MYWJlbDwvdGg+Ci0gIDx0aD5IaWdobGlnaHRlZCB3aGVuLi4uPC90aD4KLSAgPHRoPkxpbmtzIHRvLi4uPC90aD4KLTwvdHI+Ci0gIDx0cj48dGQgdmFsaWduPSJ0b3AiPjxzdHJvbmc+W1BhcmVudF08L3N0cm9uZz48L3RkPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj48ZW0+KG5ldmVyIGhpZ2hsaWdodGVkKTwvZW0+PC90ZD4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+IHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgcGFja2FnZSA8L3RkPjwvdHI+Ci0gIDx0cj48dGQgdmFsaWduPSJ0b3AiPjxzdHJvbmc+W1BhY2thZ2VdPC9zdHJvbmc+PC90ZD4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+dmlld2luZyBhIHBhY2thZ2U8L3RkPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj50aGUgcGFja2FnZSBjb250YWluaW5nIHRoZSBjdXJyZW50IG9iamVjdAotICAgICAgPC90ZD48L3RyPgotICA8dHI+PHRkIHZhbGlnbj0idG9wIj48c3Ryb25nPltNb2R1bGVdPC9zdHJvbmc+PC90ZD4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+dmlld2luZyBhIG1vZHVsZTwvdGQ+Ci0gICAgICA8dGQgdmFsaWduPSJ0b3AiPnRoZSBtb2R1bGUgY29udGFpbmluZyB0aGUgY3VycmVudCBvYmplY3QKLSAgICAgIDwvdGQ+PC90cj4gCi0gIDx0cj48dGQgdmFsaWduPSJ0b3AiPjxzdHJvbmc+W0NsYXNzXTwvc3Ryb25nPjwvdGQ+Ci0gICAgICA8dGQgdmFsaWduPSJ0b3AiPnZpZXdpbmcgYSBjbGFzcyA8L3RkPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj50aGUgY2xhc3MgY29udGFpbmluZyB0aGUgY3VycmVudCBvYmplY3Q8L3RkPjwvdHI+Ci0gIDx0cj48dGQgdmFsaWduPSJ0b3AiPjxzdHJvbmc+W1RyZWVzXTwvc3Ryb25nPjwvdGQ+Ci0gICAgICA8dGQgdmFsaWduPSJ0b3AiPnZpZXdpbmcgdGhlIHRyZWVzIHBhZ2U8L3RkPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj4gdGhlIHRyZWVzIHBhZ2UgPC90ZD48L3RyPgotICA8dHI+PHRkIHZhbGlnbj0idG9wIj48c3Ryb25nPltJbmRleF08L3N0cm9uZz48L3RkPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj52aWV3aW5nIHRoZSBpbmRleCBwYWdlPC90ZD4KLSAgICAgIDx0ZCB2YWxpZ249InRvcCI+IHRoZSBpbmRleCBwYWdlIDwvdGQ+PC90cj4KLSAgPHRyPjx0ZCB2YWxpZ249InRvcCI+PHN0cm9uZz5bSGVscF08L3N0cm9uZz48L3RkPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj52aWV3aW5nIHRoZSBoZWxwIHBhZ2U8L3RkPgotICAgICAgPHRkIHZhbGlnbj0idG9wIj4gdGhlIGhlbHAgcGFnZSA8L3RkPjwvdHI+Ci08L3RhYmxlPgotCi08cD4gVGhlICI8c3Ryb25nPnNob3cgcHJpdmF0ZTwvc3Ryb25nPiIgYW5kICI8c3Ryb25nPmhpZGUgcHJpdmF0ZTwvc3Ryb25nPiIgYnV0dG9ucyBiZWxvdwotdGhlIHRvcCBuYXZpZ2F0aW9uIGJhciBjYW4gYmUgdXNlZCB0byBjb250cm9sIHdoZXRoZXIgZG9jdW1lbnRhdGlvbgotZm9yIHByaXZhdGUgb2JqZWN0cyBpcyBkaXNwbGF5ZWQuICBQcml2YXRlIG9iamVjdHMgYXJlIHVzdWFsbHkgZGVmaW5lZAotYXMgb2JqZWN0cyB3aG9zZSAoc2hvcnQpIG5hbWVzIGJlZ2luIHdpdGggYSBzaW5nbGUgdW5kZXJzY29yZSwgYnV0IGRvCi1ub3QgZW5kIHdpdGggYW4gdW5kZXJzY29yZS4gIEZvciBleGFtcGxlLCAiPGNvZGU+X3g8L2NvZGU+IiwKLSI8Y29kZT5fX3BwcmludDwvY29kZT4iLCBhbmQgIjxjb2RlPmVweWRvYy5lcHl0ZXh0Ll90b2tlbml6ZTwvY29kZT4iCi1hcmUgcHJpdmF0ZSBvYmplY3RzOyBidXQgIjxjb2RlPnJlLnN1YjwvY29kZT4iLAotIjxjb2RlPl9faW5pdF9fPC9jb2RlPiIsIGFuZCAiPGNvZGU+dHlwZV88L2NvZGU+IiBhcmUgbm90LiAgSG93ZXZlciwKLWlmIGEgbW9kdWxlIGRlZmluZXMgdGhlICI8Y29kZT5fX2FsbF9fPC9jb2RlPiIgdmFyaWFibGUsIHRoZW4gaXRzCi1jb250ZW50cyBhcmUgdXNlZCB0byBkZWNpZGUgd2hpY2ggb2JqZWN0cyBhcmUgcHJpdmF0ZS4gPC9wPgotCi08cD4gQSB0aW1lc3RhbXAgYmVsb3cgdGhlIGJvdHRvbSBuYXZpZ2F0aW9uIGJhciBpbmRpY2F0ZXMgd2hlbiBlYWNoCi1wYWdlIHdhcyBsYXN0IHVwZGF0ZWQuIDwvcD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT0gTkFWSUdBVElPTiBCQVIgPT09PT09PT09PT09PT09PT09PT0gLS0+Ci08dGFibGUgY2xhc3M9Im5hdmJhciIgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiCi0gICAgICAgYmdjb2xvcj0iI2EwYzBmZiIgY2VsbHNwYWNpbmc9IjAiPgotICA8dHIgdmFsaWduPSJtaWRkbGUiPgotICA8IS0tIEhvbWUgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJyanNtaW4tbW9kdWxlLmh0bWwiPkhvbWU8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFRyZWUgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJtb2R1bGUtdHJlZS5odG1sIj5UcmVlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSW5kZXggbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJpZGVudGlmaWVyLWluZGV4Lmh0bWwiPkluZGljZXM8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEhlbHAgbGluayAtLT4KLSAgICAgIDx0aCBiZ2NvbG9yPSIjNzBiMGYwIiBjbGFzcz0ibmF2YmFyLXNlbGVjdCIKLSAgICAgICAgICA+Jm5ic3A7Jm5ic3A7Jm5ic3A7SGVscCZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBQcm9qZWN0IGhvbWVwYWdlIC0tPgotICAgICAgPHRoIGNsYXNzPSJuYXZiYXIiIGFsaWduPSJyaWdodCIgd2lkdGg9IjEwMCUiPgotICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgICAgICAgIDx0cj48dGggY2xhc3M9Im5hdmJhciIgYWxpZ249ImNlbnRlciIKLSAgICAgICAgICAgID48YSBocmVmPSJodHRwOi8vb3BlbnNvdXJjZS5wZXJsaWcuZGUvcmpzbWluLyIgdGFyZ2V0PSJfdG9wIj5WaXNpdCByanNtaW4gT25saW5lPC9hPjwvdGg+Ci0gICAgICAgICAgPC90cj48L3RhYmxlPjwvdGg+Ci0gIDwvdHI+Ci08L3RhYmxlPgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gIDwhLS0KLSAgLy8gUHJpdmF0ZSBvYmplY3RzIGFyZSBpbml0aWFsbHkgZGlzcGxheWVkIChiZWNhdXNlIGlmCi0gIC8vIGphdmFzY3JpcHQgaXMgdHVybmVkIG9mZiB0aGVuIHdlIHdhbnQgdGhlbSB0byBiZQotICAvLyB2aXNpYmxlKTsgYnV0IGJ5IGRlZmF1bHQsIHdlIHdhbnQgdG8gaGlkZSB0aGVtLiAgU28gaGlkZQotICAvLyB0aGVtIHVubGVzcyB3ZSBoYXZlIGEgY29va2llIHRoYXQgc2F5cyB0byBzaG93IHRoZW0uCi0gIGNoZWNrQ29va2llKCk7Ci0gIC8vIC0tPgotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL2FwaWRvYy9pZGVudGlmaWVyLWluZGV4Lmh0bWwgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL2FwaWRvYy9pZGVudGlmaWVyLWluZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YjRiOTguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvaWRlbnRpZmllci1pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9ImFzY2lpIj8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAgICJEVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci0gIDx0aXRsZT5JZGVudGlmaWVyIEluZGV4PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJlcHlkb2MuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLSAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZXB5ZG9jLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSJibHVlIiB2bGluaz0iIzIwNDA4MCIKLSAgICAgIGFsaW5rPSIjMjA0MDgwIj4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT0gTkFWSUdBVElPTiBCQVIgPT09PT09PT09PT09PT09PT09PT0gLS0+Ci08dGFibGUgY2xhc3M9Im5hdmJhciIgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiCi0gICAgICAgYmdjb2xvcj0iI2EwYzBmZiIgY2VsbHNwYWNpbmc9IjAiPgotICA8dHIgdmFsaWduPSJtaWRkbGUiPgotICA8IS0tIEhvbWUgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJyanNtaW4tbW9kdWxlLmh0bWwiPkhvbWU8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFRyZWUgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJtb2R1bGUtdHJlZS5odG1sIj5UcmVlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSW5kZXggbGluayAtLT4KLSAgICAgIDx0aCBiZ2NvbG9yPSIjNzBiMGYwIiBjbGFzcz0ibmF2YmFyLXNlbGVjdCIKLSAgICAgICAgICA+Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5kaWNlcyZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBIZWxwIGxpbmsgLS0+Ci0gICAgICA8dGg+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGEKLSAgICAgICAgaHJlZj0iaGVscC5odG1sIj5IZWxwPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBQcm9qZWN0IGhvbWVwYWdlIC0tPgotICAgICAgPHRoIGNsYXNzPSJuYXZiYXIiIGFsaWduPSJyaWdodCIgd2lkdGg9IjEwMCUiPgotICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgICAgICAgIDx0cj48dGggY2xhc3M9Im5hdmJhciIgYWxpZ249ImNlbnRlciIKLSAgICAgICAgICAgID48YSBocmVmPSJodHRwOi8vb3BlbnNvdXJjZS5wZXJsaWcuZGUvcmpzbWluLyIgdGFyZ2V0PSJfdG9wIj5WaXNpdCByanNtaW4gT25saW5lPC9hPjwvdGg+Ci0gICAgICAgICAgPC90cj48L3RhYmxlPjwvdGg+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICA8dHIgdmFsaWduPSJ0b3AiPgotICAgIDx0ZCB3aWR0aD0iMTAwJSI+Jm5ic3A7PC90ZD4KLSAgICA8dGQ+Ci0gICAgICA8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgPCEtLSBoaWRlL3Nob3cgcHJpdmF0ZSAtLT4KLSAgICAgIDwvdGFibGU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+Ci08dHIgdmFsaWduPSJib3R0b20iPjx0ZD4KLTxoMSBjbGFzcz0iZXB5ZG9jIj5JZGVudGlmaWVyIEluZGV4PC9oMT4KLTwvdGQ+PHRkPgotWwotICBBCi0gIEIKLSAgQwotICBECi0gIEUKLSAgRgotICBHCi0gIEgKLSAgSQotIDxhIGhyZWY9IiNKIj5KPC9hPgotICBLCi0gIEwKLSAgTQotICBOCi0gIE8KLSAgUAotICBRCi0gPGEgaHJlZj0iI1IiPlI8L2E+Ci0gIFMKLSAgVAotICBVCi0gIFYKLSAgVwotICBYCi0gIFkKLSAgWgotIDxhIGhyZWY9IiNfIj5fPC9hPgotXQotPC90ZD48L3RhYmxlPgotPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPgotPHRyIHZhbGlnbj0idG9wIj48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxJSI+PGgyIGNsYXNzPSJlcHlkb2MiPjxhIG5hbWU9IkoiPko8L2E+PC9oMj48L3RkPgotPHRkIHZhbGlnbj0idG9wIj4KLTx0YWJsZSBjbGFzcz0ibGluay1pbmRleCIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+Ci08dHI+Ci08dGQgd2lkdGg9IjMzJSIgY2xhc3M9ImxpbmstaW5kZXgiPjxhIGhyZWY9InJqc21pbi1tb2R1bGUuaHRtbCNqc21pbiI+anNtaW4oKTwvYT48YnIgLz4KLTxzcGFuIGNsYXNzPSJpbmRleC13aGVyZSI+KGluJm5ic3A7PGEgaHJlZj0icmpzbWluLW1vZHVsZS5odG1sIj5yanNtaW48L2E+KTwvc3Bhbj48L3RkPgotPHRkIHdpZHRoPSIzMyUiIGNsYXNzPSJsaW5rLWluZGV4Ij4mbmJzcDs8L3RkPgotPHRkIHdpZHRoPSIzMyUiIGNsYXNzPSJsaW5rLWluZGV4Ij4mbmJzcDs8L3RkPgotPC90cj4KLTx0cj48dGQgY2xhc3M9ImxpbmstaW5kZXgiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJsaW5rLWluZGV4Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibGluay1pbmRleCI+Jm5ic3A7PC90ZD48L3RyPgotPC90YWJsZT4KLTwvdGQ+PC90cj4KLTx0ciB2YWxpZ249InRvcCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMSUiPjxoMiBjbGFzcz0iZXB5ZG9jIj48YSBuYW1lPSJSIj5SPC9hPjwvaDI+PC90ZD4KLTx0ZCB2YWxpZ249InRvcCI+Ci08dGFibGUgY2xhc3M9ImxpbmstaW5kZXgiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPgotPHRyPgotPHRkIHdpZHRoPSIzMyUiIGNsYXNzPSJsaW5rLWluZGV4Ij48YSBocmVmPSJyanNtaW4tbW9kdWxlLmh0bWwiPnJqc21pbjwvYT48L3RkPgotPHRkIHdpZHRoPSIzMyUiIGNsYXNzPSJsaW5rLWluZGV4Ij4mbmJzcDs8L3RkPgotPHRkIHdpZHRoPSIzMyUiIGNsYXNzPSJsaW5rLWluZGV4Ij4mbmJzcDs8L3RkPgotPC90cj4KLTx0cj48dGQgY2xhc3M9ImxpbmstaW5kZXgiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJsaW5rLWluZGV4Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibGluay1pbmRleCI+Jm5ic3A7PC90ZD48L3RyPgotPC90YWJsZT4KLTwvdGQ+PC90cj4KLTx0ciB2YWxpZ249InRvcCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMSUiPjxoMiBjbGFzcz0iZXB5ZG9jIj48YSBuYW1lPSJfIj5fPC9hPjwvaDI+PC90ZD4KLTx0ZCB2YWxpZ249InRvcCI+Ci08dGFibGUgY2xhc3M9ImxpbmstaW5kZXgiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPgotPHRyPgotPHRkIHdpZHRoPSIzMyUiIGNsYXNzPSJsaW5rLWluZGV4Ij48YSBocmVmPSJyanNtaW4tbW9kdWxlLmh0bWwjX19kb2NfXyI+X19kb2NfXzwvYT48YnIgLz4KLTxzcGFuIGNsYXNzPSJpbmRleC13aGVyZSI+KGluJm5ic3A7PGEgaHJlZj0icmpzbWluLW1vZHVsZS5odG1sIj5yanNtaW48L2E+KTwvc3Bhbj48L3RkPgotPHRkIHdpZHRoPSIzMyUiIGNsYXNzPSJsaW5rLWluZGV4Ij48YSBocmVmPSJyanNtaW4tbW9kdWxlLmh0bWwjX19saWNlbnNlX18iPl9fbGljZW5zZV9fPC9hPjxiciAvPgotPHNwYW4gY2xhc3M9ImluZGV4LXdoZXJlIj4oaW4mbmJzcDs8YSBocmVmPSJyanNtaW4tbW9kdWxlLmh0bWwiPnJqc21pbjwvYT4pPC9zcGFuPjwvdGQ+Ci08dGQgd2lkdGg9IjMzJSIgY2xhc3M9ImxpbmstaW5kZXgiPjxhIGhyZWY9InJqc21pbi1tb2R1bGUuaHRtbCNfX3BhY2thZ2VfXyI+X19wYWNrYWdlX188L2E+PGJyIC8+Ci08c3BhbiBjbGFzcz0iaW5kZXgtd2hlcmUiPihpbiZuYnNwOzxhIGhyZWY9InJqc21pbi1tb2R1bGUuaHRtbCI+cmpzbWluPC9hPik8L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+PHRkIGNsYXNzPSJsaW5rLWluZGV4Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibGluay1pbmRleCI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImxpbmstaW5kZXgiPiZuYnNwOzwvdGQ+PC90cj4KLTwvdGFibGU+Ci08L3RkPjwvdHI+Ci08L3RhYmxlPgotPGJyIC8+PGJyIC8+PCEtLSA9PT09PT09PT09PT09PT09PT09PSBOQVZJR0FUSU9OIEJBUiA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YWJsZSBjbGFzcz0ibmF2YmFyIiBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIKLSAgICAgICBiZ2NvbG9yPSIjYTBjMGZmIiBjZWxsc3BhY2luZz0iMCI+Ci0gIDx0ciB2YWxpZ249Im1pZGRsZSI+Ci0gIDwhLS0gSG9tZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9InJqc21pbi1tb2R1bGUuaHRtbCI+SG9tZTwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gVHJlZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9Im1vZHVsZS10cmVlLmh0bWwiPlRyZWVzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBJbmRleCBsaW5rIC0tPgotICAgICAgPHRoIGJnY29sb3I9IiM3MGIwZjAiIGNsYXNzPSJuYXZiYXItc2VsZWN0IgotICAgICAgICAgID4mbmJzcDsmbmJzcDsmbmJzcDtJbmRpY2VzJm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEhlbHAgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJoZWxwLmh0bWwiPkhlbHA8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFByb2plY3QgaG9tZXBhZ2UgLS0+Ci0gICAgICA8dGggY2xhc3M9Im5hdmJhciIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMTAwJSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgICAgPHRyPjx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgPjxhIGhyZWY9Imh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yanNtaW4vIiB0YXJnZXQ9Il90b3AiPlZpc2l0IHJqc21pbiBPbmxpbmU8L2E+PC90aD4KLSAgICAgICAgICA8L3RyPjwvdGFibGU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICAvLyBQcml2YXRlIG9iamVjdHMgYXJlIGluaXRpYWxseSBkaXNwbGF5ZWQgKGJlY2F1c2UgaWYKLSAgLy8gamF2YXNjcmlwdCBpcyB0dXJuZWQgb2ZmIHRoZW4gd2Ugd2FudCB0aGVtIHRvIGJlCi0gIC8vIHZpc2libGUpOyBidXQgYnkgZGVmYXVsdCwgd2Ugd2FudCB0byBoaWRlIHRoZW0uICBTbyBoaWRlCi0gIC8vIHRoZW0gdW5sZXNzIHdlIGhhdmUgYSBjb29raWUgdGhhdCBzYXlzIHRvIHNob3cgdGhlbS4KLSAgY2hlY2tDb29raWUoKTsKLSAgLy8gLS0+Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvYXBpZG9jL2luZGV4Lmh0bWwgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL2FwaWRvYy9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTFiNmRhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvYXBpZG9jL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iYXNjaWkiPz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgICAgICAgIkRURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLSAgPHRpdGxlPnJqc21pbjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZXB5ZG9jLmNzcyIgdHlwZT0idGV4dC9jc3MiIC8+Ci0gIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImVweWRvYy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iYmx1ZSIgdmxpbms9IiMyMDQwODAiCi0gICAgICBhbGluaz0iIzIwNDA4MCI+Ci08IS0tID09PT09PT09PT09PT09PT09PT09IE5BVklHQVRJT04gQkFSID09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhYmxlIGNsYXNzPSJuYXZiYXIiIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIgotICAgICAgIGJnY29sb3I9IiNhMGMwZmYiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0ibWlkZGxlIj4KLSAgPCEtLSBIb21lIGxpbmsgLS0+Ci0gICAgICA8dGggYmdjb2xvcj0iIzcwYjBmMCIgY2xhc3M9Im5hdmJhci1zZWxlY3QiCi0gICAgICAgICAgPiZuYnNwOyZuYnNwOyZuYnNwO0hvbWUmbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gVHJlZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9Im1vZHVsZS10cmVlLmh0bWwiPlRyZWVzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBJbmRleCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImlkZW50aWZpZXItaW5kZXguaHRtbCI+SW5kaWNlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSGVscCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImhlbHAuaHRtbCI+SGVscDwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gUHJvamVjdCBob21lcGFnZSAtLT4KLSAgICAgIDx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0icmlnaHQiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgICA8dHI+PHRoIGNsYXNzPSJuYXZiYXIiIGFsaWduPSJjZW50ZXIiCi0gICAgICAgICAgICA+PGEgaHJlZj0iaHR0cDovL29wZW5zb3VyY2UucGVybGlnLmRlL3Jqc21pbi8iIHRhcmdldD0iX3RvcCI+VmlzaXQgcmpzbWluIE9ubGluZTwvYT48L3RoPgotICAgICAgICAgIDwvdHI+PC90YWJsZT48L3RoPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0idG9wIj4KLSAgICA8dGQgd2lkdGg9IjEwMCUiPgotICAgICAgPHNwYW4gY2xhc3M9ImJyZWFkY3J1bWJzIj4KLSAgICAgICAgTW9kdWxlJm5ic3A7cmpzbWluCi0gICAgICA8L3NwYW4+Ci0gICAgPC90ZD4KLSAgICA8dGQ+Ci0gICAgICA8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgPCEtLSBoaWRlL3Nob3cgcHJpdmF0ZSAtLT4KLSAgICAgIDwvdGFibGU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08IS0tID09PT09PT09PT09PT09PT09PT09IE1PRFVMRSBERVNDUklQVElPTiA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTxoMSBjbGFzcz0iZXB5ZG9jIj5Nb2R1bGUgcmpzbWluPC9oMT48cCBjbGFzcz0ibm9tYXJnaW4tdG9wIj48c3BhbiBjbGFzcz0iY29kZWxpbmsiPjxhIGhyZWY9InJqc21pbi1weXNyYy5odG1sIj5zb3VyY2UmbmJzcDtjb2RlPC9hPjwvc3Bhbj48L3A+Ci08cD5ySlNtaW4gaXMgYSBqYXZhc2NyaXB0IG1pbmlmaWVyIHdyaXR0ZW4gaW4gcHl0aG9uLjwvcD4KLTxwPlRoZSBtaW5pZmllciBpcyBiYXNlZCBvbiB0aGUgc2VtYW50aWNzIG9mIDxhIGNsYXNzPSJyc3QtcmVmZXJlbmNlIGV4dGVybmFsIiBocmVmPSJodHRwOi8vd3d3LmNyb2NrZm9yZC5jb20vamF2YXNjcmlwdC9qc21pbi5jIiB0YXJnZXQ9Il90b3AiPmpzbWluLmMgYnkgRG91Z2xhcyBDcm9ja2ZvcmQ8L2E+LjwvcD4KLTxwPlRoZSBtb2R1bGUgaXMgYSByZS1pbXBsZW1lbnRhdGlvbiBhaW1pbmcgZm9yIHNwZWVkLCBzbyBpdCBjYW4gYmUgdXNlZCBhdAotcnVudGltZSAocmF0aGVyIHRoYW4gZHVyaW5nIGEgcHJlcHJvY2Vzc2luZyBzdGVwKS4gVXN1YWxseSBpdCBwcm9kdWNlcyB0aGUKLXNhbWUgcmVzdWx0cyBhcyB0aGUgb3JpZ2luYWwgPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+anNtaW4uYzwvdHQ+LiBJdCBkaWZmZXJzIGluIHRoZSBmb2xsb3dpbmcgd2F5czo8L3A+Ci08dWwgY2xhc3M9InJzdC1zaW1wbGUiPgotPGxpPnRoZXJlIGlzIG5vIGVycm9yIGRldGVjdGlvbjogdW50ZXJtaW5hdGVkIHN0cmluZywgcmVnZXggYW5kIGNvbW1lbnQKLWxpdGVyYWxzIGFyZSB0cmVhdGVkIGFzIHJlZ3VsYXIgamF2YXNjcmlwdCBjb2RlIGFuZCBtaW5pZmllZCBhcyBzdWNoLjwvbGk+Ci08bGk+Q29udHJvbCBjaGFyYWN0ZXJzIGluc2lkZSBzdHJpbmcgYW5kIHJlZ2V4IGxpdGVyYWxzIGFyZSBsZWZ0IHVudG91Y2hlZDsgdGhleQotYXJlIG5vdCBjb252ZXJ0ZWQgdG8gc3BhY2VzIChub3IgdG8gbik8L2xpPgotPGxpPk5ld2xpbmUgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQgaW5zaWRlIHN0cmluZyBhbmQgcmVnZXggbGl0ZXJhbHMsIGV4Y2VwdAotZm9yIGxpbmUgY29udGludWF0aW9ucyBpbiBzdHJpbmcgbGl0ZXJhbHMgKEVDTUEtNSkuPC9saT4KLTxsaT4mcXVvdDtyZXR1cm4gL3JlZ2V4LyZxdW90OyBpcyByZWNvZ25pemVkIGNvcnJlY3RseS48L2xpPgotPGxpPkxpbmUgdGVybWluYXRvcnMgYWZ0ZXIgcmVnZXggbGl0ZXJhbHMgYXJlIGhhbmRsZWQgbW9yZSBzZW5zaWJseTwvbGk+Ci08bGk+JnF1b3Q7KyArJnF1b3Q7IGFuZCAmcXVvdDstIC0mcXVvdDsgc2VxdWVuY2VzIGFyZSBub3QgY29sbGFwc2VkIHRvICcrKycgb3IgJy0tJzwvbGk+Ci08bGk+TmV3bGluZXMgYmVmb3JlICEgb3BlcmF0b3JzIGFyZSByZW1vdmVkIG1vcmUgc2Vuc2libHk8L2xpPgotPGxpPkNvbW1lbnRzIHN0YXJ0aW5nIHdpdGggYW4gZXhjbGFtYXRpb24gbWFyayAoPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+ITwvdHQ+KSBjYW4gYmUga2VwdCBvcHRpb25hbGx5PC9saT4KLTxsaT5ySlNtaW4gZG9lcyBub3QgaGFuZGxlIHN0cmVhbXMsIGJ1dCBvbmx5IGNvbXBsZXRlIHN0cmluZ3MuIChIb3dldmVyLCB0aGUKLW1vZHVsZSBwcm92aWRlcyBhICZxdW90O3N0cmVhbXkmcXVvdDsgaW50ZXJmYWNlKS48L2xpPgotPC91bD4KLTxwPlNpbmNlIG1vc3QgcGFydHMgb2YgdGhlIGxvZ2ljIGFyZSBoYW5kbGVkIGJ5IHRoZSByZWdleCBlbmdpbmUgaXQncyB3YXkgZmFzdGVyCi10aGFuIHRoZSBvcmlnaW5hbCBweXRob24gcG9ydCBvZiA8dHQgY2xhc3M9InJzdC1kb2N1dGlscyBsaXRlcmFsIj5qc21pbi5jPC90dD4gYnkgQmFydWNoIEV2ZW4uIFRoZSBzcGVlZCBmYWN0b3IKLXZhcmllcyBiZXR3ZWVuIGFib3V0IDYgYW5kIDU1IGRlcGVuZGluZyBvbiBpbnB1dCBhbmQgcHl0aG9uIHZlcnNpb24gKGl0IGdldHMKLWZhc3RlciB0aGUgbW9yZSBjb21wcmVzc2VkIHRoZSBpbnB1dCBhbHJlYWR5IGlzKS4gQ29tcGFyZWQgdG8gdGhlCi1zcGVlZC1yZWZhY3RvcmVkIHB5dGhvbiBwb3J0IGJ5IERhdmUgU3QuR2VybWFpbiB0aGUgcGVyZm9ybWFuY2UgZ2FpbiBpcyBsZXNzCi1kcmFtYXRpYyBidXQgc3RpbGwgYmV0d2VlbiAzIGFuZCA1MCAoZm9yIGh1Z2UgaW5wdXRzKS4gU2VlIHRoZSBkb2NzL0JFTkNITUFSS1MKLWZpbGUgZm9yIGRldGFpbHMuPC9wPgotPHA+cmpzbWluLmMgaXMgYSByZWltcGxlbWVudGF0aW9uIG9mIHJqc21pbi5weSBpbiBDIGFuZCBzcGVlZHMgaXQgdXAgZXZlbiBtb3JlLjwvcD4KLTxwPkJvdGggcHl0aG9uIDIgYW5kIHB5dGhvbiAzIGFyZSBzdXBwb3J0ZWQuPC9wPgotCi08aHIgLz4KLTxkaXYgY2xhc3M9ImZpZWxkcyI+ICAgICAgPHA+PHN0cm9uZz5Db3B5cmlnaHQ6PC9zdHJvbmc+Ci0gICAgICAgIENvcHlyaWdodCAyMDExIC0gMjAxNQotQW5kciYjMjMzOyBNYWxvIG9yIGhpcyBsaWNlbnNvcnMsIGFzIGFwcGxpY2FibGUKLSAgICAgIDwvcD4KLSAgICAgIDxwPjxzdHJvbmc+TGljZW5zZTo8L3N0cm9uZz4KLSAgICAgICAgPHA+TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICZxdW90O0xpY2Vuc2UmcXVvdDspOwoteW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0PC9wPgotPGJsb2NrcXVvdGU+Ci08YSBjbGFzcz0icnN0LXJlZmVyZW5jZSBleHRlcm5hbCIgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT48L2Jsb2NrcXVvdGU+Ci08cD5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywKLVdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuPC9wPgotICAgICAgPC9wPgotICAgICAgPHA+PHN0cm9uZz5WZXJzaW9uOjwvc3Ryb25nPgotICAgICAgICAxLjAuMTIKLSAgICAgIDwvcD4KLSAgICAgIDxwPjxzdHJvbmc+QXV0aG9yOjwvc3Ryb25nPgotICAgICAgICBBbmRyJiMyMzM7IE1hbG8KLSAgICAgIDwvcD4KLTwvZGl2PjwhLS0gPT09PT09PT09PT09PT09PT09PT0gRlVOQ1RJT05TID09PT09PT09PT09PT09PT09PT09IC0tPgotPGEgbmFtZT0ic2VjdGlvbi1GdW5jdGlvbnMiPjwvYT4KLTx0YWJsZSBjbGFzcz0ic3VtbWFyeSIgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMyIKLSAgICAgICBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IndoaXRlIj4KLTx0ciBiZ2NvbG9yPSIjNzBiMGYwIiBjbGFzcz0idGFibGUtaGVhZGVyIj4KLSAgPHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSIyIiBjbGFzcz0idGFibGUtaGVhZGVyIj4KLSAgICA8c3BhbiBjbGFzcz0idGFibGUtaGVhZGVyIj5GdW5jdGlvbnM8L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci0gICAgPHRkIHdpZHRoPSIxNSUiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiIGNsYXNzPSJzdW1tYXJ5Ij4KLSAgICAgIDxzcGFuIGNsYXNzPSJzdW1tYXJ5LXR5cGUiPjx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPnN0cjwvdHQ+PC9zcGFuPgotICAgIDwvdGQ+PHRkIGNsYXNzPSJzdW1tYXJ5Ij4KLSAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkPjxzcGFuIGNsYXNzPSJzdW1tYXJ5LXNpZyI+PGEgaHJlZj0icmpzbWluLW1vZHVsZS5odG1sI2pzbWluIiBjbGFzcz0ic3VtbWFyeS1zaWctbmFtZSI+anNtaW48L2E+KDxzcGFuIGNsYXNzPSJzdW1tYXJ5LXNpZy1hcmciPnNjcmlwdDwvc3Bhbj4sCi0gICAgICAgIDxzcGFuIGNsYXNzPSJzdW1tYXJ5LXNpZy1hcmciPmtlZXBfYmFuZ19jb21tZW50czwvc3Bhbj49PHNwYW4gY2xhc3M9InN1bW1hcnktc2lnLWRlZmF1bHQiPkZhbHNlPC9zcGFuPik8L3NwYW4+PGJyIC8+Ci0gICAgICBNaW5pZnkgamF2YXNjcmlwdCBiYXNlZCBvbiA8YSBjbGFzcz0icnN0LXJlZmVyZW5jZSBleHRlcm5hbCIgaHJlZj0iaHR0cDovL3d3dy5jcm9ja2ZvcmQuY29tL2phdmFzY3JpcHQvanNtaW4uYyIgdGFyZ2V0PSJfdG9wIj5qc21pbi5jIGJ5IERvdWdsYXMgQ3JvY2tmb3JkPC9hPi48L3RkPgotICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2RlbGluayI+PGEgaHJlZj0icmpzbWluLXB5c3JjLmh0bWwjanNtaW4iPnNvdXJjZSZuYnNwO2NvZGU8L2E+PC9zcGFuPgotICAgICAgICAgICAgCi0gICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICAKLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT0gRlVOQ1RJT04gREVUQUlMUyA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTxhIG5hbWU9InNlY3Rpb24tRnVuY3Rpb25EZXRhaWxzIj48L2E+Ci08dGFibGUgY2xhc3M9ImRldGFpbHMiIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjMiCi0gICAgICAgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSJ3aGl0ZSI+Ci08dHIgYmdjb2xvcj0iIzcwYjBmMCIgY2xhc3M9InRhYmxlLWhlYWRlciI+Ci0gIDx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMiIgY2xhc3M9InRhYmxlLWhlYWRlciI+Ci0gICAgPHNwYW4gY2xhc3M9InRhYmxlLWhlYWRlciI+RnVuY3Rpb24gRGV0YWlsczwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08YSBuYW1lPSJqc21pbiI+PC9hPgotPGRpdj4KLTx0YWJsZSBjbGFzcz0iZGV0YWlscyIgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMyIKLSAgICAgICBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IndoaXRlIj4KLTx0cj48dGQ+Ci0gIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiPgotICA8dHIgdmFsaWduPSJ0b3AiPjx0ZD4KLSAgPGgzIGNsYXNzPSJlcHlkb2MiPjxzcGFuIGNsYXNzPSJzaWciPjxzcGFuIGNsYXNzPSJzaWctbmFtZSI+anNtaW48L3NwYW4+KDxzcGFuIGNsYXNzPSJzaWctYXJnIj5zY3JpcHQ8L3NwYW4+LAotICAgICAgICA8c3BhbiBjbGFzcz0ic2lnLWFyZyI+a2VlcF9iYW5nX2NvbW1lbnRzPC9zcGFuPj08c3BhbiBjbGFzcz0ic2lnLWRlZmF1bHQiPkZhbHNlPC9zcGFuPik8L3NwYW4+Ci0gIDwvaDM+Ci0gIDwvdGQ+PHRkIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiCi0gICAgPjxzcGFuIGNsYXNzPSJjb2RlbGluayI+PGEgaHJlZj0icmpzbWluLXB5c3JjLmh0bWwjanNtaW4iPnNvdXJjZSZuYnNwO2NvZGU8L2E+PC9zcGFuPiZuYnNwOwotICAgIDwvdGQ+Ci0gIDwvdHI+PC90YWJsZT4KLSAgCi0gIDxwPk1pbmlmeSBqYXZhc2NyaXB0IGJhc2VkIG9uIDxhIGNsYXNzPSJyc3QtcmVmZXJlbmNlIGV4dGVybmFsIiBocmVmPSJodHRwOi8vd3d3LmNyb2NrZm9yZC5jb20vamF2YXNjcmlwdC9qc21pbi5jIiB0YXJnZXQ9Il90b3AiPmpzbWluLmMgYnkgRG91Z2xhcyBDcm9ja2ZvcmQ8L2E+LjwvcD4KLTxwPkluc3RlYWQgb2YgcGFyc2luZyB0aGUgc3RyZWFtIGNoYXIgYnkgY2hhciwgaXQgdXNlcyBhIHJlZ3VsYXIKLWV4cHJlc3Npb24gYXBwcm9hY2ggd2hpY2ggbWluaWZpZXMgdGhlIHdob2xlIHNjcmlwdCB3aXRoIG9uZSBiaWcKLXN1YnN0aXR1dGlvbiByZWdleC48L3A+Ci0gIDxkbCBjbGFzcz0iZmllbGRzIj4KLSAgICA8ZHQ+UGFyYW1ldGVyczo8L2R0PgotICAgIDxkZD48dWwgY2xhc3M9Im5vbWFyZ2luLXRvcCI+Ci0gICAgICAgIDxsaT48c3Ryb25nIGNsYXNzPSJwbmFtZSI+PGNvZGU+c2NyaXB0PC9jb2RlPjwvc3Ryb25nPiAoPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+c3RyPC90dD4pIC0gU2NyaXB0IHRvIG1pbmlmeTwvbGk+Ci0gICAgICAgIDxsaT48c3Ryb25nIGNsYXNzPSJwbmFtZSI+PGNvZGU+a2VlcF9iYW5nX2NvbW1lbnRzPC9jb2RlPjwvc3Ryb25nPiAoPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+Ym9vbDwvdHQ+KSAtIEtlZXAgY29tbWVudHMgc3RhcnRpbmcgd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrPyAoPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+LyohLi4uKi88L3NwYW4+PC90dD4pPC9saT4KLSAgICA8L3VsPjwvZGQ+Ci0gICAgPGR0PlJldHVybnM6IDx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPnN0cjwvdHQ+PC9kdD4KLSAgICAgICAgPGRkPk1pbmlmaWVkIHNjcmlwdDwvZGQ+Ci0gIDwvZGw+Ci08L3RkPjwvdHI+PC90YWJsZT4KLTwvZGl2PgotPGJyIC8+Ci08IS0tID09PT09PT09PT09PT09PT09PT09IE5BVklHQVRJT04gQkFSID09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhYmxlIGNsYXNzPSJuYXZiYXIiIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIgotICAgICAgIGJnY29sb3I9IiNhMGMwZmYiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0ibWlkZGxlIj4KLSAgPCEtLSBIb21lIGxpbmsgLS0+Ci0gICAgICA8dGggYmdjb2xvcj0iIzcwYjBmMCIgY2xhc3M9Im5hdmJhci1zZWxlY3QiCi0gICAgICAgICAgPiZuYnNwOyZuYnNwOyZuYnNwO0hvbWUmbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gVHJlZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9Im1vZHVsZS10cmVlLmh0bWwiPlRyZWVzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBJbmRleCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImlkZW50aWZpZXItaW5kZXguaHRtbCI+SW5kaWNlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSGVscCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImhlbHAuaHRtbCI+SGVscDwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gUHJvamVjdCBob21lcGFnZSAtLT4KLSAgICAgIDx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0icmlnaHQiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgICA8dHI+PHRoIGNsYXNzPSJuYXZiYXIiIGFsaWduPSJjZW50ZXIiCi0gICAgICAgICAgICA+PGEgaHJlZj0iaHR0cDovL29wZW5zb3VyY2UucGVybGlnLmRlL3Jqc21pbi8iIHRhcmdldD0iX3RvcCI+VmlzaXQgcmpzbWluIE9ubGluZTwvYT48L3RoPgotICAgICAgICAgIDwvdHI+PC90YWJsZT48L3RoPgotICA8L3RyPgotPC90YWJsZT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIC8vIFByaXZhdGUgb2JqZWN0cyBhcmUgaW5pdGlhbGx5IGRpc3BsYXllZCAoYmVjYXVzZSBpZgotICAvLyBqYXZhc2NyaXB0IGlzIHR1cm5lZCBvZmYgdGhlbiB3ZSB3YW50IHRoZW0gdG8gYmUKLSAgLy8gdmlzaWJsZSk7IGJ1dCBieSBkZWZhdWx0LCB3ZSB3YW50IHRvIGhpZGUgdGhlbS4gIFNvIGhpZGUKLSAgLy8gdGhlbSB1bmxlc3Mgd2UgaGF2ZSBhIGNvb2tpZSB0aGF0IHNheXMgdG8gc2hvdyB0aGVtLgotICBjaGVja0Nvb2tpZSgpOwotICAvLyAtLT4KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvbW9kdWxlLXRyZWUuaHRtbCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvYXBpZG9jL21vZHVsZS10cmVlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4OTMwNWQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvbW9kdWxlLXRyZWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9ImFzY2lpIj8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAgICJEVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci0gIDx0aXRsZT5Nb2R1bGUgSGllcmFyY2h5PC90aXRsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJlcHlkb2MuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLSAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZXB5ZG9jLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSJibHVlIiB2bGluaz0iIzIwNDA4MCIKLSAgICAgIGFsaW5rPSIjMjA0MDgwIj4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT0gTkFWSUdBVElPTiBCQVIgPT09PT09PT09PT09PT09PT09PT0gLS0+Ci08dGFibGUgY2xhc3M9Im5hdmJhciIgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiCi0gICAgICAgYmdjb2xvcj0iI2EwYzBmZiIgY2VsbHNwYWNpbmc9IjAiPgotICA8dHIgdmFsaWduPSJtaWRkbGUiPgotICA8IS0tIEhvbWUgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJyanNtaW4tbW9kdWxlLmh0bWwiPkhvbWU8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFRyZWUgbGluayAtLT4KLSAgICAgIDx0aCBiZ2NvbG9yPSIjNzBiMGYwIiBjbGFzcz0ibmF2YmFyLXNlbGVjdCIKLSAgICAgICAgICA+Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJlZXMmbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSW5kZXggbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJpZGVudGlmaWVyLWluZGV4Lmh0bWwiPkluZGljZXM8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEhlbHAgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJoZWxwLmh0bWwiPkhlbHA8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFByb2plY3QgaG9tZXBhZ2UgLS0+Ci0gICAgICA8dGggY2xhc3M9Im5hdmJhciIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMTAwJSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgICAgPHRyPjx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgPjxhIGhyZWY9Imh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yanNtaW4vIiB0YXJnZXQ9Il90b3AiPlZpc2l0IHJqc21pbiBPbmxpbmU8L2E+PC90aD4KLSAgICAgICAgICA8L3RyPjwvdGFibGU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gIDx0ciB2YWxpZ249InRvcCI+Ci0gICAgPHRkIHdpZHRoPSIxMDAlIj4mbmJzcDs8L3RkPgotICAgIDx0ZD4KLSAgICAgIDx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgICAgICA8IS0tIGhpZGUvc2hvdyBwcml2YXRlIC0tPgotICAgICAgPC90YWJsZT4KLSAgICA8L3RkPgotICA8L3RyPgotPC90YWJsZT4KLTxoMSBjbGFzcz0iZXB5ZG9jIj5Nb2R1bGUgSGllcmFyY2h5PC9oMT4KLTx1bCBjbGFzcz0ibm9tYXJnaW4tdG9wIj4KLSAgICA8bGk+IDxzdHJvbmcgY2xhc3M9InVpZGxpbmsiPjxhIGhyZWY9InJqc21pbi1tb2R1bGUuaHRtbCI+cmpzbWluPC9hPjwvc3Ryb25nPjogPGVtIGNsYXNzPSJzdW1tYXJ5Ij5ySlNtaW4gaXMgYSBqYXZhc2NyaXB0IG1pbmlmaWVyIHdyaXR0ZW4gaW4gcHl0aG9uLjwvZW0+ICAgIDwvbGk+Ci08L3VsPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PSBOQVZJR0FUSU9OIEJBUiA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YWJsZSBjbGFzcz0ibmF2YmFyIiBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIKLSAgICAgICBiZ2NvbG9yPSIjYTBjMGZmIiBjZWxsc3BhY2luZz0iMCI+Ci0gIDx0ciB2YWxpZ249Im1pZGRsZSI+Ci0gIDwhLS0gSG9tZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9InJqc21pbi1tb2R1bGUuaHRtbCI+SG9tZTwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gVHJlZSBsaW5rIC0tPgotICAgICAgPHRoIGJnY29sb3I9IiM3MGIwZjAiIGNsYXNzPSJuYXZiYXItc2VsZWN0IgotICAgICAgICAgID4mbmJzcDsmbmJzcDsmbmJzcDtUcmVlcyZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBJbmRleCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImlkZW50aWZpZXItaW5kZXguaHRtbCI+SW5kaWNlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSGVscCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImhlbHAuaHRtbCI+SGVscDwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gUHJvamVjdCBob21lcGFnZSAtLT4KLSAgICAgIDx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0icmlnaHQiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgICA8dHI+PHRoIGNsYXNzPSJuYXZiYXIiIGFsaWduPSJjZW50ZXIiCi0gICAgICAgICAgICA+PGEgaHJlZj0iaHR0cDovL29wZW5zb3VyY2UucGVybGlnLmRlL3Jqc21pbi8iIHRhcmdldD0iX3RvcCI+VmlzaXQgcmpzbWluIE9ubGluZTwvYT48L3RoPgotICAgICAgICAgIDwvdHI+PC90YWJsZT48L3RoPgotICA8L3RyPgotPC90YWJsZT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIC8vIFByaXZhdGUgb2JqZWN0cyBhcmUgaW5pdGlhbGx5IGRpc3BsYXllZCAoYmVjYXVzZSBpZgotICAvLyBqYXZhc2NyaXB0IGlzIHR1cm5lZCBvZmYgdGhlbiB3ZSB3YW50IHRoZW0gdG8gYmUKLSAgLy8gdmlzaWJsZSk7IGJ1dCBieSBkZWZhdWx0LCB3ZSB3YW50IHRvIGhpZGUgdGhlbS4gIFNvIGhpZGUKLSAgLy8gdGhlbSB1bmxlc3Mgd2UgaGF2ZSBhIGNvb2tpZSB0aGF0IHNheXMgdG8gc2hvdyB0aGVtLgotICBjaGVja0Nvb2tpZSgpOwotICAvLyAtLT4KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvcmVkaXJlY3QuaHRtbCBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvYXBpZG9jL3JlZGlyZWN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYWVlMGUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvcmVkaXJlY3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTxodG1sPjxoZWFkPjx0aXRsZT5FcHlkb2MgUmVkaXJlY3QgUGFnZTwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PSJjYWNoZS1jb250cm9sIiBjb250ZW50PSJuby1jYWNoZSIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9ImV4cGlyZXMiIGNvbnRlbnQ9IjAiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJwcmFnbWEiIGNvbnRlbnQ9Im5vLWNhY2hlIiAvPgotICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJlcHlkb2MuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci08IS0tCi12YXIgcGFnZXMgPSBbInJqc21pbi1tIl07Ci12YXIgZG90dGVkTmFtZSA9IGdldF9hbmNob3IoKTsKLWlmIChkb3R0ZWROYW1lKSB7Ci0gICAgdmFyIHRhcmdldCA9IHJlZGlyZWN0X3VybChkb3R0ZWROYW1lKTsKLSAgICBpZiAodGFyZ2V0KSB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh0YXJnZXQpOwotfQotLy8gLS0+Ci08L3NjcmlwdD4KLQotPGgzPkVweWRvYyBBdXRvLXJlZGlyZWN0IHBhZ2U8L2gzPgotCi08cD5XaGVuIGphdmFzY3JpcHQgaXMgZW5hYmxlZCwgdGhpcyBwYWdlIHdpbGwgcmVkaXJlY3QgVVJMcyBvZgotdGhlIGZvcm0gPHR0PnJlZGlyZWN0Lmh0bWwjPGk+ZG90dGVkLm5hbWU8L2k+PC90dD4gdG8gdGhlCi1kb2N1bWVudGF0aW9uIGZvciB0aGUgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGZ1bGx5LXF1YWxpZmllZAotZG90dGVkIG5hbWUuPC9wPgotPHA+PGEgaWQ9Im1lc3NhZ2UiPiAmbmJzcDsgPC9hPjwvcD4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotPCEtLQotaWYgKGRvdHRlZE5hbWUpIHsKLSAgICB2YXIgbXNnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lc3NhZ2UiKTsKLSAgICBtc2cuaW5uZXJIVE1MID0gIk5vIGRvY3VtZW50YXRpb24gZm91bmQgZm9yIDx0dD4iKwotICAgICAgICAgICAgICAgICAgICBkb3R0ZWROYW1lKyI8L3R0PiI7Ci19Ci0vLyAtLT4KLTwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL2FwaWRvYy9yanNtaW4tbW9kdWxlLmh0bWwgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9kb2NzL2FwaWRvYy9yanNtaW4tbW9kdWxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MWI2ZGEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvcmpzbWluLW1vZHVsZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9ImFzY2lpIj8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAgICJEVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci0gIDx0aXRsZT5yanNtaW48L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImVweWRvYy5jc3MiIHR5cGU9InRleHQvY3NzIiAvPgotICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJlcHlkb2MuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9ImJsdWUiIHZsaW5rPSIjMjA0MDgwIgotICAgICAgYWxpbms9IiMyMDQwODAiPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PSBOQVZJR0FUSU9OIEJBUiA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YWJsZSBjbGFzcz0ibmF2YmFyIiBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIKLSAgICAgICBiZ2NvbG9yPSIjYTBjMGZmIiBjZWxsc3BhY2luZz0iMCI+Ci0gIDx0ciB2YWxpZ249Im1pZGRsZSI+Ci0gIDwhLS0gSG9tZSBsaW5rIC0tPgotICAgICAgPHRoIGJnY29sb3I9IiM3MGIwZjAiIGNsYXNzPSJuYXZiYXItc2VsZWN0IgotICAgICAgICAgID4mbmJzcDsmbmJzcDsmbmJzcDtIb21lJm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFRyZWUgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJtb2R1bGUtdHJlZS5odG1sIj5UcmVlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSW5kZXggbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJpZGVudGlmaWVyLWluZGV4Lmh0bWwiPkluZGljZXM8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEhlbHAgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJoZWxwLmh0bWwiPkhlbHA8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFByb2plY3QgaG9tZXBhZ2UgLS0+Ci0gICAgICA8dGggY2xhc3M9Im5hdmJhciIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMTAwJSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgICAgPHRyPjx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgPjxhIGhyZWY9Imh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yanNtaW4vIiB0YXJnZXQ9Il90b3AiPlZpc2l0IHJqc21pbiBPbmxpbmU8L2E+PC90aD4KLSAgICAgICAgICA8L3RyPjwvdGFibGU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci08dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gIDx0ciB2YWxpZ249InRvcCI+Ci0gICAgPHRkIHdpZHRoPSIxMDAlIj4KLSAgICAgIDxzcGFuIGNsYXNzPSJicmVhZGNydW1icyI+Ci0gICAgICAgIE1vZHVsZSZuYnNwO3Jqc21pbgotICAgICAgPC9zcGFuPgotICAgIDwvdGQ+Ci0gICAgPHRkPgotICAgICAgPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgIDwhLS0gaGlkZS9zaG93IHByaXZhdGUgLS0+Ci0gICAgICA8L3RhYmxlPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci08L3RhYmxlPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PSBNT0RVTEUgREVTQ1JJUFRJT04gPT09PT09PT09PT09PT09PT09PT0gLS0+Ci08aDEgY2xhc3M9ImVweWRvYyI+TW9kdWxlIHJqc21pbjwvaDE+PHAgY2xhc3M9Im5vbWFyZ2luLXRvcCI+PHNwYW4gY2xhc3M9ImNvZGVsaW5rIj48YSBocmVmPSJyanNtaW4tcHlzcmMuaHRtbCI+c291cmNlJm5ic3A7Y29kZTwvYT48L3NwYW4+PC9wPgotPHA+ckpTbWluIGlzIGEgamF2YXNjcmlwdCBtaW5pZmllciB3cml0dGVuIGluIHB5dGhvbi48L3A+Ci08cD5UaGUgbWluaWZpZXIgaXMgYmFzZWQgb24gdGhlIHNlbWFudGljcyBvZiA8YSBjbGFzcz0icnN0LXJlZmVyZW5jZSBleHRlcm5hbCIgaHJlZj0iaHR0cDovL3d3dy5jcm9ja2ZvcmQuY29tL2phdmFzY3JpcHQvanNtaW4uYyIgdGFyZ2V0PSJfdG9wIj5qc21pbi5jIGJ5IERvdWdsYXMgQ3JvY2tmb3JkPC9hPi48L3A+Ci08cD5UaGUgbW9kdWxlIGlzIGEgcmUtaW1wbGVtZW50YXRpb24gYWltaW5nIGZvciBzcGVlZCwgc28gaXQgY2FuIGJlIHVzZWQgYXQKLXJ1bnRpbWUgKHJhdGhlciB0aGFuIGR1cmluZyBhIHByZXByb2Nlc3Npbmcgc3RlcCkuIFVzdWFsbHkgaXQgcHJvZHVjZXMgdGhlCi1zYW1lIHJlc3VsdHMgYXMgdGhlIG9yaWdpbmFsIDx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPmpzbWluLmM8L3R0Pi4gSXQgZGlmZmVycyBpbiB0aGUgZm9sbG93aW5nIHdheXM6PC9wPgotPHVsIGNsYXNzPSJyc3Qtc2ltcGxlIj4KLTxsaT50aGVyZSBpcyBubyBlcnJvciBkZXRlY3Rpb246IHVudGVybWluYXRlZCBzdHJpbmcsIHJlZ2V4IGFuZCBjb21tZW50Ci1saXRlcmFscyBhcmUgdHJlYXRlZCBhcyByZWd1bGFyIGphdmFzY3JpcHQgY29kZSBhbmQgbWluaWZpZWQgYXMgc3VjaC48L2xpPgotPGxpPkNvbnRyb2wgY2hhcmFjdGVycyBpbnNpZGUgc3RyaW5nIGFuZCByZWdleCBsaXRlcmFscyBhcmUgbGVmdCB1bnRvdWNoZWQ7IHRoZXkKLWFyZSBub3QgY29udmVydGVkIHRvIHNwYWNlcyAobm9yIHRvIG4pPC9saT4KLTxsaT5OZXdsaW5lIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkIGluc2lkZSBzdHJpbmcgYW5kIHJlZ2V4IGxpdGVyYWxzLCBleGNlcHQKLWZvciBsaW5lIGNvbnRpbnVhdGlvbnMgaW4gc3RyaW5nIGxpdGVyYWxzIChFQ01BLTUpLjwvbGk+Ci08bGk+JnF1b3Q7cmV0dXJuIC9yZWdleC8mcXVvdDsgaXMgcmVjb2duaXplZCBjb3JyZWN0bHkuPC9saT4KLTxsaT5MaW5lIHRlcm1pbmF0b3JzIGFmdGVyIHJlZ2V4IGxpdGVyYWxzIGFyZSBoYW5kbGVkIG1vcmUgc2Vuc2libHk8L2xpPgotPGxpPiZxdW90OysgKyZxdW90OyBhbmQgJnF1b3Q7LSAtJnF1b3Q7IHNlcXVlbmNlcyBhcmUgbm90IGNvbGxhcHNlZCB0byAnKysnIG9yICctLSc8L2xpPgotPGxpPk5ld2xpbmVzIGJlZm9yZSAhIG9wZXJhdG9ycyBhcmUgcmVtb3ZlZCBtb3JlIHNlbnNpYmx5PC9saT4KLTxsaT5Db21tZW50cyBzdGFydGluZyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmsgKDx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPiE8L3R0PikgY2FuIGJlIGtlcHQgb3B0aW9uYWxseTwvbGk+Ci08bGk+ckpTbWluIGRvZXMgbm90IGhhbmRsZSBzdHJlYW1zLCBidXQgb25seSBjb21wbGV0ZSBzdHJpbmdzLiAoSG93ZXZlciwgdGhlCi1tb2R1bGUgcHJvdmlkZXMgYSAmcXVvdDtzdHJlYW15JnF1b3Q7IGludGVyZmFjZSkuPC9saT4KLTwvdWw+Ci08cD5TaW5jZSBtb3N0IHBhcnRzIG9mIHRoZSBsb2dpYyBhcmUgaGFuZGxlZCBieSB0aGUgcmVnZXggZW5naW5lIGl0J3Mgd2F5IGZhc3RlcgotdGhhbiB0aGUgb3JpZ2luYWwgcHl0aG9uIHBvcnQgb2YgPHR0IGNsYXNzPSJyc3QtZG9jdXRpbHMgbGl0ZXJhbCI+anNtaW4uYzwvdHQ+IGJ5IEJhcnVjaCBFdmVuLiBUaGUgc3BlZWQgZmFjdG9yCi12YXJpZXMgYmV0d2VlbiBhYm91dCA2IGFuZCA1NSBkZXBlbmRpbmcgb24gaW5wdXQgYW5kIHB5dGhvbiB2ZXJzaW9uIChpdCBnZXRzCi1mYXN0ZXIgdGhlIG1vcmUgY29tcHJlc3NlZCB0aGUgaW5wdXQgYWxyZWFkeSBpcykuIENvbXBhcmVkIHRvIHRoZQotc3BlZWQtcmVmYWN0b3JlZCBweXRob24gcG9ydCBieSBEYXZlIFN0Lkdlcm1haW4gdGhlIHBlcmZvcm1hbmNlIGdhaW4gaXMgbGVzcwotZHJhbWF0aWMgYnV0IHN0aWxsIGJldHdlZW4gMyBhbmQgNTAgKGZvciBodWdlIGlucHV0cykuIFNlZSB0aGUgZG9jcy9CRU5DSE1BUktTCi1maWxlIGZvciBkZXRhaWxzLjwvcD4KLTxwPnJqc21pbi5jIGlzIGEgcmVpbXBsZW1lbnRhdGlvbiBvZiByanNtaW4ucHkgaW4gQyBhbmQgc3BlZWRzIGl0IHVwIGV2ZW4gbW9yZS48L3A+Ci08cD5Cb3RoIHB5dGhvbiAyIGFuZCBweXRob24gMyBhcmUgc3VwcG9ydGVkLjwvcD4KLQotPGhyIC8+Ci08ZGl2IGNsYXNzPSJmaWVsZHMiPiAgICAgIDxwPjxzdHJvbmc+Q29weXJpZ2h0Ojwvc3Ryb25nPgotICAgICAgICBDb3B5cmlnaHQgMjAxMSAtIDIwMTUKLUFuZHImIzIzMzsgTWFsbyBvciBoaXMgbGljZW5zb3JzLCBhcyBhcHBsaWNhYmxlCi0gICAgICA8L3A+Ci0gICAgICA8cD48c3Ryb25nPkxpY2Vuc2U6PC9zdHJvbmc+Ci0gICAgICAgIDxwPkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAmcXVvdDtMaWNlbnNlJnF1b3Q7KTsKLXlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLVlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDwvcD4KLTxibG9ja3F1b3RlPgotPGEgY2xhc3M9InJzdC1yZWZlcmVuY2UgZXh0ZXJuYWwiIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+PC9ibG9ja3F1b3RlPgotPHA+VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsCi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLVNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLWxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLjwvcD4KLSAgICAgIDwvcD4KLSAgICAgIDxwPjxzdHJvbmc+VmVyc2lvbjo8L3N0cm9uZz4KLSAgICAgICAgMS4wLjEyCi0gICAgICA8L3A+Ci0gICAgICA8cD48c3Ryb25nPkF1dGhvcjo8L3N0cm9uZz4KLSAgICAgICAgQW5kciYjMjMzOyBNYWxvCi0gICAgICA8L3A+Ci08L2Rpdj48IS0tID09PT09PT09PT09PT09PT09PT09IEZVTkNUSU9OUyA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTxhIG5hbWU9InNlY3Rpb24tRnVuY3Rpb25zIj48L2E+Ci08dGFibGUgY2xhc3M9InN1bW1hcnkiIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjMiCi0gICAgICAgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSJ3aGl0ZSI+Ci08dHIgYmdjb2xvcj0iIzcwYjBmMCIgY2xhc3M9InRhYmxlLWhlYWRlciI+Ci0gIDx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMiIgY2xhc3M9InRhYmxlLWhlYWRlciI+Ci0gICAgPHNwYW4gY2xhc3M9InRhYmxlLWhlYWRlciI+RnVuY3Rpb25zPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotICAgIDx0ZCB3aWR0aD0iMTUlIiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIiBjbGFzcz0ic3VtbWFyeSI+Ci0gICAgICA8c3BhbiBjbGFzcz0ic3VtbWFyeS10eXBlIj48dHQgY2xhc3M9InJzdC1kb2N1dGlscyBsaXRlcmFsIj5zdHI8L3R0Pjwvc3Bhbj4KLSAgICA8L3RkPjx0ZCBjbGFzcz0ic3VtbWFyeSI+Ci0gICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZD48c3BhbiBjbGFzcz0ic3VtbWFyeS1zaWciPjxhIGhyZWY9InJqc21pbi1tb2R1bGUuaHRtbCNqc21pbiIgY2xhc3M9InN1bW1hcnktc2lnLW5hbWUiPmpzbWluPC9hPig8c3BhbiBjbGFzcz0ic3VtbWFyeS1zaWctYXJnIj5zY3JpcHQ8L3NwYW4+LAotICAgICAgICA8c3BhbiBjbGFzcz0ic3VtbWFyeS1zaWctYXJnIj5rZWVwX2JhbmdfY29tbWVudHM8L3NwYW4+PTxzcGFuIGNsYXNzPSJzdW1tYXJ5LXNpZy1kZWZhdWx0Ij5GYWxzZTwvc3Bhbj4pPC9zcGFuPjxiciAvPgotICAgICAgTWluaWZ5IGphdmFzY3JpcHQgYmFzZWQgb24gPGEgY2xhc3M9InJzdC1yZWZlcmVuY2UgZXh0ZXJuYWwiIGhyZWY9Imh0dHA6Ly93d3cuY3JvY2tmb3JkLmNvbS9qYXZhc2NyaXB0L2pzbWluLmMiIHRhcmdldD0iX3RvcCI+anNtaW4uYyBieSBEb3VnbGFzIENyb2NrZm9yZDwvYT4uPC90ZD4KLSAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29kZWxpbmsiPjxhIGhyZWY9InJqc21pbi1weXNyYy5odG1sI2pzbWluIj5zb3VyY2UmbmJzcDtjb2RlPC9hPjwvc3Bhbj4KLSAgICAgICAgICAgIAotICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgCi0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08IS0tID09PT09PT09PT09PT09PT09PT09IEZVTkNUSU9OIERFVEFJTFMgPT09PT09PT09PT09PT09PT09PT0gLS0+Ci08YSBuYW1lPSJzZWN0aW9uLUZ1bmN0aW9uRGV0YWlscyI+PC9hPgotPHRhYmxlIGNsYXNzPSJkZXRhaWxzIiBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIzIgotICAgICAgIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0id2hpdGUiPgotPHRyIGJnY29sb3I9IiM3MGIwZjAiIGNsYXNzPSJ0YWJsZS1oZWFkZXIiPgotICA8dGQgYWxpZ249ImxlZnQiIGNvbHNwYW49IjIiIGNsYXNzPSJ0YWJsZS1oZWFkZXIiPgotICAgIDxzcGFuIGNsYXNzPSJ0YWJsZS1oZWFkZXIiPkZ1bmN0aW9uIERldGFpbHM8L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPGEgbmFtZT0ianNtaW4iPjwvYT4KLTxkaXY+Ci08dGFibGUgY2xhc3M9ImRldGFpbHMiIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjMiCi0gICAgICAgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSJ3aGl0ZSI+Ci08dHI+PHRkPgotICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIj4KLSAgPHRyIHZhbGlnbj0idG9wIj48dGQ+Ci0gIDxoMyBjbGFzcz0iZXB5ZG9jIj48c3BhbiBjbGFzcz0ic2lnIj48c3BhbiBjbGFzcz0ic2lnLW5hbWUiPmpzbWluPC9zcGFuPig8c3BhbiBjbGFzcz0ic2lnLWFyZyI+c2NyaXB0PC9zcGFuPiwKLSAgICAgICAgPHNwYW4gY2xhc3M9InNpZy1hcmciPmtlZXBfYmFuZ19jb21tZW50czwvc3Bhbj49PHNwYW4gY2xhc3M9InNpZy1kZWZhdWx0Ij5GYWxzZTwvc3Bhbj4pPC9zcGFuPgotICA8L2gzPgotICA8L3RkPjx0ZCBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIgotICAgID48c3BhbiBjbGFzcz0iY29kZWxpbmsiPjxhIGhyZWY9InJqc21pbi1weXNyYy5odG1sI2pzbWluIj5zb3VyY2UmbmJzcDtjb2RlPC9hPjwvc3Bhbj4mbmJzcDsKLSAgICA8L3RkPgotICA8L3RyPjwvdGFibGU+Ci0gIAotICA8cD5NaW5pZnkgamF2YXNjcmlwdCBiYXNlZCBvbiA8YSBjbGFzcz0icnN0LXJlZmVyZW5jZSBleHRlcm5hbCIgaHJlZj0iaHR0cDovL3d3dy5jcm9ja2ZvcmQuY29tL2phdmFzY3JpcHQvanNtaW4uYyIgdGFyZ2V0PSJfdG9wIj5qc21pbi5jIGJ5IERvdWdsYXMgQ3JvY2tmb3JkPC9hPi48L3A+Ci08cD5JbnN0ZWFkIG9mIHBhcnNpbmcgdGhlIHN0cmVhbSBjaGFyIGJ5IGNoYXIsIGl0IHVzZXMgYSByZWd1bGFyCi1leHByZXNzaW9uIGFwcHJvYWNoIHdoaWNoIG1pbmlmaWVzIHRoZSB3aG9sZSBzY3JpcHQgd2l0aCBvbmUgYmlnCi1zdWJzdGl0dXRpb24gcmVnZXguPC9wPgotICA8ZGwgY2xhc3M9ImZpZWxkcyI+Ci0gICAgPGR0PlBhcmFtZXRlcnM6PC9kdD4KLSAgICA8ZGQ+PHVsIGNsYXNzPSJub21hcmdpbi10b3AiPgotICAgICAgICA8bGk+PHN0cm9uZyBjbGFzcz0icG5hbWUiPjxjb2RlPnNjcmlwdDwvY29kZT48L3N0cm9uZz4gKDx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPnN0cjwvdHQ+KSAtIFNjcmlwdCB0byBtaW5pZnk8L2xpPgotICAgICAgICA8bGk+PHN0cm9uZyBjbGFzcz0icG5hbWUiPjxjb2RlPmtlZXBfYmFuZ19jb21tZW50czwvY29kZT48L3N0cm9uZz4gKDx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPmJvb2w8L3R0PikgLSBLZWVwIGNvbW1lbnRzIHN0YXJ0aW5nIHdpdGggYW4gZXhjbGFtYXRpb24gbWFyaz8gKDx0dCBjbGFzcz0icnN0LWRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPi8qIS4uLiovPC9zcGFuPjwvdHQ+KTwvbGk+Ci0gICAgPC91bD48L2RkPgotICAgIDxkdD5SZXR1cm5zOiA8dHQgY2xhc3M9InJzdC1kb2N1dGlscyBsaXRlcmFsIj5zdHI8L3R0PjwvZHQ+Ci0gICAgICAgIDxkZD5NaW5pZmllZCBzY3JpcHQ8L2RkPgotICA8L2RsPgotPC90ZD48L3RyPjwvdGFibGU+Ci08L2Rpdj4KLTxiciAvPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PSBOQVZJR0FUSU9OIEJBUiA9PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YWJsZSBjbGFzcz0ibmF2YmFyIiBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIKLSAgICAgICBiZ2NvbG9yPSIjYTBjMGZmIiBjZWxsc3BhY2luZz0iMCI+Ci0gIDx0ciB2YWxpZ249Im1pZGRsZSI+Ci0gIDwhLS0gSG9tZSBsaW5rIC0tPgotICAgICAgPHRoIGJnY29sb3I9IiM3MGIwZjAiIGNsYXNzPSJuYXZiYXItc2VsZWN0IgotICAgICAgICAgID4mbmJzcDsmbmJzcDsmbmJzcDtIb21lJm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFRyZWUgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJtb2R1bGUtdHJlZS5odG1sIj5UcmVlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSW5kZXggbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJpZGVudGlmaWVyLWluZGV4Lmh0bWwiPkluZGljZXM8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIEhlbHAgbGluayAtLT4KLSAgICAgIDx0aD4mbmJzcDsmbmJzcDsmbmJzcDs8YQotICAgICAgICBocmVmPSJoZWxwLmh0bWwiPkhlbHA8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90aD4KLQotICA8IS0tIFByb2plY3QgaG9tZXBhZ2UgLS0+Ci0gICAgICA8dGggY2xhc3M9Im5hdmJhciIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMTAwJSI+Ci0gICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgICAgPHRyPjx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgPjxhIGhyZWY9Imh0dHA6Ly9vcGVuc291cmNlLnBlcmxpZy5kZS9yanNtaW4vIiB0YXJnZXQ9Il90b3AiPlZpc2l0IHJqc21pbiBPbmxpbmU8L2E+PC90aD4KLSAgICAgICAgICA8L3RyPjwvdGFibGU+PC90aD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgPCEtLQotICAvLyBQcml2YXRlIG9iamVjdHMgYXJlIGluaXRpYWxseSBkaXNwbGF5ZWQgKGJlY2F1c2UgaWYKLSAgLy8gamF2YXNjcmlwdCBpcyB0dXJuZWQgb2ZmIHRoZW4gd2Ugd2FudCB0aGVtIHRvIGJlCi0gIC8vIHZpc2libGUpOyBidXQgYnkgZGVmYXVsdCwgd2Ugd2FudCB0byBoaWRlIHRoZW0uICBTbyBoaWRlCi0gIC8vIHRoZW0gdW5sZXNzIHdlIGhhdmUgYSBjb29raWUgdGhhdCBzYXlzIHRvIHNob3cgdGhlbS4KLSAgY2hlY2tDb29raWUoKTsKLSAgLy8gLS0+Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL2RvY3MvYXBpZG9jL3Jqc21pbi1weXNyYy5odG1sIGIvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvcmpzbWluLXB5c3JjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZjBhYWEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vZG9jcy9hcGlkb2MvcmpzbWluLXB5c3JjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iYXNjaWkiPz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgICAgICAgIkRURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLSAgPHRpdGxlPnJqc21pbjwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZXB5ZG9jLmNzcyIgdHlwZT0idGV4dC9jc3MiIC8+Ci0gIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImVweWRvYy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iYmx1ZSIgdmxpbms9IiMyMDQwODAiCi0gICAgICBhbGluaz0iIzIwNDA4MCI+Ci08IS0tID09PT09PT09PT09PT09PT09PT09IE5BVklHQVRJT04gQkFSID09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhYmxlIGNsYXNzPSJuYXZiYXIiIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIgotICAgICAgIGJnY29sb3I9IiNhMGMwZmYiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0ibWlkZGxlIj4KLSAgPCEtLSBIb21lIGxpbmsgLS0+Ci0gICAgICA8dGggYmdjb2xvcj0iIzcwYjBmMCIgY2xhc3M9Im5hdmJhci1zZWxlY3QiCi0gICAgICAgICAgPiZuYnNwOyZuYnNwOyZuYnNwO0hvbWUmbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gVHJlZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9Im1vZHVsZS10cmVlLmh0bWwiPlRyZWVzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBJbmRleCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImlkZW50aWZpZXItaW5kZXguaHRtbCI+SW5kaWNlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSGVscCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImhlbHAuaHRtbCI+SGVscDwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gUHJvamVjdCBob21lcGFnZSAtLT4KLSAgICAgIDx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0icmlnaHQiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgICA8dHI+PHRoIGNsYXNzPSJuYXZiYXIiIGFsaWduPSJjZW50ZXIiCi0gICAgICAgICAgICA+PGEgaHJlZj0iaHR0cDovL29wZW5zb3VyY2UucGVybGlnLmRlL3Jqc21pbi8iIHRhcmdldD0iX3RvcCI+VmlzaXQgcmpzbWluIE9ubGluZTwvYT48L3RoPgotICAgICAgICAgIDwvdHI+PC90YWJsZT48L3RoPgotICA8L3RyPgotPC90YWJsZT4KLTx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0idG9wIj4KLSAgICA8dGQgd2lkdGg9IjEwMCUiPgotICAgICAgPHNwYW4gY2xhc3M9ImJyZWFkY3J1bWJzIj4KLSAgICAgICAgTW9kdWxlJm5ic3A7cmpzbWluCi0gICAgICA8L3NwYW4+Ci0gICAgPC90ZD4KLSAgICA8dGQ+Ci0gICAgICA8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgPCEtLSBoaWRlL3Nob3cgcHJpdmF0ZSAtLT4KLSAgICAgIDwvdGFibGU+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci08aDEgY2xhc3M9ImVweWRvYyI+U291cmNlIENvZGUgZm9yIDxhIGhyZWY9InJqc21pbi1tb2R1bGUuaHRtbCI+TW9kdWxlIHJqc21pbjwvYT48L2gxPgotPHByZSBjbGFzcz0icHktc3JjIj4KLTxhIG5hbWU9IkwxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAgMTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktY29tbWVudCI+IyEvdXNyL2Jpbi9lbnYgcHl0aG9uPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAgMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktY29tbWVudCI+IyAtKi0gY29kaW5nOiBhc2NpaSAtKi08L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+ICAzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPnIiIiI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+ICA0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPj09PT09PT09PT09PT09PT09PT09PTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gIDU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IEphdmFzY3JpcHQgTWluaWZpZXI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+ICA2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPj09PT09PT09PT09PT09PT09PT09PTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gIDc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAgODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj5ySlNtaW4gaXMgYSBqYXZhc2NyaXB0IG1pbmlmaWVyIHdyaXR0ZW4gaW4gcHl0aG9uLjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gIDk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMTA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+VGhlIG1pbmlmaWVyIGlzIGJhc2VkIG9uIHRoZSBzZW1hbnRpY3Mgb2YgYGpzbWluLmMgYnkgRG91Z2xhcyBDcm9ja2ZvcmRgX1xcLjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDExPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDEyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjpDb3B5cmlnaHQ6PC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMTM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMTQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IENvcHlyaWdodCAyMDExIC0gMjAxNTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDE1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiBBbmRyXHhlOSBNYWxvIG9yIGhpcyBsaWNlbnNvcnMsIGFzIGFwcGxpY2FibGU8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAxNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAxNzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj46TGljZW5zZTo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAxODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAxOTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMjA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAyMTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMjI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMjM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAyNDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAyNTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDI2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDI3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAyODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDI5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAzMDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAzMTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj5UaGUgbW9kdWxlIGlzIGEgcmUtaW1wbGVtZW50YXRpb24gYWltaW5nIGZvciBzcGVlZCwgc28gaXQgY2FuIGJlIHVzZWQgYXQ8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiAzMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj5ydW50aW1lIChyYXRoZXIgdGhhbiBkdXJpbmcgYSBwcmVwcm9jZXNzaW5nIHN0ZXApLiBVc3VhbGx5IGl0IHByb2R1Y2VzIHRoZTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDMzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPnNhbWUgcmVzdWx0cyBhcyB0aGUgb3JpZ2luYWwgYGBqc21pbi5jYGAuIEl0IGRpZmZlcnMgaW4gdGhlIGZvbGxvd2luZyB3YXlzOjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDM0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDM1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPi0gdGhlcmUgaXMgbm8gZXJyb3IgZGV0ZWN0aW9uOiB1bnRlcm1pbmF0ZWQgc3RyaW5nLCByZWdleCBhbmQgY29tbWVudDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDM2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgbGl0ZXJhbHMgYXJlIHRyZWF0ZWQgYXMgcmVndWxhciBqYXZhc2NyaXB0IGNvZGUgYW5kIG1pbmlmaWVkIGFzIHN1Y2guPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMzc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+LSBDb250cm9sIGNoYXJhY3RlcnMgaW5zaWRlIHN0cmluZyBhbmQgcmVnZXggbGl0ZXJhbHMgYXJlIGxlZnQgdW50b3VjaGVkOyB0aGV5PC90dD4gPC90dD4KLTxhIG5hbWU9IkwzOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMzg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICBhcmUgbm90IGNvbnZlcnRlZCB0byBzcGFjZXMgKG5vciB0byBcXG4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gMzk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+LSBOZXdsaW5lIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkIGluc2lkZSBzdHJpbmcgYW5kIHJlZ2V4IGxpdGVyYWxzLCBleGNlcHQ8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA0MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gIGZvciBsaW5lIGNvbnRpbnVhdGlvbnMgaW4gc3RyaW5nIGxpdGVyYWxzIChFQ01BLTUpLjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDQxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPi0gInJldHVybiAvcmVnZXgvIiBpcyByZWNvZ25pemVkIGNvcnJlY3RseS48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA0MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4tIExpbmUgdGVybWluYXRvcnMgYWZ0ZXIgcmVnZXggbGl0ZXJhbHMgYXJlIGhhbmRsZWQgbW9yZSBzZW5zaWJseTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDQzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPi0gIisgKyIgYW5kICItIC0iIHNlcXVlbmNlcyBhcmUgbm90IGNvbGxhcHNlZCB0byAnKysnIG9yICctLSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA0NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4tIE5ld2xpbmVzIGJlZm9yZSAhIG9wZXJhdG9ycyBhcmUgcmVtb3ZlZCBtb3JlIHNlbnNpYmx5PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNDU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+LSBDb21tZW50cyBzdGFydGluZyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmsgKGBgIWBgKSBjYW4gYmUga2VwdCBvcHRpb25hbGx5PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNDY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+LSBySlNtaW4gZG9lcyBub3QgaGFuZGxlIHN0cmVhbXMsIGJ1dCBvbmx5IGNvbXBsZXRlIHN0cmluZ3MuIChIb3dldmVyLCB0aGU8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA0NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gIG1vZHVsZSBwcm92aWRlcyBhICJzdHJlYW15IiBpbnRlcmZhY2UpLjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDQ4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDQ5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPlNpbmNlIG1vc3QgcGFydHMgb2YgdGhlIGxvZ2ljIGFyZSBoYW5kbGVkIGJ5IHRoZSByZWdleCBlbmdpbmUgaXQncyB3YXkgZmFzdGVyPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNTA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+dGhhbiB0aGUgb3JpZ2luYWwgcHl0aG9uIHBvcnQgb2YgYGBqc21pbi5jYGAgYnkgQmFydWNoIEV2ZW4uIFRoZSBzcGVlZCBmYWN0b3I8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDUxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA1MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj52YXJpZXMgYmV0d2VlbiBhYm91dCA2IGFuZCA1NSBkZXBlbmRpbmcgb24gaW5wdXQgYW5kIHB5dGhvbiB2ZXJzaW9uIChpdCBnZXRzPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1MiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNTI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ZmFzdGVyIHRoZSBtb3JlIGNvbXByZXNzZWQgdGhlIGlucHV0IGFscmVhZHkgaXMpLiBDb21wYXJlZCB0byB0aGU8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDUzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA1MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj5zcGVlZC1yZWZhY3RvcmVkIHB5dGhvbiBwb3J0IGJ5IERhdmUgU3QuR2VybWFpbiB0aGUgcGVyZm9ybWFuY2UgZ2FpbiBpcyBsZXNzPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1NCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNTQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ZHJhbWF0aWMgYnV0IHN0aWxsIGJldHdlZW4gMyBhbmQgNTAgKGZvciBodWdlIGlucHV0cykuIFNlZSB0aGUgZG9jcy9CRU5DSE1BUktTPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNTU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ZmlsZSBmb3IgZGV0YWlscy48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDU2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA1NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDU3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA1NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj5yanNtaW4uYyBpcyBhIHJlaW1wbGVtZW50YXRpb24gb2YgcmpzbWluLnB5IGluIEMgYW5kIHNwZWVkcyBpdCB1cCBldmVuIG1vcmUuPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNTg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNTk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+Qm90aCBweXRob24gMiBhbmQgcHl0aG9uIDMgYXJlIHN1cHBvcnRlZC48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDYwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA2MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDYxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA2MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4uLiBfanNtaW4uYyBieSBEb3VnbGFzIENyb2NrZm9yZDo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDYyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA2MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICBodHRwOi8vd3d3LmNyb2NrZm9yZC5jb20vamF2YXNjcmlwdC9qc21pbi5jPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw2MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNjM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IiIiPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw2NCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNjQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGlkPSJsaW5rLTAiIGNsYXNzPSJweS1uYW1lIiB0YXJnZXRzPSJWYXJpYWJsZSByanNtaW4uX19kb2NfXz1yanNtaW4tbW9kdWxlLmh0bWwjX19kb2NfXyI+PGEgdGl0bGU9InJqc21pbi5fX2RvY19fIiBjbGFzcz0icHktbmFtZSIgaHJlZj0iIyIgb25jbGljaz0icmV0dXJuIGRvY2xpbmsoJ2xpbmstMCcsICdfX2RvY19fJywgJ2xpbmstMCcpOyI+X19kb2NfXzwvYT48L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDY1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA2NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgcHlsaW50OiBkaXNhYmxlID0gcmVkZWZpbmVkLWJ1aWx0aW48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDY2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA2NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgaWQ9ImxpbmstMSIgY2xhc3M9InB5LW5hbWUiPjxhIHRpdGxlPSJyanNtaW4uX19kb2NfXyIgY2xhc3M9InB5LW5hbWUiIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBkb2NsaW5rKCdsaW5rLTEnLCAnX19kb2NfXycsICdsaW5rLTAnKTsiPl9fZG9jX188L2E+PC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBpZD0ibGluay0yIiBjbGFzcz0icHktbmFtZSI+PGEgdGl0bGU9InJqc21pbi5fX2RvY19fIiBjbGFzcz0icHktbmFtZSIgaHJlZj0iIyIgb25jbGljaz0icmV0dXJuIGRvY2xpbmsoJ2xpbmstMicsICdfX2RvY19fJywgJ2xpbmstMCcpOyI+X19kb2NfXzwvYT48L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+ZW5jb2RlPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXN0cmluZyI+J2FzY2lpJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5kZWNvZGU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktc3RyaW5nIj4ndW5pY29kZV9lc2NhcGUnPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw2NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNjc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LW5hbWUiPl9fYXV0aG9yX188L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPnIiQW5kclx4ZTkgTWFsbyI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+ZW5jb2RlPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXN0cmluZyI+J2FzY2lpJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5kZWNvZGU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktc3RyaW5nIj4ndW5pY29kZV9lc2NhcGUnPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw2OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNjg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LW5hbWUiPl9fZG9jZm9ybWF0X188L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPiJyZXN0cnVjdHVyZWR0ZXh0IGVuIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNjkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDY5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGlkPSJsaW5rLTMiIGNsYXNzPSJweS1uYW1lIiB0YXJnZXRzPSJWYXJpYWJsZSByanNtaW4uX19saWNlbnNlX189cmpzbWluLW1vZHVsZS5odG1sI19fbGljZW5zZV9fIj48YSB0aXRsZT0icmpzbWluLl9fbGljZW5zZV9fIiBjbGFzcz0icHktbmFtZSIgaHJlZj0iIyIgb25jbGljaz0icmV0dXJuIGRvY2xpbmsoJ2xpbmstMycsICdfX2xpY2Vuc2VfXycsICdsaW5rLTMnKTsiPl9fbGljZW5zZV9fPC9hPjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+IkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDcwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA3MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktbmFtZSI+X192ZXJzaW9uX188L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicxLjAuMTInPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw3MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNzE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LW5hbWUiPl9fYWxsX188L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1zdHJpbmciPidqc21pbic8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8L3R0PgotPGEgbmFtZT0iTDcyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA3MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDczIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA3MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHkta2V5d29yZCI+aW1wb3J0PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5yZTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+YXM8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPl9yZTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNzQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDc0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMNzUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDc1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJfbWFrZV9qc21pbiI+PC9hPjxkaXYgaWQ9Il9tYWtlX2pzbWluLWRlZiI+PGEgbmFtZT0iTDc2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA3NjwvdHQ+IDxhIGNsYXNzPSJweS10b2dnbGUiIGhyZWY9IiMiIGlkPSJfbWFrZV9qc21pbi10b2dnbGUiIG9uY2xpY2s9InJldHVybiB0b2dnbGUoJ19tYWtlX2pzbWluJyk7Ij4tPC9hPjx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1rZXl3b3JkIj5kZWY8L3R0PiA8YSBjbGFzcz0icHktZGVmLW5hbWUiIGhyZWY9InJqc21pbi1tb2R1bGUuaHRtbCNfbWFrZV9qc21pbiI+X21ha2VfanNtaW48L2E+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1wYXJhbSI+cHl0aG9uX29ubHk8L3R0Pjx0dCBjbGFzcz0icHktb3AiPj08L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+RmFsc2U8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPC9kaXY+PGRpdiBpZD0iX21ha2VfanNtaW4tY29sbGFwc2VkIiBzdHlsZT0iZGlzcGxheTpub25lOyIgcGFkPSIrKysiIGluZGVudD0iKysrKyI+PC9kaXY+PGRpdiBpZD0iX21ha2VfanNtaW4tZXhwYW5kZWQiPjxhIG5hbWU9Ikw3NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNzc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiIiIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNzgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDc4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICBHZW5lcmF0ZSBKUyBtaW5pZmllciBiYXNlZCBvbiBganNtaW4uYyBieSBEb3VnbGFzIENyb2NrZm9yZGBfPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw3OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gNzk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw4MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gODA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgIC4uIF9qc21pbi5jIGJ5IERvdWdsYXMgQ3JvY2tmb3JkOjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMODEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDgxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgICBodHRwOi8vd3d3LmNyb2NrZm9yZC5jb20vamF2YXNjcmlwdC9qc21pbi5jPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw4MiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gODI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw4MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gODM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgIDpQYXJhbWV0ZXJzOjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMODQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDg0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgIGBweXRob25fb25seWAgOiBgYGJvb2xgYDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMODUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDg1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgICAgVXNlIG9ubHkgdGhlIHB5dGhvbiB2YXJpYW50LiBJZiB0cnVlLCB0aGUgYyBleHRlbnNpb24gaXMgbm90IGV2ZW48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDg2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA4NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICAgIHRyaWVkIHRvIGJlIGxvYWRlZC48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDg3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA4NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDg4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA4ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgOlJldHVybjogTWluaWZpZXI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDg5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA4OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgOlJ0eXBlOiBgYGNhbGxhYmxlYGA8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDkwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA5MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgIiIiPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw5MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gOTE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIHB5bGludDogZGlzYWJsZSA9IHVudXNlZC12YXJpYWJsZTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMOTIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDkyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyBweWxpbnQ6IGRpc2FibGUgPSB0b28tbWFueS1sb2NhbHM8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDkzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA5MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDk0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA5NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5ub3Q8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPnB5dGhvbl9vbmx5PC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw5NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gOTU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+dHJ5PC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw5NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4gOTY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmltcG9ydDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+X3Jqc21pbjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMOTciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDk3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmV4Y2VwdDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+SW1wb3J0RXJyb3I8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDk4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPiA5ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cGFzczwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMOTkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+IDk5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmVsc2U8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEwMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMDA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+X3Jqc21pbjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGlkPSJsaW5rLTQiIGNsYXNzPSJweS1uYW1lIiB0YXJnZXRzPSJGdW5jdGlvbiByanNtaW4uanNtaW4oKT1yanNtaW4tbW9kdWxlLmh0bWwjanNtaW4iPjxhIHRpdGxlPSJyanNtaW4uanNtaW4iIGNsYXNzPSJweS1uYW1lIiBocmVmPSIjIiBvbmNsaWNrPSJyZXR1cm4gZG9jbGluaygnbGluay00JywgJ2pzbWluJywgJ2xpbmstNCcpOyI+anNtaW48L2E+PC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMDEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTAxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+dHJ5PC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMDIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTAyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnhyYW5nZTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTAzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEwMzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmV4Y2VwdDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+TmFtZUVycm9yPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMDQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTA0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnhyYW5nZTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPnJhbmdlPC90dD4gIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyBweWxpbnQ6IGRpc2FibGUgPSByZWRlZmluZWQtYnVpbHRpbjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTA1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEwNTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDEwNiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMDY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5zcGFjZV9jaGFyczwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+cidbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTA3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEwNzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDEwOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMDg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5saW5lX2NvbW1lbnQ8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKD86Ly9bXlxyXG5dKiknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMDkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTA5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+c3BhY2VfY29tbWVudDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTEwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjExMDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX2NvbW1lbnRfbm9iYW5nPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/Oi9cKig/ISEpW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDExMSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMTE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5iYW5nX2NvbW1lbnQ8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKD86L1wqIVteKl0qXCorKD86W14vKl1bXipdKlwqKykqLyknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMTIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTEyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMTEzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjExMzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnN0cmluZzE8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gXCA8L3R0PgotPGEgbmFtZT0iTDExNCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMTQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/OlwwNDdbXlwwNDdcXFxyXG5dKig/OlxcKD86W15cclxuXXxccj9cbnxccilbXlwwNDdcXFxyXG5dKikqXDA0NyknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMTUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTE1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+c3RyaW5nMjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzoiW14iXFxcclxuXSooPzpcXCg/OlteXHJcbl18XHI/XG58XHIpW14iXFxcclxuXSopKiIpJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTE2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjExNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnN0cmluZ3M8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKD86JXN8JXMpJzwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiU8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnN0cmluZzE8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPnN0cmluZzI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDExNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMTc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwxMTgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTE4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Y2hhcmNsYXNzPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/OlxbW15cXFxdXHJcbl0qKD86XFxbXlxyXG5dW15cXFxdXHJcbl0qKSpcXSknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMTkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTE5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+bm9zcGVjaWFsPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1teL1xcXFtcclxuXSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEyMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMjA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5yZWdleDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzovKD8hW1xyXG4vKl0pJXMqKD86KD86XFxbXlxyXG5dfCVzKSVzKikqLyknPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+JTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPig8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEyMSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMjE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+bm9zcGVjaWFsPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5jaGFyY2xhc3M8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPm5vc3BlY2lhbDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTIyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEyMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMjMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTIzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+c3BhY2U8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKD86JXN8JXMpJzwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiU8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX2NoYXJzPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5zcGFjZV9jb21tZW50PC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMjQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTI0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+bmV3bGluZTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzolcz9bXHJcbl0pJzwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiU8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmxpbmVfY29tbWVudDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTI1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEyNTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDEyNiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMjY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5kZWY8L3R0PiA8dHQgY2xhc3M9InB5LWRlZi1uYW1lIj5maXhfY2hhcmNsYXNzPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXBhcmFtIj5yZXN1bHQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEyNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMjc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4iIiIgRml4dXAgc3RyaW5nIG9mIGNoYXJzIHRvIGZpdCBpbnRvIGEgcmVnZXggY2hhciBjbGFzcyAiIiI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEyOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMjg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+cG9zPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+cmVzdWx0PC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmZpbmQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktc3RyaW5nIj4nLSc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEyOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMjk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+aWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPnBvczwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiZndDs9PC90dD4gPHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEzMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMzA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnJlc3VsdDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+ciclcyVzLSc8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4lPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5yZXN1bHQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+cG9zPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5yZXN1bHQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+cG9zPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KzwvdHQ+IDx0dCBjbGFzcz0icHktbnVtYmVyIj4xPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMzEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTMxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMTMyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEzMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5kZWY8L3R0PiA8dHQgY2xhc3M9InB5LWRlZi1uYW1lIj5zZXF1ZW50aXplPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXBhcmFtIj5zdHJpbmc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEzMyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMzM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IiIiPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMzQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTM0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgICAgICAgIE5vdGF0ZSBjb25zZWN1dGl2ZSBjaGFyYWN0ZXJzIGFzIHNlcXVlbmNlPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMzUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTM1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTM2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjEzNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICAgICAgICAoMS00IGluc3RlYWQgb2YgMTIzNCk8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEzNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMzc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICAgICAgICAgIiIiPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxMzgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTM4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5maXJzdDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bGFzdDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+cmVzdWx0PC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Tm9uZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Tm9uZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8L3R0PgotPGEgbmFtZT0iTDEzOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xMzk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmZvcjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Y2hhcjwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+aW48L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPm1hcDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5vcmQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPnN0cmluZzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTQwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE0MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5sYXN0PC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pczwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Tm9uZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTQxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE0MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5maXJzdDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmxhc3Q8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5jaGFyPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNDIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTQyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+ZWxpZjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bGFzdDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPis8L3R0PiA8dHQgY2xhc3M9InB5LW51bWJlciI+MTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj09PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5jaGFyPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNDMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTQzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmxhc3Q8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5jaGFyPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNDQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTQ0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+ZWxzZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTQ1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE0NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5yZXN1bHQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+YXBwZW5kPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmZpcnN0PC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5sYXN0PC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNDYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTQ2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmZpcnN0PC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bGFzdDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmNoYXI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE0NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNDc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5sYXN0PC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pczwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+bm90PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5Ob25lPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNDgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTQ4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+cmVzdWx0PC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmFwcGVuZDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5maXJzdDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bGFzdDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTQ5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE0OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicnPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmpvaW48L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktc3RyaW5nIj4nJXMlcyVzJzwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiU8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4oPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNTAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTUwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Y2hyPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmZpcnN0PC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNTEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTUxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+bGFzdDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiZndDs8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmZpcnN0PC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KzwvdHQ+IDx0dCBjbGFzcz0icHktbnVtYmVyIj4xPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5hbmQ8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jy0nPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5vcjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTUyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE1MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmxhc3Q8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4hPTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Zmlyc3Q8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmFuZDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Y2hyPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmxhc3Q8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicnPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNTMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTUzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+Zm9yPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5maXJzdDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bGFzdDwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+aW48L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPnJlc3VsdDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+ICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgbm9xYTwvdHQ+IDwvdHQ+Ci08L2Rpdj48YSBuYW1lPSJMMTU0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE1NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDE1NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNTU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5fcmU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+c3ViPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNTYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTU2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKFtcMDAwLVwwNDBcMDQ3XSknPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyBcMDQ3IGZvciBiZXR0ZXIgcG9ydGFiaWxpdHk8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE1NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNTc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmxhbWJkYTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nXFwlMDNvJzwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiU8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPm9yZDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5tPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPig8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE1OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNTg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5zZXF1ZW50aXplPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnJlc3VsdDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTU5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE1OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnJlcGxhY2U8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktc3RyaW5nIj4nXFwnPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPidcXFxcJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTYwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE2MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnJlcGxhY2U8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktc3RyaW5nIj4nWyc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+J1xcWyc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE2MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNjE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5yZXBsYWNlPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXN0cmluZyI+J10nPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPidcXF0nPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNjIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTYyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTYzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE2MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08L2Rpdj48YSBuYW1lPSJMMTY0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE2NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDE2NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNjU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5kZWY8L3R0PiA8dHQgY2xhc3M9InB5LWRlZi1uYW1lIj5pZF9saXRlcmFsXzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1wYXJhbSI+d2hhdDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTY2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE2NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiIiIiBNYWtlIGlkX2xpdGVyYWwgbGlrZSBjaGFyIGNsYXNzICIiIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTY3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE2NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5tYXRjaDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPl9yZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5jb21waWxlPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPndoYXQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+bWF0Y2g8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE2OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNjg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+cmVzdWx0PC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5qb2luPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNjkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTY5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5jaHI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+YzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+Zm9yPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5jPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pbjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+eHJhbmdlPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTI3PC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pZjwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+bm90PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5tYXRjaDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5jaHI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+YzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTcwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE3MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTcxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE3MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5yZXR1cm48L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+J1teJXNdJzwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiU8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmZpeF9jaGFyY2xhc3M8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+cmVzdWx0PC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTwvZGl2PjxhIG5hbWU9IkwxNzIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTcyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMTczIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE3MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmRlZjwvdHQ+IDx0dCBjbGFzcz0icHktZGVmLW5hbWUiPm5vdF9pZF9saXRlcmFsXzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1wYXJhbSI+a2VlcDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTc0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE3NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiIiIiBNYWtlIG5lZ2F0ZWQgaWRfbGl0ZXJhbCBsaWtlIGNoYXIgY2xhc3MgIiIiPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNzUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTc1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPm1hdGNoPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+X3JlPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmNvbXBpbGU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+aWRfbGl0ZXJhbF88L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+a2VlcDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5tYXRjaDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTc2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE3NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5yZXN1bHQ8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicnPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmpvaW48L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE3NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xNzc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmNocjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5jPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5mb3I8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmM8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmluPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj54cmFuZ2U8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xMjc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5ub3Q8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPm1hdGNoPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmNocjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5jPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNzgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTc4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxNzkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTc5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1slc10nPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+JTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Zml4X2NoYXJjbGFzczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5yZXN1bHQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPC9kaXY+PGEgbmFtZT0iTDE4MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xODA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwxODEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTgxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+bm90X2lkX2xpdGVyYWw8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ub3RfaWRfbGl0ZXJhbF88L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1thLXpBLVowLTlfJF0nPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxODIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTgyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+cHJlcmVnZXgxPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1soLD06XFshJmFtcDt8P3t9O1xyXG5dJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTgzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE4MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnByZXJlZ2V4MjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+ciclKG5vdF9pZF9saXRlcmFsKXNyZXR1cm4nPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+JTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bG9jYWxzPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxODQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTg0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMTg1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE4NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmlkX2xpdGVyYWw8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5pZF9saXRlcmFsXzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1zdHJpbmciPnInW2EtekEtWjAtOV8kXSc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE4NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xODY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5pZF9saXRlcmFsX29wZW48L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5pZF9saXRlcmFsXzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1zdHJpbmciPnInW2EtekEtWjAtOV8ke1xbKCErLV0nPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxODciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTg3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+aWRfbGl0ZXJhbF9jbG9zZTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmlkX2xpdGVyYWxfPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXN0cmluZyI+cidbYS16QS1aMC05XyR9XF0pIlwwNDcrLV0nPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxODgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTg4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+cG9zdF9yZWdleF9vZmY8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5pZF9saXRlcmFsXzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1zdHJpbmciPnInW15cMDAwLVwwNDB9XF0pPzp8LDsuJmFtcDs9Ky1dJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTg5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE4OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDE5MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xOTA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5kdWxsPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1teXDA0NyIvXDAwMC1cMDQwXSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE5MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xOTE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwxOTIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTkyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+c3BhY2Vfc3ViX3NpbXBsZTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPl9yZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5jb21waWxlPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxOTMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTkzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgbm9xYSBweWxpbnQ6IGRpc2FibGUgPSBiYWQtY29udGludWF0aW9uPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxOTQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTk0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMTk1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE5NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKCUoZHVsbClzKyknPC90dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyAwPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxOTYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTk2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cid8KCUoc3RyaW5ncylzJShkdWxsKXMqKSc8L3R0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIDE8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDE5NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4xOTc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ3woPyZsdDs9JShwcmVyZWdleDEpcyknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwxOTgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MTk4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInJShzcGFjZSlzKig/OiUobmV3bGluZSlzJShzcGFjZSlzKikqJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMTk5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjE5OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyglKHJlZ2V4KXMpJzwvdHQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyAyPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMDAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjAwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKCUoc3BhY2UpcyooPzolKG5ld2xpbmUpcyUoc3BhY2UpcyopKyc8L3R0PiAgICAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIDM8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIwMSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMDE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKD89JShwb3N0X3JlZ2V4X29mZilzKSk/JzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjAyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIwMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfCg/Jmx0Oz0lKHByZXJlZ2V4MilzKSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIwMyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMDM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+ciclKHNwYWNlKXMqKD86KCUobmV3bGluZSlzKSUoc3BhY2UpcyopKic8L3R0PiAgICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgNDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjA0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIwNDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyglKHJlZ2V4KXMpJzwvdHQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyA1PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMDUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjA1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKCUoc3BhY2UpcyooPzolKG5ld2xpbmUpcyUoc3BhY2UpcyopKyc8L3R0PiAgICAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIDY8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIwNiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMDY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKD89JShwb3N0X3JlZ2V4X29mZilzKSk/JzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjA3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIwNzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfCg/Jmx0Oz0lKGlkX2xpdGVyYWxfY2xvc2UpcyknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMDgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjA4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInJShzcGFjZSlzKig/OiglKG5ld2xpbmUpcyklKHNwYWNlKXMqKSsnPC90dD4gICAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIDc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIwOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMDk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPz0lKGlkX2xpdGVyYWxfb3BlbilzKSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIxMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMTA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ3woPyZsdDs9JShpZF9saXRlcmFsKXMpKCUoc3BhY2UpcykrKD89JShpZF9saXRlcmFsKXMpJzwvdHQ+ICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgODwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjExIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIxMTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfCg/Jmx0Oz1cKykoJShzcGFjZSlzKSsoPz1cKyknPC90dD4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyA5PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMTIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjEyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cid8KD8mbHQ7PS0pKCUoc3BhY2UpcykrKD89LSknPC90dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIDEwPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMTMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjEzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cid8JShzcGFjZSlzKyc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIxNCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMTQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ3woPzolKG5ld2xpbmUpcyUoc3BhY2UpcyopKyc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIxNSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMTU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiU8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmxvY2FsczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5zdWI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIxNiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMTY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwyMTciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjE3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyBwcmludCBzcGFjZV9zdWJfc2ltcGxlLl9fc2VsZl9fLnBhdHRlcm48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIxOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMTg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwyMTkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjE5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+ZGVmPC90dD4gPHR0IGNsYXNzPSJweS1kZWYtbmFtZSI+c3BhY2Vfc3ViYmVyX3NpbXBsZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1wYXJhbSI+bWF0Y2g8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIyMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMjA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4iIiIgU3Vic3RpdHV0aW9uIGNhbGxiYWNrICIiIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjIxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIyMTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIHB5bGludDogZGlzYWJsZSA9IHRvby1tYW55LXJldHVybi1zdGF0ZW1lbnRzPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMjIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjIyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMjIzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIyMzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5tYXRjaDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIyNCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMjQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+aWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIyNSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMjU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjI2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIyNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5lbGlmPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMjciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjI3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5yZXR1cm48L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjE8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIyOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMjg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+ZWxpZjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjI5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIyOTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+aWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIzMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMzA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5yZXR1cm48L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4rPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPidcbic8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIzMSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMzE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjMyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIzMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5lbGlmPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj41PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMzMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjMzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5yZXR1cm48L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+IiVzJXMlcyI8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4lPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjM0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIzNDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmFuZDwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nXG4nPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5vcjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjM1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjIzNTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIzNiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMzY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj42PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5hbmQ8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+J1xuJzwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jyc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIzNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMzc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyMzgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjM4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmVsaWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDIzOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yMzk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nXG4nPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNDAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjQwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmVsaWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjg8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj45PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5vcjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI0MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNDE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nICc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI0MiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNDI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+ZWxzZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjQzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI0MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicnPC90dD4gPC90dD4KLTwvZGl2PjxhIG5hbWU9IkwyNDQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjQ0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMjQ1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI0NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX3N1Yl9iYW5nZWQ8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5fcmU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+Y29tcGlsZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjQ2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI0NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIG5vcWEgcHlsaW50OiBkaXNhYmxlID0gYmFkLWNvbnRpbnVhdGlvbjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjQ3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI0NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDI0OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNDg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyglKGR1bGwpcyspJzwvdHQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgMDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjQ5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI0OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfCglKHN0cmluZ3MpcyUoZHVsbClzKiknPC90dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyAxPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNTAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjUwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cid8KD8mbHQ7PSUocHJlcmVnZXgxKXMpJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjUxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI1MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyglKHNwYWNlKXMqKD86JShuZXdsaW5lKXMlKHNwYWNlKXMqKSopJzwvdHQ+ICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyAyPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNTIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjUyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKCUocmVnZXgpcyknPC90dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIDM8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI1MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNTM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoJShzcGFjZSlzKig/OiUobmV3bGluZSlzJShzcGFjZSlzKikrJzwvdHQ+ICAgICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgNDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjU0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI1NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPz0lKHBvc3RfcmVnZXhfb2ZmKXMpKT8nPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNTUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjU1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cid8KD8mbHQ7PSUocHJlcmVnZXgyKXMpJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjU2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI1NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyglKHNwYWNlKXMqKD86KCUobmV3bGluZSlzKSUoc3BhY2UpcyopKiknPC90dD4gICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyA1LCA2PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNTciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjU3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKCUocmVnZXgpcyknPC90dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIDc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI1OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNTg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoJShzcGFjZSlzKig/OiUobmV3bGluZSlzJShzcGFjZSlzKikrJzwvdHQ+ICAgICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgODwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjU5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI1OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPz0lKHBvc3RfcmVnZXhfb2ZmKXMpKT8nPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNjAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjYwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cid8KD8mbHQ7PSUoaWRfbGl0ZXJhbF9jbG9zZSlzKSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI2MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNjE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoJShzcGFjZSlzKig/OiUobmV3bGluZSlzJShzcGFjZSlzKikrKSc8L3R0PiAgICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgOTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjYyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI2MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/PSUoaWRfbGl0ZXJhbF9vcGVuKXMpJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjYzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI2MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfCg/Jmx0Oz0lKGlkX2xpdGVyYWwpcykoJShzcGFjZSlzKykoPz0lKGlkX2xpdGVyYWwpcyknPC90dD4gIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyAxMDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjY0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI2NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfCg/Jmx0Oz1cKykoJShzcGFjZSlzKykoPz1cKyknPC90dD4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyAxMTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjY1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI2NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfCg/Jmx0Oz0tKSglKHNwYWNlKXMrKSg/PS0pJzwvdHQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyAxMjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjY2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI2NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfCglKHNwYWNlKXMrKSc8L3R0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyAxMzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjY3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI2NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfCgoPzolKG5ld2xpbmUpcyUoc3BhY2UpcyopKyknPC90dD4gICAgICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyAxNDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjY4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI2ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+JTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bG9jYWxzPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnN1YjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjY5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI2OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDI3MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNzA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIHByaW50IHNwYWNlX3N1Yl9iYW5nZWQuX19zZWxmX18ucGF0dGVybjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjcxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI3MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDI3MiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNzI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+X3JlPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmNvbXBpbGU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI3MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNzM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyUoc3BhY2VfY2hhcnMpcyt8JShzcGFjZV9jb21tZW50X25vYmFuZylzK3wlKG5ld2xpbmUpcysnPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyNzQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjc0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cid8KCUoYmFuZ19jb21tZW50KXMrKSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI3NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNzU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiU8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmxvY2FsczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5zdWI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI3NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNzY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwZXI8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5sYW1iZGE8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPm08L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPm08L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jyc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI3NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNzc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwyNzgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjc4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktY29tbWVudCI+IyBwcmludCBrZWVwLl9fc2VsZl9fLnBhdHRlcm48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI3OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yNzk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwyODAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjgwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+ZGVmPC90dD4gPHR0IGNsYXNzPSJweS1kZWYtbmFtZSI+c3BhY2Vfc3ViYmVyX2JhbmdlZDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1wYXJhbSI+bWF0Y2g8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI4MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yODE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4iIiIgU3Vic3RpdHV0aW9uIGNhbGxiYWNrICIiIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjgyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI4MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1jb21tZW50Ij4jIHB5bGludDogZGlzYWJsZSA9IHRvby1tYW55LXJldHVybi1zdGF0ZW1lbnRzPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyODMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjgzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMjg0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI4NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5tYXRjaDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI4NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yODU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+aWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI4NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yODY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjg3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI4NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5lbGlmPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwyODgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjg4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5yZXR1cm48L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjE8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI4OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yODk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+ZWxpZjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjkwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI5MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPiIlcyVzJXMlcyI8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4lPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjkxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI5MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmtlZXA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+a2VlcGVyPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4yPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyOTIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MjkyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjkzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI5MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmtlZXA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+a2VlcGVyPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj40PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5vcjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjk0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI5NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmFuZDwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nXG4nPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5vcjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjk1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI5NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI5NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yOTY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+ZWxpZjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+NzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMjk3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjI5NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPiIlcyVzJXMlcyVzIjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiU8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4oPC90dD4gPC90dD4KLTxhIG5hbWU9IkwyOTgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mjk4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+a2VlcDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwZXI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDI5OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4yOTk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj42PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5hbmQ8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+J1xuJzwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jyc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMwMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMDA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj43PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMDEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzAxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+a2VlcDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwZXI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjg8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicnPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMDIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzAyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+ODwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+YW5kPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPidcbic8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicnPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMDMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzAzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzA0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMwNDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5lbGlmPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj45PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMDUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzA1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5yZXR1cm48L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmtlZXA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+a2VlcGVyPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj45PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KzwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nXG4nPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMDYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzA2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmVsaWY8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjEwPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5vcjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTE8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xMjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzA3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMwNzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmtlZXBlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xMTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjEyPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5vcjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nICc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMwOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMDg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+ZWxzZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzA5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMwOTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmtlZXBlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xNDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08L2Rpdj48YSBuYW1lPSJMMzEwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMxMDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDMxMSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMTE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5kZWY8L3R0PiA8dHQgY2xhc3M9InB5LWRlZi1uYW1lIj5qc21pbjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1wYXJhbSI+c2NyaXB0PC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1wYXJhbSI+a2VlcF9iYW5nX2NvbW1lbnRzPC90dD48dHQgY2xhc3M9InB5LW9wIj49PC90dD48dHQgY2xhc3M9InB5LW5hbWUiPkZhbHNlPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMTIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzEyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ciIiIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzEzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMxMzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICAgIE1pbmlmeSBqYXZhc2NyaXB0IGJhc2VkIG9uIGBqc21pbi5jIGJ5IERvdWdsYXMgQ3JvY2tmb3JkYF9cLjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzE0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMxNDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMxNSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMTU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICAgICBJbnN0ZWFkIG9mIHBhcnNpbmcgdGhlIHN0cmVhbSBjaGFyIGJ5IGNoYXIsIGl0IHVzZXMgYSByZWd1bGFyPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMTYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzE2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgICAgZXhwcmVzc2lvbiBhcHByb2FjaCB3aGljaCBtaW5pZmllcyB0aGUgd2hvbGUgc2NyaXB0IHdpdGggb25lIGJpZzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzE3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMxNzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICAgIHN1YnN0aXR1dGlvbiByZWdleC48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMxOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMTg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMTkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzE5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgICAgLi4gX2pzbWluLmMgYnkgRG91Z2xhcyBDcm9ja2ZvcmQ6PC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMjAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzIwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgICAgICAgaHR0cDovL3d3dy5jcm9ja2ZvcmQuY29tL2phdmFzY3JpcHQvanNtaW4uYzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzIxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMyMTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMyMiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMjI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICAgICA6UGFyYW1ldGVyczo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMyMyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMjM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICAgICAgIGBzY3JpcHRgIDogYGBzdHJgYDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzI0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMyNDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICAgICAgICBTY3JpcHQgdG8gbWluaWZ5PC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMjUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzI1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzI2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMyNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICAgICAgYGtlZXBfYmFuZ19jb21tZW50c2AgOiBgYGJvb2xgYDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzI3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMyNzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICAgICAgICBLZWVwIGNvbW1lbnRzIHN0YXJ0aW5nIHdpdGggYW4gZXhjbGFtYXRpb24gbWFyaz8gKGBgLyohLi4uKi9gYCk8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMyOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMjg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+PC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMjkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzI5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgICAgOlJldHVybjogTWluaWZpZWQgc2NyaXB0PC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMzAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzMwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgICAgOlJ0eXBlOiBgYHN0cmBgPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMzEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzMxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgICAgIiIiPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMzIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzMyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWNvbW1lbnQiPiMgcHlsaW50OiBkaXNhYmxlID0gcmVkZWZpbmVkLW91dGVyLW5hbWU8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMzMyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMzM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwzMzQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzM0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwX2JhbmdfY29tbWVudHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMzNSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMzU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+c3BhY2Vfc3ViX2JhbmdlZDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzM2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjMzNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX3N1YmJlcl9iYW5nZWQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+J1xuJXNcbic8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4lPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5zY3JpcHQ8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMzNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMzc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnN0cmlwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzMzgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzM4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmVsc2U8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDMzOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zMzk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+c3BhY2Vfc3ViX3NpbXBsZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzQwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM0MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnNwYWNlX3N1YmJlcl9zaW1wbGU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+J1xuJXNcbic8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4lPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5zY3JpcHQ8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM0MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNDE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnN0cmlwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTwvZGl2PjxhIG5hbWU9IkwzNDIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzQyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMzQzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM0MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPnJldHVybjwvdHQ+IDx0dCBpZD0ibGluay01IiBjbGFzcz0icHktbmFtZSI+PGEgdGl0bGU9InJqc21pbi5qc21pbiIgY2xhc3M9InB5LW5hbWUiIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBkb2NsaW5rKCdsaW5rLTUnLCAnanNtaW4nLCAnbGluay00Jyk7Ij5qc21pbjwvYT48L3R0PiA8L3R0PgotPC9kaXY+PGEgbmFtZT0iTDM0NCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNDQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9IkwzNDUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzQ1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGlkPSJsaW5rLTYiIGNsYXNzPSJweS1uYW1lIj48YSB0aXRsZT0icmpzbWluLmpzbWluIiBjbGFzcz0icHktbmFtZSIgaHJlZj0iIyIgb25jbGljaz0icmV0dXJuIGRvY2xpbmsoJ2xpbmstNicsICdqc21pbicsICdsaW5rLTQnKTsiPmpzbWluPC9hPjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPl9tYWtlX2pzbWluPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNDYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzQ2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMMzQ3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM0NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0ianNtaW5fZm9yX3Bvc2VycyI+PC9hPjxkaXYgaWQ9ImpzbWluX2Zvcl9wb3NlcnMtZGVmIj48YSBuYW1lPSJMMzQ4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM0ODwvdHQ+IDxhIGNsYXNzPSJweS10b2dnbGUiIGhyZWY9IiMiIGlkPSJqc21pbl9mb3JfcG9zZXJzLXRvZ2dsZSIgb25jbGljaz0icmV0dXJuIHRvZ2dsZSgnanNtaW5fZm9yX3Bvc2VycycpOyI+LTwvYT48dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHkta2V5d29yZCI+ZGVmPC90dD4gPGEgY2xhc3M9InB5LWRlZi1uYW1lIiBocmVmPSJyanNtaW4tbW9kdWxlLmh0bWwjanNtaW5fZm9yX3Bvc2VycyI+anNtaW5fZm9yX3Bvc2VyczwvYT48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LXBhcmFtIj5zY3JpcHQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LXBhcmFtIj5rZWVwX2JhbmdfY29tbWVudHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPj08L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+RmFsc2U8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPC9kaXY+PGRpdiBpZD0ianNtaW5fZm9yX3Bvc2Vycy1jb2xsYXBzZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBwYWQ9IisrKyIgaW5kZW50PSIrKysrIj48L2Rpdj48ZGl2IGlkPSJqc21pbl9mb3JfcG9zZXJzLWV4cGFuZGVkIj48YSBuYW1lPSJMMzQ5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM0OTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ciIiIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzUwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM1MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgTWluaWZ5IGphdmFzY3JpcHQgYmFzZWQgb24gYGpzbWluLmMgYnkgRG91Z2xhcyBDcm9ja2ZvcmRgX1wuPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNTEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzUxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzUyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM1MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgSW5zdGVhZCBvZiBwYXJzaW5nIHRoZSBzdHJlYW0gY2hhciBieSBjaGFyLCBpdCB1c2VzIGEgcmVndWxhcjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzUzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM1MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgZXhwcmVzc2lvbiBhcHByb2FjaCB3aGljaCBtaW5pZmllcyB0aGUgd2hvbGUgc2NyaXB0IHdpdGggb25lIGJpZzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzU0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM1NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgc3Vic3RpdHV0aW9uIHJlZ2V4LjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzU1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM1NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM1NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNTY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgIC4uIF9qc21pbi5jIGJ5IERvdWdsYXMgQ3JvY2tmb3JkOjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzU3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM1NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICAgaHR0cDovL3d3dy5jcm9ja2ZvcmQuY29tL2phdmFzY3JpcHQvanNtaW4uYzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzU4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM1ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM1OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNTk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgIDpXYXJuaW5nOiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBkaWdlc3Qgb2YgYSBfbWFrZV9qc21pbigpIGNhbGwuIEl0IGp1c3Q8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM2MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNjA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICAgICAgICAgICB1dGlsaXplcyB0aGUgcmVzdWx0aW5nIHJlZ2V4ZXMuIEl0J3MgaGVyZSBmb3IgZnVuIGFuZCBtYXk8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM2MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNjE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICAgICAgICAgICB2YW5pc2ggYW55IHRpbWUuIFVzZSB0aGUgYGpzbWluYCBmdW5jdGlvbiBpbnN0ZWFkLjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzYyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM2MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj48L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM2MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNjM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgIDpQYXJhbWV0ZXJzOjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzY0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM2NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICBgc2NyaXB0YCA6IGBgc3RyYGA8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM2NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNjU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICAgICBTY3JpcHQgdG8gbWluaWZ5PC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNjYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzY2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzY3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM2NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgICBga2VlcF9iYW5nX2NvbW1lbnRzYCA6IGBgYm9vbGBgPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNjgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzY4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICAgICAgS2VlcCBjb21tZW50cyBzdGFydGluZyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcms/IChgYC8qIS4uLiovYGApPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNjkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzY5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzcwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM3MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPjx0dCBjbGFzcz0icHktZG9jc3RyaW5nIj4gICAgOlJldHVybjogTWluaWZpZWQgc2NyaXB0PC90dD4gPC90dD4KLTxhIG5hbWU9IkwzNzEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzcxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+PHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiAgICA6UnR5cGU6IGBgc3RyYGA8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM3MiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNzI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+ICAgICIiIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzczIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM3MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5ub3Q8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmtlZXBfYmFuZ19jb21tZW50czwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzc0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM3NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5yZXg8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzc1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM3NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyhbXlwwNDciL1wwMDAtXDA0MF0rKXwoKD86KD86XDA0N1teXDA0N1xcXHJcbl0qKD86XFwoPzpbXlxyXG5dJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzc2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM3NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ3xccj9cbnxccilbXlwwNDdcXFxyXG5dKikqXDA0Nyl8KD86IlteIlxcXHJcbl0qKD86XFwoPzpbXlxyXG5dJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzc3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM3NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ3xccj9cbnxccilbXiJcXFxyXG5dKikqIikpW15cMDQ3Ii9cMDAwLVwwNDBdKil8KD8mbHQ7PVsoLD06XFshJmFtcDt8Pyc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM3OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNzg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cid7fTtcclxuXSkoPzpbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vKic8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM3OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zNzk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+ciddW14qXSpcKispKi8pKSooPzooPzooPzovL1teXHJcbl0qKT9bXHJcbl0pKD86W1wwMDAtXDAxMVwwMTNcMCc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM4MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zODA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkqKSooKD86Lyg/IVtccic8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM4MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zODE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cidcbi8qXSlbXi9cXFxbXHJcbl0qKD86KD86XFxbXlxyXG5dfCg/OlxbW15cXFxdXHJcbl0qKD86XFxbXlxyJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzgyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM4MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1xuXVteXFxcXVxyXG5dKikqXF0pKVteL1xcXFtcclxuXSopKi8pKSgoPzpbXDAwMC1cMDExXDAxM1wwMTQnPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzODMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzgzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInXDAxNi1cMDQwXXwoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pKSooPzooPzooPzovL1teXHInPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzODQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mzg0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInXG5dKik/W1xyXG5dKSg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzonPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzODUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mzg1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInW14vKl1bXipdKlwqKykqLykpKikrKD89W15cMDAwLVwwNDAmYW1wOykrLC46Oz0/XF18fS1dKSk/fCg/Jmx0Oz1bXDAwJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzg2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM4NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJzAtIyUtLC4vOi1AXFstXmB7LX4tXXJldHVybikoPzpbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdfCg/JzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzg3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM4NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pKSooPzooKD86KD86Ly9bXlxyXG5dKik/W1xyXG5dJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzg4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM4ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJykpKD86W1wwMDAtXDAxMVwwMTNcMDE0XDAxNi1cMDQwXXwoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSonPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzODkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+Mzg5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInXCorKSovKSkqKSooKD86Lyg/IVtcclxuLypdKVteL1xcXFtcclxuXSooPzooPzpcXFteXHJcbl18KD86XFsnPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzOTAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzkwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInW15cXFxdXHJcbl0qKD86XFxbXlxyXG5dW15cXFxdXHJcbl0qKSpcXSkpW14vXFxcW1xyXG5dKikqLykpKCgnPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzOTEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzkxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInPzpbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdKlwqKyknPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzOTIiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzkyPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKi8pKSooPzooPzooPzovL1teXHJcbl0qKT9bXHJcbl0pKD86W1wwMDAtXDAxMVwwMTNcMDE0XDAxNi1cMDQnPC90dD4gPC90dD4KLTxhIG5hbWU9IkwzOTMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+MzkzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInMF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkqKSsoPz1bXlwwMDAtXDA0MCZhbXA7KSssLjo7JzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMMzk0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjM5NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJz0/XF18fS1dKSk/fCg/Jmx0Oz1bXlwwMDAtISMlJmFtcDsoKiwuLzotQFxbXFxeYHt8fl0pKD86W1wwMDAtXDAxMVwwMSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM5NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zOTU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+ciczXDAxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkqKD86KCg/Oig/Oic8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM5NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zOTY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicvL1teXHJcbl0qKT9bXHJcbl0pKSg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF18KD86L1wqW14qXSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM5NyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zOTc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicqXCorKD86W14vKl1bXipdKlwqKykqLykpKikrKD89W15cMDAwLVwwNDAiIyUtXDA0NykqLC4vOi1AXFwtXic8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM5OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zOTg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cidgfC1+XSl8KD8mbHQ7PVteXDAwMC0jJS0sLi86LUBcWy1eYHstfi1dKSgoPzpbXDAwMC1cMDExXDAxM1wwMTRcMCc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDM5OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj4zOTk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicxNi1cMDQwXXwoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pKSkrKD89W15cMDAwLSMlLSwuLyc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQwMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40MDA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cic6LUBcWy1eYHstfi1dKXwoPyZsdDs9XCspKCg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF18KD86L1wqWyc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQwMSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40MDE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cideKl0qXCorKD86W14vKl1bXipdKlwqKykqLykpKSsoPz1cKyl8KD8mbHQ7PS0pKCg/OltcMDAwLVwwMTFcMDEzJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDAyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQwMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdKlwqKykqLykpKSsoPz0tKXwoPzpbJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDAzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQwMzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1wwMDAtXDAxMVwwMTNcMDE0XDAxNi1cMDQwXXwoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDA0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQwNDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJykrfCg/Oig/Oig/Oi8vW15cclxuXSopP1tcclxuXSkoPzpbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDA1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQwNTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ3woPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pKSopKyc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQwNiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40MDY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQwNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40MDc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9Ikw0MDgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDA4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmRlZjwvdHQ+IDx0dCBjbGFzcz0icHktZGVmLW5hbWUiPnN1YmJlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1wYXJhbSI+bWF0Y2g8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQwOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40MDk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IiIiIFN1YnN0aXR1dGlvbiBjYWxsYmFjayAiIiI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQxMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40MTA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPm1hdGNoPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDExIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQxMTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDEyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQxMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MTMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDEzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQxNCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40MTQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4zPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5hbmQ8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4rPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPidcbic8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MTUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDE1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQxNiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40MTY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj41PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5hbmQ8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+IiVzJXMlcyI8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4lPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDE3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQxNzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj40PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5hbmQ8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+J1xuJzwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jyc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQxOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40MTg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+NTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDE5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQxOTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj42PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5hbmQ8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+J1xuJzwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jyc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQyMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40MjA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQyMSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40MjE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj43PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5hbmQ8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+J1xuJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQyMiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40MjI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj44PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5hbmQ8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+JyAnPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5vcjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDIzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQyMzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjk8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmFuZDwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nICc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MjQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDI0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmFuZDwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nICc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MjUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDI1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj4nJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDI2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQyNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPC9kaXY+PGEgbmFtZT0iTDQyNyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40Mjc8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5lbHNlPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MjgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDI4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPnJleDwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4oPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MjkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDI5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInKFteXDA0NyIvXDAwMC1cMDQwXSspfCgoPzooPzpcMDQ3W15cMDQ3XFxcclxuXSooPzpcXCg/OlteXHJcbl0nPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MzAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDMwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfFxyP1xufFxyKVteXDA0N1xcXHJcbl0qKSpcMDQ3KXwoPzoiW14iXFxcclxuXSooPzpcXCg/OlteXHJcbl0nPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MzEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDMxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInfFxyP1xufFxyKVteIlxcXHJcbl0qKSoiKSlbXlwwNDciL1wwMDAtXDA0MF0qKXwoPyZsdDs9WygsPTpcWyEmYW1wO3w/JzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDMyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQzMjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ3t9O1xyXG5dKSgoPzpbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDMzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQzMzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJypdW14qXSpcKispKi8pKSooPzooPzooPzovL1teXHJcbl0qKT9bXHJcbl0pKD86W1wwMDAtXDAxMVwwMTMnPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MzQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDM0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInXDAxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkqKSopKCg/Oi8oPyEnPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MzUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDM1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInW1xyXG4vKl0pW14vXFxcW1xyXG5dKig/Oig/OlxcW15cclxuXXwoPzpcW1teXFxcXVxyXG5dKig/OlxcW14nPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MzYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDM2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInXHJcbl1bXlxcXF1cclxuXSopKlxdKSlbXi9cXFxbXHJcbl0qKSovKSkoKD86W1wwMDAtXDAxMVwwMTNcMDEnPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0MzciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDM3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkqKD86KD86KD86Ly9bXic8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQzOCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40Mzg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cidcclxuXSopP1tcclxuXSkoPzpbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKCc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQzOSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40Mzk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cic/OlteLypdW14qXSpcKispKi8pKSopKyg/PVteXDAwMC1cMDQwJmFtcDspKywuOjs9P1xdfH0tXSkpP3woPyZsdDs9Wyc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ0MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40NDA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cidcMDAwLSMlLSwuLzotQFxbLV5gey1+LV1yZXR1cm4pKCg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MCc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ0MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40NDE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+ciddfCg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdKlwqKykqLykpKig/OigoPzooPzovL1teXHJcbl0qKT9bJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDQyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ0MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1xyXG5dKSkoPzpbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vKl1bJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDQzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ0MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ14qXSpcKispKi8pKSopKikoKD86Lyg/IVtcclxuLypdKVteL1xcXFtcclxuXSooPzooPzpcXFteXHJcbl18JzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDQ0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ0NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/OlxbW15cXFxdXHJcbl0qKD86XFxbXlxyXG5dW15cXFxdXHJcbl0qKSpcXSkpW14vXFxcW1xyXG5dKikqJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDQ1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ0NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJy8pKSgoPzpbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDQ2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ0NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJypcKispKi8pKSooPzooPzooPzovL1teXHJcbl0qKT9bXHJcbl0pKD86W1wwMDAtXDAxMVwwMTNcMDE0XDAxJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDQ3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ0NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJzYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkqKSsoPz1bXlwwMDAtXDA0MCZhbXA7KSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ0OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40NDg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicrLC46Oz0/XF18fS1dKSk/fCg/Jmx0Oz1bXlwwMDAtISMlJmFtcDsoKiwuLzotQFxbXFxeYHt8fl0pKCg/OltcMDAwLSc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ0OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40NDk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cidcMDExXDAxM1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdKlwqKykqLykpKig/Oic8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ1MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40NTA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicoPzooPzovL1teXHJcbl0qKT9bXHJcbl0pKD86W1wwMDAtXDAxMVwwMTNcMDE0XDAxNi1cMDQwXXwoPzovJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDUxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ1MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkqKSspKD89W15cMDAwLVwwNDAiIyUtXDA0NykqLC4vJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDUyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ1MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJzotQFxcLV5gfC1+XSl8KD8mbHQ7PVteXDAwMC0jJS0sLi86LUBcWy1eYHstfi1dKSgoPzpbXDAwMC1cMDExXDAxJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDUzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ1MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJzNcMDE0XDAxNi1cMDQwXXwoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pKSspKD89W15cMDAwJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDU0Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ1NDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJy0jJS0sLi86LUBcWy1eYHstfi1dKXwoPyZsdDs9XCspKCg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF18JzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDU1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ1NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdKlwqKykqLykpKykoPz1cKyl8KD8mbHQ7PS0pKCg/OltcMDAwLVwwJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDU2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ1NjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJzExXDAxM1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdKlwqKykqLykpKykoPz0tJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDU3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ1NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJyl8KCg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qJzwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDU4Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ1ODwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktc3RyaW5nIj5yJ1wqKykqLykpKyl8KCg/Oig/Oig/Oi8vW15cclxuXSopP1tcclxuXSkoPzpbXDAwMC1cMDExXDAxM1wwMTQnPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0NTkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDU5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1zdHJpbmciPnInXDAxNi1cMDQwXXwoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pKSopKyknPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0NjAiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDYwPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0NjEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDYxPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMNDYyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ2MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+X3JlPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmNvbXBpbGU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ2MyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40NjM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cidbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdK3woPzovXCooPyEhKVteKl0qXCorKD86W14vKl1bXipdKic8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ2NCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40NjQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cidcKispKi8pK3woPzooPzovL1teXHJcbl0qKT9bXHJcbl0pK3woKD86L1wqIVteKl0qXCorKD86W14vKl1bXic8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ2NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40NjU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LXN0cmluZyI+cicqXSpcKispKi8pKyknPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0NjYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDY2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+JTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+bG9jYWxzPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnN1YjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDY3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ2NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwZXI8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5sYW1iZGE8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPm08L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPm08L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jyc8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ2OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40Njg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9Ikw0NjkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDY5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmRlZjwvdHQ+IDx0dCBjbGFzcz0icHktZGVmLW5hbWUiPnN1YmJlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1wYXJhbSI+bWF0Y2g8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ3MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40NzA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LWRvY3N0cmluZyI+IiIiIFN1YnN0aXR1dGlvbiBjYWxsYmFjayAiIiI8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ3MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40NzE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPm1hdGNoPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDcyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ3MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDczIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ3MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0NzQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDc0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ3NSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40NzU8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4zPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5hbmQ8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+IiVzJXMlcyVzIjwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPiU8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4oPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0NzYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDc2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmtlZXA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+a2VlcGVyPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4yPC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0NzciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDc3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ3OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40Nzg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+a2VlcDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwZXI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicnPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0NzkiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDc5PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmFuZDwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nXG4nPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5vcjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDgwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ4MDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5vcjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDgxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ4MTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICA8dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmdyb3VwczwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+WzwvdHQ+PHR0IGNsYXNzPSJweS1udW1iZXIiPjc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmFuZDwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4iJXMlcyVzJXMlcyI8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj4lPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDgyIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ4MjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmtlZXBlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+NTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDgzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ4MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj42PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5hbmQ8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+J1xuJzwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jyc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ4NCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40ODQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+NzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDg1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ4NTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmtlZXBlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+ODwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jyc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ4NiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40ODY8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+ODwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+YW5kPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPidcbic8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicnPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0ODciPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDg3PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw0ODgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDg4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgICAgIDx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+OTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+YW5kPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmtlZXBlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+OTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPis8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+J1xuJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ4OSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40ODk8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xMDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+YW5kPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmtlZXBlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTA8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicgJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ5MCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40OTA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xMTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+YW5kPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmtlZXBlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTE8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicgJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ5MSI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40OTE8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xMjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+YW5kPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmtlZXBlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTI8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPicgJzwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDQ5MiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40OTI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmtlZXBlcjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+Z3JvdXBzPC90dD48dHQgY2xhc3M9InB5LW9wIj5bPC90dD48dHQgY2xhc3M9InB5LW51bWJlciI+MTM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPl08L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5ncm91cHM8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xNDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+XTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNDkzIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ5MzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPC9kaXY+PGEgbmFtZT0iTDQ5NCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40OTQ8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9Ikw0OTUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDk1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHkta2V5d29yZCI+cmV0dXJuPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5fcmU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+c3ViPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnJleDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LDwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+c3ViYmVyPC90dD48dHQgY2xhc3M9InB5LW9wIj4sPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPidcbiVzXG4nPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+JTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+c2NyaXB0PC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnN0cmlwPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD48dHQgY2xhc3M9InB5LW9wIj4pPC90dD4gPC90dD4KLTwvZGl2PjxhIG5hbWU9Ikw0OTYiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NDk2PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+IDwvdHQ+Ci08YSBuYW1lPSJMNDk3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ5NzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDQ5OCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj40OTg8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj48dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5fX25hbWVfXzwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj09PC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPidfX21haW5fXyc8L3R0Pjx0dCBjbGFzcz0icHktb3AiPjo8L3R0PiA8L3R0PgotPGEgbmFtZT0ibWFpbiI+PC9hPjxkaXYgaWQ9Im1haW4tZGVmIj48YSBuYW1lPSJMNDk5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjQ5OTwvdHQ+IDxhIGNsYXNzPSJweS10b2dnbGUiIGhyZWY9IiMiIGlkPSJtYWluLXRvZ2dsZSIgb25jbGljaz0icmV0dXJuIHRvZ2dsZSgnbWFpbicpOyI+LTwvYT48dHQgY2xhc3M9InB5LWxpbmUiPiAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmRlZjwvdHQ+IDxhIGNsYXNzPSJweS1kZWYtbmFtZSIgaHJlZj0icmpzbWluLW1vZHVsZS5odG1sI21haW4iPm1haW48L2E+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08L2Rpdj48ZGl2IGlkPSJtYWluLWNvbGxhcHNlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiIHBhZD0iKysrIiBpbmRlbnQ9IisrKysrKysrIj48L2Rpdj48ZGl2IGlkPSJtYWluLWV4cGFuZGVkIj48YSBuYW1lPSJMNTAwIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjUwMDwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1kb2NzdHJpbmciPiIiIiBNYWluICIiIjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNTAxIj48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjUwMTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pbXBvcnQ8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPnN5czwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+YXM8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPl9zeXM8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDUwMiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj41MDI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9Ikw1MDMiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NTAzPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmFyZ3Y8L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5fc3lzPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPmFyZ3Y8L3R0Pjx0dCBjbGFzcz0icHktb3AiPls8L3R0Pjx0dCBjbGFzcz0icHktbnVtYmVyIj4xPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD48dHQgY2xhc3M9InB5LW9wIj5dPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1MDQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NTA0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LW5hbWUiPmtlZXBfYmFuZ19jb21tZW50czwvdHQ+IDx0dCBjbGFzcz0icHktb3AiPj08L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jy1iJzwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+aW48L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmFyZ3Y8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPictYnAnPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pbjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+YXJndjwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+b3I8L3R0PiA8dHQgY2xhc3M9InB5LXN0cmluZyI+Jy1wYic8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmluPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5hcmd2PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1MDUiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NTA1PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmlmPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPictcCc8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPmluPC90dD4gPHR0IGNsYXNzPSJweS1uYW1lIj5hcmd2PC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5vcjwvdHQ+IDx0dCBjbGFzcz0icHktc3RyaW5nIj4nLWJwJzwvdHQ+IDx0dCBjbGFzcz0icHkta2V5d29yZCI+aW48L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmFyZ3Y8L3R0PiA8dHQgY2xhc3M9InB5LWtleXdvcmQiPm9yPC90dD4gPHR0IGNsYXNzPSJweS1zdHJpbmciPictcGInPC90dD4gPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5pbjwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+YXJndjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+OjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNTA2Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjUwNjwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+eGpzbWluPC90dD4gPHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+IDx0dCBjbGFzcz0icHktbmFtZSI+X21ha2VfanNtaW48L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+cHl0aG9uX29ubHk8L3R0Pjx0dCBjbGFzcz0icHktb3AiPj08L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+VHJ1ZTwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNTA3Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjUwNzwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiAgICAgICAgPHR0IGNsYXNzPSJweS1rZXl3b3JkIj5lbHNlPC90dD48dHQgY2xhc3M9InB5LW9wIj46PC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1MDgiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NTA4PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj54anNtaW48L3R0PiA8dHQgY2xhc3M9InB5LW9wIj49PC90dD4gPHR0IGlkPSJsaW5rLTciIGNsYXNzPSJweS1uYW1lIj48YSB0aXRsZT0icmpzbWluLmpzbWluIiBjbGFzcz0icHktbmFtZSIgaHJlZj0iIyIgb25jbGljaz0icmV0dXJuIGRvY2xpbmsoJ2xpbmstNycsICdqc21pbicsICdsaW5rLTQnKTsiPmpzbWluPC9hPjwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNTA5Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjUwOTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PgotPGEgbmFtZT0iTDUxMCI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj41MTA8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktbmFtZSI+X3N5czwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+LjwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5zdGRvdXQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPi48L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+d3JpdGU8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktbmFtZSI+eGpzbWluPC90dD48dHQgY2xhc3M9InB5LW9wIj4oPC90dD4gPC90dD4KLTxhIG5hbWU9Ikw1MTEiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NTExPC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgICAgICAgICAgPHR0IGNsYXNzPSJweS1uYW1lIj5fc3lzPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnN0ZGluPC90dD48dHQgY2xhc3M9InB5LW9wIj4uPC90dD48dHQgY2xhc3M9InB5LW5hbWUiPnJlYWQ8L3R0Pjx0dCBjbGFzcz0icHktb3AiPig8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPiw8L3R0PiA8dHQgY2xhc3M9InB5LW5hbWUiPmtlZXBfYmFuZ19jb21tZW50czwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+PTwvdHQ+PHR0IGNsYXNzPSJweS1uYW1lIj5rZWVwX2JhbmdfY29tbWVudHM8L3R0PiA8L3R0PgotPGEgbmFtZT0iTDUxMiI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj41MTI8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gICAgICAgIDx0dCBjbGFzcz0icHktb3AiPik8L3R0Pjx0dCBjbGFzcz0icHktb3AiPik8L3R0PiA8L3R0PgotPC9kaXY+PGEgbmFtZT0iTDUxMyI+PC9hPjx0dCBjbGFzcz0icHktbGluZW5vIj41MTM8L3R0PiAgPHR0IGNsYXNzPSJweS1saW5lIj4gPC90dD4KLTxhIG5hbWU9Ikw1MTQiPjwvYT48dHQgY2xhc3M9InB5LWxpbmVubyI+NTE0PC90dD4gIDx0dCBjbGFzcz0icHktbGluZSI+ICAgIDx0dCBjbGFzcz0icHktbmFtZSI+bWFpbjwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KDwvdHQ+PHR0IGNsYXNzPSJweS1vcCI+KTwvdHQ+IDwvdHQ+Ci08YSBuYW1lPSJMNTE1Ij48L2E+PHR0IGNsYXNzPSJweS1saW5lbm8iPjUxNTwvdHQ+ICA8dHQgY2xhc3M9InB5LWxpbmUiPiA8L3R0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLTwhLS0KLWV4cGFuZHRvKGxvY2F0aW9uLmhyZWYpOwotLy8gLS0+Ci08L3NjcmlwdD4KLTwvcHJlPgotPGJyIC8+Ci08IS0tID09PT09PT09PT09PT09PT09PT09IE5BVklHQVRJT04gQkFSID09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhYmxlIGNsYXNzPSJuYXZiYXIiIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIgotICAgICAgIGJnY29sb3I9IiNhMGMwZmYiIGNlbGxzcGFjaW5nPSIwIj4KLSAgPHRyIHZhbGlnbj0ibWlkZGxlIj4KLSAgPCEtLSBIb21lIGxpbmsgLS0+Ci0gICAgICA8dGggYmdjb2xvcj0iIzcwYjBmMCIgY2xhc3M9Im5hdmJhci1zZWxlY3QiCi0gICAgICAgICAgPiZuYnNwOyZuYnNwOyZuYnNwO0hvbWUmbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gVHJlZSBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9Im1vZHVsZS10cmVlLmh0bWwiPlRyZWVzPC9hPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGg+Ci0KLSAgPCEtLSBJbmRleCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImlkZW50aWZpZXItaW5kZXguaHRtbCI+SW5kaWNlczwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gSGVscCBsaW5rIC0tPgotICAgICAgPHRoPiZuYnNwOyZuYnNwOyZuYnNwOzxhCi0gICAgICAgIGhyZWY9ImhlbHAuaHRtbCI+SGVscDwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8L3RoPgotCi0gIDwhLS0gUHJvamVjdCBob21lcGFnZSAtLT4KLSAgICAgIDx0aCBjbGFzcz0ibmF2YmFyIiBhbGlnbj0icmlnaHQiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgICA8dHI+PHRoIGNsYXNzPSJuYXZiYXIiIGFsaWduPSJjZW50ZXIiCi0gICAgICAgICAgICA+PGEgaHJlZj0iaHR0cDovL29wZW5zb3VyY2UucGVybGlnLmRlL3Jqc21pbi8iIHRhcmdldD0iX3RvcCI+VmlzaXQgcmpzbWluIE9ubGluZTwvYT48L3RoPgotICAgICAgICAgIDwvdHI+PC90YWJsZT48L3RoPgotICA8L3RyPgotPC90YWJsZT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICA8IS0tCi0gIC8vIFByaXZhdGUgb2JqZWN0cyBhcmUgaW5pdGlhbGx5IGRpc3BsYXllZCAoYmVjYXVzZSBpZgotICAvLyBqYXZhc2NyaXB0IGlzIHR1cm5lZCBvZmYgdGhlbiB3ZSB3YW50IHRoZW0gdG8gYmUKLSAgLy8gdmlzaWJsZSk7IGJ1dCBieSBkZWZhdWx0LCB3ZSB3YW50IHRvIGhpZGUgdGhlbS4gIFNvIGhpZGUKLSAgLy8gdGhlbSB1bmxlc3Mgd2UgaGF2ZSBhIGNvb2tpZSB0aGF0IHNheXMgdG8gc2hvdyB0aGVtLgotICBjaGVja0Nvb2tpZSgpOwotICAvLyAtLT4KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vcGFja2FnZS5jZmcgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9wYWNrYWdlLmNmZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA5M2U4Mi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9wYWNrYWdlLmNmZworKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLSMgLSotIGNvZGluZzogdXRmLTggLSotCi0jCi0jIENvcHlyaWdodCAyMDA5IC0gMjAxNQotIyBBbmRyw6kgTWFsbyBvciBoaXMgbGljZW5zb3JzLCBhcyBhcHBsaWNhYmxlCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLVtwYWNrYWdlXQotbmFtZSA9IHJqc21pbgotCi1weXRob24ubWluID0gMi40Ci1weXB5Lm1pbiA9IDEuOQotcHlweTMubWluID0gMi40Ci1qeXRob24ubWluID0gMi41Ci0KLXZlcnNpb24ubnVtYmVyID0gMS4wLjEyCi0KLWF1dGhvci5uYW1lID0gQW5kcsOpIE1hbG8KLWF1dGhvci5lbWFpbCA9IG5kQHBlcmxpZy5kZQotI21haW50YWluZXIubmFtZSA9Ci0jbWFpbnRhaW5lci5lbWFpbCA9IAotdXJsLmhvbWVwYWdlID0gaHR0cDovL29wZW5zb3VyY2UucGVybGlnLmRlL3Jqc21pbi8KLXVybC5kb3dubG9hZCA9IGh0dHA6Ly9zdG9yYWdlLnBlcmxpZy5kZS9yanNtaW4vCi0KLQotW2RvY3NdCi1tZXRhLmNsYXNzaWZpZXJzID0gZG9jcy9DTEFTU0lGSUVSUwotbWV0YS5kZXNjcmlwdGlvbiA9IGRvY3MvREVTQ1JJUFRJT04KLW1ldGEuc3VtbWFyeSA9IGRvY3MvU1VNTUFSWQotbWV0YS5wcm92aWRlcyA9IGRvY3MvUFJPVklERVMKLW1ldGEubGljZW5zZSA9IExJQ0VOU0UKLW1ldGEua2V5d29yZHMgPQotICAgIEphdmFzY3JpcHQKLSAgICBNaW5pbWl6YXRpb24KLQotYXBpZG9jLmRpciA9IGRvY3MvYXBpZG9jCi1hcGlkb2Muc3RyaXAgPSAxCi0jYXBpZG9jLmlnbm9yZSA9Ci0KLSN1c2VyZG9jLmRpciA9IGRvY3MvdXNlcmRvYwotI3VzZXJkb2Muc3RyaXAgPSAxCi0jdXNlcmRvYy5pZ25vcmUgPQotIyAgICAuYnVpbGRpbmZvCi0KLSNleGFtcGxlcy5kaXIgPSBkb2NzL2V4YW1wbGVzCi0jZXhhbXBsZXMuc3RyaXAgPSAxCi0jZXhhbXBsZXMuaWdub3JlID0KLQotI21hbiA9Ci0KLWV4dHJhID0KLSAgICBSRUFETUUucnN0Ci0gICAgZG9jcy9DSEFOR0VTCi0gICAgZG9jcy9CRU5DSE1BUktTCi0KLQotW21hbmlmZXN0XQotI3BhY2thZ2VzLmxpYiA9IC4KLSNwYWNrYWdlcy5jb2xsZWN0ID0KLW1vZHVsZXMgPSByanNtaW4KLQotI3NjcmlwdHMgPQotCi1kaXN0ID0KLSAgICBiZW5jaAotICAgIGJlbmNoLnNoCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9yanNtaW4uYyBiL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL3Jqc21pbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTc3YTg4Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2NvbW1vbi9weV92dWxjYW5pemUvdGhpcmRfcGFydHkvcmpzbWluL3Jqc21pbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMSAtIDIwMTUKLSAqIEFuZHJceGU5IE1hbG8gb3IgaGlzIGxpY2Vuc29ycywgYXMgYXBwbGljYWJsZQotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlICJjZXh0LmgiCi1FWFRfSU5JVF9GVU5DOwotCi0jZGVmaW5lIFJKU01JTl9EVUxMX0JJVCAgICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgUkpTTUlOX1BSRV9SRUdFWF9CSVQgICAgICAoMSA8PCAxKQotI2RlZmluZSBSSlNNSU5fUkVHRVhfRFVMTF9CSVQgICAgICgxIDw8IDIpCi0jZGVmaW5lIFJKU01JTl9SRUdFWF9DQ19EVUxMX0JJVCAgKDEgPDwgMykKLSNkZWZpbmUgUkpTTUlOX0lEX0xJVF9CSVQgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBSSlNNSU5fSURfTElUX09fQklUICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIFJKU01JTl9JRF9MSVRfQ19CSVQgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgUkpTTUlOX1NUUklOR19EVUxMX0JJVCAgICAoMSA8PCA3KQotI2RlZmluZSBSSlNNSU5fU1BBQ0VfQklUICAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIFJKU01JTl9QT1NUX1JFR0VYX09GRl9CSVQgKDEgPDwgOSkKLQotI2lmZGVmIEVYVDMKLXR5cGVkZWYgUHlfVU5JQ09ERSByY2hhcjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgcmNoYXI7Ci0jZW5kaWYKLSNkZWZpbmUgVShjKSAoKHJjaGFyKShjKSkKLQotI2RlZmluZSBSSlNNSU5fSVNfRFVMTChjKSAoKFUoYykgPiAxMjcpIHx8IFwKLSAgICAocmpzbWluX2NoYXJtYXNrW1UoYykgJiAweDdGXSAmIFJKU01JTl9EVUxMX0JJVCkpCi0KLSNkZWZpbmUgUkpTTUlOX0lTX1JFR0VYX0RVTEwoYykgKChVKGMpID4gMTI3KSB8fCBcCi0gICAgKHJqc21pbl9jaGFybWFza1tVKGMpICYgMHg3Rl0gJiBSSlNNSU5fUkVHRVhfRFVMTF9CSVQpKQotCi0jZGVmaW5lIFJKU01JTl9JU19SRUdFWF9DQ19EVUxMKGMpICgoVShjKSA+IDEyNykgfHwgXAotICAgIChyanNtaW5fY2hhcm1hc2tbVShjKSAmIDB4N0ZdICYgUkpTTUlOX1JFR0VYX0NDX0RVTExfQklUKSkKLQotI2RlZmluZSBSSlNNSU5fSVNfU1RSSU5HX0RVTEwoYykgKChVKGMpID4gMTI3KSB8fCBcCi0gICAgKHJqc21pbl9jaGFybWFza1tVKGMpICYgMHg3Rl0gJiBSSlNNSU5fU1RSSU5HX0RVTExfQklUKSkKLQotI2RlZmluZSBSSlNNSU5fSVNfSURfTElURVJBTChjKSAoKFUoYykgPiAxMjcpIHx8IFwKLSAgICAocmpzbWluX2NoYXJtYXNrW1UoYykgJiAweDdGXSAmIFJKU01JTl9JRF9MSVRfQklUKSkKLQotI2RlZmluZSBSSlNNSU5fSVNfSURfTElURVJBTF9PUEVOKGMpICgoVShjKSA+IDEyNykgfHwgXAotICAgIChyanNtaW5fY2hhcm1hc2tbVShjKSAmIDB4N0ZdICYgUkpTTUlOX0lEX0xJVF9PX0JJVCkpCi0KLSNkZWZpbmUgUkpTTUlOX0lTX0lEX0xJVEVSQUxfQ0xPU0UoYykgKChVKGMpID4gMTI3KSB8fCBcCi0gICAgKHJqc21pbl9jaGFybWFza1tVKGMpICYgMHg3Rl0gJiBSSlNNSU5fSURfTElUX0NfQklUKSkKLQotI2RlZmluZSBSSlNNSU5fSVNfUE9TVF9SRUdFWF9PRkYoYykgKChVKGMpID4gMTI3KSB8fCBcCi0gICAgKHJqc21pbl9jaGFybWFza1tVKGMpICYgMHg3Rl0gJiBSSlNNSU5fUE9TVF9SRUdFWF9PRkZfQklUKSkKLQotI2RlZmluZSBSSlNNSU5fSVNfU1BBQ0UoYykgKChVKGMpIDw9IDEyNykgJiYgXAotICAgIChyanNtaW5fY2hhcm1hc2tbVShjKSAmIDB4N0ZdICYgUkpTTUlOX1NQQUNFX0JJVCkpCi0KLSNkZWZpbmUgUkpTTUlOX0lTX1BSRV9SRUdFWF8xKGMpICgoVShjKSA8PSAxMjcpICYmIFwKLSAgICAocmpzbWluX2NoYXJtYXNrW1UoYykgJiAweDdGXSAmIFJKU01JTl9QUkVfUkVHRVhfQklUKSkKLQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgcmpzbWluX2NoYXJtYXNrWzEyOF0gPSB7Ci0gICAgMzk2LCAzOTYsIDM5NiwgMzk2LCAzOTYsIDM5NiwgMzk2LCAzOTYsCi0gICAgMzk2LCAzOTYsICAgMiwgMzk2LCAzOTYsICAgMiwgMzk2LCAzOTYsCi0gICAgMzk2LCAzOTYsIDM5NiwgMzk2LCAzOTYsIDM5NiwgMzk2LCAzOTYsCi0gICAgMzk2LCAzOTYsIDM5NiwgMzk2LCAzOTYsIDM5NiwgMzk2LCAzOTYsCi0gICAgMzk2LCA2ODcsIDU4OCwgNjUzLCA3NjUsIDY1MywgMTQzLCA1ODgsCi0gICAgNjg3LCAyMDUsIDY1MywgMjM3LCAxNDMsIDIzNywgMTQxLCA2NDgsCi0gICAgNzY1LCA3NjUsIDc2NSwgNzY1LCA3NjUsIDc2NSwgNzY1LCA3NjUsCi0gICAgNzY1LCA3NjUsIDE0MywgMTQzLCA2NTMsIDE0MywgNjUzLCAxNDMsCi0gICAgNjUzLCA3NjUsIDc2NSwgNzY1LCA3NjUsIDc2NSwgNzY1LCA3NjUsCi0gICAgNzY1LCA3NjUsIDc2NSwgNzY1LCA3NjUsIDc2NSwgNzY1LCA3NjUsCi0gICAgNzY1LCA3NjUsIDc2NSwgNzY1LCA3NjUsIDc2NSwgNzY1LCA3NjUsCi0gICAgNzY1LCA3NjUsIDc2NSwgNjgzLCA1MTMsIDE5NywgNjUzLCA3NjUsCi0gICAgNjUzLCA3NjUsIDc2NSwgNzY1LCA3NjUsIDc2NSwgNzY1LCA3NjUsCi0gICAgNzY1LCA3NjUsIDc2NSwgNzY1LCA3NjUsIDc2NSwgNzY1LCA3NjUsCi0gICAgNzY1LCA3NjUsIDc2NSwgNzY1LCA3NjUsIDc2NSwgNzY1LCA3NjUsCi0gICAgNzY1LCA3NjUsIDc2NSwgNjg3LCAxNDMsIDIwNywgNjUzLCA3NjUKLX07Ci0KLXN0YXRpYyBQeV9zc2l6ZV90Ci1yanNtaW4oY29uc3QgcmNoYXIgKnNvdXJjZSwgcmNoYXIgKnRhcmdldCwgUHlfc3NpemVfdCBsZW5ndGgsCi0gICAgICAgaW50IGtlZXBfYmFuZ19jb21tZW50cykKLXsKLSAgICBjb25zdCByY2hhciAqcmVzZXQsICpwY3Jlc2V0ID0gTlVMTCwgKnBjdG9rZW4gPSBOVUxMLCAqeHRhcmdldCwKLSAgICAgICAgICAgICAgICAqc2VudGluZWwgPSBzb3VyY2UgKyBsZW5ndGg7Ci0gICAgcmNoYXIgKnRzdGFydCA9IHRhcmdldDsKLSAgICBpbnQgcG9zdF9yZWdleCA9IDA7Ci0gICAgcmNoYXIgYywgcXVvdGUsIHNwYWNlZCA9IFUoJyAnKTsKLQotICAgIHdoaWxlIChzb3VyY2UgPCBzZW50aW5lbCkgewotICAgICAgICBjID0gKnNvdXJjZSsrOwotICAgICAgICBpZiAoUkpTTUlOX0lTX0RVTEwoYykpIHsKLSAgICAgICAgICAgIGlmIChwb3N0X3JlZ2V4KSBwb3N0X3JlZ2V4ID0gMDsKLSAgICAgICAgICAgIGlmIChwY3Rva2VuKSBwY3Rva2VuID0gTlVMTDsKLSAgICAgICAgICAgIGlmIChzcGFjZWQgPT0gVSgnXG4nKSkgc3BhY2VkID0gVSgnICcpOwotCi0gICAgICAgICAgICAqdGFyZ2V0KysgPSBjOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0KLSAgICAgICAgLyogU3RyaW5nICovCi0gICAgICAgIGNhc2UgVSgnXCcnKTogY2FzZSBVKCciJyk6Ci0gICAgICAgICAgICBpZiAocG9zdF9yZWdleCkgcG9zdF9yZWdleCA9IDA7Ci0gICAgICAgICAgICBpZiAocGN0b2tlbikgcGN0b2tlbiA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAoc3BhY2VkID09IFUoJ1xuJykpIHNwYWNlZCA9IFUoJyAnKTsKLQotICAgICAgICAgICAgcmVzZXQgPSBzb3VyY2U7Ci0gICAgICAgICAgICAqdGFyZ2V0KysgPSBxdW90ZSA9IGM7Ci0gICAgICAgICAgICB3aGlsZSAoc291cmNlIDwgc2VudGluZWwpIHsKLSAgICAgICAgICAgICAgICBjID0gKnNvdXJjZSsrOwotICAgICAgICAgICAgICAgICp0YXJnZXQrKyA9IGM7Ci0gICAgICAgICAgICAgICAgaWYgKFJKU01JTl9JU19TVFJJTkdfRFVMTChjKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBVKCdcJycpOiBjYXNlIFUoJyInKToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gcXVvdGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGNvbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGNhc2UgVSgnXFwnKToKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA8IHNlbnRpbmVsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gKnNvdXJjZSsrOwotICAgICAgICAgICAgICAgICAgICAgICAgKnRhcmdldCsrID0gYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09IFUoJ1xyJykgJiYgc291cmNlIDwgc2VudGluZWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAqc291cmNlID09IFUoJ1xuJykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhcmdldCsrID0gKnNvdXJjZSsrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRhcmdldCAtPSBzb3VyY2UgLSByZXNldDsKLSAgICAgICAgICAgIHNvdXJjZSA9IHJlc2V0OwotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogQ29tbWVudCBvciBSZWdleCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSAqLwotICAgICAgICBjYXNlIFUoJy8nKToKLSAgICAgICAgICAgIGlmICghKHNvdXJjZSA8IHNlbnRpbmVsKSkgewotICAgICAgICAgICAgICAgIGlmIChwb3N0X3JlZ2V4KSBwb3N0X3JlZ2V4ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAocGN0b2tlbikgcGN0b2tlbiA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgaWYgKHNwYWNlZCA9PSBVKCdcbicpKSBzcGFjZWQgPSBVKCcgJyk7Ci0KLSAgICAgICAgICAgICAgICAqdGFyZ2V0KysgPSBjOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICgqc291cmNlKSB7Ci0gICAgICAgICAgICAvKiBDb21tZW50ICovCi0gICAgICAgICAgICAgICAgY2FzZSBVKCcqJyk6IGNhc2UgVSgnLycpOgotICAgICAgICAgICAgICAgICAgICBnb3RvIHNraXBfb3JfY29weV93czsKLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHh0YXJnZXQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpZiAoICAgdGFyZ2V0ID09IHRzdGFydAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgUkpTTUlOX0lTX1BSRV9SRUdFWF8xKCooKHBjdG9rZW4gPyBwY3Rva2VuIDogdGFyZ2V0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeHRhcmdldCA9IHBjdG9rZW4gPyBwY3Rva2VuIDogdGFyZ2V0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICh4dGFyZ2V0IC0gdHN0YXJ0ID49IDYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKih4dGFyZ2V0IC0gMSkgPT0gVSgnbicpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKih4dGFyZ2V0IC0gMikgPT0gVSgncicpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKih4dGFyZ2V0IC0gMykgPT0gVSgndScpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKih4dGFyZ2V0IC0gNCkgPT0gVSgndCcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKih4dGFyZ2V0IC0gNSkgPT0gVSgnZScpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKih4dGFyZ2V0IC0gNikgPT0gVSgncicpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4dGFyZ2V0IC0gdHN0YXJ0ID09IDYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIVJKU01JTl9JU19JRF9MSVRFUkFMKCooeHRhcmdldCAtIDcpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgICkpIHsKLQotICAgICAgICAgICAgLyogUmVnZXggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3N0X3JlZ2V4KSBwb3N0X3JlZ2V4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwY3Rva2VuKSBwY3Rva2VuID0gTlVMTDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQgPSBzb3VyY2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BhY2VkID09IFUoJ1xuJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZWQgPSBVKCcgJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHh0YXJnZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YXJnZXQrKyA9IFUoJ1xuJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICp0YXJnZXQrKyA9IFUoJy8nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzb3VyY2UgPCBzZW50aW5lbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAqc291cmNlKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhcmdldCsrID0gYzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUkpTTUlOX0lTX1JFR0VYX0RVTEwoYykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVSgnLycpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0X3JlZ2V4ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjb250OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVSgnXFwnKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA8IHNlbnRpbmVsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gKnNvdXJjZSsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhcmdldCsrID0gYzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09IFUoJ1xyJykgfHwgYyA9PSBVKCdcbicpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVSgnWycpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc291cmNlIDwgc2VudGluZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAqc291cmNlKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGFyZ2V0KysgPSBjOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJKU01JTl9JU19SRUdFWF9DQ19EVUxMKGMpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFUoJ1xcJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA8IHNlbnRpbmVsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAqc291cmNlKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YXJnZXQrKyA9IGM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09IFUoJ1xyJykgfHwgYyA9PSBVKCdcbicpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBVKCddJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjb250X3JlZ2V4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRfcmVnZXg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgLT0gc291cmNlIC0gcmVzZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSByZXNldDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIEp1c3QgYSBzbGFzaCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3RfcmVnZXgpIHBvc3RfcmVnZXggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBjdG9rZW4pIHBjdG9rZW4gPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYWNlZCA9PSBVKCdcbicpKSBzcGFjZWQgPSBVKCcgJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICp0YXJnZXQrKyA9IGM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogV2hpdGVzcGFjZSAqLwotICAgICAgICBkZWZhdWx0OgotICAgICAgICBza2lwX29yX2NvcHlfd3M6Ci0gICAgICAgICAgICBxdW90ZSA9IFUoJyAnKTsKLSAgICAgICAgICAgIC0tc291cmNlOwotICAgICAgICAgICAgd2hpbGUgKHNvdXJjZSA8IHNlbnRpbmVsKSB7Ci0gICAgICAgICAgICAgICAgYyA9ICpzb3VyY2UrKzsKLSAgICAgICAgICAgICAgICBpZiAoUkpTTUlOX0lTX1NQQUNFKGMpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFUoJ1xyJyk6IGNhc2UgVSgnXG4nKToKLSAgICAgICAgICAgICAgICAgICAgcXVvdGUgPSBVKCdcbicpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBjYXNlIFUoJy8nKToKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA8IHNlbnRpbmVsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCpzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVSgnKicpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0ID0gc291cmNlKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29weSBiYW5nIGNvbW1lbnQsIGlmIHJlcXVlc3RlZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggICBrZWVwX2JhbmdfY29tbWVudHMgJiYgc291cmNlIDwgc2VudGluZWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKnNvdXJjZSA9PSBVKCchJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwY3Rva2VuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY3Rva2VuID0gdGFyZ2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNyZXNldCA9IHJlc2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhcmdldCsrID0gVSgnLycpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGFyZ2V0KysgPSBVKCcqJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YXJnZXQrKyA9ICpzb3VyY2UrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHNvdXJjZSA8IHNlbnRpbmVsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gKnNvdXJjZSsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhcmdldCsrID0gYzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09IFUoJyonKSAmJiBzb3VyY2UgPCBzZW50aW5lbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICpzb3VyY2UgPT0gVSgnLycpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhcmdldCsrID0gKnNvdXJjZSsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc2V0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IC09IHNvdXJjZSAtIHJlc2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSByZXNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBjcmVzZXQgPT0gcmVzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjdG9rZW4gPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNyZXNldCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHJpcCByZWd1bGFyIGNvbW1lbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHNvdXJjZSA8IHNlbnRpbmVsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gKnNvdXJjZSsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gVSgnKicpICYmIHNvdXJjZSA8IHNlbnRpbmVsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKnNvdXJjZSA9PSBVKCcvJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3NvdXJjZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNldCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSByZXNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhcmdldCsrID0gVSgnLycpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGNvbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFUoJy8nKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3NvdXJjZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc291cmNlIDwgc2VudGluZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICpzb3VyY2UrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVSgnXG4nKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFUoJ1xyJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlIDwgc2VudGluZWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAqc291cmNlID09IFUoJ1xuJykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytzb3VyY2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZSA9IFUoJ1xuJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLS1zb3VyY2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgodHN0YXJ0IDwgKHBjdG9rZW4gPyBwY3Rva2VuIDogdGFyZ2V0KSAmJiBzb3VyY2UgPCBzZW50aW5lbCkKLSAgICAgICAgICAgICAgICAmJiAoKHF1b3RlID09IFUoJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgICYmICgoUkpTTUlOX0lTX0lEX0xJVEVSQUxfQ0xPU0UoKigocGN0b2tlbiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjdG9rZW4gOiB0YXJnZXQpIC0gMSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICYmIFJKU01JTl9JU19JRF9MSVRFUkFMX09QRU4oKnNvdXJjZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHBvc3RfcmVnZXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgUkpTTUlOX0lTX1BPU1RfUkVHRVhfT0ZGKCpzb3VyY2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEocG9zdF9yZWdleCA9IDApKSkpCi0gICAgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAgICAgICAgICAgICAgIChxdW90ZSA9PSBVKCcgJykgJiYgIXBjdG9rZW4KLSAgICAgICAgICAgICAgICAgICAgICYmICgoUkpTTUlOX0lTX0lEX0xJVEVSQUwoKih0YXJnZXQgLSAxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgUkpTTUlOX0lTX0lEX0xJVEVSQUwoKnNvdXJjZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHNvdXJjZSA8IHNlbnRpbmVsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgoKih0YXJnZXQgLSAxKSA9PSBVKCcrJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAqc291cmNlID09IFUoJysnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgqKHRhcmdldCAtIDEpID09IFUoJy0nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICpzb3VyY2UgPT0gVSgnLScpKSkpKSkpKSB7Ci0gICAgICAgICAgICAgICAgKnRhcmdldCsrID0gcXVvdGU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBjcmVzZXQgPSBOVUxMOwotICAgICAgICAgICAgc3BhY2VkID0gcXVvdGU7Ci0gICAgICAgIH0KLSAgICBjb250OgotICAgICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgcmV0dXJuIChQeV9zc2l6ZV90KSh0YXJnZXQgLSB0c3RhcnQpOwotfQotCi0KLVB5RG9jX1NUUlZBUihyanNtaW5fanNtaW5fX2RvY19fLAotImpzbWluKHNjcmlwdCwga2VlcF9iYW5nX2NvbW1lbnRzPUZhbHNlKVxuXAotXG5cCi1NaW5pZnkgamF2YXNjcmlwdCBiYXNlZCBvbiBganNtaW4uYyBieSBEb3VnbGFzIENyb2NrZm9yZGBfXFwuXG5cCi1cblwKLUluc3RlYWQgb2YgcGFyc2luZyB0aGUgc3RyZWFtIGNoYXIgYnkgY2hhciwgaXQgdXNlcyBhIHJlZ3VsYXJcblwKLWV4cHJlc3Npb24gYXBwcm9hY2ggd2hpY2ggbWluaWZpZXMgdGhlIHdob2xlIHNjcmlwdCB3aXRoIG9uZSBiaWdcblwKLXN1YnN0aXR1dGlvbiByZWdleC5cblwKLVxuXAotLi4gX2pzbWluLmMgYnkgRG91Z2xhcyBDcm9ja2ZvcmQ6XG5cCi0gICBodHRwOi8vd3d3LmNyb2NrZm9yZC5jb20vamF2YXNjcmlwdC9qc21pbi5jXG5cCi1cblwKLTpOb3RlOiBUaGlzIGlzIGEgaGFuZCBjcmFmdGVkIEMgaW1wbGVtZW50YXRpb24gYnVpbHQgb24gdGhlIHJlZ2V4XG5cCi0gICAgICAgc2VtYW50aWNzLlxuXAotXG5cCi06UGFyYW1ldGVyczpcblwKLSAgYHNjcmlwdGAgOiBgYHN0cmBgXG5cCi0gICAgU2NyaXB0IHRvIG1pbmlmeVxuXAotXG5cCi0gIGBrZWVwX2JhbmdfY29tbWVudHNgIDogYGBib29sYGBcblwKLSAgICBLZWVwIGNvbW1lbnRzIHN0YXJ0aW5nIHdpdGggYW4gZXhjbGFtYXRpb24gbWFyaz8gKGBgLyohLi4uKi9gYClcblwKLVxuXAotOlJldHVybjogTWluaWZpZWQgc2NyaXB0XG5cCi06UnR5cGU6IGBgc3RyYGAiKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLXJqc21pbl9qc21pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQotewotICAgIFB5T2JqZWN0ICpzY3JpcHQsICprZWVwX2JhbmdfY29tbWVudHNfID0gTlVMTCwgKnJlc3VsdDsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InNjcmlwdCIsICJrZWVwX2JhbmdfY29tbWVudHMiLCBOVUxMfTsKLSAgICBQeV9zc2l6ZV90IHNsZW5ndGgsIGxlbmd0aDsKLSAgICBpbnQga2VlcF9iYW5nX2NvbW1lbnRzOwotI2lmZGVmIEVYVDIKLSAgICBpbnQgdW5pOwotI2RlZmluZSBVT0JKICJPIgotI2VuZGlmCi0jaWZkZWYgRVhUMwotI2RlZmluZSBVT0JKICJVIgotI2VuZGlmCi0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCBVT0JKICJ8TyIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2NyaXB0LCAma2VlcF9iYW5nX2NvbW1lbnRzXykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKCFrZWVwX2JhbmdfY29tbWVudHNfKQotICAgICAgICBrZWVwX2JhbmdfY29tbWVudHMgPSAwOwotICAgIGVsc2UgewotICAgICAgICBrZWVwX2JhbmdfY29tbWVudHMgPSBQeU9iamVjdF9Jc1RydWUoa2VlcF9iYW5nX2NvbW1lbnRzXyk7Ci0gICAgICAgIGlmIChrZWVwX2JhbmdfY29tbWVudHMgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSNpZmRlZiBFWFQyCi0gICAgaWYgKFB5VW5pY29kZV9DaGVjayhzY3JpcHQpKSB7Ci0gICAgICAgIGlmICghKHNjcmlwdCA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmcoc2NyaXB0KSkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgdW5pID0gMTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghKHNjcmlwdCA9IFB5T2JqZWN0X1N0cihzY3JpcHQpKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB1bmkgPSAwOwotICAgIH0KLSNlbmRpZgotCi0jaWZkZWYgRVhUMwotICAgIFB5X0lOQ1JFRihzY3JpcHQpOwotI2RlZmluZSBQeVN0cmluZ19HRVRfU0laRSBQeVVuaWNvZGVfR0VUX1NJWkUKLSNkZWZpbmUgUHlTdHJpbmdfQVNfU1RSSU5HIFB5VW5pY29kZV9BU19VTklDT0RFCi0jZGVmaW5lIF9QeVN0cmluZ19SZXNpemUgUHlVbmljb2RlX1Jlc2l6ZQotI2RlZmluZSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUKLSNlbmRpZgotCi0gICAgc2xlbmd0aCA9IFB5U3RyaW5nX0dFVF9TSVpFKHNjcmlwdCk7Ci0gICAgaWYgKCEocmVzdWx0ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2xlbmd0aCkpKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzY3JpcHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGxlbmd0aCA9IHJqc21pbigocmNoYXIgKilQeVN0cmluZ19BU19TVFJJTkcoc2NyaXB0KSwKLSAgICAgICAgICAgICAgICAgICAgKHJjaGFyICopUHlTdHJpbmdfQVNfU1RSSU5HKHJlc3VsdCksCi0gICAgICAgICAgICAgICAgICAgIHNsZW5ndGgsIGtlZXBfYmFuZ19jb21tZW50cyk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIFB5X0RFQ1JFRihzY3JpcHQpOwotICAgIGlmIChsZW5ndGggPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGxlbmd0aCAhPSBzbGVuZ3RoICYmIF9QeVN0cmluZ19SZXNpemUoJnJlc3VsdCwgbGVuZ3RoKSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSNpZmRlZiBFWFQyCi0gICAgaWYgKHVuaSkgewotICAgICAgICBzY3JpcHQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChQeVN0cmluZ19BU19TVFJJTkcocmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfR0VUX1NJWkUocmVzdWx0KSwgInN0cmljdCIpOwotICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgICAgaWYgKCFzY3JpcHQpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcmVzdWx0ID0gc2NyaXB0OwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTiBNT0RVTEUgREVGSU5JVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotRVhUX01FVEhPRFMgPSB7Ci0gICAgeyJqc21pbiIsCi0gICAgICAgIChQeUNGdW5jdGlvbilyanNtaW5fanNtaW4sIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgIHJqc21pbl9qc21pbl9fZG9jX199LAotCi0gICAge05VTEx9ICAvKiBTZW50aW5lbCAqLwotfTsKLQotUHlEb2NfU1RSVkFSKEVYVF9ET0NTX1ZBUiwKLSJDIGltcGxlbWVudGF0aW9uIG9mIHJqc21pblxuXAotPT09PT09PT09PT09PT09PT09PT09PT09PT1cblwKLVxuXAotQyBpbXBsZW1lbnRhdGlvbiBvZiByanNtaW4uIik7Ci0KLQotRVhUX0RFRklORShFWFRfTU9EVUxFX05BTUUsIEVYVF9NRVRIT0RTX1ZBUiwgRVhUX0RPQ1NfVkFSKTsKLQotRVhUX0lOSVRfRlVOQyB7Ci0gICAgUHlPYmplY3QgKm07Ci0KLSAgICAvKiBDcmVhdGUgdGhlIG1vZHVsZSBhbmQgcG9wdWxhdGUgc3R1ZmYgKi8KLSAgICBpZiAoIShtID0gRVhUX0NSRUFURSgmRVhUX0RFRklORV9WQVIpKSkKLSAgICAgICAgRVhUX0lOSVRfRVJST1IoTlVMTCk7Ci0KLSAgICBFWFRfQUREX1VOSUNPREUobSwgIl9fYXV0aG9yX18iLCAiQW5kclx4ZTkgTWFsbyIsICJsYXRpbi0xIik7Ci0gICAgRVhUX0FERF9TVFJJTkcobSwgIl9fZG9jZm9ybWF0X18iLCAicmVzdHJ1Y3R1cmVkdGV4dCBlbiIpOwotCi0gICAgRVhUX0lOSVRfUkVUVVJOKG0pOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORCBNT0RVTEUgREVGSU5JVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9yanNtaW4ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9yanNtaW4ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDU0ZTIwZWMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vcmpzbWluLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTE1ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyAtKi0gY29kaW5nOiBhc2NpaSAtKi0KLXIiIiIKLT09PT09PT09PT09PT09PT09PT09PQotIEphdmFzY3JpcHQgTWluaWZpZXIKLT09PT09PT09PT09PT09PT09PT09PQotCi1ySlNtaW4gaXMgYSBqYXZhc2NyaXB0IG1pbmlmaWVyIHdyaXR0ZW4gaW4gcHl0aG9uLgotCi1UaGUgbWluaWZpZXIgaXMgYmFzZWQgb24gdGhlIHNlbWFudGljcyBvZiBganNtaW4uYyBieSBEb3VnbGFzIENyb2NrZm9yZGBfXFwuCi0KLTpDb3B5cmlnaHQ6Ci0KLSBDb3B5cmlnaHQgMjAxMSAtIDIwMTUKLSBBbmRyXHhlOSBNYWxvIG9yIGhpcyBsaWNlbnNvcnMsIGFzIGFwcGxpY2FibGUKLQotOkxpY2Vuc2U6Ci0KLSBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLVRoZSBtb2R1bGUgaXMgYSByZS1pbXBsZW1lbnRhdGlvbiBhaW1pbmcgZm9yIHNwZWVkLCBzbyBpdCBjYW4gYmUgdXNlZCBhdAotcnVudGltZSAocmF0aGVyIHRoYW4gZHVyaW5nIGEgcHJlcHJvY2Vzc2luZyBzdGVwKS4gVXN1YWxseSBpdCBwcm9kdWNlcyB0aGUKLXNhbWUgcmVzdWx0cyBhcyB0aGUgb3JpZ2luYWwgYGBqc21pbi5jYGAuIEl0IGRpZmZlcnMgaW4gdGhlIGZvbGxvd2luZyB3YXlzOgotCi0tIHRoZXJlIGlzIG5vIGVycm9yIGRldGVjdGlvbjogdW50ZXJtaW5hdGVkIHN0cmluZywgcmVnZXggYW5kIGNvbW1lbnQKLSAgbGl0ZXJhbHMgYXJlIHRyZWF0ZWQgYXMgcmVndWxhciBqYXZhc2NyaXB0IGNvZGUgYW5kIG1pbmlmaWVkIGFzIHN1Y2guCi0tIENvbnRyb2wgY2hhcmFjdGVycyBpbnNpZGUgc3RyaW5nIGFuZCByZWdleCBsaXRlcmFscyBhcmUgbGVmdCB1bnRvdWNoZWQ7IHRoZXkKLSAgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gc3BhY2VzIChub3IgdG8gXFxuKQotLSBOZXdsaW5lIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkIGluc2lkZSBzdHJpbmcgYW5kIHJlZ2V4IGxpdGVyYWxzLCBleGNlcHQKLSAgZm9yIGxpbmUgY29udGludWF0aW9ucyBpbiBzdHJpbmcgbGl0ZXJhbHMgKEVDTUEtNSkuCi0tICJyZXR1cm4gL3JlZ2V4LyIgaXMgcmVjb2duaXplZCBjb3JyZWN0bHkuCi0tIExpbmUgdGVybWluYXRvcnMgYWZ0ZXIgcmVnZXggbGl0ZXJhbHMgYXJlIGhhbmRsZWQgbW9yZSBzZW5zaWJseQotLSAiKyArIiBhbmQgIi0gLSIgc2VxdWVuY2VzIGFyZSBub3QgY29sbGFwc2VkIHRvICcrKycgb3IgJy0tJwotLSBOZXdsaW5lcyBiZWZvcmUgISBvcGVyYXRvcnMgYXJlIHJlbW92ZWQgbW9yZSBzZW5zaWJseQotLSBDb21tZW50cyBzdGFydGluZyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmsgKGBgIWBgKSBjYW4gYmUga2VwdCBvcHRpb25hbGx5Ci0tIHJKU21pbiBkb2VzIG5vdCBoYW5kbGUgc3RyZWFtcywgYnV0IG9ubHkgY29tcGxldGUgc3RyaW5ncy4gKEhvd2V2ZXIsIHRoZQotICBtb2R1bGUgcHJvdmlkZXMgYSAic3RyZWFteSIgaW50ZXJmYWNlKS4KLQotU2luY2UgbW9zdCBwYXJ0cyBvZiB0aGUgbG9naWMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlZ2V4IGVuZ2luZSBpdCdzIHdheSBmYXN0ZXIKLXRoYW4gdGhlIG9yaWdpbmFsIHB5dGhvbiBwb3J0IG9mIGBganNtaW4uY2BgIGJ5IEJhcnVjaCBFdmVuLiBUaGUgc3BlZWQgZmFjdG9yCi12YXJpZXMgYmV0d2VlbiBhYm91dCA2IGFuZCA1NSBkZXBlbmRpbmcgb24gaW5wdXQgYW5kIHB5dGhvbiB2ZXJzaW9uIChpdCBnZXRzCi1mYXN0ZXIgdGhlIG1vcmUgY29tcHJlc3NlZCB0aGUgaW5wdXQgYWxyZWFkeSBpcykuIENvbXBhcmVkIHRvIHRoZQotc3BlZWQtcmVmYWN0b3JlZCBweXRob24gcG9ydCBieSBEYXZlIFN0Lkdlcm1haW4gdGhlIHBlcmZvcm1hbmNlIGdhaW4gaXMgbGVzcwotZHJhbWF0aWMgYnV0IHN0aWxsIGJldHdlZW4gMyBhbmQgNTAgKGZvciBodWdlIGlucHV0cykuIFNlZSB0aGUgZG9jcy9CRU5DSE1BUktTCi1maWxlIGZvciBkZXRhaWxzLgotCi1yanNtaW4uYyBpcyBhIHJlaW1wbGVtZW50YXRpb24gb2YgcmpzbWluLnB5IGluIEMgYW5kIHNwZWVkcyBpdCB1cCBldmVuIG1vcmUuCi0KLUJvdGggcHl0aG9uIDIgYW5kIHB5dGhvbiAzIGFyZSBzdXBwb3J0ZWQuCi0KLS4uIF9qc21pbi5jIGJ5IERvdWdsYXMgQ3JvY2tmb3JkOgotICAgaHR0cDovL3d3dy5jcm9ja2ZvcmQuY29tL2phdmFzY3JpcHQvanNtaW4uYwotIiIiCi1pZiBfX2RvY19fOgotICAgICMgcHlsaW50OiBkaXNhYmxlID0gcmVkZWZpbmVkLWJ1aWx0aW4KLSAgICBfX2RvY19fID0gX19kb2NfXy5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpCi1fX2F1dGhvcl9fID0gciJBbmRyXHhlOSBNYWxvIi5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpCi1fX2RvY2Zvcm1hdF9fID0gInJlc3RydWN0dXJlZHRleHQgZW4iCi1fX2xpY2Vuc2VfXyA9ICJBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAiCi1fX3ZlcnNpb25fXyA9ICcxLjAuMTInCi1fX2FsbF9fID0gWydqc21pbiddCi0KLWltcG9ydCByZSBhcyBfcmUKLQotCi1kZWYgX21ha2VfanNtaW4ocHl0aG9uX29ubHk9RmFsc2UpOgotICAgICIiIgotICAgIEdlbmVyYXRlIEpTIG1pbmlmaWVyIGJhc2VkIG9uIGBqc21pbi5jIGJ5IERvdWdsYXMgQ3JvY2tmb3JkYF8KLQotICAgIC4uIF9qc21pbi5jIGJ5IERvdWdsYXMgQ3JvY2tmb3JkOgotICAgICAgIGh0dHA6Ly93d3cuY3JvY2tmb3JkLmNvbS9qYXZhc2NyaXB0L2pzbWluLmMKLQotICAgIDpQYXJhbWV0ZXJzOgotICAgICAgYHB5dGhvbl9vbmx5YCA6IGBgYm9vbGBgCi0gICAgICAgIFVzZSBvbmx5IHRoZSBweXRob24gdmFyaWFudC4gSWYgdHJ1ZSwgdGhlIGMgZXh0ZW5zaW9uIGlzIG5vdCBldmVuCi0gICAgICAgIHRyaWVkIHRvIGJlIGxvYWRlZC4KLQotICAgIDpSZXR1cm46IE1pbmlmaWVyCi0gICAgOlJ0eXBlOiBgYGNhbGxhYmxlYGAKLSAgICAiIiIKLSAgICAjIHB5bGludDogZGlzYWJsZSA9IHVudXNlZC12YXJpYWJsZQotICAgICMgcHlsaW50OiBkaXNhYmxlID0gdG9vLW1hbnktbG9jYWxzCi0KLSAgICBpZiBub3QgcHl0aG9uX29ubHk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGltcG9ydCBfcmpzbWluCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBfcmpzbWluLmpzbWluCi0gICAgdHJ5OgotICAgICAgICB4cmFuZ2UKLSAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICB4cmFuZ2UgPSByYW5nZSAgIyBweWxpbnQ6IGRpc2FibGUgPSByZWRlZmluZWQtYnVpbHRpbgotCi0gICAgc3BhY2VfY2hhcnMgPSByJ1tcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF0nCi0KLSAgICBsaW5lX2NvbW1lbnQgPSByJyg/Oi8vW15cclxuXSopJwotICAgIHNwYWNlX2NvbW1lbnQgPSByJyg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdKlwqKykqLyknCi0gICAgc3BhY2VfY29tbWVudF9ub2JhbmcgPSByJyg/Oi9cKig/ISEpW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKScKLSAgICBiYW5nX2NvbW1lbnQgPSByJyg/Oi9cKiFbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pJwotCi0gICAgc3RyaW5nMSA9IFwKLSAgICAgICAgcicoPzpcMDQ3W15cMDQ3XFxcclxuXSooPzpcXCg/OlteXHJcbl18XHI/XG58XHIpW15cMDQ3XFxcclxuXSopKlwwNDcpJwotICAgIHN0cmluZzIgPSByJyg/OiJbXiJcXFxyXG5dKig/OlxcKD86W15cclxuXXxccj9cbnxccilbXiJcXFxyXG5dKikqIiknCi0gICAgc3RyaW5nMyA9IHInKD86YCg/OlteYFxcXXxcXC4pKmApJwotICAgIHN0cmluZ3MgPSByJyg/OiVzfCVzfCVzKScgJSAoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMykKLQotICAgIGNoYXJjbGFzcyA9IHInKD86XFtbXlxcXF1cclxuXSooPzpcXFteXHJcbl1bXlxcXF1cclxuXSopKlxdKScKLSAgICBub3NwZWNpYWwgPSByJ1teL1xcXFtcclxuXScKLSAgICByZWdleCA9IHInKD86Lyg/IVtcclxuLypdKSVzKig/Oig/OlxcW15cclxuXXwlcyklcyopKi8pJyAlICgKLSAgICAgICAgbm9zcGVjaWFsLCBjaGFyY2xhc3MsIG5vc3BlY2lhbAotICAgICkKLSAgICBzcGFjZSA9IHInKD86JXN8JXMpJyAlIChzcGFjZV9jaGFycywgc3BhY2VfY29tbWVudCkKLSAgICBuZXdsaW5lID0gcicoPzolcz9bXHJcbl0pJyAlIGxpbmVfY29tbWVudAotCi0gICAgZGVmIGZpeF9jaGFyY2xhc3MocmVzdWx0KToKLSAgICAgICAgIiIiIEZpeHVwIHN0cmluZyBvZiBjaGFycyB0byBmaXQgaW50byBhIHJlZ2V4IGNoYXIgY2xhc3MgIiIiCi0gICAgICAgIHBvcyA9IHJlc3VsdC5maW5kKCctJykKLSAgICAgICAgaWYgcG9zID49IDA6Ci0gICAgICAgICAgICByZXN1bHQgPSByJyVzJXMtJyAlIChyZXN1bHRbOnBvc10sIHJlc3VsdFtwb3MgKyAxOl0pCi0KLSAgICAgICAgZGVmIHNlcXVlbnRpemUoc3RyaW5nKToKLSAgICAgICAgICAgICIiIgotICAgICAgICAgICAgTm90YXRlIGNvbnNlY3V0aXZlIGNoYXJhY3RlcnMgYXMgc2VxdWVuY2UKLQotICAgICAgICAgICAgKDEtNCBpbnN0ZWFkIG9mIDEyMzQpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIGZpcnN0LCBsYXN0LCByZXN1bHQgPSBOb25lLCBOb25lLCBbXQotICAgICAgICAgICAgZm9yIGNoYXIgaW4gbWFwKG9yZCwgc3RyaW5nKToKLSAgICAgICAgICAgICAgICBpZiBsYXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gbGFzdCA9IGNoYXIKLSAgICAgICAgICAgICAgICBlbGlmIGxhc3QgKyAxID09IGNoYXI6Ci0gICAgICAgICAgICAgICAgICAgIGxhc3QgPSBjaGFyCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgoZmlyc3QsIGxhc3QpKQotICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGxhc3QgPSBjaGFyCi0gICAgICAgICAgICBpZiBsYXN0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKGZpcnN0LCBsYXN0KSkKLSAgICAgICAgICAgIHJldHVybiAnJy5qb2luKFsnJXMlcyVzJyAlICgKLSAgICAgICAgICAgICAgICBjaHIoZmlyc3QpLAotICAgICAgICAgICAgICAgIGxhc3QgPiBmaXJzdCArIDEgYW5kICctJyBvciAnJywKLSAgICAgICAgICAgICAgICBsYXN0ICE9IGZpcnN0IGFuZCBjaHIobGFzdCkgb3IgJycKLSAgICAgICAgICAgICkgZm9yIGZpcnN0LCBsYXN0IGluIHJlc3VsdF0pICAjIG5vcWEKLQotICAgICAgICByZXR1cm4gX3JlLnN1YigKLSAgICAgICAgICAgIHInKFtcMDAwLVwwNDBcMDQ3XSknLCAgIyBcMDQ3IGZvciBiZXR0ZXIgcG9ydGFiaWxpdHkKLSAgICAgICAgICAgIGxhbWJkYSBtOiAnXFwlMDNvJyAlIG9yZChtLmdyb3VwKDEpKSwgKAotICAgICAgICAgICAgICAgIHNlcXVlbnRpemUocmVzdWx0KQotICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXCcsICdcXFxcJykKLSAgICAgICAgICAgICAgICAucmVwbGFjZSgnWycsICdcXFsnKQotICAgICAgICAgICAgICAgIC5yZXBsYWNlKCddJywgJ1xcXScpCi0gICAgICAgICAgICApCi0gICAgICAgICkKLQotICAgIGRlZiBpZF9saXRlcmFsXyh3aGF0KToKLSAgICAgICAgIiIiIE1ha2UgaWRfbGl0ZXJhbCBsaWtlIGNoYXIgY2xhc3MgIiIiCi0gICAgICAgIG1hdGNoID0gX3JlLmNvbXBpbGUod2hhdCkubWF0Y2gKLSAgICAgICAgcmVzdWx0ID0gJycuam9pbihbCi0gICAgICAgICAgICBjaHIoYykgZm9yIGMgaW4geHJhbmdlKDEyNykgaWYgbm90IG1hdGNoKGNocihjKSkKLSAgICAgICAgXSkKLSAgICAgICAgcmV0dXJuICdbXiVzXScgJSBmaXhfY2hhcmNsYXNzKHJlc3VsdCkKLQotICAgIGRlZiBub3RfaWRfbGl0ZXJhbF8oa2VlcCk6Ci0gICAgICAgICIiIiBNYWtlIG5lZ2F0ZWQgaWRfbGl0ZXJhbCBsaWtlIGNoYXIgY2xhc3MgIiIiCi0gICAgICAgIG1hdGNoID0gX3JlLmNvbXBpbGUoaWRfbGl0ZXJhbF8oa2VlcCkpLm1hdGNoCi0gICAgICAgIHJlc3VsdCA9ICcnLmpvaW4oWwotICAgICAgICAgICAgY2hyKGMpIGZvciBjIGluIHhyYW5nZSgxMjcpIGlmIG5vdCBtYXRjaChjaHIoYykpCi0gICAgICAgIF0pCi0gICAgICAgIHJldHVybiByJ1slc10nICUgZml4X2NoYXJjbGFzcyhyZXN1bHQpCi0KLSAgICBub3RfaWRfbGl0ZXJhbCA9IG5vdF9pZF9saXRlcmFsXyhyJ1thLXpBLVowLTlfJF0nKQotICAgIHByZXJlZ2V4MSA9IHInWygsPTpcWyEmfD97fTtcclxuXScKLSAgICBwcmVyZWdleDIgPSByJyUobm90X2lkX2xpdGVyYWwpc3JldHVybicgJSBsb2NhbHMoKQotCi0gICAgaWRfbGl0ZXJhbCA9IGlkX2xpdGVyYWxfKHInW2EtekEtWjAtOV8kXScpCi0gICAgaWRfbGl0ZXJhbF9vcGVuID0gaWRfbGl0ZXJhbF8ocidbYS16QS1aMC05XyR7XFsoISstXScpCi0gICAgaWRfbGl0ZXJhbF9jbG9zZSA9IGlkX2xpdGVyYWxfKHInW2EtekEtWjAtOV8kfVxdKSJcMDQ3Ky1dJykKLSAgICBwb3N0X3JlZ2V4X29mZiA9IGlkX2xpdGVyYWxfKHInW15cMDAwLVwwNDB9XF0pPzp8LDsuJj0rLV0nKQotCi0gICAgZHVsbCA9IHInW15cMDQ3ImAvXDAwMC1cMDQwXScKLQotICAgIHNwYWNlX3N1Yl9zaW1wbGUgPSBfcmUuY29tcGlsZSgoCi0gICAgICAgICMgbm9xYSBweWxpbnQ6IGRpc2FibGUgPSBiYWQtY29udGludWF0aW9uCi0KLSAgICAgICAgcicoJShkdWxsKXMrKScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMAotICAgICAgICByJ3woJShzdHJpbmdzKXMlKGR1bGwpcyopJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAxCi0gICAgICAgIHInfCg/PD0lKHByZXJlZ2V4MSlzKScKLSAgICAgICAgICAgIHInJShzcGFjZSlzKig/OiUobmV3bGluZSlzJShzcGFjZSlzKikqJwotICAgICAgICAgICAgcicoJShyZWdleClzKScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAyCi0gICAgICAgICAgICByJyglKHNwYWNlKXMqKD86JShuZXdsaW5lKXMlKHNwYWNlKXMqKSsnICAgICAgICAgICAjIDMKLSAgICAgICAgICAgICAgICByJyg/PSUocG9zdF9yZWdleF9vZmYpcykpPycKLSAgICAgICAgcid8KD88PSUocHJlcmVnZXgyKXMpJwotICAgICAgICAgICAgciclKHNwYWNlKXMqKD86KCUobmV3bGluZSlzKSUoc3BhY2UpcyopKicgICAgICAgICAgIyA0Ci0gICAgICAgICAgICByJyglKHJlZ2V4KXMpJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDUKLSAgICAgICAgICAgIHInKCUoc3BhY2UpcyooPzolKG5ld2xpbmUpcyUoc3BhY2UpcyopKycgICAgICAgICAgICMgNgotICAgICAgICAgICAgICAgIHInKD89JShwb3N0X3JlZ2V4X29mZilzKSk/JwotICAgICAgICByJ3woPzw9JShpZF9saXRlcmFsX2Nsb3NlKXMpJwotICAgICAgICAgICAgciclKHNwYWNlKXMqKD86KCUobmV3bGluZSlzKSUoc3BhY2UpcyopKycgICAgICAgICAgIyA3Ci0gICAgICAgICAgICByJyg/PSUoaWRfbGl0ZXJhbF9vcGVuKXMpJwotICAgICAgICByJ3woPzw9JShpZF9saXRlcmFsKXMpKCUoc3BhY2UpcykrKD89JShpZF9saXRlcmFsKXMpJyAgIyA4Ci0gICAgICAgIHInfCg/PD1cKykoJShzcGFjZSlzKSsoPz1cKyknICAgICAgICAgICAgICAgICAgICAgICAgICAjIDkKLSAgICAgICAgcid8KD88PS0pKCUoc3BhY2UpcykrKD89LSknICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMTAKLSAgICAgICAgcid8JShzcGFjZSlzKycKLSAgICAgICAgcid8KD86JShuZXdsaW5lKXMlKHNwYWNlKXMqKSsnCi0gICAgKSAlIGxvY2FscygpKS5zdWIKLQotICAgICMgcHJpbnQgc3BhY2Vfc3ViX3NpbXBsZS5fX3NlbGZfXy5wYXR0ZXJuCi0KLSAgICBkZWYgc3BhY2Vfc3ViYmVyX3NpbXBsZShtYXRjaCk6Ci0gICAgICAgICIiIiBTdWJzdGl0dXRpb24gY2FsbGJhY2sgIiIiCi0gICAgICAgICMgcHlsaW50OiBkaXNhYmxlID0gdG9vLW1hbnktcmV0dXJuLXN0YXRlbWVudHMKLQotICAgICAgICBncm91cHMgPSBtYXRjaC5ncm91cHMoKQotICAgICAgICBpZiBncm91cHNbMF06Ci0gICAgICAgICAgICByZXR1cm4gZ3JvdXBzWzBdCi0gICAgICAgIGVsaWYgZ3JvdXBzWzFdOgotICAgICAgICAgICAgcmV0dXJuIGdyb3Vwc1sxXQotICAgICAgICBlbGlmIGdyb3Vwc1syXToKLSAgICAgICAgICAgIGlmIGdyb3Vwc1szXToKLSAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBzWzJdICsgJ1xuJwotICAgICAgICAgICAgcmV0dXJuIGdyb3Vwc1syXQotICAgICAgICBlbGlmIGdyb3Vwc1s1XToKLSAgICAgICAgICAgIHJldHVybiAiJXMlcyVzIiAlICgKLSAgICAgICAgICAgICAgICBncm91cHNbNF0gYW5kICdcbicgb3IgJycsCi0gICAgICAgICAgICAgICAgZ3JvdXBzWzVdLAotICAgICAgICAgICAgICAgIGdyb3Vwc1s2XSBhbmQgJ1xuJyBvciAnJywKLSAgICAgICAgICAgICkKLSAgICAgICAgZWxpZiBncm91cHNbN106Ci0gICAgICAgICAgICByZXR1cm4gJ1xuJwotICAgICAgICBlbGlmIGdyb3Vwc1s4XSBvciBncm91cHNbOV0gb3IgZ3JvdXBzWzEwXToKLSAgICAgICAgICAgIHJldHVybiAnICcKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAnJwotCi0gICAgc3BhY2Vfc3ViX2JhbmdlZCA9IF9yZS5jb21waWxlKCgKLSAgICAgICAgIyBub3FhIHB5bGludDogZGlzYWJsZSA9IGJhZC1jb250aW51YXRpb24KLQotICAgICAgICByJyglKGR1bGwpcyspJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAwCi0gICAgICAgIHInfCglKHN0cmluZ3MpcyUoZHVsbClzKiknICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDEKLSAgICAgICAgcid8KD88PSUocHJlcmVnZXgxKXMpJwotICAgICAgICAgICAgcicoJShzcGFjZSlzKig/OiUobmV3bGluZSlzJShzcGFjZSlzKikqKScgICAgICAgICAgIyAyCi0gICAgICAgICAgICByJyglKHJlZ2V4KXMpJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDMKLSAgICAgICAgICAgIHInKCUoc3BhY2UpcyooPzolKG5ld2xpbmUpcyUoc3BhY2UpcyopKycgICAgICAgICAgICMgNAotICAgICAgICAgICAgICAgIHInKD89JShwb3N0X3JlZ2V4X29mZilzKSk/JwotICAgICAgICByJ3woPzw9JShwcmVyZWdleDIpcyknCi0gICAgICAgICAgICByJyglKHNwYWNlKXMqKD86KCUobmV3bGluZSlzKSUoc3BhY2UpcyopKiknICAgICAgICAjIDUsIDYKLSAgICAgICAgICAgIHInKCUocmVnZXgpcyknICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgNwotICAgICAgICAgICAgcicoJShzcGFjZSlzKig/OiUobmV3bGluZSlzJShzcGFjZSlzKikrJyAgICAgICAgICAgIyA4Ci0gICAgICAgICAgICAgICAgcicoPz0lKHBvc3RfcmVnZXhfb2ZmKXMpKT8nCi0gICAgICAgIHInfCg/PD0lKGlkX2xpdGVyYWxfY2xvc2UpcyknCi0gICAgICAgICAgICByJyglKHNwYWNlKXMqKD86JShuZXdsaW5lKXMlKHNwYWNlKXMqKSspJyAgICAgICAgICAjIDkKLSAgICAgICAgICAgIHInKD89JShpZF9saXRlcmFsX29wZW4pcyknCi0gICAgICAgIHInfCg/PD0lKGlkX2xpdGVyYWwpcykoJShzcGFjZSlzKykoPz0lKGlkX2xpdGVyYWwpcyknICAjIDEwCi0gICAgICAgIHInfCg/PD1cKykoJShzcGFjZSlzKykoPz1cKyknICAgICAgICAgICAgICAgICAgICAgICAgICAjIDExCi0gICAgICAgIHInfCg/PD0tKSglKHNwYWNlKXMrKSg/PS0pJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDEyCi0gICAgICAgIHInfCglKHNwYWNlKXMrKScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDEzCi0gICAgICAgIHInfCgoPzolKG5ld2xpbmUpcyUoc3BhY2UpcyopKyknICAgICAgICAgICAgICAgICAgICAgICAjIDE0Ci0gICAgKSAlIGxvY2FscygpKS5zdWIKLQotICAgICMgcHJpbnQgc3BhY2Vfc3ViX2JhbmdlZC5fX3NlbGZfXy5wYXR0ZXJuCi0KLSAgICBrZWVwID0gX3JlLmNvbXBpbGUoKAotICAgICAgICByJyUoc3BhY2VfY2hhcnMpcyt8JShzcGFjZV9jb21tZW50X25vYmFuZylzK3wlKG5ld2xpbmUpcysnCi0gICAgICAgIHInfCglKGJhbmdfY29tbWVudClzKyknCi0gICAgKSAlIGxvY2FscygpKS5zdWIKLSAgICBrZWVwZXIgPSBsYW1iZGEgbTogbS5ncm91cHMoKVswXSBvciAnJwotCi0gICAgIyBwcmludCBrZWVwLl9fc2VsZl9fLnBhdHRlcm4KLQotICAgIGRlZiBzcGFjZV9zdWJiZXJfYmFuZ2VkKG1hdGNoKToKLSAgICAgICAgIiIiIFN1YnN0aXR1dGlvbiBjYWxsYmFjayAiIiIKLSAgICAgICAgIyBweWxpbnQ6IGRpc2FibGUgPSB0b28tbWFueS1yZXR1cm4tc3RhdGVtZW50cwotCi0gICAgICAgIGdyb3VwcyA9IG1hdGNoLmdyb3VwcygpCi0gICAgICAgIGlmIGdyb3Vwc1swXToKLSAgICAgICAgICAgIHJldHVybiBncm91cHNbMF0KLSAgICAgICAgZWxpZiBncm91cHNbMV06Ci0gICAgICAgICAgICByZXR1cm4gZ3JvdXBzWzFdCi0gICAgICAgIGVsaWYgZ3JvdXBzWzNdOgotICAgICAgICAgICAgcmV0dXJuICIlcyVzJXMlcyIgJSAoCi0gICAgICAgICAgICAgICAga2VlcChrZWVwZXIsIGdyb3Vwc1syXSksCi0gICAgICAgICAgICAgICAgZ3JvdXBzWzNdLAotICAgICAgICAgICAgICAgIGtlZXAoa2VlcGVyLCBncm91cHNbNF0gb3IgJycpLAotICAgICAgICAgICAgICAgIGdyb3Vwc1s0XSBhbmQgJ1xuJyBvciAnJywKLSAgICAgICAgICAgICkKLSAgICAgICAgZWxpZiBncm91cHNbN106Ci0gICAgICAgICAgICByZXR1cm4gIiVzJXMlcyVzJXMiICUgKAotICAgICAgICAgICAgICAgIGtlZXAoa2VlcGVyLCBncm91cHNbNV0pLAotICAgICAgICAgICAgICAgIGdyb3Vwc1s2XSBhbmQgJ1xuJyBvciAnJywKLSAgICAgICAgICAgICAgICBncm91cHNbN10sCi0gICAgICAgICAgICAgICAga2VlcChrZWVwZXIsIGdyb3Vwc1s4XSBvciAnJyksCi0gICAgICAgICAgICAgICAgZ3JvdXBzWzhdIGFuZCAnXG4nIG9yICcnLAotICAgICAgICAgICAgKQotICAgICAgICBlbGlmIGdyb3Vwc1s5XToKLSAgICAgICAgICAgIHJldHVybiBrZWVwKGtlZXBlciwgZ3JvdXBzWzldKSArICdcbicKLSAgICAgICAgZWxpZiBncm91cHNbMTBdIG9yIGdyb3Vwc1sxMV0gb3IgZ3JvdXBzWzEyXToKLSAgICAgICAgICAgIHJldHVybiBrZWVwKGtlZXBlciwgZ3JvdXBzWzEwXSBvciBncm91cHNbMTFdIG9yIGdyb3Vwc1sxMl0pIG9yICcgJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIGtlZXAoa2VlcGVyLCBncm91cHNbMTNdIG9yIGdyb3Vwc1sxNF0pCi0KLSAgICBkZWYganNtaW4oc2NyaXB0LCBrZWVwX2JhbmdfY29tbWVudHM9RmFsc2UpOgotICAgICAgICByIiIiCi0gICAgICAgIE1pbmlmeSBqYXZhc2NyaXB0IGJhc2VkIG9uIGBqc21pbi5jIGJ5IERvdWdsYXMgQ3JvY2tmb3JkYF9cLgotCi0gICAgICAgIEluc3RlYWQgb2YgcGFyc2luZyB0aGUgc3RyZWFtIGNoYXIgYnkgY2hhciwgaXQgdXNlcyBhIHJlZ3VsYXIKLSAgICAgICAgZXhwcmVzc2lvbiBhcHByb2FjaCB3aGljaCBtaW5pZmllcyB0aGUgd2hvbGUgc2NyaXB0IHdpdGggb25lIGJpZwotICAgICAgICBzdWJzdGl0dXRpb24gcmVnZXguCi0KLSAgICAgICAgLi4gX2pzbWluLmMgYnkgRG91Z2xhcyBDcm9ja2ZvcmQ6Ci0gICAgICAgICAgIGh0dHA6Ly93d3cuY3JvY2tmb3JkLmNvbS9qYXZhc2NyaXB0L2pzbWluLmMKLQotICAgICAgICA6UGFyYW1ldGVyczoKLSAgICAgICAgICBgc2NyaXB0YCA6IGBgc3RyYGAKLSAgICAgICAgICAgIFNjcmlwdCB0byBtaW5pZnkKLQotICAgICAgICAgIGBrZWVwX2JhbmdfY29tbWVudHNgIDogYGBib29sYGAKLSAgICAgICAgICAgIEtlZXAgY29tbWVudHMgc3RhcnRpbmcgd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrPyAoYGAvKiEuLi4qL2BgKQotCi0gICAgICAgIDpSZXR1cm46IE1pbmlmaWVkIHNjcmlwdAotICAgICAgICA6UnR5cGU6IGBgc3RyYGAKLSAgICAgICAgIiIiCi0gICAgICAgICMgcHlsaW50OiBkaXNhYmxlID0gcmVkZWZpbmVkLW91dGVyLW5hbWUKLQotICAgICAgICBpZiBrZWVwX2JhbmdfY29tbWVudHM6Ci0gICAgICAgICAgICByZXR1cm4gc3BhY2Vfc3ViX2JhbmdlZCgKLSAgICAgICAgICAgICAgICBzcGFjZV9zdWJiZXJfYmFuZ2VkLCAnXG4lc1xuJyAlIHNjcmlwdAotICAgICAgICAgICAgKS5zdHJpcCgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc3BhY2Vfc3ViX3NpbXBsZSgKLSAgICAgICAgICAgICAgICBzcGFjZV9zdWJiZXJfc2ltcGxlLCAnXG4lc1xuJyAlIHNjcmlwdAotICAgICAgICAgICAgKS5zdHJpcCgpCi0KLSAgICByZXR1cm4ganNtaW4KLQotanNtaW4gPSBfbWFrZV9qc21pbigpCi0KLQotZGVmIGpzbWluX2Zvcl9wb3NlcnMoc2NyaXB0LCBrZWVwX2JhbmdfY29tbWVudHM9RmFsc2UpOgotICAgIHIiIiIKLSAgICBNaW5pZnkgamF2YXNjcmlwdCBiYXNlZCBvbiBganNtaW4uYyBieSBEb3VnbGFzIENyb2NrZm9yZGBfXC4KLQotICAgIEluc3RlYWQgb2YgcGFyc2luZyB0aGUgc3RyZWFtIGNoYXIgYnkgY2hhciwgaXQgdXNlcyBhIHJlZ3VsYXIKLSAgICBleHByZXNzaW9uIGFwcHJvYWNoIHdoaWNoIG1pbmlmaWVzIHRoZSB3aG9sZSBzY3JpcHQgd2l0aCBvbmUgYmlnCi0gICAgc3Vic3RpdHV0aW9uIHJlZ2V4LgotCi0gICAgLi4gX2pzbWluLmMgYnkgRG91Z2xhcyBDcm9ja2ZvcmQ6Ci0gICAgICAgaHR0cDovL3d3dy5jcm9ja2ZvcmQuY29tL2phdmFzY3JpcHQvanNtaW4uYwotCi0gICAgOldhcm5pbmc6IFRoaXMgZnVuY3Rpb24gaXMgdGhlIGRpZ2VzdCBvZiBhIF9tYWtlX2pzbWluKCkgY2FsbC4gSXQganVzdAotICAgICAgICAgICAgICB1dGlsaXplcyB0aGUgcmVzdWx0aW5nIHJlZ2V4ZXMuIEl0J3MgaGVyZSBmb3IgZnVuIGFuZCBtYXkKLSAgICAgICAgICAgICAgdmFuaXNoIGFueSB0aW1lLiBVc2UgdGhlIGBqc21pbmAgZnVuY3Rpb24gaW5zdGVhZC4KLQotICAgIDpQYXJhbWV0ZXJzOgotICAgICAgYHNjcmlwdGAgOiBgYHN0cmBgCi0gICAgICAgIFNjcmlwdCB0byBtaW5pZnkKLQotICAgICAgYGtlZXBfYmFuZ19jb21tZW50c2AgOiBgYGJvb2xgYAotICAgICAgICBLZWVwIGNvbW1lbnRzIHN0YXJ0aW5nIHdpdGggYW4gZXhjbGFtYXRpb24gbWFyaz8gKGBgLyohLi4uKi9gYCkKLQotICAgIDpSZXR1cm46IE1pbmlmaWVkIHNjcmlwdAotICAgIDpSdHlwZTogYGBzdHJgYAotICAgICIiIgotICAgIGlmIG5vdCBrZWVwX2JhbmdfY29tbWVudHM6Ci0gICAgICAgIHJleCA9ICgKLSAgICAgICAgICAgIHInKFteXDA0NyIvXDAwMC1cMDQwXSspfCgoPzooPzpcMDQ3W15cMDQ3XFxcclxuXSooPzpcXCg/OlteXHJcbl0nCi0gICAgICAgICAgICByJ3xccj9cbnxccilbXlwwNDdcXFxyXG5dKikqXDA0Nyl8KD86IlteIlxcXHJcbl0qKD86XFwoPzpbXlxyXG5dJwotICAgICAgICAgICAgcid8XHI/XG58XHIpW14iXFxcclxuXSopKiIpKVteXDA0NyIvXDAwMC1cMDQwXSopfCg/PD1bKCw9OlxbISZ8PycKLSAgICAgICAgICAgIHIne307XHJcbl0pKD86W1wwMDAtXDAxMVwwMTNcMDE0XDAxNi1cMDQwXXwoPzovXCpbXipdKlwqKyg/OlteLyonCi0gICAgICAgICAgICByJ11bXipdKlwqKykqLykpKig/Oig/Oig/Oi8vW15cclxuXSopP1tcclxuXSkoPzpbXDAwMC1cMDExXDAxM1wwJwotICAgICAgICAgICAgcicxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkqKSooKD86Lyg/IVtccicKLSAgICAgICAgICAgIHInXG4vKl0pW14vXFxcW1xyXG5dKig/Oig/OlxcW15cclxuXXwoPzpcW1teXFxcXVxyXG5dKig/OlxcW15ccicKLSAgICAgICAgICAgIHInXG5dW15cXFxdXHJcbl0qKSpcXSkpW14vXFxcW1xyXG5dKikqLykpKCg/OltcMDAwLVwwMTFcMDEzXDAxNCcKLSAgICAgICAgICAgIHInXDAxNi1cMDQwXXwoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pKSooPzooPzooPzovL1teXHInCi0gICAgICAgICAgICByJ1xuXSopP1tcclxuXSkoPzpbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86JwotICAgICAgICAgICAgcidbXi8qXVteKl0qXCorKSovKSkqKSsoPz1bXlwwMDAtXDA0MCYpKywuOjs9P1xdfH0tXSkpP3woPzw9W1wwMCcKLSAgICAgICAgICAgIHInMC0jJS0sLi86LUBcWy1eYHstfi1dcmV0dXJuKSg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF18KD8nCi0gICAgICAgICAgICByJzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pKSooPzooKD86KD86Ly9bXlxyXG5dKik/W1xyXG5dJwotICAgICAgICAgICAgcicpKSg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qJwotICAgICAgICAgICAgcidcKispKi8pKSopKigoPzovKD8hW1xyXG4vKl0pW14vXFxcW1xyXG5dKig/Oig/OlxcW15cclxuXXwoPzpcWycKLSAgICAgICAgICAgIHInW15cXFxdXHJcbl0qKD86XFxbXlxyXG5dW15cXFxdXHJcbl0qKSpcXSkpW14vXFxcW1xyXG5dKikqLykpKCgnCi0gICAgICAgICAgICByJz86W1wwMDAtXDAxMVwwMTNcMDE0XDAxNi1cMDQwXXwoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispJwotICAgICAgICAgICAgcicqLykpKig/Oig/Oig/Oi8vW15cclxuXSopP1tcclxuXSkoPzpbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNCcKLSAgICAgICAgICAgIHInMF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkqKSsoPz1bXlwwMDAtXDA0MCYpKywuOjsnCi0gICAgICAgICAgICByJz0/XF18fS1dKSk/fCg/PD1bXlwwMDAtISMlJigqLC4vOi1AXFtcXF5ge3x+XSkoPzpbXDAwMC1cMDExXDAxJwotICAgICAgICAgICAgciczXDAxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkqKD86KCg/Oig/OicKLSAgICAgICAgICAgIHInLy9bXlxyXG5dKik/W1xyXG5dKSkoPzpbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0nCi0gICAgICAgICAgICByJypcKisoPzpbXi8qXVteKl0qXCorKSovKSkqKSsoPz1bXlwwMDAtXDA0MCIjJS1cMDQ3KSosLi86LUBcXC1eJwotICAgICAgICAgICAgcidgfC1+XSl8KD88PVteXDAwMC0jJS0sLi86LUBcWy1eYHstfi1dKSgoPzpbXDAwMC1cMDExXDAxM1wwMTRcMCcKLSAgICAgICAgICAgIHInMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkpKyg/PVteXDAwMC0jJS0sLi8nCi0gICAgICAgICAgICByJzotQFxbLV5gey1+LV0pfCg/PD1cKykoKD86W1wwMDAtXDAxMVwwMTNcMDE0XDAxNi1cMDQwXXwoPzovXCpbJwotICAgICAgICAgICAgcideKl0qXCorKD86W14vKl1bXipdKlwqKykqLykpKSsoPz1cKyl8KD88PS0pKCg/OltcMDAwLVwwMTFcMDEzJwotICAgICAgICAgICAgcidcMDE0XDAxNi1cMDQwXXwoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pKSkrKD89LSl8KD86WycKLSAgICAgICAgICAgIHInXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdKlwqKykqLyknCi0gICAgICAgICAgICByJykrfCg/Oig/Oig/Oi8vW15cclxuXSopP1tcclxuXSkoPzpbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdJwotICAgICAgICAgICAgcid8KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkqKSsnCi0gICAgICAgICkKLQotICAgICAgICBkZWYgc3ViYmVyKG1hdGNoKToKLSAgICAgICAgICAgICIiIiBTdWJzdGl0dXRpb24gY2FsbGJhY2sgIiIiCi0gICAgICAgICAgICBncm91cHMgPSBtYXRjaC5ncm91cHMoKQotICAgICAgICAgICAgcmV0dXJuICgKLSAgICAgICAgICAgICAgICBncm91cHNbMF0gb3IKLSAgICAgICAgICAgICAgICBncm91cHNbMV0gb3IKLSAgICAgICAgICAgICAgICAoZ3JvdXBzWzNdIGFuZCAoZ3JvdXBzWzJdICsgJ1xuJykpIG9yCi0gICAgICAgICAgICAgICAgZ3JvdXBzWzJdIG9yCi0gICAgICAgICAgICAgICAgKGdyb3Vwc1s1XSBhbmQgIiVzJXMlcyIgJSAoCi0gICAgICAgICAgICAgICAgICAgIGdyb3Vwc1s0XSBhbmQgJ1xuJyBvciAnJywKLSAgICAgICAgICAgICAgICAgICAgZ3JvdXBzWzVdLAotICAgICAgICAgICAgICAgICAgICBncm91cHNbNl0gYW5kICdcbicgb3IgJycsCi0gICAgICAgICAgICAgICAgKSkgb3IKLSAgICAgICAgICAgICAgICAoZ3JvdXBzWzddIGFuZCAnXG4nKSBvcgotICAgICAgICAgICAgICAgIChncm91cHNbOF0gYW5kICcgJykgb3IKLSAgICAgICAgICAgICAgICAoZ3JvdXBzWzldIGFuZCAnICcpIG9yCi0gICAgICAgICAgICAgICAgKGdyb3Vwc1sxMF0gYW5kICcgJykgb3IKLSAgICAgICAgICAgICAgICAnJwotICAgICAgICAgICAgKQotICAgIGVsc2U6Ci0gICAgICAgIHJleCA9ICgKLSAgICAgICAgICAgIHInKFteXDA0NyIvXDAwMC1cMDQwXSspfCgoPzooPzpcMDQ3W15cMDQ3XFxcclxuXSooPzpcXCg/OlteXHJcbl0nCi0gICAgICAgICAgICByJ3xccj9cbnxccilbXlwwNDdcXFxyXG5dKikqXDA0Nyl8KD86IlteIlxcXHJcbl0qKD86XFwoPzpbXlxyXG5dJwotICAgICAgICAgICAgcid8XHI/XG58XHIpW14iXFxcclxuXSopKiIpKVteXDA0NyIvXDAwMC1cMDQwXSopfCg/PD1bKCw9OlxbISZ8PycKLSAgICAgICAgICAgIHIne307XHJcbl0pKCg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8nCi0gICAgICAgICAgICByJypdW14qXSpcKispKi8pKSooPzooPzooPzovL1teXHJcbl0qKT9bXHJcbl0pKD86W1wwMDAtXDAxMVwwMTMnCi0gICAgICAgICAgICByJ1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdKlwqKykqLykpKikqKSgoPzovKD8hJwotICAgICAgICAgICAgcidbXHJcbi8qXSlbXi9cXFxbXHJcbl0qKD86KD86XFxbXlxyXG5dfCg/OlxbW15cXFxdXHJcbl0qKD86XFxbXicKLSAgICAgICAgICAgIHInXHJcbl1bXlxcXF1cclxuXSopKlxdKSlbXi9cXFxbXHJcbl0qKSovKSkoKD86W1wwMDAtXDAxMVwwMTNcMDEnCi0gICAgICAgICAgICByJzRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdKlwqKykqLykpKig/Oig/Oig/Oi8vW14nCi0gICAgICAgICAgICByJ1xyXG5dKik/W1xyXG5dKSg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoJwotICAgICAgICAgICAgcic/OlteLypdW14qXSpcKispKi8pKSopKyg/PVteXDAwMC1cMDQwJikrLC46Oz0/XF18fS1dKSk/fCg/PD1bJwotICAgICAgICAgICAgcidcMDAwLSMlLSwuLzotQFxbLV5gey1+LV1yZXR1cm4pKCg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MCcKLSAgICAgICAgICAgIHInXXwoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pKSooPzooKD86KD86Ly9bXlxyXG5dKik/WycKLSAgICAgICAgICAgIHInXHJcbl0pKSg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVsnCi0gICAgICAgICAgICByJ14qXSpcKispKi8pKSopKikoKD86Lyg/IVtcclxuLypdKVteL1xcXFtcclxuXSooPzooPzpcXFteXHJcbl18JwotICAgICAgICAgICAgcicoPzpcW1teXFxcXVxyXG5dKig/OlxcW15cclxuXVteXFxcXVxyXG5dKikqXF0pKVteL1xcXFtcclxuXSopKicKLSAgICAgICAgICAgIHInLykpKCg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0nCi0gICAgICAgICAgICByJypcKispKi8pKSooPzooPzooPzovL1teXHJcbl0qKT9bXHJcbl0pKD86W1wwMDAtXDAxMVwwMTNcMDE0XDAxJwotICAgICAgICAgICAgcic2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdKlwqKykqLykpKikrKD89W15cMDAwLVwwNDAmKScKLSAgICAgICAgICAgIHInKywuOjs9P1xdfH0tXSkpP3woPzw9W15cMDAwLSEjJSYoKiwuLzotQFxbXFxeYHt8fl0pKCg/OltcMDAwLScKLSAgICAgICAgICAgIHInXDAxMVwwMTNcMDE0XDAxNi1cMDQwXXwoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pKSooPzonCi0gICAgICAgICAgICByJyg/Oig/Oi8vW15cclxuXSopP1tcclxuXSkoPzpbXDAwMC1cMDExXDAxM1wwMTRcMDE2LVwwNDBdfCg/Oi8nCi0gICAgICAgICAgICByJ1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkqKSspKD89W15cMDAwLVwwNDAiIyUtXDA0NykqLC4vJwotICAgICAgICAgICAgcic6LUBcXC1eYHwtfl0pfCg/PD1bXlwwMDAtIyUtLC4vOi1AXFstXmB7LX4tXSkoKD86W1wwMDAtXDAxMVwwMScKLSAgICAgICAgICAgIHInM1wwMTRcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdKlwqKykqLykpKykoPz1bXlwwMDAnCi0gICAgICAgICAgICByJy0jJS0sLi86LUBcWy1eYHstfi1dKXwoPzw9XCspKCg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF18JwotICAgICAgICAgICAgcicoPzovXCpbXipdKlwqKyg/OlteLypdW14qXSpcKispKi8pKSspKD89XCspfCg/PD0tKSgoPzpbXDAwMC1cMCcKLSAgICAgICAgICAgIHInMTFcMDEzXDAxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qXCorKSovKSkrKSg/PS0nCi0gICAgICAgICAgICByJyl8KCg/OltcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF18KD86L1wqW14qXSpcKisoPzpbXi8qXVteKl0qJwotICAgICAgICAgICAgcidcKispKi8pKSspfCgoPzooPzooPzovL1teXHJcbl0qKT9bXHJcbl0pKD86W1wwMDAtXDAxMVwwMTNcMDE0JwotICAgICAgICAgICAgcidcMDE2LVwwNDBdfCg/Oi9cKlteKl0qXCorKD86W14vKl1bXipdKlwqKykqLykpKikrKScKLSAgICAgICAgKQotCi0gICAgICAgIGtlZXAgPSBfcmUuY29tcGlsZSgoCi0gICAgICAgICAgICByJ1tcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDA0MF0rfCg/Oi9cKig/ISEpW14qXSpcKisoPzpbXi8qXVteKl0qJwotICAgICAgICAgICAgcidcKispKi8pK3woPzooPzovL1teXHJcbl0qKT9bXHJcbl0pK3woKD86L1wqIVteKl0qXCorKD86W14vKl1bXicKLSAgICAgICAgICAgIHInKl0qXCorKSovKSspJwotICAgICAgICApICUgbG9jYWxzKCkpLnN1YgotICAgICAgICBrZWVwZXIgPSBsYW1iZGEgbTogbS5ncm91cHMoKVswXSBvciAnJwotCi0gICAgICAgIGRlZiBzdWJiZXIobWF0Y2gpOgotICAgICAgICAgICAgIiIiIFN1YnN0aXR1dGlvbiBjYWxsYmFjayAiIiIKLSAgICAgICAgICAgIGdyb3VwcyA9IG1hdGNoLmdyb3VwcygpCi0gICAgICAgICAgICByZXR1cm4gKAotICAgICAgICAgICAgICAgIGdyb3Vwc1swXSBvcgotICAgICAgICAgICAgICAgIGdyb3Vwc1sxXSBvcgotICAgICAgICAgICAgICAgIChncm91cHNbM10gYW5kICIlcyVzJXMlcyIgJSAoCi0gICAgICAgICAgICAgICAgICAgIGtlZXAoa2VlcGVyLCBncm91cHNbMl0pLAotICAgICAgICAgICAgICAgICAgICBncm91cHNbM10sCi0gICAgICAgICAgICAgICAgICAgIGtlZXAoa2VlcGVyLCBncm91cHNbNF0gb3IgJycpLAotICAgICAgICAgICAgICAgICAgICBncm91cHNbNF0gYW5kICdcbicgb3IgJycsCi0gICAgICAgICAgICAgICAgKSkgb3IKLSAgICAgICAgICAgICAgICAoZ3JvdXBzWzddIGFuZCAiJXMlcyVzJXMlcyIgJSAoCi0gICAgICAgICAgICAgICAgICAgIGtlZXAoa2VlcGVyLCBncm91cHNbNV0pLAotICAgICAgICAgICAgICAgICAgICBncm91cHNbNl0gYW5kICdcbicgb3IgJycsCi0gICAgICAgICAgICAgICAgICAgIGdyb3Vwc1s3XSwKLSAgICAgICAgICAgICAgICAgICAga2VlcChrZWVwZXIsIGdyb3Vwc1s4XSBvciAnJyksCi0gICAgICAgICAgICAgICAgICAgIGdyb3Vwc1s4XSBhbmQgJ1xuJyBvciAnJywKLSAgICAgICAgICAgICAgICApKSBvcgotICAgICAgICAgICAgICAgIChncm91cHNbOV0gYW5kIGtlZXAoa2VlcGVyLCBncm91cHNbOV0gKyAnXG4nKSkgb3IKLSAgICAgICAgICAgICAgICAoZ3JvdXBzWzEwXSBhbmQga2VlcChrZWVwZXIsIGdyb3Vwc1sxMF0pIG9yICcgJykgb3IKLSAgICAgICAgICAgICAgICAoZ3JvdXBzWzExXSBhbmQga2VlcChrZWVwZXIsIGdyb3Vwc1sxMV0pIG9yICcgJykgb3IKLSAgICAgICAgICAgICAgICAoZ3JvdXBzWzEyXSBhbmQga2VlcChrZWVwZXIsIGdyb3Vwc1sxMl0pIG9yICcgJykgb3IKLSAgICAgICAgICAgICAgICBrZWVwKGtlZXBlciwgZ3JvdXBzWzEzXSBvciBncm91cHNbMTRdKQotICAgICAgICAgICAgKQotCi0gICAgcmV0dXJuIF9yZS5zdWIocmV4LCBzdWJiZXIsICdcbiVzXG4nICUgc2NyaXB0KS5zdHJpcCgpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBkZWYgbWFpbigpOgotICAgICAgICAiIiIgTWFpbiAiIiIKLSAgICAgICAgaW1wb3J0IHN5cyBhcyBfc3lzCi0KLSAgICAgICAgYXJndiA9IF9zeXMuYXJndlsxOl0KLSAgICAgICAga2VlcF9iYW5nX2NvbW1lbnRzID0gJy1iJyBpbiBhcmd2IG9yICctYnAnIGluIGFyZ3Ygb3IgJy1wYicgaW4gYXJndgotICAgICAgICBpZiAnLXAnIGluIGFyZ3Ygb3IgJy1icCcgaW4gYXJndiBvciAnLXBiJyBpbiBhcmd2OgotICAgICAgICAgICAgeGpzbWluID0gX21ha2VfanNtaW4ocHl0aG9uX29ubHk9VHJ1ZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHhqc21pbiA9IGpzbWluCi0KLSAgICAgICAgX3N5cy5zdGRvdXQud3JpdGUoeGpzbWluKAotICAgICAgICAgICAgX3N5cy5zdGRpbi5yZWFkKCksIGtlZXBfYmFuZ19jb21tZW50cz1rZWVwX2JhbmdfY29tbWVudHMKLSAgICAgICAgKSkKLQotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvY29tbW9uL3B5X3Z1bGNhbml6ZS90aGlyZF9wYXJ0eS9yanNtaW4vc2V0dXAucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9zZXR1cC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI4MTkxMy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9jb21tb24vcHlfdnVsY2FuaXplL3RoaXJkX3BhcnR5L3Jqc21pbi9zZXR1cC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyAtKi0gY29kaW5nOiBhc2NpaSAtKi0KLSMKLSMgQ29weXJpZ2h0IDIwMDYgLSAyMDEzCi0jIEFuZHJceGU5IE1hbG8gb3IgaGlzIGxpY2Vuc29ycywgYXMgYXBwbGljYWJsZQotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1pbXBvcnQgc3lzIGFzIF9zeXMKLWZyb20gX3NldHVwIGltcG9ydCBydW4KLQotCi1kZWYgc2V0dXAoYXJncz1Ob25lLCBfbWFuaWZlc3Q9MCk6Ci0gICAgIiIiIE1haW4gc2V0dXAgZnVuY3Rpb24gIiIiCi0gICAgZnJvbSBfc2V0dXAuZXh0IGltcG9ydCBFeHRlbnNpb24KLQotICAgIGlmICdqYXZhJyBpbiBfc3lzLnBsYXRmb3JtLmxvd2VyKCk6Ci0gICAgICAgICMgbm8gYyBleHRlbnNpb24gZm9yIGp5dGhvbgotICAgICAgICBleHQgPSBOb25lCi0gICAgZWxzZToKLSAgICAgICAgZXh0PVtFeHRlbnNpb24oJ19yanNtaW4nLCBzb3VyY2VzPVsncmpzbWluLmMnXSldCi0KLSAgICByZXR1cm4gcnVuKHNjcmlwdF9hcmdzPWFyZ3MsIGV4dD1leHQsIG1hbmlmZXN0X29ubHk9X21hbmlmZXN0KQotCi0KLWRlZiBtYW5pZmVzdCgpOgotICAgICIiIiBDcmVhdGUgTGlzdCBvZiBwYWNrYWdlZCBmaWxlcyAiIiIKLSAgICByZXR1cm4gc2V0dXAoKCksIF9tYW5pZmVzdD0xKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgc2V0dXAoKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL1BSRVNVQk1JVC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9QUkVTVUJNSVQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNDQ4MGMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL1BSRVNVQk1JVC5weQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotCi1kZWYgQ2hlY2tDaGFuZ2VPblVwbG9hZChpbnB1dF9hcGksIG91dHB1dF9hcGkpOgotICByZXR1cm4gX0NvbW1vbkNoZWNrcyhpbnB1dF9hcGksIG91dHB1dF9hcGkpCi0KLQotZGVmIENoZWNrQ2hhbmdlT25Db21taXQoaW5wdXRfYXBpLCBvdXRwdXRfYXBpKToKLSAgcmV0dXJuIF9Db21tb25DaGVja3MoaW5wdXRfYXBpLCBvdXRwdXRfYXBpKQotCi0KLWRlZiBfQ29tbW9uQ2hlY2tzKGlucHV0X2FwaSwgb3V0cHV0X2FwaSk6Ci0gIHJlc3VsdHMgPSBbXQotICByZXN1bHRzICs9IGlucHV0X2FwaS5SdW5UZXN0cyhpbnB1dF9hcGkuY2FubmVkX2NoZWNrcy5HZXRQeWxpbnQoCi0gICAgICBpbnB1dF9hcGksIG91dHB1dF9hcGksIGV4dHJhX3BhdGhzX2xpc3Q9X0dldFBhdGhzVG9QcmVwZW5kKGlucHV0X2FwaSksCi0gICAgICBweWxpbnRyYz0ncHlsaW50cmMnKSkKLSAgcmV0dXJuIHJlc3VsdHMKLQotCi1kZWYgX0dldFBhdGhzVG9QcmVwZW5kKGlucHV0X2FwaSk6Ci0gIHByb2plY3RfZGlyID0gaW5wdXRfYXBpLlByZXN1Ym1pdExvY2FsUGF0aCgpCi0gIGNhdGFwdWx0X2RpciA9IGlucHV0X2FwaS5vc19wYXRoLmpvaW4ocHJvamVjdF9kaXIsICcuLicpCi0gIHJldHVybiBbCi0gICAgICBwcm9qZWN0X2RpciwKLQotICAgICAgaW5wdXRfYXBpLm9zX3BhdGguam9pbihjYXRhcHVsdF9kaXIsICdjb21tb24nLCAncHlfdXRpbHMnKSwKLQotICAgICAgaW5wdXRfYXBpLm9zX3BhdGguam9pbihjYXRhcHVsdF9kaXIsICd0aGlyZF9wYXJ0eScsICdtb2NrJyksCi0gICAgICBpbnB1dF9hcGkub3NfcGF0aC5qb2luKGNhdGFwdWx0X2RpciwgJ3RoaXJkX3BhcnR5JywgJ3B5ZmFrZWZzJyksCi0gIF0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9iaW4vcnVuX3Rlc3RzIGIvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2Jpbi9ydW5fdGVzdHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDlhODdiZDYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2Jpbi9ydW5fdGVzdHMKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlJ1bnMgYWxsIFB5dGhvbiB1bml0IHRlc3RzIGluIGRlcGVuZGVuY3lfbWFuYWdlci8uIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1fQ0FUQVBVTFQgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpCi0KLXN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4oX0NBVEFQVUxULCAndGhpcmRfcGFydHknLCAnbW9jaycpKQotCi0KLWRlZiBtYWluKCk6Ci0gIHN5cy5wYXRoLmFwcGVuZChfQ0FUQVBVTFQpCi0KLSAgZnJvbSBob29rcyBpbXBvcnQgaW5zdGFsbAotICBpZiAnLS1uby1pbnN0YWxsLWhvb2tzJyBpbiBzeXMuYXJndjoKLSAgICBzeXMuYXJndi5yZW1vdmUoJy0tbm8taW5zdGFsbC1ob29rcycpCi0gIGVsc2U6Ci0gICAgaW5zdGFsbC5JbnN0YWxsSG9va3MoKQotCi0gIGZyb20gY2F0YXB1bHRfYnVpbGQgaW1wb3J0IHJ1bl93aXRoX3R5cAotICByZXR1cm4gcnVuX3dpdGhfdHlwLlJ1bigKLSAgICAgIG9zLnBhdGguam9pbihfQ0FUQVBVTFQsICdkZXBlbmRlbmN5X21hbmFnZXInKSwgcGF0aD1bX0NBVEFQVUxUXSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvYmluL3VwZGF0ZSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9iaW4vdXBkYXRlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjMmNhMWRmLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9iaW4vdXBkYXRlCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgYXJncGFyc2UKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1zeXMucGF0aC5hcHBlbmQoCi0gICAgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nKSkpCi1mcm9tIGRlcGVuZGVuY3lfbWFuYWdlciBpbXBvcnQgYmFzZV9jb25maWcKLQotCi1kZWYgVXBkYXRlRGVwZW5kZW5jeShkZXBlbmRlbmN5LCBwbGF0Zm9ybSwgcGF0aCwgY29uZmlnKToKLSAgYyA9IGJhc2VfY29uZmlnLkJhc2VDb25maWcoY29uZmlnLCB3cml0YWJsZT1UcnVlKQotICBjLkFkZENsb3VkU3RvcmFnZURlcGVuZGVuY3lVcGRhdGVKb2IoCi0gICAgICBkZXBlbmRlbmN5LCBwbGF0Zm9ybSwgcGF0aCwgdmVyc2lvbj1Ob25lLCBleGVjdXRlX2pvYj1UcnVlKQotCi0KLWRlZiBtYWluKHJhd19hcmdzKToKLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNvbmZpZycsIHJlcXVpcmVkPVRydWUsIHR5cGU9b3MucGF0aC5yZWFscGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQYXRoIHRvIHRoZSBkZXBlbmRlbmN5IGNvbmZpZ3VyYXRpb24gZmlsZS4nKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRlcGVuZGVuY3knLCByZXF1aXJlZD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0RlcGVuZGVuY3kgbmFtZS4nKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXBhdGgnLCByZXF1aXJlZD1UcnVlLCB0eXBlPW9zLnBhdGgucmVhbHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGF0aCB0byB0aGUgbmV3IGRlcGVuZGVuY3kuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1wbGF0Zm9ybScsIHJlcXVpcmVkPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGxhdGZvcm0gdG8gdXBkYXRlLicpCi0gIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhyYXdfYXJncykKLSAgVXBkYXRlRGVwZW5kZW5jeShhcmdzLmRlcGVuZGVuY3ksIGFyZ3MucGxhdGZvcm0sIGFyZ3MucGF0aCwgYXJncy5jb25maWcpCi0gIHJldHVybiAwCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZWZiZGIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLQotQ0FUQVBVTFRfUEFUSCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKAotICAgIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSkKLUNBVEFQVUxUX1RISVJEX1BBUlRZX1BBVEggPSBvcy5wYXRoLmpvaW4oQ0FUQVBVTFRfUEFUSCwgJ3RoaXJkX3BhcnR5JykKLURFUEVOREVOQ1lfTUFOQUdFUl9QQVRIID0gb3MucGF0aC5qb2luKENBVEFQVUxUX1BBVEgsICdkZXBlbmRlbmN5X21hbmFnZXInKQotCi0KLWRlZiBfQWRkRGlyVG9QeXRob25QYXRoKCpwYXRoX3BhcnRzKToKLSAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oKnBhdGhfcGFydHMpKQotICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpIGFuZCBwYXRoIG5vdCBpbiBzeXMucGF0aDoKLSAgICBzeXMucGF0aC5hcHBlbmQocGF0aCkKLQotCi1fQWRkRGlyVG9QeXRob25QYXRoKENBVEFQVUxUX1BBVEgsICdjb21tb24nLCAncHlfdXRpbHMnKQotX0FkZERpclRvUHl0aG9uUGF0aChDQVRBUFVMVF9USElSRF9QQVJUWV9QQVRILCAnbW9jaycpCi1fQWRkRGlyVG9QeXRob25QYXRoKENBVEFQVUxUX1RISVJEX1BBUlRZX1BBVEgsICdweWZha2VmcycpCi1fQWRkRGlyVG9QeXRob25QYXRoKENBVEFQVUxUX1RISVJEX1BBUlRZX1BBVEgsICd6aXBmaWxlJykKLV9BZGREaXJUb1B5dGhvblBhdGgoREVQRU5ERU5DWV9NQU5BR0VSX1BBVEgpCi0KLQotIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAotZnJvbSAuYXJjaGl2ZV9pbmZvIGltcG9ydCBBcmNoaXZlSW5mbwotZnJvbSAuYmFzZV9jb25maWcgaW1wb3J0IEJhc2VDb25maWcKLWZyb20gLmNsb3VkX3N0b3JhZ2VfaW5mbyBpbXBvcnQgQ2xvdWRTdG9yYWdlSW5mbwotZnJvbSAuZGVwZW5kZW5jeV9pbmZvIGltcG9ydCBEZXBlbmRlbmN5SW5mbwotZnJvbSAuZXhjZXB0aW9ucyBpbXBvcnQgQ2xvdWRTdG9yYWdlRXJyb3IKLWZyb20gLmV4Y2VwdGlvbnMgaW1wb3J0IENsb3VkU3RvcmFnZVVwbG9hZENvbmZsaWN0RXJyb3IKLWZyb20gLmV4Y2VwdGlvbnMgaW1wb3J0IEVtcHR5Q29uZmlnRXJyb3IKLWZyb20gLmV4Y2VwdGlvbnMgaW1wb3J0IEZpbGVOb3RGb3VuZEVycm9yCi1mcm9tIC5leGNlcHRpb25zIGltcG9ydCBOb1BhdGhGb3VuZEVycm9yCi1mcm9tIC5leGNlcHRpb25zIGltcG9ydCBSZWFkV3JpdGVFcnJvcgotZnJvbSAuZXhjZXB0aW9ucyBpbXBvcnQgVW5zdXBwb3J0ZWRDb25maWdGb3JtYXRFcnJvcgotZnJvbSAubG9jYWxfcGF0aF9pbmZvIGltcG9ydCBMb2NhbFBhdGhJbmZvCi1mcm9tIC5tYW5hZ2VyIGltcG9ydCBEZXBlbmRlbmN5TWFuYWdlcgotIyBweWxpbnQ6IGVuYWJsZT11bnVzZWQtaW1wb3J0Ci0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvYXJjaGl2ZV9pbmZvLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9hcmNoaXZlX2luZm8ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMTNmOTAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9hcmNoaXZlX2luZm8ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBnbG9iCi1pbXBvcnQgb3MKLWltcG9ydCBzaHV0aWwKLQotZnJvbSBkZXBlbmRlbmN5X21hbmFnZXIgaW1wb3J0IGV4Y2VwdGlvbnMKLWZyb20gZGVwZW5kZW5jeV9tYW5hZ2VyIGltcG9ydCBkZXBlbmRlbmN5X21hbmFnZXJfdXRpbAotCi0KLWNsYXNzIEFyY2hpdmVJbmZvKG9iamVjdCk6Ci0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGFyY2hpdmVfZmlsZSwgdW56aXBfcGF0aCwgcGF0aF93aXRoaW5fYXJjaGl2ZSwKLSAgICAgICAgICAgICAgIHN0YWxlX3VuemlwX3BhdGhfZ2xvYj1Ob25lKToKLSAgICAiIiIgQ29udGFpbmVyIGZvciB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHVuemlwIGEgZG93bmxvYWRlZCBhcmNoaXZlLgotCi0gICAgQXJnczoKLSAgICAgICAgYXJjaGl2ZV9wYXRoOiBQYXRoIHRvIHRoZSBhcmNoaXZlIGZpbGUuCi0gICAgICAgIHVuemlwX3BhdGg6IFBhdGggdG8gdW56aXAgdGhlIGFyY2hpdmUgaW50by4gQXNzdW1lcyB0aGF0IHRoaXMgcGF0aAotICAgICAgICAgICAgaXMgdW5pcXVlIGZvciB0aGUgYXJjaGl2ZS4KLSAgICAgICAgcGF0aF93aXRoaW5fYXJjaGl2ZTogU3BlY2lmeSBpZiBhbmQgaG93IHRvIGhhbmRsZSB6aXAgYXJjaGl2ZXMKLSAgICAgICAgICAgIGRvd25sb2FkZWQgZnJvbSBjbG91ZF9zdG9yYWdlLiBFeHBlY3RlZCB2YWx1ZXM6Ci0gICAgICAgICAgICAgICAgTm9uZTogRG8gbm90IHVuemlwIHRoZSBmaWxlIGRvd25sb2FkZWQgZnJvbSBjbG91ZF9zdG9yYWdlLgotICAgICAgICAgICAgICAgICcuJzogVW56aXAgdGhlIGZpbGUgZG93bmxvYWRlZCBmcm9tIGNsb3VkX3N0b3JhZ2UuIFRoZQotICAgICAgICAgICAgICAgICAgICB1bnppcHBlZCBmaWxlL2ZvbGRlciBpcyB0aGUgZXhwZWN0ZWQgZGVwZW5kZW5jeS4KLSAgICAgICAgICAgICAgICBmaWxlX3BhdGg6IFVuemlwIHRoZSBmaWxlIGRvd25sb2FkZWQgZnJvbSBjbG91ZF9zdG9yYWdlLgotICAgICAgICAgICAgICAgICAgICB8ZmlsZV9wYXRofCBpcyB0aGUgcGF0aCB0byB0aGUgZXhwZWN0ZWQgZGVwZW5kZW5jeSwKLSAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUgdG8gdGhlIHVuemlwcGVkIGFyY2hpdmUgcGF0aC4KLSAgICAgICAgc3RhbGVfdW56aXBfcGF0aF9nbG9iOiBPcHRpb25hbCBhcmd1bWVudCBzcGVjaWZ5aW5nIGEgZ2xvYiBtYXRjaGluZwotICAgICAgICAgICAgc3RyaW5nIHdoaWNoIG1hdGNoZXMgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZCBiZWZvcmUgdGhpcwotICAgICAgICAgICAgYXJjaGl2ZSBpcyBleHRyYWN0ZWQgKGlmIGl0IGlzIGV4dHJhY3RlZCBhdCBhbGwpLgotICAgICIiIgotICAgIHNlbGYuX2FyY2hpdmVfZmlsZSA9IGFyY2hpdmVfZmlsZQotICAgIHNlbGYuX3VuemlwX3BhdGggPSB1bnppcF9wYXRoCi0gICAgc2VsZi5fcGF0aF93aXRoaW5fYXJjaGl2ZSA9IHBhdGhfd2l0aGluX2FyY2hpdmUKLSAgICBzZWxmLl9kZXBlbmRlbmN5X3BhdGggPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgIHNlbGYuX3VuemlwX3BhdGgsIHNlbGYuX3BhdGhfd2l0aGluX2FyY2hpdmUpCi0gICAgc2VsZi5fc3RhbGVfdW56aXBfcGF0aF9nbG9iID0gc3RhbGVfdW56aXBfcGF0aF9nbG9iCi0gICAgaWYgbm90IHNlbGYuX2hhc19taW5pbXVtX2RhdGE6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKAotICAgICAgICAgICdOb3QgZW5vdWdoIGluZm9ybWF0aW9uIHNwZWNpZmllZCB0byBpbml0aWFsaXplIGFuIGFyY2hpdmUgaW5mby4nCi0gICAgICAgICAgJyAlcycgJSBzZWxmKQotCi0gIGRlZiBHZXRVbnppcHBlZFBhdGgoc2VsZik6Ci0gICAgaWYgc2VsZi5TaG91bGRVbnppcEFyY2hpdmUoKToKLSAgICAgICMgUmVtb3ZlIHN0YWxlIHVuemlwIHJlc3VsdHMKLSAgICAgIGlmIHNlbGYuX3N0YWxlX3VuemlwX3BhdGhfZ2xvYjoKLSAgICAgICAgZm9yIHBhdGggaW4gZ2xvYi5nbG9iKHNlbGYuX3N0YWxlX3VuemlwX3BhdGhfZ2xvYik6Ci0gICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQotICAgICAgIyBUT0RPKGFpb2xvcyk6IFJlcGxhY2UgVW56aXBGaWxlIHdpdGggemlwZmlsZS5leHRyYWN0YWxsIG9uY2UgcHl0aG9uCi0gICAgICAjIHZlcnNpb24gMi43LjQgb3IgbGF0ZXIgY2FuIHNhZmVseSBiZSBhc3N1bWVkLgotICAgICAgZGVwZW5kZW5jeV9tYW5hZ2VyX3V0aWwuVW56aXBBcmNoaXZlKAotICAgICAgICAgIHNlbGYuX2FyY2hpdmVfZmlsZSwgc2VsZi5fdW56aXBfcGF0aCkKLSAgICAgIGlmIHNlbGYuU2hvdWxkVW56aXBBcmNoaXZlKCk6Ci0gICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQXJjaGl2ZUVycm9yKAotICAgICAgICAgICAgIkV4cGVjdGVkIHBhdGggJyVzJyB3YXMgbm90IGV4dHJhY3RlZCBmcm9tIGFyY2hpdmUgJyVzJy4iICUKLSAgICAgICAgICAgIChzZWxmLl9kZXBlbmRlbmN5X3BhdGgsIHNlbGYuX2FyY2hpdmVfZmlsZSkpCi0gICAgcmV0dXJuIHNlbGYuX2RlcGVuZGVuY3lfcGF0aAotCi0gIGRlZiBTaG91bGRVbnppcEFyY2hpdmUoc2VsZik6Ci0gICAgaWYgbm90IHNlbGYuX2hhc19taW5pbXVtX2RhdGE6Ci0gICAgICByYWlzZSBleGNlcHRpb25zLkFyY2hpdmVFcnJvcigKLSAgICAgICAgICAnTWlzc2luZyBuZWVkZWQgaW5mbyB0byB1bnppcCBhcmNoaXZlLiBLbm93biBkYXRhOiAlcycsCi0gICAgICAgICAgc2VsZi5kYXRhX3N0cmluZykKLSAgICByZXR1cm4gbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuX2RlcGVuZGVuY3lfcGF0aCkKLQotICBAcHJvcGVydHkKLSAgZGVmIF9oYXNfbWluaW11bV9kYXRhKHNlbGYpOgotICAgIHJldHVybiBhbGwoW3NlbGYuX2FyY2hpdmVfZmlsZSwgc2VsZi5fdW56aXBfcGF0aCwKLSAgICAgICAgICAgICAgICBzZWxmLl9kZXBlbmRlbmN5X3BhdGhdKQotCi0gIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICByZXR1cm4gKAotICAgICAgICAnQXJjaGl2ZUluZm8oYXJjaGl2ZV9maWxlPSVzLCB1bnppcF9wYXRoPSVzLCBwYXRoX3dpdGhpbl9hcmNoaXZlPSVzLCAnCi0gICAgICAgICdkZXBlbmRlbmN5X3BhdGggPSVzKScgJSAoCi0gICAgICAgICAgICBzZWxmLl9hcmNoaXZlX2ZpbGUsIHNlbGYuX3VuemlwX3BhdGgsIHNlbGYuX3BhdGhfd2l0aGluX2FyY2hpdmUsCi0gICAgICAgICAgICBzZWxmLl9kZXBlbmRlbmN5X3BhdGgpKQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyL2Jhc2VfY29uZmlnLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9iYXNlX2NvbmZpZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzczNTY4OC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyL2Jhc2VfY29uZmlnLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzg4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGpzb24KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLQotZnJvbSBweV91dGlscyBpbXBvcnQgY2xvdWRfc3RvcmFnZQotZnJvbSBkZXBlbmRlbmN5X21hbmFnZXIgaW1wb3J0IGFyY2hpdmVfaW5mbwotZnJvbSBkZXBlbmRlbmN5X21hbmFnZXIgaW1wb3J0IGNsb3VkX3N0b3JhZ2VfaW5mbwotZnJvbSBkZXBlbmRlbmN5X21hbmFnZXIgaW1wb3J0IGRlcGVuZGVuY3lfaW5mbwotZnJvbSBkZXBlbmRlbmN5X21hbmFnZXIgaW1wb3J0IGV4Y2VwdGlvbnMKLWZyb20gZGVwZW5kZW5jeV9tYW5hZ2VyIGltcG9ydCBsb2NhbF9wYXRoX2luZm8KLWZyb20gZGVwZW5kZW5jeV9tYW5hZ2VyIGltcG9ydCB1cGxvYWRlcgotCi0KLWNsYXNzIEJhc2VDb25maWcob2JqZWN0KToKLSAgIiIiQSBiYXNpYyBjb25maWcgY2xhc3MgZm9yIHVzZSB3aXRoIHRoZSBEZXBlbmRlbmN5TWFuYWdlci4KLQotICBJbml0aWF0ZWQgd2l0aCBhIGpzb24gZmlsZSBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLQotICAgICAgICAgICAgeyAgImNvbmZpZ190eXBlIjogIkJhc2VDb25maWciLAotICAgICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgICAgICAgICAgImRlcF9uYW1lMSI6IHsKLSAgICAgICAgICAgICAgICAgICAiY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlciI6ICJiYXNlX2ZvbGRlcjEiLAotICAgICAgICAgICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2J1Y2tldCI6ICJidWNrZXQxIiwKLSAgICAgICAgICAgICAgICAgICAiZmlsZV9pbmZvIjogewotICAgICAgICAgICAgICAgICAgICAgInBsYXRmb3JtMSI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiaGFzaF9mb3JfcGxhdGZvcm0xIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJkb3dubG9hZF9wYXRoIjogImRvd25sb2FkX3BhdGgxMTEiLAotICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNpb25faW5fY3MiOiAiMS4xMS4xLjExLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRocyI6IFsibG9jYWxfcGF0aDExMTAiLCAibG9jYWxfcGF0aDExMTEiXQotICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgInBsYXRmb3JtMiI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiaGFzaF9mb3JfcGxhdGZvcm0yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJkb3dubG9hZF9wYXRoIjogImRvd25sb2FkX3BhdGgyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRocyI6IFsibG9jYWxfcGF0aDIwIiwgImxvY2FsX3BhdGgyMSJdCi0gICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAuLi4KLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICJkZXBlbmRlbmN5X25hbWVfMiI6IHsKLSAgICAgICAgICAgICAgICAgICAgLi4uCi0gICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAuLi4KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgUmVxdWlyZWQgZmllbGRzOiAiZGVwZW5kZW5jaWVzIiBhbmQgImNvbmZpZ190eXBlIi4KLSAgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBjb25maWdfdHlwZSBtdXN0IGJlICJCYXNlQ29uZmlnIgotCi0gICAgQXNzdW1wdGlvbnM6Ci0gICAgICAgICJjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyIiBpcyBhIHRvcCBsZXZlbCBmb2xkZXIgaW4gdGhlIGdpdmVuCi0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfYnVja2V0IiB3aGVyZSBhbGwgb2YgdGhlIGRlcGVuZGVuY3kgZmlsZXMgYXJlIHN0b3JlZAotICAgICAgICAgIGF0ICJkZXBlbmRlbmN5X25hbWUiXyJjbG91ZF9zdG9yYWdlX2hhc2giLgotCi0gICAgICAgICJkb3dubG9hZF9wYXRoIiBhbmQgYWxsIHBhdGhzIGluICJsb2NhbF9wYXRocyIgYXJlIHJlbGF0aXZlIHRvIHRoZQotICAgICAgICAgIGNvbmZpZyBmaWxlJ3MgbG9jYXRpb24uCi0KLSAgICAgICAgQWxsIG9yIG5vbmUgb2YgdGhlIGZvbGxvd2luZyBjbG91ZCBzdG9yYWdlIHJlbGF0ZWQgZmllbGRzIG11c3QgYmUKLSAgICAgICAgICBpbmNsdWRlZCBpbiBlYWNoIHBsYXRmb3JtIGRpY3Rpb25hcnk6Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCIsICJkb3dubG9hZF9wYXRoIiwgImNzX3JlbW90ZV9wYXRoIgotCi0gICAgICAgICJ2ZXJzaW9uX2luX2NzIiBpcyBhbiBvcHRpb25hbCBjbG91ZCBzdG9yYWdlIGZpZWxkLCBidXQgaXMgZGVwZW5kZW50Ci0gICAgICAgICAgb24gdGhlIGFib3ZlIGNsb3VkIHN0b3JhZ2UgcmVsYXRlZCBmaWVsZHMuCi0KLQotICAgIEFsc28gbm90ZSB0aGF0IHBsYXRmb3JtIG5hbWVzIGFyZSBvZnRlbiBvZiB0aGUgZm9ybSBvc19hcmNoaXRlY2h0dXJlLgotICAgIEV4OiAid2luX0FNRDY0IgotCi0gICAgTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmllbGRzIGNhbiBiZSBmb3VuZCBpbiBkZXBlbmRlbmNpZXNfaW5mby5weQotICAiIiIKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVfcGF0aCwgd3JpdGFibGU9RmFsc2UpOgotICAgICIiIiBJbml0aWFsaXplIGEgQmFzZUNvbmZpZyBmb3IgdGhlIERlcGVuZGVuY3lNYW5hZ2VyLgotCi0gICAgQXJnczoKLSAgICAgICAgd3JpdGFibGU6IEZhbHNlOiBUaGlzIGNvbmZpZyB3aWxsIGJlIHVzZWQgdG8gbG9va3VwIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgICAgVHJ1ZTogVGhpcyBjb25maWcgd2lsbCBiZSB1c2VkIHRvIHVwZGF0ZSBpbmZvcm1hdGlvbi4KLQotICAgICAgICBmaWxlX3BhdGg6IFBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgYSBqc29uIGRpY3Rpb25hcnkgaW4gdGhlIGV4cGVjdGVkCi0gICAgICAgICAgICAgICAgICAganNvbiBmb3JtYXQgZm9yIHRoaXMgY29uZmlnIGNsYXNzLiBCYXNlIGZvcm1hdCBleHBlY3RlZDoKLQotICAgICAgICAgICAgICAgICAgIHsgImNvbmZpZ190eXBlIjogY29uZmlnX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogZGVwZW5kZW5jaWVzX2RpY3QgfQotCi0gICAgICAgICAgICAgICAgICAgY29uZmlnX3R5cGU6IG11c3QgbWF0Y2ggdGhlIHJldHVybiB2YWx1ZSBvZiBHZXRDb25maWdUeXBlLgotICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llczogQSBkaWN0aW9uYXJ5IHdpdGggdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0bwotICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGUgZGVwZW5kZW5jeV9pbmZvIGluc3RhbmNlcyBmb3IgdGhlIGdpdmVuCi0gICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KLQotICAgICAgICAgICAgICAgICAgIFNlZSBkZXBlbmRlbmN5X2luZm8ucHkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgIiIiCi0gICAgc2VsZi5fY29uZmlnX3BhdGggPSBmaWxlX3BhdGgKLSAgICBzZWxmLl93cml0YWJsZSA9IHdyaXRhYmxlCi0gICAgc2VsZi5fcGVuZGluZ191cGxvYWRzID0gW10KLSAgICBpZiBub3Qgc2VsZi5fY29uZmlnX3BhdGg6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCdNdXN0IHN1cHBseSBjb25maWcgZmlsZSBwYXRoLicpCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuX2NvbmZpZ19wYXRoKToKLSAgICAgIGlmIG5vdCB3cml0YWJsZToKLSAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5FbXB0eUNvbmZpZ0Vycm9yKGZpbGVfcGF0aCkKLSAgICAgIHNlbGYuX2NvbmZpZ19kYXRhID0ge30KLSAgICAgIHNlbGYuX1dyaXRlQ29uZmlnVG9GaWxlKHNlbGYuX2NvbmZpZ19wYXRoLCBkZXBlbmRlbmNpZXM9c2VsZi5fY29uZmlnX2RhdGEpCi0gICAgZWxzZToKLSAgICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICdyJykgYXMgZjoKLSAgICAgICAgY29uZmlnX2RhdGEgPSBqc29uLmxvYWQoZikKLSAgICAgIGlmIG5vdCBjb25maWdfZGF0YToKLSAgICAgICAgcmFpc2UgZXhjZXB0aW9ucy5FbXB0eUNvbmZpZ0Vycm9yKGZpbGVfcGF0aCkKLSAgICAgIGNvbmZpZ190eXBlID0gY29uZmlnX2RhdGEucG9wKCdjb25maWdfdHlwZScsIE5vbmUpCi0gICAgICBpZiBjb25maWdfdHlwZSAhPSBzZWxmLkdldENvbmZpZ1R5cGUoKToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgICAgICdTdXBwbGllZCBjb25maWdfdHlwZSAoJXMpIGlzIG5vdCB0aGUgZXhwZWN0ZWQgdHlwZSAoJXMpIGluIGZpbGUgJwotICAgICAgICAgICAgJyVzJyAlIChjb25maWdfdHlwZSwgc2VsZi5HZXRDb25maWdUeXBlKCksIGZpbGVfcGF0aCkpCi0gICAgICBzZWxmLl9jb25maWdfZGF0YSA9IGNvbmZpZ19kYXRhLmdldCgnZGVwZW5kZW5jaWVzJywge30pCi0KLSAgZGVmIEl0ZXJEZXBlbmRlbmN5SW5mbyhzZWxmKToKLSAgICAiIiIgWWllbGRzIGEgRGVwZW5kZW5jeUluZm8gZm9yIGVhY2ggZGVwZW5kZW5jeS9wbGF0Zm9ybSBwYWlyLgotCi0gICAgUmFpc2VzOgotICAgICAgICBSZWFkV3JpdGVFcnJvcjogSWYgY2FsbGVkIHdoZW4gdGhlIGNvbmZpZyBpcyB3cml0YWJsZS4KLSAgICAgICAgVmFsdWVFcnJvcjogSWYgYW55IG9mIHRoZSBkZXBlbmRlbmNpZXMgY29udGFpbiBwYXJ0aWFsIGluZm9ybWF0aW9uIGZvcgotICAgICAgICAgICAgZG93bmxvYWRpbmcgZnJvbSBjbG91ZF9zdG9yYWdlLiAoU2VlIGRlcGVuZGVuY3lfaW5mby5weSkKLSAgICAiIiIKLSAgICBpZiBzZWxmLl93cml0YWJsZToKLSAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuUmVhZFdyaXRlRXJyb3IoCi0gICAgICAgICAgJ1RyeWluZyB0byByZWFkIGRlcGVuZGVuY3kgaW5mbyBmcm9tIGEgIHdyaXRhYmxlIGNvbmZpZy4gRmlsZSBmb3IgJwotICAgICAgICAgICdjb25maWc6ICVzJyAlIHNlbGYuX2NvbmZpZ19wYXRoKQotICAgIGJhc2VfcGF0aCA9IG9zLnBhdGguZGlybmFtZShzZWxmLl9jb25maWdfcGF0aCkKLSAgICBmb3IgZGVwZW5kZW5jeSBpbiBzZWxmLl9jb25maWdfZGF0YToKLSAgICAgIGRlcGVuZGVuY3lfZGljdCA9IHNlbGYuX2NvbmZpZ19kYXRhLmdldChkZXBlbmRlbmN5KQotICAgICAgcGxhdGZvcm1zX2RpY3QgPSBkZXBlbmRlbmN5X2RpY3QuZ2V0KCdmaWxlX2luZm8nLCB7fSkKLSAgICAgIGZvciBwbGF0Zm9ybSBpbiBwbGF0Zm9ybXNfZGljdDoKLSAgICAgICAgcGxhdGZvcm1faW5mbyA9IHBsYXRmb3Jtc19kaWN0LmdldChwbGF0Zm9ybSkKLQotICAgICAgICBsb2NhbF9pbmZvID0gTm9uZQotICAgICAgICBsb2NhbF9wYXRocyA9IHBsYXRmb3JtX2luZm8uZ2V0KCdsb2NhbF9wYXRocycsIFtdKQotICAgICAgICBpZiBsb2NhbF9wYXRoczoKLSAgICAgICAgICBwYXRocyA9IFtdCi0gICAgICAgICAgZm9yIHBhdGggaW4gbG9jYWxfcGF0aHM6Ci0gICAgICAgICAgICBwYXRoID0gc2VsZi5fRm9ybWF0UGF0aChwYXRoKQotICAgICAgICAgICAgcGF0aHMuYXBwZW5kKG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oYmFzZV9wYXRoLCBwYXRoKSkpCi0gICAgICAgICAgbG9jYWxfaW5mbyA9IGxvY2FsX3BhdGhfaW5mby5Mb2NhbFBhdGhJbmZvKHBhdGhzKQotCi0gICAgICAgIGNzX2luZm8gPSBOb25lCi0gICAgICAgIGNzX2J1Y2tldCA9IGRlcGVuZGVuY3lfZGljdC5nZXQoJ2Nsb3VkX3N0b3JhZ2VfYnVja2V0JykKLSAgICAgICAgY3NfYmFzZV9mb2xkZXIgPSBkZXBlbmRlbmN5X2RpY3QuZ2V0KCdjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyJywgJycpCi0gICAgICAgIGRvd25sb2FkX3BhdGggPSBwbGF0Zm9ybV9pbmZvLmdldCgnZG93bmxvYWRfcGF0aCcpCi0gICAgICAgIGlmIGRvd25sb2FkX3BhdGg6Ci0gICAgICAgICAgZG93bmxvYWRfcGF0aCA9IHNlbGYuX0Zvcm1hdFBhdGgoZG93bmxvYWRfcGF0aCkKLSAgICAgICAgICBkb3dubG9hZF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKAotICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oYmFzZV9wYXRoLCBkb3dubG9hZF9wYXRoKSkKLQotICAgICAgICAgIGNzX2hhc2ggPSBwbGF0Zm9ybV9pbmZvLmdldCgnY2xvdWRfc3RvcmFnZV9oYXNoJykKLSAgICAgICAgICBpZiBub3QgY3NfaGFzaDoKLSAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQ29uZmlnRXJyb3IoCi0gICAgICAgICAgICAgICAgJ0RlcGVuZGVuY3kgJXMgaGFzIGNsb3VkIHN0b3JhZ2UgaW5mbyBvbiBwbGF0Zm9ybSAlcywgYnV0IGlzICcKLSAgICAgICAgICAgICAgICAnbWlzc2luZyBhIGNsb3VkIHN0b3JhZ2UgaGFzaC4nLCBkZXBlbmRlbmN5LCBwbGF0Zm9ybSkKLSAgICAgICAgICBjc19yZW1vdGVfcGF0aCA9IHNlbGYuX0Nsb3VkU3RvcmFnZVJlbW90ZVBhdGgoCi0gICAgICAgICAgICAgIGRlcGVuZGVuY3ksIGNzX2hhc2gsIGNzX2Jhc2VfZm9sZGVyKQotICAgICAgICAgIHZlcnNpb25faW5fY3MgPSBwbGF0Zm9ybV9pbmZvLmdldCgndmVyc2lvbl9pbl9jcycpCi0KLSAgICAgICAgICB6aXBfaW5mbyA9IE5vbmUKLSAgICAgICAgICBwYXRoX3dpdGhpbl9hcmNoaXZlID0gcGxhdGZvcm1faW5mby5nZXQoJ3BhdGhfd2l0aGluX2FyY2hpdmUnKQotICAgICAgICAgIGlmIHBhdGhfd2l0aGluX2FyY2hpdmU6Ci0gICAgICAgICAgICB1bnppcF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKAotICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoZG93bmxvYWRfcGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICclc18lc18lcycgJSAoZGVwZW5kZW5jeSwgcGxhdGZvcm0sIGNzX2hhc2gpKSkKLSAgICAgICAgICAgIHN0YWxlX3VuemlwX3BhdGhfZ2xvYiA9IG9zLnBhdGguYWJzcGF0aCgKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGRvd25sb2FkX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXNfJXNfJXMnICUgKGRlcGVuZGVuY3ksIHBsYXRmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbMC05YS1mXScgKiA0MCkpKQotICAgICAgICAgICAgemlwX2luZm8gPSBhcmNoaXZlX2luZm8uQXJjaGl2ZUluZm8oCi0gICAgICAgICAgICAgICAgZG93bmxvYWRfcGF0aCwgdW56aXBfcGF0aCwgcGF0aF93aXRoaW5fYXJjaGl2ZSwKLSAgICAgICAgICAgICAgICBzdGFsZV91bnppcF9wYXRoX2dsb2IpCi0KLSAgICAgICAgICBjc19pbmZvID0gY2xvdWRfc3RvcmFnZV9pbmZvLkNsb3VkU3RvcmFnZUluZm8oCi0gICAgICAgICAgICAgIGNzX2J1Y2tldCwgY3NfaGFzaCwgZG93bmxvYWRfcGF0aCwgY3NfcmVtb3RlX3BhdGgsCi0gICAgICAgICAgICAgIHZlcnNpb25faW5fY3M9dmVyc2lvbl9pbl9jcywgYXJjaGl2ZV9pbmZvPXppcF9pbmZvKQotCi0gICAgICAgIGRlcF9pbmZvID0gZGVwZW5kZW5jeV9pbmZvLkRlcGVuZGVuY3lJbmZvKAotICAgICAgICAgICAgZGVwZW5kZW5jeSwgcGxhdGZvcm0sIHNlbGYuX2NvbmZpZ19wYXRoLAotICAgICAgICAgICAgbG9jYWxfcGF0aF9pbmZvPWxvY2FsX2luZm8sIGNsb3VkX3N0b3JhZ2VfaW5mbz1jc19pbmZvKQotICAgICAgICB5aWVsZCBkZXBfaW5mbwotCi0gIEBjbGFzc21ldGhvZAotICBkZWYgR2V0Q29uZmlnVHlwZShjbHMpOgotICAgIHJldHVybiAnQmFzZUNvbmZpZycKLQotICBAcHJvcGVydHkKLSAgZGVmIGNvbmZpZ19wYXRoKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9jb25maWdfcGF0aAotCi0gIGRlZiBBZGRDbG91ZFN0b3JhZ2VEZXBlbmRlbmN5VXBkYXRlSm9iKAotICAgICAgc2VsZiwgZGVwZW5kZW5jeSwgcGxhdGZvcm0sIGRlcGVuZGVuY3lfcGF0aCwgdmVyc2lvbj1Ob25lLAotICAgICAgZXhlY3V0ZV9qb2I9VHJ1ZSk6Ci0gICAgIiIiVXBkYXRlIHRoZSBmaWxlIGRvd25sb2FkZWQgZnJvbSBjbG91ZCBzdG9yYWdlIGZvciBhIGRlcGVuZGVuY3kvcGxhdGZvcm0uCi0KLSAgICBVcGxvYWQgYSBuZXcgZmlsZSB0byBjbG91ZCBzdG9yYWdlIGZvciB0aGUgZ2l2ZW4gZGVwZW5kZW5jeSBhbmQgcGxhdGZvcm0KLSAgICBwYWlyIGFuZCB1cGRhdGUgdGhlIGNsb3VkIHN0b3JhZ2UgaGFzaCBhbmQgdGhlIHZlcnNpb24gZm9yIHRoZSBnaXZlbiBwYWlyLgotCi0gICAgRXhhbXBsZSB1c2FnZToKLSAgICAgIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHVwZGF0ZSB0aGUgZGVmYXVsdCBwbGF0Zm9ybSBmb3IgJ2RlcF9uYW1lJzoKLSAgICAgICAgICBVcGRhdGVDbG91ZFN0b3JhZ2VEZXBlbmRlbmN5KCdkZXBfbmFtZScsICdkZWZhdWx0JywgJ3BhdGgvdG8vZmlsZScpCi0KLSAgICAgIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHVwZGF0ZSBib3RoIHRoZSBtYWMgYW5kIHdpbiBwbGF0Zm9ybXMgZm9yICdkZXBfbmFtZScsCi0gICAgICBvciBuZWl0aGVyIGlmIGVpdGhlciB1cGRhdGUgZmFpbHM6Ci0gICAgICAgICAgVXBkYXRlQ2xvdWRTdG9yYWdlRGVwZW5kZW5jeSgKLSAgICAgICAgICAgICAgJ2RlcF9uYW1lJywgJ21hY194ODZfNjQnLCAncGF0aC90by9tYWMvZmlsZScsIGV4ZWN1dGVfam9iPUZhbHNlKQotICAgICAgICAgIFVwZGF0ZUNsb3VkU3RvcmFnZURlcGVuZGVuY3koCi0gICAgICAgICAgICAgICdkZXBfbmFtZScsICd3aW5fQU1ENjQnLCAncGF0aC90by93aW4vZmlsZScsIGV4ZWN1dGVfam9iPUZhbHNlKQotICAgICAgICAgIEV4ZWN1dGVVcGRhdGVKb2JzKCkKLQotICAgIEFyZ3M6Ci0gICAgICBkZXBlbmRlbmN5OiBUaGUgZGVwZW5kZW5jeSB0byB1cGRhdGUuCi0gICAgICBwbGF0Zm9ybTogVGhlIHBsYXRmb3JtIHRvIHVwZGF0ZSB0aGUgZGVwZW5kZW5jeSBpbmZvIGZvci4KLSAgICAgIGRlcGVuZGVuY3lfcGF0aDogUGF0aCB0byB0aGUgbmV3IGRlcGVuZGVuY3kgdG8gYmUgdXNlZC4KLSAgICAgIHZlcnNpb246IFZlcnNpb24gb2YgdGhlIHVwZGF0ZWQgZGVwZW5kZW5jeSwgZm9yIGNoZWNraW5nIGZ1dHVyZSB1cGRhdGVzCi0gICAgICAgICAgYWdhaW5zdC4KLSAgICAgIGV4ZWN1dGVfam9iOiBUcnVlIGlmIHRoZSBjb25maWcgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gZGlzayBhbmQgdGhlIGZpbGUKLSAgICAgICAgICBzaG91bGQgYmUgdXBsb2FkZWQgdG8gY2xvdWQgc3RvcmFnZSBhZnRlciB0aGUgdXBkYXRlLiBGYWxzZSBpZgotICAgICAgICAgIG11bHRpcGxlIHVwZGF0ZXMgc2hvdWxkIGJlIHBlcmZvcm1lZCBhdG9taWNhbGx5LiBNdXN0IGNhbGwKLSAgICAgICAgICBFeGVjdXRlVXBkYXRlSm9icyBhZnRlciBhbGwgbm9uLWV4ZWN1dGVkIGpvYnMgYXJlIGFkZGVkIHRvIGNvbXBsZXRlCi0gICAgICAgICAgdGhlIHVwZGF0ZS4KLQotICAgIFJhaXNlczoKLSAgICAgIFJlYWRXcml0ZUVycm9yOiBJZiB0aGUgY29uZmlnIHdhcyBub3QgaW5pdGlhbGl6ZWQgYXMgd3JpdGFibGUsIG9yIGlmCi0gICAgICAgICAgfGV4ZWN1dGVfam9ifCBpcyBUcnVlIGJ1dCB0aGUgY29uZmlnIGhhcyB1cGRhdGUgam9icyBzdGlsbCBwZW5kaW5nCi0gICAgICAgICAgZXhlY3V0aW9uLgotICAgICAgVmFsdWVFcnJvcjogSWYgbm8gaW5mb3JtYXRpb24gZXhpc3RzIGluIHRoZSBjb25maWcgZm9yIHxkZXBlbmRlbmN5fCBvbgotICAgICAgICAgIHxwbGF0Zm9ybXwuCi0gICAgIiIiCi0gICAgc2VsZi5fVmFsaWRhdGVJc0NvbmZpZ1VwZGF0YWJsZSgKLSAgICAgICAgZXhlY3V0ZV9qb2I9ZXhlY3V0ZV9qb2IsIGRlcGVuZGVuY3k9ZGVwZW5kZW5jeSwgcGxhdGZvcm09cGxhdGZvcm0pCi0gICAgY3NfaGFzaCA9IGNsb3VkX3N0b3JhZ2UuQ2FsY3VsYXRlSGFzaChkZXBlbmRlbmN5X3BhdGgpCi0gICAgaWYgdmVyc2lvbjoKLSAgICAgIHNlbGYuX1NldFBsYXRmb3JtRGF0YShkZXBlbmRlbmN5LCBwbGF0Zm9ybSwgJ3ZlcnNpb25faW5fY3MnLCB2ZXJzaW9uKQotICAgIHNlbGYuX1NldFBsYXRmb3JtRGF0YShkZXBlbmRlbmN5LCBwbGF0Zm9ybSwgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCcsIGNzX2hhc2gpCi0KLSAgICBjc19iYXNlX2ZvbGRlciA9IHNlbGYuX0dldFBsYXRmb3JtRGF0YSgKLSAgICAgICAgZGVwZW5kZW5jeSwgcGxhdGZvcm0sICdjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyJykKLSAgICBjc19idWNrZXQgPSBzZWxmLl9HZXRQbGF0Zm9ybURhdGEoCi0gICAgICAgIGRlcGVuZGVuY3ksIHBsYXRmb3JtLCAnY2xvdWRfc3RvcmFnZV9idWNrZXQnKQotICAgIGNzX3JlbW90ZV9wYXRoID0gc2VsZi5fQ2xvdWRTdG9yYWdlUmVtb3RlUGF0aCgKLSAgICAgICAgZGVwZW5kZW5jeSwgY3NfaGFzaCwgY3NfYmFzZV9mb2xkZXIpCi0gICAgc2VsZi5fcGVuZGluZ191cGxvYWRzLmFwcGVuZCh1cGxvYWRlci5DbG91ZFN0b3JhZ2VVcGxvYWRlcigKLSAgICAgICAgY3NfYnVja2V0LCBjc19yZW1vdGVfcGF0aCwgZGVwZW5kZW5jeV9wYXRoKSkKLSAgICBpZiBleGVjdXRlX2pvYjoKLSAgICAgIHNlbGYuRXhlY3V0ZVVwZGF0ZUpvYnMoKQotCi0gIGRlZiBFeGVjdXRlVXBkYXRlSm9icyhzZWxmLCBmb3JjZT1GYWxzZSk6Ci0gICAgIiIiV3JpdGUgYWxsIGNvbmZpZyBjaGFuZ2VzIHRvIHRoZSBjb25maWdfcGF0aCBzcGVjaWZpZWQgaW4gX19pbml0X18uCi0KLSAgICBVcGxvYWQgYWxsIGZpbGVzIHBlbmRpbmcgdXBsb2FkIGFuZCB0aGVuIHdyaXRlIHRoZSB1cGRhdGVkIGNvbmZpZyB0bwotICAgIGZpbGUuIEF0dGVtcHQgdG8gcmVtb3ZlIGFsbCB1cGxvYWRlZCBmaWxlcyBvbiBmYWlsdXJlLgotCi0gICAgQXJnczoKLSAgICAgIGZvcmNlOiBUcnVlIGlmIGZpbGVzIHNob3VsZCBiZSB1cGxvYWRlZCB0byBjbG91ZCBzdG9yYWdlIGV2ZW4gaWYgYQotICAgICAgICAgIGZpbGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHVwbG9hZCBsb2NhdGlvbi4KLQotICAgIFJldHVybnM6Ci0gICAgICBUcnVlOiBpZiB0aGUgY29uZmlnIHdhcyBkaXJ0eSBhbmQgdGhlIHVwbG9hZCBzdWNjZWVkZWQuCi0gICAgICBGYWxzZTogaWYgdGhlIGNvbmZpZyB3YXMgbm90IGRpcnR5LgotCi0gICAgUmFpc2VzOgotICAgICAgQ2xvdWRTdG9yYWdlVXBsb2FkQ29uZmxpY3RFcnJvcjogSWYgfGZvcmNlfCBpcyBGYWxzZSBhbmQgdGhlIHBvdGVudGlhbAotICAgICAgICAgIHVwbG9hZCBsb2NhdGlvbiBvZiBhIGZpbGUgYWxyZWFkeSBleGlzdHMuCi0gICAgICBDbG91ZFN0b3JhZ2VFcnJvcjogSWYgY29weWluZyBhbiBleGlzdGluZyBmaWxlIHRvIHRoZSBiYWNrdXAgbG9jYXRpb24KLSAgICAgICAgICBvciB1cGxvYWRpbmcgYSBuZXcgZmlsZSBmYWlscy4KLSAgICAiIiIKLSAgICBzZWxmLl9WYWxpZGF0ZUlzQ29uZmlnVXBkYXRhYmxlKCkKLSAgICBpZiBub3Qgc2VsZi5fSXNEaXJ0eSgpOgotICAgICAgbG9nZ2luZy5pbmZvKCdFeGVjdXRlVXBkYXRlSm9icyBjYWxsZWQgb24gY2xlYW4gY29uZmlnJykKLSAgICAgIHJldHVybiBGYWxzZQotICAgIGlmIG5vdCBzZWxmLl9wZW5kaW5nX3VwbG9hZHM6Ci0gICAgICBsb2dnaW5nLmRlYnVnKCdObyBmaWxlcyBuZWVkaW5nIHVwbG9hZC4nKQotICAgIGVsc2U6Ci0gICAgICB0cnk6Ci0gICAgICAgIGZvciBpdGVtX3BlbmRpbmdfdXBsb2FkIGluIHNlbGYuX3BlbmRpbmdfdXBsb2FkczoKLSAgICAgICAgICBpdGVtX3BlbmRpbmdfdXBsb2FkLlVwbG9hZChmb3JjZSkKLSAgICAgICAgc2VsZi5fV3JpdGVDb25maWdUb0ZpbGUoc2VsZi5fY29uZmlnX3BhdGgsIHNlbGYuX2NvbmZpZ19kYXRhKQotICAgICAgICBzZWxmLl9wZW5kaW5nX3VwbG9hZHMgPSBbXQotICAgICAgZXhjZXB0OgotICAgICAgICAjIEF0dGVtcHQgdG8gcm9sbGJhY2sgdGhlIHVwZGF0ZSBpbiBhbnkgaW5zdGFuY2Ugb2YgZmFpbHVyZSwgZXZlbiB1c2VyCi0gICAgICAgICMgaW50ZXJydXB0IHZpYSBDdHJsK0M7IGJ1dCBkb24ndCBjb25zdW1lIHRoZSBleGNlcHRpb24uCi0gICAgICAgIGxvZ2dpbmcuZXJyb3IoJ1VwZGF0ZSBmYWlsZWQsIGF0dGVtcHRpbmcgdG8gcm9sbCBpdCBiYWNrLicpCi0gICAgICAgIGZvciB1cGxvYWRfaXRlbSBpbiByZXZlcnNlZChzZWxmLl9wZW5kaW5nX3VwbG9hZHMpOgotICAgICAgICAgIHVwbG9hZF9pdGVtLlJvbGxiYWNrKCkKLSAgICAgICAgcmFpc2UKLSAgICByZXR1cm4gVHJ1ZQotCi0gIGRlZiBHZXRWZXJzaW9uKHNlbGYsIGRlcGVuZGVuY3ksIHBsYXRmb3JtKToKLSAgICAiIiJSZXR1cm4gdGhlIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBkZXBlbmRlbmN5LiIiIgotICAgIHJldHVybiBzZWxmLl9HZXRQbGF0Zm9ybURhdGEoCi0gICAgICAgIGRlcGVuZGVuY3ksIHBsYXRmb3JtLCBkYXRhX3R5cGU9J3ZlcnNpb25faW5fY3MnKQotCi0gIGRlZiBfSXNEaXJ0eShzZWxmKToKLSAgICB3aXRoIG9wZW4oc2VsZi5fY29uZmlnX3BhdGgsICdyJykgYXMgZnN0cmVhbToKLSAgICAgIGN1cnJfY29uZmlnX2RhdGEgPSBqc29uLmxvYWQoZnN0cmVhbSkKLSAgICBjdXJyX2NvbmZpZ19kYXRhID0gY3Vycl9jb25maWdfZGF0YS5nZXQoJ2RlcGVuZGVuY2llcycsIHt9KQotICAgIHJldHVybiBzZWxmLl9jb25maWdfZGF0YSAhPSBjdXJyX2NvbmZpZ19kYXRhCi0KLSAgZGVmIF9TZXRQbGF0Zm9ybURhdGEoc2VsZiwgZGVwZW5kZW5jeSwgcGxhdGZvcm0sIGRhdGFfdHlwZSwgZGF0YSk6Ci0gICAgc2VsZi5fVmFsaWRhdGVJc0NvbmZpZ1dyaXRhYmxlKCkKLSAgICBkZXBlbmRlbmN5X2RpY3QgPSBzZWxmLl9jb25maWdfZGF0YS5nZXQoZGVwZW5kZW5jeSwge30pCi0gICAgcGxhdGZvcm1fZGljdCA9IGRlcGVuZGVuY3lfZGljdC5nZXQoJ2ZpbGVfaW5mbycsIHt9KS5nZXQocGxhdGZvcm0pCi0gICAgaWYgbm90IHBsYXRmb3JtX2RpY3Q6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBwbGF0Zm9ybSBkYXRhIGZvciBwbGF0Zm9ybSAlcyBvbiBkZXBlbmRlbmN5ICVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgIChwbGF0Zm9ybSwgZGVwZW5kZW5jeSkpCi0gICAgaWYgKGRhdGFfdHlwZSA9PSAnY2xvdWRfc3RvcmFnZV9idWNrZXQnIG9yCi0gICAgICAgIGRhdGFfdHlwZSA9PSAnY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlcicpOgotICAgICAgc2VsZi5fY29uZmlnX2RhdGFbZGVwZW5kZW5jeV1bZGF0YV90eXBlXSA9IGRhdGEKLSAgICBlbHNlOgotICAgICAgc2VsZi5fY29uZmlnX2RhdGFbZGVwZW5kZW5jeV1bJ2ZpbGVfaW5mbyddW3BsYXRmb3JtXVtkYXRhX3R5cGVdID0gZGF0YQotCi0gIGRlZiBfR2V0UGxhdGZvcm1EYXRhKHNlbGYsIGRlcGVuZGVuY3ksIHBsYXRmb3JtLCBkYXRhX3R5cGU9Tm9uZSk6Ci0gICAgZGVwZW5kZW5jeV9kaWN0ID0gc2VsZi5fY29uZmlnX2RhdGEuZ2V0KGRlcGVuZGVuY3ksIHt9KQotICAgIGlmIG5vdCBkZXBlbmRlbmN5X2RpY3Q6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCdEZXBlbmRlbmN5ICVzIGlzIG5vdCBpbiBjb25maWcuJyAlIGRlcGVuZGVuY3kpCi0gICAgcGxhdGZvcm1fZGljdCA9IGRlcGVuZGVuY3lfZGljdC5nZXQoJ2ZpbGVfaW5mbycsIHt9KS5nZXQocGxhdGZvcm0pCi0gICAgaWYgbm90IHBsYXRmb3JtX2RpY3Q6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBwbGF0Zm9ybSBkYXRhIGZvciBwbGF0Zm9ybSAlcyBvbiBkZXBlbmRlbmN5ICVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgIChwbGF0Zm9ybSwgZGVwZW5kZW5jeSkpCi0gICAgaWYgZGF0YV90eXBlOgotICAgICAgaWYgKGRhdGFfdHlwZSA9PSAnY2xvdWRfc3RvcmFnZV9idWNrZXQnIG9yCi0gICAgICAgICAgZGF0YV90eXBlID09ICdjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyJyk6Ci0gICAgICAgIHJldHVybiBkZXBlbmRlbmN5X2RpY3QuZ2V0KGRhdGFfdHlwZSkKLSAgICAgIHJldHVybiBwbGF0Zm9ybV9kaWN0LmdldChkYXRhX3R5cGUpCi0gICAgcmV0dXJuIHBsYXRmb3JtX2RpY3QKLQotICBkZWYgX1ZhbGlkYXRlSXNDb25maWdVcGRhdGFibGUoCi0gICAgICBzZWxmLCBleGVjdXRlX2pvYj1GYWxzZSwgZGVwZW5kZW5jeT1Ob25lLCBwbGF0Zm9ybT1Ob25lKToKLSAgICBzZWxmLl9WYWxpZGF0ZUlzQ29uZmlnV3JpdGFibGUoKQotICAgIGlmIHNlbGYuX0lzRGlydHkoKSBhbmQgZXhlY3V0ZV9qb2I6Ci0gICAgICByYWlzZSBleGNlcHRpb25zLlJlYWRXcml0ZUVycm9yKAotICAgICAgICAgICdBIGNoYW5nZSBoYXMgYWxyZWFkeSBiZWVuIG1hZGUgdG8gdGhpcyBjb25maWcuIEVpdGhlciBjYWxsIHdpdGhvdXQnCi0gICAgICAgICAgJ3VzaW5nIHRoZSBleGVjdXRlX2pvYiBvcHRpb24gb3IgZmlyc3QgY2FsbCBFeGVjdXRlVXBkYXRlSm9icygpLicpCi0gICAgaWYgZGVwZW5kZW5jeSBhbmQgbm90IHNlbGYuX2NvbmZpZ19kYXRhLmdldChkZXBlbmRlbmN5KToKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCB1cGRhdGUgaW5mb3JtYXRpb24gYmVjYXVzZSBkZXBlbmRlbmN5ICVzIGRvZXMgJwotICAgICAgICAgICAgICAgICAgICAgICAnbm90IGV4aXN0LicgJSBkZXBlbmRlbmN5KQotICAgIGlmIHBsYXRmb3JtIGFuZCBub3Qgc2VsZi5fR2V0UGxhdGZvcm1EYXRhKGRlcGVuZGVuY3ksIHBsYXRmb3JtKToKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIGRlcGVuZGVuY3kgaW5mbyBpcyBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiAnCi0gICAgICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmN5OiAlcycgJSBkZXBlbmRlbmN5KQotCi0gIGRlZiBfVmFsaWRhdGVJc0NvbmZpZ1dyaXRhYmxlKHNlbGYpOgotICAgIGlmIG5vdCBzZWxmLl93cml0YWJsZToKLSAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuUmVhZFdyaXRlRXJyb3IoCi0gICAgICAgICAgJ1RyeWluZyB0byB1cGRhdGUgdGhlIGluZm9ybWF0aW9uIGZyb20gYSByZWFkLW9ubHkgY29uZmlnLiAnCi0gICAgICAgICAgJ0ZpbGUgZm9yIGNvbmZpZzogJXMnICUgc2VsZi5fY29uZmlnX3BhdGgpCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgX0Nsb3VkU3RvcmFnZVJlbW90ZVBhdGgoZGVwZW5kZW5jeSwgY3NfaGFzaCwgY3NfYmFzZV9mb2xkZXIpOgotICAgIGNzX3JlbW90ZV9maWxlID0gJyVzXyVzJyAlIChkZXBlbmRlbmN5LCBjc19oYXNoKQotICAgIGNzX3JlbW90ZV9wYXRoID0gY3NfcmVtb3RlX2ZpbGUgaWYgbm90IGNzX2Jhc2VfZm9sZGVyIGVsc2UgKAotICAgICAgICAnJXMvJXMnICUgKGNzX2Jhc2VfZm9sZGVyLCBjc19yZW1vdGVfZmlsZSkpCi0gICAgcmV0dXJuIGNzX3JlbW90ZV9wYXRoCi0KLSAgQGNsYXNzbWV0aG9kCi0gIGRlZiBfRm9ybWF0UGF0aChjbHMsIGZpbGVfcGF0aCk6Ci0gICAgIiIiIEZvcm1hdCB8ZmlsZV9wYXRofCBmb3IgdGhlIGN1cnJlbnQgZmlsZSBzeXN0ZW0uCi0KLSAgICBXZSBtYXkgYmUgZG93bmxvYWRpbmcgZmlsZXMgZm9yIGFub3RoZXIgcGxhdGZvcm0sIHNvIHBhdGhzIG11c3QgYmUKLSAgICBkb3dubG9hZGFibGUgb24gdGhlIGN1cnJlbnQgc3lzdGVtLgotICAgICIiIgotICAgIGlmIG5vdCBmaWxlX3BhdGg6Ci0gICAgICByZXR1cm4gZmlsZV9wYXRoCi0gICAgaWYgb3MucGF0aC5zZXAgIT0gJ1xcJzoKLSAgICAgIHJldHVybiBmaWxlX3BhdGgucmVwbGFjZSgnXFwnLCBvcy5wYXRoLnNlcCkKLSAgICBlbGlmIG9zLnBhdGguc2VwICE9ICcvJzoKLSAgICAgIHJldHVybiBmaWxlX3BhdGgucmVwbGFjZSgnLycsIG9zLnBhdGguc2VwKQotICAgIHJldHVybiBmaWxlX3BhdGgKLQotICBAY2xhc3NtZXRob2QKLSAgZGVmIF9Xcml0ZUNvbmZpZ1RvRmlsZShjbHMsIGZpbGVfcGF0aCwgZGVwZW5kZW5jaWVzPU5vbmUpOgotICAgIGpzb25fZGljdCA9IGNscy5fR2V0SnNvbkRpY3QoZGVwZW5kZW5jaWVzKQotICAgIGZpbGVfZGlyID0gb3MucGF0aC5kaXJuYW1lKGZpbGVfcGF0aCkKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9kaXIpOgotICAgICAgb3MubWFrZWRpcnMoZmlsZV9kaXIpCi0gICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3cnKSBhcyBvdXRmaWxlOgotICAgICAganNvbi5kdW1wKAotICAgICAgICAgIGpzb25fZGljdCwgb3V0ZmlsZSwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlLCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKQotICAgIHJldHVybiBqc29uX2RpY3QKLQotICBAY2xhc3NtZXRob2QKLSAgZGVmIF9HZXRKc29uRGljdChjbHMsIGRlcGVuZGVuY2llcz1Ob25lKToKLSAgICBkZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXMgb3Ige30KLSAgICBqc29uX2RpY3QgPSB7J2NvbmZpZ190eXBlJzogY2xzLkdldENvbmZpZ1R5cGUoKSwKLSAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IGRlcGVuZGVuY2llc30KLSAgICByZXR1cm4ganNvbl9kaWN0CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyL2Jhc2VfY29uZmlnX3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9iYXNlX2NvbmZpZ191bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMGRjNzc1Yi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyL2Jhc2VfY29uZmlnX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTUyNSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAotCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHB5X3V0aWxzIGltcG9ydCBjbG91ZF9zdG9yYWdlCi1pbXBvcnQgbW9jawotZnJvbSBweWZha2VmcyBpbXBvcnQgZmFrZV9maWxlc3lzdGVtX3VuaXR0ZXN0Ci1mcm9tIHB5ZmFrZWZzIGltcG9ydCBmYWtlX2ZpbGVzeXN0ZW0KLWZyb20gcHlmYWtlZnMgaW1wb3J0IGZha2VfZmlsZXN5c3RlbV9nbG9iCi0KLWltcG9ydCBkZXBlbmRlbmN5X21hbmFnZXIKLWZyb20gZGVwZW5kZW5jeV9tYW5hZ2VyIGltcG9ydCB1cGxvYWRlcgotCi0KLWNsYXNzIEJhc2VDb25maWdDcmVhdGlvbkFuZFVwZGF0ZVVuaXR0ZXN0cyhmYWtlX2ZpbGVzeXN0ZW1fdW5pdHRlc3QuVGVzdENhc2UpOgotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5hZGRUeXBlRXF1YWxpdHlGdW5jKHVwbG9hZGVyLkNsb3VkU3RvcmFnZVVwbG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRlci5DbG91ZFN0b3JhZ2VVcGxvYWRlci5fX2VxX18pCi0gICAgc2VsZi5zZXRVcFB5ZmFrZWZzKCkKLSAgICBzZWxmLmRlcGVuZGVuY2llcyA9IHsKLSAgICAgICAgJ2RlcDEnOiB7J2Nsb3VkX3N0b3JhZ2VfYnVja2V0JzogJ2J1Y2tldDEnLAotICAgICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlcic6ICdkZXBlbmRlbmNpZXNfZm9sZGVyJywKLSAgICAgICAgICAgICAgICAgJ2ZpbGVfaW5mbyc6IHsKLSAgICAgICAgICAgICAgICAgICAgICdwbGF0MSc6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9oYXNoJzogJ2hhc2gxMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnLi4vLi4vcmVsYXRpdmUvZGVwMS9wYXRoMSd9LAotICAgICAgICAgICAgICAgICAgICAgJ3BsYXQyJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDEyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9yZWxhdGl2ZS9kZXAxL3BhdGgyJ319fSwKLSAgICAgICAgJ2RlcDInOiB7J2Nsb3VkX3N0b3JhZ2VfYnVja2V0JzogJ2J1Y2tldDInLAotICAgICAgICAgICAgICAgICAnZmlsZV9pbmZvJzogewotICAgICAgICAgICAgICAgICAgICAgJ3BsYXQxJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDIxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9yZWxhdGl2ZS9kZXAyL3BhdGgxJ30sCi0gICAgICAgICAgICAgICAgICAgICAncGxhdDInOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdoYXNoMjInLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJy4uLy4uL3JlbGF0aXZlL2RlcDIvcGF0aDInfX19fQotCi0gICAgc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzID0gWwotICAgICAgIyBweWxpbnQ6IGRpc2FibGU9YmFkLWNvbnRpbnVhdGlvbgotICAgICAgJ3snLCAnImNvbmZpZ190eXBlIjogIkJhc2VDb25maWciLCcsICciZGVwZW5kZW5jaWVzIjogeycsCi0gICAgICAgICciZGVwMSI6IHsnLCAnImNsb3VkX3N0b3JhZ2VfYmFzZV9mb2xkZXIiOiAiZGVwZW5kZW5jaWVzX2ZvbGRlciIsJywKLSAgICAgICAgICAnImNsb3VkX3N0b3JhZ2VfYnVja2V0IjogImJ1Y2tldDEiLCcsICciZmlsZV9pbmZvIjogeycsCi0gICAgICAgICAgICAnInBsYXQxIjogeycsICciY2xvdWRfc3RvcmFnZV9oYXNoIjogImhhc2gxMSIsJywKLSAgICAgICAgICAgICAgJyJkb3dubG9hZF9wYXRoIjogIi4uLy4uL3JlbGF0aXZlL2RlcDEvcGF0aDEiJywgJ30sJywKLSAgICAgICAgICAgICcicGxhdDIiOiB7JywgJyJjbG91ZF9zdG9yYWdlX2hhc2giOiAiaGFzaDEyIiwnLAotICAgICAgICAgICAgICAnImRvd25sb2FkX3BhdGgiOiAiLi4vLi4vcmVsYXRpdmUvZGVwMS9wYXRoMiInLCAnfScsICd9JywgJ30sJywKLSAgICAgICAgJyJkZXAyIjogeycsICciY2xvdWRfc3RvcmFnZV9idWNrZXQiOiAiYnVja2V0MiIsJywgJyJmaWxlX2luZm8iOiB7JywKLSAgICAgICAgICAgICcicGxhdDEiOiB7JywgJyJjbG91ZF9zdG9yYWdlX2hhc2giOiAiaGFzaDIxIiwnLAotICAgICAgICAgICAgICAnImRvd25sb2FkX3BhdGgiOiAiLi4vLi4vcmVsYXRpdmUvZGVwMi9wYXRoMSInLCAnfSwnLAotICAgICAgICAgICAgJyJwbGF0MiI6IHsnLCAnImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICJoYXNoMjIiLCcsCi0gICAgICAgICAgICAgICciZG93bmxvYWRfcGF0aCI6ICIuLi8uLi9yZWxhdGl2ZS9kZXAyL3BhdGgyIicsICd9JywgJ30nLCAnfScsCi0gICAgICAnfScsICd9J10KLQotICAgIHNlbGYuZmlsZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbigKLSAgICAgICAgJ3BhdGgnLCAndG8nLCAnY29uZmlnJywgJ2ZpbGUnKSkKLQotICAgIHNlbGYubmV3X2RlcF9wYXRoID0gJ3BhdGgvdG8vbmV3L2RlcCcKLSAgICBzZWxmLmZzLkNyZWF0ZUZpbGUoc2VsZi5uZXdfZGVwX3BhdGgpCi0gICAgc2VsZi5uZXdfZGVwX2hhc2ggPSAnQTIzQjU2QjdGMjNFNzk4NjAxRicKLSAgICBzZWxmLm5ld19kZXBlbmRlbmNpZXMgPSB7Ci0gICAgICAgICdkZXAxJzogeydjbG91ZF9zdG9yYWdlX2J1Y2tldCc6ICdidWNrZXQxJywKLSAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfYmFzZV9mb2xkZXInOiAnZGVwZW5kZW5jaWVzX2ZvbGRlcicsCi0gICAgICAgICAgICAgICAgICdmaWxlX2luZm8nOiB7Ci0gICAgICAgICAgICAgICAgICAgICAncGxhdDEnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdoYXNoMTEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJy4uLy4uL3JlbGF0aXZlL2RlcDEvcGF0aDEnfSwKLSAgICAgICAgICAgICAgICAgICAgICdwbGF0Mic6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9oYXNoJzogc2VsZi5uZXdfZGVwX2hhc2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnLi4vLi4vcmVsYXRpdmUvZGVwMS9wYXRoMid9fX0sCi0gICAgICAgICdkZXAyJzogeydjbG91ZF9zdG9yYWdlX2J1Y2tldCc6ICdidWNrZXQyJywKLSAgICAgICAgICAgICAgICAgJ2ZpbGVfaW5mbyc6IHsKLSAgICAgICAgICAgICAgICAgICAgICdwbGF0MSc6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9oYXNoJzogJ2hhc2gyMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnLi4vLi4vcmVsYXRpdmUvZGVwMi9wYXRoMSd9LAotICAgICAgICAgICAgICAgICAgICAgJ3BsYXQyJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDIyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9yZWxhdGl2ZS9kZXAyL3BhdGgyJ319fX0KLSAgICBzZWxmLm5ld19idWNrZXQgPSAnYnVja2V0MScKLSAgICBzZWxmLm5ld19yZW1vdGVfcGF0aCA9ICdkZXBlbmRlbmNpZXNfZm9sZGVyL2RlcDFfJXMnICUgc2VsZi5uZXdfZGVwX2hhc2gKLSAgICBzZWxmLm5ld19wZW5kaW5nX3VwbG9hZCA9IHVwbG9hZGVyLkNsb3VkU3RvcmFnZVVwbG9hZGVyKAotICAgICAgICBzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X3JlbW90ZV9wYXRoLCBzZWxmLm5ld19kZXBfcGF0aCkKLSAgICBzZWxmLmV4cGVjdGVkX25ld19iYWNrdXBfcGF0aCA9ICcuJy5qb2luKFtzZWxmLm5ld19yZW1vdGVfcGF0aCwgJ29sZCddKQotICAgIHNlbGYubmV3X2V4cGVjdGVkX2ZpbGVfbGluZXMgPSBbCi0gICAgICAjIHB5bGludDogZGlzYWJsZT1iYWQtY29udGludWF0aW9uCi0gICAgICAneycsICciY29uZmlnX3R5cGUiOiAiQmFzZUNvbmZpZyIsJywgJyJkZXBlbmRlbmNpZXMiOiB7JywKLSAgICAgICAgJyJkZXAxIjogeycsICciY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlciI6ICJkZXBlbmRlbmNpZXNfZm9sZGVyIiwnLAotICAgICAgICAgICciY2xvdWRfc3RvcmFnZV9idWNrZXQiOiAiYnVja2V0MSIsJywgJyJmaWxlX2luZm8iOiB7JywKLSAgICAgICAgICAgICcicGxhdDEiOiB7JywgJyJjbG91ZF9zdG9yYWdlX2hhc2giOiAiaGFzaDExIiwnLAotICAgICAgICAgICAgICAnImRvd25sb2FkX3BhdGgiOiAiLi4vLi4vcmVsYXRpdmUvZGVwMS9wYXRoMSInLCAnfSwnLAotICAgICAgICAgICAgJyJwbGF0MiI6IHsnLCAnImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICIlcyIsJyAlIHNlbGYubmV3X2RlcF9oYXNoLAotICAgICAgICAgICAgICAnImRvd25sb2FkX3BhdGgiOiAiLi4vLi4vcmVsYXRpdmUvZGVwMS9wYXRoMiInLCAnfScsICd9JywgJ30sJywKLSAgICAgICAgJyJkZXAyIjogeycsICciY2xvdWRfc3RvcmFnZV9idWNrZXQiOiAiYnVja2V0MiIsJywgJyJmaWxlX2luZm8iOiB7JywKLSAgICAgICAgICAgICcicGxhdDEiOiB7JywgJyJjbG91ZF9zdG9yYWdlX2hhc2giOiAiaGFzaDIxIiwnLAotICAgICAgICAgICAgICAnImRvd25sb2FkX3BhdGgiOiAiLi4vLi4vcmVsYXRpdmUvZGVwMi9wYXRoMSInLCAnfSwnLAotICAgICAgICAgICAgJyJwbGF0MiI6IHsnLCAnImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICJoYXNoMjIiLCcsCi0gICAgICAgICAgICAgICciZG93bmxvYWRfcGF0aCI6ICIuLi8uLi9yZWxhdGl2ZS9kZXAyL3BhdGgyIicsICd9JywgJ30nLCAnfScsCi0gICAgICAnfScsICd9J10KLQotICAgIHNlbGYuZmluYWxfZGVwX3BhdGggPSAncGF0aC90by9maW5hbC9kZXAnCi0gICAgc2VsZi5mcy5DcmVhdGVGaWxlKHNlbGYuZmluYWxfZGVwX3BhdGgpCi0gICAgc2VsZi5maW5hbF9kZXBfaGFzaCA9ICdCMzQ2NjJGMjNCNTZCN0Y5ODYwMUYnCi0gICAgc2VsZi5maW5hbF9idWNrZXQgPSAnYnVja2V0MicKLSAgICBzZWxmLmZpbmFsX3JlbW90ZV9wYXRoID0gJ2RlcDFfJXMnICUgc2VsZi5maW5hbF9kZXBfaGFzaAotICAgIHNlbGYuZmluYWxfcGVuZGluZ191cGxvYWQgPSB1cGxvYWRlci5DbG91ZFN0b3JhZ2VVcGxvYWRlcigKLSAgICAgICAgc2VsZi5maW5hbF9idWNrZXQsIHNlbGYuZmluYWxfcmVtb3RlX3BhdGgsIHNlbGYuZmluYWxfZGVwX3BhdGgpCi0gICAgc2VsZi5leHBlY3RlZF9maW5hbF9iYWNrdXBfcGF0aCA9ICcuJy5qb2luKFtzZWxmLmZpbmFsX3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29sZCddKQotICAgIHNlbGYuZmluYWxfZGVwZW5kZW5jaWVzID0gewotICAgICAgICAnZGVwMSc6IHsnY2xvdWRfc3RvcmFnZV9idWNrZXQnOiAnYnVja2V0MScsCi0gICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyJzogJ2RlcGVuZGVuY2llc19mb2xkZXInLAotICAgICAgICAgICAgICAgICAnZmlsZV9pbmZvJzogewotICAgICAgICAgICAgICAgICAgICAgJ3BsYXQxJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDExJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9yZWxhdGl2ZS9kZXAxL3BhdGgxJ30sCi0gICAgICAgICAgICAgICAgICAgICAncGxhdDInOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6IHNlbGYubmV3X2RlcF9oYXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJy4uLy4uL3JlbGF0aXZlL2RlcDEvcGF0aDInfX19LAotICAgICAgICAnZGVwMic6IHsnY2xvdWRfc3RvcmFnZV9idWNrZXQnOiAnYnVja2V0MicsCi0gICAgICAgICAgICAgICAgICdmaWxlX2luZm8nOiB7Ci0gICAgICAgICAgICAgICAgICAgICAncGxhdDEnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6IHNlbGYuZmluYWxfZGVwX2hhc2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnLi4vLi4vcmVsYXRpdmUvZGVwMi9wYXRoMSd9LAotICAgICAgICAgICAgICAgICAgICAgJ3BsYXQyJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDIyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9yZWxhdGl2ZS9kZXAyL3BhdGgyJ319fX0KLSAgICBzZWxmLmZpbmFsX2V4cGVjdGVkX2ZpbGVfbGluZXMgPSBbCi0gICAgICAjIHB5bGludDogZGlzYWJsZT1iYWQtY29udGludWF0aW9uCi0gICAgICAneycsICciY29uZmlnX3R5cGUiOiAiQmFzZUNvbmZpZyIsJywgJyJkZXBlbmRlbmNpZXMiOiB7JywKLSAgICAgICAgJyJkZXAxIjogeycsICciY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlciI6ICJkZXBlbmRlbmNpZXNfZm9sZGVyIiwnLAotICAgICAgICAgICciY2xvdWRfc3RvcmFnZV9idWNrZXQiOiAiYnVja2V0MSIsJywgJyJmaWxlX2luZm8iOiB7JywKLSAgICAgICAgICAgICcicGxhdDEiOiB7JywgJyJjbG91ZF9zdG9yYWdlX2hhc2giOiAiaGFzaDExIiwnLAotICAgICAgICAgICAgICAnImRvd25sb2FkX3BhdGgiOiAiLi4vLi4vcmVsYXRpdmUvZGVwMS9wYXRoMSInLCAnfSwnLAotICAgICAgICAgICAgJyJwbGF0MiI6IHsnLCAnImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICIlcyIsJyAlIHNlbGYubmV3X2RlcF9oYXNoLAotICAgICAgICAgICAgICAnImRvd25sb2FkX3BhdGgiOiAiLi4vLi4vcmVsYXRpdmUvZGVwMS9wYXRoMiInLCAnfScsICd9JywgJ30sJywKLSAgICAgICAgJyJkZXAyIjogeycsICciY2xvdWRfc3RvcmFnZV9idWNrZXQiOiAiYnVja2V0MiIsJywgJyJmaWxlX2luZm8iOiB7JywKLSAgICAgICAgICAgICcicGxhdDEiOiB7JywgJyJjbG91ZF9zdG9yYWdlX2hhc2giOiAiJXMiLCcgJSBzZWxmLmZpbmFsX2RlcF9oYXNoLAotICAgICAgICAgICAgICAnImRvd25sb2FkX3BhdGgiOiAiLi4vLi4vcmVsYXRpdmUvZGVwMi9wYXRoMSInLCAnfSwnLAotICAgICAgICAgICAgJyJwbGF0MiI6IHsnLCAnImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICJoYXNoMjIiLCcsCi0gICAgICAgICAgICAgICciZG93bmxvYWRfcGF0aCI6ICIuLi8uLi9yZWxhdGl2ZS9kZXAyL3BhdGgyIicsICd9JywgJ30nLCAnfScsCi0gICAgICAnfScsICd9J10KLQotCi0gIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICBzZWxmLnRlYXJEb3duUHlmYWtlZnMoKQotCi0gICMgSW5pdCBpcyBub3QgbWVhbnQgdG8gYmUgb3ZlcnJpZGRlbiwgc28gd2Ugc2hvdWxkIGJlIG1vY2tpbmcgdGhlCi0gICMgYmFzZV9jb25maWcncyBqc29uIG1vZHVsZSwgZXZlbiBpbiBzdWJjbGFzc2VzLgotICBkZWYgdGVzdENyZWF0ZUVtcHR5Q29uZmlnKHNlbGYpOgotICAgIGV4cGVjdGVkX2ZpbGVfbGluZXMgPSBbJ3snLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJyJjb25maWdfdHlwZSI6ICJCYXNlQ29uZmlnIiwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJyJkZXBlbmRlbmNpZXMiOiB7fScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnfSddCi0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgsIHdyaXRhYmxlPVRydWUpCi0KLSAgICBmaWxlX21vZHVsZSA9IGZha2VfZmlsZXN5c3RlbS5GYWtlRmlsZU9wZW4oc2VsZi5mcykKLSAgICBmb3IgbGluZSBpbiBmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2ZpbGVfbGluZXMucG9wKDApLCBsaW5lLnN0cmlwKCkpCi0gICAgc2VsZi5mcy5DbG9zZU9wZW5GaWxlKGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHt9LCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maWxlX3BhdGgsIGNvbmZpZy5fY29uZmlnX3BhdGgpCi0KLSAgZGVmIHRlc3RDcmVhdGVFbXB0eUNvbmZpZ0Vycm9yKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRlcGVuZGVuY3lfbWFuYWdlci5FbXB0eUNvbmZpZ0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnLCBzZWxmLmZpbGVfcGF0aCkKLQotICBkZWYgdGVzdENsb3VkU3RvcmFnZVJlbW90ZVBhdGgoc2VsZik6Ci0gICAgZGVwZW5kZW5jeSA9ICdkZXBfbmFtZScKLSAgICBjc19oYXNoID0gc2VsZi5uZXdfZGVwX2hhc2gKLSAgICBjc19iYXNlX2ZvbGRlciA9ICdkZXBlbmRlbmN5X3JlbW90ZV9mb2xkZXInCi0gICAgZXhwZWN0ZWRfcmVtb3RlX3BhdGggPSAnJXMvJXNfJXMnICUgKGNzX2Jhc2VfZm9sZGVyLCBkZXBlbmRlbmN5LCBjc19oYXNoKQotICAgIHJlbW90ZV9wYXRoID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcuX0Nsb3VkU3RvcmFnZVJlbW90ZVBhdGgoCi0gICAgICAgIGRlcGVuZGVuY3ksIGNzX2hhc2gsIGNzX2Jhc2VfZm9sZGVyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfcmVtb3RlX3BhdGgsIHJlbW90ZV9wYXRoKQotCi0gICAgY3NfYmFzZV9mb2xkZXIgPSAnZGVwZW5kZW5jeV9yZW1vdGVfZm9sZGVyJwotICAgIGV4cGVjdGVkX3JlbW90ZV9wYXRoID0gJyVzXyVzJyAlIChkZXBlbmRlbmN5LCBjc19oYXNoKQotICAgIHJlbW90ZV9wYXRoID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcuX0Nsb3VkU3RvcmFnZVJlbW90ZVBhdGgoCi0gICAgICAgIGRlcGVuZGVuY3ksIGNzX2hhc2gsIGNzX2Jhc2VfZm9sZGVyKQotCi0gIGRlZiB0ZXN0R2V0RW1wdHlKc29uRGljdChzZWxmKToKLSAgICBleHBlY3RlZF9qc29uX2RpY3QgPSB7J2NvbmZpZ190eXBlJzogJ0Jhc2VDb25maWcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzoge319Ci0gICAganNvbl9kaWN0ID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcuX0dldEpzb25EaWN0KCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2pzb25fZGljdCwganNvbl9kaWN0KQotCi0gIGRlZiB0ZXN0R2V0Tm9uRW1wdHlKc29uRGljdChzZWxmKToKLSAgICBleHBlY3RlZF9qc29uX2RpY3QgPSB7ImNvbmZpZ190eXBlIjogIkJhc2VDb25maWciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogc2VsZi5kZXBlbmRlbmNpZXN9Ci0gICAganNvbl9kaWN0ID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcuX0dldEpzb25EaWN0KHNlbGYuZGVwZW5kZW5jaWVzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfanNvbl9kaWN0LCBqc29uX2RpY3QpCi0KLSAgZGVmIHRlc3RXcml0ZUVtcHR5Q29uZmlnVG9GaWxlKHNlbGYpOgotICAgIGV4cGVjdGVkX2ZpbGVfbGluZXMgPSBbJ3snLCAnImNvbmZpZ190eXBlIjogIkJhc2VDb25maWciLCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnImRlcGVuZGVuY2llcyI6IHt9JywgJ30nXQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5maWxlX3BhdGgpKQotICAgIGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnLl9Xcml0ZUNvbmZpZ1RvRmlsZShzZWxmLmZpbGVfcGF0aCkKLSAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5maWxlX3BhdGgpKQotICAgIGZpbGVfbW9kdWxlID0gZmFrZV9maWxlc3lzdGVtLkZha2VGaWxlT3BlbihzZWxmLmZzKQotICAgIGZvciBsaW5lIGluIGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZmlsZV9saW5lcy5wb3AoMCksIGxpbmUuc3RyaXAoKSkKLSAgICBzZWxmLmZzLkNsb3NlT3BlbkZpbGUoZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpKQotCi0gIGRlZiB0ZXN0V3JpdGVOb25FbXB0eUNvbmZpZ1RvRmlsZShzZWxmKToKLSAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYuZmlsZV9wYXRoKSkKLSAgICBkZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZy5fV3JpdGVDb25maWdUb0ZpbGUoc2VsZi5maWxlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwZW5kZW5jaWVzKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLmZpbGVfcGF0aCkpCi0gICAgZXhwZWN0ZWRfZmlsZV9saW5lcyA9IGxpc3Qoc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzKQotICAgIGZpbGVfbW9kdWxlID0gZmFrZV9maWxlc3lzdGVtLkZha2VGaWxlT3BlbihzZWxmLmZzKQotICAgIGZvciBsaW5lIGluIGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZmlsZV9saW5lcy5wb3AoMCksIGxpbmUuc3RyaXAoKSkKLSAgICBzZWxmLmZzLkNsb3NlT3BlbkZpbGUoZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpKQotCi0gIEBtb2NrLnBhdGNoKCdkZXBlbmRlbmN5X21hbmFnZXIudXBsb2FkZXIuY2xvdWRfc3RvcmFnZScpCi0gIGRlZiB0ZXN0RXhlY3V0ZVVwZGF0ZUpvYnNOb09wKHNlbGYsIHVwbG9hZGVyX2NzX21vY2spOgotICAgIHNlbGYuZnMuQ3JlYXRlRmlsZShzZWxmLmZpbGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHM9J1xuJy5qb2luKHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykpCi0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgsIHdyaXRhYmxlPVRydWUpCi0KLSAgICBzZWxmLmFzc2VydEZhbHNlKGNvbmZpZy5FeGVjdXRlVXBkYXRlSm9icygpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZmlnLl9Jc0RpcnR5KCkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuX3BlbmRpbmdfdXBsb2FkcykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIGZpbGVfbW9kdWxlID0gZmFrZV9maWxlc3lzdGVtLkZha2VGaWxlT3BlbihzZWxmLmZzKQotICAgIGV4cGVjdGVkX2ZpbGVfbGluZXMgPSBsaXN0KHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykKLSAgICBmb3IgbGluZSBpbiBmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2ZpbGVfbGluZXMucG9wKDApLCBsaW5lLnN0cmlwKCkpCi0gICAgc2VsZi5mcy5DbG9zZU9wZW5GaWxlKGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKSkKLQotICBAbW9jay5wYXRjaCgnZGVwZW5kZW5jeV9tYW5hZ2VyLnVwbG9hZGVyLmNsb3VkX3N0b3JhZ2UnKQotICBkZWYgdGVzdEV4ZWN1dGVVcGRhdGVKb2JzRmFpbHVyZU9uSW5zZXJ0Tm9DU0NvbGxpc2lvbigKLSAgICAgIHNlbGYsIHVwbG9hZGVyX2NzX21vY2spOgotICAgIHVwbG9hZGVyX2NzX21vY2suRXhpc3RzLnJldHVybl92YWx1ZSA9IEZhbHNlCi0gICAgdXBsb2FkZXJfY3NfbW9jay5JbnNlcnQuc2lkZV9lZmZlY3QgPSBjbG91ZF9zdG9yYWdlLkNsb3VkU3RvcmFnZUVycm9yCi0gICAgc2VsZi5mcy5DcmVhdGVGaWxlKHNlbGYuZmlsZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cz0nXG4nLmpvaW4oc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzKSkKLSAgICBjb25maWcgPSBkZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZyhzZWxmLmZpbGVfcGF0aCwgd3JpdGFibGU9VHJ1ZSkKLSAgICBjb25maWcuX2NvbmZpZ19kYXRhID0gc2VsZi5uZXdfZGVwZW5kZW5jaWVzLmNvcHkoKQotICAgIGNvbmZpZy5faXNfZGlydHkgPSBUcnVlCi0gICAgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMgPSBbc2VsZi5uZXdfcGVuZGluZ191cGxvYWRdCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5faXNfZGlydHkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzBdKQotICAgIGV4cGVjdGVkX2V4aXN0c19jYWxscyA9IFttb2NrLmNhbGwoc2VsZi5uZXdfYnVja2V0LCBzZWxmLm5ld19yZW1vdGVfcGF0aCldCi0gICAgZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzID0gW21vY2suY2FsbChzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXdfZGVwX3BhdGgpXQotICAgIGV4cGVjdGVkX2NvcHlfY2FsbHMgPSBbXQotICAgIGV4cGVjdGVkX2RlbGV0ZV9jYWxscyA9IFtdCi0KLSAgICBzZWxmLmFzc2VydFJhaXNlcyhjbG91ZF9zdG9yYWdlLkNsb3VkU3RvcmFnZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5FeGVjdXRlVXBkYXRlSm9icykKLSAgICBzZWxmLmFzc2VydFRydWUoY29uZmlnLl9pc19kaXJ0eSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihjb25maWcuX3BlbmRpbmdfdXBsb2FkcykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19wZW5kaW5nX3VwbG9hZCwgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHNbMF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgZmlsZV9tb2R1bGUgPSBmYWtlX2ZpbGVzeXN0ZW0uRmFrZUZpbGVPcGVuKHNlbGYuZnMpCi0gICAgZXhwZWN0ZWRfZmlsZV9saW5lcyA9IGxpc3Qoc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzKQotICAgIGZvciBsaW5lIGluIGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZmlsZV9saW5lcy5wb3AoMCksIGxpbmUuc3RyaXAoKSkKLSAgICBzZWxmLmZzLkNsb3NlT3BlbkZpbGUoZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1swXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2luc2VydF9jYWxscywKLSAgICAgICAgICAgICAgICAgICAgIHVwbG9hZGVyX2NzX21vY2suSW5zZXJ0LmNhbGxfYXJnc19saXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZXhpc3RzX2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5FeGlzdHMuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9jb3B5X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5Db3B5LmNhbGxfYXJnc19saXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZGVsZXRlX2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5EZWxldGUuY2FsbF9hcmdzX2xpc3QpCi0KLSAgQG1vY2sucGF0Y2goJ2RlcGVuZGVuY3lfbWFuYWdlci51cGxvYWRlci5jbG91ZF9zdG9yYWdlJykKLSAgZGVmIHRlc3RFeGVjdXRlVXBkYXRlSm9ic0ZhaWx1cmVPbkluc2VydENTQ29sbGlzaW9uRm9yY2UoCi0gICAgICBzZWxmLCB1cGxvYWRlcl9jc19tb2NrKToKLSAgICB1cGxvYWRlcl9jc19tb2NrLkV4aXN0cy5yZXR1cm5fdmFsdWUgPSBUcnVlCi0gICAgdXBsb2FkZXJfY3NfbW9jay5JbnNlcnQuc2lkZV9lZmZlY3QgPSBjbG91ZF9zdG9yYWdlLkNsb3VkU3RvcmFnZUVycm9yCi0gICAgc2VsZi5mcy5DcmVhdGVGaWxlKHNlbGYuZmlsZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cz0nXG4nLmpvaW4oc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzKSkKLSAgICBjb25maWcgPSBkZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZyhzZWxmLmZpbGVfcGF0aCwgd3JpdGFibGU9VHJ1ZSkKLSAgICBjb25maWcuX2NvbmZpZ19kYXRhID0gc2VsZi5uZXdfZGVwZW5kZW5jaWVzLmNvcHkoKQotICAgIGNvbmZpZy5faXNfZGlydHkgPSBUcnVlCi0gICAgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMgPSBbc2VsZi5uZXdfcGVuZGluZ191cGxvYWRdCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5faXNfZGlydHkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzBdKQotICAgIGV4cGVjdGVkX2V4aXN0c19jYWxscyA9IFttb2NrLmNhbGwoc2VsZi5uZXdfYnVja2V0LCBzZWxmLm5ld19yZW1vdGVfcGF0aCldCi0gICAgZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzID0gW21vY2suY2FsbChzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXdfZGVwX3BhdGgpXQotICAgIGV4cGVjdGVkX2NvcHlfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfYnVja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV3X3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWRfbmV3X2JhY2t1cF9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suY2FsbChzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X2J1Y2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkX25ld19iYWNrdXBfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5ld19yZW1vdGVfcGF0aCldCi0gICAgZXhwZWN0ZWRfZGVsZXRlX2NhbGxzID0gW10KLQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLkV4ZWN1dGVVcGRhdGVKb2JzLCBmb3JjZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuX2lzX2RpcnR5KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1swXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X2RlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLSAgICBmaWxlX21vZHVsZSA9IGZha2VfZmlsZXN5c3RlbS5GYWtlRmlsZU9wZW4oc2VsZi5mcykKLSAgICBleHBlY3RlZF9maWxlX2xpbmVzID0gbGlzdChzZWxmLmV4cGVjdGVkX2ZpbGVfbGluZXMpCi0gICAgZm9yIGxpbmUgaW4gZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9maWxlX2xpbmVzLnBvcCgwKSwgbGluZS5zdHJpcCgpKQotICAgIHNlbGYuZnMuQ2xvc2VPcGVuRmlsZShmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzBdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5JbnNlcnQuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9leGlzdHNfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkV4aXN0cy5jYWxsX2FyZ3NfbGlzdCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2NvcHlfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkNvcHkuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kZWxldGVfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkRlbGV0ZS5jYWxsX2FyZ3NfbGlzdCkKLQotICBAbW9jay5wYXRjaCgnZGVwZW5kZW5jeV9tYW5hZ2VyLnVwbG9hZGVyLmNsb3VkX3N0b3JhZ2UnKQotICBkZWYgdGVzdEV4ZWN1dGVVcGRhdGVKb2JzRmFpbHVyZU9uSW5zZXJ0Q1NDb2xsaXNpb25Ob0ZvcmNlKAotICAgICAgc2VsZiwgdXBsb2FkZXJfY3NfbW9jayk6Ci0gICAgdXBsb2FkZXJfY3NfbW9jay5FeGlzdHMucmV0dXJuX3ZhbHVlID0gVHJ1ZQotICAgIHVwbG9hZGVyX2NzX21vY2suSW5zZXJ0LnNpZGVfZWZmZWN0ID0gY2xvdWRfc3RvcmFnZS5DbG91ZFN0b3JhZ2VFcnJvcgotICAgIHNlbGYuZnMuQ3JlYXRlRmlsZShzZWxmLmZpbGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHM9J1xuJy5qb2luKHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykpCi0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgsIHdyaXRhYmxlPVRydWUpCi0gICAgY29uZmlnLl9jb25maWdfZGF0YSA9IHNlbGYubmV3X2RlcGVuZGVuY2llcy5jb3B5KCkKLSAgICBjb25maWcuX2lzX2RpcnR5ID0gVHJ1ZQotICAgIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzID0gW3NlbGYubmV3X3BlbmRpbmdfdXBsb2FkXQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuX2lzX2RpcnR5KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1swXSkKLSAgICBleHBlY3RlZF9leGlzdHNfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfcmVtb3RlX3BhdGgpXQotICAgIGV4cGVjdGVkX2luc2VydF9jYWxscyA9IFtdCi0gICAgZXhwZWN0ZWRfY29weV9jYWxscyA9IFtdCi0gICAgZXhwZWN0ZWRfZGVsZXRlX2NhbGxzID0gW10KLQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLkV4ZWN1dGVVcGRhdGVKb2JzKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuX2lzX2RpcnR5KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1swXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X2RlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLSAgICBmaWxlX21vZHVsZSA9IGZha2VfZmlsZXN5c3RlbS5GYWtlRmlsZU9wZW4oc2VsZi5mcykKLSAgICBleHBlY3RlZF9maWxlX2xpbmVzID0gbGlzdChzZWxmLmV4cGVjdGVkX2ZpbGVfbGluZXMpCi0gICAgZm9yIGxpbmUgaW4gZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9maWxlX2xpbmVzLnBvcCgwKSwgbGluZS5zdHJpcCgpKQotICAgIHNlbGYuZnMuQ2xvc2VPcGVuRmlsZShmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzBdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5JbnNlcnQuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9leGlzdHNfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkV4aXN0cy5jYWxsX2FyZ3NfbGlzdCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2NvcHlfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkNvcHkuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kZWxldGVfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkRlbGV0ZS5jYWxsX2FyZ3NfbGlzdCkKLQotICBAbW9jay5wYXRjaCgnZGVwZW5kZW5jeV9tYW5hZ2VyLnVwbG9hZGVyLmNsb3VkX3N0b3JhZ2UnKQotICBkZWYgdGVzdEV4ZWN1dGVVcGRhdGVKb2JzRmFpbHVyZU9uQ29weSgKLSAgICAgIHNlbGYsIHVwbG9hZGVyX2NzX21vY2spOgotICAgIHVwbG9hZGVyX2NzX21vY2suRXhpc3RzLnJldHVybl92YWx1ZSA9IFRydWUKLSAgICB1cGxvYWRlcl9jc19tb2NrLkNvcHkuc2lkZV9lZmZlY3QgPSBjbG91ZF9zdG9yYWdlLkNsb3VkU3RvcmFnZUVycm9yCi0gICAgc2VsZi5mcy5DcmVhdGVGaWxlKHNlbGYuZmlsZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cz0nXG4nLmpvaW4oc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzKSkKLSAgICBjb25maWcgPSBkZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZyhzZWxmLmZpbGVfcGF0aCwgd3JpdGFibGU9VHJ1ZSkKLSAgICBjb25maWcuX2NvbmZpZ19kYXRhID0gc2VsZi5uZXdfZGVwZW5kZW5jaWVzLmNvcHkoKQotICAgIGNvbmZpZy5faXNfZGlydHkgPSBUcnVlCi0gICAgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMgPSBbc2VsZi5uZXdfcGVuZGluZ191cGxvYWRdCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5faXNfZGlydHkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzBdKQotICAgIGV4cGVjdGVkX2V4aXN0c19jYWxscyA9IFttb2NrLmNhbGwoc2VsZi5uZXdfYnVja2V0LCBzZWxmLm5ld19yZW1vdGVfcGF0aCldCi0gICAgZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzID0gW10KLSAgICBleHBlY3RlZF9jb3B5X2NhbGxzID0gW21vY2suY2FsbChzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X2J1Y2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5ld19yZW1vdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkX25ld19iYWNrdXBfcGF0aCldCi0gICAgZXhwZWN0ZWRfZGVsZXRlX2NhbGxzID0gW10KLQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLkV4ZWN1dGVVcGRhdGVKb2JzLCBmb3JjZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuX2lzX2RpcnR5KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1swXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X2RlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLSAgICBmaWxlX21vZHVsZSA9IGZha2VfZmlsZXN5c3RlbS5GYWtlRmlsZU9wZW4oc2VsZi5mcykKLSAgICBleHBlY3RlZF9maWxlX2xpbmVzID0gbGlzdChzZWxmLmV4cGVjdGVkX2ZpbGVfbGluZXMpCi0gICAgZm9yIGxpbmUgaW4gZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9maWxlX2xpbmVzLnBvcCgwKSwgbGluZS5zdHJpcCgpKQotICAgIHNlbGYuZnMuQ2xvc2VPcGVuRmlsZShmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzBdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5JbnNlcnQuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9leGlzdHNfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkV4aXN0cy5jYWxsX2FyZ3NfbGlzdCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2NvcHlfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkNvcHkuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kZWxldGVfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkRlbGV0ZS5jYWxsX2FyZ3NfbGlzdCkKLQotICBAbW9jay5wYXRjaCgnZGVwZW5kZW5jeV9tYW5hZ2VyLnVwbG9hZGVyLmNsb3VkX3N0b3JhZ2UnKQotICBkZWYgdGVzdEV4ZWN1dGVVcGRhdGVKb2JzRmFpbHVyZU9uU2Vjb25kSW5zZXJ0Tm9DU0NvbGxpc2lvbigKLSAgICAgIHNlbGYsIHVwbG9hZGVyX2NzX21vY2spOgotICAgIHVwbG9hZGVyX2NzX21vY2suRXhpc3RzLnJldHVybl92YWx1ZSA9IEZhbHNlCi0gICAgdXBsb2FkZXJfY3NfbW9jay5JbnNlcnQuc2lkZV9lZmZlY3QgPSBbCi0gICAgICAgIFRydWUsIGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlRXJyb3JdCi0gICAgc2VsZi5mcy5DcmVhdGVGaWxlKHNlbGYuZmlsZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cz0nXG4nLmpvaW4oc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzKSkKLSAgICBjb25maWcgPSBkZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZyhzZWxmLmZpbGVfcGF0aCwgd3JpdGFibGU9VHJ1ZSkKLSAgICBjb25maWcuX2NvbmZpZ19kYXRhID0gc2VsZi5uZXdfZGVwZW5kZW5jaWVzLmNvcHkoKQotICAgIGNvbmZpZy5faXNfZGlydHkgPSBUcnVlCi0gICAgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMgPSBbc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5hbF9wZW5kaW5nX3VwbG9hZF0KLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X2RlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLSAgICBzZWxmLmFzc2VydFRydWUoY29uZmlnLl9pc19kaXJ0eSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihjb25maWcuX3BlbmRpbmdfdXBsb2FkcykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19wZW5kaW5nX3VwbG9hZCwgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHNbMF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZpbmFsX3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1sxXSkKLSAgICBleHBlY3RlZF9leGlzdHNfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfcmVtb3RlX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLmNhbGwoc2VsZi5maW5hbF9idWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmFsX3JlbW90ZV9wYXRoKV0KLSAgICBleHBlY3RlZF9pbnNlcnRfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfcmVtb3RlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5ld19kZXBfcGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suY2FsbChzZWxmLmZpbmFsX2J1Y2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluYWxfcmVtb3RlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmFsX2RlcF9wYXRoKV0KLSAgICBleHBlY3RlZF9jb3B5X2NhbGxzID0gW10KLSAgICBleHBlY3RlZF9kZWxldGVfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfcmVtb3RlX3BhdGgpXQotCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoY2xvdWRfc3RvcmFnZS5DbG91ZFN0b3JhZ2VFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcuRXhlY3V0ZVVwZGF0ZUpvYnMpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5faXNfZGlydHkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzBdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maW5hbF9wZW5kaW5nX3VwbG9hZCwgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHNbMV0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgZmlsZV9tb2R1bGUgPSBmYWtlX2ZpbGVzeXN0ZW0uRmFrZUZpbGVPcGVuKHNlbGYuZnMpCi0gICAgZXhwZWN0ZWRfZmlsZV9saW5lcyA9IGxpc3Qoc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzKQotICAgIGZvciBsaW5lIGluIGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZmlsZV9saW5lcy5wb3AoMCksIGxpbmUuc3RyaXAoKSkKLSAgICBzZWxmLmZzLkNsb3NlT3BlbkZpbGUoZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5JbnNlcnQuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9leGlzdHNfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkV4aXN0cy5jYWxsX2FyZ3NfbGlzdCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2NvcHlfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkNvcHkuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kZWxldGVfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkRlbGV0ZS5jYWxsX2FyZ3NfbGlzdCkKLQotICBAbW9jay5wYXRjaCgnZGVwZW5kZW5jeV9tYW5hZ2VyLnVwbG9hZGVyLmNsb3VkX3N0b3JhZ2UnKQotICBkZWYgdGVzdEV4ZWN1dGVVcGRhdGVKb2JzRmFpbHVyZU9uU2Vjb25kSW5zZXJ0Q1NDb2xsaXNpb25Gb3JjZSgKLSAgICAgIHNlbGYsIHVwbG9hZGVyX2NzX21vY2spOgotICAgIHVwbG9hZGVyX2NzX21vY2suRXhpc3RzLnJldHVybl92YWx1ZSA9IFRydWUKLSAgICB1cGxvYWRlcl9jc19tb2NrLkluc2VydC5zaWRlX2VmZmVjdCA9IFsKLSAgICAgICAgVHJ1ZSwgY2xvdWRfc3RvcmFnZS5DbG91ZFN0b3JhZ2VFcnJvcl0KLSAgICBzZWxmLmZzLkNyZWF0ZUZpbGUoc2VsZi5maWxlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzPSdcbicuam9pbihzZWxmLmV4cGVjdGVkX2ZpbGVfbGluZXMpKQotICAgIGNvbmZpZyA9IGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnKHNlbGYuZmlsZV9wYXRoLCB3cml0YWJsZT1UcnVlKQotICAgIGNvbmZpZy5fY29uZmlnX2RhdGEgPSBzZWxmLm5ld19kZXBlbmRlbmNpZXMuY29weSgpCi0gICAgY29uZmlnLl9pc19kaXJ0eSA9IFRydWUKLSAgICBjb25maWcuX3BlbmRpbmdfdXBsb2FkcyA9IFtzZWxmLm5ld19wZW5kaW5nX3VwbG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmFsX3BlbmRpbmdfdXBsb2FkXQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuX2lzX2RpcnR5KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1swXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmluYWxfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzFdKQotICAgIGV4cGVjdGVkX2V4aXN0c19jYWxscyA9IFttb2NrLmNhbGwoc2VsZi5uZXdfYnVja2V0LCBzZWxmLm5ld19yZW1vdGVfcGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suY2FsbChzZWxmLmZpbmFsX2J1Y2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluYWxfcmVtb3RlX3BhdGgpXQotICAgIGV4cGVjdGVkX2luc2VydF9jYWxscyA9IFttb2NrLmNhbGwoc2VsZi5uZXdfYnVja2V0LCBzZWxmLm5ld19yZW1vdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV3X2RlcF9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5jYWxsKHNlbGYuZmluYWxfYnVja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5hbF9yZW1vdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluYWxfZGVwX3BhdGgpXQotICAgIGV4cGVjdGVkX2NvcHlfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfYnVja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV3X3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWRfbmV3X2JhY2t1cF9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suY2FsbChzZWxmLmZpbmFsX2J1Y2tldCwgc2VsZi5maW5hbF9idWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5hbF9yZW1vdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkX2ZpbmFsX2JhY2t1cF9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suY2FsbChzZWxmLmZpbmFsX2J1Y2tldCwgc2VsZi5maW5hbF9idWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZF9maW5hbF9iYWNrdXBfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmFsX3JlbW90ZV9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suY2FsbChzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X2J1Y2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkX25ld19iYWNrdXBfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5ld19yZW1vdGVfcGF0aCldCi0gICAgZXhwZWN0ZWRfZGVsZXRlX2NhbGxzID0gW10KLQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLkV4ZWN1dGVVcGRhdGVKb2JzLCBmb3JjZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuX2lzX2RpcnR5KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1swXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmluYWxfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzFdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIGZpbGVfbW9kdWxlID0gZmFrZV9maWxlc3lzdGVtLkZha2VGaWxlT3BlbihzZWxmLmZzKQotICAgIGV4cGVjdGVkX2ZpbGVfbGluZXMgPSBsaXN0KHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykKLSAgICBmb3IgbGluZSBpbiBmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2ZpbGVfbGluZXMucG9wKDApLCBsaW5lLnN0cmlwKCkpCi0gICAgc2VsZi5mcy5DbG9zZU9wZW5GaWxlKGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2luc2VydF9jYWxscywKLSAgICAgICAgICAgICAgICAgICAgIHVwbG9hZGVyX2NzX21vY2suSW5zZXJ0LmNhbGxfYXJnc19saXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZXhpc3RzX2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5FeGlzdHMuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9jb3B5X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5Db3B5LmNhbGxfYXJnc19saXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZGVsZXRlX2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5EZWxldGUuY2FsbF9hcmdzX2xpc3QpCi0KLSAgQG1vY2sucGF0Y2goJ2RlcGVuZGVuY3lfbWFuYWdlci51cGxvYWRlci5jbG91ZF9zdG9yYWdlJykKLSAgZGVmIHRlc3RFeGVjdXRlVXBkYXRlSm9ic0ZhaWx1cmVPblNlY29uZEluc2VydEZpcnN0Q1NDb2xsaXNpb25Gb3JjZSgKLSAgICAgIHNlbGYsIHVwbG9hZGVyX2NzX21vY2spOgotICAgIHVwbG9hZGVyX2NzX21vY2suRXhpc3RzLnNpZGVfZWZmZWN0ID0gW1RydWUsIEZhbHNlLCBUcnVlXQotICAgIHVwbG9hZGVyX2NzX21vY2suSW5zZXJ0LnNpZGVfZWZmZWN0ID0gWwotICAgICAgICBUcnVlLCBjbG91ZF9zdG9yYWdlLkNsb3VkU3RvcmFnZUVycm9yXQotICAgIHNlbGYuZnMuQ3JlYXRlRmlsZShzZWxmLmZpbGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHM9J1xuJy5qb2luKHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykpCi0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgsIHdyaXRhYmxlPVRydWUpCi0gICAgY29uZmlnLl9jb25maWdfZGF0YSA9IHNlbGYubmV3X2RlcGVuZGVuY2llcy5jb3B5KCkKLSAgICBjb25maWcuX2lzX2RpcnR5ID0gVHJ1ZQotICAgIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzID0gW3NlbGYubmV3X3BlbmRpbmdfdXBsb2FkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluYWxfcGVuZGluZ191cGxvYWRdCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5faXNfZGlydHkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzBdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maW5hbF9wZW5kaW5nX3VwbG9hZCwgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHNbMV0pCi0gICAgZXhwZWN0ZWRfZXhpc3RzX2NhbGxzID0gW21vY2suY2FsbChzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X3JlbW90ZV9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5jYWxsKHNlbGYuZmluYWxfYnVja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5hbF9yZW1vdGVfcGF0aCldCi0gICAgZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzID0gW21vY2suY2FsbChzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXdfZGVwX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLmNhbGwoc2VsZi5maW5hbF9idWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmFsX3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5hbF9kZXBfcGF0aCldCi0gICAgZXhwZWN0ZWRfY29weV9jYWxscyA9IFttb2NrLmNhbGwoc2VsZi5uZXdfYnVja2V0LCBzZWxmLm5ld19idWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXdfcmVtb3RlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZF9uZXdfYmFja3VwX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfYnVja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWRfbmV3X2JhY2t1cF9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV3X3JlbW90ZV9wYXRoKV0KLSAgICBleHBlY3RlZF9kZWxldGVfY2FsbHMgPSBbXQotCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoY2xvdWRfc3RvcmFnZS5DbG91ZFN0b3JhZ2VFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcuRXhlY3V0ZVVwZGF0ZUpvYnMsIGZvcmNlPVRydWUpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5faXNfZGlydHkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzBdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maW5hbF9wZW5kaW5nX3VwbG9hZCwgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHNbMV0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgZmlsZV9tb2R1bGUgPSBmYWtlX2ZpbGVzeXN0ZW0uRmFrZUZpbGVPcGVuKHNlbGYuZnMpCi0gICAgZXhwZWN0ZWRfZmlsZV9saW5lcyA9IGxpc3Qoc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzKQotICAgIGZvciBsaW5lIGluIGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZmlsZV9saW5lcy5wb3AoMCksIGxpbmUuc3RyaXAoKSkKLSAgICBzZWxmLmZzLkNsb3NlT3BlbkZpbGUoZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5JbnNlcnQuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9leGlzdHNfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkV4aXN0cy5jYWxsX2FyZ3NfbGlzdCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2NvcHlfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkNvcHkuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kZWxldGVfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkRlbGV0ZS5jYWxsX2FyZ3NfbGlzdCkKLQotICBAbW9jay5wYXRjaCgnZGVwZW5kZW5jeV9tYW5hZ2VyLnVwbG9hZGVyLmNsb3VkX3N0b3JhZ2UnKQotICBkZWYgdGVzdEV4ZWN1dGVVcGRhdGVKb2JzRmFpbHVyZU9uRmlyc3RDU0NvbGxpc2lvbk5vRm9yY2UoCi0gICAgICBzZWxmLCB1cGxvYWRlcl9jc19tb2NrKToKLSAgICB1cGxvYWRlcl9jc19tb2NrLkV4aXN0cy5zaWRlX2VmZmVjdCA9IFtUcnVlLCBGYWxzZSwgVHJ1ZV0KLSAgICB1cGxvYWRlcl9jc19tb2NrLkluc2VydC5zaWRlX2VmZmVjdCA9IFsKLSAgICAgICAgVHJ1ZSwgY2xvdWRfc3RvcmFnZS5DbG91ZFN0b3JhZ2VFcnJvcl0KLSAgICBzZWxmLmZzLkNyZWF0ZUZpbGUoc2VsZi5maWxlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzPSdcbicuam9pbihzZWxmLmV4cGVjdGVkX2ZpbGVfbGluZXMpKQotICAgIGNvbmZpZyA9IGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnKHNlbGYuZmlsZV9wYXRoLCB3cml0YWJsZT1UcnVlKQotICAgIGNvbmZpZy5fY29uZmlnX2RhdGEgPSBzZWxmLm5ld19kZXBlbmRlbmNpZXMuY29weSgpCi0gICAgY29uZmlnLl9pc19kaXJ0eSA9IFRydWUKLSAgICBjb25maWcuX3BlbmRpbmdfdXBsb2FkcyA9IFtzZWxmLm5ld19wZW5kaW5nX3VwbG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmFsX3BlbmRpbmdfdXBsb2FkXQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuX2lzX2RpcnR5KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1swXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmluYWxfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzFdKQotICAgIGV4cGVjdGVkX2V4aXN0c19jYWxscyA9IFttb2NrLmNhbGwoc2VsZi5uZXdfYnVja2V0LCBzZWxmLm5ld19yZW1vdGVfcGF0aCldCi0gICAgZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzID0gW10KLSAgICBleHBlY3RlZF9jb3B5X2NhbGxzID0gW10KLSAgICBleHBlY3RlZF9kZWxldGVfY2FsbHMgPSBbXQotCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoY2xvdWRfc3RvcmFnZS5DbG91ZFN0b3JhZ2VFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcuRXhlY3V0ZVVwZGF0ZUpvYnMpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5faXNfZGlydHkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzBdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maW5hbF9wZW5kaW5nX3VwbG9hZCwgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHNbMV0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgZmlsZV9tb2R1bGUgPSBmYWtlX2ZpbGVzeXN0ZW0uRmFrZUZpbGVPcGVuKHNlbGYuZnMpCi0gICAgZXhwZWN0ZWRfZmlsZV9saW5lcyA9IGxpc3Qoc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzKQotICAgIGZvciBsaW5lIGluIGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZmlsZV9saW5lcy5wb3AoMCksIGxpbmUuc3RyaXAoKSkKLSAgICBzZWxmLmZzLkNsb3NlT3BlbkZpbGUoZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5JbnNlcnQuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9leGlzdHNfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkV4aXN0cy5jYWxsX2FyZ3NfbGlzdCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2NvcHlfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkNvcHkuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kZWxldGVfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkRlbGV0ZS5jYWxsX2FyZ3NfbGlzdCkKLQotICBAbW9jay5wYXRjaCgnZGVwZW5kZW5jeV9tYW5hZ2VyLnVwbG9hZGVyLmNsb3VkX3N0b3JhZ2UnKQotICBkZWYgdGVzdEV4ZWN1dGVVcGRhdGVKb2JzRmFpbHVyZU9uU2Vjb25kQ29weUNTQ29sbGlzaW9uKAotICAgICAgc2VsZiwgdXBsb2FkZXJfY3NfbW9jayk6Ci0gICAgdXBsb2FkZXJfY3NfbW9jay5FeGlzdHMucmV0dXJuX3ZhbHVlID0gVHJ1ZQotICAgIHVwbG9hZGVyX2NzX21vY2suSW5zZXJ0LnJldHVybl92YWx1ZSA9IFRydWUKLSAgICB1cGxvYWRlcl9jc19tb2NrLkNvcHkuc2lkZV9lZmZlY3QgPSBbCi0gICAgICAgIFRydWUsIGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlRXJyb3IsIFRydWVdCi0gICAgc2VsZi5mcy5DcmVhdGVGaWxlKHNlbGYuZmlsZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cz0nXG4nLmpvaW4oc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzKSkKLSAgICBjb25maWcgPSBkZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZyhzZWxmLmZpbGVfcGF0aCwgd3JpdGFibGU9VHJ1ZSkKLSAgICBjb25maWcuX2NvbmZpZ19kYXRhID0gc2VsZi5uZXdfZGVwZW5kZW5jaWVzLmNvcHkoKQotICAgIGNvbmZpZy5faXNfZGlydHkgPSBUcnVlCi0gICAgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMgPSBbc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5hbF9wZW5kaW5nX3VwbG9hZF0KLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X2RlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLSAgICBzZWxmLmFzc2VydFRydWUoY29uZmlnLl9pc19kaXJ0eSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihjb25maWcuX3BlbmRpbmdfdXBsb2FkcykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19wZW5kaW5nX3VwbG9hZCwgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHNbMF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZpbmFsX3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1sxXSkKLSAgICBleHBlY3RlZF9leGlzdHNfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfcmVtb3RlX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLmNhbGwoc2VsZi5maW5hbF9idWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmFsX3JlbW90ZV9wYXRoKV0KLSAgICBleHBlY3RlZF9pbnNlcnRfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfcmVtb3RlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5ld19kZXBfcGF0aCldCi0gICAgZXhwZWN0ZWRfY29weV9jYWxscyA9IFttb2NrLmNhbGwoc2VsZi5uZXdfYnVja2V0LCBzZWxmLm5ld19idWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXdfcmVtb3RlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZF9uZXdfYmFja3VwX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5jYWxsKHNlbGYuZmluYWxfYnVja2V0LCBzZWxmLmZpbmFsX2J1Y2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmFsX3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWRfZmluYWxfYmFja3VwX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfYnVja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWRfbmV3X2JhY2t1cF9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV3X3JlbW90ZV9wYXRoKV0KLSAgICBleHBlY3RlZF9kZWxldGVfY2FsbHMgPSBbXQotCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoY2xvdWRfc3RvcmFnZS5DbG91ZFN0b3JhZ2VFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcuRXhlY3V0ZVVwZGF0ZUpvYnMsIGZvcmNlPVRydWUpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5faXNfZGlydHkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzBdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maW5hbF9wZW5kaW5nX3VwbG9hZCwgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHNbMV0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgZmlsZV9tb2R1bGUgPSBmYWtlX2ZpbGVzeXN0ZW0uRmFrZUZpbGVPcGVuKHNlbGYuZnMpCi0gICAgZXhwZWN0ZWRfZmlsZV9saW5lcyA9IGxpc3Qoc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzKQotICAgIGZvciBsaW5lIGluIGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZmlsZV9saW5lcy5wb3AoMCksIGxpbmUuc3RyaXAoKSkKLSAgICBzZWxmLmZzLkNsb3NlT3BlbkZpbGUoZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5JbnNlcnQuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9leGlzdHNfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkV4aXN0cy5jYWxsX2FyZ3NfbGlzdCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2NvcHlfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkNvcHkuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kZWxldGVfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkRlbGV0ZS5jYWxsX2FyZ3NfbGlzdCkKLQotICBAbW9jay5wYXRjaCgnZGVwZW5kZW5jeV9tYW5hZ2VyLnVwbG9hZGVyLmNsb3VkX3N0b3JhZ2UnKQotICBkZWYgdGVzdEV4ZWN1dGVVcGRhdGVKb2JzRmFpbHVyZU9uU2Vjb25kQ29weU5vQ1NDb2xsaXNpb25Gb3JjZSgKLSAgICAgIHNlbGYsIHVwbG9hZGVyX2NzX21vY2spOgotICAgIHVwbG9hZGVyX2NzX21vY2suRXhpc3RzLnNpZGVfZWZmZWN0ID0gW0ZhbHNlLCBUcnVlLCBGYWxzZV0KLSAgICB1cGxvYWRlcl9jc19tb2NrLkNvcHkuc2lkZV9lZmZlY3QgPSBjbG91ZF9zdG9yYWdlLkNsb3VkU3RvcmFnZUVycm9yCi0gICAgc2VsZi5mcy5DcmVhdGVGaWxlKHNlbGYuZmlsZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cz0nXG4nLmpvaW4oc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzKSkKLSAgICBjb25maWcgPSBkZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZyhzZWxmLmZpbGVfcGF0aCwgd3JpdGFibGU9VHJ1ZSkKLSAgICBjb25maWcuX2NvbmZpZ19kYXRhID0gc2VsZi5uZXdfZGVwZW5kZW5jaWVzLmNvcHkoKQotICAgIGNvbmZpZy5faXNfZGlydHkgPSBUcnVlCi0gICAgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMgPSBbc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5hbF9wZW5kaW5nX3VwbG9hZF0KLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X2RlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLSAgICBzZWxmLmFzc2VydFRydWUoY29uZmlnLl9pc19kaXJ0eSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihjb25maWcuX3BlbmRpbmdfdXBsb2FkcykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19wZW5kaW5nX3VwbG9hZCwgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHNbMF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZpbmFsX3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1sxXSkKLSAgICBleHBlY3RlZF9leGlzdHNfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfcmVtb3RlX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLmNhbGwoc2VsZi5maW5hbF9idWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmFsX3JlbW90ZV9wYXRoKV0KLSAgICBleHBlY3RlZF9pbnNlcnRfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfcmVtb3RlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5ld19kZXBfcGF0aCldCi0gICAgZXhwZWN0ZWRfY29weV9jYWxscyA9IFttb2NrLmNhbGwoc2VsZi5maW5hbF9idWNrZXQsIHNlbGYuZmluYWxfYnVja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluYWxfcmVtb3RlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZF9maW5hbF9iYWNrdXBfcGF0aCldCi0gICAgZXhwZWN0ZWRfZGVsZXRlX2NhbGxzID0gW21vY2suY2FsbChzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X3JlbW90ZV9wYXRoKV0KLQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLkV4ZWN1dGVVcGRhdGVKb2JzLCBmb3JjZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuX2lzX2RpcnR5KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1swXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmluYWxfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzFdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIGZpbGVfbW9kdWxlID0gZmFrZV9maWxlc3lzdGVtLkZha2VGaWxlT3BlbihzZWxmLmZzKQotICAgIGV4cGVjdGVkX2ZpbGVfbGluZXMgPSBsaXN0KHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykKLSAgICBmb3IgbGluZSBpbiBmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2ZpbGVfbGluZXMucG9wKDApLCBsaW5lLnN0cmlwKCkpCi0gICAgc2VsZi5mcy5DbG9zZU9wZW5GaWxlKGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2luc2VydF9jYWxscywKLSAgICAgICAgICAgICAgICAgICAgIHVwbG9hZGVyX2NzX21vY2suSW5zZXJ0LmNhbGxfYXJnc19saXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZXhpc3RzX2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5FeGlzdHMuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9jb3B5X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5Db3B5LmNhbGxfYXJnc19saXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZGVsZXRlX2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5EZWxldGUuY2FsbF9hcmdzX2xpc3QpCi0KLSAgQG1vY2sucGF0Y2goJ2RlcGVuZGVuY3lfbWFuYWdlci51cGxvYWRlci5jbG91ZF9zdG9yYWdlJykKLSAgZGVmIHRlc3RFeGVjdXRlVXBkYXRlSm9ic0ZhaWx1cmVPblNlY29uZENvcHlOb0NTQ29sbGlzaW9uTm9Gb3JjZSgKLSAgICAgIHNlbGYsIHVwbG9hZGVyX2NzX21vY2spOgotICAgIHVwbG9hZGVyX2NzX21vY2suRXhpc3RzLnNpZGVfZWZmZWN0ID0gW0ZhbHNlLCBUcnVlLCBGYWxzZV0KLSAgICB1cGxvYWRlcl9jc19tb2NrLkNvcHkuc2lkZV9lZmZlY3QgPSBjbG91ZF9zdG9yYWdlLkNsb3VkU3RvcmFnZUVycm9yCi0gICAgc2VsZi5mcy5DcmVhdGVGaWxlKHNlbGYuZmlsZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cz0nXG4nLmpvaW4oc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzKSkKLSAgICBjb25maWcgPSBkZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZyhzZWxmLmZpbGVfcGF0aCwgd3JpdGFibGU9VHJ1ZSkKLSAgICBjb25maWcuX2NvbmZpZ19kYXRhID0gc2VsZi5uZXdfZGVwZW5kZW5jaWVzLmNvcHkoKQotICAgIGNvbmZpZy5faXNfZGlydHkgPSBUcnVlCi0gICAgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMgPSBbc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5hbF9wZW5kaW5nX3VwbG9hZF0KLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X2RlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLSAgICBzZWxmLmFzc2VydFRydWUoY29uZmlnLl9pc19kaXJ0eSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihjb25maWcuX3BlbmRpbmdfdXBsb2FkcykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19wZW5kaW5nX3VwbG9hZCwgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHNbMF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZpbmFsX3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1sxXSkKLSAgICBleHBlY3RlZF9leGlzdHNfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfcmVtb3RlX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLmNhbGwoc2VsZi5maW5hbF9idWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmFsX3JlbW90ZV9wYXRoKV0KLSAgICBleHBlY3RlZF9pbnNlcnRfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfcmVtb3RlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5ld19kZXBfcGF0aCldCi0gICAgZXhwZWN0ZWRfY29weV9jYWxscyA9IFtdCi0gICAgZXhwZWN0ZWRfZGVsZXRlX2NhbGxzID0gW21vY2suY2FsbChzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X3JlbW90ZV9wYXRoKV0KLQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLkV4ZWN1dGVVcGRhdGVKb2JzKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuX2lzX2RpcnR5KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1swXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmluYWxfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzFdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIGZpbGVfbW9kdWxlID0gZmFrZV9maWxlc3lzdGVtLkZha2VGaWxlT3BlbihzZWxmLmZzKQotICAgIGV4cGVjdGVkX2ZpbGVfbGluZXMgPSBsaXN0KHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykKLSAgICBmb3IgbGluZSBpbiBmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2ZpbGVfbGluZXMucG9wKDApLCBsaW5lLnN0cmlwKCkpCi0gICAgc2VsZi5mcy5DbG9zZU9wZW5GaWxlKGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2luc2VydF9jYWxscywKLSAgICAgICAgICAgICAgICAgICAgIHVwbG9hZGVyX2NzX21vY2suSW5zZXJ0LmNhbGxfYXJnc19saXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZXhpc3RzX2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5FeGlzdHMuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9jb3B5X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5Db3B5LmNhbGxfYXJnc19saXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZGVsZXRlX2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5EZWxldGUuY2FsbF9hcmdzX2xpc3QpCi0KLSAgQG1vY2sucGF0Y2goJ2RlcGVuZGVuY3lfbWFuYWdlci51cGxvYWRlci5jbG91ZF9zdG9yYWdlJykKLSAgZGVmIHRlc3RFeGVjdXRlVXBkYXRlSm9ic1N1Y2Nlc3NPbmVQZW5kaW5nRGVwTm9DbG91ZFN0b3JhZ2VDb2xsaXNpb24oCi0gICAgICBzZWxmLCB1cGxvYWRlcl9jc19tb2NrKToKLSAgICB1cGxvYWRlcl9jc19tb2NrLkV4aXN0cy5yZXR1cm5fdmFsdWUgPSBGYWxzZQotICAgIHNlbGYuZnMuQ3JlYXRlRmlsZShzZWxmLmZpbGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHM9J1xuJy5qb2luKHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykpCi0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgsIHdyaXRhYmxlPVRydWUpCi0gICAgY29uZmlnLl9jb25maWdfZGF0YSA9IHNlbGYubmV3X2RlcGVuZGVuY2llcy5jb3B5KCkKLSAgICBjb25maWcuX3BlbmRpbmdfdXBsb2FkcyA9IFtzZWxmLm5ld19wZW5kaW5nX3VwbG9hZF0KLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X2RlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLSAgICBzZWxmLmFzc2VydFRydWUoY29uZmlnLl9Jc0RpcnR5KCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzBdKQotICAgIGV4cGVjdGVkX2V4aXN0c19jYWxscyA9IFttb2NrLmNhbGwoc2VsZi5uZXdfYnVja2V0LCBzZWxmLm5ld19yZW1vdGVfcGF0aCldCi0gICAgZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzID0gW21vY2suY2FsbChzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXdfZGVwX3BhdGgpXQotICAgIGV4cGVjdGVkX2NvcHlfY2FsbHMgPSBbXQotICAgIGV4cGVjdGVkX2RlbGV0ZV9jYWxscyA9IFtdCi0KLSAgICBzZWxmLmFzc2VydFRydWUoY29uZmlnLkV4ZWN1dGVVcGRhdGVKb2JzKCkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuX0lzRGlydHkoKSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIGZpbGVfbW9kdWxlID0gZmFrZV9maWxlc3lzdGVtLkZha2VGaWxlT3BlbihzZWxmLmZzKQotICAgIGV4cGVjdGVkX2ZpbGVfbGluZXMgPSBsaXN0KHNlbGYubmV3X2V4cGVjdGVkX2ZpbGVfbGluZXMpCi0gICAgZm9yIGxpbmUgaW4gZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9maWxlX2xpbmVzLnBvcCgwKSwgbGluZS5zdHJpcCgpKQotICAgIHNlbGYuZnMuQ2xvc2VPcGVuRmlsZShmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuX3BlbmRpbmdfdXBsb2FkcykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2luc2VydF9jYWxscywKLSAgICAgICAgICAgICAgICAgICAgIHVwbG9hZGVyX2NzX21vY2suSW5zZXJ0LmNhbGxfYXJnc19saXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZXhpc3RzX2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5FeGlzdHMuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9jb3B5X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5Db3B5LmNhbGxfYXJnc19saXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZGVsZXRlX2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5EZWxldGUuY2FsbF9hcmdzX2xpc3QpCi0KLSAgQG1vY2sucGF0Y2goJ2RlcGVuZGVuY3lfbWFuYWdlci51cGxvYWRlci5jbG91ZF9zdG9yYWdlJykKLSAgZGVmIHRlc3RFeGVjdXRlVXBkYXRlSm9ic1N1Y2Nlc3NPbmVQZW5kaW5nRGVwQ2xvdWRTdG9yYWdlQ29sbGlzaW9uKAotICAgICAgc2VsZiwgdXBsb2FkZXJfY3NfbW9jayk6Ci0gICAgdXBsb2FkZXJfY3NfbW9jay5FeGlzdHMucmV0dXJuX3ZhbHVlID0gVHJ1ZQotICAgIHNlbGYuZnMuQ3JlYXRlRmlsZShzZWxmLmZpbGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHM9J1xuJy5qb2luKHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykpCi0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgsIHdyaXRhYmxlPVRydWUpCi0gICAgY29uZmlnLl9jb25maWdfZGF0YSA9IHNlbGYubmV3X2RlcGVuZGVuY2llcy5jb3B5KCkKLSAgICBjb25maWcuX3BlbmRpbmdfdXBsb2FkcyA9IFtzZWxmLm5ld19wZW5kaW5nX3VwbG9hZF0KLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X2RlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLSAgICBzZWxmLmFzc2VydFRydWUoY29uZmlnLl9Jc0RpcnR5KCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oY29uZmlnLl9wZW5kaW5nX3VwbG9hZHMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzBdKQotICAgIGV4cGVjdGVkX2V4aXN0c19jYWxscyA9IFttb2NrLmNhbGwoc2VsZi5uZXdfYnVja2V0LCBzZWxmLm5ld19yZW1vdGVfcGF0aCldCi0gICAgZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzID0gW21vY2suY2FsbChzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXdfZGVwX3BhdGgpXQotICAgIGV4cGVjdGVkX2NvcHlfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfYnVja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV3X3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWRfbmV3X2JhY2t1cF9wYXRoKV0KLQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuRXhlY3V0ZVVwZGF0ZUpvYnMoZm9yY2U9VHJ1ZSkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuX0lzRGlydHkoKSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIGZpbGVfbW9kdWxlID0gZmFrZV9maWxlc3lzdGVtLkZha2VGaWxlT3BlbihzZWxmLmZzKQotICAgIGV4cGVjdGVkX2ZpbGVfbGluZXMgPSBsaXN0KHNlbGYubmV3X2V4cGVjdGVkX2ZpbGVfbGluZXMpCi0gICAgZm9yIGxpbmUgaW4gZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9maWxlX2xpbmVzLnBvcCgwKSwgbGluZS5zdHJpcCgpKQotICAgIHNlbGYuZnMuQ2xvc2VPcGVuRmlsZShmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuX3BlbmRpbmdfdXBsb2FkcykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2luc2VydF9jYWxscywKLSAgICAgICAgICAgICAgICAgICAgIHVwbG9hZGVyX2NzX21vY2suSW5zZXJ0LmNhbGxfYXJnc19saXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZXhpc3RzX2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5FeGlzdHMuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9jb3B5X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5Db3B5LmNhbGxfYXJnc19saXN0KQotCi0gIEBtb2NrLnBhdGNoKCdkZXBlbmRlbmN5X21hbmFnZXIudXBsb2FkZXIuY2xvdWRfc3RvcmFnZScpCi0gIGRlZiB0ZXN0RXhlY3V0ZVVwZGF0ZUpvYnNFcnJvck9uZVBlbmRpbmdEZXBDbG91ZFN0b3JhZ2VDb2xsaXNpb25Ob0ZvcmNlKAotICAgICAgc2VsZiwgdXBsb2FkZXJfY3NfbW9jayk6Ci0gICAgdXBsb2FkZXJfY3NfbW9jay5FeGlzdHMucmV0dXJuX3ZhbHVlID0gVHJ1ZQotICAgIHNlbGYuZnMuQ3JlYXRlRmlsZShzZWxmLmZpbGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHM9J1xuJy5qb2luKHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykpCi0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgsIHdyaXRhYmxlPVRydWUpCi0gICAgY29uZmlnLl9jb25maWdfZGF0YSA9IHNlbGYubmV3X2RlcGVuZGVuY2llcy5jb3B5KCkKLSAgICBjb25maWcuX2lzX2RpcnR5ID0gVHJ1ZQotICAgIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzID0gW3NlbGYubmV3X3BlbmRpbmdfdXBsb2FkXQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuX2lzX2RpcnR5KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1swXSkKLSAgICBleHBlY3RlZF9leGlzdHNfY2FsbHMgPSBbbW9jay5jYWxsKHNlbGYubmV3X2J1Y2tldCwgc2VsZi5uZXdfcmVtb3RlX3BhdGgpXQotICAgIGV4cGVjdGVkX2luc2VydF9jYWxscyA9IFtdCi0gICAgZXhwZWN0ZWRfY29weV9jYWxscyA9IFtdCi0KLSAgICBzZWxmLmFzc2VydFJhaXNlcyhkZXBlbmRlbmN5X21hbmFnZXIuQ2xvdWRTdG9yYWdlVXBsb2FkQ29uZmxpY3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcuRXhlY3V0ZVVwZGF0ZUpvYnMpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5faXNfZGlydHkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uZXdfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1swXSkKLSAgICBmaWxlX21vZHVsZSA9IGZha2VfZmlsZXN5c3RlbS5GYWtlRmlsZU9wZW4oc2VsZi5mcykKLSAgICBleHBlY3RlZF9maWxlX2xpbmVzID0gbGlzdChzZWxmLmV4cGVjdGVkX2ZpbGVfbGluZXMpCi0gICAgZm9yIGxpbmUgaW4gZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9maWxlX2xpbmVzLnBvcCgwKSwgbGluZS5zdHJpcCgpKQotICAgIHNlbGYuZnMuQ2xvc2VPcGVuRmlsZShmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9pbnNlcnRfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkluc2VydC5jYWxsX2FyZ3NfbGlzdCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2V4aXN0c19jYWxscywKLSAgICAgICAgICAgICAgICAgICAgIHVwbG9hZGVyX2NzX21vY2suRXhpc3RzLmNhbGxfYXJnc19saXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfY29weV9jYWxscywKLSAgICAgICAgICAgICAgICAgICAgIHVwbG9hZGVyX2NzX21vY2suQ29weS5jYWxsX2FyZ3NfbGlzdCkKLQotICBAbW9jay5wYXRjaCgnZGVwZW5kZW5jeV9tYW5hZ2VyLnVwbG9hZGVyLmNsb3VkX3N0b3JhZ2UnKQotICBkZWYgdGVzdEV4ZWN1dGVVcGRhdGVKb2JzU3VjY2Vzc011bHRpcGxlUGVuZGluZ0RlcHNPbmVDbG91ZFN0b3JhZ2VDb2xsaXNpb24oCi0gICAgICBzZWxmLCB1cGxvYWRlcl9jc19tb2NrKToKLSAgICB1cGxvYWRlcl9jc19tb2NrLkV4aXN0cy5zaWRlX2VmZmVjdCA9IFtGYWxzZSwgVHJ1ZV0KLSAgICBzZWxmLmZzLkNyZWF0ZUZpbGUoc2VsZi5maWxlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzPSdcbicuam9pbihzZWxmLmV4cGVjdGVkX2ZpbGVfbGluZXMpKQotICAgIGNvbmZpZyA9IGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnKHNlbGYuZmlsZV9wYXRoLCB3cml0YWJsZT1UcnVlKQotICAgIGNvbmZpZy5fY29uZmlnX2RhdGEgPSBzZWxmLmZpbmFsX2RlcGVuZGVuY2llcy5jb3B5KCkKLSAgICBjb25maWcuX3BlbmRpbmdfdXBsb2FkcyA9IFtzZWxmLm5ld19wZW5kaW5nX3VwbG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmFsX3BlbmRpbmdfdXBsb2FkXQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maW5hbF9kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5fSXNEaXJ0eSgpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmV3X3BlbmRpbmdfdXBsb2FkLCBjb25maWcuX3BlbmRpbmdfdXBsb2Fkc1swXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmluYWxfcGVuZGluZ191cGxvYWQsIGNvbmZpZy5fcGVuZGluZ191cGxvYWRzWzFdKQotCi0gICAgZXhwZWN0ZWRfZXhpc3RzX2NhbGxzID0gW21vY2suY2FsbChzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X3JlbW90ZV9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5jYWxsKHNlbGYuZmluYWxfYnVja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5hbF9yZW1vdGVfcGF0aCldCi0gICAgZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzID0gW21vY2suY2FsbChzZWxmLm5ld19idWNrZXQsIHNlbGYubmV3X3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXdfZGVwX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLmNhbGwoc2VsZi5maW5hbF9idWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmFsX3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5hbF9kZXBfcGF0aCldCi0gICAgZXhwZWN0ZWRfY29weV9jYWxscyA9IFttb2NrLmNhbGwoc2VsZi5maW5hbF9idWNrZXQsIHNlbGYuZmluYWxfYnVja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluYWxfcmVtb3RlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZF9maW5hbF9iYWNrdXBfcGF0aCldCi0KLSAgICBzZWxmLmFzc2VydFRydWUoY29uZmlnLkV4ZWN1dGVVcGRhdGVKb2JzKGZvcmNlPVRydWUpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZmlnLl9Jc0RpcnR5KCkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuX3BlbmRpbmdfdXBsb2FkcykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmluYWxfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIGZpbGVfbW9kdWxlID0gZmFrZV9maWxlc3lzdGVtLkZha2VGaWxlT3BlbihzZWxmLmZzKQotICAgIGV4cGVjdGVkX2ZpbGVfbGluZXMgPSBsaXN0KHNlbGYuZmluYWxfZXhwZWN0ZWRfZmlsZV9saW5lcykKLSAgICBmb3IgbGluZSBpbiBmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2ZpbGVfbGluZXMucG9wKDApLCBsaW5lLnN0cmlwKCkpCi0gICAgc2VsZi5mcy5DbG9zZU9wZW5GaWxlKGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGNvbmZpZy5fcGVuZGluZ191cGxvYWRzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaW5zZXJ0X2NhbGxzLAotICAgICAgICAgICAgICAgICAgICAgdXBsb2FkZXJfY3NfbW9jay5JbnNlcnQuY2FsbF9hcmdzX2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9leGlzdHNfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkV4aXN0cy5jYWxsX2FyZ3NfbGlzdCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2NvcHlfY2FsbHMsCi0gICAgICAgICAgICAgICAgICAgICB1cGxvYWRlcl9jc19tb2NrLkNvcHkuY2FsbF9hcmdzX2xpc3QpCi0KLSAgQG1vY2sucGF0Y2goJ2RlcGVuZGVuY3lfbWFuYWdlci51cGxvYWRlci5jbG91ZF9zdG9yYWdlJykKLSAgZGVmIHRlc3RVcGRhdGVDbG91ZFN0b3JhZ2VEZXBlbmRlbmNpZXNSZWFkT25seUNvbmZpZygKLSAgICAgIHNlbGYsIHVwbG9hZGVyX2NzX21vY2spOgotICAgIHNlbGYuZnMuQ3JlYXRlRmlsZShzZWxmLmZpbGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHM9J1xuJy5qb2luKHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykpCi0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXBlbmRlbmN5X21hbmFnZXIuUmVhZFdyaXRlRXJyb3IpOgotICAgICAgY29uZmlnLkFkZENsb3VkU3RvcmFnZURlcGVuZGVuY3lVcGRhdGVKb2IoCi0gICAgICAgICAgJ2RlcCcsICdwbGF0JywgJ3BhdGgnKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGVwZW5kZW5jeV9tYW5hZ2VyLlJlYWRXcml0ZUVycm9yKToKLSAgICAgIGNvbmZpZy5BZGRDbG91ZFN0b3JhZ2VEZXBlbmRlbmN5VXBkYXRlSm9iKAotICAgICAgICAgICdkZXAnLCAncGxhdCcsICdwYXRoJywgdmVyc2lvbj0nMS4yLjMnKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGVwZW5kZW5jeV9tYW5hZ2VyLlJlYWRXcml0ZUVycm9yKToKLSAgICAgIGNvbmZpZy5BZGRDbG91ZFN0b3JhZ2VEZXBlbmRlbmN5VXBkYXRlSm9iKAotICAgICAgICAgICdkZXAnLCAncGxhdCcsICdwYXRoJywgZXhlY3V0ZV9qb2I9RmFsc2UpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXBlbmRlbmN5X21hbmFnZXIuUmVhZFdyaXRlRXJyb3IpOgotICAgICAgY29uZmlnLkFkZENsb3VkU3RvcmFnZURlcGVuZGVuY3lVcGRhdGVKb2IoCi0gICAgICAgICAgJ2RlcCcsICdwbGF0JywgJ3BhdGgnLCB2ZXJzaW9uPScxLjIuMycsIGV4ZWN1dGVfam9iPUZhbHNlKQotCi0gIEBtb2NrLnBhdGNoKCdkZXBlbmRlbmN5X21hbmFnZXIudXBsb2FkZXIuY2xvdWRfc3RvcmFnZScpCi0gIGRlZiB0ZXN0VXBkYXRlQ2xvdWRTdG9yYWdlRGVwZW5kZW5jaWVzTWlzc2luZ0RlcGVuZGVuY3koCi0gICAgICBzZWxmLCB1cGxvYWRlcl9jc19tb2NrKToKLSAgICBzZWxmLmZzLkNyZWF0ZUZpbGUoc2VsZi5maWxlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzPSdcbicuam9pbihzZWxmLmV4cGVjdGVkX2ZpbGVfbGluZXMpKQotICAgIGNvbmZpZyA9IGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnKHNlbGYuZmlsZV9wYXRoLCB3cml0YWJsZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbmZpZy5BZGRDbG91ZFN0b3JhZ2VEZXBlbmRlbmN5VXBkYXRlSm9iLAotICAgICAgICAgICAgICAgICAgICAgICdkZXAnLCAncGxhdCcsICdwYXRoJykKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb25maWcuQWRkQ2xvdWRTdG9yYWdlRGVwZW5kZW5jeVVwZGF0ZUpvYiwKLSAgICAgICAgICAgICAgICAgICAgICAnZGVwJywgJ3BsYXQnLCAncGF0aCcsIHZlcnNpb249JzEuMi4zJykKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb25maWcuQWRkQ2xvdWRTdG9yYWdlRGVwZW5kZW5jeVVwZGF0ZUpvYiwKLSAgICAgICAgICAgICAgICAgICAgICAnZGVwJywgJ3BsYXQnLCAncGF0aCcsIGV4ZWN1dGVfam9iPUZhbHNlKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbmZpZy5BZGRDbG91ZFN0b3JhZ2VEZXBlbmRlbmN5VXBkYXRlSm9iLAotICAgICAgICAgICAgICAgICAgICAgICdkZXAnLCAncGxhdCcsICdwYXRoJywgdmVyc2lvbj0nMS4yLjMnLCBleGVjdXRlX2pvYj1GYWxzZSkKLQotICBAbW9jay5wYXRjaCgnZGVwZW5kZW5jeV9tYW5hZ2VyLnVwbG9hZGVyLmNsb3VkX3N0b3JhZ2UnKQotICBAbW9jay5wYXRjaCgnZGVwZW5kZW5jeV9tYW5hZ2VyLmJhc2VfY29uZmlnLmNsb3VkX3N0b3JhZ2UnKQotICBkZWYgdGVzdFVwZGF0ZUNsb3VkU3RvcmFnZURlcGVuZGVuY2llc1dyaXRlKAotICAgICAgc2VsZiwgYmFzZV9jb25maWdfY3NfbW9jaywgdXBsb2FkZXJfY3NfbW9jayk6Ci0gICAgZXhwZWN0ZWRfZGVwZW5kZW5jaWVzID0gc2VsZi5kZXBlbmRlbmNpZXMKLSAgICBzZWxmLmZzLkNyZWF0ZUZpbGUoc2VsZi5maWxlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzPSdcbicuam9pbihzZWxmLmV4cGVjdGVkX2ZpbGVfbGluZXMpKQotICAgIGNvbmZpZyA9IGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnKHNlbGYuZmlsZV9wYXRoLCB3cml0YWJsZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZmlnLl9Jc0RpcnR5KCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0KLSAgICBiYXNlX2NvbmZpZ19jc19tb2NrLkNhbGN1bGF0ZUhhc2gucmV0dXJuX3ZhbHVlID0gc2VsZi5uZXdfZGVwX2hhc2gKLSAgICB1cGxvYWRlcl9jc19tb2NrLkV4aXN0cy5yZXR1cm5fdmFsdWUgPSBGYWxzZQotICAgIGV4cGVjdGVkX2RlcGVuZGVuY2llcyA9IHNlbGYubmV3X2RlcGVuZGVuY2llcwotICAgIGNvbmZpZy5BZGRDbG91ZFN0b3JhZ2VEZXBlbmRlbmN5VXBkYXRlSm9iKAotICAgICAgICAnZGVwMScsICdwbGF0MicsIHNlbGYubmV3X2RlcF9wYXRoLCBleGVjdXRlX2pvYj1UcnVlKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZmlnLl9Jc0RpcnR5KCkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuX3BlbmRpbmdfdXBsb2FkcykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2RlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLSAgICAjIGNoZWNrIHRoYXQgZmlsZSBjb250ZW50cyBoYXMgYmVlbiB1cGRhdGVkCi0gICAgZmlsZV9tb2R1bGUgPSBmYWtlX2ZpbGVzeXN0ZW0uRmFrZUZpbGVPcGVuKHNlbGYuZnMpCi0gICAgZXhwZWN0ZWRfZmlsZV9saW5lcyA9IGxpc3Qoc2VsZi5uZXdfZXhwZWN0ZWRfZmlsZV9saW5lcykKLSAgICBmb3IgbGluZSBpbiBmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2ZpbGVfbGluZXMucG9wKDApLCBsaW5lLnN0cmlwKCkpCi0gICAgc2VsZi5mcy5DbG9zZU9wZW5GaWxlKGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKSkKLQotICAgIGV4cGVjdGVkX2RlcGVuZGVuY2llcyA9IHNlbGYuZmluYWxfZGVwZW5kZW5jaWVzCi0gICAgYmFzZV9jb25maWdfY3NfbW9jay5DYWxjdWxhdGVIYXNoLnJldHVybl92YWx1ZSA9IHNlbGYuZmluYWxfZGVwX2hhc2gKLSAgICBjb25maWcuQWRkQ2xvdWRTdG9yYWdlRGVwZW5kZW5jeVVwZGF0ZUpvYigKLSAgICAgICAgJ2RlcDInLCAncGxhdDEnLCBzZWxmLmZpbmFsX2RlcF9wYXRoLCBleGVjdXRlX2pvYj1UcnVlKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZmlnLl9Jc0RpcnR5KCkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuX3BlbmRpbmdfdXBsb2FkcykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2RlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLSAgICAjIGNoZWNrIHRoYXQgZmlsZSBjb250ZW50cyBoYXMgYmVlbiB1cGRhdGVkCi0gICAgZXhwZWN0ZWRfZmlsZV9saW5lcyA9IGxpc3Qoc2VsZi5maW5hbF9leHBlY3RlZF9maWxlX2xpbmVzKQotICAgIGZpbGVfbW9kdWxlID0gZmFrZV9maWxlc3lzdGVtLkZha2VGaWxlT3BlbihzZWxmLmZzKQotICAgIGZvciBsaW5lIGluIGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZmlsZV9saW5lcy5wb3AoMCksIGxpbmUuc3RyaXAoKSkKLSAgICBzZWxmLmZzLkNsb3NlT3BlbkZpbGUoZmlsZV9tb2R1bGUoc2VsZi5maWxlX3BhdGgpKQotCi0gIEBtb2NrLnBhdGNoKCdkZXBlbmRlbmN5X21hbmFnZXIudXBsb2FkZXIuY2xvdWRfc3RvcmFnZScpCi0gIEBtb2NrLnBhdGNoKCdkZXBlbmRlbmN5X21hbmFnZXIuYmFzZV9jb25maWcuY2xvdWRfc3RvcmFnZScpCi0gIGRlZiB0ZXN0VXBkYXRlQ2xvdWRTdG9yYWdlRGVwZW5kZW5jaWVzTm9Xcml0ZSgKLSAgICAgIHNlbGYsIGJhc2VfY29uZmlnX2NzX21vY2ssIHVwbG9hZGVyX2NzX21vY2spOgotICAgIHNlbGYuZnMuQ3JlYXRlRmlsZShzZWxmLmZpbGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHM9J1xuJy5qb2luKHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykpCi0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgsIHdyaXRhYmxlPVRydWUpCi0KLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb25maWcuQWRkQ2xvdWRTdG9yYWdlRGVwZW5kZW5jeVVwZGF0ZUpvYiwKLSAgICAgICAgICAgICAgICAgICAgICAnZGVwJywgJ3BsYXQnLCAncGF0aCcpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29uZmlnLkFkZENsb3VkU3RvcmFnZURlcGVuZGVuY3lVcGRhdGVKb2IsCi0gICAgICAgICAgICAgICAgICAgICAgJ2RlcCcsICdwbGF0JywgJ3BhdGgnLCB2ZXJzaW9uPScxLjIuMycpCi0KLSAgICBleHBlY3RlZF9kZXBlbmRlbmNpZXMgPSBzZWxmLmRlcGVuZGVuY2llcwotICAgIGNvbmZpZyA9IGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnKHNlbGYuZmlsZV9wYXRoLCB3cml0YWJsZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZmlnLl9Jc0RpcnR5KCkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuX3BlbmRpbmdfdXBsb2FkcykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2RlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLQotICAgIGJhc2VfY29uZmlnX2NzX21vY2suQ2FsY3VsYXRlSGFzaC5yZXR1cm5fdmFsdWUgPSBzZWxmLm5ld19kZXBfaGFzaAotICAgIHVwbG9hZGVyX2NzX21vY2suRXhpc3RzLnJldHVybl92YWx1ZSA9IEZhbHNlCi0gICAgZXhwZWN0ZWRfZGVwZW5kZW5jaWVzID0gc2VsZi5uZXdfZGVwZW5kZW5jaWVzCi0gICAgY29uZmlnLkFkZENsb3VkU3RvcmFnZURlcGVuZGVuY3lVcGRhdGVKb2IoCi0gICAgICAgICdkZXAxJywgJ3BsYXQyJywgc2VsZi5uZXdfZGVwX3BhdGgsIGV4ZWN1dGVfam9iPUZhbHNlKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuX0lzRGlydHkoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihjb25maWcuX3BlbmRpbmdfdXBsb2FkcykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5ld19wZW5kaW5nX3VwbG9hZCwgY29uZmlnLl9wZW5kaW5nX3VwbG9hZHNbMF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgIyBjaGVjayB0aGF0IGZpbGUgY29udGVudHMgaGF2ZSBub3QgYmVlbiB1cGRhdGVkLgotICAgIGV4cGVjdGVkX2ZpbGVfbGluZXMgPSBsaXN0KHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykKLSAgICBmaWxlX21vZHVsZSA9IGZha2VfZmlsZXN5c3RlbS5GYWtlRmlsZU9wZW4oc2VsZi5mcykKLSAgICBmb3IgbGluZSBpbiBmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2ZpbGVfbGluZXMucG9wKDApLCBsaW5lLnN0cmlwKCkpCi0gICAgc2VsZi5mcy5DbG9zZU9wZW5GaWxlKGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKSkKLQotICAgIGV4cGVjdGVkX2RlcGVuZGVuY2llcyA9IHNlbGYuZmluYWxfZGVwZW5kZW5jaWVzCi0gICAgYmFzZV9jb25maWdfY3NfbW9jay5DYWxjdWxhdGVIYXNoLnJldHVybl92YWx1ZSA9IHNlbGYuZmluYWxfZGVwX2hhc2gKLSAgICBjb25maWcuQWRkQ2xvdWRTdG9yYWdlRGVwZW5kZW5jeVVwZGF0ZUpvYigKLSAgICAgICAgJ2RlcDInLCAncGxhdDEnLCBzZWxmLmZpbmFsX2RlcF9wYXRoLCBleGVjdXRlX2pvYj1GYWxzZSkKLSAgICBzZWxmLmFzc2VydFRydWUoY29uZmlnLl9Jc0RpcnR5KCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgIyBjaGVjayB0aGF0IGZpbGUgY29udGVudHMgaGF2ZSBub3QgYmVlbiB1cGRhdGVkLgotICAgIGV4cGVjdGVkX2ZpbGVfbGluZXMgPSBsaXN0KHNlbGYuZXhwZWN0ZWRfZmlsZV9saW5lcykKLSAgICBmaWxlX21vZHVsZSA9IGZha2VfZmlsZXN5c3RlbS5GYWtlRmlsZU9wZW4oc2VsZi5mcykKLSAgICBmb3IgbGluZSBpbiBmaWxlX21vZHVsZShzZWxmLmZpbGVfcGF0aCk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2ZpbGVfbGluZXMucG9wKDApLCBsaW5lLnN0cmlwKCkpCi0gICAgc2VsZi5mcy5DbG9zZU9wZW5GaWxlKGZpbGVfbW9kdWxlKHNlbGYuZmlsZV9wYXRoKSkKLQotCi1jbGFzcyBCYXNlQ29uZmlnRGF0YU1hbmlwdWxhdGlvblVuaXR0ZXN0cyhmYWtlX2ZpbGVzeXN0ZW1fdW5pdHRlc3QuVGVzdENhc2UpOgotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5hZGRUeXBlRXF1YWxpdHlGdW5jKHVwbG9hZGVyLkNsb3VkU3RvcmFnZVVwbG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRlci5DbG91ZFN0b3JhZ2VVcGxvYWRlci5fX2VxX18pCi0gICAgc2VsZi5zZXRVcFB5ZmFrZWZzKCkKLQotICAgIHNlbGYuY3NfYnVja2V0ID0gJ2J1Y2tldDEnCi0gICAgc2VsZi5jc19iYXNlX2ZvbGRlciA9ICdkZXBlbmRlbmNpZXNfZm9sZGVyJwotICAgIHNlbGYuY3NfaGFzaCA9ICdoYXNoMTInCi0gICAgc2VsZi5kb3dubG9hZF9wYXRoID0gJy4uLy4uL3JlbGF0aXZlL2RlcDEvcGF0aDInCi0gICAgc2VsZi5sb2NhbF9wYXRocyA9IFsnLi4vLi4vLi4vcmVsYXRpdmUvbG9jYWwvcGF0aDIxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICcuLi8uLi8uLi9yZWxhdGl2ZS9sb2NhbC9wYXRoMjInXQotICAgIHNlbGYucGxhdGZvcm1fZGljdCA9IHsnY2xvdWRfc3RvcmFnZV9oYXNoJzogc2VsZi5jc19oYXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6IHNlbGYuZG93bmxvYWRfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvY2FsX3BhdGhzJzogc2VsZi5sb2NhbF9wYXRoc30KLSAgICBzZWxmLmRlcGVuZGVuY2llcyA9IHsKLSAgICAgICAgJ2RlcDEnOiB7Ci0gICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9idWNrZXQnOiBzZWxmLmNzX2J1Y2tldCwKLSAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyJzogc2VsZi5jc19iYXNlX2ZvbGRlciwKLSAgICAgICAgICAgICdmaWxlX2luZm8nOiB7Ci0gICAgICAgICAgICAgICAgJ3BsYXQxJzogewotICAgICAgICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9oYXNoJzogJ2hhc2gxMScsCi0gICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJy4uLy4uL3JlbGF0aXZlL2RlcDEvcGF0aDEnLAotICAgICAgICAgICAgICAgICAgICAnbG9jYWxfcGF0aHMnOiBbJy4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgxMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4vLi4vLi4vcmVsYXRpdmUvbG9jYWwvcGF0aDEyJ119LAotICAgICAgICAgICAgICAgICdwbGF0Mic6IHNlbGYucGxhdGZvcm1fZGljdAotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAnZGVwMic6IHsKLSAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2J1Y2tldCc6ICdidWNrZXQyJywKLSAgICAgICAgICAgICdmaWxlX2luZm8nOiB7Ci0gICAgICAgICAgICAgICAgJ3BsYXQxJzogewotICAgICAgICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9oYXNoJzogJ2hhc2gyMScsCi0gICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJy4uLy4uL3JlbGF0aXZlL2RlcDIvcGF0aDEnLAotICAgICAgICAgICAgICAgICAgICAnbG9jYWxfcGF0aHMnOiBbJy4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgzMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4vLi4vLi4vcmVsYXRpdmUvbG9jYWwvcGF0aDMyJ119LAotICAgICAgICAgICAgICAgICdwbGF0Mic6IHsKLSAgICAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdoYXNoMjInLAotICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9yZWxhdGl2ZS9kZXAyL3BhdGgyJ319fX0KLQotICAgIHNlbGYuZmlsZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbigKLSAgICAgICAgJ3BhdGgnLCAndG8nLCAnY29uZmlnJywgJ2ZpbGUnKSkKLQotCi0gICAgc2VsZi5leHBlY3RlZF9maWxlX2xpbmVzID0gWwotICAgICAgIyBweWxpbnQ6IGRpc2FibGU9YmFkLWNvbnRpbnVhdGlvbgotICAgICAgJ3snLCAnImNvbmZpZ190eXBlIjogIkJhc2VDb25maWciLCcsICciZGVwZW5kZW5jaWVzIjogeycsCi0gICAgICAgICciZGVwMSI6IHsnLCAnImNsb3VkX3N0b3JhZ2VfYmFzZV9mb2xkZXIiOiAiZGVwZW5kZW5jaWVzX2ZvbGRlciIsJywKLSAgICAgICAgICAnImNsb3VkX3N0b3JhZ2VfYnVja2V0IjogImJ1Y2tldDEiLCcsICciZmlsZV9pbmZvIjogeycsCi0gICAgICAgICAgICAnInBsYXQxIjogeycsICciY2xvdWRfc3RvcmFnZV9oYXNoIjogImhhc2gxMSIsJywKLSAgICAgICAgICAgICAgJyJkb3dubG9hZF9wYXRoIjogIi4uLy4uL3JlbGF0aXZlL2RlcDEvcGF0aDEiLCcsCi0gICAgICAgICAgICAgICcibG9jYWxfcGF0aHMiOiBbJywgJyIuLi8uLi8uLi9yZWxhdGl2ZS9sb2NhbC9wYXRoMTEiLCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIi4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgxMiInLCAnXScsICd9LCcsCi0gICAgICAgICAgICAnInBsYXQyIjogeycsICciY2xvdWRfc3RvcmFnZV9oYXNoIjogImhhc2gxMiIsJywKLSAgICAgICAgICAgICAgJyJkb3dubG9hZF9wYXRoIjogIi4uLy4uL3JlbGF0aXZlL2RlcDEvcGF0aDIiLCcsCi0gICAgICAgICAgICAgICcibG9jYWxfcGF0aHMiOiBbJywgJyIuLi8uLi8uLi9yZWxhdGl2ZS9sb2NhbC9wYXRoMjEiLCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIi4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgyMiInLCAnXScsCi0gICAgICAgICAgICAgICd9JywgJ30nLCAnfSwnLAotICAgICAgICAnImRlcDIiOiB7JywgJyJjbG91ZF9zdG9yYWdlX2J1Y2tldCI6ICJidWNrZXQyIiwnLCAnImZpbGVfaW5mbyI6IHsnLAotICAgICAgICAgICAgJyJwbGF0MSI6IHsnLCAnImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICJoYXNoMjEiLCcsCi0gICAgICAgICAgICAgICciZG93bmxvYWRfcGF0aCI6ICIuLi8uLi9yZWxhdGl2ZS9kZXAyL3BhdGgxIiwnLAotICAgICAgICAgICAgICAnImxvY2FsX3BhdGhzIjogWycsICciLi4vLi4vLi4vcmVsYXRpdmUvbG9jYWwvcGF0aDMxIiwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyIuLi8uLi8uLi9yZWxhdGl2ZS9sb2NhbC9wYXRoMzIiJywgJ10nLCAnfSwnLAotICAgICAgICAgICAgJyJwbGF0MiI6IHsnLCAnImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICJoYXNoMjIiLCcsCi0gICAgICAgICAgICAgICciZG93bmxvYWRfcGF0aCI6ICIuLi8uLi9yZWxhdGl2ZS9kZXAyL3BhdGgyIicsICd9JywgJ30nLCAnfScsCi0gICAgICAnfScsICd9J10KLSAgICBzZWxmLmZzLkNyZWF0ZUZpbGUoc2VsZi5maWxlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzPSdcbicuam9pbihzZWxmLmV4cGVjdGVkX2ZpbGVfbGluZXMpKQotCi0KLSAgZGVmIHRlc3RTZXRQbGF0Zm9ybURhdGFGYWlsdXJlTm90V3JpdGFibGUoc2VsZik6Ci0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgIGRlcGVuZGVuY3lfbWFuYWdlci5SZWFkV3JpdGVFcnJvciwgY29uZmlnLl9TZXRQbGF0Zm9ybURhdGEsCi0gICAgICAgICdkZXAxJywgJ3BsYXQxJywgJ2Nsb3VkX3N0b3JhZ2VfYnVja2V0JywgJ25ld19idWNrZXQnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0KLSAgZGVmIHRlc3RTZXRQbGF0Zm9ybURhdGFGYWlsdXJlKHNlbGYpOgotICAgIGNvbmZpZyA9IGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnKHNlbGYuZmlsZV9wYXRoLCB3cml0YWJsZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbmZpZy5fU2V0UGxhdGZvcm1EYXRhLCAnbWlzc2luZ19kZXAnLAotICAgICAgICAgICAgICAgICAgICAgICdwbGF0MicsICdjbG91ZF9zdG9yYWdlX2J1Y2tldCcsICduZXdfYnVja2V0JykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbmZpZy5fU2V0UGxhdGZvcm1EYXRhLCAnZGVwMScsCi0gICAgICAgICAgICAgICAgICAgICAgJ21pc3NpbmdfcGxhdCcsICdjbG91ZF9zdG9yYWdlX2J1Y2tldCcsICduZXdfYnVja2V0JykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotCi0KLSAgZGVmIHRlc3RTZXRQbGF0Zm9ybURhdGFDbG91ZFN0b3JhZ2VCdWNrZXRTdWNjZXNzKHNlbGYpOgotICAgIGNvbmZpZyA9IGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnKHNlbGYuZmlsZV9wYXRoLCB3cml0YWJsZT1UcnVlKQotICAgIHVwZGF0ZWRfY3NfZGVwZW5kZW5jaWVzID0gewotICAgICAgICAnZGVwMSc6IHsnY2xvdWRfc3RvcmFnZV9idWNrZXQnOiAnbmV3X2J1Y2tldCcsCi0gICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyJzogJ2RlcGVuZGVuY2llc19mb2xkZXInLAotICAgICAgICAgICAgICAgICAnZmlsZV9pbmZvJzogewotICAgICAgICAgICAgICAgICAgICAgJ3BsYXQxJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDExJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9yZWxhdGl2ZS9kZXAxL3BhdGgxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jYWxfcGF0aHMnOiBbJy4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgxMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLi8uLi8uLi9yZWxhdGl2ZS9sb2NhbC9wYXRoMTInXX0sCi0gICAgICAgICAgICAgICAgICAgICAncGxhdDInOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdoYXNoMTInLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJy4uLy4uL3JlbGF0aXZlL2RlcDEvcGF0aDInLAotICAgICAgICAgICAgICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsnLi4vLi4vLi4vcmVsYXRpdmUvbG9jYWwvcGF0aDIxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgyMiddfX19LAotICAgICAgICAnZGVwMic6IHsnY2xvdWRfc3RvcmFnZV9idWNrZXQnOiAnYnVja2V0MicsCi0gICAgICAgICAgICAgICAgICdmaWxlX2luZm8nOiB7Ci0gICAgICAgICAgICAgICAgICAgICAncGxhdDEnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdoYXNoMjEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJy4uLy4uL3JlbGF0aXZlL2RlcDIvcGF0aDEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsnLi4vLi4vLi4vcmVsYXRpdmUvbG9jYWwvcGF0aDMxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgzMiddfSwKLSAgICAgICAgICAgICAgICAgICAgICdwbGF0Mic6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9oYXNoJzogJ2hhc2gyMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnLi4vLi4vcmVsYXRpdmUvZGVwMi9wYXRoMid9fX19Ci0gICAgY29uZmlnLl9TZXRQbGF0Zm9ybURhdGEoJ2RlcDEnLCAncGxhdDInLCAnY2xvdWRfc3RvcmFnZV9idWNrZXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdfYnVja2V0JykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVwZGF0ZWRfY3NfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotCi0gIGRlZiB0ZXN0U2V0UGxhdGZvcm1EYXRhQ2xvdWRTdG9yYWdlQmFzZUZvbGRlclN1Y2Nlc3Moc2VsZik6Ci0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgsIHdyaXRhYmxlPVRydWUpCi0gICAgdXBkYXRlZF9jc19kZXBlbmRlbmNpZXMgPSB7Ci0gICAgICAgICdkZXAxJzogeydjbG91ZF9zdG9yYWdlX2J1Y2tldCc6ICdidWNrZXQxJywKLSAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfYmFzZV9mb2xkZXInOiAnbmV3X2RlcGVuZGVuY2llc19mb2xkZXInLAotICAgICAgICAgICAgICAgICAnZmlsZV9pbmZvJzogewotICAgICAgICAgICAgICAgICAgICAgJ3BsYXQxJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDExJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9yZWxhdGl2ZS9kZXAxL3BhdGgxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jYWxfcGF0aHMnOiBbJy4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgxMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLi8uLi8uLi9yZWxhdGl2ZS9sb2NhbC9wYXRoMTInXX0sCi0gICAgICAgICAgICAgICAgICAgICAncGxhdDInOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdoYXNoMTInLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJy4uLy4uL3JlbGF0aXZlL2RlcDEvcGF0aDInLAotICAgICAgICAgICAgICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsnLi4vLi4vLi4vcmVsYXRpdmUvbG9jYWwvcGF0aDIxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgyMiddfX19LAotICAgICAgICAnZGVwMic6IHsnY2xvdWRfc3RvcmFnZV9idWNrZXQnOiAnYnVja2V0MicsCi0gICAgICAgICAgICAgICAgICdmaWxlX2luZm8nOiB7Ci0gICAgICAgICAgICAgICAgICAgICAncGxhdDEnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdoYXNoMjEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJy4uLy4uL3JlbGF0aXZlL2RlcDIvcGF0aDEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsnLi4vLi4vLi4vcmVsYXRpdmUvbG9jYWwvcGF0aDMxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgzMiddfSwKLSAgICAgICAgICAgICAgICAgICAgICdwbGF0Mic6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9oYXNoJzogJ2hhc2gyMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnLi4vLi4vcmVsYXRpdmUvZGVwMi9wYXRoMid9fX19Ci0gICAgY29uZmlnLl9TZXRQbGF0Zm9ybURhdGEoJ2RlcDEnLCAncGxhdDInLCAnY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld19kZXBlbmRlbmNpZXNfZm9sZGVyJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVwZGF0ZWRfY3NfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotCi0gIGRlZiB0ZXN0U2V0UGxhdGZvcm1EYXRhSGFzaFN1Y2Nlc3Moc2VsZik6Ci0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgsIHdyaXRhYmxlPVRydWUpCi0gICAgdXBkYXRlZF9jc19kZXBlbmRlbmNpZXMgPSB7Ci0gICAgICAgICdkZXAxJzogeydjbG91ZF9zdG9yYWdlX2J1Y2tldCc6ICdidWNrZXQxJywKLSAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfYmFzZV9mb2xkZXInOiAnZGVwZW5kZW5jaWVzX2ZvbGRlcicsCi0gICAgICAgICAgICAgICAgICdmaWxlX2luZm8nOiB7Ci0gICAgICAgICAgICAgICAgICAgICAncGxhdDEnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdoYXNoMTEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJy4uLy4uL3JlbGF0aXZlL2RlcDEvcGF0aDEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsnLi4vLi4vLi4vcmVsYXRpdmUvbG9jYWwvcGF0aDExJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgxMiddfSwKLSAgICAgICAgICAgICAgICAgICAgICdwbGF0Mic6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9oYXNoJzogJ25ld19oYXNoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9yZWxhdGl2ZS9kZXAxL3BhdGgyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jYWxfcGF0aHMnOiBbJy4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgyMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLi8uLi8uLi9yZWxhdGl2ZS9sb2NhbC9wYXRoMjInXX19fSwKLSAgICAgICAgJ2RlcDInOiB7J2Nsb3VkX3N0b3JhZ2VfYnVja2V0JzogJ2J1Y2tldDInLAotICAgICAgICAgICAgICAgICAnZmlsZV9pbmZvJzogewotICAgICAgICAgICAgICAgICAgICAgJ3BsYXQxJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDIxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9yZWxhdGl2ZS9kZXAyL3BhdGgxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jYWxfcGF0aHMnOiBbJy4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgzMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLi8uLi8uLi9yZWxhdGl2ZS9sb2NhbC9wYXRoMzInXX0sCi0gICAgICAgICAgICAgICAgICAgICAncGxhdDInOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdoYXNoMjInLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJy4uLy4uL3JlbGF0aXZlL2RlcDIvcGF0aDInfX19fQotICAgIGNvbmZpZy5fU2V0UGxhdGZvcm1EYXRhKCdkZXAxJywgJ3BsYXQyJywgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld19oYXNoJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVwZGF0ZWRfY3NfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotCi0gIGRlZiB0ZXN0U2V0UGxhdGZvcm1EYXRhRG93bmxvYWRQYXRoU3VjY2VzcyhzZWxmKToKLSAgICBjb25maWcgPSBkZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZyhzZWxmLmZpbGVfcGF0aCwgd3JpdGFibGU9VHJ1ZSkKLSAgICB1cGRhdGVkX2NzX2RlcGVuZGVuY2llcyA9IHsKLSAgICAgICAgJ2RlcDEnOiB7J2Nsb3VkX3N0b3JhZ2VfYnVja2V0JzogJ2J1Y2tldDEnLAotICAgICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlcic6ICdkZXBlbmRlbmNpZXNfZm9sZGVyJywKLSAgICAgICAgICAgICAgICAgJ2ZpbGVfaW5mbyc6IHsKLSAgICAgICAgICAgICAgICAgICAgICdwbGF0MSc6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9oYXNoJzogJ2hhc2gxMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnLi4vLi4vcmVsYXRpdmUvZGVwMS9wYXRoMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2xvY2FsX3BhdGhzJzogWycuLi8uLi8uLi9yZWxhdGl2ZS9sb2NhbC9wYXRoMTEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4vLi4vLi4vcmVsYXRpdmUvbG9jYWwvcGF0aDEyJ119LAotICAgICAgICAgICAgICAgICAgICAgJ3BsYXQyJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDEyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9uZXcvZGVwMS9wYXRoMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2xvY2FsX3BhdGhzJzogWycuLi8uLi8uLi9yZWxhdGl2ZS9sb2NhbC9wYXRoMjEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4vLi4vLi4vcmVsYXRpdmUvbG9jYWwvcGF0aDIyJ119fX0sCi0gICAgICAgICdkZXAyJzogeydjbG91ZF9zdG9yYWdlX2J1Y2tldCc6ICdidWNrZXQyJywKLSAgICAgICAgICAgICAgICAgJ2ZpbGVfaW5mbyc6IHsKLSAgICAgICAgICAgICAgICAgICAgICdwbGF0MSc6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9oYXNoJzogJ2hhc2gyMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnLi4vLi4vcmVsYXRpdmUvZGVwMi9wYXRoMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2xvY2FsX3BhdGhzJzogWycuLi8uLi8uLi9yZWxhdGl2ZS9sb2NhbC9wYXRoMzEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4vLi4vLi4vcmVsYXRpdmUvbG9jYWwvcGF0aDMyJ119LAotICAgICAgICAgICAgICAgICAgICAgJ3BsYXQyJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDIyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9yZWxhdGl2ZS9kZXAyL3BhdGgyJ319fX0KLSAgICBjb25maWcuX1NldFBsYXRmb3JtRGF0YSgnZGVwMScsICdwbGF0MicsICdkb3dubG9hZF9wYXRoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4vLi4vbmV3L2RlcDEvcGF0aDInKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodXBkYXRlZF9jc19kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0KLSAgZGVmIHRlc3RTZXRQbGF0Zm9ybURhdGFMb2NhbFBhdGhTdWNjZXNzKHNlbGYpOgotICAgIGNvbmZpZyA9IGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnKHNlbGYuZmlsZV9wYXRoLCB3cml0YWJsZT1UcnVlKQotICAgIHVwZGF0ZWRfY3NfZGVwZW5kZW5jaWVzID0gewotICAgICAgICAnZGVwMSc6IHsnY2xvdWRfc3RvcmFnZV9idWNrZXQnOiAnYnVja2V0MScsCi0gICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyJzogJ2RlcGVuZGVuY2llc19mb2xkZXInLAotICAgICAgICAgICAgICAgICAnZmlsZV9pbmZvJzogewotICAgICAgICAgICAgICAgICAgICAgJ3BsYXQxJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDExJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9yZWxhdGl2ZS9kZXAxL3BhdGgxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jYWxfcGF0aHMnOiBbJy4uLy4uLy4uL3JlbGF0aXZlL2xvY2FsL3BhdGgxMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLi8uLi8uLi9yZWxhdGl2ZS9sb2NhbC9wYXRoMTInXX0sCi0gICAgICAgICAgICAgICAgICAgICAncGxhdDInOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdoYXNoMTInLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJy4uLy4uL3JlbGF0aXZlL2RlcDEvcGF0aDInLAotICAgICAgICAgICAgICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsnLi4vLi4vbmV3L3JlbGF0aXZlL2xvY2FsL3BhdGgyMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLi8uLi9uZXcvcmVsYXRpdmUvbG9jYWwvcGF0aDIyJ119fX0sCi0gICAgICAgICdkZXAyJzogeydjbG91ZF9zdG9yYWdlX2J1Y2tldCc6ICdidWNrZXQyJywKLSAgICAgICAgICAgICAgICAgJ2ZpbGVfaW5mbyc6IHsKLSAgICAgICAgICAgICAgICAgICAgICdwbGF0MSc6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9oYXNoJzogJ2hhc2gyMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnLi4vLi4vcmVsYXRpdmUvZGVwMi9wYXRoMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2xvY2FsX3BhdGhzJzogWycuLi8uLi8uLi9yZWxhdGl2ZS9sb2NhbC9wYXRoMzEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4vLi4vLi4vcmVsYXRpdmUvbG9jYWwvcGF0aDMyJ119LAotICAgICAgICAgICAgICAgICAgICAgJ3BsYXQyJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDIyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfcGF0aCc6ICcuLi8uLi9yZWxhdGl2ZS9kZXAyL3BhdGgyJ319fX0KLSAgICBjb25maWcuX1NldFBsYXRmb3JtRGF0YSgnZGVwMScsICdwbGF0MicsICdsb2NhbF9wYXRocycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWycuLi8uLi9uZXcvcmVsYXRpdmUvbG9jYWwvcGF0aDIxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLy4uL25ldy9yZWxhdGl2ZS9sb2NhbC9wYXRoMjInXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHVwZGF0ZWRfY3NfZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotCi0gIGRlZiB0ZXN0R2V0UGxhdGZvcm1EYXRhRmFpbHVyZShzZWxmKToKLSAgICBjb25maWcgPSBkZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZyhzZWxmLmZpbGVfcGF0aCwgd3JpdGFibGU9VHJ1ZSkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb25maWcuX0dldFBsYXRmb3JtRGF0YSwgJ21pc3NpbmdfZGVwJywKLSAgICAgICAgICAgICAgICAgICAgICAncGxhdDInLCAnY2xvdWRfc3RvcmFnZV9idWNrZXQnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29uZmlnLl9HZXRQbGF0Zm9ybURhdGEsICdkZXAxJywKLSAgICAgICAgICAgICAgICAgICAgICAnbWlzc2luZ19wbGF0JywgJ2Nsb3VkX3N0b3JhZ2VfYnVja2V0JykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotCi0gIGRlZiB0ZXN0R2V0UGxhdGZvcm1EYXRhRGljdFN1Y2Nlc3Moc2VsZik6Ci0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgsIHdyaXRhYmxlPVRydWUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBsYXRmb3JtX2RpY3QsCi0gICAgICAgICAgICAgICAgICAgICBjb25maWcuX0dldFBsYXRmb3JtRGF0YSgnZGVwMScsICdwbGF0MicpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0KLSAgZGVmIHRlc3RHZXRQbGF0Zm9ybURhdGFDbG91ZFN0b3JhZ2VCdWNrZXRTdWNjZXNzKHNlbGYpOgotICAgIGNvbmZpZyA9IGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnKHNlbGYuZmlsZV9wYXRoLCB3cml0YWJsZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jc19idWNrZXQsIGNvbmZpZy5fR2V0UGxhdGZvcm1EYXRhKAotICAgICAgICAnZGVwMScsICdwbGF0MicsICdjbG91ZF9zdG9yYWdlX2J1Y2tldCcpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZXBlbmRlbmNpZXMsIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0KLSAgZGVmIHRlc3RHZXRQbGF0Zm9ybURhdGFDbG91ZFN0b3JhZ2VCYXNlRm9sZGVyU3VjY2VzcyhzZWxmKToKLSAgICBjb25maWcgPSBkZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZyhzZWxmLmZpbGVfcGF0aCwgd3JpdGFibGU9VHJ1ZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3NfYmFzZV9mb2xkZXIsIGNvbmZpZy5fR2V0UGxhdGZvcm1EYXRhKAotICAgICAgICAnZGVwMScsICdwbGF0MicsICdjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLQotICBkZWYgdGVzdEdldFBsYXRmb3JtRGF0YUhhc2hTdWNjZXNzKHNlbGYpOgotICAgIGNvbmZpZyA9IGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnKHNlbGYuZmlsZV9wYXRoLCB3cml0YWJsZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jc19oYXNoLCBjb25maWcuX0dldFBsYXRmb3JtRGF0YSgKLSAgICAgICAgJ2RlcDEnLCAncGxhdDInLCAnY2xvdWRfc3RvcmFnZV9oYXNoJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLQotICBkZWYgdGVzdEdldFBsYXRmb3JtRGF0YURvd25sb2FkUGF0aFN1Y2Nlc3Moc2VsZik6Ci0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgsIHdyaXRhYmxlPVRydWUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRvd25sb2FkX3BhdGgsIGNvbmZpZy5fR2V0UGxhdGZvcm1EYXRhKAotICAgICAgICAnZGVwMScsICdwbGF0MicsICdkb3dubG9hZF9wYXRoJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlcGVuZGVuY2llcywgY29uZmlnLl9jb25maWdfZGF0YSkKLQotICBkZWYgdGVzdEdldFBsYXRmb3JtRGF0YUxvY2FsUGF0aFN1Y2Nlc3Moc2VsZik6Ci0gICAgY29uZmlnID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoc2VsZi5maWxlX3BhdGgsIHdyaXRhYmxlPVRydWUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvY2FsX3BhdGhzLCBjb25maWcuX0dldFBsYXRmb3JtRGF0YSgKLSAgICAgICAgJ2RlcDEnLCAncGxhdDInLCAnbG9jYWxfcGF0aHMnKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGVwZW5kZW5jaWVzLCBjb25maWcuX2NvbmZpZ19kYXRhKQotCi1jbGFzcyBCYXNlQ29uZmlnVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICIiIiBTdWJjbGFzc2FibGUgdW5pdHRlc3RzIGZvciBCYXNlQ29uZmlnLgotICBGb3Igc3ViY2xhc3Nlczogb3ZlcnJpZGUgc2V0VXAsIEdldENvbmZpZ0RhdGFGcm9tRGljdCwKLSAgICBhbmQgRW5kVG9FbmRFeHBlY3RlZENvbmZpZ0RhdGEgYXMgbmVlZGVkLgotCi0gICAgc2V0VXAgbXVzdCBzZXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotICAgICAgc2VsZi5jb25maWdfdHlwZTogU3RyaW5nIHJldHVybmVkZCBmcm9tIEdldENvbmZpZ1R5cGUgaW4gY29uZmlnIHN1YmNsYXNzLgotICAgICAgc2VsZi5jb25maWdfY2xhc3M6IHRoZSBjbGFzcyBmb3IgdGhlIGNvbmZpZyBzdWJjbGFzcy4KLSAgICAgIHNlbGYuY29uZmlnX21vZHVsZTogaW1wb3J0YWJsZSBtb2R1bGUgZm9yIHRoZSBjb25maWcgc3ViY2xhc3MuCi0gICAgICBzZWxmLmVtcHR5X2RpY3Q6IGV4cGVjdGVkIGRpY3Rpb25hcnkgZm9yIGFuIGVtcHR5IGNvbmZpZywgYXMgaXQgd291bGQgYmUKLSAgICAgICAgc3RvcmVkIGluIGEganNvbiBmaWxlLgotICAgICAgc2VsZi5vbmVfZGVwX2RpY3Q6IGV4YW1wbGUgZGljdGlvbmFyeSBmb3IgYSBjb25maWcgd2l0aCBvbmUgZGVwZW5kZW5jeSwKLSAgICAgICAgYXMgaXQgd291bGQgYmUgc3RvcmVkIGluIGEganNvbiBmaWxlLgotICAiIiIKLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHNlbGYuY29uZmlnX3R5cGUgPSAnQmFzZUNvbmZpZycKLSAgICBzZWxmLmNvbmZpZ19jbGFzcyA9IGRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnCi0gICAgc2VsZi5jb25maWdfbW9kdWxlID0gJ2RlcGVuZGVuY3lfbWFuYWdlci5iYXNlX2NvbmZpZycKLQotICAgIHNlbGYuZW1wdHlfZGljdCA9IHsnY29uZmlnX3R5cGUnOiBzZWxmLmNvbmZpZ190eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzoge319Ci0KLSAgICBkZXBlbmRlbmN5X2RpY3QgPSB7Ci0gICAgICAgICdkZXAnOiB7Ci0gICAgICAgICAgICAnY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlcic6ICdjc19iYXNlX2ZvbGRlcjEnLAotICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfYnVja2V0JzogJ2J1Y2tldDEnLAotICAgICAgICAgICAgJ2ZpbGVfaW5mbyc6IHsKLSAgICAgICAgICAgICAgICAncGxhdDFfYXJjaDEnOiB7Ci0gICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDExMScsCi0gICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJ2Rvd25sb2FkX3BhdGgxMTEnLAotICAgICAgICAgICAgICAgICAgICAnY3NfcmVtb3RlX3BhdGgnOiAnY3NfcGF0aDExMScsCi0gICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uX2luX2NzJzogJ3ZlcnNpb25fMTExJywKLSAgICAgICAgICAgICAgICAgICAgJ2xvY2FsX3BhdGhzJzogWydsb2NhbF9wYXRoMTExMCcsICdsb2NhbF9wYXRoMTExMSddCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAncGxhdDFfYXJjaDInOiB7Ci0gICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDExMicsCi0gICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJ2Rvd25sb2FkX3BhdGgxMTInLAotICAgICAgICAgICAgICAgICAgICAnY3NfcmVtb3RlX3BhdGgnOiAnY3NfcGF0aDExMicsCi0gICAgICAgICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsnbG9jYWxfcGF0aDExMjAnLCAnbG9jYWxfcGF0aDExMjEnXQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgJ3dpbl9hcmNoMSc6IHsKLSAgICAgICAgICAgICAgICAgICAgJ2Nsb3VkX3N0b3JhZ2VfaGFzaCc6ICdoYXNoMXcxJywKLSAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3BhdGgnOiAnZG93bmxvYWRcXHBhdGhcXDF3MScsCi0gICAgICAgICAgICAgICAgICAgICdjc19yZW1vdGVfcGF0aCc6ICdjc19wYXRoMXcxJywKLSAgICAgICAgICAgICAgICAgICAgJ2xvY2FsX3BhdGhzJzogWydsb2NhbFxccGF0aFxcMXcxMCcsICdsb2NhbFxccGF0aFxcMXcxMSddCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAnYWxsX3RoZV92YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAgICAgICAgICdjbG91ZF9zdG9yYWdlX2hhc2gnOiAnaGFzaDExMScsCi0gICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF9wYXRoJzogJ2Rvd25sb2FkX3BhdGgxMTEnLAotICAgICAgICAgICAgICAgICAgICAnY3NfcmVtb3RlX3BhdGgnOiAnY3NfcGF0aDExMScsCi0gICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uX2luX2NzJzogJ3ZlcnNpb25fMTExJywKLSAgICAgICAgICAgICAgICAgICAgJ3BhdGhfd2l0aGluX2FyY2hpdmUnOiAncGF0aC93aXRoaW4vYXJjaGl2ZScsCi0gICAgICAgICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsnbG9jYWxfcGF0aDExMTAnLCAnbG9jYWxfcGF0aDExMTEnXQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBzZWxmLm9uZV9kZXBfZGljdCA9IHsnY29uZmlnX3R5cGUnOiBzZWxmLmNvbmZpZ190eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBkZXBlbmRlbmN5X2RpY3R9Ci0KLSAgZGVmIEdldENvbmZpZ0RhdGFGcm9tRGljdChzZWxmLCBjb25maWdfZGljdCk6Ci0gICAgcmV0dXJuIGNvbmZpZ19kaWN0LmdldCgnZGVwZW5kZW5jaWVzJywge30pCi0KLSAgQG1vY2sucGF0Y2goJ29zLnBhdGgnKQotICBAbW9jay5wYXRjaCgnX19idWlsdGluX18ub3BlbicpCi0gIGRlZiB0ZXN0SW5pdEJhc2VQcm9wZXJ0aWVzKHNlbGYsIG9wZW5fbW9jaywgcGF0aF9tb2NrKToKLSAgICAjIEluaXQgaXMgbm90IG1lYW50IHRvIGJlIG92ZXJyaWRkZW4sIHNvIHdlIHNob3VsZCBiZSBtb2NraW5nIHRoZQotICAgICMgYmFzZV9jb25maWcncyBqc29uIG1vZHVsZSwgZXZlbiBpbiBzdWJjbGFzc2VzLgotICAgIGpzb25fbW9kdWxlID0gJ2RlcGVuZGVuY3lfbWFuYWdlci5iYXNlX2NvbmZpZy5qc29uJwotICAgIHdpdGggbW9jay5wYXRjaChqc29uX21vZHVsZSkgYXMganNvbl9tb2NrOgotICAgICAganNvbl9tb2NrLmxvYWQucmV0dXJuX3ZhbHVlID0gc2VsZi5lbXB0eV9kaWN0LmNvcHkoKQotICAgICAgY29uZmlnID0gc2VsZi5jb25maWdfY2xhc3MoJ2ZpbGVfcGF0aCcpCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKCdmaWxlX3BhdGgnLCBjb25maWcuX2NvbmZpZ19wYXRoKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbmZpZ190eXBlLCBjb25maWcuR2V0Q29uZmlnVHlwZSgpKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkdldENvbmZpZ0RhdGFGcm9tRGljdChzZWxmLmVtcHR5X2RpY3QpLAotICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuX2NvbmZpZ19kYXRhKQotCi0KLSAgQG1vY2sucGF0Y2goJ2RlcGVuZGVuY3lfbWFuYWdlci5kZXBlbmRlbmN5X2luZm8uRGVwZW5kZW5jeUluZm8nKQotICBAbW9jay5wYXRjaCgnb3MucGF0aCcpCi0gIEBtb2NrLnBhdGNoKCdfX2J1aWx0aW5fXy5vcGVuJykKLSAgZGVmIHRlc3RJbml0V2l0aERlcGVuZGVuY2llcyhzZWxmLCBvcGVuX21vY2ssIHBhdGhfbW9jaywgZGVwX2luZm9fbW9jayk6Ci0gICAgIyBJbml0IGlzIG5vdCBtZWFudCB0byBiZSBvdmVycmlkZGVuLCBzbyB3ZSBzaG91bGQgYmUgbW9ja2luZyB0aGUKLSAgICAjIGJhc2VfY29uZmlnJ3MganNvbiBtb2R1bGUsIGV2ZW4gaW4gc3ViY2xhc3Nlcy4KLSAgICBqc29uX21vZHVsZSA9ICdkZXBlbmRlbmN5X21hbmFnZXIuYmFzZV9jb25maWcuanNvbicKLSAgICB3aXRoIG1vY2sucGF0Y2goanNvbl9tb2R1bGUpIGFzIGpzb25fbW9jazoKLSAgICAgIGpzb25fbW9jay5sb2FkLnJldHVybl92YWx1ZSA9IHNlbGYub25lX2RlcF9kaWN0Ci0gICAgICBjb25maWcgPSBzZWxmLmNvbmZpZ19jbGFzcygnZmlsZV9wYXRoJykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2ZpbGVfcGF0aCcsIGNvbmZpZy5fY29uZmlnX3BhdGgpCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29uZmlnX3R5cGUsIGNvbmZpZy5HZXRDb25maWdUeXBlKCkpCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuR2V0Q29uZmlnRGF0YUZyb21EaWN0KHNlbGYub25lX2RlcF9kaWN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9jb25maWdfZGF0YSkKLQotICBkZWYgdGVzdEZvcm1hdFBhdGgoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLmNvbmZpZ19jbGFzcy5fRm9ybWF0UGF0aChOb25lKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLmNvbmZpZ19jbGFzcy5fRm9ybWF0UGF0aCgnJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnc29tZV9zdHJpbmcnLAotICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdfY2xhc3MuX0Zvcm1hdFBhdGgoJ3NvbWVfc3RyaW5nJykpCi0KLSAgICBleHBlY3RlZF9wYXRoID0gb3MucGF0aC5qb2luKCdzb21lJywgJ2ZpbGUnLCAncGF0aCcpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdfY2xhc3MuX0Zvcm1hdFBhdGgoJ3NvbWUvZmlsZS9wYXRoJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdfY2xhc3MuX0Zvcm1hdFBhdGgoJ3NvbWVcXGZpbGVcXHBhdGgnKSkKLQotICBAbW9jay5wYXRjaCgnZGVwZW5kZW5jeV9tYW5hZ2VyLmJhc2VfY29uZmlnLmpzb24nKQotICBAbW9jay5wYXRjaCgnZGVwZW5kZW5jeV9tYW5hZ2VyLmRlcGVuZGVuY3lfaW5mby5EZXBlbmRlbmN5SW5mbycpCi0gIEBtb2NrLnBhdGNoKCdvcy5wYXRoLmV4aXN0cycpCi0gIEBtb2NrLnBhdGNoKCdfX2J1aWx0aW5fXy5vcGVuJykKLSAgZGVmIHRlc3RJdGVyRGVwZW5kZW5jaWVzRXJyb3IoCi0gICAgICBzZWxmLCBvcGVuX21vY2ssIGV4aXN0c19tb2NrLCBkZXBfaW5mb19tb2NrLCBqc29uX21vY2spOgotICAgICMgSW5pdCBpcyBub3QgbWVhbnQgdG8gYmUgb3ZlcnJpZGRlbiwgc28gd2Ugc2hvdWxkIGJlIG1vY2tpbmcgdGhlCi0gICAgIyBiYXNlX2NvbmZpZydzIGpzb24gbW9kdWxlLCBldmVuIGluIHN1YmNsYXNzZXMuCi0gICAganNvbl9tb2NrLmxvYWQucmV0dXJuX3ZhbHVlID0gc2VsZi5vbmVfZGVwX2RpY3QKLSAgICBjb25maWcgPSBzZWxmLmNvbmZpZ19jbGFzcygnZmlsZV9wYXRoJywgd3JpdGFibGU9VHJ1ZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuR2V0Q29uZmlnRGF0YUZyb21EaWN0KHNlbGYub25lX2RlcF9kaWN0KSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5fd3JpdGFibGUpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXBlbmRlbmN5X21hbmFnZXIuUmVhZFdyaXRlRXJyb3IpOgotICAgICAgZm9yIF8gaW4gY29uZmlnLkl0ZXJEZXBlbmRlbmN5SW5mbygpOgotICAgICAgICBwYXNzCi0KLSAgQG1vY2sucGF0Y2goJ2RlcGVuZGVuY3lfbWFuYWdlci5iYXNlX2NvbmZpZy5qc29uJykKLSAgQG1vY2sucGF0Y2goJ2RlcGVuZGVuY3lfbWFuYWdlci5kZXBlbmRlbmN5X2luZm8uRGVwZW5kZW5jeUluZm8nKQotICBAbW9jay5wYXRjaCgnb3MucGF0aC5leGlzdHMnKQotICBAbW9jay5wYXRjaCgnX19idWlsdGluX18ub3BlbicpCi0gIGRlZiB0ZXN0SXRlckRlcGVuZGVuY2llcygKLSAgICAgIHNlbGYsIG9wZW5fbW9jaywgZXhpc3RzX21vY2ssIGRlcF9pbmZvX21vY2ssIGpzb25fbW9jayk6Ci0gICAganNvbl9tb2NrLmxvYWQucmV0dXJuX3ZhbHVlID0gc2VsZi5vbmVfZGVwX2RpY3QKLSAgICBjb25maWcgPSBzZWxmLmNvbmZpZ19jbGFzcygnZmlsZV9wYXRoJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuR2V0Q29uZmlnRGF0YUZyb21EaWN0KHNlbGYub25lX2RlcF9kaWN0KSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5fY29uZmlnX2RhdGEpCi0gICAgZXhwZWN0ZWRfZGVwX2luZm8gPSBbJ2RlcF9pbmZvMCcsICdkZXBfaW5mbzEnLCAnZGVwX2luZm8yJ10KLSAgICBkZXBfaW5mb19tb2NrLnNpZGVfZWZmZWN0ID0gZXhwZWN0ZWRfZGVwX2luZm8KLSAgICBleHBlY3RlZF9jYWxscyA9IFsKLSAgICAgICAgbW9jay5jYWxsKCdkZXAnLCAncGxhdDFfYXJjaDEnLCAnZmlsZV9wYXRoJywgY3NfYnVja2V0PSdidWNrZXQxJywKLSAgICAgICAgICAgICAgICAgIGNzX2hhc2g9J2hhc2gxMTEnLCBkb3dubG9hZF9wYXRoPSdkb3dubG9hZF9wYXRoMTExJywKLSAgICAgICAgICAgICAgICAgIGNzX3JlbW90ZV9wYXRoPSdjc19wYXRoMTExJywKLSAgICAgICAgICAgICAgICAgIGxvY2FsX3BhdGhzPVsnbG9jYWxfcGF0aDExMTAnLCAnbG9jYWxfcGF0aDExMTEnXSksCi0gICAgICAgIG1vY2suY2FsbCgnZGVwJywgJ3BsYXQxX2FyY2gxJywgJ2ZpbGVfcGF0aCcsIGNzX2J1Y2tldD0nYnVja2V0MScsCi0gICAgICAgICAgICAgICAgICBjc19oYXNoPSdoYXNoMTEyJywgZG93bmxvYWRfcGF0aD0nZG93bmxvYWRfcGF0aDExMicsCi0gICAgICAgICAgICAgICAgICBjc19yZW1vdGVfcGF0aD0nY3NfcGF0aDExMicsCi0gICAgICAgICAgICAgICAgICBsb2NhbF9wYXRocz1bJ2xvY2FsX3BhdGgxMTIwJywgJ2xvY2FsX3BhdGgxMTIxJ10pLAotICAgICAgICBtb2NrLmNhbGwoJ2RlcCcsICd3aW5fYXJjaDEnLCAnZmlsZV9wYXRoJywgY3NfYnVja2V0PSdidWNrZXQxJywKLSAgICAgICAgICAgICAgICAgIGNzX2hhc2g9J2hhc2gxdzEnLAotICAgICAgICAgICAgICAgICAgZG93bmxvYWRfcGF0aD1vcy5wYXRoLmpvaW4oJ2Rvd25sb2FkJywgJ3BhdGgnLCAnMXcxJyksCi0gICAgICAgICAgICAgICAgICBjc19yZW1vdGVfcGF0aD0nY3NfcGF0aDF3MScsCi0gICAgICAgICAgICAgICAgICBsb2NhbF9wYXRocz1bb3MucGF0aC5qb2luKCdkb3dubG9hZCcsICdwYXRoJywgJzF3MTAnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ2Rvd25sb2FkJywgJ3BhdGgnLCAnMXcxMScpXSldCi0gICAgZGVwc19zZWVuID0gW10KLSAgICBmb3IgZGVwX2luZm8gaW4gY29uZmlnLkl0ZXJEZXBlbmRlbmN5SW5mbygpOgotICAgICAgZGVwc19zZWVuLmFwcGVuZChkZXBfaW5mbykKLSAgICBkZXBfaW5mb19tb2NrLmFzc2VydF9jYWxsX2FyZ3MoZXhwZWN0ZWRfY2FsbHMpCi0gICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGV4cGVjdGVkX2RlcF9pbmZvLCBkZXBzX3NlZW4pCi0KLSAgQG1vY2sucGF0Y2goJ2RlcGVuZGVuY3lfbWFuYWdlci5iYXNlX2NvbmZpZy5qc29uJykKLSAgQG1vY2sucGF0Y2goJ29zLnBhdGguZXhpc3RzJykKLSAgQG1vY2sucGF0Y2goJ19fYnVpbHRpbl9fLm9wZW4nKQotICBkZWYgdGVzdEl0ZXJEZXBlbmRlbmNpZXNTdGFsZUdsb2Ioc2VsZiwgb3Blbl9tb2NrLCBleGlzdHNfbW9jaywganNvbl9tb2NrKToKLSAgICBqc29uX21vY2subG9hZC5yZXR1cm5fdmFsdWUgPSBzZWxmLm9uZV9kZXBfZGljdAotICAgIGNvbmZpZyA9IHNlbGYuY29uZmlnX2NsYXNzKCdmaWxlX3BhdGgnKQotCi0gICAgYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aAotICAgIHNob3VsZF9tYXRjaCA9IHNldChtYXAoYWJzcGF0aCwgWwotICAgICAgICAnZGVwX2FsbF90aGVfdmFyaWFibGVzXzAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1NjcnLAotICAgICAgICAnZGVwX2FsbF90aGVfdmFyaWFibGVzXzEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2NzgnXSkpCi0gICAgIyBOb3QgdGVzdGluZyBjYXNlIGNoYW5nZXMsIGJlY2F1c2UgV2luZG93cyBpcyBjYXNlLWluc2Vuc2l0aXZlLgotICAgIHNob3VsZF9ub3RfbWF0Y2ggPSBzZXQobWFwKGFic3BhdGgsIFsKLSAgICAgICAgIyBBIGNvbmZpZ3VyYXRpb24gdGhhdCBkb2Vzbid0IHVuemlwIHNob3VsZG4ndCBjbGVhciBhbnkgc3RhbGUgdW56aXBzLgotICAgICAgICAnZGVwX3BsYXQxX2FyY2gxXzAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1NjcnLAotICAgICAgICAjICJIYXNoIiBjb21wb25lbnQgbGVzcyB0aGFuIDQwIGNoYXJhY3RlcnMgKG5vdCBhIHZhbGlkIFNIQTEgaGFzaCkuCi0gICAgICAgICdkZXBfYWxsX3RoZV92YXJpYWJsZXNfMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2JywKLSAgICAgICAgIyAiSGFzaCIgY29tcG9uZW50IGdyZWF0ZXIgdGhhbiA0MCBjaGFyYWN0ZXJzIChub3QgYSB2YWxpZCBTSEExIGhhc2gpLgotICAgICAgICAnZGVwX2FsbF90aGVfdmFyaWFibGVzXzAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4JywKLSAgICAgICAgIyAiSGFzaCIgY29tcG9uZW50IG5vdCBjb21wcmlzZWQgb2YgaGV4IChub3QgYSB2YWxpZCBTSEExIGhhc2gpLgotICAgICAgICAnZGVwX2FsbF90aGVfdmFyaWFibGVzXzAxMjM0NTY3ODlnZ2dnZ2cwMTIzNDU2Nzg5Z2dnZ2dnMDEyMzQ1NjcnXSkpCi0KLSAgICAjIENyZWF0ZSBhIGZha2UgZmlsZXN5c3RlbSBqdXN0IGZvciBnbG9iIHRvIHVzZQotICAgIGZha2VfZnMgPSBmYWtlX2ZpbGVzeXN0ZW0uRmFrZUZpbGVzeXN0ZW0oKQotICAgIGZha2VfZ2xvYiA9IGZha2VfZmlsZXN5c3RlbV9nbG9iLkZha2VHbG9iTW9kdWxlKGZha2VfZnMpCi0gICAgZm9yIHN0YWxlX2RpciBpbiBzZXQudW5pb24oc2hvdWxkX21hdGNoLCBzaG91bGRfbm90X21hdGNoKToKLSAgICAgIGZha2VfZnMuQ3JlYXRlRGlyZWN0b3J5KHN0YWxlX2RpcikKLSAgICAgIGZha2VfZnMuQ3JlYXRlRmlsZShvcy5wYXRoLmpvaW4oc3RhbGVfZGlyLCAnc29tZV9maWxlJykpCi0KLSAgICBmb3IgZGVwX2luZm8gaW4gY29uZmlnLkl0ZXJEZXBlbmRlbmN5SW5mbygpOgotICAgICAgaWYgZGVwX2luZm8ucGxhdGZvcm0gPT0gJ2FsbF90aGVfdmFyaWFibGVzJzoKLSAgICAgICAgY3NfaW5mbyA9IGRlcF9pbmZvLmNsb3VkX3N0b3JhZ2VfaW5mbwotICAgICAgICBhY3R1YWxfZ2xvYiA9IGNzX2luZm8uX2FyY2hpdmVfaW5mby5fc3RhbGVfdW56aXBfcGF0aF9nbG9iCi0gICAgICAgIGFjdHVhbF9tYXRjaGVzID0gc2V0KGZha2VfZ2xvYi5nbG9iKGFjdHVhbF9nbG9iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKHNob3VsZF9tYXRjaCwgYWN0dWFsX21hdGNoZXMpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyL2Nsb3VkX3N0b3JhZ2VfaW5mby5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvY2xvdWRfc3RvcmFnZV9pbmZvLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzZjMzExLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvY2xvdWRfc3RvcmFnZV9pbmZvLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGVycm5vCi1pbXBvcnQgb3MKLWltcG9ydCBzdGF0Ci0KLWZyb20gcHlfdXRpbHMgaW1wb3J0IGNsb3VkX3N0b3JhZ2UKLQotZnJvbSBkZXBlbmRlbmN5X21hbmFnZXIgaW1wb3J0IGV4Y2VwdGlvbnMKLQotY2xhc3MgQ2xvdWRTdG9yYWdlSW5mbyhvYmplY3QpOgotICBkZWYgX19pbml0X18oc2VsZiwgY3NfYnVja2V0LCBjc19oYXNoLCBkb3dubG9hZF9wYXRoLCBjc19yZW1vdGVfcGF0aCwKLSAgICAgICAgICAgICAgIHZlcnNpb25faW5fY3M9Tm9uZSwgYXJjaGl2ZV9pbmZvPU5vbmUpOgotICAgICIiIiBDb250YWluZXIgZm9yIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZG93bmxvYWQgYSBkZXBlbmRlbmN5IGZyb20KLSAgICAgICAgY2xvdWQgc3RvcmFnZS4KLQotICAgIEFyZ3M6Ci0gICAgICAgICAgY3NfYnVja2V0OiBUaGUgY2xvdWQgc3RvcmFnZSBidWNrZXQgdGhlIGRlcGVuZGVuY3kgaXMgbG9jYXRlZCBpbi4KLSAgICAgICAgICBjc19oYXNoOiBUaGUgaGFzaCBvZiB0aGUgZmlsZSBzdG9yZWQgaW4gY2xvdWQgc3RvcmFnZS4KLSAgICAgICAgICBkb3dubG9hZF9wYXRoOiBXaGVyZSB0aGUgZmlsZSBzaG91bGQgYmUgZG93bmxvYWRlZCB0by4KLSAgICAgICAgICBjc19yZW1vdGVfcGF0aDogV2hlcmUgdGhlIGZpbGUgaXMgc3RvcmVkIGluIHRoZSBjbG91ZCBzdG9yYWdlIGJ1Y2tldC4KLSAgICAgICAgICB2ZXJzaW9uX2luX2NzOiBUaGUgdmVyc2lvbiBvZiB0aGUgZmlsZSBzdG9yZWQgaW4gY2xvdWQgc3RvcmFnZS4KLSAgICAgICAgICBhcmNoaXZlX2luZm86IEFuIGluc3RhbmNlIG9mIEFyY2hpdmVJbmZvIGlmIHRoaXMgZGVwZW5kZW5jeSBpcyBhbgotICAgICAgICAgICAgICBhcmNoaXZlLiBFbHNlIE5vbmUuCi0gICAgIiIiCi0gICAgc2VsZi5fZG93bmxvYWRfcGF0aCA9IGRvd25sb2FkX3BhdGgKLSAgICBzZWxmLl9jc19yZW1vdGVfcGF0aCA9IGNzX3JlbW90ZV9wYXRoCi0gICAgc2VsZi5fY3NfYnVja2V0ID0gY3NfYnVja2V0Ci0gICAgc2VsZi5fY3NfaGFzaCA9IGNzX2hhc2gKLSAgICBzZWxmLl92ZXJzaW9uX2luX2NzID0gdmVyc2lvbl9pbl9jcwotICAgIHNlbGYuX2FyY2hpdmVfaW5mbyA9IGFyY2hpdmVfaW5mbwotICAgIGlmIG5vdCBzZWxmLl9oYXNfbWluaW11bV9kYXRhOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgICAnTm90IGVub3VnaCBpbmZvcm1hdGlvbiBzcGVjaWZpZWQgdG8gaW5pdGlhbGl6ZSBhIGNsb3VkIHN0b3JhZ2UgaW5mby4nCi0gICAgICAgICAgJyAlcycgJSBzZWxmKQotCi0gIGRlZiBEZXBlbmRlbmN5RXhpc3RzSW5DbG91ZFN0b3JhZ2Uoc2VsZik6Ci0gICAgcmV0dXJuIGNsb3VkX3N0b3JhZ2UuRXhpc3RzKHNlbGYuX2NzX2J1Y2tldCwgc2VsZi5fY3NfcmVtb3RlX3BhdGgpCi0KLSAgZGVmIEdldFJlbW90ZVBhdGgoc2VsZik6Ci0gICAgIiIiR2V0cyB0aGUgcGF0aCB0byBhIGRvd25sb2FkZWQgdmVyc2lvbiBvZiB0aGUgZGVwZW5kZW5jeS4KLQotICAgIE1heSBub3QgZG93bmxvYWQgdGhlIGZpbGUgaWYgaXQgaGFzIGFscmVhZHkgYmVlbiBkb3dubG9hZGVkLgotICAgIFdpbGwgdW56aXAgdGhlIGRvd25sb2FkZWQgZmlsZSBpZiBhIG5vbi1lbXB0eSBhcmNoaXZlX2luZm8gd2FzIHBhc3NlZCBpbiBhdAotICAgIGluaXQuCi0KLSAgICBSZXR1cm5zOiBBIHBhdGggdG8gYW4gZXhlY3V0YWJsZSB0aGF0IHdhcyBzdG9yZWQgaW4gY2xvdWRfc3RvcmFnZSwgb3IgTm9uZQotICAgICAgIGlmIG5vdCBmb3VuZC4KLQotICAgIFJhaXNlczoKLSAgICAgICAgQ3JlZGVudGlhbHNFcnJvcjogSWYgY2xvdWRfc3RvcmFnZSBjcmVkZW50aWFscyBhcmVuJ3QgY29uZmlndXJlZC4KLSAgICAgICAgUGVybWlzc2lvbkVycm9yOiBJZiBjbG91ZF9zdG9yYWdlIGNyZWRlbnRpYWxzIGFyZSBjb25maWd1cmVkLCBidXQgbm90Ci0gICAgICAgICAgICB3aXRoIGFuIGFjY291bnQgdGhhdCBoYXMgcGVybWlzc2lvbiB0byBkb3dubG9hZCB0aGUgbmVlZGVkIGZpbGUuCi0gICAgICAgIE5vdEZvdW5kRXJyb3I6IElmIHRoZSBuZWVkZWQgZmlsZSBkb2VzIG5vdCBleGlzdCB3aGVyZSBleHBlY3RlZCBpbgotICAgICAgICAgICAgY2xvdWRfc3RvcmFnZSBvciB0aGUgZG93bmxvYWRlZCB6aXAgZmlsZS4KLSAgICAgICAgU2VydmVyRXJyb3I6IElmIGFuIGludGVybmFsIHNlcnZlciBlcnJvciBpcyBoaXQgd2hpbGUgZG93bmxvYWRpbmcgdGhlCi0gICAgICAgICAgICBuZWVkZWQgZmlsZS4KLSAgICAgICAgQ2xvdWRTdG9yYWdlRXJyb3I6IElmIGFub3RoZXIgZXJyb3Igb2NjdXJlZCB3aGlsZSBkb3dubG9hZGluZyB0aGUgcmVtb3RlCi0gICAgICAgICAgICBwYXRoLgotICAgICAgICBGaWxlTm90Rm91bmRFcnJvcjogSWYgdGhlIGRvd25sb2FkIHdhcyBvdGhlcndpc2UgdW5zdWNjZXNzZnVsLgotICAgICIiIgotICAgIGlmIG5vdCBzZWxmLl9oYXNfbWluaW11bV9kYXRhOgotICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRvd25sb2FkX2RpciA9IG9zLnBhdGguZGlybmFtZShzZWxmLl9kb3dubG9hZF9wYXRoKQotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkb3dubG9hZF9kaXIpOgotICAgICAgdHJ5OgotICAgICAgICBvcy5tYWtlZGlycyhkb3dubG9hZF9kaXIpCi0gICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAjIFRoZSBsb2dpYyBhYm92ZSBpcyByYWN5LCBhbmQgb3MubWFrZWRpcnMgd2lsbCByYWlzZSBhbiBPU0Vycm9yIGlmCi0gICAgICAgICMgdGhlIGRpcmVjdG9yeSBleGlzdHMuCi0gICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgotICAgICAgICAgIHJhaXNlCi0KLSAgICBkZXBlbmRlbmN5X3BhdGggPSBzZWxmLl9kb3dubG9hZF9wYXRoCi0gICAgY2xvdWRfc3RvcmFnZS5HZXRJZkhhc2hDaGFuZ2VkKAotICAgICAgICBzZWxmLl9jc19yZW1vdGVfcGF0aCwgc2VsZi5fZG93bmxvYWRfcGF0aCwgc2VsZi5fY3NfYnVja2V0LAotICAgICAgICBzZWxmLl9jc19oYXNoKQotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXBlbmRlbmN5X3BhdGgpOgotICAgICAgcmFpc2UgZXhjZXB0aW9ucy5GaWxlTm90Rm91bmRFcnJvcihkZXBlbmRlbmN5X3BhdGgpCi0KLSAgICBpZiBzZWxmLmhhc19hcmNoaXZlX2luZm86Ci0gICAgICBkZXBlbmRlbmN5X3BhdGggPSBzZWxmLl9hcmNoaXZlX2luZm8uR2V0VW56aXBwZWRQYXRoKCkKLSAgICBlbHNlOgotICAgICAgbW9kZSA9IG9zLnN0YXQoZGVwZW5kZW5jeV9wYXRoKS5zdF9tb2RlCi0gICAgICBvcy5jaG1vZChkZXBlbmRlbmN5X3BhdGgsIG1vZGUgfCBzdGF0LlNfSVhVU1IpCi0gICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChkZXBlbmRlbmN5X3BhdGgpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiB2ZXJzaW9uX2luX2NzKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl92ZXJzaW9uX2luX2NzCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBfaGFzX21pbmltdW1fZGF0YShzZWxmKToKLSAgICByZXR1cm4gYWxsKFtzZWxmLl9jc19idWNrZXQsIHNlbGYuX2NzX3JlbW90ZV9wYXRoLCBzZWxmLl9kb3dubG9hZF9wYXRoLAotICAgICAgICAgICAgICAgIHNlbGYuX2NzX2hhc2hdKQotCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBoYXNfYXJjaGl2ZV9pbmZvKHNlbGYpOgotICAgIHJldHVybiBib29sKHNlbGYuX2FyY2hpdmVfaW5mbykKLQotICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgcmV0dXJuICgKLSAgICAgICAgJ0Nsb3VkU3RvcmFnZUluZm8oZG93bmxvYWRfcGF0aD0lcywgY3NfcmVtb3RlX3BhdGg9JXMsIGNzX2J1Y2tldD0lcywgJwotICAgICAgICAnY3NfaGFzaD0lcywgdmVyc2lvbl9pbl9jcz0lcywgYXJjaGl2ZV9pbmZvPSVzKScgJSAoCi0gICAgICAgICAgICBzZWxmLl9kb3dubG9hZF9wYXRoLCBzZWxmLl9jc19yZW1vdGVfcGF0aCwgc2VsZi5fY3NfYnVja2V0LAotICAgICAgICAgICAgc2VsZi5fY3NfaGFzaCwgc2VsZi5fdmVyc2lvbl9pbl9jcywgc2VsZi5fYXJjaGl2ZV9pbmZvKSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvY2xvdWRfc3RvcmFnZV9pbmZvX3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9jbG91ZF9zdG9yYWdlX2luZm9fdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5OWNkNTAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9jbG91ZF9zdG9yYWdlX2luZm9fdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3MKLWltcG9ydCBzdGF0Ci1pbXBvcnQgdW5pdHRlc3QKLQotaW1wb3J0IG1vY2sKLWZyb20gcHlmYWtlZnMgaW1wb3J0IGZha2VfZmlsZXN5c3RlbV91bml0dGVzdAotZnJvbSBweV91dGlscyBpbXBvcnQgY2xvdWRfc3RvcmFnZQotCi1mcm9tIGRlcGVuZGVuY3lfbWFuYWdlciBpbXBvcnQgYXJjaGl2ZV9pbmZvCi1mcm9tIGRlcGVuZGVuY3lfbWFuYWdlciBpbXBvcnQgY2xvdWRfc3RvcmFnZV9pbmZvCi1mcm9tIGRlcGVuZGVuY3lfbWFuYWdlciBpbXBvcnQgZXhjZXB0aW9ucwotCi1jbGFzcyBDbG91ZFN0b3JhZ2VJbmZvVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gIGRlZiB0ZXN0SW5pdENsb3VkU3RvcmFnZUluZm9FcnJvcnMoc2VsZik6Ci0gICAgIyBNdXN0IHNwZWNpZnkgY2xvdWQgc3RvcmFnZSBpbmZvcm1hdGlvbiBhdG9taWNhbGx5LgotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNsb3VkX3N0b3JhZ2VfaW5mby5DbG91ZFN0b3JhZ2VJbmZvLAotICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2xvdWRfc3RvcmFnZV9pbmZvLkNsb3VkU3RvcmFnZUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgJ2NzX2J1Y2tldCcsIE5vbmUsIE5vbmUsIE5vbmUpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2xvdWRfc3RvcmFnZV9pbmZvLkNsb3VkU3RvcmFnZUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgTm9uZSwgJ2NzX2hhc2gnLCBOb25lLCBOb25lKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNsb3VkX3N0b3JhZ2VfaW5mby5DbG91ZFN0b3JhZ2VJbmZvLAotICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsICdkb3dubG9hZF9wYXRoJywgTm9uZSkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjbG91ZF9zdG9yYWdlX2luZm8uQ2xvdWRTdG9yYWdlSW5mbywKLSAgICAgICAgICAgICAgICAgICAgICBOb25lLCBOb25lLCBOb25lLCAnY3NfcmVtb3RlX3BhdGgnKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNsb3VkX3N0b3JhZ2VfaW5mby5DbG91ZFN0b3JhZ2VJbmZvLAotICAgICAgICAgICAgICAgICAgICAgIE5vbmUsICdjc19oYXNoJywgJ2Rvd25sb2FkX3BhdGgnLCAnY3NfcmVtb3RlX3BhdGgnKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNsb3VkX3N0b3JhZ2VfaW5mby5DbG91ZFN0b3JhZ2VJbmZvLAotICAgICAgICAgICAgICAgICAgICAgICdjc19idWNrZXQnLCBOb25lLCAnZG93bmxvYWRfcGF0aCcsICdjc19yZW1vdGVfcGF0aCcpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2xvdWRfc3RvcmFnZV9pbmZvLkNsb3VkU3RvcmFnZUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgJ2NzX2J1Y2tldCcsICdjc19oYXNoJywgTm9uZSwgJ2NzX3JlbW90ZV9wYXRoJykKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjbG91ZF9zdG9yYWdlX2luZm8uQ2xvdWRTdG9yYWdlSW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAnY3NfYnVja2V0JywgJ2NzX2hhc2gnLCAnZG93bmxvYWRfcGF0aCcsIE5vbmUpCi0KLSAgZGVmIHRlc3RJbml0V2l0aFZlcnNpb24oc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgIFZhbHVlRXJyb3IsIGNsb3VkX3N0b3JhZ2VfaW5mby5DbG91ZFN0b3JhZ2VJbmZvLCBOb25lLCBOb25lLCBOb25lLAotICAgICAgICAnY3NfcmVtb3RlX3BhdGgnLCB2ZXJzaW9uX2luX2NzPSd2ZXJzaW9uX2luX2NzJykKLSAgICBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgVmFsdWVFcnJvciwgY2xvdWRfc3RvcmFnZV9pbmZvLkNsb3VkU3RvcmFnZUluZm8sIE5vbmUsICdjc19oYXNoJywKLSAgICAgICAgJ2Rvd25sb2FkX3BhdGgnLCAnY3NfcmVtb3RlX3BhdGgnLCB2ZXJzaW9uX2luX2NzPSd2ZXJzaW9uX2luX2NzJykKLQotICAgIGNzX2luZm8gPSBjbG91ZF9zdG9yYWdlX2luZm8uQ2xvdWRTdG9yYWdlSW5mbygKLSAgICAgICAgJ2NzX2J1Y2tldCcsICdjc19oYXNoJywgJ2Rvd25sb2FkX3BhdGgnLCAnY3NfcmVtb3RlX3BhdGgnLAotICAgICAgICB2ZXJzaW9uX2luX2NzPSd2ZXJzaW9uX2luX2NzJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdjc19oYXNoJywgY3NfaW5mby5fY3NfaGFzaCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdjc19idWNrZXQnLCBjc19pbmZvLl9jc19idWNrZXQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnY3NfcmVtb3RlX3BhdGgnLCBjc19pbmZvLl9jc19yZW1vdGVfcGF0aCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdkb3dubG9hZF9wYXRoJywgY3NfaW5mby5fZG93bmxvYWRfcGF0aCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCd2ZXJzaW9uX2luX2NzJywgY3NfaW5mby5fdmVyc2lvbl9pbl9jcykKLQotICBkZWYgdGVzdEluaXRXaXRoQXJjaGl2ZUluZm9FcnJvcnMoc2VsZik6Ci0gICAgemlwX2luZm8gPSBhcmNoaXZlX2luZm8uQXJjaGl2ZUluZm8oCi0gICAgICAgICdkb3dubG9hZF9wYXRoJywgJ3VuemlwX2xvY2F0aW9uJywgJ3BhdGhfd2l0aGluX2FyY2hpdmUnKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICBWYWx1ZUVycm9yLCBjbG91ZF9zdG9yYWdlX2luZm8uQ2xvdWRTdG9yYWdlSW5mbywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwKLSAgICAgICAgYXJjaGl2ZV9pbmZvPXppcF9pbmZvKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICBWYWx1ZUVycm9yLCBjbG91ZF9zdG9yYWdlX2luZm8uQ2xvdWRTdG9yYWdlSW5mbywgTm9uZSwgTm9uZSwgTm9uZSwKLSAgICAgICAgJ2NzX3JlbW90ZV9wYXRoJywgYXJjaGl2ZV9pbmZvPXppcF9pbmZvKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICBWYWx1ZUVycm9yLCBjbG91ZF9zdG9yYWdlX2luZm8uQ2xvdWRTdG9yYWdlSW5mbywgJ2NzX2J1Y2tldCcsICdjc19oYXNoJywKLSAgICAgICAgTm9uZSwgJ2NzX3JlbW90ZV9wYXRoJywgYXJjaGl2ZV9pbmZvPXppcF9pbmZvKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNsb3VkX3N0b3JhZ2VfaW5mby5DbG91ZFN0b3JhZ2VJbmZvLAotICAgICAgICAgICAgICAgICAgICAgICdjc19idWNrZXQnLCAnY3NfaGFzaCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ2NzX3JlbW90ZV9wYXRoJywgTm9uZSwgdmVyc2lvbl9pbl9jcz0ndmVyc2lvbicsCi0gICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZV9pbmZvPXppcF9pbmZvKQotCi0KLSAgZGVmIHRlc3RJbml0V2l0aEFyY2hpdmVJbmZvKHNlbGYpOgotICAgIHppcF9pbmZvID0gYXJjaGl2ZV9pbmZvLkFyY2hpdmVJbmZvKAotICAgICAgICAnZG93bmxvYWRfcGF0aCcsICd1bnppcF9sb2NhdGlvbicsICdwYXRoX3dpdGhpbl9hcmNoaXZlJykKLSAgICBjc19pbmZvID0gY2xvdWRfc3RvcmFnZV9pbmZvLkNsb3VkU3RvcmFnZUluZm8oCi0gICAgICAgICdjc19idWNrZXQnLCAnY3NfaGFzaCcsICdkb3dubG9hZF9wYXRoJywgJ2NzX3JlbW90ZV9wYXRoJywKLSAgICAgICAgYXJjaGl2ZV9pbmZvPXppcF9pbmZvKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NzX2hhc2gnLCBjc19pbmZvLl9jc19oYXNoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NzX2J1Y2tldCcsIGNzX2luZm8uX2NzX2J1Y2tldCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdjc19yZW1vdGVfcGF0aCcsIGNzX2luZm8uX2NzX3JlbW90ZV9wYXRoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Rvd25sb2FkX3BhdGgnLCBjc19pbmZvLl9kb3dubG9hZF9wYXRoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwX2luZm8sIGNzX2luZm8uX2FyY2hpdmVfaW5mbykKLSAgICBzZWxmLmFzc2VydEZhbHNlKGNzX2luZm8uX3ZlcnNpb25faW5fY3MpCi0KLSAgZGVmIHRlc3RJbml0V2l0aFZlcnNpb25BbmRBcmNoaXZlSW5mbyhzZWxmKToKLSAgICB6aXBfaW5mbyA9IGFyY2hpdmVfaW5mby5BcmNoaXZlSW5mbygKLSAgICAgICAgJ2Rvd25sb2FkX3BhdGgnLCAndW56aXBfbG9jYXRpb24nLCAncGF0aF93aXRoaW5fYXJjaGl2ZScpCi0gICAgY3NfaW5mbyA9IGNsb3VkX3N0b3JhZ2VfaW5mby5DbG91ZFN0b3JhZ2VJbmZvKAotICAgICAgICAnY3NfYnVja2V0JywgJ2NzX2hhc2gnLCAnZG93bmxvYWRfcGF0aCcsCi0gICAgICAgICdjc19yZW1vdGVfcGF0aCcsIHZlcnNpb25faW5fY3M9J3ZlcnNpb25faW5fY3MnLAotICAgICAgICBhcmNoaXZlX2luZm89emlwX2luZm8pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnY3NfaGFzaCcsIGNzX2luZm8uX2NzX2hhc2gpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnY3NfYnVja2V0JywgY3NfaW5mby5fY3NfYnVja2V0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NzX3JlbW90ZV9wYXRoJywgY3NfaW5mby5fY3NfcmVtb3RlX3BhdGgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnZG93bmxvYWRfcGF0aCcsIGNzX2luZm8uX2Rvd25sb2FkX3BhdGgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBfaW5mbywgY3NfaW5mby5fYXJjaGl2ZV9pbmZvKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3ZlcnNpb25faW5fY3MnLCBjc19pbmZvLl92ZXJzaW9uX2luX2NzKQotCi0gIGRlZiB0ZXN0SW5pdE1pbmltdW1DbG91ZFN0b3JhZ2VJbmZvKHNlbGYpOgotICAgIGNzX2luZm8gPSBjbG91ZF9zdG9yYWdlX2luZm8uQ2xvdWRTdG9yYWdlSW5mbygKLSAgICAgICAgJ2NzX2J1Y2tldCcsCi0gICAgICAgICdjc19oYXNoJywgJ2Rvd25sb2FkX3BhdGgnLAotICAgICAgICAnY3NfcmVtb3RlX3BhdGgnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NzX2hhc2gnLCBjc19pbmZvLl9jc19oYXNoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NzX2J1Y2tldCcsIGNzX2luZm8uX2NzX2J1Y2tldCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdjc19yZW1vdGVfcGF0aCcsIGNzX2luZm8uX2NzX3JlbW90ZV9wYXRoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Rvd25sb2FkX3BhdGgnLCBjc19pbmZvLl9kb3dubG9hZF9wYXRoKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3NfaW5mby5fdmVyc2lvbl9pbl9jcykKLSAgICBzZWxmLmFzc2VydEZhbHNlKGNzX2luZm8uX2FyY2hpdmVfaW5mbykKLQotCi1jbGFzcyBUZXN0R2V0UmVtb3RlUGF0aChmYWtlX2ZpbGVzeXN0ZW1fdW5pdHRlc3QuVGVzdENhc2UpOgotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5zZXRVcFB5ZmFrZWZzKCkKLSAgICBzZWxmLmNvbmZpZ19wYXRoID0gJy90ZXN0L2RlcF9jb25maWcuanNvbicKLSAgICBzZWxmLmZzLkNyZWF0ZUZpbGUoc2VsZi5jb25maWdfcGF0aCwgY29udGVudHM9J3t9JykKLSAgICBzZWxmLmRvd25sb2FkX3BhdGggPSAnL2Zvby9kb3dubG9hZF9wYXRoJwotICAgIHNlbGYuZnMuQ3JlYXRlRmlsZSgKLSAgICAgICAgc2VsZi5kb3dubG9hZF9wYXRoLCBjb250ZW50cz0nMTAxMDExMCcsIHN0X21vZGU9c3RhdC5TX0lXT1RIKQotICAgIHNlbGYuY3NfaW5mbyA9IGNsb3VkX3N0b3JhZ2VfaW5mby5DbG91ZFN0b3JhZ2VJbmZvKAotICAgICAgICAnY3NfYnVja2V0JywgJ2NzX2hhc2gnLCBzZWxmLmRvd25sb2FkX3BhdGgsICdjc19yZW1vdGVfcGF0aCcsCi0gICAgICAgIHZlcnNpb25faW5fY3M9JzEuMi4zLjQnLCkKLQotICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgc2VsZi50ZWFyRG93blB5ZmFrZWZzKCkKLQotICBAbW9jay5wYXRjaCgKLSAgICAgICdweV91dGlscy5jbG91ZF9zdG9yYWdlLkdldElmSGFzaENoYW5nZWQnKQotICBkZWYgdGVzdEdldFJlbW90ZVBhdGhOb0FyY2hpdmUoc2VsZiwgY3NfZ2V0X21vY2spOgotICAgIGRlZiBfR2V0SWZIYXNoQ2hhbmdlZE1vY2soY3NfcGF0aCwgZG93bmxvYWRfcGF0aCwgYnVja2V0LCBmaWxlX2hhc2gpOgotICAgICAgZGVsIGNzX3BhdGgsIGJ1Y2tldCwgZmlsZV9oYXNoCi0gICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZG93bmxvYWRfcGF0aCk6Ci0gICAgICAgIHNlbGYuZnMuQ3JlYXRlRmlsZShkb3dubG9hZF9wYXRoLCBjb250ZW50cz0nMTAxMDAwMTAxMDEwMTAxMDExMDEwMScpCi0gICAgY3NfZ2V0X21vY2suc2lkZV9lZmZlY3QgPSBfR2V0SWZIYXNoQ2hhbmdlZE1vY2sKLSAgICAjIEFsbCBvZiB0aGUgbmVlZGVkIGluZm9ybWF0aW9uIGlzIGdpdmVuLCBhbmQgdGhlIGRvd25sb2FkZWQgcGF0aCBleGlzdHMKLSAgICAjIGFmdGVyIGNhbGxpbmcgY2xvdWQgc3RvcmFnZS4KLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICBvcy5wYXRoLmFic3BhdGgoc2VsZi5kb3dubG9hZF9wYXRoKSwKLSAgICAgICAgc2VsZi5jc19pbmZvLkdldFJlbW90ZVBhdGgoKSkKLSAgICBzZWxmLmFzc2VydFRydWUob3Muc3RhdChzZWxmLmRvd25sb2FkX3BhdGgpLnN0X21vZGUgJiBzdGF0LlNfSVhVU1IpCi0KLSAgICAjIEFsbCBvZiB0aGUgbmVlZGVkIGluZm9ybWF0aW9uIGlzIGdpdmVuLCBidXQgdGhlIGRvd25sb2FkZWQgcGF0aCBkb2Vzbid0Ci0gICAgIyBleGlzdHMgYWZ0ZXIgY2FsbGluZyBjbG91ZCBzdG9yYWdlLgotICAgIHNlbGYuZnMuUmVtb3ZlT2JqZWN0KHNlbGYuZG93bmxvYWRfcGF0aCkKLSAgICBjc19nZXRfbW9jay5zaWRlX2VmZmVjdCA9IFtUcnVlXQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICBleGNlcHRpb25zLkZpbGVOb3RGb3VuZEVycm9yLCBzZWxmLmNzX2luZm8uR2V0UmVtb3RlUGF0aCkKLQotICBAbW9jay5wYXRjaCgKLSAgICAgICdkZXBlbmRlbmN5X21hbmFnZXIuZGVwZW5kZW5jeV9tYW5hZ2VyX3V0aWwuVW56aXBBcmNoaXZlJykKLSAgQG1vY2sucGF0Y2goCi0gICAgICAnZGVwZW5kZW5jeV9tYW5hZ2VyLmNsb3VkX3N0b3JhZ2VfaW5mby5jbG91ZF9zdG9yYWdlLkdldElmSGFzaENoYW5nZWQnKSAjIHB5bGludDogZGlzYWJsZT1saW5lLXRvby1sb25nCi0gIGRlZiB0ZXN0R2V0UmVtb3RlUGF0aFdpdGhBcmNoaXZlKHNlbGYsIGNzX2dldF9tb2NrLCB1bnppcF9tb2NrKToKLSAgICBkZWYgX0dldElmSGFzaENoYW5nZWRNb2NrKGNzX3BhdGgsIGRvd25sb2FkX3BhdGgsIGJ1Y2tldCwgZmlsZV9oYXNoKToKLSAgICAgIGRlbCBjc19wYXRoLCBidWNrZXQsIGZpbGVfaGFzaAotICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRvd25sb2FkX3BhdGgpOgotICAgICAgICBzZWxmLmZzLkNyZWF0ZUZpbGUoZG93bmxvYWRfcGF0aCwgY29udGVudHM9JzEwMTAwMDEwMTAxMDEwMTAxMTAxMDEnKQotICAgIGNzX2dldF9tb2NrLnNpZGVfZWZmZWN0ID0gX0dldElmSGFzaENoYW5nZWRNb2NrCi0KLSAgICB1bnppcF9wYXRoID0gb3MucGF0aC5qb2luKAotICAgICAgICBvcy5wYXRoLmRpcm5hbWUoc2VsZi5kb3dubG9hZF9wYXRoKSwgJ3VuemlwX2RpcicpCi0gICAgcGF0aF93aXRoaW5fYXJjaGl2ZSA9IG9zLnBhdGguam9pbigncGF0aCcsICd3aXRoaW4nLCAnYXJjaGl2ZScpCi0gICAgZGVwX3BhdGggPSBvcy5wYXRoLmpvaW4odW56aXBfcGF0aCwgcGF0aF93aXRoaW5fYXJjaGl2ZSkKLSAgICBkZWYgX1VuemlwRmlsZU1vY2soYXJjaGl2ZV9maWxlLCB1bnppcF9sb2NhdGlvbiwgdG1wX2xvY2F0aW9uPU5vbmUpOgotICAgICAgZGVsIGFyY2hpdmVfZmlsZSwgdG1wX2xvY2F0aW9uCi0gICAgICBzZWxmLmZzLkNyZWF0ZUZpbGUoZGVwX3BhdGgpCi0gICAgICBzZWxmLmZzLkNyZWF0ZUZpbGUob3MucGF0aC5qb2luKHVuemlwX2xvY2F0aW9uLCAnZXh0cmEnLCAncGF0aCcpKQotICAgICAgc2VsZi5mcy5DcmVhdGVGaWxlKG9zLnBhdGguam9pbih1bnppcF9sb2NhdGlvbiwgJ2Fub3RoZXJfZXh0cmFfcGF0aCcpKQotICAgIHVuemlwX21vY2suc2lkZV9lZmZlY3QgPSBfVW56aXBGaWxlTW9jawotCi0gICAgIyBDcmVhdGUgYSBzdGFsZSBkaXJlY3RvcnkgdGhhdCdzIGV4cGVjdGVkIHRvIGdldCBkZWxldGVkCi0gICAgc3RhbGVfdW56aXBfcGF0aF9nbG9iID0gb3MucGF0aC5qb2luKAotICAgICAgICBvcy5wYXRoLmRpcm5hbWUoc2VsZi5kb3dubG9hZF9wYXRoKSwgJ3VuemlwX2Rpcl8qJykKLSAgICBzdGFsZV9wYXRoID0gb3MucGF0aC5qb2luKAotICAgICAgICBvcy5wYXRoLmRpcm5hbWUoc2VsZi5kb3dubG9hZF9wYXRoKSwgJ3VuemlwX2Rpcl9zdGFsZScpCi0gICAgc2VsZi5mcy5DcmVhdGVEaXJlY3Rvcnkoc3RhbGVfcGF0aCkKLSAgICBzZWxmLmZzLkNyZWF0ZUZpbGUob3MucGF0aC5qb2luKHN0YWxlX3BhdGgsICdzb21lX2ZpbGUnKSkKLQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoZGVwX3BhdGgpKQotICAgIHppcF9pbmZvID0gYXJjaGl2ZV9pbmZvLkFyY2hpdmVJbmZvKAotICAgICAgICBzZWxmLmRvd25sb2FkX3BhdGgsIHVuemlwX3BhdGgsIHBhdGhfd2l0aGluX2FyY2hpdmUsCi0gICAgICAgIHN0YWxlX3VuemlwX3BhdGhfZ2xvYikKLSAgICBzZWxmLmNzX2luZm8gPSBjbG91ZF9zdG9yYWdlX2luZm8uQ2xvdWRTdG9yYWdlSW5mbygKLSAgICAgICAgJ2NzX2J1Y2tldCcsICdjc19oYXNoJywgc2VsZi5kb3dubG9hZF9wYXRoLCAnY3NfcmVtb3RlX3BhdGgnLAotICAgICAgICB2ZXJzaW9uX2luX2NzPScxLjIuMy40JywgYXJjaGl2ZV9pbmZvPXppcF9pbmZvKQotCi0gICAgc2VsZi5hc3NlcnRGYWxzZSh1bnppcF9tb2NrLmNhbGxlZCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICBvcy5wYXRoLmFic3BhdGgoZGVwX3BhdGgpLAotICAgICAgICBzZWxmLmNzX2luZm8uR2V0UmVtb3RlUGF0aCgpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhkZXBfcGF0aCkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHN0YXQuU19JTU9ERShvcy5zdGF0KG9zLnBhdGguYWJzcGF0aChkZXBfcGF0aCkpLnN0X21vZGUpICYKLSAgICAgICAgICAgICAgICAgICAgKHN0YXQuU19JUlVTUiB8IHN0YXQuU19JV1VTUiB8IHN0YXQuU19JWFVTUikpCi0gICAgdW56aXBfbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChzZWxmLmRvd25sb2FkX3BhdGgsIHVuemlwX3BhdGgpCi0KLSAgICAjIFN0YWxlIGRpcmVjdG9yeSBzaG91bGQgaGF2ZSBiZWVuIGRlbGV0ZWQKLSAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHN0YWxlX3BhdGgpKQotCi0gICAgIyBTaG91bGQgbm90IG5lZWQgdG8gdW56aXAgYSBzZWNvbmQgdGltZSwgYnV0IHNob3VsZCByZXR1cm4gdGhlIHNhbWUgcGF0aC4KLSAgICB1bnppcF9tb2NrLnJlc2V0X21vY2soKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhkZXBfcGF0aCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgb3MucGF0aC5hYnNwYXRoKGRlcF9wYXRoKSwKLSAgICAgICAgc2VsZi5jc19pbmZvLkdldFJlbW90ZVBhdGgoKSkKLSAgICBzZWxmLmFzc2VydFRydWUoc3RhdC5TX0lNT0RFKG9zLnN0YXQob3MucGF0aC5hYnNwYXRoKGRlcF9wYXRoKSkuc3RfbW9kZSkgJgotICAgICAgICAgICAgICAgICAgICAoc3RhdC5TX0lSVVNSIHwgc3RhdC5TX0lXVVNSIHwgc3RhdC5TX0lYVVNSKSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKHVuemlwX21vY2suY2FsbGVkKQotCi0KLSAgQG1vY2sucGF0Y2goCi0gICAgICAncHlfdXRpbHMuY2xvdWRfc3RvcmFnZS5HZXRJZkhhc2hDaGFuZ2VkJykKLSAgZGVmIHRlc3RHZXRSZW1vdGVQYXRoQ2xvdWRTdG9yYWdlRXJyb3JzKHNlbGYsIGNzX2dldF9tb2NrKToKLSAgICBjc19nZXRfbW9jay5zaWRlX2VmZmVjdCA9IGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlRXJyb3IKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhjbG91ZF9zdG9yYWdlLkNsb3VkU3RvcmFnZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3NfaW5mby5HZXRSZW1vdGVQYXRoKQotCi0gICAgY3NfZ2V0X21vY2suc2lkZV9lZmZlY3QgPSBjbG91ZF9zdG9yYWdlLlNlcnZlckVycm9yCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoY2xvdWRfc3RvcmFnZS5TZXJ2ZXJFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNzX2luZm8uR2V0UmVtb3RlUGF0aCkKLQotICAgIGNzX2dldF9tb2NrLnNpZGVfZWZmZWN0ID0gY2xvdWRfc3RvcmFnZS5Ob3RGb3VuZEVycm9yCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoY2xvdWRfc3RvcmFnZS5Ob3RGb3VuZEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3NfaW5mby5HZXRSZW1vdGVQYXRoKQotCi0gICAgY3NfZ2V0X21vY2suc2lkZV9lZmZlY3QgPSBjbG91ZF9zdG9yYWdlLlBlcm1pc3Npb25FcnJvcgotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNsb3VkX3N0b3JhZ2UuUGVybWlzc2lvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3NfaW5mby5HZXRSZW1vdGVQYXRoKQotCi0gICAgY3NfZ2V0X21vY2suc2lkZV9lZmZlY3QgPSBjbG91ZF9zdG9yYWdlLkNyZWRlbnRpYWxzRXJyb3IKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhjbG91ZF9zdG9yYWdlLkNyZWRlbnRpYWxzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5jc19pbmZvLkdldFJlbW90ZVBhdGgpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfaW5mby5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9pbmZvLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDJkNTdlLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9pbmZvLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotY2xhc3MgRGVwZW5kZW5jeUluZm8ob2JqZWN0KToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGRlcGVuZGVuY3ksIHBsYXRmb3JtLCBjb25maWdfcGF0aCwgbG9jYWxfcGF0aF9pbmZvPU5vbmUsCi0gICAgICAgICAgICAgICBjbG91ZF9zdG9yYWdlX2luZm89Tm9uZSk6Ci0gICAgIiIiIENvbnRhaW5lciBmb3IgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgZWFjaCBkZXBlbmRlbmN5L3BsYXRmb3JtIHBhaXIKLSAgICBpbiB0aGUgZGVwZW5kZW5jeV9tYW5hZ2VyLgotCi0gICAgQXJnczoKLSAgICAgICAgUmVxdWlyZWQ6Ci0gICAgICAgICAgZGVwZW5kZW5jeTogTmFtZSBvZiB0aGUgZGVwZW5kZW5jeS4KLSAgICAgICAgICBwbGF0Zm9ybTogTmFtZSBvZiB0aGUgcGxhdGZvcm0gdG8gYmUgcnVuIG9uLgotICAgICAgICAgIGNvbmZpZ19wYXRoOiBQYXRoIHRvIHRoZSBjb25maWdfcGF0aCB0aGlzIGluZm9ybWF0aW9uIGNhbWUgZnJvbS4gVXNlZAotICAgICAgICAgICAgICAgICAgICAgICBmb3IgZXJyb3IgbWVzc2FnZXMgdG8gaW1wcm92ZSBkZWJ1Z2dpbmcuCi0KLSAgICAgICAgT3B0aW9uYWw6Ci0gICAgICAgICAgbG9jYWxfcGF0aHM6IEEgbGlzdCBvZiBwYXRocyB0byBzZWFyY2ggaW4gb3JkZXIgZm9yIGEgbG9jYWwgZmlsZS4KLSAgICAgICAgICBjbG91ZF9zdG9yYWdlX2luZm86IEFuIGluc3RhbmNlIG9mIENsb3VkU3RvcmFnZUluZm8uCi0gICAgIiIiCi0gICAgIyBUT0RPKGFpb2xvcyk6IHVwZGF0ZSB0aGUgYWJvdmUgZG9jIHN0cmluZyBmb3IgQSkgdGhlIHVzYWdlIG9mIHppcCBmaWxlcwotICAgICMgYW5kIEIpIHN1cHBvcnRpbmcgbGlzdHMgb2YgbG9jYWxfcGF0aHMgdG8gYmUgY2hlY2tlZCBmb3IgbW9zdCByZWNlbnRseQotICAgICMgY2hhbmdlZCBmaWxlcy4KLSAgICBpZiBub3QgZGVwZW5kZW5jeSBvciBub3QgcGxhdGZvcm06Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKAotICAgICAgICAgICdNdXN0IHN1cHBseSBib3RoIGEgZGVwZW5kZW5jeSBhbmQgcGxhdGZvcm0gdG8gRGVwZW5kZW5jeUluZm8nKQotCi0gICAgc2VsZi5fZGVwZW5kZW5jeSA9IGRlcGVuZGVuY3kKLSAgICBzZWxmLl9wbGF0Zm9ybSA9IHBsYXRmb3JtCi0gICAgc2VsZi5fY29uZmlnX3BhdGhzID0gW2NvbmZpZ19wYXRoXQotICAgIHNlbGYuX2xvY2FsX3BhdGhfaW5mbyA9IGxvY2FsX3BhdGhfaW5mbwotICAgIHNlbGYuX2Nsb3VkX3N0b3JhZ2VfaW5mbyA9IGNsb3VkX3N0b3JhZ2VfaW5mbwotCi0gIGRlZiBVcGRhdGUoc2VsZiwgbmV3X2RlcF9pbmZvKToKLSAgICAiIiJBZGQgdGhlIGluZm9ybWF0aW9uIGZyb20gfG5ld19kZXBfaW5mb3wgdG8gdGhpcyBpbnN0YW5jZS4KLSAgICAiIiIKLSAgICBzZWxmLl9jb25maWdfcGF0aHMuZXh0ZW5kKG5ld19kZXBfaW5mby5jb25maWdfcGF0aHMpCi0gICAgaWYgKHNlbGYuZGVwZW5kZW5jeSAhPSBuZXdfZGVwX2luZm8uZGVwZW5kZW5jeSBvcgotICAgICAgICBzZWxmLnBsYXRmb3JtICE9IG5ld19kZXBfaW5mby5wbGF0Zm9ybSk6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKAotICAgICAgICAgICdDYW5ub3QgdXBkYXRlIERlcGVuZGVuY3lJbmZvIHdpdGggZGlmZmVyZW50IGRlcGVuZGVuY3kgb3IgcGxhdGZvcm0uJwotICAgICAgICAgICdFeGlzdGluZyBkZXA6ICVzLCBleGlzdGluZyBwbGF0Zm9ybTogJXMuIE5ldyBkZXA6ICVzLCBuZXcgcGxhdGZvcm06JwotICAgICAgICAgICclcy4gQ29uZmlnX3BhdGhzIGNvbmZsaWN0aW5nOiAlcycgJSAoCi0gICAgICAgICAgICAgIHNlbGYuZGVwZW5kZW5jeSwgc2VsZi5wbGF0Zm9ybSwgbmV3X2RlcF9pbmZvLmRlcGVuZGVuY3ksCi0gICAgICAgICAgICAgIG5ld19kZXBfaW5mby5wbGF0Zm9ybSwgc2VsZi5jb25maWdfcGF0aHMpKQotICAgIGlmIG5ld19kZXBfaW5mby5oYXNfY2xvdWRfc3RvcmFnZV9pbmZvOgotICAgICAgaWYgc2VsZi5oYXNfY2xvdWRfc3RvcmFnZV9pbmZvOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAotICAgICAgICAgICAgJ092ZXJyaWRpbmcgY2xvdWQgc3RvcmFnZSBkYXRhIGlzIG5vdCBhbGxvd2VkIHdoZW4gdXBkYXRpbmcgYSAnCi0gICAgICAgICAgICAnRGVwZW5kZW5jeUluZm8uIENvbmZsaWN0IGluIGRlcGVuZGVuY3kgJXMgb24gcGxhdGZvcm0gJXMgaW4gJwotICAgICAgICAgICAgJ2NvbmZpZ19wYXRoczogJXMuJyAlIChzZWxmLmRlcGVuZGVuY3ksIHNlbGYucGxhdGZvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnX3BhdGhzKSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHNlbGYuX2Nsb3VkX3N0b3JhZ2VfaW5mbyA9IG5ld19kZXBfaW5mby5fY2xvdWRfc3RvcmFnZV9pbmZvCi0gICAgaWYgbm90IHNlbGYuX2xvY2FsX3BhdGhfaW5mbzoKLSAgICAgIHNlbGYuX2xvY2FsX3BhdGhfaW5mbyA9IG5ld19kZXBfaW5mby5fbG9jYWxfcGF0aF9pbmZvCi0gICAgZWxzZToKLSAgICAgIHNlbGYuX2xvY2FsX3BhdGhfaW5mby5VcGRhdGUobmV3X2RlcF9pbmZvLl9sb2NhbF9wYXRoX2luZm8pCi0KLSAgZGVmIEdldFJlbW90ZVBhdGgoc2VsZik6Ci0gICAgIiIiR2V0cyB0aGUgcGF0aCB0byBhIGRvd25sb2FkZWQgdmVyc2lvbiBvZiB0aGUgZGVwZW5kZW5jeS4KLQotICAgIE1heSBub3QgZG93bmxvYWQgdGhlIGZpbGUgaWYgaXQgaGFzIGFscmVhZHkgYmVlbiBkb3dubG9hZGVkLgotICAgIFdpbGwgdW56aXAgdGhlIGRvd25sb2FkZWQgZmlsZSBpZiBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZwotICAgIHZpYSB1bnppcHBlZF9oYXNoLgotCi0gICAgUmV0dXJuczogQSBwYXRoIHRvIGFuIGV4ZWN1dGFibGUgdGhhdCB3YXMgc3RvcmVkIGluIGNsb3VkX3N0b3JhZ2UsIG9yIE5vbmUKLSAgICAgICBpZiBub3QgZm91bmQuCi0KLSAgICBSYWlzZXM6Ci0gICAgICAgIENyZWRlbnRpYWxzRXJyb3I6IElmIGNsb3VkX3N0b3JhZ2UgY3JlZGVudGlhbHMgYXJlbid0IGNvbmZpZ3VyZWQuCi0gICAgICAgIFBlcm1pc3Npb25FcnJvcjogSWYgY2xvdWRfc3RvcmFnZSBjcmVkZW50aWFscyBhcmUgY29uZmlndXJlZCwgYnV0IG5vdAotICAgICAgICAgICAgd2l0aCBhbiBhY2NvdW50IHRoYXQgaGFzIHBlcm1pc3Npb24gdG8gZG93bmxvYWQgdGhlIG5lZWRlZCBmaWxlLgotICAgICAgICBOb3RGb3VuZEVycm9yOiBJZiB0aGUgbmVlZGVkIGZpbGUgZG9lcyBub3QgZXhpc3Qgd2hlcmUgZXhwZWN0ZWQgaW4KLSAgICAgICAgICAgIGNsb3VkX3N0b3JhZ2Ugb3IgdGhlIGRvd25sb2FkZWQgemlwIGZpbGUuCi0gICAgICAgIFNlcnZlckVycm9yOiBJZiBhbiBpbnRlcm5hbCBzZXJ2ZXIgZXJyb3IgaXMgaGl0IHdoaWxlIGRvd25sb2FkaW5nIHRoZQotICAgICAgICAgICAgbmVlZGVkIGZpbGUuCi0gICAgICAgIENsb3VkU3RvcmFnZUVycm9yOiBJZiBhbm90aGVyIGVycm9yIG9jY3VyZWQgd2hpbGUgZG93bmxvYWRpbmcgdGhlIHJlbW90ZQotICAgICAgICAgICAgcGF0aC4KLSAgICAgICAgRmlsZU5vdEZvdW5kRXJyb3I6IElmIHRoZSBkb3dubG9hZCB3YXMgb3RoZXJ3aXNlIHVuc3VjY2Vzc2Z1bC4KLSAgICAiIiIKLSAgICBpZiBzZWxmLmhhc19jbG91ZF9zdG9yYWdlX2luZm86Ci0gICAgICByZXR1cm4gc2VsZi5fY2xvdWRfc3RvcmFnZV9pbmZvLkdldFJlbW90ZVBhdGgoKQotICAgIHJldHVybiBOb25lCi0KLSAgZGVmIEdldFJlbW90ZVBhdGhWZXJzaW9uKHNlbGYpOgotICAgIGlmIHNlbGYuaGFzX2Nsb3VkX3N0b3JhZ2VfaW5mbzoKLSAgICAgIHJldHVybiBzZWxmLl9jbG91ZF9zdG9yYWdlX2luZm8udmVyc2lvbl9pbl9jcwotICAgIHJldHVybiBOb25lCi0KLSAgZGVmIEdldExvY2FsUGF0aChzZWxmKToKLSAgICAiIiJHZXRzIHRoZSBwYXRoIHRvIGEgbG9jYWwgdmVyc2lvbiBvZiB0aGUgZGVwZW5kZW5jeS4KLQotICAgIFJldHVybnM6IEEgcGF0aCB0byBhIGxvY2FsIGRlcGVuZGVuY3ksIG9yIE5vbmUgaWYgbm90IGZvdW5kLgotCi0gICAgIiIiCi0gICAgaWYgc2VsZi5oYXNfbG9jYWxfcGF0aF9pbmZvOgotICAgICAgcmV0dXJuIHNlbGYuX2xvY2FsX3BhdGhfaW5mby5HZXRMb2NhbFBhdGgoKQotICAgIHJldHVybiBOb25lCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBkZXBlbmRlbmN5KHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9kZXBlbmRlbmN5Ci0KLSAgQHByb3BlcnR5Ci0gIGRlZiBwbGF0Zm9ybShzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fcGxhdGZvcm0KLQotICBAcHJvcGVydHkKLSAgZGVmIGNvbmZpZ19wYXRocyhzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fY29uZmlnX3BhdGhzCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBsb2NhbF9wYXRoX2luZm8oc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX2xvY2FsX3BhdGhfaW5mbwotCi0gIEBwcm9wZXJ0eQotICBkZWYgaGFzX2Nsb3VkX3N0b3JhZ2VfaW5mbyhzZWxmKToKLSAgICByZXR1cm4gYm9vbChzZWxmLl9jbG91ZF9zdG9yYWdlX2luZm8pCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBoYXNfbG9jYWxfcGF0aF9pbmZvKHNlbGYpOgotICAgIHJldHVybiBib29sKHNlbGYuX2xvY2FsX3BhdGhfaW5mbykKLQotICBAcHJvcGVydHkKLSAgZGVmIGNsb3VkX3N0b3JhZ2VfaW5mbyhzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fY2xvdWRfc3RvcmFnZV9pbmZvCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfaW5mb191bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9pbmZvX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTE3Y2QzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9pbmZvX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjM0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWltcG9ydCBkZXBlbmRlbmN5X21hbmFnZXIKLQotY2xhc3MgRGVwZW5kZW5jeUluZm9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgZGVmIHRlc3RJbml0UmVxdWlyZWRJbmZvKHNlbGYpOgotICAgICMgTXVzdCBoYXZlIGEgZGVwZW5kZW5jeSwgcGxhdGZvcm0gYW5kIGZpbGVfcGF0aC4KLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgTm9uZSkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgJ2RlcCcsIE5vbmUsIE5vbmUpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvLAotICAgICAgICAgICAgICAgICAgICAgIE5vbmUsICdwbGF0JywgTm9uZSkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgJ2NvbmZpZ19wYXRoJykKLSAgICAjIEVtcHR5IERlcGVuZGVuY3lJbmZvLgotICAgIGVtcHR5X2RpID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKCdkZXAnLCAncGxhdCcsICdjb25maWdfcGF0aCcpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnZGVwJywgZW1wdHlfZGkuZGVwZW5kZW5jeSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdwbGF0JywgZW1wdHlfZGkucGxhdGZvcm0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbJ2NvbmZpZ19wYXRoJ10sIGVtcHR5X2RpLmNvbmZpZ19wYXRocykKLSAgICBzZWxmLmFzc2VydEZhbHNlKGVtcHR5X2RpLmhhc19sb2NhbF9wYXRoX2luZm8pCi0gICAgc2VsZi5hc3NlcnRGYWxzZShlbXB0eV9kaS5oYXNfY2xvdWRfc3RvcmFnZV9pbmZvKQotCi0gIGRlZiB0ZXN0SW5pdExvY2FsUGF0aHMoc2VsZik6Ci0gICAgbG9jYWxfcGF0aF9pbmZvID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkxvY2FsUGF0aEluZm8oWydwYXRoMCcsICdwYXRoMSddKQotICAgIGRlcF9pbmZvID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKAotICAgICAgICAnZGVwJywgJ3BsYXRmb3JtJywgJ2NvbmZpZ19wYXRoJywgbG9jYWxfcGF0aF9pbmZvCi0gICAgICAgICkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdkZXAnLCBkZXBfaW5mby5kZXBlbmRlbmN5KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3BsYXRmb3JtJywgZGVwX2luZm8ucGxhdGZvcm0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbJ2NvbmZpZ19wYXRoJ10sIGRlcF9pbmZvLmNvbmZpZ19wYXRocykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsX3BhdGhfaW5mbywgZGVwX2luZm8uX2xvY2FsX3BhdGhfaW5mbykKLSAgICBzZWxmLmFzc2VydEZhbHNlKGRlcF9pbmZvLmhhc19jbG91ZF9zdG9yYWdlX2luZm8pCi0KLSAgZGVmIHRlc3RJbml0Q2xvdWRTdG9yYWdlSW5mbyhzZWxmKToKLSAgICBjc19pbmZvID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkNsb3VkU3RvcmFnZUluZm8oCi0gICAgICAgICdjc19idWNrZXQnLCAnY3NfaGFzaCcsICdkb3dsb2FkX3BhdGgnLCAnY3NfcmVtb3RlX3BhdGgnKQotICAgIGRlcF9pbmZvID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKAotICAgICAgICAnZGVwJywgJ3BsYXRmb3JtJywgJ2NvbmZpZ19wYXRoJywgY2xvdWRfc3RvcmFnZV9pbmZvPWNzX2luZm8pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnZGVwJywgZGVwX2luZm8uZGVwZW5kZW5jeSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdwbGF0Zm9ybScsIGRlcF9pbmZvLnBsYXRmb3JtKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydjb25maWdfcGF0aCddLCBkZXBfaW5mby5jb25maWdfcGF0aHMpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mby5oYXNfbG9jYWxfcGF0aF9pbmZvKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXBfaW5mby5oYXNfY2xvdWRfc3RvcmFnZV9pbmZvKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3NfaW5mbywgZGVwX2luZm8uX2Nsb3VkX3N0b3JhZ2VfaW5mbykKLQotICBkZWYgdGVzdEluaXRBbGxJbmZvKHNlbGYpOgotICAgIGNzX2luZm8gPSBkZXBlbmRlbmN5X21hbmFnZXIuQ2xvdWRTdG9yYWdlSW5mbygKLSAgICAgICAgJ2NzX2J1Y2tldCcsICdjc19oYXNoJywgJ2Rvd2xvYWRfcGF0aCcsICdjc19yZW1vdGVfcGF0aCcpCi0gICAgZGVwX2luZm8gPSBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8oCi0gICAgICAgICdkZXAnLCAncGxhdGZvcm0nLCAnY29uZmlnX3BhdGgnLCBjbG91ZF9zdG9yYWdlX2luZm89Y3NfaW5mbykKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdkZXAnLCBkZXBfaW5mby5kZXBlbmRlbmN5KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3BsYXRmb3JtJywgZGVwX2luZm8ucGxhdGZvcm0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbJ2NvbmZpZ19wYXRoJ10sIGRlcF9pbmZvLmNvbmZpZ19wYXRocykKLSAgICBzZWxmLmFzc2VydEZhbHNlKGRlcF9pbmZvLmhhc19sb2NhbF9wYXRoX2luZm8pCi0gICAgc2VsZi5hc3NlcnRUcnVlKGRlcF9pbmZvLmhhc19jbG91ZF9zdG9yYWdlX2luZm8pCi0KLQotICBkZWYgdGVzdFVwZGF0ZVJlcXVpcmVkQXJnc0NvbmZsaWN0cyhzZWxmKToKLSAgICBscF9pbmZvID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkxvY2FsUGF0aEluZm8oWydwYXRoMCcsICdwYXRoMiddKQotICAgIGRlcF9pbmZvMSA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbygKLSAgICAgICAgJ2RlcDEnLCAncGxhdGZvcm0xJywgJ2NvbmZpZ19wYXRoMScsIGxvY2FsX3BhdGhfaW5mbz1scF9pbmZvKQotICAgIGRlcF9pbmZvMiA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbygKLSAgICAgICAgJ2RlcDEnLCAncGxhdGZvcm0yJywgJ2NvbmZpZ19wYXRoMicsIGxvY2FsX3BhdGhfaW5mbz1scF9pbmZvKQotICAgIGRlcF9pbmZvMyA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbygKLSAgICAgICAgJ2RlcDInLCAncGxhdGZvcm0xJywgJ2NvbmZpZ19wYXRoMycsIGxvY2FsX3BhdGhfaW5mbz1scF9pbmZvKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRlcF9pbmZvMS5VcGRhdGUsIGRlcF9pbmZvMikKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXBfaW5mbzEuVXBkYXRlLCBkZXBfaW5mbzMpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGVwX2luZm8zLlVwZGF0ZSwgZGVwX2luZm8yKQotCi0gIGRlZiB0ZXN0VXBkYXRlTWluaW11bUNsb3VkU3RvcmFnZUluZm8oc2VsZik6Ci0gICAgZGVwX2luZm8xID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKAotICAgICAgICAnZGVwMScsICdwbGF0Zm9ybTEnLCAnY29uZmlnX3BhdGgxJykKLQotICAgIGNzX2luZm8yID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkNsb3VkU3RvcmFnZUluZm8oCi0gICAgICAgIGNzX2J1Y2tldD0nY3NfYnVja2V0MicsIGNzX2hhc2g9J2NzX2hhc2gyJywKLSAgICAgICAgZG93bmxvYWRfcGF0aD0nZG93bmxvYWRfcGF0aDInLCBjc19yZW1vdGVfcGF0aD0nY3NfcmVtb3RlX3BhdGgyJykKLSAgICBkZXBfaW5mbzIgPSBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8oCi0gICAgICAgICdkZXAxJywgJ3BsYXRmb3JtMScsICdjb25maWdfcGF0aDInLCBjbG91ZF9zdG9yYWdlX2luZm89Y3NfaW5mbzIpCi0KLSAgICBkZXBfaW5mbzMgPSBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8oCi0gICAgICAgICdkZXAxJywgJ3BsYXRmb3JtMScsICdjb25maWdfcGF0aDMnKQotCi0gICAgY3NfaW5mbzQgPSBkZXBlbmRlbmN5X21hbmFnZXIuQ2xvdWRTdG9yYWdlSW5mbygKLSAgICAgICAgY3NfYnVja2V0PSdjc19idWNrZXQ0JywgY3NfaGFzaD0nY3NfaGFzaDQnLAotICAgICAgICBkb3dubG9hZF9wYXRoPSdkb3dubG9hZF9wYXRoNCcsIGNzX3JlbW90ZV9wYXRoPSdjc19yZW1vdGVfcGF0aDQnKQotICAgIGRlcF9pbmZvNCA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbygKLSAgICAgICAgJ2RlcDEnLCAncGxhdGZvcm0xJywgJ2NvbmZpZ19wYXRoNCcsIGNsb3VkX3N0b3JhZ2VfaW5mbz1jc19pbmZvNCkKLQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2RlcDEnLCBkZXBfaW5mbzEuZGVwZW5kZW5jeSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdwbGF0Zm9ybTEnLCBkZXBfaW5mbzEucGxhdGZvcm0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbJ2NvbmZpZ19wYXRoMSddLCBkZXBfaW5mbzEuY29uZmlnX3BhdGhzKQotCi0gICAgZGVwX2luZm8xLlVwZGF0ZShkZXBfaW5mbzIpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mbzEuaGFzX2xvY2FsX3BhdGhfaW5mbykKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdkZXAxJywgZGVwX2luZm8xLmRlcGVuZGVuY3kpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgncGxhdGZvcm0xJywgZGVwX2luZm8xLnBsYXRmb3JtKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydjb25maWdfcGF0aDEnLCAnY29uZmlnX3BhdGgyJ10sIGRlcF9pbmZvMS5jb25maWdfcGF0aHMpCi0KLSAgICBjc19pbmZvID0gZGVwX2luZm8xLl9jbG91ZF9zdG9yYWdlX2luZm8KLSAgICBzZWxmLmFzc2VydEVxdWFsKGNzX2luZm8sIGNzX2luZm8yKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NzX2J1Y2tldDInLCBjc19pbmZvLl9jc19idWNrZXQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnY3NfaGFzaDInLCBjc19pbmZvLl9jc19oYXNoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Rvd25sb2FkX3BhdGgyJywgY3NfaW5mby5fZG93bmxvYWRfcGF0aCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdjc19yZW1vdGVfcGF0aDInLCBjc19pbmZvLl9jc19yZW1vdGVfcGF0aCkKLQotICAgIGRlcF9pbmZvMS5VcGRhdGUoZGVwX2luZm8zKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2RlcDEnLCBkZXBfaW5mbzEuZGVwZW5kZW5jeSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdwbGF0Zm9ybTEnLCBkZXBfaW5mbzEucGxhdGZvcm0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbJ2NvbmZpZ19wYXRoMScsICdjb25maWdfcGF0aDInLCAnY29uZmlnX3BhdGgzJ10sCi0gICAgICAgICAgICAgICAgICAgICBkZXBfaW5mbzEuY29uZmlnX3BhdGhzKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm8xLmhhc19sb2NhbF9wYXRoX2luZm8pCi0gICAgY3NfaW5mbyA9IGRlcF9pbmZvMS5fY2xvdWRfc3RvcmFnZV9pbmZvCi0gICAgc2VsZi5hc3NlcnRFcXVhbChjc19pbmZvLCBjc19pbmZvMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdjc19idWNrZXQyJywgY3NfaW5mby5fY3NfYnVja2V0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NzX2hhc2gyJywgY3NfaW5mby5fY3NfaGFzaCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdkb3dubG9hZF9wYXRoMicsIGNzX2luZm8uX2Rvd25sb2FkX3BhdGgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnY3NfcmVtb3RlX3BhdGgyJywgY3NfaW5mby5fY3NfcmVtb3RlX3BhdGgpCi0KLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXBfaW5mbzEuVXBkYXRlLCBkZXBfaW5mbzQpCi0KLSAgZGVmIHRlc3RVcGRhdGVNYXhDbG91ZFN0b3JhZ2VJbmZvKHNlbGYpOgotICAgIGRlcF9pbmZvMSA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbygKLSAgICAgICAgJ2RlcDEnLCAncGxhdGZvcm0xJywgJ2NvbmZpZ19wYXRoMScpCi0KLSAgICB6aXBfaW5mbzIgPSBkZXBlbmRlbmN5X21hbmFnZXIuQXJjaGl2ZUluZm8oCi0gICAgICAgICdhcmNoaXZlX3BhdGgyJywgJ3VuemlwX3BhdGgyJywgJ3BhdGhfd2l0aGluZ19hcmNoaXZlMicpCi0gICAgY3NfaW5mbzIgPSBkZXBlbmRlbmN5X21hbmFnZXIuQ2xvdWRTdG9yYWdlSW5mbygKLSAgICAgICAgJ2NzX2J1Y2tldDInLCAnY3NfaGFzaDInLCAnZG93bmxvYWRfcGF0aDInLCAnY3NfcmVtb3RlX3BhdGgyJywKLSAgICAgICAgdmVyc2lvbl9pbl9jcz0nMi4xLjEnLCBhcmNoaXZlX2luZm89emlwX2luZm8yKQotICAgIGRlcF9pbmZvMiA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbygKLSAgICAgICAgJ2RlcDEnLCAncGxhdGZvcm0xJywgJ2NvbmZpZ19wYXRoMicsIGNsb3VkX3N0b3JhZ2VfaW5mbz1jc19pbmZvMikKLQotICAgIGRlcF9pbmZvMyA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbygKLSAgICAgICAgJ2RlcDEnLCAncGxhdGZvcm0xJywgJ2NvbmZpZ19wYXRoMycpCi0KLSAgICB6aXBfaW5mbzQgPSBkZXBlbmRlbmN5X21hbmFnZXIuQXJjaGl2ZUluZm8oCi0gICAgICAgICdhcmNoaXZlX3BhdGg0JywgJ3VuemlwX3BhdGg0JywgJ3BhdGhfd2l0aGluZ19hcmNoaXZlNCcpCi0gICAgY3NfaW5mbzQgPSBkZXBlbmRlbmN5X21hbmFnZXIuQ2xvdWRTdG9yYWdlSW5mbygKLSAgICAgICAgJ2NzX2J1Y2tldDQnLCAnY3NfaGFzaDQnLCAnZG93bmxvYWRfcGF0aDQnLCAnY3NfcmVtb3RlX3BhdGg0JywKLSAgICAgICAgdmVyc2lvbl9pbl9jcz0nNC4yLjEnLCBhcmNoaXZlX2luZm89emlwX2luZm80KQotICAgIGRlcF9pbmZvNCA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbygKLSAgICAgICAgJ2RlcDEnLCAncGxhdGZvcm0xJywgJ2NvbmZpZ19wYXRoNCcsIGNsb3VkX3N0b3JhZ2VfaW5mbz1jc19pbmZvNCkKLQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2RlcDEnLCBkZXBfaW5mbzEuZGVwZW5kZW5jeSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdwbGF0Zm9ybTEnLCBkZXBfaW5mbzEucGxhdGZvcm0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbJ2NvbmZpZ19wYXRoMSddLCBkZXBfaW5mbzEuY29uZmlnX3BhdGhzKQotCi0gICAgZGVwX2luZm8xLlVwZGF0ZShkZXBfaW5mbzIpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mbzEuaGFzX2xvY2FsX3BhdGhfaW5mbykKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdkZXAxJywgZGVwX2luZm8xLmRlcGVuZGVuY3kpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgncGxhdGZvcm0xJywgZGVwX2luZm8xLnBsYXRmb3JtKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydjb25maWdfcGF0aDEnLCAnY29uZmlnX3BhdGgyJ10sIGRlcF9pbmZvMS5jb25maWdfcGF0aHMpCi0KLSAgICBjc19pbmZvID0gZGVwX2luZm8xLl9jbG91ZF9zdG9yYWdlX2luZm8KLSAgICBzZWxmLmFzc2VydEVxdWFsKGNzX2luZm8sIGNzX2luZm8yKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NzX2J1Y2tldDInLCBjc19pbmZvLl9jc19idWNrZXQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnY3NfaGFzaDInLCBjc19pbmZvLl9jc19oYXNoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Rvd25sb2FkX3BhdGgyJywgY3NfaW5mby5fZG93bmxvYWRfcGF0aCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdjc19yZW1vdGVfcGF0aDInLCBjc19pbmZvLl9jc19yZW1vdGVfcGF0aCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdjc19yZW1vdGVfcGF0aDInLCBjc19pbmZvLl9jc19yZW1vdGVfcGF0aCkKLQotICAgIGRlcF9pbmZvMS5VcGRhdGUoZGVwX2luZm8zKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2RlcDEnLCBkZXBfaW5mbzEuZGVwZW5kZW5jeSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdwbGF0Zm9ybTEnLCBkZXBfaW5mbzEucGxhdGZvcm0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbJ2NvbmZpZ19wYXRoMScsICdjb25maWdfcGF0aDInLCAnY29uZmlnX3BhdGgzJ10sCi0gICAgICAgICAgICAgICAgICAgICBkZXBfaW5mbzEuY29uZmlnX3BhdGhzKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm8xLmhhc19sb2NhbF9wYXRoX2luZm8pCi0gICAgY3NfaW5mbyA9IGRlcF9pbmZvMS5fY2xvdWRfc3RvcmFnZV9pbmZvCi0gICAgc2VsZi5hc3NlcnRFcXVhbChjc19pbmZvLCBjc19pbmZvMikKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdjc19idWNrZXQyJywgY3NfaW5mby5fY3NfYnVja2V0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NzX2hhc2gyJywgY3NfaW5mby5fY3NfaGFzaCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdkb3dubG9hZF9wYXRoMicsIGNzX2luZm8uX2Rvd25sb2FkX3BhdGgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnY3NfcmVtb3RlX3BhdGgyJywgY3NfaW5mby5fY3NfcmVtb3RlX3BhdGgpCi0KLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXBfaW5mbzEuVXBkYXRlLCBkZXBfaW5mbzQpCi0KLSAgZGVmIHRlc3RVcGRhdGVBbGxJbmZvKHNlbGYpOgotICAgIGxwX2luZm8xID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkxvY2FsUGF0aEluZm8oWydwYXRoMSddKQotICAgIGRlcF9pbmZvMSA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbygKLSAgICAgICAgJ2RlcDEnLCAncGxhdGZvcm0xJywgJ2NvbmZpZ19wYXRoMScsIGxvY2FsX3BhdGhfaW5mbz1scF9pbmZvMSkKLSAgICBjc19pbmZvMiA9IGRlcGVuZGVuY3lfbWFuYWdlci5DbG91ZFN0b3JhZ2VJbmZvKAotICAgICAgICBjc19idWNrZXQ9J2NzX2J1Y2tldDInLCBjc19oYXNoPSdjc19oYXNoMicsCi0gICAgICAgIGRvd25sb2FkX3BhdGg9J2Rvd25sb2FkX3BhdGgyJywgY3NfcmVtb3RlX3BhdGg9J2NzX3JlbW90ZV9wYXRoMicpCi0gICAgbHBfaW5mbzIgPSBkZXBlbmRlbmN5X21hbmFnZXIuTG9jYWxQYXRoSW5mbyhbJ3BhdGgyJ10pCi0gICAgZGVwX2luZm8yID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKAotICAgICAgICAnZGVwMScsICdwbGF0Zm9ybTEnLCAnY29uZmlnX3BhdGgyJywgbG9jYWxfcGF0aF9pbmZvPWxwX2luZm8yLAotICAgICAgICBjbG91ZF9zdG9yYWdlX2luZm89Y3NfaW5mbzIpCi0gICAgbHBfaW5mbzMgPSBkZXBlbmRlbmN5X21hbmFnZXIuTG9jYWxQYXRoSW5mbyhbJ3BhdGgzJ10pCi0gICAgZGVwX2luZm8zID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKAotICAgICAgICAnZGVwMScsICdwbGF0Zm9ybTEnLCAnY29uZmlnX3BhdGgzJywgbG9jYWxfcGF0aF9pbmZvPWxwX2luZm8zKQotICAgIGxwX2luZm80ID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkxvY2FsUGF0aEluZm8oWydwYXRoNCddKQotICAgIGNzX2luZm80ID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkNsb3VkU3RvcmFnZUluZm8oCi0gICAgICAgIGNzX2J1Y2tldD0nY3NfYnVja2V0NCcsIGNzX2hhc2g9J2NzX2hhc2g0JywKLSAgICAgICAgZG93bmxvYWRfcGF0aD0nZG93bmxvYWRfcGF0aDQnLCBjc19yZW1vdGVfcGF0aD0nY3NfcmVtb3RlX3BhdGg0JykKLSAgICBkZXBfaW5mbzQgPSBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8oCi0gICAgICAgICdkZXAxJywgJ3BsYXRmb3JtMScsICdjb25maWdfcGF0aDQnLCBsb2NhbF9wYXRoX2luZm89bHBfaW5mbzQsCi0gICAgICAgIGNsb3VkX3N0b3JhZ2VfaW5mbz1jc19pbmZvNCkKLQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXBfaW5mbzEuX2xvY2FsX3BhdGhfaW5mby5Jc1BhdGhJbkxvY2FsUGF0aHMoJ3BhdGgxJykpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mbzEuX2xvY2FsX3BhdGhfaW5mby5Jc1BhdGhJbkxvY2FsUGF0aHMoJ3BhdGgyJykpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mbzEuX2xvY2FsX3BhdGhfaW5mby5Jc1BhdGhJbkxvY2FsUGF0aHMoJ3BhdGgzJykpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mbzEuX2xvY2FsX3BhdGhfaW5mby5Jc1BhdGhJbkxvY2FsUGF0aHMoJ3BhdGg0JykpCi0KLSAgICBkZXBfaW5mbzEuVXBkYXRlKGRlcF9pbmZvMikKLSAgICBjc19pbmZvID0gZGVwX2luZm8xLl9jbG91ZF9zdG9yYWdlX2luZm8KLSAgICBzZWxmLmFzc2VydEVxdWFsKGNzX2luZm8sIGNzX2luZm8yKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NzX2J1Y2tldDInLCBjc19pbmZvLl9jc19idWNrZXQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnY3NfaGFzaDInLCBjc19pbmZvLl9jc19oYXNoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Rvd25sb2FkX3BhdGgyJywgY3NfaW5mby5fZG93bmxvYWRfcGF0aCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdjc19yZW1vdGVfcGF0aDInLCBjc19pbmZvLl9jc19yZW1vdGVfcGF0aCkKLSAgICBzZWxmLmFzc2VydFRydWUoZGVwX2luZm8xLl9sb2NhbF9wYXRoX2luZm8uSXNQYXRoSW5Mb2NhbFBhdGhzKCdwYXRoMScpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXBfaW5mbzEuX2xvY2FsX3BhdGhfaW5mby5Jc1BhdGhJbkxvY2FsUGF0aHMoJ3BhdGgyJykpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mbzEuX2xvY2FsX3BhdGhfaW5mby5Jc1BhdGhJbkxvY2FsUGF0aHMoJ3BhdGgzJykpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mbzEuX2xvY2FsX3BhdGhfaW5mby5Jc1BhdGhJbkxvY2FsUGF0aHMoJ3BhdGg0JykpCi0KLSAgICBkZXBfaW5mbzEuVXBkYXRlKGRlcF9pbmZvMykKLSAgICBjc19pbmZvID0gZGVwX2luZm8xLl9jbG91ZF9zdG9yYWdlX2luZm8KLSAgICBzZWxmLmFzc2VydEVxdWFsKGNzX2luZm8sIGNzX2luZm8yKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NzX2J1Y2tldDInLCBjc19pbmZvLl9jc19idWNrZXQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnY3NfaGFzaDInLCBjc19pbmZvLl9jc19oYXNoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Rvd25sb2FkX3BhdGgyJywgY3NfaW5mby5fZG93bmxvYWRfcGF0aCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdjc19yZW1vdGVfcGF0aDInLCBjc19pbmZvLl9jc19yZW1vdGVfcGF0aCkKLSAgICBzZWxmLmFzc2VydFRydWUoZGVwX2luZm8xLl9sb2NhbF9wYXRoX2luZm8uSXNQYXRoSW5Mb2NhbFBhdGhzKCdwYXRoMScpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXBfaW5mbzEuX2xvY2FsX3BhdGhfaW5mby5Jc1BhdGhJbkxvY2FsUGF0aHMoJ3BhdGgyJykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGRlcF9pbmZvMS5fbG9jYWxfcGF0aF9pbmZvLklzUGF0aEluTG9jYWxQYXRocygncGF0aDMnKSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGRlcF9pbmZvMS5fbG9jYWxfcGF0aF9pbmZvLklzUGF0aEluTG9jYWxQYXRocygncGF0aDQnKSkKLQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRlcF9pbmZvMS5VcGRhdGUsIGRlcF9pbmZvNCkKLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXJfdW5pdHRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlcl91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkMTdmNy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlcl91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDUyNyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAotCi1pbXBvcnQgbW9jawotCi1mcm9tIHB5ZmFrZWZzIGltcG9ydCBmYWtlX2ZpbGVzeXN0ZW1fdW5pdHRlc3QKLWZyb20gcHlfdXRpbHMgaW1wb3J0IGNsb3VkX3N0b3JhZ2UKLQotaW1wb3J0IGRlcGVuZGVuY3lfbWFuYWdlcgotZnJvbSBkZXBlbmRlbmN5X21hbmFnZXIgaW1wb3J0IGV4Y2VwdGlvbnMKLQotCi1jbGFzcyBEZXBlbmRlbmN5TWFuYWdlclRlc3QoZmFrZV9maWxlc3lzdGVtX3VuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5scF9pbmZvMDEyID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkxvY2FsUGF0aEluZm8oCi0gICAgICAgIFsncGF0aDAnLCAncGF0aDEnLCAncGF0aDInXSkKLSAgICBzZWxmLmNsb3VkX3N0b3JhZ2VfaW5mbyA9IGRlcGVuZGVuY3lfbWFuYWdlci5DbG91ZFN0b3JhZ2VJbmZvKAotICAgICAgICAnY3NfYnVja2V0JywgJ2NzX2hhc2gnLCAnZG93bmxvYWRfcGF0aCcsICdjc19yZW1vdGVfcGF0aCcpCi0KLSAgICBzZWxmLmRlcF9pbmZvID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKAotICAgICAgICAnZGVwJywgJ3BsYXRmb3JtJywgJ2NvbmZpZ19maWxlJywgbG9jYWxfcGF0aF9pbmZvPXNlbGYubHBfaW5mbzAxMiwKLSAgICAgICAgY2xvdWRfc3RvcmFnZV9pbmZvPXNlbGYuY2xvdWRfc3RvcmFnZV9pbmZvKQotICAgIHNlbGYuc2V0VXBQeWZha2VmcygpCi0KLSAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgIHNlbGYudGVhckRvd25QeWZha2VmcygpCi0KLSAgIyBUT0RPKG5lZG5ndXllbik6IGFkZCBhIHRlc3QgdGhhdCBjb25zdHJ1Y3QKLSAgIyBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeU1hbmFnZXIgZnJvbSBhIGxpc3Qgb2YgRGVwZW5kZW5jeUluZm8uCi0gIGRlZiB0ZXN0RXJyb3JJbml0KHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeU1hbmFnZXIoTm9uZSkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lNYW5hZ2VyKCdjb25maWdfZmlsZT8nKQotCi0gIGRlZiB0ZXN0SW5pdGlhbFVwZGF0ZURlcGVuZGVuY2llcyhzZWxmKToKLSAgICBkZXBfbWFuYWdlciA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5TWFuYWdlcihbXSkKLQotICAgICMgRW1wdHkgQmFzZUNvbmZpZy4KLSAgICBkZXBfbWFuYWdlci5fbG9va3VwX2RpY3QgPSB7fQotICAgIGJhc2VfY29uZmlnX21vY2sgPSBtb2NrLk1hZ2ljTW9jayhzcGVjPWRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnKQotICAgIGJhc2VfY29uZmlnX21vY2suSXRlckRlcGVuZGVuY3lJbmZvLnJldHVybl92YWx1ZSA9IGl0ZXIoW10pCi0gICAgZGVwX21hbmFnZXIuX1VwZGF0ZURlcGVuZGVuY2llcyhiYXNlX2NvbmZpZ19tb2NrKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0KQotCi0gICAgIyBPbmUgZGVwZW5kZW5jeS9wbGF0Zm9ybSBpbiBhIEJhc2VDb25maWcuCi0gICAgZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0ID0ge30KLSAgICBiYXNlX2NvbmZpZ19tb2NrID0gbW9jay5NYWdpY01vY2soc3BlYz1kZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZykKLSAgICBkZXBfaW5mbyA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKQotICAgIGRlcCA9ICdkZXBlbmRlbmN5JwotICAgIHBsYXQgPSAncGxhdGZvcm0nCi0gICAgZGVwX2luZm8uZGVwZW5kZW5jeSA9IGRlcAotICAgIGRlcF9pbmZvLnBsYXRmb3JtID0gcGxhdAotICAgIGJhc2VfY29uZmlnX21vY2suSXRlckRlcGVuZGVuY3lJbmZvLnJldHVybl92YWx1ZSA9IGl0ZXIoW2RlcF9pbmZvXSkKLSAgICBleHBlY3RlZF9sb29rdXBfZGljdCA9IHtkZXA6IHtwbGF0OiBkZXBfaW5mb319Ci0gICAgZGVwX21hbmFnZXIuX1VwZGF0ZURlcGVuZGVuY2llcyhiYXNlX2NvbmZpZ19tb2NrKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfbG9va3VwX2RpY3QsIGRlcF9tYW5hZ2VyLl9sb29rdXBfZGljdCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGRlcF9pbmZvLlVwZGF0ZS5jYWxsZWQpCi0KLSAgICAjIE9uZSBkZXBlbmRlbmN5IG11bHRpcGxlIHBsYXRmb3JtcyBpbiBhIEJhc2VDb25maWcuCi0gICAgZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0ID0ge30KLSAgICBiYXNlX2NvbmZpZ19tb2NrID0gbW9jay5NYWdpY01vY2soc3BlYz1kZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZykKLSAgICBkZXAgPSAnZGVwZW5kZW5jeScKLSAgICBwbGF0MSA9ICdwbGF0Zm9ybTEnCi0gICAgcGxhdDIgPSAncGxhdGZvcm0yJwotICAgIGRlcF9pbmZvMSA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKQotICAgIGRlcF9pbmZvMS5kZXBlbmRlbmN5ID0gZGVwCi0gICAgZGVwX2luZm8xLnBsYXRmb3JtID0gcGxhdDEKLSAgICBkZXBfaW5mbzIgPSBtb2NrLk1hZ2ljTW9jayhzcGVjPWRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbykKLSAgICBkZXBfaW5mbzIuZGVwZW5kZW5jeSA9IGRlcAotICAgIGRlcF9pbmZvMi5wbGF0Zm9ybSA9IHBsYXQyCi0gICAgYmFzZV9jb25maWdfbW9jay5JdGVyRGVwZW5kZW5jeUluZm8ucmV0dXJuX3ZhbHVlID0gaXRlcihbZGVwX2luZm8xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcF9pbmZvMl0pCi0gICAgZXhwZWN0ZWRfbG9va3VwX2RpY3QgPSB7ZGVwOiB7cGxhdDE6IGRlcF9pbmZvMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0MjogZGVwX2luZm8yfX0KLSAgICBkZXBfbWFuYWdlci5fVXBkYXRlRGVwZW5kZW5jaWVzKGJhc2VfY29uZmlnX21vY2spCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9sb29rdXBfZGljdCwgZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0KQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm8xLlVwZGF0ZS5jYWxsZWQpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mbzIuVXBkYXRlLmNhbGxlZCkKLQotICAgICMgTXVsdGlwbGUgZGVwZW5kZW5jaWVzLCBtdWx0aXBsZSBwbGF0Zm9ybXMgaW4gYSBCYXNlQ29uZmlnLgotICAgIGRlcF9tYW5hZ2VyLl9sb29rdXBfZGljdCA9IHt9Ci0gICAgYmFzZV9jb25maWdfbW9jayA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcpCi0gICAgZGVwMSA9ICdkZXBlbmRlbmN5MScKLSAgICBkZXAyID0gJ2RlcGVuZGVuY3kyJwotICAgIHBsYXQxID0gJ3BsYXRmb3JtMScKLSAgICBwbGF0MiA9ICdwbGF0Zm9ybTInCi0gICAgZGVwX2luZm8xID0gbW9jay5NYWdpY01vY2soc3BlYz1kZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8pCi0gICAgZGVwX2luZm8xLmRlcGVuZGVuY3kgPSBkZXAxCi0gICAgZGVwX2luZm8xLnBsYXRmb3JtID0gcGxhdDEKLSAgICBkZXBfaW5mbzIgPSBtb2NrLk1hZ2ljTW9jayhzcGVjPWRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbykKLSAgICBkZXBfaW5mbzIuZGVwZW5kZW5jeSA9IGRlcDEKLSAgICBkZXBfaW5mbzIucGxhdGZvcm0gPSBwbGF0MgotICAgIGRlcF9pbmZvMyA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKQotICAgIGRlcF9pbmZvMy5kZXBlbmRlbmN5ID0gZGVwMgotICAgIGRlcF9pbmZvMy5wbGF0Zm9ybSA9IHBsYXQyCi0gICAgYmFzZV9jb25maWdfbW9jay5JdGVyRGVwZW5kZW5jeUluZm8ucmV0dXJuX3ZhbHVlID0gaXRlcigKLSAgICAgICAgW2RlcF9pbmZvMSwgZGVwX2luZm8yLCBkZXBfaW5mbzNdKQotICAgIGV4cGVjdGVkX2xvb2t1cF9kaWN0ID0ge2RlcDE6IHtwbGF0MTogZGVwX2luZm8xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0MjogZGVwX2luZm8yfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXAyOiB7cGxhdDI6IGRlcF9pbmZvM319Ci0gICAgZGVwX21hbmFnZXIuX1VwZGF0ZURlcGVuZGVuY2llcyhiYXNlX2NvbmZpZ19tb2NrKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfbG9va3VwX2RpY3QsIGRlcF9tYW5hZ2VyLl9sb29rdXBfZGljdCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGRlcF9pbmZvMS5VcGRhdGUuY2FsbGVkKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm8yLlVwZGF0ZS5jYWxsZWQpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mbzMuVXBkYXRlLmNhbGxlZCkKLQotICBkZWYgdGVzdEZvbGxvd3VwVXBkYXRlRGVwZW5kZW5jaWVzTm9PdmVybGFwKHNlbGYpOgotICAgIGRlcF9tYW5hZ2VyID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lNYW5hZ2VyKFtdKQotICAgIGRlcCA9ICdkZXBlbmRlbmN5JwotICAgIGRlcDEgPSAnZGVwZW5kZW5jeTEnCi0gICAgZGVwMiA9ICdkZXBlbmRlbmN5MicKLSAgICBkZXAzID0gJ2RlcGVuZGVuY3kzJwotICAgIHBsYXQxID0gJ3BsYXRmb3JtMScKLSAgICBwbGF0MiA9ICdwbGF0Zm9ybTInCi0gICAgcGxhdDMgPSAncGxhdGZvcm0zJwotICAgIGRlcF9pbmZvX2EgPSBtb2NrLk1hZ2ljTW9jayhzcGVjPWRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbykKLSAgICBkZXBfaW5mb19hLmRlcGVuZGVuY3kgPSBkZXAxCi0gICAgZGVwX2luZm9fYS5wbGF0Zm9ybSA9IHBsYXQxCi0gICAgZGVwX2luZm9fYiA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKQotICAgIGRlcF9pbmZvX2IuZGVwZW5kZW5jeSA9IGRlcDEKLSAgICBkZXBfaW5mb19iLnBsYXRmb3JtID0gcGxhdDIKLSAgICBkZXBfaW5mb19jID0gbW9jay5NYWdpY01vY2soc3BlYz1kZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8pCi0gICAgZGVwX2luZm9fYy5kZXBlbmRlbmN5ID0gZGVwCi0gICAgZGVwX2luZm9fYy5wbGF0Zm9ybSA9IHBsYXQxCi0KLSAgICBzdGFydF9sb29rdXBfZGljdCA9IHtkZXA6IHtwbGF0MTogZGVwX2luZm9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0MjogZGVwX2luZm9fYn0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGVwMToge3BsYXQxOiBkZXBfaW5mb19jfX0KLSAgICBiYXNlX2NvbmZpZ19tb2NrID0gbW9jay5NYWdpY01vY2soc3BlYz1kZXBlbmRlbmN5X21hbmFnZXIuQmFzZUNvbmZpZykKLQotICAgICMgRW1wdHkgQmFzZUNvbmZpZy4KLSAgICBkZXBfbWFuYWdlci5fbG9va3VwX2RpY3QgPSBzdGFydF9sb29rdXBfZGljdC5jb3B5KCkKLSAgICBiYXNlX2NvbmZpZ19tb2NrLkl0ZXJEZXBlbmRlbmN5SW5mby5yZXR1cm5fdmFsdWUgPSBpdGVyKFtdKQotICAgIGRlcF9tYW5hZ2VyLl9VcGRhdGVEZXBlbmRlbmNpZXMoYmFzZV9jb25maWdfbW9jaykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0X2xvb2t1cF9kaWN0LCBkZXBfbWFuYWdlci5fbG9va3VwX2RpY3QpCi0KLSAgICAjIE9uZSBkZXBlbmRlbmN5L3BsYXRmb3JtIGluIGEgQmFzZUNvbmZpZy4KLSAgICBkZXBfbWFuYWdlci5fbG9va3VwX2RpY3QgPSBzdGFydF9sb29rdXBfZGljdC5jb3B5KCkKLSAgICBkZXBfaW5mbyA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKQotICAgIGRlcF9pbmZvLmRlcGVuZGVuY3kgPSBkZXAzCi0gICAgZGVwX2luZm8ucGxhdGZvcm0gPSBwbGF0MQotICAgIGJhc2VfY29uZmlnX21vY2suSXRlckRlcGVuZGVuY3lJbmZvLnJldHVybl92YWx1ZSA9IGl0ZXIoW2RlcF9pbmZvXSkKLSAgICBleHBlY3RlZF9sb29rdXBfZGljdCA9IHtkZXA6IHtwbGF0MTogZGVwX2luZm9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0MjogZGVwX2luZm9fYn0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwMToge3BsYXQxOiBkZXBfaW5mb19jfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXAzOiB7cGxhdDM6IGRlcF9pbmZvfX0KLQotICAgIGRlcF9tYW5hZ2VyLl9VcGRhdGVEZXBlbmRlbmNpZXMoYmFzZV9jb25maWdfbW9jaykKLSAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZXhwZWN0ZWRfbG9va3VwX2RpY3QsIGRlcF9tYW5hZ2VyLl9sb29rdXBfZGljdCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGRlcF9pbmZvLlVwZGF0ZS5jYWxsZWQpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mb19hLlVwZGF0ZS5jYWxsZWQpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mb19iLlVwZGF0ZS5jYWxsZWQpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mb19jLlVwZGF0ZS5jYWxsZWQpCi0KLSAgICAjIE9uZSBkZXBlbmRlbmN5IG11bHRpcGxlIHBsYXRmb3JtcyBpbiBhIEJhc2VDb25maWcuCi0gICAgZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0ID0gc3RhcnRfbG9va3VwX2RpY3QuY29weSgpCi0gICAgZGVwX2luZm8xID0gbW9jay5NYWdpY01vY2soc3BlYz1kZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8pCi0gICAgZGVwX2luZm8xLmRlcGVuZGVuY3kgPSBkZXAyCi0gICAgZGVwX2luZm8xLnBsYXRmb3JtID0gcGxhdDEKLSAgICBkZXBfaW5mbzIgPSBtb2NrLk1hZ2ljTW9jayhzcGVjPWRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbykKLSAgICBkZXBfaW5mbzIuZGVwZW5kZW5jeSA9IGRlcDIKLSAgICBkZXBfaW5mbzIucGxhdGZvcm0gPSBwbGF0MgotICAgIGJhc2VfY29uZmlnX21vY2suSXRlckRlcGVuZGVuY3lJbmZvLnJldHVybl92YWx1ZSA9IGl0ZXIoW2RlcF9pbmZvMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBfaW5mbzJdKQotICAgIGV4cGVjdGVkX2xvb2t1cF9kaWN0ID0ge2RlcDoge3BsYXQxOiBkZXBfaW5mb19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXQyOiBkZXBfaW5mb19ifSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXAxOiB7cGxhdDE6IGRlcF9pbmZvX2N9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcDI6IHtwbGF0MTogZGVwX2luZm8xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0MjogZGVwX2luZm8yfX0KLSAgICBkZXBfbWFuYWdlci5fVXBkYXRlRGVwZW5kZW5jaWVzKGJhc2VfY29uZmlnX21vY2spCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9sb29rdXBfZGljdCwgZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0KQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm8xLlVwZGF0ZS5jYWxsZWQpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mbzIuVXBkYXRlLmNhbGxlZCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGRlcF9pbmZvX2EuVXBkYXRlLmNhbGxlZCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGRlcF9pbmZvX2IuVXBkYXRlLmNhbGxlZCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGRlcF9pbmZvX2MuVXBkYXRlLmNhbGxlZCkKLQotICAgICMgTXVsdGlwbGUgZGVwZW5kZW5jaWVzLCBtdWx0aXBsZSBwbGF0Zm9ybXMgaW4gYSBCYXNlQ29uZmlnLgotICAgIGRlcF9tYW5hZ2VyLl9sb29rdXBfZGljdCA9IHN0YXJ0X2xvb2t1cF9kaWN0LmNvcHkoKQotICAgIGRlcDEgPSAnZGVwZW5kZW5jeTEnCi0gICAgcGxhdDEgPSAncGxhdGZvcm0xJwotICAgIHBsYXQyID0gJ3BsYXRmb3JtMicKLSAgICBkZXBfaW5mbzEgPSBtb2NrLk1hZ2ljTW9jayhzcGVjPWRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbykKLSAgICBkZXBfaW5mbzEuZGVwZW5kZW5jeSA9IGRlcDIKLSAgICBkZXBfaW5mbzEucGxhdGZvcm0gPSBwbGF0MQotICAgIGRlcF9pbmZvMiA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKQotICAgIGRlcF9pbmZvMi5kZXBlbmRlbmN5ID0gZGVwMgotICAgIGRlcF9pbmZvMi5wbGF0Zm9ybSA9IHBsYXQyCi0gICAgZGVwX2luZm8zID0gbW9jay5NYWdpY01vY2soc3BlYz1kZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8pCi0gICAgZGVwX2luZm8zLmRlcGVuZGVuY3kgPSBkZXAzCi0gICAgZGVwX2luZm8zLnBsYXRmb3JtID0gcGxhdDIKLSAgICBiYXNlX2NvbmZpZ19tb2NrLkl0ZXJEZXBlbmRlbmN5SW5mby5yZXR1cm5fdmFsdWUgPSBpdGVyKAotICAgICAgICBbZGVwX2luZm8xLCBkZXBfaW5mbzIsIGRlcF9pbmZvM10pCi0gICAgZXhwZWN0ZWRfbG9va3VwX2RpY3QgPSB7ZGVwOiB7cGxhdDE6IGRlcF9pbmZvX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdDI6IGRlcF9pbmZvX2J9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcDE6IHtwbGF0MTogZGVwX2luZm9fY30sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwMjoge3BsYXQxOiBkZXBfaW5mbzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXQyOiBkZXBfaW5mbzJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcDM6IHtwbGF0MjogZGVwX2luZm8zfX0KLSAgICBkZXBfbWFuYWdlci5fVXBkYXRlRGVwZW5kZW5jaWVzKGJhc2VfY29uZmlnX21vY2spCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9sb29rdXBfZGljdCwgZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0KQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm8xLlVwZGF0ZS5jYWxsZWQpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mbzIuVXBkYXRlLmNhbGxlZCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGRlcF9pbmZvMy5VcGRhdGUuY2FsbGVkKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm9fYS5VcGRhdGUuY2FsbGVkKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm9fYi5VcGRhdGUuY2FsbGVkKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm9fYy5VcGRhdGUuY2FsbGVkKQotCi0gICAgIyBFbnN1cmUgdGhlIHRlc3RpbmcgZGF0YSB3YXNuJ3QgY29ycnVwdGVkLgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnRfbG9va3VwX2RpY3QsCi0gICAgICAgICAgICAgICAgICAgICB7ZGVwOiB7cGxhdDE6IGRlcF9pbmZvX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdDI6IGRlcF9pbmZvX2J9LAotICAgICAgICAgICAgICAgICAgICAgIGRlcDE6IHtwbGF0MTogZGVwX2luZm9fY319KQotCi0gIGRlZiB0ZXN0Rm9sbG93dXBVcGRhdGVEZXBlbmRlbmNpZXNXaXRoQ29sbGlzaW9ucyhzZWxmKToKLSAgICBkZXBfbWFuYWdlciA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5TWFuYWdlcihbXSkKLSAgICBkZXAgPSAnZGVwZW5kZW5jeScKLSAgICBkZXAxID0gJ2RlcGVuZGVuY3kxJwotICAgIGRlcDIgPSAnZGVwZW5kZW5jeTInCi0gICAgcGxhdDEgPSAncGxhdGZvcm0xJwotICAgIHBsYXQyID0gJ3BsYXRmb3JtMicKLSAgICBkZXBfaW5mb19hID0gbW9jay5NYWdpY01vY2soc3BlYz1kZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8pCi0gICAgZGVwX2luZm9fYS5kZXBlbmRlbmN5ID0gZGVwMQotICAgIGRlcF9pbmZvX2EucGxhdGZvcm0gPSBwbGF0MQotICAgIGRlcF9pbmZvX2IgPSBtb2NrLk1hZ2ljTW9jayhzcGVjPWRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbykKLSAgICBkZXBfaW5mb19iLmRlcGVuZGVuY3kgPSBkZXAxCi0gICAgZGVwX2luZm9fYi5wbGF0Zm9ybSA9IHBsYXQyCi0gICAgZGVwX2luZm9fYyA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKQotICAgIGRlcF9pbmZvX2MuZGVwZW5kZW5jeSA9IGRlcAotICAgIGRlcF9pbmZvX2MucGxhdGZvcm0gPSBwbGF0MQotCi0gICAgc3RhcnRfbG9va3VwX2RpY3QgPSB7ZGVwOiB7cGxhdDE6IGRlcF9pbmZvX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdDI6IGRlcF9pbmZvX2J9LAotICAgICAgICAgICAgICAgICAgICAgICAgIGRlcDE6IHtwbGF0MTogZGVwX2luZm9fY319Ci0gICAgYmFzZV9jb25maWdfbW9jayA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcpCi0KLSAgICAjIE9uZSBkZXBlbmRlbmN5L3BsYXRmb3JtLgotICAgIGRlcF9tYW5hZ2VyLl9sb29rdXBfZGljdCA9IHN0YXJ0X2xvb2t1cF9kaWN0LmNvcHkoKQotICAgIGRlcF9pbmZvID0gbW9jay5NYWdpY01vY2soc3BlYz1kZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8pCi0gICAgZGVwX2luZm8uZGVwZW5kZW5jeSA9IGRlcAotICAgIGRlcF9pbmZvLnBsYXRmb3JtID0gcGxhdDEKLSAgICBiYXNlX2NvbmZpZ19tb2NrLkl0ZXJEZXBlbmRlbmN5SW5mby5yZXR1cm5fdmFsdWUgPSBpdGVyKFtkZXBfaW5mb10pCi0gICAgZXhwZWN0ZWRfbG9va3VwX2RpY3QgPSB7ZGVwOiB7cGxhdDE6IGRlcF9pbmZvX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdDI6IGRlcF9pbmZvX2J9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcDE6IHtwbGF0MTogZGVwX2luZm9fY319Ci0KLSAgICBkZXBfbWFuYWdlci5fVXBkYXRlRGVwZW5kZW5jaWVzKGJhc2VfY29uZmlnX21vY2spCi0gICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGV4cGVjdGVkX2xvb2t1cF9kaWN0LCBkZXBfbWFuYWdlci5fbG9va3VwX2RpY3QpCi0gICAgZGVwX2luZm9fYS5VcGRhdGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZGVwX2luZm8pCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mby5VcGRhdGUuY2FsbGVkKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm9fYi5VcGRhdGUuY2FsbGVkKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm9fYy5VcGRhdGUuY2FsbGVkKQotICAgIGRlcF9pbmZvX2EucmVzZXRfbW9jaygpCi0gICAgZGVwX2luZm9fYi5yZXNldF9tb2NrKCkKLSAgICBkZXBfaW5mb19jLnJlc2V0X21vY2soKQotCi0gICAgIyBPbmUgZGVwZW5kZW5jeSBtdWx0aXBsZSBwbGF0Zm9ybXMgaW4gYSBCYXNlQ29uZmlnLgotICAgIGRlcF9tYW5hZ2VyLl9sb29rdXBfZGljdCA9IHN0YXJ0X2xvb2t1cF9kaWN0LmNvcHkoKQotICAgIGRlcF9pbmZvMSA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKQotICAgIGRlcF9pbmZvMS5kZXBlbmRlbmN5ID0gZGVwMQotICAgIGRlcF9pbmZvMS5wbGF0Zm9ybSA9IHBsYXQxCi0gICAgZGVwX2luZm8yID0gbW9jay5NYWdpY01vY2soc3BlYz1kZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8pCi0gICAgZGVwX2luZm8yLmRlcGVuZGVuY3kgPSBkZXAyCi0gICAgZGVwX2luZm8yLnBsYXRmb3JtID0gcGxhdDIKLSAgICBiYXNlX2NvbmZpZ19tb2NrLkl0ZXJEZXBlbmRlbmN5SW5mby5yZXR1cm5fdmFsdWUgPSBpdGVyKFtkZXBfaW5mbzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwX2luZm8yXSkKLSAgICBleHBlY3RlZF9sb29rdXBfZGljdCA9IHtkZXA6IHtwbGF0MTogZGVwX2luZm9fYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0MjogZGVwX2luZm9fYn0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwMToge3BsYXQxOiBkZXBfaW5mb19jfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXAyOiB7cGxhdDI6IGRlcF9pbmZvMn19Ci0gICAgZGVwX21hbmFnZXIuX1VwZGF0ZURlcGVuZGVuY2llcyhiYXNlX2NvbmZpZ19tb2NrKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfbG9va3VwX2RpY3QsIGRlcF9tYW5hZ2VyLl9sb29rdXBfZGljdCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGRlcF9pbmZvMS5VcGRhdGUuY2FsbGVkKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm8yLlVwZGF0ZS5jYWxsZWQpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mb19hLlVwZGF0ZS5jYWxsZWQpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mb19iLlVwZGF0ZS5jYWxsZWQpCi0gICAgZGVwX2luZm9fYy5VcGRhdGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZGVwX2luZm8xKQotICAgIGRlcF9pbmZvX2EucmVzZXRfbW9jaygpCi0gICAgZGVwX2luZm9fYi5yZXNldF9tb2NrKCkKLSAgICBkZXBfaW5mb19jLnJlc2V0X21vY2soKQotCi0gICAgIyBNdWx0aXBsZSBkZXBlbmRlbmNpZXMsIG11bHRpcGxlIHBsYXRmb3JtcyBpbiBhIEJhc2VDb25maWcuCi0gICAgZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0ID0gc3RhcnRfbG9va3VwX2RpY3QuY29weSgpCi0gICAgZGVwMSA9ICdkZXBlbmRlbmN5MScKLSAgICBwbGF0MSA9ICdwbGF0Zm9ybTEnCi0gICAgcGxhdDIgPSAncGxhdGZvcm0yJwotICAgIGRlcF9pbmZvMSA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKQotICAgIGRlcF9pbmZvMS5kZXBlbmRlbmN5ID0gZGVwCi0gICAgZGVwX2luZm8xLnBsYXRmb3JtID0gcGxhdDEKLSAgICBkZXBfaW5mbzIgPSBtb2NrLk1hZ2ljTW9jayhzcGVjPWRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5SW5mbykKLSAgICBkZXBfaW5mbzIuZGVwZW5kZW5jeSA9IGRlcDEKLSAgICBkZXBfaW5mbzIucGxhdGZvcm0gPSBwbGF0MQotICAgIGRlcF9pbmZvMyA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKQotICAgIGRlcF9pbmZvMy5kZXBlbmRlbmN5ID0gZGVwMgotICAgIGRlcF9pbmZvMy5wbGF0Zm9ybSA9IHBsYXQyCi0gICAgYmFzZV9jb25maWdfbW9jay5JdGVyRGVwZW5kZW5jeUluZm8ucmV0dXJuX3ZhbHVlID0gaXRlcigKLSAgICAgICAgW2RlcF9pbmZvMSwgZGVwX2luZm8yLCBkZXBfaW5mbzNdKQotICAgIGV4cGVjdGVkX2xvb2t1cF9kaWN0ID0ge2RlcDoge3BsYXQxOiBkZXBfaW5mb19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXQyOiBkZXBfaW5mb19ifSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXAxOiB7cGxhdDE6IGRlcF9pbmZvX2N9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcDI6IHtwbGF0MjogZGVwX2luZm8zfX0KLSAgICBkZXBfbWFuYWdlci5fVXBkYXRlRGVwZW5kZW5jaWVzKGJhc2VfY29uZmlnX21vY2spCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9sb29rdXBfZGljdCwgZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0KQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm8xLlVwZGF0ZS5jYWxsZWQpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShkZXBfaW5mbzIuVXBkYXRlLmNhbGxlZCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGRlcF9pbmZvMy5VcGRhdGUuY2FsbGVkKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX2luZm9fYi5VcGRhdGUuY2FsbGVkKQotICAgIGRlcF9pbmZvX2EuVXBkYXRlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGRlcF9pbmZvMSkKLSAgICBkZXBfaW5mb19jLlVwZGF0ZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChkZXBfaW5mbzIpCi0KLSAgICAjIENvbGxpc2lvbiBlcnJvci4KLSAgICBkZXBfbWFuYWdlci5fbG9va3VwX2RpY3QgPSBzdGFydF9sb29rdXBfZGljdC5jb3B5KCkKLSAgICBkZXBfaW5mbyA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lJbmZvKQotICAgIGRlcF9pbmZvLmRlcGVuZGVuY3kgPSBkZXAKLSAgICBkZXBfaW5mby5wbGF0Zm9ybSA9IHBsYXQxCi0gICAgYmFzZV9jb25maWdfbW9jay5JdGVyRGVwZW5kZW5jeUluZm8ucmV0dXJuX3ZhbHVlID0gaXRlcihbZGVwX2luZm9dKQotICAgIGRlcF9pbmZvX2EuVXBkYXRlLnNpZGVfZWZmZWN0ID0gVmFsdWVFcnJvcgotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgZGVwX21hbmFnZXIuX1VwZGF0ZURlcGVuZGVuY2llcywgYmFzZV9jb25maWdfbW9jaykKLQotICAgICMgRW5zdXJlIHRoZSB0ZXN0aW5nIGRhdGEgd2Fzbid0IGNvcnJ1cHRlZC4KLSAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0X2xvb2t1cF9kaWN0LAotICAgICAgICAgICAgICAgICAgICAge2RlcDoge3BsYXQxOiBkZXBfaW5mb19hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXQyOiBkZXBfaW5mb19ifSwKLSAgICAgICAgICAgICAgICAgICAgICBkZXAxOiB7cGxhdDE6IGRlcF9pbmZvX2N9fSkKLQotICBkZWYgdGVzdEdldERlcGVuZGVuY3lJbmZvKHNlbGYpOgotICAgIGRlcF9tYW5hZ2VyID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lNYW5hZ2VyKFtdKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0KQotCi0gICAgIyBObyBkZXBlbmRlbmNpZXMgaW4gdGhlIGRlcGVuZGVuY3kgbWFuYWdlci4KLSAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGRlcF9tYW5hZ2VyLl9HZXREZXBlbmRlbmN5SW5mbygnbWlzc2luZ19kZXAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaXNzaW5nX3BsYXQnKSkKLQotICAgIGRlcF9tYW5hZ2VyLl9sb29rdXBfZGljdCA9IHsnZGVwMSc6IHsncGxhdDEnOiAnZGVwX2luZm8xMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Mic6ICdkZXBfaW5mbzEyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXQzJzogJ2RlcF9pbmZvMTMnfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcDInOiB7J3BsYXQxJzogJ2RlcF9pbmZvMTEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxhdDInOiAnZGVwX2luZm8yMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Myc6ICdkZXBfaW5mbzIzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHQnOiAnZGVwX2luZm8yZCd9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVwMyc6IHsncGxhdDEnOiAnZGVwX2luZm8zMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Mic6ICdkZXBfaW5mbzMyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHQnOiAnZGVwX2luZm8zZCd9fQotICAgICMgRGVwZW5kZW5jeSBub3QgaW4gdGhlIGRlcGVuZGVuY3kgbWFuYWdlci4KLSAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGRlcF9tYW5hZ2VyLl9HZXREZXBlbmRlbmN5SW5mbygKLSAgICAgICAgJ21pc3NpbmdfZGVwJywgJ21pc3NpbmdfcGxhdCcpKQotICAgICMgRGVwZW5kZW5jeSBpbiB0aGUgZGVwZW5kZW5jeSBtYW5hZ2VyLCBidXQgbm90IHRoZSBwbGF0Zm9ybS4gTm8gZGVmYXVsdC4KLSAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGRlcF9tYW5hZ2VyLl9HZXREZXBlbmRlbmN5SW5mbygKLSAgICAgICAgJ2RlcDEnLCAnbWlzc2luZ19wbGF0JykpCi0gICAgIyBEZXBlbmRlbmN5IGluIHRoZSBkZXBlbmRlbmN5IG1hbmFnZXIsIGJ1dCBub3QgdGhlIHBsYXRmb3JtLCBidXQgYSBkZWZhdWx0Ci0gICAgIyBleGlzdHMuCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnZGVwX2luZm8yZCcsIGRlcF9tYW5hZ2VyLl9HZXREZXBlbmRlbmN5SW5mbygKLSAgICAgICAgJ2RlcDInLCAnbWlzc2luZ19wbGF0JykpCi0gICAgIyBEZXBlbmRlbmN5IGFuZCBwbGF0Zm9ybSBpbiB0aGUgZGVwZW5kZW5jeSBtYW5hZ2VyLiBBIGRlZmF1bHQgZXhpc3RzLgotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2RlcF9pbmZvMjMnLCBkZXBfbWFuYWdlci5fR2V0RGVwZW5kZW5jeUluZm8oCi0gICAgICAgICdkZXAyJywgJ3BsYXQzJykpCi0gICAgIyBEZXBlbmRlbmN5IGFuZCBwbGF0Zm9ybSBpbiB0aGUgZGVwZW5kZW5jeSBtYW5hZ2VyLiBObyBkZWZhdWx0IGV4aXN0cy4KLSAgICBzZWxmLmFzc2VydEVxdWFsKCdkZXBfaW5mbzEyJywgZGVwX21hbmFnZXIuX0dldERlcGVuZGVuY3lJbmZvKAotICAgICAgICAnZGVwMScsICdwbGF0MicpKQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICBAbW9jay5wYXRjaCgKLSAgICAgICdkZXBlbmRlbmN5X21hbmFnZXIuZGVwZW5kZW5jeV9pbmZvLkRlcGVuZGVuY3lJbmZvLkdldFJlbW90ZVBhdGgnKSAgIyBweWxpbnQ6IGRpc2FibGU9bGluZS10b28tbG9uZwotICBkZWYgdGVzdEZldGNoUGF0aFVuaXRpdGlhbGl6ZWREZXBlbmRlbmN5KAotICAgICAgc2VsZiwgY3NfcGF0aF9tb2NrKToKLSAgICBkZXBfbWFuYWdlciA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5TWFuYWdlcihbXSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGNzX3BhdGhfbW9jay5jYWxsX2FyZ3MpCi0gICAgY3NfcGF0aCA9ICdjc19wYXRoJwotICAgIGNzX3BhdGhfbW9jay5yZXR1cm5fdmFsdWUgPSBjc19wYXRoCi0KLSAgICAjIEVtcHR5IGxvb2t1cF9kaWN0Ci0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhleGNlcHRpb25zLk5vUGF0aEZvdW5kRXJyb3IpOgotICAgICAgZGVwX21hbmFnZXIuRmV0Y2hQYXRoKCdkZXAnLCAncGxhdF9hcmNoX3g4NicpCi0KLSAgICAjIE5vbi1lbXB0eSBsb29rdXAgZGljdCB0aGF0IGRvZXNuJ3QgY29udGFpbiB0aGUgZGVwZW5kZW5jeSB3ZSdyZSBsb29raW5nCi0gICAgIyBmb3IuCi0gICAgZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0ID0geydkZXAxJzogbW9jay5NYWdpY01vY2soKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcDInOiBtb2NrLk1hZ2ljTW9jaygpfQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhjZXB0aW9ucy5Ob1BhdGhGb3VuZEVycm9yKToKLSAgICAgIGRlcF9tYW5hZ2VyLkZldGNoUGF0aCgnZGVwJywgJ3BsYXRfYXJjaF94ODYnKQotCi0gIEBtb2NrLnBhdGNoKCdvcy5wYXRoJykKLSAgQG1vY2sucGF0Y2goCi0gICAgICAnZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lNYW5hZ2VyLl9HZXREZXBlbmRlbmN5SW5mbycpCi0gIEBtb2NrLnBhdGNoKAotICAgICAgJ2RlcGVuZGVuY3lfbWFuYWdlci5kZXBlbmRlbmN5X2luZm8uRGVwZW5kZW5jeUluZm8uR2V0UmVtb3RlUGF0aCcpICAjIHB5bGludDogZGlzYWJsZT1saW5lLXRvby1sb25nCi0gIGRlZiB0ZXN0RmV0Y2hQYXRoTG9jYWxGaWxlKHNlbGYsIGNzX3BhdGhfbW9jaywgZGVwX2luZm9fbW9jaywgcGF0aF9tb2NrKToKLSAgICBkZXBfbWFuYWdlciA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5TWFuYWdlcihbXSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGNzX3BhdGhfbW9jay5jYWxsX2FyZ3MpCi0gICAgY3NfcGF0aCA9ICdjc19wYXRoJwotICAgIGRlcF9pbmZvID0gc2VsZi5kZXBfaW5mbwotICAgIGNzX3BhdGhfbW9jay5yZXR1cm5fdmFsdWUgPSBjc19wYXRoCi0gICAgIyBUaGUgRGVwZW5kZW5jeUluZm8gcmV0dXJuZWQgc2hvdWxkIGJlIHBhc3NlZCB0aHJvdWdoIHRvIExvY2FsUGF0aC4KLSAgICBkZXBfaW5mb19tb2NrLnJldHVybl92YWx1ZSA9IGRlcF9pbmZvCi0KLSAgICAjIE5vbi1lbXB0eSBsb29rdXAgZGljdCB0aGF0IGNvbnRhaW5zIHRoZSBkZXBlbmRlbmN5IHdlJ3JlIGxvb2tpbmcgZm9yLgotICAgICMgTG9jYWwgcGF0aCBleGlzdHMuCi0gICAgZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0ID0geydkZXAnOiB7J3BsYXRmb3JtJyA6IHNlbGYuZGVwX2luZm99LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVwMic6IG1vY2suTWFnaWNNb2NrKCl9Ci0gICAgc2VsZi5mcy5DcmVhdGVGaWxlKCdwYXRoMScpCi0gICAgZm91bmRfcGF0aCA9IGRlcF9tYW5hZ2VyLkZldGNoUGF0aCgnZGVwJywgJ3BsYXRmb3JtJykKLQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3BhdGgxJywgZm91bmRfcGF0aCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGNzX3BhdGhfbW9jay5jYWxsX2FyZ3MpCi0KLQotICBAbW9jay5wYXRjaCgKLSAgICAgICdkZXBlbmRlbmN5X21hbmFnZXIuZGVwZW5kZW5jeV9pbmZvLkRlcGVuZGVuY3lJbmZvLkdldFJlbW90ZVBhdGgnKSAgIyBweWxpbnQ6IGRpc2FibGU9bGluZS10b28tbG9uZwotICBkZWYgdGVzdEZldGNoUGF0aFJlbW90ZUZpbGUoCi0gICAgICBzZWxmLCBjc19wYXRoX21vY2spOgotICAgIGRlcF9tYW5hZ2VyID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lNYW5hZ2VyKFtdKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3NfcGF0aF9tb2NrLmNhbGxfYXJncykKLSAgICBjc19wYXRoID0gJ2NzX3BhdGgnCi0gICAgZGVmIEZha2VDU1BhdGgoKToKLSAgICAgIHNlbGYuZnMuQ3JlYXRlRmlsZShjc19wYXRoKQotICAgICAgcmV0dXJuIGNzX3BhdGgKLSAgICBjc19wYXRoX21vY2suc2lkZV9lZmZlY3QgPSBGYWtlQ1NQYXRoCi0KLSAgICAjIE5vbi1lbXB0eSBsb29rdXAgZGljdCB0aGF0IGNvbnRhaW5zIHRoZSBkZXBlbmRlbmN5IHdlJ3JlIGxvb2tpbmcgZm9yLgotICAgICMgTG9jYWwgcGF0aCBkb2Vzbid0IGV4aXN0LCBidXQgY2xvdWRfc3RvcmFnZV9wYXRoIGlzIGRvd25sb2FkZWQuCi0gICAgZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0ID0geydkZXAnOiB7J3BsYXRmb3JtJyA6IHNlbGYuZGVwX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXQxJzogbW9jay5NYWdpY01vY2soKX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXAyJzogeydwbGF0Mic6IG1vY2suTWFnaWNNb2NrKCl9fQotICAgIGZvdW5kX3BhdGggPSBkZXBfbWFuYWdlci5GZXRjaFBhdGgoJ2RlcCcsICdwbGF0Zm9ybScpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChjc19wYXRoLCBmb3VuZF9wYXRoKQotCi0KLSAgQG1vY2sucGF0Y2goCi0gICAgICAnZGVwZW5kZW5jeV9tYW5hZ2VyLmRlcGVuZGVuY3lfaW5mby5EZXBlbmRlbmN5SW5mby5HZXRSZW1vdGVQYXRoJykgICMgcHlsaW50OiBkaXNhYmxlPWxpbmUtdG9vLWxvbmcKLSAgZGVmIHRlc3RGZXRjaFBhdGhFcnJvcigKLSAgICAgIHNlbGYsIGNzX3BhdGhfbW9jayk6Ci0gICAgZGVwX21hbmFnZXIgPSBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeU1hbmFnZXIoW10pCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjc19wYXRoX21vY2suY2FsbF9hcmdzKQotICAgIGNzX3BhdGhfbW9jay5yZXR1cm5fdmFsdWUgPSBOb25lCi0gICAgZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0ID0geydkZXAnOiB7J3BsYXRmb3JtJyA6IHNlbGYuZGVwX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXQxJzogbW9jay5NYWdpY01vY2soKX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXAyJzogeydwbGF0Mic6IG1vY2suTWFnaWNNb2NrKCl9fQotICAgICMgTm9uLWVtcHR5IGxvb2t1cCBkaWN0IHRoYXQgY29udGFpbnMgdGhlIGRlcGVuZGVuY3kgd2UncmUgbG9va2luZyBmb3IuCi0gICAgIyBMb2NhbCBwYXRoIGRvZXNuJ3QgZXhpc3QsIGFuZCBjbG91ZF9zdG9yYWdlIHBhdGggd2Fzbid0IHN1Y2Nlc3NmdWxseQotICAgICMgZm91bmQuCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoZXhjZXB0aW9ucy5Ob1BhdGhGb3VuZEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIGRlcF9tYW5hZ2VyLkZldGNoUGF0aCwgJ2RlcCcsICdwbGF0Zm9ybScpCi0KLSAgICBjc19wYXRoX21vY2suc2lkZV9lZmZlY3QgPSBjbG91ZF9zdG9yYWdlLkNyZWRlbnRpYWxzRXJyb3IKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhjbG91ZF9zdG9yYWdlLkNyZWRlbnRpYWxzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgZGVwX21hbmFnZXIuRmV0Y2hQYXRoLCAnZGVwJywgJ3BsYXRmb3JtJykKLQotICAgIGNzX3BhdGhfbW9jay5zaWRlX2VmZmVjdCA9IGNsb3VkX3N0b3JhZ2UuQ2xvdWRTdG9yYWdlRXJyb3IKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhjbG91ZF9zdG9yYWdlLkNsb3VkU3RvcmFnZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIGRlcF9tYW5hZ2VyLkZldGNoUGF0aCwgJ2RlcCcsICdwbGF0Zm9ybScpCi0KLSAgICBjc19wYXRoX21vY2suc2lkZV9lZmZlY3QgPSBjbG91ZF9zdG9yYWdlLlBlcm1pc3Npb25FcnJvcgotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNsb3VkX3N0b3JhZ2UuUGVybWlzc2lvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIGRlcF9tYW5hZ2VyLkZldGNoUGF0aCwgJ2RlcCcsICdwbGF0Zm9ybScpCi0KLSAgZGVmIHRlc3RMb2NhbFBhdGgoc2VsZik6Ci0gICAgZGVwX21hbmFnZXIgPSBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeU1hbmFnZXIoW10pCi0gICAgIyBFbXB0eSBsb29rdXBfZGljdAotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhjZXB0aW9ucy5Ob1BhdGhGb3VuZEVycm9yKToKLSAgICAgIGRlcF9tYW5hZ2VyLkxvY2FsUGF0aCgnZGVwJywgJ3BsYXQnKQotCi0gIGRlZiB0ZXN0TG9jYWxQYXRoTm9EZXBlbmRlbmN5KHNlbGYpOgotICAgICMgTm9uLWVtcHR5IGxvb2t1cCBkaWN0IHRoYXQgZG9lc24ndCBjb250YWluIHRoZSBkZXBlbmRlbmN5IHdlJ3JlIGxvb2tpbmcKLSAgICAjIGZvci4KLSAgICBkZXBfbWFuYWdlciA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5TWFuYWdlcihbXSkKLSAgICBkZXBfbWFuYWdlci5fbG9va3VwX2RpY3QgPSB7J2RlcDEnOiBtb2NrLk1hZ2ljTW9jaygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVwMic6IG1vY2suTWFnaWNNb2NrKCl9Ci0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhleGNlcHRpb25zLk5vUGF0aEZvdW5kRXJyb3IpOgotICAgICAgZGVwX21hbmFnZXIuTG9jYWxQYXRoKCdkZXAnLCAncGxhdCcpCi0KLSAgZGVmIHRlc3RMb2NhbFBhdGhFeGlzdHMoc2VsZik6Ci0gICAgIyBOb24tZW1wdHkgbG9va3VwIGRpY3QgdGhhdCBjb250YWlucyB0aGUgZGVwZW5kZW5jeSB3ZSdyZSBsb29raW5nIGZvci4KLSAgICAjIExvY2FsIHBhdGggZXhpc3RzLgotICAgIGRlcF9tYW5hZ2VyID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lNYW5hZ2VyKFtdKQotICAgIGRlcF9tYW5hZ2VyLl9sb29rdXBfZGljdCA9IHsnZGVwZW5kZW5jeScgOiB7J3BsYXRmb3JtJzogc2VsZi5kZXBfaW5mb30sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXAxJzogbW9jay5NYWdpY01vY2soKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcDInOiBtb2NrLk1hZ2ljTW9jaygpfQotICAgIHNlbGYuZnMuQ3JlYXRlRmlsZSgncGF0aDEnKQotICAgIGZvdW5kX3BhdGggPSBkZXBfbWFuYWdlci5Mb2NhbFBhdGgoJ2RlcGVuZGVuY3knLCAncGxhdGZvcm0nKQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgncGF0aDEnLCBmb3VuZF9wYXRoKQotCi0gIGRlZiB0ZXN0TG9jYWxQYXRoTWlzc2luZ1BhdGhzKHNlbGYpOgotICAgICMgTm9uLWVtcHR5IGxvb2t1cCBkaWN0IHRoYXQgY29udGFpbnMgdGhlIGRlcGVuZGVuY3kgd2UncmUgbG9va2luZyBmb3IuCi0gICAgIyBMb2NhbCBwYXRoIGlzIGZvdW5kIGJ1dCBkb2Vzbid0IGV4aXN0LgotICAgIGRlcF9tYW5hZ2VyID0gZGVwZW5kZW5jeV9tYW5hZ2VyLkRlcGVuZGVuY3lNYW5hZ2VyKFtdKQotICAgIGRlcF9tYW5hZ2VyLl9sb29rdXBfZGljdCA9IHsnZGVwZW5kZW5jeScgOiB7J3BsYXRmb3JtJzogc2VsZi5kZXBfaW5mb30sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXAxJzogbW9jay5NYWdpY01vY2soKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcDInOiBtb2NrLk1hZ2ljTW9jaygpfQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGV4Y2VwdGlvbnMuTm9QYXRoRm91bmRFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICBkZXBfbWFuYWdlci5Mb2NhbFBhdGgsICdkZXBlbmRlbmN5JywgJ3BsYXRmb3JtJykKLQotICBkZWYgdGVzdExvY2FsUGF0aE5vUGF0aHMoc2VsZik6Ci0gICAgIyBOb24tZW1wdHkgbG9va3VwIGRpY3QgdGhhdCBjb250YWlucyB0aGUgZGVwZW5kZW5jeSB3ZSdyZSBsb29raW5nIGZvci4KLSAgICAjIExvY2FsIHBhdGggaXNuJ3QgZm91bmQuCi0gICAgZGVwX21hbmFnZXIgPSBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeU1hbmFnZXIoW10pCi0gICAgZGVwX2luZm8gPSBkZXBlbmRlbmN5X21hbmFnZXIuRGVwZW5kZW5jeUluZm8oCi0gICAgICAgICdkZXAnLCAncGxhdGZvcm0nLCAnY29uZmlnX2ZpbGUnLAotICAgICAgICBjbG91ZF9zdG9yYWdlX2luZm89c2VsZi5jbG91ZF9zdG9yYWdlX2luZm8pCi0gICAgZGVwX21hbmFnZXIuX2xvb2t1cF9kaWN0ID0geydkZXBlbmRlbmN5JyA6IHsncGxhdGZvcm0nOiBkZXBfaW5mb30sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXAxJzogbW9jay5NYWdpY01vY2soKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcDInOiBtb2NrLk1hZ2ljTW9jaygpfQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGV4Y2VwdGlvbnMuTm9QYXRoRm91bmRFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICBkZXBfbWFuYWdlci5Mb2NhbFBhdGgsICdkZXBlbmRlbmN5JywgJ3BsYXRmb3JtJykKLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXJfdXRpbC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyX3V0aWwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMDE3NGUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXJfdXRpbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN0YXQKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi1pbXBvcnQgemlwZmlsZV8yXzdfMTMgYXMgemlwZmlsZQotCi1mcm9tIGRlcGVuZGVuY3lfbWFuYWdlciBpbXBvcnQgZXhjZXB0aW9ucwotCi0KLWRlZiBfV2luUmVhZE9ubHlIYW5kbGVyKGZ1bmMsIHBhdGgsIGV4ZWNpbmZvKToKLSAgaWYgbm90IG9zLmFjY2VzcyhwYXRoLCBvcy5XX09LKToKLSAgICBvcy5jaG1vZChwYXRoLCBzdGF0LlNfSVdSSVRFKQotICAgIGZ1bmMocGF0aCkKLSAgZWxzZToKLSAgICByYWlzZSBleGVjaW5mb1swXSwgZXhlY2luZm9bMV0sIGV4ZWNpbmZvWzJdCi0KLQotZGVmIFJlbW92ZURpcihkaXJfcGF0aCk6Ci0gIGFzc2VydCBvcy5wYXRoLmlzYWJzKGRpcl9wYXRoKQotICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgZGlyX3BhdGggPSB1J1xcXFw/XFwnICsgZGlyX3BhdGgKLSAgaWYgb3MucGF0aC5pc2RpcihkaXJfcGF0aCk6Ci0gICAgc2h1dGlsLnJtdHJlZShkaXJfcGF0aCwgb25lcnJvcj1fV2luUmVhZE9ubHlIYW5kbGVyKQotCi0KLWRlZiBWZXJpZnlTYWZlQXJjaGl2ZShhcmNoaXZlKToKLSAgZGVmIFJlc29sdmVQYXRoKHBhdGhfbmFtZSk6Ci0gICAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5hYnNwYXRoKHBhdGhfbmFtZSkpCi0gICMgTXVzdCBhZGQgcGF0aHNlcCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMuCi0gICMgRXg6IC90bXAvYWJjL2JhZF9maWxlLnB5IHN0YXJ0cyB3aXRoIC90bXAvYSBidXQgbm90IC90bXAvYS8KLSAgYmFzZV9wYXRoID0gUmVzb2x2ZVBhdGgob3MuZ2V0Y3dkKCkpICsgb3MucGF0aC5zZXAKLSAgZm9yIG1lbWJlciBpbiBhcmNoaXZlLm5hbWVsaXN0KCk6Ci0gICAgaWYgbm90IFJlc29sdmVQYXRoKG9zLnBhdGguam9pbihiYXNlX3BhdGgsIG1lbWJlcikpLnN0YXJ0c3dpdGgoYmFzZV9wYXRoKToKLSAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQXJjaGl2ZUVycm9yKAotICAgICAgICAgICdBcmNoaXZlICVzIGNvbnRhaW5zIGEgYmFkIG1lbWJlcjogJXMuJyAlIChhcmNoaXZlLmZpbGVuYW1lLCBtZW1iZXIpKQotCi0KLWRlZiBHZXRNb2RlRnJvbVBhdGgoZmlsZV9wYXRoKToKLSAgcmV0dXJuIHN0YXQuU19JTU9ERShvcy5zdGF0KGZpbGVfcGF0aCkuc3RfbW9kZSkKLQotCi1kZWYgR2V0TW9kZUZyb21aaXBJbmZvKHppcF9pbmZvKToKLSAgcmV0dXJuIHppcF9pbmZvLmV4dGVybmFsX2F0dHIgPj4gMTYKLQotCi1kZWYgU2V0VW56aXBwZWREaXJQZXJtaXNzaW9ucyhhcmNoaXZlLCB1bnppcHBlZF9kaXIpOgotICAiIiJTZXQgdGhlIGZpbGUgcGVybWlzc2lvbnMgaW4gYW4gdW56aXBwZWQgYXJjaGl2ZS4KLQotICAgICBEZXNpZ25lZCB0byBiZSBjYWxsZWQgcmlnaHQgYWZ0ZXIgZXh0cmFjdGFsbCgpIHdhcyBjYWxsZWQgb24gfGFyY2hpdmV8LgotICAgICBOb29wIG9uIFdpbi4gT3RoZXJ3aXNlIHNldHMgdGhlIGV4ZWN1dGFibGUgYml0IG9uIGZpbGVzIHdoZXJlIG5lZWRlZC4KLQotICAgICBBcmdzOgotICAgICAgICAgYXJjaGl2ZTogQSB6aXBmaWxlLlppcEZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgcmVhZGluZy4KLSAgICAgICAgIHVuemlwcGVkX2RpcjogQSBwYXRoIHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHVuemlwcGVkIGNvbnRlbnRzCi0gICAgICAgICAgICAgb2YgfGFyY2hpdmV8LgotICAiIiIKLSAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgICMgV2luZG93cyBkb2Vzbid0IGhhdmUgYW4gZXhlY3V0YWJsZSBiaXQsIHNvIGRvbid0IG1lc3Mgd2l0aCB0aGUgQUNMcy4KLSAgICByZXR1cm4KLSAgZm9yIHppcF9pbmZvIGluIGFyY2hpdmUuaW5mb2xpc3QoKToKLSAgICBhcmNoaXZlX2FjbHMgPSBHZXRNb2RlRnJvbVppcEluZm8oemlwX2luZm8pCi0gICAgaWYgYXJjaGl2ZV9hY2xzICYgc3RhdC5TX0lYVVNSOgotICAgICAgIyBPbmx5IHByZXNlcnZlIG93bmVyIGV4ZWN1cmFibGUgcGVybWlzc2lvbnMuCi0gICAgICB1bnppcHBlZF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKAotICAgICAgICAgIG9zLnBhdGguam9pbih1bnppcHBlZF9kaXIsIHppcF9pbmZvLmZpbGVuYW1lKSkKLSAgICAgIG1vZGUgPSBHZXRNb2RlRnJvbVBhdGgodW56aXBwZWRfcGF0aCkKLSAgICAgIG9zLmNobW9kKHVuemlwcGVkX3BhdGgsIG1vZGUgfCBzdGF0LlNfSVhVU1IpCi0KLQotZGVmIFVuemlwQXJjaGl2ZShhcmNoaXZlX3BhdGgsIHVuemlwX3BhdGgpOgotICAiIiJVbnppcHMgYSBmaWxlIGlmIGl0IGlzIGEgemlwIGZpbGUuCi0KLSAgQXJnczoKLSAgICAgIGFyY2hpdmVfcGF0aDogVGhlIGRvd25sb2FkZWQgZmlsZSB0byB1bnppcC4KLSAgICAgIHVuemlwX3BhdGg6IFRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgdG8gdW56aXAgdG8uCi0KLSAgUmFpc2VzOgotICAgICAgVmFsdWVFcnJvcjogSWYgfGFyY2hpdmVfcGF0aHwgaXMgbm90IGEgemlwZmlsZS4KLSAgIiIiCi0gICMgVE9ETyhhaW9sb3MpOiBBZGQgdGVzdHMgb25jZSB0aGUgcmVmYWN0b3IgaXMgY29tcGxldGVkLiBjcmJ1Zy5jb20vNTUxMTU4Ci0gIGlmIG5vdCAoYXJjaGl2ZV9wYXRoIGFuZCB6aXBmaWxlLmlzX3ppcGZpbGUoYXJjaGl2ZV9wYXRoKSk6Ci0gICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgJ0F0dGVtcHRpbmcgdG8gdW56aXAgYSBub24tYXJjaGl2ZSBmaWxlIGF0ICVzJyAlIGFyY2hpdmVfcGF0aCkKLSAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHVuemlwX3BhdGgpOgotICAgIG9zLm1ha2VkaXJzKHVuemlwX3BhdGgpCi0gICMgVGhlIFB5dGhvbiBaaXBGaWxlIGRvZXMgbm90IHN1cHBvcnQgc3ltYm9saWMgbGlua3MsIHdoaWNoIG1ha2VzIGl0Ci0gICMgdW5zdWl0YWJsZSBmb3IgTWFjIGJ1aWxkcy4gc28gdXNlIGRpdHRvIGluc3RlYWQuIGNyYnVnLmNvbS83MDAwOTcuCi0gIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdkYXJ3aW4nKToKLSAgICBhc3NlcnQgb3MucGF0aC5pc2Ficyh1bnppcF9wYXRoKQotICAgIHVuemlwX2NtZCA9IFsnZGl0dG8nLCAnLXgnLCAnLWsnLCBhcmNoaXZlX3BhdGgsIHVuemlwX3BhdGhdCi0gICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4odW56aXBfY21kLCBidWZzaXplPTAsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICBwcm9jLmNvbW11bmljYXRlKCkKLSAgICByZXR1cm4KLSAgdHJ5OgotICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGFyY2hpdmVfcGF0aCwgJ3InKSBhcyBhcmNoaXZlOgotICAgICAgVmVyaWZ5U2FmZUFyY2hpdmUoYXJjaGl2ZSkKLSAgICAgIGFzc2VydCBvcy5wYXRoLmlzYWJzKHVuemlwX3BhdGgpCi0gICAgICB1bnppcF9wYXRoX3dpdGhvdXRfcHJlZml4ID0gdW56aXBfcGF0aAotICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgICAgICB1bnppcF9wYXRoID0gdSdcXFxcP1xcJyArIHVuemlwX3BhdGgKLSAgICAgIGFyY2hpdmUuZXh0cmFjdGFsbChwYXRoPXVuemlwX3BhdGgpCi0gICAgICBTZXRVbnppcHBlZERpclBlcm1pc3Npb25zKGFyY2hpdmUsIHVuemlwX3BhdGgpCi0gIGV4Y2VwdDoKLSAgICAjIEhhY2sgbmVjZXNzYXJ5IGJlY2F1c2UgaXNkaXIgZG9lc24ndCB3b3JrIHdpdGggZXNjYXBlZCBwYXRocyBvbiBXaW5kb3dzLgotICAgIGlmIHVuemlwX3BhdGhfd2l0aG91dF9wcmVmaXggYW5kIG9zLnBhdGguaXNkaXIodW56aXBfcGF0aF93aXRob3V0X3ByZWZpeCk6Ci0gICAgICBSZW1vdmVEaXIodW56aXBfcGF0aF93aXRob3V0X3ByZWZpeCkKLSAgICByYWlzZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXJfdXRpbF91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyX3V0aWxfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMTcwMjUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXJfdXRpbF91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN0YXQKLWltcG9ydCBzeXMKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgdXVpZAotaW1wb3J0IHppcGZpbGUKLQotaW1wb3J0IG1vY2sKLQotZnJvbSBkZXBlbmRlbmN5X21hbmFnZXIgaW1wb3J0IGRlcGVuZGVuY3lfbWFuYWdlcl91dGlsCi1mcm9tIGRlcGVuZGVuY3lfbWFuYWdlciBpbXBvcnQgZXhjZXB0aW9ucwotCi0KLWNsYXNzIERlcGVuZGVuY3lNYW5hZ2VyVXRpbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAjIFRoaXMgY2xhc3MgaW50ZW50aW9uYWxseSB1c2VzIGFjdHVhbCBmaWxlIEkvTyB0byB0ZXN0IHJlYWwgc3lzdGVtIGJlaGF2aW9yLgotCi0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzZWxmLnRtcF9kaXIgPSBvcy5wYXRoLmFic3BhdGgodGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3RlbGVtZXRyeScpKQotICAgIHNlbGYuc3ViX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICdzdWJfZGlyJykKLSAgICBvcy5ta2RpcihzZWxmLnN1Yl9kaXIpCi0KLSAgICBzZWxmLnJlYWRfb25seV9wYXRoID0gKG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICdyZWFkX29ubHknKSkKLSAgICB3aXRoIG9wZW4oc2VsZi5yZWFkX29ubHlfcGF0aCwgJ3crJykgYXMgcmVhZF9maWxlOgotICAgICAgcmVhZF9maWxlLndyaXRlKCdSZWFkLW9ubHkgZmlsZScpCi0gICAgb3MuY2htb2Qoc2VsZi5yZWFkX29ubHlfcGF0aCwgc3RhdC5TX0lSVVNSKQotCi0gICAgc2VsZi53cml0YWJsZV9wYXRoID0gKG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICd3cml0YWJsZScpKQotICAgIHdpdGggb3BlbihzZWxmLndyaXRhYmxlX3BhdGgsICd3KycpIGFzIHdyaXRhYmxlX2ZpbGU6Ci0gICAgICB3cml0YWJsZV9maWxlLndyaXRlKCdXcml0YWJsZSBmaWxlJykKLSAgICBvcy5jaG1vZChzZWxmLndyaXRhYmxlX3BhdGgsIHN0YXQuU19JUlVTUiB8IHN0YXQuU19JV1VTUikKLQotICAgIHNlbGYuZXhlY3V0YWJsZV9wYXRoID0gKG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICdleGVjdXRhYmxlJykpCi0gICAgd2l0aCBvcGVuKHNlbGYuZXhlY3V0YWJsZV9wYXRoLCAndysnKSBhcyBleGVjdXRhYmxlX2ZpbGU6Ci0gICAgICBleGVjdXRhYmxlX2ZpbGUud3JpdGUoJ0V4ZWN1dGFibGUgZmlsZScpCi0gICAgb3MuY2htb2Qoc2VsZi5leGVjdXRhYmxlX3BhdGgsIHN0YXQuU19JUldYVSkKLQotICAgIHNlbGYuc3ViX3JlYWRfb25seV9wYXRoID0gKG9zLnBhdGguam9pbihzZWxmLnN1Yl9kaXIsICdyZWFkX29ubHknKSkKLSAgICB3aXRoIG9wZW4oc2VsZi5zdWJfcmVhZF9vbmx5X3BhdGgsICd3KycpIGFzIHJlYWRfZmlsZToKLSAgICAgIHJlYWRfZmlsZS53cml0ZSgnUmVhZC1vbmx5IHN1YiBmaWxlJykKLSAgICBvcy5jaG1vZChzZWxmLnN1Yl9yZWFkX29ubHlfcGF0aCwgc3RhdC5TX0lSVVNSKQotCi0gICAgc2VsZi5zdWJfd3JpdGFibGVfcGF0aCA9IChvcy5wYXRoLmpvaW4oc2VsZi5zdWJfZGlyLCAnd3JpdGFibGUnKSkKLSAgICB3aXRoIG9wZW4oc2VsZi5zdWJfd3JpdGFibGVfcGF0aCwgJ3crJykgYXMgd3JpdGFibGVfZmlsZToKLSAgICAgIHdyaXRhYmxlX2ZpbGUud3JpdGUoJ1dyaXRhYmxlIHN1YiBmaWxlJykKLSAgICBvcy5jaG1vZChzZWxmLnN1Yl93cml0YWJsZV9wYXRoLCBzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVdVU1IpCi0KLSAgICBzZWxmLnN1Yl9leGVjdXRhYmxlX3BhdGggPSAob3MucGF0aC5qb2luKHNlbGYuc3ViX2RpciwgJ2V4ZWN1dGFibGUnKSkKLSAgICB3aXRoIG9wZW4oc2VsZi5zdWJfZXhlY3V0YWJsZV9wYXRoLCAndysnKSBhcyBleGVjdXRhYmxlX2ZpbGU6Ci0gICAgICBleGVjdXRhYmxlX2ZpbGUud3JpdGUoJ0V4ZWN1dGFibGUgc3ViIGZpbGUnKQotICAgIG9zLmNobW9kKHNlbGYuc3ViX2V4ZWN1dGFibGVfcGF0aCwgc3RhdC5TX0lSV1hVKQotCi0gICAgc2VsZi5Bc3NlcnRFeHBlY3RlZERpckZpbGVzKHNlbGYudG1wX2RpcikKLSAgICBzZWxmLmFyY2hpdmVfcGF0aCA9IHNlbGYuQ3JlYXRlWmlwQXJjaGl2ZUZyb21EaXIoc2VsZi50bXBfZGlyKQotCi0gIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICBpZiBvcy5wYXRoLmlzZGlyKHNlbGYudG1wX2Rpcik6Ci0gICAgICBkZXBlbmRlbmN5X21hbmFnZXJfdXRpbC5SZW1vdmVEaXIoc2VsZi50bXBfZGlyKQotICAgIGlmIG9zLnBhdGguaXNmaWxlKHNlbGYuYXJjaGl2ZV9wYXRoKToKLSAgICAgIG9zLnJlbW92ZShzZWxmLmFyY2hpdmVfcGF0aCkKLQotICBkZWYgQXNzZXJ0RXhwZWN0ZWREaXJGaWxlcyhzZWxmLCB0b3BfZGlyKToKLSAgICBzdWJfZGlyID0gb3MucGF0aC5qb2luKHRvcF9kaXIsICdzdWJfZGlyJykKLSAgICByZWFkX29ubHlfcGF0aCA9IChvcy5wYXRoLmpvaW4odG9wX2RpciwgJ3JlYWRfb25seScpKQotICAgIHdyaXRhYmxlX3BhdGggPSAob3MucGF0aC5qb2luKHRvcF9kaXIsICd3cml0YWJsZScpKQotICAgIGV4ZWN1dGFibGVfcGF0aCA9IChvcy5wYXRoLmpvaW4odG9wX2RpciwgJ2V4ZWN1dGFibGUnKSkKLSAgICBzdWJfcmVhZF9vbmx5X3BhdGggPSAob3MucGF0aC5qb2luKHN1Yl9kaXIsICdyZWFkX29ubHknKSkKLSAgICBzdWJfd3JpdGFibGVfcGF0aCA9IChvcy5wYXRoLmpvaW4oc3ViX2RpciwgJ3dyaXRhYmxlJykpCi0gICAgc3ViX2V4ZWN1dGFibGVfcGF0aCA9IChvcy5wYXRoLmpvaW4oc3ViX2RpciwgJ2V4ZWN1dGFibGUnKSkKLSAgICAjIGFzc2VydCBjb250ZW50cyBhcyBleHBlY3RlZAotICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKHRvcF9kaXIpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKHN1Yl9kaXIpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZWFkX29ubHlfcGF0aCkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHdyaXRhYmxlX3BhdGgpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShleGVjdXRhYmxlX3BhdGgpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShzdWJfcmVhZF9vbmx5X3BhdGgpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShzdWJfd3JpdGFibGVfcGF0aCkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHN1Yl9leGVjdXRhYmxlX3BhdGgpKQotCi0gICAgIyBhc3NlcnQgcGVybWlzc2lvbnMgYXMgZXhwZWN0ZWQKLSAgICBzZWxmLmFzc2VydFRydWUoCi0gICAgICAgIHN0YXQuU19JUlVTUiAmIHN0YXQuU19JTU9ERShvcy5zdGF0KHJlYWRfb25seV9wYXRoKS5zdF9tb2RlKSkKLSAgICBzZWxmLmFzc2VydFRydWUoCi0gICAgICAgIHN0YXQuU19JUlVTUiAmIHN0YXQuU19JTU9ERShvcy5zdGF0KHN1Yl9yZWFkX29ubHlfcGF0aCkuc3RfbW9kZSkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKAotICAgICAgICBzdGF0LlNfSVJVU1IgJiBzdGF0LlNfSU1PREUob3Muc3RhdCh3cml0YWJsZV9wYXRoKS5zdF9tb2RlKSkKLSAgICBzZWxmLmFzc2VydFRydWUoCi0gICAgICAgIHN0YXQuU19JV1VTUiAmIHN0YXQuU19JTU9ERShvcy5zdGF0KHdyaXRhYmxlX3BhdGgpLnN0X21vZGUpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgc3RhdC5TX0lSVVNSICYgc3RhdC5TX0lNT0RFKG9zLnN0YXQoc3ViX3dyaXRhYmxlX3BhdGgpLnN0X21vZGUpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgc3RhdC5TX0lXVVNSICYgc3RhdC5TX0lNT0RFKG9zLnN0YXQoc3ViX3dyaXRhYmxlX3BhdGgpLnN0X21vZGUpKQotICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgIHN0YXQuU19JUldYVSwKLSAgICAgICAgICBzdGF0LlNfSVJXWFUgJiBzdGF0LlNfSU1PREUob3Muc3RhdChleGVjdXRhYmxlX3BhdGgpLnN0X21vZGUpKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICBzdGF0LlNfSVJXWFUsCi0gICAgICAgICAgc3RhdC5TX0lSV1hVICYgc3RhdC5TX0lNT0RFKG9zLnN0YXQoc3ViX2V4ZWN1dGFibGVfcGF0aCkuc3RfbW9kZSkpCi0KLSAgZGVmIENyZWF0ZVppcEFyY2hpdmVGcm9tRGlyKHNlbGYsIGRpcl9wYXRoKToKLSAgICB0cnk6Ci0gICAgICBiYXNlX3BhdGggPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0dGVtcGRpcigpLCBzdHIodXVpZC51dWlkNCgpKSkKLSAgICAgIGFyY2hpdmVfcGF0aCA9IHNodXRpbC5tYWtlX2FyY2hpdmUoYmFzZV9wYXRoLCAnemlwJywgZGlyX3BhdGgpCi0gICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoYXJjaGl2ZV9wYXRoKSkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmaWxlLmlzX3ppcGZpbGUoYXJjaGl2ZV9wYXRoKSkKLSAgICBleGNlcHQ6Ci0gICAgICBpZiBvcy5wYXRoLmlzZmlsZShhcmNoaXZlX3BhdGgpOgotICAgICAgICBvcy5yZW1vdmUoYXJjaGl2ZV9wYXRoKQotICAgICAgcmFpc2UKLSAgICByZXR1cm4gYXJjaGl2ZV9wYXRoCi0KLSAgZGVmIHRlc3RSZW1vdmVEaXJXaXRoU3ViRGlyKHNlbGYpOgotICAgIGRlcGVuZGVuY3lfbWFuYWdlcl91dGlsLlJlbW92ZURpcihzZWxmLnRtcF9kaXIpCi0KLSAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYudG1wX2RpcikpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLnN1Yl9kaXIpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5yZWFkX29ubHlfcGF0aCkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLndyaXRhYmxlX3BhdGgpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2ZpbGUoc2VsZi5leGVjdXRhYmxlX3BhdGgpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5zdWJfcmVhZF9vbmx5X3BhdGgpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5zdWJfd3JpdGFibGVfcGF0aCkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmlzZmlsZShzZWxmLnN1Yl9leGVjdXRhYmxlX3BhdGgpKQotCi0gIGRlZiB0ZXN0VW56aXBGaWxlKHNlbGYpOgotICAgIHNlbGYuQXNzZXJ0RXhwZWN0ZWREaXJGaWxlcyhzZWxmLnRtcF9kaXIpCi0gICAgdW56aXBfcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksIHN0cih1dWlkLnV1aWQ0KCkpKQotICAgIGRlcGVuZGVuY3lfbWFuYWdlcl91dGlsLlVuemlwQXJjaGl2ZShzZWxmLmFyY2hpdmVfcGF0aCwgdW56aXBfcGF0aCkKLSAgICBzZWxmLkFzc2VydEV4cGVjdGVkRGlyRmlsZXModW56aXBfcGF0aCkKLSAgICBzZWxmLkFzc2VydEV4cGVjdGVkRGlyRmlsZXMoc2VsZi50bXBfZGlyKQotICAgIGRlcGVuZGVuY3lfbWFuYWdlcl91dGlsLlJlbW92ZURpcih1bnppcF9wYXRoKQotCi0gIGRlZiB0ZXN0VW56aXBGaWxlQ29udGFpbmluZ0xvbmdQYXRoKHNlbGYpOgotICAgIHRyeToKLSAgICAgIGRpcl9wYXRoID0gc2VsZi50bXBfZGlyCi0gICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgICAgIGRpcl9wYXRoID0gdSdcXFxcP1xcJyArIGRpcl9wYXRoCi0KLSAgICAgIGFyY2hpdmVfc3VmZml4ID0gJycKLSAgICAgICMgMjYwIGlzIHRoZSBXaW5kb3dzIEFQSSBwYXRoIGxlbmd0aCBsaW1pdC4KLSAgICAgIHdoaWxlIGxlbihhcmNoaXZlX3N1ZmZpeCkgPCAyNjA6Ci0gICAgICAgIGFyY2hpdmVfc3VmZml4ID0gb3MucGF0aC5qb2luKGFyY2hpdmVfc3VmZml4LCAncmVhbGx5JykKLSAgICAgIGNvbnRlbnRzX2Rpcl9wYXRoID0gb3MucGF0aC5qb2luKGRpcl9wYXRoLCBhcmNoaXZlX3N1ZmZpeCkKLSAgICAgIG9zLm1ha2VkaXJzKGNvbnRlbnRzX2Rpcl9wYXRoKQotICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oY29udGVudHNfZGlyX3BhdGgsICdsb25ncGF0aC50eHQnKQotICAgICAgb3BlbihmaWxlbmFtZSwgJ2EnKS5jbG9zZSgpCi0KLSAgICAgIGJhc2VfcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksIHN0cih1dWlkLnV1aWQ0KCkpKQotICAgICAgYXJjaGl2ZV9wYXRoID0gc2h1dGlsLm1ha2VfYXJjaGl2ZShiYXNlX3BhdGgsICd6aXAnLCBkaXJfcGF0aCkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhhcmNoaXZlX3BhdGgpKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGZpbGUuaXNfemlwZmlsZShhcmNoaXZlX3BhdGgpKQotICAgIGV4Y2VwdDoKLSAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGFyY2hpdmVfcGF0aCk6Ci0gICAgICAgIG9zLnJlbW92ZShhcmNoaXZlX3BhdGgpCi0gICAgICByYWlzZQotCi0gICAgdW56aXBfcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksIHN0cih1dWlkLnV1aWQ0KCkpKQotICAgIGRlcGVuZGVuY3lfbWFuYWdlcl91dGlsLlVuemlwQXJjaGl2ZShhcmNoaXZlX3BhdGgsIHVuemlwX3BhdGgpCi0gICAgZGVwZW5kZW5jeV9tYW5hZ2VyX3V0aWwuUmVtb3ZlRGlyKHVuemlwX3BhdGgpCi0KLSAgZGVmIHRlc3RVbnppcEZpbGVGYWlsdXJlKHNlbGYpOgotICAgICMgemlwZmlsZSBpcyBub3QgdXNlZCBvbiBNYWNPUy4gU2VlIGNyYnVnLmNvbS83MDAwOTcuCi0gICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2RhcndpbicpOgotICAgICAgcmV0dXJuCi0gICAgdW56aXBfcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksIHN0cih1dWlkLnV1aWQ0KCkpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHModW56aXBfcGF0aCkpCi0gICAgd2l0aCBtb2NrLnBhdGNoKAotICAgICAgICAnZGVwZW5kZW5jeV9tYW5hZ2VyLmRlcGVuZGVuY3lfbWFuYWdlcl91dGlsLnppcGZpbGUuWmlwRmlsZS5leHRyYWN0YWxsJyAgIyBweWxpbnQ6IGRpc2FibGU9bGluZS10b28tbG9uZwotICAgICAgICApIGFzIHppcGZpbGVfbW9jazoKLSAgICAgIHppcGZpbGVfbW9jay5zaWRlX2VmZmVjdCA9IElPRXJyb3IKLSAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgIElPRXJyb3IsIGRlcGVuZGVuY3lfbWFuYWdlcl91dGlsLlVuemlwQXJjaGl2ZSwgc2VsZi5hcmNoaXZlX3BhdGgsCi0gICAgICAgICAgdW56aXBfcGF0aCkKLSAgICBzZWxmLkFzc2VydEV4cGVjdGVkRGlyRmlsZXMoc2VsZi50bXBfZGlyKQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHModW56aXBfcGF0aCkpCi0KLSAgZGVmIHRlc3RWZXJpZnlTYWZlQXJjaGl2ZVBhc3NlcyhzZWxmKToKLSAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShzZWxmLmFyY2hpdmVfcGF0aCkgYXMgYXJjaGl2ZToKLSAgICAgIGRlcGVuZGVuY3lfbWFuYWdlcl91dGlsLlZlcmlmeVNhZmVBcmNoaXZlKGFyY2hpdmUpCi0KLSAgZGVmIHRlc3RWZXJpZnlTYWZlQXJjaGl2ZUZhaWxzT25SZWxhdGl2ZVBhdGhXaXRoUGFyZGlyKHNlbGYpOgotICAgIHRtcF9maWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkKLSAgICB0bXBfZmlsZV9uYW1lID0gdG1wX2ZpbGUubmFtZQotICAgIHRtcF9maWxlLndyaXRlKCdCYWQgZmlsZSEnKQotICAgIHRtcF9maWxlLmNsb3NlKCkKLSAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShzZWxmLmFyY2hpdmVfcGF0aCwgJ3cnKSBhcyBhcmNoaXZlOgotICAgICAgYXJjaGl2ZS53cml0ZSh0bXBfZmlsZV9uYW1lLCAnLi4vLi4vZm9vJykKLSAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgIGV4Y2VwdGlvbnMuQXJjaGl2ZUVycm9yLCBkZXBlbmRlbmN5X21hbmFnZXJfdXRpbC5WZXJpZnlTYWZlQXJjaGl2ZSwKLSAgICAgICAgICBhcmNoaXZlKQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyL2V4Y2VwdGlvbnMucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyL2V4Y2VwdGlvbnMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ODYzZGIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9leGNlcHRpb25zLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1mcm9tIHB5X3V0aWxzIGltcG9ydCBjbG91ZF9zdG9yYWdlCi0KLQotQ2xvdWRTdG9yYWdlRXJyb3IgPSBjbG91ZF9zdG9yYWdlLkNsb3VkU3RvcmFnZUVycm9yCi0KLQotY2xhc3MgVW5zdXBwb3J0ZWRDb25maWdGb3JtYXRFcnJvcihWYWx1ZUVycm9yKToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZ190eXBlLCBjb25maWdfZmlsZSk6Ci0gICAgaWYgbm90IGNvbmZpZ190eXBlOgotICAgICAgbWVzc2FnZSA9ICgnVGhlIGpzb24gZmlsZSBhdCAlcyBpcyB1bnN1cHBvcnRlZCBieSB0aGUgZGVwZW5kZW5jeV9tYW5hZ2VyICcKLSAgICAgICAgICAgICAgICAgJ2R1ZSB0byBubyBzcGVjaWZpZWQgY29uZmlnIHR5cGUnICUgY29uZmlnX2ZpbGUpCi0gICAgZWxzZToKLSAgICAgIG1lc3NhZ2UgPSAoJ1RoZSBqc29uIGZpbGUgYXQgJXMgaGFzIGNvbmZpZyB0eXBlICVzLCB3aGljaCBpcyB1bnN1cHBvcnRlZCAnCi0gICAgICAgICAgICAgICAgICdieSB0aGUgZGVwZW5kZW5jeSBtYW5hZ2VyLicgJSAoY29uZmlnX2ZpbGUsIGNvbmZpZ190eXBlKSkKLSAgICBzdXBlcihVbnN1cHBvcnRlZENvbmZpZ0Zvcm1hdEVycm9yLCBzZWxmKS5fX2luaXRfXyhtZXNzYWdlKQotCi0KLWNsYXNzIEVtcHR5Q29uZmlnRXJyb3IoVmFsdWVFcnJvcik6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX3BhdGgpOgotICAgIHN1cGVyKEVtcHR5Q29uZmlnRXJyb3IsIHNlbGYpLl9faW5pdF9fKCdFbXB0eSBjb25maWcgYXQgJXMuJyAlIGZpbGVfcGF0aCkKLQotCi1jbGFzcyBGaWxlTm90Rm91bmRFcnJvcihFeGNlcHRpb24pOgotICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9wYXRoKToKLSAgICBzdXBlcihGaWxlTm90Rm91bmRFcnJvciwgc2VsZikuX19pbml0X18oJ05vIGZpbGUgZm91bmQgYXQgJXMnICUgZmlsZV9wYXRoKQotCi0KLWNsYXNzIE5vUGF0aEZvdW5kRXJyb3IoRXhjZXB0aW9uKToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGRlcGVuZGVuY3ksIHBsYXRmb3JtKToKLSAgICBzdXBlcihOb1BhdGhGb3VuZEVycm9yLCBzZWxmKS5fX2luaXRfXygKLSAgICAgICAgJ05vIGZpbGUgY291bGQgYmUgZm91bmQgbG9jYWxseSwgYW5kIG5vIGZpbGUgdG8gZG93bmxvYWQgZnJvbSBjbG91ZCAnCi0gICAgICAgICdzdG9yYWdlIGZvciAlcyBvbiBwbGF0Zm9ybSAlcycgJSAoZGVwZW5kZW5jeSwgcGxhdGZvcm0pKQotCi0KLWNsYXNzIFJlYWRXcml0ZUVycm9yKEV4Y2VwdGlvbik6Ci0gIHBhc3MKLQotCi1jbGFzcyBDbG91ZFN0b3JhZ2VVcGxvYWRDb25mbGljdEVycm9yKENsb3VkU3RvcmFnZUVycm9yKToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1Y2tldCwgcGF0aCk6Ci0gICAgc3VwZXIoQ2xvdWRTdG9yYWdlVXBsb2FkQ29uZmxpY3RFcnJvciwgc2VsZikuX19pbml0X18oCi0gICAgICAgICdGaWxlIGxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzIGluIGJ1Y2tldCAlcycgJSAocGF0aCwgYnVja2V0KSkKLQotCi1jbGFzcyBBcmNoaXZlRXJyb3IoRXhjZXB0aW9uKToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6Ci0gICAgc3VwZXIoQXJjaGl2ZUVycm9yLCBzZWxmKS5fX2luaXRfXyhtc2cpCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvbG9jYWxfcGF0aF9pbmZvLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9sb2NhbF9wYXRoX2luZm8ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMDNlOGYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci9sb2NhbF9wYXRoX2luZm8ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotCi0KLWNsYXNzIExvY2FsUGF0aEluZm8ob2JqZWN0KToKLQotICBkZWYgX19pbml0X18oc2VsZiwgcGF0aF9wcmlvcml0eV9ncm91cHMpOgotICAgIHNlbGYuX3BhdGhfcHJpb3JpdHlfZ3JvdXBzID0gc2VsZi5fUGFyc2VMb2NhbFBhdGhzKHBhdGhfcHJpb3JpdHlfZ3JvdXBzKQotCi0gIGRlZiBHZXRMb2NhbFBhdGgoc2VsZik6Ci0gICAgZm9yIHByaW9yaXR5X2dyb3VwIGluIHNlbGYuX3BhdGhfcHJpb3JpdHlfZ3JvdXBzOgotICAgICAgcHJpb3JpdHlfZ3JvdXAgPSBmaWx0ZXIob3MucGF0aC5leGlzdHMsIHByaW9yaXR5X2dyb3VwKQotICAgICAgaWYgbm90IHByaW9yaXR5X2dyb3VwOgotICAgICAgICBjb250aW51ZQotICAgICAgcmV0dXJuIG1heChwcmlvcml0eV9ncm91cCwga2V5PWxhbWJkYSBwYXRoOiBvcy5zdGF0KHBhdGgpLnN0X210aW1lKQotICAgIHJldHVybiBOb25lCi0KLSAgZGVmIElzUGF0aEluTG9jYWxQYXRocyhzZWxmLCBwYXRoKToKLSAgICByZXR1cm4gYW55KAotICAgICAgICBwYXRoIGluIHByaW9yaXR5X2dyb3VwIGZvciBwcmlvcml0eV9ncm91cCBpbiBzZWxmLl9wYXRoX3ByaW9yaXR5X2dyb3VwcykKLQotICBkZWYgVXBkYXRlKHNlbGYsIGxvY2FsX3BhdGhfaW5mbyk6Ci0gICAgaWYgbm90IGxvY2FsX3BhdGhfaW5mbzoKLSAgICAgIHJldHVybgotICAgIGZvciBwcmlvcml0eV9ncm91cCBpbiBsb2NhbF9wYXRoX2luZm8uX3BhdGhfcHJpb3JpdHlfZ3JvdXBzOgotICAgICAgZ3JvdXBfbGlzdCA9IFtdCi0gICAgICBmb3IgcGF0aCBpbiBwcmlvcml0eV9ncm91cDoKLSAgICAgICAgaWYgbm90IHNlbGYuSXNQYXRoSW5Mb2NhbFBhdGhzKHBhdGgpOgotICAgICAgICAgIGdyb3VwX2xpc3QuYXBwZW5kKHBhdGgpCi0gICAgICBpZiBncm91cF9saXN0OgotICAgICAgICBzZWxmLl9wYXRoX3ByaW9yaXR5X2dyb3Vwcy5hcHBlbmQoZ3JvdXBfbGlzdCkKLQotICBAc3RhdGljbWV0aG9kCi0gIGRlZiBfUGFyc2VMb2NhbFBhdGhzKGxvY2FsX3BhdGhzKToKLSAgICBpZiBub3QgbG9jYWxfcGF0aHM6Ci0gICAgICByZXR1cm4gW10KLSAgICByZXR1cm4gW1tlXSBpZiBpc2luc3RhbmNlKGUsIGJhc2VzdHJpbmcpIGVsc2UgZSBmb3IgZSBpbiBsb2NhbF9wYXRoc10KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvbWFuYWdlci5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvbWFuYWdlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ViYjQ2ZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvZGVwZW5kZW5jeV9tYW5hZ2VyL21hbmFnZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNDYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi0KLWZyb20gZGVwZW5kZW5jeV9tYW5hZ2VyIGltcG9ydCBiYXNlX2NvbmZpZwotZnJvbSBkZXBlbmRlbmN5X21hbmFnZXIgaW1wb3J0IGV4Y2VwdGlvbnMKLQotCi1ERUZBVUxUX1RZUEUgPSAnZGVmYXVsdCcKLQotCi1jbGFzcyBEZXBlbmRlbmN5TWFuYWdlcihvYmplY3QpOgotICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlncywgc3VwcG9ydGVkX2NvbmZpZ190eXBlcz1Ob25lKToKLSAgICAiIiJNYW5hZ2VzIGZpbGUgZGVwZW5kZW5jaWVzIGZvdW5kIGxvY2FsbHkgb3IgaW4gY2xvdWRfc3RvcmFnZS4KLQotICAgIEFyZ3M6Ci0gICAgICAgIGNvbmZpZ3M6IEEgbGlzdCBvZiBpbnN0YW5jZXMgb2YgQmFzZUNvbmZpZyBvciBpdCdzIHN1YmNsYXNzZXMsIHBhc3NlZAotICAgICAgICAgICAgaW4gZGVjcmVhc2luZyBvcmRlciBvZiBwcmVjZWRlbmNlLgotICAgICAgICBzdXBwb3J0ZWRfY29uZmlnX3R5cGVzOiBBIGxpc3Qgb2Ygd2hpdGVsaXN0ZWQgY29uZmlnX3R5cGVzLgotICAgICAgICAgICAgTm8gcmVzdHJpY3Rpb25zIGlmIE5vbmUgaXMgc3BlY2lmaWVkLgotCi0gICAgUmFpc2VzOgotICAgICAgICBWYWx1ZUVycm9yOiBJZiB8Y29uZmlnc3wgaXMgbm90IGEgbGlzdCBvZiBpbnN0YW5jZXMgb2YgQmFzZUNvbmZpZyBvcgotICAgICAgICAgICAgaXRzIHN1YmNsYXNzZXMuCi0gICAgICAgIFVuc3VwcG9ydGVkQ29uZmlnRm9ybWF0RXJyb3I6IElmIHN1cHBvcnRlZF9jb25maWdfdHlwZXMgaXMgc3BlY2lmaWVkIGFuZAotICAgICAgICAgICAgY29uZmlncyBjb250YWlucyBhIGNvbmZpZyBub3QgaW4gdGhlIHN1cHBvcnRlZCBjb25maWdfdHlwZXMuCi0KLSAgICBFeGFtcGxlOiBEZXBlbmRlbmN5TWFuYWdlcihbY29uZmlnMSwgY29uZmlnMiwgY29uZmlnM10pCi0gICAgICAgIE5vIHJlcXVpcmVtZW50cyBvbiB0aGUgdHlwZSBvZiBDb25maWcsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgaGF2ZQotICAgICAgICBsb2NhbCBmaWxlcyBmb3IgdGhlIHNhbWUgcGxhdGZvcm0gd2lsbCBmaXJzdCBsb29rIGluIHRob3NlIGZyb20KLSAgICAgICAgY29uZmlnMSwgdGhlbiB0aG9zZSBmcm9tIGNvbmZpZzIsIGFuZCBmaW5hbGx5IHRob3NlIGZyb20gY29uZmlnMy4KLSAgICAiIiIKLSAgICBpZiBjb25maWdzIGlzIE5vbmUgb3IgdHlwZShjb25maWdzKSAhPSBsaXN0OgotICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgICAnTXVzdCBzdXBwbHkgYSBsaXN0IG9mIGNvbmZpZyBmaWxlcyB0byBEZXBlbmRlbmN5TWFuYWdlcicpCi0gICAgIyBzZWxmLl9sb29rdXBfZGljdCBpcyBhIGRpY3Rpb25hcnkgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLSAgICAjIHsgZGVwZW5kZW5jeTE6IHtwbGF0Zm9ybTE6IGRlcGVuZGVuY3lfaW5mbzEsCi0gICAgIyAgICAgICAgICAgICAgICAgcGxhdGZvcm0yOiBkZXBlbmRlbmN5X2luZm8yfQotICAgICMgICBkZXBlbmRlbmN5Mjoge3BsYXRmb3JtMTogZGVwZW5kZW5jeV9pbmZvMywKLSAgICAjICAgICAgICAgICAgICAgICAgLi4ufQotICAgICMgICAuLi59Ci0gICAgIwotICAgICMgV2hlcmUgdGhlIGRlcGVuZGVuY2llcyBhbmQgcGxhdGZvcm1zIGFyZSBzdHJpbmdzLCBhbmQgdGhlCi0gICAgIyBkZXBlbmRlbmN5X2luZm8ncyBhcmUgRGVwZW5kZW5jeUluZm8gaW5zdGFuY2VzLgotICAgIHNlbGYuX2xvb2t1cF9kaWN0ID0ge30KLSAgICBzZWxmLnN1cHBvcnRlZF9jb25maWdzID0gc3VwcG9ydGVkX2NvbmZpZ190eXBlcyBvciBbXQotICAgIGZvciBjb25maWcgaW4gY29uZmlnczoKLSAgICAgIHNlbGYuX1VwZGF0ZURlcGVuZGVuY2llcyhjb25maWcpCi0KLQotICBkZWYgRmV0Y2hQYXRoV2l0aFZlcnNpb24oc2VsZiwgZGVwZW5kZW5jeSwgcGxhdGZvcm0pOgotICAgICIiIkdldCBhIHBhdGggdG8gYW4gZXhlY3V0YWJsZSBmb3IgfGRlcGVuZGVuY3l8LCBkb3dubG9hZGluZyBhcyBuZWVkZWQuCi0KLSAgICBBIHBhdGggdG8gYSBkZWZhdWx0IGV4ZWN1dGFibGUgbWF5IGJlIHJldHVybmVkIGlmIGEgcGxhdGZvcm0gc3BlY2lmaWMKLSAgICB2ZXJzaW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZyhzKS4KLQotICAgIEFyZ3M6Ci0gICAgICAgIGRlcGVuZGVuY3k6IE5hbWUgb2YgdGhlIGRlc2lyZWQgZGVwZW5kZW5jeSwgYXMgZ2l2ZW4gaW4gdGhlIGNvbmZpZyhzKQotICAgICAgICAgICAgdXNlZCBpbiB0aGlzIERlcGVuZGVuY3lNYW5hZ2VyLgotICAgICAgICBwbGF0Zm9ybTogTmFtZSBvZiB0aGUgcGxhdGZvcm0gdGhlIGRlcGVuZGVuY3kgd2lsbCBydW4gb24uIE9mdGVuIG9mIHRoZQotICAgICAgICAgICAgZm9ybSAnb3NfYXJjaGl0ZWN0dXJlJy4gTXVzdCBtYXRjaCB0aG9zZSBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZyhzKQotICAgICAgICAgICAgdXNlZCBpbiB0aGlzIERlcGVuZGVuY3lNYW5hZ2VyLgotICAgIFJldHVybnM6Ci0gICAgICAgIDxwYXRoPiwgPHZlcnNpb24+IHdoZXJlOgotICAgICAgICAgICAgPHBhdGg+IGlzIHRoZSBwYXRoIHRvIGFuIGV4ZWN1dGFibGUgb2YgfGRlcGVuZGVuY3l8IHRoYXQgd2lsbCBydW4KLSAgICAgICAgICAgIG9uIHxwbGF0Zm9ybXwsIGRvd25sb2FkaW5nIGZyb20gY2xvdWQgc3RvcmFnZSBpZiBuZWVkZWQuCi0gICAgICAgICAgICA8dmVyc2lvbj4gaXMgdGhlIHZlcnNpb24gb2YgdGhlIGV4ZWN1dGFibGUgYXQgPHBhdGg+IG9yIE5vbmUuCi0KLSAgICBSYWlzZXM6Ci0gICAgICAgIE5vUGF0aEZvdW5kRXJyb3I6IElmIGEgbG9jYWwgY29weSBvZiB0aGUgZXhlY3V0YWJsZSBjYW5ub3QgYmUgZm91bmQgYW5kCi0gICAgICAgICAgICBhIHJlbW90ZSBwYXRoIGNvdWxkIG5vdCBiZSBkb3dubG9hZGVkIGZyb20gY2xvdWRfc3RvcmFnZS4KLSAgICAgICAgQ3JlZGVudGlhbHNFcnJvcjogSWYgY2xvdWRfc3RvcmFnZSBjcmVkZW50aWFscyBhcmVuJ3QgY29uZmlndXJlZC4KLSAgICAgICAgUGVybWlzc2lvbkVycm9yOiBJZiBjbG91ZF9zdG9yYWdlIGNyZWRlbnRpYWxzIGFyZSBjb25maWd1cmVkLCBidXQgbm90Ci0gICAgICAgICAgICB3aXRoIGFuIGFjY291bnQgdGhhdCBoYXMgcGVybWlzc2lvbiB0byBkb3dubG9hZCB0aGUgcmVtb3RlIGZpbGUuCi0gICAgICAgIE5vdEZvdW5kRXJyb3I6IElmIHRoZSByZW1vdGUgZmlsZSBkb2VzIG5vdCBleGlzdCB3aGVyZSBleHBlY3RlZCBpbgotICAgICAgICAgICAgY2xvdWRfc3RvcmFnZS4KLSAgICAgICAgU2VydmVyRXJyb3I6IElmIGFuIGludGVybmFsIHNlcnZlciBlcnJvciBpcyBoaXQgd2hpbGUgZG93bmxvYWRpbmcgdGhlCi0gICAgICAgICAgICByZW1vdGUgZmlsZS4KLSAgICAgICAgQ2xvdWRTdG9yYWdlRXJyb3I6IElmIGFub3RoZXIgZXJyb3Igb2NjdXJlZCB3aGlsZSBkb3dubG9hZGluZyB0aGUgcmVtb3RlCi0gICAgICAgICAgICBwYXRoLgotICAgICAgICBGaWxlTm90Rm91bmRFcnJvcjogSWYgYW4gYXR0ZW1wdGVkIGRvd25sb2FkIHdhcyBvdGhlcndpc2UgdW5zdWNjZXNzZnVsLgotCi0gICAgIiIiCi0gICAgZGVwZW5kZW5jeV9pbmZvID0gc2VsZi5fR2V0RGVwZW5kZW5jeUluZm8oZGVwZW5kZW5jeSwgcGxhdGZvcm0pCi0gICAgaWYgbm90IGRlcGVuZGVuY3lfaW5mbzoKLSAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuTm9QYXRoRm91bmRFcnJvcihkZXBlbmRlbmN5LCBwbGF0Zm9ybSkKLSAgICBwYXRoID0gZGVwZW5kZW5jeV9pbmZvLkdldExvY2FsUGF0aCgpCi0gICAgdmVyc2lvbiA9IE5vbmUKLSAgICBpZiBub3QgcGF0aCBvciBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6Ci0gICAgICBwYXRoID0gZGVwZW5kZW5jeV9pbmZvLkdldFJlbW90ZVBhdGgoKQotICAgICAgaWYgbm90IHBhdGggb3Igbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgotICAgICAgICByYWlzZSBleGNlcHRpb25zLk5vUGF0aEZvdW5kRXJyb3IoZGVwZW5kZW5jeSwgcGxhdGZvcm0pCi0gICAgICB2ZXJzaW9uID0gZGVwZW5kZW5jeV9pbmZvLkdldFJlbW90ZVBhdGhWZXJzaW9uKCkKLSAgICByZXR1cm4gcGF0aCwgdmVyc2lvbgotCi0gIGRlZiBGZXRjaFBhdGgoc2VsZiwgZGVwZW5kZW5jeSwgcGxhdGZvcm0pOgotICAgICIiIkdldCBhIHBhdGggdG8gYW4gZXhlY3V0YWJsZSBmb3IgfGRlcGVuZGVuY3l8LCBkb3dubG9hZGluZyBhcyBuZWVkZWQuCi0KLSAgICBBIHBhdGggdG8gYSBkZWZhdWx0IGV4ZWN1dGFibGUgbWF5IGJlIHJldHVybmVkIGlmIGEgcGxhdGZvcm0gc3BlY2lmaWMKLSAgICB2ZXJzaW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZyhzKS4KLQotICAgIEFyZ3M6Ci0gICAgICAgIGRlcGVuZGVuY3k6IE5hbWUgb2YgdGhlIGRlc2lyZWQgZGVwZW5kZW5jeSwgYXMgZ2l2ZW4gaW4gdGhlIGNvbmZpZyhzKQotICAgICAgICAgICAgdXNlZCBpbiB0aGlzIERlcGVuZGVuY3lNYW5hZ2VyLgotICAgICAgICBwbGF0Zm9ybTogTmFtZSBvZiB0aGUgcGxhdGZvcm0gdGhlIGRlcGVuZGVuY3kgd2lsbCBydW4gb24uIE9mdGVuIG9mIHRoZQotICAgICAgICAgICAgZm9ybSAnb3NfYXJjaGl0ZWN0dXJlJy4gTXVzdCBtYXRjaCB0aG9zZSBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZyhzKQotICAgICAgICAgICAgdXNlZCBpbiB0aGlzIERlcGVuZGVuY3lNYW5hZ2VyLgotICAgIFJldHVybnM6Ci0gICAgICAgIEEgcGF0aCB0byBhbiBleGVjdXRhYmxlIG9mIHxkZXBlbmRlbmN5fCB0aGF0IHdpbGwgcnVuIG9uIHxwbGF0Zm9ybXwsCi0gICAgICAgIGRvd25sb2FkaW5nIGZyb20gY2xvdWQgc3RvcmFnZSBpZiBuZWVkZWQuCi0KLSAgICBSYWlzZXM6Ci0gICAgICAgIE5vUGF0aEZvdW5kRXJyb3I6IElmIGEgbG9jYWwgY29weSBvZiB0aGUgZXhlY3V0YWJsZSBjYW5ub3QgYmUgZm91bmQgYW5kCi0gICAgICAgICAgICBhIHJlbW90ZSBwYXRoIGNvdWxkIG5vdCBiZSBkb3dubG9hZGVkIGZyb20gY2xvdWRfc3RvcmFnZS4KLSAgICAgICAgQ3JlZGVudGlhbHNFcnJvcjogSWYgY2xvdWRfc3RvcmFnZSBjcmVkZW50aWFscyBhcmVuJ3QgY29uZmlndXJlZC4KLSAgICAgICAgUGVybWlzc2lvbkVycm9yOiBJZiBjbG91ZF9zdG9yYWdlIGNyZWRlbnRpYWxzIGFyZSBjb25maWd1cmVkLCBidXQgbm90Ci0gICAgICAgICAgICB3aXRoIGFuIGFjY291bnQgdGhhdCBoYXMgcGVybWlzc2lvbiB0byBkb3dubG9hZCB0aGUgcmVtb3RlIGZpbGUuCi0gICAgICAgIE5vdEZvdW5kRXJyb3I6IElmIHRoZSByZW1vdGUgZmlsZSBkb2VzIG5vdCBleGlzdCB3aGVyZSBleHBlY3RlZCBpbgotICAgICAgICAgICAgY2xvdWRfc3RvcmFnZS4KLSAgICAgICAgU2VydmVyRXJyb3I6IElmIGFuIGludGVybmFsIHNlcnZlciBlcnJvciBpcyBoaXQgd2hpbGUgZG93bmxvYWRpbmcgdGhlCi0gICAgICAgICAgICByZW1vdGUgZmlsZS4KLSAgICAgICAgQ2xvdWRTdG9yYWdlRXJyb3I6IElmIGFub3RoZXIgZXJyb3Igb2NjdXJlZCB3aGlsZSBkb3dubG9hZGluZyB0aGUgcmVtb3RlCi0gICAgICAgICAgICBwYXRoLgotICAgICAgICBGaWxlTm90Rm91bmRFcnJvcjogSWYgYW4gYXR0ZW1wdGVkIGRvd25sb2FkIHdhcyBvdGhlcndpc2UgdW5zdWNjZXNzZnVsLgotCi0gICAgIiIiCi0gICAgcGF0aCwgXyA9IHNlbGYuRmV0Y2hQYXRoV2l0aFZlcnNpb24oZGVwZW5kZW5jeSwgcGxhdGZvcm0pCi0gICAgcmV0dXJuIHBhdGgKLQotICBkZWYgTG9jYWxQYXRoKHNlbGYsIGRlcGVuZGVuY3ksIHBsYXRmb3JtKToKLSAgICAiIiJHZXQgYSBwYXRoIHRvIGEgbG9jYWxseSBzdG9yZWQgZXhlY3V0YWJsZSBmb3IgfGRlcGVuZGVuY3l8LgotCi0gICAgQSBwYXRoIHRvIGEgZGVmYXVsdCBleGVjdXRhYmxlIG1heSBiZSByZXR1cm5lZCBpZiBhIHBsYXRmb3JtIHNwZWNpZmljCi0gICAgdmVyc2lvbiBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBjb25maWcocykuCi0gICAgV2lsbCBub3QgZG93bmxvYWQgdGhlIGV4ZWN1dGFibGUuCi0KLSAgICBBcmdzOgotICAgICAgICBkZXBlbmRlbmN5OiBOYW1lIG9mIHRoZSBkZXNpcmVkIGRlcGVuZGVuY3ksIGFzIGdpdmVuIGluIHRoZSBjb25maWcocykKLSAgICAgICAgICAgIHVzZWQgaW4gdGhpcyBEZXBlbmRlbmN5TWFuYWdlci4KLSAgICAgICAgcGxhdGZvcm06IE5hbWUgb2YgdGhlIHBsYXRmb3JtIHRoZSBkZXBlbmRlbmN5IHdpbGwgcnVuIG9uLiBPZnRlbiBvZiB0aGUKLSAgICAgICAgICAgIGZvcm0gJ29zX2FyY2hpdGVjdHVyZScuIE11c3QgbWF0Y2ggdGhvc2Ugc3BlY2lmaWVkIGluIHRoZSBjb25maWcocykKLSAgICAgICAgICAgIHVzZWQgaW4gdGhpcyBEZXBlbmRlbmN5TWFuYWdlci4KLSAgICBSZXR1cm5zOgotICAgICAgICBBIHBhdGggdG8gYW4gZXhlY3V0YWJsZSBmb3IgfGRlcGVuZGVuY3l8IHRoYXQgd2lsbCBydW4gb24gfHBsYXRmb3JtfC4KLQotICAgIFJhaXNlczoKLSAgICAgICAgTm9QYXRoRm91bmRFcnJvcjogSWYgYSBsb2NhbCBjb3B5IG9mIHRoZSBleGVjdXRhYmxlIGNhbm5vdCBiZSBmb3VuZC4KLSAgICAiIiIKLSAgICBkZXBlbmRlbmN5X2luZm8gPSBzZWxmLl9HZXREZXBlbmRlbmN5SW5mbyhkZXBlbmRlbmN5LCBwbGF0Zm9ybSkKLSAgICBpZiBub3QgZGVwZW5kZW5jeV9pbmZvOgotICAgICAgcmFpc2UgZXhjZXB0aW9ucy5Ob1BhdGhGb3VuZEVycm9yKGRlcGVuZGVuY3ksIHBsYXRmb3JtKQotICAgIGxvY2FsX3BhdGggPSBkZXBlbmRlbmN5X2luZm8uR2V0TG9jYWxQYXRoKCkKLSAgICBpZiBub3QgbG9jYWxfcGF0aCBvciBub3Qgb3MucGF0aC5leGlzdHMobG9jYWxfcGF0aCk6Ci0gICAgICByYWlzZSBleGNlcHRpb25zLk5vUGF0aEZvdW5kRXJyb3IoZGVwZW5kZW5jeSwgcGxhdGZvcm0pCi0gICAgcmV0dXJuIGxvY2FsX3BhdGgKLQotICBkZWYgUHJlZmV0Y2hQYXRocyhzZWxmLCBwbGF0Zm9ybSwgZGVwZW5kZW5jaWVzPU5vbmUsIGNsb3VkX3N0b3JhZ2VfcmV0cmllcz0zKToKLSAgICBpZiBub3QgZGVwZW5kZW5jaWVzOgotICAgICAgZGVwZW5kZW5jaWVzID0gc2VsZi5fbG9va3VwX2RpY3Qua2V5cygpCi0KLSAgICBza2lwcGVkX2RlcHMgPSBbXQotICAgIGZvdW5kX2RlcHMgPSBbXQotICAgIG1pc3NpbmdfZGVwcyA9IFtdCi0gICAgZm9yIGRlcGVuZGVuY3kgaW4gZGVwZW5kZW5jaWVzOgotICAgICAgZGVwZW5kZW5jeV9pbmZvID0gc2VsZi5fR2V0RGVwZW5kZW5jeUluZm8oZGVwZW5kZW5jeSwgcGxhdGZvcm0pCi0gICAgICBpZiBub3QgZGVwZW5kZW5jeV9pbmZvOgotICAgICAgICAjIFRoZSBkZXBlbmRlbmN5IGlzIG9ubHkgY29uZmlndXJlZCBmb3Igb3RoZXIgcGxhdGZvcm1zLgotICAgICAgICBza2lwcGVkX2RlcHMuYXBwZW5kKGRlcGVuZGVuY3kpCi0gICAgICAgIGNvbnRpbnVlCi0gICAgICBsb2NhbF9wYXRoID0gZGVwZW5kZW5jeV9pbmZvLkdldExvY2FsUGF0aCgpCi0gICAgICBpZiBsb2NhbF9wYXRoOgotICAgICAgICBmb3VuZF9kZXBzLmFwcGVuZChkZXBlbmRlbmN5KQotICAgICAgICBjb250aW51ZQotICAgICAgZmV0Y2hlZF9wYXRoID0gTm9uZQotICAgICAgY2xvdWRfc3RvcmFnZV9lcnJvciA9IE5vbmUKLSAgICAgIGZvciBfIGluIHJhbmdlKDAsIGNsb3VkX3N0b3JhZ2VfcmV0cmllcyArIDEpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgZmV0Y2hlZF9wYXRoID0gZGVwZW5kZW5jeV9pbmZvLkdldFJlbW90ZVBhdGgoKQotICAgICAgICBleGNlcHQgZXhjZXB0aW9ucy5DbG91ZFN0b3JhZ2VFcnJvciBhcyBlOgotICAgICAgICAgIGNsb3VkX3N0b3JhZ2VfZXJyb3IgPSBlCi0gICAgICAgIGJyZWFrCi0gICAgICBpZiBmZXRjaGVkX3BhdGg6Ci0gICAgICAgIGZvdW5kX2RlcHMuYXBwZW5kKGRlcGVuZGVuY3kpCi0gICAgICBlbHNlOgotICAgICAgICBtaXNzaW5nX2RlcHMuYXBwZW5kKGRlcGVuZGVuY3kpCi0gICAgICAgIGxvZ2dpbmcuZXJyb3IoCi0gICAgICAgICAgICAnRGVwZW5kZW5jeSAlcyBjb3VsZCBub3QgYmUgZm91bmQgb3IgZmV0Y2hlZCBmcm9tIGNsb3VkIHN0b3JhZ2UgZm9yJwotICAgICAgICAgICAgJyBwbGF0Zm9ybSAlcy4gRXJyb3I6ICVzJywgZGVwZW5kZW5jeSwgcGxhdGZvcm0sCi0gICAgICAgICAgICBjbG91ZF9zdG9yYWdlX2Vycm9yKQotICAgIGlmIG1pc3NpbmdfZGVwczoKLSAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuTm9QYXRoRm91bmRFcnJvcignLCAnLmpvaW4obWlzc2luZ19kZXBzKSwgcGxhdGZvcm0pCi0gICAgcmV0dXJuIChmb3VuZF9kZXBzLCBza2lwcGVkX2RlcHMpCi0KLSAgZGVmIF9VcGRhdGVEZXBlbmRlbmNpZXMoc2VsZiwgY29uZmlnKToKLSAgICAiIiJBZGQgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gc3RvcmVkIGluIHxjb25maWd8IHRvIHRoaXMgaW5zdGFuY2UuCi0KLSAgICBBcmdzOgotICAgICAgICBjb25maWc6IEFuIGluc3RhbmNlcyBvZiBCYXNlQ29uZmlnIG9yIGEgc3ViY2xhc3Nlcy4KLQotICAgIFJhaXNlczoKLSAgICAgICAgVW5zdXBwb3J0ZWRDb25maWdGb3JtYXRFcnJvcjogSWYgc3VwcG9ydGVkX2NvbmZpZ190eXBlcyB3YXMgc3BlY2lmaWVkCi0gICAgICAgIGFuZCBjb25maWcgaXMgbm90IGluIHRoZSBzdXBwb3J0ZWQgY29uZmlnX3R5cGVzLgotICAgICIiIgotICAgIGlmIG5vdCBpc2luc3RhbmNlKGNvbmZpZywgYmFzZV9jb25maWcuQmFzZUNvbmZpZyk6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCdNdXN0IHVzZSBhIEJhc2VDb25maWcgb3Igc3ViY2xhc3MgaW5zdGFuY2Ugd2l0aCB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAnRGVwZW5kZW5jeU1hbmFnZXIuJykKLSAgICBpZiAoc2VsZi5zdXBwb3J0ZWRfY29uZmlncyBhbmQKLSAgICAgICAgY29uZmlnLkdldENvbmZpZ1R5cGUoKSBub3QgaW4gc2VsZi5zdXBwb3J0ZWRfY29uZmlncyk6Ci0gICAgICByYWlzZSBleGNlcHRpb25zLlVuc3VwcG9ydGVkQ29uZmlnRm9ybWF0RXJyb3IoY29uZmlnLkdldENvbmZpZ1R5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuY29uZmlnX3BhdGgpCi0gICAgZm9yIGRlcF9pbmZvIGluIGNvbmZpZy5JdGVyRGVwZW5kZW5jeUluZm8oKToKLSAgICAgIGRlcGVuZGVuY3kgPSBkZXBfaW5mby5kZXBlbmRlbmN5Ci0gICAgICBwbGF0Zm9ybSA9IGRlcF9pbmZvLnBsYXRmb3JtCi0gICAgICBpZiBkZXBlbmRlbmN5IG5vdCBpbiBzZWxmLl9sb29rdXBfZGljdDoKLSAgICAgICAgc2VsZi5fbG9va3VwX2RpY3RbZGVwZW5kZW5jeV0gPSB7fQotICAgICAgaWYgcGxhdGZvcm0gbm90IGluIHNlbGYuX2xvb2t1cF9kaWN0W2RlcGVuZGVuY3ldOgotICAgICAgICBzZWxmLl9sb29rdXBfZGljdFtkZXBlbmRlbmN5XVtwbGF0Zm9ybV0gPSBkZXBfaW5mbwotICAgICAgZWxzZToKLSAgICAgICAgc2VsZi5fbG9va3VwX2RpY3RbZGVwZW5kZW5jeV1bcGxhdGZvcm1dLlVwZGF0ZShkZXBfaW5mbykKLQotCi0gIGRlZiBfR2V0RGVwZW5kZW5jeUluZm8oc2VsZiwgZGVwZW5kZW5jeSwgcGxhdGZvcm0pOgotICAgICIiIkdldCBpbmZvcm1hdGlvbiBmb3IgfGRlcGVuZGVuY3l8IG9uIHxwbGF0Zm9ybXwsIG9yIGEgZGVmYXVsdCBpZiBuZWVkZWQuCi0KLSAgICBBcmdzOgotICAgICAgICBkZXBlbmRlbmN5OiBOYW1lIG9mIHRoZSBkZXNpcmVkIGRlcGVuZGVuY3ksIGFzIGdpdmVuIGluIHRoZSBjb25maWcocykKLSAgICAgICAgICAgIHVzZWQgaW4gdGhpcyBEZXBlbmRlbmN5TWFuYWdlci4KLSAgICAgICAgcGxhdGZvcm06IE5hbWUgb2YgdGhlIHBsYXRmb3JtIHRoZSBkZXBlbmRlbmN5IHdpbGwgcnVuIG9uLiBPZnRlbiBvZiB0aGUKLSAgICAgICAgICAgIGZvcm0gJ29zX2FyY2hpdGVjdHVyZScuIE11c3QgbWF0Y2ggdGhvc2Ugc3BlY2lmaWVkIGluIHRoZSBjb25maWcocykKLSAgICAgICAgICAgIHVzZWQgaW4gdGhpcyBEZXBlbmRlbmN5TWFuYWdlci4KLQotICAgIFJldHVybnM6IFRoZSBkZXBlbmRlbmN5X2luZm8gZm9yIHxkZXBlbmRlbmN5fCBvbiB8cGxhdGZvcm18IGlmIGl0IGV4aXN0cy4KLSAgICAgICAgT3IgdGhlIGRlZmF1bHQgdmVyc2lvbiBvZiB8ZGVwZW5kZW5jeXwgaWYgaXQgZXhpc3RzLCBvciBOb25lIGlmIG5laXRoZXIKLSAgICAgICAgZXhpc3QuCi0gICAgIiIiCi0gICAgaWYgbm90IHNlbGYuX2xvb2t1cF9kaWN0IG9yIGRlcGVuZGVuY3kgbm90IGluIHNlbGYuX2xvb2t1cF9kaWN0OgotICAgICAgcmV0dXJuIE5vbmUKLSAgICBkZXBlbmRlbmN5X2RpY3QgPSBzZWxmLl9sb29rdXBfZGljdFtkZXBlbmRlbmN5XQotICAgIGRldmljZV90eXBlID0gcGxhdGZvcm0KLSAgICBpZiBub3QgZGV2aWNlX3R5cGUgaW4gZGVwZW5kZW5jeV9kaWN0OgotICAgICAgZGV2aWNlX3R5cGUgPSBERUZBVUxUX1RZUEUKLSAgICByZXR1cm4gZGVwZW5kZW5jeV9kaWN0LmdldChkZXZpY2VfdHlwZSkKLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci91cGxvYWRlci5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvdXBsb2FkZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OGI3YzAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci91cGxvYWRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLQotZnJvbSBweV91dGlscyBpbXBvcnQgY2xvdWRfc3RvcmFnZQotCi1mcm9tIGRlcGVuZGVuY3lfbWFuYWdlciBpbXBvcnQgZXhjZXB0aW9ucwotCi0KLUJBQ0tVUF9QQVRIX0VYVEVOU0lPTiA9ICdvbGQnCi0KLQotY2xhc3MgQ2xvdWRTdG9yYWdlVXBsb2FkZXIob2JqZWN0KToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1Y2tldCwgcmVtb3RlX3BhdGgsIGxvY2FsX3BhdGgsIGNzX2JhY2t1cF9wYXRoPU5vbmUpOgotICAgIGlmIG5vdCBidWNrZXQgb3Igbm90IHJlbW90ZV9wYXRoIG9yIG5vdCBsb2NhbF9wYXRoOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgICAnQXR0ZW1wdGVkIHRvIHBhcnRpYWxseSBpbml0aWFsaXplIHVwbG9hZCBkYXRhIHdpdGggYnVja2V0ICVzLCAnCi0gICAgICAgICAgJ3JlbW90ZV9wYXRoICVzLCBhbmQgbG9jYWxfcGF0aCAlcycsIGJ1Y2tldCwgcmVtb3RlX3BhdGgsIGxvY2FsX3BhdGgpCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxvY2FsX3BhdGgpOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcignQXR0ZW1wdGluZyB0byBpbml0aWxpemUgVXBsb2FkSW5mbyB3aXRoIG1pc3NpbmcgJwotICAgICAgICAgICAgICAgICAgICAgICAnbG9jYWwgcGF0aCAlcycsIGxvY2FsX3BhdGgpCi0KLSAgICBzZWxmLl9jc19idWNrZXQgPSBidWNrZXQKLSAgICBzZWxmLl9jc19yZW1vdGVfcGF0aCA9IHJlbW90ZV9wYXRoCi0gICAgc2VsZi5fbG9jYWxfcGF0aCA9IGxvY2FsX3BhdGgKLSAgICBzZWxmLl9jc19iYWNrdXBfcGF0aCA9IChjc19iYWNrdXBfcGF0aCBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcy4lcycgJSAoc2VsZi5fY3NfcmVtb3RlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQUNLVVBfUEFUSF9FWFRFTlNJT04pKQotICAgIHNlbGYuX3VwZGF0ZWQgPSBGYWxzZQotICAgIHNlbGYuX2JhY2tlZF91cCA9IEZhbHNlCi0KLSAgZGVmIFVwbG9hZChzZWxmLCBmb3JjZT1GYWxzZSk6Ci0gICAgIiIiVXBsb2FkIGFsbCBwZW5kaW5nIGZpbGVzIGFuZCB0aGVuIHdyaXRlIHRoZSB1cGRhdGVkIGNvbmZpZyB0byBkaXNrLgotCi0gICAgV2lsbCBhdHRlbXB0IHRvIGNvcHkgZmlsZXMgZXhpc3RpbmcgaW4gdGhlIHVwbG9hZCBsb2NhdGlvbiB0byBhIGJhY2t1cAotICAgIGxvY2F0aW9uIGluIHRoZSBzYW1lIGJ1Y2tldCBpbiBjbG91ZCBzdG9yYWdlIGlmIHxmb3JjZXwgaXMgVHJ1ZS4KLQotICAgIEFyZ3M6Ci0gICAgICBmb3JjZTogVHJ1ZSBpZiBmaWxlcyBzaG91bGQgYmUgdXBsb2FkZWQgdG8gY2xvdWQgc3RvcmFnZSBldmVuIGlmIGEKLSAgICAgICAgICBmaWxlIGFscmVhZHkgZXhpc3RzIGluIHRoZSB1cGxvYWQgbG9jYXRpb24uCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDbG91ZFN0b3JhZ2VVcGxvYWRDb25mbGljdEVycm9yOiBJZiB8Zm9yY2V8IGlzIEZhbHNlIGFuZCB0aGUgcG90ZW50aWFsCi0gICAgICAgICAgdXBsb2FkIGxvY2F0aW9uIG9mIGEgZmlsZSBhbHJlYWR5IGV4aXN0cy4KLSAgICAgIENsb3VkU3RvcmFnZUVycm9yOiBJZiBjb3B5aW5nIGFuIGV4aXN0aW5nIGZpbGUgdG8gdGhlIGJhY2t1cCBsb2NhdGlvbgotICAgICAgICAgIG9yIHVwbG9hZGluZyB0aGUgbmV3IGZpbGUgZmFpbHMuCi0gICAgIiIiCi0gICAgaWYgY2xvdWRfc3RvcmFnZS5FeGlzdHMoc2VsZi5fY3NfYnVja2V0LCBzZWxmLl9jc19yZW1vdGVfcGF0aCk6Ci0gICAgICBpZiBub3QgZm9yY2U6Ci0gICAgICAgICNweWxpbnQ6IGRpc2FibGU9bm9uc3RhbmRhcmQtZXhjZXB0aW9uCi0gICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQ2xvdWRTdG9yYWdlVXBsb2FkQ29uZmxpY3RFcnJvcihzZWxmLl9jc19idWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jc19yZW1vdGVfcGF0aCkKLSAgICAgICAgI3B5bGludDogZW5hYmxlPW5vbnN0YW5kYXJkLWV4Y2VwdGlvbgotICAgICAgbG9nZ2luZy5kZWJ1ZygnQSBmaWxlIGFscmVhZHkgZXhpc3RzIGF0IHVwbG9hZCBwYXRoICVzIGluIHNlbGYuY3NfYnVja2V0JwotICAgICAgICAgICAgICAgICAgICAnICVzJywgc2VsZi5fY3NfcmVtb3RlX3BhdGgsIHNlbGYuX2NzX2J1Y2tldCkKLSAgICAgIHRyeToKLSAgICAgICAgY2xvdWRfc3RvcmFnZS5Db3B5KHNlbGYuX2NzX2J1Y2tldCwgc2VsZi5fY3NfYnVja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3NfcmVtb3RlX3BhdGgsIHNlbGYuX2NzX2JhY2t1cF9wYXRoKQotICAgICAgICBzZWxmLl9iYWNrZWRfdXAgPSBUcnVlCi0gICAgICBleGNlcHQgY2xvdWRfc3RvcmFnZS5DbG91ZFN0b3JhZ2VFcnJvcjoKLSAgICAgICAgbG9nZ2luZy5lcnJvcignRmFpbGVkIHRvIGNvcHkgZXhpc3RpbmcgZmlsZSAlcyBpbiBjbG91ZCBzdG9yYWdlIGJ1Y2tldCAnCi0gICAgICAgICAgICAgICAgICAgICAgJyVzIHRvIGJhY2t1cCBsb2NhdGlvbiAlcycsIHNlbGYuX2NzX3JlbW90ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NzX2J1Y2tldCwgc2VsZi5fY3NfYmFja3VwX3BhdGgpCi0gICAgICAgIHJhaXNlCi0KLSAgICB0cnk6Ci0gICAgICBjbG91ZF9zdG9yYWdlLkluc2VydCgKLSAgICAgICAgICBzZWxmLl9jc19idWNrZXQsIHNlbGYuX2NzX3JlbW90ZV9wYXRoLCBzZWxmLl9sb2NhbF9wYXRoKQotICAgIGV4Y2VwdCBjbG91ZF9zdG9yYWdlLkNsb3VkU3RvcmFnZUVycm9yOgotICAgICAgbG9nZ2luZy5lcnJvcignRmFpbGVkIHRvIHVwbG9hZCAlcyB0byAlcyBpbiBjbG91ZF9zdG9yYWdlIGJ1Y2tldCAlcycsCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvY2FsX3BhdGgsIHNlbGYuX2NzX3JlbW90ZV9wYXRoLCBzZWxmLl9jc19idWNrZXQpCi0gICAgICByYWlzZQotICAgIHNlbGYuX3VwZGF0ZWQgPSBUcnVlCi0KLSAgZGVmIFJvbGxiYWNrKHNlbGYpOgotICAgICIiIkF0dGVtcHQgdG8gdW5kbyB0aGUgcHJldmlvdXMgY2FsbCB0byBVcGxvYWQuCi0KLSAgICBEb2VzIG5vdGhpbmcgaWYgbm8gcHJldmlvdXMgY2FsbCB0byBVcGxvYWQgd2FzIG1hZGUsIG9yIGlmIG5vdGhpbmcgd2FzCi0gICAgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSBpZmYgY2hhbmdlcyB3ZXJlIHN1Y2Nlc3NmdWxseSByb2xsZWQgYmFjay4KLSAgICBSYWlzZXM6Ci0gICAgICBDbG91ZFN0b3JhZ2VFcnJvcjogSWYgY29weWluZyB0aGUgYmFja2VkIHVwIGZpbGUgdG8gaXRzIG9yaWdpbmFsCi0gICAgICAgICAgbG9jYXRpb24gb3IgcmVtb3ZpbmcgdGhlIHVwbG9hZGVkIGZpbGUgZmFpbHMuCi0gICAgIiIiCi0gICAgY2xvdWRfc3RvcmFnZV9jaGFuZ2VkID0gRmFsc2UKLSAgICBpZiBzZWxmLl9iYWNrZWRfdXA6Ci0gICAgICBjbG91ZF9zdG9yYWdlLkNvcHkoc2VsZi5fY3NfYnVja2V0LCBzZWxmLl9jc19idWNrZXQsIHNlbGYuX2NzX2JhY2t1cF9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NzX3JlbW90ZV9wYXRoKQotICAgICAgY2xvdWRfc3RvcmFnZV9jaGFuZ2VkID0gVHJ1ZQotICAgICAgc2VsZi5fY3NfYmFja3VwX3BhdGggPSBOb25lCi0gICAgZWxpZiBzZWxmLl91cGRhdGVkOgotICAgICAgY2xvdWRfc3RvcmFnZS5EZWxldGUoc2VsZi5fY3NfYnVja2V0LCBzZWxmLl9jc19yZW1vdGVfcGF0aCkKLSAgICAgIGNsb3VkX3N0b3JhZ2VfY2hhbmdlZCA9IFRydWUKLSAgICBzZWxmLl91cGRhdGVkID0gRmFsc2UKLSAgICByZXR1cm4gY2xvdWRfc3RvcmFnZV9jaGFuZ2VkCi0KLSAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlciwgbXNnPU5vbmUpOgotICAgIGlmIHR5cGUoc2VsZikgIT0gdHlwZShvdGhlcik6Ci0gICAgICByZXR1cm4gRmFsc2UKLSAgICByZXR1cm4gKHNlbGYuX2xvY2FsX3BhdGggPT0gb3RoZXIuX2xvY2FsX3BhdGggYW5kCi0gICAgICAgICAgICBzZWxmLl9jc19yZW1vdGVfcGF0aCA9PSBvdGhlci5fY3NfcmVtb3RlX3BhdGggYW5kCi0gICAgICAgICAgICBzZWxmLl9jc19idWNrZXQgPT0gb3RoZXIuX2NzX2J1Y2tldCkKLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci91cGxvYWRlcl91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9kZXBlbmRlbmN5X21hbmFnZXIvdXBsb2FkZXJfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjOGUyYTAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGVwZW5kZW5jeV9tYW5hZ2VyL2RlcGVuZGVuY3lfbWFuYWdlci91cGxvYWRlcl91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi0KLWZyb20gcHlmYWtlZnMgaW1wb3J0IGZha2VfZmlsZXN5c3RlbV91bml0dGVzdAotCi1mcm9tIGRlcGVuZGVuY3lfbWFuYWdlciBpbXBvcnQgdXBsb2FkZXIKLQotCi1jbGFzcyBDbG91ZFN0b3JhZ2VVcGxvYWRlclRlc3QoZmFrZV9maWxlc3lzdGVtX3VuaXR0ZXN0LlRlc3RDYXNlKToKLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHNlbGYuc2V0VXBQeWZha2VmcygpCi0gICAgc2VsZi5idWNrZXQgPSAnY2xvdWRfc3RvcmFnZV9idWNrZXQnCi0gICAgc2VsZi5sb2NhbF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdkZXBlbmRlbmN5JykpCi0gICAgc2VsZi5mcy5DcmVhdGVGaWxlKHNlbGYubG9jYWxfcGF0aCkKLSAgICBzZWxmLnJlbW90ZV9wYXRoID0gJ2NvbmZpZ19mb2xkZXIvcmVtb3RlX3BhdGgnCi0KLSAgZGVmIHRlc3RDbG91ZFN0b3JhZ2VVcGxvYWRlck1pc3NpbmdEYXRhKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHVwbG9hZGVyLkNsb3VkU3RvcmFnZVVwbG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIHNlbGYucmVtb3RlX3BhdGgsIHNlbGYubG9jYWxfcGF0aCkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1cGxvYWRlci5DbG91ZFN0b3JhZ2VVcGxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1Y2tldCwgTm9uZSwgc2VsZi5sb2NhbF9wYXRoKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHVwbG9hZGVyLkNsb3VkU3RvcmFnZVVwbG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVja2V0LCBzZWxmLnJlbW90ZV9wYXRoLCBOb25lKQotCi0gIGRlZiB0ZXN0Q2xvdWRTdG9yYWdlVXBsb2FkZXJMb2NhbEZpbGVNaXNzaW5nKHNlbGYpOgotICAgIHNlbGYuZnMuUmVtb3ZlT2JqZWN0KHNlbGYubG9jYWxfcGF0aCkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1cGxvYWRlci5DbG91ZFN0b3JhZ2VVcGxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1Y2tldCwgc2VsZi5yZW1vdGVfcGF0aCwgc2VsZi5sb2NhbF9wYXRoKQotCi0gIGRlZiB0ZXN0Q2xvdWRTdG9yYWdlVXBsb2FkZXJDcmVhdGlvbihzZWxmKToKLSAgICB1cGxvYWRfZGF0YSA9IHVwbG9hZGVyLkNsb3VkU3RvcmFnZVVwbG9hZGVyKAotICAgICAgICBzZWxmLmJ1Y2tldCwgc2VsZi5yZW1vdGVfcGF0aCwgc2VsZi5sb2NhbF9wYXRoKQotICAgIGV4cGVjdGVkX2J1Y2tldCA9IHNlbGYuYnVja2V0Ci0gICAgZXhwZWN0ZWRfcmVtb3RlX3BhdGggPSBzZWxmLnJlbW90ZV9wYXRoCi0gICAgZXhwZWN0ZWRfY3NfYmFja3VwX3BhdGggPSAnJXMub2xkJyAlIGV4cGVjdGVkX3JlbW90ZV9wYXRoCi0gICAgZXhwZWN0ZWRfbG9jYWxfcGF0aCA9IHNlbGYubG9jYWxfcGF0aAotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfYnVja2V0LCB1cGxvYWRfZGF0YS5fY3NfYnVja2V0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfcmVtb3RlX3BhdGgsIHVwbG9hZF9kYXRhLl9jc19yZW1vdGVfcGF0aCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2xvY2FsX3BhdGgsIHVwbG9hZF9kYXRhLl9sb2NhbF9wYXRoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfY3NfYmFja3VwX3BhdGgsIHVwbG9hZF9kYXRhLl9jc19iYWNrdXBfcGF0aCkKLQotICBkZWYgdGVzdENsb3VkU3RvcmFnZVVwbG9hZGVyRXF1YWxpdHkoc2VsZik6Ci0gICAgdXBsb2FkX2RhdGEgPSB1cGxvYWRlci5DbG91ZFN0b3JhZ2VVcGxvYWRlcigKLSAgICAgICAgc2VsZi5idWNrZXQsIHNlbGYucmVtb3RlX3BhdGgsIHNlbGYubG9jYWxfcGF0aCkKLSAgICB1cGxvYWRfZGF0YV9leGFjdCA9IHVwbG9hZGVyLkNsb3VkU3RvcmFnZVVwbG9hZGVyKAotICAgICAgICBzZWxmLmJ1Y2tldCwgc2VsZi5yZW1vdGVfcGF0aCwgc2VsZi5sb2NhbF9wYXRoKQotICAgIHVwbG9hZF9kYXRhX2VxdWFsID0gdXBsb2FkZXIuQ2xvdWRTdG9yYWdlVXBsb2FkZXIoCi0gICAgICAgICdjbG91ZF9zdG9yYWdlX2J1Y2tldCcsCi0gICAgICAgICdjb25maWdfZm9sZGVyL3JlbW90ZV9wYXRoJywKLSAgICAgICAgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdkZXBlbmRlbmN5JykpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodXBsb2FkX2RhdGEsIHVwbG9hZF9kYXRhKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodXBsb2FkX2RhdGEsIHVwbG9hZF9kYXRhX2V4YWN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodXBsb2FkX2RhdGFfZXhhY3QsIHVwbG9hZF9kYXRhKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodXBsb2FkX2RhdGEsIHVwbG9hZF9kYXRhX2VxdWFsKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodXBsb2FkX2RhdGFfZXF1YWwsIHVwbG9hZF9kYXRhKQotCi0KLSAgZGVmIHRlc3RDbG91ZFN0b3JhZ2VVcGxvYWRlckluZXF1YWxpdHkoc2VsZik6Ci0gICAgbmV3X2xvY2FsX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKCduZXcnLCAnbG9jYWwnLCAncGF0aCcpKQotICAgIHNlbGYuZnMuQ3JlYXRlRmlsZShuZXdfbG9jYWxfcGF0aCkKLSAgICBuZXdfYnVja2V0ID0gJ25ld19idWNrZXQnCi0gICAgbmV3X3JlbW90ZV9wYXRoID0gJ25ld19yZW1vdGUvcGF0aCcKLQotICAgIHVwbG9hZF9kYXRhID0gdXBsb2FkZXIuQ2xvdWRTdG9yYWdlVXBsb2FkZXIoCi0gICAgICAgIHNlbGYuYnVja2V0LCBzZWxmLnJlbW90ZV9wYXRoLCBzZWxmLmxvY2FsX3BhdGgpCi0gICAgdXBsb2FkX2RhdGFfYWxsX2RpZmZlcmVudCA9IHVwbG9hZGVyLkNsb3VkU3RvcmFnZVVwbG9hZGVyKAotICAgICAgICBuZXdfYnVja2V0LCBuZXdfcmVtb3RlX3BhdGgsIG5ld19sb2NhbF9wYXRoKQotICAgIHVwbG9hZF9kYXRhX2RpZmZlcmVudF9idWNrZXQgPSB1cGxvYWRlci5DbG91ZFN0b3JhZ2VVcGxvYWRlcigKLSAgICAgICAgbmV3X2J1Y2tldCwgc2VsZi5yZW1vdGVfcGF0aCwgc2VsZi5sb2NhbF9wYXRoKQotICAgIHVwbG9hZF9kYXRhX2RpZmZlcmVudF9yZW1vdGVfcGF0aCA9IHVwbG9hZGVyLkNsb3VkU3RvcmFnZVVwbG9hZGVyKAotICAgICAgICBzZWxmLmJ1Y2tldCwgbmV3X3JlbW90ZV9wYXRoLCBzZWxmLmxvY2FsX3BhdGgpCi0gICAgdXBsb2FkX2RhdGFfZGlmZmVyZW50X2xvY2FsX3BhdGggPSB1cGxvYWRlci5DbG91ZFN0b3JhZ2VVcGxvYWRlcigKLSAgICAgICAgc2VsZi5idWNrZXQsIHNlbGYucmVtb3RlX3BhdGgsIG5ld19sb2NhbF9wYXRoKQotCi0gICAgc2VsZi5hc3NlcnROb3RFcXVhbCh1cGxvYWRfZGF0YSwgJ2Egc3RyaW5nIScpCi0gICAgc2VsZi5hc3NlcnROb3RFcXVhbCh1cGxvYWRfZGF0YSwgMCkKLSAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHVwbG9hZF9kYXRhLCAyMzU0KQotICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodXBsb2FkX2RhdGEsIE5vbmUpCi0gICAgc2VsZi5hc3NlcnROb3RFcXVhbCh1cGxvYWRfZGF0YSwgdXBsb2FkX2RhdGFfYWxsX2RpZmZlcmVudCkKLSAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHVwbG9hZF9kYXRhX2FsbF9kaWZmZXJlbnQsIHVwbG9hZF9kYXRhKQotICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodXBsb2FkX2RhdGEsIHVwbG9hZF9kYXRhX2RpZmZlcmVudF9idWNrZXQpCi0gICAgc2VsZi5hc3NlcnROb3RFcXVhbCh1cGxvYWRfZGF0YV9kaWZmZXJlbnRfYnVja2V0LCB1cGxvYWRfZGF0YSkKLSAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHVwbG9hZF9kYXRhLCB1cGxvYWRfZGF0YV9kaWZmZXJlbnRfcmVtb3RlX3BhdGgpCi0gICAgc2VsZi5hc3NlcnROb3RFcXVhbCh1cGxvYWRfZGF0YV9kaWZmZXJlbnRfcmVtb3RlX3BhdGgsIHVwbG9hZF9kYXRhKQotICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodXBsb2FkX2RhdGEsIHVwbG9hZF9kYXRhX2RpZmZlcmVudF9sb2NhbF9wYXRoKQotICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodXBsb2FkX2RhdGFfZGlmZmVyZW50X2xvY2FsX3BhdGgsIHVwbG9hZF9kYXRhKQotCi0gICNUT0RPOiB3cml0ZSB1bml0dGVzdHMgZm9yIHVwbG9hZCBhbmQgcm9sbGJhY2sKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9weWxpbnRyYyBiL3N5c3RyYWNlL2NhdGFwdWx0L2RlcGVuZGVuY3lfbWFuYWdlci9weWxpbnRyYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU0MWZiOC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXBlbmRlbmN5X21hbmFnZXIvcHlsaW50cmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi1bTUVTU0FHRVMgQ09OVFJPTF0KLQotIyBEaXNhYmxlIHRoZSBtZXNzYWdlLCByZXBvcnQsIGNhdGVnb3J5IG9yIGNoZWNrZXIgd2l0aCB0aGUgZ2l2ZW4gaWQocykuCi0jIFRPRE86IFNocmluayB0aGlzIGxpc3QgdG8gYXMgc21hbGwgYXMgcG9zc2libGUuCi1kaXNhYmxlPQotICBkZXNpZ24sCi0gIHNpbWlsYXJpdGllcywKLQotICBmaXhtZSwKLSAgbG9jYWxseS1kaXNhYmxlZCwKLSAgbG9jYWxseS1lbmFibGVkLAotICBtaXNzaW5nLWRvY3N0cmluZywKLSAgbm8tbWVtYmVyLAotICBuby1zZWxmLXVzZSwKLSAgcHJvdGVjdGVkLWFjY2VzcywKLSAgc3Rhci1hcmdzLAotCi0KLVtSRVBPUlRTXQotCi0jIERvbid0IHdyaXRlIG91dCBmdWxsIHJlcG9ydHMsIGp1c3QgbWVzc2FnZXMuCi1yZXBvcnRzPW5vCi0KLQotW0JBU0lDXQotCi0jIFJlZ3VsYXIgZXhwcmVzc2lvbiB3aGljaCBzaG91bGQgb25seSBtYXRjaCBjb3JyZWN0IGZ1bmN0aW9uIG5hbWVzLgotZnVuY3Rpb24tcmd4PV4oPzooP1A8ZXhlbXB0PnNldFVwfHRlYXJEb3dufHNldFVwTW9kdWxlfHRlYXJEb3duTW9kdWxlKXwoP1A8Y2FtZWxfY2FzZT5fP1tBLVpdW2EtekEtWjAtOV0qKSkkCi0KLSMgUmVndWxhciBleHByZXNzaW9uIHdoaWNoIHNob3VsZCBvbmx5IG1hdGNoIGNvcnJlY3QgbWV0aG9kIG5hbWVzLgotbWV0aG9kLXJneD1eKD86KD9QPGV4ZW1wdD5fW2EtejAtOV9dK19ffGdldHxwb3N0fHJ1blRlc3R8c2V0VXB8dGVhckRvd258c2V0VXBUZXN0Q2FzZXx0ZWFyRG93blRlc3RDYXNlfHNldHVwU2VsZnx0ZWFyRG93bkNsYXNzfHNldFVwQ2xhc3MpfCg/UDxjYW1lbF9jYXNlPihfezAsMn18dGVzdHxhc3NlcnQpW0EtWl1bYS16QS1aMC05X10qKSkkCi0KLSMgUmVndWxhciBleHByZXNzaW9uIHdoaWNoIHNob3VsZCBvbmx5IG1hdGNoIGNvcnJlY3QgYXJndW1lbnQgbmFtZXMuCi1hcmd1bWVudC1yZ3g9XlthLXpdW2EtejAtOV9dKiQKLQotIyBSZWd1bGFyIGV4cHJlc3Npb24gd2hpY2ggc2hvdWxkIG9ubHkgbWF0Y2ggY29ycmVjdCB2YXJpYWJsZSBuYW1lcy4KLXZhcmlhYmxlLXJneD1eW2Etel1bYS16MC05X10qJAotCi0jIEdvb2QgdmFyaWFibGUgbmFtZXMgd2hpY2ggc2hvdWxkIGFsd2F5cyBiZSBhY2NlcHRlZCwgc2VwYXJhdGVkIGJ5IGEgY29tbWEuCi1nb29kLW5hbWVzPW1haW4sXwotCi0jIExpc3Qgb2YgYnVpbHRpbnMgZnVuY3Rpb24gbmFtZXMgdGhhdCBzaG91bGQgbm90IGJlIHVzZWQsIHNlcGFyYXRlZCBieSBhIGNvbW1hLgotYmFkLWZ1bmN0aW9ucz1hcHBseSxpbnB1dCxyZWR1Y2UKLQotCi1bVkFSSUFCTEVTXQotCi0jIFRlbGxzIHdldGhlciB3ZSBzaG91bGQgY2hlY2sgZm9yIHVudXNlZCBpbXBvcnQgaW4gX19pbml0X18gZmlsZXMuCi1pbml0LWltcG9ydD1ubwotCi0jIEEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIG5hbWVzIHVzZWQgZm9yIGR1bW15IHZhcmlhYmxlcyAoaS5lLiBub3QgdXNlZCkuCi1kdW1teS12YXJpYWJsZXMtcmd4PV5cKnswLDJ9KF8kfHVudXNlZF8pCi0KLQotW1RZUEVDSEVDS10KLQotIyBUZWxscyB3ZXRoZXIgbWlzc2luZyBtZW1iZXJzIGFjY2Vzc2VkIGluIG1peGluIGNsYXNzIHNob3VsZCBiZSBpZ25vcmVkLiBBCi0jIG1peGluIGNsYXNzIGlzIGRldGVjdGVkIGlmIGl0cyBuYW1lIGVuZHMgd2l0aCAibWl4aW4iIChjYXNlIGluc2Vuc2l0aXZlKS4KLWlnbm9yZS1taXhpbi1tZW1iZXJzPXllcwotCi0KLVtGT1JNQVRdCi0KLSMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgaW4gYSBtb2R1bGUuCi1tYXgtbW9kdWxlLWxpbmVzPTIwMDAKLQotIyBXZSB1c2UgdHdvIHNwYWNlcyBmb3IgaW5kZW50cywgaW5zdGVhZCBvZiB0aGUgdXN1YWwgZm91ciBzcGFjZXMgb3IgdGFiLgotaW5kZW50LXN0cmluZz0nICAnCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9QUkVTVUJNSVQucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9QUkVTVUJNSVQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4OWE1YzYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvUFJFU1VCTUlULnB5CisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJQcmVzdWJtaXQgc2NyaXB0IGZvciBkZXZpbC4KLQotU2VlIGh0dHA6Ly9kZXYuY2hyb21pdW0ub3JnL2RldmVsb3BlcnMvaG93LXRvcy9kZXBvdHRvb2xzL3ByZXN1Ym1pdC1zY3JpcHRzIGZvcgotZGV0YWlscyBvbiB0aGUgcHJlc3VibWl0IEFQSSBidWlsdCBpbnRvIGRlcG90X3Rvb2xzLgotIiIiCi0KLQotZGVmIF9SdW5QeWxpbnQoaW5wdXRfYXBpLCBvdXRwdXRfYXBpKToKLSAgcmV0dXJuIGlucHV0X2FwaS5SdW5UZXN0cyhpbnB1dF9hcGkuY2FubmVkX2NoZWNrcy5SdW5QeWxpbnQoCi0gICAgICBpbnB1dF9hcGksIG91dHB1dF9hcGksIHB5bGludHJjPSdweWxpbnRyYycpKQotCi0KLWRlZiBfUnVuVW5pdFRlc3RzKGlucHV0X2FwaSwgb3V0cHV0X2FwaSk6Ci0gIGRlZiBKKCpkaXJzKToKLSAgICAiIiJSZXR1cm5zIGEgcGF0aCByZWxhdGl2ZSB0byBwcmVzdWJtaXQgZGlyZWN0b3J5LiIiIgotICAgIHJldHVybiBpbnB1dF9hcGkub3NfcGF0aC5qb2luKAotICAgICAgICBpbnB1dF9hcGkuUHJlc3VibWl0TG9jYWxQYXRoKCksICdkZXZpbCcsICpkaXJzKQotCi0gIHRlc3RfZW52ID0gZGljdChpbnB1dF9hcGkuZW52aXJvbikKLSAgdGVzdF9lbnYudXBkYXRlKHsKLSAgICAnUFlUSE9ORE9OVFdSSVRFQllURUNPREUnOiAnMScsCi0gICAgJ1BZVEhPTlBBVEgnOiAnOicuam9pbihbSigpLCBKKCcuLicpXSksCi0gIH0pCi0KLSAgbWVzc2FnZV90eXBlID0gKG91dHB1dF9hcGkuUHJlc3VibWl0RXJyb3IgaWYgaW5wdXRfYXBpLmlzX2NvbW1pdHRpbmcKLSAgICAgICAgICAgICAgICAgIGVsc2Ugb3V0cHV0X2FwaS5QcmVzdWJtaXRQcm9tcHRXYXJuaW5nKQotCi0gIHJldHVybiBpbnB1dF9hcGkuUnVuVGVzdHMoWwotICAgICAgaW5wdXRfYXBpLkNvbW1hbmQoCi0gICAgICAgICAgbmFtZT0nZGV2aWwvYmluL3J1bl9weV90ZXN0cycsCi0gICAgICAgICAgY21kPVsKLSAgICAgICAgICAgIGlucHV0X2FwaS5vc19wYXRoLmpvaW4oCi0gICAgICAgICAgICAgICAgaW5wdXRfYXBpLlByZXN1Ym1pdExvY2FsUGF0aCgpLCAnYmluJywgJ3J1bl9weV90ZXN0cycpXSwKLSAgICAgICAgICBrd2FyZ3M9eydlbnYnOiB0ZXN0X2Vudn0sCi0gICAgICAgICAgbWVzc2FnZT1tZXNzYWdlX3R5cGUpXSkKLQotCi1kZWYgX0Vuc3VyZU5vUHlsaWJVc2UoaW5wdXRfYXBpLCBvdXRwdXRfYXBpKToKLSAgZGVmIG90aGVyX3B5dGhvbl9maWxlcyhmKToKLSAgICB0aGlzX3ByZXN1Ym1pdF9maWxlID0gaW5wdXRfYXBpLm9zX3BhdGguam9pbigKLSAgICAgICAgaW5wdXRfYXBpLlByZXN1Ym1pdExvY2FsUGF0aCgpLCAnUFJFU1VCTUlULnB5JykKLSAgICByZXR1cm4gKGYuTG9jYWxQYXRoKCkuZW5kc3dpdGgoJy5weScpCi0gICAgICAgICAgICBhbmQgbm90IGYuQWJzb2x1dGVMb2NhbFBhdGgoKSA9PSB0aGlzX3ByZXN1Ym1pdF9maWxlKQotCi0gIGNoYW5nZWRfZmlsZXMgPSBpbnB1dF9hcGkuQWZmZWN0ZWRTb3VyY2VGaWxlcyhvdGhlcl9weXRob25fZmlsZXMpCi0gIGltcG9ydF9lcnJvcl9yZSA9IGlucHV0X2FwaS5yZS5jb21waWxlKAotICAgICAgcicoZnJvbSBweWxpYi4qIGltcG9ydCl8KGltcG9ydCBweWxpYiknKQotCi0gIGVycm9ycyA9IFtdCi0gIGZvciBmIGluIGNoYW5nZWRfZmlsZXM6Ci0gICAgZXJyb3JzLmV4dGVuZCgKLSAgICAgICAgJyVzOiVkJyAlIChmLkxvY2FsUGF0aCgpLCBsaW5lX251bWJlcikKLSAgICAgICAgZm9yIGxpbmVfbnVtYmVyLCBsaW5lX3RleHQgaW4gZi5DaGFuZ2VkQ29udGVudHMoKQotICAgICAgICBpZiBpbXBvcnRfZXJyb3JfcmUuc2VhcmNoKGxpbmVfdGV4dCkpCi0KLSAgaWYgZXJyb3JzOgotICAgIHJldHVybiBbb3V0cHV0X2FwaS5QcmVzdWJtaXRFcnJvcigKLSAgICAgICAgJ3B5bGliIG1vZHVsZXMgc2hvdWxkIG5vdCBiZSBpbXBvcnRlZCBmcm9tIGRldmlsIG1vZHVsZXMuJywKLSAgICAgICAgaXRlbXM9ZXJyb3JzKV0KLSAgcmV0dXJuIFtdCi0KLQotZGVmIENvbW1vbkNoZWNrcyhpbnB1dF9hcGksIG91dHB1dF9hcGkpOgotICBvdXRwdXQgPSBbXQotICBvdXRwdXQgKz0gX1J1blB5bGludChpbnB1dF9hcGksIG91dHB1dF9hcGkpCi0gIG91dHB1dCArPSBfUnVuVW5pdFRlc3RzKGlucHV0X2FwaSwgb3V0cHV0X2FwaSkKLSAgb3V0cHV0ICs9IF9FbnN1cmVOb1B5bGliVXNlKGlucHV0X2FwaSwgb3V0cHV0X2FwaSkKLSAgcmV0dXJuIG91dHB1dAotCi0KLWRlZiBDaGVja0NoYW5nZU9uVXBsb2FkKGlucHV0X2FwaSwgb3V0cHV0X2FwaSk6Ci0gIHJldHVybiBDb21tb25DaGVja3MoaW5wdXRfYXBpLCBvdXRwdXRfYXBpKQotCi0KLWRlZiBDaGVja0NoYW5nZU9uQ29tbWl0KGlucHV0X2FwaSwgb3V0cHV0X2FwaSk6Ci0gIHJldHVybiBDb21tb25DaGVja3MoaW5wdXRfYXBpLCBvdXRwdXRfYXBpKQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9SRUFETUUubWQgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9SRUFETUUubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MmFjMzcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPCEtLSBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgICAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotICAgICBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLS0+Ci0jIyBkZXZpbAotCi3wn5iICi0KLWRldmlsIGlzIGEgbGlicmFyeSB1c2VkIGJ5IHRoZSBDaHJvbWl1bSBkZXZlbG9wZXJzIHRvIGludGVyYWN0IHdpdGggQW5kcm9pZAotZGV2aWNlcy4gSXQgY3VycmVudGx5IHN1cHBvcnRzIFNESyBsZXZlbCAxNiBhbmQgYWJvdmUuCi0KLSMjIEludGVyZmFjZXMKLQotZGV2aWwgcHJvdmlkZXMgcHl0aG9uIEFQSXM6Ci0gIC0gW2BkZXZpbC5hbmRyb2lkLmFkYl93cmFwcGVyYF0oZG9jcy9hZGJfd3JhcHBlci5tZCkgcHJvdmlkZXMgYSB0aGluIHdyYXBwZXIKLSAgICBhcm91bmQgdGhlIGFkYiBiaW5hcnkuIE1vc3QgZnVuY3Rpb25zIGFuZCBtZXRob2RzIGhhdmUgZGlyZWN0IGFuYWxvZ3VlcyBvbgotICAgIHRoZSBhZGIgY29tbWFuZC1saW5lLgotICAtIFtgZGV2aWwuYW5kcm9pZC5kZXZpY2VfdXRpbHNgXShkb2NzL2RldmljZV91dGlscy5tZCkgcHJvdmlkZXMgaGlnaGVyLWxldmVsCi0gICAgZnVuY3Rpb25hbGl0eSBidWlsdCBvbiB0b3Agb2YgYGFkYl93cmFwcGVyYC4gKipUaGlzIGlzIHRoZSBwcmltYXJ5Ci0gICAgbWVjaGFuaXNtIHRocm91Z2ggd2hpY2ggY2hyb21pdW0ncyBzY3JpcHRzIGludGVyYWN0IHdpdGggZGV2aWNlcy4qKgotCi0jIyBVdGlsaXRpZXMKLQotZGV2aWwgYWxzbyBwcm92aWRlcyBjb21tYW5kLWxpbmUgdXRpbGl0aWVzOgotIC0gW2BkZXZpbC91dGlscy9tYXJrZG93bi5weWBdKGRvY3MvbWFya2Rvd24ubWQpIGdlbmVyYXRlZCBtYXJrZG93bgotICAgZG9jdW1lbnRhdGlvbiBmb3IgcHl0aG9uIG1vZHVsZXMuCi0KLSMjIENvbnN0cmFpbnRzIGFuZCBDYXZlYXRzCi0KLWRldmlsIGlzIHVzZWQgd2l0aCBweXRob24gMi43LiBJdHMgY29tcGF0aWJpbGl0eSB3aXRoIHB5dGhvbiAzIGhhcyBub3QgYmVlbgotdGVzdGVkLCBhbmQgbmVpdGhlciBhY2hpZXZpbmcgbm9yIG1haW50YWluaW5nIHNhaWQgY29tcGF0aWJpbGl0eSBpcyBjdXJyZW50bHkKLWEgcHJpb3JpdHkuCi0KLSMjIENvbnRyaWJ1dGluZwotCi1QbGVhc2Ugc2VlIHRoZSBbY29udHJpYnV0b3IncyBndWlkZV0oaHR0cHM6Ly9naXRodWIuY29tL2NhdGFwdWx0LXByb2plY3QvY2F0YXB1bHQvYmxvYi9tYXN0ZXIvQ09OVFJJQlVUSU5HLm1kKS4KLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvYmluL2dlbmVyYXRlX21kX2RvY3MgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9iaW4vZ2VuZXJhdGVfbWRfZG9jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjM0ZTE0YS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9iaW4vZ2VuZXJhdGVfbWRfZG9jcworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotX0RFVklMX1BBVEggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicpKQotX0RFVklMX1VSTCA9ICgKLSAgICAnaHR0cHM6Ly9naXRodWIuY29tL2NhdGFwdWx0LXByb2plY3QvY2F0YXB1bHQvYmxvYi9tYXN0ZXIvZGV2aWwvJykKLQotc3lzLnBhdGguYXBwZW5kKF9ERVZJTF9QQVRIKQotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgY21kX2hlbHBlcgotCi1fRklMRVNfVE9fRE9DID0gewotICAnZGV2aWwvYW5kcm9pZC9zZGsvYWRiX3dyYXBwZXIucHknOiAnZG9jcy9hZGJfd3JhcHBlci5tZCcsCi0gICdkZXZpbC9hbmRyb2lkL2RldmljZV91dGlscy5weSc6ICdkb2NzL2RldmljZV91dGlscy5tZCcsCi0gICdkZXZpbC91dGlscy9tYXJrZG93bi5weSc6ICdkb2NzL21hcmtkb3duLm1kJywKLX0KLQotX01BUktET1dOX1NDUklQVCA9IG9zLnBhdGguam9pbihfREVWSUxfUEFUSCwgJ2RldmlsJywgJ3V0aWxzJywgJ21hcmtkb3duLnB5JykKLQotZGVmIG1haW4oKToKLSAgZmFpbGVkID0gRmFsc2UKLSAgZm9yIGssIHYgaW4gX0ZJTEVTX1RPX0RPQy5pdGVyaXRlbXMoKToKLSAgICBtb2R1bGVfcGF0aCA9IG9zLnBhdGguam9pbihfREVWSUxfUEFUSCwgaykKLSAgICBtb2R1bGVfbGluayA9IF9ERVZJTF9VUkwgKyBrCi0gICAgZG9jX3BhdGggPSBvcy5wYXRoLmpvaW4oX0RFVklMX1BBVEgsIHYpCi0KLSAgICBzdGF0dXMsIHN0ZG91dCA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0KAotICAgICAgICBbc3lzLmV4ZWN1dGFibGUsIF9NQVJLRE9XTl9TQ1JJUFQsIG1vZHVsZV9wYXRoLAotICAgICAgICAgJy0tbW9kdWxlLWxpbmsnLCBtb2R1bGVfbGlua10pCi0gICAgaWYgc3RhdHVzOgotICAgICAgbG9nZ2luZy5lcnJvcignRmFpbGVkIHRvIHVwZGF0ZSBkb2MgZm9yICVzJyAlIG1vZHVsZV9wYXRoKQotICAgICAgZmFpbGVkID0gVHJ1ZQotICAgIGVsc2U6Ci0gICAgICB3aXRoIG9wZW4oZG9jX3BhdGgsICd3JykgYXMgZG9jX2ZpbGU6Ci0gICAgICAgIGRvY19maWxlLndyaXRlKHN0ZG91dCkKLQotICByZXR1cm4gMSBpZiBmYWlsZWQgZWxzZSAwCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2Jpbi9ydW5fcHlfZGV2aWNldGVzdHMgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9iaW4vcnVuX3B5X2RldmljZXRlc3RzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2NTZiZWRmLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2Jpbi9ydW5fcHlfZGV2aWNldGVzdHMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLV9DQVRBUFVMVF9QQVRIID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbigKLSAgICBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nLCAnLi4nKSkKLV9ERVZJTF9QQVRIID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbigKLSAgICBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nKSkKLV9UWVBfUEFUSCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oX0NBVEFQVUxUX1BBVEgsICd0aGlyZF9wYXJ0eScsICd0eXAnKSkKLQotc3lzLnBhdGguYXBwZW5kKF9UWVBfUEFUSCkKLWltcG9ydCB0eXAKLQotc3lzLnBhdGguYXBwZW5kKF9ERVZJTF9QQVRIKQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdGVzdF9jYXNlCi0KLQotZGVmIG1haW4oKToKLSAgcnVubmVyID0gdHlwLlJ1bm5lcigpCi0gIHJ1bm5lci5zZXR1cF9mbiA9IGRldmljZV90ZXN0X2Nhc2UuUHJlcGFyZURldmljZXMKLSAgcmV0dXJuIHJ1bm5lci5tYWluKAotICAgICAgY292ZXJhZ2Vfc291cmNlPVtfREVWSUxfUEFUSF0sCi0gICAgICBqb2JzPTEsCi0gICAgICBzdWZmaXhlcz1bJypfZGV2aWNldGVzdC5weSddLAotICAgICAgdG9wX2xldmVsX2Rpcj1fREVWSUxfUEFUSCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvYmluL3J1bl9weV90ZXN0cyBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2Jpbi9ydW5fcHlfdGVzdHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDQ0ZWM2MWUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvYmluL3J1bl9weV90ZXN0cworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotX0NBVEFQVUxUX1BBVEggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICcuLicpKQotX0RFVklMX1BBVEggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicpKQotCi1zeXMucGF0aC5hcHBlbmQoX0NBVEFQVUxUX1BBVEgpCi1mcm9tIGNhdGFwdWx0X2J1aWxkIGltcG9ydCBydW5fd2l0aF90eXAKLQotCi1kZWYgbWFpbigpOgotICByZXR1cm4gcnVuX3dpdGhfdHlwLlJ1bih0b3BfbGV2ZWxfZGlyPV9ERVZJTF9QQVRIKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGU1OWM5Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBsb2dnaW5nCi0KLWxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZpbCcpLmFkZEhhbmRsZXIobG9nZ2luZy5OdWxsSGFuZGxlcigpKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYjIzZGYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9hcGtfaGVscGVyLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9hcGtfaGVscGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWNiNDFlLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvYXBrX2hlbHBlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJNb2R1bGUgY29udGFpbmluZyB1dGlsaXRpZXMgZm9yIGFwayBwYWNrYWdlcy4iIiIKLQotaW1wb3J0IHJlCi0KLWZyb20gZGV2aWwgaW1wb3J0IGJhc2VfZXJyb3IKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IGFhcHQKLQotCi1fTUFOSUZFU1RfQVRUUklCVVRFX1JFID0gcmUuY29tcGlsZSgKLSAgICByJ1xzKkE6IChbXlwoXCk9IF0qKSg/OlwoW15cKFwpPSBdKlwpKT89JwotICAgIHInKD86IiguKikiIFwoUmF3OiAuKlwpfFwodHlwZS4qP1wpKC4qKSkkJykKLV9NQU5JRkVTVF9FTEVNRU5UX1JFID0gcmUuY29tcGlsZShyJ1xzKig/OkV8Tik6IChcUyopIC4qJCcpCi0KLQotZGVmIEdldFBhY2thZ2VOYW1lKGFwa19wYXRoKToKLSAgIiIiUmV0dXJucyB0aGUgcGFja2FnZSBuYW1lIG9mIHRoZSBhcGsuIiIiCi0gIHJldHVybiBBcGtIZWxwZXIoYXBrX3BhdGgpLkdldFBhY2thZ2VOYW1lKCkKLQotCi0jIFRPRE8oamJ1ZG9yaWNrKTogRGVwcmVjYXRlIGFuZCByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIGNhbGxlcnMgaGF2ZSBiZWVuCi0jIGNvbnZlcnRlZCB0byBBcGtIZWxwZXIuR2V0SW5zdHJ1bWVudGF0aW9uTmFtZQotZGVmIEdldEluc3RydW1lbnRhdGlvbk5hbWUoYXBrX3BhdGgpOgotICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBJbnN0cnVtZW50YXRpb24gaW4gdGhlIGFway4iIiIKLSAgcmV0dXJuIEFwa0hlbHBlcihhcGtfcGF0aCkuR2V0SW5zdHJ1bWVudGF0aW9uTmFtZSgpCi0KLQotZGVmIFRvSGVscGVyKHBhdGhfb3JfaGVscGVyKToKLSAgIiIiQ3JlYXRlcyBhbiBBcGtIZWxwZXIgdW5sZXNzIG9uZSBpcyBhbHJlYWR5IGdpdmVuLiIiIgotICBpZiBpc2luc3RhbmNlKHBhdGhfb3JfaGVscGVyLCBiYXNlc3RyaW5nKToKLSAgICByZXR1cm4gQXBrSGVscGVyKHBhdGhfb3JfaGVscGVyKQotICByZXR1cm4gcGF0aF9vcl9oZWxwZXIKLQotCi0jIFRvIHBhcnNlIHRoZSBtYW5pZmVzdCwgdGhlIGZ1bmN0aW9uIHVzZXMgYSBub2RlIHN0YWNrIHdoZXJlIGF0IGVhY2ggbGV2ZWwgb2YKLSMgdGhlIHN0YWNrIGl0IGtlZXBzIHRoZSBjdXJyZW50bHkgaW4gZm9jdXMgbm9kZSBhdCB0aGF0IGxldmVsIChvZiBpbmRlbnRhdGlvbgotIyBpbiB0aGUgeG1sdHJlZSBvdXRwdXQsIGllLiBkZXB0aCBpbiB0aGUgdHJlZSkuIFRoZSBoZWlnaHQgb2YgdGhlIHN0YWNrIGlzCi0jIGRldGVybWluZGVkIGJ5IGxpbmUgaW5kZW50YXRpb24uIFdoZW4gaW5kZW50YXRpb24gaXMgaW5jcmVhc2VkIHNvIGlzIHRoZSBzdGFjawotIyAoYnkgcHVzaGluZyBhIG5ldyBlbXB0eSBub2RlIG9uIHRvIHRoZSBzdGFjaykuIFdoZW4gaW5kZW50YXRpb24gaXMgZGVjcmVhc2VkCi0jIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGlzIHBvcHBlZCAoc29tZXRpbWVzIG11bHRpcGxlIHRpbWVzLCB1bnRpbCBpbmRlbnRhdGlvbgotIyBtYXRjaGVzIHRoZSBoZWlnaHQgb2YgdGhlIHN0YWNrKS4gRWFjaCBsaW5lIHBhcnNlZCAoZWl0aGVyIGFuIGF0dHJpYnV0ZSBvciBhbgotIyBlbGVtZW50KSBpcyBhZGRlZCB0byB0aGUgbm9kZSBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayAoYWZ0ZXIgdGhlIHN0YWNrIGhhcwotIyBiZWVuIHBvcHBlZC9wdXNoZWQgZHVlIHRvIGluZGVudGF0aW9uKS4KLWRlZiBfUGFyc2VNYW5pZmVzdEZyb21BcGsoYXBrX3BhdGgpOgotICBhYXB0X291dHB1dCA9IGFhcHQuRHVtcCgneG1sdHJlZScsIGFwa19wYXRoLCAnQW5kcm9pZE1hbmlmZXN0LnhtbCcpCi0KLSAgcGFyc2VkX21hbmlmZXN0ID0ge30KLSAgbm9kZV9zdGFjayA9IFtwYXJzZWRfbWFuaWZlc3RdCi0gIGluZGVudCA9ICcgICcKLQotICBpZiBhYXB0X291dHB1dFswXS5zdGFydHN3aXRoKCdOJyk6Ci0gICAgIyBpZiB0aGUgZmlyc3QgbGluZSBpcyBhIG5hbWVzcGFjZSB0aGVuIHRoZSByb290IG1hbmlmZXN0IGlzIGluZGVudGVkLCBhbmQKLSAgICAjIHdlIG5lZWQgdG8gYWRkIGEgZHVtbXkgbmFtZXNwYWNlIG5vZGUsIHRoZW4gc2tpcCB0aGUgZmlyc3QgbGluZSAod2UgZG9udAotICAgICMgY2FyZSBhYm91dCBuYW1lc3BhY2VzKS4KLSAgICBub2RlX3N0YWNrLmluc2VydCgwLCB7fSkKLSAgICBvdXRwdXRfdG9fcGFyc2UgPSBhYXB0X291dHB1dFsxOl0KLSAgZWxzZToKLSAgICBvdXRwdXRfdG9fcGFyc2UgPSBhYXB0X291dHB1dAotCi0gIGZvciBsaW5lIGluIG91dHB1dF90b19wYXJzZToKLSAgICBpZiBsZW4obGluZSkgPT0gMDoKLSAgICAgIGNvbnRpbnVlCi0KLSAgICAjIElmIG5hbWVzcGFjZXMgYXJlIHN0cmlwcGVkLCBhYXB0IHN0aWxsIG91dHB1dHMgdGhlIGZ1bGwgdXJsIHRvIHRoZQotICAgICMgbmFtZXNwYWNlIGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBhdHRyaWJ1dGUgbmFtZXMuCi0gICAgbGluZSA9IGxpbmUucmVwbGFjZSgnaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkOicsICdhbmRyb2lkOicpCi0KLSAgICBpbmRlbnRfZGVwdGggPSAwCi0gICAgd2hpbGUgbGluZVsobGVuKGluZGVudCkgKiBpbmRlbnRfZGVwdGgpOl0uc3RhcnRzd2l0aChpbmRlbnQpOgotICAgICAgaW5kZW50X2RlcHRoICs9IDEKLQotICAgICMgUG9wIHRoZSBzdGFjayB1bnRpbCB0aGUgaGVpZ2h0IG9mIHRoZSBzdGFjayBpcyB0aGUgc2FtZSBpcyB0aGUgZGVwdGggb2YKLSAgICAjIHRoZSBjdXJyZW50IGxpbmUgd2l0aGluIHRoZSB0cmVlLgotICAgIG5vZGVfc3RhY2sgPSBub2RlX3N0YWNrWzppbmRlbnRfZGVwdGggKyAxXQotICAgIG5vZGUgPSBub2RlX3N0YWNrWy0xXQotCi0gICAgIyBFbGVtZW50IG5vZGVzIGFyZSBhIGxpc3Qgb2YgcHl0aG9uIGRpY3RzIHdoaWxlIGF0dHJpYnV0ZXMgYXJlIGp1c3QgYSBkaWN0LgotICAgICMgVGhpcyBpcyBiZWNhdXNlIG11bHRpcGxlIGVsZW1lbnRzLCBhdCB0aGUgc2FtZSBkZXB0aCBvZiB0cmVlIGFuZCB0aGUgc2FtZQotICAgICMgbmFtZSwgYXJlIGFsbCBhZGRlZCB0byB0aGUgc2FtZSBsaXN0IGtleWVkIHVuZGVyIHRoZSBlbGVtZW50IG5hbWUuCi0gICAgbSA9IF9NQU5JRkVTVF9FTEVNRU5UX1JFLm1hdGNoKGxpbmVbbGVuKGluZGVudCkgKiBpbmRlbnRfZGVwdGg6XSkKLSAgICBpZiBtOgotICAgICAgbWFuaWZlc3Rfa2V5ID0gbS5ncm91cCgxKQotICAgICAgaWYgbWFuaWZlc3Rfa2V5IGluIG5vZGU6Ci0gICAgICAgIG5vZGVbbWFuaWZlc3Rfa2V5XSArPSBbe31dCi0gICAgICBlbHNlOgotICAgICAgICBub2RlW21hbmlmZXN0X2tleV0gPSBbe31dCi0gICAgICBub2RlX3N0YWNrICs9IFtub2RlW21hbmlmZXN0X2tleV1bLTFdXQotICAgICAgY29udGludWUKLQotICAgIG0gPSBfTUFOSUZFU1RfQVRUUklCVVRFX1JFLm1hdGNoKGxpbmVbbGVuKGluZGVudCkgKiBpbmRlbnRfZGVwdGg6XSkKLSAgICBpZiBtOgotICAgICAgbWFuaWZlc3Rfa2V5ID0gbS5ncm91cCgxKQotICAgICAgaWYgbWFuaWZlc3Rfa2V5IGluIG5vZGU6Ci0gICAgICAgIHJhaXNlIGJhc2VfZXJyb3IuQmFzZUVycm9yKAotICAgICAgICAgICAgIkEgc2luZ2xlIGF0dHJpYnV0ZSBzaG91bGQgaGF2ZSBvbmUga2V5IGFuZCBvbmUgdmFsdWUiKQotICAgICAgZWxzZToKLSAgICAgICAgbm9kZVttYW5pZmVzdF9rZXldID0gbS5ncm91cCgyKSBvciBtLmdyb3VwKDMpCi0gICAgICBjb250aW51ZQotCi0gIHJldHVybiBwYXJzZWRfbWFuaWZlc3QKLQotCi1kZWYgX1BhcnNlTnVtZXJpY0tleShvYmosIGtleSwgZGVmYXVsdD0wKToKLSAgdmFsID0gb2JqLmdldChrZXkpCi0gIGlmIHZhbCBpcyBOb25lOgotICAgIHJldHVybiBkZWZhdWx0Ci0gIHJldHVybiBpbnQodmFsLCAwKQotCi0KLWNsYXNzIF9FeHBvcnRlZEFjdGl2aXR5KG9iamVjdCk6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLSAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgc2VsZi5hY3Rpb25zID0gc2V0KCkKLSAgICBzZWxmLmNhdGVnb3JpZXMgPSBzZXQoKQotICAgIHNlbGYuc2NoZW1lcyA9IHNldCgpCi0KLQotZGVmIF9JdGVyYXRlRXhwb3J0ZWRBY3Rpdml0aWVzKG1hbmlmZXN0X2luZm8pOgotICBhcHBfbm9kZSA9IG1hbmlmZXN0X2luZm9bJ21hbmlmZXN0J11bMF1bJ2FwcGxpY2F0aW9uJ11bMF0KLSAgYWN0aXZpdGllcyA9IGFwcF9ub2RlLmdldCgnYWN0aXZpdHknLCBbXSkgKyBhcHBfbm9kZS5nZXQoJ2FjdGl2aXR5LWFsaWFzJywgW10pCi0gIGZvciBhY3Rpdml0eV9ub2RlIGluIGFjdGl2aXRpZXM6Ci0gICAgIyBQcmVzZW5jZSBvZiBpbnRlbnQgZmlsdGVycyBtYWtlIGFuIGFjdGl2aXR5IGV4cG9ydGVkIGJ5IGRlZmF1bHQuCi0gICAgaGFzX2ludGVudF9maWx0ZXIgPSAnaW50ZW50LWZpbHRlcicgaW4gYWN0aXZpdHlfbm9kZQotICAgIGlmIG5vdCBfUGFyc2VOdW1lcmljS2V5KAotICAgICAgICBhY3Rpdml0eV9ub2RlLCAnYW5kcm9pZDpleHBvcnRlZCcsIGRlZmF1bHQ9aGFzX2ludGVudF9maWx0ZXIpOgotICAgICAgY29udGludWUKLQotICAgIGFjdGl2aXR5ID0gX0V4cG9ydGVkQWN0aXZpdHkoYWN0aXZpdHlfbm9kZS5nZXQoJ2FuZHJvaWQ6bmFtZScpKQotICAgICMgTWVyZ2UgYWxsIGludGVudC1maWx0ZXJzIGludG8gYSBzaW5nbGUgc2V0IGJlY2F1c2UgdGhlcmUgaXMgbm90Ci0gICAgIyBjdXJyZW50bHkgYSBuZWVkIHRvIGtlZXAgdGhlbSBzZXBhcmF0ZS4KLSAgICBmb3IgaW50ZW50X2ZpbHRlciBpbiBhY3Rpdml0eV9ub2RlLmdldCgnaW50ZW50LWZpbHRlcicsIFtdKToKLSAgICAgIGZvciBhY3Rpb24gaW4gaW50ZW50X2ZpbHRlci5nZXQoJ2FjdGlvbicsIFtdKToKLSAgICAgICAgYWN0aXZpdHkuYWN0aW9ucy5hZGQoYWN0aW9uLmdldCgnYW5kcm9pZDpuYW1lJykpCi0gICAgICBmb3IgY2F0ZWdvcnkgaW4gaW50ZW50X2ZpbHRlci5nZXQoJ2NhdGVnb3J5JywgW10pOgotICAgICAgICBhY3Rpdml0eS5jYXRlZ29yaWVzLmFkZChjYXRlZ29yeS5nZXQoJ2FuZHJvaWQ6bmFtZScpKQotICAgICAgZm9yIGRhdGEgaW4gaW50ZW50X2ZpbHRlci5nZXQoJ2RhdGEnLCBbXSk6Ci0gICAgICAgIGFjdGl2aXR5LnNjaGVtZXMuYWRkKGRhdGEuZ2V0KCdhbmRyb2lkOnNjaGVtZScpKQotICAgIHlpZWxkIGFjdGl2aXR5Ci0KLQotY2xhc3MgQXBrSGVscGVyKG9iamVjdCk6Ci0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgotICAgIHNlbGYuX2Fwa19wYXRoID0gcGF0aAotICAgIHNlbGYuX21hbmlmZXN0ID0gTm9uZQotCi0gIEBwcm9wZXJ0eQotICBkZWYgcGF0aChzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fYXBrX3BhdGgKLQotICBkZWYgR2V0QWN0aXZpdHlOYW1lKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IGxhdW5jaGVyIEFjdGl2aXR5IGluIHRoZSBhcGsuIiIiCi0gICAgbWFuaWZlc3RfaW5mbyA9IHNlbGYuX0dldE1hbmlmZXN0KCkKLSAgICBmb3IgYWN0aXZpdHkgaW4gX0l0ZXJhdGVFeHBvcnRlZEFjdGl2aXRpZXMobWFuaWZlc3RfaW5mbyk6Ci0gICAgICBpZiAoJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyBpbiBhY3Rpdml0eS5hY3Rpb25zIGFuZAotICAgICAgICAgICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicgaW4gYWN0aXZpdHkuY2F0ZWdvcmllcyk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9SZXNvbHZlTmFtZShhY3Rpdml0eS5uYW1lKQotICAgIHJldHVybiBOb25lCi0KLSAgZGVmIEdldFZpZXdBY3Rpdml0eU5hbWUoc2VsZik6Ci0gICAgIiIiUmV0dXJucyBuYW1lIG9mIHRoZSBmaXJzdCBhY3Rpb249VmlldyBBY3Rpdml0eSB0aGF0IGNhbiBoYW5kbGUgaHR0cC4iIiIKLSAgICBtYW5pZmVzdF9pbmZvID0gc2VsZi5fR2V0TWFuaWZlc3QoKQotICAgIGZvciBhY3Rpdml0eSBpbiBfSXRlcmF0ZUV4cG9ydGVkQWN0aXZpdGllcyhtYW5pZmVzdF9pbmZvKToKLSAgICAgIGlmICgnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcnIGluIGFjdGl2aXR5LmFjdGlvbnMgYW5kCi0gICAgICAgICAgJ2h0dHAnIGluIGFjdGl2aXR5LnNjaGVtZXMpOgotICAgICAgICByZXR1cm4gc2VsZi5fUmVzb2x2ZU5hbWUoYWN0aXZpdHkubmFtZSkKLSAgICByZXR1cm4gTm9uZQotCi0gIGRlZiBHZXRJbnN0cnVtZW50YXRpb25OYW1lKAotICAgICAgc2VsZiwgZGVmYXVsdD0nYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RSdW5uZXInKToKLSAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBJbnN0cnVtZW50YXRpb24gaW4gdGhlIGFway4iIiIKLSAgICBhbGxfaW5zdHJ1bWVudGF0aW9ucyA9IHNlbGYuR2V0QWxsSW5zdHJ1bWVudGF0aW9ucyhkZWZhdWx0PWRlZmF1bHQpCi0gICAgaWYgbGVuKGFsbF9pbnN0cnVtZW50YXRpb25zKSAhPSAxOgotICAgICAgcmFpc2UgYmFzZV9lcnJvci5CYXNlRXJyb3IoCi0gICAgICAgICAgJ1RoZXJlIGlzIG1vcmUgdGhhbiBvbmUgaW5zdHJ1bWVudGF0aW9uLiBFeHBlY3RlZCBvbmUuJykKLSAgICBlbHNlOgotICAgICAgcmV0dXJuIHNlbGYuX1Jlc29sdmVOYW1lKGFsbF9pbnN0cnVtZW50YXRpb25zWzBdWydhbmRyb2lkOm5hbWUnXSkKLQotICBkZWYgR2V0QWxsSW5zdHJ1bWVudGF0aW9ucygKLSAgICAgIHNlbGYsIGRlZmF1bHQ9J2FuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0UnVubmVyJyk6Ci0gICAgIiIiUmV0dXJucyBhIGxpc3Qgb2YgYWxsIEluc3RydW1lbnRhdGlvbnMgaW4gdGhlIGFway4iIiIKLSAgICB0cnk6Ci0gICAgICByZXR1cm4gc2VsZi5fR2V0TWFuaWZlc3QoKVsnbWFuaWZlc3QnXVswXVsnaW5zdHJ1bWVudGF0aW9uJ10KLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICByZXR1cm4gW3snYW5kcm9pZDpuYW1lJzogZGVmYXVsdH1dCi0KLSAgZGVmIEdldFBhY2thZ2VOYW1lKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIHBhY2thZ2UgbmFtZSBvZiB0aGUgYXBrLiIiIgotICAgIG1hbmlmZXN0X2luZm8gPSBzZWxmLl9HZXRNYW5pZmVzdCgpCi0gICAgdHJ5OgotICAgICAgcmV0dXJuIG1hbmlmZXN0X2luZm9bJ21hbmlmZXN0J11bMF1bJ3BhY2thZ2UnXQotICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIGRldGVybWluZSBwYWNrYWdlIG5hbWUgb2YgJXMnICUgc2VsZi5fYXBrX3BhdGgpCi0KLSAgZGVmIEdldFBlcm1pc3Npb25zKHNlbGYpOgotICAgIG1hbmlmZXN0X2luZm8gPSBzZWxmLl9HZXRNYW5pZmVzdCgpCi0gICAgdHJ5OgotICAgICAgcmV0dXJuIFtwWydhbmRyb2lkOm5hbWUnXSBmb3IKLSAgICAgICAgICAgICAgcCBpbiBtYW5pZmVzdF9pbmZvWydtYW5pZmVzdCddWzBdWyd1c2VzLXBlcm1pc3Npb24nXV0KLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICByZXR1cm4gW10KLQotICBkZWYgR2V0U3BsaXROYW1lKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHNwbGl0IG9mIHRoZSBhcGsuIiIiCi0gICAgbWFuaWZlc3RfaW5mbyA9IHNlbGYuX0dldE1hbmlmZXN0KCkKLSAgICB0cnk6Ci0gICAgICByZXR1cm4gbWFuaWZlc3RfaW5mb1snbWFuaWZlc3QnXVswXVsnc3BsaXQnXQotICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgIHJldHVybiBOb25lCi0KLSAgZGVmIEhhc0lzb2xhdGVkUHJvY2Vzc2VzKHNlbGYpOgotICAgICIiIlJldHVybnMgd2hldGhlciBhbnkgc2VydmljZXMgZXhpc3QgdGhhdCB1c2UgaXNvbGF0ZWRQcm9jZXNzPXRydWUuIiIiCi0gICAgbWFuaWZlc3RfaW5mbyA9IHNlbGYuX0dldE1hbmlmZXN0KCkKLSAgICB0cnk6Ci0gICAgICBhcHBsaWNhdGlvbiA9IG1hbmlmZXN0X2luZm9bJ21hbmlmZXN0J11bMF1bJ2FwcGxpY2F0aW9uJ11bMF0KLSAgICAgIHNlcnZpY2VzID0gYXBwbGljYXRpb25bJ3NlcnZpY2UnXQotICAgICAgcmV0dXJuIGFueSgKLSAgICAgICAgICBfUGFyc2VOdW1lcmljS2V5KHMsICdhbmRyb2lkOmlzb2xhdGVkUHJvY2VzcycpIGZvciBzIGluIHNlcnZpY2VzKQotICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgIHJldHVybiBGYWxzZQotCi0gIGRlZiBHZXRBbGxNZXRhZGF0YShzZWxmKToKLSAgICAiIiJSZXR1cm5zIGEgbGlzdCBtZXRhLWRhdGEgdGFncyBhcyAobmFtZSwgdmFsdWUpIHR1cGxlcy4iIiIKLSAgICBtYW5pZmVzdF9pbmZvID0gc2VsZi5fR2V0TWFuaWZlc3QoKQotICAgIHRyeToKLSAgICAgIGFwcGxpY2F0aW9uID0gbWFuaWZlc3RfaW5mb1snbWFuaWZlc3QnXVswXVsnYXBwbGljYXRpb24nXVswXQotICAgICAgbWV0YWRhdGEgPSBhcHBsaWNhdGlvblsnbWV0YS1kYXRhJ10KLSAgICAgIHJldHVybiBbKHguZ2V0KCdhbmRyb2lkOm5hbWUnKSwgeC5nZXQoJ2FuZHJvaWQ6dmFsdWUnKSkgZm9yIHggaW4gbWV0YWRhdGFdCi0gICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgcmV0dXJuIFtdCi0KLSAgZGVmIF9HZXRNYW5pZmVzdChzZWxmKToKLSAgICBpZiBub3Qgc2VsZi5fbWFuaWZlc3Q6Ci0gICAgICBzZWxmLl9tYW5pZmVzdCA9IF9QYXJzZU1hbmlmZXN0RnJvbUFwayhzZWxmLl9hcGtfcGF0aCkKLSAgICByZXR1cm4gc2VsZi5fbWFuaWZlc3QKLQotICBkZWYgX1Jlc29sdmVOYW1lKHNlbGYsIG5hbWUpOgotICAgIG5hbWUgPSBuYW1lLmxzdHJpcCgnLicpCi0gICAgaWYgJy4nIG5vdCBpbiBuYW1lOgotICAgICAgcmV0dXJuICclcy4lcycgJSAoc2VsZi5HZXRQYWNrYWdlTmFtZSgpLCBuYW1lKQotICAgIHJldHVybiBuYW1lCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2Fwa19oZWxwZXJfdGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvYXBrX2hlbHBlcl90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxMjEzN2RiLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvYXBrX2hlbHBlcl90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZGV2aWwgaW1wb3J0IGJhc2VfZXJyb3IKLWZyb20gZGV2aWwgaW1wb3J0IGRldmlsX2VudgotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBhcGtfaGVscGVyCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBtb2NrX2NhbGxzCi0KLXdpdGggZGV2aWxfZW52LlN5c1BhdGgoZGV2aWxfZW52LlBZTU9DS19QQVRIKToKLSAgaW1wb3J0IG1vY2sgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotCi0KLV9NQU5JRkVTVF9EVU1QID0gIiIiTjogYW5kcm9pZD1odHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQKLSAgRTogbWFuaWZlc3QgKGxpbmU9MSkKLSAgICBBOiBwYWNrYWdlPSJvcmcuY2hyb21pdW0uYWJjIiAoUmF3OiAib3JnLmNocm9taXVtLmFiYyIpCi0gICAgQTogc3BsaXQ9InJhbmRvbV9zcGxpdCIgKFJhdzogInJhbmRvbV9zcGxpdCIpCi0gICAgRTogdXNlcy1wZXJtaXNzaW9uIChsaW5lPTIpCi0gICAgICBBOiBhbmRyb2lkOm5hbWUoMHgwMTAxMDAwMyk9ImFuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVCIgKFJhdzogImFuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVCIpCi0gICAgRTogdXNlcy1wZXJtaXNzaW9uIChsaW5lPTMpCi0gICAgICBBOiBhbmRyb2lkOm5hbWUoMHgwMTAxMDAwMyk9ImFuZHJvaWQucGVybWlzc2lvbi5SRUFEX0VYVEVSTkFMX1NUT1JBR0UiIChSYXc6ICJhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9FWFRFUk5BTF9TVE9SQUdFIikKLSAgICBFOiB1c2VzLXBlcm1pc3Npb24gKGxpbmU9NCkKLSAgICAgIEE6IGFuZHJvaWQ6bmFtZSgweDAxMDEwMDAzKT0iYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19GSU5FX0xPQ0FUSU9OIiAoUmF3OiAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19GSU5FX0xPQ0FUSU9OIikKLSAgICBFOiBhcHBsaWNhdGlvbiAobGluZT01KQotICAgICAgRTogYWN0aXZpdHkgKGxpbmU9NikKLSAgICAgICAgQTogYW5kcm9pZDpuYW1lKDB4MDEwMTAwMDMpPSJvcmcuY2hyb21pdW0uQWN0aXZpdHlOYW1lIiAoUmF3OiAib3JnLmNocm9taXVtLkFjdGl2aXR5TmFtZSIpCi0gICAgICAgIEE6IGFuZHJvaWQ6ZXhwb3J0ZWQoMHgwMTAxMDAxMCk9KHR5cGUgMHgxMikweGZmZmZmZmZmCi0gICAgICBFOiBzZXJ2aWNlIChsaW5lPTcpCi0gICAgICAgIEE6IGFuZHJvaWQ6bmFtZSgweDAxMDEwMDAxKT0ib3JnLmNocm9taXVtLlJhbmRvbVNlcnZpY2UiIChSYXc6ICJvcmcuY2hyb21pdW0uUmFuZG9tU2VydmljZSIpCi0gICAgICAgIEE6IGFuZHJvaWQ6aXNvbGF0ZWRQcm9jZXNzKDB4MDEwMTA4ODgpPSh0eXBlIDB4MTIpMHhmZmZmZmZmZgotICAgICAgRTogYWN0aXZpdHkgKGxpbmU9MTczKQotICAgICAgICBBOiBhbmRyb2lkOm5hbWUoMHgwMTAxMDAwMyk9Ii5NYWluQWN0aXZpdHkiIChSYXc6ICIuTWFpbkFjdGl2aXR5IikKLSAgICAgICAgRTogaW50ZW50LWZpbHRlciAobGluZT0xNzcpCi0gICAgICAgICAgRTogYWN0aW9uIChsaW5lPTE3OCkKLSAgICAgICAgICAgIEE6IGFuZHJvaWQ6bmFtZSgweDAxMDEwMDAzKT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIChSYXc6ICJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIpCi0gICAgICAgICAgRTogY2F0ZWdvcnkgKGxpbmU9MTgwKQotICAgICAgICAgICAgQTogYW5kcm9pZDpuYW1lKDB4MDEwMTAwMDMpPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5ERUZBVUxUIiAoUmF3OiAiYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuREVGQVVMVCIpCi0gICAgICAgICAgRTogY2F0ZWdvcnkgKGxpbmU9MTgxKQotICAgICAgICAgICAgQTogYW5kcm9pZDpuYW1lKDB4MDEwMTAwMDMpPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUiIgKFJhdzogImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSIikKLSAgICAgIEU6IGFjdGl2aXR5LWFsaWFzIChsaW5lPTE3MykKLSAgICAgICAgQTogYW5kcm9pZDpuYW1lKDB4MDEwMTAwMDMpPSJvcmcuY2hyb21pdW0uVmlld0FjdGl2aXR5IiAoUmF3OiAib3JnLmNocm9taXVtLlZpZXdBY3Rpdml0eSIpCi0gICAgICAgIEE6IGFuZHJvaWQ6dGFyZ2V0QWN0aXZpdHkoMHgwMTAxMDIwMik9Im9yZy5jaHJvbWl1bS5BY3Rpdml0eU5hbWUiIChSYXc6ICJvcmcuY2hyb21pdW0uQWN0aXZpdHlOYW1lIikKLSAgICAgICAgRTogaW50ZW50LWZpbHRlciAobGluZT0xOTEpCi0gICAgICAgICAgRTogYWN0aW9uIChsaW5lPTE5MikKLSAgICAgICAgICAgIEE6IGFuZHJvaWQ6bmFtZSgweDAxMDEwMDAzKT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVciIChSYXc6ICJhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyIpCi0gICAgICAgICAgRTogZGF0YSAobGluZT0xOTgpCi0gICAgICAgICAgICBBOiBhbmRyb2lkOnNjaGVtZSgweDAxMDEwMDI3KT0iaHR0cCIgKFJhdzogImh0dHAiKQotICAgICAgICAgIEU6IGRhdGEgKGxpbmU9MTk5KQotICAgICAgICAgICAgQTogYW5kcm9pZDpzY2hlbWUoMHgwMTAxMDAyNyk9Imh0dHBzIiAoUmF3OiAiaHR0cHMiKQotICAgICAgRTogbWV0YS1kYXRhIChsaW5lPTQzKQotICAgICAgICBBOiBhbmRyb2lkOm5hbWUoMHgwMTAxMDAwMyk9Im5hbWUxIiAoUmF3OiAibmFtZTEiKQotICAgICAgICBBOiBhbmRyb2lkOnZhbHVlKDB4MDEwMTAwMjQpPSJ2YWx1ZTEiIChSYXc6ICJ2YWx1ZTEiKQotICAgICAgRTogbWV0YS1kYXRhIChsaW5lPTQzKQotICAgICAgICBBOiBhbmRyb2lkOm5hbWUoMHgwMTAxMDAwMyk9Im5hbWUyIiAoUmF3OiAibmFtZTIiKQotICAgICAgICBBOiBhbmRyb2lkOnZhbHVlKDB4MDEwMTAwMjQpPSJ2YWx1ZTIiIChSYXc6ICJ2YWx1ZTIiKQotICAgIEU6IGluc3RydW1lbnRhdGlvbiAobGluZT04KQotICAgICAgQTogYW5kcm9pZDpsYWJlbCgweDAxMDEwMDAxKT0iYWJjIiAoUmF3OiAiYWJjIikKLSAgICAgIEE6IGFuZHJvaWQ6bmFtZSgweDAxMDEwMDAzKT0ib3JnLmNocm9taXVtLlJhbmRvbUpVbml0NFRlc3RSdW5uZXIiIChSYXc6ICJvcmcuY2hyb21pdW0uUmFuZG9tSlVuaXQ0VGVzdFJ1bm5lciIpCi0gICAgICBBOiBhbmRyb2lkOnRhcmdldFBhY2thZ2UoMHgwMTAxMDAyMSk9Im9yZy5jaHJvbWl1bS5yYW5kb21fcGFja2FnZSIgKFJhdzoib3JnLmNocm9taXVtLnJhbmRvbV9wYWNha2dlIikKLSAgICAgIEE6IGp1bml0ND0odHlwZSAweDEyKTB4ZmZmZmZmZmYgKFJhdzogInRydWUiKQotICAgIEU6IGluc3RydW1lbnRhdGlvbiAobGluZT05KQotICAgICAgQTogYW5kcm9pZDpsYWJlbCgweDAxMDEwMDAxKT0iYWJjIiAoUmF3OiAiYWJjIikKLSAgICAgIEE6IGFuZHJvaWQ6bmFtZSgweDAxMDEwMDAzKT0ib3JnLmNocm9taXVtLlJhbmRvbVRlc3RSdW5uZXIiIChSYXc6ICJvcmcuY2hyb21pdW0uUmFuZG9tVGVzdFJ1bm5lciIpCi0gICAgICBBOiBhbmRyb2lkOnRhcmdldFBhY2thZ2UoMHgwMTAxMDAyMSk9Im9yZy5jaHJvbWl1bS5yYW5kb21fcGFja2FnZSIgKFJhdzoib3JnLmNocm9taXVtLnJhbmRvbV9wYWNha2dlIikKLSIiIgotCi1fTk9fSVNPTEFURURfU0VSVklDRVMgPSAiIiJOOiBhbmRyb2lkPWh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZAotICBFOiBtYW5pZmVzdCAobGluZT0xKQotICAgIEE6IHBhY2thZ2U9Im9yZy5jaHJvbWl1bS5hYmMiIChSYXc6ICJvcmcuY2hyb21pdW0uYWJjIikKLSAgICBFOiBhcHBsaWNhdGlvbiAobGluZT01KQotICAgICAgRTogYWN0aXZpdHkgKGxpbmU9NikKLSAgICAgICAgQTogYW5kcm9pZDpuYW1lKDB4MDEwMTAwMDMpPSJvcmcuY2hyb21pdW0uQWN0aXZpdHlOYW1lIiAoUmF3OiAib3JnLmNocm9taXVtLkFjdGl2aXR5TmFtZSIpCi0gICAgICAgIEE6IGFuZHJvaWQ6ZXhwb3J0ZWQoMHgwMTAxMDAxMCk9KHR5cGUgMHgxMikweGZmZmZmZmZmCi0gICAgICBFOiBzZXJ2aWNlIChsaW5lPTcpCi0gICAgICAgIEE6IGFuZHJvaWQ6bmFtZSgweDAxMDEwMDAxKT0ib3JnLmNocm9taXVtLlJhbmRvbVNlcnZpY2UiIChSYXc6ICJvcmcuY2hyb21pdW0uUmFuZG9tU2VydmljZSIpCi0iIiIKLQotX05PX1NFUlZJQ0VTID0gIiIiTjogYW5kcm9pZD1odHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQKLSAgRTogbWFuaWZlc3QgKGxpbmU9MSkKLSAgICBBOiBwYWNrYWdlPSJvcmcuY2hyb21pdW0uYWJjIiAoUmF3OiAib3JnLmNocm9taXVtLmFiYyIpCi0gICAgRTogYXBwbGljYXRpb24gKGxpbmU9NSkKLSAgICAgIEU6IGFjdGl2aXR5IChsaW5lPTYpCi0gICAgICAgIEE6IGFuZHJvaWQ6bmFtZSgweDAxMDEwMDAzKT0ib3JnLmNocm9taXVtLkFjdGl2aXR5TmFtZSIgKFJhdzogIm9yZy5jaHJvbWl1bS5BY3Rpdml0eU5hbWUiKQotICAgICAgICBBOiBhbmRyb2lkOmV4cG9ydGVkKDB4MDEwMTAwMTApPSh0eXBlIDB4MTIpMHhmZmZmZmZmZgotIiIiCi0KLV9OT19BUFBMSUNBVElPTiA9ICIiIk46IGFuZHJvaWQ9aHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkCi0gIEU6IG1hbmlmZXN0IChsaW5lPTEpCi0gICAgQTogcGFja2FnZT0ib3JnLmNocm9taXVtLmFiYyIgKFJhdzogIm9yZy5jaHJvbWl1bS5hYmMiKQotIiIiCi0KLV9TSU5HTEVfSU5TVFJVTUVOVEFUSU9OX01BTklGRVNUX0RVTVAgPSAiIiJOOiBhbmRyb2lkPWh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZAotICBFOiBtYW5pZmVzdCAobGluZT0xKQotICAgIEE6IHBhY2thZ2U9Im9yZy5jaHJvbWl1bS54eXoiIChSYXc6ICJvcmcuY2hyb21pdW0ueHl6IikKLSAgICBFOiBpbnN0cnVtZW50YXRpb24gKGxpbmU9OCkKLSAgICAgIEE6IGFuZHJvaWQ6bGFiZWwoMHgwMTAxMDAwMSk9Inh5eiIgKFJhdzogInh5eiIpCi0gICAgICBBOiBhbmRyb2lkOm5hbWUoMHgwMTAxMDAwMyk9Im9yZy5jaHJvbWl1bS5SYW5kb21UZXN0UnVubmVyIiAoUmF3OiAib3JnLmNocm9taXVtLlJhbmRvbVRlc3RSdW5uZXIiKQotICAgICAgQTogYW5kcm9pZDp0YXJnZXRQYWNrYWdlKDB4MDEwMTAwMjEpPSJvcmcuY2hyb21pdW0ucmFuZG9tX3BhY2thZ2UiIChSYXc6Im9yZy5jaHJvbWl1bS5yYW5kb21fcGFjYWtnZSIpCi0iIiIKLQotX1NJTkdMRV9KNF9JTlNUUlVNRU5UQVRJT05fTUFOSUZFU1RfRFVNUCA9ICIiIk46IGFuZHJvaWQ9aHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkCi0gIEU6IG1hbmlmZXN0IChsaW5lPTEpCi0gICAgQTogcGFja2FnZT0ib3JnLmNocm9taXVtLnh5eiIgKFJhdzogIm9yZy5jaHJvbWl1bS54eXoiKQotICAgIEU6IGluc3RydW1lbnRhdGlvbiAobGluZT04KQotICAgICAgQTogYW5kcm9pZDpsYWJlbCgweDAxMDEwMDAxKT0ieHl6IiAoUmF3OiAieHl6IikKLSAgICAgIEE6IGFuZHJvaWQ6bmFtZSgweDAxMDEwMDAzKT0ib3JnLmNocm9taXVtLlJhbmRvbUo0VGVzdFJ1bm5lciIgKFJhdzogIm9yZy5jaHJvbWl1bS5SYW5kb21KNFRlc3RSdW5uZXIiKQotICAgICAgQTogYW5kcm9pZDp0YXJnZXRQYWNrYWdlKDB4MDEwMTAwMjEpPSJvcmcuY2hyb21pdW0ucmFuZG9tX3BhY2thZ2UiIChSYXc6Im9yZy5jaHJvbWl1bS5yYW5kb21fcGFjYWtnZSIpCi0gICAgICBBOiBqdW5pdDQ9KHR5cGUgMHgxMikweGZmZmZmZmZmIChSYXc6ICJ0cnVlIikKLSIiIgotCi1fTk9fTkFNRVNQQUNFX01BTklGRVNUX0RVTVAgPSAiIiJFOiBtYW5pZmVzdCAobGluZT0xKQotICBBOiBwYWNrYWdlPSJvcmcuY2hyb21pdW0ueHl6IiAoUmF3OiAib3JnLmNocm9taXVtLnh5eiIpCi0gIEU6IGluc3RydW1lbnRhdGlvbiAobGluZT04KQotICAgIEE6IGh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZDpsYWJlbCgweDAxMDEwMDAxKT0ieHl6IiAoUmF3OiAieHl6IikKLSAgICBBOiBodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQ6bmFtZSgweDAxMDEwMDAzKT0ib3JnLmNocm9taXVtLlJhbmRvbVRlc3RSdW5uZXIiIChSYXc6ICJvcmcuY2hyb21pdW0uUmFuZG9tVGVzdFJ1bm5lciIpCi0gICAgQTogaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkOnRhcmdldFBhY2thZ2UoMHgwMTAxMDAyMSk9Im9yZy5jaHJvbWl1bS5yYW5kb21fcGFja2FnZSIgKFJhdzoib3JnLmNocm9taXVtLnJhbmRvbV9wYWNha2dlIikKLSIiIgotCi0KLWRlZiBfTW9ja0FhcHREdW1wKG1hbmlmZXN0X2R1bXApOgotICByZXR1cm4gbW9jay5wYXRjaCgKLSAgICAgICdkZXZpbC5hbmRyb2lkLnNkay5hYXB0LkR1bXAnLAotICAgICAgbW9jay5Nb2NrKHNpZGVfZWZmZWN0PU5vbmUsIHJldHVybl92YWx1ZT1tYW5pZmVzdF9kdW1wLnNwbGl0KCdcbicpKSkKLQotY2xhc3MgQXBrSGVscGVyVGVzdChtb2NrX2NhbGxzLlRlc3RDYXNlKToKLQotICBkZWYgdGVzdEdldEluc3RydW1lbnRhdGlvbk5hbWUoc2VsZik6Ci0gICAgd2l0aCBfTW9ja0FhcHREdW1wKF9NQU5JRkVTVF9EVU1QKToKLSAgICAgIGhlbHBlciA9IGFwa19oZWxwZXIuQXBrSGVscGVyKCcnKQotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhiYXNlX2Vycm9yLkJhc2VFcnJvcik6Ci0gICAgICAgIGhlbHBlci5HZXRJbnN0cnVtZW50YXRpb25OYW1lKCkKLQotICBkZWYgdGVzdEdldEFjdGl2aXR5TmFtZShzZWxmKToKLSAgICB3aXRoIF9Nb2NrQWFwdER1bXAoX01BTklGRVNUX0RVTVApOgotICAgICAgaGVscGVyID0gYXBrX2hlbHBlci5BcGtIZWxwZXIoJycpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICBoZWxwZXIuR2V0QWN0aXZpdHlOYW1lKCksICdvcmcuY2hyb21pdW0uYWJjLk1haW5BY3Rpdml0eScpCi0KLSAgZGVmIHRlc3RHZXRWaWV3QWN0aXZpdHlOYW1lKHNlbGYpOgotICAgIHdpdGggX01vY2tBYXB0RHVtcChfTUFOSUZFU1RfRFVNUCk6Ci0gICAgICBoZWxwZXIgPSBhcGtfaGVscGVyLkFwa0hlbHBlcignJykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgIGhlbHBlci5HZXRWaWV3QWN0aXZpdHlOYW1lKCksICdvcmcuY2hyb21pdW0uVmlld0FjdGl2aXR5JykKLQotICBkZWYgdGVzdEdldEFsbEluc3RydW1lbnRhdGlvbnMoc2VsZik6Ci0gICAgd2l0aCBfTW9ja0FhcHREdW1wKF9NQU5JRkVTVF9EVU1QKToKLSAgICAgIGhlbHBlciA9IGFwa19oZWxwZXIuQXBrSGVscGVyKCcnKQotICAgICAgYWxsX2luc3RydW1lbnRhdGlvbnMgPSBoZWxwZXIuR2V0QWxsSW5zdHJ1bWVudGF0aW9ucygpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYWxsX2luc3RydW1lbnRhdGlvbnMpLCAyKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYWxsX2luc3RydW1lbnRhdGlvbnNbMF1bJ2FuZHJvaWQ6bmFtZSddLAotICAgICAgICAgICAgICAgICAgICAgICAgJ29yZy5jaHJvbWl1bS5SYW5kb21KVW5pdDRUZXN0UnVubmVyJykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGFsbF9pbnN0cnVtZW50YXRpb25zWzFdWydhbmRyb2lkOm5hbWUnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdvcmcuY2hyb21pdW0uUmFuZG9tVGVzdFJ1bm5lcicpCi0KLSAgZGVmIHRlc3RHZXRQYWNrYWdlTmFtZShzZWxmKToKLSAgICB3aXRoIF9Nb2NrQWFwdER1bXAoX01BTklGRVNUX0RVTVApOgotICAgICAgaGVscGVyID0gYXBrX2hlbHBlci5BcGtIZWxwZXIoJycpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscyhoZWxwZXIuR2V0UGFja2FnZU5hbWUoKSwgJ29yZy5jaHJvbWl1bS5hYmMnKQotCi0gIGRlZiB0ZXN0R2V0UGVybXNzaW9ucyhzZWxmKToKLSAgICB3aXRoIF9Nb2NrQWFwdER1bXAoX01BTklGRVNUX0RVTVApOgotICAgICAgaGVscGVyID0gYXBrX2hlbHBlci5BcGtIZWxwZXIoJycpCi0gICAgICBhbGxfcGVybWlzc2lvbnMgPSBoZWxwZXIuR2V0UGVybWlzc2lvbnMoKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGFsbF9wZXJtaXNzaW9ucyksIDMpCi0gICAgICBzZWxmLmFzc2VydFRydWUoJ2FuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVCcgaW4gYWxsX3Blcm1pc3Npb25zKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKAotICAgICAgICAgICdhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9FWFRFUk5BTF9TVE9SQUdFJyBpbiBhbGxfcGVybWlzc2lvbnMpCi0gICAgICBzZWxmLmFzc2VydFRydWUoCi0gICAgICAgICAgJ2FuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfRklORV9MT0NBVElPTicgaW4gYWxsX3Blcm1pc3Npb25zKQotCi0gIGRlZiB0ZXN0R2V0U3BsaXROYW1lKHNlbGYpOgotICAgIHdpdGggX01vY2tBYXB0RHVtcChfTUFOSUZFU1RfRFVNUCk6Ci0gICAgICBoZWxwZXIgPSBhcGtfaGVscGVyLkFwa0hlbHBlcignJykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhlbHBlci5HZXRTcGxpdE5hbWUoKSwgJ3JhbmRvbV9zcGxpdCcpCi0KLSAgZGVmIHRlc3RIYXNJc29sYXRlZFByb2Nlc3Nlc19ub0FwcGxpY2F0aW9uKHNlbGYpOgotICAgIHdpdGggX01vY2tBYXB0RHVtcChfTk9fQVBQTElDQVRJT04pOgotICAgICAgaGVscGVyID0gYXBrX2hlbHBlci5BcGtIZWxwZXIoJycpCi0gICAgICBzZWxmLmFzc2VydEZhbHNlKGhlbHBlci5IYXNJc29sYXRlZFByb2Nlc3NlcygpKQotCi0gIGRlZiB0ZXN0SGFzSXNvbGF0ZWRQcm9jZXNzZXNfbm9TZXJ2aWNlcyhzZWxmKToKLSAgICB3aXRoIF9Nb2NrQWFwdER1bXAoX05PX1NFUlZJQ0VTKToKLSAgICAgIGhlbHBlciA9IGFwa19oZWxwZXIuQXBrSGVscGVyKCcnKQotICAgICAgc2VsZi5hc3NlcnRGYWxzZShoZWxwZXIuSGFzSXNvbGF0ZWRQcm9jZXNzZXMoKSkKLQotICBkZWYgdGVzdEhhc0lzb2xhdGVkUHJvY2Vzc2VzX29uZU5vdElzb2xhdGVkUHJvY2VzcyhzZWxmKToKLSAgICB3aXRoIF9Nb2NrQWFwdER1bXAoX05PX0lTT0xBVEVEX1NFUlZJQ0VTKToKLSAgICAgIGhlbHBlciA9IGFwa19oZWxwZXIuQXBrSGVscGVyKCcnKQotICAgICAgc2VsZi5hc3NlcnRGYWxzZShoZWxwZXIuSGFzSXNvbGF0ZWRQcm9jZXNzZXMoKSkKLQotICBkZWYgdGVzdEhhc0lzb2xhdGVkUHJvY2Vzc2VzX29uZUlzb2xhdGVkUHJvY2VzcyhzZWxmKToKLSAgICB3aXRoIF9Nb2NrQWFwdER1bXAoX01BTklGRVNUX0RVTVApOgotICAgICAgaGVscGVyID0gYXBrX2hlbHBlci5BcGtIZWxwZXIoJycpCi0gICAgICBzZWxmLmFzc2VydFRydWUoaGVscGVyLkhhc0lzb2xhdGVkUHJvY2Vzc2VzKCkpCi0KLSAgZGVmIHRlc3RHZXRTaW5nbGVJbnN0cnVtZW50YXRpb25OYW1lKHNlbGYpOgotICAgIHdpdGggX01vY2tBYXB0RHVtcChfU0lOR0xFX0lOU1RSVU1FTlRBVElPTl9NQU5JRkVTVF9EVU1QKToKLSAgICAgIGhlbHBlciA9IGFwa19oZWxwZXIuQXBrSGVscGVyKCcnKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ29yZy5jaHJvbWl1bS5SYW5kb21UZXN0UnVubmVyJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5HZXRJbnN0cnVtZW50YXRpb25OYW1lKCkpCi0KLSAgZGVmIHRlc3RHZXRTaW5nbGVKVW5pdDRJbnN0cnVtZW50YXRpb25OYW1lKHNlbGYpOgotICAgIHdpdGggX01vY2tBYXB0RHVtcChfU0lOR0xFX0o0X0lOU1RSVU1FTlRBVElPTl9NQU5JRkVTVF9EVU1QKToKLSAgICAgIGhlbHBlciA9IGFwa19oZWxwZXIuQXBrSGVscGVyKCcnKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ29yZy5jaHJvbWl1bS5SYW5kb21KNFRlc3RSdW5uZXInLAotICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLkdldEluc3RydW1lbnRhdGlvbk5hbWUoKSkKLQotICBkZWYgdGVzdEdldEFsbE1ldGFkYXRhKHNlbGYpOgotICAgIHdpdGggX01vY2tBYXB0RHVtcChfTUFOSUZFU1RfRFVNUCk6Ci0gICAgICBoZWxwZXIgPSBhcGtfaGVscGVyLkFwa0hlbHBlcignJykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsoJ25hbWUxJywgJ3ZhbHVlMScpLCAoJ25hbWUyJywgJ3ZhbHVlMicpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5HZXRBbGxNZXRhZGF0YSgpKQotCi0gIGRlZiB0ZXN0R2V0U2luZ2xlSW5zdHJ1bWVudGF0aW9uTmFtZV9zdHJpcHBlZE5hbWVzcGFjZXMoc2VsZik6Ci0gICAgd2l0aCBfTW9ja0FhcHREdW1wKF9OT19OQU1FU1BBQ0VfTUFOSUZFU1RfRFVNUCk6Ci0gICAgICBoZWxwZXIgPSBhcGtfaGVscGVyLkFwa0hlbHBlcignJykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdvcmcuY2hyb21pdW0uUmFuZG9tVGVzdFJ1bm5lcicsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIuR2V0SW5zdHJ1bWVudGF0aW9uTmFtZSgpKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2FwcF91aS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvYXBwX3VpLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjA0ZThiLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvYXBwX3VpLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiUHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byBpbnRlcmFjdCB3aXRoIFVJIGVsZW1lbnRzIG9mIGFuIEFuZHJvaWQgYXBwLiIiIgotCi1pbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCByZQotZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlIGFzIGVsZW1lbnRfdHJlZQotCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRlY29yYXRvcnMKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3RlbXBfZmlsZQotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgZ2VvbWV0cnkKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHRpbWVvdXRfcmV0cnkKLQotX0RFRkFVTFRfU0hPUlRfVElNRU9VVCA9IDEwCi1fREVGQVVMVF9TSE9SVF9SRVRSSUVTID0gMwotX0RFRkFVTFRfTE9OR19USU1FT1VUID0gMzAKLV9ERUZBVUxUX0xPTkdfUkVUUklFUyA9IDAKLQotIyBQYXJzZSByZWN0YW5nbGUgYm91bmRzIGdpdmVuIGFzOiAnW2xlZnQsdG9wXVtyaWdodCxib3R0b21dJy4KLV9SRV9CT1VORFMgPSByZS5jb21waWxlKAotICAgIHInXFsoP1A8bGVmdD5cZCspLCg/UDx0b3A+XGQrKVxdXFsoP1A8cmlnaHQ+XGQrKSwoP1A8Ym90dG9tPlxkKylcXScpCi0KLQotY2xhc3MgX1VpTm9kZShvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2UsIHhtbF9ub2RlLCBwYWNrYWdlPU5vbmUpOgotICAgICIiIk9iamVjdCB0byBpbnRlcmFjdCB3aXRoIGEgVUkgbm9kZSBmcm9tIGFuIHhtbCBzbmFwc2hvdC4KLQotICAgIE5vdGU6IHRoZXJlIGlzIHVzdWFsbHkgbm8gbmVlZCB0byBjYWxsIHRoaXMgY29uc3RydWN0b3IgZGlyZWN0bHkuIEluc3RlYWQsCi0gICAgdXNlIGFuIEFwcFVpIG9iamVjdCAoYmVsb3cpIHRvIGdyYWIgYW4geG1sIHNjcmVlbnNob3QgZnJvbSBhIGRldmljZSBhbmQKLSAgICBmaW5kIG5vZGVzIGluIGl0LgotCi0gICAgQXJnczoKLSAgICAgIGRldmljZTogQSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMgaW5zdGFuY2UuCi0gICAgICB4bWxfbm9kZTogQW4gRWxlbWVudFRyZWUgaW5zdGFuY2Ugb2YgdGhlIG5vZGUgdG8gaW50ZXJhY3Qgd2l0aC4KLSAgICAgIHBhY2thZ2U6IEFuIG9wdGlvbmFsIHBhY2thZ2UgbmFtZSBmb3IgdGhlIGFwcCBvd25pbmcgdGhpcyBub2RlLgotICAgICIiIgotICAgIHNlbGYuX2RldmljZSA9IGRldmljZQotICAgIHNlbGYuX3htbF9ub2RlID0geG1sX25vZGUKLSAgICBzZWxmLl9wYWNrYWdlID0gcGFja2FnZQotCi0gIGRlZiBfR2V0QXR0cmlidXRlKHNlbGYsIGtleSk6Ci0gICAgIiIiR2V0IHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgb2YgdGhpcyBub2RlLiIiIgotICAgIHJldHVybiBzZWxmLl94bWxfbm9kZS5hdHRyaWIuZ2V0KGtleSkKLQotICBAcHJvcGVydHkKLSAgZGVmIGJvdW5kcyhzZWxmKToKLSAgICAiIiJHZXQgYSByZWN0YW5nbGUgd2l0aCB0aGUgYm91bmRzIG9mIHRoaXMgVUkgbm9kZS4KLQotICAgIFJldHVybnM6Ci0gICAgICBBIGdlb21ldHJ5LlJlY3RhbmdsZSBpbnN0YW5jZS4KLSAgICAiIiIKLSAgICBkID0gX1JFX0JPVU5EUy5tYXRjaChzZWxmLl9HZXRBdHRyaWJ1dGUoJ2JvdW5kcycpKS5ncm91cGRpY3QoKQotICAgIHJldHVybiBnZW9tZXRyeS5SZWN0YW5nbGUuRnJvbURpY3Qoe2s6IGludCh2KSBmb3IgaywgdiBpbiBkLml0ZXJpdGVtcygpfSkKLQotICBkZWYgVGFwKHNlbGYsIHBvaW50PU5vbmUsIGRwX3VuaXRzPUZhbHNlKToKLSAgICAiIiJTZW5kIGEgdGFwIGV2ZW50IHRvIHRoZSBVSSBub2RlLgotCi0gICAgQXJnczoKLSAgICAgIHBvaW50OiBBbiBvcHRpb25hbCBnZW9tZXRyeS5Qb2ludCBpbnN0YW5jZSBpbmRpY2F0aW5nIHRoZSBsb2NhdGlvbiB0bwotICAgICAgICB0YXAsIHJlbGF0aXZlIHRvIHRoZSBib3VuZHMgb2YgdGhlIFVJIG5vZGUsIGkuZS4gKDAsIDApIHRhcHMgdGhlCi0gICAgICAgIHRvcC1sZWZ0IGNvcm5lci4gSWYgb21taXRlZCwgdGhlIGNlbnRlciBvZiB0aGUgbm9kZSBpcyB0YXBwZWQuCi0gICAgICBkcF91bml0czogSWYgVHJ1ZSwgaW5kaWNhdGVzIHRoYXQgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBhcmUgZ2l2ZW4KLSAgICAgICAgaW4gZGV2aWNlLWluZGVwZW5kZW50IHBpeGVsczsgb3RoZXJ3aXNlIHRoZXkgYXJlIGFzc3VtZWQgdG8gYmUgInJlYWwiCi0gICAgICAgIHBpeGVscy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCB3aGVuIHRoZSBwb2ludCBpcyBvbW1pdGVkLgotICAgICIiIgotICAgIGlmIHBvaW50IGlzIE5vbmU6Ci0gICAgICBwb2ludCA9IHNlbGYuYm91bmRzLmNlbnRlcgotICAgIGVsc2U6Ci0gICAgICBpZiBkcF91bml0czoKLSAgICAgICAgcG9pbnQgPSAoZmxvYXQoc2VsZi5fZGV2aWNlLnBpeGVsX2RlbnNpdHkpIC8gMTYwKSAqIHBvaW50Ci0gICAgICBwb2ludCArPSBzZWxmLmJvdW5kcy50b3BfbGVmdAotCi0gICAgeCwgeSA9IChzdHIoaW50KHYpKSBmb3IgdiBpbiBwb2ludCkKLSAgICBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKFsnaW5wdXQnLCAndGFwJywgeCwgeV0sIGNoZWNrX3JldHVybj1UcnVlKQotCi0gIGRlZiBEdW1wKHNlbGYpOgotICAgICIiIkdldCBhIGJyaWVmIHN1bW1hcnkgb2YgdGhlIGNoaWxkIG5vZGVzIHRoYXQgY2FuIGJlIGZvdW5kIG9uIHRoaXMgbm9kZS4KLQotICAgIFJldHVybnM6Ci0gICAgICBBIGxpc3Qgb2YgbGluZXMgdGhhdCBjYW4gYmUgbG9nZ2VkIG9yIG90aGVyd2lzZSBwcmludGVkLgotICAgICIiIgotICAgIHN1bW1hcnkgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChzZXQpCi0gICAgZm9yIG5vZGUgaW4gc2VsZi5feG1sX25vZGUuaXRlcigpOgotICAgICAgcGFja2FnZSA9IG5vZGUuZ2V0KCdwYWNrYWdlJykgb3IgJyhubyBwYWNrYWdlKScKLSAgICAgIGxhYmVsID0gbm9kZS5nZXQoJ3Jlc291cmNlLWlkJykgb3IgJyhubyBpZCknCi0gICAgICB0ZXh0ID0gbm9kZS5nZXQoJ3RleHQnKQotICAgICAgaWYgdGV4dDoKLSAgICAgICAgbGFiZWwgPSAnJXNbJXJdJyAlIChsYWJlbCwgdGV4dCkKLSAgICAgIHN1bW1hcnlbcGFja2FnZV0uYWRkKGxhYmVsKQotICAgIGxpbmVzID0gW10KLSAgICBmb3IgcGFja2FnZSwgbGFiZWxzIGluIHNvcnRlZChzdW1tYXJ5Lml0ZXJpdGVtcygpKToKLSAgICAgIGxpbmVzLmFwcGVuZCgnLSAlczonICUgcGFja2FnZSkKLSAgICAgIGZvciBsYWJlbCBpbiBzb3J0ZWQobGFiZWxzKToKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgIC0gJXMnICUgbGFiZWwpCi0gICAgcmV0dXJuIGxpbmVzCi0KLSAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgIiIiUmV0cmlldmUgYSBjaGlsZCBvZiB0aGlzIG5vZGUgYnkgaXRzIGluZGV4LgotCi0gICAgQXJnczoKLSAgICAgIGtleTogQW4gaW50ZWdlciB3aXRoIHRoZSBpbmRleCBvZiB0aGUgY2hpbGQgdG8gcmV0cmlldmUuCi0gICAgUmV0dXJuczoKLSAgICAgIEEgVUkgbm9kZSBpbnN0YW5jZSBvZiB0aGUgc2VsZWN0ZWQgY2hpbGQuCi0gICAgUmFpc2VzOgotICAgICAgSW5kZXhFcnJvciBpZiB0aGUgaW5kZXggaXMgb3V0IG9mIHJhbmdlLgotICAgICIiIgotICAgIHJldHVybiB0eXBlKHNlbGYpKHNlbGYuX2RldmljZSwgc2VsZi5feG1sX25vZGVba2V5XSwgcGFja2FnZT1zZWxmLl9wYWNrYWdlKQotCi0gIGRlZiBfRmluZChzZWxmLCAqKmt3YXJncyk6Ci0gICAgIiIiRmluZCB0aGUgZmlyc3QgZGVzY2VuZGFudCBub2RlIHRoYXQgbWF0Y2hlcyBhIGdpdmVuIGNyaXRlcmlhLgotCi0gICAgTm90ZTogY2xpZW50cyB3b3VsZCB1c3VhbGx5IGNhbGwgQXBwVWkuR2V0VWlOb2RlIG9yIEFwcFVpLldhaXRGb3JVaU5vZGUKLSAgICBpbnN0ZWFkLgotCi0gICAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgIGFwcCA9IGFwcF91aS5BcHBVaShkZXZpY2UsIHBhY2thZ2U9J29yZy5teS5hcHAnKQotICAgICAgYXBwLkdldFVpTm9kZShyZXNvdXJjZV9pZD0nc29tZV9lbGVtZW50JywgdGV4dD0naGVsbG8nKQotCi0gICAgd291bGQgcmV0cmlldmUgdGhlIGZpcnN0IG1hdGNoaW5nIG5vZGUgd2l0aCBib3RoIG9mIHRoZSB4bWwgYXR0cmlidXRlczoKLQotICAgICAgcmVzb3VyY2UtaWQ9J29yZy5teS5hcHA6aWQvc29tZV9lbGVtZW50JwotICAgICAgdGV4dD0naGVsbG8nCi0KLSAgICBBcyB0aGUgZXhhbXBsZSBzaG93cywgaWYgZ2l2ZW4gYW5kIG5lZWRlZCwgdGhlIHZhbHVlIG9mIHRoZSByZXNvdXJjZV9pZCBrZXkKLSAgICBpcyBhdXRvLWNvbXBsZXRlZCB3aXRoIHRoZSBwYWNrYWdlIG5hbWUgc3BlY2lmaWVkIGluIHRoZSBBcHBVaSBjb25zdHJ1Y3Rvci4KLQotICAgIEFyZ3M6Ci0gICAgICBBcmd1bWVudHMgYXJlIHNwZWNpZmllZCBhcyBrZXktdmFsdWUgcGFpcnMsIHdoZXJlIGtleXMgY29ycmVuc3BvbmQgdG8KLSAgICAgIGF0dHJpYnV0ZSBuYW1lcyBpbiB4bWwgbm9kZXMgKHJlcGxhY2luZyBhbnkgJy0nIHdpdGggJ18nIHRvIG1ha2UgdGhlbQotICAgICAgdmFsaWQgaWRlbnRpZmllcnMpLiBBdCBsZWFzdCBvbmUgYXJndW1lbnQgbXVzdCBiZSBzdXBwbGllZCwgYW5kIGFyZ3VtZW50cwotICAgICAgd2l0aCBhIE5vbmUgdmFsdWUgYXJlIGlnbm9yZWQuCi0gICAgUmV0dXJuczoKLSAgICAgIEEgVUkgbm9kZSBpbnN0YW5jZSBvZiB0aGUgZmlyc3QgZGVzY2VuZGFudCBub2RlIHRoYXQgbWF0Y2hlcyBBTEwgdGhlCi0gICAgICBnaXZlbiBrZXktdmFsdWUgY3JpdGVyaWE7IG9yIE5vbmUgaWYgbm8gc3VjaCBub2RlIGlzIGZvdW5kLgotICAgIFJhaXNlczoKLSAgICAgIFR5cGVFcnJvciBpZiBubyBzZWFyY2ggYXJndW1lbnRzIGFyZSBwcm92aWRlZC4KLSAgICAiIiIKLSAgICBtYXRjaGVzX2NyaXRlcmlhID0gc2VsZi5fTm9kZU1hdGNoZXIoa3dhcmdzKQotICAgIGZvciBub2RlIGluIHNlbGYuX3htbF9ub2RlLml0ZXIoKToKLSAgICAgIGlmIG1hdGNoZXNfY3JpdGVyaWEobm9kZSk6Ci0gICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHNlbGYuX2RldmljZSwgbm9kZSwgcGFja2FnZT1zZWxmLl9wYWNrYWdlKQotICAgIHJldHVybiBOb25lCi0KLSAgZGVmIF9Ob2RlTWF0Y2hlcihzZWxmLCBrd2FyZ3MpOgotICAgICMgQXV0by1jb21wbGV0ZSByZXNvdXJjZS1pZCdzIHVzaW5nIHRoZSBwYWNrYWdlIG5hbWUgaWYgYXZhaWxhYmxlLgotICAgIHJlc291cmNlX2lkID0ga3dhcmdzLmdldCgncmVzb3VyY2VfaWQnKQotICAgIGlmIChyZXNvdXJjZV9pZCBpcyBub3QgTm9uZQotICAgICAgICBhbmQgc2VsZi5fcGFja2FnZSBpcyBub3QgTm9uZQotICAgICAgICBhbmQgJzppZC8nIG5vdCBpbiByZXNvdXJjZV9pZCk6Ci0gICAgICBrd2FyZ3NbJ3Jlc291cmNlX2lkJ10gPSAnJXM6aWQvJXMnICUgKHNlbGYuX3BhY2thZ2UsIHJlc291cmNlX2lkKQotCi0gICAgY3JpdGVyaWEgPSBbKGsucmVwbGFjZSgnXycsICctJyksIHYpCi0gICAgICAgICAgICAgICAgZm9yIGssIHYgaW4ga3dhcmdzLml0ZXJpdGVtcygpCi0gICAgICAgICAgICAgICAgaWYgdiBpcyBub3QgTm9uZV0KLSAgICBpZiBub3QgY3JpdGVyaWE6Ci0gICAgICByYWlzZSBUeXBlRXJyb3IoJ0F0IGxlYXN0IG9uZSBzZWFyY2ggY3JpdGVyaWEgc2hvdWxkIGJlIHNwZWNpZmllZCcpCi0gICAgcmV0dXJuIGxhbWJkYSBub2RlOiBhbGwobm9kZS5nZXQoaykgPT0gdiBmb3IgaywgdiBpbiBjcml0ZXJpYSkKLQotCi1jbGFzcyBBcHBVaShvYmplY3QpOgotICAjIHRpbWVvdXQgYW5kIHJldHJ5IGFyZ3VtZW50cyBhcHBlYXIgdW51c2VkLCBidXQgYXJlIGhhbmRsZWQgYnkgZGVjb3JhdG9yLgotICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLQotICBkZWYgX19pbml0X18oc2VsZiwgZGV2aWNlLCBwYWNrYWdlPU5vbmUpOgotICAgICIiIk9iamVjdCB0byBpbnRlcmFjdCB3aXRoIHRoZSBVSSBvZiBhbiBBbmRyb2lkIGFwcC4KLQotICAgIEFyZ3M6Ci0gICAgICBkZXZpY2U6IEEgZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzIGluc3RhbmNlLgotICAgICAgcGFja2FnZTogQW4gb3B0aW9uYWwgcGFja2FnZSBuYW1lIGZvciB0aGUgYXBwLgotICAgICIiIgotICAgIHNlbGYuX2RldmljZSA9IGRldmljZQotICAgIHNlbGYuX3BhY2thZ2UgPSBwYWNrYWdlCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBwYWNrYWdlKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9wYWNrYWdlCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRGVmYXVsdHMoX0RFRkFVTFRfU0hPUlRfVElNRU9VVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RFRkFVTFRfU0hPUlRfUkVUUklFUykKLSAgZGVmIF9HZXRSb290VWlOb2RlKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJHZXQgYSBub2RlIHBvaW50aW5nIHRvIHRoZSByb290IG9mIHRoZSBVSSBub2RlcyBvbiBzY3JlZW4uCi0KLSAgICBOb3RlOiBUaGlzIGlzIGN1cnJlbnRseSBpbXBsZW1lbnRlZCB2aWEgYWRiIGNhbGxzIHRvIHVpYXRvbWF0b3IgYW5kIGl0Ci0gICAgaXMgKnNsb3cqLCB+MiBzZWNzIHBlciBjYWxsLiBEbyBub3QgcmVseSBvbiBsb3ctbGV2ZWwgaW1wbGVtZW50YXRpb24KLSAgICBkZXRhaWxzIHRoYXQgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgotCi0gICAgVE9ETyhjcmJ1Zy5jb20vNTY3MjE3KTogU3dhcCB0byBhIG1vcmUgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uLgotCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IEEgbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIHVpYXV0b21hdG9yIGR1bXAuCi0gICAgICByZXRyaWVzOiBOdW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgaWYgdGhlIGFkYiBjb21tYW5kIGZhaWxzLgotICAgIFJldHVybnM6Ci0gICAgICBBIFVJIG5vZGUgaW5zdGFuY2UgcG9pbnRpbmcgdG8gdGhlIHJvb3Qgb2YgdGhlIHhtbCBzY3JlZW5zaG90LgotICAgICIiIgotICAgIHdpdGggZGV2aWNlX3RlbXBfZmlsZS5EZXZpY2VUZW1wRmlsZShzZWxmLl9kZXZpY2UuYWRiKSBhcyBkdGVtcDoKLSAgICAgIHNlbGYuX2RldmljZS5SdW5TaGVsbENvbW1hbmQoWyd1aWF1dG9tYXRvcicsICdkdW1wJywgZHRlbXAubmFtZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgICB4bWxfbm9kZSA9IGVsZW1lbnRfdHJlZS5mcm9tc3RyaW5nKAotICAgICAgICAgIHNlbGYuX2RldmljZS5SZWFkRmlsZShkdGVtcC5uYW1lLCBmb3JjZV9wdWxsPVRydWUpKQotICAgIHJldHVybiBfVWlOb2RlKHNlbGYuX2RldmljZSwgeG1sX25vZGUsIHBhY2thZ2U9c2VsZi5fcGFja2FnZSkKLQotICBkZWYgU2NyZWVuRHVtcChzZWxmKToKLSAgICAiIiJHZXQgYSBicmllZiBzdW1tYXJ5IG9mIHRoZSBub2RlcyB0aGF0IGNhbiBiZSBmb3VuZCBvbiB0aGUgc2NyZWVuLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgbGlzdCBvZiBsaW5lcyB0aGF0IGNhbiBiZSBsb2dnZWQgb3Igb3RoZXJ3aXNlIHByaW50ZWQuCi0gICAgIiIiCi0gICAgcmV0dXJuIHNlbGYuX0dldFJvb3RVaU5vZGUoKS5EdW1wKCkKLQotICBkZWYgR2V0VWlOb2RlKHNlbGYsICoqa3dhcmdzKToKLSAgICAiIiJHZXQgdGhlIGZpcnN0IG5vZGUgZm91bmQgbWF0Y2hpbmcgYSBzcGVjaWZpZWQgY3JpdGVyaWEuCi0KLSAgICBBcmdzOgotICAgICAgU2VlIF9VaU5vZGUuX0ZpbmQuCi0gICAgUmV0dXJuczoKLSAgICAgIEEgVUkgbm9kZSBpbnN0YW5jZSBvZiB0aGUgbm9kZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIE5vbmUuCi0gICAgIiIiCi0gICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwotICAgIHJldHVybiBzZWxmLl9HZXRSb290VWlOb2RlKCkuX0ZpbmQoKiprd2FyZ3MpCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRGVmYXVsdHMoX0RFRkFVTFRfTE9OR19USU1FT1VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfREVGQVVMVF9MT05HX1JFVFJJRVMpCi0gIGRlZiBXYWl0Rm9yVWlOb2RlKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lLCAqKmt3YXJncyk6Ci0gICAgIiIiV2FpdCBmb3IgYSBub2RlIG1hdGNoaW5nIGEgZ2l2ZW4gY3JpdGVyaWEgdG8gYXBwZWFyIG9uIHRoZSBzY3JlZW4uCi0KLSAgICBBcmdzOgotICAgICAgdGltZW91dDogQSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgbWF0Y2hpbmcgbm9kZSB0byBhcHBlYXIuCi0gICAgICByZXRyaWVzOiBOdW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgaW4gY2FzZSBvZiBhZGIgY29tbWFuZCBlcnJvcnMuCi0gICAgICBGb3Igb3RoZXIgYXJncywgdG8gc3BlY2lmeSB0aGUgc2VhcmNoIGNyaXRlcmlhLCBzZWUgX1VpTm9kZS5fRmluZC4KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIFVJIG5vZGUgaW5zdGFuY2UgZm91bmQuCi0gICAgUmFpc2VzOgotICAgICAgZGV2aWNlX2Vycm9ycy5Db21tYW5kVGltZW91dEVycm9yIGlmIHRoZSBub2RlIGlzIG5vdCBmb3VuZCBiZWZvcmUgdGhlCi0gICAgICB0aW1lb3V0LgotICAgICIiIgotICAgIGRlZiBub2RlX2ZvdW5kKCk6Ci0gICAgICByZXR1cm4gc2VsZi5HZXRVaU5vZGUoKiprd2FyZ3MpCi0KLSAgICByZXR1cm4gdGltZW91dF9yZXRyeS5XYWl0Rm9yKG5vZGVfZm91bmQpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2FwcF91aV90ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9hcHBfdWlfdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ3Mjk4NS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2FwcF91aV90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiVW5pdCB0ZXN0cyBmb3IgdGhlIGFwcF91aSBtb2R1bGUuIiIiCi0KLWltcG9ydCB1bml0dGVzdAotZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlIGFzIGVsZW1lbnRfdHJlZQotCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgYXBwX3VpCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9lcnJvcnMKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGdlb21ldHJ5Ci0KLXdpdGggZGV2aWxfZW52LlN5c1BhdGgoZGV2aWxfZW52LlBZTU9DS19QQVRIKToKLSAgaW1wb3J0IG1vY2sgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotCi0KLU1PQ0tfWE1MX0xPQURJTkcgPSAnJycKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04JyBzdGFuZGFsb25lPSd5ZXMnID8+Ci08aGllcmFyY2h5IHJvdGF0aW9uPSIwIj4KLSAgPG5vZGUgYm91bmRzPSJbMCw1MF1bMTUzNiwxNzhdIiBjb250ZW50LWRlc2M9IkxvYWRpbmciCi0gICAgICByZXNvdXJjZS1pZD0iY29tLmV4YW1wbGUuYXBwOmlkL3NwaW5uZXIiLz4KLTwvaGllcmFyY2h5PgotJycnLnN0cmlwKCkKLQotCi1NT0NLX1hNTF9MT0FERUQgPSAnJycKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04JyBzdGFuZGFsb25lPSd5ZXMnID8+Ci08aGllcmFyY2h5IHJvdGF0aW9uPSIwIj4KLSAgPG5vZGUgYm91bmRzPSJbMCw1MF1bMTUzNiwxNzhdIiBjb250ZW50LWRlc2M9IiIKLSAgICAgIHJlc291cmNlLWlkPSJjb20uZXhhbXBsZS5hcHA6aWQvdG9vbGJhciI+Ci0gICAgPG5vZGUgYm91bmRzPSJbMCw1OF1bMTEyLDE3MF0iIGNvbnRlbnQtZGVzYz0iT3BlbiBuYXZpZ2F0aW9uIGRyYXdlciIvPgotICAgIDxub2RlIGJvdW5kcz0iWzEyMSw1MF1bMTUzNiwxNzhdIgotICAgICAgICByZXNvdXJjZS1pZD0iY29tLmV4YW1wbGUuYXBwOmlkL2FjdGlvbmJhcl9jdXN0b21fdmlldyI+Ci0gICAgICA8bm9kZSBib3VuZHM9IlsxMjEsNTBdWzE0MjQsMTc4XSIKLSAgICAgICAgICByZXNvdXJjZS1pZD0iY29tLmV4YW1wbGUuYXBwOmlkL2FjdGlvbmJhcl90aXRsZSIgdGV4dD0iUHJpbWFyeSIvPgotICAgICAgPG5vZGUgYm91bmRzPSJbMTQyNCw1MF1bMTUzNiwxNzhdIiBjb250ZW50LWRlc2M9IlNlYXJjaCIKLSAgICAgICAgICByZXNvdXJjZS1pZD0iY29tLmV4YW1wbGUuYXBwOmlkL2FjdGlvbmJhcl9zZWFyY2hfYnV0dG9uIi8+Ci0gICAgPC9ub2RlPgotICA8L25vZGU+Ci0gIDxub2RlIGJvdW5kcz0iWzAsMTc4XVs1NzYsMTk1Ml0iIHJlc291cmNlLWlkPSJjb20uZXhhbXBsZS5hcHA6aWQvZHJhd2VyIj4KLSAgICA8bm9kZSBib3VuZHM9IlswLDE3OF1bMTQ0LDE5NTJdIgotICAgICAgICByZXNvdXJjZS1pZD0iY29tLmV4YW1wbGUuYXBwOmlkL21pbmlfZHJhd2VyIj4KLSAgICAgIDxub2RlIGJvdW5kcz0iWzQwLDI1NF1bMTA0LDMxOF0iIHJlc291cmNlLWlkPSJjb20uZXhhbXBsZS5hcHA6aWQvYXZhdGFyIi8+Ci0gICAgICA8bm9kZSBib3VuZHM9IlsxNiwzNTRdWzEyOCw0NjZdIiBjb250ZW50LWRlc2M9IlByaW1hcnkiCi0gICAgICAgICAgcmVzb3VyY2UtaWQ9ImNvbS5leGFtcGxlLmFwcDppZC9pbWFnZV92aWV3Ii8+Ci0gICAgICA8bm9kZSBib3VuZHM9IlsxNiw0NjZdWzEyOCw1NzhdIiBjb250ZW50LWRlc2M9IlNvY2lhbCIKLSAgICAgICAgICByZXNvdXJjZS1pZD0iY29tLmV4YW1wbGUuYXBwOmlkL2ltYWdlX3ZpZXciLz4KLSAgICAgIDxub2RlIGJvdW5kcz0iWzE2LDU3OF1bMTI4LDY5MF0iIGNvbnRlbnQtZGVzYz0iUHJvbW90aW9ucyIKLSAgICAgICAgICByZXNvdXJjZS1pZD0iY29tLmV4YW1wbGUuYXBwOmlkL2ltYWdlX3ZpZXciLz4KLSAgICA8L25vZGU+Ci0gIDwvbm9kZT4KLTwvaGllcmFyY2h5PgotJycnLnN0cmlwKCkKLQotCi1jbGFzcyBVaUFwcFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzZWxmLmRldmljZSA9IG1vY2suTW9jaygpCi0gICAgc2VsZi5kZXZpY2UucGl4ZWxfZGVuc2l0eSA9IDMyMCAgIyBFYWNoIGRwIHBpeGVsIGlzIDIgcmVhbCBwaXhlbHMuCi0gICAgc2VsZi5hcHAgPSBhcHBfdWkuQXBwVWkoc2VsZi5kZXZpY2UsIHBhY2thZ2U9J2NvbS5leGFtcGxlLmFwcCcpCi0gICAgc2VsZi5fc2V0TW9ja1htbFNjcmVlbnNob3RzKFtNT0NLX1hNTF9MT0FERURdKQotCi0gIGRlZiBfc2V0TW9ja1htbFNjcmVlbnNob3RzKHNlbGYsIHhtbF9kb2NzKToKLSAgICAiIiJNb2NrIHNlbGYuYXBwLl9HZXRSb290VWlOb2RlIHRvIGxvYWQgbm9kZXMgZnJvbSBzb21lIHRlc3QgeG1sX2RvY3MuCi0KLSAgICBFYWNoIHRpbWUgdGhlIG1ldGhvZCBpcyBjYWxsZWQgaXQgd2lsbCByZXR1cm4gYSBVSSBub2RlIGZvciBlYWNoIHN0cmluZwotICAgIGdpdmVuIGluIHx4bWxfZG9jc3wsIG9yIHJpc2UgYSB0aW1lIG91dCBlcnJvciB3aGVuIHRoZSBsaXN0IGlzIGV4aGF1c3RlZC4KLSAgICAiIiIKLSAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0gICAgZGVmIGdldF9tb2NrX3Jvb3RfdWlfbm9kZSh2YWx1ZSk6Ci0gICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBFeGNlcHRpb24pOgotICAgICAgICByYWlzZSB2YWx1ZQotICAgICAgcmV0dXJuIGFwcF91aS5fVWlOb2RlKAotICAgICAgICAgIHNlbGYuZGV2aWNlLCBlbGVtZW50X3RyZWUuZnJvbXN0cmluZyh2YWx1ZSksIHNlbGYuYXBwLnBhY2thZ2UpCi0KLSAgICB4bWxfZG9jcy5hcHBlbmQoZGV2aWNlX2Vycm9ycy5Db21tYW5kVGltZW91dEVycm9yKCdUaW1lZCBvdXQhJykpCi0KLSAgICBzZWxmLmFwcC5fR2V0Um9vdFVpTm9kZSA9IG1vY2suTW9jaygKLSAgICAgICAgc2lkZV9lZmZlY3Q9KGdldF9tb2NrX3Jvb3RfdWlfbm9kZShkb2MpIGZvciBkb2MgaW4geG1sX2RvY3MpKQotCi0gIGRlZiBhc3NlcnROb2RlSGFzQXR0cmlicyhzZWxmLCBub2RlLCBhdHRyKToKLSAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0gICAgZm9yIGtleSwgdmFsdWUgaW4gYXR0ci5pdGVyaXRlbXMoKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5vZGUuX0dldEF0dHJpYnV0ZShrZXkpLCB2YWx1ZSkKLQotICBkZWYgYXNzZXJ0VGFwcGVkT25jZUF0KHNlbGYsIHgsIHkpOgotICAgIHNlbGYuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKLSAgICAgICAgWydpbnB1dCcsICd0YXAnLCBzdHIoeCksIHN0cih5KV0sIGNoZWNrX3JldHVybj1UcnVlKQotCi0gIGRlZiB0ZXN0RmluZF9ieVRleHQoc2VsZik6Ci0gICAgbm9kZSA9IHNlbGYuYXBwLkdldFVpTm9kZSh0ZXh0PSdQcmltYXJ5JykKLSAgICBzZWxmLmFzc2VydE5vZGVIYXNBdHRyaWJzKG5vZGUsIHsKLSAgICAgICAgJ3RleHQnOiAnUHJpbWFyeScsCi0gICAgICAgICdjb250ZW50LWRlc2MnOiBOb25lLAotICAgICAgICAncmVzb3VyY2UtaWQnOiAnY29tLmV4YW1wbGUuYXBwOmlkL2FjdGlvbmJhcl90aXRsZScsCi0gICAgfSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhub2RlLmJvdW5kcywgZ2VvbWV0cnkuUmVjdGFuZ2xlKFsxMjEsIDUwXSwgWzE0MjQsIDE3OF0pKQotCi0gIGRlZiB0ZXN0RmluZF9ieUNvbnRlbnREZXNjKHNlbGYpOgotICAgIG5vZGUgPSBzZWxmLmFwcC5HZXRVaU5vZGUoY29udGVudF9kZXNjPSdTb2NpYWwnKQotICAgIHNlbGYuYXNzZXJ0Tm9kZUhhc0F0dHJpYnMobm9kZSwgewotICAgICAgICAndGV4dCc6IE5vbmUsCi0gICAgICAgICdjb250ZW50LWRlc2MnOiAnU29jaWFsJywKLSAgICAgICAgJ3Jlc291cmNlLWlkJzogJ2NvbS5leGFtcGxlLmFwcDppZC9pbWFnZV92aWV3JywKLSAgICB9KQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5vZGUuYm91bmRzLCBnZW9tZXRyeS5SZWN0YW5nbGUoWzE2LCA0NjZdLCBbMTI4LCA1NzhdKSkKLQotICBkZWYgdGVzdEZpbmRfYnlSZXNvdXJjZUlkX2F1dG9jb21wbGV0ZWQoc2VsZik6Ci0gICAgbm9kZSA9IHNlbGYuYXBwLkdldFVpTm9kZShyZXNvdXJjZV9pZD0naW1hZ2VfdmlldycpCi0gICAgc2VsZi5hc3NlcnROb2RlSGFzQXR0cmlicyhub2RlLCB7Ci0gICAgICAgICdjb250ZW50LWRlc2MnOiAnUHJpbWFyeScsCi0gICAgICAgICdyZXNvdXJjZS1pZCc6ICdjb20uZXhhbXBsZS5hcHA6aWQvaW1hZ2VfdmlldycsCi0gICAgfSkKLQotICBkZWYgdGVzdEZpbmRfYnlSZXNvdXJjZUlkX2Fic29sdXRlKHNlbGYpOgotICAgIG5vZGUgPSBzZWxmLmFwcC5HZXRVaU5vZGUocmVzb3VyY2VfaWQ9J2NvbS5leGFtcGxlLmFwcDppZC9pbWFnZV92aWV3JykKLSAgICBzZWxmLmFzc2VydE5vZGVIYXNBdHRyaWJzKG5vZGUsIHsKLSAgICAgICAgJ2NvbnRlbnQtZGVzYyc6ICdQcmltYXJ5JywKLSAgICAgICAgJ3Jlc291cmNlLWlkJzogJ2NvbS5leGFtcGxlLmFwcDppZC9pbWFnZV92aWV3JywKLSAgICB9KQotCi0gIGRlZiB0ZXN0RmluZF9ieU11bHRpcGxlKHNlbGYpOgotICAgIG5vZGUgPSBzZWxmLmFwcC5HZXRVaU5vZGUocmVzb3VyY2VfaWQ9J2ltYWdlX3ZpZXcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9kZXNjPSdQcm9tb3Rpb25zJykKLSAgICBzZWxmLmFzc2VydE5vZGVIYXNBdHRyaWJzKG5vZGUsIHsKLSAgICAgICAgJ2NvbnRlbnQtZGVzYyc6ICdQcm9tb3Rpb25zJywKLSAgICAgICAgJ3Jlc291cmNlLWlkJzogJ2NvbS5leGFtcGxlLmFwcDppZC9pbWFnZV92aWV3JywKLSAgICB9KQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5vZGUuYm91bmRzLCBnZW9tZXRyeS5SZWN0YW5nbGUoWzE2LCA1NzhdLCBbMTI4LCA2OTBdKSkKLQotICBkZWYgdGVzdEZpbmRfbm90Rm91bmQoc2VsZik6Ci0gICAgbm9kZSA9IHNlbGYuYXBwLkdldFVpTm9kZShyZXNvdXJjZV9pZD0nZG9lc19ub3RfZXhpc3QnKQotICAgIHNlbGYuYXNzZXJ0SXNOb25lKG5vZGUpCi0KLSAgZGVmIHRlc3RGaW5kX25vQXJnc0dpdmVuKHNlbGYpOgotICAgICMgU2FtZSBleGNlcHRpb24gZ2l2ZW4gYnkgUHl0aG9uIGZvciBhIGZ1bmN0aW9uIGNhbGwgd2l0aCBub3QgZW5vdWdoIGFyZ3MuCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgc2VsZi5hcHAuR2V0VWlOb2RlKCkKLQotICBkZWYgdGVzdEdldENoaWxkcmVuKHNlbGYpOgotICAgIG5vZGUgPSBzZWxmLmFwcC5HZXRVaU5vZGUocmVzb3VyY2VfaWQ9J21pbmlfZHJhd2VyJykKLSAgICBzZWxmLmFzc2VydE5vZGVIYXNBdHRyaWJzKAotICAgICAgICBub2RlWzBdLCB7J3Jlc291cmNlLWlkJzogJ2NvbS5leGFtcGxlLmFwcDppZC9hdmF0YXInfSkKLSAgICBzZWxmLmFzc2VydE5vZGVIYXNBdHRyaWJzKG5vZGVbMV0sIHsnY29udGVudC1kZXNjJzogJ1ByaW1hcnknfSkKLSAgICBzZWxmLmFzc2VydE5vZGVIYXNBdHRyaWJzKG5vZGVbMl0sIHsnY29udGVudC1kZXNjJzogJ1NvY2lhbCd9KQotICAgIHNlbGYuYXNzZXJ0Tm9kZUhhc0F0dHJpYnMobm9kZVszXSwgeydjb250ZW50LWRlc2MnOiAnUHJvbW90aW9ucyd9KQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6Ci0gICAgICAjIHB5bGludDogZGlzYWJsZT1wb2ludGxlc3Mtc3RhdGVtZW50Ci0gICAgICBub2RlWzRdCi0KLSAgZGVmIHRlc3RUYXBfY2VudGVyKHNlbGYpOgotICAgIG5vZGUgPSBzZWxmLmFwcC5HZXRVaU5vZGUoY29udGVudF9kZXNjPSdPcGVuIG5hdmlnYXRpb24gZHJhd2VyJykKLSAgICBub2RlLlRhcCgpCi0gICAgc2VsZi5hc3NlcnRUYXBwZWRPbmNlQXQoNTYsIDExNCkKLQotICBkZWYgdGVzdFRhcF90b3BsZWZ0KHNlbGYpOgotICAgIG5vZGUgPSBzZWxmLmFwcC5HZXRVaU5vZGUoY29udGVudF9kZXNjPSdPcGVuIG5hdmlnYXRpb24gZHJhd2VyJykKLSAgICBub2RlLlRhcChnZW9tZXRyeS5Qb2ludCgwLCAwKSkKLSAgICBzZWxmLmFzc2VydFRhcHBlZE9uY2VBdCgwLCA1OCkKLQotICBkZWYgdGVzdFRhcF93aXRoT2Zmc2V0KHNlbGYpOgotICAgIG5vZGUgPSBzZWxmLmFwcC5HZXRVaU5vZGUoY29udGVudF9kZXNjPSdPcGVuIG5hdmlnYXRpb24gZHJhd2VyJykKLSAgICBub2RlLlRhcChnZW9tZXRyeS5Qb2ludCgxMCwgMjApKQotICAgIHNlbGYuYXNzZXJ0VGFwcGVkT25jZUF0KDEwLCA3OCkKLQotICBkZWYgdGVzdFRhcF93aXRoT2Zmc2V0SW5EcChzZWxmKToKLSAgICBub2RlID0gc2VsZi5hcHAuR2V0VWlOb2RlKGNvbnRlbnRfZGVzYz0nT3BlbiBuYXZpZ2F0aW9uIGRyYXdlcicpCi0gICAgbm9kZS5UYXAoZ2VvbWV0cnkuUG9pbnQoMTAsIDIwKSwgZHBfdW5pdHM9VHJ1ZSkKLSAgICBzZWxmLmFzc2VydFRhcHBlZE9uY2VBdCgyMCwgOTgpCi0KLSAgZGVmIHRlc3RUYXBfZHBVbml0c0lnbm9yZWQoc2VsZik6Ci0gICAgbm9kZSA9IHNlbGYuYXBwLkdldFVpTm9kZShjb250ZW50X2Rlc2M9J09wZW4gbmF2aWdhdGlvbiBkcmF3ZXInKQotICAgIG5vZGUuVGFwKGRwX3VuaXRzPVRydWUpCi0gICAgc2VsZi5hc3NlcnRUYXBwZWRPbmNlQXQoNTYsIDExNCkgICMgU3RpbGwgdGFwcyBhdCBjZW50ZXIuCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3RXYWl0Rm9yVWlOb2RlX2ZvdW5kKHNlbGYpOgotICAgIHNlbGYuX3NldE1vY2tYbWxTY3JlZW5zaG90cygKLSAgICAgICAgW01PQ0tfWE1MX0xPQURJTkcsIE1PQ0tfWE1MX0xPQURJTkcsIE1PQ0tfWE1MX0xPQURFRF0pCi0gICAgbm9kZSA9IHNlbGYuYXBwLldhaXRGb3JVaU5vZGUocmVzb3VyY2VfaWQ9J2FjdGlvbmJhcl90aXRsZScpCi0gICAgc2VsZi5hc3NlcnROb2RlSGFzQXR0cmlicyhub2RlLCB7J3RleHQnOiAnUHJpbWFyeSd9KQotCi0gIEBtb2NrLnBhdGNoKCd0aW1lLnNsZWVwJywgbW9jay5Nb2NrKCkpCi0gIGRlZiB0ZXN0V2FpdEZvclVpTm9kZV9ub3RGb3VuZChzZWxmKToKLSAgICBzZWxmLl9zZXRNb2NrWG1sU2NyZWVuc2hvdHMoCi0gICAgICAgIFtNT0NLX1hNTF9MT0FESU5HLCBNT0NLX1hNTF9MT0FESU5HLCBNT0NLX1hNTF9MT0FESU5HXSkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZFRpbWVvdXRFcnJvcik6Ci0gICAgICBzZWxmLmFwcC5XYWl0Rm9yVWlOb2RlKHJlc291cmNlX2lkPSdhY3Rpb25iYXJfdGl0bGUnKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9iYXR0ZXJ5X3V0aWxzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9iYXR0ZXJ5X3V0aWxzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGEwOGE5Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvYmF0dGVyeV91dGlscy5weQorKysgL2Rldi9udWxsCkBAIC0xLDcxMSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlByb3ZpZGVzIGEgdmFyaWV0eSBvZiBkZXZpY2UgaW50ZXJhY3Rpb25zIHdpdGggcG93ZXIuCi0iIiIKLSMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAotCi1pbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQgY3N2Ci1pbXBvcnQgbG9nZ2luZwotCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRlY29yYXRvcnMKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX2Vycm9ycwotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdXRpbHMKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IHZlcnNpb25fY29kZXMKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHRpbWVvdXRfcmV0cnkKLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLV9ERUZBVUxUX1RJTUVPVVQgPSAzMAotX0RFRkFVTFRfUkVUUklFUyA9IDMKLQotCi1fREVWSUNFX1BST0ZJTEVTID0gWwotICB7Ci0gICAgJ25hbWUnOiBbJ05leHVzIDQnXSwKLSAgICAnZW5hYmxlX2NvbW1hbmQnOiAoCi0gICAgICAgICdlY2hvIDAgPiAvc3lzL21vZHVsZS9wbTg5MjFfY2hhcmdlci9wYXJhbWV0ZXJzL2Rpc2FibGVkICYmICcKLSAgICAgICAgJ2R1bXBzeXMgYmF0dGVyeSByZXNldCcpLAotICAgICdkaXNhYmxlX2NvbW1hbmQnOiAoCi0gICAgICAgICdlY2hvIDEgPiAvc3lzL21vZHVsZS9wbTg5MjFfY2hhcmdlci9wYXJhbWV0ZXJzL2Rpc2FibGVkICYmICcKLSAgICAgICAgJ2R1bXBzeXMgYmF0dGVyeSBzZXQgYWMgMCAmJiBkdW1wc3lzIGJhdHRlcnkgc2V0IHVzYiAwJyksCi0gICAgJ2NoYXJnZV9jb3VudGVyJzogTm9uZSwKLSAgICAndm9sdGFnZSc6IE5vbmUsCi0gICAgJ2N1cnJlbnQnOiBOb25lLAotICB9LAotICB7Ci0gICAgJ25hbWUnOiBbJ05leHVzIDUnXSwKLSAgICAjIE5leHVzIDUKLSAgICAjIFNldHRpbmcgdGhlIEhJWiBiaXQgb2YgdGhlIGJxMjQxOTIgY2F1c2VzIHRoZSBjaGFyZ2VyIHRvIGFjdHVhbGx5IGlnbm9yZQotICAgICMgZW5lcmd5IGNvbWluZyBmcm9tIFVTQi4gU2V0dGluZyB0aGUgcG93ZXJfc3VwcGx5IG9mZmxpbmUganVzdCB1cGRhdGVzIHRoZQotICAgICMgQW5kcm9pZCBzeXN0ZW0gdG8gcmVmbGVjdCB0aGF0LgotICAgICdlbmFibGVfY29tbWFuZCc6ICgKLSAgICAgICAgJ2VjaG8gMHg0QSA+IC9zeXMva2VybmVsL2RlYnVnL2JxMjQxOTIvSU5QVVRfU1JDX0NPTlQgJiYgJwotICAgICAgICAnY2htb2QgNjQ0IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L3VzYi9vbmxpbmUgJiYgJwotICAgICAgICAnZWNobyAxID4gL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvdXNiL29ubGluZSAmJiAnCi0gICAgICAgICdkdW1wc3lzIGJhdHRlcnkgcmVzZXQnKSwKLSAgICAnZGlzYWJsZV9jb21tYW5kJzogKAotICAgICAgICAnZWNobyAweENBID4gL3N5cy9rZXJuZWwvZGVidWcvYnEyNDE5Mi9JTlBVVF9TUkNfQ09OVCAmJiAnCi0gICAgICAgICdjaG1vZCA2NDQgL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvdXNiL29ubGluZSAmJiAnCi0gICAgICAgICdlY2hvIDAgPiAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS91c2Ivb25saW5lICYmICcKLSAgICAgICAgJ2R1bXBzeXMgYmF0dGVyeSBzZXQgYWMgMCAmJiBkdW1wc3lzIGJhdHRlcnkgc2V0IHVzYiAwJyksCi0gICAgJ2NoYXJnZV9jb3VudGVyJzogTm9uZSwKLSAgICAndm9sdGFnZSc6IE5vbmUsCi0gICAgJ2N1cnJlbnQnOiBOb25lLAotICB9LAotICB7Ci0gICAgJ25hbWUnOiBbJ05leHVzIDYnXSwKLSAgICAnZW5hYmxlX2NvbW1hbmQnOiAoCi0gICAgICAgICdlY2hvIDEgPiAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9iYXR0ZXJ5L2NoYXJnaW5nX2VuYWJsZWQgJiYgJwotICAgICAgICAnZHVtcHN5cyBiYXR0ZXJ5IHJlc2V0JyksCi0gICAgJ2Rpc2FibGVfY29tbWFuZCc6ICgKLSAgICAgICAgJ2VjaG8gMCA+IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L2JhdHRlcnkvY2hhcmdpbmdfZW5hYmxlZCAmJiAnCi0gICAgICAgICdkdW1wc3lzIGJhdHRlcnkgc2V0IGFjIDAgJiYgZHVtcHN5cyBiYXR0ZXJ5IHNldCB1c2IgMCcpLAotICAgICdjaGFyZ2VfY291bnRlcic6ICgKLSAgICAgICAgJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L21heDE3MHh4X2JhdHRlcnkvY2hhcmdlX2NvdW50ZXJfZXh0JyksCi0gICAgJ3ZvbHRhZ2UnOiAnL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvbWF4MTcweHhfYmF0dGVyeS92b2x0YWdlX25vdycsCi0gICAgJ2N1cnJlbnQnOiAnL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvbWF4MTcweHhfYmF0dGVyeS9jdXJyZW50X25vdycsCi0gIH0sCi0gIHsKLSAgICAnbmFtZSc6IFsnTmV4dXMgOSddLAotICAgICdlbmFibGVfY29tbWFuZCc6ICgKLSAgICAgICAgJ2VjaG8gRGlzY29ubmVjdGVkID4gJwotICAgICAgICAnL3N5cy9idXMvaTJjL2RyaXZlcnMvYnEyNDE5eC8wLTAwNmIvaW5wdXRfY2FibGVfc3RhdGUgJiYgJwotICAgICAgICAnZHVtcHN5cyBiYXR0ZXJ5IHJlc2V0JyksCi0gICAgJ2Rpc2FibGVfY29tbWFuZCc6ICgKLSAgICAgICAgJ2VjaG8gQ29ubmVjdGVkID4gJwotICAgICAgICAnL3N5cy9idXMvaTJjL2RyaXZlcnMvYnEyNDE5eC8wLTAwNmIvaW5wdXRfY2FibGVfc3RhdGUgJiYgJwotICAgICAgICAnZHVtcHN5cyBiYXR0ZXJ5IHNldCBhYyAwICYmIGR1bXBzeXMgYmF0dGVyeSBzZXQgdXNiIDAnKSwKLSAgICAnY2hhcmdlX2NvdW50ZXInOiAnL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvYmF0dGVyeS9jaGFyZ2VfY291bnRlcl9leHQnLAotICAgICd2b2x0YWdlJzogJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L2JhdHRlcnkvdm9sdGFnZV9ub3cnLAotICAgICdjdXJyZW50JzogJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L2JhdHRlcnkvY3VycmVudF9ub3cnLAotICB9LAotICB7Ci0gICAgJ25hbWUnOiBbJ05leHVzIDEwJ10sCi0gICAgJ2VuYWJsZV9jb21tYW5kJzogTm9uZSwKLSAgICAnZGlzYWJsZV9jb21tYW5kJzogTm9uZSwKLSAgICAnY2hhcmdlX2NvdW50ZXInOiBOb25lLAotICAgICd2b2x0YWdlJzogJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L2RzMjc4NC1mdWVsZ2F1Z2Uvdm9sdGFnZV9ub3cnLAotICAgICdjdXJyZW50JzogJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L2RzMjc4NC1mdWVsZ2F1Z2UvY3VycmVudF9ub3cnLAotCi0gIH0sCi0gIHsKLSAgICAnbmFtZSc6IFsnTmV4dXMgNVgnXSwKLSAgICAnZW5hYmxlX2NvbW1hbmQnOiAoCi0gICAgICAgICdlY2hvIDEgPiAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9iYXR0ZXJ5L2NoYXJnaW5nX2VuYWJsZWQgJiYgJwotICAgICAgICAnZHVtcHN5cyBiYXR0ZXJ5IHJlc2V0JyksCi0gICAgJ2Rpc2FibGVfY29tbWFuZCc6ICgKLSAgICAgICAgJ2VjaG8gMCA+IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L2JhdHRlcnkvY2hhcmdpbmdfZW5hYmxlZCAmJiAnCi0gICAgICAgICdkdW1wc3lzIGJhdHRlcnkgc2V0IGFjIDAgJiYgZHVtcHN5cyBiYXR0ZXJ5IHNldCB1c2IgMCcpLAotICAgICdjaGFyZ2VfY291bnRlcic6IE5vbmUsCi0gICAgJ3ZvbHRhZ2UnOiBOb25lLAotICAgICdjdXJyZW50JzogTm9uZSwKLSAgfSwKLSAgeyAjIEdhbGF4eSBzNQotICAgICduYW1lJzogWydTTS1HOTAwSCddLAotICAgICdlbmFibGVfY29tbWFuZCc6ICgKLSAgICAgICAgJ2NobW9kIDY0NCAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9iYXR0ZXJ5L3Rlc3RfbW9kZSAmJiAnCi0gICAgICAgICdjaG1vZCA2NDQgL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvc2VjLWNoYXJnZXIvY3VycmVudF9ub3cgJiYgJwotICAgICAgICAnZWNobyAwID4gL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvYmF0dGVyeS90ZXN0X21vZGUgJiYgJwotICAgICAgICAnZWNobyA5OTk5ID4gL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvc2VjLWNoYXJnZXIvY3VycmVudF9ub3cgJiYnCi0gICAgICAgICdkdW1wc3lzIGJhdHRlcnkgcmVzZXQnKSwKLSAgICAnZGlzYWJsZV9jb21tYW5kJzogKAotICAgICAgICAnY2htb2QgNjQ0IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L2JhdHRlcnkvdGVzdF9tb2RlICYmICcKLSAgICAgICAgJ2NobW9kIDY0NCAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9zZWMtY2hhcmdlci9jdXJyZW50X25vdyAmJiAnCi0gICAgICAgICdlY2hvIDEgPiAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9iYXR0ZXJ5L3Rlc3RfbW9kZSAmJiAnCi0gICAgICAgICdlY2hvIDAgPiAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9zZWMtY2hhcmdlci9jdXJyZW50X25vdyAmJiAnCi0gICAgICAgICdkdW1wc3lzIGJhdHRlcnkgc2V0IGFjIDAgJiYgZHVtcHN5cyBiYXR0ZXJ5IHNldCB1c2IgMCcpLAotICAgICdjaGFyZ2VfY291bnRlcic6IE5vbmUsCi0gICAgJ3ZvbHRhZ2UnOiAnL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvc2VjLWZ1ZWxnYXVnZS92b2x0YWdlX25vdycsCi0gICAgJ2N1cnJlbnQnOiAnL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvc2VjLWNoYXJnZXIvY3VycmVudF9ub3cnLAotICB9LAotICB7ICMgR2FsYXh5IHM2LCBHYWxheHkgczYsIEdhbGF4eSBzNiBlZGdlCi0gICAgJ25hbWUnOiBbJ1NNLUc5MjBGJywgJ1NNLUc5MjBWJywgJ1NNLUc5MjVWJ10sCi0gICAgJ2VuYWJsZV9jb21tYW5kJzogKAotICAgICAgICAnY2htb2QgNjQ0IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L2JhdHRlcnkvdGVzdF9tb2RlICYmICcKLSAgICAgICAgJ2NobW9kIDY0NCAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9tYXg3Nzg0My1jaGFyZ2VyL2N1cnJlbnRfbm93ICYmICcKLSAgICAgICAgJ2VjaG8gMCA+IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L2JhdHRlcnkvdGVzdF9tb2RlICYmICcKLSAgICAgICAgJ2VjaG8gOTk5OSA+IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L21heDc3ODQzLWNoYXJnZXIvY3VycmVudF9ub3cgJiYnCi0gICAgICAgICdkdW1wc3lzIGJhdHRlcnkgcmVzZXQnKSwKLSAgICAnZGlzYWJsZV9jb21tYW5kJzogKAotICAgICAgICAnY2htb2QgNjQ0IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L2JhdHRlcnkvdGVzdF9tb2RlICYmICcKLSAgICAgICAgJ2NobW9kIDY0NCAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9tYXg3Nzg0My1jaGFyZ2VyL2N1cnJlbnRfbm93ICYmICcKLSAgICAgICAgJ2VjaG8gMSA+IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L2JhdHRlcnkvdGVzdF9tb2RlICYmICcKLSAgICAgICAgJ2VjaG8gMCA+IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L21heDc3ODQzLWNoYXJnZXIvY3VycmVudF9ub3cgJiYgJwotICAgICAgICAnZHVtcHN5cyBiYXR0ZXJ5IHNldCBhYyAwICYmIGR1bXBzeXMgYmF0dGVyeSBzZXQgdXNiIDAnKSwKLSAgICAnY2hhcmdlX2NvdW50ZXInOiBOb25lLAotICAgICd2b2x0YWdlJzogJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L21heDc3ODQzLWZ1ZWxnYXVnZS92b2x0YWdlX25vdycsCi0gICAgJ2N1cnJlbnQnOiAnL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvbWF4Nzc4NDMtY2hhcmdlci9jdXJyZW50X25vdycsCi0gIH0sCi0gIHsgIyBDaGVycnkgTW9iaWxlIE9uZQotICAgICduYW1lJzogWydXNjIxMCAoNDU2ME1NWF9iIGZpbmdlcnByaW50KSddLAotICAgICdlbmFibGVfY29tbWFuZCc6ICgKLSAgICAgICAgJ2VjaG8gIjAgMCIgPiAvcHJvYy9tdGtfYmF0dGVyeV9jbWQvY3VycmVudF9jbWQgJiYgJwotICAgICAgICAnZHVtcHN5cyBiYXR0ZXJ5IHJlc2V0JyksCi0gICAgJ2Rpc2FibGVfY29tbWFuZCc6ICgKLSAgICAgICAgJ2VjaG8gIjAgMSIgPiAvcHJvYy9tdGtfYmF0dGVyeV9jbWQvY3VycmVudF9jbWQgJiYgJwotICAgICAgICAnZHVtcHN5cyBiYXR0ZXJ5IHNldCBhYyAwICYmIGR1bXBzeXMgYmF0dGVyeSBzZXQgdXNiIDAnKSwKLSAgICAnY2hhcmdlX2NvdW50ZXInOiBOb25lLAotICAgICd2b2x0YWdlJzogTm9uZSwKLSAgICAnY3VycmVudCc6IE5vbmUsCi19LAotXQotCi0jIFRoZSBsaXN0IG9mIHVzZWZ1bCBkdW1wc3lzIGNvbHVtbnMuCi0jIEluZGV4IG9mIHRoZSBjb2x1bW4gY29udGFpbmluZyB0aGUgZm9ybWF0IHZlcnNpb24uCi1fRFVNUF9WRVJTSU9OX0lOREVYID0gMAotIyBJbmRleCBvZiB0aGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIHR5cGUgb2YgdGhlIHJvdy4KLV9ST1dfVFlQRV9JTkRFWCA9IDMKLSMgSW5kZXggb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSB1aWQuCi1fUEFDS0FHRV9VSURfSU5ERVggPSA0Ci0jIEluZGV4IG9mIHRoZSBjb2x1bW4gY29udGFpbmluZyB0aGUgYXBwbGljYXRpb24gcGFja2FnZS4KLV9QQUNLQUdFX05BTUVfSU5ERVggPSA1Ci0jIFRoZSBjb2x1bW4gY29udGFpbmluZyB0aGUgdWlkIG9mIHRoZSBwb3dlciBkYXRhLgotX1BXSV9VSURfSU5ERVggPSAxCi0jIFRoZSBjb2x1bW4gY29udGFpbmluZyB0aGUgdHlwZSBvZiBjb25zdW1wdGlvbi4gT25seSBjb25zdW1wdGlvbiBzaW5jZSBsYXN0Ci0jIGNoYXJnZSBhcmUgb2YgaW50ZXJlc3QgaGVyZS4KLV9QV0lfQUdHUkVHQVRJT05fSU5ERVggPSAyCi1fUFdTX0FHR1JFR0FUSU9OX0lOREVYID0gX1BXSV9BR0dSRUdBVElPTl9JTkRFWAotIyBUaGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIGFtb3VudCBvZiBwb3dlciB1c2VkLCBpbiBtYWguCi1fUFdJX1BPV0VSX0NPTlNVTVBUSU9OX0lOREVYID0gNQotX1BXU19QT1dFUl9DT05TVU1QVElPTl9JTkRFWCA9IF9QV0lfUE9XRVJfQ09OU1VNUFRJT05fSU5ERVgKLQotX01BWF9DSEFSR0VfRVJST1IgPSAyMAotCi0KLWNsYXNzIEJhdHRlcnlVdGlscyhvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2UsIGRlZmF1bHRfdGltZW91dD1fREVGQVVMVF9USU1FT1VULAotICAgICAgICAgICAgICAgZGVmYXVsdF9yZXRyaWVzPV9ERUZBVUxUX1JFVFJJRVMpOgotICAgICIiIkJhdHRlcnlVdGlscyBjb25zdHJ1Y3Rvci4KLQotICAgICAgQXJnczoKLSAgICAgICAgZGV2aWNlOiBBIERldmljZVV0aWxzIGluc3RhbmNlLgotICAgICAgICBkZWZhdWx0X3RpbWVvdXQ6IEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgZGVmYXVsdCBudW1iZXIgb2Ygc2Vjb25kcyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQgZm9yIGFuIG9wZXJhdGlvbiB0byBjb21wbGV0ZSBpZiBubyBleHBsaWNpdCB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHByb3ZpZGVkLgotICAgICAgICBkZWZhdWx0X3JldHJpZXM6IEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgZGVmYXVsdCBudW1iZXIgb3IgdGltZXMgYW4KLSAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gc2hvdWxkIGJlIHJldHJpZWQgb24gZmFpbHVyZSBpZiBubyBleHBsaWNpdAotICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGlzIHByb3ZpZGVkLgotICAgICAgUmFpc2VzOgotICAgICAgICBUeXBlRXJyb3I6IElmIGl0IGlzIG5vdCBwYXNzZWQgYSBEZXZpY2VVdGlscyBpbnN0YW5jZS4KLSAgICAiIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShkZXZpY2UsIGRldmljZV91dGlscy5EZXZpY2VVdGlscyk6Ci0gICAgICByYWlzZSBUeXBlRXJyb3IoJ011c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBEZXZpY2VVdGlscyBvYmplY3QuJykKLSAgICBzZWxmLl9kZXZpY2UgPSBkZXZpY2UKLSAgICBzZWxmLl9jYWNoZSA9IGRldmljZS5HZXRDbGllbnRDYWNoZShzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKLSAgICBzZWxmLl9kZWZhdWx0X3RpbWVvdXQgPSBkZWZhdWx0X3RpbWVvdXQKLSAgICBzZWxmLl9kZWZhdWx0X3JldHJpZXMgPSBkZWZhdWx0X3JldHJpZXMKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgU3VwcG9ydHNGdWVsR2F1Z2Uoc2VsZiwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIkRldGVjdCBpZiBmdWVsIGdhdWdlIGNoaXAgaXMgcHJlc2VudC4KLQotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSBpZiBrbm93biBmdWVsIGdhdWdlIGZpbGVzIGFyZSBwcmVzZW50LgotICAgICAgRmFsc2Ugb3RoZXJ3aXNlLgotICAgICIiIgotICAgIHNlbGYuX0Rpc2NvdmVyRGV2aWNlUHJvZmlsZSgpCi0gICAgcmV0dXJuIChzZWxmLl9jYWNoZVsncHJvZmlsZSddWydlbmFibGVfY29tbWFuZCddICE9IE5vbmUKLSAgICAgICAgYW5kIHNlbGYuX2NhY2hlWydwcm9maWxlJ11bJ2NoYXJnZV9jb3VudGVyJ10gIT0gTm9uZSkKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgR2V0RnVlbEdhdWdlQ2hhcmdlQ291bnRlcihzZWxmLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiR2V0IHZhbHVlIG9mIGNoYXJnZV9jb3VudGVyIG9uIGZ1ZWwgZ2F1Z2UgY2hpcC4KLQotICAgIERldmljZSBtdXN0IGhhdmUgY2hhcmdpbmcgZGlzYWJsZWQgZm9yIHRoaXMsIG5vdCBqdXN0IGJhdHRlcnkgdXBkYXRlcwotICAgIGRpc2FibGVkLiBUaGUgb25seSBkZXZpY2UgdGhhdCB0aGlzIGN1cnJlbnRseSB3b3JrcyB3aXRoIGlzIHRoZSBuZXh1cyA1LgotCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICB2YWx1ZSBvZiBjaGFyZ2VfY291bnRlciBmb3IgZnVlbCBnYXVnZSBjaGlwIGluIHVuaXRzIG9mIG5BaC4KLQotICAgIFJhaXNlczoKLSAgICAgIGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yOiBJZiBmdWVsIGdhdWdlIGNoaXAgbm90IGZvdW5kLgotICAgICIiIgotICAgIGlmIHNlbGYuU3VwcG9ydHNGdWVsR2F1Z2UoKToKLSAgICAgIHJldHVybiBpbnQoc2VsZi5fZGV2aWNlLlJlYWRGaWxlKAotICAgICAgICAgIHNlbGYuX2NhY2hlWydwcm9maWxlJ11bJ2NoYXJnZV9jb3VudGVyJ10pKQotICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAnVW5hYmxlIHRvIGZpbmQgZnVlbCBnYXVnZS4nKQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBHZXROZXR3b3JrRGF0YShzZWxmLCBwYWNrYWdlLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiR2V0IG5ldHdvcmsgZGF0YSBmb3Igc3BlY2lmaWMgcGFja2FnZS4KLQotICAgIEFyZ3M6Ci0gICAgICBwYWNrYWdlOiBwYWNrYWdlIG5hbWUgeW91IHdhbnQgbmV0d29yayBkYXRhIGZvci4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBUdXBsZSBvZiAoc2VudF9kYXRhLCByZWNpZXZlZF9kYXRhKQotICAgICAgTm9uZSBpZiBubyBuZXR3b3JrIGRhdGEgZm91bmQKLSAgICAiIiIKLSAgICAjIElmIGRldmljZV91dGlscyBjbGVhcnMgY2FjaGUsIGNhY2hlWyd1aWRzJ10gZG9lc24ndCBleGlzdAotICAgIGlmICd1aWRzJyBub3QgaW4gc2VsZi5fY2FjaGU6Ci0gICAgICBzZWxmLl9jYWNoZVsndWlkcyddID0ge30KLSAgICBpZiBwYWNrYWdlIG5vdCBpbiBzZWxmLl9jYWNoZVsndWlkcyddOgotICAgICAgc2VsZi5HZXRQb3dlckRhdGEoKQotICAgICAgaWYgcGFja2FnZSBub3QgaW4gc2VsZi5fY2FjaGVbJ3VpZHMnXToKLSAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vIFVJRCBmb3VuZCBmb3IgJXMuIENhblwndCBnZXQgbmV0d29yayBkYXRhLicsCi0gICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UpCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBuZXR3b3JrX2RhdGFfcGF0aCA9ICcvcHJvYy91aWRfc3RhdC8lcy8nICUgc2VsZi5fY2FjaGVbJ3VpZHMnXVtwYWNrYWdlXQotICAgIHRyeToKLSAgICAgIHNlbmRfZGF0YSA9IGludChzZWxmLl9kZXZpY2UuUmVhZEZpbGUobmV0d29ya19kYXRhX3BhdGggKyAndGNwX3NuZCcpKQotICAgICMgSWYgUmVhZEZpbGUgdGhyb3dzIGV4Y2VwdGlvbiwgaXQgbWVhbnMgbm8gbmV0d29yayBkYXRhIHVzYWdlIGZpbGUgZm9yCi0gICAgIyBwYWNrYWdlIGhhcyBiZWVuIHJlY29yZGVkLiBSZXR1cm4gMCBzZW50IGFuZCAwIHJlY2VpdmVkLgotICAgIGV4Y2VwdCBkZXZpY2VfZXJyb3JzLkFkYlNoZWxsQ29tbWFuZEZhaWxlZEVycm9yOgotICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vIHNlbnQgZGF0YSBmb3VuZCBmb3IgcGFja2FnZSAlcycsIHBhY2thZ2UpCi0gICAgICBzZW5kX2RhdGEgPSAwCi0gICAgdHJ5OgotICAgICAgcmVjdl9kYXRhID0gaW50KHNlbGYuX2RldmljZS5SZWFkRmlsZShuZXR3b3JrX2RhdGFfcGF0aCArICd0Y3BfcmN2JykpCi0gICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3I6Ci0gICAgICBsb2dnZXIud2FybmluZygnTm8gcmVjZWl2ZWQgZGF0YSBmb3VuZCBmb3IgcGFja2FnZSAlcycsIHBhY2thZ2UpCi0gICAgICByZWN2X2RhdGEgPSAwCi0gICAgcmV0dXJuIChzZW5kX2RhdGEsIHJlY3ZfZGF0YSkKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgR2V0UG93ZXJEYXRhKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJHZXQgcG93ZXIgZGF0YSBmb3IgZGV2aWNlLgotCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBEaWN0IGNvbnRhaW5pbmcgc3lzdGVtIHBvd2VyLCBhbmQgYSBwZXItcGFja2FnZSBwb3dlciBkaWN0IGtleWVkIG9uCi0gICAgICBwYWNrYWdlIG5hbWVzLgotICAgICAgewotICAgICAgICAnc3lzdGVtX3RvdGFsJzogMjMuMSwKLSAgICAgICAgJ3Blcl9wYWNrYWdlJyA6IHsKLSAgICAgICAgICBwYWNrYWdlX25hbWU6IHsKLSAgICAgICAgICAgICd1aWQnOiB1aWQsCi0gICAgICAgICAgICAnZGF0YSc6IFsxLDIsM10KLSAgICAgICAgICB9LAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgIiIiCi0gICAgaWYgJ3VpZHMnIG5vdCBpbiBzZWxmLl9jYWNoZToKLSAgICAgIHNlbGYuX2NhY2hlWyd1aWRzJ10gPSB7fQotICAgIGR1bXBzeXNfb3V0cHV0ID0gc2VsZi5fZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgWydkdW1wc3lzJywgJ2JhdHRlcnlzdGF0cycsICctYyddLAotICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUpCi0gICAgY3N2cmVhZGVyID0gY3N2LnJlYWRlcihkdW1wc3lzX291dHB1dCkKLSAgICBwd2lfZW50cmllcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCi0gICAgc3lzdGVtX3RvdGFsID0gTm9uZQotICAgIGZvciBlbnRyeSBpbiBjc3ZyZWFkZXI6Ci0gICAgICBpZiBlbnRyeVtfRFVNUF9WRVJTSU9OX0lOREVYXSBub3QgaW4gWyc4JywgJzknXToKLSAgICAgICAgIyBXcm9uZyBkdW1wc3lzIHZlcnNpb24uCi0gICAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuRGV2aWNlVmVyc2lvbkVycm9yKAotICAgICAgICAgICAgJ0R1bXBzeXMgdmVyc2lvbiBtdXN0IGJlIDggb3IgOS4gIiVzIiBmb3VuZC4nCi0gICAgICAgICAgICAlIGVudHJ5W19EVU1QX1ZFUlNJT05fSU5ERVhdKQotICAgICAgaWYgX1JPV19UWVBFX0lOREVYIDwgbGVuKGVudHJ5KSBhbmQgZW50cnlbX1JPV19UWVBFX0lOREVYXSA9PSAndWlkJzoKLSAgICAgICAgY3VycmVudF9wYWNrYWdlID0gZW50cnlbX1BBQ0tBR0VfTkFNRV9JTkRFWF0KLSAgICAgICAgaWYgKHNlbGYuX2NhY2hlWyd1aWRzJ10uZ2V0KGN1cnJlbnRfcGFja2FnZSkKLSAgICAgICAgICAgIGFuZCBzZWxmLl9jYWNoZVsndWlkcyddLmdldChjdXJyZW50X3BhY2thZ2UpCi0gICAgICAgICAgICAhPSBlbnRyeVtfUEFDS0FHRV9VSURfSU5ERVhdKToKLSAgICAgICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICAgICAgJ1BhY2thZ2UgJXMgZm91bmQgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgVUlEcyAlcyBhbmQgJXMnCi0gICAgICAgICAgICAgICAlIChjdXJyZW50X3BhY2thZ2UsIHNlbGYuX2NhY2hlWyd1aWRzJ11bY3VycmVudF9wYWNrYWdlXSwKLSAgICAgICAgICAgICAgIGVudHJ5W19QQUNLQUdFX1VJRF9JTkRFWF0pKQotICAgICAgICBzZWxmLl9jYWNoZVsndWlkcyddW2N1cnJlbnRfcGFja2FnZV0gPSBlbnRyeVtfUEFDS0FHRV9VSURfSU5ERVhdCi0gICAgICBlbGlmIChfUFdJX1BPV0VSX0NPTlNVTVBUSU9OX0lOREVYIDwgbGVuKGVudHJ5KQotICAgICAgICAgIGFuZCBlbnRyeVtfUk9XX1RZUEVfSU5ERVhdID09ICdwd2knCi0gICAgICAgICAgYW5kIGVudHJ5W19QV0lfQUdHUkVHQVRJT05fSU5ERVhdID09ICdsJyk6Ci0gICAgICAgIHB3aV9lbnRyaWVzW2VudHJ5W19QV0lfVUlEX0lOREVYXV0uYXBwZW5kKAotICAgICAgICAgICAgZmxvYXQoZW50cnlbX1BXSV9QT1dFUl9DT05TVU1QVElPTl9JTkRFWF0pKQotICAgICAgZWxpZiAoX1BXU19QT1dFUl9DT05TVU1QVElPTl9JTkRFWCA8IGxlbihlbnRyeSkKLSAgICAgICAgICBhbmQgZW50cnlbX1JPV19UWVBFX0lOREVYXSA9PSAncHdzJwotICAgICAgICAgIGFuZCBlbnRyeVtfUFdTX0FHR1JFR0FUSU9OX0lOREVYXSA9PSAnbCcpOgotICAgICAgICAjIFRoaXMgZW50cnkgc2hvdWxkIG9ubHkgYXBwZWFyIG9uY2UuCi0gICAgICAgIGFzc2VydCBzeXN0ZW1fdG90YWwgaXMgTm9uZQotICAgICAgICBzeXN0ZW1fdG90YWwgPSBmbG9hdChlbnRyeVtfUFdTX1BPV0VSX0NPTlNVTVBUSU9OX0lOREVYXSkKLQotICAgIHBlcl9wYWNrYWdlID0ge3A6IHsndWlkJzogdWlkLCAnZGF0YSc6IHB3aV9lbnRyaWVzW3VpZF19Ci0gICAgICAgICAgICAgICAgICAgZm9yIHAsIHVpZCBpbiBzZWxmLl9jYWNoZVsndWlkcyddLml0ZXJpdGVtcygpfQotICAgIHJldHVybiB7J3N5c3RlbV90b3RhbCc6IHN5c3RlbV90b3RhbCwgJ3Blcl9wYWNrYWdlJzogcGVyX3BhY2thZ2V9Ci0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIEdldEJhdHRlcnlJbmZvKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJHZXRzIGJhdHRlcnkgaW5mbyBmb3IgdGhlIGRldmljZS4KLQotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0gICAgUmV0dXJuczoKLSAgICAgIEEgZGljdCBjb250YWluaW5nIHZhcmlvdXMgYmF0dGVyeSBpbmZvcm1hdGlvbiBhcyByZXBvcnRlZCBieSBkdW1wc3lzCi0gICAgICBiYXR0ZXJ5LgotICAgICIiIgotICAgIHJlc3VsdCA9IHt9Ci0gICAgIyBTa2lwIHRoZSBmaXJzdCBsaW5lLCB3aGljaCBpcyBqdXN0IGEgaGVhZGVyLgotICAgIGZvciBsaW5lIGluIHNlbGYuX2RldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5J10sIGNoZWNrX3JldHVybj1UcnVlKVsxOl06Ci0gICAgICAjIElmIHVzYiBjaGFyZ2luZyBoYXMgYmVlbiBkaXNhYmxlZCwgYW4gZXh0cmEgbGluZSBvZiBoZWFkZXIgZXhpc3RzLgotICAgICAgaWYgJ1VQREFURVMgU1RPUFBFRCcgaW4gbGluZToKLSAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ0R1bXBzeXMgYmF0dGVyeSBub3QgcmVjZWl2aW5nIHVwZGF0ZXMuICcKLSAgICAgICAgICAgICAgICAgICAgICAgJ1J1biBkdW1wc3lzIGJhdHRlcnkgcmVzZXQgaWYgdGhpcyBpcyBpbiBlcnJvci4nKQotICAgICAgZWxpZiAnOicgbm90IGluIGxpbmU6Ci0gICAgICAgIGxvZ2dlci53YXJuaW5nKCdVbmtub3duIGxpbmUgZm91bmQgaW4gZHVtcHN5cyBiYXR0ZXJ5OiAiJXMiJywgbGluZSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIGssIHYgPSBsaW5lLnNwbGl0KCc6JywgMSkKLSAgICAgICAgcmVzdWx0W2suc3RyaXAoKV0gPSB2LnN0cmlwKCkKLSAgICByZXR1cm4gcmVzdWx0Ci0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIEdldENoYXJnaW5nKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJHZXRzIHRoZSBjaGFyZ2luZyBzdGF0ZSBvZiB0aGUgZGV2aWNlLgotCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGNoYXJnaW5nLCBmYWxzZSBvdGhlcndpc2UuCi0gICAgIiIiCi0gICAgYmF0dGVyeV9pbmZvID0gc2VsZi5HZXRCYXR0ZXJ5SW5mbygpCi0gICAgZm9yIGsgaW4gKCdBQyBwb3dlcmVkJywgJ1VTQiBwb3dlcmVkJywgJ1dpcmVsZXNzIHBvd2VyZWQnKToKLSAgICAgIGlmIChrIGluIGJhdHRlcnlfaW5mbyBhbmQKLSAgICAgICAgICBiYXR0ZXJ5X2luZm9ba10ubG93ZXIoKSBpbiAoJ3RydWUnLCAnMScsICd5ZXMnKSk6Ci0gICAgICAgIHJldHVybiBUcnVlCi0gICAgcmV0dXJuIEZhbHNlCi0KLSAgIyBUT0RPKHJuZXBoZXcpOiBNYWtlIHByaXZhdGUgd2hlbiBhbGwgdXNlIGNhc2VzIGNhbiB1c2UgdGhlIGNvbnRleHQgbWFuYWdlci4KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIERpc2FibGVCYXR0ZXJ5VXBkYXRlcyhzZWxmLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiUmVzZXRzIGJhdHRlcnkgZGF0YSBhbmQgbWFrZXMgZGV2aWNlIGFwcGVhciBsaWtlIGl0IGlzIG5vdAotICAgIGNoYXJnaW5nIHNvIHRoYXQgaXQgd2lsbCBjb2xsZWN0IHBvd2VyIGRhdGEgc2luY2UgbGFzdCBjaGFyZ2UuCi0KLSAgICBBcmdzOgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3I6IFdoZW4gcmVzZXR0aW5nIGJhdHRlcnlzdGF0cyBmYWlscyB0bwotICAgICAgICByZXNldCBwb3dlciB2YWx1ZXMuCi0gICAgICBkZXZpY2VfZXJyb3JzLkRldmljZVZlcnNpb25FcnJvcjogSWYgZGV2aWNlIGlzIG5vdCBMIG9yIGhpZ2hlci4KLSAgICAiIiIKLSAgICBkZWYgYmF0dGVyeV91cGRhdGVzX2Rpc2FibGVkKCk6Ci0gICAgICByZXR1cm4gc2VsZi5HZXRDaGFyZ2luZygpIGlzIEZhbHNlCi0KLSAgICBzZWxmLl9DbGVhclBvd2VyRGF0YSgpCi0gICAgc2VsZi5fZGV2aWNlLlJ1blNoZWxsQ29tbWFuZChbJ2R1bXBzeXMnLCAnYmF0dGVyeScsICdzZXQnLCAnYWMnLCAnMCddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgc2VsZi5fZGV2aWNlLlJ1blNoZWxsQ29tbWFuZChbJ2R1bXBzeXMnLCAnYmF0dGVyeScsICdzZXQnLCAndXNiJywgJzAnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3JldHVybj1UcnVlKQotICAgIHRpbWVvdXRfcmV0cnkuV2FpdEZvcihiYXR0ZXJ5X3VwZGF0ZXNfZGlzYWJsZWQsIHdhaXRfcGVyaW9kPTEpCi0KLSAgIyBUT0RPKHJuZXBoZXcpOiBNYWtlIHByaXZhdGUgd2hlbiBhbGwgdXNlIGNhc2VzIGNhbiB1c2UgdGhlIGNvbnRleHQgbWFuYWdlci4KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIEVuYWJsZUJhdHRlcnlVcGRhdGVzKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJSZXN0YXJ0cyBkZXZpY2UgY2hhcmdpbmcgc28gdGhhdCBkdW1wc3lzIG5vIGxvbmdlciBjb2xsZWN0cyBwb3dlciBkYXRhLgotCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJhaXNlczoKLSAgICAgIGRldmljZV9lcnJvcnMuRGV2aWNlVmVyc2lvbkVycm9yOiBJZiBkZXZpY2UgaXMgbm90IEwgb3IgaGlnaGVyLgotICAgICIiIgotICAgIGRlZiBiYXR0ZXJ5X3VwZGF0ZXNfZW5hYmxlZCgpOgotICAgICAgcmV0dXJuIChzZWxmLkdldENoYXJnaW5nKCkKLSAgICAgICAgICAgICAgb3Igbm90IGJvb2woJ1VQREFURVMgU1RPUFBFRCcgaW4gc2VsZi5fZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5J10sIGNoZWNrX3JldHVybj1UcnVlKSkpCi0KLSAgICBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKFsnZHVtcHN5cycsICdiYXR0ZXJ5JywgJ3Jlc2V0J10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSkKLSAgICB0aW1lb3V0X3JldHJ5LldhaXRGb3IoYmF0dGVyeV91cGRhdGVzX2VuYWJsZWQsIHdhaXRfcGVyaW9kPTEpCi0KLSAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLSAgZGVmIEJhdHRlcnlNZWFzdXJlbWVudChzZWxmLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRoYXQgZW5hYmxlcyBiYXR0ZXJ5IGRhdGEgY29sbGVjdGlvbi4gSXQgbWFrZXMKLSAgICB0aGUgZGV2aWNlIGFwcGVhciB0byBzdG9wIGNoYXJnaW5nIHNvIHRoYXQgZHVtcHN5cyB3aWxsIHN0YXJ0IGNvbGxlY3RpbmcKLSAgICBwb3dlciBkYXRhIHNpbmNlIGxhc3QgY2hhcmdlLiBPbmNlIHRoZSB3aXRoIGJsb2NrIGlzIGV4aXRlZCwgY2hhcmdpbmcgaXMKLSAgICByZXN1bWVkIGFuZCBwb3dlciBkYXRhIHNpbmNlIGxhc3QgY2hhcmdlIGlzIG5vIGxvbmdlciBjb2xsZWN0ZWQuCi0KLSAgICBPbmx5IGZvciBkZXZpY2VzIEwgYW5kIGhpZ2hlci4KLQotICAgIEV4YW1wbGUgdXNhZ2U6Ci0gICAgICB3aXRoIEJhdHRlcnlNZWFzdXJlbWVudCgpOgotICAgICAgICBicm93c2VyX2FjdGlvbnMoKQotICAgICAgICBnZXRfcG93ZXJfZGF0YSgpICMgcmVwb3J0IHVzYWdlIHdpdGhpbiB0aGlzIGJsb2NrCi0gICAgICBhZnRlcl9tZWFzdXJlbWVudHMoKSAjIEFueXRoaW5nIHRoYXQgcnVucyBhZnRlciBwb3dlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtZWFzdXJlbWVudHMgYXJlIGNvbGxlY3RlZAotCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJhaXNlczoKLSAgICAgIGRldmljZV9lcnJvcnMuRGV2aWNlVmVyc2lvbkVycm9yOiBJZiBkZXZpY2UgaXMgbm90IEwgb3IgaGlnaGVyLgotICAgICIiIgotICAgIGlmIHNlbGYuX2RldmljZS5idWlsZF92ZXJzaW9uX3NkayA8IHZlcnNpb25fY29kZXMuTE9MTElQT1A6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkRldmljZVZlcnNpb25FcnJvcignRGV2aWNlIG11c3QgYmUgTCBvciBoaWdoZXIuJykKLSAgICB0cnk6Ci0gICAgICBzZWxmLkRpc2FibGVCYXR0ZXJ5VXBkYXRlcyh0aW1lb3V0PXRpbWVvdXQsIHJldHJpZXM9cmV0cmllcykKLSAgICAgIHlpZWxkCi0gICAgZmluYWxseToKLSAgICAgIHNlbGYuRW5hYmxlQmF0dGVyeVVwZGF0ZXModGltZW91dD10aW1lb3V0LCByZXRyaWVzPXJldHJpZXMpCi0KLSAgZGVmIF9EaXNjaGFyZ2VEZXZpY2Uoc2VsZiwgcGVyY2VudCwgd2FpdF9wZXJpb2Q9MTIwKToKLSAgICAiIiJEaXNhYmxlcyBjaGFyZ2luZyBhbmQgd2FpdHMgZm9yIGRldmljZSB0byBkaXNjaGFyZ2UgZ2l2ZW4gYW1vdW50Ci0KLSAgICBBcmdzOgotICAgICAgcGVyY2VudDogbGV2ZWwgb2YgY2hhcmdlIHRvIGRpc2NoYXJnZS4KLQotICAgIFJhaXNlczoKLSAgICAgIFZhbHVlRXJyb3I6IElmIHBlcmNlbnQgaXMgbm90IGJldHdlZW4gMSBhbmQgOTkuCi0gICAgIiIiCi0gICAgYmF0dGVyeV9sZXZlbCA9IGludChzZWxmLkdldEJhdHRlcnlJbmZvKCkuZ2V0KCdsZXZlbCcpKQotICAgIGlmIG5vdCAwIDwgcGVyY2VudCA8IDEwMDoKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Rpc2NoYXJnZSBhbW91bnQoJXMpIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA5OScKLSAgICAgICAgICAgICAgICAgICAgICAgJSBwZXJjZW50KQotICAgIGlmIGJhdHRlcnlfbGV2ZWwgaXMgTm9uZToKLSAgICAgIGxvZ2dlci53YXJuaW5nKCdVbmFibGUgdG8gZmluZCBjdXJyZW50IGJhdHRlcnkgbGV2ZWwuIENhbm5vdCBkaXNjaGFyZ2UuJykKLSAgICAgIHJldHVybgotICAgICMgRG8gbm90IGRpc2NoYXJnZSBpZiBpdCB3b3VsZCBtYWtlIGJhdHRlcnkgbGV2ZWwgdG9vIGxvdy4KLSAgICBpZiBwZXJjZW50ID49IGJhdHRlcnlfbGV2ZWwgLSAxMDoKLSAgICAgIGxvZ2dlci53YXJuaW5nKCdCYXR0ZXJ5IGlzIHRvbyBsb3cgb3IgZGlzY2hhcmdlIGFtb3VudCByZXF1ZXN0ZWQgaXMgdG9vICcKLSAgICAgICAgICAgICAgICAgICAgICdoaWdoLiBDYW5ub3QgZGlzY2hhcmdlIHBob25lICVzIHBlcmNlbnQuJywgcGVyY2VudCkKLSAgICAgIHJldHVybgotCi0gICAgc2VsZi5fSGFyZHdhcmVTZXRDaGFyZ2luZyhGYWxzZSkKLQotICAgIGRlZiBkZXZpY2VfZGlzY2hhcmdlZCgpOgotICAgICAgc2VsZi5fSGFyZHdhcmVTZXRDaGFyZ2luZyhUcnVlKQotICAgICAgY3VycmVudF9sZXZlbCA9IGludChzZWxmLkdldEJhdHRlcnlJbmZvKCkuZ2V0KCdsZXZlbCcpKQotICAgICAgbG9nZ2VyLmluZm8oJ2N1cnJlbnQgYmF0dGVyeSBsZXZlbDogJXMnLCBjdXJyZW50X2xldmVsKQotICAgICAgaWYgYmF0dGVyeV9sZXZlbCAtIGN1cnJlbnRfbGV2ZWwgPj0gcGVyY2VudDoKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgIHNlbGYuX0hhcmR3YXJlU2V0Q2hhcmdpbmcoRmFsc2UpCi0gICAgICByZXR1cm4gRmFsc2UKLQotICAgIHRpbWVvdXRfcmV0cnkuV2FpdEZvcihkZXZpY2VfZGlzY2hhcmdlZCwgd2FpdF9wZXJpb2Q9d2FpdF9wZXJpb2QpCi0KLSAgZGVmIENoYXJnZURldmljZVRvTGV2ZWwoc2VsZiwgbGV2ZWwsIHdhaXRfcGVyaW9kPTYwKToKLSAgICAiIiJFbmFibGVzIGNoYXJnaW5nIGFuZCB3YWl0cyBmb3IgZGV2aWNlIHRvIGJlIGNoYXJnZWQgdG8gZ2l2ZW4gbGV2ZWwuCi0KLSAgICBBcmdzOgotICAgICAgbGV2ZWw6IGxldmVsIG9mIGNoYXJnZSB0byB3YWl0IGZvci4KLSAgICAgIHdhaXRfcGVyaW9kOiB0aW1lIGluIHNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIGNoZWNraW5nLgotICAgIFJhaXNlczoKLSAgICAgIGRldmljZV9lcnJvcnMuRGV2aWNlQ2hhcmdpbmdFcnJvcjogSWYgZXJyb3Igd2hpbGUgY2hhcmdpbmcgaXMgZGV0ZWN0ZWQuCi0gICAgIiIiCi0gICAgc2VsZi5TZXRDaGFyZ2luZyhUcnVlKQotICAgIGNoYXJnZV9zdGF0dXMgPSB7Ci0gICAgICAgICdjaGFyZ2VfZmFpbHVyZV9jb3VudCc6IDAsCi0gICAgICAgICdsYXN0X2NoYXJnZV92YWx1ZSc6IDAKLSAgICB9Ci0gICAgZGVmIGRldmljZV9jaGFyZ2VkKCk6Ci0gICAgICBiYXR0ZXJ5X2xldmVsID0gc2VsZi5HZXRCYXR0ZXJ5SW5mbygpLmdldCgnbGV2ZWwnKQotICAgICAgaWYgYmF0dGVyeV9sZXZlbCBpcyBOb25lOgotICAgICAgICBsb2dnZXIud2FybmluZygnVW5hYmxlIHRvIGZpbmQgY3VycmVudCBiYXR0ZXJ5IGxldmVsLicpCi0gICAgICAgIGJhdHRlcnlfbGV2ZWwgPSAxMDAKLSAgICAgIGVsc2U6Ci0gICAgICAgIGxvZ2dlci5pbmZvKCdjdXJyZW50IGJhdHRlcnkgbGV2ZWw6ICVzJywgYmF0dGVyeV9sZXZlbCkKLSAgICAgICAgYmF0dGVyeV9sZXZlbCA9IGludChiYXR0ZXJ5X2xldmVsKQotCi0gICAgICAjIFVzZSA+IHNvIHRoYXQgaXQgd2lsbCBub3QgcmVzZXQgaWYgY2hhcmdlIGlzIGdvaW5nIGRvd24uCi0gICAgICBpZiBiYXR0ZXJ5X2xldmVsID4gY2hhcmdlX3N0YXR1c1snbGFzdF9jaGFyZ2VfdmFsdWUnXToKLSAgICAgICAgY2hhcmdlX3N0YXR1c1snbGFzdF9jaGFyZ2VfdmFsdWUnXSA9IGJhdHRlcnlfbGV2ZWwKLSAgICAgICAgY2hhcmdlX3N0YXR1c1snY2hhcmdlX2ZhaWx1cmVfY291bnQnXSA9IDAKLSAgICAgIGVsc2U6Ci0gICAgICAgIGNoYXJnZV9zdGF0dXNbJ2NoYXJnZV9mYWlsdXJlX2NvdW50J10gKz0gMQotCi0gICAgICBpZiAobm90IGJhdHRlcnlfbGV2ZWwgPj0gbGV2ZWwKLSAgICAgICAgICBhbmQgY2hhcmdlX3N0YXR1c1snY2hhcmdlX2ZhaWx1cmVfY291bnQnXSA+PSBfTUFYX0NIQVJHRV9FUlJPUik6Ci0gICAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuRGV2aWNlQ2hhcmdpbmdFcnJvcigKLSAgICAgICAgICAgICdEZXZpY2Ugbm90IGNoYXJnaW5nIHByb3Blcmx5LiBDdXJyZW50IGxldmVsOiVzIFByZXZpb3VzIGxldmVsOiVzJwotICAgICAgICAgICAgICUgKGJhdHRlcnlfbGV2ZWwsIGNoYXJnZV9zdGF0dXNbJ2xhc3RfY2hhcmdlX3ZhbHVlJ10pKQotICAgICAgcmV0dXJuIGJhdHRlcnlfbGV2ZWwgPj0gbGV2ZWwKLQotICAgIHRpbWVvdXRfcmV0cnkuV2FpdEZvcihkZXZpY2VfY2hhcmdlZCwgd2FpdF9wZXJpb2Q9d2FpdF9wZXJpb2QpCi0KLSAgZGVmIExldEJhdHRlcnlDb29sVG9UZW1wZXJhdHVyZShzZWxmLCB0YXJnZXRfdGVtcCwgd2FpdF9wZXJpb2Q9MTgwKToKLSAgICAiIiJMZXRzIGRldmljZSBzaXQgdG8gZ2l2ZSBiYXR0ZXJ5IHRpbWUgdG8gY29vbCBkb3duCi0gICAgQXJnczoKLSAgICAgIHRlbXA6IG1heGltdW0gdGVtcGVyYXR1cmUgdG8gYWxsb3cgaW4gdGVudGhzIG9mIGRlZ3JlZXMgYy4KLSAgICAgIHdhaXRfcGVyaW9kOiB0aW1lIGluIHNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIGNoZWNraW5nLgotICAgICIiIgotICAgIGRlZiBjb29sX2RldmljZSgpOgotICAgICAgdGVtcCA9IHNlbGYuR2V0QmF0dGVyeUluZm8oKS5nZXQoJ3RlbXBlcmF0dXJlJykKLSAgICAgIGlmIHRlbXAgaXMgTm9uZToKLSAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ1VuYWJsZSB0byBmaW5kIGN1cnJlbnQgYmF0dGVyeSB0ZW1wZXJhdHVyZS4nKQotICAgICAgICB0ZW1wID0gMAotICAgICAgZWxzZToKLSAgICAgICAgbG9nZ2VyLmluZm8oJ0N1cnJlbnQgYmF0dGVyeSB0ZW1wZXJhdHVyZTogJXMnLCB0ZW1wKQotICAgICAgaWYgaW50KHRlbXApIDw9IHRhcmdldF90ZW1wOgotICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgZWxzZToKLSAgICAgICAgaWYgJ05leHVzIDUnIGluIHNlbGYuX2NhY2hlWydwcm9maWxlJ11bJ25hbWUnXToKLSAgICAgICAgICBzZWxmLl9EaXNjaGFyZ2VEZXZpY2UoMSkKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBzZWxmLl9EaXNjb3ZlckRldmljZVByb2ZpbGUoKQotICAgIHNlbGYuRW5hYmxlQmF0dGVyeVVwZGF0ZXMoKQotICAgIGxvZ2dlci5pbmZvKCdXYWl0aW5nIGZvciB0aGUgZGV2aWNlIHRvIGNvb2wgZG93biB0byAlcyAoMC4xIEMpJywKLSAgICAgICAgICAgICAgICB0YXJnZXRfdGVtcCkKLSAgICB0aW1lb3V0X3JldHJ5LldhaXRGb3IoY29vbF9kZXZpY2UsIHdhaXRfcGVyaW9kPXdhaXRfcGVyaW9kKQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBTZXRDaGFyZ2luZyhzZWxmLCBlbmFibGVkLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiRW5hYmxlcyBvciBkaXNhYmxlcyBjaGFyZ2luZyBvbiB0aGUgZGV2aWNlLgotCi0gICAgQXJnczoKLSAgICAgIGVuYWJsZWQ6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgY2hhcmdpbmcgc2hvdWxkIGJlIGVuYWJsZWQgb3IKLSAgICAgICAgZGlzYWJsZWQuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0gICAgIiIiCi0gICAgaWYgc2VsZi5HZXRDaGFyZ2luZygpID09IGVuYWJsZWQ6Ci0gICAgICBsb2dnZXIud2FybmluZygnRGV2aWNlIGNoYXJnaW5nIGFscmVhZHkgaW4gZXhwZWN0ZWQgc3RhdGU6ICVzJywgZW5hYmxlZCkKLSAgICAgIHJldHVybgotCi0gICAgc2VsZi5fRGlzY292ZXJEZXZpY2VQcm9maWxlKCkKLSAgICBpZiBlbmFibGVkOgotICAgICAgaWYgc2VsZi5fY2FjaGVbJ3Byb2ZpbGUnXVsnZW5hYmxlX2NvbW1hbmQnXToKLSAgICAgICAgc2VsZi5fSGFyZHdhcmVTZXRDaGFyZ2luZyhlbmFibGVkKQotICAgICAgZWxzZToKLSAgICAgICAgbG9nZ2VyLmluZm8oJ1VuYWJsZSB0byBlbmFibGUgY2hhcmdpbmcgdmlhIGhhcmR3YXJlLiAnCi0gICAgICAgICAgICAgICAgICAgICdGYWxsaW5nIGJhY2sgdG8gc29mdHdhcmUgZW5hYmxpbmcuJykKLSAgICAgICAgc2VsZi5FbmFibGVCYXR0ZXJ5VXBkYXRlcygpCi0gICAgZWxzZToKLSAgICAgIGlmIHNlbGYuX2NhY2hlWydwcm9maWxlJ11bJ2VuYWJsZV9jb21tYW5kJ106Ci0gICAgICAgIHNlbGYuX0NsZWFyUG93ZXJEYXRhKCkKLSAgICAgICAgc2VsZi5fSGFyZHdhcmVTZXRDaGFyZ2luZyhlbmFibGVkKQotICAgICAgZWxzZToKLSAgICAgICAgbG9nZ2VyLmluZm8oJ1VuYWJsZSB0byBkaXNhYmxlIGNoYXJnaW5nIHZpYSBoYXJkd2FyZS4gJwotICAgICAgICAgICAgICAgICAgICAgJ0ZhbGxpbmcgYmFjayB0byBzb2Z0d2FyZSBkaXNhYmxpbmcuJykKLSAgICAgICAgc2VsZi5EaXNhYmxlQmF0dGVyeVVwZGF0ZXMoKQotCi0gIGRlZiBfSGFyZHdhcmVTZXRDaGFyZ2luZyhzZWxmLCBlbmFibGVkLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiRW5hYmxlcyBvciBkaXNhYmxlcyBjaGFyZ2luZyBvbiB0aGUgZGV2aWNlLgotCi0gICAgQXJnczoKLSAgICAgIGVuYWJsZWQ6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgY2hhcmdpbmcgc2hvdWxkIGJlIGVuYWJsZWQgb3IKLSAgICAgICAgZGlzYWJsZWQuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSYWlzZXM6Ci0gICAgICBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcjogSWYgbWV0aG9kIG9mIGRpc2FibGluZyBjaGFyZ2luZyBjYW5ub3QKLSAgICAgICAgYmUgZGV0ZXJtaW5lZC4KLSAgICAiIiIKLSAgICBzZWxmLl9EaXNjb3ZlckRldmljZVByb2ZpbGUoKQotICAgIGlmIG5vdCBzZWxmLl9jYWNoZVsncHJvZmlsZSddWydlbmFibGVfY29tbWFuZCddOgotICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IoCi0gICAgICAgICAgJ1VuYWJsZSB0byBmaW5kIGNoYXJnaW5nIGNvbW1hbmRzLicpCi0KLSAgICBjb21tYW5kID0gKHNlbGYuX2NhY2hlWydwcm9maWxlJ11bJ2VuYWJsZV9jb21tYW5kJ10gaWYgZW5hYmxlZAotICAgICAgICAgICAgICAgZWxzZSBzZWxmLl9jYWNoZVsncHJvZmlsZSddWydkaXNhYmxlX2NvbW1hbmQnXSkKLQotICAgIGRlZiB2ZXJpZnlfY2hhcmdpbmcoKToKLSAgICAgIHJldHVybiBzZWxmLkdldENoYXJnaW5nKCkgPT0gZW5hYmxlZAotCi0gICAgc2VsZi5fZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgY29tbWFuZCwgc2hlbGw9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUsIGFzX3Jvb3Q9VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUpCi0gICAgdGltZW91dF9yZXRyeS5XYWl0Rm9yKHZlcmlmeV9jaGFyZ2luZywgd2FpdF9wZXJpb2Q9MSkKLQotICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotICBkZWYgUG93ZXJNZWFzdXJlbWVudChzZWxmLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRoYXQgZW5hYmxlcyBiYXR0ZXJ5IHBvd2VyIGNvbGxlY3Rpb24uCi0KLSAgICBPbmNlIHRoZSB3aXRoIGJsb2NrIGlzIGV4aXRlZCwgY2hhcmdpbmcgaXMgcmVzdW1lZC4gV2lsbCBhdHRlbXB0IHRvIGRpc2FibGUKLSAgICBjaGFyZ2luZyBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwsIGFuZCBpZiB0aGF0IGZhaWxzIHdpbGwgZmFsbCBiYWNrIHRvIHNvZnR3YXJlCi0gICAgZGlzYWJsaW5nIG9mIGJhdHRlcnkgdXBkYXRlcy4KLQotICAgIE9ubHkgZm9yIGRldmljZXMgTCBhbmQgaGlnaGVyLgotCi0gICAgRXhhbXBsZSB1c2FnZToKLSAgICAgIHdpdGggUG93ZXJNZWFzdXJlbWVudCgpOgotICAgICAgICBicm93c2VyX2FjdGlvbnMoKQotICAgICAgICBnZXRfcG93ZXJfZGF0YSgpICMgcmVwb3J0IHVzYWdlIHdpdGhpbiB0aGlzIGJsb2NrCi0gICAgICBhZnRlcl9tZWFzdXJlbWVudHMoKSAjIEFueXRoaW5nIHRoYXQgcnVucyBhZnRlciBwb3dlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtZWFzdXJlbWVudHMgYXJlIGNvbGxlY3RlZAotCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLSAgICAiIiIKLSAgICB0cnk6Ci0gICAgICBzZWxmLlNldENoYXJnaW5nKEZhbHNlLCB0aW1lb3V0PXRpbWVvdXQsIHJldHJpZXM9cmV0cmllcykKLSAgICAgIHlpZWxkCi0gICAgZmluYWxseToKLSAgICAgIHNlbGYuU2V0Q2hhcmdpbmcoVHJ1ZSwgdGltZW91dD10aW1lb3V0LCByZXRyaWVzPXJldHJpZXMpCi0KLSAgZGVmIF9DbGVhclBvd2VyRGF0YShzZWxmKToKLSAgICAiIiJSZXNldHMgYmF0dGVyeSBkYXRhIGFuZCBtYWtlcyBkZXZpY2UgYXBwZWFyIGxpa2UgaXQgaXMgbm90Ci0gICAgY2hhcmdpbmcgc28gdGhhdCBpdCB3aWxsIGNvbGxlY3QgcG93ZXIgZGF0YSBzaW5jZSBsYXN0IGNoYXJnZS4KLQotICAgIFJldHVybnM6Ci0gICAgICBUcnVlIGlmIHBvd2VyIGRhdGEgY2xlYXJlZC4KLSAgICAgIEZhbHNlIGlmIHBvd2VyIGRhdGEgY2xlYXJpbmcgaXMgbm90IHN1cHBvcnRlZCAocHJlLUwpCi0KLSAgICBSYWlzZXM6Ci0gICAgICBkZXZpY2VfZXJyb3JzLkRldmljZVZlcnNpb25FcnJvcjogSWYgcG93ZXIgY2xlYXJpbmcgaXMgc3VwcG9ydGVkLAotICAgICAgICBidXQgZmFpbHMuCi0gICAgIiIiCi0gICAgaWYgc2VsZi5fZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrIDwgdmVyc2lvbl9jb2Rlcy5MT0xMSVBPUDoKLSAgICAgIGxvZ2dlci53YXJuaW5nKCdEdW1wc3lzIHBvd2VyIGRhdGEgb25seSBhdmFpbGFibGUgb24gNS4wIGFuZCBhYm92ZS4gJwotICAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBjbGVhciBwb3dlciBkYXRhLicpCi0gICAgICByZXR1cm4gRmFsc2UKLQotICAgIHNlbGYuX2RldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5JywgJ3NldCcsICd1c2InLCAnMSddLCBjaGVja19yZXR1cm49VHJ1ZSkKLSAgICBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeScsICdzZXQnLCAnYWMnLCAnMSddLCBjaGVja19yZXR1cm49VHJ1ZSkKLQotICAgIGRlZiB0ZXN0X2lmX2NsZWFyKCk6Ci0gICAgICBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5c3RhdHMnLCAnLS1yZXNldCddLCBjaGVja19yZXR1cm49VHJ1ZSkKLSAgICAgIGJhdHRlcnlfZGF0YSA9IHNlbGYuX2RldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgWydkdW1wc3lzJywgJ2JhdHRlcnlzdGF0cycsICctLWNoYXJnZWQnLCAnLWMnXSwKLSAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUpCi0gICAgICBmb3IgbGluZSBpbiBiYXR0ZXJ5X2RhdGE6Ci0gICAgICAgIGwgPSBsaW5lLnNwbGl0KCcsJykKLSAgICAgICAgaWYgKGxlbihsKSA+IF9QV0lfUE9XRVJfQ09OU1VNUFRJT05fSU5ERVgKLSAgICAgICAgICAgIGFuZCBsW19ST1dfVFlQRV9JTkRFWF0gPT0gJ3B3aScKLSAgICAgICAgICAgIGFuZCBmbG9hdChsW19QV0lfUE9XRVJfQ09OU1VNUFRJT05fSU5ERVhdKSAhPSAwLjApOgotICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgcmV0dXJuIFRydWUKLQotICAgIHRyeToKLSAgICAgIHRpbWVvdXRfcmV0cnkuV2FpdEZvcih0ZXN0X2lmX2NsZWFyLCB3YWl0X3BlcmlvZD0xKQotICAgICAgcmV0dXJuIFRydWUKLSAgICBmaW5hbGx5OgotICAgICAgc2VsZi5fZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeScsICdyZXNldCddLCBjaGVja19yZXR1cm49VHJ1ZSkKLQotICBkZWYgX0Rpc2NvdmVyRGV2aWNlUHJvZmlsZShzZWxmKToKLSAgICAiIiJDaGVja3MgYW5kIGNhY2hlcyBkZXZpY2UgaW5mb3JtYXRpb24uCi0KLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSBpZiBwcm9maWxlIGlzIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuCi0gICAgIiIiCi0KLSAgICBpZiAncHJvZmlsZScgaW4gc2VsZi5fY2FjaGU6Ci0gICAgICByZXR1cm4gVHJ1ZQotICAgIGZvciBwcm9maWxlIGluIF9ERVZJQ0VfUFJPRklMRVM6Ci0gICAgICBpZiBzZWxmLl9kZXZpY2UucHJvZHVjdF9tb2RlbCBpbiBwcm9maWxlWyduYW1lJ106Ci0gICAgICAgIHNlbGYuX2NhY2hlWydwcm9maWxlJ10gPSBwcm9maWxlCi0gICAgICAgIHJldHVybiBUcnVlCi0gICAgc2VsZi5fY2FjaGVbJ3Byb2ZpbGUnXSA9IHsKLSAgICAgICAgJ25hbWUnOiBbXSwKLSAgICAgICAgJ2VuYWJsZV9jb21tYW5kJzogTm9uZSwKLSAgICAgICAgJ2Rpc2FibGVfY29tbWFuZCc6IE5vbmUsCi0gICAgICAgICdjaGFyZ2VfY291bnRlcic6IE5vbmUsCi0gICAgICAgICd2b2x0YWdlJzogTm9uZSwKLSAgICAgICAgJ2N1cnJlbnQnOiBOb25lLAotICAgIH0KLSAgICByZXR1cm4gRmFsc2UKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvYmF0dGVyeV91dGlsc190ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9iYXR0ZXJ5X3V0aWxzX3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGZlY2NmNzkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9iYXR0ZXJ5X3V0aWxzX3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2OTcgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIgotVW5pdCB0ZXN0cyBmb3IgdGhlIGNvbnRlbnRzIG9mIGJhdHRlcnlfdXRpbHMucHkKLSIiIgotCi0jIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzLHVudXNlZC1hcmd1bWVudAotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZGV2aWwgaW1wb3J0IGRldmlsX2VudgotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBiYXR0ZXJ5X3V0aWxzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9lcnJvcnMKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3V0aWxzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlsc190ZXN0Ci1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBtb2NrX2NhbGxzCi0KLXdpdGggZGV2aWxfZW52LlN5c1BhdGgoZGV2aWxfZW52LlBZTU9DS19QQVRIKToKLSAgaW1wb3J0IG1vY2sgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotCi1fRFVNUFNZU19PVVRQVVQgPSBbCi0gICAgJzksMCxpLHVpZCwxMDAwLHRlc3RfcGFja2FnZTEnLAotICAgICc5LDAsaSx1aWQsMTAwMSx0ZXN0X3BhY2thZ2UyJywKLSAgICAnOSwxMDAwLGwscHdpLHVpZCwxJywKLSAgICAnOSwxMDAxLGwscHdpLHVpZCwyJywKLSAgICAnOSwwLGwscHdzLDE3MjgsMjAwMCwxOTAsMjA3JywKLV0KLQotCi1jbGFzcyBCYXR0ZXJ5VXRpbHNUZXN0KG1vY2tfY2FsbHMuVGVzdENhc2UpOgotCi0gIF9ORVhVU181ID0gewotICAgICduYW1lJzogJ05leHVzIDUnLAotICAgICd3aXRuZXNzX2ZpbGUnOiAnL3N5cy9rZXJuZWwvZGVidWcvYnEyNDE5Mi9JTlBVVF9TUkNfQ09OVCcsCi0gICAgJ2VuYWJsZV9jb21tYW5kJzogKAotICAgICAgICAnZWNobyAweDRBID4gL3N5cy9rZXJuZWwvZGVidWcvYnEyNDE5Mi9JTlBVVF9TUkNfQ09OVCAmJiAnCi0gICAgICAgICdlY2hvIDEgPiAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS91c2Ivb25saW5lJyksCi0gICAgJ2Rpc2FibGVfY29tbWFuZCc6ICgKLSAgICAgICAgJ2VjaG8gMHhDQSA+IC9zeXMva2VybmVsL2RlYnVnL2JxMjQxOTIvSU5QVVRfU1JDX0NPTlQgJiYgJwotICAgICAgICAnY2htb2QgNjQ0IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L3VzYi9vbmxpbmUgJiYgJwotICAgICAgICAnZWNobyAwID4gL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvdXNiL29ubGluZScpLAotICAgICdjaGFyZ2VfY291bnRlcic6IE5vbmUsCi0gICAgJ3ZvbHRhZ2UnOiBOb25lLAotICAgICdjdXJyZW50JzogTm9uZSwKLSAgfQotCi0gIF9ORVhVU182ID0gewotICAgICduYW1lJzogJ05leHVzIDYnLAotICAgICd3aXRuZXNzX2ZpbGUnOiBOb25lLAotICAgICdlbmFibGVfY29tbWFuZCc6IE5vbmUsCi0gICAgJ2Rpc2FibGVfY29tbWFuZCc6IE5vbmUsCi0gICAgJ2NoYXJnZV9jb3VudGVyJzogKAotICAgICAgICAnL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvbWF4MTcweHhfYmF0dGVyeS9jaGFyZ2VfY291bnRlcl9leHQnKSwKLSAgICAndm9sdGFnZSc6ICcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9tYXgxNzB4eF9iYXR0ZXJ5L3ZvbHRhZ2Vfbm93JywKLSAgICAnY3VycmVudCc6ICcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9tYXgxNzB4eF9iYXR0ZXJ5L2N1cnJlbnRfbm93JywKLSAgfQotCi0gIF9ORVhVU18xMCA9IHsKLSAgICAnbmFtZSc6ICdOZXh1cyAxMCcsCi0gICAgJ3dpdG5lc3NfZmlsZSc6IE5vbmUsCi0gICAgJ2VuYWJsZV9jb21tYW5kJzogTm9uZSwKLSAgICAnZGlzYWJsZV9jb21tYW5kJzogTm9uZSwKLSAgICAnY2hhcmdlX2NvdW50ZXInOiAoCi0gICAgICAgICcvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9kczI3ODQtZnVlbGdhdWdlL2NoYXJnZV9jb3VudGVyX2V4dCcpLAotICAgICd2b2x0YWdlJzogJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L2RzMjc4NC1mdWVsZ2F1Z2Uvdm9sdGFnZV9ub3cnLAotICAgICdjdXJyZW50JzogJy9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L2RzMjc4NC1mdWVsZ2F1Z2UvY3VycmVudF9ub3cnLAotICB9Ci0KLSAgZGVmIFNoZWxsRXJyb3Ioc2VsZiwgb3V0cHV0PU5vbmUsIHN0YXR1cz0xKToKLSAgICBkZWYgYWN0aW9uKGNtZCwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3IoCi0gICAgICAgICAgY21kLCBvdXRwdXQsIHN0YXR1cywgc3RyKHNlbGYuZGV2aWNlKSkKLSAgICBpZiBvdXRwdXQgaXMgTm9uZToKLSAgICAgIG91dHB1dCA9ICdQZXJtaXNzaW9uIGRlbmllZFxuJwotICAgIHJldHVybiBhY3Rpb24KLQotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5hZGIgPSBkZXZpY2VfdXRpbHNfdGVzdC5fQWRiV3JhcHBlck1vY2soJzAxMjM0NTY3ODlhYmNkZWYnKQotICAgIHNlbGYuZGV2aWNlID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKAotICAgICAgICBzZWxmLmFkYiwgZGVmYXVsdF90aW1lb3V0PTEwLCBkZWZhdWx0X3JldHJpZXM9MCkKLSAgICBzZWxmLndhdGNoTWV0aG9kQ2FsbHMoc2VsZi5jYWxsLmFkYiwgaWdub3JlPVsnR2V0RGV2aWNlU2VyaWFsJ10pCi0gICAgc2VsZi5iYXR0ZXJ5ID0gYmF0dGVyeV91dGlscy5CYXR0ZXJ5VXRpbHMoCi0gICAgICAgIHNlbGYuZGV2aWNlLCBkZWZhdWx0X3RpbWVvdXQ9MTAsIGRlZmF1bHRfcmV0cmllcz0wKQotCi0KLWNsYXNzIEJhdHRlcnlVdGlsc0luaXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdEluaXRXaXRoRGV2aWNlVXRpbChzZWxmKToKLSAgICBzZXJpYWwgPSAnMGZlZGNiYTk4NzY1NDMyMScKLSAgICBkID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKHNlcmlhbCkKLSAgICBiID0gYmF0dGVyeV91dGlscy5CYXR0ZXJ5VXRpbHMoZCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGIuX2RldmljZSkKLQotICBkZWYgdGVzdEluaXRXaXRoTWlzc2luZ19mYWlscyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICBiYXR0ZXJ5X3V0aWxzLkJhdHRlcnlVdGlscyhOb25lKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgIGJhdHRlcnlfdXRpbHMuQmF0dGVyeVV0aWxzKCcnKQotCi0KLWNsYXNzIEJhdHRlcnlVdGlsc1NldENoYXJnaW5nVGVzdChCYXR0ZXJ5VXRpbHNUZXN0KToKLQotICBAbW9jay5wYXRjaCgndGltZS5zbGVlcCcsIG1vY2suTW9jaygpKQotICBkZWYgdGVzdEhhcmR3YXJlU2V0Q2hhcmdpbmdfZW5hYmxlZChzZWxmKToKLSAgICBzZWxmLmJhdHRlcnkuX2NhY2hlWydwcm9maWxlJ10gPSBzZWxmLl9ORVhVU181Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBtb2NrLkFOWSwgc2hlbGw9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUsIGFzX3Jvb3Q9VHJ1ZSwKLSAgICAgICAgICAgIGxhcmdlX291dHB1dD1UcnVlKSwgW10pLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgRmFsc2UpLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgVHJ1ZSkpOgotICAgICAgc2VsZi5iYXR0ZXJ5Ll9IYXJkd2FyZVNldENoYXJnaW5nKFRydWUpCi0KLSAgZGVmIHRlc3RIYXJkd2FyZVNldENoYXJnaW5nX2FscmVhZHlFbmFibGVkKHNlbGYpOgotICAgIHNlbGYuYmF0dGVyeS5fY2FjaGVbJ3Byb2ZpbGUnXSA9IHNlbGYuX05FWFVTXzUKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIG1vY2suQU5ZLCBzaGVsbD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSwgYXNfcm9vdD1UcnVlLAotICAgICAgICAgICAgbGFyZ2Vfb3V0cHV0PVRydWUpLCBbXSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRDaGFyZ2luZygpLCBUcnVlKSk6Ci0gICAgICBzZWxmLmJhdHRlcnkuX0hhcmR3YXJlU2V0Q2hhcmdpbmcoVHJ1ZSkKLQotICBAbW9jay5wYXRjaCgndGltZS5zbGVlcCcsIG1vY2suTW9jaygpKQotICBkZWYgdGVzdEhhcmR3YXJlU2V0Q2hhcmdpbmdfZGlzYWJsZWQoc2VsZik6Ci0gICAgc2VsZi5iYXR0ZXJ5Ll9jYWNoZVsncHJvZmlsZSddID0gc2VsZi5fTkVYVVNfNQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgbW9jay5BTlksIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlLCBhc19yb290PVRydWUsCi0gICAgICAgICAgICBsYXJnZV9vdXRwdXQ9VHJ1ZSksIFtdKSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldENoYXJnaW5nKCksIFRydWUpLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgRmFsc2UpKToKLSAgICAgIHNlbGYuYmF0dGVyeS5fSGFyZHdhcmVTZXRDaGFyZ2luZyhGYWxzZSkKLQotCi1jbGFzcyBCYXR0ZXJ5VXRpbHNTZXRCYXR0ZXJ5TWVhc3VyZW1lbnRUZXN0KEJhdHRlcnlVdGlsc1Rlc3QpOgotCi0gIEBtb2NrLnBhdGNoKCd0aW1lLnNsZWVwJywgbW9jay5Nb2NrKCkpCi0gIGRlZiB0ZXN0QmF0dGVyeU1lYXN1cmVtZW50V2lmaShzZWxmKToKLSAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChzZWxmLmNhbGwuZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT0yMik6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5Ll9DbGVhclBvd2VyRGF0YSgpLCBUcnVlKSwKLSAgICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5JywgJ3NldCcsICdhYycsICcwJ10sIGNoZWNrX3JldHVybj1UcnVlKSwgW10pLAotICAgICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgWydkdW1wc3lzJywgJ2JhdHRlcnknLCAnc2V0JywgJ3VzYicsICcwJ10sIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgICAgW10pLAotICAgICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRDaGFyZ2luZygpLCBGYWxzZSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeScsICdyZXNldCddLCBjaGVja19yZXR1cm49VHJ1ZSksIFtdKSwKLSAgICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgRmFsc2UpLAotICAgICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgWydkdW1wc3lzJywgJ2JhdHRlcnknXSwgY2hlY2tfcmV0dXJuPVRydWUpLCBbJ1VQREFURVMgU1RPUFBFRCddKSwKLSAgICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgRmFsc2UpLAotICAgICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgWydkdW1wc3lzJywgJ2JhdHRlcnknXSwgY2hlY2tfcmV0dXJuPVRydWUpLCBbXSkpOgotICAgICAgICB3aXRoIHNlbGYuYmF0dGVyeS5CYXR0ZXJ5TWVhc3VyZW1lbnQoKToKLSAgICAgICAgICBwYXNzCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3RCYXR0ZXJ5TWVhc3VyZW1lbnRVc2Ioc2VsZik6Ci0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmRldmljZS5idWlsZF92ZXJzaW9uX3NkaywKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9MjIpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5fQ2xlYXJQb3dlckRhdGEoKSwgVHJ1ZSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeScsICdzZXQnLCAnYWMnLCAnMCddLCBjaGVja19yZXR1cm49VHJ1ZSksIFtdKSwKLSAgICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5JywgJ3NldCcsICd1c2InLCAnMCddLCBjaGVja19yZXR1cm49VHJ1ZSksCi0gICAgICAgICAgIFtdKSwKLSAgICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgRmFsc2UpLAotICAgICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgWydkdW1wc3lzJywgJ2JhdHRlcnknLCAncmVzZXQnXSwgY2hlY2tfcmV0dXJuPVRydWUpLCBbXSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldENoYXJnaW5nKCksIEZhbHNlKSwKLSAgICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5J10sIGNoZWNrX3JldHVybj1UcnVlKSwgWydVUERBVEVTIFNUT1BQRUQnXSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldENoYXJnaW5nKCksIFRydWUpKToKLSAgICAgICAgd2l0aCBzZWxmLmJhdHRlcnkuQmF0dGVyeU1lYXN1cmVtZW50KCk6Ci0gICAgICAgICAgcGFzcwotCi0KLWNsYXNzIEJhdHRlcnlVdGlsc0dldFBvd2VyRGF0YShCYXR0ZXJ5VXRpbHNUZXN0KToKLQotICBkZWYgdGVzdEdldFBvd2VyRGF0YShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5c3RhdHMnLCAnLWMnXSwKLSAgICAgICAgICAgIGNoZWNrX3JldHVybj1UcnVlLCBsYXJnZV9vdXRwdXQ9VHJ1ZSksCi0gICAgICAgICBfRFVNUFNZU19PVVRQVVQpKToKLSAgICAgIGRhdGEgPSBzZWxmLmJhdHRlcnkuR2V0UG93ZXJEYXRhKCkKLSAgICAgIGNoZWNrID0gewotICAgICAgICAnc3lzdGVtX3RvdGFsJzogMjAwMC4wLAotICAgICAgICAncGVyX3BhY2thZ2UnOiB7Ci0gICAgICAgICAgJ3Rlc3RfcGFja2FnZTEnOiB7J3VpZCc6ICcxMDAwJywgJ2RhdGEnOiBbMS4wXX0sCi0gICAgICAgICAgJ3Rlc3RfcGFja2FnZTInOiB7J3VpZCc6ICcxMDAxJywgJ2RhdGEnOiBbMi4wXX0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBjaGVjaykKLQotICBkZWYgdGVzdEdldFBvd2VyRGF0YV9wYWNrYWdlQ29sbGlzaW9uU2FtZShzZWxmKToKLSAgICBzZWxmLmJhdHRlcnkuX2NhY2hlWyd1aWRzJ10gPSB7J3Rlc3RfcGFja2FnZTEnOiAnMTAwMCd9Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydkdW1wc3lzJywgJ2JhdHRlcnlzdGF0cycsICctYyddLAotICAgICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUsIGxhcmdlX291dHB1dD1UcnVlKSwKLSAgICAgICAgX0RVTVBTWVNfT1VUUFVUKToKLSAgICAgIGRhdGEgPSBzZWxmLmJhdHRlcnkuR2V0UG93ZXJEYXRhKCkKLSAgICAgIGNoZWNrID0gewotICAgICAgICAnc3lzdGVtX3RvdGFsJzogMjAwMC4wLAotICAgICAgICAncGVyX3BhY2thZ2UnOiB7Ci0gICAgICAgICAgJ3Rlc3RfcGFja2FnZTEnOiB7J3VpZCc6ICcxMDAwJywgJ2RhdGEnOiBbMS4wXX0sCi0gICAgICAgICAgJ3Rlc3RfcGFja2FnZTInOiB7J3VpZCc6ICcxMDAxJywgJ2RhdGEnOiBbMi4wXX0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBjaGVjaykKLQotICBkZWYgdGVzdEdldFBvd2VyRGF0YV9wYWNrYWdlQ29sbGlzaW9uRGlmZmVyZW50KHNlbGYpOgotICAgIHNlbGYuYmF0dGVyeS5fY2FjaGVbJ3VpZHMnXSA9IHsndGVzdF9wYWNrYWdlMSc6ICcxJ30KLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeXN0YXRzJywgJy1jJ10sCi0gICAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUpLAotICAgICAgICBfRFVNUFNZU19PVVRQVVQpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICAgIHNlbGYuYmF0dGVyeS5HZXRQb3dlckRhdGEoKQotCi0gIGRlZiB0ZXN0R2V0UG93ZXJEYXRhX2NhY2hlQ2xlYXJlZChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5c3RhdHMnLCAnLWMnXSwKLSAgICAgICAgICAgIGNoZWNrX3JldHVybj1UcnVlLCBsYXJnZV9vdXRwdXQ9VHJ1ZSksCi0gICAgICAgICBfRFVNUFNZU19PVVRQVVQpKToKLSAgICAgIHNlbGYuYmF0dGVyeS5fY2FjaGUuY2xlYXIoKQotICAgICAgZGF0YSA9IHNlbGYuYmF0dGVyeS5HZXRQb3dlckRhdGEoKQotICAgICAgY2hlY2sgPSB7Ci0gICAgICAgICdzeXN0ZW1fdG90YWwnOiAyMDAwLjAsCi0gICAgICAgICdwZXJfcGFja2FnZSc6IHsKLSAgICAgICAgICAndGVzdF9wYWNrYWdlMSc6IHsndWlkJzogJzEwMDAnLCAnZGF0YSc6IFsxLjBdfSwKLSAgICAgICAgICAndGVzdF9wYWNrYWdlMic6IHsndWlkJzogJzEwMDEnLCAnZGF0YSc6IFsyLjBdfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGNoZWNrKQotCi0KLWNsYXNzIEJhdHRlcnlVdGlsc0NoYXJnZURldmljZShCYXR0ZXJ5VXRpbHNUZXN0KToKLQotICBAbW9jay5wYXRjaCgndGltZS5zbGVlcCcsIG1vY2suTW9jaygpKQotICBkZWYgdGVzdENoYXJnZURldmljZVRvTGV2ZWxfcGFzcyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5TZXRDaGFyZ2luZyhUcnVlKSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J2xldmVsJzogJzUwJ30pLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0QmF0dGVyeUluZm8oKSwgeydsZXZlbCc6ICcxMDAnfSkpOgotICAgICAgc2VsZi5iYXR0ZXJ5LkNoYXJnZURldmljZVRvTGV2ZWwoOTUpCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3RDaGFyZ2VEZXZpY2VUb0xldmVsX2ZhaWx1cmVTYW1lKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LlNldENoYXJnaW5nKFRydWUpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldEJhdHRlcnlJbmZvKCksIHsnbGV2ZWwnOiAnNTAnfSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J2xldmVsJzogJzUwJ30pLAotCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J2xldmVsJzogJzUwJ30pKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5EZXZpY2VDaGFyZ2luZ0Vycm9yKToKLSAgICAgICAgb2xkX21heCA9IGJhdHRlcnlfdXRpbHMuX01BWF9DSEFSR0VfRVJST1IKLSAgICAgICAgdHJ5OgotICAgICAgICAgIGJhdHRlcnlfdXRpbHMuX01BWF9DSEFSR0VfRVJST1IgPSAyCi0gICAgICAgICAgc2VsZi5iYXR0ZXJ5LkNoYXJnZURldmljZVRvTGV2ZWwoOTUpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgYmF0dGVyeV91dGlscy5fTUFYX0NIQVJHRV9FUlJPUiA9IG9sZF9tYXgKLQotICBAbW9jay5wYXRjaCgndGltZS5zbGVlcCcsIG1vY2suTW9jaygpKQotICBkZWYgdGVzdENoYXJnZURldmljZVRvTGV2ZWxfZmFpbHVyZURpc2NoYXJnZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5TZXRDaGFyZ2luZyhUcnVlKSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J2xldmVsJzogJzUwJ30pLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0QmF0dGVyeUluZm8oKSwgeydsZXZlbCc6ICc0OSd9KSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldEJhdHRlcnlJbmZvKCksIHsnbGV2ZWwnOiAnNDgnfSkpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkRldmljZUNoYXJnaW5nRXJyb3IpOgotICAgICAgICBvbGRfbWF4ID0gYmF0dGVyeV91dGlscy5fTUFYX0NIQVJHRV9FUlJPUgotICAgICAgICB0cnk6Ci0gICAgICAgICAgYmF0dGVyeV91dGlscy5fTUFYX0NIQVJHRV9FUlJPUiA9IDIKLSAgICAgICAgICBzZWxmLmJhdHRlcnkuQ2hhcmdlRGV2aWNlVG9MZXZlbCg5NSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICBiYXR0ZXJ5X3V0aWxzLl9NQVhfQ0hBUkdFX0VSUk9SID0gb2xkX21heAotCi0KLWNsYXNzIEJhdHRlcnlVdGlsc0Rpc2NoYXJnZURldmljZShCYXR0ZXJ5VXRpbHNUZXN0KToKLQotICBAbW9jay5wYXRjaCgndGltZS5zbGVlcCcsIG1vY2suTW9jaygpKQotICBkZWYgdGVzdERpc2NoYXJnZURldmljZV9leGFjdChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J2xldmVsJzogJzEwMCd9KSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5Ll9IYXJkd2FyZVNldENoYXJnaW5nKEZhbHNlKSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5fSGFyZHdhcmVTZXRDaGFyZ2luZyhUcnVlKSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J2xldmVsJzogJzk5J30pKToKLSAgICAgIHNlbGYuYmF0dGVyeS5fRGlzY2hhcmdlRGV2aWNlKDEpCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3REaXNjaGFyZ2VEZXZpY2Vfb3ZlcihzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J2xldmVsJzogJzEwMCd9KSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5Ll9IYXJkd2FyZVNldENoYXJnaW5nKEZhbHNlKSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5fSGFyZHdhcmVTZXRDaGFyZ2luZyhUcnVlKSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J2xldmVsJzogJzUwJ30pKToKLSAgICAgIHNlbGYuYmF0dGVyeS5fRGlzY2hhcmdlRGV2aWNlKDEpCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3REaXNjaGFyZ2VEZXZpY2VfdGFrZXNsb25nKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldEJhdHRlcnlJbmZvKCksIHsnbGV2ZWwnOiAnMTAwJ30pLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuX0hhcmR3YXJlU2V0Q2hhcmdpbmcoRmFsc2UpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5Ll9IYXJkd2FyZVNldENoYXJnaW5nKFRydWUpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldEJhdHRlcnlJbmZvKCksIHsnbGV2ZWwnOiAnMTAwJ30pLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuX0hhcmR3YXJlU2V0Q2hhcmdpbmcoRmFsc2UpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5Ll9IYXJkd2FyZVNldENoYXJnaW5nKFRydWUpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldEJhdHRlcnlJbmZvKCksIHsnbGV2ZWwnOiAnOTknfSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5fSGFyZHdhcmVTZXRDaGFyZ2luZyhGYWxzZSkpLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuX0hhcmR3YXJlU2V0Q2hhcmdpbmcoVHJ1ZSkpLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0QmF0dGVyeUluZm8oKSwgeydsZXZlbCc6ICc5OCd9KSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5Ll9IYXJkd2FyZVNldENoYXJnaW5nKEZhbHNlKSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5fSGFyZHdhcmVTZXRDaGFyZ2luZyhUcnVlKSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J2xldmVsJzogJzk3J30pKToKLSAgICAgIHNlbGYuYmF0dGVyeS5fRGlzY2hhcmdlRGV2aWNlKDMpCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3REaXNjaGFyZ2VEZXZpY2VfZGlzY2hhcmdlVG9vQ2xvc2Uoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0QmF0dGVyeUluZm8oKSwgeydsZXZlbCc6ICcxMDAnfSkpOgotICAgICAgc2VsZi5iYXR0ZXJ5Ll9EaXNjaGFyZ2VEZXZpY2UoOTkpCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3REaXNjaGFyZ2VEZXZpY2VfcGVyY2VudGFnZU91dE9mQm91bmRzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldEJhdHRlcnlJbmZvKCksIHsnbGV2ZWwnOiAnMTAwJ30pKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgIHNlbGYuYmF0dGVyeS5fRGlzY2hhcmdlRGV2aWNlKDEwMCkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J2xldmVsJzogJzEwMCd9KSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICBzZWxmLmJhdHRlcnkuX0Rpc2NoYXJnZURldmljZSgwKQotCi0KLWNsYXNzIEJhdHRlcnlVdGlsc0dldEJhdHRlcnlJbmZvVGVzdChCYXR0ZXJ5VXRpbHNUZXN0KToKLQotICBkZWYgdGVzdEdldEJhdHRlcnlJbmZvX25vcm1hbChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5J10sIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgWwotICAgICAgICAgICdDdXJyZW50IEJhdHRlcnkgU2VydmljZSBzdGF0ZTonLAotICAgICAgICAgICcgIEFDIHBvd2VyZWQ6IGZhbHNlJywKLSAgICAgICAgICAnICBVU0IgcG93ZXJlZDogdHJ1ZScsCi0gICAgICAgICAgJyAgbGV2ZWw6IDEwMCcsCi0gICAgICAgICAgJyAgdGVtcGVyYXR1cmU6IDMyMScsCi0gICAgICAgIF0pKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgIHsKLSAgICAgICAgICAgICdBQyBwb3dlcmVkJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdVU0IgcG93ZXJlZCc6ICd0cnVlJywKLSAgICAgICAgICAgICdsZXZlbCc6ICcxMDAnLAotICAgICAgICAgICAgJ3RlbXBlcmF0dXJlJzogJzMyMScsCi0gICAgICAgICAgfSwKLSAgICAgICAgICBzZWxmLmJhdHRlcnkuR2V0QmF0dGVyeUluZm8oKSkKLQotICBkZWYgdGVzdEdldEJhdHRlcnlJbmZvX25vdGhpbmcoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeSddLCBjaGVja19yZXR1cm49VHJ1ZSksIFtdKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscyh7fSwgc2VsZi5iYXR0ZXJ5LkdldEJhdHRlcnlJbmZvKCkpCi0KLQotY2xhc3MgQmF0dGVyeVV0aWxzR2V0Q2hhcmdpbmdUZXN0KEJhdHRlcnlVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0R2V0Q2hhcmdpbmdfdXNiKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J1VTQiBwb3dlcmVkJzogJ3RydWUnfSk6Ci0gICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5iYXR0ZXJ5LkdldENoYXJnaW5nKCkpCi0KLSAgZGVmIHRlc3RHZXRDaGFyZ2luZ191c2JGYWxzZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmJhdHRlcnkuR2V0QmF0dGVyeUluZm8oKSwgeydVU0IgcG93ZXJlZCc6ICdmYWxzZSd9KToKLSAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5iYXR0ZXJ5LkdldENoYXJnaW5nKCkpCi0KLSAgZGVmIHRlc3RHZXRDaGFyZ2luZ19hYyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmJhdHRlcnkuR2V0QmF0dGVyeUluZm8oKSwgeydBQyBwb3dlcmVkJzogJ3RydWUnfSk6Ci0gICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5iYXR0ZXJ5LkdldENoYXJnaW5nKCkpCi0KLSAgZGVmIHRlc3RHZXRDaGFyZ2luZ193aXJlbGVzcyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmJhdHRlcnkuR2V0QmF0dGVyeUluZm8oKSwgeydXaXJlbGVzcyBwb3dlcmVkJzogJ3RydWUnfSk6Ci0gICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5iYXR0ZXJ5LkdldENoYXJnaW5nKCkpCi0KLSAgZGVmIHRlc3RHZXRDaGFyZ2luZ191bmtub3duKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J2xldmVsJzogJzQyJ30pOgotICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSkKLQotCi1jbGFzcyBCYXR0ZXJ5VXRpbHNHZXROZXR3b3JrRGF0YVRlc3QoQmF0dGVyeVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RHZXROZXR3b3JrRGF0YV9ub0RhdGFVc2FnZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5c3RhdHMnLCAnLWMnXSwKLSAgICAgICAgICAgIGNoZWNrX3JldHVybj1UcnVlLCBsYXJnZV9vdXRwdXQ9VHJ1ZSksCi0gICAgICAgICBfRFVNUFNZU19PVVRQVVQpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SZWFkRmlsZSgnL3Byb2MvdWlkX3N0YXQvMTAwMC90Y3Bfc25kJyksCi0gICAgICAgICAgICBzZWxmLlNoZWxsRXJyb3IoKSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJlYWRGaWxlKCcvcHJvYy91aWRfc3RhdC8xMDAwL3RjcF9yY3YnKSwKLSAgICAgICAgICAgIHNlbGYuU2hlbGxFcnJvcigpKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmJhdHRlcnkuR2V0TmV0d29ya0RhdGEoJ3Rlc3RfcGFja2FnZTEnKSwgKDAsIDApKQotCi0gIGRlZiB0ZXN0R2V0TmV0d29ya0RhdGFfYmFkUGFja2FnZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeXN0YXRzJywgJy1jJ10sCi0gICAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUpLAotICAgICAgICBfRFVNUFNZU19PVVRQVVQpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmJhdHRlcnkuR2V0TmV0d29ya0RhdGEoJ2FzZGYnKSwgTm9uZSkKLQotICBkZWYgdGVzdEdldE5ldHdvcmtEYXRhX3BhY2thZ2VOb3RDYWNoZWQoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeXN0YXRzJywgJy1jJ10sCi0gICAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUpLAotICAgICAgICAgX0RVTVBTWVNfT1VUUFVUKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUmVhZEZpbGUoJy9wcm9jL3VpZF9zdGF0LzEwMDAvdGNwX3NuZCcpLCAxKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUmVhZEZpbGUoJy9wcm9jL3VpZF9zdGF0LzEwMDAvdGNwX3JjdicpLCAyKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYmF0dGVyeS5HZXROZXR3b3JrRGF0YSgndGVzdF9wYWNrYWdlMScpLCAoMSwgMikpCi0KLSAgZGVmIHRlc3RHZXROZXR3b3JrRGF0YV9wYWNrYWdlQ2FjaGVkKHNlbGYpOgotICAgIHNlbGYuYmF0dGVyeS5fY2FjaGVbJ3VpZHMnXSA9IHsndGVzdF9wYWNrYWdlMSc6ICcxMDAwJ30KLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJlYWRGaWxlKCcvcHJvYy91aWRfc3RhdC8xMDAwL3RjcF9zbmQnKSwgMSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJlYWRGaWxlKCcvcHJvYy91aWRfc3RhdC8xMDAwL3RjcF9yY3YnKSwgMikpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmJhdHRlcnkuR2V0TmV0d29ya0RhdGEoJ3Rlc3RfcGFja2FnZTEnKSwgKDEsIDIpKQotCi0gIGRlZiB0ZXN0R2V0TmV0d29ya0RhdGFfY2xlYXJlZENhY2hlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydkdW1wc3lzJywgJ2JhdHRlcnlzdGF0cycsICctYyddLAotICAgICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUsIGxhcmdlX291dHB1dD1UcnVlKSwKLSAgICAgICAgIF9EVU1QU1lTX09VVFBVVCksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJlYWRGaWxlKCcvcHJvYy91aWRfc3RhdC8xMDAwL3RjcF9zbmQnKSwgMSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJlYWRGaWxlKCcvcHJvYy91aWRfc3RhdC8xMDAwL3RjcF9yY3YnKSwgMikpOgotICAgICAgc2VsZi5iYXR0ZXJ5Ll9jYWNoZS5jbGVhcigpCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYmF0dGVyeS5HZXROZXR3b3JrRGF0YSgndGVzdF9wYWNrYWdlMScpLCAoMSwgMikpCi0KLQotY2xhc3MgQmF0dGVyeVV0aWxzTGV0QmF0dGVyeUNvb2xUb1RlbXBlcmF0dXJlVGVzdChCYXR0ZXJ5VXRpbHNUZXN0KToKLQotICBAbW9jay5wYXRjaCgndGltZS5zbGVlcCcsIG1vY2suTW9jaygpKQotICBkZWYgdGVzdExldEJhdHRlcnlDb29sVG9UZW1wZXJhdHVyZV9zdGFydFVuZGVyKHNlbGYpOgotICAgIHNlbGYuYmF0dGVyeS5fY2FjaGVbJ3Byb2ZpbGUnXSA9IHNlbGYuX05FWFVTXzYKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5FbmFibGVCYXR0ZXJ5VXBkYXRlcygpLCBbXSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J3RlbXBlcmF0dXJlJzogJzUwMCd9KSk6Ci0gICAgICBzZWxmLmJhdHRlcnkuTGV0QmF0dGVyeUNvb2xUb1RlbXBlcmF0dXJlKDYwMCkKLQotICBAbW9jay5wYXRjaCgndGltZS5zbGVlcCcsIG1vY2suTW9jaygpKQotICBkZWYgdGVzdExldEJhdHRlcnlDb29sVG9UZW1wZXJhdHVyZV9zdGFydE92ZXIoc2VsZik6Ci0gICAgc2VsZi5iYXR0ZXJ5Ll9jYWNoZVsncHJvZmlsZSddID0gc2VsZi5fTkVYVVNfNgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkVuYWJsZUJhdHRlcnlVcGRhdGVzKCksIFtdKSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldEJhdHRlcnlJbmZvKCksIHsndGVtcGVyYXR1cmUnOiAnNTAwJ30pLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0QmF0dGVyeUluZm8oKSwgeyd0ZW1wZXJhdHVyZSc6ICc0MDAnfSkpOgotICAgICAgc2VsZi5iYXR0ZXJ5LkxldEJhdHRlcnlDb29sVG9UZW1wZXJhdHVyZSg0MDApCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3RMZXRCYXR0ZXJ5Q29vbFRvVGVtcGVyYXR1cmVfbmV4dXM1SG90KHNlbGYpOgotICAgIHNlbGYuYmF0dGVyeS5fY2FjaGVbJ3Byb2ZpbGUnXSA9IHNlbGYuX05FWFVTXzUKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5FbmFibGVCYXR0ZXJ5VXBkYXRlcygpLCBbXSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbygpLCB7J3RlbXBlcmF0dXJlJzogJzUwMCd9KSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5Ll9EaXNjaGFyZ2VEZXZpY2UoMSksIFtdKSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldEJhdHRlcnlJbmZvKCksIHsndGVtcGVyYXR1cmUnOiAnNDAwJ30pKToKLSAgICAgIHNlbGYuYmF0dGVyeS5MZXRCYXR0ZXJ5Q29vbFRvVGVtcGVyYXR1cmUoNDAwKQotCi0gIEBtb2NrLnBhdGNoKCd0aW1lLnNsZWVwJywgbW9jay5Nb2NrKCkpCi0gIGRlZiB0ZXN0TGV0QmF0dGVyeUNvb2xUb1RlbXBlcmF0dXJlX25leHVzNUNvb2woc2VsZik6Ci0gICAgc2VsZi5iYXR0ZXJ5Ll9jYWNoZVsncHJvZmlsZSddID0gc2VsZi5fTkVYVVNfNQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkVuYWJsZUJhdHRlcnlVcGRhdGVzKCksIFtdKSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldEJhdHRlcnlJbmZvKCksIHsndGVtcGVyYXR1cmUnOiAnNDAwJ30pKToKLSAgICAgIHNlbGYuYmF0dGVyeS5MZXRCYXR0ZXJ5Q29vbFRvVGVtcGVyYXR1cmUoNDAwKQotCi0KLWNsYXNzIEJhdHRlcnlVdGlsc1N1cHBvcnRzRnVlbEdhdWdlVGVzdChCYXR0ZXJ5VXRpbHNUZXN0KToKLQotICBkZWYgdGVzdFN1cHBvcnRzRnVlbEdhdWdlX2ZhbHNlKHNlbGYpOgotICAgIHNlbGYuYmF0dGVyeS5fY2FjaGVbJ3Byb2ZpbGUnXSA9IHNlbGYuX05FWFVTXzUKLSAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuYmF0dGVyeS5TdXBwb3J0c0Z1ZWxHYXVnZSgpKQotCi0gIGRlZiB0ZXN0U3VwcG9ydHNGdWVsR2F1Z2VfdHJ1ZU1heChzZWxmKToKLSAgICBzZWxmLmJhdHRlcnkuX2NhY2hlWydwcm9maWxlJ10gPSBzZWxmLl9ORVhVU182Ci0gICAgIyBUT0RPKHJuZXBoZXcpOiBDaGFuZ2UgdGhpcyB0byBhc3NlcnRUcnVlIHdoZW4gd2UgaGF2ZSBzdXBwb3J0IGZvcgotICAgICMgZGlzYWJsaW5nIGhhcmR3YXJlIGNoYXJnaW5nIG9uIG5leHVzIDYuCi0gICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmJhdHRlcnkuU3VwcG9ydHNGdWVsR2F1Z2UoKSkKLQotICBkZWYgdGVzdFN1cHBvcnRzRnVlbEdhdWdlX3RydWVEUyhzZWxmKToKLSAgICBzZWxmLmJhdHRlcnkuX2NhY2hlWydwcm9maWxlJ10gPSBzZWxmLl9ORVhVU18xMAotICAgICMgVE9ETyhybmVwaGV3KTogQ2hhbmdlIHRoaXMgdG8gYXNzZXJ0VHJ1ZSB3aGVuIHdlIGhhdmUgc3VwcG9ydCBmb3IKLSAgICAjIGRpc2FibGluZyBoYXJkd2FyZSBjaGFyZ2luZyBvbiBuZXh1cyAxMC4KLSAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuYmF0dGVyeS5TdXBwb3J0c0Z1ZWxHYXVnZSgpKQotCi0KLWNsYXNzIEJhdHRlcnlVdGlsc0dldEZ1ZWxHYXVnZUNoYXJnZUNvdW50ZXJUZXN0KEJhdHRlcnlVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0R2V0RnVlbEdhdWdlQ2hhcmdlQ291bnRlcl9ub0Z1ZWxHYXVnZShzZWxmKToKLSAgICBzZWxmLmJhdHRlcnkuX2NhY2hlWydwcm9maWxlJ10gPSBzZWxmLl9ORVhVU181Ci0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICBzZWxmLmJhdHRlcnkuR2V0RnVlbEdhdWdlQ2hhcmdlQ291bnRlcigpCi0KLSAgZGVmIHRlc3RHZXRGdWVsR2F1Z2VDaGFyZ2VDb3VudGVyX2Z1ZWxHYXVnZVByZXNlbnQoc2VsZik6Ci0gICAgc2VsZi5iYXR0ZXJ5Ll9jYWNoZVsncHJvZmlsZSddID0gc2VsZi5fTkVYVVNfNgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LlN1cHBvcnRzRnVlbEdhdWdlKCksIFRydWUpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SZWFkRmlsZShtb2NrLkFOWSksICcxMjMnKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYmF0dGVyeS5HZXRGdWVsR2F1Z2VDaGFyZ2VDb3VudGVyKCksIDEyMykKLQotCi1jbGFzcyBCYXR0ZXJ5VXRpbHNTZXRDaGFyZ2luZyhCYXR0ZXJ5VXRpbHNUZXN0KToKLQotICBAbW9jay5wYXRjaCgndGltZS5zbGVlcCcsIG1vY2suTW9jaygpKQotICBkZWYgdGVzdFNldENoYXJnaW5nX3NvZnR3YXJlU2V0VHJ1ZShzZWxmKToKLSAgICBzZWxmLmJhdHRlcnkuX2NhY2hlWydwcm9maWxlJ10gPSBzZWxmLl9ORVhVU182Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgRmFsc2UpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeScsICdyZXNldCddLCBjaGVja19yZXR1cm49VHJ1ZSksIFtdKSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldENoYXJnaW5nKCksIEZhbHNlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydkdW1wc3lzJywgJ2JhdHRlcnknXSwgY2hlY2tfcmV0dXJuPVRydWUpLCBbJ1VQREFURVMgU1RPUFBFRCddKSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5LkdldENoYXJnaW5nKCksIFRydWUpKToKLSAgICAgIHNlbGYuYmF0dGVyeS5TZXRDaGFyZ2luZyhUcnVlKQotCi0gIEBtb2NrLnBhdGNoKCd0aW1lLnNsZWVwJywgbW9jay5Nb2NrKCkpCi0gIGRlZiB0ZXN0U2V0Q2hhcmdpbmdfc29mdHdhcmVTZXRGYWxzZShzZWxmKToKLSAgICBzZWxmLmJhdHRlcnkuX2NhY2hlWydwcm9maWxlJ10gPSBzZWxmLl9ORVhVU182Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgVHJ1ZSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5fQ2xlYXJQb3dlckRhdGEoKSwgVHJ1ZSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5JywgJ3NldCcsICdhYycsICcwJ10sIGNoZWNrX3JldHVybj1UcnVlKSwgW10pLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeScsICdzZXQnLCAndXNiJywgJzAnXSwgY2hlY2tfcmV0dXJuPVRydWUpLCBbXSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRDaGFyZ2luZygpLCBGYWxzZSkpOgotICAgICAgc2VsZi5iYXR0ZXJ5LlNldENoYXJnaW5nKEZhbHNlKQotCi0gIEBtb2NrLnBhdGNoKCd0aW1lLnNsZWVwJywgbW9jay5Nb2NrKCkpCi0gIGRlZiB0ZXN0U2V0Q2hhcmdpbmdfaGFyZHdhcmVTZXRUcnVlKHNlbGYpOgotICAgIHNlbGYuYmF0dGVyeS5fY2FjaGVbJ3Byb2ZpbGUnXSA9IHNlbGYuX05FWFVTXzUKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRDaGFyZ2luZygpLCBGYWxzZSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5fSGFyZHdhcmVTZXRDaGFyZ2luZyhUcnVlKSkpOgotICAgICAgc2VsZi5iYXR0ZXJ5LlNldENoYXJnaW5nKFRydWUpCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3RTZXRDaGFyZ2luZ19oYXJkd2FyZVNldEZhbHNlKHNlbGYpOgotICAgIHNlbGYuYmF0dGVyeS5fY2FjaGVbJ3Byb2ZpbGUnXSA9IHNlbGYuX05FWFVTXzUKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRDaGFyZ2luZygpLCBUcnVlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5Ll9DbGVhclBvd2VyRGF0YSgpLCBUcnVlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5iYXR0ZXJ5Ll9IYXJkd2FyZVNldENoYXJnaW5nKEZhbHNlKSkpOgotICAgICAgc2VsZi5iYXR0ZXJ5LlNldENoYXJnaW5nKEZhbHNlKQotCi0gIGRlZiB0ZXN0U2V0Q2hhcmdpbmdfZXhwZWN0ZWRTdGF0ZUFscmVhZHlUcnVlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgVHJ1ZSkpOgotICAgICAgc2VsZi5iYXR0ZXJ5LlNldENoYXJnaW5nKFRydWUpCi0KLSAgZGVmIHRlc3RTZXRDaGFyZ2luZ19leHBlY3RlZFN0YXRlQWxyZWFkeUZhbHNlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgRmFsc2UpKToKLSAgICAgIHNlbGYuYmF0dGVyeS5TZXRDaGFyZ2luZyhGYWxzZSkKLQotCi1jbGFzcyBCYXR0ZXJ5VXRpbHNQb3dlck1lYXN1cmVtZW50KEJhdHRlcnlVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0UG93ZXJNZWFzdXJlbWVudF9oYXJkd2FyZShzZWxmKToKLSAgICBzZWxmLmJhdHRlcnkuX2NhY2hlWydwcm9maWxlJ10gPSBzZWxmLl9ORVhVU181Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgVHJ1ZSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5fQ2xlYXJQb3dlckRhdGEoKSwgVHJ1ZSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5fSGFyZHdhcmVTZXRDaGFyZ2luZyhGYWxzZSkpLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgRmFsc2UpLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuX0hhcmR3YXJlU2V0Q2hhcmdpbmcoVHJ1ZSkpKToKLSAgICAgIHdpdGggc2VsZi5iYXR0ZXJ5LlBvd2VyTWVhc3VyZW1lbnQoKToKLSAgICAgICAgcGFzcwotCi0gIEBtb2NrLnBhdGNoKCd0aW1lLnNsZWVwJywgbW9jay5Nb2NrKCkpCi0gIGRlZiB0ZXN0UG93ZXJNZWFzdXJlbWVudF9zb2Z0d2FyZShzZWxmKToKLSAgICBzZWxmLmJhdHRlcnkuX2NhY2hlWydwcm9maWxlJ10gPSBzZWxmLl9ORVhVU182Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgVHJ1ZSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5fQ2xlYXJQb3dlckRhdGEoKSwgVHJ1ZSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5JywgJ3NldCcsICdhYycsICcwJ10sIGNoZWNrX3JldHVybj1UcnVlKSwgW10pLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeScsICdzZXQnLCAndXNiJywgJzAnXSwgY2hlY2tfcmV0dXJuPVRydWUpLCBbXSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRDaGFyZ2luZygpLCBGYWxzZSksCi0gICAgICAgIChzZWxmLmNhbGwuYmF0dGVyeS5HZXRDaGFyZ2luZygpLCBGYWxzZSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5JywgJ3Jlc2V0J10sIGNoZWNrX3JldHVybj1UcnVlKSwgW10pLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgRmFsc2UpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeSddLCBjaGVja19yZXR1cm49VHJ1ZSksIFsnVVBEQVRFUyBTVE9QUEVEJ10pLAotICAgICAgICAoc2VsZi5jYWxsLmJhdHRlcnkuR2V0Q2hhcmdpbmcoKSwgVHJ1ZSkpOgotICAgICAgd2l0aCBzZWxmLmJhdHRlcnkuUG93ZXJNZWFzdXJlbWVudCgpOgotICAgICAgICBwYXNzCi0KLQotY2xhc3MgQmF0dGVyeVV0aWxzRGlzY292ZXJEZXZpY2VQcm9maWxlKEJhdHRlcnlVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0RGlzY292ZXJEZXZpY2VQcm9maWxlX2tub3duKHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UucHJvZHVjdF9tb2RlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9J05leHVzIDQnKToKLSAgICAgIHNlbGYuYmF0dGVyeS5fRGlzY292ZXJEZXZpY2VQcm9maWxlKCkKLSAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKHNlbGYuYmF0dGVyeS5fY2FjaGVbJ3Byb2ZpbGUnXVsnbmFtZSddLCBbIk5leHVzIDQiXSkKLQotICBkZWYgdGVzdERpc2NvdmVyRGV2aWNlUHJvZmlsZV91bmtub3duKHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UucHJvZHVjdF9tb2RlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9J090aGVyJyk6Ci0gICAgICBzZWxmLmJhdHRlcnkuX0Rpc2NvdmVyRGV2aWNlUHJvZmlsZSgpCi0gICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChzZWxmLmJhdHRlcnkuX2NhY2hlWydwcm9maWxlJ11bJ25hbWUnXSwgW10pCi0KLQotY2xhc3MgQmF0dGVyeVV0aWxzQ2xlYXJQb3dlckRhdGEoQmF0dGVyeVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RDbGVhclBvd2VyRGF0YV9wcmVMKHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPTIwKToKLSAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5iYXR0ZXJ5Ll9DbGVhclBvd2VyRGF0YSgpKQotCi0gIGRlZiB0ZXN0Q2xlYXJQb3dlckRhdGFfY2xlYXJlZEwoc2VsZik6Ci0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmRldmljZS5idWlsZF92ZXJzaW9uX3NkaywKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9MjIpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgWydkdW1wc3lzJywgJ2JhdHRlcnknLCAnc2V0JywgJ3VzYicsICcxJ10sIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgICAgW10pLAotICAgICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgWydkdW1wc3lzJywgJ2JhdHRlcnknLCAnc2V0JywgJ2FjJywgJzEnXSwgY2hlY2tfcmV0dXJuPVRydWUpLCBbXSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeXN0YXRzJywgJy0tcmVzZXQnXSwgY2hlY2tfcmV0dXJuPVRydWUpLCBbXSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeXN0YXRzJywgJy0tY2hhcmdlZCcsICctYyddLAotICAgICAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUpLCBbXSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeScsICdyZXNldCddLCBjaGVja19yZXR1cm49VHJ1ZSksIFtdKSk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmJhdHRlcnkuX0NsZWFyUG93ZXJEYXRhKCkpCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3RDbGVhclBvd2VyRGF0YV9ub3RDbGVhcmVkTChzZWxmKToKLSAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChzZWxmLmNhbGwuZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT0yMik6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeScsICdzZXQnLCAndXNiJywgJzEnXSwgY2hlY2tfcmV0dXJuPVRydWUpLAotICAgICAgICAgICBbXSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeScsICdzZXQnLCAnYWMnLCAnMSddLCBjaGVja19yZXR1cm49VHJ1ZSksIFtdKSwKLSAgICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5c3RhdHMnLCAnLS1yZXNldCddLCBjaGVja19yZXR1cm49VHJ1ZSksIFtdKSwKLSAgICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5c3RhdHMnLCAnLS1jaGFyZ2VkJywgJy1jJ10sCi0gICAgICAgICAgICAgIGNoZWNrX3JldHVybj1UcnVlLCBsYXJnZV9vdXRwdXQ9VHJ1ZSksCi0gICAgICAgICAgICAgIFsnOSwxMDAwLGwscHdpLHVpZCwwLjAzMjcnXSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeXN0YXRzJywgJy0tcmVzZXQnXSwgY2hlY2tfcmV0dXJuPVRydWUpLCBbXSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeXN0YXRzJywgJy0tY2hhcmdlZCcsICctYyddLAotICAgICAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUpLAotICAgICAgICAgICAgICBbJzksMTAwMCxsLHB3aSx1aWQsMC4wMzI3J10pLAotICAgICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgWydkdW1wc3lzJywgJ2JhdHRlcnlzdGF0cycsICctLXJlc2V0J10sIGNoZWNrX3JldHVybj1UcnVlKSwgW10pLAotICAgICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgWydkdW1wc3lzJywgJ2JhdHRlcnlzdGF0cycsICctLWNoYXJnZWQnLCAnLWMnXSwKLSAgICAgICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUsIGxhcmdlX291dHB1dD1UcnVlKSwKLSAgICAgICAgICAgICAgWyc5LDEwMDAsbCxwd2ksdWlkLDAuMDMyNyddKSwKLSAgICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5c3RhdHMnLCAnLS1yZXNldCddLCBjaGVja19yZXR1cm49VHJ1ZSksIFtdKSwKLSAgICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5c3RhdHMnLCAnLS1jaGFyZ2VkJywgJy1jJ10sCi0gICAgICAgICAgICAgIGNoZWNrX3JldHVybj1UcnVlLCBsYXJnZV9vdXRwdXQ9VHJ1ZSksCi0gICAgICAgICAgICAgIFsnOSwxMDAwLGwscHdpLHVpZCwwLjAnXSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICBbJ2R1bXBzeXMnLCAnYmF0dGVyeScsICdyZXNldCddLCBjaGVja19yZXR1cm49VHJ1ZSksIFtdKSk6Ci0gICAgICAgIHNlbGYuYmF0dGVyeS5fQ2xlYXJQb3dlckRhdGEoKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKLSAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvY29uc3RhbnRzL19faW5pdF9fLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9jb25zdGFudHMvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYjIzZGYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9jb25zdGFudHMvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvY29uc3RhbnRzL2Nocm9tZS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvY29uc3RhbnRzL2Nocm9tZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZiZDk3Mi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2NvbnN0YW50cy9jaHJvbWUucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBjb2xsZWN0aW9ucwotCi1QYWNrYWdlSW5mbyA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoCi0gICAgJ1BhY2thZ2VJbmZvJywKLSAgICBbJ3BhY2thZ2UnLCAnYWN0aXZpdHknLCAnY21kbGluZV9maWxlJywgJ2RldnRvb2xzX3NvY2tldCddKQotCi1QQUNLQUdFX0lORk8gPSB7Ci0gICAgJ2Nocm9tZV9kb2N1bWVudCc6IFBhY2thZ2VJbmZvKAotICAgICAgICAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLmRvY3VtZW50JywKLSAgICAgICAgJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5kb2N1bWVudC5DaHJvbWVMYXVuY2hlckFjdGl2aXR5JywKLSAgICAgICAgJ2Nocm9tZS1jb21tYW5kLWxpbmUnLAotICAgICAgICAnY2hyb21lX2RldnRvb2xzX3JlbW90ZScpLAotICAgICdjaHJvbWUnOiBQYWNrYWdlSW5mbygKLSAgICAgICAgJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZScsCi0gICAgICAgICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsCi0gICAgICAgICdjaHJvbWUtY29tbWFuZC1saW5lJywKLSAgICAgICAgJ2Nocm9tZV9kZXZ0b29sc19yZW1vdGUnKSwKLSAgICAnY2hyb21lX2JldGEnOiBQYWNrYWdlSW5mbygKLSAgICAgICAgJ2NvbS5jaHJvbWUuYmV0YScsCi0gICAgICAgICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsCi0gICAgICAgICdjaHJvbWUtY29tbWFuZC1saW5lJywKLSAgICAgICAgJ2Nocm9tZV9kZXZ0b29sc19yZW1vdGUnKSwKLSAgICAnY2hyb21lX3N0YWJsZSc6IFBhY2thZ2VJbmZvKAotICAgICAgICAnY29tLmFuZHJvaWQuY2hyb21lJywKLSAgICAgICAgJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJywKLSAgICAgICAgJ2Nocm9tZS1jb21tYW5kLWxpbmUnLAotICAgICAgICAnY2hyb21lX2RldnRvb2xzX3JlbW90ZScpLAotICAgICdjaHJvbWVfZGV2JzogUGFja2FnZUluZm8oCi0gICAgICAgICdjb20uY2hyb21lLmRldicsCi0gICAgICAgICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsCi0gICAgICAgICdjaHJvbWUtY29tbWFuZC1saW5lJywKLSAgICAgICAgJ2Nocm9tZV9kZXZ0b29sc19yZW1vdGUnKSwKLSAgICAnY2hyb21lX2NhbmFyeSc6IFBhY2thZ2VJbmZvKAotICAgICAgICAnY29tLmNocm9tZS5jYW5hcnknLAotICAgICAgICAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLAotICAgICAgICAnY2hyb21lLWNvbW1hbmQtbGluZScsCi0gICAgICAgICdjaHJvbWVfZGV2dG9vbHNfcmVtb3RlJyksCi0gICAgJ2Nocm9taXVtJzogUGFja2FnZUluZm8oCi0gICAgICAgICdvcmcuY2hyb21pdW0uY2hyb21lJywKLSAgICAgICAgJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJywKLSAgICAgICAgJ2Nocm9tZS1jb21tYW5kLWxpbmUnLAotICAgICAgICAnY2hyb21lX2RldnRvb2xzX3JlbW90ZScpLAotICAgICdjb250ZW50X3NoZWxsJzogUGFja2FnZUluZm8oCi0gICAgICAgICdvcmcuY2hyb21pdW0uY29udGVudF9zaGVsbF9hcGsnLAotICAgICAgICAnLkNvbnRlbnRTaGVsbEFjdGl2aXR5JywKLSAgICAgICAgJ2NvbnRlbnQtc2hlbGwtY29tbWFuZC1saW5lJywKLSAgICAgICAgJ2NvbnRlbnRfc2hlbGxfZGV2dG9vbHNfcmVtb3RlJyksCi19CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2NvbnN0YW50cy9maWxlX3N5c3RlbS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvY29uc3RhbnRzL2ZpbGVfc3lzdGVtLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmZlYzYxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvY29uc3RhbnRzL2ZpbGVfc3lzdGVtLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLVRFU1RfRVhFQ1VUQUJMRV9ESVIgPSAnL2RhdGEvbG9jYWwvdG1wJwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9jb25zdGFudHMvd2ViYXBrLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9jb25zdGFudHMvd2ViYXBrLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTE3ZTcyLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvY29uc3RhbnRzL3dlYmFway5weQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1XRUJBUEtfTUFJTl9BQ1RJVklUWSA9ICdvcmcuY2hyb21pdW0ud2ViYXBrLnNoZWxsX2Fway5NYWluQWN0aXZpdHknCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvY3Jhc2hfaGFuZGxlci5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvY3Jhc2hfaGFuZGxlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NmYWJjZi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2NyYXNoX2hhbmRsZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLQotZnJvbSBkZXZpbCBpbXBvcnQgYmFzZV9lcnJvcgotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi0KLWxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWRlZiBSZXRyeU9uU3lzdGVtQ3Jhc2goZiwgZGV2aWNlLCByZXRyaWVzPTMpOgotICAiIiJSZXRyaWVzIHRoZSBnaXZlbiBmdW5jdGlvbiBvbiBhIGRldmljZSBjcmFzaC4KLQotICBJZiB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gZmFpbHMgd2l0aCBhIERldmljZVVucmVhY2hhYmxlRXJyb3IsIHRoaXMgd2lsbCB3YWl0Ci0gIGZvciB0aGUgZGV2aWNlIHRvIGNvbWUgYmFjayBvbmxpbmUsIHRoZW4gcmV0cnkgdGhlIGZ1bmN0aW9uLgotCi0gIE5vdGUgdGhhdCB0aGlzIHVzZXMgdGhlIHNhbWUgcmV0cnkgc2NoZW1lIGFzIHRpbWVvdXRfcmV0cnkuUnVuLgotCi0gIEFyZ3M6Ci0gICAgZjogYSB1bmFyeSBjYWxsYWJsZSB0aGF0IHRha2VzIGFuIGluc3RhbmNlIG9mIGRldmljZV91dGlscy5EZXZpY2VVdGlscy4KLSAgICBkZXZpY2U6IGFuIGluc3RhbmNlIG9mIGRldmljZV91dGlscy5EZXZpY2VVdGlscy4KLSAgICByZXRyaWVzOiB0aGUgbnVtYmVyIG9mIHJldHJpZXMuCi0gIFJldHVybnM6Ci0gICAgV2hhdGV2ZXIgZiByZXR1cm5zLgotICAiIiIKLSAgbnVtX3RyeSA9IDEKLSAgd2hpbGUgVHJ1ZToKLSAgICB0cnk6Ci0gICAgICByZXR1cm4gZihkZXZpY2UpCi0gICAgZXhjZXB0IGRldmljZV9lcnJvcnMuRGV2aWNlVW5yZWFjaGFibGVFcnJvcjoKLSAgICAgIGlmIG51bV90cnkgPiByZXRyaWVzOgotICAgICAgICBsb2dnZXIuZXJyb3IoJyVkIGNvbnNlY3V0aXZlIGRldmljZSBjcmFzaGVzLiBObyBsb25nZXIgcmV0cnlpbmcuJywKLSAgICAgICAgICAgICAgICAgICAgICBudW1fdHJ5KQotICAgICAgICByYWlzZQotICAgICAgdHJ5OgotICAgICAgICBsb2dnZXIud2FybmluZygnRGV2aWNlIGlzIHVucmVhY2hhYmxlLiBXYWl0aW5nIGZvciByZWNvdmVyeS4uLicpCi0gICAgICAgIGRldmljZS5XYWl0VW50aWxGdWxseUJvb3RlZCgpCi0gICAgICBleGNlcHQgYmFzZV9lcnJvci5CYXNlRXJyb3I6Ci0gICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0RldmljZSBuZXZlciByZWNvdmVyZWQuIFgoJykKLSAgICBudW1fdHJ5ICs9IDEKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvY3Jhc2hfaGFuZGxlcl9kZXZpY2V0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9jcmFzaF9oYW5kbGVyX2RldmljZXRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDYzNjUxMDQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9jcmFzaF9oYW5kbGVyX2RldmljZXRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLnBhdGguYXBwZW5kKAotICAgICAgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nLCAnLi4nLCApKSkKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBjcmFzaF9oYW5kbGVyCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9lcnJvcnMKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3V0aWxzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV90ZW1wX2ZpbGUKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3Rlc3RfY2FzZQotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgY21kX2hlbHBlcgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgcmVyYWlzZXJfdGhyZWFkCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCB0aW1lb3V0X3JldHJ5Ci0KLQotY2xhc3MgRGV2aWNlQ3Jhc2hUZXN0KGRldmljZV90ZXN0X2Nhc2UuRGV2aWNlVGVzdENhc2UpOgotCi0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzdXBlcihEZXZpY2VDcmFzaFRlc3QsIHNlbGYpLnNldFVwKCkKLSAgICBzZWxmLmRldmljZSA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscyhzZWxmLnNlcmlhbCkKLQotICBkZWYgdGVzdENyYXNoRHVyaW5nQ29tbWFuZChzZWxmKToKLSAgICBzZWxmLmRldmljZS5FbmFibGVSb290KCkKLSAgICB3aXRoIGRldmljZV90ZW1wX2ZpbGUuRGV2aWNlVGVtcEZpbGUoc2VsZi5kZXZpY2UuYWRiKSBhcyB0cmlnZ2VyX2ZpbGU6Ci0KLSAgICAgIHRyaWdnZXJfdGV4dCA9ICdoZWxsbyB3b3JsZCcKLQotICAgICAgZGVmIHZpY3RpbSgpOgotICAgICAgICB0cmlnZ2VyX2NtZCA9ICdlY2hvIC1uICVzID4gJXM7IHNsZWVwIDIwJyAlICgKLSAgICAgICAgICAgIGNtZF9oZWxwZXIuU2luZ2xlUXVvdGUodHJpZ2dlcl90ZXh0KSwKLSAgICAgICAgICAgIGNtZF9oZWxwZXIuU2luZ2xlUXVvdGUodHJpZ2dlcl9maWxlLm5hbWUpKQotICAgICAgICBjcmFzaF9oYW5kbGVyLlJldHJ5T25TeXN0ZW1DcmFzaCgKLSAgICAgICAgICAgIGxhbWJkYSBkOiBkLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgICB0cmlnZ2VyX2NtZCwgc2hlbGw9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUsIHJldHJpZXM9MSwKLSAgICAgICAgICAgICAgICBhc19yb290PVRydWUsIHRpbWVvdXQ9MTgwKSwKLSAgICAgICAgICAgIGRldmljZT1zZWxmLmRldmljZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgICB0cmlnZ2VyX3RleHQsCi0gICAgICAgICAgICBzZWxmLmRldmljZS5SZWFkRmlsZSh0cmlnZ2VyX2ZpbGUubmFtZSwgcmV0cmllcz0wKS5zdHJpcCgpKQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICBkZWYgY3Jhc2hlcigpOgotICAgICAgICBkZWYgcmVhZHlfdG9fY3Jhc2goKToKLSAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gdHJpZ2dlcl90ZXh0ID09IHNlbGYuZGV2aWNlLlJlYWRGaWxlKAotICAgICAgICAgICAgICAgIHRyaWdnZXJfZmlsZS5uYW1lLCByZXRyaWVzPTApLnN0cmlwKCkKLSAgICAgICAgICBleGNlcHQgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICB0aW1lb3V0X3JldHJ5LldhaXRGb3IocmVhZHlfdG9fY3Jhc2gsIHdhaXRfcGVyaW9kPTIsIG1heF90cmllcz0xMCkKLSAgICAgICAgaWYgbm90IHJlYWR5X3RvX2NyYXNoKCk6Ci0gICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHNlbGYuZGV2aWNlLmFkYi5TaGVsbCgKLSAgICAgICAgICAgICdlY2hvIGMgPiAvcHJvYy9zeXNycS10cmlnZ2VyJywKLSAgICAgICAgICAgIGV4cGVjdF9zdGF0dXM9Tm9uZSwgdGltZW91dD02MCwgcmV0cmllcz0wKQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoW1RydWUsIFRydWVdLAotICAgICAgICAgICAgICAgICAgICAgIHJlcmFpc2VyX3RocmVhZC5SdW5Bc3luYyhbY3Jhc2hlciwgdmljdGltXSkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgZGV2aWNlX3Rlc3RfY2FzZS5QcmVwYXJlRGV2aWNlcygpCi0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZWNvcmF0b3JzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZWNvcmF0b3JzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQ0YjQ5Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGVjb3JhdG9ycy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIgotRnVuY3Rpb24vbWV0aG9kIGRlY29yYXRvcnMgdGhhdCBwcm92aWRlIHRpbWVvdXQgYW5kIHJldHJ5IGxvZ2ljLgotIiIiCi0KLWltcG9ydCBmdW5jdG9vbHMKLWltcG9ydCBpdGVydG9vbHMKLWltcG9ydCBzeXMKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBjbWRfaGVscGVyCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCByZXJhaXNlcl90aHJlYWQKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHRpbWVvdXRfcmV0cnkKLQotREVGQVVMVF9USU1FT1VUX0FUVFIgPSAnX2RlZmF1bHRfdGltZW91dCcKLURFRkFVTFRfUkVUUklFU19BVFRSID0gJ19kZWZhdWx0X3JldHJpZXMnCi0KLQotZGVmIF9UaW1lb3V0UmV0cnlXcmFwcGVyKAotICAgIGYsIHRpbWVvdXRfZnVuYywgcmV0cmllc19mdW5jLCByZXRyeV9pZl9mdW5jPXRpbWVvdXRfcmV0cnkuQWx3YXlzUmV0cnksCi0gICAgcGFzc192YWx1ZXM9RmFsc2UpOgotICAiIiIgV3JhcHMgYSBmdW5jaW9uIHdpdGggdGltZW91dCBhbmQgcmV0cnkgaGFuZGxpbmcgbG9naWMuCi0KLSAgQXJnczoKLSAgICBmOiBUaGUgZnVuY3Rpb24gdG8gd3JhcC4KLSAgICB0aW1lb3V0X2Z1bmM6IEEgY2FsbGFibGUgdGhhdCByZXR1cm5zIHRoZSB0aW1lb3V0IHZhbHVlLgotICAgIHJldHJpZXNfZnVuYzogQSBjYWxsYWJsZSB0aGF0IHJldHVybnMgdGhlIHJldHJpZXMgdmFsdWUuCi0gICAgcGFzc192YWx1ZXM6IElmIFRydWUsIHBhc3NlcyB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHx0aW1lb3V0X2Z1bmN8IGFuZAotICAgICAgICAgICAgICAgICB8cmV0cmllc19mdW5jfCB0byB0aGUgd3JhcHBlZCBmdW5jdGlvbiBhcyAndGltZW91dCcgYW5kCi0gICAgICAgICAgICAgICAgICdyZXRyaWVzJyBrd2FyZ3MsIHJlc3BlY3RpdmVseS4KLSAgUmV0dXJuczoKLSAgICBUaGUgd3JhcHBlZCBmdW5jdGlvbi4KLSAgIiIiCi0gIEBmdW5jdG9vbHMud3JhcHMoZikKLSAgZGVmIHRpbWVvdXRfcmV0cnlfd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgotICAgIHRpbWVvdXQgPSB0aW1lb3V0X2Z1bmMoKmFyZ3MsICoqa3dhcmdzKQotICAgIHJldHJpZXMgPSByZXRyaWVzX2Z1bmMoKmFyZ3MsICoqa3dhcmdzKQotICAgIGlmIHBhc3NfdmFsdWVzOgotICAgICAga3dhcmdzWyd0aW1lb3V0J10gPSB0aW1lb3V0Ci0gICAgICBrd2FyZ3NbJ3JldHJpZXMnXSA9IHJldHJpZXMKLQotICAgIEBmdW5jdG9vbHMud3JhcHMoZikKLSAgICBkZWYgaW1wbCgpOgotICAgICAgcmV0dXJuIGYoKmFyZ3MsICoqa3dhcmdzKQotICAgIHRyeToKLSAgICAgIGlmIHRpbWVvdXRfcmV0cnkuQ3VycmVudFRpbWVvdXRUaHJlYWRHcm91cCgpOgotICAgICAgICAjIERvbid0IHdyYXAgaWYgdGhlcmUncyBhbHJlYWR5IGFuIG91dGVyIHRpbWVvdXQgdGhyZWFkLgotICAgICAgICByZXR1cm4gaW1wbCgpCi0gICAgICBlbHNlOgotICAgICAgICBkZXNjID0gJyVzKCVzKScgJSAoZi5fX25hbWVfXywgJywgJy5qb2luKGl0ZXJ0b29scy5jaGFpbigKLSAgICAgICAgICAgIChzdHIoYSkgZm9yIGEgaW4gYXJncyksCi0gICAgICAgICAgICAoJyVzPSVzJyAlIChrLCBzdHIodikpIGZvciBrLCB2IGluIGt3YXJncy5pdGVyaXRlbXMoKSkpKSkKLSAgICAgICAgcmV0dXJuIHRpbWVvdXRfcmV0cnkuUnVuKGltcGwsIHRpbWVvdXQsIHJldHJpZXMsIGRlc2M9ZGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5X2lmX2Z1bmM9cmV0cnlfaWZfZnVuYykKLSAgICBleGNlcHQgcmVyYWlzZXJfdGhyZWFkLlRpbWVvdXRFcnJvciBhcyBlOgotICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kVGltZW91dEVycm9yKHN0cihlKSksIE5vbmUsICgKLSAgICAgICAgICBzeXMuZXhjX2luZm8oKVsyXSkKLSAgICBleGNlcHQgY21kX2hlbHBlci5UaW1lb3V0RXJyb3IgYXMgZToKLSAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQ29tbWFuZFRpbWVvdXRFcnJvcihzdHIoZSkpLCBOb25lLCAoCi0gICAgICAgICAgc3lzLmV4Y19pbmZvKClbMl0pCi0gIHJldHVybiB0aW1lb3V0X3JldHJ5X3dyYXBwZXIKLQotCi1kZWYgV2l0aFRpbWVvdXRBbmRSZXRyaWVzKGYpOgotICAiIiJBIGRlY29yYXRvciB0aGF0IGhhbmRsZXMgdGltZW91dHMgYW5kIHJldHJpZXMuCi0KLSAgJ3RpbWVvdXQnIGFuZCAncmV0cmllcycga3dhcmdzIG11c3QgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KLQotICBBcmdzOgotICAgIGY6IFRoZSBmdW5jdGlvbiB0byBkZWNvcmF0ZS4KLSAgUmV0dXJuczoKLSAgICBUaGUgZGVjb3JhdGVkIGZ1bmN0aW9uLgotICAiIiIKLSAgZ2V0X3RpbWVvdXQgPSBsYW1iZGEgKmEsICoqa3c6IGt3Wyd0aW1lb3V0J10KLSAgZ2V0X3JldHJpZXMgPSBsYW1iZGEgKmEsICoqa3c6IGt3WydyZXRyaWVzJ10KLSAgcmV0dXJuIF9UaW1lb3V0UmV0cnlXcmFwcGVyKGYsIGdldF90aW1lb3V0LCBnZXRfcmV0cmllcykKLQotCi1kZWYgV2l0aFRpbWVvdXRBbmRDb25kaXRpb25hbFJldHJpZXMocmV0cnlfaWZfZnVuYyk6Ci0gICIiIlJldHVybnMgYSBkZWNvcmF0b3IgdGhhdCBoYW5kbGVzIHRpbWVvdXRzIGFuZCwgaW4gc29tZSBjYXNlcywgcmV0cmllcy4KLQotICAndGltZW91dCcgYW5kICdyZXRyaWVzJyBrd2FyZ3MgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgotCi0gIEFyZ3M6Ci0gICAgcmV0cnlfaWZfZnVuYzogQSB1bmFyeSBjYWxsYWJsZSB0aGF0IHRha2VzIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJucwotICAgICAgd2hldGhlciBmYWlsdXJlcyBzaG91bGQgYmUgcmV0cmllZC4KLSAgUmV0dXJuczoKLSAgICBUaGUgYWN0dWFsIGRlY29yYXRvci4KLSAgIiIiCi0gIGRlZiBkZWNvcmF0b3IoZik6Ci0gICAgZ2V0X3RpbWVvdXQgPSBsYW1iZGEgKmEsICoqa3c6IGt3Wyd0aW1lb3V0J10KLSAgICBnZXRfcmV0cmllcyA9IGxhbWJkYSAqYSwgKiprdzoga3dbJ3JldHJpZXMnXQotICAgIHJldHVybiBfVGltZW91dFJldHJ5V3JhcHBlcigKLSAgICAgICAgZiwgZ2V0X3RpbWVvdXQsIGdldF9yZXRyaWVzLCByZXRyeV9pZl9mdW5jPXJldHJ5X2lmX2Z1bmMpCi0gIHJldHVybiBkZWNvcmF0b3IKLQotCi1kZWYgV2l0aEV4cGxpY2l0VGltZW91dEFuZFJldHJpZXModGltZW91dCwgcmV0cmllcyk6Ci0gICIiIlJldHVybnMgYSBkZWNvcmF0b3IgdGhhdCBoYW5kbGVzIHRpbWVvdXRzIGFuZCByZXRyaWVzLgotCi0gIFRoZSBwcm92aWRlZCB8dGltZW91dHwgYW5kIHxyZXRyaWVzfCB2YWx1ZXMgYXJlIGFsd2F5cyB1c2VkLgotCi0gIEFyZ3M6Ci0gICAgdGltZW91dDogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gdG8KLSAgICAgICAgICAgICByZXR1cm4uIEFsd2F5cyB1c2VkLgotICAgIHJldHJpZXM6IFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGRlY29yYXRlZCBmdW5jdGlvbiBzaG91bGQgYmUgcmV0cmllZCBvbgotICAgICAgICAgICAgIGZhaWx1cmUuIEFsd2F5cyB1c2VkLgotICBSZXR1cm5zOgotICAgIFRoZSBhY3R1YWwgZGVjb3JhdG9yLgotICAiIiIKLSAgZGVmIGRlY29yYXRvcihmKToKLSAgICBnZXRfdGltZW91dCA9IGxhbWJkYSAqYSwgKiprdzogdGltZW91dAotICAgIGdldF9yZXRyaWVzID0gbGFtYmRhICphLCAqKmt3OiByZXRyaWVzCi0gICAgcmV0dXJuIF9UaW1lb3V0UmV0cnlXcmFwcGVyKGYsIGdldF90aW1lb3V0LCBnZXRfcmV0cmllcykKLSAgcmV0dXJuIGRlY29yYXRvcgotCi0KLWRlZiBXaXRoVGltZW91dEFuZFJldHJpZXNEZWZhdWx0cyhkZWZhdWx0X3RpbWVvdXQsIGRlZmF1bHRfcmV0cmllcyk6Ci0gICIiIlJldHVybnMgYSBkZWNvcmF0b3IgdGhhdCBoYW5kbGVzIHRpbWVvdXRzIGFuZCByZXRyaWVzLgotCi0gIFRoZSBwcm92aWRlZCB8ZGVmYXVsdF90aW1lb3V0fCBhbmQgfGRlZmF1bHRfcmV0cmllc3wgdmFsdWVzIGFyZSB1c2VkIG9ubHkKLSAgaWYgdGltZW91dCBhbmQgcmV0cmllcyB2YWx1ZXMgYXJlIG5vdCBwcm92aWRlZC4KLQotICBBcmdzOgotICAgIGRlZmF1bHRfdGltZW91dDogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgIHRvIHJldHVybi4gT25seSB1c2VkIGlmIGEgJ3RpbWVvdXQnIGt3YXJnIGlzIG5vdCBwYXNzZWQKLSAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24uCi0gICAgZGVmYXVsdF9yZXRyaWVzOiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gc2hvdWxkIGJlCi0gICAgICAgICAgICAgICAgICAgICByZXRyaWVkIG9uIGZhaWx1cmUuIE9ubHkgdXNlZCBpZiBhICdyZXRyaWVzJyBrd2FyZyBpcyBub3QKLSAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uLgotICBSZXR1cm5zOgotICAgIFRoZSBhY3R1YWwgZGVjb3JhdG9yLgotICAiIiIKLSAgZGVmIGRlY29yYXRvcihmKToKLSAgICBnZXRfdGltZW91dCA9IGxhbWJkYSAqYSwgKiprdzoga3cuZ2V0KCd0aW1lb3V0JywgZGVmYXVsdF90aW1lb3V0KQotICAgIGdldF9yZXRyaWVzID0gbGFtYmRhICphLCAqKmt3OiBrdy5nZXQoJ3JldHJpZXMnLCBkZWZhdWx0X3JldHJpZXMpCi0gICAgcmV0dXJuIF9UaW1lb3V0UmV0cnlXcmFwcGVyKGYsIGdldF90aW1lb3V0LCBnZXRfcmV0cmllcywgcGFzc192YWx1ZXM9VHJ1ZSkKLSAgcmV0dXJuIGRlY29yYXRvcgotCi0KLWRlZiBXaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoCi0gICAgZGVmYXVsdF90aW1lb3V0X25hbWU9REVGQVVMVF9USU1FT1VUX0FUVFIsCi0gICAgZGVmYXVsdF9yZXRyaWVzX25hbWU9REVGQVVMVF9SRVRSSUVTX0FUVFIsCi0gICAgbWluX2RlZmF1bHRfdGltZW91dD1Ob25lKToKLSAgIiIiUmV0dXJucyBhIGRlY29yYXRvciB0aGF0IGhhbmRsZXMgdGltZW91dHMgYW5kIHJldHJpZXMuCi0KLSAgVGhlIHByb3ZpZGVkIHxkZWZhdWx0X3RpbWVvdXRfbmFtZXwgYW5kIHxkZWZhdWx0X3JldHJpZXNfbmFtZXwgYXJlIHVzZWQgdG8KLSAgZ2V0IHRoZSBkZWZhdWx0IHRpbWVvdXQgdmFsdWUgYW5kIHRoZSBkZWZhdWx0IHJldHJpZXMgdmFsdWUgZnJvbSB0aGUgb2JqZWN0Ci0gIGluc3RhbmNlIGlmIHRpbWVvdXQgYW5kIHJldHJpZXMgdmFsdWVzIGFyZSBub3QgcHJvdmlkZWQuCi0KLSAgTm90ZSB0aGF0IHRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCB0byBkZWNvcmF0ZSBtZXRob2RzLCBub3QgZnVuY3Rpb25zLgotCi0gIEFyZ3M6Ci0gICAgZGVmYXVsdF90aW1lb3V0X25hbWU6IFRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IHRpbWVvdXQgYXR0cmlidXRlIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4KLSAgICBkZWZhdWx0X3JldHJpZXNfbmFtZTogVGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgcmV0cmllcyBhdHRyaWJ1dGUgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLgotICAgIG1pbl90aW1lb3V0OiBNaW5pdW11bSB0aW1lb3V0IHRvIGJlIHVzZWQgd2hlbiB1c2luZyBpbnN0YW5jZSB0aW1lb3V0LgotICBSZXR1cm5zOgotICAgIFRoZSBhY3R1YWwgZGVjb3JhdG9yLgotICAiIiIKLSAgZGVmIGRlY29yYXRvcihmKToKLSAgICBkZWYgZ2V0X3RpbWVvdXQoaW5zdCwgKl9hcmdzLCAqKmt3YXJncyk6Ci0gICAgICByZXQgPSBnZXRhdHRyKGluc3QsIGRlZmF1bHRfdGltZW91dF9uYW1lKQotICAgICAgaWYgbWluX2RlZmF1bHRfdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgcmV0ID0gbWF4KG1pbl9kZWZhdWx0X3RpbWVvdXQsIHJldCkKLSAgICAgIHJldHVybiBrd2FyZ3MuZ2V0KCd0aW1lb3V0JywgcmV0KQotCi0gICAgZGVmIGdldF9yZXRyaWVzKGluc3QsICpfYXJncywgKiprd2FyZ3MpOgotICAgICAgcmV0dXJuIGt3YXJncy5nZXQoJ3JldHJpZXMnLCBnZXRhdHRyKGluc3QsIGRlZmF1bHRfcmV0cmllc19uYW1lKSkKLSAgICByZXR1cm4gX1RpbWVvdXRSZXRyeVdyYXBwZXIoZiwgZ2V0X3RpbWVvdXQsIGdldF9yZXRyaWVzLCBwYXNzX3ZhbHVlcz1UcnVlKQotICByZXR1cm4gZGVjb3JhdG9yCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGVjb3JhdG9yc190ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZWNvcmF0b3JzX3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MDk1M2UuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZWNvcmF0b3JzX3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiIKLVVuaXQgdGVzdHMgZm9yIGRlY29yYXRvcnMucHkuCi0iIiIKLQotIyBweWxpbnQ6IGRpc2FibGU9VzA2MTMKLQotaW1wb3J0IHRpbWUKLWltcG9ydCB0cmFjZWJhY2sKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRlY29yYXRvcnMKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX2Vycm9ycwotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgcmVyYWlzZXJfdGhyZWFkCi0KLV9ERUZBVUxUX1RJTUVPVVQgPSAzMAotX0RFRkFVTFRfUkVUUklFUyA9IDMKLQotCi1jbGFzcyBEZWNvcmF0b3JzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gIF9kZWNvcmF0ZWRfZnVuY3Rpb25fY2FsbGVkX2NvdW50ID0gMAotCi0gIGRlZiB0ZXN0RnVuY3Rpb25EZWNvcmF0b3JEb2VzVGltZW91dHMoc2VsZik6Ci0gICAgIiIiVGVzdHMgdGhhdCB0aGUgYmFzZSBkZWNvcmF0b3IgaGFuZGxlcyB0aGUgdGltZW91dCBsb2dpYy4iIiIKLSAgICBEZWNvcmF0b3JzVGVzdC5fZGVjb3JhdGVkX2Z1bmN0aW9uX2NhbGxlZF9jb3VudCA9IDAKLQotICAgIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllcwotICAgIGRlZiBhbHdheXNUaW1lc091dCh0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgICBEZWNvcmF0b3JzVGVzdC5fZGVjb3JhdGVkX2Z1bmN0aW9uX2NhbGxlZF9jb3VudCArPSAxCi0gICAgICB0aW1lLnNsZWVwKDEwMCkKLQotICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kVGltZW91dEVycm9yKToKLSAgICAgIGFsd2F5c1RpbWVzT3V0KHRpbWVvdXQ9MSwgcmV0cmllcz0wKQotICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGFwc2VkX3RpbWUgPj0gMSkKLSAgICBzZWxmLmFzc2VydEVxdWFscygxLCBEZWNvcmF0b3JzVGVzdC5fZGVjb3JhdGVkX2Z1bmN0aW9uX2NhbGxlZF9jb3VudCkKLQotICBkZWYgdGVzdEZ1bmN0aW9uRGVjb3JhdG9yRG9lc1JldHJpZXMoc2VsZik6Ci0gICAgIiIiVGVzdHMgdGhhdCB0aGUgYmFzZSBkZWNvcmF0b3IgaGFuZGxlcyB0aGUgcmV0cmllcyBsb2dpYy4iIiIKLSAgICBEZWNvcmF0b3JzVGVzdC5fZGVjb3JhdGVkX2Z1bmN0aW9uX2NhbGxlZF9jb3VudCA9IDAKLQotICAgIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllcwotICAgIGRlZiBhbHdheXNSYWlzZXNDb21tYW5kRmFpbGVkRXJyb3IodGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICAgRGVjb3JhdG9yc1Rlc3QuX2RlY29yYXRlZF9mdW5jdGlvbl9jYWxsZWRfY291bnQgKz0gMQotICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IoJ3Rlc3RDb21tYW5kIGZhaWxlZCcpCi0KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgIGFsd2F5c1JhaXNlc0NvbW1hbmRGYWlsZWRFcnJvcih0aW1lb3V0PTMwLCByZXRyaWVzPTEwKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDExLCBEZWNvcmF0b3JzVGVzdC5fZGVjb3JhdGVkX2Z1bmN0aW9uX2NhbGxlZF9jb3VudCkKLQotICBkZWYgdGVzdEZ1bmN0aW9uRGVjb3JhdG9yUmVxdWlyZXNQYXJhbXMoc2VsZik6Ci0gICAgIiIiVGVzdHMgdGhhdCB0aGUgYmFzZSBkZWNvcmF0b3IgcmVxdWlyZXMgdGltZW91dCBhbmQgcmV0cmllcyBwYXJhbXMuIiIiCi0gICAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzCi0gICAgZGVmIHJlcXVpcmVzRXhwbGljaXRUaW1lb3V0QW5kUmV0cmllcyh0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgICByZXR1cm4gKHRpbWVvdXQsIHJldHJpZXMpCi0KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKLSAgICAgIHJlcXVpcmVzRXhwbGljaXRUaW1lb3V0QW5kUmV0cmllcygpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICByZXF1aXJlc0V4cGxpY2l0VGltZW91dEFuZFJldHJpZXModGltZW91dD0xMCkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKLSAgICAgIHJlcXVpcmVzRXhwbGljaXRUaW1lb3V0QW5kUmV0cmllcyhyZXRyaWVzPTApCi0gICAgZXhwZWN0ZWRfdGltZW91dCA9IDEwCi0gICAgZXhwZWN0ZWRfcmV0cmllcyA9IDEKLSAgICAoYWN0dWFsX3RpbWVvdXQsIGFjdHVhbF9yZXRyaWVzKSA9ICgKLSAgICAgICAgcmVxdWlyZXNFeHBsaWNpdFRpbWVvdXRBbmRSZXRyaWVzKHRpbWVvdXQ9ZXhwZWN0ZWRfdGltZW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJpZXM9ZXhwZWN0ZWRfcmV0cmllcykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfdGltZW91dCwgYWN0dWFsX3RpbWVvdXQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfcmV0cmllcywgYWN0dWFsX3JldHJpZXMpCi0KLSAgZGVmIHRlc3RGdW5jdGlvbkRlY29yYXRvclRyYW5zbGF0ZXNSZXJhaXNlckV4Y2VwdGlvbnMoc2VsZik6Ci0gICAgIiIiVGVzdHMgdGhhdCB0aGUgZXhwbGljaXQgZGVjb3JhdG9yIHRyYW5zbGF0ZXMgcmVyYWlzZXIgZXhjZXB0aW9ucy4iIiIKLSAgICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXMKLSAgICBkZWYgYWx3YXlzUmFpc2VzUHJvdmlkZWRFeGNlcHRpb24oZXhjZXB0aW9uLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgICByYWlzZSBleGNlcHRpb24KLQotICAgIGV4Y2VwdGlvbl9kZXNjID0gJ1JlcmFpc2VyIHRocmVhZCB0aW1lb3V0IGVycm9yJwotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kVGltZW91dEVycm9yKSBhcyBlOgotICAgICAgYWx3YXlzUmFpc2VzUHJvdmlkZWRFeGNlcHRpb24oCi0gICAgICAgICAgcmVyYWlzZXJfdGhyZWFkLlRpbWVvdXRFcnJvcihleGNlcHRpb25fZGVzYyksCi0gICAgICAgICAgdGltZW91dD0xMCwgcmV0cmllcz0xKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4Y2VwdGlvbl9kZXNjLCBzdHIoZS5leGNlcHRpb24pKQotCi0gIGRlZiB0ZXN0Q29uZGl0aW9uYWxSZXRyaWVzRGVjb3JhdG9yUmV0cmllcyhzZWxmKToKLSAgICBkZWYgZG9fbm90X3JldHJ5X25vX2FkYl9lcnJvcihleGMpOgotICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKGV4YywgZGV2aWNlX2Vycm9ycy5Ob0FkYkVycm9yKQotCi0gICAgYWN0dWFsX3RyaWVzID0gWzBdCi0KLSAgICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZENvbmRpdGlvbmFsUmV0cmllcyhkb19ub3RfcmV0cnlfbm9fYWRiX2Vycm9yKQotICAgIGRlZiBhbHdheXNSYWlzZXNDb21tYW5kRmFpbGVkRXJyb3IodGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICAgYWN0dWFsX3RyaWVzWzBdICs9IDEKLSAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKCdDb21tYW5kIGZhaWxlZCA6KCcpCi0KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgIGFsd2F5c1JhaXNlc0NvbW1hbmRGYWlsZWRFcnJvcih0aW1lb3V0PTEwLCByZXRyaWVzPTEwKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDExLCBhY3R1YWxfdHJpZXNbMF0pCi0KLSAgZGVmIHRlc3RDb25kaXRpb25hbFJldHJpZXNEZWNvcmF0b3JEb2VzbnRSZXRyeShzZWxmKToKLSAgICBkZWYgZG9fbm90X3JldHJ5X25vX2FkYl9lcnJvcihleGMpOgotICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKGV4YywgZGV2aWNlX2Vycm9ycy5Ob0FkYkVycm9yKQotCi0gICAgYWN0dWFsX3RyaWVzID0gWzBdCi0KLSAgICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZENvbmRpdGlvbmFsUmV0cmllcyhkb19ub3RfcmV0cnlfbm9fYWRiX2Vycm9yKQotICAgIGRlZiBhbHdheXNSYWlzZXNOb0FkYkVycm9yKHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAgIGFjdHVhbF90cmllc1swXSArPSAxCi0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLk5vQWRiRXJyb3IoKQotCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLk5vQWRiRXJyb3IpOgotICAgICAgYWx3YXlzUmFpc2VzTm9BZGJFcnJvcih0aW1lb3V0PTEwLCByZXRyaWVzPTEwKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGFjdHVhbF90cmllc1swXSkKLQotICBkZWYgdGVzdERlZmF1bHRzRnVuY3Rpb25EZWNvcmF0b3JEb2VzVGltZW91dHMoc2VsZik6Ci0gICAgIiIiVGVzdHMgdGhhdCB0aGUgZGVmYXVsdHMgZGVjb3JhdG9yIGhhbmRsZXMgdGltZW91dCBsb2dpYy4iIiIKLSAgICBEZWNvcmF0b3JzVGVzdC5fZGVjb3JhdGVkX2Z1bmN0aW9uX2NhbGxlZF9jb3VudCA9IDAKLQotICAgIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0RlZmF1bHRzKDEsIDApCi0gICAgZGVmIGFsd2F5c1RpbWVzT3V0KHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAgIERlY29yYXRvcnNUZXN0Ll9kZWNvcmF0ZWRfZnVuY3Rpb25fY2FsbGVkX2NvdW50ICs9IDEKLSAgICAgIHRpbWUuc2xlZXAoMTAwKQotCi0gICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRUaW1lb3V0RXJyb3IpOgotICAgICAgYWx3YXlzVGltZXNPdXQoKQotICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGFwc2VkX3RpbWUgPj0gMSkKLSAgICBzZWxmLmFzc2VydEVxdWFscygxLCBEZWNvcmF0b3JzVGVzdC5fZGVjb3JhdGVkX2Z1bmN0aW9uX2NhbGxlZF9jb3VudCkKLQotICAgIERlY29yYXRvcnNUZXN0Ll9kZWNvcmF0ZWRfZnVuY3Rpb25fY2FsbGVkX2NvdW50ID0gMAotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kVGltZW91dEVycm9yKToKLSAgICAgIGFsd2F5c1RpbWVzT3V0KHRpbWVvdXQ9MikKLSAgICBlbGFwc2VkX3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKLSAgICBzZWxmLmFzc2VydFRydWUoZWxhcHNlZF90aW1lID49IDIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgRGVjb3JhdG9yc1Rlc3QuX2RlY29yYXRlZF9mdW5jdGlvbl9jYWxsZWRfY291bnQpCi0KLSAgZGVmIHRlc3REZWZhdWx0c0Z1bmN0aW9uRGVjb3JhdG9yRG9lc1JldHJpZXMoc2VsZik6Ci0gICAgIiIiVGVzdHMgdGhhdCB0aGUgZGVmYXVsdHMgZGVjb3JhdG9yIGhhbmRsZXMgcmV0cmllcyBsb2dpYy4iIiIKLSAgICBEZWNvcmF0b3JzVGVzdC5fZGVjb3JhdGVkX2Z1bmN0aW9uX2NhbGxlZF9jb3VudCA9IDAKLQotICAgIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0RlZmF1bHRzKDMwLCAxMCkKLSAgICBkZWYgYWx3YXlzUmFpc2VzQ29tbWFuZEZhaWxlZEVycm9yKHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAgIERlY29yYXRvcnNUZXN0Ll9kZWNvcmF0ZWRfZnVuY3Rpb25fY2FsbGVkX2NvdW50ICs9IDEKLSAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKCd0ZXN0Q29tbWFuZCBmYWlsZWQnKQotCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICBhbHdheXNSYWlzZXNDb21tYW5kRmFpbGVkRXJyb3IoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDExLCBEZWNvcmF0b3JzVGVzdC5fZGVjb3JhdGVkX2Z1bmN0aW9uX2NhbGxlZF9jb3VudCkKLQotICAgIERlY29yYXRvcnNUZXN0Ll9kZWNvcmF0ZWRfZnVuY3Rpb25fY2FsbGVkX2NvdW50ID0gMAotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgYWx3YXlzUmFpc2VzQ29tbWFuZEZhaWxlZEVycm9yKHJldHJpZXM9NSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyg2LCBEZWNvcmF0b3JzVGVzdC5fZGVjb3JhdGVkX2Z1bmN0aW9uX2NhbGxlZF9jb3VudCkKLQotICBkZWYgdGVzdERlZmF1bHRzRnVuY3Rpb25EZWNvcmF0b3JQYXNzZXNWYWx1ZXMoc2VsZik6Ci0gICAgIiIiVGVzdHMgdGhhdCB0aGUgZGVmYXVsdHMgZGVjb3JhdG9yIHBhc3NlcyB0aW1lb3V0IGFuZCByZXRyaWVzIGt3YXJncy4iIiIKLSAgICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNEZWZhdWx0cygzMCwgMTApCi0gICAgZGVmIGFsd2F5c1JldHVybnNUaW1lb3V0cyh0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgICByZXR1cm4gdGltZW91dAotCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMzAsIGFsd2F5c1JldHVybnNUaW1lb3V0cygpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEyMCwgYWx3YXlzUmV0dXJuc1RpbWVvdXRzKHRpbWVvdXQ9MTIwKSkKLQotICAgIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0RlZmF1bHRzKDMwLCAxMCkKLSAgICBkZWYgYWx3YXlzUmV0dXJuc1JldHJpZXModGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICAgcmV0dXJuIHJldHJpZXMKLQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEwLCBhbHdheXNSZXR1cm5zUmV0cmllcygpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGFsd2F5c1JldHVybnNSZXRyaWVzKHJldHJpZXM9MSkpCi0KLSAgZGVmIHRlc3REZWZhdWx0c0Z1bmN0aW9uRGVjb3JhdG9yVHJhbnNsYXRlc1JlcmFpc2VyRXhjZXB0aW9ucyhzZWxmKToKLSAgICAiIiJUZXN0cyB0aGF0IHRoZSBleHBsaWNpdCBkZWNvcmF0b3IgdHJhbnNsYXRlcyByZXJhaXNlciBleGNlcHRpb25zLiIiIgotICAgIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0RlZmF1bHRzKDMwLCAxMCkKLSAgICBkZWYgYWx3YXlzUmFpc2VzUHJvdmlkZWRFeGNlcHRpb24oZXhjZXB0aW9uLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgICByYWlzZSBleGNlcHRpb24KLQotICAgIGV4Y2VwdGlvbl9kZXNjID0gJ1JlcmFpc2VyIHRocmVhZCB0aW1lb3V0IGVycm9yJwotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kVGltZW91dEVycm9yKSBhcyBlOgotICAgICAgYWx3YXlzUmFpc2VzUHJvdmlkZWRFeGNlcHRpb24oCi0gICAgICAgICAgcmVyYWlzZXJfdGhyZWFkLlRpbWVvdXRFcnJvcihleGNlcHRpb25fZGVzYykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhjZXB0aW9uX2Rlc2MsIHN0cihlLmV4Y2VwdGlvbikpCi0KLSAgZGVmIHRlc3RFeHBsaWNpdEZ1bmN0aW9uRGVjb3JhdG9yRG9lc1RpbWVvdXRzKHNlbGYpOgotICAgICIiIlRlc3RzIHRoYXQgdGhlIGV4cGxpY2l0IGRlY29yYXRvciBoYW5kbGVzIHRpbWVvdXQgbG9naWMuIiIiCi0gICAgRGVjb3JhdG9yc1Rlc3QuX2RlY29yYXRlZF9mdW5jdGlvbl9jYWxsZWRfY291bnQgPSAwCi0KLSAgICBAZGVjb3JhdG9ycy5XaXRoRXhwbGljaXRUaW1lb3V0QW5kUmV0cmllcygxLCAwKQotICAgIGRlZiBhbHdheXNUaW1lc091dCgpOgotICAgICAgRGVjb3JhdG9yc1Rlc3QuX2RlY29yYXRlZF9mdW5jdGlvbl9jYWxsZWRfY291bnQgKz0gMQotICAgICAgdGltZS5zbGVlcCgxMDApCi0KLSAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZFRpbWVvdXRFcnJvcik6Ci0gICAgICBhbHdheXNUaW1lc091dCgpCi0gICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCi0gICAgc2VsZi5hc3NlcnRUcnVlKGVsYXBzZWRfdGltZSA+PSAxKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIERlY29yYXRvcnNUZXN0Ll9kZWNvcmF0ZWRfZnVuY3Rpb25fY2FsbGVkX2NvdW50KQotCi0gIGRlZiB0ZXN0RXhwbGljaXRGdW5jdGlvbkRlY29yYXRvckRvZXNSZXRyaWVzKHNlbGYpOgotICAgICIiIlRlc3RzIHRoYXQgdGhlIGV4cGxpY2l0IGRlY29yYXRvciBoYW5kbGVzIHJldHJpZXMgbG9naWMuIiIiCi0gICAgRGVjb3JhdG9yc1Rlc3QuX2RlY29yYXRlZF9mdW5jdGlvbl9jYWxsZWRfY291bnQgPSAwCi0KLSAgICBAZGVjb3JhdG9ycy5XaXRoRXhwbGljaXRUaW1lb3V0QW5kUmV0cmllcygzMCwgMTApCi0gICAgZGVmIGFsd2F5c1JhaXNlc0NvbW1hbmRGYWlsZWRFcnJvcigpOgotICAgICAgRGVjb3JhdG9yc1Rlc3QuX2RlY29yYXRlZF9mdW5jdGlvbl9jYWxsZWRfY291bnQgKz0gMQotICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IoJ3Rlc3RDb21tYW5kIGZhaWxlZCcpCi0KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgIGFsd2F5c1JhaXNlc0NvbW1hbmRGYWlsZWRFcnJvcigpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMTEsIERlY29yYXRvcnNUZXN0Ll9kZWNvcmF0ZWRfZnVuY3Rpb25fY2FsbGVkX2NvdW50KQotCi0gIGRlZiB0ZXN0RXhwbGljaXREZWNvcmF0b3JUcmFuc2xhdGVzUmVyYWlzZXJFeGNlcHRpb25zKHNlbGYpOgotICAgICIiIlRlc3RzIHRoYXQgdGhlIGV4cGxpY2l0IGRlY29yYXRvciB0cmFuc2xhdGVzIHJlcmFpc2VyIGV4Y2VwdGlvbnMuIiIiCi0gICAgQGRlY29yYXRvcnMuV2l0aEV4cGxpY2l0VGltZW91dEFuZFJldHJpZXMoMzAsIDEwKQotICAgIGRlZiBhbHdheXNSYWlzZXNQcm92aWRlZEV4Y2VwdGlvbihleGNlcHRpb24pOgotICAgICAgcmFpc2UgZXhjZXB0aW9uCi0KLSAgICBleGNlcHRpb25fZGVzYyA9ICdSZXJhaXNlciB0aHJlYWQgdGltZW91dCBlcnJvcicKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZFRpbWVvdXRFcnJvcikgYXMgZToKLSAgICAgIGFsd2F5c1JhaXNlc1Byb3ZpZGVkRXhjZXB0aW9uKAotICAgICAgICAgIHJlcmFpc2VyX3RocmVhZC5UaW1lb3V0RXJyb3IoZXhjZXB0aW9uX2Rlc2MpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4Y2VwdGlvbl9kZXNjLCBzdHIoZS5leGNlcHRpb24pKQotCi0gIGNsYXNzIF9NZXRob2REZWNvcmF0b3JUZXN0T2JqZWN0KG9iamVjdCk6Ci0gICAgIiIiQW4gb2JqZWN0IHN1aXRhYmxlIGZvciB0ZXN0aW5nIHRoZSBtZXRob2QgZGVjb3JhdG9yLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSwgZGVmYXVsdF90aW1lb3V0PV9ERUZBVUxUX1RJTUVPVVQsCi0gICAgICAgICAgICAgICAgIGRlZmF1bHRfcmV0cmllcz1fREVGQVVMVF9SRVRSSUVTKToKLSAgICAgIHNlbGYuX3Rlc3RfY2FzZSA9IHRlc3RfY2FzZQotICAgICAgc2VsZi5kZWZhdWx0X3RpbWVvdXQgPSBkZWZhdWx0X3RpbWVvdXQKLSAgICAgIHNlbGYuZGVmYXVsdF9yZXRyaWVzID0gZGVmYXVsdF9yZXRyaWVzCi0gICAgICBzZWxmLmZ1bmN0aW9uX2NhbGxfY291bnRlcnMgPSB7Ci0gICAgICAgICAgJ2Fsd2F5c1JhaXNlc0NvbW1hbmRGYWlsZWRFcnJvcic6IDAsCi0gICAgICAgICAgJ2Fsd2F5c1RpbWVzT3V0JzogMCwKLSAgICAgICAgICAncmVxdWlyZXNFeHBsaWNpdFRpbWVvdXRBbmRSZXRyaWVzJzogMCwKLSAgICAgIH0KLQotICAgIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgKLSAgICAgICAgJ2RlZmF1bHRfdGltZW91dCcsICdkZWZhdWx0X3JldHJpZXMnKQotICAgIGRlZiBhbHdheXNUaW1lc091dChzZWxmLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgICBzZWxmLmZ1bmN0aW9uX2NhbGxfY291bnRlcnNbJ2Fsd2F5c1RpbWVzT3V0J10gKz0gMQotICAgICAgdGltZS5zbGVlcCgxMDApCi0gICAgICBzZWxmLl90ZXN0X2Nhc2UuYXNzZXJ0RmFsc2UoVHJ1ZSwgbXNnPSdGYWlsZWQgdG8gdGltZSBvdXQ/JykKLQotICAgIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgKLSAgICAgICAgJ2RlZmF1bHRfdGltZW91dCcsICdkZWZhdWx0X3JldHJpZXMnKQotICAgIGRlZiBhbHdheXNSYWlzZXNDb21tYW5kRmFpbGVkRXJyb3Ioc2VsZiwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICAgc2VsZi5mdW5jdGlvbl9jYWxsX2NvdW50ZXJzWydhbHdheXNSYWlzZXNDb21tYW5kRmFpbGVkRXJyb3InXSArPSAxCi0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcigndGVzdENvbW1hbmQgZmFpbGVkJykKLQotICAgICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtdXNlCi0KLSAgICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoCi0gICAgICAgICdkZWZhdWx0X3RpbWVvdXQnLCAnZGVmYXVsdF9yZXRyaWVzJykKLSAgICBkZWYgYWx3YXlzUmV0dXJuc1RpbWVvdXQoc2VsZiwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICAgcmV0dXJuIHRpbWVvdXQKLQotICAgIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgKLSAgICAgICAgJ2RlZmF1bHRfdGltZW91dCcsICdkZWZhdWx0X3JldHJpZXMnLCBtaW5fZGVmYXVsdF90aW1lb3V0PTEwMCkKLSAgICBkZWYgYWx3YXlzUmV0dXJuc1RpbWVvdXRXaXRoTWluKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAgIHJldHVybiB0aW1lb3V0Ci0KLSAgICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoCi0gICAgICAgICdkZWZhdWx0X3RpbWVvdXQnLCAnZGVmYXVsdF9yZXRyaWVzJykKLSAgICBkZWYgYWx3YXlzUmV0dXJuc1JldHJpZXMoc2VsZiwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICAgcmV0dXJuIHJldHJpZXMKLQotICAgIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgKLSAgICAgICAgJ2RlZmF1bHRfdGltZW91dCcsICdkZWZhdWx0X3JldHJpZXMnKQotICAgIGRlZiBhbHdheXNSYWlzZXNQcm92aWRlZEV4Y2VwdGlvbihzZWxmLCBleGNlcHRpb24sIHRpbWVvdXQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cmllcz1Ob25lKToKLSAgICAgIHJhaXNlIGV4Y2VwdGlvbgotCi0gICAgIyBweWxpbnQ6IGVuYWJsZT1uby1zZWxmLXVzZQotCi0gIGRlZiB0ZXN0TWV0aG9kRGVjb3JhdG9yRG9lc1RpbWVvdXQoc2VsZik6Ci0gICAgIiIiVGVzdHMgdGhhdCB0aGUgbWV0aG9kIGRlY29yYXRvciBoYW5kbGVzIHRpbWVvdXQgbG9naWMuIiIiCi0gICAgdGVzdF9vYmogPSBzZWxmLl9NZXRob2REZWNvcmF0b3JUZXN0T2JqZWN0KHNlbGYpCi0gICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRUaW1lb3V0RXJyb3IpOgotICAgICAgdHJ5OgotICAgICAgICB0ZXN0X29iai5hbHdheXNUaW1lc091dCh0aW1lb3V0PTEsIHJldHJpZXM9MCkKLSAgICAgIGV4Y2VwdDoKLSAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCi0gICAgICAgIHJhaXNlCi0gICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCi0gICAgc2VsZi5hc3NlcnRUcnVlKGVsYXBzZWRfdGltZSA+PSAxKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIHRlc3Rfb2JqLmZ1bmN0aW9uX2NhbGxfY291bnRlcnNbJ2Fsd2F5c1RpbWVzT3V0J10pCi0KLSAgZGVmIHRlc3RNZXRob2REZWNvcmF0b3JEb2VzUmV0cmllcyhzZWxmKToKLSAgICAiIiJUZXN0cyB0aGF0IHRoZSBtZXRob2QgZGVjb3JhdG9yIGhhbmRsZXMgcmV0cmllcyBsb2dpYy4iIiIKLSAgICB0ZXN0X29iaiA9IHNlbGYuX01ldGhvZERlY29yYXRvclRlc3RPYmplY3Qoc2VsZikKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgIHRyeToKLSAgICAgICAgdGVzdF9vYmouYWx3YXlzUmFpc2VzQ29tbWFuZEZhaWxlZEVycm9yKHJldHJpZXM9MTApCi0gICAgICBleGNlcHQ6Ci0gICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQotICAgICAgICByYWlzZQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAxMSwgdGVzdF9vYmouZnVuY3Rpb25fY2FsbF9jb3VudGVyc1snYWx3YXlzUmFpc2VzQ29tbWFuZEZhaWxlZEVycm9yJ10pCi0KLSAgZGVmIHRlc3RNZXRob2REZWNvcmF0b3JQYXNzZXNWYWx1ZXMoc2VsZik6Ci0gICAgIiIiVGVzdHMgdGhhdCB0aGUgbWV0aG9kIGRlY29yYXRvciBwYXNzZXMgdGltZW91dCBhbmQgcmV0cmllcyBrd2FyZ3MuIiIiCi0gICAgdGVzdF9vYmogPSBzZWxmLl9NZXRob2REZWNvcmF0b3JUZXN0T2JqZWN0KAotICAgICAgICBzZWxmLCBkZWZhdWx0X3RpbWVvdXQ9NDIsIGRlZmF1bHRfcmV0cmllcz0zMSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyg0MiwgdGVzdF9vYmouYWx3YXlzUmV0dXJuc1RpbWVvdXQoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyg0MSwgdGVzdF9vYmouYWx3YXlzUmV0dXJuc1RpbWVvdXQodGltZW91dD00MSkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMzEsIHRlc3Rfb2JqLmFsd2F5c1JldHVybnNSZXRyaWVzKCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMzIsIHRlc3Rfb2JqLmFsd2F5c1JldHVybnNSZXRyaWVzKHJldHJpZXM9MzIpKQotCi0gIGRlZiB0ZXN0TWV0aG9kRGVjb3JhdG9yVXNlc01pbml1bXVtVGltZW91dChzZWxmKToKLSAgICB0ZXN0X29iaiA9IHNlbGYuX01ldGhvZERlY29yYXRvclRlc3RPYmplY3QoCi0gICAgICAgIHNlbGYsIGRlZmF1bHRfdGltZW91dD00MiwgZGVmYXVsdF9yZXRyaWVzPTMxKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEwMCwgdGVzdF9vYmouYWx3YXlzUmV0dXJuc1RpbWVvdXRXaXRoTWluKCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoNDEsIHRlc3Rfb2JqLmFsd2F5c1JldHVybnNUaW1lb3V0V2l0aE1pbih0aW1lb3V0PTQxKSkKLQotICBkZWYgdGVzdE1ldGhvZERlY29yYXRvclRyYW5zbGF0ZXNSZXJhaXNlckV4Y2VwdGlvbnMoc2VsZik6Ci0gICAgdGVzdF9vYmogPSBzZWxmLl9NZXRob2REZWNvcmF0b3JUZXN0T2JqZWN0KHNlbGYpCi0KLSAgICBleGNlcHRpb25fZGVzYyA9ICdSZXJhaXNlciB0aHJlYWQgdGltZW91dCBlcnJvcicKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZFRpbWVvdXRFcnJvcikgYXMgZToKLSAgICAgIHRlc3Rfb2JqLmFsd2F5c1JhaXNlc1Byb3ZpZGVkRXhjZXB0aW9uKAotICAgICAgICAgIHJlcmFpc2VyX3RocmVhZC5UaW1lb3V0RXJyb3IoZXhjZXB0aW9uX2Rlc2MpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4Y2VwdGlvbl9kZXNjLCBzdHIoZS5leGNlcHRpb24pKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2RldmljZV9ibGFja2xpc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2RldmljZV9ibGFja2xpc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMGU5OTYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZXZpY2VfYmxhY2tsaXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQganNvbgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHRpbWUKLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotY2xhc3MgQmxhY2tsaXN0KG9iamVjdCk6Ci0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgotICAgIHNlbGYuX2JsYWNrbGlzdF9sb2NrID0gdGhyZWFkaW5nLlJMb2NrKCkKLSAgICBzZWxmLl9wYXRoID0gcGF0aAotCi0gIGRlZiBSZWFkKHNlbGYpOgotICAgICIiIlJlYWRzIHRoZSBibGFja2xpc3QgZnJvbSB0aGUgYmxhY2tsaXN0IGZpbGUuCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBkaWN0IGNvbnRhaW5pbmcgYmFkIGRldmljZXMuCi0gICAgIiIiCi0gICAgd2l0aCBzZWxmLl9ibGFja2xpc3RfbG9jazoKLSAgICAgIGJsYWNrbGlzdCA9IGRpY3QoKQotICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuX3BhdGgpOgotICAgICAgICByZXR1cm4gYmxhY2tsaXN0Ci0KLSAgICAgIHRyeToKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuX3BhdGgsICdyJykgYXMgZjoKLSAgICAgICAgICBibGFja2xpc3QgPSBqc29uLmxvYWQoZikKLSAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVmFsdWVFcnJvcikgYXMgZToKLSAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ1VuYWJsZSB0byByZWFkIGJsYWNrbGlzdDogJXMnLCBzdHIoZSkpCi0gICAgICAgIG9zLnJlbW92ZShzZWxmLl9wYXRoKQotCi0gICAgICBpZiBub3QgaXNpbnN0YW5jZShibGFja2xpc3QsIGRpY3QpOgotICAgICAgICBsb2dnZXIud2FybmluZygnSWdub3JpbmcgJXM6ICVzIChhIGRpY3Qgd2FzIGV4cGVjdGVkIGluc3RlYWQpJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhdGgsIGJsYWNrbGlzdCkKLSAgICAgICAgYmxhY2tsaXN0ID0gZGljdCgpCi0KLSAgICAgIHJldHVybiBibGFja2xpc3QKLQotICBkZWYgV3JpdGUoc2VsZiwgYmxhY2tsaXN0KToKLSAgICAiIiJXcml0ZXMgdGhlIHByb3ZpZGVkIGJsYWNrbGlzdCB0byB0aGUgYmxhY2tsaXN0IGZpbGUuCi0KLSAgICBBcmdzOgotICAgICAgYmxhY2tsaXN0OiBsaXN0IG9mIGJhZCBkZXZpY2VzIHRvIHdyaXRlIHRvIHRoZSBibGFja2xpc3QgZmlsZS4KLSAgICAiIiIKLSAgICB3aXRoIHNlbGYuX2JsYWNrbGlzdF9sb2NrOgotICAgICAgd2l0aCBvcGVuKHNlbGYuX3BhdGgsICd3JykgYXMgZjoKLSAgICAgICAganNvbi5kdW1wKGJsYWNrbGlzdCwgZikKLQotICBkZWYgRXh0ZW5kKHNlbGYsIGRldmljZXMsIHJlYXNvbj0ndW5rbm93bicpOgotICAgICIiIkFkZHMgZGV2aWNlcyB0byBibGFja2xpc3QgZmlsZS4KLQotICAgIEFyZ3M6Ci0gICAgICBkZXZpY2VzOiBsaXN0IG9mIGJhZCBkZXZpY2VzIHRvIGJlIGFkZGVkIHRvIHRoZSBibGFja2xpc3QgZmlsZS4KLSAgICAgIHJlYXNvbjogc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHJlYXNvbiBmb3IgYmxhY2tsaXN0IChlZzogJ3VuYXV0aG9yaXplZCcpCi0gICAgIiIiCi0gICAgdGltZXN0YW1wID0gdGltZS50aW1lKCkKLSAgICBldmVudF9pbmZvID0gewotICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLAotICAgICAgICAncmVhc29uJzogcmVhc29uLAotICAgIH0KLSAgICBkZXZpY2VfZGljdHMgPSB7ZGV2aWNlOiBldmVudF9pbmZvIGZvciBkZXZpY2UgaW4gZGV2aWNlc30KLSAgICBsb2dnZXIuaW5mbygnQWRkaW5nICVzIHRvIGJsYWNrbGlzdCAlcyBmb3IgcmVhc29uOiAlcycsCi0gICAgICAgICAgICAgICAgICcsJy5qb2luKGRldmljZXMpLCBzZWxmLl9wYXRoLCByZWFzb24pCi0gICAgd2l0aCBzZWxmLl9ibGFja2xpc3RfbG9jazoKLSAgICAgIGJsYWNrbGlzdCA9IHNlbGYuUmVhZCgpCi0gICAgICBibGFja2xpc3QudXBkYXRlKGRldmljZV9kaWN0cykKLSAgICAgIHNlbGYuV3JpdGUoYmxhY2tsaXN0KQotCi0gIGRlZiBSZXNldChzZWxmKToKLSAgICAiIiJFcmFzZXMgdGhlIGJsYWNrbGlzdCBmaWxlIGlmIGl0IGV4aXN0cy4iIiIKLSAgICBsb2dnZXIuaW5mbygnUmVzZXR0aW5nIGJsYWNrbGlzdCAlcycsIHNlbGYuX3BhdGgpCi0gICAgd2l0aCBzZWxmLl9ibGFja2xpc3RfbG9jazoKLSAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX3BhdGgpOgotICAgICAgICBvcy5yZW1vdmUoc2VsZi5fcGF0aCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX2JsYWNrbGlzdF90ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZXZpY2VfYmxhY2tsaXN0X3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNDRkYTUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZXZpY2VfYmxhY2tsaXN0X3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfYmxhY2tsaXN0Ci0KLQotY2xhc3MgRGV2aWNlQmxhY2tsaXN0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RCbGFja2xpc3RGaWxlRG9lc05vdEV4aXN0KHNlbGYpOgotICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgYmxhY2tsaXN0X2ZpbGU6Ci0gICAgICAjIEFsbG93IHRoZSB0ZW1wb3JhcnkgZmlsZSB0byBiZSBkZWxldGVkLgotICAgICAgcGFzcwotCi0gICAgdGVzdF9ibGFja2xpc3QgPSBkZXZpY2VfYmxhY2tsaXN0LkJsYWNrbGlzdChibGFja2xpc3RfZmlsZS5uYW1lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHt9LCB0ZXN0X2JsYWNrbGlzdC5SZWFkKCkpCi0KLSAgZGVmIHRlc3RCbGFja2xpc3RGaWxlSXNFbXB0eShzZWxmKToKLSAgICB0cnk6Ci0gICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpIGFzIGJsYWNrbGlzdF9maWxlOgotICAgICAgICAjIEFsbG93IHRoZSB0ZW1wb3JhcnkgZmlsZSB0byBiZSBjbG9zZWQuCi0gICAgICAgIHBhc3MKLQotICAgICAgdGVzdF9ibGFja2xpc3QgPSBkZXZpY2VfYmxhY2tsaXN0LkJsYWNrbGlzdChibGFja2xpc3RfZmlsZS5uYW1lKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoe30sIHRlc3RfYmxhY2tsaXN0LlJlYWQoKSkKLQotICAgIGZpbmFsbHk6Ci0gICAgICBpZiBvcy5wYXRoLmV4aXN0cyhibGFja2xpc3RfZmlsZS5uYW1lKToKLSAgICAgICAgb3MucmVtb3ZlKGJsYWNrbGlzdF9maWxlLm5hbWUpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2RldmljZV9lcnJvcnMucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2RldmljZV9lcnJvcnMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZjM2MTUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZXZpY2VfZXJyb3JzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiCi1FeGNlcHRpb24gY2xhc3NlcyByYWlzZWQgYnkgQWRiV3JhcHBlciBhbmQgRGV2aWNlVXRpbHMuCi0KLVRoZSBjbGFzcyBoaWVyYXJjaHkgZm9yIGRldmljZSBleGNlcHRpb25zIGlzOgotCi0gICAgYmFzZV9lcnJvci5CYXNlRXJyb3IKLSAgICAgKy0tIENvbW1hbmRGYWlsZWRFcnJvcgotICAgICB8ICAgICstLSBBZGJDb21tYW5kRmFpbGVkRXJyb3IKLSAgICAgfCAgICB8ICAgICstLSBBZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcgotICAgICB8ICAgICstLSBGYXN0Ym9vdENvbW1hbmRGYWlsZWRFcnJvcgotICAgICB8ICAgICstLSBEZXZpY2VWZXJzaW9uRXJyb3IKLSAgICAgfCAgICArLS0gRGV2aWNlQ2hhcmdpbmdFcnJvcgotICAgICArLS0gQ29tbWFuZFRpbWVvdXRFcnJvcgotICAgICArLS0gRGV2aWNlVW5yZWFjaGFibGVFcnJvcgotICAgICArLS0gTm9EZXZpY2VzRXJyb3IKLSAgICAgKy0tIE11bHRpcGxlRGV2aWNlc0Vycm9yCi0gICAgICstLSBOb0FkYkVycm9yCi0KLSIiIgotCi1mcm9tIGRldmlsIGltcG9ydCBiYXNlX2Vycm9yCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBjbWRfaGVscGVyCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBwYXJhbGxlbGl6ZXIKLQotCi1jbGFzcyBDb21tYW5kRmFpbGVkRXJyb3IoYmFzZV9lcnJvci5CYXNlRXJyb3IpOgotICAiIiJFeGNlcHRpb24gZm9yIGNvbW1hbmQgZmFpbHVyZXMuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIGRldmljZV9zZXJpYWw9Tm9uZSk6Ci0gICAgZGV2aWNlX2xlYWRlciA9ICcoZGV2aWNlOiAlcyknICUgZGV2aWNlX3NlcmlhbAotICAgIGlmIGRldmljZV9zZXJpYWwgaXMgbm90IE5vbmUgYW5kIG5vdCBtZXNzYWdlLnN0YXJ0c3dpdGgoZGV2aWNlX2xlYWRlcik6Ci0gICAgICBtZXNzYWdlID0gJyVzICVzJyAlIChkZXZpY2VfbGVhZGVyLCBtZXNzYWdlKQotICAgIHNlbGYuZGV2aWNlX3NlcmlhbCA9IGRldmljZV9zZXJpYWwKLSAgICBzdXBlcihDb21tYW5kRmFpbGVkRXJyb3IsIHNlbGYpLl9faW5pdF9fKG1lc3NhZ2UpCi0KLSAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgcmV0dXJuIChzdXBlcihDb21tYW5kRmFpbGVkRXJyb3IsIHNlbGYpLl9fZXFfXyhvdGhlcikKLSAgICAgICAgICAgIGFuZCBzZWxmLmRldmljZV9zZXJpYWwgPT0gb3RoZXIuZGV2aWNlX3NlcmlhbCkKLQotICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKLQotCi1jbGFzcyBfQmFzZUNvbW1hbmRGYWlsZWRFcnJvcihDb21tYW5kRmFpbGVkRXJyb3IpOgotICAiIiJCYXNlIEV4Y2VwdGlvbiBmb3IgYWRiIGFuZCBmYXN0Ym9vdCBjb21tYW5kIGZhaWx1cmVzLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzLCBvdXRwdXQsIHN0YXR1cz1Ob25lLCBkZXZpY2Vfc2VyaWFsPU5vbmUsCi0gICAgICAgICAgICAgICBtZXNzYWdlPU5vbmUpOgotICAgIHNlbGYuYXJncyA9IGFyZ3MKLSAgICBzZWxmLm91dHB1dCA9IG91dHB1dAotICAgIHNlbGYuc3RhdHVzID0gc3RhdHVzCi0gICAgaWYgbm90IG1lc3NhZ2U6Ci0gICAgICBhZGJfY21kID0gJyAnLmpvaW4oY21kX2hlbHBlci5TaW5nbGVRdW90ZShhcmcpIGZvciBhcmcgaW4gc2VsZi5hcmdzKQotICAgICAgbWVzc2FnZSA9IFsnYWRiICVzOiBmYWlsZWQgJyAlIGFkYl9jbWRdCi0gICAgICBpZiBzdGF0dXM6Ci0gICAgICAgIG1lc3NhZ2UuYXBwZW5kKCd3aXRoIGV4aXQgc3RhdHVzICVzICcgJSBzZWxmLnN0YXR1cykKLSAgICAgIGlmIG91dHB1dDoKLSAgICAgICAgbWVzc2FnZS5hcHBlbmQoJ2FuZCBvdXRwdXQ6XG4nKQotICAgICAgICBtZXNzYWdlLmV4dGVuZCgnLSAlc1xuJyAlIGxpbmUgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIG1lc3NhZ2UuYXBwZW5kKCdhbmQgbm8gb3V0cHV0LicpCi0gICAgICBtZXNzYWdlID0gJycuam9pbihtZXNzYWdlKQotICAgIHN1cGVyKF9CYXNlQ29tbWFuZEZhaWxlZEVycm9yLCBzZWxmKS5fX2luaXRfXyhtZXNzYWdlLCBkZXZpY2Vfc2VyaWFsKQotCi0gIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgIHJldHVybiAoc3VwZXIoX0Jhc2VDb21tYW5kRmFpbGVkRXJyb3IsIHNlbGYpLl9fZXFfXyhvdGhlcikKLSAgICAgICAgICAgIGFuZCBzZWxmLmFyZ3MgPT0gb3RoZXIuYXJncwotICAgICAgICAgICAgYW5kIHNlbGYub3V0cHV0ID09IG90aGVyLm91dHB1dAotICAgICAgICAgICAgYW5kIHNlbGYuc3RhdHVzID09IG90aGVyLnN0YXR1cykKLQotICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKLQotICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKLSAgICAiIiJTdXBwb3J0IHBpY2tsaW5nLiIiIgotICAgIHJlc3VsdCA9IFtOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lXQotICAgIHN1cGVyX3Jlc3VsdCA9IHN1cGVyKF9CYXNlQ29tbWFuZEZhaWxlZEVycm9yLCBzZWxmKS5fX3JlZHVjZV9fKCkKLSAgICBmb3IgaSBpbiByYW5nZShsZW4oc3VwZXJfcmVzdWx0KSk6Ci0gICAgICByZXN1bHRbaV0gPSBzdXBlcl9yZXN1bHRbaV0KLQotICAgICMgVXBkYXRlIHRoZSBhcmdzIHVzZWQgdG8gcmVjb25zdHJ1Y3QgdGhpcyBleGNlcHRpb24uCi0gICAgcmVzdWx0WzFdID0gKAotICAgICAgICBzZWxmLmFyZ3MsIHNlbGYub3V0cHV0LCBzZWxmLnN0YXR1cywgc2VsZi5kZXZpY2Vfc2VyaWFsLCBzZWxmLm1lc3NhZ2UpCi0gICAgcmV0dXJuIHR1cGxlKHJlc3VsdCkKLQotCi1jbGFzcyBBZGJDb21tYW5kRmFpbGVkRXJyb3IoX0Jhc2VDb21tYW5kRmFpbGVkRXJyb3IpOgotICAiIiJFeGNlcHRpb24gZm9yIGFkYiBjb21tYW5kIGZhaWx1cmVzLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzLCBvdXRwdXQsIHN0YXR1cz1Ob25lLCBkZXZpY2Vfc2VyaWFsPU5vbmUsCi0gICAgICAgICAgICAgICBtZXNzYWdlPU5vbmUpOgotICAgIHN1cGVyKEFkYkNvbW1hbmRGYWlsZWRFcnJvciwgc2VsZikuX19pbml0X18oCi0gICAgICAgIGFyZ3MsIG91dHB1dCwgc3RhdHVzPXN0YXR1cywgbWVzc2FnZT1tZXNzYWdlLAotICAgICAgICBkZXZpY2Vfc2VyaWFsPWRldmljZV9zZXJpYWwpCi0KLQotY2xhc3MgRmFzdGJvb3RDb21tYW5kRmFpbGVkRXJyb3IoX0Jhc2VDb21tYW5kRmFpbGVkRXJyb3IpOgotICAiIiJFeGNlcHRpb24gZm9yIGZhc3Rib290IGNvbW1hbmQgZmFpbHVyZXMuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3MsIG91dHB1dCwgc3RhdHVzPU5vbmUsIGRldmljZV9zZXJpYWw9Tm9uZSwKLSAgICAgICAgICAgICAgIG1lc3NhZ2U9Tm9uZSk6Ci0gICAgc3VwZXIoRmFzdGJvb3RDb21tYW5kRmFpbGVkRXJyb3IsIHNlbGYpLl9faW5pdF9fKAotICAgICAgICBhcmdzLCBvdXRwdXQsIHN0YXR1cz1zdGF0dXMsIG1lc3NhZ2U9bWVzc2FnZSwKLSAgICAgICAgZGV2aWNlX3NlcmlhbD1kZXZpY2Vfc2VyaWFsKQotCi0KLWNsYXNzIERldmljZVZlcnNpb25FcnJvcihDb21tYW5kRmFpbGVkRXJyb3IpOgotICAiIiJFeGNlcHRpb24gZm9yIGRldmljZSB2ZXJzaW9uIGZhaWx1cmVzLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlLCBkZXZpY2Vfc2VyaWFsPU5vbmUpOgotICAgIHN1cGVyKERldmljZVZlcnNpb25FcnJvciwgc2VsZikuX19pbml0X18obWVzc2FnZSwgZGV2aWNlX3NlcmlhbCkKLQotCi1jbGFzcyBBZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcihBZGJDb21tYW5kRmFpbGVkRXJyb3IpOgotICAiIiJFeGNlcHRpb24gZm9yIHNoZWxsIGNvbW1hbmQgZmFpbHVyZXMgcnVuIHZpYSBhZGIuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmQsIG91dHB1dCwgc3RhdHVzLCBkZXZpY2Vfc2VyaWFsPU5vbmUpOgotICAgIHNlbGYuY29tbWFuZCA9IGNvbW1hbmQKLSAgICBtZXNzYWdlID0gWydzaGVsbCBjb21tYW5kIHJ1biB2aWEgYWRiIGZhaWxlZCBvbiB0aGUgZGV2aWNlOlxuJywKLSAgICAgICAgICAgICAgICcgIGNvbW1hbmQ6ICVzXG4nICUgY29tbWFuZF0KLSAgICBtZXNzYWdlLmFwcGVuZCgnICBleGl0IHN0YXR1czogJXNcbicgJSBzdGF0dXMpCi0gICAgaWYgb3V0cHV0OgotICAgICAgbWVzc2FnZS5hcHBlbmQoJyAgb3V0cHV0OlxuJykKLSAgICAgIGlmIGlzaW5zdGFuY2Uob3V0cHV0LCBiYXNlc3RyaW5nKToKLSAgICAgICAgb3V0cHV0X2xpbmVzID0gb3V0cHV0LnNwbGl0bGluZXMoKQotICAgICAgZWxzZToKLSAgICAgICAgb3V0cHV0X2xpbmVzID0gb3V0cHV0Ci0gICAgICBtZXNzYWdlLmV4dGVuZCgnICAtICVzXG4nICUgbGluZSBmb3IgbGluZSBpbiBvdXRwdXRfbGluZXMpCi0gICAgZWxzZToKLSAgICAgIG1lc3NhZ2UuYXBwZW5kKCIgIG91dHB1dDogJydcbiIpCi0gICAgbWVzc2FnZSA9ICcnLmpvaW4obWVzc2FnZSkKLSAgICBzdXBlcihBZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvciwgc2VsZikuX19pbml0X18oCi0gICAgICBbJ3NoZWxsJywgY29tbWFuZF0sIG91dHB1dCwgc3RhdHVzLCBkZXZpY2Vfc2VyaWFsLCBtZXNzYWdlKQotCi0gIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgotICAgICIiIlN1cHBvcnQgcGlja2xpbmcuIiIiCi0gICAgcmVzdWx0ID0gW05vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmVdCi0gICAgc3VwZXJfcmVzdWx0ID0gc3VwZXIoQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3IsIHNlbGYpLl9fcmVkdWNlX18oKQotICAgIGZvciBpIGluIHJhbmdlKGxlbihzdXBlcl9yZXN1bHQpKToKLSAgICAgIHJlc3VsdFtpXSA9IHN1cGVyX3Jlc3VsdFtpXQotCi0gICAgIyBVcGRhdGUgdGhlIGFyZ3MgdXNlZCB0byByZWNvbnN0cnVjdCB0aGlzIGV4Y2VwdGlvbi4KLSAgICByZXN1bHRbMV0gPSAoc2VsZi5jb21tYW5kLCBzZWxmLm91dHB1dCwgc2VsZi5zdGF0dXMsIHNlbGYuZGV2aWNlX3NlcmlhbCkKLSAgICByZXR1cm4gdHVwbGUocmVzdWx0KQotCi0KLWNsYXNzIENvbW1hbmRUaW1lb3V0RXJyb3IoYmFzZV9lcnJvci5CYXNlRXJyb3IpOgotICAiIiJFeGNlcHRpb24gZm9yIGNvbW1hbmQgdGltZW91dHMuIiIiCi0gIHBhc3MKLQotCi1jbGFzcyBEZXZpY2VVbnJlYWNoYWJsZUVycm9yKGJhc2VfZXJyb3IuQmFzZUVycm9yKToKLSAgIiIiRXhjZXB0aW9uIGZvciBkZXZpY2UgdW5yZWFjaGFibGUgZmFpbHVyZXMuIiIiCi0gIHBhc3MKLQotCi1jbGFzcyBOb0RldmljZXNFcnJvcihiYXNlX2Vycm9yLkJhc2VFcnJvcik6Ci0gICIiIkV4Y2VwdGlvbiBmb3IgaGF2aW5nIG5vIGRldmljZXMgYXR0YWNoZWQuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZz1Ob25lKToKLSAgICBzdXBlcihOb0RldmljZXNFcnJvciwgc2VsZikuX19pbml0X18oCi0gICAgICAgIG1zZyBvciAnTm8gZGV2aWNlcyBhdHRhY2hlZC4nLCBpc19pbmZyYV9lcnJvcj1UcnVlKQotCi0KLWNsYXNzIE11bHRpcGxlRGV2aWNlc0Vycm9yKGJhc2VfZXJyb3IuQmFzZUVycm9yKToKLSAgIiIiRXhjZXB0aW9uIGZvciBoYXZpbmcgbXVsdGlwbGUgYXR0YWNoZWQgZGV2aWNlcyB3aXRob3V0IHNlbGVjdGluZyBvbmUuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGRldmljZXMpOgotICAgIHBhcmFsbGVsX2RldmljZXMgPSBwYXJhbGxlbGl6ZXIuUGFyYWxsZWxpemVyKGRldmljZXMpCi0gICAgZGVzY3JpcHRpb25zID0gcGFyYWxsZWxfZGV2aWNlcy5wTWFwKAotICAgICAgICBsYW1iZGEgZDogZC5idWlsZF9kZXNjcmlwdGlvbikucEdldChOb25lKQotICAgIG1zZyA9ICgnTW9yZSB0aGFuIG9uZSBkZXZpY2UgYXZhaWxhYmxlLiBVc2UgLWQvLS1kZXZpY2UgdG8gc2VsZWN0IGEgZGV2aWNlICcKLSAgICAgICAgICAgJ2J5IHNlcmlhbC5cblxuQXZhaWxhYmxlIGRldmljZXM6XG4nKQotICAgIGZvciBkLCBkZXNjIGluIHppcChkZXZpY2VzLCBkZXNjcmlwdGlvbnMpOgotICAgICAgbXNnICs9ICcgICVzICglcylcbicgJSAoZCwgZGVzYykKLQotICAgIHN1cGVyKE11bHRpcGxlRGV2aWNlc0Vycm9yLCBzZWxmKS5fX2luaXRfXyhtc2csIGlzX2luZnJhX2Vycm9yPVRydWUpCi0KLQotY2xhc3MgTm9BZGJFcnJvcihiYXNlX2Vycm9yLkJhc2VFcnJvcik6Ci0gICIiIkV4Y2VwdGlvbiBmb3IgYmVpbmcgdW5hYmxlIHRvIGZpbmQgQURCLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBtc2c9Tm9uZSk6Ci0gICAgc3VwZXIoTm9BZGJFcnJvciwgc2VsZikuX19pbml0X18oCi0gICAgICAgIG1zZyBvciAnVW5hYmxlIHRvIGZpbmQgYWRiLicsIGlzX2luZnJhX2Vycm9yPVRydWUpCi0KLQotY2xhc3MgRGV2aWNlQ2hhcmdpbmdFcnJvcihDb21tYW5kRmFpbGVkRXJyb3IpOgotICAiIiJFeGNlcHRpb24gZm9yIGRldmljZSBjaGFyZ2luZyBlcnJvcnMuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIGRldmljZV9zZXJpYWw9Tm9uZSk6Ci0gICAgc3VwZXIoRGV2aWNlQ2hhcmdpbmdFcnJvciwgc2VsZikuX19pbml0X18obWVzc2FnZSwgZGV2aWNlX3NlcmlhbCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX2Vycm9yc190ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZXZpY2VfZXJyb3JzX3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDY4YTRmMTYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZXZpY2VfZXJyb3JzX3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBwaWNrbGUKLWltcG9ydCBzeXMKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9lcnJvcnMKLQotCi1jbGFzcyBEZXZpY2VFcnJvcnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgYXNzZXJ0SXNQaWNrbGFibGUoc2VsZiwgb3JpZ2luYWwpOgotICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMob3JpZ2luYWwpCi0gICAgcmVjb25zdHJ1Y3RlZCA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9yaWdpbmFsLCByZWNvbnN0cnVjdGVkKQotCi0gIGRlZiB0ZXN0UGlja2xhYmxlX0FkYkNvbW1hbmRGYWlsZWRFcnJvcihzZWxmKToKLSAgICBvcmlnaW5hbCA9IGRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICBbJ3RoZXNlJywgJ2FyZScsICdhZGInLCAnYXJncyddLCAnYWRiIGZhaWx1cmUgb3V0cHV0Jywgc3RhdHVzPSc6KCcsCi0gICAgICAgIGRldmljZV9zZXJpYWw9JzAxMjM0NTY3ODlhYmNkZWYnKQotICAgIHNlbGYuYXNzZXJ0SXNQaWNrbGFibGUob3JpZ2luYWwpCi0KLSAgZGVmIHRlc3RQaWNrbGFibGVfQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3Ioc2VsZik6Ci0gICAgb3JpZ2luYWwgPSBkZXZpY2VfZXJyb3JzLkFkYlNoZWxsQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAnZm9vJywgJ2Vycm9uZW91cyBmb28gb3V0cHV0JywgJzEnLCBkZXZpY2Vfc2VyaWFsPScwMTIzNDU2Nzg5YWJjZGVmJykKLSAgICBzZWxmLmFzc2VydElzUGlja2xhYmxlKG9yaWdpbmFsKQotCi0gIGRlZiB0ZXN0UGlja2xhYmxlX0NvbW1hbmRGYWlsZWRFcnJvcihzZWxmKToKLSAgICBvcmlnaW5hbCA9IGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAnc2FtcGxlIGNvbW1hbmQgZmFpbGVkJykKLSAgICBzZWxmLmFzc2VydElzUGlja2xhYmxlKG9yaWdpbmFsKQotCi0gIGRlZiB0ZXN0UGlja2xhYmxlX0NvbW1hbmRUaW1lb3V0RXJyb3Ioc2VsZik6Ci0gICAgb3JpZ2luYWwgPSBkZXZpY2VfZXJyb3JzLkNvbW1hbmRUaW1lb3V0RXJyb3IoCi0gICAgICAgICdNeSBmYWtlIGNvbW1hbmQgdGltZWQgb3V0IDooJykKLSAgICBzZWxmLmFzc2VydElzUGlja2xhYmxlKG9yaWdpbmFsKQotCi0gIGRlZiB0ZXN0UGlja2xhYmxlX0RldmljZUNoYXJnaW5nRXJyb3Ioc2VsZik6Ci0gICAgb3JpZ2luYWwgPSBkZXZpY2VfZXJyb3JzLkRldmljZUNoYXJnaW5nRXJyb3IoCi0gICAgICAgICdGYWtlIGRldmljZSBmYWlsZWQgdG8gY2hhcmdlJykKLSAgICBzZWxmLmFzc2VydElzUGlja2xhYmxlKG9yaWdpbmFsKQotCi0gIGRlZiB0ZXN0UGlja2xhYmxlX0RldmljZVVucmVhY2hhYmxlRXJyb3Ioc2VsZik6Ci0gICAgb3JpZ2luYWwgPSBkZXZpY2VfZXJyb3JzLkRldmljZVVucmVhY2hhYmxlRXJyb3IKLSAgICBzZWxmLmFzc2VydElzUGlja2xhYmxlKG9yaWdpbmFsKQotCi0gIGRlZiB0ZXN0UGlja2xhYmxlX0Zhc3Rib290Q29tbWFuZEZhaWxlZEVycm9yKHNlbGYpOgotICAgIG9yaWdpbmFsID0gZGV2aWNlX2Vycm9ycy5GYXN0Ym9vdENvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgWyd0aGVzZScsICdhcmUnLCAnZmFzdGJvb3QnLCAnYXJncyddLCAnZmFzdGJvb3QgZmFpbHVyZSBvdXRwdXQnLAotICAgICAgICBzdGF0dXM9JzooJywgZGV2aWNlX3NlcmlhbD0nMDEyMzQ1Njc4OWFiY2RlZicpCi0gICAgc2VsZi5hc3NlcnRJc1BpY2tsYWJsZShvcmlnaW5hbCkKLQotICBkZWYgdGVzdFBpY2tsYWJsZV9NdWx0aXBsZURldmljZXNFcnJvcihzZWxmKToKLSAgICAjIFRPRE8oamJ1ZG9yaWNrKTogSW1wbGVtZW50IHRoaXMgYWZ0ZXIgaW1wbGVtZW50aW5nIGEgc3RhYmxlIERldmljZVV0aWxzCi0gICAgIyBmYWtlLiBodHRwczovL2dpdGh1Yi5jb20vY2F0YXB1bHQtcHJvamVjdC9jYXRhcHVsdC9pc3N1ZXMvMzE0NQotICAgIHBhc3MKLQotICBkZWYgdGVzdFBpY2tsYWJsZV9Ob0FkYkVycm9yKHNlbGYpOgotICAgIG9yaWdpbmFsID0gZGV2aWNlX2Vycm9ycy5Ob0FkYkVycm9yKCkKLSAgICBzZWxmLmFzc2VydElzUGlja2xhYmxlKG9yaWdpbmFsKQotCi0gIGRlZiB0ZXN0UGlja2xhYmxlX05vRGV2aWNlc0Vycm9yKHNlbGYpOgotICAgIG9yaWdpbmFsID0gZGV2aWNlX2Vycm9ycy5Ob0RldmljZXNFcnJvcigpCi0gICAgc2VsZi5hc3NlcnRJc1BpY2tsYWJsZShvcmlnaW5hbCkKLQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5leGl0KHVuaXR0ZXN0Lm1haW4oKSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX2xpc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2RldmljZV9saXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmJiMGYxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX2xpc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIkEgbW9kdWxlIHRvIGtlZXAgdHJhY2sgb2YgZGV2aWNlcyBhY3Jvc3MgYnVpbGRzLiIiIgotCi1pbXBvcnQganNvbgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotCi1sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1kZWYgR2V0UGVyc2lzdGVudERldmljZUxpc3QoZmlsZV9uYW1lKToKLSAgIiIiUmV0dXJucyBhIGxpc3Qgb2YgZGV2aWNlcy4KLQotICBBcmdzOgotICAgIGZpbGVfbmFtZTogdGhlIGZpbGUgbmFtZSBjb250YWluaW5nIGEgbGlzdCBvZiBkZXZpY2VzLgotCi0gIFJldHVybnM6IExpc3Qgb2YgZGV2aWNlIHNlcmlhbCBudW1iZXJzIHRoYXQgd2VyZSBvbiB0aGUgYm90LgotICAiIiIKLSAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGZpbGVfbmFtZSk6Ci0gICAgbG9nZ2VyLndhcm5pbmcoIkRldmljZSBmaWxlICVzIGRvZXNuJ3QgZXhpc3QuIiwgZmlsZV9uYW1lKQotICAgIHJldHVybiBbXQotCi0gIHRyeToKLSAgICB3aXRoIG9wZW4oZmlsZV9uYW1lKSBhcyBmOgotICAgICAgZGV2aWNlcyA9IGpzb24ubG9hZChmKQotICAgIGlmIG5vdCBpc2luc3RhbmNlKGRldmljZXMsIGxpc3QpIG9yIG5vdCBhbGwoaXNpbnN0YW5jZShkLCBiYXNlc3RyaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGQgaW4gZGV2aWNlcyk6Ci0gICAgICBsb2dnZXIud2FybmluZygnVW5yZWNvZ25pemVkIGRldmljZSBmaWxlIGZvcm1hdDogJXMnLCBkZXZpY2VzKQotICAgICAgcmV0dXJuIFtdCi0gICAgcmV0dXJuIFtkIGZvciBkIGluIGRldmljZXMgaWYgZCAhPSAnKGVycm9yKSddCi0gIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgIGxvZ2dlci5leGNlcHRpb24oCi0gICAgICAgICdFcnJvciByZWFkaW5nIGRldmljZSBmaWxlICVzLiBGYWxsaW5nIGJhY2sgdG8gb2xkIGZvcm1hdC4nLCBmaWxlX25hbWUpCi0KLSAgIyBUT0RPKGJwYXN0ZW5lKSBSZW1vdmUgc3VwcG9ydCBmb3Igb2xkIHVuc3RydWN0dXJlZCBmaWxlIGZvcm1hdC4KLSAgd2l0aCBvcGVuKGZpbGVfbmFtZSkgYXMgZjoKLSAgICByZXR1cm4gW2QgZm9yIGQgaW4gZi5yZWFkKCkuc3BsaXRsaW5lcygpIGlmIGQgIT0gJyhlcnJvciknXQotCi0KLWRlZiBXcml0ZVBlcnNpc3RlbnREZXZpY2VMaXN0KGZpbGVfbmFtZSwgZGV2aWNlX2xpc3QpOgotICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGZpbGVfbmFtZSkKLSAgYXNzZXJ0IGlzaW5zdGFuY2UoZGV2aWNlX2xpc3QsIGxpc3QpCi0gICMgSWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggQURCICIoZXJyb3IpIiBjYW4gYmUgYWRkZWQgdG8gdGhlIGRldmljZSBsaXN0LgotICAjIFRoZXNlIHNob3VsZCBiZSByZW1vdmVkIGJlZm9yZSBzYXZpbmcuCi0gIGRldmljZV9saXN0ID0gW2QgZm9yIGQgaW4gZGV2aWNlX2xpc3QgaWYgZCAhPSAnKGVycm9yKSddCi0gIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICBvcy5tYWtlZGlycyhwYXRoKQotICB3aXRoIG9wZW4oZmlsZV9uYW1lLCAndycpIGFzIGY6Ci0gICAganNvbi5kdW1wKGRldmljZV9saXN0LCBmKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZXZpY2Vfc2lnbmFsLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZXZpY2Vfc2lnbmFsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2VjNDZkLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX3NpZ25hbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiRGVmaW5lcyBjb25zdGFudHMgZm9yIHNpZ25hbHMgdGhhdCBzaG91bGQgYmUgc3VwcG9ydGVkIG9uIGRldmljZXMuCi0KLU5vdGU6IE9idGFpbmVkIGJ5IHJ1bm5pbmcgYGtpbGwgLWxgIG9uIGEgdXNlciBkZXZpY2UuCi0iIiIKLQotCi1TSUdIVVAgPSAxICAjIEhhbmd1cAotU0lHSU5UID0gMiAgIyBJbnRlcnJ1cHQKLVNJR1FVSVQgPSAzICAjIFF1aXQKLVNJR0lMTCA9IDQgICMgSWxsZWdhbCBpbnN0cnVjdGlvbgotU0lHVFJBUCA9IDUgICMgVHJhcAotU0lHQUJSVCA9IDYgICMgQWJvcnRlZAotU0lHQlVTID0gNyAgIyBCdXMgZXJyb3IKLVNJR0ZQRSA9IDggICMgRmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uCi1TSUdLSUxMID0gOSAgIyBLaWxsZWQKLVNJR1VTUjEgPSAxMCAgIyBVc2VyIHNpZ25hbCAxCi1TSUdTRUdWID0gMTEgICMgU2VnbWVudGF0aW9uIGZhdWx0Ci1TSUdVU1IyID0gMTIgICMgVXNlciBzaWduYWwgMgotU0lHUElQRSA9IDEzICAjIEJyb2tlbiBwaXBlCi1TSUdBTFJNID0gMTQgICMgQWxhcm0gY2xvY2sKLVNJR1RFUk0gPSAxNSAgIyBUZXJtaW5hdGVkCi1TSUdTVEtGTFQgPSAxNiAgIyBTdGFjayBmYXVsdAotU0lHQ0hMRCA9IDE3ICAjIENoaWxkIGV4aXRlZAotU0lHQ09OVCA9IDE4ICAjIENvbnRpbnVlCi1TSUdTVE9QID0gMTkgICMgU3RvcHBlZCAoc2lnbmFsKQotU0lHVFNUUCA9IDIwICAjIFN0b3BwZWQKLVNJR1RUSU4gPSAyMSAgIyBTdG9wcGVkICh0dHkgaW5wdXQpCi1TSUdUVE9VID0gMjIgICMgU3RvcHBlZCAodHR5IG91dHB1dCkKLVNJR1VSRyA9IDIzICAjIFVyZ2VudCBJL08gY29uZGl0aW9uCi1TSUdYQ1BVID0gMjQgICMgQ1BVIHRpbWUgbGltaXQgZXhjZWVkZWQKLVNJR1hGU1ogPSAyNSAgIyBGaWxlIHNpemUgbGltaXQgZXhjZWVkZWQKLVNJR1ZUQUxSTSA9IDI2ICAjIFZpcnR1YWwgdGltZXIgZXhwaXJlZAotU0lHUFJPRiA9IDI3ICAjIFByb2ZpbGluZyB0aW1lciBleHBpcmVkCi1TSUdXSU5DSCA9IDI4ICAjIFdpbmRvdyBzaXplIGNoYW5nZWQKLVNJR0lPID0gMjkgICMgSS9PIHBvc3NpYmxlCi1TSUdQV1IgPSAzMCAgIyBQb3dlciBmYWlsdXJlCi1TSUdTWVMgPSAzMSAgIyBCYWQgc3lzdGVtIGNhbGwKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX3RlbXBfZmlsZS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX3RlbXBfZmlsZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRjYzUwOS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2RldmljZV90ZW1wX2ZpbGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJBIHRlbXAgZmlsZSB0aGF0IGF1dG9tYXRpY2FsbHkgZ2V0cyBwdXNoZWQgYW5kIGRlbGV0ZWQgZnJvbSBhIGRldmljZS4iIiIKLQotIyBweWxpbnQ6IGRpc2FibGU9VzA2MjIKLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBwb3NpeHBhdGgKLWltcG9ydCByYW5kb20KLWltcG9ydCB0aHJlYWRpbmcKLQotZnJvbSBkZXZpbCBpbXBvcnQgYmFzZV9lcnJvcgotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBjbWRfaGVscGVyCi0KLWxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWRlZiBfR2VuZXJhdGVOYW1lKHByZWZpeCwgc3VmZml4LCBkaXIpOgotICByYW5kb21faGV4ID0gaGV4KHJhbmRvbS5yYW5kaW50KDAsIDIgKiogNTIpKVsyOl0KLSAgcmV0dXJuIHBvc2l4cGF0aC5qb2luKGRpciwgJyVzLSVzJXMnICUgKHByZWZpeCwgcmFuZG9tX2hleCwgc3VmZml4KSkKLQotCi1jbGFzcyBEZXZpY2VUZW1wRmlsZShvYmplY3QpOgotICAiIiJBIG5hbWVkIHRlbXBvcmFyeSBmaWxlIG9uIGEgZGV2aWNlLgotCi0gIEJlaGF2ZXMgbGlrZSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUuCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBhZGIsIHN1ZmZpeD0nJywgcHJlZml4PSd0ZW1wX2ZpbGUnLCBkaXI9Jy9kYXRhL2xvY2FsL3RtcCcpOgotICAgICIiIkZpbmQgYW4gdW51c2VkIHRlbXBvcmFyeSBmaWxlIHBhdGggb24gdGhlIGRldmljZS4KLQotICAgIFdoZW4gdGhpcyBvYmplY3QgaXMgY2xvc2VkLCB0aGUgZmlsZSB3aWxsIGJlIGRlbGV0ZWQgb24gdGhlIGRldmljZS4KLQotICAgIEFyZ3M6Ci0gICAgICBhZGI6IEFuIGluc3RhbmNlIG9mIEFkYldyYXBwZXIKLSAgICAgIHN1ZmZpeDogVGhlIHN1ZmZpeCBvZiB0aGUgbmFtZSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUuCi0gICAgICBwcmVmaXg6IFRoZSBwcmVmaXggb2YgdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlLgotICAgICAgZGlyOiBUaGUgZGlyZWN0b3J5IG9uIHRoZSBkZXZpY2UgaW4gd2hpY2ggdGhlIHRlbXBvcmFyeSBmaWxlIHNob3VsZCBiZQotICAgICAgICBwbGFjZWQuCi0gICAgUmFpc2VzOgotICAgICAgVmFsdWVFcnJvciBpZiBhbnkgb2Ygc3VmZml4LCBwcmVmaXgsIG9yIGRpciBhcmUgTm9uZS4KLSAgICAiIiIKLSAgICBpZiBOb25lIGluIChkaXIsIHByZWZpeCwgc3VmZml4KToKLSAgICAgIG0gPSAnUHJvdmlkZWQgTm9uZSBwYXRoIGNvbXBvbmVudC4gKGRpcjogJXMsIHByZWZpeDogJXMsIHN1ZmZpeDogJXMpJyAlICgKLSAgICAgICAgICBkaXIsIHByZWZpeCwgc3VmZml4KQotICAgICAgcmFpc2UgVmFsdWVFcnJvcihtKQotCi0gICAgc2VsZi5fYWRiID0gYWRiCi0gICAgIyBQeXRob24ncyByYW5kb20gbW9kdWxlIHVzZSA1Mi1iaXQgbnVtYmVycyBhY2NvcmRpbmcgdG8gaXRzIGRvY3MuCi0gICAgc2VsZi5uYW1lID0gX0dlbmVyYXRlTmFtZShwcmVmaXgsIHN1ZmZpeCwgZGlyKQotICAgIHNlbGYubmFtZV9xdW90ZWQgPSBjbWRfaGVscGVyLlNpbmdsZVF1b3RlKHNlbGYubmFtZSkKLQotICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgIiIiRGVsZXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUgZnJvbSB0aGUgZGV2aWNlLiIiIgotICAgICMgaWdub3JlIGV4Y2VwdGlvbiBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGdvbmUuCi0gICAgZGVmIGRlbGV0ZV90ZW1wb3JhcnlfZmlsZSgpOgotICAgICAgdHJ5OgotICAgICAgICBzZWxmLl9hZGIuU2hlbGwoJ3JtIC1mICVzJyAlIHNlbGYubmFtZV9xdW90ZWQsIGV4cGVjdF9zdGF0dXM9Tm9uZSkKLSAgICAgIGV4Y2VwdCBiYXNlX2Vycm9yLkJhc2VFcnJvciBhcyBlOgotICAgICAgICAjIFdlIGRvbid0IHJlYWxseSBjYXJlLCBhbmQgc3RhY2sgdHJhY2VzIGNsb2cgdXAgdGhlIGxvZy4KLSAgICAgICAgIyBMb2cgYSB3YXJuaW5nIGFuZCBtb3ZlIG9uLgotICAgICAgICBsb2dnZXIud2FybmluZygnRmFpbGVkIHRvIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZSAlczogJXMnLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYW1lLCBzdHIoZSkpCi0KLSAgICAjIEl0IHNob3VsZG4ndCBtYXR0ZXIgd2hlbiB0aGUgdGVtcCBmaWxlIGdldHMgZGVsZXRlZCwgc28gZG8gc28KLSAgICAjIGFzeW5jaHJvbm91c2x5LgotICAgIHRocmVhZGluZy5UaHJlYWQoCi0gICAgICAgIHRhcmdldD1kZWxldGVfdGVtcG9yYXJ5X2ZpbGUsCi0gICAgICAgIG5hbWU9J2RlbGV0ZV90ZW1wb3JhcnlfZmlsZSglcyknICUgc2VsZi5fYWRiLkdldERldmljZVNlcmlhbCgpKS5zdGFydCgpCi0KLSAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICByZXR1cm4gc2VsZgotCi0gIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKLSAgICBzZWxmLmNsb3NlKCkKLQotCi1jbGFzcyBOYW1lZERldmljZVRlbXBvcmFyeURpcmVjdG9yeShvYmplY3QpOgotICAiIiJBIG5hbWVkIHRlbXBvcmFyeSBkaXJlY3Rvcnkgb24gYSBkZXZpY2UuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGFkYiwgc3VmZml4PScnLCBwcmVmaXg9J3RtcCcsIGRpcj0nL2RhdGEvbG9jYWwvdG1wJyk6Ci0gICAgIiIiRmluZCBhbiB1bnVzZWQgdGVtcG9yYXJ5IGRpcmVjdG9yeSBwYXRoIG9uIHRoZSBkZXZpY2UuIFRoZSBkaXJlY3RvcnkgaXMKLSAgICBub3QgY3JlYXRlZCB1bnRpbCBpdCBpcyB1c2VkIHdpdGggYSAnd2l0aCcgc3RhdGVtZW50LgotCi0gICAgV2hlbiB0aGlzIG9iamVjdCBpcyBjbG9zZWQsIHRoZSBkaXJlY3Rvcnkgd2lsbCBiZSBkZWxldGVkIG9uIHRoZSBkZXZpY2UuCi0KLSAgICBBcmdzOgotICAgICAgYWRiOiBBbiBpbnN0YW5jZSBvZiBBZGJXcmFwcGVyCi0gICAgICBzdWZmaXg6IFRoZSBzdWZmaXggb2YgdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuCi0gICAgICBwcmVmaXg6IFRoZSBwcmVmaXggb2YgdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuCi0gICAgICBkaXI6IFRoZSBkaXJlY3Rvcnkgb24gdGhlIGRldmljZSB3aGVyZSB0byBwbGFjZSB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KLSAgICBSYWlzZXM6Ci0gICAgICBWYWx1ZUVycm9yIGlmIGFueSBvZiBzdWZmaXgsIHByZWZpeCwgb3IgZGlyIGFyZSBOb25lLgotICAgICIiIgotICAgIHNlbGYuX2FkYiA9IGFkYgotICAgIHNlbGYubmFtZSA9IF9HZW5lcmF0ZU5hbWUocHJlZml4LCBzdWZmaXgsIGRpcikKLSAgICBzZWxmLm5hbWVfcXVvdGVkID0gY21kX2hlbHBlci5TaW5nbGVRdW90ZShzZWxmLm5hbWUpCi0KLSAgZGVmIGNsb3NlKHNlbGYpOgotICAgICIiIkRlbGV0ZXMgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgZnJvbSB0aGUgZGV2aWNlLiIiIgotICAgIGRlZiBkZWxldGVfdGVtcG9yYXJ5X2RpcigpOgotICAgICAgdHJ5OgotICAgICAgICBzZWxmLl9hZGIuU2hlbGwoJ3JtIC1yZiAlcycgJSBzZWxmLm5hbWUsIGV4cGVjdF9zdGF0dXM9Tm9uZSkKLSAgICAgIGV4Y2VwdCBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcjoKLSAgICAgICAgcGFzcwotCi0gICAgdGhyZWFkaW5nLlRocmVhZCgKLSAgICAgICAgdGFyZ2V0PWRlbGV0ZV90ZW1wb3JhcnlfZGlyLAotICAgICAgICBuYW1lPSdkZWxldGVfdGVtcG9yYXJ5X2RpciglcyknICUgc2VsZi5fYWRiLkdldERldmljZVNlcmlhbCgpKS5zdGFydCgpCi0KLSAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICBzZWxmLl9hZGIuU2hlbGwoJ21rZGlyIC1wICVzJyAlIHNlbGYubmFtZSkKLSAgICByZXR1cm4gc2VsZgotCi0gIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKToKLSAgICBzZWxmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX3Rlc3RfY2FzZS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX3Rlc3RfY2FzZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE0OGI1NC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2RldmljZV90ZXN0X2Nhc2UucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9lcnJvcnMKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3V0aWxzCi0KLV9kZXZpY2VzX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi1fZGV2aWNlc19jb25kaXRpb24gPSB0aHJlYWRpbmcuQ29uZGl0aW9uKF9kZXZpY2VzX2xvY2spCi1fZGV2aWNlcyA9IHNldCgpCi0KLQotZGVmIFByZXBhcmVEZXZpY2VzKCpfYXJncyk6Ci0KLSAgcmF3X2RldmljZXMgPSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMuSGVhbHRoeURldmljZXMoKQotICBsaXZlX2RldmljZXMgPSBbXQotICBmb3IgZCBpbiByYXdfZGV2aWNlczoKLSAgICB0cnk6Ci0gICAgICBkLldhaXRVbnRpbEZ1bGx5Qm9vdGVkKHRpbWVvdXQ9NSwgcmV0cmllcz0wKQotICAgICAgbGl2ZV9kZXZpY2VzLmFwcGVuZChzdHIoZCkpCi0gICAgZXhjZXB0IChkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvciwKLSAgICAgICAgICAgIGRldmljZV9lcnJvcnMuQ29tbWFuZFRpbWVvdXRFcnJvciwKLSAgICAgICAgICAgIGRldmljZV9lcnJvcnMuRGV2aWNlVW5yZWFjaGFibGVFcnJvcik6Ci0gICAgICBwYXNzCi0gIHdpdGggX2RldmljZXNfbG9jazoKLSAgICBfZGV2aWNlcy51cGRhdGUoc2V0KGxpdmVfZGV2aWNlcykpCi0KLSAgaWYgbm90IF9kZXZpY2VzOgotICAgIHJhaXNlIEV4Y2VwdGlvbignTm8gbGl2ZSBkZXZpY2VzIGF0dGFjaGVkLicpCi0KLQotY2xhc3MgRGV2aWNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgIHN1cGVyKERldmljZVRlc3RDYXNlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCi0gICAgc2VsZi5zZXJpYWwgPSBOb25lCi0KLSAgI292ZXJyaWRlCi0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzdXBlcihEZXZpY2VUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQotICAgIHdpdGggX2RldmljZXNfbG9jazoKLSAgICAgIHdoaWxlIG5vdCBfZGV2aWNlczoKLSAgICAgICAgX2RldmljZXNfY29uZGl0aW9uLndhaXQoNSkKLSAgICAgIHNlbGYuc2VyaWFsID0gX2RldmljZXMucG9wKCkKLQotICAjb3ZlcnJpZGUKLSAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgIHN1cGVyKERldmljZVRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCi0gICAgd2l0aCBfZGV2aWNlc19sb2NrOgotICAgICAgX2RldmljZXMuYWRkKHNlbGYuc2VyaWFsKQotICAgICAgX2RldmljZXNfY29uZGl0aW9uLm5vdGlmeSgpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2RldmljZV91dGlscy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX3V0aWxzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTNkYjQxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX3V0aWxzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjgwOCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlByb3ZpZGVzIGEgdmFyaWV0eSBvZiBkZXZpY2UgaW50ZXJhY3Rpb25zIGJhc2VkIG9uIGFkYi4KLQotRXZlbnR1YWxseSwgdGhpcyB3aWxsIGJlIGJhc2VkIG9uIGFkYl93cmFwcGVyLgotIiIiCi0jIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLQotaW1wb3J0IGNhbGVuZGFyCi1pbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBmbm1hdGNoCi1pbXBvcnQganNvbgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHBvc2l4cGF0aAotaW1wb3J0IHBwcmludAotaW1wb3J0IHJhbmRvbQotaW1wb3J0IHJlCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3RhdAotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgdGltZQotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHV1aWQKLQotZnJvbSBkZXZpbCBpbXBvcnQgYmFzZV9lcnJvcgotZnJvbSBkZXZpbCBpbXBvcnQgZGV2aWxfZW52Ci1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBjbWRfaGVscGVyCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGFwa19oZWxwZXIKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3NpZ25hbAotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZWNvcmF0b3JzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9lcnJvcnMKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3RlbXBfZmlsZQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBpbnN0YWxsX2NvbW1hbmRzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGxvZ2NhdF9tb25pdG9yCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IG1kNXN1bQotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgYWRiX3dyYXBwZXIKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IGludGVudAotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQga2V5ZXZlbnQKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IHNwbGl0X3NlbGVjdAotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgdmVyc2lvbl9jb2RlcwotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgaG9zdF91dGlscwotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgcGFyYWxsZWxpemVyCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCByZXJhaXNlcl90aHJlYWQKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHRpbWVvdXRfcmV0cnkKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHppcF91dGlscwotCi1mcm9tIHB5X3V0aWxzIGltcG9ydCB0ZW1wZmlsZV9leHQKLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLV9ERUZBVUxUX1RJTUVPVVQgPSAzMAotX0RFRkFVTFRfUkVUUklFUyA9IDMKLQotIyBBIHNlbnRpbmVsIG9iamVjdCBmb3IgZGVmYXVsdCB2YWx1ZXMKLSMgVE9ETyhqYnVkb3JpY2sscGVyZXpqdSk6IHJldmlzaXQgaG93IGRlZmF1bHQgdmFsdWVzIGFyZSBoYW5kbGVkIGJ5Ci0jIHRoZSB0aW1lb3V0X3JldHJ5IGRlY29yYXRvcnMuCi1ERUZBVUxUID0gb2JqZWN0KCkKLQotX1JFU1RBUlRfQURCRF9TQ1JJUFQgPSAiIiIKLSAgdHJhcCAnJyBIVVAKLSAgdHJhcCAnJyBURVJNCi0gIHRyYXAgJycgUElQRQotICBmdW5jdGlvbiByZXN0YXJ0KCkgewotICAgIHN0b3AgYWRiZAotICAgIHN0YXJ0IGFkYmQKLSAgfQotICByZXN0YXJ0ICYKLSIiIgotCi0jIE5vdCBhbGwgcGVybWlzc2lvbnMgY2FuIGJlIHNldC4KLV9QRVJNSVNTSU9OU19CTEFDS0xJU1RfUkUgPSByZS5jb21waWxlKCd8Jy5qb2luKGZubWF0Y2gudHJhbnNsYXRlKHApIGZvciBwIGluIFsKLSAgICAnYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19MT0NBVElPTl9FWFRSQV9DT01NQU5EUycsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfTU9DS19MT0NBVElPTicsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfTkVUV09SS19TVEFURScsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfTk9USUZJQ0FUSU9OX1BPTElDWScsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfVlJfU1RBVEUnLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX1dJRklfU1RBVEUnLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uQVVUSEVOVElDQVRFX0FDQ09VTlRTJywKLSAgICAnYW5kcm9pZC5wZXJtaXNzaW9uLkJMVUVUT09USCcsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5CTFVFVE9PVEhfQURNSU4nLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uQlJPQURDQVNUX1NUSUNLWScsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5DSEFOR0VfTkVUV09SS19TVEFURScsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5DSEFOR0VfV0lGSV9NVUxUSUNBU1RfU1RBVEUnLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uQ0hBTkdFX1dJRklfU1RBVEUnLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uRElTQUJMRV9LRVlHVUFSRCcsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5ET1dOTE9BRF9XSVRIT1VUX05PVElGSUNBVElPTicsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5FWFBBTkRfU1RBVFVTX0JBUicsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5HRVRfUEFDS0FHRV9TSVpFJywKLSAgICAnYW5kcm9pZC5wZXJtaXNzaW9uLklOU1RBTExfU0hPUlRDVVQnLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uSU5KRUNUX0VWRU5UUycsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVCcsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5LSUxMX0JBQ0tHUk9VTkRfUFJPQ0VTU0VTJywKLSAgICAnYW5kcm9pZC5wZXJtaXNzaW9uLk1BTkFHRV9BQ0NPVU5UUycsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5NT0RJRllfQVVESU9fU0VUVElOR1MnLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uTkZDJywKLSAgICAnYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfU1lOQ19TRVRUSU5HUycsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX1NZTkNfU1RBVFMnLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uUkVDRUlWRV9CT09UX0NPTVBMRVRFRCcsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5SRUNPUkRfVklERU8nLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uUkVPUkRFUl9UQVNLUycsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5SRVFVRVNUX0lOU1RBTExfUEFDS0FHRVMnLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uUkVTVFJJQ1RFRF9WUl9BQ0NFU1MnLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uUlVOX0lOU1RSVU1FTlRBVElPTicsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5TRVRfQUxBUk0nLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uU0VUX1RJTUVfWk9ORScsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5TRVRfV0FMTFBBUEVSJywKLSAgICAnYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9XQUxMUEFQRVJfSElOVFMnLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uVFJBTlNNSVRfSVInLAotICAgICdhbmRyb2lkLnBlcm1pc3Npb24uVVNFX0NSRURFTlRJQUxTJywKLSAgICAnYW5kcm9pZC5wZXJtaXNzaW9uLlVTRV9GSU5HRVJQUklOVCcsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5WSUJSQVRFJywKLSAgICAnYW5kcm9pZC5wZXJtaXNzaW9uLldBS0VfTE9DSycsCi0gICAgJ2FuZHJvaWQucGVybWlzc2lvbi5XUklURV9TWU5DX1NFVFRJTkdTJywKLSAgICAnY29tLmFuZHJvaWQuYnJvd3Nlci5wZXJtaXNzaW9uLlJFQURfSElTVE9SWV9CT09LTUFSS1MnLAotICAgICdjb20uYW5kcm9pZC5icm93c2VyLnBlcm1pc3Npb24uV1JJVEVfSElTVE9SWV9CT09LTUFSS1MnLAotICAgICdjb20uYW5kcm9pZC5sYXVuY2hlci5wZXJtaXNzaW9uLklOU1RBTExfU0hPUlRDVVQnLAotICAgICdjb20uY2hyb21lLnBlcm1pc3Npb24uREVWSUNFX0VYVFJBUycsCi0gICAgJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLm5vdy5DVVJSRU5UX0FDQ09VTlRfQUNDRVNTJywKLSAgICAnY29tLmdvb2dsZS5hbmRyb2lkLmMyZG0ucGVybWlzc2lvbi5SRUNFSVZFJywKLSAgICAnY29tLmdvb2dsZS5hbmRyb2lkLnByb3ZpZGVycy5nc2YucGVybWlzc2lvbi5SRUFEX0dTRVJWSUNFUycsCi0gICAgJ2NvbS5nb29nbGUudnIudnJjb3JlLnBlcm1pc3Npb24uVlJDT1JFX0lOVEVSTkFMJywKLSAgICAnY29tLnNlYy5lbnRlcnByaXNlLmtub3guTURNX0NPTlRFTlRfUFJPVklERVInLAotICAgICcqLnBlcm1pc3Npb24uQzJEX01FU1NBR0UnLAotICAgICcqLnBlcm1pc3Npb24uUkVBRF9XUklURV9CT09LTUFSS19GT0xERVJTJywKLSAgICAnKi5UT1NfQUNLRUQnLAotXSkpCi1fU0hFTExfT1VUUFVUX1NFUEFSQVRPUiA9ICd+WH4nCi1fUEVSTUlTU0lPTlNfRVhDRVBUSU9OX1JFID0gcmUuY29tcGlsZSgKLSAgICByJ2phdmFcLmxhbmdcLlx3K0V4Y2VwdGlvbjogLiokJywgcmUuTVVMVElMSU5FKQotCi1fQ1VSUkVOVF9GT0NVU19DUkFTSF9SRSA9IHJlLmNvbXBpbGUoCi0gICAgcidccyptQ3VycmVudEZvY3VzLipBcHBsaWNhdGlvbiAoRXJyb3J8Tm90IFJlc3BvbmRpbmcpOiAoXFMrKX0nKQotCi1fR0VUUFJPUF9SRSA9IHJlLmNvbXBpbGUocidcWyguKj8pXF06IFxbKC4qPylcXScpCi0KLSMgUmVnZXggdG8gcGFyc2UgdGhlIGxvbmcgKC1sKSBvdXRwdXQgb2YgJ2xzJyBjb21tYW5kLCBjLmYuCi0jIGh0dHBzOi8vZ2l0aHViLmNvbS9sYW5kbGV5L3RveWJveC9ibG9iL21hc3Rlci90b3lzL3Bvc2l4L2xzLmMjTDQ0NgotX0xPTkdfTFNfT1VUUFVUX1JFID0gcmUuY29tcGlsZSgKLSAgICByJyg/UDxzdF9tb2RlPltcdy1dezEwfSlccysnICAgICAgICAgICAgICAgICAgIyBGaWxlIHBlcm1pc3Npb25zCi0gICAgcicoPzooP1A8c3Rfbmxpbms+XGQrKVxzKyk/JyAgICAgICAgICAgICAgICAgICMgTnVtYmVyIG9mIGxpbmtzIChvcHRpb25hbCkKLSAgICByJyg/UDxzdF9vd25lcj5cdyspXHMrJyAgICAgICAgICAgICAgICAgICAgICAgIyBOYW1lIG9mIG93bmVyCi0gICAgcicoP1A8c3RfZ3JvdXA+XHcrKVxzKycgICAgICAgICAgICAgICAgICAgICAgICMgR3JvdXAgb2Ygb3duZXIKLSAgICByJyg/OicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFaXRoZXIgLi4uCi0gICAgICByJyg/UDxzdF9yZGV2X21ham9yPlxkKyksXHMrJyAgICAgICAgICAgICAgICAgIyBEZXZpY2UgbWFqb3IsIGFuZAotICAgICAgcicoP1A8c3RfcmRldl9taW5vcj5cZCspXHMrJyAgICAgICAgICAgICAgICAgICMgRGV2aWNlIG1pbm9yCi0gICAgcid8JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLi4gb3IKLSAgICAgIHInKD9QPHN0X3NpemU+XGQrKVxzKycgICAgICAgICAgICAgICAgICAgICAgICAjIFNpemUgaW4gYnl0ZXMKLSAgICByJyk/JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAuLiBvciBub3RoaW5nCi0gICAgcicoP1A8c3RfbXRpbWU+XGR7NH0tXGRcZC1cZFxkIFxkXGQ6XGRcZClccysnICMgTW9kaWZpY2F0aW9uIGRhdGUvdGltZQotICAgIHInKD9QPGZpbGVuYW1lPi4rPyknICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZpbGUgbmFtZQotICAgIHInKD86IC0+ICg/UDxzeW1ib2xpY19saW5rX3RvPi4rKSk/JyAgICAgICAgICAjIFN5bWJvbGljIGxpbmsgKG9wdGlvbmFsKQotICAgIHInJCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEVuZCBvZiBzdHJpbmcKLSkKLV9MU19EQVRFX0ZPUk1BVCA9ICclWS0lbS0lZCAlSDolTScKLV9GSUxFX01PREVfUkUgPSByZS5jb21waWxlKHInW2RiY2xwcy1dKD86W3ItXVt3LV1beFNzLV0pezJ9W3ItXVt3LV1beFR0LV0kJykKLV9GSUxFX01PREVfS0lORCA9IHsKLSAgICAnZCc6IHN0YXQuU19JRkRJUiwgJ2InOiBzdGF0LlNfSUZCTEssICdjJzogc3RhdC5TX0lGQ0hSLAotICAgICdsJzogc3RhdC5TX0lGTE5LLCAncCc6IHN0YXQuU19JRklGTywgJ3MnOiBzdGF0LlNfSUZTT0NLLAotICAgICctJzogc3RhdC5TX0lGUkVHfQotX0ZJTEVfTU9ERV9QRVJNUyA9IFsKLSAgICBzdGF0LlNfSVJVU1IsIHN0YXQuU19JV1VTUiwgc3RhdC5TX0lYVVNSLAotICAgIHN0YXQuU19JUkdSUCwgc3RhdC5TX0lXR1JQLCBzdGF0LlNfSVhHUlAsCi0gICAgc3RhdC5TX0lST1RILCBzdGF0LlNfSVdPVEgsIHN0YXQuU19JWE9USCwKLV0KLV9GSUxFX01PREVfU1BFQ0lBTCA9IFsKLSAgICAoJ3MnLCBzdGF0LlNfSVNVSUQpLAotICAgICgncycsIHN0YXQuU19JU0dJRCksCi0gICAgKCd0Jywgc3RhdC5TX0lTVlRYKSwKLV0KLV9QU19DT0xVTU5TID0gewotICAncGlkJzogMSwKLSAgJ3BwaWQnOiAyLAotICAnbmFtZSc6IC0xCi19Ci1fU0VMSU5VWF9NT0RFID0gewotICAgICdlbmZvcmNpbmcnOiBUcnVlLAotICAgICdwZXJtaXNzaXZlJzogRmFsc2UsCi0gICAgJ2Rpc2FibGVkJzogTm9uZQotfQotIyBTb21lIGRldmljZXMgcmVxdWlyZSBkaWZmZXJlbnQgbG9naWMgZm9yIGNoZWNraW5nIGlmIHJvb3QgaXMgbmVjZXNzYXJ5Ci1fU1BFQ0lBTF9ST09UX0RFVklDRV9MSVNUID0gWwotICAgICdtYXJsaW4nLCAjIFBpeGVsIFhMCi0gICAgJ3NhaWxmaXNoJywgIyBQaXhlbAotICAgICd0YWltZW4nLCAjIFBpeGVsIDIgWEwKLSAgICAnd2FsbGV5ZScsICMgUGl4ZWwgMgotXQotX0lNRUlfUkUgPSByZS5jb21waWxlKHInICBEZXZpY2UgSUQgPSAoLispJCcpCi0jIFRoZSBmb2xsb3dpbmcgcmVnZXggaXMgdXNlZCB0byBtYXRjaCByZXN1bHQgcGFyY2VscyBsaWtlOgotIiIiCi1SZXN1bHQ6IFBhcmNlbCgKLSAgMHgwMDAwMDAwMDogMDAwMDAwMDAgMDAwMDAwMGYgMDAzNTAwMzMgMDAzNjAwMzMgJy4uLi4uLi4uMy41LjMuNi4nCi0gIDB4MDAwMDAwMTA6IDAwMzYwMDMyIDAwMzcwMDMwIDAwMzAwMDMyIDAwMzAwMDM5ICcyLjYuMC43LjIuMC45LjAuJwotICAweDAwMDAwMDIwOiAwMDM4MDAzMyAwMDAwMDAzOSAgICAgICAgICAgICAgICAgICAnMy44LjkuLi4gICAgICAgICcpCi0iIiIKLV9QQVJDRUxfUkVTVUxUX1JFID0gcmUuY29tcGlsZSgKLSAgICByJzB4WzAtOWEtZl17OH1cOiAoPzpbMC05YS1mXXs4fVxzKyl7MSw0fVwnKC57MTZ9KVwnJykKLV9FQlVTWV9SRSA9IHJlLmNvbXBpbGUoCi0gICAgcidta2RpciBmYWlsZWQgZm9yIChbXixdKiksIERldmljZSBvciByZXNvdXJjZSBidXN5JykKLQotUFNfQ09MVU1OUyA9ICgnbmFtZScsICdwaWQnLCAncHBpZCcpCi1Qcm9jZXNzSW5mbyA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoJ1Byb2Nlc3NJbmZvJywgUFNfQ09MVU1OUykKLQotCi1AZGVjb3JhdG9ycy5XaXRoRXhwbGljaXRUaW1lb3V0QW5kUmV0cmllcygKLSAgICBfREVGQVVMVF9USU1FT1VULCBfREVGQVVMVF9SRVRSSUVTKQotZGVmIEdldEFWRHMoKToKLSAgIiIiUmV0dXJucyBhIGxpc3Qgb2YgQW5kcm9pZCBWaXJ0dWFsIERldmljZXMuCi0KLSAgUmV0dXJuczoKLSAgICBBIGxpc3QgY29udGFpbmluZyB0aGUgY29uZmlndXJlZCBBVkRzLgotICAiIiIKLSAgbGluZXMgPSBjbWRfaGVscGVyLkdldENtZE91dHB1dChbCi0gICAgICBvcy5wYXRoLmpvaW4oZGV2aWxfZW52LmNvbmZpZy5Mb2NhbFBhdGgoJ2FuZHJvaWRfc2RrJyksCi0gICAgICAgICAgICAgICAgICAgJ3Rvb2xzJywgJ2FuZHJvaWQnKSwKLSAgICAgICdsaXN0JywgJ2F2ZCddKS5zcGxpdGxpbmVzKCkKLSAgYXZkcyA9IFtdCi0gIGZvciBsaW5lIGluIGxpbmVzOgotICAgIGlmICdOYW1lOicgbm90IGluIGxpbmU6Ci0gICAgICBjb250aW51ZQotICAgIGtleSwgdmFsdWUgPSAocy5zdHJpcCgpIGZvciBzIGluIGxpbmUuc3BsaXQoJzonLCAxKSkKLSAgICBpZiBrZXkgPT0gJ05hbWUnOgotICAgICAgYXZkcy5hcHBlbmQodmFsdWUpCi0gIHJldHVybiBhdmRzCi0KLQotQGRlY29yYXRvcnMuV2l0aEV4cGxpY2l0VGltZW91dEFuZFJldHJpZXMoCi0gICAgX0RFRkFVTFRfVElNRU9VVCwgX0RFRkFVTFRfUkVUUklFUykKLWRlZiBSZXN0YXJ0U2VydmVyKCk6Ci0gICIiIlJlc3RhcnRzIHRoZSBhZGIgc2VydmVyLgotCi0gIFJhaXNlczoKLSAgICBDb21tYW5kRmFpbGVkRXJyb3IgaWYgd2UgZmFpbCB0byBraWxsIG9yIHJlc3RhcnQgdGhlIHNlcnZlci4KLSAgIiIiCi0gIGRlZiBhZGJfa2lsbGVkKCk6Ci0gICAgcmV0dXJuIG5vdCBhZGJfd3JhcHBlci5BZGJXcmFwcGVyLklzU2VydmVyT25saW5lKCkKLQotICBkZWYgYWRiX3N0YXJ0ZWQoKToKLSAgICByZXR1cm4gYWRiX3dyYXBwZXIuQWRiV3JhcHBlci5Jc1NlcnZlck9ubGluZSgpCi0KLSAgYWRiX3dyYXBwZXIuQWRiV3JhcHBlci5LaWxsU2VydmVyKCkKLSAgaWYgbm90IHRpbWVvdXRfcmV0cnkuV2FpdEZvcihhZGJfa2lsbGVkLCB3YWl0X3BlcmlvZD0xLCBtYXhfdHJpZXM9NSk6Ci0gICAgIyBUT0RPKHBlcmV6anUpOiByYWlzZSBhbiBleGNlcHRpb24gYWZ0ZXIgZml4bmcgaHR0cDovL2NyYnVnLmNvbS80NDIzMTkKLSAgICBsb2dnZXIud2FybmluZygnRmFpbGVkIHRvIGtpbGwgYWRiIHNlcnZlcicpCi0gIGFkYl93cmFwcGVyLkFkYldyYXBwZXIuU3RhcnRTZXJ2ZXIoKQotICBpZiBub3QgdGltZW91dF9yZXRyeS5XYWl0Rm9yKGFkYl9zdGFydGVkLCB3YWl0X3BlcmlvZD0xLCBtYXhfdHJpZXM9NSk6Ci0gICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBhZGIgc2VydmVyJykKLQotCi1kZWYgX1BhcnNlTW9kZVN0cmluZyhtb2RlX3N0cik6Ci0gICIiIlBhcnNlIGEgbW9kZSBzdHJpbmcsIGUuZy4gJ2Ryd3hyd3hyd3gnLCBpbnRvIGEgc3RfbW9kZSB2YWx1ZS4KLQotICBFZmZlY3RpdmVseSB0aGUgcmV2ZXJzZSBvZiB8bW9kZV90b19zdHJpbmd8IGluLCBlLmcuOgotICBodHRwczovL2dpdGh1Yi5jb20vbGFuZGxleS90b3lib3gvYmxvYi9tYXN0ZXIvbGliL2xpYi5jI0w4OTYKLSAgIiIiCi0gIGlmIG5vdCBfRklMRV9NT0RFX1JFLm1hdGNoKG1vZGVfc3RyKToKLSAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmV4cGVjdGVkIGZpbGUgbW9kZSAlcicsIG1vZGVfc3RyKQotICBtb2RlID0gX0ZJTEVfTU9ERV9LSU5EW21vZGVfc3RyWzBdXQotICBmb3IgYywgZmxhZyBpbiB6aXAobW9kZV9zdHJbMTpdLCBfRklMRV9NT0RFX1BFUk1TKToKLSAgICBpZiBjICE9ICctJyBhbmQgYy5pc2xvd2VyKCk6Ci0gICAgICBtb2RlIHw9IGZsYWcKLSAgZm9yIGMsICh0LCBmbGFnKSBpbiB6aXAobW9kZV9zdHJbMzo6M10sIF9GSUxFX01PREVfU1BFQ0lBTCk6Ci0gICAgaWYgYy5sb3dlcigpID09IHQ6Ci0gICAgICBtb2RlIHw9IGZsYWcKLSAgcmV0dXJuIG1vZGUKLQotCi1kZWYgX0dldFRpbWVTdGFtcCgpOgotICAiIiJSZXR1cm4gYSBiYXNpYyBJU08gODYwMSB0aW1lIHN0YW1wIHdpdGggdGhlIGN1cnJlbnQgbG9jYWwgdGltZS4iIiIKLSAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoJyVZJW0lZFQlSCVNJVMnLCB0aW1lLmxvY2FsdGltZSgpKQotCi0KLWRlZiBfSm9pbkxpbmVzKGxpbmVzKToKLSAgIyBtYWtlcyBzdXJlIHRoYXQgdGhlIGxhc3QgbGluZSBpcyBhbHNvIHRlcm1pbmF0ZWQsIGFuZCBpcyBtb3JlIG1lbW9yeQotICAjIGVmZmljaWVudCB0aGFuIGZpcnN0IGFwcGVuZGluZyBhbiBlbmQtbGluZSB0byBlYWNoIGxpbmUgYW5kIHRoZW4gam9pbmluZwotICAjIGFsbCBvZiB0aGVtIHRvZ2V0aGVyLgotICByZXR1cm4gJycuam9pbihzIGZvciBsaW5lIGluIGxpbmVzIGZvciBzIGluIChsaW5lLCAnXG4nKSkKLQotCi1kZWYgX0NyZWF0ZUFkYldyYXBwZXIoZGV2aWNlKToKLSAgaWYgaXNpbnN0YW5jZShkZXZpY2UsIGFkYl93cmFwcGVyLkFkYldyYXBwZXIpOgotICAgIHJldHVybiBkZXZpY2UKLSAgZWxzZToKLSAgICByZXR1cm4gYWRiX3dyYXBwZXIuQWRiV3JhcHBlcihkZXZpY2UpCi0KLQotZGVmIF9Gb3JtYXRQYXJ0aWFsT3V0cHV0RXJyb3Iob3V0cHV0KToKLSAgbGluZXMgPSBvdXRwdXQuc3BsaXRsaW5lcygpIGlmIGlzaW5zdGFuY2Uob3V0cHV0LCBiYXNlc3RyaW5nKSBlbHNlIG91dHB1dAotICBtZXNzYWdlID0gWydQYXJ0aWFsIG91dHB1dCBmb3VuZDonXQotICBpZiBsZW4obGluZXMpID4gMTE6Ci0gICAgbWVzc2FnZS5leHRlbmQoJy0gJXMnICUgbGluZSBmb3IgbGluZSBpbiBsaW5lc1s6NV0pCi0gICAgbWVzc2FnZS5leHRlbmQoJzxzbmlwPicpCi0gICAgbWVzc2FnZS5leHRlbmQoJy0gJXMnICUgbGluZSBmb3IgbGluZSBpbiBsaW5lc1stNTpdKQotICBlbHNlOgotICAgIG1lc3NhZ2UuZXh0ZW5kKCctICVzJyAlIGxpbmUgZm9yIGxpbmUgaW4gbGluZXMpCi0gIHJldHVybiAnXG4nLmpvaW4obWVzc2FnZSkKLQotCi1jbGFzcyBEZXZpY2VVdGlscyhvYmplY3QpOgotCi0gIF9NQVhfQURCX0NPTU1BTkRfTEVOR1RIID0gNTEyCi0gIF9NQVhfQURCX09VVFBVVF9MRU5HVEggPSAzMjc2OAotICBfTEFVTkNIRVJfRk9DVVNFRF9SRSA9IHJlLmNvbXBpbGUoCi0gICAgICByJ1xzKm1DdXJyZW50Rm9jdXMuKihMYXVuY2hlcnxsYXVuY2hlcikuKicpCi0gIF9WQUxJRF9TSEVMTF9WQVJJQUJMRSA9IHJlLmNvbXBpbGUoJ15bYS16QS1aX11bYS16QS1aMC05X10qJCcpCi0KLSAgTE9DQUxfUFJPUEVSVElFU19QQVRIID0gcG9zaXhwYXRoLmpvaW4oJy8nLCAnZGF0YScsICdsb2NhbC5wcm9wJykKLQotICAjIFByb3BlcnR5IGluIC9kYXRhL2xvY2FsLnByb3AgdGhhdCBjb250cm9scyBKYXZhIGFzc2VydGlvbnMuCi0gIEpBVkFfQVNTRVJUX1BST1BFUlRZID0gJ2RhbHZpay52bS5lbmFibGVhc3NlcnRpb25zJwotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2UsIGVuYWJsZV9kZXZpY2VfZmlsZXNfY2FjaGU9RmFsc2UsCi0gICAgICAgICAgICAgICBkZWZhdWx0X3RpbWVvdXQ9X0RFRkFVTFRfVElNRU9VVCwKLSAgICAgICAgICAgICAgIGRlZmF1bHRfcmV0cmllcz1fREVGQVVMVF9SRVRSSUVTKToKLSAgICAiIiJEZXZpY2VVdGlscyBjb25zdHJ1Y3Rvci4KLQotICAgIEFyZ3M6Ci0gICAgICBkZXZpY2U6IEVpdGhlciBhIGRldmljZSBzZXJpYWwsIGFuIGV4aXN0aW5nIEFkYldyYXBwZXIgaW5zdGFuY2UsIG9yIGFuCi0gICAgICAgIGFuIGV4aXN0aW5nIEFuZHJvaWRDb21tYW5kcyBpbnN0YW5jZS4KLSAgICAgIGVuYWJsZV9kZXZpY2VfZmlsZXNfY2FjaGU6IEZvciBQdXNoQ2hhbmdlZEZpbGVzKCksIGNhY2hlIGNoZWNrc3VtcyBvZgotICAgICAgICBwdXNoZWQgZmlsZXMgcmF0aGVyIHRoYW4gcmVjb21wdXRpbmcgdGhlbSBvbiBhIHN1YnNlcXVlbnQgY2FsbC4KLSAgICAgIGRlZmF1bHRfdGltZW91dDogQW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBkZWZhdWx0IG51bWJlciBvZiBzZWNvbmRzIHRvCi0gICAgICAgIHdhaXQgZm9yIGFuIG9wZXJhdGlvbiB0byBjb21wbGV0ZSBpZiBubyBleHBsaWNpdCB2YWx1ZSBpcyBwcm92aWRlZC4KLSAgICAgIGRlZmF1bHRfcmV0cmllczogQW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBkZWZhdWx0IG51bWJlciBvciB0aW1lcyBhbgotICAgICAgICBvcGVyYXRpb24gc2hvdWxkIGJlIHJldHJpZWQgb24gZmFpbHVyZSBpZiBubyBleHBsaWNpdCB2YWx1ZSBpcyBwcm92aWRlZC4KLSAgICAiIiIKLSAgICBzZWxmLmFkYiA9IE5vbmUKLSAgICBpZiBpc2luc3RhbmNlKGRldmljZSwgYmFzZXN0cmluZyk6Ci0gICAgICBzZWxmLmFkYiA9IF9DcmVhdGVBZGJXcmFwcGVyKGRldmljZSkKLSAgICBlbGlmIGlzaW5zdGFuY2UoZGV2aWNlLCBhZGJfd3JhcHBlci5BZGJXcmFwcGVyKToKLSAgICAgIHNlbGYuYWRiID0gZGV2aWNlCi0gICAgZWxzZToKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Vuc3VwcG9ydGVkIGRldmljZSB2YWx1ZTogJXInICUgZGV2aWNlKQotICAgIHNlbGYuX2NvbW1hbmRzX2luc3RhbGxlZCA9IE5vbmUKLSAgICBzZWxmLl9kZWZhdWx0X3RpbWVvdXQgPSBkZWZhdWx0X3RpbWVvdXQKLSAgICBzZWxmLl9kZWZhdWx0X3JldHJpZXMgPSBkZWZhdWx0X3JldHJpZXMKLSAgICBzZWxmLl9lbmFibGVfZGV2aWNlX2ZpbGVzX2NhY2hlID0gZW5hYmxlX2RldmljZV9maWxlc19jYWNoZQotICAgIHNlbGYuX2NhY2hlID0ge30KLSAgICBzZWxmLl9jbGllbnRfY2FjaGVzID0ge30KLSAgICBzZWxmLl9jYWNoZV9sb2NrID0gdGhyZWFkaW5nLlJMb2NrKCkKLSAgICBhc3NlcnQgaGFzYXR0cihzZWxmLCBkZWNvcmF0b3JzLkRFRkFVTFRfVElNRU9VVF9BVFRSKQotICAgIGFzc2VydCBoYXNhdHRyKHNlbGYsIGRlY29yYXRvcnMuREVGQVVMVF9SRVRSSUVTX0FUVFIpCi0KLSAgICBzZWxmLl9DbGVhckNhY2hlKCkKLQotICBAcHJvcGVydHkKLSAgZGVmIHNlcmlhbChzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBkZXZpY2Ugc2VyaWFsLiIiIgotICAgIHJldHVybiBzZWxmLmFkYi5HZXREZXZpY2VTZXJpYWwoKQotCi0gIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICIiIkNoZWNrcyB3aGV0aGVyIHxvdGhlcnwgcmVmZXJzIHRvIHRoZSBzYW1lIGRldmljZSBhcyB8c2VsZnwuCi0KLSAgICBBcmdzOgotICAgICAgb3RoZXI6IFRoZSBvYmplY3QgdG8gY29tcGFyZSB0by4gVGhpcyBjYW4gYmUgYSBiYXNlc3RyaW5nLCBhbiBpbnN0YW5jZQotICAgICAgICBvZiBhZGJfd3JhcHBlci5BZGJXcmFwcGVyLCBvciBhbiBpbnN0YW5jZSBvZiBEZXZpY2VVdGlscy4KLSAgICBSZXR1cm5zOgotICAgICAgV2hldGhlciB8b3RoZXJ8IHJlZmVycyB0byB0aGUgc2FtZSBkZXZpY2UgYXMgfHNlbGZ8LgotICAgICIiIgotICAgIHJldHVybiBzZWxmLnNlcmlhbCA9PSBzdHIob3RoZXIpCi0KLSAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgIiIiQ29tcGFyZXMgdHdvIGluc3RhbmNlcyBvZiBEZXZpY2VVdGlscy4KLQotICAgIFRoaXMgbWVyZWx5IGNvbXBhcmVzIHRoZWlyIHNlcmlhbCBudW1iZXJzLgotCi0gICAgQXJnczoKLSAgICAgIG90aGVyOiBUaGUgaW5zdGFuY2Ugb2YgRGV2aWNlVXRpbHMgdG8gY29tcGFyZSB0by4KLSAgICBSZXR1cm5zOgotICAgICAgV2hldGhlciB8c2VsZnwgaXMgbGVzcyB0aGFuIHxvdGhlcnwuCi0gICAgIiIiCi0gICAgcmV0dXJuIHNlbGYuc2VyaWFsIDwgb3RoZXIuc2VyaWFsCi0KLSAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgZGV2aWNlIHNlcmlhbC4iIiIKLSAgICByZXR1cm4gc2VsZi5zZXJpYWwKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgSXNPbmxpbmUoc2VsZiwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIkNoZWNrcyB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgb25saW5lLgotCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBUcnVlIGlmIHRoZSBkZXZpY2UgaXMgb25saW5lLCBGYWxzZSBvdGhlcndpc2UuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgIiIiCi0gICAgdHJ5OgotICAgICAgcmV0dXJuIHNlbGYuYWRiLkdldFN0YXRlKCkgPT0gJ2RldmljZScKLSAgICBleGNlcHQgYmFzZV9lcnJvci5CYXNlRXJyb3IgYXMgZXhjOgotICAgICAgbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byBnZXQgc3RhdGU6ICVzJywgZXhjKQotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIEhhc1Jvb3Qoc2VsZiwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIkNoZWNrcyB3aGV0aGVyIG9yIG5vdCBhZGJkIGhhcyByb290IHByaXZpbGVnZXMuCi0KLSAgICBBcmdzOgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIFRydWUgaWYgYWRiZCBoYXMgcm9vdCBwcml2aWxlZ2VzLCBGYWxzZSBvdGhlcndpc2UuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotICAgICIiIgotICAgIHRyeToKLSAgICAgIGlmIHNlbGYucHJvZHVjdF9uYW1lIGluIF9TUEVDSUFMX1JPT1RfREVWSUNFX0xJU1Q6Ci0gICAgICAgIHJldHVybiBzZWxmLkdldFByb3AoJ3NlcnZpY2UuYWRiLnJvb3QnKSA9PSAnMScKLSAgICAgIHNlbGYuUnVuU2hlbGxDb21tYW5kKFsnbHMnLCAnL3Jvb3QnXSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgICByZXR1cm4gVHJ1ZQotICAgIGV4Y2VwdCBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcjoKLSAgICAgIHJldHVybiBGYWxzZQotCi0gIGRlZiBOZWVkc1NVKHNlbGYsIHRpbWVvdXQ9REVGQVVMVCwgcmV0cmllcz1ERUZBVUxUKToKLSAgICAiIiJDaGVja3Mgd2hldGhlciAnc3UnIGlzIG5lZWRlZCB0byBhY2Nlc3MgcHJvdGVjdGVkIHJlc291cmNlcy4KLQotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSBpZiAnc3UnIGlzIGF2YWlsYWJsZSBvbiB0aGUgZGV2aWNlIGFuZCBpcyBuZWVkZWQgdG8gdG8gYWNjZXNzCi0gICAgICAgIHByb3RlY3RlZCByZXNvdXJjZXM7IEZhbHNlIG90aGVyd2lzZSBpZiBlaXRoZXIgJ3N1JyBpcyBub3QgYXZhaWxhYmxlCi0gICAgICAgIChlLmcuIGJlY2F1c2UgdGhlIGRldmljZSBoYXMgYSB1c2VyIGJ1aWxkKSwgb3Igbm90IG5lZWRlZCAoYmVjYXVzZSBhZGJkCi0gICAgICAgIGFscmVhZHkgaGFzIHJvb3QgcHJpdmlsZWdlcykuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotICAgICIiIgotICAgIGlmICduZWVkc19zdScgbm90IGluIHNlbGYuX2NhY2hlOgotICAgICAgY21kID0gJyVzICYmICEgbHMgL3Jvb3QnICUgc2VsZi5fU3UoJ2xzIC9yb290JykKLSAgICAgIGlmIHNlbGYucHJvZHVjdF9uYW1lIGluIF9TUEVDSUFMX1JPT1RfREVWSUNFX0xJU1Q6Ci0gICAgICAgIGlmIHNlbGYuSGFzUm9vdCgpOgotICAgICAgICAgIHNlbGYuX2NhY2hlWyduZWVkc19zdSddID0gRmFsc2UKLSAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgY21kID0gJ3doaWNoIHdoaWNoICYmIHdoaWNoIHN1JwotICAgICAgdHJ5OgotICAgICAgICBzZWxmLlJ1blNoZWxsQ29tbWFuZChjbWQsIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlLAotICAgICAgICAgICAgdGltZW91dD1zZWxmLl9kZWZhdWx0X3RpbWVvdXQgaWYgdGltZW91dCBpcyBERUZBVUxUIGVsc2UgdGltZW91dCwKLSAgICAgICAgICAgIHJldHJpZXM9c2VsZi5fZGVmYXVsdF9yZXRyaWVzIGlmIHJldHJpZXMgaXMgREVGQVVMVCBlbHNlIHJldHJpZXMpCi0gICAgICAgIHNlbGYuX2NhY2hlWyduZWVkc19zdSddID0gVHJ1ZQotICAgICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yOgotICAgICAgICBzZWxmLl9jYWNoZVsnbmVlZHNfc3UnXSA9IEZhbHNlCi0gICAgcmV0dXJuIHNlbGYuX2NhY2hlWyduZWVkc19zdSddCi0KLQotICBkZWYgX1N1KHNlbGYsIGNvbW1hbmQpOgotICAgIGlmIHNlbGYuYnVpbGRfdmVyc2lvbl9zZGsgPj0gdmVyc2lvbl9jb2Rlcy5NQVJTSE1BTExPVzoKLSAgICAgIHJldHVybiAnc3UgMCAlcycgJSBjb21tYW5kCi0gICAgcmV0dXJuICdzdSAtYyAlcycgJSBjb21tYW5kCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIEVuYWJsZVJvb3Qoc2VsZiwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIlJlc3RhcnRzIGFkYmQgd2l0aCByb290IHByaXZpbGVnZXMuCi0KLSAgICBBcmdzOgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIGlmIHJvb3QgY291bGQgbm90IGJlIGVuYWJsZWQuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgIiIiCi0gICAgaWYgJ25lZWRzX3N1JyBpbiBzZWxmLl9jYWNoZToKLSAgICAgIGRlbCBzZWxmLl9jYWNoZVsnbmVlZHNfc3UnXQotCi0gICAgdHJ5OgotICAgICAgc2VsZi5hZGIuUm9vdCgpCi0gICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yOgotICAgICAgaWYgc2VsZi5Jc1VzZXJCdWlsZCgpOgotICAgICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICAgICdVbmFibGUgdG8gcm9vdCBkZXZpY2Ugd2l0aCB1c2VyIGJ1aWxkLicsIHN0cihzZWxmKSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlICAjIEZhaWxlZCBwcm9iYWJseSBkdWUgdG8gc29tZSBvdGhlciByZWFzb24uCi0KLSAgICBkZWYgZGV2aWNlX29ubGluZV93aXRoX3Jvb3QoKToKLSAgICAgIHRyeToKLSAgICAgICAgc2VsZi5hZGIuV2FpdEZvckRldmljZSgpCi0gICAgICAgIHJldHVybiBzZWxmLkdldFByb3AoJ3NlcnZpY2UuYWRiLnJvb3QnLCBjYWNoZT1GYWxzZSkgPT0gJzEnCi0gICAgICBleGNlcHQgKGRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yLAotICAgICAgICAgICAgICBkZXZpY2VfZXJyb3JzLkRldmljZVVucmVhY2hhYmxlRXJyb3IpOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIHRpbWVvdXRfcmV0cnkuV2FpdEZvcihkZXZpY2Vfb25saW5lX3dpdGhfcm9vdCwgd2FpdF9wZXJpb2Q9MSkKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgSXNVc2VyQnVpbGQoc2VsZiwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIkNoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGUgZGV2aWNlIGlzIHJ1bm5pbmcgYSB1c2VyIGJ1aWxkLgotCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBUcnVlIGlmIHRoZSBkZXZpY2UgaXMgcnVubmluZyBhIHVzZXIgYnVpbGQsIEZhbHNlIG90aGVyd2lzZSAoaS5lLiBpZgotICAgICAgICBpdCdzIHJ1bm5pbmcgYSB1c2VyZGVidWcgYnVpbGQpLgotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLSAgICAiIiIKLSAgICByZXR1cm4gc2VsZi5idWlsZF90eXBlID09ICd1c2VyJwotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBHZXRFeHRlcm5hbFN0b3JhZ2VQYXRoKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJHZXQgdGhlIGRldmljZSdzIHBhdGggdG8gaXRzIFNEIGNhcmQuCi0KLSAgICBBcmdzOgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBkZXZpY2UncyBwYXRoIHRvIGl0cyBTRCBjYXJkLgotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIGlmIHRoZSBleHRlcm5hbCBzdG9yYWdlIHBhdGggY291bGQgbm90IGJlIGRldGVybWluZWQuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotICAgICIiIgotICAgIHNlbGYuX0Vuc3VyZUNhY2hlSW5pdGlhbGl6ZWQoKQotICAgIGlmIG5vdCBzZWxmLl9jYWNoZVsnZXh0ZXJuYWxfc3RvcmFnZSddOgotICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IoJyRFWFRFUk5BTF9TVE9SQUdFIGlzIG5vdCBzZXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYpKQotICAgIHJldHVybiBzZWxmLl9jYWNoZVsnZXh0ZXJuYWxfc3RvcmFnZSddCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIEdldElNRUkoc2VsZiwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIkdldCB0aGUgZGV2aWNlJ3MgSU1FSS4KLQotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIGRldmljZSdzIElNRUkuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBBZGJDb21tYW5kRmFpbGVkRXJyb3Igb24gZXJyb3IKLSAgICAiIiIKLSAgICBpZiBzZWxmLl9jYWNoZS5nZXQoJ2ltZWknKSBpcyBub3QgTm9uZToKLSAgICAgIHJldHVybiBzZWxmLl9jYWNoZS5nZXQoJ2ltZWknKQotCi0gICAgaWYgc2VsZi5idWlsZF92ZXJzaW9uX3NkayA8IDIxOgotICAgICAgb3V0ID0gc2VsZi5SdW5TaGVsbENvbW1hbmQoWydkdW1wc3lzJywgJ2lwaG9uZXN1YmluZm8nXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd19vdXRwdXQ9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgICBpZiBvdXQ6Ci0gICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKF9JTUVJX1JFLCBvdXQpCi0gICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgIHNlbGYuX2NhY2hlWydpbWVpJ10gPSBtYXRjaC5ncm91cCgxKQotICAgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZVsnaW1laSddCi0gICAgZWxzZToKLSAgICAgIG91dCA9IHNlbGYuUnVuU2hlbGxDb21tYW5kKFsnc2VydmljZScsICdjYWxsJywgJ2lwaG9uZXN1YmluZm8nLCAnMSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgICBpZiBvdXQ6Ci0gICAgICAgIGltZWkgPSAnJwotICAgICAgICBmb3IgbGluZSBpbiBvdXQ6Ci0gICAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2goX1BBUkNFTF9SRVNVTFRfUkUsIGxpbmUpCi0gICAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICBpbWVpID0gaW1laSArIG1hdGNoLmdyb3VwKDEpCi0gICAgICAgIGltZWkgPSBpbWVpLnJlcGxhY2UoJy4nLCAnJykuc3RyaXAoKQotICAgICAgICBpZiBpbWVpOgotICAgICAgICAgIHNlbGYuX2NhY2hlWydpbWVpJ10gPSBpbWVpCi0gICAgICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlWydpbWVpJ10KLQotICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKCdVbmFibGUgdG8gZmV0Y2ggSU1FSS4nKQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBHZXRBcHBsaWNhdGlvblBhdGhzKHNlbGYsIHBhY2thZ2UsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJHZXQgdGhlIHBhdGhzIG9mIHRoZSBpbnN0YWxsZWQgYXBrcyBvbiB0aGUgZGV2aWNlIGZvciB0aGUgZ2l2ZW4gcGFja2FnZS4KLQotICAgIEFyZ3M6Ci0gICAgICBwYWNrYWdlOiBOYW1lIG9mIHRoZSBwYWNrYWdlLgotCi0gICAgUmV0dXJuczoKLSAgICAgIExpc3Qgb2YgcGF0aHMgdG8gdGhlIGFwa3Mgb24gdGhlIGRldmljZSBmb3IgdGhlIGdpdmVuIHBhY2thZ2UuCi0gICAgIiIiCi0gICAgcmV0dXJuIHNlbGYuX0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbChwYWNrYWdlKQotCi0gIGRlZiBfR2V0QXBwbGljYXRpb25QYXRoc0ludGVybmFsKHNlbGYsIHBhY2thZ2UsIHNraXBfY2FjaGU9RmFsc2UpOgotICAgIGNhY2hlZF9yZXN1bHQgPSBzZWxmLl9jYWNoZVsncGFja2FnZV9hcGtfcGF0aHMnXS5nZXQocGFja2FnZSkKLSAgICBpZiBjYWNoZWRfcmVzdWx0IGlzIG5vdCBOb25lIGFuZCBub3Qgc2tpcF9jYWNoZToKLSAgICAgIGlmIHBhY2thZ2UgaW4gc2VsZi5fY2FjaGVbJ3BhY2thZ2VfYXBrX3BhdGhzX3RvX3ZlcmlmeSddOgotICAgICAgICBzZWxmLl9jYWNoZVsncGFja2FnZV9hcGtfcGF0aHNfdG9fdmVyaWZ5J10ucmVtb3ZlKHBhY2thZ2UpCi0gICAgICAgICMgRG9uJ3QgdmVyaWZ5IGFuIGFwcCB0aGF0IGlzIG5vdCB0aG91Z2h0IHRvIGJlIGluc3RhbGxlZC4gV2UgYXJlCi0gICAgICAgICMgY29uY2VybmVkIG9ubHkgd2l0aCBhcHBzIHdlIHRoaW5rIGFyZSBpbnN0YWxsZWQgaGF2aW5nIGJlZW4KLSAgICAgICAgIyB1bmluc3RhbGxlZCBtYW51YWxseS4KLSAgICAgICAgaWYgY2FjaGVkX3Jlc3VsdCBhbmQgbm90IHNlbGYuUGF0aEV4aXN0cyhjYWNoZWRfcmVzdWx0KToKLSAgICAgICAgICBjYWNoZWRfcmVzdWx0ID0gTm9uZQotICAgICAgICAgIHNlbGYuX2NhY2hlWydwYWNrYWdlX2Fwa19jaGVja3N1bXMnXS5wb3AocGFja2FnZSwgMCkKLSAgICAgIGlmIGNhY2hlZF9yZXN1bHQgaXMgbm90IE5vbmU6Ci0gICAgICAgIHJldHVybiBsaXN0KGNhY2hlZF9yZXN1bHQpCi0gICAgIyAncG0gcGF0aCcgaXMgbGlhYmxlIHRvIGluY29ycmVjdGx5IGV4aXQgd2l0aCBhIG5vbnplcm8gbnVtYmVyIHN0YXJ0aW5nCi0gICAgIyBpbiBMb2xsaXBvcC4KLSAgICAjIFRPRE8oamJ1ZG9yaWNrKTogQ2hlY2sgaWYgdGhpcyBpcyBmaXhlZCBhcyBuZXcgQW5kcm9pZCB2ZXJzaW9ucyBhcmUKLSAgICAjIHJlbGVhc2VkIHRvIHB1dCBhbiB1cHBlciBib3VuZCBvbiB0aGlzLgotICAgIHNob3VsZF9jaGVja19yZXR1cm4gPSAoc2VsZi5idWlsZF92ZXJzaW9uX3NkayA8IHZlcnNpb25fY29kZXMuTE9MTElQT1ApCi0gICAgb3V0cHV0ID0gc2VsZi5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgIFsncG0nLCAncGF0aCcsIHBhY2thZ2VdLCBjaGVja19yZXR1cm49c2hvdWxkX2NoZWNrX3JldHVybikKLSAgICBhcGtzID0gW10KLSAgICBiYWRfb3V0cHV0ID0gRmFsc2UKLSAgICBmb3IgbGluZSBpbiBvdXRwdXQ6Ci0gICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ3BhY2thZ2U6Jyk6Ci0gICAgICAgIGFwa3MuYXBwZW5kKGxpbmVbbGVuKCdwYWNrYWdlOicpOl0pCi0gICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnV0FSTklORzonKToKLSAgICAgICAgY29udGludWUKLSAgICAgIGVsc2U6Ci0gICAgICAgIGJhZF9vdXRwdXQgPSBUcnVlICAjIFVuZXhwZWN0ZWQgbGluZSBpbiBvdXRwdXQuCi0gICAgaWYgbm90IGFwa3MgYW5kIG91dHB1dDoKLSAgICAgIGlmIGJhZF9vdXRwdXQ6Ci0gICAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgcG0gcGF0aCBvdXRwdXQ6ICVyJyAlICdcbicuam9pbihvdXRwdXQpLCBzdHIoc2VsZikpCi0gICAgICBlbHNlOgotICAgICAgICBsb2dnZXIud2FybmluZygncG0gcmV0dXJuZWQgbm8gcGF0aHMgYnV0IHRoZSBmb2xsb3dpbmcgd2FybmluZ3M6JykKLSAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0OgotICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCctICVzJywgbGluZSkKLSAgICBzZWxmLl9jYWNoZVsncGFja2FnZV9hcGtfcGF0aHMnXVtwYWNrYWdlXSA9IGxpc3QoYXBrcykKLSAgICByZXR1cm4gYXBrcwotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBHZXRBcHBsaWNhdGlvblZlcnNpb24oc2VsZiwgcGFja2FnZSwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIkdldCB0aGUgdmVyc2lvbiBuYW1lIG9mIGEgcGFja2FnZSBpbnN0YWxsZWQgb24gdGhlIGRldmljZS4KLQotICAgIEFyZ3M6Ci0gICAgICBwYWNrYWdlOiBOYW1lIG9mIHRoZSBwYWNrYWdlLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgc3RyaW5nIHdpdGggdGhlIHZlcnNpb24gbmFtZSBvciBOb25lIGlmIHRoZSBwYWNrYWdlIGlzIG5vdCBmb3VuZAotICAgICAgb24gdGhlIGRldmljZS4KLSAgICAiIiIKLSAgICBvdXRwdXQgPSBzZWxmLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgWydkdW1wc3lzJywgJ3BhY2thZ2UnLCBwYWNrYWdlXSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgaWYgbm90IG91dHB1dDoKLSAgICAgIHJldHVybiBOb25lCi0gICAgZm9yIGxpbmUgaW4gb3V0cHV0OgotICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd2ZXJzaW9uTmFtZT0nKToKLSAgICAgICAgcmV0dXJuIGxpbmVbbGVuKCd2ZXJzaW9uTmFtZT0nKTpdCi0gICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IoCi0gICAgICAgICdWZXJzaW9uIG5hbWUgZm9yICVzIG5vdCBmb3VuZCBvbiBkdW1wc3lzIG91dHB1dCcgJSBwYWNrYWdlLCBzdHIoc2VsZikpCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIEdldEFwcGxpY2F0aW9uRGF0YURpcmVjdG9yeShzZWxmLCBwYWNrYWdlLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiR2V0IHRoZSBkYXRhIGRpcmVjdG9yeSBvbiB0aGUgZGV2aWNlIGZvciB0aGUgZ2l2ZW4gcGFja2FnZS4KLQotICAgIEFyZ3M6Ci0gICAgICBwYWNrYWdlOiBOYW1lIG9mIHRoZSBwYWNrYWdlLgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBwYWNrYWdlJ3MgZGF0YSBkaXJlY3RvcnkuCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIGlmIHRoZSBwYWNrYWdlJ3MgZGF0YSBkaXJlY3RvcnkgY2FuJ3QgYmUgZm91bmQsCi0gICAgICAgIHdoZXRoZXIgYmVjYXVzZSBpdCdzIG5vdCBpbnN0YWxsZWQgb3Igb3RoZXJ3aXNlLgotICAgICIiIgotICAgIG91dHB1dCA9IHNlbGYuX1J1blBpcGVkU2hlbGxDb21tYW5kKAotICAgICAgICAncG0gZHVtcCAlcyB8IGdyZXAgZGF0YURpcj0nICUgY21kX2hlbHBlci5TaW5nbGVRdW90ZShwYWNrYWdlKSkKLSAgICBmb3IgbGluZSBpbiBvdXRwdXQ6Ci0gICAgICBfLCBfLCBkYXRhRGlyID0gbGluZS5wYXJ0aXRpb24oJ2RhdGFEaXI9JykKLSAgICAgIGlmIGRhdGFEaXI6Ci0gICAgICAgIHJldHVybiBkYXRhRGlyCi0gICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IoCi0gICAgICAgICdDb3VsZCBub3QgZmluZCBkYXRhIGRpcmVjdG9yeSBmb3IgJXMnLCBwYWNrYWdlKQotCi0gIGRlZiBUYWtlQnVnUmVwb3J0KHNlbGYsIHBhdGgsIHRpbWVvdXQ9NjAqNSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJUYWtlcyBhIGJ1ZyByZXBvcnQgYW5kIGR1bXBzIGl0IHRvIHRoZSBzcGVjaWZpZWQgcGF0aC4KLQotICAgIFRoaXMgZG9lc24ndCB1c2UgYWRiJ3MgYnVncmVwb3J0IG9wdGlvbiBzaW5jZSBpdHMgYmVoYXZpb3IgaXMgZGVwZW5kZW50IG9uCi0gICAgYm90aCBhZGIgdmVyc2lvbiBhbmQgZGV2aWNlIE9TIHZlcnNpb24uIFRvIG1ha2UgaXQgc2ltcGxlciwgdGhpcyBkaXJlY3RseQotICAgIHJ1bnMgdGhlIGJ1Z3JlcG9ydCBjb21tYW5kIG9uIHRoZSBkZXZpY2UgaXRzZWxmIGFuZCBkdW1wcyB0aGUgc3Rkb3V0IHRvIGEKLSAgICBmaWxlLgotCi0gICAgQXJnczoKLSAgICAgIHBhdGg6IFBhdGggb24gdGhlIGhvc3QgdG8gZHJvcCB0aGUgYnVnIHJlcG9ydC4KLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi0gICAgIiIiCi0gICAgd2l0aCBkZXZpY2VfdGVtcF9maWxlLkRldmljZVRlbXBGaWxlKHNlbGYuYWRiKSBhcyBkZXZpY2VfdG1wX2ZpbGU6Ci0gICAgICBjbWQgPSAnKCBidWdyZXBvcnQgKT4lcyAyPiYxJyAlIGRldmljZV90bXBfZmlsZS5uYW1lCi0gICAgICBzZWxmLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICBjbWQsIGNoZWNrX3JldHVybj1UcnVlLCBzaGVsbD1UcnVlLCB0aW1lb3V0PXRpbWVvdXQsIHJldHJpZXM9cmV0cmllcykKLSAgICAgIHNlbGYuUHVsbEZpbGUoZGV2aWNlX3RtcF9maWxlLm5hbWUsIHBhdGgpCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIFdhaXRVbnRpbEZ1bGx5Qm9vdGVkKHNlbGYsIHdpZmk9RmFsc2UsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJXYWl0IGZvciB0aGUgZGV2aWNlIHRvIGZ1bGx5IGJvb3QuCi0KLSAgICBUaGlzIG1lYW5zIHdhaXRpbmcgZm9yIHRoZSBkZXZpY2UgdG8gYm9vdCwgdGhlIHBhY2thZ2UgbWFuYWdlciB0byBiZQotICAgIGF2YWlsYWJsZSwgYW5kIHRoZSBTRCBjYXJkIHRvIGJlIHJlYWR5LiBJdCBjYW4gb3B0aW9uYWxseSBtZWFuIHdhaXRpbmcKLSAgICBmb3Igd2lmaSB0byBjb21lIHVwLCB0b28uCi0KLSAgICBBcmdzOgotICAgICAgd2lmaTogQSBib29sZWFuIGluZGljYXRpbmcgaWYgd2Ugc2hvdWxkIHdhaXQgZm9yIHdpZmkgdG8gY29tZSB1cCBvciBub3QuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kRmFpbGVkRXJyb3Igb24gZmFpbHVyZS4KLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3IgaWYgb25lIG9mIHRoZSBjb21wb25lbnQgd2FpdHMgdGltZXMgb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBpZiB0aGUgZGV2aWNlIGJlY29tZXMgdW5yZXNwb25zaXZlLgotICAgICIiIgotICAgIGRlZiBzZF9jYXJkX3JlYWR5KCk6Ci0gICAgICB0cnk6Ci0gICAgICAgIHNlbGYuUnVuU2hlbGxDb21tYW5kKFsndGVzdCcsICctZCcsIHNlbGYuR2V0RXh0ZXJuYWxTdG9yYWdlUGF0aCgpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgICAgIHJldHVybiBUcnVlCi0gICAgICBleGNlcHQgZGV2aWNlX2Vycm9ycy5BZGJDb21tYW5kRmFpbGVkRXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIHBtX3JlYWR5KCk6Ci0gICAgICB0cnk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwoJ2FuZHJvaWQnLCBza2lwX2NhY2hlPVRydWUpCi0gICAgICBleGNlcHQgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIGJvb3RfY29tcGxldGVkKCk6Ci0gICAgICB0cnk6Ci0gICAgICAgIHJldHVybiBzZWxmLkdldFByb3AoJ3N5cy5ib290X2NvbXBsZXRlZCcsIGNhY2hlPUZhbHNlKSA9PSAnMScKLSAgICAgIGV4Y2VwdCBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcjoKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgd2lmaV9lbmFibGVkKCk6Ci0gICAgICByZXR1cm4gJ1dpLUZpIGlzIGVuYWJsZWQnIGluIHNlbGYuUnVuU2hlbGxDb21tYW5kKFsnZHVtcHN5cycsICd3aWZpJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3JldHVybj1GYWxzZSkKLQotICAgIHNlbGYuYWRiLldhaXRGb3JEZXZpY2UoKQotICAgIHRpbWVvdXRfcmV0cnkuV2FpdEZvcihzZF9jYXJkX3JlYWR5KQotICAgIHRpbWVvdXRfcmV0cnkuV2FpdEZvcihwbV9yZWFkeSkKLSAgICB0aW1lb3V0X3JldHJ5LldhaXRGb3IoYm9vdF9jb21wbGV0ZWQpCi0gICAgaWYgd2lmaToKLSAgICAgIHRpbWVvdXRfcmV0cnkuV2FpdEZvcih3aWZpX2VuYWJsZWQpCi0KLSAgUkVCT09UX0RFRkFVTFRfVElNRU9VVCA9IDEwICogX0RFRkFVTFRfVElNRU9VVAotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgKLSAgICAgIG1pbl9kZWZhdWx0X3RpbWVvdXQ9UkVCT09UX0RFRkFVTFRfVElNRU9VVCkKLSAgZGVmIFJlYm9vdChzZWxmLCBibG9jaz1UcnVlLCB3aWZpPUZhbHNlLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiUmVib290IHRoZSBkZXZpY2UuCi0KLSAgICBBcmdzOgotICAgICAgYmxvY2s6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHdlIHNob3VsZCB3YWl0IGZvciB0aGUgcmVib290IHRvIGNvbXBsZXRlLgotICAgICAgd2lmaTogQSBib29sZWFuIGluZGljYXRpbmcgaWYgd2Ugc2hvdWxkIHdhaXQgZm9yIHdpZmkgdG8gYmUgZW5hYmxlZCBhZnRlcgotICAgICAgICB0aGUgcmVib290LiBUaGUgb3B0aW9uIGhhcyBubyBlZmZlY3QgdW5sZXNzIHxibG9ja3wgaXMgYWxzbyBUcnVlLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLSAgICAiIiIKLSAgICBkZWYgZGV2aWNlX29mZmxpbmUoKToKLSAgICAgIHJldHVybiBub3Qgc2VsZi5Jc09ubGluZSgpCi0KLSAgICBzZWxmLmFkYi5SZWJvb3QoKQotICAgIHNlbGYuX0NsZWFyQ2FjaGUoKQotICAgIHRpbWVvdXRfcmV0cnkuV2FpdEZvcihkZXZpY2Vfb2ZmbGluZSwgd2FpdF9wZXJpb2Q9MSkKLSAgICBpZiBibG9jazoKLSAgICAgIHNlbGYuV2FpdFVudGlsRnVsbHlCb290ZWQod2lmaT13aWZpKQotCi0gIElOU1RBTExfREVGQVVMVF9USU1FT1VUID0gNCAqIF9ERUZBVUxUX1RJTUVPVVQKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoCi0gICAgICBtaW5fZGVmYXVsdF90aW1lb3V0PUlOU1RBTExfREVGQVVMVF9USU1FT1VUKQotICBkZWYgSW5zdGFsbChzZWxmLCBhcGssIGFsbG93X2Rvd25ncmFkZT1GYWxzZSwgcmVpbnN0YWxsPUZhbHNlLAotICAgICAgICAgICAgICBwZXJtaXNzaW9ucz1Ob25lLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiSW5zdGFsbCBhbiBBUEsuCi0KLSAgICBOb29wIGlmIGFuIGlkZW50aWNhbCBBUEsgaXMgYWxyZWFkeSBpbnN0YWxsZWQuCi0KLSAgICBBcmdzOgotICAgICAgYXBrOiBBbiBBcGtIZWxwZXIgaW5zdGFuY2Ugb3Igc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIEFQSy4KLSAgICAgIGFsbG93X2Rvd25ncmFkZTogQSBib29sZWFuIGluZGljYXRpbmcgaWYgd2Ugc2hvdWxkIGFsbG93IGRvd25ncmFkZXMuCi0gICAgICByZWluc3RhbGw6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHdlIHNob3VsZCBrZWVwIGFueSBleGlzdGluZyBhcHAgZGF0YS4KLSAgICAgIHBlcm1pc3Npb25zOiBTZXQgb2YgcGVybWlzc2lvbnMgdG8gc2V0LiBJZiBub3Qgc2V0LCBmaW5kcyBwZXJtaXNzaW9ucyB3aXRoCi0gICAgICAgICAgYXBrIGhlbHBlci4gVG8gc2V0IG5vIHBlcm1pc3Npb25zLCBwYXNzIFtdLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIGlmIHRoZSBpbnN0YWxsYXRpb24gZmFpbHMuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIGlmIHRoZSBpbnN0YWxsYXRpb24gdGltZXMgb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLSAgICAiIiIKLSAgICBzZWxmLl9JbnN0YWxsSW50ZXJuYWwoYXBrLCBOb25lLCBhbGxvd19kb3duZ3JhZGU9YWxsb3dfZG93bmdyYWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZWluc3RhbGw9cmVpbnN0YWxsLCBwZXJtaXNzaW9ucz1wZXJtaXNzaW9ucykKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoCi0gICAgICBtaW5fZGVmYXVsdF90aW1lb3V0PUlOU1RBTExfREVGQVVMVF9USU1FT1VUKQotICBkZWYgSW5zdGFsbFNwbGl0QXBrKHNlbGYsIGJhc2VfYXBrLCBzcGxpdF9hcGtzLCBhbGxvd19kb3duZ3JhZGU9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgcmVpbnN0YWxsPUZhbHNlLCBhbGxvd19jYWNoZWRfcHJvcHM9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM9Tm9uZSwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIkluc3RhbGwgYSBzcGxpdCBBUEsuCi0KLSAgICBOb29wIGlmIGFsbCBvZiB0aGUgQVBLIHNwbGl0cyBhcmUgYWxyZWFkeSBpbnN0YWxsZWQuCi0KLSAgICBBcmdzOgotICAgICAgYmFzZV9hcGs6IEFuIEFwa0hlbHBlciBpbnN0YW5jZSBvciBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgYmFzZQotICAgICAgICAgIEFQSy4KLSAgICAgIHNwbGl0X2Fwa3M6IEEgbGlzdCBvZiBzdHJpbmdzIG9mIHBhdGhzIG9mIGFsbCBvZiB0aGUgQVBLIHNwbGl0cy4KLSAgICAgIGFsbG93X2Rvd25ncmFkZTogQSBib29sZWFuIGluZGljYXRpbmcgaWYgd2Ugc2hvdWxkIGFsbG93IGRvd25ncmFkZXMuCi0gICAgICByZWluc3RhbGw6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHdlIHNob3VsZCBrZWVwIGFueSBleGlzdGluZyBhcHAgZGF0YS4KLSAgICAgIGFsbG93X2NhY2hlZF9wcm9wczogV2hldGhlciB0byB1c2UgY2FjaGVkIHZhbHVlcyBmb3IgZGV2aWNlIHByb3BlcnRpZXMuCi0gICAgICBwZXJtaXNzaW9uczogU2V0IG9mIHBlcm1pc3Npb25zIHRvIHNldC4gSWYgbm90IHNldCwgZmluZHMgcGVybWlzc2lvbnMgd2l0aAotICAgICAgICAgIGFwayBoZWxwZXIuIFRvIHNldCBubyBwZXJtaXNzaW9ucywgcGFzcyBbXS4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiB0aGUgaW5zdGFsbGF0aW9uIGZhaWxzLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBpZiB0aGUgaW5zdGFsbGF0aW9uIHRpbWVzIG91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi0gICAgICBEZXZpY2VWZXJzaW9uRXJyb3IgaWYgZGV2aWNlIFNESyBpcyBsZXNzIHRoYW4gQW5kcm9pZCBMLgotICAgICIiIgotICAgIHNlbGYuX0luc3RhbGxJbnRlcm5hbChiYXNlX2Fwaywgc3BsaXRfYXBrcywgcmVpbnN0YWxsPXJlaW5zdGFsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfY2FjaGVkX3Byb3BzPWFsbG93X2NhY2hlZF9wcm9wcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM9cGVybWlzc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2Rvd25ncmFkZT1hbGxvd19kb3duZ3JhZGUpCi0KLSAgZGVmIF9JbnN0YWxsSW50ZXJuYWwoc2VsZiwgYmFzZV9hcGssIHNwbGl0X2Fwa3MsIGFsbG93X2Rvd25ncmFkZT1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgcmVpbnN0YWxsPUZhbHNlLCBhbGxvd19jYWNoZWRfcHJvcHM9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zPU5vbmUpOgotICAgIGlmIHNwbGl0X2Fwa3M6Ci0gICAgICBzZWxmLl9DaGVja1Nka0xldmVsKHZlcnNpb25fY29kZXMuTE9MTElQT1ApCi0KLSAgICBiYXNlX2FwayA9IGFwa19oZWxwZXIuVG9IZWxwZXIoYmFzZV9hcGspCi0KLSAgICBhbGxfYXBrcyA9IFtiYXNlX2Fway5wYXRoXQotICAgIGlmIHNwbGl0X2Fwa3M6Ci0gICAgICBhbGxfYXBrcyArPSBzcGxpdF9zZWxlY3QuU2VsZWN0U3BsaXRzKAotICAgICAgICBzZWxmLCBiYXNlX2Fway5wYXRoLCBzcGxpdF9hcGtzLCBhbGxvd19jYWNoZWRfcHJvcHM9YWxsb3dfY2FjaGVkX3Byb3BzKQotICAgICAgaWYgbGVuKGFsbF9hcGtzKSA9PSAxOgotICAgICAgICBsb2dnZXIud2FybmluZygnc3BsaXQtc2VsZWN0IGRpZCBub3Qgc2VsZWN0IGFueSBmcm9tICVzJywgc3BsaXRfYXBrcykKLQotICAgIG1pc3NpbmdfYXBrcyA9IFthcGsgZm9yIGFwayBpbiBhbGxfYXBrcyBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXBrKV0KLSAgICBpZiBtaXNzaW5nX2Fwa3M6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICAnQXR0ZW1wdGVkIHRvIGluc3RhbGwgbm9uLWV4aXN0ZW50IGFwa3M6ICVzJwotICAgICAgICAgICAgICAlIHBwcmludC5wZm9ybWF0KG1pc3NpbmdfYXBrcykpCi0KLSAgICBwYWNrYWdlX25hbWUgPSBiYXNlX2Fway5HZXRQYWNrYWdlTmFtZSgpCi0gICAgZGV2aWNlX2Fwa19wYXRocyA9IHNlbGYuX0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbChwYWNrYWdlX25hbWUpCi0KLSAgICBhcGtzX3RvX2luc3RhbGwgPSBOb25lCi0gICAgaG9zdF9jaGVja3N1bXMgPSBOb25lCi0gICAgaWYgbm90IGRldmljZV9hcGtfcGF0aHM6Ci0gICAgICBhcGtzX3RvX2luc3RhbGwgPSBhbGxfYXBrcwotICAgIGVsaWYgbGVuKGRldmljZV9hcGtfcGF0aHMpID4gMSBhbmQgbm90IHNwbGl0X2Fwa3M6Ci0gICAgICBsb2dnZXIud2FybmluZygKLSAgICAgICAgICAnSW5zdGFsbGluZyBub24tc3BsaXQgQVBLIHdoZW4gc3BsaXQgQVBLIHdhcyBwcmV2aW91c2x5IGluc3RhbGxlZCcpCi0gICAgICBhcGtzX3RvX2luc3RhbGwgPSBhbGxfYXBrcwotICAgIGVsaWYgbGVuKGRldmljZV9hcGtfcGF0aHMpID09IDEgYW5kIHNwbGl0X2Fwa3M6Ci0gICAgICBsb2dnZXIud2FybmluZygKLSAgICAgICAgICAnSW5zdGFsbGluZyBzcGxpdCBBUEsgd2hlbiBub24tc3BsaXQgQVBLIHdhcyBwcmV2aW91c2x5IGluc3RhbGxlZCcpCi0gICAgICBhcGtzX3RvX2luc3RhbGwgPSBhbGxfYXBrcwotICAgIGVsc2U6Ci0gICAgICB0cnk6Ci0gICAgICAgIGFwa3NfdG9faW5zdGFsbCwgaG9zdF9jaGVja3N1bXMgPSAoCi0gICAgICAgICAgICBzZWxmLl9Db21wdXRlU3RhbGVBcGtzKHBhY2thZ2VfbmFtZSwgYWxsX2Fwa3MpKQotICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKLSAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ0Vycm9yIGNhbGN1bGF0aW5nIG1kNTogJXMnLCBlKQotICAgICAgICBhcGtzX3RvX2luc3RhbGwsIGhvc3RfY2hlY2tzdW1zID0gYWxsX2Fwa3MsIE5vbmUKLSAgICAgIGlmIGFwa3NfdG9faW5zdGFsbCBhbmQgbm90IHJlaW5zdGFsbDoKLSAgICAgICAgc2VsZi5Vbmluc3RhbGwocGFja2FnZV9uYW1lKQotICAgICAgICBhcGtzX3RvX2luc3RhbGwgPSBhbGxfYXBrcwotCi0gICAgaWYgYXBrc190b19pbnN0YWxsOgotICAgICAgIyBBc3N1bWUgdGhhdCB3ZSB3b24ndCBrbm93IHRoZSByZXN1bHRpbmcgZGV2aWNlIHN0YXRlLgotICAgICAgc2VsZi5fY2FjaGVbJ3BhY2thZ2VfYXBrX3BhdGhzJ10ucG9wKHBhY2thZ2VfbmFtZSwgMCkKLSAgICAgIHNlbGYuX2NhY2hlWydwYWNrYWdlX2Fwa19jaGVja3N1bXMnXS5wb3AocGFja2FnZV9uYW1lLCAwKQotICAgICAgaWYgc3BsaXRfYXBrczoKLSAgICAgICAgcGFydGlhbCA9IHBhY2thZ2VfbmFtZSBpZiBsZW4oYXBrc190b19pbnN0YWxsKSA8IGxlbihhbGxfYXBrcykgZWxzZSBOb25lCi0gICAgICAgIHNlbGYuYWRiLkluc3RhbGxNdWx0aXBsZSgKLSAgICAgICAgICAgIGFwa3NfdG9faW5zdGFsbCwgcGFydGlhbD1wYXJ0aWFsLCByZWluc3RhbGw9cmVpbnN0YWxsLAotICAgICAgICAgICAgYWxsb3dfZG93bmdyYWRlPWFsbG93X2Rvd25ncmFkZSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHNlbGYuYWRiLkluc3RhbGwoCi0gICAgICAgICAgICBiYXNlX2Fway5wYXRoLCByZWluc3RhbGw9cmVpbnN0YWxsLCBhbGxvd19kb3duZ3JhZGU9YWxsb3dfZG93bmdyYWRlKQotICAgIGVsc2U6Ci0gICAgICAjIFJ1bm5pbmcgYWRiIGluc3RhbGwgdGVybWluYXRlcyBydW5uaW5nIGluc3RhbmNlcyBvZiB0aGUgYXBwLCBzbyB0byBiZQotICAgICAgIyBjb25zaXN0ZW50LCB3ZSBleHBsaWNpdGx5IHRlcm1pbmF0ZSBpdCB3aGVuIHNraXBwaW5nIHRoZSBpbnN0YWxsLgotICAgICAgc2VsZi5Gb3JjZVN0b3AocGFja2FnZV9uYW1lKQotCi0gICAgaWYgKHBlcm1pc3Npb25zIGlzIE5vbmUKLSAgICAgICAgYW5kIHNlbGYuYnVpbGRfdmVyc2lvbl9zZGsgPj0gdmVyc2lvbl9jb2Rlcy5NQVJTSE1BTExPVyk6Ci0gICAgICBwZXJtaXNzaW9ucyA9IGJhc2VfYXBrLkdldFBlcm1pc3Npb25zKCkKLSAgICBzZWxmLkdyYW50UGVybWlzc2lvbnMocGFja2FnZV9uYW1lLCBwZXJtaXNzaW9ucykKLSAgICAjIFVwb24gc3VjY2Vzcywgd2Uga25vdyB0aGUgZGV2aWNlIGNoZWNrc3VtcywgYnV0IG5vdCB0aGVpciBwYXRocy4KLSAgICBpZiBob3N0X2NoZWNrc3VtcyBpcyBub3QgTm9uZToKLSAgICAgIHNlbGYuX2NhY2hlWydwYWNrYWdlX2Fwa19jaGVja3N1bXMnXVtwYWNrYWdlX25hbWVdID0gaG9zdF9jaGVja3N1bXMKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgVW5pbnN0YWxsKHNlbGYsIHBhY2thZ2VfbmFtZSwga2VlcF9kYXRhPUZhbHNlLCB0aW1lb3V0PU5vbmUsCi0gICAgICAgICAgICAgICAgcmV0cmllcz1Ob25lKToKLSAgICAiIiJSZW1vdmUgdGhlIGFwcCB8cGFja2FnZV9uYW1lfCBmcm9tIHRoZSBkZXZpY2UuCi0KLSAgICBUaGlzIGlzIGEgbm8tb3AgaWYgdGhlIGFwcCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQuCi0KLSAgICBBcmdzOgotICAgICAgcGFja2FnZV9uYW1lOiBUaGUgcGFja2FnZSB0byB1bmluc3RhbGwuCi0gICAgICBrZWVwX2RhdGE6IChvcHRpb25hbCkgV2hldGhlciB0byBrZWVwIHRoZSBkYXRhIGFuZCBjYWNoZSBkaXJlY3Rvcmllcy4KLSAgICAgIHRpbWVvdXQ6IFRpbWVvdXQgaW4gc2Vjb25kcy4KLSAgICAgIHJldHJpZXM6IE51bWJlciBvZiByZXRyaWVzLgotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIGlmIHRoZSB1bmluc3RhbGxhdGlvbiBmYWlscy4KLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3IgaWYgdGhlIHVuaW5zdGFsbGF0aW9uIHRpbWVzIG91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi0gICAgIiIiCi0gICAgaW5zdGFsbGVkID0gc2VsZi5fR2V0QXBwbGljYXRpb25QYXRoc0ludGVybmFsKHBhY2thZ2VfbmFtZSkKLSAgICBpZiBub3QgaW5zdGFsbGVkOgotICAgICAgcmV0dXJuCi0gICAgdHJ5OgotICAgICAgc2VsZi5hZGIuVW5pbnN0YWxsKHBhY2thZ2VfbmFtZSwga2VlcF9kYXRhKQotICAgICAgc2VsZi5fY2FjaGVbJ3BhY2thZ2VfYXBrX3BhdGhzJ11bcGFja2FnZV9uYW1lXSA9IFtdCi0gICAgICBzZWxmLl9jYWNoZVsncGFja2FnZV9hcGtfY2hlY2tzdW1zJ11bcGFja2FnZV9uYW1lXSA9IHNldCgpCi0gICAgZXhjZXB0OgotICAgICAgIyBDbGVhciBjYWNoZSBzaW5jZSB3ZSBjYW4ndCBiZSBzdXJlIG9mIHRoZSBzdGF0ZS4KLSAgICAgIHNlbGYuX2NhY2hlWydwYWNrYWdlX2Fwa19wYXRocyddLnBvcChwYWNrYWdlX25hbWUsIDApCi0gICAgICBzZWxmLl9jYWNoZVsncGFja2FnZV9hcGtfY2hlY2tzdW1zJ10ucG9wKHBhY2thZ2VfbmFtZSwgMCkKLSAgICAgIHJhaXNlCi0KLSAgZGVmIF9DaGVja1Nka0xldmVsKHNlbGYsIHJlcXVpcmVkX3Nka19sZXZlbCk6Ci0gICAgIiIiUmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgZGV2aWNlIGRvZXMgbm90IGhhdmUgdGhlIHJlcXVpcmVkIFNESyBsZXZlbC4KLSAgICAiIiIKLSAgICBpZiBzZWxmLmJ1aWxkX3ZlcnNpb25fc2RrIDwgcmVxdWlyZWRfc2RrX2xldmVsOgotICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5EZXZpY2VWZXJzaW9uRXJyb3IoCi0gICAgICAgICAgKCdSZXF1aXJlcyBTREsgbGV2ZWwgJXMsIGRldmljZSBpcyBTREsgbGV2ZWwgJXMnICUKLSAgICAgICAgICAgKHJlcXVpcmVkX3Nka19sZXZlbCwgc2VsZi5idWlsZF92ZXJzaW9uX3NkaykpLAotICAgICAgICAgICBkZXZpY2Vfc2VyaWFsPXNlbGYuc2VyaWFsKQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBSdW5TaGVsbENvbW1hbmQoc2VsZiwgY21kLCBzaGVsbD1GYWxzZSwgY2hlY2tfcmV0dXJuPUZhbHNlLCBjd2Q9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICBlbnY9Tm9uZSwgcnVuX2FzPU5vbmUsIGFzX3Jvb3Q9RmFsc2UsIHNpbmdsZV9saW5lPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgIGxhcmdlX291dHB1dD1GYWxzZSwgcmF3X291dHB1dD1GYWxzZSwgdGltZW91dD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiUnVuIGFuIEFEQiBzaGVsbCBjb21tYW5kLgotCi0gICAgVGhlIGNvbW1hbmQgdG8gcnVuIHxjbWR8IHNob3VsZCBiZSBhIHNlcXVlbmNlIG9mIHByb2dyYW0gYXJndW1lbnRzCi0gICAgKHByZWZlcnJlZCkgb3IgYSBzaW5nbGUgc3RyaW5nIHdpdGggYSBzaGVsbCBzY3JpcHQgdG8gcnVuLgotCi0gICAgV2hlbiB8Y21kfCBpcyBhIHNlcXVlbmNlLCBpdCBpcyBhc3N1bWVkIHRvIGNvbnRhaW4gdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQKLSAgICB0byBydW4gZm9sbG93ZWQgYnkgaXRzIGFyZ3VtZW50cy4gSW4gdGhpcyBjYXNlLCBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUKLSAgICBjb21tYW5kIGV4YWN0bHkgYXMgZ2l2ZW4sIHByZXZlbnRpbmcgYW55IGZ1cnRoZXIgcHJvY2Vzc2luZyBieSB0aGUgc2hlbGwuCi0gICAgVGhpcyBhbGxvd3MgY2FsbGVycyB0byBlYXNpbHkgcGFzcyBhcmd1bWVudHMgd2l0aCBzcGFjZXMgb3Igc3BlY2lhbAotICAgIGNoYXJhY3RlcnMgd2l0aG91dCBoYXZpbmcgdG8gd29ycnkgYWJvdXQgcXVvdGluZyBydWxlcy4gV2hlbmV2ZXIgcG9zc2libGUsCi0gICAgaXQgaXMgcmVjb21lbmRlZCB0byBwYXNzIHxjbWR8IGFzIGEgc2VxdWVuY2UuCi0KLSAgICBXaGVuIHxjbWR8IGlzIHBhc3NlZCBhcyBhIHNpbmdsZSBzdHJpbmcsIHxzaGVsbHwgc2hvdWxkIGJlIHNldCB0byBUcnVlLgotICAgIFRoZSBjb21tYW5kIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYW5kIHJ1biBieSB0aGUgc2hlbGwgb24gdGhlIGRldmljZSwKLSAgICBhbGxvd2luZyB0aGUgdXNlIG9mIHNoZWxsIGZlYXR1cmVzIHN1Y2ggYXMgcGlwZXMsIHdpbGRjYXJkcywgb3IgdmFyaWFibGVzLgotICAgIEZhaWxpbmcgdG8gc2V0IHNoZWxsPVRydWUgd2lsbCBpc3N1ZSBhIHdhcm5pbmcsIGJ1dCB0aGlzIHdpbGwgYmUgY2hhbmdlZAotICAgIHRvIGEgaGFyZCBmYWlsdXJlIGluIHRoZSBmdXR1cmUgKHNlZTogY2F0YXB1bHQ6IzMyNDIpLgotCi0gICAgVGhpcyBiZWhhdmlvdXIgaXMgY29uc2lzdGVudCB3aXRoIHRoYXQgb2YgY29tbWFuZCBydW5uZXJzIGluIGNtZF9oZWxwZXIgYXMKLSAgICB3ZWxsIGFzIFB5dGhvbidzIG93biBzdWJwcm9jZXNzLlBvcGVuLgotCi0gICAgVE9ETyhwZXJlemp1KSBDaGFuZ2UgdGhlIGRlZmF1bHQgb2YgfGNoZWNrX3JldHVybnwgdG8gVHJ1ZSB3aGVuIGNhbGxlcnMKLSAgICAgIGhhdmUgc3dpdGNoZWQgdG8gdGhlIG5ldyBiZWhhdmlvdXIuCi0KLSAgICBBcmdzOgotICAgICAgY21kOiBBIHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGNvbW1hbmQgdG8gcnVuIGFuZCBpdHMgYXJndW1lbnRzLCBvciBhCi0gICAgICAgIHN0cmluZyB3aXRoIGEgc2hlbGwgc2NyaXB0IHRvIHJ1biAoc2hvdWxkIGFsc28gc2V0IHNoZWxsPVRydWUpLgotICAgICAgc2hlbGw6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgc2hlbGwgZmVhdHVyZXMgbWF5IGJlIHVzZWQgaW4gfGNtZHwuCi0gICAgICBjaGVja19yZXR1cm46IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZSByZXR1cm4gY29kZSBzaG91bGQKLSAgICAgICAgYmUgY2hlY2tlZC4KLSAgICAgIGN3ZDogVGhlIGRldmljZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbW1hbmQgc2hvdWxkIGJlIHJ1bi4KLSAgICAgIGVudjogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIHdoaWNoIHRoZSBjb21tYW5kIHNob3VsZCBiZSBydW4uCi0gICAgICBydW5fYXM6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhY2thZ2UgYXMgd2hpY2ggdGhlIGNvbW1hbmQgc2hvdWxkIGJlCi0gICAgICAgIHJ1bi4KLSAgICAgIGFzX3Jvb3Q6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNoZWxsIGNvbW1hbmQgc2hvdWxkIGJlIHJ1bgotICAgICAgICB3aXRoIHJvb3QgcHJpdmlsZWdlcy4KLSAgICAgIHNpbmdsZV9saW5lOiBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBvbmx5IGEgc2luZ2xlIGxpbmUgb2Ygb3V0cHV0IGlzCi0gICAgICAgIGV4cGVjdGVkLgotICAgICAgbGFyZ2Vfb3V0cHV0OiBVc2VzIGEgd29yay1hcm91bmQgZm9yIGxhcmdlIHNoZWxsIGNvbW1hbmQgb3V0cHV0LiBXaXRob3V0Ci0gICAgICAgIHRoaXMgbGFyZ2Ugb3V0cHV0IHdpbGwgYmUgdHJ1bmNhdGVkLgotICAgICAgcmF3X291dHB1dDogV2hldGhlciB0byBvbmx5IHJldHVybiB0aGUgcmF3IG91dHB1dAotICAgICAgICAgIChubyBzcGxpdHRpbmcgaW50byBsaW5lcykuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgSWYgc2luZ2xlX2xpbmUgaXMgRmFsc2UsIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgYXMgYSBsaXN0IG9mIGxpbmVzLAotICAgICAgb3RoZXJ3aXNlLCBhIHN0cmluZyB3aXRoIHRoZSB1bmlxdWUgbGluZSBvZiBvdXRwdXQgZW1taXRlZCBieSB0aGUgY29tbWFuZAotICAgICAgKHdpdGggdGhlIG9wdGlvbmFsIG5ld2xpbmUgYXQgdGhlIGVuZCBzdHJpcHBlZCkuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBBZGJDb21tYW5kRmFpbGVkRXJyb3IgaWYgY2hlY2tfcmV0dXJuIGlzIFRydWUgYW5kIHRoZSBleGl0IGNvZGUgb2YKLSAgICAgICAgdGhlIGNvbW1hbmQgcnVuIG9uIHRoZSBkZXZpY2UgaXMgbm9uLXplcm8uCi0gICAgICBDb21tYW5kRmFpbGVkRXJyb3IgaWYgc2luZ2xlX2xpbmUgaXMgVHJ1ZSBidXQgdGhlIG91dHB1dCBjb250YWlucyB0d28gb3IKLSAgICAgICAgbW9yZSBsaW5lcy4KLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi0gICAgIiIiCi0gICAgZGVmIGVudl9xdW90ZShrZXksIHZhbHVlKToKLSAgICAgIGlmIG5vdCBEZXZpY2VVdGlscy5fVkFMSURfU0hFTExfVkFSSUFCTEUubWF0Y2goa2V5KToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ0ludmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZSAlcicgJSBrZXkpCi0gICAgICAjIHVzaW5nIGRvdWJsZSBxdW90ZXMgaGVyZSB0byBhbGxvdyBpbnRlcnBvbGF0aW9uIG9mIHNoZWxsIHZhcmlhYmxlcwotICAgICAgcmV0dXJuICclcz0lcycgJSAoa2V5LCBjbWRfaGVscGVyLkRvdWJsZVF1b3RlKHZhbHVlKSkKLQotICAgIGRlZiBydW4oY21kKToKLSAgICAgIHJldHVybiBzZWxmLmFkYi5TaGVsbChjbWQpCi0KLSAgICBkZWYgaGFuZGxlX2NoZWNrX3JldHVybihjbWQpOgotICAgICAgdHJ5OgotICAgICAgICByZXR1cm4gcnVuKGNtZCkKLSAgICAgIGV4Y2VwdCBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvciBhcyBleGM6Ci0gICAgICAgIGlmIGNoZWNrX3JldHVybjoKLSAgICAgICAgICByYWlzZQotICAgICAgICBlbHNlOgotICAgICAgICAgIHJldHVybiBleGMub3V0cHV0Ci0KLSAgICBkZWYgaGFuZGxlX2xhcmdlX2NvbW1hbmQoY21kKToKLSAgICAgIGlmIGxlbihjbWQpIDwgc2VsZi5fTUFYX0FEQl9DT01NQU5EX0xFTkdUSDoKLSAgICAgICAgcmV0dXJuIGhhbmRsZV9jaGVja19yZXR1cm4oY21kKQotICAgICAgZWxzZToKLSAgICAgICAgd2l0aCBkZXZpY2VfdGVtcF9maWxlLkRldmljZVRlbXBGaWxlKHNlbGYuYWRiLCBzdWZmaXg9Jy5zaCcpIGFzIHNjcmlwdDoKLSAgICAgICAgICBzZWxmLl9Xcml0ZUZpbGVXaXRoUHVzaChzY3JpcHQubmFtZSwgY21kKQotICAgICAgICAgIGxvZ2dlci5pbmZvKCdMYXJnZSBzaGVsbCBjb21tYW5kIHdpbGwgYmUgcnVuIGZyb20gZmlsZTogJXMgLi4uJywKLSAgICAgICAgICAgICAgICAgICAgICBjbWRbOnNlbGYuX01BWF9BREJfQ09NTUFORF9MRU5HVEhdKQotICAgICAgICAgIHJldHVybiBoYW5kbGVfY2hlY2tfcmV0dXJuKCdzaCAlcycgJSBzY3JpcHQubmFtZV9xdW90ZWQpCi0KLSAgICBkZWYgaGFuZGxlX2xhcmdlX291dHB1dChjbWQsIGxhcmdlX291dHB1dF9tb2RlKToKLSAgICAgIGlmIGxhcmdlX291dHB1dF9tb2RlOgotICAgICAgICB3aXRoIGRldmljZV90ZW1wX2ZpbGUuRGV2aWNlVGVtcEZpbGUoc2VsZi5hZGIpIGFzIGxhcmdlX291dHB1dF9maWxlOgotICAgICAgICAgIGNtZCA9ICcoICVzICk+JXMgMj4mMScgJSAoY21kLCBsYXJnZV9vdXRwdXRfZmlsZS5uYW1lKQotICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnTGFyZ2Ugb3V0cHV0IG1vZGUgZW5hYmxlZC4gV2lsbCB3cml0ZSBvdXRwdXQgdG8gJwotICAgICAgICAgICAgICAgICAgICAgICAnZGV2aWNlIGFuZCByZWFkIHJlc3VsdHMgZnJvbSBmaWxlLicpCi0gICAgICAgICAgaGFuZGxlX2xhcmdlX2NvbW1hbmQoY21kKQotICAgICAgICAgIHJldHVybiBzZWxmLlJlYWRGaWxlKGxhcmdlX291dHB1dF9maWxlLm5hbWUsIGZvcmNlX3B1bGw9VHJ1ZSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICByZXR1cm4gaGFuZGxlX2xhcmdlX2NvbW1hbmQoY21kKQotICAgICAgICBleGNlcHQgZGV2aWNlX2Vycm9ycy5BZGJDb21tYW5kRmFpbGVkRXJyb3IgYXMgZXhjOgotICAgICAgICAgIGlmIGV4Yy5zdGF0dXMgaXMgTm9uZToKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcihfRm9ybWF0UGFydGlhbE91dHB1dEVycm9yKGV4Yy5vdXRwdXQpKQotICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ0F0dGVtcHRpbmcgdG8gcnVuIGluIGxhcmdlX291dHB1dCBtb2RlLicpCi0gICAgICAgICAgICBsb2dnZXIud2FybmluZygnVXNlIFJ1blNoZWxsQ29tbWFuZCguLi4sIGxhcmdlX291dHB1dD1UcnVlKSBmb3IgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoZWxsIGNvbW1hbmRzIHRoYXQgZXhwZWN0IGEgbG90IG9mIG91dHB1dC4nKQotICAgICAgICAgICAgcmV0dXJuIGhhbmRsZV9sYXJnZV9vdXRwdXQoY21kLCBUcnVlKQotICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZQotCi0gICAgaWYgaXNpbnN0YW5jZShjbWQsIGJhc2VzdHJpbmcpOgotICAgICAgaWYgbm90IHNoZWxsOgotICAgICAgICBsb2dnZXIud2FybmluZygKLSAgICAgICAgICAgICdUaGUgY29tbWFuZCB0byBydW4gc2hvdWxkIHByZWZlcmFibHkgYmUgcGFzc2VkIGFzIGEgc2VxdWVuY2Ugb2YnCi0gICAgICAgICAgICAnIGFyZ3MuIElmIHNoZWxsIGZlYXR1cmVzIGFyZSBuZWVkZWQgKHBpcGVzLCB3aWxkY2FyZHMsIHZhcmlhYmxlcyknCi0gICAgICAgICAgICAnIGNsaWVudHMgc2hvdWxkIGV4cGxpY2l0bHkgc2V0IHNoZWxsPVRydWUuJykKLSAgICBlbHNlOgotICAgICAgY21kID0gJyAnLmpvaW4oY21kX2hlbHBlci5TaW5nbGVRdW90ZShzKSBmb3IgcyBpbiBjbWQpCi0gICAgaWYgZW52OgotICAgICAgZW52ID0gJyAnLmpvaW4oZW52X3F1b3RlKGssIHYpIGZvciBrLCB2IGluIGVudi5pdGVyaXRlbXMoKSkKLSAgICAgIGNtZCA9ICclcyAlcycgJSAoZW52LCBjbWQpCi0gICAgaWYgY3dkOgotICAgICAgY21kID0gJ2NkICVzICYmICVzJyAlIChjbWRfaGVscGVyLlNpbmdsZVF1b3RlKGN3ZCksIGNtZCkKLSAgICBpZiBydW5fYXM6Ci0gICAgICBjbWQgPSAncnVuLWFzICVzIHNoIC1jICVzJyAlIChjbWRfaGVscGVyLlNpbmdsZVF1b3RlKHJ1bl9hcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRfaGVscGVyLlNpbmdsZVF1b3RlKGNtZCkpCi0gICAgaWYgYXNfcm9vdCBhbmQgc2VsZi5OZWVkc1NVKCk6Ci0gICAgICAjICJzdSAtYyBzaCAtYyIgYWxsb3dzIHVzaW5nIHNoZWxsIGZlYXR1cmVzIGluIHxjbWR8Ci0gICAgICBjbWQgPSBzZWxmLl9TdSgnc2ggLWMgJXMnICUgY21kX2hlbHBlci5TaW5nbGVRdW90ZShjbWQpKQotCi0gICAgb3V0cHV0ID0gaGFuZGxlX2xhcmdlX291dHB1dChjbWQsIGxhcmdlX291dHB1dCkKLQotICAgIGlmIHJhd19vdXRwdXQ6Ci0gICAgICByZXR1cm4gb3V0cHV0Ci0KLSAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXRsaW5lcygpCi0gICAgaWYgc2luZ2xlX2xpbmU6Ci0gICAgICBpZiBub3Qgb3V0cHV0OgotICAgICAgICByZXR1cm4gJycKLSAgICAgIGVsaWYgbGVuKG91dHB1dCkgPT0gMToKLSAgICAgICAgcmV0dXJuIG91dHB1dFswXQotICAgICAgZWxzZToKLSAgICAgICAgbXNnID0gJ29uZSBsaW5lIG9mIG91dHB1dCB3YXMgZXhwZWN0ZWQsIGJ1dCBnb3Q6ICVzJwotICAgICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcihtc2cgJSBvdXRwdXQsIHN0cihzZWxmKSkKLSAgICBlbHNlOgotICAgICAgcmV0dXJuIG91dHB1dAotCi0gIGRlZiBfUnVuUGlwZWRTaGVsbENvbW1hbmQoc2VsZiwgc2NyaXB0LCAqKmt3YXJncyk6Ci0gICAgUElQRVNUQVRVU19MRUFERVIgPSAnUElQRVNUQVRVUzogJwotCi0gICAgc2NyaXB0ICs9ICc7IGVjaG8gIiVzJHtQSVBFU1RBVFVTW0BdfSInICUgUElQRVNUQVRVU19MRUFERVIKLSAgICBrd2FyZ3MudXBkYXRlKHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlKQotICAgIG91dHB1dCA9IHNlbGYuUnVuU2hlbGxDb21tYW5kKHNjcmlwdCwgKiprd2FyZ3MpCi0gICAgcGlwZXN0YXR1c19saW5lID0gb3V0cHV0Wy0xXQotCi0gICAgaWYgbm90IHBpcGVzdGF0dXNfbGluZS5zdGFydHN3aXRoKFBJUEVTVEFUVVNfTEVBREVSKToKLSAgICAgIGxvZ2dlci5lcnJvcignUGlwZSBleGl0IHN0YXR1c2VzIG9mIHNoZWxsIHNjcmlwdCBtaXNzaW5nLicpCi0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkFkYlNoZWxsQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAgIHNjcmlwdCwgb3V0cHV0LCBzdGF0dXM9Tm9uZSwKLSAgICAgICAgICBkZXZpY2Vfc2VyaWFsPXNlbGYuc2VyaWFsKQotCi0gICAgb3V0cHV0ID0gb3V0cHV0WzotMV0KLSAgICBzdGF0dXNlcyA9IFsKLSAgICAgICAgaW50KHMpIGZvciBzIGluIHBpcGVzdGF0dXNfbGluZVtsZW4oUElQRVNUQVRVU19MRUFERVIpOl0uc3BsaXQoKV0KLSAgICBpZiBhbnkoc3RhdHVzZXMpOgotICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5BZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICBzY3JpcHQsIG91dHB1dCwgc3RhdHVzPXN0YXR1c2VzLAotICAgICAgICAgIGRldmljZV9zZXJpYWw9c2VsZi5zZXJpYWwpCi0gICAgcmV0dXJuIG91dHB1dAotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBLaWxsQWxsKHNlbGYsIHByb2Nlc3NfbmFtZSwgZXhhY3Q9RmFsc2UsIHNpZ251bT1kZXZpY2Vfc2lnbmFsLlNJR0tJTEwsCi0gICAgICAgICAgICAgIGFzX3Jvb3Q9RmFsc2UsIGJsb2NraW5nPUZhbHNlLCBxdWlldD1GYWxzZSwKLSAgICAgICAgICAgICAgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIktpbGwgYWxsIHByb2Nlc3NlcyB3aXRoIHRoZSBnaXZlbiBuYW1lIG9uIHRoZSBkZXZpY2UuCi0KLSAgICBBcmdzOgotICAgICAgcHJvY2Vzc19uYW1lOiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBwcm9jZXNzIHRvIGtpbGwuCi0gICAgICBleGFjdDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBraWxsIGFsbCBwcm9jZXNzZXMgbWF0Y2hpbmcKLSAgICAgICAgICAgICB0aGUgc3RyaW5nIHxwcm9jZXNzX25hbWV8IGV4YWN0bHksIG9yIGFsbCBvZiB0aG9zZSB3aGljaCBjb250YWluCi0gICAgICAgICAgICAgfHByb2Nlc3NfbmFtZXwgYXMgYSBzdWJzdHJpbmcuIERlZmF1bHRzIHRvIEZhbHNlLgotICAgICAgc2lnbnVtOiBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpZ25hbCBudW1iZXIgdG8gc2VuZCB0byBraWxsLiBEZWZhdWx0cwotICAgICAgICAgICAgICB0byBTSUdLSUxMICg5KS4KLSAgICAgIGFzX3Jvb3Q6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGtpbGwgc2hvdWxkIGJlIGV4ZWN1dGVkIHdpdGgKLSAgICAgICAgICAgICAgIHJvb3QgcHJpdmlsZWdlcy4KLSAgICAgIGJsb2NraW5nOiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHdlIHNob3VsZCB3YWl0IHVudGlsIGFsbCBwcm9jZXNzZXMKLSAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiB8cHJvY2Vzc19uYW1lfCBhcmUgZGVhZC4KLSAgICAgIHF1aWV0OiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIGlnbm9yZSB0aGUgZmFjdCB0aGF0IG5vIHByb2Nlc3NlcwotICAgICAgICAgICAgIHRvIGtpbGwgd2VyZSBmb3VuZC4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgbnVtYmVyIG9mIHByb2Nlc3NlcyBhdHRlbXB0ZWQgdG8ga2lsbC4KLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiBubyBwcm9jZXNzIHdhcyBraWxsZWQgYW5kIHxxdWlldHwgaXMgRmFsc2UuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotICAgICIiIgotICAgIHByb2Nlc3NlcyA9IHNlbGYuTGlzdFByb2Nlc3Nlcyhwcm9jZXNzX25hbWUpCi0gICAgaWYgZXhhY3Q6Ci0gICAgICBwcm9jZXNzZXMgPSBbcCBmb3IgcCBpbiBwcm9jZXNzZXMgaWYgcC5uYW1lID09IHByb2Nlc3NfbmFtZV0KLSAgICBpZiBub3QgcHJvY2Vzc2VzOgotICAgICAgaWYgcXVpZXQ6Ci0gICAgICAgIHJldHVybiAwCi0gICAgICBlbHNlOgotICAgICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICAgICdObyBwcm9jZXNzZXMgbWF0Y2hpbmcgJXIgKGV4YWN0PSVyKScgJSAocHJvY2Vzc19uYW1lLCBleGFjdCksCi0gICAgICAgICAgICBzdHIoc2VsZikpCi0KLSAgICBsb2dnZXIuaW5mbygKLSAgICAgICAgJ0tpbGxBbGwoJXIsIC4uLikgYXR0ZW1wdGluZyB0byBraWxsIHRoZSBmb2xsb3dpbmc6JywgcHJvY2Vzc19uYW1lKQotICAgIGZvciBwIGluIHByb2Nlc3NlczoKLSAgICAgIGxvZ2dlci5pbmZvKCcgICUwNWQgJXMnLCBwLnBpZCwgcC5uYW1lKQotCi0gICAgcGlkcyA9IHNldChwLnBpZCBmb3IgcCBpbiBwcm9jZXNzZXMpCi0gICAgY21kID0gWydraWxsJywgJy0lZCcgJSBzaWdudW1dICsgc29ydGVkKHN0cihwKSBmb3IgcCBpbiBwaWRzKQotICAgIHNlbGYuUnVuU2hlbGxDb21tYW5kKGNtZCwgYXNfcm9vdD1hc19yb290LCBjaGVja19yZXR1cm49VHJ1ZSkKLQotICAgIGRlZiBhbGxfcGlkc19raWxsZWQoKToKLSAgICAgIHBpZHNfbGVmdCA9IChwLnBpZCBmb3IgcCBpbiBzZWxmLkxpc3RQcm9jZXNzZXMocHJvY2Vzc19uYW1lKSkKLSAgICAgIHJldHVybiBub3QgcGlkcy5pbnRlcnNlY3Rpb24ocGlkc19sZWZ0KQotCi0gICAgaWYgYmxvY2tpbmc6Ci0gICAgICB0aW1lb3V0X3JldHJ5LldhaXRGb3IoYWxsX3BpZHNfa2lsbGVkLCB3YWl0X3BlcmlvZD0wLjEpCi0KLSAgICByZXR1cm4gbGVuKHBpZHMpCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIFN0YXJ0QWN0aXZpdHkoc2VsZiwgaW50ZW50X29iaiwgYmxvY2tpbmc9RmFsc2UsIHRyYWNlX2ZpbGVfbmFtZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICBmb3JjZV9zdG9wPUZhbHNlLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiU3RhcnQgcGFja2FnZSdzIGFjdGl2aXR5IG9uIHRoZSBkZXZpY2UuCi0KLSAgICBBcmdzOgotICAgICAgaW50ZW50X29iajogQW4gSW50ZW50IG9iamVjdCB0byBzZW5kLgotICAgICAgYmxvY2tpbmc6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBhY3Rpdml0eSB0bwotICAgICAgICAgICAgICAgIGZpbmlzaCBsYXVuY2hpbmcuCi0gICAgICB0cmFjZV9maWxlX25hbWU6IElmIHByZXNlbnQsIGEgc3RyaW5nIHRoYXQgYm90aCBpbmRpY2F0ZXMgdGhhdCB3ZSB3YW50IHRvCi0gICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgdGhlIGFjdGl2aXR5IGFuZCBjb250YWlucyB0aGUgcGF0aCB0byB3aGljaCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgdHJhY2Ugc2hvdWxkIGJlIHNhdmVkLgotICAgICAgZm9yY2Vfc3RvcDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB3ZSBzaG91bGQgc3RvcCB0aGUgYWN0aXZpdHkKLSAgICAgICAgICAgICAgICAgIGJlZm9yZSBzdGFydGluZyBpdC4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiB0aGUgYWN0aXZpdHkgY291bGQgbm90IGJlIHN0YXJ0ZWQuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotICAgICIiIgotICAgIGNtZCA9IFsnYW0nLCAnc3RhcnQnXQotICAgIGlmIGJsb2NraW5nOgotICAgICAgY21kLmFwcGVuZCgnLVcnKQotICAgIGlmIHRyYWNlX2ZpbGVfbmFtZToKLSAgICAgIGNtZC5leHRlbmQoWyctLXN0YXJ0LXByb2ZpbGVyJywgdHJhY2VfZmlsZV9uYW1lXSkKLSAgICBpZiBmb3JjZV9zdG9wOgotICAgICAgY21kLmFwcGVuZCgnLVMnKQotICAgIGNtZC5leHRlbmQoaW50ZW50X29iai5hbV9hcmdzKQotICAgIGZvciBsaW5lIGluIHNlbGYuUnVuU2hlbGxDb21tYW5kKGNtZCwgY2hlY2tfcmV0dXJuPVRydWUpOgotICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdFcnJvcjonKToKLSAgICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IobGluZSwgc3RyKHNlbGYpKQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBTdGFydEluc3RydW1lbnRhdGlvbihzZWxmLCBjb21wb25lbnQsIGZpbmlzaD1UcnVlLCByYXc9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXM9Tm9uZSwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgIGlmIGV4dHJhcyBpcyBOb25lOgotICAgICAgZXh0cmFzID0ge30KLQotICAgIGNtZCA9IFsnYW0nLCAnaW5zdHJ1bWVudCddCi0gICAgaWYgZmluaXNoOgotICAgICAgY21kLmFwcGVuZCgnLXcnKQotICAgIGlmIHJhdzoKLSAgICAgIGNtZC5hcHBlbmQoJy1yJykKLSAgICBmb3IgaywgdiBpbiBleHRyYXMuaXRlcml0ZW1zKCk6Ci0gICAgICBjbWQuZXh0ZW5kKFsnLWUnLCBzdHIoayksIHN0cih2KV0pCi0gICAgY21kLmFwcGVuZChjb21wb25lbnQpCi0KLSAgICAjIFN0b3JlIHRoZSBwYWNrYWdlIG5hbWUgaW4gYSBzaGVsbCB2YXJpYWJsZSB0byBoZWxwIHRoZSBjb21tYW5kIHN0YXkgdW5kZXIKLSAgICAjIHRoZSBfTUFYX0FEQl9DT01NQU5EX0xFTkdUSCBsaW1pdC4KLSAgICBwYWNrYWdlID0gY29tcG9uZW50LnNwbGl0KCcvJylbMF0KLSAgICBzaGVsbF9zbmlwcGV0ID0gJ3A9JXM7JXMnICUgKHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRfaGVscGVyLlNocmlua1RvU25pcHBldChjbWQsICdwJywgcGFja2FnZSkpCi0gICAgcmV0dXJuIHNlbGYuUnVuU2hlbGxDb21tYW5kKHNoZWxsX3NuaXBwZXQsIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXJnZV9vdXRwdXQ9VHJ1ZSkKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgQnJvYWRjYXN0SW50ZW50KHNlbGYsIGludGVudF9vYmosIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJTZW5kIGEgYnJvYWRjYXN0IGludGVudC4KLQotICAgIEFyZ3M6Ci0gICAgICBpbnRlbnQ6IEFuIEludGVudCB0byBicm9hZGNhc3QuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotICAgICIiIgotICAgIGNtZCA9IFsnYW0nLCAnYnJvYWRjYXN0J10gKyBpbnRlbnRfb2JqLmFtX2FyZ3MKLSAgICBzZWxmLlJ1blNoZWxsQ29tbWFuZChjbWQsIGNoZWNrX3JldHVybj1UcnVlKQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBHb0hvbWUoc2VsZiwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIlJldHVybiB0byB0aGUgaG9tZSBzY3JlZW4gYW5kIG9idGFpbiBsYXVuY2hlciBmb2N1cy4KLQotICAgIFRoaXMgY29tbWFuZCBsYXVuY2hlcyB0aGUgaG9tZSBzY3JlZW4gYW5kIGF0dGVtcHRzIHRvIG9idGFpbgotICAgIGxhdW5jaGVyIGZvY3VzIHVudGlsIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuCi0KLSAgICBBcmdzOgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLSAgICAiIiIKLSAgICBkZWYgaXNfbGF1bmNoZXJfZm9jdXNlZCgpOgotICAgICAgb3V0cHV0ID0gc2VsZi5SdW5TaGVsbENvbW1hbmQoWydkdW1wc3lzJywgJ3dpbmRvdycsICd3aW5kb3dzJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUpCi0gICAgICByZXR1cm4gYW55KHNlbGYuX0xBVU5DSEVSX0ZPQ1VTRURfUkUubWF0Y2gobCkgZm9yIGwgaW4gb3V0cHV0KQotCi0gICAgZGVmIGRpc21pc3NfcG9wdXBzKCk6Ci0gICAgICAjIFRoZXJlIGlzIGEgZGlhbG9nIHByZXNlbnQ7IGF0dGVtcHQgdG8gZ2V0IHJpZCBvZiBpdC4KLSAgICAgICMgTm90IGFsbCBkaWFsb2dzIGNhbiBiZSBkaXNtaXNzZWQgd2l0aCBiYWNrLgotICAgICAgc2VsZi5TZW5kS2V5RXZlbnQoa2V5ZXZlbnQuS0VZQ09ERV9FTlRFUikKLSAgICAgIHNlbGYuU2VuZEtleUV2ZW50KGtleWV2ZW50LktFWUNPREVfQkFDSykKLSAgICAgIHJldHVybiBpc19sYXVuY2hlcl9mb2N1c2VkKCkKLQotICAgICMgSWYgSG9tZSBpcyBhbHJlYWR5IGZvY3VzZWQsIHJldHVybiBlYXJseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3b3JrLgotICAgIGlmIGlzX2xhdW5jaGVyX2ZvY3VzZWQoKToKLSAgICAgIHJldHVybgotCi0gICAgc2VsZi5TdGFydEFjdGl2aXR5KAotICAgICAgICBpbnRlbnQuSW50ZW50KGFjdGlvbj0nYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLAotICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PSdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5IT01FJyksCi0gICAgICAgIGJsb2NraW5nPVRydWUpCi0KLSAgICBpZiBub3QgaXNfbGF1bmNoZXJfZm9jdXNlZCgpOgotICAgICAgdGltZW91dF9yZXRyeS5XYWl0Rm9yKGRpc21pc3NfcG9wdXBzLCB3YWl0X3BlcmlvZD0xKQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBGb3JjZVN0b3Aoc2VsZiwgcGFja2FnZSwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIkNsb3NlIHRoZSBhcHBsaWNhdGlvbi4KLQotICAgIEFyZ3M6Ci0gICAgICBwYWNrYWdlOiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRvIHN0b3AuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotICAgICIiIgotICAgIGlmIHNlbGYuR2V0QXBwbGljYXRpb25QaWRzKHBhY2thZ2UpOgotICAgICAgc2VsZi5SdW5TaGVsbENvbW1hbmQoWydhbScsICdmb3JjZS1zdG9wJywgcGFja2FnZV0sIGNoZWNrX3JldHVybj1UcnVlKQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBDbGVhckFwcGxpY2F0aW9uU3RhdGUoCi0gICAgICBzZWxmLCBwYWNrYWdlLCBwZXJtaXNzaW9ucz1Ob25lLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiQ2xlYXIgYWxsIHN0YXRlIGZvciB0aGUgZ2l2ZW4gcGFja2FnZS4KLQotICAgIEFyZ3M6Ci0gICAgICBwYWNrYWdlOiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRvIHN0b3AuCi0gICAgICBwZXJtaXNzaW9uczogTGlzdCBvZiBwZXJtaXNzaW9ucyB0byBzZXQgYWZ0ZXIgY2xlYXJpbmcgZGF0YS4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi0gICAgIiIiCi0gICAgIyBDaGVjayB0aGF0IHRoZSBwYWNrYWdlIGV4aXN0cyBiZWZvcmUgY2xlYXJpbmcgaXQgZm9yIGFuZHJvaWQgYnVpbGRzIGJlbG93Ci0gICAgIyBKQiBNUjIuIE5lY2Vzc2FyeSBiZWNhdXNlIGNhbGxpbmcgcG0gY2xlYXIgb24gYSBwYWNrYWdlIHRoYXQgZG9lc24ndCBleGlzdAotICAgICMgbWF5IG5ldmVyIHJldHVybi4KLSAgICBpZiAoKHNlbGYuYnVpbGRfdmVyc2lvbl9zZGsgPj0gdmVyc2lvbl9jb2Rlcy5KRUxMWV9CRUFOX01SMikKLSAgICAgICAgb3Igc2VsZi5fR2V0QXBwbGljYXRpb25QYXRoc0ludGVybmFsKHBhY2thZ2UpKToKLSAgICAgIHNlbGYuUnVuU2hlbGxDb21tYW5kKFsncG0nLCAnY2xlYXInLCBwYWNrYWdlXSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgICBzZWxmLkdyYW50UGVybWlzc2lvbnMocGFja2FnZSwgcGVybWlzc2lvbnMpCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIFNlbmRLZXlFdmVudChzZWxmLCBrZXljb2RlLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiU2VuZHMgYSBrZXljb2RlIHRvIHRoZSBkZXZpY2UuCi0KLSAgICBTZWUgdGhlIGRldmlsLmFuZHJvaWQuc2RrLmtleWV2ZW50IG1vZHVsZSBmb3Igc3VpdGFibGUga2V5Y29kZSB2YWx1ZXMuCi0KLSAgICBBcmdzOgotICAgICAga2V5Y29kZTogQSBpbnRlZ2VyIGtleWNvZGUgdG8gc2VuZCB0byB0aGUgZGV2aWNlLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLSAgICAiIiIKLSAgICBzZWxmLlJ1blNoZWxsQ29tbWFuZChbJ2lucHV0JywgJ2tleWV2ZW50JywgZm9ybWF0KGtleWNvZGUsICdkJyldLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3JldHVybj1UcnVlKQotCi0gIFBVU0hfQ0hBTkdFRF9GSUxFU19ERUZBVUxUX1RJTUVPVVQgPSAxMCAqIF9ERUZBVUxUX1RJTUVPVVQKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoCi0gICAgICBtaW5fZGVmYXVsdF90aW1lb3V0PVBVU0hfQ0hBTkdFRF9GSUxFU19ERUZBVUxUX1RJTUVPVVQpCi0gIGRlZiBQdXNoQ2hhbmdlZEZpbGVzKHNlbGYsIGhvc3RfZGV2aWNlX3R1cGxlcywgdGltZW91dD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICByZXRyaWVzPU5vbmUsIGRlbGV0ZV9kZXZpY2Vfc3RhbGU9RmFsc2UpOgotICAgICIiIlB1c2ggZmlsZXMgdG8gdGhlIGRldmljZSwgc2tpcHBpbmcgZmlsZXMgdGhhdCBkb24ndCBuZWVkIHVwZGF0aW5nLgotCi0gICAgV2hlbiBhIGRpcmVjdG9yeSBpcyBwdXNoZWQsIGl0IGlzIHRyYXZlcnNlZCByZWN1cnNpdmVseSBvbiB0aGUgaG9zdCBhbmQKLSAgICBhbGwgZmlsZXMgaW4gaXQgYXJlIHB1c2hlZCB0byB0aGUgZGV2aWNlIGFzIG5lZWRlZC4KLSAgICBBZGRpdGlvbmFsbHksIGlmIGRlbGV0ZV9kZXZpY2Vfc3RhbGUgb3B0aW9uIGlzIFRydWUsCi0gICAgZmlsZXMgdGhhdCBleGlzdCBvbiB0aGUgZGV2aWNlIGJ1dCBkb24ndCBleGlzdCBvbiB0aGUgaG9zdCBhcmUgZGVsZXRlZC4KLQotICAgIEFyZ3M6Ci0gICAgICBob3N0X2RldmljZV90dXBsZXM6IEEgbGlzdCBvZiAoaG9zdF9wYXRoLCBkZXZpY2VfcGF0aCkgdHVwbGVzLCB3aGVyZQotICAgICAgICB8aG9zdF9wYXRofCBpcyBhbiBhYnNvbHV0ZSBwYXRoIG9mIGEgZmlsZSBvciBkaXJlY3Rvcnkgb24gdGhlIGhvc3QKLSAgICAgICAgdGhhdCBzaG91bGQgYmUgbWluaW1pYWxseSBwdXNoZWQgdG8gdGhlIGRldmljZSwgYW5kIHxkZXZpY2VfcGF0aHwgaXMKLSAgICAgICAgYW4gYWJzb2x1dGUgcGF0aCBvZiB0aGUgZGVzdGluYXRpb24gb24gdGhlIGRldmljZS4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLSAgICAgIGRlbGV0ZV9kZXZpY2Vfc3RhbGU6IG9wdGlvbiB0byBkZWxldGUgc3RhbGUgZmlsZXMgb24gZGV2aWNlCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kRmFpbGVkRXJyb3Igb24gZmFpbHVyZS4KLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi0gICAgIiIiCi0KLSAgICBhbGxfY2hhbmdlZF9maWxlcyA9IFtdCi0gICAgYWxsX3N0YWxlX2ZpbGVzID0gW10KLSAgICBtaXNzaW5nX2RpcnMgPSBzZXQoKQotICAgIGNhY2hlX2NvbW1pdF9mdW5jcyA9IFtdCi0gICAgZm9yIGgsIGQgaW4gaG9zdF9kZXZpY2VfdHVwbGVzOgotICAgICAgYXNzZXJ0IG9zLnBhdGguaXNhYnMoaCkgYW5kIHBvc2l4cGF0aC5pc2FicyhkKQotICAgICAgaCA9IG9zLnBhdGgucmVhbHBhdGgoaCkKLSAgICAgIGNoYW5nZWRfZmlsZXMsIHVwX3RvX2RhdGVfZmlsZXMsIHN0YWxlX2ZpbGVzLCBjYWNoZV9jb21taXRfZnVuYyA9ICgKLSAgICAgICAgICBzZWxmLl9HZXRDaGFuZ2VkQW5kU3RhbGVGaWxlcyhoLCBkLCBkZWxldGVfZGV2aWNlX3N0YWxlKSkKLSAgICAgIGFsbF9jaGFuZ2VkX2ZpbGVzICs9IGNoYW5nZWRfZmlsZXMKLSAgICAgIGFsbF9zdGFsZV9maWxlcyArPSBzdGFsZV9maWxlcwotICAgICAgY2FjaGVfY29tbWl0X2Z1bmNzLmFwcGVuZChjYWNoZV9jb21taXRfZnVuYykKLSAgICAgIGlmIGNoYW5nZWRfZmlsZXMgYW5kIG5vdCB1cF90b19kYXRlX2ZpbGVzIGFuZCBub3Qgc3RhbGVfZmlsZXM6Ci0gICAgICAgIGlmIG9zLnBhdGguaXNkaXIoaCk6Ci0gICAgICAgICAgbWlzc2luZ19kaXJzLmFkZChkKQotICAgICAgICBlbHNlOgotICAgICAgICAgIG1pc3NpbmdfZGlycy5hZGQocG9zaXhwYXRoLmRpcm5hbWUoZCkpCi0KLSAgICBpZiBkZWxldGVfZGV2aWNlX3N0YWxlIGFuZCBhbGxfc3RhbGVfZmlsZXM6Ci0gICAgICBzZWxmLlJ1blNoZWxsQ29tbWFuZChbJ3JtJywgJy1mJ10gKyBhbGxfc3RhbGVfZmlsZXMsIGNoZWNrX3JldHVybj1UcnVlKQotCi0gICAgaWYgYWxsX2NoYW5nZWRfZmlsZXM6Ci0gICAgICBpZiBtaXNzaW5nX2RpcnM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICBzZWxmLlJ1blNoZWxsQ29tbWFuZChbJ21rZGlyJywgJy1wJ10gKyBsaXN0KG1pc3NpbmdfZGlycyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgICAgIGV4Y2VwdCBkZXZpY2VfZXJyb3JzLkFkYlNoZWxsQ29tbWFuZEZhaWxlZEVycm9yIGFzIGU6Ci0gICAgICAgICAgIyBUT0RPKGNyYnVnLmNvbS83Mzk4OTkpOiBUaGlzIGlzIGF0dGVtcHRpbmcgdG8gZGlhZ25vc2UgZmxha3kgRUJVU1kKLSAgICAgICAgICAjIGVycm9ycyB0aGF0IGhhdmUgYmVlbiBwb3BwaW5nIHVwIGluIHNpbmdsZS1kZXZpY2Ugc2NlbmFyaW9zLgotICAgICAgICAgICMgUmVtb3ZlIGl0IG9uY2Ugd2UndmUgZmlndXJlZCBvdXQgd2hhdCdzIGNhdXNpbmcgdGhlbSBhbmQgaG93IGJlc3QKLSAgICAgICAgICAjIHRvIGhhbmRsZSB0aGVtLgotICAgICAgICAgIG0gPSBfRUJVU1lfUkUuc2VhcmNoKGUub3V0cHV0KQotICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICBsb2dnaW5nLmVycm9yKAotICAgICAgICAgICAgICAgICdIaXQgRUJVU1kgd2hpbGUgYXR0ZW1wdGluZyB0byBtYWtlIG1pc3NpbmcgZGlyZWN0b3JpZXMuJykKLSAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ2xzb2Ygb3V0cHV0OicpCi0gICAgICAgICAgICAjIERvbid0IGNoZWNrIGZvciByZXR1cm4gYmVsb3cgc2luY2UgZ3JlcCBleGl0cyB3aXRoIGEgbm9uLXplcm8gd2hlbgotICAgICAgICAgICAgIyBubyBtYXRjaCBpcyBmb3VuZC4KLSAgICAgICAgICAgIGZvciBsIGluIHNlbGYuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICAgICdsc29mIHwgZ3JlcCAlcycgJSBjbWRfaGVscGVyLlNpbmdsZVF1b3RlKG0uZ3JvdXAoMSkpLAotICAgICAgICAgICAgICAgIGNoZWNrX3JldHVybj1GYWxzZSk6Ci0gICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJyAgJXMnLCBsKQotICAgICAgICAgIHJhaXNlCi0gICAgICBzZWxmLl9QdXNoRmlsZXNJbXBsKGhvc3RfZGV2aWNlX3R1cGxlcywgYWxsX2NoYW5nZWRfZmlsZXMpCi0gICAgZm9yIGZ1bmMgaW4gY2FjaGVfY29tbWl0X2Z1bmNzOgotICAgICAgZnVuYygpCi0KLSAgZGVmIF9HZXRDaGFuZ2VkQW5kU3RhbGVGaWxlcyhzZWxmLCBob3N0X3BhdGgsIGRldmljZV9wYXRoLCB0cmFja19zdGFsZT1GYWxzZSk6Ci0gICAgIiIiR2V0IGZpbGVzIHRvIHB1c2ggYW5kIGRlbGV0ZQotCi0gICAgQXJnczoKLSAgICAgIGhvc3RfcGF0aDogYW4gYWJzb2x1dGUgcGF0aCBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5IG9uIHRoZSBob3N0Ci0gICAgICBkZXZpY2VfcGF0aDogYW4gYWJzb2x1dGUgcGF0aCBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5IG9uIHRoZSBkZXZpY2UKLSAgICAgIHRyYWNrX3N0YWxlOiB3aGV0aGVyIHRvIGJvdGhlciBsb29raW5nIGZvciBzdGFsZSBmaWxlcyAoc2xvd2VyKQotCi0gICAgUmV0dXJuczoKLSAgICAgIGEgZm91ci1lbGVtZW50IHR1cGxlCi0gICAgICAxc3QgZWxlbWVudDogYSBsaXN0IG9mIChob3N0X2ZpbGVzX3BhdGgsIGRldmljZV9maWxlc19wYXRoKSB0dXBsZXMgdG8gcHVzaAotICAgICAgMm5kIGVsZW1lbnQ6IGEgbGlzdCBvZiBob3N0X2ZpbGVzX3BhdGggdGhhdCBhcmUgdXAtdG8tZGF0ZQotICAgICAgM3JkIGVsZW1lbnQ6IGEgbGlzdCBvZiBzdGFsZSBmaWxlcyB1bmRlciBkZXZpY2VfcGF0aCwgb3IgW10gd2hlbgotICAgICAgICB0cmFja19zdGFsZSA9PSBGYWxzZQotICAgICAgNHRoIGVsZW1lbnQ6IGEgY2FjaGUgY29tbWl0IGZ1bmN0aW9uLgotICAgICIiIgotICAgIHRyeToKLSAgICAgICMgTGVuZ3RoIGNhbGN1bGF0aW9ucyBiZWxvdyBhc3N1bWUgbm8gdHJhaWxpbmcgLy4KLSAgICAgIGhvc3RfcGF0aCA9IGhvc3RfcGF0aC5yc3RyaXAoJy8nKQotICAgICAgZGV2aWNlX3BhdGggPSBkZXZpY2VfcGF0aC5yc3RyaXAoJy8nKQotCi0gICAgICBzcGVjaWZpY19kZXZpY2VfcGF0aHMgPSBbZGV2aWNlX3BhdGhdCi0gICAgICBpZ25vcmVfb3RoZXJfZmlsZXMgPSBub3QgdHJhY2tfc3RhbGUgYW5kIG9zLnBhdGguaXNkaXIoaG9zdF9wYXRoKQotICAgICAgaWYgaWdub3JlX290aGVyX2ZpbGVzOgotICAgICAgICBzcGVjaWZpY19kZXZpY2VfcGF0aHMgPSBbXQotICAgICAgICBmb3Igcm9vdCwgXywgZmlsZW5hbWVzIGluIG9zLndhbGsoaG9zdF9wYXRoKToKLSAgICAgICAgICByZWxhdGl2ZV9kaXIgPSByb290W2xlbihob3N0X3BhdGgpICsgMTpdCi0gICAgICAgICAgc3BlY2lmaWNfZGV2aWNlX3BhdGhzLmV4dGVuZCgKLSAgICAgICAgICAgICAgcG9zaXhwYXRoLmpvaW4oZGV2aWNlX3BhdGgsIHJlbGF0aXZlX2RpciwgZikgZm9yIGYgaW4gZmlsZW5hbWVzKQotCi0gICAgICBkZWYgY2FsY3VsYXRlX2hvc3RfY2hlY2tzdW1zKCk6Ci0gICAgICAgIHJldHVybiBtZDVzdW0uQ2FsY3VsYXRlSG9zdE1kNVN1bXMoW2hvc3RfcGF0aF0pCi0KLSAgICAgIGRlZiBjYWxjdWxhdGVfZGV2aWNlX2NoZWNrc3VtcygpOgotICAgICAgICBpZiBzZWxmLl9lbmFibGVfZGV2aWNlX2ZpbGVzX2NhY2hlOgotICAgICAgICAgIGNhY2hlX2VudHJ5ID0gc2VsZi5fY2FjaGVbJ2RldmljZV9wYXRoX2NoZWNrc3VtcyddLmdldChkZXZpY2VfcGF0aCkKLSAgICAgICAgICBpZiBjYWNoZV9lbnRyeSBhbmQgY2FjaGVfZW50cnlbMF0gPT0gaWdub3JlX290aGVyX2ZpbGVzOgotICAgICAgICAgICAgcmV0dXJuIGRpY3QoY2FjaGVfZW50cnlbMV0pCi0KLSAgICAgICAgc3VtcyA9IG1kNXN1bS5DYWxjdWxhdGVEZXZpY2VNZDVTdW1zKHNwZWNpZmljX2RldmljZV9wYXRocywgc2VsZikKLQotICAgICAgICBjYWNoZV9lbnRyeSA9IFtpZ25vcmVfb3RoZXJfZmlsZXMsIHN1bXNdCi0gICAgICAgIHNlbGYuX2NhY2hlWydkZXZpY2VfcGF0aF9jaGVja3N1bXMnXVtkZXZpY2VfcGF0aF0gPSBjYWNoZV9lbnRyeQotICAgICAgICByZXR1cm4gZGljdChzdW1zKQotCi0gICAgICBob3N0X2NoZWNrc3VtcywgZGV2aWNlX2NoZWNrc3VtcyA9IHJlcmFpc2VyX3RocmVhZC5SdW5Bc3luYygoCi0gICAgICAgICAgY2FsY3VsYXRlX2hvc3RfY2hlY2tzdW1zLAotICAgICAgICAgIGNhbGN1bGF0ZV9kZXZpY2VfY2hlY2tzdW1zKSkKLSAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgotICAgICAgbG9nZ2VyLndhcm5pbmcoJ0Vycm9yIGNhbGN1bGF0aW5nIG1kNTogJXMnLCBlKQotICAgICAgcmV0dXJuIChbKGhvc3RfcGF0aCwgZGV2aWNlX3BhdGgpXSwgW10sIFtdLCBsYW1iZGE6IDApCi0KLSAgICB0b19wdXNoID0gW10KLSAgICB1cF90b19kYXRlID0gW10KLSAgICB0b19kZWxldGUgPSBbXQotICAgIGlmIG9zLnBhdGguaXNmaWxlKGhvc3RfcGF0aCk6Ci0gICAgICBob3N0X2NoZWNrc3VtID0gaG9zdF9jaGVja3N1bXMuZ2V0KGhvc3RfcGF0aCkKLSAgICAgIGRldmljZV9jaGVja3N1bSA9IGRldmljZV9jaGVja3N1bXMuZ2V0KGRldmljZV9wYXRoKQotICAgICAgaWYgaG9zdF9jaGVja3N1bSA9PSBkZXZpY2VfY2hlY2tzdW06Ci0gICAgICAgIHVwX3RvX2RhdGUuYXBwZW5kKGhvc3RfcGF0aCkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHRvX3B1c2guYXBwZW5kKChob3N0X3BhdGgsIGRldmljZV9wYXRoKSkKLSAgICBlbHNlOgotICAgICAgZm9yIGhvc3RfYWJzX3BhdGgsIGhvc3RfY2hlY2tzdW0gaW4gaG9zdF9jaGVja3N1bXMuaXRlcml0ZW1zKCk6Ci0gICAgICAgIGRldmljZV9hYnNfcGF0aCA9IHBvc2l4cGF0aC5qb2luKAotICAgICAgICAgICAgZGV2aWNlX3BhdGgsIG9zLnBhdGgucmVscGF0aChob3N0X2Fic19wYXRoLCBob3N0X3BhdGgpKQotICAgICAgICBkZXZpY2VfY2hlY2tzdW0gPSBkZXZpY2VfY2hlY2tzdW1zLnBvcChkZXZpY2VfYWJzX3BhdGgsIE5vbmUpCi0gICAgICAgIGlmIGRldmljZV9jaGVja3N1bSA9PSBob3N0X2NoZWNrc3VtOgotICAgICAgICAgIHVwX3RvX2RhdGUuYXBwZW5kKGhvc3RfYWJzX3BhdGgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgdG9fcHVzaC5hcHBlbmQoKGhvc3RfYWJzX3BhdGgsIGRldmljZV9hYnNfcGF0aCkpCi0gICAgICB0b19kZWxldGUgPSBkZXZpY2VfY2hlY2tzdW1zLmtleXMoKQotCi0gICAgZGVmIGNhY2hlX2NvbW1pdF9mdW5jKCk6Ci0gICAgICBuZXdfc3VtcyA9IHtwb3NpeHBhdGguam9pbihkZXZpY2VfcGF0aCwgcGF0aFtsZW4oaG9zdF9wYXRoKSArIDE6XSk6IHZhbAotICAgICAgICAgICAgICAgICAgZm9yIHBhdGgsIHZhbCBpbiBob3N0X2NoZWNrc3Vtcy5pdGVyaXRlbXMoKX0KLSAgICAgIGNhY2hlX2VudHJ5ID0gW2lnbm9yZV9vdGhlcl9maWxlcywgbmV3X3N1bXNdCi0gICAgICBzZWxmLl9jYWNoZVsnZGV2aWNlX3BhdGhfY2hlY2tzdW1zJ11bZGV2aWNlX3BhdGhdID0gY2FjaGVfZW50cnkKLQotICAgIHJldHVybiAodG9fcHVzaCwgdXBfdG9fZGF0ZSwgdG9fZGVsZXRlLCBjYWNoZV9jb21taXRfZnVuYykKLQotICBkZWYgX0NvbXB1dGVEZXZpY2VDaGVja3N1bXNGb3JBcGtzKHNlbGYsIHBhY2thZ2VfbmFtZSk6Ci0gICAgcmV0ID0gc2VsZi5fY2FjaGVbJ3BhY2thZ2VfYXBrX2NoZWNrc3VtcyddLmdldChwYWNrYWdlX25hbWUpCi0gICAgaWYgcmV0IGlzIE5vbmU6Ci0gICAgICBkZXZpY2VfcGF0aHMgPSBzZWxmLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwocGFja2FnZV9uYW1lKQotICAgICAgZmlsZV90b19jaGVja3N1bXMgPSBtZDVzdW0uQ2FsY3VsYXRlRGV2aWNlTWQ1U3VtcyhkZXZpY2VfcGF0aHMsIHNlbGYpCi0gICAgICByZXQgPSBzZXQoZmlsZV90b19jaGVja3N1bXMudmFsdWVzKCkpCi0gICAgICBzZWxmLl9jYWNoZVsncGFja2FnZV9hcGtfY2hlY2tzdW1zJ11bcGFja2FnZV9uYW1lXSA9IHJldAotICAgIHJldHVybiByZXQKLQotICBkZWYgX0NvbXB1dGVTdGFsZUFwa3Moc2VsZiwgcGFja2FnZV9uYW1lLCBob3N0X2Fwa19wYXRocyk6Ci0gICAgZGVmIGNhbGN1bGF0ZV9ob3N0X2NoZWNrc3VtcygpOgotICAgICAgcmV0dXJuIG1kNXN1bS5DYWxjdWxhdGVIb3N0TWQ1U3Vtcyhob3N0X2Fwa19wYXRocykKLQotICAgIGRlZiBjYWxjdWxhdGVfZGV2aWNlX2NoZWNrc3VtcygpOgotICAgICAgcmV0dXJuIHNlbGYuX0NvbXB1dGVEZXZpY2VDaGVja3N1bXNGb3JBcGtzKHBhY2thZ2VfbmFtZSkKLQotICAgIGhvc3RfY2hlY2tzdW1zLCBkZXZpY2VfY2hlY2tzdW1zID0gcmVyYWlzZXJfdGhyZWFkLlJ1bkFzeW5jKCgKLSAgICAgICAgY2FsY3VsYXRlX2hvc3RfY2hlY2tzdW1zLCBjYWxjdWxhdGVfZGV2aWNlX2NoZWNrc3VtcykpCi0gICAgc3RhbGVfYXBrcyA9IFtrIGZvciAoaywgdikgaW4gaG9zdF9jaGVja3N1bXMuaXRlcml0ZW1zKCkKLSAgICAgICAgICAgICAgICAgIGlmIHYgbm90IGluIGRldmljZV9jaGVja3N1bXNdCi0gICAgcmV0dXJuIHN0YWxlX2Fwa3MsIHNldChob3N0X2NoZWNrc3Vtcy52YWx1ZXMoKSkKLQotICBkZWYgX1B1c2hGaWxlc0ltcGwoc2VsZiwgaG9zdF9kZXZpY2VfdHVwbGVzLCBmaWxlcyk6Ci0gICAgaWYgbm90IGZpbGVzOgotICAgICAgcmV0dXJuCi0KLSAgICBzaXplID0gc3VtKGhvc3RfdXRpbHMuR2V0UmVjdXJzaXZlRGlza1VzYWdlKGgpIGZvciBoLCBfIGluIGZpbGVzKQotICAgIGZpbGVfY291bnQgPSBsZW4oZmlsZXMpCi0gICAgZGlyX3NpemUgPSBzdW0oaG9zdF91dGlscy5HZXRSZWN1cnNpdmVEaXNrVXNhZ2UoaCkKLSAgICAgICAgICAgICAgICAgICBmb3IgaCwgXyBpbiBob3N0X2RldmljZV90dXBsZXMpCi0gICAgZGlyX2ZpbGVfY291bnQgPSAwCi0gICAgZm9yIGgsIF8gaW4gaG9zdF9kZXZpY2VfdHVwbGVzOgotICAgICAgaWYgb3MucGF0aC5pc2RpcihoKToKLSAgICAgICAgZGlyX2ZpbGVfY291bnQgKz0gc3VtKGxlbihmKSBmb3IgX3IsIF9kLCBmIGluIG9zLndhbGsoaCkpCi0gICAgICBlbHNlOgotICAgICAgICBkaXJfZmlsZV9jb3VudCArPSAxCi0KLSAgICBwdXNoX2R1cmF0aW9uID0gc2VsZi5fQXBwcm94aW1hdGVEdXJhdGlvbigKLSAgICAgICAgZmlsZV9jb3VudCwgZmlsZV9jb3VudCwgc2l6ZSwgRmFsc2UpCi0gICAgZGlyX3B1c2hfZHVyYXRpb24gPSBzZWxmLl9BcHByb3hpbWF0ZUR1cmF0aW9uKAotICAgICAgICBsZW4oaG9zdF9kZXZpY2VfdHVwbGVzKSwgZGlyX2ZpbGVfY291bnQsIGRpcl9zaXplLCBGYWxzZSkKLSAgICB6aXBfZHVyYXRpb24gPSBzZWxmLl9BcHByb3hpbWF0ZUR1cmF0aW9uKDEsIDEsIHNpemUsIFRydWUpCi0KLSAgICBpZiAoZGlyX3B1c2hfZHVyYXRpb24gPCBwdXNoX2R1cmF0aW9uIGFuZCBkaXJfcHVzaF9kdXJhdGlvbiA8IHppcF9kdXJhdGlvbgotICAgICAgICAjIFRPRE8oamJ1ZG9yaWNrKTogUmVzdW1lIGRpcmVjdG9yeSBwdXNoaW5nIG9uY2UgY2xpZW50cyBoYXZlIHN3aXRjaGVkCi0gICAgICAgICMgdG8gMS4wLjM2LWNvbXBhdGlibGUgc3ludGF4LgotICAgICAgICBhbmQgRmFsc2UpOgotICAgICAgc2VsZi5fUHVzaENoYW5nZWRGaWxlc0luZGl2aWR1YWxseShob3N0X2RldmljZV90dXBsZXMpCi0gICAgZWxpZiBwdXNoX2R1cmF0aW9uIDwgemlwX2R1cmF0aW9uOgotICAgICAgc2VsZi5fUHVzaENoYW5nZWRGaWxlc0luZGl2aWR1YWxseShmaWxlcykKLSAgICBlbGlmIHNlbGYuX2NvbW1hbmRzX2luc3RhbGxlZCBpcyBGYWxzZToKLSAgICAgICMgQWxyZWFkeSB0cmllZCBhbmQgZmFpbGVkIHRvIGluc3RhbGwgdW56aXAgY29tbWFuZC4KLSAgICAgIHNlbGYuX1B1c2hDaGFuZ2VkRmlsZXNJbmRpdmlkdWFsbHkoZmlsZXMpCi0gICAgZWxpZiBub3Qgc2VsZi5fUHVzaENoYW5nZWRGaWxlc1ppcHBlZCgKLSAgICAgICAgZmlsZXMsIFtkIGZvciBfLCBkIGluIGhvc3RfZGV2aWNlX3R1cGxlc10pOgotICAgICAgc2VsZi5fUHVzaENoYW5nZWRGaWxlc0luZGl2aWR1YWxseShmaWxlcykKLQotICBkZWYgX01heWJlSW5zdGFsbENvbW1hbmRzKHNlbGYpOgotICAgIGlmIHNlbGYuX2NvbW1hbmRzX2luc3RhbGxlZCBpcyBOb25lOgotICAgICAgdHJ5OgotICAgICAgICBpZiBub3QgaW5zdGFsbF9jb21tYW5kcy5JbnN0YWxsZWQoc2VsZik6Ci0gICAgICAgICAgaW5zdGFsbF9jb21tYW5kcy5JbnN0YWxsQ29tbWFuZHMoc2VsZikKLSAgICAgICAgc2VsZi5fY29tbWFuZHNfaW5zdGFsbGVkID0gVHJ1ZQotICAgICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yIGFzIGU6Ci0gICAgICAgIGxvZ2dlci53YXJuaW5nKCd1bnppcCBub3QgYXZhaWxhYmxlOiAlcycsIHN0cihlKSkKLSAgICAgICAgc2VsZi5fY29tbWFuZHNfaW5zdGFsbGVkID0gRmFsc2UKLSAgICByZXR1cm4gc2VsZi5fY29tbWFuZHNfaW5zdGFsbGVkCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgX0FwcHJveGltYXRlRHVyYXRpb24oYWRiX2NhbGxzLCBmaWxlX2NvdW50LCBieXRlX2NvdW50LCBpc196aXBwaW5nKToKLSAgICAjIFdlIGFwcHJveGltYXRlIHRoZSB0aW1lIHRvIHB1c2ggYSBzZXQgb2YgZmlsZXMgdG8gYSBkZXZpY2UgYXM6Ci0gICAgIyAgIHQgPSBjMSAqIGEgKyBjMiAqIGYgKyBjMyArIGIgLyBjNCArIGIgLyAoYzUgKiBjNiksIHdoZXJlCi0gICAgIyAgICAgdDogdG90YWwgdGltZSAoc2VjKQotICAgICMgICAgIGMxOiBhZGIgY2FsbCB0aW1lIGRlbGF5IChzZWMpCi0gICAgIyAgICAgYTogbnVtYmVyIG9mIHRpbWVzIGFkYiBpcyBjYWxsZWQgKHVuaXRsZXNzKQotICAgICMgICAgIGMyOiBwdXNoIHRpbWUgZGVsYXkgKHNlYykKLSAgICAjICAgICBmOiBudW1iZXIgb2YgZmlsZXMgcHVzaGVkIHZpYSBhZGIgKHVuaXRsZXNzKQotICAgICMgICAgIGMzOiB6aXAgdGltZSBkZWxheSAoc2VjKQotICAgICMgICAgIGM0OiB6aXAgcmF0ZSAoYnl0ZXMvc2VjKQotICAgICMgICAgIGI6IHRvdGFsIG51bWJlciBvZiBieXRlcyAoYnl0ZXMpCi0gICAgIyAgICAgYzU6IHRyYW5zZmVyIHJhdGUgKGJ5dGVzL3NlYykKLSAgICAjICAgICBjNjogY29tcHJlc3Npb24gcmF0aW8gKHVuaXRsZXNzKQotCi0gICAgIyBBbGwgb2YgdGhlc2UgYXJlIGFwcHJveGltYXRpb25zLgotICAgIEFEQl9DQUxMX1BFTkFMVFkgPSAwLjEgICMgc2Vjb25kcwotICAgIEFEQl9QVVNIX1BFTkFMVFkgPSAwLjAxICAjIHNlY29uZHMKLSAgICBaSVBfUEVOQUxUWSA9IDIuMCAgIyBzZWNvbmRzCi0gICAgWklQX1JBVEUgPSAxMDAwMDAwMC4wICAjIGJ5dGVzIC8gc2Vjb25kCi0gICAgVFJBTlNGRVJfUkFURSA9IDIwMDAwMDAuMCAgIyBieXRlcyAvIHNlY29uZAotICAgIENPTVBSRVNTSU9OX1JBVElPID0gMi4wICAjIHVuaXRsZXNzCi0KLSAgICBhZGJfY2FsbF90aW1lID0gQURCX0NBTExfUEVOQUxUWSAqIGFkYl9jYWxscwotICAgIGFkYl9wdXNoX3NldHVwX3RpbWUgPSBBREJfUFVTSF9QRU5BTFRZICogZmlsZV9jb3VudAotICAgIGlmIGlzX3ppcHBpbmc6Ci0gICAgICB6aXBfdGltZSA9IFpJUF9QRU5BTFRZICsgYnl0ZV9jb3VudCAvIFpJUF9SQVRFCi0gICAgICB0cmFuc2Zlcl90aW1lID0gYnl0ZV9jb3VudCAvIChUUkFOU0ZFUl9SQVRFICogQ09NUFJFU1NJT05fUkFUSU8pCi0gICAgZWxzZToKLSAgICAgIHppcF90aW1lID0gMAotICAgICAgdHJhbnNmZXJfdGltZSA9IGJ5dGVfY291bnQgLyBUUkFOU0ZFUl9SQVRFCi0gICAgcmV0dXJuIGFkYl9jYWxsX3RpbWUgKyBhZGJfcHVzaF9zZXR1cF90aW1lICsgemlwX3RpbWUgKyB0cmFuc2Zlcl90aW1lCi0KLSAgZGVmIF9QdXNoQ2hhbmdlZEZpbGVzSW5kaXZpZHVhbGx5KHNlbGYsIGZpbGVzKToKLSAgICBmb3IgaCwgZCBpbiBmaWxlczoKLSAgICAgIHNlbGYuYWRiLlB1c2goaCwgZCkKLQotICBkZWYgX1B1c2hDaGFuZ2VkRmlsZXNaaXBwZWQoc2VsZiwgZmlsZXMsIGRpcnMpOgotICAgIGlmIG5vdCBzZWxmLl9NYXliZUluc3RhbGxDb21tYW5kcygpOgotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICB3aXRoIHRlbXBmaWxlX2V4dC5OYW1lZFRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIHdvcmtpbmdfZGlyOgotICAgICAgemlwX3BhdGggPSBvcy5wYXRoLmpvaW4od29ya2luZ19kaXIsICd0bXAuemlwJykKLSAgICAgIHRyeToKLSAgICAgICAgemlwX3V0aWxzLldyaXRlWmlwRmlsZSh6aXBfcGF0aCwgZmlsZXMpCi0gICAgICBleGNlcHQgemlwX3V0aWxzLlppcEZhaWxlZEVycm9yOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgc2VsZi5OZWVkc1NVKCkKLSAgICAgIHdpdGggZGV2aWNlX3RlbXBfZmlsZS5EZXZpY2VUZW1wRmlsZSgKLSAgICAgICAgICBzZWxmLmFkYiwgc3VmZml4PScuemlwJykgYXMgZGV2aWNlX3RlbXA6Ci0gICAgICAgIHNlbGYuYWRiLlB1c2goemlwX3BhdGgsIGRldmljZV90ZW1wLm5hbWUpCi0KLSAgICAgICAgcXVvdGVkX2RpcnMgPSAnICcuam9pbihjbWRfaGVscGVyLlNpbmdsZVF1b3RlKGQpIGZvciBkIGluIGRpcnMpCi0gICAgICAgIHNlbGYuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgJ3VuemlwICVzJiZjaG1vZCAtUiA3NzcgJXMnICUgKGRldmljZV90ZW1wLm5hbWUsIHF1b3RlZF9kaXJzKSwKLSAgICAgICAgICAgIHNoZWxsPVRydWUsIGFzX3Jvb3Q9VHJ1ZSwKLSAgICAgICAgICAgIGVudj17J1BBVEgnOiAnJXM6JFBBVEgnICUgaW5zdGFsbF9jb21tYW5kcy5CSU5fRElSfSwKLSAgICAgICAgICAgIGNoZWNrX3JldHVybj1UcnVlKQotCi0gICAgcmV0dXJuIFRydWUKLQotICAjIFRPRE8obmVkbmd1eWVuKTogcmVtb3ZlIHRoaXMgYW5kIG1pZ3JhdGUgdGhlIGNhbGxzaXRlIHRvIFBhdGhFeGlzdHMoKS4KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIEZpbGVFeGlzdHMoc2VsZiwgZGV2aWNlX3BhdGgsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZSBleGlzdHMgb24gdGhlIGRldmljZS4KLQotICAgIEFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgUGF0aEV4aXN0cy4KLSAgICAiIiIKLSAgICByZXR1cm4gc2VsZi5QYXRoRXhpc3RzKGRldmljZV9wYXRoLCB0aW1lb3V0PXRpbWVvdXQsIHJldHJpZXM9cmV0cmllcykKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgUGF0aEV4aXN0cyhzZWxmLCBkZXZpY2VfcGF0aHMsIGFzX3Jvb3Q9RmFsc2UsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aChzKSBleGlzdHMgb24gdGhlIGRldmljZS4KLQotICAgIEFyZ3M6Ci0gICAgICBkZXZpY2VfcGF0aDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZSBvbiB0aGUKLSAgICAgICAgICAgICAgICAgICBkZXZpY2UsIG9yIGFuIGl0ZXJhYmxlIG9mIHBhdGhzIHRvIGNoZWNrLgotICAgICAgYXNfcm9vdDogV2hldGhlciByb290IHBlcm1pc3Npb25zIHNob3VsZCBiZSB1c2UgdG8gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2UKLSAgICAgICAgICAgICAgIG9mIHRoZSBnaXZlbiBwYXRoKHMpLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIFRydWUgaWYgdGhlIGFsbCBnaXZlbiBwYXRocyBleGlzdCBvbiB0aGUgZGV2aWNlLCBGYWxzZSBvdGhlcndpc2UuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotICAgICIiIgotICAgIHBhdGhzID0gZGV2aWNlX3BhdGhzCi0gICAgaWYgaXNpbnN0YW5jZShwYXRocywgYmFzZXN0cmluZyk6Ci0gICAgICBwYXRocyA9IChwYXRocywpCi0gICAgaWYgbm90IHBhdGhzOgotICAgICAgcmV0dXJuIFRydWUKLSAgICBjbWQgPSBbJ3Rlc3QnLCAnLWUnLCBwYXRoc1swXV0KLSAgICBmb3IgcCBpbiBwYXRoc1sxOl06Ci0gICAgICBjbWQuZXh0ZW5kKFsnLWEnLCAnLWUnLCBwXSkKLSAgICB0cnk6Ci0gICAgICBzZWxmLlJ1blNoZWxsQ29tbWFuZChjbWQsIGFzX3Jvb3Q9YXNfcm9vdCwgY2hlY2tfcmV0dXJuPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PXRpbWVvdXQsIHJldHJpZXM9cmV0cmllcykKLSAgICAgIHJldHVybiBUcnVlCi0gICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yOgotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIFJlbW92ZVBhdGgoc2VsZiwgZGV2aWNlX3BhdGgsIGZvcmNlPUZhbHNlLCByZWN1cnNpdmU9RmFsc2UsCi0gICAgICAgICAgICAgICAgIGFzX3Jvb3Q9RmFsc2UsIHJlbmFtZT1GYWxzZSwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIlJlbW92ZXMgdGhlIGdpdmVuIHBhdGgocykgZnJvbSB0aGUgZGV2aWNlLgotCi0gICAgQXJnczoKLSAgICAgIGRldmljZV9wYXRoOiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlIG9uIHRoZQotICAgICAgICAgICAgICAgICAgIGRldmljZSwgb3IgYW4gaXRlcmFibGUgb2YgcGF0aHMgdG8gY2hlY2suCi0gICAgICBmb3JjZTogV2hldGhlciB0byByZW1vdmUgdGhlIHBhdGgocykgd2l0aCBmb3JjZSAoLWYpLgotICAgICAgcmVjdXJzaXZlOiBXaGV0aGVyIHRvIHJlbW92ZSBhbnkgZGlyZWN0b3JpZXMgaW4gdGhlIHBhdGgocykgcmVjdXJzaXZlbHkuCi0gICAgICBhc19yb290OiBXaGV0aGVyIHJvb3QgcGVybWlzc2lvbnMgc2hvdWxkIGJlIHVzZSB0byByZW1vdmUgdGhlIGdpdmVuCi0gICAgICAgICAgICAgICBwYXRoKHMpLgotICAgICAgcmVuYW1lOiBXaGV0aGVyIHRvIHJlbmFtZSB0aGUgcGF0aChzKSBiZWZvcmUgcmVtb3ZpbmcgdG8gaGVscCBhdm9pZAotICAgICAgICAgICAgZmlsZXN5c3RlbSBlcnJvcnMuIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMTUzOTY1NwotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotICAgICIiIgotICAgIGRlZiBfUmVuYW1lUGF0aChwYXRoKToKLSAgICAgIHJhbmRvbV9zdWZmaXggPSBoZXgocmFuZG9tLnJhbmRpbnQoMiAqKiAxMiwgMiAqKiAxNiAtIDEpKVsyOl0KLSAgICAgIGRlc3QgPSAnJXMtJXMnICUgKHBhdGgsIHJhbmRvbV9zdWZmaXgpCi0gICAgICB0cnk6Ci0gICAgICAgIHNlbGYuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydtdicsIHBhdGgsIGRlc3RdLCBhc19yb290PWFzX3Jvb3QsIGNoZWNrX3JldHVybj1UcnVlKQotICAgICAgICByZXR1cm4gZGVzdAotICAgICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3I6Ci0gICAgICAgICMgSWYgaXQgY291bGRuJ3QgYmUgbW92ZWQsIGp1c3QgdHJ5IHJtJ2luZyB0aGUgb3JpZ2luYWwgcGF0aCBpbnN0ZWFkLgotICAgICAgICByZXR1cm4gcGF0aAotICAgIGFyZ3MgPSBbJ3JtJ10KLSAgICBpZiBmb3JjZToKLSAgICAgIGFyZ3MuYXBwZW5kKCctZicpCi0gICAgaWYgcmVjdXJzaXZlOgotICAgICAgYXJncy5hcHBlbmQoJy1yJykKLSAgICBpZiBpc2luc3RhbmNlKGRldmljZV9wYXRoLCBiYXNlc3RyaW5nKToKLSAgICAgIGFyZ3MuYXBwZW5kKGRldmljZV9wYXRoIGlmIG5vdCByZW5hbWUgZWxzZSBfUmVuYW1lUGF0aChkZXZpY2VfcGF0aCkpCi0gICAgZWxzZToKLSAgICAgIGFyZ3MuZXh0ZW5kKAotICAgICAgICAgIGRldmljZV9wYXRoIGlmIG5vdCByZW5hbWUgZWxzZSBbX1JlbmFtZVBhdGgocCkgZm9yIHAgaW4gZGV2aWNlX3BhdGhdKQotICAgIHNlbGYuUnVuU2hlbGxDb21tYW5kKGFyZ3MsIGFzX3Jvb3Q9YXNfcm9vdCwgY2hlY2tfcmV0dXJuPVRydWUpCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIFB1bGxGaWxlKHNlbGYsIGRldmljZV9wYXRoLCBob3N0X3BhdGgsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJQdWxsIGEgZmlsZSBmcm9tIHRoZSBkZXZpY2UuCi0KLSAgICBBcmdzOgotICAgICAgZGV2aWNlX3BhdGg6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGZpbGUgdG8gcHVsbAotICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGRldmljZS4KLSAgICAgIGhvc3RfcGF0aDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZGVzdGluYXRpb24gb24KLSAgICAgICAgICAgICAgICAgdGhlIGhvc3QuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kRmFpbGVkRXJyb3Igb24gZmFpbHVyZS4KLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgICAiIiIKLSAgICAjIENyZWF0ZSB0aGUgYmFzZSBkaXIgaWYgaXQgZG9lc24ndCBleGlzdCBhbHJlYWR5Ci0gICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShob3N0X3BhdGgpCi0gICAgaWYgZGlybmFtZSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKGRpcm5hbWUpOgotICAgICAgb3MubWFrZWRpcnMoZGlybmFtZSkKLSAgICBzZWxmLmFkYi5QdWxsKGRldmljZV9wYXRoLCBob3N0X3BhdGgpCi0KLSAgZGVmIF9SZWFkRmlsZVdpdGhQdWxsKHNlbGYsIGRldmljZV9wYXRoKToKLSAgICB0cnk6Ci0gICAgICBkID0gdGVtcGZpbGUubWtkdGVtcCgpCi0gICAgICBob3N0X3RlbXBfcGF0aCA9IG9zLnBhdGguam9pbihkLCAndG1wX1JlYWRGaWxlV2l0aFB1bGwnKQotICAgICAgc2VsZi5hZGIuUHVsbChkZXZpY2VfcGF0aCwgaG9zdF90ZW1wX3BhdGgpCi0gICAgICB3aXRoIG9wZW4oaG9zdF90ZW1wX3BhdGgsICdyJykgYXMgaG9zdF90ZW1wOgotICAgICAgICByZXR1cm4gaG9zdF90ZW1wLnJlYWQoKQotICAgIGZpbmFsbHk6Ci0gICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkKToKLSAgICAgICAgc2h1dGlsLnJtdHJlZShkKQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBSZWFkRmlsZShzZWxmLCBkZXZpY2VfcGF0aCwgYXNfcm9vdD1GYWxzZSwgZm9yY2VfcHVsbD1GYWxzZSwKLSAgICAgICAgICAgICAgIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJSZWFkcyB0aGUgY29udGVudHMgb2YgYSBmaWxlIGZyb20gdGhlIGRldmljZS4KLQotICAgIEFyZ3M6Ci0gICAgICBkZXZpY2VfcGF0aDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZSB0byByZWFkCi0gICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgZGV2aWNlLgotICAgICAgYXNfcm9vdDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgcmVhZCBzaG91bGQgYmUgZXhlY3V0ZWQgd2l0aAotICAgICAgICAgICAgICAgcm9vdCBwcml2aWxlZ2VzLgotICAgICAgZm9yY2VfcHVsbDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBmb3JjZSB0aGUgb3BlcmF0aW9uIHRvIGJlCi0gICAgICAgICAgcGVyZm9ybWVkIGJ5IHB1bGxpbmcgYSBmaWxlIGZyb20gdGhlIGRldmljZS4gVGhlIGRlZmF1bHQgaXMsIHdoZW4gdGhlCi0gICAgICAgICAgY29udGVudHMgYXJlIHNob3J0LCB0byByZXRyaWV2ZSB0aGUgY29udGVudHMgdXNpbmcgY2F0IGluc3RlYWQuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIGNvbnRlbnRzIG9mIHxkZXZpY2VfcGF0aHwgYXMgYSBzdHJpbmcuIENvbnRlbnRzIGFyZSBpbnRlcHJldGVkIHVzaW5nCi0gICAgICB1bml2ZXJzYWwgbmV3bGluZXMsIHNvIHRoZSBjYWxsZXIgd2lsbCBzZWUgdGhlbSBlbmNvZGVkIGFzICdcbicuIEFsc28sCi0gICAgICBhbGwgbGluZXMgd2lsbCBiZSB0ZXJtaW5hdGVkLgotCi0gICAgUmFpc2VzOgotICAgICAgQWRiQ29tbWFuZEZhaWxlZEVycm9yIGlmIHRoZSBmaWxlIGNhbid0IGJlIHJlYWQuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotICAgICIiIgotICAgIGRlZiBnZXRfc2l6ZShwYXRoKToKLSAgICAgIHJldHVybiBzZWxmLkZpbGVTaXplKHBhdGgsIGFzX3Jvb3Q9YXNfcm9vdCkKLQotICAgIGlmIChub3QgZm9yY2VfcHVsbAotICAgICAgICBhbmQgMCA8IGdldF9zaXplKGRldmljZV9wYXRoKSA8PSBzZWxmLl9NQVhfQURCX09VVFBVVF9MRU5HVEgpOgotICAgICAgcmV0dXJuIF9Kb2luTGluZXMoc2VsZi5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgWydjYXQnLCBkZXZpY2VfcGF0aF0sIGFzX3Jvb3Q9YXNfcm9vdCwgY2hlY2tfcmV0dXJuPVRydWUpKQotICAgIGVsaWYgYXNfcm9vdCBhbmQgc2VsZi5OZWVkc1NVKCk6Ci0gICAgICB3aXRoIGRldmljZV90ZW1wX2ZpbGUuRGV2aWNlVGVtcEZpbGUoc2VsZi5hZGIpIGFzIGRldmljZV90ZW1wOgotICAgICAgICBjbWQgPSAnU1JDPSVzIERFU1Q9JXM7Y3AgIiRTUkMiICIkREVTVCIgJiYgY2htb2QgNjY2ICIkREVTVCInICUgKAotICAgICAgICAgICAgY21kX2hlbHBlci5TaW5nbGVRdW90ZShkZXZpY2VfcGF0aCksCi0gICAgICAgICAgICBjbWRfaGVscGVyLlNpbmdsZVF1b3RlKGRldmljZV90ZW1wLm5hbWUpKQotICAgICAgICBzZWxmLlJ1blNoZWxsQ29tbWFuZChjbWQsIHNoZWxsPVRydWUsIGFzX3Jvb3Q9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgICAgIHJldHVybiBzZWxmLl9SZWFkRmlsZVdpdGhQdWxsKGRldmljZV90ZW1wLm5hbWUpCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBzZWxmLl9SZWFkRmlsZVdpdGhQdWxsKGRldmljZV9wYXRoKQotCi0gIGRlZiBfV3JpdGVGaWxlV2l0aFB1c2goc2VsZiwgZGV2aWNlX3BhdGgsIGNvbnRlbnRzKToKLSAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGhvc3RfdGVtcDoKLSAgICAgIGhvc3RfdGVtcC53cml0ZShjb250ZW50cykKLSAgICAgIGhvc3RfdGVtcC5mbHVzaCgpCi0gICAgICBzZWxmLmFkYi5QdXNoKGhvc3RfdGVtcC5uYW1lLCBkZXZpY2VfcGF0aCkKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgV3JpdGVGaWxlKHNlbGYsIGRldmljZV9wYXRoLCBjb250ZW50cywgYXNfcm9vdD1GYWxzZSwgZm9yY2VfcHVzaD1GYWxzZSwKLSAgICAgICAgICAgICAgICB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiV3JpdGVzIHxjb250ZW50c3wgdG8gYSBmaWxlIG9uIHRoZSBkZXZpY2UuCi0KLSAgICBBcmdzOgotICAgICAgZGV2aWNlX3BhdGg6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGUgdG8gd3JpdGUKLSAgICAgICAgICBvbiB0aGUgZGV2aWNlLgotICAgICAgY29udGVudHM6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gd3JpdGUgdG8gdGhlIGRldmljZS4KLSAgICAgIGFzX3Jvb3Q6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHdyaXRlIHNob3VsZCBiZSBleGVjdXRlZCB3aXRoCi0gICAgICAgICAgcm9vdCBwcml2aWxlZ2VzIChpZiBhdmFpbGFibGUpLgotICAgICAgZm9yY2VfcHVzaDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBmb3JjZSB0aGUgb3BlcmF0aW9uIHRvIGJlCi0gICAgICAgICAgcGVyZm9ybWVkIGJ5IHB1c2hpbmcgYSBmaWxlIHRvIHRoZSBkZXZpY2UuIFRoZSBkZWZhdWx0IGlzLCB3aGVuIHRoZQotICAgICAgICAgIGNvbnRlbnRzIGFyZSBzaG9ydCwgdG8gcGFzcyB0aGUgY29udGVudHMgdXNpbmcgYSBzaGVsbCBzY3JpcHQgaW5zdGVhZC4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgd3JpdHRlbiBvbiB0aGUgZGV2aWNlLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLSAgICAiIiIKLSAgICBpZiBub3QgZm9yY2VfcHVzaCBhbmQgbGVuKGNvbnRlbnRzKSA8IHNlbGYuX01BWF9BREJfQ09NTUFORF9MRU5HVEg6Ci0gICAgICAjIElmIHRoZSBjb250ZW50cyBhcmUgc21hbGwsIGZvciBlZmZpY2llbnkgd2Ugd3JpdGUgdGhlIGNvbnRlbnRzIHdpdGgKLSAgICAgICMgYSBzaGVsbCBjb21tYW5kIHJhdGhlciB0aGFuIHB1c2hpbmcgYSBmaWxlLgotICAgICAgY21kID0gJ2VjaG8gLW4gJXMgPiAlcycgJSAoY21kX2hlbHBlci5TaW5nbGVRdW90ZShjb250ZW50cyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRfaGVscGVyLlNpbmdsZVF1b3RlKGRldmljZV9wYXRoKSkKLSAgICAgIHNlbGYuUnVuU2hlbGxDb21tYW5kKGNtZCwgc2hlbGw9VHJ1ZSwgYXNfcm9vdD1hc19yb290LCBjaGVja19yZXR1cm49VHJ1ZSkKLSAgICBlbGlmIGFzX3Jvb3QgYW5kIHNlbGYuTmVlZHNTVSgpOgotICAgICAgIyBBZGIgZG9lcyBub3QgYWxsb3cgdG8gInB1c2ggd2l0aCBzdSIsIHNvIHdlIGZpcnN0IHB1c2ggdG8gYSB0ZW1wIGZpbGUKLSAgICAgICMgb24gYSBzYWZlIGxvY2F0aW9uLCBhbmQgdGhlbiBjb3B5IGl0IHRvIHRoZSBkZXNpcmVkIGxvY2F0aW9uIHdpdGggc3UuCi0gICAgICB3aXRoIGRldmljZV90ZW1wX2ZpbGUuRGV2aWNlVGVtcEZpbGUoc2VsZi5hZGIpIGFzIGRldmljZV90ZW1wOgotICAgICAgICBzZWxmLl9Xcml0ZUZpbGVXaXRoUHVzaChkZXZpY2VfdGVtcC5uYW1lLCBjb250ZW50cykKLSAgICAgICAgIyBIZXJlIHdlIG5lZWQgJ2NwJyByYXRoZXIgdGhhbiAnbXYnIGJlY2F1c2UgdGhlIHRlbXAgYW5kCi0gICAgICAgICMgZGVzdGluYXRpb24gZmlsZXMgbWlnaHQgYmUgb24gZGlmZmVyZW50IGZpbGUgc3lzdGVtcyAoZS5nLgotICAgICAgICAjIG9uIGludGVybmFsIHN0b3JhZ2UgYW5kIGFuIGV4dGVybmFsIHNkIGNhcmQpLgotICAgICAgICBzZWxmLlJ1blNoZWxsQ29tbWFuZChbJ2NwJywgZGV2aWNlX3RlbXAubmFtZSwgZGV2aWNlX3BhdGhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc19yb290PVRydWUsIGNoZWNrX3JldHVybj1UcnVlKQotICAgIGVsc2U6Ci0gICAgICAjIElmIHJvb3QgaXMgbm90IG5lZWRlZCwgd2UgY2FuIHB1c2ggZGlyZWN0bHkgdG8gdGhlIGRlc2lyZWQgbG9jYXRpb24uCi0gICAgICBzZWxmLl9Xcml0ZUZpbGVXaXRoUHVzaChkZXZpY2VfcGF0aCwgY29udGVudHMpCi0KLSAgZGVmIF9QYXJzZUxvbmdMc091dHB1dChzZWxmLCBkZXZpY2VfcGF0aCwgYXNfcm9vdD1GYWxzZSwgKiprd2FyZ3MpOgotICAgICIiIlJ1biBhbmQgc2NyYXBlIHRoZSBvdXRwdXQgb2YgJ2xzIC1hIC1sJyBvbiBhIGRldmljZSBkaXJlY3RvcnkuIiIiCi0gICAgZGV2aWNlX3BhdGggPSBwb3NpeHBhdGguam9pbihkZXZpY2VfcGF0aCwgJycpICAjIEZvcmNlIHRyYWlsaW5nICcvJy4KLSAgICBvdXRwdXQgPSBzZWxmLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgWydscycsICctYScsICctbCcsIGRldmljZV9wYXRoXSwgYXNfcm9vdD1hc19yb290LAotICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgZW52PXsnVFonOiAndXRjJ30sICoqa3dhcmdzKQotICAgIGlmIG91dHB1dCBhbmQgb3V0cHV0WzBdLnN0YXJ0c3dpdGgoJ3RvdGFsICcpOgotICAgICAgb3V0cHV0LnBvcCgwKSAjIHB5bGludDogZGlzYWJsZT1tYXliZS1uby1tZW1iZXIKLQotICAgIGVudHJpZXMgPSBbXQotICAgIGZvciBsaW5lIGluIG91dHB1dDoKLSAgICAgIG0gPSBfTE9OR19MU19PVVRQVVRfUkUubWF0Y2gobGluZSkKLSAgICAgIGlmIG06Ci0gICAgICAgIGlmIG0uZ3JvdXAoJ2ZpbGVuYW1lJykgbm90IGluIFsnLicsICcuLiddOgotICAgICAgICAgIGl0ZW0gPSBtLmdyb3VwZGljdCgpCi0gICAgICAgICAgIyBBIGNoYW5nZSBpbiB0b3lib3ggaXMgY2F1c2luZyByZWNlbnQgQW5kcm9pZCB2ZXJzaW9ucyB0byBlc2NhcGUKLSAgICAgICAgICAjIHNwYWNlcyBpbiBmaWxlIG5hbWVzLiBIZXJlIHdlIGp1c3QgdW5xdW90ZSB0aG9zZSBzcGFjZXMuIElmIHdlCi0gICAgICAgICAgIyBsYXRlciBmaW5kIG1vcmUgZXNzb3RlcmljIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lcywgYSBtb3JlIGNhcmVmdWwKLSAgICAgICAgICAjIHVucXVvdGluZyBtZWNoYW5pc20gbWF5IGJlIG5lZWRlZC4gQnV0IGhvcGVmdWxseSBub3QuCi0gICAgICAgICAgIyBTZWU6IGh0dHBzOi8vZ29vLmdsL0pBZWJaagotICAgICAgICAgIGl0ZW1bJ2ZpbGVuYW1lJ10gPSBpdGVtWydmaWxlbmFtZSddLnJlcGxhY2UoJ1xcICcsICcgJykKLSAgICAgICAgICBlbnRyaWVzLmFwcGVuZChpdGVtKQotICAgICAgZWxzZToKLSAgICAgICAgbG9nZ2VyLmluZm8oJ1NraXBwaW5nOiAlcycsIGxpbmUpCi0KLSAgICByZXR1cm4gZW50cmllcwotCi0gIGRlZiBMaXN0RGlyZWN0b3J5KHNlbGYsIGRldmljZV9wYXRoLCBhc19yb290PUZhbHNlLCAqKmt3YXJncyk6Ci0gICAgIiIiTGlzdCBhbGwgZmlsZXMgb24gYSBkZXZpY2UgZGlyZWN0b3J5LgotCi0gICAgTWlycm9yaW5nIG9zLmxpc3RkaXIgKGFuZCBtb3N0IGNsaWVudCBleHBlY3RhdGlvbnMpIHRoZSByZXN1bHRpbmcgbGlzdAotICAgIGRvZXMgbm90IGluY2x1ZGUgdGhlIHNwZWNpYWwgZW50cmllcyAnLicgYW5kICcuLicgZXZlbiBpZiB0aGV5IGFyZSBwcmVzZW50Ci0gICAgaW4gdGhlIGRpcmVjdG9yeS4KLQotICAgIEFyZ3M6Ci0gICAgICBkZXZpY2VfcGF0aDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCBvZiB0aGUgZGlyZWN0b3J5IG9uIHRoZSBkZXZpY2UKLSAgICAgICAgICAgICAgICAgICB0byBsaXN0LgotICAgICAgYXNfcm9vdDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdG8gdXNlIHJvb3QgcHJpdmlsZWdlcyB0byBsaXN0Ci0gICAgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IGNvbnRlbnRzLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgbGlzdCBvZiBmaWxlbmFtZXMgZm9yIGFsbCBlbnRyaWVzIGNvbnRhaW5lZCBpbiB0aGUgZGlyZWN0b3J5LgotCi0gICAgUmFpc2VzOgotICAgICAgQWRiQ29tbWFuZEZhaWxlZEVycm9yIGlmIHxkZXZpY2VfcGF0aHwgZG9lcyBub3Qgc3BlY2lmeSBhIHZhbGlkIGFuZAotICAgICAgICAgIGFjY2Vzc2libGUgZGlyZWN0b3J5IGluIHRoZSBkZXZpY2UuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotICAgICIiIgotICAgIGVudHJpZXMgPSBzZWxmLl9QYXJzZUxvbmdMc091dHB1dChkZXZpY2VfcGF0aCwgYXNfcm9vdD1hc19yb290LCAqKmt3YXJncykKLSAgICByZXR1cm4gW2RbJ2ZpbGVuYW1lJ10gZm9yIGQgaW4gZW50cmllc10KLQotICBkZWYgU3RhdERpcmVjdG9yeShzZWxmLCBkZXZpY2VfcGF0aCwgYXNfcm9vdD1GYWxzZSwgKiprd2FyZ3MpOgotICAgICIiIkxpc3QgZmlsZSBhbmQgc3RhdCBpbmZvIGZvciBhbGwgZW50cmllcyBvbiBhIGRldmljZSBkaXJlY3RvcnkuCi0KLSAgICBJbXBsZW1lbnRhdGlvbiBub3RlczogdGhpcyBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgYnkgcGFyc2luZyB0aGUgb3V0cHV0Ci0gICAgb2YgJ2xzIC1hIC1sJyBvbiB0aGUgZGV2aWNlLiBXaGV0aGVyIHBvc3NpYmxlIGFuZCBjb252ZW5pZW50LCB3ZSBhdHRlbXB0IHRvCi0gICAgbWFrZSBwYXJzaW5nIHN0cmljdCBhbmQgcmV0dXJuIHZhbHVlcyBtaXJyb3JpbmcgdGhvc2Ugb2YgdGhlIHN0YW5kYXJkIHxvc3wKLSAgICBhbmQgfHN0YXR8IFB5dGhvbiBtb2R1bGVzLgotCi0gICAgTWlycm9yaW5nIG9zLmxpc3RkaXIgKGFuZCBtb3N0IGNsaWVudCBleHBlY3RhdGlvbnMpIHRoZSByZXN1bHRpbmcgbGlzdAotICAgIGRvZXMgbm90IGluY2x1ZGUgdGhlIHNwZWNpYWwgZW50cmllcyAnLicgYW5kICcuLicgZXZlbiBpZiB0aGV5IGFyZSBwcmVzZW50Ci0gICAgaW4gdGhlIGRpcmVjdG9yeS4KLQotICAgIEFyZ3M6Ci0gICAgICBkZXZpY2VfcGF0aDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCBvZiB0aGUgZGlyZWN0b3J5IG9uIHRoZSBkZXZpY2UKLSAgICAgICAgICAgICAgICAgICB0byBsaXN0LgotICAgICAgYXNfcm9vdDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdG8gdXNlIHJvb3QgcHJpdmlsZWdlcyB0byBsaXN0Ci0gICAgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IGNvbnRlbnRzLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgbGlzdCBvZiBkaWN0aW9uYXJpZXMsIGVhY2ggY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGtleXM6Ci0gICAgICAgIGZpbGVuYW1lOiBBIHN0cmluZyB3aXRoIHRoZSBmaWxlIG5hbWUuCi0gICAgICAgIHN0X21vZGU6IEZpbGUgcGVybWlzc2lvbnMsIHVzZSB0aGUgc3RhdCBtb2R1bGUgdG8gaW50ZXJwcmV0IHRoZXNlLgotICAgICAgICBzdF9ubGluazogTnVtYmVyIG9mIGhhcmQgbGlua3MgKG1heSBiZSBtaXNzaW5nKS4KLSAgICAgICAgc3Rfb3duZXI6IEEgc3RyaW5nIHdpdGggdGhlIHVzZXIgbmFtZSBvZiB0aGUgb3duZXIuCi0gICAgICAgIHN0X2dyb3VwOiBBIHN0cmluZyB3aXRoIHRoZSBncm91cCBuYW1lIG9mIHRoZSBvd25lci4KLSAgICAgICAgc3RfcmRldl9wYWlyOiBEZXZpY2UgdHlwZSBhcyAobWFqb3IsIG1pbmlvcikgKG9ubHkgaWYgaW5vZGUgZGV2aWNlKS4KLSAgICAgICAgc3Rfc2l6ZTogU2l6ZSBvZiBmaWxlLCBpbiBieXRlcyAobWF5IGJlIG1pc3NpbmcgZm9yIG5vbi1yZWd1bGFyIGZpbGVzKS4KLSAgICAgICAgc3RfbXRpbWU6IFRpbWUgb2YgbW9zdCByZWNlbnQgbW9kaWZpY2F0aW9uLCBpbiBzZWNvbmRzIHNpbmNlIGVwb2NoCi0gICAgICAgICAgKGFsdGhvdWdoIHJlc29sdXRpb24gaXMgaW4gbWludXRlcykuCi0gICAgICAgIHN5bWJvbGljX2xpbmtfdG86IElmIGVudHJ5IGlzIGEgc3ltYm9saWMgbGluaywgcGF0aCB3aGVyZSBpdCBwb2ludHMgdG87Ci0gICAgICAgICAgbWlzc2luZyBvdGhlcndpc2UuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBBZGJDb21tYW5kRmFpbGVkRXJyb3IgaWYgfGRldmljZV9wYXRofCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmFsaWQgYW5kCi0gICAgICAgICAgYWNjZXNzaWJsZSBkaXJlY3RvcnkgaW4gdGhlIGRldmljZS4KLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi0gICAgIiIiCi0gICAgZW50cmllcyA9IHNlbGYuX1BhcnNlTG9uZ0xzT3V0cHV0KGRldmljZV9wYXRoLCBhc19yb290PWFzX3Jvb3QsICoqa3dhcmdzKQotICAgIGZvciBkIGluIGVudHJpZXM6Ci0gICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkLml0ZW1zKCk6Ci0gICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6Ci0gICAgICAgICAgZGVsIGRba2V5XSAgIyBSZW1vdmUgbWlzc2luZyBmaWVsZHMuCi0gICAgICBkWydzdF9tb2RlJ10gPSBfUGFyc2VNb2RlU3RyaW5nKGRbJ3N0X21vZGUnXSkKLSAgICAgIGRbJ3N0X210aW1lJ10gPSBjYWxlbmRhci50aW1lZ20oCi0gICAgICAgICAgdGltZS5zdHJwdGltZShkWydzdF9tdGltZSddLCBfTFNfREFURV9GT1JNQVQpKQotICAgICAgZm9yIGtleSBpbiBbJ3N0X25saW5rJywgJ3N0X3NpemUnLCAnc3RfcmRldl9tYWpvcicsICdzdF9yZGV2X21pbm9yJ106Ci0gICAgICAgIGlmIGtleSBpbiBkOgotICAgICAgICAgIGRba2V5XSA9IGludChkW2tleV0pCi0gICAgICBpZiAnc3RfcmRldl9tYWpvcicgaW4gZCBhbmQgJ3N0X3JkZXZfbWlub3InIGluIGQ6Ci0gICAgICAgIGRbJ3N0X3JkZXZfcGFpciddID0gKGQucG9wKCdzdF9yZGV2X21ham9yJyksIGQucG9wKCdzdF9yZGV2X21pbm9yJykpCi0gICAgcmV0dXJuIGVudHJpZXMKLQotICBkZWYgU3RhdFBhdGgoc2VsZiwgZGV2aWNlX3BhdGgsIGFzX3Jvb3Q9RmFsc2UsICoqa3dhcmdzKToKLSAgICAiIiJHZXQgdGhlIHN0YXQgYXR0cmlidXRlcyBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5IG9uIHRoZSBkZXZpY2UuCi0KLSAgICBBcmdzOgotICAgICAgZGV2aWNlX3BhdGg6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggb2YgYSBmaWxlIG9yIGRpcmVjdG9yeSBmcm9tCi0gICAgICAgICAgICAgICAgICAgd2hpY2ggdG8gZ2V0IGF0dHJpYnV0ZXMuCi0gICAgICBhc19yb290OiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB0byB1c2Ugcm9vdCBwcml2aWxlZ2VzIHRvCi0gICAgICAgICAgICAgICBhY2Nlc3MgdGhlIGZpbGUgaW5mb3JtYXRpb24uCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBkaWN0aW9uYXJ5IHdpdGggdGhlIHN0YXQgaW5mbyBjb2xsZWN0ZWQ7IHNlZSBTdGF0RGlyZWN0b3J5IGZvciBkZXRhaWxzLgotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIGlmIGRldmljZV9wYXRoIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgZGV2aWNlLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLSAgICAiIiIKLSAgICBkaXJuYW1lLCBmaWxlbmFtZSA9IHBvc2l4cGF0aC5zcGxpdChwb3NpeHBhdGgubm9ybXBhdGgoZGV2aWNlX3BhdGgpKQotICAgIGZvciBlbnRyeSBpbiBzZWxmLlN0YXREaXJlY3RvcnkoZGlybmFtZSwgYXNfcm9vdD1hc19yb290LCAqKmt3YXJncyk6Ci0gICAgICBpZiBlbnRyeVsnZmlsZW5hbWUnXSA9PSBmaWxlbmFtZToKLSAgICAgICAgcmV0dXJuIGVudHJ5Ci0gICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IoCi0gICAgICAgICdDYW5ub3QgZmluZCBmaWxlIG9yIGRpcmVjdG9yeTogJXInICUgZGV2aWNlX3BhdGgsIHN0cihzZWxmKSkKLQotICBkZWYgRmlsZVNpemUoc2VsZiwgZGV2aWNlX3BhdGgsIGFzX3Jvb3Q9RmFsc2UsICoqa3dhcmdzKToKLSAgICAiIiJHZXQgdGhlIHNpemUgb2YgYSBmaWxlIG9uIHRoZSBkZXZpY2UuCi0KLSAgICBOb3RlOiBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IHBhcnNpbmcgdGhlIG91dHB1dCBvZiB0aGUgJ2xzJyBjb21tYW5kIG9uCi0gICAgdGhlIGRldmljZS4gT24gc29tZSBBbmRyb2lkIHZlcnNpb25zLCB3aGVuIHBhc3NpbmcgYSBkaXJlY3Rvcnkgb3Igc3BlY2lhbAotICAgIGZpbGUsIHRoZSBzaXplIGlzICpub3QqIHJlcG9ydGVkIGFuZCB0aGlzIGZ1bmN0aW9uIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLgotCi0gICAgQXJnczoKLSAgICAgIGRldmljZV9wYXRoOiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIG9mIGEgZmlsZSBvbiB0aGUgZGV2aWNlLgotICAgICAgYXNfcm9vdDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdG8gdXNlIHJvb3QgcHJpdmlsZWdlcyB0bwotICAgICAgICAgICAgICAgYWNjZXNzIHRoZSBmaWxlIGluZm9ybWF0aW9uLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBzaXplIG9mIHRoZSBmaWxlIGluIGJ5dGVzLgotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIGlmIGRldmljZV9wYXRoIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgZGV2aWNlLCBvcgotICAgICAgICBpdHMgc2l6ZSBjYW5ub3QgYmUgZGV0ZXJtaXRlZCBmb3Igc29tZSByZWFzb24uCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotICAgICIiIgotICAgIGVudHJ5ID0gc2VsZi5TdGF0UGF0aChkZXZpY2VfcGF0aCwgYXNfcm9vdD1hc19yb290LCAqKmt3YXJncykKLSAgICB0cnk6Ci0gICAgICByZXR1cm4gZW50cnlbJ3N0X3NpemUnXQotICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAgICdDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBzaXplIG9mOiAlcycgJSBkZXZpY2VfcGF0aCwgc3RyKHNlbGYpKQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBTZXRKYXZhQXNzZXJ0cyhzZWxmLCBlbmFibGVkLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiRW5hYmxlcyBvciBkaXNhYmxlcyBKYXZhIGFzc2VydHMuCi0KLSAgICBBcmdzOgotICAgICAgZW5hYmxlZDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBKYXZhIGFzc2VydHMgc2hvdWxkIGJlIGVuYWJsZWQKLSAgICAgICAgICAgICAgIG9yIGRpc2FibGVkLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIFRydWUgaWYgdGhlIGRldmljZS1zaWRlIHByb3BlcnR5IGNoYW5nZWQgYW5kIGEgcmVzdGFydCBpcyByZXF1aXJlZCBhcyBhCi0gICAgICByZXN1bHQsIEZhbHNlIG90aGVyd2lzZS4KLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgICAiIiIKLSAgICBkZWYgZmluZF9wcm9wZXJ0eShsaW5lcywgcHJvcGVydHlfbmFtZSk6Ci0gICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKLSAgICAgICAgaWYgbGluZS5zdHJpcCgpID09ICcnOgotICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGtleV92YWx1ZSA9IHR1cGxlKHMuc3RyaXAoKSBmb3IgcyBpbiBsaW5lLnNwbGl0KCc9JywgMSkpCi0gICAgICAgIGlmIGxlbihrZXlfdmFsdWUpICE9IDI6Ci0gICAgICAgICAgY29udGludWUKLSAgICAgICAga2V5LCB2YWx1ZSA9IGtleV92YWx1ZQotICAgICAgICBpZiBrZXkgPT0gcHJvcGVydHlfbmFtZToKLSAgICAgICAgICByZXR1cm4gaW5kZXgsIHZhbHVlCi0gICAgICByZXR1cm4gTm9uZSwgJycKLQotICAgIG5ld192YWx1ZSA9ICdhbGwnIGlmIGVuYWJsZWQgZWxzZSAnJwotCi0gICAgIyBGaXJzdCBlbnN1cmUgdGhlIGRlc2lyZWQgcHJvcGVydHkgaXMgcGVyc2lzdGVkLgotICAgIHRyeToKLSAgICAgIHByb3BlcnRpZXMgPSBzZWxmLlJlYWRGaWxlKHNlbGYuTE9DQUxfUFJPUEVSVElFU19QQVRIKS5zcGxpdGxpbmVzKCkKLSAgICBleGNlcHQgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3I6Ci0gICAgICBwcm9wZXJ0aWVzID0gW10KLSAgICBpbmRleCwgdmFsdWUgPSBmaW5kX3Byb3BlcnR5KHByb3BlcnRpZXMsIHNlbGYuSkFWQV9BU1NFUlRfUFJPUEVSVFkpCi0gICAgaWYgbmV3X3ZhbHVlICE9IHZhbHVlOgotICAgICAgaWYgbmV3X3ZhbHVlOgotICAgICAgICBuZXdfbGluZSA9ICclcz0lcycgJSAoc2VsZi5KQVZBX0FTU0VSVF9QUk9QRVJUWSwgbmV3X3ZhbHVlKQotICAgICAgICBpZiBpbmRleCBpcyBOb25lOgotICAgICAgICAgIHByb3BlcnRpZXMuYXBwZW5kKG5ld19saW5lKQotICAgICAgICBlbHNlOgotICAgICAgICAgIHByb3BlcnRpZXNbaW5kZXhdID0gbmV3X2xpbmUKLSAgICAgIGVsc2U6Ci0gICAgICAgIGFzc2VydCBpbmRleCBpcyBub3QgTm9uZSAgIyBzaW5jZSBuZXdfdmFsdWUgPT0gJycgYW5kIG5ld192YWx1ZSAhPSB2YWx1ZQotICAgICAgICBwcm9wZXJ0aWVzLnBvcChpbmRleCkKLSAgICAgIHNlbGYuV3JpdGVGaWxlKHNlbGYuTE9DQUxfUFJPUEVSVElFU19QQVRILCBfSm9pbkxpbmVzKHByb3BlcnRpZXMpKQotCi0gICAgIyBOZXh0LCBjaGVjayB0aGUgY3VycmVudCBydW50aW1lIHZhbHVlIGlzIHdoYXQgd2UgbmVlZCwgYW5kCi0gICAgIyBpZiBub3QsIHNldCBpdCBhbmQgcmVwb3J0IHRoYXQgYSByZWJvb3QgaXMgcmVxdWlyZWQuCi0gICAgdmFsdWUgPSBzZWxmLkdldFByb3Aoc2VsZi5KQVZBX0FTU0VSVF9QUk9QRVJUWSkKLSAgICBpZiBuZXdfdmFsdWUgIT0gdmFsdWU6Ci0gICAgICBzZWxmLlNldFByb3Aoc2VsZi5KQVZBX0FTU0VSVF9QUk9QRVJUWSwgbmV3X3ZhbHVlKQotICAgICAgcmV0dXJuIFRydWUKLSAgICBlbHNlOgotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgZGVmIEdldExhbmd1YWdlKHNlbGYsIGNhY2hlPUZhbHNlKToKLSAgICAiIiJSZXR1cm5zIHRoZSBsYW5ndWFnZSBzZXR0aW5nIG9uIHRoZSBkZXZpY2UuCi0gICAgQXJnczoKLSAgICAgIGNhY2hlOiBXaGV0aGVyIHRvIHVzZSBjYWNoZWQgcHJvcGVydGllcyB3aGVuIGF2YWlsYWJsZS4KLSAgICAiIiIKLSAgICByZXR1cm4gc2VsZi5HZXRQcm9wKCdwZXJzaXN0LnN5cy5sYW5ndWFnZScsIGNhY2hlPWNhY2hlKQotCi0gIGRlZiBHZXRDb3VudHJ5KHNlbGYsIGNhY2hlPUZhbHNlKToKLSAgICAiIiJSZXR1cm5zIHRoZSBjb3VudHJ5IHNldHRpbmcgb24gdGhlIGRldmljZS4KLQotICAgIEFyZ3M6Ci0gICAgICBjYWNoZTogV2hldGhlciB0byB1c2UgY2FjaGVkIHByb3BlcnRpZXMgd2hlbiBhdmFpbGFibGUuCi0gICAgIiIiCi0gICAgcmV0dXJuIHNlbGYuR2V0UHJvcCgncGVyc2lzdC5zeXMuY291bnRyeScsIGNhY2hlPWNhY2hlKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgc2NyZWVuX2RlbnNpdHkoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgc2NyZWVuIGRlbnNpdHkgb2YgdGhlIGRldmljZS4iIiIKLSAgICBEUElfVE9fREVOU0lUWSA9IHsKLSAgICAgIDEyMDogJ2xkcGknLAotICAgICAgMTYwOiAnbWRwaScsCi0gICAgICAyNDA6ICdoZHBpJywKLSAgICAgIDMyMDogJ3hoZHBpJywKLSAgICAgIDQ4MDogJ3h4aGRwaScsCi0gICAgICA2NDA6ICd4eHhoZHBpJywKLSAgICB9Ci0gICAgcmV0dXJuIERQSV9UT19ERU5TSVRZLmdldChzZWxmLnBpeGVsX2RlbnNpdHksICd0dmRwaScpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBwaXhlbF9kZW5zaXR5KHNlbGYpOgotICAgIHJldHVybiBpbnQoc2VsZi5HZXRQcm9wKCdyby5zZi5sY2RfZGVuc2l0eScsIGNhY2hlPVRydWUpKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgYnVpbGRfZGVzY3JpcHRpb24oc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgYnVpbGQgZGVzY3JpcHRpb24gb2YgdGhlIHN5c3RlbS4KLQotICAgIEZvciBleGFtcGxlOgotICAgICAgbmFrYXNpLXVzZXIgNC40LjQgS1RVODRQIDEyMjcxMzYgcmVsZWFzZS1rZXlzCi0gICAgIiIiCi0gICAgcmV0dXJuIHNlbGYuR2V0UHJvcCgncm8uYnVpbGQuZGVzY3JpcHRpb24nLCBjYWNoZT1UcnVlKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgYnVpbGRfZmluZ2VycHJpbnQoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgYnVpbGQgZmluZ2VycHJpbnQgb2YgdGhlIHN5c3RlbS4KLQotICAgIEZvciBleGFtcGxlOgotICAgICAgZ29vZ2xlL25ha2FzaS9ncm91cGVyOjQuNC40L0tUVTg0UC8xMjI3MTM2OnVzZXIvcmVsZWFzZS1rZXlzCi0gICAgIiIiCi0gICAgcmV0dXJuIHNlbGYuR2V0UHJvcCgncm8uYnVpbGQuZmluZ2VycHJpbnQnLCBjYWNoZT1UcnVlKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgYnVpbGRfaWQoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgYnVpbGQgSUQgb2YgdGhlIHN5c3RlbSAoZS5nLiAnS1RVODRQJykuIiIiCi0gICAgcmV0dXJuIHNlbGYuR2V0UHJvcCgncm8uYnVpbGQuaWQnLCBjYWNoZT1UcnVlKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgYnVpbGRfcHJvZHVjdChzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBidWlsZCBwcm9kdWN0IG9mIHRoZSBzeXN0ZW0gKGUuZy4gJ2dyb3VwZXInKS4iIiIKLSAgICByZXR1cm4gc2VsZi5HZXRQcm9wKCdyby5idWlsZC5wcm9kdWN0JywgY2FjaGU9VHJ1ZSkKLQotICBAcHJvcGVydHkKLSAgZGVmIGJ1aWxkX3R5cGUoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgYnVpbGQgdHlwZSBvZiB0aGUgc3lzdGVtIChlLmcuICd1c2VyJykuIiIiCi0gICAgcmV0dXJuIHNlbGYuR2V0UHJvcCgncm8uYnVpbGQudHlwZScsIGNhY2hlPVRydWUpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBidWlsZF92ZXJzaW9uX3NkayhzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBidWlsZCB2ZXJzaW9uIHNkayBvZiB0aGUgc3lzdGVtIGFzIGEgbnVtYmVyIChlLmcuIDE5KS4KLQotICAgIEZvciB2ZXJzaW9uIGNvZGUgbnVtYmVycyBzZWU6Ci0gICAgaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9vcy9CdWlsZC5WRVJTSU9OX0NPREVTLmh0bWwKLQotICAgIEZvciBuYW1lZCBjb25zdGFudHMgc2VlIGRldmlsLmFuZHJvaWQuc2RrLnZlcnNpb25fY29kZXMKLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiB0aGUgYnVpbGQgdmVyc2lvbiBzZGsgaXMgbm90IGEgbnVtYmVyLgotICAgICIiIgotICAgIHZhbHVlID0gc2VsZi5HZXRQcm9wKCdyby5idWlsZC52ZXJzaW9uLnNkaycsIGNhY2hlPVRydWUpCi0gICAgdHJ5OgotICAgICAgcmV0dXJuIGludCh2YWx1ZSkKLSAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAgICdJbnZhbGlkIGJ1aWxkIHZlcnNpb24gc2RrOiAlcicgJSB2YWx1ZSkKLQotICBAcHJvcGVydHkKLSAgZGVmIHByb2R1Y3RfY3B1X2FiaShzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBwcm9kdWN0IGNwdSBhYmkgb2YgdGhlIGRldmljZSAoZS5nLiAnYXJtZWFiaS12N2EnKS4iIiIKLSAgICByZXR1cm4gc2VsZi5HZXRQcm9wKCdyby5wcm9kdWN0LmNwdS5hYmknLCBjYWNoZT1UcnVlKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgcHJvZHVjdF9tb2RlbChzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwcm9kdWN0IG1vZGVsIChlLmcuICdOZXh1cyA3JykuIiIiCi0gICAgcmV0dXJuIHNlbGYuR2V0UHJvcCgncm8ucHJvZHVjdC5tb2RlbCcsIGNhY2hlPVRydWUpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBwcm9kdWN0X25hbWUoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgcHJvZHVjdCBuYW1lIG9mIHRoZSBkZXZpY2UgKGUuZy4gJ25ha2FzaScpLiIiIgotICAgIHJldHVybiBzZWxmLkdldFByb3AoJ3JvLnByb2R1Y3QubmFtZScsIGNhY2hlPVRydWUpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBwcm9kdWN0X2JvYXJkKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIHByb2R1Y3QgYm9hcmQgbmFtZSBvZiB0aGUgZGV2aWNlIChlLmcuICdzaGFtdScpLiIiIgotICAgIHJldHVybiBzZWxmLkdldFByb3AoJ3JvLnByb2R1Y3QuYm9hcmQnLCBjYWNoZT1UcnVlKQotCi0gIGRlZiBfRW5zdXJlQ2FjaGVJbml0aWFsaXplZChzZWxmKToKLSAgICAiIiJQb3B1bGF0ZXMgY2FjaGUgdG9rZW4sIHJ1bnMgZ2V0cHJvcCBhbmQgZmV0Y2hlcyAkRVhURVJOQUxfU1RPUkFHRS4iIiIKLSAgICBpZiBzZWxmLl9jYWNoZVsndG9rZW4nXToKLSAgICAgIHJldHVybgotICAgIHdpdGggc2VsZi5fY2FjaGVfbG9jazoKLSAgICAgIGlmIHNlbGYuX2NhY2hlWyd0b2tlbiddOgotICAgICAgICByZXR1cm4KLSAgICAgICMgQ2hhbmdlIHRoZSB0b2tlbiBldmVyeSB0aW1lIHRvIGVuc3VyZSB0aGF0IGl0IHdpbGwgbWF0Y2ggb25seSB0aGUKLSAgICAgICMgcHJldmlvdXNseSBkdW1wZWQgY2FjaGUuCi0gICAgICB0b2tlbiA9IHN0cih1dWlkLnV1aWQxKCkpCi0gICAgICBjbWQgPSAoCi0gICAgICAgICAgJ2M9L2RhdGEvbG9jYWwvdG1wL2NhY2hlX3Rva2VuOycKLSAgICAgICAgICAnZWNobyAkRVhURVJOQUxfU1RPUkFHRTsnCi0gICAgICAgICAgJ2NhdCAkYyAyPi9kZXYvbnVsbHx8ZWNobzsnCi0gICAgICAgICAgJ2VjaG8gIiVzIj4kYyAmJicgJSB0b2tlbiArCi0gICAgICAgICAgJ2dldHByb3AnCi0gICAgICApCi0gICAgICBvdXRwdXQgPSBzZWxmLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICBjbWQsIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlLCBsYXJnZV9vdXRwdXQ9VHJ1ZSkKLSAgICAgICMgRXJyb3ItY2hlY2tpbmcgZm9yIHRoaXMgZXhpc3RpbmcgaXMgZG9uZSBpbiBHZXRFeHRlcm5hbFN0b3JhZ2VQYXRoKCkuCi0gICAgICBzZWxmLl9jYWNoZVsnZXh0ZXJuYWxfc3RvcmFnZSddID0gb3V0cHV0WzBdCi0gICAgICBzZWxmLl9jYWNoZVsncHJldl90b2tlbiddID0gb3V0cHV0WzFdCi0gICAgICBvdXRwdXQgPSBvdXRwdXRbMjpdCi0KLSAgICAgIHByb3BfY2FjaGUgPSBzZWxmLl9jYWNoZVsnZ2V0cHJvcCddCi0gICAgICBwcm9wX2NhY2hlLmNsZWFyKCkKLSAgICAgIGZvciBrZXksIHZhbHVlIGluIF9HRVRQUk9QX1JFLmZpbmRhbGwoJycuam9pbihvdXRwdXQpKToKLSAgICAgICAgcHJvcF9jYWNoZVtrZXldID0gdmFsdWUKLSAgICAgIHNlbGYuX2NhY2hlWyd0b2tlbiddID0gdG9rZW4KLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgR2V0UHJvcChzZWxmLCBwcm9wZXJ0eV9uYW1lLCBjYWNoZT1GYWxzZSwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIkdldHMgYSBwcm9wZXJ0eSBmcm9tIHRoZSBkZXZpY2UuCi0KLSAgICBBcmdzOgotICAgICAgcHJvcGVydHlfbmFtZTogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0IGZyb20KLSAgICAgICAgICAgICAgICAgICAgIHRoZSBkZXZpY2UuCi0gICAgICBjYWNoZTogV2hldGhlciB0byB1c2UgY2FjaGVkIHByb3BlcnRpZXMgd2hlbiBhdmFpbGFibGUuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIHZhbHVlIG9mIHRoZSBkZXZpY2UncyB8cHJvcGVydHlfbmFtZXwgcHJvcGVydHkuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgIiIiCi0gICAgYXNzZXJ0IGlzaW5zdGFuY2UocHJvcGVydHlfbmFtZSwgYmFzZXN0cmluZyksICgKLSAgICAgICAgInByb3BlcnR5X25hbWUgaXMgbm90IGEgc3RyaW5nOiAlciIgJSBwcm9wZXJ0eV9uYW1lKQotCi0gICAgaWYgY2FjaGU6Ci0gICAgICAjIEl0IHRha2VzIH4xMjBtcyB0byBxdWVyeSBhIHNpbmdsZSBwcm9wZXJ0eSwgYW5kIH4xMzBtcyB0byBxdWVyeSBhbGwKLSAgICAgICMgcHJvcGVydGllcy4gU28sIHdoZW4gY2FjaGluZyB3ZSBhbHdheXMgcXVlcnkgYWxsIHByb3BlcnRpZXMuCi0gICAgICBzZWxmLl9FbnN1cmVDYWNoZUluaXRpYWxpemVkKCkKLSAgICBlbHNlOgotICAgICAgIyB0aW1lb3V0IGFuZCByZXRyaWVzIGFyZSBoYW5kbGVkIGRvd24gYXQgcnVuIHNoZWxsLCBiZWNhdXNlIHdlIGRvbid0Ci0gICAgICAjIHdhbnQgdG8gYXBwbHkgdGhlbSBpbiB0aGUgb3RoZXIgYnJhbmNoIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBjYWNoZQotICAgICAgdmFsdWUgPSBzZWxmLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICBbJ2dldHByb3AnLCBwcm9wZXJ0eV9uYW1lXSwgc2luZ2xlX2xpbmU9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUsCi0gICAgICAgICAgdGltZW91dD10aW1lb3V0LCByZXRyaWVzPXJldHJpZXMpCi0gICAgICBzZWxmLl9jYWNoZVsnZ2V0cHJvcCddW3Byb3BlcnR5X25hbWVdID0gdmFsdWUKLSAgICAjIE5vbi1leGlzdGVudCBwcm9wZXJ0aWVzIGFyZSB0cmVhdGVkIGFzIGVtcHR5IHN0cmluZ3MgYnkgZ2V0cHJvcC4KLSAgICByZXR1cm4gc2VsZi5fY2FjaGVbJ2dldHByb3AnXS5nZXQocHJvcGVydHlfbmFtZSwgJycpCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIFNldFByb3Aoc2VsZiwgcHJvcGVydHlfbmFtZSwgdmFsdWUsIGNoZWNrPUZhbHNlLCB0aW1lb3V0PU5vbmUsCi0gICAgICAgICAgICAgIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiU2V0cyBhIHByb3BlcnR5IG9uIHRoZSBkZXZpY2UuCi0KLSAgICBBcmdzOgotICAgICAgcHJvcGVydHlfbmFtZTogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0IG9uCi0gICAgICAgICAgICAgICAgICAgICB0aGUgZGV2aWNlLgotICAgICAgdmFsdWU6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHRvIHNldCB0byB0aGUgcHJvcGVydHkgb24gdGhlCi0gICAgICAgICAgICAgZGV2aWNlLgotICAgICAgY2hlY2s6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gY2hlY2sgdGhhdCB0aGUgcHJvcGVydHkgd2FzCi0gICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IHNldCBvbiB0aGUgZGV2aWNlLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIGlmIGNoZWNrIGlzIHRydWUgYW5kIHRoZSBwcm9wZXJ0eSB3YXMgbm90IGNvcnJlY3RseQotICAgICAgICBzZXQgb24gdGhlIGRldmljZSAoZS5nLiBiZWNhdXNlIGl0IGlzIG5vdCByb290ZWQpLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICIiIgotICAgIGFzc2VydCBpc2luc3RhbmNlKHByb3BlcnR5X25hbWUsIGJhc2VzdHJpbmcpLCAoCi0gICAgICAgICJwcm9wZXJ0eV9uYW1lIGlzIG5vdCBhIHN0cmluZzogJXIiICUgcHJvcGVydHlfbmFtZSkKLSAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyksICJ2YWx1ZSBpcyBub3QgYSBzdHJpbmc6ICVyIiAlIHZhbHVlCi0KLSAgICBzZWxmLlJ1blNoZWxsQ29tbWFuZChbJ3NldHByb3AnLCBwcm9wZXJ0eV9uYW1lLCB2YWx1ZV0sIGNoZWNrX3JldHVybj1UcnVlKQotICAgIHByb3BfY2FjaGUgPSBzZWxmLl9jYWNoZVsnZ2V0cHJvcCddCi0gICAgaWYgcHJvcGVydHlfbmFtZSBpbiBwcm9wX2NhY2hlOgotICAgICAgZGVsIHByb3BfY2FjaGVbcHJvcGVydHlfbmFtZV0KLSAgICAjIFRPRE8ocGVyZXpqdSkgcmVtb3ZlIHRoZSBvcHRpb24gYW5kIG1ha2UgdGhlIGNoZWNrIG1hbmRhdG9yeSwgYnV0IHVzaW5nIGEKLSAgICAjIHNpbmdsZSBzaGVsbCBzY3JpcHQgdG8gYm90aCBzZXQtIGFuZCBnZXRwcm9wLgotICAgIGlmIGNoZWNrIGFuZCB2YWx1ZSAhPSBzZWxmLkdldFByb3AocHJvcGVydHlfbmFtZSwgY2FjaGU9RmFsc2UpOgotICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IoCi0gICAgICAgICAgJ1VuYWJsZSB0byBzZXQgcHJvcGVydHkgJXIgb24gdGhlIGRldmljZSB0byAlcicKLSAgICAgICAgICAlIChwcm9wZXJ0eV9uYW1lLCB2YWx1ZSksIHN0cihzZWxmKSkKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgR2V0QUJJKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJHZXRzIHRoZSBkZXZpY2UgbWFpbiBBQkkuCi0KLSAgICBBcmdzOgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBkZXZpY2UncyBtYWluIEFCSSBuYW1lLgotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICIiIgotICAgIHJldHVybiBzZWxmLkdldFByb3AoJ3JvLnByb2R1Y3QuY3B1LmFiaScsIGNhY2hlPVRydWUpCi0KLSAgZGVmIF9HZXRQc091dHB1dChzZWxmLCBwYXR0ZXJuKToKLSAgICAiIiJSdW5zIHxwc3wgY29tbWFuZCBvbiB0aGUgZGV2aWNlIGFuZCByZXR1cm5zIGl0cyBvdXRwdXQsCi0KLSAgICBUaGlzIHByaXZhdGUgbWV0aG9kIGFic3RyYWN0cyBhd2F5IGRpZmZlcmVuY2VzIGJldHdlZW4gQW5kcm9pZCB2ZXJpb25zIGZvcgotICAgIGNhbGxpbmcgfHBzfCwgYW5kIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgZmlsdGVyaW5nIHRoZSBvdXRwdXQgYnkgYSBnaXZlbgotICAgIHxwYXR0ZXJufCwgYnV0IGRvZXMgbm90IGRvIGFueSBvdXRwdXQgcGFyc2luZy4KLSAgICAiIiIKLSAgICB0cnk6Ci0gICAgICBwc19jbWQgPSAncHMnCi0gICAgICAjIHBzIGJlaGF2aW9yIHdhcyBjaGFuZ2VkIGluIEFuZHJvaWQgYWJvdmUgTiwgaHR0cDovL2NyYnVnLmNvbS82ODY3MTYKLSAgICAgIGlmIChzZWxmLmJ1aWxkX3ZlcnNpb25fc2RrID49IHZlcnNpb25fY29kZXMuTk9VR0FUX01SMQotICAgICAgICAgIGFuZCBzZWxmLmJ1aWxkX2lkWzBdID4gJ04nKToKLSAgICAgICAgcHNfY21kID0gJ3BzIC1lJwotICAgICAgaWYgcGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNlbGYuX1J1blBpcGVkU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgJyVzIHwgZ3JlcCAtRiAlcycgJSAocHNfY21kLCBjbWRfaGVscGVyLlNpbmdsZVF1b3RlKHBhdHRlcm4pKSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBzZWxmLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIHBzX2NtZC5zcGxpdCgpLCBjaGVja19yZXR1cm49VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUpCi0gICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3IgYXMgZToKLSAgICAgIGlmIGUuc3RhdHVzIGFuZCBpc2luc3RhbmNlKGUuc3RhdHVzLCBsaXN0KSBhbmQgbm90IGUuc3RhdHVzWzBdOgotICAgICAgICAjIElmIHBzIHN1Y2NlZWRlZCBidXQgZ3JlcCBmYWlsZWQsIHRoZXJlIHdlcmUgbm8gcHJvY2Vzc2VzIHdpdGggdGhlCi0gICAgICAgICMgZ2l2ZW4gbmFtZS4KLSAgICAgICAgcmV0dXJuIFtdCi0gICAgICBlbHNlOgotICAgICAgICByYWlzZQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBMaXN0UHJvY2Vzc2VzKHNlbGYsIHByb2Nlc3NfbmFtZT1Ob25lLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiUmV0dXJucyBhIGxpc3Qgb2YgdHVwbGVzIHdpdGggaW5mbyBhYm91dCBwcm9jZXNzZXMgb24gdGhlIGRldmljZS4KLQotICAgIFRoaXMgZXNzZW50aWFsbHkgcGFyc2VzIHRoZSBvdXRwdXQgb2YgdGhlIHxwc3wgY29tbWFuZCBpbnRvIGNvbnZlbmllbnQKLSAgICBQcm9jZXNzSW5mbyB0dXBsZXMuCi0KLSAgICBBcmdzOgotICAgICAgcHJvY2Vzc19uYW1lOiBBIHN0cmluZyB1c2VkIHRvIGZpbHRlciB0aGUgcmV0dXJuZWQgcHJvY2Vzc2VzLiBJZiBnaXZlbiwKLSAgICAgICAgICAgICAgICAgICAgb25seSBwcm9jZXNzZXMgd2hvc2UgbmFtZSBoYXZlIHRoaXMgdmFsdWUgYXMgYSBzdWJzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSByZXR1cm5lZC4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBBIGxpc3Qgb2YgUHJvY2Vzc0luZm8gdHVwbGVzIHdpdGggfG5hbWV8LCB8cGlkfCwgYW5kIHxwcGlkfCBmaWVsZHMuCi0gICAgIiIiCi0gICAgcHJvY2Vzc19uYW1lID0gcHJvY2Vzc19uYW1lIG9yICcnCi0gICAgcHJvY2Vzc2VzID0gW10KLSAgICBmb3IgbGluZSBpbiBzZWxmLl9HZXRQc091dHB1dChwcm9jZXNzX25hbWUpOgotICAgICAgcm93ID0gbGluZS5zcGxpdCgpCi0gICAgICB0cnk6Ci0gICAgICAgIHJvdyA9IHtrOiByb3dbaV0gZm9yIGssIGkgaW4gX1BTX0NPTFVNTlMuaXRlcml0ZW1zKCl9Ci0gICAgICAgIGlmIHJvd1sncGlkJ10gPT0gJ1BJRCcgb3IgcHJvY2Vzc19uYW1lIG5vdCBpbiByb3dbJ25hbWUnXToKLSAgICAgICAgICAjIFNraXAgb3ZlciBoZWFkZXIgYW5kIG5vbi1tYXRjaGluZyBwcm9jZXNzZXMuCi0gICAgICAgICAgY29udGludWUKLSAgICAgICAgcm93WydwaWQnXSA9IGludChyb3dbJ3BpZCddKQotICAgICAgICByb3dbJ3BwaWQnXSA9IGludChyb3dbJ3BwaWQnXSkKLSAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yOiAgIyBlLmcuIEluZGV4RXJyb3IsIFR5cGVFcnJvciwgVmFsdWVFcnJvci4KLSAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdmYWlsZWQgdG8gcGFyc2UgcHMgbGluZTogJXInLCBsaW5lKQotICAgICAgICBjb250aW51ZQotICAgICAgcHJvY2Vzc2VzLmFwcGVuZChQcm9jZXNzSW5mbygqKnJvdykpCi0gICAgcmV0dXJuIHByb2Nlc3NlcwotCi0gICMgVE9ETygjNDEwMyk6IFJlbW92ZSBhZnRlciBtaWdyYXRpbmcgY2xpZW50cyB0byBMaXN0UHJvY2Vzc2VzLgotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgR2V0UGlkcyhzZWxmLCBwcm9jZXNzX25hbWU9Tm9uZSwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIlJldHVybnMgdGhlIFBJRHMgb2YgcHJvY2Vzc2VzIGNvbnRhaW5pbmcgdGhlIGdpdmVuIG5hbWUgYXMgc3Vic3RyaW5nLgotCi0gICAgREVQUkVDQVRFRAotCi0gICAgTm90ZSB0aGF0IHRoZSB8cHJvY2Vzc19uYW1lfCBpcyBvZnRlbiB0aGUgcGFja2FnZSBuYW1lLgotCi0gICAgQXJnczoKLSAgICAgIHByb2Nlc3NfbmFtZTogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgcHJvY2VzcyBuYW1lIHRvIGdldCB0aGUgUElEcyBmb3IuCi0gICAgICAgICAgICAgICAgICAgIElmIG1pc3NpbmcgcmV0dXJucyBQSURzIGZvciBhbGwgcHJvY2Vzc2VzLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgZGljdCBtYXBwaW5nIHByb2Nlc3MgbmFtZSB0byBhIGxpc3Qgb2YgUElEcyBmb3IgZWFjaCBwcm9jZXNzIHRoYXQKLSAgICAgIGNvbnRhaW5lZCB0aGUgcHJvdmlkZWQgfHByb2Nlc3NfbmFtZXwuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotICAgICIiIgotICAgIHByb2NzX3BpZHMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KQotICAgIGZvciBwIGluIHNlbGYuTGlzdFByb2Nlc3Nlcyhwcm9jZXNzX25hbWUpOgotICAgICAgcHJvY3NfcGlkc1twLm5hbWVdLmFwcGVuZChzdHIocC5waWQpKQotICAgIHJldHVybiBwcm9jc19waWRzCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIEdldEFwcGxpY2F0aW9uUGlkcyhzZWxmLCBwcm9jZXNzX25hbWUsIGF0X21vc3Rfb25lPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJSZXR1cm5zIHRoZSBQSUQgb3IgUElEcyBvZiBhIGdpdmVuIHByb2Nlc3MgbmFtZS4KLQotICAgIE5vdGUgdGhhdCB0aGUgfHByb2Nlc3NfbmFtZXwsIG9mdGVuIHRoZSBwYWNrYWdlIG5hbWUsIG11c3QgbWF0Y2ggZXhhY3RseS4KLQotICAgIEFyZ3M6Ci0gICAgICBwcm9jZXNzX25hbWU6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3MgbmFtZSB0byBnZXQgdGhlIFBJRHMgZm9yLgotICAgICAgYXRfbW9zdF9vbmU6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgYXQgbW9zdCBvbmUgUElEIGlzIGV4cGVjdGVkIHRvCi0gICAgICAgICAgICAgICAgICAgYmUgZm91bmQuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBsaXN0IG9mIHRoZSBQSURzIGZvciB0aGUgbmFtZWQgcHJvY2Vzcy4gSWYgYXRfbW9zdF9vbmU9VHJ1ZSByZXR1cm5zCi0gICAgICB0aGUgc2luZ2xlIFBJRCBmb3VuZCBvciBOb25lIG90aGVyd2lzZS4KLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiBhdF9tb3N0X29uZT1UcnVlIGFuZCBtb3JlIHRoYW4gb25lIFBJRCBpcyBmb3VuZAotICAgICAgICAgIGZvciB0aGUgbmFtZWQgcHJvY2Vzcy4KLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi0gICAgIiIiCi0gICAgcGlkcyA9IFtwLnBpZCBmb3IgcCBpbiBzZWxmLkxpc3RQcm9jZXNzZXMocHJvY2Vzc19uYW1lKQotICAgICAgICAgICAgaWYgcC5uYW1lID09IHByb2Nlc3NfbmFtZV0KLSAgICBpZiBhdF9tb3N0X29uZToKLSAgICAgIGlmIGxlbihwaWRzKSA+IDE6Ci0gICAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc2luZ2xlIFBJRCBmb3IgJXIgYnV0IGZvdW5kOiAlci4nICUgKAotICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZSwgcGlkcyksCi0gICAgICAgICAgICBkZXZpY2Vfc2VyaWFsPXN0cihzZWxmKSkKLSAgICAgIHJldHVybiBwaWRzWzBdIGlmIHBpZHMgZWxzZSBOb25lCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBwaWRzCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIEdldEVuZm9yY2Uoc2VsZiwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIkdldCB0aGUgY3VycmVudCBtb2RlIG9mIFNFTGludXguCi0KLSAgICBBcmdzOgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIFRydWUgKGVuZm9yY2luZyksIEZhbHNlIChwZXJtaXNzaXZlKSwgb3IgTm9uZSAoZGlzYWJsZWQpLgotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIG9uIGZhaWx1cmUuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotICAgICIiIgotICAgIG91dHB1dCA9IHNlbGYuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBbJ2dldGVuZm9yY2UnXSwgY2hlY2tfcmV0dXJuPVRydWUsIHNpbmdsZV9saW5lPVRydWUpLmxvd2VyKCkKLSAgICBpZiBvdXRwdXQgbm90IGluIF9TRUxJTlVYX01PREU6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICAnVW5leHBlY3RlZCBnZXRlbmZvcmNlIG91dHB1dDogJXMnICUgb3V0cHV0KQotICAgIHJldHVybiBfU0VMSU5VWF9NT0RFW291dHB1dF0KLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgU2V0RW5mb3JjZShzZWxmLCBlbmFibGVkLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiTW9kaWZ5IHRoZSBtb2RlIFNFTGludXggaXMgcnVubmluZyBpbi4KLQotICAgIEFyZ3M6Ci0gICAgICBlbmFibGVkOiBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIHB1dCBTRUxpbnV4IGluIGVuY29yY2luZyBtb2RlCi0gICAgICAgICAgICAgICAoaWYgVHJ1ZSksIG9yIHBlcm1pc3NpdmUgbW9kZSAob3RoZXJ3aXNlKS4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBvbiBmYWlsdXJlLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLSAgICAiIiIKLSAgICBzZWxmLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgWydzZXRlbmZvcmNlJywgJzEnIGlmIGludChlbmFibGVkKSBlbHNlICcwJ10sIGFzX3Jvb3Q9VHJ1ZSwKLSAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUpCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIFRha2VTY3JlZW5zaG90KHNlbGYsIGhvc3RfcGF0aD1Ob25lLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiVGFrZXMgYSBzY3JlZW5zaG90IG9mIHRoZSBkZXZpY2UuCi0KLSAgICBBcmdzOgotICAgICAgaG9zdF9wYXRoOiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIG9uIHRoZSBob3N0IHRvIHNhdmUgdGhlCi0gICAgICAgICAgICAgICAgIHNjcmVlbnNob3QgdG8uIElmIE5vbmUsIGEgZmlsZSBuYW1lIGluIHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB3aWxsIGJlIGdlbmVyYXRlZC4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgbmFtZSBvZiB0aGUgZmlsZSBvbiB0aGUgaG9zdCB0byB3aGljaCB0aGUgc2NyZWVuc2hvdCB3YXMgc2F2ZWQuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kRmFpbGVkRXJyb3Igb24gZmFpbHVyZS4KLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi0gICAgIiIiCi0gICAgaWYgbm90IGhvc3RfcGF0aDoKLSAgICAgIGhvc3RfcGF0aCA9IG9zLnBhdGguYWJzcGF0aCgnc2NyZWVuc2hvdC0lcy0lcy5wbmcnICUgKAotICAgICAgICAgIHNlbGYuc2VyaWFsLCBfR2V0VGltZVN0YW1wKCkpKQotICAgIHdpdGggZGV2aWNlX3RlbXBfZmlsZS5EZXZpY2VUZW1wRmlsZShzZWxmLmFkYiwgc3VmZml4PScucG5nJykgYXMgZGV2aWNlX3RtcDoKLSAgICAgIHNlbGYuUnVuU2hlbGxDb21tYW5kKFsnL3N5c3RlbS9iaW4vc2NyZWVuY2FwJywgJy1wJywgZGV2aWNlX3RtcC5uYW1lXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3JldHVybj1UcnVlKQotICAgICAgc2VsZi5QdWxsRmlsZShkZXZpY2VfdG1wLm5hbWUsIGhvc3RfcGF0aCkKLSAgICByZXR1cm4gaG9zdF9wYXRoCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIERpc21pc3NDcmFzaERpYWxvZ0lmTmVlZGVkKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJEaXNtaXNzIHRoZSBlcnJvci9BTlIgZGlhbG9nIGlmIHByZXNlbnQuCi0KLSAgICBSZXR1cm5zOiBOYW1lIG9mIHRoZSBjcmFzaGVkIHBhY2thZ2UgaWYgYSBkaWFsb2cgaXMgZm9jdXNlZCwKLSAgICAgICAgICAgICBOb25lIG90aGVyd2lzZS4KLSAgICAiIiIKLSAgICBkZWYgX0ZpbmRGb2N1c2VkV2luZG93KCk6Ci0gICAgICBtYXRjaCA9IE5vbmUKLSAgICAgICMgVE9ETyhqYnVkb3JpY2spOiBUcnkgdG8gZ3JlcCB0aGUgb3V0cHV0IG9uIHRoZSBkZXZpY2UgaW5zdGVhZCBvZiB1c2luZwotICAgICAgIyBsYXJnZV9vdXRwdXQgaWYvd2hlbiBEZXZpY2VVdGlscyBleHBvc2VzIGEgcHVibGljIGludGVyZmFjZSBmb3IgcGlwZWQKLSAgICAgICMgc2hlbGwgY29tbWFuZCBoYW5kbGluZy4KLSAgICAgIGZvciBsaW5lIGluIHNlbGYuUnVuU2hlbGxDb21tYW5kKFsnZHVtcHN5cycsICd3aW5kb3cnLCAnd2luZG93cyddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUsIGxhcmdlX291dHB1dD1UcnVlKToKLSAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChfQ1VSUkVOVF9GT0NVU19DUkFTSF9SRSwgbGluZSkKLSAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgYnJlYWsKLSAgICAgIHJldHVybiBtYXRjaAotCi0gICAgbWF0Y2ggPSBfRmluZEZvY3VzZWRXaW5kb3coKQotICAgIGlmIG5vdCBtYXRjaDoKLSAgICAgIHJldHVybiBOb25lCi0gICAgcGFja2FnZSA9IG1hdGNoLmdyb3VwKDIpCi0gICAgbG9nZ2VyLndhcm5pbmcoJ1RyeWluZyB0byBkaXNtaXNzICVzIGRpYWxvZyBmb3IgJXMnLCAqbWF0Y2guZ3JvdXBzKCkpCi0gICAgc2VsZi5TZW5kS2V5RXZlbnQoa2V5ZXZlbnQuS0VZQ09ERV9EUEFEX1JJR0hUKQotICAgIHNlbGYuU2VuZEtleUV2ZW50KGtleWV2ZW50LktFWUNPREVfRFBBRF9SSUdIVCkKLSAgICBzZWxmLlNlbmRLZXlFdmVudChrZXlldmVudC5LRVlDT0RFX0VOVEVSKQotICAgIG1hdGNoID0gX0ZpbmRGb2N1c2VkV2luZG93KCkKLSAgICBpZiBtYXRjaDoKLSAgICAgIGxvZ2dlci5lcnJvcignU3RpbGwgc2hvd2luZyBhICVzIGRpYWxvZyBmb3IgJXMnLCAqbWF0Y2guZ3JvdXBzKCkpCi0gICAgcmV0dXJuIHBhY2thZ2UKLQotICBkZWYgR2V0TG9nY2F0TW9uaXRvcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICIiIlJldHVybnMgYSBuZXcgTG9nY2F0TW9uaXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCi0KLSAgICBQYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8KLSAgICB8bG9nY2F0X21vbml0b3IuTG9nY2F0TW9uaXRvcnwgYW5kIGFyZSBkb2N1bWVudGVkIHRoZXJlLgotICAgICIiIgotICAgIHJldHVybiBsb2djYXRfbW9uaXRvci5Mb2djYXRNb25pdG9yKHNlbGYuYWRiLCAqYXJncywgKiprd2FyZ3MpCi0KLSAgZGVmIEdldENsaWVudENhY2hlKHNlbGYsIGNsaWVudF9uYW1lKToKLSAgICAiIiJSZXR1cm5zIGNsaWVudCBjYWNoZS4iIiIKLSAgICBpZiBjbGllbnRfbmFtZSBub3QgaW4gc2VsZi5fY2xpZW50X2NhY2hlczoKLSAgICAgIHNlbGYuX2NsaWVudF9jYWNoZXNbY2xpZW50X25hbWVdID0ge30KLSAgICByZXR1cm4gc2VsZi5fY2xpZW50X2NhY2hlc1tjbGllbnRfbmFtZV0KLQotICBkZWYgX0NsZWFyQ2FjaGUoc2VsZik6Ci0gICAgIiIiQ2xlYXJzIGFsbCBjYWNoZXMuIiIiCi0gICAgZm9yIGNsaWVudCBpbiBzZWxmLl9jbGllbnRfY2FjaGVzOgotICAgICAgc2VsZi5fY2xpZW50X2NhY2hlc1tjbGllbnRdLmNsZWFyKCkKLSAgICBzZWxmLl9jYWNoZSA9IHsKLSAgICAgICAgIyBNYXAgb2YgcGFja2FnZUlkIC0+IGxpc3Qgb2Ygb24tZGV2aWNlIC5hcGsgcGF0aHMKLSAgICAgICAgJ3BhY2thZ2VfYXBrX3BhdGhzJzoge30sCi0gICAgICAgICMgU2V0IG9mIHBhY2thZ2VJZCB0aGF0IHdlcmUgbG9hZGVkIGZyb20gTG9hZENhY2hlRGF0YSBhbmQgbm90IHlldAotICAgICAgICAjIHZlcmlmaWVkLgotICAgICAgICAncGFja2FnZV9hcGtfcGF0aHNfdG9fdmVyaWZ5Jzogc2V0KCksCi0gICAgICAgICMgTWFwIG9mIHBhY2thZ2VJZCAtPiBzZXQgb2Ygb24tZGV2aWNlIC5hcGsgY2hlY2tzdW1zCi0gICAgICAgICdwYWNrYWdlX2Fwa19jaGVja3N1bXMnOiB7fSwKLSAgICAgICAgIyBNYXAgb2YgcHJvcGVydHlfbmFtZSAtPiB2YWx1ZQotICAgICAgICAnZ2V0cHJvcCc6IHt9LAotICAgICAgICAjIE1hcCBvZiBkZXZpY2VfcGF0aCAtPiBbaWdub3JlX290aGVyX2ZpbGVzLCBtYXAgb2YgcGF0aC0+Y2hlY2tzdW1dCi0gICAgICAgICdkZXZpY2VfcGF0aF9jaGVja3N1bXMnOiB7fSwKLSAgICAgICAgIyBMb2NhdGlvbiBvZiBzZGNhcmQgKCRFWFRFUk5BTF9TVE9SQUdFKS4KLSAgICAgICAgJ2V4dGVybmFsX3N0b3JhZ2UnOiBOb25lLAotICAgICAgICAjIFRva2VuIHVzZWQgdG8gZGV0ZWN0IHdoZW4gTG9hZENhY2hlRGF0YSBpcyBzdGFsZS4KLSAgICAgICAgJ3Rva2VuJzogTm9uZSwKLSAgICAgICAgJ3ByZXZfdG9rZW4nOiBOb25lLAotICAgIH0KLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgTG9hZENhY2hlRGF0YShzZWxmLCBkYXRhLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiSW5pdGlhbGl6ZXMgdGhlIGNhY2hlIGZyb20gZGF0YSBjcmVhdGVkIHVzaW5nIER1bXBDYWNoZURhdGEuCi0KLSAgICBUaGUgY2FjaGUgaXMgdXNlZCBvbmx5IGlmIGl0cyB0b2tlbiBtYXRjaGVzIHRoZSBvbmUgZm91bmQgb24gdGhlIGRldmljZS4KLSAgICBUaGlzIHByZXZlbnRzIGEgc3RhbGUgY2FjaGUgZnJvbSBiZWluZyB1c2VkICh3aGljaCBjYW4gaGFwcGVuIHdoZW4gc2hhcmluZwotICAgIGRldmljZXMpLgotCi0gICAgQXJnczoKLSAgICAgIGRhdGE6IEEgcHJldmlvdXNseSBzZXJpYWxpemVkIGNhY2hlIChzdHJpbmcpLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIFdoZXRoZXIgdGhlIGNhY2hlIHdhcyBsb2FkZWQuCi0gICAgIiIiCi0gICAgb2JqID0ganNvbi5sb2FkcyhkYXRhKQotICAgIHNlbGYuX0Vuc3VyZUNhY2hlSW5pdGlhbGl6ZWQoKQotICAgIGdpdmVuX3Rva2VuID0gb2JqLmdldCgndG9rZW4nKQotICAgIGlmIG5vdCBnaXZlbl90b2tlbiBvciBzZWxmLl9jYWNoZVsncHJldl90b2tlbiddICE9IGdpdmVuX3Rva2VuOgotICAgICAgbG9nZ2VyLndhcm5pbmcoJ1N0YWxlIGNhY2hlIGRldGVjdGVkLiBOb3QgdXNpbmcgaXQuJykKLSAgICAgIHJldHVybiBGYWxzZQotCi0gICAgc2VsZi5fY2FjaGVbJ3BhY2thZ2VfYXBrX3BhdGhzJ10gPSBvYmouZ2V0KCdwYWNrYWdlX2Fwa19wYXRocycsIHt9KQotICAgICMgV2hlbiB1c2luZyBhIGNhY2hlIGFjcm9zcyBzY3JpcHQgaW52b2thdGlvbnMsIHZlcmlmeSB0aGF0IGFwcHMgaGF2ZQotICAgICMgbm90IGJlZW4gdW5pbnN0YWxsZWQuCi0gICAgc2VsZi5fY2FjaGVbJ3BhY2thZ2VfYXBrX3BhdGhzX3RvX3ZlcmlmeSddID0gc2V0KAotICAgICAgICBzZWxmLl9jYWNoZVsncGFja2FnZV9hcGtfcGF0aHMnXS5pdGVya2V5cygpKQotCi0gICAgcGFja2FnZV9hcGtfY2hlY2tzdW1zID0gb2JqLmdldCgncGFja2FnZV9hcGtfY2hlY2tzdW1zJywge30pCi0gICAgZm9yIGssIHYgaW4gcGFja2FnZV9hcGtfY2hlY2tzdW1zLml0ZXJpdGVtcygpOgotICAgICAgcGFja2FnZV9hcGtfY2hlY2tzdW1zW2tdID0gc2V0KHYpCi0gICAgc2VsZi5fY2FjaGVbJ3BhY2thZ2VfYXBrX2NoZWNrc3VtcyddID0gcGFja2FnZV9hcGtfY2hlY2tzdW1zCi0gICAgZGV2aWNlX3BhdGhfY2hlY2tzdW1zID0gb2JqLmdldCgnZGV2aWNlX3BhdGhfY2hlY2tzdW1zJywge30pCi0gICAgc2VsZi5fY2FjaGVbJ2RldmljZV9wYXRoX2NoZWNrc3VtcyddID0gZGV2aWNlX3BhdGhfY2hlY2tzdW1zCi0gICAgcmV0dXJuIFRydWUKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgRHVtcENhY2hlRGF0YShzZWxmLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiRHVtcHMgdGhlIGN1cnJlbnQgY2FjaGUgc3RhdGUgdG8gYSBzdHJpbmcuCi0KLSAgICBBcmdzOgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgc2VyaWFsaXplZCBjYWNoZSBhcyBhIHN0cmluZy4KLSAgICAiIiIKLSAgICBzZWxmLl9FbnN1cmVDYWNoZUluaXRpYWxpemVkKCkKLSAgICBvYmogPSB7fQotICAgIG9ialsndG9rZW4nXSA9IHNlbGYuX2NhY2hlWyd0b2tlbiddCi0gICAgb2JqWydwYWNrYWdlX2Fwa19wYXRocyddID0gc2VsZi5fY2FjaGVbJ3BhY2thZ2VfYXBrX3BhdGhzJ10KLSAgICBvYmpbJ3BhY2thZ2VfYXBrX2NoZWNrc3VtcyddID0gc2VsZi5fY2FjaGVbJ3BhY2thZ2VfYXBrX2NoZWNrc3VtcyddCi0gICAgIyBKU09OIGNhbid0IGhhbmRsZSBzZXRzLgotICAgIGZvciBrLCB2IGluIG9ialsncGFja2FnZV9hcGtfY2hlY2tzdW1zJ10uaXRlcml0ZW1zKCk6Ci0gICAgICBvYmpbJ3BhY2thZ2VfYXBrX2NoZWNrc3VtcyddW2tdID0gbGlzdCh2KQotICAgIG9ialsnZGV2aWNlX3BhdGhfY2hlY2tzdW1zJ10gPSBzZWxmLl9jYWNoZVsnZGV2aWNlX3BhdGhfY2hlY2tzdW1zJ10KLSAgICByZXR1cm4ganNvbi5kdW1wcyhvYmosIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKLQotICBAY2xhc3NtZXRob2QKLSAgZGVmIHBhcmFsbGVsKGNscywgZGV2aWNlcywgYXN5bmM9RmFsc2UpOgotICAgICIiIkNyZWF0ZXMgYSBQYXJhbGxlbGl6ZXIgdG8gb3BlcmF0ZSBvdmVyIHRoZSBwcm92aWRlZCBsaXN0IG9mIGRldmljZXMuCi0KLSAgICBBcmdzOgotICAgICAgZGV2aWNlczogQSBsaXN0IG9mIGVpdGhlciBEZXZpY2VVdGlscyBpbnN0YW5jZXMgb3Igb2JqZWN0cyBmcm9tCi0gICAgICAgICAgICAgICBmcm9tIHdoaWNoIERldmljZVV0aWxzIGluc3RhbmNlcyBjYW4gYmUgY29uc3RydWN0ZWQuIElmIE5vbmUsCi0gICAgICAgICAgICAgICBhbGwgYXR0YWNoZWQgZGV2aWNlcyB3aWxsIGJlIHVzZWQuCi0gICAgICBhc3luYzogSWYgdHJ1ZSwgcmV0dXJucyBhIFBhcmFsbGVsaXplciB0aGF0IHJ1bnMgb3BlcmF0aW9ucwotICAgICAgICAgICAgIGFzeW5jaHJvbm91c2x5LgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgUGFyYWxsZWxpemVyIG9wZXJhdGluZyBvdmVyIHxkZXZpY2VzfC4KLSAgICAiIiIKLSAgICBkZXZpY2VzID0gW2QgaWYgaXNpbnN0YW5jZShkLCBjbHMpIGVsc2UgY2xzKGQpIGZvciBkIGluIGRldmljZXNdCi0gICAgaWYgYXN5bmM6Ci0gICAgICByZXR1cm4gcGFyYWxsZWxpemVyLlBhcmFsbGVsaXplcihkZXZpY2VzKQotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gcGFyYWxsZWxpemVyLlN5bmNQYXJhbGxlbGl6ZXIoZGV2aWNlcykKLQotICBAY2xhc3NtZXRob2QKLSAgZGVmIEhlYWx0aHlEZXZpY2VzKGNscywgYmxhY2tsaXN0PU5vbmUsIGRldmljZV9hcmc9J2RlZmF1bHQnLCByZXRyeT1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgotICAgICIiIlJldHVybnMgYSBsaXN0IG9mIERldmljZVV0aWxzIGluc3RhbmNlcy4KLQotICAgIFJldHVybnMgYSBsaXN0IG9mIERldmljZVV0aWxzIGluc3RhbmNlcyB0aGF0IGFyZSBhdHRhY2hlZCwgbm90IGJsYWNrbGlzdGVkLAotICAgIGFuZCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IC0tZGV2aWNlIGZsYWdzIG9yIEFORFJPSURfU0VSSUFMIGVudmlyb25tZW50Ci0gICAgdmFyaWFibGUuCi0KLSAgICBBcmdzOgotICAgICAgYmxhY2tsaXN0OiBBIERldmljZUJsYWNrbGlzdCBpbnN0YW5jZSAob3B0aW9uYWwpLiBEZXZpY2Ugc2VyaWFscyBpbiB0aGlzCi0gICAgICAgICAgYmxhY2tsaXN0IHdpbGwgbmV2ZXIgYmUgcmV0dXJuZWQsIGJ1dCBhIHdhcm5pbmcgd2lsbCBiZSBsb2dnZWQgaWYgdGhleQotICAgICAgICAgIG90aGVyd2lzZSB3b3VsZCBoYXZlIGJlZW4uCi0gICAgICBkZXZpY2VfYXJnOiBUaGUgdmFsdWUgb2YgdGhlIC0tZGV2aWNlIGZsYWcuIFRoaXMgY2FuIGJlOgotICAgICAgICAgICdkZWZhdWx0JyAtPiBTYW1lIGFzIFtdLCBidXQgcmV0dXJucyBhbiBlbXB0eSBsaXN0IHJhdGhlciB0aGFuIHJhaXNlIGEKLSAgICAgICAgICAgICAgTm9EZXZpY2VzRXJyb3IuCi0gICAgICAgICAgW10gLT4gUmV0dXJucyBhbGwgZGV2aWNlcywgdW5sZXNzICRBTkRST0lEX1NFUklBTCBpcyBzZXQuCi0gICAgICAgICAgTm9uZSAtPiBVc2UgJEFORFJPSURfU0VSSUFMIGlmIHNldCwgb3RoZXJ3aXNlIGxvb2tzIGZvciBhIHNpbmdsZQotICAgICAgICAgICAgICBhdHRhY2hlZCBkZXZpY2UuIFJhaXNlcyBhbiBleGNlcHRpb24gaWYgbXVsdGlwbGUgZGV2aWNlcyBhcmUKLSAgICAgICAgICAgICAgYXR0YWNoZWQuCi0gICAgICAgICAgJ3NlcmlhbCcgLT4gUmV0dXJucyBhbiBpbnN0YW5jZSBmb3IgdGhlIGdpdmVuIHNlcmlhbCwgaWYgbm90Ci0gICAgICAgICAgICAgIGJsYWNrbGlzdGVkLgotICAgICAgICAgIFsnQScsICdCJywgLi4uXSAtPiBSZXR1cm5zIGluc3RhbmNlcyBmb3IgdGhlIHN1YnNldCB0aGF0IGlzIG5vdAotICAgICAgICAgICAgICBibGFja2xpc3RlZC4KLSAgICAgIHJldHJ5OiBJZiB0cnVlLCB3aWxsIGF0dGVtcHQgdG8gcmVzdGFydCBhZGIgc2VydmVyIGFuZCBxdWVyeSBpdCBhZ2FpbiBpZgotICAgICAgICAgIG5vIGRldmljZXMgYXJlIGZvdW5kLgotICAgICAgQSBkZXZpY2Ugc2VyaWFsLCBvciBhIGxpc3Qgb2YgZGV2aWNlIHNlcmlhbHMgKG9wdGlvbmFsKS4KLQotICAgIFJldHVybnM6Ci0gICAgICBBIGxpc3Qgb2YgRGV2aWNlVXRpbHMgaW5zdGFuY2VzLgotCi0gICAgUmFpc2VzOgotICAgICAgTm9EZXZpY2VzRXJyb3I6IFJhaXNlZCB3aGVuIG5vIG5vbi1ibGFja2xpc3RlZCBkZXZpY2VzIGV4aXN0IGFuZAotICAgICAgICAgIGRldmljZV9hcmcgaXMgcGFzc2VkLgotICAgICAgTXVsdGlwbGVEZXZpY2VzRXJyb3I6IFJhaXNlIHdoZW4gbXVsdGlwbGUgZGV2aWNlcyBleGlzdCwgYnV0IHxkZXZpY2VfYXJnfAotICAgICAgICAgIGlzIE5vbmUuCi0gICAgIiIiCi0gICAgYWxsb3dfbm9fZGV2aWNlcyA9IEZhbHNlCi0gICAgaWYgZGV2aWNlX2FyZyA9PSAnZGVmYXVsdCc6Ci0gICAgICBhbGxvd19ub19kZXZpY2VzID0gVHJ1ZQotICAgICAgZGV2aWNlX2FyZyA9ICgpCi0KLSAgICBzZWxlY3RfbXVsdGlwbGUgPSBUcnVlCi0gICAgaWYgbm90IChpc2luc3RhbmNlKGRldmljZV9hcmcsIHR1cGxlKSBvciBpc2luc3RhbmNlKGRldmljZV9hcmcsIGxpc3QpKToKLSAgICAgIHNlbGVjdF9tdWx0aXBsZSA9IEZhbHNlCi0gICAgICBpZiBkZXZpY2VfYXJnOgotICAgICAgICBkZXZpY2VfYXJnID0gKGRldmljZV9hcmcsKQotCi0gICAgYmxhY2tsaXN0ZWRfZGV2aWNlcyA9IGJsYWNrbGlzdC5SZWFkKCkgaWYgYmxhY2tsaXN0IGVsc2UgW10KLQotICAgICMgYWRiIGxvb2tzIGZvciBBTkRST0lEX1NFUklBTCwgc28gc3VwcG9ydCBpdCBhcyB3ZWxsLgotICAgIGFuZHJvaWRfc2VyaWFsID0gb3MuZW52aXJvbi5nZXQoJ0FORFJPSURfU0VSSUFMJykKLSAgICBpZiBub3QgZGV2aWNlX2FyZyBhbmQgYW5kcm9pZF9zZXJpYWw6Ci0gICAgICBkZXZpY2VfYXJnID0gKGFuZHJvaWRfc2VyaWFsLCkKLQotICAgIGRlZiBibGFja2xpc3RlZChzZXJpYWwpOgotICAgICAgaWYgc2VyaWFsIGluIGJsYWNrbGlzdGVkX2RldmljZXM6Ci0gICAgICAgIGxvZ2dlci53YXJuaW5nKCdEZXZpY2UgJXMgaXMgYmxhY2tsaXN0ZWQuJywgc2VyaWFsKQotICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgX2dldF9kZXZpY2VzKCk6Ci0gICAgICBpZiBkZXZpY2VfYXJnOgotICAgICAgICBkZXZpY2VzID0gW2Nscyh4LCAqKmt3YXJncykgZm9yIHggaW4gZGV2aWNlX2FyZyBpZiBub3QgYmxhY2tsaXN0ZWQoeCldCi0gICAgICBlbHNlOgotICAgICAgICBkZXZpY2VzID0gW10KLSAgICAgICAgZm9yIGFkYiBpbiBhZGJfd3JhcHBlci5BZGJXcmFwcGVyLkRldmljZXMoKToKLSAgICAgICAgICBpZiBub3QgYmxhY2tsaXN0ZWQoYWRiLkdldERldmljZVNlcmlhbCgpKToKLSAgICAgICAgICAgIGRldmljZXMuYXBwZW5kKGNscyhfQ3JlYXRlQWRiV3JhcHBlcihhZGIpLCAqKmt3YXJncykpCi0KLSAgICAgIGlmIGxlbihkZXZpY2VzKSA9PSAwIGFuZCBub3QgYWxsb3dfbm9fZGV2aWNlczoKLSAgICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Ob0RldmljZXNFcnJvcigpCi0gICAgICBpZiBsZW4oZGV2aWNlcykgPiAxIGFuZCBub3Qgc2VsZWN0X211bHRpcGxlOgotICAgICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLk11bHRpcGxlRGV2aWNlc0Vycm9yKGRldmljZXMpCi0gICAgICByZXR1cm4gc29ydGVkKGRldmljZXMpCi0KLSAgICB0cnk6Ci0gICAgICByZXR1cm4gX2dldF9kZXZpY2VzKCkKLSAgICBleGNlcHQgZGV2aWNlX2Vycm9ycy5Ob0RldmljZXNFcnJvcjoKLSAgICAgIGlmIG5vdCByZXRyeToKLSAgICAgICAgcmFpc2UKLSAgICAgIGxvZ2dlci53YXJuaW5nKAotICAgICAgICAgICdObyBkZXZpY2VzIGZvdW5kLiBXaWxsIHRyeSBhZ2FpbiBhZnRlciByZXN0YXJ0aW5nIGFkYiBzZXJ2ZXIuJykKLSAgICAgIFJlc3RhcnRTZXJ2ZXIoKQotICAgICAgcmV0dXJuIF9nZXRfZGV2aWNlcygpCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRnJvbUluc3RhbmNlKCkKLSAgZGVmIFJlc3RhcnRBZGJkKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICBsb2dnZXIuaW5mbygnUmVzdGFydGluZyBhZGJkIG9uIGRldmljZS4nKQotICAgIHdpdGggZGV2aWNlX3RlbXBfZmlsZS5EZXZpY2VUZW1wRmlsZShzZWxmLmFkYiwgc3VmZml4PScuc2gnKSBhcyBzY3JpcHQ6Ci0gICAgICBzZWxmLldyaXRlRmlsZShzY3JpcHQubmFtZSwgX1JFU1RBUlRfQURCRF9TQ1JJUFQpCi0gICAgICBzZWxmLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICBbJ3NvdXJjZScsIHNjcmlwdC5uYW1lXSwgY2hlY2tfcmV0dXJuPVRydWUsIGFzX3Jvb3Q9VHJ1ZSkKLSAgICAgIHNlbGYuYWRiLldhaXRGb3JEZXZpY2UoKQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBHcmFudFBlcm1pc3Npb25zKHNlbGYsIHBhY2thZ2UsIHBlcm1pc3Npb25zLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIyBQZXJtaXNzaW9ucyBvbmx5IG5lZWQgdG8gYmUgc2V0IG9uIE0gYW5kIGFib3ZlIGJlY2F1c2Ugb2YgdGhlIGNoYW5nZXMgdG8KLSAgICAjIHRoZSBwZXJtaXNzaW9uIG1vZGVsLgotICAgIGlmIG5vdCBwZXJtaXNzaW9ucyBvciBzZWxmLmJ1aWxkX3ZlcnNpb25fc2RrIDwgdmVyc2lvbl9jb2Rlcy5NQVJTSE1BTExPVzoKLSAgICAgIHJldHVybgotCi0gICAgcGVybWlzc2lvbnMgPSBzZXQoCi0gICAgICAgIHAgZm9yIHAgaW4gcGVybWlzc2lvbnMgaWYgbm90IF9QRVJNSVNTSU9OU19CTEFDS0xJU1RfUkUubWF0Y2gocCkpCi0KLSAgICBpZiAoJ2FuZHJvaWQucGVybWlzc2lvbi5XUklURV9FWFRFUk5BTF9TVE9SQUdFJyBpbiBwZXJtaXNzaW9ucwotICAgICAgICBhbmQgJ2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX0VYVEVSTkFMX1NUT1JBR0UnIG5vdCBpbiBwZXJtaXNzaW9ucyk6Ci0gICAgICBwZXJtaXNzaW9ucy5hZGQoJ2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX0VYVEVSTkFMX1NUT1JBR0UnKQotCi0gICAgc2NyaXB0ID0gJzsnLmpvaW4oWwotICAgICAgJ3A9e3BhY2thZ2V9JywKLSAgICAgICdmb3IgcSBpbiB7cGVybWlzc2lvbnN9JywKLSAgICAgICdkbyBwbSBncmFudCAiJHAiICIkcSInLAotICAgICAgJ2VjaG8gIntzZXB9JHF7c2VwfSQ/e3NlcH0iJywKLSAgICAgICdkb25lJwotICAgIF0pLmZvcm1hdCgKLSAgICAgICAgcGFja2FnZT1jbWRfaGVscGVyLlNpbmdsZVF1b3RlKHBhY2thZ2UpLAotICAgICAgICBwZXJtaXNzaW9ucz0nICcuam9pbigKLSAgICAgICAgICAgIGNtZF9oZWxwZXIuU2luZ2xlUXVvdGUocCkgZm9yIHAgaW4gc29ydGVkKHBlcm1pc3Npb25zKSksCi0gICAgICAgIHNlcD1fU0hFTExfT1VUUFVUX1NFUEFSQVRPUikKLQotICAgIGxvZ2dlci5pbmZvKCdTZXR0aW5nIHBlcm1pc3Npb25zIGZvciAlcy4nLCBwYWNrYWdlKQotICAgIHJlcyA9IHNlbGYuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBzY3JpcHQsIHNoZWxsPVRydWUsIHJhd19vdXRwdXQ9VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUsCi0gICAgICAgIGNoZWNrX3JldHVybj1UcnVlKQotICAgIHJlcyA9IHJlcy5zcGxpdChfU0hFTExfT1VUUFVUX1NFUEFSQVRPUikKLSAgICBmYWlsdXJlcyA9IFsKLSAgICAgIChwZXJtaXNzaW9uLCBvdXRwdXQuc3RyaXAoKSkKLSAgICAgIGZvciBwZXJtaXNzaW9uLCBzdGF0dXMsIG91dHB1dCBpbiB6aXAocmVzWzE6OjNdLCByZXNbMjo6M10sIHJlc1swOjozXSkKLSAgICAgIGlmIGludChzdGF0dXMpXQotCi0gICAgaWYgZmFpbHVyZXM6Ci0gICAgICBsb2dnZXIud2FybmluZygKLSAgICAgICAgICAnRmFpbGVkIHRvIGdyYW50IHNvbWUgcGVybWlzc2lvbnMuIEJsYWNrbGlzdCBtYXkgbmVlZCB0byBiZSB1cGRhdGVkPycpCi0gICAgICBmb3IgcGVybWlzc2lvbiwgb3V0cHV0IGluIGZhaWx1cmVzOgotICAgICAgICAjIFRyeSB0byBncmFiIHRoZSByZWxldmFudCBlcnJvciBtZXNzYWdlIGZyb20gdGhlIG91dHB1dC4KLSAgICAgICAgbSA9IF9QRVJNSVNTSU9OU19FWENFUFRJT05fUkUuc2VhcmNoKG91dHB1dCkKLSAgICAgICAgaWYgbToKLSAgICAgICAgICBlcnJvcl9tc2cgPSBtLmdyb3VwKDApCi0gICAgICAgIGVsaWYgbGVuKG91dHB1dCkgPiAyMDA6Ci0gICAgICAgICAgZXJyb3JfbXNnID0gcmVwcihvdXRwdXRbOjIwMF0pICsgJyAodHJ1bmNhdGVkKScKLSAgICAgICAgZWxzZToKLSAgICAgICAgICBlcnJvcl9tc2cgPSByZXByKG91dHB1dCkKLSAgICAgICAgbG9nZ2VyLndhcm5pbmcoJy0gJXM6ICVzJywgcGVybWlzc2lvbiwgZXJyb3JfbXNnKQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBJc1NjcmVlbk9uKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJEZXRlcm1pbmVzIGlmIHNjcmVlbiBpcyBvbi4KLQotICAgIER1bXBzeXMgaW5wdXRfbWV0aG9kIGV4cG9zZXMgc2NyZWVuIG9uL29mZiBzdGF0ZS4gQmVsb3cgaXMgYW4gZXhwbGluYXRpb24gb2YKLSAgICB0aGUgc3RhdGVzLgotCi0gICAgUHJlLUw6Ci0gICAgICBPbjogbVNjcmVlbk9uPXRydWUKLSAgICAgIE9mZjogbVNjcmVlbk9uPWZhbHNlCi0gICAgTCs6Ci0gICAgICBPbjogbUludGVyYWN0aXZlPXRydWUKLSAgICAgIE9mZjogbUludGVyYWN0aXZlPWZhbHNlCi0KLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSBpZiBzY3JlZW4gaXMgb24sIGZhbHNlIGlmIGl0IGlzIG9mZi4KLQotICAgIFJhaXNlczoKLSAgICAgIGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yOiBJZiBzY3JlZW4gc3RhdGUgY2Fubm90IGJlIGZvdW5kLgotICAgICIiIgotICAgIGlmIHNlbGYuYnVpbGRfdmVyc2lvbl9zZGsgPCB2ZXJzaW9uX2NvZGVzLkxPTExJUE9QOgotICAgICAgaW5wdXRfY2hlY2sgPSAnbVNjcmVlbk9uJwotICAgICAgY2hlY2tfdmFsdWUgPSAnbVNjcmVlbk9uPXRydWUnCi0gICAgZWxzZToKLSAgICAgIGlucHV0X2NoZWNrID0gJ21JbnRlcmFjdGl2ZScKLSAgICAgIGNoZWNrX3ZhbHVlID0gJ21JbnRlcmFjdGl2ZT10cnVlJwotICAgIGR1bXBzeXNfb3V0ID0gc2VsZi5fUnVuUGlwZWRTaGVsbENvbW1hbmQoCi0gICAgICAgICdkdW1wc3lzIGlucHV0X21ldGhvZCB8IGdyZXAgJXMnICUgaW5wdXRfY2hlY2spCi0gICAgaWYgbm90IGR1bXBzeXNfb3V0OgotICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IoCi0gICAgICAgICAgJ1VuYWJsZSB0byBkZXRlY3Qgc2NyZWVuIHN0YXRlJywgc3RyKHNlbGYpKQotICAgIHJldHVybiBjaGVja192YWx1ZSBpbiBkdW1wc3lzX291dFswXQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBTZXRTY3JlZW4oc2VsZiwgb24sIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJUdXJucyBzY3JlZW4gb24gYW5kIG9mZi4KLQotICAgIEFyZ3M6Ci0gICAgICBvbjogYm9vbCB0byBkZWNpZGUgc3RhdGUgdG8gc3dpdGNoIHRvLiBUcnVlID0gb24gRmFsc2UgPSBvZmYuCi0gICAgIiIiCi0gICAgZGVmIHNjcmVlbl90ZXN0KCk6Ci0gICAgICByZXR1cm4gc2VsZi5Jc1NjcmVlbk9uKCkgPT0gb24KLQotICAgIGlmIHNjcmVlbl90ZXN0KCk6Ci0gICAgICBsb2dnZXIuaW5mbygnU2NyZWVuIGFscmVhZHkgaW4gZXhwZWN0ZWQgc3RhdGUuJykKLSAgICAgIHJldHVybgotICAgIHNlbGYuU2VuZEtleUV2ZW50KGtleWV2ZW50LktFWUNPREVfUE9XRVIpCi0gICAgdGltZW91dF9yZXRyeS5XYWl0Rm9yKHNjcmVlbl90ZXN0LCB3YWl0X3BlcmlvZD0xKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZXZpY2VfdXRpbHNfZGV2aWNldGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX3V0aWxzX2RldmljZXRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDE3MzA5NGIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9kZXZpY2VfdXRpbHNfZGV2aWNldGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2OCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiCi1Vbml0IHRlc3RzIGZvciB0aGUgY29udGVudHMgb2YgZGV2aWNlX3V0aWxzLnB5IChtb3N0bHkgRGV2aWNlVXRpbHMpLgotVGhlIHRlc3Qgd2lsbCBpbnZva2UgcmVhbCBkZXZpY2VzCi0iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgcG9zaXhwYXRoCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCB1bml0dGVzdAotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMucGF0aC5hcHBlbmQoCi0gICAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICcuLicsICkpKQotCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV90ZXN0X2Nhc2UKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3V0aWxzCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBhZGJfd3JhcHBlcgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgY21kX2hlbHBlcgotCi1fT0xEX0NPTlRFTlRTID0gImZvbyIKLV9ORVdfQ09OVEVOVFMgPSAiYmFyIgotX0RFVklDRV9ESVIgPSAiL2RhdGEvbG9jYWwvdG1wL2RldmljZV91dGlsc190ZXN0IgotX1NVQl9ESVIgPSAic3ViIgotX1NVQl9ESVIxID0gInN1YjEiCi1fU1VCX0RJUjIgPSAic3ViMiIKLQotCi1jbGFzcyBEZXZpY2VVdGlsc1B1c2hEZWxldGVGaWxlc1Rlc3QoZGV2aWNlX3Rlc3RfY2FzZS5EZXZpY2VUZXN0Q2FzZSk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHN1cGVyKERldmljZVV0aWxzUHVzaERlbGV0ZUZpbGVzVGVzdCwgc2VsZikuc2V0VXAoKQotICAgIHNlbGYuYWRiID0gYWRiX3dyYXBwZXIuQWRiV3JhcHBlcihzZWxmLnNlcmlhbCkKLSAgICBzZWxmLmFkYi5XYWl0Rm9yRGV2aWNlKCkKLSAgICBzZWxmLmRldmljZSA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscygKLSAgICAgICAgc2VsZi5hZGIsIGRlZmF1bHRfdGltZW91dD0xMCwgZGVmYXVsdF9yZXRyaWVzPTApCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgX01ha2VUZW1wRmlsZShjb250ZW50cyk6Ci0gICAgIiIiTWFrZSBhIHRlbXBvcmFyeSBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnRzLgotCi0gICAgQXJnczoKLSAgICAgIGNvbnRlbnRzOiBzdHJpbmcgdG8gd3JpdGUgdG8gdGhlIHRlbXBvcmFyeSBmaWxlLgotCi0gICAgUmV0dXJuczoKLSAgICAgIHRoZSB0dXBsZSBjb250YWlucyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZSBhbmQgdGhlIGZpbGUgbmFtZQotICAgICIiIgotICAgIGZpLCBwYXRoID0gdGVtcGZpbGUubWtzdGVtcCh0ZXh0PVRydWUpCi0gICAgd2l0aCBvcy5mZG9wZW4oZmksICd3JykgYXMgZjoKLSAgICAgIGYud3JpdGUoY29udGVudHMpCi0gICAgZmlsZV9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQotICAgIHJldHVybiAocGF0aCwgZmlsZV9uYW1lKQotCi0gIEBzdGF0aWNtZXRob2QKLSAgZGVmIF9NYWtlVGVtcEZpbGVHaXZlbkRpcihkaXJlY3RvcnksIGNvbnRlbnRzKToKLSAgICAiIiJNYWtlIGEgdGVtcG9yYXJ5IGZpbGUgdW5kZXIgdGhlIGdpdmVuIGRpcmVjdG9yeQotICAgIHdpdGggdGhlIGdpdmVuIGNvbnRlbnRzCi0KLSAgICBBcmdzOgotICAgICAgZGlyZWN0b3J5OiB0aGUgdGVtcCBkaXJlY3RvcnkgdG8gY3JlYXRlIHRoZSBmaWxlCi0gICAgICBjb250ZW50czogc3RyaW5nIHRvIHdyaXRlIHRvIHRoZSB0ZW1wIGZpbGUKLQotICAgIFJldHVybnM6Ci0gICAgICB0aGUgbGlzdCBjb250YWlucyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZSBhbmQgdGhlIGZpbGUgbmFtZQotICAgICIiIgotICAgIGZpLCBwYXRoID0gdGVtcGZpbGUubWtzdGVtcChkaXI9ZGlyZWN0b3J5LCB0ZXh0PVRydWUpCi0gICAgd2l0aCBvcy5mZG9wZW4oZmksICd3JykgYXMgZjoKLSAgICAgIGYud3JpdGUoY29udGVudHMpCi0gICAgZmlsZV9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQotICAgIHJldHVybiAocGF0aCwgZmlsZV9uYW1lKQotCi0gIEBzdGF0aWNtZXRob2QKLSAgZGVmIF9DaGFuZ2VUZW1wRmlsZShwYXRoLCBjb250ZW50cyk6Ci0gICAgd2l0aCBvcy5vcGVuKHBhdGgsICd3JykgYXMgZjoKLSAgICAgIGYud3JpdGUoY29udGVudHMpCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgX0RlbGV0ZVRlbXBGaWxlKHBhdGgpOgotICAgIG9zLnJlbW92ZShwYXRoKQotCi0gIGRlZiB0ZXN0UHVzaENoYW5nZWRGaWxlc19ub0ZpbGVDaGFuZ2Uoc2VsZik6Ci0gICAgKGhvc3RfZmlsZV9wYXRoLCBmaWxlX25hbWUpID0gc2VsZi5fTWFrZVRlbXBGaWxlKF9PTERfQ09OVEVOVFMpCi0gICAgZGV2aWNlX2ZpbGVfcGF0aCA9ICIlcy8lcyIgJSAoX0RFVklDRV9ESVIsIGZpbGVfbmFtZSkKLSAgICBzZWxmLmFkYi5QdXNoKGhvc3RfZmlsZV9wYXRoLCBkZXZpY2VfZmlsZV9wYXRoKQotICAgIHNlbGYuZGV2aWNlLlB1c2hDaGFuZ2VkRmlsZXMoWyhob3N0X2ZpbGVfcGF0aCwgZGV2aWNlX2ZpbGVfcGF0aCldKQotICAgIHJlc3VsdCA9IHNlbGYuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgWydjYXQnLCBkZXZpY2VfZmlsZV9wYXRoXSwgY2hlY2tfcmV0dXJuPVRydWUsIHNpbmdsZV9saW5lPVRydWUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChfT0xEX0NPTlRFTlRTLCByZXN1bHQpCi0KLSAgICBjbWRfaGVscGVyLlJ1bkNtZChbJ3JtJywgaG9zdF9maWxlX3BhdGhdKQotICAgIHNlbGYuZGV2aWNlLlJlbW92ZVBhdGgoX0RFVklDRV9ESVIsIHJlY3Vyc2l2ZT1UcnVlLCBmb3JjZT1UcnVlKQotCi0gIGRlZiB0ZXN0UHVzaENoYW5nZWRGaWxlc19zaW5nbGVGaWxlQ2hhbmdlKHNlbGYpOgotICAgIChob3N0X2ZpbGVfcGF0aCwgZmlsZV9uYW1lKSA9IHNlbGYuX01ha2VUZW1wRmlsZShfT0xEX0NPTlRFTlRTKQotICAgIGRldmljZV9maWxlX3BhdGggPSAiJXMvJXMiICUgKF9ERVZJQ0VfRElSLCBmaWxlX25hbWUpCi0gICAgc2VsZi5hZGIuUHVzaChob3N0X2ZpbGVfcGF0aCwgZGV2aWNlX2ZpbGVfcGF0aCkKLQotICAgIHdpdGggb3Blbihob3N0X2ZpbGVfcGF0aCwgJ3cnKSBhcyBmOgotICAgICAgZi53cml0ZShfTkVXX0NPTlRFTlRTKQotICAgIHNlbGYuZGV2aWNlLlB1c2hDaGFuZ2VkRmlsZXMoWyhob3N0X2ZpbGVfcGF0aCwgZGV2aWNlX2ZpbGVfcGF0aCldKQotICAgIHJlc3VsdCA9IHNlbGYuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgWydjYXQnLCBkZXZpY2VfZmlsZV9wYXRoXSwgY2hlY2tfcmV0dXJuPVRydWUsIHNpbmdsZV9saW5lPVRydWUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChfTkVXX0NPTlRFTlRTLCByZXN1bHQpCi0KLSAgICBjbWRfaGVscGVyLlJ1bkNtZChbJ3JtJywgaG9zdF9maWxlX3BhdGhdKQotICAgIHNlbGYuZGV2aWNlLlJlbW92ZVBhdGgoX0RFVklDRV9ESVIsIHJlY3Vyc2l2ZT1UcnVlLCBmb3JjZT1UcnVlKQotCi0gIGRlZiB0ZXN0RGVsZXRlRmlsZXMoc2VsZik6Ci0gICAgaG9zdF90bXBfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCi0gICAgKGhvc3RfZmlsZV9wYXRoLCBmaWxlX25hbWUpID0gc2VsZi5fTWFrZVRlbXBGaWxlR2l2ZW5EaXIoCi0gICAgICAgIGhvc3RfdG1wX2RpciwgX09MRF9DT05URU5UUykKLQotICAgIGRldmljZV9maWxlX3BhdGggPSAiJXMvJXMiICUgKF9ERVZJQ0VfRElSLCBmaWxlX25hbWUpCi0gICAgc2VsZi5hZGIuUHVzaChob3N0X2ZpbGVfcGF0aCwgZGV2aWNlX2ZpbGVfcGF0aCkKLQotICAgIGNtZF9oZWxwZXIuUnVuQ21kKFsncm0nLCBob3N0X2ZpbGVfcGF0aF0pCi0gICAgc2VsZi5kZXZpY2UuUHVzaENoYW5nZWRGaWxlcyhbKGhvc3RfdG1wX2RpciwgX0RFVklDRV9ESVIpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZV9kZXZpY2Vfc3RhbGU9VHJ1ZSkKLSAgICBmaWxlbmFtZXMgPSBzZWxmLmRldmljZS5MaXN0RGlyZWN0b3J5KF9ERVZJQ0VfRElSKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIGZpbGVuYW1lcykKLQotICAgIGNtZF9oZWxwZXIuUnVuQ21kKFsncm0nLCAnLXJmJywgaG9zdF90bXBfZGlyXSkKLSAgICBzZWxmLmRldmljZS5SZW1vdmVQYXRoKF9ERVZJQ0VfRElSLCByZWN1cnNpdmU9VHJ1ZSwgZm9yY2U9VHJ1ZSkKLQotICBkZWYgdGVzdFB1c2hBbmREZWxldGVGaWxlc19ub1N1YkRpcihzZWxmKToKLSAgICBob3N0X3RtcF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKLSAgICAoaG9zdF9maWxlX3BhdGgxLCBmaWxlX25hbWUxKSA9IHNlbGYuX01ha2VUZW1wRmlsZUdpdmVuRGlyKAotICAgICAgICBob3N0X3RtcF9kaXIsIF9PTERfQ09OVEVOVFMpCi0gICAgKGhvc3RfZmlsZV9wYXRoMiwgZmlsZV9uYW1lMikgPSBzZWxmLl9NYWtlVGVtcEZpbGVHaXZlbkRpcigKLSAgICAgICAgaG9zdF90bXBfZGlyLCBfT0xEX0NPTlRFTlRTKQotCi0gICAgZGV2aWNlX2ZpbGVfcGF0aDEgPSAiJXMvJXMiICUgKF9ERVZJQ0VfRElSLCBmaWxlX25hbWUxKQotICAgIGRldmljZV9maWxlX3BhdGgyID0gIiVzLyVzIiAlIChfREVWSUNFX0RJUiwgZmlsZV9uYW1lMikKLSAgICBzZWxmLmFkYi5QdXNoKGhvc3RfZmlsZV9wYXRoMSwgZGV2aWNlX2ZpbGVfcGF0aDEpCi0gICAgc2VsZi5hZGIuUHVzaChob3N0X2ZpbGVfcGF0aDIsIGRldmljZV9maWxlX3BhdGgyKQotCi0gICAgd2l0aCBvcGVuKGhvc3RfZmlsZV9wYXRoMSwgJ3cnKSBhcyBmOgotICAgICAgZi53cml0ZShfTkVXX0NPTlRFTlRTKQotICAgIGNtZF9oZWxwZXIuUnVuQ21kKFsncm0nLCBob3N0X2ZpbGVfcGF0aDJdKQotCi0gICAgc2VsZi5kZXZpY2UuUHVzaENoYW5nZWRGaWxlcyhbKGhvc3RfdG1wX2RpciwgX0RFVklDRV9ESVIpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlX2RldmljZV9zdGFsZT1UcnVlKQotICAgIHJlc3VsdCA9IHNlbGYuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgWydjYXQnLCBkZXZpY2VfZmlsZV9wYXRoMV0sIGNoZWNrX3JldHVybj1UcnVlLCBzaW5nbGVfbGluZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoX05FV19DT05URU5UUywgcmVzdWx0KQotCi0gICAgZmlsZW5hbWVzID0gc2VsZi5kZXZpY2UuTGlzdERpcmVjdG9yeShfREVWSUNFX0RJUikKLSAgICBzZWxmLmFzc2VydEVxdWFsKFtmaWxlX25hbWUxXSwgZmlsZW5hbWVzKQotCi0gICAgY21kX2hlbHBlci5SdW5DbWQoWydybScsICctcmYnLCBob3N0X3RtcF9kaXJdKQotICAgIHNlbGYuZGV2aWNlLlJlbW92ZVBhdGgoX0RFVklDRV9ESVIsIHJlY3Vyc2l2ZT1UcnVlLCBmb3JjZT1UcnVlKQotCi0gIGRlZiB0ZXN0UHVzaEFuZERlbGV0ZUZpbGVzX1N1YkRpcihzZWxmKToKLSAgICBob3N0X3RtcF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKLSAgICBob3N0X3N1Yl9kaXIxID0gIiVzLyVzIiAlIChob3N0X3RtcF9kaXIsIF9TVUJfRElSMSkKLSAgICBob3N0X3N1Yl9kaXIyID0gIiVzLyVzLyVzIiAlIChob3N0X3RtcF9kaXIsIF9TVUJfRElSLCBfU1VCX0RJUjIpCi0gICAgY21kX2hlbHBlci5SdW5DbWQoWydta2RpcicsICctcCcsIGhvc3Rfc3ViX2RpcjFdKQotICAgIGNtZF9oZWxwZXIuUnVuQ21kKFsnbWtkaXInLCAnLXAnLCBob3N0X3N1Yl9kaXIyXSkKLQotICAgIChob3N0X2ZpbGVfcGF0aDEsIGZpbGVfbmFtZTEpID0gc2VsZi5fTWFrZVRlbXBGaWxlR2l2ZW5EaXIoCi0gICAgICAgIGhvc3RfdG1wX2RpciwgX09MRF9DT05URU5UUykKLSAgICAoaG9zdF9maWxlX3BhdGgyLCBmaWxlX25hbWUyKSA9IHNlbGYuX01ha2VUZW1wRmlsZUdpdmVuRGlyKAotICAgICAgICBob3N0X3RtcF9kaXIsIF9PTERfQ09OVEVOVFMpCi0gICAgKGhvc3RfZmlsZV9wYXRoMywgZmlsZV9uYW1lMykgPSBzZWxmLl9NYWtlVGVtcEZpbGVHaXZlbkRpcigKLSAgICAgICAgaG9zdF9zdWJfZGlyMSwgX09MRF9DT05URU5UUykKLSAgICAoaG9zdF9maWxlX3BhdGg0LCBmaWxlX25hbWU0KSA9IHNlbGYuX01ha2VUZW1wRmlsZUdpdmVuRGlyKAotICAgICAgICBob3N0X3N1Yl9kaXIyLCBfT0xEX0NPTlRFTlRTKQotCi0gICAgZGV2aWNlX2ZpbGVfcGF0aDEgPSAiJXMvJXMiICUgKF9ERVZJQ0VfRElSLCBmaWxlX25hbWUxKQotICAgIGRldmljZV9maWxlX3BhdGgyID0gIiVzLyVzIiAlIChfREVWSUNFX0RJUiwgZmlsZV9uYW1lMikKLSAgICBkZXZpY2VfZmlsZV9wYXRoMyA9ICIlcy8lcy8lcyIgJSAoX0RFVklDRV9ESVIsIF9TVUJfRElSMSwgZmlsZV9uYW1lMykKLSAgICBkZXZpY2VfZmlsZV9wYXRoNCA9ICIlcy8lcy8lcy8lcyIgJSAoX0RFVklDRV9ESVIsIF9TVUJfRElSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU1VCX0RJUjIsIGZpbGVfbmFtZTQpCi0KLSAgICBzZWxmLmFkYi5QdXNoKGhvc3RfZmlsZV9wYXRoMSwgZGV2aWNlX2ZpbGVfcGF0aDEpCi0gICAgc2VsZi5hZGIuUHVzaChob3N0X2ZpbGVfcGF0aDIsIGRldmljZV9maWxlX3BhdGgyKQotICAgIHNlbGYuYWRiLlB1c2goaG9zdF9maWxlX3BhdGgzLCBkZXZpY2VfZmlsZV9wYXRoMykKLSAgICBzZWxmLmFkYi5QdXNoKGhvc3RfZmlsZV9wYXRoNCwgZGV2aWNlX2ZpbGVfcGF0aDQpCi0KLSAgICB3aXRoIG9wZW4oaG9zdF9maWxlX3BhdGgxLCAndycpIGFzIGY6Ci0gICAgICBmLndyaXRlKF9ORVdfQ09OVEVOVFMpCi0gICAgY21kX2hlbHBlci5SdW5DbWQoWydybScsIGhvc3RfZmlsZV9wYXRoMl0pCi0gICAgY21kX2hlbHBlci5SdW5DbWQoWydybScsIGhvc3RfZmlsZV9wYXRoNF0pCi0KLSAgICBzZWxmLmRldmljZS5QdXNoQ2hhbmdlZEZpbGVzKFsoaG9zdF90bXBfZGlyLCBfREVWSUNFX0RJUildLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVfZGV2aWNlX3N0YWxlPVRydWUpCi0gICAgcmVzdWx0ID0gc2VsZi5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBbJ2NhdCcsIGRldmljZV9maWxlX3BhdGgxXSwgY2hlY2tfcmV0dXJuPVRydWUsIHNpbmdsZV9saW5lPVRydWUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChfTkVXX0NPTlRFTlRTLCByZXN1bHQpCi0KLSAgICBmaWxlbmFtZXMgPSBzZWxmLmRldmljZS5MaXN0RGlyZWN0b3J5KF9ERVZJQ0VfRElSKQotICAgIHNlbGYuYXNzZXJ0SW4oZmlsZV9uYW1lMSwgZmlsZW5hbWVzKQotICAgIHNlbGYuYXNzZXJ0SW4oX1NVQl9ESVIxLCBmaWxlbmFtZXMpCi0gICAgc2VsZi5hc3NlcnRJbihfU1VCX0RJUiwgZmlsZW5hbWVzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgbGVuKGZpbGVuYW1lcykpCi0KLSAgICByZXN1bHQgPSBzZWxmLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgIFsnY2F0JywgZGV2aWNlX2ZpbGVfcGF0aDNdLCBjaGVja19yZXR1cm49VHJ1ZSwgc2luZ2xlX2xpbmU9VHJ1ZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKF9PTERfQ09OVEVOVFMsIHJlc3VsdCkKLQotICAgIGZpbGVuYW1lcyA9IHNlbGYuZGV2aWNlLkxpc3REaXJlY3RvcnkoCi0gICAgICAgIHBvc2l4cGF0aC5qb2luKF9ERVZJQ0VfRElSLCBfU1VCX0RJUiwgX1NVQl9ESVIyKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBmaWxlbmFtZXMpCi0KLSAgICBjbWRfaGVscGVyLlJ1bkNtZChbJ3JtJywgJy1yZicsIGhvc3RfdG1wX2Rpcl0pCi0gICAgc2VsZi5kZXZpY2UuUmVtb3ZlUGF0aChfREVWSUNFX0RJUiwgcmVjdXJzaXZlPVRydWUsIGZvcmNlPVRydWUpCi0KLSAgZGVmIHRlc3RSZXN0YXJ0QWRiZChzZWxmKToKLSAgICBkZWYgZ2V0X2FkYmRfcGlkKCk6Ci0gICAgICB0cnk6Ci0gICAgICAgIHJldHVybiBuZXh0KHAucGlkIGZvciBwIGluIHNlbGYuZGV2aWNlLkxpc3RQcm9jZXNzZXMoJ2FkYmQnKSkKLSAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICBzZWxmLmZhaWwoJ1VuYWJsZSB0byBmaW5kIGFkYmQnKQotCi0gICAgb2xkX2FkYmRfcGlkID0gZ2V0X2FkYmRfcGlkKCkKLSAgICBzZWxmLmRldmljZS5SZXN0YXJ0QWRiZCgpCi0gICAgbmV3X2FkYmRfcGlkID0gZ2V0X2FkYmRfcGlkKCkKLSAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9sZF9hZGJkX3BpZCwgbmV3X2FkYmRfcGlkKQotCi0gIGRlZiB0ZXN0RW5hYmxlUm9vdChzZWxmKToKLSAgICBzZWxmLmRldmljZS5TZXRQcm9wKCdzZXJ2aWNlLmFkYi5yb290JywgJzAnKQotICAgIHNlbGYuZGV2aWNlLlJlc3RhcnRBZGJkKCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZGV2aWNlLkhhc1Jvb3QoKSkKLSAgICBzZWxmLmFzc2VydEluKHNlbGYuZGV2aWNlLkdldFByb3AoJ3NlcnZpY2UuYWRiLnJvb3QnKSwgKCcnLCAnMCcpKQotICAgIHNlbGYuZGV2aWNlLkVuYWJsZVJvb3QoKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmRldmljZS5IYXNSb290KCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kZXZpY2UuR2V0UHJvcCgnc2VydmljZS5hZGIucm9vdCcpLCAnMScpCi0KLQotY2xhc3MgUHNPdXRwdXRDb21wYXRpYmlsaXR5VGVzdHMoZGV2aWNlX3Rlc3RfY2FzZS5EZXZpY2VUZXN0Q2FzZSk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHN1cGVyKFBzT3V0cHV0Q29tcGF0aWJpbGl0eVRlc3RzLCBzZWxmKS5zZXRVcCgpCi0gICAgc2VsZi5hZGIgPSBhZGJfd3JhcHBlci5BZGJXcmFwcGVyKHNlbGYuc2VyaWFsKQotICAgIHNlbGYuYWRiLldhaXRGb3JEZXZpY2UoKQotICAgIHNlbGYuZGV2aWNlID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKHNlbGYuYWRiLCBkZWZhdWx0X3JldHJpZXM9MCkKLQotICBkZWYgdGVzdFBzT3V0b3V0Q29tcGF0aWJpbGl0eShzZWxmKToKLSAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0gICAgbGluZXMgPSBzZWxmLmRldmljZS5fR2V0UHNPdXRwdXQoTm9uZSkKLQotICAgICMgQ2hlY2sgY29sdW1uIG5hbWVzIGF0IGVhY2ggaW5kZXggbWF0Y2ggZXhwZWN0ZWQgdmFsdWVzLgotICAgIGhlYWRlciA9IGxpbmVzWzBdLnNwbGl0KCkKLSAgICBmb3IgY29sdW1uLCBpZHggaW4gZGV2aWNlX3V0aWxzLl9QU19DT0xVTU5TLml0ZXJpdGVtcygpOgotICAgICAgY29sdW1uID0gY29sdW1uLnVwcGVyKCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgaGVhZGVyW2lkeF0sIGNvbHVtbiwKLSAgICAgICAgICAnRXhwZWN0ZWQgY29sdW1uICVzIGF0IGluZGV4ICVkIGJ1dCBmb3VuZCAlc1xuc291cmNlOiAlcicgJSAoCi0gICAgICAgICAgICAgIGNvbHVtbiwgaWR4LCBoZWFkZXJbaWR4XSwgbGluZXNbMF0pKQotCi0gICAgIyBDaGVjayBwaWQgYW5kIHBwaWQgYXJlIG51bWVyaWMgdmFsdWVzLgotICAgIGZvciBsaW5lIGluIGxpbmVzWzE6XToKLSAgICAgIHJvdyA9IGxpbmUuc3BsaXQoKQotICAgICAgcm93ID0ge2s6IHJvd1tpXSBmb3IgaywgaSBpbiBkZXZpY2VfdXRpbHMuX1BTX0NPTFVNTlMuaXRlcml0ZW1zKCl9Ci0gICAgICBmb3Iga2V5IGluICgncGlkJywgJ3BwaWQnKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAotICAgICAgICAgICAgcm93W2tleV0uaXNkaWdpdCgpLAotICAgICAgICAgICAgJ0V4cGVjdGVkIG51bWVyaWMgJXMgdmFsdWUgYnV0IGZvdW5kICVyXG5zb3VyY2U6ICVyJyAlICgKLSAgICAgICAgICAgICAgICBrZXksIHJvd1trZXldLCBsaW5lKSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX3V0aWxzX3Rlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2RldmljZV91dGlsc190ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiNTY2MGFjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZGV2aWNlX3V0aWxzX3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcyICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiIKLVVuaXQgdGVzdHMgZm9yIHRoZSBjb250ZW50cyBvZiBkZXZpY2VfdXRpbHMucHkgKG1vc3RseSBEZXZpY2VVdGlscykuCi0iIiIKLQotIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwotIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci0KLWltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQganNvbgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHN0YXQKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX2Vycm9ycwotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2Vfc2lnbmFsCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgYWRiX3dyYXBwZXIKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IGludGVudAotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQga2V5ZXZlbnQKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IHZlcnNpb25fY29kZXMKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGNtZF9oZWxwZXIKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IG1vY2tfY2FsbHMKLQotd2l0aCBkZXZpbF9lbnYuU3lzUGF0aChkZXZpbF9lbnYuUFlNT0NLX1BBVEgpOgotICBpbXBvcnQgbW9jayAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCi0KLQotZGVmIFByb2Nlc3MobmFtZSwgcGlkLCBwcGlkPScxJyk6Ci0gIHJldHVybiBkZXZpY2VfdXRpbHMuUHJvY2Vzc0luZm8obmFtZT1uYW1lLCBwaWQ9cGlkLCBwcGlkPXBwaWQpCi0KLQotZGVmIFByb2Nlc3NlcygqYXJncyk6Ci0gIHJldHVybiBbUHJvY2VzcygqYXJnKSBmb3IgYXJnIGluIGFyZ3NdCi0KLQotY2xhc3MgQW55U3RyaW5nV2l0aChvYmplY3QpOgotICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgotICAgIHNlbGYuX3ZhbHVlID0gdmFsdWUKLQotICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICByZXR1cm4gc2VsZi5fdmFsdWUgaW4gb3RoZXIKLQotICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgcmV0dXJuICc8QW55U3RyaW5nV2l0aDogJXM+JyAlIHNlbGYuX3ZhbHVlCi0KLQotY2xhc3MgX01vY2tBcGtIZWxwZXIob2JqZWN0KToKLQotICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgcGFja2FnZV9uYW1lLCBwZXJtcz1Ob25lKToKLSAgICBzZWxmLnBhdGggPSBwYXRoCi0gICAgc2VsZi5wYWNrYWdlX25hbWUgPSBwYWNrYWdlX25hbWUKLSAgICBzZWxmLnBlcm1zID0gcGVybXMKLQotICBkZWYgR2V0UGFja2FnZU5hbWUoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYucGFja2FnZV9uYW1lCi0KLSAgZGVmIEdldFBlcm1pc3Npb25zKHNlbGYpOgotICAgIHJldHVybiBzZWxmLnBlcm1zCi0KLQotY2xhc3MgX01vY2tNdWx0aXBsZURldmljZXNFcnJvcihFeGNlcHRpb24pOgotICBwYXNzCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNJbml0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RJbml0V2l0aFN0cihzZWxmKToKLSAgICBzZXJpYWxfYXNfc3RyID0gc3RyKCcwMTIzNDU2Nzg5YWJjZGVmJykKLSAgICBkID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKCcwMTIzNDU2Nzg5YWJjZGVmJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlcmlhbF9hc19zdHIsIGQuYWRiLkdldERldmljZVNlcmlhbCgpKQotCi0gIGRlZiB0ZXN0SW5pdFdpdGhVbmljb2RlKHNlbGYpOgotICAgIHNlcmlhbF9hc191bmljb2RlID0gdW5pY29kZSgnZmVkY2JhOTg3NjU0MzIxMCcpCi0gICAgZCA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscyhzZXJpYWxfYXNfdW5pY29kZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlcmlhbF9hc191bmljb2RlLCBkLmFkYi5HZXREZXZpY2VTZXJpYWwoKSkKLQotICBkZWYgdGVzdEluaXRXaXRoQWRiV3JhcHBlcihzZWxmKToKLSAgICBzZXJpYWwgPSAnMTIzNDU2Nzg5YWJjZGVmMCcKLSAgICBhID0gYWRiX3dyYXBwZXIuQWRiV3JhcHBlcihzZXJpYWwpCi0gICAgZCA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscyhhKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VyaWFsLCBkLmFkYi5HZXREZXZpY2VTZXJpYWwoKSkKLQotICBkZWYgdGVzdEluaXRXaXRoTWlzc2luZ19mYWlscyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKE5vbmUpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgIGRldmljZV91dGlscy5EZXZpY2VVdGlscygnJykKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0dldEFWRHNUZXN0KG1vY2tfY2FsbHMuVGVzdENhc2UpOgotCi0gIGRlZiB0ZXN0R2V0QVZEcyhzZWxmKToKLSAgICBtb2NrZWRfYXR0cnMgPSB7Ci0gICAgICAnYW5kcm9pZF9zZGsnOiAnL215L3Nkay9wYXRoJwotICAgIH0KLSAgICB3aXRoIG1vY2sucGF0Y2goJ2RldmlsLmRldmlsX2Vudi5fRW52aXJvbm1lbnQuTG9jYWxQYXRoJywKLSAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrKHNpZGVfZWZmZWN0PWxhbWJkYSBhOiBtb2NrZWRfYXR0cnNbYV0pKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICAgIG1vY2suY2FsbC5kZXZpbC51dGlscy5jbWRfaGVscGVyLkdldENtZE91dHB1dCgKLSAgICAgICAgICAgICAgW21vY2suQU5ZLCAnbGlzdCcsICdhdmQnXSksCi0gICAgICAgICAgJ0F2YWlsYWJsZSBBbmRyb2lkIFZpcnR1YWwgRGV2aWNlczpcbicKLSAgICAgICAgICAnICAgIE5hbWU6IG15X2FuZHJvaWQ1LjBcbicKLSAgICAgICAgICAnICAgIFBhdGg6IC9zb21lL3BhdGgvdG8vLmFuZHJvaWQvYXZkL215X2FuZHJvaWQ1LjAuYXZkXG4nCi0gICAgICAgICAgJyAgVGFyZ2V0OiBBbmRyb2lkIDUuMCAoQVBJIGxldmVsIDIxKVxuJwotICAgICAgICAgICcgVGFnL0FCSTogZGVmYXVsdC94ODZcbicKLSAgICAgICAgICAnICAgIFNraW46IFdWR0E4MDBcbicpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ215X2FuZHJvaWQ1LjAnXSwgZGV2aWNlX3V0aWxzLkdldEFWRHMoKSkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc1Jlc3RhcnRTZXJ2ZXJUZXN0KG1vY2tfY2FsbHMuVGVzdENhc2UpOgotCi0gIEBtb2NrLnBhdGNoKCd0aW1lLnNsZWVwJywgbW9jay5Nb2NrKCkpCi0gIGRlZiB0ZXN0UmVzdGFydFNlcnZlcl9zdWNjZWVkcyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIG1vY2suY2FsbC5kZXZpbC5hbmRyb2lkLnNkay5hZGJfd3JhcHBlci5BZGJXcmFwcGVyLktpbGxTZXJ2ZXIoKSwKLSAgICAgICAgKG1vY2suY2FsbC5kZXZpbC51dGlscy5jbWRfaGVscGVyLkdldENtZFN0YXR1c0FuZE91dHB1dCgKLSAgICAgICAgICAgIFsncGdyZXAnLCAnYWRiJ10pLAotICAgICAgICAgKDEsICcnKSksCi0gICAgICAgIG1vY2suY2FsbC5kZXZpbC5hbmRyb2lkLnNkay5hZGJfd3JhcHBlci5BZGJXcmFwcGVyLlN0YXJ0U2VydmVyKCksCi0gICAgICAgIChtb2NrLmNhbGwuZGV2aWwudXRpbHMuY21kX2hlbHBlci5HZXRDbWRTdGF0dXNBbmRPdXRwdXQoCi0gICAgICAgICAgICBbJ3BncmVwJywgJ2FkYiddKSwKLSAgICAgICAgICgxLCAnJykpLAotICAgICAgICAobW9jay5jYWxsLmRldmlsLnV0aWxzLmNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0KAotICAgICAgICAgICAgWydwZ3JlcCcsICdhZGInXSksCi0gICAgICAgICAoMCwgJzEyM1xuJykpKToKLSAgICAgIGRldmljZV91dGlscy5SZXN0YXJ0U2VydmVyKCkKLQotCi1jbGFzcyBNb2NrVGVtcEZpbGUob2JqZWN0KToKLQotICBkZWYgX19pbml0X18oc2VsZiwgbmFtZT0nL3RtcC9zb21lL2ZpbGUnKToKLSAgICBzZWxmLmZpbGUgPSBtb2NrLk1hZ2ljTW9jayhzcGVjPWZpbGUpCi0gICAgc2VsZi5maWxlLm5hbWUgPSBuYW1lCi0gICAgc2VsZi5maWxlLm5hbWVfcXVvdGVkID0gY21kX2hlbHBlci5TaW5nbGVRdW90ZShuYW1lKQotCi0gIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuZmlsZQotCi0gIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKToKLSAgICBwYXNzCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBuYW1lKHNlbGYpOgotICAgIHJldHVybiBzZWxmLmZpbGUubmFtZQotCi0KLWNsYXNzIE1vY2tMb2dnZXIobW9jay5Nb2NrKToKLSAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgc3VwZXIoTW9ja0xvZ2dlciwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQotICAgICMgVE9ETyhwZXJlemp1KTogQ29uc2lkZXIgYWRkaW5nIHRyYXBzIGZvciBlcnJvciwgaW5mbywgZXRjLgotICAgIHNlbGYud2FybmluZ3MgPSBbXQotCi0gIGRlZiB3YXJuaW5nKHNlbGYsIG1lc3NhZ2UsICphcmdzKToKLSAgICBzZWxmLndhcm5pbmdzLmFwcGVuZChtZXNzYWdlICUgYXJncykKLQotCi1kZWYgUGF0Y2hMb2dnZXIoKToKLSAgcmV0dXJuIG1vY2sucGF0Y2goCi0gICAgICAnZGV2aWwuYW5kcm9pZC5kZXZpY2VfdXRpbHMubG9nZ2VyJywgbmV3X2NhbGxhYmxlPU1vY2tMb2dnZXIpCi0KLQotY2xhc3MgX1BhdGNoZWRGdW5jdGlvbihvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRjaGVkPU5vbmUsIG1vY2tlZD1Ob25lKToKLSAgICBzZWxmLnBhdGNoZWQgPSBwYXRjaGVkCi0gICAgc2VsZi5tb2NrZWQgPSBtb2NrZWQKLQotCi1kZWYgX0FkYldyYXBwZXJNb2NrKHRlc3Rfc2VyaWFsLCBpc19yZWFkeT1UcnVlKToKLSAgYWRiID0gbW9jay5Nb2NrKHNwZWM9YWRiX3dyYXBwZXIuQWRiV3JhcHBlcikKLSAgYWRiLl9fc3RyX18gPSBtb2NrLk1vY2socmV0dXJuX3ZhbHVlPXRlc3Rfc2VyaWFsKQotICBhZGIuR2V0RGV2aWNlU2VyaWFsLnJldHVybl92YWx1ZSA9IHRlc3Rfc2VyaWFsCi0gIGFkYi5pc19yZWFkeSA9IGlzX3JlYWR5Ci0gIHJldHVybiBhZGIKLQotCi1jbGFzcyBEZXZpY2VVdGlsc1Rlc3QobW9ja19jYWxscy5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHNlbGYuYWRiID0gX0FkYldyYXBwZXJNb2NrKCcwMTIzNDU2Nzg5YWJjZGVmJykKLSAgICBzZWxmLmRldmljZSA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscygKLSAgICAgICAgc2VsZi5hZGIsIGRlZmF1bHRfdGltZW91dD0xMCwgZGVmYXVsdF9yZXRyaWVzPTApCi0gICAgc2VsZi53YXRjaE1ldGhvZENhbGxzKHNlbGYuY2FsbC5hZGIsIGlnbm9yZT1bJ0dldERldmljZVNlcmlhbCddKQotCi0gIGRlZiBBZGJDb21tYW5kRXJyb3Ioc2VsZiwgYXJncz1Ob25lLCBvdXRwdXQ9Tm9uZSwgc3RhdHVzPU5vbmUsIG1zZz1Ob25lKToKLSAgICBpZiBhcmdzIGlzIE5vbmU6Ci0gICAgICBhcmdzID0gWydbdW5zcGVjaWZpZWRdJ10KLSAgICByZXR1cm4gbW9jay5Nb2NrKHNpZGVfZWZmZWN0PWRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICBhcmdzLCBvdXRwdXQsIHN0YXR1cywgbXNnLCBzdHIoc2VsZi5kZXZpY2UpKSkKLQotICBkZWYgQ29tbWFuZEVycm9yKHNlbGYsIG1zZz1Ob25lKToKLSAgICBpZiBtc2cgaXMgTm9uZToKLSAgICAgIG1zZyA9ICdDb21tYW5kIGZhaWxlZCcKLSAgICByZXR1cm4gbW9jay5Nb2NrKHNpZGVfZWZmZWN0PWRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICBtc2csIHN0cihzZWxmLmRldmljZSkpKQotCi0gIGRlZiBTaGVsbEVycm9yKHNlbGYsIG91dHB1dD1Ob25lLCBzdGF0dXM9MSk6Ci0gICAgZGVmIGFjdGlvbihjbWQsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkFkYlNoZWxsQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAgIGNtZCwgb3V0cHV0LCBzdGF0dXMsIHN0cihzZWxmLmRldmljZSkpCi0gICAgaWYgb3V0cHV0IGlzIE5vbmU6Ci0gICAgICBvdXRwdXQgPSAnUGVybWlzc2lvbiBkZW5pZWRcbicKLSAgICByZXR1cm4gYWN0aW9uCi0KLSAgZGVmIFRpbWVvdXRFcnJvcihzZWxmLCBtc2c9Tm9uZSk6Ci0gICAgaWYgbXNnIGlzIE5vbmU6Ci0gICAgICBtc2cgPSAnT3BlcmF0aW9uIHRpbWVkIG91dCcKLSAgICByZXR1cm4gbW9jay5Nb2NrKHNpZGVfZWZmZWN0PWRldmljZV9lcnJvcnMuQ29tbWFuZFRpbWVvdXRFcnJvcigKLSAgICAgICAgbXNnLCBzdHIoc2VsZi5kZXZpY2UpKSkKLQotICBkZWYgRW5zdXJlQ2FjaGVJbml0aWFsaXplZChzZWxmLCBwcm9wcz1Ob25lLCBzZGNhcmQ9Jy9zZGNhcmQnKToKLSAgICBwcm9wcyA9IHByb3BzIG9yIFtdCi0gICAgcmV0ID0gW3NkY2FyZCwgJ1RPS0VOJ10gKyBwcm9wcwotICAgIHJldHVybiAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgIEFueVN0cmluZ1dpdGgoJ2dldHByb3AnKSwKLSAgICAgICAgc2hlbGw9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUsIGxhcmdlX291dHB1dD1UcnVlKSwgcmV0KQotCi0KLWNsYXNzIERldmljZVV0aWxzRXFUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RFcV9lcXVhbF9kZXZpY2VVdGlscyhzZWxmKToKLSAgICBvdGhlciA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscyhfQWRiV3JhcHBlck1vY2soJzAxMjM0NTY3ODlhYmNkZWYnKSkKLSAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kZXZpY2UgPT0gb3RoZXIpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG90aGVyID09IHNlbGYuZGV2aWNlKQotCi0gIGRlZiB0ZXN0RXFfZXF1YWxfYWRiV3JhcHBlcihzZWxmKToKLSAgICBvdGhlciA9IGFkYl93cmFwcGVyLkFkYldyYXBwZXIoJzAxMjM0NTY3ODlhYmNkZWYnKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmRldmljZSA9PSBvdGhlcikKLSAgICBzZWxmLmFzc2VydFRydWUob3RoZXIgPT0gc2VsZi5kZXZpY2UpCi0KLSAgZGVmIHRlc3RFcV9lcXVhbF9zdHJpbmcoc2VsZik6Ci0gICAgb3RoZXIgPSAnMDEyMzQ1Njc4OWFiY2RlZicKLSAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kZXZpY2UgPT0gb3RoZXIpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG90aGVyID09IHNlbGYuZGV2aWNlKQotCi0gIGRlZiB0ZXN0RXFfZGV2aWNlc05vdEVxdWFsKHNlbGYpOgotICAgIG90aGVyID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKF9BZGJXcmFwcGVyTW9jaygnMDEyMzQ1Njc4OWFiY2RlZScpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kZXZpY2UgPT0gb3RoZXIpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShvdGhlciA9PSBzZWxmLmRldmljZSkKLQotICBkZWYgdGVzdEVxX2lkZW50aXR5KHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmRldmljZSA9PSBzZWxmLmRldmljZSkKLQotICBkZWYgdGVzdEVxX3NlcmlhbEluTGlzdChzZWxmKToKLSAgICBkZXZpY2VzID0gW3NlbGYuZGV2aWNlXQotICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnMDEyMzQ1Njc4OWFiY2RlZicgaW4gZGV2aWNlcykKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0x0VGVzdChEZXZpY2VVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0THRfbGVzc1RoYW4oc2VsZik6Ci0gICAgb3RoZXIgPSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMoX0FkYldyYXBwZXJNb2NrKCdmZmZmZmZmZmZmZmZmZmZmJykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGV2aWNlIDwgb3RoZXIpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG90aGVyID4gc2VsZi5kZXZpY2UpCi0KLSAgZGVmIHRlc3RMdF9ncmVhdGVyVGhhbl9saHMoc2VsZik6Ci0gICAgb3RoZXIgPSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMoX0FkYldyYXBwZXJNb2NrKCcwMDAwMDAwMDAwMDAwMDAwJykpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmRldmljZSA8IG90aGVyKQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3RoZXIgPiBzZWxmLmRldmljZSkKLQotICBkZWYgdGVzdEx0X2VxdWFsKHNlbGYpOgotICAgIG90aGVyID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKF9BZGJXcmFwcGVyTW9jaygnMDEyMzQ1Njc4OWFiY2RlZicpKQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kZXZpY2UgPCBvdGhlcikKLSAgICBzZWxmLmFzc2VydEZhbHNlKG90aGVyID4gc2VsZi5kZXZpY2UpCi0KLSAgZGVmIHRlc3RMdF9zb3J0ZWQoc2VsZik6Ci0gICAgZGV2aWNlcyA9IFsKLSAgICAgICAgZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKF9BZGJXcmFwcGVyTW9jaygnZmZmZmZmZmZmZmZmZmZmZicpKSwKLSAgICAgICAgZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKF9BZGJXcmFwcGVyTW9jaygnMDAwMDAwMDAwMDAwMDAwMCcpKSwKLSAgICBdCi0gICAgc29ydGVkX2RldmljZXMgPSBzb3J0ZWQoZGV2aWNlcykKLSAgICBzZWxmLmFzc2VydEVxdWFscygnMDAwMDAwMDAwMDAwMDAwMCcsCi0gICAgICAgICAgICAgICAgICAgICAgc29ydGVkX2RldmljZXNbMF0uYWRiLkdldERldmljZVNlcmlhbCgpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdmZmZmZmZmZmZmZmZmZmZmJywKLSAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWRfZGV2aWNlc1sxXS5hZGIuR2V0RGV2aWNlU2VyaWFsKCkpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNTdHJUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RTdHJfcmV0dXJuc1NlcmlhbChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLkdldERldmljZVNlcmlhbCgpLCAnMDEyMzQ1Njc4OWFiY2RlZicpKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzAxMjM0NTY3ODlhYmNkZWYnLCBzdHIoc2VsZi5kZXZpY2UpKQotCi0KLWNsYXNzIERldmljZVV0aWxzSXNPbmxpbmVUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RJc09ubGluZV90cnVlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKHNlbGYuY2FsbC5hZGIuR2V0U3RhdGUoKSwgJ2RldmljZScpOgotICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGV2aWNlLklzT25saW5lKCkpCi0KLSAgZGVmIHRlc3RJc09ubGluZV9mYWxzZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbChzZWxmLmNhbGwuYWRiLkdldFN0YXRlKCksICdvZmZsaW5lJyk6Ci0gICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZGV2aWNlLklzT25saW5lKCkpCi0KLSAgZGVmIHRlc3RJc09ubGluZV9lcnJvcihzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbChzZWxmLmNhbGwuYWRiLkdldFN0YXRlKCksIHNlbGYuQ29tbWFuZEVycm9yKCkpOgotICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmRldmljZS5Jc09ubGluZSgpKQotCi0KLWNsYXNzIERldmljZVV0aWxzSGFzUm9vdFRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdEhhc1Jvb3RfdHJ1ZShzZWxmKToKLSAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChzZWxmLmNhbGwuZGV2aWNlLnByb2R1Y3RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPSdub3Rhc2FpbGZpc2gnKSwgKAotICAgICAgICBzZWxmLmFzc2VydENhbGwoc2VsZi5jYWxsLmFkYi5TaGVsbCgnbHMgL3Jvb3QnKSwgJ2Zvb1xuJykpOgotICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGV2aWNlLkhhc1Jvb3QoKSkKLQotICBkZWYgdGVzdGhhc1Jvb3RTcGVjaWFsX3RydWUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmRldmljZS5wcm9kdWN0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPSdzYWlsZmlzaCcpLCAoCi0gICAgICAgIHNlbGYuYXNzZXJ0Q2FsbChzZWxmLmNhbGwuYWRiLlNoZWxsKCdnZXRwcm9wIHNlcnZpY2UuYWRiLnJvb3QnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICcxXG4nKSk6Ci0gICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kZXZpY2UuSGFzUm9vdCgpKQotCi0gIGRlZiB0ZXN0SGFzUm9vdF9mYWxzZShzZWxmKToKLSAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChzZWxmLmNhbGwuZGV2aWNlLnByb2R1Y3RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9J25vdGFzYWlsZmlzaCcpLCAoCi0gICAgICAgIHNlbGYuYXNzZXJ0Q2FsbChzZWxmLmNhbGwuYWRiLlNoZWxsKCdscyAvcm9vdCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5TaGVsbEVycm9yKCkpKToKLSAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kZXZpY2UuSGFzUm9vdCgpKQotCi0gIGRlZiB0ZXN0SGFzUm9vdFNwZWNpYWxfZmFsc2Uoc2VsZik6Ci0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmRldmljZS5wcm9kdWN0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPSdzYWlsZmlzaCcpLCAoCi0gICAgICAgIHNlbGYuYXNzZXJ0Q2FsbChzZWxmLmNhbGwuYWRiLlNoZWxsKCdnZXRwcm9wIHNlcnZpY2UuYWRiLnJvb3QnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdcbicpKToKLSAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kZXZpY2UuSGFzUm9vdCgpKQotCi0KLWNsYXNzIERldmljZVV0aWxzRW5hYmxlUm9vdFRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdEVuYWJsZVJvb3Rfc3VjY2VlZHMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlJvb3QoKSwKLSAgICAgICAgc2VsZi5jYWxsLmFkYi5XYWl0Rm9yRGV2aWNlKCksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkdldFByb3AoJ3NlcnZpY2UuYWRiLnJvb3QnLCBjYWNoZT1GYWxzZSksICcxJykpOgotICAgICAgc2VsZi5kZXZpY2UuRW5hYmxlUm9vdCgpCi0KLSAgZGVmIHRlc3RFbmFibGVSb290X3VzZXJCdWlsZChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlJvb3QoKSwgc2VsZi5BZGJDb21tYW5kRXJyb3IoKSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLklzVXNlckJ1aWxkKCksIFRydWUpKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgICBzZWxmLmRldmljZS5FbmFibGVSb290KCkKLQotICBkZWYgdGVzdEVuYWJsZVJvb3Rfcm9vdEZhaWxzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuUm9vdCgpLCBzZWxmLkFkYkNvbW1hbmRFcnJvcigpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuSXNVc2VyQnVpbGQoKSwgRmFsc2UpKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5BZGJDb21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgICBzZWxmLmRldmljZS5FbmFibGVSb290KCkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0lzVXNlckJ1aWxkVGVzdChEZXZpY2VVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0SXNVc2VyQnVpbGRfeWVzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLkdldFByb3AoJ3JvLmJ1aWxkLnR5cGUnLCBjYWNoZT1UcnVlKSwgJ3VzZXInKToKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmRldmljZS5Jc1VzZXJCdWlsZCgpKQotCi0gIGRlZiB0ZXN0SXNVc2VyQnVpbGRfbm8oc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgncm8uYnVpbGQudHlwZScsIGNhY2hlPVRydWUpLCAndXNlcmRlYnVnJyk6Ci0gICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZGV2aWNlLklzVXNlckJ1aWxkKCkpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNHZXRFeHRlcm5hbFN0b3JhZ2VQYXRoVGVzdChEZXZpY2VVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0R2V0RXh0ZXJuYWxTdG9yYWdlUGF0aF9zdWNjZWVkcyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIHNlbGYuRW5zdXJlQ2FjaGVJbml0aWFsaXplZChzZGNhcmQ9Jy9mYWtlL3N0b3JhZ2UvcGF0aCcpKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcvZmFrZS9zdG9yYWdlL3BhdGgnLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXZpY2UuR2V0RXh0ZXJuYWxTdG9yYWdlUGF0aCgpKQotCi0gIGRlZiB0ZXN0R2V0RXh0ZXJuYWxTdG9yYWdlUGF0aF9mYWlscyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIHNlbGYuRW5zdXJlQ2FjaGVJbml0aWFsaXplZChzZGNhcmQ9JycpKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgICBzZWxmLmRldmljZS5HZXRFeHRlcm5hbFN0b3JhZ2VQYXRoKCkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbFRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdEdldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbF9leGlzdHMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRQcm9wKCdyby5idWlsZC52ZXJzaW9uLnNkaycsIGNhY2hlPVRydWUpLCAnMTknKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydwbScsICdwYXRoJywgJ2FuZHJvaWQnXSwgY2hlY2tfcmV0dXJuPVRydWUpLAotICAgICAgICAgWydwYWNrYWdlOi9wYXRoL3RvL2FuZHJvaWQuYXBrJ10pKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnL3BhdGgvdG8vYW5kcm9pZC5hcGsnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGV2aWNlLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwoJ2FuZHJvaWQnKSkKLQotICBkZWYgdGVzdEdldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbF9ub3RFeGlzdHMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRQcm9wKCdyby5idWlsZC52ZXJzaW9uLnNkaycsIGNhY2hlPVRydWUpLCAnMTknKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydwbScsICdwYXRoJywgJ25vdC5pbnN0YWxsZWQuYXBwJ10sIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgICcnKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwKLSAgICAgICAgICBzZWxmLmRldmljZS5fR2V0QXBwbGljYXRpb25QYXRoc0ludGVybmFsKCdub3QuaW5zdGFsbGVkLmFwcCcpKQotCi0gIGRlZiB0ZXN0R2V0QXBwbGljYXRpb25QYXRoc0ludGVybmFsX2dhcmJhZ2VPdXRwdXRSYWlzZXMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRQcm9wKCdyby5idWlsZC52ZXJzaW9uLnNkaycsIGNhY2hlPVRydWUpLCAnMTknKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydwbScsICdwYXRoJywgJ2FuZHJvaWQnXSwgY2hlY2tfcmV0dXJuPVRydWUpLAotICAgICAgICAgWydnYXJiYWdlIGZpcnN0IGxpbmUnXSkpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICAgIHNlbGYuZGV2aWNlLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwoJ2FuZHJvaWQnKQotCi0gIGRlZiB0ZXN0R2V0QXBwbGljYXRpb25QYXRoc0ludGVybmFsX291dHB1dFdhcm5pbmdzSWdub3JlZChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkdldFByb3AoJ3JvLmJ1aWxkLnZlcnNpb24uc2RrJywgY2FjaGU9VHJ1ZSksICcxOScpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ3BtJywgJ3BhdGgnLCAnbm90Lmluc3RhbGxlZC5hcHAnXSwgY2hlY2tfcmV0dXJuPVRydWUpLAotICAgICAgICAgWydXQVJOSU5HOiBzb21lIHdhcm5pbmcgbWVzc2FnZSBmcm9tIHBtJ10pKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtdLAotICAgICAgICAgIHNlbGYuZGV2aWNlLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwoJ25vdC5pbnN0YWxsZWQuYXBwJykpCi0KLSAgZGVmIHRlc3RHZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWxfZmFpbHMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRQcm9wKCdyby5idWlsZC52ZXJzaW9uLnNkaycsIGNhY2hlPVRydWUpLCAnMTknKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydwbScsICdwYXRoJywgJ2FuZHJvaWQnXSwgY2hlY2tfcmV0dXJuPVRydWUpLAotICAgICAgICAgc2VsZi5Db21tYW5kRXJyb3IoJ0VSUk9SLiBJcyBwYWNrYWdlIG1hbmFnZXIgcnVubmluZz9cbicpKSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgICAgc2VsZi5kZXZpY2UuX0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbCgnYW5kcm9pZCcpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNfR2V0QXBwbGljYXRpb25WZXJzaW9uVGVzdChEZXZpY2VVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0X0dldEFwcGxpY2F0aW9uVmVyc2lvbl9leGlzdHMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmFkYi5TaGVsbCgnZHVtcHN5cyBwYWNrYWdlIGNvbS5hbmRyb2lkLmNocm9tZScpLAotICAgICAgICAgJ1BhY2thZ2VzOlxuJwotICAgICAgICAgJyAgUGFja2FnZSBbY29tLmFuZHJvaWQuY2hyb21lXSAoMzkwMWVjZmIpOlxuJwotICAgICAgICAgJyAgICB1c2VySWQ9MTIzNCBnaWRzPVsxMjMsIDQ1NiwgNzg5XVxuJwotICAgICAgICAgJyAgICBwa2c9UGFja2FnZXsxZmVjZjYzNCBjb20uYW5kcm9pZC5jaHJvbWV9XG4nCi0gICAgICAgICAnICAgIHZlcnNpb25OYW1lPTQ1LjAuMTIzNC43XG4nKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscygnNDUuMC4xMjM0LjcnLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXZpY2UuR2V0QXBwbGljYXRpb25WZXJzaW9uKCdjb20uYW5kcm9pZC5jaHJvbWUnKSkKLQotICBkZWYgdGVzdF9HZXRBcHBsaWNhdGlvblZlcnNpb25fbm90RXhpc3RzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuU2hlbGwoJ2R1bXBzeXMgcGFja2FnZSBjb20uYW5kcm9pZC5jaHJvbWUnKSwgJycpKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRldmljZS5HZXRBcHBsaWNhdGlvblZlcnNpb24oJ2NvbS5hbmRyb2lkLmNocm9tZScpKQotCi0gIGRlZiB0ZXN0X0dldEFwcGxpY2F0aW9uVmVyc2lvbl9mYWlscyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCdkdW1wc3lzIHBhY2thZ2UgY29tLmFuZHJvaWQuY2hyb21lJyksCi0gICAgICAgICAnUGFja2FnZXM6XG4nCi0gICAgICAgICAnICBQYWNrYWdlIFtjb20uYW5kcm9pZC5jaHJvbWVdICgzOTAxZWNmYik6XG4nCi0gICAgICAgICAnICAgIHVzZXJJZD0xMjM0IGdpZHM9WzEyMywgNDU2LCA3ODldXG4nCi0gICAgICAgICAnICAgIHBrZz1QYWNrYWdlezFmZWNmNjM0IGNvbS5hbmRyb2lkLmNocm9tZX1cbicpKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgICBzZWxmLmRldmljZS5HZXRBcHBsaWNhdGlvblZlcnNpb24oJ2NvbS5hbmRyb2lkLmNocm9tZScpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNHZXRBcHBsaWNhdGlvbkRhdGFEaXJlY3RvcnlUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RHZXRBcHBsaWNhdGlvbkRhdGFEaXJlY3RvcnlfZXhpc3RzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLl9SdW5QaXBlZFNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICdwbSBkdW1wIGZvby5iYXIuYmF6IHwgZ3JlcCBkYXRhRGlyPScpLAotICAgICAgICBbJ2RhdGFEaXI9L2RhdGEvZGF0YS9mb28uYmFyLmJheiddKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgICcvZGF0YS9kYXRhL2Zvby5iYXIuYmF6JywKLSAgICAgICAgICBzZWxmLmRldmljZS5HZXRBcHBsaWNhdGlvbkRhdGFEaXJlY3RvcnkoJ2Zvby5iYXIuYmF6JykpCi0KLSAgZGVmIHRlc3RHZXRBcHBsaWNhdGlvbkRhdGFEaXJlY3Rvcnlfbm90RXhpc3RzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLl9SdW5QaXBlZFNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICdwbSBkdW1wIGZvby5iYXIuYmF6IHwgZ3JlcCBkYXRhRGlyPScpLAotICAgICAgICBzZWxmLlNoZWxsRXJyb3IoKSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgICAgc2VsZi5kZXZpY2UuR2V0QXBwbGljYXRpb25EYXRhRGlyZWN0b3J5KCdmb28uYmFyLmJheicpCi0KLQotQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLWNsYXNzIERldmljZVV0aWxzV2FpdFVudGlsRnVsbHlCb290ZWRUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RXYWl0VW50aWxGdWxseUJvb3RlZF9zdWNjZWVkc05vV2lmaShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuV2FpdEZvckRldmljZSgpLAotICAgICAgICAjIHNkX2NhcmRfcmVhZHkKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0RXh0ZXJuYWxTdG9yYWdlUGF0aCgpLCAnL2Zha2Uvc3RvcmFnZS9wYXRoJyksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCd0ZXN0IC1kIC9mYWtlL3N0b3JhZ2UvcGF0aCcpLCAnJyksCi0gICAgICAgICMgcG1fcmVhZHkKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbCgnYW5kcm9pZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9jYWNoZT1UcnVlKSwKLSAgICAgICAgIFsncGFja2FnZTovc29tZS9mYWtlL3BhdGgnXSksCi0gICAgICAgICMgYm9vdF9jb21wbGV0ZWQKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgnc3lzLmJvb3RfY29tcGxldGVkJywgY2FjaGU9RmFsc2UpLCAnMScpKToKLSAgICAgIHNlbGYuZGV2aWNlLldhaXRVbnRpbEZ1bGx5Qm9vdGVkKHdpZmk9RmFsc2UpCi0KLSAgZGVmIHRlc3RXYWl0VW50aWxGdWxseUJvb3RlZF9zdWNjZWVkc1dpdGhXaWZpKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgc2VsZi5jYWxsLmFkYi5XYWl0Rm9yRGV2aWNlKCksCi0gICAgICAgICMgc2RfY2FyZF9yZWFkeQotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRFeHRlcm5hbFN0b3JhZ2VQYXRoKCksICcvZmFrZS9zdG9yYWdlL3BhdGgnKSwKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuU2hlbGwoJ3Rlc3QgLWQgL2Zha2Uvc3RvcmFnZS9wYXRoJyksICcnKSwKLSAgICAgICAgIyBwbV9yZWFkeQotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fR2V0QXBwbGljYXRpb25QYXRoc0ludGVybmFsKCdhbmRyb2lkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2NhY2hlPVRydWUpLAotICAgICAgICAgWydwYWNrYWdlOi9zb21lL2Zha2UvcGF0aCddKSwKLSAgICAgICAgIyBib290X2NvbXBsZXRlZAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRQcm9wKCdzeXMuYm9vdF9jb21wbGV0ZWQnLCBjYWNoZT1GYWxzZSksICcxJyksCi0gICAgICAgICMgd2lmaV9lbmFibGVkCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCdkdW1wc3lzIHdpZmknKSwKLSAgICAgICAgICdzdHVmZlxuV2ktRmkgaXMgZW5hYmxlZFxubW9yZSBzdHVmZlxuJykpOgotICAgICAgc2VsZi5kZXZpY2UuV2FpdFVudGlsRnVsbHlCb290ZWQod2lmaT1UcnVlKQotCi0gIGRlZiB0ZXN0V2FpdFVudGlsRnVsbHlCb290ZWRfZGV2aWNlTm90SW5pdGlhbGx5QXZhaWxhYmxlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgc2VsZi5jYWxsLmFkYi5XYWl0Rm9yRGV2aWNlKCksCi0gICAgICAgICMgc2RfY2FyZF9yZWFkeQotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRFeHRlcm5hbFN0b3JhZ2VQYXRoKCksIHNlbGYuQWRiQ29tbWFuZEVycm9yKCkpLAotICAgICAgICAjIHNkX2NhcmRfcmVhZHkKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0RXh0ZXJuYWxTdG9yYWdlUGF0aCgpLCBzZWxmLkFkYkNvbW1hbmRFcnJvcigpKSwKLSAgICAgICAgIyBzZF9jYXJkX3JlYWR5Ci0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkdldEV4dGVybmFsU3RvcmFnZVBhdGgoKSwgc2VsZi5BZGJDb21tYW5kRXJyb3IoKSksCi0gICAgICAgICMgc2RfY2FyZF9yZWFkeQotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRFeHRlcm5hbFN0b3JhZ2VQYXRoKCksIHNlbGYuQWRiQ29tbWFuZEVycm9yKCkpLAotICAgICAgICAjIHNkX2NhcmRfcmVhZHkKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0RXh0ZXJuYWxTdG9yYWdlUGF0aCgpLCAnL2Zha2Uvc3RvcmFnZS9wYXRoJyksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCd0ZXN0IC1kIC9mYWtlL3N0b3JhZ2UvcGF0aCcpLCAnJyksCi0gICAgICAgICMgcG1fcmVhZHkKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbCgnYW5kcm9pZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9jYWNoZT1UcnVlKSwKLSAgICAgICAgIFsncGFja2FnZTovc29tZS9mYWtlL3BhdGgnXSksCi0gICAgICAgICMgYm9vdF9jb21wbGV0ZWQKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgnc3lzLmJvb3RfY29tcGxldGVkJywgY2FjaGU9RmFsc2UpLCAnMScpKToKLSAgICAgIHNlbGYuZGV2aWNlLldhaXRVbnRpbEZ1bGx5Qm9vdGVkKHdpZmk9RmFsc2UpCi0KLSAgZGVmIHRlc3RXYWl0VW50aWxGdWxseUJvb3RlZF9kZXZpY2VCcmllZmx5T2ZmbGluZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuV2FpdEZvckRldmljZSgpLAotICAgICAgICAjIHNkX2NhcmRfcmVhZHkKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0RXh0ZXJuYWxTdG9yYWdlUGF0aCgpLCAnL2Zha2Uvc3RvcmFnZS9wYXRoJyksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCd0ZXN0IC1kIC9mYWtlL3N0b3JhZ2UvcGF0aCcpLCAnJyksCi0gICAgICAgICMgcG1fcmVhZHkKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbCgnYW5kcm9pZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9jYWNoZT1UcnVlKSwKLSAgICAgICAgIFsncGFja2FnZTovc29tZS9mYWtlL3BhdGgnXSksCi0gICAgICAgICMgYm9vdF9jb21wbGV0ZWQKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgnc3lzLmJvb3RfY29tcGxldGVkJywgY2FjaGU9RmFsc2UpLAotICAgICAgICAgc2VsZi5BZGJDb21tYW5kRXJyb3IoKSksCi0gICAgICAgICMgYm9vdF9jb21wbGV0ZWQKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgnc3lzLmJvb3RfY29tcGxldGVkJywgY2FjaGU9RmFsc2UpLCAnMScpKToKLSAgICAgIHNlbGYuZGV2aWNlLldhaXRVbnRpbEZ1bGx5Qm9vdGVkKHdpZmk9RmFsc2UpCi0KLSAgZGVmIHRlc3RXYWl0VW50aWxGdWxseUJvb3RlZF9zZENhcmRSZWFkeUZhaWxzX25vUGF0aChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuV2FpdEZvckRldmljZSgpLAotICAgICAgICAjIHNkX2NhcmRfcmVhZHkKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0RXh0ZXJuYWxTdG9yYWdlUGF0aCgpLCBzZWxmLkNvbW1hbmRFcnJvcigpKSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgICAgc2VsZi5kZXZpY2UuV2FpdFVudGlsRnVsbHlCb290ZWQod2lmaT1GYWxzZSkKLQotICBkZWYgdGVzdFdhaXRVbnRpbEZ1bGx5Qm9vdGVkX3NkQ2FyZFJlYWR5RmFpbHNfbm90RXhpc3RzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgc2VsZi5jYWxsLmFkYi5XYWl0Rm9yRGV2aWNlKCksCi0gICAgICAgICMgc2RfY2FyZF9yZWFkeQotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRFeHRlcm5hbFN0b3JhZ2VQYXRoKCksICcvZmFrZS9zdG9yYWdlL3BhdGgnKSwKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuU2hlbGwoJ3Rlc3QgLWQgL2Zha2Uvc3RvcmFnZS9wYXRoJyksIHNlbGYuU2hlbGxFcnJvcigpKSwKLSAgICAgICAgIyBzZF9jYXJkX3JlYWR5Ci0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkdldEV4dGVybmFsU3RvcmFnZVBhdGgoKSwgJy9mYWtlL3N0b3JhZ2UvcGF0aCcpLAotICAgICAgICAoc2VsZi5jYWxsLmFkYi5TaGVsbCgndGVzdCAtZCAvZmFrZS9zdG9yYWdlL3BhdGgnKSwgc2VsZi5TaGVsbEVycm9yKCkpLAotICAgICAgICAjIHNkX2NhcmRfcmVhZHkKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0RXh0ZXJuYWxTdG9yYWdlUGF0aCgpLCAnL2Zha2Uvc3RvcmFnZS9wYXRoJyksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCd0ZXN0IC1kIC9mYWtlL3N0b3JhZ2UvcGF0aCcpLAotICAgICAgICAgc2VsZi5UaW1lb3V0RXJyb3IoKSkpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRUaW1lb3V0RXJyb3IpOgotICAgICAgICBzZWxmLmRldmljZS5XYWl0VW50aWxGdWxseUJvb3RlZCh3aWZpPUZhbHNlKQotCi0gIGRlZiB0ZXN0V2FpdFVudGlsRnVsbHlCb290ZWRfZGV2aWNlUG1GYWlscyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuV2FpdEZvckRldmljZSgpLAotICAgICAgICAjIHNkX2NhcmRfcmVhZHkKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0RXh0ZXJuYWxTdG9yYWdlUGF0aCgpLCAnL2Zha2Uvc3RvcmFnZS9wYXRoJyksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCd0ZXN0IC1kIC9mYWtlL3N0b3JhZ2UvcGF0aCcpLCAnJyksCi0gICAgICAgICMgcG1fcmVhZHkKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbCgnYW5kcm9pZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9jYWNoZT1UcnVlKSwKLSAgICAgICAgIHNlbGYuQ29tbWFuZEVycm9yKCkpLAotICAgICAgICAjIHBtX3JlYWR5Ci0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwoJ2FuZHJvaWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfY2FjaGU9VHJ1ZSksCi0gICAgICAgICBzZWxmLkNvbW1hbmRFcnJvcigpKSwKLSAgICAgICAgIyBwbV9yZWFkeQotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fR2V0QXBwbGljYXRpb25QYXRoc0ludGVybmFsKCdhbmRyb2lkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2NhY2hlPVRydWUpLAotICAgICAgICAgc2VsZi5UaW1lb3V0RXJyb3IoKSkpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRUaW1lb3V0RXJyb3IpOgotICAgICAgICBzZWxmLmRldmljZS5XYWl0VW50aWxGdWxseUJvb3RlZCh3aWZpPUZhbHNlKQotCi0gIGRlZiB0ZXN0V2FpdFVudGlsRnVsbHlCb290ZWRfYm9vdEZhaWxzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgc2VsZi5jYWxsLmFkYi5XYWl0Rm9yRGV2aWNlKCksCi0gICAgICAgICMgc2RfY2FyZF9yZWFkeQotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRFeHRlcm5hbFN0b3JhZ2VQYXRoKCksICcvZmFrZS9zdG9yYWdlL3BhdGgnKSwKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuU2hlbGwoJ3Rlc3QgLWQgL2Zha2Uvc3RvcmFnZS9wYXRoJyksICcnKSwKLSAgICAgICAgIyBwbV9yZWFkeQotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fR2V0QXBwbGljYXRpb25QYXRoc0ludGVybmFsKCdhbmRyb2lkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2NhY2hlPVRydWUpLAotICAgICAgICAgWydwYWNrYWdlOi9zb21lL2Zha2UvcGF0aCddKSwKLSAgICAgICAgIyBib290X2NvbXBsZXRlZAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRQcm9wKCdzeXMuYm9vdF9jb21wbGV0ZWQnLCBjYWNoZT1GYWxzZSksICcwJyksCi0gICAgICAgICMgYm9vdF9jb21wbGV0ZWQKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgnc3lzLmJvb3RfY29tcGxldGVkJywgY2FjaGU9RmFsc2UpLCAnMCcpLAotICAgICAgICAjIGJvb3RfY29tcGxldGVkCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkdldFByb3AoJ3N5cy5ib290X2NvbXBsZXRlZCcsIGNhY2hlPUZhbHNlKSwKLSAgICAgICAgIHNlbGYuVGltZW91dEVycm9yKCkpKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kVGltZW91dEVycm9yKToKLSAgICAgICAgc2VsZi5kZXZpY2UuV2FpdFVudGlsRnVsbHlCb290ZWQod2lmaT1GYWxzZSkKLQotICBkZWYgdGVzdFdhaXRVbnRpbEZ1bGx5Qm9vdGVkX3dpZmlGYWlscyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuV2FpdEZvckRldmljZSgpLAotICAgICAgICAjIHNkX2NhcmRfcmVhZHkKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0RXh0ZXJuYWxTdG9yYWdlUGF0aCgpLCAnL2Zha2Uvc3RvcmFnZS9wYXRoJyksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCd0ZXN0IC1kIC9mYWtlL3N0b3JhZ2UvcGF0aCcpLCAnJyksCi0gICAgICAgICMgcG1fcmVhZHkKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbCgnYW5kcm9pZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9jYWNoZT1UcnVlKSwKLSAgICAgICAgIFsncGFja2FnZTovc29tZS9mYWtlL3BhdGgnXSksCi0gICAgICAgICMgYm9vdF9jb21wbGV0ZWQKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgnc3lzLmJvb3RfY29tcGxldGVkJywgY2FjaGU9RmFsc2UpLCAnMScpLAotICAgICAgICAjIHdpZmlfZW5hYmxlZAotICAgICAgICAoc2VsZi5jYWxsLmFkYi5TaGVsbCgnZHVtcHN5cyB3aWZpJyksICdzdHVmZlxubW9yZSBzdHVmZlxuJyksCi0gICAgICAgICMgd2lmaV9lbmFibGVkCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCdkdW1wc3lzIHdpZmknKSwgJ3N0dWZmXG5tb3JlIHN0dWZmXG4nKSwKLSAgICAgICAgIyB3aWZpX2VuYWJsZWQKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuU2hlbGwoJ2R1bXBzeXMgd2lmaScpLCBzZWxmLlRpbWVvdXRFcnJvcigpKSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZFRpbWVvdXRFcnJvcik6Ci0gICAgICAgIHNlbGYuZGV2aWNlLldhaXRVbnRpbEZ1bGx5Qm9vdGVkKHdpZmk9VHJ1ZSkKLQotCi1AbW9jay5wYXRjaCgndGltZS5zbGVlcCcsIG1vY2suTW9jaygpKQotY2xhc3MgRGV2aWNlVXRpbHNSZWJvb3RUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RSZWJvb3Rfbm9uQmxvY2tpbmcoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlJlYm9vdCgpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5Jc09ubGluZSgpLCBUcnVlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuSXNPbmxpbmUoKSwgRmFsc2UpKToKLSAgICAgIHNlbGYuZGV2aWNlLlJlYm9vdChibG9jaz1GYWxzZSkKLQotICBkZWYgdGVzdFJlYm9vdF9ibG9ja2luZyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuUmVib290KCksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLklzT25saW5lKCksIFRydWUpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5Jc09ubGluZSgpLCBGYWxzZSksCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuV2FpdFVudGlsRnVsbHlCb290ZWQod2lmaT1GYWxzZSkpOgotICAgICAgc2VsZi5kZXZpY2UuUmVib290KGJsb2NrPVRydWUpCi0KLSAgZGVmIHRlc3RSZWJvb3RfYmxvY2tVbnRpbFdpZmkoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlJlYm9vdCgpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5Jc09ubGluZSgpLCBUcnVlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuSXNPbmxpbmUoKSwgRmFsc2UpLAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLldhaXRVbnRpbEZ1bGx5Qm9vdGVkKHdpZmk9VHJ1ZSkpOgotICAgICAgc2VsZi5kZXZpY2UuUmVib290KGJsb2NrPVRydWUsIHdpZmk9VHJ1ZSkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0luc3RhbGxUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgbW9ja19hcGsgPSBfTW9ja0Fwa0hlbHBlcignL2Zha2UvdGVzdC9hcHAuYXBrJywgJ3Rlc3QucGFja2FnZScsIFsncDEnXSkKLQotICBkZWYgdGVzdEluc3RhbGxfbm9Qcmlvckluc3RhbGwoc2VsZik6Ci0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmRldmljZS5idWlsZF92ZXJzaW9uX3NkaywgcmV0dXJuX3ZhbHVlPTIzKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgICAobW9jay5jYWxsLm9zLnBhdGguZXhpc3RzKCcvZmFrZS90ZXN0L2FwcC5hcGsnKSwgVHJ1ZSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbCgndGVzdC5wYWNrYWdlJyksIFtdKSwKLSAgICAgICAgICBzZWxmLmNhbGwuYWRiLkluc3RhbGwoJy9mYWtlL3Rlc3QvYXBwLmFwaycsIHJlaW5zdGFsbD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfZG93bmdyYWRlPUZhbHNlKSwKLSAgICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HcmFudFBlcm1pc3Npb25zKCd0ZXN0LnBhY2thZ2UnLCBbJ3AxJ10pLCBbXSkpOgotICAgICAgICBzZWxmLmRldmljZS5JbnN0YWxsKERldmljZVV0aWxzSW5zdGFsbFRlc3QubW9ja19hcGssIHJldHJpZXM9MCkKLQotICBkZWYgdGVzdEluc3RhbGxfcGVybWlzc2lvbnNQcmVNKHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssIHJldHVybl92YWx1ZT0yMCk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgICAgKG1vY2suY2FsbC5vcy5wYXRoLmV4aXN0cygnL2Zha2UvdGVzdC9hcHAuYXBrJyksIFRydWUpLAotICAgICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwoJ3Rlc3QucGFja2FnZScpLCBbXSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5hZGIuSW5zdGFsbCgnL2Zha2UvdGVzdC9hcHAuYXBrJywgcmVpbnN0YWxsPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfZG93bmdyYWRlPUZhbHNlKSkpOgotICAgICAgICBzZWxmLmRldmljZS5JbnN0YWxsKERldmljZVV0aWxzSW5zdGFsbFRlc3QubW9ja19hcGssIHJldHJpZXM9MCkKLQotICBkZWYgdGVzdEluc3RhbGxfZmluZFBlcm1pc3Npb25zKHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssIHJldHVybl92YWx1ZT0yMyk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgICAgKG1vY2suY2FsbC5vcy5wYXRoLmV4aXN0cygnL2Zha2UvdGVzdC9hcHAuYXBrJyksIFRydWUpLAotICAgICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwoJ3Rlc3QucGFja2FnZScpLCBbXSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5hZGIuSW5zdGFsbCgnL2Zha2UvdGVzdC9hcHAuYXBrJywgcmVpbnN0YWxsPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfZG93bmdyYWRlPUZhbHNlKSksCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR3JhbnRQZXJtaXNzaW9ucygndGVzdC5wYWNrYWdlJywgWydwMSddKSwgW10pKToKLSAgICAgICAgc2VsZi5kZXZpY2UuSW5zdGFsbChEZXZpY2VVdGlsc0luc3RhbGxUZXN0Lm1vY2tfYXBrLCByZXRyaWVzPTApCi0KLSAgZGVmIHRlc3RJbnN0YWxsX3Bhc3NQZXJtaXNzaW9ucyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChtb2NrLmNhbGwub3MucGF0aC5leGlzdHMoJy9mYWtlL3Rlc3QvYXBwLmFwaycpLCBUcnVlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbCgndGVzdC5wYWNrYWdlJyksIFtdKSwKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuSW5zdGFsbCgnL2Zha2UvdGVzdC9hcHAuYXBrJywgcmVpbnN0YWxsPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2Rvd25ncmFkZT1GYWxzZSkpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HcmFudFBlcm1pc3Npb25zKCd0ZXN0LnBhY2thZ2UnLCBbJ3AxJywgJ3AyJ10pLCBbXSkpOgotICAgICAgc2VsZi5kZXZpY2UuSW5zdGFsbChEZXZpY2VVdGlsc0luc3RhbGxUZXN0Lm1vY2tfYXBrLCByZXRyaWVzPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zPVsncDEnLCAncDInXSkKLQotICBkZWYgdGVzdEluc3RhbGxfZGlmZmVyZW50UHJpb3JJbnN0YWxsKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKG1vY2suY2FsbC5vcy5wYXRoLmV4aXN0cygnL2Zha2UvdGVzdC9hcHAuYXBrJyksIFRydWUpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fR2V0QXBwbGljYXRpb25QYXRoc0ludGVybmFsKCd0ZXN0LnBhY2thZ2UnKSwKLSAgICAgICAgIFsnL2Zha2UvZGF0YS9hcHAvdGVzdC5wYWNrYWdlLmFwayddKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0NvbXB1dGVTdGFsZUFwa3MoJ3Rlc3QucGFja2FnZScsCi0gICAgICAgICAgICBbJy9mYWtlL3Rlc3QvYXBwLmFwayddKSwKLSAgICAgICAgIChbJy9mYWtlL3Rlc3QvYXBwLmFwayddLCBOb25lKSksCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuVW5pbnN0YWxsKCd0ZXN0LnBhY2thZ2UnKSwKLSAgICAgICAgc2VsZi5jYWxsLmFkYi5JbnN0YWxsKCcvZmFrZS90ZXN0L2FwcC5hcGsnLCByZWluc3RhbGw9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19kb3duZ3JhZGU9RmFsc2UpKToKLSAgICAgIHNlbGYuZGV2aWNlLkluc3RhbGwoRGV2aWNlVXRpbHNJbnN0YWxsVGVzdC5tb2NrX2FwaywgcmV0cmllcz0wLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucz1bXSkKLQotICBkZWYgdGVzdEluc3RhbGxfZGlmZmVyZW50UHJpb3JJbnN0YWxsX3JlaW5zdGFsbChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChtb2NrLmNhbGwub3MucGF0aC5leGlzdHMoJy9mYWtlL3Rlc3QvYXBwLmFwaycpLCBUcnVlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbCgndGVzdC5wYWNrYWdlJyksCi0gICAgICAgICBbJy9mYWtlL2RhdGEvYXBwL3Rlc3QucGFja2FnZS5hcGsnXSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9Db21wdXRlU3RhbGVBcGtzKCd0ZXN0LnBhY2thZ2UnLAotICAgICAgICAgICAgWycvZmFrZS90ZXN0L2FwcC5hcGsnXSksCi0gICAgICAgICAoWycvZmFrZS90ZXN0L2FwcC5hcGsnXSwgTm9uZSkpLAotICAgICAgICBzZWxmLmNhbGwuYWRiLkluc3RhbGwoJy9mYWtlL3Rlc3QvYXBwLmFwaycsIHJlaW5zdGFsbD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfZG93bmdyYWRlPUZhbHNlKSk6Ci0gICAgICBzZWxmLmRldmljZS5JbnN0YWxsKERldmljZVV0aWxzSW5zdGFsbFRlc3QubW9ja19hcGssCi0gICAgICAgICAgcmVpbnN0YWxsPVRydWUsIHJldHJpZXM9MCwgcGVybWlzc2lvbnM9W10pCi0KLSAgZGVmIHRlc3RJbnN0YWxsX2lkZW50aWNhbFByaW9ySW5zdGFsbF9yZWluc3RhbGwoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAobW9jay5jYWxsLm9zLnBhdGguZXhpc3RzKCcvZmFrZS90ZXN0L2FwcC5hcGsnKSwgVHJ1ZSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwoJ3Rlc3QucGFja2FnZScpLAotICAgICAgICAgWycvZmFrZS9kYXRhL2FwcC90ZXN0LnBhY2thZ2UuYXBrJ10pLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fQ29tcHV0ZVN0YWxlQXBrcygndGVzdC5wYWNrYWdlJywKLSAgICAgICAgICAgIFsnL2Zha2UvdGVzdC9hcHAuYXBrJ10pLAotICAgICAgICAgKFtdLCBOb25lKSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkZvcmNlU3RvcCgndGVzdC5wYWNrYWdlJykpKToKLSAgICAgIHNlbGYuZGV2aWNlLkluc3RhbGwoRGV2aWNlVXRpbHNJbnN0YWxsVGVzdC5tb2NrX2FwaywKLSAgICAgICAgICByZWluc3RhbGw9VHJ1ZSwgcmV0cmllcz0wLCBwZXJtaXNzaW9ucz1bXSkKLQotICBkZWYgdGVzdEluc3RhbGxfbWlzc2luZ0FwayhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChtb2NrLmNhbGwub3MucGF0aC5leGlzdHMoJy9mYWtlL3Rlc3QvYXBwLmFwaycpLCBGYWxzZSkpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICAgIHNlbGYuZGV2aWNlLkluc3RhbGwoRGV2aWNlVXRpbHNJbnN0YWxsVGVzdC5tb2NrX2FwaywgcmV0cmllcz0wKQotCi0gIGRlZiB0ZXN0SW5zdGFsbF9mYWlscyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChtb2NrLmNhbGwub3MucGF0aC5leGlzdHMoJy9mYWtlL3Rlc3QvYXBwLmFwaycpLCBUcnVlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbCgndGVzdC5wYWNrYWdlJyksIFtdKSwKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuSW5zdGFsbCgnL2Zha2UvdGVzdC9hcHAuYXBrJywgcmVpbnN0YWxsPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2Rvd25ncmFkZT1GYWxzZSksCi0gICAgICAgICBzZWxmLkNvbW1hbmRFcnJvcignRmFpbHVyZVxyXG4nKSkpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICAgIHNlbGYuZGV2aWNlLkluc3RhbGwoRGV2aWNlVXRpbHNJbnN0YWxsVGVzdC5tb2NrX2FwaywgcmV0cmllcz0wKQotCi0gIGRlZiB0ZXN0SW5zdGFsbF9kb3duZ3JhZGUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAobW9jay5jYWxsLm9zLnBhdGguZXhpc3RzKCcvZmFrZS90ZXN0L2FwcC5hcGsnKSwgVHJ1ZSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwoJ3Rlc3QucGFja2FnZScpLAotICAgICAgICAgWycvZmFrZS9kYXRhL2FwcC90ZXN0LnBhY2thZ2UuYXBrJ10pLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fQ29tcHV0ZVN0YWxlQXBrcygndGVzdC5wYWNrYWdlJywKLSAgICAgICAgICAgIFsnL2Zha2UvdGVzdC9hcHAuYXBrJ10pLAotICAgICAgICAgKFsnL2Zha2UvdGVzdC9hcHAuYXBrJ10sIE5vbmUpKSwKLSAgICAgICAgc2VsZi5jYWxsLmFkYi5JbnN0YWxsKCcvZmFrZS90ZXN0L2FwcC5hcGsnLCByZWluc3RhbGw9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2Rvd25ncmFkZT1UcnVlKSk6Ci0gICAgICBzZWxmLmRldmljZS5JbnN0YWxsKERldmljZVV0aWxzSW5zdGFsbFRlc3QubW9ja19hcGssCi0gICAgICAgICAgcmVpbnN0YWxsPVRydWUsIHJldHJpZXM9MCwgcGVybWlzc2lvbnM9W10sIGFsbG93X2Rvd25ncmFkZT1UcnVlKQotCi0KLWNsYXNzIERldmljZVV0aWxzSW5zdGFsbFNwbGl0QXBrVGVzdChEZXZpY2VVdGlsc1Rlc3QpOgotCi0gIG1vY2tfYXBrID0gX01vY2tBcGtIZWxwZXIoJ2Jhc2UuYXBrJywgJ3Rlc3QucGFja2FnZScsIFsncDEnXSkKLQotICBkZWYgdGVzdEluc3RhbGxTcGxpdEFwa19ub1ByaW9ySW5zdGFsbChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9DaGVja1Nka0xldmVsKDIxKSksCi0gICAgICAgIChtb2NrLmNhbGwuZGV2aWwuYW5kcm9pZC5zZGsuc3BsaXRfc2VsZWN0LlNlbGVjdFNwbGl0cygKLSAgICAgICAgICAgIHNlbGYuZGV2aWNlLCAnYmFzZS5hcGsnLAotICAgICAgICAgICAgWydzcGxpdDEuYXBrJywgJ3NwbGl0Mi5hcGsnLCAnc3BsaXQzLmFwayddLAotICAgICAgICAgICAgYWxsb3dfY2FjaGVkX3Byb3BzPUZhbHNlKSwKLSAgICAgICAgIFsnc3BsaXQyLmFwayddKSwKLSAgICAgICAgKG1vY2suY2FsbC5vcy5wYXRoLmV4aXN0cygnYmFzZS5hcGsnKSwgVHJ1ZSksCi0gICAgICAgIChtb2NrLmNhbGwub3MucGF0aC5leGlzdHMoJ3NwbGl0Mi5hcGsnKSwgVHJ1ZSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwoJ3Rlc3QucGFja2FnZScpLCBbXSksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLkluc3RhbGxNdWx0aXBsZSgKLSAgICAgICAgICAgIFsnYmFzZS5hcGsnLCAnc3BsaXQyLmFwayddLCBwYXJ0aWFsPU5vbmUsIHJlaW5zdGFsbD1GYWxzZSwKLSAgICAgICAgICAgIGFsbG93X2Rvd25ncmFkZT1GYWxzZSkpKToKLSAgICAgIHNlbGYuZGV2aWNlLkluc3RhbGxTcGxpdEFwayhEZXZpY2VVdGlsc0luc3RhbGxTcGxpdEFwa1Rlc3QubW9ja19hcGssCi0gICAgICAgICAgWydzcGxpdDEuYXBrJywgJ3NwbGl0Mi5hcGsnLCAnc3BsaXQzLmFwayddLCBwZXJtaXNzaW9ucz1bXSwgcmV0cmllcz0wKQotCi0gIGRlZiB0ZXN0SW5zdGFsbFNwbGl0QXBrX3BhcnRpYWxJbnN0YWxsKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0NoZWNrU2RrTGV2ZWwoMjEpKSwKLSAgICAgICAgKG1vY2suY2FsbC5kZXZpbC5hbmRyb2lkLnNkay5zcGxpdF9zZWxlY3QuU2VsZWN0U3BsaXRzKAotICAgICAgICAgICAgc2VsZi5kZXZpY2UsICdiYXNlLmFwaycsCi0gICAgICAgICAgICBbJ3NwbGl0MS5hcGsnLCAnc3BsaXQyLmFwaycsICdzcGxpdDMuYXBrJ10sCi0gICAgICAgICAgICBhbGxvd19jYWNoZWRfcHJvcHM9RmFsc2UpLAotICAgICAgICAgWydzcGxpdDIuYXBrJ10pLAotICAgICAgICAobW9jay5jYWxsLm9zLnBhdGguZXhpc3RzKCdiYXNlLmFwaycpLCBUcnVlKSwKLSAgICAgICAgKG1vY2suY2FsbC5vcy5wYXRoLmV4aXN0cygnc3BsaXQyLmFwaycpLCBUcnVlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0dldEFwcGxpY2F0aW9uUGF0aHNJbnRlcm5hbCgndGVzdC5wYWNrYWdlJyksCi0gICAgICAgICBbJ2Jhc2Utb24tZGV2aWNlLmFwaycsICdzcGxpdDItb24tZGV2aWNlLmFwayddKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0NvbXB1dGVTdGFsZUFwa3MoJ3Rlc3QucGFja2FnZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnYmFzZS5hcGsnLCAnc3BsaXQyLmFwayddKSwKLSAgICAgICAgIChbJ3NwbGl0Mi5hcGsnXSwgTm9uZSkpLAotICAgICAgICAoc2VsZi5jYWxsLmFkYi5JbnN0YWxsTXVsdGlwbGUoCi0gICAgICAgICAgICBbJ3NwbGl0Mi5hcGsnXSwgcGFydGlhbD0ndGVzdC5wYWNrYWdlJywgcmVpbnN0YWxsPVRydWUsCi0gICAgICAgICAgICBhbGxvd19kb3duZ3JhZGU9RmFsc2UpKSk6Ci0gICAgICBzZWxmLmRldmljZS5JbnN0YWxsU3BsaXRBcGsoRGV2aWNlVXRpbHNJbnN0YWxsU3BsaXRBcGtUZXN0Lm1vY2tfYXBrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3BsaXQxLmFwaycsICdzcGxpdDIuYXBrJywgJ3NwbGl0My5hcGsnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWluc3RhbGw9VHJ1ZSwgcGVybWlzc2lvbnM9W10sIHJldHJpZXM9MCkKLQotICBkZWYgdGVzdEluc3RhbGxTcGxpdEFwa19kb3duZ3JhZGUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fQ2hlY2tTZGtMZXZlbCgyMSkpLAotICAgICAgICAobW9jay5jYWxsLmRldmlsLmFuZHJvaWQuc2RrLnNwbGl0X3NlbGVjdC5TZWxlY3RTcGxpdHMoCi0gICAgICAgICAgICBzZWxmLmRldmljZSwgJ2Jhc2UuYXBrJywKLSAgICAgICAgICAgIFsnc3BsaXQxLmFwaycsICdzcGxpdDIuYXBrJywgJ3NwbGl0My5hcGsnXSwKLSAgICAgICAgICAgIGFsbG93X2NhY2hlZF9wcm9wcz1GYWxzZSksCi0gICAgICAgICBbJ3NwbGl0Mi5hcGsnXSksCi0gICAgICAgIChtb2NrLmNhbGwub3MucGF0aC5leGlzdHMoJ2Jhc2UuYXBrJyksIFRydWUpLAotICAgICAgICAobW9jay5jYWxsLm9zLnBhdGguZXhpc3RzKCdzcGxpdDIuYXBrJyksIFRydWUpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fR2V0QXBwbGljYXRpb25QYXRoc0ludGVybmFsKCd0ZXN0LnBhY2thZ2UnKSwKLSAgICAgICAgIFsnYmFzZS1vbi1kZXZpY2UuYXBrJywgJ3NwbGl0Mi1vbi1kZXZpY2UuYXBrJ10pLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fQ29tcHV0ZVN0YWxlQXBrcygndGVzdC5wYWNrYWdlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydiYXNlLmFwaycsICdzcGxpdDIuYXBrJ10pLAotICAgICAgICAgKFsnc3BsaXQyLmFwayddLCBOb25lKSksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLkluc3RhbGxNdWx0aXBsZSgKLSAgICAgICAgICAgIFsnc3BsaXQyLmFwayddLCBwYXJ0aWFsPSd0ZXN0LnBhY2thZ2UnLCByZWluc3RhbGw9VHJ1ZSwKLSAgICAgICAgICAgIGFsbG93X2Rvd25ncmFkZT1UcnVlKSkpOgotICAgICAgc2VsZi5kZXZpY2UuSW5zdGFsbFNwbGl0QXBrKERldmljZVV0aWxzSW5zdGFsbFNwbGl0QXBrVGVzdC5tb2NrX2FwaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3NwbGl0MS5hcGsnLCAnc3BsaXQyLmFwaycsICdzcGxpdDMuYXBrJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnN0YWxsPVRydWUsIHBlcm1pc3Npb25zPVtdLCByZXRyaWVzPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfZG93bmdyYWRlPVRydWUpCi0KLSAgZGVmIHRlc3RJbnN0YWxsU3BsaXRBcGtfbWlzc2luZ1NwbGl0KHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX0NoZWNrU2RrTGV2ZWwoMjEpKSwKLSAgICAgICAgKG1vY2suY2FsbC5kZXZpbC5hbmRyb2lkLnNkay5zcGxpdF9zZWxlY3QuU2VsZWN0U3BsaXRzKAotICAgICAgICAgICAgc2VsZi5kZXZpY2UsICdiYXNlLmFwaycsCi0gICAgICAgICAgICBbJ3NwbGl0MS5hcGsnLCAnc3BsaXQyLmFwaycsICdzcGxpdDMuYXBrJ10sCi0gICAgICAgICAgICBhbGxvd19jYWNoZWRfcHJvcHM9RmFsc2UpLAotICAgICAgICAgWydzcGxpdDIuYXBrJ10pLAotICAgICAgICAobW9jay5jYWxsLm9zLnBhdGguZXhpc3RzKCdiYXNlLmFwaycpLCBUcnVlKSwKLSAgICAgICAgKG1vY2suY2FsbC5vcy5wYXRoLmV4aXN0cygnc3BsaXQyLmFwaycpLCBGYWxzZSkpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICAgIHNlbGYuZGV2aWNlLkluc3RhbGxTcGxpdEFwayhEZXZpY2VVdGlsc0luc3RhbGxTcGxpdEFwa1Rlc3QubW9ja19hcGssCi0gICAgICAgICAgICBbJ3NwbGl0MS5hcGsnLCAnc3BsaXQyLmFwaycsICdzcGxpdDMuYXBrJ10sIHBlcm1pc3Npb25zPVtdLAotICAgICAgICAgICAgcmV0cmllcz0wKQotCi0KLWNsYXNzIERldmljZVV0aWxzVW5pbnN0YWxsVGVzdChEZXZpY2VVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0VW5pbnN0YWxsX2NhbGxzVGhyb3VnaChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwoJ3Rlc3QucGFja2FnZScpLAotICAgICAgICAgWycvcGF0aC5hcGsnXSksCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuVW5pbnN0YWxsKCd0ZXN0LnBhY2thZ2UnLCBUcnVlKSk6Ci0gICAgICBzZWxmLmRldmljZS5Vbmluc3RhbGwoJ3Rlc3QucGFja2FnZScsIFRydWUpCi0KLSAgZGVmIHRlc3RVbmluc3RhbGxfbm9vcChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwoJ3Rlc3QucGFja2FnZScpLCBbXSkpOgotICAgICAgc2VsZi5kZXZpY2UuVW5pbnN0YWxsKCd0ZXN0LnBhY2thZ2UnLCBUcnVlKQotCi0KLWNsYXNzIERldmljZVV0aWxzU3VUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RTdV9wcmVNKHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrLAotICAgICAgICByZXR1cm5fdmFsdWU9dmVyc2lvbl9jb2Rlcy5MT0xMSVBPUF9NUjEpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ3N1IC1jIGZvbycsIHNlbGYuZGV2aWNlLl9TdSgnZm9vJykpCi0KLSAgZGVmIHRlc3RTdV9tQW5kQWJvdmUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssCi0gICAgICAgIHJldHVybl92YWx1ZT12ZXJzaW9uX2NvZGVzLk1BUlNITUFMTE9XKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdzdSAwIGZvbycsIHNlbGYuZGV2aWNlLl9TdSgnZm9vJykpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNSdW5TaGVsbENvbW1hbmRUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHN1cGVyKERldmljZVV0aWxzUnVuU2hlbGxDb21tYW5kVGVzdCwgc2VsZikuc2V0VXAoKQotICAgIHNlbGYuZGV2aWNlLk5lZWRzU1UgPSBtb2NrLk1vY2socmV0dXJuX3ZhbHVlPUZhbHNlKQotCi0gIGRlZiB0ZXN0UnVuU2hlbGxDb21tYW5kX2NvbW1hbmRBc0xpc3Qoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoc2VsZi5jYWxsLmFkYi5TaGVsbCgncG0gbGlzdCBwYWNrYWdlcycpLCAnJyk6Ci0gICAgICBzZWxmLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgWydwbScsICdsaXN0JywgJ3BhY2thZ2VzJ10sIGNoZWNrX3JldHVybj1UcnVlKQotCi0gIGRlZiB0ZXN0UnVuU2hlbGxDb21tYW5kX2NvbW1hbmRBc0xpc3RRdW90ZWQoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoc2VsZi5jYWxsLmFkYi5TaGVsbCgiZWNobyAnaGVsbG8gd29ybGQnICckMTAnIiksICcnKToKLSAgICAgIHNlbGYuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICBbJ2VjaG8nLCAnaGVsbG8gd29ybGQnLCAnJDEwJ10sIGNoZWNrX3JldHVybj1UcnVlKQotCi0gIGRlZiB0ZXN0UnVuU2hlbGxDb21tYW5kX2NvbW1hbmRBc1N0cmluZyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbChzZWxmLmNhbGwuYWRiLlNoZWxsKCdlY2hvICIkVkFSIicpLCAnJyk6Ci0gICAgICBzZWxmLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgJ2VjaG8gIiRWQVIiJywgc2hlbGw9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpCi0KLSAgZGVmIHRlc3ROZXdSdW5TaGVsbEltcGxfd2l0aEVudihzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmFkYi5TaGVsbCgnVkFSPXNvbWVfc3RyaW5nIGVjaG8gIiRWQVIiJyksICcnKToKLSAgICAgIHNlbGYuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAnZWNobyAiJFZBUiInLCBzaGVsbD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSwKLSAgICAgICAgICBlbnY9eydWQVInOiAnc29tZV9zdHJpbmcnfSkKLQotICBkZWYgdGVzdE5ld1J1blNoZWxsSW1wbF93aXRoRW52UXVvdGVkKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlNoZWxsKCdQQVRIPSIkUEFUSDovb3RoZXIvcGF0aCIgcnVuX3RoaXMnKSwgJycpOgotICAgICAgc2VsZi5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgIFsncnVuX3RoaXMnXSwgY2hlY2tfcmV0dXJuPVRydWUsIGVudj17J1BBVEgnOiAnJFBBVEg6L290aGVyL3BhdGgnfSkKLQotICBkZWYgdGVzdE5ld1J1blNoZWxsSW1wbF93aXRoRW52X2ZhaWx1cmUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICBzZWxmLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgWydzb21lX2NtZCddLCBjaGVja19yZXR1cm49VHJ1ZSwgZW52PXsnSU5WQUxJRCBOQU1FJzogJ3ZhbHVlJ30pCi0KLSAgZGVmIHRlc3ROZXdSdW5TaGVsbEltcGxfd2l0aEN3ZChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbChzZWxmLmNhbGwuYWRiLlNoZWxsKCdjZCAvc29tZS90ZXN0L3BhdGggJiYgbHMnKSwgJycpOgotICAgICAgc2VsZi5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgIFsnbHMnXSwgY2hlY2tfcmV0dXJuPVRydWUsIGN3ZD0nL3NvbWUvdGVzdC9wYXRoJykKLQotICBkZWYgdGVzdE5ld1J1blNoZWxsSW1wbF93aXRoQ3dkUXVvdGVkKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlNoZWxsKCJjZCAnL3NvbWUgdGVzdC9wYXRoIHdpdGgvc3BhY2VzJyAmJiBscyIpLCAnJyk6Ci0gICAgICBzZWxmLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgWydscyddLCBjaGVja19yZXR1cm49VHJ1ZSwgY3dkPScvc29tZSB0ZXN0L3BhdGggd2l0aC9zcGFjZXMnKQotCi0gIGRlZiB0ZXN0UnVuU2hlbGxDb21tYW5kX3dpdGhIdWdlQ21kKHNlbGYpOgotICAgIHBheWxvYWQgPSAnaGkhICcgKiAxMDI0Ci0gICAgZXhwZWN0ZWRfY21kID0gImVjaG8gJyVzJyIgJSBwYXlsb2FkCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgKG1vY2suY2FsbC5kZXZpbC5hbmRyb2lkLmRldmljZV90ZW1wX2ZpbGUuRGV2aWNlVGVtcEZpbGUoCi0gICAgICAgICAgc2VsZi5hZGIsIHN1ZmZpeD0nLnNoJyksIE1vY2tUZW1wRmlsZSgnL3NkY2FyZC90ZW1wLTEyMy5zaCcpKSwKLSAgICAgIHNlbGYuY2FsbC5kZXZpY2UuX1dyaXRlRmlsZVdpdGhQdXNoKCcvc2RjYXJkL3RlbXAtMTIzLnNoJywgZXhwZWN0ZWRfY21kKSwKLSAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCdzaCAvc2RjYXJkL3RlbXAtMTIzLnNoJyksIHBheWxvYWQgKyAnXG4nKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICBbcGF5bG9hZF0sCi0gICAgICAgICAgc2VsZi5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKFsnZWNobycsIHBheWxvYWRdLCBjaGVja19yZXR1cm49VHJ1ZSkpCi0KLSAgZGVmIHRlc3RSdW5TaGVsbENvbW1hbmRfd2l0aEh1Z2VDbWRBbmRTdShzZWxmKToKLSAgICBwYXlsb2FkID0gJ2hpISAnICogMTAyNAotICAgIGV4cGVjdGVkX2NtZF93aXRob3V0X3N1ID0gIiIic2ggLWMgJ2VjaG8gJyInIiclcyciJyInJyIiIiAlIHBheWxvYWQKLSAgICBleHBlY3RlZF9jbWQgPSAnc3UgLWMgJXMnICUgZXhwZWN0ZWRfY21kX3dpdGhvdXRfc3UKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAoc2VsZi5jYWxsLmRldmljZS5OZWVkc1NVKCksIFRydWUpLAotICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX1N1KGV4cGVjdGVkX2NtZF93aXRob3V0X3N1KSwgZXhwZWN0ZWRfY21kKSwKLSAgICAgIChtb2NrLmNhbGwuZGV2aWwuYW5kcm9pZC5kZXZpY2VfdGVtcF9maWxlLkRldmljZVRlbXBGaWxlKAotICAgICAgICAgIHNlbGYuYWRiLCBzdWZmaXg9Jy5zaCcpLCBNb2NrVGVtcEZpbGUoJy9zZGNhcmQvdGVtcC0xMjMuc2gnKSksCi0gICAgICBzZWxmLmNhbGwuZGV2aWNlLl9Xcml0ZUZpbGVXaXRoUHVzaCgnL3NkY2FyZC90ZW1wLTEyMy5zaCcsIGV4cGVjdGVkX2NtZCksCi0gICAgICAoc2VsZi5jYWxsLmFkYi5TaGVsbCgnc2ggL3NkY2FyZC90ZW1wLTEyMy5zaCcpLCBwYXlsb2FkICsgJ1xuJykpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgW3BheWxvYWRdLAotICAgICAgICAgIHNlbGYuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgWydlY2hvJywgcGF5bG9hZF0sIGNoZWNrX3JldHVybj1UcnVlLCBhc19yb290PVRydWUpKQotCi0gIGRlZiB0ZXN0UnVuU2hlbGxDb21tYW5kX3dpdGhTdShzZWxmKToKLSAgICBleHBlY3RlZF9jbWRfd2l0aG91dF9zdSA9ICJzaCAtYyAnc2V0cHJvcCBzZXJ2aWNlLmFkYi5yb290IDAnIgotICAgIGV4cGVjdGVkX2NtZCA9ICdzdSAtYyAlcycgJSBleHBlY3RlZF9jbWRfd2l0aG91dF9zdQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuTmVlZHNTVSgpLCBUcnVlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX1N1KGV4cGVjdGVkX2NtZF93aXRob3V0X3N1KSwgZXhwZWN0ZWRfY21kKSwKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuU2hlbGwoZXhwZWN0ZWRfY21kKSwgJycpKToKLSAgICAgIHNlbGYuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICBbJ3NldHByb3AnLCAnc2VydmljZS5hZGIucm9vdCcsICcwJ10sCi0gICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUsIGFzX3Jvb3Q9VHJ1ZSkKLQotICBkZWYgdGVzdFJ1blNoZWxsQ29tbWFuZF93aXRoUnVuQXMoc2VsZik6Ci0gICAgZXhwZWN0ZWRfY21kX3dpdGhvdXRfcnVuX2FzID0gInNoIC1jICdta2RpciAtcCBmaWxlcyciCi0gICAgZXhwZWN0ZWRfY21kID0gKAotICAgICAgICAncnVuLWFzIG9yZy5kZXZpbC50ZXN0X3BhY2thZ2UgJXMnICUgZXhwZWN0ZWRfY21kX3dpdGhvdXRfcnVuX2FzKQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKHNlbGYuY2FsbC5hZGIuU2hlbGwoZXhwZWN0ZWRfY21kKSwgJycpOgotICAgICAgc2VsZi5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgIFsnbWtkaXInLCAnLXAnLCAnZmlsZXMnXSwKLSAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgcnVuX2FzPSdvcmcuZGV2aWwudGVzdF9wYWNrYWdlJykKLQotICBkZWYgdGVzdFJ1blNoZWxsQ29tbWFuZF93aXRoUnVuQXNBbmRTdShzZWxmKToKLSAgICBleHBlY3RlZF9jbWRfd2l0aF9ub3RoaW5nID0gInNoIC1jICdta2RpciAtcCBmaWxlcyciCi0gICAgZXhwZWN0ZWRfY21kX3dpdGhfcnVuX2FzID0gKAotICAgICAgICAncnVuLWFzIG9yZy5kZXZpbC50ZXN0X3BhY2thZ2UgJXMnICUgZXhwZWN0ZWRfY21kX3dpdGhfbm90aGluZykKLSAgICBleHBlY3RlZF9jbWRfd2l0aG91dF9zdSA9ICgKLSAgICAgICAgJ3NoIC1jICVzJyAlIGNtZF9oZWxwZXIuU2luZ2xlUXVvdGUoZXhwZWN0ZWRfY21kX3dpdGhfcnVuX2FzKSkKLSAgICBleHBlY3RlZF9jbWQgPSAnc3UgLWMgJXMnICUgZXhwZWN0ZWRfY21kX3dpdGhvdXRfc3UKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLk5lZWRzU1UoKSwgVHJ1ZSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9TdShleHBlY3RlZF9jbWRfd2l0aG91dF9zdSksIGV4cGVjdGVkX2NtZCksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKGV4cGVjdGVkX2NtZCksICcnKSk6Ci0gICAgICBzZWxmLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgWydta2RpcicsICctcCcsICdmaWxlcyddLAotICAgICAgICAgIGNoZWNrX3JldHVybj1UcnVlLCBydW5fYXM9J29yZy5kZXZpbC50ZXN0X3BhY2thZ2UnLAotICAgICAgICAgIGFzX3Jvb3Q9VHJ1ZSkKLQotICBkZWYgdGVzdFJ1blNoZWxsQ29tbWFuZF9tYW55TGluZXMoc2VsZik6Ci0gICAgY21kID0gJ2xzIC9zb21lL3BhdGgnCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoc2VsZi5jYWxsLmFkYi5TaGVsbChjbWQpLCAnZmlsZTFcbmZpbGUyXG5maWxlM1xuJyk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICBbJ2ZpbGUxJywgJ2ZpbGUyJywgJ2ZpbGUzJ10sCi0gICAgICAgICAgc2VsZi5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKGNtZC5zcGxpdCgpLCBjaGVja19yZXR1cm49VHJ1ZSkpCi0KLSAgZGVmIHRlc3RSdW5TaGVsbENvbW1hbmRfbWFueUxpbmVzUmF3T3V0cHV0KHNlbGYpOgotICAgIGNtZCA9ICdscyAvc29tZS9wYXRoJwotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKHNlbGYuY2FsbC5hZGIuU2hlbGwoY21kKSwgJ1xyZmlsZTFcbmZpbGUyXHJcbmZpbGUzXG4nKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgICdccmZpbGUxXG5maWxlMlxyXG5maWxlM1xuJywKLSAgICAgICAgICBzZWxmLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAgIGNtZC5zcGxpdCgpLCBjaGVja19yZXR1cm49VHJ1ZSwgcmF3X291dHB1dD1UcnVlKSkKLQotICBkZWYgdGVzdFJ1blNoZWxsQ29tbWFuZF9zaW5nbGVMaW5lX3N1Y2Nlc3Moc2VsZik6Ci0gICAgY21kID0gJ2VjaG8gJFZBTFVFJwotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKHNlbGYuY2FsbC5hZGIuU2hlbGwoY21kKSwgJ3NvbWUgdmFsdWVcbicpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgJ3NvbWUgdmFsdWUnLAotICAgICAgICAgIHNlbGYuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgY21kLCBzaGVsbD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSwgc2luZ2xlX2xpbmU9VHJ1ZSkpCi0KLSAgZGVmIHRlc3RSdW5TaGVsbENvbW1hbmRfc2luZ2xlTGluZV9zdWNjZXNzRW1wdHlMaW5lKHNlbGYpOgotICAgIGNtZCA9ICdlY2hvICRWQUxVRScKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbChzZWxmLmNhbGwuYWRiLlNoZWxsKGNtZCksICdcbicpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgJycsCi0gICAgICAgICAgc2VsZi5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICBjbWQsIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlLCBzaW5nbGVfbGluZT1UcnVlKSkKLQotICBkZWYgdGVzdFJ1blNoZWxsQ29tbWFuZF9zaW5nbGVMaW5lX3N1Y2Nlc3NXaXRob3V0RW5kTGluZShzZWxmKToKLSAgICBjbWQgPSAnZWNobyAtbiAkVkFMVUUnCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoc2VsZi5jYWxsLmFkYi5TaGVsbChjbWQpLCAnc29tZSB2YWx1ZScpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgJ3NvbWUgdmFsdWUnLAotICAgICAgICAgIHNlbGYuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgY21kLCBzaGVsbD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSwgc2luZ2xlX2xpbmU9VHJ1ZSkpCi0KLSAgZGVmIHRlc3RSdW5TaGVsbENvbW1hbmRfc2luZ2xlTGluZV9zdWNjZXNzTm9PdXRwdXQoc2VsZik6Ci0gICAgY21kID0gJ2VjaG8gLW4gJFZBTFVFJwotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKHNlbGYuY2FsbC5hZGIuU2hlbGwoY21kKSwgJycpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgJycsCi0gICAgICAgICAgc2VsZi5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICBjbWQsIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlLCBzaW5nbGVfbGluZT1UcnVlKSkKLQotICBkZWYgdGVzdFJ1blNoZWxsQ29tbWFuZF9zaW5nbGVMaW5lX2ZhaWxUb29NYW55TGluZXMoc2VsZik6Ci0gICAgY21kID0gJ2VjaG8gJFZBTFVFJwotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKHNlbGYuY2FsbC5hZGIuU2hlbGwoY21kKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnc29tZSB2YWx1ZVxuYW5vdGhlciB2YWx1ZVxuJyk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgICAgc2VsZi5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgY21kLCBzaGVsbD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSwgc2luZ2xlX2xpbmU9VHJ1ZSkKLQotICBkZWYgdGVzdFJ1blNoZWxsQ29tbWFuZF9jaGVja1JldHVybl9zdWNjZXNzKHNlbGYpOgotICAgIGNtZCA9ICdlY2hvICRBTkRST0lEX0RBVEEnCi0gICAgb3V0cHV0ID0gJy9kYXRhXG4nCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoc2VsZi5jYWxsLmFkYi5TaGVsbChjbWQpLCBvdXRwdXQpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgW291dHB1dC5yc3RyaXAoKV0sCi0gICAgICAgICAgc2VsZi5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKGNtZCwgc2hlbGw9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpKQotCi0gIGRlZiB0ZXN0UnVuU2hlbGxDb21tYW5kX2NoZWNrUmV0dXJuX2ZhaWx1cmUoc2VsZik6Ci0gICAgY21kID0gJ2xzIC9yb290JwotICAgIG91dHB1dCA9ICdvcGVuZGlyIGZhaWxlZCwgUGVybWlzc2lvbiBkZW5pZWRcbicKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbChzZWxmLmNhbGwuYWRiLlNoZWxsKGNtZCksIHNlbGYuU2hlbGxFcnJvcihvdXRwdXQpKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5BZGJDb21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgICBzZWxmLmRldmljZS5SdW5TaGVsbENvbW1hbmQoY21kLnNwbGl0KCksIGNoZWNrX3JldHVybj1UcnVlKQotCi0gIGRlZiB0ZXN0UnVuU2hlbGxDb21tYW5kX2NoZWNrUmV0dXJuX2Rpc2FibGVkKHNlbGYpOgotICAgIGNtZCA9ICdscyAvcm9vdCcKLSAgICBvdXRwdXQgPSAnb3BlbmRpciBmYWlsZWQsIFBlcm1pc3Npb24gZGVuaWVkXG4nCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoc2VsZi5jYWxsLmFkYi5TaGVsbChjbWQpLCBzZWxmLlNoZWxsRXJyb3Iob3V0cHV0KSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICBbb3V0cHV0LnJzdHJpcCgpXSwKLSAgICAgICAgICBzZWxmLmRldmljZS5SdW5TaGVsbENvbW1hbmQoY21kLnNwbGl0KCksIGNoZWNrX3JldHVybj1GYWxzZSkpCi0KLSAgZGVmIHRlc3RSdW5TaGVsbENvbW1hbmRfbGFyZ2VPdXRwdXRfZW5hYmxlZChzZWxmKToKLSAgICBjbWQgPSAnZWNobyAkVkFMVUUnCi0gICAgdGVtcF9maWxlID0gTW9ja1RlbXBGaWxlKCcvc2RjYXJkL3RlbXAtMTIzJykKLSAgICBjbWRfcmVkaXJlY3QgPSAnKCAlcyApPiVzIDI+JjEnICUgKGNtZCwgdGVtcF9maWxlLm5hbWUpCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAobW9jay5jYWxsLmRldmlsLmFuZHJvaWQuZGV2aWNlX3RlbXBfZmlsZS5EZXZpY2VUZW1wRmlsZShzZWxmLmFkYiksCi0gICAgICAgICAgICB0ZW1wX2ZpbGUpLAotICAgICAgICAoc2VsZi5jYWxsLmFkYi5TaGVsbChjbWRfcmVkaXJlY3QpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUmVhZEZpbGUodGVtcF9maWxlLm5hbWUsIGZvcmNlX3B1bGw9VHJ1ZSksCi0gICAgICAgICAnc29tZXRoaW5nJykpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgWydzb21ldGhpbmcnXSwKLSAgICAgICAgICBzZWxmLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAgIGNtZCwgc2hlbGw9VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUsIGNoZWNrX3JldHVybj1UcnVlKSkKLQotICBkZWYgdGVzdFJ1blNoZWxsQ29tbWFuZF9sYXJnZU91dHB1dF9kaXNhYmxlZE5vVHJpZ2dlcihzZWxmKToKLSAgICBjbWQgPSAnc29tZXRoaW5nJwotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKHNlbGYuY2FsbC5hZGIuU2hlbGwoY21kKSwgc2VsZi5TaGVsbEVycm9yKCcnKSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgICAgc2VsZi5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKFtjbWRdLCBjaGVja19yZXR1cm49VHJ1ZSkKLQotICBkZWYgdGVzdFJ1blNoZWxsQ29tbWFuZF9sYXJnZU91dHB1dF9kaXNhYmxlZFRyaWdnZXIoc2VsZik6Ci0gICAgY21kID0gJ2VjaG8gJFZBTFVFJwotICAgIHRlbXBfZmlsZSA9IE1vY2tUZW1wRmlsZSgnL3NkY2FyZC90ZW1wLTEyMycpCi0gICAgY21kX3JlZGlyZWN0ID0gJyggJXMgKT4lcyAyPiYxJyAlIChjbWQsIHRlbXBfZmlsZS5uYW1lKQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuU2hlbGwoY21kKSwgc2VsZi5TaGVsbEVycm9yKCcnLCBOb25lKSksCi0gICAgICAgIChtb2NrLmNhbGwuZGV2aWwuYW5kcm9pZC5kZXZpY2VfdGVtcF9maWxlLkRldmljZVRlbXBGaWxlKHNlbGYuYWRiKSwKLSAgICAgICAgICAgIHRlbXBfZmlsZSksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKGNtZF9yZWRpcmVjdCkpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SZWFkRmlsZShtb2NrLkFOWSwgZm9yY2VfcHVsbD1UcnVlKSwKLSAgICAgICAgICdzb21ldGhpbmcnKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICBbJ3NvbWV0aGluZyddLAotICAgICAgICAgIHNlbGYuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZChjbWQsIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlKSkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc1J1blBpcGVkU2hlbGxDb21tYW5kVGVzdChEZXZpY2VVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0UnVuUGlwZWRTaGVsbENvbW1hbmRfc3VjY2VzcyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAncHMgfCBncmVwIGZvbzsgZWNobyAiUElQRVNUQVRVUzogJHtQSVBFU1RBVFVTW0BdfSInLAotICAgICAgICAgICAgc2hlbGw9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpLAotICAgICAgICBbJ1RoaXMgbGluZSBjb250YWlucyBmb28nLCAnUElQRVNUQVRVUzogMCAwJ10pOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydUaGlzIGxpbmUgY29udGFpbnMgZm9vJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRldmljZS5fUnVuUGlwZWRTaGVsbENvbW1hbmQoJ3BzIHwgZ3JlcCBmb28nKSkKLQotICBkZWYgdGVzdFJ1blBpcGVkU2hlbGxDb21tYW5kX2ZpcnN0Q29tbWFuZEZhaWxzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICdwcyB8IGdyZXAgZm9vOyBlY2hvICJQSVBFU1RBVFVTOiAke1BJUEVTVEFUVVNbQF19IicsCi0gICAgICAgICAgICBzaGVsbD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSksCi0gICAgICAgIFsnUElQRVNUQVRVUzogMSAwJ10pOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkFkYlNoZWxsQ29tbWFuZEZhaWxlZEVycm9yKSBhcyBlYzoKLSAgICAgICAgc2VsZi5kZXZpY2UuX1J1blBpcGVkU2hlbGxDb21tYW5kKCdwcyB8IGdyZXAgZm9vJykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsxLCAwXSwgZWMuZXhjZXB0aW9uLnN0YXR1cykKLQotICBkZWYgdGVzdFJ1blBpcGVkU2hlbGxDb21tYW5kX3NlY29uZENvbW1hbmRGYWlscyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAncHMgfCBncmVwIGZvbzsgZWNobyAiUElQRVNUQVRVUzogJHtQSVBFU1RBVFVTW0BdfSInLAotICAgICAgICAgICAgc2hlbGw9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpLAotICAgICAgICBbJ1BJUEVTVEFUVVM6IDAgMSddKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5BZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcikgYXMgZWM6Ci0gICAgICAgIHNlbGYuZGV2aWNlLl9SdW5QaXBlZFNoZWxsQ29tbWFuZCgncHMgfCBncmVwIGZvbycpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscyhbMCwgMV0sIGVjLmV4Y2VwdGlvbi5zdGF0dXMpCi0KLSAgZGVmIHRlc3RSdW5QaXBlZFNoZWxsQ29tbWFuZF9vdXRwdXRDdXRPZmYoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgJ3BzIHwgZ3JlcCBmb287IGVjaG8gIlBJUEVTVEFUVVM6ICR7UElQRVNUQVRVU1tAXX0iJywKLSAgICAgICAgICAgIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgWydmb28uYmFyJ10gKiAyNTYgKyBbJ2Zvby5iYSddKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5BZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcikgYXMgZWM6Ci0gICAgICAgIHNlbGYuZGV2aWNlLl9SdW5QaXBlZFNoZWxsQ29tbWFuZCgncHMgfCBncmVwIGZvbycpCi0gICAgICBzZWxmLmFzc2VydElzKE5vbmUsIGVjLmV4Y2VwdGlvbi5zdGF0dXMpCi0KLQotQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLWNsYXNzIERldmljZVV0aWxzS2lsbEFsbFRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdEtpbGxBbGxfbm9NYXRjaGluZ1Byb2Nlc3Nlc0ZhaWx1cmUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoc2VsZi5jYWxsLmRldmljZS5MaXN0UHJvY2Vzc2VzKCd0ZXN0X3Byb2Nlc3MnKSwgW10pOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICAgIHNlbGYuZGV2aWNlLktpbGxBbGwoJ3Rlc3RfcHJvY2VzcycpCi0KLSAgZGVmIHRlc3RLaWxsQWxsX25vTWF0Y2hpbmdQcm9jZXNzZXNRdWlldChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbChzZWxmLmNhbGwuZGV2aWNlLkxpc3RQcm9jZXNzZXMoJ3Rlc3RfcHJvY2VzcycpLCBbXSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbGYuZGV2aWNlLktpbGxBbGwoJ3Rlc3RfcHJvY2VzcycsIHF1aWV0PVRydWUpKQotCi0gIGRlZiB0ZXN0S2lsbEFsbF9ub25ibG9ja2luZyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkxpc3RQcm9jZXNzZXMoJ3NvbWUucHJvY2VzcycpLAotICAgICAgICAgUHJvY2Vzc2VzKCgnc29tZS5wcm9jZXNzJywgMTIzNCksICgnc29tZS5wcm9jZXNzLnRoaW5nJywgNTY3OCkpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuU2hlbGwoJ2tpbGwgLTkgMTIzNCA1Njc4JyksICcnKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICAyLCBzZWxmLmRldmljZS5LaWxsQWxsKCdzb21lLnByb2Nlc3MnLCBibG9ja2luZz1GYWxzZSkpCi0KLSAgZGVmIHRlc3RLaWxsQWxsX2Jsb2NraW5nKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuTGlzdFByb2Nlc3Nlcygnc29tZS5wcm9jZXNzJyksCi0gICAgICAgICBQcm9jZXNzZXMoKCdzb21lLnByb2Nlc3MnLCAxMjM0KSwgKCdzb21lLnByb2Nlc3MudGhpbmcnLCA1Njc4KSkpLAotICAgICAgICAoc2VsZi5jYWxsLmFkYi5TaGVsbCgna2lsbCAtOSAxMjM0IDU2NzgnKSwgJycpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5MaXN0UHJvY2Vzc2VzKCdzb21lLnByb2Nlc3MnKSwKLSAgICAgICAgIFByb2Nlc3NlcygoJ3NvbWUucHJvY2Vzcy50aGluZycsIDU2NzgpKSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkxpc3RQcm9jZXNzZXMoJ3NvbWUucHJvY2VzcycpLAotICAgICAgICAgIyBPdGhlciBpbnN0YW5jZSB3aXRoIGRpZmZlcmVudCBwaWQuCi0gICAgICAgICBQcm9jZXNzZXMoKCdzb21lLnByb2Nlc3MnLCAxMTEpKSkpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgMiwgc2VsZi5kZXZpY2UuS2lsbEFsbCgnc29tZS5wcm9jZXNzJywgYmxvY2tpbmc9VHJ1ZSkpCi0KLSAgZGVmIHRlc3RLaWxsQWxsX2V4YWN0Tm9uYmxvY2tpbmcoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5MaXN0UHJvY2Vzc2VzKCdzb21lLnByb2Nlc3MnKSwKLSAgICAgICAgIFByb2Nlc3NlcygoJ3NvbWUucHJvY2VzcycsIDEyMzQpLCAoJ3NvbWUucHJvY2Vzcy50aGluZycsIDU2NzgpKSksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCdraWxsIC05IDEyMzQnKSwgJycpKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgIDEsIHNlbGYuZGV2aWNlLktpbGxBbGwoJ3NvbWUucHJvY2VzcycsIGV4YWN0PVRydWUsIGJsb2NraW5nPUZhbHNlKSkKLQotICBkZWYgdGVzdEtpbGxBbGxfZXhhY3RCbG9ja2luZyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkxpc3RQcm9jZXNzZXMoJ3NvbWUucHJvY2VzcycpLAotICAgICAgICAgUHJvY2Vzc2VzKCgnc29tZS5wcm9jZXNzJywgMTIzNCksICgnc29tZS5wcm9jZXNzLnRoaW5nJywgNTY3OCkpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuU2hlbGwoJ2tpbGwgLTkgMTIzNCcpLCAnJyksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkxpc3RQcm9jZXNzZXMoJ3NvbWUucHJvY2VzcycpLAotICAgICAgICAgUHJvY2Vzc2VzKCgnc29tZS5wcm9jZXNzJywgMTIzNCksICgnc29tZS5wcm9jZXNzLnRoaW5nJywgNTY3OCkpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuTGlzdFByb2Nlc3Nlcygnc29tZS5wcm9jZXNzJyksCi0gICAgICAgICBQcm9jZXNzZXMoKCdzb21lLnByb2Nlc3MudGhpbmcnLCA1Njc4KSkpKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgIDEsIHNlbGYuZGV2aWNlLktpbGxBbGwoJ3NvbWUucHJvY2VzcycsIGV4YWN0PVRydWUsIGJsb2NraW5nPVRydWUpKQotCi0gIGRlZiB0ZXN0S2lsbEFsbF9yb290KHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuTGlzdFByb2Nlc3Nlcygnc29tZS5wcm9jZXNzJyksCi0gICAgICAgICBQcm9jZXNzZXMoKCdzb21lLnByb2Nlc3MnLCAxMjM0KSkpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5OZWVkc1NVKCksIFRydWUpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fU3UoInNoIC1jICdraWxsIC05IDEyMzQnIiksCi0gICAgICAgICAic3UgLWMgc2ggLWMgJ2tpbGwgLTkgMTIzNCciKSwKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuU2hlbGwoInN1IC1jIHNoIC1jICdraWxsIC05IDEyMzQnIiksICcnKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICAxLCBzZWxmLmRldmljZS5LaWxsQWxsKCdzb21lLnByb2Nlc3MnLCBhc19yb290PVRydWUpKQotCi0gIGRlZiB0ZXN0S2lsbEFsbF9zaWd0ZXJtKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuTGlzdFByb2Nlc3Nlcygnc29tZS5wcm9jZXNzJyksCi0gICAgICAgICBQcm9jZXNzZXMoKCdzb21lLnByb2Nlc3MnLCAxMjM0KSkpLAotICAgICAgICAoc2VsZi5jYWxsLmFkYi5TaGVsbCgna2lsbCAtMTUgMTIzNCcpLCAnJykpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgMSwgc2VsZi5kZXZpY2UuS2lsbEFsbCgnc29tZS5wcm9jZXNzJywgc2lnbnVtPWRldmljZV9zaWduYWwuU0lHVEVSTSkpCi0KLSAgZGVmIHRlc3RLaWxsQWxsX211bHRpcGxlSW5zdGFuY2VzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuTGlzdFByb2Nlc3Nlcygnc29tZS5wcm9jZXNzJyksCi0gICAgICAgICBQcm9jZXNzZXMoKCdzb21lLnByb2Nlc3MnLCAxMjM0KSwgKCdzb21lLnByb2Nlc3MnLCA0NTY3KSkpLAotICAgICAgICAoc2VsZi5jYWxsLmFkYi5TaGVsbCgna2lsbCAtMTUgMTIzNCA0NTY3JyksICcnKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICAyLCBzZWxmLmRldmljZS5LaWxsQWxsKCdzb21lLnByb2Nlc3MnLCBzaWdudW09ZGV2aWNlX3NpZ25hbC5TSUdURVJNKSkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc1N0YXJ0QWN0aXZpdHlUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RTdGFydEFjdGl2aXR5X2FjdGlvbk9ubHkoc2VsZik6Ci0gICAgdGVzdF9pbnRlbnQgPSBpbnRlbnQuSW50ZW50KGFjdGlvbj0nYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcnKQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlNoZWxsKCdhbSBzdGFydCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hIGFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXJyksCi0gICAgICAgICdTdGFydGluZzogSW50ZW50IHsgYWN0PWFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXIH0nKToKLSAgICAgIHNlbGYuZGV2aWNlLlN0YXJ0QWN0aXZpdHkodGVzdF9pbnRlbnQpCi0KLSAgZGVmIHRlc3RTdGFydEFjdGl2aXR5X3N1Y2Nlc3Moc2VsZik6Ci0gICAgdGVzdF9pbnRlbnQgPSBpbnRlbnQuSW50ZW50KGFjdGlvbj0nYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlPSd0ZXN0LnBhY2thZ2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eT0nLk1haW4nKQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlNoZWxsKCdhbSBzdGFydCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hIGFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW4gdGVzdC5wYWNrYWdlLy5NYWluJyksCi0gICAgICAgICdTdGFydGluZzogSW50ZW50IHsgYWN0PWFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXIH0nKToKLSAgICAgIHNlbGYuZGV2aWNlLlN0YXJ0QWN0aXZpdHkodGVzdF9pbnRlbnQpCi0KLSAgZGVmIHRlc3RTdGFydEFjdGl2aXR5X2ZhaWx1cmUoc2VsZik6Ci0gICAgdGVzdF9pbnRlbnQgPSBpbnRlbnQuSW50ZW50KGFjdGlvbj0nYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlPSd0ZXN0LnBhY2thZ2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eT0nLk1haW4nKQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlNoZWxsKCdhbSBzdGFydCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hIGFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW4gdGVzdC5wYWNrYWdlLy5NYWluJyksCi0gICAgICAgICdFcnJvcjogRmFpbGVkIHRvIHN0YXJ0IHRlc3QgYWN0aXZpdHknKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgICBzZWxmLmRldmljZS5TdGFydEFjdGl2aXR5KHRlc3RfaW50ZW50KQotCi0gIGRlZiB0ZXN0U3RhcnRBY3Rpdml0eV9ibG9ja2luZyhzZWxmKToKLSAgICB0ZXN0X2ludGVudCA9IGludGVudC5JbnRlbnQoYWN0aW9uPSdhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2U9J3Rlc3QucGFja2FnZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5PScuTWFpbicpCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuU2hlbGwoJ2FtIHN0YXJ0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLVcgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYSBhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1uIHRlc3QucGFja2FnZS8uTWFpbicpLAotICAgICAgICAnU3RhcnRpbmc6IEludGVudCB7IGFjdD1hbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyB9Jyk6Ci0gICAgICBzZWxmLmRldmljZS5TdGFydEFjdGl2aXR5KHRlc3RfaW50ZW50LCBibG9ja2luZz1UcnVlKQotCi0gIGRlZiB0ZXN0U3RhcnRBY3Rpdml0eV93aXRoQ2F0ZWdvcnkoc2VsZik6Ci0gICAgdGVzdF9pbnRlbnQgPSBpbnRlbnQuSW50ZW50KGFjdGlvbj0nYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlPSd0ZXN0LnBhY2thZ2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eT0nLk1haW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT0nYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuSE9NRScpCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuU2hlbGwoJ2FtIHN0YXJ0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWEgYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYyBhbmRyb2lkLmludGVudC5jYXRlZ29yeS5IT01FICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW4gdGVzdC5wYWNrYWdlLy5NYWluJyksCi0gICAgICAgICdTdGFydGluZzogSW50ZW50IHsgYWN0PWFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXIH0nKToKLSAgICAgIHNlbGYuZGV2aWNlLlN0YXJ0QWN0aXZpdHkodGVzdF9pbnRlbnQpCi0KLSAgZGVmIHRlc3RTdGFydEFjdGl2aXR5X3dpdGhNdWx0aXBsZUNhdGVnb3JpZXMoc2VsZik6Ci0gICAgdGVzdF9pbnRlbnQgPSBpbnRlbnQuSW50ZW50KGFjdGlvbj0nYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlPSd0ZXN0LnBhY2thZ2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eT0nLk1haW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT1bJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkhPTUUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkJST1dTQUJMRSddKQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlNoZWxsKCdhbSBzdGFydCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hIGFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWMgYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuSE9NRSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1jIGFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkJST1dTQUJMRSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1uIHRlc3QucGFja2FnZS8uTWFpbicpLAotICAgICAgICAnU3RhcnRpbmc6IEludGVudCB7IGFjdD1hbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyB9Jyk6Ci0gICAgICBzZWxmLmRldmljZS5TdGFydEFjdGl2aXR5KHRlc3RfaW50ZW50KQotCi0gIGRlZiB0ZXN0U3RhcnRBY3Rpdml0eV93aXRoRGF0YShzZWxmKToKLSAgICB0ZXN0X2ludGVudCA9IGludGVudC5JbnRlbnQoYWN0aW9uPSdhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2U9J3Rlc3QucGFja2FnZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5PScuTWFpbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9J2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS8nKQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlNoZWxsKCdhbSBzdGFydCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hIGFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWQgaHR0cDovL3d3dy5nb29nbGUuY29tLyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1uIHRlc3QucGFja2FnZS8uTWFpbicpLAotICAgICAgICAnU3RhcnRpbmc6IEludGVudCB7IGFjdD1hbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyB9Jyk6Ci0gICAgICBzZWxmLmRldmljZS5TdGFydEFjdGl2aXR5KHRlc3RfaW50ZW50KQotCi0gIGRlZiB0ZXN0U3RhcnRBY3Rpdml0eV93aXRoU3RyaW5nRXh0cmEoc2VsZik6Ci0gICAgdGVzdF9pbnRlbnQgPSBpbnRlbnQuSW50ZW50KGFjdGlvbj0nYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlPSd0ZXN0LnBhY2thZ2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eT0nLk1haW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXM9eydmb28nOiAndGVzdCd9KQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlNoZWxsKCdhbSBzdGFydCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hIGFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW4gdGVzdC5wYWNrYWdlLy5NYWluICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1lcyBmb28gdGVzdCcpLAotICAgICAgICAnU3RhcnRpbmc6IEludGVudCB7IGFjdD1hbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyB9Jyk6Ci0gICAgICBzZWxmLmRldmljZS5TdGFydEFjdGl2aXR5KHRlc3RfaW50ZW50KQotCi0gIGRlZiB0ZXN0U3RhcnRBY3Rpdml0eV93aXRoQm9vbEV4dHJhKHNlbGYpOgotICAgIHRlc3RfaW50ZW50ID0gaW50ZW50LkludGVudChhY3Rpb249J2FuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZT0ndGVzdC5wYWNrYWdlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHk9Jy5NYWluJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzPXsnZm9vJzogVHJ1ZX0pCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuU2hlbGwoJ2FtIHN0YXJ0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWEgYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbiB0ZXN0LnBhY2thZ2UvLk1haW4gJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWV6IGZvbyBUcnVlJyksCi0gICAgICAgICdTdGFydGluZzogSW50ZW50IHsgYWN0PWFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXIH0nKToKLSAgICAgIHNlbGYuZGV2aWNlLlN0YXJ0QWN0aXZpdHkodGVzdF9pbnRlbnQpCi0KLSAgZGVmIHRlc3RTdGFydEFjdGl2aXR5X3dpdGhJbnRFeHRyYShzZWxmKToKLSAgICB0ZXN0X2ludGVudCA9IGludGVudC5JbnRlbnQoYWN0aW9uPSdhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2U9J3Rlc3QucGFja2FnZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5PScuTWFpbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcz17J2Zvbyc6IDEyM30pCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuU2hlbGwoJ2FtIHN0YXJ0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWEgYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbiB0ZXN0LnBhY2thZ2UvLk1haW4gJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWVpIGZvbyAxMjMnKSwKLSAgICAgICAgJ1N0YXJ0aW5nOiBJbnRlbnQgeyBhY3Q9YW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcgfScpOgotICAgICAgc2VsZi5kZXZpY2UuU3RhcnRBY3Rpdml0eSh0ZXN0X2ludGVudCkKLQotICBkZWYgdGVzdFN0YXJ0QWN0aXZpdHlfd2l0aFRyYWNlRmlsZShzZWxmKToKLSAgICB0ZXN0X2ludGVudCA9IGludGVudC5JbnRlbnQoYWN0aW9uPSdhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2U9J3Rlc3QucGFja2FnZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5PScuTWFpbicpCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuU2hlbGwoJ2FtIHN0YXJ0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1zdGFydC1wcm9maWxlciB0ZXN0X3RyYWNlX2ZpbGUub3V0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWEgYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbiB0ZXN0LnBhY2thZ2UvLk1haW4nKSwKLSAgICAgICAgJ1N0YXJ0aW5nOiBJbnRlbnQgeyBhY3Q9YW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcgfScpOgotICAgICAgc2VsZi5kZXZpY2UuU3RhcnRBY3Rpdml0eSh0ZXN0X2ludGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VfZmlsZV9uYW1lPSd0ZXN0X3RyYWNlX2ZpbGUub3V0JykKLQotICBkZWYgdGVzdFN0YXJ0QWN0aXZpdHlfd2l0aEZvcmNlU3RvcChzZWxmKToKLSAgICB0ZXN0X2ludGVudCA9IGludGVudC5JbnRlbnQoYWN0aW9uPSdhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2U9J3Rlc3QucGFja2FnZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5PScuTWFpbicpCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuU2hlbGwoJ2FtIHN0YXJ0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLVMgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYSBhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1uIHRlc3QucGFja2FnZS8uTWFpbicpLAotICAgICAgICAnU3RhcnRpbmc6IEludGVudCB7IGFjdD1hbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyB9Jyk6Ci0gICAgICBzZWxmLmRldmljZS5TdGFydEFjdGl2aXR5KHRlc3RfaW50ZW50LCBmb3JjZV9zdG9wPVRydWUpCi0KLSAgZGVmIHRlc3RTdGFydEFjdGl2aXR5X3dpdGhGbGFncyhzZWxmKToKLSAgICB0ZXN0X2ludGVudCA9IGludGVudC5JbnRlbnQoYWN0aW9uPSdhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2U9J3Rlc3QucGFja2FnZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5PScuTWFpbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPVsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQuRkxBR19BQ1RJVklUWV9SRVNFVF9UQVNLX0lGX05FRURFRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlNoZWxsKCdhbSBzdGFydCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hIGFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW4gdGVzdC5wYWNrYWdlLy5NYWluICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWYgMHgxMDIwMDAwMCcpLAotICAgICAgICAnU3RhcnRpbmc6IEludGVudCB7IGFjdD1hbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyB9Jyk6Ci0gICAgICBzZWxmLmRldmljZS5TdGFydEFjdGl2aXR5KHRlc3RfaW50ZW50KQotCi0KLWNsYXNzIERldmljZVV0aWxzU3RhcnRJbnN0cnVtZW50YXRpb25UZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RTdGFydEluc3RydW1lbnRhdGlvbl9ub3RoaW5nKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAncD10ZXN0LnBhY2thZ2U7YW0gaW5zdHJ1bWVudCAiJHAiLy5UZXN0SW5zdHJ1bWVudGF0aW9uJywKLSAgICAgICAgICAgIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlLCBsYXJnZV9vdXRwdXQ9VHJ1ZSkpOgotICAgICAgc2VsZi5kZXZpY2UuU3RhcnRJbnN0cnVtZW50YXRpb24oCi0gICAgICAgICAgJ3Rlc3QucGFja2FnZS8uVGVzdEluc3RydW1lbnRhdGlvbicsCi0gICAgICAgICAgZmluaXNoPUZhbHNlLCByYXc9RmFsc2UsIGV4dHJhcz1Ob25lKQotCi0gIGRlZiB0ZXN0U3RhcnRJbnN0cnVtZW50YXRpb25fZmluaXNoKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgJ3A9dGVzdC5wYWNrYWdlO2FtIGluc3RydW1lbnQgLXcgIiRwIi8uVGVzdEluc3RydW1lbnRhdGlvbicsCi0gICAgICAgICAgICBzaGVsbD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUpLAotICAgICAgICAgWydPSyAoMSB0ZXN0KSddKSk6Ci0gICAgICBvdXRwdXQgPSBzZWxmLmRldmljZS5TdGFydEluc3RydW1lbnRhdGlvbigKLSAgICAgICAgICAndGVzdC5wYWNrYWdlLy5UZXN0SW5zdHJ1bWVudGF0aW9uJywKLSAgICAgICAgICBmaW5pc2g9VHJ1ZSwgcmF3PUZhbHNlLCBleHRyYXM9Tm9uZSkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnT0sgKDEgdGVzdCknXSwgb3V0cHV0KQotCi0gIGRlZiB0ZXN0U3RhcnRJbnN0cnVtZW50YXRpb25fcmF3KHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAncD10ZXN0LnBhY2thZ2U7YW0gaW5zdHJ1bWVudCAtciAiJHAiLy5UZXN0SW5zdHJ1bWVudGF0aW9uJywKLSAgICAgICAgICAgIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlLCBsYXJnZV9vdXRwdXQ9VHJ1ZSkpOgotICAgICAgc2VsZi5kZXZpY2UuU3RhcnRJbnN0cnVtZW50YXRpb24oCi0gICAgICAgICAgJ3Rlc3QucGFja2FnZS8uVGVzdEluc3RydW1lbnRhdGlvbicsCi0gICAgICAgICAgZmluaXNoPUZhbHNlLCByYXc9VHJ1ZSwgZXh0cmFzPU5vbmUpCi0KLSAgZGVmIHRlc3RTdGFydEluc3RydW1lbnRhdGlvbl9leHRyYXMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICdwPXRlc3QucGFja2FnZTthbSBpbnN0cnVtZW50IC1lICIkcCIuZm9vIEZvbyAtZSBiYXIgXCdWYWwgXCciJHAiICcKLSAgICAgICAgICAgICciJHAiLy5UZXN0SW5zdHJ1bWVudGF0aW9uJywKLSAgICAgICAgICAgIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlLCBsYXJnZV9vdXRwdXQ9VHJ1ZSkpOgotICAgICAgc2VsZi5kZXZpY2UuU3RhcnRJbnN0cnVtZW50YXRpb24oCi0gICAgICAgICAgJ3Rlc3QucGFja2FnZS8uVGVzdEluc3RydW1lbnRhdGlvbicsCi0gICAgICAgICAgZmluaXNoPUZhbHNlLCByYXc9RmFsc2UsIGV4dHJhcz17J3Rlc3QucGFja2FnZS5mb28nOiAnRm9vJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFyJzogJ1ZhbCB0ZXN0LnBhY2thZ2UnfSkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0Jyb2FkY2FzdEludGVudFRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdEJyb2FkY2FzdEludGVudF9ub0V4dHJhcyhzZWxmKToKLSAgICB0ZXN0X2ludGVudCA9IGludGVudC5JbnRlbnQoYWN0aW9uPSd0ZXN0LnBhY2thZ2Uud2l0aC5hbi5JTlRFTlQnKQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlNoZWxsKCdhbSBicm9hZGNhc3QgLWEgdGVzdC5wYWNrYWdlLndpdGguYW4uSU5URU5UJyksCi0gICAgICAgICdCcm9hZGNhc3Rpbmc6IEludGVudCB7IGFjdD10ZXN0LnBhY2thZ2Uud2l0aC5hbi5JTlRFTlQgfSAnKToKLSAgICAgIHNlbGYuZGV2aWNlLkJyb2FkY2FzdEludGVudCh0ZXN0X2ludGVudCkKLQotICBkZWYgdGVzdEJyb2FkY2FzdEludGVudF93aXRoRXh0cmEoc2VsZik6Ci0gICAgdGVzdF9pbnRlbnQgPSBpbnRlbnQuSW50ZW50KGFjdGlvbj0ndGVzdC5wYWNrYWdlLndpdGguYW4uSU5URU5UJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzPXsnZm9vJzogJ2JhciB2YWx1ZSd9KQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlNoZWxsKAotICAgICAgICAgICAgImFtIGJyb2FkY2FzdCAtYSB0ZXN0LnBhY2thZ2Uud2l0aC5hbi5JTlRFTlQgLS1lcyBmb28gJ2JhciB2YWx1ZSciKSwKLSAgICAgICAgJ0Jyb2FkY2FzdGluZzogSW50ZW50IHsgYWN0PXRlc3QucGFja2FnZS53aXRoLmFuLklOVEVOVCB9ICcpOgotICAgICAgc2VsZi5kZXZpY2UuQnJvYWRjYXN0SW50ZW50KHRlc3RfaW50ZW50KQotCi0gIGRlZiB0ZXN0QnJvYWRjYXN0SW50ZW50X3dpdGhFeHRyYV9ub1ZhbHVlKHNlbGYpOgotICAgIHRlc3RfaW50ZW50ID0gaW50ZW50LkludGVudChhY3Rpb249J3Rlc3QucGFja2FnZS53aXRoLmFuLklOVEVOVCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcz17J2Zvbyc6IE5vbmV9KQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlNoZWxsKAotICAgICAgICAgICAgJ2FtIGJyb2FkY2FzdCAtYSB0ZXN0LnBhY2thZ2Uud2l0aC5hbi5JTlRFTlQgLS1lc24gZm9vJyksCi0gICAgICAgICdCcm9hZGNhc3Rpbmc6IEludGVudCB7IGFjdD10ZXN0LnBhY2thZ2Uud2l0aC5hbi5JTlRFTlQgfSAnKToKLSAgICAgIHNlbGYuZGV2aWNlLkJyb2FkY2FzdEludGVudCh0ZXN0X2ludGVudCkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0dvSG9tZVRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdEdvSG9tZV9wb3B1cHNFeGlzdChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnZHVtcHN5cycsICd3aW5kb3cnLCAnd2luZG93cyddLCBjaGVja19yZXR1cm49VHJ1ZSwKLSAgICAgICAgICAgIGxhcmdlX291dHB1dD1UcnVlKSwgW10pLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2FtJywgJ3N0YXJ0JywgJy1XJywgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJywKLSAgICAgICAgICAgICctYycsICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5IT01FJ10sIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgICdTdGFydGluZzogSW50ZW50IHsgYWN0PWFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIH1cclxuJycnKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydkdW1wc3lzJywgJ3dpbmRvdycsICd3aW5kb3dzJ10sIGNoZWNrX3JldHVybj1UcnVlLAotICAgICAgICAgICAgbGFyZ2Vfb3V0cHV0PVRydWUpLCBbXSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnaW5wdXQnLCAna2V5ZXZlbnQnLCAnNjYnXSwgY2hlY2tfcmV0dXJuPVRydWUpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydpbnB1dCcsICdrZXlldmVudCcsICc0J10sIGNoZWNrX3JldHVybj1UcnVlKSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnZHVtcHN5cycsICd3aW5kb3cnLCAnd2luZG93cyddLCBjaGVja19yZXR1cm49VHJ1ZSwKLSAgICAgICAgICAgIGxhcmdlX291dHB1dD1UcnVlKSwKLSAgICAgICAgIFsnbUN1cnJlbnRGb2N1cyBMYXVuY2hlciddKSk6Ci0gICAgICBzZWxmLmRldmljZS5Hb0hvbWUoKQotCi0gIGRlZiB0ZXN0R29Ib21lX3dpbGxSZXRyeShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnZHVtcHN5cycsICd3aW5kb3cnLCAnd2luZG93cyddLCBjaGVja19yZXR1cm49VHJ1ZSwKLSAgICAgICAgICAgIGxhcmdlX291dHB1dD1UcnVlKSwgW10pLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2FtJywgJ3N0YXJ0JywgJy1XJywgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJywKLSAgICAgICAgICAgICctYycsICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5IT01FJ10sIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgICdTdGFydGluZzogSW50ZW50IHsgYWN0PWFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIH1cclxuJycnKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydkdW1wc3lzJywgJ3dpbmRvdycsICd3aW5kb3dzJ10sIGNoZWNrX3JldHVybj1UcnVlLAotICAgICAgICAgICAgbGFyZ2Vfb3V0cHV0PVRydWUpLCBbXSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnaW5wdXQnLCAna2V5ZXZlbnQnLCAnNjYnXSwgY2hlY2tfcmV0dXJuPVRydWUsKSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnaW5wdXQnLCAna2V5ZXZlbnQnLCAnNCddLCBjaGVja19yZXR1cm49VHJ1ZSkpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2R1bXBzeXMnLCAnd2luZG93JywgJ3dpbmRvd3MnXSwgY2hlY2tfcmV0dXJuPVRydWUsCi0gICAgICAgICAgICBsYXJnZV9vdXRwdXQ9VHJ1ZSksIFtdKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydpbnB1dCcsICdrZXlldmVudCcsICc2NiddLCBjaGVja19yZXR1cm49VHJ1ZSkpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2lucHV0JywgJ2tleWV2ZW50JywgJzQnXSwgY2hlY2tfcmV0dXJuPVRydWUpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydkdW1wc3lzJywgJ3dpbmRvdycsICd3aW5kb3dzJ10sIGNoZWNrX3JldHVybj1UcnVlLAotICAgICAgICAgICAgbGFyZ2Vfb3V0cHV0PVRydWUpLAotICAgICAgICAgc2VsZi5UaW1lb3V0RXJyb3IoKSkpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRUaW1lb3V0RXJyb3IpOgotICAgICAgICBzZWxmLmRldmljZS5Hb0hvbWUoKQotCi0gIGRlZiB0ZXN0R29Ib21lX2FscmVhZHlGb2N1c2VkKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnZHVtcHN5cycsICd3aW5kb3cnLCAnd2luZG93cyddLCBjaGVja19yZXR1cm49VHJ1ZSwKLSAgICAgICAgICAgIGxhcmdlX291dHB1dD1UcnVlKSwKLSAgICAgICAgWydtQ3VycmVudEZvY3VzIExhdW5jaGVyJ10pOgotICAgICAgc2VsZi5kZXZpY2UuR29Ib21lKCkKLQotICBkZWYgdGVzdEdvSG9tZV9hbHJlYWR5Rm9jdXNlZEFsdGVybmF0ZUNhc2Uoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydkdW1wc3lzJywgJ3dpbmRvdycsICd3aW5kb3dzJ10sIGNoZWNrX3JldHVybj1UcnVlLAotICAgICAgICAgICAgbGFyZ2Vfb3V0cHV0PVRydWUpLAotICAgICAgICBbJyBtQ3VycmVudEZvY3VzIC5sYXVuY2hlci8uJ10pOgotICAgICAgc2VsZi5kZXZpY2UuR29Ib21lKCkKLQotICBkZWYgdGVzdEdvSG9tZV9vYnRhaW5zRm9jdXNBZnRlckdvaW5nSG9tZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnZHVtcHN5cycsICd3aW5kb3cnLCAnd2luZG93cyddLCBjaGVja19yZXR1cm49VHJ1ZSwKLSAgICAgICAgICAgIGxhcmdlX291dHB1dD1UcnVlKSwgW10pLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2FtJywgJ3N0YXJ0JywgJy1XJywgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJywKLSAgICAgICAgICAgICctYycsICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5IT01FJ10sIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgICdTdGFydGluZzogSW50ZW50IHsgYWN0PWFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIH1cclxuJycnKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydkdW1wc3lzJywgJ3dpbmRvdycsICd3aW5kb3dzJ10sIGNoZWNrX3JldHVybj1UcnVlLAotICAgICAgICAgICAgbGFyZ2Vfb3V0cHV0PVRydWUpLAotICAgICAgICAgWydtQ3VycmVudEZvY3VzIExhdW5jaGVyJ10pKToKLSAgICAgIHNlbGYuZGV2aWNlLkdvSG9tZSgpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNGb3JjZVN0b3BUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RGb3JjZVN0b3Aoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRBcHBsaWNhdGlvblBpZHMoJ3Rlc3QucGFja2FnZScpLCBbMTExMV0pLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2FtJywgJ2ZvcmNlLXN0b3AnLCAndGVzdC5wYWNrYWdlJ10sCi0gICAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSksCi0gICAgICAgICBbJ1N1Y2Nlc3MnXSkpOgotICAgICAgc2VsZi5kZXZpY2UuRm9yY2VTdG9wKCd0ZXN0LnBhY2thZ2UnKQotCi0gIGRlZiB0ZXN0Rm9yY2VTdG9wX05vUHJvY2Vzc0ZvdW5kKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLkdldEFwcGxpY2F0aW9uUGlkcygndGVzdC5wYWNrYWdlJyksIFtdKToKLSAgICAgIHNlbGYuZGV2aWNlLkZvcmNlU3RvcCgndGVzdC5wYWNrYWdlJykKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0NsZWFyQXBwbGljYXRpb25TdGF0ZVRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdENsZWFyQXBwbGljYXRpb25TdGF0ZV9zZXRQZXJtaXNzaW9ucyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkdldFByb3AoJ3JvLmJ1aWxkLnZlcnNpb24uc2RrJywgY2FjaGU9VHJ1ZSksICcxNycpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fR2V0QXBwbGljYXRpb25QYXRoc0ludGVybmFsKCd0aGlzLnBhY2thZ2UuZXhpc3RzJyksCi0gICAgICAgICBbJy9kYXRhL2FwcC90aGlzLnBhY2thZ2UuZXhpc3RzLmFwayddKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydwbScsICdjbGVhcicsICd0aGlzLnBhY2thZ2UuZXhpc3RzJ10sCi0gICAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSksCi0gICAgICAgICBbJ1N1Y2Nlc3MnXSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkdyYW50UGVybWlzc2lvbnMoCi0gICAgICAgICAgICAndGhpcy5wYWNrYWdlLmV4aXN0cycsIFsncDEnXSksIFtdKSk6Ci0gICAgICBzZWxmLmRldmljZS5DbGVhckFwcGxpY2F0aW9uU3RhdGUoCi0gICAgICAgICAgJ3RoaXMucGFja2FnZS5leGlzdHMnLCBwZXJtaXNzaW9ucz1bJ3AxJ10pCi0KLSAgZGVmIHRlc3RDbGVhckFwcGxpY2F0aW9uU3RhdGVfcGFja2FnZURvZXNudEV4aXN0KHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgncm8uYnVpbGQudmVyc2lvbi5zZGsnLCBjYWNoZT1UcnVlKSwgJzExJyksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9HZXRBcHBsaWNhdGlvblBhdGhzSW50ZXJuYWwoJ2RvZXMubm90LmV4aXN0JyksCi0gICAgICAgICBbXSkpOgotICAgICAgc2VsZi5kZXZpY2UuQ2xlYXJBcHBsaWNhdGlvblN0YXRlKCdkb2VzLm5vdC5leGlzdCcpCi0KLSAgZGVmIHRlc3RDbGVhckFwcGxpY2F0aW9uU3RhdGVfcGFja2FnZURvZXNudEV4aXN0T25BbmRyb2lkSkJNUjJPckFib3ZlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgncm8uYnVpbGQudmVyc2lvbi5zZGsnLCBjYWNoZT1UcnVlKSwgJzE4JyksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsncG0nLCAnY2xlYXInLCAndGhpcy5wYWNrYWdlLmRvZXMubm90LmV4aXN0J10sCi0gICAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSksCi0gICAgICAgICBbJ0ZhaWxlZCddKSk6Ci0gICAgICBzZWxmLmRldmljZS5DbGVhckFwcGxpY2F0aW9uU3RhdGUoJ3RoaXMucGFja2FnZS5kb2VzLm5vdC5leGlzdCcpCi0KLSAgZGVmIHRlc3RDbGVhckFwcGxpY2F0aW9uU3RhdGVfcGFja2FnZUV4aXN0cyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkdldFByb3AoJ3JvLmJ1aWxkLnZlcnNpb24uc2RrJywgY2FjaGU9VHJ1ZSksICcxNycpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fR2V0QXBwbGljYXRpb25QYXRoc0ludGVybmFsKCd0aGlzLnBhY2thZ2UuZXhpc3RzJyksCi0gICAgICAgICBbJy9kYXRhL2FwcC90aGlzLnBhY2thZ2UuZXhpc3RzLmFwayddKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydwbScsICdjbGVhcicsICd0aGlzLnBhY2thZ2UuZXhpc3RzJ10sCi0gICAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSksCi0gICAgICAgICBbJ1N1Y2Nlc3MnXSkpOgotICAgICAgc2VsZi5kZXZpY2UuQ2xlYXJBcHBsaWNhdGlvblN0YXRlKCd0aGlzLnBhY2thZ2UuZXhpc3RzJykKLQotICBkZWYgdGVzdENsZWFyQXBwbGljYXRpb25TdGF0ZV9wYWNrYWdlRXhpc3RzT25BbmRyb2lkSkJNUjJPckFib3ZlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgncm8uYnVpbGQudmVyc2lvbi5zZGsnLCBjYWNoZT1UcnVlKSwgJzE4JyksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsncG0nLCAnY2xlYXInLCAndGhpcy5wYWNrYWdlLmV4aXN0cyddLAotICAgICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUpLAotICAgICAgICAgWydTdWNjZXNzJ10pKToKLSAgICAgIHNlbGYuZGV2aWNlLkNsZWFyQXBwbGljYXRpb25TdGF0ZSgndGhpcy5wYWNrYWdlLmV4aXN0cycpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNTZW5kS2V5RXZlbnRUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RTZW5kS2V5RXZlbnQoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoc2VsZi5jYWxsLmFkYi5TaGVsbCgnaW5wdXQga2V5ZXZlbnQgNjYnKSwgJycpOgotICAgICAgc2VsZi5kZXZpY2UuU2VuZEtleUV2ZW50KDY2KQotCi0KLWNsYXNzIERldmljZVV0aWxzUHVzaENoYW5nZWRGaWxlc0luZGl2aWR1YWxseVRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdFB1c2hDaGFuZ2VkRmlsZXNJbmRpdmlkdWFsbHlfZW1wdHkoc2VsZik6Ci0gICAgdGVzdF9maWxlcyA9IFtdCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKCk6Ci0gICAgICBzZWxmLmRldmljZS5fUHVzaENoYW5nZWRGaWxlc0luZGl2aWR1YWxseSh0ZXN0X2ZpbGVzKQotCi0gIGRlZiB0ZXN0UHVzaENoYW5nZWRGaWxlc0luZGl2aWR1YWxseV9zaW5nbGUoc2VsZik6Ci0gICAgdGVzdF9maWxlcyA9IFsoJy90ZXN0L2hvc3QvcGF0aCcsICcvdGVzdC9kZXZpY2UvcGF0aCcpXQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscyhzZWxmLmNhbGwuYWRiLlB1c2goKnRlc3RfZmlsZXNbMF0pKToKLSAgICAgIHNlbGYuZGV2aWNlLl9QdXNoQ2hhbmdlZEZpbGVzSW5kaXZpZHVhbGx5KHRlc3RfZmlsZXMpCi0KLSAgZGVmIHRlc3RQdXNoQ2hhbmdlZEZpbGVzSW5kaXZpZHVhbGx5X211bHRpcGxlKHNlbGYpOgotICAgIHRlc3RfZmlsZXMgPSBbCi0gICAgICAgICgnL3Rlc3QvaG9zdC9wYXRoL2ZpbGUxJywgJy90ZXN0L2RldmljZS9wYXRoL2ZpbGUxJyksCi0gICAgICAgICgnL3Rlc3QvaG9zdC9wYXRoL2ZpbGUyJywgJy90ZXN0L2RldmljZS9wYXRoL2ZpbGUyJyldCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlB1c2goKnRlc3RfZmlsZXNbMF0pLAotICAgICAgICBzZWxmLmNhbGwuYWRiLlB1c2goKnRlc3RfZmlsZXNbMV0pKToKLSAgICAgIHNlbGYuZGV2aWNlLl9QdXNoQ2hhbmdlZEZpbGVzSW5kaXZpZHVhbGx5KHRlc3RfZmlsZXMpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNQdXNoQ2hhbmdlZEZpbGVzWmlwcGVkVGVzdChEZXZpY2VVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0UHVzaENoYW5nZWRGaWxlc1ppcHBlZF9ub1VuemlwQ29tbWFuZChzZWxmKToKLSAgICB0ZXN0X2ZpbGVzID0gWygnL3Rlc3QvaG9zdC9wYXRoL2ZpbGUxJywgJy90ZXN0L2RldmljZS9wYXRoL2ZpbGUxJyldCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fTWF5YmVJbnN0YWxsQ29tbWFuZHMoKSwgRmFsc2UpKToKLSAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kZXZpY2UuX1B1c2hDaGFuZ2VkRmlsZXNaaXBwZWQodGVzdF9maWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycvdGVzdC9kaXInXSkpCi0KLSAgZGVmIF90ZXN0UHVzaENoYW5nZWRGaWxlc1ppcHBlZF9zcGVjKHNlbGYsIHRlc3RfZmlsZXMpOgotICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi0gICAgZGVmIG1vY2tfemlwX3RlbXBfZGlyKCk6Ci0gICAgICB5aWVsZCAnL3Rlc3QvdGVtcC9kaXInCi0KLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9NYXliZUluc3RhbGxDb21tYW5kcygpLCBUcnVlKSwKLSAgICAgICAgKG1vY2suY2FsbC5weV91dGlscy50ZW1wZmlsZV9leHQuTmFtZWRUZW1wb3JhcnlEaXJlY3RvcnkoKSwKLSAgICAgICAgIG1vY2tfemlwX3RlbXBfZGlyKSwKLSAgICAgICAgKG1vY2suY2FsbC5kZXZpbC51dGlscy56aXBfdXRpbHMuV3JpdGVaaXBGaWxlKAotICAgICAgICAgICAgJy90ZXN0L3RlbXAvZGlyL3RtcC56aXAnLCB0ZXN0X2ZpbGVzKSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLk5lZWRzU1UoKSwgVHJ1ZSksCi0gICAgICAgIChtb2NrLmNhbGwuZGV2aWwuYW5kcm9pZC5kZXZpY2VfdGVtcF9maWxlLkRldmljZVRlbXBGaWxlKHNlbGYuYWRiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg9Jy56aXAnKSwKLSAgICAgICAgICAgICBNb2NrVGVtcEZpbGUoJy90ZXN0L3NkY2FyZC9mb28xMjMuemlwJykpLAotICAgICAgICBzZWxmLmNhbGwuYWRiLlB1c2goCi0gICAgICAgICAgICAnL3Rlc3QvdGVtcC9kaXIvdG1wLnppcCcsICcvdGVzdC9zZGNhcmQvZm9vMTIzLnppcCcpLAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICd1bnppcCAvdGVzdC9zZGNhcmQvZm9vMTIzLnppcCYmY2htb2QgLVIgNzc3IC90ZXN0L2RpcicsCi0gICAgICAgICAgICBzaGVsbD1UcnVlLCBhc19yb290PVRydWUsCi0gICAgICAgICAgICBlbnY9eydQQVRIJzogJy9kYXRhL2xvY2FsL3RtcC9iaW46JFBBVEgnfSwKLSAgICAgICAgICAgIGNoZWNrX3JldHVybj1UcnVlKSk6Ci0gICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kZXZpY2UuX1B1c2hDaGFuZ2VkRmlsZXNaaXBwZWQodGVzdF9maWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy90ZXN0L2RpciddKSkKLQotICBkZWYgdGVzdFB1c2hDaGFuZ2VkRmlsZXNaaXBwZWRfc2luZ2xlKHNlbGYpOgotICAgIHNlbGYuX3Rlc3RQdXNoQ2hhbmdlZEZpbGVzWmlwcGVkX3NwZWMoCi0gICAgICAgIFsoJy90ZXN0L2hvc3QvcGF0aC9maWxlMScsICcvdGVzdC9kZXZpY2UvcGF0aC9maWxlMScpXSkKLQotICBkZWYgdGVzdFB1c2hDaGFuZ2VkRmlsZXNaaXBwZWRfbXVsdGlwbGUoc2VsZik6Ci0gICAgc2VsZi5fdGVzdFB1c2hDaGFuZ2VkRmlsZXNaaXBwZWRfc3BlYygKLSAgICAgICAgWygnL3Rlc3QvaG9zdC9wYXRoL2ZpbGUxJywgJy90ZXN0L2RldmljZS9wYXRoL2ZpbGUxJyksCi0gICAgICAgICAoJy90ZXN0L2hvc3QvcGF0aC9maWxlMicsICcvdGVzdC9kZXZpY2UvcGF0aC9maWxlMicpXSkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc1BhdGhFeGlzdHNUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RQYXRoRXhpc3RzX3BhdGhFeGlzdHMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWyd0ZXN0JywgJy1lJywgJy9wYXRoL2ZpbGUgZXhpc3RzJ10sCi0gICAgICAgICAgICBhc19yb290PUZhbHNlLCBjaGVja19yZXR1cm49VHJ1ZSwgdGltZW91dD0xMCwgcmV0cmllcz0wKSwKLSAgICAgICAgW10pOgotICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGV2aWNlLlBhdGhFeGlzdHMoJy9wYXRoL2ZpbGUgZXhpc3RzJykpCi0KLSAgZGVmIHRlc3RQYXRoRXhpc3RzX211bHRpcGxlUGF0aEV4aXN0cyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ3Rlc3QnLCAnLWUnLCAnL3BhdGggMScsICctYScsICctZScsICcvcGF0aDInXSwKLSAgICAgICAgICAgIGFzX3Jvb3Q9RmFsc2UsIGNoZWNrX3JldHVybj1UcnVlLCB0aW1lb3V0PTEwLCByZXRyaWVzPTApLAotICAgICAgICBbXSk6Ci0gICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kZXZpY2UuUGF0aEV4aXN0cygoJy9wYXRoIDEnLCAnL3BhdGgyJykpKQotCi0gIGRlZiB0ZXN0UGF0aEV4aXN0c19wYXRoRG9lc250RXhpc3Qoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWyd0ZXN0JywgJy1lJywgJy9wYXRoL2ZpbGUubm90LmV4aXN0cyddLAotICAgICAgICAgICAgYXNfcm9vdD1GYWxzZSwgY2hlY2tfcmV0dXJuPVRydWUsIHRpbWVvdXQ9MTAsIHJldHJpZXM9MCksCi0gICAgICAgIHNlbGYuU2hlbGxFcnJvcigpKToKLSAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kZXZpY2UuUGF0aEV4aXN0cygnL3BhdGgvZmlsZS5ub3QuZXhpc3RzJykpCi0KLSAgZGVmIHRlc3RQYXRoRXhpc3RzX2FzUm9vdChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ3Rlc3QnLCAnLWUnLCAnL3Jvb3QvcGF0aC9leGlzdHMnXSwKLSAgICAgICAgICAgIGFzX3Jvb3Q9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUsIHRpbWVvdXQ9MTAsIHJldHJpZXM9MCksCi0gICAgICAgIHNlbGYuU2hlbGxFcnJvcigpKToKLSAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCi0gICAgICAgICAgc2VsZi5kZXZpY2UuUGF0aEV4aXN0cygnL3Jvb3QvcGF0aC9leGlzdHMnLCBhc19yb290PVRydWUpKQotCi0gIGRlZiB0ZXN0RmlsZUV4aXN0c19wYXRoRG9lc250RXhpc3Qoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWyd0ZXN0JywgJy1lJywgJy9wYXRoL2ZpbGUubm90LmV4aXN0cyddLAotICAgICAgICAgICAgYXNfcm9vdD1GYWxzZSwgY2hlY2tfcmV0dXJuPVRydWUsIHRpbWVvdXQ9MTAsIHJldHJpZXM9MCksCi0gICAgICAgIHNlbGYuU2hlbGxFcnJvcigpKToKLSAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kZXZpY2UuRmlsZUV4aXN0cygnL3BhdGgvZmlsZS5ub3QuZXhpc3RzJykpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNSZW1vdmVQYXRoVGVzdChEZXZpY2VVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0UmVtb3ZlUGF0aF9yZWd1bGFyKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsncm0nLCAnc29tZSBmaWxlJ10sIGFzX3Jvb3Q9RmFsc2UsIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgW10pOgotICAgICAgc2VsZi5kZXZpY2UuUmVtb3ZlUGF0aCgnc29tZSBmaWxlJykKLQotICBkZWYgdGVzdFJlbW92ZVBhdGhfd2l0aEZvcmNlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsncm0nLCAnLWYnLCAnc29tZSBmaWxlJ10sIGFzX3Jvb3Q9RmFsc2UsIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgW10pOgotICAgICAgc2VsZi5kZXZpY2UuUmVtb3ZlUGF0aCgnc29tZSBmaWxlJywgZm9yY2U9VHJ1ZSkKLQotICBkZWYgdGVzdFJlbW92ZVBhdGhfcmVjdXJzaXZlbHkoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydybScsICctcicsICcvcmVtb3ZlL3RoaXMvZGlyJ10sIGFzX3Jvb3Q9RmFsc2UsIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgW10pOgotICAgICAgc2VsZi5kZXZpY2UuUmVtb3ZlUGF0aCgnL3JlbW92ZS90aGlzL2RpcicsIHJlY3Vyc2l2ZT1UcnVlKQotCi0gIGRlZiB0ZXN0UmVtb3ZlUGF0aF93aXRoUm9vdChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ3JtJywgJ3NvbWUgZmlsZSddLCBhc19yb290PVRydWUsIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgW10pOgotICAgICAgc2VsZi5kZXZpY2UuUmVtb3ZlUGF0aCgnc29tZSBmaWxlJywgYXNfcm9vdD1UcnVlKQotCi0gIGRlZiB0ZXN0UmVtb3ZlUGF0aF9tYW55UGF0aHMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydybScsICdlZW55JywgJ21lZW55JywgJ21pbnknLCAnbW9lJ10sCi0gICAgICAgICAgICBhc19yb290PUZhbHNlLCBjaGVja19yZXR1cm49VHJ1ZSksCi0gICAgICAgIFtdKToKLSAgICAgIHNlbGYuZGV2aWNlLlJlbW92ZVBhdGgoWydlZW55JywgJ21lZW55JywgJ21pbnknLCAnbW9lJ10pCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNQdWxsRmlsZVRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdFB1bGxGaWxlX2V4aXN0c09uRGV2aWNlKHNlbGYpOgotICAgIHdpdGggbW9jay5wYXRjaCgnb3MucGF0aC5leGlzdHMnLCByZXR1cm5fdmFsdWU9VHJ1ZSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgICBzZWxmLmNhbGwuYWRiLlB1bGwoJy9kYXRhL2FwcC90ZXN0LmZpbGUuZXhpc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy90ZXN0L2ZpbGUvaG9zdC9wYXRoJykpOgotICAgICAgICBzZWxmLmRldmljZS5QdWxsRmlsZSgnL2RhdGEvYXBwL3Rlc3QuZmlsZS5leGlzdHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Rlc3QvZmlsZS9ob3N0L3BhdGgnKQotCi0gIGRlZiB0ZXN0UHVsbEZpbGVfZG9lc250RXhpc3RPbkRldmljZShzZWxmKToKLSAgICB3aXRoIG1vY2sucGF0Y2goJ29zLnBhdGguZXhpc3RzJywgcmV0dXJuX3ZhbHVlPVRydWUpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgICAgc2VsZi5jYWxsLmFkYi5QdWxsKCcvZGF0YS9hcHAvdGVzdC5maWxlLmRvZXMubm90LmV4aXN0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy90ZXN0L2ZpbGUvaG9zdC9wYXRoJyksCi0gICAgICAgICAgc2VsZi5Db21tYW5kRXJyb3IoJ3JlbW90ZSBvYmplY3QgZG9lcyBub3QgZXhpc3QnKSk6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgICAgIHNlbGYuZGV2aWNlLlB1bGxGaWxlKCcvZGF0YS9hcHAvdGVzdC5maWxlLmRvZXMubm90LmV4aXN0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Rlc3QvZmlsZS9ob3N0L3BhdGgnKQotCi0KLWNsYXNzIERldmljZVV0aWxzUmVhZEZpbGVUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RSZWFkRmlsZVdpdGhQdWxsX3N1Y2Nlc3Moc2VsZik6Ci0gICAgdG1wX2hvc3RfZGlyID0gJy90bXAvZGlyL29uLmhvc3QvJwotICAgIHRtcF9ob3N0ID0gTW9ja1RlbXBGaWxlKCcvdG1wL2Rpci9vbi5ob3N0L3RtcF9SZWFkRmlsZVdpdGhQdWxsJykKLSAgICB0bXBfaG9zdC5maWxlLnJlYWQucmV0dXJuX3ZhbHVlID0gJ3NvbWUgaW50ZXJlc3RpbmcgY29udGVudHMnCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAobW9jay5jYWxsLnRlbXBmaWxlLm1rZHRlbXAoKSwgdG1wX2hvc3RfZGlyKSwKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuUHVsbCgnL3BhdGgvdG8vZGV2aWNlL2ZpbGUnLCBtb2NrLkFOWSkpLAotICAgICAgICAobW9jay5jYWxsLl9fYnVpbHRpbl9fLm9wZW4obW9jay5BTlksICdyJyksIHRtcF9ob3N0KSwKLSAgICAgICAgKG1vY2suY2FsbC5vcy5wYXRoLmV4aXN0cyh0bXBfaG9zdF9kaXIpLCBUcnVlKSwKLSAgICAgICAgKG1vY2suY2FsbC5zaHV0aWwucm10cmVlKHRtcF9ob3N0X2RpciksIE5vbmUpKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdzb21lIGludGVyZXN0aW5nIGNvbnRlbnRzJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGV2aWNlLl9SZWFkRmlsZVdpdGhQdWxsKCcvcGF0aC90by9kZXZpY2UvZmlsZScpKQotICAgIHRtcF9ob3N0LmZpbGUucmVhZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpCi0KLSAgZGVmIHRlc3RSZWFkRmlsZVdpdGhQdWxsX3JlamVjdGVkKHNlbGYpOgotICAgIHRtcF9ob3N0X2RpciA9ICcvdG1wL2Rpci9vbi5ob3N0LycKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChtb2NrLmNhbGwudGVtcGZpbGUubWtkdGVtcCgpLCB0bXBfaG9zdF9kaXIpLAotICAgICAgICAoc2VsZi5jYWxsLmFkYi5QdWxsKCcvcGF0aC90by9kZXZpY2UvZmlsZScsIG1vY2suQU5ZKSwKLSAgICAgICAgIHNlbGYuQ29tbWFuZEVycm9yKCkpLAotICAgICAgICAobW9jay5jYWxsLm9zLnBhdGguZXhpc3RzKHRtcF9ob3N0X2RpciksIFRydWUpLAotICAgICAgICAobW9jay5jYWxsLnNodXRpbC5ybXRyZWUodG1wX2hvc3RfZGlyKSwgTm9uZSkpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICAgIHNlbGYuZGV2aWNlLl9SZWFkRmlsZVdpdGhQdWxsKCcvcGF0aC90by9kZXZpY2UvZmlsZScpCi0KLSAgZGVmIHRlc3RSZWFkRmlsZV9leGlzdHMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5GaWxlU2l6ZSgnL3JlYWQvdGhpcy90ZXN0L2ZpbGUnLCBhc19yb290PUZhbHNlKSwgMjU2KSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydjYXQnLCAnL3JlYWQvdGhpcy90ZXN0L2ZpbGUnXSwKLSAgICAgICAgICAgIGFzX3Jvb3Q9RmFsc2UsIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgIFsndGhpcyBpcyBhIHRlc3QgZmlsZSddKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKCd0aGlzIGlzIGEgdGVzdCBmaWxlXG4nLAotICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRldmljZS5SZWFkRmlsZSgnL3JlYWQvdGhpcy90ZXN0L2ZpbGUnKSkKLQotICBkZWYgdGVzdFJlYWRGaWxlX2V4aXN0czIoc2VsZik6Ci0gICAgIyBTYW1lIGFzIHRlc3RSZWFkRmlsZV9leGlzdHMsIGJ1dCB1c2VzIEFuZHJvaWQgTiBscyBvdXRwdXQuCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5GaWxlU2l6ZSgnL3JlYWQvdGhpcy90ZXN0L2ZpbGUnLCBhc19yb290PUZhbHNlKSwgMjU2KSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydjYXQnLCAnL3JlYWQvdGhpcy90ZXN0L2ZpbGUnXSwKLSAgICAgICAgICAgIGFzX3Jvb3Q9RmFsc2UsIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgIFsndGhpcyBpcyBhIHRlc3QgZmlsZSddKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKCd0aGlzIGlzIGEgdGVzdCBmaWxlXG4nLAotICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRldmljZS5SZWFkRmlsZSgnL3JlYWQvdGhpcy90ZXN0L2ZpbGUnKSkKLQotICBkZWYgdGVzdFJlYWRGaWxlX2RvZXNOb3RFeGlzdChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5GaWxlU2l6ZSgnL3RoaXMvZmlsZS9kb2VzLm5vdC5leGlzdCcsIGFzX3Jvb3Q9RmFsc2UpLAotICAgICAgICBzZWxmLkNvbW1hbmRFcnJvcignRmlsZSBkb2VzIG5vdCBleGlzdCcpKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgICBzZWxmLmRldmljZS5SZWFkRmlsZSgnL3RoaXMvZmlsZS9kb2VzLm5vdC5leGlzdCcpCi0KLSAgZGVmIHRlc3RSZWFkRmlsZV96ZXJvU2l6ZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkZpbGVTaXplKCcvdGhpcy9maWxlL2hhcy96ZXJvL3NpemUnLCBhc19yb290PUZhbHNlKSwKLSAgICAgICAgIDApLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fUmVhZEZpbGVXaXRoUHVsbCgnL3RoaXMvZmlsZS9oYXMvemVyby9zaXplJyksCi0gICAgICAgICAnYnV0IGl0IGhhcyBjb250ZW50c1xuJykpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYnV0IGl0IGhhcyBjb250ZW50c1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXZpY2UuUmVhZEZpbGUoJy90aGlzL2ZpbGUvaGFzL3plcm8vc2l6ZScpKQotCi0gIGRlZiB0ZXN0UmVhZEZpbGVfd2l0aFNVKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuRmlsZVNpemUoCi0gICAgICAgICAgICAnL3RoaXMvZmlsZS9jYW4uYmUucmVhZC53aXRoLnN1JywgYXNfcm9vdD1UcnVlKSwgMjU2KSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydjYXQnLCAnL3RoaXMvZmlsZS9jYW4uYmUucmVhZC53aXRoLnN1J10sCi0gICAgICAgICAgICBhc19yb290PVRydWUsIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgIFsndGhpcyBpcyBhIHRlc3QgZmlsZScsICdyZWFkIHdpdGggc3UnXSkpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAndGhpcyBpcyBhIHRlc3QgZmlsZVxucmVhZCB3aXRoIHN1XG4nLAotICAgICAgICAgIHNlbGYuZGV2aWNlLlJlYWRGaWxlKCcvdGhpcy9maWxlL2Nhbi5iZS5yZWFkLndpdGguc3UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzX3Jvb3Q9VHJ1ZSkpCi0KLSAgZGVmIHRlc3RSZWFkRmlsZV93aXRoUHVsbChzZWxmKToKLSAgICBjb250ZW50cyA9ICdhJyAqIDEyMzQ1NgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuRmlsZVNpemUoJy9yZWFkL3RoaXMvYmlnL3Rlc3QvZmlsZScsIGFzX3Jvb3Q9RmFsc2UpLAotICAgICAgICAgMTIzNDU2KSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX1JlYWRGaWxlV2l0aFB1bGwoJy9yZWFkL3RoaXMvYmlnL3Rlc3QvZmlsZScpLAotICAgICAgICAgY29udGVudHMpKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgY29udGVudHMsIHNlbGYuZGV2aWNlLlJlYWRGaWxlKCcvcmVhZC90aGlzL2JpZy90ZXN0L2ZpbGUnKSkKLQotICBkZWYgdGVzdFJlYWRGaWxlX3dpdGhQdWxsQW5kU1Uoc2VsZik6Ci0gICAgY29udGVudHMgPSAnYicgKiAxMjM0NTYKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkZpbGVTaXplKAotICAgICAgICAgICAgJy90aGlzL2JpZy9maWxlL2Nhbi5iZS5yZWFkLndpdGguc3UnLCBhc19yb290PVRydWUpLCAxMjM0NTYpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5OZWVkc1NVKCksIFRydWUpLAotICAgICAgICAobW9jay5jYWxsLmRldmlsLmFuZHJvaWQuZGV2aWNlX3RlbXBfZmlsZS5EZXZpY2VUZW1wRmlsZShzZWxmLmFkYiksCi0gICAgICAgICBNb2NrVGVtcEZpbGUoJy9zZGNhcmQvdG1wL29uLmRldmljZScpKSwKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAnU1JDPS90aGlzL2JpZy9maWxlL2Nhbi5iZS5yZWFkLndpdGguc3UgREVTVD0vc2RjYXJkL3RtcC9vbi5kZXZpY2U7JwotICAgICAgICAgICAgJ2NwICIkU1JDIiAiJERFU1QiICYmIGNobW9kIDY2NiAiJERFU1QiJywKLSAgICAgICAgICAgIHNoZWxsPVRydWUsIGFzX3Jvb3Q9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fUmVhZEZpbGVXaXRoUHVsbCgnL3NkY2FyZC90bXAvb24uZGV2aWNlJyksCi0gICAgICAgICBjb250ZW50cykpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICBjb250ZW50cywKLSAgICAgICAgICBzZWxmLmRldmljZS5SZWFkRmlsZSgnL3RoaXMvYmlnL2ZpbGUvY2FuLmJlLnJlYWQud2l0aC5zdScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNfcm9vdD1UcnVlKSkKLQotICBkZWYgdGVzdFJlYWRGaWxlX2ZvcmNlUHVsbChzZWxmKToKLSAgICBjb250ZW50cyA9ICdhJyAqIDEyMzQ1NgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLl9SZWFkRmlsZVdpdGhQdWxsKCcvcmVhZC90aGlzL2JpZy90ZXN0L2ZpbGUnKSwKLSAgICAgICAgY29udGVudHMpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICBjb250ZW50cywKLSAgICAgICAgICBzZWxmLmRldmljZS5SZWFkRmlsZSgnL3JlYWQvdGhpcy9iaWcvdGVzdC9maWxlJywgZm9yY2VfcHVsbD1UcnVlKSkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc1dyaXRlRmlsZVRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdFdyaXRlRmlsZVdpdGhQdXNoX3N1Y2Nlc3Moc2VsZik6Ci0gICAgdG1wX2hvc3QgPSBNb2NrVGVtcEZpbGUoJy90bXAvZmlsZS9vbi5ob3N0JykKLSAgICBjb250ZW50cyA9ICdzb21lIGludGVyZXN0aW5nIGNvbnRlbnRzJwotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKG1vY2suY2FsbC50ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKSwgdG1wX2hvc3QpLAotICAgICAgICBzZWxmLmNhbGwuYWRiLlB1c2goJy90bXAvZmlsZS9vbi5ob3N0JywgJy9wYXRoL3RvL2RldmljZS9maWxlJykpOgotICAgICAgc2VsZi5kZXZpY2UuX1dyaXRlRmlsZVdpdGhQdXNoKCcvcGF0aC90by9kZXZpY2UvZmlsZScsIGNvbnRlbnRzKQotICAgIHRtcF9ob3N0LmZpbGUud3JpdGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoY29udGVudHMpCi0KLSAgZGVmIHRlc3RXcml0ZUZpbGVXaXRoUHVzaF9yZWplY3RlZChzZWxmKToKLSAgICB0bXBfaG9zdCA9IE1vY2tUZW1wRmlsZSgnL3RtcC9maWxlL29uLmhvc3QnKQotICAgIGNvbnRlbnRzID0gJ3NvbWUgaW50ZXJlc3RpbmcgY29udGVudHMnCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAobW9jay5jYWxsLnRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpLCB0bXBfaG9zdCksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlB1c2goJy90bXAvZmlsZS9vbi5ob3N0JywgJy9wYXRoL3RvL2RldmljZS9maWxlJyksCi0gICAgICAgICBzZWxmLkNvbW1hbmRFcnJvcigpKSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgICAgc2VsZi5kZXZpY2UuX1dyaXRlRmlsZVdpdGhQdXNoKCcvcGF0aC90by9kZXZpY2UvZmlsZScsIGNvbnRlbnRzKQotCi0gIGRlZiB0ZXN0V3JpdGVGaWxlX3dpdGhQdXNoKHNlbGYpOgotICAgIGNvbnRlbnRzID0gJ3NvbWUgbGFyZ2UgY29udGVudHMgJyAqIDI2ICAjIDIwICogMjYgPSA1MjAgY2hhcnMKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuX1dyaXRlRmlsZVdpdGhQdXNoKCcvcGF0aC90by9kZXZpY2UvZmlsZScsIGNvbnRlbnRzKSk6Ci0gICAgICBzZWxmLmRldmljZS5Xcml0ZUZpbGUoJy9wYXRoL3RvL2RldmljZS9maWxlJywgY29udGVudHMpCi0KLSAgZGVmIHRlc3RXcml0ZUZpbGVfd2l0aFB1c2hGb3JjZWQoc2VsZik6Ci0gICAgY29udGVudHMgPSAndGlueSBjb250ZW50cycKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuX1dyaXRlRmlsZVdpdGhQdXNoKCcvcGF0aC90by9kZXZpY2UvZmlsZScsIGNvbnRlbnRzKSk6Ci0gICAgICBzZWxmLmRldmljZS5Xcml0ZUZpbGUoJy9wYXRoL3RvL2RldmljZS9maWxlJywgY29udGVudHMsIGZvcmNlX3B1c2g9VHJ1ZSkKLQotICBkZWYgdGVzdFdyaXRlRmlsZV93aXRoUHVzaEFuZFNVKHNlbGYpOgotICAgIGNvbnRlbnRzID0gJ3NvbWUgbGFyZ2UgY29udGVudHMgJyAqIDI2ICAjIDIwICogMjYgPSA1MjAgY2hhcnMKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLk5lZWRzU1UoKSwgVHJ1ZSksCi0gICAgICAgIChtb2NrLmNhbGwuZGV2aWwuYW5kcm9pZC5kZXZpY2VfdGVtcF9maWxlLkRldmljZVRlbXBGaWxlKHNlbGYuYWRiKSwKLSAgICAgICAgIE1vY2tUZW1wRmlsZSgnL3NkY2FyZC90bXAvb24uZGV2aWNlJykpLAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLl9Xcml0ZUZpbGVXaXRoUHVzaCgnL3NkY2FyZC90bXAvb24uZGV2aWNlJywgY29udGVudHMpLAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnY3AnLCAnL3NkY2FyZC90bXAvb24uZGV2aWNlJywgJy9wYXRoL3RvL2RldmljZS9maWxlJ10sCi0gICAgICAgICAgICBhc19yb290PVRydWUsIGNoZWNrX3JldHVybj1UcnVlKSk6Ci0gICAgICBzZWxmLmRldmljZS5Xcml0ZUZpbGUoJy9wYXRoL3RvL2RldmljZS9maWxlJywgY29udGVudHMsIGFzX3Jvb3Q9VHJ1ZSkKLQotICBkZWYgdGVzdFdyaXRlRmlsZV93aXRoRWNobyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbChzZWxmLmNhbGwuYWRiLlNoZWxsKAotICAgICAgICAiZWNobyAtbiB0aGUuY29udGVudHMgPiAvdGVzdC9maWxlL3RvLndyaXRlIiksICcnKToKLSAgICAgIHNlbGYuZGV2aWNlLldyaXRlRmlsZSgnL3Rlc3QvZmlsZS90by53cml0ZScsICd0aGUuY29udGVudHMnKQotCi0gIGRlZiB0ZXN0V3JpdGVGaWxlX3dpdGhFY2hvQW5kUXVvdGVzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKHNlbGYuY2FsbC5hZGIuU2hlbGwoCi0gICAgICAgICJlY2hvIC1uICd0aGUgY29udGVudHMnID4gJy90ZXN0L2ZpbGUvdG8gd3JpdGUnIiksICcnKToKLSAgICAgIHNlbGYuZGV2aWNlLldyaXRlRmlsZSgnL3Rlc3QvZmlsZS90byB3cml0ZScsICd0aGUgY29udGVudHMnKQotCi0gIGRlZiB0ZXN0V3JpdGVGaWxlX3dpdGhFY2hvQW5kU1Uoc2VsZik6Ci0gICAgZXhwZWN0ZWRfY21kX3dpdGhvdXRfc3UgPSAic2ggLWMgJ2VjaG8gLW4gY29udGVudHMgPiAvdGVzdC9maWxlJyIKLSAgICBleHBlY3RlZF9jbWQgPSAnc3UgLWMgJXMnICUgZXhwZWN0ZWRfY21kX3dpdGhvdXRfc3UKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLk5lZWRzU1UoKSwgVHJ1ZSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLl9TdShleHBlY3RlZF9jbWRfd2l0aG91dF9zdSksIGV4cGVjdGVkX2NtZCksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKGV4cGVjdGVkX2NtZCksCi0gICAgICAgICAnJykpOgotICAgICAgc2VsZi5kZXZpY2UuV3JpdGVGaWxlKCcvdGVzdC9maWxlJywgJ2NvbnRlbnRzJywgYXNfcm9vdD1UcnVlKQotCi0KLWNsYXNzIERldmljZVV0aWxzU3RhdERpcmVjdG9yeVRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLSAgIyBOb3RlOiBBbHNvIHRlc3RzIExpc3REaXJlY3RvcnkgaW4gdGVzdFN0YXREaXJlY3RvcnlfZmlsZUxpc3QuCi0KLSAgRVhBTVBMRV9MU19PVVRQVVQgPSBbCi0gICAgJ3RvdGFsIDEyMzQ1JywKLSAgICAnZHJ3eHIteHIteCAgMTkgcm9vdCAgIHJvb3QgICAgICAgICAgMCAxOTcwLTA0LTA2IDE4OjAzIC4nLAotICAgICdkcnd4ci14ci14ICAxOSByb290ICAgcm9vdCAgICAgICAgICAwIDE5NzAtMDQtMDYgMTg6MDMgLi4nLAotICAgICdkcnd4ci14ci14ICAgNiByb290ICAgcm9vdCAgICAgICAgICAgIDE5NzAtMDEtMDEgMDA6MDAgc29tZV9kaXInLAotICAgICctcnctci0tci0tICAgMSByb290ICAgcm9vdCAgICAgICAgNzIzIDE5NzEtMDEtMDEgMDc6MDQgc29tZV9maWxlJywKLSAgICAnLXJ3LXItLS0tLSAgIDEgcm9vdCAgIHJvb3QgICAgICAgIDMyNyAyMDA5LTAyLTEzIDIzOjMwIE15IE11c2ljIEZpbGUnLAotICAgICMgU29tZSBBbmRyb2lkIHZlcnNpb25zIGVzY2FwZSBzcGFjZXMgaW4gZmlsZSBuYW1lcwotICAgICctcnctcnctcnctICAgMSByb290ICAgcm9vdCAgICAgICAgICAwIDIwMTgtMDEtMTEgMTM6MzUgTG9jYWxcXCBTdGF0ZScsCi0gICAgIyBPbGRlciBBbmRyb2lkIHZlcnNpb25zIGRvIG5vdCBwcmludCBzdF9ubGluawotICAgICdscnd4cnd4cnd4IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgIDE5NzAtMDEtMDEgMDA6MDAgbG5rIC0+IC9zb21lL3BhdGgnLAotICAgICdzcnd4cnd4LS0tIHN5c3RlbSAgIHN5c3RlbSAgICAgICAgICAgIDIwMTYtMDUtMzEgMTc6MjUgYV9zb2NrZXQxJywKLSAgICAnZHJ3eHJ3eHJ3dCBzeXN0ZW0gICBtaXNjICAgICAgICAgICAgICAxOTcwLTExLTIzIDAyOjI1IHRtcCcsCi0gICAgJ2Ryd3hyLXMtLS0gc3lzdGVtICAgc2hlbGwgICAgICAgICAgICAgMTk3MC0xMS0yMyAwMjoyNCBteV9jbWQnLAotICAgICdjci0tci0tLS0tIHJvb3QgICAgIHN5c3RlbSAgICAxMCwgMTgzIDE5NzEtMDEtMDEgMDc6MDQgcmFuZG9tJywKLSAgICAnYnJ3LS0tLS0tLSByb290ICAgICByb290ICAgICAgIDcsICAgMCAxOTcxLTAxLTAxIDA3OjA0IGJsb2NrX2RldicsCi0gICAgJy1yd1MtLS0tLS0gcm9vdCAgICAgc2hlbGwgICAgICAxNTc0MDQgMjAxNS0wNC0xMyAxNTo0NCBzaWxseScsCi0gIF0KLQotICBGSUxFTkFNRVMgPSBbCi0gICAgJ3NvbWVfZGlyJywgJ3NvbWVfZmlsZScsICdNeSBNdXNpYyBGaWxlJywgJ0xvY2FsIFN0YXRlJywgJ2xuaycsCi0gICAgJ2Ffc29ja2V0MScsICd0bXAnLCAnbXlfY21kJywgJ3JhbmRvbScsICdibG9ja19kZXYnLCAnc2lsbHknXQotCi0gIGRlZiBnZXRTdGF0RW50cmllcyhzZWxmLCBwYXRoX2dpdmVuPScvJywgcGF0aF9saXN0ZWQ9Jy8nKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2xzJywgJy1hJywgJy1sJywgcGF0aF9saXN0ZWRdLAotICAgICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUsIGFzX3Jvb3Q9RmFsc2UsIGVudj17J1RaJzogJ3V0Yyd9KSwKLSAgICAgICAgc2VsZi5FWEFNUExFX0xTX09VVFBVVCk6Ci0gICAgICBlbnRyaWVzID0gc2VsZi5kZXZpY2UuU3RhdERpcmVjdG9yeShwYXRoX2dpdmVuKQotICAgIHJldHVybiB7ZlsnZmlsZW5hbWUnXTogZiBmb3IgZiBpbiBlbnRyaWVzfQotCi0gIGRlZiBnZXRMaXN0RW50cmllcyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2xzJywgJy1hJywgJy1sJywgJy8nXSwKLSAgICAgICAgICAgIGNoZWNrX3JldHVybj1UcnVlLCBhc19yb290PUZhbHNlLCBlbnY9eydUWic6ICd1dGMnfSksCi0gICAgICAgIHNlbGYuRVhBTVBMRV9MU19PVVRQVVQpOgotICAgICAgcmV0dXJuIHNlbGYuZGV2aWNlLkxpc3REaXJlY3RvcnkoJy8nKQotCi0gIGRlZiB0ZXN0U3RhdERpcmVjdG9yeV9mb3JjZVRyYWlsaW5nU2xhc2goc2VsZik6Ci0gICAgc2VsZi5nZXRTdGF0RW50cmllcyhwYXRoX2dpdmVuPScvZm9vL2Jhci8nLCBwYXRoX2xpc3RlZD0nL2Zvby9iYXIvJykKLSAgICBzZWxmLmdldFN0YXRFbnRyaWVzKHBhdGhfZ2l2ZW49Jy9mb28vYmFyJywgcGF0aF9saXN0ZWQ9Jy9mb28vYmFyLycpCi0KLSAgZGVmIHRlc3RTdGF0RGlyZWN0b3J5X2ZpbGVMaXN0KHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChzZWxmLmdldFN0YXRFbnRyaWVzKCkua2V5cygpLCBzZWxmLkZJTEVOQU1FUykKLSAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc2VsZi5nZXRMaXN0RW50cmllcygpLCBzZWxmLkZJTEVOQU1FUykKLQotICBkZWYgdGVzdFN0YXREaXJlY3RvcnlfZmlsZU1vZGVzKHNlbGYpOgotICAgIGV4cGVjdGVkX21vZGVzID0gKAotICAgICAgKCdzb21lX2RpcicsIHN0YXQuU19JU0RJUiksCi0gICAgICAoJ3NvbWVfZmlsZScsIHN0YXQuU19JU1JFRyksCi0gICAgICAoJ2xuaycsIHN0YXQuU19JU0xOSyksCi0gICAgICAoJ2Ffc29ja2V0MScsIHN0YXQuU19JU1NPQ0spLAotICAgICAgKCdibG9ja19kZXYnLCBzdGF0LlNfSVNCTEspLAotICAgICAgKCdyYW5kb20nLCBzdGF0LlNfSVNDSFIpLAotICAgICkKLSAgICBlbnRyaWVzID0gc2VsZi5nZXRTdGF0RW50cmllcygpCi0gICAgZm9yIGZpbGVuYW1lLCBjaGVjayBpbiBleHBlY3RlZF9tb2RlczoKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGVjayhlbnRyaWVzW2ZpbGVuYW1lXVsnc3RfbW9kZSddKSkKLQotICBkZWYgdGVzdFN0YXREaXJlY3RvcnlfZmlsZVBlcm1pc3Npb25zKHNlbGYpOgotICAgIHNob3VsZF9oYXZlID0gKAotICAgICAgKCdzb21lX2ZpbGUnLCBzdGF0LlNfSVdVU1IpLCAgIyBPd25lciBjYW4gd3JpdGUuCi0gICAgICAoJ3RtcCcsIHN0YXQuU19JWE9USCksICAjIE90aGVycyBjYW4gZXhlY3V0ZS4KLSAgICAgICgndG1wJywgc3RhdC5TX0lTVlRYKSwgICMgSGFzIHN0aWNreSBiaXQuCi0gICAgICAoJ215X2NtZCcsIHN0YXQuU19JU0dJRCksICAjIEhhcyBzZXQtZ3JvdXAtSUQgYml0LgotICAgICAgKCdzaWxseScsIHN0YXQuU19JU1VJRCksICAjIEhhcyBzZXQgVUlEIGJpdC4KLSAgICApCi0gICAgc2hvdWxkX25vdF9oYXZlID0gKAotICAgICAgKCdzb21lX2ZpbGUnLCBzdGF0LlNfSVdPVEgpLCAgIyBPdGhlcnMgY2FuJ3Qgd3JpdGUuCi0gICAgICAoJ2Jsb2NrX2RldicsIHN0YXQuU19JUkdSUCksICAjIEdyb3VwIGNhbid0IHJlYWQuCi0gICAgICAoJ3NpbGx5Jywgc3RhdC5TX0lYVVNSKSwgICMgT3duZXIgY2FuJ3QgZXhlY3V0ZS4KLSAgICApCi0gICAgZW50cmllcyA9IHNlbGYuZ2V0U3RhdEVudHJpZXMoKQotICAgIGZvciBmaWxlbmFtZSwgYml0IGluIHNob3VsZF9oYXZlOgotICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudHJpZXNbZmlsZW5hbWVdWydzdF9tb2RlJ10gJiBiaXQpCi0gICAgZm9yIGZpbGVuYW1lLCBiaXQgaW4gc2hvdWxkX25vdF9oYXZlOgotICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnRyaWVzW2ZpbGVuYW1lXVsnc3RfbW9kZSddICYgYml0KQotCi0gIGRlZiB0ZXN0U3RhdERpcmVjdG9yeV9udW1IYXJkTGlua3Moc2VsZik6Ci0gICAgZW50cmllcyA9IHNlbGYuZ2V0U3RhdEVudHJpZXMoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cmllc1snc29tZV9kaXInXVsnc3RfbmxpbmsnXSwgNikKLSAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXNbJ3NvbWVfZmlsZSddWydzdF9ubGluayddLCAxKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ3N0X25saW5rJyBpbiBlbnRyaWVzWyd0bXAnXSkKLQotICBkZWYgdGVzdFN0YXREaXJlY3RvcnlfZmlsZU93bmVycyhzZWxmKToKLSAgICBlbnRyaWVzID0gc2VsZi5nZXRTdGF0RW50cmllcygpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyaWVzWydzb21lX2RpciddWydzdF9vd25lciddLCAncm9vdCcpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyaWVzWydteV9jbWQnXVsnc3Rfb3duZXInXSwgJ3N5c3RlbScpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyaWVzWydteV9jbWQnXVsnc3RfZ3JvdXAnXSwgJ3NoZWxsJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXNbJ3RtcCddWydzdF9ncm91cCddLCAnbWlzYycpCi0KLSAgZGVmIHRlc3RTdGF0RGlyZWN0b3J5X2ZpbGVTaXplKHNlbGYpOgotICAgIGVudHJpZXMgPSBzZWxmLmdldFN0YXRFbnRyaWVzKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXNbJ3NvbWVfZmlsZSddWydzdF9zaXplJ10sIDcyMykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXNbJ015IE11c2ljIEZpbGUnXVsnc3Rfc2l6ZSddLCAzMjcpCi0gICAgIyBTaXplcyBhcmUgc29tZXRpbWVzIG5vdCByZXBvcnRlZCBmb3Igbm9uLXJlZ3VsYXIgZmlsZXMsIGRvbid0IHRyeSB0bwotICAgICMgZ3Vlc3MgdGhlIHNpemUgaW4gdGhvc2UgY2FzZXMuCi0gICAgc2VsZi5hc3NlcnRGYWxzZSgnc3Rfc2l6ZScgaW4gZW50cmllc1snc29tZV9kaXInXSkKLQotICBkZWYgdGVzdFN0YXREaXJlY3RvcnlfZmlsZURhdGVUaW1lKHNlbGYpOgotICAgIGVudHJpZXMgPSBzZWxmLmdldFN0YXRFbnRyaWVzKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXNbJ3NvbWVfZGlyJ11bJ3N0X210aW1lJ10sIDApICAjIEVwb2NoIQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cmllc1snTXkgTXVzaWMgRmlsZSddWydzdF9tdGltZSddLCAxMjM0NTY3ODAwKQotCi0gIGRlZiB0ZXN0U3RhdERpcmVjdG9yeV9kZXZpY2VUeXBlKHNlbGYpOgotICAgIGVudHJpZXMgPSBzZWxmLmdldFN0YXRFbnRyaWVzKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXNbJ3JhbmRvbSddWydzdF9yZGV2X3BhaXInXSwgKDEwLCAxODMpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cmllc1snYmxvY2tfZGV2J11bJ3N0X3JkZXZfcGFpciddLCAoNywgMCkpCi0KLSAgZGVmIHRlc3RTdGF0RGlyZWN0b3J5X3N5bWJvbGljTGlua3Moc2VsZik6Ci0gICAgZW50cmllcyA9IHNlbGYuZ2V0U3RhdEVudHJpZXMoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cmllc1snbG5rJ11bJ3N5bWJvbGljX2xpbmtfdG8nXSwgJy9zb21lL3BhdGgnKQotICAgIGZvciBkIGluIGVudHJpZXMuaXRlcnZhbHVlcygpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3ltYm9saWNfbGlua190bycgaW4gZCwgc3RhdC5TX0lTTE5LKGRbJ3N0X21vZGUnXSkpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNTdGF0UGF0aFRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBFWEFNUExFX0RJUkVDVE9SWSA9IFsKLSAgICB7J2ZpbGVuYW1lJzogJ2Zvby50eHQnLCAnc3Rfc2l6ZSc6IDEyMywgJ3N0X3RpbWUnOiA0NTZ9LAotICAgIHsnZmlsZW5hbWUnOiAnc29tZV9kaXInLCAnc3RfdGltZSc6IDB9Ci0gIF0KLSAgSU5ERVggPSB7ZVsnZmlsZW5hbWUnXTogZSBmb3IgZSBpbiBFWEFNUExFX0RJUkVDVE9SWX0KLQotICBkZWYgdGVzdFN0YXRQYXRoX2ZpbGUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuU3RhdERpcmVjdG9yeSgnL2RhdGEvbG9jYWwvdG1wJywgYXNfcm9vdD1GYWxzZSksCi0gICAgICAgIHNlbGYuRVhBTVBMRV9ESVJFQ1RPUlkpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5JTkRFWFsnZm9vLnR4dCddLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXZpY2UuU3RhdFBhdGgoJy9kYXRhL2xvY2FsL3RtcC9mb28udHh0JykpCi0KLSAgZGVmIHRlc3RTdGF0UGF0aF9kaXJlY3Rvcnkoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuU3RhdERpcmVjdG9yeSgnL2RhdGEvbG9jYWwvdG1wJywgYXNfcm9vdD1GYWxzZSksCi0gICAgICAgIHNlbGYuRVhBTVBMRV9ESVJFQ1RPUlkpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5JTkRFWFsnc29tZV9kaXInXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGV2aWNlLlN0YXRQYXRoKCcvZGF0YS9sb2NhbC90bXAvc29tZV9kaXInKSkKLQotICBkZWYgdGVzdFN0YXRQYXRoX2RpcmVjdG9yeVdpdGhUcmFpbGluZ1NsYXNoKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLlN0YXREaXJlY3RvcnkoJy9kYXRhL2xvY2FsL3RtcCcsIGFzX3Jvb3Q9RmFsc2UpLAotICAgICAgICBzZWxmLkVYQU1QTEVfRElSRUNUT1JZKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuSU5ERVhbJ3NvbWVfZGlyJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRldmljZS5TdGF0UGF0aCgnL2RhdGEvbG9jYWwvdG1wL3NvbWVfZGlyLycpKQotCi0gIGRlZiB0ZXN0U3RhdFBhdGhfZG9lc05vdEV4aXN0KHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLlN0YXREaXJlY3RvcnkoJy9kYXRhL2xvY2FsL3RtcCcsIGFzX3Jvb3Q9RmFsc2UpLAotICAgICAgICBzZWxmLkVYQU1QTEVfRElSRUNUT1JZKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgICBzZWxmLmRldmljZS5TdGF0UGF0aCgnL2RhdGEvbG9jYWwvdG1wL2RvZXMubm90LmV4aXN0LnR4dCcpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNGaWxlU2l6ZVRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBFWEFNUExFX0RJUkVDVE9SWSA9IFsKLSAgICB7J2ZpbGVuYW1lJzogJ2Zvby50eHQnLCAnc3Rfc2l6ZSc6IDEyMywgJ3N0X210aW1lJzogNDU2fSwKLSAgICB7J2ZpbGVuYW1lJzogJ3NvbWVfZGlyJywgJ3N0X210aW1lJzogMH0KLSAgXQotCi0gIGRlZiB0ZXN0RmlsZVNpemVfZmlsZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5TdGF0RGlyZWN0b3J5KCcvZGF0YS9sb2NhbC90bXAnLCBhc19yb290PUZhbHNlKSwKLSAgICAgICAgc2VsZi5FWEFNUExFX0RJUkVDVE9SWSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscygxMjMsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRldmljZS5GaWxlU2l6ZSgnL2RhdGEvbG9jYWwvdG1wL2Zvby50eHQnKSkKLQotICBkZWYgdGVzdEZpbGVTaXplX2RvZXNOb3RFeGlzdChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5TdGF0RGlyZWN0b3J5KCcvZGF0YS9sb2NhbC90bXAnLCBhc19yb290PUZhbHNlKSwKLSAgICAgICAgc2VsZi5FWEFNUExFX0RJUkVDVE9SWSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgICAgc2VsZi5kZXZpY2UuRmlsZVNpemUoJy9kYXRhL2xvY2FsL3RtcC9kb2VzLm5vdC5leGlzdC50eHQnKQotCi0gIGRlZiB0ZXN0RmlsZVNpemVfZGlyZWN0b3J5V2l0aE5vU2l6ZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5TdGF0RGlyZWN0b3J5KCcvZGF0YS9sb2NhbC90bXAnLCBhc19yb290PUZhbHNlKSwKLSAgICAgICAgc2VsZi5FWEFNUExFX0RJUkVDVE9SWSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgICAgc2VsZi5kZXZpY2UuRmlsZVNpemUoJy9kYXRhL2xvY2FsL3RtcC9zb21lX2RpcicpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNTZXRKYXZhQXNzZXJ0c1Rlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdFNldEphdmFBc3NlcnRzX2VuYWJsZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJlYWRGaWxlKHNlbGYuZGV2aWNlLkxPQ0FMX1BST1BFUlRJRVNfUEFUSCksCi0gICAgICAgICAnc29tZS5leGFtcGxlLnByb3A9d2l0aCBhbiBleGFtcGxlIHZhbHVlXG4nCi0gICAgICAgICAnc29tZS5vdGhlci5wcm9wPXZhbHVlX29rXG4nKSwKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5Xcml0ZUZpbGUoCi0gICAgICAgICAgICBzZWxmLmRldmljZS5MT0NBTF9QUk9QRVJUSUVTX1BBVEgsCi0gICAgICAgICAgICAnc29tZS5leGFtcGxlLnByb3A9d2l0aCBhbiBleGFtcGxlIHZhbHVlXG4nCi0gICAgICAgICAgICAnc29tZS5vdGhlci5wcm9wPXZhbHVlX29rXG4nCi0gICAgICAgICAgICAnZGFsdmlrLnZtLmVuYWJsZWFzc2VydGlvbnM9YWxsXG4nKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgnZGFsdmlrLnZtLmVuYWJsZWFzc2VydGlvbnMnKSwgJycpLAotICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLlNldFByb3AoJ2RhbHZpay52bS5lbmFibGVhc3NlcnRpb25zJywgJ2FsbCcpKToKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmRldmljZS5TZXRKYXZhQXNzZXJ0cyhUcnVlKSkKLQotICBkZWYgdGVzdFNldEphdmFBc3NlcnRzX2Rpc2FibGUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SZWFkRmlsZShzZWxmLmRldmljZS5MT0NBTF9QUk9QRVJUSUVTX1BBVEgpLAotICAgICAgICAgJ3NvbWUuZXhhbXBsZS5wcm9wPXdpdGggYW4gZXhhbXBsZSB2YWx1ZVxuJwotICAgICAgICAgJ2RhbHZpay52bS5lbmFibGVhc3NlcnRpb25zPWFsbFxuJwotICAgICAgICAgJ3NvbWUub3RoZXIucHJvcD12YWx1ZV9va1xuJyksCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuV3JpdGVGaWxlKAotICAgICAgICAgICAgc2VsZi5kZXZpY2UuTE9DQUxfUFJPUEVSVElFU19QQVRILAotICAgICAgICAgICAgJ3NvbWUuZXhhbXBsZS5wcm9wPXdpdGggYW4gZXhhbXBsZSB2YWx1ZVxuJwotICAgICAgICAgICAgJ3NvbWUub3RoZXIucHJvcD12YWx1ZV9va1xuJyksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkdldFByb3AoJ2RhbHZpay52bS5lbmFibGVhc3NlcnRpb25zJyksICdhbGwnKSwKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5TZXRQcm9wKCdkYWx2aWsudm0uZW5hYmxlYXNzZXJ0aW9ucycsICcnKSk6Ci0gICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kZXZpY2UuU2V0SmF2YUFzc2VydHMoRmFsc2UpKQotCi0gIGRlZiB0ZXN0U2V0SmF2YUFzc2VydHNfYWxyZWFkeUVuYWJsZWQoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SZWFkRmlsZShzZWxmLmRldmljZS5MT0NBTF9QUk9QRVJUSUVTX1BBVEgpLAotICAgICAgICAgJ3NvbWUuZXhhbXBsZS5wcm9wPXdpdGggYW4gZXhhbXBsZSB2YWx1ZVxuJwotICAgICAgICAgJ2RhbHZpay52bS5lbmFibGVhc3NlcnRpb25zPWFsbFxuJwotICAgICAgICAgJ3NvbWUub3RoZXIucHJvcD12YWx1ZV9va1xuJyksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLkdldFByb3AoJ2RhbHZpay52bS5lbmFibGVhc3NlcnRpb25zJyksICdhbGwnKSk6Ci0gICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZGV2aWNlLlNldEphdmFBc3NlcnRzKFRydWUpKQotCi0gIGRlZiB0ZXN0U2V0SmF2YUFzc2VydHNfbWFsZm9ybWVkTG9jYWxQcm9wKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUmVhZEZpbGUoc2VsZi5kZXZpY2UuTE9DQUxfUFJPUEVSVElFU19QQVRIKSwKLSAgICAgICAgICdzb21lLmV4YW1wbGUucHJvcD13aXRoIGFuIGV4YW1wbGUgdmFsdWVcbicKLSAgICAgICAgICdtYWxmb3JtZWRfcHJvcGVydHlcbicKLSAgICAgICAgICdkYWx2aWsudm0uZW5hYmxlYXNzZXJ0aW9ucz1hbGxcbicKLSAgICAgICAgICdzb21lLm90aGVyLnByb3A9dmFsdWVfb2tcbicpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRQcm9wKCdkYWx2aWsudm0uZW5hYmxlYXNzZXJ0aW9ucycpLCAnYWxsJykpOgotICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmRldmljZS5TZXRKYXZhQXNzZXJ0cyhUcnVlKSkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0Vuc3VyZUNhY2hlSW5pdGlhbGl6ZWRUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RFbnN1cmVDYWNoZUluaXRpYWxpemVkX25vQ2FjaGVfc3VjY2VzcyhzZWxmKToKLSAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmRldmljZS5fY2FjaGVbJ3Rva2VuJ10pCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgQW55U3RyaW5nV2l0aCgnZ2V0cHJvcCcpLAotICAgICAgICAgICAgc2hlbGw9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUsIGxhcmdlX291dHB1dD1UcnVlKSwKLSAgICAgICAgWycvc2RjYXJkJywgJ1RPS0VOJ10pOgotICAgICAgc2VsZi5kZXZpY2UuX0Vuc3VyZUNhY2hlSW5pdGlhbGl6ZWQoKQotICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHNlbGYuZGV2aWNlLl9jYWNoZVsndG9rZW4nXSkKLQotICBkZWYgdGVzdEVuc3VyZUNhY2hlSW5pdGlhbGl6ZWRfbm9DYWNoZV9mYWlsdXJlKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuZGV2aWNlLl9jYWNoZVsndG9rZW4nXSkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBBbnlTdHJpbmdXaXRoKCdnZXRwcm9wJyksCi0gICAgICAgICAgICBzaGVsbD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUpLAotICAgICAgICBzZWxmLlRpbWVvdXRFcnJvcigpKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kVGltZW91dEVycm9yKToKLSAgICAgICAgc2VsZi5kZXZpY2UuX0Vuc3VyZUNhY2hlSW5pdGlhbGl6ZWQoKQotICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuZGV2aWNlLl9jYWNoZVsndG9rZW4nXSkKLQotICBkZWYgdGVzdEVuc3VyZUNhY2hlSW5pdGlhbGl6ZWRfY2FjaGUoc2VsZik6Ci0gICAgc2VsZi5kZXZpY2UuX2NhY2hlWyd0b2tlbiddID0gJ1RPS0VOJwotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygpOgotICAgICAgc2VsZi5kZXZpY2UuX0Vuc3VyZUNhY2hlSW5pdGlhbGl6ZWQoKQotICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHNlbGYuZGV2aWNlLl9jYWNoZVsndG9rZW4nXSkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0dldFByb3BUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RHZXRQcm9wX2V4aXN0cyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2dldHByb3AnLCAndGVzdC5wcm9wZXJ0eSddLCBjaGVja19yZXR1cm49VHJ1ZSwgc2luZ2xlX2xpbmU9VHJ1ZSwKLSAgICAgICAgICAgIHRpbWVvdXQ9c2VsZi5kZXZpY2UuX2RlZmF1bHRfdGltZW91dCwKLSAgICAgICAgICAgIHJldHJpZXM9c2VsZi5kZXZpY2UuX2RlZmF1bHRfcmV0cmllcyksCi0gICAgICAgICdwcm9wZXJ0eV92YWx1ZScpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbCgncHJvcGVydHlfdmFsdWUnLAotICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRldmljZS5HZXRQcm9wKCd0ZXN0LnByb3BlcnR5JykpCi0KLSAgZGVmIHRlc3RHZXRQcm9wX2RvZXNOb3RFeGlzdChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2dldHByb3AnLCAncHJvcGVydHkuZG9lcy5ub3QuZXhpc3QnXSwKLSAgICAgICAgICAgIGNoZWNrX3JldHVybj1UcnVlLCBzaW5nbGVfbGluZT1UcnVlLAotICAgICAgICAgICAgdGltZW91dD1zZWxmLmRldmljZS5fZGVmYXVsdF90aW1lb3V0LAotICAgICAgICAgICAgcmV0cmllcz1zZWxmLmRldmljZS5fZGVmYXVsdF9yZXRyaWVzKSwKLSAgICAgICAgJycpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5kZXZpY2UuR2V0UHJvcCgncHJvcGVydHkuZG9lcy5ub3QuZXhpc3QnKSkKLQotICBkZWYgdGVzdEdldFByb3BfY2FjaGVkUm9Qcm9wKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgc2VsZi5FbnN1cmVDYWNoZUluaXRpYWxpemVkKHByb3BzPVsnW3JvLmJ1aWxkLnR5cGVdOiBbdXNlcmRlYnVnXSddKSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFsKCd1c2VyZGVidWcnLAotICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRldmljZS5HZXRQcm9wKCdyby5idWlsZC50eXBlJywgY2FjaGU9VHJ1ZSkpCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKCd1c2VyZGVidWcnLAotICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRldmljZS5HZXRQcm9wKCdyby5idWlsZC50eXBlJywgY2FjaGU9VHJ1ZSkpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNTZXRQcm9wVGVzdChEZXZpY2VVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0U2V0UHJvcChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ3NldHByb3AnLCAndGVzdC5wcm9wZXJ0eScsICd0ZXN0IHZhbHVlJ10sIGNoZWNrX3JldHVybj1UcnVlKSk6Ci0gICAgICBzZWxmLmRldmljZS5TZXRQcm9wKCd0ZXN0LnByb3BlcnR5JywgJ3Rlc3QgdmFsdWUnKQotCi0gIGRlZiB0ZXN0U2V0UHJvcF9jaGVja19zdWNjZWVkcyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnc2V0cHJvcCcsICd0ZXN0LnByb3BlcnR5JywgJ25ld192YWx1ZSddLCBjaGVja19yZXR1cm49VHJ1ZSkpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRQcm9wKCd0ZXN0LnByb3BlcnR5JywgY2FjaGU9RmFsc2UpLCAnbmV3X3ZhbHVlJykpOgotICAgICAgc2VsZi5kZXZpY2UuU2V0UHJvcCgndGVzdC5wcm9wZXJ0eScsICduZXdfdmFsdWUnLCBjaGVjaz1UcnVlKQotCi0gIGRlZiB0ZXN0U2V0UHJvcF9jaGVja19mYWlscyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnc2V0cHJvcCcsICd0ZXN0LnByb3BlcnR5JywgJ25ld192YWx1ZSddLCBjaGVja19yZXR1cm49VHJ1ZSkpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5HZXRQcm9wKCd0ZXN0LnByb3BlcnR5JywgY2FjaGU9RmFsc2UpLCAnb2xkX3ZhbHVlJykpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICAgIHNlbGYuZGV2aWNlLlNldFByb3AoJ3Rlc3QucHJvcGVydHknLCAnbmV3X3ZhbHVlJywgY2hlY2s9VHJ1ZSkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0xpc3RQcm9jZXNzZXNUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzdXBlcihEZXZpY2VVdGlsc0xpc3RQcm9jZXNzZXNUZXN0LCBzZWxmKS5zZXRVcCgpCi0gICAgc2VsZi5zYW1wbGVfb3V0cHV0ID0gWwotICAgICAgICAnVVNFUiAgUElEICAgICBQUElEICBWU0laRSBSU1MgICBXQ0hBTiAgICAgICAgICBQQyAgTkFNRScsCi0gICAgICAgICd1c2VyICAxMDAxICAgIDEwMCAgIDEwMjQgIDEwMjQgIGZmZmZmZmZmIDAwMDAwMDAwIG9uZS5tYXRjaCcsCi0gICAgICAgICd1c2VyICAxMDAyICAgIDEwMCAgIDEwMjQgIDEwMjQgIGZmZmZmZmZmIDAwMDAwMDAwIHR3by5tYXRjaCcsCi0gICAgICAgICd1c2VyICAxMDAzICAgIDEwMSAgIDEwMjQgIDEwMjQgIGZmZmZmZmZmIDAwMDAwMDAwIHRocmVlLm1hdGNoJywKLSAgICAgICAgJ3VzZXIgIDEyMzQgICAgMTAxICAgMTAyNCAgMTAyNCAgZmZmZmZmZmYgMDAwMDAwMDAgbXkkcHJvY2VzcycsCi0gICAgICAgICd1c2VyICAxMjM2ICAgIDEwMCAgIDEwMjQgIDEwMjQgIGZmZmZmZmZmIDAwMDAwMDAwIGZvbycsCi0gICAgICAgICd1c2VyICAxNTc4ICAgIDEyMzYgIDEwMjQgIDEwMjQgIGZmZmZmZmZmIDAwMDAwMDAwIGZvbycsCi0gICAgXQotCi0gIGRlZiBfZ3JlcE91dHB1dChzZWxmLCBzdWJzdHJpbmcpOgotICAgIHJldHVybiBbbGluZSBmb3IgbGluZSBpbiBzZWxmLnNhbXBsZV9vdXRwdXQgaWYgc3Vic3RyaW5nIGluIGxpbmVdCi0KLSAgZGVmIHRlc3RMaXN0UHJvY2Vzc2VzX3Nka0dyZWF0ZXJUaGFuTm91Z2F0TVIxKHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPSh2ZXJzaW9uX2NvZGVzLk5PVUdBVF9NUjEgKyAxKSk6Ci0gICAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChzZWxmLmNhbGwuZGV2aWNlLmJ1aWxkX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPSdaWlo5OVonKToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLl9SdW5QaXBlZFNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgICAncHMgLWUgfCBncmVwIC1GIGV4YW1wbGUucHJvY2VzcycpLCBbXSk6Ci0gICAgICAgICAgc2VsZi5kZXZpY2UuTGlzdFByb2Nlc3NlcygnZXhhbXBsZS5wcm9jZXNzJykKLQotICBkZWYgdGVzdExpc3RQcm9jZXNzZXNfbm9NYXRjaGVzKHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPXZlcnNpb25fY29kZXMuTE9MTElQT1ApOgotICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgICAgc2VsZi5jYWxsLmRldmljZS5fUnVuUGlwZWRTaGVsbENvbW1hbmQoJ3BzIHwgZ3JlcCAtRiBkb2VzLm5vdC5tYXRjaCcpLAotICAgICAgICAgIHNlbGYuX2dyZXBPdXRwdXQoJ2RvZXMubm90Lm1hdGNoJykpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzZWxmLmRldmljZS5MaXN0UHJvY2Vzc2VzKCdkb2VzLm5vdC5tYXRjaCcpKQotCi0gIGRlZiB0ZXN0TGlzdFByb2Nlc3Nlc19vbmVNYXRjaChzZWxmKToKLSAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChzZWxmLmNhbGwuZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT12ZXJzaW9uX2NvZGVzLkxPTExJUE9QKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuX1J1blBpcGVkU2hlbGxDb21tYW5kKCdwcyB8IGdyZXAgLUYgb25lLm1hdGNoJyksCi0gICAgICAgICAgc2VsZi5fZ3JlcE91dHB1dCgnb25lLm1hdGNoJykpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgUHJvY2Vzc2VzKCgnb25lLm1hdGNoJywgMTAwMSwgMTAwKSksCi0gICAgICAgICAgICBzZWxmLmRldmljZS5MaXN0UHJvY2Vzc2VzKCdvbmUubWF0Y2gnKSkKLQotICBkZWYgdGVzdExpc3RQcm9jZXNzZXNfbXVsdGlwbGVNYXRjaGVzKHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPXZlcnNpb25fY29kZXMuTE9MTElQT1ApOgotICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgICAgc2VsZi5jYWxsLmRldmljZS5fUnVuUGlwZWRTaGVsbENvbW1hbmQoJ3BzIHwgZ3JlcCAtRiBtYXRjaCcpLAotICAgICAgICAgIHNlbGYuX2dyZXBPdXRwdXQoJ21hdGNoJykpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgUHJvY2Vzc2VzKCgnb25lLm1hdGNoJywgMTAwMSwgMTAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAoJ3R3by5tYXRjaCcsIDEwMDIsIDEwMCksCi0gICAgICAgICAgICAgICAgICAgICAgKCd0aHJlZS5tYXRjaCcsIDEwMDMsIDEwMSkpLAotICAgICAgICAgICAgc2VsZi5kZXZpY2UuTGlzdFByb2Nlc3NlcygnbWF0Y2gnKSkKLQotICBkZWYgdGVzdExpc3RQcm9jZXNzZXNfcXVvdGFibGUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmRldmljZS5idWlsZF92ZXJzaW9uX3NkaywKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9dmVyc2lvbl9jb2Rlcy5MT0xMSVBPUCk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLl9SdW5QaXBlZFNoZWxsQ29tbWFuZCgicHMgfCBncmVwIC1GICdteSRwcm9jZXNzJyIpLAotICAgICAgICAgIHNlbGYuX2dyZXBPdXRwdXQoJ215JHByb2Nlc3MnKSk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBQcm9jZXNzZXMoKCdteSRwcm9jZXNzJywgMTIzNCwgMTAxKSksCi0gICAgICAgICAgICBzZWxmLmRldmljZS5MaXN0UHJvY2Vzc2VzKCdteSRwcm9jZXNzJykpCi0KLSAgIyBUZXN0cyBmb3IgdGhlIEdldFBpZHMgd3JhcHBlciBpbnRlcmZhY2UuCi0gIGRlZiB0ZXN0R2V0UGlkc19tdWx0aXBsZUluc3RhbmNlcyhzZWxmKToKLSAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChzZWxmLmNhbGwuZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT12ZXJzaW9uX2NvZGVzLkxPTExJUE9QKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuX1J1blBpcGVkU2hlbGxDb21tYW5kKCdwcyB8IGdyZXAgLUYgZm9vJyksCi0gICAgICAgICAgc2VsZi5fZ3JlcE91dHB1dCgnZm9vJykpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgeydmb28nOiBbJzEyMzYnLCAnMTU3OCddfSwKLSAgICAgICAgICAgIHNlbGYuZGV2aWNlLkdldFBpZHMoJ2ZvbycpKQotCi0gIGRlZiB0ZXN0R2V0UGlkc19hbGxQcm9jZXNzZXMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmRldmljZS5idWlsZF92ZXJzaW9uX3NkaywKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9dmVyc2lvbl9jb2Rlcy5MT0xMSVBPUCk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgICAgWydwcyddLCBjaGVja19yZXR1cm49VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUpLAotICAgICAgICAgIHNlbGYuc2FtcGxlX291dHB1dCk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICB7J29uZS5tYXRjaCc6IFsnMTAwMSddLAotICAgICAgICAgICAgICd0d28ubWF0Y2gnOiBbJzEwMDInXSwKLSAgICAgICAgICAgICAndGhyZWUubWF0Y2gnOiBbJzEwMDMnXSwKLSAgICAgICAgICAgICAnbXkkcHJvY2Vzcyc6IFsnMTIzNCddLAotICAgICAgICAgICAgICdmb28nOiBbJzEyMzYnLCAnMTU3OCddfSwKLSAgICAgICAgICAgIHNlbGYuZGV2aWNlLkdldFBpZHMoKSkKLQotICAjIFRlc3RzIGZvciB0aGUgR2V0QXBwbGljYXRpb25QaWRzIHdyYXBwZXIgaW50ZXJmYWNlLgotICBkZWYgdGVzdEdldEFwcGxpY2F0aW9uUGlkc19ub3RGb3VuZChzZWxmKToKLSAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChzZWxmLmNhbGwuZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT12ZXJzaW9uX2NvZGVzLkxPTExJUE9QKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuX1J1blBpcGVkU2hlbGxDb21tYW5kKCdwcyB8IGdyZXAgLUYgbWF0Y2gnKSwKLSAgICAgICAgICBzZWxmLl9ncmVwT3V0cHV0KCdtYXRjaCcpKToKLSAgICAgICAgIyBObyBQSURzIGZvdW5kLCBwcm9jZXNzIG5hbWUgc2hvdWxkIGJlIGV4YWN0IG1hdGNoLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzZWxmLmRldmljZS5HZXRBcHBsaWNhdGlvblBpZHMoJ21hdGNoJykpCi0KLSAgZGVmIHRlc3RHZXRBcHBsaWNhdGlvblBpZHNfZm91bmRPbmUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmRldmljZS5idWlsZF92ZXJzaW9uX3NkaywKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9dmVyc2lvbl9jb2Rlcy5MT0xMSVBPUCk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbCgKLSAgICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLl9SdW5QaXBlZFNoZWxsQ29tbWFuZCgncHMgfCBncmVwIC1GIG9uZS5tYXRjaCcpLAotICAgICAgICAgIHNlbGYuX2dyZXBPdXRwdXQoJ29uZS5tYXRjaCcpKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMTAwMV0sIHNlbGYuZGV2aWNlLkdldEFwcGxpY2F0aW9uUGlkcygnb25lLm1hdGNoJykpCi0KLSAgZGVmIHRlc3RHZXRBcHBsaWNhdGlvblBpZHNfZm91bmRNYW55KHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPXZlcnNpb25fY29kZXMuTE9MTElQT1ApOgotICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgICAgc2VsZi5jYWxsLmRldmljZS5fUnVuUGlwZWRTaGVsbENvbW1hbmQoJ3BzIHwgZ3JlcCAtRiBmb28nKSwKLSAgICAgICAgICBzZWxmLl9ncmVwT3V0cHV0KCdmb28nKSk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBbMTIzNiwgMTU3OF0sCi0gICAgICAgICAgICBzZWxmLmRldmljZS5HZXRBcHBsaWNhdGlvblBpZHMoJ2ZvbycpKQotCi0gIGRlZiB0ZXN0R2V0QXBwbGljYXRpb25QaWRzX2F0TW9zdE9uZU5vdEZvdW5kKHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPXZlcnNpb25fY29kZXMuTE9MTElQT1ApOgotICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgICAgc2VsZi5jYWxsLmRldmljZS5fUnVuUGlwZWRTaGVsbENvbW1hbmQoJ3BzIHwgZ3JlcCAtRiBtYXRjaCcpLAotICAgICAgICAgIHNlbGYuX2dyZXBPdXRwdXQoJ21hdGNoJykpOgotICAgICAgICAjIE5vIFBJRHMgZm91bmQsIHByb2Nlc3MgbmFtZSBzaG91bGQgYmUgZXhhY3QgbWF0Y2guCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgc2VsZi5kZXZpY2UuR2V0QXBwbGljYXRpb25QaWRzKCdtYXRjaCcsIGF0X21vc3Rfb25lPVRydWUpKQotCi0gIGRlZiB0ZXN0R2V0QXBwbGljYXRpb25QaWRzX2F0TW9zdE9uZUZvdW5kKHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPXZlcnNpb25fY29kZXMuTE9MTElQT1ApOgotICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgICAgc2VsZi5jYWxsLmRldmljZS5fUnVuUGlwZWRTaGVsbENvbW1hbmQoJ3BzIHwgZ3JlcCAtRiBvbmUubWF0Y2gnKSwKLSAgICAgICAgICBzZWxmLl9ncmVwT3V0cHV0KCdvbmUubWF0Y2gnKSk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICAxMDAxLAotICAgICAgICAgICAgc2VsZi5kZXZpY2UuR2V0QXBwbGljYXRpb25QaWRzKCdvbmUubWF0Y2gnLCBhdF9tb3N0X29uZT1UcnVlKSkKLQotICBkZWYgdGVzdEdldEFwcGxpY2F0aW9uUGlkc19hdE1vc3RPbmVGb3VuZFRvb01hbnkoc2VsZik6Ci0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmRldmljZS5idWlsZF92ZXJzaW9uX3NkaywKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9dmVyc2lvbl9jb2Rlcy5MT0xMSVBPUCk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGwoCi0gICAgICAgICAgICBzZWxmLmNhbGwuZGV2aWNlLl9SdW5QaXBlZFNoZWxsQ29tbWFuZCgncHMgfCBncmVwIC1GIGZvbycpLAotICAgICAgICAgICAgc2VsZi5fZ3JlcE91dHB1dCgnZm9vJykpOgotICAgICAgICAgIHNlbGYuZGV2aWNlLkdldEFwcGxpY2F0aW9uUGlkcygnZm9vJywgYXRfbW9zdF9vbmU9VHJ1ZSkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0dldFNldEVuZm9yY2UoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdEdldEVuZm9yY2VfRW5mb3JjaW5nKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKHNlbGYuY2FsbC5hZGIuU2hlbGwoJ2dldGVuZm9yY2UnKSwgJ0VuZm9yY2luZycpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBzZWxmLmRldmljZS5HZXRFbmZvcmNlKCkpCi0KLSAgZGVmIHRlc3RHZXRFbmZvcmNlX1Blcm1pc3NpdmUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGwoc2VsZi5jYWxsLmFkYi5TaGVsbCgnZ2V0ZW5mb3JjZScpLCAnUGVybWlzc2l2ZScpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgc2VsZi5kZXZpY2UuR2V0RW5mb3JjZSgpKQotCi0gIGRlZiB0ZXN0R2V0RW5mb3JjZV9EaXNhYmxlZChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbChzZWxmLmNhbGwuYWRiLlNoZWxsKCdnZXRlbmZvcmNlJyksICdEaXNhYmxlZCcpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLmRldmljZS5HZXRFbmZvcmNlKCkpCi0KLSAgZGVmIHRlc3RTZXRFbmZvcmNlX0VuZm9yY2luZyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLk5lZWRzU1UoKSwgRmFsc2UpLAotICAgICAgICAoc2VsZi5jYWxsLmFkYi5TaGVsbCgnc2V0ZW5mb3JjZSAxJyksICcnKSk6Ci0gICAgICBzZWxmLmRldmljZS5TZXRFbmZvcmNlKGVuYWJsZWQ9VHJ1ZSkKLQotICBkZWYgdGVzdFNldEVuZm9yY2VfUGVybWlzc2l2ZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLk5lZWRzU1UoKSwgRmFsc2UpLAotICAgICAgICAoc2VsZi5jYWxsLmFkYi5TaGVsbCgnc2V0ZW5mb3JjZSAwJyksICcnKSk6Ci0gICAgICBzZWxmLmRldmljZS5TZXRFbmZvcmNlKGVuYWJsZWQ9RmFsc2UpCi0KLSAgZGVmIHRlc3RTZXRFbmZvcmNlX0VuZm9yY2luZ1dpdGhJbnQoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5OZWVkc1NVKCksIEZhbHNlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuU2hlbGwoJ3NldGVuZm9yY2UgMScpLCAnJykpOgotICAgICAgc2VsZi5kZXZpY2UuU2V0RW5mb3JjZShlbmFibGVkPTEpCi0KLSAgZGVmIHRlc3RTZXRFbmZvcmNlX1Blcm1pc3NpdmVXaXRoSW50KHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuTmVlZHNTVSgpLCBGYWxzZSksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCdzZXRlbmZvcmNlIDAnKSwgJycpKToKLSAgICAgIHNlbGYuZGV2aWNlLlNldEVuZm9yY2UoZW5hYmxlZD0wKQotCi0gIGRlZiB0ZXN0U2V0RW5mb3JjZV9FbmZvcmNpbmdXaXRoU3RyKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuTmVlZHNTVSgpLCBGYWxzZSksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCdzZXRlbmZvcmNlIDEnKSwgJycpKToKLSAgICAgIHNlbGYuZGV2aWNlLlNldEVuZm9yY2UoZW5hYmxlZD0nMScpCi0KLSAgZGVmIHRlc3RTZXRFbmZvcmNlX1Blcm1pc3NpdmVXaXRoU3RyKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuTmVlZHNTVSgpLCBGYWxzZSksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCdzZXRlbmZvcmNlIDAnKSwgJycpKToKLSAgICAgIHNlbGYuZGV2aWNlLlNldEVuZm9yY2UoZW5hYmxlZD0nMCcpICAjIE5vdCByZWNvbW1lbmRlZCBidXQgaXQgd29ya3MhCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNUYWtlU2NyZWVuc2hvdFRlc3QoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdFRha2VTY3JlZW5zaG90X2ZpbGVOYW1lUHJvdmlkZWQoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAobW9jay5jYWxsLmRldmlsLmFuZHJvaWQuZGV2aWNlX3RlbXBfZmlsZS5EZXZpY2VUZW1wRmlsZSgKLSAgICAgICAgICAgIHNlbGYuYWRiLCBzdWZmaXg9Jy5wbmcnKSwKLSAgICAgICAgIE1vY2tUZW1wRmlsZSgnL3RtcC9wYXRoL3RlbXAtMTIzLnBuZycpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5hZGIuU2hlbGwoJy9zeXN0ZW0vYmluL3NjcmVlbmNhcCAtcCAvdG1wL3BhdGgvdGVtcC0xMjMucG5nJyksCi0gICAgICAgICAnJyksCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuUHVsbEZpbGUoJy90bXAvcGF0aC90ZW1wLTEyMy5wbmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdGVzdC9ob3N0L3NjcmVlbnNob3QucG5nJykpOgotICAgICAgc2VsZi5kZXZpY2UuVGFrZVNjcmVlbnNob3QoJy90ZXN0L2hvc3Qvc2NyZWVuc2hvdC5wbmcnKQotCi0KLWNsYXNzIERldmljZVV0aWxzRGlzbWlzc0NyYXNoRGlhbG9nSWZOZWVkZWRUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3REaXNtaXNzQ3Jhc2hEaWFsb2dJZk5lZWRlZF9jcmFzaGVkUGFnZWNrYWdlTm90Rm91bmQoc2VsZik6Ci0gICAgc2FtcGxlX2R1bXBzeXNfb3V0cHV0ID0gJycnCi1XSU5ET1cgTUFOQUdFUiBXSU5ET1dTIChkdW1wc3lzIHdpbmRvdyB3aW5kb3dzKQotICBXaW5kb3cgIzExIFdpbmRvd3tmOGI2NDdhIHUwIFNlYXJjaFBhbmVsfToKLSAgICBtRGlzcGxheUlkPTAgbVNlc3Npb249U2Vzc2lvbns4IDk0OjEyMn0gbUNsaWVudD1hbmRyb2lkLm9zLkJpbmRlclByb3h5QDFiYTUKLSAgICBtT3duZXJVaWQ9MTAwIG1TaG93VG9Pd25lck9ubHk9ZmFsc2UgcGFja2FnZT1jb20uYW5kcm9pZC5zeXN0ZW11aSBhcHBvcD1OT05FCi0gICAgbUF0dHJzPVdNLkxheW91dFBhcmFtc3soMCwwKShmaWxseGZpbGwpIGdyPSM1MyBzaW09IzMxIHR5PTIwMjQgZmw9MTAwCi0gICAgUmVxdWVzdGVkIHc9MTA4MCBoPTE5MjAgbUxheW91dFNlcT00MjYKLSAgICBtQmFzZUxheWVyPTIxMTAwMCBtU3ViTGF5ZXI9MCBtQW5pbUxheWVyPTIxMTAwMCswPTIxMTAwMCBtTGFzdExheWVyPTIxMTAwMAotJycnCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2R1bXBzeXMnLCAnd2luZG93JywgJ3dpbmRvd3MnXSwgY2hlY2tfcmV0dXJuPVRydWUsCi0gICAgICAgICAgICBsYXJnZV9vdXRwdXQ9VHJ1ZSksIHNhbXBsZV9kdW1wc3lzX291dHB1dC5zcGxpdCgnXG4nKSkpOgotICAgICAgcGFja2FnZV9uYW1lID0gc2VsZi5kZXZpY2UuRGlzbWlzc0NyYXNoRGlhbG9nSWZOZWVkZWQoKQotICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFja2FnZV9uYW1lKQotCi0gIGRlZiB0ZXN0RGlzbWlzc0NyYXNoRGlhbG9nSWZOZWVkZWRfY3Jhc2hlZFBhZ2Vja2FnZUZvdW5kKHNlbGYpOgotICAgIHNhbXBsZV9kdW1wc3lzX291dHB1dCA9ICcnJwotV0lORE9XIE1BTkFHRVIgV0lORE9XUyAoZHVtcHN5cyB3aW5kb3cgd2luZG93cykKLSAgV2luZG93ICMxMSBXaW5kb3d7ZjhiNjQ3YSB1MCBTZWFyY2hQYW5lbH06Ci0gICAgbURpc3BsYXlJZD0wIG1TZXNzaW9uPVNlc3Npb257OCA5NDoxMjJ9IG1DbGllbnQ9YW5kcm9pZC5vcy5CaW5kZXJQcm94eUAxYmE1Ci0gICAgbU93bmVyVWlkPTEwMiBtU2hvd1RvT3duZXJPbmx5PWZhbHNlIHBhY2thZ2U9Y29tLmFuZHJvaWQuc3lzdGVtdWkgYXBwb3A9Tk9ORQotICAgIG1BdHRycz1XTS5MYXlvdXRQYXJhbXN7KDAsMCkoZmlsbHhmaWxsKSBncj0jNTMgc2ltPSMzMSB0eT0yMDI0IGZsPTEwMAotICAgIFJlcXVlc3RlZCB3PTEwODAgaD0xOTIwIG1MYXlvdXRTZXE9NDI2Ci0gICAgbUJhc2VMYXllcj0yMTEwMDAgbVN1YkxheWVyPTAgbUFuaW1MYXllcj0yMTEwMDArMD0yMTEwMDAgbUxhc3RMYXllcj0yMTEwMDAKLSAgbUhhc1Blcm1hbmVudERwYWQ9ZmFsc2UKLSAgbUN1cnJlbnRGb2N1cz1XaW5kb3d7M2EyNzc0MGYgdTAgQXBwbGljYXRpb24gRXJyb3I6IGNvbS5hbmRyb2lkLmNocm9tZX0KLSAgbUZvY3VzZWRBcHA9QXBwV2luZG93VG9rZW57NDcwYWY2ZiB0b2tlbj1Ub2tlbnsyNzJlYzI0ZSBBY3Rpdml0eVJlY29yZHt0ODk0fX19Ci0nJycKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnZHVtcHN5cycsICd3aW5kb3cnLCAnd2luZG93cyddLCBjaGVja19yZXR1cm49VHJ1ZSwKLSAgICAgICAgICAgIGxhcmdlX291dHB1dD1UcnVlKSwgc2FtcGxlX2R1bXBzeXNfb3V0cHV0LnNwbGl0KCdcbicpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydpbnB1dCcsICdrZXlldmVudCcsICcyMiddLCBjaGVja19yZXR1cm49VHJ1ZSkpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBbJ2lucHV0JywgJ2tleWV2ZW50JywgJzIyJ10sIGNoZWNrX3JldHVybj1UcnVlKSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnaW5wdXQnLCAna2V5ZXZlbnQnLCAnNjYnXSwgY2hlY2tfcmV0dXJuPVRydWUpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgWydkdW1wc3lzJywgJ3dpbmRvdycsICd3aW5kb3dzJ10sIGNoZWNrX3JldHVybj1UcnVlLAotICAgICAgICAgICAgbGFyZ2Vfb3V0cHV0PVRydWUpLCBbXSkpOgotICAgICAgcGFja2FnZV9uYW1lID0gc2VsZi5kZXZpY2UuRGlzbWlzc0NyYXNoRGlhbG9nSWZOZWVkZWQoKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrYWdlX25hbWUsICdjb20uYW5kcm9pZC5jaHJvbWUnKQotCi0KLWNsYXNzIERldmljZVV0aWxzQ2xpZW50Q2FjaGUoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdENsaWVudENhY2hlX3R3b0NhY2hlcyhzZWxmKToKLSAgICBzZWxmLmRldmljZS5fY2FjaGVbJ3Rlc3QnXSA9IDAKLSAgICBjbGllbnRfY2FjaGVfb25lID0gc2VsZi5kZXZpY2UuR2V0Q2xpZW50Q2FjaGUoJ0NsaWVudE9uZScpCi0gICAgY2xpZW50X2NhY2hlX29uZVsndGVzdCddID0gMQotICAgIGNsaWVudF9jYWNoZV90d28gPSBzZWxmLmRldmljZS5HZXRDbGllbnRDYWNoZSgnQ2xpZW50VHdvJykKLSAgICBjbGllbnRfY2FjaGVfdHdvWyd0ZXN0J10gPSAyCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRldmljZS5fY2FjaGVbJ3Rlc3QnXSwgMCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGNsaWVudF9jYWNoZV9vbmUsIHsndGVzdCc6IDF9KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xpZW50X2NhY2hlX3R3bywgeyd0ZXN0JzogMn0pCi0gICAgc2VsZi5kZXZpY2UuX0NsZWFyQ2FjaGUoKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZSgndGVzdCcgbm90IGluIHNlbGYuZGV2aWNlLl9jYWNoZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKGNsaWVudF9jYWNoZV9vbmUsIHt9KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xpZW50X2NhY2hlX3R3bywge30pCi0KLSAgZGVmIHRlc3RDbGllbnRDYWNoZV9tdWx0aXBsZUluc3RhbmNlcyhzZWxmKToKLSAgICBjbGllbnRfY2FjaGVfb25lID0gc2VsZi5kZXZpY2UuR2V0Q2xpZW50Q2FjaGUoJ0NsaWVudE9uZScpCi0gICAgY2xpZW50X2NhY2hlX29uZVsndGVzdCddID0gMQotICAgIGNsaWVudF9jYWNoZV90d28gPSBzZWxmLmRldmljZS5HZXRDbGllbnRDYWNoZSgnQ2xpZW50T25lJykKLSAgICBzZWxmLmFzc2VydEVxdWFsKGNsaWVudF9jYWNoZV9vbmUsIHsndGVzdCc6IDF9KQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xpZW50X2NhY2hlX3R3bywgeyd0ZXN0JzogMX0pCi0gICAgc2VsZi5kZXZpY2UuX0NsZWFyQ2FjaGUoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xpZW50X2NhY2hlX29uZSwge30pCi0gICAgc2VsZi5hc3NlcnRFcXVhbChjbGllbnRfY2FjaGVfdHdvLCB7fSkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0hlYWx0aHlEZXZpY2VzVGVzdChtb2NrX2NhbGxzLlRlc3RDYXNlKToKLQotICBkZWYgdGVzdEhlYWx0aHlEZXZpY2VzX2VtcHR5QmxhY2tsaXN0X2RlZmF1bHREZXZpY2VBcmcoc2VsZik6Ci0gICAgdGVzdF9zZXJpYWxzID0gWycwMTIzNDU2Nzg5YWJjZGVmJywgJ2ZlZGNiYTk4NzY1NDMyMTAnXQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKG1vY2suY2FsbC5kZXZpbC5hbmRyb2lkLnNkay5hZGJfd3JhcHBlci5BZGJXcmFwcGVyLkRldmljZXMoKSwKLSAgICAgICAgIFtfQWRiV3JhcHBlck1vY2socykgZm9yIHMgaW4gdGVzdF9zZXJpYWxzXSkpOgotICAgICAgYmxhY2tsaXN0ID0gbW9jay5Ob25DYWxsYWJsZU1vY2soKip7J1JlYWQucmV0dXJuX3ZhbHVlJzogW119KQotICAgICAgZGV2aWNlcyA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscy5IZWFsdGh5RGV2aWNlcyhibGFja2xpc3QpCi0gICAgZm9yIHNlcmlhbCwgZGV2aWNlIGluIHppcCh0ZXN0X3NlcmlhbHMsIGRldmljZXMpOgotICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZGV2aWNlLCBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMpKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VyaWFsLCBkZXZpY2UuYWRiLkdldERldmljZVNlcmlhbCgpKQotCi0gIGRlZiB0ZXN0SGVhbHRoeURldmljZXNfYmxhY2tsaXN0X2RlZmF1bHREZXZpY2VBcmcoc2VsZik6Ci0gICAgdGVzdF9zZXJpYWxzID0gWycwMTIzNDU2Nzg5YWJjZGVmJywgJ2ZlZGNiYTk4NzY1NDMyMTAnXQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKG1vY2suY2FsbC5kZXZpbC5hbmRyb2lkLnNkay5hZGJfd3JhcHBlci5BZGJXcmFwcGVyLkRldmljZXMoKSwKLSAgICAgICAgIFtfQWRiV3JhcHBlck1vY2socykgZm9yIHMgaW4gdGVzdF9zZXJpYWxzXSkpOgotICAgICAgYmxhY2tsaXN0ID0gbW9jay5Ob25DYWxsYWJsZU1vY2soCi0gICAgICAgICAgKip7J1JlYWQucmV0dXJuX3ZhbHVlJzogWydmZWRjYmE5ODc2NTQzMjEwJ119KQotICAgICAgZGV2aWNlcyA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscy5IZWFsdGh5RGV2aWNlcyhibGFja2xpc3QpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgbGVuKGRldmljZXMpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGRldmljZXNbMF0sIGRldmljZV91dGlscy5EZXZpY2VVdGlscykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJzAxMjM0NTY3ODlhYmNkZWYnLCBkZXZpY2VzWzBdLmFkYi5HZXREZXZpY2VTZXJpYWwoKSkKLQotICBkZWYgdGVzdEhlYWx0aHlEZXZpY2VzX25vbmVEZXZpY2VBcmdfbXVsdGlwbGVfYXR0YWNoZWQoc2VsZik6Ci0gICAgdGVzdF9zZXJpYWxzID0gWycwMTIzNDU2Nzg5YWJjZGVmJywgJ2ZlZGNiYTk4NzY1NDMyMTAnXQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKG1vY2suY2FsbC5kZXZpbC5hbmRyb2lkLnNkay5hZGJfd3JhcHBlci5BZGJXcmFwcGVyLkRldmljZXMoKSwKLSAgICAgICAgIFtfQWRiV3JhcHBlck1vY2socykgZm9yIHMgaW4gdGVzdF9zZXJpYWxzXSksCi0gICAgICAgIChtb2NrLmNhbGwuZGV2aWwuYW5kcm9pZC5kZXZpY2VfZXJyb3JzLk11bHRpcGxlRGV2aWNlc0Vycm9yKG1vY2suQU5ZKSwKLSAgICAgICAgIF9Nb2NrTXVsdGlwbGVEZXZpY2VzRXJyb3IoKSkpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhfTW9ja011bHRpcGxlRGV2aWNlc0Vycm9yKToKLSAgICAgICAgZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLkhlYWx0aHlEZXZpY2VzKGRldmljZV9hcmc9Tm9uZSkKLQotICBkZWYgdGVzdEhlYWx0aHlEZXZpY2VzX25vbmVEZXZpY2VBcmdfb25lX2F0dGFjaGVkKHNlbGYpOgotICAgIHRlc3Rfc2VyaWFscyA9IFsnMDEyMzQ1Njc4OWFiY2RlZiddCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAobW9jay5jYWxsLmRldmlsLmFuZHJvaWQuc2RrLmFkYl93cmFwcGVyLkFkYldyYXBwZXIuRGV2aWNlcygpLAotICAgICAgICAgW19BZGJXcmFwcGVyTW9jayhzKSBmb3IgcyBpbiB0ZXN0X3NlcmlhbHNdKSk6Ci0gICAgICBkZXZpY2VzID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLkhlYWx0aHlEZXZpY2VzKGRldmljZV9hcmc9Tm9uZSkKLSAgICBzZWxmLmFzc2VydEVxdWFscygxLCBsZW4oZGV2aWNlcykpCi0KLSAgZGVmIHRlc3RIZWFsdGh5RGV2aWNlc19ub25lRGV2aWNlQXJnX25vX2F0dGFjaGVkKHNlbGYpOgotICAgIHRlc3Rfc2VyaWFscyA9IFtdCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAobW9jay5jYWxsLmRldmlsLmFuZHJvaWQuc2RrLmFkYl93cmFwcGVyLkFkYldyYXBwZXIuRGV2aWNlcygpLAotICAgICAgICAgW19BZGJXcmFwcGVyTW9jayhzKSBmb3IgcyBpbiB0ZXN0X3NlcmlhbHNdKSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuTm9EZXZpY2VzRXJyb3IpOgotICAgICAgICBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMuSGVhbHRoeURldmljZXMoZGV2aWNlX2FyZz1Ob25lLCByZXRyeT1GYWxzZSkKLQotICBkZWYgdGVzdEhlYWx0aHlEZXZpY2VzX25vbmVEZXZpY2VBcmdfbXVsdGlwbGVfYXR0YWNoZWRfQU5EUk9JRF9TRVJJQUwoc2VsZik6Ci0gICAgdHJ5OgotICAgICAgb3MuZW52aXJvblsnQU5EUk9JRF9TRVJJQUwnXSA9ICcwMTIzNDU2Nzg5YWJjZGVmJwotICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKCk6ICAjIFNob3VsZCBza2lwIGFkYiBkZXZpY2VzIHdoZW4gZGV2aWNlIGlzIGtub3duLgotICAgICAgICBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMuSGVhbHRoeURldmljZXMoZGV2aWNlX2FyZz1Ob25lKQotICAgIGZpbmFsbHk6Ci0gICAgICBkZWwgb3MuZW52aXJvblsnQU5EUk9JRF9TRVJJQUwnXQotCi0gIGRlZiB0ZXN0SGVhbHRoeURldmljZXNfc3RyaW5nRGV2aWNlQXJnKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygpOiAgIyBTaG91bGQgc2tpcCBhZGIgZGV2aWNlcyB3aGVuIGRldmljZSBpcyBrbm93bi4KLSAgICAgIGRldmljZXMgPSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMuSGVhbHRoeURldmljZXMoCi0gICAgICAgICAgZGV2aWNlX2FyZz0nMDEyMzQ1Njc4OWFiY2RlZicpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgbGVuKGRldmljZXMpKQotCi0gIGRlZiB0ZXN0SGVhbHRoeURldmljZXNfRW1wdHlMaXN0RGV2aWNlQXJnX211bHRpcGxlX2F0dGFjaGVkKHNlbGYpOgotICAgIHRlc3Rfc2VyaWFscyA9IFsnMDEyMzQ1Njc4OWFiY2RlZicsICdmZWRjYmE5ODc2NTQzMjEwJ10KLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChtb2NrLmNhbGwuZGV2aWwuYW5kcm9pZC5zZGsuYWRiX3dyYXBwZXIuQWRiV3JhcHBlci5EZXZpY2VzKCksCi0gICAgICAgICBbX0FkYldyYXBwZXJNb2NrKHMpIGZvciBzIGluIHRlc3Rfc2VyaWFsc10pKToKLSAgICAgIGRldmljZXMgPSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMuSGVhbHRoeURldmljZXMoZGV2aWNlX2FyZz0oKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscygyLCBsZW4oZGV2aWNlcykpCi0KLSAgZGVmIHRlc3RIZWFsdGh5RGV2aWNlc19FbXB0eUxpc3REZXZpY2VBcmdfQU5EUk9JRF9TRVJJQUwoc2VsZik6Ci0gICAgdHJ5OgotICAgICAgb3MuZW52aXJvblsnQU5EUk9JRF9TRVJJQUwnXSA9ICcwMTIzNDU2Nzg5YWJjZGVmJwotICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKCk6ICAjIFNob3VsZCBza2lwIGFkYiBkZXZpY2VzIHdoZW4gZGV2aWNlIGlzIGtub3duLgotICAgICAgICBkZXZpY2VzID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLkhlYWx0aHlEZXZpY2VzKGRldmljZV9hcmc9KCkpCi0gICAgZmluYWxseToKLSAgICAgIGRlbCBvcy5lbnZpcm9uWydBTkRST0lEX1NFUklBTCddCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgbGVuKGRldmljZXMpKQotCi0gIGRlZiB0ZXN0SGVhbHRoeURldmljZXNfRW1wdHlMaXN0RGV2aWNlQXJnX25vX2F0dGFjaGVkKHNlbGYpOgotICAgIHRlc3Rfc2VyaWFscyA9IFtdCi0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAobW9jay5jYWxsLmRldmlsLmFuZHJvaWQuc2RrLmFkYl93cmFwcGVyLkFkYldyYXBwZXIuRGV2aWNlcygpLAotICAgICAgICAgW19BZGJXcmFwcGVyTW9jayhzKSBmb3IgcyBpbiB0ZXN0X3NlcmlhbHNdKSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuTm9EZXZpY2VzRXJyb3IpOgotICAgICAgICBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMuSGVhbHRoeURldmljZXMoZGV2aWNlX2FyZz1bXSwgcmV0cnk9RmFsc2UpCi0KLSAgZGVmIHRlc3RIZWFsdGh5RGV2aWNlc19FbXB0eUxpc3REZXZpY2VBcmdfbm9fYXR0YWNoZWRfd2l0aF9yZXRyeShzZWxmKToKLSAgICB0ZXN0X3NlcmlhbHMgPSBbXQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKG1vY2suY2FsbC5kZXZpbC5hbmRyb2lkLnNkay5hZGJfd3JhcHBlci5BZGJXcmFwcGVyLkRldmljZXMoKSwKLSAgICAgICAgIFtfQWRiV3JhcHBlck1vY2socykgZm9yIHMgaW4gdGVzdF9zZXJpYWxzXSksCi0gICAgICAgIChtb2NrLmNhbGwuZGV2aWwuYW5kcm9pZC5zZGsuYWRiX3dyYXBwZXIuQWRiV3JhcHBlci5EZXZpY2VzKCksCi0gICAgICAgICBbX0FkYldyYXBwZXJNb2NrKHMpIGZvciBzIGluIHRlc3Rfc2VyaWFsc10pKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Ob0RldmljZXNFcnJvcik6Ci0gICAgICAgIGRldmljZV91dGlscy5EZXZpY2VVdGlscy5IZWFsdGh5RGV2aWNlcyhkZXZpY2VfYXJnPVtdLCByZXRyeT1UcnVlKQotCi0gIGRlZiB0ZXN0SGVhbHRoeURldmljZXNfTGlzdERldmljZUFyZyhzZWxmKToKLSAgICBkZXZpY2VfYXJnID0gWycwMTIzNDU2Nzg5YWJjZGVmJywgJ2ZlZGNiYTk4NzY1NDMyMTAnXQotICAgIHRyeToKLSAgICAgIG9zLmVudmlyb25bJ0FORFJPSURfU0VSSUFMJ10gPSAnc2hvdWxkLW5vdC1hcHBseScKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygpOiAgIyBTaG91bGQgc2tpcCBhZGIgZGV2aWNlcyB3aGVuIGRldmljZSBpcyBrbm93bi4KLSAgICAgICAgZGV2aWNlcyA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscy5IZWFsdGh5RGV2aWNlcyhkZXZpY2VfYXJnPWRldmljZV9hcmcpCi0gICAgZmluYWxseToKLSAgICAgIGRlbCBvcy5lbnZpcm9uWydBTkRST0lEX1NFUklBTCddCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMiwgbGVuKGRldmljZXMpKQotCi0KLWNsYXNzIERldmljZVV0aWxzUmVzdGFydEFkYmRUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RBZGJkUmVzdGFydChzZWxmKToKLSAgICBtb2NrX3RlbXBfZmlsZSA9ICcvc2RjYXJkL3RlbXAtMTIzLnNoJwotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKG1vY2suY2FsbC5kZXZpbC5hbmRyb2lkLmRldmljZV90ZW1wX2ZpbGUuRGV2aWNlVGVtcEZpbGUoCi0gICAgICAgICAgICBzZWxmLmFkYiwgc3VmZml4PScuc2gnKSwgTW9ja1RlbXBGaWxlKG1vY2tfdGVtcF9maWxlKSksCi0gICAgICAgIHNlbGYuY2FsbC5kZXZpY2UuV3JpdGVGaWxlKG1vY2suQU5ZLCBtb2NrLkFOWSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICAgIFsnc291cmNlJywgbW9ja190ZW1wX2ZpbGVdLCBjaGVja19yZXR1cm49VHJ1ZSwgYXNfcm9vdD1UcnVlKSksCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuV2FpdEZvckRldmljZSgpKToKLSAgICAgIHNlbGYuZGV2aWNlLlJlc3RhcnRBZGJkKCkKLQotCi1jbGFzcyBEZXZpY2VVdGlsc0dyYW50UGVybWlzc2lvbnNUZXN0KERldmljZVV0aWxzVGVzdCk6Ci0gIGRlZiBfUG1HcmFudFNoZWxsQ2FsbChzZWxmLCBwYWNrYWdlLCBwZXJtaXNzaW9ucyk6Ci0gICAgZnJhZ21lbnQgPSAncD0lcztmb3IgcSBpbiAlczsnICUgKHBhY2thZ2UsICcgJy5qb2luKHNvcnRlZChwZXJtaXNzaW9ucykpKQotICAgIHJlc3VsdHMgPSBbXQotICAgIGZvciBwZXJtaXNzaW9uLCByZXN1bHQgaW4gc29ydGVkKHBlcm1pc3Npb25zLml0ZXJpdGVtcygpKToKLSAgICAgIGlmIHJlc3VsdDoKLSAgICAgICAgb3V0cHV0LCBzdGF0dXMgPSByZXN1bHQgKyAnXG4nLCAxCi0gICAgICBlbHNlOgotICAgICAgICBvdXRwdXQsIHN0YXR1cyA9ICcnLCAwCi0gICAgICByZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgICAne291dHB1dH17c2VwfXtwZXJtaXNzaW9ufXtzZXB9e3N0YXR1c317c2VwfVxuJy5mb3JtYXQoCi0gICAgICAgICAgICAgIG91dHB1dD1vdXRwdXQsCi0gICAgICAgICAgICAgIHBlcm1pc3Npb249cGVybWlzc2lvbiwKLSAgICAgICAgICAgICAgc3RhdHVzPXN0YXR1cywKLSAgICAgICAgICAgICAgc2VwPWRldmljZV91dGlscy5fU0hFTExfT1VUUFVUX1NFUEFSQVRPUgotICAgICAgICAgICkpCi0gICAgcmV0dXJuICgKLSAgICAgICAgc2VsZi5jYWxsLmRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICBBbnlTdHJpbmdXaXRoKGZyYWdtZW50KSwKLSAgICAgICAgICAgIHNoZWxsPVRydWUsIHJhd19vdXRwdXQ9VHJ1ZSwgbGFyZ2Vfb3V0cHV0PVRydWUsIGNoZWNrX3JldHVybj1UcnVlKSwKLSAgICAgICAgJycuam9pbihyZXN1bHRzKSkKLQotICBkZWYgdGVzdEdyYW50UGVybWlzc2lvbnNfbm9uZShzZWxmKToKLSAgICBzZWxmLmRldmljZS5HcmFudFBlcm1pc3Npb25zKCdwYWNrYWdlJywgW10pCi0KLSAgZGVmIHRlc3RHcmFudFBlcm1pc3Npb25zX3VuZGVyTShzZWxmKToKLSAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChzZWxmLmNhbGwuZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT12ZXJzaW9uX2NvZGVzLkxPTExJUE9QKToKLSAgICAgIHNlbGYuZGV2aWNlLkdyYW50UGVybWlzc2lvbnMoJ3BhY2thZ2UnLCBbJ3AxJ10pCi0KLSAgZGVmIHRlc3RHcmFudFBlcm1pc3Npb25zX29uZShzZWxmKToKLSAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChzZWxmLmNhbGwuZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT12ZXJzaW9uX2NvZGVzLk1BUlNITUFMTE9XKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgICBzZWxmLl9QbUdyYW50U2hlbGxDYWxsKCdwYWNrYWdlJywgeydwMSc6IDB9KSk6Ci0gICAgICAgIHNlbGYuZGV2aWNlLkdyYW50UGVybWlzc2lvbnMoJ3BhY2thZ2UnLCBbJ3AxJ10pCi0KLSAgZGVmIHRlc3RHcmFudFBlcm1pc3Npb25zX211bHRpcGxlKHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPXZlcnNpb25fY29kZXMuTUFSU0hNQUxMT1cpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAgIHNlbGYuX1BtR3JhbnRTaGVsbENhbGwoJ3BhY2thZ2UnLCB7J3AxJzogMCwgJ3AyJzogMH0pKToKLSAgICAgICAgc2VsZi5kZXZpY2UuR3JhbnRQZXJtaXNzaW9ucygncGFja2FnZScsIFsncDEnLCAncDInXSkKLQotICBkZWYgdGVzdEdyYW50UGVybWlzc2lvbnNfV3JpdGVFeHRybmFsU3RvcmFnZShzZWxmKToKLSAgICBXUklURSA9ICdhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfRVhURVJOQUxfU1RPUkFHRScKLSAgICBSRUFEID0gJ2FuZHJvaWQucGVybWlzc2lvbi5SRUFEX0VYVEVSTkFMX1NUT1JBR0UnCi0gICAgd2l0aCBQYXRjaExvZ2dlcigpIGFzIGxvZ2dlcjoKLSAgICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9dmVyc2lvbl9jb2Rlcy5NQVJTSE1BTExPVyk6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgICAgIHNlbGYuX1BtR3JhbnRTaGVsbENhbGwoJ3BhY2thZ2UnLCB7UkVBRDogMCwgV1JJVEU6IDB9KSk6Ci0gICAgICAgICAgc2VsZi5kZXZpY2UuR3JhbnRQZXJtaXNzaW9ucygncGFja2FnZScsIFtXUklURV0pCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2dlci53YXJuaW5ncywgW10pCi0KLSAgZGVmIHRlc3RHcmFudFBlcm1pc3Npb25zX0JsYWNrTGlzdChzZWxmKToKLSAgICB3aXRoIFBhdGNoTG9nZ2VyKCkgYXMgbG9nZ2VyOgotICAgICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmRldmljZS5idWlsZF92ZXJzaW9uX3NkaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT12ZXJzaW9uX2NvZGVzLk1BUlNITUFMTE9XKToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAgICAgc2VsZi5fUG1HcmFudFNoZWxsQ2FsbCgncGFja2FnZScsIHsncDEnOiAwfSkpOgotICAgICAgICAgIHNlbGYuZGV2aWNlLkdyYW50UGVybWlzc2lvbnMoCi0gICAgICAgICAgICAgICdwYWNrYWdlJywgWydwMScsICdmb28ucGVybWlzc2lvbi5DMkRfTUVTU0FHRSddKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnZXIud2FybmluZ3MsIFtdKQotCi0gIGRlZiB0ZXN0R3JhbnRQZXJtaXNzaW9uc191bmNoYW5nZWFibGVQZXJtaXNpb24oc2VsZik6Ci0gICAgZXJyb3JfbWVzc2FnZSA9ICgKLSAgICAgICAgJ09wZXJhdGlvbiBub3QgYWxsb3dlZDogamF2YS5sYW5nLlNlY3VyaXR5RXhjZXB0aW9uOiAnCi0gICAgICAgICdQZXJtaXNzaW9uIFVOQ0hBTkdFQUJMRSBpcyBub3QgYSBjaGFuZ2VhYmxlIHBlcm1pc3Npb24gdHlwZScpCi0gICAgd2l0aCBQYXRjaExvZ2dlcigpIGFzIGxvZ2dlcjoKLSAgICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9dmVyc2lvbl9jb2Rlcy5NQVJTSE1BTExPVyk6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgICAgIHNlbGYuX1BtR3JhbnRTaGVsbENhbGwoJ3BhY2thZ2UnLCB7J1VOQ0hBTkdFQUJMRSc6IGVycm9yX21lc3NhZ2V9KSk6Ci0gICAgICAgICAgc2VsZi5kZXZpY2UuR3JhbnRQZXJtaXNzaW9ucygncGFja2FnZScsIFsnVU5DSEFOR0VBQkxFJ10pCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgIGxvZ2dlci53YXJuaW5ncywgW21vY2suQU5ZLCBBbnlTdHJpbmdXaXRoKCdVTkNIQU5HRUFCTEUnKV0pCi0KLQotY2xhc3MgRGV2aWVjVXRpbHNJc1NjcmVlbk9uKERldmljZVV0aWxzVGVzdCk6Ci0KLSAgX0xfU0NSRUVOX09OID0gWyd0ZXN0PXRlc3QgbUludGVyYWN0aXZlPXRydWUnXQotICBfS19TQ1JFRU5fT04gPSBbJ3Rlc3Q9dGVzdCBtU2NyZWVuT249dHJ1ZSddCi0gIF9MX1NDUkVFTl9PRkYgPSBbJ21JbnRlcmFjdGl2ZT1mYWxzZSddCi0gIF9LX1NDUkVFTl9PRkYgPSBbJ21TY3JlZW5Pbj1mYWxzZSddCi0KLSAgZGVmIHRlc3RJc1NjcmVlbk9uX29uUHJlTChzZWxmKToKLSAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChzZWxmLmNhbGwuZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT12ZXJzaW9uX2NvZGVzLktJVEtBVCk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX1J1blBpcGVkU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICAnZHVtcHN5cyBpbnB1dF9tZXRob2QgfCBncmVwIG1TY3JlZW5PbicpLCBzZWxmLl9LX1NDUkVFTl9PTikpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kZXZpY2UuSXNTY3JlZW5PbigpKQotCi0gIGRlZiB0ZXN0SXNTY3JlZW5Pbl9vbkwoc2VsZik6Ci0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmRldmljZS5idWlsZF92ZXJzaW9uX3NkaywKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9dmVyc2lvbl9jb2Rlcy5MT0xMSVBPUCk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX1J1blBpcGVkU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICAnZHVtcHN5cyBpbnB1dF9tZXRob2QgfCBncmVwIG1JbnRlcmFjdGl2ZScpLCBzZWxmLl9MX1NDUkVFTl9PTikpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kZXZpY2UuSXNTY3JlZW5PbigpKQotCi0gIGRlZiB0ZXN0SXNTY3JlZW5Pbl9vZmZQcmVMKHNlbGYpOgotICAgIHdpdGggc2VsZi5wYXRjaF9jYWxsKHNlbGYuY2FsbC5kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPXZlcnNpb25fY29kZXMuS0lUS0FUKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fUnVuUGlwZWRTaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAgICdkdW1wc3lzIGlucHV0X21ldGhvZCB8IGdyZXAgbVNjcmVlbk9uJyksIHNlbGYuX0tfU0NSRUVOX09GRikpOgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZGV2aWNlLklzU2NyZWVuT24oKSkKLQotICBkZWYgdGVzdElzU2NyZWVuT25fb2ZmTChzZWxmKToKLSAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChzZWxmLmNhbGwuZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT12ZXJzaW9uX2NvZGVzLkxPTExJUE9QKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5fUnVuUGlwZWRTaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAgICdkdW1wc3lzIGlucHV0X21ldGhvZCB8IGdyZXAgbUludGVyYWN0aXZlJyksIHNlbGYuX0xfU0NSRUVOX09GRikpOgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZGV2aWNlLklzU2NyZWVuT24oKSkKLQotICBkZWYgdGVzdElzU2NyZWVuT25fbm9PdXRwdXQoc2VsZik6Ci0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmRldmljZS5idWlsZF92ZXJzaW9uX3NkaywKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9dmVyc2lvbl9jb2Rlcy5MT0xMSVBPUCk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuX1J1blBpcGVkU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgICAnZHVtcHN5cyBpbnB1dF9tZXRob2QgfCBncmVwIG1JbnRlcmFjdGl2ZScpLCBbXSkpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgICAgICBzZWxmLmRldmljZS5Jc1NjcmVlbk9uKCkKLQotCi1jbGFzcyBEZXZpZWNVdGlsc1NldFNjcmVlbihEZXZpY2VVdGlsc1Rlc3QpOgotCi0gIEBtb2NrLnBhdGNoKCd0aW1lLnNsZWVwJywgbW9jay5Nb2NrKCkpCi0gIGRlZiB0ZXN0U2V0U2NyZW5fYWxyZWFkeVNldChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLklzU2NyZWVuT24oKSwgRmFsc2UpKToKLSAgICAgIHNlbGYuZGV2aWNlLlNldFNjcmVlbihGYWxzZSkKLQotICBAbW9jay5wYXRjaCgndGltZS5zbGVlcCcsIG1vY2suTW9jaygpKQotICBkZWYgdGVzdFNldFNjcmVlbl9vbihzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLklzU2NyZWVuT24oKSwgRmFsc2UpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5TZW5kS2V5RXZlbnQoa2V5ZXZlbnQuS0VZQ09ERV9QT1dFUiksIE5vbmUpLAotICAgICAgICAoc2VsZi5jYWxsLmRldmljZS5Jc1NjcmVlbk9uKCksIFRydWUpKToKLSAgICAgIHNlbGYuZGV2aWNlLlNldFNjcmVlbihUcnVlKQotCi0gIEBtb2NrLnBhdGNoKCd0aW1lLnNsZWVwJywgbW9jay5Nb2NrKCkpCi0gIGRlZiB0ZXN0U2V0U2NyZWVuX29mZihzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLklzU2NyZWVuT24oKSwgVHJ1ZSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLlNlbmRLZXlFdmVudChrZXlldmVudC5LRVlDT0RFX1BPV0VSKSwgTm9uZSksCi0gICAgICAgIChzZWxmLmNhbGwuZGV2aWNlLklzU2NyZWVuT24oKSwgRmFsc2UpKToKLSAgICAgIHNlbGYuZGV2aWNlLlNldFNjcmVlbihGYWxzZSkKLQotICBAbW9jay5wYXRjaCgndGltZS5zbGVlcCcsIG1vY2suTW9jaygpKQotICBkZWYgdGVzdFNldFNjcmVlbl9zbG93KHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuSXNTY3JlZW5PbigpLCBUcnVlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuU2VuZEtleUV2ZW50KGtleWV2ZW50LktFWUNPREVfUE9XRVIpLCBOb25lKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuSXNTY3JlZW5PbigpLCBUcnVlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuSXNTY3JlZW5PbigpLCBUcnVlKSwKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuSXNTY3JlZW5PbigpLCBGYWxzZSkpOgotICAgICAgc2VsZi5kZXZpY2UuU2V0U2NyZWVuKEZhbHNlKQotCi1jbGFzcyBEZXZpZWNVdGlsc0xvYWRDYWNoZURhdGEoRGV2aWNlVXRpbHNUZXN0KToKLQotICBkZWYgdGVzdFRva2VuTWlzc2luZyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIHNlbGYuRW5zdXJlQ2FjaGVJbml0aWFsaXplZCgpKToKLSAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kZXZpY2UuTG9hZENhY2hlRGF0YSgne30nKSkKLQotICBkZWYgdGVzdFRva2VuU3RhbGUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICBzZWxmLkVuc3VyZUNhY2hlSW5pdGlhbGl6ZWQoKSk6Ci0gICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZGV2aWNlLkxvYWRDYWNoZURhdGEoJ3sidG9rZW4iOiJmb28ifScpKQotCi0gIGRlZiB0ZXN0VG9rZW5NYXRjaGVzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgc2VsZi5FbnN1cmVDYWNoZUluaXRpYWxpemVkKCkpOgotICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGV2aWNlLkxvYWRDYWNoZURhdGEoJ3sidG9rZW4iOiJUT0tFTiJ9JykpCi0KLSAgZGVmIHRlc3REdW1wVGhlbkxvYWQoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICBzZWxmLkVuc3VyZUNhY2hlSW5pdGlhbGl6ZWQoKSk6Ci0gICAgICBkYXRhID0ganNvbi5sb2FkcyhzZWxmLmRldmljZS5EdW1wQ2FjaGVEYXRhKCkpCi0gICAgICBkYXRhWyd0b2tlbiddID0gJ1RPS0VOJwotICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGV2aWNlLkxvYWRDYWNoZURhdGEoanNvbi5kdW1wcyhkYXRhKSkpCi0KLQotY2xhc3MgRGV2aWNlVXRpbHNHZXRJTUVJVGVzdChEZXZpY2VVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0U3VjY2Vzc2Z1bER1bXBzeXMoc2VsZik6Ci0gICAgZHVtcHN5c19vdXRwdXQgPSAoCi0gICAgICAgICdQaG9uZSBTdWJzY3JpYmVyIEluZm86JwotICAgICAgICAnICBQaG9uZSBUeXBlID0gR1NNJwotICAgICAgICAnICBEZXZpY2UgSUQgPSAxMjM0NTQzMjEnKQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgncm8uYnVpbGQudmVyc2lvbi5zZGsnLCBjYWNoZT1UcnVlKSwgJzE5JyksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCdkdW1wc3lzIGlwaG9uZXN1YmluZm8nKSwgZHVtcHN5c19vdXRwdXQpKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZGV2aWNlLkdldElNRUkoKSwgJzEyMzQ1NDMyMScpCi0KLSAgZGVmIHRlc3RTdWNjZXNzZnVsU2VydmljZUNhbGwoc2VsZik6Ci0gICAgc2VydmljZV9vdXRwdXQgPSAiIiIKLSAgICAgICAgUmVzdWx0OiBQYXJjZWwoXG4nCi0gICAgICAgICAgMHgwMDAwMDAwMDogMDAwMDAwMDAgMDAwMDAwMGYgMDAzNTAwMzMgMDAzNjAwMzMgJy4uLi4uLi4uNy42LjUuNC4nCi0gICAgICAgICAgMHgwMDAwMDAxMDogMDAzNjAwMzIgMDAzNzAwMzAgMDAzMDAwMzIgMDAzMDAwMzkgJzMuMi4xLjAuMS4yLjMuNC4nCi0gICAgICAgICAgMHgwMDAwMDAyMDogMDAzODAwMzMgMDAwMDAwMzkgICAgICAgICAgICAgICAgICAgJzUuNi43Li4uICAgICAgICAnKQotICAgICIiIgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgncm8uYnVpbGQudmVyc2lvbi5zZGsnLCBjYWNoZT1UcnVlKSwgJzI0JyksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCdzZXJ2aWNlIGNhbGwgaXBob25lc3ViaW5mbyAxJyksIHNlcnZpY2Vfb3V0cHV0KSk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRldmljZS5HZXRJTUVJKCksICc3NjU0MzIxMDEyMzQ1NjcnKQotCi0gIGRlZiB0ZXN0Tm9JTUVJKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgncm8uYnVpbGQudmVyc2lvbi5zZGsnLCBjYWNoZT1UcnVlKSwgJzE5JyksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCdkdW1wc3lzIGlwaG9uZXN1YmluZm8nKSwgJ25vIGRldmljZSBpZCcpKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgICBzZWxmLmRldmljZS5HZXRJTUVJKCkKLQotICBkZWYgdGVzdEFkYkVycm9yKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5kZXZpY2UuR2V0UHJvcCgncm8uYnVpbGQudmVyc2lvbi5zZGsnLCBjYWNoZT1UcnVlKSwgJzI0JyksCi0gICAgICAgIChzZWxmLmNhbGwuYWRiLlNoZWxsKCdzZXJ2aWNlIGNhbGwgaXBob25lc3ViaW5mbyAxJyksCi0gICAgICAgICBzZWxmLlNoZWxsRXJyb3IoKSkpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICAgIHNlbGYuZGV2aWNlLkdldElNRUkoKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKLSAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZmFzdGJvb3RfdXRpbHMucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2Zhc3Rib290X3V0aWxzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmQzZWU4Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZmFzdGJvb3RfdXRpbHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJQcm92aWRlcyBhIHZhcmlldHkgb2YgZGV2aWNlIGludGVyYWN0aW9ucyBiYXNlZCBvbiBmYXN0Ym9vdC4iIiIKLSMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAotCi1pbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQgZm5tYXRjaAotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHJlCi0KLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGVjb3JhdG9ycwotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBmYXN0Ym9vdAotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgdGltZW91dF9yZXRyeQotCi1sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotX0RFRkFVTFRfVElNRU9VVCA9IDMwCi1fREVGQVVMVF9SRVRSSUVTID0gMwotX0ZBU1RCT09UX1JFQk9PVF9USU1FT1VUID0gMTAgKiBfREVGQVVMVF9USU1FT1VUCi1fS05PV05fUEFSVElUSU9OUyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KFsKLSAgICAgICgnYm9vdGxvYWRlcicsIHsnaW1hZ2UnOiAnYm9vdGxvYWRlciouaW1nJywgJ3Jlc3RhcnQnOiBUcnVlfSksCi0gICAgICAoJ3JhZGlvJywgeydpbWFnZSc6ICdyYWRpbyouaW1nJywgJ3Jlc3RhcnQnOiBUcnVlfSksCi0gICAgICAoJ2Jvb3QnLCB7J2ltYWdlJzogJ2Jvb3QuaW1nJ30pLAotICAgICAgKCdyZWNvdmVyeScsIHsnaW1hZ2UnOiAncmVjb3ZlcnkuaW1nJ30pLAotICAgICAgKCdzeXN0ZW0nLCB7J2ltYWdlJzogJ3N5c3RlbS5pbWcnfSksCi0gICAgICAoJ3VzZXJkYXRhJywgeydpbWFnZSc6ICd1c2VyZGF0YS5pbWcnLCAnd2lwZV9vbmx5JzogVHJ1ZX0pLAotICAgICAgKCdjYWNoZScsIHsnaW1hZ2UnOiAnY2FjaGUuaW1nJywgJ3dpcGVfb25seSc6IFRydWV9KSwKLSAgICAgICgndmVuZG9yJywgeydpbWFnZSc6ICd2ZW5kb3IqLmltZycsICdvcHRpb25hbCc6IFRydWV9KSwKLSAgXSkKLUFMTF9QQVJUSVRJT05TID0gX0tOT1dOX1BBUlRJVElPTlMua2V5cygpCi0KLQotZGVmIF9GaW5kQW5kVmVyaWZ5UGFydGl0aW9uc0FuZEltYWdlcyhwYXJ0aXRpb25zLCBkaXJlY3RvcnkpOgotICAiIiJWYWxpZGF0ZSBwYXJ0aXRpb25zIGFuZCBpbWFnZXMuCi0KLSAgVmFsaWRhdGUgYWxsIHBhcnRpdGlvbiBuYW1lcyBhbmQgcGFydGl0aW9uIGRpcmVjdG9yaWVzLiBDYW5ub3Qgc3RvcCBtaWQKLSAgZmxhc2ggc28gaXRzIGltcG9ydGFudCB0byB2YWxpZGF0ZSBldmVyeXRoaW5nIGZpcnN0LgotCi0gIEFyZ3M6Ci0gICAgUGFydGl0aW9uczogcGFydGl0aW9ucyB0byBiZSB0ZXN0ZWQuCi0gICAgZGlyZWN0b3J5OiBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaW1hZ2VzLgotCi0gIFJldHVybnM6Ci0gICAgRGljdGlvbmFyeSB3aXRoIGV4YWN0IHBhcnRpdGlvbiwgaW1hZ2UgbmFtZSBtYXBwaW5nLgotICAiIiIKLQotICBmaWxlcyA9IG9zLmxpc3RkaXIoZGlyZWN0b3J5KQotICByZXR1cm5fZGljdCA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKLQotICBkZWYgZmluZF9maWxlKHBhdHRlcm4pOgotICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlczoKLSAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmaWxlbmFtZSwgcGF0dGVybik6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCBmaWxlbmFtZSkKLSAgICByZXR1cm4gTm9uZQotICBmb3IgcGFydGl0aW9uIGluIHBhcnRpdGlvbnM6Ci0gICAgcGFydGl0aW9uX2luZm8gPSBfS05PV05fUEFSVElUSU9OU1twYXJ0aXRpb25dCi0gICAgaW1hZ2VfZmlsZSA9IGZpbmRfZmlsZShwYXJ0aXRpb25faW5mb1snaW1hZ2UnXSkKLSAgICBpZiBpbWFnZV9maWxlOgotICAgICAgcmV0dXJuX2RpY3RbcGFydGl0aW9uXSA9IGltYWdlX2ZpbGUKLSAgICBlbGlmIG5vdCBwYXJ0aXRpb25faW5mby5nZXQoJ29wdGlvbmFsJyk6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkZhc3Rib290Q29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAgICdGYWlsZWQgdG8gZmxhc2ggZGV2aWNlLiBDb3VsZCBub3QgZmluZCBpbWFnZSBmb3IgJXMuJywKLSAgICAgICAgICBwYXJ0aXRpb25faW5mb1snaW1hZ2UnXSkKLSAgcmV0dXJuIHJldHVybl9kaWN0Ci0KLQotY2xhc3MgRmFzdGJvb3RVdGlscyhvYmplY3QpOgotCi0gIF9GQVNUQk9PVF9XQUlUX1RJTUUgPSAxCi0gIF9CT0FSRF9WRVJJRklDQVRJT05fRklMRSA9ICdhbmRyb2lkLWluZm8udHh0JwotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2UsIGZhc3Rib290ZXI9Tm9uZSwgZGVmYXVsdF90aW1lb3V0PV9ERUZBVUxUX1RJTUVPVVQsCi0gICAgICAgICAgICAgICBkZWZhdWx0X3JldHJpZXM9X0RFRkFVTFRfUkVUUklFUyk6Ci0gICAgIiIiRmFzdGJvb3RVdGlscyBjb25zdHJ1Y3Rvci4KLQotICAgIEV4YW1wbGUgVXNhZ2UgdG8gZmxhc2ggYSBkZXZpY2U6Ci0gICAgICBmYXN0Ym9vdCA9IGZhc3Rib290X3V0aWxzLkZhc3Rib290VXRpbHMoZGV2aWNlKQotICAgICAgZmFzdGJvb3QuRmxhc2hEZXZpY2UoJy9wYXRoL3RvL2J1aWxkL2RpcmVjdG9yeScpCi0KLSAgICBBcmdzOgotICAgICAgZGV2aWNlOiBBIERldmljZVV0aWxzIGluc3RhbmNlLgotICAgICAgZmFzdGJvb3RlcjogT3B0aW9uYWwgZmFzdGJvb3Qgb2JqZWN0LiBJZiBub25lIGlzIHBhc3NlZCwgb25lIHdpbGwKLSAgICAgICAgYmUgY3JlYXRlZC4KLSAgICAgIGRlZmF1bHRfdGltZW91dDogQW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBkZWZhdWx0IG51bWJlciBvZiBzZWNvbmRzIHRvCi0gICAgICAgIHdhaXQgZm9yIGFuIG9wZXJhdGlvbiB0byBjb21wbGV0ZSBpZiBubyBleHBsaWNpdCB2YWx1ZSBpcyBwcm92aWRlZC4KLSAgICAgIGRlZmF1bHRfcmV0cmllczogQW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBkZWZhdWx0IG51bWJlciBvciB0aW1lcyBhbgotICAgICAgICBvcGVyYXRpb24gc2hvdWxkIGJlIHJldHJpZWQgb24gZmFpbHVyZSBpZiBubyBleHBsaWNpdCB2YWx1ZSBpcyBwcm92aWRlZC4KLSAgICAiIiIKLSAgICBzZWxmLl9kZXZpY2UgPSBkZXZpY2UKLSAgICBzZWxmLl9ib2FyZCA9IGRldmljZS5wcm9kdWN0X2JvYXJkCi0gICAgc2VsZi5fc2VyaWFsID0gc3RyKGRldmljZSkKLSAgICBzZWxmLl9kZWZhdWx0X3RpbWVvdXQgPSBkZWZhdWx0X3RpbWVvdXQKLSAgICBzZWxmLl9kZWZhdWx0X3JldHJpZXMgPSBkZWZhdWx0X3JldHJpZXMKLSAgICBpZiBmYXN0Ym9vdGVyOgotICAgICAgc2VsZi5mYXN0Ym9vdCA9IGZhc3Rib290ZXIKLSAgICBlbHNlOgotICAgICAgc2VsZi5mYXN0Ym9vdCA9IGZhc3Rib290LkZhc3Rib290KHNlbGYuX3NlcmlhbCkKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgV2FpdEZvckZhc3Rib290TW9kZShzZWxmLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiV2FpdCBmb3IgZGV2aWNlIHRvIGJvb3QgaW50byBmYXN0Ym9vdCBtb2RlLgotCi0gICAgVGhpcyB3YWl0cyBmb3IgdGhlIGRldmljZSBzZXJpYWwgdG8gc2hvdyB1cCBpbiBmYXN0Ym9vdCBkZXZpY2VzIG91dHB1dC4KLSAgICAiIiIKLSAgICBkZWYgZmFzdGJvb3RfbW9kZSgpOgotICAgICAgcmV0dXJuIHNlbGYuX3NlcmlhbCBpbiBzZWxmLmZhc3Rib290LkRldmljZXMoKQotCi0gICAgdGltZW91dF9yZXRyeS5XYWl0Rm9yKGZhc3Rib290X21vZGUsIHdhaXRfcGVyaW9kPXNlbGYuX0ZBU1RCT09UX1dBSVRfVElNRSkKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoCi0gICAgICBtaW5fZGVmYXVsdF90aW1lb3V0PV9GQVNUQk9PVF9SRUJPT1RfVElNRU9VVCkKLSAgZGVmIEVuYWJsZUZhc3Rib290TW9kZShzZWxmLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiUmVib290cyBwaG9uZSBpbnRvIGZhc3Rib290IG1vZGUuCi0KLSAgICBSb290cyBwaG9uZSBpZiBuZWVkZWQsIHRoZW4gcmVib290cyBwaG9uZSBpbnRvIGZhc3Rib290IG1vZGUgYW5kIHdhaXRzLgotICAgICIiIgotICAgIHNlbGYuX2RldmljZS5FbmFibGVSb290KCkKLSAgICBzZWxmLl9kZXZpY2UuYWRiLlJlYm9vdCh0b19ib290bG9hZGVyPVRydWUpCi0gICAgc2VsZi5XYWl0Rm9yRmFzdGJvb3RNb2RlKCkKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoCi0gICAgICBtaW5fZGVmYXVsdF90aW1lb3V0PV9GQVNUQk9PVF9SRUJPT1RfVElNRU9VVCkKLSAgZGVmIFJlYm9vdCgKLSAgICAgIHNlbGYsIGJvb3Rsb2FkZXI9RmFsc2UsIHdhaXRfZm9yX3JlYm9vdD1UcnVlLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiUmVib290cyBvdXQgb2YgZmFzdGJvb3QgbW9kZS4KLQotICAgIEl0IHJlYm9vdHMgdGhlIHBob25lIGVpdGhlciBiYWNrIGludG8gZmFzdGJvb3QsIG9yIHRvIGEgcmVndWxhciBib290LiBJdAotICAgIHRoZW4gYmxvY2tzIHVudGlsIHRoZSBkZXZpY2UgaXMgcmVhZHkuCi0KLSAgICBBcmdzOgotICAgICAgYm9vdGxvYWRlcjogSWYgc2V0IHRvIFRydWUsIHJlYm9vdHMgYmFjayBpbnRvIGJvb3Rsb2FkZXIuCi0gICAgIiIiCi0gICAgaWYgYm9vdGxvYWRlcjoKLSAgICAgIHNlbGYuZmFzdGJvb3QuUmVib290Qm9vdGxvYWRlcigpCi0gICAgICBzZWxmLldhaXRGb3JGYXN0Ym9vdE1vZGUoKQotICAgIGVsc2U6Ci0gICAgICBzZWxmLmZhc3Rib290LlJlYm9vdCgpCi0gICAgICBpZiB3YWl0X2Zvcl9yZWJvb3Q6Ci0gICAgICAgIHNlbGYuX2RldmljZS5XYWl0VW50aWxGdWxseUJvb3RlZCh0aW1lb3V0PV9GQVNUQk9PVF9SRUJPT1RfVElNRU9VVCkKLQotICBkZWYgX1ZlcmlmeUJvYXJkKHNlbGYsIGRpcmVjdG9yeSk6Ci0gICAgIiIiVmFsaWRhdGUgYXMgYmVzdCBhcyBwb3NzaWJsZSB0aGF0IHRoZSBhbmRyb2lkIGJ1aWxkIG1hdGNoZXMgdGhlIGRldmljZS4KLQotICAgIEdvZXMgdGhyb3VnaCBidWlsZCBmaWxlcyBhbmQgY2hlY2tzIGlmIHRoZSBib2FyZCBuYW1lIGlzIG1lbnRpb25lZCBpbiB0aGUKLSAgICB8c2VsZi5fQk9BUkRfVkVSSUZJQ0FUSU9OX0ZJTEV8IG9yIGluIHRoZSBidWlsZCBhcmNoaXZlLgotCi0gICAgQXJnczoKLSAgICAgIGRpcmVjdG9yeTogZGlyZWN0b3J5IHdoZXJlIGJ1aWxkIGZpbGVzIGFyZSBsb2NhdGVkLgotICAgICIiIgotICAgIGZpbGVzID0gb3MubGlzdGRpcihkaXJlY3RvcnkpCi0gICAgYm9hcmRfcmVnZXggPSByZS5jb21waWxlKHIncmVxdWlyZSBib2FyZD0oXHcrKScpCi0gICAgaWYgc2VsZi5fQk9BUkRfVkVSSUZJQ0FUSU9OX0ZJTEUgaW4gZmlsZXM6Ci0gICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGRpcmVjdG9yeSwgc2VsZi5fQk9BUkRfVkVSSUZJQ0FUSU9OX0ZJTEUpKSBhcyBmOgotICAgICAgICBmb3IgbGluZSBpbiBmOgotICAgICAgICAgIG0gPSBib2FyZF9yZWdleC5tYXRjaChsaW5lKQotICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICBib2FyZF9uYW1lID0gbS5ncm91cCgxKQotICAgICAgICAgICAgaWYgYm9hcmRfbmFtZSA9PSBzZWxmLl9ib2FyZDoKLSAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIGVsaWYgYm9hcmRfbmFtZToKLSAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnTm8gYm9hcmQgdHlwZSBmb3VuZCBpbiAlcy4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9CT0FSRF9WRVJJRklDQVRJT05fRklMRSkKLSAgICBlbHNlOgotICAgICAgbG9nZ2VyLndhcm5pbmcoJyVzIG5vdCBmb3VuZC4gVW5hYmxlIHRvIHVzZSBpdCB0byB2ZXJpZnkgZGV2aWNlLicsCi0gICAgICAgICAgICAgICAgICAgICBzZWxmLl9CT0FSRF9WRVJJRklDQVRJT05fRklMRSkKLQotICAgIHppcF9yZWdleCA9IHJlLmNvbXBpbGUocicuKiVzLipcLnppcCcgJSByZS5lc2NhcGUoc2VsZi5fYm9hcmQpKQotICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgaWYgemlwX3JlZ2V4Lm1hdGNoKGYpOgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgcmV0dXJuIEZhbHNlCi0KLSAgZGVmIF9GbGFzaFBhcnRpdGlvbnMoc2VsZiwgcGFydGl0aW9ucywgZGlyZWN0b3J5LCB3aXBlPUZhbHNlLCBmb3JjZT1GYWxzZSk6Ci0gICAgIiIiRmxhc2hlcyBhbGwgZ2l2ZW4gcGFydGlpdG9ucyB3aXRoIGFsbCBnaXZlbiBpbWFnZXMuCi0KLSAgICBBcmdzOgotICAgICAgcGFydGl0aW9uczogTGlzdCBvZiBwYXJ0aXRpb25zIHRvIGZsYXNoLgotICAgICAgZGlyZWN0b3J5OiBEaXJlY3Rvcnkgd2hlcmUgYWxsIHBhcnRpdGlvbnMgY2FuIGJlIGZvdW5kLgotICAgICAgd2lwZTogSWYgc2V0IHRvIHRydWUsIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3QgaWYgY2FjaGUgYW5kIHVzZXJkYXRhCi0gICAgICAgICAgcGFydGl0aW9ucyBhcmUgc2VudCwgYW5kIGlmIHNvIGlnbm9yZSB0aGVtLgotICAgICAgZm9yY2U6IGJvb2xlYW4gdG8gZGVjaWRlIHRvIGlnbm9yZSBib2FyZCBuYW1lIHNhZmV0eSBjaGVja3MuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcigpOiBJZiBpbWFnZSBjYW5ub3QgYmUgZm91bmQgb3IgaWYgYmFkCi0gICAgICAgICAgcGFydGl0aW9uIG5hbWUgaXMgZ2l2ZS4KLSAgICAiIiIKLSAgICBpZiBub3Qgc2VsZi5fVmVyaWZ5Qm9hcmQoZGlyZWN0b3J5KToKLSAgICAgIGlmIGZvcmNlOgotICAgICAgICBsb2dnZXIud2FybmluZygnQ291bGQgbm90IHZlcmlmeSBidWlsZCBpcyBtZWFudCB0byBiZSBpbnN0YWxsZWQgb24gJwotICAgICAgICAgICAgICAgICAgICAgICAndGhlIGN1cnJlbnQgZGV2aWNlIHR5cGUsIGJ1dCBmb3JjZSBmbGFnIGlzIHNldC4gJwotICAgICAgICAgICAgICAgICAgICAgICAnRmxhc2hpbmcgZGV2aWNlLiBQb3NzaWJseSBkYW5nZXJvdXMgb3BlcmF0aW9uLicpCi0gICAgICBlbHNlOgotICAgICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICAgICdDb3VsZCBub3QgdmVyaWZ5IGJ1aWxkIGlzIG1lYW50IHRvIGJlIGluc3RhbGxlZCBvbiB0aGUgY3VycmVudCAnCi0gICAgICAgICAgICAnZGV2aWNlIHR5cGUuIFJ1biBhZ2FpbiB3aXRoIGZvcmNlPVRydWUgdG8gZm9yY2UgZmxhc2hpbmcgd2l0aCBhbiAnCi0gICAgICAgICAgICAndW52ZXJpZmllZCBib2FyZC4nKQotCi0gICAgZmxhc2hfaW1hZ2VfZmlsZXMgPSBfRmluZEFuZFZlcmlmeVBhcnRpdGlvbnNBbmRJbWFnZXMocGFydGl0aW9ucywgZGlyZWN0b3J5KQotICAgIHBhcnRpdGlvbnMgPSBmbGFzaF9pbWFnZV9maWxlcy5rZXlzKCkKLSAgICBmb3IgcGFydGl0aW9uIGluIHBhcnRpdGlvbnM6Ci0gICAgICBpZiBfS05PV05fUEFSVElUSU9OU1twYXJ0aXRpb25dLmdldCgnd2lwZV9vbmx5JykgYW5kIG5vdCB3aXBlOgotICAgICAgICBsb2dnZXIuaW5mbygKLSAgICAgICAgICAgICdOb3QgZmxhc2hpbmcgaW4gd2lwZSBtb2RlLiBTa2lwcGluZyBwYXJ0aXRpb24gJXMuJywgcGFydGl0aW9uKQotICAgICAgZWxzZToKLSAgICAgICAgbG9nZ2VyLmluZm8oCi0gICAgICAgICAgICAnRmxhc2hpbmcgJXMgd2l0aCAlcycsIHBhcnRpdGlvbiwgZmxhc2hfaW1hZ2VfZmlsZXNbcGFydGl0aW9uXSkKLSAgICAgICAgc2VsZi5mYXN0Ym9vdC5GbGFzaChwYXJ0aXRpb24sIGZsYXNoX2ltYWdlX2ZpbGVzW3BhcnRpdGlvbl0pCi0gICAgICAgIGlmIF9LTk9XTl9QQVJUSVRJT05TW3BhcnRpdGlvbl0uZ2V0KCdyZXN0YXJ0JywgRmFsc2UpOgotICAgICAgICAgIHNlbGYuUmVib290KGJvb3Rsb2FkZXI9VHJ1ZSkKLQotICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotICBkZWYgRmFzdGJvb3RNb2RlKHNlbGYsIHdhaXRfZm9yX3JlYm9vdD1UcnVlLCB0aW1lb3V0PU5vbmUsIHJldHJpZXM9Tm9uZSk6Ci0gICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRoYXQgZW5hYmxlcyBmYXN0Ym9vdCBtb2RlLCBhbmQgcmVib290cyBhZnRlci4KLQotICAgIEV4YW1wbGUgdXNhZ2U6Ci0gICAgICB3aXRoIEZhc3Rib290TW9kZSgpOgotICAgICAgICBGbGFzaCBEZXZpY2UKLSAgICAgICMgQW55dGhpbmcgdGhhdCBydW5zIGFmdGVyIGZsYXNoaW5nLgotICAgICIiIgotICAgIHNlbGYuRW5hYmxlRmFzdGJvb3RNb2RlKCkKLSAgICBzZWxmLmZhc3Rib290LlNldE9lbU9mZk1vZGVDaGFyZ2UoRmFsc2UpCi0gICAgdHJ5OgotICAgICAgeWllbGQgc2VsZgotICAgIGZpbmFsbHk6Ci0gICAgICBzZWxmLmZhc3Rib290LlNldE9lbU9mZk1vZGVDaGFyZ2UoVHJ1ZSkKLSAgICAgIHNlbGYuUmVib290KHdhaXRfZm9yX3JlYm9vdD13YWl0X2Zvcl9yZWJvb3QpCi0KLSAgZGVmIEZsYXNoRGV2aWNlKHNlbGYsIGRpcmVjdG9yeSwgcGFydGl0aW9ucz1Ob25lLCB3aXBlPUZhbHNlKToKLSAgICAiIiJGbGFzaCBkZXZpY2Ugd2l0aCBidWlsZCBpbiB8ZGlyZWN0b3J5fC4KLQotICAgIERpcmVjdG9yeSBtdXN0IGNvbnRhaW4gYm9vdGxvYWRlciwgcmFkaW8sIGJvb3QsIHJlY292ZXJ5LCBzeXN0ZW0sIHVzZXJkYXRhLAotICAgIGFuZCBjYWNoZSAuaW1nIGZpbGVzIGZyb20gYW4gYW5kcm9pZCBidWlsZC4gVGhpcyBpcyBhIGRhbmdlcm91cyBvcGVyYXRpb24gc28KLSAgICB1c2Ugd2l0aCBjYXJlLgotCi0gICAgQXJnczoKLSAgICAgIGZhc3Rib290OiBBIEZhc3Rib290VXRpbHMgaW5zdGFuY2UuCi0gICAgICBkaXJlY3Rvcnk6IERpcmVjdG9yeSB3aXRoIGJ1aWxkIGZpbGVzLgotICAgICAgd2lwZTogV2lwZXMgY2FjaGUgYW5kIHVzZXJkYXRhIGlmIHNldCB0byB0cnVlLgotICAgICAgcGFydGl0aW9uczogTGlzdCBvZiBwYXJ0aXRpb25zIHRvIGZsYXNoLiBEZWZhdWx0cyB0byBhbGwuCi0gICAgIiIiCi0gICAgaWYgcGFydGl0aW9ucyBpcyBOb25lOgotICAgICAgcGFydGl0aW9ucyA9IEFMTF9QQVJUSVRJT05TCi0gICAgIyBJZiBhIGRldmljZSBpcyB3aXBlZCwgdGhlbiBpdCB3aWxsIG5vIGxvbmdlciBoYXZlIGFkYiBrZXlzIHNvIGl0IGNhbm5vdCBiZQotICAgICMgY29tbXVuaWNhdGVkIHdpdGggdG8gdmVyaWZ5IHRoYXQgaXQgaXMgcmVib290ZWQuIEl0IGlzIHVwIHRvIHRoZSB1c2VyIG9mCi0gICAgIyB0aGlzIHNjcmlwdCB0byBlbnN1cmUgdGhhdCB0aGUgYWRiIGtleXMgYXJlIHNldCBvbiB0aGUgZGV2aWNlIGFmdGVyIHVzaW5nCi0gICAgIyB0aGlzIHRvIHdpcGUgYSBkZXZpY2UuCi0gICAgd2l0aCBzZWxmLkZhc3Rib290TW9kZSh3YWl0X2Zvcl9yZWJvb3Q9bm90IHdpcGUpOgotICAgICAgc2VsZi5fRmxhc2hQYXJ0aXRpb25zKHBhcnRpdGlvbnMsIGRpcmVjdG9yeSwgd2lwZT13aXBlKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9mYXN0Ym9vdF91dGlsc190ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9mYXN0Ym9vdF91dGlsc190ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwNTYyOTc0Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZmFzdGJvb3RfdXRpbHNfdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM3NSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiCi1Vbml0IHRlc3RzIGZvciB0aGUgY29udGVudHMgb2YgZmFzdGJvb3RfdXRpbHMucHkKLSIiIgotCi0jIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzLHVudXNlZC1hcmd1bWVudAotCi1pbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBpbwotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX2Vycm9ycwotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdXRpbHMKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZmFzdGJvb3RfdXRpbHMKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IGZhc3Rib290Ci1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBtb2NrX2NhbGxzCi0KLXdpdGggZGV2aWxfZW52LlN5c1BhdGgoZGV2aWxfZW52LlBZTU9DS19QQVRIKToKLSAgaW1wb3J0IG1vY2sgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotCi1fQk9BUkQgPSAnYm9hcmRfdHlwZScKLV9TRVJJQUwgPSAnMDEyMzQ1Njc4OWFiY2RlZicKLV9QQVJUSVRJT05TID0gWwotICAgICdib290bG9hZGVyJywgJ3JhZGlvJywgJ2Jvb3QnLCAncmVjb3ZlcnknLCAnc3lzdGVtJywgJ3VzZXJkYXRhJywgJ2NhY2hlJ10KLV9JTUFHRVMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdChbCi0gICAgKCdib290bG9hZGVyJywgJ2Jvb3Rsb2FkZXIuaW1nJyksCi0gICAgKCdyYWRpbycsICdyYWRpby5pbWcnKSwKLSAgICAoJ2Jvb3QnLCAnYm9vdC5pbWcnKSwKLSAgICAoJ3JlY292ZXJ5JywgJ3JlY292ZXJ5LmltZycpLAotICAgICgnc3lzdGVtJywgJ3N5c3RlbS5pbWcnKSwKLSAgICAoJ3VzZXJkYXRhJywgJ3VzZXJkYXRhLmltZycpLAotICAgICgnY2FjaGUnLCAnY2FjaGUuaW1nJykKLV0pCi1fVkFMSURfRklMRVMgPSBbX0JPQVJEICsgJy56aXAnLCAnYW5kcm9pZC1pbmZvLnR4dCddCi1fSU5WQUxJRF9GSUxFUyA9IFsndGVzdC56aXAnLCAnYW5kcm9pZC1pbmZvLnR4dCddCi0KLQotY2xhc3MgTW9ja0ZpbGUob2JqZWN0KToKLQotICBkZWYgX19pbml0X18oc2VsZiwgbmFtZT0nL3RtcC9zb21lL2ZpbGUnKToKLSAgICBzZWxmLmZpbGUgPSBtb2NrLk1hZ2ljTW9jayhzcGVjPWZpbGUpCi0gICAgc2VsZi5maWxlLm5hbWUgPSBuYW1lCi0KLSAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICByZXR1cm4gc2VsZi5maWxlCi0KLSAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgotICAgIHBhc3MKLQotICBAcHJvcGVydHkKLSAgZGVmIG5hbWUoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuZmlsZS5uYW1lCi0KLQotZGVmIF9GYXN0Ym9vdFdyYXBwZXJNb2NrKHRlc3Rfc2VyaWFsKToKLSAgZmFzdGJvb3RlciA9IG1vY2suTW9jayhzcGVjPWZhc3Rib290LkZhc3Rib290KQotICBmYXN0Ym9vdGVyLl9fc3RyX18gPSBtb2NrLk1vY2socmV0dXJuX3ZhbHVlPXRlc3Rfc2VyaWFsKQotICBmYXN0Ym9vdGVyLkRldmljZXMucmV0dXJuX3ZhbHVlID0gW3Rlc3Rfc2VyaWFsXQotICByZXR1cm4gZmFzdGJvb3RlcgotCi0KLWRlZiBfRGV2aWNlVXRpbHNNb2NrKHRlc3Rfc2VyaWFsKToKLSAgZGV2aWNlID0gbW9jay5Nb2NrKHNwZWM9ZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKQotICBkZXZpY2UuX19zdHJfXyA9IG1vY2suTW9jayhyZXR1cm5fdmFsdWU9dGVzdF9zZXJpYWwpCi0gIGRldmljZS5wcm9kdWN0X2JvYXJkID0gbW9jay5Nb2NrKHJldHVybl92YWx1ZT1fQk9BUkQpCi0gIGRldmljZS5hZGIgPSBtb2NrLk1vY2soKQotICByZXR1cm4gZGV2aWNlCi0KLQotY2xhc3MgRmFzdGJvb3RVdGlsc1Rlc3QobW9ja19jYWxscy5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHNlbGYuZGV2aWNlX3V0aWxzX21vY2sgPSBfRGV2aWNlVXRpbHNNb2NrKF9TRVJJQUwpCi0gICAgc2VsZi5mYXN0Ym9vdF93cmFwcGVyID0gX0Zhc3Rib290V3JhcHBlck1vY2soX1NFUklBTCkKLSAgICBzZWxmLmZhc3Rib290ID0gZmFzdGJvb3RfdXRpbHMuRmFzdGJvb3RVdGlscygKLSAgICAgICAgc2VsZi5kZXZpY2VfdXRpbHNfbW9jaywgZmFzdGJvb3Rlcj1zZWxmLmZhc3Rib290X3dyYXBwZXIsCi0gICAgICAgIGRlZmF1bHRfdGltZW91dD0yLCBkZWZhdWx0X3JldHJpZXM9MCkKLSAgICBzZWxmLmZhc3Rib290Ll9ib2FyZCA9IF9CT0FSRAotCi0KLWNsYXNzIEZhc3Rib290VXRpbHNJbml0VGVzdChGYXN0Ym9vdFV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RJbml0V2l0aERldmljZVV0aWwoc2VsZik6Ci0gICAgZiA9IGZhc3Rib290X3V0aWxzLkZhc3Rib290VXRpbHMoc2VsZi5kZXZpY2VfdXRpbHNfbW9jaykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLmRldmljZV91dGlsc19tb2NrKSwgc3RyKGYuX2RldmljZSkpCi0KLSAgZGVmIHRlc3RJbml0V2l0aE1pc3NpbmdfZmFpbHMoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICBmYXN0Ym9vdF91dGlscy5GYXN0Ym9vdFV0aWxzKE5vbmUpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICBmYXN0Ym9vdF91dGlscy5GYXN0Ym9vdFV0aWxzKCcnKQotCi0gIGRlZiB0ZXN0UGFydGl0aW9uT3JkZXJpbmcoc2VsZik6Ci0gICAgcGFydHMgPSBbJ2Jvb3Rsb2FkZXInLCAncmFkaW8nLCAnYm9vdCcsICdyZWNvdmVyeScsICdzeXN0ZW0nLCAndXNlcmRhdGEnLAotICAgICAgICAgICAgICdjYWNoZScsICd2ZW5kb3InXQotICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGZhc3Rib290X3V0aWxzLkFMTF9QQVJUSVRJT05TLCBwYXJ0cykKLQotCi1jbGFzcyBGYXN0Ym9vdFV0aWxzV2FpdEZvckZhc3Rib290TW9kZShGYXN0Ym9vdFV0aWxzVGVzdCk6Ci0KLSAgIyBJZiB0aGlzIHRlc3QgZmFpbHMgYnkgdGltaW5nIG91dCBhZnRlciAxIHNlY29uZC4KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3RXYWl0Rm9yRmFzdGJvb3RNb2RlKHNlbGYpOgotICAgIHNlbGYuZmFzdGJvb3QuV2FpdEZvckZhc3Rib290TW9kZSgpCi0KLQotY2xhc3MgRmFzdGJvb3RVdGlsc0VuYWJsZUZhc3Rib290TW9kZShGYXN0Ym9vdFV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RFbmFibGVGYXN0Ym9vdE1vZGUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICBzZWxmLmNhbGwuZmFzdGJvb3QuX2RldmljZS5FbmFibGVSb290KCksCi0gICAgICAgIHNlbGYuY2FsbC5mYXN0Ym9vdC5fZGV2aWNlLmFkYi5SZWJvb3QodG9fYm9vdGxvYWRlcj1UcnVlKSwKLSAgICAgICAgc2VsZi5jYWxsLmZhc3Rib290LldhaXRGb3JGYXN0Ym9vdE1vZGUoKSk6Ci0gICAgICBzZWxmLmZhc3Rib290LkVuYWJsZUZhc3Rib290TW9kZSgpCi0KLQotY2xhc3MgRmFzdGJvb3RVdGlsc1JlYm9vdChGYXN0Ym9vdFV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RSZWJvb3RfYm9vdGxvYWRlcihzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIHNlbGYuY2FsbC5mYXN0Ym9vdC5mYXN0Ym9vdC5SZWJvb3RCb290bG9hZGVyKCksCi0gICAgICAgIHNlbGYuY2FsbC5mYXN0Ym9vdC5XYWl0Rm9yRmFzdGJvb3RNb2RlKCkpOgotICAgICAgc2VsZi5mYXN0Ym9vdC5SZWJvb3QoYm9vdGxvYWRlcj1UcnVlKQotCi0gIGRlZiB0ZXN0UmVib290X25vcm1hbChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoCi0gICAgICAgIHNlbGYuY2FsbC5mYXN0Ym9vdC5mYXN0Ym9vdC5SZWJvb3QoKSwKLSAgICAgICAgc2VsZi5jYWxsLmZhc3Rib290Ll9kZXZpY2UuV2FpdFVudGlsRnVsbHlCb290ZWQodGltZW91dD1tb2NrLkFOWSkpOgotICAgICAgc2VsZi5mYXN0Ym9vdC5SZWJvb3QoKQotCi0KLWNsYXNzIEZhc3Rib290VXRpbHNGbGFzaFBhcnRpdGlvbnMoRmFzdGJvb3RVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0Rmxhc2hQYXJ0aXRpb25zX3dpcGUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAoc2VsZi5jYWxsLmZhc3Rib290Ll9WZXJpZnlCb2FyZCgndGVzdCcpLCBUcnVlKSwKLSAgICAgICAgKG1vY2suY2FsbC5kZXZpbC5hbmRyb2lkLmZhc3Rib290X3V0aWxzLgotICAgICAgICAgICAgX0ZpbmRBbmRWZXJpZnlQYXJ0aXRpb25zQW5kSW1hZ2VzKF9QQVJUSVRJT05TLCAndGVzdCcpLCBfSU1BR0VTKSwKLSAgICAgICAgKHNlbGYuY2FsbC5mYXN0Ym9vdC5mYXN0Ym9vdC5GbGFzaCgnYm9vdGxvYWRlcicsICdib290bG9hZGVyLmltZycpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5mYXN0Ym9vdC5SZWJvb3QoYm9vdGxvYWRlcj1UcnVlKSksCi0gICAgICAgIChzZWxmLmNhbGwuZmFzdGJvb3QuZmFzdGJvb3QuRmxhc2goJ3JhZGlvJywgJ3JhZGlvLmltZycpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5mYXN0Ym9vdC5SZWJvb3QoYm9vdGxvYWRlcj1UcnVlKSksCi0gICAgICAgIChzZWxmLmNhbGwuZmFzdGJvb3QuZmFzdGJvb3QuRmxhc2goJ2Jvb3QnLCAnYm9vdC5pbWcnKSksCi0gICAgICAgIChzZWxmLmNhbGwuZmFzdGJvb3QuZmFzdGJvb3QuRmxhc2goJ3JlY292ZXJ5JywgJ3JlY292ZXJ5LmltZycpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5mYXN0Ym9vdC5mYXN0Ym9vdC5GbGFzaCgnc3lzdGVtJywgJ3N5c3RlbS5pbWcnKSksCi0gICAgICAgIChzZWxmLmNhbGwuZmFzdGJvb3QuZmFzdGJvb3QuRmxhc2goJ3VzZXJkYXRhJywgJ3VzZXJkYXRhLmltZycpKSwKLSAgICAgICAgKHNlbGYuY2FsbC5mYXN0Ym9vdC5mYXN0Ym9vdC5GbGFzaCgnY2FjaGUnLCAnY2FjaGUuaW1nJykpKToKLSAgICAgIHNlbGYuZmFzdGJvb3QuX0ZsYXNoUGFydGl0aW9ucyhfUEFSVElUSU9OUywgJ3Rlc3QnLCB3aXBlPVRydWUpCi0KLSAgZGVmIHRlc3RGbGFzaFBhcnRpdGlvbnNfbm9XaXBlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKHNlbGYuY2FsbC5mYXN0Ym9vdC5fVmVyaWZ5Qm9hcmQoJ3Rlc3QnKSwgVHJ1ZSksCi0gICAgICAgIChtb2NrLmNhbGwuZGV2aWwuYW5kcm9pZC5mYXN0Ym9vdF91dGlscy4KLSAgICAgICAgICAgIF9GaW5kQW5kVmVyaWZ5UGFydGl0aW9uc0FuZEltYWdlcyhfUEFSVElUSU9OUywgJ3Rlc3QnKSwgX0lNQUdFUyksCi0gICAgICAgIChzZWxmLmNhbGwuZmFzdGJvb3QuZmFzdGJvb3QuRmxhc2goJ2Jvb3Rsb2FkZXInLCAnYm9vdGxvYWRlci5pbWcnKSksCi0gICAgICAgIChzZWxmLmNhbGwuZmFzdGJvb3QuUmVib290KGJvb3Rsb2FkZXI9VHJ1ZSkpLAotICAgICAgICAoc2VsZi5jYWxsLmZhc3Rib290LmZhc3Rib290LkZsYXNoKCdyYWRpbycsICdyYWRpby5pbWcnKSksCi0gICAgICAgIChzZWxmLmNhbGwuZmFzdGJvb3QuUmVib290KGJvb3Rsb2FkZXI9VHJ1ZSkpLAotICAgICAgICAoc2VsZi5jYWxsLmZhc3Rib290LmZhc3Rib290LkZsYXNoKCdib290JywgJ2Jvb3QuaW1nJykpLAotICAgICAgICAoc2VsZi5jYWxsLmZhc3Rib290LmZhc3Rib290LkZsYXNoKCdyZWNvdmVyeScsICdyZWNvdmVyeS5pbWcnKSksCi0gICAgICAgIChzZWxmLmNhbGwuZmFzdGJvb3QuZmFzdGJvb3QuRmxhc2goJ3N5c3RlbScsICdzeXN0ZW0uaW1nJykpKToKLSAgICAgIHNlbGYuZmFzdGJvb3QuX0ZsYXNoUGFydGl0aW9ucyhfUEFSVElUSU9OUywgJ3Rlc3QnKQotCi0KLWNsYXNzIEZhc3Rib290VXRpbHNGYXN0Ym9vdE1vZGUoRmFzdGJvb3RVdGlsc1Rlc3QpOgotCi0gIGRlZiB0ZXN0RmFzdGJvb3RNb2RlX2dvb2RXYWl0KHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgc2VsZi5jYWxsLmZhc3Rib290LkVuYWJsZUZhc3Rib290TW9kZSgpLAotICAgICAgICBzZWxmLmNhbGwuZmFzdGJvb3QuZmFzdGJvb3QuU2V0T2VtT2ZmTW9kZUNoYXJnZShGYWxzZSksCi0gICAgICAgIHNlbGYuY2FsbC5mYXN0Ym9vdC5mYXN0Ym9vdC5TZXRPZW1PZmZNb2RlQ2hhcmdlKFRydWUpLAotICAgICAgICBzZWxmLmNhbGwuZmFzdGJvb3QuUmVib290KHdhaXRfZm9yX3JlYm9vdD1UcnVlKSk6Ci0gICAgICB3aXRoIHNlbGYuZmFzdGJvb3QuRmFzdGJvb3RNb2RlKCkgYXMgZmJtOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmFzdGJvb3QsIGZibSkKLQotICBkZWYgdGVzdEZhc3Rib290TW9kZV9nb29kTm9XYWl0KHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgc2VsZi5jYWxsLmZhc3Rib290LkVuYWJsZUZhc3Rib290TW9kZSgpLAotICAgICAgICBzZWxmLmNhbGwuZmFzdGJvb3QuZmFzdGJvb3QuU2V0T2VtT2ZmTW9kZUNoYXJnZShGYWxzZSksCi0gICAgICAgIHNlbGYuY2FsbC5mYXN0Ym9vdC5mYXN0Ym9vdC5TZXRPZW1PZmZNb2RlQ2hhcmdlKFRydWUpLAotICAgICAgICBzZWxmLmNhbGwuZmFzdGJvb3QuUmVib290KHdhaXRfZm9yX3JlYm9vdD1GYWxzZSkpOgotICAgICAgd2l0aCBzZWxmLmZhc3Rib290LkZhc3Rib290TW9kZSh3YWl0X2Zvcl9yZWJvb3Q9RmFsc2UpIGFzIGZibToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZhc3Rib290LCBmYm0pCi0KLSAgZGVmIHRlc3RGYXN0Ym9vdE1vZGVfZXhjZXB0aW9uKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgc2VsZi5jYWxsLmZhc3Rib290LkVuYWJsZUZhc3Rib290TW9kZSgpLAotICAgICAgICBzZWxmLmNhbGwuZmFzdGJvb3QuZmFzdGJvb3QuU2V0T2VtT2ZmTW9kZUNoYXJnZShGYWxzZSksCi0gICAgICAgIHNlbGYuY2FsbC5mYXN0Ym9vdC5mYXN0Ym9vdC5TZXRPZW1PZmZNb2RlQ2hhcmdlKFRydWUpLAotICAgICAgICBzZWxmLmNhbGwuZmFzdGJvb3QuUmVib290KHdhaXRfZm9yX3JlYm9vdD1UcnVlKSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgotICAgICAgICB3aXRoIHNlbGYuZmFzdGJvb3QuRmFzdGJvb3RNb2RlKCkgYXMgZmJtOgotICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mYXN0Ym9vdCwgZmJtKQotICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICBkZWYgdGVzdEZhc3Rib290TW9kZV9leGNlcHRpb25JbkVuYWJsZUZhc3Rib290KHNlbGYpOgotICAgIHNlbGYuZmFzdGJvb3QuRW5hYmxlRmFzdGJvb3RNb2RlID0gbW9jay5Nb2NrKCkKLSAgICBzZWxmLmZhc3Rib290LkVuYWJsZUZhc3Rib290TW9kZS5zaWRlX2VmZmVjdCA9IE5vdEltcGxlbWVudGVkRXJyb3IKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgotICAgICAgd2l0aCBzZWxmLmZhc3Rib290LkZhc3Rib290TW9kZSgpOgotICAgICAgICBwYXNzCi0KLQotY2xhc3MgRmFzdGJvb3RVdGlsc1ZlcmlmeUJvYXJkKEZhc3Rib290VXRpbHNUZXN0KToKLQotICBkZWYgdGVzdFZlcmlmeUJvYXJkX2JvdGhWYWxpZChzZWxmKToKLSAgICBtb2NrX2ZpbGUgPSBpby5TdHJpbmdJTyh1J3JlcXVpcmUgYm9hcmQ9JXNcbicgJSBfQk9BUkQpCi0gICAgd2l0aCBtb2NrLnBhdGNoKCdfX2J1aWx0aW5fXy5vcGVuJywgcmV0dXJuX3ZhbHVlPW1vY2tfZmlsZSwgY3JlYXRlPVRydWUpOgotICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5saXN0ZGlyJywgcmV0dXJuX3ZhbHVlPV9WQUxJRF9GSUxFUyk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZhc3Rib290Ll9WZXJpZnlCb2FyZCgndGVzdCcpKQotCi0gIGRlZiB0ZXN0VmVyaWZ5Qm9hcmRfQm90aE5vdFZhbGlkKHNlbGYpOgotICAgIG1vY2tfZmlsZSA9IGlvLlN0cmluZ0lPKHUnYWJjJykKLSAgICB3aXRoIG1vY2sucGF0Y2goJ19fYnVpbHRpbl9fLm9wZW4nLCByZXR1cm5fdmFsdWU9bW9ja19maWxlLCBjcmVhdGU9VHJ1ZSk6Ci0gICAgICB3aXRoIG1vY2sucGF0Y2goJ29zLmxpc3RkaXInLCByZXR1cm5fdmFsdWU9X0lOVkFMSURfRklMRVMpOgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5mYXN0Ym9vdC5fVmVyaWZ5Qm9hcmQoJ3Rlc3QnKSkpCi0KLSAgZGVmIHRlc3RWZXJpZnlCb2FyZF9GaWxlTm90Rm91bmRaaXBWYWxpZChzZWxmKToKLSAgICB3aXRoIG1vY2sucGF0Y2goJ29zLmxpc3RkaXInLCByZXR1cm5fdmFsdWU9W19CT0FSRCArICcuemlwJ10pOgotICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmFzdGJvb3QuX1ZlcmlmeUJvYXJkKCd0ZXN0JykpCi0KLSAgZGVmIHRlc3RWZXJpZnlCb2FyZF9aaXBOb3RGb3VuZEZpbGVWYWxpZChzZWxmKToKLSAgICBtb2NrX2ZpbGUgPSBpby5TdHJpbmdJTyh1J3JlcXVpcmUgYm9hcmQ9JXNcbicgJSBfQk9BUkQpCi0gICAgd2l0aCBtb2NrLnBhdGNoKCdfX2J1aWx0aW5fXy5vcGVuJywgcmV0dXJuX3ZhbHVlPW1vY2tfZmlsZSwgY3JlYXRlPVRydWUpOgotICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5saXN0ZGlyJywgcmV0dXJuX3ZhbHVlPVsnYW5kcm9pZC1pbmZvLnR4dCddKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmFzdGJvb3QuX1ZlcmlmeUJvYXJkKCd0ZXN0JykpCi0KLSAgZGVmIHRlc3RWZXJpZnlCb2FyZF96aXBOb3RWYWxpZEZpbGVJcyhzZWxmKToKLSAgICBtb2NrX2ZpbGUgPSBpby5TdHJpbmdJTyh1J3JlcXVpcmUgYm9hcmQ9JXNcbicgJSBfQk9BUkQpCi0gICAgd2l0aCBtb2NrLnBhdGNoKCdfX2J1aWx0aW5fXy5vcGVuJywgcmV0dXJuX3ZhbHVlPW1vY2tfZmlsZSwgY3JlYXRlPVRydWUpOgotICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5saXN0ZGlyJywgcmV0dXJuX3ZhbHVlPV9JTlZBTElEX0ZJTEVTKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmFzdGJvb3QuX1ZlcmlmeUJvYXJkKCd0ZXN0JykpCi0KLSAgZGVmIHRlc3RWZXJpZnlCb2FyZF9maWxlTm90VmFsaWRaaXBJcyhzZWxmKToKLSAgICBtb2NrX2ZpbGUgPSBpby5TdHJpbmdJTyh1J3JlcXVpcmUgYm9hcmQ9V3JvbmdCb2FyZCcpCi0gICAgd2l0aCBtb2NrLnBhdGNoKCdfX2J1aWx0aW5fXy5vcGVuJywgcmV0dXJuX3ZhbHVlPW1vY2tfZmlsZSwgY3JlYXRlPVRydWUpOgotICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5saXN0ZGlyJywgcmV0dXJuX3ZhbHVlPV9WQUxJRF9GSUxFUyk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5mYXN0Ym9vdC5fVmVyaWZ5Qm9hcmQoJ3Rlc3QnKSkKLQotICBkZWYgdGVzdFZlcmlmeUJvYXJkX25vQm9hcmRJbkZpbGVWYWxpZFppcChzZWxmKToKLSAgICBtb2NrX2ZpbGUgPSBpby5TdHJpbmdJTyh1J1JlZ2V4IHdvbnQgbWF0Y2gnKQotICAgIHdpdGggbW9jay5wYXRjaCgnX19idWlsdGluX18ub3BlbicsIHJldHVybl92YWx1ZT1tb2NrX2ZpbGUsIGNyZWF0ZT1UcnVlKToKLSAgICAgIHdpdGggbW9jay5wYXRjaCgnb3MubGlzdGRpcicsIHJldHVybl92YWx1ZT1fVkFMSURfRklMRVMpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5mYXN0Ym9vdC5fVmVyaWZ5Qm9hcmQoJ3Rlc3QnKSkKLQotICBkZWYgdGVzdFZlcmlmeUJvYXJkX25vQm9hcmRJbkZpbGVJbnZhbGlkWmlwKHNlbGYpOgotICAgIG1vY2tfZmlsZSA9IGlvLlN0cmluZ0lPKHUnUmVnZXggd29udCBtYXRjaCcpCi0gICAgd2l0aCBtb2NrLnBhdGNoKCdfX2J1aWx0aW5fXy5vcGVuJywgcmV0dXJuX3ZhbHVlPW1vY2tfZmlsZSwgY3JlYXRlPVRydWUpOgotICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5saXN0ZGlyJywgcmV0dXJuX3ZhbHVlPV9JTlZBTElEX0ZJTEVTKToKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZhc3Rib290Ll9WZXJpZnlCb2FyZCgndGVzdCcpKQotCi0KLWNsYXNzIEZhc3Rib290VXRpbHNGaW5kQW5kVmVyaWZ5UGFydGl0aW9uc0FuZEltYWdlcyhGYXN0Ym9vdFV0aWxzVGVzdCk6Ci0KLSAgZGVmIHRlc3RGaW5kQW5kVmVyaWZ5UGFydGl0aW9uc0FuZEltYWdlc192YWxpZE5vVmVuZG9yKHNlbGYpOgotICAgIFBBUlRJVElPTlMgPSBbCi0gICAgICAgICdib290bG9hZGVyJywgJ3JhZGlvJywgJ2Jvb3QnLCAncmVjb3ZlcnknLCAnc3lzdGVtJywgJ3VzZXJkYXRhJywKLSAgICAgICAgJ2NhY2hlJywgJ3ZlbmRvcicKLSAgICBdCi0gICAgZmlsZXMgPSBbCi0gICAgICAgICdib290bG9hZGVyLXRlc3QtLmltZycsCi0gICAgICAgICdyYWRpbzEyMy5pbWcnLAotICAgICAgICAnYm9vdC5pbWcnLAotICAgICAgICAncmVjb3ZlcnkuaW1nJywKLSAgICAgICAgJ3N5c3RlbS5pbWcnLAotICAgICAgICAndXNlcmRhdGEuaW1nJywKLSAgICAgICAgJ2NhY2hlLmltZycKLSAgICBdCi0gICAgaW1nX2NoZWNrID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoWwotICAgICAgKCdib290bG9hZGVyJywgJ3Rlc3QvYm9vdGxvYWRlci10ZXN0LS5pbWcnKSwKLSAgICAgICgncmFkaW8nLCAndGVzdC9yYWRpbzEyMy5pbWcnKSwKLSAgICAgICgnYm9vdCcsICd0ZXN0L2Jvb3QuaW1nJyksCi0gICAgICAoJ3JlY292ZXJ5JywgJ3Rlc3QvcmVjb3ZlcnkuaW1nJyksCi0gICAgICAoJ3N5c3RlbScsICd0ZXN0L3N5c3RlbS5pbWcnKSwKLSAgICAgICgndXNlcmRhdGEnLCAndGVzdC91c2VyZGF0YS5pbWcnKSwKLSAgICAgICgnY2FjaGUnLCAndGVzdC9jYWNoZS5pbWcnKSwKLSAgICBdKQotICAgIHBhcnRzX2NoZWNrID0gWwotICAgICAgICAnYm9vdGxvYWRlcicsICdyYWRpbycsICdib290JywgJ3JlY292ZXJ5JywgJ3N5c3RlbScsICd1c2VyZGF0YScsCi0gICAgICAgICdjYWNoZScKLSAgICBdCi0gICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5saXN0ZGlyJywgcmV0dXJuX3ZhbHVlPWZpbGVzKToKLSAgICAgIGltZ3MgPSBmYXN0Ym9vdF91dGlscy5fRmluZEFuZFZlcmlmeVBhcnRpdGlvbnNBbmRJbWFnZXMoCi0gICAgICAgICAgUEFSVElUSU9OUywgJ3Rlc3QnKQotICAgICAgcGFydHMgPSBpbWdzLmtleXMoKQotICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoaW1ncywgaW1nX2NoZWNrKQotICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwocGFydHMsIHBhcnRzX2NoZWNrKQotCi0gIGRlZiB0ZXN0RmluZEFuZFZlcmlmeVBhcnRpdGlvbnNBbmRJbWFnZXNfdmFsaWRWZW5kb3Ioc2VsZik6Ci0gICAgUEFSVElUSU9OUyA9IFsKLSAgICAgICAgJ2Jvb3Rsb2FkZXInLCAncmFkaW8nLCAnYm9vdCcsICdyZWNvdmVyeScsICdzeXN0ZW0nLCAndXNlcmRhdGEnLAotICAgICAgICAnY2FjaGUnLCAndmVuZG9yJwotICAgIF0KLSAgICBmaWxlcyA9IFsKLSAgICAgICAgJ2Jvb3Rsb2FkZXItdGVzdC0uaW1nJywKLSAgICAgICAgJ3JhZGlvMTIzLmltZycsCi0gICAgICAgICdib290LmltZycsCi0gICAgICAgICdyZWNvdmVyeS5pbWcnLAotICAgICAgICAnc3lzdGVtLmltZycsCi0gICAgICAgICd1c2VyZGF0YS5pbWcnLAotICAgICAgICAnY2FjaGUuaW1nJywKLSAgICAgICAgJ3ZlbmRvci5pbWcnCi0gICAgXQotICAgIGltZ19jaGVjayA9IHsKLSAgICAgICdib290bG9hZGVyJzogJ3Rlc3QvYm9vdGxvYWRlci10ZXN0LS5pbWcnLAotICAgICAgJ3JhZGlvJzogJ3Rlc3QvcmFkaW8xMjMuaW1nJywKLSAgICAgICdib290JzogJ3Rlc3QvYm9vdC5pbWcnLAotICAgICAgJ3JlY292ZXJ5JzogJ3Rlc3QvcmVjb3ZlcnkuaW1nJywKLSAgICAgICdzeXN0ZW0nOiAndGVzdC9zeXN0ZW0uaW1nJywKLSAgICAgICd1c2VyZGF0YSc6ICd0ZXN0L3VzZXJkYXRhLmltZycsCi0gICAgICAnY2FjaGUnOiAndGVzdC9jYWNoZS5pbWcnLAotICAgICAgJ3ZlbmRvcic6ICd0ZXN0L3ZlbmRvci5pbWcnLAotICAgIH0KLSAgICBwYXJ0c19jaGVjayA9IFsKLSAgICAgICAgJ2Jvb3Rsb2FkZXInLCAncmFkaW8nLCAnYm9vdCcsICdyZWNvdmVyeScsICdzeXN0ZW0nLCAndXNlcmRhdGEnLAotICAgICAgICAnY2FjaGUnLCAndmVuZG9yJwotICAgIF0KLQotICAgIHdpdGggbW9jay5wYXRjaCgnb3MubGlzdGRpcicsIHJldHVybl92YWx1ZT1maWxlcyk6Ci0gICAgICBpbWdzID0gZmFzdGJvb3RfdXRpbHMuX0ZpbmRBbmRWZXJpZnlQYXJ0aXRpb25zQW5kSW1hZ2VzKAotICAgICAgICAgIFBBUlRJVElPTlMsICd0ZXN0JykKLSAgICAgIHBhcnRzID0gaW1ncy5rZXlzKCkKLSAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGltZ3MsIGltZ19jaGVjaykKLSAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKHBhcnRzLCBwYXJ0c19jaGVjaykKLQotICBkZWYgdGVzdEZpbmRBbmRWZXJpZnlQYXJ0aXRpb25zQW5kSW1hZ2VzX2JhZFBhcnRpdGlvbihzZWxmKToKLSAgICB3aXRoIG1vY2sucGF0Y2goJ29zLmxpc3RkaXInLCByZXR1cm5fdmFsdWU9Wyd0ZXN0J10pOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICAgIGZhc3Rib290X3V0aWxzLl9GaW5kQW5kVmVyaWZ5UGFydGl0aW9uc0FuZEltYWdlcyhbJ3Rlc3QnXSwgJ3Rlc3QnKQotCi0gIGRlZiB0ZXN0RmluZEFuZFZlcmlmeVBhcnRpdGlvbnNBbmRJbWFnZXNfbm9GaWxlKHNlbGYpOgotICAgIHdpdGggbW9jay5wYXRjaCgnb3MubGlzdGRpcicsIHJldHVybl92YWx1ZT1bJ3Rlc3QnXSk6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuRmFzdGJvb3RDb21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgICBmYXN0Ym9vdF91dGlscy5fRmluZEFuZFZlcmlmeVBhcnRpdGlvbnNBbmRJbWFnZXMoWydjYWNoZSddLCAndGVzdCcpCi0KLQotY2xhc3MgRmFzdGJvb3RVdGlsc0ZsYXNoRGV2aWNlKEZhc3Rib290VXRpbHNUZXN0KToKLQotICBkZWYgdGVzdEZsYXNoRGV2aWNlX3dpcGUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICBzZWxmLmNhbGwuZmFzdGJvb3QuRW5hYmxlRmFzdGJvb3RNb2RlKCksCi0gICAgICAgIHNlbGYuY2FsbC5mYXN0Ym9vdC5mYXN0Ym9vdC5TZXRPZW1PZmZNb2RlQ2hhcmdlKEZhbHNlKSwKLSAgICAgICAgc2VsZi5jYWxsLmZhc3Rib290Ll9GbGFzaFBhcnRpdGlvbnMobW9jay5BTlksICd0ZXN0Jywgd2lwZT1UcnVlKSwKLSAgICAgICAgc2VsZi5jYWxsLmZhc3Rib290LmZhc3Rib290LlNldE9lbU9mZk1vZGVDaGFyZ2UoVHJ1ZSksCi0gICAgICAgIHNlbGYuY2FsbC5mYXN0Ym9vdC5SZWJvb3Qod2FpdF9mb3JfcmVib290PUZhbHNlKSk6Ci0gICAgICBzZWxmLmZhc3Rib290LkZsYXNoRGV2aWNlKCd0ZXN0Jywgd2lwZT1UcnVlKQotCi0gIGRlZiB0ZXN0Rmxhc2hEZXZpY2Vfbm9XaXBlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgc2VsZi5jYWxsLmZhc3Rib290LkVuYWJsZUZhc3Rib290TW9kZSgpLAotICAgICAgICBzZWxmLmNhbGwuZmFzdGJvb3QuZmFzdGJvb3QuU2V0T2VtT2ZmTW9kZUNoYXJnZShGYWxzZSksCi0gICAgICAgIHNlbGYuY2FsbC5mYXN0Ym9vdC5fRmxhc2hQYXJ0aXRpb25zKG1vY2suQU5ZLCAndGVzdCcsIHdpcGU9RmFsc2UpLAotICAgICAgICBzZWxmLmNhbGwuZmFzdGJvb3QuZmFzdGJvb3QuU2V0T2VtT2ZmTW9kZUNoYXJnZShUcnVlKSwKLSAgICAgICAgc2VsZi5jYWxsLmZhc3Rib290LlJlYm9vdCh3YWl0X2Zvcl9yZWJvb3Q9VHJ1ZSkpOgotICAgICAgc2VsZi5mYXN0Ym9vdC5GbGFzaERldmljZSgndGVzdCcsIHdpcGU9RmFsc2UpCi0KLSAgZGVmIHRlc3RGbGFzaERldmljZV9wYXJ0aXRpb25zKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgc2VsZi5jYWxsLmZhc3Rib290LkVuYWJsZUZhc3Rib290TW9kZSgpLAotICAgICAgICBzZWxmLmNhbGwuZmFzdGJvb3QuZmFzdGJvb3QuU2V0T2VtT2ZmTW9kZUNoYXJnZShGYWxzZSksCi0gICAgICAgIHNlbGYuY2FsbC5mYXN0Ym9vdC5fRmxhc2hQYXJ0aXRpb25zKFsnYm9vdCddLCAndGVzdCcsIHdpcGU9RmFsc2UpLAotICAgICAgICBzZWxmLmNhbGwuZmFzdGJvb3QuZmFzdGJvb3QuU2V0T2VtT2ZmTW9kZUNoYXJnZShUcnVlKSwKLSAgICAgICAgc2VsZi5jYWxsLmZhc3Rib290LlJlYm9vdCh3YWl0X2Zvcl9yZWJvb3Q9VHJ1ZSkpOgotICAgICAgc2VsZi5mYXN0Ym9vdC5GbGFzaERldmljZSgndGVzdCcsIHBhcnRpdGlvbnM9Wydib290J10sIHdpcGU9RmFsc2UpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgbG9nZ2luZy5nZXRMb2dnZXIoKS5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9mbGFnX2NoYW5nZXIucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2ZsYWdfY2hhbmdlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA1NWUyMy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2ZsYWdfY2hhbmdlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDMxMSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBwb3NpeHBhdGgKLWltcG9ydCByZQotCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCB2ZXJzaW9uX2NvZGVzCi0KLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotX0NNRExJTkVfRElSID0gJy9kYXRhL2xvY2FsL3RtcCcKLV9DTURMSU5FX0RJUl9MRUdBQ1kgPSAnL2RhdGEvbG9jYWwnCi1fUkVfTkVFRFNfUVVPVElORyA9IHJlLmNvbXBpbGUocidbXlx3LV0nKSAgIyBOb3QgaW46IGFscGhhbnVtZXJpYyBvciBoeXBoZW5zLgotX1FVT1RFUyA9ICciXCcnICAjIEVpdGhlciBhIHNpbmdsZSBvciBhIGRvdWJsZSBxdW90ZS4KLV9FU0NBUEUgPSAnXFwnICAjIEEgYmFja3NsYXNoLgotCi0KLUBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi1kZWYgQ3VzdG9tQ29tbWFuZExpbmVGbGFncyhkZXZpY2UsIGNtZGxpbmVfbmFtZSwgZmxhZ3MpOgotICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gY2hhbmdlIENocm9tZSdzIGNvbW1hbmQgbGluZSB0ZW1wb3JhcmlseS4KLQotICBFeGFtcGxlOgotCi0gICAgICB3aXRoIGZsYWdfY2hhbmdlci5UZW1wb3JhcnlDb21tYW5kTGluZUZsYWdzKGRldmljZSwgbmFtZSwgZmxhZ3MpOgotICAgICAgICAjIExhdW5jaGluZyBDaHJvbWUgd2lsbCB1c2UgdGhlIHByb3ZpZGVkIGZsYWdzLgotCi0gICAgICAjIFByZXZpb3VzIHNldCBvZiBmbGFncyBvbiB0aGUgZGV2aWNlIGlzIG5vdyByZXN0b3JlZC4KLQotICBBcmdzOgotICAgIGRldmljZTogQSBEZXZpY2VVdGlscyBpbnN0YW5jZS4KLSAgICBjbWRsaW5lX25hbWU6IE5hbWUgb2YgdGhlIGNvbW1hbmQgbGluZSBmaWxlIHdoZXJlIHRvIHN0b3JlIGZsYWdzLgotICAgIGZsYWdzOiBBIHNlcXVlbmNlIG9mIGNvbW1hbmQgbGluZSBmbGFncyB0byBzZXQuCi0gICIiIgotICBjaGFuZ2VyID0gRmxhZ0NoYW5nZXIoZGV2aWNlLCBjbWRsaW5lX25hbWUpCi0gIHRyeToKLSAgICBjaGFuZ2VyLlJlcGxhY2VGbGFncyhmbGFncykKLSAgICB5aWVsZAotICBmaW5hbGx5OgotICAgIGNoYW5nZXIuUmVzdG9yZSgpCi0KLQotY2xhc3MgRmxhZ0NoYW5nZXIob2JqZWN0KToKLSAgIiIiQ2hhbmdlcyB0aGUgZmxhZ3MgQ2hyb21lIHJ1bnMgd2l0aC4KLQotICAgIEZsYWdzIGNhbiBiZSB0ZW1wb3JhcmlseSBzZXQgZm9yIGEgcGFydGljdWxhciBzZXQgb2YgdW5pdCB0ZXN0cy4gIFRoZXNlCi0gICAgdGVzdHMgc2hvdWxkIGNhbGwgUmVzdG9yZSgpIHRvIHJldmVydCB0aGUgZmxhZ3MgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUKLSAgICBvbmNlIHRoZSB0ZXN0cyBoYXZlIGNvbXBsZXRlZC4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGRldmljZSwgY21kbGluZV9maWxlKToKLSAgICAiIiJJbml0aWFsaXplcyB0aGUgRmxhZ0NoYW5nZXIgYW5kIHJlY29yZHMgdGhlIG9yaWdpbmFsIGFyZ3VtZW50cy4KLQotICAgIEFyZ3M6Ci0gICAgICBkZXZpY2U6IEEgRGV2aWNlVXRpbHMgaW5zdGFuY2UuCi0gICAgICBjbWRsaW5lX2ZpbGU6IE5hbWUgb2YgdGhlIGNvbW1hbmQgbGluZSBmaWxlIHdoZXJlIHRvIHN0b3JlIGZsYWdzLgotICAgICIiIgotICAgIHNlbGYuX2RldmljZSA9IGRldmljZQotICAgIHNlbGYuX3Nob3VsZF9yZXNldF9lbmZvcmNlID0gRmFsc2UKLQotICAgIGlmIHBvc2l4cGF0aC5zZXAgaW4gY21kbGluZV9maWxlOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgICAnY21kbGluZV9maWxlIHNob3VsZCBiZSBhIGZpbGUgbmFtZSBvbmx5LCBkbyBub3QgaW5jbHVkZSBwYXRoJwotICAgICAgICAgICcgc2VwYXJhdG9ycyBpbjogJXMnICUgY21kbGluZV9maWxlKQotICAgIHNlbGYuX2NtZGxpbmVfcGF0aCA9IHBvc2l4cGF0aC5qb2luKF9DTURMSU5FX0RJUiwgY21kbGluZV9maWxlKQotCi0gICAgY21kbGluZV9wYXRoX2xlZ2FjeSA9IHBvc2l4cGF0aC5qb2luKF9DTURMSU5FX0RJUl9MRUdBQ1ksIGNtZGxpbmVfZmlsZSkKLSAgICBpZiBzZWxmLl9kZXZpY2UuUGF0aEV4aXN0cyhjbWRsaW5lX3BhdGhfbGVnYWN5KToKLSAgICAgIGxvZ2dlci53YXJuaW5nKAotICAgICAgICAgICAgJ1JlbW92aW5nIGxlZ2FjeSBjb21tYW5kIGxpbmUgZmlsZSAlci4nLCBjbWRsaW5lX3BhdGhfbGVnYWN5KQotICAgICAgc2VsZi5fZGV2aWNlLlJlbW92ZVBhdGgoY21kbGluZV9wYXRoX2xlZ2FjeSwgYXNfcm9vdD1UcnVlKQotCi0gICAgc2VsZi5fc3RhdGVfc3RhY2sgPSBbTm9uZV0gICMgQWN0dWFsIHN0YXRlIGlzIHNldCBieSBHZXRDdXJyZW50RmxhZ3MoKS4KLSAgICBzZWxmLkdldEN1cnJlbnRGbGFncygpCi0KLSAgZGVmIEdldEN1cnJlbnRGbGFncyhzZWxmKToKLSAgICAiIiJSZWFkIHRoZSBjdXJyZW50IGZsYWdzIGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlIGRldmljZS4KLQotICAgIEFsc28gdXBkYXRlcyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGZsYWdfY2hhbmdlci4KLQotICAgIFJldHVybnM6Ci0gICAgICBBIGxpc3Qgb2YgZmxhZ3MuCi0gICAgIiIiCi0gICAgaWYgc2VsZi5fZGV2aWNlLlBhdGhFeGlzdHMoc2VsZi5fY21kbGluZV9wYXRoKToKLSAgICAgIGNvbW1hbmRfbGluZSA9IHNlbGYuX2RldmljZS5SZWFkRmlsZShzZWxmLl9jbWRsaW5lX3BhdGgpLnN0cmlwKCkKLSAgICBlbHNlOgotICAgICAgY29tbWFuZF9saW5lID0gJycKLSAgICBmbGFncyA9IF9QYXJzZUZsYWdzKGNvbW1hbmRfbGluZSkKLQotICAgICMgU3RvcmUgdGhlIGZsYWdzIGFzIGEgc2V0IHRvIGZhY2lsaXRhdGUgYWRkaW5nIGFuZCByZW1vdmluZyBmbGFncy4KLSAgICBzZWxmLl9zdGF0ZV9zdGFja1stMV0gPSBzZXQoZmxhZ3MpCi0gICAgcmV0dXJuIGZsYWdzCi0KLSAgZGVmIFJlcGxhY2VGbGFncyhzZWxmLCBmbGFncyk6Ci0gICAgIiIiUmVwbGFjZXMgdGhlIGZsYWdzIGluIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgb25lcyBwcm92aWRlZC4KLSAgICAgICBTYXZlcyB0aGUgY3VycmVudCBmbGFncyBzdGF0ZSBvbiB0aGUgc3RhY2ssIHNvIGEgY2FsbCB0byBSZXN0b3JlIHdpbGwKLSAgICAgICBjaGFuZ2UgdGhlIHN0YXRlIGJhY2sgdG8gdGhlIG9uZSBwcmVjZWVkaW5nIHRoZSBjYWxsIHRvIFJlcGxhY2VGbGFncy4KLQotICAgIEFyZ3M6Ci0gICAgICBmbGFnczogQSBzZXF1ZW5jZSBvZiBjb21tYW5kIGxpbmUgZmxhZ3MgdG8gc2V0LCBlZy4gWyctLXNpbmdsZS1wcm9jZXNzJ10uCi0gICAgICAgICAgICAgTm90ZTogdGhpcyBzaG91bGQgaW5jbHVkZSBmbGFncyBvbmx5LCBub3QgdGhlIG5hbWUgb2YgYSBjb21tYW5kCi0gICAgICAgICAgICAgdG8gcnVuIChpZS4gdGhlcmUgaXMgbm8gbmVlZCB0byBzdGFydCB0aGUgc2VxdWVuY2Ugd2l0aCAnY2hyb21lJykuCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBsaXN0IHdpdGggdGhlIGZsYWdzIG5vdyBzdG9yZWQgb24gdGhlIGRldmljZS4KLSAgICAiIiIKLSAgICBuZXdfZmxhZ3MgPSBzZXQoZmxhZ3MpCi0gICAgc2VsZi5fc3RhdGVfc3RhY2suYXBwZW5kKG5ld19mbGFncykKLSAgICBzZWxmLl9TZXRQZXJtaXNzaXZlKCkKLSAgICByZXR1cm4gc2VsZi5fVXBkYXRlQ29tbWFuZExpbmVGaWxlKCkKLQotICBkZWYgQWRkRmxhZ3Moc2VsZiwgZmxhZ3MpOgotICAgICIiIkFwcGVuZHMgZmxhZ3MgdG8gdGhlIGNvbW1hbmQgbGluZSBpZiB0aGV5IGFyZW4ndCBhbHJlYWR5IHRoZXJlLgotICAgICAgIFNhdmVzIHRoZSBjdXJyZW50IGZsYWdzIHN0YXRlIG9uIHRoZSBzdGFjaywgc28gYSBjYWxsIHRvIFJlc3RvcmUgd2lsbAotICAgICAgIGNoYW5nZSB0aGUgc3RhdGUgYmFjayB0byB0aGUgb25lIHByZWNlZWRpbmcgdGhlIGNhbGwgdG8gQWRkRmxhZ3MuCi0KLSAgICBBcmdzOgotICAgICAgZmxhZ3M6IEEgc2VxdWVuY2Ugb2YgZmxhZ3MgdG8gYWRkIG9uLCBlZy4gWyctLXNpbmdsZS1wcm9jZXNzJ10uCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBsaXN0IHdpdGggdGhlIGZsYWdzIG5vdyBzdG9yZWQgb24gdGhlIGRldmljZS4KLSAgICAiIiIKLSAgICByZXR1cm4gc2VsZi5QdXNoRmxhZ3MoYWRkPWZsYWdzKQotCi0gIGRlZiBSZW1vdmVGbGFncyhzZWxmLCBmbGFncyk6Ci0gICAgIiIiUmVtb3ZlcyBmbGFncyBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGlmIHRoZXkgZXhpc3QuCi0gICAgICAgU2F2ZXMgdGhlIGN1cnJlbnQgZmxhZ3Mgc3RhdGUgb24gdGhlIHN0YWNrLCBzbyBhIGNhbGwgdG8gUmVzdG9yZSB3aWxsCi0gICAgICAgY2hhbmdlIHRoZSBzdGF0ZSBiYWNrIHRvIHRoZSBvbmUgcHJlY2VlZGluZyB0aGUgY2FsbCB0byBSZW1vdmVGbGFncy4KLQotICAgICAgIE5vdGUgdGhhdCBjYWxsaW5nIFJlbW92ZUZsYWdzIGFmdGVyIEFkZEZsYWdzIHdpbGwgcmVzdWx0IGluIGhhdmluZwotICAgICAgIHR3byBuZXN0ZWQgc3RhdGVzLgotCi0gICAgQXJnczoKLSAgICAgIGZsYWdzOiBBIHNlcXVlbmNlIG9mIGZsYWdzIHRvIHJlbW92ZSwgZWcuIFsnLS1zaW5nbGUtcHJvY2VzcyddLiAgTm90ZQotICAgICAgICAgICAgIHRoYXQgd2UgZXhwZWN0IGEgY29tcGxldGUgbWF0Y2ggd2hlbiByZW1vdmluZyBmbGFnczsgaWYgeW91IHdhbnQKLSAgICAgICAgICAgICB0byByZW1vdmUgYSBzd2l0Y2ggd2l0aCBhIHZhbHVlLCB5b3UgbXVzdCB1c2UgdGhlIGV4YWN0IHN0cmluZwotICAgICAgICAgICAgIHVzZWQgdG8gYWRkIGl0IGluIHRoZSBmaXJzdCBwbGFjZS4KLQotICAgIFJldHVybnM6Ci0gICAgICBBIGxpc3Qgd2l0aCB0aGUgZmxhZ3Mgbm93IHN0b3JlZCBvbiB0aGUgZGV2aWNlLgotICAgICIiIgotICAgIHJldHVybiBzZWxmLlB1c2hGbGFncyhyZW1vdmU9ZmxhZ3MpCi0KLSAgZGVmIFB1c2hGbGFncyhzZWxmLCBhZGQ9Tm9uZSwgcmVtb3ZlPU5vbmUpOgotICAgICIiIkFwcGVuZHMgYW5kIHJlbW92ZXMgZmxhZ3MgdG8vZnJvbSB0aGUgY29tbWFuZCBsaW5lIGlmIHRoZXkgYXJlbid0IGFscmVhZHkKLSAgICAgICB0aGVyZS4gU2F2ZXMgdGhlIGN1cnJlbnQgZmxhZ3Mgc3RhdGUgb24gdGhlIHN0YWNrLCBzbyBhIGNhbGwgdG8gUmVzdG9yZQotICAgICAgIHdpbGwgY2hhbmdlIHRoZSBzdGF0ZSBiYWNrIHRvIHRoZSBvbmUgcHJlY2VlZGluZyB0aGUgY2FsbCB0byBQdXNoRmxhZ3MuCi0KLSAgICBBcmdzOgotICAgICAgYWRkOiBBIGxpc3Qgb2YgZmxhZ3MgdG8gYWRkIG9uLCBlZy4gWyctLXNpbmdsZS1wcm9jZXNzJ10uCi0gICAgICByZW1vdmU6IEEgbGlzdCBvZiBmbGFncyB0byByZW1vdmUsIGVnLiBbJy0tc2luZ2xlLXByb2Nlc3MnXS4gIE5vdGUgdGhhdCB3ZQotICAgICAgICAgICAgICBleHBlY3QgYSBjb21wbGV0ZSBtYXRjaCB3aGVuIHJlbW92aW5nIGZsYWdzOyBpZiB5b3Ugd2FudCB0byByZW1vdmUKLSAgICAgICAgICAgICAgYSBzd2l0Y2ggd2l0aCBhIHZhbHVlLCB5b3UgbXVzdCB1c2UgdGhlIGV4YWN0IHN0cmluZyB1c2VkIHRvIGFkZAotICAgICAgICAgICAgICBpdCBpbiB0aGUgZmlyc3QgcGxhY2UuCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBsaXN0IHdpdGggdGhlIGZsYWdzIG5vdyBzdG9yZWQgb24gdGhlIGRldmljZS4KLSAgICAiIiIKLSAgICBuZXdfZmxhZ3MgPSBzZWxmLl9zdGF0ZV9zdGFja1stMV0uY29weSgpCi0gICAgaWYgYWRkOgotICAgICAgbmV3X2ZsYWdzLnVwZGF0ZShhZGQpCi0gICAgaWYgcmVtb3ZlOgotICAgICAgbmV3X2ZsYWdzLmRpZmZlcmVuY2VfdXBkYXRlKHJlbW92ZSkKLSAgICByZXR1cm4gc2VsZi5SZXBsYWNlRmxhZ3MobmV3X2ZsYWdzKQotCi0gIGRlZiBfU2V0UGVybWlzc2l2ZShzZWxmKToKLSAgICAiIiJTZXQgU0VMaW51eCB0byBwZXJtaXNzaXZlLCBpZiBuZWVkZWQuCi0KLSAgICBPbiBBbmRyb2lkIE4gYW5kIGFib3ZlIHRoaXMgaXMgbmVlZGVkIGluIG9yZGVyIHRvIGFsbG93IENocm9tZSB0byByZWFkIHRoZQotICAgIGNvbW1hbmQgbGluZSBmaWxlLgotCi0gICAgVE9ETyhjcmJ1Zy5jb20vNjk5MDgyKTogUmVtb3ZlIHdoZW4gYSBiZXR0ZXIgc29sdXRpb24gZXhpc3RzLgotICAgICIiIgotICAgIGlmIChzZWxmLl9kZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGsgPj0gdmVyc2lvbl9jb2Rlcy5OT1VHQVQgYW5kCi0gICAgICAgIHNlbGYuX2RldmljZS5HZXRFbmZvcmNlKCkpOgotICAgICAgc2VsZi5fZGV2aWNlLlNldEVuZm9yY2UoZW5hYmxlZD1GYWxzZSkKLSAgICAgIHNlbGYuX3Nob3VsZF9yZXNldF9lbmZvcmNlID0gVHJ1ZQotCi0gIGRlZiBfUmVzZXRFbmZvcmNlKHNlbGYpOgotICAgICIiIlJlc3RvcmUgU0VMaW51eCBwb2xpY3kgaWYgaXQgaGFkIGJlZW4gcHJldmlvdXNseSBtYWRlIHBlcm1pc3NpdmUuIiIiCi0gICAgaWYgc2VsZi5fc2hvdWxkX3Jlc2V0X2VuZm9yY2U6Ci0gICAgICBzZWxmLl9kZXZpY2UuU2V0RW5mb3JjZShlbmFibGVkPVRydWUpCi0gICAgICBzZWxmLl9zaG91bGRfcmVzZXRfZW5mb3JjZSA9IEZhbHNlCi0KLSAgZGVmIFJlc3RvcmUoc2VsZik6Ci0gICAgIiIiUmVzdG9yZXMgdGhlIGZsYWdzIHRvIHRoZWlyIHN0YXRlIHByaW9yIHRvIHRoZSBsYXN0IEFkZEZsYWdzIG9yCi0gICAgICAgUmVtb3ZlRmxhZ3MgY2FsbC4KLQotICAgIFJldHVybnM6Ci0gICAgICBBIGxpc3Qgd2l0aCB0aGUgZmxhZ3Mgbm93IHN0b3JlZCBvbiB0aGUgZGV2aWNlLgotICAgICIiIgotICAgICMgVGhlIGluaXRpYWwgc3RhdGUgbXVzdCBhbHdheXMgcmVtYWluIG9uIHRoZSBzdGFjay4KLSAgICBhc3NlcnQgbGVuKHNlbGYuX3N0YXRlX3N0YWNrKSA+IDEsICgKLSAgICAgICJNaXNtYXRjaCBiZXR3ZWVuIGNhbGxzIHRvIEFkZC9SZW1vdmVGbGFncyBhbmQgUmVzdG9yZSIpCi0gICAgc2VsZi5fc3RhdGVfc3RhY2sucG9wKCkKLSAgICBpZiBsZW4oc2VsZi5fc3RhdGVfc3RhY2spID09IDE6Ci0gICAgICBzZWxmLl9SZXNldEVuZm9yY2UoKQotICAgIHJldHVybiBzZWxmLl9VcGRhdGVDb21tYW5kTGluZUZpbGUoKQotCi0gIGRlZiBfVXBkYXRlQ29tbWFuZExpbmVGaWxlKHNlbGYpOgotICAgICIiIldyaXRlcyBvdXQgdGhlIGNvbW1hbmQgbGluZSB0byB0aGUgZmlsZSwgb3IgcmVtb3ZlcyBpdCBpZiBlbXB0eS4KLQotICAgIFJldHVybnM6Ci0gICAgICBBIGxpc3Qgd2l0aCB0aGUgZmxhZ3Mgbm93IHN0b3JlZCBvbiB0aGUgZGV2aWNlLgotICAgICIiIgotICAgIGNvbW1hbmRfbGluZSA9IF9TZXJpYWxpemVGbGFncyhzZWxmLl9zdGF0ZV9zdGFja1stMV0pCi0gICAgaWYgY29tbWFuZF9saW5lIGlzIG5vdCBOb25lOgotICAgICAgc2VsZi5fZGV2aWNlLldyaXRlRmlsZShzZWxmLl9jbWRsaW5lX3BhdGgsIGNvbW1hbmRfbGluZSkKLSAgICBlbHNlOgotICAgICAgc2VsZi5fZGV2aWNlLlJlbW92ZVBhdGgoc2VsZi5fY21kbGluZV9wYXRoLCBmb3JjZT1UcnVlKQotCi0gICAgY3VycmVudF9mbGFncyA9IHNlbGYuR2V0Q3VycmVudEZsYWdzKCkKLSAgICBsb2dnZXIuaW5mbygnRmxhZ3Mgbm93IHNldCBvbiB0aGUgZGV2aWNlOiAlcycsIGN1cnJlbnRfZmxhZ3MpCi0gICAgcmV0dXJuIGN1cnJlbnRfZmxhZ3MKLQotCi1kZWYgX1BhcnNlRmxhZ3MobGluZSk6Ci0gICIiIlBhcnNlIHRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29tbWFuZCBsaW5lIGludG8gYSBsaXN0IG9mIGZsYWdzLgotCi0gIEl0J3MgYSBkaXJlY3QgcG9ydCBvZiBDb21tYW5kTGluZS5qYXZhOjp0b2tlbml6ZVF1b3RlZEFyZ3VtZW50cy4KLQotICBUaGUgZmlyc3QgdG9rZW4gaXMgYXNzdW1lZCB0byBiZSB0aGUgKHVudXNlZCkgcHJvZ3JhbSBuYW1lIGFuZCBzdHJpcHBlZCBvZmYKLSAgZnJvbSB0aGUgbGlzdCBvZiBmbGFncy4KLQotICBBcmdzOgotICAgIGxpbmU6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVudGlyZSBjb21tYW5kIGxpbmUuICBUaGUgZmlyc3QgdG9rZW4gaXMKLSAgICAgICAgICBhc3N1bWVkIHRvIGJlIHRoZSBwcm9ncmFtIG5hbWUuCi0KLSAgUmV0dXJuczoKLSAgICAgQSBsaXN0IG9mIGZsYWdzLCB3aXRoIHF1b3RpbmcgcmVtb3ZlZC4KLSAgIiIiCi0gIGZsYWdzID0gW10KLSAgY3VycmVudF9xdW90ZSA9IE5vbmUKLSAgY3VycmVudF9mbGFnID0gTm9uZQotCi0gIGZvciBjIGluIGxpbmU6Ci0gICAgIyBEZXRlY3Qgc3RhcnQgb3IgZW5kIG9mIHF1b3RlIGJsb2NrLgotICAgIGlmIChjdXJyZW50X3F1b3RlIGlzIE5vbmUgYW5kIGMgaW4gX1FVT1RFUykgb3IgYyA9PSBjdXJyZW50X3F1b3RlOgotICAgICAgaWYgY3VycmVudF9mbGFnIGlzIG5vdCBOb25lIGFuZCBjdXJyZW50X2ZsYWdbLTFdID09IF9FU0NBUEU6Ci0gICAgICAgICMgTGFzdCBjaGFyIHdhcyBhIGJhY2tzbGFzaDsgcG9wIGl0LCBhbmQgdHJlYXQgYyBhcyBhIGxpdGVyYWwuCi0gICAgICAgIGN1cnJlbnRfZmxhZyA9IGN1cnJlbnRfZmxhZ1s6LTFdICsgYwotICAgICAgZWxzZToKLSAgICAgICAgY3VycmVudF9xdW90ZSA9IGMgaWYgY3VycmVudF9xdW90ZSBpcyBOb25lIGVsc2UgTm9uZQotICAgIGVsaWYgY3VycmVudF9xdW90ZSBpcyBOb25lIGFuZCBjLmlzc3BhY2UoKToKLSAgICAgIGlmIGN1cnJlbnRfZmxhZyBpcyBub3QgTm9uZToKLSAgICAgICAgZmxhZ3MuYXBwZW5kKGN1cnJlbnRfZmxhZykKLSAgICAgICAgY3VycmVudF9mbGFnID0gTm9uZQotICAgIGVsc2U6Ci0gICAgICBpZiBjdXJyZW50X2ZsYWcgaXMgTm9uZToKLSAgICAgICAgY3VycmVudF9mbGFnID0gJycKLSAgICAgIGN1cnJlbnRfZmxhZyArPSBjCi0KLSAgaWYgY3VycmVudF9mbGFnIGlzIG5vdCBOb25lOgotICAgIGlmIGN1cnJlbnRfcXVvdGUgaXMgbm90IE5vbmU6Ci0gICAgICBsb2dnZXIud2FybmluZygnVW50ZXJtaW5hdGVkIHF1b3RlZCBhcmd1bWVudDogJyArIGN1cnJlbnRfZmxhZykKLSAgICBmbGFncy5hcHBlbmQoY3VycmVudF9mbGFnKQotCi0gICMgUmV0dXJuIGV2ZXJ5dGhpbmcgYnV0IHRoZSBwcm9ncmFtIG5hbWUuCi0gIHJldHVybiBmbGFnc1sxOl0KLQotCi1kZWYgX1NlcmlhbGl6ZUZsYWdzKGZsYWdzKToKLSAgIiIiU2VyaWFsaXplIGEgc2VxdWVuY2Ugb2YgZmxhZ3MgaW50byBhIGNvbW1hbmQgbGluZSBzdHJpbmcuCi0KLSAgQXJnczoKLSAgICBmbGFnczogQSBzZXF1ZW5jZSBvZiBzdHJpbmdzIHdpdGggaW5kaXZpZHVhbCBmbGFncy4KLQotICBSZXR1cm5zOgotICAgIEEgbGluZSB3aXRoIHRoZSBjb21tYW5kIGxpbmUgY29udGVudHMgdG8gc2F2ZTsgb3IgTm9uZSBpZiB0aGUgc2VxdWVuY2Ugb2YKLSAgICBmbGFncyBpcyBlbXB0eS4KLSAgIiIiCi0gIGlmIGZsYWdzOgotICAgICMgVGhlIGZpcnN0IGNvbW1hbmQgbGluZSBhcmd1bWVudCBkb2Vzbid0IG1hdHRlciBhcyB3ZSBhcmUgbm90IGFjdHVhbGx5Ci0gICAgIyBsYXVuY2hpbmcgdGhlIGNocm9tZSBleGVjdXRhYmxlIHVzaW5nIHRoaXMgY29tbWFuZCBsaW5lLgotICAgIGFyZ3MgPSBbJ18nXQotICAgIGFyZ3MuZXh0ZW5kKF9RdW90ZUZsYWcoZikgZm9yIGYgaW4gZmxhZ3MpCi0gICAgcmV0dXJuICcgJy5qb2luKGFyZ3MpCi0gIGVsc2U6Ci0gICAgcmV0dXJuIE5vbmUKLQotCi1kZWYgX1F1b3RlRmxhZyhmbGFnKToKLSAgIiIiVmFsaWRhdGUgYW5kIHF1b3RlIGEgc2luZ2xlIGZsYWcuCi0KLSAgQXJnczoKLSAgICBBIHN0cmluZyB3aXRoIHRoZSBmbGFnIHRvIHF1b3RlLgotCi0gIFJldHVybnM6Ci0gICAgQSBzdHJpbmcgd2l0aCB0aGUgZmxhZyBxdW90ZWQgc28gdGhhdCBpdCBjYW4gYmUgcGFyc2VkIGJ5IHRoZSBhbGdvcml0aG0KLSAgICBpbiBfUGFyc2VGbGFnczsgb3IgTm9uZSBpZiB0aGUgZmxhZyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgdmFsaWQuCi0gICIiIgotICBpZiAnPScgaW4gZmxhZzoKLSAgICBrZXksIHZhbHVlID0gZmxhZy5zcGxpdCgnPScsIDEpCi0gIGVsc2U6Ci0gICAga2V5LCB2YWx1ZSA9IGZsYWcsIE5vbmUKLQotICBpZiBub3QgZmxhZyBvciBfUkVfTkVFRFNfUVVPVElORy5zZWFyY2goa2V5KToKLSAgICAjIFByb2JhYmx5IG5vdCBhIHZhbGlkIGZsYWcsIGJ1dCBxdW90ZSB0aGUgd2hvbGUgdGhpbmcgc28gaXQgY2FuIGJlCi0gICAgIyBwYXJzZWQgYmFjayBjb3JyZWN0bHkuCi0gICAgcmV0dXJuICciJXMiJyAlIGZsYWcucmVwbGFjZSgnIicsIHInXCInKQotCi0gIGlmIHZhbHVlIGlzIE5vbmU6Ci0gICAgcmV0dXJuIGtleQotCi0gIGlmIF9SRV9ORUVEU19RVU9USU5HLnNlYXJjaCh2YWx1ZSk6Ci0gICAgdmFsdWUgPSAnIiVzIicgJSB2YWx1ZS5yZXBsYWNlKCciJywgcidcIicpCi0gIHJldHVybiAnPScuam9pbihba2V5LCB2YWx1ZV0pCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2ZsYWdfY2hhbmdlcl9kZXZpY2V0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9mbGFnX2NoYW5nZXJfZGV2aWNldGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc1NTA0Yi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2ZsYWdfY2hhbmdlcl9kZXZpY2V0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0iIiIKLVVuaXQgdGVzdHMgZm9yIHRoZSBjb250ZW50cyBvZiBmbGFnX2NoYW5nZXIucHkuCi1UaGUgdGVzdCB3aWxsIGludm9rZSByZWFsIGRldmljZXMKLSIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBwb3NpeHBhdGgKLWltcG9ydCBzeXMKLWltcG9ydCB1bml0dGVzdAotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMucGF0aC5hcHBlbmQoCi0gICAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICcuLicsICkpKQotCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV90ZXN0X2Nhc2UKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3V0aWxzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGZsYWdfY2hhbmdlcgotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgYWRiX3dyYXBwZXIKLQotCi1fQ01ETElORV9GSUxFID0gJ2R1bW15LWNvbW1hbmQtbGluZScKLQotCi1jbGFzcyBGbGFnQ2hhbmdlclRlc3QoZGV2aWNlX3Rlc3RfY2FzZS5EZXZpY2VUZXN0Q2FzZSk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHN1cGVyKEZsYWdDaGFuZ2VyVGVzdCwgc2VsZikuc2V0VXAoKQotICAgIHNlbGYuYWRiID0gYWRiX3dyYXBwZXIuQWRiV3JhcHBlcihzZWxmLnNlcmlhbCkKLSAgICBzZWxmLmFkYi5XYWl0Rm9yRGV2aWNlKCkKLSAgICBzZWxmLmRldmljZSA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscygKLSAgICAgICAgc2VsZi5hZGIsIGRlZmF1bHRfdGltZW91dD0xMCwgZGVmYXVsdF9yZXRyaWVzPTApCi0gICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwotICAgIHNlbGYuY21kbGluZV9wYXRoID0gcG9zaXhwYXRoLmpvaW4oZmxhZ19jaGFuZ2VyLl9DTURMSU5FX0RJUiwgX0NNRExJTkVfRklMRSkKLSAgICBzZWxmLmNtZGxpbmVfcGF0aF9sZWdhY3kgPSBwb3NpeHBhdGguam9pbigKLSAgICAgICAgZmxhZ19jaGFuZ2VyLl9DTURMSU5FX0RJUl9MRUdBQ1ksIF9DTURMSU5FX0ZJTEUpCi0KLSAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgIHN1cGVyKEZsYWdDaGFuZ2VyVGVzdCwgc2VsZikudGVhckRvd24oKQotICAgIHNlbGYuZGV2aWNlLlJlbW92ZVBhdGgoCi0gICAgICAgIFtzZWxmLmNtZGxpbmVfcGF0aCwgc2VsZi5jbWRsaW5lX3BhdGhfbGVnYWN5XSwgZm9yY2U9VHJ1ZSwgYXNfcm9vdD1UcnVlKQotCi0gIGRlZiB0ZXN0RmxhZ0NoYW5nZXJfcmVzdG9yZUZsYWdzKHNlbGYpOgotICAgIGlmIG5vdCBzZWxmLmRldmljZS5IYXNSb290KCk6Ci0gICAgICBzZWxmLnNraXBUZXN0KCdUZXN0IG5lZWRzIGEgcm9vdGVkIGRldmljZScpCi0KLSAgICAjIFdyaXRlIHNvbWUgY3VzdG9tIGNocm9tZSBjb21tYW5kIGxpbmUgZmxhZ3MuCi0gICAgc2VsZi5kZXZpY2UuV3JpdGVGaWxlKAotICAgICAgICBzZWxmLmNtZGxpbmVfcGF0aCwgJ2Nocm9tZSAtLXNvbWUgLS1vbGQgLS1mbGFncycpCi0KLSAgICAjIFdyaXRlIHNvbWUgbW9yZSBmbGFncyBvbiBhIGNvbW1hbmQgbGluZSBmaWxlIGluIHRoZSBsZWdhY3kgbG9jYXRpb24uCi0gICAgc2VsZi5kZXZpY2UuV3JpdGVGaWxlKAotICAgICAgICBzZWxmLmNtZGxpbmVfcGF0aF9sZWdhY3ksICdzb21lIC0tc3RyYXkgLS1mbGFncycsIGFzX3Jvb3Q9VHJ1ZSkKLSAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kZXZpY2UuUGF0aEV4aXN0cyhzZWxmLmNtZGxpbmVfcGF0aF9sZWdhY3kpKQotCi0gICAgY2hhbmdlciA9IGZsYWdfY2hhbmdlci5GbGFnQ2hhbmdlcihzZWxmLmRldmljZSwgX0NNRExJTkVfRklMRSkKLQotICAgICMgTGVnYWN5IGNvbW1hbmQgbGluZSBmaWxlIGlzIHJlbW92ZWQsIGVuc3VyaW5nIENocm9tZSBwaWNrcyB1cCB0aGUKLSAgICAjIHJpZ2h0IGZpbGUuCi0gICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmRldmljZS5QYXRoRXhpc3RzKHNlbGYuY21kbGluZV9wYXRoX2xlZ2FjeSkpCi0KLSAgICAjIFdyaXRlIHNvbWUgbmV3IGZpbGVzLCBhbmQgY2hlY2sgdGhleSBhcmUgc2V0LgotICAgIG5ld19mbGFncyA9IFsnLS1teScsICctLW5ldycsICctLWZsYWdzPXdpdGggc3BlY2lhbCB2YWx1ZSddCi0gICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKAotICAgICAgICBjaGFuZ2VyLlJlcGxhY2VGbGFncyhuZXdfZmxhZ3MpLAotICAgICAgICBuZXdfZmxhZ3MpCi0KLSAgICAjIFJlc3RvcmUgYW5kIGdvIGJhY2sgdG8gdGhlIG9sZCBmbGFncy4KLSAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoCi0gICAgICAgIGNoYW5nZXIuUmVzdG9yZSgpLAotICAgICAgICBbJy0tc29tZScsICctLW9sZCcsICctLWZsYWdzJ10pCi0KLSAgZGVmIHRlc3RGbGFnQ2hhbmdlcl9yZW1vdmVGbGFncyhzZWxmKToKLSAgICBzZWxmLmRldmljZS5SZW1vdmVQYXRoKHNlbGYuY21kbGluZV9wYXRoLCBmb3JjZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kZXZpY2UuUGF0aEV4aXN0cyhzZWxmLmNtZGxpbmVfcGF0aCkpCi0KLSAgICB3aXRoIGZsYWdfY2hhbmdlci5DdXN0b21Db21tYW5kTGluZUZsYWdzKAotICAgICAgICBzZWxmLmRldmljZSwgX0NNRExJTkVfRklMRSwgWyctLXNvbWUnLCAnLS1mbGFncyddKToKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmRldmljZS5QYXRoRXhpc3RzKHNlbGYuY21kbGluZV9wYXRoKSkKLQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kZXZpY2UuUGF0aEV4aXN0cyhzZWxmLmNtZGxpbmVfcGF0aCkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2ZsYWdfY2hhbmdlcl90ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9mbGFnX2NoYW5nZXJfdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTM0MmNmNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2ZsYWdfY2hhbmdlcl90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgcG9zaXhwYXRoCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBmbGFnX2NoYW5nZXIKLQotCi1fQ01ETElORV9GSUxFID0gJ2Nocm9tZS1jb21tYW5kLWxpbmUnCi0KLQotY2xhc3MgX0Zha2VEZXZpY2Uob2JqZWN0KToKLSAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgIHNlbGYuYnVpbGRfdHlwZSA9ICd1c2VyJwotICAgIHNlbGYuaGFzX3Jvb3QgPSBUcnVlCi0gICAgc2VsZi5maWxlX3N5c3RlbSA9IHt9Ci0KLSAgZGVmIEhhc1Jvb3Qoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuaGFzX3Jvb3QKLQotICBkZWYgUGF0aEV4aXN0cyhzZWxmLCBmaWxlcGF0aCk6Ci0gICAgcmV0dXJuIGZpbGVwYXRoIGluIHNlbGYuZmlsZV9zeXN0ZW0KLQotICBkZWYgUmVtb3ZlUGF0aChzZWxmLCBwYXRoLCAqKl9rd2FyZ3MpOgotICAgIHNlbGYuZmlsZV9zeXN0ZW0ucG9wKHBhdGgpCi0KLSAgZGVmIFdyaXRlRmlsZShzZWxmLCBwYXRoLCBjb250ZW50cywgKipfa3dhcmdzKToKLSAgICBzZWxmLmZpbGVfc3lzdGVtW3BhdGhdID0gY29udGVudHMKLQotICBkZWYgUmVhZEZpbGUoc2VsZiwgcGF0aCwgKipfa3dhcmdzKToKLSAgICByZXR1cm4gc2VsZi5maWxlX3N5c3RlbVtwYXRoXQotCi0KLWNsYXNzIEZsYWdDaGFuZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzZWxmLmRldmljZSA9IF9GYWtlRGV2aWNlKCkKLSAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0gICAgc2VsZi5jbWRsaW5lX3BhdGggPSBwb3NpeHBhdGguam9pbihmbGFnX2NoYW5nZXIuX0NNRExJTkVfRElSLCBfQ01ETElORV9GSUxFKQotICAgIHNlbGYuY21kbGluZV9wYXRoX2xlZ2FjeSA9IHBvc2l4cGF0aC5qb2luKAotICAgICAgICBmbGFnX2NoYW5nZXIuX0NNRExJTkVfRElSX0xFR0FDWSwgX0NNRExJTkVfRklMRSkKLQotICBkZWYgdGVzdEZsYWdDaGFuZ2VyX3JlbW92ZUxlZ2FjeUNtZExpbmUoc2VsZik6Ci0gICAgc2VsZi5kZXZpY2UuV3JpdGVGaWxlKHNlbGYuY21kbGluZV9wYXRoX2xlZ2FjeSwgJ2Nocm9tZSAtLW9sZCAtLXN0dWZmJykKLSAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kZXZpY2UuUGF0aEV4aXN0cyhzZWxmLmNtZGxpbmVfcGF0aF9sZWdhY3kpKQotCi0gICAgY2hhbmdlciA9IGZsYWdfY2hhbmdlci5GbGFnQ2hhbmdlcihzZWxmLmRldmljZSwgJ2Nocm9tZS1jb21tYW5kLWxpbmUnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICBjaGFuZ2VyLl9jbWRsaW5lX3BhdGgsICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0gICAgICAgIHNlbGYuY21kbGluZV9wYXRoKQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kZXZpY2UuUGF0aEV4aXN0cyhzZWxmLmNtZGxpbmVfcGF0aF9sZWdhY3kpKQotCi0gIGRlZiB0ZXN0RmxhZ0NoYW5nZXJfbXVzdEJlRmlsZU5hbWUoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgIGZsYWdfY2hhbmdlci5GbGFnQ2hhbmdlcihzZWxmLmRldmljZSwgJy9kYXRhL2xvY2FsL2Nocm9tZS1jb21tYW5kLWxpbmUnKQotCi0KLWNsYXNzIFBhcnNlU2VyaWFsaXplRmxhZ3NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgZGVmIF90ZXN0UXVvdGVGbGFnKHNlbGYsIGZsYWcsIGV4cGVjdGVkX3F1b3RlZF9mbGFnKToKLSAgICAjIFN0YXJ0IHdpdGggYW4gdW5xdW90ZWQgZmxhZywgY2hlY2sgdGhhdCBpdCdzIHF1b3RlZCBhcyBleHBlY3RlZC4KLSAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0gICAgcXVvdGVkX2ZsYWcgPSBmbGFnX2NoYW5nZXIuX1F1b3RlRmxhZyhmbGFnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvdGVkX2ZsYWcsIGV4cGVjdGVkX3F1b3RlZF9mbGFnKQotICAgICMgQ2hlY2sgdGhhdCBpdCBzdXJ2aXZlcyBhIHJvdW5kLXRyaXAuCi0gICAgcGFyc2VkX2ZsYWdzID0gZmxhZ19jaGFuZ2VyLl9QYXJzZUZsYWdzKCdfICVzJyAlIHF1b3RlZF9mbGFnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhcnNlZF9mbGFncyksIDEpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChmbGFnLCBwYXJzZWRfZmxhZ3NbMF0pCi0KLSAgZGVmIHRlc3RRdW90ZUZsYWdfc2ltcGxlKHNlbGYpOgotICAgIHNlbGYuX3Rlc3RRdW90ZUZsYWcoJy0tc2ltcGxlLWZsYWcnLCAnLS1zaW1wbGUtZmxhZycpCi0KLSAgZGVmIHRlc3RRdW90ZUZsYWdfd2l0aFNpbXBsZVZhbHVlKHNlbGYpOgotICAgIHNlbGYuX3Rlc3RRdW90ZUZsYWcoJy0ta2V5PXZhbHVlJywgJy0ta2V5PXZhbHVlJykKLQotICBkZWYgdGVzdFF1b3RlRmxhZ193aXRoUXVvdGVkVmFsdWUxKHNlbGYpOgotICAgIHNlbGYuX3Rlc3RRdW90ZUZsYWcoJy0ta2V5PXZhbHVlQSB2YWx1ZUInLCAnLS1rZXk9InZhbHVlQSB2YWx1ZUIiJykKLQotICBkZWYgdGVzdFF1b3RlRmxhZ193aXRoUXVvdGVkVmFsdWUyKHNlbGYpOgotICAgIHNlbGYuX3Rlc3RRdW90ZUZsYWcoCi0gICAgICAgICctLWtleT10aGlzICJzaG91bGQiIHdvcmsnLCByJy0ta2V5PSJ0aGlzIFwic2hvdWxkXCIgd29yayInKQotCi0gIGRlZiB0ZXN0UXVvdGVGbGFnX3dpdGhRdW90ZWRWYWx1ZTMoc2VsZik6Ci0gICAgc2VsZi5fdGVzdFF1b3RlRmxhZygKLSAgICAgICAgIi0ta2V5PXRoaXMgaXMgJ2ZpbmUnIHRvbyIsICcnJy0ta2V5PSJ0aGlzIGlzICdmaW5lJyB0b28iJycnKQotCi0gIGRlZiB0ZXN0UXVvdGVGbGFnX3dpdGhRdW90ZWRWYWx1ZTQoc2VsZik6Ci0gICAgc2VsZi5fdGVzdFF1b3RlRmxhZygKLSAgICAgICAgIi0ta2V5PSdJIHJlYWxseSB3YW50IHRvIGtlZXAgdGhlc2UgcXVvdGVzJyIsCi0gICAgICAgICcnJy0ta2V5PSInSSByZWFsbHkgd2FudCB0byBrZWVwIHRoZXNlIHF1b3RlcyciJycnKQotCi0gIGRlZiB0ZXN0UXVvdGVGbGFnX3dpdGhRdW90ZWRWYWx1ZTUoc2VsZik6Ci0gICAgc2VsZi5fdGVzdFF1b3RlRmxhZygKLSAgICAgICAgIi0tdGhpcyBpcyBhIHN0cmFuZ2U9ZmxhZyIsICciLS10aGlzIGlzIGEgc3RyYW5nZT1mbGFnIicpCi0KLSAgZGVmIHRlc3RRdW90ZUZsYWdfd2l0aEVtcHR5VmFsdWUoc2VsZik6Ci0gICAgc2VsZi5fdGVzdFF1b3RlRmxhZygnLS1zb21lLWZsYWc9JywgJy0tc29tZS1mbGFnPScpCi0KLSAgZGVmIF90ZXN0UGFyc2VDbWRMaW5lKHNlbGYsIGNvbW1hbmRfbGluZSwgZXhwZWN0ZWRfZmxhZ3MpOgotICAgICMgU3RhcnQgd2l0aCBhIGNvbW1hbmQgbGluZSwgY2hlY2sgdGhhdCBmbGFncyBhcmUgcGFyc2VkIGFzIGV4cGVjdGVkLgotICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKLSAgICBmbGFncyA9IGZsYWdfY2hhbmdlci5fUGFyc2VGbGFncyhjb21tYW5kX2xpbmUpCi0gICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGZsYWdzLCBleHBlY3RlZF9mbGFncykKLQotICAgICMgQ2hlY2sgdGhhdCBmbGFncyBzdXJ2aXZlIGEgcm91bmQtdHJpcC4KLSAgICAjIE5vdGU6IEFsdGhvdWdoIG5ld19jb21tYW5kX2xpbmUgYW5kIGNvbW1hbmRfbGluZSBtYXkgbm90IG1hdGNoLCB0aGV5Ci0gICAgIyBzaG91bGQgZGVzY3JpYmUgdGhlIHNhbWUgc2V0IG9mIGZsYWdzLgotICAgIG5ld19jb21tYW5kX2xpbmUgPSBmbGFnX2NoYW5nZXIuX1NlcmlhbGl6ZUZsYWdzKGZsYWdzKQotICAgIG5ld19mbGFncyA9IGZsYWdfY2hhbmdlci5fUGFyc2VGbGFncyhuZXdfY29tbWFuZF9saW5lKQotICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChuZXdfZmxhZ3MsIGV4cGVjdGVkX2ZsYWdzKQotCi0gIGRlZiB0ZXN0UGFyc2VDbWRMaW5lX3NpbXBsZShzZWxmKToKLSAgICBzZWxmLl90ZXN0UGFyc2VDbWRMaW5lKAotICAgICAgICAnY2hyb21lIC0tZm9vIC0tYmFyPSJhIGIiIC0tYmF6PXRydWUgLS1maW5lPSJvayInLAotICAgICAgICBbJy0tZm9vJywgJy0tYmFyPWEgYicsICctLWJhej10cnVlJywgJy0tZmluZT1vayddKQotCi0gIGRlZiB0ZXN0UGFyc2VDbWRMaW5lX3dpdGhGYW5jeVF1b3RlcyhzZWxmKToKLSAgICBzZWxmLl90ZXN0UGFyc2VDbWRMaW5lKAotICAgICAgICByJycnXyAtLWZvbz0idGhpcyAnaXMnIG9rIgotICAgICAgICAgICAgICAtLWJhcj0ndGhpcyBcJ2lzXCcgdG9vJwotICAgICAgICAgICAgICAtLWJhej0idGhpcyBcJ2lzXCcgdHJpY2t5IgotICAgICAgICAnJycsCi0gICAgICAgIFsiLS1mb289dGhpcyAnaXMnIG9rIiwKLSAgICAgICAgICItLWJhcj10aGlzICdpcycgdG9vIiwKLSAgICAgICAgIHIiLS1iYXo9dGhpcyBcJ2lzXCcgdHJpY2t5Il0pCi0KLSAgZGVmIHRlc3RQYXJzZUNtZExpbmVfd2l0aFVudGVybWluYXRlZFF1b3RlKHNlbGYpOgotICAgIHNlbGYuX3Rlc3RQYXJzZUNtZExpbmUoCi0gICAgICAgICdfIC0tZm9vIC0tYmFyPSJJIGZvcmdvdCBzb21ldGhpbmcnLAotICAgICAgICBbJy0tZm9vJywgJy0tYmFyPUkgZm9yZ290IHNvbWV0aGluZyddKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2ZvcndhcmRlci5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZm9yd2FyZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjFmYmUxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvZm9yd2FyZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDc2ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSMgcHlsaW50OiBkaXNhYmxlPVcwMjEyCi0KLWltcG9ydCBmY250bAotaW1wb3J0IGluc3BlY3QKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBwc3V0aWwKLQotZnJvbSBkZXZpbCBpbXBvcnQgYmFzZV9lcnJvcgotZnJvbSBkZXZpbCBpbXBvcnQgZGV2aWxfZW52Ci1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9lcnJvcnMKLWZyb20gZGV2aWwuYW5kcm9pZC5jb25zdGFudHMgaW1wb3J0IGZpbGVfc3lzdGVtCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBhZGJfd3JhcHBlcgotZnJvbSBkZXZpbC5hbmRyb2lkLnZhbGdyaW5kX3Rvb2xzIGltcG9ydCBiYXNlX3Rvb2wKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGNtZF9oZWxwZXIKLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLSMgSWYgcGFzc2VkIGFzIHRoZSBkZXZpY2UgcG9ydCwgdGhpcyB3aWxsIHRlbGwgdGhlIGZvcndhcmRlciB0byBhbGxvY2F0ZQotIyBhIGR5bmFtaWMgcG9ydCBvbiB0aGUgZGV2aWNlLiBUaGUgYWN0dWFsIHBvcnQgY2FuIHRoZW4gYmUgcmV0cmlldmVkIHdpdGgKLSMgRm9yd2FyZGVyLkRldmljZVBvcnRGb3JIb3N0UG9ydC4KLURZTkFNSUNfREVWSUNFX1BPUlQgPSAwCi0KLQotZGVmIF9HZXRQcm9jZXNzU3RhcnRUaW1lKHBpZCk6Ci0gIHAgPSBwc3V0aWwuUHJvY2VzcyhwaWQpCi0gIGlmIGluc3BlY3QuaXNtZXRob2QocC5jcmVhdGVfdGltZSk6Ci0gICAgcmV0dXJuIHAuY3JlYXRlX3RpbWUoKQotICBlbHNlOiAgIyBQcm9jZXNzLmNyZWF0ZV90aW1lIGlzIGEgcHJvcGVydHkgaW4gb2xkIHZlcnNpb25zIG9mIHBzdXRpbC4KLSAgICByZXR1cm4gcC5jcmVhdGVfdGltZQotCi0KLWRlZiBfTG9nTWFwRmFpbHVyZURpYWdub3N0aWNzKGRldmljZSk6Ci0gICMgVGhlIGhvc3QgZm9yd2FyZGVyIGRhZW1vbiBsb2dzIHRvIC90bXAvaG9zdF9mb3J3YXJkZXJfbG9nLCBzbyBwcmludCB0aGUgZW5kCi0gICMgb2YgdGhhdC4KLSAgdHJ5OgotICAgIHdpdGggb3BlbignL3RtcC9ob3N0X2ZvcndhcmRlcl9sb2cnKSBhcyBob3N0X2ZvcndhcmRlcl9sb2c6Ci0gICAgICBsb2dnZXIuaW5mbygnTGFzdCA1MCBsaW5lcyBvZiB0aGUgaG9zdCBmb3J3YXJkZXIgZGFlbW9uIGxvZzonKQotICAgICAgZm9yIGxpbmUgaW4gaG9zdF9mb3J3YXJkZXJfbG9nLnJlYWQoKS5zcGxpdGxpbmVzKClbLTUwOl06Ci0gICAgICAgIGxvZ2dlci5pbmZvKCcgICAgJXMnLCBsaW5lKQotICBleGNlcHQgRXhjZXB0aW9uOiAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKLSAgICAjIEdyYWJiaW5nIHRoZSBob3N0IGZvcndhcmRlciBsb2cgaXMgYmVzdC1lZmZvcnQuIElnbm9yZSBhbGwgZXJyb3JzLgotICAgIGxvZ2dlci53YXJuaW5nKCdGYWlsZWQgdG8gZ2V0IHRoZSBjb250ZW50cyBvZiBob3N0X2ZvcndhcmRlcl9sb2cuJykKLQotICAjIFRoZSBkZXZpY2UgZm9yd2FyZGVyIGRhZW1vbiBsb2dzIHRvIHRoZSBsb2djYXQsIHNvIHByaW50IHRoZSBlbmQgb2YgdGhhdC4KLSAgdHJ5OgotICAgIGxvZ2dlci5pbmZvKCdMYXN0IDUwIGxpbmVzIG9mIGxvZ2NhdDonKQotICAgIGZvciBsb2djYXRfbGluZSBpbiBkZXZpY2UuYWRiLkxvZ2NhdChkdW1wPVRydWUpWy01MDpdOgotICAgICAgbG9nZ2VyLmluZm8oJyAgICAlcycsIGxvZ2NhdF9saW5lKQotICBleGNlcHQgKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yLAotICAgICAgICAgIGRldmljZV9lcnJvcnMuRGV2aWNlVW5yZWFjaGFibGVFcnJvcik6Ci0gICAgIyBHcmFiYmluZyB0aGUgZGV2aWNlIGZvcndhcmRlciBsb2cgaXMgYWxzbyBiZXN0LWVmZm9ydC4gSWdub3JlIGFsbCBlcnJvcnMuCi0gICAgbG9nZ2VyLndhcm5pbmcoJ0ZhaWxlZCB0byBnZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2djYXQuJykKLQotICAjIExvZyBhbGl2ZSBkZXZpY2UgZm9yd2FyZGVycy4KLSAgdHJ5OgotICAgIHBzX291dCA9IGRldmljZS5SdW5TaGVsbENvbW1hbmQoWydwcyddLCBjaGVja19yZXR1cm49VHJ1ZSkKLSAgICBsb2dnZXIuaW5mbygnQ3VycmVudGx5IHJ1bm5pbmcgZGV2aWNlX2ZvcndhcmRlcnM6JykKLSAgICBmb3IgbGluZSBpbiBwc19vdXQ6Ci0gICAgICBpZiAnZGV2aWNlX2ZvcndhcmRlcicgaW4gbGluZToKLSAgICAgICAgbG9nZ2VyLmluZm8oJyAgICAlcycsIGxpbmUpCi0gIGV4Y2VwdCAoZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IsCi0gICAgICAgICAgZGV2aWNlX2Vycm9ycy5EZXZpY2VVbnJlYWNoYWJsZUVycm9yKToKLSAgICBsb2dnZXIud2FybmluZygnRmFpbGVkIHRvIGxpc3QgY3VycmVudGx5IHJ1bm5pbmcgZGV2aWNlX2ZvcndhcmRlciAnCi0gICAgICAgICAgICAgICAgICAgJ2luc3RhbmNlcy4nKQotCi0KLWNsYXNzIF9GaWxlTG9jayhvYmplY3QpOgotICAiIiJXaXRoIHN0YXRlbWVudC1hd2FyZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGZpbGUgbG9jay4KLQotICBGaWxlIGxvY2tzIGFyZSBuZWVkZWQgZm9yIGNyb3NzLXByb2Nlc3Mgc3luY2hyb25pemF0aW9uIHdoZW4gdGhlCi0gIG11bHRpcHJvY2Vzc2luZyBQeXRob24gbW9kdWxlIGlzIHVzZWQuCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKLSAgICBzZWxmLl9mZCA9IC0xCi0gICAgc2VsZi5fcGF0aCA9IHBhdGgKLQotICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgIHNlbGYuX2ZkID0gb3Mub3BlbihzZWxmLl9wYXRoLCBvcy5PX1JET05MWSB8IG9zLk9fQ1JFQVQpCi0gICAgaWYgc2VsZi5fZmQgPCAwOgotICAgICAgcmFpc2UgRXhjZXB0aW9uKCdDb3VsZCBub3Qgb3BlbiBmaWxlICVzIGZvciByZWFkaW5nJyAlIHNlbGYuX3BhdGgpCi0gICAgZmNudGwuZmxvY2soc2VsZi5fZmQsIGZjbnRsLkxPQ0tfRVgpCi0KLSAgZGVmIF9fZXhpdF9fKHNlbGYsIF9leGNlcHRpb25fdHlwZSwgX2V4Y2VwdGlvbl92YWx1ZSwgdHJhY2ViYWNrKToKLSAgICBmY250bC5mbG9jayhzZWxmLl9mZCwgZmNudGwuTE9DS19VTikKLSAgICBvcy5jbG9zZShzZWxmLl9mZCkKLQotCi1jbGFzcyBIb3N0Rm9yd2FyZGVyRXJyb3IoYmFzZV9lcnJvci5CYXNlRXJyb3IpOgotICAiIiJFeGNlcHRpb24gZm9yIGZhaWx1cmVzIGludm9sdmluZyBob3N0X2ZvcndhcmRlci4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSk6Ci0gICAgc3VwZXIoSG9zdEZvcndhcmRlckVycm9yLCBzZWxmKS5fX2luaXRfXyhtZXNzYWdlKQotCi0KLWNsYXNzIEZvcndhcmRlcihvYmplY3QpOgotICAiIiJUaHJlYWQtc2FmZSBjbGFzcyB0byBtYW5hZ2UgcG9ydCBmb3J3YXJkcyBmcm9tIHRoZSBkZXZpY2UgdG8gdGhlIGhvc3QuIiIiCi0KLSAgX0RFVklDRV9GT1JXQVJERVJfRk9MREVSID0gKGZpbGVfc3lzdGVtLlRFU1RfRVhFQ1VUQUJMRV9ESVIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9mb3J3YXJkZXIvJykKLSAgX0RFVklDRV9GT1JXQVJERVJfUEFUSCA9IChmaWxlX3N5c3RlbS5URVNUX0VYRUNVVEFCTEVfRElSICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL2ZvcndhcmRlci9kZXZpY2VfZm9yd2FyZGVyJykKLSAgX0xPQ0tfUEFUSCA9ICcvdG1wL2Nocm9tZS5mb3J3YXJkZXIubG9jaycKLSAgIyBEZWZpbmVkIGluIGhvc3RfZm9yd2FyZGVyX21haW4uY2MKLSAgX0hPU1RfRk9SV0FSREVSX0xPRyA9ICcvdG1wL2hvc3RfZm9yd2FyZGVyX2xvZycKLQotICBfVElNRU9VVCA9IDYwICAjIHNlY29uZHMKLQotICBfaW5zdGFuY2UgPSBOb25lCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgTWFwKHBvcnRfcGFpcnMsIGRldmljZSwgdG9vbD1Ob25lKToKLSAgICAiIiJSdW5zIHRoZSBmb3J3YXJkZXIuCi0KLSAgICBBcmdzOgotICAgICAgcG9ydF9wYWlyczogQSBsaXN0IG9mIHR1cGxlcyAoZGV2aWNlX3BvcnQsIGhvc3RfcG9ydCkgdG8gZm9yd2FyZC4gTm90ZQotICAgICAgICAgICAgICAgICB0aGF0IHlvdSBjYW4gc3BlY2lmeSAwIGFzIGEgZGV2aWNlX3BvcnQsIGluIHdoaWNoIGNhc2UgYQotICAgICAgICAgICAgICAgICBwb3J0IHdpbGwgYnkgZHluYW1pY2FsbHkgYXNzaWduZWQgb24gdGhlIGRldmljZS4gWW91IGNhbgotICAgICAgICAgICAgICAgICBnZXQgdGhlIG51bWJlciBvZiB0aGUgYXNzaWduZWQgcG9ydCB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgRGV2aWNlUG9ydEZvckhvc3RQb3J0IG1ldGhvZC4KLSAgICAgIGRldmljZTogQSBEZXZpY2VVdGlscyBpbnN0YW5jZS4KLSAgICAgIHRvb2w6IFRvb2wgY2xhc3MgdG8gdXNlIHRvIGdldCB3cmFwcGVyLCBpZiBuZWNlc3NhcnksIGZvciBleGVjdXRpbmcgdGhlCi0gICAgICAgICAgICBmb3J3YXJkZXIgKHNlZSB2YWxncmluZF90b29scy5weSkuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBFeGNlcHRpb24gb24gZmFpbHVyZSB0byBmb3J3YXJkIHRoZSBwb3J0LgotICAgICIiIgotICAgIGlmIG5vdCB0b29sOgotICAgICAgdG9vbCA9IGJhc2VfdG9vbC5CYXNlVG9vbCgpCi0gICAgd2l0aCBfRmlsZUxvY2soRm9yd2FyZGVyLl9MT0NLX1BBVEgpOgotICAgICAgaW5zdGFuY2UgPSBGb3J3YXJkZXIuX0dldEluc3RhbmNlTG9ja2VkKHRvb2wpCi0gICAgICBpbnN0YW5jZS5fSW5pdERldmljZUxvY2tlZChkZXZpY2UsIHRvb2wpCi0KLSAgICAgIGRldmljZV9zZXJpYWwgPSBzdHIoZGV2aWNlKQotICAgICAgbWFwX2FyZ19saXN0cyA9IFsKLSAgICAgICAgICBbJy0tYWRiPScgKyBhZGJfd3JhcHBlci5BZGJXcmFwcGVyLkdldEFkYlBhdGgoKSwKLSAgICAgICAgICAgJy0tc2VyaWFsLWlkPScgKyBkZXZpY2Vfc2VyaWFsLAotICAgICAgICAgICAnLS1tYXAnLCBzdHIoZGV2aWNlX3BvcnQpLCBzdHIoaG9zdF9wb3J0KV0KLSAgICAgICAgICBmb3IgZGV2aWNlX3BvcnQsIGhvc3RfcG9ydCBpbiBwb3J0X3BhaXJzXQotICAgICAgbG9nZ2VyLmluZm8oJ0ZvcndhcmRpbmcgdXNpbmcgY29tbWFuZHM6ICVzJywgbWFwX2FyZ19saXN0cykKLQotICAgICAgZm9yIG1hcF9hcmdfbGlzdCBpbiBtYXBfYXJnX2xpc3RzOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgbWFwX2NtZCA9IFtpbnN0YW5jZS5faG9zdF9mb3J3YXJkZXJfcGF0aF0gKyBtYXBfYXJnX2xpc3QKLSAgICAgICAgICAoZXhpdF9jb2RlLCBvdXRwdXQpID0gY21kX2hlbHBlci5HZXRDbWRTdGF0dXNBbmRPdXRwdXRXaXRoVGltZW91dCgKLSAgICAgICAgICAgICAgbWFwX2NtZCwgRm9yd2FyZGVyLl9USU1FT1VUKQotICAgICAgICBleGNlcHQgY21kX2hlbHBlci5UaW1lb3V0RXJyb3IgYXMgZToKLSAgICAgICAgICByYWlzZSBIb3N0Rm9yd2FyZGVyRXJyb3IoCi0gICAgICAgICAgICAgICdgJXNgIHRpbWVkIG91dDpcbiVzJyAlICgnICcuam9pbihtYXBfY21kKSwgZS5vdXRwdXQpKQotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgIGlmIGUuZXJybm8gPT0gMjoKLSAgICAgICAgICAgIHJhaXNlIEhvc3RGb3J3YXJkZXJFcnJvcigKLSAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIHN0YXJ0IGhvc3QgZm9yd2FyZGVyLiAnCi0gICAgICAgICAgICAgICAgJ01ha2Ugc3VyZSB5b3UgaGF2ZSBidWlsdCBob3N0X2ZvcndhcmRlci4nKQotICAgICAgICAgIGVsc2U6IHJhaXNlCi0gICAgICAgIGlmIGV4aXRfY29kZSAhPSAwOgotICAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGluc3RhbmNlLl9LaWxsRGV2aWNlTG9ja2VkKGRldmljZSwgdG9vbCkKLSAgICAgICAgICBleGNlcHQgKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yLAotICAgICAgICAgICAgICAgICAgZGV2aWNlX2Vycm9ycy5EZXZpY2VVbnJlYWNoYWJsZUVycm9yKToKLSAgICAgICAgICAgICMgV2UgZG9uJ3Qgd2FudCB0aGUgZmFpbHVyZSB0byBraWxsIHRoZSBkZXZpY2UgZm9yd2FyZGVyIHRvCi0gICAgICAgICAgICAjIHN1cGVyc2VkZSB0aGUgb3JpZ2luYWwgZmFpbHVyZSB0byBtYXAuCi0gICAgICAgICAgICBsb2dnZXIud2FybmluZygKLSAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGtpbGwgdGhlIGRldmljZSBmb3J3YXJkZXIgYWZ0ZXIgbWFwIGZhaWx1cmU6ICVzJywKLSAgICAgICAgICAgICAgICBzdHIoZSkpCi0gICAgICAgICAgX0xvZ01hcEZhaWx1cmVEaWFnbm9zdGljcyhkZXZpY2UpCi0gICAgICAgICAgZm9ybWF0dGVkX291dHB1dCA9ICgnXG4nLmpvaW4ob3V0cHV0KSBpZiBpc2luc3RhbmNlKG91dHB1dCwgbGlzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugb3V0cHV0KQotICAgICAgICAgIHJhaXNlIEhvc3RGb3J3YXJkZXJFcnJvcigKLSAgICAgICAgICAgICAgJ2Alc2AgZXhpdGVkIHdpdGggJWQ6XG4lcycgJSAoCi0gICAgICAgICAgICAgICAgICAnICcuam9pbihtYXBfY21kKSwKLSAgICAgICAgICAgICAgICAgIGV4aXRfY29kZSwKLSAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZF9vdXRwdXQpKQotICAgICAgICB0b2tlbnMgPSBvdXRwdXQuc3BsaXQoJzonKQotICAgICAgICBpZiBsZW4odG9rZW5zKSAhPSAyOgotICAgICAgICAgIHJhaXNlIEhvc3RGb3J3YXJkZXJFcnJvcigKLSAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgaG9zdCBmb3J3YXJkZXIgb3V0cHV0ICIlcyIsICcKLSAgICAgICAgICAgICAgJ2V4cGVjdGVkICJkZXZpY2VfcG9ydDpob3N0X3BvcnQiJyAlIG91dHB1dCkKLSAgICAgICAgZGV2aWNlX3BvcnQgPSBpbnQodG9rZW5zWzBdKQotICAgICAgICBob3N0X3BvcnQgPSBpbnQodG9rZW5zWzFdKQotICAgICAgICBzZXJpYWxfd2l0aF9wb3J0ID0gKGRldmljZV9zZXJpYWwsIGRldmljZV9wb3J0KQotICAgICAgICBpbnN0YW5jZS5fZGV2aWNlX3RvX2hvc3RfcG9ydF9tYXBbc2VyaWFsX3dpdGhfcG9ydF0gPSBob3N0X3BvcnQKLSAgICAgICAgaW5zdGFuY2UuX2hvc3RfdG9fZGV2aWNlX3BvcnRfbWFwW2hvc3RfcG9ydF0gPSBzZXJpYWxfd2l0aF9wb3J0Ci0gICAgICAgIGxvZ2dlci5pbmZvKCdGb3J3YXJkaW5nIGRldmljZSBwb3J0OiAlZCB0byBob3N0IHBvcnQ6ICVkLicsCi0gICAgICAgICAgICAgICAgICAgIGRldmljZV9wb3J0LCBob3N0X3BvcnQpCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgVW5tYXBEZXZpY2VQb3J0KGRldmljZV9wb3J0LCBkZXZpY2UpOgotICAgICIiIlVubWFwcyBhIHByZXZpb3VzbHkgZm9yd2FyZGVkIGRldmljZSBwb3J0LgotCi0gICAgQXJnczoKLSAgICAgIGRldmljZTogQSBEZXZpY2VVdGlscyBpbnN0YW5jZS4KLSAgICAgIGRldmljZV9wb3J0OiBBIHByZXZpb3VzbHkgZm9yd2FyZGVkIHBvcnQgKHRocm91Z2ggTWFwKCkpLgotICAgICIiIgotICAgIHdpdGggX0ZpbGVMb2NrKEZvcndhcmRlci5fTE9DS19QQVRIKToKLSAgICAgIEZvcndhcmRlci5fVW5tYXBEZXZpY2VQb3J0TG9ja2VkKGRldmljZV9wb3J0LCBkZXZpY2UpCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgVW5tYXBBbGxEZXZpY2VQb3J0cyhkZXZpY2UpOgotICAgICIiIlVubWFwcyBhbGwgdGhlIHByZXZpb3VzbHkgZm9yd2FyZGVkIHBvcnRzIGZvciB0aGUgcHJvdmlkZWQgZGV2aWNlLgotCi0gICAgQXJnczoKLSAgICAgIGRldmljZTogQSBEZXZpY2VVdGlscyBpbnN0YW5jZS4KLSAgICAgIHBvcnRfcGFpcnM6IEEgbGlzdCBvZiB0dXBsZXMgKGRldmljZV9wb3J0LCBob3N0X3BvcnQpIHRvIHVubWFwLgotICAgICIiIgotICAgIHdpdGggX0ZpbGVMb2NrKEZvcndhcmRlci5fTE9DS19QQVRIKToKLSAgICAgIGluc3RhbmNlID0gRm9yd2FyZGVyLl9HZXRJbnN0YW5jZUxvY2tlZChOb25lKQotICAgICAgdW5tYXBfYWxsX2NtZCA9IFsKLSAgICAgICAgICBpbnN0YW5jZS5faG9zdF9mb3J3YXJkZXJfcGF0aCwKLSAgICAgICAgICAnLS1hZGI9JXMnICUgYWRiX3dyYXBwZXIuQWRiV3JhcHBlci5HZXRBZGJQYXRoKCksCi0gICAgICAgICAgJy0tc2VyaWFsLWlkPSVzJyAlIGRldmljZS5zZXJpYWwsCi0gICAgICAgICAgJy0tdW5tYXAtYWxsJwotICAgICAgXQotICAgICAgdHJ5OgotICAgICAgICBleGl0X2NvZGUsIG91dHB1dCA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0V2l0aFRpbWVvdXQoCi0gICAgICAgICAgICB1bm1hcF9hbGxfY21kLCBGb3J3YXJkZXIuX1RJTUVPVVQpCi0gICAgICBleGNlcHQgY21kX2hlbHBlci5UaW1lb3V0RXJyb3IgYXMgZToKLSAgICAgICAgcmFpc2UgSG9zdEZvcndhcmRlckVycm9yKAotICAgICAgICAgICAgJ2Alc2AgdGltZWQgb3V0OlxuJXMnICUgKCcgJy5qb2luKHVubWFwX2FsbF9jbWQpLCBlLm91dHB1dCkpCi0gICAgICBpZiBleGl0X2NvZGUgIT0gMDoKLSAgICAgICAgZXJyb3JfbXNnID0gWwotICAgICAgICAgICAgJ2Alc2AgZXhpdGVkIHdpdGggJWQnICUgKCcgJy5qb2luKHVubWFwX2FsbF9jbWQpLCBleGl0X2NvZGUpXQotICAgICAgICBpZiBpc2luc3RhbmNlKG91dHB1dCwgbGlzdCk6Ci0gICAgICAgICAgZXJyb3JfbXNnICs9IG91dHB1dAotICAgICAgICBlbHNlOgotICAgICAgICAgIGVycm9yX21zZyArPSBbb3V0cHV0XQotICAgICAgICByYWlzZSBIb3N0Rm9yd2FyZGVyRXJyb3IoJ1xuJy5qb2luKGVycm9yX21zZykpCi0KLSAgICAgICMgQ2xlYW4gb3V0IGFueSBlbnRyaWVzIGZyb20gdGhlIGRldmljZSAmIGhvc3QgbWFwLgotICAgICAgZGV2aWNlX21hcCA9IGluc3RhbmNlLl9kZXZpY2VfdG9faG9zdF9wb3J0X21hcAotICAgICAgaG9zdF9tYXAgPSBpbnN0YW5jZS5faG9zdF90b19kZXZpY2VfcG9ydF9tYXAKLSAgICAgIGZvciBkZXZpY2Vfc2VyaWFsX2FuZF9wb3J0LCBob3N0X3BvcnQgaW4gZGV2aWNlX21hcC5pdGVtcygpOgotICAgICAgICBkZXZpY2Vfc2VyaWFsID0gZGV2aWNlX3NlcmlhbF9hbmRfcG9ydFswXQotICAgICAgICBpZiBkZXZpY2Vfc2VyaWFsID09IGRldmljZS5zZXJpYWw6Ci0gICAgICAgICAgZGVsIGRldmljZV9tYXBbZGV2aWNlX3NlcmlhbF9hbmRfcG9ydF0KLSAgICAgICAgICBkZWwgaG9zdF9tYXBbaG9zdF9wb3J0XQotCi0gICAgICAjIEtpbGwgdGhlIGRldmljZSBmb3J3YXJkZXIuCi0gICAgICB0b29sID0gYmFzZV90b29sLkJhc2VUb29sKCkKLSAgICAgIGluc3RhbmNlLl9LaWxsRGV2aWNlTG9ja2VkKGRldmljZSwgdG9vbCkKLQotICBAc3RhdGljbWV0aG9kCi0gIGRlZiBEZXZpY2VQb3J0Rm9ySG9zdFBvcnQoaG9zdF9wb3J0KToKLSAgICAiIiJSZXR1cm5zIHRoZSBkZXZpY2UgcG9ydCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgZ2l2ZW4gaG9zdCBwb3J0LiIiIgotICAgIHdpdGggX0ZpbGVMb2NrKEZvcndhcmRlci5fTE9DS19QQVRIKToKLSAgICAgIHNlcmlhbF9hbmRfcG9ydCA9IEZvcndhcmRlci5fR2V0SW5zdGFuY2VMb2NrZWQoCi0gICAgICAgICAgTm9uZSkuX2hvc3RfdG9fZGV2aWNlX3BvcnRfbWFwLmdldChob3N0X3BvcnQpCi0gICAgICByZXR1cm4gc2VyaWFsX2FuZF9wb3J0WzFdIGlmIHNlcmlhbF9hbmRfcG9ydCBlbHNlIE5vbmUKLQotICBAc3RhdGljbWV0aG9kCi0gIGRlZiBSZW1vdmVIb3N0TG9nKCk6Ci0gICAgaWYgb3MucGF0aC5leGlzdHMoRm9yd2FyZGVyLl9IT1NUX0ZPUldBUkRFUl9MT0cpOgotICAgICAgb3MudW5saW5rKEZvcndhcmRlci5fSE9TVF9GT1JXQVJERVJfTE9HKQotCi0gIEBzdGF0aWNtZXRob2QKLSAgZGVmIEdldEhvc3RMb2coKToKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoRm9yd2FyZGVyLl9IT1NUX0ZPUldBUkRFUl9MT0cpOgotICAgICAgcmV0dXJuICcnCi0gICAgd2l0aCBmaWxlKEZvcndhcmRlci5fSE9TVF9GT1JXQVJERVJfTE9HLCAncicpIGFzIGY6Ci0gICAgICByZXR1cm4gZi5yZWFkKCkKLQotICBAc3RhdGljbWV0aG9kCi0gIGRlZiBfR2V0SW5zdGFuY2VMb2NrZWQodG9vbCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgotCi0gICAgTm90ZSB0aGF0IHRoZSBnbG9iYWwgbG9jayBtdXN0IGJlIGFjcXVpcmVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLgotCi0gICAgQXJnczoKLSAgICAgIHRvb2w6IFRvb2wgY2xhc3MgdG8gdXNlIHRvIGdldCB3cmFwcGVyLCBpZiBuZWNlc3NhcnksIGZvciBleGVjdXRpbmcgdGhlCi0gICAgICAgICAgICBmb3J3YXJkZXIgKHNlZSB2YWxncmluZF90b29scy5weSkuCi0gICAgIiIiCi0gICAgaWYgbm90IEZvcndhcmRlci5faW5zdGFuY2U6Ci0gICAgICBGb3J3YXJkZXIuX2luc3RhbmNlID0gRm9yd2FyZGVyKHRvb2wpCi0gICAgcmV0dXJuIEZvcndhcmRlci5faW5zdGFuY2UKLQotICBkZWYgX19pbml0X18oc2VsZiwgdG9vbCk6Ci0gICAgIiIiQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZSBvZiBGb3J3YXJkZXIuCi0KLSAgICBOb3RlIHRoYXQgRm9yd2FyZGVyIGlzIGEgc2luZ2xldG9uIHRoZXJlZm9yZSB0aGlzIGNvbnN0cnVjdG9yIHNob3VsZCBiZQotICAgIGNhbGxlZCBvbmx5IG9uY2UuCi0KLSAgICBBcmdzOgotICAgICAgdG9vbDogVG9vbCBjbGFzcyB0byB1c2UgdG8gZ2V0IHdyYXBwZXIsIGlmIG5lY2Vzc2FyeSwgZm9yIGV4ZWN1dGluZyB0aGUKLSAgICAgICAgICAgIGZvcndhcmRlciAoc2VlIHZhbGdyaW5kX3Rvb2xzLnB5KS4KLSAgICAiIiIKLSAgICBhc3NlcnQgbm90IEZvcndhcmRlci5faW5zdGFuY2UKLSAgICBzZWxmLl90b29sID0gdG9vbAotICAgIHNlbGYuX2luaXRpYWxpemVkX2RldmljZXMgPSBzZXQoKQotICAgIHNlbGYuX2RldmljZV90b19ob3N0X3BvcnRfbWFwID0gZGljdCgpCi0gICAgc2VsZi5faG9zdF90b19kZXZpY2VfcG9ydF9tYXAgPSBkaWN0KCkKLSAgICBzZWxmLl9ob3N0X2ZvcndhcmRlcl9wYXRoID0gZGV2aWxfZW52LmNvbmZpZy5GZXRjaFBhdGgoJ2ZvcndhcmRlcl9ob3N0JykKLSAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMoc2VsZi5faG9zdF9mb3J3YXJkZXJfcGF0aCksICdQbGVhc2UgYnVpbGQgZm9yd2FyZGVyMicKLSAgICBzZWxmLl9Jbml0SG9zdExvY2tlZCgpCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgX1VubWFwRGV2aWNlUG9ydExvY2tlZChkZXZpY2VfcG9ydCwgZGV2aWNlKToKLSAgICAiIiJJbnRlcm5hbCBtZXRob2QgdXNlZCBieSBVbm1hcERldmljZVBvcnQoKS4KLQotICAgIE5vdGUgdGhhdCB0aGUgZ2xvYmFsIGxvY2sgbXVzdCBiZSBhY3F1aXJlZCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4KLSAgICAiIiIKLSAgICBpbnN0YW5jZSA9IEZvcndhcmRlci5fR2V0SW5zdGFuY2VMb2NrZWQoTm9uZSkKLSAgICBzZXJpYWwgPSBzdHIoZGV2aWNlKQotICAgIHNlcmlhbF93aXRoX3BvcnQgPSAoc2VyaWFsLCBkZXZpY2VfcG9ydCkKLSAgICBpZiBub3Qgc2VyaWFsX3dpdGhfcG9ydCBpbiBpbnN0YW5jZS5fZGV2aWNlX3RvX2hvc3RfcG9ydF9tYXA6Ci0gICAgICBsb2dnZXIuZXJyb3IoJ1RyeWluZyB0byB1bm1hcCBub24tZm9yd2FyZGVkIHBvcnQgJWQnLCBkZXZpY2VfcG9ydCkKLSAgICAgIHJldHVybgotCi0gICAgaG9zdF9wb3J0ID0gaW5zdGFuY2UuX2RldmljZV90b19ob3N0X3BvcnRfbWFwW3NlcmlhbF93aXRoX3BvcnRdCi0gICAgZGVsIGluc3RhbmNlLl9kZXZpY2VfdG9faG9zdF9wb3J0X21hcFtzZXJpYWxfd2l0aF9wb3J0XQotICAgIGRlbCBpbnN0YW5jZS5faG9zdF90b19kZXZpY2VfcG9ydF9tYXBbaG9zdF9wb3J0XQotCi0gICAgdW5tYXBfY21kID0gWwotICAgICAgICBpbnN0YW5jZS5faG9zdF9mb3J3YXJkZXJfcGF0aCwKLSAgICAgICAgJy0tYWRiPSVzJyAlIGFkYl93cmFwcGVyLkFkYldyYXBwZXIuR2V0QWRiUGF0aCgpLAotICAgICAgICAnLS1zZXJpYWwtaWQ9JXMnICUgc2VyaWFsLAotICAgICAgICAnLS11bm1hcCcsIHN0cihkZXZpY2VfcG9ydCkKLSAgICBdCi0gICAgdHJ5OgotICAgICAgKGV4aXRfY29kZSwgb3V0cHV0KSA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0V2l0aFRpbWVvdXQoCi0gICAgICAgICAgdW5tYXBfY21kLCBGb3J3YXJkZXIuX1RJTUVPVVQpCi0gICAgZXhjZXB0IGNtZF9oZWxwZXIuVGltZW91dEVycm9yIGFzIGU6Ci0gICAgICByYWlzZSBIb3N0Rm9yd2FyZGVyRXJyb3IoCi0gICAgICAgICAgJ2Alc2AgdGltZWQgb3V0OlxuJXMnICUgKCcgJy5qb2luKHVubWFwX2NtZCksIGUub3V0cHV0KSkKLSAgICBpZiBleGl0X2NvZGUgIT0gMDoKLSAgICAgIGxvZ2dlci5lcnJvcigKLSAgICAgICAgICAnYCVzYCBleGl0ZWQgd2l0aCAlZDpcbiVzJywKLSAgICAgICAgICAnICcuam9pbih1bm1hcF9jbWQpLAotICAgICAgICAgIGV4aXRfY29kZSwKLSAgICAgICAgICAnXG4nLmpvaW4ob3V0cHV0KSBpZiBpc2luc3RhbmNlKG91dHB1dCwgbGlzdCkgZWxzZSBvdXRwdXQpCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgX0dldFBpZEZvckxvY2soKToKLSAgICAiIiJSZXR1cm5zIHRoZSBQSUQgdXNlZCBmb3IgaG9zdF9mb3J3YXJkZXIgaW5pdGlhbGl6YXRpb24uCi0KLSAgICBUaGUgUElEIG9mIHRoZSAic2hhcmRlciIgaXMgdXNlZCB0byBoYW5kbGUgbXVsdGlwcm9jZXNzaW5nLiBUaGUgInNoYXJkZXIiCi0gICAgaXMgdGhlIGluaXRpYWwgcHJvY2VzcyB0aGF0IGZvcmtzIHRoYXQgaXMgdGhlIHBhcmVudCBwcm9jZXNzLgotICAgICIiIgotICAgIHJldHVybiBvcy5nZXRwZ3JwKCkKLQotICBkZWYgX0luaXRIb3N0TG9ja2VkKHNlbGYpOgotICAgICIiIkluaXRpYWxpemVzIHRoZSBob3N0IGZvcndhcmRlciBkYWVtb24uCi0KLSAgICBOb3RlIHRoYXQgdGhlIGdsb2JhbCBsb2NrIG11c3QgYmUgYWNxdWlyZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuIFRoaXMKLSAgICBtZXRob2Qga2lsbHMgYW55IGV4aXN0aW5nIGhvc3RfZm9yd2FyZGVyIHByb2Nlc3MgdGhhdCBjb3VsZCBiZSBzdGFsZS4KLSAgICAiIiIKLSAgICAjIFNlZSBpZiB0aGUgaG9zdF9mb3J3YXJkZXIgZGFlbW9uIHdhcyBhbHJlYWR5IGluaXRpYWxpemVkIGJ5IGEgY29uY3VycmVudAotICAgICMgcHJvY2VzcyBvciB0aHJlYWQgKGluIGNhc2UgbXVsdGktcHJvY2VzcyBzaGFyZGluZyBpcyBub3QgdXNlZCkuCi0gICAgIyBUT0RPKGNyYnVnLmNvbS83NjIwMDUpOiBDb25zaWRlciB1c2luZyBhIGRpZmZlcmVudCBpbXBsZW1lbnRpb247IHJlbHlpbmcKLSAgICAjIG9uIG1hdGNoaW5nIHRoZSBzdHJpbmcgcmVwcmVzYW50aW9uIG9mIHRoZSBwcm9jZXNzIHN0YXJ0IHRpbWUgc2VlbXMKLSAgICAjIGZyYWdpbGUuCi0gICAgcGlkX2Zvcl9sb2NrID0gRm9yd2FyZGVyLl9HZXRQaWRGb3JMb2NrKCkKLSAgICBmZCA9IG9zLm9wZW4oRm9yd2FyZGVyLl9MT0NLX1BBVEgsIG9zLk9fUkRXUiB8IG9zLk9fQ1JFQVQpCi0gICAgd2l0aCBvcy5mZG9wZW4oZmQsICdyKycpIGFzIHBpZF9maWxlOgotICAgICAgcGlkX3dpdGhfc3RhcnRfdGltZSA9IHBpZF9maWxlLnJlYWRsaW5lKCkKLSAgICAgIGlmIHBpZF93aXRoX3N0YXJ0X3RpbWU6Ci0gICAgICAgIChwaWQsIHByb2Nlc3Nfc3RhcnRfdGltZSkgPSBwaWRfd2l0aF9zdGFydF90aW1lLnNwbGl0KCc6JykKLSAgICAgICAgaWYgcGlkID09IHN0cihwaWRfZm9yX2xvY2spOgotICAgICAgICAgIGlmIHByb2Nlc3Nfc3RhcnRfdGltZSA9PSBzdHIoX0dldFByb2Nlc3NTdGFydFRpbWUocGlkX2Zvcl9sb2NrKSk6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgIHNlbGYuX0tpbGxIb3N0TG9ja2VkKCkKLSAgICAgIHBpZF9maWxlLnNlZWsoMCkKLSAgICAgIHBpZF9maWxlLndyaXRlKAotICAgICAgICAgICclczolcycgJSAocGlkX2Zvcl9sb2NrLCBzdHIoX0dldFByb2Nlc3NTdGFydFRpbWUocGlkX2Zvcl9sb2NrKSkpKQotICAgICAgcGlkX2ZpbGUudHJ1bmNhdGUoKQotCi0gIGRlZiBfSW5pdERldmljZUxvY2tlZChzZWxmLCBkZXZpY2UsIHRvb2wpOgotICAgICIiIkluaXRpYWxpemVzIHRoZSBkZXZpY2VfZm9yd2FyZGVyIGRhZW1vbiBmb3IgYSBzcGVjaWZpYyBkZXZpY2UgKG9uY2UpLgotCi0gICAgTm90ZSB0aGF0IHRoZSBnbG9iYWwgbG9jayBtdXN0IGJlIGFjcXVpcmVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiBUaGlzCi0gICAgbWV0aG9kIGtpbGxzIGFueSBleGlzdGluZyBkZXZpY2VfZm9yd2FyZGVyIGRhZW1vbiBvbiB0aGUgZGV2aWNlIHRoYXQgY291bGQKLSAgICBiZSBzdGFsZSwgcHVzaGVzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgZGFlbW9uICh0byB0aGUgZGV2aWNlKSBhbmQgc3RhcnRzCi0gICAgaXQuCi0KLSAgICBBcmdzOgotICAgICAgZGV2aWNlOiBBIERldmljZVV0aWxzIGluc3RhbmNlLgotICAgICAgdG9vbDogVG9vbCBjbGFzcyB0byB1c2UgdG8gZ2V0IHdyYXBwZXIsIGlmIG5lY2Vzc2FyeSwgZm9yIGV4ZWN1dGluZyB0aGUKLSAgICAgICAgICAgIGZvcndhcmRlciAoc2VlIHZhbGdyaW5kX3Rvb2xzLnB5KS4KLSAgICAiIiIKLSAgICBkZXZpY2Vfc2VyaWFsID0gc3RyKGRldmljZSkKLSAgICBpZiBkZXZpY2Vfc2VyaWFsIGluIHNlbGYuX2luaXRpYWxpemVkX2RldmljZXM6Ci0gICAgICByZXR1cm4KLSAgICB0cnk6Ci0gICAgICBzZWxmLl9LaWxsRGV2aWNlTG9ja2VkKGRldmljZSwgdG9vbCkKLSAgICBleGNlcHQgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3I6Ci0gICAgICBsb2dnZXIud2FybmluZygnRmFpbGVkIHRvIGtpbGwgZGV2aWNlIGZvcndhcmRlci4gUmVib290aW5nLicpCi0gICAgICBkZXZpY2UuUmVib290KCkKLSAgICBmb3J3YXJkZXJfZGV2aWNlX3BhdGhfb25faG9zdCA9IGRldmlsX2Vudi5jb25maWcuRmV0Y2hQYXRoKAotICAgICAgICAnZm9yd2FyZGVyX2RldmljZScsIGRldmljZT1kZXZpY2UpCi0gICAgZm9yd2FyZGVyX2RldmljZV9wYXRoX29uX2RldmljZSA9ICgKLSAgICAgICAgRm9yd2FyZGVyLl9ERVZJQ0VfRk9SV0FSREVSX0ZPTERFUgotICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZvcndhcmRlcl9kZXZpY2VfcGF0aF9vbl9ob3N0KQotICAgICAgICBlbHNlIEZvcndhcmRlci5fREVWSUNFX0ZPUldBUkRFUl9QQVRIKQotICAgIGRldmljZS5QdXNoQ2hhbmdlZEZpbGVzKFsoCi0gICAgICAgIGZvcndhcmRlcl9kZXZpY2VfcGF0aF9vbl9ob3N0LAotICAgICAgICBmb3J3YXJkZXJfZGV2aWNlX3BhdGhfb25fZGV2aWNlKV0pCi0KLSAgICBjbWQgPSBbRm9yd2FyZGVyLl9ERVZJQ0VfRk9SV0FSREVSX1BBVEhdCi0gICAgd3JhcHBlciA9IHRvb2wuR2V0VXRpbFdyYXBwZXIoKQotICAgIGlmIHdyYXBwZXI6Ci0gICAgICBjbWQuaW5zZXJ0KDAsIHdyYXBwZXIpCi0gICAgZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgY21kLCBlbnY9eydMRF9MSUJSQVJZX1BBVEgnOiBGb3J3YXJkZXIuX0RFVklDRV9GT1JXQVJERVJfRk9MREVSfSwKLSAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgc2VsZi5faW5pdGlhbGl6ZWRfZGV2aWNlcy5hZGQoZGV2aWNlX3NlcmlhbCkKLQotICBAc3RhdGljbWV0aG9kCi0gIGRlZiBLaWxsSG9zdCgpOgotICAgICIiIktpbGxzIHRoZSBmb3J3YXJkZXIgcHJvY2VzcyBydW5uaW5nIG9uIHRoZSBob3N0LiIiIgotICAgIHdpdGggX0ZpbGVMb2NrKEZvcndhcmRlci5fTE9DS19QQVRIKToKLSAgICAgIEZvcndhcmRlci5fR2V0SW5zdGFuY2VMb2NrZWQoTm9uZSkuX0tpbGxIb3N0TG9ja2VkKCkKLQotICBkZWYgX0tpbGxIb3N0TG9ja2VkKHNlbGYpOgotICAgICIiIktpbGxzIHRoZSBmb3J3YXJkZXIgcHJvY2VzcyBydW5uaW5nIG9uIHRoZSBob3N0LgotCi0gICAgTm90ZSB0aGF0IHRoZSBnbG9iYWwgbG9jayBtdXN0IGJlIGFjcXVpcmVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLgotICAgICIiIgotICAgIGxvZ2dlci5pbmZvKCdLaWxsaW5nIGhvc3RfZm9yd2FyZGVyLicpCi0gICAgdHJ5OgotICAgICAga2lsbF9jbWQgPSBbc2VsZi5faG9zdF9mb3J3YXJkZXJfcGF0aCwgJy0ta2lsbC1zZXJ2ZXInXQotICAgICAgKGV4aXRfY29kZSwgb3V0cHV0KSA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0V2l0aFRpbWVvdXQoCi0gICAgICAgICAga2lsbF9jbWQsIEZvcndhcmRlci5fVElNRU9VVCkKLSAgICAgIGlmIGV4aXRfY29kZSAhPSAwOgotICAgICAgICBsb2dnZXIud2FybmluZygnRm9yd2FyZGVyIHVuYWJsZSB0byBzaHV0IGRvd246XG4lcycsIG91dHB1dCkKLSAgICAgICAga2lsbF9jbWQgPSBbJ3BraWxsJywgJy05JywgJ2hvc3RfZm9yd2FyZGVyJ10KLSAgICAgICAgKGV4aXRfY29kZSwgb3V0cHV0KSA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0V2l0aFRpbWVvdXQoCi0gICAgICAgICAgICBraWxsX2NtZCwgRm9yd2FyZGVyLl9USU1FT1VUKQotICAgICAgICBpZiBleGl0X2NvZGUgIT0gMDoKLSAgICAgICAgICByYWlzZSBIb3N0Rm9yd2FyZGVyRXJyb3IoCi0gICAgICAgICAgICAgICclcyBleGl0ZWQgd2l0aCAlZDpcbiVzJyAlICgKLSAgICAgICAgICAgICAgICAgIHNlbGYuX2hvc3RfZm9yd2FyZGVyX3BhdGgsCi0gICAgICAgICAgICAgICAgICBleGl0X2NvZGUsCi0gICAgICAgICAgICAgICAgICAnXG4nLmpvaW4ob3V0cHV0KSBpZiBpc2luc3RhbmNlKG91dHB1dCwgbGlzdCkgZWxzZSBvdXRwdXQpKQotICAgIGV4Y2VwdCBjbWRfaGVscGVyLlRpbWVvdXRFcnJvciBhcyBlOgotICAgICAgcmFpc2UgSG9zdEZvcndhcmRlckVycm9yKAotICAgICAgICAgICdgJXNgIHRpbWVkIG91dDpcbiVzJyAlICgnICcuam9pbihraWxsX2NtZCksIGUub3V0cHV0KSkKLQotICBAc3RhdGljbWV0aG9kCi0gIGRlZiBLaWxsRGV2aWNlKGRldmljZSwgdG9vbD1Ob25lKToKLSAgICAiIiJLaWxscyB0aGUgZm9yd2FyZGVyIHByb2Nlc3MgcnVubmluZyBvbiB0aGUgZGV2aWNlLgotCi0gICAgQXJnczoKLSAgICAgIGRldmljZTogSW5zdGFuY2Ugb2YgRGV2aWNlVXRpbHMgZm9yIHRhbGtpbmcgdG8gdGhlIGRldmljZS4KLSAgICAgIHRvb2w6IFdyYXBwZXIgdG9vbCAoZS5nLiB2YWxncmluZCkgdGhhdCBjYW4gYmUgdXNlZCB0byBleGVjdXRlIHRoZSBkZXZpY2UKLSAgICAgICAgICAgIGZvcndhcmRlciAoc2VlIHZhbGdyaW5kX3Rvb2xzLnB5KS4KLSAgICAiIiIKLSAgICB3aXRoIF9GaWxlTG9jayhGb3J3YXJkZXIuX0xPQ0tfUEFUSCk6Ci0gICAgICBGb3J3YXJkZXIuX0dldEluc3RhbmNlTG9ja2VkKE5vbmUpLl9LaWxsRGV2aWNlTG9ja2VkKAotICAgICAgICAgIGRldmljZSwgdG9vbCBvciBiYXNlX3Rvb2wuQmFzZVRvb2woKSkKLQotICBkZWYgX0tpbGxEZXZpY2VMb2NrZWQoc2VsZiwgZGV2aWNlLCB0b29sKToKLSAgICAiIiJLaWxscyB0aGUgZm9yd2FyZGVyIHByb2Nlc3MgcnVubmluZyBvbiB0aGUgZGV2aWNlLgotCi0gICAgTm90ZSB0aGF0IHRoZSBnbG9iYWwgbG9jayBtdXN0IGJlIGFjcXVpcmVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLgotCi0gICAgQXJnczoKLSAgICAgIGRldmljZTogSW5zdGFuY2Ugb2YgRGV2aWNlVXRpbHMgZm9yIHRhbGtpbmcgdG8gdGhlIGRldmljZS4KLSAgICAgIHRvb2w6IFdyYXBwZXIgdG9vbCAoZS5nLiB2YWxncmluZCkgdGhhdCBjYW4gYmUgdXNlZCB0byBleGVjdXRlIHRoZSBkZXZpY2UKLSAgICAgICAgICAgIGZvcndhcmRlciAoc2VlIHZhbGdyaW5kX3Rvb2xzLnB5KS4KLSAgICAiIiIKLSAgICBsb2dnZXIuaW5mbygnS2lsbGluZyBkZXZpY2VfZm9yd2FyZGVyLicpCi0gICAgc2VsZi5faW5pdGlhbGl6ZWRfZGV2aWNlcy5kaXNjYXJkKGRldmljZS5zZXJpYWwpCi0gICAgaWYgbm90IGRldmljZS5GaWxlRXhpc3RzKEZvcndhcmRlci5fREVWSUNFX0ZPUldBUkRFUl9QQVRIKToKLSAgICAgIHJldHVybgotCi0gICAgY21kID0gW0ZvcndhcmRlci5fREVWSUNFX0ZPUldBUkRFUl9QQVRILCAnLS1raWxsLXNlcnZlciddCi0gICAgd3JhcHBlciA9IHRvb2wuR2V0VXRpbFdyYXBwZXIoKQotICAgIGlmIHdyYXBwZXI6Ci0gICAgICBjbWQuaW5zZXJ0KDAsIHdyYXBwZXIpCi0gICAgZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgY21kLCBlbnY9eydMRF9MSUJSQVJZX1BBVEgnOiBGb3J3YXJkZXIuX0RFVklDRV9GT1JXQVJERVJfRk9MREVSfSwKLSAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2luc3RhbGxfY29tbWFuZHMucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2luc3RhbGxfY29tbWFuZHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZGE4NjkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9pbnN0YWxsX2NvbW1hbmRzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3MKLWltcG9ydCBwb3NpeHBhdGgKLQotZnJvbSBkZXZpbCBpbXBvcnQgZGV2aWxfZW52Ci1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9lcnJvcnMKLWZyb20gZGV2aWwuYW5kcm9pZC5jb25zdGFudHMgaW1wb3J0IGZpbGVfc3lzdGVtCi0KLUJJTl9ESVIgPSAnJXMvYmluJyAlIGZpbGVfc3lzdGVtLlRFU1RfRVhFQ1VUQUJMRV9ESVIKLV9GUkFNRVdPUktfRElSID0gJyVzL2ZyYW1ld29yaycgJSBmaWxlX3N5c3RlbS5URVNUX0VYRUNVVEFCTEVfRElSCi0KLV9DT01NQU5EUyA9IHsKLSAgJ3VuemlwJzogJ29yZy5jaHJvbWl1bS5hbmRyb2lkLmNvbW1hbmRzLnVuemlwLlVuemlwJywKLX0KLQotX1NIRUxMX0NPTU1BTkRfRk9STUFUID0gKAotIiIiIyEvc3lzdGVtL2Jpbi9zaAotYmFzZT0lcwotZXhwb3J0IENMQVNTUEFUSD0kYmFzZS9mcmFtZXdvcmsvY2hyb21pdW1fY29tbWFuZHMuamFyCi1leGVjIGFwcF9wcm9jZXNzICRiYXNlL2JpbiAlcyAkQAotIiIiKQotCi0KLWRlZiBJbnN0YWxsZWQoZGV2aWNlKToKLSAgcGF0aHMgPSBbcG9zaXhwYXRoLmpvaW4oQklOX0RJUiwgYykgZm9yIGMgaW4gX0NPTU1BTkRTXQotICBwYXRocy5hcHBlbmQocG9zaXhwYXRoLmpvaW4oX0ZSQU1FV09SS19ESVIsICdjaHJvbWl1bV9jb21tYW5kcy5qYXInKSkKLSAgcmV0dXJuIGRldmljZS5QYXRoRXhpc3RzKHBhdGhzKQotCi0KLWRlZiBJbnN0YWxsQ29tbWFuZHMoZGV2aWNlKToKLSAgaWYgZGV2aWNlLklzVXNlckJ1aWxkKCk6Ci0gICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IoCi0gICAgICAgICdjaHJvbWl1bV9jb21tYW5kcyBjdXJyZW50bHkgcmVxdWlyZXMgYSB1c2VyZGVidWcgYnVpbGQuJywKLSAgICAgICAgZGV2aWNlX3NlcmlhbD1kZXZpY2UuYWRiLkdldERldmljZVNlcmlhbCgpKQotCi0gIGNocm9taXVtX2NvbW1hbmRzX2phcl9wYXRoID0gZGV2aWxfZW52LmNvbmZpZy5GZXRjaFBhdGgoJ2Nocm9taXVtX2NvbW1hbmRzJykKLSAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNocm9taXVtX2NvbW1hbmRzX2phcl9wYXRoKToKLSAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgJyVzIG5vdCBmb3VuZC4gUGxlYXNlIGJ1aWxkIGNocm9taXVtX2NvbW1hbmRzLicKLSAgICAgICAgJSBjaHJvbWl1bV9jb21tYW5kc19qYXJfcGF0aCkKLQotICBkZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgWydta2RpcicsICctcCcsIEJJTl9ESVIsIF9GUkFNRVdPUktfRElSXSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gIGZvciBjb21tYW5kLCBtYWluX2NsYXNzIGluIF9DT01NQU5EUy5pdGVyaXRlbXMoKToKLSAgICBzaGVsbF9jb21tYW5kID0gX1NIRUxMX0NPTU1BTkRfRk9STUFUICUgKAotICAgICAgICBmaWxlX3N5c3RlbS5URVNUX0VYRUNVVEFCTEVfRElSLCBtYWluX2NsYXNzKQotICAgIHNoZWxsX2ZpbGUgPSAnJXMvJXMnICUgKEJJTl9ESVIsIGNvbW1hbmQpCi0gICAgZGV2aWNlLldyaXRlRmlsZShzaGVsbF9maWxlLCBzaGVsbF9jb21tYW5kKQotICAgIGRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgIFsnY2htb2QnLCAnNzU1Jywgc2hlbGxfZmlsZV0sIGNoZWNrX3JldHVybj1UcnVlKQotCi0gIGRldmljZS5hZGIuUHVzaCgKLSAgICAgIGNocm9taXVtX2NvbW1hbmRzX2phcl9wYXRoLAotICAgICAgJyVzL2Nocm9taXVtX2NvbW1hbmRzLmphcicgJSBfRlJBTUVXT1JLX0RJUikKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvbG9nY2F0X21vbml0b3IucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2xvZ2NhdF9tb25pdG9yLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDkzMjBiLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvbG9nY2F0X21vbml0b3IucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNjggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLQotaW1wb3J0IGVycm5vCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzaHV0aWwKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHRpbWUKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZWNvcmF0b3JzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9lcnJvcnMKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IGFkYl93cmFwcGVyCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCByZXJhaXNlcl90aHJlYWQKLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotY2xhc3MgTG9nY2F0TW9uaXRvcihvYmplY3QpOgotCi0gIF9SRUNPUkRfSVRFUl9USU1FT1VUID0gMC4yCi0gIF9SRUNPUkRfVEhSRUFEX0pPSU5fV0FJVCA9IDUuMAotICBfV0FJVF9USU1FID0gMC4yCi0gIFRIUkVBRFRJTUVfUkVfRk9STUFUID0gKAotICAgICAgcicoP1A8ZGF0ZT5cUyopICsoP1A8dGltZT5cUyopICsoP1A8cHJvY19pZD4lcykgKyg/UDx0aHJlYWRfaWQ+JXMpICsnCi0gICAgICByJyg/UDxsb2dfbGV2ZWw+JXMpICsoP1A8Y29tcG9uZW50PiVzKSAqOiArKD9QPG1lc3NhZ2U+JXMpJCcpCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGFkYiwgY2xlYXI9VHJ1ZSwgZmlsdGVyX3NwZWNzPU5vbmUsIG91dHB1dF9maWxlPU5vbmUsCi0gICAgICAgICAgICAgICB0cmFuc2Zvcm1fZnVuYz1Ob25lKToKLSAgICAiIiJDcmVhdGUgYSBMb2djYXRNb25pdG9yIGluc3RhbmNlLgotCi0gICAgQXJnczoKLSAgICAgIGFkYjogQW4gaW5zdGFuY2Ugb2YgYWRiX3dyYXBwZXIuQWRiV3JhcHBlci4KLSAgICAgIGNsZWFyOiBJZiBUcnVlLCBjbGVhciB0aGUgbG9nY2F0IHdoZW4gbW9uaXRvcmluZyBzdGFydHMuCi0gICAgICBmaWx0ZXJfc3BlY3M6IEFuIG9wdGlvbmFsIGxpc3Qgb2YgJzx0YWc+Wzpwcmlvcml0eV0nIHN0cmluZ3MuCi0gICAgICBvdXRwdXRfZmlsZTogRmlsZSBwYXRoIHRvIHNhdmUgcmVjb3JkZWQgbG9nY2F0LgotICAgICAgdHJhbnNmb3JtX2Z1bmM6IEFuIG9wdGlvbmFsIHVuYXJ5IGNhbGxhYmxlIHRoYXQgdGFrZXMgYW5kIHJldHVybnMKLSAgICAgICAgYSBsaXN0IG9mIGxpbmVzLCBwb3NzaWJseSB0cmFuc2Zvcm1pbmcgdGhlbSBpbiB0aGUgcHJvY2Vzcy4KLSAgICAiIiIKLSAgICBpZiBpc2luc3RhbmNlKGFkYiwgYWRiX3dyYXBwZXIuQWRiV3JhcHBlcik6Ci0gICAgICBzZWxmLl9hZGIgPSBhZGIKLSAgICBlbHNlOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5zdXBwb3J0ZWQgdHlwZSBwYXNzZWQgZm9yIGFyZ3VtZW50ICJkZXZpY2UiJykKLSAgICBzZWxmLl9jbGVhciA9IGNsZWFyCi0gICAgc2VsZi5fZmlsdGVyX3NwZWNzID0gZmlsdGVyX3NwZWNzCi0gICAgc2VsZi5fb3V0cHV0X2ZpbGUgPSBvdXRwdXRfZmlsZQotICAgIHNlbGYuX3JlY29yZF9maWxlID0gTm9uZQotICAgIHNlbGYuX3JlY29yZF9maWxlX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0gICAgc2VsZi5fcmVjb3JkX3RocmVhZCA9IE5vbmUKLSAgICBzZWxmLl9zdG9wX3JlY29yZGluZ19ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCi0gICAgc2VsZi5fdHJhbnNmb3JtX2Z1bmMgPSB0cmFuc2Zvcm1fZnVuYwotCi0gIEBwcm9wZXJ0eQotICBkZWYgb3V0cHV0X2ZpbGUoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX291dHB1dF9maWxlCi0KLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRSZXRyaWVzRGVmYXVsdHMoMTAsIDApCi0gIGRlZiBXYWl0Rm9yKHNlbGYsIHN1Y2Nlc3NfcmVnZXgsIGZhaWx1cmVfcmVnZXg9Tm9uZSwgdGltZW91dD1Ob25lLAotICAgICAgICAgICAgICByZXRyaWVzPU5vbmUpOgotICAgICIiIldhaXQgZm9yIGEgbWF0Y2hpbmcgbG9nY2F0IGxpbmUgb3IgdW50aWwgYSB0aW1lb3V0IG9jY3Vycy4KLQotICAgIFRoaXMgd2lsbCBhdHRlbXB0IHRvIG1hdGNoIGxpbmVzIGluIHRoZSBsb2djYXQgYWdhaW5zdCBib3RoIHxzdWNjZXNzX3JlZ2V4fAotICAgIGFuZCB8ZmFpbHVyZV9yZWdleHwgKGlmIHByb3ZpZGVkKS4gTm90ZSB0aGF0IHRoaXMgY2FsbHMgcmUuc2VhcmNoIG9uIGVhY2gKLSAgICBsb2djYXQgbGluZSwgbm90IHJlLm1hdGNoLCBzbyB0aGUgcHJvdmlkZWQgcmVndWxhciBleHByZXNzaW9ucyBkb24ndCBoYXZlCi0gICAgdG8gbWF0Y2ggYW4gZW50aXJlIGxpbmUuCi0KLSAgICBBcmdzOgotICAgICAgc3VjY2Vzc19yZWdleDogVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzZWFyY2ggZm9yLgotICAgICAgZmFpbHVyZV9yZWdleDogQW4gb3B0aW9uYWwgcmVndWxhciBleHByZXNzaW9uIHRoYXQsIGlmIGhpdCwgY2F1c2VzIHRoaXMKLSAgICAgICAgdG8gc3RvcCBsb29raW5nIGZvciBhIG1hdGNoLiBDYW4gYmUgTm9uZS4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBBIG1hdGNoIG9iamVjdCBpZiB8c3VjY2Vzc19yZWdleHwgbWF0Y2hlcyBhIHBhcnQgb2YgYSBsb2djYXQgbGluZSwgb3IKLSAgICAgIE5vbmUgaWYgfGZhaWx1cmVfcmVnZXh8IG1hdGNoZXMgYSBwYXJ0IG9mIGEgbG9nY2F0IGxpbmUuCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIG9uIGxvZ2NhdCBmYWlsdXJlIChOT1Qgb24gYSB8ZmFpbHVyZV9yZWdleHwgbWF0Y2gpLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBpZiBubyBsb2djYXQgbGluZSBtYXRjaGluZyBlaXRoZXIgfHN1Y2Nlc3NfcmVnZXh8IG9yCi0gICAgICAgIHxmYWlsdXJlX3JlZ2V4fCBpcyBmb3VuZCBpbiB8dGltZW91dHwgc2Vjb25kcy4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3IgaWYgdGhlIGRldmljZSBiZWNvbWVzIHVucmVhY2hhYmxlLgotICAgICAgTG9nY2F0TW9uaXRvckNvbW1hbmRFcnJvciB3aGVuIGNhbGxpbmcgfFdhaXRGb3J8IHdoaWxlIG5vdCByZWNvcmRpbmcKLSAgICAgICAgbG9nY2F0LgotICAgICIiIgotICAgIGlmIHNlbGYuX3JlY29yZF90aHJlYWQgaXMgTm9uZToKLSAgICAgIHJhaXNlIExvZ2NhdE1vbml0b3JDb21tYW5kRXJyb3IoCi0gICAgICAgICAgJ011c3QgYmUgcmVjb3JkaW5nIGxvZ2NhdCB3aGVuIGNhbGxpbmcgfFdhaXRGb3J8JywKLSAgICAgICAgICBkZXZpY2Vfc2VyaWFsPXN0cihzZWxmLl9hZGIpKQotICAgIGlmIGlzaW5zdGFuY2Uoc3VjY2Vzc19yZWdleCwgYmFzZXN0cmluZyk6Ci0gICAgICBzdWNjZXNzX3JlZ2V4ID0gcmUuY29tcGlsZShzdWNjZXNzX3JlZ2V4KQotICAgIGlmIGlzaW5zdGFuY2UoZmFpbHVyZV9yZWdleCwgYmFzZXN0cmluZyk6Ci0gICAgICBmYWlsdXJlX3JlZ2V4ID0gcmUuY29tcGlsZShmYWlsdXJlX3JlZ2V4KQotCi0gICAgbG9nZ2VyLmRlYnVnKCdXYWl0aW5nICVkIHNlY29uZHMgZm9yICIlcyInLCB0aW1lb3V0LCBzdWNjZXNzX3JlZ2V4LnBhdHRlcm4pCi0KLSAgICAjIE5PVEUgVGhpcyB3aWxsIGNvbnRpbnVlIGxvb3BpbmcgdW50aWw6Ci0gICAgIyAgLSBzdWNjZXNzX3JlZ2V4IG1hdGNoZXMgYSBsaW5lLCBpbiB3aGljaCBjYXNlIHRoZSBtYXRjaCBvYmplY3QgaXMKLSAgICAjICAgIHJldHVybmVkLgotICAgICMgIC0gZmFpbHVyZV9yZWdleCBtYXRjaGVzIGEgbGluZSwgaW4gd2hpY2ggY2FzZSBOb25lIGlzIHJldHVybmVkCi0gICAgIyAgLSB0aGUgdGltZW91dCBpcyBoaXQsIGluIHdoaWNoIGNhc2UgYSBDb21tYW5kVGltZW91dEVycm9yIGlzIHJhaXNlZC4KLSAgICB3aXRoIG9wZW4oc2VsZi5fcmVjb3JkX2ZpbGUubmFtZSwgJ3InKSBhcyBmOgotICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQotICAgICAgICBpZiBsaW5lOgotICAgICAgICAgIG0gPSBzdWNjZXNzX3JlZ2V4LnNlYXJjaChsaW5lKQotICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICByZXR1cm4gbQotICAgICAgICAgIGlmIGZhaWx1cmVfcmVnZXggYW5kIGZhaWx1cmVfcmVnZXguc2VhcmNoKGxpbmUpOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICB0aW1lLnNsZWVwKHNlbGYuX1dBSVRfVElNRSkKLQotICBkZWYgRmluZEFsbChzZWxmLCBtZXNzYWdlX3JlZ2V4LCBwcm9jX2lkPU5vbmUsIHRocmVhZF9pZD1Ob25lLCBsb2dfbGV2ZWw9Tm9uZSwKLSAgICAgICAgICAgICAgY29tcG9uZW50PU5vbmUpOgotICAgICIiIkZpbmRzIGFsbCBsaW5lcyBpbiB0aGUgbG9nY2F0IHRoYXQgbWF0Y2ggdGhlIHByb3ZpZGVkIGNvbnN0cmFpbnRzLgotCi0gICAgQXJnczoKLSAgICAgIG1lc3NhZ2VfcmVnZXg6IFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB0aGUgPG1lc3NhZ2U+IHNlY3Rpb24gbXVzdAotICAgICAgICBtYXRjaC4KLSAgICAgIHByb2NfaWQ6IFRoZSBwcm9jZXNzIElEIHRvIG1hdGNoLiBJZiBOb25lLCBtYXRjaGVzIGFueSBwcm9jZXNzIElELgotICAgICAgdGhyZWFkX2lkOiBUaGUgdGhyZWFkIElEIHRvIG1hdGNoLiBJZiBOb25lLCBtYXRjaGVzIGFueSB0aHJlYWQgSUQuCi0gICAgICBsb2dfbGV2ZWw6IFRoZSBsb2cgbGV2ZWwgdG8gbWF0Y2guIElmIE5vbmUsIG1hdGNoZXMgYW55IGxvZyBsZXZlbC4KLSAgICAgIGNvbXBvbmVudDogVGhlIGNvbXBvbmVudCB0byBtYXRjaC4gSWYgTm9uZSwgbWF0Y2hlcyBhbnkgY29tcG9uZW50LgotCi0gICAgUmFpc2VzOgotICAgICAgTG9nY2F0TW9uaXRvckNvbW1hbmRFcnJvciB3aGVuIGNhbGxpbmcgfEZpbmRBbGx8IGJlZm9yZSByZWNvcmRpbmcgbG9nY2F0LgotCi0gICAgWWllbGRzOgotICAgICAgQSBtYXRjaCBvYmplY3QgZm9yIGVhY2ggbWF0Y2hpbmcgbGluZSBpbiB0aGUgbG9nY2F0LiBUaGUgbWF0Y2ggb2JqZWN0Ci0gICAgICB3aWxsIGFsd2F5cyBjb250YWluLCBpbiBhZGRpdGlvbiB0byBncm91cHMgZGVmaW5lZCBpbiB8bWVzc2FnZV9yZWdleHwsCi0gICAgICB0aGUgZm9sbG93aW5nIG5hbWVkIGdyb3VwczogJ2RhdGUnLCAndGltZScsICdwcm9jX2lkJywgJ3RocmVhZF9pZCcsCi0gICAgICAnbG9nX2xldmVsJywgJ2NvbXBvbmVudCcsIGFuZCAnbWVzc2FnZScuCi0gICAgIiIiCi0gICAgaWYgc2VsZi5fcmVjb3JkX2ZpbGUgaXMgTm9uZToKLSAgICAgIHJhaXNlIExvZ2NhdE1vbml0b3JDb21tYW5kRXJyb3IoCi0gICAgICAgICAgJ011c3QgaGF2ZSByZWNvcmRlZCBvciBiZSByZWNvcmRpbmcgYSBsb2djYXQgdG8gY2FsbCB8RmluZEFsbHwnLAotICAgICAgICAgIGRldmljZV9zZXJpYWw9c3RyKHNlbGYuX2FkYikpCi0gICAgaWYgcHJvY19pZCBpcyBOb25lOgotICAgICAgcHJvY19pZCA9IHInXGQrJwotICAgIGlmIHRocmVhZF9pZCBpcyBOb25lOgotICAgICAgdGhyZWFkX2lkID0gcidcZCsnCi0gICAgaWYgbG9nX2xldmVsIGlzIE5vbmU6Ci0gICAgICBsb2dfbGV2ZWwgPSByJ1tWRElXRUZdJwotICAgIGlmIGNvbXBvbmVudCBpcyBOb25lOgotICAgICAgY29tcG9uZW50ID0gcidbXlxzOl0rJwotICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKLSAgICB0aHJlYWR0aW1lX3JlID0gcmUuY29tcGlsZSgKLSAgICAgICAgdHlwZShzZWxmKS5USFJFQURUSU1FX1JFX0ZPUk1BVCAlICgKLSAgICAgICAgICAgIHByb2NfaWQsIHRocmVhZF9pZCwgbG9nX2xldmVsLCBjb21wb25lbnQsIG1lc3NhZ2VfcmVnZXgpKQotCi0gICAgd2l0aCBvcGVuKHNlbGYuX3JlY29yZF9maWxlLm5hbWUsICdyJykgYXMgZjoKLSAgICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgIG0gPSByZS5tYXRjaCh0aHJlYWR0aW1lX3JlLCBsaW5lKQotICAgICAgICBpZiBtOgotICAgICAgICAgIHlpZWxkIG0KLQotICBkZWYgX1N0YXJ0UmVjb3JkaW5nKHNlbGYpOgotICAgICIiIlN0YXJ0cyByZWNvcmRpbmcgbG9nY2F0IHRvIGZpbGUuCi0KLSAgICBGdW5jdGlvbiBzcGF3bnMgYSB0aHJlYWQgdGhhdCByZWNvcmRzIGxvZ2NhdCB0byBmaWxlIGFuZCB3aWxsIG5vdCBkaWUKLSAgICB1bnRpbCB8U3RvcFJlY29yZGluZ3wgaXMgY2FsbGVkLgotICAgICIiIgotICAgIGRlZiByZWNvcmRfdG9fZmlsZSgpOgotICAgICAgIyBXcml0ZSB0aGUgbG9nIHdpdGggbGluZSBidWZmZXJpbmcgc28gdGhlIGNvbnN1bWVyIHNlZXMgZWFjaCBpbmRpdmlkdWFsCi0gICAgICAjIGxpbmUuCi0gICAgICBmb3IgZGF0YSBpbiBzZWxmLl9hZGIuTG9nY2F0KGZpbHRlcl9zcGVjcz1zZWxmLl9maWx0ZXJfc3BlY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2NhdF9mb3JtYXQ9J3RocmVhZHRpbWUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyX3RpbWVvdXQ9c2VsZi5fUkVDT1JEX0lURVJfVElNRU9VVCk6Ci0gICAgICAgIGlmIHNlbGYuX3N0b3BfcmVjb3JkaW5nX2V2ZW50LmlzU2V0KCk6Ci0gICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgaWYgZGF0YSBpcyBOb25lOgotICAgICAgICAgICMgTG9nY2F0IGNhbiB5aWVsZCBOb25lIGlmIHRoZSBpdGVyX3RpbWVvdXQgaXMgaGl0LgotICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgd2l0aCBzZWxmLl9yZWNvcmRfZmlsZV9sb2NrOgotICAgICAgICAgIGlmIHNlbGYuX3JlY29yZF9maWxlIGFuZCBub3Qgc2VsZi5fcmVjb3JkX2ZpbGUuY2xvc2VkOgotICAgICAgICAgICAgaWYgc2VsZi5fdHJhbnNmb3JtX2Z1bmM6Ci0gICAgICAgICAgICAgIGRhdGEgPSAnXG4nLmpvaW4oc2VsZi5fdHJhbnNmb3JtX2Z1bmMoW2RhdGFdKSkKLSAgICAgICAgICAgIHNlbGYuX3JlY29yZF9maWxlLndyaXRlKGRhdGEgKyAnXG4nKQotCi0gICAgc2VsZi5fc3RvcF9yZWNvcmRpbmdfZXZlbnQuY2xlYXIoKQotICAgIGlmIG5vdCBzZWxmLl9yZWNvcmRfdGhyZWFkOgotICAgICAgc2VsZi5fcmVjb3JkX3RocmVhZCA9IHJlcmFpc2VyX3RocmVhZC5SZXJhaXNlclRocmVhZChyZWNvcmRfdG9fZmlsZSkKLSAgICAgIHNlbGYuX3JlY29yZF90aHJlYWQuc3RhcnQoKQotCi0gIGRlZiBfU3RvcFJlY29yZGluZyhzZWxmKToKLSAgICAiIiJGaW5pc2ggcmVjb3JkaW5nIGxvZ2NhdC4iIiIKLSAgICBpZiBzZWxmLl9yZWNvcmRfdGhyZWFkOgotICAgICAgc2VsZi5fc3RvcF9yZWNvcmRpbmdfZXZlbnQuc2V0KCkKLSAgICAgIHNlbGYuX3JlY29yZF90aHJlYWQuam9pbih0aW1lb3V0PXNlbGYuX1JFQ09SRF9USFJFQURfSk9JTl9XQUlUKQotICAgICAgc2VsZi5fcmVjb3JkX3RocmVhZC5SZXJhaXNlSWZFeGNlcHRpb24oKQotICAgICAgc2VsZi5fcmVjb3JkX3RocmVhZCA9IE5vbmUKLQotICBkZWYgU3RhcnQoc2VsZik6Ci0gICAgIiIiU3RhcnRzIHRoZSBsb2djYXQgbW9uaXRvci4KLQotICAgIENsZWFycyB0aGUgbG9nY2F0IGlmIHxjbGVhcnwgd2FzIHNldCBpbiB8X19pbml0X198LgotICAgICIiIgotICAgIGlmIHNlbGYuX2NsZWFyOgotICAgICAgc2VsZi5fYWRiLkxvZ2NhdChjbGVhcj1UcnVlKQotICAgIGlmIG5vdCBzZWxmLl9yZWNvcmRfZmlsZToKLSAgICAgIHNlbGYuX3JlY29yZF9maWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J2EnLCBidWZzaXplPTEpCi0gICAgc2VsZi5fU3RhcnRSZWNvcmRpbmcoKQotCi0gIGRlZiBTdG9wKHNlbGYpOgotICAgICIiIlN0b3BzIHRoZSBsb2djYXQgbW9uaXRvci4KLQotICAgIFN0b3BzIHJlY29yZGluZyB0aGUgbG9nY2F0LiBDb3BpZXMgY3VycmVudGx5IHJlY29yZGVkIGxvZ2NhdCB0bwotICAgIHxzZWxmLl9vdXRwdXRfZmlsZXwuCi0gICAgIiIiCi0gICAgc2VsZi5fU3RvcFJlY29yZGluZygpCi0gICAgd2l0aCBzZWxmLl9yZWNvcmRfZmlsZV9sb2NrOgotICAgICAgaWYgc2VsZi5fcmVjb3JkX2ZpbGUgYW5kIHNlbGYuX291dHB1dF9maWxlOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKHNlbGYuX291dHB1dF9maWxlKSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHNodXRpbC5jb3B5KHNlbGYuX3JlY29yZF9maWxlLm5hbWUsIHNlbGYuX291dHB1dF9maWxlKQotCi0gIGRlZiBDbG9zZShzZWxmKToKLSAgICAiIiJDbG9zZXMgbG9nY2F0IHJlY29yZGluZyBmaWxlLgotCi0gICAgU2hvdWxkIGJlIGNhbGxlZCB3aGVuIGZpbmlzaGVkIHVzaW5nIHRoZSBsb2djYXQgbW9uaXRvci4KLSAgICAiIiIKLSAgICB3aXRoIHNlbGYuX3JlY29yZF9maWxlX2xvY2s6Ci0gICAgICBpZiBzZWxmLl9yZWNvcmRfZmlsZToKLSAgICAgICAgc2VsZi5fcmVjb3JkX2ZpbGUuY2xvc2UoKQotICAgICAgICBzZWxmLl9yZWNvcmRfZmlsZSA9IE5vbmUKLQotICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgIiIiQW4gYWxpYXMgZm9yIENsb3NlLgotCi0gICAgQWxsb3dzIExvZ2NhdE1vbml0b3JzIHRvIGJlIHVzZWQgd2l0aCBjb250ZXh0bGliLmNsb3NpbmcuCi0gICAgIiIiCi0gICAgc2VsZi5DbG9zZSgpCi0KLSAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAiIiJTdGFydHMgdGhlIGxvZ2NhdCBtb25pdG9yLiIiIgotICAgIHNlbGYuU3RhcnQoKQotICAgIHJldHVybiBzZWxmCi0KLSAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgotICAgICIiIlN0b3BzIHRoZSBsb2djYXQgbW9uaXRvci4iIiIKLSAgICBzZWxmLlN0b3AoKQotCi0gIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICIiIkNsb3NlcyBsb2djYXQgcmVjb3JkaW5nIGZpbGUgaW4gY2FzZSB8Q2xvc2V8IHdhcyBuZXZlciBjYWxsZWQuIiIiCi0gICAgd2l0aCBzZWxmLl9yZWNvcmRfZmlsZV9sb2NrOgotICAgICAgaWYgc2VsZi5fcmVjb3JkX2ZpbGU6Ci0gICAgICAgIGxvZ2dlci53YXJuaW5nKAotICAgICAgICAgICAgJ05lZWQgdG8gY2FsbCB8Q2xvc2V8IG9uIHRoZSBsb2djYXQgbW9uaXRvciB3aGVuIGRvbmUhJykKLSAgICAgICAgc2VsZi5fcmVjb3JkX2ZpbGUuY2xvc2UoKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgYWRiKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9hZGIKLQotCi1jbGFzcyBMb2djYXRNb25pdG9yQ29tbWFuZEVycm9yKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgIiIiRXhjZXB0aW9uIGZvciBlcnJvcnMgd2l0aCBsb2djYXQgbW9uaXRvciBjb21tYW5kcy4iIiIKLSAgcGFzcwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9sb2djYXRfbW9uaXRvcl90ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9sb2djYXRfbW9uaXRvcl90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4ZmI0ZDc0Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvbG9nY2F0X21vbml0b3JfdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwotCi1pbXBvcnQgaXRlcnRvb2xzCi1pbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBkZXZpbCBpbXBvcnQgZGV2aWxfZW52Ci1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGxvZ2NhdF9tb25pdG9yCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBhZGJfd3JhcHBlcgotCi13aXRoIGRldmlsX2Vudi5TeXNQYXRoKGRldmlsX2Vudi5QWU1PQ0tfUEFUSCk6Ci0gIGltcG9ydCBtb2NrICAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3IKLQotCi1kZWYgX0NyZWF0ZVRlc3RMb2cocmF3X2xvZ2NhdD1Ob25lKToKLSAgdGVzdF9hZGIgPSBhZGJfd3JhcHBlci5BZGJXcmFwcGVyKCcwMTIzNDU2Nzg5YWJjZGVmJykKLSAgdGVzdF9hZGIuTG9nY2F0ID0gbW9jay5Nb2NrKHJldHVybl92YWx1ZT0obCBmb3IgbCBpbiByYXdfbG9nY2F0KSkKLSAgdGVzdF9sb2cgPSBsb2djYXRfbW9uaXRvci5Mb2djYXRNb25pdG9yKHRlc3RfYWRiLCBjbGVhcj1GYWxzZSkKLSAgcmV0dXJuIHRlc3RfbG9nCi0KLQotY2xhc3MgTG9nY2F0TW9uaXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIF9URVNUX1RIUkVBRFRJTUVfTE9HQ0FUX0RBVEEgPSBbCi0gICAgICAnMDEtMDEgMDE6MDI6MDMuNDU2ICA3ODkwICAwOTg3IFYgTG9nY2F0TW9uaXRvclRlc3Q6ICcKLSAgICAgICAgICAndmVyYm9zZSBsb2djYXQgbW9uaXRvciB0ZXN0IG1lc3NhZ2UgMScsCi0gICAgICAnMDEtMDEgMDE6MDI6MDMuNDU3ICA4OTAxICAxMDk4IEQgTG9nY2F0TW9uaXRvclRlc3Q6ICcKLSAgICAgICAgICAnZGVidWcgbG9nY2F0IG1vbml0b3IgdGVzdCBtZXNzYWdlIDInLAotICAgICAgJzAxLTAxIDAxOjAyOjAzLjQ1OCAgOTAxMiAgMjEwOSBJIExvZ2NhdE1vbml0b3JUZXN0OiAnCi0gICAgICAgICAgJ2luZm8gbG9nY2F0IG1vbml0b3IgdGVzdCBtZXNzYWdlIDMnLAotICAgICAgJzAxLTAxIDAxOjAyOjAzLjQ1OSAgMDEyMyAgMzIxMCBXIExvZ2NhdE1vbml0b3JUZXN0OiAnCi0gICAgICAgICAgJ3dhcm5pbmcgbG9nY2F0IG1vbml0b3IgdGVzdCBtZXNzYWdlIDQnLAotICAgICAgJzAxLTAxIDAxOjAyOjAzLjQ2MCAgMTIzNCAgNDMyMSBFIExvZ2NhdE1vbml0b3JUZXN0OiAnCi0gICAgICAgICAgJ2Vycm9yIGxvZ2NhdCBtb25pdG9yIHRlc3QgbWVzc2FnZSA1JywKLSAgICAgICcwMS0wMSAwMTowMjowMy40NjEgIDIzNDUgIDU0MzIgRiBMb2djYXRNb25pdG9yVGVzdDogJwotICAgICAgICAgICdmYXRhbCBsb2djYXQgbW9uaXRvciB0ZXN0IG1lc3NhZ2UgNicsCi0gICAgICAnMDEtMDEgMDE6MDI6MDMuNDYyICAzNDU2ICA2NTQzIEQgTG9nY2F0TW9uaXRvclRlc3Q6ICcKLSAgICAgICAgICAnbGFzdCBsaW5lJwotICBdCi0KLSAgZGVmIGFzc2VydEl0ZXJFcXVhbChzZWxmLCBleHBlY3RlZF9pdGVyLCBhY3R1YWxfaXRlcik6Ci0gICAgZm9yIGV4cGVjdGVkLCBhY3R1YWwgaW4gaXRlcnRvb2xzLml6aXBfbG9uZ2VzdChleHBlY3RlZF9pdGVyLCBhY3R1YWxfaXRlcik6Ci0gICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSgKLSAgICAgICAgICBleHBlY3RlZCwKLSAgICAgICAgICBtc2c9J2FjdHVhbCBoYXMgdW5leHBlY3RlZCBlbGVtZW50cyBzdGFydGluZyB3aXRoICVzJyAlIHN0cihhY3R1YWwpKQotICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoCi0gICAgICAgICAgYWN0dWFsLAotICAgICAgICAgIG1zZz0nYWN0dWFsIGlzIG1pc3NpbmcgZWxlbWVudHMgc3RhcnRpbmcgd2l0aCAlcycgJSBzdHIoZXhwZWN0ZWQpKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwuZ3JvdXAoJ3Byb2NfaWQnKSwgZXhwZWN0ZWRbMF0pCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbC5ncm91cCgndGhyZWFkX2lkJyksIGV4cGVjdGVkWzFdKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwuZ3JvdXAoJ2xvZ19sZXZlbCcpLCBleHBlY3RlZFsyXSkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLmdyb3VwKCdjb21wb25lbnQnKSwgZXhwZWN0ZWRbM10pCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbC5ncm91cCgnbWVzc2FnZScpLCBleHBlY3RlZFs0XSkKLQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbik6Ci0gICAgICBuZXh0KGFjdHVhbF9pdGVyKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbik6Ci0gICAgICBuZXh0KGV4cGVjdGVkX2l0ZXIpCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3RXYWl0Rm9yX3N1Y2Nlc3Moc2VsZik6Ci0gICAgdGVzdF9sb2cgPSBfQ3JlYXRlVGVzdExvZygKLSAgICAgICAgcmF3X2xvZ2NhdD10eXBlKHNlbGYpLl9URVNUX1RIUkVBRFRJTUVfTE9HQ0FUX0RBVEEpCi0gICAgdGVzdF9sb2cuU3RhcnQoKQotICAgIGFjdHVhbF9tYXRjaCA9IHRlc3RfbG9nLldhaXRGb3IocicuKihmYXRhbHxlcnJvcikgbG9nY2F0IG1vbml0b3IuKicsIE5vbmUpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGFjdHVhbF9tYXRjaCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAnMDEtMDEgMDE6MDI6MDMuNDYwICAxMjM0ICA0MzIxIEUgTG9nY2F0TW9uaXRvclRlc3Q6ICcKLSAgICAgICAgICAgICdlcnJvciBsb2djYXQgbW9uaXRvciB0ZXN0IG1lc3NhZ2UgNScsCi0gICAgICAgIGFjdHVhbF9tYXRjaC5ncm91cCgwKSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKCdlcnJvcicsIGFjdHVhbF9tYXRjaC5ncm91cCgxKSkKLSAgICB0ZXN0X2xvZy5TdG9wKCkKLSAgICB0ZXN0X2xvZy5DbG9zZSgpCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3RXYWl0Rm9yX2ZhaWx1cmUoc2VsZik6Ci0gICAgdGVzdF9sb2cgPSBfQ3JlYXRlVGVzdExvZygKLSAgICAgICAgcmF3X2xvZ2NhdD10eXBlKHNlbGYpLl9URVNUX1RIUkVBRFRJTUVfTE9HQ0FUX0RBVEEpCi0gICAgdGVzdF9sb2cuU3RhcnQoKQotICAgIGFjdHVhbF9tYXRjaCA9IHRlc3RfbG9nLldhaXRGb3IoCi0gICAgICAgIHInLipNeSBTdWNjZXNzIFJlZ2V4LionLCByJy4qKGZhdGFsfGVycm9yKSBsb2djYXQgbW9uaXRvci4qJykKLSAgICBzZWxmLmFzc2VydElzTm9uZShhY3R1YWxfbWF0Y2gpCi0gICAgdGVzdF9sb2cuU3RvcCgpCi0gICAgdGVzdF9sb2cuQ2xvc2UoKQotCi0gIEBtb2NrLnBhdGNoKCd0aW1lLnNsZWVwJywgbW9jay5Nb2NrKCkpCi0gIGRlZiB0ZXN0V2FpdEZvcl9idWZmZXJpbmcoc2VsZik6Ci0gICAgIyBTaW11bGF0ZSBhbiBhZGIgbG9nIHN0cmVhbSB3aGljaCBkb2VzIG5vdCBjb21wbGV0ZSB1bnRpbCB0aGUgdGVzdCB0ZWxscyBpdAotICAgICMgdG8uIFRoaXMgY2hlY2tzIHRoYXQgdGhlIGxvZyBtYXRjaGVyIGNhbiByZWNlaXZlIGluZGl2aWR1YWwgbGluZXMgZnJvbSB0aGUKLSAgICAjIGxvZyByZWFkZXIgdGhyZWFkIGV2ZW4gaWYgYWRiIGlzIG5vdCBwcm9kdWNpbmcgZW5vdWdoIG91dHB1dCB0byBmaWxsIGFuCi0gICAgIyBlbnRpcmUgZmlsZSBpbyBidWZmZXIuCi0gICAgZmluaXNoZWRfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKLSAgICBmaW5pc2hlZF9sb2NrLmFjcXVpcmUoKQotCi0gICAgZGVmIExvZ0dlbmVyYXRvcigpOgotICAgICAgZm9yIGxpbmUgaW4gdHlwZShzZWxmKS5fVEVTVF9USFJFQURUSU1FX0xPR0NBVF9EQVRBOgotICAgICAgICB5aWVsZCBsaW5lCi0gICAgICBmaW5pc2hlZF9sb2NrLmFjcXVpcmUoKQotCi0gICAgdGVzdF9hZGIgPSBhZGJfd3JhcHBlci5BZGJXcmFwcGVyKCcwMTIzNDU2Nzg5YWJjZGVmJykKLSAgICB0ZXN0X2FkYi5Mb2djYXQgPSBtb2NrLk1vY2socmV0dXJuX3ZhbHVlPUxvZ0dlbmVyYXRvcigpKQotICAgIHRlc3RfbG9nID0gbG9nY2F0X21vbml0b3IuTG9nY2F0TW9uaXRvcih0ZXN0X2FkYiwgY2xlYXI9RmFsc2UpCi0gICAgdGVzdF9sb2cuU3RhcnQoKQotCi0gICAgYWN0dWFsX21hdGNoID0gdGVzdF9sb2cuV2FpdEZvcihyJy4qbGFzdCBsaW5lLionLCBOb25lKQotICAgIGZpbmlzaGVkX2xvY2sucmVsZWFzZSgpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGFjdHVhbF9tYXRjaCkKLSAgICB0ZXN0X2xvZy5TdG9wKCkKLSAgICB0ZXN0X2xvZy5DbG9zZSgpCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3RGaW5kQWxsX2RlZmF1bHRzKHNlbGYpOgotICAgIHRlc3RfbG9nID0gX0NyZWF0ZVRlc3RMb2coCi0gICAgICAgIHJhd19sb2djYXQ9dHlwZShzZWxmKS5fVEVTVF9USFJFQURUSU1FX0xPR0NBVF9EQVRBKQotICAgIHRlc3RfbG9nLlN0YXJ0KCkKLSAgICB0ZXN0X2xvZy5XYWl0Rm9yKHInLipsYXN0IGxpbmUuKicsIE5vbmUpCi0gICAgdGVzdF9sb2cuU3RvcCgpCi0gICAgZXhwZWN0ZWRfcmVzdWx0cyA9IFsKLSAgICAgICAgKCc3ODkwJywgJzA5ODcnLCAnVicsICdMb2djYXRNb25pdG9yVGVzdCcsCi0gICAgICAgICAndmVyYm9zZSBsb2djYXQgbW9uaXRvciB0ZXN0IG1lc3NhZ2UgMScpLAotICAgICAgICAoJzg5MDEnLCAnMTA5OCcsICdEJywgJ0xvZ2NhdE1vbml0b3JUZXN0JywKLSAgICAgICAgICdkZWJ1ZyBsb2djYXQgbW9uaXRvciB0ZXN0IG1lc3NhZ2UgMicpLAotICAgICAgICAoJzkwMTInLCAnMjEwOScsICdJJywgJ0xvZ2NhdE1vbml0b3JUZXN0JywKLSAgICAgICAgICdpbmZvIGxvZ2NhdCBtb25pdG9yIHRlc3QgbWVzc2FnZSAzJyksCi0gICAgICAgICgnMDEyMycsICczMjEwJywgJ1cnLCAnTG9nY2F0TW9uaXRvclRlc3QnLAotICAgICAgICAgJ3dhcm5pbmcgbG9nY2F0IG1vbml0b3IgdGVzdCBtZXNzYWdlIDQnKSwKLSAgICAgICAgKCcxMjM0JywgJzQzMjEnLCAnRScsICdMb2djYXRNb25pdG9yVGVzdCcsCi0gICAgICAgICAnZXJyb3IgbG9nY2F0IG1vbml0b3IgdGVzdCBtZXNzYWdlIDUnKSwKLSAgICAgICAgKCcyMzQ1JywgJzU0MzInLCAnRicsICdMb2djYXRNb25pdG9yVGVzdCcsCi0gICAgICAgICAnZmF0YWwgbG9nY2F0IG1vbml0b3IgdGVzdCBtZXNzYWdlIDYnKV0KLSAgICBhY3R1YWxfcmVzdWx0cyA9IHRlc3RfbG9nLkZpbmRBbGwocidcUyogbG9nY2F0IG1vbml0b3IgdGVzdCBtZXNzYWdlIFxkJykKLSAgICBzZWxmLmFzc2VydEl0ZXJFcXVhbChpdGVyKGV4cGVjdGVkX3Jlc3VsdHMpLCBhY3R1YWxfcmVzdWx0cykKLSAgICB0ZXN0X2xvZy5DbG9zZSgpCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3RGaW5kQWxsX2RlZmF1bHRzX21pc3Moc2VsZik6Ci0gICAgdGVzdF9sb2cgPSBfQ3JlYXRlVGVzdExvZygKLSAgICAgICAgcmF3X2xvZ2NhdD10eXBlKHNlbGYpLl9URVNUX1RIUkVBRFRJTUVfTE9HQ0FUX0RBVEEpCi0gICAgdGVzdF9sb2cuU3RhcnQoKQotICAgIHRlc3RfbG9nLldhaXRGb3IocicuKmxhc3QgbGluZS4qJywgTm9uZSkKLSAgICB0ZXN0X2xvZy5TdG9wKCkKLSAgICBleHBlY3RlZF9yZXN1bHRzID0gW10KLSAgICBhY3R1YWxfcmVzdWx0cyA9IHRlc3RfbG9nLkZpbmRBbGwocidcUyogbm90aGluZyBzaG91bGQgbWF0Y2ggdGhpcyBcZCcpCi0gICAgc2VsZi5hc3NlcnRJdGVyRXF1YWwoaXRlcihleHBlY3RlZF9yZXN1bHRzKSwgYWN0dWFsX3Jlc3VsdHMpCi0gICAgdGVzdF9sb2cuQ2xvc2UoKQotCi0gIEBtb2NrLnBhdGNoKCd0aW1lLnNsZWVwJywgbW9jay5Nb2NrKCkpCi0gIGRlZiB0ZXN0RmluZEFsbF9maWx0ZXJQcm9jSWQoc2VsZik6Ci0gICAgdGVzdF9sb2cgPSBfQ3JlYXRlVGVzdExvZygKLSAgICAgICAgcmF3X2xvZ2NhdD10eXBlKHNlbGYpLl9URVNUX1RIUkVBRFRJTUVfTE9HQ0FUX0RBVEEpCi0gICAgdGVzdF9sb2cuU3RhcnQoKQotICAgIHRlc3RfbG9nLldhaXRGb3IocicuKmxhc3QgbGluZS4qJywgTm9uZSkKLSAgICB0ZXN0X2xvZy5TdG9wKCkKLSAgICBhY3R1YWxfcmVzdWx0cyA9IHRlc3RfbG9nLkZpbmRBbGwoCi0gICAgICAgIHInXFMqIGxvZ2NhdCBtb25pdG9yIHRlc3QgbWVzc2FnZSBcZCcsIHByb2NfaWQ9MTIzNCkKLSAgICBleHBlY3RlZF9yZXN1bHRzID0gWwotICAgICAgICAoJzEyMzQnLCAnNDMyMScsICdFJywgJ0xvZ2NhdE1vbml0b3JUZXN0JywKLSAgICAgICAgICdlcnJvciBsb2djYXQgbW9uaXRvciB0ZXN0IG1lc3NhZ2UgNScpXQotICAgIHNlbGYuYXNzZXJ0SXRlckVxdWFsKGl0ZXIoZXhwZWN0ZWRfcmVzdWx0cyksIGFjdHVhbF9yZXN1bHRzKQotICAgIHRlc3RfbG9nLkNsb3NlKCkKLQotICBAbW9jay5wYXRjaCgndGltZS5zbGVlcCcsIG1vY2suTW9jaygpKQotICBkZWYgdGVzdEZpbmRBbGxfZmlsdGVyVGhyZWFkSWQoc2VsZik6Ci0gICAgdGVzdF9sb2cgPSBfQ3JlYXRlVGVzdExvZygKLSAgICAgICAgcmF3X2xvZ2NhdD10eXBlKHNlbGYpLl9URVNUX1RIUkVBRFRJTUVfTE9HQ0FUX0RBVEEpCi0gICAgdGVzdF9sb2cuU3RhcnQoKQotICAgIHRlc3RfbG9nLldhaXRGb3IocicuKmxhc3QgbGluZS4qJywgTm9uZSkKLSAgICB0ZXN0X2xvZy5TdG9wKCkKLSAgICBhY3R1YWxfcmVzdWx0cyA9IHRlc3RfbG9nLkZpbmRBbGwoCi0gICAgICAgIHInXFMqIGxvZ2NhdCBtb25pdG9yIHRlc3QgbWVzc2FnZSBcZCcsIHRocmVhZF9pZD0yMTA5KQotICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSBbCi0gICAgICAgICgnOTAxMicsICcyMTA5JywgJ0knLCAnTG9nY2F0TW9uaXRvclRlc3QnLAotICAgICAgICAgJ2luZm8gbG9nY2F0IG1vbml0b3IgdGVzdCBtZXNzYWdlIDMnKV0KLSAgICBzZWxmLmFzc2VydEl0ZXJFcXVhbChpdGVyKGV4cGVjdGVkX3Jlc3VsdHMpLCBhY3R1YWxfcmVzdWx0cykKLSAgICB0ZXN0X2xvZy5DbG9zZSgpCi0KLSAgQG1vY2sucGF0Y2goJ3RpbWUuc2xlZXAnLCBtb2NrLk1vY2soKSkKLSAgZGVmIHRlc3RGaW5kQWxsX2ZpbHRlckxvZ0xldmVsKHNlbGYpOgotICAgIHRlc3RfbG9nID0gX0NyZWF0ZVRlc3RMb2coCi0gICAgICAgIHJhd19sb2djYXQ9dHlwZShzZWxmKS5fVEVTVF9USFJFQURUSU1FX0xPR0NBVF9EQVRBKQotICAgIHRlc3RfbG9nLlN0YXJ0KCkKLSAgICB0ZXN0X2xvZy5XYWl0Rm9yKHInLipsYXN0IGxpbmUuKicsIE5vbmUpCi0gICAgdGVzdF9sb2cuU3RvcCgpCi0gICAgYWN0dWFsX3Jlc3VsdHMgPSB0ZXN0X2xvZy5GaW5kQWxsKAotICAgICAgICByJ1xTKiBsb2djYXQgbW9uaXRvciB0ZXN0IG1lc3NhZ2UgXGQnLCBsb2dfbGV2ZWw9cidbRFddJykKLSAgICBleHBlY3RlZF9yZXN1bHRzID0gWwotICAgICAgICAoJzg5MDEnLCAnMTA5OCcsICdEJywgJ0xvZ2NhdE1vbml0b3JUZXN0JywKLSAgICAgICAgICdkZWJ1ZyBsb2djYXQgbW9uaXRvciB0ZXN0IG1lc3NhZ2UgMicpLAotICAgICAgICAoJzAxMjMnLCAnMzIxMCcsICdXJywgJ0xvZ2NhdE1vbml0b3JUZXN0JywKLSAgICAgICAgICd3YXJuaW5nIGxvZ2NhdCBtb25pdG9yIHRlc3QgbWVzc2FnZSA0JykKLSAgICBdCi0gICAgc2VsZi5hc3NlcnRJdGVyRXF1YWwoaXRlcihleHBlY3RlZF9yZXN1bHRzKSwgYWN0dWFsX3Jlc3VsdHMpCi0gICAgdGVzdF9sb2cuQ2xvc2UoKQotCi0gIEBtb2NrLnBhdGNoKCd0aW1lLnNsZWVwJywgbW9jay5Nb2NrKCkpCi0gIGRlZiB0ZXN0RmluZEFsbF9maWx0ZXJDb21wb25lbnQoc2VsZik6Ci0gICAgdGVzdF9sb2cgPSBfQ3JlYXRlVGVzdExvZygKLSAgICAgICAgcmF3X2xvZ2NhdD10eXBlKHNlbGYpLl9URVNUX1RIUkVBRFRJTUVfTE9HQ0FUX0RBVEEpCi0gICAgdGVzdF9sb2cuU3RhcnQoKQotICAgIHRlc3RfbG9nLldhaXRGb3IocicuKmxhc3QgbGluZS4qJywgTm9uZSkKLSAgICB0ZXN0X2xvZy5TdG9wKCkKLSAgICBhY3R1YWxfcmVzdWx0cyA9IHRlc3RfbG9nLkZpbmRBbGwocicuKicsIGNvbXBvbmVudD0nTG9nY2F0TW9uaXRvclRlc3QnKQotICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSBbCi0gICAgICAgICgnNzg5MCcsICcwOTg3JywgJ1YnLCAnTG9nY2F0TW9uaXRvclRlc3QnLAotICAgICAgICAgJ3ZlcmJvc2UgbG9nY2F0IG1vbml0b3IgdGVzdCBtZXNzYWdlIDEnKSwKLSAgICAgICAgKCc4OTAxJywgJzEwOTgnLCAnRCcsICdMb2djYXRNb25pdG9yVGVzdCcsCi0gICAgICAgICAnZGVidWcgbG9nY2F0IG1vbml0b3IgdGVzdCBtZXNzYWdlIDInKSwKLSAgICAgICAgKCc5MDEyJywgJzIxMDknLCAnSScsICdMb2djYXRNb25pdG9yVGVzdCcsCi0gICAgICAgICAnaW5mbyBsb2djYXQgbW9uaXRvciB0ZXN0IG1lc3NhZ2UgMycpLAotICAgICAgICAoJzAxMjMnLCAnMzIxMCcsICdXJywgJ0xvZ2NhdE1vbml0b3JUZXN0JywKLSAgICAgICAgICd3YXJuaW5nIGxvZ2NhdCBtb25pdG9yIHRlc3QgbWVzc2FnZSA0JyksCi0gICAgICAgICgnMTIzNCcsICc0MzIxJywgJ0UnLCAnTG9nY2F0TW9uaXRvclRlc3QnLAotICAgICAgICAgJ2Vycm9yIGxvZ2NhdCBtb25pdG9yIHRlc3QgbWVzc2FnZSA1JyksCi0gICAgICAgICgnMjM0NScsICc1NDMyJywgJ0YnLCAnTG9nY2F0TW9uaXRvclRlc3QnLAotICAgICAgICAgJ2ZhdGFsIGxvZ2NhdCBtb25pdG9yIHRlc3QgbWVzc2FnZSA2JyksCi0gICAgICAgICgnMzQ1NicsICc2NTQzJywgJ0QnLCAnTG9nY2F0TW9uaXRvclRlc3QnLAotICAgICAgICAgJ2xhc3QgbGluZScpCi0gICAgXQotICAgIHNlbGYuYXNzZXJ0SXRlckVxdWFsKGl0ZXIoZXhwZWN0ZWRfcmVzdWx0cyksIGFjdHVhbF9yZXN1bHRzKQotICAgIHRlc3RfbG9nLkNsb3NlKCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL21kNXN1bS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvbWQ1c3VtLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGVjZTllLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvbWQ1c3VtLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgcG9zaXhwYXRoCi1pbXBvcnQgcmUKLQotZnJvbSBkZXZpbCBpbXBvcnQgZGV2aWxfZW52Ci1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9lcnJvcnMKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGNtZF9oZWxwZXIKLQotTUQ1U1VNX0RFVklDRV9MSUJfUEFUSCA9ICcvZGF0YS9sb2NhbC90bXAvbWQ1c3VtJwotTUQ1U1VNX0RFVklDRV9CSU5fUEFUSCA9IE1ENVNVTV9ERVZJQ0VfTElCX1BBVEggKyAnL21kNXN1bV9iaW4nCi0KLV9TVEFSVFNfV0lUSF9DSEVDS1NVTV9SRSA9IHJlLmNvbXBpbGUocideXHMqWzAtOWEtZkEtRl17MzJ9XHMrJykKLQotCi1kZWYgQ2FsY3VsYXRlSG9zdE1kNVN1bXMocGF0aHMpOgotICAiIiJDYWxjdWxhdGVzIHRoZSBNRDUgc3VtIHZhbHVlIGZvciBhbGwgaXRlbXMgaW4gfHBhdGhzfC4KLQotICBEaXJlY3RvcmllcyBhcmUgdHJhdmVyc2VkIHJlY3Vyc2l2ZWx5IGFuZCB0aGUgTUQ1IHN1bSBvZiBlYWNoIGZpbGUgZm91bmQgaXMKLSAgcmVwb3J0ZWQgaW4gdGhlIHJlc3VsdC4KLQotICBBcmdzOgotICAgIHBhdGhzOiBBIGxpc3Qgb2YgaG9zdCBwYXRocyB0byBtZDVzdW0uCi0gIFJldHVybnM6Ci0gICAgQSBkaWN0IG1hcHBpbmcgZmlsZSBwYXRocyB0byB0aGVpciByZXNwZWN0aXZlIG1kNXN1bSBjaGVja3N1bXMuCi0gICIiIgotICBpZiBpc2luc3RhbmNlKHBhdGhzLCBiYXNlc3RyaW5nKToKLSAgICBwYXRocyA9IFtwYXRoc10KLQotICBtZDVzdW1fYmluX2hvc3RfcGF0aCA9IGRldmlsX2Vudi5jb25maWcuRmV0Y2hQYXRoKCdtZDVzdW1faG9zdCcpCi0gIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhtZDVzdW1fYmluX2hvc3RfcGF0aCk6Ci0gICAgcmFpc2UgSU9FcnJvcignRmlsZSBub3QgYnVpbHQ6ICVzJyAlIG1kNXN1bV9iaW5faG9zdF9wYXRoKQotICBvdXQgPSBjbWRfaGVscGVyLkdldENtZE91dHB1dCgKLSAgICBbbWQ1c3VtX2Jpbl9ob3N0X3BhdGhdICsgW29zLnBhdGgucmVhbHBhdGgocCkgZm9yIHAgaW4gcGF0aHNdKQotCi0gIHJldHVybiBfUGFyc2VNZDVTdW1PdXRwdXQob3V0LnNwbGl0bGluZXMoKSkKLQotCi1kZWYgQ2FsY3VsYXRlRGV2aWNlTWQ1U3VtcyhwYXRocywgZGV2aWNlKToKLSAgIiIiQ2FsY3VsYXRlcyB0aGUgTUQ1IHN1bSB2YWx1ZSBmb3IgYWxsIGl0ZW1zIGluIHxwYXRoc3wuCi0KLSAgRGlyZWN0b3JpZXMgYXJlIHRyYXZlcnNlZCByZWN1cnNpdmVseSBhbmQgdGhlIE1ENSBzdW0gb2YgZWFjaCBmaWxlIGZvdW5kIGlzCi0gIHJlcG9ydGVkIGluIHRoZSByZXN1bHQuCi0KLSAgQXJnczoKLSAgICBwYXRoczogQSBsaXN0IG9mIGRldmljZSBwYXRocyB0byBtZDVzdW0uCi0gIFJldHVybnM6Ci0gICAgQSBkaWN0IG1hcHBpbmcgZmlsZSBwYXRocyB0byB0aGVpciByZXNwZWN0aXZlIG1kNXN1bSBjaGVja3N1bXMuCi0gICIiIgotICBpZiBub3QgcGF0aHM6Ci0gICAgcmV0dXJuIHt9Ci0KLSAgaWYgaXNpbnN0YW5jZShwYXRocywgYmFzZXN0cmluZyk6Ci0gICAgcGF0aHMgPSBbcGF0aHNdCi0gICMgQWxsb3cgZ2VuZXJhdG9ycwotICBwYXRocyA9IGxpc3QocGF0aHMpCi0KLSAgbWQ1c3VtX2Rpc3RfcGF0aCA9IGRldmlsX2Vudi5jb25maWcuRmV0Y2hQYXRoKCdtZDVzdW1fZGV2aWNlJywgZGV2aWNlPWRldmljZSkKLQotICBpZiBvcy5wYXRoLmlzZGlyKG1kNXN1bV9kaXN0X3BhdGgpOgotICAgIG1kNXN1bV9kaXN0X2Jpbl9wYXRoID0gb3MucGF0aC5qb2luKG1kNXN1bV9kaXN0X3BhdGgsICdtZDVzdW1fYmluJykKLSAgZWxzZToKLSAgICBtZDVzdW1fZGlzdF9iaW5fcGF0aCA9IG1kNXN1bV9kaXN0X3BhdGgKLQotICBpZiBub3Qgb3MucGF0aC5leGlzdHMobWQ1c3VtX2Rpc3RfcGF0aCk6Ci0gICAgcmFpc2UgSU9FcnJvcignRmlsZSBub3QgYnVpbHQ6ICVzJyAlIG1kNXN1bV9kaXN0X3BhdGgpCi0gIG1kNXN1bV9maWxlX3NpemUgPSBvcy5wYXRoLmdldHNpemUobWQ1c3VtX2Rpc3RfYmluX3BhdGgpCi0KLSAgIyBGb3IgYmV0dGVyIHBlcmZvcm1hbmNlLCBtYWtlIHRoZSBzY3JpcHQgYXMgc21hbGwgYXMgcG9zc2libGUgdG8gdHJ5IGFuZAotICAjIGF2b2lkIG5lZWRpbmcgdG8gd3JpdGUgdG8gYW4gaW50ZXJtZWRpYXJ5IGZpbGUgKHdoaWNoIFJ1blNoZWxsQ29tbWFuZCB3aWxsCi0gICMgZG8gaWYgbmVjZXNzYXJ5KS4KLSAgbWQ1c3VtX3NjcmlwdCA9ICdhPSVzOycgJSBNRDVTVU1fREVWSUNFX0JJTl9QQVRICi0gICMgQ2hlY2sgaWYgdGhlIGJpbmFyeSBpcyBtaXNzaW5nIG9yIGhhcyBjaGFuZ2VkICh1c2luZyBpdHMgZmlsZSBzaXplIGFzIGFuCi0gICMgaW5kaWNhdG9yKSwgYW5kIHRyaWdnZXIgYSAocmUtKXB1c2ggdmlhIHRoZSBleGl0IGNvZGUuCi0gIG1kNXN1bV9zY3JpcHQgKz0gJyEgW1sgJChscyAtbCAkYSkgPSAqJWQqIF1dJiZleGl0IDI7JyAlIG1kNXN1bV9maWxlX3NpemUKLSAgIyBNYWtlIHN1cmUgaXQgY2FuIGZpbmQgbGliYmFzZS5zbwotICBtZDVzdW1fc2NyaXB0ICs9ICdleHBvcnQgTERfTElCUkFSWV9QQVRIPSVzOycgJSBNRDVTVU1fREVWSUNFX0xJQl9QQVRICi0gIGlmIGxlbihwYXRocykgPiAxOgotICAgIHByZWZpeCA9IHBvc2l4cGF0aC5jb21tb25wcmVmaXgocGF0aHMpCi0gICAgaWYgbGVuKHByZWZpeCkgPiA0OgotICAgICAgbWQ1c3VtX3NjcmlwdCArPSAncD0iJXMiOycgJSBwcmVmaXgKLSAgICAgIHBhdGhzID0gWyckcCIlcyInICUgcFtsZW4ocHJlZml4KTpdIGZvciBwIGluIHBhdGhzXQotCi0gIG1kNXN1bV9zY3JpcHQgKz0gJzsnLmpvaW4oJyRhICVzJyAlIHAgZm9yIHAgaW4gcGF0aHMpCi0gICMgRG9uJ3QgZmFpbCB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IG1kNXN1bSBmYWlscyAoZHVlIHRvIGZpbGUgbm90IGZvdW5kKQotICAjIE5vdGU6ICI6IiBpcyBlcXVpdmFsZW50IHRvICJ0cnVlIi4KLSAgbWQ1c3VtX3NjcmlwdCArPSAnOzonCi0gIHRyeToKLSAgICBvdXQgPSBkZXZpY2UuUnVuU2hlbGxDb21tYW5kKG1kNXN1bV9zY3JpcHQsIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlKQotICBleGNlcHQgZGV2aWNlX2Vycm9ycy5BZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvciBhcyBlOgotICAgICMgUHVzaCB0aGUgYmluYXJ5IG9ubHkgaWYgaXQgaXMgZm91bmQgdG8gbm90IGV4aXN0Ci0gICAgIyAoZmFzdGVyIHRoYW4gY2hlY2tpbmcgdXAtZnJvbnQpLgotICAgIGlmIGUuc3RhdHVzID09IDI6Ci0gICAgICAjIElmIGZpbGVzIHdlcmUgcHJldmlvdXNseSBwdXNoZWQgYXMgcm9vdCAoYWRiZCBydW5uaW5nIGFzIHJvb3QpLCB0cnlpbmcKLSAgICAgICMgdG8gcmUtcHVzaCBhcyBub24tcm9vdCBjYXVzZXMgdGhlIHB1c2ggY29tbWFuZCB0byByZXBvcnQgc3VjY2VzcywgYnV0Ci0gICAgICAjIGFjdHVhbGx5IGZhaWwuIFNvLCB3aXBlIHRoZSBkaXJlY3RvcnkgZmlyc3QuCi0gICAgICBkZXZpY2UuUnVuU2hlbGxDb21tYW5kKFsncm0nLCAnLXJmJywgTUQ1U1VNX0RFVklDRV9MSUJfUEFUSF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzX3Jvb3Q9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgICBpZiBvcy5wYXRoLmlzZGlyKG1kNXN1bV9kaXN0X3BhdGgpOgotICAgICAgICBkZXZpY2UuYWRiLlB1c2gobWQ1c3VtX2Rpc3RfcGF0aCwgTUQ1U1VNX0RFVklDRV9MSUJfUEFUSCkKLSAgICAgIGVsc2U6Ci0gICAgICAgIG1rZGlyX2NtZCA9ICdhPSVzO1tbIC1lICRhIF1dIHx8IG1rZGlyICRhJyAlIE1ENVNVTV9ERVZJQ0VfTElCX1BBVEgKLSAgICAgICAgZGV2aWNlLlJ1blNoZWxsQ29tbWFuZChta2Rpcl9jbWQsIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlKQotICAgICAgICBkZXZpY2UuYWRiLlB1c2gobWQ1c3VtX2Rpc3RfYmluX3BhdGgsIE1ENVNVTV9ERVZJQ0VfQklOX1BBVEgpCi0KLSAgICAgIG91dCA9IGRldmljZS5SdW5TaGVsbENvbW1hbmQobWQ1c3VtX3NjcmlwdCwgc2hlbGw9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgZWxzZToKLSAgICAgIHJhaXNlCi0KLSAgcmV0dXJuIF9QYXJzZU1kNVN1bU91dHB1dChvdXQpCi0KLQotZGVmIF9QYXJzZU1kNVN1bU91dHB1dChvdXQpOgotICBoYXNoX2FuZF9wYXRoID0gKGwuc3BsaXQoTm9uZSwgMSkgZm9yIGwgaW4gb3V0Ci0gICAgICAgICAgICAgICAgICAgaWYgbCBhbmQgX1NUQVJUU19XSVRIX0NIRUNLU1VNX1JFLm1hdGNoKGwpKQotICByZXR1cm4gZGljdCgocCwgaCkgZm9yIGgsIHAgaW4gaGFzaF9hbmRfcGF0aCkKLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9tZDVzdW1fdGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvbWQ1c3VtX3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGM5YjQ5NTQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9tZDVzdW1fdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIzNyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBkZXZpbCBpbXBvcnQgZGV2aWxfZW52Ci1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9lcnJvcnMKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgbWQ1c3VtCi0KLXdpdGggZGV2aWxfZW52LlN5c1BhdGgoZGV2aWxfZW52LlBZTU9DS19QQVRIKToKLSAgaW1wb3J0IG1vY2sgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotCi1URVNUX09VVF9ESVIgPSBvcy5wYXRoLmpvaW4oJ3Rlc3QnLCAnb3V0JywgJ2RpcmVjdG9yeScpCi1IT1NUX01ENV9FWEVDVVRBQkxFID0gb3MucGF0aC5qb2luKFRFU1RfT1VUX0RJUiwgJ21kNXN1bV9iaW5faG9zdCcpCi1NRDVfRElTVCA9IG9zLnBhdGguam9pbihURVNUX09VVF9ESVIsICdtZDVzdW1fZGlzdCcpCi0KLQotY2xhc3MgTWQ1U3VtVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIG1vY2tlZF9hdHRycyA9IHsKLSAgICAgICdtZDVzdW1faG9zdCc6IEhPU1RfTUQ1X0VYRUNVVEFCTEUsCi0gICAgICAnbWQ1c3VtX2RldmljZSc6IE1ENV9ESVNULAotICAgIH0KLSAgICBzZWxmLl9wYXRjaGVycyA9IFsKLSAgICAgIG1vY2sucGF0Y2goJ2RldmlsLmRldmlsX2Vudi5fRW52aXJvbm1lbnQuRmV0Y2hQYXRoJywKLSAgICAgICAgICAgICAgICAgbW9jay5Nb2NrKHNpZGVfZWZmZWN0PWxhbWJkYSBhLCBkZXZpY2U9Tm9uZTogbW9ja2VkX2F0dHJzW2FdKSksCi0gICAgICBtb2NrLnBhdGNoKCdvcy5wYXRoLmV4aXN0cycsCi0gICAgICAgICAgICAgICAgIG5ldz1tb2NrLk1vY2socmV0dXJuX3ZhbHVlPVRydWUpKSwKLSAgICBdCi0gICAgZm9yIHAgaW4gc2VsZi5fcGF0Y2hlcnM6Ci0gICAgICBwLnN0YXJ0KCkKLQotICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgZm9yIHAgaW4gc2VsZi5fcGF0Y2hlcnM6Ci0gICAgICBwLnN0b3AoKQotCi0gIGRlZiB0ZXN0Q2FsY3VsYXRlSG9zdE1kNVN1bXNfc2luZ2xlUGF0aChzZWxmKToKLSAgICB0ZXN0X3BhdGggPSAnL3Rlc3QvaG9zdC9maWxlLmRhdCcKLSAgICBtb2NrX2dldF9jbWRfb3V0cHV0ID0gbW9jay5Nb2NrKAotICAgICAgICByZXR1cm5fdmFsdWU9JzAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwIC90ZXN0L2hvc3QvZmlsZS5kYXQnKQotICAgIHdpdGggbW9jay5wYXRjaCgnZGV2aWwudXRpbHMuY21kX2hlbHBlci5HZXRDbWRPdXRwdXQnLAotICAgICAgICAgICAgICAgICAgICBuZXc9bW9ja19nZXRfY21kX291dHB1dCk6Ci0gICAgICBvdXQgPSBtZDVzdW0uQ2FsY3VsYXRlSG9zdE1kNVN1bXModGVzdF9wYXRoKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgbGVuKG91dCkpCi0gICAgICBzZWxmLmFzc2VydFRydWUoJy90ZXN0L2hvc3QvZmlsZS5kYXQnIGluIG91dCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcwMTIzNDU2Nzg5YWJjZGVmZmVkY2JhOTg3NjU0MzIxMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRbJy90ZXN0L2hvc3QvZmlsZS5kYXQnXSkKLSAgICAgIG1vY2tfZ2V0X2NtZF9vdXRwdXQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCi0gICAgICAgICAgW0hPU1RfTUQ1X0VYRUNVVEFCTEUsICcvdGVzdC9ob3N0L2ZpbGUuZGF0J10pCi0KLSAgZGVmIHRlc3RDYWxjdWxhdGVIb3N0TWQ1U3Vtc19saXN0KHNlbGYpOgotICAgIHRlc3RfcGF0aHMgPSBbJy90ZXN0L2hvc3QvZmlsZTAuZGF0JywgJy90ZXN0L2hvc3QvZmlsZTEuZGF0J10KLSAgICBtb2NrX2dldF9jbWRfb3V0cHV0ID0gbW9jay5Nb2NrKAotICAgICAgICByZXR1cm5fdmFsdWU9JzAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwIC90ZXN0L2hvc3QvZmlsZTAuZGF0XG4nCi0gICAgICAgICAgICAgICAgICAgICAnMTIzNDU2Nzg5YWJjZGVmMDBmZWRjYmE5ODc2NTQzMjEgL3Rlc3QvaG9zdC9maWxlMS5kYXRcbicpCi0gICAgd2l0aCBtb2NrLnBhdGNoKCdkZXZpbC51dGlscy5jbWRfaGVscGVyLkdldENtZE91dHB1dCcsCi0gICAgICAgICAgICAgICAgICAgIG5ldz1tb2NrX2dldF9jbWRfb3V0cHV0KToKLSAgICAgIG91dCA9IG1kNXN1bS5DYWxjdWxhdGVIb3N0TWQ1U3Vtcyh0ZXN0X3BhdGhzKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMiwgbGVuKG91dCkpCi0gICAgICBzZWxmLmFzc2VydFRydWUoJy90ZXN0L2hvc3QvZmlsZTAuZGF0JyBpbiBvdXQpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygnMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyMTAnLAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0WycvdGVzdC9ob3N0L2ZpbGUwLmRhdCddKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvdGVzdC9ob3N0L2ZpbGUxLmRhdCcgaW4gb3V0KQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJzEyMzQ1Njc4OWFiY2RlZjAwZmVkY2JhOTg3NjU0MzIxJywKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dFsnL3Rlc3QvaG9zdC9maWxlMS5kYXQnXSkKLSAgICAgIG1vY2tfZ2V0X2NtZF9vdXRwdXQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCi0gICAgICAgICAgW0hPU1RfTUQ1X0VYRUNVVEFCTEUsICcvdGVzdC9ob3N0L2ZpbGUwLmRhdCcsCi0gICAgICAgICAgICcvdGVzdC9ob3N0L2ZpbGUxLmRhdCddKQotCi0gIGRlZiB0ZXN0Q2FsY3VsYXRlSG9zdE1kNVN1bXNfZ2VuZXJhdG9yKHNlbGYpOgotICAgIHRlc3RfcGF0aHMgPSAoJy90ZXN0L2hvc3QvJyArIHAgZm9yIHAgaW4gWydmaWxlMC5kYXQnLCAnZmlsZTEuZGF0J10pCi0gICAgbW9ja19nZXRfY21kX291dHB1dCA9IG1vY2suTW9jaygKLSAgICAgICAgcmV0dXJuX3ZhbHVlPScwMTIzNDU2Nzg5YWJjZGVmZmVkY2JhOTg3NjU0MzIxMCAvdGVzdC9ob3N0L2ZpbGUwLmRhdFxuJwotICAgICAgICAgICAgICAgICAgICAgJzEyMzQ1Njc4OWFiY2RlZjAwZmVkY2JhOTg3NjU0MzIxIC90ZXN0L2hvc3QvZmlsZTEuZGF0XG4nKQotICAgIHdpdGggbW9jay5wYXRjaCgnZGV2aWwudXRpbHMuY21kX2hlbHBlci5HZXRDbWRPdXRwdXQnLAotICAgICAgICAgICAgICAgICAgICBuZXc9bW9ja19nZXRfY21kX291dHB1dCk6Ci0gICAgICBvdXQgPSBtZDVzdW0uQ2FsY3VsYXRlSG9zdE1kNVN1bXModGVzdF9wYXRocykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDIsIGxlbihvdXQpKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvdGVzdC9ob3N0L2ZpbGUwLmRhdCcgaW4gb3V0KQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJzAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwJywKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dFsnL3Rlc3QvaG9zdC9maWxlMC5kYXQnXSkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnL3Rlc3QvaG9zdC9maWxlMS5kYXQnIGluIG91dCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcxMjM0NTY3ODlhYmNkZWYwMGZlZGNiYTk4NzY1NDMyMScsCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRbJy90ZXN0L2hvc3QvZmlsZTEuZGF0J10pCi0gICAgICBtb2NrX2dldF9jbWRfb3V0cHV0LmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAotICAgICAgICAgIFtIT1NUX01ENV9FWEVDVVRBQkxFLCAnL3Rlc3QvaG9zdC9maWxlMC5kYXQnLCAnL3Rlc3QvaG9zdC9maWxlMS5kYXQnXSkKLQotICBkZWYgdGVzdENhbGN1bGF0ZURldmljZU1kNVN1bXNfbm9QYXRocyhzZWxmKToKLSAgICBkZXZpY2UgPSBtb2NrLk5vbkNhbGxhYmxlTW9jaygpCi0gICAgZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCA9IG1vY2suTW9jayhzaWRlX2VmZmVjdD1FeGNlcHRpb24oKSkKLQotICAgIG91dCA9IG1kNXN1bS5DYWxjdWxhdGVEZXZpY2VNZDVTdW1zKFtdLCBkZXZpY2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMCwgbGVuKG91dCkpCi0KLSAgZGVmIHRlc3RDYWxjdWxhdGVEZXZpY2VNZDVTdW1zX3NpbmdsZVBhdGgoc2VsZik6Ci0gICAgdGVzdF9wYXRoID0gJy9zdG9yYWdlL2VtdWxhdGVkL2xlZ2FjeS90ZXN0L2ZpbGUuZGF0JwotCi0gICAgZGV2aWNlID0gbW9jay5Ob25DYWxsYWJsZU1vY2soKQotICAgIGRldmljZV9tZDVzdW1fb3V0cHV0ID0gWwotICAgICAgICAnMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyMTAgJwotICAgICAgICAgICAgJy9zdG9yYWdlL2VtdWxhdGVkL2xlZ2FjeS90ZXN0L2ZpbGUuZGF0JywKLSAgICBdCi0gICAgZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCA9IG1vY2suTW9jayhyZXR1cm5fdmFsdWU9ZGV2aWNlX21kNXN1bV9vdXRwdXQpCi0KLSAgICB3aXRoIG1vY2sucGF0Y2goJ29zLnBhdGguZ2V0c2l6ZScsIHJldHVybl92YWx1ZT0xMzM3KToKLSAgICAgIG91dCA9IG1kNXN1bS5DYWxjdWxhdGVEZXZpY2VNZDVTdW1zKHRlc3RfcGF0aCwgZGV2aWNlKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgbGVuKG91dCkpCi0gICAgICBzZWxmLmFzc2VydFRydWUoJy9zdG9yYWdlL2VtdWxhdGVkL2xlZ2FjeS90ZXN0L2ZpbGUuZGF0JyBpbiBvdXQpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygnMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyMTAnLAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0Wycvc3RvcmFnZS9lbXVsYXRlZC9sZWdhY3kvdGVzdC9maWxlLmRhdCddKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgbGVuKGRldmljZS5SdW5TaGVsbENvbW1hbmQuY2FsbF9hcmdzX2xpc3QpKQotCi0gIGRlZiB0ZXN0Q2FsY3VsYXRlRGV2aWNlTWQ1U3Vtc19saXN0KHNlbGYpOgotICAgIHRlc3RfcGF0aCA9IFsnL3N0b3JhZ2UvZW11bGF0ZWQvbGVnYWN5L3Rlc3QvZmlsZTAuZGF0JywKLSAgICAgICAgICAgICAgICAgJy9zdG9yYWdlL2VtdWxhdGVkL2xlZ2FjeS90ZXN0L2ZpbGUxLmRhdCddCi0gICAgZGV2aWNlID0gbW9jay5Ob25DYWxsYWJsZU1vY2soKQotICAgIGRldmljZV9tZDVzdW1fb3V0cHV0ID0gWwotICAgICAgICAnMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyMTAgJwotICAgICAgICAgICAgJy9zdG9yYWdlL2VtdWxhdGVkL2xlZ2FjeS90ZXN0L2ZpbGUwLmRhdCcsCi0gICAgICAgICcxMjM0NTY3ODlhYmNkZWYwMGZlZGNiYTk4NzY1NDMyMSAnCi0gICAgICAgICAgICAnL3N0b3JhZ2UvZW11bGF0ZWQvbGVnYWN5L3Rlc3QvZmlsZTEuZGF0JywKLSAgICBdCi0gICAgZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCA9IG1vY2suTW9jayhyZXR1cm5fdmFsdWU9ZGV2aWNlX21kNXN1bV9vdXRwdXQpCi0KLSAgICB3aXRoIG1vY2sucGF0Y2goJ29zLnBhdGguZ2V0c2l6ZScsIHJldHVybl92YWx1ZT0xMzM3KToKLSAgICAgIG91dCA9IG1kNXN1bS5DYWxjdWxhdGVEZXZpY2VNZDVTdW1zKHRlc3RfcGF0aCwgZGV2aWNlKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMiwgbGVuKG91dCkpCi0gICAgICBzZWxmLmFzc2VydFRydWUoJy9zdG9yYWdlL2VtdWxhdGVkL2xlZ2FjeS90ZXN0L2ZpbGUwLmRhdCcgaW4gb3V0KQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJzAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwJywKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dFsnL3N0b3JhZ2UvZW11bGF0ZWQvbGVnYWN5L3Rlc3QvZmlsZTAuZGF0J10pCi0gICAgICBzZWxmLmFzc2VydFRydWUoJy9zdG9yYWdlL2VtdWxhdGVkL2xlZ2FjeS90ZXN0L2ZpbGUxLmRhdCcgaW4gb3V0KQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJzEyMzQ1Njc4OWFiY2RlZjAwZmVkY2JhOTg3NjU0MzIxJywKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dFsnL3N0b3JhZ2UvZW11bGF0ZWQvbGVnYWN5L3Rlc3QvZmlsZTEuZGF0J10pCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygxLCBsZW4oZGV2aWNlLlJ1blNoZWxsQ29tbWFuZC5jYWxsX2FyZ3NfbGlzdCkpCi0KLSAgZGVmIHRlc3RDYWxjdWxhdGVEZXZpY2VNZDVTdW1zX2dlbmVyYXRvcihzZWxmKToKLSAgICB0ZXN0X3BhdGggPSAoJy9zdG9yYWdlL2VtdWxhdGVkL2xlZ2FjeS90ZXN0L2ZpbGUlZC5kYXQnICUgbgotICAgICAgICAgICAgICAgICBmb3IgbiBpbiB4cmFuZ2UoMCwgMikpCi0KLSAgICBkZXZpY2UgPSBtb2NrLk5vbkNhbGxhYmxlTW9jaygpCi0gICAgZGV2aWNlX21kNXN1bV9vdXRwdXQgPSBbCi0gICAgICAgICcwMTIzNDU2Nzg5YWJjZGVmZmVkY2JhOTg3NjU0MzIxMCAnCi0gICAgICAgICAgICAnL3N0b3JhZ2UvZW11bGF0ZWQvbGVnYWN5L3Rlc3QvZmlsZTAuZGF0JywKLSAgICAgICAgJzEyMzQ1Njc4OWFiY2RlZjAwZmVkY2JhOTg3NjU0MzIxICcKLSAgICAgICAgICAgICcvc3RvcmFnZS9lbXVsYXRlZC9sZWdhY3kvdGVzdC9maWxlMS5kYXQnLAotICAgIF0KLSAgICBkZXZpY2UuUnVuU2hlbGxDb21tYW5kID0gbW9jay5Nb2NrKHJldHVybl92YWx1ZT1kZXZpY2VfbWQ1c3VtX291dHB1dCkKLQotICAgIHdpdGggbW9jay5wYXRjaCgnb3MucGF0aC5nZXRzaXplJywgcmV0dXJuX3ZhbHVlPTEzMzcpOgotICAgICAgb3V0ID0gbWQ1c3VtLkNhbGN1bGF0ZURldmljZU1kNVN1bXModGVzdF9wYXRoLCBkZXZpY2UpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygyLCBsZW4ob3V0KSkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnL3N0b3JhZ2UvZW11bGF0ZWQvbGVnYWN5L3Rlc3QvZmlsZTAuZGF0JyBpbiBvdXQpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygnMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyMTAnLAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0Wycvc3RvcmFnZS9lbXVsYXRlZC9sZWdhY3kvdGVzdC9maWxlMC5kYXQnXSkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnL3N0b3JhZ2UvZW11bGF0ZWQvbGVnYWN5L3Rlc3QvZmlsZTEuZGF0JyBpbiBvdXQpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygnMTIzNDU2Nzg5YWJjZGVmMDBmZWRjYmE5ODc2NTQzMjEnLAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0Wycvc3RvcmFnZS9lbXVsYXRlZC9sZWdhY3kvdGVzdC9maWxlMS5kYXQnXSkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGxlbihkZXZpY2UuUnVuU2hlbGxDb21tYW5kLmNhbGxfYXJnc19saXN0KSkKLQotICBkZWYgdGVzdENhbGN1bGF0ZURldmljZU1kNVN1bXNfc2luZ2xlUGF0aF9saW5rZXJXYXJuaW5nKHNlbGYpOgotICAgICMgU2VlIGNyYnVnLzQ3OTk2NgotICAgIHRlc3RfcGF0aCA9ICcvc3RvcmFnZS9lbXVsYXRlZC9sZWdhY3kvdGVzdC9maWxlLmRhdCcKLQotICAgIGRldmljZSA9IG1vY2suTm9uQ2FsbGFibGVNb2NrKCkKLSAgICBkZXZpY2VfbWQ1c3VtX291dHB1dCA9IFsKLSAgICAgICAgJ1dBUk5JTkc6IGxpbmtlcjogL2RhdGEvbG9jYWwvdG1wL21kNXN1bS9tZDVzdW1fYmluOiAnCi0gICAgICAgICAgICAndW51c2VkIERUIGVudHJ5OiB0eXBlIDB4MWQgYXJnIDB4MTVkYicsCi0gICAgICAgICdUSElTX0lTX05PVF9BX1ZBTElEX0NIRUNLU1VNX1paWiBzb21lIHJhbmRvbSB0ZXh0JywKLSAgICAgICAgJzAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwICcKLSAgICAgICAgICAgICcvc3RvcmFnZS9lbXVsYXRlZC9sZWdhY3kvdGVzdC9maWxlLmRhdCcsCi0gICAgXQotICAgIGRldmljZS5SdW5TaGVsbENvbW1hbmQgPSBtb2NrLk1vY2socmV0dXJuX3ZhbHVlPWRldmljZV9tZDVzdW1fb3V0cHV0KQotCi0gICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5wYXRoLmdldHNpemUnLCByZXR1cm5fdmFsdWU9MTMzNyk6Ci0gICAgICBvdXQgPSBtZDVzdW0uQ2FsY3VsYXRlRGV2aWNlTWQ1U3Vtcyh0ZXN0X3BhdGgsIGRldmljZSkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGxlbihvdXQpKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvc3RvcmFnZS9lbXVsYXRlZC9sZWdhY3kvdGVzdC9maWxlLmRhdCcgaW4gb3V0KQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJzAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwJywKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dFsnL3N0b3JhZ2UvZW11bGF0ZWQvbGVnYWN5L3Rlc3QvZmlsZS5kYXQnXSkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGxlbihkZXZpY2UuUnVuU2hlbGxDb21tYW5kLmNhbGxfYXJnc19saXN0KSkKLQotICBkZWYgdGVzdENhbGN1bGF0ZURldmljZU1kNVN1bXNfbGlzdF9maWxlTWlzc2luZyhzZWxmKToKLSAgICB0ZXN0X3BhdGggPSBbJy9zdG9yYWdlL2VtdWxhdGVkL2xlZ2FjeS90ZXN0L2ZpbGUwLmRhdCcsCi0gICAgICAgICAgICAgICAgICcvc3RvcmFnZS9lbXVsYXRlZC9sZWdhY3kvdGVzdC9maWxlMS5kYXQnXQotICAgIGRldmljZSA9IG1vY2suTm9uQ2FsbGFibGVNb2NrKCkKLSAgICBkZXZpY2VfbWQ1c3VtX291dHB1dCA9IFsKLSAgICAgICAgJzAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwICcKLSAgICAgICAgICAgICcvc3RvcmFnZS9lbXVsYXRlZC9sZWdhY3kvdGVzdC9maWxlMC5kYXQnLAotICAgICAgICAnWzA4MTkvMjAzNTEzOkVSUk9SOm1kNXN1bS5jYygyNSldIENvdWxkIG5vdCBvcGVuIGZpbGUgYXNkZicsCi0gICAgICAgICcnLAotICAgIF0KLSAgICBkZXZpY2UuUnVuU2hlbGxDb21tYW5kID0gbW9jay5Nb2NrKHJldHVybl92YWx1ZT1kZXZpY2VfbWQ1c3VtX291dHB1dCkKLQotICAgIHdpdGggbW9jay5wYXRjaCgnb3MucGF0aC5nZXRzaXplJywgcmV0dXJuX3ZhbHVlPTEzMzcpOgotICAgICAgb3V0ID0gbWQ1c3VtLkNhbGN1bGF0ZURldmljZU1kNVN1bXModGVzdF9wYXRoLCBkZXZpY2UpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygxLCBsZW4ob3V0KSkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnL3N0b3JhZ2UvZW11bGF0ZWQvbGVnYWN5L3Rlc3QvZmlsZTAuZGF0JyBpbiBvdXQpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygnMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyMTAnLAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0Wycvc3RvcmFnZS9lbXVsYXRlZC9sZWdhY3kvdGVzdC9maWxlMC5kYXQnXSkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGxlbihkZXZpY2UuUnVuU2hlbGxDb21tYW5kLmNhbGxfYXJnc19saXN0KSkKLQotICBkZWYgdGVzdENhbGN1bGF0ZURldmljZU1kNVN1bXNfcmVxdWlyZXNCaW5hcnkoc2VsZik6Ci0gICAgdGVzdF9wYXRoID0gJy9zdG9yYWdlL2VtdWxhdGVkL2xlZ2FjeS90ZXN0L2ZpbGUuZGF0JwotCi0gICAgZGV2aWNlID0gbW9jay5Ob25DYWxsYWJsZU1vY2soKQotICAgIGRldmljZS5hZGIgPSBtb2NrLk5vbkNhbGxhYmxlTW9jaygpCi0gICAgZGV2aWNlLmFkYi5QdXNoID0gbW9jay5Nb2NrKCkKLSAgICBkZXZpY2VfbWQ1c3VtX291dHB1dCA9IFsKLSAgICAgICAgJ1dBUk5JTkc6IGxpbmtlcjogL2RhdGEvbG9jYWwvdG1wL21kNXN1bS9tZDVzdW1fYmluOiAnCi0gICAgICAgICAgICAndW51c2VkIERUIGVudHJ5OiB0eXBlIDB4MWQgYXJnIDB4MTVkYicsCi0gICAgICAgICdUSElTX0lTX05PVF9BX1ZBTElEX0NIRUNLU1VNX1paWiBzb21lIHJhbmRvbSB0ZXh0JywKLSAgICAgICAgJzAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwICcKLSAgICAgICAgICAgICcvc3RvcmFnZS9lbXVsYXRlZC9sZWdhY3kvdGVzdC9maWxlLmRhdCcsCi0gICAgXQotICAgIGVycm9yID0gZGV2aWNlX2Vycm9ycy5BZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcignY21kJywgJ291dCcsIDIpCi0gICAgZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCA9IG1vY2suTW9jaygKLSAgICAgICAgc2lkZV9lZmZlY3Q9KGVycm9yLCAnJywgZGV2aWNlX21kNXN1bV9vdXRwdXQpKQotCi0gICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5wYXRoLmlzZGlyJywgcmV0dXJuX3ZhbHVlPVRydWUpLCAoCi0gICAgICAgICBtb2NrLnBhdGNoKCdvcy5wYXRoLmdldHNpemUnLCByZXR1cm5fdmFsdWU9MTMzNykpOgotICAgICAgb3V0ID0gbWQ1c3VtLkNhbGN1bGF0ZURldmljZU1kNVN1bXModGVzdF9wYXRoLCBkZXZpY2UpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygxLCBsZW4ob3V0KSkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnL3N0b3JhZ2UvZW11bGF0ZWQvbGVnYWN5L3Rlc3QvZmlsZS5kYXQnIGluIG91dCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcwMTIzNDU2Nzg5YWJjZGVmZmVkY2JhOTg3NjU0MzIxMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRbJy9zdG9yYWdlL2VtdWxhdGVkL2xlZ2FjeS90ZXN0L2ZpbGUuZGF0J10pCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygzLCBsZW4oZGV2aWNlLlJ1blNoZWxsQ29tbWFuZC5jYWxsX2FyZ3NfbGlzdCkpCi0gICAgICBkZXZpY2UuYWRiLlB1c2guYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCi0gICAgICAgICAgJ3Rlc3Qvb3V0L2RpcmVjdG9yeS9tZDVzdW1fZGlzdCcsICcvZGF0YS9sb2NhbC90bXAvbWQ1c3VtJykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3BlcmYvX19pbml0X18ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3BlcmYvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYjIzZGYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9wZXJmL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3BlcmYvY2FjaGVfY29udHJvbC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvcGVyZi9jYWNoZV9jb250cm9sLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzc4MmI1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvcGVyZi9jYWNoZV9jb250cm9sLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0KLWNsYXNzIENhY2hlQ29udHJvbChvYmplY3QpOgotICBfRFJPUF9DQUNIRVMgPSAnL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzJwotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2UpOgotICAgIHNlbGYuX2RldmljZSA9IGRldmljZQotCi0gIGRlZiBEcm9wUmFtQ2FjaGVzKHNlbGYpOgotICAgICIiIkRyb3BzIHRoZSBmaWxlc3lzdGVtIHJhbSBjYWNoZXMgZm9yIHBlcmZvcm1hbmNlIHRlc3RpbmcuIiIiCi0gICAgc2VsZi5fZGV2aWNlLlJ1blNoZWxsQ29tbWFuZChbJ3N5bmMnXSwgY2hlY2tfcmV0dXJuPVRydWUsIGFzX3Jvb3Q9VHJ1ZSkKLSAgICBzZWxmLl9kZXZpY2UuV3JpdGVGaWxlKENhY2hlQ29udHJvbC5fRFJPUF9DQUNIRVMsICczJywgYXNfcm9vdD1UcnVlKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9wZXJmL3BlcmZfY29udHJvbC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvcGVyZi9wZXJmX2NvbnRyb2wucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YTVkYjYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9wZXJmL3BlcmZfY29udHJvbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBhdGV4aXQKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgcmUKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi0KLWxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWNsYXNzIFBlcmZDb250cm9sKG9iamVjdCk6Ci0gICIiIlByb3ZpZGVzIG1ldGhvZHMgZm9yIHNldHRpbmcgdGhlIHBlcmZvcm1hbmNlIG1vZGUgb2YgYSBkZXZpY2UuIiIiCi0KLSAgX0FWQUlMQUJMRV9HT1ZFUk5PUlNfUkVMX1BBVEggPSAnY3B1ZnJlcS9zY2FsaW5nX2F2YWlsYWJsZV9nb3Zlcm5vcnMnCi0gIF9DUFVfRklMRV9QQVRURVJOID0gcmUuY29tcGlsZShyJ15jcHVcZCskJykKLSAgX0NQVV9QQVRIID0gJy9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1JwotICBfS0VSTkVMX01BWCA9ICcvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9rZXJuZWxfbWF4JwotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2UpOgotICAgIHNlbGYuX2RldmljZSA9IGRldmljZQotICAgIHNlbGYuX2NwdV9maWxlcyA9IFsKLSAgICAgICAgZmlsZW5hbWUKLSAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNlbGYuX2RldmljZS5MaXN0RGlyZWN0b3J5KHNlbGYuX0NQVV9QQVRILCBhc19yb290PVRydWUpCi0gICAgICAgIGlmIHNlbGYuX0NQVV9GSUxFX1BBVFRFUk4ubWF0Y2goZmlsZW5hbWUpXQotICAgIGFzc2VydCBzZWxmLl9jcHVfZmlsZXMsICdGYWlsZWQgdG8gZGV0ZWN0IENQVXMuJwotICAgIHNlbGYuX2NwdV9maWxlX2xpc3QgPSAnICcuam9pbihzZWxmLl9jcHVfZmlsZXMpCi0gICAgbG9nZ2VyLmluZm8oJ0NQVXMgZm91bmQ6ICVzJywgc2VsZi5fY3B1X2ZpbGVfbGlzdCkKLQotICAgIHNlbGYuX2hhdmVfbXBkZWNpc2lvbiA9IHNlbGYuX2RldmljZS5GaWxlRXhpc3RzKCcvc3lzdGVtL2Jpbi9tcGRlY2lzaW9uJykKLQotICAgIHJhdyA9IHNlbGYuX1JlYWRFYWNoQ3B1RmlsZShzZWxmLl9BVkFJTEFCTEVfR09WRVJOT1JTX1JFTF9QQVRIKQotICAgIHNlbGYuX2F2YWlsYWJsZV9nb3Zlcm5vcnMgPSBbCi0gICAgICAgIChjcHUsIHJhd19nb3Zlcm5vcnMuc3RyaXAoKS5zcGxpdCgpIGlmIG5vdCBleGl0X2NvZGUgZWxzZSBOb25lKQotICAgICAgICBmb3IgY3B1LCByYXdfZ292ZXJub3JzLCBleGl0X2NvZGUgaW4gcmF3XQotCi0gIGRlZiBTZXRIaWdoUGVyZk1vZGUoc2VsZik6Ci0gICAgIiIiU2V0cyB0aGUgaGlnaGVzdCBzdGFibGUgcGVyZm9ybWFuY2UgbW9kZSBmb3IgdGhlIGRldmljZS4iIiIKLSAgICB0cnk6Ci0gICAgICBzZWxmLl9kZXZpY2UuRW5hYmxlUm9vdCgpCi0gICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yOgotICAgICAgbWVzc2FnZSA9ICdOZWVkIHJvb3QgZm9yIHBlcmZvcm1hbmNlIG1vZGUuIFJlc3VsdHMgbWF5IGJlIE5PSVNZISEnCi0gICAgICBsb2dnZXIud2FybmluZyhtZXNzYWdlKQotICAgICAgIyBBZGQgYW4gYWRkaXRpb25hbCB3YXJuaW5nIGF0IGV4aXQsIHN1Y2ggdGhhdCBpdCdzIGNsZWFyIHRoYXQgYW55IHJlc3VsdHMKLSAgICAgICMgbWF5IGJlIGRpZmZlcmVudC9ub2lzeSAoZHVlIHRvIHRoZSBsYWNrIG9mIGludGVuZGVkIHBlcmZvcm1hbmNlIG1vZGUpLgotICAgICAgYXRleGl0LnJlZ2lzdGVyKGxvZ2dlci53YXJuaW5nLCBtZXNzYWdlKQotICAgICAgcmV0dXJuCi0KLSAgICBwcm9kdWN0X21vZGVsID0gc2VsZi5fZGV2aWNlLnByb2R1Y3RfbW9kZWwKLSAgICAjIFRPRE8oZXBlbm5lcik6IEVuYWJsZSBvbiBhbGwgZGV2aWNlcyAoaHR0cDovL2NyYnVnLmNvbS8zODM1NjYpCi0gICAgaWYgJ05leHVzIDQnID09IHByb2R1Y3RfbW9kZWw6Ci0gICAgICBzZWxmLl9Gb3JjZUFsbENwdXNPbmxpbmUoVHJ1ZSkKLSAgICAgIGlmIG5vdCBzZWxmLl9BbGxDcHVzQXJlT25saW5lKCk6Ci0gICAgICAgIGxvZ2dlci53YXJuaW5nKCdGYWlsZWQgdG8gZm9yY2UgQ1BVcyBvbmxpbmUuIFJlc3VsdHMgbWF5IGJlIE5PSVNZIScpCi0gICAgICBzZWxmLlNldFNjYWxpbmdHb3Zlcm5vcigncGVyZm9ybWFuY2UnKQotICAgIGVsaWYgJ05leHVzIDUnID09IHByb2R1Y3RfbW9kZWw6Ci0gICAgICBzZWxmLl9Gb3JjZUFsbENwdXNPbmxpbmUoVHJ1ZSkKLSAgICAgIGlmIG5vdCBzZWxmLl9BbGxDcHVzQXJlT25saW5lKCk6Ci0gICAgICAgIGxvZ2dlci53YXJuaW5nKCdGYWlsZWQgdG8gZm9yY2UgQ1BVcyBvbmxpbmUuIFJlc3VsdHMgbWF5IGJlIE5PSVNZIScpCi0gICAgICBzZWxmLlNldFNjYWxpbmdHb3Zlcm5vcigncGVyZm9ybWFuY2UnKQotICAgICAgc2VsZi5fU2V0U2NhbGluZ01heEZyZXEoMTE5MDQwMCkKLSAgICAgIHNlbGYuX1NldE1heEdwdUNsb2NrKDIwMDAwMDAwMCkKLSAgICBlbHNlOgotICAgICAgc2VsZi5TZXRTY2FsaW5nR292ZXJub3IoJ3BlcmZvcm1hbmNlJykKLQotICBkZWYgU2V0UGVyZlByb2ZpbGluZ01vZGUoc2VsZik6Ci0gICAgIiIiRW5hYmxlcyBhbGwgY29yZXMgZm9yIHJlbGlhYmxlIHBlcmYgcHJvZmlsaW5nLiIiIgotICAgIHNlbGYuX0ZvcmNlQWxsQ3B1c09ubGluZShUcnVlKQotICAgIHNlbGYuU2V0U2NhbGluZ0dvdmVybm9yKCdwZXJmb3JtYW5jZScpCi0gICAgaWYgbm90IHNlbGYuX0FsbENwdXNBcmVPbmxpbmUoKToKLSAgICAgIGlmIG5vdCBzZWxmLl9kZXZpY2UuSGFzUm9vdCgpOgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ05lZWQgcm9vdCB0byBmb3JjZSBDUFVzIG9ubGluZS4nKQotICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdGYWlsZWQgdG8gZm9yY2UgQ1BVcyBvbmxpbmUuJykKLQotICBkZWYgU2V0RGVmYXVsdFBlcmZNb2RlKHNlbGYpOgotICAgICIiIlNldHMgdGhlIHBlcmZvcm1hbmNlIG1vZGUgZm9yIHRoZSBkZXZpY2UgdG8gaXRzIGRlZmF1bHQgbW9kZS4iIiIKLSAgICBpZiBub3Qgc2VsZi5fZGV2aWNlLkhhc1Jvb3QoKToKLSAgICAgIHJldHVybgotICAgIHByb2R1Y3RfbW9kZWwgPSBzZWxmLl9kZXZpY2UucHJvZHVjdF9tb2RlbAotICAgIGlmICdOZXh1cyA1JyA9PSBwcm9kdWN0X21vZGVsOgotICAgICAgaWYgc2VsZi5fQWxsQ3B1c0FyZU9ubGluZSgpOgotICAgICAgICBzZWxmLl9TZXRTY2FsaW5nTWF4RnJlcSgyMjY1NjAwKQotICAgICAgICBzZWxmLl9TZXRNYXhHcHVDbG9jayg0NTAwMDAwMDApCi0KLSAgICBnb3Zlcm5vcl9tb2RlID0gewotICAgICAgICAnR1QtSTkzMDAnOiAncGVnYXN1c3EnLAotICAgICAgICAnR2FsYXh5IE5leHVzJzogJ2ludGVyYWN0aXZlJywKLSAgICAgICAgJ05leHVzIDQnOiAnb25kZW1hbmQnLAotICAgICAgICAnTmV4dXMgNSc6ICdvbmRlbWFuZCcsCi0gICAgICAgICdOZXh1cyA3JzogJ2ludGVyYWN0aXZlJywKLSAgICAgICAgJ05leHVzIDEwJzogJ2ludGVyYWN0aXZlJwotICAgIH0uZ2V0KHByb2R1Y3RfbW9kZWwsICdvbmRlbWFuZCcpCi0gICAgc2VsZi5TZXRTY2FsaW5nR292ZXJub3IoZ292ZXJub3JfbW9kZSkKLSAgICBzZWxmLl9Gb3JjZUFsbENwdXNPbmxpbmUoRmFsc2UpCi0KLSAgZGVmIEdldENwdUluZm8oc2VsZik6Ci0gICAgb25saW5lID0gKG91dHB1dC5yc3RyaXAoKSA9PSAnMScgYW5kIHN0YXR1cyA9PSAwCi0gICAgICAgICAgICAgIGZvciAoXywgb3V0cHV0LCBzdGF0dXMpIGluIHNlbGYuX0ZvckVhY2hDcHUoJ2NhdCAiJENQVS9vbmxpbmUiJykpCi0gICAgZ292ZXJub3IgPSAob3V0cHV0LnJzdHJpcCgpIGlmIHN0YXR1cyA9PSAwIGVsc2UgTm9uZQotICAgICAgICAgICAgICAgIGZvciAoXywgb3V0cHV0LCBzdGF0dXMpCi0gICAgICAgICAgICAgICAgaW4gc2VsZi5fRm9yRWFjaENwdSgnY2F0ICIkQ1BVL2NwdWZyZXEvc2NhbGluZ19nb3Zlcm5vciInKSkKLSAgICByZXR1cm4gemlwKHNlbGYuX2NwdV9maWxlcywgb25saW5lLCBnb3Zlcm5vcikKLQotICBkZWYgX0ZvckVhY2hDcHUoc2VsZiwgY21kKToKLSAgICBzY3JpcHQgPSAnOyAnLmpvaW4oWwotICAgICAgICAnZm9yIENQVSBpbiAlcycgJSBzZWxmLl9jcHVfZmlsZV9saXN0LAotICAgICAgICAnZG8gJXMnICUgY21kLAotICAgICAgICAnZWNobyAtbiAiJX4lJD8lfiUiJywKLSAgICAgICAgJ2RvbmUnCi0gICAgXSkKLSAgICBvdXRwdXQgPSBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBzY3JpcHQsIGN3ZD1zZWxmLl9DUFVfUEFUSCwgY2hlY2tfcmV0dXJuPVRydWUsIGFzX3Jvb3Q9VHJ1ZSwgc2hlbGw9VHJ1ZSkKLSAgICBvdXRwdXQgPSAnXG4nLmpvaW4ob3V0cHV0KS5zcGxpdCgnJX4lJykKLSAgICByZXR1cm4gemlwKHNlbGYuX2NwdV9maWxlcywgb3V0cHV0WzA6OjJdLCAoaW50KGMpIGZvciBjIGluIG91dHB1dFsxOjoyXSkpCi0KLSAgZGVmIF9Xcml0ZUVhY2hDcHVGaWxlKHNlbGYsIHBhdGgsIHZhbHVlKToKLSAgICBzZWxmLl9Db25kaXRpb25hbGx5V3JpdGVFYWNoQ3B1RmlsZShwYXRoLCB2YWx1ZSwgY29uZGl0aW9uPSd0cnVlJykKLQotICBkZWYgX0NvbmRpdGlvbmFsbHlXcml0ZUVhY2hDcHVGaWxlKHNlbGYsIHBhdGgsIHZhbHVlLCBjb25kaXRpb24pOgotICAgIHRlbXBsYXRlID0gKAotICAgICAgICAne2NvbmRpdGlvbn0gJiYgdGVzdCAtZSAiJENQVS97cGF0aH0iICYmIGVjaG8ge3ZhbHVlfSA+ICIkQ1BVL3twYXRofSInKQotICAgIHJlc3VsdHMgPSBzZWxmLl9Gb3JFYWNoQ3B1KAotICAgICAgICB0ZW1wbGF0ZS5mb3JtYXQocGF0aD1wYXRoLCB2YWx1ZT12YWx1ZSwgY29uZGl0aW9uPWNvbmRpdGlvbikpCi0gICAgY3B1cyA9ICcgJy5qb2luKGNwdSBmb3IgKGNwdSwgXywgc3RhdHVzKSBpbiByZXN1bHRzIGlmIHN0YXR1cyA9PSAwKQotICAgIGlmIGNwdXM6Ci0gICAgICBsb2dnZXIuaW5mbygnU3VjY2Vzc2Z1bGx5IHNldCAlcyB0byAlciBvbjogJXMnLCBwYXRoLCB2YWx1ZSwgY3B1cykKLSAgICBlbHNlOgotICAgICAgbG9nZ2VyLndhcm5pbmcoJ0ZhaWxlZCB0byBzZXQgJXMgdG8gJXIgb24gYW55IGNwdXMnLCBwYXRoLCB2YWx1ZSkKLQotICBkZWYgX1JlYWRFYWNoQ3B1RmlsZShzZWxmLCBwYXRoKToKLSAgICByZXR1cm4gc2VsZi5fRm9yRWFjaENwdSgKLSAgICAgICAgJ2NhdCAiJENQVS97cGF0aH0iJy5mb3JtYXQocGF0aD1wYXRoKSkKLQotICBkZWYgU2V0U2NhbGluZ0dvdmVybm9yKHNlbGYsIHZhbHVlKToKLSAgICAiIiJTZXRzIHRoZSBzY2FsaW5nIGdvdmVybm9yIHRvIHRoZSBnaXZlbiB2YWx1ZSBvbiBhbGwgcG9zc2libGUgQ1BVcy4KLQotICAgIFRoaXMgZG9lcyBub3QgYXR0ZW1wdCB0byBzZXQgYSBnb3Zlcm5vciB0byBhIHZhbHVlIG5vdCByZXBvcnRlZCBhcyBhdmFpbGFibGUKLSAgICBvbiB0aGUgY29ycmVzcG9uZGluZyBDUFUuCi0KLSAgICBBcmdzOgotICAgICAgdmFsdWU6IFtzdHJpbmddIFRoZSBuZXcgZ292ZXJub3IgdmFsdWUuCi0gICAgIiIiCi0gICAgY29uZGl0aW9uID0gJ3Rlc3QgLWUgIntwYXRofSIgJiYgZ3JlcCAtcSB7dmFsdWV9IHtwYXRofScuZm9ybWF0KAotICAgICAgICBwYXRoPSgnJHtDUFV9LyVzJyAlIHNlbGYuX0FWQUlMQUJMRV9HT1ZFUk5PUlNfUkVMX1BBVEgpLAotICAgICAgICB2YWx1ZT12YWx1ZSkKLSAgICBzZWxmLl9Db25kaXRpb25hbGx5V3JpdGVFYWNoQ3B1RmlsZSgKLSAgICAgICAgJ2NwdWZyZXEvc2NhbGluZ19nb3Zlcm5vcicsIHZhbHVlLCBjb25kaXRpb24pCi0KLSAgZGVmIEdldFNjYWxpbmdHb3Zlcm5vcihzZWxmKToKLSAgICAiIiJHZXRzIHRoZSBjdXJyZW50bHkgc2V0IGdvdmVybm9yIGZvciBlYWNoIENQVS4KLQotICAgIFJldHVybnM6Ci0gICAgICBBbiBpdGVyYWJsZSBvZiAyLXR1cGxlcywgZWFjaCBjb250YWluaW5nIHRoZSBjcHUgYW5kIHRoZSBjdXJyZW50Ci0gICAgICBnb3Zlcm5vci4KLSAgICAiIiIKLSAgICByYXcgPSBzZWxmLl9SZWFkRWFjaENwdUZpbGUoJ2NwdWZyZXEvc2NhbGluZ19nb3Zlcm5vcicpCi0gICAgcmV0dXJuIFsKLSAgICAgICAgKGNwdSwgcmF3X2dvdmVybm9yLnN0cmlwKCkgaWYgbm90IGV4aXRfY29kZSBlbHNlIE5vbmUpCi0gICAgICAgIGZvciBjcHUsIHJhd19nb3Zlcm5vciwgZXhpdF9jb2RlIGluIHJhd10KLQotICBkZWYgTGlzdEF2YWlsYWJsZUdvdmVybm9ycyhzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBnb3Zlcm5vcnMgZm9yIGVhY2ggQ1BVLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEFuIGl0ZXJhYmxlIG9mIDItdHVwbGVzLCBlYWNoIGNvbnRhaW5pbmcgdGhlIGNwdSBhbmQgYSBsaXN0IG9mIGF2YWlsYWJsZQotICAgICAgZ292ZXJub3JzIGZvciB0aGF0IGNwdS4KLSAgICAiIiIKLSAgICByZXR1cm4gc2VsZi5fYXZhaWxhYmxlX2dvdmVybm9ycwotCi0gIGRlZiBfU2V0U2NhbGluZ01heEZyZXEoc2VsZiwgdmFsdWUpOgotICAgIHNlbGYuX1dyaXRlRWFjaENwdUZpbGUoJ2NwdWZyZXEvc2NhbGluZ19tYXhfZnJlcScsICclZCcgJSB2YWx1ZSkKLQotICBkZWYgX1NldE1heEdwdUNsb2NrKHNlbGYsIHZhbHVlKToKLSAgICBzZWxmLl9kZXZpY2UuV3JpdGVGaWxlKCcvc3lzL2NsYXNzL2tnc2wva2dzbC0zZDAvbWF4X2dwdWNsaycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIodmFsdWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNfcm9vdD1UcnVlKQotCi0gIGRlZiBfQWxsQ3B1c0FyZU9ubGluZShzZWxmKToKLSAgICByZXN1bHRzID0gc2VsZi5fRm9yRWFjaENwdSgnY2F0ICIkQ1BVL29ubGluZSInKQotICAgICMgVE9ETyhlcGVubmVyKTogSW52ZXN0aWdhdGUgd2h5IGZpbGUgbWF5IGJlIG1pc3NpbmcKLSAgICAjIChodHRwOi8vY3JidWcuY29tLzM5NzExOCkKLSAgICByZXR1cm4gYWxsKG91dHB1dC5yc3RyaXAoKSA9PSAnMScgYW5kIHN0YXR1cyA9PSAwCi0gICAgICAgICAgICAgICBmb3IgKGNwdSwgb3V0cHV0LCBzdGF0dXMpIGluIHJlc3VsdHMKLSAgICAgICAgICAgICAgIGlmIGNwdSAhPSAnY3B1MCcpCi0KLSAgZGVmIF9Gb3JjZUFsbENwdXNPbmxpbmUoc2VsZiwgZm9yY2Vfb25saW5lKToKLSAgICAiIiJFbmFibGUgYWxsIENQVXMgb24gYSBkZXZpY2UuCi0KLSAgICBTb21lIHZlbmRvcnMgKG9yIG9ubHkgUXVhbGNvbW0/KSBob3QtcGx1ZyB0aGVpciBDUFVzLCB3aGljaCBjYW4gYWRkIG5vaXNlCi0gICAgdG8gbWVhc3VyZW1lbnRzOgotICAgIC0gSW4gcGVyZiwgc2FtcGxlcyBhcmUgb25seSB0YWtlbiBmb3IgdGhlIENQVXMgdGhhdCBhcmUgb25saW5lIHdoZW4gdGhlCi0gICAgICBtZWFzdXJlbWVudCBpcyBzdGFydGVkLgotICAgIC0gVGhlIHNjYWxpbmcgZ292ZXJub3IgY2FuJ3QgYmUgc2V0IGZvciBhbiBvZmZsaW5lIENQVSBhbmQgZnJlcXVlbmN5IHNjYWxpbmcKLSAgICAgIG9uIG5ld2x5IGVuYWJsZWQgQ1BVcyBhZGRzIG5vaXNlIHRvIGJvdGggcGVyZiBhbmQgdHJhY2luZyBtZWFzdXJlbWVudHMuCi0KLSAgICBJdCBhcHBlYXJzIFF1YWxjb21tIGlzIHRoZSBvbmx5IHZlbmRvciB0aGF0IGhvdC1wbHVncyBDUFVzLCBhbmQgb24gUXVhbGNvbW0KLSAgICB0aGlzIGlzIGRvbmUgYnkgIm1wZGVjaXNpb24iLgotCi0gICAgIiIiCi0gICAgaWYgc2VsZi5faGF2ZV9tcGRlY2lzaW9uOgotICAgICAgY21kID0gWydzdG9wJywgJ21wZGVjaXNpb24nXSBpZiBmb3JjZV9vbmxpbmUgZWxzZSBbJ3N0YXJ0JywgJ21wZGVjaXNpb24nXQotICAgICAgc2VsZi5fZGV2aWNlLlJ1blNoZWxsQ29tbWFuZChjbWQsIGNoZWNrX3JldHVybj1UcnVlLCBhc19yb290PVRydWUpCi0KLSAgICBpZiBub3Qgc2VsZi5faGF2ZV9tcGRlY2lzaW9uIGFuZCBub3Qgc2VsZi5fQWxsQ3B1c0FyZU9ubGluZSgpOgotICAgICAgbG9nZ2VyLndhcm5pbmcoJ1VuZXhwZWN0ZWQgY3B1IGhvdCBwbHVnZ2luZyBkZXRlY3RlZC4nKQotCi0gICAgaWYgZm9yY2Vfb25saW5lOgotICAgICAgc2VsZi5fRm9yRWFjaENwdSgnZWNobyAxID4gIiRDUFUvb25saW5lIicpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3BlcmYvcGVyZl9jb250cm9sX2RldmljZXRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3BlcmYvcGVyZl9jb250cm9sX2RldmljZXRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NDU4MDMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9wZXJmL3BlcmZfY29udHJvbF9kZXZpY2V0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotIyBweWxpbnQ6IGRpc2FibGU9VzAyMTIKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLQotc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nLCAnLi4nKSkKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdGVzdF9jYXNlCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkLnBlcmYgaW1wb3J0IHBlcmZfY29udHJvbAotCi0KLWNsYXNzIFRlc3RQZXJmQ29udHJvbChkZXZpY2VfdGVzdF9jYXNlLkRldmljZVRlc3RDYXNlKToKLQotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc3VwZXIoVGVzdFBlcmZDb250cm9sLCBzZWxmKS5zZXRVcCgpCi0gICAgaWYgbm90IG9zLmdldGVudignQlVJTERUWVBFJyk6Ci0gICAgICBvcy5lbnZpcm9uWydCVUlMRFRZUEUnXSA9ICdEZWJ1ZycKLSAgICBzZWxmLl9kZXZpY2UgPSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMoc2VsZi5zZXJpYWwpCi0KLSAgZGVmIHRlc3RIaWdoUGVyZk1vZGUoc2VsZik6Ci0gICAgcGVyZiA9IHBlcmZfY29udHJvbC5QZXJmQ29udHJvbChzZWxmLl9kZXZpY2UpCi0gICAgdHJ5OgotICAgICAgcGVyZi5TZXRQZXJmUHJvZmlsaW5nTW9kZSgpCi0gICAgICBjcHVfaW5mbyA9IHBlcmYuR2V0Q3B1SW5mbygpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocGVyZi5fY3B1X2ZpbGVzKSwgbGVuKGNwdV9pbmZvKSkKLSAgICAgIGZvciBfLCBvbmxpbmUsIGdvdmVybm9yIGluIGNwdV9pbmZvOgotICAgICAgICBzZWxmLmFzc2VydFRydWUob25saW5lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygncGVyZm9ybWFuY2UnLCBnb3Zlcm5vcikKLSAgICBmaW5hbGx5OgotICAgICAgcGVyZi5TZXREZWZhdWx0UGVyZk1vZGUoKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvcGVyZi9zdXJmYWNlX3N0YXRzX2NvbGxlY3Rvci5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvcGVyZi9zdXJmYWNlX3N0YXRzX2NvbGxlY3Rvci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFiNDkzZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3BlcmYvc3VyZmFjZV9zdGF0c19jb2xsZWN0b3IucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgUXVldWUKLWltcG9ydCB0aHJlYWRpbmcKLQotCi0jIExvZyBtYXJrZXIgY29udGFpbmluZyBTdXJmYWNlVGV4dHVyZSB0aW1lc3RhbXBzLgotX1NVUkZBQ0VfVEVYVFVSRV9USU1FU1RBTVBTX01FU1NBR0UgPSAnU3VyZmFjZVRleHR1cmUgdXBkYXRlIHRpbWVzdGFtcHMnCi1fU1VSRkFDRV9URVhUVVJFX1RJTUVTVEFNUF9SRSA9IHInXGQrJwotCi0KLWNsYXNzIFN1cmZhY2VTdGF0c0NvbGxlY3RvcihvYmplY3QpOgotICAiIiJDb2xsZWN0cyBzdXJmYWNlIHN0YXRzIGZvciBhIFN1cmZhY2VWaWV3IGZyb20gdGhlIG91dHB1dCBvZiBTdXJmYWNlRmxpbmdlci4KLQotICBBcmdzOgotICAgIGRldmljZTogQSBEZXZpY2VVdGlscyBpbnN0YW5jZS4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGRldmljZSk6Ci0gICAgc2VsZi5fZGV2aWNlID0gZGV2aWNlCi0gICAgc2VsZi5fY29sbGVjdG9yX3RocmVhZCA9IE5vbmUKLSAgICBzZWxmLl9zdXJmYWNlX2JlZm9yZSA9IE5vbmUKLSAgICBzZWxmLl9nZXRfZGF0YV9ldmVudCA9IE5vbmUKLSAgICBzZWxmLl9kYXRhX3F1ZXVlID0gTm9uZQotICAgIHNlbGYuX3N0b3BfZXZlbnQgPSBOb25lCi0gICAgc2VsZi5fd2Fybl9hYm91dF9lbXB0eV9kYXRhID0gVHJ1ZQotCi0gIGRlZiBEaXNhYmxlV2FybmluZ0Fib3V0RW1wdHlEYXRhKHNlbGYpOgotICAgIHNlbGYuX3dhcm5fYWJvdXRfZW1wdHlfZGF0YSA9IEZhbHNlCi0KLSAgZGVmIFN0YXJ0KHNlbGYpOgotICAgIGFzc2VydCBub3Qgc2VsZi5fY29sbGVjdG9yX3RocmVhZAotCi0gICAgaWYgc2VsZi5fQ2xlYXJTdXJmYWNlRmxpbmdlckxhdGVuY3lEYXRhKCk6Ci0gICAgICBzZWxmLl9nZXRfZGF0YV9ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCi0gICAgICBzZWxmLl9zdG9wX2V2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKLSAgICAgIHNlbGYuX2RhdGFfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICBzZWxmLl9jb2xsZWN0b3JfdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5fQ29sbGVjdG9yVGhyZWFkKQotICAgICAgc2VsZi5fY29sbGVjdG9yX3RocmVhZC5zdGFydCgpCi0gICAgZWxzZToKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbignU3VyZmFjZUZsaW5nZXIgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGRldmljZS4nKQotCi0gIGRlZiBTdG9wKHNlbGYpOgotICAgIGFzc2VydCBzZWxmLl9jb2xsZWN0b3JfdGhyZWFkCi0gICAgKHJlZnJlc2hfcGVyaW9kLCB0aW1lc3RhbXBzKSA9IHNlbGYuX0dldERhdGFGcm9tVGhyZWFkKCkKLSAgICBpZiBzZWxmLl9jb2xsZWN0b3JfdGhyZWFkOgotICAgICAgc2VsZi5fc3RvcF9ldmVudC5zZXQoKQotICAgICAgc2VsZi5fY29sbGVjdG9yX3RocmVhZC5qb2luKCkKLSAgICAgIHNlbGYuX2NvbGxlY3Rvcl90aHJlYWQgPSBOb25lCi0gICAgcmV0dXJuIChyZWZyZXNoX3BlcmlvZCwgdGltZXN0YW1wcykKLQotICBkZWYgX0NvbGxlY3RvclRocmVhZChzZWxmKToKLSAgICBsYXN0X3RpbWVzdGFtcCA9IDAKLSAgICB0aW1lc3RhbXBzID0gW10KLSAgICByZXRyaWVzID0gMAotCi0gICAgd2hpbGUgbm90IHNlbGYuX3N0b3BfZXZlbnQuaXNfc2V0KCk6Ci0gICAgICBzZWxmLl9nZXRfZGF0YV9ldmVudC53YWl0KDEpCi0gICAgICB0cnk6Ci0gICAgICAgIHJlZnJlc2hfcGVyaW9kLCBuZXdfdGltZXN0YW1wcyA9IHNlbGYuX0dldFN1cmZhY2VGbGluZ2VyRnJhbWVEYXRhKCkKLSAgICAgICAgaWYgcmVmcmVzaF9wZXJpb2QgaXMgTm9uZSBvciB0aW1lc3RhbXBzIGlzIE5vbmU6Ci0gICAgICAgICAgcmV0cmllcyArPSAxCi0gICAgICAgICAgaWYgcmV0cmllcyA8IDM6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgIGlmIGxhc3RfdGltZXN0YW1wOgotICAgICAgICAgICAgIyBTb21lIGRhdGEgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQsIGJ1dCBlaXRoZXIgdGhlIGFwcAotICAgICAgICAgICAgIyB3YXMgY2xvc2VkIG9yIHRoZXJlJ3Mgbm8gbmV3IGRhdGEuIFNpZ25hbCB0aGUgbWFpbiB0aHJlYWQgYW5kCi0gICAgICAgICAgICAjIHdhaXQuCi0gICAgICAgICAgICBzZWxmLl9kYXRhX3F1ZXVlLnB1dCgoTm9uZSwgTm9uZSkpCi0gICAgICAgICAgICBzZWxmLl9zdG9wX2V2ZW50LndhaXQoKQotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1VuYWJsZSB0byBnZXQgc3VyZmFjZSBmbGluZ2VyIGxhdGVuY3kgZGF0YScpCi0KLSAgICAgICAgdGltZXN0YW1wcyArPSBbdGltZXN0YW1wIGZvciB0aW1lc3RhbXAgaW4gbmV3X3RpbWVzdGFtcHMKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZXN0YW1wID4gbGFzdF90aW1lc3RhbXBdCi0gICAgICAgIGlmIGxlbih0aW1lc3RhbXBzKToKLSAgICAgICAgICBsYXN0X3RpbWVzdGFtcCA9IHRpbWVzdGFtcHNbLTFdCi0KLSAgICAgICAgaWYgc2VsZi5fZ2V0X2RhdGFfZXZlbnQuaXNfc2V0KCk6Ci0gICAgICAgICAgc2VsZi5fZ2V0X2RhdGFfZXZlbnQuY2xlYXIoKQotICAgICAgICAgIHNlbGYuX2RhdGFfcXVldWUucHV0KChyZWZyZXNoX3BlcmlvZCwgdGltZXN0YW1wcykpCi0gICAgICAgICAgdGltZXN0YW1wcyA9IFtdCi0gICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICMgT24gYW55IGVycm9yLCBiZWZvcmUgYWJvcnRpbmcsIHB1dCB0aGUgZXhjZXB0aW9uIGludG8gX2RhdGFfcXVldWUgdG8KLSAgICAgICAgIyBwcmV2ZW50IHRoZSBtYWluIHRocmVhZCBmcm9tIHdhaXRpbmcgYXQgX2RhdGFfcXVldWUuZ2V0KCkgaW5maW5pdGVseS4KLSAgICAgICAgc2VsZi5fZGF0YV9xdWV1ZS5wdXQoZSkKLSAgICAgICAgcmFpc2UKLQotICBkZWYgX0dldERhdGFGcm9tVGhyZWFkKHNlbGYpOgotICAgIHNlbGYuX2dldF9kYXRhX2V2ZW50LnNldCgpCi0gICAgcmV0ID0gc2VsZi5fZGF0YV9xdWV1ZS5nZXQoKQotICAgIGlmIGlzaW5zdGFuY2UocmV0LCBFeGNlcHRpb24pOgotICAgICAgcmFpc2UgcmV0Ci0gICAgcmV0dXJuIHJldAotCi0gIGRlZiBfQ2xlYXJTdXJmYWNlRmxpbmdlckxhdGVuY3lEYXRhKHNlbGYpOgotICAgICIiIkNsZWFycyB0aGUgU3VyZmFjZUZsaW5nZXIgbGF0ZW5jeSBkYXRhLgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRydWUgaWYgU3VyZmFjZUZsaW5nZXIgbGF0ZW5jeSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSwgb3RoZXJ3aXNlCi0gICAgICBGYWxzZS4KLSAgICAiIiIKLSAgICAjIFRoZSBjb21tYW5kIHJldHVybnMgbm90aGluZyBpZiBpdCBpcyBzdXBwb3J0ZWQsIG90aGVyd2lzZSByZXR1cm5zIG1hbnkKLSAgICAjIGxpbmVzIG9mIHJlc3VsdCBqdXN0IGxpa2UgJ2R1bXBzeXMgU3VyZmFjZUZsaW5nZXInLgotICAgIHJlc3VsdHMgPSBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBbJ2R1bXBzeXMnLCAnU3VyZmFjZUZsaW5nZXInLCAnLS1sYXRlbmN5LWNsZWFyJywgJ1N1cmZhY2VWaWV3J10sCi0gICAgICAgIGNoZWNrX3JldHVybj1UcnVlKQotICAgIHJldHVybiBub3QgbGVuKHJlc3VsdHMpCi0KLSAgZGVmIEdldFN1cmZhY2VGbGluZ2VyUGlkKHNlbGYpOgotICAgIHRyeToKLSAgICAgICMgUmV0dXJucyB0aGUgZmlyc3QgbWF0Y2hpbmcgUElEIGZvdW5kLgotICAgICAgcmV0dXJuIG5leHQocC5waWQgZm9yIHAgaW4gc2VsZi5fZGV2aWNlLkxpc3RQcm9jZXNzZXMoJ3N1cmZhY2VmbGluZ2VyJykpCi0gICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICByYWlzZSBFeGNlcHRpb24oJ1VuYWJsZSB0byBnZXQgc3VyZmFjZSBmbGluZ2VyIHByb2Nlc3MgaWQnKQotCi0gIGRlZiBfR2V0U3VyZmFjZUZsaW5nZXJGcmFtZURhdGEoc2VsZik6Ci0gICAgIiIiUmV0dXJucyBjb2xsZWN0ZWQgU3VyZmFjZUZsaW5nZXIgZnJhbWUgdGltaW5nIGRhdGEuCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSB0dXBsZSBjb250YWluaW5nOgotICAgICAgLSBUaGUgZGlzcGxheSdzIG5vbWluYWwgcmVmcmVzaCBwZXJpb2QgaW4gbWlsbGlzZWNvbmRzLgotICAgICAgLSBBIGxpc3Qgb2YgdGltZXN0YW1wcyBzaWduaWZ5aW5nIGZyYW1lIHByZXNlbnRhdGlvbiB0aW1lcyBpbgotICAgICAgICBtaWxsaXNlY29uZHMuCi0gICAgICBUaGUgcmV0dXJuIHZhbHVlIG1heSBiZSAoTm9uZSwgTm9uZSkgaWYgdGhlcmUgd2FzIG5vIGRhdGEgY29sbGVjdGVkIChmb3IKLSAgICAgIGV4YW1wbGUsIGlmIHRoZSBhcHAgd2FzIGNsb3NlZCBiZWZvcmUgdGhlIGNvbGxlY3RvciB0aHJlYWQgaGFzIGZpbmlzaGVkKS4KLSAgICAiIiIKLSAgICAjIGFkYiBzaGVsbCBkdW1wc3lzIFN1cmZhY2VGbGluZ2VyIC0tbGF0ZW5jeSA8d2luZG93IG5hbWU+Ci0gICAgIyBwcmludHMgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGFzdCAxMjggZnJhbWVzIGRpc3BsYXllZCBpbgotICAgICMgdGhhdCB3aW5kb3cuCi0gICAgIyBUaGUgZGF0YSByZXR1cm5lZCBsb29rcyBsaWtlIHRoaXM6Ci0gICAgIyAxNjk1NDYxMgotICAgICMgNzY1NzQ2Nzg5NTUwOCAgIDc2NTc0ODI2OTEzNTIgICA3NjU3NDkzNDk5NzU2Ci0gICAgIyA3NjU3NDg0NDY2NTUzICAgNzY1NzQ5OTY0NTk2NCAgIDc2NTc1MTEwNzc4ODEKLSAgICAjIDc2NTc1MDA3OTM0NTcgICA3NjU3NTE2NjAwNTc2ICAgNzY1NzUyNzQwNDc4NQotICAgICMgKC4uLikKLSAgICAjCi0gICAgIyBUaGUgZmlyc3QgbGluZSBpcyB0aGUgcmVmcmVzaCBwZXJpb2QgKGhlcmUgMTYuOTUgbXMpLCBpdCBpcyBmb2xsb3dlZAotICAgICMgYnkgMTI4IGxpbmVzIHcvIDMgdGltZXN0YW1wcyBpbiBuYW5vc2Vjb25kIGVhY2g6Ci0gICAgIyBBKSB3aGVuIHRoZSBhcHAgc3RhcnRlZCB0byBkcmF3Ci0gICAgIyBCKSB0aGUgdnN5bmMgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIFNGIHN1Ym1pdHRpbmcgdGhlIGZyYW1lIHRvIHRoZSBoL3cKLSAgICAjIEMpIHRpbWVzdGFtcCBpbW1lZGlhdGVseSBhZnRlciBTRiBzdWJtaXR0ZWQgdGhhdCBmcmFtZSB0byB0aGUgaC93Ci0gICAgIwotICAgICMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgMXN0IGFuZCAzcmQgdGltZXN0YW1wIGlzIHRoZSBmcmFtZS1sYXRlbmN5LgotICAgICMgQW4gaW50ZXJlc3RpbmcgZGF0YSBpcyB3aGVuIHRoZSBmcmFtZSBsYXRlbmN5IGNyb3NzZXMgYSByZWZyZXNoIHBlcmlvZAotICAgICMgYm91bmRhcnksIHRoaXMgY2FuIGJlIGNhbGN1bGF0ZWQgdGhpcyB3YXk6Ci0gICAgIwotICAgICMgY2VpbCgoQyAtIEEpIC8gcmVmcmVzaC1wZXJpb2QpCi0gICAgIwotICAgICMgKGVhY2ggdGltZSB0aGUgbnVtYmVyIGFib3ZlIGNoYW5nZXMsIHdlIGhhdmUgYSAiamFuayIpLgotICAgICMgSWYgdGhpcyBoYXBwZW5zIGEgbG90IGR1cmluZyBhbiBhbmltYXRpb24sIHRoZSBhbmltYXRpb24gYXBwZWFycwotICAgICMgamFua3ksIGV2ZW4gaWYgaXQgcnVucyBhdCA2MCBmcHMgaW4gYXZlcmFnZS4KLSAgICAjCi0gICAgIyBXZSB1c2UgdGhlIHNwZWNpYWwgIlN1cmZhY2VWaWV3IiB3aW5kb3cgbmFtZSBiZWNhdXNlIHRoZSBzdGF0aXN0aWNzIGZvcgotICAgICMgdGhlIGFjdGl2aXR5J3MgbWFpbiB3aW5kb3cgYXJlIG5vdCB1cGRhdGVkIHdoZW4gdGhlIG1haW4gd2ViIGNvbnRlbnQgaXMKLSAgICAjIGNvbXBvc2l0ZWQgaW50byBhIFN1cmZhY2VWaWV3LgotICAgIHJlc3VsdHMgPSBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBbJ2R1bXBzeXMnLCAnU3VyZmFjZUZsaW5nZXInLCAnLS1sYXRlbmN5JywgJ1N1cmZhY2VWaWV3J10sCi0gICAgICAgIGNoZWNrX3JldHVybj1UcnVlKQotICAgIGlmIG5vdCBsZW4ocmVzdWx0cyk6Ci0gICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCi0KLSAgICB0aW1lc3RhbXBzID0gW10KLSAgICBuYW5vc2Vjb25kc19wZXJfbWlsbGlzZWNvbmQgPSAxZTYKLSAgICByZWZyZXNoX3BlcmlvZCA9IGxvbmcocmVzdWx0c1swXSkgLyBuYW5vc2Vjb25kc19wZXJfbWlsbGlzZWNvbmQKLQotICAgICMgSWYgYSBmZW5jZSBhc3NvY2lhdGVkIHdpdGggYSBmcmFtZSBpcyBzdGlsbCBwZW5kaW5nIHdoZW4gd2UgcXVlcnkgdGhlCi0gICAgIyBsYXRlbmN5IGRhdGEsIFN1cmZhY2VGbGluZ2VyIGdpdmVzIHRoZSBmcmFtZSBhIHRpbWVzdGFtcCBvZiBJTlQ2NF9NQVguCi0gICAgIyBTaW5jZSB3ZSBvbmx5IGNhcmUgYWJvdXQgY29tcGxldGVkIGZyYW1lcywgd2Ugd2lsbCBpZ25vcmUgYW55IHRpbWVzdGFtcHMKLSAgICAjIHdpdGggdGhpcyB2YWx1ZS4KLSAgICBwZW5kaW5nX2ZlbmNlX3RpbWVzdGFtcCA9ICgxIDw8IDYzKSAtIDEKLQotICAgIGZvciBsaW5lIGluIHJlc3VsdHNbMTpdOgotICAgICAgZmllbGRzID0gbGluZS5zcGxpdCgpCi0gICAgICBpZiBsZW4oZmllbGRzKSAhPSAzOgotICAgICAgICBjb250aW51ZQotICAgICAgdGltZXN0YW1wID0gbG9uZyhmaWVsZHNbMV0pCi0gICAgICBpZiB0aW1lc3RhbXAgPT0gcGVuZGluZ19mZW5jZV90aW1lc3RhbXA6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICB0aW1lc3RhbXAgLz0gbmFub3NlY29uZHNfcGVyX21pbGxpc2Vjb25kCi0gICAgICB0aW1lc3RhbXBzLmFwcGVuZCh0aW1lc3RhbXApCi0KLSAgICByZXR1cm4gKHJlZnJlc2hfcGVyaW9kLCB0aW1lc3RhbXBzKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9wZXJmL3RoZXJtYWxfdGhyb3R0bGUucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3BlcmYvdGhlcm1hbF90aHJvdHRsZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ2YTkyZS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3BlcmYvdGhlcm1hbF90aHJvdHRsZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBsb2dnaW5nCi0KLWxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWNsYXNzIE9tYXBUaHJvdHRsaW5nRGV0ZWN0b3Iob2JqZWN0KToKLSAgIiIiQ2xhc3MgdG8gZGV0ZWN0IGFuZCB0cmFjayB0aGVybWFsIHRocm90dGxpbmcgb24gYW4gT01BUCA0LiIiIgotICBPTUFQX1RFTVBfRklMRSA9ICgnL3N5cy9kZXZpY2VzL3BsYXRmb3JtL29tYXAvb21hcF90ZW1wX3NlbnNvci4wLycKLSAgICAgICAgICAgICAgICAgICAgJ3RlbXBlcmF0dXJlJykKLQotICBAc3RhdGljbWV0aG9kCi0gIGRlZiBJc1N1cHBvcnRlZChkZXZpY2UpOgotICAgIHJldHVybiBkZXZpY2UuRmlsZUV4aXN0cyhPbWFwVGhyb3R0bGluZ0RldGVjdG9yLk9NQVBfVEVNUF9GSUxFKQotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2UpOgotICAgIHNlbGYuX2RldmljZSA9IGRldmljZQotCi0gIEBzdGF0aWNtZXRob2QKLSAgZGVmIEJlY2FtZVRocm90dGxlZChsb2dfbGluZSk6Ci0gICAgcmV0dXJuICdvbWFwX3RoZXJtYWxfdGhyb3R0bGUnIGluIGxvZ19saW5lCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgQmVjYW1lVW50aHJvdHRsZWQobG9nX2xpbmUpOgotICAgIHJldHVybiAnb21hcF90aGVybWFsX3VudGhyb3R0bGUnIGluIGxvZ19saW5lCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgR2V0VGhyb3R0bGluZ1RlbXBlcmF0dXJlKGxvZ19saW5lKToKLSAgICBpZiAndGhyb3R0bGVfZGVsYXllZF93b3JrX2ZuJyBpbiBsb2dfbGluZToKLSAgICAgIHJldHVybiBmbG9hdChbcyBmb3IgcyBpbiBsb2dfbGluZS5zcGxpdCgpIGlmIHMuaXNkaWdpdCgpXVswXSkgLyAxMDAwLjAKLQotICBkZWYgR2V0Q3VycmVudFRlbXBlcmF0dXJlKHNlbGYpOgotICAgIHRlbXBkYXRhID0gc2VsZi5fZGV2aWNlLlJlYWRGaWxlKE9tYXBUaHJvdHRsaW5nRGV0ZWN0b3IuT01BUF9URU1QX0ZJTEUpCi0gICAgcmV0dXJuIGZsb2F0KHRlbXBkYXRhKSAvIDEwMDAuMAotCi0KLWNsYXNzIEV4eW5vc1Rocm90dGxpbmdEZXRlY3RvcihvYmplY3QpOgotICAiIiJDbGFzcyB0byBkZXRlY3QgYW5kIHRyYWNrIHRoZXJtYWwgdGhyb3R0bGluZyBvbiBhbiBFeHlub3MgNS4iIiIKLSAgQHN0YXRpY21ldGhvZAotICBkZWYgSXNTdXBwb3J0ZWQoZGV2aWNlKToKLSAgICByZXR1cm4gZGV2aWNlLkZpbGVFeGlzdHMoJy9zeXMvYnVzL2V4eW5vczUtY29yZScpCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGRldmljZSk6Ci0gICAgcGFzcwotCi0gIEBzdGF0aWNtZXRob2QKLSAgZGVmIEJlY2FtZVRocm90dGxlZChsb2dfbGluZSk6Ci0gICAgcmV0dXJuICdleHlub3NfdG11OiBUaHJvdHRsaW5nIGludGVycnVwdCcgaW4gbG9nX2xpbmUKLQotICBAc3RhdGljbWV0aG9kCi0gIGRlZiBCZWNhbWVVbnRocm90dGxlZChsb2dfbGluZSk6Ci0gICAgcmV0dXJuICdleHlub3NfdGhlcm1hbF91bnRocm90dGxlOiBub3QgdGhyb3R0bGluZycgaW4gbG9nX2xpbmUKLQotICBAc3RhdGljbWV0aG9kCi0gIGRlZiBHZXRUaHJvdHRsaW5nVGVtcGVyYXR1cmUoX2xvZ19saW5lKToKLSAgICByZXR1cm4gTm9uZQotCi0gIEBzdGF0aWNtZXRob2QKLSAgZGVmIEdldEN1cnJlbnRUZW1wZXJhdHVyZSgpOgotICAgIHJldHVybiBOb25lCi0KLQotY2xhc3MgVGhlcm1hbFRocm90dGxlKG9iamVjdCk6Ci0gICIiIkNsYXNzIHRvIGRldGVjdCBhbmQgdHJhY2sgdGhlcm1hbCB0aHJvdHRsaW5nLgotCi0gIFVzYWdlOgotICAgIFdhaXQgZm9yIElzVGhyb3R0bGVkKCkgdG8gYmUgRmFsc2UgYmVmb3JlIHJ1bm5pbmcgdGVzdAotICAgIEFmdGVyIHJ1bm5pbmcgdGVzdCBjYWxsIEhhc0JlZW5UaHJvdHRsZWQoKSB0byBmaW5kIG91dCBpZiB0aGUKLSAgICB0ZXN0IHJ1biB3YXMgYWZmZWN0ZWQgYnkgdGhlcm1hbCB0aHJvdHRsaW5nLgotICAiIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgZGV2aWNlKToKLSAgICBzZWxmLl9kZXZpY2UgPSBkZXZpY2UKLSAgICBzZWxmLl90aHJvdHRsZWQgPSBGYWxzZQotICAgIHNlbGYuX2RldGVjdG9yID0gTm9uZQotICAgIGlmIE9tYXBUaHJvdHRsaW5nRGV0ZWN0b3IuSXNTdXBwb3J0ZWQoZGV2aWNlKToKLSAgICAgIHNlbGYuX2RldGVjdG9yID0gT21hcFRocm90dGxpbmdEZXRlY3RvcihkZXZpY2UpCi0gICAgZWxpZiBFeHlub3NUaHJvdHRsaW5nRGV0ZWN0b3IuSXNTdXBwb3J0ZWQoZGV2aWNlKToKLSAgICAgIHNlbGYuX2RldGVjdG9yID0gRXh5bm9zVGhyb3R0bGluZ0RldGVjdG9yKGRldmljZSkKLQotICBkZWYgSGFzQmVlblRocm90dGxlZChzZWxmKToKLSAgICAiIiJUcnVlIGlmIHRoZXJlIGhhcyBiZWVuIGFueSB0aHJvdHRsaW5nIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8KLSAgICAgICBIYXNCZWVuVGhyb3R0bGVkIG9yIElzVGhyb3R0bGVkLgotICAgICIiIgotICAgIHJldHVybiBzZWxmLl9SZWFkTG9nKCkKLQotICBkZWYgSXNUaHJvdHRsZWQoc2VsZik6Ci0gICAgIiIiVHJ1ZSBpZiBjdXJyZW50bHkgdGhyb3R0bGVkLiIiIgotICAgIHNlbGYuX1JlYWRMb2coKQotICAgIHJldHVybiBzZWxmLl90aHJvdHRsZWQKLQotICBkZWYgX1JlYWRMb2coc2VsZik6Ci0gICAgaWYgbm90IHNlbGYuX2RldGVjdG9yOgotICAgICAgcmV0dXJuIEZhbHNlCi0gICAgaGFzX2JlZW5fdGhyb3R0bGVkID0gRmFsc2UKLSAgICBzZXJpYWxfbnVtYmVyID0gc3RyKHNlbGYuX2RldmljZSkKLSAgICBsb2cgPSBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBbJ2RtZXNnJywgJy1jJ10sIGxhcmdlX291dHB1dD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSkKLSAgICBkZWdyZWVfc3ltYm9sID0gdW5pY2hyKDB4MDBCMCkKLSAgICBmb3IgbGluZSBpbiBsb2c6Ci0gICAgICBpZiBzZWxmLl9kZXRlY3Rvci5CZWNhbWVUaHJvdHRsZWQobGluZSk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl90aHJvdHRsZWQ6Ci0gICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJz4+PiBEZXZpY2UgJXMgdGhlcm1hbGx5IHRocm90dGxlZCcsIHNlcmlhbF9udW1iZXIpCi0gICAgICAgIHNlbGYuX3Rocm90dGxlZCA9IFRydWUKLSAgICAgICAgaGFzX2JlZW5fdGhyb3R0bGVkID0gVHJ1ZQotICAgICAgZWxpZiBzZWxmLl9kZXRlY3Rvci5CZWNhbWVVbnRocm90dGxlZChsaW5lKToKLSAgICAgICAgaWYgc2VsZi5fdGhyb3R0bGVkOgotICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCc+Pj4gRGV2aWNlICVzIHRoZXJtYWxseSB1bnRocm90dGxlZCcsIHNlcmlhbF9udW1iZXIpCi0gICAgICAgIHNlbGYuX3Rocm90dGxlZCA9IEZhbHNlCi0gICAgICAgIGhhc19iZWVuX3Rocm90dGxlZCA9IFRydWUKLSAgICAgIHRlbXBlcmF0dXJlID0gc2VsZi5fZGV0ZWN0b3IuR2V0VGhyb3R0bGluZ1RlbXBlcmF0dXJlKGxpbmUpCi0gICAgICBpZiB0ZW1wZXJhdHVyZSBpcyBub3QgTm9uZToKLSAgICAgICAgbG9nZ2VyLmluZm8odSdEZXZpY2UgJXMgdGhlcm1hbGx5IHRocm90dGxlZCBhdCAlMy4xZiVzQycsCi0gICAgICAgICAgICAgICAgICAgIHNlcmlhbF9udW1iZXIsIHRlbXBlcmF0dXJlLCBkZWdyZWVfc3ltYm9sKQotCi0gICAgaWYgbG9nZ2VyLmlzRW5hYmxlZEZvcihsb2dnaW5nLkRFQlVHKToKLSAgICAgICMgUHJpbnQgY3VycmVudCB0ZW1wZXJhdHVyZSBvZiBDUFUgU29DLgotICAgICAgdGVtcGVyYXR1cmUgPSBzZWxmLl9kZXRlY3Rvci5HZXRDdXJyZW50VGVtcGVyYXR1cmUoKQotICAgICAgaWYgdGVtcGVyYXR1cmUgaXMgbm90IE5vbmU6Ci0gICAgICAgIGxvZ2dlci5kZWJ1Zyh1J0N1cnJlbnQgU29DIHRlbXBlcmF0dXJlIG9mICVzID0gJTMuMWYlc0MnLAotICAgICAgICAgICAgICAgICAgICAgc2VyaWFsX251bWJlciwgdGVtcGVyYXR1cmUsIGRlZ3JlZV9zeW1ib2wpCi0KLSAgICAgICMgUHJpbnQgdGVtcGVyYXR1cmUgb2YgYmF0dGVyeSwgdG8gZ2l2ZSBhIHN5c3RlbSB0ZW1wZXJhdHVyZQotICAgICAgZHVtcHN5c19sb2cgPSBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgIFsnZHVtcHN5cycsICdiYXR0ZXJ5J10sIGNoZWNrX3JldHVybj1UcnVlKQotICAgICAgZm9yIGxpbmUgaW4gZHVtcHN5c19sb2c6Ci0gICAgICAgIGlmICd0ZW1wZXJhdHVyZScgaW4gbGluZToKLSAgICAgICAgICBidGVtcCA9IGZsb2F0KFtzIGZvciBzIGluIGxpbmUuc3BsaXQoKSBpZiBzLmlzZGlnaXQoKV1bMF0pIC8gMTAuMAotICAgICAgICAgIGxvZ2dlci5kZWJ1Zyh1J0N1cnJlbnQgYmF0dGVyeSB0ZW1wZXJhdHVyZSBvZiAlcyA9ICUzLjFmJXNDJywKLSAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsX251bWJlciwgYnRlbXAsIGRlZ3JlZV9zeW1ib2wpCi0KLSAgICByZXR1cm4gaGFzX2JlZW5fdGhyb3R0bGVkCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3BvcnRzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9wb3J0cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ0ZTVmMi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3BvcnRzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIkZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCBsb2NhbCBhbmQgZGV2aWNlIHBvcnRzLiIiIgotCi1pbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IGZjbnRsCi1pbXBvcnQgaHR0cGxpYgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHNvY2tldAotaW1wb3J0IHRyYWNlYmFjawotCi1sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotIyBUaGUgbmV0IHRlc3Qgc2VydmVyIGlzIHN0YXJ0ZWQgZnJvbSBwb3J0IDEwMjAxLgotX1RFU1RfU0VSVkVSX1BPUlRfRklSU1QgPSAxMDIwMQotX1RFU1RfU0VSVkVSX1BPUlRfTEFTVCA9IDMwMDAwCi0jIEEgZmlsZSB0byByZWNvcmQgbmV4dCB2YWxpZCBwb3J0IG9mIHRlc3Qgc2VydmVyLgotX1RFU1RfU0VSVkVSX1BPUlRfRklMRSA9ICcvdG1wL3Rlc3Rfc2VydmVyX3BvcnQnCi1fVEVTVF9TRVJWRVJfUE9SVF9MT0NLRklMRSA9ICcvdG1wL3Rlc3Rfc2VydmVyX3BvcnQubG9jaycKLQotCi0jIFRoZSBmb2xsb3dpbmcgdHdvIG1ldGhvZHMgYXJlIHVzZWQgdG8gYWxsb2NhdGUgdGhlIHBvcnQgc291cmNlIGZvciB2YXJpb3VzCi0jIHR5cGVzIG9mIHRlc3Qgc2VydmVycy4gQmVjYXVzZSBzb21lIG5ldC1yZWxhdGVkIHRlc3RzIGNhbiBiZSBydW4gb24gc2hhcmRzIGF0Ci0jIHNhbWUgdGltZSwgaXQncyBpbXBvcnRhbnQgdG8gaGF2ZSBhIG1lY2hhbmlzbSB0byBhbGxvY2F0ZSB0aGUgcG9ydAotIyBwcm9jZXNzLXNhZmUuIEluIGhlcmUsIHdlIGltcGxlbWVudCB0aGUgc2FmZSBwb3J0IGFsbG9jYXRpb24gYnkgbGV2ZXJhZ2luZwotIyBmbG9jay4KLWRlZiBSZXNldFRlc3RTZXJ2ZXJQb3J0QWxsb2NhdGlvbigpOgotICAiIiJSZXNldHMgdGhlIHBvcnQgYWxsb2NhdGlvbiB0byBzdGFydCBmcm9tIFRFU1RfU0VSVkVSX1BPUlRfRklSU1QuCi0KLSAgUmV0dXJuczoKLSAgICBSZXR1cm5zIFRydWUgaWYgcmVzZXQgc3VjY2Vzc2VzLiBPdGhlcndpc2UgcmV0dXJucyBGYWxzZS4KLSAgIiIiCi0gIHRyeToKLSAgICB3aXRoIG9wZW4oX1RFU1RfU0VSVkVSX1BPUlRfRklMRSwgJ3cnKSBhcyBmcDoKLSAgICAgIGZwLndyaXRlKCclZCcgJSBfVEVTVF9TRVJWRVJfUE9SVF9GSVJTVCkKLSAgICByZXR1cm4gVHJ1ZQotICBleGNlcHQgRXhjZXB0aW9uOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0Ci0gICAgbG9nZ2VyLmV4Y2VwdGlvbignRXJyb3Igd2hpbGUgcmVzZXR0aW5nIHBvcnQgYWxsb2NhdGlvbicpCi0gIHJldHVybiBGYWxzZQotCi0KLWRlZiBBbGxvY2F0ZVRlc3RTZXJ2ZXJQb3J0KCk6Ci0gICIiIkFsbG9jYXRlcyBhIHBvcnQgaW5jcmVtZW50YWxseS4KLQotICBSZXR1cm5zOgotICAgIFJldHVybnMgYSB2YWxpZCBwb3J0IHdoaWNoIHNob3VsZCBiZSBpbiBiZXR3ZWVuIFRFU1RfU0VSVkVSX1BPUlRfRklSU1QgYW5kCi0gICAgVEVTVF9TRVJWRVJfUE9SVF9MQVNULiBSZXR1cm5pbmcgMCBtZWFucyBubyBtb3JlIHZhbGlkIHBvcnQgY2FuIGJlIHVzZWQuCi0gICIiIgotICBwb3J0ID0gMAotICBwb3J0c190cmllZCA9IFtdCi0gIHRyeToKLSAgICBmcF9sb2NrID0gb3BlbihfVEVTVF9TRVJWRVJfUE9SVF9MT0NLRklMRSwgJ3cnKQotICAgIGZjbnRsLmZsb2NrKGZwX2xvY2ssIGZjbnRsLkxPQ0tfRVgpCi0gICAgIyBHZXQgY3VycmVudCB2YWxpZCBwb3J0IGFuZCBjYWxjdWxhdGUgbmV4dCB2YWxpZCBwb3J0LgotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhfVEVTVF9TRVJWRVJfUE9SVF9GSUxFKToKLSAgICAgIFJlc2V0VGVzdFNlcnZlclBvcnRBbGxvY2F0aW9uKCkKLSAgICB3aXRoIG9wZW4oX1RFU1RfU0VSVkVSX1BPUlRfRklMRSwgJ3IrJykgYXMgZnA6Ci0gICAgICBwb3J0ID0gaW50KGZwLnJlYWQoKSkKLSAgICAgIHBvcnRzX3RyaWVkLmFwcGVuZChwb3J0KQotICAgICAgd2hpbGUgbm90IElzSG9zdFBvcnRBdmFpbGFibGUocG9ydCk6Ci0gICAgICAgIHBvcnQgKz0gMQotICAgICAgICBwb3J0c190cmllZC5hcHBlbmQocG9ydCkKLSAgICAgIGlmIChwb3J0ID4gX1RFU1RfU0VSVkVSX1BPUlRfTEFTVCBvcgotICAgICAgICAgIHBvcnQgPCBfVEVTVF9TRVJWRVJfUE9SVF9GSVJTVCk6Ci0gICAgICAgIHBvcnQgPSAwCi0gICAgICBlbHNlOgotICAgICAgICBmcC5zZWVrKDAsIG9zLlNFRUtfU0VUKQotICAgICAgICBmcC53cml0ZSgnJWQnICUgKHBvcnQgKyAxKSkKLSAgZXhjZXB0IEV4Y2VwdGlvbjogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAotICAgIGxvZ2dlci5leGNlcHRpb24oJ0Vycm9yIHdoaWxlIGFsbG9jYXRpbmcgcG9ydCcpCi0gIGZpbmFsbHk6Ci0gICAgaWYgZnBfbG9jazoKLSAgICAgIGZjbnRsLmZsb2NrKGZwX2xvY2ssIGZjbnRsLkxPQ0tfVU4pCi0gICAgICBmcF9sb2NrLmNsb3NlKCkKLSAgaWYgcG9ydDoKLSAgICBsb2dnZXIuaW5mbygnQWxsb2NhdGUgcG9ydCAlZCBmb3IgdGVzdCBzZXJ2ZXIuJywgcG9ydCkKLSAgZWxzZToKLSAgICBsb2dnZXIuZXJyb3IoJ0NvdWxkIG5vdCBhbGxvY2F0ZSBwb3J0IGZvciB0ZXN0IHNlcnZlci4gJwotICAgICAgICAgICAgICAgICAnTGlzdCBvZiBwb3J0cyB0cmllZDogJXMnLCBzdHIocG9ydHNfdHJpZWQpKQotICByZXR1cm4gcG9ydAotCi0KLWRlZiBJc0hvc3RQb3J0QXZhaWxhYmxlKGhvc3RfcG9ydCk6Ci0gICIiIkNoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgaG9zdCBwb3J0IGlzIGF2YWlsYWJsZS4KLQotICBBcmdzOgotICAgIGhvc3RfcG9ydDogUG9ydCBvbiBob3N0IHRvIGNoZWNrLgotCi0gIFJldHVybnM6Ci0gICAgVHJ1ZSBpZiB0aGUgcG9ydCBvbiBob3N0IGlzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHJldHVybnMgRmFsc2UuCi0gICIiIgotICBzID0gc29ja2V0LnNvY2tldCgpCi0gIHRyeToKLSAgICBzLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCi0gICAgcy5iaW5kKCgnJywgaG9zdF9wb3J0KSkKLSAgICBzLmNsb3NlKCkKLSAgICByZXR1cm4gVHJ1ZQotICBleGNlcHQgc29ja2V0LmVycm9yOgotICAgIHJldHVybiBGYWxzZQotCi0KLWRlZiBJc0RldmljZVBvcnRVc2VkKGRldmljZSwgZGV2aWNlX3BvcnQsIHN0YXRlPScnKToKLSAgIiIiQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBkZXZpY2UgcG9ydCBpcyB1c2VkIG9yIG5vdC4KLQotICBBcmdzOgotICAgIGRldmljZTogQSBEZXZpY2VVdGlscyBpbnN0YW5jZS4KLSAgICBkZXZpY2VfcG9ydDogUG9ydCBvbiBkZXZpY2Ugd2Ugd2FudCB0byBjaGVjay4KLSAgICBzdGF0ZTogU3RyaW5nIG9mIHRoZSBzcGVjaWZpZWQgc3RhdGUuIERlZmF1bHQgaXMgZW1wdHkgc3RyaW5nLCB3aGljaAotICAgICAgICAgICBtZWFucyBhbnkgc3RhdGUuCi0KLSAgUmV0dXJuczoKLSAgICBUcnVlIGlmIHRoZSBwb3J0IG9uIGRldmljZSBpcyBhbHJlYWR5IHVzZWQsIG90aGVyd2lzZSByZXR1cm5zIEZhbHNlLgotICAiIiIKLSAgYmFzZV91cmxzID0gKCcxMjcuMC4wLjE6JWQnICUgZGV2aWNlX3BvcnQsICdsb2NhbGhvc3Q6JWQnICUgZGV2aWNlX3BvcnQpCi0gIG5ldHN0YXRfcmVzdWx0cyA9IGRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICBbJ25ldHN0YXQnLCAnLWEnXSwgY2hlY2tfcmV0dXJuPVRydWUsIGxhcmdlX291dHB1dD1UcnVlKQotICBmb3Igc2luZ2xlX2Nvbm5lY3QgaW4gbmV0c3RhdF9yZXN1bHRzOgotICAgICMgQ29sdW1uIDMgaXMgdGhlIGxvY2FsIGFkZHJlc3Mgd2hpY2ggd2Ugd2FudCB0byBjaGVjayB3aXRoLgotICAgIGNvbm5lY3RfcmVzdWx0cyA9IHNpbmdsZV9jb25uZWN0LnNwbGl0KCkKLSAgICBpZiBjb25uZWN0X3Jlc3VsdHNbMF0gIT0gJ3RjcCc6Ci0gICAgICBjb250aW51ZQotICAgIGlmIGxlbihjb25uZWN0X3Jlc3VsdHMpIDwgNjoKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5leHBlY3RlZCBmb3JtYXQgd2hpbGUgcGFyc2luZyBuZXRzdGF0IGxpbmU6ICcgKwotICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZV9jb25uZWN0KQotICAgIGlzX3N0YXRlX21hdGNoID0gY29ubmVjdF9yZXN1bHRzWzVdID09IHN0YXRlIGlmIHN0YXRlIGVsc2UgVHJ1ZQotICAgIGlmIGNvbm5lY3RfcmVzdWx0c1szXSBpbiBiYXNlX3VybHMgYW5kIGlzX3N0YXRlX21hdGNoOgotICAgICAgcmV0dXJuIFRydWUKLSAgcmV0dXJuIEZhbHNlCi0KLQotZGVmIElzSHR0cFNlcnZlckNvbm5lY3RhYmxlKGhvc3QsIHBvcnQsIHRyaWVzPTMsIGNvbW1hbmQ9J0dFVCcsIHBhdGg9Jy8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3JlYWQ9JycsIHRpbWVvdXQ9Mik6Ci0gICIiIkNoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgaHR0cCBzZXJ2ZXIgaXMgcmVhZHkgdG8gc2VydmUgcmVxdWVzdCBvciBub3QuCi0KLSAgQXJnczoKLSAgICBob3N0OiBIb3N0IG5hbWUgb2YgdGhlIEhUVFAgc2VydmVyLgotICAgIHBvcnQ6IFBvcnQgbnVtYmVyIG9mIHRoZSBIVFRQIHNlcnZlci4KLSAgICB0cmllczogSG93IG1hbnkgdGltZXMgd2Ugd2FudCB0byB0ZXN0IHRoZSBjb25uZWN0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcwotICAgICAgICAgICAzLgotICAgIGNvbW1hbmQ6IFRoZSBodHRwIGNvbW1hbmQgd2UgdXNlIHRvIGNvbm5lY3QgdG8gSFRUUCBzZXJ2ZXIuIFRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAgY29tbWFuZCBpcyAnR0VUJy4KLSAgICBwYXRoOiBUaGUgcGF0aCB3ZSB1c2Ugd2hlbiBjb25uZWN0aW5nIHRvIEhUVFAgc2VydmVyLiBUaGUgZGVmYXVsdCBwYXRoIGlzCi0gICAgICAgICAgJy8nLgotICAgIGV4cGVjdGVkX3JlYWQ6IFRoZSBjb250ZW50IHdlIGV4cGVjdCB0byByZWFkIGZyb20gdGhlIHJlc3BvbnNlLiBUaGUgZGVmYXVsdAotICAgICAgICAgICAgICAgICAgIHZhbHVlIGlzICcnLgotICAgIHRpbWVvdXQ6IFRpbWVvdXQgKGluIHNlY29uZHMpIGZvciBlYWNoIGh0dHAgY29ubmVjdGlvbi4gVGhlIGRlZmF1bHQgaXMgMnMuCi0KLSAgUmV0dXJuczoKLSAgICBUdXBsZSBvZiAoY29ubmVjdCBzdGF0dXMsIGNsaWVudCBlcnJvcikuIGNvbm5lY3Qgc3RhdHVzIGlzIGEgYm9vbGVhbiB2YWx1ZQotICAgIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHNlcnZlciBpcyBjb25uZWN0YWJsZS4gY2xpZW50X2Vycm9yIGlzIHRoZSBlcnJvcgotICAgIG1lc3NhZ2UgdGhlIHNlcnZlciByZXR1cm5zIHdoZW4gY29ubmVjdCBzdGF0dXMgaXMgZmFsc2UuCi0gICIiIgotICBhc3NlcnQgdHJpZXMgPj0gMQotICBmb3IgaSBpbiB4cmFuZ2UoMCwgdHJpZXMpOgotICAgIGNsaWVudF9lcnJvciA9IE5vbmUKLSAgICB0cnk6Ci0gICAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2luZyhodHRwbGliLkhUVFBDb25uZWN0aW9uKAotICAgICAgICAgIGhvc3QsIHBvcnQsIHRpbWVvdXQ9dGltZW91dCkpIGFzIGh0dHA6Ci0gICAgICAgICMgT3V0cHV0IHNvbWUgZGVidWcgaW5mb3JtYXRpb24gd2hlbiB3ZSBoYXZlIHRyaWVkIG1vcmUgdGhhbiAyIHRpbWVzLgotICAgICAgICBodHRwLnNldF9kZWJ1Z2xldmVsKGkgPj0gMikKLSAgICAgICAgaHR0cC5yZXF1ZXN0KGNvbW1hbmQsIHBhdGgpCi0gICAgICAgIHIgPSBodHRwLmdldHJlc3BvbnNlKCkKLSAgICAgICAgY29udGVudCA9IHIucmVhZCgpCi0gICAgICAgIGlmIHIuc3RhdHVzID09IDIwMCBhbmQgci5yZWFzb24gPT0gJ09LJyBhbmQgY29udGVudCA9PSBleHBlY3RlZF9yZWFkOgotICAgICAgICAgIHJldHVybiAoVHJ1ZSwgJycpCi0gICAgICAgIGNsaWVudF9lcnJvciA9ICgnQmFkIHJlc3BvbnNlOiAlcyAlcyB2ZXJzaW9uICVzXG4gICcgJQotICAgICAgICAgICAgICAgICAgICAgICAgKHIuc3RhdHVzLCByLnJlYXNvbiwgci52ZXJzaW9uKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAnXG4gICcuam9pbihbJzogJy5qb2luKGgpIGZvciBoIGluIHIuZ2V0aGVhZGVycygpXSkpCi0gICAgZXhjZXB0IChodHRwbGliLkhUVFBFeGNlcHRpb24sIHNvY2tldC5lcnJvcikgYXMgZToKLSAgICAgICMgUHJvYmFibHkgdG9vIHF1aWNrIGNvbm5lY3Rpbmc6IHRyeSBhZ2Fpbi4KLSAgICAgIGV4Y2VwdGlvbl9lcnJvcl9tc2dzID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seSh0eXBlKGUpLCBlKQotICAgICAgaWYgZXhjZXB0aW9uX2Vycm9yX21zZ3M6Ci0gICAgICAgIGNsaWVudF9lcnJvciA9ICcnLmpvaW4oZXhjZXB0aW9uX2Vycm9yX21zZ3MpCi0gICMgT25seSByZXR1cm5zIGxhc3QgY2xpZW50X2Vycm9yLgotICByZXR1cm4gKEZhbHNlLCBjbGllbnRfZXJyb3Igb3IgJ1RpbWVvdXQnKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvX19pbml0X18ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk1ZDNiMi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIFRoaXMgcGFja2FnZSBpcyBpbnRlbmRlZCBmb3IgbW9kdWxlcyB0aGF0IGFyZSB2ZXJ5IHRpZ2h0bHkgY291cGxlZCB0bwotIyB0b29scyBvciBBUElzIGZyb20gdGhlIEFuZHJvaWQgU0RLLgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvYWFwdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL2FhcHQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZTNhOTMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvYWFwdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiVGhpcyBtb2R1bGUgd3JhcHMgdGhlIEFuZHJvaWQgQXNzZXQgUGFja2FnaW5nIFRvb2wuIiIiCi0KLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IGJ1aWxkX3Rvb2xzCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBjbWRfaGVscGVyCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBsYXp5Ci0KLQotX2FhcHRfcGF0aCA9IGxhenkuV2Vha0NvbnN0YW50KGxhbWJkYTogYnVpbGRfdG9vbHMuR2V0UGF0aCgnYWFwdCcpKQotCi0KLWRlZiBfUnVuQWFwdENtZChhcmdzKToKLSAgIiIiUnVucyBhbiBhYXB0IGNvbW1hbmQuCi0KLSAgQXJnczoKLSAgICBhcmdzOiBBIGxpc3Qgb2YgYXJndW1lbnRzIGZvciBhYXB0LgotCi0gIFJldHVybnM6Ci0gICAgVGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZC4KLSAgIiIiCi0gIGNtZCA9IFtfYWFwdF9wYXRoLnJlYWQoKV0gKyBhcmdzCi0gIHN0YXR1cywgb3V0cHV0ID0gY21kX2hlbHBlci5HZXRDbWRTdGF0dXNBbmRPdXRwdXQoY21kKQotICBpZiBzdGF0dXMgIT0gMDoKLSAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCBydW5uaW5nIGFhcHQgY29tbWFuZDogIiVzIiB3aXRoIG91dHB1dCAiJXMiLicgJQotICAgICAgICAgICAgICAgICAgICAoJyAnLmpvaW4oY21kKSwgb3V0cHV0KSkKLSAgcmV0dXJuIG91dHB1dAotCi0KLWRlZiBEdW1wKHdoYXQsIGFwaywgYXNzZXRzPU5vbmUpOgotICAiIiJSZXR1cm5zIHRoZSBvdXRwdXQgb2YgdGhlIGFhcHQgZHVtcCBjb21tYW5kLgotCi0gIEFyZ3M6Ci0gICAgd2hhdDogV2hhdCB5b3Ugd2FudCB0byBkdW1wLgotICAgIGFwazogUGF0aCB0byBhcGsgeW91IHdhbnQgdG8gZHVtcCBpbmZvcm1hdGlvbiBmb3IuCi0gICAgYXNzZXRzOiBMaXN0IG9mIGFzc2V0cyBpbiBhcGsgeW91IHdhbnQgdG8gZHVtcCBpbmZvcm1hdGlvbiBmb3IuCi0gICIiIgotICBhc3NldHMgPSBhc3NldHMgb3IgW10KLSAgaWYgaXNpbnN0YW5jZShhc3NldHMsIGJhc2VzdHJpbmcpOgotICAgIGFzc2V0cyA9IFthc3NldHNdCi0gIHJldHVybiBfUnVuQWFwdENtZChbJ2R1bXAnLCB3aGF0LCBhcGtdICsgYXNzZXRzKS5zcGxpdGxpbmVzKCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL2FkYl9jb21wYXRpYmlsaXR5X2RldmljZXRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9hZGJfY29tcGF0aWJpbGl0eV9kZXZpY2V0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmUyYTFiLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL2FkYl9jb21wYXRpYmlsaXR5X2RldmljZXRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQgb3MKLWltcG9ydCBwb3NpeHBhdGgKLWltcG9ydCByYW5kb20KLWltcG9ydCBzaWduYWwKLWltcG9ydCBzeXMKLWltcG9ydCB1bml0dGVzdAotCi1fQ0FUQVBVTFRfQkFTRV9ESVIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICcuLicsICcuLicsICcuLicpKQotCi1zeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKF9DQVRBUFVMVF9CQVNFX0RJUiwgJ2RldmlsJykpCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX2Vycm9ycwotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdGVzdF9jYXNlCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBhZGJfd3JhcHBlcgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgY21kX2hlbHBlcgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgdGltZW91dF9yZXRyeQotCi0KLV9URVNUX0RBVEFfRElSID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbigKLSAgICBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAndGVzdCcsICdkYXRhJykpCi0KLQotZGVmIF9ob3N0QWRiUGlkcygpOgotICBwc19zdGF0dXMsIHBzX291dHB1dCA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0KAotICAgICAgWydwZ3JlcCcsICctbCcsICdhZGInXSkKLSAgaWYgcHNfc3RhdHVzICE9IDA6Ci0gICAgcmV0dXJuIFtdCi0KLSAgcGlkc19hbmRfbmFtZXMgPSAobGluZS5zcGxpdCgpIGZvciBsaW5lIGluIHBzX291dHB1dC5zcGxpdGxpbmVzKCkpCi0gIHJldHVybiBbaW50KHBpZCkgZm9yIHBpZCwgbmFtZSBpbiBwaWRzX2FuZF9uYW1lcwotICAgICAgICAgIGlmIG5hbWUgPT0gJ2FkYiddCi0KLQotY2xhc3MgQWRiQ29tcGF0aWJpbGl0eVRlc3QoZGV2aWNlX3Rlc3RfY2FzZS5EZXZpY2VUZXN0Q2FzZSk6Ci0KLSAgQGNsYXNzbWV0aG9kCi0gIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgY3VzdG9tX2FkYl9wYXRoID0gb3MuZW52aXJvbi5nZXQoJ0FEQl9QQVRIJykKLSAgICBjdXN0b21fZGVwcyA9IHsKLSAgICAgICdjb25maWdfdHlwZSc6ICdCYXNlQ29uZmlnJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiB7fSwKLSAgICB9Ci0gICAgaWYgY3VzdG9tX2FkYl9wYXRoOgotICAgICAgY3VzdG9tX2RlcHNbJ2RlcGVuZGVuY2llcyddWydhZGInXSA9IHsKLSAgICAgICAgJ2ZpbGVfaW5mbyc6IHsKLSAgICAgICAgICBkZXZpbF9lbnYuR2V0UGxhdGZvcm0oKTogewotICAgICAgICAgICAgJ2xvY2FsX3BhdGhzJzogW2N1c3RvbV9hZGJfcGF0aF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfSwKLSAgICAgIH0KLSAgICBkZXZpbF9lbnYuY29uZmlnLkluaXRpYWxpemUoY29uZmlncz1bY3VzdG9tX2RlcHNdKQotCi0gIGRlZiB0ZXN0U3RhcnRTZXJ2ZXIoc2VsZik6Ci0gICAgIyBNYW51YWxseSBraWxsIG9mZiBhbnkgaW5zdGFuY2VzIG9mIGFkYi4KLSAgICBhZGJfcGlkcyA9IF9ob3N0QWRiUGlkcygpCi0gICAgZm9yIHAgaW4gYWRiX3BpZHM6Ci0gICAgICBvcy5raWxsKHAsIHNpZ25hbC5TSUdLSUxMKQotCi0gICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoCi0gICAgICAgIHRpbWVvdXRfcmV0cnkuV2FpdEZvcigKLSAgICAgICAgICAgIGxhbWJkYTogbm90IF9ob3N0QWRiUGlkcygpLCB3YWl0X3BlcmlvZD0wLjEsIG1heF90cmllcz0xMCkpCi0KLSAgICAjIHN0YXJ0IHRoZSBhZGIgc2VydmVyCi0gICAgc3RhcnRfc2VydmVyX3N0YXR1cywgXyA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0KAotICAgICAgICBbYWRiX3dyYXBwZXIuQWRiV3JhcHBlci5HZXRBZGJQYXRoKCksICdzdGFydC1zZXJ2ZXInXSkKLQotICAgICMgdmVyaWZ5IHRoYXQgdGhlIHNlcnZlciBpcyBub3cgb25saW5lCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMCwgc3RhcnRfc2VydmVyX3N0YXR1cykKLSAgICBzZWxmLmFzc2VydElzTm90Tm9uZSgKLSAgICAgICAgdGltZW91dF9yZXRyeS5XYWl0Rm9yKAotICAgICAgICAgICAgbGFtYmRhOiBib29sKF9ob3N0QWRiUGlkcygpKSwgd2FpdF9wZXJpb2Q9MC4xLCBtYXhfdHJpZXM9MTApKQotCi0gIGRlZiB0ZXN0S2lsbFNlcnZlcihzZWxmKToKLSAgICBhZGJfcGlkcyA9IF9ob3N0QWRiUGlkcygpCi0gICAgaWYgbm90IGFkYl9waWRzOgotICAgICAgYWRiX3dyYXBwZXIuQWRiV3JhcHBlci5TdGFydFNlcnZlcigpCi0KLSAgICBhZGJfcGlkcyA9IF9ob3N0QWRiUGlkcygpCi0gICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobGVuKGFkYl9waWRzKSwgMSkKLQotICAgIGtpbGxfc2VydmVyX3N0YXR1cywgXyA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0KAotICAgICAgICBbYWRiX3dyYXBwZXIuQWRiV3JhcHBlci5HZXRBZGJQYXRoKCksICdraWxsLXNlcnZlciddKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwga2lsbF9zZXJ2ZXJfc3RhdHVzKQotCi0gICAgYWRiX3BpZHMgPSBfaG9zdEFkYlBpZHMoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKGFkYl9waWRzKSkKLQotICBkZWYgdGVzdERldmljZXMoc2VsZik6Ci0gICAgZGV2aWNlcyA9IGFkYl93cmFwcGVyLkFkYldyYXBwZXIuRGV2aWNlcygpCi0gICAgc2VsZi5hc3NlcnROb3RFcXVhbCgwLCBsZW4oZGV2aWNlcyksICdObyBkZXZpY2VzIGZvdW5kLicpCi0KLSAgZGVmIGdldFRlc3RJbnN0YW5jZShzZWxmKToKLSAgICAiIiJDcmVhdGVzIGEgcmVhbCBBZGJXcmFwcGVyIGluc3RhbmNlIGZvciB0ZXN0aW5nLiIiIgotICAgIHJldHVybiBhZGJfd3JhcHBlci5BZGJXcmFwcGVyKHNlbGYuc2VyaWFsKQotCi0gIGRlZiB0ZXN0U2hlbGwoc2VsZik6Ci0gICAgdW5kZXJfdGVzdCA9IHNlbGYuZ2V0VGVzdEluc3RhbmNlKCkKLSAgICBzaGVsbF9sc19yZXN1bHQgPSB1bmRlcl90ZXN0LlNoZWxsKCdscycpCi0gICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNoZWxsX2xzX3Jlc3VsdCwgc3RyKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShib29sKHNoZWxsX2xzX3Jlc3VsdCkpCi0KLSAgZGVmIHRlc3RTaGVsbF9mYWlsZWQoc2VsZik6Ci0gICAgdW5kZXJfdGVzdCA9IHNlbGYuZ2V0VGVzdEluc3RhbmNlKCkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgdW5kZXJfdGVzdC5TaGVsbCgnbHMgL2Zvby9iYXIvYmF6JykKLQotICBkZWYgdGVzdFNoZWxsX2V4dGVybmFsU3RvcmFnZURlZmluZWQoc2VsZik6Ci0gICAgdW5kZXJfdGVzdCA9IHNlbGYuZ2V0VGVzdEluc3RhbmNlKCkKLSAgICBleHRlcm5hbF9zdG9yYWdlID0gdW5kZXJfdGVzdC5TaGVsbCgnZWNobyAkRVhURVJOQUxfU1RPUkFHRScpCi0gICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4dGVybmFsX3N0b3JhZ2UsIHN0cikKLSAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLmlzYWJzKGV4dGVybmFsX3N0b3JhZ2UpKQotCi0gIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi0gIGRlZiBnZXRUZXN0UHVzaERlc3RpbmF0aW9uKHNlbGYsIHVuZGVyX3Rlc3QpOgotICAgICIiIkNyZWF0ZXMgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHN1aXRhYmxlIGZvciBwdXNoaW5nIHRvLiIiIgotICAgIGV4dGVybmFsX3N0b3JhZ2UgPSB1bmRlcl90ZXN0LlNoZWxsKCdlY2hvICRFWFRFUk5BTF9TVE9SQUdFJykuc3RyaXAoKQotICAgIGlmIG5vdCBleHRlcm5hbF9zdG9yYWdlOgotICAgICAgc2VsZi5za2lwVGVzdCgnRXh0ZXJuYWwgc3RvcmFnZSBub3QgYXZhaWxhYmxlLicpCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgIHJhbmRvbV9oZXggPSBoZXgocmFuZG9tLnJhbmRpbnQoMCwgMiAqKiA1MikpWzI6XQotICAgICAgbmFtZSA9ICd0bXBfcHVzaF90ZXN0JXMnICUgcmFuZG9tX2hleAotICAgICAgcGF0aCA9IHBvc2l4cGF0aC5qb2luKGV4dGVybmFsX3N0b3JhZ2UsIG5hbWUpCi0gICAgICB0cnk6Ci0gICAgICAgIHVuZGVyX3Rlc3QuU2hlbGwoJ2xzICVzJyAlIHBhdGgpCi0gICAgICBleGNlcHQgZGV2aWNlX2Vycm9ycy5BZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcjoKLSAgICAgICAgYnJlYWsKLSAgICB1bmRlcl90ZXN0LlNoZWxsKCdta2RpciAlcycgJSBwYXRoKQotICAgIHRyeToKLSAgICAgIHlpZWxkIHBhdGgKLSAgICBmaW5hbGx5OgotICAgICAgdW5kZXJfdGVzdC5TaGVsbCgncm0gLXJmICVzJyAlIHBhdGgpCi0KLSAgZGVmIHRlc3RQdXNoX2ZpbGVUb0ZpbGUoc2VsZik6Ci0gICAgdW5kZXJfdGVzdCA9IHNlbGYuZ2V0VGVzdEluc3RhbmNlKCkKLSAgICB3aXRoIHNlbGYuZ2V0VGVzdFB1c2hEZXN0aW5hdGlvbih1bmRlcl90ZXN0KSBhcyBwdXNoX3RhcmdldF9kaXJlY3Rvcnk6Ci0gICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oX1RFU1RfREFUQV9ESVIsICdwdXNoX2ZpbGUudHh0JykKLSAgICAgIGRlc3QgPSBwb3NpeHBhdGguam9pbihwdXNoX3RhcmdldF9kaXJlY3RvcnksICdwdXNoX2ZpbGUudHh0JykKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5BZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICAgIHVuZGVyX3Rlc3QuU2hlbGwoJ2xzICVzJyAlIGRlc3QpCi0gICAgICB1bmRlcl90ZXN0LlB1c2goc3JjLCBkZXN0KQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVzdCwgdW5kZXJfdGVzdC5TaGVsbCgnbHMgJXMnICUgZGVzdCkuc3RyaXAoKSkKLQotICBkZWYgdGVzdFB1c2hfZmlsZVRvRGlyZWN0b3J5KHNlbGYpOgotICAgIHVuZGVyX3Rlc3QgPSBzZWxmLmdldFRlc3RJbnN0YW5jZSgpCi0gICAgd2l0aCBzZWxmLmdldFRlc3RQdXNoRGVzdGluYXRpb24odW5kZXJfdGVzdCkgYXMgcHVzaF90YXJnZXRfZGlyZWN0b3J5OgotICAgICAgc3JjID0gb3MucGF0aC5qb2luKF9URVNUX0RBVEFfRElSLCAncHVzaF9maWxlLnR4dCcpCi0gICAgICBkZXN0ID0gcHVzaF90YXJnZXRfZGlyZWN0b3J5Ci0gICAgICByZXN1bHRpbmdfZmlsZSA9IHBvc2l4cGF0aC5qb2luKGRlc3QsICdwdXNoX2ZpbGUudHh0JykKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5BZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICAgIHVuZGVyX3Rlc3QuU2hlbGwoJ2xzICVzJyAlIHJlc3VsdGluZ19maWxlKQotICAgICAgdW5kZXJfdGVzdC5QdXNoKHNyYywgZGVzdCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgIHJlc3VsdGluZ19maWxlLAotICAgICAgICAgIHVuZGVyX3Rlc3QuU2hlbGwoJ2xzICVzJyAlIHJlc3VsdGluZ19maWxlKS5zdHJpcCgpKQotCi0gIGRlZiB0ZXN0UHVzaF9kaXJlY3RvcnlUb0RpcmVjdG9yeShzZWxmKToKLSAgICB1bmRlcl90ZXN0ID0gc2VsZi5nZXRUZXN0SW5zdGFuY2UoKQotICAgIHdpdGggc2VsZi5nZXRUZXN0UHVzaERlc3RpbmF0aW9uKHVuZGVyX3Rlc3QpIGFzIHB1c2hfdGFyZ2V0X2RpcmVjdG9yeToKLSAgICAgIHNyYyA9IG9zLnBhdGguam9pbihfVEVTVF9EQVRBX0RJUiwgJ3B1c2hfZGlyZWN0b3J5JykKLSAgICAgIGRlc3QgPSBwb3NpeHBhdGguam9pbihwdXNoX3RhcmdldF9kaXJlY3RvcnksICdwdXNoX2RpcmVjdG9yeScpCi0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgICB1bmRlcl90ZXN0LlNoZWxsKCdscyAlcycgJSBkZXN0KQotICAgICAgdW5kZXJfdGVzdC5QdXNoKHNyYywgZGVzdCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgIHNvcnRlZChvcy5saXN0ZGlyKHNyYykpLAotICAgICAgICAgIHNvcnRlZCh1bmRlcl90ZXN0LlNoZWxsKCdscyAlcycgJSBkZXN0KS5zdHJpcCgpLnNwbGl0KCkpKQotCi0gIGRlZiB0ZXN0UHVzaF9kaXJlY3RvcnlUb0V4aXN0aW5nRGlyZWN0b3J5KHNlbGYpOgotICAgIHVuZGVyX3Rlc3QgPSBzZWxmLmdldFRlc3RJbnN0YW5jZSgpCi0gICAgd2l0aCBzZWxmLmdldFRlc3RQdXNoRGVzdGluYXRpb24odW5kZXJfdGVzdCkgYXMgcHVzaF90YXJnZXRfZGlyZWN0b3J5OgotICAgICAgc3JjID0gb3MucGF0aC5qb2luKF9URVNUX0RBVEFfRElSLCAncHVzaF9kaXJlY3RvcnknKQotICAgICAgZGVzdCA9IHB1c2hfdGFyZ2V0X2RpcmVjdG9yeQotICAgICAgcmVzdWx0aW5nX2RpcmVjdG9yeSA9IHBvc2l4cGF0aC5qb2luKGRlc3QsICdwdXNoX2RpcmVjdG9yeScpCi0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgICB1bmRlcl90ZXN0LlNoZWxsKCdscyAlcycgJSByZXN1bHRpbmdfZGlyZWN0b3J5KQotICAgICAgdW5kZXJfdGVzdC5TaGVsbCgnbWtkaXIgJXMnICUgcmVzdWx0aW5nX2RpcmVjdG9yeSkKLSAgICAgIHVuZGVyX3Rlc3QuUHVzaChzcmMsIGRlc3QpCi0gICAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICBzb3J0ZWQob3MubGlzdGRpcihzcmMpKSwKLSAgICAgICAgICBzb3J0ZWQodW5kZXJfdGVzdC5TaGVsbCgnbHMgJXMnICUgcmVzdWx0aW5nX2RpcmVjdG9yeSkuc3BsaXQoKSkpCi0KLSAgIyBUT0RPKGpidWRvcmljayk6IEltcGxlbWVudCB0ZXN0cyBmb3IgdGhlIGZvbGxvd2luZzoKLSAgIyB0YXNrc2V0IC1jCi0gICMgZGV2aWNlcyBbLWxdCi0gICMgcHVsbAotICAjIHNoZWxsCi0gICMgbHMKLSAgIyBsb2djYXQgWy1jXSBbLWRdIFstdl0gWy1iXQotICAjIGZvcndhcmQgWy0tcmVtb3ZlXSBbLS1saXN0XQotICAjIGpkd3AKLSAgIyBpbnN0YWxsIFstbF0gWy1yXSBbLXNdIFstZF0KLSAgIyBpbnN0YWxsLW11bHRpcGxlIFstbF0gWy1yXSBbLXNdIFstZF0gWy1wXQotICAjIHVuaW5zdGFsbCBbLWtdCi0gICMgYmFja3VwIC1mIFstYXBrXSBbLXNoYXJlZF0gWy1ub3N5c3RlbV0gWy1hbGxdCi0gICMgcmVzdG9yZQotICAjIHdhaXQtZm9yLWRldmljZQotICAjIGdldC1zdGF0ZSAoQlJPS0VOIElOIFRIRSBNIFNESykKLSAgIyBnZXQtZGV2cGF0aAotICAjIHJlbW91bnQKLSAgIyByZWJvb3QKLSAgIyByZWJvb3QtYm9vdGxvYWRlcgotICAjIHJvb3QKLSAgIyBlbXUKLQotICBAY2xhc3NtZXRob2QKLSAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKLSAgICBwcmludAotICAgIHByaW50Ci0gICAgcHJpbnQgJ3Rlc3RlZCAlcycgJSBhZGJfd3JhcHBlci5BZGJXcmFwcGVyLkdldEFkYlBhdGgoKQotICAgIHByaW50ICcgICVzJyAlIGFkYl93cmFwcGVyLkFkYldyYXBwZXIuVmVyc2lvbigpCi0gICAgcHJpbnQgJ2Nvbm5lY3RlZCBkZXZpY2VzOicKLSAgICB0cnk6Ci0gICAgICBmb3IgZCBpbiBhZGJfd3JhcHBlci5BZGJXcmFwcGVyLkRldmljZXMoKToKLSAgICAgICAgcHJpbnQgJyAgJXMnICUgZAotICAgIGV4Y2VwdCBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcjoKLSAgICAgIHByaW50ICcgIDxmYWlsZWQgdG8gbGlzdCBkZXZpY2VzPicKLSAgICAgIHJhaXNlCi0gICAgZmluYWxseToKLSAgICAgIHByaW50Ci0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQodW5pdHRlc3QubWFpbigpKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvYWRiX3dyYXBwZXIucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9hZGJfd3JhcHBlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQyNGQ0Ny4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9hZGJfd3JhcHBlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDk0MCArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlRoaXMgbW9kdWxlIHdyYXBzIEFuZHJvaWQncyBhZGIgdG9vbC4KLQotVGhpcyBpcyBhIHRoaW4gd3JhcHBlciBhcm91bmQgdGhlIGFkYiBpbnRlcmZhY2UuIEFueSBhZGRpdGlvbmFsIGNvbXBsZXhpdHkKLXNob3VsZCBiZSBkZWxlZ2F0ZWQgdG8gYSBoaWdoZXIgbGV2ZWwgKGV4LiBEZXZpY2VVdGlscykuCi0iIiIKLQotaW1wb3J0IGNvbGxlY3Rpb25zCi1pbXBvcnQgZGlzdHV0aWxzLnZlcnNpb24KLWltcG9ydCBlcnJubwotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHBvc2l4cGF0aAotaW1wb3J0IHJlCi1pbXBvcnQgc3VicHJvY2VzcwotCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGVjb3JhdG9ycwotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBjbWRfaGVscGVyCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBsYXp5Ci1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCB0aW1lb3V0X3JldHJ5Ci0KLXdpdGggZGV2aWxfZW52LlN5c1BhdGgoZGV2aWxfZW52LkRFUEVOREVOQ1lfTUFOQUdFUl9QQVRIKToKLSAgaW1wb3J0IGRlcGVuZGVuY3lfbWFuYWdlciAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCi0KLWxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLUFEQl9LRVlTX0ZJTEUgPSAnL2RhdGEvbWlzYy9hZGIvYWRiX2tleXMnCi0KLURFRkFVTFRfVElNRU9VVCA9IDMwCi1ERUZBVUxUX1JFVFJJRVMgPSAyCi0KLV9BREJfVkVSU0lPTl9SRSA9IHJlLmNvbXBpbGUocidBbmRyb2lkIERlYnVnIEJyaWRnZSB2ZXJzaW9uIChcZCtcLlxkK1wuXGQrKScpCi1fRU1VTEFUT1JfUkUgPSByZS5jb21waWxlKHInXmVtdWxhdG9yLVswLTldKyQnKQotX0RFVklDRV9OT1RfRk9VTkRfUkUgPSByZS5jb21waWxlKHIiZXJyb3I6IGRldmljZSAnKD9QPHNlcmlhbD4uKyknIG5vdCBmb3VuZCIpCi1fUkVBRFlfU1RBVEUgPSAnZGV2aWNlJwotX1ZFUklUWV9ESVNBQkxFX1JFID0gcmUuY29tcGlsZShyJ1Zlcml0eSAoYWxyZWFkeSApP2Rpc2FibGVkJykKLV9WRVJJVFlfRU5BQkxFX1JFID0gcmUuY29tcGlsZShyJ1Zlcml0eSAoYWxyZWFkeSApP2VuYWJsZWQnKQotX1dBSVRJTkdfRk9SX0RFVklDRV9SRSA9IHJlLmNvbXBpbGUocictIHdhaXRpbmcgZm9yIGRldmljZSAtJykKLQotCi1kZWYgVmVyaWZ5TG9jYWxGaWxlRXhpc3RzKHBhdGgpOgotICAiIiJWZXJpZmllcyBhIGxvY2FsIGZpbGUgZXhpc3RzLgotCi0gIEFyZ3M6Ci0gICAgcGF0aDogUGF0aCB0byB0aGUgbG9jYWwgZmlsZS4KLQotICBSYWlzZXM6Ci0gICAgSU9FcnJvcjogSWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdC4KLSAgIiIiCi0gIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVOT0VOVCwgb3Muc3RyZXJyb3IoZXJybm8uRU5PRU5UKSwgcGF0aCkKLQotCi1kZWYgX0NyZWF0ZUFkYkVudmlyb25tZW50KCk6Ci0gIGFkYl9lbnYgPSBkaWN0KG9zLmVudmlyb24pCi0gIGFkYl9lbnZbJ0FEQl9MSUJVU0InXSA9ICcwJwotICByZXR1cm4gYWRiX2VudgotCi0KLWRlZiBfRmluZEFkYigpOgotICB0cnk6Ci0gICAgcmV0dXJuIGRldmlsX2Vudi5jb25maWcuTG9jYWxQYXRoKCdhZGInKQotICBleGNlcHQgZGVwZW5kZW5jeV9tYW5hZ2VyLk5vUGF0aEZvdW5kRXJyb3I6Ci0gICAgcGFzcwotCi0gIHRyeToKLSAgICByZXR1cm4gb3MucGF0aC5qb2luKGRldmlsX2Vudi5jb25maWcuTG9jYWxQYXRoKCdhbmRyb2lkX3NkaycpLAotICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtLXRvb2xzJywgJ2FkYicpCi0gIGV4Y2VwdCBkZXBlbmRlbmN5X21hbmFnZXIuTm9QYXRoRm91bmRFcnJvcjoKLSAgICBwYXNzCi0KLSAgdHJ5OgotICAgIHJldHVybiBkZXZpbF9lbnYuY29uZmlnLkZldGNoUGF0aCgnYWRiJykKLSAgZXhjZXB0IGRlcGVuZGVuY3lfbWFuYWdlci5Ob1BhdGhGb3VuZEVycm9yOgotICAgIHJhaXNlIGRldmljZV9lcnJvcnMuTm9BZGJFcnJvcigpCi0KLQotZGVmIF9HZXRWZXJzaW9uKCk6Ci0gICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKLSAgcmF3X3ZlcnNpb24gPSBBZGJXcmFwcGVyLl9SdW5BZGJDbWQoWyd2ZXJzaW9uJ10sIHRpbWVvdXQ9MiwgcmV0cmllcz0wKQotICBmb3IgbCBpbiByYXdfdmVyc2lvbi5zcGxpdGxpbmVzKCk6Ci0gICAgbSA9IF9BREJfVkVSU0lPTl9SRS5zZWFyY2gobCkKLSAgICBpZiBtOgotICAgICAgcmV0dXJuIG0uZ3JvdXAoMSkKLSAgcmV0dXJuIE5vbmUKLQotCi1kZWYgX1Nob3VsZFJldHJ5QWRiQ21kKGV4Yyk6Ci0gIHJldHVybiBub3QgaXNpbnN0YW5jZShleGMsIGRldmljZV9lcnJvcnMuTm9BZGJFcnJvcikKLQotCi1EZXZpY2VTdGF0ID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgnRGV2aWNlU3RhdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3N0X21vZGUnLCAnc3Rfc2l6ZScsICdzdF90aW1lJ10pCi0KLQotZGVmIF9Jc0V4dHJhbmVvdXNMaW5lKGxpbmUsIHNlbmRfY21kKToKLSAgIiIiRGV0ZXJtaW5lIGlmIGEgbGluZSByZWFkIGZyb20gc3Rkb3V0IGluIHBlcnNpc3RlbnQgc2hlbGwgaXMgZXh0cmFuZW91cy4KLQotICBUaGUgcmVzdWx0cyBvdXRwdXQgdG8gc3Rkb3V0IGJ5IHRoZSBwZXJzaXN0ZW50IHNoZWxsIHByb2Nlc3MKLSAgKGluIFBlcnNpc3RlbnRTaGVsbCBiZWxvdykgb2Z0ZW4gaW5jbHVkZSAiZXh0cmFuZW91cyIgbGluZXMgdGhhdCBhcmUKLSAgbm90IHBhcnQgb2YgdGhlIG91dHB1dCBvZiB0aGUgc2hlbGwgY29tbWFuZC4gVGhlc2UgImV4dHJhbmVvdXMiIGxpbmVzCi0gIGRvIG5vdCBhbHdheXMgYXBwZWFyIGFuZCBhcmUgb2YgdHdvIGZvcm1zOiBzaGVsbCBwcm9tcHQgbGluZXMgYW5kIGxpbmVzCi0gIHRoYXQganVzdCBkdXBsaWNhdGUgd2hhdCB0aGUgaW5wdXQgY29tbWFuZCB3YXMuIFRoaXMgZnVuY3Rpb24KLSAgZGV0ZWN0cyB0aGVzZSBleHRyYW5lb3VzIGxpbmVzLiBTaW5jZSBhbGwgdGhlc2UgbGluZXMgaGF2ZSB0aGUKLSAgb3JpZ2luYWwgY29tbWFuZCBpbiB0aGVtLCB0aGF0IGlzIHdoYXQgaXQgZGV0ZWN0cyByb3IuCi0KLSAgQXJnczoKLSAgICAgIGxpbmU6IE91dHB1dCBsaW5lIHRvIGNoZWNrLgotICAgICAgc2VuZF9jbWQ6IENvbW1hbmQgdGhhdCB3YXMgc2VudCB0byBhZGIgcGVyc2lzdGVudCBzaGVsbC4KLSAgIiIiCi0gIHJldHVybiBzZW5kX2NtZC5yc3RyaXAoKSBpbiBsaW5lCi0KLQotY2xhc3MgQWRiV3JhcHBlcihvYmplY3QpOgotICAiIiJBIHdyYXBwZXIgYXJvdW5kIGEgbG9jYWwgQW5kcm9pZCBEZWJ1ZyBCcmlkZ2UgZXhlY3V0YWJsZS4iIiIKLQotICBfQURCX0VOViA9IF9DcmVhdGVBZGJFbnZpcm9ubWVudCgpCi0KLSAgX2FkYl9wYXRoID0gbGF6eS5XZWFrQ29uc3RhbnQoX0ZpbmRBZGIpCi0gIF9hZGJfdmVyc2lvbiA9IGxhenkuV2Vha0NvbnN0YW50KF9HZXRWZXJzaW9uKQotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2Vfc2VyaWFsKToKLSAgICAiIiJJbml0aWFsaXplcyB0aGUgQWRiV3JhcHBlci4KLQotICAgIEFyZ3M6Ci0gICAgICBkZXZpY2Vfc2VyaWFsOiBUaGUgZGV2aWNlIHNlcmlhbCBudW1iZXIgYXMgYSBzdHJpbmcuCi0gICAgIiIiCi0gICAgaWYgbm90IGRldmljZV9zZXJpYWw6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCdBIGRldmljZSBzZXJpYWwgbXVzdCBiZSBzcGVjaWZpZWQnKQotICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBzdHIoZGV2aWNlX3NlcmlhbCkKLQotICBjbGFzcyBQZXJzaXN0ZW50U2hlbGwob2JqZWN0KToKLSAgICAnJydDbGFzcyB0byB1c2UgcGVyc2lzdGVudCBzaGVsbCBmb3IgQURCLgotCi0gICAgVGhpcyBjbGFzcyBhbGxvd3MgYSBwZXJzaXN0ZW50IEFEQiBzaGVsbCB0byBiZSBjcmVhdGVkLCB3aGVyZSBtdWx0aXBsZQotICAgIGNvbW1hbmRzIGNhbiBiZSBwYXNzZWQgaW50byBpdC4gVGhpcyBhdm9pZHMgdGhlIG92ZXJoZWFkIG9mIHN0YXJ0aW5nCi0gICAgdXAgYSBuZXcgQURCIHNoZWxsIGZvciBlYWNoIGNvbW1hbmQuCi0KLSAgICBFeGFtcGxlIG9mIHVzZToKLSAgICB3aXRoIFBlcnNpc3RlbnRTaGVsbCgnMTIzNDU2Nzg5JykgYXMgcHNoZWxsOgotICAgICAgICBwc2hlbGwuUnVuQ29tbWFuZCgnd2hpY2ggbHMnKQotICAgICAgICBwc2hlbGwuUnVuQ29tbWFuZCgnZWNobyBURVNUJywgY2xvc2U9VHJ1ZSkKLSAgICAnJycKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2VyaWFsKToKLSAgICAgICIiIkluaXRpYWxpemF0aW9uIGZ1bmN0aW9uOgotCi0gICAgICBBcmdzOgotICAgICAgICBzZXJpYWw6IFNlcmlhbCBudW1iZXIgb2YgZGV2aWNlLgotICAgICAgIiIiCi0gICAgICBzZWxmLl9jbWQgPSBbQWRiV3JhcHBlci5HZXRBZGJQYXRoKCksICctcycsIHNlcmlhbCwgJ3NoZWxsJ10KLSAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCi0KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgc2VsZi5TdGFydCgpCi0gICAgICBzZWxmLldhaXRGb3JSZWFkeSgpCi0gICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRiKToKLSAgICAgIHNlbGYuU3RvcCgpCi0KLSAgICBkZWYgU3RhcnQoc2VsZik6Ci0gICAgICAiIiJTdGFydCB0aGUgc2hlbGwuIiIiCi0gICAgICBpZiBzZWxmLl9wcm9jZXNzIGlzIG5vdCBOb25lOgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1BlcnNpc3RlbnQgc2hlbGwgYWxyZWFkeSBydW5uaW5nLicpCi0gICAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0gICAgICBzZWxmLl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzZWxmLl9jbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9QWRiV3JhcHBlci5fQURCX0VOVikKLQotICAgIGRlZiBXYWl0Rm9yUmVhZHkoc2VsZik6Ci0gICAgICAiIiJXYWl0IGZvciB0aGUgc2hlbGwgdG8gYmUgcmVhZHkgYWZ0ZXIgc3RhcnRpbmcuCi0KLSAgICAgIFNlbmRzIGFuIGVjaG8gY29tbWFuZCwgdGhlbiB3YWl0cyB1bnRpbCBpdCBnZXRzIGEgcmVzcG9uc2UuCi0gICAgICAiIiIKLSAgICAgIHNlbGYuX3Byb2Nlc3Muc3RkaW4ud3JpdGUoJ2VjaG9cbicpCi0gICAgICBvdXRwdXRfbGluZSA9IHNlbGYuX3Byb2Nlc3Muc3Rkb3V0LnJlYWRsaW5lKCkKLSAgICAgIHdoaWxlIG91dHB1dF9saW5lLnJzdHJpcCgpICE9ICcnOgotICAgICAgICBvdXRwdXRfbGluZSA9IHNlbGYuX3Byb2Nlc3Muc3Rkb3V0LnJlYWRsaW5lKCkKLQotICAgIGRlZiBSdW5Db21tYW5kKHNlbGYsIGNvbW1hbmQsIGNsb3NlPUZhbHNlKToKLSAgICAgICIiIlJ1bnMgYW4gQURCIGNvbW1hbmQgYW5kIHJldHVybnMgdGhlIG91dHB1dC4KLQotICAgICAgTm90ZSB0aGF0IHRoZXJlIGNhbiBiZSBhcHByb3hpbWF0ZWx5IDQwIG1zIG9mIGFkZGl0aW9uYWwgbGF0ZW5jeQotICAgICAgYmV0d2VlbiBzZW5kaW5nIHRoZSBjb21tYW5kIGFuZCByZWNlaXZpbmcgdGhlIHJlc3VsdHMgaWYgY2xvc2U9RmFsc2UKLSAgICAgIGR1ZSB0byB0aGUgdXNlIG9mIE5hZ2xlJ3MgYWxnb3JpdGhtIGluIHRoZSBUQ1Agc29ja2V0IGJldHdlZW4gdGhlCi0gICAgICBhZGIgc2VydmVyIGFuZCBjbGllbnQuIFRvIGF2b2lkIHRoaXMgZXh0cmEgbGF0ZW5jeSwgc2V0IGNsb3NlPVRydWUuCi0KLSAgICAgIEFyZ3M6Ci0gICAgICAgIGNvbW1hbmQ6IENvbW1hbmQgdG8gc2VuZC4KLSAgICAgIFJldHVybnM6Ci0gICAgICAgIFRoZSBjb21tYW5kIG91dHB1dCwgZ2l2ZW4gYXMgYSBsaXN0IG9mIGxpbmVzLCBhbmQgdGhlIGV4aXQgY29kZQotICAgICAgIiIiCi0KLSAgICAgIGlmIGNsb3NlOgotICAgICAgICBkZWYgcnVuX2NtZChjbWQpOgotICAgICAgICAgIHNlbmRfY21kID0gJyggJXMgKTsgZWNobyAkPzsgZXhpdDtcbicgJSBjbWQucnN0cmlwKCkKLSAgICAgICAgICAob3V0cHV0LCBfKSA9IHNlbGYuX3Byb2Nlc3MuY29tbXVuaWNhdGUoc2VuZF9jbWQpCi0gICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKLSAgICAgICAgICBmb3IgeCBpbiBvdXRwdXQucnN0cmlwKCkuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgeWllbGQgeAotCi0gICAgICBlbHNlOgotICAgICAgICBkZWYgcnVuX2NtZChjbWQpOgotICAgICAgICAgIHNlbmRfY21kID0gJyggJXMgKTsgZWNobyBET05FOiQ/O1xuJyAlIGNtZC5yc3RyaXAoKQotICAgICAgICAgIHNlbGYuX3Byb2Nlc3Muc3RkaW4ud3JpdGUoc2VuZF9jbWQpCi0gICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIG91dHB1dF9saW5lID0gc2VsZi5fcHJvY2Vzcy5zdGRvdXQucmVhZGxpbmUoKS5yc3RyaXAoKQotICAgICAgICAgICAgaWYgb3V0cHV0X2xpbmVbOjVdID09ICdET05FOic6Ci0gICAgICAgICAgICAgIHlpZWxkIG91dHB1dF9saW5lWzU6XQotICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgeWllbGQgb3V0cHV0X2xpbmUKLQotICAgICAgcmVzdWx0ID0gW2xpbmUgZm9yIGxpbmUgaW4gcnVuX2NtZChjb21tYW5kKQotICAgICAgICAgICAgICAgIGlmIG5vdCBfSXNFeHRyYW5lb3VzTGluZShsaW5lLCBjb21tYW5kKV0KLQotICAgICAgcmV0dXJuIChyZXN1bHRbOi0xXSwgaW50KHJlc3VsdFstMV0pKQotCi0gICAgZGVmIFN0b3Aoc2VsZik6Ci0gICAgICAiIiJTdG9wcyB0aGUgQURCIHByb2Nlc3MgaWYgaXQgaXMgc3RpbGwgcnVubmluZy4iIiIKLSAgICAgIGlmIHNlbGYuX3Byb2Nlc3MgaXMgbm90IE5vbmU6Ci0gICAgICAgIHNlbGYuX3Byb2Nlc3Muc3RkaW4ud3JpdGUoJ2V4aXRcbicpCi0gICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCi0KLSAgQGNsYXNzbWV0aG9kCi0gIGRlZiBHZXRBZGJQYXRoKGNscyk6Ci0gICAgcmV0dXJuIGNscy5fYWRiX3BhdGgucmVhZCgpCi0KLSAgQGNsYXNzbWV0aG9kCi0gIGRlZiBWZXJzaW9uKGNscyk6Ci0gICAgcmV0dXJuIGNscy5fYWRiX3ZlcnNpb24ucmVhZCgpCi0KLSAgQGNsYXNzbWV0aG9kCi0gIGRlZiBfQnVpbGRBZGJDbWQoY2xzLCBhcmdzLCBkZXZpY2Vfc2VyaWFsLCBjcHVfYWZmaW5pdHk9Tm9uZSk6Ci0gICAgaWYgY3B1X2FmZmluaXR5IGlzIG5vdCBOb25lOgotICAgICAgY21kID0gWyd0YXNrc2V0JywgJy1jJywgc3RyKGNwdV9hZmZpbml0eSldCi0gICAgZWxzZToKLSAgICAgIGNtZCA9IFtdCi0gICAgY21kLmFwcGVuZChjbHMuR2V0QWRiUGF0aCgpKQotICAgIGlmIGRldmljZV9zZXJpYWwgaXMgbm90IE5vbmU6Ci0gICAgICBjbWQuZXh0ZW5kKFsnLXMnLCBkZXZpY2Vfc2VyaWFsXSkKLSAgICBjbWQuZXh0ZW5kKGFyZ3MpCi0gICAgcmV0dXJuIGNtZAotCi0gICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAotICBAY2xhc3NtZXRob2QKLSAgQGRlY29yYXRvcnMuV2l0aFRpbWVvdXRBbmRDb25kaXRpb25hbFJldHJpZXMoX1Nob3VsZFJldHJ5QWRiQ21kKQotICBkZWYgX1J1bkFkYkNtZChjbHMsIGFyZ3MsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lLCBkZXZpY2Vfc2VyaWFsPU5vbmUsCi0gICAgICAgICAgICAgICAgIGNoZWNrX2Vycm9yPVRydWUsIGNwdV9hZmZpbml0eT1Ob25lKToKLSAgICAjIHB5bGludDogZGlzYWJsZT1uby1tZW1iZXIKLSAgICB0cnk6Ci0gICAgICBzdGF0dXMsIG91dHB1dCA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0V2l0aFRpbWVvdXQoCi0gICAgICAgICAgY2xzLl9CdWlsZEFkYkNtZChhcmdzLCBkZXZpY2Vfc2VyaWFsLCBjcHVfYWZmaW5pdHk9Y3B1X2FmZmluaXR5KSwKLSAgICAgICAgICB0aW1lb3V0X3JldHJ5LkN1cnJlbnRUaW1lb3V0VGhyZWFkR3JvdXAoKS5HZXRSZW1haW5pbmdUaW1lKCksCi0gICAgICAgICAgZW52PWNscy5fQURCX0VOVikKLSAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRU5PRU5ULCBlcnJuby5FTk9FWEVDKToKLSAgICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Ob0FkYkVycm9yKG1zZz1zdHIoZSkpCi0gICAgICBlbHNlOgotICAgICAgICByYWlzZQotCi0gICAgIyBCZXN0IGVmZm9ydCB0byBjYXRjaCBlcnJvcnMgZnJvbSBhZGI7IHVuZm9ydHVuYXRlbHkgYWRiIGlzIHZlcnkKLSAgICAjIGluY29uc2lzdGVudCB3aXRoIGVycm9yIHJlcG9ydGluZyBzbyBtYW55IGNvbW1hbmQgZmFpbHVyZXMgcHJlc2VudAotICAgICMgZGlmZmVyZW50bHkuCi0gICAgaWYgc3RhdHVzICE9IDAgb3IgKGNoZWNrX2Vycm9yIGFuZCBvdXRwdXQuc3RhcnRzd2l0aCgnZXJyb3I6JykpOgotICAgICAgbm90X2ZvdW5kX20gPSBfREVWSUNFX05PVF9GT1VORF9SRS5tYXRjaChvdXRwdXQpCi0gICAgICBkZXZpY2Vfd2FpdGluZ19tID0gX1dBSVRJTkdfRk9SX0RFVklDRV9SRS5tYXRjaChvdXRwdXQpCi0gICAgICBpZiAoZGV2aWNlX3dhaXRpbmdfbSBpcyBub3QgTm9uZQotICAgICAgICAgIG9yIChub3RfZm91bmRfbSBpcyBub3QgTm9uZSBhbmQKLSAgICAgICAgICAgICAgbm90X2ZvdW5kX20uZ3JvdXAoJ3NlcmlhbCcpID09IGRldmljZV9zZXJpYWwpKToKLSAgICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5EZXZpY2VVbnJlYWNoYWJsZUVycm9yKGRldmljZV9zZXJpYWwpCi0gICAgICBlbHNlOgotICAgICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICAgIGFyZ3MsIG91dHB1dCwgc3RhdHVzLCBkZXZpY2Vfc2VyaWFsKQotCi0gICAgcmV0dXJuIG91dHB1dAotICAjIHB5bGludDogZW5hYmxlPXVudXNlZC1hcmd1bWVudAotCi0gIGRlZiBfUnVuRGV2aWNlQWRiQ21kKHNlbGYsIGFyZ3MsIHRpbWVvdXQsIHJldHJpZXMsIGNoZWNrX2Vycm9yPVRydWUpOgotICAgICIiIlJ1bnMgYW4gYWRiIGNvbW1hbmQgb24gdGhlIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuCi0KLSAgICBBcmdzOgotICAgICAgYXJnczogQSBsaXN0IG9mIGFyZ3VtZW50cyB0byBhZGIuCi0gICAgICB0aW1lb3V0OiBUaW1lb3V0IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiBOdW1iZXIgb2YgcmV0cmllcy4KLSAgICAgIGNoZWNrX2Vycm9yOiBDaGVjayB0aGF0IHRoZSBjb21tYW5kIGRvZXNuJ3QgcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2UuIFRoaXMKLSAgICAgICAgZG9lcyBOT1QgY2hlY2sgdGhlIGV4aXQgc3RhdHVzIG9mIHNoZWxsIGNvbW1hbmRzLgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuCi0gICAgIiIiCi0gICAgcmV0dXJuIHNlbGYuX1J1bkFkYkNtZChhcmdzLCB0aW1lb3V0PXRpbWVvdXQsIHJldHJpZXM9cmV0cmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV9zZXJpYWw9c2VsZi5fZGV2aWNlX3NlcmlhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2Vycm9yPWNoZWNrX2Vycm9yKQotCi0gIGRlZiBfSXRlclJ1bkRldmljZUFkYkNtZChzZWxmLCBhcmdzLCBpdGVyX3RpbWVvdXQsIHRpbWVvdXQpOgotICAgICIiIlJ1bnMgYW4gYWRiIGNvbW1hbmQgYW5kIHJldHVybnMgYW4gaXRlcmF0b3Igb3ZlciBpdHMgb3V0cHV0IGxpbmVzLgotCi0gICAgQXJnczoKLSAgICAgIGFyZ3M6IEEgbGlzdCBvZiBhcmd1bWVudHMgdG8gYWRiLgotICAgICAgaXRlcl90aW1lb3V0OiBUaW1lb3V0IGZvciBlYWNoIGl0ZXJhdGlvbiBpbiBzZWNvbmRzLgotICAgICAgdGltZW91dDogVGltZW91dCBmb3IgdGhlIGVudGlyZSBjb21tYW5kIGluIHNlY29uZHMuCi0KLSAgICBZaWVsZHM6Ci0gICAgICBUaGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kIGxpbmUgYnkgbGluZS4KLSAgICAiIiIKLSAgICByZXR1cm4gY21kX2hlbHBlci5JdGVyQ21kT3V0cHV0TGluZXMoCi0gICAgICAgIHNlbGYuX0J1aWxkQWRiQ21kKGFyZ3MsIHNlbGYuX2RldmljZV9zZXJpYWwpLAotICAgICAgICBpdGVyX3RpbWVvdXQ9aXRlcl90aW1lb3V0LAotICAgICAgICB0aW1lb3V0PXRpbWVvdXQsCi0gICAgICAgIGVudj1zZWxmLl9BREJfRU5WKQotCi0gIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICIiIkNvbnNpZGVyIGluc3RhbmNlcyBlcXVhbCBpZiB0aGV5IHJlZmVyIHRvIHRoZSBzYW1lIGRldmljZS4KLQotICAgIEFyZ3M6Ci0gICAgICBvdGhlcjogVGhlIGluc3RhbmNlIHRvIGNvbXBhcmUgZXF1YWxpdHkgd2l0aC4KLQotICAgIFJldHVybnM6Ci0gICAgICBUcnVlIGlmIHRoZSBpbnN0YW5jZXMgYXJlIGNvbnNpZGVyZWQgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KLSAgICAiIiIKLSAgICByZXR1cm4gc2VsZi5fZGV2aWNlX3NlcmlhbCA9PSBzdHIob3RoZXIpCi0KLSAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgIiIiVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnN0YW5jZS4KLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgZGV2aWNlIHNlcmlhbCBudW1iZXIgYXMgYSBzdHJpbmcuCi0gICAgIiIiCi0gICAgcmV0dXJuIHNlbGYuX2RldmljZV9zZXJpYWwKLQotICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgcmV0dXJuICclcyhcJyVzXCcpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZikKLQotICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLSAgQGNsYXNzbWV0aG9kCi0gIGRlZiBJc1NlcnZlck9ubGluZShjbHMpOgotICAgIHN0YXR1cywgb3V0cHV0ID0gY21kX2hlbHBlci5HZXRDbWRTdGF0dXNBbmRPdXRwdXQoWydwZ3JlcCcsICdhZGInXSkKLSAgICBvdXRwdXQgPSBbaW50KHgpIGZvciB4IGluIG91dHB1dC5zcGxpdCgpXQotICAgIGxvZ2dlci5pbmZvKCdQSURzIGZvciBhZGIgZm91bmQ6ICVyJywgb3V0cHV0KQotICAgIHJldHVybiBzdGF0dXMgPT0gMAotICAjIHB5bGludDogZW5hYmxlPXVudXNlZC1hcmd1bWVudAotCi0gIEBjbGFzc21ldGhvZAotICBkZWYgS2lsbFNlcnZlcihjbHMsIHRpbWVvdXQ9REVGQVVMVF9USU1FT1VULCByZXRyaWVzPURFRkFVTFRfUkVUUklFUyk6Ci0gICAgY2xzLl9SdW5BZGJDbWQoWydraWxsLXNlcnZlciddLCB0aW1lb3V0PXRpbWVvdXQsIHJldHJpZXM9cmV0cmllcykKLQotICBAY2xhc3NtZXRob2QKLSAgZGVmIFN0YXJ0U2VydmVyKGNscywgdGltZW91dD1ERUZBVUxUX1RJTUVPVVQsIHJldHJpZXM9REVGQVVMVF9SRVRSSUVTKToKLSAgICAjIENQVSBhZmZpbml0eSBpcyB1c2VkIHRvIHJlZHVjZSBhZGIgaW5zdGFiaWxpdHkgaHR0cDovL2NyYnVnLmNvbS8yNjg0NTAKLSAgICBjbHMuX1J1bkFkYkNtZChbJ3N0YXJ0LXNlcnZlciddLCB0aW1lb3V0PXRpbWVvdXQsIHJldHJpZXM9cmV0cmllcywKLSAgICAgICAgICAgICAgICAgICBjcHVfYWZmaW5pdHk9MCkKLQotICBAY2xhc3NtZXRob2QKLSAgZGVmIEdldERldmljZXMoY2xzLCB0aW1lb3V0PURFRkFVTFRfVElNRU9VVCwgcmV0cmllcz1ERUZBVUxUX1JFVFJJRVMpOgotICAgICIiIkRFUFJFQ0FURUQuIFJlZmVyIHRvIERldmljZXMoLi4uKSBiZWxvdy4iIiIKLSAgICAjIFRPRE8oamJ1ZG9yaWNrKTogUmVtb3ZlIHRoaXMgZnVuY3Rpb24gb25jZSBubyBtb3JlIGNsaWVudHMgYXJlIHVzaW5nIGl0LgotICAgIHJldHVybiBjbHMuRGV2aWNlcyh0aW1lb3V0PXRpbWVvdXQsIHJldHJpZXM9cmV0cmllcykKLQotICBAY2xhc3NtZXRob2QKLSAgZGVmIERldmljZXMoY2xzLCBkZXNpcmVkX3N0YXRlPV9SRUFEWV9TVEFURSwgbG9uZ19saXN0PUZhbHNlLAotICAgICAgICAgICAgICB0aW1lb3V0PURFRkFVTFRfVElNRU9VVCwgcmV0cmllcz1ERUZBVUxUX1JFVFJJRVMpOgotICAgICIiIkdldCB0aGUgbGlzdCBvZiBhY3RpdmUgYXR0YWNoZWQgZGV2aWNlcy4KLQotICAgIEFyZ3M6Ci0gICAgICBkZXNpcmVkX3N0YXRlOiBJZiBub3QgTm9uZSwgbGltaXQgdGhlIGRldmljZXMgcmV0dXJuZWQgdG8gb25seSB0aG9zZQotICAgICAgICBpbiB0aGUgZ2l2ZW4gc3RhdGUuCi0gICAgICBsb25nX2xpc3Q6IFdoZXRoZXIgdG8gdXNlIHRoZSBsb25nIGxpc3RpbmcgZm9ybWF0LgotICAgICAgdGltZW91dDogKG9wdGlvbmFsKSBUaW1lb3V0IHBlciB0cnkgaW4gc2Vjb25kcy4KLSAgICAgIHJldHJpZXM6IChvcHRpb25hbCkgTnVtYmVyIG9mIHJldHJpZXMgdG8gYXR0ZW1wdC4KLQotICAgIFlpZWxkczoKLSAgICAgIEFkYldyYXBwZXIgaW5zdGFuY2VzLgotICAgICIiIgotICAgIGxpbmVzID0gY2xzLl9SYXdEZXZpY2VzKGxvbmdfbGlzdD1sb25nX2xpc3QsIHRpbWVvdXQ9dGltZW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyaWVzPXJldHJpZXMpCi0gICAgaWYgbG9uZ19saXN0OgotICAgICAgcmV0dXJuIFsKLSAgICAgICAgW0FkYldyYXBwZXIobGluZVswXSldICsgbGluZVsxOl0KLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXMKLSAgICAgICAgaWYgKGxlbihsaW5lKSA+PSAyIGFuZCAobm90IGRlc2lyZWRfc3RhdGUgb3IgbGluZVsxXSA9PSBkZXNpcmVkX3N0YXRlKSkKLSAgICAgIF0KLSAgICBlbHNlOgotICAgICAgcmV0dXJuIFsKLSAgICAgICAgQWRiV3JhcHBlcihsaW5lWzBdKQotICAgICAgICBmb3IgbGluZSBpbiBsaW5lcwotICAgICAgICBpZiAobGVuKGxpbmUpID09IDIgYW5kIChub3QgZGVzaXJlZF9zdGF0ZSBvciBsaW5lWzFdID09IGRlc2lyZWRfc3RhdGUpKQotICAgICAgXQotCi0gIEBjbGFzc21ldGhvZAotICBkZWYgX1Jhd0RldmljZXMoY2xzLCBsb25nX2xpc3Q9RmFsc2UsIHRpbWVvdXQ9REVGQVVMVF9USU1FT1VULAotICAgICAgICAgICAgICAgICAgcmV0cmllcz1ERUZBVUxUX1JFVFJJRVMpOgotICAgIGNtZCA9IFsnZGV2aWNlcyddCi0gICAgaWYgbG9uZ19saXN0OgotICAgICAgY21kLmFwcGVuZCgnLWwnKQotICAgIG91dHB1dCA9IGNscy5fUnVuQWRiQ21kKGNtZCwgdGltZW91dD10aW1lb3V0LCByZXRyaWVzPXJldHJpZXMpCi0gICAgcmV0dXJuIFtsaW5lLnNwbGl0KCkgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKVsxOl1dCi0KLSAgZGVmIEdldERldmljZVNlcmlhbChzZWxmKToKLSAgICAiIiJHZXRzIHRoZSBkZXZpY2Ugc2VyaWFsIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuCi0KLSAgICBSZXR1cm5zOgotICAgICAgRGV2aWNlIHNlcmlhbCBudW1iZXIgYXMgYSBzdHJpbmcuCi0gICAgIiIiCi0gICAgcmV0dXJuIHNlbGYuX2RldmljZV9zZXJpYWwKLQotICBkZWYgUHVzaChzZWxmLCBsb2NhbCwgcmVtb3RlLCB0aW1lb3V0PTYwICogNSwgcmV0cmllcz1ERUZBVUxUX1JFVFJJRVMpOgotICAgICIiIlB1c2hlcyBhIGZpbGUgZnJvbSB0aGUgaG9zdCB0byB0aGUgZGV2aWNlLgotCi0gICAgQXJnczoKLSAgICAgIGxvY2FsOiBQYXRoIG9uIHRoZSBob3N0IGZpbGVzeXN0ZW0uCi0gICAgICByZW1vdGU6IFBhdGggb24gdGhlIGRldmljZSBmaWxlc3lzdGVtLgotICAgICAgdGltZW91dDogKG9wdGlvbmFsKSBUaW1lb3V0IHBlciB0cnkgaW4gc2Vjb25kcy4KLSAgICAgIHJldHJpZXM6IChvcHRpb25hbCkgTnVtYmVyIG9mIHJldHJpZXMgdG8gYXR0ZW1wdC4KLSAgICAiIiIKLSAgICBWZXJpZnlMb2NhbEZpbGVFeGlzdHMobG9jYWwpCi0KLSAgICBpZiAoZGlzdHV0aWxzLnZlcnNpb24uTG9vc2VWZXJzaW9uKHNlbGYuVmVyc2lvbigpKSA8Ci0gICAgICAgIGRpc3R1dGlscy52ZXJzaW9uLkxvb3NlVmVyc2lvbignMS4wLjM2JykpOgotCi0gICAgICAjIERpZmZlcmVudCB2ZXJzaW9ucyBvZiBhZGIgaGFuZGxlIHB1c2hpbmcgYSBkaXJlY3RvcnkgdG8gYW4gZXhpc3RpbmcKLSAgICAgICMgZGlyZWN0b3J5IGRpZmZlcmVudGx5LgotCi0gICAgICAjIEluIHRoZSB2ZXJzaW9uIHBhY2thZ2VkIHdpdGggdGhlIE0gU0RLLCAxLjAuMzIsIHRoZSBmb2xsb3dpbmcgcHVzaDoKLSAgICAgICMgICBmb28vYmFyIC0+IC9zZGNhcmQvZm9vL2JhcgotICAgICAgIyB3aGVyZSBiYXIgaXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5IGJvdGggb24gdGhlIGhvc3QgYW5kIHRoZSBkZXZpY2UKLSAgICAgICMgcmVzdWx0cyBpbiB0aGUgY29udGVudHMgb2YgYmFyLyBvbiB0aGUgaG9zdCBiZWluZyBwdXNoZWQgdG8gYmFyLyBvbgotICAgICAgIyB0aGUgZGV2aWNlLCBpLmUuCi0gICAgICAjICAgZm9vL2Jhci9BIC0+IC9zZGNhcmQvZm9vL2Jhci9BCi0gICAgICAjICAgZm9vL2Jhci9CIC0+IC9zZGNhcmQvZm9vL2Jhci9CCi0gICAgICAjICAgLi4uIGV0Yy4KLQotICAgICAgIyBJbiB0aGUgdmVyc2lvbiBwYWNrYWdlZCB3aXRoIHRoZSBOIFNESywgMS4wLjM2LCB0aGUgc2FtZSBwdXNoIHVuZGVyCi0gICAgICAjIHRoZSBzYW1lIGNvbmRpdGlvbnMgcmVzdWx0cyBpbiBhIHNlY29uZCBiYXIvIGRpcmVjdG9yeSBiZWluZyBjcmVhdGVkCi0gICAgICAjIHVuZGVybmVhdGggdGhlIGZpcnN0IGJhci8gZGlyZWN0b3J5IG9uIHRoZSBkZXZpY2UsIGkuZS4KLSAgICAgICMgICBmb28vYmFyL0EgLT4gL3NkY2FyZC9mb28vYmFyL2Jhci9BCi0gICAgICAjICAgZm9vL2Jhci9CIC0+IC9zZGNhcmQvZm9vL2Jhci9iYXIvQgotICAgICAgIyAgIC4uLiBldGMuCi0KLSAgICAgICMgSW4gb3JkZXIgdG8gcHJvdmlkZSBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIHRvIGNsaWVudHMsIHdlIGNoZWNrIHdoZXRoZXIKLSAgICAgICMgdGhlIHRhcmdldCBpcyBhbiBleGlzdGluZyBkaXJlY3Rvcnkgb24gdGhlIGRldmljZSBhbmQsIGlmIHNvLCBtb2RpZmllcwotICAgICAgIyB0aGUgdGFyZ2V0IHBhc3NlZCB0byBhZGIgdG8gZW11bGF0ZSB0aGUgYmVoYXZpb3Igb24gMS4wLjM2IGFuZCBhYm92ZS4KLQotICAgICAgIyBOb3RlIHRoYXQgdGhpcyBiZWhhdmlvciBtYXkgaGF2ZSBzdGFydGVkIGJlZm9yZSAxLjAuMzY7IHRoYXQncyBzaW1wbHkKLSAgICAgICMgdGhlIGVhcmxpZXN0IHZlcnNpb24gd2UndmUgY29uZmlybWVkIHRodXMgZmFyLgotCi0gICAgICB0cnk6Ci0gICAgICAgIHNlbGYuU2hlbGwoJ3Rlc3QgLWQgJXMnICUgcmVtb3RlLCB0aW1lb3V0PXRpbWVvdXQsIHJldHJpZXM9cmV0cmllcykKLSAgICAgICAgcmVtb3RlID0gcG9zaXhwYXRoLmpvaW4ocmVtb3RlLCBwb3NpeHBhdGguYmFzZW5hbWUobG9jYWwpKQotICAgICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3I6Ci0gICAgICAgICMgVGhlIHRhcmdldCBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCBvbiB0aGUgZGV2aWNlLCBzbyB3ZSBjYW4gdXNlIGl0Ci0gICAgICAgICMgd2l0aG91dCBtb2RpZmljYXRpb24uCi0gICAgICAgIHBhc3MKLQotICAgIHNlbGYuX1J1bkRldmljZUFkYkNtZChbJ3B1c2gnLCBsb2NhbCwgcmVtb3RlXSwgdGltZW91dCwgcmV0cmllcykKLQotICBkZWYgUHVsbChzZWxmLCByZW1vdGUsIGxvY2FsLCB0aW1lb3V0PTYwICogNSwgcmV0cmllcz1ERUZBVUxUX1JFVFJJRVMpOgotICAgICIiIlB1bGxzIGEgZmlsZSBmcm9tIHRoZSBkZXZpY2UgdG8gdGhlIGhvc3QuCi0KLSAgICBBcmdzOgotICAgICAgcmVtb3RlOiBQYXRoIG9uIHRoZSBkZXZpY2UgZmlsZXN5c3RlbS4KLSAgICAgIGxvY2FsOiBQYXRoIG9uIHRoZSBob3N0IGZpbGVzeXN0ZW0uCi0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotICAgICIiIgotICAgIGNtZCA9IFsncHVsbCcsIHJlbW90ZSwgbG9jYWxdCi0gICAgc2VsZi5fUnVuRGV2aWNlQWRiQ21kKGNtZCwgdGltZW91dCwgcmV0cmllcykKLSAgICB0cnk6Ci0gICAgICBWZXJpZnlMb2NhbEZpbGVFeGlzdHMobG9jYWwpCi0gICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICBjbWQsCi0gICAgICAgICAgJ0ZpbGUgcHVsbGVkIGZyb20gdGhlIGRldmljZSBkaWQgbm90IGFycml2ZSBvbiB0aGUgaG9zdDogJXMnICUgbG9jYWwsCi0gICAgICAgICAgZGV2aWNlX3NlcmlhbD1zdHIoc2VsZikpCi0KLSAgZGVmIFNoZWxsKHNlbGYsIGNvbW1hbmQsIGV4cGVjdF9zdGF0dXM9MCwgdGltZW91dD1ERUZBVUxUX1RJTUVPVVQsCi0gICAgICAgICAgICByZXRyaWVzPURFRkFVTFRfUkVUUklFUyk6Ci0gICAgIiIiUnVucyBhIHNoZWxsIGNvbW1hbmQgb24gdGhlIGRldmljZS4KLQotICAgIEFyZ3M6Ci0gICAgICBjb21tYW5kOiBBIHN0cmluZyB3aXRoIHRoZSBzaGVsbCBjb21tYW5kIHRvIHJ1bi4KLSAgICAgIGV4cGVjdF9zdGF0dXM6IChvcHRpb25hbCkgQ2hlY2sgdGhhdCB0aGUgY29tbWFuZCdzIGV4aXQgc3RhdHVzIG1hdGNoZXMKLSAgICAgICAgdGhpcyB2YWx1ZS4gRGVmYXVsdCBpcyAwLiBJZiBzZXQgdG8gTm9uZSB0aGUgdGVzdCBpcyBza2lwcGVkLgotICAgICAgdGltZW91dDogKG9wdGlvbmFsKSBUaW1lb3V0IHBlciB0cnkgaW4gc2Vjb25kcy4KLSAgICAgIHJldHJpZXM6IChvcHRpb25hbCkgTnVtYmVyIG9mIHJldHJpZXMgdG8gYXR0ZW1wdC4KLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgb3V0cHV0IG9mIHRoZSBzaGVsbCBjb21tYW5kIGFzIGEgc3RyaW5nLgotCi0gICAgUmFpc2VzOgotICAgICAgZGV2aWNlX2Vycm9ycy5BZGJDb21tYW5kRmFpbGVkRXJyb3I6IElmIHRoZSBleGl0IHN0YXR1cyBkb2Vzbid0IG1hdGNoCi0gICAgICAgIHxleHBlY3Rfc3RhdHVzfC4KLSAgICAiIiIKLSAgICBpZiBleHBlY3Rfc3RhdHVzIGlzIE5vbmU6Ci0gICAgICBhcmdzID0gWydzaGVsbCcsIGNvbW1hbmRdCi0gICAgZWxzZToKLSAgICAgIGFyZ3MgPSBbJ3NoZWxsJywgJyggJXMgKTtlY2hvICUlJD8nICUgY29tbWFuZC5yc3RyaXAoKV0KLSAgICBvdXRwdXQgPSBzZWxmLl9SdW5EZXZpY2VBZGJDbWQoYXJncywgdGltZW91dCwgcmV0cmllcywgY2hlY2tfZXJyb3I9RmFsc2UpCi0gICAgaWYgZXhwZWN0X3N0YXR1cyBpcyBub3QgTm9uZToKLSAgICAgIG91dHB1dF9lbmQgPSBvdXRwdXQucmZpbmQoJyUnKQotICAgICAgaWYgb3V0cHV0X2VuZCA8IDA6Ci0gICAgICAgICMgY2F1c2VzIHRoZSBzdGF0dXMgc3RyaW5nIHRvIGJlY29tZSBlbXB0eSBhbmQgcmFpc2UgYSBWYWx1ZUVycm9yCi0gICAgICAgIG91dHB1dF9lbmQgPSBsZW4ob3V0cHV0KQotCi0gICAgICB0cnk6Ci0gICAgICAgIHN0YXR1cyA9IGludChvdXRwdXRbb3V0cHV0X2VuZCArIDE6XSkKLSAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICBsb2dnZXIud2FybmluZygnZXhpdCBzdGF0dXMgb2Ygc2hlbGwgY29tbWFuZCAlciBtaXNzaW5nLicsIGNvbW1hbmQpCi0gICAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3IoCi0gICAgICAgICAgICBjb21tYW5kLCBvdXRwdXQsIHN0YXR1cz1Ob25lLCBkZXZpY2Vfc2VyaWFsPXNlbGYuX2RldmljZV9zZXJpYWwpCi0gICAgICBvdXRwdXQgPSBvdXRwdXRbOm91dHB1dF9lbmRdCi0gICAgICBpZiBzdGF0dXMgIT0gZXhwZWN0X3N0YXR1czoKLSAgICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5BZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICAgIGNvbW1hbmQsIG91dHB1dCwgc3RhdHVzPXN0YXR1cywgZGV2aWNlX3NlcmlhbD1zZWxmLl9kZXZpY2Vfc2VyaWFsKQotICAgIHJldHVybiBvdXRwdXQKLQotICBkZWYgSXRlclNoZWxsKHNlbGYsIGNvbW1hbmQsIHRpbWVvdXQpOgotICAgICIiIlJ1bnMgYSBzaGVsbCBjb21tYW5kIGFuZCByZXR1cm5zIGFuIGl0ZXJhdG9yIG92ZXIgaXRzIG91dHB1dCBsaW5lcy4KLQotICAgIEFyZ3M6Ci0gICAgICBjb21tYW5kOiBBIHN0cmluZyB3aXRoIHRoZSBzaGVsbCBjb21tYW5kIHRvIHJ1bi4KLSAgICAgIHRpbWVvdXQ6IFRpbWVvdXQgaW4gc2Vjb25kcy4KLQotICAgIFlpZWxkczoKLSAgICAgIFRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgbGluZSBieSBsaW5lLgotICAgICIiIgotICAgIGFyZ3MgPSBbJ3NoZWxsJywgY29tbWFuZF0KLSAgICByZXR1cm4gY21kX2hlbHBlci5JdGVyQ21kT3V0cHV0TGluZXMoCi0gICAgICBzZWxmLl9CdWlsZEFkYkNtZChhcmdzLCBzZWxmLl9kZXZpY2Vfc2VyaWFsKSwgdGltZW91dD10aW1lb3V0LAotICAgICAgZW52PXNlbGYuX0FEQl9FTlYpCi0KLSAgZGVmIExzKHNlbGYsIHBhdGgsIHRpbWVvdXQ9REVGQVVMVF9USU1FT1VULCByZXRyaWVzPURFRkFVTFRfUkVUUklFUyk6Ci0gICAgIiIiTGlzdCB0aGUgY29udGVudHMgb2YgYSBkaXJlY3Rvcnkgb24gdGhlIGRldmljZS4KLQotICAgIEFyZ3M6Ci0gICAgICBwYXRoOiBQYXRoIG9uIHRoZSBkZXZpY2UgZmlsZXN5c3RlbS4KLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBsaXN0IG9mIHBhaXJzIChmaWxlbmFtZSwgc3RhdCkgZm9yIGVhY2ggZmlsZSBmb3VuZCBpbiB0aGUgZGlyZWN0b3J5LAotICAgICAgd2hlcmUgdGhlIHN0YXQgb2JqZWN0IGhhcyB0aGUgcHJvcGVydGllczogc3RfbW9kZSwgc3Rfc2l6ZSwgYW5kIHN0X3RpbWUuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBBZGJDb21tYW5kRmFpbGVkRXJyb3IgaWYgfHBhdGh8IGRvZXMgbm90IHNwZWNpZnkgYSB2YWxpZCBhbmQgYWNjZXNzaWJsZQotICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgZGV2aWNlLCBvciB0aGUgb3V0cHV0IG9mICJhZGIgbHMiIGNvbW1hbmQgaXMgbGVzcwotICAgICAgICAgIHRoYW4gZm91ciBjb2x1bW5zCi0gICAgIiIiCi0gICAgZGVmIFBhcnNlTGluZShsaW5lLCBjbWQpOgotICAgICAgY29scyA9IGxpbmUuc3BsaXQoTm9uZSwgMykKLSAgICAgIGlmIGxlbihjb2xzKSA8IDQ6Ci0gICAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAgICAgY21kLCBsaW5lLCAidGhlIG91dHB1dCBzaG91bGQgYmUgNCBjb2x1bW5zLCBidXQgaXMgb25seSAlZCBjb2x1bW5zIgotICAgICAgICAgICAgJSBsZW4oY29scyksIGRldmljZV9zZXJpYWw9c2VsZi5fZGV2aWNlX3NlcmlhbCkKLSAgICAgIGZpbGVuYW1lID0gY29scy5wb3AoKQotICAgICAgc3RhdCA9IERldmljZVN0YXQoKltpbnQobnVtLCBiYXNlPTE2KSBmb3IgbnVtIGluIGNvbHNdKQotICAgICAgcmV0dXJuIChmaWxlbmFtZSwgc3RhdCkKLQotICAgIGNtZCA9IFsnbHMnLCBwYXRoXQotICAgIGxpbmVzID0gc2VsZi5fUnVuRGV2aWNlQWRiQ21kKAotICAgICAgICBjbWQsIHRpbWVvdXQ9dGltZW91dCwgcmV0cmllcz1yZXRyaWVzKS5zcGxpdGxpbmVzKCkKLSAgICBpZiBsaW5lczoKLSAgICAgIHJldHVybiBbUGFyc2VMaW5lKGxpbmUsIGNtZCkgZm9yIGxpbmUgaW4gbGluZXNdCi0gICAgZWxzZToKLSAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAgIGNtZCwgJ3BhdGggZG9lcyBub3Qgc3BlY2lmeSBhbiBhY2Nlc3NpYmxlIGRpcmVjdG9yeSBpbiB0aGUgZGV2aWNlJywKLSAgICAgICAgICBkZXZpY2Vfc2VyaWFsPXNlbGYuX2RldmljZV9zZXJpYWwpCi0KLSAgZGVmIExvZ2NhdChzZWxmLCBjbGVhcj1GYWxzZSwgZHVtcD1GYWxzZSwgZmlsdGVyX3NwZWNzPU5vbmUsCi0gICAgICAgICAgICAgbG9nY2F0X2Zvcm1hdD1Ob25lLCByaW5nX2J1ZmZlcj1Ob25lLCBpdGVyX3RpbWVvdXQ9Tm9uZSwKLSAgICAgICAgICAgICB0aW1lb3V0PU5vbmUsIHJldHJpZXM9REVGQVVMVF9SRVRSSUVTKToKLSAgICAiIiJHZXQgYW4gaXRlcmFibGUgb3ZlciB0aGUgbG9nY2F0IG91dHB1dC4KLQotICAgIEFyZ3M6Ci0gICAgICBjbGVhcjogSWYgdHJ1ZSwgY2xlYXIgdGhlIGxvZ2NhdC4KLSAgICAgIGR1bXA6IElmIHRydWUsIGR1bXAgdGhlIGN1cnJlbnQgbG9nY2F0IGNvbnRlbnRzLgotICAgICAgZmlsdGVyX3NwZWNzOiBJZiBzZXQsIGEgbGlzdCBvZiBzcGVjcyB0byBmaWx0ZXIgdGhlIGxvZ2NhdC4KLSAgICAgIGxvZ2NhdF9mb3JtYXQ6IElmIHNldCwgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgbG9nY2F0IHNob3VsZCBiZSBvdXRwdXQuCi0gICAgICAgIE9wdGlvbnMgaW5jbHVkZSAiYnJpZWYiLCAicHJvY2VzcyIsICJ0YWciLCAidGhyZWFkIiwgInJhdyIsICJ0aW1lIiwKLSAgICAgICAgInRocmVhZHRpbWUiLCBhbmQgImxvbmciCi0gICAgICByaW5nX2J1ZmZlcjogSWYgc2V0LCBhIGxpc3Qgb2YgYWx0ZXJuYXRlIHJpbmcgYnVmZmVycyB0byByZXF1ZXN0LgotICAgICAgICBPcHRpb25zIGluY2x1ZGUgIm1haW4iLCAic3lzdGVtIiwgInJhZGlvIiwgImV2ZW50cyIsICJjcmFzaCIgb3IgImFsbCIuCi0gICAgICAgIFRoZSBkZWZhdWx0IGlzIGVxdWl2YWxlbnQgdG8gWyJtYWluIiwgInN5c3RlbSIsICJjcmFzaCJdLgotICAgICAgaXRlcl90aW1lb3V0OiBJZiBzZXQgYW5kIG5laXRoZXIgY2xlYXIgbm9yIGR1bXAgaXMgc2V0LCB0aGUgbnVtYmVyIG9mCi0gICAgICAgIHNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIGl0ZXJhdGlvbnMuIElmIG5vIGxpbmUgaXMgZm91bmQgYmVmb3JlIHRoZQotICAgICAgICBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBlbGFwc2VzLCB0aGUgaXRlcmFibGUgd2lsbCB5aWVsZCBOb25lLgotICAgICAgdGltZW91dDogKG9wdGlvbmFsKSBJZiBzZXQsIHRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLiBJZiBjbGVhciBvciBkdW1wCi0gICAgICAgIGlzIHNldCwgZGVmYXVsdHMgdG8gREVGQVVMVF9USU1FT1VULgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBJZiBjbGVhciBvciBkdW1wIGlzIHNldCwgdGhlIG51bWJlciBvZiByZXRyaWVzIHRvCi0gICAgICAgIGF0dGVtcHQuIE90aGVyd2lzZSwgZG9lcyBub3RoaW5nLgotCi0gICAgWWllbGRzOgotICAgICAgbG9nY2F0IG91dHB1dCBsaW5lIGJ5IGxpbmUuCi0gICAgIiIiCi0gICAgY21kID0gWydsb2djYXQnXQotICAgIHVzZV9pdGVyID0gVHJ1ZQotICAgIGlmIGNsZWFyOgotICAgICAgY21kLmFwcGVuZCgnLWMnKQotICAgICAgdXNlX2l0ZXIgPSBGYWxzZQotICAgIGlmIGR1bXA6Ci0gICAgICBjbWQuYXBwZW5kKCctZCcpCi0gICAgICB1c2VfaXRlciA9IEZhbHNlCi0gICAgaWYgbG9nY2F0X2Zvcm1hdDoKLSAgICAgIGNtZC5leHRlbmQoWyctdicsIGxvZ2NhdF9mb3JtYXRdKQotICAgIGlmIHJpbmdfYnVmZmVyOgotICAgICAgZm9yIGJ1ZmZlcl9uYW1lIGluIHJpbmdfYnVmZmVyOgotICAgICAgICBjbWQuZXh0ZW5kKFsnLWInLCBidWZmZXJfbmFtZV0pCi0gICAgaWYgZmlsdGVyX3NwZWNzOgotICAgICAgY21kLmV4dGVuZChmaWx0ZXJfc3BlY3MpCi0KLSAgICBpZiB1c2VfaXRlcjoKLSAgICAgIHJldHVybiBzZWxmLl9JdGVyUnVuRGV2aWNlQWRiQ21kKGNtZCwgaXRlcl90aW1lb3V0LCB0aW1lb3V0KQotICAgIGVsc2U6Ci0gICAgICB0aW1lb3V0ID0gdGltZW91dCBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGVsc2UgREVGQVVMVF9USU1FT1VUCi0gICAgICByZXR1cm4gc2VsZi5fUnVuRGV2aWNlQWRiQ21kKGNtZCwgdGltZW91dCwgcmV0cmllcykuc3BsaXRsaW5lcygpCi0KLSAgZGVmIEZvcndhcmQoc2VsZiwgbG9jYWwsIHJlbW90ZSwgYWxsb3dfcmViaW5kPUZhbHNlLAotICAgICAgICAgICAgICB0aW1lb3V0PURFRkFVTFRfVElNRU9VVCwgcmV0cmllcz1ERUZBVUxUX1JFVFJJRVMpOgotICAgICIiIkZvcndhcmQgc29ja2V0IGNvbm5lY3Rpb25zIGZyb20gdGhlIGxvY2FsIHNvY2tldCB0byB0aGUgcmVtb3RlIHNvY2tldC4KLQotICAgIFNvY2tldHMgYXJlIHNwZWNpZmllZCBieSBvbmUgb2Y6Ci0gICAgICB0Y3A6PHBvcnQ+Ci0gICAgICBsb2NhbGFic3RyYWN0Ojx1bml4IGRvbWFpbiBzb2NrZXQgbmFtZT4KLSAgICAgIGxvY2FscmVzZXJ2ZWQ6PHVuaXggZG9tYWluIHNvY2tldCBuYW1lPgotICAgICAgbG9jYWxmaWxlc3lzdGVtOjx1bml4IGRvbWFpbiBzb2NrZXQgbmFtZT4KLSAgICAgIGRldjo8Y2hhcmFjdGVyIGRldmljZSBuYW1lPgotICAgICAgamR3cDo8cHJvY2VzcyBwaWQ+IChyZW1vdGUgb25seSkKLQotICAgIEFyZ3M6Ci0gICAgICBsb2NhbDogVGhlIGhvc3Qgc29ja2V0LgotICAgICAgcmVtb3RlOiBUaGUgZGV2aWNlIHNvY2tldC4KLSAgICAgIGFsbG93X3JlYmluZDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhZGIgbWF5IHJlYmluZCBhIGxvY2FsIHNvY2tldDsKLSAgICAgICAgb3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCwgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBpZiB0aGUgbG9jYWwgc29ja2V0IGlzCi0gICAgICAgIGFscmVhZHkgYmVpbmcgZm9yd2FyZGVkLgotICAgICAgdGltZW91dDogKG9wdGlvbmFsKSBUaW1lb3V0IHBlciB0cnkgaW4gc2Vjb25kcy4KLSAgICAgIHJldHJpZXM6IChvcHRpb25hbCkgTnVtYmVyIG9mIHJldHJpZXMgdG8gYXR0ZW1wdC4KLSAgICAiIiIKLSAgICBjbWQgPSBbJ2ZvcndhcmQnXQotICAgIGlmIG5vdCBhbGxvd19yZWJpbmQ6Ci0gICAgICBjbWQuYXBwZW5kKCctLW5vLXJlYmluZCcpCi0gICAgY21kLmV4dGVuZChbc3RyKGxvY2FsKSwgc3RyKHJlbW90ZSldKQotICAgIG91dHB1dCA9IHNlbGYuX1J1bkRldmljZUFkYkNtZChjbWQsIHRpbWVvdXQsIHJldHJpZXMpLnN0cmlwKCkKLSAgICBpZiBvdXRwdXQ6Ci0gICAgICBsb2dnZXIud2FybmluZygnVW5leHBlY3RlZCBvdXRwdXQgZnJvbSAiYWRiIGZvcndhcmQiOiAlcycsIG91dHB1dCkKLQotICBkZWYgRm9yd2FyZFJlbW92ZShzZWxmLCBsb2NhbCwgdGltZW91dD1ERUZBVUxUX1RJTUVPVVQsCi0gICAgICAgICAgICAgICAgICAgIHJldHJpZXM9REVGQVVMVF9SRVRSSUVTKToKLSAgICAiIiJSZW1vdmUgYSBmb3J3YXJkIHNvY2tldCBjb25uZWN0aW9uLgotCi0gICAgQXJnczoKLSAgICAgIGxvY2FsOiBUaGUgaG9zdCBzb2NrZXQuCi0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotICAgICIiIgotICAgIHNlbGYuX1J1bkRldmljZUFkYkNtZChbJ2ZvcndhcmQnLCAnLS1yZW1vdmUnLCBzdHIobG9jYWwpXSwgdGltZW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cmllcykKLQotICBkZWYgRm9yd2FyZExpc3Qoc2VsZiwgdGltZW91dD1ERUZBVUxUX1RJTUVPVVQsIHJldHJpZXM9REVGQVVMVF9SRVRSSUVTKToKLSAgICAiIiJMaXN0IGFsbCBjdXJyZW50bHkgZm9yd2FyZGVkIHNvY2tldCBjb25uZWN0aW9ucy4KLQotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotICAgIFJldHVybnM6Ci0gICAgICBUaGUgb3V0cHV0IG9mIGFkYiBmb3J3YXJkIC0tbGlzdCBhcyBhIHN0cmluZy4KLSAgICAiIiIKLSAgICBpZiAoZGlzdHV0aWxzLnZlcnNpb24uTG9vc2VWZXJzaW9uKHNlbGYuVmVyc2lvbigpKSA+PQotICAgICAgICBkaXN0dXRpbHMudmVyc2lvbi5Mb29zZVZlcnNpb24oJzEuMC4zNicpKToKLSAgICAgICMgU3RhcnRpbmcgaW4gMS4wLjM2LCB0aGlzIGNhbiBvY2Nhc2lvbmFsbHkgZmFpbCB3aXRoIGEgcHJvdG9jb2wgZmF1bHQuCi0gICAgICAjIEFzIHRoaXMgaW50ZXJydXB0cyBhbGwgY29ubmVjdGlvbnMgd2l0aCBhbGwgZGV2aWNlcywgd2UgaW5zdGVhZCBqdXN0Ci0gICAgICAjIHJldHVybiBhbiBlbXB0eSBsaXN0LiBUaGlzIG1heSBnaXZlIGNsaWVudHMgYW4gaW5hY2N1cmF0ZSByZXN1bHQsIGJ1dAotICAgICAgIyB0aGF0J3MgdXN1YWxseSBiZXR0ZXIgdGhhbiBjcmFzaGluZyB0aGUgYWRiIHNlcnZlci4KLQotICAgICAgIyBUT0RPKGpidWRvcmljayk6IERldGVybWluZSBhbiBhcHByb3ByaWF0ZSB1cHBlciB2ZXJzaW9uIGJvdW5kIGZvciB0aGlzCi0gICAgICAjIG9uY2UgYi8zMTgxMTc3NSBpcyBmaXhlZC4KLSAgICAgIHJldHVybiAnJwotCi0gICAgcmV0dXJuIHNlbGYuX1J1bkRldmljZUFkYkNtZChbJ2ZvcndhcmQnLCAnLS1saXN0J10sIHRpbWVvdXQsIHJldHJpZXMpCi0KLSAgZGVmIEpEV1Aoc2VsZiwgdGltZW91dD1ERUZBVUxUX1RJTUVPVVQsIHJldHJpZXM9REVGQVVMVF9SRVRSSUVTKToKLSAgICAiIiJMaXN0IG9mIFBJRHMgb2YgcHJvY2Vzc2VzIGhvc3RpbmcgYSBKRFdQIHRyYW5zcG9ydC4KLQotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgbGlzdCBvZiBQSURzIGFzIHN0cmluZ3MuCi0gICAgIiIiCi0gICAgcmV0dXJuIFthLnN0cmlwKCkgZm9yIGEgaW4KLSAgICAgICAgICAgIHNlbGYuX1J1bkRldmljZUFkYkNtZChbJ2pkd3AnXSwgdGltZW91dCwgcmV0cmllcykuc3BsaXQoJ1xuJyldCi0KLSAgZGVmIEluc3RhbGwoc2VsZiwgYXBrX3BhdGgsIGZvcndhcmRfbG9jaz1GYWxzZSwgYWxsb3dfZG93bmdyYWRlPUZhbHNlLAotICAgICAgICAgICAgICByZWluc3RhbGw9RmFsc2UsIHNkX2NhcmQ9RmFsc2UsIHRpbWVvdXQ9NjAgKiAyLAotICAgICAgICAgICAgICByZXRyaWVzPURFRkFVTFRfUkVUUklFUyk6Ci0gICAgIiIiSW5zdGFsbCBhbiBhcGsgb24gdGhlIGRldmljZS4KLQotICAgIEFyZ3M6Ci0gICAgICBhcGtfcGF0aDogSG9zdCBwYXRoIHRvIHRoZSBBUEsgZmlsZS4KLSAgICAgIGZvcndhcmRfbG9jazogKG9wdGlvbmFsKSBJZiBzZXQgZm9yd2FyZC1sb2NrcyB0aGUgYXBwLgotICAgICAgYWxsb3dfZG93bmdyYWRlOiAob3B0aW9uYWwpIElmIHNldCwgYWxsb3dzIGZvciBkb3duZ3JhZGVzLgotICAgICAgcmVpbnN0YWxsOiAob3B0aW9uYWwpIElmIHNldCByZWluc3RhbGxzIHRoZSBhcHAsIGtlZXBpbmcgaXRzIGRhdGEuCi0gICAgICBzZF9jYXJkOiAob3B0aW9uYWwpIElmIHNldCBpbnN0YWxscyBvbiB0aGUgU0QgY2FyZC4KLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi0gICAgIiIiCi0gICAgVmVyaWZ5TG9jYWxGaWxlRXhpc3RzKGFwa19wYXRoKQotICAgIGNtZCA9IFsnaW5zdGFsbCddCi0gICAgaWYgZm9yd2FyZF9sb2NrOgotICAgICAgY21kLmFwcGVuZCgnLWwnKQotICAgIGlmIHJlaW5zdGFsbDoKLSAgICAgIGNtZC5hcHBlbmQoJy1yJykKLSAgICBpZiBzZF9jYXJkOgotICAgICAgY21kLmFwcGVuZCgnLXMnKQotICAgIGlmIGFsbG93X2Rvd25ncmFkZToKLSAgICAgIGNtZC5hcHBlbmQoJy1kJykKLSAgICBjbWQuYXBwZW5kKGFwa19wYXRoKQotICAgIG91dHB1dCA9IHNlbGYuX1J1bkRldmljZUFkYkNtZChjbWQsIHRpbWVvdXQsIHJldHJpZXMpCi0gICAgaWYgJ1N1Y2Nlc3MnIG5vdCBpbiBvdXRwdXQ6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICBjbWQsIG91dHB1dCwgZGV2aWNlX3NlcmlhbD1zZWxmLl9kZXZpY2Vfc2VyaWFsKQotCi0gIGRlZiBJbnN0YWxsTXVsdGlwbGUoc2VsZiwgYXBrX3BhdGhzLCBmb3J3YXJkX2xvY2s9RmFsc2UsIHJlaW5zdGFsbD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICBzZF9jYXJkPUZhbHNlLCBhbGxvd19kb3duZ3JhZGU9RmFsc2UsIHBhcnRpYWw9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgdGltZW91dD02MCAqIDIsIHJldHJpZXM9REVGQVVMVF9SRVRSSUVTKToKLSAgICAiIiJJbnN0YWxsIGFuIGFwayB3aXRoIHNwbGl0cyBvbiB0aGUgZGV2aWNlLgotCi0gICAgQXJnczoKLSAgICAgIGFwa19wYXRoczogSG9zdCBwYXRoIHRvIHRoZSBBUEsgZmlsZS4KLSAgICAgIGZvcndhcmRfbG9jazogKG9wdGlvbmFsKSBJZiBzZXQgZm9yd2FyZC1sb2NrcyB0aGUgYXBwLgotICAgICAgcmVpbnN0YWxsOiAob3B0aW9uYWwpIElmIHNldCByZWluc3RhbGxzIHRoZSBhcHAsIGtlZXBpbmcgaXRzIGRhdGEuCi0gICAgICBzZF9jYXJkOiAob3B0aW9uYWwpIElmIHNldCBpbnN0YWxscyBvbiB0aGUgU0QgY2FyZC4KLSAgICAgIGFsbG93X2Rvd25ncmFkZTogKG9wdGlvbmFsKSBBbGxvdyB2ZXJzaW9uQ29kZSBkb3duZ3JhZGUuCi0gICAgICBwYXJ0aWFsOiAob3B0aW9uYWwpIFBhY2thZ2UgSUQgaWYgYXBrX3BhdGhzIGRvZXNuJ3QgaW5jbHVkZSBhbGwgLmFwa3MuCi0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotICAgICIiIgotICAgIGZvciBwYXRoIGluIGFwa19wYXRoczoKLSAgICAgIFZlcmlmeUxvY2FsRmlsZUV4aXN0cyhwYXRoKQotICAgIGNtZCA9IFsnaW5zdGFsbC1tdWx0aXBsZSddCi0gICAgaWYgZm9yd2FyZF9sb2NrOgotICAgICAgY21kLmFwcGVuZCgnLWwnKQotICAgIGlmIHJlaW5zdGFsbDoKLSAgICAgIGNtZC5hcHBlbmQoJy1yJykKLSAgICBpZiBzZF9jYXJkOgotICAgICAgY21kLmFwcGVuZCgnLXMnKQotICAgIGlmIGFsbG93X2Rvd25ncmFkZToKLSAgICAgIGNtZC5hcHBlbmQoJy1kJykKLSAgICBpZiBwYXJ0aWFsOgotICAgICAgY21kLmV4dGVuZCgoJy1wJywgcGFydGlhbCkpCi0gICAgY21kLmV4dGVuZChhcGtfcGF0aHMpCi0gICAgb3V0cHV0ID0gc2VsZi5fUnVuRGV2aWNlQWRiQ21kKGNtZCwgdGltZW91dCwgcmV0cmllcykKLSAgICBpZiAnU3VjY2Vzcycgbm90IGluIG91dHB1dDoKLSAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAgIGNtZCwgb3V0cHV0LCBkZXZpY2Vfc2VyaWFsPXNlbGYuX2RldmljZV9zZXJpYWwpCi0KLSAgZGVmIFVuaW5zdGFsbChzZWxmLCBwYWNrYWdlLCBrZWVwX2RhdGE9RmFsc2UsIHRpbWVvdXQ9REVGQVVMVF9USU1FT1VULAotICAgICAgICAgICAgICAgIHJldHJpZXM9REVGQVVMVF9SRVRSSUVTKToKLSAgICAiIiJSZW1vdmUgdGhlIGFwcCB8cGFja2FnZXwgZnJvbSB0aGUgZGV2aWNlLgotCi0gICAgQXJnczoKLSAgICAgIHBhY2thZ2U6IFRoZSBwYWNrYWdlIHRvIHVuaW5zdGFsbC4KLSAgICAgIGtlZXBfZGF0YTogKG9wdGlvbmFsKSBJZiBzZXQga2VlcCB0aGUgZGF0YSBhbmQgY2FjaGUgZGlyZWN0b3JpZXMuCi0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotICAgICIiIgotICAgIGNtZCA9IFsndW5pbnN0YWxsJ10KLSAgICBpZiBrZWVwX2RhdGE6Ci0gICAgICBjbWQuYXBwZW5kKCctaycpCi0gICAgY21kLmFwcGVuZChwYWNrYWdlKQotICAgIG91dHB1dCA9IHNlbGYuX1J1bkRldmljZUFkYkNtZChjbWQsIHRpbWVvdXQsIHJldHJpZXMpCi0gICAgaWYgJ0ZhaWx1cmUnIGluIG91dHB1dCBvciAnRXhjZXB0aW9uJyBpbiBvdXRwdXQ6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICBjbWQsIG91dHB1dCwgZGV2aWNlX3NlcmlhbD1zZWxmLl9kZXZpY2Vfc2VyaWFsKQotCi0gIGRlZiBCYWNrdXAoc2VsZiwgcGF0aCwgcGFja2FnZXM9Tm9uZSwgYXBrPUZhbHNlLCBzaGFyZWQ9RmFsc2UsCi0gICAgICAgICAgICAgbm9zeXN0ZW09VHJ1ZSwgaW5jbHVkZV9hbGw9RmFsc2UsIHRpbWVvdXQ9REVGQVVMVF9USU1FT1VULAotICAgICAgICAgICAgIHJldHJpZXM9REVGQVVMVF9SRVRSSUVTKToKLSAgICAiIiJXcml0ZSBhbiBhcmNoaXZlIG9mIHRoZSBkZXZpY2UncyBkYXRhIHRvIHxwYXRofC4KLQotICAgIEFyZ3M6Ci0gICAgICBwYXRoOiBMb2NhbCBwYXRoIHRvIHN0b3JlIHRoZSBiYWNrdXAgZmlsZS4KLSAgICAgIHBhY2thZ2VzOiBMaXN0IG9mIHRvIHBhY2thZ2VzIHRvIGJlIGJhY2tlZCB1cC4KLSAgICAgIGFwazogKG9wdGlvbmFsKSBJZiBzZXQgaW5jbHVkZSB0aGUgLmFwayBmaWxlcyBpbiB0aGUgYXJjaGl2ZS4KLSAgICAgIHNoYXJlZDogKG9wdGlvbmFsKSBJZiBzZXQgYnVja3VwIHRoZSBkZXZpY2UncyBTRCBjYXJkLgotICAgICAgbm9zeXN0ZW06IChvcHRpb25hbCkgSWYgc2V0IGV4Y2x1ZGUgc3lzdGVtIGFwcGxpY2F0aW9ucy4KLSAgICAgIGluY2x1ZGVfYWxsOiAob3B0aW9uYWwpIElmIHNldCBiYWNrIHVwIGFsbCBpbnN0YWxsZWQgYXBwbGljYXRpb25zIGFuZAotICAgICAgICB8cGFja2FnZXN8IGlzIG9wdGlvbmFsLgotICAgICAgdGltZW91dDogKG9wdGlvbmFsKSBUaW1lb3V0IHBlciB0cnkgaW4gc2Vjb25kcy4KLSAgICAgIHJldHJpZXM6IChvcHRpb25hbCkgTnVtYmVyIG9mIHJldHJpZXMgdG8gYXR0ZW1wdC4KLSAgICAiIiIKLSAgICBjbWQgPSBbJ2JhY2t1cCcsICctZicsIHBhdGhdCi0gICAgaWYgYXBrOgotICAgICAgY21kLmFwcGVuZCgnLWFwaycpCi0gICAgaWYgc2hhcmVkOgotICAgICAgY21kLmFwcGVuZCgnLXNoYXJlZCcpCi0gICAgaWYgbm9zeXN0ZW06Ci0gICAgICBjbWQuYXBwZW5kKCctbm9zeXN0ZW0nKQotICAgIGlmIGluY2x1ZGVfYWxsOgotICAgICAgY21kLmFwcGVuZCgnLWFsbCcpCi0gICAgaWYgcGFja2FnZXM6Ci0gICAgICBjbWQuZXh0ZW5kKHBhY2thZ2VzKQotICAgIGFzc2VydCBib29sKHBhY2thZ2VzKSBeIGJvb2woaW5jbHVkZV9hbGwpLCAoCi0gICAgICAgICdQcm92aWRlIFwncGFja2FnZXNcJyBvciBzZXQgXCdpbmNsdWRlX2FsbFwnIGJ1dCBub3QgYm90aC4nKQotICAgIHJldCA9IHNlbGYuX1J1bkRldmljZUFkYkNtZChjbWQsIHRpbWVvdXQsIHJldHJpZXMpCi0gICAgVmVyaWZ5TG9jYWxGaWxlRXhpc3RzKHBhdGgpCi0gICAgcmV0dXJuIHJldAotCi0gIGRlZiBSZXN0b3JlKHNlbGYsIHBhdGgsIHRpbWVvdXQ9REVGQVVMVF9USU1FT1VULCByZXRyaWVzPURFRkFVTFRfUkVUUklFUyk6Ci0gICAgIiIiUmVzdG9yZSBkZXZpY2UgY29udGVudHMgZnJvbSB0aGUgYmFja3VwIGFyY2hpdmUuCi0KLSAgICBBcmdzOgotICAgICAgcGF0aDogSG9zdCBwYXRoIHRvIHRoZSBiYWNrdXAgYXJjaGl2ZS4KLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi0gICAgIiIiCi0gICAgVmVyaWZ5TG9jYWxGaWxlRXhpc3RzKHBhdGgpCi0gICAgc2VsZi5fUnVuRGV2aWNlQWRiQ21kKFsncmVzdG9yZSddICsgW3BhdGhdLCB0aW1lb3V0LCByZXRyaWVzKQotCi0gIGRlZiBXYWl0Rm9yRGV2aWNlKHNlbGYsIHRpbWVvdXQ9NjAgKiA1LCByZXRyaWVzPURFRkFVTFRfUkVUUklFUyk6Ci0gICAgIiIiQmxvY2sgdW50aWwgdGhlIGRldmljZSBpcyBvbmxpbmUuCi0KLSAgICBBcmdzOgotICAgICAgdGltZW91dDogKG9wdGlvbmFsKSBUaW1lb3V0IHBlciB0cnkgaW4gc2Vjb25kcy4KLSAgICAgIHJldHJpZXM6IChvcHRpb25hbCkgTnVtYmVyIG9mIHJldHJpZXMgdG8gYXR0ZW1wdC4KLSAgICAiIiIKLSAgICBzZWxmLl9SdW5EZXZpY2VBZGJDbWQoWyd3YWl0LWZvci1kZXZpY2UnXSwgdGltZW91dCwgcmV0cmllcykKLQotICBkZWYgR2V0U3RhdGUoc2VsZiwgdGltZW91dD1ERUZBVUxUX1RJTUVPVVQsIHJldHJpZXM9REVGQVVMVF9SRVRSSUVTKToKLSAgICAiIiJHZXQgZGV2aWNlIHN0YXRlLgotCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgT25lIG9mICdvZmZsaW5lJywgJ2Jvb3Rsb2FkZXInLCBvciAnZGV2aWNlJy4KLSAgICAiIiIKLSAgICAjIFRPRE8oamJ1ZG9yaWNrKTogUmV2ZXJ0IHRvIHVzaW5nIGdldC1zdGF0ZSBvbmNlIGl0IGRvZXNuJ3QgY2F1c2UgYQotICAgICMgYSBwcm90b2NvbCBmYXVsdC4KLSAgICAjIHJldHVybiBzZWxmLl9SdW5EZXZpY2VBZGJDbWQoWydnZXQtc3RhdGUnXSwgdGltZW91dCwgcmV0cmllcykuc3RyaXAoKQotCi0gICAgbGluZXMgPSBzZWxmLl9SYXdEZXZpY2VzKHRpbWVvdXQ9dGltZW91dCwgcmV0cmllcz1yZXRyaWVzKQotICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgaWYgbGVuKGxpbmUpID49IDIgYW5kIGxpbmVbMF0gPT0gc2VsZi5fZGV2aWNlX3NlcmlhbDoKLSAgICAgICAgcmV0dXJuIGxpbmVbMV0KLSAgICByZXR1cm4gJ29mZmxpbmUnCi0KLSAgZGVmIEdldERldlBhdGgoc2VsZiwgdGltZW91dD1ERUZBVUxUX1RJTUVPVVQsIHJldHJpZXM9REVGQVVMVF9SRVRSSUVTKToKLSAgICAiIiJHZXRzIHRoZSBkZXZpY2UgcGF0aC4KLQotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBkZXZpY2UgcGF0aCAoZS5nLiB1c2I6My00KQotICAgICIiIgotICAgIHJldHVybiBzZWxmLl9SdW5EZXZpY2VBZGJDbWQoWydnZXQtZGV2cGF0aCddLCB0aW1lb3V0LCByZXRyaWVzKQotCi0gIGRlZiBSZW1vdW50KHNlbGYsIHRpbWVvdXQ9REVGQVVMVF9USU1FT1VULCByZXRyaWVzPURFRkFVTFRfUkVUUklFUyk6Ci0gICAgIiIiUmVtb3VudHMgdGhlIC9zeXN0ZW0gcGFydGl0aW9uIG9uIHRoZSBkZXZpY2UgcmVhZC13cml0ZS4iIiIKLSAgICBzZWxmLl9SdW5EZXZpY2VBZGJDbWQoWydyZW1vdW50J10sIHRpbWVvdXQsIHJldHJpZXMpCi0KLSAgZGVmIFJlYm9vdChzZWxmLCB0b19ib290bG9hZGVyPUZhbHNlLCB0aW1lb3V0PTYwICogNSwKLSAgICAgICAgICAgICByZXRyaWVzPURFRkFVTFRfUkVUUklFUyk6Ci0gICAgIiIiUmVib290cyB0aGUgZGV2aWNlLgotCi0gICAgQXJnczoKLSAgICAgIHRvX2Jvb3Rsb2FkZXI6IChvcHRpb25hbCkgSWYgc2V0IHJlYm9vdHMgdG8gdGhlIGJvb3Rsb2FkZXIuCi0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotICAgICIiIgotICAgIGlmIHRvX2Jvb3Rsb2FkZXI6Ci0gICAgICBjbWQgPSBbJ3JlYm9vdC1ib290bG9hZGVyJ10KLSAgICBlbHNlOgotICAgICAgY21kID0gWydyZWJvb3QnXQotICAgIHNlbGYuX1J1bkRldmljZUFkYkNtZChjbWQsIHRpbWVvdXQsIHJldHJpZXMpCi0KLSAgZGVmIFJvb3Qoc2VsZiwgdGltZW91dD1ERUZBVUxUX1RJTUVPVVQsIHJldHJpZXM9REVGQVVMVF9SRVRSSUVTKToKLSAgICAiIiJSZXN0YXJ0cyB0aGUgYWRiZCBkYWVtb24gd2l0aCByb290IHBlcm1pc3Npb25zLCBpZiBwb3NzaWJsZS4KLQotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotICAgICIiIgotICAgIG91dHB1dCA9IHNlbGYuX1J1bkRldmljZUFkYkNtZChbJ3Jvb3QnXSwgdGltZW91dCwgcmV0cmllcykKLSAgICBpZiAnY2Fubm90JyBpbiBvdXRwdXQ6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICBbJ3Jvb3QnXSwgb3V0cHV0LCBkZXZpY2Vfc2VyaWFsPXNlbGYuX2RldmljZV9zZXJpYWwpCi0KLSAgZGVmIEVtdShzZWxmLCBjbWQsIHRpbWVvdXQ9REVGQVVMVF9USU1FT1VULAotICAgICAgICAgICAgICAgcmV0cmllcz1ERUZBVUxUX1JFVFJJRVMpOgotICAgICIiIlJ1bnMgYW4gZW11bGF0b3IgY29uc29sZSBjb21tYW5kLgotCi0gICAgU2VlIGh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vdG9vbHMvZGV2aWNlcy9lbXVsYXRvci5odG1sI2NvbnNvbGUKLQotICAgIEFyZ3M6Ci0gICAgICBjbWQ6IFRoZSBjb21tYW5kIHRvIHJ1biBvbiB0aGUgZW11bGF0b3IgY29uc29sZS4KLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIG91dHB1dCBvZiB0aGUgZW11bGF0b3IgY29uc29sZSBjb21tYW5kLgotICAgICIiIgotICAgIGlmIGlzaW5zdGFuY2UoY21kLCBiYXNlc3RyaW5nKToKLSAgICAgIGNtZCA9IFtjbWRdCi0gICAgcmV0dXJuIHNlbGYuX1J1bkRldmljZUFkYkNtZChbJ2VtdSddICsgY21kLCB0aW1lb3V0LCByZXRyaWVzKQotCi0gIGRlZiBEaXNhYmxlVmVyaXR5KHNlbGYsIHRpbWVvdXQ9REVGQVVMVF9USU1FT1VULCByZXRyaWVzPURFRkFVTFRfUkVUUklFUyk6Ci0gICAgIiIiRGlzYWJsZSBNYXJzaG1hbGxvdydzIFZlcml0eSBzZWN1cml0eSBmZWF0dXJlIiIiCi0gICAgb3V0cHV0ID0gc2VsZi5fUnVuRGV2aWNlQWRiQ21kKFsnZGlzYWJsZS12ZXJpdHknXSwgdGltZW91dCwgcmV0cmllcykKLSAgICBpZiBvdXRwdXQgYW5kIG5vdCBfVkVSSVRZX0RJU0FCTEVfUkUuc2VhcmNoKG91dHB1dCk6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICBbJ2Rpc2FibGUtdmVyaXR5J10sIG91dHB1dCwgZGV2aWNlX3NlcmlhbD1zZWxmLl9kZXZpY2Vfc2VyaWFsKQotCi0gIGRlZiBFbmFibGVWZXJpdHkoc2VsZiwgdGltZW91dD1ERUZBVUxUX1RJTUVPVVQsIHJldHJpZXM9REVGQVVMVF9SRVRSSUVTKToKLSAgICAiIiJFbmFibGUgTWFyc2htYWxsb3cncyBWZXJpdHkgc2VjdXJpdHkgZmVhdHVyZSIiIgotICAgIG91dHB1dCA9IHNlbGYuX1J1bkRldmljZUFkYkNtZChbJ2VuYWJsZS12ZXJpdHknXSwgdGltZW91dCwgcmV0cmllcykKLSAgICBpZiBvdXRwdXQgYW5kIG5vdCBfVkVSSVRZX0VOQUJMRV9SRS5zZWFyY2gob3V0cHV0KToKLSAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAgIFsnZW5hYmxlLXZlcml0eSddLCBvdXRwdXQsIGRldmljZV9zZXJpYWw9c2VsZi5fZGV2aWNlX3NlcmlhbCkKLQotICBAcHJvcGVydHkKLSAgZGVmIGlzX2VtdWxhdG9yKHNlbGYpOgotICAgIHJldHVybiBfRU1VTEFUT1JfUkUubWF0Y2goc2VsZi5fZGV2aWNlX3NlcmlhbCkKLQotICBAcHJvcGVydHkKLSAgZGVmIGlzX3JlYWR5KHNlbGYpOgotICAgIHRyeToKLSAgICAgIHJldHVybiBzZWxmLkdldFN0YXRlKCkgPT0gX1JFQURZX1NUQVRFCi0gICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yOgotICAgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9hZGJfd3JhcHBlcl9kZXZpY2V0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvYWRiX3dyYXBwZXJfZGV2aWNldGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYjBjY2IyNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9hZGJfd3JhcHBlcl9kZXZpY2V0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlRlc3RzIGZvciB0aGUgQWRiV3JhcHBlciBjbGFzcy4iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCB0aW1lCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdGVzdF9jYXNlCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9lcnJvcnMKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IGFkYl93cmFwcGVyCi0KLQotY2xhc3MgVGVzdEFkYldyYXBwZXIoZGV2aWNlX3Rlc3RfY2FzZS5EZXZpY2VUZXN0Q2FzZSk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHN1cGVyKFRlc3RBZGJXcmFwcGVyLCBzZWxmKS5zZXRVcCgpCi0gICAgc2VsZi5fYWRiID0gYWRiX3dyYXBwZXIuQWRiV3JhcHBlcihzZWxmLnNlcmlhbCkKLSAgICBzZWxmLl9hZGIuV2FpdEZvckRldmljZSgpCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgX01ha2VUZW1wRmlsZShjb250ZW50cyk6Ci0gICAgIiIiTWFrZSBhIHRlbXBvcmFyeSBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnRzLgotCi0gICAgQXJnczoKLSAgICAgIGNvbnRlbnRzOiBzdHJpbmcgdG8gd3JpdGUgdG8gdGhlIHRlbXBvcmFyeSBmaWxlLgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlLgotICAgICIiIgotICAgIGZpLCBwYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpCi0gICAgd2l0aCBvcy5mZG9wZW4oZmksICd3YicpIGFzIGY6Ci0gICAgICBmLndyaXRlKGNvbnRlbnRzKQotICAgIHJldHVybiBwYXRoCi0KLSAgZGVmIHRlc3REZXZpY2VVbnJlYWNoYWJsZShzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuRGV2aWNlVW5yZWFjaGFibGVFcnJvcik6Ci0gICAgICBiYWRfYWRiID0gYWRiX3dyYXBwZXIuQWRiV3JhcHBlcignZGV2aWNlX2dvbmUnKQotICAgICAgYmFkX2FkYi5TaGVsbCgnZWNobyB0ZXN0JykKLQotICBkZWYgdGVzdFNoZWxsKHNlbGYpOgotICAgIG91dHB1dCA9IHNlbGYuX2FkYi5TaGVsbCgnZWNobyB0ZXN0JywgZXhwZWN0X3N0YXR1cz0wKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnN0cmlwKCksICd0ZXN0JykKLSAgICBvdXRwdXQgPSBzZWxmLl9hZGIuU2hlbGwoJ2VjaG8gdGVzdCcpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuc3RyaXAoKSwgJ3Rlc3QnKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5BZGJDb21tYW5kRmFpbGVkRXJyb3IpOgotICAgICAgc2VsZi5fYWRiLlNoZWxsKCdlY2hvIHRlc3QnLCBleHBlY3Rfc3RhdHVzPTEpCi0KLSAgZGVmIHRlc3RQZXJzaXN0ZW50U2hlbGwoc2VsZik6Ci0gICAgIyBXZSBuZWVkIHRvIGFjY2VzcyB0aGUgZGV2aWNlIHNlcmlhbCBudW1iZXIgaGVyZSBpbiBvcmRlcgotICAgICMgdG8gY3JlYXRlIHRoZSBwZXJzaXN0ZW50IHNoZWxsLgotICAgIHNlcmlhbCA9IHNlbGYuX2FkYi5HZXREZXZpY2VTZXJpYWwoKSAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0gICAgd2l0aCBzZWxmLl9hZGIuUGVyc2lzdGVudFNoZWxsKHNlcmlhbCkgYXMgcHNoZWxsOgotICAgICAgKHJlczEsIGNvZGUxKSA9IHBzaGVsbC5SdW5Db21tYW5kKCdlY2hvIFRFU1QnKQotICAgICAgKHJlczIsIGNvZGUyKSA9IHBzaGVsbC5SdW5Db21tYW5kKCdlY2hvIFRFU1QyJykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlczEpLCAxKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMxWzBdLCAnVEVTVCcpCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKHJlczJbLTFdLCAnVEVTVDInKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlMSwgMCkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZTIsIDApCi0KLSAgZGVmIHRlc3RQdXNoTHNQdWxsKHNlbGYpOgotICAgIHBhdGggPSBzZWxmLl9NYWtlVGVtcEZpbGUoJ2ZvbycpCi0gICAgZGV2aWNlX3BhdGggPSAnL2RhdGEvbG9jYWwvdG1wL3Rlc3RmaWxlLnR4dCcKLSAgICBsb2NhbF90bXBkaXIgPSBvcy5wYXRoLmRpcm5hbWUocGF0aCkKLSAgICBzZWxmLl9hZGIuUHVzaChwYXRoLCBkZXZpY2VfcGF0aCkKLSAgICBmaWxlcyA9IGRpY3Qoc2VsZi5fYWRiLkxzKCcvZGF0YS9sb2NhbC90bXAnKSkKLSAgICBzZWxmLmFzc2VydFRydWUoJ3Rlc3RmaWxlLnR4dCcgaW4gZmlsZXMpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMywgZmlsZXNbJ3Rlc3RmaWxlLnR4dCddLnN0X3NpemUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9hZGIuU2hlbGwoJ2NhdCAlcycgJSBkZXZpY2VfcGF0aCksICdmb28nKQotICAgIHNlbGYuX2FkYi5QdWxsKGRldmljZV9wYXRoLCBsb2NhbF90bXBkaXIpCi0gICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihsb2NhbF90bXBkaXIsICd0ZXN0ZmlsZS50eHQnKSwgJ3InKSBhcyBmOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ2ZvbycpCi0KLSAgZGVmIHRlc3RJbnN0YWxsKHNlbGYpOgotICAgIHBhdGggPSBzZWxmLl9NYWtlVGVtcEZpbGUoJ2ZvbycpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICBzZWxmLl9hZGIuSW5zdGFsbChwYXRoKQotCi0gIGRlZiB0ZXN0Rm9yd2FyZChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yKToKLSAgICAgIHNlbGYuX2FkYi5Gb3J3YXJkKDAsIDApCi0KLSAgZGVmIHRlc3RVbmluc3RhbGwoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcik6Ci0gICAgICBzZWxmLl9hZGIuVW5pbnN0YWxsKCdzb21lLm5vbmV4aXN0YW50LnBhY2thZ2UnKQotCi0gIGRlZiB0ZXN0UmVib290V2FpdEZvckRldmljZShzZWxmKToKLSAgICBzZWxmLl9hZGIuUmVib290KCkKLSAgICBwcmludCAnd2FpdGluZyBmb3IgZGV2aWNlIHRvIHJlYm9vdC4uLicKLSAgICB3aGlsZSBzZWxmLl9hZGIuR2V0U3RhdGUoKSA9PSAnZGV2aWNlJzoKLSAgICAgIHRpbWUuc2xlZXAoMSkKLSAgICBzZWxmLl9hZGIuV2FpdEZvckRldmljZSgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9hZGIuR2V0U3RhdGUoKSwgJ2RldmljZScpCi0gICAgcHJpbnQgJ3dhaXRpbmcgZm9yIHBhY2thZ2UgbWFuYWdlci4uLicKLSAgICB3aGlsZSBUcnVlOgotICAgICAgdHJ5OgotICAgICAgICBhbmRyb2lkX3BhdGggPSBzZWxmLl9hZGIuU2hlbGwoJ3BtIHBhdGggYW5kcm9pZCcpCi0gICAgICBleGNlcHQgZGV2aWNlX2Vycm9ycy5BZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcjoKLSAgICAgICAgYW5kcm9pZF9wYXRoID0gTm9uZQotICAgICAgaWYgYW5kcm9pZF9wYXRoIGFuZCAncGFja2FnZTonIGluIGFuZHJvaWRfcGF0aDoKLSAgICAgICAgYnJlYWsKLSAgICAgIHRpbWUuc2xlZXAoMSkKLQotICBkZWYgdGVzdFJvb3RSZW1vdW50KHNlbGYpOgotICAgIHNlbGYuX2FkYi5Sb290KCkKLSAgICB3aGlsZSBUcnVlOgotICAgICAgdHJ5OgotICAgICAgICBzZWxmLl9hZGIuU2hlbGwoJ3N0YXJ0JykKLSAgICAgICAgYnJlYWsKLSAgICAgIGV4Y2VwdCBkZXZpY2VfZXJyb3JzLkRldmljZVVucmVhY2hhYmxlRXJyb3I6Ci0gICAgICAgIHRpbWUuc2xlZXAoMSkKLSAgICBzZWxmLl9hZGIuUmVtb3VudCgpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9hZGJfd3JhcHBlcl90ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvYWRiX3dyYXBwZXJfdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDdmNzg0ZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9hZGJfd3JhcHBlcl90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIgotVW5pdCB0ZXN0cyBmb3Igc29tZSBBUElzIHdpdGggY29uZGl0aW9uYWwgbG9naWMgaW4gYWRiX3dyYXBwZXIucHkKLSIiIgotCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBkZXZpbCBpbXBvcnQgZGV2aWxfZW52Ci1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9lcnJvcnMKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IGFkYl93cmFwcGVyCi0KLXdpdGggZGV2aWxfZW52LlN5c1BhdGgoZGV2aWxfZW52LlBZTU9DS19QQVRIKToKLSAgaW1wb3J0IG1vY2sgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotCi0KLWNsYXNzIEFkYldyYXBwZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHNlbGYuZGV2aWNlX3NlcmlhbCA9ICdBQkMxMjM0NTY3OCcKLSAgICBzZWxmLmFkYiA9IGFkYl93cmFwcGVyLkFkYldyYXBwZXIoc2VsZi5kZXZpY2Vfc2VyaWFsKQotCi0gIGRlZiBfTW9ja1J1bkRldmljZUFkYkNtZChzZWxmLCByZXR1cm5fdmFsdWUpOgotICAgIHJldHVybiBtb2NrLnBhdGNoLm9iamVjdCgKLSAgICAgICAgc2VsZi5hZGIsCi0gICAgICAgICdfUnVuRGV2aWNlQWRiQ21kJywKLSAgICAgICAgbW9jay5Nb2NrKHNpZGVfZWZmZWN0PU5vbmUsIHJldHVybl92YWx1ZT1yZXR1cm5fdmFsdWUpKQotCi0gIGRlZiB0ZXN0RGlzYWJsZVZlcml0eVdoZW5EaXNhYmxlZChzZWxmKToKLSAgICB3aXRoIHNlbGYuX01vY2tSdW5EZXZpY2VBZGJDbWQoJ1Zlcml0eSBhbHJlYWR5IGRpc2FibGVkIG9uIC9zeXN0ZW0nKToKLSAgICAgIHNlbGYuYWRiLkRpc2FibGVWZXJpdHkoKQotCi0gIGRlZiB0ZXN0RGlzYWJsZVZlcml0eVdoZW5FbmFibGVkKHNlbGYpOgotICAgIHdpdGggc2VsZi5fTW9ja1J1bkRldmljZUFkYkNtZCgKLSAgICAgICAgJ1Zlcml0eSBkaXNhYmxlZCBvbiAvc3lzdGVtXG5Ob3cgcmVib290IHlvdXIgZGV2aWNlIGZvciBzZXR0aW5ncyB0byAnCi0gICAgICAgICd0YWtlIGVmZmVjdCcpOgotICAgICAgc2VsZi5hZGIuRGlzYWJsZVZlcml0eSgpCi0KLSAgZGVmIHRlc3RFbmFibGVWZXJpdHlXaGVuRW5hYmxlZChzZWxmKToKLSAgICB3aXRoIHNlbGYuX01vY2tSdW5EZXZpY2VBZGJDbWQoJ1Zlcml0eSBhbHJlYWR5IGVuYWJsZWQgb24gL3N5c3RlbScpOgotICAgICAgc2VsZi5hZGIuRW5hYmxlVmVyaXR5KCkKLQotICBkZWYgdGVzdEVuYWJsZVZlcml0eVdoZW5EaXNhYmxlZChzZWxmKToKLSAgICB3aXRoIHNlbGYuX01vY2tSdW5EZXZpY2VBZGJDbWQoCi0gICAgICAgICdWZXJpdHkgZW5hYmxlZCBvbiAvc3lzdGVtXG5Ob3cgcmVib290IHlvdXIgZGV2aWNlIGZvciBzZXR0aW5ncyB0byAnCi0gICAgICAgICd0YWtlIGVmZmVjdCcpOgotICAgICAgc2VsZi5hZGIuRW5hYmxlVmVyaXR5KCkKLQotICBkZWYgdGVzdEZhaWxFbmFibGVWZXJpdHkoc2VsZik6Ci0gICAgd2l0aCBzZWxmLl9Nb2NrUnVuRGV2aWNlQWRiQ21kKCdlcnJvcjogY2xvc2VkJyk6Ci0gICAgICBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvciwgc2VsZi5hZGIuRW5hYmxlVmVyaXR5KQotCi0gIGRlZiB0ZXN0RmFpbERpc2FibGVWZXJpdHkoc2VsZik6Ci0gICAgd2l0aCBzZWxmLl9Nb2NrUnVuRGV2aWNlQWRiQ21kKCdlcnJvcjogY2xvc2VkJyk6Ci0gICAgICBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvciwgc2VsZi5hZGIuRGlzYWJsZVZlcml0eSkKLQotICBAbW9jay5wYXRjaCgnZGV2aWwudXRpbHMuY21kX2hlbHBlci5HZXRDbWRTdGF0dXNBbmRPdXRwdXRXaXRoVGltZW91dCcpCi0gIGRlZiB0ZXN0RGV2aWNlVW5yZWFjaGFibGUoc2VsZiwgZ2V0X2NtZF9tb2NrKToKLSAgICBnZXRfY21kX21vY2sucmV0dXJuX3ZhbHVlID0gKAotICAgICAgICAxLCAiZXJyb3I6IGRldmljZSAnJXMnIG5vdCBmb3VuZCIgJSBzZWxmLmRldmljZV9zZXJpYWwpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgIGRldmljZV9lcnJvcnMuRGV2aWNlVW5yZWFjaGFibGVFcnJvciwgc2VsZi5hZGIuU2hlbGwsICcvYmluL3RydWUnKQotCi0gIEBtb2NrLnBhdGNoKCdkZXZpbC51dGlscy5jbWRfaGVscGVyLkdldENtZFN0YXR1c0FuZE91dHB1dFdpdGhUaW1lb3V0JykKLSAgZGVmIHRlc3RXYWl0aW5nRm9yRGV2aWNlKHNlbGYsIGdldF9jbWRfbW9jayk6Ci0gICAgZ2V0X2NtZF9tb2NrLnJldHVybl92YWx1ZSA9ICgxLCAnLSB3YWl0aW5nIGZvciBkZXZpY2UgLSAnKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICBkZXZpY2VfZXJyb3JzLkRldmljZVVucmVhY2hhYmxlRXJyb3IsIHNlbGYuYWRiLlNoZWxsLCAnL2Jpbi90cnVlJykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL2J1aWxkX3Rvb2xzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvYnVpbGRfdG9vbHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MDgzZDkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvYnVpbGRfdG9vbHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGxhenkKLQotd2l0aCBkZXZpbF9lbnYuU3lzUGF0aChkZXZpbF9lbnYuREVQRU5ERU5DWV9NQU5BR0VSX1BBVEgpOgotICBpbXBvcnQgZGVwZW5kZW5jeV9tYW5hZ2VyICAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3IKLQotCi1kZWYgR2V0UGF0aChidWlsZF90b29sKToKLSAgdHJ5OgotICAgIHJldHVybiBkZXZpbF9lbnYuY29uZmlnLkxvY2FsUGF0aChidWlsZF90b29sKQotICBleGNlcHQgZGVwZW5kZW5jeV9tYW5hZ2VyLk5vUGF0aEZvdW5kRXJyb3I6Ci0gICAgcGFzcwotCi0gIHRyeToKLSAgICByZXR1cm4gX1BhdGhJbkxvY2FsU2RrKGJ1aWxkX3Rvb2wpCi0gIGV4Y2VwdCBkZXBlbmRlbmN5X21hbmFnZXIuTm9QYXRoRm91bmRFcnJvcjoKLSAgICBwYXNzCi0KLSAgcmV0dXJuIGRldmlsX2Vudi5jb25maWcuRmV0Y2hQYXRoKGJ1aWxkX3Rvb2wpCi0KLQotZGVmIF9QYXRoSW5Mb2NhbFNkayhidWlsZF90b29sKToKLSAgYnVpbGRfdG9vbHNfcGF0aCA9IF9idWlsZF90b29sc19wYXRoLnJlYWQoKQotICByZXR1cm4gKG9zLnBhdGguam9pbihidWlsZF90b29sc19wYXRoLCBidWlsZF90b29sKSBpZiBidWlsZF90b29sc19wYXRoCi0gICAgICAgICAgZWxzZSBOb25lKQotCi0KLWRlZiBfRmluZEJ1aWxkVG9vbHMoKToKLSAgYW5kcm9pZF9zZGtfcGF0aCA9IGRldmlsX2Vudi5jb25maWcuTG9jYWxQYXRoKCdhbmRyb2lkX3NkaycpCi0gIGlmIG5vdCBhbmRyb2lkX3Nka19wYXRoOgotICAgIHJldHVybiBOb25lCi0KLSAgYnVpbGRfdG9vbHNfY29udGVudHMgPSBvcy5saXN0ZGlyKAotICAgICAgb3MucGF0aC5qb2luKGFuZHJvaWRfc2RrX3BhdGgsICdidWlsZC10b29scycpKQotCi0gIGlmIG5vdCBidWlsZF90b29sc19jb250ZW50czoKLSAgICByZXR1cm4gTm9uZQotICBlbHNlOgotICAgIGlmIGxlbihidWlsZF90b29sc19jb250ZW50cykgPiAxOgotICAgICAgYnVpbGRfdG9vbHNfY29udGVudHMuc29ydCgpCi0gICAgcmV0dXJuIG9zLnBhdGguam9pbihhbmRyb2lkX3Nka19wYXRoLCAnYnVpbGQtdG9vbHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfdG9vbHNfY29udGVudHNbLTFdKQotCi0KLV9idWlsZF90b29sc19wYXRoID0gbGF6eS5XZWFrQ29uc3RhbnQoX0ZpbmRCdWlsZFRvb2xzKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvZGV4ZHVtcC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL2RleGR1bXAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MjM2NmUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvZGV4ZHVtcC5weQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgYnVpbGRfdG9vbHMKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGNtZF9oZWxwZXIKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGxhenkKLQotCi1fZGV4ZHVtcF9wYXRoID0gbGF6eS5XZWFrQ29uc3RhbnQobGFtYmRhOiBidWlsZF90b29scy5HZXRQYXRoKCdkZXhkdW1wJykpCi0KLQotZGVmIERleER1bXAoZGV4ZmlsZXMsIGZpbGVfc3VtbWFyeT1GYWxzZSk6Ci0gICIiIkEgd3JhcHBlciBhcm91bmQgdGhlIEFuZHJvaWQgU0RLJ3MgZGV4ZHVtcCB0b29sLgotCi0gIEFyZ3M6Ci0gICAgZGV4ZmlsZXM6IFRoZSBkZXhmaWxlIG9yIGxpc3Qgb2YgZGV4IGZpbGVzIHRvIGR1bXAuCi0gICAgZmlsZV9zdW1tYXJ5OiBEaXNwbGF5IHN1bW1hcnkgaW5mb3JtYXRpb24gZnJvbSB0aGUgZmlsZSBoZWFkZXIuICgtZikKLQotICBSZXR1cm5zOgotICAgIEFuIGl0ZXJhYmxlIG92ZXIgdGhlIG91dHB1dCBsaW5lcy4KLSAgIiIiCi0gICMgVE9ETyhqYnVkb3JpY2spOiBBZGQgc3VwcG9ydCBmb3IgbW9yZSBvcHRpb25zIGFzIG5lY2Vzc2FyeS4KLSAgaWYgaXNpbnN0YW5jZShkZXhmaWxlcywgYmFzZXN0cmluZyk6Ci0gICAgZGV4ZmlsZXMgPSBbZGV4ZmlsZXNdCi0gIGFyZ3MgPSBbX2RleGR1bXBfcGF0aC5yZWFkKCldICsgZGV4ZmlsZXMKLSAgaWYgZmlsZV9zdW1tYXJ5OgotICAgIGFyZ3MuYXBwZW5kKCctZicpCi0KLSAgcmV0dXJuIGNtZF9oZWxwZXIuSXRlckNtZE91dHB1dExpbmVzKGFyZ3MpCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL2Zhc3Rib290LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvZmFzdGJvb3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlOTlkMzkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvZmFzdGJvb3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJUaGlzIG1vZHVsZSB3cmFwcyBBbmRyb2lkJ3MgZmFzdGJvb3QgdG9vbC4KLQotVGhpcyBpcyBhIHRoaW4gd3JhcHBlciBhcm91bmQgdGhlIGZhc3Rib290IGludGVyZmFjZS4gQW55IGFkZGl0aW9uYWwgY29tcGxleGl0eQotc2hvdWxkIGJlIGRlbGVnYXRlZCB0byBhIGhpZ2hlciBsZXZlbCAoZXguIEZhc3Rib290VXRpbHMpLgotIiIiCi0jIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLQotZnJvbSBkZXZpbCBpbXBvcnQgZGV2aWxfZW52Ci1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRlY29yYXRvcnMKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX2Vycm9ycwotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgY21kX2hlbHBlcgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgbGF6eQotCi1fREVGQVVMVF9USU1FT1VUID0gMzAKLV9ERUZBVUxUX1JFVFJJRVMgPSAzCi1fRkxBU0hfVElNRU9VVCA9IF9ERUZBVUxUX1RJTUVPVVQgKiAxMAotCi0KLWNsYXNzIEZhc3Rib290KG9iamVjdCk6Ci0KLSAgX2Zhc3Rib290X3BhdGggPSBsYXp5LldlYWtDb25zdGFudCgKLSAgICAgIGxhbWJkYTogZGV2aWxfZW52LmNvbmZpZy5GZXRjaFBhdGgoJ2Zhc3Rib290JykpCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGRldmljZV9zZXJpYWwsIGRlZmF1bHRfdGltZW91dD1fREVGQVVMVF9USU1FT1VULAotICAgICAgICAgICAgICAgZGVmYXVsdF9yZXRyaWVzPV9ERUZBVUxUX1JFVFJJRVMpOgotICAgICIiIkluaXRpYWxpemVzIHRoZSBGYXN0Ym9vdFdyYXBwZXIuCi0KLSAgICBBcmdzOgotICAgICAgZGV2aWNlX3NlcmlhbDogVGhlIGRldmljZSBzZXJpYWwgbnVtYmVyIGFzIGEgc3RyaW5nLgotICAgICIiIgotICAgIGlmIG5vdCBkZXZpY2Vfc2VyaWFsOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcignQSBkZXZpY2Ugc2VyaWFsIG11c3QgYmUgc3BlY2lmaWVkJykKLSAgICBzZWxmLl9kZXZpY2Vfc2VyaWFsID0gc3RyKGRldmljZV9zZXJpYWwpCi0gICAgc2VsZi5fZGVmYXVsdF90aW1lb3V0ID0gZGVmYXVsdF90aW1lb3V0Ci0gICAgc2VsZi5fZGVmYXVsdF9yZXRyaWVzID0gZGVmYXVsdF9yZXRyaWVzCi0KLSAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX2RldmljZV9zZXJpYWwKLQotICBAY2xhc3NtZXRob2QKLSAgZGVmIF9SdW5GYXN0Ym9vdENvbW1hbmQoY2xzLCBjbWQpOgotICAgICIiIlJ1biBhIGdlbmVyaWMgZmFzdGJvb3QgY29tbWFuZC4KLQotICAgIEFyZ3M6Ci0gICAgICBjbWQ6IENvbW1hbmQgdG8gcnVuLiBNdXN0IGJlIGxpc3Qgb2YgYXJncywgdGhlIGZpcnN0IG9uZSBiZWluZyB0aGUgY29tbWFuZAotCi0gICAgUmV0dXJuczoKLSAgICAgIG91dHB1dCBvZiBjb21tYW5kLgotCi0gICAgUmFpc2VzOgotICAgICAgVHlwZUVycm9yOiBJZiBjbWQgaXMgbm90IG9mIHR5cGUgbGlzdC4KLSAgICAiIiIKLSAgICBpZiB0eXBlKGNtZCkgPT0gbGlzdDoKLSAgICAgIGNtZCA9IFtjbHMuX2Zhc3Rib290X3BhdGgucmVhZCgpXSArIGNtZAotICAgIGVsc2U6Ci0gICAgICByYWlzZSBUeXBlRXJyb3IoCi0gICAgICAgICAgJ0NvbW1hbmQgZm9yIF9SdW5EZXZpY2VGYXN0Ym9vdENvbW1hbmQgbXVzdCBiZSBhIGxpc3QuJykKLSAgICBzdGF0dXMsIG91dHB1dCA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0KGNtZCkKLSAgICBpZiBpbnQoc3RhdHVzKSAhPSAwOgotICAgICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5GYXN0Ym9vdENvbW1hbmRGYWlsZWRFcnJvcihjbWQsIG91dHB1dCwgc3RhdHVzKQotICAgIHJldHVybiBvdXRwdXQKLQotICBkZWYgX1J1bkRldmljZUZhc3Rib290Q29tbWFuZChzZWxmLCBjbWQpOgotICAgICIiIlJ1biBhIGZhc3Rib290IGNvbW1hbmQgb24gdGhlIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuCi0KLSAgICBBcmdzOgotICAgICAgY21kOiBDb21tYW5kIHRvIHJ1bi4gTXVzdCBiZSBsaXN0IG9mIGFyZ3MsIHRoZSBmaXJzdCBvbmUgYmVpbmcgdGhlIGNvbW1hbmQKLQotICAgIFJldHVybnM6Ci0gICAgICBvdXRwdXQgb2YgY29tbWFuZC4KLQotICAgIFJhaXNlczoKLSAgICAgIFR5cGVFcnJvcjogSWYgY21kIGlzIG5vdCBvZiB0eXBlIGxpc3QuCi0gICAgIiIiCi0gICAgaWYgdHlwZShjbWQpID09IGxpc3Q6Ci0gICAgICBjbWQgPSBbJy1zJywgc2VsZi5fZGV2aWNlX3NlcmlhbF0gKyBjbWQKLSAgICByZXR1cm4gc2VsZi5fUnVuRmFzdGJvb3RDb21tYW5kKGNtZCkKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNEZWZhdWx0cyhfRkxBU0hfVElNRU9VVCwgMCkKLSAgZGVmIEZsYXNoKHNlbGYsIHBhcnRpdGlvbiwgaW1hZ2UsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJGbGFzaCBwYXJ0aXRpb24gd2l0aCBpbWcuCi0KLSAgICBBcmdzOgotICAgICAgcGFydGl0aW9uOiBQYXJ0aXRpb24gdG8gYmUgZmxhc2hlZC4KLSAgICAgIGltYWdlOiBsb2NhdGlvbiBvZiBpbWFnZSB0byBmbGFzaCB3aXRoLgotICAgICIiIgotICAgIHNlbGYuX1J1bkRldmljZUZhc3Rib290Q29tbWFuZChbJ2ZsYXNoJywgcGFydGl0aW9uLCBpbWFnZV0pCi0KLSAgQGNsYXNzbWV0aG9kCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0RlZmF1bHRzKF9ERUZBVUxUX1RJTUVPVVQsIF9ERUZBVUxUX1JFVFJJRVMpCi0gIGRlZiBEZXZpY2VzKGNscywgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIk91dHB1dHMgbGlzdCBvZiBkZXZpY2VzIGluIGZhc3Rib290IG1vZGUuCi0KLSAgICBSZXR1cm5zOgotICAgICAgTGlzdCBvZiBGYXN0Ym9vdCBvYmplY3RzLCBvbmUgZm9yIGVhY2ggZGV2aWNlIGluIGZhc3Rib290LgotICAgICIiIgotICAgIG91dHB1dCA9IGNscy5fUnVuRmFzdGJvb3RDb21tYW5kKFsnZGV2aWNlcyddKQotICAgIHJldHVybiBbRmFzdGJvb3QobGluZS5zcGxpdCgpWzBdKSBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpXQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0Zyb21JbnN0YW5jZSgpCi0gIGRlZiBSZWJvb3RCb290bG9hZGVyKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJSZWJvb3QgZnJvbSBmYXN0Ym9vdCwgaW50byBmYXN0Ym9vdC4iIiIKLSAgICBzZWxmLl9SdW5EZXZpY2VGYXN0Ym9vdENvbW1hbmQoWydyZWJvb3QtYm9vdGxvYWRlciddKQotCi0gIEBkZWNvcmF0b3JzLldpdGhUaW1lb3V0QW5kUmV0cmllc0RlZmF1bHRzKF9GTEFTSF9USU1FT1VULCAwKQotICBkZWYgUmVib290KHNlbGYsIHRpbWVvdXQ9Tm9uZSwgcmV0cmllcz1Ob25lKToKLSAgICAiIiJSZWJvb3QgZnJvbSBmYXN0Ym9vdCB0byBub3JtYWwgdXNhZ2UiIiIKLSAgICBzZWxmLl9SdW5EZXZpY2VGYXN0Ym9vdENvbW1hbmQoWydyZWJvb3QnXSkKLQotICBAZGVjb3JhdG9ycy5XaXRoVGltZW91dEFuZFJldHJpZXNGcm9tSW5zdGFuY2UoKQotICBkZWYgU2V0T2VtT2ZmTW9kZUNoYXJnZShzZWxmLCB2YWx1ZSwgdGltZW91dD1Ob25lLCByZXRyaWVzPU5vbmUpOgotICAgICIiIlNldHMgb2ZmIG1vZGUgY2hhcmdpbmcKLQotICAgIEFyZ3M6Ci0gICAgICB2YWx1ZTogYm9vbGVhbiB2YWx1ZSB0byBzZXQgb2ZmLW1vZGUtY2hhcmdpbmcgb24gb3Igb2ZmLgotICAgICIiIgotICAgIHNlbGYuX1J1bkRldmljZUZhc3Rib290Q29tbWFuZCgKLSAgICAgICAgWydvZW0nLCAnb2ZmLW1vZGUtY2hhcmdlJywgc3RyKGludCh2YWx1ZSkpXSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL2djZV9hZGJfd3JhcHBlci5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL2djZV9hZGJfd3JhcHBlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE2MDBmNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9nY2VfYWRiX3dyYXBwZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJQcm92aWRlcyBhIHdvcmsgYXJvdW5kIGZvciB2YXJpb3VzIGFkYiBjb21tYW5kcyBvbiBhbmRyb2lkIGdjZSBpbnN0YW5jZXMuCi0KLVNvbWUgYWRiIGNvbW1hbmRzIGRvbid0IHdvcmsgd2VsbCB3aGVuIHRoZSBkZXZpY2UgaXMgYSBjbG91ZCB2bSwgbmFtZWx5Ci0ncHVzaCcgYW5kICdwdWxsJy4gV2l0aCBnY2UgaW5zdGFuY2VzLCBtb3ZpbmcgZmlsZXMgdGhyb3VnaCBhZGIgY2FuIGJlCi1wYWluZnVsbHkgc2xvdyBhbmQgaGl0IHRpbWVvdXRzLCBzbyB0aGUgbWV0aG9kcyBoZXJlIGp1c3QgdXNlIHNjcCBpbnN0ZWFkLgotIiIiCi0jIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHN1YnByb2Nlc3MKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBhZGJfd3JhcHBlcgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgY21kX2hlbHBlcgotCi1sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1jbGFzcyBHY2VBZGJXcmFwcGVyKGFkYl93cmFwcGVyLkFkYldyYXBwZXIpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2Vfc2VyaWFsKToKLSAgICBzdXBlcihHY2VBZGJXcmFwcGVyLCBzZWxmKS5fX2luaXRfXyhkZXZpY2Vfc2VyaWFsKQotICAgIHNlbGYuX0Nvbm5lY3QoKQotICAgIHNlbGYuUm9vdCgpCi0gICAgc2VsZi5faW5zdGFuY2VfaXAgPSBzZWxmLlNoZWxsKCdnZXRwcm9wIG5ldC5nY2UuaXAnKS5zdHJpcCgpCi0KLSAgZGVmIF9Db25uZWN0KHNlbGYsIHRpbWVvdXQ9YWRiX3dyYXBwZXIuREVGQVVMVF9USU1FT1VULAotICAgICAgICAgICAgICAgcmV0cmllcz1hZGJfd3JhcHBlci5ERUZBVUxUX1JFVFJJRVMpOgotICAgICIiIkNvbm5lY3RzIEFEQiB0byB0aGUgYW5kcm9pZCBnY2UgaW5zdGFuY2UuIiIiCi0gICAgY21kID0gWydjb25uZWN0Jywgc2VsZi5fZGV2aWNlX3NlcmlhbF0KLSAgICBvdXRwdXQgPSBzZWxmLl9SdW5BZGJDbWQoY21kLCB0aW1lb3V0PXRpbWVvdXQsIHJldHJpZXM9cmV0cmllcykKLSAgICBpZiAndW5hYmxlIHRvIGNvbm5lY3QnIGluIG91dHB1dDoKLSAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yKGNtZCwgb3V0cHV0KQotICAgIHNlbGYuV2FpdEZvckRldmljZSgpCi0KLSAgIyBvdmVycmlkZQotICBkZWYgUm9vdChzZWxmLCAqKmt3YXJncyk6Ci0gICAgc3VwZXIoR2NlQWRiV3JhcHBlciwgc2VsZikuUm9vdCgpCi0gICAgc2VsZi5fQ29ubmVjdCgpCi0KLSAgIyBvdmVycmlkZQotICBkZWYgUHVzaChzZWxmLCBsb2NhbCwgcmVtb3RlLCAqKmt3YXJncyk6Ci0gICAgIiIiUHVzaGVzIGFuIG9iamVjdCBmcm9tIHRoZSBob3N0IHRvIHRoZSBnY2UgaW5zdGFuY2UuCi0KLSAgICBBcmdzOgotICAgICAgbG9jYWw6IFBhdGggb24gdGhlIGhvc3QgZmlsZXN5c3RlbS4KLSAgICAgIHJlbW90ZTogUGF0aCBvbiB0aGUgaW5zdGFuY2UgZmlsZXN5c3RlbS4KLSAgICAiIiIKLSAgICBhZGJfd3JhcHBlci5WZXJpZnlMb2NhbEZpbGVFeGlzdHMobG9jYWwpCi0gICAgaWYgb3MucGF0aC5pc2Rpcihsb2NhbCk6Ci0gICAgICBzZWxmLlNoZWxsKCdta2RpciAtcCAlcycgJSBjbWRfaGVscGVyLlNpbmdsZVF1b3RlKHJlbW90ZSkpCi0KLSAgICAgICMgV2hlbiB0aGUgb2JqZWN0IHRvIGJlIHB1c2hlZCBpcyBhIGRpcmVjdG9yeSwgYWRiIG1lcmdlcyB0aGUgc291cmNlIGRpcgotICAgICAgIyB3aXRoIHRoZSBkZXN0aW5hdGlvbiBkaXIuIFNvIGlmIGxvY2FsIGlzIGEgZGlyLCBqdXN0IHNjcCBpdHMgY29udGVudHMuCi0gICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKGxvY2FsKToKLSAgICAgICAgc2VsZi5fUHVzaE9iamVjdChvcy5wYXRoLmpvaW4obG9jYWwsIGYpLCBvcy5wYXRoLmpvaW4ocmVtb3RlLCBmKSkKLSAgICAgICAgc2VsZi5TaGVsbCgnY2htb2QgNzc3ICVzJyAlCi0gICAgICAgICAgICAgICAgICAgY21kX2hlbHBlci5TaW5nbGVRdW90ZShvcy5wYXRoLmpvaW4ocmVtb3RlLCBmKSkpCi0gICAgZWxzZToKLSAgICAgIHBhcmVudF9kaXIgPSByZW1vdGVbMDpyZW1vdGUucmZpbmQoJy8nKV0KLSAgICAgIGlmIHBhcmVudF9kaXI6Ci0gICAgICAgIHNlbGYuU2hlbGwoJ21rZGlyIC1wICVzJyAlIGNtZF9oZWxwZXIuU2luZ2xlUXVvdGUocGFyZW50X2RpcikpCi0gICAgICBzZWxmLl9QdXNoT2JqZWN0KGxvY2FsLCByZW1vdGUpCi0gICAgICBzZWxmLlNoZWxsKCdjaG1vZCA3NzcgJXMnICUgY21kX2hlbHBlci5TaW5nbGVRdW90ZShyZW1vdGUpKQotCi0gIGRlZiBfUHVzaE9iamVjdChzZWxmLCBsb2NhbCwgcmVtb3RlKToKLSAgICAiIiJDb3BpZXMgYW4gb2JqZWN0IGZyb20gdGhlIGhvc3QgdG8gdGhlIGdjZSBpbnN0YW5jZSB1c2luZyBzY3AuCi0KLSAgICBBcmdzOgotICAgICAgbG9jYWw6IFBhdGggb24gdGhlIGhvc3QgZmlsZXN5c3RlbS4KLSAgICAgIHJlbW90ZTogUGF0aCBvbiB0aGUgaW5zdGFuY2UgZmlsZXN5c3RlbS4KLSAgICAiIiIKLSAgICBjbWQgPSBbCi0gICAgICAgICdzY3AnLAotICAgICAgICAnLXInLAotICAgICAgICAnLW8nLCAnVXNlcktub3duSG9zdHNGaWxlPS9kZXYvbnVsbCcsCi0gICAgICAgICctbycsICdTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nLAotICAgICAgICBsb2NhbCwKLSAgICAgICAgJ3Jvb3RAJXM6JXMnICUgKHNlbGYuX2luc3RhbmNlX2lwLCByZW1vdGUpCi0gICAgXQotICAgIHN0YXR1cywgXyA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0KGNtZCkKLSAgICBpZiBzdGF0dXM6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICBjbWQsICdGaWxlIG5vdCByZWFjaGFibGUgb24gaG9zdDogJXMnICUgbG9jYWwsCi0gICAgICAgICAgZGV2aWNlX3NlcmlhbD1zdHIoc2VsZikpCi0KLSAgIyBvdmVycmlkZQotICBkZWYgUHVsbChzZWxmLCByZW1vdGUsIGxvY2FsLCAqKmt3YXJncyk6Ci0gICAgIiIiUHVsbHMgYSBmaWxlIGZyb20gdGhlIGdjZSBpbnN0YW5jZSB0byB0aGUgaG9zdC4KLQotICAgIEFyZ3M6Ci0gICAgICByZW1vdGU6IFBhdGggb24gdGhlIGluc3RhbmNlIGZpbGVzeXN0ZW0uCi0gICAgICBsb2NhbDogUGF0aCBvbiB0aGUgaG9zdCBmaWxlc3lzdGVtLgotICAgICIiIgotICAgIGNtZCA9IFsKLSAgICAgICAgJ3NjcCcsCi0gICAgICAgICctcCcsCi0gICAgICAgICctcicsCi0gICAgICAgICctbycsICdVc2VyS25vd25Ib3N0c0ZpbGU9L2Rldi9udWxsJywKLSAgICAgICAgJy1vJywgJ1N0cmljdEhvc3RLZXlDaGVja2luZz1ubycsCi0gICAgICAgICdyb290QCVzOiVzJyAlIChzZWxmLl9pbnN0YW5jZV9pcCwgcmVtb3RlKSwKLSAgICAgICAgbG9jYWwsCi0gICAgXQotICAgIHN0YXR1cywgXyA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0KGNtZCkKLSAgICBpZiBzdGF0dXM6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICBjbWQsICdGaWxlIG5vdCByZWFjaGFibGUgb24gaG9zdDogJXMnICUgbG9jYWwsCi0gICAgICAgICAgZGV2aWNlX3NlcmlhbD1zdHIoc2VsZikpCi0KLSAgICB0cnk6Ci0gICAgICBhZGJfd3JhcHBlci5WZXJpZnlMb2NhbEZpbGVFeGlzdHMobG9jYWwpCi0gICAgZXhjZXB0IChzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciwgSU9FcnJvcik6Ci0gICAgICBsb2dnZXIuZXhjZXB0aW9uKCdFcnJvciB3aGVuIHB1bGxpbmcgZmlsZXMgZnJvbSBhbmRyb2lkIGluc3RhbmNlLicpCi0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICBjbWQsICdGaWxlIG5vdCByZWFjaGFibGUgb24gaG9zdDogJXMnICUgbG9jYWwsCi0gICAgICAgICAgZGV2aWNlX3NlcmlhbD1zdHIoc2VsZikpCi0KLSAgIyBvdmVycmlkZQotICBkZWYgSW5zdGFsbChzZWxmLCBhcGtfcGF0aCwgZm9yd2FyZF9sb2NrPUZhbHNlLCByZWluc3RhbGw9RmFsc2UsCi0gICAgICAgICAgICAgIHNkX2NhcmQ9RmFsc2UsICoqa3dhcmdzKToKLSAgICAiIiJJbnN0YWxscyBhbiBhcGsgb24gdGhlIGdjZSBpbnN0YW5jZQotCi0gICAgQXJnczoKLSAgICAgIGFwa19wYXRoOiBIb3N0IHBhdGggdG8gdGhlIEFQSyBmaWxlLgotICAgICAgZm9yd2FyZF9sb2NrOiAob3B0aW9uYWwpIElmIHNldCBmb3J3YXJkLWxvY2tzIHRoZSBhcHAuCi0gICAgICByZWluc3RhbGw6IChvcHRpb25hbCkgSWYgc2V0IHJlaW5zdGFsbHMgdGhlIGFwcCwga2VlcGluZyBpdHMgZGF0YS4KLSAgICAgIHNkX2NhcmQ6IChvcHRpb25hbCkgSWYgc2V0IGluc3RhbGxzIG9uIHRoZSBTRCBjYXJkLgotICAgICIiIgotICAgIGFkYl93cmFwcGVyLlZlcmlmeUxvY2FsRmlsZUV4aXN0cyhhcGtfcGF0aCkKLSAgICBjbWQgPSBbJ2luc3RhbGwnXQotICAgIGlmIGZvcndhcmRfbG9jazoKLSAgICAgIGNtZC5hcHBlbmQoJy1sJykKLSAgICBpZiByZWluc3RhbGw6Ci0gICAgICBjbWQuYXBwZW5kKCctcicpCi0gICAgaWYgc2RfY2FyZDoKLSAgICAgIGNtZC5hcHBlbmQoJy1zJykKLSAgICBzZWxmLlB1c2goYXBrX3BhdGgsICcvZGF0YS9sb2NhbC90bXAvdG1wLmFwaycpCi0gICAgY21kID0gWydwbSddICsgY21kCi0gICAgY21kLmFwcGVuZCgnL2RhdGEvbG9jYWwvdG1wL3RtcC5hcGsnKQotICAgIG91dHB1dCA9IHNlbGYuU2hlbGwoJyAnLmpvaW4oY21kKSkKLSAgICBzZWxmLlNoZWxsKCdybSAvZGF0YS9sb2NhbC90bXAvdG1wLmFwaycpCi0gICAgaWYgJ1N1Y2Nlc3MnIG5vdCBpbiBvdXRwdXQ6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcigKLSAgICAgICAgICBjbWQsIG91dHB1dCwgZGV2aWNlX3NlcmlhbD1zZWxmLl9kZXZpY2Vfc2VyaWFsKQotCi0gICMgb3ZlcnJpZGUKLSAgQHByb3BlcnR5Ci0gIGRlZiBpc19lbXVsYXRvcihzZWxmKToKLSAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvaW50ZW50LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvaW50ZW50LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGVmYjQ2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL2ludGVudC5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIk1hbmFnZXMgaW50ZW50cyBhbmQgYXNzb2NpYXRlZCBpbmZvcm1hdGlvbi4KLQotVGhpcyBpcyBnZW5lcmFsbHkgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyB0aGF0IGNhbGxzIEFuZHJvaWQncwotQW0gY29tbWFuZC4KLSIiIgotCi0jIFNvbWUgY29tbW9uIGZsYWcgY29uc3RhbnRzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGludGVudHMuCi0jIEZ1bGwgbGlzdDogaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9jb250ZW50L0ludGVudC5odG1sCi1GTEFHX0FDVElWSVRZX0NMRUFSX1RBU0sgPSAweDAwMDA4MDAwCi1GTEFHX0FDVElWSVRZX0NMRUFSX1RPUCA9IDB4MDQwMDAwMDAKLUZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgPSAweDEwMDAwMDAwCi1GTEFHX0FDVElWSVRZX1JFT1JERVJfVE9fRlJPTlQgPSAweDAwMDIwMDAwCi1GTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEID0gMHgwMDIwMDAwMAotCi0KLWRlZiBfYml0d2lzZV9vcihmbGFncyk6Ci0gIHJlc3VsdCA9IDAKLSAgZm9yIGZsYWcgaW4gZmxhZ3M6Ci0gICAgcmVzdWx0IHw9IGZsYWcKLSAgcmV0dXJuIHJlc3VsdAotCi0KLWNsYXNzIEludGVudChvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBhY3Rpb249J2FuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXJywgYWN0aXZpdHk9Tm9uZSwKLSAgICAgICAgICAgICAgIGNhdGVnb3J5PU5vbmUsIGNvbXBvbmVudD1Ob25lLCBkYXRhPU5vbmUsIGV4dHJhcz1Ob25lLAotICAgICAgICAgICAgICAgZmxhZ3M9Tm9uZSwgcGFja2FnZT1Ob25lKToKLSAgICAiIiJDcmVhdGVzIGFuIEludGVudC4KLQotICAgIEFyZ3M6Ci0gICAgICBhY3Rpb246IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFjdGlvbi4KLSAgICAgIGFjdGl2aXR5OiBBIHN0cmluZyB0aGF0LCB3aXRoIHxwYWNrYWdlfCwgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUKLSAgICAgICAgICAgICAgICBjb21wb25lbnQuCi0gICAgICBjYXRlZ29yeTogQSBzdHJpbmcgb3IgbGlzdCBjb250YWluaW5nIGFueSBjYXRlZ29yaWVzLgotICAgICAgY29tcG9uZW50OiBBIHN0cmluZyB0aGF0IHNwZWNpZmllcyB0aGUgY29tcG9uZW50IHRvIHNlbmQgdGhlIGludGVudCB0by4KLSAgICAgIGRhdGE6IEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBkYXRhIFVSSS4KLSAgICAgIGV4dHJhczogQSBkaWN0IGNvbnRhaW5pbmcgZXh0cmEgcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgYWxvbmcgd2l0aCB0aGUKLSAgICAgICAgICAgICAgaW50ZW50LgotICAgICAgZmxhZ3M6IEEgc2VxdWVuY2Ugb2YgZmxhZyBjb25zdGFudHMgdG8gYmUgcGFzc2VkIHdpdGggdGhlIGludGVudC4KLSAgICAgIHBhY2thZ2U6IEEgc3RyaW5nIHRoYXQsIHdpdGggYWN0aXZpdHksIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlCi0gICAgICAgICAgICAgICBjb21wb25lbnQuCi0gICAgIiIiCi0gICAgc2VsZi5fYWN0aW9uID0gYWN0aW9uCi0gICAgc2VsZi5fYWN0aXZpdHkgPSBhY3Rpdml0eQotICAgIGlmIGlzaW5zdGFuY2UoY2F0ZWdvcnksIGxpc3QpIG9yIGNhdGVnb3J5IGlzIE5vbmU6Ci0gICAgICBzZWxmLl9jYXRlZ29yeSA9IGNhdGVnb3J5Ci0gICAgZWxzZToKLSAgICAgIHNlbGYuX2NhdGVnb3J5ID0gW2NhdGVnb3J5XQotICAgIHNlbGYuX2NvbXBvbmVudCA9IGNvbXBvbmVudAotICAgIHNlbGYuX2RhdGEgPSBkYXRhCi0gICAgc2VsZi5fZXh0cmFzID0gZXh0cmFzCi0gICAgc2VsZi5fZmxhZ3MgPSAnMHglMC44eCcgJSBfYml0d2lzZV9vcihmbGFncykgaWYgZmxhZ3MgZWxzZSBOb25lCi0gICAgc2VsZi5fcGFja2FnZSA9IHBhY2thZ2UKLQotICAgIGlmIHNlbGYuX2NvbXBvbmVudCBhbmQgJy8nIGluIGNvbXBvbmVudDoKLSAgICAgIHNlbGYuX3BhY2thZ2UsIHNlbGYuX2FjdGl2aXR5ID0gY29tcG9uZW50LnNwbGl0KCcvJywgMSkKLSAgICBlbGlmIHNlbGYuX3BhY2thZ2UgYW5kIHNlbGYuX2FjdGl2aXR5OgotICAgICAgc2VsZi5fY29tcG9uZW50ID0gJyVzLyVzJyAlIChwYWNrYWdlLCBhY3Rpdml0eSkKLQotICBAcHJvcGVydHkKLSAgZGVmIGFjdGlvbihzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fYWN0aW9uCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBhY3Rpdml0eShzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fYWN0aXZpdHkKLQotICBAcHJvcGVydHkKLSAgZGVmIGNhdGVnb3J5KHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9jYXRlZ29yeQotCi0gIEBwcm9wZXJ0eQotICBkZWYgY29tcG9uZW50KHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9jb21wb25lbnQKLQotICBAcHJvcGVydHkKLSAgZGVmIGRhdGEoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX2RhdGEKLQotICBAcHJvcGVydHkKLSAgZGVmIGV4dHJhcyhzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fZXh0cmFzCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBmbGFncyhzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fZmxhZ3MKLQotICBAcHJvcGVydHkKLSAgZGVmIHBhY2thZ2Uoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX3BhY2thZ2UKLQotICBAcHJvcGVydHkKLSAgZGVmIGFtX2FyZ3Moc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgaW50ZW50IGFzIGEgbGlzdCBvZiBhcmd1bWVudHMgZm9yIHRoZSBhY3Rpdml0eSBtYW5hZ2VyLgotCi0gICAgRm9yIGRldGFpbHMgcmVmZXIgdG8gdGhlIHNwZWNpZmljYXRpb24gYXQ6Ci0gICAgLSBodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3Rvb2xzL2hlbHAvYWRiLmh0bWwjSW50ZW50U3BlYwotICAgICIiIgotICAgIGFyZ3MgPSBbXQotICAgIGlmIHNlbGYuYWN0aW9uOgotICAgICAgYXJncy5leHRlbmQoWyctYScsIHNlbGYuYWN0aW9uXSkKLSAgICBpZiBzZWxmLmRhdGE6Ci0gICAgICBhcmdzLmV4dGVuZChbJy1kJywgc2VsZi5kYXRhXSkKLSAgICBpZiBzZWxmLmNhdGVnb3J5OgotICAgICAgYXJncy5leHRlbmQoYXJnIGZvciBjYXQgaW4gc2VsZi5jYXRlZ29yeSBmb3IgYXJnIGluICgnLWMnLCBjYXQpKQotICAgIGlmIHNlbGYuY29tcG9uZW50OgotICAgICAgYXJncy5leHRlbmQoWyctbicsIHNlbGYuY29tcG9uZW50XSkKLSAgICBpZiBzZWxmLmZsYWdzOgotICAgICAgYXJncy5leHRlbmQoWyctZicsIHNlbGYuZmxhZ3NdKQotICAgIGlmIHNlbGYuZXh0cmFzOgotICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5leHRyYXMuaXRlcml0ZW1zKCk6Ci0gICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6Ci0gICAgICAgICAgYXJncy5leHRlbmQoWyctLWVzbicsIGtleV0pCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKLSAgICAgICAgICBhcmdzLmV4dGVuZChbJy0tZXMnLCBrZXksIHZhbHVlXSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKLSAgICAgICAgICBhcmdzLmV4dGVuZChbJy0tZXonLCBrZXksIHN0cih2YWx1ZSldKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICAgICAgICAgYXJncy5leHRlbmQoWyctLWVpJywga2V5LCBzdHIodmFsdWUpXSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgICAgICAgYXJncy5leHRlbmQoWyctLWVmJywga2V5LCBzdHIodmFsdWUpXSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAotICAgICAgICAgICAgICAnSW50ZW50IGRvZXMgbm90IGtub3cgaG93IHRvIHBhc3MgJXMgZXh0cmFzJyAlIHR5cGUodmFsdWUpKQotICAgIHJldHVybiBhcmdzCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9rZXlldmVudC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL2tleWV2ZW50LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTdkYzk2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL2tleWV2ZW50LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJBbmRyb2lkIEtleUV2ZW50IGNvbnN0YW50cy4KLQotaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC92aWV3L0tleUV2ZW50Lmh0bWwKLSIiIgotCi1LRVlDT0RFX0JBQ0sgPSA0Ci0KLUtFWUNPREVfMCA9IDcKLUtFWUNPREVfMSA9IDgKLUtFWUNPREVfMiA9IDkKLUtFWUNPREVfMyA9IDEwCi1LRVlDT0RFXzQgPSAxMQotS0VZQ09ERV81ID0gMTIKLUtFWUNPREVfNiA9IDEzCi1LRVlDT0RFXzcgPSAxNAotS0VZQ09ERV84ID0gMTUKLUtFWUNPREVfOSA9IDE2Ci0KLUtFWUNPREVfRFBBRF9SSUdIVCA9IDIyCi0KLUtFWUNPREVfUE9XRVIgPSAyNgotCi1LRVlDT0RFX0EgPSAyOQotS0VZQ09ERV9CID0gMzAKLUtFWUNPREVfQyA9IDMxCi1LRVlDT0RFX0QgPSAzMgotS0VZQ09ERV9FID0gMzMKLUtFWUNPREVfRiA9IDM0Ci1LRVlDT0RFX0cgPSAzNQotS0VZQ09ERV9IID0gMzYKLUtFWUNPREVfSSA9IDM3Ci1LRVlDT0RFX0ogPSAzOAotS0VZQ09ERV9LID0gMzkKLUtFWUNPREVfTCA9IDQwCi1LRVlDT0RFX00gPSA0MQotS0VZQ09ERV9OID0gNDIKLUtFWUNPREVfTyA9IDQzCi1LRVlDT0RFX1AgPSA0NAotS0VZQ09ERV9RID0gNDUKLUtFWUNPREVfUiA9IDQ2Ci1LRVlDT0RFX1MgPSA0NwotS0VZQ09ERV9UID0gNDgKLUtFWUNPREVfVSA9IDQ5Ci1LRVlDT0RFX1YgPSA1MAotS0VZQ09ERV9XID0gNTEKLUtFWUNPREVfWCA9IDUyCi1LRVlDT0RFX1kgPSA1MwotS0VZQ09ERV9aID0gNTQKLQotS0VZQ09ERV9QRVJJT0QgPSA1NgotCi1LRVlDT0RFX1NQQUNFID0gNjIKLQotS0VZQ09ERV9FTlRFUiA9IDY2Ci1LRVlDT0RFX0RFTCA9IDY3Ci0KLUtFWUNPREVfTUVOVSA9IDgyCi0KLUtFWUNPREVfQVBQX1NXSVRDSCA9IDE4NwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvc2hhcmVkX3ByZWZzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvc2hhcmVkX3ByZWZzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmEyZTZhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL3NoYXJlZF9wcmVmcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQyMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIkhlbHBlciBvYmplY3QgdG8gcmVhZCBhbmQgbW9kaWZ5IFNoYXJlZCBQcmVmZXJlbmNlcyBmcm9tIEFuZHJvaWQgYXBwcy4KLQotU2VlIGUuZy46Ci0gIGh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvY29udGVudC9TaGFyZWRQcmVmZXJlbmNlcy5odG1sCi0iIiIKLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBwb3NpeHBhdGgKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCB2ZXJzaW9uX2NvZGVzCi1mcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUKLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotX1hNTF9ERUNMQVJBVElPTiA9ICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1dGYtOCcgc3RhbmRhbG9uZT0neWVzJyA/PlxuIgotCi0KLWNsYXNzIEJhc2VQcmVmKG9iamVjdCk6Ci0gICIiIkJhc2UgY2xhc3MgZm9yIGdldHRpbmcvc2V0dGluZyB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpYyBwcmVmZXJlbmNlIHR5cGUuCi0KLSAgU2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuIFRoZSBTaGFyZWRQcmVmcyBjb2xsZWN0aW9uIHdpbGwKLSAgaW5zdGFudGlhdGUgdGhlIGFwcHJvcHJpYXRlIHN1YmNsYXNzZXMsIHdoaWNoIGRpcmVjdGx5IG1hbmlwdWxhdGUgdGhlCi0gIHVuZGVybHlpbmcgeG1sIGRvY3VtZW50LCB0byBwYXJzZSBhbmQgc2VyaWFsaXplIHZhbHVlcyBhY2NvcmRpbmcgdG8gdGhlaXIKLSAgdHlwZS4KLQotICBBcmdzOgotICAgIGVsZW06IEFuIHhtbCBFbGVtZW50VHJlZSBvYmplY3QgaG9sZGluZyB0aGUgcHJlZmVyZW5jZSBkYXRhLgotCi0gIFByb3BlcnRpZXM6Ci0gICAgdGFnX25hbWU6IEEgc3RyaW5nIHdpdGggdGhlIHRhZyB0aGF0IG11c3QgYmUgdXNlZCBmb3IgdGhpcyBwcmVmZXJlbmNlIHR5cGUuCi0gICIiIgotICB0YWdfbmFtZSA9IE5vbmUKLQotICBkZWYgX19pbml0X18oc2VsZiwgZWxlbSk6Ci0gICAgaWYgZWxlbS50YWcgIT0gdHlwZShzZWxmKS50YWdfbmFtZToKLSAgICAgIHJhaXNlIFR5cGVFcnJvcignUHJvcGVydHkgJXIgaGFzIHR5cGUgJXIsIGJ1dCB0cnlpbmcgdG8gYWNjZXNzIGFzICVyJyAlCi0gICAgICAgICAgICAgICAgICAgICAgKGVsZW0uZ2V0KCduYW1lJyksIGVsZW0udGFnLCB0eXBlKHNlbGYpLnRhZ19uYW1lKSkKLSAgICBzZWxmLl9lbGVtID0gZWxlbQotCi0gIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICIiIkdldCB0aGUgdW5kZXJseWluZyB4bWwgZWxlbWVudCBhcyBhIHN0cmluZy4iIiIKLSAgICByZXR1cm4gRWxlbWVudFRyZWUudG9zdHJpbmcoc2VsZi5fZWxlbSkKLQotICBkZWYgZ2V0KHNlbGYpOgotICAgICIiIkdldCB0aGUgdmFsdWUgb2YgdGhpcyBwcmVmZXJlbmNlLiIiIgotICAgIHJldHVybiBzZWxmLl9lbGVtLmdldCgndmFsdWUnKQotCi0gIGRlZiBzZXQoc2VsZiwgdmFsdWUpOgotICAgICIiIlNldCBmcm9tIGEgdmFsdWUgY2FzdGVkIGFzIGEgc3RyaW5nLiIiIgotICAgIHNlbGYuX2VsZW0uc2V0KCd2YWx1ZScsIHN0cih2YWx1ZSkpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBoYXNfdmFsdWUoc2VsZik6Ci0gICAgIiIiQ2hlY2sgd2hldGhlciB0aGUgZWxlbWVudCBoYXMgYSB2YWx1ZS4iIiIKLSAgICByZXR1cm4gc2VsZi5fZWxlbS5nZXQoJ3ZhbHVlJykgaXMgbm90IE5vbmUKLQotCi1jbGFzcyBCb29sZWFuUHJlZihCYXNlUHJlZik6Ci0gICIiIkNsYXNzIGZvciBnZXR0aW5nL3NldHRpbmcgYSBwcmVmZXJlbmNlIHdpdGggYSBib29sZWFuIHZhbHVlLgotCi0gIFRoZSB1bmRlcmx5aW5nIHhtbCBlbGVtZW50IGhhcyB0aGUgZm9ybSwgZS5nLjoKLSAgICAgIDxib29sZWFuIG5hbWU9ImZlYXR1cmVFbmFibGVkIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICIiIgotICB0YWdfbmFtZSA9ICdib29sZWFuJwotICBWQUxVRVMgPSB7J3RydWUnOiBUcnVlLCAnZmFsc2UnOiBGYWxzZX0KLQotICBkZWYgZ2V0KHNlbGYpOgotICAgICIiIkdldCB0aGUgdmFsdWUgYXMgYSBQeXRob24gYm9vbC4iIiIKLSAgICByZXR1cm4gdHlwZShzZWxmKS5WQUxVRVNbc3VwZXIoQm9vbGVhblByZWYsIHNlbGYpLmdldCgpXQotCi0gIGRlZiBzZXQoc2VsZiwgdmFsdWUpOgotICAgICIiIlNldCBmcm9tIGEgdmFsdWUgY2FzdGVkIGFzIGEgYm9vbC4iIiIKLSAgICBzdXBlcihCb29sZWFuUHJlZiwgc2VsZikuc2V0KCd0cnVlJyBpZiB2YWx1ZSBlbHNlICdmYWxzZScpCi0KLQotY2xhc3MgRmxvYXRQcmVmKEJhc2VQcmVmKToKLSAgIiIiQ2xhc3MgZm9yIGdldHRpbmcvc2V0dGluZyBhIHByZWZlcmVuY2Ugd2l0aCBhIGZsb2F0IHZhbHVlLgotCi0gIFRoZSB1bmRlcmx5aW5nIHhtbCBlbGVtZW50IGhhcyB0aGUgZm9ybSwgZS5nLjoKLSAgICAgIDxmbG9hdCBuYW1lPSJzb21lTWV0cmljIiB2YWx1ZT0iNC43IiAvPgotICAiIiIKLSAgdGFnX25hbWUgPSAnZmxvYXQnCi0KLSAgZGVmIGdldChzZWxmKToKLSAgICAiIiJHZXQgdGhlIHZhbHVlIGFzIGEgUHl0aG9uIGZsb2F0LiIiIgotICAgIHJldHVybiBmbG9hdChzdXBlcihGbG9hdFByZWYsIHNlbGYpLmdldCgpKQotCi0KLWNsYXNzIEludFByZWYoQmFzZVByZWYpOgotICAiIiJDbGFzcyBmb3IgZ2V0dGluZy9zZXR0aW5nIGEgcHJlZmVyZW5jZSB3aXRoIGFuIGludCB2YWx1ZS4KLQotICBUaGUgdW5kZXJseWluZyB4bWwgZWxlbWVudCBoYXMgdGhlIGZvcm0sIGUuZy46Ci0gICAgICA8aW50IG5hbWU9ImFDb3VudGVyIiB2YWx1ZT0iMTIzNCIgLz4KLSAgIiIiCi0gIHRhZ19uYW1lID0gJ2ludCcKLQotICBkZWYgZ2V0KHNlbGYpOgotICAgICIiIkdldCB0aGUgdmFsdWUgYXMgYSBQeXRob24gaW50LiIiIgotICAgIHJldHVybiBpbnQoc3VwZXIoSW50UHJlZiwgc2VsZikuZ2V0KCkpCi0KLQotY2xhc3MgTG9uZ1ByZWYoSW50UHJlZik6Ci0gICIiIkNsYXNzIGZvciBnZXR0aW5nL3NldHRpbmcgYSBwcmVmZXJlbmNlIHdpdGggYSBsb25nIHZhbHVlLgotCi0gIFRoZSB1bmRlcmx5aW5nIHhtbCBlbGVtZW50IGhhcyB0aGUgZm9ybSwgZS5nLjoKLSAgICAgIDxsb25nIG5hbWU9ImFMb25nQ291bnRlciIgdmFsdWU9IjEyMzQiIC8+Ci0KLSAgV2UgdXNlIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGZyb20gSW50UHJlZi4KLSAgIiIiCi0gIHRhZ19uYW1lID0gJ2xvbmcnCi0KLQotY2xhc3MgU3RyaW5nUHJlZihCYXNlUHJlZik6Ci0gICIiIkNsYXNzIGZvciBnZXR0aW5nL3NldHRpbmcgYSBwcmVmZXJlbmNlIHdpdGggYSBzdHJpbmcgdmFsdWUuCi0KLSAgVGhlIHVuZGVybHlpbmcgeG1sIGVsZW1lbnQgaGFzIHRoZSBmb3JtLCBlLmcuOgotICAgICAgPHN0cmluZyBuYW1lPSJzb21lSGFzaFZhbHVlIj4yNDliM2U1YWYxM2Q0ZGIyPC9zdHJpbmc+Ci0gICIiIgotICB0YWdfbmFtZSA9ICdzdHJpbmcnCi0KLSAgZGVmIGdldChzZWxmKToKLSAgICAiIiJHZXQgdGhlIHZhbHVlIGFzIGEgUHl0aG9uIHN0cmluZy4iIiIKLSAgICByZXR1cm4gc2VsZi5fZWxlbS50ZXh0Ci0KLSAgZGVmIHNldChzZWxmLCB2YWx1ZSk6Ci0gICAgIiIiU2V0IGZyb20gYSB2YWx1ZSBjYXN0ZWQgYXMgYSBzdHJpbmcuIiIiCi0gICAgc2VsZi5fZWxlbS50ZXh0ID0gc3RyKHZhbHVlKQotCi0KLWNsYXNzIFN0cmluZ1NldFByZWYoU3RyaW5nUHJlZik6Ci0gICIiIkNsYXNzIGZvciBnZXR0aW5nL3NldHRpbmcgYSBwcmVmZXJlbmNlIHdpdGggYSBzZXQgb2Ygc3RyaW5nIHZhbHVlcy4KLQotICBUaGUgdW5kZXJseWluZyB4bWwgZWxlbWVudCBoYXMgdGhlIGZvcm0sIGUuZy46Ci0gICAgICA8c2V0IG5hbWU9Im1hbmFnZWRfYXBwcyI+Ci0gICAgICAgICAgPHN0cmluZz5jb20ubWluZS5hcHAxPC9zdHJpbmc+Ci0gICAgICAgICAgPHN0cmluZz5jb20ubWluZS5hcHAyPC9zdHJpbmc+Ci0gICAgICAgICAgPHN0cmluZz5jb20ubWluZS5hcHAzPC9zdHJpbmc+Ci0gICAgICA8L3NldD4KLSAgIiIiCi0gIHRhZ19uYW1lID0gJ3NldCcKLQotICBkZWYgZ2V0KHNlbGYpOgotICAgICIiIkdldCBhIGxpc3Qgd2l0aCB0aGUgc3RyaW5nIHZhbHVlcyBjb250YWluZWQuIiIiCi0gICAgdmFsdWUgPSBbXQotICAgIGZvciBjaGlsZCBpbiBzZWxmLl9lbGVtOgotICAgICAgYXNzZXJ0IGNoaWxkLnRhZyA9PSAnc3RyaW5nJwotICAgICAgdmFsdWUuYXBwZW5kKGNoaWxkLnRleHQpCi0gICAgcmV0dXJuIHZhbHVlCi0KLSAgZGVmIHNldChzZWxmLCB2YWx1ZSk6Ci0gICAgIiIiU2V0IGZyb20gYSBzZXF1ZW5jZSBvZiB2YWx1ZXMsIGVhY2ggY2FzdGVkIGFzIGEgc3RyaW5nLiIiIgotICAgIGZvciBjaGlsZCBpbiBsaXN0KHNlbGYuX2VsZW0pOgotICAgICAgc2VsZi5fZWxlbS5yZW1vdmUoY2hpbGQpCi0gICAgZm9yIGl0ZW0gaW4gdmFsdWU6Ci0gICAgICBFbGVtZW50VHJlZS5TdWJFbGVtZW50KHNlbGYuX2VsZW0sICdzdHJpbmcnKS50ZXh0ID0gc3RyKGl0ZW0pCi0KLQotX1BSRUZfVFlQRVMgPSB7Yy50YWdfbmFtZTogYyBmb3IgYyBpbiBbQm9vbGVhblByZWYsIEZsb2F0UHJlZiwgSW50UHJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvbmdQcmVmLCBTdHJpbmdQcmVmLCBTdHJpbmdTZXRQcmVmXX0KLQotCi1jbGFzcyBTaGFyZWRQcmVmcyhvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2UsIHBhY2thZ2UsIGZpbGVuYW1lKToKLSAgICAiIiJIZWxwZXIgb2JqZWN0IHRvIHJlYWQgYW5kIHVwZGF0ZSAiU2hhcmVkIFByZWZzIiBvZiBBbmRyb2lkIGFwcHMuCi0KLSAgICBTdWNoIGZpbGVzIHR5cGljYWxseSBsb29rIGxpa2UsIGUuZy46Ci0KLSAgICAgICAgPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnIHN0YW5kYWxvbmU9J3llcycgPz4KLSAgICAgICAgPG1hcD4KLSAgICAgICAgICA8aW50IG5hbWU9ImRhdGFiYXNlVmVyc2lvbiIgdmFsdWU9IjEwNyIgLz4KLSAgICAgICAgICA8Ym9vbGVhbiBuYW1lPSJmZWF0dXJlRW5hYmxlZCIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgICAgIDxzdHJpbmcgbmFtZT0ic29tZUhhc2hWYWx1ZSI+MjQ5YjNlNWFmMTNkNGRiMjwvc3RyaW5nPgotICAgICAgICA8L21hcD4KLQotICAgIEV4YW1wbGUgdXNhZ2U6Ci0KLSAgICAgICAgcHJlZnMgPSBzaGFyZWRfcHJlZnMuU2hhcmVkUHJlZnMoZGV2aWNlLCAnY29tLm15LmFwcCcsICdteV9wcmVmcy54bWwnKQotICAgICAgICBwcmVmcy5Mb2FkKCkKLSAgICAgICAgcHJlZnMuR2V0U3RyaW5nKCdzb21lSGFzaFZhbHVlJykgIyA9PiAnMjQ5YjNlNWFmMTNkNGRiMicKLSAgICAgICAgcHJlZnMuU2V0SW50KCdkYXRhYmFzZVZlcnNpb24nLCA0MikKLSAgICAgICAgcHJlZnMuUmVtb3ZlKCdmZWF0dXJlRW5hYmxlZCcpCi0gICAgICAgIHByZWZzLkNvbW1pdCgpCi0KLSAgICBUaGUgb2JqZWN0IG1heSBhbHNvIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgdG8gYXV0b21hdGljYWxseSBsb2FkIGFuZAotICAgIGNvbW1pdCwgcmVzcGVjdGl2ZWx5LCB1cG9uIGVudGVyaW5nIGFuZCBsZWF2aW5nIHRoZSBjb250ZXh0LgotCi0gICAgQXJnczoKLSAgICAgIGRldmljZTogQSBEZXZpY2VVdGlscyBvYmplY3QuCi0gICAgICBwYWNrYWdlOiBBIHN0cmluZyB3aXRoIHRoZSBwYWNrYWdlIG5hbWUgb2YgdGhlIGFwcCB0aGF0IG93bnMgdGhlIHNoYXJlZAotICAgICAgICBwcmVmZXJlbmNlcyBmaWxlLgotICAgICAgZmlsZW5hbWU6IEEgc3RyaW5nIHdpdGggdGhlIG5hbWUgb2YgdGhlIHByZWZlcmVuY2VzIGZpbGUgdG8gcmVhZC93cml0ZS4KLSAgICAiIiIKLSAgICBzZWxmLl9kZXZpY2UgPSBkZXZpY2UKLSAgICBzZWxmLl94bWwgPSBOb25lCi0gICAgc2VsZi5fcGFja2FnZSA9IHBhY2thZ2UKLSAgICBzZWxmLl9maWxlbmFtZSA9IGZpbGVuYW1lCi0gICAgc2VsZi5fcGF0aCA9ICcvZGF0YS9kYXRhLyVzL3NoYXJlZF9wcmVmcy8lcycgJSAocGFja2FnZSwgZmlsZW5hbWUpCi0gICAgc2VsZi5fY2hhbmdlZCA9IEZhbHNlCi0KLSAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICIiIkdldCBhIHVzZWZ1bCBwcmludGFibGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdC4iIiIKLSAgICByZXR1cm4gJzx7Y2xzfSBmaWxlIHtmaWxlbmFtZX0gZm9yIHtwYWNrYWdlfSBvbiB7ZGV2aWNlfT4nLmZvcm1hdCgKLSAgICAgIGNscz10eXBlKHNlbGYpLl9fbmFtZV9fLCBmaWxlbmFtZT1zZWxmLmZpbGVuYW1lLCBwYWNrYWdlPXNlbGYucGFja2FnZSwKLSAgICAgIGRldmljZT1zdHIoc2VsZi5fZGV2aWNlKSkKLQotICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAiIiJHZXQgdGhlIHVuZGVybHlpbmcgeG1sIGRvY3VtZW50IGFzIGEgc3RyaW5nLiIiIgotICAgIHJldHVybiBfWE1MX0RFQ0xBUkFUSU9OICsgRWxlbWVudFRyZWUudG9zdHJpbmcoc2VsZi54bWwpCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBwYWNrYWdlKHNlbGYpOgotICAgICIiIkdldCB0aGUgcGFja2FnZSBuYW1lIG9mIHRoZSBhcHAgdGhhdCBvd25zIHRoZSBzaGFyZWQgcHJlZmVyZW5jZXMuIiIiCi0gICAgcmV0dXJuIHNlbGYuX3BhY2thZ2UKLQotICBAcHJvcGVydHkKLSAgZGVmIGZpbGVuYW1lKHNlbGYpOgotICAgICIiIkdldCB0aGUgZmlsZW5hbWUgb2YgdGhlIHNoYXJlZCBwcmVmZXJlbmNlcyBmaWxlLiIiIgotICAgIHJldHVybiBzZWxmLl9maWxlbmFtZQotCi0gIEBwcm9wZXJ0eQotICBkZWYgcGF0aChzZWxmKToKLSAgICAiIiJHZXQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgc2hhcmVkIHByZWZlcmVuY2VzIGZpbGUgb24gdGhlIGRldmljZS4iIiIKLSAgICByZXR1cm4gc2VsZi5fcGF0aAotCi0gIEBwcm9wZXJ0eQotICBkZWYgY2hhbmdlZChzZWxmKToKLSAgICAiIiJUcnVlIGlmIHByb3BlcnRpZXMgaGF2ZSBjaGFuZ2VkIGFuZCBhIGNvbW1pdCB3b3VsZCBiZSBuZWVkZWQuIiIiCi0gICAgcmV0dXJuIHNlbGYuX2NoYW5nZWQKLQotICBAcHJvcGVydHkKLSAgZGVmIHhtbChzZWxmKToKLSAgICAiIiJHZXQgdGhlIHVuZGVybHlpbmcgeG1sIGRvY3VtZW50IGFzIGFuIEVsZW1lbnRUcmVlIG9iamVjdC4iIiIKLSAgICBpZiBzZWxmLl94bWwgaXMgTm9uZToKLSAgICAgIHNlbGYuX3htbCA9IEVsZW1lbnRUcmVlLkVsZW1lbnQoJ21hcCcpCi0gICAgcmV0dXJuIHNlbGYuX3htbAotCi0gIGRlZiBMb2FkKHNlbGYpOgotICAgICIiIkxvYWQgdGhlIHNoYXJlZCBwcmVmZXJlbmNlcyBmaWxlIGZyb20gdGhlIGRldmljZS4KLQotICAgIEEgZW1wdHkgeG1sIGRvY3VtZW50LCB3aGljaCBtYXkgYmUgbW9kaWZpZWQgYW5kIHNhdmVkIG9uIHxjb21taXR8LCBpcwotICAgIGNyZWF0ZWQgaWYgdGhlIGZpbGUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KLSAgICAiIiIKLSAgICBpZiBzZWxmLl9kZXZpY2UuRmlsZUV4aXN0cyhzZWxmLnBhdGgpOgotICAgICAgc2VsZi5feG1sID0gRWxlbWVudFRyZWUuZnJvbXN0cmluZygKLSAgICAgICAgICBzZWxmLl9kZXZpY2UuUmVhZEZpbGUoc2VsZi5wYXRoLCBhc19yb290PVRydWUpKQotICAgICAgYXNzZXJ0IHNlbGYuX3htbC50YWcgPT0gJ21hcCcKLSAgICBlbHNlOgotICAgICAgc2VsZi5feG1sID0gTm9uZQotICAgIHNlbGYuX2NoYW5nZWQgPSBGYWxzZQotCi0gIGRlZiBDbGVhcihzZWxmKToKLSAgICAiIiJDbGVhciBhbGwgb2YgdGhlIHByZWZlcmVuY2VzIGNvbnRhaW5lZCBpbiB0aGlzIG9iamVjdC4iIiIKLSAgICBpZiBzZWxmLl94bWwgaXMgbm90IE5vbmUgYW5kIGxlbihzZWxmKTogICMgb25seSBjbGVhciBpZiBub3QgYWxyZWFkeSBlbXB0eQotICAgICAgc2VsZi5feG1sID0gTm9uZQotICAgICAgc2VsZi5fY2hhbmdlZCA9IFRydWUKLQotICBkZWYgQ29tbWl0KHNlbGYpOgotICAgICIiIlNhdmUgdGhlIGN1cnJlbnQgc2V0IG9mIHByZWZlcmVuY2VzIHRvIHRoZSBkZXZpY2UuCi0KLSAgICBPbmx5IGFjdHVhbGx5IHNhdmVzIGlmIHNvbWUgcHJlZmVyZW5jZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLgotICAgICIiIgotICAgIGlmIG5vdCBzZWxmLmNoYW5nZWQ6Ci0gICAgICByZXR1cm4KLSAgICBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBbJ21rZGlyJywgJy1wJywgcG9zaXhwYXRoLmRpcm5hbWUoc2VsZi5wYXRoKV0sCi0gICAgICAgIGFzX3Jvb3Q9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgc2VsZi5fZGV2aWNlLldyaXRlRmlsZShzZWxmLnBhdGgsIHN0cihzZWxmKSwgYXNfcm9vdD1UcnVlKQotICAgICMgQ3JlYXRpbmcgdGhlIGRpcmVjdG9yeS9maWxlIGNhbiBjYXVzZSBpc3N1ZXMgd2l0aCBTRUxpbnV4IGlmIHRoZXkgZGlkCi0gICAgIyBub3QgYWxyZWFkeSBleGlzdC4gQXMgYSB3b3JrYXJvdW5kLCBhcHBseSB0aGUgcGFja2FnZSdzIHNlY3VyaXR5IGNvbnRleHQKLSAgICAjIHRvIHRoZSBzaGFyZWRfcHJlZnMgZGlyZWN0b3J5LCB3aGljaCBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIGEgZmlsZQotICAgICMgY3JlYXRlZCBieSB0aGUgYXBwIGl0c2VsZgotICAgIGlmIHNlbGYuX2RldmljZS5idWlsZF92ZXJzaW9uX3NkayA+PSB2ZXJzaW9uX2NvZGVzLk1BUlNITUFMTE9XOgotICAgICAgc2VjdXJpdHlfY29udGV4dCA9IHNlbGYuX0dldFNlY3VyaXR5Q29udGV4dChzZWxmLnBhY2thZ2UpCi0gICAgICBpZiBzZWN1cml0eV9jb250ZXh0ID09IE5vbmU6Ci0gICAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAgICAgJ0ZhaWxlZCB0byBnZXQgc2VjdXJpdHkgY29udGV4dCBmb3IgJXMnICUgc2VsZi5wYWNrYWdlKQotICAgICAgc2VsZi5fZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICBbJ2NoY29uJywgJy1SJywgc2VjdXJpdHlfY29udGV4dCwKLSAgICAgICAgICAgJy9kYXRhL2RhdGEvJXMvc2hhcmVkX3ByZWZzJyAlIHNlbGYucGFja2FnZV0sCi0gICAgICAgICAgYXNfcm9vdD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSkKLSAgICBzZWxmLl9kZXZpY2UuS2lsbEFsbChzZWxmLnBhY2thZ2UsIGV4YWN0PVRydWUsIGFzX3Jvb3Q9VHJ1ZSwgcXVpZXQ9VHJ1ZSkKLSAgICBzZWxmLl9jaGFuZ2VkID0gRmFsc2UKLQotICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAiIiJHZXQgdGhlIG51bWJlciBvZiBwcmVmZXJlbmNlcyBpbiB0aGlzIGNvbGxlY3Rpb24uIiIiCi0gICAgcmV0dXJuIGxlbihzZWxmLnhtbCkKLQotICBkZWYgUHJvcGVydHlUeXBlKHNlbGYsIGtleSk6Ci0gICAgIiIiR2V0IHRoZSB0eXBlIChpLmUuIHRhZyBuYW1lKSBvZiBhIHByb3BlcnR5IGluIHRoZSBjb2xsZWN0aW9uLiIiIgotICAgIHJldHVybiBzZWxmLl9HZXRDaGlsZChrZXkpLnRhZwotCi0gIGRlZiBIYXNQcm9wZXJ0eShzZWxmLCBrZXkpOgotICAgIHRyeToKLSAgICAgIHNlbGYuX0dldENoaWxkKGtleSkKLSAgICAgIHJldHVybiBUcnVlCi0gICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgZGVmIEdldEJvb2xlYW4oc2VsZiwga2V5KToKLSAgICAiIiJHZXQgYSBib29sZWFuIHByb3BlcnR5LiIiIgotICAgIHJldHVybiBCb29sZWFuUHJlZihzZWxmLl9HZXRDaGlsZChrZXkpKS5nZXQoKQotCi0gIGRlZiBTZXRCb29sZWFuKHNlbGYsIGtleSwgdmFsdWUpOgotICAgICIiIlNldCBhIGJvb2xlYW4gcHJvcGVydHkuIiIiCi0gICAgc2VsZi5fU2V0UHJlZlZhbHVlKGtleSwgdmFsdWUsIEJvb2xlYW5QcmVmKQotCi0gIGRlZiBHZXRGbG9hdChzZWxmLCBrZXkpOgotICAgICIiIkdldCBhIGZsb2F0IHByb3BlcnR5LiIiIgotICAgIHJldHVybiBGbG9hdFByZWYoc2VsZi5fR2V0Q2hpbGQoa2V5KSkuZ2V0KCkKLQotICBkZWYgU2V0RmxvYXQoc2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgIiIiU2V0IGEgZmxvYXQgcHJvcGVydHkuIiIiCi0gICAgc2VsZi5fU2V0UHJlZlZhbHVlKGtleSwgdmFsdWUsIEZsb2F0UHJlZikKLQotICBkZWYgR2V0SW50KHNlbGYsIGtleSk6Ci0gICAgIiIiR2V0IGFuIGludCBwcm9wZXJ0eS4iIiIKLSAgICByZXR1cm4gSW50UHJlZihzZWxmLl9HZXRDaGlsZChrZXkpKS5nZXQoKQotCi0gIGRlZiBTZXRJbnQoc2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgIiIiU2V0IGFuIGludCBwcm9wZXJ0eS4iIiIKLSAgICBzZWxmLl9TZXRQcmVmVmFsdWUoa2V5LCB2YWx1ZSwgSW50UHJlZikKLQotICBkZWYgR2V0TG9uZyhzZWxmLCBrZXkpOgotICAgICIiIkdldCBhIGxvbmcgcHJvcGVydHkuIiIiCi0gICAgcmV0dXJuIExvbmdQcmVmKHNlbGYuX0dldENoaWxkKGtleSkpLmdldCgpCi0KLSAgZGVmIFNldExvbmcoc2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgIiIiU2V0IGEgbG9uZyBwcm9wZXJ0eS4iIiIKLSAgICBzZWxmLl9TZXRQcmVmVmFsdWUoa2V5LCB2YWx1ZSwgTG9uZ1ByZWYpCi0KLSAgZGVmIEdldFN0cmluZyhzZWxmLCBrZXkpOgotICAgICIiIkdldCBhIHN0cmluZyBwcm9wZXJ0eS4iIiIKLSAgICByZXR1cm4gU3RyaW5nUHJlZihzZWxmLl9HZXRDaGlsZChrZXkpKS5nZXQoKQotCi0gIGRlZiBTZXRTdHJpbmcoc2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgIiIiU2V0IGEgc3RyaW5nIHByb3BlcnR5LiIiIgotICAgIHNlbGYuX1NldFByZWZWYWx1ZShrZXksIHZhbHVlLCBTdHJpbmdQcmVmKQotCi0gIGRlZiBHZXRTdHJpbmdTZXQoc2VsZiwga2V5KToKLSAgICAiIiJHZXQgYSBzdHJpbmcgc2V0IHByb3BlcnR5LiIiIgotICAgIHJldHVybiBTdHJpbmdTZXRQcmVmKHNlbGYuX0dldENoaWxkKGtleSkpLmdldCgpCi0KLSAgZGVmIFNldFN0cmluZ1NldChzZWxmLCBrZXksIHZhbHVlKToKLSAgICAiIiJTZXQgYSBzdHJpbmcgc2V0IHByb3BlcnR5LiIiIgotICAgIHNlbGYuX1NldFByZWZWYWx1ZShrZXksIHZhbHVlLCBTdHJpbmdTZXRQcmVmKQotCi0gIGRlZiBSZW1vdmUoc2VsZiwga2V5KToKLSAgICAiIiJSZW1vdmUgYSBwcmVmZXJlbmNlIGZyb20gdGhlIGNvbGxlY3Rpb24uIiIiCi0gICAgc2VsZi54bWwucmVtb3ZlKHNlbGYuX0dldENoaWxkKGtleSkpCi0KLSAgZGVmIEFzRGljdChzZWxmKToKLSAgICAiIiJSZXR1cm4gdGhlIHByb3BlcnRpZXMgYW5kIHRoZWlyIHZhbHVlcyBhcyBhIGRpY3Rpb25hcnkuIiIiCi0gICAgZCA9IHt9Ci0gICAgZm9yIGNoaWxkIGluIHNlbGYueG1sOgotICAgICAgcHJlZiA9IF9QUkVGX1RZUEVTW2NoaWxkLnRhZ10oY2hpbGQpCi0gICAgICBkW2NoaWxkLmdldCgnbmFtZScpXSA9IHByZWYuZ2V0KCkKLSAgICByZXR1cm4gZAotCi0gIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgIiIiTG9hZCBwcmVmZXJlbmNlcyBmaWxlIGZyb20gdGhlIGRldmljZSB3aGVuIGVudGVyaW5nIGEgY29udGV4dC4iIiIKLSAgICBzZWxmLkxvYWQoKQotICAgIHJldHVybiBzZWxmCi0KLSAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBfZXhjX3ZhbHVlLCBfdHJhY2ViYWNrKToKLSAgICAiIiJTYXZlIHByZWZlcmVuY2VzIGZpbGUgdG8gdGhlIGRldmljZSB3aGVuIGxlYXZpbmcgYSBjb250ZXh0LiIiIgotICAgIGlmIG5vdCBleGNfdHlwZToKLSAgICAgIHNlbGYuQ29tbWl0KCkKLQotICBkZWYgX0dldENoaWxkKHNlbGYsIGtleSk6Ci0gICAgIiIiR2V0IHRoZSB1bmRlcmx5aW5nIHhtbCBub2RlIHRoYXQgaG9sZHMgdGhlIHByb3BlcnR5IG9mIGEgZ2l2ZW4ga2V5LgotCi0gICAgUmFpc2VzOgotICAgICAgS2V5RXJyb3Igd2hlbiB0aGUga2V5IGlzIG5vdCBmb3VuZCBpbiB0aGUgY29sbGVjdGlvbi4KLSAgICAiIiIKLSAgICBmb3IgY2hpbGQgaW4gc2VsZi54bWw6Ci0gICAgICBpZiBjaGlsZC5nZXQoJ25hbWUnKSA9PSBrZXk6Ci0gICAgICAgIHJldHVybiBjaGlsZAotICAgIHJhaXNlIEtleUVycm9yKGtleSkKLQotICBkZWYgX1NldFByZWZWYWx1ZShzZWxmLCBrZXksIHZhbHVlLCBwcmVmX2Nscyk6Ci0gICAgIiIiU2V0IHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5LgotCi0gICAgQXJnczoKLSAgICAgIGtleTogVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LgotICAgICAgdmFsdWU6IFRoZSBuZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5LgotICAgICAgcHJlZl9jbHM6IEEgc3ViY2xhc3Mgb2YgQmFzZVByZWYgdXNlZCB0byBhY2Nlc3MgdGhlIHByb3BlcnR5LgotCi0gICAgUmFpc2VzOgotICAgICAgVHlwZUVycm9yIHdoZW4gdGhlIGtleSBhbHJlYWR5IGV4aXN0cyBidXQgd2l0aCBhIGRpZmZlcmVudCB0eXBlLgotICAgICIiIgotICAgIHRyeToKLSAgICAgIHByZWYgPSBwcmVmX2NscyhzZWxmLl9HZXRDaGlsZChrZXkpKQotICAgICAgb2xkX3ZhbHVlID0gcHJlZi5nZXQoKQotICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgIHByZWYgPSBwcmVmX2NscyhFbGVtZW50VHJlZS5TdWJFbGVtZW50KAotICAgICAgICAgIHNlbGYueG1sLCBwcmVmX2Nscy50YWdfbmFtZSwgeyduYW1lJzoga2V5fSkpCi0gICAgICBvbGRfdmFsdWUgPSBOb25lCi0gICAgaWYgb2xkX3ZhbHVlICE9IHZhbHVlOgotICAgICAgcHJlZi5zZXQodmFsdWUpCi0gICAgICBzZWxmLl9jaGFuZ2VkID0gVHJ1ZQotICAgICAgbG9nZ2VyLmluZm8oJ1NldHRpbmcgcHJvcGVydHk6ICVzJywgcHJlZikKLQotICBkZWYgX0dldFNlY3VyaXR5Q29udGV4dChzZWxmLCBwYWNrYWdlKToKLSAgICBmb3IgbGluZSBpbiBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKFsnbHMnLCAnLVonLCAnL2RhdGEvZGF0YS8nXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzX3Jvb3Q9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpOgotICAgICAgc3BsaXRfbGluZSA9IGxpbmUuc3BsaXQoKQotICAgICAgIyBscyAtWiBvdXRwdXQgZGlmZmVycyBiZXR3ZWVuIEFuZHJvaWQgdmVyc2lvbnMsIGJ1dCB0aGUgcGFja2FnZSBpcwotICAgICAgIyBhbHdheXMgbGFzdCBhbmQgdGhlIGNvbnRleHQgYWx3YXlzIHN0YXJ0cyB3aXRoICJ1Om9iamVjdCIKLSAgICAgIGlmIHNwbGl0X2xpbmVbLTFdID09IHBhY2thZ2U6Ci0gICAgICAgIGZvciBjb2x1bW4gaW4gc3BsaXRfbGluZToKLSAgICAgICAgICBpZiBjb2x1bW4uc3RhcnRzd2l0aCgndTpvYmplY3QnKToKLSAgICAgICAgICAgIHJldHVybiBjb2x1bW4KLSAgICByZXR1cm4gTm9uZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvc2hhcmVkX3ByZWZzX3Rlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9zaGFyZWRfcHJlZnNfdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNGMzMWM1Ni4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9zaGFyZWRfcHJlZnNfdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiCi1Vbml0IHRlc3RzIGZvciB0aGUgY29udGVudHMgb2Ygc2hhcmVkX3ByZWZzLnB5IChtb3N0bHkgU2hhcmVkUHJlZnMpLgotIiIiCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBkZXZpbCBpbXBvcnQgZGV2aWxfZW52Ci1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgc2hhcmVkX3ByZWZzCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCB2ZXJzaW9uX2NvZGVzCi0KLXdpdGggZGV2aWxfZW52LlN5c1BhdGgoZGV2aWxfZW52LlBZTU9DS19QQVRIKToKLSAgaW1wb3J0IG1vY2sgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotCi0KLWRlZiBNb2NrRGV2aWNlV2l0aEZpbGVzKGZpbGVzPU5vbmUpOgotICBpZiBmaWxlcyBpcyBOb25lOgotICAgIGZpbGVzID0ge30KLQotICBkZWYgZmlsZV9leGlzdHMocGF0aCk6Ci0gICAgcmV0dXJuIHBhdGggaW4gZmlsZXMKLQotICBkZWYgd3JpdGVfZmlsZShwYXRoLCBjb250ZW50cywgKipfa3dhcmdzKToKLSAgICBmaWxlc1twYXRoXSA9IGNvbnRlbnRzCi0KLSAgZGVmIHJlYWRfZmlsZShwYXRoLCAqKl9rd2FyZ3MpOgotICAgIHJldHVybiBmaWxlc1twYXRoXQotCi0gIGRldmljZSA9IG1vY2suTWFnaWNNb2NrKHNwZWM9ZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKQotICBkZXZpY2UuRmlsZUV4aXN0cyA9IG1vY2suTW9jayhzaWRlX2VmZmVjdD1maWxlX2V4aXN0cykKLSAgZGV2aWNlLldyaXRlRmlsZSA9IG1vY2suTW9jayhzaWRlX2VmZmVjdD13cml0ZV9maWxlKQotICBkZXZpY2UuUmVhZEZpbGUgPSBtb2NrLk1vY2soc2lkZV9lZmZlY3Q9cmVhZF9maWxlKQotICByZXR1cm4gZGV2aWNlCi0KLQotY2xhc3MgU2hhcmVkUHJlZnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5kZXZpY2UgPSBNb2NrRGV2aWNlV2l0aEZpbGVzKHsKLSAgICAgICcvZGF0YS9kYXRhL2NvbS5zb21lLnBhY2thZ2Uvc2hhcmVkX3ByZWZzL3ByZWZzLnhtbCc6Ci0gICAgICAgICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04JyBzdGFuZGFsb25lPSd5ZXMnID8+XG4iCi0gICAgICAgICAgJzxtYXA+XG4nCi0gICAgICAgICAgJyAgPGludCBuYW1lPSJkYXRhYmFzZVZlcnNpb24iIHZhbHVlPSIxMDciIC8+XG4nCi0gICAgICAgICAgJyAgPGJvb2xlYW4gbmFtZT0iZmVhdHVyZUVuYWJsZWQiIHZhbHVlPSJmYWxzZSIgLz5cbicKLSAgICAgICAgICAnICA8c3RyaW5nIG5hbWU9InNvbWVIYXNoVmFsdWUiPjI0OWIzZTVhZjEzZDRkYjI8L3N0cmluZz5cbicKLSAgICAgICAgICAnPC9tYXA+J30pCi0gICAgc2VsZi5leHBlY3RlZF9kYXRhID0geydkYXRhYmFzZVZlcnNpb24nOiAxMDcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdmZWF0dXJlRW5hYmxlZCc6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnc29tZUhhc2hWYWx1ZSc6ICcyNDliM2U1YWYxM2Q0ZGIyJ30KLQotICBkZWYgdGVzdFByb3BlcnR5TGlmZXRpbWUoc2VsZik6Ci0gICAgcHJlZnMgPSBzaGFyZWRfcHJlZnMuU2hhcmVkUHJlZnMoCi0gICAgICAgIHNlbGYuZGV2aWNlLCAnY29tLnNvbWUucGFja2FnZScsICdwcmVmcy54bWwnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihwcmVmcyksIDApICAjIGNvbGxlY3Rpb24gaXMgZW1wdHkgYmVmb3JlIGxvYWRpbmcKLSAgICBwcmVmcy5TZXRJbnQoJ215VmFsdWUnLCA0NDQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHByZWZzKSwgMSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhwcmVmcy5HZXRJbnQoJ215VmFsdWUnKSwgNDQ0KQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcmVmcy5IYXNQcm9wZXJ0eSgnbXlWYWx1ZScpKQotICAgIHByZWZzLlJlbW92ZSgnbXlWYWx1ZScpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHByZWZzKSwgMCkKLSAgICBzZWxmLmFzc2VydEZhbHNlKHByZWZzLkhhc1Byb3BlcnR5KCdteVZhbHVlJykpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICBwcmVmcy5HZXRJbnQoJ215VmFsdWUnKQotCi0gIGRlZiB0ZXN0UHJvcGVydHlUeXBlKHNlbGYpOgotICAgIHByZWZzID0gc2hhcmVkX3ByZWZzLlNoYXJlZFByZWZzKAotICAgICAgICBzZWxmLmRldmljZSwgJ2NvbS5zb21lLnBhY2thZ2UnLCAncHJlZnMueG1sJykKLSAgICBwcmVmcy5TZXRJbnQoJ215VmFsdWUnLCA0NDQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMocHJlZnMuUHJvcGVydHlUeXBlKCdteVZhbHVlJyksICdpbnQnKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgIHByZWZzLkdldFN0cmluZygnbXlWYWx1ZScpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgcHJlZnMuU2V0U3RyaW5nKCdteVZhbHVlJywgJ2hlbGxvJykKLQotICBkZWYgdGVzdExvYWQoc2VsZik6Ci0gICAgcHJlZnMgPSBzaGFyZWRfcHJlZnMuU2hhcmVkUHJlZnMoCi0gICAgICAgIHNlbGYuZGV2aWNlLCAnY29tLnNvbWUucGFja2FnZScsICdwcmVmcy54bWwnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihwcmVmcyksIDApICAjIGNvbGxlY3Rpb24gaXMgZW1wdHkgYmVmb3JlIGxvYWRpbmcKLSAgICBwcmVmcy5Mb2FkKCkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocHJlZnMpLCBsZW4oc2VsZi5leHBlY3RlZF9kYXRhKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhwcmVmcy5Bc0RpY3QoKSwgc2VsZi5leHBlY3RlZF9kYXRhKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UocHJlZnMuY2hhbmdlZCkKLQotICBkZWYgdGVzdENsZWFyKHNlbGYpOgotICAgIHByZWZzID0gc2hhcmVkX3ByZWZzLlNoYXJlZFByZWZzKAotICAgICAgICBzZWxmLmRldmljZSwgJ2NvbS5zb21lLnBhY2thZ2UnLCAncHJlZnMueG1sJykKLSAgICBwcmVmcy5Mb2FkKCkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhwcmVmcy5Bc0RpY3QoKSwgc2VsZi5leHBlY3RlZF9kYXRhKQotICAgIHNlbGYuYXNzZXJ0RmFsc2UocHJlZnMuY2hhbmdlZCkKLSAgICBwcmVmcy5DbGVhcigpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHByZWZzKSwgMCkgICMgY29sbGVjdGlvbiBpcyBlbXB0eSBub3cKLSAgICBzZWxmLmFzc2VydFRydWUocHJlZnMuY2hhbmdlZCkKLQotICBkZWYgdGVzdENvbW1pdChzZWxmKToKLSAgICB0eXBlKHNlbGYuZGV2aWNlKS5idWlsZF92ZXJzaW9uX3NkayA9IG1vY2suUHJvcGVydHlNb2NrKAotICAgICAgICByZXR1cm5fdmFsdWU9dmVyc2lvbl9jb2Rlcy5MT0xMSVBPUF9NUjEpCi0gICAgcHJlZnMgPSBzaGFyZWRfcHJlZnMuU2hhcmVkUHJlZnMoCi0gICAgICAgIHNlbGYuZGV2aWNlLCAnY29tLnNvbWUucGFja2FnZScsICdvdGhlcl9wcmVmcy54bWwnKQotICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kZXZpY2UuRmlsZUV4aXN0cyhwcmVmcy5wYXRoKSkgICMgZmlsZSBkb2VzIG5vdCBleGlzdAotICAgIHByZWZzLkxvYWQoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihwcmVmcyksIDApICAjIGZpbGUgZGlkIG5vdCBleGlzdCwgY29sbGVjdGlvbiBpcyBlbXB0eQotICAgIHByZWZzLlNldEludCgnbWFnaWNOdW1iZXInLCA0MikKLSAgICBwcmVmcy5TZXRGbG9hdCgnbXlNZXRyaWMnLCAzLjE0KQotICAgIHByZWZzLlNldExvbmcoJ2JpZ051bW5lcicsIDYwMDAwMDAwMDApCi0gICAgcHJlZnMuU2V0U3RyaW5nU2V0KCdhcHBzJywgWydnbWFpbCcsICdjaHJvbWUnLCAnbXVzaWMnXSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZGV2aWNlLkZpbGVFeGlzdHMocHJlZnMucGF0aCkpICAjIHN0aWxsIGRvZXMgbm90IGV4aXN0Ci0gICAgc2VsZi5hc3NlcnRUcnVlKHByZWZzLmNoYW5nZWQpCi0gICAgcHJlZnMuQ29tbWl0KCkKLSAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kZXZpY2UuRmlsZUV4aXN0cyhwcmVmcy5wYXRoKSkgICMgc2hvdWxkIGV4aXN0IG5vdwotICAgIHNlbGYuZGV2aWNlLktpbGxBbGwuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgocHJlZnMucGFja2FnZSwgZXhhY3Q9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzX3Jvb3Q9VHJ1ZSwgcXVpZXQ9VHJ1ZSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKHByZWZzLmNoYW5nZWQpCi0KLSAgICBwcmVmcyA9IHNoYXJlZF9wcmVmcy5TaGFyZWRQcmVmcygKLSAgICAgICAgc2VsZi5kZXZpY2UsICdjb20uc29tZS5wYWNrYWdlJywgJ290aGVyX3ByZWZzLnhtbCcpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHByZWZzKSwgMCkgICMgY29sbGVjdGlvbiBpcyBlbXB0eSBiZWZvcmUgbG9hZGluZwotICAgIHByZWZzLkxvYWQoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHByZWZzLkFzRGljdCgpLCB7Ci0gICAgICAgICdtYWdpY051bWJlcic6IDQyLAotICAgICAgICAnbXlNZXRyaWMnOiAzLjE0LAotICAgICAgICAnYmlnTnVtbmVyJzogNjAwMDAwMDAwMCwKLSAgICAgICAgJ2FwcHMnOiBbJ2dtYWlsJywgJ2Nocm9tZScsICdtdXNpYyddfSkgICMgZGF0YSBzdXJ2aXZlZCByb3VuZHRyaXAKLQotICBkZWYgdGVzdEFzQ29udGV4dE1hbmFnZXJfb25seVJlYWRzKHNlbGYpOgotICAgIHdpdGggc2hhcmVkX3ByZWZzLlNoYXJlZFByZWZzKAotICAgICAgICBzZWxmLmRldmljZSwgJ2NvbS5zb21lLnBhY2thZ2UnLCAncHJlZnMueG1sJykgYXMgcHJlZnM6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscyhwcmVmcy5Bc0RpY3QoKSwgc2VsZi5leHBlY3RlZF9kYXRhKSAgIyBsb2FkZWQgYW5kIHJlYWR5Ci0gICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kZXZpY2UuV3JpdGVGaWxlLmNhbGxfYXJnc19saXN0LCBbXSkgICMgZGlkIG5vdCB3cml0ZQotCi0gIGRlZiB0ZXN0QXNDb250ZXh0TWFuYWdlcl9yZWFkQW5kV3JpdGUoc2VsZik6Ci0gICAgdHlwZShzZWxmLmRldmljZSkuYnVpbGRfdmVyc2lvbl9zZGsgPSBtb2NrLlByb3BlcnR5TW9jaygKLSAgICAgICAgcmV0dXJuX3ZhbHVlPXZlcnNpb25fY29kZXMuTE9MTElQT1BfTVIxKQotICAgIHdpdGggc2hhcmVkX3ByZWZzLlNoYXJlZFByZWZzKAotICAgICAgICBzZWxmLmRldmljZSwgJ2NvbS5zb21lLnBhY2thZ2UnLCAncHJlZnMueG1sJykgYXMgcHJlZnM6Ci0gICAgICBwcmVmcy5TZXRCb29sZWFuKCdmZWF0dXJlRW5hYmxlZCcsIFRydWUpCi0gICAgICBwcmVmcy5SZW1vdmUoJ3NvbWVIYXNoVmFsdWUnKQotICAgICAgcHJlZnMuU2V0U3RyaW5nKCduZXdTdHJpbmcnLCAnaGVsbG8nKQotCi0gICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGV2aWNlLldyaXRlRmlsZS5jYWxsZWQpICAjIGRpZCB3cml0ZQotICAgIHdpdGggc2hhcmVkX3ByZWZzLlNoYXJlZFByZWZzKAotICAgICAgICBzZWxmLmRldmljZSwgJ2NvbS5zb21lLnBhY2thZ2UnLCAncHJlZnMueG1sJykgYXMgcHJlZnM6Ci0gICAgICAjIGNoYW5nZXMgcGVyc2lzdGVkCi0gICAgICBzZWxmLmFzc2VydFRydWUocHJlZnMuR2V0Qm9vbGVhbignZmVhdHVyZUVuYWJsZWQnKSkKLSAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHJlZnMuSGFzUHJvcGVydHkoJ3NvbWVIYXNoVmFsdWUnKSkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHByZWZzLkdldFN0cmluZygnbmV3U3RyaW5nJyksICdoZWxsbycpCi0gICAgICBzZWxmLmFzc2VydFRydWUocHJlZnMuSGFzUHJvcGVydHkoJ2RhdGFiYXNlVmVyc2lvbicpKSAgIyBzdGlsbCB0aGVyZQotCi0gIGRlZiB0ZXN0QXNDb250ZXh0TWFuYWdlcl9jb21taXRBYm9ydGVkKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgIHdpdGggc2hhcmVkX3ByZWZzLlNoYXJlZFByZWZzKAotICAgICAgICAgIHNlbGYuZGV2aWNlLCAnY29tLnNvbWUucGFja2FnZScsICdwcmVmcy54bWwnKSBhcyBwcmVmczoKLSAgICAgICAgcHJlZnMuU2V0Qm9vbGVhbignZmVhdHVyZUVuYWJsZWQnLCBUcnVlKQotICAgICAgICBwcmVmcy5SZW1vdmUoJ3NvbWVIYXNoVmFsdWUnKQotICAgICAgICBwcmVmcy5TZXRTdHJpbmcoJ25ld1N0cmluZycsICdoZWxsbycpCi0gICAgICAgIHByZWZzLlNldEludCgnbmV3U3RyaW5nJywgMTIzKSAgIyBvb3BzIQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kZXZpY2UuV3JpdGVGaWxlLmNhbGxfYXJnc19saXN0LCBbXSkgICMgZGlkIG5vdCB3cml0ZQotICAgIHdpdGggc2hhcmVkX3ByZWZzLlNoYXJlZFByZWZzKAotICAgICAgICBzZWxmLmRldmljZSwgJ2NvbS5zb21lLnBhY2thZ2UnLCAncHJlZnMueG1sJykgYXMgcHJlZnM6Ci0gICAgICAjIGNvbnRlbnRzIHdlcmUgbm90IG1vZGlmaWVkCi0gICAgICBzZWxmLmFzc2VydEVxdWFscyhwcmVmcy5Bc0RpY3QoKSwgc2VsZi5leHBlY3RlZF9kYXRhKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBsb2dnaW5nLmdldExvZ2dlcigpLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0gIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9zcGxpdF9zZWxlY3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay9zcGxpdF9zZWxlY3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjM2QyMzEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvc3BsaXRfc2VsZWN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJUaGlzIG1vZHVsZSB3cmFwcyBBbmRyb2lkJ3Mgc3BsaXQtc2VsZWN0IHRvb2wuIiIiCi0KLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IGJ1aWxkX3Rvb2xzCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBjbWRfaGVscGVyCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBsYXp5Ci0KLQotX3NwbGl0X3NlbGVjdF9wYXRoID0gbGF6eS5XZWFrQ29uc3RhbnQoCi0gICAgbGFtYmRhOiBidWlsZF90b29scy5HZXRQYXRoKCdzcGxpdC1zZWxlY3QnKSkKLQotCi1kZWYgX1J1blNwbGl0U2VsZWN0Q21kKGFyZ3MpOgotICAiIiJSdW5zIGEgc3BsaXQtc2VsZWN0IGNvbW1hbmQuCi0KLSAgQXJnczoKLSAgICBhcmdzOiBBIGxpc3Qgb2YgYXJndW1lbnRzIGZvciBzcGxpdC1zZWxlY3QuCi0KLSAgUmV0dXJuczoKLSAgICBUaGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kLgotICAiIiIKLSAgY21kID0gW19zcGxpdF9zZWxlY3RfcGF0aC5yZWFkKCldICsgYXJncwotICBzdGF0dXMsIG91dHB1dCA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0KGNtZCkKLSAgaWYgc3RhdHVzICE9IDA6Ci0gICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgcnVubmluZyBjb21tYW5kICIlcyIgd2l0aCBvdXRwdXQgIiVzIi4nICUKLSAgICAgICAgICAgICAgICAgICAgKCcgJy5qb2luKGNtZCksIG91dHB1dCkpCi0gIHJldHVybiBvdXRwdXQKLQotCi1kZWYgX1NwbGl0Q29uZmlnKGRldmljZSwgYWxsb3dfY2FjaGVkX3Byb3BzPUZhbHNlKToKLSAgIiIiUmV0dXJucyBhIGNvbmZpZyBzcGVjaWZ5aW5nIHdoaWNoIEFQSyBzcGxpdHMgYXJlIHJlcXVpcmVkIGJ5IHRoZSBkZXZpY2UuCi0KLSAgQXJnczoKLSAgICBkZXZpY2U6IEEgRGV2aWNlVXRpbHMgb2JqZWN0LgotICAgIGFsbG93X2NhY2hlZF9wcm9wczogV2hldGhlciB0byB1c2UgY2FjaGVkIHZhbHVlcyBmb3IgZGV2aWNlIHByb3BlcnRpZXMuCi0gICIiIgotICByZXR1cm4gKCclcy1yJXMtJXM6JXMnICUKLSAgICAgICAgICAoZGV2aWNlLkdldExhbmd1YWdlKGNhY2hlPWFsbG93X2NhY2hlZF9wcm9wcyksCi0gICAgICAgICAgIGRldmljZS5HZXRDb3VudHJ5KGNhY2hlPWFsbG93X2NhY2hlZF9wcm9wcyksCi0gICAgICAgICAgIGRldmljZS5zY3JlZW5fZGVuc2l0eSwKLSAgICAgICAgICAgZGV2aWNlLnByb2R1Y3RfY3B1X2FiaSkpCi0KLQotZGVmIFNlbGVjdFNwbGl0cyhkZXZpY2UsIGJhc2VfYXBrLCBzcGxpdF9hcGtzLCBhbGxvd19jYWNoZWRfcHJvcHM9RmFsc2UpOgotICAiIiJEZXRlcm1pbmVzIHdoaWNoIEFQSyBzcGxpdHMgdGhlIGRldmljZSByZXF1aXJlcy4KLQotICBBcmdzOgotICAgIGRldmljZTogQSBEZXZpY2VVdGlscyBvYmplY3QuCi0gICAgYmFzZV9hcGs6IFRoZSBwYXRoIG9mIHRoZSBiYXNlIEFQSy4KLSAgICBzcGxpdF9hcGtzOiBBIGxpc3Qgb2YgcGF0aHMgb2YgQVBLIHNwbGl0cy4KLSAgICBhbGxvd19jYWNoZWRfcHJvcHM6IFdoZXRoZXIgdG8gdXNlIGNhY2hlZCB2YWx1ZXMgZm9yIGRldmljZSBwcm9wZXJ0aWVzLgotCi0gIFJldHVybnM6Ci0gICAgVGhlIGxpc3Qgb2YgQVBLIHNwbGl0cyB0aGF0IHRoZSBkZXZpY2UgcmVxdWlyZXMuCi0gICIiIgotICBjb25maWcgPSBfU3BsaXRDb25maWcoZGV2aWNlLCBhbGxvd19jYWNoZWRfcHJvcHM9YWxsb3dfY2FjaGVkX3Byb3BzKQotICBhcmdzID0gWyctLXRhcmdldCcsIGNvbmZpZywgJy0tYmFzZScsIGJhc2VfYXBrXQotICBmb3Igc3BsaXQgaW4gc3BsaXRfYXBrczoKLSAgICBhcmdzLmV4dGVuZChbJy0tc3BsaXQnLCBzcGxpdF0pCi0gIHJldHVybiBfUnVuU3BsaXRTZWxlY3RDbWQoYXJncykuc3BsaXRsaW5lcygpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay90ZXN0L2RhdGEvcHVzaF9kaXJlY3RvcnkvcHVzaF9kaXJlY3RvcnlfY29udGVudHMudHh0IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvdGVzdC9kYXRhL3B1c2hfZGlyZWN0b3J5L3B1c2hfZGlyZWN0b3J5X2NvbnRlbnRzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczZGYyZS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay90ZXN0L2RhdGEvcHVzaF9kaXJlY3RvcnkvcHVzaF9kaXJlY3RvcnlfY29udGVudHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotR29vZG5pZ2h0LCBtb29uLgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvdGVzdC9kYXRhL3B1c2hfZmlsZS50eHQgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay90ZXN0L2RhdGEvcHVzaF9maWxlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY1NjI2Yi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay90ZXN0L2RhdGEvcHVzaF9maWxlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUhlbGxvLCB3b3JsZCEKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL3ZlcnNpb25fY29kZXMucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Nkay92ZXJzaW9uX2NvZGVzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzE0MzU5Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2RrL3ZlcnNpb25fY29kZXMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIkFuZHJvaWQgU0RLIHZlcnNpb24gY29kZXMuCi0KLWh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvb3MvQnVpbGQuVkVSU0lPTl9DT0RFUy5odG1sCi0iIiIKLQotSkVMTFlfQkVBTiA9IDE2Ci1KRUxMWV9CRUFOX01SMSA9IDE3Ci1KRUxMWV9CRUFOX01SMiA9IDE4Ci1LSVRLQVQgPSAxOQotS0lUS0FUX1dBVENIID0gMjAKLUxPTExJUE9QID0gMjEKLUxPTExJUE9QX01SMSA9IDIyCi1NQVJTSE1BTExPVyA9IDIzCi1OT1VHQVQgPSAyNAotTk9VR0FUX01SMSA9IDI1Ci1PID0gMjYKLU9fTVIxID0gMjcKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2V0dGluZ3MucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3NldHRpbmdzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzEzYmU0Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvc2V0dGluZ3MucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyODcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgbG9nZ2luZwotCi1sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotX0xPQ0tfU0NSRUVOX1NFVFRJTkdTX1BBVEggPSAnL2RhdGEvc3lzdGVtL2xvY2tzZXR0aW5ncy5kYicKLV9BTFRFUk5BVEVfTE9DS19TQ1JFRU5fU0VUVElOR1NfUEFUSCA9ICgKLSAgICAnL2RhdGEvZGF0YS9jb20uYW5kcm9pZC5wcm92aWRlcnMuc2V0dGluZ3MvZGF0YWJhc2VzL3NldHRpbmdzLmRiJykKLVBBU1NXT1JEX1FVQUxJVFlfVU5TUEVDSUZJRUQgPSAnMCcKLV9DT01QQVRJQkxFX0JVSUxEX1RZUEVTID0gWyd1c2VyZGVidWcnLCAnZW5nJ10KLQotCi1FTkFCTEVfTE9DQVRJT05fU0VUVElOR1MgPSBbCi0gICMgTm90ZSB0aGF0IHNldHRpbmcgdGhlc2UgaW4gdGhpcyBvcmRlciBpcyByZXF1aXJlZCBpbiBvcmRlciBmb3IgYWxsIG9mCi0gICMgdGhlbSB0byB0YWtlIGFuZCBzdGljayB0aHJvdWdoIGEgcmVib290LgotICAoJ2NvbS5nb29nbGUuc2V0dGluZ3MvcGFydG5lcicsIFsKLSAgICAoJ3VzZV9sb2NhdGlvbl9mb3Jfc2VydmljZXMnLCAxKSwKLSAgXSksCi0gICgnc2V0dGluZ3Mvc2VjdXJlJywgWwotICAgICMgRW5zdXJlIEdlb2xvY2F0aW9uIGlzIGVuYWJsZWQgYW5kIGFsbG93ZWQgZm9yIHRlc3RzLgotICAgICgnbG9jYXRpb25fcHJvdmlkZXJzX2FsbG93ZWQnLCAnZ3BzLG5ldHdvcmsnKSwKLSAgXSksCi0gICgnY29tLmdvb2dsZS5zZXR0aW5ncy9wYXJ0bmVyJywgWwotICAgICgnbmV0d29ya19sb2NhdGlvbl9vcHRfaW4nLCAxKSwKLSAgXSkKLV0KLQotRElTQUJMRV9MT0NBVElPTl9TRVRUSU5HUyA9IFsKLSAgKCdjb20uZ29vZ2xlLnNldHRpbmdzL3BhcnRuZXInLCBbCi0gICAgKCd1c2VfbG9jYXRpb25fZm9yX3NlcnZpY2VzJywgMCksCi0gIF0pLAotICAoJ3NldHRpbmdzL3NlY3VyZScsIFsKLSAgICAjIEVuc3VyZSBHZW9sb2NhdGlvbiBpcyBkaXNhYmxlZC4KLSAgICAoJ2xvY2F0aW9uX3Byb3ZpZGVyc19hbGxvd2VkJywgJycpLAotICBdKSwKLV0KLQotRU5BQkxFX01PQ0tfTE9DQVRJT05fU0VUVElOR1MgPSBbCi0gICgnc2V0dGluZ3Mvc2VjdXJlJywgWwotICAgICgnbW9ja19sb2NhdGlvbicsIDEpLAotICBdKSwKLV0KLQotRElTQUJMRV9NT0NLX0xPQ0FUSU9OX1NFVFRJTkdTID0gWwotICAoJ3NldHRpbmdzL3NlY3VyZScsIFsKLSAgICAoJ21vY2tfbG9jYXRpb24nLCAwKSwKLSAgXSksCi1dCi0KLURFVEVSTUlOSVNUSUNfREVWSUNFX1NFVFRJTkdTID0gWwotICAoJ3NldHRpbmdzL2dsb2JhbCcsIFsKLSAgICAoJ2Fzc2lzdGVkX2dwc19lbmFibGVkJywgMCksCi0KLSAgICAjIERpc2FibGUgImF1dG8gdGltZSIgYW5kICJhdXRvIHRpbWUgem9uZSIgdG8gYXZvaWQgbmV0d29yay1wcm92aWRlZCB0aW1lCi0gICAgIyB0byBvdmVyd3JpdGUgdGhlIGRldmljZSdzIGRhdGV0aW1lIGFuZCB0aW1lem9uZSBzeW5jaHJvbml6ZWQgZnJvbSBob3N0Ci0gICAgIyB3aGVuIHJ1bm5pbmcgdGVzdHMgbGF0ZXIuIFNlZSBiLzY1Njk4NDkuCi0gICAgKCdhdXRvX3RpbWUnLCAwKSwKLSAgICAoJ2F1dG9fdGltZV96b25lJywgMCksCi0KLSAgICAoJ2RldmVsb3BtZW50X3NldHRpbmdzX2VuYWJsZWQnLCAxKSwKLQotICAgICMgRmxhZyBmb3IgYWxsb3dpbmcgQWN0aXZpdHlNYW5hZ2VyU2VydmljZSB0byBzZW5kIEFDVElPTl9BUFBfRVJST1IgaW50ZW50cwotICAgICMgb24gYXBwbGljYXRpb24gY3Jhc2hlcyBhbmQgQU5Scy4gSWYgdGhpcyBpcyBkaXNhYmxlZCwgdGhlIGNyYXNoL0FOUiBkaWFsb2cKLSAgICAjIHdpbGwgbmV2ZXIgZGlzcGxheSB0aGUgIlJlcG9ydCIgYnV0dG9uLgotICAgICMgVHlwZTogaW50ICggMCA9IGRpc2FsbG93LCAxID0gYWxsb3cgKQotICAgICgnc2VuZF9hY3Rpb25fYXBwX2Vycm9yJywgMCksCi0KLSAgICAoJ3N0YXlfb25fd2hpbGVfcGx1Z2dlZF9pbicsIDMpLAotCi0gICAgKCd2ZXJpZmllcl92ZXJpZnlfYWRiX2luc3RhbGxzJywgMCksCi0KLSAgICAoJ3dpbmRvd19hbmltYXRpb25fc2NhbGUnLCAwKSwKLSAgXSksCi0gICgnc2V0dGluZ3Mvc2VjdXJlJywgWwotICAgICgnYWxsb3dlZF9nZW9sb2NhdGlvbl9vcmlnaW5zJywKLSAgICAgICAgJ2h0dHA6Ly93d3cuZ29vZ2xlLmNvLnVrIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbScpLAotCi0gICAgIyBFbnN1cmUgdGhhdCB3ZSBuZXZlciBnZXQgcmFuZG9tIGRpYWxvZ3MgbGlrZSAiVW5mb3J0dW5hdGVseSB0aGUgcHJvY2VzcwotICAgICMgYW5kcm9pZC5wcm9jZXNzLmFjb3JlIGhhcyBzdG9wcGVkIiwgd2hpY2ggc3RlYWwgdGhlIGZvY3VzLCBhbmQgbWFrZSBvdXIKLSAgICAjIGF1dG9tYXRpb24gZmFpbCAoYmVjYXVzZSB0aGUgZGlhbG9nIHN0ZWFscyB0aGUgZm9jdXMgdGhlbiBtaXN0YWtlbmx5Ci0gICAgIyByZWNlaXZlcyB0aGUgaW5qZWN0ZWQgdXNlciBpbnB1dCBldmVudHMpLgotICAgICgnYW5yX3Nob3dfYmFja2dyb3VuZCcsIDApLAotCi0gICAgKCdsb2Nrc2NyZWVuLmRpc2FibGVkJywgMSksCi0KLSAgICAoJ3NjcmVlbnNhdmVyX2VuYWJsZWQnLCAwKSwKLQotICAgICgnc2tpcF9maXJzdF91c2VfaGludHMnLCAxKSwKLSAgXSksCi0gICgnc2V0dGluZ3Mvc3lzdGVtJywgWwotICAgICMgRG9uJ3Qgd2FudCBkZXZpY2VzIHRvIGFjY2lkZW50YWxseSByb3RhdGUgdGhlIHNjcmVlbiBhcyB0aGF0IGNvdWxkCi0gICAgIyBhZmZlY3QgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzLgotICAgICgnYWNjZWxlcm9tZXRlcl9yb3RhdGlvbicsIDApLAotCi0gICAgKCdsb2Nrc2NyZWVuLmRpc2FibGVkJywgMSksCi0KLSAgICAjIFR1cm4gZG93biBicmlnaHRuZXNzIGFuZCBkaXNhYmxlIGF1dG8tYWRqdXN0IHNvIHRoYXQgZGV2aWNlcyBydW4gY29vbGVyLgotICAgICgnc2NyZWVuX2JyaWdodG5lc3MnLCA1KSwKLSAgICAoJ3NjcmVlbl9icmlnaHRuZXNzX21vZGUnLCAwKSwKLQotICAgICgndXNlcl9yb3RhdGlvbicsIDApLAotCi0gICAgKCd3aW5kb3dfYW5pbWF0aW9uX3NjYWxlJywgMCksCi0gIF0pLAotXQotCi1ORVRXT1JLX0RJU0FCTEVEX1NFVFRJTkdTID0gWwotICAoJ3NldHRpbmdzL2dsb2JhbCcsIFsKLSAgICAoJ2FpcnBsYW5lX21vZGVfb24nLCAxKSwKLSAgICAoJ3dpZmlfb24nLCAwKSwKLSAgXSksCi1dCi0KLQotY2xhc3MgQ29udGVudFNldHRpbmdzKGRpY3QpOgotCi0gICIiIkEgZGljdCBpbnRlcmZhY2UgdG8gaW50ZXJhY3Qgd2l0aCBkZXZpY2UgY29udGVudCBzZXR0aW5ncy4KLQotICBTeXN0ZW0gcHJvcGVydGllcyBhcmUga2V5L3ZhbHVlIHBhaXJzIGFzIGV4cG9zZWQgYnkgYWRiIHNoZWxsIGNvbnRlbnQuCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCB0YWJsZSwgZGV2aWNlKToKLSAgICBzdXBlcihDb250ZW50U2V0dGluZ3MsIHNlbGYpLl9faW5pdF9fKCkKLSAgICBzZWxmLl90YWJsZSA9IHRhYmxlCi0gICAgc2VsZi5fZGV2aWNlID0gZGV2aWNlCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgX0dldFR5cGVCaW5kaW5nKHZhbHVlKToKLSAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKLSAgICAgIHJldHVybiAnYicKLSAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgICByZXR1cm4gJ2YnCi0gICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAgICAgIHJldHVybiAnaScKLSAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsb25nKToKLSAgICAgIHJldHVybiAnbCcKLSAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgotICAgICAgcmV0dXJuICdzJwotICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgJXMnICUgdHlwZSh2YWx1ZSkpCi0KLSAgZGVmIGl0ZXJpdGVtcyhzZWxmKToKLSAgICBmb3Igcm93IGluIHNlbGYuX2RldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgIFsnY29udGVudCcsICdxdWVyeScsICctLXVyaScsICdjb250ZW50Oi8vJXMnICUgc2VsZi5fdGFibGVdLAotICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgYXNfcm9vdD1UcnVlKToKLSAgICAgIGtleSwgdmFsdWUgPSBfUGFyc2VDb250ZW50Um93KHJvdykKLSAgICAgIGlmIG5vdCBrZXk6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICB5aWVsZCBrZXksIHZhbHVlCi0KLSAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgcXVlcnlfcm93ID0gc2VsZi5fZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgWydjb250ZW50JywgJ3F1ZXJ5JywgJy0tdXJpJywgJ2NvbnRlbnQ6Ly8lcycgJSBzZWxmLl90YWJsZSwKLSAgICAgICAgICctLXdoZXJlJywgIm5hbWU9JyVzJyIgJSBrZXldLAotICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgYXNfcm9vdD1UcnVlLCBzaW5nbGVfbGluZT1UcnVlKQotICAgIHBhcnNlZF9rZXksIHBhcnNlZF92YWx1ZSA9IF9QYXJzZUNvbnRlbnRSb3cocXVlcnlfcm93KQotICAgIGlmIHBhcnNlZF9rZXkgaXMgTm9uZToKLSAgICAgIHJhaXNlIEtleUVycm9yKCdrZXk9JXMgbm90IGZvdW5kJyAlIGtleSkKLSAgICBpZiBwYXJzZWRfa2V5ICE9IGtleToKLSAgICAgIHJhaXNlIEtleUVycm9yKCdFeHBlY3RlZCBrZXk9JXMsIGJ1dCBnb3Qga2V5PSVzJyAlIChrZXksIHBhcnNlZF9rZXkpKQotICAgIHJldHVybiBwYXJzZWRfdmFsdWUKLQotICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgaWYga2V5IGluIHNlbGY6Ci0gICAgICBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgIFsnY29udGVudCcsICd1cGRhdGUnLCAnLS11cmknLCAnY29udGVudDovLyVzJyAlIHNlbGYuX3RhYmxlLAotICAgICAgICAgICAnLS1iaW5kJywgJ3ZhbHVlOiVzOiVzJyAlIChzZWxmLl9HZXRUeXBlQmluZGluZyh2YWx1ZSksIHZhbHVlKSwKLSAgICAgICAgICAgJy0td2hlcmUnLCAibmFtZT0nJXMnIiAlIGtleV0sCi0gICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUsIGFzX3Jvb3Q9VHJ1ZSkKLSAgICBlbHNlOgotICAgICAgc2VsZi5fZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgICBbJ2NvbnRlbnQnLCAnaW5zZXJ0JywgJy0tdXJpJywgJ2NvbnRlbnQ6Ly8lcycgJSBzZWxmLl90YWJsZSwKLSAgICAgICAgICAgJy0tYmluZCcsICduYW1lOiVzOiVzJyAlIChzZWxmLl9HZXRUeXBlQmluZGluZyhrZXkpLCBrZXkpLAotICAgICAgICAgICAnLS1iaW5kJywgJ3ZhbHVlOiVzOiVzJyAlIChzZWxmLl9HZXRUeXBlQmluZGluZyh2YWx1ZSksIHZhbHVlKV0sCi0gICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUsIGFzX3Jvb3Q9VHJ1ZSkKLQotICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKLSAgICBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBbJ2NvbnRlbnQnLCAnZGVsZXRlJywgJy0tdXJpJywgJ2NvbnRlbnQ6Ly8lcycgJSBzZWxmLl90YWJsZSwKLSAgICAgICAgICctLWJpbmQnLCAnbmFtZTolczolcycgJSAoc2VsZi5fR2V0VHlwZUJpbmRpbmcoa2V5KSwga2V5KV0sCi0gICAgICAgIGNoZWNrX3JldHVybj1UcnVlLCBhc19yb290PVRydWUpCi0KLQotZGVmIENvbmZpZ3VyZUNvbnRlbnRTZXR0aW5ncyhkZXZpY2UsIGRlc2lyZWRfc2V0dGluZ3MpOgotICAiIiJDb25maWd1cmVzIGRldmljZSBjb250ZW50IHNldGluZ3MgZnJvbSBhIGxpc3QuCi0KLSAgTWFueSBzZXR0aW5ncyBhcmUgZG9jdW1lbnRlZCBhdDoKLSAgICBodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLkdsb2JhbC5odG1sCi0gICAgaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5TZWN1cmUuaHRtbAotICAgIGh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuU3lzdGVtLmh0bWwKLQotICBNYW55IG90aGVycyBhcmUgdW5kb2N1bWVudGVkLgotCi0gIEFyZ3M6Ci0gICAgZGV2aWNlOiBBIERldmljZVV0aWxzIGluc3RhbmNlIGZvciB0aGUgZGV2aWNlIHRvIGNvbmZpZ3VyZS4KLSAgICBkZXNpcmVkX3NldHRpbmdzOiBBIGxpc3Qgb2YgKHRhYmxlLCBbKGtleTogdmFsdWUpLCAuLi5dKSBmb3IgYWxsCi0gICAgICAgIHNldHRpbmdzIHRvIGNvbmZpZ3VyZS4KLSAgIiIiCi0gIGZvciB0YWJsZSwga2V5X3ZhbHVlIGluIGRlc2lyZWRfc2V0dGluZ3M6Ci0gICAgc2V0dGluZ3MgPSBDb250ZW50U2V0dGluZ3ModGFibGUsIGRldmljZSkKLSAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrZXlfdmFsdWU6Ci0gICAgICBzZXR0aW5nc1trZXldID0gdmFsdWUKLSAgICBsb2dnZXIuaW5mbygnXG4lcyAlcycsIHRhYmxlLCAoODAgLSBsZW4odGFibGUpKSAqICctJykKLSAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzb3J0ZWQoc2V0dGluZ3MuaXRlcml0ZW1zKCkpOgotICAgICAgbG9nZ2VyLmluZm8oJ1x0JXM6ICVzJywga2V5LCB2YWx1ZSkKLQotCi1kZWYgU2V0TG9ja1NjcmVlblNldHRpbmdzKGRldmljZSk6Ci0gICIiIlNldHMgbG9jayBzY3JlZW4gc2V0dGluZ3Mgb24gdGhlIGRldmljZS4KLQotICBPbiBjZXJ0YWluIGRldmljZS9BbmRyb2lkIGNvbmZpZ3VyYXRpb25zIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgbG9jayBzY3JlZW4gaW4KLSAgYSBkaWZmZXJlbnQgZGF0YWJhc2UuIEFkZGl0aW9uYWxseSwgdGhlIHBhc3N3b3JkIHR5cGUgbXVzdCBiZSBzZXQgdG8KLSAgRGV2aWNlUG9saWN5TWFuYWdlci5QQVNTV09SRF9RVUFMSVRZX1VOU1BFQ0lGSUVELgotICBMb2NrIHNjcmVlbiBzZXR0aW5ncyBhcmUgc3RvcmVkIGluIHNxbGl0ZSBvbiB0aGUgZGV2aWNlIGluOgotICAgICAgL2RhdGEvc3lzdGVtL2xvY2tzZXR0aW5ncy5kYgotCi0gIElNUE9SVEFOVDogVGhlIGZpcnN0IGNvbHVtbiBpcyB1c2VkIGFzIGEgcHJpbWFyeSBrZXkgc28gdGhhdCBhbGwgcm93cyB3aXRoIHRoZQotICBzYW1lIHZhbHVlIGZvciB0aGF0IGNvbHVtbiBhcmUgcmVtb3ZlZCBmcm9tIHRoZSB0YWJsZSBwcmlvciB0byBpbnNlcnRpbmcgdGhlCi0gIG5ldyB2YWx1ZXMuCi0KLSAgQXJnczoKLSAgICBkZXZpY2U6IEEgRGV2aWNlVXRpbHMgaW5zdGFuY2UgZm9yIHRoZSBkZXZpY2UgdG8gY29uZmlndXJlLgotCi0gIFJhaXNlczoKLSAgICBFeGNlcHRpb24gaWYgdGhlIHNldHRpbmcgd2FzIG5vdCBwcm9wZXJseSBzZXQuCi0gICIiIgotICBpZiBkZXZpY2UuYnVpbGRfdHlwZSBub3QgaW4gX0NPTVBBVElCTEVfQlVJTERfVFlQRVM6Ci0gICAgbG9nZ2VyLndhcm5pbmcoJ1VuYWJsZSB0byBkaXNhYmxlIGxvY2tzY3JlZW4gb24gJXMgYnVpbGRzLicsCi0gICAgICAgICAgICAgICAgICAgZGV2aWNlLmJ1aWxkX3R5cGUpCi0gICAgcmV0dXJuCi0KLSAgZGVmIGdldF9sb2NrX3NldHRpbmdzKHRhYmxlKToKLSAgICByZXR1cm4gWyh0YWJsZSwgJ2xvY2tzY3JlZW4uZGlzYWJsZWQnLCAnMScpLAotICAgICAgICAgICAgKHRhYmxlLCAnbG9ja3NjcmVlbi5wYXNzd29yZF90eXBlJywgUEFTU1dPUkRfUVVBTElUWV9VTlNQRUNJRklFRCksCi0gICAgICAgICAgICAodGFibGUsICdsb2Nrc2NyZWVuLnBhc3N3b3JkX3R5cGVfYWx0ZXJuYXRlJywKLSAgICAgICAgICAgICBQQVNTV09SRF9RVUFMSVRZX1VOU1BFQ0lGSUVEKV0KLQotICBpZiBkZXZpY2UuRmlsZUV4aXN0cyhfTE9DS19TQ1JFRU5fU0VUVElOR1NfUEFUSCk6Ci0gICAgZGIgPSBfTE9DS19TQ1JFRU5fU0VUVElOR1NfUEFUSAotICAgIGxvY2tzZXR0aW5ncyA9IGdldF9sb2NrX3NldHRpbmdzKCdsb2Nrc2V0dGluZ3MnKQotICAgIGNvbHVtbnMgPSBbJ25hbWUnLCAndXNlcicsICd2YWx1ZSddCi0gICAgZ2VuZXJhdGVfdmFsdWVzID0gbGFtYmRhIGssIHY6IFtrLCAnMCcsIHZdCi0gIGVsaWYgZGV2aWNlLkZpbGVFeGlzdHMoX0FMVEVSTkFURV9MT0NLX1NDUkVFTl9TRVRUSU5HU19QQVRIKToKLSAgICBkYiA9IF9BTFRFUk5BVEVfTE9DS19TQ1JFRU5fU0VUVElOR1NfUEFUSAotICAgIGxvY2tzZXR0aW5ncyA9IGdldF9sb2NrX3NldHRpbmdzKCdzZWN1cmUnKSArIGdldF9sb2NrX3NldHRpbmdzKCdzeXN0ZW0nKQotICAgIGNvbHVtbnMgPSBbJ25hbWUnLCAndmFsdWUnXQotICAgIGdlbmVyYXRlX3ZhbHVlcyA9IGxhbWJkYSBrLCB2OiBbaywgdl0KLSAgZWxzZToKLSAgICBsb2dnZXIud2FybmluZygnVW5hYmxlIHRvIGZpbmQgZGF0YWJhc2UgZmlsZSB0byBzZXQgbG9jayBzY3JlZW4gc2V0dGluZ3MuJykKLSAgICByZXR1cm4KLQotICBmb3IgdGFibGUsIGtleSwgdmFsdWUgaW4gbG9ja3NldHRpbmdzOgotICAgICMgU2V0IHRoZSBsb2Nrc2NyZWVuIHNldHRpbmcgZm9yIGRlZmF1bHQgdXNlciAnMCcKLSAgICB2YWx1ZXMgPSBnZW5lcmF0ZV92YWx1ZXMoa2V5LCB2YWx1ZSkKLQotICAgIGNtZCA9ICIiImJlZ2luIHRyYW5zYWN0aW9uOwotZGVsZXRlIGZyb20gJyUodGFibGUpcycgd2hlcmUgJShwcmltYXJ5X2tleSlzPSclKHByaW1hcnlfdmFsdWUpcyc7Ci1pbnNlcnQgaW50byAnJSh0YWJsZSlzJyAoJShjb2x1bW5zKXMpIHZhbHVlcyAoJSh2YWx1ZXMpcyk7Ci1jb21taXQgdHJhbnNhY3Rpb247IiIiICUgewotICAgICAgJ3RhYmxlJzogdGFibGUsCi0gICAgICAncHJpbWFyeV9rZXknOiBjb2x1bW5zWzBdLAotICAgICAgJ3ByaW1hcnlfdmFsdWUnOiB2YWx1ZXNbMF0sCi0gICAgICAnY29sdW1ucyc6ICcsICcuam9pbihjb2x1bW5zKSwKLSAgICAgICd2YWx1ZXMnOiAnLCAnLmpvaW4oWyInJXMnIiAlIHZhbHVlIGZvciB2YWx1ZSBpbiB2YWx1ZXNdKQotICAgIH0KLSAgICBvdXRwdXRfbXNnID0gZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgWydzcWxpdGUzJywgZGIsIGNtZF0sIGNoZWNrX3JldHVybj1UcnVlLCBhc19yb290PVRydWUpCi0gICAgaWYgb3V0cHV0X21zZzoKLSAgICAgIGxvZ2dlci5pbmZvKCcgJy5qb2luKG91dHB1dF9tc2cpKQotCi0KLWRlZiBfUGFyc2VDb250ZW50Um93KHJvdyk6Ci0gICIiIlBhcnNlIGtleSwgdmFsdWUgZW50cmllcyBmcm9tIGEgcm93IHN0cmluZy4iIiIKLSAgIyBFeGFtcGxlIHJvdzoKLSAgIyAnUm93OiAwIF9pZD0xMywgbmFtZT1sb2dnaW5nX2lkMiwgdmFsdWU9LTFmY2NiYWE1NDY3MDViMDUnCi0gIGZpZWxkcyA9IHJvdy5zcGxpdCgnLCAnKQotICBrZXkgPSBOb25lCi0gIHZhbHVlID0gJycKLSAgZm9yIGZpZWxkIGluIGZpZWxkczoKLSAgICBrLCBfLCB2ID0gZmllbGQucGFydGl0aW9uKCc9JykKLSAgICBpZiBrID09ICduYW1lJzoKLSAgICAgIGtleSA9IHYKLSAgICBlbGlmIGsgPT0gJ3ZhbHVlJzoKLSAgICAgIHZhbHVlID0gdgotICByZXR1cm4ga2V5LCB2YWx1ZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYjIzZGYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9hZGJfcnVuX3NoZWxsX2NtZC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvYWRiX3J1bl9zaGVsbF9jbWQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDZlZGQ1NjAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9hZGJfcnVuX3NoZWxsX2NtZC5weQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgYXJncGFyc2UKLWltcG9ydCBqc29uCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLnBhdGguYXBwZW5kKAotICAgICAgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4nLCAnLi4nLCAnLi4nKSkpCi0KLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3V0aWxzCi1mcm9tIGRldmlsLmFuZHJvaWQudG9vbHMgaW1wb3J0IHNjcmlwdF9jb21tb24KLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGxvZ2dpbmdfY29tbW9uCi0KLQotZGVmIG1haW4oKToKLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCi0gICAgICAnUnVuIGFuIGFkYiBzaGVsbCBjb21tYW5kIG9uIHNlbGVjdGVkIGRldmljZXMnKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdjbWQnLCBoZWxwPSdBZGIgc2hlbGwgY29tbWFuZCB0byBydW4uJywgbmFyZ3M9IisiKQotICBsb2dnaW5nX2NvbW1vbi5BZGRMb2dnaW5nQXJndW1lbnRzKHBhcnNlcikKLSAgc2NyaXB0X2NvbW1vbi5BZGREZXZpY2VBcmd1bWVudHMocGFyc2VyKQotICBzY3JpcHRfY29tbW9uLkFkZEVudmlyb25tZW50QXJndW1lbnRzKHBhcnNlcikKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hcy1yb290JywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nUnVuIGFzIHJvb3QuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1qc29uLW91dHB1dCcsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nRmlsZSB0byBkdW1wIGpzb24gb3V0cHV0IHRvLicpCi0gIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCi0KLSAgbG9nZ2luZ19jb21tb24uSW5pdGlhbGl6ZUxvZ2dpbmcoYXJncykKLSAgc2NyaXB0X2NvbW1vbi5Jbml0aWFsaXplRW52aXJvbm1lbnQoYXJncykKLQotICBkZXZpY2VzID0gc2NyaXB0X2NvbW1vbi5HZXREZXZpY2VzKGFyZ3MuZGV2aWNlcywgYXJncy5ibGFja2xpc3RfZmlsZSkKLSAgcF9vdXQgPSAoZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLnBhcmFsbGVsKGRldmljZXMpLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgIGFyZ3MuY21kLCBsYXJnZV9vdXRwdXQ9VHJ1ZSwgYXNfcm9vdD1hcmdzLmFzX3Jvb3QsIGNoZWNrX3JldHVybj1UcnVlKQotICAgICAgLnBHZXQoTm9uZSkpCi0KLSAgZGF0YSA9IHt9Ci0gIGZvciBkZXZpY2UsIG91dHB1dCBpbiB6aXAoZGV2aWNlcywgcF9vdXQpOgotICAgIGZvciBsaW5lIGluIG91dHB1dDoKLSAgICAgIHByaW50ICclczogJXMnICUgKGRldmljZSwgbGluZSkKLSAgICBkYXRhW3N0cihkZXZpY2UpXSA9IG91dHB1dAotCi0gIGlmIGFyZ3MuanNvbl9vdXRwdXQ6Ci0gICAgd2l0aCBvcGVuKGFyZ3MuanNvbl9vdXRwdXQsICd3JykgYXMgZjoKLSAgICAgIGpzb24uZHVtcChkYXRhLCBmKQotCi0gIHJldHVybiAwCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9jcHVmcmVxLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9jcHVmcmVxLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2Y2UwYWZmLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvY3B1ZnJlcS5weQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiQSBzY3JpcHQgdG8gbWFuaXB1bGF0ZSBkZXZpY2UgQ1BVIGZyZXF1ZW5jeS4iIiIKLQotaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgb3MKLWltcG9ydCBwcHJpbnQKLWltcG9ydCBzeXMKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLnBhdGguYXBwZW5kKAotICAgICAgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4nLCAnLi4nLCAnLi4nKSkpCi0KLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3V0aWxzCi1mcm9tIGRldmlsLmFuZHJvaWQucGVyZiBpbXBvcnQgcGVyZl9jb250cm9sCi1mcm9tIGRldmlsLmFuZHJvaWQudG9vbHMgaW1wb3J0IHNjcmlwdF9jb21tb24KLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGxvZ2dpbmdfY29tbW9uCi0KLQotZGVmIFNldFNjYWxpbmdHb3Zlcm5vcihkZXZpY2UsIGFyZ3MpOgotICBwID0gcGVyZl9jb250cm9sLlBlcmZDb250cm9sKGRldmljZSkKLSAgcC5TZXRTY2FsaW5nR292ZXJub3IoYXJncy5nb3Zlcm5vcikKLQotCi1kZWYgR2V0U2NhbGluZ0dvdmVybm9yKGRldmljZSwgX2FyZ3MpOgotICBwID0gcGVyZl9jb250cm9sLlBlcmZDb250cm9sKGRldmljZSkKLSAgZm9yIGNwdSwgZ292ZXJub3IgaW4gcC5HZXRTY2FsaW5nR292ZXJub3IoKToKLSAgICBwcmludCAnJXMgJXM6ICVzJyAlIChzdHIoZGV2aWNlKSwgY3B1LCBnb3Zlcm5vcikKLQotCi1kZWYgTGlzdEF2YWlsYWJsZUdvdmVybm9ycyhkZXZpY2UsIF9hcmdzKToKLSAgcCA9IHBlcmZfY29udHJvbC5QZXJmQ29udHJvbChkZXZpY2UpCi0gIGZvciBjcHUsIGdvdmVybm9ycyBpbiBwLkxpc3RBdmFpbGFibGVHb3Zlcm5vcnMoKToKLSAgICBwcmludCAnJXMgJXM6ICVzJyAlIChzdHIoZGV2aWNlKSwgY3B1LCBwcHJpbnQucGZvcm1hdChnb3Zlcm5vcnMpKQotCi0KLWRlZiBtYWluKHJhd19hcmdzKToKLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQotICBsb2dnaW5nX2NvbW1vbi5BZGRMb2dnaW5nQXJndW1lbnRzKHBhcnNlcikKLSAgc2NyaXB0X2NvbW1vbi5BZGRFbnZpcm9ubWVudEFyZ3VtZW50cyhwYXJzZXIpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLS1kZXZpY2UnLCBkZXN0PSdkZXZpY2VzJywgYWN0aW9uPSdhcHBlbmQnLCBkZWZhdWx0PVtdLAotICAgICAgaGVscD0nRGV2aWNlcyBmb3Igd2hpY2ggdGhlIGdvdmVybm9yIHNob3VsZCBiZSBzZXQuIERlZmF1bHRzIHRvIGFsbC4nKQotCi0gIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoKQotCi0gIHNldF9nb3Zlcm5vciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignc2V0LWdvdmVybm9yJykKLSAgc2V0X2dvdmVybm9yLmFkZF9hcmd1bWVudCgKLSAgICAgICdnb3Zlcm5vcicsCi0gICAgICBoZWxwPSdEZXNpcmVkIENQVSBnb3Zlcm5vci4nKQotICBzZXRfZ292ZXJub3Iuc2V0X2RlZmF1bHRzKGZ1bmM9U2V0U2NhbGluZ0dvdmVybm9yKQotCi0gIGdldF9nb3Zlcm5vciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignZ2V0LWdvdmVybm9yJykKLSAgZ2V0X2dvdmVybm9yLnNldF9kZWZhdWx0cyhmdW5jPUdldFNjYWxpbmdHb3Zlcm5vcikKLQotICBsaXN0X2dvdmVybm9ycyA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbGlzdC1nb3Zlcm5vcnMnKQotICBsaXN0X2dvdmVybm9ycy5zZXRfZGVmYXVsdHMoZnVuYz1MaXN0QXZhaWxhYmxlR292ZXJub3JzKQotCi0gIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhyYXdfYXJncykKLQotICBsb2dnaW5nX2NvbW1vbi5Jbml0aWFsaXplTG9nZ2luZyhhcmdzKQotICBzY3JpcHRfY29tbW9uLkluaXRpYWxpemVFbnZpcm9ubWVudChhcmdzKQotCi0gIGRldmljZXMgPSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMuSGVhbHRoeURldmljZXMoZGV2aWNlX2FyZz1hcmdzLmRldmljZXMpCi0KLSAgcGFyYWxsZWxfZGV2aWNlcyA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscy5wYXJhbGxlbChkZXZpY2VzKQotICBwYXJhbGxlbF9kZXZpY2VzLnBNYXAoYXJncy5mdW5jLCBhcmdzKQotCi0gIHJldHVybiAwCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9kZXZpY2VfbW9uaXRvci5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvZGV2aWNlX21vbml0b3IucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDEwZTAzMzMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9kZXZpY2VfbW9uaXRvci5weQorKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiTGF1bmNoZXMgYSBkYWVtb24gdG8gbW9uaXRvciBhbmRyb2lkIGRldmljZSB0ZW1wZXJhdHVyZXMgJiBzdGF0dXMuCi0KLVRoaXMgc2NyaXB0IHdpbGwgcmVwZWF0ZWRseSBwb2xsIHRoZSBnaXZlbiBkZXZpY2VzIGZvciB0aGVpciB0ZW1wZXJhdHVyZXMgYW5kCi1zdGF0dXMgZXZlcnkgNjAgc2Vjb25kcyBhbmQgZHVtcCB0aGUgc3RhdHMgdG8gZmlsZSBvbiB0aGUgaG9zdC4KLSIiIgotCi1pbXBvcnQgYXJncGFyc2UKLWltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IGpzb24KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgbG9nZ2luZy5oYW5kbGVycwotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzb2NrZXQKLWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5wYXRoLmFwcGVuZCgKLSAgICAgIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uJywgJy4uJywgJy4uJykpKQotCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGJhdHRlcnlfdXRpbHMKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX2JsYWNrbGlzdAotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkLnRvb2xzIGltcG9ydCBzY3JpcHRfY29tbW9uCi0KLQotIyBWYXJpb3VzIG5hbWVzIG9mIHNlbnNvcnMgdXNlZCB0byBtZWFzdXJlIGNwdSB0ZW1wCi1DUFVfVEVNUF9TRU5TT1JTID0gWwotICAjIG1vc3QgbmV4dXMgZGV2aWNlcwotICAndHNlbnNfdHpfc2Vuc29yMCcsCi0gICMgYW5kcm9pZCBvbmUKLSAgJ210a3RzY3B1JywKLSAgIyBuZXh1cyA5Ci0gICdDUFUtdGhlcm0nLAotXQotCi1ERVZJQ0VfRklMRV9WRVJTSU9OID0gMQotREVWSUNFX0ZJTEUgPSBvcy5wYXRoLmpvaW4oCi0gICAgb3MucGF0aC5leHBhbmR1c2VyKCd+JyksICcuYW5kcm9pZCcsCi0gICAgJyVzX19hbmRyb2lkX2RldmljZV9zdGF0dXMuanNvbicgJSBzb2NrZXQuZ2V0aG9zdG5hbWUoKS5zcGxpdCgnLicpWzBdKQotCi1NRU1fSU5GT19SRUdFWCA9IHJlLmNvbXBpbGUocicuKj9cOlxzKihcZCspXHMqa0InKSAjIGV4OiAnTWVtVG90YWw6ICAgMTg1NzM1IGtCJwotCi0KLWRlZiBnZXRfZGV2aWNlX3N0YXR1c191bnNhZmUoZGV2aWNlKToKLSAgIiIiUG9sbHMgdGhlIGdpdmVuIGRldmljZSBmb3IgdmFyaW91cyBpbmZvLgotCi0gICAgUmV0dXJuczogQSBkaWN0IG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgotICAgIHsKLSAgICAgICdiYXR0ZXJ5JzogewotICAgICAgICAnbGV2ZWwnOiAxMDAsCi0gICAgICAgICd0ZW1wZXJhdHVyZSc6IDEyMwotICAgICAgfSwKLSAgICAgICdidWlsZCc6IHsKLSAgICAgICAgJ2J1aWxkLmlkJzogJ0FCQzEyRCcsCi0gICAgICAgICdwcm9kdWN0LmRldmljZSc6ICdjaGlja2Vub2Z0aGVzZWEnCi0gICAgICB9LAotICAgICAgJ2ltZWknOiAxMjM0NTY3ODksCi0gICAgICAnbWVtJzogewotICAgICAgICAnYXZhaWwnOiAxMDAwMDAwLAotICAgICAgICAndG90YWwnOiAxMjM0NTY3LAotICAgICAgfSwKLSAgICAgICdwcm9jZXNzZXMnOiAxMjMsCi0gICAgICAnc3RhdGUnOiAnZ29vZCcsCi0gICAgICAndGVtcCc6IHsKLSAgICAgICAgJ3NvbWVfc2Vuc29yJzogMzAKLSAgICAgIH0sCi0gICAgICAndXB0aW1lJzogMTIzNC41NiwKLSAgICB9Ci0gICIiIgotICBzdGF0dXMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChkaWN0KQotCi0gICMgQmF0dGVyeQotICBiYXR0ZXJ5ID0gYmF0dGVyeV91dGlscy5CYXR0ZXJ5VXRpbHMoZGV2aWNlKQotICBiYXR0ZXJ5X2luZm8gPSBiYXR0ZXJ5LkdldEJhdHRlcnlJbmZvKCkKLSAgdHJ5OgotICAgIGxldmVsID0gaW50KGJhdHRlcnlfaW5mby5nZXQoJ2xldmVsJykpCi0gIGV4Y2VwdCAoS2V5RXJyb3IsIFR5cGVFcnJvciwgVmFsdWVFcnJvcik6Ci0gICAgbGV2ZWwgPSBOb25lCi0gIGlmIGxldmVsIGFuZCBsZXZlbCA+PSAwIGFuZCBsZXZlbCA8PSAxMDA6Ci0gICAgc3RhdHVzWydiYXR0ZXJ5J11bJ2xldmVsJ10gPSBsZXZlbAotICB0cnk6Ci0gICAgdGVtcGVyYXR1cmUgPSBpbnQoYmF0dGVyeV9pbmZvLmdldCgndGVtcGVyYXR1cmUnKSkKLSAgZXhjZXB0IChLZXlFcnJvciwgVHlwZUVycm9yLCBWYWx1ZUVycm9yKToKLSAgICB0ZW1wZXJhdHVyZSA9IE5vbmUKLSAgaWYgdGVtcGVyYXR1cmU6Ci0gICAgc3RhdHVzWydiYXR0ZXJ5J11bJ3RlbXBlcmF0dXJlJ10gPSB0ZW1wZXJhdHVyZQotCi0gICMgQnVpbGQKLSAgc3RhdHVzWydidWlsZCddWydidWlsZC5pZCddID0gZGV2aWNlLmJ1aWxkX2lkCi0gIHN0YXR1c1snYnVpbGQnXVsncHJvZHVjdC5kZXZpY2UnXSA9IGRldmljZS5idWlsZF9wcm9kdWN0Ci0KLSAgIyBNZW1vcnkKLSAgbWVtX2luZm8gPSAnJwotICB0cnk6Ci0gICAgbWVtX2luZm8gPSBkZXZpY2UuUmVhZEZpbGUoJy9wcm9jL21lbWluZm8nKQotICBleGNlcHQgZGV2aWNlX2Vycm9ycy5BZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcjoKLSAgICBsb2dnaW5nLmV4Y2VwdGlvbignVW5hYmxlIHRvIHJlYWQgL3Byb2MvbWVtaW5mbycpCi0gIGZvciBsaW5lIGluIG1lbV9pbmZvLnNwbGl0bGluZXMoKToKLSAgICBtYXRjaCA9IE1FTV9JTkZPX1JFR0VYLm1hdGNoKGxpbmUpCi0gICAgaWYgbWF0Y2g6Ci0gICAgICB0cnk6Ci0gICAgICAgIHZhbHVlID0gaW50KG1hdGNoLmdyb3VwKDEpKQotICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICBrZXkgPSBsaW5lLnNwbGl0KCc6JylbMF0uc3RyaXAoKQotICAgICAgaWYgJ01lbVRvdGFsJyA9PSBrZXk6Ci0gICAgICAgIHN0YXR1c1snbWVtJ11bJ3RvdGFsJ10gPSB2YWx1ZQotICAgICAgZWxpZiAnTWVtRnJlZScgPT0ga2V5OgotICAgICAgICBzdGF0dXNbJ21lbSddWydmcmVlJ10gPSB2YWx1ZQotCi0gICMgUHJvY2VzcwotICB0cnk6Ci0gICAgc3RhdHVzWydwcm9jZXNzZXMnXSA9IGxlbihkZXZpY2UuTGlzdFByb2Nlc3NlcygpKQotICBleGNlcHQgZGV2aWNlX2Vycm9ycy5BZGJDb21tYW5kRmFpbGVkRXJyb3I6Ci0gICAgbG9nZ2luZy5leGNlcHRpb24oJ1VuYWJsZSB0byBjb3VudCBwcm9jZXNzIGxpc3QuJykKLQotICAjIENQVSBUZW1wcwotICAjIEZpbmQgYSB0aGVybWFsIHNlbnNvciB0aGF0IG1hdGNoZXMgb25lIGluIENQVV9URU1QX1NFTlNPUlMgYW5kIHJlYWQgaXRzCi0gICMgdGVtcGVyYXR1cmUuCi0gIGZpbGVzID0gW10KLSAgdHJ5OgotICAgIGZpbGVzID0gZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgJ2dyZXAgLWxFICIlcyIgL3N5cy9jbGFzcy90aGVybWFsL3RoZXJtYWxfem9uZSovdHlwZScgJSAnfCcuam9pbigKLSAgICAgICAgICAgIENQVV9URU1QX1NFTlNPUlMpLCBzaGVsbD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSkKLSAgZXhjZXB0IGRldmljZV9lcnJvcnMuQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3I6Ci0gICAgbG9nZ2luZy5leGNlcHRpb24oJ1VuYWJsZSB0byBsaXN0IHRoZXJtYWwgc2Vuc29ycy4nKQotICBmb3IgZiBpbiBmaWxlczoKLSAgICB0cnk6Ci0gICAgICBzZW5zb3JfbmFtZSA9IGRldmljZS5SZWFkRmlsZShmKS5zdHJpcCgpCi0gICAgICB0ZW1wID0gZmxvYXQoZGV2aWNlLlJlYWRGaWxlKGZbOi00XSArICd0ZW1wJykuc3RyaXAoKSkgIyBzL3R5cGVeL3RlbXAKLSAgICAgIHN0YXR1c1sndGVtcCddW3NlbnNvcl9uYW1lXSA9IHRlbXAKLSAgICBleGNlcHQgKGRldmljZV9lcnJvcnMuQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3IsIFZhbHVlRXJyb3IpOgotICAgICAgbG9nZ2luZy5leGNlcHRpb24oJ1VuYWJsZSB0byByZWFkIHRoZXJtYWwgc2Vuc29yICVzJywgZikKLQotICAjIFVwdGltZQotICB0cnk6Ci0gICAgdXB0aW1lcyA9IGRldmljZS5SZWFkRmlsZSgnL3Byb2MvdXB0aW1lJykuc3BsaXQoKQotICAgIHN0YXR1c1sndXB0aW1lJ10gPSBmbG9hdCh1cHRpbWVzWzBdKSAjIFRha2UgdGhlIGZpcnN0IGZpZWxkIChhY3R1YWwgdXB0aW1lKQotICBleGNlcHQgKGRldmljZV9lcnJvcnMuQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3IsIFZhbHVlRXJyb3IpOgotICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCdVbmFibGUgdG8gcmVhZCAvcHJvYy91cHRpbWUnKQotCi0gIHRyeToKLSAgICBzdGF0dXNbJ2ltZWknXSA9IGRldmljZS5HZXRJTUVJKCkKLSAgZXhjZXB0IGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yOgotICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCdVbmFibGUgdG8gcmVhZCBJTUVJJykKLSAgICBzdGF0dXNbJ2ltZWknXSA9ICd1bmtub3duJwotCi0gIHN0YXR1c1snc3RhdGUnXSA9ICdhdmFpbGFibGUnCi0gIHJldHVybiBzdGF0dXMKLQotCi1kZWYgZ2V0X2RldmljZV9zdGF0dXMoZGV2aWNlKToKLSAgdHJ5OgotICAgIHN0YXR1cyA9IGdldF9kZXZpY2Vfc3RhdHVzX3Vuc2FmZShkZXZpY2UpCi0gIGV4Y2VwdCBkZXZpY2VfZXJyb3JzLkRldmljZVVucmVhY2hhYmxlRXJyb3I6Ci0gICAgc3RhdHVzID0geydzdGF0ZSc6ICdvZmZsaW5lJ30KLSAgcmV0dXJuIHN0YXR1cwotCi0KLWRlZiBnZXRfYWxsX3N0YXR1cyhibGFja2xpc3QpOgotICBzdGF0dXNfZGljdCA9IHsKLSAgICAgICd2ZXJzaW9uJzogREVWSUNFX0ZJTEVfVkVSU0lPTiwKLSAgICAgICdkZXZpY2VzJzoge30sCi0gIH0KLQotICBoZWFsdGh5X2RldmljZXMgPSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMuSGVhbHRoeURldmljZXMoYmxhY2tsaXN0KQotICBwYXJhbGxlbF9kZXZpY2VzID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLnBhcmFsbGVsKGhlYWx0aHlfZGV2aWNlcykKLSAgcmVzdWx0cyA9IHBhcmFsbGVsX2RldmljZXMucE1hcChnZXRfZGV2aWNlX3N0YXR1cykucEdldChOb25lKQotCi0gIHN0YXR1c19kaWN0WydkZXZpY2VzJ10gPSB7Ci0gICAgICBkZXZpY2Uuc2VyaWFsOiByZXN1bHQgZm9yIGRldmljZSwgcmVzdWx0IGluIHppcChoZWFsdGh5X2RldmljZXMsIHJlc3VsdHMpCi0gIH0KLQotICBpZiBibGFja2xpc3Q6Ci0gICAgZm9yIGRldmljZSwgcmVhc29uIGluIGJsYWNrbGlzdC5SZWFkKCkuaXRlcml0ZW1zKCk6Ci0gICAgICBzdGF0dXNfZGljdFsnZGV2aWNlcyddW2RldmljZV0gPSB7Ci0gICAgICAgICAgJ3N0YXRlJzogcmVhc29uLmdldCgncmVhc29uJywgJ2JsYWNrbGlzdGVkJyl9Ci0KLSAgc3RhdHVzX2RpY3RbJ3RpbWVzdGFtcCddID0gdGltZS50aW1lKCkKLSAgcmV0dXJuIHN0YXR1c19kaWN0Ci0KLQotZGVmIG1haW4oYXJndik6Ci0gICIiIkxhdW5jaGVzIHRoZSBkZXZpY2UgbW9uaXRvci4KLQotICBQb2xscyB0aGUgZGV2aWNlcyBmb3IgdGhlaXIgYmF0dGVyeSBhbmQgY3B1IHRlbXBlcmF0dXJlcyBhbmQgc2NhbnMgdGhlCi0gIGJsYWNrbGlzdCBmaWxlIGV2ZXJ5IDYwIHNlY29uZHMgYW5kIGR1bXBzIHRoZSBkYXRhIHRvIERFVklDRV9GSUxFLgotICAiIiIKLQotICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKLSAgICAgIGRlc2NyaXB0aW9uPSdMYXVuY2hlcyB0aGUgZGV2aWNlIG1vbml0b3IuJykKLSAgc2NyaXB0X2NvbW1vbi5BZGRFbnZpcm9ubWVudEFyZ3VtZW50cyhwYXJzZXIpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYmxhY2tsaXN0LWZpbGUnLCBoZWxwPSdQYXRoIHRvIGRldmljZSBibGFja2xpc3QgZmlsZS4nKQotICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKLQotICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCi0gIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotICBoYW5kbGVyID0gbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyKAotICAgICAgJy90bXAvZGV2aWNlX21vbml0b3IubG9nJywgbWF4Qnl0ZXM9MTAgKiAxMDI0ICogMTAyNCwgYmFja3VwQ291bnQ9NSkKLSAgZm10ID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUoYXNjdGltZSlzICUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlZm10PScleSVtJWQgJUg6JU06JVMnKQotICBoYW5kbGVyLnNldEZvcm1hdHRlcihmbXQpCi0gIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCi0gIHNjcmlwdF9jb21tb24uSW5pdGlhbGl6ZUVudmlyb25tZW50KGFyZ3MpCi0KLSAgYmxhY2tsaXN0ID0gKGRldmljZV9ibGFja2xpc3QuQmxhY2tsaXN0KGFyZ3MuYmxhY2tsaXN0X2ZpbGUpCi0gICAgICAgICAgICAgICBpZiBhcmdzLmJsYWNrbGlzdF9maWxlIGVsc2UgTm9uZSkKLQotICBsb2dnaW5nLmluZm8oJ0RldmljZSBtb25pdG9yIHJ1bm5pbmcgd2l0aCBwaWQgJWQsIGFkYjogJXMsIGJsYWNrbGlzdDogJXMnLAotICAgICAgICAgICAgICAgb3MuZ2V0cGlkKCksIGFyZ3MuYWRiX3BhdGgsIGFyZ3MuYmxhY2tsaXN0X2ZpbGUpCi0gIHdoaWxlIFRydWU6Ci0gICAgc3RhcnQgPSB0aW1lLnRpbWUoKQotICAgIHN0YXR1c19kaWN0ID0gZ2V0X2FsbF9zdGF0dXMoYmxhY2tsaXN0KQotICAgIHdpdGggb3BlbihERVZJQ0VfRklMRSwgJ3diJykgYXMgZjoKLSAgICAgIGpzb24uZHVtcChzdGF0dXNfZGljdCwgZiwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlKQotICAgIGxvZ2dpbmcuaW5mbygnR290IHN0YXR1cyBvZiBhbGwgZGV2aWNlcyBpbiAlLjJmcy4nLCB0aW1lLnRpbWUoKSAtIHN0YXJ0KQotICAgIHRpbWUuc2xlZXAoNjApCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9kZXZpY2VfbW9uaXRvcl90ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9kZXZpY2VfbW9uaXRvcl90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyY2IwZGQyLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvZGV2aWNlX21vbml0b3JfdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLnBhdGguYXBwZW5kKAotICAgICAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uJywgJy4uJywgJy4uJykpKQotCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX2Vycm9ycwotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdXRpbHMKLWZyb20gZGV2aWwuYW5kcm9pZC50b29scyBpbXBvcnQgZGV2aWNlX21vbml0b3IKLQotd2l0aCBkZXZpbF9lbnYuU3lzUGF0aChkZXZpbF9lbnYuUFlNT0NLX1BBVEgpOgotICBpbXBvcnQgbW9jayAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCi0KLQotY2xhc3MgRGV2aWNlTW9uaXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzZWxmLmRldmljZSA9IG1vY2suTW9jayhzcGVjPWRldmljZV91dGlscy5EZXZpY2VVdGlscywKLSAgICAgICAgc2VyaWFsPSdkZXZpY2VfY2VyZWFsJywgYnVpbGRfaWQ9J2FiYzEyMycsIGJ1aWxkX3Byb2R1Y3Q9J2Nsb3duZmlzaCcsCi0gICAgICAgIEdldElNRUk9bGFtYmRhOiAnMTIzNDU2Nzg5JykKLSAgICBzZWxmLmZpbGVfY29udGVudHMgPSB7Ci0gICAgICAgICcvcHJvYy9tZW1pbmZvJzogIiIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgTWVtVG90YWw6ICAgICAgICAxMjM0NTY3IGtCCi0gICAgICAgICAgICAgICAgICAgICAgICAgTWVtRnJlZTogICAgICAgICAxMDAwMDAwIGtCCi0gICAgICAgICAgICAgICAgICAgICAgICAgTWVtVXNlZDogICAgICAgICAgMjM0NTY3IGtCCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiIiLAotICAgICAgICAnL3N5cy9jbGFzcy90aGVybWFsL3RoZXJtYWxfem9uZTAvdHlwZSc6ICdDUFUtdGhlcm0nLAotICAgICAgICAnL3N5cy9jbGFzcy90aGVybWFsL3RoZXJtYWxfem9uZTAvdGVtcCc6ICczMCcsCi0gICAgICAgICcvcHJvYy91cHRpbWUnOiAnMTIzNDUgOTk5OTknLAotICAgIH0KLSAgICBzZWxmLmRldmljZS5SZWFkRmlsZSA9IG1vY2suTWFnaWNNb2NrKAotICAgICAgICBzaWRlX2VmZmVjdD1sYW1iZGEgZmlsZV9uYW1lOiBzZWxmLmZpbGVfY29udGVudHNbZmlsZV9uYW1lXSkKLQotICAgIHNlbGYuZGV2aWNlLkxpc3RQcm9jZXNzZXMucmV0dXJuX3ZhbHVlID0gWydwMScsICdwMicsICdwMycsICdwNCcsICdwNSddCi0KLSAgICBzZWxmLmNtZF9vdXRwdXRzID0gewotICAgICAgICAnZ3JlcCc6IFsnL3N5cy9jbGFzcy90aGVybWFsL3RoZXJtYWxfem9uZTAvdHlwZSddLAotICAgIH0KLQotICAgIGRlZiBtb2NrX3J1bl9zaGVsbChjbWQsICoqX2t3YXJncyk6Ci0gICAgICBhcmdzID0gY21kLnNwbGl0KCkgaWYgaXNpbnN0YW5jZShjbWQsIGJhc2VzdHJpbmcpIGVsc2UgY21kCi0gICAgICB0cnk6Ci0gICAgICAgIHJldHVybiBzZWxmLmNtZF9vdXRwdXRzW2FyZ3NbMF1dCi0gICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQWRiU2hlbGxDb21tYW5kRmFpbGVkRXJyb3IoY21kLCBOb25lLCBOb25lKQotCi0gICAgc2VsZi5kZXZpY2UuUnVuU2hlbGxDb21tYW5kID0gbW9jay5NYWdpY01vY2soc2lkZV9lZmZlY3Q9bW9ja19ydW5fc2hlbGwpCi0KLSAgICBzZWxmLmJhdHRlcnkgPSBtb2NrLk1vY2soKQotICAgIHNlbGYuYmF0dGVyeS5HZXRCYXR0ZXJ5SW5mbyA9IG1vY2suTWFnaWNNb2NrKAotICAgICAgICByZXR1cm5fdmFsdWU9eydsZXZlbCc6ICc4MCcsICd0ZW1wZXJhdHVyZSc6ICcxMjMnfSkKLQotICAgIHNlbGYuZXhwZWN0ZWRfc3RhdHVzID0gewotICAgICAgJ2RldmljZV9jZXJlYWwnOiB7Ci0gICAgICAgICdwcm9jZXNzZXMnOiA1LAotICAgICAgICAndGVtcCc6IHsKLSAgICAgICAgICAnQ1BVLXRoZXJtJzogMzAuMAotICAgICAgICAgfSwKLSAgICAgICAgICdiYXR0ZXJ5JzogewotICAgICAgICAgICAndGVtcGVyYXR1cmUnOiAxMjMsCi0gICAgICAgICAgICdsZXZlbCc6IDgwCi0gICAgICAgICB9LAotICAgICAgICAgJ3VwdGltZSc6IDEyMzQ1LjAsCi0gICAgICAgICAnbWVtJzogewotICAgICAgICAgICAndG90YWwnOiAxMjM0NTY3LAotICAgICAgICAgICAnZnJlZSc6IDEwMDAwMDAKLSAgICAgICAgIH0sCi0gICAgICAgICAnYnVpbGQnOiB7Ci0gICAgICAgICAgICdidWlsZC5pZCc6ICdhYmMxMjMnLAotICAgICAgICAgICAncHJvZHVjdC5kZXZpY2UnOiAnY2xvd25maXNoJywKLSAgICAgICAgIH0sCi0gICAgICAgICAnaW1laSc6ICcxMjM0NTY3ODknLAotICAgICAgICAgJ3N0YXRlJzogJ2F2YWlsYWJsZScsCi0gICAgICB9Ci0gICAgfQotCi0gIEBtb2NrLnBhdGNoKCdkZXZpbC5hbmRyb2lkLmJhdHRlcnlfdXRpbHMuQmF0dGVyeVV0aWxzJykKLSAgQG1vY2sucGF0Y2goJ2RldmlsLmFuZHJvaWQuZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLkhlYWx0aHlEZXZpY2VzJykKLSAgZGVmIHRlc3RfZ2V0U3RhdHMoc2VsZiwgZ2V0X2RldmljZXMsIGdldF9iYXR0ZXJ5KToKLSAgICBnZXRfZGV2aWNlcy5yZXR1cm5fdmFsdWUgPSBbc2VsZi5kZXZpY2VdCi0gICAgZ2V0X2JhdHRlcnkucmV0dXJuX3ZhbHVlID0gc2VsZi5iYXR0ZXJ5Ci0KLSAgICBzdGF0dXMgPSBkZXZpY2VfbW9uaXRvci5nZXRfYWxsX3N0YXR1cyhOb25lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZXhwZWN0ZWRfc3RhdHVzLCBzdGF0dXNbJ2RldmljZXMnXSkKLQotICBAbW9jay5wYXRjaCgnZGV2aWwuYW5kcm9pZC5iYXR0ZXJ5X3V0aWxzLkJhdHRlcnlVdGlscycpCi0gIEBtb2NrLnBhdGNoKCdkZXZpbC5hbmRyb2lkLmRldmljZV91dGlscy5EZXZpY2VVdGlscy5IZWFsdGh5RGV2aWNlcycpCi0gIGRlZiB0ZXN0X2dldFN0YXRzTm9CYXR0ZXJ5KHNlbGYsIGdldF9kZXZpY2VzLCBnZXRfYmF0dGVyeSk6Ci0gICAgZ2V0X2RldmljZXMucmV0dXJuX3ZhbHVlID0gW3NlbGYuZGV2aWNlXQotICAgIGdldF9iYXR0ZXJ5LnJldHVybl92YWx1ZSA9IHNlbGYuYmF0dGVyeQotICAgIGJyb2tlbl9iYXR0ZXJ5X2luZm8gPSBtb2NrLk1vY2soKQotICAgIGJyb2tlbl9iYXR0ZXJ5X2luZm8uR2V0QmF0dGVyeUluZm8gPSBtb2NrLk1hZ2ljTW9jaygKLSAgICAgICAgcmV0dXJuX3ZhbHVlPXsnbGV2ZWwnOiAnLTEnLCAndGVtcGVyYXR1cmUnOiAnbm90X2FfbnVtYmVyJ30pCi0gICAgZ2V0X2JhdHRlcnkucmV0dXJuX3ZhbHVlID0gYnJva2VuX2JhdHRlcnlfaW5mbwotCi0gICAgIyBTaG91bGQgYmUgc2FtZSBzdGF0dXMgZGljdCBidXQgd2l0aG91dCBiYXR0ZXJ5IHN0YXRzLgotICAgIGV4cGVjdGVkX3N0YXR1c19ub19iYXR0ZXJ5ID0gc2VsZi5leHBlY3RlZF9zdGF0dXMuY29weSgpCi0gICAgZXhwZWN0ZWRfc3RhdHVzX25vX2JhdHRlcnlbJ2RldmljZV9jZXJlYWwnXS5wb3AoJ2JhdHRlcnknKQotCi0gICAgc3RhdHVzID0gZGV2aWNlX21vbml0b3IuZ2V0X2FsbF9zdGF0dXMoTm9uZSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZF9zdGF0dXNfbm9fYmF0dGVyeSwgc3RhdHVzWydkZXZpY2VzJ10pCi0KLSAgQG1vY2sucGF0Y2goJ2RldmlsLmFuZHJvaWQuYmF0dGVyeV91dGlscy5CYXR0ZXJ5VXRpbHMnKQotICBAbW9jay5wYXRjaCgnZGV2aWwuYW5kcm9pZC5kZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMuSGVhbHRoeURldmljZXMnKQotICBkZWYgdGVzdF9nZXRTdGF0c05vUHMoc2VsZiwgZ2V0X2RldmljZXMsIGdldF9iYXR0ZXJ5KToKLSAgICBnZXRfZGV2aWNlcy5yZXR1cm5fdmFsdWUgPSBbc2VsZi5kZXZpY2VdCi0gICAgZ2V0X2JhdHRlcnkucmV0dXJuX3ZhbHVlID0gc2VsZi5iYXR0ZXJ5Ci0gICAgIyBUaHJvdyBleGNlcHRpb24gd2hlbiBsaXN0aW5nIHByb2Nlc3Nlcy4KLSAgICBzZWxmLmRldmljZS5MaXN0UHJvY2Vzc2VzLnNpZGVfZWZmZWN0ID0gZGV2aWNlX2Vycm9ycy5BZGJDb21tYW5kRmFpbGVkRXJyb3IoCi0gICAgICAgIFsncHMnXSwgJ3NvbWV0aGluZyBmYWlsZWQnLCAxKQotCi0gICAgIyBTaG91bGQgYmUgc2FtZSBzdGF0dXMgZGljdCBidXQgd2l0aG91dCBwcm9jZXNzIHN0YXRzLgotICAgIGV4cGVjdGVkX3N0YXR1c19ub19wcyA9IHNlbGYuZXhwZWN0ZWRfc3RhdHVzLmNvcHkoKQotICAgIGV4cGVjdGVkX3N0YXR1c19ub19wc1snZGV2aWNlX2NlcmVhbCddLnBvcCgncHJvY2Vzc2VzJykKLQotICAgIHN0YXR1cyA9IGRldmljZV9tb25pdG9yLmdldF9hbGxfc3RhdHVzKE5vbmUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfc3RhdHVzX25vX3BzLCBzdGF0dXNbJ2RldmljZXMnXSkKLQotICBAbW9jay5wYXRjaCgnZGV2aWwuYW5kcm9pZC5iYXR0ZXJ5X3V0aWxzLkJhdHRlcnlVdGlscycpCi0gIEBtb2NrLnBhdGNoKCdkZXZpbC5hbmRyb2lkLmRldmljZV91dGlscy5EZXZpY2VVdGlscy5IZWFsdGh5RGV2aWNlcycpCi0gIGRlZiB0ZXN0X2dldFN0YXRzTm9TZW5zb3JzKHNlbGYsIGdldF9kZXZpY2VzLCBnZXRfYmF0dGVyeSk6Ci0gICAgZ2V0X2RldmljZXMucmV0dXJuX3ZhbHVlID0gW3NlbGYuZGV2aWNlXQotICAgIGdldF9iYXR0ZXJ5LnJldHVybl92YWx1ZSA9IHNlbGYuYmF0dGVyeQotICAgIGRlbCBzZWxmLmNtZF9vdXRwdXRzWydncmVwJ10gICMgVGhyb3cgZXhjZXB0aW9uIG9uIHJ1biBzaGVsbCBncmVwIGNvbW1hbmQuCi0KLSAgICAjIFNob3VsZCBiZSBzYW1lIHN0YXR1cyBkaWN0IGJ1dCB3aXRob3V0IHRlbXAgc3RhdHMuCi0gICAgZXhwZWN0ZWRfc3RhdHVzX25vX3RlbXAgPSBzZWxmLmV4cGVjdGVkX3N0YXR1cy5jb3B5KCkKLSAgICBleHBlY3RlZF9zdGF0dXNfbm9fdGVtcFsnZGV2aWNlX2NlcmVhbCddLnBvcCgndGVtcCcpCi0KLSAgICBzdGF0dXMgPSBkZXZpY2VfbW9uaXRvci5nZXRfYWxsX3N0YXR1cyhOb25lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkX3N0YXR1c19ub190ZW1wLCBzdGF0dXNbJ2RldmljZXMnXSkKLQotICBAbW9jay5wYXRjaCgnZGV2aWwuYW5kcm9pZC5iYXR0ZXJ5X3V0aWxzLkJhdHRlcnlVdGlscycpCi0gIEBtb2NrLnBhdGNoKCdkZXZpbC5hbmRyb2lkLmRldmljZV91dGlscy5EZXZpY2VVdGlscy5IZWFsdGh5RGV2aWNlcycpCi0gIGRlZiB0ZXN0X2dldFN0YXRzV2l0aEJsYWNrbGlzdChzZWxmLCBnZXRfZGV2aWNlcywgZ2V0X2JhdHRlcnkpOgotICAgIGdldF9kZXZpY2VzLnJldHVybl92YWx1ZSA9IFtzZWxmLmRldmljZV0KLSAgICBnZXRfYmF0dGVyeS5yZXR1cm5fdmFsdWUgPSBzZWxmLmJhdHRlcnkKLSAgICBibGFja2xpc3QgPSBtb2NrLk1vY2soKQotICAgIGJsYWNrbGlzdC5SZWFkID0gbW9jay5NYWdpY01vY2soCi0gICAgICAgIHJldHVybl92YWx1ZT17J2JhZF9kZXZpY2UnOiB7J3JlYXNvbic6ICdvZmZsaW5lJ319KQotCi0gICAgIyBTaG91bGQgYmUgc2FtZSBzdGF0dXMgZGljdCBidXQgd2l0aCBleHRyYSBibGFja2xpc3RlZCBkZXZpY2UuCi0gICAgZXhwZWN0ZWRfc3RhdHVzID0gc2VsZi5leHBlY3RlZF9zdGF0dXMuY29weSgpCi0gICAgZXhwZWN0ZWRfc3RhdHVzWydiYWRfZGV2aWNlJ10gPSB7J3N0YXRlJzogJ29mZmxpbmUnfQotCi0gICAgc3RhdHVzID0gZGV2aWNlX21vbml0b3IuZ2V0X2FsbF9zdGF0dXMoYmxhY2tsaXN0KQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkX3N0YXR1cywgc3RhdHVzWydkZXZpY2VzJ10pCi0KLSAgQG1vY2sucGF0Y2goJ2RldmlsLmFuZHJvaWQuYmF0dGVyeV91dGlscy5CYXR0ZXJ5VXRpbHMnKQotICBAbW9jay5wYXRjaCgnZGV2aWwuYW5kcm9pZC5kZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMuSGVhbHRoeURldmljZXMnKQotICBkZWYgdGVzdF9icm9rZW5UZW1wVmFsdWUoc2VsZiwgZ2V0X2RldmljZXMsIGdldF9iYXR0ZXJ5KToKLSAgICBzZWxmLmZpbGVfY29udGVudHNbJy9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmUwL3RlbXAnXSA9ICduMHQgYSBudW1iM3InCi0gICAgZ2V0X2RldmljZXMucmV0dXJuX3ZhbHVlID0gW3NlbGYuZGV2aWNlXQotICAgIGdldF9iYXR0ZXJ5LnJldHVybl92YWx1ZSA9IHNlbGYuYmF0dGVyeQotCi0gICAgZXhwZWN0ZWRfc3RhdHVzX25vX3RlbXAgPSBzZWxmLmV4cGVjdGVkX3N0YXR1cy5jb3B5KCkKLSAgICBleHBlY3RlZF9zdGF0dXNfbm9fdGVtcFsnZGV2aWNlX2NlcmVhbCddLnBvcCgndGVtcCcpCi0KLSAgICBzdGF0dXMgPSBkZXZpY2VfbW9uaXRvci5nZXRfYWxsX3N0YXR1cyhOb25lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZXhwZWN0ZWRfc3RhdHVzLCBzdGF0dXNbJ2RldmljZXMnXSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdCh1bml0dGVzdC5tYWluKCkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Rvb2xzL2RldmljZV9yZWNvdmVyeS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvZGV2aWNlX3JlY292ZXJ5LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwOTI1YWFlLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvZGV2aWNlX3JlY292ZXJ5LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJBIHNjcmlwdCB0byByZWNvdmVyIGRldmljZXMgaW4gYSBrbm93biBiYWQgc3RhdGUuIiIiCi0KLWltcG9ydCBhcmdwYXJzZQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHBzdXRpbAotaW1wb3J0IHNpZ25hbAotaW1wb3J0IHN5cwotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMucGF0aC5hcHBlbmQoCi0gICAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLicsICcuLicsICcuLicpKSkKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX2JsYWNrbGlzdAotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgYWRiX3dyYXBwZXIKLWZyb20gZGV2aWwuYW5kcm9pZC50b29scyBpbXBvcnQgZGV2aWNlX3N0YXR1cwotZnJvbSBkZXZpbC5hbmRyb2lkLnRvb2xzIGltcG9ydCBzY3JpcHRfY29tbW9uCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBsb2dnaW5nX2NvbW1vbgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgbHN1c2IKLSMgVE9ETyhqYnVkb3JpY2spOiBSZXNvbHZlIHRoaXMgYWZ0ZXIgZXhwZXJpbWVudGluZyB3LyBkaXNhYmxpbmcgdGhlIFVTQiByZXNldC4KLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHJlc2V0X3VzYiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAotCi1sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1kZWYgS2lsbEFsbEFkYigpOgotICBkZWYgZ2V0X2FsbF9hZGIoKToKLSAgICBmb3IgcCBpbiBwc3V0aWwucHJvY2Vzc19pdGVyKCk6Ci0gICAgICB0cnk6Ci0gICAgICAgICMgTm90ZTogcC5hc19kaWN0IGlzIGNvbXBhdGlibGUgd2l0aCBib3RoIG9sZGVyICh2MSBhbmQgdW5kZXIpIGFzIHdlbGwKLSAgICAgICAgIyBhcyBuZXdlciAodjIgYW5kIG92ZXIpIHZlcnNpb25zIG9mIHBzdXRpbC4KLSAgICAgICAgIyBTZWU6IGh0dHA6Ly9ncm9kb2xhLmJsb2dzcG90LmNvbS8yMDE0LzAxL3BzdXRpbC0yMC1wb3J0aW5nLmh0bWwKLSAgICAgICAgcGluZm8gPSBwLmFzX2RpY3QoYXR0cnM9WydwaWQnLCAnbmFtZScsICdjbWRsaW5lJ10pCi0gICAgICAgIGlmICdhZGInID09IHBpbmZvWyduYW1lJ106Ci0gICAgICAgICAgcGluZm9bJ2NtZGxpbmUnXSA9ICcgJy5qb2luKHBpbmZvWydjbWRsaW5lJ10pCi0gICAgICAgICAgeWllbGQgcCwgcGluZm8KLSAgICAgIGV4Y2VwdCAocHN1dGlsLk5vU3VjaFByb2Nlc3MsIHBzdXRpbC5BY2Nlc3NEZW5pZWQpOgotICAgICAgICBwYXNzCi0KLSAgZm9yIHNpZyBpbiBbc2lnbmFsLlNJR1RFUk0sIHNpZ25hbC5TSUdRVUlULCBzaWduYWwuU0lHS0lMTF06Ci0gICAgZm9yIHAsIHBpbmZvIGluIGdldF9hbGxfYWRiKCk6Ci0gICAgICB0cnk6Ci0gICAgICAgIHBpbmZvWydzaWduYWwnXSA9IHNpZwotICAgICAgICBsb2dnZXIuaW5mbygna2lsbCAlKHNpZ25hbClzICUocGlkKXMgKCUobmFtZSlzIFslKGNtZGxpbmUpc10pJywgcGluZm8pCi0gICAgICAgIHAuc2VuZF9zaWduYWwoc2lnKQotICAgICAgZXhjZXB0IChwc3V0aWwuTm9TdWNoUHJvY2VzcywgcHN1dGlsLkFjY2Vzc0RlbmllZCk6Ci0gICAgICAgIHBhc3MKLSAgZm9yIF8sIHBpbmZvIGluIGdldF9hbGxfYWRiKCk6Ci0gICAgdHJ5OgotICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8ga2lsbCAlKHBpZClzICglKG5hbWUpcyBbJShjbWRsaW5lKXNdKScsIHBpbmZvKQotICAgIGV4Y2VwdCAocHN1dGlsLk5vU3VjaFByb2Nlc3MsIHBzdXRpbC5BY2Nlc3NEZW5pZWQpOgotICAgICAgcGFzcwotCi0KLWRlZiBSZWNvdmVyRGV2aWNlKGRldmljZSwgYmxhY2tsaXN0LCBzaG91bGRfcmVib290PWxhbWJkYSBkZXZpY2U6IFRydWUpOgotICBpZiBkZXZpY2Vfc3RhdHVzLklzQmxhY2tsaXN0ZWQoZGV2aWNlLmFkYi5HZXREZXZpY2VTZXJpYWwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYWNrbGlzdCk6Ci0gICAgbG9nZ2VyLmRlYnVnKCclcyBpcyBibGFja2xpc3RlZCwgc2tpcHBpbmcgcmVjb3ZlcnkuJywgc3RyKGRldmljZSkpCi0gICAgcmV0dXJuCi0KLSAgaWYgc2hvdWxkX3JlYm9vdChkZXZpY2UpOgotICAgIHRyeToKLSAgICAgIGRldmljZS5XYWl0VW50aWxGdWxseUJvb3RlZChyZXRyaWVzPTApCi0gICAgZXhjZXB0IChkZXZpY2VfZXJyb3JzLkNvbW1hbmRUaW1lb3V0RXJyb3IsCi0gICAgICAgICAgICBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvciwKLSAgICAgICAgICAgIGRldmljZV9lcnJvcnMuRGV2aWNlVW5yZWFjaGFibGVFcnJvcik6Ci0gICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYWlsdXJlIHdoaWxlIHdhaXRpbmcgZm9yICVzLiAnCi0gICAgICAgICAgICAgICAgICAgICAgICdBdHRlbXB0aW5nIHRvIHJlY292ZXIuJywgc3RyKGRldmljZSkpCi0gICAgdHJ5OgotICAgICAgdHJ5OgotICAgICAgICBkZXZpY2UuUmVib290KGJsb2NrPUZhbHNlLCB0aW1lb3V0PTUsIHJldHJpZXM9MCkKLSAgICAgIGV4Y2VwdCBkZXZpY2VfZXJyb3JzLkNvbW1hbmRUaW1lb3V0RXJyb3I6Ci0gICAgICAgIGxvZ2dlci53YXJuaW5nKCdUaW1lZCBvdXQgd2hpbGUgYXR0ZW1wdGluZyB0byByZWJvb3QgJXMgbm9ybWFsbHkuJwotICAgICAgICAgICAgICAgICAgICAgICAnQXR0ZW1wdGluZyBhbHRlcm5hdGl2ZSByZWJvb3QuJywgc3RyKGRldmljZSkpCi0gICAgICAgICMgVGhlIGRldmljZSBkcm9wcyBvZmZsaW5lIGJlZm9yZSB3ZSBjYW4gZ3JhYiB0aGUgZXhpdCBjb2RlLCBzbwotICAgICAgICAjIHdlIGRvbid0IGNoZWNrIGZvciBzdGF0dXMuCi0gICAgICAgIHRyeToKLSAgICAgICAgICBkZXZpY2UuYWRiLlJvb3QoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICMgV2UgYXJlIGFscmVhZHkgaW4gYSBmYWlsdXJlIG1vZGUsIGF0dGVtcHQgdG8gcmVib290IHJlZ2FyZGxlc3Mgb2YKLSAgICAgICAgICAjIHdoYXQgZGV2aWNlLmFkYi5Sb290KCkgcmV0dXJucy4gSWYgdGhlIHN5c3JxIHJlYm9vdCBmYWlscyBhbgotICAgICAgICAgICMgZXhjZXB0aW9uIHdpbGxiZSB0aHJvd24gYXQgdGhhdCBsZXZlbC4KLSAgICAgICAgICBkZXZpY2UuYWRiLlNoZWxsKCdlY2hvIGIgPiAvcHJvYy9zeXNycS10cmlnZ2VyJywgZXhwZWN0X3N0YXR1cz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD01LCByZXRyaWVzPTApCi0gICAgZXhjZXB0IChkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvciwKLSAgICAgICAgICAgIGRldmljZV9lcnJvcnMuRGV2aWNlVW5yZWFjaGFibGVFcnJvcik6Ci0gICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYWlsZWQgdG8gcmVib290ICVzLicsIHN0cihkZXZpY2UpKQotICAgICAgaWYgYmxhY2tsaXN0OgotICAgICAgICBibGFja2xpc3QuRXh0ZW5kKFtkZXZpY2UuYWRiLkdldERldmljZVNlcmlhbCgpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb249J3JlYm9vdF9mYWlsdXJlJykKLSAgICBleGNlcHQgZGV2aWNlX2Vycm9ycy5Db21tYW5kVGltZW91dEVycm9yOgotICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignVGltZWQgb3V0IHdoaWxlIHJlYm9vdGluZyAlcy4nLCBzdHIoZGV2aWNlKSkKLSAgICAgIGlmIGJsYWNrbGlzdDoKLSAgICAgICAgYmxhY2tsaXN0LkV4dGVuZChbZGV2aWNlLmFkYi5HZXREZXZpY2VTZXJpYWwoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uPSdyZWJvb3RfdGltZW91dCcpCi0KLSAgICB0cnk6Ci0gICAgICBkZXZpY2UuV2FpdFVudGlsRnVsbHlCb290ZWQoCi0gICAgICAgICAgcmV0cmllcz0wLCB0aW1lb3V0PWRldmljZS5SRUJPT1RfREVGQVVMVF9USU1FT1VUKQotICAgIGV4Y2VwdCAoZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IsCi0gICAgICAgICAgICBkZXZpY2VfZXJyb3JzLkRldmljZVVucmVhY2hhYmxlRXJyb3IpOgotICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmFpbHVyZSB3aGlsZSB3YWl0aW5nIGZvciAlcy4nLCBzdHIoZGV2aWNlKSkKLSAgICAgIGlmIGJsYWNrbGlzdDoKLSAgICAgICAgYmxhY2tsaXN0LkV4dGVuZChbZGV2aWNlLmFkYi5HZXREZXZpY2VTZXJpYWwoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uPSdyZWJvb3RfZmFpbHVyZScpCi0gICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQ29tbWFuZFRpbWVvdXRFcnJvcjoKLSAgICAgIGxvZ2dlci5leGNlcHRpb24oJ1RpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciAlcy4nLCBzdHIoZGV2aWNlKSkKLSAgICAgIGlmIGJsYWNrbGlzdDoKLSAgICAgICAgYmxhY2tsaXN0LkV4dGVuZChbZGV2aWNlLmFkYi5HZXREZXZpY2VTZXJpYWwoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uPSdyZWJvb3RfdGltZW91dCcpCi0KLQotZGVmIFJlY292ZXJEZXZpY2VzKGRldmljZXMsIGJsYWNrbGlzdCwgZW5hYmxlX3VzYl9yZXNldD1GYWxzZSk6Ci0gICIiIkF0dGVtcHRzIHRvIHJlY292ZXIgYW55IGlub3BlcmFibGUgZGV2aWNlcyBpbiB0aGUgcHJvdmlkZWQgbGlzdC4KLQotICBBcmdzOgotICAgIGRldmljZXM6IFRoZSBsaXN0IG9mIGRldmljZXMgdG8gYXR0ZW1wdCB0byByZWNvdmVyLgotICAgIGJsYWNrbGlzdDogVGhlIGN1cnJlbnQgZGV2aWNlIGJsYWNrbGlzdCwgd2hpY2ggd2lsbCBiZSB1c2VkIHRoZW4KLSAgICAgIHJlc2V0LgotICAiIiIKLQotICBzdGF0dXNlcyA9IGRldmljZV9zdGF0dXMuRGV2aWNlU3RhdHVzKGRldmljZXMsIGJsYWNrbGlzdCkKLQotICBzaG91bGRfcmVzdGFydF91c2IgPSBzZXQoCi0gICAgICBzdGF0dXNbJ3NlcmlhbCddIGZvciBzdGF0dXMgaW4gc3RhdHVzZXMKLSAgICAgIGlmIChub3Qgc3RhdHVzWyd1c2Jfc3RhdHVzJ10KLSAgICAgICAgICBvciBzdGF0dXNbJ2FkYl9zdGF0dXMnXSBpbiAoJ29mZmxpbmUnLCAnbWlzc2luZycpKSkKLSAgc2hvdWxkX3Jlc3RhcnRfYWRiID0gc2hvdWxkX3Jlc3RhcnRfdXNiLnVuaW9uKHNldCgKLSAgICAgIHN0YXR1c1snc2VyaWFsJ10gZm9yIHN0YXR1cyBpbiBzdGF0dXNlcwotICAgICAgaWYgc3RhdHVzWydhZGJfc3RhdHVzJ10gPT0gJ3VuYXV0aG9yaXplZCcpKQotICBzaG91bGRfcmVib290X2RldmljZSA9IHNob3VsZF9yZXN0YXJ0X2FkYi51bmlvbihzZXQoCi0gICAgICBzdGF0dXNbJ3NlcmlhbCddIGZvciBzdGF0dXMgaW4gc3RhdHVzZXMKLSAgICAgIGlmIHN0YXR1c1snYmxhY2tsaXN0ZWQnXSkpCi0KLSAgbG9nZ2VyLmRlYnVnKCdTaG91bGQgcmVzdGFydCBVU0IgZm9yOicpCi0gIGZvciBkIGluIHNob3VsZF9yZXN0YXJ0X3VzYjoKLSAgICBsb2dnZXIuZGVidWcoJyAgJXMnLCBkKQotICBsb2dnZXIuZGVidWcoJ1Nob3VsZCByZXN0YXJ0IEFEQiBmb3I6JykKLSAgZm9yIGQgaW4gc2hvdWxkX3Jlc3RhcnRfYWRiOgotICAgIGxvZ2dlci5kZWJ1ZygnICAlcycsIGQpCi0gIGxvZ2dlci5kZWJ1ZygnU2hvdWxkIHJlYm9vdDonKQotICBmb3IgZCBpbiBzaG91bGRfcmVib290X2RldmljZToKLSAgICBsb2dnZXIuZGVidWcoJyAgJXMnLCBkKQotCi0gIGlmIGJsYWNrbGlzdDoKLSAgICBibGFja2xpc3QuUmVzZXQoKQotCi0gIGlmIHNob3VsZF9yZXN0YXJ0X2FkYjoKLSAgICBLaWxsQWxsQWRiKCkKLSAgICBhZGJfd3JhcHBlci5BZGJXcmFwcGVyLlN0YXJ0U2VydmVyKCkKLQotICBmb3Igc2VyaWFsIGluIHNob3VsZF9yZXN0YXJ0X3VzYjoKLSAgICB0cnk6Ci0gICAgICAjIFRPRE8oY3JidWcuY29tLzY0MjE5NCk6IFJlc2V0dGluZyBtYXkgYmUgY2F1c2luZyBtb3JlIGhhcm0KLSAgICAgICMgKHNwZWNpZmljYWxseSwga2VybmVsIHBhbmljcykgdGhhbiBpdCBkb2VzIGdvb2QuCi0gICAgICBpZiBlbmFibGVfdXNiX3Jlc2V0OgotICAgICAgICByZXNldF91c2IucmVzZXRfYW5kcm9pZF91c2Ioc2VyaWFsKQotICAgICAgZWxzZToKLSAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ1VTQiByZXNldCBkaXNhYmxlZCBmb3IgJXMgKGNyYnVnLmNvbS82NDI5MTQpJywKLSAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsKQotICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignVW5hYmxlIHRvIHJlc2V0IFVTQiBmb3IgJXMuJywgc2VyaWFsKQotICAgICAgaWYgYmxhY2tsaXN0OgotICAgICAgICBibGFja2xpc3QuRXh0ZW5kKFtzZXJpYWxdLCByZWFzb249J1VTQiBmYWlsdXJlJykKLSAgICBleGNlcHQgZGV2aWNlX2Vycm9ycy5EZXZpY2VVbnJlYWNoYWJsZUVycm9yOgotICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignVW5hYmxlIHRvIHJlc2V0IFVTQiBmb3IgJXMuJywgc2VyaWFsKQotICAgICAgaWYgYmxhY2tsaXN0OgotICAgICAgICBibGFja2xpc3QuRXh0ZW5kKFtzZXJpYWxdLCByZWFzb249J29mZmxpbmUnKQotCi0gIGRldmljZV91dGlscy5EZXZpY2VVdGlscy5wYXJhbGxlbChkZXZpY2VzKS5wTWFwKAotICAgICAgUmVjb3ZlckRldmljZSwgYmxhY2tsaXN0LAotICAgICAgc2hvdWxkX3JlYm9vdD1sYW1iZGEgZGV2aWNlOiBkZXZpY2Uuc2VyaWFsIGluIHNob3VsZF9yZWJvb3RfZGV2aWNlKQotCi0KLWRlZiBtYWluKCk6Ci0gIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKLSAgbG9nZ2luZ19jb21tb24uQWRkTG9nZ2luZ0FyZ3VtZW50cyhwYXJzZXIpCi0gIHNjcmlwdF9jb21tb24uQWRkRW52aXJvbm1lbnRBcmd1bWVudHMocGFyc2VyKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJsYWNrbGlzdC1maWxlJywgaGVscD0nRGV2aWNlIGJsYWNrbGlzdCBKU09OIGZpbGUuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1rbm93bi1kZXZpY2VzLWZpbGUnLCBhY3Rpb249J2FwcGVuZCcsIGRlZmF1bHQ9W10sCi0gICAgICAgICAgICAgICAgICAgICAgZGVzdD0na25vd25fZGV2aWNlc19maWxlcycsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGF0aCB0byBrbm93biBkZXZpY2UgbGlzdHMuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1lbmFibGUtdXNiLXJlc2V0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSZXNldCBVU0IgaWYgbmVjZXNzYXJ5LicpCi0KLSAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgbG9nZ2luZ19jb21tb24uSW5pdGlhbGl6ZUxvZ2dpbmcoYXJncykKLSAgc2NyaXB0X2NvbW1vbi5Jbml0aWFsaXplRW52aXJvbm1lbnQoYXJncykKLQotICBibGFja2xpc3QgPSAoZGV2aWNlX2JsYWNrbGlzdC5CbGFja2xpc3QoYXJncy5ibGFja2xpc3RfZmlsZSkKLSAgICAgICAgICAgICAgIGlmIGFyZ3MuYmxhY2tsaXN0X2ZpbGUKLSAgICAgICAgICAgICAgIGVsc2UgTm9uZSkKLQotICBleHBlY3RlZF9kZXZpY2VzID0gZGV2aWNlX3N0YXR1cy5HZXRFeHBlY3RlZERldmljZXMoYXJncy5rbm93bl9kZXZpY2VzX2ZpbGVzKQotICB1c2JfZGV2aWNlcyA9IHNldChsc3VzYi5nZXRfYW5kcm9pZF9kZXZpY2VzKCkpCi0gIGRldmljZXMgPSBbZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKHMpCi0gICAgICAgICAgICAgZm9yIHMgaW4gZXhwZWN0ZWRfZGV2aWNlcy51bmlvbih1c2JfZGV2aWNlcyldCi0KLSAgUmVjb3ZlckRldmljZXMoZGV2aWNlcywgYmxhY2tsaXN0LCBlbmFibGVfdXNiX3Jlc2V0PWFyZ3MuZW5hYmxlX3VzYl9yZXNldCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Rvb2xzL2RldmljZV9zdGF0dXMucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Rvb2xzL2RldmljZV9zdGF0dXMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGRiYmYyOTAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9kZXZpY2Vfc3RhdHVzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjk2ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJBIHNjcmlwdCB0byBrZWVwIHRyYWNrIG9mIGRldmljZXMgYWNyb3NzIGJ1aWxkcyBhbmQgcmVwb3J0IHN0YXRlLiIiIgotCi1pbXBvcnQgYXJncGFyc2UKLWltcG9ydCBqc29uCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzeXMKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLnBhdGguYXBwZW5kKAotICAgICAgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4nLCAnLi4nLCAnLi4nKSkpCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGJhdHRlcnlfdXRpbHMKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX2JsYWNrbGlzdAotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9saXN0Ci1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgYWRiX3dyYXBwZXIKLWZyb20gZGV2aWwuYW5kcm9pZC50b29scyBpbXBvcnQgc2NyaXB0X2NvbW1vbgotZnJvbSBkZXZpbC5jb25zdGFudHMgaW1wb3J0IGV4aXRfY29kZXMKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGxvZ2dpbmdfY29tbW9uCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBsc3VzYgotCi1sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotX1JFX0RFVklDRV9JRCA9IHJlLmNvbXBpbGUocidEZXZpY2UgSUQgPSAoXGQrKScpCi0KLQotZGVmIElzQmxhY2tsaXN0ZWQoc2VyaWFsLCBibGFja2xpc3QpOgotICByZXR1cm4gYmxhY2tsaXN0IGFuZCBzZXJpYWwgaW4gYmxhY2tsaXN0LlJlYWQoKQotCi0KLWRlZiBfQmF0dGVyeVN0YXR1cyhkZXZpY2UsIGJsYWNrbGlzdCk6Ci0gIGJhdHRlcnlfaW5mbyA9IHt9Ci0gIHRyeToKLSAgICBiYXR0ZXJ5ID0gYmF0dGVyeV91dGlscy5CYXR0ZXJ5VXRpbHMoZGV2aWNlKQotICAgIGJhdHRlcnlfaW5mbyA9IGJhdHRlcnkuR2V0QmF0dGVyeUluZm8odGltZW91dD01KQotICAgIGJhdHRlcnlfbGV2ZWwgPSBpbnQoYmF0dGVyeV9pbmZvLmdldCgnbGV2ZWwnLCAxMDApKQotCi0gICAgaWYgYmF0dGVyeV9sZXZlbCA8IDE1OgotICAgICAgbG9nZ2VyLmVycm9yKCdDcml0aWNhbGx5IGxvdyBiYXR0ZXJ5IGxldmVsICglZCknLCBiYXR0ZXJ5X2xldmVsKQotICAgICAgYmF0dGVyeSA9IGJhdHRlcnlfdXRpbHMuQmF0dGVyeVV0aWxzKGRldmljZSkKLSAgICAgIGlmIG5vdCBiYXR0ZXJ5LkdldENoYXJnaW5nKCk6Ci0gICAgICAgIGJhdHRlcnkuU2V0Q2hhcmdpbmcoVHJ1ZSkKLSAgICAgIGlmIGJsYWNrbGlzdDoKLSAgICAgICAgYmxhY2tsaXN0LkV4dGVuZChbZGV2aWNlLmFkYi5HZXREZXZpY2VTZXJpYWwoKV0sIHJlYXNvbj0nbG93X2JhdHRlcnknKQotCi0gIGV4Y2VwdCAoZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IsCi0gICAgICAgICAgZGV2aWNlX2Vycm9ycy5EZXZpY2VVbnJlYWNoYWJsZUVycm9yKToKLSAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYWlsZWQgdG8gZ2V0IGJhdHRlcnkgaW5mb3JtYXRpb24gZm9yICVzJywKLSAgICAgICAgICAgICAgICAgICAgIHN0cihkZXZpY2UpKQotCi0gIHJldHVybiBiYXR0ZXJ5X2luZm8KLQotCi1kZWYgRGV2aWNlU3RhdHVzKGRldmljZXMsIGJsYWNrbGlzdCk6Ci0gICIiIkdlbmVyYXRlcyBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBkZXZpY2VzLgotCi0gIEFyZ3M6Ci0gICAgZGV2aWNlczogVGhlIGRldmljZXMgdG8gZ2VuZXJhdGUgc3RhdHVzIGZvci4KLSAgICBibGFja2xpc3Q6IFRoZSBjdXJyZW50IGRldmljZSBibGFja2xpc3QuCi0gIFJldHVybnM6Ci0gICAgQSBkaWN0IG9mIHRoZSBmb2xsb3dpbmcgZm9ybToKLSAgICB7Ci0gICAgICAnPHNlcmlhbD4nOiB7Ci0gICAgICAgICdzZXJpYWwnOiAnPHNlcmlhbD4nLAotICAgICAgICAnYWRiX3N0YXR1cyc6IHN0ciwKLSAgICAgICAgJ3VzYl9zdGF0dXMnOiBib29sLAotICAgICAgICAnYmxhY2tsaXN0ZWQnOiBib29sLAotICAgICAgICAjIG9ubHkgaWYgdGhlIGRldmljZSBpcyBjb25uZWN0ZWQgYW5kIG5vdCBibGFja2xpc3RlZAotICAgICAgICAndHlwZSc6IHJvLmJ1aWxkLnByb2R1Y3QsCi0gICAgICAgICdidWlsZCc6IHJvLmJ1aWxkLmlkLAotICAgICAgICAnYnVpbGRfZGV0YWlsJzogcm8uYnVpbGQuZmluZ2VycHJpbnQsCi0gICAgICAgICdiYXR0ZXJ5JzogewotICAgICAgICAgIC4uLgotICAgICAgICB9LAotICAgICAgICAnaW1laV9zbGljZSc6IHN0ciwKLSAgICAgICAgJ3dpZmlfaXAnOiBzdHIsCi0gICAgICB9LAotICAgICAgLi4uCi0gICAgfQotICAiIiIKLSAgYWRiX2RldmljZXMgPSB7Ci0gICAgYVswXS5HZXREZXZpY2VTZXJpYWwoKTogYQotICAgIGZvciBhIGluIGFkYl93cmFwcGVyLkFkYldyYXBwZXIuRGV2aWNlcyhkZXNpcmVkX3N0YXRlPU5vbmUsIGxvbmdfbGlzdD1UcnVlKQotICB9Ci0gIHVzYl9kZXZpY2VzID0gc2V0KGxzdXNiLmdldF9hbmRyb2lkX2RldmljZXMoKSkKLQotICBkZWYgYmxhY2tsaXN0aW5nX2RldmljZV9zdGF0dXMoZGV2aWNlKToKLSAgICBzZXJpYWwgPSBkZXZpY2UuYWRiLkdldERldmljZVNlcmlhbCgpCi0gICAgYWRiX3N0YXR1cyA9ICgKLSAgICAgICAgYWRiX2RldmljZXNbc2VyaWFsXVsxXSBpZiBzZXJpYWwgaW4gYWRiX2RldmljZXMKLSAgICAgICAgZWxzZSAnbWlzc2luZycpCi0gICAgdXNiX3N0YXR1cyA9IGJvb2woc2VyaWFsIGluIHVzYl9kZXZpY2VzKQotCi0gICAgZGV2aWNlX3N0YXR1cyA9IHsKLSAgICAgICdzZXJpYWwnOiBzZXJpYWwsCi0gICAgICAnYWRiX3N0YXR1cyc6IGFkYl9zdGF0dXMsCi0gICAgICAndXNiX3N0YXR1cyc6IHVzYl9zdGF0dXMsCi0gICAgfQotCi0gICAgaWYgbm90IElzQmxhY2tsaXN0ZWQoc2VyaWFsLCBibGFja2xpc3QpOgotICAgICAgaWYgYWRiX3N0YXR1cyA9PSAnZGV2aWNlJzoKLSAgICAgICAgdHJ5OgotICAgICAgICAgIGJ1aWxkX3Byb2R1Y3QgPSBkZXZpY2UuYnVpbGRfcHJvZHVjdAotICAgICAgICAgIGJ1aWxkX2lkID0gZGV2aWNlLmJ1aWxkX2lkCi0gICAgICAgICAgYnVpbGRfZmluZ2VycHJpbnQgPSBkZXZpY2UuYnVpbGRfZmluZ2VycHJpbnQKLSAgICAgICAgICBidWlsZF9kZXNjcmlwdGlvbiA9IGRldmljZS5idWlsZF9kZXNjcmlwdGlvbgotICAgICAgICAgIHdpZmlfaXAgPSBkZXZpY2UuR2V0UHJvcCgnZGhjcC53bGFuMC5pcGFkZHJlc3MnKQotICAgICAgICAgIGJhdHRlcnlfaW5mbyA9IF9CYXR0ZXJ5U3RhdHVzKGRldmljZSwgYmxhY2tsaXN0KQotICAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGltZWlfc2xpY2UgPSBkZXZpY2UuR2V0SU1FSSgpCi0gICAgICAgICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yOgotICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oJ1VuYWJsZSB0byBmZXRjaCBJTUVJIGZvciAlcy4nLCBzdHIoZGV2aWNlKSkKLSAgICAgICAgICAgIGltZWlfc2xpY2UgPSAndW5rbm93bicKLQotICAgICAgICAgIGlmIChkZXZpY2UucHJvZHVjdF9uYW1lID09ICdtYW50YXJheScgYW5kCi0gICAgICAgICAgICAgIGJhdHRlcnlfaW5mby5nZXQoJ0FDIHBvd2VyZWQnLCBOb25lKSAhPSAndHJ1ZScpOgotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdNYW50YXJheSBkZXZpY2Ugbm90IGNvbm5lY3RlZCB0byBBQyBwb3dlci4nKQotCi0gICAgICAgICAgZGV2aWNlX3N0YXR1cy51cGRhdGUoewotICAgICAgICAgICAgJ3JvLmJ1aWxkLnByb2R1Y3QnOiBidWlsZF9wcm9kdWN0LAotICAgICAgICAgICAgJ3JvLmJ1aWxkLmlkJzogYnVpbGRfaWQsCi0gICAgICAgICAgICAncm8uYnVpbGQuZmluZ2VycHJpbnQnOiBidWlsZF9maW5nZXJwcmludCwKLSAgICAgICAgICAgICdyby5idWlsZC5kZXNjcmlwdGlvbic6IGJ1aWxkX2Rlc2NyaXB0aW9uLAotICAgICAgICAgICAgJ2JhdHRlcnknOiBiYXR0ZXJ5X2luZm8sCi0gICAgICAgICAgICAnaW1laV9zbGljZSc6IGltZWlfc2xpY2UsCi0gICAgICAgICAgICAnd2lmaV9pcCc6IHdpZmlfaXAsCi0gICAgICAgICAgfSkKLQotICAgICAgICBleGNlcHQgKGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yLAotICAgICAgICAgICAgICAgIGRldmljZV9lcnJvcnMuRGV2aWNlVW5yZWFjaGFibGVFcnJvcik6Ci0gICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmFpbHVyZSB3aGlsZSBnZXR0aW5nIGRldmljZSBzdGF0dXMgZm9yICVzLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoZGV2aWNlKSkKLSAgICAgICAgICBpZiBibGFja2xpc3Q6Ci0gICAgICAgICAgICBibGFja2xpc3QuRXh0ZW5kKFtzZXJpYWxdLCByZWFzb249J3N0YXR1c19jaGVja19mYWlsdXJlJykKLQotICAgICAgICBleGNlcHQgZGV2aWNlX2Vycm9ycy5Db21tYW5kVGltZW91dEVycm9yOgotICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ1RpbWVvdXQgd2hpbGUgZ2V0dGluZyBkZXZpY2Ugc3RhdHVzIGZvciAlcy4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGRldmljZSkpCi0gICAgICAgICAgaWYgYmxhY2tsaXN0OgotICAgICAgICAgICAgYmxhY2tsaXN0LkV4dGVuZChbc2VyaWFsXSwgcmVhc29uPSdzdGF0dXNfY2hlY2tfdGltZW91dCcpCi0KLSAgICAgIGVsaWYgYmxhY2tsaXN0OgotICAgICAgICBibGFja2xpc3QuRXh0ZW5kKFtzZXJpYWxdLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbj1hZGJfc3RhdHVzIGlmIHVzYl9zdGF0dXMgZWxzZSAnb2ZmbGluZScpCi0KLSAgICBkZXZpY2Vfc3RhdHVzWydibGFja2xpc3RlZCddID0gSXNCbGFja2xpc3RlZChzZXJpYWwsIGJsYWNrbGlzdCkKLQotICAgIHJldHVybiBkZXZpY2Vfc3RhdHVzCi0KLSAgcGFyYWxsZWxfZGV2aWNlcyA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscy5wYXJhbGxlbChkZXZpY2VzKQotICBzdGF0dXNlcyA9IHBhcmFsbGVsX2RldmljZXMucE1hcChibGFja2xpc3RpbmdfZGV2aWNlX3N0YXR1cykucEdldChOb25lKQotICByZXR1cm4gc3RhdHVzZXMKLQotCi1kZWYgX0xvZ1N0YXR1c2VzKHN0YXR1c2VzKToKLSAgIyBMb2cgdGhlIHN0YXRlIG9mIGFsbCBkZXZpY2VzLgotICBmb3Igc3RhdHVzIGluIHN0YXR1c2VzOgotICAgIGxvZ2dlci5pbmZvKHN0YXR1c1snc2VyaWFsJ10pCi0gICAgYWRiX3N0YXR1cyA9IHN0YXR1cy5nZXQoJ2FkYl9zdGF0dXMnKQotICAgIGJsYWNrbGlzdGVkID0gc3RhdHVzLmdldCgnYmxhY2tsaXN0ZWQnKQotICAgIGxvZ2dlci5pbmZvKCcgIFVTQiBzdGF0dXM6ICVzJywKLSAgICAgICAgICAgICAgICAnb25saW5lJyBpZiBzdGF0dXMuZ2V0KCd1c2Jfc3RhdHVzJykgZWxzZSAnb2ZmbGluZScpCi0gICAgbG9nZ2VyLmluZm8oJyAgQURCIHN0YXR1czogJXMnLCBhZGJfc3RhdHVzKQotICAgIGxvZ2dlci5pbmZvKCcgIEJsYWNrbGlzdGVkOiAlcycsIHN0cihibGFja2xpc3RlZCkpCi0gICAgaWYgYWRiX3N0YXR1cyA9PSAnZGV2aWNlJyBhbmQgbm90IGJsYWNrbGlzdGVkOgotICAgICAgbG9nZ2VyLmluZm8oJyAgRGV2aWNlIHR5cGU6ICVzJywgc3RhdHVzLmdldCgncm8uYnVpbGQucHJvZHVjdCcpKQotICAgICAgbG9nZ2VyLmluZm8oJyAgT1MgYnVpbGQ6ICVzJywgc3RhdHVzLmdldCgncm8uYnVpbGQuaWQnKSkKLSAgICAgIGxvZ2dlci5pbmZvKCcgIE9TIGJ1aWxkIGZpbmdlcnByaW50OiAlcycsCi0gICAgICAgICAgICAgICAgICBzdGF0dXMuZ2V0KCdyby5idWlsZC5maW5nZXJwcmludCcpKQotICAgICAgbG9nZ2VyLmluZm8oJyAgQmF0dGVyeSBzdGF0ZTonKQotICAgICAgZm9yIGssIHYgaW4gc3RhdHVzLmdldCgnYmF0dGVyeScsIHt9KS5pdGVyaXRlbXMoKToKLSAgICAgICAgbG9nZ2VyLmluZm8oJyAgICAlczogJXMnLCBrLCB2KQotICAgICAgbG9nZ2VyLmluZm8oJyAgSU1FSSBzbGljZTogJXMnLCBzdGF0dXMuZ2V0KCdpbWVpX3NsaWNlJykpCi0gICAgICBsb2dnZXIuaW5mbygnICBXaUZpIElQOiAlcycsIHN0YXR1cy5nZXQoJ3dpZmlfaXAnKSkKLQotCi1kZWYgX1dyaXRlQnVpbGRib3RGaWxlKGZpbGVfcGF0aCwgc3RhdHVzZXMpOgotICBidWlsZGJvdF9wYXRoLCBfID0gb3MucGF0aC5zcGxpdChmaWxlX3BhdGgpCi0gIGlmIG9zLnBhdGguZXhpc3RzKGJ1aWxkYm90X3BhdGgpOgotICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICd3JykgYXMgZjoKLSAgICAgIGZvciBzdGF0dXMgaW4gc3RhdHVzZXM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICBpZiBzdGF0dXNbJ2FkYl9zdGF0dXMnXSA9PSAnZGV2aWNlJzoKLSAgICAgICAgICAgIGYud3JpdGUoJ3tzZXJpYWx9IHthZGJfc3RhdHVzfSB7YnVpbGRfcHJvZHVjdH0ge2J1aWxkX2lkfSAnCi0gICAgICAgICAgICAgICAgICAgICd7dGVtcGVyYXR1cmU6LjFmfUMge2xldmVsfSVcbicuZm9ybWF0KAotICAgICAgICAgICAgICAgIHNlcmlhbD1zdGF0dXNbJ3NlcmlhbCddLAotICAgICAgICAgICAgICAgIGFkYl9zdGF0dXM9c3RhdHVzWydhZGJfc3RhdHVzJ10sCi0gICAgICAgICAgICAgICAgYnVpbGRfcHJvZHVjdD1zdGF0dXNbJ3R5cGUnXSwKLSAgICAgICAgICAgICAgICBidWlsZF9pZD1zdGF0dXNbJ2J1aWxkJ10sCi0gICAgICAgICAgICAgICAgdGVtcGVyYXR1cmU9ZmxvYXQoc3RhdHVzWydiYXR0ZXJ5J11bJ3RlbXBlcmF0dXJlJ10pIC8gMTAsCi0gICAgICAgICAgICAgICAgbGV2ZWw9c3RhdHVzWydiYXR0ZXJ5J11bJ2xldmVsJ10KLSAgICAgICAgICAgICkpCi0gICAgICAgICAgZWxpZiBzdGF0dXMuZ2V0KCd1c2Jfc3RhdHVzJywgRmFsc2UpOgotICAgICAgICAgICAgZi53cml0ZSgne3NlcmlhbH0ge2FkYl9zdGF0dXN9XG4nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICBzZXJpYWw9c3RhdHVzWydzZXJpYWwnXSwKLSAgICAgICAgICAgICAgICBhZGJfc3RhdHVzPXN0YXR1c1snYWRiX3N0YXR1cyddCi0gICAgICAgICAgICApKQotICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmLndyaXRlKCd7c2VyaWFsfSBvZmZsaW5lXG4nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICBzZXJpYWw9c3RhdHVzWydzZXJpYWwnXQotICAgICAgICAgICAgKSkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjogIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0Ci0gICAgICAgICAgcGFzcwotCi0KLWRlZiBHZXRFeHBlY3RlZERldmljZXMoa25vd25fZGV2aWNlc19maWxlcyk6Ci0gIGV4cGVjdGVkX2RldmljZXMgPSBzZXQoKQotICB0cnk6Ci0gICAgZm9yIHBhdGggaW4ga25vd25fZGV2aWNlc19maWxlczoKLSAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgotICAgICAgICBleHBlY3RlZF9kZXZpY2VzLnVwZGF0ZShkZXZpY2VfbGlzdC5HZXRQZXJzaXN0ZW50RGV2aWNlTGlzdChwYXRoKSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIGxvZ2dlci53YXJuaW5nKCdDb3VsZCBub3QgZmluZCBrbm93biBkZXZpY2VzIGZpbGU6ICVzJywgcGF0aCkKLSAgZXhjZXB0IElPRXJyb3I6Ci0gICAgbG9nZ2VyLndhcm5pbmcoJ1Byb2JsZW0gcmVhZGluZyAlcywgc2tpcHBpbmcuJywgcGF0aCkKLQotICBsb2dnZXIuaW5mbygnRXhwZWN0ZWQgZGV2aWNlczonKQotICBmb3IgZGV2aWNlIGluIGV4cGVjdGVkX2RldmljZXM6Ci0gICAgbG9nZ2VyLmluZm8oJyAgJXMnLCBkZXZpY2UpCi0gIHJldHVybiBleHBlY3RlZF9kZXZpY2VzCi0KLQotZGVmIEFkZEFyZ3VtZW50cyhwYXJzZXIpOgotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWpzb24tb3V0cHV0JywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdPdXRwdXQgSlNPTiBpbmZvcm1hdGlvbiBpbnRvIGEgc3BlY2lmaWVkIGZpbGUuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1ibGFja2xpc3QtZmlsZScsIGhlbHA9J0RldmljZSBibGFja2xpc3QgSlNPTiBmaWxlLicpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy0ta25vd24tZGV2aWNlcy1maWxlJywgYWN0aW9uPSdhcHBlbmQnLCBkZWZhdWx0PVtdLAotICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2tub3duX2RldmljZXNfZmlsZXMnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1BhdGggdG8ga25vd24gZGV2aWNlIGxpc3RzLicpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYnVpbGRib3QtcGF0aCcsICctYicsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nL2hvbWUvY2hyb21lLWJvdC8uYWRiX2RldmljZV9pbmZvJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdBYnNvbHV0ZSBwYXRoIHRvIGJ1aWxkYm90IGZpbGUgbG9jYXRpb24nKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdycsICctLW92ZXJ3cml0ZS1rbm93bi1kZXZpY2VzLWZpbGVzJywKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0lmIHNldCwgb3ZlcndyaXRlcyBrbm93biBkZXZpY2VzIGZpbGVzIHdpaHQgbmV3ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZXMuJykKLQotZGVmIG1haW4oKToKLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQotICBsb2dnaW5nX2NvbW1vbi5BZGRMb2dnaW5nQXJndW1lbnRzKHBhcnNlcikKLSAgc2NyaXB0X2NvbW1vbi5BZGRFbnZpcm9ubWVudEFyZ3VtZW50cyhwYXJzZXIpCi0gIEFkZEFyZ3VtZW50cyhwYXJzZXIpCi0gIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCi0KLSAgbG9nZ2luZ19jb21tb24uSW5pdGlhbGl6ZUxvZ2dpbmcoYXJncykKLSAgc2NyaXB0X2NvbW1vbi5Jbml0aWFsaXplRW52aXJvbm1lbnQoYXJncykKLQotICBibGFja2xpc3QgPSAoZGV2aWNlX2JsYWNrbGlzdC5CbGFja2xpc3QoYXJncy5ibGFja2xpc3RfZmlsZSkKLSAgICAgICAgICAgICAgIGlmIGFyZ3MuYmxhY2tsaXN0X2ZpbGUKLSAgICAgICAgICAgICAgIGVsc2UgTm9uZSkKLQotICBleHBlY3RlZF9kZXZpY2VzID0gR2V0RXhwZWN0ZWREZXZpY2VzKGFyZ3Mua25vd25fZGV2aWNlc19maWxlcykKLSAgdXNiX2RldmljZXMgPSBzZXQobHN1c2IuZ2V0X2FuZHJvaWRfZGV2aWNlcygpKQotICBkZXZpY2VzID0gW2RldmljZV91dGlscy5EZXZpY2VVdGlscyhzKQotICAgICAgICAgICAgIGZvciBzIGluIGV4cGVjdGVkX2RldmljZXMudW5pb24odXNiX2RldmljZXMpXQotCi0gIHN0YXR1c2VzID0gRGV2aWNlU3RhdHVzKGRldmljZXMsIGJsYWNrbGlzdCkKLQotICAjIExvZyB0aGUgc3RhdGUgb2YgYWxsIGRldmljZXMuCi0gIF9Mb2dTdGF0dXNlcyhzdGF0dXNlcykKLQotICAjIFVwZGF0ZSB0aGUgbGFzdCBkZXZpY2VzIGZpbGUocykuCi0gIGlmIGFyZ3Mub3ZlcndyaXRlX2tub3duX2RldmljZXNfZmlsZXM6Ci0gICAgZm9yIHBhdGggaW4gYXJncy5rbm93bl9kZXZpY2VzX2ZpbGVzOgotICAgICAgZGV2aWNlX2xpc3QuV3JpdGVQZXJzaXN0ZW50RGV2aWNlTGlzdCgKLSAgICAgICAgICBwYXRoLCBbc3RhdHVzWydzZXJpYWwnXSBmb3Igc3RhdHVzIGluIHN0YXR1c2VzXSkKLQotICAjIFdyaXRlIGRldmljZSBpbmZvIHRvIGZpbGUgZm9yIGJ1aWxkYm90IGluZm8gZGlzcGxheS4KLSAgX1dyaXRlQnVpbGRib3RGaWxlKGFyZ3MuYnVpbGRib3RfcGF0aCwgc3RhdHVzZXMpCi0KLSAgIyBEdW1wIHRoZSBkZXZpY2Ugc3RhdHVzZXMgdG8gSlNPTi4KLSAgaWYgYXJncy5qc29uX291dHB1dDoKLSAgICB3aXRoIG9wZW4oYXJncy5qc29uX291dHB1dCwgJ3diJykgYXMgZjoKLSAgICAgIGYud3JpdGUoanNvbi5kdW1wcygKLSAgICAgICAgICBzdGF0dXNlcywgaW5kZW50PTQsIHNvcnRfa2V5cz1UcnVlLCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKSkKLQotICBsaXZlX2RldmljZXMgPSBbc3RhdHVzWydzZXJpYWwnXSBmb3Igc3RhdHVzIGluIHN0YXR1c2VzCi0gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzWydhZGJfc3RhdHVzJ10gPT0gJ2RldmljZScKLSAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IElzQmxhY2tsaXN0ZWQoc3RhdHVzWydzZXJpYWwnXSwgYmxhY2tsaXN0KSldCi0KLSAgIyBJZiBhbGwgZGV2aWNlcyBmYWlsZWQsIG9yIGlmIHRoZXJlIGFyZSBubyBkZXZpY2VzLCBpdCdzIGFuIGluZnJhIGVycm9yLgotICBpZiBub3QgbGl2ZV9kZXZpY2VzOgotICAgIGxvZ2dlci5lcnJvcignTm8gYXZhaWxhYmxlIGRldmljZXMuJykKLSAgcmV0dXJuIDAgaWYgbGl2ZV9kZXZpY2VzIGVsc2UgZXhpdF9jb2Rlcy5JTkZSQQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvZmxhc2hfZGV2aWNlLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9mbGFzaF9kZXZpY2UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDhiNTFjNjAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9mbGFzaF9kZXZpY2UucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKAotICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJy4uJywgJy4uJykpKQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfYmxhY2tsaXN0Ci1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBmYXN0Ym9vdF91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkLnRvb2xzIGltcG9ydCBzY3JpcHRfY29tbW9uCi1mcm9tIGRldmlsLmNvbnN0YW50cyBpbXBvcnQgZXhpdF9jb2RlcwotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgbG9nZ2luZ19jb21tb24KLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotZGVmIG1haW4oKToKLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdidWlsZF9wYXRoJywgaGVscD0nUGF0aCB0byBhbmRyb2lkIGJ1aWxkLicpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy13JywgJy0td2lwZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0lmIHNldCwgd2lwZXMgdXNlciBkYXRhJykKLSAgbG9nZ2luZ19jb21tb24uQWRkTG9nZ2luZ0FyZ3VtZW50cyhwYXJzZXIpCi0gIHNjcmlwdF9jb21tb24uQWRkRGV2aWNlQXJndW1lbnRzKHBhcnNlcikKLSAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgbG9nZ2luZ19jb21tb24uSW5pdGlhbGl6ZUxvZ2dpbmcoYXJncykKLQotICBpZiBhcmdzLmJsYWNrbGlzdF9maWxlOgotICAgIGJsYWNrbGlzdCA9IGRldmljZV9ibGFja2xpc3QuQmxhY2tsaXN0KGFyZ3MuYmxhY2tsaXN0X2ZpbGUpLlJlYWQoKQotICAgIGlmIGJsYWNrbGlzdDoKLSAgICAgIGxvZ2dlci5jcml0aWNhbCgnRGV2aWNlKHMpIGluIGJsYWNrbGlzdCwgbm90IGZsYXNoaW5nIGRldmljZXM6JykKLSAgICAgIGZvciBrZXkgaW4gYmxhY2tsaXN0OgotICAgICAgICBsb2dnZXIuY3JpdGljYWwoJyAgJXMnLCBrZXkpCi0gICAgICByZXR1cm4gZXhpdF9jb2Rlcy5JTkZSQQotCi0gIGZsYXNoZWRfZGV2aWNlcyA9IFtdCi0gIGZhaWxlZF9kZXZpY2VzID0gW10KLQotICBkZWYgZmxhc2goZGV2aWNlKToKLSAgICBmYXN0Ym9vdCA9IGZhc3Rib290X3V0aWxzLkZhc3Rib290VXRpbHMoZGV2aWNlKQotICAgIHRyeToKLSAgICAgIGZhc3Rib290LkZsYXNoRGV2aWNlKGFyZ3MuYnVpbGRfcGF0aCwgd2lwZT1hcmdzLndpcGUpCi0gICAgICBmbGFzaGVkX2RldmljZXMuYXBwZW5kKGRldmljZSkKLSAgICBleGNlcHQgRXhjZXB0aW9uOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0Ci0gICAgICBsb2dnZXIuZXhjZXB0aW9uKCdEZXZpY2UgJXMgZmFpbGVkIHRvIGZsYXNoLicsIHN0cihkZXZpY2UpKQotICAgICAgZmFpbGVkX2RldmljZXMuYXBwZW5kKGRldmljZSkKLQotICBkZXZpY2VzID0gc2NyaXB0X2NvbW1vbi5HZXREZXZpY2VzKGFyZ3MuZGV2aWNlcywgYXJncy5ibGFja2xpc3RfZmlsZSkKLSAgZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLnBhcmFsbGVsKGRldmljZXMpLnBNYXAoZmxhc2gpCi0KLSAgaWYgZmxhc2hlZF9kZXZpY2VzOgotICAgIGxvZ2dlci5pbmZvKCdUaGUgZm9sbG93aW5nIGRldmljZXMgd2VyZSBmbGFzaGVkOicpCi0gICAgbG9nZ2VyLmluZm8oJyAgJXMnLCAnICcuam9pbihzdHIoZCkgZm9yIGQgaW4gZmxhc2hlZF9kZXZpY2VzKSkKLSAgaWYgZmFpbGVkX2RldmljZXM6Ci0gICAgbG9nZ2VyLmNyaXRpY2FsKCdUaGUgZm9sbG93aW5nIGRldmljZXMgZmFpbGVkIHRvIGZsYXNoOicpCi0gICAgbG9nZ2VyLmNyaXRpY2FsKCcgICVzJywgJyAnLmpvaW4oc3RyKGQpIGZvciBkIGluIGZhaWxlZF9kZXZpY2VzKSkKLSAgICByZXR1cm4gZXhpdF9jb2Rlcy5JTkZSQQotICByZXR1cm4gMAotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Rvb2xzL2tleWJvYXJkLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9rZXlib2FyZC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYzVjYjYxNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Rvb2xzL2tleWJvYXJkLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJVc2UgeW91ciBrZXlib2FyZCBhcyB5b3VyIHBob25lJ3Mga2V5Ym9hcmQuIEV4cGVyaW1lbnRhbC4iIiIKLQotaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgY29weQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGVybWlvcwotaW1wb3J0IHR0eQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMucGF0aC5hcHBlbmQoCi0gICAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLicsICcuLicsICcuLicpKSkKLWZyb20gZGV2aWwgaW1wb3J0IGJhc2VfZXJyb3IKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IGtleWV2ZW50Ci1mcm9tIGRldmlsLmFuZHJvaWQudG9vbHMgaW1wb3J0IHNjcmlwdF9jb21tb24KLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGxvZ2dpbmdfY29tbW9uCi0KLQotX0tFWV9NQVBQSU5HID0gewotICAnXHgwOCc6IGtleWV2ZW50LktFWUNPREVfREVMLAotICAnXHgwYSc6IGtleWV2ZW50LktFWUNPREVfRU5URVIsCi0gICcgJzoga2V5ZXZlbnQuS0VZQ09ERV9TUEFDRSwKLSAgJy4nOiBrZXlldmVudC5LRVlDT0RFX1BFUklPRCwKLSAgJzAnOiBrZXlldmVudC5LRVlDT0RFXzAsCi0gICcxJzoga2V5ZXZlbnQuS0VZQ09ERV8xLAotICAnMic6IGtleWV2ZW50LktFWUNPREVfMiwKLSAgJzMnOiBrZXlldmVudC5LRVlDT0RFXzMsCi0gICc0Jzoga2V5ZXZlbnQuS0VZQ09ERV80LAotICAnNSc6IGtleWV2ZW50LktFWUNPREVfNSwKLSAgJzYnOiBrZXlldmVudC5LRVlDT0RFXzYsCi0gICc3Jzoga2V5ZXZlbnQuS0VZQ09ERV83LAotICAnOCc6IGtleWV2ZW50LktFWUNPREVfOCwKLSAgJzknOiBrZXlldmVudC5LRVlDT0RFXzksCi0gICdhJzoga2V5ZXZlbnQuS0VZQ09ERV9BLAotICAnYic6IGtleWV2ZW50LktFWUNPREVfQiwKLSAgJ2MnOiBrZXlldmVudC5LRVlDT0RFX0MsCi0gICdkJzoga2V5ZXZlbnQuS0VZQ09ERV9ELAotICAnZSc6IGtleWV2ZW50LktFWUNPREVfRSwKLSAgJ2YnOiBrZXlldmVudC5LRVlDT0RFX0YsCi0gICdnJzoga2V5ZXZlbnQuS0VZQ09ERV9HLAotICAnaCc6IGtleWV2ZW50LktFWUNPREVfSCwKLSAgJ2knOiBrZXlldmVudC5LRVlDT0RFX0ksCi0gICdqJzoga2V5ZXZlbnQuS0VZQ09ERV9KLAotICAnayc6IGtleWV2ZW50LktFWUNPREVfSywKLSAgJ2wnOiBrZXlldmVudC5LRVlDT0RFX0wsCi0gICdtJzoga2V5ZXZlbnQuS0VZQ09ERV9NLAotICAnbic6IGtleWV2ZW50LktFWUNPREVfTiwKLSAgJ28nOiBrZXlldmVudC5LRVlDT0RFX08sCi0gICdwJzoga2V5ZXZlbnQuS0VZQ09ERV9QLAotICAncSc6IGtleWV2ZW50LktFWUNPREVfUSwKLSAgJ3InOiBrZXlldmVudC5LRVlDT0RFX1IsCi0gICdzJzoga2V5ZXZlbnQuS0VZQ09ERV9TLAotICAndCc6IGtleWV2ZW50LktFWUNPREVfVCwKLSAgJ3UnOiBrZXlldmVudC5LRVlDT0RFX1UsCi0gICd2Jzoga2V5ZXZlbnQuS0VZQ09ERV9WLAotICAndyc6IGtleWV2ZW50LktFWUNPREVfVywKLSAgJ3gnOiBrZXlldmVudC5LRVlDT0RFX1gsCi0gICd5Jzoga2V5ZXZlbnQuS0VZQ09ERV9ZLAotICAneic6IGtleWV2ZW50LktFWUNPREVfWiwKLSAgJ1x4N2YnOiBrZXlldmVudC5LRVlDT0RFX0RFTCwKLX0KLQotCi1kZWYgS2V5Ym9hcmQoZGV2aWNlLCBzdHJlYW1faXRyKToKLSAgdHJ5OgotICAgIGZvciBjIGluIHN0cmVhbV9pdHI6Ci0gICAgICBrID0gX0tFWV9NQVBQSU5HLmdldChjKQotICAgICAgaWYgazoKLSAgICAgICAgZGV2aWNlLlNlbmRLZXlFdmVudChrKQotICAgICAgZWxzZToKLSAgICAgICAgcHJpbnQKLSAgICAgICAgcHJpbnQgJyhObyBtYXBwaW5nIGZvciBjaGFyYWN0ZXIgMHgleCknICUgb3JkKGMpCi0gIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICBwYXNzCi0KLQotY2xhc3MgTXVsdGlwbGVEZXZpY2VzRXJyb3IoYmFzZV9lcnJvci5CYXNlRXJyb3IpOgotICBkZWYgX19pbml0X18oc2VsZiwgZGV2aWNlcyk6Ci0gICAgc3VwZXIoTXVsdGlwbGVEZXZpY2VzRXJyb3IsIHNlbGYpLl9faW5pdF9fKAotICAgICAgICAnTW9yZSB0aGFuIG9uZSBkZXZpY2UgZm91bmQ6ICVzJyAlICcsICcuam9pbihzdHIoZCkgZm9yIGQgaW4gZGV2aWNlcykpCi0KLQotZGVmIG1haW4ocmF3X2FyZ3MpOgotICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKLSAgICAgIGRlc2NyaXB0aW9uPSJVc2UgeW91ciBrZXlib2FyZCBhcyB5b3VyIHBob25lJ3Mga2V5Ym9hcmQuIikKLSAgbG9nZ2luZ19jb21tb24uQWRkTG9nZ2luZ0FyZ3VtZW50cyhwYXJzZXIpCi0gIHNjcmlwdF9jb21tb24uQWRkRGV2aWNlQXJndW1lbnRzKHBhcnNlcikKLSAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHJhd19hcmdzKQotCi0gIGxvZ2dpbmdfY29tbW9uLkluaXRpYWxpemVMb2dnaW5nKGFyZ3MpCi0KLSAgZGV2aWNlcyA9IHNjcmlwdF9jb21tb24uR2V0RGV2aWNlcyhhcmdzLmRldmljZXMsIE5vbmUpCi0gIGlmIGxlbihkZXZpY2VzKSA+IDE6Ci0gICAgcmFpc2UgTXVsdGlwbGVEZXZpY2VzRXJyb3IoZGV2aWNlcykKLQotICBkZWYgbmV4dF9jaGFyKCk6Ci0gICAgd2hpbGUgVHJ1ZToKLSAgICAgIHlpZWxkIHN5cy5zdGRpbi5yZWFkKDEpCi0KLSAgdHJ5OgotICAgIGZkID0gc3lzLnN0ZGluLmZpbGVubygpCi0KLSAgICAjIFNlZSBtYW4gMyB0ZXJtaW9zIGZvciBtb3JlIGluZm8gb24gd2hhdCB0aGlzIGlzIGRvaW5nLgotICAgIG9sZF9hdHRycyA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKQotICAgIG5ld19hdHRycyA9IGNvcHkuZGVlcGNvcHkob2xkX2F0dHJzKQotICAgIG5ld19hdHRyc1t0dHkuTEZMQUddID0gbmV3X2F0dHJzW3R0eS5MRkxBR10gJiB+KHRlcm1pb3MuSUNBTk9OKQotICAgIG5ld19hdHRyc1t0dHkuQ0NdW3R0eS5WTUlOXSA9IDEKLSAgICBuZXdfYXR0cnNbdHR5LkNDXVt0dHkuVlRJTUVdID0gMAotICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FGTFVTSCwgbmV3X2F0dHJzKQotCi0gICAgS2V5Ym9hcmQoZGV2aWNlc1swXSwgbmV4dF9jaGFyKCkpCi0gIGZpbmFsbHk6Ci0gICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQUZMVVNILCBvbGRfYXR0cnMpCi0gIHJldHVybiAwCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9wcm92aXNpb25fZGV2aWNlcy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvcHJvdmlzaW9uX2RldmljZXMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDY4YWNhM2IuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9wcm92aXNpb25fZGV2aWNlcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDY0NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlByb3Zpc2lvbnMgQW5kcm9pZCBkZXZpY2VzIHdpdGggc2V0dGluZ3MgcmVxdWlyZWQgZm9yIGJvdHMuCi0KLVVzYWdlOgotICAuL3Byb3Zpc2lvbl9kZXZpY2VzLnB5IFstZCA8ZGV2aWNlIHNlcmlhbCBudW1iZXI+XQotIiIiCi0KLWltcG9ydCBhcmdwYXJzZQotaW1wb3J0IGRhdGV0aW1lCi1pbXBvcnQganNvbgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHBvc2l4cGF0aAotaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGltZQotCi0jIEltcG9ydCBfc3RycHRpbWUgYmVmb3JlIHRocmVhZGVkIGNvZGUuIGRhdGV0aW1lLmRhdGV0aW1lLnN0cnB0aW1lIGlzCi0jIHRocmVhZHNhZmUgZXhjZXB0IGZvciB0aGUgaW5pdGlhbCBpbXBvcnQgb2YgdGhlIF9zdHJwdGltZSBtb2R1bGUuCi0jIFNlZSBjcmJ1Zy5jb20vNTg0NzMwIGFuZCBodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTc5ODAuCi1pbXBvcnQgX3N0cnB0aW1lICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Ci0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5wYXRoLmFwcGVuZCgKLSAgICAgIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uJywgJy4uJywgJy4uJykpKQotCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGJhdHRlcnlfdXRpbHMKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX2JsYWNrbGlzdAotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV90ZW1wX2ZpbGUKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3V0aWxzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IHNldHRpbmdzCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBhZGJfd3JhcHBlcgotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgaW50ZW50Ci1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBrZXlldmVudAotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgdmVyc2lvbl9jb2RlcwotZnJvbSBkZXZpbC5hbmRyb2lkLnRvb2xzIGltcG9ydCBzY3JpcHRfY29tbW9uCi1mcm9tIGRldmlsLmNvbnN0YW50cyBpbXBvcnQgZXhpdF9jb2RlcwotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgbG9nZ2luZ19jb21tb24KLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHRpbWVvdXRfcmV0cnkKLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLV9TWVNURU1fQVBQX0RJUkVDVE9SSUVTID0gWycvc3lzdGVtL2FwcC8nLCAnL3N5c3RlbS9wcml2LWFwcC8nXQotX1NZU1RFTV9XRUJWSUVXX05BTUVTID0gWyd3ZWJ2aWV3JywgJ1dlYlZpZXdHb29nbGUnXQotX0NIUk9NRV9QQUNLQUdFX1JFR0VYID0gcmUuY29tcGlsZSgnLipjaHJvbS4qJykKLV9UT01CU1RPTkVfUkVHRVggPSByZS5jb21waWxlKCd0b21ic3RvbmUuKicpCi0KLQotY2xhc3MgX0RFRkFVTFRfVElNRU9VVFMob2JqZWN0KToKLSAgIyBMIGNhbiB0YWtlIGEgd2hpbGUgdG8gcmVib290IGFmdGVyIGEgd2lwZS4KLSAgTE9MTElQT1AgPSA2MDAKLSAgUFJFX0xPTExJUE9QID0gMTgwCi0KLSAgSEVMUF9URVhUID0gJ3t9cyBvbiBMLCB7fXMgb24gcHJlLUwnLmZvcm1hdChMT0xMSVBPUCwgUFJFX0xPTExJUE9QKQotCi0KLWNsYXNzIFByb3Zpc2lvblN0ZXAob2JqZWN0KToKLQotICBkZWYgX19pbml0X18oc2VsZiwgY21kLCByZWJvb3Q9RmFsc2UpOgotICAgIHNlbGYuY21kID0gY21kCi0gICAgc2VsZi5yZWJvb3QgPSByZWJvb3QKLQotCi1kZWYgUHJvdmlzaW9uRGV2aWNlcygKLSAgICBkZXZpY2VzLAotICAgIGJsYWNrbGlzdF9maWxlLAotICAgIGFkYl9rZXlfZmlsZXM9Tm9uZSwKLSAgICBkaXNhYmxlX2xvY2F0aW9uPUZhbHNlLAotICAgIGRpc2FibGVfbW9ja19sb2NhdGlvbj1GYWxzZSwKLSAgICBkaXNhYmxlX25ldHdvcms9RmFsc2UsCi0gICAgZGlzYWJsZV9zeXN0ZW1fY2hyb21lPUZhbHNlLAotICAgIGVtdWxhdG9ycz1GYWxzZSwKLSAgICBlbmFibGVfamF2YV9kZWJ1Zz1GYWxzZSwKLSAgICBtYXhfYmF0dGVyeV90ZW1wPU5vbmUsCi0gICAgbWluX2JhdHRlcnlfbGV2ZWw9Tm9uZSwKLSAgICBvdXRwdXRfZGV2aWNlX2JsYWNrbGlzdD1Ob25lLAotICAgIHJlYm9vdF90aW1lb3V0PU5vbmUsCi0gICAgcmVtb3ZlX3N5c3RlbV93ZWJ2aWV3PUZhbHNlLAotICAgIHN5c3RlbV9hcHBfcmVtb3ZlX2xpc3Q9Tm9uZSwKLSAgICBzeXN0ZW1fcGFja2FnZV9yZW1vdmVfbGlzdD1Ob25lLAotICAgIHdpcGU9VHJ1ZSk6Ci0gIGJsYWNrbGlzdCA9IChkZXZpY2VfYmxhY2tsaXN0LkJsYWNrbGlzdChibGFja2xpc3RfZmlsZSkKLSAgICAgICAgICAgICAgIGlmIGJsYWNrbGlzdF9maWxlCi0gICAgICAgICAgICAgICBlbHNlIE5vbmUpCi0gIHN5c3RlbV9hcHBfcmVtb3ZlX2xpc3QgPSBzeXN0ZW1fYXBwX3JlbW92ZV9saXN0IG9yIFtdCi0gIHN5c3RlbV9wYWNrYWdlX3JlbW92ZV9saXN0ID0gc3lzdGVtX3BhY2thZ2VfcmVtb3ZlX2xpc3Qgb3IgW10KLSAgdHJ5OgotICAgIGRldmljZXMgPSBzY3JpcHRfY29tbW9uLkdldERldmljZXMoZGV2aWNlcywgYmxhY2tsaXN0KQotICBleGNlcHQgZGV2aWNlX2Vycm9ycy5Ob0RldmljZXNFcnJvcjoKLSAgICBsb2dnaW5nLmVycm9yKCdObyBhdmFpbGFibGUgZGV2aWNlcyB0byBwcm92aXNpb24uJykKLSAgICBpZiBibGFja2xpc3Q6Ci0gICAgICBsb2dnaW5nLmVycm9yKCdMb2NhbCBkZXZpY2UgYmxhY2tsaXN0OiAlcycsIGJsYWNrbGlzdC5SZWFkKCkpCi0gICAgcmFpc2UKLSAgZGV2aWNlcyA9IFtkIGZvciBkIGluIGRldmljZXMKLSAgICAgICAgICAgICBpZiBub3QgZW11bGF0b3JzIG9yIGQuYWRiLmlzX2VtdWxhdG9yXQotICBwYXJhbGxlbF9kZXZpY2VzID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLnBhcmFsbGVsKGRldmljZXMpCi0KLSAgc3RlcHMgPSBbXQotICBpZiB3aXBlOgotICAgIHN0ZXBzICs9IFtQcm92aXNpb25TdGVwKGxhbWJkYSBkOiBXaXBlKGQsIGFkYl9rZXlfZmlsZXMpLCByZWJvb3Q9VHJ1ZSldCi0gIHN0ZXBzICs9IFtQcm92aXNpb25TdGVwKAotICAgICAgbGFtYmRhIGQ6IFNldFByb3BlcnRpZXMoZCwgZW5hYmxlX2phdmFfZGVidWcsIGRpc2FibGVfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlX21vY2tfbG9jYXRpb24pLAotICAgICAgcmVib290PW5vdCBlbXVsYXRvcnMpXQotCi0gIGlmIGRpc2FibGVfbmV0d29yazoKLSAgICBzdGVwcy5hcHBlbmQoUHJvdmlzaW9uU3RlcChEaXNhYmxlTmV0d29yaykpCi0KLSAgaWYgZGlzYWJsZV9zeXN0ZW1fY2hyb21lOgotICAgIHN0ZXBzLmFwcGVuZChQcm92aXNpb25TdGVwKERpc2FibGVTeXN0ZW1DaHJvbWUpKQotCi0gIGlmIG1heF9iYXR0ZXJ5X3RlbXA6Ci0gICAgc3RlcHMuYXBwZW5kKFByb3Zpc2lvblN0ZXAoCi0gICAgICAgIGxhbWJkYSBkOiBXYWl0Rm9yQmF0dGVyeVRlbXBlcmF0dXJlKGQsIG1heF9iYXR0ZXJ5X3RlbXApKSkKLQotICBpZiBtaW5fYmF0dGVyeV9sZXZlbDoKLSAgICBzdGVwcy5hcHBlbmQoUHJvdmlzaW9uU3RlcCgKLSAgICAgICAgbGFtYmRhIGQ6IFdhaXRGb3JDaGFyZ2UoZCwgbWluX2JhdHRlcnlfbGV2ZWwpKSkKLQotICBpZiByZW1vdmVfc3lzdGVtX3dlYnZpZXc6Ci0gICAgc3lzdGVtX2FwcF9yZW1vdmVfbGlzdC5leHRlbmQoX1NZU1RFTV9XRUJWSUVXX05BTUVTKQotCi0gIGlmIHN5c3RlbV9hcHBfcmVtb3ZlX2xpc3Qgb3Igc3lzdGVtX3BhY2thZ2VfcmVtb3ZlX2xpc3Q6Ci0gICAgc3RlcHMuYXBwZW5kKFByb3Zpc2lvblN0ZXAoCi0gICAgICAgIGxhbWJkYSBkOiBSZW1vdmVTeXN0ZW1BcHBzKAotICAgICAgICAgICAgZCwgc3lzdGVtX2FwcF9yZW1vdmVfbGlzdCwgc3lzdGVtX3BhY2thZ2VfcmVtb3ZlX2xpc3QpKSkKLQotICBzdGVwcy5hcHBlbmQoUHJvdmlzaW9uU3RlcChTZXREYXRlKSkKLSAgc3RlcHMuYXBwZW5kKFByb3Zpc2lvblN0ZXAoQ2hlY2tFeHRlcm5hbFN0b3JhZ2UpKQotCi0gIHBhcmFsbGVsX2RldmljZXMucE1hcChQcm92aXNpb25EZXZpY2UsIHN0ZXBzLCBibGFja2xpc3QsIHJlYm9vdF90aW1lb3V0KQotCi0gIGJsYWNrbGlzdGVkX2RldmljZXMgPSBibGFja2xpc3QuUmVhZCgpIGlmIGJsYWNrbGlzdCBlbHNlIFtdCi0gIGlmIG91dHB1dF9kZXZpY2VfYmxhY2tsaXN0OgotICAgIHdpdGggb3BlbihvdXRwdXRfZGV2aWNlX2JsYWNrbGlzdCwgJ3cnKSBhcyBmOgotICAgICAganNvbi5kdW1wKGJsYWNrbGlzdGVkX2RldmljZXMsIGYpCi0gIGlmIGFsbChkIGluIGJsYWNrbGlzdGVkX2RldmljZXMgZm9yIGQgaW4gZGV2aWNlcyk6Ci0gICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Ob0RldmljZXNFcnJvcgotICByZXR1cm4gMAotCi0KLWRlZiBQcm92aXNpb25EZXZpY2UoZGV2aWNlLCBzdGVwcywgYmxhY2tsaXN0LCByZWJvb3RfdGltZW91dD1Ob25lKToKLSAgdHJ5OgotICAgIGlmIG5vdCByZWJvb3RfdGltZW91dDoKLSAgICAgIGlmIGRldmljZS5idWlsZF92ZXJzaW9uX3NkayA+PSB2ZXJzaW9uX2NvZGVzLkxPTExJUE9QOgotICAgICAgICByZWJvb3RfdGltZW91dCA9IF9ERUZBVUxUX1RJTUVPVVRTLkxPTExJUE9QCi0gICAgICBlbHNlOgotICAgICAgICByZWJvb3RfdGltZW91dCA9IF9ERUZBVUxUX1RJTUVPVVRTLlBSRV9MT0xMSVBPUAotCi0gICAgZm9yIHN0ZXAgaW4gc3RlcHM6Ci0gICAgICB0cnk6Ci0gICAgICAgIGRldmljZS5XYWl0VW50aWxGdWxseUJvb3RlZCh0aW1lb3V0PXJlYm9vdF90aW1lb3V0LCByZXRyaWVzPTApCi0gICAgICBleGNlcHQgZGV2aWNlX2Vycm9ycy5Db21tYW5kVGltZW91dEVycm9yOgotICAgICAgICBsb2dnZXIuZXJyb3IoJ0RldmljZSBkaWQgbm90IGZpbmlzaCBib290aW5nLiBXaWxsIHRyeSB0byByZWJvb3QuJykKLSAgICAgICAgZGV2aWNlLlJlYm9vdCh0aW1lb3V0PXJlYm9vdF90aW1lb3V0KQotICAgICAgc3RlcC5jbWQoZGV2aWNlKQotICAgICAgaWYgc3RlcC5yZWJvb3Q6Ci0gICAgICAgIGRldmljZS5SZWJvb3QoRmFsc2UsIHJldHJpZXM9MCkKLSAgICAgICAgZGV2aWNlLmFkYi5XYWl0Rm9yRGV2aWNlKCkKLQotICBleGNlcHQgZGV2aWNlX2Vycm9ycy5Db21tYW5kVGltZW91dEVycm9yOgotICAgIGxvZ2dlci5leGNlcHRpb24oJ1RpbWVkIG91dCB3YWl0aW5nIGZvciBkZXZpY2UgJXMuIEFkZGluZyB0byBibGFja2xpc3QuJywKLSAgICAgICAgICAgICAgICAgICAgIHN0cihkZXZpY2UpKQotICAgIGlmIGJsYWNrbGlzdDoKLSAgICAgIGJsYWNrbGlzdC5FeHRlbmQoW3N0cihkZXZpY2UpXSwgcmVhc29uPSdwcm92aXNpb25fdGltZW91dCcpCi0KLSAgZXhjZXB0IChkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvciwKLSAgICAgICAgICBkZXZpY2VfZXJyb3JzLkRldmljZVVucmVhY2hhYmxlRXJyb3IpOgotICAgIGxvZ2dlci5leGNlcHRpb24oJ0ZhaWxlZCB0byBwcm92aXNpb24gZGV2aWNlICVzLiBBZGRpbmcgdG8gYmxhY2tsaXN0LicsCi0gICAgICAgICAgICAgICAgICAgICBzdHIoZGV2aWNlKSkKLSAgICBpZiBibGFja2xpc3Q6Ci0gICAgICBibGFja2xpc3QuRXh0ZW5kKFtzdHIoZGV2aWNlKV0sIHJlYXNvbj0ncHJvdmlzaW9uX2ZhaWx1cmUnKQotCi0KLWRlZiBXaXBlKGRldmljZSwgYWRiX2tleV9maWxlcz1Ob25lKToKLSAgaWYgKGRldmljZS5Jc1VzZXJCdWlsZCgpIG9yCi0gICAgICBkZXZpY2UuYnVpbGRfdmVyc2lvbl9zZGsgPj0gdmVyc2lvbl9jb2Rlcy5NQVJTSE1BTExPVyk6Ci0gICAgV2lwZUNocm9tZURhdGEoZGV2aWNlKQotCi0gICAgcGFja2FnZSA9ICdjb20uZ29vZ2xlLmFuZHJvaWQuZ21zJwotICAgIGlmIGRldmljZS5HZXRBcHBsaWNhdGlvblBhdGhzKHBhY2thZ2UpOgotICAgICAgdmVyc2lvbl9uYW1lID0gZGV2aWNlLkdldEFwcGxpY2F0aW9uVmVyc2lvbihwYWNrYWdlKQotICAgICAgbG9nZ2VyLmluZm8oJ1ZlcnNpb24gbmFtZSBmb3IgJXMgaXMgJXMnLCBwYWNrYWdlLCB2ZXJzaW9uX25hbWUpCi0gICAgZWxzZToKLSAgICAgIGxvZ2dlci5pbmZvKCdQYWNrYWdlICVzIGlzIG5vdCBpbnN0YWxsZWQnLCBwYWNrYWdlKQotICBlbHNlOgotICAgIFdpcGVEZXZpY2UoZGV2aWNlLCBhZGJfa2V5X2ZpbGVzKQotCi0KLWRlZiBXaXBlQ2hyb21lRGF0YShkZXZpY2UpOgotICAiIiJXaXBlcyBjaHJvbWUgc3BlY2lmaWMgZGF0YSBmcm9tIGRldmljZQotCi0gICgxKSB1bmluc3RhbGwgYW55IGFwcCB3aG9zZSBuYW1lIG1hdGNoZXMgKmNocm9tKiwgZXhjZXB0Ci0gICAgICBjb20uYW5kcm9pZC5jaHJvbWUsIHdoaWNoIGlzIHRoZSBjaHJvbWUgc3RhYmxlIHBhY2thZ2UuIERvaW5nIHNvIGFsc28KLSAgICAgIHJlbW92ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZGlycyB1bmRlciAvZGF0YS9kYXRhLyBhbmQgL2RhdGEvYXBwLwotICAoMikgcmVtb3ZlIGFueSBkaXIgdW5kZXIgL2RhdGEvYXBwLWxpYi8gd2hvc2UgbmFtZSBtYXRjaGVzICpjaHJvbSoKLSAgKDMpIHJlbW92ZSBhbnkgZmlsZXMgdW5kZXIgL2RhdGEvdG9tYnN0b25lcy8gd2hvc2UgbmFtZSBtYXRjaGVzICJ0b21ic3RvbmUqIgotICAoNCkgcmVtb3ZlIC9kYXRhL2xvY2FsLnByb3AgaWYgdGhlcmUgaXMgYW55Ci0gICg1KSByZW1vdmUgL2RhdGEvbG9jYWwvY2hyb21lLWNvbW1hbmQtbGluZSBpZiB0aGVyZSBpcyBhbnkKLSAgKDYpIHJlbW92ZSBhbnl0aGluZyB1bmRlciAvZGF0YS9sb2NhbC8uY29uZmlnLyBpZiB0aGUgZGlyIGV4aXN0cwotICAgICAgKHRoaXMgaXMgdGVsZW1ldHJ5IHJlbGF0ZWQpCi0gICg3KSByZW1vdmUgYW55dGhpbmcgdW5kZXIgL2RhdGEvbG9jYWwvdG1wLwotCi0gIEFyZ3VtZW50czoKLSAgICBkZXZpY2U6IHRoZSBkZXZpY2UgdG8gd2lwZQotICAiIiIKLSAgdHJ5OgotICAgIGlmIGRldmljZS5Jc1VzZXJCdWlsZCgpOgotICAgICAgX1VuaW5zdGFsbElmTWF0Y2goZGV2aWNlLCBfQ0hST01FX1BBQ0tBR0VfUkVHRVgpCi0gICAgICBkZXZpY2UuUnVuU2hlbGxDb21tYW5kKCdybSAtcmYgJXMvKicgJSBkZXZpY2UuR2V0RXh0ZXJuYWxTdG9yYWdlUGF0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSkKLSAgICAgIGRldmljZS5SdW5TaGVsbENvbW1hbmQoJ3JtIC1yZiAvZGF0YS9sb2NhbC90bXAvKicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlKQotICAgIGVsc2U6Ci0gICAgICBkZXZpY2UuRW5hYmxlUm9vdCgpCi0gICAgICBfVW5pbnN0YWxsSWZNYXRjaChkZXZpY2UsIF9DSFJPTUVfUEFDS0FHRV9SRUdFWCkKLSAgICAgIF9XaXBlVW5kZXJEaXJJZk1hdGNoKGRldmljZSwgJy9kYXRhL2FwcC1saWIvJywgX0NIUk9NRV9QQUNLQUdFX1JFR0VYKQotICAgICAgX1dpcGVVbmRlckRpcklmTWF0Y2goZGV2aWNlLCAnL2RhdGEvdG9tYnN0b25lcy8nLCBfVE9NQlNUT05FX1JFR0VYKQotCi0gICAgICBfV2lwZUZpbGVPckRpcihkZXZpY2UsICcvZGF0YS9sb2NhbC5wcm9wJykKLSAgICAgIF9XaXBlRmlsZU9yRGlyKGRldmljZSwgJy9kYXRhL2xvY2FsL2Nocm9tZS1jb21tYW5kLWxpbmUnKQotICAgICAgX1dpcGVGaWxlT3JEaXIoZGV2aWNlLCAnL2RhdGEvbG9jYWwvLmNvbmZpZy8nKQotICAgICAgX1dpcGVGaWxlT3JEaXIoZGV2aWNlLCAnL2RhdGEvbG9jYWwvdG1wLycpCi0gICAgICBkZXZpY2UuUnVuU2hlbGxDb21tYW5kKCdybSAtcmYgJXMvKicgJSBkZXZpY2UuR2V0RXh0ZXJuYWxTdG9yYWdlUGF0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSkKLSAgZXhjZXB0IGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yOgotICAgIGxvZ2dlci5leGNlcHRpb24oJ1Bvc3NpYmxlIGZhaWx1cmUgd2hpbGUgd2lwaW5nIHRoZSBkZXZpY2UuICcKLSAgICAgICAgICAgICAgICAgICAgICdBdHRlbXB0aW5nIHRvIGNvbnRpbnVlLicpCi0KLQotZGVmIF9Vbmluc3RhbGxJZk1hdGNoKGRldmljZSwgcGF0dGVybik6Ci0gIGluc3RhbGxlZF9wYWNrYWdlcyA9IGRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICBbJ3BtJywgJ2xpc3QnLCAncGFja2FnZXMnXSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gIGluc3RhbGxlZF9zeXN0ZW1fcGFja2FnZXMgPSBbCi0gICAgICBwa2cuc3BsaXQoJzonKVsxXSBmb3IgcGtnIGluIGRldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgWydwbScsICdsaXN0JywgJ3BhY2thZ2VzJywgJy1zJ10sIGNoZWNrX3JldHVybj1UcnVlKV0KLSAgZm9yIHBhY2thZ2Vfb3V0cHV0IGluIGluc3RhbGxlZF9wYWNrYWdlczoKLSAgICBwYWNrYWdlID0gcGFja2FnZV9vdXRwdXQuc3BsaXQoIjoiKVsxXQotICAgIGlmIHBhdHRlcm4ubWF0Y2gocGFja2FnZSkgYW5kIHBhY2thZ2Ugbm90IGluIGluc3RhbGxlZF9zeXN0ZW1fcGFja2FnZXM6Ci0gICAgICBkZXZpY2UuVW5pbnN0YWxsKHBhY2thZ2UpCi0KLQotZGVmIF9XaXBlVW5kZXJEaXJJZk1hdGNoKGRldmljZSwgcGF0aCwgcGF0dGVybik6Ci0gIGZvciBmaWxlbmFtZSBpbiBkZXZpY2UuTGlzdERpcmVjdG9yeShwYXRoKToKLSAgICBpZiBwYXR0ZXJuLm1hdGNoKGZpbGVuYW1lKToKLSAgICAgIF9XaXBlRmlsZU9yRGlyKGRldmljZSwgcG9zaXhwYXRoLmpvaW4ocGF0aCwgZmlsZW5hbWUpKQotCi0KLWRlZiBfV2lwZUZpbGVPckRpcihkZXZpY2UsIHBhdGgpOgotICBpZiBkZXZpY2UuUGF0aEV4aXN0cyhwYXRoKToKLSAgICBkZXZpY2UuUnVuU2hlbGxDb21tYW5kKFsncm0nLCAnLXJmJywgcGF0aF0sIGNoZWNrX3JldHVybj1UcnVlKQotCi0KLWRlZiBXaXBlRGV2aWNlKGRldmljZSwgYWRiX2tleV9maWxlcyk6Ci0gICIiIldpcGVzIGRhdGEgZnJvbSBkZXZpY2UsIGtlZXBpbmcgb25seSB0aGUgYWRiX2tleXMgZm9yIGF1dGhvcml6YXRpb24uCi0KLSAgQWZ0ZXIgd2lwaW5nIGRhdGEgb24gYSBkZXZpY2UgdGhhdCBoYXMgYmVlbiBhdXRob3JpemVkLCBhZGIgY2FuIHN0aWxsCi0gIGNvbW11bmljYXRlIHdpdGggdGhlIGRldmljZSwgYnV0IGFmdGVyIHJlYm9vdCB0aGUgZGV2aWNlIHdpbGwgbmVlZCB0byBiZQotICByZS1hdXRob3JpemVkIGJlY2F1c2UgdGhlIGFkYiBrZXlzIGZpbGUgaXMgc3RvcmVkIGluIC9kYXRhL21pc2MvYWRiLy4KLSAgVGh1cywgYWRiX2tleXMgZmlsZSBpcyByZXdyaXR0ZW4gc28gdGhlIGRldmljZSBkb2VzIG5vdCBuZWVkIHRvIGJlCi0gIHJlLWF1dGhvcml6ZWQuCi0KLSAgQXJndW1lbnRzOgotICAgIGRldmljZTogdGhlIGRldmljZSB0byB3aXBlCi0gICIiIgotICB0cnk6Ci0gICAgZGV2aWNlLkVuYWJsZVJvb3QoKQotICAgIGRldmljZV9hdXRob3JpemVkID0gZGV2aWNlLkZpbGVFeGlzdHMoYWRiX3dyYXBwZXIuQURCX0tFWVNfRklMRSkKLSAgICBpZiBkZXZpY2VfYXV0aG9yaXplZDoKLSAgICAgIGFkYl9rZXlzID0gZGV2aWNlLlJlYWRGaWxlKGFkYl93cmFwcGVyLkFEQl9LRVlTX0ZJTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc19yb290PVRydWUpLnNwbGl0bGluZXMoKQotICAgIGRldmljZS5SdW5TaGVsbENvbW1hbmQoWyd3aXBlJywgJ2RhdGEnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzX3Jvb3Q9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgZGV2aWNlLmFkYi5XYWl0Rm9yRGV2aWNlKCkKLQotICAgIGlmIGRldmljZV9hdXRob3JpemVkOgotICAgICAgYWRiX2tleXNfc2V0ID0gc2V0KGFkYl9rZXlzKQotICAgICAgZm9yIGFkYl9rZXlfZmlsZSBpbiBhZGJfa2V5X2ZpbGVzIG9yIFtdOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgd2l0aCBvcGVuKGFkYl9rZXlfZmlsZSwgJ3InKSBhcyBmOgotICAgICAgICAgICAgYWRiX3B1YmxpY19rZXlzID0gZi5yZWFkbGluZXMoKQotICAgICAgICAgIGFkYl9rZXlzX3NldC51cGRhdGUoYWRiX3B1YmxpY19rZXlzKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICBsb2dnZXIud2FybmluZygnVW5hYmxlIHRvIGZpbmQgYWRiIGtleXMgZmlsZSAlcy4nLCBhZGJfa2V5X2ZpbGUpCi0gICAgICBfV3JpdGVBZGJLZXlzRmlsZShkZXZpY2UsICdcbicuam9pbihhZGJfa2V5c19zZXQpKQotICBleGNlcHQgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3I6Ci0gICAgbG9nZ2VyLmV4Y2VwdGlvbignUG9zc2libGUgZmFpbHVyZSB3aGlsZSB3aXBpbmcgdGhlIGRldmljZS4gJwotICAgICAgICAgICAgICAgICAgICAgJ0F0dGVtcHRpbmcgdG8gY29udGludWUuJykKLQotCi1kZWYgX1dyaXRlQWRiS2V5c0ZpbGUoZGV2aWNlLCBhZGJfa2V5c19zdHJpbmcpOgotICBkaXJfcGF0aCA9IHBvc2l4cGF0aC5kaXJuYW1lKGFkYl93cmFwcGVyLkFEQl9LRVlTX0ZJTEUpCi0gIGRldmljZS5SdW5TaGVsbENvbW1hbmQoWydta2RpcicsICctcCcsIGRpcl9wYXRoXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhc19yb290PVRydWUsIGNoZWNrX3JldHVybj1UcnVlKQotICBkZXZpY2UuUnVuU2hlbGxDb21tYW5kKFsncmVzdG9yZWNvbicsIGRpcl9wYXRoXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhc19yb290PVRydWUsIGNoZWNrX3JldHVybj1UcnVlKQotICBkZXZpY2UuV3JpdGVGaWxlKGFkYl93cmFwcGVyLkFEQl9LRVlTX0ZJTEUsIGFkYl9rZXlzX3N0cmluZywgYXNfcm9vdD1UcnVlKQotICBkZXZpY2UuUnVuU2hlbGxDb21tYW5kKFsncmVzdG9yZWNvbicsIGFkYl93cmFwcGVyLkFEQl9LRVlTX0ZJTEVdLAotICAgICAgICAgICAgICAgICAgICAgICAgIGFzX3Jvb3Q9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpCi0KLQotZGVmIFNldFByb3BlcnRpZXMoZGV2aWNlLCBlbmFibGVfamF2YV9kZWJ1ZywgZGlzYWJsZV9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgIGRpc2FibGVfbW9ja19sb2NhdGlvbik6Ci0gIHRyeToKLSAgICBkZXZpY2UuRW5hYmxlUm9vdCgpCi0gIGV4Y2VwdCBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvciBhcyBlOgotICAgIGxvZ2dlci53YXJuaW5nKHN0cihlKSkKLQotICBpZiBub3QgZGV2aWNlLklzVXNlckJ1aWxkKCk6Ci0gICAgX0NvbmZpZ3VyZUxvY2FsUHJvcGVydGllcyhkZXZpY2UsIGVuYWJsZV9qYXZhX2RlYnVnKQotICBlbHNlOgotICAgIGxvZ2dlci53YXJuaW5nKCdDYW5ub3QgY29uZmlndXJlIHByb3BlcnRpZXMgaW4gdXNlciBidWlsZHMuJykKLSAgc2V0dGluZ3MuQ29uZmlndXJlQ29udGVudFNldHRpbmdzKAotICAgICAgZGV2aWNlLCBzZXR0aW5ncy5ERVRFUk1JTklTVElDX0RFVklDRV9TRVRUSU5HUykKLSAgaWYgZGlzYWJsZV9sb2NhdGlvbjoKLSAgICBzZXR0aW5ncy5Db25maWd1cmVDb250ZW50U2V0dGluZ3MoCi0gICAgICAgIGRldmljZSwgc2V0dGluZ3MuRElTQUJMRV9MT0NBVElPTl9TRVRUSU5HUykKLSAgZWxzZToKLSAgICBzZXR0aW5ncy5Db25maWd1cmVDb250ZW50U2V0dGluZ3MoCi0gICAgICAgIGRldmljZSwgc2V0dGluZ3MuRU5BQkxFX0xPQ0FUSU9OX1NFVFRJTkdTKQotCi0gIGlmIGRpc2FibGVfbW9ja19sb2NhdGlvbjoKLSAgICBzZXR0aW5ncy5Db25maWd1cmVDb250ZW50U2V0dGluZ3MoCi0gICAgICAgIGRldmljZSwgc2V0dGluZ3MuRElTQUJMRV9NT0NLX0xPQ0FUSU9OX1NFVFRJTkdTKQotICBlbHNlOgotICAgIHNldHRpbmdzLkNvbmZpZ3VyZUNvbnRlbnRTZXR0aW5ncygKLSAgICAgICAgZGV2aWNlLCBzZXR0aW5ncy5FTkFCTEVfTU9DS19MT0NBVElPTl9TRVRUSU5HUykKLQotICBzZXR0aW5ncy5TZXRMb2NrU2NyZWVuU2V0dGluZ3MoZGV2aWNlKQotCi0gICMgU29tZSBkZXZpY2UgdHlwZXMgY2FuIG1vbWVudGFyaWx5IGRpc2FwcGVhciBhZnRlciBzZXR0aW5nIHByb3BlcnRpZXMuCi0gIGRldmljZS5hZGIuV2FpdEZvckRldmljZSgpCi0KLQotZGVmIERpc2FibGVOZXR3b3JrKGRldmljZSk6Ci0gIHNldHRpbmdzLkNvbmZpZ3VyZUNvbnRlbnRTZXR0aW5ncygKLSAgICAgIGRldmljZSwgc2V0dGluZ3MuTkVUV09SS19ESVNBQkxFRF9TRVRUSU5HUykKLSAgaWYgZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrID49IHZlcnNpb25fY29kZXMuTUFSU0hNQUxMT1c6Ci0gICAgIyBFbnN1cmUgdGhhdCBORkMgaXMgYWxzbyBzd2l0Y2hlZCBvZmYuCi0gICAgZGV2aWNlLlJ1blNoZWxsQ29tbWFuZChbJ3N2YycsICduZmMnLCAnZGlzYWJsZSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNfcm9vdD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSkKLQotCi1kZWYgRGlzYWJsZVN5c3RlbUNocm9tZShkZXZpY2UpOgotICAjIFRoZSBzeXN0ZW0gY2hyb21lIHZlcnNpb24gb24gdGhlIGRldmljZSBpbnRlcmZlcmVzIHdpdGggc29tZSB0ZXN0cy4KLSAgZGV2aWNlLlJ1blNoZWxsQ29tbWFuZChbJ3BtJywgJ2Rpc2FibGUnLCAnY29tLmFuZHJvaWQuY2hyb21lJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXNfcm9vdD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSkKLQotCi1kZWYgX0ZpbmRTeXN0ZW1QYWNrYWdlUGF0aHMoZGV2aWNlLCBzeXN0ZW1fcGFja2FnZV9saXN0KToKLSAgZm91bmRfcGF0aHMgPSBbXQotICBmb3Igc3lzdGVtX3BhY2thZ2UgaW4gc3lzdGVtX3BhY2thZ2VfbGlzdDoKLSAgICBmb3VuZF9wYXRocy5leHRlbmQoZGV2aWNlLkdldEFwcGxpY2F0aW9uUGF0aHMoc3lzdGVtX3BhY2thZ2UpKQotICByZXR1cm4gW3AgZm9yIHAgaW4gZm91bmRfcGF0aHMgaWYgcC5zdGFydHN3aXRoKCcvc3lzdGVtLycpXQotCi0KLWRlZiBfRmluZFN5c3RlbUFwcFBhdGhzKGRldmljZSwgc3lzdGVtX2FwcF9saXN0KToKLSAgZm91bmRfcGF0aHMgPSBbXQotICBmb3Igc3lzdGVtX2FwcCBpbiBzeXN0ZW1fYXBwX2xpc3Q6Ci0gICAgZm9yIGRpcmVjdG9yeSBpbiBfU1lTVEVNX0FQUF9ESVJFQ1RPUklFUzoKLSAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCBzeXN0ZW1fYXBwKQotICAgICAgaWYgZGV2aWNlLlBhdGhFeGlzdHMocGF0aCk6Ci0gICAgICAgIGZvdW5kX3BhdGhzLmFwcGVuZChwYXRoKQotICByZXR1cm4gZm91bmRfcGF0aHMKLQotCi1kZWYgUmVtb3ZlU3lzdGVtQXBwcygKLSAgICBkZXZpY2UsIHN5c3RlbV9hcHBfcmVtb3ZlX2xpc3QsIHN5c3RlbV9wYWNrYWdlX3JlbW92ZV9saXN0KToKLSAgIiIiQXR0ZW1wdHMgdG8gcmVtb3ZlIHRoZSBwcm92aWRlZCBzeXN0ZW0gYXBwcyBmcm9tIHRoZSBnaXZlbiBkZXZpY2UuCi0KLSAgQXJndW1lbnRzOgotICAgIGRldmljZTogVGhlIGRldmljZSB0byByZW1vdmUgdGhlIHN5c3RlbSBhcHBzIGZyb20uCi0gICAgc3lzdGVtX2FwcF9yZW1vdmVfbGlzdDogQSBsaXN0IG9mIGFwcCBuYW1lcyB0byByZW1vdmUsIGUuZy4KLSAgICAgICAgWydXZWJWaWV3R29vZ2xlJywgJ0dvb2dsZVZyQ29yZSddCi0gICAgc3lzdGVtX3BhY2thZ2VfcmVtb3ZlX2xpc3Q6IEEgbGlzdCBvZiBhcHAgcGFja2FnZXMgdG8gcmVtb3ZlLCBlLmcuCi0gICAgICAgIFsnY29tLmdvb2dsZS5hbmRyb2lkLndlYnZpZXcnXQotICAiIiIKLSAgZGV2aWNlLkVuYWJsZVJvb3QoKQotICBpZiBkZXZpY2UuSGFzUm9vdCgpOgotICAgIHN5c3RlbV9hcHBfcGF0aHMgPSAoCi0gICAgICAgIF9GaW5kU3lzdGVtQXBwUGF0aHMoZGV2aWNlLCBzeXN0ZW1fYXBwX3JlbW92ZV9saXN0KSArCi0gICAgICAgIF9GaW5kU3lzdGVtUGFja2FnZVBhdGhzKGRldmljZSwgc3lzdGVtX3BhY2thZ2VfcmVtb3ZlX2xpc3QpKQotICAgIGlmIHN5c3RlbV9hcHBfcGF0aHM6Ci0gICAgICAjIERpc2FibGUgTWFyc2htYWxsb3cncyBWZXJpdHkgc2VjdXJpdHkgZmVhdHVyZQotICAgICAgaWYgZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrID49IHZlcnNpb25fY29kZXMuTUFSU0hNQUxMT1c6Ci0gICAgICAgIGxvZ2dlci5pbmZvKCdEaXNhYmxpbmcgVmVyaXR5IG9uICVzJywgZGV2aWNlLnNlcmlhbCkKLSAgICAgICAgZGV2aWNlLmFkYi5EaXNhYmxlVmVyaXR5KCkKLSAgICAgICAgZGV2aWNlLlJlYm9vdCgpCi0gICAgICAgIGRldmljZS5XYWl0VW50aWxGdWxseUJvb3RlZCgpCi0gICAgICAgIGRldmljZS5FbmFibGVSb290KCkKLQotICAgICAgZGV2aWNlLmFkYi5SZW1vdW50KCkKLSAgICAgIGRldmljZS5SdW5TaGVsbENvbW1hbmQoWydzdG9wJ10sIGNoZWNrX3JldHVybj1UcnVlKQotICAgICAgZGV2aWNlLlJlbW92ZVBhdGgoc3lzdGVtX2FwcF9wYXRocywgZm9yY2U9VHJ1ZSwgcmVjdXJzaXZlPVRydWUpCi0gICAgICBkZXZpY2UuUnVuU2hlbGxDb21tYW5kKFsnc3RhcnQnXSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gIGVsc2U6Ci0gICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IoCi0gICAgICAgICdGYWlsZWQgdG8gcmVtb3ZlIHN5c3RlbSBhcHBzIGZyb20gbm9uLXJvb3RlZCBkZXZpY2UnLCBzdHIoZGV2aWNlKSkKLQotCi1kZWYgX0NvbmZpZ3VyZUxvY2FsUHJvcGVydGllcyhkZXZpY2UsIGphdmFfZGVidWc9VHJ1ZSk6Ci0gICIiIlNldCBzdGFuZGFyZCByZWFkb25seSB0ZXN0aW5nIGRldmljZSBwcm9wZXJ0aWVzIHByaW9yIHRvIHJlYm9vdC4iIiIKLSAgbG9jYWxfcHJvcHMgPSBbCi0gICAgICAncGVyc2lzdC5zeXMudXNiLmNvbmZpZz1hZGInLAotICAgICAgJ3JvLm1vbmtleT0xJywKLSAgICAgICdyby50ZXN0X2hhcm5lc3M9MScsCi0gICAgICAncm8uYXVkaW8uc2lsZW50PTEnLAotICAgICAgJ3JvLnNldHVwd2l6YXJkLm1vZGU9RElTQUJMRUQnLAotICAgICAgXQotICBpZiBqYXZhX2RlYnVnOgotICAgIGxvY2FsX3Byb3BzLmFwcGVuZCgKLSAgICAgICAgJyVzPWFsbCcgJSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMuSkFWQV9BU1NFUlRfUFJPUEVSVFkpCi0gICAgbG9jYWxfcHJvcHMuYXBwZW5kKCdkZWJ1Zy5jaGVja2puaT0xJykKLSAgdHJ5OgotICAgIGRldmljZS5Xcml0ZUZpbGUoCi0gICAgICAgIGRldmljZS5MT0NBTF9QUk9QRVJUSUVTX1BBVEgsCi0gICAgICAgICdcbicuam9pbihsb2NhbF9wcm9wcyksIGFzX3Jvb3Q9VHJ1ZSkKLSAgICAjIEFuZHJvaWQgd2lsbCBub3QgcmVzcGVjdCB0aGUgbG9jYWwgcHJvcHMgZmlsZSBpZiBpdCBpcyB3b3JsZCB3cml0YWJsZS4KLSAgICBkZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBbJ2NobW9kJywgJzY0NCcsIGRldmljZS5MT0NBTF9QUk9QRVJUSUVTX1BBVEhdLAotICAgICAgICBhc19yb290PVRydWUsIGNoZWNrX3JldHVybj1UcnVlKQotICBleGNlcHQgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3I6Ci0gICAgbG9nZ2VyLmV4Y2VwdGlvbignRmFpbGVkIHRvIGNvbmZpZ3VyZSBsb2NhbCBwcm9wZXJ0aWVzLicpCi0KLQotZGVmIEZpbmlzaFByb3Zpc2lvbmluZyhkZXZpY2UpOgotICAjIFRoZSBsb2Nrc2NyZWVuIGNhbid0IGJlIGRpc2FibGVkIG9uIHVzZXIgYnVpbGRzLCBzbyBzZW5kIGEga2V5ZXZlbnQKLSAgIyB0byB1bmxvY2sgaXQuCi0gIGlmIGRldmljZS5Jc1VzZXJCdWlsZCgpOgotICAgIGRldmljZS5TZW5kS2V5RXZlbnQoa2V5ZXZlbnQuS0VZQ09ERV9NRU5VKQotCi0KLWRlZiBXYWl0Rm9yQ2hhcmdlKGRldmljZSwgbWluX2JhdHRlcnlfbGV2ZWwpOgotICBiYXR0ZXJ5ID0gYmF0dGVyeV91dGlscy5CYXR0ZXJ5VXRpbHMoZGV2aWNlKQotICB0cnk6Ci0gICAgYmF0dGVyeS5DaGFyZ2VEZXZpY2VUb0xldmVsKG1pbl9iYXR0ZXJ5X2xldmVsKQotICBleGNlcHQgZGV2aWNlX2Vycm9ycy5EZXZpY2VDaGFyZ2luZ0Vycm9yOgotICAgIGRldmljZS5SZWJvb3QoKQotICAgIGJhdHRlcnkuQ2hhcmdlRGV2aWNlVG9MZXZlbChtaW5fYmF0dGVyeV9sZXZlbCkKLQotCi1kZWYgV2FpdEZvckJhdHRlcnlUZW1wZXJhdHVyZShkZXZpY2UsIG1heF9iYXR0ZXJ5X3RlbXApOgotICB0cnk6Ci0gICAgYmF0dGVyeSA9IGJhdHRlcnlfdXRpbHMuQmF0dGVyeVV0aWxzKGRldmljZSkKLSAgICBiYXR0ZXJ5LkxldEJhdHRlcnlDb29sVG9UZW1wZXJhdHVyZShtYXhfYmF0dGVyeV90ZW1wKQotICBleGNlcHQgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3I6Ci0gICAgbG9nZ2VyLmV4Y2VwdGlvbignVW5hYmxlIHRvIGxldCBiYXR0ZXJ5IGNvb2wgdG8gc3BlY2lmaWVkIHRlbXBlcmF0dXJlLicpCi0KLQotZGVmIFNldERhdGUoZGV2aWNlKToKLSAgZGVmIF9zZXRfYW5kX3ZlcmlmeV9kYXRlKCk6Ci0gICAgaWYgZGV2aWNlLmJ1aWxkX3ZlcnNpb25fc2RrID49IHZlcnNpb25fY29kZXMuTUFSU0hNQUxMT1c6Ci0gICAgICBkYXRlX2Zvcm1hdCA9ICclbSVkJUglTSVZLiVTJwotICAgICAgc2V0X2RhdGVfY29tbWFuZCA9IFsnZGF0ZScsICctdSddCi0gICAgICBnZXRfZGF0ZV9jb21tYW5kID0gWydkYXRlJywgJy11J10KLSAgICBlbHNlOgotICAgICAgZGF0ZV9mb3JtYXQgPSAnJVklbSVkLiVIJU0lUycKLSAgICAgIHNldF9kYXRlX2NvbW1hbmQgPSBbJ2RhdGUnLCAnLXMnXQotICAgICAgZ2V0X2RhdGVfY29tbWFuZCA9IFsnZGF0ZSddCi0KLSAgICAjIFRPRE8oamJ1ZG9yaWNrKTogVGhpcyBpcyB3cm9uZyBvbiBwcmUtTSBkZXZpY2VzIC0tIGdldC9zZXQgYXJlCi0gICAgIyBkZWFsaW5nIGluIGxvY2FsIHRpbWUsIGJ1dCB3ZSdyZSBzZXR0aW5nIGJhc2VkIG9uIEdNVC4KLSAgICBzdHJnbXRpbWUgPSB0aW1lLnN0cmZ0aW1lKGRhdGVfZm9ybWF0LCB0aW1lLmdtdGltZSgpKQotICAgIHNldF9kYXRlX2NvbW1hbmQuYXBwZW5kKHN0cmdtdGltZSkKLSAgICBkZXZpY2UuUnVuU2hlbGxDb21tYW5kKHNldF9kYXRlX2NvbW1hbmQsIGFzX3Jvb3Q9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUpCi0KLSAgICBnZXRfZGF0ZV9jb21tYW5kLmFwcGVuZCgnKyIlWSVtJWQuJUglTSVTIicpCi0gICAgZGV2aWNlX3RpbWUgPSBkZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBnZXRfZGF0ZV9jb21tYW5kLCBjaGVja19yZXR1cm49VHJ1ZSwKLSAgICAgICAgYXNfcm9vdD1UcnVlLCBzaW5nbGVfbGluZT1UcnVlKS5yZXBsYWNlKCciJywgJycpCi0gICAgZGV2aWNlX3RpbWUgPSBkYXRldGltZS5kYXRldGltZS5zdHJwdGltZShkZXZpY2VfdGltZSwgIiVZJW0lZC4lSCVNJVMiKQotICAgIGNvcnJlY3RfdGltZSA9IGRhdGV0aW1lLmRhdGV0aW1lLnN0cnB0aW1lKHN0cmdtdGltZSwgZGF0ZV9mb3JtYXQpCi0gICAgdGRlbHRhID0gKGNvcnJlY3RfdGltZSAtIGRldmljZV90aW1lKS5zZWNvbmRzCi0gICAgaWYgdGRlbHRhIDw9IDE6Ci0gICAgICBsb2dnZXIuaW5mbygnRGF0ZS90aW1lIHN1Y2Nlc3NmdWxseSBzZXQgb24gJXMnLCBkZXZpY2UpCi0gICAgICByZXR1cm4gVHJ1ZQotICAgIGVsc2U6Ci0gICAgICBsb2dnZXIuZXJyb3IoJ0RhdGUgbWlzbWF0Y2guIERldmljZTogJXMgQ29ycmVjdDogJXMnLAotICAgICAgICAgICAgICAgICAgIGRldmljZV90aW1lLmlzb2Zvcm1hdCgpLCBjb3JyZWN0X3RpbWUuaXNvZm9ybWF0KCkpCi0gICAgICByZXR1cm4gRmFsc2UKLQotICAjIFNvbWV0aW1lcyB0aGUgZGF0ZSBpcyBub3Qgc2V0IGNvcnJlY3RseSBvbiB0aGUgZGV2aWNlcy4gUmV0cnkgb24gZmFpbHVyZS4KLSAgaWYgZGV2aWNlLklzVXNlckJ1aWxkKCk6Ci0gICAgIyBUT0RPKGJwYXN0ZW5lKTogRmlndXJlIG91dCBob3cgdG8gc2V0IHRoZSBkYXRlICYgdGltZSBvbiB1c2VyIGJ1aWxkcy4KLSAgICBwYXNzCi0gIGVsc2U6Ci0gICAgaWYgbm90IHRpbWVvdXRfcmV0cnkuV2FpdEZvcigKLSAgICAgICAgX3NldF9hbmRfdmVyaWZ5X2RhdGUsIHdhaXRfcGVyaW9kPTEsIG1heF90cmllcz0yKToKLSAgICAgIHJhaXNlIGRldmljZV9lcnJvcnMuQ29tbWFuZEZhaWxlZEVycm9yKAotICAgICAgICAgICdGYWlsZWQgdG8gc2V0IGRhdGUgJiB0aW1lLicsIGRldmljZV9zZXJpYWw9c3RyKGRldmljZSkpCi0gICAgZGV2aWNlLkVuYWJsZVJvb3QoKQotICAgICMgVGhlIGZvbGxvd2luZyBpbnRlbnQgY2FuIHRha2UgYSBiaXQgdG8gY29tcGxldGUgd2hlbiByYW4gc2hvcnRseSBhZnRlcgotICAgICMgZGV2aWNlIGJvb3QtdXAuCi0gICAgZGV2aWNlLkJyb2FkY2FzdEludGVudCgKLSAgICAgICAgaW50ZW50LkludGVudChhY3Rpb249J2FuZHJvaWQuaW50ZW50LmFjdGlvbi5USU1FX1NFVCcpLAotICAgICAgICB0aW1lb3V0PTE4MCkKLQotCi1kZWYgTG9nRGV2aWNlUHJvcGVydGllcyhkZXZpY2UpOgotICBwcm9wcyA9IGRldmljZS5SdW5TaGVsbENvbW1hbmQoWydnZXRwcm9wJ10sIGNoZWNrX3JldHVybj1UcnVlKQotICBmb3IgcHJvcCBpbiBwcm9wczoKLSAgICBsb2dnZXIuaW5mbygnICAlcycsIHByb3ApCi0KLQotZGVmIENoZWNrRXh0ZXJuYWxTdG9yYWdlKGRldmljZSk6Ci0gICIiIkNoZWNrcyB0aGF0IHN0b3JhZ2UgaXMgd3JpdGFibGUgYW5kIGlmIG5vdCBtYWtlcyBpdCB3cml0YWJsZS4KLQotICBBcmd1bWVudHM6Ci0gICAgZGV2aWNlOiBUaGUgZGV2aWNlIHRvIGNoZWNrLgotICAiIiIKLSAgdHJ5OgotICAgIHdpdGggZGV2aWNlX3RlbXBfZmlsZS5EZXZpY2VUZW1wRmlsZSgKLSAgICAgICAgZGV2aWNlLmFkYiwgc3VmZml4PScuc2gnLCBkaXI9ZGV2aWNlLkdldEV4dGVybmFsU3RvcmFnZVBhdGgoKSkgYXMgZjoKLSAgICAgIGRldmljZS5Xcml0ZUZpbGUoZi5uYW1lLCAndGVzdCcpCi0gIGV4Y2VwdCBkZXZpY2VfZXJyb3JzLkNvbW1hbmRGYWlsZWRFcnJvcjoKLSAgICBsb2dnZXIuaW5mbygnRXh0ZXJuYWwgc3RvcmFnZSBub3Qgd3JpdGFibGUuIFJlbW91bnRpbmcgLyBhcyBSVycpCi0gICAgZGV2aWNlLlJ1blNoZWxsQ29tbWFuZChbJ21vdW50JywgJy1vJywgJ3JlbW91bnQscncnLCAnLyddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUsIGFzX3Jvb3Q9VHJ1ZSkKLSAgICBkZXZpY2UuRW5hYmxlUm9vdCgpCi0gICAgd2l0aCBkZXZpY2VfdGVtcF9maWxlLkRldmljZVRlbXBGaWxlKAotICAgICAgICBkZXZpY2UuYWRiLCBzdWZmaXg9Jy5zaCcsIGRpcj1kZXZpY2UuR2V0RXh0ZXJuYWxTdG9yYWdlUGF0aCgpKSBhcyBmOgotICAgICAgZGV2aWNlLldyaXRlRmlsZShmLm5hbWUsICd0ZXN0JykKLQotCi1kZWYgbWFpbihyYXdfYXJncyk6Ci0gICMgUmVjb21tZW5kZWQgb3B0aW9ucyBvbiBwZXJmIGJvdHM6Ci0gICMgLS1kaXNhYmxlLW5ldHdvcmsKLSAgIyAgICAgVE9ETyh0b255Zyk6IFdlIGV2ZW50dWFsbHkgd2FudCBuZXR3b3JrIG9uLiBIb3dldmVyLCBjdXJyZW50bHkgcmFkaW9zCi0gICMgICAgIGNhbiBjYXVzZSBwZXJmYm90cyB0byBkcmFpbiBmYXN0ZXIgdGhhbiB0aGV5IGNoYXJnZS4KLSAgIyAtLW1pbi1iYXR0ZXJ5LWxldmVsIDk1Ci0gICMgICAgIFNvbWUgcGVyZiBib3RzIHJ1biBiZW5jaG1hcmtzIHdpdGggVVNCIGNoYXJnaW5nIGRpc2FibGVkIHdoaWNoIGxlYWRzCi0gICMgICAgIHRvIGdyYWR1YWwgZHJhaW5pbmcgb2YgdGhlIGJhdHRlcnkuIFdlIG11c3Qgd2FpdCBmb3IgYSBmdWxsIGNoYXJnZQotICAjICAgICBiZWZvcmUgc3RhcnRpbmcgYSBydW4gaW4gb3JkZXIgdG8ga2VlcCB0aGUgZGV2aWNlcyBvbmxpbmUuCi0KLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCi0gICAgICBkZXNjcmlwdGlvbj0nUHJvdmlzaW9uIEFuZHJvaWQgZGV2aWNlcyB3aXRoIHNldHRpbmdzIHJlcXVpcmVkIGZvciBib3RzLicpCi0gIGxvZ2dpbmdfY29tbW9uLkFkZExvZ2dpbmdBcmd1bWVudHMocGFyc2VyKQotICBzY3JpcHRfY29tbW9uLkFkZERldmljZUFyZ3VtZW50cyhwYXJzZXIpCi0gIHNjcmlwdF9jb21tb24uQWRkRW52aXJvbm1lbnRBcmd1bWVudHMocGFyc2VyKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy0tYWRiLWtleS1maWxlcycsIHR5cGU9c3RyLCBuYXJncz0nKycsCi0gICAgICBoZWxwPSdsaXN0IG9mIGFkYiBrZXlzIHRvIHB1c2ggdG8gZGV2aWNlJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICctLWRpc2FibGUtbG9jYXRpb24nLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgaGVscD0nZGlzYWJsZSBHb29nbGUgbG9jYXRpb24gc2VydmljZXMgb24gZGV2aWNlcycpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLS1kaXNhYmxlLW1vY2stbG9jYXRpb24nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgaGVscD0nU2V0IEFMTE9XX01PQ0tfTE9DQVRJT04gdG8gZmFsc2UnKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy0tZGlzYWJsZS1uZXR3b3JrJywgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgIGhlbHA9J2Rpc2FibGUgbmV0d29yayBhY2Nlc3Mgb24gZGV2aWNlcycpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLS1kaXNhYmxlLWphdmEtZGVidWcnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywKLSAgICAgIGRlc3Q9J2VuYWJsZV9qYXZhX2RlYnVnJywgZGVmYXVsdD1UcnVlLAotICAgICAgaGVscD0nZGlzYWJsZSBKYXZhIHByb3BlcnR5IGFzc2VydHMgYW5kIEpOSSBjaGVja2luZycpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLS1kaXNhYmxlLXN5c3RlbS1jaHJvbWUnLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgaGVscD0nREVQUkVDQVRFRDogdXNlIC0tcmVtb3ZlLXN5c3RlbS1wYWNrYWdlcyBjb20uYW5kcm9pZC5nb29nbGUgJwotICAgICAgICAgICAnRGlzYWJsZSB0aGUgc3lzdGVtIGNocm9tZSBmcm9tIGRldmljZXMuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICctLWVtdWxhdG9ycycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICBoZWxwPSdwcm92aXNpb24gb25seSBlbXVsYXRvcnMgYW5kIGlnbm9yZSB1c2IgZGV2aWNlcyAnCi0gICAgICAgICAgICcodGhpcyB3aWxsIG5vdCB3aXBlIGVtdWxhdG9ycyknKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy0tbWF4LWJhdHRlcnktdGVtcCcsIHR5cGU9aW50LCBtZXRhdmFyPSdOVU0nLAotICAgICAgaGVscD0nV2FpdCBmb3IgdGhlIGJhdHRlcnkgdG8gaGF2ZSB0aGlzIHRlbXAgb3IgbG93ZXIuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICctLW1pbi1iYXR0ZXJ5LWxldmVsJywgdHlwZT1pbnQsIG1ldGF2YXI9J05VTScsCi0gICAgICBoZWxwPSd3YWl0IGZvciB0aGUgZGV2aWNlIHRvIHJlYWNoIHRoaXMgbWluaW11bSBiYXR0ZXJ5JwotICAgICAgICAgICAnIGxldmVsIGJlZm9yZSB0cnlpbmcgdG8gY29udGludWUnKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy0tb3V0cHV0LWRldmljZS1ibGFja2xpc3QnLAotICAgICAgaGVscD0nSnNvbiBmaWxlIHRvIG91dHB1dCB0aGUgZGV2aWNlIGJsYWNrbGlzdC4nKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy0tcmVib290LXRpbWVvdXQnLCBtZXRhdmFyPSdTRUNTJywgdHlwZT1pbnQsCi0gICAgICBoZWxwPSd3aGVuIHdpcGluZyB0aGUgZGV2aWNlLCBtYXggbnVtYmVyIG9mIHNlY29uZHMgdG8nCi0gICAgICAgICAgICcgd2FpdCBhZnRlciBlYWNoIHJlYm9vdCAnCi0gICAgICAgICAgICcoZGVmYXVsdDogJXMpJyAlIF9ERUZBVUxUX1RJTUVPVVRTLkhFTFBfVEVYVCkKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICctLXJlbW92ZS1zeXN0ZW0tYXBwcycsIG5hcmdzPScqJywgZGVzdD0nc3lzdGVtX2FwcF9yZW1vdmVfbGlzdCcsCi0gICAgICBoZWxwPSdERVBSRUNBVEVEOiB1c2UgLS1yZW1vdmUtc3lzdGVtLXBhY2thZ2VzIGluc3RlYWQuICcKLSAgICAgICAgICAgJ1RoZSBuYW1lcyBvZiBzeXN0ZW0gYXBwcyB0byByZW1vdmUuICcpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLS1yZW1vdmUtc3lzdGVtLXBhY2thZ2VzJywgbmFyZ3M9JyonLCBkZXN0PSdzeXN0ZW1fcGFja2FnZV9yZW1vdmVfbGlzdCcsCi0gICAgICBoZWxwPSdUaGUgbmFtZXMgb2Ygc3lzdGVtIHBhY2thZ2VzIHRvIHJlbW92ZS4nKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy0tcmVtb3ZlLXN5c3RlbS13ZWJ2aWV3JywgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgIGhlbHA9J0RFUFJFQ0FURUQ6IHVzZSAtLXJlbW92ZS1zeXN0ZW0tcGFja2FnZXMgJwotICAgICAgICAgICAnY29tLmdvb2dsZS5hbmRyb2lkLndlYnZpZXcgY29tLmFuZHJvaWQud2VidmlldyAnCi0gICAgICAgICAgICdSZW1vdmUgdGhlIHN5c3RlbSB3ZWJ2aWV3IGZyb20gZGV2aWNlcy4nKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy0tc2tpcC13aXBlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgIGhlbHA9J2RvIG5vdCB3aXBlIGRldmljZSBkYXRhIGR1cmluZyBwcm92aXNpb25pbmcnKQotCi0gICMgTm8tb3AgYXJndW1lbnRzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYnVpbGQvYW5kcm9pZC9wcm92aXNpb25fZGV2aWNlcy5weS4KLSAgIyBUT0RPKGpidWRvcmljayk6IFJlbW92ZSB0aGVzZSBvbmNlIGFsbCBjYWxsZXJzIGhhdmUgc3RvcHBlZCB1c2luZyB0aGVtLgotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy0tY2hyb21lLXNwZWNpZmljLXdpcGUnLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICctLXBoYXNlJywgYWN0aW9uPSdhcHBlbmQnLAotICAgICAgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICctcicsICctLWF1dG8tcmVjb25uZWN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLXQnLCAnLS10YXJnZXQnLAotICAgICAgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKLQotICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MocmF3X2FyZ3MpCi0KLSAgbG9nZ2luZ19jb21tb24uSW5pdGlhbGl6ZUxvZ2dpbmcoYXJncykKLSAgc2NyaXB0X2NvbW1vbi5Jbml0aWFsaXplRW52aXJvbm1lbnQoYXJncykKLQotICB0cnk6Ci0gICAgcmV0dXJuIFByb3Zpc2lvbkRldmljZXMoCi0gICAgICAgIGFyZ3MuZGV2aWNlcywKLSAgICAgICAgYXJncy5ibGFja2xpc3RfZmlsZSwKLSAgICAgICAgYWRiX2tleV9maWxlcz1hcmdzLmFkYl9rZXlfZmlsZXMsCi0gICAgICAgIGRpc2FibGVfbG9jYXRpb249YXJncy5kaXNhYmxlX2xvY2F0aW9uLAotICAgICAgICBkaXNhYmxlX21vY2tfbG9jYXRpb249YXJncy5kaXNhYmxlX21vY2tfbG9jYXRpb24sCi0gICAgICAgIGRpc2FibGVfbmV0d29yaz1hcmdzLmRpc2FibGVfbmV0d29yaywKLSAgICAgICAgZGlzYWJsZV9zeXN0ZW1fY2hyb21lPWFyZ3MuZGlzYWJsZV9zeXN0ZW1fY2hyb21lLAotICAgICAgICBlbXVsYXRvcnM9YXJncy5lbXVsYXRvcnMsCi0gICAgICAgIGVuYWJsZV9qYXZhX2RlYnVnPWFyZ3MuZW5hYmxlX2phdmFfZGVidWcsCi0gICAgICAgIG1heF9iYXR0ZXJ5X3RlbXA9YXJncy5tYXhfYmF0dGVyeV90ZW1wLAotICAgICAgICBtaW5fYmF0dGVyeV9sZXZlbD1hcmdzLm1pbl9iYXR0ZXJ5X2xldmVsLAotICAgICAgICBvdXRwdXRfZGV2aWNlX2JsYWNrbGlzdD1hcmdzLm91dHB1dF9kZXZpY2VfYmxhY2tsaXN0LAotICAgICAgICByZWJvb3RfdGltZW91dD1hcmdzLnJlYm9vdF90aW1lb3V0LAotICAgICAgICByZW1vdmVfc3lzdGVtX3dlYnZpZXc9YXJncy5yZW1vdmVfc3lzdGVtX3dlYnZpZXcsCi0gICAgICAgIHN5c3RlbV9hcHBfcmVtb3ZlX2xpc3Q9YXJncy5zeXN0ZW1fYXBwX3JlbW92ZV9saXN0LAotICAgICAgICBzeXN0ZW1fcGFja2FnZV9yZW1vdmVfbGlzdD1hcmdzLnN5c3RlbV9wYWNrYWdlX3JlbW92ZV9saXN0LAotICAgICAgICB3aXBlPW5vdCBhcmdzLnNraXBfd2lwZSBhbmQgbm90IGFyZ3MuZW11bGF0b3JzKQotICBleGNlcHQgKGRldmljZV9lcnJvcnMuRGV2aWNlVW5yZWFjaGFibGVFcnJvciwgZGV2aWNlX2Vycm9ycy5Ob0RldmljZXNFcnJvcik6Ci0gICAgbG9nZ2luZy5leGNlcHRpb24oJ1VuYWJsZSB0byBwcm92aXNpb24gbG9jYWwgZGV2aWNlcy4nKQotICAgIHJldHVybiBleGl0X2NvZGVzLklORlJBCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9zY3JlZW5zaG90LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9zY3JlZW5zaG90LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzYjMzMzVjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvc2NyZWVuc2hvdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJUYWtlcyBhIHNjcmVlbnNob3QgZnJvbSBhbiBBbmRyb2lkIGRldmljZS4iIiIKLQotaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKAotICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJy4uJywgJy4uJykpKQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdXRpbHMKLWZyb20gZGV2aWwuYW5kcm9pZC50b29scyBpbXBvcnQgc2NyaXB0X2NvbW1vbgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgbG9nZ2luZ19jb21tb24KLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotZGVmIG1haW4oKToKLSAgIyBQYXJzZSBvcHRpb25zLgotICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1fX2RvY19fKQotICBsb2dnaW5nX2NvbW1vbi5BZGRMb2dnaW5nQXJndW1lbnRzKHBhcnNlcikKLSAgc2NyaXB0X2NvbW1vbi5BZGREZXZpY2VBcmd1bWVudHMocGFyc2VyKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZicsICctLWZpbGUnLCBtZXRhdmFyPSdGSUxFJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTYXZlIHJlc3VsdCB0byBmaWxlIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aW1lc3RhbXBlZCBmaWxlIG5hbWUuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnaG9zdF9maWxlJywgbmFyZ3M9Jz8nLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0ZpbGUgdG8gd2hpY2ggdGhlIHNjcmVlbnNob3Qgd2lsbCBiZSBzYXZlZC4nKQotCi0gIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCi0gIGhvc3RfZmlsZSA9IGFyZ3MuaG9zdF9maWxlIG9yIGFyZ3MuZmlsZQotICBsb2dnaW5nX2NvbW1vbi5Jbml0aWFsaXplTG9nZ2luZyhhcmdzKQotCi0gIGRldmljZXMgPSBzY3JpcHRfY29tbW9uLkdldERldmljZXMoYXJncy5kZXZpY2VzLCBhcmdzLmJsYWNrbGlzdF9maWxlKQotCi0gIGRlZiBzY3JlZW5zaG90KGRldmljZSk6Ci0gICAgZiA9IE5vbmUKLSAgICBpZiBob3N0X2ZpbGU6Ci0gICAgICByb290LCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGhvc3RfZmlsZSkKLSAgICAgIGYgPSAnJXNfJXMlcycgJSAocm9vdCwgc3RyKGRldmljZSksIGV4dCkKLSAgICBmID0gZGV2aWNlLlRha2VTY3JlZW5zaG90KGYpCi0gICAgcHJpbnQgJ1NjcmVlbnNob3QgZm9yIGRldmljZSAlcyB3cml0dGVuIHRvICVzJyAlICgKLSAgICAgICAgc3RyKGRldmljZSksIG9zLnBhdGguYWJzcGF0aChmKSkKLQotICBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMucGFyYWxsZWwoZGV2aWNlcykucE1hcChzY3JlZW5zaG90KQotICByZXR1cm4gMAotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvc2NyaXB0X2NvbW1vbi5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvc2NyaXB0X2NvbW1vbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUwZTYzZi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Rvb2xzL3NjcmlwdF9jb21tb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX2JsYWNrbGlzdAotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlscwotCi0KLWRlZiBBZGRFbnZpcm9ubWVudEFyZ3VtZW50cyhwYXJzZXIpOgotICAiIiJBZGRzIGVudmlyb25tZW50LXNwZWNpZmljIGFyZ3VtZW50cyB0byB0aGUgcHJvdmlkZWQgcGFyc2VyLiIiIgotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy0tYWRiLXBhdGgnLCB0eXBlPW9zLnBhdGgucmVhbHBhdGgsCi0gICAgICBoZWxwPSdQYXRoIHRvIHRoZSBhZGIgYmluYXJ5JykKLQotCi1kZWYgSW5pdGlhbGl6ZUVudmlyb25tZW50KGFyZ3MpOgotICBkZXZpbF9keW5hbWljX2NvbmZpZyA9IGRldmlsX2Vudi5FbXB0eUNvbmZpZygpCi0gIGlmIGFyZ3MuYWRiX3BhdGg6Ci0gICAgZGV2aWxfZHluYW1pY19jb25maWdbJ2RlcGVuZGVuY2llcyddLnVwZGF0ZSgKLSAgICAgICAgZGV2aWxfZW52LkxvY2FsQ29uZmlnSXRlbSgKLSAgICAgICAgICAgICdhZGInLCBkZXZpbF9lbnYuR2V0UGxhdGZvcm0oKSwgYXJncy5hZGJfcGF0aCkpCi0KLSAgZGV2aWxfZW52LmNvbmZpZy5Jbml0aWFsaXplKGNvbmZpZ3M9W2RldmlsX2R5bmFtaWNfY29uZmlnXSkKLQotCi1kZWYgQWRkRGV2aWNlQXJndW1lbnRzKHBhcnNlcik6Ci0gICIiIkFkZHMgZGV2aWNlIGFuZCBibGFja2xpc3QgYXJndW1lbnRzIHRvIHRoZSBwcm92aWRlZCBwYXJzZXIuIiIiCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLWQnLCAnLS1kZXZpY2UnLCBkZXN0PSdkZXZpY2VzJywgYWN0aW9uPSdhcHBlbmQnLAotICAgICAgaGVscD0nU2VyaWFsIG51bWJlciBvZiB0aGUgQW5kcm9pZCBkZXZpY2UgdG8gdXNlLiAoZGVmYXVsdDogdXNlIGFsbCknKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJsYWNrbGlzdC1maWxlJywgaGVscD0nRGV2aWNlIGJsYWNrbGlzdCBKU09OIGZpbGUuJykKLQotCi1kZWYgR2V0RGV2aWNlcyhyZXF1ZXN0ZWRfZGV2aWNlcywgYmxhY2tsaXN0X2ZpbGUpOgotICAiIiJHZXRzIGEgbGlzdCBvZiBoZWFsdGh5IGRldmljZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhcmFtZXRlcnMuIiIiCi0gIGlmIG5vdCBpc2luc3RhbmNlKGJsYWNrbGlzdF9maWxlLCBkZXZpY2VfYmxhY2tsaXN0LkJsYWNrbGlzdCk6Ci0gICAgYmxhY2tsaXN0X2ZpbGUgPSAoZGV2aWNlX2JsYWNrbGlzdC5CbGFja2xpc3QoYmxhY2tsaXN0X2ZpbGUpCi0gICAgICAgICAgICAgICAgICAgICAgaWYgYmxhY2tsaXN0X2ZpbGUKLSAgICAgICAgICAgICAgICAgICAgICBlbHNlIE5vbmUpCi0KLSAgZGV2aWNlcyA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscy5IZWFsdGh5RGV2aWNlcyhibGFja2xpc3RfZmlsZSkKLSAgaWYgbm90IGRldmljZXM6Ci0gICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Ob0RldmljZXNFcnJvcigpCi0gIGVsaWYgcmVxdWVzdGVkX2RldmljZXM6Ci0gICAgcmVxdWVzdGVkID0gc2V0KHJlcXVlc3RlZF9kZXZpY2VzKQotICAgIGF2YWlsYWJsZSA9IHNldChzdHIoZCkgZm9yIGQgaW4gZGV2aWNlcykKLSAgICBtaXNzaW5nID0gcmVxdWVzdGVkLmRpZmZlcmVuY2UoYXZhaWxhYmxlKQotICAgIGlmIG1pc3Npbmc6Ci0gICAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkRldmljZVVucmVhY2hhYmxlRXJyb3IobmV4dChpdGVyKG1pc3NpbmcpKSkKLSAgICByZXR1cm4gc29ydGVkKGRldmljZV91dGlscy5EZXZpY2VVdGlscyhkKQotICAgICAgICAgICAgICAgICAgZm9yIGQgaW4gYXZhaWxhYmxlLmludGVyc2VjdGlvbihyZXF1ZXN0ZWQpKQotICBlbHNlOgotICAgIHJldHVybiBkZXZpY2VzCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvc2NyaXB0X2NvbW1vbl90ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9zY3JpcHRfY29tbW9uX3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDNkZGIxYzEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9zY3JpcHRfY29tbW9uX3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotCi1pbXBvcnQgYXJncGFyc2UKLWltcG9ydCBzeXMKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZGV2aWwgaW1wb3J0IGRldmlsX2VudgotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkLnRvb2xzIGltcG9ydCBzY3JpcHRfY29tbW9uCi0KLXdpdGggZGV2aWxfZW52LlN5c1BhdGgoZGV2aWxfZW52LlBZTU9DS19QQVRIKToKLSAgaW1wb3J0IG1vY2sgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotCi13aXRoIGRldmlsX2Vudi5TeXNQYXRoKGRldmlsX2Vudi5ERVBFTkRFTkNZX01BTkFHRVJfUEFUSCk6Ci0gIGZyb20gZGVwZW5kZW5jeV9tYW5hZ2VyIGltcG9ydCBleGNlcHRpb25zCi0KLQotY2xhc3MgR2V0RGV2aWNlc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiB0ZXN0Tm9TcGVjcyhzZWxmKToKLSAgICBkZXZpY2VzID0gWwotICAgICAgICBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMoJzEyMycpLAotICAgICAgICBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMoJzQ1NicpLAotICAgIF0KLSAgICB3aXRoIG1vY2sucGF0Y2goJ2RldmlsLmFuZHJvaWQuZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLkhlYWx0aHlEZXZpY2VzJywKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPWRldmljZXMpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgZGV2aWNlcywKLSAgICAgICAgICBzY3JpcHRfY29tbW9uLkdldERldmljZXMoTm9uZSwgTm9uZSkpCi0KLSAgZGVmIHRlc3RXaXRoRGV2aWNlcyhzZWxmKToKLSAgICBkZXZpY2VzID0gWwotICAgICAgICBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMoJzEyMycpLAotICAgICAgICBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMoJzQ1NicpLAotICAgIF0KLSAgICB3aXRoIG1vY2sucGF0Y2goJ2RldmlsLmFuZHJvaWQuZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLkhlYWx0aHlEZXZpY2VzJywKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPWRldmljZXMpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgW2RldmljZV91dGlscy5EZXZpY2VVdGlscygnNDU2JyldLAotICAgICAgICAgIHNjcmlwdF9jb21tb24uR2V0RGV2aWNlcyhbJzQ1NiddLCBOb25lKSkKLQotICBkZWYgdGVzdE1pc3NpbmdEZXZpY2Uoc2VsZik6Ci0gICAgd2l0aCBtb2NrLnBhdGNoKCdkZXZpbC5hbmRyb2lkLmRldmljZV91dGlscy5EZXZpY2VVdGlscy5IZWFsdGh5RGV2aWNlcycsCi0gICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT1bZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKCcxMjMnKV0pOgotICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkZXZpY2VfZXJyb3JzLkRldmljZVVucmVhY2hhYmxlRXJyb3IpOgotICAgICAgICBzY3JpcHRfY29tbW9uLkdldERldmljZXMoWyc0NTYnXSwgTm9uZSkKLQotICBkZWYgdGVzdE5vRGV2aWNlcyhzZWxmKToKLSAgICB3aXRoIG1vY2sucGF0Y2goJ2RldmlsLmFuZHJvaWQuZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLkhlYWx0aHlEZXZpY2VzJywKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPVtdKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGV2aWNlX2Vycm9ycy5Ob0RldmljZXNFcnJvcik6Ci0gICAgICAgIHNjcmlwdF9jb21tb24uR2V0RGV2aWNlcyhOb25lLCBOb25lKQotCi0KLWNsYXNzIEluaXRpYWxpemVFbnZpcm9ubWVudFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiBzZXRVcChzZWxmKToKLSAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0gICAgc2VsZi5wYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCi0gICAgc2NyaXB0X2NvbW1vbi5BZGRFbnZpcm9ubWVudEFyZ3VtZW50cyhzZWxmLnBhcnNlcikKLSAgICBkZXZpbF9lbnYuY29uZmlnID0gZGV2aWxfZW52Ll9FbnZpcm9ubWVudCgpCi0KLSAgZGVmIHRlc3ROb0FkYihzZWxmKToKLSAgICBhcmdzID0gc2VsZi5wYXJzZXIucGFyc2VfYXJncyhbXSkKLSAgICBzY3JpcHRfY29tbW9uLkluaXRpYWxpemVFbnZpcm9ubWVudChhcmdzKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhjZXB0aW9ucy5Ob1BhdGhGb3VuZEVycm9yKToKLSAgICAgIGRldmlsX2Vudi5jb25maWcuTG9jYWxQYXRoKCdhZGInKQotCi0gIGRlZiB0ZXN0QWRiKHNlbGYpOgotICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgZjoKLSAgICAgIGFyZ3MgPSBzZWxmLnBhcnNlci5wYXJzZV9hcmdzKFsnLS1hZGItcGF0aD0lcycgJSBmLm5hbWVdKQotICAgICAgc2NyaXB0X2NvbW1vbi5Jbml0aWFsaXplRW52aXJvbm1lbnQoYXJncykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgIGYubmFtZSwKLSAgICAgICAgICBkZXZpbF9lbnYuY29uZmlnLkxvY2FsUGF0aCgnYWRiJykpCi0KLSAgZGVmIHRlc3ROb25FeGlzdGVudEFkYihzZWxmKToKLSAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGY6Ci0gICAgICBhcmdzID0gc2VsZi5wYXJzZXIucGFyc2VfYXJncyhbJy0tYWRiLXBhdGg9JXMnICUgZi5uYW1lXSkKLSAgICBzY3JpcHRfY29tbW9uLkluaXRpYWxpemVFbnZpcm9ubWVudChhcmdzKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhjZXB0aW9ucy5Ob1BhdGhGb3VuZEVycm9yKToKLSAgICAgIGRldmlsX2Vudi5jb25maWcuTG9jYWxQYXRoKCdhZGInKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5leGl0KHVuaXR0ZXN0Lm1haW4oKSkKLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9zeXN0ZW1fYXBwLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy9zeXN0ZW1fYXBwLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMGVhMzEyLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvc3lzdGVtX2FwcC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiQSBzY3JpcHQgdG8gcmVwbGFjZSBhIHN5c3RlbSBhcHAgd2hpbGUgcnVubmluZyBhIGNvbW1hbmQuIiIiCi0KLWltcG9ydCBhcmdwYXJzZQotaW1wb3J0IGNvbnRleHRsaWIKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBwb3NpeHBhdGgKLWltcG9ydCBzeXMKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMucGF0aC5hcHBlbmQoCi0gICAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLicsICcuLicsICcuLicpKSkKLQotCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGFwa19oZWxwZXIKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX2Vycm9ycwotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdGVtcF9maWxlCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCB2ZXJzaW9uX2NvZGVzCi1mcm9tIGRldmlsLmFuZHJvaWQudG9vbHMgaW1wb3J0IHNjcmlwdF9jb21tb24KLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGNtZF9oZWxwZXIKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHBhcmFsbGVsaXplcgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgcnVuX3Rlc3RzX2hlbHBlcgotCi1sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1kZWYgUmVtb3ZlU3lzdGVtQXBwcyhkZXZpY2UsIHBhY2thZ2VfbmFtZXMpOgotICAiIiJSZW1vdmVzIHRoZSBnaXZlbiBzeXN0ZW0gYXBwcy4KLQotICBBcmdzOgotICAgIGRldmljZTogKGRldmljZV91dGlscy5EZXZpY2VVdGlscykgdGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIGdpdmVuCi0gICAgICBzeXN0ZW0gYXBwIHNob3VsZCBiZSByZW1vdmVkLgotICAgIHBhY2thZ2VfbmFtZTogKGl0ZXJhYmxlIG9mIHN0cnMpIHRoZSBuYW1lcyBvZiB0aGUgcGFja2FnZXMgdG8gcmVtb3ZlLgotICAiIiIKLSAgc3lzdGVtX3BhY2thZ2VfcGF0aHMgPSBfRmluZFN5c3RlbVBhY2thZ2VQYXRocyhkZXZpY2UsIHBhY2thZ2VfbmFtZXMpCi0gIGlmIHN5c3RlbV9wYWNrYWdlX3BhdGhzOgotICAgIHdpdGggRW5hYmxlU3lzdGVtQXBwTW9kaWZpY2F0aW9uKGRldmljZSk6Ci0gICAgICBkZXZpY2UuUmVtb3ZlUGF0aChzeXN0ZW1fcGFja2FnZV9wYXRocywgZm9yY2U9VHJ1ZSwgcmVjdXJzaXZlPVRydWUpCi0KLQotQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLWRlZiBSZXBsYWNlU3lzdGVtQXBwKGRldmljZSwgcGFja2FnZV9uYW1lLCByZXBsYWNlbWVudF9hcGspOgotICAiIiJBIGNvbnRleHQgbWFuYWdlciB0aGF0IHJlcGxhY2VzIHRoZSBnaXZlbiBzeXN0ZW0gYXBwIHdoaWxlIGluIHNjb3BlLgotCi0gIEFyZ3M6Ci0gICAgZGV2aWNlOiAoZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKSB0aGUgZGV2aWNlIGZvciB3aGljaCB0aGUgZ2l2ZW4KLSAgICAgIHN5c3RlbSBhcHAgc2hvdWxkIGJlIHJlcGxhY2VkLgotICAgIHBhY2thZ2VfbmFtZTogKHN0cikgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdG8gcmVwbGFjZS4KLSAgICByZXBsYWNlbWVudF9hcGs6IChzdHIpIHRoZSBwYXRoIHRvIHRoZSBBUEsgdG8gdXNlIGFzIGEgcmVwbGFjZW1lbnQuCi0gICIiIgotICBzdG9yYWdlX2RpciA9IGRldmljZV90ZW1wX2ZpbGUuTmFtZWREZXZpY2VUZW1wb3JhcnlEaXJlY3RvcnkoZGV2aWNlLmFkYikKLSAgcmVsb2NhdGVfYXBwID0gX1JlbG9jYXRlQXBwKGRldmljZSwgcGFja2FnZV9uYW1lLCBzdG9yYWdlX2Rpci5uYW1lKQotICBpbnN0YWxsX2FwcCA9IF9UZW1wb3JhcmlseUluc3RhbGxBcHAoZGV2aWNlLCByZXBsYWNlbWVudF9hcGspCi0gIHdpdGggc3RvcmFnZV9kaXIsIHJlbG9jYXRlX2FwcCwgaW5zdGFsbF9hcHA6Ci0gICAgeWllbGQKLQotCi1kZWYgX0ZpbmRTeXN0ZW1QYWNrYWdlUGF0aHMoZGV2aWNlLCBzeXN0ZW1fcGFja2FnZV9saXN0KToKLSAgIiIiRmluZHMgYWxsIHN5c3RlbSBwYXRocyBmb3IgdGhlIGdpdmVuIHBhY2thZ2VzLiIiIgotICBmb3VuZF9wYXRocyA9IFtdCi0gIGZvciBzeXN0ZW1fcGFja2FnZSBpbiBzeXN0ZW1fcGFja2FnZV9saXN0OgotICAgIGZvdW5kX3BhdGhzLmV4dGVuZChkZXZpY2UuR2V0QXBwbGljYXRpb25QYXRocyhzeXN0ZW1fcGFja2FnZSkpCi0gIHJldHVybiBbcCBmb3IgcCBpbiBmb3VuZF9wYXRocyBpZiBwLnN0YXJ0c3dpdGgoJy9zeXN0ZW0vJyldCi0KLQotX0VOQUJMRV9NT0RJRklDQVRJT05fUFJPUCA9ICdkZXZpbC5tb2RpZnlfc3lzX2FwcHMnCi0KLQotQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLWRlZiBFbmFibGVTeXN0ZW1BcHBNb2RpZmljYXRpb24oZGV2aWNlKToKLSAgIiIiQSBjb250ZXh0IG1hbmFnZXIgdGhhdCBhbGxvd3Mgc3lzdGVtIGFwcHMgdG8gYmUgbW9kaWZpZWQgd2hpbGUgaW4gc2NvcGUuCi0KLSAgQXJnczoKLSAgICBkZXZpY2U6IChkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMpIHRoZSBkZXZpY2UKLSAgIiIiCi0gIGlmIGRldmljZS5HZXRQcm9wKF9FTkFCTEVfTU9ESUZJQ0FUSU9OX1BST1ApID09ICcxJzoKLSAgICB5aWVsZAotICAgIHJldHVybgotCi0gIGRldmljZS5FbmFibGVSb290KCkKLSAgaWYgbm90IGRldmljZS5IYXNSb290KCk6Ci0gICAgcmFpc2UgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3IoCi0gICAgICAgICdGYWlsZWQgdG8gZW5hYmxlIG1vZGlmaWNhdGlvbiBvZiBzeXN0ZW0gYXBwcyBvbiBub24tcm9vdGVkIGRldmljZScsCi0gICAgICAgIHN0cihkZXZpY2UpKQotCi0gIHRyeToKLSAgICAjIERpc2FibGUgTWFyc2htYWxsb3cncyBWZXJpdHkgc2VjdXJpdHkgZmVhdHVyZQotICAgIGlmIGRldmljZS5idWlsZF92ZXJzaW9uX3NkayA+PSB2ZXJzaW9uX2NvZGVzLk1BUlNITUFMTE9XOgotICAgICAgbG9nZ2VyLmluZm8oJ0Rpc2FibGluZyBWZXJpdHkgb24gJXMnLCBkZXZpY2Uuc2VyaWFsKQotICAgICAgZGV2aWNlLmFkYi5EaXNhYmxlVmVyaXR5KCkKLSAgICAgIGRldmljZS5SZWJvb3QoKQotICAgICAgZGV2aWNlLldhaXRVbnRpbEZ1bGx5Qm9vdGVkKCkKLSAgICAgIGRldmljZS5FbmFibGVSb290KCkKLQotICAgIGRldmljZS5hZGIuUmVtb3VudCgpCi0gICAgZGV2aWNlLlJ1blNoZWxsQ29tbWFuZChbJ3N0b3AnXSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgZGV2aWNlLlNldFByb3AoX0VOQUJMRV9NT0RJRklDQVRJT05fUFJPUCwgJzEnKQotICAgIHlpZWxkCi0gIGZpbmFsbHk6Ci0gICAgZGV2aWNlLlNldFByb3AoX0VOQUJMRV9NT0RJRklDQVRJT05fUFJPUCwgJzAnKQotICAgIGRldmljZS5SZWJvb3QoKQotICAgIGRldmljZS5XYWl0VW50aWxGdWxseUJvb3RlZCgpCi0KLQotQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLWRlZiBfUmVsb2NhdGVBcHAoZGV2aWNlLCBwYWNrYWdlX25hbWUsIHJlbG9jYXRlX3RvKToKLSAgIiIiQSBjb250ZXh0IG1hbmFnZXIgdGhhdCByZWxvY2F0ZXMgYW4gYXBwIHdoaWxlIGluIHNjb3BlLiIiIgotICByZWxvY2F0aW9uX21hcCA9IHt9Ci0gIHN5c3RlbV9wYWNrYWdlX3BhdGhzID0gX0ZpbmRTeXN0ZW1QYWNrYWdlUGF0aHMoZGV2aWNlLCBbcGFja2FnZV9uYW1lXSkKLSAgaWYgc3lzdGVtX3BhY2thZ2VfcGF0aHM6Ci0gICAgcmVsb2NhdGlvbl9tYXAgPSB7Ci0gICAgICAgIHA6IHBvc2l4cGF0aC5qb2luKHJlbG9jYXRlX3RvLCBwb3NpeHBhdGgucmVscGF0aChwLCAnLycpKQotICAgICAgICBmb3IgcCBpbiBzeXN0ZW1fcGFja2FnZV9wYXRocwotICAgIH0KLSAgICByZWxvY2F0aW9uX2RpcnMgPSBbCi0gICAgICAgIHBvc2l4cGF0aC5kaXJuYW1lKGQpCi0gICAgICAgIGZvciBfLCBkIGluIHJlbG9jYXRpb25fbWFwLml0ZXJpdGVtcygpCi0gICAgXQotICAgIGRldmljZS5SdW5TaGVsbENvbW1hbmQoWydta2RpcicsICctcCddICsgcmVsb2NhdGlvbl9kaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgX01vdmVBcHAoZGV2aWNlLCByZWxvY2F0aW9uX21hcCkKLSAgZWxzZToKLSAgICBsb2dnZXIuaW5mbygnTm8gc3lzdGVtIHBhY2thZ2UgIiVzIicsIHBhY2thZ2VfbmFtZSkKLQotICB0cnk6Ci0gICAgeWllbGQKLSAgZmluYWxseToKLSAgICBfTW92ZUFwcChkZXZpY2UsIHt2OiBrIGZvciBrLCB2IGluIHJlbG9jYXRpb25fbWFwLml0ZXJpdGVtcygpfSkKLQotCi1AY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotZGVmIF9UZW1wb3JhcmlseUluc3RhbGxBcHAoZGV2aWNlLCBhcGspOgotICAiIiJBIGNvbnRleHQgbWFuYWdlciB0aGF0IGluc3RhbGxzIGFuIGFwcCB3aGlsZSBpbiBzY29wZS4iIiIKLSAgZGV2aWNlLmFkYi5JbnN0YWxsKGFwaywgcmVpbnN0YWxsPVRydWUpCi0gIHRyeToKLSAgICB5aWVsZAotICBmaW5hbGx5OgotICAgIGRldmljZS5hZGIuVW5pbnN0YWxsKGFwa19oZWxwZXIuR2V0UGFja2FnZU5hbWUoYXBrKSkKLQotCi1kZWYgX01vdmVBcHAoZGV2aWNlLCByZWxvY2F0aW9uX21hcCk6Ci0gICIiIk1vdmVzIGFuIGFwcCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIHJlbG9jYXRpb24gbWFwLgotCi0gIEFyZ3M6Ci0gICAgZGV2aWNlOiAoZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKQotICAgIHJlbG9jYXRpb25fbWFwOiAoZGljdCkgQSBkaWN0IHRoYXQgbWFwcyBzcmMgdG8gZGVzdAotICAiIiIKLSAgbW92ZW1lbnRzID0gWwotICAgICAgJ212ICVzICVzJyAlIChrLCB2KQotICAgICAgZm9yIGssIHYgaW4gcmVsb2NhdGlvbl9tYXAuaXRlcml0ZW1zKCkKLSAgXQotICBjbWQgPSAnICYmICcuam9pbihtb3ZlbWVudHMpCi0gIHdpdGggRW5hYmxlU3lzdGVtQXBwTW9kaWZpY2F0aW9uKGRldmljZSk6Ci0gICAgZGV2aWNlLlJ1blNoZWxsQ29tbWFuZChjbWQsIGFzX3Jvb3Q9VHJ1ZSwgY2hlY2tfcmV0dXJuPVRydWUsIHNoZWxsPVRydWUpCi0KLQotZGVmIG1haW4ocmF3X2FyZ3MpOgotICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCi0gIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoKQotCi0gIGRlZiBhZGRfY29tbW9uX2FyZ3VtZW50cyhwKToKLSAgICBzY3JpcHRfY29tbW9uLkFkZERldmljZUFyZ3VtZW50cyhwKQotICAgIHNjcmlwdF9jb21tb24uQWRkRW52aXJvbm1lbnRBcmd1bWVudHMocCkKLSAgICBwLmFkZF9hcmd1bWVudCgKLSAgICAgICAgJy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nY291bnQnLCBkZWZhdWx0PTAsCi0gICAgICAgIGhlbHA9J1ByaW50IG1vcmUgaW5mb3JtYXRpb24uJykKLSAgICBwLmFkZF9hcmd1bWVudCgnY29tbWFuZCcsIG5hcmdzPScqJykKLQotICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotICBkZWYgcmVtb3ZlX3N5c3RlbV9hcHAoZGV2aWNlLCBhcmdzKToKLSAgICBSZW1vdmVTeXN0ZW1BcHBzKGRldmljZSwgYXJncy5wYWNrYWdlcykKLSAgICB5aWVsZAotCi0gIHJlbW92ZV9wYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3JlbW92ZScpCi0gIHJlbW92ZV9wYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy0tcGFja2FnZScsIGRlc3Q9J3BhY2thZ2VzJywgbmFyZ3M9JyonLCByZXF1aXJlZD1UcnVlLAotICAgICAgaGVscD0nVGhlIHN5c3RlbSBwYWNrYWdlKHMpIHRvIHJlbW92ZS4nKQotICBhZGRfY29tbW9uX2FyZ3VtZW50cyhyZW1vdmVfcGFyc2VyKQotICByZW1vdmVfcGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPXJlbW92ZV9zeXN0ZW1fYXBwKQotCi0gIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi0gIGRlZiByZXBsYWNlX3N5c3RlbV9hcHAoZGV2aWNlLCBhcmdzKToKLSAgICB3aXRoIFJlcGxhY2VTeXN0ZW1BcHAoZGV2aWNlLCBhcmdzLnBhY2thZ2UsIGFyZ3MucmVwbGFjZV93aXRoKToKLSAgICAgIHlpZWxkCi0KLSAgcmVwbGFjZV9wYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3JlcGxhY2UnKQotICByZXBsYWNlX3BhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLS1wYWNrYWdlJywgcmVxdWlyZWQ9VHJ1ZSwKLSAgICAgIGhlbHA9J1RoZSBzeXN0ZW0gcGFja2FnZSB0byByZXBsYWNlLicpCi0gIHJlcGxhY2VfcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICctLXJlcGxhY2Utd2l0aCcsIG1ldGF2YXI9J0FQSycsIHJlcXVpcmVkPVRydWUsCi0gICAgICBoZWxwPSdUaGUgQVBLIHdpdGggd2hpY2ggdGhlIGV4aXN0aW5nIHN5c3RlbSBhcHAgc2hvdWxkIGJlIHJlcGxhY2VkLicpCi0gIGFkZF9jb21tb25fYXJndW1lbnRzKHJlcGxhY2VfcGFyc2VyKQotICByZXBsYWNlX3BhcnNlci5zZXRfZGVmYXVsdHMoZnVuYz1yZXBsYWNlX3N5c3RlbV9hcHApCi0KLSAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHJhd19hcmdzKQotCi0gIHJ1bl90ZXN0c19oZWxwZXIuU2V0TG9nTGV2ZWwoYXJncy52ZXJib3NlKQotICBzY3JpcHRfY29tbW9uLkluaXRpYWxpemVFbnZpcm9ubWVudChhcmdzKQotCi0gIGRldmljZXMgPSBzY3JpcHRfY29tbW9uLkdldERldmljZXMoYXJncy5kZXZpY2VzLCBhcmdzLmJsYWNrbGlzdF9maWxlKQotICBwYXJhbGxlbF9kZXZpY2VzID0gcGFyYWxsZWxpemVyLlN5bmNQYXJhbGxlbGl6ZXIoCi0gICAgICBbYXJncy5mdW5jKGQsIGFyZ3MpIGZvciBkIGluIGRldmljZXNdKQotICB3aXRoIHBhcmFsbGVsX2RldmljZXM6Ci0gICAgaWYgYXJncy5jb21tYW5kOgotICAgICAgcmV0dXJuIGNtZF9oZWxwZXIuQ2FsbChhcmdzLmNvbW1hbmQpCi0gICAgcmV0dXJuIDAKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Rvb2xzL3N5c3RlbV9hcHBfZGV2aWNldGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvc3lzdGVtX2FwcF9kZXZpY2V0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwZThhZmRjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvc3lzdGVtX2FwcF9kZXZpY2V0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBwb3NpeHBhdGgKLWltcG9ydCBzaHV0aWwKLWltcG9ydCBzeXMKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5wYXRoLmFwcGVuZCgKLSAgICAgIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oCi0gICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJy4uJywgJy4uJykpKQotCi1mcm9tIGRldmlsIGltcG9ydCBiYXNlX2Vycm9yCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3RlbXBfZmlsZQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdGVzdF9jYXNlCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkLnRvb2xzIGltcG9ydCBzeXN0ZW1fYXBwCi0KLWxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWNsYXNzIFN5c3RlbUFwcERldmljZVRlc3QoZGV2aWNlX3Rlc3RfY2FzZS5EZXZpY2VUZXN0Q2FzZSk6Ci0KLSAgUEFDS0FHRSA9ICdjb20uZ29vZ2xlLmFuZHJvaWQud2VidmlldycKLQotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc3VwZXIoU3lzdGVtQXBwRGV2aWNlVGVzdCwgc2VsZikuc2V0VXAoKQotICAgIHNlbGYuX2RldmljZSA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscyhzZWxmLnNlcmlhbCkKLSAgICBzZWxmLl9vcmlnaW5hbF9wYXRocyA9IHNlbGYuX2RldmljZS5HZXRBcHBsaWNhdGlvblBhdGhzKHNlbGYuUEFDS0FHRSkKLSAgICBzZWxmLl9hcGtfY2FjaGVfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCi0gICAgIyBIb3N0IGxvY2F0aW9uIC0+IGRldmljZSBsb2NhdGlvbgotICAgIHNlbGYuX2NhY2hlZF9hcGtzID0ge30KLSAgICBmb3IgbyBpbiBzZWxmLl9vcmlnaW5hbF9wYXRoczoKLSAgICAgIGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fYXBrX2NhY2hlX2RpciwgcG9zaXhwYXRoLmJhc2VuYW1lKG8pKQotICAgICAgc2VsZi5fZGV2aWNlLlB1bGxGaWxlKG8sIGgpCi0gICAgICBzZWxmLl9jYWNoZWRfYXBrc1toXSA9IG8KLQotICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgZmluYWxfcGF0aHMgPSBzZWxmLl9kZXZpY2UuR2V0QXBwbGljYXRpb25QYXRocyhzZWxmLlBBQ0tBR0UpCi0gICAgaWYgc2VsZi5fb3JpZ2luYWxfcGF0aHMgIT0gZmluYWxfcGF0aHM6Ci0gICAgICB0cnk6Ci0gICAgICAgIHNlbGYuX2RldmljZS5Vbmluc3RhbGwoc2VsZi5QQUNLQUdFKQotICAgICAgZXhjZXB0IEV4Y2VwdGlvbjogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAotICAgICAgICBwYXNzCi0KLSAgICAgIHdpdGggc3lzdGVtX2FwcC5FbmFibGVTeXN0ZW1BcHBNb2RpZmljYXRpb24oc2VsZi5fZGV2aWNlKToKLSAgICAgICAgZm9yIGNhY2hlZF9hcGssIGluc3RhbGxfcGF0aCBpbiBzZWxmLl9jYWNoZWRfYXBrcy5pdGVyaXRlbXMoKToKLSAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIGRldmljZV90ZW1wX2ZpbGUuRGV2aWNlVGVtcEZpbGUoc2VsZi5fZGV2aWNlLmFkYikgYXMgdG1wOgotICAgICAgICAgICAgICBzZWxmLl9kZXZpY2UuYWRiLlB1c2goY2FjaGVkX2FwaywgdG1wLm5hbWUpCi0gICAgICAgICAgICAgIHNlbGYuX2RldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgICAgICAgICBbJ212JywgdG1wLm5hbWUsIGluc3RhbGxfcGF0aF0sCi0gICAgICAgICAgICAgICAgICBhc19yb290PVRydWUsIGNoZWNrX3JldHVybj1UcnVlKQotICAgICAgICAgIGV4Y2VwdCBiYXNlX2Vycm9yLkJhc2VFcnJvcjoKLSAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdGYWlsZWQgdG8gcmVpbnN0YWxsICVzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoY2FjaGVkX2FwaykpCi0KLSAgICB0cnk6Ci0gICAgICBzaHV0aWwucm10cmVlKHNlbGYuX2Fwa19jYWNoZV9kaXIpCi0gICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byByZW1vdmUgYXBwIGNhY2hlIGRpcmVjdG9yeS4nKQotCi0gICAgc3VwZXIoU3lzdGVtQXBwRGV2aWNlVGVzdCwgc2VsZikudGVhckRvd24oKQotCi0gIGRlZiBfY2hlY2tfcHJlY29uZGl0aW9ucyhzZWxmKToKLSAgICBpZiBub3Qgc2VsZi5fb3JpZ2luYWxfcGF0aHM6Ci0gICAgICBzZWxmLnNraXBUZXN0KCclcyBpcyBub3QgaW5zdGFsbGVkIG9uICVzJyAlICgKLSAgICAgICAgICBzZWxmLlBBQ0tBR0UsIHN0cihzZWxmLl9kZXZpY2UpKSkKLSAgICBpZiBub3QgYW55KHAuc3RhcnRzd2l0aCgnL3N5c3RlbS8nKSBmb3IgcCBpbiBzZWxmLl9vcmlnaW5hbF9wYXRocyk6Ci0gICAgICBzZWxmLnNraXBUZXN0KCclcyBpcyBub3QgaW5zdGFsbGVkIGluIGEgc3lzdGVtIGxvY2F0aW9uIG9uICVzJyAlICgKLSAgICAgICAgICBzZWxmLlBBQ0tBR0UsIHN0cihzZWxmLl9kZXZpY2UpKSkKLQotICBkZWYgdGVzdFJlcGxhY2Uoc2VsZik6Ci0gICAgc2VsZi5fY2hlY2tfcHJlY29uZGl0aW9ucygpCi0gICAgcmVwbGFjZW1lbnQgPSBkZXZpbF9lbnYuY29uZmlnLkZldGNoUGF0aCgKLSAgICAgICAgJ2VtcHR5X3N5c3RlbV93ZWJ2aWV3JywgZGV2aWNlPXNlbGYuX2RldmljZSkKLSAgICB3aXRoIHN5c3RlbV9hcHAuUmVwbGFjZVN5c3RlbUFwcChzZWxmLl9kZXZpY2UsIHNlbGYuUEFDS0FHRSwgcmVwbGFjZW1lbnQpOgotICAgICAgcmVwbGFjZWRfcGF0aHMgPSBzZWxmLl9kZXZpY2UuR2V0QXBwbGljYXRpb25QYXRocyhzZWxmLlBBQ0tBR0UpCi0gICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuX29yaWdpbmFsX3BhdGhzLCByZXBsYWNlZF9wYXRocykKLSAgICByZXN0b3JlZF9wYXRocyA9IHNlbGYuX2RldmljZS5HZXRBcHBsaWNhdGlvblBhdGhzKHNlbGYuUEFDS0FHRSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX29yaWdpbmFsX3BhdGhzLCByZXN0b3JlZF9wYXRocykKLQotICBkZWYgdGVzdFJlbW92ZShzZWxmKToKLSAgICBzZWxmLl9jaGVja19wcmVjb25kaXRpb25zKCkKLSAgICBzeXN0ZW1fYXBwLlJlbW92ZVN5c3RlbUFwcHMoc2VsZi5fZGV2aWNlLCBbc2VsZi5QQUNLQUdFXSkKLSAgICByZW1vdmVkX3BhdGhzID0gc2VsZi5fZGV2aWNlLkdldEFwcGxpY2F0aW9uUGF0aHMoc2VsZi5QQUNLQUdFKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlbW92ZWRfcGF0aHMpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Rvb2xzL3N5c3RlbV9hcHBfdGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvc3lzdGVtX2FwcF90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzJhYTE2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvc3lzdGVtX2FwcF90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmFic3BhdGgoCi0gICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJy4uJywgJy4uJykpKQotCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3V0aWxzCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBhZGJfd3JhcHBlcgotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgdmVyc2lvbl9jb2RlcwotZnJvbSBkZXZpbC5hbmRyb2lkLnRvb2xzIGltcG9ydCBzeXN0ZW1fYXBwCi0KLXdpdGggZGV2aWxfZW52LlN5c1BhdGgoZGV2aWxfZW52LlBZTU9DS19QQVRIKToKLSAgaW1wb3J0IG1vY2sKLQotCi1jbGFzcyBTeXN0ZW1BcHBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdERvdWJsZUVuYWJsZU1vZGlmaWNhdGlvbihzZWxmKToKLSAgICAiIiJFbnN1cmVzIHRoYXQgc3lzdGVtIGFwcCBtb2RpZmljYXRpb24gbG9naWMgaXNuJ3QgcmVwZWF0ZWQuCi0KLSAgICBJZiBFbmFibGVTeXN0ZW1BcHBNb2RpZmljYXRpb24gdXNlcyBhcmUgbmVzdGVkLCBpbm5lciBjYWxscyBzaG91bGQKLSAgICBub3QgbmVlZCB0byBwZXJmb3JtIGFueSBvZiB0aGUgZXhwZW5zaXZlIG1vZGlmaWNhdGlvbiBsb2dpYy4KLSAgICAiIiIKLSAgICAjIHB5bGludDogZGlzYWJsZT1uby1zZWxmLXVzZSxwcm90ZWN0ZWQtYWNjZXNzCi0gICAgbW9ja19kZXZpY2UgPSBtb2NrLk1vY2soc3BlYz1kZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMpCi0gICAgbW9ja19kZXZpY2UuYWRiID0gbW9jay5Nb2NrKHNwZWM9YWRiX3dyYXBwZXIuQWRiV3JhcHBlcikKLSAgICB0eXBlKG1vY2tfZGV2aWNlKS5idWlsZF92ZXJzaW9uX3NkayA9IG1vY2suUHJvcGVydHlNb2NrKAotICAgICAgICByZXR1cm5fdmFsdWU9dmVyc2lvbl9jb2Rlcy5MT0xMSVBPUCkKLQotICAgIHN5c3RlbV9wcm9wcyA9IHt9Ci0KLSAgICBkZWYgZGljdF9zZXRwcm9wKHByb3BfbmFtZSwgdmFsdWUpOgotICAgICAgc3lzdGVtX3Byb3BzW3Byb3BfbmFtZV0gPSB2YWx1ZQotCi0gICAgZGVmIGRpY3RfZ2V0cHJvcChwcm9wX25hbWUpOgotICAgICAgcmV0dXJuIHN5c3RlbV9wcm9wcy5nZXQocHJvcF9uYW1lLCAnJykKLQotICAgIG1vY2tfZGV2aWNlLlNldFByb3Auc2lkZV9lZmZlY3QgPSBkaWN0X3NldHByb3AKLSAgICBtb2NrX2RldmljZS5HZXRQcm9wLnNpZGVfZWZmZWN0ID0gZGljdF9nZXRwcm9wCi0KLSAgICB3aXRoIHN5c3RlbV9hcHAuRW5hYmxlU3lzdGVtQXBwTW9kaWZpY2F0aW9uKG1vY2tfZGV2aWNlKToKLSAgICAgIG1vY2tfZGV2aWNlLkVuYWJsZVJvb3QuYXNzZXJ0X2NhbGxlZF9vbmNlKCkKLSAgICAgIG1vY2tfZGV2aWNlLkdldFByb3AuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCi0gICAgICAgICAgc3lzdGVtX2FwcC5fRU5BQkxFX01PRElGSUNBVElPTl9QUk9QKQotICAgICAgbW9ja19kZXZpY2UuU2V0UHJvcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKLSAgICAgICAgICBzeXN0ZW1fYXBwLl9FTkFCTEVfTU9ESUZJQ0FUSU9OX1BST1AsICcxJykKLSAgICAgIG1vY2tfZGV2aWNlLnJlc2V0X21vY2soKQotCi0gICAgICB3aXRoIHN5c3RlbV9hcHAuRW5hYmxlU3lzdGVtQXBwTW9kaWZpY2F0aW9uKG1vY2tfZGV2aWNlKToKLSAgICAgICAgbW9ja19kZXZpY2UuRW5hYmxlUm9vdC5hc3NlcnRfbm90X2NhbGxlZCgpCi0gICAgICAgIG1vY2tfZGV2aWNlLkdldFByb3AuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCi0gICAgICAgICAgICBzeXN0ZW1fYXBwLl9FTkFCTEVfTU9ESUZJQ0FUSU9OX1BST1ApCi0gICAgICAgIG1vY2tfZGV2aWNlLlNldFByb3AuYXNzZXJ0X25vdF9jYWxsZWQoKQotICAgICAgICBtb2NrX2RldmljZS5yZXNldF9tb2NrKCkKLQotICAgIG1vY2tfZGV2aWNlLlNldFByb3AuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCi0gICAgICAgIHN5c3RlbV9hcHAuX0VOQUJMRV9NT0RJRklDQVRJT05fUFJPUCwgJzAnKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy91bmxvY2tfYm9vdGxvYWRlci5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvdW5sb2NrX2Jvb3Rsb2FkZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZmVjOWQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy91bmxvY2tfYm9vdGxvYWRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiQSBzY3JpcHQgdG8gb3BlbiB0aGUgdW5sb2NrIGJvb3Rsb2FkZXIgb24tc2NyZWVuIHByb21wdCBvbiBhbGwgZGV2aWNlcy4iIiIKLQotaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotaW1wb3J0IHRpbWUKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLnBhdGguYXBwZW5kKAotICAgICAgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4nLCAnLi4nLCAnLi4nKSkpCi0KLWZyb20gZGV2aWwgaW1wb3J0IGRldmlsX2VudgotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBhZGJfd3JhcHBlcgotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgZmFzdGJvb3QKLWZyb20gZGV2aWwuYW5kcm9pZC50b29scyBpbXBvcnQgc2NyaXB0X2NvbW1vbgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgcGFyYWxsZWxpemVyCi0KLQotZGVmIHJlYm9vdF9pbnRvX2Jvb3Rsb2FkZXIoZmlsdGVyX2RldmljZXMpOgotICAjIFJlYm9vdCBhbGwgZGV2aWNlcyBpbnRvIGJvb3Rsb2FkZXIgaWYgdGhleSBhcmVuJ3QgdGhlcmUgYWxyZWFkeS4KLSAgcmVib290ZWRfZGV2aWNlcyA9IHNldCgpCi0gIGZvciBkIGluIGFkYl93cmFwcGVyLkFkYldyYXBwZXIuRGV2aWNlcyhkZXNpcmVkX3N0YXRlPU5vbmUpOgotICAgIGlmIGZpbHRlcl9kZXZpY2VzIGFuZCBzdHIoZCkgbm90IGluIGZpbHRlcl9kZXZpY2VzOgotICAgICAgY29udGludWUKLSAgICBzdGF0ZSA9IGQuR2V0U3RhdGUoKQotICAgIGlmIHN0YXRlID09ICdkZXZpY2UnOgotICAgICAgbG9nZ2luZy5pbmZvKCdCb290aW5nICVzIHRvIGJvb3Rsb2FkZXIuJywgZCkKLSAgICAgIHRyeToKLSAgICAgICAgZC5SZWJvb3QodG9fYm9vdGxvYWRlcj1UcnVlKQotICAgICAgICByZWJvb3RlZF9kZXZpY2VzLmFkZChzdHIoZCkpCi0gICAgICBleGNlcHQgKGRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yLAotICAgICAgICAgICAgICBkZXZpY2VfZXJyb3JzLkRldmljZVVucmVhY2hhYmxlRXJyb3IpOgotICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbignVW5hYmxlIHRvIHJlYm9vdCBkZXZpY2UgJXMnLCBkKQotICAgIGVsc2U6Ci0gICAgICBsb2dnaW5nLmVycm9yKCdVbmFibGUgdG8gcmVib290IGRldmljZSAlczogJXMnLCBkLCBzdGF0ZSkKLQotICAjIFdhaXQgZm9yIHRoZSByZWJvb3RlZCBkZXZpY2VzIHRvIHNob3cgdXAgaW4gZmFzdGJvb3QuCi0gIGlmIHJlYm9vdGVkX2RldmljZXM6Ci0gICAgbG9nZ2luZy5pbmZvKCdXYWl0aW5nIGZvciBkZXZpY2VzIHRvIHJlYm9vdC4uLicpCi0gICAgdGltZW91dCA9IDYwCi0gICAgc3RhcnQgPSB0aW1lLnRpbWUoKQotICAgIHdoaWxlIFRydWU6Ci0gICAgICB0aW1lLnNsZWVwKDUpCi0gICAgICBmYXN0Ym9vdGVkX2RldmljZXMgPSBzZXQoW3N0cihkKSBmb3IgZCBpbiBmYXN0Ym9vdC5GYXN0Ym9vdC5EZXZpY2VzKCldKQotICAgICAgaWYgcmVib290ZWRfZGV2aWNlcyA8PSBzZXQoZmFzdGJvb3RlZF9kZXZpY2VzKToKLSAgICAgICAgbG9nZ2luZy5pbmZvKCdBbGwgZGV2aWNlcyBpbiBmYXN0Ym9vdC4nKQotICAgICAgICBicmVhawotICAgICAgaWYgdGltZS50aW1lKCkgLSBzdGFydCA+IHRpbWVvdXQ6Ci0gICAgICAgIGxvZ2dpbmcuZXJyb3IoJ1RpbWVkIG91dCB3YWl0aW5nIGZvciAlcyB0byByZWJvb3QuJywKLSAgICAgICAgICAgICAgICAgICAgICByZWJvb3RlZF9kZXZpY2VzIC0gc2V0KGZhc3Rib290ZWRfZGV2aWNlcykpCi0gICAgICAgIGJyZWFrCi0KLQotZGVmIHVubG9ja19ib290bG9hZGVyKGQpOgotICAjIFVubG9jayB0aGUgcGhvbmVzLgotICB1bmxvY2tpbmdfcHJvY2Vzc2VzID0gW10KLSAgbG9nZ2luZy5pbmZvKCdVbmxvY2tpbmcgJXMuLi4nLCBkKQotICAjIFRoZSBjb21tYW5kIHRvIHVubG9jayB0aGUgYm9vdGxvYWRlciBjb3VsZCBiZSBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZwotICAjIGRlcGVuZGluZyBvbiB0aGUgYW5kcm9pZCB2ZXJzaW9uIGFuZC9vciBvZW0uIENhbid0IHJlYWxseSB0ZWxsIHdoaWNoIGlzCi0gICMgbmVlZGVkLCBzbyBqdXN0IHRyeSBib3RoLgotICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0gIGNtZF9vbGQgPSBbZC5fZmFzdGJvb3RfcGF0aC5yZWFkKCksICctcycsIHN0cihkKSwgJ29lbScsICd1bmxvY2snXQotICBjbWRfbmV3ID0gW2QuX2Zhc3Rib290X3BhdGgucmVhZCgpLCAnLXMnLCBzdHIoZCksICdmbGFzaGluZycsICd1bmxvY2snXQotICB1bmxvY2tpbmdfcHJvY2Vzc2VzLmFwcGVuZCgKLSAgICAgIHN1YnByb2Nlc3MuUG9wZW4oCi0gICAgICAgICAgY21kX29sZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkpCi0gIHVubG9ja2luZ19wcm9jZXNzZXMuYXBwZW5kKAotICAgICAgc3VicHJvY2Vzcy5Qb3BlbigKLSAgICAgICAgICBjbWRfbmV3LCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKSkKLQotICAjIEdpdmUgdGhlIHVubG9ja2luZyBjb21tYW5kIHRpbWUgdG8gZmluaXNoIGFuZC9vciBvcGVuIHRoZSBvbi1zY3JlZW4gcHJvbXB0LgotICBsb2dnaW5nLmluZm8oJ1NsZWVwaW5nIGZvciA1IHNlY29uZHMuLi4nKQotICB0aW1lLnNsZWVwKDUpCi0KLSAgbGVmdG92ZXJfcGlkcyA9IFtdCi0gIGZvciBwIGluIHVubG9ja2luZ19wcm9jZXNzZXM6Ci0gICAgcC5wb2xsKCkKLSAgICByYyA9IHAucmV0dXJuY29kZQotICAgICMgSWYgdGhlIGNvbW1hbmQgc3VjY2VzZnVsbHkgb3BlbmVkIHRoZSB1bmxvY2sgcHJvbXB0IG9uIHRoZSBzY3JlZW4sIHRoZQotICAgICMgZmFzdGJvb3QgY29tbWFuZCBwcm9jZXNzIHdpbGwgaGFuZyBhbmQgd2FpdCBmb3IgYSByZXNwb25zZS4gV2Ugc3RpbGwKLSAgICAjIG5lZWQgdG8gcmVhZCBpdHMgc3Rkb3V0L3N0ZGVyciwgc28gdXNlIG9zLnJlYWQgc28gdGhhdCB3ZSBkb24ndAotICAgICMgaGF2ZSB0byB3YWl0IGZvciBFT0YgdG8gYmUgd3JpdHRlbi4KLSAgICBvdXQgPSBvcy5yZWFkKHAuc3RkZXJyLmZpbGVubygpLCAxMDI0KS5zdHJpcCgpLmxvd2VyKCkKLSAgICBpZiBub3QgcmM6Ci0gICAgICBpZiBvdXQgPT0gJy4uLicgb3Igb3V0ID09ICc8IHdhaXRpbmcgZm9yIGRldmljZSA+JzoKLSAgICAgICAgbG9nZ2luZy5pbmZvKCdEZXZpY2UgJXMgaXMgd2FpdGluZyBmb3IgY29uZmlybWF0aW9uLicsIGQpCi0gICAgICBlbHNlOgotICAgICAgICBsb2dnaW5nLmVycm9yKAotICAgICAgICAgICAgJ0RldmljZSAlcyBpcyBoYW5naW5nLCBidXQgbm90IHdhaXRpbmcgZm9yIGNvbmZpcm1hdGlvbjogJXMnLAotICAgICAgICAgICAgZCwgb3V0KQotICAgICAgbGVmdG92ZXJfcGlkcy5hcHBlbmQocC5waWQpCi0gICAgZWxzZToKLSAgICAgIGlmICd1bmtub3duIGNvbW1hbmQnIGluIG91dDoKLSAgICAgICAgIyBPZiB0aGUgdHdvIHVubG9ja2luZyBjb21tYW5kcywgdGhpcyB3YXMgbGlrZWx5IHRoZSB3cm9uZyBvbmUuCi0gICAgICAgIGNvbnRpbnVlCi0gICAgICBlbGlmICdhbHJlYWR5IHVubG9ja2VkJyBpbiBvdXQ6Ci0gICAgICAgIGxvZ2dpbmcuaW5mbygnRGV2aWNlICVzIGFscmVhZHkgdW5sb2NrZWQuJywgZCkKLSAgICAgIGVsaWYgJ3VubG9jayBpcyBub3QgYWxsb3dlZCcgaW4gb3V0OgotICAgICAgICBsb2dnaW5nLmVycm9yKCJEZXZpY2UgJXMgaXMgb2VtIGxvY2tlZC4gQ2FuJ3QgdW5sb2NrIGJvb3Rsb2FkZXIuIiwgZCkKLSAgICAgIGVsc2U6Ci0gICAgICAgIGxvZ2dpbmcuZXJyb3IoJ0RldmljZSAlcyBpbiB1bmtub3duIHN0YXRlOiAiJXMiJywgZCwgb3V0KQotICAgIGJyZWFrCi0KLSAgaWYgbGVmdG92ZXJfcGlkczoKLSAgICBsb2dnaW5nLndhcm5pbmcoJ1Byb2Nlc3NlcyAlcyBsZWZ0IG92ZXIgYWZ0ZXIgdW5sb2NraW5nLicsIGxlZnRvdmVyX3BpZHMpCi0KLSAgcmV0dXJuIDAKLQotCi1kZWYgbWFpbigpOgotICBsb2dnaW5nLmdldExvZ2dlcigpLnNldExldmVsKGxvZ2dpbmcuSU5GTykKLQotICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCi0gIHNjcmlwdF9jb21tb24uQWRkRGV2aWNlQXJndW1lbnRzKHBhcnNlcikKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hZGItcGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nQWJzb2x1dGUgcGF0aCB0byB0aGUgYWRiIGJpbmFyeSB0byB1c2UuJykKLSAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLQotICBkZXZpbF9keW5hbWljX2NvbmZpZyA9IGRldmlsX2Vudi5FbXB0eUNvbmZpZygpCi0gIGlmIGFyZ3MuYWRiX3BhdGg6Ci0gICAgZGV2aWxfZHluYW1pY19jb25maWdbJ2RlcGVuZGVuY2llcyddLnVwZGF0ZSgKLSAgICAgICAgZGV2aWxfZW52LkxvY2FsQ29uZmlnSXRlbSgKLSAgICAgICAgICAgICdhZGInLCBkZXZpbF9lbnYuR2V0UGxhdGZvcm0oKSwgYXJncy5hZGJfcGF0aCkpCi0gIGRldmlsX2Vudi5jb25maWcuSW5pdGlhbGl6ZShjb25maWdzPVtkZXZpbF9keW5hbWljX2NvbmZpZ10pCi0KLSAgcmVib290X2ludG9fYm9vdGxvYWRlcihhcmdzLmRldmljZXMpCi0gIGRldmljZXMgPSBbCi0gICAgICBkIGZvciBkIGluIGZhc3Rib290LkZhc3Rib290LkRldmljZXMoKSBpZiBub3QgYXJncy5kZXZpY2VzIG9yCi0gICAgICAgICAgc3RyKGQpIGluIGFyZ3MuZGV2aWNlc10KLSAgcGFyYWxsZWxfZGV2aWNlcyA9IHBhcmFsbGVsaXplci5QYXJhbGxlbGl6ZXIoZGV2aWNlcykKLSAgcGFyYWxsZWxfZGV2aWNlcy5wTWFwKHVubG9ja19ib290bG9hZGVyKS5wR2V0KE5vbmUpCi0gIHJldHVybiAwCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy92aWRlb19yZWNvcmRlci5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvdmlkZW9fcmVjb3JkZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDA4NDMyNjQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy92aWRlb19yZWNvcmRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiQ2FwdHVyZXMgYSB2aWRlbyBmcm9tIGFuIEFuZHJvaWQgZGV2aWNlLiIiIgotCi1pbXBvcnQgYXJncGFyc2UKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCB0aW1lCi1pbXBvcnQgc3lzCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKAotICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJy4uJywgJy4uJykpKQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2Vfc2lnbmFsCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkLnRvb2xzIGltcG9ydCBzY3JpcHRfY29tbW9uCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBjbWRfaGVscGVyCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCByZXJhaXNlcl90aHJlYWQKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHRpbWVvdXRfcmV0cnkKLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLQotY2xhc3MgVmlkZW9SZWNvcmRlcihvYmplY3QpOgotICAiIiJSZWNvcmRzIGEgc2NyZWVuIGNhcHR1cmUgdmlkZW8gZnJvbSBhbiBBbmRyb2lkIERldmljZSAoS2l0S2F0IG9yIG5ld2VyKS4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgZGV2aWNlLCBtZWdhYml0c19wZXJfc2Vjb25kPTQsIHNpemU9Tm9uZSwKLSAgICAgICAgICAgICAgIHJvdGF0ZT1GYWxzZSk6Ci0gICAgIiIiQ3JlYXRlcyBhIFZpZGVvUmVjb3JkZXIgaW5zdGFuY2UuCi0KLSAgICBBcmdzOgotICAgICAgZGV2aWNlOiBEZXZpY2VVdGlscyBpbnN0YW5jZS4KLSAgICAgIGhvc3RfZmlsZTogUGF0aCB0byB0aGUgdmlkZW8gZmlsZSB0byBzdG9yZSBvbiB0aGUgaG9zdC4KLSAgICAgIG1lZ2FiaXRzX3Blcl9zZWNvbmQ6IFZpZGVvIGJpdHJhdGUgaW4gbWVnYWJpdHMgcGVyIHNlY29uZC4gQWxsb3dlZCByYW5nZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAwLjEgdG8gMTAwIG1icHMuCi0gICAgICBzaXplOiBWaWRlbyBmcmFtZSBzaXplIHR1cGxlICh3aWR0aCwgaGVpZ2h0KSBvciBOb25lIHRvIHVzZSB0aGUgZGV2aWNlCi0gICAgICAgICAgICBkZWZhdWx0LgotICAgICAgcm90YXRlOiBJZiBUcnVlLCB0aGUgdmlkZW8gd2lsbCBiZSByb3RhdGVkIDkwIGRlZ3JlZXMuCi0gICAgIiIiCi0gICAgc2VsZi5fYml0X3JhdGUgPSBtZWdhYml0c19wZXJfc2Vjb25kICogMTAwMCAqIDEwMDAKLSAgICBzZWxmLl9kZXZpY2UgPSBkZXZpY2UKLSAgICBzZWxmLl9kZXZpY2VfZmlsZSA9ICgKLSAgICAgICAgJyVzL3NjcmVlbi1yZWNvcmRpbmcubXA0JyAlIGRldmljZS5HZXRFeHRlcm5hbFN0b3JhZ2VQYXRoKCkpCi0gICAgc2VsZi5fcmVjb3JkZXJfdGhyZWFkID0gTm9uZQotICAgIHNlbGYuX3JvdGF0ZSA9IHJvdGF0ZQotICAgIHNlbGYuX3NpemUgPSBzaXplCi0gICAgc2VsZi5fc3RhcnRlZCA9IHRocmVhZGluZy5FdmVudCgpCi0KLSAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICBzZWxmLlN0YXJ0KCkKLQotICBkZWYgU3RhcnQoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAiIiJTdGFydCByZWNvcmRpbmcgdmlkZW8uIiIiCi0gICAgZGVmIHNjcmVlbnJlY29yZF9zdGFydGVkKCk6Ci0gICAgICByZXR1cm4gYm9vbChzZWxmLl9kZXZpY2UuR2V0UGlkcygnc2NyZWVucmVjb3JkJykpCi0KLSAgICBpZiBzY3JlZW5yZWNvcmRfc3RhcnRlZCgpOgotICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDYW4ndCBydW4gbXVsdGlwbGUgY29uY3VycmVudCB2aWRlbyBjYXB0dXJlcy4iKQotCi0gICAgc2VsZi5fc3RhcnRlZC5jbGVhcigpCi0gICAgc2VsZi5fcmVjb3JkZXJfdGhyZWFkID0gcmVyYWlzZXJfdGhyZWFkLlJlcmFpc2VyVGhyZWFkKHNlbGYuX1JlY29yZCkKLSAgICBzZWxmLl9yZWNvcmRlcl90aHJlYWQuc3RhcnQoKQotICAgIHRpbWVvdXRfcmV0cnkuV2FpdEZvcigKLSAgICAgICAgc2NyZWVucmVjb3JkX3N0YXJ0ZWQsIHdhaXRfcGVyaW9kPTEsIG1heF90cmllcz10aW1lb3V0KQotICAgIHNlbGYuX3N0YXJ0ZWQud2FpdCh0aW1lb3V0KQotCi0gIGRlZiBfUmVjb3JkKHNlbGYpOgotICAgIGNtZCA9IFsnc2NyZWVucmVjb3JkJywgJy0tdmVyYm9zZScsICctLWJpdC1yYXRlJywgc3RyKHNlbGYuX2JpdF9yYXRlKV0KLSAgICBpZiBzZWxmLl9yb3RhdGU6Ci0gICAgICBjbWQgKz0gWyctLXJvdGF0ZSddCi0gICAgaWYgc2VsZi5fc2l6ZToKLSAgICAgIGNtZCArPSBbJy0tc2l6ZScsICclZHglZCcgJSBzZWxmLl9zaXplXQotICAgIGNtZCArPSBbc2VsZi5fZGV2aWNlX2ZpbGVdCi0gICAgZm9yIGxpbmUgaW4gc2VsZi5fZGV2aWNlLmFkYi5JdGVyU2hlbGwoCi0gICAgICAgICcgJy5qb2luKGNtZF9oZWxwZXIuU2luZ2xlUXVvdGUoaSkgZm9yIGkgaW4gY21kKSwgTm9uZSk6Ci0gICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0NvbnRlbnQgYXJlYSBpcyAnKToKLSAgICAgICAgc2VsZi5fc3RhcnRlZC5zZXQoKQotCi0gIGRlZiBfX2V4aXRfXyhzZWxmLCBfZXhjX3R5cGUsIF9leGNfdmFsdWUsIF90cmFjZWJhY2spOgotICAgIHNlbGYuU3RvcCgpCi0KLSAgZGVmIFN0b3Aoc2VsZik6Ci0gICAgIiIiU3RvcCByZWNvcmRpbmcgdmlkZW8uIiIiCi0gICAgaWYgbm90IHNlbGYuX2RldmljZS5LaWxsQWxsKCdzY3JlZW5yZWNvcmQnLCBzaWdudW09ZGV2aWNlX3NpZ25hbC5TSUdJTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aWV0PVRydWUpOgotICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vdGhpbmcgdG8ga2lsbDogc2NyZWVucmVjb3JkIHdhcyBub3QgcnVubmluZycpCi0gICAgc2VsZi5fcmVjb3JkZXJfdGhyZWFkLmpvaW4oKQotCi0gIGRlZiBQdWxsKHNlbGYsIGhvc3RfZmlsZT1Ob25lKToKLSAgICAiIiJQdWxsIHJlc3VsdGluZyB2aWRlbyBmaWxlIGZyb20gdGhlIGRldmljZS4KLQotICAgIEFyZ3M6Ci0gICAgICBob3N0X2ZpbGU6IFBhdGggdG8gdGhlIHZpZGVvIGZpbGUgdG8gc3RvcmUgb24gdGhlIGhvc3QuCi0gICAgUmV0dXJuczoKLSAgICAgIE91dHB1dCB2aWRlbyBmaWxlIG5hbWUgb24gdGhlIGhvc3QuCi0gICAgIiIiCi0gICAgIyBUT0RPKGpidWRvcmljayk6IE1lcmdlIGZpbGVuYW1lIGdlbmVyYXRpb24gd2l0aCB0aGUgbG9naWMgZm9yIGRvaW5nIHNvIGluCi0gICAgIyBEZXZpY2VVdGlscy4KLSAgICBob3N0X2ZpbGVfbmFtZSA9ICgKLSAgICAgICAgaG9zdF9maWxlCi0gICAgICAgIG9yICdzY3JlZW4tcmVjb3JkaW5nLSVzLSVzLm1wNCcgJSAoCi0gICAgICAgICAgICBzdHIoc2VsZi5fZGV2aWNlKSwKLSAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoJyVZJW0lZFQlSCVNJVMnLCB0aW1lLmxvY2FsdGltZSgpKSkpCi0gICAgaG9zdF9maWxlX25hbWUgPSBvcy5wYXRoLmFic3BhdGgoaG9zdF9maWxlX25hbWUpCi0gICAgc2VsZi5fZGV2aWNlLlB1bGxGaWxlKHNlbGYuX2RldmljZV9maWxlLCBob3N0X2ZpbGVfbmFtZSkKLSAgICBzZWxmLl9kZXZpY2UuUmVtb3ZlUGF0aChzZWxmLl9kZXZpY2VfZmlsZSwgZm9yY2U9VHJ1ZSkKLSAgICByZXR1cm4gaG9zdF9maWxlX25hbWUKLQotCi1kZWYgbWFpbigpOgotICAjIFBhcnNlIG9wdGlvbnMuCi0gIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPV9fZG9jX18pCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGV2aWNlJywgZGVzdD0nZGV2aWNlcycsIGFjdGlvbj0nYXBwZW5kJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTZXJpYWwgbnVtYmVyIG9mIEFuZHJvaWQgZGV2aWNlIHRvIHVzZS4nKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJsYWNrbGlzdC1maWxlJywgaGVscD0nRGV2aWNlIGJsYWNrbGlzdCBKU09OIGZpbGUuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1maWxlJywgbWV0YXZhcj0nRklMRScsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2F2ZSByZXN1bHQgdG8gZmlsZSBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAndGltZXN0YW1wZWQgZmlsZSBuYW1lLicpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nVmVyYm9zZSBsb2dnaW5nLicpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy1iJywgJy0tYml0cmF0ZScsIGRlZmF1bHQ9NCwgdHlwZT1mbG9hdCwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdCaXRyYXRlIGluIG1lZ2FiaXRzL3MsIGZyb20gMC4xIHRvIDEwMCBtYnBzLCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnJShkZWZhdWx0KWQgbWJwcyBieSBkZWZhdWx0LicpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy1yJywgJy0tcm90YXRlJywgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSb3RhdGUgdmlkZW8gYnkgOTAgZGVncmVlcy4nKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXNpemUnLCBtZXRhdmFyPSdXSURUSHhIRUlHSFQnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0ZyYW1lIHNpemUgdG8gdXNlIGluc3RlYWQgb2YgdGhlIGRldmljZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NyZWVuIHNpemUuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnaG9zdF9maWxlJywgbmFyZ3M9Jz8nLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0ZpbGUgdG8gd2hpY2ggdGhlIHZpZGVvIGNhcHR1cmUgd2lsbCBiZSB3cml0dGVuLicpCi0KLSAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLQotICBob3N0X2ZpbGUgPSBhcmdzLmhvc3RfZmlsZSBvciBhcmdzLmZpbGUKLQotICBpZiBhcmdzLnZlcmJvc2U6Ci0gICAgbG9nZ2luZy5nZXRMb2dnZXIoKS5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotCi0gIHNpemUgPSAodHVwbGUoaW50KGkpIGZvciBpIGluIGFyZ3Muc2l6ZS5zcGxpdCgneCcpKQotICAgICAgICAgIGlmIGFyZ3Muc2l6ZQotICAgICAgICAgIGVsc2UgTm9uZSkKLQotICBkZWYgcmVjb3JkX3ZpZGVvKGRldmljZSwgc3RvcF9yZWNvcmRpbmcpOgotICAgIHJlY29yZGVyID0gVmlkZW9SZWNvcmRlcigKLSAgICAgICAgZGV2aWNlLCBtZWdhYml0c19wZXJfc2Vjb25kPWFyZ3MuYml0cmF0ZSwgc2l6ZT1zaXplLCByb3RhdGU9YXJncy5yb3RhdGUpCi0gICAgd2l0aCByZWNvcmRlcjoKLSAgICAgIHN0b3BfcmVjb3JkaW5nLndhaXQoKQotCi0gICAgZiA9IE5vbmUKLSAgICBpZiBob3N0X2ZpbGU6Ci0gICAgICByb290LCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGhvc3RfZmlsZSkKLSAgICAgIGYgPSAnJXNfJXMlcycgJSAocm9vdCwgc3RyKGRldmljZSksIGV4dCkKLSAgICBmID0gcmVjb3JkZXIuUHVsbChmKQotICAgIHByaW50ICdWaWRlbyB3cml0dGVuIHRvICVzJyAlIG9zLnBhdGguYWJzcGF0aChmKQotCi0gIHBhcmFsbGVsX2RldmljZXMgPSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMucGFyYWxsZWwoCi0gICAgICBzY3JpcHRfY29tbW9uLkdldERldmljZXMoYXJncy5kZXZpY2VzLCBhcmdzLmJsYWNrbGlzdF9maWxlKSwKLSAgICAgIGFzeW5jPVRydWUpCi0gIHN0b3BfcmVjb3JkaW5nID0gdGhyZWFkaW5nLkV2ZW50KCkKLSAgcnVubmluZ19yZWNvcmRpbmcgPSBwYXJhbGxlbF9kZXZpY2VzLnBNYXAocmVjb3JkX3ZpZGVvLCBzdG9wX3JlY29yZGluZykKLSAgcHJpbnQgJ1JlY29yZGluZy4gUHJlc3MgRW50ZXIgdG8gc3RvcC4nLAotICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgcmF3X2lucHV0KCkKLSAgc3RvcF9yZWNvcmRpbmcuc2V0KCkKLQotICBydW5uaW5nX3JlY29yZGluZy5wR2V0KE5vbmUpCi0gIHJldHVybiAwCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy93YWl0X2Zvcl9kZXZpY2VzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC90b29scy93YWl0X2Zvcl9kZXZpY2VzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiYzczMzM1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvd2FpdF9mb3JfZGV2aWNlcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJXYWl0cyBmb3IgdGhlIGdpdmVuIGRldmljZXMgdG8gYmUgYXZhaWxhYmxlLiIiIgotCi1pbXBvcnQgYXJncGFyc2UKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMucGF0aC5hcHBlbmQoCi0gICAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLicsICcuLicsICcuLicpKSkKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdXRpbHMKLWZyb20gZGV2aWwuYW5kcm9pZC50b29scyBpbXBvcnQgc2NyaXB0X2NvbW1vbgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgcnVuX3Rlc3RzX2hlbHBlcgotCi0KLWRlZiBtYWluKHJhd19hcmdzKToKLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JywgaGVscD0nTG9nIG1vcmUuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10aW1lb3V0JywgZGVmYXVsdD0zMCwgdHlwZT1pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2Vjb25kcyB0byB3YWl0IGZvciB0aGUgZGV2aWNlcy4nKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWFkYi1wYXRoJywgaGVscD0nQURCIGJpbmFyeSB0byB1c2UuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZGV2aWNlX3NlcmlhbHMnLCBuYXJncz0nKicsIG1ldGF2YXI9J1NFUklBTCcsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2VyaWFscyBvZiB0aGUgZGV2aWNlcyB0byB3YWl0IGZvci4nKQotCi0gIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhyYXdfYXJncykKLQotICBydW5fdGVzdHNfaGVscGVyLlNldExvZ0xldmVsKGFyZ3MudmVyYm9zZSkKLSAgc2NyaXB0X2NvbW1vbi5Jbml0aWFsaXplRW52aXJvbm1lbnQoYXJncykKLQotICBkZXZpY2VzID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLkhlYWx0aHlEZXZpY2VzKAotICAgICAgZGV2aWNlX2FyZz1hcmdzLmRldmljZV9zZXJpYWxzKQotICBwYXJhbGxlbF9kZXZpY2VzID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLnBhcmFsbGVsKGRldmljZXMpCi0gIHBhcmFsbGVsX2RldmljZXMuV2FpdFVudGlsRnVsbHlCb290ZWQodGltZW91dD1hcmdzLnRpbWVvdXQpCi0gIHJldHVybiAwCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC92YWxncmluZF90b29scy9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdmFsZ3JpbmRfdG9vbHMvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxODJkNGMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC92YWxncmluZF90b29scy9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0iIiIKLUNsYXNzZXMgaW4gdGhpcyBwYWNrYWdlIGRlZmluZSBhZGRpdGlvbmFsIGFjdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHRha2VuIHRvIHJ1biBhCi10ZXN0IHVuZGVyIHNvbWUga2luZCBvZiBydW50aW1lIGVycm9yIGRldGVjdGlvbiB0b29sLgotCi1UaGUgaW50ZXJmYWNlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgZm9sbG93cy4KLQotMS4gRm9yIHRlc3RzIHRoYXQgc2ltcGx5IHJ1biBhIG5hdGl2ZSBwcm9jZXNzIChpLmUuIG5vIGFjdGl2aXR5IGlzIHNwYXduZWQpOgotCi1DYWxsIHRvb2wuQ29weUZpbGVzKGRldmljZSkuCi1QcmVwZW5kIHRlc3QgY29tbWFuZCBsaW5lIHdpdGggdG9vbC5HZXRUZXN0V3JhcHBlcigpLgotCi0yLiBGb3IgdGVzdHMgdGhhdCBzcGF3biBhbiBhY3Rpdml0eToKLQotQ2FsbCB0b29sLkNvcHlGaWxlcyhkZXZpY2UpLgotQ2FsbCB0b29sLlNldHVwRW52aXJvbm1lbnQoKS4KLVJ1biB0aGUgdGVzdCBhcyB1c3VhbC4KLUNhbGwgdG9vbC5DbGVhblVwRW52aXJvbm1lbnQoKS4KLSIiIgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYW5kcm9pZC92YWxncmluZF90b29scy9iYXNlX3Rvb2wucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3ZhbGdyaW5kX3Rvb2xzL2Jhc2VfdG9vbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU2ZTlhZi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3ZhbGdyaW5kX3Rvb2xzL2Jhc2VfdG9vbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLQotY2xhc3MgQmFzZVRvb2wob2JqZWN0KToKLSAgIiIiQSB0b29sIHRoYXQgZG9lcyBub3RoaW5nLiIiIgotICAjIHB5bGludDogZGlzYWJsZT1SMDIwMQotCi0gIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAiIiJEb2VzIG5vdGhpbmcuIiIiCi0gICAgcGFzcwotCi0gIGRlZiBHZXRUZXN0V3JhcHBlcihzZWxmKToKLSAgICAiIiJSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgdG8gYmUgcHJlcGVuZGVkIHRvIHRoZSB0ZXN0IGNvbW1hbmQgbGluZS4iIiIKLSAgICByZXR1cm4gJycKLQotICBkZWYgR2V0VXRpbFdyYXBwZXIoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgd3JhcHBlciBuYW1lIGZvciB0aGUgdXRpbGl0aWVzLgotCi0gICAgUmV0dXJuczoKLSAgICAgICBBIHN0cmluZyB0aGF0IGlzIHRvIGJlIHByZXBlbmRlZCB0byB0aGUgY29tbWFuZCBsaW5lIG9mIHV0aWxpdHkKLSAgICBwcm9jZXNzZXMgKGZvcndhcmRlciwgZXRjLikuCi0gICAgIiIiCi0gICAgcmV0dXJuICcnCi0KLSAgQGNsYXNzbWV0aG9kCi0gIGRlZiBDb3B5RmlsZXMoY2xzLCBkZXZpY2UpOgotICAgICIiIkNvcGllcyB0b29sLXNwZWNpZmljIGZpbGVzIHRvIHRoZSBkZXZpY2UsIGNyZWF0ZSBkaXJlY3RvcmllcywgZXRjLiIiIgotICAgIHBhc3MKLQotICBkZWYgU2V0dXBFbnZpcm9ubWVudChzZWxmKToKLSAgICAiIiJTZXRzIHVwIHRoZSBzeXN0ZW0gZW52aXJvbm1lbnQgZm9yIGEgdGVzdC4KLQotICAgIFRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHNldCBzeXN0ZW0gcHJvcGVydGllcy4KLSAgICAiIiIKLSAgICBwYXNzCi0KLSAgZGVmIENsZWFuVXBFbnZpcm9ubWVudChzZWxmKToKLSAgICAiIiJDbGVhbnMgdXAgZW52aXJvbm1lbnQuIiIiCi0gICAgcGFzcwotCi0gIGRlZiBHZXRUaW1lb3V0U2NhbGUoc2VsZik6Ci0gICAgIiIiUmV0dXJucyBhIG11bHRpcGxpZXIgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB0byB0aW1lb3V0IHZhbHVlcy4iIiIKLSAgICByZXR1cm4gMS4wCi0KLSAgZGVmIE5lZWRzRGVidWdJbmZvKHNlbGYpOgotICAgICIiIldoZXRoZXIgdGhpcyB0b29sIHJlcXVpcmVzIGRlYnVnIGluZm8uCi0KLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSBpZiB0aGlzIHRvb2wgY2FuIG5vdCB3b3JrIHdpdGggc3RyaXBwZWQgYmluYXJpZXMuCi0gICAgIiIiCi0gICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9iYXNlX2Vycm9yLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvYmFzZV9lcnJvci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI4OTY2MS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9iYXNlX2Vycm9yLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0KLWNsYXNzIEJhc2VFcnJvcihFeGNlcHRpb24pOgotICAiIiJCYXNlIGVycm9yIGZvciBhbGwgdGVzdCBydW5uZXIgZXJyb3JzLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlLCBpc19pbmZyYV9lcnJvcj1GYWxzZSk6Ci0gICAgc3VwZXIoQmFzZUVycm9yLCBzZWxmKS5fX2luaXRfXyhtZXNzYWdlKQotICAgIHNlbGYuX2lzX2luZnJhX2Vycm9yID0gaXNfaW5mcmFfZXJyb3IKLQotICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICByZXR1cm4gKHNlbGYubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlCi0gICAgICAgICAgICBhbmQgc2VsZi5pc19pbmZyYV9lcnJvciA9PSBvdGhlci5pc19pbmZyYV9lcnJvcikKLQotICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKLQotICBAcHJvcGVydHkKLSAgZGVmIGlzX2luZnJhX2Vycm9yKHNlbGYpOgotICAgICIiIlByb3BlcnR5IHRvIGluZGljYXRlIGlmIGVycm9yIHdhcyBjYXVzZWQgYnkgYW4gaW5mcmFzdHJ1Y3R1cmUgaXNzdWUuIiIiCi0gICAgcmV0dXJuIHNlbGYuX2lzX2luZnJhX2Vycm9yCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2NvbnN0YW50cy9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2NvbnN0YW50cy9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBiMjNkZi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9jb25zdGFudHMvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2NvbnN0YW50cy9leGl0X2NvZGVzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvY29uc3RhbnRzL2V4aXRfY29kZXMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZWNhNGEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvY29uc3RhbnRzL2V4aXRfY29kZXMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIkNvbW1vbiBleGl0IGNvZGVzIHVzZWQgYnkgZGV2aWwuIiIiCi0KLUVSUk9SID0gMQotSU5GUkEgPSA4NwotV0FSTklORyA9IDg4CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9kZXZpbF9kZXBlbmRlbmNpZXMuanNvbiBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2RldmlsX2RlcGVuZGVuY2llcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODg0YTM2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2RldmlsX2RlcGVuZGVuY2llcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLXsKLSAgImNvbmZpZ190eXBlIjogIkJhc2VDb25maWciLAotICAiZGVwZW5kZW5jaWVzIjogewotICAgICJhYXB0IjogewotICAgICAgImNsb3VkX3N0b3JhZ2VfYmFzZV9mb2xkZXIiOiAiYmluYXJ5X2RlcGVuZGVuY2llcyIsCi0gICAgICAiY2xvdWRfc3RvcmFnZV9idWNrZXQiOiAiY2hyb21pdW0tdGVsZW1ldHJ5IiwKLSAgICAgICJmaWxlX2luZm8iOiB7Ci0gICAgICAgICJsaW51eDJfeDg2XzY0IjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiMTZiYTMxODAxNDFhMjQ4OWQ3ZWM5OWIzOWZkNmUzNDM0YTlhMzczZiIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiLi4vYmluL2RlcHMvbGludXgyL3g4Nl82NC9iaW4vYWFwdCIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImFkYiI6IHsKLSAgICAgICJjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyIjogImJpbmFyeV9kZXBlbmRlbmNpZXMiLAotICAgICAgImNsb3VkX3N0b3JhZ2VfYnVja2V0IjogImNocm9taXVtLXRlbGVtZXRyeSIsCi0gICAgICAiZmlsZV9pbmZvIjogewotICAgICAgICAibGludXgyX3g4Nl82NCI6IHsKLSAgICAgICAgICAiY2xvdWRfc3RvcmFnZV9oYXNoIjogIjhiZDQzZTM5MzBmNmVlYzY0M2Q1ZGM2NGNhYjllNWJiNGRkZjQ5MDkiLAotICAgICAgICAgICJkb3dubG9hZF9wYXRoIjogIi4uL2Jpbi9kZXBzL2xpbnV4Mi94ODZfNjQvYmluL2FkYiIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImFuZHJvaWRfYnVpbGRfdG9vbHNfbGliYysrIjogewotICAgICAgImNsb3VkX3N0b3JhZ2VfYmFzZV9mb2xkZXIiOiAiYmluYXJ5X2RlcGVuZGVuY2llcyIsCi0gICAgICAiY2xvdWRfc3RvcmFnZV9idWNrZXQiOiAiY2hyb21pdW0tdGVsZW1ldHJ5IiwKLSAgICAgICJmaWxlX2luZm8iOiB7Ci0gICAgICAgICJsaW51eDJfeDg2XzY0IjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiOTFjZGNlMWUzYmQ4MWIyYWMxZmQzODAwMTM4OTZkMGUyY2RiNDBhMCIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiLi4vYmluL2RlcHMvbGludXgyL3g4Nl82NC9saWIvbGliYysrLnNvIgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiY2hyb21pdW1fY29tbWFuZHMiOiB7Ci0gICAgICAiY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlciI6ICJiaW5hcnlfZGVwZW5kZW5jaWVzIiwKLSAgICAgICJjbG91ZF9zdG9yYWdlX2J1Y2tldCI6ICJjaHJvbWl1bS10ZWxlbWV0cnkiLAotICAgICAgImZpbGVfaW5mbyI6IHsKLSAgICAgICAgImxpbnV4Ml94ODZfNjQiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICI0ZTIyZjY0MWU0NzU3MzA5NTEwZThkOWY5MzNmNWFhNTA0NTc0YWI2IiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICIuLi9iaW4vZGVwcy9saW51eDIveDg2XzY0L2xpYi5qYXZhL2Nocm9taXVtX2NvbW1hbmRzLmRleC5qYXIiCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJkZXhkdW1wIjogewotICAgICAgImNsb3VkX3N0b3JhZ2VfYmFzZV9mb2xkZXIiOiAiYmluYXJ5X2RlcGVuZGVuY2llcyIsCi0gICAgICAiY2xvdWRfc3RvcmFnZV9idWNrZXQiOiAiY2hyb21pdW0tdGVsZW1ldHJ5IiwKLSAgICAgICJmaWxlX2luZm8iOiB7Ci0gICAgICAgICJsaW51eDJfeDg2XzY0IjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiYWNmYjEwZjdhODY4YmFmOWJjZjQ0NmEyZDlmOGVkNmI1ZDUyYzNjNiIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiLi4vYmluL2RlcHMvbGludXgyL3g4Nl82NC9iaW4vZGV4ZHVtcCIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImVtcHR5X3N5c3RlbV93ZWJ2aWV3IjogewotICAgICAgImNsb3VkX3N0b3JhZ2VfYmFzZV9mb2xkZXIiOiAiYmluYXJ5X2RlcGVuZGVuY2llcyIsCi0gICAgICAiY2xvdWRfc3RvcmFnZV9idWNrZXQiOiAiY2hyb21pdW0tdGVsZW1ldHJ5IiwKLSAgICAgICJmaWxlX2luZm8iOiB7Ci0gICAgICAgICJhbmRyb2lkX2FybWVhYmktdjdhIjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiMjIwZmYzYmExYTZjM2M4MTg3Nzk5N2UzMjc4NGZmZDAwOGYyOTNhNSIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiLi4vYmluL2RlcHMvYW5kcm9pZC9hcm1lYWJpLXY3YS9hcGtzL0VtcHR5U3lzdGVtV2ViVmlldy5hcGsiCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJmYXN0Ym9vdCI6IHsKLSAgICAgICJjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyIjogImJpbmFyeV9kZXBlbmRlbmNpZXMiLAotICAgICAgImNsb3VkX3N0b3JhZ2VfYnVja2V0IjogImNocm9taXVtLXRlbGVtZXRyeSIsCi0gICAgICAiZmlsZV9pbmZvIjogewotICAgICAgICAibGludXgyX3g4Nl82NCI6IHsKLSAgICAgICAgICAiY2xvdWRfc3RvcmFnZV9oYXNoIjogImRiOTcyODE2NmYxODI4MDBlYjlkMDllOWYwMzZkNTZlMTA1ZTgyMzUiLAotICAgICAgICAgICJkb3dubG9hZF9wYXRoIjogIi4uL2Jpbi9kZXBzL2xpbnV4Mi94ODZfNjQvYmluL2Zhc3Rib290IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiZm9yd2FyZGVyX2RldmljZSI6IHsKLSAgICAgICJjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyIjogImJpbmFyeV9kZXBlbmRlbmNpZXMiLAotICAgICAgImNsb3VkX3N0b3JhZ2VfYnVja2V0IjogImNocm9taXVtLXRlbGVtZXRyeSIsCi0gICAgICAiZmlsZV9pbmZvIjogewotICAgICAgICAiYW5kcm9pZF9hcm02NC12OGEiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICJmMjIyMjY4ZDg0NDI5NzkyNDBkMWIxOGRlMDA5MTFhNDllNTQ4ZGFhIiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICIuLi9iaW4vZGVwcy9hbmRyb2lkL2FybTY0LXY4YS9iaW4vZm9yd2FyZGVyX2RldmljZSIKLSAgICAgICAgfSwKLSAgICAgICAgImFuZHJvaWRfYXJtZWFiaS12N2EiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICJjMTUyNjdiZjAxYzI2ZWIwYWVhNGY2MWM3ODBiYmJhNDYwYzVjOTgxIiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICIuLi9iaW4vZGVwcy9hbmRyb2lkL2FybWVhYmktdjdhL2Jpbi9mb3J3YXJkZXJfZGV2aWNlIgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiZm9yd2FyZGVyX2hvc3QiOiB7Ci0gICAgICAiY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlciI6ICJiaW5hcnlfZGVwZW5kZW5jaWVzIiwKLSAgICAgICJjbG91ZF9zdG9yYWdlX2J1Y2tldCI6ICJjaHJvbWl1bS10ZWxlbWV0cnkiLAotICAgICAgImZpbGVfaW5mbyI6IHsKLSAgICAgICAgImxpbnV4Ml94ODZfNjQiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICI4ZmU2OTk5NGI2NzBmMDI4NDg0ZWVkNDc1ZGJmZmM4MzhjOGE1N2Y3IiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICIuLi9iaW4vZGVwcy9saW51eDIveDg2XzY0L2ZvcndhcmRlcl9ob3N0IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibWQ1c3VtX2RldmljZSI6IHsKLSAgICAgICJjbG91ZF9zdG9yYWdlX2Jhc2VfZm9sZGVyIjogImJpbmFyeV9kZXBlbmRlbmNpZXMiLAotICAgICAgImNsb3VkX3N0b3JhZ2VfYnVja2V0IjogImNocm9taXVtLXRlbGVtZXRyeSIsCi0gICAgICAiZmlsZV9pbmZvIjogewotICAgICAgICAiYW5kcm9pZF9hcm02NC12OGEiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICI0ZTdkMmRlZGQ5YzYzMjFmZGMxNTJiMDY4NjllMDlhM2M1ODE3OTA0IiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICIuLi9iaW4vZGVwcy9hbmRyb2lkL2FybTY0LXY4YS9iaW4vbWQ1c3VtX2RldmljZSIKLSAgICAgICAgfSwKLSAgICAgICAgImFuZHJvaWRfYXJtZWFiaS12N2EiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICIzOWZkOTBhZjBmODgyODIwMmI2ODdmNzEyODM5Mzc1OTE4MWM1ZTJlIiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICIuLi9iaW4vZGVwcy9hbmRyb2lkL2FybWVhYmktdjdhL2Jpbi9tZDVzdW1fZGV2aWNlIgotICAgICAgICB9LAotICAgICAgICAiYW5kcm9pZF94ODYiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICJkNWNmNDJhYjU5ODZhNjljMzFjMDE3N2IwZGY0OTlkNmJmNzA4ZGY2IiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICIuLi9iaW4vZGVwcy9hbmRyb2lkL3g4Ni9iaW4vbWQ1c3VtX2RldmljZSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm1kNXN1bV9ob3N0IjogewotICAgICAgImNsb3VkX3N0b3JhZ2VfYmFzZV9mb2xkZXIiOiAiYmluYXJ5X2RlcGVuZGVuY2llcyIsCi0gICAgICAiY2xvdWRfc3RvcmFnZV9idWNrZXQiOiAiY2hyb21pdW0tdGVsZW1ldHJ5IiwKLSAgICAgICJmaWxlX2luZm8iOiB7Ci0gICAgICAgICJsaW51eDJfeDg2XzY0IjogewotICAgICAgICAgICJjbG91ZF9zdG9yYWdlX2hhc2giOiAiNGRiNWJkNWU5YmVhODg4MGQ4YmYyY2FhNTlkMGVmYjBhY2MxOWY3NCIsCi0gICAgICAgICAgImRvd25sb2FkX3BhdGgiOiAiLi4vYmluL2RlcHMvbGludXgyL3g4Nl82NC9iaW4vbWQ1c3VtX2hvc3QiCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJzcGxpdC1zZWxlY3QiOiB7Ci0gICAgICAiY2xvdWRfc3RvcmFnZV9iYXNlX2ZvbGRlciI6ICJiaW5hcnlfZGVwZW5kZW5jaWVzIiwKLSAgICAgICJjbG91ZF9zdG9yYWdlX2J1Y2tldCI6ICJjaHJvbWl1bS10ZWxlbWV0cnkiLAotICAgICAgImZpbGVfaW5mbyI6IHsKLSAgICAgICAgImxpbnV4Ml94ODZfNjQiOiB7Ci0gICAgICAgICAgImNsb3VkX3N0b3JhZ2VfaGFzaCI6ICJhYmI5NzUzYThkM2VmZWVhNDE0NGUzMjg5MzM5MzE3MjllMDE1NzFjIiwKLSAgICAgICAgICAiZG93bmxvYWRfcGF0aCI6ICIuLi9iaW4vZGVwcy9saW51eDIveDg2XzY0L2Jpbi9zcGxpdC1zZWxlY3QiCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9kZXZpbF9lbnYucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9kZXZpbF9lbnYucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNGZlMWUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvZGV2aWxfZW52LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGNvbnRleHRsaWIKLWltcG9ydCBqc29uCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgcGxhdGZvcm0KLWltcG9ydCBzeXMKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHRocmVhZGluZwotCi1DQVRBUFVMVF9ST09UX1BBVEggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICcuLicpKQotREVQRU5ERU5DWV9NQU5BR0VSX1BBVEggPSBvcy5wYXRoLmpvaW4oCi0gICAgQ0FUQVBVTFRfUk9PVF9QQVRILCAnZGVwZW5kZW5jeV9tYW5hZ2VyJykKLVBZTU9DS19QQVRIID0gb3MucGF0aC5qb2luKAotICAgIENBVEFQVUxUX1JPT1RfUEFUSCwgJ3RoaXJkX3BhcnR5JywgJ21vY2snKQotCi0KLUBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi1kZWYgU3lzUGF0aChwYXRoKToKLSAgc3lzLnBhdGguYXBwZW5kKHBhdGgpCi0gIHlpZWxkCi0gIGlmIHN5cy5wYXRoWy0xXSAhPSBwYXRoOgotICAgIHN5cy5wYXRoLnJlbW92ZShwYXRoKQotICBlbHNlOgotICAgIHN5cy5wYXRoLnBvcCgpCi0KLXdpdGggU3lzUGF0aChERVBFTkRFTkNZX01BTkFHRVJfUEFUSCk6Ci0gIGltcG9ydCBkZXBlbmRlbmN5X21hbmFnZXIgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotCi1fQU5EUk9JRF9CVUlMRF9UT09MUyA9IHsnYWFwdCcsICdkZXhkdW1wJywgJ3NwbGl0LXNlbGVjdCd9Ci0KLV9ERVZJTF9ERUZBVUxUX0NPTkZJRyA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oCi0gICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2RldmlsX2RlcGVuZGVuY2llcy5qc29uJykpCi0KLV9MRUdBQ1lfRU5WSVJPTk1FTlRfVkFSSUFCTEVTID0gewotICAnQURCX1BBVEgnOiB7Ci0gICAgJ2RlcGVuZGVuY3lfbmFtZSc6ICdhZGInLAotICAgICdwbGF0Zm9ybSc6ICdsaW51eDJfeDg2XzY0JywKLSAgfSwKLSAgJ0FORFJPSURfU0RLX1JPT1QnOiB7Ci0gICAgJ2RlcGVuZGVuY3lfbmFtZSc6ICdhbmRyb2lkX3NkaycsCi0gICAgJ3BsYXRmb3JtJzogJ2xpbnV4Ml94ODZfNjQnLAotICB9LAotfQotCi0KLWRlZiBFbXB0eUNvbmZpZygpOgotICByZXR1cm4gewotICAgICdjb25maWdfdHlwZSc6ICdCYXNlQ29uZmlnJywKLSAgICAnZGVwZW5kZW5jaWVzJzoge30KLSAgfQotCi0KLWRlZiBMb2NhbENvbmZpZ0l0ZW0oZGVwZW5kZW5jeV9uYW1lLCBkZXBlbmRlbmN5X3BsYXRmb3JtLCBkZXBlbmRlbmN5X3BhdGgpOgotICBpZiBpc2luc3RhbmNlKGRlcGVuZGVuY3lfcGF0aCwgYmFzZXN0cmluZyk6Ci0gICAgZGVwZW5kZW5jeV9wYXRoID0gW2RlcGVuZGVuY3lfcGF0aF0KLSAgcmV0dXJuIHsKLSAgICBkZXBlbmRlbmN5X25hbWU6IHsKLSAgICAgICdmaWxlX2luZm8nOiB7Ci0gICAgICAgIGRlcGVuZGVuY3lfcGxhdGZvcm06IHsKLSAgICAgICAgICAnbG9jYWxfcGF0aHMnOiBkZXBlbmRlbmN5X3BhdGgKLSAgICAgICAgfSwKLSAgICAgIH0sCi0gICAgfSwKLSAgfQotCi0KLWRlZiBfR2V0RW52aXJvbm1lbnRWYXJpYWJsZUNvbmZpZygpOgotICBlbnZfY29uZmlnID0gRW1wdHlDb25maWcoKQotICBwYXRoX2NvbmZpZyA9ICgKLSAgICAgIChvcy5lbnZpcm9uLmdldChrKSwgdikKLSAgICAgIGZvciBrLCB2IGluIF9MRUdBQ1lfRU5WSVJPTk1FTlRfVkFSSUFCTEVTLml0ZXJpdGVtcygpKQotICBwYXRoX2NvbmZpZyA9ICgocCwgYykgZm9yIHAsIGMgaW4gcGF0aF9jb25maWcgaWYgcCkKLSAgZm9yIHAsIGMgaW4gcGF0aF9jb25maWc6Ci0gICAgZW52X2NvbmZpZ1snZGVwZW5kZW5jaWVzJ10udXBkYXRlKAotICAgICAgICBMb2NhbENvbmZpZ0l0ZW0oY1snZGVwZW5kZW5jeV9uYW1lJ10sIGNbJ3BsYXRmb3JtJ10sIHApKQotICByZXR1cm4gZW52X2NvbmZpZwotCi0KLWNsYXNzIF9FbnZpcm9ubWVudChvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICBzZWxmLl9kbV9pbml0X2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0gICAgc2VsZi5fZG0gPSBOb25lCi0gICAgc2VsZi5fbG9nZ2luZ19pbml0X2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0gICAgc2VsZi5fbG9nZ2luZ19pbml0aWFsaXplZCA9IEZhbHNlCi0KLSAgZGVmIEluaXRpYWxpemUoc2VsZiwgY29uZmlncz1Ob25lLCBjb25maWdfZmlsZXM9Tm9uZSk6Ci0gICAgIiIiSW5pdGlhbGl6ZSBkZXZpbCdzIGVudmlyb25tZW50IGZyb20gY29uZmlndXJhdGlvbiBmaWxlcy4KLQotICAgIFRoaXMgdXNlcyBhbGwgY29uZmlndXJhdGlvbnMgcHJvdmlkZWQgdmlhIHxjb25maWdzfCBhbmQgfGNvbmZpZ19maWxlc3wKLSAgICB0byBkZXRlcm1pbmUgdGhlIGxvY2F0aW9ucyBvZiBkZXZpbCdzIGRlcGVuZGVuY2llcy4gQ29uZmlndXJhdGlvbnMgc2hvdWxkCi0gICAgYWxsIHRha2UgdGhlIGZvcm0gZGVzY3JpYmVkIGJ5IHB5X3V0aWxzLmRlcGVuZGVuY3lfbWFuYWdlci5CYXNlQ29uZmlnLgotICAgIElmIG5vIGNvbmZpZ3VyYXRpb25zIGFyZSBwcm92aWRlZCwgYSBkZWZhdWx0IG9uZSB3aWxsIGJlIHVzZWQgaWYgYXZhaWxhYmxlLgotCi0gICAgQXJnczoKLSAgICAgIGNvbmZpZ3M6IEFuIG9wdGlvbmFsIGxpc3Qgb2YgZGljdCBjb25maWd1cmF0aW9ucy4KLSAgICAgIGNvbmZpZ19maWxlczogQW4gb3B0aW9uYWwgbGlzdCBvZiBmaWxlcyB0byBsb2FkCi0gICAgIiIiCi0KLSAgICAjIE1ha2Ugc3VyZSB3ZSBvbmx5IGluaXRpYWxpemUgc2VsZi5fZG0gb25jZS4KLSAgICB3aXRoIHNlbGYuX2RtX2luaXRfbG9jazoKLSAgICAgIGlmIHNlbGYuX2RtIGlzIE5vbmU6Ci0gICAgICAgIGlmIGNvbmZpZ3MgaXMgTm9uZToKLSAgICAgICAgICBjb25maWdzID0gW10KLQotICAgICAgICBlbnZfY29uZmlnID0gX0dldEVudmlyb25tZW50VmFyaWFibGVDb25maWcoKQotICAgICAgICBpZiBlbnZfY29uZmlnOgotICAgICAgICAgIGNvbmZpZ3MuaW5zZXJ0KDAsIGVudl9jb25maWcpCi0gICAgICAgIHNlbGYuX0luaXRpYWxpemVSZWN1cnNpdmUoCi0gICAgICAgICAgICBjb25maWdzPWNvbmZpZ3MsCi0gICAgICAgICAgICBjb25maWdfZmlsZXM9Y29uZmlnX2ZpbGVzKQotICAgICAgICBhc3NlcnQgc2VsZi5fZG0gaXMgbm90IE5vbmUsICdGYWlsZWQgdG8gY3JlYXRlIGRlcGVuZGVuY3kgbWFuYWdlci4nCi0KLSAgZGVmIF9Jbml0aWFsaXplUmVjdXJzaXZlKHNlbGYsIGNvbmZpZ3M9Tm9uZSwgY29uZmlnX2ZpbGVzPU5vbmUpOgotICAgICMgVGhpcyByZWN1cnNlcyB0aHJvdWdoIGNvbmZpZ3MgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlcyBmb3IgZWFjaCBhbmQKLSAgICAjIHRha2UgYWR2YW50YWdlIG9mIGNvbnRleHQgbWFuYWdlcnMgdG8gYXBwcm9wcmlhdGVseSBjbG9zZSB0aG9zZSBmaWxlcy4KLSAgICAjIFRPRE8oamJ1ZG9yaWNrKTogUmVtb3ZlIHRoaXMgcmVjdXJzaW9uIGlmL3doZW4gZGVwZW5kZW5jeV9tYW5hZ2VyCi0gICAgIyBzdXBwb3J0cyBsb2FkaW5nIGNvbmZpZ3VyYXRpb25zIGRpcmVjdGx5IGZyb20gYSBkaWN0LgotICAgIGlmIGNvbmZpZ3M6Ci0gICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpIGFzIG5leHRfY29uZmlnX2ZpbGU6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICBuZXh0X2NvbmZpZ19maWxlLndyaXRlKGpzb24uZHVtcHMoY29uZmlnc1swXSkpCi0gICAgICAgICAgbmV4dF9jb25maWdfZmlsZS5jbG9zZSgpCi0gICAgICAgICAgc2VsZi5fSW5pdGlhbGl6ZVJlY3Vyc2l2ZSgKLSAgICAgICAgICAgICAgY29uZmlncz1jb25maWdzWzE6XSwKLSAgICAgICAgICAgICAgY29uZmlnX2ZpbGVzPVtuZXh0X2NvbmZpZ19maWxlLm5hbWVdICsgKGNvbmZpZ19maWxlcyBvciBbXSkpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobmV4dF9jb25maWdfZmlsZS5uYW1lKToKLSAgICAgICAgICAgIG9zLnJlbW92ZShuZXh0X2NvbmZpZ19maWxlLm5hbWUpCi0gICAgZWxzZToKLSAgICAgIGNvbmZpZ19maWxlcyA9IGNvbmZpZ19maWxlcyBvciBbXQotICAgICAgaWYgJ0RFVklMX0VOVl9DT05GSUcnIGluIG9zLmVudmlyb246Ci0gICAgICAgIGNvbmZpZ19maWxlcy5hcHBlbmQob3MuZW52aXJvbi5nZXQoJ0RFVklMX0VOVl9DT05GSUcnKSkKLSAgICAgIGNvbmZpZ19maWxlcy5hcHBlbmQoX0RFVklMX0RFRkFVTFRfQ09ORklHKQotCi0gICAgICBzZWxmLl9kbSA9IGRlcGVuZGVuY3lfbWFuYWdlci5EZXBlbmRlbmN5TWFuYWdlcigKLSAgICAgICAgICBbZGVwZW5kZW5jeV9tYW5hZ2VyLkJhc2VDb25maWcoYykgZm9yIGMgaW4gY29uZmlnX2ZpbGVzXSkKLQotICBkZWYgSW5pdGlhbGl6ZUxvZ2dpbmcoc2VsZiwgbG9nX2xldmVsLCBmb3JtYXR0ZXI9Tm9uZSwgaGFuZGxlcj1Ob25lKToKLSAgICBpZiBzZWxmLl9sb2dnaW5nX2luaXRpYWxpemVkOgotICAgICAgcmV0dXJuCi0KLSAgICB3aXRoIHNlbGYuX2xvZ2dpbmdfaW5pdF9sb2NrOgotICAgICAgaWYgc2VsZi5fbG9nZ2luZ19pbml0aWFsaXplZDoKLSAgICAgICAgcmV0dXJuCi0KLSAgICAgIGZvcm1hdHRlciA9IGZvcm1hdHRlciBvciBsb2dnaW5nLkZvcm1hdHRlcigKLSAgICAgICAgICAnJSh0aHJlYWROYW1lKS00cyAgJShtZXNzYWdlKXMnKQotICAgICAgaGFuZGxlciA9IGhhbmRsZXIgb3IgbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCi0gICAgICBoYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCi0KLSAgICAgIGRldmlsX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZpbCcpCi0gICAgICBkZXZpbF9sb2dnZXIuc2V0TGV2ZWwobG9nX2xldmVsKQotICAgICAgZGV2aWxfbG9nZ2VyLnByb3BhZ2F0ZSA9IEZhbHNlCi0gICAgICBkZXZpbF9sb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQotCi0gICAgICBpbXBvcnQgcHlfdXRpbHMuY2xvdWRfc3RvcmFnZQotICAgICAgbG9ja19sb2dnZXIgPSBweV91dGlscy5jbG91ZF9zdG9yYWdlLmxvZ2dlcgotICAgICAgbG9ja19sb2dnZXIuc2V0TGV2ZWwobG9nX2xldmVsKQotICAgICAgbG9ja19sb2dnZXIucHJvcGFnYXRlID0gRmFsc2UKLSAgICAgIGxvY2tfbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKLQotICAgICAgc2VsZi5fbG9nZ2luZ19pbml0aWFsaXplZCA9IFRydWUKLQotICBkZWYgRmV0Y2hQYXRoKHNlbGYsIGRlcGVuZGVuY3ksIGFyY2g9Tm9uZSwgZGV2aWNlPU5vbmUpOgotICAgIGlmIHNlbGYuX2RtIGlzIE5vbmU6Ci0gICAgICBzZWxmLkluaXRpYWxpemUoKQotICAgIGlmIGRlcGVuZGVuY3kgaW4gX0FORFJPSURfQlVJTERfVE9PTFM6Ci0gICAgICBzZWxmLkZldGNoUGF0aCgnYW5kcm9pZF9idWlsZF90b29sc19saWJjKysnLCBhcmNoPWFyY2gsIGRldmljZT1kZXZpY2UpCi0gICAgcmV0dXJuIHNlbGYuX2RtLkZldGNoUGF0aChkZXBlbmRlbmN5LCBHZXRQbGF0Zm9ybShhcmNoLCBkZXZpY2UpKQotCi0gIGRlZiBMb2NhbFBhdGgoc2VsZiwgZGVwZW5kZW5jeSwgYXJjaD1Ob25lLCBkZXZpY2U9Tm9uZSk6Ci0gICAgaWYgc2VsZi5fZG0gaXMgTm9uZToKLSAgICAgIHNlbGYuSW5pdGlhbGl6ZSgpCi0gICAgcmV0dXJuIHNlbGYuX2RtLkxvY2FsUGF0aChkZXBlbmRlbmN5LCBHZXRQbGF0Zm9ybShhcmNoLCBkZXZpY2UpKQotCi0gIGRlZiBQcmVmZXRjaFBhdGhzKHNlbGYsIGRlcGVuZGVuY2llcz1Ob25lLCBhcmNoPU5vbmUsIGRldmljZT1Ob25lKToKLSAgICByZXR1cm4gc2VsZi5fZG0uUHJlZmV0Y2hQYXRocygKLSAgICAgICAgR2V0UGxhdGZvcm0oYXJjaCwgZGV2aWNlKSwgZGVwZW5kZW5jaWVzPWRlcGVuZGVuY2llcykKLQotCi1kZWYgR2V0UGxhdGZvcm0oYXJjaD1Ob25lLCBkZXZpY2U9Tm9uZSk6Ci0gIGlmIGFyY2ggb3IgZGV2aWNlOgotICAgIHJldHVybiAnYW5kcm9pZF8lcycgJSAoYXJjaCBvciBkZXZpY2UucHJvZHVjdF9jcHVfYWJpKQotICByZXR1cm4gJyVzXyVzJyAlIChzeXMucGxhdGZvcm0sIHBsYXRmb3JtLm1hY2hpbmUoKSkKLQotCi1jb25maWcgPSBfRW52aXJvbm1lbnQoKQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9kZXZpbF9lbnZfdGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2RldmlsX2Vudl90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlNzgyMjFhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL2RldmlsX2Vudl90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBzeXMKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLQotX3N5c19wYXRoX2JlZm9yZSA9IGxpc3Qoc3lzLnBhdGgpCi13aXRoIGRldmlsX2Vudi5TeXNQYXRoKGRldmlsX2Vudi5QWU1PQ0tfUEFUSCk6Ci0gIF9zeXNfcGF0aF93aXRoX3B5bW9jayA9IGxpc3Qoc3lzLnBhdGgpCi0gIGltcG9ydCBtb2NrICAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3IKLV9zeXNfcGF0aF9hZnRlciA9IGxpc3Qoc3lzLnBhdGgpCi0KLQotY2xhc3MgRGV2aWxFbnZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdFN5c1BhdGgoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbHMoX3N5c19wYXRoX2JlZm9yZSwgX3N5c19wYXRoX2FmdGVyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICBfc3lzX3BhdGhfYmVmb3JlICsgW2RldmlsX2Vudi5QWU1PQ0tfUEFUSF0sCi0gICAgICAgIF9zeXNfcGF0aF93aXRoX3B5bW9jaykKLQotICBkZWYgdGVzdEdldEVudmlyb25tZW50VmFyaWFibGVDb25maWdfY29uZmlnVHlwZShzZWxmKToKLSAgICB3aXRoIG1vY2sucGF0Y2goJ29zLmVudmlyb24uZ2V0JywKLSAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrKHNpZGVfZWZmZWN0PWxhbWJkYSBfZW52X3ZhcjogTm9uZSkpOgotICAgICAgZW52X2NvbmZpZyA9IGRldmlsX2Vudi5fR2V0RW52aXJvbm1lbnRWYXJpYWJsZUNvbmZpZygpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJ0Jhc2VDb25maWcnLCBlbnZfY29uZmlnLmdldCgnY29uZmlnX3R5cGUnKSkKLQotICBkZWYgdGVzdEdldEVudmlyb25tZW50VmFyaWFibGVDb25maWdfbm9FbnYoc2VsZik6Ci0gICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5lbnZpcm9uLmdldCcsCi0gICAgICAgICAgICAgICAgICAgIG1vY2suTW9jayhzaWRlX2VmZmVjdD1sYW1iZGEgX2Vudl92YXI6IE5vbmUpKToKLSAgICAgIGVudl9jb25maWcgPSBkZXZpbF9lbnYuX0dldEVudmlyb25tZW50VmFyaWFibGVDb25maWcoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHt9LCBlbnZfY29uZmlnLmdldCgnZGVwZW5kZW5jaWVzJykpCi0KLSAgZGVmIHRlc3RHZXRFbnZpcm9ubWVudFZhcmlhYmxlQ29uZmlnX2FkYlBhdGgoc2VsZik6Ci0gICAgZGVmIG1vY2tfZW52aXJvbm1lbnQoZW52X3Zhcik6Ci0gICAgICByZXR1cm4gJy9teS9mYWtlL2FkYi9wYXRoJyBpZiBlbnZfdmFyID09ICdBREJfUEFUSCcgZWxzZSBOb25lCi0KLSAgICB3aXRoIG1vY2sucGF0Y2goJ29zLmVudmlyb24uZ2V0JywKLSAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrKHNpZGVfZWZmZWN0PW1vY2tfZW52aXJvbm1lbnQpKToKLSAgICAgIGVudl9jb25maWcgPSBkZXZpbF9lbnYuX0dldEVudmlyb25tZW50VmFyaWFibGVDb25maWcoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICB7Ci0gICAgICAgICAgJ2FkYic6IHsKLSAgICAgICAgICAgICdmaWxlX2luZm8nOiB7Ci0gICAgICAgICAgICAgICdsaW51eDJfeDg2XzY0JzogewotICAgICAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFsnL215L2Zha2UvYWRiL3BhdGgnXSwKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfSwKLSAgICAgICAgZW52X2NvbmZpZy5nZXQoJ2RlcGVuZGVuY2llcycpKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKLSAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL19faW5pdF9fLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmODQ5ODguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1kZWYgX0pvaW5QYXRoKCpwYXRoX3BhcnRzKToKLSAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oKnBhdGhfcGFydHMpKQotCi0KLWRlZiBfQWRkRGlyVG9QeXRob25QYXRoKCpwYXRoX3BhcnRzKToKLSAgcGF0aCA9IF9Kb2luUGF0aCgqcGF0aF9wYXJ0cykKLSAgaWYgb3MucGF0aC5pc2RpcihwYXRoKSBhbmQgcGF0aCBub3QgaW4gc3lzLnBhdGg6Ci0gICAgIyBTb21lIGNhbGwgc2l0ZXMgdGhhdCB1c2UgVGVsZW1ldHJ5IGFzc3VtZSB0aGF0IHN5cy5wYXRoWzBdIGlzIHRoZQotICAgICMgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHNjcmlwdCwgc28gd2UgYWRkIHRoZXNlIGV4dHJhIHBhdGhzIHRvIHJpZ2h0Ci0gICAgIyBhZnRlciBzeXMucGF0aFswXS4KLSAgICBzeXMucGF0aC5pbnNlcnQoMSwgcGF0aCkKLQotX0NBVEFQVUxUX0RJUiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGgucGFyZGlyLCBvcy5wYXRoLnBhcmRpciwgb3MucGF0aC5wYXJkaXIpCi0KLV9BZGREaXJUb1B5dGhvblBhdGgoX0NBVEFQVUxUX0RJUiwgJ2NvbW1vbicsICdiYXR0b3InKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvYmF0dG9yX2RldmljZV9tYXBwaW5nLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvYmF0dG9yX2RldmljZV9tYXBwaW5nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4Y2FiYjgzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL2JhdHRvcl9kZXZpY2VfbWFwcGluZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDMwOSArMCwwIEBACi0jIS91c3IvYmluL3B5dGhvbgotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0KLScnJwotVGhpcyBzY3JpcHQgcHJvdmlkZXMgdG9vbHMgdG8gbWFwIEJhdHRPcnMgdG8gcGhvbmVzLgotCi1QaG9uZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIGZvbGxvd2luZyBzdHJpbmc6Ci0KLSJQaG9uZSBzZXJpYWwgbnVtYmVyIiAtIFNlcmlhbCBudW1iZXIgb2YgdGhlIHBob25lLiBUaGlzIGNhbiBiZQotb2J0YWluZWQgdmlhICdhZGIgZGV2aWNlcycgb3IgJ3VzYi1kZXZpY2VzJywgYW5kIGlzIG5vdCBleHBlY3RlZAotdG8gY2hhbmdlIGZvciBhIGdpdmVuIHBob25lLgotCi1CYXR0T3JzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBmb2xsb3dpbmcgdHdvIHN0cmluZ3M6Ci0KLSJCYXR0T3Igc2VyaWFsIG51bWJlciIgLSBTZXJpYWwgbnVtYmVyIG9mIHRoZSBCYXR0T3IuIFRoaXMgY2FuIGJlCi1vYnRhaW5lZCB2aWEgJ3VzYi1kZXZpY2VzJywgYW5kIGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UgZm9yCi1hIGdpdmVuIEJhdHRPci4KLQotIkJhdHRPciBwYXRoIiAtIFRoZSBwYXRoIG9mIHRoZSBmb3JtICcvZGV2L3R0eVVTQionIHRoYXQgaXMgdXNlZAotdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgQmF0dE9yICh0aGUgYmF0dG9yX2FnZW50IGJpbmFyeSB0YWtlcwotdGhpcyBCYXR0T3IgcGF0aCBhcyBhIHBhcmFtZXRlcikuIFRoZSBCYXR0T3IgcGF0aCBpcyBmcmVxdWVudGx5Ci1yZWFzc2lnbmVkIGJ5IHRoZSBPUywgbW9zdCBvZnRlbiB3aGVuIHRoZSBkZXZpY2UgaXMgZGlzY29ubmVjdGVkCi1hbmQgdGhlbiByZWNvbm5lY3RlZC4gVGh1cywgdGhlIEJhdHRPciBwYXRoIGNhbm5vdCBiZSBleHBlY3RlZAotdG8gYmUgc3RhYmxlLgotCi1JbiBhIHR5cGljYWwgYXBwbGljYXRpb24sIHRoZSB1c2VyIHdpbGwgcmVxdWlyZSB0aGUgQmF0dE9yIHBhdGgKLWZvciB0aGUgQmF0dE9yIHRoYXQgaXMgcGx1Z2dlZCBpbnRvIGEgZ2l2ZW4gcGhvbmUuIEZvciBpbnN0YW5jZSwKLXRoZSB1c2VyIHdpbGwgYmUgcnVubmluZyB0cmFjaW5nIG9uIGEgcGFydGljdWxhciBwaG9uZSwgYW5kIHdpbGwKLW5lZWQgdG8ga25vdyB3aGljaCBCYXR0T3IgcGF0aCB0byB1c2UgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgQmF0dE9yCi10byBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgcG93ZXIgdHJhY2UuCi0KLUdldHRpbmcgdGhpcyBtYXBwaW5nIHJlcXVpcmVzIHR3byBzdGVwczogKDEpIGRldGVybWluaW5nIHRoZQotbWFwcGluZyBiZXR3ZWVuIHBob25lIHNlcmlhbCBudW1iZXJzIGFuZCBCYXR0T3Igc2VyaWFsIG51bWJlcnMsIGFuZAotKDIpIGdldHRpbmcgdGhlIEJhdHRPciBwYXRoIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBCYXR0T3Igc2VyaWFsCi1udW1iZXIuCi0KLUZvciBzdGVwICgxKSwgd2UgZ2VuZXJhdGUgYSBKU09OIGZpbGUgZ2l2aW5nIHRoaXMgbWFwcGluZy4gVGhpcwotSlNPTiBmaWxlIGNvbnNpc3RzIG9mIGEgbGlzdCBvZiBpdGVtcyBvZiB0aGUgZm9sbG93aW5nIGZvcm06Ci1beydwaG9uZSc6IDxwaG9uZSBzZXJpYWwgMT4sICdiYXR0b3InOiA8YmF0dG9yIHNlcmlhbCAxPn0sCi17J3Bob25lJzogPHBob25lIHNlcmlhbCAyPiwgJ2JhdHRvcic6IDxiYXR0b3Igc2VyaWFsIDI+fSwgLi4uXQotCi1UaGUgZGVmYXVsdCB3YXkgdG8gZ2VuZXJhdGUgdGhpcyBKU09OIGZpbGUgaXMgdXNpbmcgdGhlIGZ1bmN0aW9uCi1HZW5lcmF0ZVNlcmlhbE1hcEZpbGUsIHdoaWNoIGdlbmVyYXRlcyBhIG1hcHBpbmcgYmFzZWQgb24gYXNzdW1pbmcKLXRoYXQgdGhlIHN5c3RlbSBoYXMgdHdvIGlkZW50aWNhbCBVU0IgaHVicyBjb25uZWN0ZWQgdG8gaXQsIGFuZAotdGhlIHBob25lIHBsdWdnZWQgaW50byBwaHlzaWNhbCBwb3J0IG51bWJlciAxIG9uIG9uZSBodWIgY29ycmVzcG9uZHMKLXRvIHRoZSBCYXR0T3IgcGx1Z2dlZCBpbnRvIHBoeXNpY2FsIHBvcnQgbnVtYmVyIDEgb24gdGhlIG90aGVyIGh1YiwKLWFuZCBzaW1pbGFybHkgd2l0aCBwaHlzaWNhbCBwb3J0IG51bWJlcnMgMiwgMywgZXRjLiBUaGlzIGdlbmVyYXRlcwotdGhlIG1hcCBmaWxlIGJhc2VkIG9uIHRoZSBzdHJ1Y3R1cmUgYXQgdGhlIHRpbWUgR2VuZXJhdGVTZXJpYWxNYXBGaWxlIGNhbGxlZC4KLU5vdGUgdGhhdCBhZnRlciB0aGUgbWFwIGZpbGUgaXMgZ2VuZXJhdGVkLCBwb3J0IG51bWJlcnMgYXJlIG5vIGxvbmdlciB1c2VkOwotdGhlIHVzZXIgY291bGQgbW92ZSBhcm91bmQgdGhlIGRldmljZXMgaW4gdGhlIHBvcnRzIHdpdGhvdXQgYWZmZWN0aW5nCi13aGljaCBwaG9uZSBnb2VzIHdpdGggd2hpY2ggQmF0dE9yLiAoVGh1cywgaWYgdGhlIHVzZXIgd2FudGVkIHRvIHVwZGF0ZSB0aGUKLW1hcHBpbmcgdG8gbWF0Y2ggdGhlIG5ldyBwb3J0IGNvbm5lY3Rpb25zLCB0aGUgdXNlciB3b3VsZCBoYXZlIHRvCi1yZS1nZW5lcmF0ZSB0aGlzIGZpbGUuKQotCi1UaGUgc2NyaXB0IHVwZGF0ZV9tYXBwaW5nLnB5IHdpbGwgZG8gdGhpcyB1cGRhdGluZyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi0KLUlmIHRoZSB1c2VyIHdhbnRlZCB0byBzcGVjaWZ5IGEgY3VzdG9tIG1hcHBpbmcsIHRoZSB1c2VyIGNvdWxkIGluc3RlYWQKLWNyZWF0ZSB0aGUgSlNPTiBmaWxlIG1hbnVhbGx5LiAoSW4gdGhpcyBjYXNlLCBodWJzIHdvdWxkIG5vdCBiZSBuZWNlc3NhcnkKLWFuZCB0aGUgcGh5c2ljYWwgcG9ydHMgY29ubmVjdGVkIHdvdWxkIGJlIGlycmVsZXZhbnQuKQotCi1TdGVwICgyKSBpcyBjb25kdWN0ZWQgdGhyb3VnaCB0aGUgZnVuY3Rpb24gR2V0QmF0dE9yUGF0aEZyb21QaG9uZVNlcmlhbCwKLXdoaWNoIHRha2VzIGEgc2VyaWFsIG51bWJlciBtYXBwaW5nIGdlbmVyYXRlZCB2aWEgc3RlcCAoMSkgYW5kIGEgcGhvbmUKLXNlcmlhbCBudW1iZXIsIHRoZW4gZ2V0cyB0aGUgY29ycmVzcG9uZGluZyBCYXR0T3Igc2VyaWFsIG51bWJlciBmcm9tIHRoZQotbWFwIGFuZCBkZXRlcm1pbmVzIGl0cyBCYXR0T3IgcGF0aCAoZS5nLiAvZGV2L3R0eVVTQjApLiBTaW5jZSBCYXR0T3IgcGF0aHMKLWNhbiBjaGFuZ2UgaWYgZGV2aWNlcyBhcmUgY29ubmVjdGVkIGFuZCBkaXNjb25uZWN0ZWQgKGV2ZW4gaWYgY29ubmVjdGVkCi1vciBkaXNjb25uZWN0ZWQgdmlhIHRoZSBzYW1lIHBvcnQpIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB0bwotZGV0ZXJtaW5lIHRoZSBCYXR0T3IgcGF0aCBldmVyeSB0aW1lIGJlZm9yZSBjb25uZWN0aW5nIHRvIHRoZSBCYXR0T3IuCi0KLU5vdGUgdGhhdCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBCYXR0T3IgY29ubmVjdGVkIHRvIHRoZSBzeXN0ZW0sIHRoZW4KLUdldEJhdHRPclBhdGhGcm9tUGhvbmVTZXJpYWwgd2lsbCBhbHdheXMgcmV0dXJuIHRoYXQgQmF0dE9yIGFuZCB3aWxsIGlnbm9yZQotdGhlIG1hcHBpbmcgZmlsZS4gVGh1cywgaWYgdGhlIHVzZXIgbmV2ZXIgaGFzIG1vcmUgdGhhbiBvbmUgQmF0dE9yIGNvbm5lY3RlZAotdG8gdGhlIHN5c3RlbSwgdGhlIHVzZXIgd2lsbCBub3QgbmVlZCB0byBnZW5lcmF0ZSBtYXBwaW5nIGZpbGVzLgotJycnCi0KLQotaW1wb3J0IGpzb24KLWltcG9ydCBjb2xsZWN0aW9ucwotCi1mcm9tIGJhdHRvciBpbXBvcnQgYmF0dG9yX2Vycm9yCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBmaW5kX3VzYl9kZXZpY2VzCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCB1c2JfaHVicwotCi0KLWRlZiBHZXRCYXR0T3JMaXN0KGRldmljZV90cmVlX21hcCk6Ci0gIHJldHVybiBbeCBmb3IgeCBpbiBmaW5kX3VzYl9kZXZpY2VzLkdldFRUWUxpc3QoKQotICAgICAgICAgIGlmIElzQmF0dE9yKHgsIGRldmljZV90cmVlX21hcCldCi0KLQotZGVmIElzQmF0dE9yKHR0eV9zdHJpbmcsIGRldmljZV90cmVlX21hcCk6Ci0gIChidXMsIGRldmljZSkgPSBmaW5kX3VzYl9kZXZpY2VzLkdldEJ1c0RldmljZUZyb21UVFkodHR5X3N0cmluZykKLSAgbm9kZSA9IGRldmljZV90cmVlX21hcFtidXNdLkZpbmREZXZpY2VOdW1iZXIoZGV2aWNlKQotICByZXR1cm4gJzA0MDM6NjAwMScgaW4gbm9kZS5kZXNjCi0KLQotZGVmIEdldEJhdHRPclNlcmlhbE51bWJlcnMoZGV2aWNlX3RyZWVfbWFwKToKLSAgZm9yIHggaW4gZmluZF91c2JfZGV2aWNlcy5HZXRUVFlMaXN0KCk6Ci0gICAgaWYgSXNCYXR0T3IoeCwgZGV2aWNlX3RyZWVfbWFwKToKLSAgICAgIChidXMsIGRldmljZSkgPSBmaW5kX3VzYl9kZXZpY2VzLkdldEJ1c0RldmljZUZyb21UVFkoeCkKLSAgICAgIGRldm5vZGUgPSBkZXZpY2VfdHJlZV9tYXBbYnVzXS5GaW5kRGV2aWNlTnVtYmVyKGRldmljZSkKLSAgICAgIHlpZWxkIGRldm5vZGUuc2VyaWFsCi0KLQotZGVmIFJlYWRTZXJpYWxNYXBGaWxlKGZpbGVuYW1lKToKLSAgIiIiUmVhZHMgSlNPTiBmaWxlIGdpdmluZyBwaG9uZS10by1iYXR0b3Igc2VyaWFsIG51bWJlciBtYXAuCi0KLSAgUGFyc2VzIGEgSlNPTiBmaWxlIGNvbnNpc3Rpbmcgb2YgYSBsaXN0IG9mIGl0ZW1zIG9mIHRoZSBmb2xsb3dpbmcgZm9ybToKLSAgW3sncGhvbmUnOiA8cGhvbmUgc2VyaWFsIDE+LCAnYmF0dG9yJzogPGJhdHRvciBzZXJpYWwgMT59LAotICB7J3Bob25lJzogPHBob25lIHNlcmlhbCAyPiwgJ2JhdHRvcic6IDxiYXR0b3Igc2VyaWFsIDI+fSwgLi4uXQotCi0gIGluZGljYXRpbmcgd2hpY2ggcGhvbmUgc2VyaWFsIG51bWJlcnMgc2hvdWxkIGJlIG1hdGNoZWQgd2l0aAotICB3aGljaCBCYXR0T3Igc2VyaWFsIG51bWJlcnMuIFJldHVybnMgZGljdGlvbmFyeSBvZiB0aGUgZm9ybToKLQotICB7PHBob25lIHNlcmlhbCAxPjogPEJhdHRPciBzZXJpYWwgMT4sCi0gICA8cGhvbmUgc2VyaWFsIDI+OiA8QmF0dE9yIHNlcmlhbCAyPn0KLQotICBBcmdzOgotICAgICAgZmlsZW5hbWU6IE5hbWUgb2YgZmlsZSB0byByZWFkLgotICAiIiIKLSAgcmVzdWx0ID0ge30KLSAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGluZmlsZToKLSAgICBpbl9kaWN0ID0ganNvbi5sb2FkKGluZmlsZSkKLSAgZm9yIHggaW4gaW5fZGljdDoKLSAgICByZXN1bHRbeFsncGhvbmUnXV0gPSB4WydiYXR0b3InXQotICByZXR1cm4gcmVzdWx0Ci0KLWRlZiBXcml0ZVNlcmlhbE1hcEZpbGUoZmlsZW5hbWUsIHNlcmlhbF9tYXApOgotICAiIiJXcml0ZXMgYSBtYXAgb2YgcGhvbmUgc2VyaWFsIG51bWJlcnMgdG8gQmF0dE9yIHNlcmlhbCBudW1iZXJzIHRvIGZpbGUuCi0KLSAgV3JpdGVzIGEgSlNPTiBmaWxlIGNvbnNpc3Rpbmcgb2YgYSBsaXN0IG9mIGl0ZW1zIG9mIHRoZSBmb2xsb3dpbmcgZm9ybToKLSAgW3sncGhvbmUnOiA8cGhvbmUgc2VyaWFsIDE+LCAnYmF0dG9yJzogPGJhdHRvciBzZXJpYWwgMT59LAotICB7J3Bob25lJzogPHBob25lIHNlcmlhbCAyPiwgJ2JhdHRvcic6IDxiYXR0b3Igc2VyaWFsIDI+fSwgLi4uXQotCi0gIGluZGljYXRpbmcgd2hpY2ggcGhvbmUgc2VyaWFsIG51bWJlcnMgc2hvdWxkIGJlIG1hdGNoZWQgd2l0aAotICB3aGljaCBCYXR0T3Igc2VyaWFsIG51bWJlcnMuIE1hcHBpbmcgaXMgYmFzZWQgb24gdGhlIHBoeXNpY2FsIHBvcnQgbnVtYmVycwotICBvZiB0aGUgaHVicyB0aGF0IHRoZSBCYXR0T3JzIGFuZCBwaG9uZXMgYXJlIGNvbm5lY3RlZCB0by4KLQotICBBcmdzOgotICAgICAgZmlsZW5hbWU6IE5hbWUgb2YgZmlsZSB0byB3cml0ZS4KLSAgICAgIHNlcmlhbF9tYXA6IFNlcmlhbCBtYXAge3Bob25lOiBiYXR0b3J9Ci0gICIiIgotICByZXN1bHQgPSBbXQotICBmb3IgKHBob25lLCBiYXR0b3IpIGluIHNlcmlhbF9tYXAuaXRlcml0ZW1zKCk6Ci0gICAgcmVzdWx0LmFwcGVuZCh7J3Bob25lJzogcGhvbmUsICdiYXR0b3InOiBiYXR0b3J9KQotICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgb3V0ZmlsZToKLSAgICBqc29uLmR1bXAocmVzdWx0LCBvdXRmaWxlKQotCi1kZWYgR2VuZXJhdGVTZXJpYWxNYXAoaHViX3R5cGVzPU5vbmUpOgotICAiIiJHZW5lcmF0ZXMgYSBtYXAgb2YgcGhvbmUgc2VyaWFsIG51bWJlcnMgdG8gQmF0dE9yIHNlcmlhbCBudW1iZXJzLgotCi0gIEdlbmVyYXRlcyBhIGRpY3Qgb2Y6Ci0gIHs8cGhvbmUgc2VyaWFsIDE+OiA8YmF0dG9yIHNlcmlhbCAxPiwKLSAgIDxwaG9uZSBzZXJpYWwgMj46IDxiYXR0b3Igc2VyaWFsIDI+fQotICBpbmRpY2F0aW5nIHdoaWNoIHBob25lIHNlcmlhbCBudW1iZXJzIHNob3VsZCBiZSBtYXRjaGVkIHdpdGgKLSAgd2hpY2ggQmF0dE9yIHNlcmlhbCBudW1iZXJzLiBNYXBwaW5nIGlzIGJhc2VkIG9uIHRoZSBwaHlzaWNhbCBwb3J0IG51bWJlcnMKLSAgb2YgdGhlIGh1YnMgdGhhdCB0aGUgQmF0dE9ycyBhbmQgcGhvbmVzIGFyZSBjb25uZWN0ZWQgdG8uCi0KLSAgQXJnczoKLSAgICAgIGh1Yl90eXBlczogTGlzdCBvZiBodWIgdHlwZXMgdG8gY2hlY2sgZm9yLiBJZiBub3Qgc3BlY2lmaWVkLCBjaGVja3MKLSAgICAgIGZvciBhbGwgZGVmaW5lZCBodWIgdHlwZXMuIChzZWUgdXNiX2h1YnMucHkgZm9yIGRldGFpbHMpCi0gICIiIgotICBpZiBodWJfdHlwZXM6Ci0gICAgaHViX3R5cGVzID0gW3VzYl9odWJzLkdldEh1YlR5cGUoeCkgZm9yIHggaW4gaHViX3R5cGVzXQotICBlbHNlOgotICAgIGh1Yl90eXBlcyA9IHVzYl9odWJzLkFMTF9IVUJTCi0KLSAgZGV2dHJlZSA9IGZpbmRfdXNiX2RldmljZXMuR2V0QnVzTnVtYmVyVG9EZXZpY2VUcmVlTWFwKCkKLQotICAjIExpc3Qgb2Ygc2VyaWFsIG51bWJlcnMgaW4gdGhlIHN5c3RlbSB0aGF0IHJlcHJlc2VudCBCYXR0T3JzLgotICBiYXR0b3Jfc2VyaWFscyA9IGxpc3QoR2V0QmF0dE9yU2VyaWFsTnVtYmVycyhkZXZ0cmVlKSkKLQotICAjIElmIHRoZXJlJ3Mgb25seSBvbmUgQmF0dE9yIGluIHRoZSBzeXN0ZW0sIHRoZW4gYSBzZXJpYWwgbnVtYmVyIG1hCi0gICMgaXMgbm90IG5lY2Vzc2FyeS4KLSAgaWYgbGVuKGJhdHRvcl9zZXJpYWxzKSA9PSAxOgotICAgIHJldHVybiB7fQotCi0gICMgTGlzdCBvZiBkaWN0aW9uYXJpZXMsIG9uZSBmb3IgZWFjaCBodWIsIHRoYXQgbWFwcyB0aGUgcGh5c2ljYWwKLSAgIyBwb3J0IG51bWJlciB0byB0aGUgc2VyaWFsIG51bWJlciBvZiB0aGF0IGh1Yi4gRm9yIGluc3RhbmNlLCBpbiBhIDIKLSAgIyBodWIgc3lzdGVtLCB0aGlzIGNvdWxkIHJldHVybiBbezE6J2FiJywgMjonY2QnfSwgezE6J2prbCcsIDI6J3h5eid9XQotICAjIHdoZXJlICdhYicgYW5kICdjZCcgYXJlIHRoZSBwaG9uZSBzZXJpYWwgbnVtYmVycyBhbmQgJ2prbCcgYW5kICd4eXonCi0gICMgYXJlIHRoZSBCYXR0T3Igc2VyaWFsIG51bWJlcnMuCi0gIHBvcnRfdG9fc2VyaWFsID0gZmluZF91c2JfZGV2aWNlcy5HZXRBbGxQaHlzaWNhbFBvcnRUb1NlcmlhbE1hcHMoCi0gICAgICBodWJfdHlwZXMsIGRldmljZV90cmVlX21hcD1kZXZ0cmVlKQotCi0gIGNsYXNzIHNlcmlhbHMob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICBzZWxmLnBob25lID0gTm9uZQotICAgICAgc2VsZi5iYXR0b3IgPSBOb25lCi0KLSAgIyBNYXAgb2Yge3BoeXNpY2FsIHBvcnQgbnVtYmVyOiBbcGhvbmUgc2VyaWFsICMsIEJhdHRPciBzZXJpYWwgI10uIFRoaXMKLSAgIyBtYXAgaXMgcG9wdWxhdGVkIGJ5IGV4ZWN1dGluZyB0aGUgY29kZSBiZWxvdy4gRm9yIGluc3RhbmNlLCBpbiB0aGUgYWJvdmUKLSAgIyBleGFtcGxlLCBhZnRlciB0aGUgY29kZSBiZWxvdyBpcyBleGVjdXRlZCwgcG9ydF90b19kZXZpY2VzIHdvdWxkIGVxdWFsCi0gICMgezE6IFsnYWInLCAnamtsJ10sIDI6IFsnY2QnLCAneHl6J119Ci0gIHBvcnRfdG9fZGV2aWNlcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KHNlcmlhbHMpCi0gIGZvciBodWIgaW4gcG9ydF90b19zZXJpYWw6Ci0gICAgZm9yIChwb3J0LCBzZXJpYWwpIGluIGh1Yi5pdGVyaXRlbXMoKToKLSAgICAgIGlmIHNlcmlhbCBpbiBiYXR0b3Jfc2VyaWFsczoKLSAgICAgICAgaWYgcG9ydF90b19kZXZpY2VzW3BvcnRdLmJhdHRvciBpcyBub3QgTm9uZToKLSAgICAgICAgICByYWlzZSBiYXR0b3JfZXJyb3IuQmF0dE9yRXJyb3IoJ011bHRpcGxlIEJhdHRPcnMgb24gc2FtZSBwb3J0IG51bWJlcicpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcG9ydF90b19kZXZpY2VzW3BvcnRdLmJhdHRvciA9IHNlcmlhbAotICAgICAgZWxzZToKLSAgICAgICAgaWYgcG9ydF90b19kZXZpY2VzW3BvcnRdLnBob25lIGlzIG5vdCBOb25lOgotICAgICAgICAgIHJhaXNlIGJhdHRvcl9lcnJvci5CYXR0T3JFcnJvcignTXVsdGlwbGUgcGhvbmVzIG9uIHNhbWUgcG9ydCBudW1iZXInKQotICAgICAgICBlbHNlOgotICAgICAgICAgIHBvcnRfdG9fZGV2aWNlc1twb3J0XS5waG9uZSA9IHNlcmlhbAotCi0gICMgVHVybiB0aGUgcG9ydF90b19kZXZpY2VzIG1hcCBpbnRvIGEgbWFwIG9mIHRoZSBmb3JtCi0gICMge3Bob25lIHNlcmlhbCBudW1iZXI6IEJhdHRPciBzZXJpYWwgbnVtYmVyfS4KLSAgcmVzdWx0ID0ge30KLSAgZm9yIHBhaXIgaW4gcG9ydF90b19kZXZpY2VzLnZhbHVlcygpOgotICAgIGlmIHBhaXIucGhvbmUgaXMgTm9uZToKLSAgICAgIGNvbnRpbnVlCi0gICAgaWYgcGFpci5iYXR0b3IgaXMgTm9uZToKLSAgICAgIHJhaXNlIGJhdHRvcl9lcnJvci5CYXR0T3JFcnJvcigKLSAgICAgICAgICAnUGhvbmUgZGV0ZWN0ZWQgd2l0aCBubyBjb3JyZXNwb25kaW5nIEJhdHRPcicpCi0gICAgcmVzdWx0W3BhaXIucGhvbmVdID0gcGFpci5iYXR0b3IKLSAgcmV0dXJuIHJlc3VsdAotCi1kZWYgR2VuZXJhdGVTZXJpYWxNYXBGaWxlKGZpbGVuYW1lLCBodWJfdHlwZXM9Tm9uZSk6Ci0gICIiIkdlbmVyYXRlcyBhIHNlcmlhbCBtYXAgZmlsZSBhbmQgd3JpdGVzIGl0LiIiIgotICBXcml0ZVNlcmlhbE1hcEZpbGUoZmlsZW5hbWUsIEdlbmVyYXRlU2VyaWFsTWFwKGh1Yl90eXBlcykpCi0KLWRlZiBfUGhvbmVUb1BhdGhNYXAoc2VyaWFsLCBzZXJpYWxfbWFwLCBkZXZ0cmVlKToKLSAgIiIiTWFwcyBwaG9uZSBzZXJpYWwgbnVtYmVyIHRvIFRUWSBwYXRoLCBhc3N1bWluZyBzZXJpYWwgbWFwIGlzIHByb3ZpZGVkLiIiIgotICB0cnk6Ci0gICAgYmF0dG9yX3NlcmlhbCA9IHNlcmlhbF9tYXBbc2VyaWFsXQotICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgcmFpc2UgYmF0dG9yX2Vycm9yLkJhdHRPckVycm9yKCdTZXJpYWwgbnVtYmVyIG5vdCBmb3VuZCBpbiBzZXJpYWwgbWFwLicpCi0gIGZvciB0cmVlIGluIGRldnRyZWUudmFsdWVzKCk6Ci0gICAgZm9yIG5vZGUgaW4gdHJlZS5BbGxOb2RlcygpOgotICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBmaW5kX3VzYl9kZXZpY2VzLlVTQkRldmljZU5vZGUpOgotICAgICAgICBpZiBub2RlLnNlcmlhbCA9PSBiYXR0b3Jfc2VyaWFsOgotICAgICAgICAgIGJ1c19kZXZpY2VfdG9fdHR5ID0gZmluZF91c2JfZGV2aWNlcy5HZXRCdXNEZXZpY2VUb1RUWU1hcCgpCi0gICAgICAgICAgYnVzX2RldmljZSA9IChub2RlLmJ1c19udW0sIG5vZGUuZGV2aWNlX251bSkKLSAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gYnVzX2RldmljZV90b190dHlbYnVzX2RldmljZV0KLSAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBiYXR0b3JfZXJyb3IuQmF0dE9yRXJyb3IoCi0gICAgICAgICAgICAgICAgJ0RldmljZSB3aXRoIGdpdmVuIHNlcmlhbCBudW1iZXIgbm90IGEgQmF0dE9yICcKLSAgICAgICAgICAgICAgICAnKGRvZXMgbm90IGhhdmUgVFRZIHBhdGgpJykKLQotCi1kZWYgR2V0QmF0dE9yUGF0aEZyb21QaG9uZVNlcmlhbChzZXJpYWwsIHNlcmlhbF9tYXA9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbF9tYXBfZmlsZT1Ob25lKToKLSAgIiIiR2V0cyB0aGUgVFRZIHBhdGggKGUuZy4gJy9kZXYvdHR5VVNCMCcpICB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBCYXR0T3IuCi0KLSAgKDEpIElmIHNlcmlhbF9tYXAgaXMgZ2l2ZW4sIGl0IGlzIHRyZWF0ZWQgYXMgYSBkaWN0aW9uYXJ5IG1hcHBpbmcKLSAgcGhvbmUgc2VyaWFsIG51bWJlcnMgdG8gQmF0dE9yIHNlcmlhbCBudW1iZXJzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZQotICBUVFkgcGF0aCBmb3IgdGhlIGdpdmVuIEJhdHRPciBzZXJpYWwgbnVtYmVyLgotCi0gICgyKSBJZiBzZXJpYWxfbWFwX2ZpbGUgaXMgZ2l2ZW4sIGl0IGlzIHRyZWF0ZWQgYXMgdGhlIG5hbWUgb2YgYQotICBwaG9uZS10by1CYXR0T3IgbWFwcGluZyBmaWxlIChnZW5lcmF0ZWQgd2l0aCBHZW5lcmF0ZVNlcmlhbE1hcEZpbGUpCi0gIGFuZCB0aGlzIHdpbGwgYmUgbG9hZGVkIGFuZCB1c2VkIGFzIHRoZSBkaWN0IHRvIG1hcCBwb3J0IG51bWJlcnMgdG8KLSAgQmF0dE9yIHNlcmlhbCBudW1iZXJzLgotCi0gIFlvdSBjYW4gb25seSBnaXZlIG9uZSBvZiBzZXJpYWxfbWFwIGFuZCBzZXJpYWxfbWFwX2ZpbGUuCi0KLSAgQXJnczoKLSAgICBzZXJpYWw6IFNlcmlhbCBudW1iZXIgb2YgcGhvbmUgY29ubmVjdGVkIG9uIHRoZSBzYW1lIHBoeXNpY2FsIHBvcnQgdGhhdAotICAgIHRoZSBCYXR0T3IgaXMgY29ubmVjdGVkIHRvLgotICAgIHNlcmlhbF9tYXA6IE1hcCBvZiBwaG9uZSBzZXJpYWwgbnVtYmVycyB0byBCYXR0T3Igc2VyaWFsIG51bWJlcnMsIGdpdmVuCi0gICAgYXMgYSBkaWN0aW9uYXJ5LgotICAgIHNlcmlhbF9tYXBfZmlsZTogTWFwIG9mIHBob25lIHNlcmlhbCBudW1iZXJzIHRvIEJhdHRPciBzZXJpYWwgbnVtYmVycywKLSAgICBnaXZlbiBhcyBhIGZpbGUuCi0gICAgaHViX3R5cGVzOiBMaXN0IG9mIGh1YiB0eXBlcyB0byBjaGVjayBmb3IuIFVzZWQgb25seSBpZiBzZXJpYWxfbWFwX2ZpbGUKLSAgICBpcyBOb25lLgotCi0gIFJldHVybnM6Ci0gICAgRGV2aWNlIHN0cmluZyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggZGV2aWNlLgotCi0gIFJhaXNlczoKLSAgICBWYWx1ZUVycm9yOiBJZiBzZXJpYWwgbnVtYmVyIGlzIG5vdCBnaXZlbi4KLSAgICBCYXR0T3JFcnJvcjogSWYgQmF0dE9yIG5vdCBmb3VuZCBvciB1bmV4cGVjdGVkIFVTQiB0b3BvbG9neS4KLSAgIiIiCi0gICMgSWYgdGhlcmUncyBvbmx5IG9uZSBCYXR0T3IgY29ubmVjdGVkIHRvIHRoZSBzeXN0ZW0sIGp1c3QgdXNlIHRoYXQgb25lLgotICAjIFRoaXMgYWxsb3dzIGZvciB1c2Ugb24sIGUuZy4sIGEgZGV2ZWxvcGVyJ3Mgd29ya3N0YXRpb24gd2l0aCBubyBodWJzLgotICBkZXZ0cmVlID0gZmluZF91c2JfZGV2aWNlcy5HZXRCdXNOdW1iZXJUb0RldmljZVRyZWVNYXAoKQotICBhbGxfYmF0dG9ycyA9IEdldEJhdHRPckxpc3QoZGV2dHJlZSkKLSAgaWYgbGVuKGFsbF9iYXR0b3JzKSA9PSAxOgotICAgIHJldHVybiAnL2Rldi8nICsgYWxsX2JhdHRvcnNbMF0KLQotICBpZiBub3Qgc2VyaWFsOgotICAgIHJhaXNlIGJhdHRvcl9lcnJvci5CYXR0T3JFcnJvcigKLSAgICAgICAgJ1R3byBvciBtb3JlIEJhdHRPcnMgY29ubmVjdGVkLCBubyBzZXJpYWwgcHJvdmlkZWQnKQotCi0gIGlmIHNlcmlhbF9tYXAgYW5kIHNlcmlhbF9tYXBfZmlsZToKLSAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3Qgc3BlY2lmeSBib3RoIHNlcmlhbF9tYXAgYW5kIHNlcmlhbF9tYXBfZmlsZScpCi0KLSAgaWYgc2VyaWFsX21hcF9maWxlOgotICAgIHNlcmlhbF9tYXAgPSBSZWFkU2VyaWFsTWFwRmlsZShzZXJpYWxfbWFwX2ZpbGUpCi0KLSAgdHR5X3N0cmluZyA9IF9QaG9uZVRvUGF0aE1hcChzZXJpYWwsIHNlcmlhbF9tYXAsIGRldnRyZWUpCi0KLSAgaWYgbm90IHR0eV9zdHJpbmc6Ci0gICAgcmFpc2UgYmF0dG9yX2Vycm9yLkJhdHRPckVycm9yKAotICAgICAgICAnTm8gZGV2aWNlIHdpdGggZ2l2ZW4gc2VyaWFsIG51bWJlciBkZXRlY3RlZC4nKQotCi0gIGlmIElzQmF0dE9yKHR0eV9zdHJpbmcsIGRldnRyZWUpOgotICAgIHJldHVybiAnL2Rldi8nICsgdHR5X3N0cmluZwotICBlbHNlOgotICAgIHJhaXNlIGJhdHRvcl9lcnJvci5CYXR0T3JFcnJvcigKLSAgICAgICAgJ0RldmljZSB3aXRoIGdpdmVuIHNlcmlhbCBudW1iZXIgaXMgbm90IGEgQmF0dE9yLicpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICMgTWFpbiBmdW5jdGlvbiBmb3IgdGVzdGluZyBwdXJwb3NlcwotICBwcmludCBHZW5lcmF0ZVNlcmlhbE1hcCgpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9jbWRfaGVscGVyLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvY21kX2hlbHBlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ3N2M3MC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9jbWRfaGVscGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDczICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIkEgd3JhcHBlciBmb3Igc3VicHJvY2VzcyB0byBtYWtlIGNhbGxpbmcgc2hlbGwgY29tbWFuZHMgZWFzaWVyLiIiIgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgcGlwZXMKLWltcG9ydCBzZWxlY3QKLWltcG9ydCBzaWduYWwKLWltcG9ydCBzdHJpbmcKLWltcG9ydCBTdHJpbmdJTwotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi0KLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLV9TYWZlU2hlbGxDaGFycyA9IGZyb3plbnNldChzdHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyAnQCVfLSs9OiwuLycpCi0KLQotZGVmIFNpbmdsZVF1b3RlKHMpOgotICAiIiJSZXR1cm4gYW4gc2hlbGwtZXNjYXBlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgdXNpbmcgc2luZ2xlIHF1b3Rlcy4KLQotICBSZWxpYWJseSBxdW90ZSBhIHN0cmluZyB3aGljaCBtYXkgY29udGFpbiB1bnNhZmUgY2hhcmFjdGVycyAoZS5nLiBzcGFjZSwKLSAgcXVvdGUsIG9yIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycyBzdWNoIGFzICckJykuCi0KLSAgVGhlIHJldHVybmVkIHZhbHVlIGNhbiBiZSB1c2VkIGluIGEgc2hlbGwgY29tbWFuZCBsaW5lIGFzIG9uZSB0b2tlbiB0aGF0IGdldHMKLSAgdG8gYmUgaW50ZXJwcmV0ZWQgbGl0ZXJhbGx5LgotCi0gIEFyZ3M6Ci0gICAgczogVGhlIHN0cmluZyB0byBxdW90ZS4KLQotICBSZXR1cm46Ci0gICAgVGhlIHN0cmluZyBxdW90ZWQgdXNpbmcgc2luZ2xlIHF1b3Rlcy4KLSAgIiIiCi0gIHJldHVybiBwaXBlcy5xdW90ZShzKQotCi0KLWRlZiBEb3VibGVRdW90ZShzKToKLSAgIiIiUmV0dXJuIGFuIHNoZWxsLWVzY2FwZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHVzaW5nIGRvdWJsZSBxdW90ZXMuCi0KLSAgUmVsaWFibHkgcXVvdGUgYSBzdHJpbmcgd2hpY2ggbWF5IGNvbnRhaW4gdW5zYWZlIGNoYXJhY3RlcnMgKGUuZy4gc3BhY2UKLSAgb3IgcXVvdGUgY2hhcmFjdGVycyksIHdoaWxlIHJldGFpbmluZyBzb21lIHNoZWxsIGZlYXR1cmVzIHN1Y2ggYXMgdmFyaWFibGUKLSAgaW50ZXJwb2xhdGlvbi4KLQotICBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlIHVzZWQgaW4gYSBzaGVsbCBjb21tYW5kIGxpbmUgYXMgb25lIHRva2VuIHRoYXQgZ2V0cwotICB0byBiZSBmdXJ0aGVyIGludGVycHJldGVkIGJ5IHRoZSBzaGVsbC4KLQotICBUaGUgc2V0IG9mIGNoYXJhY3RlcnMgdGhhdCByZXRhaW4gdGhlaXIgc3BlY2lhbCBtZWFuaW5nIG1heSBkZXBlbmQgb24gdGhlCi0gIHNoZWxsIGltcGxlbWVudGF0aW9uLiBUaGlzIHNldCB1c3VhbGx5IGluY2x1ZGVzOiAnJCcsICdgJywgJ1wnLCAnIScsICcqJywKLSAgYW5kICdAJy4KLQotICBBcmdzOgotICAgIHM6IFRoZSBzdHJpbmcgdG8gcXVvdGUuCi0KLSAgUmV0dXJuOgotICAgIFRoZSBzdHJpbmcgcXVvdGVkIHVzaW5nIGRvdWJsZSBxdW90ZXMuCi0gICIiIgotICBpZiBub3QgczoKLSAgICByZXR1cm4gJyIiJwotICBlbGlmIGFsbChjIGluIF9TYWZlU2hlbGxDaGFycyBmb3IgYyBpbiBzKToKLSAgICByZXR1cm4gcwotICBlbHNlOgotICAgIHJldHVybiAnIicgKyBzLnJlcGxhY2UoJyInLCAnXFwiJykgKyAnIicKLQotCi1kZWYgU2hyaW5rVG9TbmlwcGV0KGNtZF9wYXJ0cywgdmFyX25hbWUsIHZhcl92YWx1ZSk6Ci0gICIiIkNvbnN0cnVjdHMgYSBzaGVsbCBzbmlwcGV0IGZvciBhIGNvbW1hbmQgdXNpbmcgYSB2YXJpYWJsZSB0byBzaHJpbmsgaXQuCi0KLSAgVGFrZXMgaW50byBhY2NvdW50IGFsbCBxdW90aW5nIHRoYXQgbmVlZHMgdG8gaGFwcGVuLgotCi0gIEFyZ3M6Ci0gICAgY21kX3BhcnRzOiBBIGxpc3Qgb2YgY29tbWFuZCBhcmd1bWVudHMuCi0gICAgdmFyX25hbWU6IFRoZSB2YXJpYWJsZSB0aGF0IGhvbGRzIHZhcl92YWx1ZS4KLSAgICB2YXJfdmFsdWU6IFRoZSBzdHJpbmcgdG8gcmVwbGFjZSBpbiBjbWRfcGFydHMgd2l0aCAkdmFyX25hbWUKLQotICBSZXR1cm5zOgotICAgIEEgc2hlbGwgc25pcHBldCB0aGF0IGRvZXMgbm90IGluY2x1ZGUgc2V0dGluZyB0aGUgdmFyaWFibGUuCi0gICIiIgotICBkZWYgc2hyaW5rKHZhbHVlKToKLSAgICBwYXJ0cyA9ICh4IGFuZCBTaW5nbGVRdW90ZSh4KSBmb3IgeCBpbiB2YWx1ZS5zcGxpdCh2YXJfdmFsdWUpKQotICAgIHdpdGhfc3Vic3RpdHV0aW9ucyA9ICgnIiQlcyInICUgdmFyX25hbWUpLmpvaW4ocGFydHMpCi0gICAgcmV0dXJuIHdpdGhfc3Vic3RpdHV0aW9ucyBvciAiJyciCi0KLSAgcmV0dXJuICcgJy5qb2luKHNocmluayhwYXJ0KSBmb3IgcGFydCBpbiBjbWRfcGFydHMpCi0KLQotZGVmIFBvcGVuKGFyZ3MsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSwgc2hlbGw9Tm9uZSwgY3dkPU5vbmUsIGVudj1Ob25lKToKLSAgIyBwcmVleGVjX2ZuIGlzbid0IHN1cHBvcnRlZCBvbiB3aW5kb3dzLgotICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICBjbG9zZV9mZHMgPSAoc3Rkb3V0IGlzIE5vbmUgYW5kIHN0ZGVyciBpcyBOb25lKQotICAgIHByZWV4ZWNfZm4gPSBOb25lCi0gIGVsc2U6Ci0gICAgY2xvc2VfZmRzID0gVHJ1ZQotICAgIHByZWV4ZWNfZm4gPSBsYW1iZGE6IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1BJUEUsIHNpZ25hbC5TSUdfREZMKQotCi0gIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKAotICAgICAgYXJncz1hcmdzLCBjd2Q9Y3dkLCBzdGRvdXQ9c3Rkb3V0LCBzdGRlcnI9c3RkZXJyLAotICAgICAgc2hlbGw9c2hlbGwsIGNsb3NlX2Zkcz1jbG9zZV9mZHMsIGVudj1lbnYsIHByZWV4ZWNfZm49cHJlZXhlY19mbikKLQotCi1kZWYgQ2FsbChhcmdzLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsIHNoZWxsPU5vbmUsIGN3ZD1Ob25lLCBlbnY9Tm9uZSk6Ci0gIHBpcGUgPSBQb3BlbihhcmdzLCBzdGRvdXQ9c3Rkb3V0LCBzdGRlcnI9c3RkZXJyLCBzaGVsbD1zaGVsbCwgY3dkPWN3ZCwKLSAgICAgICAgICAgICAgIGVudj1lbnYpCi0gIHBpcGUuY29tbXVuaWNhdGUoKQotICByZXR1cm4gcGlwZS53YWl0KCkKLQotCi1kZWYgUnVuQ21kKGFyZ3MsIGN3ZD1Ob25lKToKLSAgIiIiT3BlbnMgYSBzdWJwcm9jZXNzIHRvIGV4ZWN1dGUgYSBwcm9ncmFtIGFuZCByZXR1cm5zIGl0cyByZXR1cm4gdmFsdWUuCi0KLSAgQXJnczoKLSAgICBhcmdzOiBBIHN0cmluZyBvciBhIHNlcXVlbmNlIG9mIHByb2dyYW0gYXJndW1lbnRzLiBUaGUgcHJvZ3JhbSB0byBleGVjdXRlIGlzCi0gICAgICB0aGUgc3RyaW5nIG9yIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcmdzIHNlcXVlbmNlLgotICAgIGN3ZDogSWYgbm90IE5vbmUsIHRoZSBzdWJwcm9jZXNzJ3MgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSBjaGFuZ2VkIHRvCi0gICAgICB8Y3dkfCBiZWZvcmUgaXQncyBleGVjdXRlZC4KLQotICBSZXR1cm5zOgotICAgIFJldHVybiBjb2RlIGZyb20gdGhlIGNvbW1hbmQgZXhlY3V0aW9uLgotICAiIiIKLSAgbG9nZ2VyLmluZm8oc3RyKGFyZ3MpICsgJyAnICsgKGN3ZCBvciAnJykpCi0gIHJldHVybiBDYWxsKGFyZ3MsIGN3ZD1jd2QpCi0KLQotZGVmIEdldENtZE91dHB1dChhcmdzLCBjd2Q9Tm9uZSwgc2hlbGw9RmFsc2UsIGVudj1Ob25lKToKLSAgIiIiT3BlbiBhIHN1YnByb2Nlc3MgdG8gZXhlY3V0ZSBhIHByb2dyYW0gYW5kIHJldHVybnMgaXRzIG91dHB1dC4KLQotICBBcmdzOgotICAgIGFyZ3M6IEEgc3RyaW5nIG9yIGEgc2VxdWVuY2Ugb2YgcHJvZ3JhbSBhcmd1bWVudHMuIFRoZSBwcm9ncmFtIHRvIGV4ZWN1dGUgaXMKLSAgICAgIHRoZSBzdHJpbmcgb3IgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFyZ3Mgc2VxdWVuY2UuCi0gICAgY3dkOiBJZiBub3QgTm9uZSwgdGhlIHN1YnByb2Nlc3MncyBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIGNoYW5nZWQgdG8KLSAgICAgIHxjd2R8IGJlZm9yZSBpdCdzIGV4ZWN1dGVkLgotICAgIHNoZWxsOiBXaGV0aGVyIHRvIGV4ZWN1dGUgYXJncyBhcyBhIHNoZWxsIGNvbW1hbmQuCi0gICAgZW52OiBJZiBub3QgTm9uZSwgYSBtYXBwaW5nIHRoYXQgZGVmaW5lcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZQotICAgICAgc3VicHJvY2Vzcy4KLQotICBSZXR1cm5zOgotICAgIENhcHR1cmVzIGFuZCByZXR1cm5zIHRoZSBjb21tYW5kJ3Mgc3Rkb3V0LgotICAgIFByaW50cyB0aGUgY29tbWFuZCdzIHN0ZGVyciB0byBsb2dnZXIgKHdoaWNoIGRlZmF1bHRzIHRvIHN0ZG91dCkuCi0gICIiIgotICAoXywgb3V0cHV0KSA9IEdldENtZFN0YXR1c0FuZE91dHB1dChhcmdzLCBjd2QsIHNoZWxsLCBlbnYpCi0gIHJldHVybiBvdXRwdXQKLQotCi1kZWYgX1ZhbGlkYXRlQW5kTG9nQ29tbWFuZChhcmdzLCBjd2QsIHNoZWxsKToKLSAgaWYgaXNpbnN0YW5jZShhcmdzLCBiYXNlc3RyaW5nKToKLSAgICBpZiBub3Qgc2hlbGw6Ci0gICAgICByYWlzZSBFeGNlcHRpb24oJ3N0cmluZyBhcmdzIG11c3QgYmUgcnVuIHdpdGggc2hlbGw9VHJ1ZScpCi0gIGVsc2U6Ci0gICAgaWYgc2hlbGw6Ci0gICAgICByYWlzZSBFeGNlcHRpb24oJ2FycmF5IGFyZ3MgbXVzdCBiZSBydW4gd2l0aCBzaGVsbD1GYWxzZScpCi0gICAgYXJncyA9ICcgJy5qb2luKFNpbmdsZVF1b3RlKGMpIGZvciBjIGluIGFyZ3MpCi0gIGlmIGN3ZCBpcyBOb25lOgotICAgIGN3ZCA9ICcnCi0gIGVsc2U6Ci0gICAgY3dkID0gJzonICsgY3dkCi0gIGxvZ2dlci5pbmZvKCdbaG9zdF0lcz4gJXMnLCBjd2QsIGFyZ3MpCi0gIHJldHVybiBhcmdzCi0KLQotZGVmIEdldENtZFN0YXR1c0FuZE91dHB1dChhcmdzLCBjd2Q9Tm9uZSwgc2hlbGw9RmFsc2UsIGVudj1Ob25lKToKLSAgIiIiRXhlY3V0ZXMgYSBzdWJwcm9jZXNzIGFuZCByZXR1cm5zIGl0cyBleGl0IGNvZGUgYW5kIG91dHB1dC4KLQotICBBcmdzOgotICAgIGFyZ3M6IEEgc3RyaW5nIG9yIGEgc2VxdWVuY2Ugb2YgcHJvZ3JhbSBhcmd1bWVudHMuIFRoZSBwcm9ncmFtIHRvIGV4ZWN1dGUgaXMKLSAgICAgIHRoZSBzdHJpbmcgb3IgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFyZ3Mgc2VxdWVuY2UuCi0gICAgY3dkOiBJZiBub3QgTm9uZSwgdGhlIHN1YnByb2Nlc3MncyBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIGNoYW5nZWQgdG8KLSAgICAgIHxjd2R8IGJlZm9yZSBpdCdzIGV4ZWN1dGVkLgotICAgIHNoZWxsOiBXaGV0aGVyIHRvIGV4ZWN1dGUgYXJncyBhcyBhIHNoZWxsIGNvbW1hbmQuIE11c3QgYmUgVHJ1ZSBpZiBhcmdzCi0gICAgICBpcyBhIHN0cmluZyBhbmQgRmFsc2UgaWYgYXJncyBpcyBhIHNlcXVlbmNlLgotICAgIGVudjogSWYgbm90IE5vbmUsIGEgbWFwcGluZyB0aGF0IGRlZmluZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUKLSAgICAgIHN1YnByb2Nlc3MuCi0KLSAgUmV0dXJuczoKLSAgICBUaGUgMi10dXBsZSAoZXhpdCBjb2RlLCBzdGRvdXQpLgotICAiIiIKLSAgc3RhdHVzLCBzdGRvdXQsIHN0ZGVyciA9IEdldENtZFN0YXR1c091dHB1dEFuZEVycm9yKAotICAgICAgYXJncywgY3dkPWN3ZCwgc2hlbGw9c2hlbGwsIGVudj1lbnYpCi0KLSAgaWYgc3RkZXJyOgotICAgIGxvZ2dlci5jcml0aWNhbCgnU1RERVJSOiAlcycsIHN0ZGVycikKLSAgbG9nZ2VyLmRlYnVnKCdTVERPVVQ6ICVzJXMnLCBzdGRvdXRbOjQwOTZdLnJzdHJpcCgpLAotICAgICAgICAgICAgICAgJzx0cnVuY2F0ZWQ+JyBpZiBsZW4oc3Rkb3V0KSA+IDQwOTYgZWxzZSAnJykKLSAgcmV0dXJuIChzdGF0dXMsIHN0ZG91dCkKLQotCi1kZWYgR2V0Q21kU3RhdHVzT3V0cHV0QW5kRXJyb3IoYXJncywgY3dkPU5vbmUsIHNoZWxsPUZhbHNlLCBlbnY9Tm9uZSk6Ci0gICIiIkV4ZWN1dGVzIGEgc3VicHJvY2VzcyBhbmQgcmV0dXJucyBpdHMgZXhpdCBjb2RlLCBvdXRwdXQsIGFuZCBlcnJvcnMuCi0KLSAgQXJnczoKLSAgICBhcmdzOiBBIHN0cmluZyBvciBhIHNlcXVlbmNlIG9mIHByb2dyYW0gYXJndW1lbnRzLiBUaGUgcHJvZ3JhbSB0byBleGVjdXRlIGlzCi0gICAgICB0aGUgc3RyaW5nIG9yIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcmdzIHNlcXVlbmNlLgotICAgIGN3ZDogSWYgbm90IE5vbmUsIHRoZSBzdWJwcm9jZXNzJ3MgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSBjaGFuZ2VkIHRvCi0gICAgICB8Y3dkfCBiZWZvcmUgaXQncyBleGVjdXRlZC4KLSAgICBzaGVsbDogV2hldGhlciB0byBleGVjdXRlIGFyZ3MgYXMgYSBzaGVsbCBjb21tYW5kLiBNdXN0IGJlIFRydWUgaWYgYXJncwotICAgICAgaXMgYSBzdHJpbmcgYW5kIEZhbHNlIGlmIGFyZ3MgaXMgYSBzZXF1ZW5jZS4KLSAgICBlbnY6IElmIG5vdCBOb25lLCBhIG1hcHBpbmcgdGhhdCBkZWZpbmVzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlCi0gICAgICBzdWJwcm9jZXNzLgotCi0gIFJldHVybnM6Ci0gICAgVGhlIDMtdHVwbGUgKGV4aXQgY29kZSwgc3Rkb3V0LCBzdGRlcnIpLgotICAiIiIKLSAgX1ZhbGlkYXRlQW5kTG9nQ29tbWFuZChhcmdzLCBjd2QsIHNoZWxsKQotICBwaXBlID0gUG9wZW4oYXJncywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgIHNoZWxsPXNoZWxsLCBjd2Q9Y3dkLCBlbnY9ZW52KQotICBzdGRvdXQsIHN0ZGVyciA9IHBpcGUuY29tbXVuaWNhdGUoKQotICByZXR1cm4gKHBpcGUucmV0dXJuY29kZSwgc3Rkb3V0LCBzdGRlcnIpCi0KLQotY2xhc3MgVGltZW91dEVycm9yKEV4Y2VwdGlvbik6Ci0gICIiIk1vZHVsZS1zcGVjaWZpYyB0aW1lb3V0IGV4Y2VwdGlvbi4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0PU5vbmUpOgotICAgIHN1cGVyKFRpbWVvdXRFcnJvciwgc2VsZikuX19pbml0X18oKQotICAgIHNlbGYuX291dHB1dCA9IG91dHB1dAotCi0gIEBwcm9wZXJ0eQotICBkZWYgb3V0cHV0KHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9vdXRwdXQKLQotCi1kZWYgX0l0ZXJQcm9jZXNzU3Rkb3V0RmNudGwoCi0gICAgcHJvY2VzcywgaXRlcl90aW1lb3V0PU5vbmUsIHRpbWVvdXQ9Tm9uZSwgYnVmZmVyX3NpemU9NDA5NiwKLSAgICBwb2xsX2ludGVydmFsPTEpOgotICAiIiJBbiBmY250bC1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBfSXRlclByb2Nlc3NTdGRvdXQuIiIiCi0gIGltcG9ydCBmY250bAotICB0cnk6Ci0gICAgIyBFbmFibGUgbm9uLWJsb2NraW5nIHJlYWRzIGZyb20gdGhlIGNoaWxkJ3Mgc3Rkb3V0LgotICAgIGNoaWxkX2ZkID0gcHJvY2Vzcy5zdGRvdXQuZmlsZW5vKCkKLSAgICBmbCA9IGZjbnRsLmZjbnRsKGNoaWxkX2ZkLCBmY250bC5GX0dFVEZMKQotICAgIGZjbnRsLmZjbnRsKGNoaWxkX2ZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCi0KLSAgICBlbmRfdGltZSA9ICh0aW1lLnRpbWUoKSArIHRpbWVvdXQpIGlmIHRpbWVvdXQgZWxzZSBOb25lCi0gICAgaXRlcl9lbmRfdGltZSA9ICh0aW1lLnRpbWUoKSArIGl0ZXJfdGltZW91dCkgaWYgaXRlcl90aW1lb3V0IGVsc2UgTm9uZQotCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgIGlmIGVuZF90aW1lIGFuZCB0aW1lLnRpbWUoKSA+IGVuZF90aW1lOgotICAgICAgICByYWlzZSBUaW1lb3V0RXJyb3IoKQotICAgICAgaWYgaXRlcl9lbmRfdGltZSBhbmQgdGltZS50aW1lKCkgPiBpdGVyX2VuZF90aW1lOgotICAgICAgICB5aWVsZCBOb25lCi0gICAgICAgIGl0ZXJfZW5kX3RpbWUgPSB0aW1lLnRpbWUoKSArIGl0ZXJfdGltZW91dAotCi0gICAgICBpZiBpdGVyX2VuZF90aW1lOgotICAgICAgICBpdGVyX2F3YXJlX3BvbGxfaW50ZXJ2YWwgPSBtaW4oCi0gICAgICAgICAgICBwb2xsX2ludGVydmFsLAotICAgICAgICAgICAgbWF4KDAsIGl0ZXJfZW5kX3RpbWUgLSB0aW1lLnRpbWUoKSkpCi0gICAgICBlbHNlOgotICAgICAgICBpdGVyX2F3YXJlX3BvbGxfaW50ZXJ2YWwgPSBwb2xsX2ludGVydmFsCi0KLSAgICAgIHJlYWRfZmRzLCBfLCBfID0gc2VsZWN0LnNlbGVjdCgKLSAgICAgICAgICBbY2hpbGRfZmRdLCBbXSwgW10sIGl0ZXJfYXdhcmVfcG9sbF9pbnRlcnZhbCkKLSAgICAgIGlmIGNoaWxkX2ZkIGluIHJlYWRfZmRzOgotICAgICAgICBkYXRhID0gb3MucmVhZChjaGlsZF9mZCwgYnVmZmVyX3NpemUpCi0gICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgIGJyZWFrCi0gICAgICAgIHlpZWxkIGRhdGEKLQotICAgICAgaWYgcHJvY2Vzcy5wb2xsKCkgaXMgbm90IE5vbmU6Ci0gICAgICAgICMgSWYgcHJvY2VzcyBpcyBjbG9zZWQsIGtlZXAgY2hlY2tpbmcgZm9yIG91dHB1dCBkYXRhIChiZWNhdXNlIG9mIHRpbWluZwotICAgICAgICAjIGlzc3VlcykuCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgcmVhZF9mZHMsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KAotICAgICAgICAgICAgICBbY2hpbGRfZmRdLCBbXSwgW10sIGl0ZXJfYXdhcmVfcG9sbF9pbnRlcnZhbCkKLSAgICAgICAgICBpZiBjaGlsZF9mZCBpbiByZWFkX2ZkczoKLSAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKGNoaWxkX2ZkLCBidWZmZXJfc2l6ZSkKLSAgICAgICAgICAgIGlmIGRhdGE6Ci0gICAgICAgICAgICAgIHlpZWxkIGRhdGEKLSAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICBicmVhawotICAgICAgICBicmVhawotICBmaW5hbGx5OgotICAgIHRyeToKLSAgICAgIGlmIHByb2Nlc3MucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvY2VzcyBkb2Vzbid0IHN0aWNrIGFyb3VuZCBpZiB3ZSBmYWlsIHdpdGggYW4KLSAgICAgICAgIyBleGNlcHRpb24uCi0gICAgICAgIHByb2Nlc3Mua2lsbCgpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICBwYXNzCi0gICAgcHJvY2Vzcy53YWl0KCkKLQotCi1kZWYgX0l0ZXJQcm9jZXNzU3Rkb3V0UXVldWUoCi0gICAgcHJvY2VzcywgaXRlcl90aW1lb3V0PU5vbmUsIHRpbWVvdXQ9Tm9uZSwgYnVmZmVyX3NpemU9NDA5NiwKLSAgICBwb2xsX2ludGVydmFsPTEpOgotICAiIiJBIFF1ZXVlLlF1ZXVlLWJhc2VkIGltcGxlbWVudGF0aW9uIG9mIF9JdGVyUHJvY2Vzc1N0ZG91dC4KLQotICBUT0RPKGpidWRvcmljayk6IEV2YWx1YXRlIHdoZXRoZXIgdGhpcyBpcyBhIHN1aXRhYmxlIHJlcGxhY2VtZW50IGZvcgotICBfSXRlclByb2Nlc3NTdGRvdXRGY250bCBvbiBhbGwgcGxhdGZvcm1zLgotICAiIiIKLSAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci0gIGltcG9ydCBRdWV1ZQotICBpbXBvcnQgdGhyZWFkaW5nCi0KLSAgc3Rkb3V0X3F1ZXVlID0gUXVldWUuUXVldWUoKQotCi0gIGRlZiByZWFkX3Byb2Nlc3Nfc3Rkb3V0KCk6Ci0gICAgIyBUT0RPKGpidWRvcmljayk6IFBpY2sgYW4gYXBwcm9wcmlhdGUgcmVhZCBzaXplIGhlcmUuCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgIHRyeToKLSAgICAgICAgb3V0cHV0X2NodW5rID0gb3MucmVhZChwcm9jZXNzLnN0ZG91dC5maWxlbm8oKSwgYnVmZmVyX3NpemUpCi0gICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgYnJlYWsKLSAgICAgIHN0ZG91dF9xdWV1ZS5wdXQob3V0cHV0X2NodW5rLCBUcnVlKQotICAgICAgaWYgbm90IG91dHB1dF9jaHVuayBhbmQgcHJvY2Vzcy5wb2xsKCkgaXMgbm90IE5vbmU6Ci0gICAgICAgIGJyZWFrCi0KLSAgcmVhZGVyX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJlYWRfcHJvY2Vzc19zdGRvdXQpCi0gIHJlYWRlcl90aHJlYWQuc3RhcnQoKQotCi0gIGVuZF90aW1lID0gKHRpbWUudGltZSgpICsgdGltZW91dCkgaWYgdGltZW91dCBlbHNlIE5vbmUKLQotICB0cnk6Ci0gICAgd2hpbGUgVHJ1ZToKLSAgICAgIGlmIGVuZF90aW1lIGFuZCB0aW1lLnRpbWUoKSA+IGVuZF90aW1lOgotICAgICAgICByYWlzZSBUaW1lb3V0RXJyb3IoKQotICAgICAgdHJ5OgotICAgICAgICBzID0gc3Rkb3V0X3F1ZXVlLmdldChUcnVlLCBpdGVyX3RpbWVvdXQpCi0gICAgICAgIGlmIG5vdCBzOgotICAgICAgICAgIGJyZWFrCi0gICAgICAgIHlpZWxkIHMKLSAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAgICAgICAgeWllbGQgTm9uZQotICBmaW5hbGx5OgotICAgIHRyeToKLSAgICAgIGlmIHByb2Nlc3MucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvY2VzcyBkb2Vzbid0IHN0aWNrIGFyb3VuZCBpZiB3ZSBmYWlsIHdpdGggYW4KLSAgICAgICAgIyBleGNlcHRpb24uCi0gICAgICAgIHByb2Nlc3Mua2lsbCgpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICBwYXNzCi0gICAgcHJvY2Vzcy53YWl0KCkKLSAgICByZWFkZXJfdGhyZWFkLmpvaW4oKQotCi0KLV9JdGVyUHJvY2Vzc1N0ZG91dCA9ICgKLSAgICBfSXRlclByb2Nlc3NTdGRvdXRRdWV1ZQotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInCi0gICAgZWxzZSBfSXRlclByb2Nlc3NTdGRvdXRGY250bCkKLSIiIkl0ZXJhdGUgb3ZlciBhIHByb2Nlc3MncyBzdGRvdXQuCi0KLVRoaXMgaXMgaW50ZW50aW9uYWxseSBub3QgcHVibGljLgotCi1BcmdzOgotICBwcm9jZXNzOiBUaGUgcHJvY2VzcyBpbiBxdWVzdGlvbi4KLSAgaXRlcl90aW1lb3V0OiBBbiBvcHRpb25hbCBsZW5ndGggb2YgdGltZSwgaW4gc2Vjb25kcywgdG8gd2FpdCBpbgotICAgIGJldHdlZW4gZWFjaCBpdGVyYXRpb24uIElmIG5vIG91dHB1dCBpcyByZWNlaXZlZCBpbiB0aGUgZ2l2ZW4KLSAgICB0aW1lLCB0aGlzIGdlbmVyYXRvciB3aWxsIHlpZWxkIE5vbmUuCi0gIHRpbWVvdXQ6IEFuIG9wdGlvbmFsIGxlbmd0aCBvZiB0aW1lLCBpbiBzZWNvbmRzLCBkdXJpbmcgd2hpY2gKLSAgICB0aGUgcHJvY2VzcyBtdXN0IGZpbmlzaC4gSWYgaXQgZmFpbHMgdG8gZG8gc28sIGEgVGltZW91dEVycm9yCi0gICAgd2lsbCBiZSByYWlzZWQuCi0gIGJ1ZmZlcl9zaXplOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCAoYW5kIHRodXMgeWllbGQpIGF0IG9uY2UuCi0gIHBvbGxfaW50ZXJ2YWw6IFRoZSBsZW5ndGggb2YgdGltZSB0byB3YWl0IGluIGNhbGxzIHRvIGBzZWxlY3Quc2VsZWN0YC4KLSAgICBJZiBpdGVyX3RpbWVvdXQgaXMgc2V0LCB0aGUgcmVtYWluaW5nIGxlbmd0aCBvZiB0aW1lIGluIHRoZSBpdGVyYXRpb24KLSAgICBtYXkgdGFrZSBwcmVjZWRlbmNlLgotUmFpc2VzOgotICBUaW1lb3V0RXJyb3I6IGlmIHRpbWVvdXQgaXMgc2V0IGFuZCB0aGUgcHJvY2VzcyBkb2VzIG5vdCBjb21wbGV0ZS4KLVlpZWxkczoKLSAgYmFzZXN0cmluZ3Mgb2YgZGF0YSBvciBOb25lLgotIiIiCi0KLQotZGVmIEdldENtZFN0YXR1c0FuZE91dHB1dFdpdGhUaW1lb3V0KGFyZ3MsIHRpbWVvdXQsIGN3ZD1Ob25lLCBzaGVsbD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dmaWxlPU5vbmUsIGVudj1Ob25lKToKLSAgIiIiRXhlY3V0ZXMgYSBzdWJwcm9jZXNzIHdpdGggYSB0aW1lb3V0LgotCi0gIEFyZ3M6Ci0gICAgYXJnczogTGlzdCBvZiBhcmd1bWVudHMgdG8gdGhlIHByb2dyYW0sIHRoZSBwcm9ncmFtIHRvIGV4ZWN1dGUgaXMgdGhlIGZpcnN0Ci0gICAgICBlbGVtZW50LgotICAgIHRpbWVvdXQ6IHRoZSB0aW1lb3V0IGluIHNlY29uZHMgb3IgTm9uZSB0byB3YWl0IGZvcmV2ZXIuCi0gICAgY3dkOiBJZiBub3QgTm9uZSwgdGhlIHN1YnByb2Nlc3MncyBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIGNoYW5nZWQgdG8KLSAgICAgIHxjd2R8IGJlZm9yZSBpdCdzIGV4ZWN1dGVkLgotICAgIHNoZWxsOiBXaGV0aGVyIHRvIGV4ZWN1dGUgYXJncyBhcyBhIHNoZWxsIGNvbW1hbmQuIE11c3QgYmUgVHJ1ZSBpZiBhcmdzCi0gICAgICBpcyBhIHN0cmluZyBhbmQgRmFsc2UgaWYgYXJncyBpcyBhIHNlcXVlbmNlLgotICAgIGxvZ2ZpbGU6IE9wdGlvbmFsIGZpbGUtbGlrZSBvYmplY3QgdGhhdCB3aWxsIHJlY2VpdmUgb3V0cHV0IGZyb20gdGhlCi0gICAgICBjb21tYW5kIGFzIGl0IGlzIHJ1bm5pbmcuCi0gICAgZW52OiBJZiBub3QgTm9uZSwgYSBtYXBwaW5nIHRoYXQgZGVmaW5lcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZQotICAgICAgc3VicHJvY2Vzcy4KLQotICBSZXR1cm5zOgotICAgIFRoZSAyLXR1cGxlIChleGl0IGNvZGUsIG91dHB1dCkuCi0gIFJhaXNlczoKLSAgICBUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgIiIiCi0gIF9WYWxpZGF0ZUFuZExvZ0NvbW1hbmQoYXJncywgY3dkLCBzaGVsbCkKLSAgb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICBwcm9jZXNzID0gUG9wZW4oYXJncywgY3dkPWN3ZCwgc2hlbGw9c2hlbGwsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIGVudj1lbnYpCi0gIHRyeToKLSAgICBmb3IgZGF0YSBpbiBfSXRlclByb2Nlc3NTdGRvdXQocHJvY2VzcywgdGltZW91dD10aW1lb3V0KToKLSAgICAgIGlmIGxvZ2ZpbGU6Ci0gICAgICAgIGxvZ2ZpbGUud3JpdGUoZGF0YSkKLSAgICAgIG91dHB1dC53cml0ZShkYXRhKQotICBleGNlcHQgVGltZW91dEVycm9yOgotICAgIHJhaXNlIFRpbWVvdXRFcnJvcihvdXRwdXQuZ2V0dmFsdWUoKSkKLQotICBzdHJfb3V0cHV0ID0gb3V0cHV0LmdldHZhbHVlKCkKLSAgbG9nZ2VyLmRlYnVnKCdTVERPVVQrU1RERVJSOiAlcyVzJywgc3RyX291dHB1dFs6NDA5Nl0ucnN0cmlwKCksCi0gICAgICAgICAgICAgICAnPHRydW5jYXRlZD4nIGlmIGxlbihzdHJfb3V0cHV0KSA+IDQwOTYgZWxzZSAnJykKLSAgcmV0dXJuIHByb2Nlc3MucmV0dXJuY29kZSwgc3RyX291dHB1dAotCi0KLWRlZiBJdGVyQ21kT3V0cHV0TGluZXMoYXJncywgaXRlcl90aW1lb3V0PU5vbmUsIHRpbWVvdXQ9Tm9uZSwgY3dkPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPUZhbHNlLCBlbnY9Tm9uZSwgY2hlY2tfc3RhdHVzPVRydWUpOgotICAiIiJFeGVjdXRlcyBhIHN1YnByb2Nlc3MgYW5kIGNvbnRpbnVvdXNseSB5aWVsZHMgbGluZXMgZnJvbSBpdHMgb3V0cHV0LgotCi0gIEFyZ3M6Ci0gICAgYXJnczogTGlzdCBvZiBhcmd1bWVudHMgdG8gdGhlIHByb2dyYW0sIHRoZSBwcm9ncmFtIHRvIGV4ZWN1dGUgaXMgdGhlIGZpcnN0Ci0gICAgICBlbGVtZW50LgotICAgIGl0ZXJfdGltZW91dDogVGltZW91dCBmb3IgZWFjaCBpdGVyYXRpb24sIGluIHNlY29uZHMuCi0gICAgdGltZW91dDogVGltZW91dCBmb3IgdGhlIGVudGlyZSBjb21tYW5kLCBpbiBzZWNvbmRzLgotICAgIGN3ZDogSWYgbm90IE5vbmUsIHRoZSBzdWJwcm9jZXNzJ3MgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSBjaGFuZ2VkIHRvCi0gICAgICB8Y3dkfCBiZWZvcmUgaXQncyBleGVjdXRlZC4KLSAgICBzaGVsbDogV2hldGhlciB0byBleGVjdXRlIGFyZ3MgYXMgYSBzaGVsbCBjb21tYW5kLiBNdXN0IGJlIFRydWUgaWYgYXJncwotICAgICAgaXMgYSBzdHJpbmcgYW5kIEZhbHNlIGlmIGFyZ3MgaXMgYSBzZXF1ZW5jZS4KLSAgICBlbnY6IElmIG5vdCBOb25lLCBhIG1hcHBpbmcgdGhhdCBkZWZpbmVzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlCi0gICAgICBzdWJwcm9jZXNzLgotICAgIGNoZWNrX3N0YXR1czogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBjaGVjayB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlCi0gICAgICBwcm9jZXNzIGFmdGVyIGFsbCBvdXRwdXQgaGFzIGJlZW4gcmVhZC4KLSAgWWllbGRzOgotICAgIFRoZSBvdXRwdXQgb2YgdGhlIHN1YnByb2Nlc3MsIGxpbmUgYnkgbGluZS4KLQotICBSYWlzZXM6Ci0gICAgQ2FsbGVkUHJvY2Vzc0Vycm9yIGlmIGNoZWNrX3N0YXR1cyBpcyBUcnVlIGFuZCB0aGUgcHJvY2VzcyBleGl0ZWQgd2l0aCBhCi0gICAgICBub24temVybyBleGl0IHN0YXR1cy4KLSAgIiIiCi0gIGNtZCA9IF9WYWxpZGF0ZUFuZExvZ0NvbW1hbmQoYXJncywgY3dkLCBzaGVsbCkKLSAgcHJvY2VzcyA9IFBvcGVuKGFyZ3MsIGN3ZD1jd2QsIHNoZWxsPXNoZWxsLCBlbnY9ZW52LAotICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQotICByZXR1cm4gX0l0ZXJDbWRPdXRwdXRMaW5lcygKLSAgICAgIHByb2Nlc3MsIGNtZCwgaXRlcl90aW1lb3V0PWl0ZXJfdGltZW91dCwgdGltZW91dD10aW1lb3V0LAotICAgICAgY2hlY2tfc3RhdHVzPWNoZWNrX3N0YXR1cykKLQotZGVmIF9JdGVyQ21kT3V0cHV0TGluZXMocHJvY2VzcywgY21kLCBpdGVyX3RpbWVvdXQ9Tm9uZSwgdGltZW91dD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfc3RhdHVzPVRydWUpOgotICBidWZmZXJfb3V0cHV0ID0gJycKLQotICBpdGVyX2VuZCA9IE5vbmUKLSAgY3VyX2l0ZXJfdGltZW91dCA9IE5vbmUKLSAgaWYgaXRlcl90aW1lb3V0OgotICAgIGl0ZXJfZW5kID0gdGltZS50aW1lKCkgKyBpdGVyX3RpbWVvdXQKLSAgICBjdXJfaXRlcl90aW1lb3V0ID0gaXRlcl90aW1lb3V0Ci0KLSAgZm9yIGRhdGEgaW4gX0l0ZXJQcm9jZXNzU3Rkb3V0KHByb2Nlc3MsIGl0ZXJfdGltZW91dD1jdXJfaXRlcl90aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD10aW1lb3V0KToKLSAgICBpZiBpdGVyX3RpbWVvdXQ6Ci0gICAgICAjIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIGhhcyB0aW1lZCBvdXQuCi0gICAgICBjdXJfaXRlcl90aW1lb3V0ID0gaXRlcl9lbmQgLSB0aW1lLnRpbWUoKQotICAgICAgaWYgZGF0YSBpcyBOb25lIG9yIGN1cl9pdGVyX3RpbWVvdXQgPCAwOgotICAgICAgICB5aWVsZCBOb25lCi0gICAgICAgIGl0ZXJfZW5kID0gdGltZS50aW1lKCkgKyBpdGVyX3RpbWVvdXQKLSAgICAgICAgY29udGludWUKLSAgICBlbHNlOgotICAgICAgYXNzZXJ0IGRhdGEgaXMgbm90IE5vbmUsICgKLSAgICAgICAgICAnSXRlcmF0aW9uIHJlY2VpdmVkIG5vIGRhdGEgZGVzcGl0ZSBubyBpdGVyX3RpbWVvdXQgYmVpbmcgc2V0LiAnCi0gICAgICAgICAgJ2NtZDogJXMnICUgY21kKQotCi0gICAgIyBDb25zdHJ1Y3QgbGluZXMgdG8geWllbGQgZnJvbSByYXcgZGF0YS4KLSAgICBidWZmZXJfb3V0cHV0ICs9IGRhdGEKLSAgICBoYXNfaW5jb21wbGV0ZV9saW5lID0gYnVmZmVyX291dHB1dFstMV0gbm90IGluICdcclxuJwotICAgIGxpbmVzID0gYnVmZmVyX291dHB1dC5zcGxpdGxpbmVzKCkKLSAgICBidWZmZXJfb3V0cHV0ID0gbGluZXMucG9wKCkgaWYgaGFzX2luY29tcGxldGVfbGluZSBlbHNlICcnCi0gICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICB5aWVsZCBsaW5lCi0gICAgICBpZiBpdGVyX3RpbWVvdXQ6Ci0gICAgICAgIGl0ZXJfZW5kID0gdGltZS50aW1lKCkgKyBpdGVyX3RpbWVvdXQKLQotICBpZiBidWZmZXJfb3V0cHV0OgotICAgIHlpZWxkIGJ1ZmZlcl9vdXRwdXQKLSAgaWYgY2hlY2tfc3RhdHVzIGFuZCBwcm9jZXNzLnJldHVybmNvZGU6Ci0gICAgcmFpc2Ugc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IocHJvY2Vzcy5yZXR1cm5jb2RlLCBjbWQpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9jbWRfaGVscGVyX3Rlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9jbWRfaGVscGVyX3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDZhOGU4ODEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvY21kX2hlbHBlcl90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJUZXN0cyBmb3IgdGhlIGNtZF9oZWxwZXIgbW9kdWxlLiIiIgotCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGltZQotCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGNtZF9oZWxwZXIKLQotd2l0aCBkZXZpbF9lbnYuU3lzUGF0aChkZXZpbF9lbnYuUFlNT0NLX1BBVEgpOgotICBpbXBvcnQgbW9jayAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCi0KLQotY2xhc3MgQ21kSGVscGVyU2luZ2xlUXVvdGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdFNpbmdsZVF1b3RlX2Jhc2ljKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdoZWxsbycsCi0gICAgICAgICAgICAgICAgICAgICAgY21kX2hlbHBlci5TaW5nbGVRdW90ZSgnaGVsbG8nKSkKLQotICBkZWYgdGVzdFNpbmdsZVF1b3RlX3dpdGhTcGFjZXMoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbHMoIidoZWxsbyB3b3JsZCciLAotICAgICAgICAgICAgICAgICAgICAgIGNtZF9oZWxwZXIuU2luZ2xlUXVvdGUoJ2hlbGxvIHdvcmxkJykpCi0KLSAgZGVmIHRlc3RTaW5nbGVRdW90ZV93aXRoVW5zYWZlQ2hhcnMoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbHMoIiIiJ2hlbGxvJyInIic7IHJtIC1yZiAvJyIiIiwKLSAgICAgICAgICAgICAgICAgICAgICBjbWRfaGVscGVyLlNpbmdsZVF1b3RlKCJoZWxsbyc7IHJtIC1yZiAvIikpCi0KLSAgZGVmIHRlc3RTaW5nbGVRdW90ZV9kb250RXhwYW5kKHNlbGYpOgotICAgIHRlc3Rfc3RyaW5nID0gJ2hlbGxvICRURVNUX1ZBUicKLSAgICBjbWQgPSAnVEVTVF9WQVI9d29ybGQ7IGVjaG8gJXMnICUgY21kX2hlbHBlci5TaW5nbGVRdW90ZSh0ZXN0X3N0cmluZykKLSAgICBzZWxmLmFzc2VydEVxdWFscyh0ZXN0X3N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICBjbWRfaGVscGVyLkdldENtZE91dHB1dChjbWQsIHNoZWxsPVRydWUpLnJzdHJpcCgpKQotCi0KLWNsYXNzIENtZEhlbHBlckRvdWJsZVF1b3RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3REb3VibGVRdW90ZV9iYXNpYyhzZWxmKToKLSAgICBzZWxmLmFzc2VydEVxdWFscygnaGVsbG8nLAotICAgICAgICAgICAgICAgICAgICAgIGNtZF9oZWxwZXIuRG91YmxlUXVvdGUoJ2hlbGxvJykpCi0KLSAgZGVmIHRlc3REb3VibGVRdW90ZV93aXRoU3BhY2VzKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCciaGVsbG8gd29ybGQiJywKLSAgICAgICAgICAgICAgICAgICAgICBjbWRfaGVscGVyLkRvdWJsZVF1b3RlKCdoZWxsbyB3b3JsZCcpKQotCi0gIGRlZiB0ZXN0RG91YmxlUXVvdGVfd2l0aFVuc2FmZUNoYXJzKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcnJyJoZWxsb1xcIjsgcm0gLXJmIC8iJycnLAotICAgICAgICAgICAgICAgICAgICAgIGNtZF9oZWxwZXIuRG91YmxlUXVvdGUoJ2hlbGxvIjsgcm0gLXJmIC8nKSkKLQotICBkZWYgdGVzdFNpbmdsZVF1b3RlX2RvRXhwYW5kKHNlbGYpOgotICAgIHRlc3Rfc3RyaW5nID0gJ2hlbGxvICRURVNUX1ZBUicKLSAgICBjbWQgPSAnVEVTVF9WQVI9d29ybGQ7IGVjaG8gJXMnICUgY21kX2hlbHBlci5Eb3VibGVRdW90ZSh0ZXN0X3N0cmluZykKLSAgICBzZWxmLmFzc2VydEVxdWFscygnaGVsbG8gd29ybGQnLAotICAgICAgICAgICAgICAgICAgICAgIGNtZF9oZWxwZXIuR2V0Q21kT3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSkucnN0cmlwKCkpCi0KLQotY2xhc3MgQ21kSGVscGVyU2hpbmtUb1NuaXBwZXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdFNocmlua1RvU25pcHBldF9ub0FyZ3Moc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2ZvbycsCi0gICAgICAgIGNtZF9oZWxwZXIuU2hyaW5rVG9TbmlwcGV0KFsnZm9vJ10sICdhJywgJ2JhcicpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCInZm9vIGZvbyciLAotICAgICAgICBjbWRfaGVscGVyLlNocmlua1RvU25pcHBldChbJ2ZvbyBmb28nXSwgJ2EnLCAnYmFyJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJyIkYSJcJyBiYXJcJycsCi0gICAgICAgIGNtZF9oZWxwZXIuU2hyaW5rVG9TbmlwcGV0KFsnZm9vIGJhciddLCAnYScsICdmb28nKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscygnXCdmb28gXCciJGEiJywKLSAgICAgICAgY21kX2hlbHBlci5TaHJpbmtUb1NuaXBwZXQoWydmb28gYmFyJ10sICdhJywgJ2JhcicpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdmb28iJGEiJywKLSAgICAgICAgY21kX2hlbHBlci5TaHJpbmtUb1NuaXBwZXQoWydmb29iYXInXSwgJ2EnLCAnYmFyJykpCi0KLSAgZGVmIHRlc3RTaHJpbmtUb1NuaXBwZXRfc2luZ2xlQXJnKHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJmb28gJyciLAotICAgICAgICBjbWRfaGVscGVyLlNocmlua1RvU25pcHBldChbJ2ZvbycsICcnXSwgJ2EnLCAnYmFyJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoImZvbyBmb28iLAotICAgICAgICBjbWRfaGVscGVyLlNocmlua1RvU25pcHBldChbJ2ZvbycsICdmb28nXSwgJ2EnLCAnYmFyJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJyIkYSIgIiRhIicsCi0gICAgICAgIGNtZF9oZWxwZXIuU2hyaW5rVG9TbmlwcGV0KFsnZm9vJywgJ2ZvbyddLCAnYScsICdmb28nKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscygnZm9vICIkYSIiJGEiJywKLSAgICAgICAgY21kX2hlbHBlci5TaHJpbmtUb1NuaXBwZXQoWydmb28nLCAnYmFyYmFyJ10sICdhJywgJ2JhcicpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdmb28gIiRhIlwnIFwnIiRhIicsCi0gICAgICAgIGNtZF9oZWxwZXIuU2hyaW5rVG9TbmlwcGV0KFsnZm9vJywgJ2JhciBiYXInXSwgJ2EnLCAnYmFyJykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2ZvbyAiJGEiIiRhIlwnIFwnJywKLSAgICAgICAgY21kX2hlbHBlci5TaHJpbmtUb1NuaXBwZXQoWydmb28nLCAnYmFyYmFyICddLCAnYScsICdiYXInKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscygnZm9vIFwnIFwnIiRhIiIkYSJcJyBcJycsCi0gICAgICAgIGNtZF9oZWxwZXIuU2hyaW5rVG9TbmlwcGV0KFsnZm9vJywgJyBiYXJiYXIgJ10sICdhJywgJ2JhcicpKQotCi0KLV9ERUZBVUxUID0gJ0RFRkFVTFQnCi0KLQotY2xhc3MgX1Byb2Nlc3NPdXRwdXRFdmVudChvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBzZWxlY3RfZmRzPV9ERUZBVUxULCByZWFkX2NvbnRlbnRzPU5vbmUsIHRzPV9ERUZBVUxUKToKLSAgICBzZWxmLnNlbGVjdF9mZHMgPSBzZWxlY3RfZmRzCi0gICAgc2VsZi5yZWFkX2NvbnRlbnRzID0gcmVhZF9jb250ZW50cwotICAgIHNlbGYudHMgPSB0cwotCi0KLWNsYXNzIF9Nb2NrUHJvY2VzcyhvYmplY3QpOgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXRfc2VxdWVuY2U9Tm9uZSwgcmV0dXJuX3ZhbHVlPTApOgotCi0gICAgIyBBcmJpdHJhcnkuCi0gICAgZmFrZV9zdGRvdXRfZmlsZW5vID0gMjUKLQotICAgIHNlbGYubW9ja19wcm9jID0gbW9jay5NYWdpY01vY2soc3BlYz1zdWJwcm9jZXNzLlBvcGVuKQotICAgIHNlbGYubW9ja19wcm9jLnN0ZG91dCA9IG1vY2suTWFnaWNNb2NrKCkKLSAgICBzZWxmLm1vY2tfcHJvYy5zdGRvdXQuZmlsZW5vID0gbW9jay5NYWdpY01vY2soCi0gICAgICAgIHJldHVybl92YWx1ZT1mYWtlX3N0ZG91dF9maWxlbm8pCi0gICAgc2VsZi5tb2NrX3Byb2MucmV0dXJuY29kZSA9IE5vbmUKLQotICAgIHNlbGYuX3JldHVybl92YWx1ZSA9IHJldHVybl92YWx1ZQotCi0gICAgIyBUaGlzIGxpbmtzIHRoZSBiZWhhdmlvciBvZiBvcy5yZWFkLCBzZWxlY3Quc2VsZWN0LCB0aW1lLnRpbWUsIGFuZAotICAgICMgPHByb2Nlc3M+LnBvbGwuIFRoZSBvdXRwdXQgc2VxdWVuY2UgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSBsaXN0IG9mCi0gICAgIyByZXR1cm4gdmFsdWVzIGZvciBzZWxlY3Quc2VsZWN0IHdpdGggY29ycmVzcG9uZGluZyByZXR1cm4gdmFsdWVzIGZvcgotICAgICMgdGhlIG90aGVyIGNhbGxzIGF0IGFueSB0aW1lIGJldHdlZW4gdGhhdCBzZWxlY3QgY2FsbCBhbmQgdGhlIGZvbGxvd2luZwotICAgICMgb25lLiBXZSBpdGVyYXRlIHRocm91Z2ggdGhlIHNlcXVlbmNlIG9ubHkgb24gY2FsbHMgdG8gc2VsZWN0LnNlbGVjdC4KLSAgICAjCi0gICAgIyBvcy5yZWFkIGlzIGEgc3BlY2lhbCBjYXNlLCB0aG91Z2gsIHdoZXJlIHdlIG9ubHkgcmV0dXJuIGEgZ2l2ZW4gY2h1bmsKLSAgICAjIG9mIGRhdGEgKm9uY2UqIGFmdGVyIGEgZ2l2ZW4gY2FsbCB0byBzZWxlY3QuCi0KLSAgICBpZiBub3Qgb3V0cHV0X3NlcXVlbmNlOgotICAgICAgb3V0cHV0X3NlcXVlbmNlID0gW10KLQotICAgICMgVXNlIGFuIGxlYWRpbmcgZWxlbWVudCB0byBtYWtlIHRoZSBpdGVyYXRpb24gbG9naWMgd29yay4KLSAgICBpbml0aWFsX3NlcV9lbGVtZW50ID0gX1Byb2Nlc3NPdXRwdXRFdmVudCgKLSAgICAgICAgX0RFRkFVTFQsICcnLAotICAgICAgICBvdXRwdXRfc2VxdWVuY2VbMF0udHMgaWYgb3V0cHV0X3NlcXVlbmNlIGVsc2UgX0RFRkFVTFQpCi0gICAgb3V0cHV0X3NlcXVlbmNlLmluc2VydCgwLCBpbml0aWFsX3NlcV9lbGVtZW50KQotCi0gICAgZm9yIG8gaW4gb3V0cHV0X3NlcXVlbmNlOgotICAgICAgaWYgby5zZWxlY3RfZmRzID09IF9ERUZBVUxUOgotICAgICAgICBpZiBvLnJlYWRfY29udGVudHMgaXMgTm9uZToKLSAgICAgICAgICBvLnNlbGVjdF9mZHMgPSBbXQotICAgICAgICBlbHNlOgotICAgICAgICAgIG8uc2VsZWN0X2ZkcyA9IFtmYWtlX3N0ZG91dF9maWxlbm9dCi0gICAgICBpZiBvLnRzID09IF9ERUZBVUxUOgotICAgICAgICBvLnRzID0gdGltZS50aW1lKCkKLSAgICBzZWxmLl9vdXRwdXRfc2VxdWVuY2UgPSBvdXRwdXRfc2VxdWVuY2UKLQotICAgIHNlbGYuX291dHB1dF9zZXFfaW5kZXggPSAwCi0gICAgc2VsZi5fcmVhZF9mbGFncyA9IFtGYWxzZV0gKiBsZW4ob3V0cHV0X3NlcXVlbmNlKQotCi0gICAgZGVmIHJlYWRfc2lkZV9lZmZlY3QoKl9hcmdzLCAqKl9rd2FyZ3MpOgotICAgICAgaWYgc2VsZi5fcmVhZF9mbGFnc1tzZWxmLl9vdXRwdXRfc2VxX2luZGV4XToKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgIHNlbGYuX3JlYWRfZmxhZ3Nbc2VsZi5fb3V0cHV0X3NlcV9pbmRleF0gPSBUcnVlCi0gICAgICByZXR1cm4gc2VsZi5fb3V0cHV0X3NlcXVlbmNlW3NlbGYuX291dHB1dF9zZXFfaW5kZXhdLnJlYWRfY29udGVudHMKLQotICAgIGRlZiBzZWxlY3Rfc2lkZV9lZmZlY3QoKl9hcmdzLCAqKl9rd2FyZ3MpOgotICAgICAgaWYgc2VsZi5fb3V0cHV0X3NlcV9pbmRleCBpcyBOb25lOgotICAgICAgICBzZWxmLl9vdXRwdXRfc2VxX2luZGV4ID0gMAotICAgICAgZWxzZToKLSAgICAgICAgc2VsZi5fb3V0cHV0X3NlcV9pbmRleCArPSAxCi0gICAgICBpZiBzZWxmLl9vdXRwdXRfc2VxX2luZGV4IDwgbGVuKHNlbGYuX291dHB1dF9zZXF1ZW5jZSk6Ci0gICAgICAgIHJldHVybiAoc2VsZi5fb3V0cHV0X3NlcXVlbmNlW3NlbGYuX291dHB1dF9zZXFfaW5kZXhdLnNlbGVjdF9mZHMsCi0gICAgICAgICAgICAgICAgTm9uZSwgTm9uZSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHJldHVybihbXSwgTm9uZSwgTm9uZSkKLQotICAgIGRlZiB0aW1lX3NpZGVfZWZmZWN0KCpfYXJncywgKipfa3dhcmdzKToKLSAgICAgIHJldHVybiBzZWxmLl9vdXRwdXRfc2VxdWVuY2Vbc2VsZi5fb3V0cHV0X3NlcV9pbmRleF0udHMKLQotICAgIGRlZiBwb2xsX3NpZGVfZWZmZWN0KCpfYXJncywgKipfa3dhcmdzKToKLSAgICAgIGlmIHNlbGYuX291dHB1dF9zZXFfaW5kZXggPj0gbGVuKHNlbGYuX291dHB1dF9zZXF1ZW5jZSkgLSAxOgotICAgICAgICBzZWxmLm1vY2tfcHJvYy5yZXR1cm5jb2RlID0gc2VsZi5fcmV0dXJuX3ZhbHVlCi0gICAgICByZXR1cm4gc2VsZi5tb2NrX3Byb2MucmV0dXJuY29kZQotCi0gICAgbW9ja19yZWFkID0gbW9jay5NYWdpY01vY2soc2lkZV9lZmZlY3Q9cmVhZF9zaWRlX2VmZmVjdCkKLSAgICBtb2NrX3NlbGVjdCA9IG1vY2suTWFnaWNNb2NrKHNpZGVfZWZmZWN0PXNlbGVjdF9zaWRlX2VmZmVjdCkKLSAgICBtb2NrX3RpbWUgPSBtb2NrLk1hZ2ljTW9jayhzaWRlX2VmZmVjdD10aW1lX3NpZGVfZWZmZWN0KQotICAgIHNlbGYubW9ja19wcm9jLnBvbGwgPSBtb2NrLk1hZ2ljTW9jayhzaWRlX2VmZmVjdD1wb2xsX3NpZGVfZWZmZWN0KQotCi0gICAgIyBTZXQgdXAgYnV0ICpkbyBub3Qgc3RhcnQqIHRoZSBtb2Nrcy4KLSAgICBzZWxmLl9tb2NrcyA9IFsKLSAgICAgIG1vY2sucGF0Y2goJ29zLnJlYWQnLCBuZXc9bW9ja19yZWFkKSwKLSAgICAgIG1vY2sucGF0Y2goJ3NlbGVjdC5zZWxlY3QnLCBuZXc9bW9ja19zZWxlY3QpLAotICAgICAgbW9jay5wYXRjaCgndGltZS50aW1lJywgbmV3PW1vY2tfdGltZSksCi0gICAgXQotICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgotICAgICAgc2VsZi5fbW9ja3MuYXBwZW5kKG1vY2sucGF0Y2goJ2ZjbnRsLmZjbnRsJykpCi0KLSAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICBmb3IgbSBpbiBzZWxmLl9tb2NrczoKLSAgICAgIG0uX19lbnRlcl9fKCkKLSAgICByZXR1cm4gc2VsZi5tb2NrX3Byb2MKLQotICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190Yik6Ci0gICAgZm9yIG0gaW4gcmV2ZXJzZWQoc2VsZi5fbW9ja3MpOgotICAgICAgbS5fX2V4aXRfXyhleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKQotCi0KLWNsYXNzIENtZEhlbHBlckl0ZXJDbWRPdXRwdXRMaW5lc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAiIiJUZXN0IEl0ZXJDbWRPdXRwdXRMaW5lcyB3aXRoIHNvbWUgY2FsbHMgdG8gdGhlIHVuaXggJ3NlcScgY29tbWFuZC4iIiIKLQotICAjIFRoaXMgY2FsbHMgX0l0ZXJDbWRPdXRwdXRMaW5lcyByYXRoZXIgdGhhbiBJdGVyQ21kT3V0cHV0TGluZXMgcy50LiBpdAotICAjIGNhbiBtb2NrIHRoZSBwcm9jZXNzLgotICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0KLSAgX1NJTVBMRV9PVVRQVVRfU0VRVUVOQ0UgPSBbCi0gICAgX1Byb2Nlc3NPdXRwdXRFdmVudChyZWFkX2NvbnRlbnRzPScxXG4yXG4nKSwKLSAgXQotCi0gIGRlZiB0ZXN0SXRlckNtZE91dHB1dExpbmVzX3N1Y2Nlc3Moc2VsZik6Ci0gICAgd2l0aCBfTW9ja1Byb2Nlc3MoCi0gICAgICAgIG91dHB1dF9zZXF1ZW5jZT1zZWxmLl9TSU1QTEVfT1VUUFVUX1NFUVVFTkNFKSBhcyBtb2NrX3Byb2M6Ci0gICAgICBmb3IgbnVtLCBsaW5lIGluIGVudW1lcmF0ZSgKLSAgICAgICAgICBjbWRfaGVscGVyLl9JdGVyQ21kT3V0cHV0TGluZXMobW9ja19wcm9jLCAnbW9ja19wcm9jJyksIDEpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhudW0sIGludChsaW5lKSkKLQotICBkZWYgdGVzdEl0ZXJDbWRPdXRwdXRMaW5lc19leGl0U3RhdHVzRmFpbChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKToKLSAgICAgIHdpdGggX01vY2tQcm9jZXNzKG91dHB1dF9zZXF1ZW5jZT1zZWxmLl9TSU1QTEVfT1VUUFVUX1NFUVVFTkNFLAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPTEpIGFzIG1vY2tfcHJvYzoKLSAgICAgICAgZm9yIG51bSwgbGluZSBpbiBlbnVtZXJhdGUoCi0gICAgICAgICAgICBjbWRfaGVscGVyLl9JdGVyQ21kT3V0cHV0TGluZXMobW9ja19wcm9jLCAnbW9ja19wcm9jJyksIDEpOgotICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG51bSwgaW50KGxpbmUpKQotICAgICAgICAjIGFmdGVyIHJlYWRpbmcgYWxsIHRoZSBvdXRwdXQgd2UgZ2V0IGFuIGV4aXQgc3RhdHVzIG9mIDEKLQotICBkZWYgdGVzdEl0ZXJDbWRPdXRwdXRMaW5lc19leGl0U3RhdHVzSWdub3JlZChzZWxmKToKLSAgICB3aXRoIF9Nb2NrUHJvY2VzcyhvdXRwdXRfc2VxdWVuY2U9c2VsZi5fU0lNUExFX09VVFBVVF9TRVFVRU5DRSwKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9MSkgYXMgbW9ja19wcm9jOgotICAgICAgZm9yIG51bSwgbGluZSBpbiBlbnVtZXJhdGUoCi0gICAgICAgICAgY21kX2hlbHBlci5fSXRlckNtZE91dHB1dExpbmVzKAotICAgICAgICAgICAgICBtb2NrX3Byb2MsICdtb2NrX3Byb2MnLCBjaGVja19zdGF0dXM9RmFsc2UpLAotICAgICAgICAgIDEpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhudW0sIGludChsaW5lKSkKLQotICBkZWYgdGVzdEl0ZXJDbWRPdXRwdXRMaW5lc19leGl0U3RhdHVzU2tpcHBlZChzZWxmKToKLSAgICB3aXRoIF9Nb2NrUHJvY2VzcyhvdXRwdXRfc2VxdWVuY2U9c2VsZi5fU0lNUExFX09VVFBVVF9TRVFVRU5DRSwKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9MSkgYXMgbW9ja19wcm9jOgotICAgICAgZm9yIG51bSwgbGluZSBpbiBlbnVtZXJhdGUoCi0gICAgICAgICAgY21kX2hlbHBlci5fSXRlckNtZE91dHB1dExpbmVzKG1vY2tfcHJvYywgJ21vY2tfcHJvYycpLCAxKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobnVtLCBpbnQobGluZSkpCi0gICAgICAgICMgbm8gZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIGJlY2F1c2Ugd2UgZG9uJ3QgYXR0ZW1wdCB0byByZWFkIHBhc3QKLSAgICAgICAgIyB0aGUgZW5kIG9mIHRoZSBvdXRwdXQgYW5kLCB0aHVzLCB0aGUgc3RhdHVzIG5ldmVyIGdldHMgY2hlY2tlZAotICAgICAgICBpZiBudW0gPT0gMjoKLSAgICAgICAgICBicmVhawotCi0gIGRlZiB0ZXN0SXRlckNtZE91dHB1dExpbmVzX2RlbGF5KHNlbGYpOgotICAgIG91dHB1dF9zZXF1ZW5jZSA9IFsKLSAgICAgIF9Qcm9jZXNzT3V0cHV0RXZlbnQocmVhZF9jb250ZW50cz0nMVxuMlxuJywgdHM9MSksCi0gICAgICBfUHJvY2Vzc091dHB1dEV2ZW50KHJlYWRfY29udGVudHM9Tm9uZSwgdHM9MiksCi0gICAgICBfUHJvY2Vzc091dHB1dEV2ZW50KHJlYWRfY29udGVudHM9J0F3YWtlJywgdHM9MTApLAotICAgIF0KLSAgICB3aXRoIF9Nb2NrUHJvY2VzcyhvdXRwdXRfc2VxdWVuY2U9b3V0cHV0X3NlcXVlbmNlKSBhcyBtb2NrX3Byb2M6Ci0gICAgICBmb3IgbnVtLCBsaW5lIGluIGVudW1lcmF0ZSgKLSAgICAgICAgICBjbWRfaGVscGVyLl9JdGVyQ21kT3V0cHV0TGluZXMobW9ja19wcm9jLCAnbW9ja19wcm9jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcl90aW1lb3V0PTUpLCAxKToKLSAgICAgICAgaWYgbnVtIDw9IDI6Ci0gICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobnVtLCBpbnQobGluZSkpCi0gICAgICAgIGVsaWYgbnVtID09IDM6Ci0gICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgbGluZSkKLSAgICAgICAgZWxpZiBudW0gPT0gNDoKLSAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnQXdha2UnLCBsaW5lKQotICAgICAgICBlbHNlOgotICAgICAgICAgIHNlbGYuZmFpbCgpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9maWxlX3V0aWxzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvZmlsZV91dGlscy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM1YTllZi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9maWxlX3V0aWxzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3MKLQotCi1kZWYgTWVyZ2VGaWxlcyhkZXN0X2ZpbGUsIHNvdXJjZV9maWxlcyk6Ci0gICIiIk1lcmdlIGxpc3Qgb2YgZmlsZXMgaW50byBzaW5nbGUgZGVzdGluYXRpb24gZmlsZS4KLQotICBBcmdzOgotICAgIGRlc3RfZmlsZTogRmlsZSB0byBiZSB3cml0dGVuIHRvLgotICAgIHNvdXJjZV9maWxlczogTGlzdCBvZiBmaWxlcyB0byBiZSBtZXJnZWQuIFdpbGwgYmUgbWVyZ2VkIGluIHRoZSBvcmRlciB0aGV5Ci0gICAgICAgIGFwcGVhciBpbiB0aGUgbGlzdC4KLSAgIiIiCi0gIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmRpcm5hbWUoZGVzdF9maWxlKSk6Ci0gICAgb3MubWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKGRlc3RfZmlsZSkpCi0gIHRyeToKLSAgICB3aXRoIG9wZW4oZGVzdF9maWxlLCAndycpIGFzIGRlc3RfZjoKLSAgICAgIGZvciBzb3VyY2VfZmlsZSBpbiBzb3VyY2VfZmlsZXM6Ci0gICAgICAgIHdpdGggb3Blbihzb3VyY2VfZmlsZSwgJ3InKSBhcyBzb3VyY2VfZjoKLSAgICAgICAgICBkZXN0X2Yud3JpdGUoc291cmNlX2YucmVhZCgpKQotICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKLSAgICAjIFNvbWV0aGluZyB3ZW50IHdyb25nIHdoZW4gY3JlYXRpbmcgZGVzdF9maWxlLiBDbGVhbmluZyB1cC4KLSAgICB0cnk6Ci0gICAgICBvcy5yZW1vdmUoZGVzdF9maWxlKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgcGFzcwotICAgIHJhaXNlIGUKLQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9maW5kX3VzYl9kZXZpY2VzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvZmluZF91c2JfZGV2aWNlcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNzRiODg4ZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9maW5kX3VzYl9kZXZpY2VzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTQ2ICswLDAgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBhcmdwYXJzZQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5wYXRoLmFwcGVuZCgKLSAgICAgIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uJywgJy4uJykpKQotCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBjbWRfaGVscGVyCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCB1c2JfaHVicwotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgbHN1c2IKLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLSMgTm90ZTogSW4gdGhlIGRvY3VtZW50YXRpb24gYmVsb3csICJ2aXJ0dWFsIHBvcnQiIHJlZmVycyB0byB0aGUgcG9ydCBudW1iZXIKLSMgYXMgb2JzZXJ2ZWQgYnkgdGhlIHN5c3RlbSAoZS5nLiBieSB1c2ItZGV2aWNlcykgYW5kICJwaHlzaWNhbCBwb3J0IiByZWZlcnMKLSMgdG8gdGhlIHBoeXNpY2FsIG51bWVyaWNhbCBsYWJlbCBvbiB0aGUgcGh5c2ljYWwgcG9ydCBlLmcuIG9uIGEgVVNCIGh1Yi4KLSMgVGhlIG1hcHBpbmcgYmV0d2VlbiB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBwb3J0cyBpcyBub3QgYWx3YXlzIHRoZSBpZGVudGl0eQotIyAoZS5nLiB0aGUgcG9ydCBsYWJlbGVkICIxIiBvbiBhIFVTQiBodWIgZG9lcyBub3QgYWx3YXlzIHNob3cgdXAgYXMgInBvcnQgMSIKLSMgd2hlbiB5b3UgcGx1ZyBzb21ldGhpbmcgaW50byBpdCkgYnV0LCBhcyBmYXIgYXMgd2UgYXJlIGF3YXJlLCB0aGUgbWFwcGluZwotIyBiZXR3ZWVuIHZpcnR1YWwgYW5kIHBoeXNpY2FsIHBvcnRzIGlzIGFsd2F5cyB0aGUgc2FtZSBmb3IgYSBnaXZlbgotIyBtb2RlbCBvZiBVU0IgaHViLiBXaGVuICJwb3J0IG51bWJlciIgaXMgcmVmZXJlbmNlZCB3aXRob3V0IHNwZWNpZnlpbmcsIGl0Ci0jIG1lYW5zIHRoZSB2aXJ0dWFsIHBvcnQgbnVtYmVyLgotCi0KLSMgV3JhcHBlciBmdW5jdGlvbnMgZm9yIHN5c3RlbSBjb21tYW5kcyB0byBnZXQgb3V0cHV0LiBUaGVzZSBhcmUgaW4gd3JhcHBlcgotIyBmdW5jdGlvbnMgc28gdGhhdCB0aGV5IGNhbiBiZSBtb3JlIGVhc2lseSBtb2NrZWQtb3V0IGZvciB0ZXN0cy4KLWRlZiBfR2V0UGFyc2VkTFNVU0JPdXRwdXQoKToKLSAgcmV0dXJuIGxzdXNiLmxzdXNiKCkKLQotCi1kZWYgX0dldFVTQkRldmljZXNPdXRwdXQoKToKLSAgcmV0dXJuIGNtZF9oZWxwZXIuR2V0Q21kT3V0cHV0KFsndXNiLWRldmljZXMnXSkKLQotCi1kZWYgX0dldFR0eVVTQkluZm8odHR5X3N0cmluZyk6Ci0gIGNtZCA9IFsndWRldmFkbScsICdpbmZvJywgJy0tbmFtZT0vZGV2LycgKyB0dHlfc3RyaW5nLCAnLS1hdHRyaWJ1dGUtd2FsayddCi0gIHJldHVybiBjbWRfaGVscGVyLkdldENtZE91dHB1dChjbWQpCi0KLQotZGVmIF9HZXRDb21tTGlzdCgpOgotICByZXR1cm4gY21kX2hlbHBlci5HZXRDbWRPdXRwdXQoJ2xzIC9kZXYnLCBzaGVsbD1UcnVlKQotCi0KLWRlZiBHZXRUVFlMaXN0KCk6Ci0gIHJldHVybiBbeCBmb3IgeCBpbiBfR2V0Q29tbUxpc3QoKS5zcGxpdGxpbmVzKCkgaWYgJ3R0eVVTQicgaW4geF0KLQotCi0jIENsYXNzIHRvIGlkZW50aWZ5IG5vZGVzIGluIHRoZSBVU0IgdG9wb2xvZ3kuIFVTQiB0b3BvbG9neSBpcyBvcmdhbml6ZWQgYXMKLSMgYSB0cmVlLgotY2xhc3MgVVNCTm9kZShvYmplY3QpOgotICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgc2VsZi5fcG9ydF90b19ub2RlID0ge30KLQotICBAcHJvcGVydHkKLSAgZGVmIGRlc2Moc2VsZik6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gIEBwcm9wZXJ0eQotICBkZWYgaW5mbyhzZWxmKToKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBkZXZpY2VfbnVtKHNlbGYpOgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICBAcHJvcGVydHkKLSAgZGVmIGJ1c19udW0oc2VsZik6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gIGRlZiBIYXNQb3J0KHNlbGYsIHBvcnQpOgotICAgICIiIkRldGVybWluZXMgaWYgdGhpcyBkZXZpY2UgaGFzIGEgZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgZ2l2ZW4gcG9ydC4iIiIKLSAgICByZXR1cm4gcG9ydCBpbiBzZWxmLl9wb3J0X3RvX25vZGUKLQotICBkZWYgUG9ydFRvRGV2aWNlKHNlbGYsIHBvcnQpOgotICAgICIiIkdldHMgdGhlIGRldmljZSBjb25uZWN0ZWQgdG8gdGhlIGdpdmVuIHBvcnQgb24gdGhpcyBkZXZpY2UuIiIiCi0gICAgcmV0dXJuIHNlbGYuX3BvcnRfdG9fbm9kZVtwb3J0XQotCi0gIGRlZiBEaXNwbGF5KHNlbGYsIHBvcnRfY2hhaW49JycsIGluZm89RmFsc2UpOgotICAgICIiIkRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbm9kZSBhbmQgaXRzIGRlc2NlbmRhbnRzLgotCi0gICAgT3V0cHV0IGZvcm1hdCBpcywgZS5nLiAxOjM6MzpEZXZpY2UgNDIgKElEIDEyMzQ6NTY3OCBTb21lIERldmljZSkKLSAgICBtZWFuaW5nIHRoYXQgZnJvbSB0aGUgYnVzLCBpZiB5b3UgbG9vayBhdCB0aGUgZGV2aWNlIGNvbm5lY3RlZAotICAgIHRvIHBvcnQgMSwgdGhlbiB0aGUgZGV2aWNlIGNvbm5lY3RlZCB0byBwb3J0IDMgb2YgdGhhdCwKLSAgICB0aGVuIHRoZSBkZXZpY2UgY29ubmVjdGVkIHRvIHBvcnQgMyBvZiB0aGF0LCB5b3UgZ2V0IHRoZSBkZXZpY2UKLSAgICBhc3NpZ25lZCBkZXZpY2UgbnVtYmVyIDQyLCB3aGljaCBpcyBTb21lIERldmljZS4gTm90ZSB0aGF0IGRldmljZQotICAgIG51bWJlcnMgd2lsbCBiZSByZWFzc2lnbmVkIHdoZW5ldmVyIGEgY29ubmVjdGVkIGRldmljZSBpcyBwb3dlcmN5Y2xlZAotICAgIG9yIHJlaW5zZXJ0ZWQsIGJ1dCBwb3J0IG51bWJlcnMgc3RheSB0aGUgc2FtZSBhcyBsb25nIGFzIHRoZSBkZXZpY2UKLSAgICBpcyByZWluc2VydGVkIGJhY2sgaW50byB0aGUgc2FtZSBwaHlzaWNhbCBwb3J0LgotCi0gICAgQXJnczoKLSAgICAgIHBvcnRfY2hhaW46IFtzdHJpbmddIENoYWluIG9mIHBvcnRzIGZyb20gYnVzIHRvIHRoaXMgbm9kZSAoZS5nLiAnMjo0OicpCi0gICAgICBpbmZvOiBbYm9vbF0gV2hldGhlciB0byBkaXNwbGF5IGRldGFpbGVkIGluZm8gYXMgd2VsbC4KLSAgICAiIiIKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgZGVmIEFkZENoaWxkKHNlbGYsIHBvcnQsIGRldmljZSk6Ci0gICAgIiIiQWRkcyBjaGlsZCB0byB0aGUgZGV2aWNlIHRyZWUuCi0KLSAgICBBcmdzOgotICAgICAgcG9ydDogW2ludF0gUG9ydCBudW1iZXIgb2YgdGhlIGRldmljZS4KLSAgICAgIGRldmljZTogW1VTQkRldmljZU5vZGVdIERldmljZSB0byBhZGQuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBWYWx1ZUVycm9yOiBJZiBkZXZpY2UgYWxyZWFkeSBoYXMgYSBjaGlsZCBhdCB0aGUgZ2l2ZW4gcG9ydC4KLSAgICAiIiIKLSAgICBpZiBzZWxmLkhhc1BvcnQocG9ydCk6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCdEdXBsaWNhdGUgcG9ydCBudW1iZXInKQotICAgIGVsc2U6Ci0gICAgICBzZWxmLl9wb3J0X3RvX25vZGVbcG9ydF0gPSBkZXZpY2UKLQotICBkZWYgQWxsTm9kZXMoc2VsZik6Ci0gICAgIiIiR2VuZXJhdG9yIHRoYXQgeWllbGRzIHRoaXMgbm9kZSBhbmQgYWxsIG9mIGl0cyBkZXNjZW5kYW50cy4KLQotICAgIFlpZWxkczoKLSAgICAgIFtVU0JOb2RlXSBGaXJzdCB0aGlzIG5vZGUsIHRoZW4gZWFjaCBvZiBpdHMgZGVzY2VuZGFudHMgKHJlY3Vyc2l2ZWx5KQotICAgICIiIgotICAgIHlpZWxkIHNlbGYKLSAgICBmb3IgY2hpbGRfbm9kZSBpbiBzZWxmLl9wb3J0X3RvX25vZGUudmFsdWVzKCk6Ci0gICAgICBmb3IgZGVzY2VuZGFudF9ub2RlIGluIGNoaWxkX25vZGUuQWxsTm9kZXMoKToKLSAgICAgICAgeWllbGQgZGVzY2VuZGFudF9ub2RlCi0KLSAgZGVmIEZpbmREZXZpY2VOdW1iZXIoc2VsZiwgZmluZG51bSk6Ci0gICAgIiIiRmluZCBkZXZpY2Ugd2l0aCBnaXZlbiBudW1iZXIgaW4gdHJlZQotCi0gICAgU2VhcmNoZXMgdGhlIHBvcnRpb24gb2YgdGhlIGRldmljZSB0cmVlIHJvb3RlZCBhdCB0aGlzIG5vZGUgZm9yCi0gICAgYSBkZXZpY2Ugd2l0aCB0aGUgZ2l2ZW4gZGV2aWNlIG51bWJlci4KLQotICAgIEFyZ3M6Ci0gICAgICBmaW5kbnVtOiBbaW50XSBEZXZpY2UgbnVtYmVyIHRvIHNlYXJjaCBmb3IuCi0KLSAgICBSZXR1cm5zOgotICAgICAgW1VTQkRldmljZU5vZGVdIE5vZGUgdGhhdCBpcyBmb3VuZC4KLSAgICAiIiIKLSAgICBmb3Igbm9kZSBpbiBzZWxmLkFsbE5vZGVzKCk6Ci0gICAgICBpZiBub2RlLmRldmljZV9udW0gPT0gZmluZG51bToKLSAgICAgICAgcmV0dXJuIG5vZGUKLSAgICByZXR1cm4gTm9uZQotCi0KLWNsYXNzIFVTQkRldmljZU5vZGUoVVNCTm9kZSk6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBidXNfbnVtPTAsIGRldmljZV9udW09MCwgc2VyaWFsPU5vbmUsIGluZm89Tm9uZSk6Ci0gICAgIiIiQ2xhc3MgdGhhdCByZXByZXNlbnRzIGEgZGV2aWNlIGluIFVTQiB0cmVlLgotCi0gICAgQXJnczoKLSAgICAgIGJ1c19udW06IFtpbnRdIEJ1cyBudW1iZXIgdGhhdCB0aGlzIG5vZGUgaXMgYXR0YWNoZWQgdG8uCi0gICAgICBkZXZpY2VfbnVtOiBbaW50XSBEZXZpY2UgbnVtYmVyIG9mIHRoaXMgZGV2aWNlIChvciAwLCBpZiB0aGlzIGlzIGEgYnVzKQotICAgICAgc2VyaWFsOiBbc3RyaW5nXSBTZXJpYWwgbnVtYmVyLgotICAgICAgaW5mbzogW2RpY3RdIE1hcCBnaXZpbmcgZGV0YWlsZWQgZGV2aWNlIGluZm8uCi0gICAgIiIiCi0gICAgc3VwZXIoVVNCRGV2aWNlTm9kZSwgc2VsZikuX19pbml0X18oKQotICAgIHNlbGYuX2J1c19udW0gPSBidXNfbnVtCi0gICAgc2VsZi5fZGV2aWNlX251bSA9IGRldmljZV9udW0KLSAgICBzZWxmLl9zZXJpYWwgPSBzZXJpYWwKLSAgICBzZWxmLl9pbmZvID0ge30gaWYgaW5mbyBpcyBOb25lIGVsc2UgaW5mbwotCi0gICNvdmVycmlkZQotICBAcHJvcGVydHkKLSAgZGVmIGRlc2Moc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX2luZm8uZ2V0KCdkZXNjJykKLQotICAjb3ZlcnJpZGUKLSAgQHByb3BlcnR5Ci0gIGRlZiBpbmZvKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9pbmZvCi0KLSAgI292ZXJyaWRlCi0gIEBwcm9wZXJ0eQotICBkZWYgZGV2aWNlX251bShzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fZGV2aWNlX251bQotCi0gICNvdmVycmlkZQotICBAcHJvcGVydHkKLSAgZGVmIGJ1c19udW0oc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX2J1c19udW0KLQotICBAcHJvcGVydHkKLSAgZGVmIHNlcmlhbChzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fc2VyaWFsCi0KLSAgQHNlcmlhbC5zZXR0ZXIKLSAgZGVmIHNlcmlhbChzZWxmLCBzZXJpYWwpOgotICAgIHNlbGYuX3NlcmlhbCA9IHNlcmlhbAotCi0gICNvdmVycmlkZQotICBkZWYgRGlzcGxheShzZWxmLCBwb3J0X2NoYWluPScnLCBpbmZvPUZhbHNlKToKLSAgICBsb2dnZXIuaW5mbygnJXMgRGV2aWNlICVkICglcyknLCBwb3J0X2NoYWluLCBzZWxmLmRldmljZV9udW0sIHNlbGYuZGVzYykKLSAgICBpZiBpbmZvOgotICAgICAgbG9nZ2VyLmluZm8oJyVzJywgc2VsZi5pbmZvKQotICAgIGZvciAocG9ydCwgZGV2aWNlKSBpbiBzZWxmLl9wb3J0X3RvX25vZGUuaXRlcml0ZW1zKCk6Ci0gICAgICBkZXZpY2UuRGlzcGxheSgnJXMlZDonICUgKHBvcnRfY2hhaW4sIHBvcnQpLCBpbmZvPWluZm8pCi0KLQotY2xhc3MgVVNCQnVzTm9kZShVU0JOb2RlKToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1c19udW09MCk6Ci0gICAgIiIiQ2xhc3MgdGhhdCByZXByZXNlbnRzIGEgbm9kZSAoZWl0aGVyIGEgYnVzIG9yIGRldmljZSkgaW4gVVNCIHRyZWUuCi0KLSAgICBBcmdzOgotICAgICAgaXNfYnVzOiBbYm9vbF0gSWYgdHJ1ZSwgbm9kZSBpcyBidXM7IGlmIG5vdCwgbm9kZSBpcyBkZXZpY2UuCi0gICAgICBidXNfbnVtOiBbaW50XSBCdXMgbnVtYmVyIHRoYXQgdGhpcyBub2RlIGlzIGF0dGFjaGVkIHRvLgotICAgICAgZGV2aWNlX251bTogW2ludF0gRGV2aWNlIG51bWJlciBvZiB0aGlzIGRldmljZSAob3IgMCwgaWYgdGhpcyBpcyBhIGJ1cykKLSAgICAgIGRlc2M6IFtzdHJpbmddIFNob3J0IGRlc2NyaXB0aW9uIG9mIGRldmljZS4KLSAgICAgIHNlcmlhbDogW3N0cmluZ10gU2VyaWFsIG51bWJlci4KLSAgICAgIGluZm86IFtkaWN0XSBNYXAgZ2l2aW5nIGRldGFpbGVkIGRldmljZSBpbmZvLgotICAgICAgcG9ydF90b19kZXY6IFtkaWN0KGludDpVU0JEZXZpY2VOb2RlKV0KLSAgICAgICAgICBNYXBzIHBvcnQgIyB0byBkZXZpY2UgY29ubmVjdGVkIHRvIHBvcnQuCi0gICAgIiIiCi0gICAgc3VwZXIoVVNCQnVzTm9kZSwgc2VsZikuX19pbml0X18oKQotICAgIHNlbGYuX2J1c19udW0gPSBidXNfbnVtCi0KLSAgI292ZXJyaWRlCi0gIEBwcm9wZXJ0eQotICBkZWYgZGVzYyhzZWxmKToKLSAgICByZXR1cm4gJ0JVUyAlZCcgJSBzZWxmLl9idXNfbnVtCi0KLSAgI292ZXJyaWRlCi0gIEBwcm9wZXJ0eQotICBkZWYgaW5mbyhzZWxmKToKLSAgICByZXR1cm4ge30KLQotICAjb3ZlcnJpZGUKLSAgQHByb3BlcnR5Ci0gIGRlZiBkZXZpY2VfbnVtKHNlbGYpOgotICAgIHJldHVybiAtMQotCi0gICNvdmVycmlkZQotICBAcHJvcGVydHkKLSAgZGVmIGJ1c19udW0oc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX2J1c19udW0KLQotICAjb3ZlcnJpZGUKLSAgZGVmIERpc3BsYXkoc2VsZiwgcG9ydF9jaGFpbj0nJywgaW5mbz1GYWxzZSk6Ci0gICAgbG9nZ2VyLmluZm8oJz09PSAlcyA9PT0nLCBzZWxmLmRlc2MpCi0gICAgZm9yIChwb3J0LCBkZXZpY2UpIGluIHNlbGYuX3BvcnRfdG9fbm9kZS5pdGVyaXRlbXMoKToKLSAgICAgIGRldmljZS5EaXNwbGF5KCclcyVkOicgJSAocG9ydF9jaGFpbiwgcG9ydCksIGluZm89aW5mbykKLQotCi1fVF9MSU5FX1JFR0VYID0gcmUuY29tcGlsZShyJ1Q6ICBCdXM9KD9QPGJ1cz5cZHsyfSkgTGV2PSg/UDxsZXY+XGR7Mn0pICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHInUHJudD0oP1A8cHJudD5cZHsyLDN9KSBQb3J0PSg/UDxwb3J0PlxkezJ9KSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByJ0NudD0oP1A8Y250PlxkezJ9KSBEZXYjPSg/UDxkZXY+LnszfSkgLionKQotCi1fU19MSU5FX1JFR0VYID0gcmUuY29tcGlsZShyJ1M6ICBTZXJpYWxOdW1iZXI9KD9QPHNlcmlhbD4uKiknKQotX0xTVVNCX0JVU19ERVZJQ0VfUkUgPSByZS5jb21waWxlKHInXkJ1cyAoXGR7M30pIERldmljZSAoXGR7M30pOiAoLiopJykKLQotCi1kZWYgR2V0QnVzTnVtYmVyVG9EZXZpY2VUcmVlTWFwKGZhc3Q9VHJ1ZSk6Ci0gICIiIkdldHMgZGV2aWNlcyBjdXJyZW50bHkgYXR0YWNoZWQuCi0KLSAgQXJnczoKLSAgICBmYXN0IFtib29sXTogd2hldGhlciB0byBkbyBpdCBmYXN0IChvbmx5IGdldCBkZXNjcmlwdGlvbiwgbm90Ci0gICAgdGhlIHdob2xlIGRpY3Rpb25hcnksIGZyb20gbHN1c2IpCi0KLSAgUmV0dXJuczoKLSAgICBtYXAgb2Yge2J1cyBudW1iZXI6IGJ1cyBvYmplY3R9Ci0gICAgd2hlcmUgdGhlIGJ1cyBvYmplY3QgaGFzIGFsbCB0aGUgZGV2aWNlcyBhdHRhY2hlZCB0byBpdCBpbiBhIHRyZWUuCi0gICIiIgotICBpZiBmYXN0OgotICAgIGluZm9fbWFwID0ge30KLSAgICBmb3IgbGluZSBpbiBsc3VzYi5yYXdfbHN1c2IoKS5zcGxpdGxpbmVzKCk6Ci0gICAgICBtYXRjaCA9IF9MU1VTQl9CVVNfREVWSUNFX1JFLm1hdGNoKGxpbmUpCi0gICAgICBpZiBtYXRjaDoKLSAgICAgICAgaW5mb19tYXBbKGludChtYXRjaC5ncm91cCgxKSksIGludChtYXRjaC5ncm91cCgyKSkpXSA9ICgKLSAgICAgICAgICB7J2Rlc2MnOm1hdGNoLmdyb3VwKDMpfSkKLSAgZWxzZToKLSAgICBpbmZvX21hcCA9IHsoKGludChsaW5lWydidXMnXSksIGludChsaW5lWydkZXZpY2UnXSkpKTogbGluZQotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIF9HZXRQYXJzZWRMU1VTQk91dHB1dCgpfQotCi0KLSAgdHJlZSA9IHt9Ci0gIGJ1c19udW0gPSAtMQotICBmb3IgbGluZSBpbiBfR2V0VVNCRGV2aWNlc091dHB1dCgpLnNwbGl0bGluZXMoKToKLSAgICBtYXRjaCA9IF9UX0xJTkVfUkVHRVgubWF0Y2gobGluZSkKLSAgICBpZiBtYXRjaDoKLSAgICAgIGJ1c19udW0gPSBpbnQobWF0Y2guZ3JvdXAoJ2J1cycpKQotICAgICAgcGFyZW50X251bSA9IGludChtYXRjaC5ncm91cCgncHJudCcpKQotICAgICAgIyB1c2ItZGV2aWNlcyBzdGFydHMgY291bnRpbmcgcG9ydHMgZnJvbSAwLCBzbyBhZGQgMQotICAgICAgcG9ydF9udW0gPSBpbnQobWF0Y2guZ3JvdXAoJ3BvcnQnKSkgKyAxCi0gICAgICBkZXZpY2VfbnVtID0gaW50KG1hdGNoLmdyb3VwKCdkZXYnKSkKLQotICAgICAgIyBjcmVhdGUgbmV3IGJ1cyBpZiBuZWNlc3NhcnkKLSAgICAgIGlmIGJ1c19udW0gbm90IGluIHRyZWU6Ci0gICAgICAgIHRyZWVbYnVzX251bV0gPSBVU0JCdXNOb2RlKGJ1c19udW09YnVzX251bSkKLQotICAgICAgIyBjcmVhdGUgdGhlIG5ldyBkZXZpY2UKLSAgICAgIG5ld19kZXZpY2UgPSBVU0JEZXZpY2VOb2RlKGJ1c19udW09YnVzX251bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV9udW09ZGV2aWNlX251bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm89aW5mb19tYXAuZ2V0KChidXNfbnVtLCBkZXZpY2VfbnVtKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnZGVzYyc6ICdOT1QgQVZBSUxBQkxFJ30pKQotCi0gICAgICAjIGFkZCBkZXZpY2UgdG8gYnVzCi0gICAgICBpZiBwYXJlbnRfbnVtICE9IDA6Ci0gICAgICAgIHRyZWVbYnVzX251bV0uRmluZERldmljZU51bWJlcihwYXJlbnRfbnVtKS5BZGRDaGlsZCgKLSAgICAgICAgICAgIHBvcnRfbnVtLCBuZXdfZGV2aWNlKQotICAgICAgZWxzZToKLSAgICAgICAgdHJlZVtidXNfbnVtXS5BZGRDaGlsZChwb3J0X251bSwgbmV3X2RldmljZSkKLQotICAgIG1hdGNoID0gX1NfTElORV9SRUdFWC5tYXRjaChsaW5lKQotICAgIGlmIG1hdGNoOgotICAgICAgaWYgYnVzX251bSA9PSAtMToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignUyBsaW5lIGFwcGVhcnMgYmVmb3JlIFQgbGluZSBpbiBpbnB1dCBmaWxlJykKLSAgICAgICMgcHV0IHRoZSBzZXJpYWwgbnVtYmVyIGluIHRoZSBkZXZpY2UKLSAgICAgIHRyZWVbYnVzX251bV0uRmluZERldmljZU51bWJlcihkZXZpY2VfbnVtKS5zZXJpYWwgPSBtYXRjaC5ncm91cCgnc2VyaWFsJykKLQotICByZXR1cm4gdHJlZQotCi0KLWRlZiBHZXRIdWJzT25CdXMoYnVzLCBodWJfdHlwZXMpOgotICAiIiJTY2FucyBmb3IgYWxsIGh1YnMgb24gYSBidXMgb2YgZ2l2ZW4gaHViIHR5cGVzLgotCi0gIEFyZ3M6Ci0gICAgYnVzOiBbVVNCTm9kZV0gQnVzIG9iamVjdC4KLSAgICBodWJfdHlwZXM6IFtpdGVyYWJsZSh1c2JfaHVicy5IdWJUeXBlKV0gUG9zc2libGUgdHlwZXMgb2YgaHVicy4KLQotICBZaWVsZHM6Ci0gICAgU2VxdWVuY2Ugb2YgdHVwbGVzIHJlcHJlc2VudGluZyAoaHViLCB0eXBlIG9mIGh1YikKLSAgIiIiCi0gIGZvciBkZXZpY2UgaW4gYnVzLkFsbE5vZGVzKCk6Ci0gICAgZm9yIGh1Yl90eXBlIGluIGh1Yl90eXBlczoKLSAgICAgIGlmIGh1Yl90eXBlLklzVHlwZShkZXZpY2UpOgotICAgICAgICB5aWVsZCAoZGV2aWNlLCBodWJfdHlwZSkKLQotCi1kZWYgR2V0UGh5c2ljYWxQb3J0VG9Ob2RlTWFwKGh1YiwgaHViX3R5cGUpOgotICAiIiJHZXRzIHBoeXNpY2FsLXBvcnQ6bm9kZSBtYXBwaW5nIGZvciBhIGdpdmVuIGh1Yi4KLSAgQXJnczoKLSAgICBodWI6IFtVU0JOb2RlXSBIdWIgdG8gZ2V0IG1hcCBmb3IuCi0gICAgaHViX3R5cGU6IFt1c2JfaHVicy5IdWJUeXBlXSBXaGljaCB0eXBlIG9mIGh1YiBpdCBpcy4KLQotICBSZXR1cm5zOgotICAgIERpY3Qgb2Yge3BoeXNpY2FsIHBvcnQ6IG5vZGV9Ci0gICIiIgotICBwb3J0X2RldmljZSA9IGh1Yl90eXBlLkdldFBoeXNpY2FsUG9ydFRvTm9kZVR1cGxlcyhodWIpCi0gIHJldHVybiB7cG9ydDogZGV2aWNlIGZvciAocG9ydCwgZGV2aWNlKSBpbiBwb3J0X2RldmljZX0KLQotCi1kZWYgR2V0UGh5c2ljYWxQb3J0VG9CdXNEZXZpY2VNYXAoaHViLCBodWJfdHlwZSk6Ci0gICIiIkdldHMgcGh5c2ljYWwtcG9ydDooYnVzIywgZGV2aWNlIykgbWFwcGluZyBmb3IgYSBnaXZlbiBodWIuCi0gIEFyZ3M6Ci0gICAgaHViOiBbVVNCTm9kZV0gSHViIHRvIGdldCBtYXAgZm9yLgotICAgIGh1Yl90eXBlOiBbdXNiX2h1YnMuSHViVHlwZV0gV2hpY2ggdHlwZSBvZiBodWIgaXQgaXMuCi0KLSAgUmV0dXJuczoKLSAgICBEaWN0IG9mIHtwaHlzaWNhbCBwb3J0OiAoYnVzIG51bWJlciwgZGV2aWNlIG51bWJlcil9Ci0gICIiIgotICBwb3J0X2RldmljZSA9IGh1Yl90eXBlLkdldFBoeXNpY2FsUG9ydFRvTm9kZVR1cGxlcyhodWIpCi0gIHJldHVybiB7cG9ydDogKGRldmljZS5idXNfbnVtLCBkZXZpY2UuZGV2aWNlX251bSkKLSAgICAgICAgICBmb3IgKHBvcnQsIGRldmljZSkgaW4gcG9ydF9kZXZpY2V9Ci0KLQotZGVmIEdldFBoeXNpY2FsUG9ydFRvU2VyaWFsTWFwKGh1YiwgaHViX3R5cGUpOgotICAiIiJHZXRzIHBoeXNpY2FsLXBvcnQ6c2VyaWFsIyBtYXBwaW5nIGZvciBhIGdpdmVuIGh1Yi4KLQotICBBcmdzOgotICAgIGh1YjogW1VTQk5vZGVdIEh1YiB0byBnZXQgbWFwIGZvci4KLSAgICBodWJfdHlwZTogW3VzYl9odWJzLkh1YlR5cGVdIFdoaWNoIHR5cGUgb2YgaHViIGl0IGlzLgotCi0gIFJldHVybnM6Ci0gICAgRGljdCBvZiB7cGh5c2ljYWwgcG9ydDogc2VyaWFsIG51bWJlcil9Ci0gICIiIgotICBwb3J0X2RldmljZSA9IGh1Yl90eXBlLkdldFBoeXNpY2FsUG9ydFRvTm9kZVR1cGxlcyhodWIpCi0gIHJldHVybiB7cG9ydDogZGV2aWNlLnNlcmlhbAotICAgICAgICAgIGZvciAocG9ydCwgZGV2aWNlKSBpbiBwb3J0X2RldmljZQotICAgICAgICAgIGlmIGRldmljZS5zZXJpYWx9Ci0KLQotZGVmIEdldFBoeXNpY2FsUG9ydFRvVFRZTWFwKGRldmljZSwgaHViX3R5cGUpOgotICAiIiJHZXRzIHBoeXNpY2FsLXBvcnQ6dHR5LXN0cmluZyBtYXBwaW5nIGZvciBhIGdpdmVuIGh1Yi4KLSAgQXJnczoKLSAgICBodWI6IFtVU0JOb2RlXSBIdWIgdG8gZ2V0IG1hcCBmb3IuCi0gICAgaHViX3R5cGU6IFt1c2JfaHVicy5IdWJUeXBlXSBXaGljaCB0eXBlIG9mIGh1YiBpdCBpcy4KLQotICBSZXR1cm5zOgotICAgIERpY3Qgb2Yge3BoeXNpY2FsIHBvcnQ6IHR0eS1zdHJpbmcpfQotICAiIiIKLSAgcG9ydF9kZXZpY2UgPSBodWJfdHlwZS5HZXRQaHlzaWNhbFBvcnRUb05vZGVUdXBsZXMoZGV2aWNlKQotICBidXNfZGV2aWNlX3RvX3R0eSA9IEdldEJ1c0RldmljZVRvVFRZTWFwKCkKLSAgcmV0dXJuIHtwb3J0OiBidXNfZGV2aWNlX3RvX3R0eVsoZGV2aWNlLmJ1c19udW0sIGRldmljZS5kZXZpY2VfbnVtKV0KLSAgICAgICAgICBmb3IgKHBvcnQsIGRldmljZSkgaW4gcG9ydF9kZXZpY2UKLSAgICAgICAgICBpZiAoZGV2aWNlLmJ1c19udW0sIGRldmljZS5kZXZpY2VfbnVtKSBpbiBidXNfZGV2aWNlX3RvX3R0eX0KLQotCi1kZWYgQ29sbGVjdEh1Yk1hcHMoaHViX3R5cGVzLCBtYXBfZnVuYywgZGV2aWNlX3RyZWVfbWFwPU5vbmUsIGZhc3Q9RmFsc2UpOgotICAiIiJSdW5zIGEgZnVuY3Rpb24gb24gYWxsIGh1YnMgaW4gdGhlIHN5c3RlbSBhbmQgY29sbGVjdHMgdGhlaXIgb3V0cHV0LgotCi0gIEFyZ3M6Ci0gICAgaHViX3R5cGVzOiBbdXNiX2h1YnMuSHViVHlwZV0gTGlzdCBvZiBwb3NzaWJsZSBodWIgdHlwZXMuCi0gICAgbWFwX2Z1bmM6IFtzdHJpbmddIEZ1bmN0aW9uIHRvIHJ1biBvbiBlYWNoIGh1Yi4KLSAgICBkZXZpY2VfdHJlZTogUHJldmlvdXNseSBjb25zdHJ1Y3RlZCBkZXZpY2UgdHJlZSBtYXAsIGlmIGFueS4KLSAgICBmYXN0OiBXaGV0aGVyIHRvIGNvbnN0cnVjdCBkZXZpY2UgdHJlZSBmYXN0LCBpZiBub3QgYWxyZWFkeSBwcm92aWRlZAotCi0gIFlpZWxkczoKLSAgICBTZXF1ZW5jZSBvZiBkaWN0cyBvZiB7cGh5c2ljYWwgcG9ydDogZGV2aWNlfSB3aGVyZSB0aGUgdHlwZSBvZgotICAgIGRldmljZSBkZXBlbmRzIG9uIHRoZSBpZGVudCBrZXl3b3JkLiBFYWNoIGRpY3QgaXMgYSBzZXBhcmF0ZSBodWIuCi0gICIiIgotICBpZiBkZXZpY2VfdHJlZV9tYXAgaXMgTm9uZToKLSAgICBkZXZpY2VfdHJlZV9tYXAgPSBHZXRCdXNOdW1iZXJUb0RldmljZVRyZWVNYXAoZmFzdD1mYXN0KQotICBmb3IgYnVzIGluIGRldmljZV90cmVlX21hcC52YWx1ZXMoKToKLSAgICBmb3IgKGh1YiwgaHViX3R5cGUpIGluIEdldEh1YnNPbkJ1cyhidXMsIGh1Yl90eXBlcyk6Ci0gICAgICB5aWVsZCBtYXBfZnVuYyhodWIsIGh1Yl90eXBlKQotCi0KLWRlZiBHZXRBbGxQaHlzaWNhbFBvcnRUb05vZGVNYXBzKGh1Yl90eXBlcywgKiprd2FyZ3MpOgotICByZXR1cm4gQ29sbGVjdEh1Yk1hcHMoaHViX3R5cGVzLCBHZXRQaHlzaWNhbFBvcnRUb05vZGVNYXAsICoqa3dhcmdzKQotCi0KLWRlZiBHZXRBbGxQaHlzaWNhbFBvcnRUb0J1c0RldmljZU1hcHMoaHViX3R5cGVzLCAqKmt3YXJncyk6Ci0gIHJldHVybiBDb2xsZWN0SHViTWFwcyhodWJfdHlwZXMsIEdldFBoeXNpY2FsUG9ydFRvQnVzRGV2aWNlTWFwLCAqKmt3YXJncykKLQotCi1kZWYgR2V0QWxsUGh5c2ljYWxQb3J0VG9TZXJpYWxNYXBzKGh1Yl90eXBlcywgKiprd2FyZ3MpOgotICByZXR1cm4gQ29sbGVjdEh1Yk1hcHMoaHViX3R5cGVzLCBHZXRQaHlzaWNhbFBvcnRUb1NlcmlhbE1hcCwgKiprd2FyZ3MpCi0KLQotZGVmIEdldEFsbFBoeXNpY2FsUG9ydFRvVFRZTWFwcyhodWJfdHlwZXMsICoqa3dhcmdzKToKLSAgcmV0dXJuIENvbGxlY3RIdWJNYXBzKGh1Yl90eXBlcywgR2V0UGh5c2ljYWxQb3J0VG9UVFlNYXAsICoqa3dhcmdzKQotCi0KLV9CVVNfTlVNX1JFR0VYID0gcmUuY29tcGlsZShyJy4qQVRUUlN7YnVzbnVtfT09IihcZCopIi4qJykKLV9ERVZJQ0VfTlVNX1JFR0VYID0gcmUuY29tcGlsZShyJy4qQVRUUlN7ZGV2bnVtfT09IihcZCopIi4qJykKLQotCi1kZWYgR2V0QnVzRGV2aWNlRnJvbVRUWSh0dHlfc3RyaW5nKToKLSAgIiIiR2V0cyBidXMgYW5kIGRldmljZSBudW1iZXIgY29ubmVjdGVkIHRvIGEgdHR5VVNCIHBvcnQuCi0KLSAgQXJnczoKLSAgICB0dHlfc3RyaW5nOiBbU3RyaW5nXSBJZGVudGlmaWVyIGZvciB0dHlVU0IgKGUuZy4gJ3R0eVVTQjAnKQotCi0gIFJldHVybnM6Ci0gICAgVHVwbGUgKGJ1cywgZGV2aWNlKSBnaXZpbmcgZGV2aWNlIGNvbm5lY3RlZCB0byB0aGF0IHR0eVVTQi4KLQotICBSYWlzZXM6Ci0gICAgVmFsdWVFcnJvcjogSWYgYnVzIGFuZCBkZXZpY2UgaW5mb3JtYXRpb24gY291bGQgbm90IGJlIGZvdW5kLgotICAiIiIKLSAgYnVzX251bSA9IE5vbmUKLSAgZGV2aWNlX251bSA9IE5vbmUKLSAgIyBFeHBlY3RlZCBvdXRwdXQgb2YgR2V0Q21kT3V0cHV0IHNob3VsZCBiZSBzb21ldGhpbmcgbGlrZToKLSAgIyBsb29raW5nIGF0IGRldmljZSAvZGV2aWNlcy9zb21ldGhpbmcvLi4uLy4uLi8uLi4KLSAgIyBLRVJORUxTPSJ0dHlVU0IwIgotICAjIFNVQlNZU1RFTVM9Li4uCi0gICMgRFJJVkVSUz0uLi4KLSAgIyBBVFRSU3tmb299PS4uLgotICAjIEFUVFJTe2Jhcn09Li4uCi0gICMgLi4uCi0gIGZvciBsaW5lIGluIF9HZXRUdHlVU0JJbmZvKHR0eV9zdHJpbmcpLnNwbGl0bGluZXMoKToKLSAgICBidXNfbWF0Y2ggPSBfQlVTX05VTV9SRUdFWC5tYXRjaChsaW5lKQotICAgIGRldmljZV9tYXRjaCA9IF9ERVZJQ0VfTlVNX1JFR0VYLm1hdGNoKGxpbmUpCi0gICAgaWYgYnVzX21hdGNoIGFuZCBidXNfbnVtID09IE5vbmU6Ci0gICAgICBidXNfbnVtID0gaW50KGJ1c19tYXRjaC5ncm91cCgxKSkKLSAgICBpZiBkZXZpY2VfbWF0Y2ggYW5kIGRldmljZV9udW0gPT0gTm9uZToKLSAgICAgIGRldmljZV9udW0gPSBpbnQoZGV2aWNlX21hdGNoLmdyb3VwKDEpKQotICBpZiBidXNfbnVtIGlzIE5vbmUgb3IgZGV2aWNlX251bSBpcyBOb25lOgotICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0luZm8gbm90IGZvdW5kJykKLSAgcmV0dXJuIChidXNfbnVtLCBkZXZpY2VfbnVtKQotCi0KLWRlZiBHZXRCdXNEZXZpY2VUb1RUWU1hcCgpOgotICAiIiJHZXRzIGFsbCBtYXBwaW5ncyBmcm9tIChidXMsIGRldmljZSkgdG8gdHR5VVNCIHN0cmluZy4KLQotICBHZXRzIG1hcHBpbmcgZnJvbSAoYnVzLCBkZXZpY2UpIHRvIHR0eVVTQiBzdHJpbmcgKGUuZy4gJ3R0eVVTQjAnKSwKLSAgZm9yIGFsbCB0dHlVU0Igc3RyaW5ncyBjdXJyZW50bHkgYWN0aXZlLgotCi0gIFJldHVybnM6Ci0gICAgW2RpY3RdIERpY3QgdGhhdCBtYXBzIChidXMsIGRldmljZSkgdG8gdHR5VVNCIHN0cmluZwotICAiIiIKLSAgcmVzdWx0ID0ge30KLSAgZm9yIHR0eSBpbiBHZXRUVFlMaXN0KCk6Ci0gICAgcmVzdWx0W0dldEJ1c0RldmljZUZyb21UVFkodHR5KV0gPSB0dHkKLSAgcmV0dXJuIHJlc3VsdAotCi0KLSMgVGhpcyBkaWN0aW9uYXJ5IGRlc2NyaWJlZCB0aGUgbWFwcGluZyBiZXR3ZWVuIHBoeXNpY2FsIGFuZAotIyB2aXJ0dWFsIHBvcnRzIG9uIGEgUGx1Z2FibGUgNy1Qb3J0IEh1YiAobW9kZWwgVVNCMi1IVUI3QkMpLgotIyBLZXlzIGFyZSB0aGUgdmlydHVhbCBwb3J0cywgdmFsdWVzIGFyZSB0aGUgcGh5c2ljYWwgcG9ydC4KLSMgVGhlIGVudHJ5IDQ6ezE6NCwgMjozLCAzOjIsIDQ6MX0gaW5kaWNhdGVzIHRoYXQgdmlydHVhbCBwb3J0Ci0jIDQgY29ubmVjdHMgdG8gYW5vdGhlciAndmlydHVhbCcgaHViIHRoYXQgaXRzZWxmIGhhcyB0aGUKLSMgdmlydHVhbC10by1waHlzaWNhbCBwb3J0IG1hcHBpbmcgezE6NCwgMjozLCAzOjIsIDQ6MX0uCi0KLQotZGVmIFRlc3RVU0JUb3BvbG9neVNjcmlwdCgpOgotICAiIiJUZXN0IGRpc3BsYXkgYW5kIGh1YiBpZGVudGlmaWNhdGlvbi4iIiIKLSAgIyBUaGUgZm9sbG93aW5nIG1ha2VzIGxvZ2dlci5pbmZvIGJlaGF2ZSBwcmV0dHkgbXVjaCBsaWtlIHByaW50Ci0gICMgZHVyaW5nIHRoaXMgdGVzdCBzY3JpcHQuCi0gIGxvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKG1lc3NhZ2UpcycsIHN0cmVhbT1zeXMuc3Rkb3V0KQotICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQotCi0gICMgSWRlbnRpZmljYXRpb24gY3JpdGVyaWEgZm9yIFBsdWdhYmxlIDctUG9ydCBIdWIKLSAgbG9nZ2VyLmluZm8oJz09PT0gVVNCIFRPUE9MT0dZIFNDUklQVCBURVNUID09PT0nKQotICBsb2dnZXIuaW5mbygnJykKLQotICAjIERpc3BsYXkgZGV2aWNlcwotICBsb2dnZXIuaW5mbygnPT09PSBERVZJQ0UgRElTUExBWSA9PT09JykKLSAgZGV2aWNlX3RyZWVzID0gR2V0QnVzTnVtYmVyVG9EZXZpY2VUcmVlTWFwKCkKLSAgZm9yIGRldmljZV90cmVlIGluIGRldmljZV90cmVlcy52YWx1ZXMoKToKLSAgICBkZXZpY2VfdHJlZS5EaXNwbGF5KCkKLSAgbG9nZ2VyLmluZm8oJycpCi0KLSAgIyBEaXNwbGF5IFRUWSBpbmZvcm1hdGlvbiBhYm91dCBkZXZpY2VzIHBsdWdnZWQgaW50byBodWJzLgotICBsb2dnZXIuaW5mbygnPT09PSBUVFkgSU5GT1JNQVRJT04gPT09PScpCi0gIGZvciBwb3J0X21hcCBpbiBHZXRBbGxQaHlzaWNhbFBvcnRUb1RUWU1hcHMoCi0gICAgICB1c2JfaHVicy5BTExfSFVCUywgZGV2aWNlX3RyZWVfbWFwPWRldmljZV90cmVlcyk6Ci0gICAgbG9nZ2VyLmluZm8oJyVzJywgcG9ydF9tYXApCi0gIGxvZ2dlci5pbmZvKCcnKQotCi0gICMgRGlzcGxheSBzZXJpYWwgbnVtYmVyIGluZm9ybWF0aW9uIGFib3V0IGRldmljZXMgcGx1Z2dlZCBpbnRvIGh1YnMuCi0gIGxvZ2dlci5pbmZvKCc9PT09IFNFUklBTCBOVU1CRVIgSU5GT1JNQVRJT04gPT09PScpCi0gIGZvciBwb3J0X21hcCBpbiBHZXRBbGxQaHlzaWNhbFBvcnRUb1NlcmlhbE1hcHMoCi0gICAgICB1c2JfaHVicy5BTExfSFVCUywgZGV2aWNlX3RyZWVfbWFwPWRldmljZV90cmVlcyk6Ci0gICAgbG9nZ2VyLmluZm8oJyVzJywgcG9ydF9tYXApCi0KLSAgcmV0dXJuIDAKLQotCi1kZWYgcGFyc2Vfb3B0aW9ucyhhcmd2KToKLSAgIiIiUGFyc2VzIGFuZCBjaGVja3MgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zLgotCi0gIFJldHVybnM6Ci0gICAgQSB0dXBsZSBjb250YWluaW5nIHRoZSBvcHRpb25zIHN0cnVjdHVyZSBhbmQgYSBsaXN0IG9mIGNhdGVnb3JpZXMgdG8KLSAgICBiZSB0cmFjZWQuCi0gICIiIgotICBVU0FHRSA9ICcnJy4vZmluZF91c2JfZGV2aWNlcyBbLS1oZWxwXQotICAgIFRoaXMgc2NyaXB0IHNob3dzIHRoZSBtYXBwaW5nIGJldHdlZW4gVVNCIGRldmljZXMgYW5kIHBvcnQgbnVtYmVycy4KLSAgICBDbGllbnRzIGFyZSBub3QgaW50ZW5kZWQgdG8gY2FsbCB0aGlzIHNjcmlwdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi0gICAgQ2xpZW50cyBhcmUgaW50ZW5kZWQgdG8gY2FsbCB0aGUgZnVuY3Rpb25zIGluIHRoaXMgc2NyaXB0IGRpcmVjdGx5LgotICAgIEZvciBpbnN0YW5jZSwgR2V0QWxsUGh5c2ljYWxQb3J0VG9TZXJpYWxNYXBzKC4uLikKLSAgICBSdW5uaW5nIHRoaXMgc2NyaXB0IHdpdGggLS1oZWxwIHdpbGwgZGlzcGxheSB0aGlzIG1lc3NhZ2UuCi0gICAgUnVubmluZyB0aGlzIHNjcmlwdCB3aXRob3V0IC0taGVscCB3aWxsIGRpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQKLSAgICBkZXZpY2VzIGF0dGFjaGVkLCBUVFkgbWFwcGluZywgYW5kIHNlcmlhbCBudW1iZXIgbWFwcGluZywKLSAgICBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gU2VlIGRlc2lnbiBkb2N1bWVudCBmb3IgQVBJIGRvY3VtZW50YXRpb24uCi0gICcnJwotICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcih1c2FnZT1VU0FHRSkKLSAgcmV0dXJuIHBhcnNlci5wYXJzZV9hcmdzKGFyZ3ZbMTpdKQotCi1kZWYgbWFpbigpOgotICBwYXJzZV9vcHRpb25zKHN5cy5hcmd2KQotICBUZXN0VVNCVG9wb2xvZ3lTY3JpcHQoKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9maW5kX3VzYl9kZXZpY2VzX3Rlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9maW5kX3VzYl9kZXZpY2VzX3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGU4YjAwYzguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvZmluZF91c2JfZGV2aWNlc190ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzc5ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0KLSIiIgotVW5pdCB0ZXN0cyBmb3IgdGhlIGNvbnRlbnRzIG9mIGZpbmRfdXNiX2RldmljZXMucHkuCi0KLURldmljZSB0cmVlIGZvciB0aGVzZSB0ZXN0cyBpcyBhcyBmb2xsb3dzOgotQnVzIDAwMToKLTE6IERldmljZSAwMTEgImZvbyIKLTI6IERldmljZSAwMTIgImJhciIKLTM6IERldmljZSAwMTMgImJheiIKLQotQnVzIDAwMjoKLTE6IERldmljZSAwMTEgInF1dXgiCi0yOiBEZXZpY2UgMDIwICJNeSBUZXN0IEhVQiIgI2h1YiAxCi0yOjE6IERldmljZSAwMjEgImJhdHRvcl9wN19oMV90MCIgI3BoeXNpY2FsIHBvcnQgNyBvbiBodWIgMSwgb24gdHR5VVNCMAotMjozOiBEZXZpY2UgMDIyICJiYXR0b3JfcDVfaDFfdDEiICNwaHlzaWNhbCBwb3J0IDUgb24gaHViIDEsIG9uIHR0eVVTQjEKLTI6NDogRGV2aWNlIDAyMyAiTXkgVGVzdCBJbnRlcm5hbCBIVUIiICNpbnRlcm5hbCBzZWN0aW9uIG9mIGh1YiAxCi0yOjQ6MjogRGV2aWNlIDAyNCAiYmF0dG9yX3AzX2gxX3QyIiAjcGh5c2ljYWwgcG9ydCAzIG9uIGh1YiAxLCBvbiB0dHlVU0IyCi0yOjQ6MzogRGV2aWNlIDAyNiAiTm90IGEgQmF0dGVyeSBNb25pdG9yIiAjcGh5c2ljYWwgcG9ydCAxIG9uIGh1YiAxLCBvbiB0dHlVU0IzCi0yOjQ6NDogRGV2aWNlIDAyNSAiYmF0dG9yX3AxX2gxX3QzIiAjcGh5c2ljYWwgcG9ydCAxIG9uIGh1YiAxLCBvbiB0dHlVU0IzCi0zOiBEZXZpY2UgMTAwICJNeSBUZXN0IEhVQiIgI2h1YiAyCi0zOjQ6IERldmljZSAxMDEgIk15IFRlc3QgSW50ZXJuYWwgSFVCIiAjaW50ZXJuYWwgc2VjdGlvbiBvZiBodWIgMgotMzo0OjQ6IERldmljZSAxMDIgImJhdHRvcl9wMV9oMl90NCIgI3BoeXNpY2FsIHBvcnQgMSBvbiBodWIgMiwgb24gdHR5dXNiNAotIiIiCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGJhdHRvcl9kZXZpY2VfbWFwcGluZwotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgZmluZF91c2JfZGV2aWNlcwotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgbHN1c2IKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHVzYl9odWJzCi0KLXdpdGggZGV2aWxfZW52LlN5c1BhdGgoZGV2aWxfZW52LlBZTU9DS19QQVRIKToKLSAgaW1wb3J0IG1vY2sgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCi0KLSMgT3V0cHV0IG9mIGxzdXNiLmxzdXNiKCkuCi0jIFdlIGp1c3QgdGVzdCB0aGF0IHRoZSBkaWN0aW9uYXJ5IGlzIHdvcmtpbmcgYnkgY3JlYXRpbmcgYW4KLSMgIklEIG51bWJlciIgZXF1YWwgdG8gKGJ1c19udW0qMTAwMCkrZGV2aWNlX251bSBhbmQgc2VlaW5nIGlmCi0jIGl0IGlzIHBpY2tlZCB1cCBjb3JyZWN0bHkuIEFsc28gd2UgdGVzdCB0aGUgZGVzY3JpcHRpb24KLQotREVWTElTVCA9IFsoMSwgMTEsICdmb28nKSwKLSAgICAgICAgICAgKDEsIDEyLCAnYmFyJyksCi0gICAgICAgICAgICgxLCAxMywgJ2JheicpLAotICAgICAgICAgICAoMiwgMTEsICdxdXV4JyksCi0gICAgICAgICAgICgyLCAyMCwgJ015IFRlc3QgSFVCJyksCi0gICAgICAgICAgICgyLCAyMSwgJ0lEIDA0MDM6NjAwMSBiYXR0b3JfcDdfaDFfdDAnKSwKLSAgICAgICAgICAgKDIsIDIyLCAnSUQgMDQwMzo2MDAxIGJhdHRvcl9wNV9oMV90MScpLAotICAgICAgICAgICAoMiwgMjMsICdNeSBUZXN0IEludGVybmFsIEhVQicpLAotICAgICAgICAgICAoMiwgMjQsICdJRCAwNDAzOjYwMDEgYmF0dG9yX3AzX2gxX3QyJyksCi0gICAgICAgICAgICgyLCAyNSwgJ0lEIDA0MDM6NjAwMSBiYXR0b3JfcDFfaDFfdDMnKSwKLSAgICAgICAgICAgKDIsIDI2LCAnTm90IGEgQmF0dGVyeSBNb25pdG9yJyksCi0gICAgICAgICAgICgyLCAxMDAsICdNeSBUZXN0IEhVQicpLAotICAgICAgICAgICAoMiwgMTAxLCAnTXkgVGVzdCBJbnRlcm5hbCBIVUInKSwKLSAgICAgICAgICAgKDIsIDEwMiwgJ0lEIDA0MDM6NjAwMSBiYXR0b3JfcDFfaDFfdDQnKV0KLQotTFNVU0JfT1VUUFVUID0gWwotICB7J2J1cyc6IGIsICdkZXZpY2UnOiBkLCAnZGVzYyc6IHQsICdpZCc6ICgxMDAwKmIpK2R9Ci0gICAgICAgZm9yIChiLCBkLCB0KSBpbiBERVZMSVNUXQotCi0KLSMgTm90ZTogIkxldiIsICJDbnQiLCAiU3BkIiwgYW5kICJNeENoIiBhcmUgbm90IHVzZWQgYnkgcGFyc2VyLAotIyBzbyB3ZSBqdXN0IGxlYXZlIHRoZW0gYXMgemVyb3MgaGVyZS4gQWxzbyBub3RlIHRoYXQgdGhlIHBvcnQKLSMgbnVtYmVycyByZXBvcnRlZCBoZXJlIHN0YXJ0IGF0IDAsIHNvIHRoZXkncmUgMSBsZXNzIHRoYW4gdGhlCi0jIHBvcnQgbnVtYmVycyByZXBvcnRlZCBlbHNld2hlcmUuCi1VU0JfREVWSUNFU19PVVRQVVQgPSAnJycKLVQ6ICBCdXM9MDEgTGV2PTAwIFBybnQ9MDAgUG9ydD0wMCBDbnQ9MDAgRGV2Iz0gMTEgU3BkPTAwMCBNeENoPTAwCi1TOiAgU2VyaWFsTnVtYmVyPUZvb1NlcmlhbAotVDogIEJ1cz0wMSBMZXY9MDAgUHJudD0wMCBQb3J0PTAxIENudD0wMCBEZXYjPSAxMiBTcGQ9MDAwIE14Q2g9MDAKLVM6ICBTZXJpYWxOdW1iZXI9QmFyU2VyaWFsCi1UOiAgQnVzPTAxIExldj0wMCBQcm50PTAwIFBvcnQ9MDIgQ250PTAwIERldiM9IDEzIFNwZD0wMDAgTXhDaD0wMAotUzogIFNlcmlhbE51bWJlcj1CYXpTZXJpYWwKLQotVDogIEJ1cz0wMiBMZXY9MDAgUHJudD0wMCBQb3J0PTAwIENudD0wMCBEZXYjPSAxMSBTcGQ9MDAwIE14Q2g9MDAKLQotVDogIEJ1cz0wMiBMZXY9MDAgUHJudD0wMCBQb3J0PTAxIENudD0wMCBEZXYjPSAyMCBTcGQ9MDAwIE14Q2g9MDAKLVQ6ICBCdXM9MDIgTGV2PTAwIFBybnQ9MjAgUG9ydD0wMCBDbnQ9MDAgRGV2Iz0gMjEgU3BkPTAwMCBNeENoPTAwCi1TOiAgU2VyaWFsTnVtYmVyPUJhdHRPcjAKLVQ6ICBCdXM9MDIgTGV2PTAwIFBybnQ9MjAgUG9ydD0wMiBDbnQ9MDAgRGV2Iz0gMjIgU3BkPTAwMCBNeENoPTAwCi1TOiAgU2VyaWFsTnVtYmVyPUJhdHRPcjEKLVQ6ICBCdXM9MDIgTGV2PTAwIFBybnQ9MjAgUG9ydD0wMyBDbnQ9MDAgRGV2Iz0gMjMgU3BkPTAwMCBNeENoPTAwCi1UOiAgQnVzPTAyIExldj0wMCBQcm50PTIzIFBvcnQ9MDEgQ250PTAwIERldiM9IDI0IFNwZD0wMDAgTXhDaD0wMAotUzogIFNlcmlhbE51bWJlcj1CYXR0T3IyCi1UOiAgQnVzPTAyIExldj0wMCBQcm50PTIzIFBvcnQ9MDMgQ250PTAwIERldiM9IDI1IFNwZD0wMDAgTXhDaD0wMAotUzogIFNlcmlhbE51bWJlcj1CYXR0T3IzCi1UOiAgQnVzPTAyIExldj0wMCBQcm50PTIzIFBvcnQ9MDIgQ250PTAwIERldiM9IDI2IFNwZD0wMDAgTXhDaD0wMAotCi1UOiAgQnVzPTAyIExldj0wMCBQcm50PTAwIFBvcnQ9MDIgQ250PTAwIERldiM9MTAwIFNwZD0wMDAgTXhDaD0wMAotVDogIEJ1cz0wMiBMZXY9MDAgUHJudD0xMDAgUG9ydD0wMyBDbnQ9MDAgRGV2Iz0xMDEgU3BkPTAwMCBNeENoPTAwCi1UOiAgQnVzPTAyIExldj0wMCBQcm50PTEwMSBQb3J0PTAzIENudD0wMCBEZXYjPTEwMiBTcGQ9MDAwIE14Q2g9MDAKLScnJwotCi1SQVdfTFNVU0JfT1VUUFVUID0gJycnCi1CdXMgMDAxIERldmljZSAwMTE6IEZBU1QgZm9vCi1CdXMgMDAxIERldmljZSAwMTI6IEZBU1QgYmFyCi1CdXMgMDAxIERldmljZSAwMTM6IGJhegotQnVzIDAwMiBEZXZpY2UgMDExOiBxdXV4Ci1CdXMgMDAyIERldmljZSAwMjA6IE15IFRlc3QgSFVCCi1CdXMgMDAyIERldmljZSAwMjE6IElEIDA0MDM6NjAwMSBiYXR0b3JfcDdfaDFfdDAKLUJ1cyAwMDIgRGV2aWNlIDAyMjogSUQgMDQwMzo2MDAxIGJhdHRvcl9wNV9oMV90MQotQnVzIDAwMiBEZXZpY2UgMDIzOiBNeSBUZXN0IEludGVybmFsIEhVQgotQnVzIDAwMiBEZXZpY2UgMDI0OiBJRCAwNDAzOjYwMDEgYmF0dG9yX3AzX2gxX3QyCi1CdXMgMDAyIERldmljZSAwMjU6IElEIDA0MDM6NjAwMSBiYXR0b3JfcDFfaDFfdDMKLUJ1cyAwMDIgRGV2aWNlIDAyNjogTm90IGEgQmF0dGVyeSBNb25pdG9yCi1CdXMgMDAyIERldmljZSAxMDA6IE15IFRlc3QgSFVCCi1CdXMgMDAyIERldmljZSAxMDE6IE15IFRlc3QgSW50ZXJuYWwgSFVCCi1CdXMgMDAyIERldmljZSAxMDI6IElEIDA0MDM6NjAwMSBiYXR0b3JfcDFfaDFfdDQKLScnJwotCi1MSVNUX1RUWV9PVVRQVVQgPSAnJycKLXR0eVVTQjAKLVNvbWV0aGluZy1lbHNlLTAKLXR0eVVTQjEKLXR0eVVTQjIKLVNvbWV0aGluZy1lbHNlLTEKLXR0eVVTQjMKLXR0eVVTQjQKLVNvbWV0aGluZy1lbHNlLTIKLXR0eVVTQjUKLScnJwotCi0jIE5vdGU6IFRoZSByZWFsIG91dHB1dCB3aWxsIGhhdmUgbXVsdGlwbGUgbGluZXMgd2l0aAotIyBBVFRSU3tidXNudW19IGFuZCBBVFRSU3tkZXZudW19LCBidXQgb25seSB0aGUgZmlyc3QKLSMgb25lIGNvdW50cy4gVGh1cyB0aGUgdGVzdCBvdXRwdXQgZHVwbGljYXRlcyB0aGlzLgotVURFVkFETV9VU0JUVFkwX09VVFBVVCA9ICcnJwotQVRUUlN7YnVzbnVtfT09IjIiCi1BVFRSU3tkZXZudW19PT0iMjEiCi1BVFRSU3tidXNudW19PT0iMCIKLUFUVFJTe2Rldm51bX09PSIwIgotJycnCi0KLVVERVZBRE1fVVNCVFRZMV9PVVRQVVQgPSAnJycKLUFUVFJTe2J1c251bX09PSIyIgotQVRUUlN7ZGV2bnVtfT09IjIyIgotQVRUUlN7YnVzbnVtfT09IjAiCi1BVFRSU3tkZXZudW19PT0iMCIKLScnJwotCi1VREVWQURNX1VTQlRUWTJfT1VUUFVUID0gJycnCi1BVFRSU3tidXNudW19PT0iMiIKLUFUVFJTe2Rldm51bX09PSIyNCIKLUFUVFJTe2J1c251bX09PSIwIgotQVRUUlN7ZGV2bnVtfT09IjAiCi0nJycKLQotVURFVkFETV9VU0JUVFkzX09VVFBVVCA9ICcnJwotQVRUUlN7YnVzbnVtfT09IjIiCi1BVFRSU3tkZXZudW19PT0iMjUiCi1BVFRSU3tidXNudW19PT0iMCIKLUFUVFJTe2Rldm51bX09PSIwIgotJycnCi0KLVVERVZBRE1fVVNCVFRZNF9PVVRQVVQgPSAnJycKLUFUVFJTe2J1c251bX09PSIyIgotQVRUUlN7ZGV2bnVtfT09IjEwMiIKLUFUVFJTe2J1c251bX09PSIwIgotQVRUUlN7ZGV2bnVtfT09IjAiCi0nJycKLQotVURFVkFETV9VU0JUVFk1X09VVFBVVCA9ICcnJwotQVRUUlN7YnVzbnVtfT09IjIiCi1BVFRSU3tkZXZudW19PT0iMjYiCi1BVFRSU3tidXNudW19PT0iMCIKLUFUVFJTe2Rldm51bX09PSIwIgotJycnCi0KLVVERVZBRE1fT1VUUFVUX0RJQ1QgPSB7Ci0gICd0dHlVU0IwJzogVURFVkFETV9VU0JUVFkwX09VVFBVVCwKLSAgJ3R0eVVTQjEnOiBVREVWQURNX1VTQlRUWTFfT1VUUFVULAotICAndHR5VVNCMic6IFVERVZBRE1fVVNCVFRZMl9PVVRQVVQsCi0gICd0dHlVU0IzJzogVURFVkFETV9VU0JUVFkzX09VVFBVVCwKLSAgJ3R0eVVTQjQnOiBVREVWQURNX1VTQlRUWTRfT1VUUFVULAotICAndHR5VVNCNSc6IFVERVZBRE1fVVNCVFRZNV9PVVRQVVR9Ci0KLSMgSWRlbnRpZmljYXRpb24gY3JpdGVyaWEgZm9yIFBsdWdhYmxlIDctUG9ydCBIdWIKLWRlZiBpc1Rlc3RIdWIobm9kZSk6Ci0gICIiIkNoZWNrIGlmIGEgbm9kZSBpcyBhIFBsdWdhYmxlIDctUG9ydCBIdWIKLSAgKE1vZGVsIFVTQjItSFVCN0JDKQotICBUaGUgdG9wb2xvZ3kgb2YgdGhpcyBkZXZpY2UgaXMgYSA0LXBvcnQgaHViLAotICB3aXRoIGFub3RoZXIgNC1wb3J0IGh1YiBjb25uZWN0ZWQgb24gcG9ydCA0LgotICAiIiIKLSAgaWYgbm90IGlzaW5zdGFuY2Uobm9kZSwgZmluZF91c2JfZGV2aWNlcy5VU0JEZXZpY2VOb2RlKToKLSAgICByZXR1cm4gRmFsc2UKLSAgaWYgJ1Rlc3QgSFVCJyBub3QgaW4gbm9kZS5kZXNjOgotICAgIHJldHVybiBGYWxzZQotICBpZiBub3Qgbm9kZS5IYXNQb3J0KDQpOgotICAgIHJldHVybiBGYWxzZQotICByZXR1cm4gJ1Rlc3QgSW50ZXJuYWwgSFVCJyBpbiBub2RlLlBvcnRUb0RldmljZSg0KS5kZXNjCi0KLVRFU1RfSFVCID0gdXNiX2h1YnMuSHViVHlwZShpc1Rlc3RIdWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgezE6NywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjo2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOjUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ6ezE6NCwgMjozLCAzOjIsIDQ6MX19KQotCi1jbGFzcyBVU0JTY3JpcHRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIGZpbmRfdXNiX2RldmljZXMuX0dldFR0eVVTQkluZm8gPSBtb2NrLk1vY2soCi0gICAgICAgIHNpZGVfZWZmZWN0PWxhbWJkYSB4OiBVREVWQURNX09VVFBVVF9ESUNUW3hdKQotICAgIGZpbmRfdXNiX2RldmljZXMuX0dldFBhcnNlZExTVVNCT3V0cHV0ID0gbW9jay5Nb2NrKAotICAgICAgICByZXR1cm5fdmFsdWU9TFNVU0JfT1VUUFVUKQotICAgIGZpbmRfdXNiX2RldmljZXMuX0dldFVTQkRldmljZXNPdXRwdXQgPSBtb2NrLk1vY2soCi0gICAgICAgIHJldHVybl92YWx1ZT1VU0JfREVWSUNFU19PVVRQVVQpCi0gICAgZmluZF91c2JfZGV2aWNlcy5fR2V0Q29tbUxpc3QgPSBtb2NrLk1vY2soCi0gICAgICAgIHJldHVybl92YWx1ZT1MSVNUX1RUWV9PVVRQVVQpCi0gICAgbHN1c2IucmF3X2xzdXNiID0gbW9jay5Nb2NrKAotICAgICAgICByZXR1cm5fdmFsdWU9UkFXX0xTVVNCX09VVFBVVCkKLQotICBkZWYgdGVzdElzQmF0dE9yKHNlbGYpOgotICAgIGJkID0gZmluZF91c2JfZGV2aWNlcy5HZXRCdXNOdW1iZXJUb0RldmljZVRyZWVNYXAoKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXR0b3JfZGV2aWNlX21hcHBpbmcuSXNCYXR0T3IoJ3R0eVVTQjMnLCBiZCkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShiYXR0b3JfZGV2aWNlX21hcHBpbmcuSXNCYXR0T3IoJ3R0eVVTQjUnLCBiZCkpCi0KLSAgZGVmIHRlc3RHZXRCYXR0T3JzKHNlbGYpOgotICAgIGJkID0gZmluZF91c2JfZGV2aWNlcy5HZXRCdXNOdW1iZXJUb0RldmljZVRyZWVNYXAoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZXRCYXR0T3JMaXN0KGJkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWyd0dHlVU0IwJywgJ3R0eVVTQjEnLCAndHR5VVNCMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAndHR5VVNCMycsICd0dHlVU0I0J10pCi0KLSAgZGVmIHRlc3RHZXRUVFlEZXZpY2VzKHNlbGYpOgotICAgIHBwID0gZmluZF91c2JfZGV2aWNlcy5HZXRBbGxQaHlzaWNhbFBvcnRUb1RUWU1hcHMoW1RFU1RfSFVCXSkKLSAgICByZXN1bHQgPSBsaXN0KHBwKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdFswXSwgezc6J3R0eVVTQjAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6J3R0eVVTQjEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6J3R0eVVTQjInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI6J3R0eVVTQjUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6J3R0eVVTQjMnfSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHRbMV0sIHsxOid0dHlVU0I0J30pCi0KLSAgZGVmIHRlc3RHZXRQb3J0RGV2aWNlTWFwcGluZyhzZWxmKToKLSAgICBwcCA9IGZpbmRfdXNiX2RldmljZXMuR2V0QWxsUGh5c2ljYWxQb3J0VG9CdXNEZXZpY2VNYXBzKFtURVNUX0hVQl0pCi0gICAgcmVzdWx0ID0gbGlzdChwcCkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHRbMF0sIHs3OigyLCAyMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTooMiwgMjIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6KDIsIDI0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOigyLCAyNiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTooMiwgMjUpfSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHRbMV0sIHsxOigyLCAxMDIpfSkKLQotICBkZWYgdGVzdEdldFNlcmlhbE1hcHBpbmcoc2VsZik6Ci0gICAgcHAgPSBmaW5kX3VzYl9kZXZpY2VzLkdldEFsbFBoeXNpY2FsUG9ydFRvU2VyaWFsTWFwcyhbVEVTVF9IVUJdKQotICAgIHJlc3VsdCA9IGxpc3QocHApCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0WzBdLCB7NzonQmF0dE9yMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTonQmF0dE9yMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzonQmF0dE9yMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTonQmF0dE9yMyd9KQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdFsxXSwge30pCi0KLSAgZGVmIHRlc3RGYXN0RGV2aWNlRGVzY3JpcHRpb25zKHNlbGYpOgotICAgIGJkID0gZmluZF91c2JfZGV2aWNlcy5HZXRCdXNOdW1iZXJUb0RldmljZVRyZWVNYXAoKQotICAgIGRldl9mb28gPSBiZFsxXS5GaW5kRGV2aWNlTnVtYmVyKDExKQotICAgIGRldl9iYXIgPSBiZFsxXS5GaW5kRGV2aWNlTnVtYmVyKDEyKQotICAgIGRldl9iYXR0b3JfcDdfaDFfdDAgPSBiZFsyXS5GaW5kRGV2aWNlTnVtYmVyKDIxKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRldl9mb28uZGVzYywgJ0ZBU1QgZm9vJykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhkZXZfYmFyLmRlc2MsICdGQVNUIGJhcicpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoZGV2X2JhdHRvcl9wN19oMV90MC5kZXNjLAotICAgICAgICAnSUQgMDQwMzo2MDAxIGJhdHRvcl9wN19oMV90MCcpCi0KLSAgZGVmIHRlc3REZXZpY2VEZXNjcmlwdGlvbnMoc2VsZik6Ci0gICAgYmQgPSBmaW5kX3VzYl9kZXZpY2VzLkdldEJ1c051bWJlclRvRGV2aWNlVHJlZU1hcChmYXN0PUZhbHNlKQotICAgIGRldl9mb28gPSBiZFsxXS5GaW5kRGV2aWNlTnVtYmVyKDExKQotICAgIGRldl9iYXIgPSBiZFsxXS5GaW5kRGV2aWNlTnVtYmVyKDEyKQotICAgIGRldl9iYXR0b3JfcDdfaDFfdDAgPSBiZFsyXS5GaW5kRGV2aWNlTnVtYmVyKDIxKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRldl9mb28uZGVzYywgJ2ZvbycpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoZGV2X2Jhci5kZXNjLCAnYmFyJykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhkZXZfYmF0dG9yX3A3X2gxX3QwLmRlc2MsCi0gICAgICAgICdJRCAwNDAzOjYwMDEgYmF0dG9yX3A3X2gxX3QwJykKLQotICBkZWYgdGVzdERldmljZUluZm9ybWF0aW9uKHNlbGYpOgotICAgIGJkID0gZmluZF91c2JfZGV2aWNlcy5HZXRCdXNOdW1iZXJUb0RldmljZVRyZWVNYXAoZmFzdD1GYWxzZSkKLSAgICBkZXZfZm9vID0gYmRbMV0uRmluZERldmljZU51bWJlcigxMSkKLSAgICBkZXZfYmFyID0gYmRbMV0uRmluZERldmljZU51bWJlcigxMikKLSAgICBkZXZfYmF0dG9yX3A3X2gxX3QwID0gYmRbMl0uRmluZERldmljZU51bWJlcigyMSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhkZXZfZm9vLmluZm9bJ2lkJ10sIDEwMTEpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoZGV2X2Jhci5pbmZvWydpZCddLCAxMDEyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRldl9iYXR0b3JfcDdfaDFfdDAuaW5mb1snaWQnXSwgMjAyMSkKLQotICBkZWYgdGVzdFNlcmlhbE51bWJlcihzZWxmKToKLSAgICBiZCA9IGZpbmRfdXNiX2RldmljZXMuR2V0QnVzTnVtYmVyVG9EZXZpY2VUcmVlTWFwKGZhc3Q9RmFsc2UpCi0gICAgZGV2X2ZvbyA9IGJkWzFdLkZpbmREZXZpY2VOdW1iZXIoMTEpCi0gICAgZGV2X2JhciA9IGJkWzFdLkZpbmREZXZpY2VOdW1iZXIoMTIpCi0gICAgZGV2X2JhdHRvcl9wN19oMV90MCA9IGJkWzJdLkZpbmREZXZpY2VOdW1iZXIoMjEpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoZGV2X2Zvby5zZXJpYWwsICdGb29TZXJpYWwnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRldl9iYXIuc2VyaWFsLCAnQmFyU2VyaWFsJykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhkZXZfYmF0dG9yX3A3X2gxX3QwLnNlcmlhbCwgJ0JhdHRPcjAnKQotCi0gIGRlZiB0ZXN0QmF0dE9yRGljdE1hcHBpbmcoc2VsZik6Ci0gICAgbWFwX2RpY3QgPSB7J1Bob25lMSc6J0JhdHRPcjEnLCAnUGhvbmUyJzonQmF0dE9yMicsICdQaG9uZTMnOidCYXR0T3IzJ30KLSAgICBhMSA9IGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZXRCYXR0T3JQYXRoRnJvbVBob25lU2VyaWFsKAotICAgICAgICAgICAgICdQaG9uZTEnLCBzZXJpYWxfbWFwPW1hcF9kaWN0KQotICAgIGEyID0gYmF0dG9yX2RldmljZV9tYXBwaW5nLkdldEJhdHRPclBhdGhGcm9tUGhvbmVTZXJpYWwoCi0gICAgICAgICAgICAgJ1Bob25lMicsIHNlcmlhbF9tYXA9bWFwX2RpY3QpCi0gICAgYTMgPSBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2V0QmF0dE9yUGF0aEZyb21QaG9uZVNlcmlhbCgKLSAgICAgICAgICAgICAnUGhvbmUzJywgc2VyaWFsX21hcD1tYXBfZGljdCkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhhMSwgJy9kZXYvdHR5VVNCMScpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoYTIsICcvZGV2L3R0eVVTQjInKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGEzLCAnL2Rldi90dHlVU0IzJykKLQotICBkZWYgdGVzdEJhdHRPckRpY3RGcm9tRmlsZU1hcHBpbmcoc2VsZik6Ci0gICAgdHJ5OgotICAgICAgbWFwX2RpY3QgPSB7J1Bob25lMSc6J0JhdHRPcjEnLCAnUGhvbmUyJzonQmF0dE9yMicsICdQaG9uZTMnOidCYXR0T3IzJ30KLSAgICAgIGN1cnJfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQotICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oY3Vycl9kaXIsICd0ZXN0JywgJ2RhdGEnLCAndGVzdF93cml0ZV9tYXAuanNvbicpCi0gICAgICBiYXR0b3JfZGV2aWNlX21hcHBpbmcuV3JpdGVTZXJpYWxNYXBGaWxlKGZpbGVuYW1lLCBtYXBfZGljdCkKLSAgICAgIGExID0gYmF0dG9yX2RldmljZV9tYXBwaW5nLkdldEJhdHRPclBhdGhGcm9tUGhvbmVTZXJpYWwoCi0gICAgICAgICAgICAgICAnUGhvbmUxJywgc2VyaWFsX21hcF9maWxlPWZpbGVuYW1lKQotICAgICAgYTIgPSBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2V0QmF0dE9yUGF0aEZyb21QaG9uZVNlcmlhbCgKLSAgICAgICAgICAgICAgICdQaG9uZTInLCBzZXJpYWxfbWFwX2ZpbGU9ZmlsZW5hbWUpCi0gICAgICBhMyA9IGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZXRCYXR0T3JQYXRoRnJvbVBob25lU2VyaWFsKAotICAgICAgICAgICAgICAgJ1Bob25lMycsIHNlcmlhbF9tYXBfZmlsZT1maWxlbmFtZSkKLSAgICBmaW5hbGx5OgotICAgICAgb3MucmVtb3ZlKGZpbGVuYW1lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGExLCAnL2Rldi90dHlVU0IxJykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhhMiwgJy9kZXYvdHR5VVNCMicpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoYTMsICcvZGV2L3R0eVVTQjMnKQotCi0gIGRlZiB0ZXN0UmVhZFNlcmlhbE1hcEZpbGUoc2VsZik6Ci0gICAgY3Vycl9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpCi0gICAgbWFwX2RpY3QgPSBiYXR0b3JfZGV2aWNlX21hcHBpbmcuUmVhZFNlcmlhbE1hcEZpbGUoCi0gICAgICAgIG9zLnBhdGguam9pbihjdXJyX2RpciwgJ3Rlc3QnLCAnZGF0YScsICd0ZXN0X3NlcmlhbF9tYXAuanNvbicpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihtYXBfZGljdC5rZXlzKCkpLCAzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hcF9kaWN0WydQaG9uZTEnXSwgJ0JhdHRPcjEnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hcF9kaWN0WydQaG9uZTInXSwgJ0JhdHRPcjInKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hcF9kaWN0WydQaG9uZTMnXSwgJ0JhdHRPcjMnKQotCi1vcmlnaW5hbF9QUFRTTSA9IGZpbmRfdXNiX2RldmljZXMuR2V0QWxsUGh5c2ljYWxQb3J0VG9TZXJpYWxNYXBzCi1vcmlnaW5hbF9QUFRUTSA9IGZpbmRfdXNiX2RldmljZXMuR2V0QWxsUGh5c2ljYWxQb3J0VG9UVFlNYXBzCi1vcmlnaW5hbF9HQkwgPSBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2V0QmF0dE9yTGlzdAotb3JpZ2luYWxfR0JORE0gPSBmaW5kX3VzYl9kZXZpY2VzLkdldEJ1c051bWJlclRvRGV2aWNlVHJlZU1hcAotb3JpZ2luYWxfSUIgPSBiYXR0b3JfZGV2aWNlX21hcHBpbmcuSXNCYXR0T3IKLW9yaWdpbmFsX0dCU00gPSBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2V0QmF0dE9yU2VyaWFsTnVtYmVycwotCi1kZWYgc2V0dXBfYmF0dG9yX3Rlc3Qoc2VyaWFsLCB0dHksIGJhdHRvciwgYnNlcj1Ob25lKToKLSAgc2VyaWFsX21hcHBlciA9IG1vY2suTW9jayhyZXR1cm5fdmFsdWU9c2VyaWFsKQotICB0dHlfbWFwcGVyID0gbW9jay5Nb2NrKHJldHVybl92YWx1ZT10dHkpCi0gIGJhdHRvcl9saXN0ZXIgPSBtb2NrLk1vY2socmV0dXJuX3ZhbHVlPWJhdHRvcikKLSAgZGV2dHJlZSA9IG1vY2suTW9jayhyZXR1cm5fdmFsdWU9Tm9uZSkKLSAgaXNfYmF0dG9yID0gbW9jay5Nb2NrKHNpZGVfZWZmZWN0PWxhbWJkYSB4LCB5OiB4IGluIGJhdHRvcikKLSAgYmF0dG9yX3NlcmlhbHMgPSBtb2NrLk1vY2socmV0dXJuX3ZhbHVlPWJzZXIpCi0gIGZpbmRfdXNiX2RldmljZXMuR2V0QWxsUGh5c2ljYWxQb3J0VG9TZXJpYWxNYXBzID0gc2VyaWFsX21hcHBlcgotICBmaW5kX3VzYl9kZXZpY2VzLkdldEFsbFBoeXNpY2FsUG9ydFRvVFRZTWFwcyA9IHR0eV9tYXBwZXIKLSAgYmF0dG9yX2RldmljZV9tYXBwaW5nLkdldEJhdHRPckxpc3QgPSBiYXR0b3JfbGlzdGVyCi0gIGZpbmRfdXNiX2RldmljZXMuR2V0QnVzTnVtYmVyVG9EZXZpY2VUcmVlTWFwID0gZGV2dHJlZQotICBiYXR0b3JfZGV2aWNlX21hcHBpbmcuSXNCYXR0T3IgPSBpc19iYXR0b3IKLSAgYmF0dG9yX2RldmljZV9tYXBwaW5nLkdldEJhdHRPclNlcmlhbE51bWJlcnMgPSBiYXR0b3Jfc2VyaWFscwotCi1jbGFzcyBCYXR0T3JNYXBwaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICBmaW5kX3VzYl9kZXZpY2VzLkdldEFsbFBoeXNpY2FsUG9ydFRvU2VyaWFsTWFwcyA9IG9yaWdpbmFsX1BQVFNNCi0gICAgZmluZF91c2JfZGV2aWNlcy5HZXRBbGxQaHlzaWNhbFBvcnRUb1RUWU1hcHMgPSBvcmlnaW5hbF9QUFRUTQotICAgIGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZXRCYXR0T3JMaXN0ID0gb3JpZ2luYWxfR0JMCi0gICAgZmluZF91c2JfZGV2aWNlcy5HZXRCdXNOdW1iZXJUb0RldmljZVRyZWVNYXAgPSBvcmlnaW5hbF9HQk5ETQotICAgIGJhdHRvcl9kZXZpY2VfbWFwcGluZy5Jc0JhdHRPciA9IG9yaWdpbmFsX0lCCi0gICAgYmF0dG9yX2RldmljZV9tYXBwaW5nLkdldEJhdHRPclNlcmlhbE51bWJlcnMgPSBvcmlnaW5hbF9HQlNNCi0KLSAgZGVmIHRlc3RfZ2VuZXJhdGVfc2VyaWFsX21hcChzZWxmKToKLSAgICBzZXR1cF9iYXR0b3JfdGVzdChbezE6J1BobjEnLCAyOidQaG4yJywgMzonUGhuMyd9LAotICAgICAgICAgICAgICAgICAgICAgICB7MTonQmF0MScsIDI6J0JhdDInLCAzOidCYXQzJ31dLAotICAgICAgICAgICAgICAgICAgICAgIFt7fSwKLSAgICAgICAgICAgICAgICAgICAgICAgezE6J3R0eVVTQjAnLCAyOid0dHlVU0IxJywgMzondHR5VVNCMid9XSwKLSAgICAgICAgICAgICAgICAgICAgICBbJ3R0eVVTQjAnLCAndHR5VVNCMScsICd0dHlVU0IyJ10sCi0gICAgICAgICAgICAgICAgICAgICAgWydCYXQxJywgJ0JhdDInLCAnQmF0MyddKQotICAgIHJlc3VsdCA9IGJhdHRvcl9kZXZpY2VfbWFwcGluZy5HZW5lcmF0ZVNlcmlhbE1hcCgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgMykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsnUGhuMSddLCAnQmF0MScpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbJ1BobjInXSwgJ0JhdDInKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WydQaG4zJ10sICdCYXQzJykKLQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICBsb2dnaW5nLmdldExvZ2dlcigpLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0gIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9nZW9tZXRyeS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL2dlb21ldHJ5LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTIxNzcwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL2dlb21ldHJ5LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJPYmplY3RzIGZvciBjb252ZW5pZW50IG1hbmlwdWxhdGlvbiBvZiBwb2ludHMgYW5kIG90aGVyIHN1cmZhY2UgYXJlYXMuIiIiCi0KLWltcG9ydCBjb2xsZWN0aW9ucwotCi0KLWNsYXNzIFBvaW50KGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoJ1BvaW50JywgWyd4JywgJ3knXSkpOgotICAiIiJPYmplY3QgdG8gcmVwcmVzZW50IGFuICh4LCB5KSBwb2ludCBvbiBhIHN1cmZhY2UuCi0KLSAgQXJnczoKLSAgICB4LCB5OiBUd28gbnVtZXJpYyBjb29yZGluYXRlcyB0aGF0IGRlZmluZSB0aGUgcG9pbnQuCi0gICIiIgotICBfX3Nsb3RzX18gPSAoKQotCi0gIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICIiIkdldCBhIHVzZWZ1bCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdC4iIiIKLSAgICByZXR1cm4gJyglcywgJXMpJyAlIChzZWxmLngsIHNlbGYueSkKLQotICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6Ci0gICAgIiIiU3VtIG9mIHR3byBwb2ludHMsIGUuZy4gcCArIHEuIiIiCi0gICAgaWYgaXNpbnN0YW5jZShvdGhlciwgUG9pbnQpOgotICAgICAgcmV0dXJuIFBvaW50KHNlbGYueCArIG90aGVyLngsIHNlbGYueSArIG90aGVyLnkpCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0gIGRlZiBfX211bF9fKHNlbGYsIGZhY3Rvcik6Ci0gICAgIiIiTXVsdGlwbGljYXRpb24gb24gdGhlIHJpZ2h0IGlzIG5vdCBpbXBsZW1lbnRlZC4iIiIKLSAgICAjIFRoaXMgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiBhIHR1cGxlIG11bHRpcGxpZWQgYnkgYSBjb25zdGFudAotICAgICMgb24gdGhlIHJpZ2h0LCB3aGljaCBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciBhIFBvaW50LgotICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0gIGRlZiBfX3JtdWxfXyhzZWxmLCBmYWN0b3IpOgotICAgICIiIk11bHRpcGx5IGEgcG9pbnQgYnkgYSBzY2FsYXIgZmFjdG9yIG9uIHRoZSBsZWZ0LCBlLmcuIDIgKiBwLiIiIgotICAgIHJldHVybiBQb2ludChmYWN0b3IgKiBzZWxmLngsIGZhY3RvciAqIHNlbGYueSkKLQotCi1jbGFzcyBSZWN0YW5nbGUoCi0gICAgY29sbGVjdGlvbnMubmFtZWR0dXBsZSgnUmVjdGFuZ2xlJywgWyd0b3BfbGVmdCcsICdib3R0b21fcmlnaHQnXSkpOgotICAiIiJPYmplY3QgdG8gcmVwcmVzZW50IGEgcmVjdGFuZ2xlIG9uIGEgc3VyZmFjZS4KLQotICBBcmdzOgotICAgIHRvcF9sZWZ0OiBBIHBhaXIgb2YgKGxlZnQsIHRvcCkgY29vcmRpbmF0ZXMuIE1pZ2h0IGJlIGdpdmVuIGFzIGEgUG9pbnQKLSAgICAgIG9yIGFzIGEgdHdvLWVsZW1lbnQgc2VxdWVuY2UgKGxpc3QsIHR1cGxlLCBldGMuKS4KLSAgICBib3R0b21fcmlnaHQ6IEEgcGFpciAocmlnaHQsIGJvdHRvbSkgY29vcmRpbmF0ZXMuCi0gICIiIgotICBfX3Nsb3RzX18gPSAoKQotCi0gIGRlZiBfX25ld19fKGNscywgdG9wX2xlZnQsIGJvdHRvbV9yaWdodCk6Ci0gICAgaWYgbm90IGlzaW5zdGFuY2UodG9wX2xlZnQsIFBvaW50KToKLSAgICAgIHRvcF9sZWZ0ID0gUG9pbnQoKnRvcF9sZWZ0KQotICAgIGlmIG5vdCBpc2luc3RhbmNlKGJvdHRvbV9yaWdodCwgUG9pbnQpOgotICAgICAgYm90dG9tX3JpZ2h0ID0gUG9pbnQoKmJvdHRvbV9yaWdodCkKLSAgICByZXR1cm4gc3VwZXIoUmVjdGFuZ2xlLCBjbHMpLl9fbmV3X18oY2xzLCB0b3BfbGVmdCwgYm90dG9tX3JpZ2h0KQotCi0gIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICIiIkdldCBhIHVzZWZ1bCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdC4iIiIKLSAgICByZXR1cm4gJ1slcywgJXNdJyAlIChzZWxmLnRvcF9sZWZ0LCBzZWxmLmJvdHRvbV9yaWdodCkKLQotICBAcHJvcGVydHkKLSAgZGVmIGNlbnRlcihzZWxmKToKLSAgICAiIiJHZXQgdGhlIHBvaW50IGF0IHRoZSBjZW50ZXIgb2YgdGhlIHJlY3RhbmdsZS4iIiIKLSAgICByZXR1cm4gMC41ICogKHNlbGYudG9wX2xlZnQgKyBzZWxmLmJvdHRvbV9yaWdodCkKLQotICBAY2xhc3NtZXRob2QKLSAgZGVmIEZyb21EaWN0KGNscywgZCk6Ci0gICAgIiIiQ3JlYXRlIGEgcmVjdGFuZ2xlIG9iamVjdCBmcm9tIGEgZGljdGlvbmFyeS4KLQotICAgIEFyZ3M6Ci0gICAgICBkOiBBIGRpY3Rpb25hcnkgKG9yIG1hcHBpbmcpIG9mIHRoZSBmb3JtLCBlLmcuLCB7J3RvcCc6IDAsICdsZWZ0JzogMCwKLSAgICAgICAgICdib3R0b20nOiAxLCAncmlnaHQnOiAxfS4KLSAgICAiIiIKLSAgICByZXR1cm4gY2xzKFBvaW50KGRbJ2xlZnQnXSwgZFsndG9wJ10pLCBQb2ludChkWydyaWdodCddLCBkWydib3R0b20nXSkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9nZW9tZXRyeV90ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvZ2VvbWV0cnlfdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY2OTQ0Mi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9nZW9tZXRyeV90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJUZXN0cyBmb3IgdGhlIGdlb21ldHJ5IG1vZHVsZS4iIiIKLQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGdlb21ldHJ5IGFzIGcKLQotCi1jbGFzcyBQb2ludFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiB0ZXN0U3RyKHNlbGYpOgotICAgIHAgPSBnLlBvaW50KDEsIDIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKHApLCAnKDEsIDIpJykKLQotICBkZWYgdGVzdEFkZChzZWxmKToKLSAgICBwID0gZy5Qb2ludCgxLCAyKQotICAgIHEgPSBnLlBvaW50KDMsIDQpCi0gICAgciA9IGcuUG9pbnQoNCwgNikKLSAgICBzZWxmLmFzc2VydEVxdWFscyhwICsgcSwgcikKLQotICBkZWYgdGVzdEFkZF9UeXBlRXJyb3JXaXRoSW52YWxpZE9wZXJhbmRzKHNlbGYpOgotICAgICMgcHlsaW50OiBkaXNhYmxlPXBvaW50bGVzcy1zdGF0ZW1lbnQKLSAgICBwID0gZy5Qb2ludCgxLCAyKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgIHAgKyA0ICAjIENhbid0IGFkZCBwb2ludCBhbmQgc2NhbGFyLgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgIDQgKyBwICAjIENhbid0IGFkZCBzY2FsYXIgYW5kIHBvaW50LgotCi0gIGRlZiB0ZXN0TXVsdChzZWxmKToKLSAgICBwID0gZy5Qb2ludCgxLCAyKQotICAgIHIgPSBnLlBvaW50KDIsIDQpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMiAqIHAsIHIpICAjIE11bHRpcGx5IGJ5IHNjYWxhciBvbiB0aGUgbGVmdC4KLQotICBkZWYgdGVzdE11bHRfVHlwZUVycm9yV2l0aEludmFsaWRPcGVyYW5kcyhzZWxmKToKLSAgICAjIHB5bGludDogZGlzYWJsZT1wb2ludGxlc3Mtc3RhdGVtZW50Ci0gICAgcCA9IGcuUG9pbnQoMSwgMikKLSAgICBxID0gZy5Qb2ludCgyLCA0KQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgIHAgKiBxICAjIENhbid0IG11bHRpcGx5IHBvaW50cy4KLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICBwICogNCAgIyBDYW4ndCBtdWx0aXBseSBieSBhIHNjYWxhciBvbiB0aGUgcmlnaHQuCi0KLQotY2xhc3MgUmVjdGFuZ2xlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RTdHIoc2VsZik6Ci0gICAgciA9IGcuUmVjdGFuZ2xlKGcuUG9pbnQoMCwgMSksIGcuUG9pbnQoMiwgMykpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKHIpLCAnWygwLCAxKSwgKDIsIDMpXScpCi0KLSAgZGVmIHRlc3RDZW50ZXIoc2VsZik6Ci0gICAgciA9IGcuUmVjdGFuZ2xlKGcuUG9pbnQoMCwgMSksIGcuUG9pbnQoMiwgMykpCi0gICAgYyA9IGcuUG9pbnQoMSwgMikKLSAgICBzZWxmLmFzc2VydEVxdWFscyhyLmNlbnRlciwgYykKLQotICBkZWYgdGVzdEZyb21Kc29uKHNlbGYpOgotICAgIHIxID0gZy5SZWN0YW5nbGUoZy5Qb2ludCgwLCAxKSwgZy5Qb2ludCgyLCAzKSkKLSAgICByMiA9IGcuUmVjdGFuZ2xlLkZyb21EaWN0KHsndG9wJzogMSwgJ2xlZnQnOiAwLCAnYm90dG9tJzogMywgJ3JpZ2h0JzogMn0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMocjEsIHIyKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvaG9zdF91dGlscy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL2hvc3RfdXRpbHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMzM3Y2YuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvaG9zdF91dGlscy5weQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotCi0KLWRlZiBHZXRSZWN1cnNpdmVEaXNrVXNhZ2UocGF0aCk6Ci0gICIiIlJldHVybnMgdGhlIGRpc2sgdXNhZ2UgaW4gYnl0ZXMgb2YgfHBhdGh8LiBTaW1pbGFyIHRvIGBkdSAtc2IgfHBhdGh8YC4iIiIKLSAgZGVmIGdldF9zaXplKGZpbGVwYXRoKToKLSAgICB0cnk6Ci0gICAgICByZXR1cm4gb3MucGF0aC5nZXRzaXplKGZpbGVwYXRoKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgbG9nZ2luZy53YXJuaW5nKCdGaWxlIG9yIGRpcmVjdG9yeSBubyBsb25nZXIgZm91bmQ6ICVzJywgZmlsZXBhdGgpCi0gICAgICByZXR1cm4gMAotCi0gIHJ1bm5pbmdfc2l6ZSA9IGdldF9zaXplKHBhdGgpCi0gIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6Ci0gICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6Ci0gICAgICBydW5uaW5nX3NpemUgKz0gc3VtKFtnZXRfc2l6ZShvcy5wYXRoLmpvaW4ocm9vdCwgZikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlcyArIGRpcnNdKQotICByZXR1cm4gcnVubmluZ19zaXplCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9sYXp5L19faW5pdF9fLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvbGF6eS9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NjNTZjMC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9sYXp5L19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWZyb20gZGV2aWwudXRpbHMubGF6eS53ZWFrX2NvbnN0YW50IGltcG9ydCBXZWFrQ29uc3RhbnQKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL2xhenkvd2Vha19jb25zdGFudC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL2xhenkvd2Vha19jb25zdGFudC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU1OGYyOS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9sYXp5L3dlYWtfY29uc3RhbnQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCB0aHJlYWRpbmcKLQotCi1jbGFzcyBXZWFrQ29uc3RhbnQob2JqZWN0KToKLSAgIiIiQSB0aHJlYWQtc2FmZSwgbGF6aWx5IGluaXRpYWxpemVkIG9iamVjdC4KLQotICBUaGlzIGRvZXMgbm90IHN1cHBvcnQgbW9kaWZpY2F0aW9uIGFmdGVyIGluaXRpYWxpemF0aW9uLiBUaGUgaW50ZW5kZWQKLSAgY29uc3RhbnQgbmF0dXJlIG9mIHRoZSBvYmplY3QgaXMgbm90IGVuZm9yY2VkLCB0aG91Z2gsIGhlbmNlIHRoZSAid2VhayIuCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBpbml0aWFsaXplcik6Ci0gICAgc2VsZi5faW5pdGlhbGl6ZWQgPSBGYWxzZQotICAgIHNlbGYuX2luaXRpYWxpemVyID0gaW5pdGlhbGl6ZXIKLSAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQotICAgIHNlbGYuX3ZhbCA9IE5vbmUKLQotICBkZWYgcmVhZChzZWxmKToKLSAgICAiIiJHZXQgdGhlIG9iamVjdCwgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LiIiIgotICAgIGlmIHNlbGYuX2luaXRpYWxpemVkOgotICAgICAgcmV0dXJuIHNlbGYuX3ZhbAotICAgIHdpdGggc2VsZi5fbG9jazoKLSAgICAgIGlmIG5vdCBzZWxmLl9pbml0aWFsaXplZDoKLSAgICAgICAgc2VsZi5fdmFsID0gc2VsZi5faW5pdGlhbGl6ZXIoKQotICAgICAgICBzZWxmLl9pbml0aWFsaXplZCA9IFRydWUKLSAgICByZXR1cm4gc2VsZi5fdmFsCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9sb2dnaW5nX2NvbW1vbi5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL2xvZ2dpbmdfY29tbW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWVhM2M2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL2xvZ2dpbmdfY29tbW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHN5cwotaW1wb3J0IHRpbWUKLQotCi1kZWYgQWRkTG9nZ2luZ0FyZ3VtZW50cyhwYXJzZXIpOgotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nY291bnQnLCBkZWZhdWx0PTAsCi0gICAgICBoZWxwPSdMb2cgbW9yZS4gVXNlIG11bHRpcGxlIHRpbWVzIGZvciBldmVuIG1vcmUgbG9nZ2luZy4nKQotCi0KLWRlZiBJbml0aWFsaXplTG9nZ2luZyhhcmdzLCBoYW5kbGVyPU5vbmUpOgotICBpZiBhcmdzLnZlcmJvc2UgPT0gMDoKLSAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLldBUk5JTkcKLSAgZWxpZiBhcmdzLnZlcmJvc2UgPT0gMToKLSAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8KLSAgZWxzZToKLSAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCi0gIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKLSAgbG9nZ2VyLnNldExldmVsKGxvZ19sZXZlbCkKLSAgaWYgbm90IGhhbmRsZXI6Ci0gICAgaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQotICAgIGhhbmRsZXIuc2V0Rm9ybWF0dGVyKEN1c3RvbUZvcm1hdHRlcigpKQotICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQotCi0KLWNsYXNzIEN1c3RvbUZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcik6Ci0gICIiIkN1c3RvbSBsb2cgZm9ybWF0dGVyLiIiIgotCi0gICMgb3ZlcnJpZGUKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGZtdD0nJSh0aHJlYWROYW1lKS00cyAgJShtZXNzYWdlKXMnKToKLSAgICAjIENhbid0IHVzZSBzdXBlcigpIGJlY2F1c2UgaW4gb2xkZXIgUHl0aG9uIHZlcnNpb25zIGxvZ2dpbmcuRm9ybWF0dGVyIGRvZXMKLSAgICAjIG5vdCBpbmhlcml0IGZyb20gb2JqZWN0LgotICAgIGxvZ2dpbmcuRm9ybWF0dGVyLl9faW5pdF9fKHNlbGYsIGZtdD1mbXQpCi0gICAgc2VsZi5fY3JlYXRpb25fdGltZSA9IHRpbWUudGltZSgpCi0KLSAgIyBvdmVycmlkZQotICBkZWYgZm9ybWF0KHNlbGYsIHJlY29yZCk6Ci0gICAgIyBDYW4ndCB1c2Ugc3VwZXIoKSBiZWNhdXNlIGluIG9sZGVyIFB5dGhvbiB2ZXJzaW9ucyBsb2dnaW5nLkZvcm1hdHRlciBkb2VzCi0gICAgIyBub3QgaW5oZXJpdCBmcm9tIG9iamVjdC4KLSAgICBtc2cgPSBsb2dnaW5nLkZvcm1hdHRlci5mb3JtYXQoc2VsZiwgcmVjb3JkKQotICAgIGlmICdNYWluVGhyZWFkJyBpbiBtc2dbOjE5XToKLSAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKCdNYWluVGhyZWFkJywgJ01haW4nLCAxKQotICAgIHRpbWVkaWZmID0gdGltZS50aW1lKCkgLSBzZWxmLl9jcmVhdGlvbl90aW1lCi0gICAgcmV0dXJuICclcyAlOC4zZnMgJXMnICUgKHJlY29yZC5sZXZlbG5hbWVbMF0sIHRpbWVkaWZmLCBtc2cpCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL2xzdXNiLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvbHN1c2IucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYmYyNTYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvbHN1c2IucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHJlCi0KLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGNtZF9oZWxwZXIKLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLV9DT1VMRE5UX09QRU5fRVJST1JfUkUgPSByZS5jb21waWxlKHInQ291bGRuXCd0IG9wZW4gZGV2aWNlLionKQotX0lOREVOVEFUSU9OX1JFID0gcmUuY29tcGlsZShyJ14oICopJykKLV9MU1VTQl9CVVNfREVWSUNFX1JFID0gcmUuY29tcGlsZShyJ15CdXMgKFxkezN9KSBEZXZpY2UgKFxkezN9KTogKC4qKScpCi1fTFNVU0JfRU5UUllfUkUgPSByZS5jb21waWxlKHInXiAqKFteIF0rKSArKFteIF0rKSAqKFteIF0uKik/JCcpCi1fTFNVU0JfR1JPVVBfUkUgPSByZS5jb21waWxlKHInXiAqKFteIF0rLiopOiQnKQotCi0KLWRlZiBfbHN1c2J2X29uX2RldmljZShidXNfaWQsIGRldl9pZCk6Ci0gICIiIkNhbGxzIGxzdXNiIC12IG9uIGRldmljZS4iIiIKLSAgXywgcmF3X291dHB1dCA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0V2l0aFRpbWVvdXQoCi0gICAgICBbJ2xzdXNiJywgJy12JywgJy1zJywgJyVzOiVzJyAlIChidXNfaWQsIGRldl9pZCldLCB0aW1lb3V0PTEwKQotCi0gIGRldmljZSA9IHsnYnVzJzogYnVzX2lkLCAnZGV2aWNlJzogZGV2X2lkfQotICBkZXB0aF9zdGFjayA9IFtkZXZpY2VdCi0KLSAgIyBUaGlzIGJ1aWxkcyBhIG5lc3RlZCBkaWN0IC0tIGEgdHJlZSwgYmFzaWNhbGx5IC0tIHRoYXQgY29ycmVzcG9uZHMKLSAgIyB0byB0aGUgbHN1c2Igb3V0cHV0LiBJdCBsb29rcyBmaXJzdCBmb3IgYSBsaW5lIGNvbnRhaW5pbmcKLSAgIwotICAjICAgIkJ1cyA8YnVzIG51bWJlcj4gRGV2aWNlIDxkZXZpY2UgbnVtYmVyPjogLi4uIgotICAjCi0gICMgYW5kIHVzZXMgdGhhdCB0byBjcmVhdGUgdGhlIHJvb3Qgbm9kZS4gSXQgdGhlbiBwYXJzZXMgYWxsIHJlbWFpbmluZwotICAjIGxpbmVzIGFzIGEgdHJlZSwgd2l0aCB0aGUgaW5kZW50YXRpb24gbGV2ZWwgZGV0ZXJtaW5pbmcgdGhlCi0gICMgZGVwdGggb2YgdGhlIG5ldyBub2RlLgotICAjCi0gICMgVGhpcyBleHBlY3RzIHR3byBraW5kcyBvZiBsaW5lczoKLSAgIyAgIC0gImdyb3VwcyIsIHdoaWNoIHRha2UgdGhlIGZvcm0KLSAgIyAgICAgICAiPEdyb3VwIG5hbWU+OiIKLSAgIyAgICAgYW5kIHR5cGljYWxseSBoYXZlIGNoaWxkcmVuLCBhbmQKLSAgIyAgIC0gImVudHJpZXMiLCB3aGljaCB0YWtlIHRoZSBmb3JtCi0gICMgICAgICAgIjxlbnRyeSBuYW1lPiAgIDxlbnRyeSB2YWx1ZT4gIDxwb3NzaWJsZSBlbnRyeSBkZXNjcmlwdGlvbj4iCi0gICMgICAgIGFuZCB0eXBpY2FsbHkgZG8gbm90IGhhdmUgY2hpbGRyZW4gKGJ1dCBjYW4pLgotICAjCi0gICMgVGhpcyBtYWludGFpbnMgYSBzdGFjayBjb250YWluaW5nIGFsbCBjdXJyZW50IGFuY2VzdG9yIG5vZGVzIGluCi0gICMgb3JkZXIgdG8gYWRkIG5ldyBub2RlcyB0byB0aGUgcHJvcGVyIHBsYWNlIGluIHRoZSB0cmVlLgotICAjIFRoZSBzdGFjayBpcyBhZGRlZCB0byB3aGVuIGEgbmV3IG5vZGUgaXMgcGFyc2VkLiBOb2RlcyBhcmUgcmVtb3ZlZAotICAjIGZyb20gdGhlIHN0YWNrIHdoZW4gdGhleSBhcmUgZWl0aGVyIGF0IHRoZSBzYW1lIGluZGVudGF0aW9uIGxldmVsIGFzCi0gICMgb3IgYSBkZWVwZXIgaW5kZW50YXRpb24gbGV2ZWwgdGhhbiB0aGUgY3VycmVudCBsaW5lLgotICAjCi0gICMgZS5nLiB0aGUgZm9sbG93aW5nIGxzdXNiIG91dHB1dDoKLSAgIwotICAjIEJ1cyAxMjMgRGV2aWNlIDQ1NjogU2Nob29sIGJ1cwotICAjIERldmljZSBEZXNjcmlwdG9yOgotICAjICAgYkRldmljZUNsYXNzIDUgQWN0dWFsIFNjaG9vbCBCdXMKLSAgIyAgIENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvcjoKLSAgIyAgICAgYkxlbmd0aCAyMCBSb3dzCi0gICMKLSAgIyB3b3VsZCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgZGljdDoKLSAgIwotICAjIHsKLSAgIyAgICdidXMnOiAxMjMsCi0gICMgICAnZGV2aWNlJzogNDU2LAotICAjICAgJ2Rlc2MnOiAnU2Nob29sIGJ1cycsCi0gICMgICAnRGV2aWNlIERlc2NyaXB0b3InOiB7Ci0gICMgICAgICdiRGV2aWNlQ2xhc3MnOiB7Ci0gICMgICAgICAgJ192YWx1ZSc6ICc1JywKLSAgIyAgICAgICAnX2Rlc2MnOiAnQWN0dWFsIFNjaG9vbCBCdXMnLAotICAjICAgICB9LAotICAjICAgICAnQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yJzogewotICAjICAgICAgICdiTGVuZ3RoJzogewotICAjICAgICAgICAgJ192YWx1ZSc6ICcyMCcsCi0gICMgICAgICAgICAnX2Rlc2MnOiAnUm93cycsCi0gICMgICAgICAgfSwKLSAgIyAgICAgfSwKLSAgIyAgIH0KLSAgIyB9Ci0gIGZvciBsaW5lIGluIHJhd19vdXRwdXQuc3BsaXRsaW5lcygpOgotICAgICMgSWdub3JlIGJsYW5rIGxpbmVzLgotICAgIGlmIG5vdCBsaW5lOgotICAgICAgY29udGludWUKLSAgICAjIEZpbHRlciBvdXQgZXJyb3IgbWVzYWdlIGFib3V0IG9wZW5pbmcgZGV2aWNlLgotICAgIGlmIF9DT1VMRE5UX09QRU5fRVJST1JfUkUubWF0Y2gobGluZSk6Ci0gICAgICBjb250aW51ZQotICAgICMgRmluZCBzdGFydCBvZiBkZXZpY2UgaW5mb3JtYXRpb24uCi0gICAgbSA9IF9MU1VTQl9CVVNfREVWSUNFX1JFLm1hdGNoKGxpbmUpCi0gICAgaWYgbToKLSAgICAgIGlmIG0uZ3JvdXAoMSkgIT0gYnVzX2lkOgotICAgICAgICBsb2dnZXIud2FybmluZygKLSAgICAgICAgICAgICdFeHBlY3RlZCBidXNfaWQgdmFsdWU6ICVyLCBzZWVuICVyJywgYnVzX2lkLCBtLmdyb3VwKDEpKQotICAgICAgaWYgbS5ncm91cCgyKSAhPSBkZXZfaWQ6Ci0gICAgICAgIGxvZ2dlci53YXJuaW5nKAotICAgICAgICAgICAgJ0V4cGVjdGVkIGRldl9pZCB2YWx1ZTogJXIsIHNlZW4gJXInLCBkZXZfaWQsIG0uZ3JvdXAoMikpCi0gICAgICBkZXZpY2VbJ2Rlc2MnXSA9IG0uZ3JvdXAoMykKLSAgICAgIGNvbnRpbnVlCi0KLSAgICAjIFNraXAgYW55IGxpbmVzIHRoYXQgYXJlbid0IGluZGVudGVkLCBhcyB0aGV5J3JlIG5vdCBwYXJ0IG9mIHRoZQotICAgICMgZGV2aWNlIGRlc2NyaXB0b3IuCi0gICAgaW5kZW50X21hdGNoID0gX0lOREVOVEFUSU9OX1JFLm1hdGNoKGxpbmUpCi0gICAgaWYgbm90IGluZGVudF9tYXRjaDoKLSAgICAgIGNvbnRpbnVlCi0KLSAgICAjIERldGVybWluZSB0aGUgaW5kZW50YXRpb24gZGVwdGguCi0gICAgZGVwdGggPSAxICsgbGVuKGluZGVudF9tYXRjaC5ncm91cCgxKSkgLyAyCi0gICAgaWYgZGVwdGggPiBsZW4oZGVwdGhfc3RhY2spOgotICAgICAgbG9nZ2VyLmVycm9yKAotICAgICAgICAgICdsc3VzYiBwYXJzaW5nIGVycm9yOiB1bmV4cGVjdGVkIGluZGVudGF0aW9uOiAiJXMiJywgbGluZSkKLSAgICAgIGNvbnRpbnVlCi0KLSAgICAjIFBvcCBldmVyeXRoaW5nIG9mZiB0aGUgZGVwdGggc3RhY2sgdGhhdCBpc24ndCBhIHBhcmVudCBvZgotICAgICMgdGhpcyBlbGVtZW50LgotICAgIHdoaWxlIGRlcHRoIDwgbGVuKGRlcHRoX3N0YWNrKToKLSAgICAgIGRlcHRoX3N0YWNrLnBvcCgpCi0KLSAgICBjdXIgPSBkZXB0aF9zdGFja1stMV0KLQotICAgIG0gPSBfTFNVU0JfR1JPVVBfUkUubWF0Y2gobGluZSkKLSAgICBpZiBtOgotICAgICAgbmV3X2dyb3VwID0ge30KLSAgICAgIGN1clttLmdyb3VwKDEpXSA9IG5ld19ncm91cAotICAgICAgZGVwdGhfc3RhY2suYXBwZW5kKG5ld19ncm91cCkKLSAgICAgIGNvbnRpbnVlCi0KLSAgICBtID0gX0xTVVNCX0VOVFJZX1JFLm1hdGNoKGxpbmUpCi0gICAgaWYgbToKLSAgICAgIG5ld19lbnRyeSA9IHsKLSAgICAgICAgJ192YWx1ZSc6IG0uZ3JvdXAoMiksCi0gICAgICAgICdfZGVzYyc6IG0uZ3JvdXAoMyksCi0gICAgICB9Ci0gICAgICBjdXJbbS5ncm91cCgxKV0gPSBuZXdfZW50cnkKLSAgICAgIGRlcHRoX3N0YWNrLmFwcGVuZChuZXdfZW50cnkpCi0gICAgICBjb250aW51ZQotCi0gICAgbG9nZ2VyLmVycm9yKCdsc3VzYiBwYXJzaW5nIGVycm9yOiB1bnJlY29nbml6ZWQgbGluZTogIiVzIicsIGxpbmUpCi0KLSAgcmV0dXJuIGRldmljZQotCi1kZWYgbHN1c2IoKToKLSAgIiIiQ2FsbCBsc3VzYiBhbmQgcmV0dXJuIHRoZSBwYXJzZWQgb3V0cHV0LiIiIgotICBfLCBsc3VzYl9saXN0X291dHB1dCA9IGNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0V2l0aFRpbWVvdXQoCi0gICAgICBbJ2xzdXNiJ10sIHRpbWVvdXQ9MTApCi0gIGRldmljZXMgPSBbXQotICBmb3IgbGluZSBpbiBsc3VzYl9saXN0X291dHB1dC5zcGxpdGxpbmVzKCk6Ci0gICAgbSA9IF9MU1VTQl9CVVNfREVWSUNFX1JFLm1hdGNoKGxpbmUpCi0gICAgaWYgbToKLSAgICAgIGJ1c19udW0gPSBtLmdyb3VwKDEpCi0gICAgICBkZXZfbnVtID0gbS5ncm91cCgyKQotICAgICAgdHJ5OgotICAgICAgICBkZXZpY2VzLmFwcGVuZChfbHN1c2J2X29uX2RldmljZShidXNfbnVtLCBkZXZfbnVtKSkKLSAgICAgIGV4Y2VwdCBjbWRfaGVscGVyLlRpbWVvdXRFcnJvcjoKLSAgICAgICAgIyBXaWxsIGJlIGJsYWNrbGlzdGVkIGlmIGl0IGlzIGluIGV4cGVjdGVkIGRldmljZSBmaWxlLCBidXQgdGltZXMgb3V0LgotICAgICAgICBsb2dnZXIuaW5mbygnbHN1c2IgLXYgJXM6JXMgdGltZWQgb3V0LicsIGJ1c19udW0sIGRldl9udW0pCi0gIHJldHVybiBkZXZpY2VzCi0KLWRlZiByYXdfbHN1c2IoKToKLSAgcmV0dXJuIGNtZF9oZWxwZXIuR2V0Q21kT3V0cHV0KFsnbHN1c2InXSkKLQotZGVmIGdldF9sc3VzYl9zZXJpYWwoZGV2aWNlKToKLSAgdHJ5OgotICAgIHJldHVybiBkZXZpY2VbJ0RldmljZSBEZXNjcmlwdG9yJ11bJ2lTZXJpYWwnXVsnX2Rlc2MnXQotICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgcmV0dXJuIE5vbmUKLQotZGVmIF9pc19hbmRyb2lkX2RldmljZShkZXZpY2UpOgotICB0cnk6Ci0gICAgIyBIdWJzIGFyZSBub3QgYW5kcm9pZCBkZXZpY2VzLgotICAgIGlmIGRldmljZVsnRGV2aWNlIERlc2NyaXB0b3InXVsnYkRldmljZUNsYXNzJ11bJ192YWx1ZSddID09ICc5JzoKLSAgICAgIHJldHVybiBGYWxzZQotICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgcGFzcwotICByZXR1cm4gZ2V0X2xzdXNiX3NlcmlhbChkZXZpY2UpIGlzIG5vdCBOb25lCi0KLWRlZiBnZXRfYW5kcm9pZF9kZXZpY2VzKCk6Ci0gIGFuZHJvaWRfZGV2aWNlcyA9IChkIGZvciBkIGluIGxzdXNiKCkgaWYgX2lzX2FuZHJvaWRfZGV2aWNlKGQpKQotICByZXR1cm4gW2dldF9sc3VzYl9zZXJpYWwoZCkgZm9yIGQgaW4gYW5kcm9pZF9kZXZpY2VzXQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvbHN1c2JfdGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL2xzdXNiX3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGYzODFlNzIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvbHN1c2JfdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiVGVzdHMgZm9yIHRoZSBjbWRfaGVscGVyIG1vZHVsZS4iIiIKLQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZGV2aWwgaW1wb3J0IGRldmlsX2VudgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgbHN1c2IKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IG1vY2tfY2FsbHMKLQotd2l0aCBkZXZpbF9lbnYuU3lzUGF0aChkZXZpbF9lbnYuUFlNT0NLX1BBVEgpOgotICBpbXBvcnQgbW9jayAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3IKLQotUkFXX09VVFBVVCA9ICIiIgotQnVzIDAwMyBEZXZpY2UgMDA3OiBJRCAxOGQxOjRlZTIgR29vZ2xlIEluYy4gTmV4dXMgNCAoZGVidWcpCi1EZXZpY2UgRGVzY3JpcHRvcjoKLSAgYkxlbmd0aCAgICAgICAgICAgICAgICAxOAotICBiRGVzY3JpcHRvclR5cGUgICAgICAgICAxCi0gIGJjZFVTQiAgICAgICAgICAgICAgIDIuMDAKLSAgYkRldmljZUNsYXNzICAgICAgICAgICAgMCAoRGVmaW5lZCBhdCBJbnRlcmZhY2UgbGV2ZWwpCi0gIGJEZXZpY2VTdWJDbGFzcyAgICAgICAgIDAKLSAgYkRldmljZVByb3RvY29sICAgICAgICAgMAotICBiTWF4UGFja2V0U2l6ZTAgICAgICAgIDY0Ci0gIGlkVmVuZG9yICAgICAgICAgICAweDE4ZDEgR29vZ2xlIEluYy4KLSAgaWRQcm9kdWN0ICAgICAgICAgIDB4NGVlMiBOZXh1cyA0IChkZWJ1ZykKLSAgYmNkRGV2aWNlICAgICAgICAgICAgMi4yOAotICBpTWFudWZhY3R1cmVyICAgICAgICAgICAxIExHRQotICBpUHJvZHVjdCAgICAgICAgICAgICAgICAyIE5leHVzIDQKLSAgaVNlcmlhbCAgICAgICAgICAgICAgICAgMyAwMWQyNDUwZWExOTRhOTNiCi0gIGJOdW1Db25maWd1cmF0aW9ucyAgICAgIDEKLSAgQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yOgotICAgIGJMZW5ndGggICAgICAgICAgICAgICAgIDkKLSAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICAyCi0gICAgd1RvdGFsTGVuZ3RoICAgICAgICAgICA2MgotICAgIGJOdW1JbnRlcmZhY2VzICAgICAgICAgIDIKLSAgICBiQ29uZmlndXJhdGlvblZhbHVlICAgICAxCi0gICAgaUNvbmZpZ3VyYXRpb24gICAgICAgICAgMAotICAgIGJtQXR0cmlidXRlcyAgICAgICAgIDB4ODAKLSAgICAgIChCdXMgUG93ZXJlZCkKLSAgICBNYXhQb3dlciAgICAgICAgICAgICAgNTAwbUEKLSAgICBJbnRlcmZhY2UgRGVzY3JpcHRvcjoKLSAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAgIDkKLSAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDQKLSAgICAgIGJJbnRlcmZhY2VOdW1iZXIgICAgICAgIDAKLSAgICAgIGJBbHRlcm5hdGVTZXR0aW5nICAgICAgIDAKLSAgICAgIGJOdW1FbmRwb2ludHMgICAgICAgICAgIDMKLSAgICAgIGJJbnRlcmZhY2VDbGFzcyAgICAgICAyNTUgVmVuZG9yIFNwZWNpZmljIENsYXNzCi0gICAgICBiSW50ZXJmYWNlU3ViQ2xhc3MgICAgMjU1IFZlbmRvciBTcGVjaWZpYyBTdWJjbGFzcwotICAgICAgYkludGVyZmFjZVByb3RvY29sICAgICAgMAotICAgICAgaUludGVyZmFjZSAgICAgICAgICAgICAgNCBNVFAKLSAgICAgIEVuZHBvaW50IERlc2NyaXB0b3I6Ci0gICAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAgIDcKLSAgICAgICAgYkRlc2NyaXB0b3JUeXBlICAgICAgICAgNQotICAgICAgICBiRW5kcG9pbnRBZGRyZXNzICAgICAweDgxICBFUCAxIElOCi0gICAgICAgIGJtQXR0cmlidXRlcyAgICAgICAgICAgIDIKLSAgICAgICAgICBUcmFuc2ZlciBUeXBlICAgICAgICAgICAgQnVsawotICAgICAgICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBOb25lCi0gICAgICAgICAgVXNhZ2UgVHlwZSAgICAgICAgICAgICAgIERhdGEKLSAgICAgICAgd01heFBhY2tldFNpemUgICAgIDB4MDA0MCAgMXggNjQgYnl0ZXMKLSAgICAgICAgYkludGVydmFsICAgICAgICAgICAgICAgMAotICAgICAgRW5kcG9pbnQgRGVzY3JpcHRvcjoKLSAgICAgICAgYkxlbmd0aCAgICAgICAgICAgICAgICAgNwotICAgICAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICA1Ci0gICAgICAgIGJFbmRwb2ludEFkZHJlc3MgICAgIDB4MDEgIEVQIDEgT1VUCi0gICAgICAgIGJtQXR0cmlidXRlcyAgICAgICAgICAgIDIKLSAgICAgICAgICBUcmFuc2ZlciBUeXBlICAgICAgICAgICAgQnVsawotICAgICAgICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBOb25lCi0gICAgICAgICAgVXNhZ2UgVHlwZSAgICAgICAgICAgICAgIERhdGEKLSAgICAgICAgd01heFBhY2tldFNpemUgICAgIDB4MDA0MCAgMXggNjQgYnl0ZXMKLSAgICAgICAgYkludGVydmFsICAgICAgICAgICAgICAgMAotICAgICAgRW5kcG9pbnQgRGVzY3JpcHRvcjoKLSAgICAgICAgYkxlbmd0aCAgICAgICAgICAgICAgICAgNwotICAgICAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICA1Ci0gICAgICAgIGJFbmRwb2ludEFkZHJlc3MgICAgIDB4ODIgIEVQIDIgSU4KLSAgICAgICAgYm1BdHRyaWJ1dGVzICAgICAgICAgICAgMwotICAgICAgICAgIFRyYW5zZmVyIFR5cGUgICAgICAgICAgICBJbnRlcnJ1cHQKLSAgICAgICAgICBTeW5jaCBUeXBlICAgICAgICAgICAgICAgTm9uZQotICAgICAgICAgIFVzYWdlIFR5cGUgICAgICAgICAgICAgICBEYXRhCi0gICAgICAgIHdNYXhQYWNrZXRTaXplICAgICAweDAwMWMgIDF4IDI4IGJ5dGVzCi0gICAgICAgIGJJbnRlcnZhbCAgICAgICAgICAgICAgIDYKLSAgICBJbnRlcmZhY2UgRGVzY3JpcHRvcjoKLSAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAgIDkKLSAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDQKLSAgICAgIGJJbnRlcmZhY2VOdW1iZXIgICAgICAgIDEKLSAgICAgIGJBbHRlcm5hdGVTZXR0aW5nICAgICAgIDAKLSAgICAgIGJOdW1FbmRwb2ludHMgICAgICAgICAgIDIKLSAgICAgIGJJbnRlcmZhY2VDbGFzcyAgICAgICAyNTUgVmVuZG9yIFNwZWNpZmljIENsYXNzCi0gICAgICBiSW50ZXJmYWNlU3ViQ2xhc3MgICAgIDY2Ci0gICAgICBiSW50ZXJmYWNlUHJvdG9jb2wgICAgICAxCi0gICAgICBpSW50ZXJmYWNlICAgICAgICAgICAgICAwCi0gICAgICBFbmRwb2ludCBEZXNjcmlwdG9yOgotICAgICAgICBiTGVuZ3RoICAgICAgICAgICAgICAgICA3Ci0gICAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDUKLSAgICAgICAgYkVuZHBvaW50QWRkcmVzcyAgICAgMHg4MyAgRVAgMyBJTgotICAgICAgICBibUF0dHJpYnV0ZXMgICAgICAgICAgICAyCi0gICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAgICAgIEJ1bGsKLSAgICAgICAgICBTeW5jaCBUeXBlICAgICAgICAgICAgICAgTm9uZQotICAgICAgICAgIFVzYWdlIFR5cGUgICAgICAgICAgICAgICBEYXRhCi0gICAgICAgIHdNYXhQYWNrZXRTaXplICAgICAweDAwNDAgIDF4IDY0IGJ5dGVzCi0gICAgICAgIGJJbnRlcnZhbCAgICAgICAgICAgICAgIDAKLSAgICAgIEVuZHBvaW50IERlc2NyaXB0b3I6Ci0gICAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAgIDcKLSAgICAgICAgYkRlc2NyaXB0b3JUeXBlICAgICAgICAgNQotICAgICAgICBiRW5kcG9pbnRBZGRyZXNzICAgICAweDAyICBFUCAyIE9VVAotICAgICAgICBibUF0dHJpYnV0ZXMgICAgICAgICAgICAyCi0gICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAgICAgIEJ1bGsKLSAgICAgICAgICBTeW5jaCBUeXBlICAgICAgICAgICAgICAgTm9uZQotICAgICAgICAgIFVzYWdlIFR5cGUgICAgICAgICAgICAgICBEYXRhCi0gICAgICAgIHdNYXhQYWNrZXRTaXplICAgICAweDAwNDAgIDF4IDY0IGJ5dGVzCi0gICAgICAgIGJJbnRlcnZhbCAgICAgICAgICAgICAgIDAKLURldmljZSBRdWFsaWZpZXIgKGZvciBvdGhlciBkZXZpY2Ugc3BlZWQpOgotICBiTGVuZ3RoICAgICAgICAgICAgICAgIDEwCi0gIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDYKLSAgYmNkVVNCICAgICAgICAgICAgICAgMi4wMAotICBiRGV2aWNlQ2xhc3MgICAgICAgICAgICAwIChEZWZpbmVkIGF0IEludGVyZmFjZSBsZXZlbCkKLSAgYkRldmljZVN1YkNsYXNzICAgICAgICAgMAotICBiRGV2aWNlUHJvdG9jb2wgICAgICAgICAwCi0gIGJNYXhQYWNrZXRTaXplMCAgICAgICAgNjQKLSAgYk51bUNvbmZpZ3VyYXRpb25zICAgICAgMQotRGV2aWNlIFN0YXR1czogICAgIDB4MDAwMAotICAoQnVzIFBvd2VyZWQpCi0iIiIKLURFVklDRV9MSVNUID0gJ0J1cyAwMDMgRGV2aWNlIDAwNzogSUQgMThkMTo0ZWUyIEdvb2dsZSBJbmMuIE5leHVzIDQgKGRlYnVnKScKLQotRVhQRUNURURfUkVTVUxUID0gewotICAgICdkZXZpY2UnOiAnMDA3JywKLSAgICAnYnVzJzogJzAwMycsCi0gICAgJ2Rlc2MnOiAnSUQgMThkMTo0ZWUyIEdvb2dsZSBJbmMuIE5leHVzIDQgKGRlYnVnKScsCi0gICAgJ0RldmljZSc6IHsKLSAgICAgICAgJ192YWx1ZSc6ICdTdGF0dXM6JywKLSAgICAgICAgJ19kZXNjJzogJzB4MDAwMCcsCi0gICAgICAgICcoQnVzJzogewotICAgICAgICAgICAgJ192YWx1ZSc6ICdQb3dlcmVkKScsCi0gICAgICAgICAgICAnX2Rlc2MnOiBOb25lCi0gICAgICAgIH0KLSAgICB9LAotICAgICdEZXZpY2UgRGVzY3JpcHRvcic6IHsKLSAgICAgICAgJ2JMZW5ndGgnOiB7J192YWx1ZSc6ICcxOCcsICdfZGVzYyc6IE5vbmV9LAotICAgICAgICAnYmNkRGV2aWNlJzogeydfdmFsdWUnOiAnMi4yOCcsICdfZGVzYyc6IE5vbmV9LAotICAgICAgICAnYkRldmljZVN1YkNsYXNzJzogeydfdmFsdWUnOiAnMCcsICdfZGVzYyc6IE5vbmV9LAotICAgICAgICAnaWRWZW5kb3InOiB7J192YWx1ZSc6ICcweDE4ZDEnLCAnX2Rlc2MnOiAnR29vZ2xlIEluYy4nfSwKLSAgICAgICAgJ2JjZFVTQic6IHsnX3ZhbHVlJzogJzIuMDAnLCAnX2Rlc2MnOiBOb25lfSwKLSAgICAgICAgJ2JEZXZpY2VQcm90b2NvbCc6IHsnX3ZhbHVlJzogJzAnLCAnX2Rlc2MnOiBOb25lfSwKLSAgICAgICAgJ2JEZXNjcmlwdG9yVHlwZSc6IHsnX3ZhbHVlJzogJzEnLCAnX2Rlc2MnOiBOb25lfSwKLSAgICAgICAgJ0NvbmZpZ3VyYXRpb24gRGVzY3JpcHRvcic6IHsKLSAgICAgICAgICAgICdiTGVuZ3RoJzogeydfdmFsdWUnOiAnOScsICdfZGVzYyc6IE5vbmV9LAotICAgICAgICAgICAgJ3dUb3RhbExlbmd0aCc6IHsnX3ZhbHVlJzogJzYyJywgJ19kZXNjJzogTm9uZX0sCi0gICAgICAgICAgICAnYkNvbmZpZ3VyYXRpb25WYWx1ZSc6IHsnX3ZhbHVlJzogJzEnLCAnX2Rlc2MnOiBOb25lfSwKLSAgICAgICAgICAgICdJbnRlcmZhY2UgRGVzY3JpcHRvcic6IHsKLSAgICAgICAgICAgICAgICAnYkxlbmd0aCc6IHsnX3ZhbHVlJzogJzknLCAnX2Rlc2MnOiBOb25lfSwKLSAgICAgICAgICAgICAgICAnYkFsdGVybmF0ZVNldHRpbmcnOiB7J192YWx1ZSc6ICcwJywgJ19kZXNjJzogTm9uZX0sCi0gICAgICAgICAgICAgICAgJ2JJbnRlcmZhY2VOdW1iZXInOiB7J192YWx1ZSc6ICcxJywgJ19kZXNjJzogTm9uZX0sCi0gICAgICAgICAgICAgICAgJ2JOdW1FbmRwb2ludHMnOiB7J192YWx1ZSc6ICcyJywgJ19kZXNjJzogTm9uZX0sCi0gICAgICAgICAgICAgICAgJ2JEZXNjcmlwdG9yVHlwZSc6IHsnX3ZhbHVlJzogJzQnLCAnX2Rlc2MnOiBOb25lfSwKLSAgICAgICAgICAgICAgICAnYkludGVyZmFjZVN1YkNsYXNzJzogeydfdmFsdWUnOiAnNjYnLCAnX2Rlc2MnOiBOb25lfSwKLSAgICAgICAgICAgICAgICAnYkludGVyZmFjZUNsYXNzJzogewotICAgICAgICAgICAgICAgICAgICAnX3ZhbHVlJzogJzI1NScsCi0gICAgICAgICAgICAgICAgICAgICdfZGVzYyc6ICdWZW5kb3IgU3BlY2lmaWMgQ2xhc3MnCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAnYkludGVyZmFjZVByb3RvY29sJzogeydfdmFsdWUnOiAnMScsICdfZGVzYyc6IE5vbmV9LAotICAgICAgICAgICAgICAgICdFbmRwb2ludCBEZXNjcmlwdG9yJzogewotICAgICAgICAgICAgICAgICAgICAnYkxlbmd0aCc6IHsnX3ZhbHVlJzogJzcnLCAnX2Rlc2MnOiBOb25lfSwKLSAgICAgICAgICAgICAgICAgICAgJ2JFbmRwb2ludEFkZHJlc3MnOiB7J192YWx1ZSc6ICcweDAyJywgJ19kZXNjJzogJ0VQIDIgT1VUJ30sCi0gICAgICAgICAgICAgICAgICAgICdiSW50ZXJ2YWwnOiB7J192YWx1ZSc6ICcwJywgJ19kZXNjJzogTm9uZX0sCi0gICAgICAgICAgICAgICAgICAgICdiRGVzY3JpcHRvclR5cGUnOiB7J192YWx1ZSc6ICc1JywgJ19kZXNjJzogTm9uZX0sCi0gICAgICAgICAgICAgICAgICAgICdibUF0dHJpYnV0ZXMnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnX3ZhbHVlJzogJzInLAotICAgICAgICAgICAgICAgICAgICAgICAgJ1RyYW5zZmVyJzogeydfdmFsdWUnOiAnVHlwZScsICdfZGVzYyc6ICdCdWxrJ30sCi0gICAgICAgICAgICAgICAgICAgICAgICAnVXNhZ2UnOiB7J192YWx1ZSc6ICdUeXBlJywgJ19kZXNjJzogJ0RhdGEnfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdfZGVzYyc6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAnU3luY2gnOiB7J192YWx1ZSc6ICdUeXBlJywgJ19kZXNjJzogJ05vbmUnfQotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAnd01heFBhY2tldFNpemUnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnX3ZhbHVlJzogJzB4MDA0MCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnX2Rlc2MnOiAnMXggNjQgYnl0ZXMnCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICdpSW50ZXJmYWNlJzogeydfdmFsdWUnOiAnMCcsICdfZGVzYyc6IE5vbmV9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ2JEZXNjcmlwdG9yVHlwZSc6IHsnX3ZhbHVlJzogJzInLCAnX2Rlc2MnOiBOb25lfSwKLSAgICAgICAgICAgICdpQ29uZmlndXJhdGlvbic6IHsnX3ZhbHVlJzogJzAnLCAnX2Rlc2MnOiBOb25lfSwKLSAgICAgICAgICAgICdibUF0dHJpYnV0ZXMnOiB7Ci0gICAgICAgICAgICAgICAgJ192YWx1ZSc6ICcweDgwJywKLSAgICAgICAgICAgICAgICAnX2Rlc2MnOiBOb25lLAotICAgICAgICAgICAgICAgICcoQnVzJzogeydfdmFsdWUnOiAnUG93ZXJlZCknLCAnX2Rlc2MnOiBOb25lfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdiTnVtSW50ZXJmYWNlcyc6IHsnX3ZhbHVlJzogJzInLCAnX2Rlc2MnOiBOb25lfSwKLSAgICAgICAgICAgICdNYXhQb3dlcic6IHsnX3ZhbHVlJzogJzUwMG1BJywgJ19kZXNjJzogTm9uZX0KLSAgICAgICAgfSwKLSAgICAgICAgJ2lTZXJpYWwnOiB7J192YWx1ZSc6ICczJywgJ19kZXNjJzogJzAxZDI0NTBlYTE5NGE5M2InfSwKLSAgICAgICAgJ2lkUHJvZHVjdCc6IHsnX3ZhbHVlJzogJzB4NGVlMicsICdfZGVzYyc6ICdOZXh1cyA0IChkZWJ1ZyknfSwKLSAgICAgICAgJ2lNYW51ZmFjdHVyZXInOiB7J192YWx1ZSc6ICcxJywgJ19kZXNjJzogJ0xHRSd9LAotICAgICAgICAnYkRldmljZUNsYXNzJzogewotICAgICAgICAgICAgJ192YWx1ZSc6ICcwJywKLSAgICAgICAgICAgICdfZGVzYyc6ICcoRGVmaW5lZCBhdCBJbnRlcmZhY2UgbGV2ZWwpJwotICAgICAgICB9LAotICAgICAgICAnaVByb2R1Y3QnOiB7J192YWx1ZSc6ICcyJywgJ19kZXNjJzogJ05leHVzIDQnfSwKLSAgICAgICAgJ2JNYXhQYWNrZXRTaXplMCc6IHsnX3ZhbHVlJzogJzY0JywgJ19kZXNjJzogTm9uZX0sCi0gICAgICAgICdiTnVtQ29uZmlndXJhdGlvbnMnOiB7J192YWx1ZSc6ICcxJywgJ19kZXNjJzogTm9uZX0KLSAgICB9LAotICAgICdEZXZpY2UgUXVhbGlmaWVyIChmb3Igb3RoZXIgZGV2aWNlIHNwZWVkKSc6IHsKLSAgICAgICAgJ2JMZW5ndGgnOiB7J192YWx1ZSc6ICcxMCcsICdfZGVzYyc6IE5vbmV9LAotICAgICAgICAnYk51bUNvbmZpZ3VyYXRpb25zJzogeydfdmFsdWUnOiAnMScsICdfZGVzYyc6IE5vbmV9LAotICAgICAgICAnYkRldmljZVN1YkNsYXNzJzogeydfdmFsdWUnOiAnMCcsICdfZGVzYyc6IE5vbmV9LAotICAgICAgICAnYmNkVVNCJzogeydfdmFsdWUnOiAnMi4wMCcsICdfZGVzYyc6IE5vbmV9LAotICAgICAgICAnYkRldmljZVByb3RvY29sJzogeydfdmFsdWUnOiAnMCcsICdfZGVzYyc6IE5vbmV9LAotICAgICAgICAnYkRlc2NyaXB0b3JUeXBlJzogeydfdmFsdWUnOiAnNicsICdfZGVzYyc6IE5vbmV9LAotICAgICAgICAnYkRldmljZUNsYXNzJzogewotICAgICAgICAgICAgJ192YWx1ZSc6ICcwJywKLSAgICAgICAgICAgICdfZGVzYyc6ICcoRGVmaW5lZCBhdCBJbnRlcmZhY2UgbGV2ZWwpJwotICAgICAgICB9LAotICAgICAgICAnYk1heFBhY2tldFNpemUwJzogeydfdmFsdWUnOiAnNjQnLCAnX2Rlc2MnOiBOb25lfQotICAgIH0KLX0KLQotCi1jbGFzcyBMc3VzYlRlc3QobW9ja19jYWxscy5UZXN0Q2FzZSk6Ci0gICIiIlRlc3QgTHN1c2IgcGFyc2luZy4iIiIKLQotICBkZWYgdGVzdExzdXNiKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKG1vY2suY2FsbC5kZXZpbC51dGlscy5jbWRfaGVscGVyLkdldENtZFN0YXR1c0FuZE91dHB1dFdpdGhUaW1lb3V0KAotICAgICAgICAgICAgWydsc3VzYiddLCB0aW1lb3V0PTEwKSwgKE5vbmUsIERFVklDRV9MSVNUKSksCi0gICAgICAgIChtb2NrLmNhbGwuZGV2aWwudXRpbHMuY21kX2hlbHBlci5HZXRDbWRTdGF0dXNBbmRPdXRwdXRXaXRoVGltZW91dCgKLSAgICAgICAgICBbJ2xzdXNiJywgJy12JywgJy1zJywgJzAwMzowMDcnXSwgdGltZW91dD0xMCksIChOb25lLCBSQVdfT1VUUFVUKSkpOgotICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwobHN1c2IubHN1c2IoKS5wb3AoKSwgRVhQRUNURURfUkVTVUxUKQotCi0gIGRlZiB0ZXN0R2V0U2VyaWFsKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKG1vY2suY2FsbC5kZXZpbC51dGlscy5jbWRfaGVscGVyLkdldENtZFN0YXR1c0FuZE91dHB1dFdpdGhUaW1lb3V0KAotICAgICAgICAgICAgWydsc3VzYiddLCB0aW1lb3V0PTEwKSwgKE5vbmUsIERFVklDRV9MSVNUKSksCi0gICAgICAgIChtb2NrLmNhbGwuZGV2aWwudXRpbHMuY21kX2hlbHBlci5HZXRDbWRTdGF0dXNBbmRPdXRwdXRXaXRoVGltZW91dCgKLSAgICAgICAgICBbJ2xzdXNiJywgJy12JywgJy1zJywgJzAwMzowMDcnXSwgdGltZW91dD0xMCksIChOb25lLCBSQVdfT1VUUFVUKSkpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3VzYi5nZXRfYW5kcm9pZF9kZXZpY2VzKCksIFsnMDFkMjQ1MGVhMTk0YTkzYiddKQotCi0gIGRlZiB0ZXN0R2V0THN1c2JTZXJpYWwoc2VsZik6Ci0gICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKAotICAgICAgICAobW9jay5jYWxsLmRldmlsLnV0aWxzLmNtZF9oZWxwZXIuR2V0Q21kU3RhdHVzQW5kT3V0cHV0V2l0aFRpbWVvdXQoCi0gICAgICAgICAgICBbJ2xzdXNiJ10sIHRpbWVvdXQ9MTApLCAoTm9uZSwgREVWSUNFX0xJU1QpKSwKLSAgICAgICAgKG1vY2suY2FsbC5kZXZpbC51dGlscy5jbWRfaGVscGVyLkdldENtZFN0YXR1c0FuZE91dHB1dFdpdGhUaW1lb3V0KAotICAgICAgICAgIFsnbHN1c2InLCAnLXYnLCAnLXMnLCAnMDAzOjAwNyddLCB0aW1lb3V0PTEwKSwgKE5vbmUsIFJBV19PVVRQVVQpKSk6Ci0gICAgICBvdXQgPSBsc3VzYi5sc3VzYigpLnBvcCgpCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdXNiLmdldF9sc3VzYl9zZXJpYWwob3V0KSwgJzAxZDI0NTBlYTE5NGE5M2InKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvbWFya2Rvd24ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9tYXJrZG93bi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTRlN2VkNS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9tYXJrZG93bi5weQorKysgL2Rldi9udWxsCkBAIC0xLDMyMCArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBhcmdwYXJzZQotaW1wb3J0IGltcAotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzeXMKLWltcG9ydCB0ZXh0d3JhcAotaW1wb3J0IHR5cGVzCi0KLSMgQSBtYXJrZG93biBjb2RlIGJsb2NrIHRlbXBsYXRlOiBodHRwczovL2dvby5nbC85RXN5UmkKLV9DT0RFX0JMT0NLX0ZPUk1BVCA9ICcnJ2BgYHtsYW5ndWFnZX0KLXtjb2RlfQotYGBgCi0nJycKLQotX0RFVklMX1JPT1QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICcuLicpKQotCi0KLWRlZiBtZF9ib2xkKHJhd190ZXh0KToKLSAgIiIiUmV0dXJucyBtYXJrZG93bi1mb3JtYXR0ZWQgYm9sZCB0ZXh0LiIiIgotICByZXR1cm4gJyoqJXMqKicgJSBtZF9lc2NhcGUocmF3X3RleHQsIGNoYXJhY3RlcnM9JyonKQotCi0KLWRlZiBtZF9jb2RlKHJhd190ZXh0LCBsYW5ndWFnZSk6Ci0gICIiIlJldHVybnMgYSBtYXJrZG93bi1mb3JtYXR0ZWQgY29kZSBibG9jayBpbiB0aGUgZ2l2ZW4gbGFuZ3VhZ2UuIiIiCi0gIHJldHVybiBfQ09ERV9CTE9DS19GT1JNQVQuZm9ybWF0KAotICAgICAgbGFuZ3VhZ2U9bGFuZ3VhZ2Ugb3IgJycsCi0gICAgICBjb2RlPW1kX2VzY2FwZShyYXdfdGV4dCwgY2hhcmFjdGVycz0nYCcpKQotCi0KLWRlZiBtZF9lc2NhcGUocmF3X3RleHQsIGNoYXJhY3RlcnM9JypfJyk6Ci0gICIiIkVzY2FwZXMgKiBhbmQgXy4iIiIKLSAgZGVmIGVzY2FwZV9jaGFyKG0pOgotICAgIHJldHVybiAnXFwlcycgJSBtLmdyb3VwKDApCi0gIHBhdHRlcm4gPSAnWyVzXScgJSByZS5lc2NhcGUoY2hhcmFjdGVycykKLSAgcmV0dXJuIHJlLnN1YihwYXR0ZXJuLCBlc2NhcGVfY2hhciwgcmF3X3RleHQpCi0KLQotZGVmIG1kX2hlYWRpbmcocmF3X3RleHQsIGxldmVsKToKLSAgIiIiUmV0dXJucyBtYXJrZG93bi1mb3JtYXR0ZWQgaGVhZGluZy4iIiIKLSAgYWRqdXN0ZWRfbGV2ZWwgPSBtaW4obWF4KGxldmVsLCAwKSwgNikKLSAgcmV0dXJuICclcyVzJXMnICUgKAotICAgICAgJyMnICogYWRqdXN0ZWRfbGV2ZWwsICcgJyBpZiBhZGp1c3RlZF9sZXZlbCA+IDAgZWxzZSAnJywgcmF3X3RleHQpCi0KLQotZGVmIG1kX2lubGluZV9jb2RlKHJhd190ZXh0KToKLSAgIiIiUmV0dXJucyBtYXJrZG93bi1mb3JtYXR0ZWQgaW5saW5lIGNvZGUuIiIiCi0gIHJldHVybiAnYCVzYCcgJSBtZF9lc2NhcGUocmF3X3RleHQsIGNoYXJhY3RlcnM9J2AnKQotCi0KLWRlZiBtZF9pdGFsaWMocmF3X3RleHQpOgotICAiIiJSZXR1cm5zIG1hcmtkb3duLWZvcm1hdHRlZCBpdGFsaWMgdGV4dC4iIiIKLSAgcmV0dXJuICcqJXMqJyAlIG1kX2VzY2FwZShyYXdfdGV4dCwgY2hhcmFjdGVycz0nKicpCi0KLQotZGVmIG1kX2xpbmsobGlua190ZXh0LCBsaW5rX3RhcmdldCk6Ci0gICIiInJldHVybnMgYSBtYXJrZG93bi1mb3JtYXR0ZWQgbGluay4iIiIKLSAgcmV0dXJuICdbJXNdKCVzKScgJSAoCi0gICAgICBtZF9lc2NhcGUobGlua190ZXh0LCBjaGFyYWN0ZXJzPSddJyksCi0gICAgICBtZF9lc2NhcGUobGlua190YXJnZXQsIGNoYXJhY3RlcnM9JyknKSkKLQotCi1jbGFzcyBNYXJrZG93bkhlbHBGb3JtYXR0ZXIoYXJncGFyc2UuSGVscEZvcm1hdHRlcik6Ci0gICIiIkEgcmVhbGx5IGJhcmUtYm9uZXMgYXJncGFyc2UgaGVscCBmb3JtYXR0ZXIgdGhhdCBnZW5lcmF0ZXMgdmFsaWQgbWFya2Rvd24uCi0KLSAgVGhpcyB3aWxsIGdlbmVyYXRlIHNvbWV0aGluZyBsaWtlOgotCi0gIHVzYWdlCi0KLSAgIyAqKnNlY3Rpb24gaGVhZGluZyoqOgotCi0gICMjICoqLS1hcmd1bWVudC1vbmUqKgotCi0gIGBgYAotICBhcmd1bWVudC1vbmUgaGVscCB0ZXh0Ci0gIGBgYAotCi0gICIiIgotCi0gICNvdmVycmlkZQotICBkZWYgX2Zvcm1hdF91c2FnZShzZWxmLCB1c2FnZSwgYWN0aW9ucywgZ3JvdXBzLCBwcmVmaXgpOgotICAgIHVzYWdlX3RleHQgPSBzdXBlcihNYXJrZG93bkhlbHBGb3JtYXR0ZXIsIHNlbGYpLl9mb3JtYXRfdXNhZ2UoCi0gICAgICAgIHVzYWdlLCBhY3Rpb25zLCBncm91cHMsIHByZWZpeCkKLSAgICByZXR1cm4gbWRfY29kZSh1c2FnZV90ZXh0LCBsYW5ndWFnZT1Ob25lKQotCi0gICNvdmVycmlkZQotICBkZWYgZm9ybWF0X2hlbHAoc2VsZik6Ci0gICAgc2VsZi5fcm9vdF9zZWN0aW9uLmhlYWRpbmcgPSBtZF9oZWFkaW5nKHNlbGYuX3Byb2csIGxldmVsPTEpCi0gICAgcmV0dXJuIHN1cGVyKE1hcmtkb3duSGVscEZvcm1hdHRlciwgc2VsZikuZm9ybWF0X2hlbHAoKQotCi0gICNvdmVycmlkZQotICBkZWYgc3RhcnRfc2VjdGlvbihzZWxmLCBoZWFkaW5nKToKLSAgICBzdXBlcihNYXJrZG93bkhlbHBGb3JtYXR0ZXIsIHNlbGYpLnN0YXJ0X3NlY3Rpb24oCi0gICAgICAgIG1kX2hlYWRpbmcoaGVhZGluZywgbGV2ZWw9MikpCi0KLSAgI292ZXJyaWRlCi0gIGRlZiBfZm9ybWF0X2FjdGlvbihzZWxmLCBhY3Rpb24pOgotICAgIGxpbmVzID0gW10KLSAgICBhY3Rpb25faGVhZGVyID0gc2VsZi5fZm9ybWF0X2FjdGlvbl9pbnZvY2F0aW9uKGFjdGlvbikKLSAgICBsaW5lcy5hcHBlbmQobWRfaGVhZGluZyhhY3Rpb25faGVhZGVyLCBsZXZlbD0zKSkKLSAgICBpZiBhY3Rpb24uaGVscDoKLSAgICAgIGxpbmVzLmFwcGVuZChtZF9jb2RlKHNlbGYuX2V4cGFuZF9oZWxwKGFjdGlvbiksIGxhbmd1YWdlPU5vbmUpKQotICAgIGxpbmVzLmV4dGVuZChbJycsICcnXSkKLSAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0KLWNsYXNzIE1hcmtkb3duSGVscEFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgotICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9uX3N0cmluZ3MsCi0gICAgICAgICAgICAgICBkZXN0PWFyZ3BhcnNlLlNVUFBSRVNTLCBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTLAotICAgICAgICAgICAgICAgKiprd2FyZ3MpOgotICAgIHN1cGVyKE1hcmtkb3duSGVscEFjdGlvbiwgc2VsZikuX19pbml0X18oCi0gICAgICAgIG9wdGlvbl9zdHJpbmdzPW9wdGlvbl9zdHJpbmdzLAotICAgICAgICBkZXN0PWRlc3QsCi0gICAgICAgIGRlZmF1bHQ9ZGVmYXVsdCwKLSAgICAgICAgbmFyZ3M9MCwKLSAgICAgICAgKiprd2FyZ3MpCi0KLSAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6Ci0gICAgcGFyc2VyLmZvcm1hdHRlcl9jbGFzcyA9IE1hcmtkb3duSGVscEZvcm1hdHRlcgotICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICBwYXJzZXIuZXhpdCgpCi0KLQotZGVmIGFkZF9tZF9oZWxwX2FyZ3VtZW50KHBhcnNlcik6Ci0gICIiIkFkZHMgLS1tZC1oZWxwIHRvIHRoZSBnaXZlbiBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci4KLQotICBSdW5uaW5nIGEgc2NyaXB0IHdpdGggLS1tZC1oZWxwIHdpbGwgcHJpbnQgdGhlIGhlbHAgdGV4dCBmb3IgdGhhdCBzY3JpcHQKLSAgYXMgdmFsaWQgbWFya2Rvd24uCi0KLSAgQXJnczoKLSAgICBwYXJzZXI6IFRoZSBBcmd1bWVudFBhcnNlciB0byB3aGljaCAtLW1kLWhlbHAgc2hvdWxkIGJlIGFkZGVkLgotICAiIiIKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1tZC1oZWxwJywgYWN0aW9uPU1hcmtkb3duSGVscEFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwcmludCBNYXJrZG93bi1mb3JtYXR0ZWQgaGVscCB0ZXh0IGFuZCBleGl0LicpCi0KLQotZGVmIGxvYWRfbW9kdWxlX2Zyb21fcGF0aChtb2R1bGVfcGF0aCk6Ci0gICIiIkxvYWQgYSBtb2R1bGUgZ2l2ZW4gb25seSB0aGUgcGF0aCBuYW1lLgotCi0gIEFsc28gbG9hZHMgcGFja2FnZSBtb2R1bGVzIGFzIG5lY2Vzc2FyeS4KLQotICBBcmdzOgotICAgIG1vZHVsZV9wYXRoOiBBbiBhYnNvbHV0ZSBwYXRoIHRvIGEgcHl0aG9uIG1vZHVsZS4KLSAgUmV0dXJuczoKLSAgICBUaGUgbW9kdWxlIG9iamVjdCBmb3IgdGhlIGdpdmVuIHBhdGguCi0gICIiIgotICBtb2R1bGVfbmFtZXMgPSBbb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKG1vZHVsZV9wYXRoKSlbMF1dCi0gIGQgPSBvcy5wYXRoLmRpcm5hbWUobW9kdWxlX3BhdGgpCi0KLSAgd2hpbGUgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGQsICdfX2luaXRfXy5weScpKToKLSAgICBtb2R1bGVfbmFtZXMuYXBwZW5kKG9zLnBhdGguYmFzZW5hbWUoZCkpCi0gICAgZCA9IG9zLnBhdGguZGlybmFtZShkKQotCi0gIGQgPSBbZF0KLQotICBtb2R1bGUgPSBOb25lCi0gIGZ1bGxfbW9kdWxlX25hbWUgPSAnJwotICBmb3IgcGFja2FnZV9uYW1lIGluIHJldmVyc2VkKG1vZHVsZV9uYW1lcyk6Ci0gICAgaWYgbW9kdWxlOgotICAgICAgZCA9IG1vZHVsZS5fX3BhdGhfXwotICAgICAgZnVsbF9tb2R1bGVfbmFtZSArPSAnLicKLSAgICByID0gaW1wLmZpbmRfbW9kdWxlKHBhY2thZ2VfbmFtZSwgZCkKLSAgICBmdWxsX21vZHVsZV9uYW1lICs9IHBhY2thZ2VfbmFtZQotICAgIG1vZHVsZSA9IGltcC5sb2FkX21vZHVsZShmdWxsX21vZHVsZV9uYW1lLCAqcikKLSAgcmV0dXJuIG1vZHVsZQotCi0KLWRlZiBtZF9tb2R1bGUobW9kdWxlX29iaiwgbW9kdWxlX3BhdGg9Tm9uZSwgbW9kdWxlX2xpbms9Tm9uZSk6Ci0gICIiIldyaXRlIG1hcmtkb3duIGRvY3VtZW50YXRpb24gZm9yIGEgY2xhc3MuCi0KLSAgRG9jdW1lbnRzIHB1YmxpYyBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuCi0KLSAgQXJnczoKLSAgICBjbGFzc19vYmo6IGEgdHlwZXMuVHlwZVR5cGUgb2JqZWN0IGZvciB0aGUgY2xhc3MgdGhhdCBzaG91bGQgYmUKLSAgICAgIGRvY3VtZW50ZWQuCi0gIFJldHVybnM6Ci0gICAgQSBsaXN0IG9mIG1hcmtkb3duLWZvcm1hdHRlZCBsaW5lcy4KLSAgIiIiCi0gIGRlZiBzaG91bGRfZG9jKG5hbWUpOgotICAgIHJldHVybiAodHlwZShtb2R1bGVfb2JqLl9fZGljdF9fW25hbWVdKSAhPSB0eXBlcy5Nb2R1bGVUeXBlCi0gICAgICAgICAgICBhbmQgbm90IG5hbWUuc3RhcnRzd2l0aCgnXycpKQotCi0gIHN0dWZmX3RvX2RvYyA9IHNvcnRlZCgKLSAgICBvYmogZm9yIG5hbWUsIG9iaiBpbiBtb2R1bGVfb2JqLl9fZGljdF9fLml0ZXJpdGVtcygpCi0gICAgaWYgc2hvdWxkX2RvYyhuYW1lKSkKLQotICBjbGFzc2VzX3RvX2RvYyA9IFtdCi0gIGZ1bmN0aW9uc190b19kb2MgPSBbXQotCi0gIGZvciBzIGluIHN0dWZmX3RvX2RvYzoKLSAgICBpZiB0eXBlKHMpID09IHR5cGVzLlR5cGVUeXBlOgotICAgICAgY2xhc3Nlc190b19kb2MuYXBwZW5kKHMpCi0gICAgZWxpZiB0eXBlKHMpID09IHR5cGVzLkZ1bmN0aW9uVHlwZToKLSAgICAgIGZ1bmN0aW9uc190b19kb2MuYXBwZW5kKHMpCi0KLSAgY29tbWFuZCA9IFsnZGV2aWwvdXRpbHMvbWFya2Rvd24ucHknXQotICBpZiBtb2R1bGVfbGluazoKLSAgICBjb21tYW5kLmV4dGVuZChbJy0tbW9kdWxlLWxpbmsnLCBtb2R1bGVfbGlua10pCi0gIGlmIG1vZHVsZV9wYXRoOgotICAgIGNvbW1hbmQuYXBwZW5kKG9zLnBhdGgucmVscGF0aChtb2R1bGVfcGF0aCwgX0RFVklMX1JPT1QpKQotCi0gIGhlYWRpbmdfdGV4dCA9IG1vZHVsZV9vYmouX19uYW1lX18KLSAgaWYgbW9kdWxlX2xpbms6Ci0gICAgaGVhZGluZ190ZXh0ID0gbWRfbGluayhoZWFkaW5nX3RleHQsIG1vZHVsZV9saW5rKQotCi0gIGNvbnRlbnQgPSBbCi0gICAgICBtZF9oZWFkaW5nKGhlYWRpbmdfdGV4dCwgbGV2ZWw9MSksCi0gICAgICAnJywKLSAgICAgIG1kX2l0YWxpYygnVGhpcyBwYWdlIHdhcyBhdXRvZ2VuZXJhdGVkIGJ5ICVzJwotICAgICAgICAgICUgbWRfaW5saW5lX2NvZGUoJyAnLmpvaW4oY29tbWFuZCkpKSwKLSAgICAgICcnLAotICBdCi0KLSAgZm9yIGMgaW4gY2xhc3Nlc190b19kb2M6Ci0gICAgY29udGVudCArPSBtZF9jbGFzcyhjKQotICBmb3IgZiBpbiBmdW5jdGlvbnNfdG9fZG9jOgotICAgIGNvbnRlbnQgKz0gbWRfZnVuY3Rpb24oZikKLQotICBwcmludCAnXG4nLmpvaW4oY29udGVudCkKLQotICByZXR1cm4gMAotCi0KLWRlZiBtZF9jbGFzcyhjbGFzc19vYmopOgotICAiIiJXcml0ZSBtYXJrZG93biBkb2N1bWVudGF0aW9uIGZvciBhIGNsYXNzLgotCi0gIERvY3VtZW50cyBwdWJsaWMgbWV0aG9kcy4gRG9lcyBub3QgY3VycmVudGx5IGRvY3VtZW50IHN1YmNsYXNzZXMuCi0KLSAgQXJnczoKLSAgICBjbGFzc19vYmo6IGEgdHlwZXMuVHlwZVR5cGUgb2JqZWN0IGZvciB0aGUgY2xhc3MgdGhhdCBzaG91bGQgYmUKLSAgICAgIGRvY3VtZW50ZWQuCi0gIFJldHVybnM6Ci0gICAgQSBsaXN0IG9mIG1hcmtkb3duLWZvcm1hdHRlZCBsaW5lcy4KLSAgIiIiCi0gIGNvbnRlbnQgPSBbbWRfaGVhZGluZyhtZF9lc2NhcGUoY2xhc3Nfb2JqLl9fbmFtZV9fKSwgbGV2ZWw9MildCi0gIGNvbnRlbnQuYXBwZW5kKCcnKQotICBpZiBjbGFzc19vYmouX19kb2NfXzoKLSAgICBjb250ZW50LmV4dGVuZChtZF9kb2NzdHJpbmcoY2xhc3Nfb2JqLl9fZG9jX18pKQotCi0gIGRlZiBzaG91bGRfZG9jKG5hbWUsIG9iaik6Ci0gICAgcmV0dXJuICh0eXBlKG9iaikgPT0gdHlwZXMuRnVuY3Rpb25UeXBlCi0gICAgICAgICAgICBhbmQgKG5hbWUuc3RhcnRzd2l0aCgnX18nKSBvciBub3QgbmFtZS5zdGFydHN3aXRoKCdfJykpKQotCi0gIG1ldGhvZHNfdG9fZG9jID0gc29ydGVkKAotICAgICAgb2JqIGZvciBuYW1lLCBvYmogaW4gY2xhc3Nfb2JqLl9fZGljdF9fLml0ZXJpdGVtcygpCi0gICAgICBpZiBzaG91bGRfZG9jKG5hbWUsIG9iaikpCi0KLSAgZm9yIG0gaW4gbWV0aG9kc190b19kb2M6Ci0gICAgY29udGVudC5leHRlbmQobWRfZnVuY3Rpb24obSwgY2xhc3Nfb2JqPWNsYXNzX29iaikpCi0KLSAgcmV0dXJuIGNvbnRlbnQKLQotCi1kZWYgbWRfZG9jc3RyaW5nKGRvY3N0cmluZyk6Ci0gICIiIldyaXRlIGEgbWFya2Rvd24tZm9ybWF0dGVkIGRvY3N0cmluZy4KLQotICBSZXR1cm5zOgotICAgIEEgbGlzdCBvZiBtYXJrZG93bi1mb3JtYXR0ZWQgbGluZXMuCi0gICIiIgotICBjb250ZW50ID0gW10KLSAgbGluZXMgPSB0ZXh0d3JhcC5kZWRlbnQoZG9jc3RyaW5nKS5zcGxpdGxpbmVzKCkKLSAgY29udGVudC5hcHBlbmQobWRfZXNjYXBlKGxpbmVzWzBdKSkKLSAgbGluZXMgPSBsaW5lc1sxOl0KLSAgd2hpbGUgbGluZXMgYW5kIChub3QgbGluZXNbMF0gb3IgbGluZXNbMF0uaXNzcGFjZSgpKToKLSAgICBsaW5lcyA9IGxpbmVzWzE6XQotCi0gIGlmIG5vdCBhbGwobC5pc3NwYWNlKCkgZm9yIGwgaW4gbGluZXMpOgotICAgIGNvbnRlbnQuYXBwZW5kKG1kX2NvZGUoJ1xuJy5qb2luKGxpbmVzKSwgbGFuZ3VhZ2U9Tm9uZSkpCi0gICAgY29udGVudC5hcHBlbmQoJycpCi0gIHJldHVybiBjb250ZW50Ci0KLQotZGVmIG1kX2Z1bmN0aW9uKGZ1bmNfb2JqLCBjbGFzc19vYmo9Tm9uZSk6Ci0gICIiIldyaXRlIG1hcmtkb3duIGRvY3VtZW50YXRpb24gZm9yIGEgZnVuY3Rpb24uCi0KLSAgQXJnczoKLSAgICBmdW5jX29iajogYSB0eXBlcy5GdW5jdGlvblR5cGUgb2JqZWN0IGZvciB0aGUgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUKLSAgICAgIGRvY3VtZW50ZWQuCi0gIFJldHVybnM6Ci0gICAgQSBsaXN0IG9mIG1hcmtkb3duLWZvcm1hdHRlZCBsaW5lcy4KLSAgIiIiCi0gIGlmIGNsYXNzX29iajoKLSAgICBoZWFkaW5nX3RleHQgPSAnJXMuJXMnICUgKGNsYXNzX29iai5fX25hbWVfXywgZnVuY19vYmouX19uYW1lX18pCi0gIGVsc2U6Ci0gICAgaGVhZGluZ190ZXh0ID0gZnVuY19vYmouX19uYW1lX18KLSAgY29udGVudCA9IFttZF9oZWFkaW5nKG1kX2VzY2FwZShoZWFkaW5nX3RleHQpLCBsZXZlbD0zKV0KLSAgY29udGVudC5hcHBlbmQoJycpCi0KLSAgaWYgZnVuY19vYmouX19kb2NfXzoKLSAgICBjb250ZW50LmV4dGVuZChtZF9kb2NzdHJpbmcoZnVuY19vYmouX19kb2NfXykpCi0KLSAgcmV0dXJuIGNvbnRlbnQKLQotCi1kZWYgbWFpbihyYXdfYXJncyk6Ci0gICIiIldyaXRlIG1hcmtkb3duIGRvY3VtZW50YXRpb24gZm9yIHRoZSBtb2R1bGUgYXQgdGhlIHByb3ZpZGVkIHBhdGguCi0KLSAgQXJnczoKLSAgICByYXdfYXJnczogdGhlIHJhdyBjb21tYW5kLWxpbmUgYXJncy4gVXN1YWxseSBzeXMuYXJndlsxOl0uCi0gIFJldHVybnM6Ci0gICAgQW4gaW50ZWdlciBleGl0IGNvZGUuIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgotICAiIiIKLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1vZHVsZS1saW5rJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnbW9kdWxlX3BhdGgnLCB0eXBlPW9zLnBhdGgucmVhbHBhdGgpCi0gIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhyYXdfYXJncykKLQotICByZXR1cm4gbWRfbW9kdWxlKAotICAgICAgbG9hZF9tb2R1bGVfZnJvbV9wYXRoKGFyZ3MubW9kdWxlX3BhdGgpLAotICAgICAgbW9kdWxlX2xpbms9YXJncy5tb2R1bGVfbGluaykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL21hcmtkb3duX3Rlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9tYXJrZG93bl90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzMjM3NzZjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL21hcmtkb3duX3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB0ZXh0d3JhcAotaW1wb3J0IHVuaXR0ZXN0Ci0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5wYXRoLmFwcGVuZCgKLSAgICAgIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJy4uJykpKQotCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBtYXJrZG93bgotCi0KLWNsYXNzIE1hcmtkb3duVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RCb2xkKHNlbGYpOgotICAgIHJhdyA9ICdmb28nCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJyoqZm9vKionLCBtYXJrZG93bi5tZF9ib2xkKHJhdykpCi0KLSAgZGVmIHRlc3RCb2xkQ29udGFpbnNTdGFycyhzZWxmKToKLSAgICByYXcgPSAnKmZvbyonCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJyoqXFwqZm9vXFwqKionLCBtYXJrZG93bi5tZF9ib2xkKHJhdykpCi0KLSAgZGVmIHRlc3RDb2RlKHNlbGYpOgotICAgIHJhdyA9IHRleHR3cmFwLmRlZGVudCgiIiJcCi0gICAgICAgIGNsYXNzIE1hcmtkb3duVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgZGVmIHRlc3RDb2RlKHNlbGYpOgotICAgICAgICAgICAgcGFzcyIiIikKLQotICAgIGV4cGVjdGVkID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKLSAgICAgICAgYGBgcHl0aG9uCi0gICAgICAgIGNsYXNzIE1hcmtkb3duVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgZGVmIHRlc3RDb2RlKHNlbGYpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBgYGAKLSAgICAgICAgIiIiKQotICAgIGFjdHVhbCA9IG1hcmtkb3duLm1kX2NvZGUocmF3LCBsYW5ndWFnZT0ncHl0aG9uJykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZCwgYWN0dWFsKQotCi0gIGRlZiB0ZXN0Q29kZUNvbnRhaW5zVGlja3Moc2VsZik6Ci0gICAgcmF3ID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKLSAgICAgICAgVGhpcyBpcyBzYW1wbGUgbWFya2Rvd24uCi0gICAgICAgIGBgYGMKLSAgICAgICAgLy8gVGhpcyBpcyBhIHNhbXBsZSBjb2RlIGJsb2NrLgotICAgICAgICBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBgYGAiIiIpCi0KLSAgICBleHBlY3RlZCA9IHRleHR3cmFwLmRlZGVudCgiIiJcCi0gICAgICAgIGBgYAotICAgICAgICBUaGlzIGlzIHNhbXBsZSBtYXJrZG93bi4KLSAgICAgICAgXFxgXFxgXFxgYwotICAgICAgICAvLyBUaGlzIGlzIGEgc2FtcGxlIGNvZGUgYmxvY2suCi0gICAgICAgIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgewotICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIFxcYFxcYFxcYAotICAgICAgICBgYGAKLSAgICAgICAgIiIiKQotICAgIGFjdHVhbCA9IG1hcmtkb3duLm1kX2NvZGUocmF3LCBsYW5ndWFnZT1Ob25lKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBhY3R1YWwpCi0KLSAgZGVmIHRlc3RFc2NhcGUoc2VsZik6Ci0gICAgcmF3ID0gJ3RleHRfd2l0aF91bmRlcnNjb3JlcyAqYW5kIHN0YXJzKicKLSAgICBleHBlY3RlZCA9ICd0ZXh0XFxfd2l0aFxcX3VuZGVyc2NvcmVzIFxcKmFuZCBzdGFyc1xcKicKLSAgICBhY3R1YWwgPSBtYXJrZG93bi5tZF9lc2NhcGUocmF3KQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBhY3R1YWwpCi0KLSAgZGVmIHRlc3RIZWFkaW5nMShzZWxmKToKLSAgICByYXcgPSAnSGVhZGluZyAxJwotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcjIEhlYWRpbmcgMScsIG1hcmtkb3duLm1kX2hlYWRpbmcocmF3LCBsZXZlbD0xKSkKLQotICBkZWYgdGVzdEhlYWRpbmc1KHNlbGYpOgotICAgIHJhdyA9ICdIZWFkaW5nIDUnCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJyMjIyMjIEhlYWRpbmcgNScsIG1hcmtkb3duLm1kX2hlYWRpbmcocmF3LCBsZXZlbD01KSkKLQotICBkZWYgdGVzdEhlYWRpbmcxMChzZWxmKToKLSAgICByYXcgPSAnSGVhZGluZyAxMCcKLSAgICBzZWxmLmFzc2VydEVxdWFscygnIyMjIyMjIEhlYWRpbmcgMTAnLCBtYXJrZG93bi5tZF9oZWFkaW5nKHJhdywgbGV2ZWw9MTApKQotCi0gIGRlZiB0ZXN0SW5saW5lQ29kZShzZWxmKToKLSAgICByYXcgPSAnZGV2aWwudXRpbHMubWFya2Rvd25fdGVzdCcKLSAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgJ2BkZXZpbC51dGlscy5tYXJrZG93bl90ZXN0YCcsIG1hcmtkb3duLm1kX2lubGluZV9jb2RlKHJhdykpCi0KLSAgZGVmIHRlc3RJbmxpbmVDb2RlQ29udGFpbnNUaWNrcyhzZWxmKToKLSAgICByYXcgPSAndGhpcyBjb250YWlucyBgYmFja3RpY2tzYCcKLSAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgJ2B0aGlzIGNvbnRhaW5zIFxcYGJhY2t0aWNrc1xcYGAnLCBtYXJrZG93bi5tZF9pbmxpbmVfY29kZShyYXcpKQotCi0gIGRlZiB0ZXN0SXRhbGljKHNlbGYpOgotICAgIHJhdyA9ICdiYXInCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoJypiYXIqJywgbWFya2Rvd24ubWRfaXRhbGljKHJhdykpCi0KLSAgZGVmIHRlc3RJdGFsaWNDb250YWluc1N0YXJzKHNlbGYpOgotICAgIHJhdyA9ICcqYmFyKicKLSAgICBzZWxmLmFzc2VydEVxdWFscygnKlxcKmJhclxcKionLCBtYXJrZG93bi5tZF9pdGFsaWMocmF3KSkKLQotICBkZWYgdGVzdExpbmsoc2VsZik6Ci0gICAgbGlua190ZXh0ID0gJ0RldmlsIGhvbWUnCi0gICAgbGlua190YXJnZXQgPSAoCi0gICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vY2F0YXB1bHQtcHJvamVjdC9jYXRhcHVsdC90cmVlL21hc3Rlci9kZXZpbCcpCi0gICAgZXhwZWN0ZWQgPSAoCi0gICAgICAgICdbRGV2aWwgaG9tZV0nCi0gICAgICAgICcoaHR0cHM6Ly9naXRodWIuY29tL2NhdGFwdWx0LXByb2plY3QvY2F0YXB1bHQvdHJlZS9tYXN0ZXIvZGV2aWwpJykKLSAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZCwgbWFya2Rvd24ubWRfbGluayhsaW5rX3RleHQsIGxpbmtfdGFyZ2V0KSkKLQotICBkZWYgdGVzdExpbmtUZXh0Q29udGFpbnNCcmFja2V0KHNlbGYpOgotICAgIGxpbmtfdGV4dCA9ICdmb28gW10gYmFyJwotICAgIGxpbmtfdGFyZ2V0ID0gJ2h0dHBzOi8vd3d3Lmdvb2dsZS5jb20nCi0gICAgZXhwZWN0ZWQgPSAnW2ZvbyBbXFxdIGJhcl0oaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbSknCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIG1hcmtkb3duLm1kX2xpbmsobGlua190ZXh0LCBsaW5rX3RhcmdldCkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL21vY2tfY2FsbHMucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9tb2NrX2NhbGxzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWU5NTFlLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL21vY2tfY2FsbHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiIKLUEgdGVzdCBmYWNpbGl0eSB0byBhc3NlcnQgY2FsbCBzZXF1ZW5jZXMgd2hpbGUgbW9ja2luZyB0aGVpciBiZWhhdmlvci4KLSIiIgotCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBkZXZpbCBpbXBvcnQgZGV2aWxfZW52Ci0KLXdpdGggZGV2aWxfZW52LlN5c1BhdGgoZGV2aWxfZW52LlBZTU9DS19QQVRIKToKLSAgaW1wb3J0IG1vY2sgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotCi0KLWNsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgIiIiQWRkcyBhc3NlcnRDYWxscyB0byBUZXN0Q2FzZSBvYmplY3RzLiIiIgotICBjbGFzcyBfQXNzZXJ0Q2FsbHMob2JqZWN0KToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X2Nhc2UsIGV4cGVjdGVkX2NhbGxzLCB3YXRjaGVkKToKLSAgICAgIGRlZiBjYWxsX2FjdGlvbihwYWlyKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShwYWlyLCB0eXBlKG1vY2suY2FsbCkpOgotICAgICAgICAgIHJldHVybiAocGFpciwgTm9uZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICByZXR1cm4gcGFpcgotCi0gICAgICBkZWYgZG9fY2hlY2soY2FsbCk6Ci0gICAgICAgIGRlZiBzaWRlX2VmZmVjdCgqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAgIHJlY2VpdmVkX2NhbGwgPSBjYWxsKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgICBzZWxmLl90ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgICAgc2VsZi5fZXhwZWN0ZWRfY2FsbHMsCi0gICAgICAgICAgICAgIG1zZz0oJ1VuZXhwZWN0ZWQgY2FsbDogJXMnICUgc3RyKHJlY2VpdmVkX2NhbGwpKSkKLSAgICAgICAgICBleHBlY3RlZF9jYWxsLCBhY3Rpb24gPSBzZWxmLl9leHBlY3RlZF9jYWxscy5wb3AoMCkKLSAgICAgICAgICBzZWxmLl90ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgICAgcmVjZWl2ZWRfY2FsbCA9PSBleHBlY3RlZF9jYWxsLAotICAgICAgICAgICAgICBtc2c9KCdFeHBlY3RlZCBjYWxsIG1pc21hdGNoOlxuJwotICAgICAgICAgICAgICAgICAgICcgIGV4cGVjdGVkOiAlc1xuJwotICAgICAgICAgICAgICAgICAgICcgIHJlY2VpdmVkOiAlc1xuJwotICAgICAgICAgICAgICAgICAgICUgKHN0cihleHBlY3RlZF9jYWxsKSwgc3RyKHJlY2VpdmVkX2NhbGwpKSkpCi0gICAgICAgICAgaWYgY2FsbGFibGUoYWN0aW9uKToKLSAgICAgICAgICAgIHJldHVybiBhY3Rpb24oKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gYWN0aW9uCi0gICAgICAgIHJldHVybiBzaWRlX2VmZmVjdAotCi0gICAgICBzZWxmLl90ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKLSAgICAgIHNlbGYuX2V4cGVjdGVkX2NhbGxzID0gW2NhbGxfYWN0aW9uKHBhaXIpIGZvciBwYWlyIGluIGV4cGVjdGVkX2NhbGxzXQotICAgICAgd2F0Y2hlZCA9IHdhdGNoZWQuY29weSgpICAjIGRvIG5vdCBwb2xsdXRlIHRoZSBjYWxsZXIncyBkaWN0Ci0gICAgICB3YXRjaGVkLnVwZGF0ZSgoY2FsbC5wYXJlbnQubmFtZSwgY2FsbC5wYXJlbnQpCi0gICAgICAgICAgICAgICAgICAgICBmb3IgY2FsbCwgXyBpbiBzZWxmLl9leHBlY3RlZF9jYWxscykKLSAgICAgIHNlbGYuX3BhdGNoZWQgPSBbdGVzdF9jYXNlLnBhdGNoX2NhbGwoY2FsbCwgc2lkZV9lZmZlY3Q9ZG9fY2hlY2soY2FsbCkpCi0gICAgICAgICAgICAgICAgICAgICAgIGZvciBjYWxsIGluIHdhdGNoZWQuaXRlcnZhbHVlcygpXQotCi0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgIGZvciBwYXRjaCBpbiBzZWxmLl9wYXRjaGVkOgotICAgICAgICBwYXRjaC5fX2VudGVyX18oKQotICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKToKLSAgICAgIGZvciBwYXRjaCBpbiBzZWxmLl9wYXRjaGVkOgotICAgICAgICBwYXRjaC5fX2V4aXRfXyhleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKQotICAgICAgaWYgZXhjX3R5cGUgaXMgTm9uZToKLSAgICAgICAgbWlzc2luZyA9ICcnLmpvaW4oJyAgZXhwZWN0ZWQ6ICVzXG4nICUgc3RyKGNhbGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjYWxsLCBfIGluIHNlbGYuX2V4cGVjdGVkX2NhbGxzKQotICAgICAgICBzZWxmLl90ZXN0X2Nhc2UuYXNzZXJ0RmFsc2UoCi0gICAgICAgICAgICBtaXNzaW5nLAotICAgICAgICAgICAgbXNnPSdFeHBlY3RlZCBjYWxscyBub3QgZm91bmQ6XG4nICsgbWlzc2luZykKLQotICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICBzdXBlcihUZXN0Q2FzZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQotICAgIHNlbGYuY2FsbCA9IG1vY2suY2FsbC5zZWxmCi0gICAgc2VsZi5fd2F0Y2hlZCA9IHt9Ci0KLSAgZGVmIGNhbGxfdGFyZ2V0KHNlbGYsIGNhbGwpOgotICAgICIiIlJlc29sdmUgYSBzZWxmLmNhbGwgaW5zdGFuY2UgdG8gdGhlIHRhcmdldCBpdCByZXByZXNlbnRzLgotCi0gICAgQXJnczoKLSAgICAgIGNhbGw6IGEgc2VsZi5jYWxsIGluc3RhbmNlLCBlLmcuIHNlbGYuY2FsbC5hZGIuU2hlbGwKLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgdGFyZ2V0IG9iamVjdCByZXByZXNlbnRlZCBieSB0aGUgY2FsbCwgZS5nLiBzZWxmLmFkYi5TaGVsbAotCi0gICAgUmFpc2VzOgotICAgICAgVmFsdWVFcnJvciBpZiB0aGUgcGF0aCBvZiB0aGUgY2FsbCBkb2VzIG5vdCBzdGFydCB3aXRoICJzZWxmIiwgaS5lLiB0aGUKLSAgICAgICAgICB0YXJnZXQgb2YgdGhlIGNhbGwgaXMgZXh0ZXJuYWwgdG8gdGhlIHNlbGYgb2JqZWN0LgotICAgICAgQXR0cmlidXRlRXJyb3IgaWYgdGhlIHBhdGggb2YgdGhlIGNhbGwgZG9lcyBub3Qgc3BlY2lmeSBhIHZhbGlkCi0gICAgICAgICAgY2hhaW4gb2YgYXR0cmlidXRlcyAod2l0aG91dCBhbnkgY2FsbHMpIHN0YXJ0aW5nIGZyb20gInNlbGYiLgotICAgICIiIgotICAgIHBhdGggPSBjYWxsLm5hbWUuc3BsaXQoJy4nKQotICAgIGlmIHBhdGgucG9wKDApICE9ICdzZWxmJzoKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlRhcmdldCAlciBvdXRzaWRlIG9mICdzZWxmJyBvYmplY3QiICUgY2FsbC5uYW1lKQotICAgIHRhcmdldCA9IHNlbGYKLSAgICBmb3IgYXR0ciBpbiBwYXRoOgotICAgICAgdGFyZ2V0ID0gZ2V0YXR0cih0YXJnZXQsIGF0dHIpCi0gICAgcmV0dXJuIHRhcmdldAotCi0gIGRlZiBwYXRjaF9jYWxsKHNlbGYsIGNhbGwsICoqa3dhcmdzKToKLSAgICAiIiJQYXRjaCB0aGUgdGFyZ2V0IG9mIGEgbW9jay5jYWxsIGluc3RhbmNlLgotCi0gICAgQXJnczoKLSAgICAgIGNhbGw6IGEgbW9jay5jYWxsIGluc3RhbmNlIGlkZW50aWZ5aW5nIGEgdGFyZ2V0IHRvIHBhdGNoCi0gICAgICBFeHRyYSBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgcHJvY2Vzc2VkIGJ5IG1vY2sucGF0Y2gKLQotICAgIFJldHVybnM6Ci0gICAgICBBIGNvbnRleHQgbWFuYWdlciB0byBtb2NrL3VubW9jayB0aGUgdGFyZ2V0IG9mIHRoZSBjYWxsCi0gICAgIiIiCi0gICAgaWYgY2FsbC5uYW1lLnN0YXJ0c3dpdGgoJ3NlbGYuJyk6Ci0gICAgICB0YXJnZXQgPSBzZWxmLmNhbGxfdGFyZ2V0KGNhbGwucGFyZW50KQotICAgICAgXywgYXR0cmlidXRlID0gY2FsbC5uYW1lLnJzcGxpdCgnLicsIDEpCi0gICAgICBpZiAoaGFzYXR0cih0eXBlKHRhcmdldCksIGF0dHJpYnV0ZSkKLSAgICAgICAgICBhbmQgaXNpbnN0YW5jZShnZXRhdHRyKHR5cGUodGFyZ2V0KSwgYXR0cmlidXRlKSwgcHJvcGVydHkpKToKLSAgICAgICAgcmV0dXJuIG1vY2sucGF0Y2gub2JqZWN0KAotICAgICAgICAgICAgdHlwZSh0YXJnZXQpLCBhdHRyaWJ1dGUsIG5ld19jYWxsYWJsZT1tb2NrLlByb3BlcnR5TW9jaywgKiprd2FyZ3MpCi0gICAgICBlbHNlOgotICAgICAgICByZXR1cm4gbW9jay5wYXRjaC5vYmplY3QodGFyZ2V0LCBhdHRyaWJ1dGUsICoqa3dhcmdzKQotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gbW9jay5wYXRjaChjYWxsLm5hbWUsICoqa3dhcmdzKQotCi0gIGRlZiB3YXRjaENhbGxzKHNlbGYsIGNhbGxzKToKLSAgICAiIiJBZGQgY2FsbHMgdG8gdGhlIHNldCBvZiB3YXRjaGVkIGNhbGxzLgotCi0gICAgQXJnczoKLSAgICAgIGNhbGxzOiBhIHNlcXVlbmNlIG9mIG1vY2suY2FsbCBpbnN0YW5jZXMgaWRlbnRpZnlpbmcgdGFyZ2V0cyB0byB3YXRjaAotICAgICIiIgotICAgIHNlbGYuX3dhdGNoZWQudXBkYXRlKChjYWxsLm5hbWUsIGNhbGwpIGZvciBjYWxsIGluIGNhbGxzKQotCi0gIGRlZiB3YXRjaE1ldGhvZENhbGxzKHNlbGYsIGNhbGwsIGlnbm9yZT1Ob25lKToKLSAgICAiIiJXYXRjaCBhbGwgcHVibGljIG1ldGhvZHMgb2YgdGhlIHRhcmdldCBpZGVudGlmaWVkIGJ5IGEgc2VsZi5jYWxsLgotCi0gICAgQXJnczoKLSAgICAgIGNhbGw6IGEgc2VsZi5jYWxsIGluc3RhbmNlIGluZGV0aWZ5aW5nIGFuIG9iamVjdAotICAgICAgaWdub3JlOiBhIGxpc3Qgb2YgcHVibGljIG1ldGhvZHMgdG8gaWdub3JlIHdoZW4gd2F0Y2hpbmcgZm9yIGNhbGxzCi0gICAgIiIiCi0gICAgdGFyZ2V0ID0gc2VsZi5jYWxsX3RhcmdldChjYWxsKQotICAgIGlmIGlnbm9yZSBpcyBOb25lOgotICAgICAgaWdub3JlID0gW10KLSAgICBzZWxmLndhdGNoQ2FsbHMoZ2V0YXR0cihjYWxsLCBtZXRob2QpCi0gICAgICAgICAgICAgICAgICAgIGZvciBtZXRob2QgaW4gZGlyKHRhcmdldC5fX2NsYXNzX18pCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBtZXRob2Quc3RhcnRzd2l0aCgnXycpIGFuZCBub3QgbWV0aG9kIGluIGlnbm9yZSkKLQotICBkZWYgY2xlYXJXYXRjaGVkKHNlbGYpOgotICAgICIiIkNsZWFyIHRoZSBzZXQgb2Ygd2F0Y2hlZCBjYWxscy4iIiIKLSAgICBzZWxmLl93YXRjaGVkID0ge30KLQotICBkZWYgYXNzZXJ0Q2FsbHMoc2VsZiwgKmNhbGxzKToKLSAgICAiIiJBIGNvbnRleHQgbWFuYWdlciB0byBhc3NlcnQgdGhhdCBhIHNlcXVlbmNlIG9mIGNhbGxzIGlzIG1hZGUuCi0KLSAgICBEdXJpbmcgdGhlIGFzc2VydGlvbiwgYSBudW1iZXIgb2YgZnVuY3Rpb25zIGFuZCBtZXRob2RzIHdpbGwgYmUgIndhdGNoZWQiLAotICAgIGFuZCBhbnkgY2FsbHMgbWFkZSB0byB0aGVtIGlzIGV4cGVjdGVkIHRvIGFwcGVhci0tLWluIHRoZSBleGFjdCBzYW1lIG9yZGVyLAotICAgIGFuZCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy0tLWFzIHNwZWNpZmllZCBieSB0aGUgYXJndW1lbnQgfGNhbGxzfC4KLQotICAgIEJ5IGRlZmF1bHQsIHRoZSB0YXJnZXRzIG9mIGFsbCBleHBlY3RlZCBjYWxscyBhcmUgd2F0Y2hlZC4gRnVydGhlciB0YXJnZXRzCi0gICAgdG8gd2F0Y2ggbWF5IGJlIGFkZGVkIHVzaW5nIHdhdGNoQ2FsbHMgYW5kIHdhdGNoTWV0aG9kQ2FsbHMuCi0KLSAgICBPcHRpb25hbHksIGVhY2ggY2FsbCBtYXkgYmUgYWNjb21wYW5pZWQgYnkgYW4gYWN0aW9uLiBJZiB0aGUgYWN0aW9uIGlzIGEKLSAgICAobm9uLWNhbGxhYmxlKSB2YWx1ZSwgdGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSBnaXZlbiB0bwotICAgIHRoZSBjYWxsZXIgd2hlbiB0aGUgbWF0Y2hpbmcgY2FsbCBpcyBmb3VuZC4gQWx0ZXJuYXRpdmVseSwgaWYgdGhlIGFjdGlvbiBpcwotICAgIGEgY2FsbGFibGUsIHRoZSBhY3Rpb24gd2lsbCBiZSB0aGVuIGNhbGxlZCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyB0aGUKLSAgICBpbnRlcmNlcHRlZCBjYWxsLCBzbyB0aGF0IGl0IGNhbiBwcm92aWRlIGEgcmV0dXJuIHZhbHVlIG9yIHBlcmZvcm0gb3RoZXIKLSAgICBzaWRlIGVmZmVjdHMuIElmIHRoZSBhY3Rpb24gaXMgbWlzc2luZywgYSByZXR1cm4gdmFsdWUgb2YgTm9uZSBpcyBhc3N1bWVkLgotCi0gICAgTm90ZSB0aGF0IG1vY2suTW9jayBvYmplY3RzIGFyZSBvZnRlbiBjb252ZW5pZW50IHRvIHVzZSBhcyBhIGNhbGxhYmxlCi0gICAgYWN0aW9uLCBlLmcuIHRvIHJhaXNlIGV4Y2VwdGlvbnMgb3IgcmV0dXJuIG90aGVyIG9iamVjdHMgd2hpY2ggYXJlCi0gICAgdGhlbXNlbHZlcyBjYWxsYWJsZS4KLQotICAgIEFyZ3M6Ci0gICAgICBjYWxsczogZWFjaCBhcmd1bWVudCBpcyBlaXRoZXIgYSBwYWlyIChleHBlY3RlZF9jYWxsLCBhY3Rpb24pIG9yIGp1c3QgYW4KLSAgICAgICAgICBleHBlY3RlZF9jYWxsLCB3aGVyZSBleHBlY3RlZF9jYWxsIGlzIGEgbW9jay5jYWxsIGluc3RhbmNlLgotCi0gICAgUmFpc2VzOgotICAgICAgQXNzZXJ0aW9uRXJyb3IgaWYgdGhlIHdhdGNoZWQgdGFyZ2V0cyBkbyBub3QgcmVjZWl2ZSB0aGUgZXhhY3Qgc2VxdWVuY2UKLSAgICAgICAgICBvZiBjYWxscyBzcGVjaWZpZWQuIE1pc3NpbmcgY2FsbHMsIGV4dHJhIGNhbGxzLCBhbmQgY2FsbHMgd2l0aAotICAgICAgICAgIG1pc21hdGNoaW5nIGFyZ3VtZW50cywgYWxsIGNhdXNlIHRoZSBhc3NlcnRpb24gdG8gZmFpbC4KLSAgICAiIiIKLSAgICByZXR1cm4gc2VsZi5fQXNzZXJ0Q2FsbHMoc2VsZiwgY2FsbHMsIHNlbGYuX3dhdGNoZWQpCi0KLSAgZGVmIGFzc2VydENhbGwoc2VsZiwgY2FsbCwgYWN0aW9uPU5vbmUpOgotICAgIHJldHVybiBzZWxmLmFzc2VydENhbGxzKChjYWxsLCBhY3Rpb24pKQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9tb2NrX2NhbGxzX3Rlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9tb2NrX2NhbGxzX3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDhlYjRmYzkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvbW9ja19jYWxsc190ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiIKLVVuaXQgdGVzdHMgZm9yIHRoZSBjb250ZW50cyBvZiBtb2NrX2NhbGxzLnB5LgotIiIiCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIGRldmlsIGltcG9ydCBkZXZpbF9lbnYKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IHZlcnNpb25fY29kZXMKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IG1vY2tfY2FsbHMKLQotd2l0aCBkZXZpbF9lbnYuU3lzUGF0aChkZXZpbF9lbnYuUFlNT0NLX1BBVEgpOgotICBpbXBvcnQgbW9jayAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCi0KLQotY2xhc3MgX0R1bW15QWRiKG9iamVjdCk6Ci0KLSAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgcmV0dXJuICcwMTIzNDU2Nzg5YWJjZGVmJwotCi0gIGRlZiBQdXNoKHNlbGYsIGhvc3RfcGF0aCwgZGV2aWNlX3BhdGgpOgotICAgIGxvZ2dpbmcuZGVidWcoJyhkZXZpY2UgJXMpIHB1c2hpbmcgJXIgdG8gJXInLCBzZWxmLCBob3N0X3BhdGgsIGRldmljZV9wYXRoKQotCi0gIGRlZiBJc09ubGluZShzZWxmKToKLSAgICBsb2dnaW5nLmRlYnVnKCcoZGV2aWNlICVzKSBjaGVja2luZyBkZXZpY2Ugb25saW5lJywgc2VsZikKLSAgICByZXR1cm4gVHJ1ZQotCi0gIGRlZiBTaGVsbChzZWxmLCBjbWQpOgotICAgIGxvZ2dpbmcuZGVidWcoJyhkZXZpY2UgJXMpIHJ1bm5pbmcgY29tbWFuZCAlcicsIHNlbGYsIGNtZCkKLSAgICByZXR1cm4gIm5pY2Ugb3V0cHV0XG4iCi0KLSAgZGVmIFJlYm9vdChzZWxmKToKLSAgICBsb2dnaW5nLmRlYnVnKCcoZGV2aWNlICVzKSByZWJvb3RlZCEnLCBzZWxmKQotCi0gIEBwcm9wZXJ0eQotICBkZWYgYnVpbGRfdmVyc2lvbl9zZGsoc2VsZik6Ci0gICAgbG9nZ2luZy5kZWJ1ZygnKGRldmljZSAlcykgZ2V0dGluZyBidWlsZF92ZXJzaW9uX3NkaycsIHNlbGYpCi0gICAgcmV0dXJuIHZlcnNpb25fY29kZXMuTE9MTElQT1AKLQotCi1jbGFzcyBUZXN0Q2FzZVdpdGhBc3NlcnRDYWxsc1Rlc3QobW9ja19jYWxscy5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHNlbGYuYWRiID0gX0R1bW15QWRiKCkKLQotICBkZWYgU2hlbGxFcnJvcihzZWxmKToKLSAgICBkZWYgYWN0aW9uKGNtZCk6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCcoZGV2aWNlICVzKSBjb21tYW5kICVyIGlzIG5vdCBuaWNlJyAlIChzZWxmLmFkYiwgY21kKSkKLSAgICByZXR1cm4gYWN0aW9uCi0KLSAgZGVmIGdldF9hbnN3ZXIoc2VsZik6Ci0gICAgbG9nZ2luZy5kZWJ1ZygiY2FsbGVkICdnZXRfYW5zd2VyJyBvZiAlciBvYmplY3QiLCBzZWxmKQotICAgIHJldHVybiA0MgotCi0gIGRlZiBlY2hvKHNlbGYsIHRoaW5nKToKLSAgICBsb2dnaW5nLmRlYnVnKCJjYWxsZWQgJ2VjaG8nIG9mICVyIG9iamVjdCIsIHNlbGYpCi0gICAgcmV0dXJuIHRoaW5nCi0KLSAgZGVmIHRlc3RDYWxsVGFyZ2V0X3N1Y2NlZHMoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5hZGIuU2hlbGwsCi0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxsX3RhcmdldChzZWxmLmNhbGwuYWRiLlNoZWxsKSkKLQotICBkZWYgdGVzdENhbGxUYXJnZXRfZmFpbHNFeHRlcm5hbChzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgc2VsZi5jYWxsX3RhcmdldChtb2NrLmNhbGwuc3lzLmdldGN3ZCkKLQotICBkZWYgdGVzdENhbGxUYXJnZXRfZmFpbHNVbmtub3duQXR0cmlidXRlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgotICAgICAgc2VsZi5jYWxsX3RhcmdldChzZWxmLmNhbGwuYWRiLlJ1bikKLQotICBkZWYgdGVzdENhbGxUYXJnZXRfZmFpbHNJbnRlcm1lZGlhdGVDYWxscyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKLSAgICAgIHNlbGYuY2FsbF90YXJnZXQoc2VsZi5jYWxsLmFkYi5SdW5TaGVsbCgnY21kJykuYXBwZW5kKQotCi0gIGRlZiB0ZXN0UGF0Y2hDYWxsX21ldGhvZChzZWxmKToKLSAgICBzZWxmLmFzc2VydEVxdWFscyg0Miwgc2VsZi5nZXRfYW5zd2VyKCkpCi0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmdldF9hbnN3ZXIsIHJldHVybl92YWx1ZT0xMjMpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTIzLCBzZWxmLmdldF9hbnN3ZXIoKSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyg0Miwgc2VsZi5nZXRfYW5zd2VyKCkpCi0KLSAgZGVmIHRlc3RQYXRjaENhbGxfYXR0cmlidXRlX21ldGhvZChzZWxmKToKLSAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChzZWxmLmNhbGwuYWRiLlNoZWxsLCByZXR1cm5fdmFsdWU9J2hlbGxvJyk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscygnaGVsbG8nLCBzZWxmLmFkYi5TaGVsbCgnZWNobyBoZWxsbycpKQotCi0gIGRlZiB0ZXN0UGF0Y2hDYWxsX2dsb2JhbChzZWxmKToKLSAgICB3aXRoIHNlbGYucGF0Y2hfY2FsbChtb2NrLmNhbGwub3MuZ2V0Y3dkLCByZXR1cm5fdmFsdWU9Jy9zb21lL3BhdGgnKToKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcvc29tZS9wYXRoJywgb3MuZ2V0Y3dkKCkpCi0KLSAgZGVmIHRlc3RQYXRjaENhbGxfd2l0aFNpZGVFZmZlY3Qoc2VsZik6Ci0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoc2VsZi5jYWxsLmFkYi5TaGVsbCwgc2lkZV9lZmZlY3Q9VmFsdWVFcnJvcik6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICBzZWxmLmFkYi5TaGVsbCgnZWNobyBoZWxsbycpCi0KLSAgZGVmIHRlc3RQYXRjaENhbGxfcHJvcGVydHkoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbHModmVyc2lvbl9jb2Rlcy5MT0xMSVBPUCwgc2VsZi5hZGIuYnVpbGRfdmVyc2lvbl9zZGspCi0gICAgd2l0aCBzZWxmLnBhdGNoX2NhbGwoCi0gICAgICAgIHNlbGYuY2FsbC5hZGIuYnVpbGRfdmVyc2lvbl9zZGssCi0gICAgICAgIHJldHVybl92YWx1ZT12ZXJzaW9uX2NvZGVzLktJVEtBVCk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscyh2ZXJzaW9uX2NvZGVzLktJVEtBVCwgc2VsZi5hZGIuYnVpbGRfdmVyc2lvbl9zZGspCi0gICAgc2VsZi5hc3NlcnRFcXVhbHModmVyc2lvbl9jb2Rlcy5MT0xMSVBPUCwgc2VsZi5hZGIuYnVpbGRfdmVyc2lvbl9zZGspCi0KLSAgZGVmIHRlc3RBc3NlcnRDYWxsc19zdWNjZWVkc19zaW1wbGUoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbHMoNDIsIHNlbGYuZ2V0X2Fuc3dlcigpKQotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKHNlbGYuY2FsbC5nZXRfYW5zd2VyKCksIDEyMyk6Ci0gICAgICBzZWxmLmFzc2VydEVxdWFscygxMjMsIHNlbGYuZ2V0X2Fuc3dlcigpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQyLCBzZWxmLmdldF9hbnN3ZXIoKSkKLQotICBkZWYgdGVzdEFzc2VydENhbGxzX3N1Y2NlZWRzX211bHRpcGxlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygKLSAgICAgICAgKG1vY2suY2FsbC5vcy5nZXRjd2QoKSwgJy9zb21lL3BhdGgnKSwKLSAgICAgICAgKHNlbGYuY2FsbC5lY2hvKCdoZWxsbycpLCAnaGVsbG8nKSwKLSAgICAgICAgKHNlbGYuY2FsbC5nZXRfYW5zd2VyKCksIDExKSwKLSAgICAgICAgc2VsZi5jYWxsLmFkYi5QdXNoKCd0aGlzX2ZpbGUnLCAndGhhdF9maWxlJyksCi0gICAgICAgIChzZWxmLmNhbGwuZ2V0X2Fuc3dlcigpLCAxMikpOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3MuZ2V0Y3dkKCksICcvc29tZS9wYXRoJykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdoZWxsbycsIHNlbGYuZWNobygnaGVsbG8nKSkKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDExLCBzZWxmLmdldF9hbnN3ZXIoKSkKLSAgICAgIHNlbGYuYWRiLlB1c2goJ3RoaXNfZmlsZScsICd0aGF0X2ZpbGUnKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTIsIHNlbGYuZ2V0X2Fuc3dlcigpKQotCi0gIGRlZiB0ZXN0QXNzZXJDYWxsc19zdWNjZWVkc193aXRoQWN0aW9uKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxsKAotICAgICAgICBzZWxmLmNhbGwuYWRiLlNoZWxsKCdlY2hvIGhlbGxvJyksIHNlbGYuU2hlbGxFcnJvcigpKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgIHNlbGYuYWRiLlNoZWxsKCdlY2hvIGhlbGxvJykKLQotICBkZWYgdGVzdEFzc2VydENhbGxzX2ZhaWxzX3Rvb01hbnlDYWxscyhzZWxmKToKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscyhzZWxmLmNhbGwuYWRiLklzT25saW5lKCkpOgotICAgICAgICBzZWxmLmFkYi5Jc09ubGluZSgpCi0gICAgICAgIHNlbGYuYWRiLklzT25saW5lKCkKLQotICBkZWYgdGVzdEFzc2VydENhbGxzX2ZhaWxzX3Rvb0Zld0NhbGxzKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgotICAgICAgd2l0aCBzZWxmLmFzc2VydENhbGxzKHNlbGYuY2FsbC5hZGIuSXNPbmxpbmUoKSk6Ci0gICAgICAgIHBhc3MKLQotICBkZWYgdGVzdEFzc2VydENhbGxzX3N1Y2NlZWRzX2V4dHJhQ2FsbHMoc2VsZik6Ci0gICAgIyB3ZSBhcmUgbm90IHdhdGNoaW5nIFJlYm9vdCwgc28gdGhlIGFzc2VydGlvbiBzdWNjZWVkcwotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscyhzZWxmLmNhbGwuYWRiLklzT25saW5lKCkpOgotICAgICAgc2VsZi5hZGIuSXNPbmxpbmUoKQotICAgICAgc2VsZi5hZGIuUmVib290KCkKLQotICBkZWYgdGVzdEFzc2VydENhbGxzX2ZhaWxzX2V4dHJhQ2FsbHMoc2VsZik6Ci0gICAgc2VsZi53YXRjaENhbGxzKFtzZWxmLmNhbGwuYWRiLlJlYm9vdF0pCi0gICAgIyB0aGlzIHRpbWUgd2UgYXJlIGFsc28gd2F0Y2hpbmcgUmVib290LCBzbyB0aGUgYXNzZXJ0aW9uIGZhaWxzCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6Ci0gICAgICB3aXRoIHNlbGYuYXNzZXJ0Q2FsbHMoc2VsZi5jYWxsLmFkYi5Jc09ubGluZSgpKToKLSAgICAgICAgc2VsZi5hZGIuSXNPbmxpbmUoKQotICAgICAgICBzZWxmLmFkYi5SZWJvb3QoKQotCi0gIGRlZiB0ZXN0QXNzZXJ0Q2FsbHNfc3VjY2VlZHNfTm9DYWxscyhzZWxmKToKLSAgICBzZWxmLndhdGNoTWV0aG9kQ2FsbHMoc2VsZi5jYWxsLmFkYikgICMgd2UgYXJlIHdhdGNoaW5nIGFsbCBhZGIgbWV0aG9kcwotICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygpOgotICAgICAgcGFzcwotCi0gIGRlZiB0ZXN0QXNzZXJ0Q2FsbHNfZmFpbHNfTm9DYWxscyhzZWxmKToKLSAgICBzZWxmLndhdGNoTWV0aG9kQ2FsbHMoc2VsZi5jYWxsLmFkYikKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKLSAgICAgIHdpdGggc2VsZi5hc3NlcnRDYWxscygpOgotICAgICAgICBzZWxmLmFkYi5Jc09ubGluZSgpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgbG9nZ2luZy5nZXRMb2dnZXIoKS5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9wYXJhbGxlbGl6ZXIucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9wYXJhbGxlbGl6ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ODA2NmMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvcGFyYWxsZWxpemVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiIFdyYXBwZXIgdGhhdCBhbGxvd3MgbWV0aG9kIGV4ZWN1dGlvbiBpbiBwYXJhbGxlbC4KLQotVGhpcyBjbGFzcyB3cmFwcyBhIGxpc3Qgb2Ygb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlLCBlbXVsYXRlcyB0aGVpcgotaW50ZXJmYWNlLCBhbmQgZXhlY3V0ZXMgYW55IGZ1bmN0aW9ucyBjYWxsZWQgb24gdGhlIG9iamVjdHMgaW4gcGFyYWxsZWwKLWluIFJlcmFpc2VyVGhyZWFkcy4KLQotVGhpcyBtZWFucyB0aGF0LCBnaXZlbiBhIGxpc3Qgb2Ygb2JqZWN0czoKLQotICBjbGFzcyBGb286Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgc2VsZi5iYXogPSBCYXooKQotCi0gICAgZGVmIGJhcihzZWxmLCBteV9wYXJhbSk6Ci0gICAgICAvLyBkbyBzb21ldGhpbmcKLQotICBsaXN0X29mX2Zvb3MgPSBbRm9vKDEpLCBGb28oMiksIEZvbygzKV0KLQotd2UgY2FuIHRha2UgYSBzZXF1ZW50aWFsIG9wZXJhdGlvbiBvbiB0aGF0IGxpc3Qgb2Ygb2JqZWN0czoKLQotICBmb3IgZiBpbiBsaXN0X29mX2Zvb3M6Ci0gICAgZi5iYXIoJ0hlbGxvJykKLQotYW5kIHJ1biBpdCBpbiBwYXJhbGxlbCBhY3Jvc3MgYWxsIG9mIHRoZSBvYmplY3RzOgotCi0gIFBhcmFsbGVsaXplcihsaXN0X29mX2Zvb3MpLmJhcignSGVsbG8nKQotCi1JdCBjYW4gYWxzbyBoYW5kbGUgKG5vbi1tZXRob2QpIGF0dHJpYnV0ZXMgb2Ygb2JqZWN0cywgc28gdGhhdCB0aGlzOgotCi0gIGZvciBmIGluIGxpc3Rfb2ZfZm9vczoKLSAgICBmLmJhei5teUJhek1ldGhvZCgpCi0KLWNhbiBiZSBydW4gaW4gcGFyYWxsZWwgd2l0aDoKLQotICBQYXJhbGxlbGl6ZXIobGlzdF9vZl9mb29zKS5iYXoubXlCYXpNZXRob2QoKQotCi1CZWNhdXNlIGl0IGVtdWxhdGVzIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIHdyYXBwZWQgb2JqZWN0cywgYSBQYXJhbGxlbGl6ZXIKLWNhbiBiZSBwYXNzZWQgdG8gYSBtZXRob2Qgb3IgZnVuY3Rpb24gdGhhdCB0YWtlcyBvYmplY3RzIG9mIHRoYXQgdHlwZToKLQotICBkZWYgRG9lc1NvbWV0aGluZ1dpdGhGb28odGhlX2Zvbyk6Ci0gICAgdGhlX2Zvby5iYXIoJ0hlbGxvJykKLSAgICB0aGVfZm9vLmJhcignd29ybGQnKQotICAgIHRoZV9mb28uYmF6Lm15QmF6TWV0aG9kCi0KLSAgRG9lc1NvbWV0aGluZ1dpdGhGb28oUGFyYWxsZWxpemVyKGxpc3Rfb2ZfZm9vcykpCi0KLU5vdGUgdGhhdCB0aGlzIGNsYXNzIHNwaW5zIHVwIGEgdGhyZWFkIGZvciBlYWNoIG9iamVjdC4gVXNpbmcgdGhpcyBjbGFzcwotdG8gcGFyYWxsZWxpemUgb3BlcmF0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGZhc3Qgd2lsbCBpbmN1ciBhIG5ldCBwZXJmb3JtYW5jZQotcGVuYWx0eS4KLQotIiIiCi0jIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCi0KLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHJlcmFpc2VyX3RocmVhZAotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgd2F0Y2hkb2dfdGltZXIKLQotX0RFRkFVTFRfVElNRU9VVCA9IDMwCi1fREVGQVVMVF9SRVRSSUVTID0gMwotCi0KLWNsYXNzIFBhcmFsbGVsaXplcihvYmplY3QpOgotICAiIiJBbGxvd3MgcGFyYWxsZWwgZXhlY3V0aW9uIG9mIG1ldGhvZCBjYWxscyBhY3Jvc3MgYSBncm91cCBvZiBvYmplY3RzLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBvYmpzKToKLSAgICBzZWxmLl9vcmlnX29ianMgPSBvYmpzCi0gICAgc2VsZi5fb2JqcyA9IG9ianMKLQotICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6Ci0gICAgIiIiRW11bGF0ZSBnZXR0aW5nIHRoZSB8bmFtZXwgYXR0cmlidXRlIG9mIHxzZWxmfC4KLQotICAgIEFyZ3M6Ci0gICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHJldHJpZXZlLgotICAgIFJldHVybnM6Ci0gICAgICBBIFBhcmFsbGVsaXplciBlbXVsYXRpbmcgdGhlIHxuYW1lfCBhdHRyaWJ1dGUgb2YgfHNlbGZ8LgotICAgICIiIgotICAgIHNlbGYucEdldChOb25lKQotCi0gICAgciA9IHR5cGUoc2VsZikoc2VsZi5fb3JpZ19vYmpzKQotICAgIHIuX29ianMgPSBbZ2V0YXR0cihvLCBuYW1lKSBmb3IgbyBpbiBzZWxmLl9vYmpzXQotICAgIHJldHVybiByCi0KLSAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKLSAgICAiIiJFbXVsYXRlIGdldHRpbmcgdGhlIHZhbHVlIG9mIHxzZWxmfCBhdCB8aW5kZXh8LgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgUGFyYWxsZWxpemVyIGVtdWxhdGluZyB0aGUgdmFsdWUgb2YgfHNlbGZ8IGF0IHxpbmRleHwuCi0gICAgIiIiCi0gICAgc2VsZi5wR2V0KE5vbmUpCi0KLSAgICByID0gdHlwZShzZWxmKShzZWxmLl9vcmlnX29ianMpCi0gICAgci5fb2JqcyA9IFtvW2luZGV4XSBmb3IgbyBpbiBzZWxmLl9vYmpzXQotICAgIHJldHVybiByCi0KLSAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgIiIiRW11bGF0ZSBjYWxsaW5nIHxzZWxmfCB3aXRoIHxhcmdzfCBhbmQgfGt3YXJnc3wuCi0KLSAgICBOb3RlIHRoYXQgdGhpcyBjYWxsIGlzIGFzeW5jaHJvbm91cy4gQ2FsbCBwRmluaXNoIG9uIHRoZSByZXR1cm4gdmFsdWUgdG8KLSAgICBibG9jayB1bnRpbCB0aGUgY2FsbCBmaW5pc2hlcy4KLQotICAgIFJldHVybnM6Ci0gICAgICBBIFBhcmFsbGVsaXplciB3cmFwcGluZyB0aGUgUmVyYWlzZXJUaHJlYWRHcm91cCBydW5uaW5nIHRoZSBjYWxsIGluCi0gICAgICBwYXJhbGxlbC4KLSAgICBSYWlzZXM6Ci0gICAgICBBdHRyaWJ1dGVFcnJvciBpZiB0aGUgd3JhcHBlZCBvYmplY3RzIGFyZW4ndCBjYWxsYWJsZS4KLSAgICAiIiIKLSAgICBzZWxmLnBHZXQoTm9uZSkKLQotICAgIGZvciBvIGluIHNlbGYuX29ianM6Ci0gICAgICBpZiBub3QgY2FsbGFibGUobyk6Ci0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCInJXMnIGlzIG5vdCBjYWxsYWJsZSIgJSBvLl9fbmFtZV9fKQotCi0gICAgciA9IHR5cGUoc2VsZikoc2VsZi5fb3JpZ19vYmpzKQotICAgIHIuX29ianMgPSByZXJhaXNlcl90aHJlYWQuUmVyYWlzZXJUaHJlYWRHcm91cCgKLSAgICAgICAgW3JlcmFpc2VyX3RocmVhZC5SZXJhaXNlclRocmVhZCgKLSAgICAgICAgICAgIG8sIGFyZ3M9YXJncywga3dhcmdzPWt3YXJncywKLSAgICAgICAgICAgIG5hbWU9JyVzLiVzJyAlIChzdHIoZCksIG8uX19uYW1lX18pKQotICAgICAgICAgZm9yIGQsIG8gaW4gemlwKHNlbGYuX29yaWdfb2Jqcywgc2VsZi5fb2JqcyldKQotICAgIHIuX29ianMuU3RhcnRBbGwoKQotICAgIHJldHVybiByCi0KLSAgZGVmIHBGaW5pc2goc2VsZiwgdGltZW91dCk6Ci0gICAgIiIiRmluaXNoIGFueSBvdXRzdGFuZGluZyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy4KLQotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZvciBhbiBpbmRpdmlkdWFsCi0gICAgICAgICAgICAgICByZXN1bHQgdG8gcmV0dXJuLCBvciBOb25lIHRvIHdhaXQgZm9yZXZlci4KLSAgICBSZXR1cm5zOgotICAgICAgc2VsZiwgbm93IGVtdWxhdGluZyB0aGUgcmV0dXJuIHZhbHVlcy4KLSAgICAiIiIKLSAgICBzZWxmLl9hc3NlcnROb1NoYWRvdygncEZpbmlzaCcpCi0gICAgaWYgaXNpbnN0YW5jZShzZWxmLl9vYmpzLCByZXJhaXNlcl90aHJlYWQuUmVyYWlzZXJUaHJlYWRHcm91cCk6Ci0gICAgICBzZWxmLl9vYmpzLkpvaW5BbGwoKQotICAgICAgc2VsZi5fb2JqcyA9IHNlbGYuX29ianMuR2V0QWxsUmV0dXJuVmFsdWVzKAotICAgICAgICAgIHdhdGNoZG9nX3RpbWVyLldhdGNoZG9nVGltZXIodGltZW91dCkpCi0gICAgcmV0dXJuIHNlbGYKLQotICBkZWYgcEdldChzZWxmLCB0aW1lb3V0KToKLSAgICAiIiJHZXQgdGhlIGN1cnJlbnQgd3JhcHBlZCBvYmplY3RzLgotCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IFNhbWUgYXMgfHBGaW5pc2h8LgotICAgIFJldHVybnM6Ci0gICAgICBBIGxpc3Qgb2YgdGhlIHJlc3VsdHMsIGluIG9yZGVyIG9mIHRoZSBwcm92aWRlZCBkZXZpY2VzLgotICAgIFJhaXNlczoKLSAgICAgIEFueSBleGNlcHRpb24gcmFpc2VkIGJ5IGFueSBvZiB0aGUgY2FsbGVkIGZ1bmN0aW9ucy4KLSAgICAiIiIKLSAgICBzZWxmLl9hc3NlcnROb1NoYWRvdygncEdldCcpCi0gICAgc2VsZi5wRmluaXNoKHRpbWVvdXQpCi0gICAgcmV0dXJuIHNlbGYuX29ianMKLQotICBkZWYgcE1hcChzZWxmLCBmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICIiIk1hcCBhIGZ1bmN0aW9uIGFjcm9zcyB0aGUgY3VycmVudCB3cmFwcGVkIG9iamVjdHMgaW4gcGFyYWxsZWwuCi0KLSAgICBUaGlzIGNhbGxzIGYobywgKmFyZ3MsICoqa3dhcmdzKSBmb3IgZWFjaCBvIGluIHRoZSBzZXQgb2Ygd3JhcHBlZCBvYmplY3RzLgotCi0gICAgTm90ZSB0aGF0IHRoaXMgY2FsbCBpcyBhc3luY2hyb25vdXMuIENhbGwgcEZpbmlzaCBvbiB0aGUgcmV0dXJuIHZhbHVlIHRvCi0gICAgYmxvY2sgdW50aWwgdGhlIGNhbGwgZmluaXNoZXMuCi0KLSAgICBBcmdzOgotICAgICAgZjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwuCi0gICAgICBhcmdzOiBUaGUgcG9zaXRpb25hbCBhcmdzIHRvIHBhc3MgdG8gZi4KLSAgICAgIGt3YXJnczogVGhlIGtleXdvcmQgYXJncyB0byBwYXNzIHRvIGYuCi0gICAgUmV0dXJuczoKLSAgICAgIEEgUGFyYWxsZWxpemVyIHdyYXBwaW5nIHRoZSBSZXJhaXNlclRocmVhZEdyb3VwIHJ1bm5pbmcgdGhlIG1hcCBpbgotICAgICAgcGFyYWxsZWwuCi0gICAgIiIiCi0gICAgc2VsZi5fYXNzZXJ0Tm9TaGFkb3coJ3BNYXAnKQotICAgIHIgPSB0eXBlKHNlbGYpKHNlbGYuX29yaWdfb2JqcykKLSAgICByLl9vYmpzID0gcmVyYWlzZXJfdGhyZWFkLlJlcmFpc2VyVGhyZWFkR3JvdXAoCi0gICAgICAgIFtyZXJhaXNlcl90aHJlYWQuUmVyYWlzZXJUaHJlYWQoCi0gICAgICAgICAgICBmLCBhcmdzPXR1cGxlKFtvXSArIGxpc3QoYXJncykpLCBrd2FyZ3M9a3dhcmdzLAotICAgICAgICAgICAgbmFtZT0nJXMoJXMpJyAlIChmLl9fbmFtZV9fLCBkKSkKLSAgICAgICAgIGZvciBkLCBvIGluIHppcChzZWxmLl9vcmlnX29ianMsIHNlbGYuX29ianMpXSkKLSAgICByLl9vYmpzLlN0YXJ0QWxsKCkKLSAgICByZXR1cm4gcgotCi0gIGRlZiBfYXNzZXJ0Tm9TaGFkb3coc2VsZiwgYXR0cl9uYW1lKToKLSAgICAiIiJFbnN1cmVzIHRoYXQgfGF0dHJfbmFtZXwgaXNuJ3Qgc2hhZG93aW5nIHBhcnQgb2YgdGhlIHdyYXBwZWQgb2JlamN0cy4KLQotICAgIElmIHRoZSB3cmFwcGVkIG9iamVjdHMgX2RvXyBoYXZlIGFuIHxhdHRyX25hbWV8IGF0dHJpYnV0ZSwgaXQgd2lsbCBiZQotICAgIGluYWNjZXNzaWJsZSB0byBjbGllbnRzLgotCi0gICAgQXJnczoKLSAgICAgIGF0dHJfbmFtZTogVGhlIGF0dHJpYnV0ZSB0byBjaGVjay4KLSAgICBSYWlzZXM6Ci0gICAgICBBc3NlcnRpb25FcnJvciBpZiB0aGUgd3JhcHBlZCBvYmplY3RzIGhhdmUgYW4gYXR0cmlidXRlIG5hbWVkICdhdHRyX25hbWUnCi0gICAgICBvciAnX2Fzc2VydE5vU2hhZG93Jy4KLSAgICAiIiIKLSAgICBpZiBpc2luc3RhbmNlKHNlbGYuX29ianMsIHJlcmFpc2VyX3RocmVhZC5SZXJhaXNlclRocmVhZEdyb3VwKToKLSAgICAgIGFzc2VydCBub3QgaGFzYXR0cihzZWxmLl9vYmpzLCAnX2Fzc2VydE5vU2hhZG93JykKLSAgICAgIGFzc2VydCBub3QgaGFzYXR0cihzZWxmLl9vYmpzLCBhdHRyX25hbWUpCi0gICAgZWxzZToKLSAgICAgIGFzc2VydCBub3QgYW55KGhhc2F0dHIobywgJ19hc3NlcnROb1NoYWRvdycpIGZvciBvIGluIHNlbGYuX29ianMpCi0gICAgICBhc3NlcnQgbm90IGFueShoYXNhdHRyKG8sIGF0dHJfbmFtZSkgZm9yIG8gaW4gc2VsZi5fb2JqcykKLQotCi1jbGFzcyBTeW5jUGFyYWxsZWxpemVyKFBhcmFsbGVsaXplcik6Ci0gICIiIkEgUGFyYWxsZWxpemVyIHRoYXQgYmxvY2tzIG9uIGZ1bmN0aW9uIGNhbGxzLiIiIgotCi0gIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgIiIiRW11bGF0ZSBlbnRlcmluZyB0aGUgY29udGV4dCBvZiB8c2VsZnwuCi0KLSAgICBOb3RlIHRoYXQgdGhpcyBjYWxsIGlzIHN5bmNocm9ub3VzLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgUGFyYWxsZWxpemVyIGVtdWxhdGluZyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBlbnRlcmluZyBpbnRvIHRoZQotICAgICAgY29udGV4dCBvZiB8c2VsZnwuCi0gICAgIiIiCi0gICAgciA9IHR5cGUoc2VsZikoc2VsZi5fb3JpZ19vYmpzKQotICAgIHIuX29ianMgPSBbby5fX2VudGVyX18gZm9yIG8gaW4gci5fb2Jqc10KLSAgICByZXR1cm4gci5fX2NhbGxfXygpCi0KLSAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgotICAgICIiIkVtdWxhdGUgZXhpdGluZyB0aGUgY29udGV4dCBvZiB8c2VsZnwuCi0KLSAgICBOb3RlIHRoYXQgdGhpcyBjYWxsIGlzIHN5bmNocm9ub3VzLgotCi0gICAgQXJnczoKLSAgICAgIGV4Y190eXBlOiB0aGUgZXhjZXB0aW9uIHR5cGUuCi0gICAgICBleGNfdmFsOiB0aGUgZXhjZXB0aW9uIHZhbHVlLgotICAgICAgZXhjX3RiOiB0aGUgZXhjZXB0aW9uIHRyYWNlYmFjay4KLSAgICAiIiIKLSAgICByID0gdHlwZShzZWxmKShzZWxmLl9vcmlnX29ianMpCi0gICAgci5fb2JqcyA9IFtvLl9fZXhpdF9fIGZvciBvIGluIHIuX29ianNdCi0gICAgci5fX2NhbGxfXyhleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKQotCi0gICMgb3ZlcnJpZGUKLSAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgIiIiRW11bGF0ZSBjYWxsaW5nIHxzZWxmfCB3aXRoIHxhcmdzfCBhbmQgfGt3YXJnc3wuCi0KLSAgICBOb3RlIHRoYXQgdGhpcyBjYWxsIGlzIHN5bmNocm9ub3VzLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgUGFyYWxsZWxpemVyIGVtdWxhdGluZyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBjYWxsaW5nIHxzZWxmfCB3aXRoCi0gICAgICB8YXJnc3wgYW5kIHxrd2FyZ3N8LgotICAgIFJhaXNlczoKLSAgICAgIEF0dHJpYnV0ZUVycm9yIGlmIHRoZSB3cmFwcGVkIG9iamVjdHMgYXJlbid0IGNhbGxhYmxlLgotICAgICIiIgotICAgIHIgPSBzdXBlcihTeW5jUGFyYWxsZWxpemVyLCBzZWxmKS5fX2NhbGxfXygqYXJncywgKiprd2FyZ3MpCi0gICAgci5wRmluaXNoKE5vbmUpCi0gICAgcmV0dXJuIHIKLQotICAjIG92ZXJyaWRlCi0gIGRlZiBwTWFwKHNlbGYsIGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgIiIiTWFwIGEgZnVuY3Rpb24gYWNyb3NzIHRoZSBjdXJyZW50IHdyYXBwZWQgb2JqZWN0cyBpbiBwYXJhbGxlbC4KLQotICAgIFRoaXMgY2FsbHMgZihvLCAqYXJncywgKiprd2FyZ3MpIGZvciBlYWNoIG8gaW4gdGhlIHNldCBvZiB3cmFwcGVkIG9iamVjdHMuCi0KLSAgICBOb3RlIHRoYXQgdGhpcyBjYWxsIGlzIHN5bmNocm9ub3VzLgotCi0gICAgQXJnczoKLSAgICAgIGY6IFRoZSBmdW5jdGlvbiB0byBjYWxsLgotICAgICAgYXJnczogVGhlIHBvc2l0aW9uYWwgYXJncyB0byBwYXNzIHRvIGYuCi0gICAgICBrd2FyZ3M6IFRoZSBrZXl3b3JkIGFyZ3MgdG8gcGFzcyB0byBmLgotICAgIFJldHVybnM6Ci0gICAgICBBIFBhcmFsbGVsaXplciB3cmFwcGluZyB0aGUgUmVyYWlzZXJUaHJlYWRHcm91cCBydW5uaW5nIHRoZSBtYXAgaW4KLSAgICAgIHBhcmFsbGVsLgotICAgICIiIgotICAgIHIgPSBzdXBlcihTeW5jUGFyYWxsZWxpemVyLCBzZWxmKS5wTWFwKGYsICphcmdzLCAqKmt3YXJncykKLSAgICByLnBGaW5pc2goTm9uZSkKLSAgICByZXR1cm4gcgotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9wYXJhbGxlbGl6ZXJfdGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3BhcmFsbGVsaXplcl90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2JiOTg2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3BhcmFsbGVsaXplcl90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiVW5pdCB0ZXN0cyBmb3IgdGhlIGNvbnRlbnRzIG9mIHBhcmFsbGVsaXplci5weS4iIiIKLQotIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwotIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci0KLWltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQgb3MKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHRpbWUKLWltcG9ydCBzeXMKLWltcG9ydCB1bml0dGVzdAotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMucGF0aC5hcHBlbmQob3MucGF0aC5hYnNwYXRoKAotICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICcuLicpKSkKLQotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgcGFyYWxsZWxpemVyCi0KLQotY2xhc3MgUGFyYWxsZWxpemVyVGVzdE9iamVjdChvYmplY3QpOgotICAiIiJDbGFzcyB1c2VkIHRvIHRlc3QgcGFyYWxsZWxpemVyLlBhcmFsbGVsaXplci4iIiIKLQotICBwYXJhbGxlbCA9IHBhcmFsbGVsaXplci5QYXJhbGxlbGl6ZXIKLQotICBkZWYgX19pbml0X18oc2VsZiwgdGhpbmcsIGNvbXBsZXRpb25fZmlsZV9uYW1lPU5vbmUpOgotICAgIHNlbGYuX3RoaW5nID0gdGhpbmcKLSAgICBzZWxmLl9jb21wbGV0aW9uX2ZpbGVfbmFtZSA9IGNvbXBsZXRpb25fZmlsZV9uYW1lCi0gICAgc2VsZi5oZWxwZXIgPSBQYXJhbGxlbGl6ZXJUZXN0T2JqZWN0SGVscGVyKHRoaW5nKQotCi0gIEBzdGF0aWNtZXRob2QKLSAgZGVmIGRvUmV0dXJuKHdoYXQpOgotICAgIHJldHVybiB3aGF0Ci0KLSAgQGNsYXNzbWV0aG9kCi0gIGRlZiBkb1JhaXNlKGNscywgd2hhdCk6Ci0gICAgcmFpc2Ugd2hhdAotCi0gIGRlZiBkb1NldFRoZVRoaW5nKHNlbGYsIG5ld190aGluZyk6Ci0gICAgc2VsZi5fdGhpbmcgPSBuZXdfdGhpbmcKLQotICBkZWYgZG9SZXR1cm5UaGVUaGluZyhzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fdGhpbmcKLQotICBkZWYgZG9SYWlzZVRoZVRoaW5nKHNlbGYpOgotICAgIHJhaXNlIHNlbGYuX3RoaW5nCi0KLSAgZGVmIGRvUmFpc2VJZkV4Y2VwdGlvbkVsc2VTbGVlcEZvcihzZWxmLCBzbGVlcF9kdXJhdGlvbik6Ci0gICAgaWYgaXNpbnN0YW5jZShzZWxmLl90aGluZywgRXhjZXB0aW9uKToKLSAgICAgIHJhaXNlIHNlbGYuX3RoaW5nCi0gICAgdGltZS5zbGVlcChzbGVlcF9kdXJhdGlvbikKLSAgICBzZWxmLl93cml0ZV9jb21wbGV0aW9uX2ZpbGUoKQotICAgIHJldHVybiBzZWxmLl90aGluZwotCi0gIGRlZiBfd3JpdGVfY29tcGxldGlvbl9maWxlKHNlbGYpOgotICAgIGlmIHNlbGYuX2NvbXBsZXRpb25fZmlsZV9uYW1lIGFuZCBsZW4oc2VsZi5fY29tcGxldGlvbl9maWxlX25hbWUpOgotICAgICAgd2l0aCBvcGVuKHNlbGYuX2NvbXBsZXRpb25fZmlsZV9uYW1lLCAndytiJykgYXMgY29tcGxldGlvbl9maWxlOgotICAgICAgICBjb21wbGV0aW9uX2ZpbGUud3JpdGUoJ2NvbXBsZXRlJykKLQotICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgotICAgIHJldHVybiBzZWxmLl90aGluZ1tpbmRleF0KLQotICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICByZXR1cm4gdHlwZShzZWxmKS5fX25hbWVfXwotCi0KLWNsYXNzIFBhcmFsbGVsaXplclRlc3RPYmplY3RIZWxwZXIob2JqZWN0KToKLQotICBkZWYgX19pbml0X18oc2VsZiwgdGhpbmcpOgotICAgIHNlbGYuX3RoaW5nID0gdGhpbmcKLQotICBkZWYgZG9SZXR1cm5TdHJpbmdUaGluZyhzZWxmKToKLSAgICByZXR1cm4gc3RyKHNlbGYuX3RoaW5nKQotCi0KLWNsYXNzIFBhcmFsbGVsaXplclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiB0ZXN0SW5pdEVtcHR5TGlzdChzZWxmKToKLSAgICByID0gcGFyYWxsZWxpemVyLlBhcmFsbGVsaXplcihbXSkucmVwbGFjZSgnYScsICdiJykucEdldCgwLjEpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoW10sIHIpCi0KLSAgZGVmIHRlc3RNZXRob2RDYWxsKHNlbGYpOgotICAgIHRlc3RfZGF0YSA9IFsnYWJjX2ZvbycsICdkZWZfZm9vJywgJ2doaV9mb28nXQotICAgIGV4cGVjdGVkID0gWydhYmNfYmFyJywgJ2RlZl9iYXInLCAnZ2hpX2JhciddCi0gICAgciA9IHBhcmFsbGVsaXplci5QYXJhbGxlbGl6ZXIodGVzdF9kYXRhKS5yZXBsYWNlKCdfZm9vJywgJ19iYXInKS5wR2V0KDAuMSkKLSAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZCwgcikKLQotICBkZWYgdGVzdE11dGF0ZShzZWxmKToKLSAgICBkZXZpY2VzID0gW1BhcmFsbGVsaXplclRlc3RPYmplY3QoVHJ1ZSkgZm9yIF8gaW4geHJhbmdlKDAsIDEwKV0KLSAgICBzZWxmLmFzc2VydFRydWUoYWxsKGQuZG9SZXR1cm5UaGVUaGluZygpIGZvciBkIGluIGRldmljZXMpKQotICAgIFBhcmFsbGVsaXplclRlc3RPYmplY3QucGFyYWxsZWwoZGV2aWNlcykuZG9TZXRUaGVUaGluZyhGYWxzZSkucEZpbmlzaCgxKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYW55KGQuZG9SZXR1cm5UaGVUaGluZygpIGZvciBkIGluIGRldmljZXMpKQotCi0gIGRlZiB0ZXN0QWxsUmV0dXJuKHNlbGYpOgotICAgIGRldmljZXMgPSBbUGFyYWxsZWxpemVyVGVzdE9iamVjdChUcnVlKSBmb3IgXyBpbiB4cmFuZ2UoMCwgMTApXQotICAgIHJlc3VsdHMgPSBQYXJhbGxlbGl6ZXJUZXN0T2JqZWN0LnBhcmFsbGVsKAotICAgICAgICBkZXZpY2VzKS5kb1JldHVyblRoZVRoaW5nKCkucEdldCgxKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHJlc3VsdHMsIGxpc3QpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEwLCBsZW4ocmVzdWx0cykpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGFsbChyZXN1bHRzKSkKLQotICBkZWYgdGVzdEFsbFJhaXNlKHNlbGYpOgotICAgIGRldmljZXMgPSBbUGFyYWxsZWxpemVyVGVzdE9iamVjdChFeGNlcHRpb24oJ3RoaW5nICVkJyAlIGkpKQotICAgICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDAsIDEwKV0KLSAgICBwID0gUGFyYWxsZWxpemVyVGVzdE9iamVjdC5wYXJhbGxlbChkZXZpY2VzKS5kb1JhaXNlVGhlVGhpbmcoKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKToKLSAgICAgIHAucEdldCgxKQotCi0gIGRlZiB0ZXN0T25lRmFpbE90aGVyc0NvbXBsZXRlKHNlbGYpOgotICAgIHBhcmFsbGVsX2RldmljZV9jb3VudCA9IDEwCi0gICAgZXhjZXB0aW9uX2luZGV4ID0gNwotICAgIGV4Y2VwdGlvbl9tc2cgPSAndGhpbmcgJWQnICUgZXhjZXB0aW9uX2luZGV4Ci0KLSAgICB0cnk6Ci0gICAgICBjb21wbGV0aW9uX2ZpbGVzID0gW3RlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBfIGluIHhyYW5nZSgwLCBwYXJhbGxlbF9kZXZpY2VfY291bnQpXQotICAgICAgZGV2aWNlcyA9IFsKLSAgICAgICAgICBQYXJhbGxlbGl6ZXJUZXN0T2JqZWN0KAotICAgICAgICAgICAgICBpIGlmIGkgIT0gZXhjZXB0aW9uX2luZGV4IGVsc2UgRXhjZXB0aW9uKGV4Y2VwdGlvbl9tc2cpLAotICAgICAgICAgICAgICBjb21wbGV0aW9uX2ZpbGVzW2ldLm5hbWUpCi0gICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDAsIHBhcmFsbGVsX2RldmljZV9jb3VudCldCi0gICAgICBmb3IgZiBpbiBjb21wbGV0aW9uX2ZpbGVzOgotICAgICAgICBmLmNsb3NlKCkKLSAgICAgIHAgPSBQYXJhbGxlbGl6ZXJUZXN0T2JqZWN0LnBhcmFsbGVsKGRldmljZXMpCi0gICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbikgYXMgZToKLSAgICAgICAgcC5kb1JhaXNlSWZFeGNlcHRpb25FbHNlU2xlZXBGb3IoMikucEdldCgzKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4Y2VwdGlvbl9tc2cgaW4gc3RyKGUuZXhjZXB0aW9uKSkKLSAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBwYXJhbGxlbF9kZXZpY2VfY291bnQpOgotICAgICAgICB3aXRoIG9wZW4oY29tcGxldGlvbl9maWxlc1tpXS5uYW1lKSBhcyBmOgotICAgICAgICAgIGlmIGkgPT0gZXhjZXB0aW9uX2luZGV4OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJycsIGYucmVhZCgpKQotICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnY29tcGxldGUnLCBmLnJlYWQoKSkKLSAgICBmaW5hbGx5OgotICAgICAgZm9yIGYgaW4gY29tcGxldGlvbl9maWxlczoKLSAgICAgICAgb3MucmVtb3ZlKGYubmFtZSkKLQotICBkZWYgdGVzdFJldXNhYmxlKHNlbGYpOgotICAgIGRldmljZXMgPSBbUGFyYWxsZWxpemVyVGVzdE9iamVjdChUcnVlKSBmb3IgXyBpbiB4cmFuZ2UoMCwgMTApXQotICAgIHAgPSBQYXJhbGxlbGl6ZXJUZXN0T2JqZWN0LnBhcmFsbGVsKGRldmljZXMpCi0gICAgcmVzdWx0cyA9IHAuZG9SZXR1cm4oVHJ1ZSkucEdldCgxKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwocmVzdWx0cykpCi0gICAgcmVzdWx0cyA9IHAuZG9SZXR1cm4oVHJ1ZSkucEdldCgxKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwocmVzdWx0cykpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pOgotICAgICAgcmVzdWx0cyA9IHAuZG9SYWlzZShFeGNlcHRpb24oJ3JldXNhYmxlVGVzdCcpKS5wR2V0KDEpCi0KLSAgZGVmIHRlc3RDb250YWluZWQoc2VsZik6Ci0gICAgZGV2aWNlcyA9IFtQYXJhbGxlbGl6ZXJUZXN0T2JqZWN0KGkpIGZvciBpIGluIHhyYW5nZSgwLCAxMCldCi0gICAgcmVzdWx0cyA9IChQYXJhbGxlbGl6ZXJUZXN0T2JqZWN0LnBhcmFsbGVsKGRldmljZXMpLmhlbHBlcgotICAgICAgICAuZG9SZXR1cm5TdHJpbmdUaGluZygpLnBHZXQoMSkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocmVzdWx0cywgbGlzdCkpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAsIGxlbihyZXN1bHRzKSkKLSAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgMTApOgotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKGkpLCByZXN1bHRzW2ldKQotCi0gIGRlZiB0ZXN0R2V0SXRlbShzZWxmKToKLSAgICBkZXZpY2VzID0gW1BhcmFsbGVsaXplclRlc3RPYmplY3QocmFuZ2UoaSwgaSArIDEwKSkgZm9yIGkgaW4geHJhbmdlKDAsIDEwKV0KLSAgICByZXN1bHRzID0gUGFyYWxsZWxpemVyVGVzdE9iamVjdC5wYXJhbGxlbChkZXZpY2VzKVs5XS5wR2V0KDEpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMocmFuZ2UoOSwgMTkpLCByZXN1bHRzKQotCi0KLWNsYXNzIFN5bmNQYXJhbGxlbGl6ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdENvbnRleHRNYW5hZ2VyKHNlbGYpOgotICAgIGluX2NvbnRleHQgPSBbRmFsc2UgZm9yIGkgaW4geHJhbmdlKDEwKV0KLQotICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi0gICAgZGVmIGVudGVyX2ludG9fY29udGV4dChpKToKLSAgICAgIGluX2NvbnRleHRbaV0gPSBUcnVlCi0gICAgICB0cnk6Ci0gICAgICAgIHlpZWxkCi0gICAgICBmaW5hbGx5OgotICAgICAgICBpbl9jb250ZXh0W2ldID0gRmFsc2UKLQotICAgIHBhcmFsbGVsaXplZF9jb250ZXh0ID0gcGFyYWxsZWxpemVyLlN5bmNQYXJhbGxlbGl6ZXIoCi0gICAgICAgIFtlbnRlcl9pbnRvX2NvbnRleHQoaSkgZm9yIGkgaW4geHJhbmdlKDEwKV0pCi0KLSAgICB3aXRoIHBhcmFsbGVsaXplZF9jb250ZXh0OgotICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsbChpbl9jb250ZXh0KSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGFueShpbl9jb250ZXh0KSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9yZXJhaXNlcl90aHJlYWQucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9yZXJhaXNlcl90aHJlYWQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZDk1ZjMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvcmVyYWlzZXJfdGhyZWFkLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiVGhyZWFkIGFuZCBUaHJlYWRHcm91cCB0aGF0IHJlcmFpc2UgZXhjZXB0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQuIiIiCi0jIHB5bGludDogZGlzYWJsZT1XMDIxMgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHRpbWUKLWltcG9ydCB0cmFjZWJhY2sKLQotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgd2F0Y2hkb2dfdGltZXIKLQotCi1jbGFzcyBUaW1lb3V0RXJyb3IoRXhjZXB0aW9uKToKLSAgIiIiTW9kdWxlLXNwZWNpZmljIHRpbWVvdXQgZXhjZXB0aW9uLiIiIgotICBwYXNzCi0KLQotZGVmIExvZ1RocmVhZFN0YWNrKHRocmVhZCwgZXJyb3JfbG9nX2Z1bmM9bG9nZ2luZy5jcml0aWNhbCk6Ci0gICIiIkxvZyB0aGUgc3RhY2sgZm9yIHRoZSBnaXZlbiB0aHJlYWQuCi0KLSAgQXJnczoKLSAgICB0aHJlYWQ6IGEgdGhyZWFkaW5nLlRocmVhZCBpbnN0YW5jZS4KLSAgICBlcnJvcl9sb2dfZnVuYzogTG9nZ2luZyBmdW5jdGlvbiB3aGVuIGxvZ2dpbmcgZXJyb3JzLgotICAiIiIKLSAgc3RhY2sgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKClbdGhyZWFkLmlkZW50XQotICBlcnJvcl9sb2dfZnVuYygnKicgKiA4MCkKLSAgZXJyb3JfbG9nX2Z1bmMoJ1N0YWNrIGR1bXAgZm9yIHRocmVhZCAlcicsIHRocmVhZC5uYW1lKQotICBlcnJvcl9sb2dfZnVuYygnKicgKiA4MCkKLSAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3RhY2spOgotICAgIGVycm9yX2xvZ19mdW5jKCdGaWxlOiAiJXMiLCBsaW5lICVkLCBpbiAlcycsIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpCi0gICAgaWYgbGluZToKLSAgICAgIGVycm9yX2xvZ19mdW5jKCcgICVzJywgbGluZS5zdHJpcCgpKQotICBlcnJvcl9sb2dfZnVuYygnKicgKiA4MCkKLQotCi1jbGFzcyBSZXJhaXNlclRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKLSAgIiIiVGhyZWFkIGNsYXNzIHRoYXQgY2FuIHJlcmFpc2UgZXhjZXB0aW9ucy4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSwgbmFtZT1Ob25lKToKLSAgICAiIiJJbml0aWFsaXplIHRocmVhZC4KLQotICAgIEFyZ3M6Ci0gICAgICBmdW5jOiBjYWxsYWJsZSB0byBjYWxsIG9uIGEgbmV3IHRocmVhZC4KLSAgICAgIGFyZ3M6IGxpc3Qgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMgZm9yIGNhbGxhYmxlLCBkZWZhdWx0cyB0byBlbXB0eS4KLSAgICAgIGt3YXJnczogZGljdGlvbmFyeSBvZiBrZXl3b3JkIGFyZ3VtZW50cyBmb3IgY2FsbGFibGUsIGRlZmF1bHRzIHRvIGVtcHR5LgotICAgICAgbmFtZTogdGhyZWFkIG5hbWUsIGRlZmF1bHRzIHRvIFRocmVhZC1OLgotICAgICIiIgotICAgIGlmIG5vdCBuYW1lIGFuZCBmdW5jLl9fbmFtZV9fICE9ICc8bGFtYmRhPic6Ci0gICAgICBuYW1lID0gZnVuYy5fX25hbWVfXwotICAgIHN1cGVyKFJlcmFpc2VyVGhyZWFkLCBzZWxmKS5fX2luaXRfXyhuYW1lPW5hbWUpCi0gICAgaWYgbm90IGFyZ3M6Ci0gICAgICBhcmdzID0gW10KLSAgICBpZiBub3Qga3dhcmdzOgotICAgICAga3dhcmdzID0ge30KLSAgICBzZWxmLmRhZW1vbiA9IFRydWUKLSAgICBzZWxmLl9mdW5jID0gZnVuYwotICAgIHNlbGYuX2FyZ3MgPSBhcmdzCi0gICAgc2VsZi5fa3dhcmdzID0ga3dhcmdzCi0gICAgc2VsZi5fcmV0ID0gTm9uZQotICAgIHNlbGYuX2V4Y19pbmZvID0gTm9uZQotICAgIHNlbGYuX3RocmVhZF9ncm91cCA9IE5vbmUKLQotICBkZWYgUmVyYWlzZUlmRXhjZXB0aW9uKHNlbGYpOgotICAgICIiIlJlcmFpc2UgZXhjZXB0aW9uIGlmIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIGluIHRoZSB0aHJlYWQuIiIiCi0gICAgaWYgc2VsZi5fZXhjX2luZm86Ci0gICAgICByYWlzZSBzZWxmLl9leGNfaW5mb1swXSwgc2VsZi5fZXhjX2luZm9bMV0sIHNlbGYuX2V4Y19pbmZvWzJdCi0KLSAgZGVmIEdldFJldHVyblZhbHVlKHNlbGYpOgotICAgICIiIlJlcmFpc2UgZXhjZXB0aW9uIGlmIHByZXNlbnQsIG90aGVyd2lzZSBnZXQgdGhlIHJldHVybiB2YWx1ZS4iIiIKLSAgICBzZWxmLlJlcmFpc2VJZkV4Y2VwdGlvbigpCi0gICAgcmV0dXJuIHNlbGYuX3JldAotCi0gICMgb3ZlcnJpZGUKLSAgZGVmIHJ1bihzZWxmKToKLSAgICAiIiJPdmVycmlkZXMgVGhyZWFkLnJ1bigpIHRvIGFkZCBzdXBwb3J0IGZvciByZXJhaXNpbmcgZXhjZXB0aW9ucy4iIiIKLSAgICB0cnk6Ci0gICAgICBzZWxmLl9yZXQgPSBzZWxmLl9mdW5jKCpzZWxmLl9hcmdzLCAqKnNlbGYuX2t3YXJncykKLSAgICBleGNlcHQ6ICAjIHB5bGludDogZGlzYWJsZT1XMDcwMgotICAgICAgc2VsZi5fZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQotCi0KLWNsYXNzIFJlcmFpc2VyVGhyZWFkR3JvdXAob2JqZWN0KToKLSAgIiIiQSBncm91cCBvZiBSZXJhaXNlclRocmVhZCBvYmplY3RzLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCB0aHJlYWRzPU5vbmUpOgotICAgICIiIkluaXRpYWxpemUgdGhyZWFkIGdyb3VwLgotCi0gICAgQXJnczoKLSAgICAgIHRocmVhZHM6IGEgbGlzdCBvZiBSZXJhaXNlclRocmVhZCBvYmplY3RzOyBkZWZhdWx0cyB0byBlbXB0eS4KLSAgICAiIiIKLSAgICBzZWxmLl90aHJlYWRzID0gW10KLSAgICAjIFNldCB3aGVuIGEgdGhyZWFkIGZyb20gb25lIGdyb3VwIGhhcyBjYWxsZWQgSm9pbkFsbCBvbiBhbm90aGVyLiBJdCBpcyB1c2VkCi0gICAgIyB0byBkZXRlY3Qgd2hlbiBhIHRoZXJlIGlzIGEgVGltZW91dFJldHJ5VGhyZWFkIGFjdGl2ZSB0aGF0IGxpbmtzIHRvIHRoZQotICAgICMgY3VycmVudCB0aHJlYWQuCi0gICAgc2VsZi5ibG9ja2VkX3BhcmVudF90aHJlYWRfZ3JvdXAgPSBOb25lCi0gICAgaWYgdGhyZWFkczoKLSAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgc2VsZi5BZGQodGhyZWFkKQotCi0gIGRlZiBBZGQoc2VsZiwgdGhyZWFkKToKLSAgICAiIiJBZGQgYSB0aHJlYWQgdG8gdGhlIGdyb3VwLgotCi0gICAgQXJnczoKLSAgICAgIHRocmVhZDogYSBSZXJhaXNlclRocmVhZCBvYmplY3QuCi0gICAgIiIiCi0gICAgYXNzZXJ0IHRocmVhZC5fdGhyZWFkX2dyb3VwIGlzIE5vbmUKLSAgICB0aHJlYWQuX3RocmVhZF9ncm91cCA9IHNlbGYKLSAgICBzZWxmLl90aHJlYWRzLmFwcGVuZCh0aHJlYWQpCi0KLSAgZGVmIFN0YXJ0QWxsKHNlbGYsIHdpbGxfYmxvY2s9RmFsc2UpOgotICAgICIiIlN0YXJ0IGFsbCB0aHJlYWRzLgotCi0gICAgQXJnczoKLSAgICAgIHdpbGxfYmxvY2s6IFdoZXRoZXIgdGhlIGNhbGxpbmcgdGhyZWFkIHdpbGwgc3Vic2VxdWVudGx5IGJsb2NrIG9uIHRoaXMKLSAgICAgICAgdGhyZWFkIGdyb3VwLiBDYXVzZXMgdGhlIGFjdGl2ZSBSZXJhaXNlclRocmVhZEdyb3VwIChpZiB0aGVyZSBpcyBvbmUpCi0gICAgICAgIHRvIGJlIG1hcmtlZCBhcyBibG9ja2luZyBvbiB0aGlzIHRocmVhZCBncm91cC4KLSAgICAiIiIKLSAgICBpZiB3aWxsX2Jsb2NrOgotICAgICAgIyBNdWx0aXBsZSB0aHJlYWRzIGJsb2NraW5nIG9uIHRoZSBzYW1lIG91dGVyIHRocmVhZCBzaG91bGQgbm90IGhhcHBlbiBpbgotICAgICAgIyBwcmFjdGljZS4KLSAgICAgIGFzc2VydCBub3Qgc2VsZi5ibG9ja2VkX3BhcmVudF90aHJlYWRfZ3JvdXAKLSAgICAgIHNlbGYuYmxvY2tlZF9wYXJlbnRfdGhyZWFkX2dyb3VwID0gQ3VycmVudFRocmVhZEdyb3VwKCkKLSAgICBmb3IgdGhyZWFkIGluIHNlbGYuX3RocmVhZHM6Ci0gICAgICB0aHJlYWQuc3RhcnQoKQotCi0gIGRlZiBfSm9pbkFsbChzZWxmLCB3YXRjaGVyPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgIiIiSm9pbiBhbGwgdGhyZWFkcyB3aXRob3V0IHN0YWNrIGR1bXBzLgotCi0gICAgUmVyYWlzZXMgZXhjZXB0aW9ucyByYWlzZWQgYnkgdGhlIGNoaWxkIHRocmVhZHMgYW5kIHN1cHBvcnRzIGJyZWFraW5nCi0gICAgaW1tZWRpYXRlbHkgb24gZXhjZXB0aW9ucyByYWlzZWQgb24gdGhlIG1haW4gdGhyZWFkLgotCi0gICAgQXJnczoKLSAgICAgIHdhdGNoZXI6IFdhdGNoZG9nIG9iamVjdCBwcm92aWRpbmcgdGhlIHRocmVhZCB0aW1lb3V0LiBJZiBub25lIGlzCi0gICAgICAgICAgcHJvdmlkZWQsIHRoZSB0aHJlYWQgd2lsbCBuZXZlciBiZSB0aW1lZCBvdXQuCi0gICAgICB0aW1lb3V0OiBBbiBvcHRpb25hbCBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSB0aW1pbmcgb3V0IHRoZSBqb2luCi0gICAgICAgICAgb3BlcmF0aW9uLiBUaGlzIHdpbGwgbm90IHRpbWUgb3V0IHRoZSB0aHJlYWRzLgotICAgICIiIgotICAgIGlmIHdhdGNoZXIgaXMgTm9uZToKLSAgICAgIHdhdGNoZXIgPSB3YXRjaGRvZ190aW1lci5XYXRjaGRvZ1RpbWVyKE5vbmUpCi0gICAgYWxpdmVfdGhyZWFkcyA9IHNlbGYuX3RocmVhZHNbOl0KLSAgICBlbmRfdGltZSA9ICh0aW1lLnRpbWUoKSArIHRpbWVvdXQpIGlmIHRpbWVvdXQgZWxzZSBOb25lCi0gICAgdHJ5OgotICAgICAgd2hpbGUgYWxpdmVfdGhyZWFkcyBhbmQgKGVuZF90aW1lIGlzIE5vbmUgb3IgZW5kX3RpbWUgPiB0aW1lLnRpbWUoKSk6Ci0gICAgICAgIGZvciB0aHJlYWQgaW4gYWxpdmVfdGhyZWFkc1s6XToKLSAgICAgICAgICBpZiB3YXRjaGVyLklzVGltZWRPdXQoKToKLSAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFcnJvcignVGltZWQgb3V0IHdhaXRpbmcgZm9yICVkIG9mICVkIHRocmVhZHMuJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbihhbGl2ZV90aHJlYWRzKSwgbGVuKHNlbGYuX3RocmVhZHMpKSkKLSAgICAgICAgICAjIEFsbG93IHRoZSBtYWluIHRocmVhZCB0byBwZXJpb2RpY2FsbHkgY2hlY2sgZm9yIGludGVycnVwdHMuCi0gICAgICAgICAgdGhyZWFkLmpvaW4oMC4xKQotICAgICAgICAgIGlmIG5vdCB0aHJlYWQuaXNBbGl2ZSgpOgotICAgICAgICAgICAgYWxpdmVfdGhyZWFkcy5yZW1vdmUodGhyZWFkKQotICAgICAgIyBBbGwgdGhyZWFkcyBhcmUgYWxsb3dlZCB0byBjb21wbGV0ZSBiZWZvcmUgcmVyYWlzaW5nIGV4Y2VwdGlvbnMuCi0gICAgICBmb3IgdGhyZWFkIGluIHNlbGYuX3RocmVhZHM6Ci0gICAgICAgIHRocmVhZC5SZXJhaXNlSWZFeGNlcHRpb24oKQotICAgIGZpbmFsbHk6Ci0gICAgICBzZWxmLmJsb2NrZWRfcGFyZW50X3RocmVhZF9ncm91cCA9IE5vbmUKLQotICBkZWYgSXNBbGl2ZShzZWxmKToKLSAgICAiIiJDaGVjayB3aGV0aGVyIGFueSBvZiB0aGUgdGhyZWFkcyBhcmUgc3RpbGwgYWxpdmUuCi0KLSAgICBSZXR1cm5zOgotICAgICAgV2hldGhlciBhbnkgb2YgdGhlIHRocmVhZHMgYXJlIHN0aWxsIGFsaXZlLgotICAgICIiIgotICAgIHJldHVybiBhbnkodC5pc0FsaXZlKCkgZm9yIHQgaW4gc2VsZi5fdGhyZWFkcykKLQotICBkZWYgSm9pbkFsbChzZWxmLCB3YXRjaGVyPU5vbmUsIHRpbWVvdXQ9Tm9uZSwKLSAgICAgICAgICAgICAgZXJyb3JfbG9nX2Z1bmM9bG9nZ2luZy5jcml0aWNhbCk6Ci0gICAgIiIiSm9pbiBhbGwgdGhyZWFkcy4KLQotICAgIFJlcmFpc2VzIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoZSBjaGlsZCB0aHJlYWRzIGFuZCBzdXBwb3J0cyBicmVha2luZwotICAgIGltbWVkaWF0ZWx5IG9uIGV4Y2VwdGlvbnMgcmFpc2VkIG9uIHRoZSBtYWluIHRocmVhZC4gVW5maW5pc2hlZCB0aHJlYWRzJwotICAgIHN0YWNrcyB3aWxsIGJlIGxvZ2dlZCBvbiB3YXRjaGRvZyB0aW1lb3V0LgotCi0gICAgQXJnczoKLSAgICAgIHdhdGNoZXI6IFdhdGNoZG9nIG9iamVjdCBwcm92aWRpbmcgdGhlIHRocmVhZCB0aW1lb3V0LiBJZiBub25lIGlzCi0gICAgICAgICAgcHJvdmlkZWQsIHRoZSB0aHJlYWQgd2lsbCBuZXZlciBiZSB0aW1lZCBvdXQuCi0gICAgICB0aW1lb3V0OiBBbiBvcHRpb25hbCBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSB0aW1pbmcgb3V0IHRoZSBqb2luCi0gICAgICAgICAgb3BlcmF0aW9uLiBUaGlzIHdpbGwgbm90IHRpbWUgb3V0IHRoZSB0aHJlYWRzLgotICAgICAgZXJyb3JfbG9nX2Z1bmM6IExvZ2dpbmcgZnVuY3Rpb24gd2hlbiBsb2dnaW5nIGVycm9ycy4KLSAgICAiIiIKLSAgICB0cnk6Ci0gICAgICBzZWxmLl9Kb2luQWxsKHdhdGNoZXIsIHRpbWVvdXQpCi0gICAgZXhjZXB0IFRpbWVvdXRFcnJvcjoKLSAgICAgIGVycm9yX2xvZ19mdW5jKCdUaW1lZCBvdXQuIER1bXBpbmcgdGhyZWFkcy4nKQotICAgICAgZm9yIHRocmVhZCBpbiAodCBmb3IgdCBpbiBzZWxmLl90aHJlYWRzIGlmIHQuaXNBbGl2ZSgpKToKLSAgICAgICAgTG9nVGhyZWFkU3RhY2sodGhyZWFkLCBlcnJvcl9sb2dfZnVuYz1lcnJvcl9sb2dfZnVuYykKLSAgICAgIHJhaXNlCi0KLSAgZGVmIEdldEFsbFJldHVyblZhbHVlcyhzZWxmLCB3YXRjaGVyPU5vbmUpOgotICAgICIiIkdldCBhbGwgcmV0dXJuIHZhbHVlcywgam9pbmluZyBhbGwgdGhyZWFkcyBpZiBuZWNlc3NhcnkuCi0KLSAgICBBcmdzOgotICAgICAgd2F0Y2hlcjogc2FtZSBhcyBpbiB8Sm9pbkFsbHwuIE9ubHkgdXNlZCBpZiB0aHJlYWRzIGFyZSBhbGl2ZS4KLSAgICAiIiIKLSAgICBpZiBhbnkoW3QuaXNBbGl2ZSgpIGZvciB0IGluIHNlbGYuX3RocmVhZHNdKToKLSAgICAgIHNlbGYuSm9pbkFsbCh3YXRjaGVyKQotICAgIHJldHVybiBbdC5HZXRSZXR1cm5WYWx1ZSgpIGZvciB0IGluIHNlbGYuX3RocmVhZHNdCi0KLQotZGVmIEN1cnJlbnRUaHJlYWRHcm91cCgpOgotICAiIiJSZXR1cm5zIHRoZSBSZXJhaXNlclRocmVhZEdyb3VwIHRoYXQgb3ducyB0aGUgcnVubmluZyB0aHJlYWQuCi0KLSAgUmV0dXJuczoKLSAgICBUaGUgY3VycmVudCB0aHJlYWQgZ3JvdXAsIG90aGVyd2lzZSBOb25lLgotICAiIiIKLSAgY3VycmVudF90aHJlYWQgPSB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKQotICBpZiBpc2luc3RhbmNlKGN1cnJlbnRfdGhyZWFkLCBSZXJhaXNlclRocmVhZCk6Ci0gICAgcmV0dXJuIGN1cnJlbnRfdGhyZWFkLl90aHJlYWRfZ3JvdXAgICMgcHlsaW50OiBkaXNhYmxlPW5vLW1lbWJlcgotICByZXR1cm4gTm9uZQotCi0KLWRlZiBSdW5Bc3luYyhmdW5jcywgd2F0Y2hlcj1Ob25lKToKLSAgIiIiRXhlY3V0ZXMgdGhlIGdpdmVuIGZ1bmN0aW9ucyBpbiBwYXJhbGxlbCBhbmQgcmV0dXJucyB0aGVpciByZXN1bHRzLgotCi0gIEFyZ3M6Ci0gICAgZnVuY3M6IExpc3Qgb2YgZnVuY3Rpb25zIHRvIHBlcmZvcm0gb24gdGhlaXIgb3duIHRocmVhZHMuCi0gICAgd2F0Y2hlcjogV2F0Y2hkb2cgb2JqZWN0IHByb3ZpZGluZyB0aW1lb3V0LCBieSBkZWZhdWx0IHdhaXRzIGZvcmV2ZXIuCi0KLSAgUmV0dXJuczoKLSAgICBBIGxpc3Qgb2YgcmV0dXJuIHZhbHVlcyBpbiB0aGUgb3JkZXIgb2YgdGhlIGdpdmVuIGZ1bmN0aW9ucy4KLSAgIiIiCi0gIHRocmVhZF9ncm91cCA9IFJlcmFpc2VyVGhyZWFkR3JvdXAoUmVyYWlzZXJUaHJlYWQoZikgZm9yIGYgaW4gZnVuY3MpCi0gIHRocmVhZF9ncm91cC5TdGFydEFsbCh3aWxsX2Jsb2NrPVRydWUpCi0gIHJldHVybiB0aHJlYWRfZ3JvdXAuR2V0QWxsUmV0dXJuVmFsdWVzKHdhdGNoZXI9d2F0Y2hlcikKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3JlcmFpc2VyX3RocmVhZF91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3JlcmFpc2VyX3RocmVhZF91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNjNGU2Yi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy9yZXJhaXNlcl90aHJlYWRfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJVbml0dGVzdHMgZm9yIHJlcmFpc2VyX3RocmVhZC5weS4iIiIKLQotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHJlcmFpc2VyX3RocmVhZAotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgd2F0Y2hkb2dfdGltZXIKLQotCi1jbGFzcyBUZXN0RXhjZXB0aW9uKEV4Y2VwdGlvbik6Ci0gIHBhc3MKLQotCi1jbGFzcyBUZXN0UmVyYWlzZXJUaHJlYWQodW5pdHRlc3QuVGVzdENhc2UpOgotICAiIiJUZXN0cyBmb3IgcmVyYWlzZXJfdGhyZWFkLlJlcmFpc2VyVGhyZWFkLiIiIgotCi0gIGRlZiB0ZXN0Tm9taW5hbChzZWxmKToKLSAgICByZXN1bHQgPSBbTm9uZSwgTm9uZV0KLQotICAgIGRlZiBmKGEsIGI9Tm9uZSk6Ci0gICAgICByZXN1bHRbMF0gPSBhCi0gICAgICByZXN1bHRbMV0gPSBiCi0KLSAgICB0aHJlYWQgPSByZXJhaXNlcl90aHJlYWQuUmVyYWlzZXJUaHJlYWQoZiwgWzFdLCB7J2InOiAyfSkKLSAgICB0aHJlYWQuc3RhcnQoKQotICAgIHRocmVhZC5qb2luKCkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXSwgMSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsxXSwgMikKLQotICBkZWYgdGVzdFJhaXNlKHNlbGYpOgotICAgIGRlZiBmKCk6Ci0gICAgICByYWlzZSBUZXN0RXhjZXB0aW9uCi0KLSAgICB0aHJlYWQgPSByZXJhaXNlcl90aHJlYWQuUmVyYWlzZXJUaHJlYWQoZikKLSAgICB0aHJlYWQuc3RhcnQoKQotICAgIHRocmVhZC5qb2luKCkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFRlc3RFeGNlcHRpb24pOgotICAgICAgdGhyZWFkLlJlcmFpc2VJZkV4Y2VwdGlvbigpCi0KLQotY2xhc3MgVGVzdFJlcmFpc2VyVGhyZWFkR3JvdXAodW5pdHRlc3QuVGVzdENhc2UpOgotICAiIiJUZXN0cyBmb3IgcmVyYWlzZXJfdGhyZWFkLlJlcmFpc2VyVGhyZWFkR3JvdXAuIiIiCi0KLSAgZGVmIHRlc3RJbml0KHNlbGYpOgotICAgIHJhbiA9IFtGYWxzZV0gKiA1Ci0KLSAgICBkZWYgZihpKToKLSAgICAgIHJhbltpXSA9IFRydWUKLQotICAgIGdyb3VwID0gcmVyYWlzZXJfdGhyZWFkLlJlcmFpc2VyVGhyZWFkR3JvdXAoCi0gICAgICBbcmVyYWlzZXJfdGhyZWFkLlJlcmFpc2VyVGhyZWFkKGYsIGFyZ3M9W2ldKSBmb3IgaSBpbiByYW5nZSg1KV0pCi0gICAgZ3JvdXAuU3RhcnRBbGwoKQotICAgIGdyb3VwLkpvaW5BbGwoKQotICAgIGZvciB2IGluIHJhbjoKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2KQotCi0gIGRlZiB0ZXN0QWRkKHNlbGYpOgotICAgIHJhbiA9IFtGYWxzZV0gKiA1Ci0KLSAgICBkZWYgZihpKToKLSAgICAgIHJhbltpXSA9IFRydWUKLQotICAgIGdyb3VwID0gcmVyYWlzZXJfdGhyZWFkLlJlcmFpc2VyVGhyZWFkR3JvdXAoKQotICAgIGZvciBpIGluIHhyYW5nZSg1KToKLSAgICAgIGdyb3VwLkFkZChyZXJhaXNlcl90aHJlYWQuUmVyYWlzZXJUaHJlYWQoZiwgYXJncz1baV0pKQotICAgIGdyb3VwLlN0YXJ0QWxsKCkKLSAgICBncm91cC5Kb2luQWxsKCkKLSAgICBmb3IgdiBpbiByYW46Ci0gICAgICBzZWxmLmFzc2VydFRydWUodikKLQotICBkZWYgdGVzdEpvaW5SYWlzZShzZWxmKToKLSAgICBkZWYgZigpOgotICAgICAgcmFpc2UgVGVzdEV4Y2VwdGlvbgotICAgIGdyb3VwID0gcmVyYWlzZXJfdGhyZWFkLlJlcmFpc2VyVGhyZWFkR3JvdXAoCi0gICAgICBbcmVyYWlzZXJfdGhyZWFkLlJlcmFpc2VyVGhyZWFkKGYpIGZvciBfIGluIHhyYW5nZSg1KV0pCi0gICAgZ3JvdXAuU3RhcnRBbGwoKQotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVGVzdEV4Y2VwdGlvbik6Ci0gICAgICBncm91cC5Kb2luQWxsKCkKLQotICBkZWYgdGVzdEpvaW5UaW1lb3V0KHNlbGYpOgotICAgIGRlZiBmKCk6Ci0gICAgICBwYXNzCi0gICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQotCi0gICAgZGVmIGcoKToKLSAgICAgIGV2ZW50LndhaXQoKQotICAgIGdyb3VwID0gcmVyYWlzZXJfdGhyZWFkLlJlcmFpc2VyVGhyZWFkR3JvdXAoCi0gICAgICAgIFtyZXJhaXNlcl90aHJlYWQuUmVyYWlzZXJUaHJlYWQoZyksCi0gICAgICAgICByZXJhaXNlcl90aHJlYWQuUmVyYWlzZXJUaHJlYWQoZildKQotICAgIGdyb3VwLlN0YXJ0QWxsKCkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHJlcmFpc2VyX3RocmVhZC5UaW1lb3V0RXJyb3IpOgotICAgICAgZ3JvdXAuSm9pbkFsbCh3YXRjaGRvZ190aW1lci5XYXRjaGRvZ1RpbWVyKDAuMDEpKQotICAgIGV2ZW50LnNldCgpCi0KLQotY2xhc3MgVGVzdFJ1bkFzeW5jKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgIiIiVGVzdHMgZm9yIHJlcmFpc2VyX3RocmVhZC5SdW5Bc3luYy4iIiIKLQotICBkZWYgdGVzdE5vQXJncyhzZWxmKToKLSAgICByZXN1bHRzID0gcmVyYWlzZXJfdGhyZWFkLlJ1bkFzeW5jKFtdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdHMpCi0KLSAgZGVmIHRlc3RPbmVBcmcoc2VsZik6Ci0gICAgcmVzdWx0cyA9IHJlcmFpc2VyX3RocmVhZC5SdW5Bc3luYyhbbGFtYmRhOiAxXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0cykKLQotICBkZWYgdGVzdFR3b0FyZ3Moc2VsZik6Ci0gICAgYSwgYiA9IHJlcmFpc2VyX3RocmVhZC5SdW5Bc3luYygobGFtYmRhOiAxLCBsYW1iZGE6IDIpKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgYSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGIpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvcmVzZXRfdXNiLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvcmVzZXRfdXNiLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMzM1MjI3Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3Jlc2V0X3VzYi5weQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgZmNudGwKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IHN5cwotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMucGF0aC5hcHBlbmQoCi0gICAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLicsICcuLicpKSkKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBsc3VzYgotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgcnVuX3Rlc3RzX2hlbHBlcgotCi1sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotX0lOREVOVEFUSU9OX1JFID0gcmUuY29tcGlsZShyJ14oICopJykKLV9MU1VTQl9CVVNfREVWSUNFX1JFID0gcmUuY29tcGlsZShyJ15CdXMgKFxkezN9KSBEZXZpY2UgKFxkezN9KTonKQotX0xTVVNCX0VOVFJZX1JFID0gcmUuY29tcGlsZShyJ14gKihbXiBdKykgKyhbXiBdKykgKihbXiBdLiopPyQnKQotX0xTVVNCX0dST1VQX1JFID0gcmUuY29tcGlsZShyJ14gKihbXiBdKy4qKTokJykKLQotX1VTQkRFVkZTX1JFU0VUID0gb3JkKCdVJykgPDwgOCB8IDIwCi0KLQotZGVmIHJlc2V0X3VzYihidXMsIGRldmljZSk6Ci0gICIiIlJlc2V0IHRoZSBVU0IgZGV2aWNlIHdpdGggdGhlIGdpdmVuIGJ1cyBhbmQgZGV2aWNlLiIiIgotICB1c2JfZmlsZV9wYXRoID0gJy9kZXYvYnVzL3VzYi8lMDNkLyUwM2QnICUgKGJ1cywgZGV2aWNlKQotICB3aXRoIG9wZW4odXNiX2ZpbGVfcGF0aCwgJ3cnKSBhcyB1c2JfZmlsZToKLSAgICBsb2dnZXIuZGVidWcoJ2ZjbnRsLmlvY3RsKCVzLCAlZCknLCB1c2JfZmlsZV9wYXRoLCBfVVNCREVWRlNfUkVTRVQpCi0gICAgZmNudGwuaW9jdGwodXNiX2ZpbGUsIF9VU0JERVZGU19SRVNFVCkKLQotCi1kZWYgcmVzZXRfYW5kcm9pZF91c2Ioc2VyaWFsKToKLSAgIiIiUmVzZXQgdGhlIFVTQiBkZXZpY2UgZm9yIHRoZSBnaXZlbiBBbmRyb2lkIGRldmljZS4iIiIKLSAgbHN1c2JfaW5mbyA9IGxzdXNiLmxzdXNiKCkKLQotICBidXMgPSBOb25lCi0gIGRldmljZSA9IE5vbmUKLSAgZm9yIGRldmljZV9pbmZvIGluIGxzdXNiX2luZm86Ci0gICAgZGV2aWNlX3NlcmlhbCA9IGxzdXNiLmdldF9sc3VzYl9zZXJpYWwoZGV2aWNlX2luZm8pCi0gICAgaWYgZGV2aWNlX3NlcmlhbCA9PSBzZXJpYWw6Ci0gICAgICBidXMgPSBpbnQoZGV2aWNlX2luZm8uZ2V0KCdidXMnKSkKLSAgICAgIGRldmljZSA9IGludChkZXZpY2VfaW5mby5nZXQoJ2RldmljZScpKQotCi0gIGlmIGJ1cyBhbmQgZGV2aWNlOgotICAgIHJlc2V0X3VzYihidXMsIGRldmljZSkKLSAgZWxzZToKLSAgICByYWlzZSBkZXZpY2VfZXJyb3JzLkRldmljZVVucmVhY2hhYmxlRXJyb3IoCi0gICAgICAgICdVbmFibGUgdG8gZGV0ZXJtaW5lIGJ1cyglcykgb3IgZGV2aWNlKCVzKSBmb3IgZGV2aWNlICVzJwotICAgICAgICAgJSAoYnVzLCBkZXZpY2UsIHNlcmlhbCkpCi0KLQotZGVmIHJlc2V0X2FsbF9hbmRyb2lkX2RldmljZXMoKToKLSAgIiIiUmVzZXQgYWxsIFVTQiBkZXZpY2VzIHRoYXQgbG9vayBsaWtlIGFuIEFuZHJvaWQgZGV2aWNlLiIiIgotICBfcmVzZXRfYWxsX21hdGNoaW5nKGxhbWJkYSBpOiBib29sKGxzdXNiLmdldF9sc3VzYl9zZXJpYWwoaSkpKQotCi0KLWRlZiBfcmVzZXRfYWxsX21hdGNoaW5nKGNvbmRpdGlvbik6Ci0gIGxzdXNiX2luZm8gPSBsc3VzYi5sc3VzYigpCi0gIGZvciBkZXZpY2VfaW5mbyBpbiBsc3VzYl9pbmZvOgotICAgIGlmIGludChkZXZpY2VfaW5mby5nZXQoJ2RldmljZScpKSAhPSAxIGFuZCBjb25kaXRpb24oZGV2aWNlX2luZm8pOgotICAgICAgYnVzID0gaW50KGRldmljZV9pbmZvLmdldCgnYnVzJykpCi0gICAgICBkZXZpY2UgPSBpbnQoZGV2aWNlX2luZm8uZ2V0KCdkZXZpY2UnKSkKLSAgICAgIHRyeToKLSAgICAgICAgcmVzZXRfdXNiKGJ1cywgZGV2aWNlKQotICAgICAgICBzZXJpYWwgPSBsc3VzYi5nZXRfbHN1c2Jfc2VyaWFsKGRldmljZV9pbmZvKQotICAgICAgICBpZiBzZXJpYWw6Ci0gICAgICAgICAgbG9nZ2VyLmluZm8oCi0gICAgICAgICAgICAgICdSZXNldCBVU0IgZGV2aWNlIChidXM6ICUwM2QsIGRldmljZTogJTAzZCwgc2VyaWFsOiAlcyknLAotICAgICAgICAgICAgICBidXMsIGRldmljZSwgc2VyaWFsKQotICAgICAgICBlbHNlOgotICAgICAgICAgIGxvZ2dlci5pbmZvKAotICAgICAgICAgICAgICAnUmVzZXQgVVNCIGRldmljZSAoYnVzOiAlMDNkLCBkZXZpY2U6ICUwM2QpJywKLSAgICAgICAgICAgICAgYnVzLCBkZXZpY2UpCi0gICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgbG9nZ2VyLmVycm9yKAotICAgICAgICAgICAgJ0ZhaWxlZCB0byByZXNldCBVU0IgZGV2aWNlIChidXM6ICUwM2QsIGRldmljZTogJTAzZCknLAotICAgICAgICAgICAgYnVzLCBkZXZpY2UpCi0KLQotZGVmIG1haW4oKToKLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zZXJpYWwnKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJ1cycsIHR5cGU9aW50KQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRldmljZScsIHR5cGU9aW50KQotICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQotCi0gIHJ1bl90ZXN0c19oZWxwZXIuU2V0TG9nTGV2ZWwoYXJncy52ZXJib3NlKQotCi0gIGlmIGFyZ3Muc2VyaWFsOgotICAgIHJlc2V0X2FuZHJvaWRfdXNiKGFyZ3Muc2VyaWFsKQotICBlbGlmIGFyZ3MuYnVzIGFuZCBhcmdzLmRldmljZToKLSAgICByZXNldF91c2IoYXJncy5idXMsIGFyZ3MuZGV2aWNlKQotICBlbHNlOgotICAgIHBhcnNlci5lcnJvcignVW5hYmxlIHRvIGRldGVybWluZSB0YXJnZXQuICcKLSAgICAgICAgICAgICAgICAgJ1NwZWNpZnkgLS1zZXJpYWwgb3IgQk9USCAtLWJ1cyBhbmQgLS1kZXZpY2UuJykKLQotICByZXR1cm4gMAotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5leGl0KG1haW4oKSkKLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvcnVuX3Rlc3RzX2hlbHBlci5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3J1bl90ZXN0c19oZWxwZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNzFiNjUuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvcnVuX3Rlc3RzX2hlbHBlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIkhlbHBlciBmdW5jdGlvbnMgY29tbW9uIHRvIG5hdGl2ZSwgamF2YSBhbmQgaG9zdC1kcml2ZW4gdGVzdCBydW5uZXJzLiIiIgotCi1pbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBsb2dnaW5nCi0KLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGxvZ2dpbmdfY29tbW9uCi0KLQotQ3VzdG9tRm9ybWF0dGVyID0gbG9nZ2luZ19jb21tb24uQ3VzdG9tRm9ybWF0dGVyCi0KLQotX1dyYXBwZWRMb2dnaW5nQXJncyA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoCi0gICAgJ19XcmFwcGVkTG9nZ2luZ0FyZ3MnLCBbJ3ZlcmJvc2UnXSkKLQotCi1kZWYgU2V0TG9nTGV2ZWwodmVyYm9zZV9jb3VudCwgYWRkX2hhbmRsZXI9VHJ1ZSk6Ci0gICIiIlNldHMgbG9nIGxldmVsIGFzIHx2ZXJib3NlX2NvdW50fC4KLQotICBBcmdzOgotICAgIHZlcmJvc2VfY291bnQ6IFZlcmJvc2l0eSBsZXZlbC4KLSAgICBhZGRfaGFuZGxlcjogSWYgdHJ1ZSwgYWRkcyBhIGhhbmRsZXIgd2l0aCB8Q3VzdG9tRm9ybWF0dGVyfC4KLSAgIiIiCi0gIGxvZ2dpbmdfY29tbW9uLkluaXRpYWxpemVMb2dnaW5nKAotICAgICAgX1dyYXBwZWRMb2dnaW5nQXJncyh2ZXJib3NlX2NvdW50KSwKLSAgICAgIGhhbmRsZXI9Tm9uZSBpZiBhZGRfaGFuZGxlciBlbHNlIGxvZ2dpbmcuTnVsbEhhbmRsZXIoKSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3NpZ25hbF9oYW5kbGVyLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvc2lnbmFsX2hhbmRsZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyMzBmOGQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvc2lnbmFsX2hhbmRsZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQgc2lnbmFsCi0KLQotQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLWRlZiBTaWduYWxIYW5kbGVyKHNpZ25hbG51bSwgaGFuZGxlcik6Ci0gICIiIlNldHMgdGhlIHNpZ25hbCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gc2lnbmFsIGluIHRoZSB3cmFwcGVkIGNvbnRleHQuCi0KLSAgQXJnczoKLSAgICBzaWdudW06IFRoZSBzaWduYWwgZm9yIHdoaWNoIGEgaGFuZGxlciBzaG91bGQgYmUgYWRkZWQuCi0gICAgYWRkaXRpb25hbF9oYW5kbGVyOiBUaGUgaGFuZGxlciB0byBhZGQuCi0gICIiIgotICBleGlzdGluZ19oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWxudW0pCi0KLSAgdHJ5OgotICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsbnVtLCBoYW5kbGVyKQotICAgIHlpZWxkCi0gIGZpbmFsbHk6Ci0gICAgc2lnbmFsLnNpZ25hbChzaWduYWxudW0sIGV4aXN0aW5nX2hhbmRsZXIpCi0KLQotQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLWRlZiBBZGRTaWduYWxIYW5kbGVyKHNpZ25hbG51bSwgYWRkaXRpb25hbF9oYW5kbGVyKToKLSAgIiIiQWRkcyBhIHNpZ25hbCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gc2lnbmFsIGluIHRoZSB3cmFwcGVkIGNvbnRleHQuCi0KLSAgVGhpcyBydW5zIHRoZSBuZXcgaGFuZGxlciBhZnRlciBhbnkgZXhpc3RpbmcgaGFuZGxlciByYXRoZXIgdGhhbgotICByZXBsYWNpbmcgdGhlIGV4aXN0aW5nIGhhbmRsZXIuCi0KLSAgQXJnczoKLSAgICBzaWdudW06IFRoZSBzaWduYWwgZm9yIHdoaWNoIGEgaGFuZGxlciBzaG91bGQgYmUgYWRkZWQuCi0gICAgYWRkaXRpb25hbF9oYW5kbGVyOiBUaGUgaGFuZGxlciB0byBhZGQuCi0gICIiIgotICBleGlzdGluZ19oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWxudW0pCi0KLSAgZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6Ci0gICAgaWYgY2FsbGFibGUoZXhpc3RpbmdfaGFuZGxlcik6Ci0gICAgICBleGlzdGluZ19oYW5kbGVyKHNpZ251bSwgZnJhbWUpCi0gICAgYWRkaXRpb25hbF9oYW5kbGVyKHNpZ251bSwgZnJhbWUpCi0KLSAgdHJ5OgotICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsbnVtLCBoYW5kbGVyKQotICAgIHlpZWxkCi0gIGZpbmFsbHk6Ci0gICAgc2lnbmFsLnNpZ25hbChzaWduYWxudW0sIGV4aXN0aW5nX2hhbmRsZXIpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy90ZXN0L2RhdGEvdGVzdF9zZXJpYWxfbWFwLmpzb24gYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy90ZXN0L2RhdGEvdGVzdF9zZXJpYWxfbWFwLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNjgyODEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvdGVzdC9kYXRhL3Rlc3Rfc2VyaWFsX21hcC5qc29uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotW3sicGhvbmUiOiAiUGhvbmUxIiwgImJhdHRvciI6ICJCYXR0T3IxIn0sIHsicGhvbmUiOiAiUGhvbmUyIiwgImJhdHRvciI6ICJCYXR0T3IyIn0sIHsicGhvbmUiOiAiUGhvbmUzIiwgImJhdHRvciI6ICJCYXR0T3IzIn1dCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy90aW1lb3V0X3JldHJ5LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvdGltZW91dF9yZXRyeS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMyN2I2Yi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy90aW1lb3V0X3JldHJ5LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiQSB1dGlsaXR5IHRvIHJ1biBmdW5jdGlvbnMgd2l0aCB0aW1lb3V0cyBhbmQgcmV0cmllcy4iIiIKLSMgcHlsaW50OiBkaXNhYmxlPVcwNzAyCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgdGltZQotCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCByZXJhaXNlcl90aHJlYWQKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IHdhdGNoZG9nX3RpbWVyCi0KLWxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWNsYXNzIFRpbWVvdXRSZXRyeVRocmVhZEdyb3VwKHJlcmFpc2VyX3RocmVhZC5SZXJhaXNlclRocmVhZEdyb3VwKToKLQotICBkZWYgX19pbml0X18oc2VsZiwgdGltZW91dCwgdGhyZWFkcz1Ob25lKToKLSAgICBzdXBlcihUaW1lb3V0UmV0cnlUaHJlYWRHcm91cCwgc2VsZikuX19pbml0X18odGhyZWFkcykKLSAgICBzZWxmLl93YXRjaGVyID0gd2F0Y2hkb2dfdGltZXIuV2F0Y2hkb2dUaW1lcih0aW1lb3V0KQotCi0gIGRlZiBHZXRXYXRjaGVyKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIHdhdGNoZG9nIGtlZXBpbmcgdHJhY2sgb2YgdGhpcyB0aHJlYWQncyB0aW1lLiIiIgotICAgIHJldHVybiBzZWxmLl93YXRjaGVyCi0KLSAgZGVmIEdldEVsYXBzZWRUaW1lKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl93YXRjaGVyLkdldEVsYXBzZWQoKQotCi0gIGRlZiBHZXRSZW1haW5pbmdUaW1lKHNlbGYsIHJlcXVpcmVkPTAsIHN1ZmZpeD1Ob25lKToKLSAgICAiIiJHZXQgdGhlIHJlbWFpbmluZyB0aW1lIGJlZm9yZSB0aGUgdGhyZWFkIHRpbWVzIG91dC4KLQotICAgIFVzZWZ1bCB0byBzZW5kIGFzIHRoZSB8dGltZW91dHwgcGFyYW1ldGVyIG9mIGFzeW5jIElPIG9wZXJhdGlvbnMuCi0KLSAgICBBcmdzOgotICAgICAgcmVxdWlyZWQ6IG1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhhdCB3aWxsIGJlIHJlcXVpcmVkIHRvIGNvbXBsZXRlLCBlLmcuLAotICAgICAgICBzb21lIHNsZWVwIG9yIElPIG9wZXJhdGlvbi4KLSAgICAgIG1zZzogZXJyb3IgbWVzc2FnZSB0byBzaG93IGlmIHRpbWluZyBvdXQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIG51bWJlciBvZiBzZWNvbmRzIHJlbWFpbmluZyBiZWZvcmUgdGhlIHRocmVhZCB0aW1lcyBvdXQsIG9yIE5vbmUKLSAgICAgIGlmIHRoZSB0aHJlYWQgbmV2ZXIgdGltZXMgb3V0LgotCi0gICAgUmFpc2VzOgotICAgICAgcmVyYWlzZXJfdGhyZWFkLlRpbWVvdXRFcnJvciBpZiB0aGUgcmVtYWluaW5nIHRpbWUgaXMgbGVzcyB0aGFuIHRoZQotICAgICAgICByZXF1aXJlZCB0aW1lLgotICAgICIiIgotICAgIHJlbWFpbmluZyA9IHNlbGYuX3dhdGNoZXIuR2V0UmVtYWluaW5nKCkKLSAgICBpZiByZW1haW5pbmcgaXMgbm90IE5vbmUgYW5kIHJlbWFpbmluZyA8IHJlcXVpcmVkOgotICAgICAgbXNnID0gJ1RpbWVvdXQgb2YgJS4xZiBzZWNzIGV4cGlyZWQnICUgc2VsZi5fd2F0Y2hlci5HZXRUaW1lb3V0KCkKLSAgICAgIGlmIHN1ZmZpeDoKLSAgICAgICAgbXNnICs9IHN1ZmZpeAotICAgICAgcmFpc2UgcmVyYWlzZXJfdGhyZWFkLlRpbWVvdXRFcnJvcihtc2cpCi0gICAgcmV0dXJuIHJlbWFpbmluZwotCi0KLWRlZiBDdXJyZW50VGltZW91dFRocmVhZEdyb3VwKCk6Ci0gICIiIlJldHVybnMgdGhlIHRocmVhZCBncm91cCB0aGF0IG93bnMgb3IgaXMgYmxvY2tlZCBvbiB0aGUgYWN0aXZlIHRocmVhZC4KLQotICBSZXR1cm5zOgotICAgIFJldHVybnMgTm9uZSBpZiBubyBUaW1lb3V0UmV0cnlUaHJlYWRHcm91cCBpcyB0cmFja2luZyB0aGUgY3VycmVudCB0aHJlYWQuCi0gICIiIgotICB0aHJlYWRfZ3JvdXAgPSByZXJhaXNlcl90aHJlYWQuQ3VycmVudFRocmVhZEdyb3VwKCkKLSAgd2hpbGUgdGhyZWFkX2dyb3VwOgotICAgIGlmIGlzaW5zdGFuY2UodGhyZWFkX2dyb3VwLCBUaW1lb3V0UmV0cnlUaHJlYWRHcm91cCk6Ci0gICAgICByZXR1cm4gdGhyZWFkX2dyb3VwCi0gICAgdGhyZWFkX2dyb3VwID0gdGhyZWFkX2dyb3VwLmJsb2NrZWRfcGFyZW50X3RocmVhZF9ncm91cAotICByZXR1cm4gTm9uZQotCi0KLWRlZiBXYWl0Rm9yKGNvbmRpdGlvbiwgd2FpdF9wZXJpb2Q9NSwgbWF4X3RyaWVzPU5vbmUpOgotICAiIiJXYWl0IGZvciBhIGNvbmRpdGlvbiB0byBiZWNvbWUgdHJ1ZS4KLQotICBSZXBlYXRlZGx5IGNhbGwgdGhlIGZ1bmN0aW9uIGNvbmRpdGlvbigpLCB3aXRoIG5vIGFyZ3VtZW50cywgdW50aWwgaXQgcmV0dXJucwotICBhIHRydWUgdmFsdWUuCi0KLSAgSWYgY2FsbGVkIHdpdGhpbiBhIFRpbWVvdXRSZXRyeVRocmVhZEdyb3VwLCBpdCBjb29wZXJhdGVzIG5pY2VseSB3aXRoIGl0LgotCi0gIEFyZ3M6Ci0gICAgY29uZGl0aW9uOiBmdW5jdGlvbiB3aXRoIHRoZSBjb25kaXRpb24gdG8gY2hlY2sKLSAgICB3YWl0X3BlcmlvZDogbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgdG8gY2hlY2sgdGhlCi0gICAgICBjb25kaXRpb24KLSAgICBtYXhfdHJpZXM6IG1heGltdW0gbnVtYmVyIG9mIGNoZWNrcyB0byBtYWtlLCB0aGUgZGVmYXVsdCB0cmllcyBmb3JldmVyCi0gICAgICBvciB1bnRpbCB0aGUgVGltZW91dFJldHJ5VGhyZWFkR3JvdXAgZXhwaXJlcy4KLQotICBSZXR1cm5zOgotICAgIFRoZSB0cnVlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBjb25kaXRpb24sIG9yIE5vbmUgaWYgdGhlIGNvbmRpdGlvbiB3YXMKLSAgICBub3QgbWV0IGFmdGVyIG1heF90cmllcy4KLQotICBSYWlzZXM6Ci0gICAgcmVyYWlzZXJfdGhyZWFkLlRpbWVvdXRFcnJvcjogaWYgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIGEKLSAgICAgIFRpbWVvdXRSZXRyeVRocmVhZEdyb3VwIGFuZCB0aGUgdGltZW91dCBleHBpcmVzLgotICAiIiIKLSAgY29uZGl0aW9uX25hbWUgPSBjb25kaXRpb24uX19uYW1lX18KLSAgdGltZW91dF90aHJlYWRfZ3JvdXAgPSBDdXJyZW50VGltZW91dFRocmVhZEdyb3VwKCkKLSAgd2hpbGUgbWF4X3RyaWVzIGlzIE5vbmUgb3IgbWF4X3RyaWVzID4gMDoKLSAgICByZXN1bHQgPSBjb25kaXRpb24oKQotICAgIGlmIG1heF90cmllcyBpcyBub3QgTm9uZToKLSAgICAgIG1heF90cmllcyAtPSAxCi0gICAgbXNnID0gWydjb25kaXRpb24nLCByZXByKGNvbmRpdGlvbl9uYW1lKSwgJ21ldCcgaWYgcmVzdWx0IGVsc2UgJ25vdCBtZXQnXQotICAgIGlmIHRpbWVvdXRfdGhyZWFkX2dyb3VwOgotICAgICAgIyBweWxpbnQ6IGRpc2FibGU9bm8tbWVtYmVyCi0gICAgICBtc2cuYXBwZW5kKCcoJS4xZnMpJyAlIHRpbWVvdXRfdGhyZWFkX2dyb3VwLkdldEVsYXBzZWRUaW1lKCkpCi0gICAgbG9nZ2VyLmluZm8oJyAnLmpvaW4obXNnKSkKLSAgICBpZiByZXN1bHQ6Ci0gICAgICByZXR1cm4gcmVzdWx0Ci0gICAgaWYgdGltZW91dF90aHJlYWRfZ3JvdXA6Ci0gICAgICAjIHB5bGludDogZGlzYWJsZT1uby1tZW1iZXIKLSAgICAgIHRpbWVvdXRfdGhyZWFkX2dyb3VwLkdldFJlbWFpbmluZ1RpbWUod2FpdF9wZXJpb2QsCi0gICAgICAgICAgc3VmZml4PScgd2FpdGluZyBmb3IgY29uZGl0aW9uICVyJyAlIGNvbmRpdGlvbl9uYW1lKQotICAgIHRpbWUuc2xlZXAod2FpdF9wZXJpb2QpCi0gIHJldHVybiBOb25lCi0KLQotZGVmIEFsd2F5c1JldHJ5KF9leGNlcHRpb24pOgotICByZXR1cm4gVHJ1ZQotCi0KLWRlZiBSdW4oZnVuYywgdGltZW91dCwgcmV0cmllcywgYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSwgZGVzYz1Ob25lLAotICAgICAgICBlcnJvcl9sb2dfZnVuYz1sb2dnaW5nLmNyaXRpY2FsLCByZXRyeV9pZl9mdW5jPUFsd2F5c1JldHJ5KToKLSAgIiIiUnVucyB0aGUgcGFzc2VkIGZ1bmN0aW9uIGluIGEgc2VwYXJhdGUgdGhyZWFkIHdpdGggdGltZW91dHMgYW5kIHJldHJpZXMuCi0KLSAgQXJnczoKLSAgICBmdW5jOiB0aGUgZnVuY3Rpb24gdG8gYmUgd3JhcHBlZC4KLSAgICB0aW1lb3V0OiB0aGUgdGltZW91dCBpbiBzZWNvbmRzIGZvciBlYWNoIHRyeS4KLSAgICByZXRyaWVzOiB0aGUgbnVtYmVyIG9mIHJldHJpZXMuCi0gICAgYXJnczogbGlzdCBvZiBwb3NpdGlvbmFsIGFyZ3MgdG8gcGFzcyB0byB8ZnVuY3wuCi0gICAga3dhcmdzOiBkaWN0aW9uYXJ5IG9mIGtleXdvcmQgYXJncyB0byBwYXNzIHRvIHxmdW5jfC4KLSAgICBkZXNjOiBBbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBvZiB8ZnVuY3wgdXNlZCBpbiBsb2dnaW5nLiBJZiBvbWl0dGVkLAotICAgICAgfGZ1bmMuX19uYW1lX198IHdpbGwgYmUgdXNlZC4KLSAgICBlcnJvcl9sb2dfZnVuYzogTG9nZ2luZyBmdW5jdGlvbiB3aGVuIGxvZ2dpbmcgZXJyb3JzLgotICAgIHJldHJ5X2lmX2Z1bmM6IFVuYXJ5IGNhbGxhYmxlIHRoYXQgdGFrZXMgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm5zCi0gICAgICB3aGV0aGVyIHxmdW5jfCBzaG91bGQgYmUgcmV0cmllZC4gRGVmYXVsdHMgdG8gYWx3YXlzIHJldHJ5aW5nLgotCi0gIFJldHVybnM6Ci0gICAgVGhlIHJldHVybiB2YWx1ZSBvZiBmdW5jKCphcmdzLCAqKmt3YXJncykuCi0gICIiIgotICBpZiBub3QgYXJnczoKLSAgICBhcmdzID0gW10KLSAgaWYgbm90IGt3YXJnczoKLSAgICBrd2FyZ3MgPSB7fQotICBpZiBub3QgZGVzYzoKLSAgICBkZXNjID0gZnVuYy5fX25hbWVfXwotCi0gIG51bV90cnkgPSAxCi0gIHdoaWxlIFRydWU6Ci0gICAgdGhyZWFkX25hbWUgPSAnVGltZW91dFRocmVhZC0lZC1mb3ItJXMnICUgKG51bV90cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUpCi0gICAgY2hpbGRfdGhyZWFkID0gcmVyYWlzZXJfdGhyZWFkLlJlcmFpc2VyVGhyZWFkKGxhbWJkYTogZnVuYygqYXJncywgKiprd2FyZ3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXRocmVhZF9uYW1lKQotICAgIHRyeToKLSAgICAgIHRocmVhZF9ncm91cCA9IFRpbWVvdXRSZXRyeVRocmVhZEdyb3VwKHRpbWVvdXQsIHRocmVhZHM9W2NoaWxkX3RocmVhZF0pCi0gICAgICB0aHJlYWRfZ3JvdXAuU3RhcnRBbGwod2lsbF9ibG9jaz1UcnVlKQotICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgdGhyZWFkX2dyb3VwLkpvaW5BbGwod2F0Y2hlcj10aHJlYWRfZ3JvdXAuR2V0V2F0Y2hlcigpLCB0aW1lb3V0PTYwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2dfZnVuYz1lcnJvcl9sb2dfZnVuYykKLSAgICAgICAgaWYgdGhyZWFkX2dyb3VwLklzQWxpdmUoKToKLSAgICAgICAgICBsb2dnZXIuaW5mbygnU3RpbGwgd29ya2luZyBvbiAlcycsIGRlc2MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcmV0dXJuIHRocmVhZF9ncm91cC5HZXRBbGxSZXR1cm5WYWx1ZXMoKVswXQotICAgIGV4Y2VwdCByZXJhaXNlcl90aHJlYWQuVGltZW91dEVycm9yIGFzIGU6Ci0gICAgICAjIFRpbWVvdXRzIGFscmVhZHkgZ2V0IHRoZWlyIHN0YWNrcyBsb2dnZWQuCi0gICAgICBpZiBudW1fdHJ5ID4gcmV0cmllcyBvciBub3QgcmV0cnlfaWZfZnVuYyhlKToKLSAgICAgICAgcmFpc2UKLSAgICAgICMgRG8gbm90IGNhdGNoIEtleWJvYXJkSW50ZXJydXB0LgotICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAotICAgICAgaWYgbnVtX3RyeSA+IHJldHJpZXMgb3Igbm90IHJldHJ5X2lmX2Z1bmMoZSk6Ci0gICAgICAgIHJhaXNlCi0gICAgICBlcnJvcl9sb2dfZnVuYygKLSAgICAgICAgICAnKCVzKSBFeGNlcHRpb24gb24gJXMsIGF0dGVtcHQgJWQgb2YgJWQ6ICVyJywKLSAgICAgICAgICB0aHJlYWRfbmFtZSwgZGVzYywgbnVtX3RyeSwgcmV0cmllcyArIDEsIGUpCi0gICAgbnVtX3RyeSArPSAxCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy90aW1lb3V0X3JldHJ5X3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvdGltZW91dF9yZXRyeV91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMGVlYjMxYS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy90aW1lb3V0X3JldHJ5X3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotIyEvdXNyL2Jpbi9weXRob24KLSMgQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiVW5pdHRlc3RzIGZvciB0aW1lb3V0X2FuZF9yZXRyeS5weS4iIiIKLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCB0aW1lCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgcmVyYWlzZXJfdGhyZWFkCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCB0aW1lb3V0X3JldHJ5Ci0KLQotX0RFRkFVTFRfVElNRU9VVCA9IC4xCi0KLQotY2xhc3MgVGVzdEV4Y2VwdGlvbihFeGNlcHRpb24pOgotICBwYXNzCi0KLQotZGVmIF9Db3VudFRyaWVzKHRyaWVzKToKLSAgdHJpZXNbMF0gKz0gMQotICByYWlzZSBUZXN0RXhjZXB0aW9uCi0KLQotY2xhc3MgVGVzdFJ1bih1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICIiIlRlc3RzIGZvciB0aW1lb3V0X3JldHJ5LlJ1bi4iIiIKLQotICBkZWYgdGVzdFJ1bihzZWxmKToKLSAgICBzZWxmLmFzc2VydFRydWUodGltZW91dF9yZXRyeS5SdW4oCi0gICAgICAgIGxhbWJkYSB4OiB4LCAzMCwgMywgW1RydWVdLCB7fSkpCi0KLSAgZGVmIHRlc3RUaW1lb3V0KHNlbGYpOgotICAgIHRyaWVzID0gWzBdCi0KLSAgICBkZWYgX3NsZWVwKCk6Ci0gICAgICB0cmllc1swXSArPSAxCi0gICAgICB0aW1lLnNsZWVwKDEpCi0KLSAgICBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgcmVyYWlzZXJfdGhyZWFkLlRpbWVvdXRFcnJvciwgdGltZW91dF9yZXRyeS5SdW4sIF9zbGVlcCwgLjAxLCAxLAotICAgICAgICBlcnJvcl9sb2dfZnVuYz1sb2dnaW5nLmRlYnVnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJpZXNbMF0sIDIpCi0KLSAgZGVmIHRlc3RSZXRyaWVzKHNlbGYpOgotICAgIHRyaWVzID0gWzBdCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgIFRlc3RFeGNlcHRpb24sIHRpbWVvdXRfcmV0cnkuUnVuLCBsYW1iZGE6IF9Db3VudFRyaWVzKHRyaWVzKSwKLSAgICAgICAgX0RFRkFVTFRfVElNRU9VVCwgMywgZXJyb3JfbG9nX2Z1bmM9bG9nZ2luZy5kZWJ1ZykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHRyaWVzWzBdLCA0KQotCi0gIGRlZiB0ZXN0Tm9SZXRyaWVzKHNlbGYpOgotICAgIHRyaWVzID0gWzBdCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgIFRlc3RFeGNlcHRpb24sIHRpbWVvdXRfcmV0cnkuUnVuLCBsYW1iZGE6IF9Db3VudFRyaWVzKHRyaWVzKSwKLSAgICAgICAgX0RFRkFVTFRfVElNRU9VVCwgMCwgZXJyb3JfbG9nX2Z1bmM9bG9nZ2luZy5kZWJ1ZykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHRyaWVzWzBdLCAxKQotCi0gIGRlZiB0ZXN0UmV0dXJuVmFsdWUoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVvdXRfcmV0cnkuUnVuKGxhbWJkYTogVHJ1ZSwgX0RFRkFVTFRfVElNRU9VVCwgMykpCi0KLSAgZGVmIHRlc3RDdXJyZW50VGltZW91dFRocmVhZEdyb3VwKHNlbGYpOgotICAgIGRlZiBJbm5lckZ1bmMoKToKLSAgICAgIGN1cnJlbnRfdGhyZWFkX2dyb3VwID0gdGltZW91dF9yZXRyeS5DdXJyZW50VGltZW91dFRocmVhZEdyb3VwKCkKLSAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGN1cnJlbnRfdGhyZWFkX2dyb3VwKQotCi0gICAgICBkZWYgSW5uZXJJbm5lckZ1bmMoKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXJyZW50X3RocmVhZF9ncm91cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X3JldHJ5LkN1cnJlbnRUaW1lb3V0VGhyZWFkR3JvdXAoKSkKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgIHJldHVybiByZXJhaXNlcl90aHJlYWQuUnVuQXN5bmMoKElubmVySW5uZXJGdW5jLCkpWzBdCi0KLSAgICBzZWxmLmFzc2VydFRydWUodGltZW91dF9yZXRyeS5SdW4oSW5uZXJGdW5jLCBfREVGQVVMVF9USU1FT1VULCAzKSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3VwZGF0ZV9tYXBwaW5nLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvdXBkYXRlX21hcHBpbmcucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDY2NjZiOWIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZGV2aWwvdXRpbHMvdXBkYXRlX21hcHBpbmcucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgYXJncGFyc2UKLWltcG9ydCBzeXMKLQotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgYmF0dG9yX2RldmljZV9tYXBwaW5nCi0KLWRlZiBwYXJzZV9vcHRpb25zKCk6Ci0gICIiIlBhcnNlcyBhbmQgY2hlY2tzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KLQotICBSZXR1cm5zOgotICAgIEEgdHVwbGUgY29udGFpbmluZyB0aGUgb3B0aW9ucyBzdHJ1Y3R1cmUuCi0gICIiIgotICB1c2FnZSA9ICdVc2FnZTogLi91cGRhdGVfbWFwcGluZy5weSBbb3B0aW9uc10nCi0gIGRlc2MgPSAoJ0V4YW1wbGU6IC4vdXBkYXRlX21hcHBpbmcucHkgLW8gbWFwcGluZy5qc29uLlxuJwotICAnVGhpcyBzY3JpcHQgZ2VuZXJhdGVzIGFuZCBzdG9yZXMgYSBmaWxlIHRoYXQgZ2l2ZXMgdGhlXG4nCi0gICdtYXBwaW5nIGJldHdlZW4gcGhvbmUgc2VyaWFsIG51bWJlcnMgYW5kIEJhdHRPciBzZXJpYWwgbnVtYmVyc1xuJwotICAnTWFwcGluZyBpcyBiYXNlZCBvbiB3aGljaCBwaHlzaWNhbCBwb3J0cyBvbiB0aGUgVVNCIGh1YnMgdGhlXG4nCi0gICdkZXZpY2VzIGFyZSBwbHVnZ2VkIGluIHRvLiBGb3IgaW5zdGFuY2UsIGlmIHRoZXJlIGFyZSB0d28gaHVicyxcbicKLSAgJ3RoZSBwaG9uZSBjb25uZWN0ZWQgdG8gcG9ydCBOIG9uIHRoZSBmaXJzdCBodWIgaXMgbWFwcGVkIHRvIHRoZVxuJwotICAnQmF0dE9yIGNvbm5lY3RlZCB0byBwb3J0IE4gb24gdGhlIHNlY29uZCBodWIsIGZvciBlYWNoIE4uJykKLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIodXNhZ2U9dXNhZ2UsIGRlc2NyaXB0aW9uPWRlc2MpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgJy0tb3V0cHV0JywgZGVzdD0nb3V0X2ZpbGUnLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J21hcHBpbmcuanNvbicsIHR5cGU9c3RyLAotICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmUnLCBoZWxwPSdtYXBwaW5nIGZpbGUgbmFtZScpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy11JywgJy0taHViJywgZGVzdD0naHViX3R5cGVzJywKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J2FwcGVuZCcsIGNob2ljZXM9WydwbHVnYWJsZV83cG9ydCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGx1Z2FibGVfN3BvcnRfdXNiM19wYXJ0MicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGx1Z2FibGVfN3BvcnRfdXNiM19wYXJ0MyddLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1VTQiBodWIgdHlwZXMuJykKLSAgb3B0aW9ucyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgaWYgbm90IG9wdGlvbnMuaHViX3R5cGVzOgotICAgIG9wdGlvbnMuaHViX3R5cGVzID0gWydwbHVnYWJsZV83cG9ydCcsICdwbHVnYWJsZV83cG9ydF91c2IzX3BhcnQyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAncGx1Z2FibGVfN3BvcnRfdXNiM19wYXJ0MyddCi0gIHJldHVybiBvcHRpb25zCi0KLWRlZiBtYWluKCk6Ci0gIG9wdGlvbnMgPSBwYXJzZV9vcHRpb25zKCkKLSAgYmF0dG9yX2RldmljZV9tYXBwaW5nLkdlbmVyYXRlU2VyaWFsTWFwRmlsZShvcHRpb25zLm91dF9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaHViX3R5cGVzKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy91c2JfaHVicy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3VzYl9odWJzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDk4NGM3Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3VzYl9odWJzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotUExVR0FCTEVfN1BPUlRfTEFZT1VUID0gezE6NywKLSAgICAgICAgICAgICAgICAgICAgICAgICAyOjYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgMzo1LAotICAgICAgICAgICAgICAgICAgICAgICAgIDQ6ezE6NCwgMjozLCAzOjIsIDQ6MX19Ci0KLVBMVUdBQkxFXzdQT1JUX1VTQjNfTEFZT1VUID0gezE6ezE6MSwgMjoyLCAzOjMsIDQ6NH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOjUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOjYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ojd9Ci0KLUtFRURPWF9MQVlPVVQgPSB7MToxLAotICAgICAgICAgICAgICAgICAyOjIsCi0gICAgICAgICAgICAgICAgIDM6MywKLSAgICAgICAgICAgICAgICAgNDp7MTo0LCAyOjUsIDM6NiwgNDo3fX0KLQotVklBX0xBWU9VVCA9IHsxOjEsCi0gICAgICAgICAgICAgIDI6MiwKLSAgICAgICAgICAgICAgMzozLAotICAgICAgICAgICAgICA0OnsxOjQsIDI6NSwgMzo2LCA0Ojd9fQotCi1jbGFzcyBIdWJUeXBlKG9iamVjdCk6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBpZF9mdW5jLCBwb3J0X21hcHBpbmcpOgotICAgICIiIkRlZmluZXMgYSB0eXBlIG9mIGh1Yi4KLQotICAgIEFyZ3M6Ci0gICAgICBpZF9mdW5jOiBbVVNCTm9kZSAtPiBib29sXSBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHJ1biBvbiBhIG5vZGUKLSAgICAgICAgdG8gZGV0ZXJtaW5lIGlmIHRoZSBub2RlIHJlcHJlc2VudHMgdGhpcyB0eXBlIG9mIGh1Yi4KLSAgICAgIHBvcnRfbWFwcGluZzogW2RpY3QoaW50OihpbnR8ZGljdCkpXSBtYXBzIHZpcnR1YWwgdG8gcGh5c2ljYWwgcG9ydAotICAgICAgICBudW1iZXJzLiBGb3IgaW5zdGFuY2UsIHszOjEsIDE6MiwgMjozfSBtZWFucyB0aGF0IHZpcnR1YWwgcG9ydCAzCi0gICAgICAgIGNvcnJlc3BvbmRzIHRvIHBoeXNpY2FsIHBvcnQgMSwgdmlydHVhbCBwb3J0IDEgY29ycmVzcG9uZHMgdG8gcGh5c2ljYWwKLSAgICAgICAgcG9ydCAyLCBhbmQgdmlydHVhbCBwb3J0IDIgY29ycmVzcG9uZHMgdG8gcGh5c2ljYWwgcG9ydCAzLiBJbiB0aGUKLSAgICAgICAgY2FzZSBvZiBodWJzIHdpdGggImludGVybmFsIiB0b3BvbG9neSwgdGhpcyBpcyByZXByZXNlbnRlZCBieSBuZXN0ZWQKLSAgICAgICAgbWFwcy4gRm9yIGluc3RhbmNlLCB7MTp7MToxLDI6Mn0sMjp7MTozLDI6NH19IG1lYW5zLCBlLmcuIHRoYXQgdGhlCi0gICAgICAgIGRldmljZSBwbHVnZ2VkIGludG8gcGh5c2ljYWwgcG9ydCAzIHdpbGwgc2hvdyB1cCBhcyBiZWluZyBjb25uZWN0ZWQKLSAgICAgICAgdG8gcG9ydCAxLCBvbiBhIGRldmljZSB3aGljaCBpcyBjb25uZWN0ZWQgdG8gcG9ydCAyIG9uIHRoZSBodWIuCi0gICAgIiIiCi0gICAgc2VsZi5faWRfZnVuYyA9IGlkX2Z1bmMKLSAgICAjIHYycCA9ICJ2aXJ0dWFsIHRvIHBoeXNpY2FsIiBwb3J0cwotICAgIHNlbGYuX3YycF9wb3J0ID0gcG9ydF9tYXBwaW5nCi0KLSAgZGVmIElzVHlwZShzZWxmLCBub2RlKToKLSAgICAiIiJEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBOb2RlIGlzIGEgaHViIG9mIHRoaXMgdHlwZS4KLQotICAgIEFyZ3M6Ci0gICAgICBub2RlOiBbVVNCTm9kZV0gTm9kZSB0byBjaGVjay4KLSAgICAiIiIKLSAgICByZXR1cm4gc2VsZi5faWRfZnVuYyhub2RlKQotCi0gIGRlZiBHZXRQaHlzaWNhbFBvcnRUb05vZGVUdXBsZXMoc2VsZiwgbm9kZSk6Ci0gICAgIiIiR2V0cyBkZXZpY2VzIGNvbm5lY3RlZCB0byB0aGUgcGh5c2ljYWwgcG9ydHMgb24gYSBodWIgb2YgdGhpcyB0eXBlLgotCi0gICAgQXJnczoKLSAgICAgIG5vZGU6IFtVU0JOb2RlXSBOb2RlIHJlcHJlc2VudGluZyBhIGh1YiBvZiB0aGlzIHR5cGUuCi0KLSAgICBZaWVsZHM6Ci0gICAgICBBIHNlcmllcyBvZiAoaW50LCBVU0JOb2RlKSB0dXBsZXMgZ2l2aW5nIGEgcGh5c2ljYWwgcG9ydAotICAgICAgYW5kIHRoZSBVU0JOb2RlIGNvbm5lY3RlZCB0byBpdC4KLQotICAgIFJhaXNlczoKLSAgICAgIFZhbHVlRXJyb3I6IElmIHRoZSBnaXZlbiBub2RlIGlzbid0IGEgaHViIG9mIHRoaXMgdHlwZS4KLSAgICAiIiIKLSAgICBpZiBzZWxmLklzVHlwZShub2RlKToKLSAgICAgIGZvciByZXMgaW4gc2VsZi5fR3BwSGVscGVyKG5vZGUsIHNlbGYuX3YycF9wb3J0KToKLSAgICAgICAgeWllbGQgcmVzCi0gICAgZWxzZToKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vZGUgbXVzdCBiZSBhIGh1YiBvZiB0aGlzIHR5cGUnKQotCi0gIGRlZiBfR3BwSGVscGVyKHNlbGYsIG5vZGUsIG1hcHBpbmcpOgotICAgICIiIkhlbHBlciBmdW5jdGlvbiBmb3IgR2V0UGh5c2ljYWxQb3J0VG9Ob2RlTWFwLgotCi0gICAgR2V0cyBkZXZpY2VzIGNvbm5lY3RlZCB0byBwaHlzaWNhbCBwb3J0cywgYmFzZWQgb24gZGV2aWNlIHRyZWUKLSAgICByb290ZWQgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIHRoZSBtYXBwaW5nIGJldHdlZW4gdmlydHVhbCBhbmQgcGh5c2ljYWwKLSAgICBwb3J0cy4KLQotICAgIEFyZ3M6Ci0gICAgICBub2RlOiBbVVNCTm9kZV0gUm9vdCBvZiB0cmVlIHRvIHNlYXJjaCBmb3IgZGV2aWNlcy4KLSAgICAgIG1hcHBpbmc6IFtkaWN0XSBNYXBwaW5nIGJldHdlZW4gdmlydHVhbCBhbmQgcGh5c2ljYWwgcG9ydHMuCi0KLSAgICBZaWVsZHM6Ci0gICAgICBBIHNlcmllcyBvZiAoaW50LCBVU0JOb2RlKSB0dXBsZXMgZ2l2aW5nIGEgcGh5c2ljYWwgcG9ydAotICAgICAgYW5kIHRoZSBOb2RlIGNvbm5lY3RlZCB0byBpdC4KLSAgICAiIiIKLSAgICBmb3IgKHZpcnR1YWwsIHBoeXNpY2FsKSBpbiBtYXBwaW5nLml0ZXJpdGVtcygpOgotICAgICAgaWYgbm9kZS5IYXNQb3J0KHZpcnR1YWwpOgotICAgICAgICBpZiBpc2luc3RhbmNlKHBoeXNpY2FsLCBkaWN0KToKLSAgICAgICAgICBmb3IgcmVzIGluIHNlbGYuX0dwcEhlbHBlcihub2RlLlBvcnRUb0RldmljZSh2aXJ0dWFsKSwgcGh5c2ljYWwpOgotICAgICAgICAgICAgeWllbGQgcmVzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgeWllbGQgKHBoeXNpY2FsLCBub2RlLlBvcnRUb0RldmljZSh2aXJ0dWFsKSkKLQotZGVmIF9pc19wbHVnYWJsZV83cG9ydF9odWIobm9kZSk6Ci0gICIiIkNoZWNrIGlmIGEgbm9kZSBpcyBhIFBsdWdhYmxlIDctUG9ydCBIdWIKLSAgKE1vZGVsIFVTQjItSFVCN0JDKQotICBUaGUgdG9wb2xvZ3kgb2YgdGhpcyBkZXZpY2UgaXMgYSA0LXBvcnQgaHViLAotICB3aXRoIGFub3RoZXIgNC1wb3J0IGh1YiBjb25uZWN0ZWQgb24gcG9ydCA0LgotICAiIiIKLSAgaWYgJzFhNDA6MDEwMScgbm90IGluIG5vZGUuZGVzYzoKLSAgICByZXR1cm4gRmFsc2UKLSAgaWYgbm90IG5vZGUuSGFzUG9ydCg0KToKLSAgICByZXR1cm4gRmFsc2UKLSAgcmV0dXJuICcxYTQwOjAxMDEnIGluIG5vZGUuUG9ydFRvRGV2aWNlKDQpLmRlc2MKLQotIyBQbHVnYWJsZSA3LVBvcnQgVVNCLTMgSHVicyBzaG93IHVwIHR3aWNlIGluIHRoZSBVU0IgZGV2aWNlcyBsaXN0OyB0aGV5IGhhdmUKLSMgdHdvIGRpZmZlcmVudCAiYnJhbmNoZXMiLCBvbmUgd2hpY2ggaGFzIFVTQjIgZGV2aWNlcyBhbmQgb25lIHdoaWNoIGhhcwotIyBVU0IzIGRldmljZXMuIFRoZSAicGFydDIiIGlzIHRoZSAiVVNCLTIiIGJyYW5jaCBvZiB0aGUgaHViLCB0aGUKLSMgInBhcnQzIiBpcyB0aGUgIlVTQi0zIiBicmFuY2ggb2YgdGhlIGh1Yi4KLQotZGVmIF9pc19wbHVnYWJsZV83cG9ydF91c2IzX3BhcnQyX2h1Yihub2RlKToKLSAgIiIiQ2hlY2sgaWYgYSBub2RlIGlzIHRoZSAiVVNCMiBicmFuY2giIG9mCi0gIGEgUGx1Z2FibGUgNy1Qb3J0IFVTQi0zIEh1YiAoTW9kZWwgVVNCMy1IVUI3QkMpCi0gIFRoZSB0b3BvbG9neSBvZiB0aGlzIGRldmljZSBpcyBhIDQtcG9ydCBodWIsCi0gIHdpdGggYW5vdGhlciA0LXBvcnQgaHViIGNvbm5lY3RlZCBvbiBwb3J0IDEuCi0gICIiIgotICBpZiAnMjEwOToyODExJyBub3QgaW4gbm9kZS5kZXNjOgotICAgIHJldHVybiBGYWxzZQotICBpZiBub3Qgbm9kZS5IYXNQb3J0KDEpOgotICAgIHJldHVybiBGYWxzZQotICByZXR1cm4gJzIxMDk6MjgxMScgaW4gbm9kZS5Qb3J0VG9EZXZpY2UoMSkuZGVzYwotCi1kZWYgX2lzX3BsdWdhYmxlXzdwb3J0X3VzYjNfcGFydDNfaHViKG5vZGUpOgotICAiIiJDaGVjayBpZiBhIG5vZGUgaXMgdGhlICJVU0IzIGJyYW5jaCIgb2YKLSAgYSBQbHVnYWJsZSA3LVBvcnQgVVNCLTMgSHViIChNb2RlbCBVU0IzLUhVQjdCQykKLSAgVGhlIHRvcG9sb2d5IG9mIHRoaXMgZGV2aWNlIGlzIGEgNC1wb3J0IGh1YiwKLSAgd2l0aCBhbm90aGVyIDQtcG9ydCBodWIgY29ubmVjdGVkIG9uIHBvcnQgMS4KLSAgIiIiCi0gIGlmICcyMTA5OjgxMTAnIG5vdCBpbiBub2RlLmRlc2M6Ci0gICAgcmV0dXJuIEZhbHNlCi0gIGlmIG5vdCBub2RlLkhhc1BvcnQoMSk6Ci0gICAgcmV0dXJuIEZhbHNlCi0gIHJldHVybiAnMjEwOTo4MTEwJyBpbiBub2RlLlBvcnRUb0RldmljZSgxKS5kZXNjCi0KLWRlZiBfaXNfa2VlZG94X2h1Yihub2RlKToKLSAgIiIiQ2hlY2sgaWYgYSBub2RlIGlzIGEgS2VlZG94IGh1Yi4KLSAgVGhlIHRvcG9sb2d5IG9mIHRoaXMgZGV2aWNlIGlzIGEgNC1wb3J0IGh1YiwKLSAgd2l0aCBhbm90aGVyIDQtcG9ydCBodWIgY29ubmVjdGVkIG9uIHBvcnQgNC4KLSAgIiIiCi0gIGlmICcwYmRhOjU0MTEnIG5vdCBpbiBub2RlLmRlc2M6Ci0gICAgcmV0dXJuIEZhbHNlCi0gIGlmIG5vdCBub2RlLkhhc1BvcnQoNCk6Ci0gICAgcmV0dXJuIEZhbHNlCi0gIHJldHVybiAnMGJkYTo1NDExJyBpbiBub2RlLlBvcnRUb0RldmljZSg0KS5kZXNjCi0KLWRlZiBfaXNfdmlhX2h1Yihub2RlKToKLSAgIiIiQ2hlY2sgaWYgYSBub2RlIGlzIGEgVmlhIExhYnMgaHViLgotICBUaGUgdG9wb2xvZ3kgb2YgdGhpcyBkZXZpY2UgaXMgYSA0LXBvcnQgaHViLAotICB3aXRoIGFub3RoZXIgNC1wb3J0IGh1YiBjb25uZWN0ZWQgb24gcG9ydCA0LgotICAiIiIKLSAgaWYgJzIxMDk6MjgxMicgbm90IGluIG5vZGUuZGVzYyBhbmQgJzIxMDk6MDgxMicgbm90IGluIG5vZGUuZGVzYzoKLSAgICByZXR1cm4gRmFsc2UKLSAgaWYgbm90IG5vZGUuSGFzUG9ydCg0KToKLSAgICByZXR1cm4gRmFsc2UKLSAgcmV0dXJuICgnMjEwOToyODEyJyBpbiBub2RlLlBvcnRUb0RldmljZSg0KS5kZXNjIG9yCi0gICAgICAgICAgJzIxMDk6MDgxMicgaW4gbm9kZS5Qb3J0VG9EZXZpY2UoNCkuZGVzYykKLQotCi1QTFVHQUJMRV83UE9SVCA9IEh1YlR5cGUoX2lzX3BsdWdhYmxlXzdwb3J0X2h1YiwgUExVR0FCTEVfN1BPUlRfTEFZT1VUKQotUExVR0FCTEVfN1BPUlRfVVNCM19QQVJUMiA9IEh1YlR5cGUoX2lzX3BsdWdhYmxlXzdwb3J0X3VzYjNfcGFydDJfaHViLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUExVR0FCTEVfN1BPUlRfVVNCM19MQVlPVVQpCi1QTFVHQUJMRV83UE9SVF9VU0IzX1BBUlQzID0gSHViVHlwZShfaXNfcGx1Z2FibGVfN3BvcnRfdXNiM19wYXJ0M19odWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTFVHQUJMRV83UE9SVF9VU0IzX0xBWU9VVCkKLUtFRURPWCA9IEh1YlR5cGUoX2lzX2tlZWRveF9odWIsIEtFRURPWF9MQVlPVVQpCi1WSUEgPSBIdWJUeXBlKF9pc192aWFfaHViLCBWSUFfTEFZT1VUKQotCi1BTExfSFVCUyA9IFtQTFVHQUJMRV83UE9SVCwKLSAgICAgICAgICAgIFBMVUdBQkxFXzdQT1JUX1VTQjNfUEFSVDIsCi0gICAgICAgICAgICBQTFVHQUJMRV83UE9SVF9VU0IzX1BBUlQzLAotICAgICAgICAgICAgS0VFRE9YLAotICAgICAgICAgICAgVklBXQotCi1kZWYgR2V0SHViVHlwZSh0eXBlX25hbWUpOgotICBpZiB0eXBlX25hbWUgPT0gJ3BsdWdhYmxlXzdwb3J0JzoKLSAgICByZXR1cm4gUExVR0FCTEVfN1BPUlQKLSAgZWxpZiB0eXBlX25hbWUgPT0gJ3BsdWdhYmxlXzdwb3J0X3VzYjNfcGFydDInOgotICAgIHJldHVybiBQTFVHQUJMRV83UE9SVF9VU0IzX1BBUlQyCi0gIGVsaWYgdHlwZV9uYW1lID09ICdwbHVnYWJsZV83cG9ydF91c2IzX3BhcnQzJzoKLSAgICByZXR1cm4gUExVR0FCTEVfN1BPUlRfVVNCM19QQVJUMwotICBlbGlmIHR5cGVfbmFtZSA9PSAna2VlZG94JzoKLSAgICByZXR1cm4gS0VFRE9YCi0gIGVsaWYgdHlwZV9uYW1lID09ICd2aWEnOgotICAgIHJldHVybiBWSUEKLSAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBodWIgdHlwZScpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy93YXRjaGRvZ190aW1lci5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3dhdGNoZG9nX3RpbWVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmYxZjhjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3dhdGNoZG9nX3RpbWVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJXYXRjaGRvZ1RpbWVyIHRpbWVvdXQgb2JqZWN0cy4iIiIKLQotaW1wb3J0IHRpbWUKLQotCi1jbGFzcyBXYXRjaGRvZ1RpbWVyKG9iamVjdCk6Ci0gICIiIkEgcmVzZXRhYmxlIHRpbWVvdXQtYmFzZWQgd2F0Y2hkb2cuCi0KLSAgVGhpcyBvYmplY3QgaXMgdGhyZWFkc2FmZS4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVvdXQpOgotICAgICIiIkluaXRpYWxpemVzIHRoZSB3YXRjaGRvZy4KLQotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiBUaGUgdGltZW91dCBpbiBzZWNvbmRzLiBJZiB0aW1lb3V0IGlzIE5vbmUgaXQgd2lsbCBuZXZlciB0aW1lb3V0LgotICAgICIiIgotICAgIHNlbGYuX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgIHNlbGYuX3RpbWVvdXQgPSB0aW1lb3V0Ci0KLSAgZGVmIFJlc2V0KHNlbGYpOgotICAgICIiIlJlc2V0cyB0aGUgdGltZW91dCBjb3VudGRvd24uIiIiCi0gICAgc2VsZi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0KLSAgZGVmIEdldEVsYXBzZWQoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSB3YXRjaGRvZy4iIiIKLSAgICByZXR1cm4gdGltZS50aW1lKCkgLSBzZWxmLl9zdGFydF90aW1lCi0KLSAgZGVmIEdldFJlbWFpbmluZyhzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSByZW1haW5pbmcgdGltZSBvZiB0aGUgd2F0Y2hkb2cuIiIiCi0gICAgaWYgc2VsZi5fdGltZW91dDoKLSAgICAgIHJldHVybiBzZWxmLl90aW1lb3V0IC0gc2VsZi5HZXRFbGFwc2VkKCkKLSAgICBlbHNlOgotICAgICAgcmV0dXJuIE5vbmUKLQotICBkZWYgR2V0VGltZW91dChzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSB0aW1vdXQgb2YgdGhlIHdhdGNoZG9nLiIiIgotICAgIHJldHVybiBzZWxmLl90aW1lb3V0Ci0KLSAgZGVmIElzVGltZWRPdXQoc2VsZik6Ci0gICAgIiIiV2hldGhlciB0aGUgd2F0Y2hkb2cgaGFzIHRpbWVkIG91dC4KLQotICAgIFJldHVybnM6Ci0gICAgICBUcnVlIGlmIHRoZSB3YXRjaGRvZyBoYXMgdGltZWQgb3V0LCBGYWxzZSBvdGhlcndpc2UuCi0gICAgIiIiCi0gICAgcmVtYWluaW5nID0gc2VsZi5HZXRSZW1haW5pbmcoKQotICAgIHJldHVybiByZW1haW5pbmcgaXMgbm90IE5vbmUgYW5kIHJlbWFpbmluZyA8IDAKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3ppcF91dGlscy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3ppcF91dGlscy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFmODEyYi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy96aXBfdXRpbHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgYXJncGFyc2UKLWltcG9ydCBqc29uCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgemlwZmlsZQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBfREVWSUxfUk9PVF9ESVIgPSBvcy5wYXRoLmFic3BhdGgoCi0gICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJy4uJykpCi0gIF9QWV9VVElMU19ST09UX0RJUiA9IG9zLnBhdGguYWJzcGF0aCgKLSAgICAgIG9zLnBhdGguam9pbihfREVWSUxfUk9PVF9ESVIsICcuLicsICdjb21tb24nLCAncHlfdXRpbHMnKSkKLSAgc3lzLnBhdGguZXh0ZW5kKChfREVWSUxfUk9PVF9ESVIsIF9QWV9VVElMU19ST09UX0RJUikpCi0KLWZyb20gZGV2aWwgaW1wb3J0IGJhc2VfZXJyb3IKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGNtZF9oZWxwZXIKLWZyb20gcHlfdXRpbHMgaW1wb3J0IHRlbXBmaWxlX2V4dAotCi0KLWxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0KLWNsYXNzIFppcEZhaWxlZEVycm9yKGJhc2VfZXJyb3IuQmFzZUVycm9yKToKLSAgIiIiUmFpc2VkIG9uIGEgZmFpbHVyZSB0byBwZXJmb3JtIGEgemlwIG9wZXJhdGlvbi4iIiIKLSAgcGFzcwotCi0KLWRlZiBfV3JpdGVUb1ppcEZpbGUoemlwX2ZpbGUsIHBhdGgsIGFyY19wYXRoKToKLSAgIiIiUmVjdXJzaXZlbHkgd3JpdGUgfHBhdGh8IHRvIHx6aXBfZmlsZXwgYXMgfGFyY19wYXRofC4KLQotICB6aXBfZmlsZTogQW4gb3BlbiBpbnN0YW5jZSBvZiB6aXBmaWxlLlppcEZpbGUuCi0gIHBhdGg6IEFuIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGUgb3IgZGlyZWN0b3J5IHRvIGJlIHppcHBlZC4KLSAgYXJjX3BhdGg6IEEgcmVsYXRpdmUgcGF0aCB3aXRoaW4gdGhlIHppcCBmaWxlIHRvIHdoaWNoIHRoZSBmaWxlIG9yIGRpcmVjdG9yeQotICAgIGxvY2F0ZWQgYXQgfHBhdGh8IHNob3VsZCBiZSB3cml0dGVuLgotICAiIiIKLSAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKLSAgICBmb3IgZGlyX3BhdGgsIF8sIGZpbGVfbmFtZXMgaW4gb3Mud2FsayhwYXRoKToKLSAgICAgIGRpcl9hcmNfcGF0aCA9IG9zLnBhdGguam9pbihhcmNfcGF0aCwgb3MucGF0aC5yZWxwYXRoKGRpcl9wYXRoLCBwYXRoKSkKLSAgICAgIGxvZ2dlci5kZWJ1ZygnZGlyOiAgJXMgLT4gJXMnLCBkaXJfcGF0aCwgZGlyX2FyY19wYXRoKQotICAgICAgemlwX2ZpbGUud3JpdGUoZGlyX3BhdGgsIGRpcl9hcmNfcGF0aCwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgZm9yIGYgaW4gZmlsZV9uYW1lczoKLSAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGRpcl9wYXRoLCBmKQotICAgICAgICBmaWxlX2FyY19wYXRoID0gb3MucGF0aC5qb2luKGRpcl9hcmNfcGF0aCwgZikKLSAgICAgICAgbG9nZ2VyLmRlYnVnKCdmaWxlOiAlcyAtPiAlcycsIGZpbGVfcGF0aCwgZmlsZV9hcmNfcGF0aCkKLSAgICAgICAgemlwX2ZpbGUud3JpdGUoZmlsZV9wYXRoLCBmaWxlX2FyY19wYXRoLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKLSAgZWxzZToKLSAgICBsb2dnZXIuZGVidWcoJ2ZpbGU6ICVzIC0+ICVzJywgcGF0aCwgYXJjX3BhdGgpCi0gICAgemlwX2ZpbGUud3JpdGUocGF0aCwgYXJjX3BhdGgsIHppcGZpbGUuWklQX0RFRkxBVEVEKQotCi0KLWRlZiBfV3JpdGVaaXBGaWxlKHppcF9wYXRoLCB6aXBfY29udGVudHMpOgotICB3aXRoIHppcGZpbGUuWmlwRmlsZSh6aXBfcGF0aCwgJ3cnKSBhcyB6aXBfZmlsZToKLSAgICBmb3IgcGF0aCwgYXJjX3BhdGggaW4gemlwX2NvbnRlbnRzOgotICAgICAgX1dyaXRlVG9aaXBGaWxlKHppcF9maWxlLCBwYXRoLCBhcmNfcGF0aCkKLQotCi1kZWYgV3JpdGVaaXBGaWxlKHppcF9wYXRoLCB6aXBfY29udGVudHMpOgotICAiIiJXcml0ZXMgdGhlIHByb3ZpZGVkIGNvbnRlbnRzIHRvIHRoZSBnaXZlbiB6aXAgZmlsZS4KLQotICBOb3RlIHRoYXQgdGhpcyB1c2VzIHB5dGhvbidzIHppcGZpbGUgbW9kdWxlIGFuZCBpcyBkb25lIGluIGEgc2VwYXJhdGUKLSAgcHJvY2VzcyB0byBhdm9pZCBob2dnaW5nIHRoZSBHSUwuCi0KLSAgQXJnczoKLSAgICB6aXBfcGF0aDogU3RyaW5nIHBhdGggdG8gdGhlIHppcCBmaWxlIHRvIHdyaXRlLgotICAgIHppcF9jb250ZW50czogQSBsaXN0IG9mIChob3N0IHBhdGgsIGFyY2hpdmUgcGF0aCkgdHVwbGVzLgotCi0gIFJhaXNlczoKLSAgICBaaXBGYWlsZWRFcnJvciBvbiBmYWlsdXJlLgotICAiIiIKLSAgemlwX3NwZWMgPSB7Ci0gICAgJ3ppcF9wYXRoJzogemlwX3BhdGgsCi0gICAgJ3ppcF9jb250ZW50cyc6IHppcF9jb250ZW50cywKLSAgfQotICB3aXRoIHRlbXBmaWxlX2V4dC5OYW1lZFRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIHRtcGRpcjoKLSAgICBqc29uX3BhdGggPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnemlwX3NwZWMuanNvbicpCi0gICAgd2l0aCBvcGVuKGpzb25fcGF0aCwgJ3cnKSBhcyBqc29uX2ZpbGU6Ci0gICAgICBqc29uLmR1bXAoemlwX3NwZWMsIGpzb25fZmlsZSkKLSAgICByZXQsIG91dHB1dCwgZXJyb3IgPSBjbWRfaGVscGVyLkdldENtZFN0YXR1c091dHB1dEFuZEVycm9yKFsKLSAgICAgICAgc3lzLmV4ZWN1dGFibGUsIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXyksCi0gICAgICAgICctLXppcC1zcGVjJywganNvbl9wYXRoXSkKLQotICBpZiByZXQgIT0gMDoKLSAgICBleGNfbXNnID0gWydGYWlsZWQgdG8gY3JlYXRlICVzJyAlIHppcF9wYXRoXQotICAgIGV4Y19tc2cuZXh0ZW5kKCdzdGRvdXQ6ICAlcycgJSBsIGZvciBsIGluIG91dHB1dC5zcGxpdGxpbmVzKCkpCi0gICAgZXhjX21zZy5leHRlbmQoJ3N0ZGVycjogICVzJyAlIGwgZm9yIGwgaW4gZXJyb3Iuc3BsaXRsaW5lcygpKQotICAgIHJhaXNlIFppcEZhaWxlZEVycm9yKCdcbicuam9pbihleGNfbXNnKSkKLQotCi1kZWYgbWFpbihyYXdfYXJncyk6Ci0gIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS16aXAtc3BlYycsIHJlcXVpcmVkPVRydWUpCi0KLSAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHJhd19hcmdzKQotCi0gIHdpdGggb3BlbihhcmdzLnppcF9zcGVjKSBhcyB6aXBfc3BlY19maWxlOgotICAgIHppcF9zcGVjID0ganNvbi5sb2FkKHppcF9zcGVjX2ZpbGUpCi0KLSAgcmV0dXJuIF9Xcml0ZVppcEZpbGUoKip6aXBfc3BlYykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kZXZpbC91dGlscy96aXBfdXRpbHNfdGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3ppcF91dGlsc190ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTY0ZTNmLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RldmlsL3V0aWxzL3ppcF91dGlsc190ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IHppcGZpbGUKLQotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgemlwX3V0aWxzCi1mcm9tIHB5X3V0aWxzIGltcG9ydCB0ZW1wZmlsZV9leHQKLQotCi1jbGFzcyBXcml0ZVppcEZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdFNpbXBsZShzZWxmKToKLSAgICB3aXRoIHRlbXBmaWxlX2V4dC5OYW1lZFRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIHdvcmtpbmdfZGlyOgotICAgICAgZmlsZTEgPSBvcy5wYXRoLmpvaW4od29ya2luZ19kaXIsICdmaWxlMS50eHQnKQotICAgICAgZmlsZTIgPSBvcy5wYXRoLmpvaW4od29ya2luZ19kaXIsICdmaWxlMi50eHQnKQotCi0gICAgICB3aXRoIG9wZW4oZmlsZTEsICd3JykgYXMgZjE6Ci0gICAgICAgIGYxLndyaXRlKCdmaWxlMScpCi0gICAgICB3aXRoIG9wZW4oZmlsZTIsICd3JykgYXMgZjI6Ci0gICAgICAgIGYyLndyaXRlKCdmaWxlMicpCi0KLSAgICAgIHppcF90dXBsZXMgPSBbCi0gICAgICAgIChmaWxlMSwgJ2Zvby9maWxlMS50eHQnKSwKLSAgICAgICAgKGZpbGUyLCAnYmFyL2ZpbGUyLnR4dCcpLAotICAgICAgXQotCi0gICAgICB6aXBfcGF0aCA9IG9zLnBhdGguam9pbih3b3JraW5nX2RpciwgJ291dC56aXAnKQotICAgICAgemlwX3V0aWxzLldyaXRlWmlwRmlsZSh6aXBfcGF0aCwgemlwX3R1cGxlcykKLQotICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGZpbGUuaXNfemlwZmlsZSh6aXBfcGF0aCkpCi0KLSAgICAgIGFjdHVhbCA9IHppcGZpbGUuWmlwRmlsZSh6aXBfcGF0aCkKLSAgICAgIGV4cGVjdGVkX2ZpbGVzID0gWwotICAgICAgICAnZm9vL2ZpbGUxLnR4dCcsCi0gICAgICAgICdiYXIvZmlsZTIudHh0JywKLSAgICAgIF0KLQotICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCi0gICAgICAgICAgc29ydGVkKGV4cGVjdGVkX2ZpbGVzKSwKLSAgICAgICAgICBzb3J0ZWQoYWN0dWFsLm5hbWVsaXN0KCkpKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZG9jcy9hZGJfd3JhcHBlci5tZCBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RvY3MvYWRiX3dyYXBwZXIubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZGMzYjAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZG9jcy9hZGJfd3JhcHBlci5tZAorKysgL2Rldi9udWxsCkBAIC0xLDM4OCArMCwwIEBACi0jIFtkZXZpbC5hbmRyb2lkLnNkay5hZGJfd3JhcHBlcl0oaHR0cHM6Ly9naXRodWIuY29tL2NhdGFwdWx0LXByb2plY3QvY2F0YXB1bHQvYmxvYi9tYXN0ZXIvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvYWRiX3dyYXBwZXIucHkpCi0KLSpUaGlzIHBhZ2Ugd2FzIGF1dG9nZW5lcmF0ZWQgYnkgYGRldmlsL3V0aWxzL21hcmtkb3duLnB5IC0tbW9kdWxlLWxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2NhdGFwdWx0LXByb2plY3QvY2F0YXB1bHQvYmxvYi9tYXN0ZXIvZGV2aWwvZGV2aWwvYW5kcm9pZC9zZGsvYWRiX3dyYXBwZXIucHlgKgotCi0jIyBEZXZpY2VTdGF0Ci0KLURldmljZVN0YXQoc3RcX21vZGUsIHN0XF9zaXplLCBzdFxfdGltZSkKLSMjIyBEZXZpY2VTdGF0LlxfXF9yZXByXF9cXwotCi1SZXR1cm4gYSBuaWNlbHkgZm9ybWF0dGVkIHJlcHJlc2VudGF0aW9uIHN0cmluZwotIyMjIERldmljZVN0YXQuXF9cX2dldG5ld2FyZ3NcX1xfCi0KLVJldHVybiBzZWxmIGFzIGEgcGxhaW4gdHVwbGUuICBVc2VkIGJ5IGNvcHkgYW5kIHBpY2tsZS4KLSMjIyBEZXZpY2VTdGF0LlxfXF9nZXRzdGF0ZVxfXF8KLQotRXhjbHVkZSB0aGUgT3JkZXJlZERpY3QgZnJvbSBwaWNrbGluZwotIyMgQWRiV3JhcHBlcgotCi1BIHdyYXBwZXIgYXJvdW5kIGEgbG9jYWwgQW5kcm9pZCBEZWJ1ZyBCcmlkZ2UgZXhlY3V0YWJsZS4KLSMjIyBBZGJXcmFwcGVyLkdldERldmljZVNlcmlhbAotCi1HZXRzIHRoZSBkZXZpY2Ugc2VyaWFsIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuCi1gYGAKLSAgICBSZXR1cm5zOgotICAgICAgRGV2aWNlIHNlcmlhbCBudW1iZXIgYXMgYSBzdHJpbmcuCi1gYGAKLQotCi0jIyMgQWRiV3JhcHBlci5QdXNoCi0KLVB1c2hlcyBhIGZpbGUgZnJvbSB0aGUgaG9zdCB0byB0aGUgZGV2aWNlLgotYGBgCi0gICAgQXJnczoKLSAgICAgIGxvY2FsOiBQYXRoIG9uIHRoZSBob3N0IGZpbGVzeXN0ZW0uCi0gICAgICByZW1vdGU6IFBhdGggb24gdGhlIGRldmljZSBmaWxlc3lzdGVtLgotICAgICAgdGltZW91dDogKG9wdGlvbmFsKSBUaW1lb3V0IHBlciB0cnkgaW4gc2Vjb25kcy4KLSAgICAgIHJldHJpZXM6IChvcHRpb25hbCkgTnVtYmVyIG9mIHJldHJpZXMgdG8gYXR0ZW1wdC4KLWBgYAotCi0KLSMjIyBBZGJXcmFwcGVyLlB1bGwKLQotUHVsbHMgYSBmaWxlIGZyb20gdGhlIGRldmljZSB0byB0aGUgaG9zdC4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICByZW1vdGU6IFBhdGggb24gdGhlIGRldmljZSBmaWxlc3lzdGVtLgotICAgICAgbG9jYWw6IFBhdGggb24gdGhlIGhvc3QgZmlsZXN5c3RlbS4KLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi1gYGAKLQotCi0jIyMgQWRiV3JhcHBlci5TaGVsbAotCi1SdW5zIGEgc2hlbGwgY29tbWFuZCBvbiB0aGUgZGV2aWNlLgotYGBgCi0gICAgQXJnczoKLSAgICAgIGNvbW1hbmQ6IEEgc3RyaW5nIHdpdGggdGhlIHNoZWxsIGNvbW1hbmQgdG8gcnVuLgotICAgICAgZXhwZWN0X3N0YXR1czogKG9wdGlvbmFsKSBDaGVjayB0aGF0IHRoZSBjb21tYW5kJ3MgZXhpdCBzdGF0dXMgbWF0Y2hlcwotICAgICAgICB0aGlzIHZhbHVlLiBEZWZhdWx0IGlzIDAuIElmIHNldCB0byBOb25lIHRoZSB0ZXN0IGlzIHNraXBwZWQuCi0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBvdXRwdXQgb2YgdGhlIHNoZWxsIGNvbW1hbmQgYXMgYSBzdHJpbmcuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBkZXZpY2VfZXJyb3JzLkFkYkNvbW1hbmRGYWlsZWRFcnJvcjogSWYgdGhlIGV4aXQgc3RhdHVzIGRvZXNuJ3QgbWF0Y2gKLSAgICAgICAgfGV4cGVjdF9zdGF0dXN8LgotYGBgCi0KLQotIyMjIEFkYldyYXBwZXIuSXRlclNoZWxsCi0KLVJ1bnMgYSBzaGVsbCBjb21tYW5kIGFuZCByZXR1cm5zIGFuIGl0ZXJhdG9yIG92ZXIgaXRzIG91dHB1dCBsaW5lcy4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICBjb21tYW5kOiBBIHN0cmluZyB3aXRoIHRoZSBzaGVsbCBjb21tYW5kIHRvIHJ1bi4KLSAgICAgIHRpbWVvdXQ6IFRpbWVvdXQgaW4gc2Vjb25kcy4KLQotICAgIFlpZWxkczoKLSAgICAgIFRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgbGluZSBieSBsaW5lLgotYGBgCi0KLQotIyMjIEFkYldyYXBwZXIuTHMKLQotTGlzdCB0aGUgY29udGVudHMgb2YgYSBkaXJlY3Rvcnkgb24gdGhlIGRldmljZS4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICBwYXRoOiBQYXRoIG9uIHRoZSBkZXZpY2UgZmlsZXN5c3RlbS4KLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBsaXN0IG9mIHBhaXJzIChmaWxlbmFtZSwgc3RhdCkgZm9yIGVhY2ggZmlsZSBmb3VuZCBpbiB0aGUgZGlyZWN0b3J5LAotICAgICAgd2hlcmUgdGhlIHN0YXQgb2JqZWN0IGhhcyB0aGUgcHJvcGVydGllczogc3RfbW9kZSwgc3Rfc2l6ZSwgYW5kIHN0X3RpbWUuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBBZGJDb21tYW5kRmFpbGVkRXJyb3IgaWYgfHBhdGh8IGRvZXMgbm90IHNwZWNpZnkgYSB2YWxpZCBhbmQgYWNjZXNzaWJsZQotICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgZGV2aWNlLCBvciB0aGUgb3V0cHV0IG9mICJhZGIgbHMiIGNvbW1hbmQgaXMgbGVzcwotICAgICAgICAgIHRoYW4gZm91ciBjb2x1bW5zCi1gYGAKLQotCi0jIyMgQWRiV3JhcHBlci5Mb2djYXQKLQotR2V0IGFuIGl0ZXJhYmxlIG92ZXIgdGhlIGxvZ2NhdCBvdXRwdXQuCi1gYGAKLSAgICBBcmdzOgotICAgICAgY2xlYXI6IElmIHRydWUsIGNsZWFyIHRoZSBsb2djYXQuCi0gICAgICBkdW1wOiBJZiB0cnVlLCBkdW1wIHRoZSBjdXJyZW50IGxvZ2NhdCBjb250ZW50cy4KLSAgICAgIGZpbHRlcl9zcGVjczogSWYgc2V0LCBhIGxpc3Qgb2Ygc3BlY3MgdG8gZmlsdGVyIHRoZSBsb2djYXQuCi0gICAgICBsb2djYXRfZm9ybWF0OiBJZiBzZXQsIHRoZSBmb3JtYXQgaW4gd2hpY2ggdGhlIGxvZ2NhdCBzaG91bGQgYmUgb3V0cHV0LgotICAgICAgICBPcHRpb25zIGluY2x1ZGUgImJyaWVmIiwgInByb2Nlc3MiLCAidGFnIiwgInRocmVhZCIsICJyYXciLCAidGltZSIsCi0gICAgICAgICJ0aHJlYWR0aW1lIiwgYW5kICJsb25nIgotICAgICAgcmluZ19idWZmZXI6IElmIHNldCwgYSBsaXN0IG9mIGFsdGVybmF0ZSByaW5nIGJ1ZmZlcnMgdG8gcmVxdWVzdC4KLSAgICAgICAgT3B0aW9ucyBpbmNsdWRlICJtYWluIiwgInN5c3RlbSIsICJyYWRpbyIsICJldmVudHMiLCAiY3Jhc2giIG9yICJhbGwiLgotICAgICAgICBUaGUgZGVmYXVsdCBpcyBlcXVpdmFsZW50IHRvIFsibWFpbiIsICJzeXN0ZW0iLCAiY3Jhc2giXS4KLSAgICAgIGl0ZXJfdGltZW91dDogSWYgc2V0IGFuZCBuZWl0aGVyIGNsZWFyIG5vciBkdW1wIGlzIHNldCwgdGhlIG51bWJlciBvZgotICAgICAgICBzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiBpdGVyYXRpb25zLiBJZiBubyBsaW5lIGlzIGZvdW5kIGJlZm9yZSB0aGUKLSAgICAgICAgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMgZWxhcHNlcywgdGhlIGl0ZXJhYmxlIHdpbGwgeWllbGQgTm9uZS4KLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgSWYgc2V0LCB0aW1lb3V0IHBlciB0cnkgaW4gc2Vjb25kcy4gSWYgY2xlYXIgb3IgZHVtcAotICAgICAgICBpcyBzZXQsIGRlZmF1bHRzIHRvIERFRkFVTFRfVElNRU9VVC4KLSAgICAgIHJldHJpZXM6IChvcHRpb25hbCkgSWYgY2xlYXIgb3IgZHVtcCBpcyBzZXQsIHRoZSBudW1iZXIgb2YgcmV0cmllcyB0bwotICAgICAgICBhdHRlbXB0LiBPdGhlcndpc2UsIGRvZXMgbm90aGluZy4KLQotICAgIFlpZWxkczoKLSAgICAgIGxvZ2NhdCBvdXRwdXQgbGluZSBieSBsaW5lLgotYGBgCi0KLQotIyMjIEFkYldyYXBwZXIuRm9yd2FyZAotCi1Gb3J3YXJkIHNvY2tldCBjb25uZWN0aW9ucyBmcm9tIHRoZSBsb2NhbCBzb2NrZXQgdG8gdGhlIHJlbW90ZSBzb2NrZXQuCi1gYGAKLSAgICBTb2NrZXRzIGFyZSBzcGVjaWZpZWQgYnkgb25lIG9mOgotICAgICAgdGNwOjxwb3J0PgotICAgICAgbG9jYWxhYnN0cmFjdDo8dW5peCBkb21haW4gc29ja2V0IG5hbWU+Ci0gICAgICBsb2NhbHJlc2VydmVkOjx1bml4IGRvbWFpbiBzb2NrZXQgbmFtZT4KLSAgICAgIGxvY2FsZmlsZXN5c3RlbTo8dW5peCBkb21haW4gc29ja2V0IG5hbWU+Ci0gICAgICBkZXY6PGNoYXJhY3RlciBkZXZpY2UgbmFtZT4KLSAgICAgIGpkd3A6PHByb2Nlc3MgcGlkPiAocmVtb3RlIG9ubHkpCi0KLSAgICBBcmdzOgotICAgICAgbG9jYWw6IFRoZSBob3N0IHNvY2tldC4KLSAgICAgIHJlbW90ZTogVGhlIGRldmljZSBzb2NrZXQuCi0gICAgICBhbGxvd19yZWJpbmQ6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYWRiIG1heSByZWJpbmQgYSBsb2NhbCBzb2NrZXQ7Ci0gICAgICAgIG90aGVyd2lzZSwgdGhlIGRlZmF1bHQsIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgaWYgdGhlIGxvY2FsIHNvY2tldCBpcwotICAgICAgICBhbHJlYWR5IGJlaW5nIGZvcndhcmRlZC4KLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi1gYGAKLQotCi0jIyMgQWRiV3JhcHBlci5Gb3J3YXJkUmVtb3ZlCi0KLVJlbW92ZSBhIGZvcndhcmQgc29ja2V0IGNvbm5lY3Rpb24uCi1gYGAKLSAgICBBcmdzOgotICAgICAgbG9jYWw6IFRoZSBob3N0IHNvY2tldC4KLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi1gYGAKLQotCi0jIyMgQWRiV3JhcHBlci5Gb3J3YXJkTGlzdAotCi1MaXN0IGFsbCBjdXJyZW50bHkgZm9yd2FyZGVkIHNvY2tldCBjb25uZWN0aW9ucy4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotICAgIFJldHVybnM6Ci0gICAgICBUaGUgb3V0cHV0IG9mIGFkYiBmb3J3YXJkIC0tbGlzdCBhcyBhIHN0cmluZy4KLWBgYAotCi0KLSMjIyBBZGJXcmFwcGVyLkpEV1AKLQotTGlzdCBvZiBQSURzIG9mIHByb2Nlc3NlcyBob3N0aW5nIGEgSkRXUCB0cmFuc3BvcnQuCi1gYGAKLSAgICBBcmdzOgotICAgICAgdGltZW91dDogKG9wdGlvbmFsKSBUaW1lb3V0IHBlciB0cnkgaW4gc2Vjb25kcy4KLSAgICAgIHJldHJpZXM6IChvcHRpb25hbCkgTnVtYmVyIG9mIHJldHJpZXMgdG8gYXR0ZW1wdC4KLQotICAgIFJldHVybnM6Ci0gICAgICBBIGxpc3Qgb2YgUElEcyBhcyBzdHJpbmdzLgotYGBgCi0KLQotIyMjIEFkYldyYXBwZXIuSW5zdGFsbAotCi1JbnN0YWxsIGFuIGFwayBvbiB0aGUgZGV2aWNlLgotYGBgCi0gICAgQXJnczoKLSAgICAgIGFwa19wYXRoOiBIb3N0IHBhdGggdG8gdGhlIEFQSyBmaWxlLgotICAgICAgZm9yd2FyZF9sb2NrOiAob3B0aW9uYWwpIElmIHNldCBmb3J3YXJkLWxvY2tzIHRoZSBhcHAuCi0gICAgICBhbGxvd19kb3duZ3JhZGU6IChvcHRpb25hbCkgSWYgc2V0LCBhbGxvd3MgZm9yIGRvd25ncmFkZXMuCi0gICAgICByZWluc3RhbGw6IChvcHRpb25hbCkgSWYgc2V0IHJlaW5zdGFsbHMgdGhlIGFwcCwga2VlcGluZyBpdHMgZGF0YS4KLSAgICAgIHNkX2NhcmQ6IChvcHRpb25hbCkgSWYgc2V0IGluc3RhbGxzIG9uIHRoZSBTRCBjYXJkLgotICAgICAgdGltZW91dDogKG9wdGlvbmFsKSBUaW1lb3V0IHBlciB0cnkgaW4gc2Vjb25kcy4KLSAgICAgIHJldHJpZXM6IChvcHRpb25hbCkgTnVtYmVyIG9mIHJldHJpZXMgdG8gYXR0ZW1wdC4KLWBgYAotCi0KLSMjIyBBZGJXcmFwcGVyLkluc3RhbGxNdWx0aXBsZQotCi1JbnN0YWxsIGFuIGFwayB3aXRoIHNwbGl0cyBvbiB0aGUgZGV2aWNlLgotYGBgCi0gICAgQXJnczoKLSAgICAgIGFwa19wYXRoczogSG9zdCBwYXRoIHRvIHRoZSBBUEsgZmlsZS4KLSAgICAgIGZvcndhcmRfbG9jazogKG9wdGlvbmFsKSBJZiBzZXQgZm9yd2FyZC1sb2NrcyB0aGUgYXBwLgotICAgICAgcmVpbnN0YWxsOiAob3B0aW9uYWwpIElmIHNldCByZWluc3RhbGxzIHRoZSBhcHAsIGtlZXBpbmcgaXRzIGRhdGEuCi0gICAgICBzZF9jYXJkOiAob3B0aW9uYWwpIElmIHNldCBpbnN0YWxscyBvbiB0aGUgU0QgY2FyZC4KLSAgICAgIGFsbG93X2Rvd25ncmFkZTogKG9wdGlvbmFsKSBBbGxvdyB2ZXJzaW9uQ29kZSBkb3duZ3JhZGUuCi0gICAgICBwYXJ0aWFsOiAob3B0aW9uYWwpIFBhY2thZ2UgSUQgaWYgYXBrX3BhdGhzIGRvZXNuJ3QgaW5jbHVkZSBhbGwgLmFwa3MuCi0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotYGBgCi0KLQotIyMjIEFkYldyYXBwZXIuVW5pbnN0YWxsCi0KLVJlbW92ZSB0aGUgYXBwIHxwYWNrYWdlfCBmcm9tIHRoZSBkZXZpY2UuCi1gYGAKLSAgICBBcmdzOgotICAgICAgcGFja2FnZTogVGhlIHBhY2thZ2UgdG8gdW5pbnN0YWxsLgotICAgICAga2VlcF9kYXRhOiAob3B0aW9uYWwpIElmIHNldCBrZWVwIHRoZSBkYXRhIGFuZCBjYWNoZSBkaXJlY3Rvcmllcy4KLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi1gYGAKLQotCi0jIyMgQWRiV3JhcHBlci5CYWNrdXAKLQotV3JpdGUgYW4gYXJjaGl2ZSBvZiB0aGUgZGV2aWNlJ3MgZGF0YSB0byB8cGF0aHwuCi1gYGAKLSAgICBBcmdzOgotICAgICAgcGF0aDogTG9jYWwgcGF0aCB0byBzdG9yZSB0aGUgYmFja3VwIGZpbGUuCi0gICAgICBwYWNrYWdlczogTGlzdCBvZiB0byBwYWNrYWdlcyB0byBiZSBiYWNrZWQgdXAuCi0gICAgICBhcGs6IChvcHRpb25hbCkgSWYgc2V0IGluY2x1ZGUgdGhlIC5hcGsgZmlsZXMgaW4gdGhlIGFyY2hpdmUuCi0gICAgICBzaGFyZWQ6IChvcHRpb25hbCkgSWYgc2V0IGJ1Y2t1cCB0aGUgZGV2aWNlJ3MgU0QgY2FyZC4KLSAgICAgIG5vc3lzdGVtOiAob3B0aW9uYWwpIElmIHNldCBleGNsdWRlIHN5c3RlbSBhcHBsaWNhdGlvbnMuCi0gICAgICBpbmNsdWRlX2FsbDogKG9wdGlvbmFsKSBJZiBzZXQgYmFjayB1cCBhbGwgaW5zdGFsbGVkIGFwcGxpY2F0aW9ucyBhbmQKLSAgICAgICAgfHBhY2thZ2VzfCBpcyBvcHRpb25hbC4KLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi1gYGAKLQotCi0jIyMgQWRiV3JhcHBlci5SZXN0b3JlCi0KLVJlc3RvcmUgZGV2aWNlIGNvbnRlbnRzIGZyb20gdGhlIGJhY2t1cCBhcmNoaXZlLgotYGBgCi0gICAgQXJnczoKLSAgICAgIHBhdGg6IEhvc3QgcGF0aCB0byB0aGUgYmFja3VwIGFyY2hpdmUuCi0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotYGBgCi0KLQotIyMjIEFkYldyYXBwZXIuV2FpdEZvckRldmljZQotCi1CbG9jayB1bnRpbCB0aGUgZGV2aWNlIGlzIG9ubGluZS4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotYGBgCi0KLQotIyMjIEFkYldyYXBwZXIuR2V0U3RhdGUKLQotR2V0IGRldmljZSBzdGF0ZS4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotCi0gICAgUmV0dXJuczoKLSAgICAgIE9uZSBvZiAnb2ZmbGluZScsICdib290bG9hZGVyJywgb3IgJ2RldmljZScuCi1gYGAKLQotCi0jIyMgQWRiV3JhcHBlci5HZXREZXZQYXRoCi0KLUdldHMgdGhlIGRldmljZSBwYXRoLgotYGBgCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIGRldmljZSBwYXRoIChlLmcuIHVzYjozLTQpCi1gYGAKLQotCi0jIyMgQWRiV3JhcHBlci5SZW1vdW50Ci0KLVJlbW91bnRzIHRoZSAvc3lzdGVtIHBhcnRpdGlvbiBvbiB0aGUgZGV2aWNlIHJlYWQtd3JpdGUuCi0jIyMgQWRiV3JhcHBlci5SZWJvb3QKLQotUmVib290cyB0aGUgZGV2aWNlLgotYGBgCi0gICAgQXJnczoKLSAgICAgIHRvX2Jvb3Rsb2FkZXI6IChvcHRpb25hbCkgSWYgc2V0IHJlYm9vdHMgdG8gdGhlIGJvb3Rsb2FkZXIuCi0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotYGBgCi0KLQotIyMjIEFkYldyYXBwZXIuUm9vdAotCi1SZXN0YXJ0cyB0aGUgYWRiZCBkYWVtb24gd2l0aCByb290IHBlcm1pc3Npb25zLCBpZiBwb3NzaWJsZS4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiAob3B0aW9uYWwpIFRpbWVvdXQgcGVyIHRyeSBpbiBzZWNvbmRzLgotICAgICAgcmV0cmllczogKG9wdGlvbmFsKSBOdW1iZXIgb2YgcmV0cmllcyB0byBhdHRlbXB0LgotYGBgCi0KLQotIyMjIEFkYldyYXBwZXIuRW11Ci0KLVJ1bnMgYW4gZW11bGF0b3IgY29uc29sZSBjb21tYW5kLgotYGBgCi0gICAgU2VlIGh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vdG9vbHMvZGV2aWNlcy9lbXVsYXRvci5odG1sI2NvbnNvbGUKLQotICAgIEFyZ3M6Ci0gICAgICBjbWQ6IFRoZSBjb21tYW5kIHRvIHJ1biBvbiB0aGUgZW11bGF0b3IgY29uc29sZS4KLSAgICAgIHRpbWVvdXQ6IChvcHRpb25hbCkgVGltZW91dCBwZXIgdHJ5IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiAob3B0aW9uYWwpIE51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIG91dHB1dCBvZiB0aGUgZW11bGF0b3IgY29uc29sZSBjb21tYW5kLgotYGBgCi0KLQotIyMjIEFkYldyYXBwZXIuRGlzYWJsZVZlcml0eQotCi1EaXNhYmxlIE1hcnNobWFsbG93J3MgVmVyaXR5IHNlY3VyaXR5IGZlYXR1cmUKLSMjIyBBZGJXcmFwcGVyLkVuYWJsZVZlcml0eQotCi1FbmFibGUgTWFyc2htYWxsb3cncyBWZXJpdHkgc2VjdXJpdHkgZmVhdHVyZQotIyMjIEFkYldyYXBwZXIuXF9cX2luaXRcX1xfCi0KLUluaXRpYWxpemVzIHRoZSBBZGJXcmFwcGVyLgotYGBgCi0gICAgQXJnczoKLSAgICAgIGRldmljZV9zZXJpYWw6IFRoZSBkZXZpY2Ugc2VyaWFsIG51bWJlciBhcyBhIHN0cmluZy4KLWBgYAotCi0KLSMjIyBBZGJXcmFwcGVyLlxfXF9lcVxfXF8KLQotQ29uc2lkZXIgaW5zdGFuY2VzIGVxdWFsIGlmIHRoZXkgcmVmZXIgdG8gdGhlIHNhbWUgZGV2aWNlLgotYGBgCi0gICAgQXJnczoKLSAgICAgIG90aGVyOiBUaGUgaW5zdGFuY2UgdG8gY29tcGFyZSBlcXVhbGl0eSB3aXRoLgotCi0gICAgUmV0dXJuczoKLSAgICAgIFRydWUgaWYgdGhlIGluc3RhbmNlcyBhcmUgY29uc2lkZXJlZCBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgotYGBgCi0KLQotIyMjIEFkYldyYXBwZXIuXF9cX3N0clxfXF8KLQotVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnN0YW5jZS4KLWBgYAotICAgIFJldHVybnM6Ci0gICAgICBUaGUgZGV2aWNlIHNlcmlhbCBudW1iZXIgYXMgYSBzdHJpbmcuCi1gYGAKLQotCi0jIyMgQWRiV3JhcHBlci5cX1xfcmVwclxfXF8KLQotIyMjIFZlcmlmeUxvY2FsRmlsZUV4aXN0cwotCi1WZXJpZmllcyBhIGxvY2FsIGZpbGUgZXhpc3RzLgotYGBgCi0gIEFyZ3M6Ci0gICAgcGF0aDogUGF0aCB0byB0aGUgbG9jYWwgZmlsZS4KLQotICBSYWlzZXM6Ci0gICAgSU9FcnJvcjogSWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdC4KLWBgYAotCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RvY3MvZGV2aWNlX2JsYWNrbGlzdC5tZCBiL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RvY3MvZGV2aWNlX2JsYWNrbGlzdC5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZlZWQ1MS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kb2NzL2RldmljZV9ibGFja2xpc3QubWQKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08IS0tIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAgICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0gICAgIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0tLT4KLQotIyBEZXZpbDogRGV2aWNlIEJsYWNrbGlzdAotCi0jIyBXaGF0IGlzIGl0PwotCi1UaGUgZGV2aWNlIGJsYWNrbGlzdCBpcyBhIHBlci1ydW4gbGlzdCBvZiBkZXZpY2VzIGRldGVjdGVkIHRvIGJlIGluIGEga25vd24gYmFkCi1zdGF0ZSBhbG9uZyB3aXRoIHRoZSByZWFzb24gdGhleSBhcmUgc3VzcGVjdGVkIG9mIGJlaW5nIGluIGEgYmFkIHN0YXRlIChvZmZsaW5lLAotbm90IHJlc3BvbmRpbmcsIGV0YykuIEl0IGlzIHN0b3JlZCBhcyBhIGpzb24gZmlsZS4gVGhpcyBnZXRzIHJlc2V0IGV2ZXJ5IHJ1bgotZHVyaW5nIHRoZSBkZXZpY2UgcmVjb3Zlcnkgc3RlcCAoY3VycmVudGx5IHBhcnQgb2YgYGJiX2RldmljZV9zdGF0dXNfY2hlY2tgKS4KLQotIyMgQm90cwotCi1PbiBib3RzLCB0aGlzIGlzIG5vcm1hbGx5IGZvdW5kIGF0IGAvL291dC9iYWRfZGV2aWNlcy5qc29uYC4gSWYgeW91IGFyZSBoYXZpbmcKLXByb2JsZW1zIHdpdGggYmxhY2tsaXN0ZWQgZGV2aWNlcyBsb2NhbGx5IGV2ZW4gdGhvdWdoIGEgZGV2aWNlIGlzIGluIGEgZ29vZAotc3RhdGUsIHlvdSBjYW4gc2FmZWx5IGRlbGV0ZSB0aGlzIGZpbGUuCi0KLSMgVG9vbHMgZm9yIGludGVyYWN0aW5nIHdpdGggZGV2aWNlIGJsYWNrIGxpc3QuCi0KLVlvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlIGJsYWNrbGlzdCB2aWEgW2RldmlsLmFuZHJvaWQuZGV2aWNlXF9ibGFja2xpc3RdKGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy90aGlyZF9wYXJ0eS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL2RldmljZV9ibGFja2xpc3QucHkpLgotVGhpcyBhbGxvd3MgZm9yIGFueSBpbnRlcmFjdGlvbiB5b3Ugd291bGQgbmVlZCB3aXRoIGEgZGV2aWNlIGJsYWNrbGlzdDoKLQotICAtIFJlYWRpbmcKLSAgLSBXcml0aW5nCi0gIC0gRXh0ZW5kaW5nCi0gIC0gUmVzZXR0aW5nCi0KLUFuIGV4YW1wbGUgdXNlY2FzZSBvZiB0aGlzIGlzOgotYGBgcHl0aG9uCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV9ibGFja2xpc3QKLQotYmxhY2tsaXN0ID0gZGV2aWNlX2JsYWNrbGlzdC5CbGFja2xpc3QoYmxhY2tsaXN0X3BhdGgpCi1ibGFja2xpc3RlZF9kZXZpY2VzID0gYmxhY2tsaXN0LlJlYWQoKQotZm9yIGRldmljZSBpbiBibGFja2xpc3RlZF9kZXZpY2VzOgotICBwcmludCAnRGV2aWNlICVzIGlzIGJsYWNrbGlzdGVkJyAlIGRldmljZQotYmxhY2tsaXN0LlJlc2V0KCkKLW5ld19ibGFja2xpc3QgPSB7J2RldmljZV9pZDEnOiB7J3RpbWVzdGFtcCc6IHRzLCAncmVhc29uJzogcmVhc29ufX0KLWJsYWNrbGlzdC5Xcml0ZShuZXdfYmxhY2tsaXN0KQotYmxhY2tsaXN0LkV4dGVuZChbZGV2aWNlXzIsIGRldmljZV8zXSwgcmVhc29uPSdSZWFzb24gZm9yIGJsYWNrbGlzdGluZycpCi1gYGAKLQotCi0jIyBXaGVyZSBpdCBpcyB1c2VkLgotCi1UaGUgYmxhY2tsaXN0IGZpbGUgcGF0aCBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIGZvbGxvd2luZyBzY3JpcHRzIGluIGNocm9taXVtOgotCi0gIC0gW3Rlc3RcX3J1bm5lci5weV0oaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL2J1aWxkL2FuZHJvaWQvdGVzdF9ydW5uZXIucHkpCi0gIC0gW3Byb3Zpc2lvblxfZGV2aWNlcy5weV0oaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL2J1aWxkL2FuZHJvaWQvcHJvdmlzaW9uX2RldmljZXMucHkpCi0gIC0gW2JiXF9kZXZpY2VcX3N0YXR1c1xfY2hlY2sucHldKGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9idWlsZC9hbmRyb2lkL2J1aWxkYm90L2JiX2RldmljZV9zdGF0dXNfY2hlY2sucHkpCi0KLVRoZSBibGFja2xpc3QgaXMgYWxzbyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgc2NyaXB0czoKLQotICAtIFtkZXZpY2VcX3N0YXR1cy5weV0oaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5L2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvZGV2aWNlX3N0YXR1cy5weSkKLSAgLSBbZGV2aWNlXF9yZWNvdmVyeS5weV0oaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5L2NhdGFwdWx0L2RldmlsL2RldmlsL2FuZHJvaWQvdG9vbHMvZGV2aWNlX3JlY292ZXJ5LnB5KQotCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RvY3MvZGV2aWNlX3V0aWxzLm1kIGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZG9jcy9kZXZpY2VfdXRpbHMubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ZTg5YTcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZG9jcy9kZXZpY2VfdXRpbHMubWQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDg2ICswLDAgQEAKLSMgW2RldmlsLmFuZHJvaWQuZGV2aWNlX3V0aWxzXShodHRwczovL2dpdGh1Yi5jb20vY2F0YXB1bHQtcHJvamVjdC9jYXRhcHVsdC9ibG9iL21hc3Rlci9kZXZpbC9kZXZpbC9hbmRyb2lkL2RldmljZV91dGlscy5weSkKLQotKlRoaXMgcGFnZSB3YXMgYXV0b2dlbmVyYXRlZCBieSBgZGV2aWwvdXRpbHMvbWFya2Rvd24ucHkgLS1tb2R1bGUtbGluayBodHRwczovL2dpdGh1Yi5jb20vY2F0YXB1bHQtcHJvamVjdC9jYXRhcHVsdC9ibG9iL21hc3Rlci9kZXZpbC9kZXZpbC9hbmRyb2lkL2RldmljZV91dGlscy5weWAqCi0KLSMjIERldmljZVV0aWxzCi0KLSMjIyBEZXZpY2VVdGlscy5cX1xfaW5pdFxfXF8KLQotRGV2aWNlVXRpbHMgY29uc3RydWN0b3IuCi1gYGAKLSAgICBBcmdzOgotICAgICAgZGV2aWNlOiBFaXRoZXIgYSBkZXZpY2Ugc2VyaWFsLCBhbiBleGlzdGluZyBBZGJXcmFwcGVyIGluc3RhbmNlLCBvciBhbgotICAgICAgICBhbiBleGlzdGluZyBBbmRyb2lkQ29tbWFuZHMgaW5zdGFuY2UuCi0gICAgICBlbmFibGVfZGV2aWNlX2ZpbGVzX2NhY2hlOiBGb3IgUHVzaENoYW5nZWRGaWxlcygpLCBjYWNoZSBjaGVja3N1bXMgb2YKLSAgICAgICAgcHVzaGVkIGZpbGVzIHJhdGhlciB0aGFuIHJlY29tcHV0aW5nIHRoZW0gb24gYSBzdWJzZXF1ZW50IGNhbGwuCi0gICAgICBkZWZhdWx0X3RpbWVvdXQ6IEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgZGVmYXVsdCBudW1iZXIgb2Ygc2Vjb25kcyB0bwotICAgICAgICB3YWl0IGZvciBhbiBvcGVyYXRpb24gdG8gY29tcGxldGUgaWYgbm8gZXhwbGljaXQgdmFsdWUgaXMgcHJvdmlkZWQuCi0gICAgICBkZWZhdWx0X3JldHJpZXM6IEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgZGVmYXVsdCBudW1iZXIgb3IgdGltZXMgYW4KLSAgICAgICAgb3BlcmF0aW9uIHNob3VsZCBiZSByZXRyaWVkIG9uIGZhaWx1cmUgaWYgbm8gZXhwbGljaXQgdmFsdWUgaXMgcHJvdmlkZWQuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuXF9cX2VxXF9cXwotCi1DaGVja3Mgd2hldGhlciB8b3RoZXJ8IHJlZmVycyB0byB0aGUgc2FtZSBkZXZpY2UgYXMgfHNlbGZ8LgotYGBgCi0gICAgQXJnczoKLSAgICAgIG90aGVyOiBUaGUgb2JqZWN0IHRvIGNvbXBhcmUgdG8uIFRoaXMgY2FuIGJlIGEgYmFzZXN0cmluZywgYW4gaW5zdGFuY2UKLSAgICAgICAgb2YgYWRiX3dyYXBwZXIuQWRiV3JhcHBlciwgb3IgYW4gaW5zdGFuY2Ugb2YgRGV2aWNlVXRpbHMuCi0gICAgUmV0dXJuczoKLSAgICAgIFdoZXRoZXIgfG90aGVyfCByZWZlcnMgdG8gdGhlIHNhbWUgZGV2aWNlIGFzIHxzZWxmfC4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5cX1xfbHRcX1xfCi0KLUNvbXBhcmVzIHR3byBpbnN0YW5jZXMgb2YgRGV2aWNlVXRpbHMuCi1gYGAKLSAgICBUaGlzIG1lcmVseSBjb21wYXJlcyB0aGVpciBzZXJpYWwgbnVtYmVycy4KLQotICAgIEFyZ3M6Ci0gICAgICBvdGhlcjogVGhlIGluc3RhbmNlIG9mIERldmljZVV0aWxzIHRvIGNvbXBhcmUgdG8uCi0gICAgUmV0dXJuczoKLSAgICAgIFdoZXRoZXIgfHNlbGZ8IGlzIGxlc3MgdGhhbiB8b3RoZXJ8LgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLlxfXF9zdHJcX1xfCi0KLVJldHVybnMgdGhlIGRldmljZSBzZXJpYWwuCi0jIyMgRGV2aWNlVXRpbHMuTmVlZHNTVQotCi1DaGVja3Mgd2hldGhlciAnc3UnIGlzIG5lZWRlZCB0byBhY2Nlc3MgcHJvdGVjdGVkIHJlc291cmNlcy4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSBpZiAnc3UnIGlzIGF2YWlsYWJsZSBvbiB0aGUgZGV2aWNlIGFuZCBpcyBuZWVkZWQgdG8gdG8gYWNjZXNzCi0gICAgICAgIHByb3RlY3RlZCByZXNvdXJjZXM7IEZhbHNlIG90aGVyd2lzZSBpZiBlaXRoZXIgJ3N1JyBpcyBub3QgYXZhaWxhYmxlCi0gICAgICAgIChlLmcuIGJlY2F1c2UgdGhlIGRldmljZSBoYXMgYSB1c2VyIGJ1aWxkKSwgb3Igbm90IG5lZWRlZCAoYmVjYXVzZSBhZGJkCi0gICAgICAgIGFscmVhZHkgaGFzIHJvb3QgcHJpdmlsZWdlcykuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLklzT25saW5lCi0KLUNoZWNrcyB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgb25saW5lLgotYGBgCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBUcnVlIGlmIHRoZSBkZXZpY2UgaXMgb25saW5lLCBGYWxzZSBvdGhlcndpc2UuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuSGFzUm9vdAotCi1DaGVja3Mgd2hldGhlciBvciBub3QgYWRiZCBoYXMgcm9vdCBwcml2aWxlZ2VzLgotYGBgCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBUcnVlIGlmIGFkYmQgaGFzIHJvb3QgcHJpdmlsZWdlcywgRmFsc2Ugb3RoZXJ3aXNlLgotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5FbmFibGVSb290Ci0KLVJlc3RhcnRzIGFkYmQgd2l0aCByb290IHByaXZpbGVnZXMuCi1gYGAKLSAgICBBcmdzOgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIGlmIHJvb3QgY291bGQgbm90IGJlIGVuYWJsZWQuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuSXNVc2VyQnVpbGQKLQotQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoZSBkZXZpY2UgaXMgcnVubmluZyBhIHVzZXIgYnVpbGQuCi1gYGAKLSAgICBBcmdzOgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIFRydWUgaWYgdGhlIGRldmljZSBpcyBydW5uaW5nIGEgdXNlciBidWlsZCwgRmFsc2Ugb3RoZXJ3aXNlIChpLmUuIGlmCi0gICAgICAgIGl0J3MgcnVubmluZyBhIHVzZXJkZWJ1ZyBidWlsZCkuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLkdldEV4dGVybmFsU3RvcmFnZVBhdGgKLQotR2V0IHRoZSBkZXZpY2UncyBwYXRoIHRvIGl0cyBTRCBjYXJkLgotYGBgCi0gICAgQXJnczoKLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgZGV2aWNlJ3MgcGF0aCB0byBpdHMgU0QgY2FyZC4KLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiB0aGUgZXh0ZXJuYWwgc3RvcmFnZSBwYXRoIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5HZXRJTUVJCi0KLUdldCB0aGUgZGV2aWNlJ3MgSU1FSS4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIGRldmljZSdzIElNRUkuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBBZGJDb21tYW5kRmFpbGVkRXJyb3Igb24gZXJyb3IKLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5HZXRBcHBsaWNhdGlvblBhdGhzCi0KLUdldCB0aGUgcGF0aHMgb2YgdGhlIGluc3RhbGxlZCBhcGtzIG9uIHRoZSBkZXZpY2UgZm9yIHRoZSBnaXZlbiBwYWNrYWdlLgotYGBgCi0gICAgQXJnczoKLSAgICAgIHBhY2thZ2U6IE5hbWUgb2YgdGhlIHBhY2thZ2UuCi0KLSAgICBSZXR1cm5zOgotICAgICAgTGlzdCBvZiBwYXRocyB0byB0aGUgYXBrcyBvbiB0aGUgZGV2aWNlIGZvciB0aGUgZ2l2ZW4gcGFja2FnZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5UYWtlQnVnUmVwb3J0Ci0KLVRha2VzIGEgYnVnIHJlcG9ydCBhbmQgZHVtcHMgaXQgdG8gdGhlIHNwZWNpZmllZCBwYXRoLgotYGBgCi0gICAgVGhpcyBkb2Vzbid0IHVzZSBhZGIncyBidWdyZXBvcnQgb3B0aW9uIHNpbmNlIGl0cyBiZWhhdmlvciBpcyBkZXBlbmRlbnQgb24KLSAgICBib3RoIGFkYiB2ZXJzaW9uIGFuZCBkZXZpY2UgT1MgdmVyc2lvbi4gVG8gbWFrZSBpdCBzaW1wbGVyLCB0aGlzIGRpcmVjdGx5Ci0gICAgcnVucyB0aGUgYnVncmVwb3J0IGNvbW1hbmQgb24gdGhlIGRldmljZSBpdHNlbGYgYW5kIGR1bXBzIHRoZSBzdGRvdXQgdG8gYQotICAgIGZpbGUuCi0KLSAgICBBcmdzOgotICAgICAgcGF0aDogUGF0aCBvbiB0aGUgaG9zdCB0byBkcm9wIHRoZSBidWcgcmVwb3J0LgotICAgICAgdGltZW91dDogKG9wdGlvbmFsKSBUaW1lb3V0IHBlciB0cnkgaW4gc2Vjb25kcy4KLSAgICAgIHJldHJpZXM6IChvcHRpb25hbCkgTnVtYmVyIG9mIHJldHJpZXMgdG8gYXR0ZW1wdC4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5HZXRBcHBsaWNhdGlvblZlcnNpb24KLQotR2V0IHRoZSB2ZXJzaW9uIG5hbWUgb2YgYSBwYWNrYWdlIGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlLgotYGBgCi0gICAgQXJnczoKLSAgICAgIHBhY2thZ2U6IE5hbWUgb2YgdGhlIHBhY2thZ2UuCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBzdHJpbmcgd2l0aCB0aGUgdmVyc2lvbiBuYW1lIG9yIE5vbmUgaWYgdGhlIHBhY2thZ2UgaXMgbm90IGZvdW5kCi0gICAgICBvbiB0aGUgZGV2aWNlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLkdldEFwcGxpY2F0aW9uRGF0YURpcmVjdG9yeQotCi1HZXQgdGhlIGRhdGEgZGlyZWN0b3J5IG9uIHRoZSBkZXZpY2UgZm9yIHRoZSBnaXZlbiBwYWNrYWdlLgotYGBgCi0gICAgQXJnczoKLSAgICAgIHBhY2thZ2U6IE5hbWUgb2YgdGhlIHBhY2thZ2UuCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIHBhY2thZ2UncyBkYXRhIGRpcmVjdG9yeS4KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kRmFpbGVkRXJyb3IgaWYgdGhlIHBhY2thZ2UncyBkYXRhIGRpcmVjdG9yeSBjYW4ndCBiZSBmb3VuZCwKLSAgICAgICAgd2hldGhlciBiZWNhdXNlIGl0J3Mgbm90IGluc3RhbGxlZCBvciBvdGhlcndpc2UuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuV2FpdFVudGlsRnVsbHlCb290ZWQKLQotV2FpdCBmb3IgdGhlIGRldmljZSB0byBmdWxseSBib290LgotYGBgCi0gICAgVGhpcyBtZWFucyB3YWl0aW5nIGZvciB0aGUgZGV2aWNlIHRvIGJvb3QsIHRoZSBwYWNrYWdlIG1hbmFnZXIgdG8gYmUKLSAgICBhdmFpbGFibGUsIGFuZCB0aGUgU0QgY2FyZCB0byBiZSByZWFkeS4gSXQgY2FuIG9wdGlvbmFsbHkgbWVhbiB3YWl0aW5nCi0gICAgZm9yIHdpZmkgdG8gY29tZSB1cCwgdG9vLgotCi0gICAgQXJnczoKLSAgICAgIHdpZmk6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHdlIHNob3VsZCB3YWl0IGZvciB3aWZpIHRvIGNvbWUgdXAgb3Igbm90LgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIG9uIGZhaWx1cmUuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIGlmIG9uZSBvZiB0aGUgY29tcG9uZW50IHdhaXRzIHRpbWVzIG91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3IgaWYgdGhlIGRldmljZSBiZWNvbWVzIHVucmVzcG9uc2l2ZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5SZWJvb3QKLQotUmVib290IHRoZSBkZXZpY2UuCi1gYGAKLSAgICBBcmdzOgotICAgICAgYmxvY2s6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHdlIHNob3VsZCB3YWl0IGZvciB0aGUgcmVib290IHRvIGNvbXBsZXRlLgotICAgICAgd2lmaTogQSBib29sZWFuIGluZGljYXRpbmcgaWYgd2Ugc2hvdWxkIHdhaXQgZm9yIHdpZmkgdG8gYmUgZW5hYmxlZCBhZnRlcgotICAgICAgICB0aGUgcmVib290LiBUaGUgb3B0aW9uIGhhcyBubyBlZmZlY3QgdW5sZXNzIHxibG9ja3wgaXMgYWxzbyBUcnVlLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5JbnN0YWxsCi0KLUluc3RhbGwgYW4gQVBLLgotYGBgCi0gICAgTm9vcCBpZiBhbiBpZGVudGljYWwgQVBLIGlzIGFscmVhZHkgaW5zdGFsbGVkLgotCi0gICAgQXJnczoKLSAgICAgIGFwazogQW4gQXBrSGVscGVyIGluc3RhbmNlIG9yIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSBBUEsuCi0gICAgICBhbGxvd19kb3duZ3JhZGU6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHdlIHNob3VsZCBhbGxvdyBkb3duZ3JhZGVzLgotICAgICAgcmVpbnN0YWxsOiBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB3ZSBzaG91bGQga2VlcCBhbnkgZXhpc3RpbmcgYXBwIGRhdGEuCi0gICAgICBwZXJtaXNzaW9uczogU2V0IG9mIHBlcm1pc3Npb25zIHRvIHNldC4gSWYgbm90IHNldCwgZmluZHMgcGVybWlzc2lvbnMgd2l0aAotICAgICAgICAgIGFwayBoZWxwZXIuIFRvIHNldCBubyBwZXJtaXNzaW9ucywgcGFzcyBbXS4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiB0aGUgaW5zdGFsbGF0aW9uIGZhaWxzLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBpZiB0aGUgaW5zdGFsbGF0aW9uIHRpbWVzIG91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuSW5zdGFsbFNwbGl0QXBrCi0KLUluc3RhbGwgYSBzcGxpdCBBUEsuCi1gYGAKLSAgICBOb29wIGlmIGFsbCBvZiB0aGUgQVBLIHNwbGl0cyBhcmUgYWxyZWFkeSBpbnN0YWxsZWQuCi0KLSAgICBBcmdzOgotICAgICAgYmFzZV9hcGs6IEFuIEFwa0hlbHBlciBpbnN0YW5jZSBvciBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgYmFzZQotICAgICAgICAgIEFQSy4KLSAgICAgIHNwbGl0X2Fwa3M6IEEgbGlzdCBvZiBzdHJpbmdzIG9mIHBhdGhzIG9mIGFsbCBvZiB0aGUgQVBLIHNwbGl0cy4KLSAgICAgIGFsbG93X2Rvd25ncmFkZTogQSBib29sZWFuIGluZGljYXRpbmcgaWYgd2Ugc2hvdWxkIGFsbG93IGRvd25ncmFkZXMuCi0gICAgICByZWluc3RhbGw6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHdlIHNob3VsZCBrZWVwIGFueSBleGlzdGluZyBhcHAgZGF0YS4KLSAgICAgIGFsbG93X2NhY2hlZF9wcm9wczogV2hldGhlciB0byB1c2UgY2FjaGVkIHZhbHVlcyBmb3IgZGV2aWNlIHByb3BlcnRpZXMuCi0gICAgICBwZXJtaXNzaW9uczogU2V0IG9mIHBlcm1pc3Npb25zIHRvIHNldC4gSWYgbm90IHNldCwgZmluZHMgcGVybWlzc2lvbnMgd2l0aAotICAgICAgICAgIGFwayBoZWxwZXIuIFRvIHNldCBubyBwZXJtaXNzaW9ucywgcGFzcyBbXS4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiB0aGUgaW5zdGFsbGF0aW9uIGZhaWxzLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBpZiB0aGUgaW5zdGFsbGF0aW9uIHRpbWVzIG91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi0gICAgICBEZXZpY2VWZXJzaW9uRXJyb3IgaWYgZGV2aWNlIFNESyBpcyBsZXNzIHRoYW4gQW5kcm9pZCBMLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLlVuaW5zdGFsbAotCi1SZW1vdmUgdGhlIGFwcCB8cGFja2FnZVxfbmFtZXwgZnJvbSB0aGUgZGV2aWNlLgotYGBgCi0gICAgVGhpcyBpcyBhIG5vLW9wIGlmIHRoZSBhcHAgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLgotCi0gICAgQXJnczoKLSAgICAgIHBhY2thZ2VfbmFtZTogVGhlIHBhY2thZ2UgdG8gdW5pbnN0YWxsLgotICAgICAga2VlcF9kYXRhOiAob3B0aW9uYWwpIFdoZXRoZXIgdG8ga2VlcCB0aGUgZGF0YSBhbmQgY2FjaGUgZGlyZWN0b3JpZXMuCi0gICAgICB0aW1lb3V0OiBUaW1lb3V0IGluIHNlY29uZHMuCi0gICAgICByZXRyaWVzOiBOdW1iZXIgb2YgcmV0cmllcy4KLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiB0aGUgdW5pbnN0YWxsYXRpb24gZmFpbHMuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIGlmIHRoZSB1bmluc3RhbGxhdGlvbiB0aW1lcyBvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLlJ1blNoZWxsQ29tbWFuZAotCi1SdW4gYW4gQURCIHNoZWxsIGNvbW1hbmQuCi1gYGAKLSAgICBUaGUgY29tbWFuZCB0byBydW4gfGNtZHwgc2hvdWxkIGJlIGEgc2VxdWVuY2Ugb2YgcHJvZ3JhbSBhcmd1bWVudHMKLSAgICAocHJlZmVycmVkKSBvciBhIHNpbmdsZSBzdHJpbmcgd2l0aCBhIHNoZWxsIHNjcmlwdCB0byBydW4uCi0KLSAgICBXaGVuIHxjbWR8IGlzIGEgc2VxdWVuY2UsIGl0IGlzIGFzc3VtZWQgdG8gY29udGFpbiB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZAotICAgIHRvIHJ1biBmb2xsb3dlZCBieSBpdHMgYXJndW1lbnRzLiBJbiB0aGlzIGNhc2UsIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZQotICAgIGNvbW1hbmQgZXhhY3RseSBhcyBnaXZlbiwgcHJldmVudGluZyBhbnkgZnVydGhlciBwcm9jZXNzaW5nIGJ5IHRoZSBzaGVsbC4KLSAgICBUaGlzIGFsbG93cyBjYWxsZXJzIHRvIGVhc2lseSBwYXNzIGFyZ3VtZW50cyB3aXRoIHNwYWNlcyBvciBzcGVjaWFsCi0gICAgY2hhcmFjdGVycyB3aXRob3V0IGhhdmluZyB0byB3b3JyeSBhYm91dCBxdW90aW5nIHJ1bGVzLiBXaGVuZXZlciBwb3NzaWJsZSwKLSAgICBpdCBpcyByZWNvbWVuZGVkIHRvIHBhc3MgfGNtZHwgYXMgYSBzZXF1ZW5jZS4KLQotICAgIFdoZW4gfGNtZHwgaXMgcGFzc2VkIGFzIGEgc2luZ2xlIHN0cmluZywgfHNoZWxsfCBzaG91bGQgYmUgc2V0IHRvIFRydWUuCi0gICAgVGhlIGNvbW1hbmQgd2lsbCBiZSBpbnRlcnByZXRlZCBhbmQgcnVuIGJ5IHRoZSBzaGVsbCBvbiB0aGUgZGV2aWNlLAotICAgIGFsbG93aW5nIHRoZSB1c2Ugb2Ygc2hlbGwgZmVhdHVyZXMgc3VjaCBhcyBwaXBlcywgd2lsZGNhcmRzLCBvciB2YXJpYWJsZXMuCi0gICAgRmFpbGluZyB0byBzZXQgc2hlbGw9VHJ1ZSB3aWxsIGlzc3VlIGEgd2FybmluZywgYnV0IHRoaXMgd2lsbCBiZSBjaGFuZ2VkCi0gICAgdG8gYSBoYXJkIGZhaWx1cmUgaW4gdGhlIGZ1dHVyZSAoc2VlOiBjYXRhcHVsdDojMzI0MikuCi0KLSAgICBUaGlzIGJlaGF2aW91ciBpcyBjb25zaXN0ZW50IHdpdGggdGhhdCBvZiBjb21tYW5kIHJ1bm5lcnMgaW4gY21kX2hlbHBlciBhcwotICAgIHdlbGwgYXMgUHl0aG9uJ3Mgb3duIHN1YnByb2Nlc3MuUG9wZW4uCi0KLSAgICBUT0RPKHBlcmV6anUpIENoYW5nZSB0aGUgZGVmYXVsdCBvZiB8Y2hlY2tfcmV0dXJufCB0byBUcnVlIHdoZW4gY2FsbGVycwotICAgICAgaGF2ZSBzd2l0Y2hlZCB0byB0aGUgbmV3IGJlaGF2aW91ci4KLQotICAgIEFyZ3M6Ci0gICAgICBjbWQ6IEEgc2VxdWVuY2UgY29udGFpbmluZyB0aGUgY29tbWFuZCB0byBydW4gYW5kIGl0cyBhcmd1bWVudHMsIG9yIGEKLSAgICAgICAgc3RyaW5nIHdpdGggYSBzaGVsbCBzY3JpcHQgdG8gcnVuIChzaG91bGQgYWxzbyBzZXQgc2hlbGw9VHJ1ZSkuCi0gICAgICBzaGVsbDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBzaGVsbCBmZWF0dXJlcyBtYXkgYmUgdXNlZCBpbiB8Y21kfC4KLSAgICAgIGNoZWNrX3JldHVybjogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlIHJldHVybiBjb2RlIHNob3VsZAotICAgICAgICBiZSBjaGVja2VkLgotICAgICAgY3dkOiBUaGUgZGV2aWNlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tbWFuZCBzaG91bGQgYmUgcnVuLgotICAgICAgZW52OiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggd2hpY2ggdGhlIGNvbW1hbmQgc2hvdWxkIGJlIHJ1bi4KLSAgICAgIHJ1bl9hczogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGFja2FnZSBhcyB3aGljaCB0aGUgY29tbWFuZCBzaG91bGQgYmUKLSAgICAgICAgcnVuLgotICAgICAgYXNfcm9vdDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgc2hlbGwgY29tbWFuZCBzaG91bGQgYmUgcnVuCi0gICAgICAgIHdpdGggcm9vdCBwcml2aWxlZ2VzLgotICAgICAgc2luZ2xlX2xpbmU6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIG9ubHkgYSBzaW5nbGUgbGluZSBvZiBvdXRwdXQgaXMKLSAgICAgICAgZXhwZWN0ZWQuCi0gICAgICBsYXJnZV9vdXRwdXQ6IFVzZXMgYSB3b3JrLWFyb3VuZCBmb3IgbGFyZ2Ugc2hlbGwgY29tbWFuZCBvdXRwdXQuIFdpdGhvdXQKLSAgICAgICAgdGhpcyBsYXJnZSBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQuCi0gICAgICByYXdfb3V0cHV0OiBXaGV0aGVyIHRvIG9ubHkgcmV0dXJuIHRoZSByYXcgb3V0cHV0Ci0gICAgICAgICAgKG5vIHNwbGl0dGluZyBpbnRvIGxpbmVzKS4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBJZiBzaW5nbGVfbGluZSBpcyBGYWxzZSwgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZCBhcyBhIGxpc3Qgb2YgbGluZXMsCi0gICAgICBvdGhlcndpc2UsIGEgc3RyaW5nIHdpdGggdGhlIHVuaXF1ZSBsaW5lIG9mIG91dHB1dCBlbW1pdGVkIGJ5IHRoZSBjb21tYW5kCi0gICAgICAod2l0aCB0aGUgb3B0aW9uYWwgbmV3bGluZSBhdCB0aGUgZW5kIHN0cmlwcGVkKS4KLQotICAgIFJhaXNlczoKLSAgICAgIEFkYkNvbW1hbmRGYWlsZWRFcnJvciBpZiBjaGVja19yZXR1cm4gaXMgVHJ1ZSBhbmQgdGhlIGV4aXQgY29kZSBvZgotICAgICAgICB0aGUgY29tbWFuZCBydW4gb24gdGhlIGRldmljZSBpcyBub24temVyby4KLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiBzaW5nbGVfbGluZSBpcyBUcnVlIGJ1dCB0aGUgb3V0cHV0IGNvbnRhaW5zIHR3byBvcgotICAgICAgICBtb3JlIGxpbmVzLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5LaWxsQWxsCi0KLUtpbGwgYWxsIHByb2Nlc3NlcyB3aXRoIHRoZSBnaXZlbiBuYW1lIG9uIHRoZSBkZXZpY2UuCi1gYGAKLSAgICBBcmdzOgotICAgICAgcHJvY2Vzc19uYW1lOiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBwcm9jZXNzIHRvIGtpbGwuCi0gICAgICBleGFjdDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBraWxsIGFsbCBwcm9jZXNzZXMgbWF0Y2hpbmcKLSAgICAgICAgICAgICB0aGUgc3RyaW5nIHxwcm9jZXNzX25hbWV8IGV4YWN0bHksIG9yIGFsbCBvZiB0aG9zZSB3aGljaCBjb250YWluCi0gICAgICAgICAgICAgfHByb2Nlc3NfbmFtZXwgYXMgYSBzdWJzdHJpbmcuIERlZmF1bHRzIHRvIEZhbHNlLgotICAgICAgc2lnbnVtOiBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpZ25hbCBudW1iZXIgdG8gc2VuZCB0byBraWxsLiBEZWZhdWx0cwotICAgICAgICAgICAgICB0byBTSUdLSUxMICg5KS4KLSAgICAgIGFzX3Jvb3Q6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGtpbGwgc2hvdWxkIGJlIGV4ZWN1dGVkIHdpdGgKLSAgICAgICAgICAgICAgIHJvb3QgcHJpdmlsZWdlcy4KLSAgICAgIGJsb2NraW5nOiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHdlIHNob3VsZCB3YWl0IHVudGlsIGFsbCBwcm9jZXNzZXMKLSAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiB8cHJvY2Vzc19uYW1lfCBhcmUgZGVhZC4KLSAgICAgIHF1aWV0OiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIGlnbm9yZSB0aGUgZmFjdCB0aGF0IG5vIHByb2Nlc3NlcwotICAgICAgICAgICAgIHRvIGtpbGwgd2VyZSBmb3VuZC4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgbnVtYmVyIG9mIHByb2Nlc3NlcyBhdHRlbXB0ZWQgdG8ga2lsbC4KLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiBubyBwcm9jZXNzIHdhcyBraWxsZWQgYW5kIHxxdWlldHwgaXMgRmFsc2UuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLlN0YXJ0QWN0aXZpdHkKLQotU3RhcnQgcGFja2FnZSdzIGFjdGl2aXR5IG9uIHRoZSBkZXZpY2UuCi1gYGAKLSAgICBBcmdzOgotICAgICAgaW50ZW50X29iajogQW4gSW50ZW50IG9iamVjdCB0byBzZW5kLgotICAgICAgYmxvY2tpbmc6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBhY3Rpdml0eSB0bwotICAgICAgICAgICAgICAgIGZpbmlzaCBsYXVuY2hpbmcuCi0gICAgICB0cmFjZV9maWxlX25hbWU6IElmIHByZXNlbnQsIGEgc3RyaW5nIHRoYXQgYm90aCBpbmRpY2F0ZXMgdGhhdCB3ZSB3YW50IHRvCi0gICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgdGhlIGFjdGl2aXR5IGFuZCBjb250YWlucyB0aGUgcGF0aCB0byB3aGljaCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgdHJhY2Ugc2hvdWxkIGJlIHNhdmVkLgotICAgICAgZm9yY2Vfc3RvcDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB3ZSBzaG91bGQgc3RvcCB0aGUgYWN0aXZpdHkKLSAgICAgICAgICAgICAgICAgIGJlZm9yZSBzdGFydGluZyBpdC4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiB0aGUgYWN0aXZpdHkgY291bGQgbm90IGJlIHN0YXJ0ZWQuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLlN0YXJ0SW5zdHJ1bWVudGF0aW9uCi0KLSMjIyBEZXZpY2VVdGlscy5Ccm9hZGNhc3RJbnRlbnQKLQotU2VuZCBhIGJyb2FkY2FzdCBpbnRlbnQuCi1gYGAKLSAgICBBcmdzOgotICAgICAgaW50ZW50OiBBbiBJbnRlbnQgdG8gYnJvYWRjYXN0LgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5Hb0hvbWUKLQotUmV0dXJuIHRvIHRoZSBob21lIHNjcmVlbiBhbmQgb2J0YWluIGxhdW5jaGVyIGZvY3VzLgotYGBgCi0gICAgVGhpcyBjb21tYW5kIGxhdW5jaGVzIHRoZSBob21lIHNjcmVlbiBhbmQgYXR0ZW1wdHMgdG8gb2J0YWluCi0gICAgbGF1bmNoZXIgZm9jdXMgdW50aWwgdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC4KLQotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLkZvcmNlU3RvcAotCi1DbG9zZSB0aGUgYXBwbGljYXRpb24uCi1gYGAKLSAgICBBcmdzOgotICAgICAgcGFja2FnZTogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdG9wLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5DbGVhckFwcGxpY2F0aW9uU3RhdGUKLQotQ2xlYXIgYWxsIHN0YXRlIGZvciB0aGUgZ2l2ZW4gcGFja2FnZS4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICBwYWNrYWdlOiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRvIHN0b3AuCi0gICAgICBwZXJtaXNzaW9uczogTGlzdCBvZiBwZXJtaXNzaW9ucyB0byBzZXQgYWZ0ZXIgY2xlYXJpbmcgZGF0YS4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuU2VuZEtleUV2ZW50Ci0KLVNlbmRzIGEga2V5Y29kZSB0byB0aGUgZGV2aWNlLgotYGBgCi0gICAgU2VlIHRoZSBkZXZpbC5hbmRyb2lkLnNkay5rZXlldmVudCBtb2R1bGUgZm9yIHN1aXRhYmxlIGtleWNvZGUgdmFsdWVzLgotCi0gICAgQXJnczoKLSAgICAgIGtleWNvZGU6IEEgaW50ZWdlciBrZXljb2RlIHRvIHNlbmQgdG8gdGhlIGRldmljZS4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuUHVzaENoYW5nZWRGaWxlcwotCi1QdXNoIGZpbGVzIHRvIHRoZSBkZXZpY2UsIHNraXBwaW5nIGZpbGVzIHRoYXQgZG9uJ3QgbmVlZCB1cGRhdGluZy4KLWBgYAotICAgIFdoZW4gYSBkaXJlY3RvcnkgaXMgcHVzaGVkLCBpdCBpcyB0cmF2ZXJzZWQgcmVjdXJzaXZlbHkgb24gdGhlIGhvc3QgYW5kCi0gICAgYWxsIGZpbGVzIGluIGl0IGFyZSBwdXNoZWQgdG8gdGhlIGRldmljZSBhcyBuZWVkZWQuCi0gICAgQWRkaXRpb25hbGx5LCBpZiBkZWxldGVfZGV2aWNlX3N0YWxlIG9wdGlvbiBpcyBUcnVlLAotICAgIGZpbGVzIHRoYXQgZXhpc3Qgb24gdGhlIGRldmljZSBidXQgZG9uJ3QgZXhpc3Qgb24gdGhlIGhvc3QgYXJlIGRlbGV0ZWQuCi0KLSAgICBBcmdzOgotICAgICAgaG9zdF9kZXZpY2VfdHVwbGVzOiBBIGxpc3Qgb2YgKGhvc3RfcGF0aCwgZGV2aWNlX3BhdGgpIHR1cGxlcywgd2hlcmUKLSAgICAgICAgfGhvc3RfcGF0aHwgaXMgYW4gYWJzb2x1dGUgcGF0aCBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5IG9uIHRoZSBob3N0Ci0gICAgICAgIHRoYXQgc2hvdWxkIGJlIG1pbmltaWFsbHkgcHVzaGVkIHRvIHRoZSBkZXZpY2UsIGFuZCB8ZGV2aWNlX3BhdGh8IGlzCi0gICAgICAgIGFuIGFic29sdXRlIHBhdGggb2YgdGhlIGRlc3RpbmF0aW9uIG9uIHRoZSBkZXZpY2UuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0gICAgICBkZWxldGVfZGV2aWNlX3N0YWxlOiBvcHRpb24gdG8gZGVsZXRlIHN0YWxlIGZpbGVzIG9uIGRldmljZQotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIG9uIGZhaWx1cmUuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLkZpbGVFeGlzdHMKLQotQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgZXhpc3RzIG9uIHRoZSBkZXZpY2UuCi1gYGAKLSAgICBBcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIFBhdGhFeGlzdHMuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuUGF0aEV4aXN0cwotCi1DaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aChzKSBleGlzdHMgb24gdGhlIGRldmljZS4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICBkZXZpY2VfcGF0aDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZSBvbiB0aGUKLSAgICAgICAgICAgICAgICAgICBkZXZpY2UsIG9yIGFuIGl0ZXJhYmxlIG9mIHBhdGhzIHRvIGNoZWNrLgotICAgICAgYXNfcm9vdDogV2hldGhlciByb290IHBlcm1pc3Npb25zIHNob3VsZCBiZSB1c2UgdG8gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2UKLSAgICAgICAgICAgICAgIG9mIHRoZSBnaXZlbiBwYXRoKHMpLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIFRydWUgaWYgdGhlIGFsbCBnaXZlbiBwYXRocyBleGlzdCBvbiB0aGUgZGV2aWNlLCBGYWxzZSBvdGhlcndpc2UuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLlJlbW92ZVBhdGgKLQotUmVtb3ZlcyB0aGUgZ2l2ZW4gcGF0aChzKSBmcm9tIHRoZSBkZXZpY2UuCi1gYGAKLSAgICBBcmdzOgotICAgICAgZGV2aWNlX3BhdGg6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGUgb24gdGhlCi0gICAgICAgICAgICAgICAgICAgZGV2aWNlLCBvciBhbiBpdGVyYWJsZSBvZiBwYXRocyB0byBjaGVjay4KLSAgICAgIGZvcmNlOiBXaGV0aGVyIHRvIHJlbW92ZSB0aGUgcGF0aChzKSB3aXRoIGZvcmNlICgtZikuCi0gICAgICByZWN1cnNpdmU6IFdoZXRoZXIgdG8gcmVtb3ZlIGFueSBkaXJlY3RvcmllcyBpbiB0aGUgcGF0aChzKSByZWN1cnNpdmVseS4KLSAgICAgIGFzX3Jvb3Q6IFdoZXRoZXIgcm9vdCBwZXJtaXNzaW9ucyBzaG91bGQgYmUgdXNlIHRvIHJlbW92ZSB0aGUgZ2l2ZW4KLSAgICAgICAgICAgICAgIHBhdGgocykuCi0gICAgICByZW5hbWU6IFdoZXRoZXIgdG8gcmVuYW1lIHRoZSBwYXRoKHMpIGJlZm9yZSByZW1vdmluZyB0byBoZWxwIGF2b2lkCi0gICAgICAgICAgICBmaWxlc3lzdGVtIGVycm9ycy4gU2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzExNTM5NjU3Ci0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuUHVsbEZpbGUKLQotUHVsbCBhIGZpbGUgZnJvbSB0aGUgZGV2aWNlLgotYGBgCi0gICAgQXJnczoKLSAgICAgIGRldmljZV9wYXRoOiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIHRvIHB1bGwKLSAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBkZXZpY2UuCi0gICAgICBob3N0X3BhdGg6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGRlc3RpbmF0aW9uIG9uCi0gICAgICAgICAgICAgICAgIHRoZSBob3N0LgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIG9uIGZhaWx1cmUuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuUmVhZEZpbGUKLQotUmVhZHMgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBmcm9tIHRoZSBkZXZpY2UuCi1gYGAKLSAgICBBcmdzOgotICAgICAgZGV2aWNlX3BhdGg6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGZpbGUgdG8gcmVhZAotICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGRldmljZS4KLSAgICAgIGFzX3Jvb3Q6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHJlYWQgc2hvdWxkIGJlIGV4ZWN1dGVkIHdpdGgKLSAgICAgICAgICAgICAgIHJvb3QgcHJpdmlsZWdlcy4KLSAgICAgIGZvcmNlX3B1bGw6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gZm9yY2UgdGhlIG9wZXJhdGlvbiB0byBiZQotICAgICAgICAgIHBlcmZvcm1lZCBieSBwdWxsaW5nIGEgZmlsZSBmcm9tIHRoZSBkZXZpY2UuIFRoZSBkZWZhdWx0IGlzLCB3aGVuIHRoZQotICAgICAgICAgIGNvbnRlbnRzIGFyZSBzaG9ydCwgdG8gcmV0cmlldmUgdGhlIGNvbnRlbnRzIHVzaW5nIGNhdCBpbnN0ZWFkLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSBjb250ZW50cyBvZiB8ZGV2aWNlX3BhdGh8IGFzIGEgc3RyaW5nLiBDb250ZW50cyBhcmUgaW50ZXByZXRlZCB1c2luZwotICAgICAgdW5pdmVyc2FsIG5ld2xpbmVzLCBzbyB0aGUgY2FsbGVyIHdpbGwgc2VlIHRoZW0gZW5jb2RlZCBhcyAnCi0nLiBBbHNvLAotICAgICAgYWxsIGxpbmVzIHdpbGwgYmUgdGVybWluYXRlZC4KLQotICAgIFJhaXNlczoKLSAgICAgIEFkYkNvbW1hbmRGYWlsZWRFcnJvciBpZiB0aGUgZmlsZSBjYW4ndCBiZSByZWFkLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5Xcml0ZUZpbGUKLQotV3JpdGVzIHxjb250ZW50c3wgdG8gYSBmaWxlIG9uIHRoZSBkZXZpY2UuCi1gYGAKLSAgICBBcmdzOgotICAgICAgZGV2aWNlX3BhdGg6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGUgdG8gd3JpdGUKLSAgICAgICAgICBvbiB0aGUgZGV2aWNlLgotICAgICAgY29udGVudHM6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gd3JpdGUgdG8gdGhlIGRldmljZS4KLSAgICAgIGFzX3Jvb3Q6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHdyaXRlIHNob3VsZCBiZSBleGVjdXRlZCB3aXRoCi0gICAgICAgICAgcm9vdCBwcml2aWxlZ2VzIChpZiBhdmFpbGFibGUpLgotICAgICAgZm9yY2VfcHVzaDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBmb3JjZSB0aGUgb3BlcmF0aW9uIHRvIGJlCi0gICAgICAgICAgcGVyZm9ybWVkIGJ5IHB1c2hpbmcgYSBmaWxlIHRvIHRoZSBkZXZpY2UuIFRoZSBkZWZhdWx0IGlzLCB3aGVuIHRoZQotICAgICAgICAgIGNvbnRlbnRzIGFyZSBzaG9ydCwgdG8gcGFzcyB0aGUgY29udGVudHMgdXNpbmcgYSBzaGVsbCBzY3JpcHQgaW5zdGVhZC4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgd3JpdHRlbiBvbiB0aGUgZGV2aWNlLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5MaXN0RGlyZWN0b3J5Ci0KLUxpc3QgYWxsIGZpbGVzIG9uIGEgZGV2aWNlIGRpcmVjdG9yeS4KLWBgYAotICAgIE1pcnJvcmluZyBvcy5saXN0ZGlyIChhbmQgbW9zdCBjbGllbnQgZXhwZWN0YXRpb25zKSB0aGUgcmVzdWx0aW5nIGxpc3QKLSAgICBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzcGVjaWFsIGVudHJpZXMgJy4nIGFuZCAnLi4nIGV2ZW4gaWYgdGhleSBhcmUgcHJlc2VudAotICAgIGluIHRoZSBkaXJlY3RvcnkuCi0KLSAgICBBcmdzOgotICAgICAgZGV2aWNlX3BhdGg6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggb2YgdGhlIGRpcmVjdG9yeSBvbiB0aGUgZGV2aWNlCi0gICAgICAgICAgICAgICAgICAgdG8gbGlzdC4KLSAgICAgIGFzX3Jvb3Q6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHRvIHVzZSByb290IHByaXZpbGVnZXMgdG8gbGlzdAotICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSBjb250ZW50cy4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBBIGxpc3Qgb2YgZmlsZW5hbWVzIGZvciBhbGwgZW50cmllcyBjb250YWluZWQgaW4gdGhlIGRpcmVjdG9yeS4KLQotICAgIFJhaXNlczoKLSAgICAgIEFkYkNvbW1hbmRGYWlsZWRFcnJvciBpZiB8ZGV2aWNlX3BhdGh8IGRvZXMgbm90IHNwZWNpZnkgYSB2YWxpZCBhbmQKLSAgICAgICAgICBhY2Nlc3NpYmxlIGRpcmVjdG9yeSBpbiB0aGUgZGV2aWNlLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5TdGF0RGlyZWN0b3J5Ci0KLUxpc3QgZmlsZSBhbmQgc3RhdCBpbmZvIGZvciBhbGwgZW50cmllcyBvbiBhIGRldmljZSBkaXJlY3RvcnkuCi1gYGAKLSAgICBJbXBsZW1lbnRhdGlvbiBub3RlczogdGhpcyBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgYnkgcGFyc2luZyB0aGUgb3V0cHV0Ci0gICAgb2YgJ2xzIC1hIC1sJyBvbiB0aGUgZGV2aWNlLiBXaGV0aGVyIHBvc3NpYmxlIGFuZCBjb252ZW5pZW50LCB3ZSBhdHRlbXB0IHRvCi0gICAgbWFrZSBwYXJzaW5nIHN0cmljdCBhbmQgcmV0dXJuIHZhbHVlcyBtaXJyb3JpbmcgdGhvc2Ugb2YgdGhlIHN0YW5kYXJkIHxvc3wKLSAgICBhbmQgfHN0YXR8IFB5dGhvbiBtb2R1bGVzLgotCi0gICAgTWlycm9yaW5nIG9zLmxpc3RkaXIgKGFuZCBtb3N0IGNsaWVudCBleHBlY3RhdGlvbnMpIHRoZSByZXN1bHRpbmcgbGlzdAotICAgIGRvZXMgbm90IGluY2x1ZGUgdGhlIHNwZWNpYWwgZW50cmllcyAnLicgYW5kICcuLicgZXZlbiBpZiB0aGV5IGFyZSBwcmVzZW50Ci0gICAgaW4gdGhlIGRpcmVjdG9yeS4KLQotICAgIEFyZ3M6Ci0gICAgICBkZXZpY2VfcGF0aDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCBvZiB0aGUgZGlyZWN0b3J5IG9uIHRoZSBkZXZpY2UKLSAgICAgICAgICAgICAgICAgICB0byBsaXN0LgotICAgICAgYXNfcm9vdDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdG8gdXNlIHJvb3QgcHJpdmlsZWdlcyB0byBsaXN0Ci0gICAgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IGNvbnRlbnRzLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgbGlzdCBvZiBkaWN0aW9uYXJpZXMsIGVhY2ggY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGtleXM6Ci0gICAgICAgIGZpbGVuYW1lOiBBIHN0cmluZyB3aXRoIHRoZSBmaWxlIG5hbWUuCi0gICAgICAgIHN0X21vZGU6IEZpbGUgcGVybWlzc2lvbnMsIHVzZSB0aGUgc3RhdCBtb2R1bGUgdG8gaW50ZXJwcmV0IHRoZXNlLgotICAgICAgICBzdF9ubGluazogTnVtYmVyIG9mIGhhcmQgbGlua3MgKG1heSBiZSBtaXNzaW5nKS4KLSAgICAgICAgc3Rfb3duZXI6IEEgc3RyaW5nIHdpdGggdGhlIHVzZXIgbmFtZSBvZiB0aGUgb3duZXIuCi0gICAgICAgIHN0X2dyb3VwOiBBIHN0cmluZyB3aXRoIHRoZSBncm91cCBuYW1lIG9mIHRoZSBvd25lci4KLSAgICAgICAgc3RfcmRldl9wYWlyOiBEZXZpY2UgdHlwZSBhcyAobWFqb3IsIG1pbmlvcikgKG9ubHkgaWYgaW5vZGUgZGV2aWNlKS4KLSAgICAgICAgc3Rfc2l6ZTogU2l6ZSBvZiBmaWxlLCBpbiBieXRlcyAobWF5IGJlIG1pc3NpbmcgZm9yIG5vbi1yZWd1bGFyIGZpbGVzKS4KLSAgICAgICAgc3RfbXRpbWU6IFRpbWUgb2YgbW9zdCByZWNlbnQgbW9kaWZpY2F0aW9uLCBpbiBzZWNvbmRzIHNpbmNlIGVwb2NoCi0gICAgICAgICAgKGFsdGhvdWdoIHJlc29sdXRpb24gaXMgaW4gbWludXRlcykuCi0gICAgICAgIHN5bWJvbGljX2xpbmtfdG86IElmIGVudHJ5IGlzIGEgc3ltYm9saWMgbGluaywgcGF0aCB3aGVyZSBpdCBwb2ludHMgdG87Ci0gICAgICAgICAgbWlzc2luZyBvdGhlcndpc2UuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBBZGJDb21tYW5kRmFpbGVkRXJyb3IgaWYgfGRldmljZV9wYXRofCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmFsaWQgYW5kCi0gICAgICAgICAgYWNjZXNzaWJsZSBkaXJlY3RvcnkgaW4gdGhlIGRldmljZS4KLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuU3RhdFBhdGgKLQotR2V0IHRoZSBzdGF0IGF0dHJpYnV0ZXMgb2YgYSBmaWxlIG9yIGRpcmVjdG9yeSBvbiB0aGUgZGV2aWNlLgotYGBgCi0gICAgQXJnczoKLSAgICAgIGRldmljZV9wYXRoOiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIG9mIGEgZmlsZSBvciBkaXJlY3RvcnkgZnJvbQotICAgICAgICAgICAgICAgICAgIHdoaWNoIHRvIGdldCBhdHRyaWJ1dGVzLgotICAgICAgYXNfcm9vdDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdG8gdXNlIHJvb3QgcHJpdmlsZWdlcyB0bwotICAgICAgICAgICAgICAgYWNjZXNzIHRoZSBmaWxlIGluZm9ybWF0aW9uLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgZGljdGlvbmFyeSB3aXRoIHRoZSBzdGF0IGluZm8gY29sbGVjdGVkOyBzZWUgU3RhdERpcmVjdG9yeSBmb3IgZGV0YWlscy4KLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiBkZXZpY2VfcGF0aCBjYW5ub3QgYmUgZm91bmQgb24gdGhlIGRldmljZS4KLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuRmlsZVNpemUKLQotR2V0IHRoZSBzaXplIG9mIGEgZmlsZSBvbiB0aGUgZGV2aWNlLgotYGBgCi0gICAgTm90ZTogVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBwYXJzaW5nIHRoZSBvdXRwdXQgb2YgdGhlICdscycgY29tbWFuZCBvbgotICAgIHRoZSBkZXZpY2UuIE9uIHNvbWUgQW5kcm9pZCB2ZXJzaW9ucywgd2hlbiBwYXNzaW5nIGEgZGlyZWN0b3J5IG9yIHNwZWNpYWwKLSAgICBmaWxlLCB0aGUgc2l6ZSBpcyAqbm90KiByZXBvcnRlZCBhbmQgdGhpcyBmdW5jdGlvbiB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4KLQotICAgIEFyZ3M6Ci0gICAgICBkZXZpY2VfcGF0aDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCBvZiBhIGZpbGUgb24gdGhlIGRldmljZS4KLSAgICAgIGFzX3Jvb3Q6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHRvIHVzZSByb290IHByaXZpbGVnZXMgdG8KLSAgICAgICAgICAgICAgIGFjY2VzcyB0aGUgZmlsZSBpbmZvcm1hdGlvbi4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBUaGUgc2l6ZSBvZiB0aGUgZmlsZSBpbiBieXRlcy4KLQotICAgIFJhaXNlczoKLSAgICAgIENvbW1hbmRGYWlsZWRFcnJvciBpZiBkZXZpY2VfcGF0aCBjYW5ub3QgYmUgZm91bmQgb24gdGhlIGRldmljZSwgb3IKLSAgICAgICAgaXRzIHNpemUgY2Fubm90IGJlIGRldGVybWl0ZWQgZm9yIHNvbWUgcmVhc29uLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5HZXRMYW5ndWFnZQotCi1SZXR1cm5zIHRoZSBsYW5ndWFnZSBzZXR0aW5nIG9uIHRoZSBkZXZpY2UuCi1gYGAKLSAgICBBcmdzOgotICAgICAgY2FjaGU6IFdoZXRoZXIgdG8gdXNlIGNhY2hlZCBwcm9wZXJ0aWVzIHdoZW4gYXZhaWxhYmxlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLlNldEphdmFBc3NlcnRzCi0KLUVuYWJsZXMgb3IgZGlzYWJsZXMgSmF2YSBhc3NlcnRzLgotYGBgCi0gICAgQXJnczoKLSAgICAgIGVuYWJsZWQ6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgSmF2YSBhc3NlcnRzIHNob3VsZCBiZSBlbmFibGVkCi0gICAgICAgICAgICAgICBvciBkaXNhYmxlZC4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBUcnVlIGlmIHRoZSBkZXZpY2Utc2lkZSBwcm9wZXJ0eSBjaGFuZ2VkIGFuZCBhIHJlc3RhcnQgaXMgcmVxdWlyZWQgYXMgYQotICAgICAgcmVzdWx0LCBGYWxzZSBvdGhlcndpc2UuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuR2V0Q291bnRyeQotCi1SZXR1cm5zIHRoZSBjb3VudHJ5IHNldHRpbmcgb24gdGhlIGRldmljZS4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICBjYWNoZTogV2hldGhlciB0byB1c2UgY2FjaGVkIHByb3BlcnRpZXMgd2hlbiBhdmFpbGFibGUuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuR2V0QXBwbGljYXRpb25QaWRzCi0KLVJldHVybnMgdGhlIFBJRCBvciBQSURzIG9mIGEgZ2l2ZW4gcHJvY2VzcyBuYW1lLgotYGBgCi0gICAgTm90ZSB0aGF0IHRoZSB8cHJvY2Vzc19uYW1lfCwgb2Z0ZW4gdGhlIHBhY2thZ2UgbmFtZSwgbXVzdCBtYXRjaCBleGFjdGx5LgotCi0gICAgQXJnczoKLSAgICAgIHByb2Nlc3NfbmFtZTogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgcHJvY2VzcyBuYW1lIHRvIGdldCB0aGUgUElEcyBmb3IuCi0gICAgICBhdF9tb3N0X29uZTogQSBib29sZWFuIGluZGljYXRpbmcgdGhhdCBhdCBtb3N0IG9uZSBQSUQgaXMgZXhwZWN0ZWQgdG8KLSAgICAgICAgICAgICAgICAgICBiZSBmb3VuZC4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBBIGxpc3Qgb2YgdGhlIFBJRHMgZm9yIHRoZSBuYW1lZCBwcm9jZXNzLiBJZiBhdF9tb3N0X29uZT1UcnVlIHJldHVybnMKLSAgICAgIHRoZSBzaW5nbGUgUElEIGZvdW5kIG9yIE5vbmUgb3RoZXJ3aXNlLgotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIGlmIGF0X21vc3Rfb25lPVRydWUgYW5kIG1vcmUgdGhhbiBvbmUgUElEIGlzIGZvdW5kCi0gICAgICAgICAgZm9yIHRoZSBuYW1lZCBwcm9jZXNzLgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5HZXRQcm9wCi0KLUdldHMgYSBwcm9wZXJ0eSBmcm9tIHRoZSBkZXZpY2UuCi1gYGAKLSAgICBBcmdzOgotICAgICAgcHJvcGVydHlfbmFtZTogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0IGZyb20KLSAgICAgICAgICAgICAgICAgICAgIHRoZSBkZXZpY2UuCi0gICAgICBjYWNoZTogV2hldGhlciB0byB1c2UgY2FjaGVkIHByb3BlcnRpZXMgd2hlbiBhdmFpbGFibGUuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIHZhbHVlIG9mIHRoZSBkZXZpY2UncyB8cHJvcGVydHlfbmFtZXwgcHJvcGVydHkuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuU2V0UHJvcAotCi1TZXRzIGEgcHJvcGVydHkgb24gdGhlIGRldmljZS4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICBwcm9wZXJ0eV9uYW1lOiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQgb24KLSAgICAgICAgICAgICAgICAgICAgIHRoZSBkZXZpY2UuCi0gICAgICB2YWx1ZTogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgdmFsdWUgdG8gc2V0IHRvIHRoZSBwcm9wZXJ0eSBvbiB0aGUKLSAgICAgICAgICAgICBkZXZpY2UuCi0gICAgICBjaGVjazogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBjaGVjayB0aGF0IHRoZSBwcm9wZXJ0eSB3YXMKLSAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgc2V0IG9uIHRoZSBkZXZpY2UuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kRmFpbGVkRXJyb3IgaWYgY2hlY2sgaXMgdHJ1ZSBhbmQgdGhlIHByb3BlcnR5IHdhcyBub3QgY29ycmVjdGx5Ci0gICAgICAgIHNldCBvbiB0aGUgZGV2aWNlIChlLmcuIGJlY2F1c2UgaXQgaXMgbm90IHJvb3RlZCkuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuR2V0QUJJCi0KLUdldHMgdGhlIGRldmljZSBtYWluIEFCSS4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIGRldmljZSdzIG1haW4gQUJJIG5hbWUuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuR2V0UGlkcwotCi1SZXR1cm5zIHRoZSBQSURzIG9mIHByb2Nlc3NlcyBjb250YWluaW5nIHRoZSBnaXZlbiBuYW1lIGFzIHN1YnN0cmluZy4KLWBgYAotICAgIE5vdGUgdGhhdCB0aGUgfHByb2Nlc3NfbmFtZXwgaXMgb2Z0ZW4gdGhlIHBhY2thZ2UgbmFtZS4KLQotICAgIEFyZ3M6Ci0gICAgICBwcm9jZXNzX25hbWU6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3MgbmFtZSB0byBnZXQgdGhlIFBJRHMgZm9yLgotICAgICAgICAgICAgICAgICAgICBJZiBtaXNzaW5nIHJldHVybnMgUElEcyBmb3IgYWxsIHByb2Nlc3Nlcy4KLSAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICAgICAgcmV0cmllczogbnVtYmVyIG9mIHJldHJpZXMKLQotICAgIFJldHVybnM6Ci0gICAgICBBIGRpY3QgbWFwcGluZyBwcm9jZXNzIG5hbWUgdG8gYSBsaXN0IG9mIFBJRHMgZm9yIGVhY2ggcHJvY2VzcyB0aGF0Ci0gICAgICBjb250YWluZWQgdGhlIHByb3ZpZGVkIHxwcm9jZXNzX25hbWV8LgotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZFRpbWVvdXRFcnJvciBvbiB0aW1lb3V0LgotICAgICAgRGV2aWNlVW5yZWFjaGFibGVFcnJvciBvbiBtaXNzaW5nIGRldmljZS4KLWBgYAotCi0KLSMjIyBEZXZpY2VVdGlscy5HZXRMb2djYXRNb25pdG9yCi0KLVJldHVybnMgYSBuZXcgTG9nY2F0TW9uaXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCi1gYGAKLSAgICBQYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8KLSAgICB8bG9nY2F0X21vbml0b3IuTG9nY2F0TW9uaXRvcnwgYW5kIGFyZSBkb2N1bWVudGVkIHRoZXJlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLkdldEVuZm9yY2UKLQotR2V0IHRoZSBjdXJyZW50IG1vZGUgb2YgU0VMaW51eC4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSAoZW5mb3JjaW5nKSwgRmFsc2UgKHBlcm1pc3NpdmUpLCBvciBOb25lIChkaXNhYmxlZCkuCi0KLSAgICBSYWlzZXM6Ci0gICAgICBDb21tYW5kRmFpbGVkRXJyb3Igb24gZmFpbHVyZS4KLSAgICAgIENvbW1hbmRUaW1lb3V0RXJyb3Igb24gdGltZW91dC4KLSAgICAgIERldmljZVVucmVhY2hhYmxlRXJyb3Igb24gbWlzc2luZyBkZXZpY2UuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuU2V0RW5mb3JjZQotCi1Nb2RpZnkgdGhlIG1vZGUgU0VMaW51eCBpcyBydW5uaW5nIGluLgotYGBgCi0gICAgQXJnczoKLSAgICAgIGVuYWJsZWQ6IGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcHV0IFNFTGludXggaW4gZW5jb3JjaW5nIG1vZGUKLSAgICAgICAgICAgICAgIChpZiBUcnVlKSwgb3IgcGVybWlzc2l2ZSBtb2RlIChvdGhlcndpc2UpLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIG9uIGZhaWx1cmUuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLlRha2VTY3JlZW5zaG90Ci0KLVRha2VzIGEgc2NyZWVuc2hvdCBvZiB0aGUgZGV2aWNlLgotYGBgCi0gICAgQXJnczoKLSAgICAgIGhvc3RfcGF0aDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0aCBvbiB0aGUgaG9zdCB0byBzYXZlIHRoZQotICAgICAgICAgICAgICAgICBzY3JlZW5zaG90IHRvLiBJZiBOb25lLCBhIGZpbGUgbmFtZSBpbiB0aGUgY3VycmVudAotICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2lsbCBiZSBnZW5lcmF0ZWQuCi0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgVGhlIG5hbWUgb2YgdGhlIGZpbGUgb24gdGhlIGhvc3QgdG8gd2hpY2ggdGhlIHNjcmVlbnNob3Qgd2FzIHNhdmVkLgotCi0gICAgUmFpc2VzOgotICAgICAgQ29tbWFuZEZhaWxlZEVycm9yIG9uIGZhaWx1cmUuCi0gICAgICBDb21tYW5kVGltZW91dEVycm9yIG9uIHRpbWVvdXQuCi0gICAgICBEZXZpY2VVbnJlYWNoYWJsZUVycm9yIG9uIG1pc3NpbmcgZGV2aWNlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLkRpc21pc3NDcmFzaERpYWxvZ0lmTmVlZGVkCi0KLURpc21pc3MgdGhlIGVycm9yL0FOUiBkaWFsb2cgaWYgcHJlc2VudC4KLWBgYAotICAgIFJldHVybnM6IE5hbWUgb2YgdGhlIGNyYXNoZWQgcGFja2FnZSBpZiBhIGRpYWxvZyBpcyBmb2N1c2VkLAotICAgICAgICAgICAgIE5vbmUgb3RoZXJ3aXNlLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLkdldENsaWVudENhY2hlCi0KLVJldHVybnMgY2xpZW50IGNhY2hlLgotIyMjIERldmljZVV0aWxzLkxvYWRDYWNoZURhdGEKLQotSW5pdGlhbGl6ZXMgdGhlIGNhY2hlIGZyb20gZGF0YSBjcmVhdGVkIHVzaW5nIER1bXBDYWNoZURhdGEuCi1gYGAKLSAgICBUaGUgY2FjaGUgaXMgdXNlZCBvbmx5IGlmIGl0cyB0b2tlbiBtYXRjaGVzIHRoZSBvbmUgZm91bmQgb24gdGhlIGRldmljZS4KLSAgICBUaGlzIHByZXZlbnRzIGEgc3RhbGUgY2FjaGUgZnJvbSBiZWluZyB1c2VkICh3aGljaCBjYW4gaGFwcGVuIHdoZW4gc2hhcmluZwotICAgIGRldmljZXMpLgotCi0gICAgQXJnczoKLSAgICAgIGRhdGE6IEEgcHJldmlvdXNseSBzZXJpYWxpemVkIGNhY2hlIChzdHJpbmcpLgotICAgICAgdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gICAgICByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcwotCi0gICAgUmV0dXJuczoKLSAgICAgIFdoZXRoZXIgdGhlIGNhY2hlIHdhcyBsb2FkZWQuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuRHVtcENhY2hlRGF0YQotCi1EdW1wcyB0aGUgY3VycmVudCBjYWNoZSBzdGF0ZSB0byBhIHN0cmluZy4KLWBgYAotICAgIEFyZ3M6Ci0gICAgICB0aW1lb3V0OiB0aW1lb3V0IGluIHNlY29uZHMKLSAgICAgIHJldHJpZXM6IG51bWJlciBvZiByZXRyaWVzCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBzZXJpYWxpemVkIGNhY2hlIGFzIGEgc3RyaW5nLgotYGBgCi0KLQotIyMjIERldmljZVV0aWxzLlJlc3RhcnRBZGJkCi0KLSMjIyBEZXZpY2VVdGlscy5HcmFudFBlcm1pc3Npb25zCi0KLSMjIyBEZXZpY2VVdGlscy5Jc1NjcmVlbk9uCi0KLURldGVybWluZXMgaWYgc2NyZWVuIGlzIG9uLgotYGBgCi0gICAgRHVtcHN5cyBpbnB1dF9tZXRob2QgZXhwb3NlcyBzY3JlZW4gb24vb2ZmIHN0YXRlLiBCZWxvdyBpcyBhbiBleHBsaW5hdGlvbiBvZgotICAgIHRoZSBzdGF0ZXMuCi0KLSAgICBQcmUtTDoKLSAgICAgIE9uOiBtU2NyZWVuT249dHJ1ZQotICAgICAgT2ZmOiBtU2NyZWVuT249ZmFsc2UKLSAgICBMKzoKLSAgICAgIE9uOiBtSW50ZXJhY3RpdmU9dHJ1ZQotICAgICAgT2ZmOiBtSW50ZXJhY3RpdmU9ZmFsc2UKLQotICAgIFJldHVybnM6Ci0gICAgICBUcnVlIGlmIHNjcmVlbiBpcyBvbiwgZmFsc2UgaWYgaXQgaXMgb2ZmLgotCi0gICAgUmFpc2VzOgotICAgICAgZGV2aWNlX2Vycm9ycy5Db21tYW5kRmFpbGVkRXJyb3I6IElmIHNjcmVlbiBzdGF0ZSBjYW5ub3QgYmUgZm91bmQuCi1gYGAKLQotCi0jIyMgRGV2aWNlVXRpbHMuU2V0U2NyZWVuCi0KLVR1cm5zIHNjcmVlbiBvbiBhbmQgb2ZmLgotYGBgCi0gICAgQXJnczoKLSAgICAgIG9uOiBib29sIHRvIGRlY2lkZSBzdGF0ZSB0byBzd2l0Y2ggdG8uIFRydWUgPSBvbiBGYWxzZSA9IG9mZi4KLWBgYAotCi0KLSMjIyBHZXRBVkRzCi0KLVJldHVybnMgYSBsaXN0IG9mIEFuZHJvaWQgVmlydHVhbCBEZXZpY2VzLgotYGBgCi0gIFJldHVybnM6Ci0gICAgQSBsaXN0IGNvbnRhaW5pbmcgdGhlIGNvbmZpZ3VyZWQgQVZEcy4KLWBgYAotCi0KLSMjIyBSZXN0YXJ0U2VydmVyCi0KLVJlc3RhcnRzIHRoZSBhZGIgc2VydmVyLgotYGBgCi0gIFJhaXNlczoKLSAgICBDb21tYW5kRmFpbGVkRXJyb3IgaWYgd2UgZmFpbCB0byBraWxsIG9yIHJlc3RhcnQgdGhlIHNlcnZlci4KLWBgYAotCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RvY3MvbWFya2Rvd24ubWQgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kb2NzL21hcmtkb3duLm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTdkYmE3Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL2RvY3MvbWFya2Rvd24ubWQKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotIyBbZGV2aWwudXRpbHMubWFya2Rvd25dKGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRhcHVsdC1wcm9qZWN0L2NhdGFwdWx0L2Jsb2IvbWFzdGVyL2RldmlsL2RldmlsL3V0aWxzL21hcmtkb3duLnB5KQotCi0qVGhpcyBwYWdlIHdhcyBhdXRvZ2VuZXJhdGVkIGJ5IGBkZXZpbC91dGlscy9tYXJrZG93bi5weSAtLW1vZHVsZS1saW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRhcHVsdC1wcm9qZWN0L2NhdGFwdWx0L2Jsb2IvbWFzdGVyL2RldmlsL2RldmlsL3V0aWxzL21hcmtkb3duLnB5YCoKLQotIyMgTWFya2Rvd25IZWxwQWN0aW9uCi0KLSMjIyBNYXJrZG93bkhlbHBBY3Rpb24uXF9cX2luaXRcX1xfCi0KLSMjIyBNYXJrZG93bkhlbHBBY3Rpb24uXF9cX2NhbGxcX1xfCi0KLSMjIE1hcmtkb3duSGVscEZvcm1hdHRlcgotCi1BIHJlYWxseSBiYXJlLWJvbmVzIGFyZ3BhcnNlIGhlbHAgZm9ybWF0dGVyIHRoYXQgZ2VuZXJhdGVzIHZhbGlkIG1hcmtkb3duLgotYGBgCi0gIFRoaXMgd2lsbCBnZW5lcmF0ZSBzb21ldGhpbmcgbGlrZToKLQotICB1c2FnZQotCi0gICMgKipzZWN0aW9uIGhlYWRpbmcqKjoKLQotICAjIyAqKi0tYXJndW1lbnQtb25lKioKLQotICBcYFxgXGAKLSAgYXJndW1lbnQtb25lIGhlbHAgdGV4dAotICBcYFxgXGAKLQotYGBgCi0KLQotIyMjIE1hcmtkb3duSGVscEZvcm1hdHRlci5mb3JtYXRcX2hlbHAKLQotIyMjIE1hcmtkb3duSGVscEZvcm1hdHRlci5zdGFydFxfc2VjdGlvbgotCi0jIyMgbWRcX2JvbGQKLQotUmV0dXJucyBtYXJrZG93bi1mb3JtYXR0ZWQgYm9sZCB0ZXh0LgotIyMjIG1kXF9jb2RlCi0KLVJldHVybnMgYSBtYXJrZG93bi1mb3JtYXR0ZWQgY29kZSBibG9jayBpbiB0aGUgZ2l2ZW4gbGFuZ3VhZ2UuCi0jIyMgbWRcX2VzY2FwZQotCi1Fc2NhcGVzIFwqIGFuZCBcXy4KLSMjIyBtZFxfaGVhZGluZwotCi1SZXR1cm5zIG1hcmtkb3duLWZvcm1hdHRlZCBoZWFkaW5nLgotIyMjIG1kXF9pbmxpbmVcX2NvZGUKLQotUmV0dXJucyBtYXJrZG93bi1mb3JtYXR0ZWQgaW5saW5lIGNvZGUuCi0jIyMgbWRcX2l0YWxpYwotCi1SZXR1cm5zIG1hcmtkb3duLWZvcm1hdHRlZCBpdGFsaWMgdGV4dC4KLSMjIyBtZFxfbGluawotCi1yZXR1cm5zIGEgbWFya2Rvd24tZm9ybWF0dGVkIGxpbmsuCi0jIyMgYWRkXF9tZFxfaGVscFxfYXJndW1lbnQKLQotQWRkcyAtLW1kLWhlbHAgdG8gdGhlIGdpdmVuIGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLgotYGBgCi0gIFJ1bm5pbmcgYSBzY3JpcHQgd2l0aCAtLW1kLWhlbHAgd2lsbCBwcmludCB0aGUgaGVscCB0ZXh0IGZvciB0aGF0IHNjcmlwdAotICBhcyB2YWxpZCBtYXJrZG93bi4KLQotICBBcmdzOgotICAgIHBhcnNlcjogVGhlIEFyZ3VtZW50UGFyc2VyIHRvIHdoaWNoIC0tbWQtaGVscCBzaG91bGQgYmUgYWRkZWQuCi1gYGAKLQotCi0jIyMgbG9hZFxfbW9kdWxlXF9mcm9tXF9wYXRoCi0KLUxvYWQgYSBtb2R1bGUgZ2l2ZW4gb25seSB0aGUgcGF0aCBuYW1lLgotYGBgCi0gIEFsc28gbG9hZHMgcGFja2FnZSBtb2R1bGVzIGFzIG5lY2Vzc2FyeS4KLQotICBBcmdzOgotICAgIG1vZHVsZV9wYXRoOiBBbiBhYnNvbHV0ZSBwYXRoIHRvIGEgcHl0aG9uIG1vZHVsZS4KLSAgUmV0dXJuczoKLSAgICBUaGUgbW9kdWxlIG9iamVjdCBmb3IgdGhlIGdpdmVuIHBhdGguCi1gYGAKLQotCi0jIyMgbWRcX21vZHVsZQotCi1Xcml0ZSBtYXJrZG93biBkb2N1bWVudGF0aW9uIGZvciBhIGNsYXNzLgotYGBgCi0gIERvY3VtZW50cyBwdWJsaWMgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLgotCi0gIEFyZ3M6Ci0gICAgY2xhc3Nfb2JqOiBhIHR5cGVzLlR5cGVUeXBlIG9iamVjdCBmb3IgdGhlIGNsYXNzIHRoYXQgc2hvdWxkIGJlCi0gICAgICBkb2N1bWVudGVkLgotICBSZXR1cm5zOgotICAgIEEgbGlzdCBvZiBtYXJrZG93bi1mb3JtYXR0ZWQgbGluZXMuCi1gYGAKLQotCi0jIyMgbWRcX2NsYXNzCi0KLVdyaXRlIG1hcmtkb3duIGRvY3VtZW50YXRpb24gZm9yIGEgY2xhc3MuCi1gYGAKLSAgRG9jdW1lbnRzIHB1YmxpYyBtZXRob2RzLiBEb2VzIG5vdCBjdXJyZW50bHkgZG9jdW1lbnQgc3ViY2xhc3Nlcy4KLQotICBBcmdzOgotICAgIGNsYXNzX29iajogYSB0eXBlcy5UeXBlVHlwZSBvYmplY3QgZm9yIHRoZSBjbGFzcyB0aGF0IHNob3VsZCBiZQotICAgICAgZG9jdW1lbnRlZC4KLSAgUmV0dXJuczoKLSAgICBBIGxpc3Qgb2YgbWFya2Rvd24tZm9ybWF0dGVkIGxpbmVzLgotYGBgCi0KLQotIyMjIG1kXF9kb2NzdHJpbmcKLQotV3JpdGUgYSBtYXJrZG93bi1mb3JtYXR0ZWQgZG9jc3RyaW5nLgotYGBgCi0gIFJldHVybnM6Ci0gICAgQSBsaXN0IG9mIG1hcmtkb3duLWZvcm1hdHRlZCBsaW5lcy4KLWBgYAotCi0KLSMjIyBtZFxfZnVuY3Rpb24KLQotV3JpdGUgbWFya2Rvd24gZG9jdW1lbnRhdGlvbiBmb3IgYSBmdW5jdGlvbi4KLWBgYAotICBBcmdzOgotICAgIGZ1bmNfb2JqOiBhIHR5cGVzLkZ1bmN0aW9uVHlwZSBvYmplY3QgZm9yIHRoZSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZQotICAgICAgZG9jdW1lbnRlZC4KLSAgUmV0dXJuczoKLSAgICBBIGxpc3Qgb2YgbWFya2Rvd24tZm9ybWF0dGVkIGxpbmVzLgotYGBgCi0KLQotIyMjIG1haW4KLQotV3JpdGUgbWFya2Rvd24gZG9jdW1lbnRhdGlvbiBmb3IgdGhlIG1vZHVsZSBhdCB0aGUgcHJvdmlkZWQgcGF0aC4KLWBgYAotICBBcmdzOgotICAgIHJhd19hcmdzOiB0aGUgcmF3IGNvbW1hbmQtbGluZSBhcmdzLiBVc3VhbGx5IHN5cy5hcmd2WzE6XS4KLSAgUmV0dXJuczoKLSAgICBBbiBpbnRlZ2VyIGV4aXQgY29kZS4gMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCi1gYGAKLQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kb2NzL3BlcnNpc3RlbnRfZGV2aWNlX2xpc3QubWQgYi9zeXN0cmFjZS9jYXRhcHVsdC9kZXZpbC9kb2NzL3BlcnNpc3RlbnRfZGV2aWNlX2xpc3QubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNmE4NzguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvZG9jcy9wZXJzaXN0ZW50X2RldmljZV9saXN0Lm1kCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPCEtLSBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgICAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotICAgICBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLS0+Ci0KLSMgRGV2aWw6IFBlcnNpc3RlbnQgRGV2aWNlIExpc3QKLQotIyMgV2hhdCBpcyBpdD8KLQotQSBwZXJzaXN0ZW50IGRldmljZSBsaXN0IHRoYXQgc3RvcmVzIGFsbCBleHBlY3RlZCBkZXZpY2VzIGJldHdlZW4gYnVpbGRzLiBJdAotaXMgdXNlZCBieSBub24tc3dhcm1lZCBib3RzIHRvIGRldGVjdCBhbnkgbWlzc2luZy9leHRyYSBkZXZpY2VzIGF0dGFjaGVkIHRvCi10aGVtLgotCi1UaGlzIHdpbGwgYmUgbm8gbG9uZ2VyIG5lZWRlZCB3aGVuIGFsbCBib3RzIGFyZSBzd2l0Y2hlZCBvdmVyIHRvIHN3YXJtaW5nLgotCi0jIyBCb3RzCi0KLVRoZSBsaXN0IGlzIHVzdWFsbHkgbG9jYXRlZCBhdDoKLQotICAtIGB+Ly5hbmRyb2lkL2tub3duX2RldmljZXMuanNvbmAuCi0KLUxvb2sgYXQgcmVjaXBlcyBsaXN0ZWQgYmVsb3cgaW4gb3JkZXIgdG8gZmluZCBtb3JlIHVwIHRvIGRhdGUgbG9jYXRpb24uCi0KLSMjIExvY2FsIFJ1bnMKLQotVGhlIHBlcnNpc3RlbnQgZGV2aWNlIGxpc3QgaXMgdW5uZWNlc3NhcnkgZm9yIGxvY2FsIHJ1bnMuIEl0IGlzIG9ubHkgdXNlZCBvbiB0aGUKLWJvdHMgdGhhdCB1cGxvYWQgZGF0YSB0byB0aGUgcGVyZiBkYXNoYm9hcmQuCi0KLSMjIFdoZXJlIGl0IGlzIHVzZWQKLQotVGhlIHBlcnNpc3RlbnQgZGV2aWNlIGxpc3QgaXMgdXNlZCBpbiB0aGUKLVtjaHJvbWl1bV9hbmRyb2lkXShodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9idWlsZC9zY3JpcHRzL3NsYXZlL3JlY2lwZV9tb2R1bGVzL2Nocm9taXVtX2FuZHJvaWQvYXBpLnB5P3E9a25vd25fZGV2aWNlc19maWxlKQotcmVjaXBlIG1vZHVsZSwgYW5kIGNvbnN1bWVkIGJ5IHRoZQotW2RldmljZV9zdGF0dXMucHldKGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy90aGlyZF9wYXJ0eS9jYXRhcHVsdC9kZXZpbC9kZXZpbC9hbmRyb2lkL3Rvb2xzL2RldmljZV9zdGF0dXMucHk/cT1cLVwta25vd24lNUMtZGV2aWNlcyU1Qy1maWxlKQotc2NyaXB0IGFtb25nIG90aGVycy4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L2RldmlsL3B5bGludHJjIGIvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvcHlsaW50cmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMDI0YTIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvZGV2aWwvcHlsaW50cmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi1bTUVTU0FHRVMgQ09OVFJPTF0KLQotIyBEaXNhYmxlIHRoZSBtZXNzYWdlLCByZXBvcnQsIGNhdGVnb3J5IG9yIGNoZWNrZXIgd2l0aCB0aGUgZ2l2ZW4gaWQocykuCi0jIFRPRE86IFNocmluayB0aGlzIGxpc3QgdG8gYXMgc21hbGwgYXMgcG9zc2libGUuCi1kaXNhYmxlPQotICBkZXNpZ24sCi0gIHNpbWlsYXJpdGllcywKLQotICBiYWQtY29udGludWF0aW9uLAotICBmaXhtZSwKLSAgaW1wb3J0LWVycm9yLAotICBpbnZhbGlkLW5hbWUsCi0gIGxvY2FsbHktZGlzYWJsZWQsCi0gIGxvY2FsbHktZW5hYmxlZCwKLSAgbWlzc2luZy1kb2NzdHJpbmcsCi0gIHN0YXItYXJncywKLQotCi1bUkVQT1JUU10KLQotIyBEb24ndCB3cml0ZSBvdXQgZnVsbCByZXBvcnRzLCBqdXN0IG1lc3NhZ2VzLgotcmVwb3J0cz1ubwotCi0KLVtCQVNJQ10KLQotIyBSZWd1bGFyIGV4cHJlc3Npb24gd2hpY2ggc2hvdWxkIG9ubHkgbWF0Y2ggY29ycmVjdCBmdW5jdGlvbiBuYW1lcy4KLWZ1bmN0aW9uLXJneD1eKD86KD9QPGV4ZW1wdD5zZXRVcHx0ZWFyRG93bnxzZXRVcE1vZHVsZXx0ZWFyRG93bk1vZHVsZSl8KD9QPGNhbWVsX2Nhc2U+Xz9bQS1aXVthLXpBLVowLTldKikpJAotCi0jIFJlZ3VsYXIgZXhwcmVzc2lvbiB3aGljaCBzaG91bGQgb25seSBtYXRjaCBjb3JyZWN0IG1ldGhvZCBuYW1lcy4KLW1ldGhvZC1yZ3g9Xig/Oig/UDxleGVtcHQ+X1thLXowLTlfXStfX3xnZXR8cG9zdHxydW5UZXN0fHNldFVwfHRlYXJEb3dufHNldFVwVGVzdENhc2V8dGVhckRvd25UZXN0Q2FzZXxzZXR1cFNlbGZ8dGVhckRvd25DbGFzc3xzZXRVcENsYXNzKXwoP1A8Y2FtZWxfY2FzZT4oX3swLDJ9fHRlc3R8YXNzZXJ0KVtBLVpdW2EtekEtWjAtOV9dKikpJAotCi0jIFJlZ3VsYXIgZXhwcmVzc2lvbiB3aGljaCBzaG91bGQgb25seSBtYXRjaCBjb3JyZWN0IGFyZ3VtZW50IG5hbWVzLgotYXJndW1lbnQtcmd4PV5bYS16XVthLXowLTlfXSokCi0KLSMgUmVndWxhciBleHByZXNzaW9uIHdoaWNoIHNob3VsZCBvbmx5IG1hdGNoIGNvcnJlY3QgdmFyaWFibGUgbmFtZXMuCi12YXJpYWJsZS1yZ3g9XlthLXpdW2EtejAtOV9dKiQKLQotIyBHb29kIHZhcmlhYmxlIG5hbWVzIHdoaWNoIHNob3VsZCBhbHdheXMgYmUgYWNjZXB0ZWQsIHNlcGFyYXRlZCBieSBhIGNvbW1hLgotZ29vZC1uYW1lcz1tYWluLF8KLQotIyBMaXN0IG9mIGJ1aWx0aW5zIGZ1bmN0aW9uIG5hbWVzIHRoYXQgc2hvdWxkIG5vdCBiZSB1c2VkLCBzZXBhcmF0ZWQgYnkgYSBjb21tYS4KLWJhZC1mdW5jdGlvbnM9YXBwbHksaW5wdXQscmVkdWNlCi0KLQotW1ZBUklBQkxFU10KLQotIyBUZWxscyB3ZXRoZXIgd2Ugc2hvdWxkIGNoZWNrIGZvciB1bnVzZWQgaW1wb3J0IGluIF9faW5pdF9fIGZpbGVzLgotaW5pdC1pbXBvcnQ9bm8KLQotIyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBuYW1lcyB1c2VkIGZvciBkdW1teSB2YXJpYWJsZXMgKGkuZS4gbm90IHVzZWQpLgotZHVtbXktdmFyaWFibGVzLXJneD1eXy4qJHxkdW1teQotCi0KLVtUWVBFQ0hFQ0tdCi0KLSMgVGVsbHMgd2V0aGVyIG1pc3NpbmcgbWVtYmVycyBhY2Nlc3NlZCBpbiBtaXhpbiBjbGFzcyBzaG91bGQgYmUgaWdub3JlZC4gQQotIyBtaXhpbiBjbGFzcyBpcyBkZXRlY3RlZCBpZiBpdHMgbmFtZSBlbmRzIHdpdGggIm1peGluIiAoY2FzZSBpbnNlbnNpdGl2ZSkuCi1pZ25vcmUtbWl4aW4tbWVtYmVycz15ZXMKLQotCi1bRk9STUFUXQotCi0jIE1heGltdW0gbnVtYmVyIG9mIGxpbmVzIGluIGEgbW9kdWxlLgotbWF4LW1vZHVsZS1saW5lcz0xMDAwMAotCi0jIFdlIHVzZSB0d28gc3BhY2VzIGZvciBpbmRlbnRzLCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBmb3VyIHNwYWNlcyBvciB0YWIuCi1pbmRlbnQtc3RyaW5nPScgICcKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL1BSRVNVQk1JVC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL1BSRVNVQk1JVC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIzNGE4ZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9QUkVTVUJNSVQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLQotZGVmIENoZWNrQ2hhbmdlT25VcGxvYWQoaW5wdXRfYXBpLCBvdXRwdXRfYXBpKToKLSAgcmV0dXJuIF9Db21tb25DaGVja3MoaW5wdXRfYXBpLCBvdXRwdXRfYXBpKQotCi0KLWRlZiBDaGVja0NoYW5nZU9uQ29tbWl0KGlucHV0X2FwaSwgb3V0cHV0X2FwaSk6Ci0gIHJldHVybiBfQ29tbW9uQ2hlY2tzKGlucHV0X2FwaSwgb3V0cHV0X2FwaSkKLQotCi1kZWYgX0NvbW1vbkNoZWNrcyhpbnB1dF9hcGksIG91dHB1dF9hcGkpOgotICByZXN1bHRzID0gW10KLSAgcmVzdWx0cyArPSBpbnB1dF9hcGkuUnVuVGVzdHMoaW5wdXRfYXBpLmNhbm5lZF9jaGVja3MuR2V0UHlsaW50KAotICAgICAgaW5wdXRfYXBpLCBvdXRwdXRfYXBpLCBleHRyYV9wYXRoc19saXN0PV9HZXRQYXRoc1RvUHJlcGVuZChpbnB1dF9hcGkpLAotICAgICAgcHlsaW50cmM9J3B5bGludHJjJykpCi0gIHJldHVybiByZXN1bHRzCi0KLQotZGVmIF9HZXRQYXRoc1RvUHJlcGVuZChpbnB1dF9hcGkpOgotICBwcm9qZWN0X2RpciA9IGlucHV0X2FwaS5QcmVzdWJtaXRMb2NhbFBhdGgoKQotICBjYXRhcHVsdF9kaXIgPSBpbnB1dF9hcGkub3NfcGF0aC5qb2luKHByb2plY3RfZGlyLCAnLi4nKQotICByZXR1cm4gWwotICAgICAgcHJvamVjdF9kaXIsCi0KLSAgICAgIGlucHV0X2FwaS5vc19wYXRoLmpvaW4oY2F0YXB1bHRfZGlyLCAnY29tbW9uJywgJ2JhdHRvcicpLAotICAgICAgaW5wdXRfYXBpLm9zX3BhdGguam9pbihjYXRhcHVsdF9kaXIsICdjb21tb24nLCAncHlfdHJhY2VfZXZlbnQnKSwKLSAgICAgIGlucHV0X2FwaS5vc19wYXRoLmpvaW4oY2F0YXB1bHRfZGlyLCAnY29tbW9uJywgJ3B5X3V0aWxzJyksCi0gICAgICBpbnB1dF9hcGkub3NfcGF0aC5qb2luKGNhdGFwdWx0X2RpciwgJ2RldmlsJyksCi0gICAgICBpbnB1dF9hcGkub3NfcGF0aC5qb2luKGNhdGFwdWx0X2RpciwgJ3RlbGVtZXRyeScpLAotICAgICAgaW5wdXRfYXBpLm9zX3BhdGguam9pbihjYXRhcHVsdF9kaXIsICd0aGlyZF9wYXJ0eScsICdtb2NrJyksCi0gICAgICBpbnB1dF9hcGkub3NfcGF0aC5qb2luKGNhdGFwdWx0X2RpciwgJ3RyYWNpbmcnKSwKLQotICBdCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9SRUFETUUubWQgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9SRUFETUUubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYTkyNDkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPCEtLSBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgICAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotICAgICBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLS0+Ci1TeXN0cmFjZQotPT09PT09PT0KLQotU3lzdHJhY2UgcHJvdmlkZXMgY29tbWFuZC1saW5lIHRvb2xzIHRvIGFuYWx5emUgdGhlIHBlcmZvcm1hbmNlIG9mIHlvdXIKLWFwcGxpY2F0aW9uLiBJdCBjdXJyZW50bHkgaW5jbHVkZXMKLVtBbmRyb2lkIFN5c3RyYWNlXShodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3Rvb2xzL2hlbHAvc3lzdHJhY2UuaHRtbCkuCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL1JFQURNRS5tZCBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvUkVBRE1FLm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWZkNjUxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCEtLSBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgICAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotICAgICBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLS0+Ci1hdHJhY2VfaGVscGVyIGlzIGFuIG9wdGlvbmFsIGJpbmFyeSB3aGljaCBjYW4gYmUgcHVzaGVkIG9udG8gdGhlIGRldmljZSBydW5uaW5nCi1zeXN0cmFjZSBpbiBvcmRlciB0byBlbnJpY2ggdGhlIHRyYWNlcyB3aXRoIGZ1cnRoZXIgZGV0YWlscyAobWVtb3J5LCBJL08sIGV0YykuCi0KLVdoaWNoIHByb2JsZW0gaXMgaXQgc29sdmluZz8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU29tZSBuaWNlLXRvLWhhdmUgZGV0YWlscyBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHN5c3RyYWNlLCBzcGVjaWZpY2FsbHk6Ci0gLSBNZW1vcnkgc25hcHNob3RzIG9mIHJ1bm5pbmcgcHJvY2Vzc2VzIChQU1MvUlNTKS4KLSAtIFBlcmlvZGljIHNuYXBzaG90dGluZyBvZiBwcm9jZXNzZXMgYW5kIHRocmVhZCBuYW1lcy4KLSAtIEZpbGUgcGF0aHMgZm9yIGZpbGVzeXN0ZW0gZXZlbnRzICh0b2RheSB0aGV5IHJlcG9ydCBvbmx5IGlub2RlIG51bWJlcnMpLgotCi1Ib3cgaXMgaXQgc29sdmluZyBpdD8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYXRyYWNlX2hlbHBlciBpcyBhIHNtYWxsIHVzZXJzcGFjZSBiaW5hcnkgd2hpY2ggaXMgbWVhbnQgdG8gYmUgcHVzaGVkIG9uIHRoZQotZGV2aWNlIGFuZCBydW4gdG9nZXRoZXIgd2l0aCBhdHJhY2UgYnkgYSBkZWRpY2F0ZWQgdHJhY2luZyBhZ2VudC4gV2hlbiBzdG9wcGVkLAotdGhlIGhlbHBlciBwcm9kdWNlcyBhIEpTT04gZmlsZSB3aGljaCBjb250YWlucyBhbGwgdGhlIHJlbGV2YW50IGRldGFpbHMKLShzZWUgLS1oZWxwKS4gVGhlIEpTT04gZmlsZSBpcyBjb25zdW1lZCBieSB0aGUgVHJhY2VWaWV3ZXIgaW1wb3J0ZXJzIGFuZCB0aGUKLWV4dHJhIGRldGFpbHMgYXJlIG1lcmdlZCBpbnRvIHRoZSBmaW5hbCBtb2RlbC4KLQotQnVpbGQgaW5zdHJ1Y3Rpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0KLUJ1aWxkaW5nIHRoZSBiaW5hcnkgcmVxdWlyZXMgdGhlIEFuZHJvaWQgTkRLIHRvIGJlIGluc3RhbGxlZC4gU2VlCi1bQW5kcm9pZCBOREsgcGFnZV0oaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vbmRrKS4KLU9uY2UgaW5zdGFsbGVkIHRoZSBiaW5hcnkgY2FuIGJlIGp1c3QgYnVpbHQgYXMgZm9sbG93czoKLWAkKE5ES19IT01FKS9uZGstYnVpbGRgCi1UaGUgYmluYXJ5IHdpbGwgYmUgYnVpbHQgaW4gYGxpYnMvYXJtZWFiaS12N2EvYApkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvQXBwbGljYXRpb24ubWsgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9BcHBsaWNhdGlvbi5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MyZWI2Ny4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9BcHBsaWNhdGlvbi5taworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1BUFBfQUJJIDo9IGFybWVhYmktdjdhCi1BUFBfUExBVEZPUk0gOj0gYW5kcm9pZC0yMQotQVBQX1NUTCA6PSBjKytfc3RhdGljCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9hdHJhY2VfcHJvY2Vzc19kdW1wLmNjIGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvYXRyYWNlX3Byb2Nlc3NfZHVtcC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY3MmY3OC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9hdHJhY2VfcHJvY2Vzc19kdW1wLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjUwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImF0cmFjZV9wcm9jZXNzX2R1bXAuaCIKLQotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0jaW5jbHVkZSA8bGltaXRzPgotCi0jaW5jbHVkZSAiZmlsZV91dGlscy5oIgotI2luY2x1ZGUgImxvZ2dpbmcuaCIKLSNpbmNsdWRlICJwcm9jZnNfdXRpbHMuaCIKLQotbmFtZXNwYWNlIHsKLQotY29uc3QgaW50IGtNZW1JbmZvSW50ZXJ2YWxNcyA9IDEwMDsgIC8vIDEwMG1zLWlzaC4KLQotfSAgLy8gbmFtZXNwYWNlCi0KLUF0cmFjZVByb2Nlc3NEdW1wOjpBdHJhY2VQcm9jZXNzRHVtcCgpIHsKLSAgc2VsZl9waWRfID0gc3RhdGljX2Nhc3Q8aW50PihnZXRwaWQoKSk7Ci19Ci0KLUF0cmFjZVByb2Nlc3NEdW1wOjp+QXRyYWNlUHJvY2Vzc0R1bXAoKSB7Ci19Ci0KLXZvaWQgQXRyYWNlUHJvY2Vzc0R1bXA6OlNldER1bXBJbnRlcnZhbChpbnQgaW50ZXJ2YWxfbXMpIHsKLSAgQ0hFQ0soaW50ZXJ2YWxfbXMgPj0ga01lbUluZm9JbnRlcnZhbE1zKTsKLSAgZHVtcF9pbnRlcnZhbF9pbl90aW1lcl90aWNrc18gPSBpbnRlcnZhbF9tcyAvIGtNZW1JbmZvSW50ZXJ2YWxNczsKLSAgLy8gQXBwcm94aW1hdGVseSBlcXVhbHMgdG8ga01lbUluZm9JbnRlcnZhbE1zLgotICBpbnQgdGlja19pbnRlcnZhbF9tcyA9IGludGVydmFsX21zIC8gZHVtcF9pbnRlcnZhbF9pbl90aW1lcl90aWNrc187Ci0gIHNuYXBzaG90X3RpbWVyXyA9IHN0ZDo6dW5pcXVlX3B0cjx0aW1lX3V0aWxzOjpQZXJpb2RpY1RpbWVyPigKLSAgICAgIG5ldyB0aW1lX3V0aWxzOjpQZXJpb2RpY1RpbWVyKHRpY2tfaW50ZXJ2YWxfbXMpKTsKLX0KLQotdm9pZCBBdHJhY2VQcm9jZXNzRHVtcDo6UnVuQW5kUHJpbnRKc29uKEZJTEUqIHN0cmVhbSkgewotICBvdXRfID0gc3RyZWFtOwotCi0gIGZwcmludGYob3V0XywgIntcInN0YXJ0X3RzXCI6IFwiJWxsdVwiLCBcInNuYXBzaG90c1wiOltcbiIsCi0gICAgICB0aW1lX3V0aWxzOjpHZXRUaW1lc3RhbXAoKSk7Ci0KLSAgQ0hFQ0soc25hcHNob3RfdGltZXJfKTsKLSAgc25hcHNob3RfdGltZXJfLT5TdGFydCgpOwotCi0gIGludCB0aWNrX2NvdW50ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgaWYgKGR1bXBfY291bnRfID4gMCkKLSAgICB0aWNrX2NvdW50ID0gZHVtcF9jb3VudF8gKiBkdW1wX2ludGVydmFsX2luX3RpbWVyX3RpY2tzXzsKLQotICBmb3IgKGludCB0aWNrID0gMDsgdGljayA8IHRpY2tfY291bnQ7IHRpY2srKykgewotICAgIGlmICh0aWNrID4gMCkgewotICAgICAgaWYgKCFzbmFwc2hvdF90aW1lcl8tPldhaXQoKSkKLSAgICAgICAgYnJlYWs7ICAvLyBJbnRlcnJ1cHRlZCBieSBzaWduYWwuCi0gICAgICBmcHJpbnRmKG91dF8sICIsXG4iKTsKLSAgICB9Ci0gICAgVGFrZUFuZFNlcmlhbGl6ZU1lbUluZm8oKTsKLSAgICBpZiAoISh0aWNrICUgZHVtcF9pbnRlcnZhbF9pbl90aW1lcl90aWNrc18pKSB7Ci0gICAgICBmcHJpbnRmKG91dF8sICIsXG4iKTsKLSAgICAgIFRha2VHbG9iYWxTbmFwc2hvdCgpOwotICAgICAgU2VyaWFsaXplU25hcHNob3QoKTsKLSAgICB9Ci0gICAgZmZsdXNoKG91dF8pOwotICB9Ci0KLSAgZnByaW50ZihvdXRfLCAiXSxcbiIpOwotICBTZXJpYWxpemVQZXJzaXN0ZW50UHJvY2Vzc0luZm8oKTsKLSAgZnByaW50ZihvdXRfLCAifVxuIik7Ci0gIGZmbHVzaChvdXRfKTsKLSAgQ2xlYW51cCgpOwotfQotCi12b2lkIEF0cmFjZVByb2Nlc3NEdW1wOjpTdG9wKCkgewotICBDSEVDSyhzbmFwc2hvdF90aW1lcl8pOwotICBzbmFwc2hvdF90aW1lcl8tPlN0b3AoKTsKLX0KLQotdm9pZCBBdHJhY2VQcm9jZXNzRHVtcDo6VGFrZUdsb2JhbFNuYXBzaG90KCkgewotICBzbmFwc2hvdF8uY2xlYXIoKTsKLSAgc25hcHNob3RfdGltZXN0YW1wXyA9IHRpbWVfdXRpbHM6OkdldFRpbWVzdGFtcCgpOwotCi0gIGZpbGVfdXRpbHM6OkZvckVhY2hQaWRJblByb2NQYXRoKCIvcHJvYyIsIFt0aGlzXShpbnQgcGlkKSB7Ci0gICAgLy8gU2tpcCBpZiBub3QgcmVnb2duaXplZCBhcyBhIHByb2Nlc3MuCi0gICAgaWYgKCFVcGRhdGVQZXJzaXN0ZW50UHJvY2Vzc0luZm8ocGlkKSkKLSAgICAgIHJldHVybjsKLSAgICBjb25zdCBQcm9jZXNzSW5mbyogcHJvY2VzcyA9IHByb2Nlc3Nlc19bcGlkXS5nZXQoKTsKLSAgICAvLyBTbmFwc2hvdCBjYW4ndCBiZSBvYnRhaW5lZCBmb3Iga2VybmVsIHdvcmtlcnMuCi0gICAgaWYgKHByb2Nlc3MtPmluX2tlcm5lbCkKLSAgICAgIHJldHVybjsKLQotICAgIFByb2Nlc3NTbmFwc2hvdCogcHJvY2Vzc19zbmFwc2hvdCA9IG5ldyBQcm9jZXNzU25hcHNob3QoKTsKLSAgICBzbmFwc2hvdF9bcGlkXSA9IHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzU25hcHNob3Q+KHByb2Nlc3Nfc25hcHNob3QpOwotCi0gICAgcHJvY2Vzc19zbmFwc2hvdC0+cGlkID0gcGlkOwotICAgIHByb2Nmc191dGlsczo6UmVhZE9vbVN0YXRzKHByb2Nlc3Nfc25hcHNob3QpOwotICAgIHByb2Nmc191dGlsczo6UmVhZFBhZ2VGYXVsdHNBbmRDcHVUaW1lU3RhdHMocHJvY2Vzc19zbmFwc2hvdCk7Ci0KLSAgICBpZiAoU2hvdWxkVGFrZUZ1bGxEdW1wKHByb2Nlc3MpKSB7Ci0gICAgICBwcm9jZXNzX3NuYXBzaG90LT5tZW1vcnkuUmVhZEZ1bGxTdGF0cyhwaWQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcm9jZXNzX3NuYXBzaG90LT5tZW1vcnkuUmVhZExpZ2h0U3RhdHMocGlkKTsKLSAgICB9Ci0gICAgaWYgKGdyYXBoaWNzX3N0YXRzXyAmJiBwcm9jZXNzLT5pc19hcHApIHsKLSAgICAgIHByb2Nlc3Nfc25hcHNob3QtPm1lbW9yeS5SZWFkR3B1U3RhdHMocGlkKTsKLSAgICB9Ci0gIH0pOwotfQotCi1ib29sIEF0cmFjZVByb2Nlc3NEdW1wOjpVcGRhdGVQZXJzaXN0ZW50UHJvY2Vzc0luZm8oaW50IHBpZCkgewotICBpZiAoIXByb2Nlc3Nlc18uY291bnQocGlkKSkgewotICAgIGlmIChwcm9jZnNfdXRpbHM6OlJlYWRUZ2lkKHBpZCkgIT0gcGlkKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHByb2Nlc3Nlc19bcGlkXSA9IHByb2Nmc191dGlsczo6UmVhZFByb2Nlc3NJbmZvKHBpZCk7Ci0gIH0KLSAgUHJvY2Vzc0luZm8qIHByb2Nlc3MgPSBwcm9jZXNzZXNfW3BpZF0uZ2V0KCk7Ci0gIHByb2Nmc191dGlsczo6UmVhZFByb2Nlc3NUaHJlYWRzKHByb2Nlc3MpOwotCi0gIGlmIChmdWxsX2R1bXBfbW9kZV8gPT0gRnVsbER1bXBNb2RlOjprT25seVdoaXRlbGlzdGVkICYmCi0gICAgICBmdWxsX2R1bXBfd2hpdGVsaXN0Xy5jb3VudChwcm9jZXNzLT5uYW1lKSkgewotICAgIGZ1bGxfZHVtcF93aGl0ZWxpc3RlZF9waWRzXy5pbnNlcnQocGlkKTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBdHJhY2VQcm9jZXNzRHVtcDo6U2hvdWxkVGFrZUZ1bGxEdW1wKGNvbnN0IFByb2Nlc3NJbmZvKiBwcm9jZXNzKSB7Ci0gIGlmIChmdWxsX2R1bXBfbW9kZV8gPT0gRnVsbER1bXBNb2RlOjprQWxsUHJvY2Vzc2VzKQotICAgIHJldHVybiAhcHJvY2Vzcy0+aW5fa2VybmVsICYmIChwcm9jZXNzLT5waWQgIT0gc2VsZl9waWRfKTsKLSAgaWYgKGZ1bGxfZHVtcF9tb2RlXyA9PSBGdWxsRHVtcE1vZGU6OmtBbGxKYXZhQXBwcykKLSAgICByZXR1cm4gcHJvY2Vzcy0+aXNfYXBwOwotICBpZiAoZnVsbF9kdW1wX21vZGVfID09IEZ1bGxEdW1wTW9kZTo6a0Rpc2FibGVkKQotICAgIHJldHVybiBmYWxzZTsKLSAgcmV0dXJuIGZ1bGxfZHVtcF93aGl0ZWxpc3RlZF9waWRzXy5jb3VudChwcm9jZXNzLT5waWQpID4gMDsKLX0KLQotdm9pZCBBdHJhY2VQcm9jZXNzRHVtcDo6U2VyaWFsaXplU25hcHNob3QoKSB7Ci0gIGZwcmludGYob3V0XywgIntcInRzXCI6XCIlbGx1XCIsXCJtZW1kdW1wXCI6e1xuIiwgc25hcHNob3RfdGltZXN0YW1wXyk7Ci0gIGZvciAoYXV0byBpdCA9IHNuYXBzaG90Xy5iZWdpbigpOyBpdCAhPSBzbmFwc2hvdF8uZW5kKCk7KSB7Ci0gICAgY29uc3QgUHJvY2Vzc1NuYXBzaG90KiBwcm9jZXNzID0gaXQtPnNlY29uZC5nZXQoKTsKLSAgICBjb25zdCBQcm9jZXNzTWVtb3J5U3RhdHMqIG1lbSA9ICZwcm9jZXNzLT5tZW1vcnk7Ci0gICAgZnByaW50ZihvdXRfLCAiXCIlZFwiOnsiLCBwcm9jZXNzLT5waWQpOwotCi0gICAgZnByaW50ZihvdXRfLCAiXCJ2bVwiOiVsbHUsXCJyc3NcIjolbGx1IiwKLSAgICAgICAgICAgIG1lbS0+dmlydF9rYigpLCBtZW0tPnJzc19rYigpKTsKLQotICAgIGZwcmludGYob3V0XywgIixcIm9vbV9zY1wiOiVkLFwib29tX3NjX2FkalwiOiVkIgotICAgICAgICAgICAgICAgICAgIixcIm1pbl9mbHRcIjolbHUsXCJtYWpfZmx0XCI6JWx1IgotICAgICAgICAgICAgICAgICAgIixcInV0aW1lXCI6JWx1LFwic3RpbWVcIjolbHUiLAotICAgICAgICAgICAgcHJvY2Vzcy0+b29tX3Njb3JlLCBwcm9jZXNzLT5vb21fc2NvcmVfYWRqLAotICAgICAgICAgICAgcHJvY2Vzcy0+bWlub3JfZmF1bHRzLCBwcm9jZXNzLT5tYWpvcl9mYXVsdHMsCi0gICAgICAgICAgICBwcm9jZXNzLT51dGltZSwgcHJvY2Vzcy0+c3RpbWUpOwotCi0gICAgaWYgKG1lbS0+ZnVsbF9zdGF0c19hdmFpbGFibGUoKSkgewotICAgICAgZnByaW50ZihvdXRfLCAiLFwicHNzXCI6JWxsdSxcInN3cFwiOiVsbHUiCi0gICAgICAgICAgICAgICAgICAgICIsXCJwY1wiOiVsbHUsXCJwZFwiOiVsbHUsXCJzY1wiOiVsbHUsXCJzZFwiOiVsbHUiLAotICAgICAgICAgICAgICBtZW0tPnBzc19rYigpLCBtZW0tPnN3YXBwZWRfa2IoKSwKLSAgICAgICAgICAgICAgbWVtLT5wcml2YXRlX2NsZWFuX2tiKCksIG1lbS0+cHJpdmF0ZV9kaXJ0eV9rYigpLAotICAgICAgICAgICAgICBtZW0tPnNoYXJlZF9jbGVhbl9rYigpLCBtZW0tPnNoYXJlZF9kaXJ0eV9rYigpKTsKLSAgICB9Ci0KLSAgICBpZiAobWVtLT5ncHVfc3RhdHNfYXZhaWxhYmxlKCkpIHsKLSAgICAgIGZwcmludGYob3V0XywgIixcImdwdV9lZ2xcIjolbGx1LFwiZ3B1X2VnbF9wc3NcIjolbGx1IgotICAgICAgICAgICAgICAgICAgICAiLFwiZ3B1X2dsXCI6JWxsdSxcImdwdV9nbF9wc3NcIjolbGx1IgotICAgICAgICAgICAgICAgICAgICAiLFwiZ3B1X2V0Y1wiOiVsbHUsXCJncHVfZXRjX3Bzc1wiOiVsbHUiLAotICAgICAgICAgICAgICBtZW0tPmdwdV9ncmFwaGljc19rYigpLCBtZW0tPmdwdV9ncmFwaGljc19wc3Nfa2IoKSwKLSAgICAgICAgICAgICAgbWVtLT5ncHVfZ2xfa2IoKSwgbWVtLT5ncHVfZ2xfcHNzX2tiKCksCi0gICAgICAgICAgICAgIG1lbS0+Z3B1X290aGVyX2tiKCksIG1lbS0+Z3B1X290aGVyX3Bzc19rYigpKTsKLSAgICB9Ci0KLSAgICAvLyBNZW1vcnkgbWFwcyBhcmUgdG9vIGhlYXZ5IHRvIHNlcmlhbGl6ZS4gRW5hYmxlIG9ubHkgaW4gd2hpdGVsaXN0aW5nIG1vZGUuCi0gICAgaWYgKHByaW50X3NtYXBzXyAmJgotICAgICAgICBmdWxsX2R1bXBfbW9kZV8gPT0gRnVsbER1bXBNb2RlOjprT25seVdoaXRlbGlzdGVkICYmCi0gICAgICAgIG1lbS0+ZnVsbF9zdGF0c19hdmFpbGFibGUoKSAmJgotICAgICAgICBmdWxsX2R1bXBfd2hpdGVsaXN0ZWRfcGlkc18uY291bnQocHJvY2Vzcy0+cGlkKSkgewotCi0gICAgICBmcHJpbnRmKG91dF8sICIsIFwibW1hcHNcIjpbIik7Ci0gICAgICBzaXplX3Qgbl9tbWFwcyA9IG1lbS0+bW1hcHNfY291bnQoKTsKLSAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgbl9tbWFwczsgKytrKSB7Ci0gICAgICAgIGNvbnN0IFByb2Nlc3NNZW1vcnlTdGF0czo6TW1hcEluZm8qIG1tID0gbWVtLT5tbWFwKGspOwotICAgICAgICBmcHJpbnRmKG91dF8sCi0gICAgICAgICAgICAgICAgIntcInZtXCI6XCIlbGx4LSVsbHhcIixcImZpbGVcIjpcIiVzXCIsXCJmbGFnc1wiOlwiJXNcIiwiCi0gICAgICAgICAgICAgICAgIlwicHNzXCI6JWxsdSxcInJzc1wiOiVsbHUsXCJzd3BcIjolbGx1LCIKLSAgICAgICAgICAgICAgICAiXCJwY1wiOiVsbHUsXCJwZFwiOiVsbHUsIgotICAgICAgICAgICAgICAgICJcInNjXCI6JWxsdSxcInNkXCI6JWxsdX0iLAotICAgICAgICAgICAgICAgIG1tLT5zdGFydF9hZGRyLCBtbS0+ZW5kX2FkZHIsIG1tLT5tYXBwZWRfZmlsZSwgbW0tPnByb3RfZmxhZ3MsCi0gICAgICAgICAgICAgICAgbW0tPnBzc19rYiwgbW0tPnJzc19rYiwgbW0tPnN3YXBwZWRfa2IsCi0gICAgICAgICAgICAgICAgbW0tPnByaXZhdGVfY2xlYW5fa2IsIG1tLT5wcml2YXRlX2RpcnR5X2tiLAotICAgICAgICAgICAgICAgIG1tLT5zaGFyZWRfY2xlYW5fa2IsIG1tLT5zaGFyZWRfZGlydHlfa2IpOwotICAgICAgICBpZiAoayA8IG5fbW1hcHMgLSAxKQotICAgICAgICAgIGZwcmludGYob3V0XywgIiwgIik7Ci0gICAgICB9Ci0gICAgICBmcHJpbnRmKG91dF8sICJdIik7Ci0gICAgfQotCi0gICAgaWYgKCsraXQgIT0gc25hcHNob3RfLmVuZCgpKQotICAgICAgZnByaW50ZihvdXRfLCAifSxcbiIpOwotICAgIGVsc2UKLSAgICAgIGZwcmludGYob3V0XywgIn19XG4iKTsKLSAgfQotICBmcHJpbnRmKG91dF8sICJ9Iik7Ci19Ci0KLXZvaWQgQXRyYWNlUHJvY2Vzc0R1bXA6OlNlcmlhbGl6ZVBlcnNpc3RlbnRQcm9jZXNzSW5mbygpIHsKLSAgZnByaW50ZihvdXRfLCAiXCJwcm9jZXNzZXNcIjp7Iik7Ci0gIGZvciAoYXV0byBpdCA9IHByb2Nlc3Nlc18uYmVnaW4oKTsgaXQgIT0gcHJvY2Vzc2VzXy5lbmQoKTspIHsKLSAgICBjb25zdCBQcm9jZXNzSW5mbyogcHJvY2VzcyA9IGl0LT5zZWNvbmQuZ2V0KCk7Ci0gICAgZnByaW50ZihvdXRfLCAiXCIlZFwiOnsiLCBwcm9jZXNzLT5waWQpOwotICAgIGZwcmludGYob3V0XywgIlwibmFtZVwiOlwiJXNcIiIsIHByb2Nlc3MtPm5hbWUpOwotCi0gICAgaWYgKCFwcm9jZXNzLT5pbl9rZXJuZWwpIHsKLSAgICAgIGZwcmludGYob3V0XywgIixcImV4ZVwiOlwiJXNcIiwiLCBwcm9jZXNzLT5leGUpOwotICAgICAgZnByaW50ZihvdXRfLCAiXCJ0aHJlYWRzXCI6e1xuIik7Ci0gICAgICBjb25zdCBhdXRvIHRocmVhZHMgPSAmcHJvY2Vzcy0+dGhyZWFkczsKLSAgICAgIGZvciAoYXV0byB0aHJlYWRfaXQgPSB0aHJlYWRzLT5iZWdpbigpOyB0aHJlYWRfaXQgIT0gdGhyZWFkcy0+ZW5kKCk7KSB7Ci0gICAgICAgIGNvbnN0IFRocmVhZEluZm8qIHRocmVhZCA9ICYodGhyZWFkX2l0LT5zZWNvbmQpOwotICAgICAgICBmcHJpbnRmKG91dF8sICJcIiVkXCI6eyIsIHRocmVhZC0+dGlkKTsKLSAgICAgICAgZnByaW50ZihvdXRfLCAiXCJuYW1lXCI6XCIlc1wiIiwgdGhyZWFkLT5uYW1lKTsKLQotICAgICAgICBpZiAoKyt0aHJlYWRfaXQgIT0gdGhyZWFkcy0+ZW5kKCkpCi0gICAgICAgICAgZnByaW50ZihvdXRfLCAifSxcbiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZnByaW50ZihvdXRfLCAifVxuIik7Ci0gICAgICB9Ci0gICAgICBmcHJpbnRmKG91dF8sICJ9Iik7Ci0gICAgfQotCi0gICAgaWYgKCsraXQgIT0gcHJvY2Vzc2VzXy5lbmQoKSkKLSAgICAgIGZwcmludGYob3V0XywgIn0sXG4iKTsKLSAgICBlbHNlCi0gICAgICBmcHJpbnRmKG91dF8sICJ9XG4iKTsKLSAgfQotICBmcHJpbnRmKG91dF8sICJ9Iik7Ci19Ci0KLXZvaWQgQXRyYWNlUHJvY2Vzc0R1bXA6OlRha2VBbmRTZXJpYWxpemVNZW1JbmZvKCkgewotICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgdWludDY0X3Q+IG1lbV9pbmZvOwotICBDSEVDSyhwcm9jZnNfdXRpbHM6OlJlYWRNZW1JbmZvU3RhdHMoJm1lbV9pbmZvKSk7Ci0gIGZwcmludGYob3V0XywgIntcInRzXCI6XCIlbGx1XCIsXCJtZW1pbmZvXCI6e1xuIiwgdGltZV91dGlsczo6R2V0VGltZXN0YW1wKCkpOwotICBmb3IgKGF1dG8gaXQgPSBtZW1faW5mby5iZWdpbigpOyBpdCAhPSBtZW1faW5mby5lbmQoKTsgKytpdCkgewotICAgIGlmIChpdCAhPSBtZW1faW5mby5iZWdpbigpKQotICAgICAgZnByaW50ZihvdXRfLCAiLCIpOwotICAgIGZwcmludGYob3V0XywgIlwiJXNcIjolbGx1IiwgaXQtPmZpcnN0LmNfc3RyKCksIGl0LT5zZWNvbmQpOwotICB9Ci0gIGZwcmludGYob3V0XywgIn19Iik7Ci19Ci0KLXZvaWQgQXRyYWNlUHJvY2Vzc0R1bXA6OkNsZWFudXAoKSB7Ci0gIHByb2Nlc3Nlc18uY2xlYXIoKTsKLSAgc25hcHNob3RfLmNsZWFyKCk7Ci0gIGZ1bGxfZHVtcF93aGl0ZWxpc3RlZF9waWRzXy5jbGVhcigpOwotICBzbmFwc2hvdF90aW1lcl8gPSBudWxscHRyOwotfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvYXRyYWNlX3Byb2Nlc3NfZHVtcC5oIGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvYXRyYWNlX3Byb2Nlc3NfZHVtcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzExODRhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL2F0cmFjZV9wcm9jZXNzX2R1bXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBBVFJBQ0VfUFJPQ0VTU19EVU1QX0hfCi0jZGVmaW5lIEFUUkFDRV9QUk9DRVNTX0RVTVBfSF8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgImxvZ2dpbmcuaCIKLSNpbmNsdWRlICJwcm9jZXNzX2luZm8uaCIKLSNpbmNsdWRlICJ0aW1lX3V0aWxzLmgiCi0KLS8vIFByb2dyYW0gdGhhdCBjb2xsZWN0cyBwcm9jZXNzZXMsIHRocmVhZCBuYW1lcywgcGVyLXByb2Nlc3MgbWVtb3J5IHN0YXRzIGFuZAotLy8gb3RoZXIgbWlub3IgbWV0cmljcyBmcm9tIC9wcm9jIGZpbGVzeXN0ZW0uIEl0J3MgYWltZWQgdG8gZXh0ZW5kIHN5c3RyYWNlCi0vLyB3aXRoIG1vcmUgYWN0aW9uYWJsZSBudW1iZXIgdG8gaGl0IHBlcmZvcm1hbmNlIGlzc3Vlcy4KLWNsYXNzIEF0cmFjZVByb2Nlc3NEdW1wIHsKLSBwdWJsaWM6Ci0gIGVudW0gRnVsbER1bXBNb2RlIHsKLSAgICBrRGlzYWJsZWQsCi0gICAga0FsbFByb2Nlc3NlcywKLSAgICBrQWxsSmF2YUFwcHMsCi0gICAga09ubHlXaGl0ZWxpc3RlZCwKLSAgfTsKLQotICBBdHJhY2VQcm9jZXNzRHVtcCgpOwotICB+QXRyYWNlUHJvY2Vzc0R1bXAoKTsKLQotICB2b2lkIFJ1bkFuZFByaW50SnNvbihGSUxFKiBzdHJlYW0pOwotICB2b2lkIFN0b3AoKTsKLQotICB2b2lkIFNldER1bXBJbnRlcnZhbChpbnQgaW50ZXJ2YWxfbXMpOwotCi0gIC8vIE5lZ2F0aXZlIG51bWJlciBvciB6ZXJvIG1lYW5zIHVubGltaXRlZCBudW1iZXIgb2YgZHVtcHMuCi0gIHZvaWQgc2V0X2R1bXBfY291bnQoaW50IGNvdW50KSB7IGR1bXBfY291bnRfID0gY291bnQ7IH0KLQotICB2b2lkIHNldF9mdWxsX2R1bXBfbW9kZShGdWxsRHVtcE1vZGUgbW9kZSkgeyBmdWxsX2R1bXBfbW9kZV8gPSBtb2RlOyB9Ci0gIHZvaWQgc2V0X2Z1bGxfZHVtcF93aGl0ZWxpc3QoY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+ICZ3aGl0ZWxpc3QpIHsKLSAgICBDSEVDSyhmdWxsX2R1bXBfbW9kZV8gPT0gRnVsbER1bXBNb2RlOjprT25seVdoaXRlbGlzdGVkKTsKLSAgICBmdWxsX2R1bXBfd2hpdGVsaXN0XyA9IHdoaXRlbGlzdDsKLSAgfQotICB2b2lkIGVuYWJsZV9ncmFwaGljc19zdGF0cygpIHsgZ3JhcGhpY3Nfc3RhdHNfID0gdHJ1ZTsgfQotICB2b2lkIGVuYWJsZV9wcmludF9zbWFwcygpIHsgcHJpbnRfc21hcHNfID0gdHJ1ZTsgfQotCi0gcHJpdmF0ZToKLSAgQXRyYWNlUHJvY2Vzc0R1bXAoY29uc3QgQXRyYWNlUHJvY2Vzc0R1bXAmKSA9IGRlbGV0ZTsKLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgQXRyYWNlUHJvY2Vzc0R1bXAmKSA9IGRlbGV0ZTsKLQotICB1c2luZyBQcm9jZXNzTWFwID0gc3RkOjptYXA8aW50LCBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc0luZm8+PjsKLSAgdXNpbmcgUHJvY2Vzc1NuYXBzaG90TWFwID0gc3RkOjptYXA8aW50LCBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc1NuYXBzaG90Pj47Ci0KLSAgdm9pZCBUYWtlR2xvYmFsU25hcHNob3QoKTsKLSAgdm9pZCBUYWtlQW5kU2VyaWFsaXplTWVtSW5mbygpOwotICBib29sIFVwZGF0ZVBlcnNpc3RlbnRQcm9jZXNzSW5mbyhpbnQgcGlkKTsKLSAgYm9vbCBTaG91bGRUYWtlRnVsbER1bXAoY29uc3QgUHJvY2Vzc0luZm8qIHByb2Nlc3MpOwotICB2b2lkIFNlcmlhbGl6ZVNuYXBzaG90KCk7Ci0gIHZvaWQgU2VyaWFsaXplUGVyc2lzdGVudFByb2Nlc3NJbmZvKCk7Ci0gIHZvaWQgQ2xlYW51cCgpOwotCi0gIGludCBzZWxmX3BpZF87Ci0gIGludCBkdW1wX2NvdW50XzsKLSAgYm9vbCBncmFwaGljc19zdGF0c18gPSBmYWxzZTsKLSAgYm9vbCBwcmludF9zbWFwc18gPSBmYWxzZTsKLSAgRnVsbER1bXBNb2RlIGZ1bGxfZHVtcF9tb2RlXyA9IEZ1bGxEdW1wTW9kZTo6a0Rpc2FibGVkOwotICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZnVsbF9kdW1wX3doaXRlbGlzdF87Ci0KLSAgRklMRSogb3V0XzsKLSAgUHJvY2Vzc01hcCBwcm9jZXNzZXNfOwotICBQcm9jZXNzU25hcHNob3RNYXAgc25hcHNob3RfOwotICB1aW50NjRfdCBzbmFwc2hvdF90aW1lc3RhbXBfOwotICBzdGQ6OnNldDxpbnQ+IGZ1bGxfZHVtcF93aGl0ZWxpc3RlZF9waWRzXzsKLSAgc3RkOjp1bmlxdWVfcHRyPHRpbWVfdXRpbHM6OlBlcmlvZGljVGltZXI+IHNuYXBzaG90X3RpbWVyXzsKLSAgaW50IGR1bXBfaW50ZXJ2YWxfaW5fdGltZXJfdGlja3NfOwotfTsKLQotI2VuZGlmICAvLyBBVFJBQ0VfUFJPQ0VTU19EVU1QX0hfCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9maWxlX3V0aWxzLmNjIGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvZmlsZV91dGlscy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QxMjJkNi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9maWxlX3V0aWxzLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImZpbGVfdXRpbHMuaCIKLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotbmFtZXNwYWNlIHsKLQotYm9vbCBJc051bWVyaWMoY29uc3QgY2hhciogc3RyKSB7Ci0gIGlmICghc3RyWzBdKQotICAgIHJldHVybiBmYWxzZTsKLSAgZm9yIChjb25zdCBjaGFyKiBjID0gc3RyOyAqYzsgYysrKSB7Ci0gICAgaWYgKCFpc2RpZ2l0KCpjKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLW5hbWVzcGFjZSBmaWxlX3V0aWxzIHsKLQotdm9pZCBGb3JFYWNoUGlkSW5Qcm9jUGF0aChjb25zdCBjaGFyKiBwcm9jX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChpbnQpPiBwcmVkaWNhdGUpIHsKLSAgRElSKiByb290X2RpciA9IG9wZW5kaXIocHJvY19wYXRoKTsKLSAgU2NvcGVkRGlyIGF1dG9jbG9zZShyb290X2Rpcik7Ci0gIHN0cnVjdCBkaXJlbnQqIGNoaWxkX2RpcjsKLSAgd2hpbGUgKChjaGlsZF9kaXIgPSByZWFkZGlyKHJvb3RfZGlyKSkpIHsKLSAgICBpZiAoY2hpbGRfZGlyLT5kX3R5cGUgIT0gRFRfRElSIHx8ICFJc051bWVyaWMoY2hpbGRfZGlyLT5kX25hbWUpKQotICAgICAgY29udGludWU7Ci0gICAgcHJlZGljYXRlKGF0b2koY2hpbGRfZGlyLT5kX25hbWUpKTsKLSAgfQotfQotCi1zc2l6ZV90IFJlYWRGaWxlKGNvbnN0IGNoYXIqIHBhdGgsIGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbmd0aCkgewotICBidWZbMF0gPSAnXDAnOwotICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKLSAgaWYgKGZkIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQpCi0gICAgcmV0dXJuIC0xOwotICBTY29wZWRGRCBhdXRvY2xvc2UoZmQpOwotICBzaXplX3QgdG90X3JlYWQgPSAwOwotICBkbyB7Ci0gICAgc3NpemVfdCByc2l6ZSA9IHJlYWQoZmQsIGJ1ZiArIHRvdF9yZWFkLCBsZW5ndGggLSB0b3RfcmVhZCk7Ci0gICAgaWYgKHJzaXplID09IDApCi0gICAgICBicmVhazsKLSAgICBpZiAocnNpemUgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpCi0gICAgICBjb250aW51ZTsKLSAgICBlbHNlIGlmIChyc2l6ZSA8IDApCi0gICAgICByZXR1cm4gLTE7Ci0gICAgdG90X3JlYWQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihyc2l6ZSk7Ci0gIH0gd2hpbGUgKHRvdF9yZWFkIDwgbGVuZ3RoKTsKLSAgYnVmW3RvdF9yZWFkIDwgbGVuZ3RoID8gdG90X3JlYWQgOiBsZW5ndGggLSAxXSA9ICdcMCc7Ci0gIHJldHVybiB0b3RfcmVhZDsKLX0KLQotYm9vbCBSZWFkRmlsZVRyaW1tZWQoY29uc3QgY2hhciogcGF0aCwgY2hhciogYnVmLCBzaXplX3QgbGVuZ3RoKSB7Ci0gIHNzaXplX3QgcnNpemUgPSBSZWFkRmlsZShwYXRoLCBidWYsIGxlbmd0aCk7Ci0gIGlmIChyc2l6ZSA8IDApCi0gICAgcmV0dXJuIGZhbHNlOwotICBmb3IgKHNzaXplX3QgaSA9IDA7IGkgPCByc2l6ZTsgaSsrKSB7Ci0gICAgY29uc3QgY2hhciBjID0gYnVmW2ldOwotICAgIGlmIChjID09ICdcMCcgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1xuJykgewotICAgICAgYnVmW2ldID0gJ1wwJzsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBidWZbaV0gPSBpc3ByaW50KGMpID8gYyA6ICc/JzsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3NpemVfdCBSZWFkUHJvY0ZpbGUoaW50IHBpZCwgY29uc3QgY2hhciogcHJvY19maWxlLCBjaGFyKiBidWYsIHNpemVfdCBsZW5ndGgpIHsKLSAgY2hhciBwcm9jX3BhdGhbMTI4XTsKLSAgc25wcmludGYocHJvY19wYXRoLCBzaXplb2YocHJvY19wYXRoKSwgIi9wcm9jLyVkLyVzIiwgcGlkLCBwcm9jX2ZpbGUpOwotICByZXR1cm4gUmVhZEZpbGUocHJvY19wYXRoLCBidWYsIGxlbmd0aCk7Ci19Ci0KLS8vIFJlYWRzIGEgc2luZ2xlLWxpbmUgcHJvYyBmaWxlLCBzdHJpcHBpbmcgb3V0IGFueSBcMCwgXHIsIFxuIGFuZCByZXBsYWNpbmcKLS8vIG5vbi1wcmludGFibGUgY2hhcmN0ZXJzIHdpdGggJz8nLgotYm9vbCBSZWFkUHJvY0ZpbGVUcmltbWVkKGludCBwaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcHJvY19maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKSB7Ci0gIGNoYXIgcHJvY19wYXRoWzEyOF07Ci0gIHNucHJpbnRmKHByb2NfcGF0aCwgc2l6ZW9mKHByb2NfcGF0aCksICIvcHJvYy8lZC8lcyIsIHBpZCwgcHJvY19maWxlKTsKLSAgcmV0dXJuIFJlYWRGaWxlVHJpbW1lZChwcm9jX3BhdGgsIGJ1ZiwgbGVuZ3RoKTsKLX0KLQotTGluZVJlYWRlcjo6TGluZVJlYWRlcihjaGFyKiBidWYsIHNpemVfdCBzaXplKQotICAgIDogcHRyXyhidWYpLCBlbmRfKGJ1ZiArIHNpemUpIHsKLX0KLQotTGluZVJlYWRlcjo6fkxpbmVSZWFkZXIoKSB7Ci19Ci0KLWNvbnN0IGNoYXIqIExpbmVSZWFkZXI6Ok5leHRMaW5lKCkgewotICBpZiAocHRyXyA+PSBlbmRfKQotICAgIHJldHVybiBudWxscHRyOwotICBjb25zdCBjaGFyKiBjdXIgPSBwdHJfOwotICBjaGFyKiBuZXh0ID0gc3RyY2hyKHB0cl8sICdcbicpOwotICBpZiAobmV4dCkgewotICAgICpuZXh0ID0gJ1wwJzsKLSAgICBwdHJfID0gbmV4dCArIDE7Ci0gIH0gZWxzZSB7Ci0gICAgcHRyXyA9IGVuZF87Ci0gIH0KLSAgcmV0dXJuIGN1cjsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGZpbGVfdXRpbHMKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL2ZpbGVfdXRpbHMuaCBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL2ZpbGVfdXRpbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIyNTU2Yi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9maWxlX3V0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgRklMRV9VVElMU19IXwotI2RlZmluZSBGSUxFX1VUSUxTX0hfCi0KLSNpbmNsdWRlIDxkaXJlbnQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImxvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIGZpbGVfdXRpbHMgewotCi0vLyBSQUlJIGNsYXNzZXMgZm9yIGF1dG8tcmVsZWFzaW5nIGZkL2RpcnMuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUkVTT1VSQ0VfVFlQRSwgaW50ICgqQ0xPU0VfRk4pKFJFU09VUkNFX1RZUEUpPgotc3RydWN0IFNjb3BlZFJlc291cmNlIHsKLSAgZXhwbGljaXQgU2NvcGVkUmVzb3VyY2UoUkVTT1VSQ0VfVFlQRSByKSA6IHJfKHIpIHsgQ0hFQ0socik7IH0KLSAgflNjb3BlZFJlc291cmNlKCkgeyBDTE9TRV9GTihyXyk7IH0KLSAgUkVTT1VSQ0VfVFlQRSByXzsKLX07Ci0KLXVzaW5nIFNjb3BlZEZEID0gU2NvcGVkUmVzb3VyY2U8aW50LCBjbG9zZT47Ci11c2luZyBTY29wZWREaXIgPSBTY29wZWRSZXNvdXJjZTxESVIqLCBjbG9zZWRpcj47Ci0KLS8vIEludm9rZXMgcHJlZGljYXRlKHBpZCkgZm9yIGVhY2ggZm9sZGVyIGluIHxwcm9jX3BhdGh8L1swLTldKyB3aGljaCBoYXMKLS8vIGEgbnVtZXJpYyBuYW1lICh0eXBpY2FsbHkgcGlkcyBhbmQgdGlkcykuCi12b2lkIEZvckVhY2hQaWRJblByb2NQYXRoKGNvbnN0IGNoYXIqIHByb2NfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGludCk+IHByZWRpY2F0ZSk7Ci0KLS8vIFJlYWRzIHRoZSBjb250ZW50cyBvZiB8cGF0aHwgZnVsbHkgaW50byB8YnVmfCB1cCB0byB8bGVuZ3RofCBjaGFycy4KLS8vIHxidWZ8IGlzIGd1YXJhbnRlZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgotc3NpemVfdCBSZWFkRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjaGFyKiBidWYsIHNpemVfdCBsZW5ndGgpOwotCi0vLyBSZWFkcyBhIHNpbmdsZS1saW5lIGZpbGUsIHN0cmlwcGluZyBvdXQgYW55IFwwLCBcciwgXG4gYW5kIHJlcGxhY2luZwotLy8gbm9uLXByaW50YWJsZSBjaGFyY3RlcnMgd2l0aCAnPycuIHxidWZ8IGlzIGd1YXJhbnRlZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgotYm9vbCBSZWFkRmlsZVRyaW1tZWQoY29uc3QgY2hhciogcGF0aCwgY2hhciogYnVmLCBzaXplX3QgbGVuZ3RoKTsKLQotLy8gQ29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yIC9wcm9jL3xwaWR8L3xwcm9jX2ZpbGV8IHBhdGhzLgotc3NpemVfdCBSZWFkUHJvY0ZpbGUoaW50IHBpZCwgY29uc3QgY2hhciogcHJvY19maWxlLCBjaGFyKiBidWYsIHNpemVfdCBsZW5ndGgpOwotYm9vbCBSZWFkUHJvY0ZpbGVUcmltbWVkKGludCBwaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcHJvY19maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKTsKLQotLy8gVGFrZXMgYSBDIHN0cmluZyBidWZmZXIgYW5kIGNodW5rcyBpdCBpbnRvIGxpbmVzIHdpdGhvdXQgY3JlYXRpbmcgYW55Ci0vLyBjb3BpZXMuIEl0IG1vZGlmaWVzIHRoZSBvcmlnaW5hbCBidWZmZXIsIGJ5IHJlcGxhY2luZyBcbiB3aXRoIFwwLgotY2xhc3MgTGluZVJlYWRlciB7Ci0gcHVibGljOgotICBMaW5lUmVhZGVyKGNoYXIqIGJ1Ziwgc2l6ZV90IHNpemUpOwotICB+TGluZVJlYWRlcigpOwotCi0gIGNvbnN0IGNoYXIqIE5leHRMaW5lKCk7Ci0KLSBwcml2YXRlOgotICBjaGFyKiBwdHJfOwotICBjaGFyKiBlbmRfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGZpbGVfdXRpbHMKLQotI2VuZGlmICAvLyBGSUxFX1VUSUxTX0hfCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9saWJtZW10cmFja193cmFwcGVyLmNjIGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvbGlibWVtdHJhY2tfd3JhcHBlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZmMGE1Ny4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9saWJtZW10cmFja193cmFwcGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImxpYm1lbXRyYWNrX3dyYXBwZXIuaCIKLQotI2luY2x1ZGUgPGRsZmNuLmg+Ci0KLSNpbmNsdWRlICJsb2dnaW5nLmgiCi0KLW5hbWVzcGFjZSB7Ci0KLS8vIEluaXQgbWVtdHJhY2sgc2VydmljZS4gUmVtb3ZlZCBpbiB0aGUgbGF0ZXN0IHZlcnNpb24uCi1pbnQgKCptZW10cmFja19pbml0KSh2b2lkKTsKLQotLy8gQWxsb2NhdGUgYW5kIGRpc3Bvc2UgbWVtb3J5IHN0YXRzLgotbGlibWVtdHJhY2tfcHJvYyogKCptZW10cmFja19wcm9jX25ldykodm9pZCk7Ci12b2lkICgqbWVtdHJhY2tfcHJvY19kZXN0cm95KShsaWJtZW10cmFja19wcm9jKiBwKTsKLQotLy8gUXVlcnkgbWVtb3J5IHN0YXRzIGZvciBnaXZlbiBwcm9jZXNzLgotaW50ICgqbWVtdHJhY2tfcHJvY19nZXQpKGxpYm1lbXRyYWNrX3Byb2MqIHAsIHBpZF90IHBpZCk7Ci0KLS8vIFNpbmNlIG1lbW9yeSBzdGF0cyBpcyBvcGFxdWUgc3RydWN0dXJlLCB0aGVyZSBhcmUgaGVscGVycyB0byBwYXJzZSBpdC4KLXNzaXplX3QgKCptZW10cmFja19wcm9jX2dyYXBoaWNzX3RvdGFsKShsaWJtZW10cmFja19wcm9jKiBwKTsKLXNzaXplX3QgKCptZW10cmFja19wcm9jX2dyYXBoaWNzX3BzcykobGlibWVtdHJhY2tfcHJvYyogcCk7Ci1zc2l6ZV90ICgqbWVtdHJhY2tfcHJvY19nbF90b3RhbCkobGlibWVtdHJhY2tfcHJvYyogcCk7Ci1zc2l6ZV90ICgqbWVtdHJhY2tfcHJvY19nbF9wc3MpKGxpYm1lbXRyYWNrX3Byb2MqIHApOwotc3NpemVfdCAoKm1lbXRyYWNrX3Byb2Nfb3RoZXJfdG90YWwpKGxpYm1lbXRyYWNrX3Byb2MqIHApOwotc3NpemVfdCAoKm1lbXRyYWNrX3Byb2Nfb3RoZXJfcHNzKShsaWJtZW10cmFja19wcm9jKiBwKTsKLQotdHlwZWRlZiBzc2l6ZV90ICgqbGlibWVtdHJhY2tfZ2V0dGVyX3QpKGxpYm1lbXRyYWNrX3Byb2MqKTsKLQotYm9vbCBnX2luaXRpYWxpemVkID0gZmFsc2U7Ci1ib29sIGdfYnJva2VuID0gZmFsc2U7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdm9pZCBJbXBvcnQoVCoqIGZ1bmMsIHZvaWQqIGxpYiwgY29uc3QgY2hhciogbmFtZSkgewotICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihmdW5jKSkgPSBkbHN5bShsaWIsIG5hbWUpOwotfQotCi1ib29sIEltcG9ydExpYm1lbXRyYWNrU3ltYm9scyh2b2lkKiBoYW5kbGUpIHsKLSAgSW1wb3J0KCZtZW10cmFja19pbml0LCBoYW5kbGUsICJtZW10cmFja19pbml0Iik7Ci0gIEltcG9ydCgmbWVtdHJhY2tfcHJvY19uZXcsIGhhbmRsZSwgIm1lbXRyYWNrX3Byb2NfbmV3Iik7Ci0gIEltcG9ydCgmbWVtdHJhY2tfcHJvY19kZXN0cm95LCBoYW5kbGUsICJtZW10cmFja19wcm9jX2Rlc3Ryb3kiKTsKLSAgSW1wb3J0KCZtZW10cmFja19wcm9jX2dldCwgaGFuZGxlLCAibWVtdHJhY2tfcHJvY19nZXQiKTsKLSAgSW1wb3J0KCZtZW10cmFja19wcm9jX2dyYXBoaWNzX3RvdGFsLCBoYW5kbGUsICJtZW10cmFja19wcm9jX2dyYXBoaWNzX3RvdGFsIik7Ci0gIEltcG9ydCgmbWVtdHJhY2tfcHJvY19ncmFwaGljc19wc3MsIGhhbmRsZSwgIm1lbXRyYWNrX3Byb2NfZ3JhcGhpY3NfcHNzIik7Ci0gIEltcG9ydCgmbWVtdHJhY2tfcHJvY19nbF90b3RhbCwgaGFuZGxlLCAibWVtdHJhY2tfcHJvY19nbF90b3RhbCIpOwotICBJbXBvcnQoJm1lbXRyYWNrX3Byb2NfZ2xfcHNzLCBoYW5kbGUsICJtZW10cmFja19wcm9jX2dsX3BzcyIpOwotICBJbXBvcnQoJm1lbXRyYWNrX3Byb2Nfb3RoZXJfdG90YWwsIGhhbmRsZSwgIm1lbXRyYWNrX3Byb2Nfb3RoZXJfdG90YWwiKTsKLSAgSW1wb3J0KCZtZW10cmFja19wcm9jX290aGVyX3BzcywgaGFuZGxlLCAibWVtdHJhY2tfcHJvY19vdGhlcl9wc3MiKTsKLQotICBpZiAoIW1lbXRyYWNrX3Byb2NfbmV3IHx8ICFtZW10cmFja19wcm9jX2Rlc3Ryb3kgfHwgIW1lbXRyYWNrX3Byb2NfZ2V0KSB7Ci0gICAgTG9nRXJyb3IoIkNvdWxkbid0IHVzZSBsaWJtZW10cmFjay4gUHJvYmFibHkgaXQncyBBUEkgaGFzIGJlZW4gY2hhbmdlZC4iKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgLy8gSW5pdGlhbGl6YXRpb24gaXMgcmVxdWlyZWQgb24gcHJlLU8gQW5kcm9pZC4KLSAgaWYgKG1lbXRyYWNrX2luaXQgJiYgbWVtdHJhY2tfaW5pdCgpICE9IDApIHsKLSAgICBMb2dFcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgbGlibWVtdHJhY2suICIKLSAgICAgICAgICAgICAiUHJvYmFibHkgaW1wbGVtZW50YXRpb24gaXMgbWlzc2luZyBpbiB0aGUgUk9NLiIpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMYXp5T3BlbkxpYm1lbXRyYWNrKCkgewotICBpZiAoZ19pbml0aWFsaXplZCkKLSAgICByZXR1cm4gdHJ1ZTsKLSAgaWYgKGdfYnJva2VuKQotICAgIHJldHVybiBmYWxzZTsKLQotICB2b2lkICpoYW5kbGUgPSBkbG9wZW4oImxpYm1lbXRyYWNrLnNvIiwgUlRMRF9HTE9CQUwgfCBSVExEX05PVyk7Ci0gIGlmIChoYW5kbGUgPT0gbnVsbHB0cikgewotICAgIExvZ0Vycm9yKCJGYWlsZWQgdG8gb3BlbiBsaWJtZW10cmFjayBsaWJyYXJ5LiIpOwotICAgIGdfYnJva2VuID0gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAoIUltcG9ydExpYm1lbXRyYWNrU3ltYm9scyhoYW5kbGUpKSB7Ci0gICAgZGxjbG9zZShoYW5kbGUpOwotICAgIGdfYnJva2VuID0gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBnX2luaXRpYWxpemVkID0gdHJ1ZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXVpbnQ2NF90IEdldE9yWmVybyhsaWJtZW10cmFja19nZXR0ZXJfdCBnZXR0ZXIsIGxpYm1lbXRyYWNrX3Byb2MqIHByb2MpIHsKLSAgaWYgKCFnZXR0ZXIgfHwgIXByb2MpCi0gICAgcmV0dXJuIDA7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0dGVyKHByb2MpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLU1lbXRyYWNrUHJvYzo6TWVtdHJhY2tQcm9jKGludCBwaWQpIHsKLSAgaWYgKCFMYXp5T3BlbkxpYm1lbXRyYWNrKCkpCi0gICAgcmV0dXJuOwotCi0gIHByb2NfID0gbWVtdHJhY2tfcHJvY19uZXcoKTsKLSAgaWYgKCFwcm9jXykgewotICAgIExvZ0Vycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGxpYm1lbXRyYWNrIHByb2MuICIKLSAgICAgICAgICAgICAiUHJvYmFibHkgaXQncyBBUEkgaGFzIGJlZW4gY2hhbmdlZC4iKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAobWVtdHJhY2tfcHJvY19nZXQocHJvY18sIHBpZCkgIT0gMCkgewotICAgIC8vIERvbid0IGxvZyBhbiBlcnJvciBzaW5jZSBub3QgZXZlcnkgcHJvY2VzcyBoYXMgbWVtdHJhY2sgc3RhdHMuCi0gICAgbWVtdHJhY2tfcHJvY19kZXN0cm95KHByb2NfKTsKLSAgICBwcm9jXyA9IG51bGxwdHI7Ci0gIH0KLX0KLQotTWVtdHJhY2tQcm9jOjp+TWVtdHJhY2tQcm9jKCkgewotICBpZiAocHJvY18pCi0gICAgbWVtdHJhY2tfcHJvY19kZXN0cm95KHByb2NfKTsKLX0KLQotdWludDY0X3QgTWVtdHJhY2tQcm9jOjpncmFwaGljc190b3RhbCgpIGNvbnN0IHsKLSAgcmV0dXJuIEdldE9yWmVybyhtZW10cmFja19wcm9jX2dyYXBoaWNzX3RvdGFsLCBwcm9jXyk7Ci19Ci0KLXVpbnQ2NF90IE1lbXRyYWNrUHJvYzo6Z3JhcGhpY3NfcHNzKCkgY29uc3QgewotICByZXR1cm4gR2V0T3JaZXJvKG1lbXRyYWNrX3Byb2NfZ3JhcGhpY3NfcHNzLCBwcm9jXyk7Ci19Ci0KLXVpbnQ2NF90IE1lbXRyYWNrUHJvYzo6Z2xfdG90YWwoKSBjb25zdCB7Ci0gIHJldHVybiBHZXRPclplcm8obWVtdHJhY2tfcHJvY19nbF90b3RhbCwgcHJvY18pOwotfQotCi11aW50NjRfdCBNZW10cmFja1Byb2M6OmdsX3BzcygpIGNvbnN0IHsKLSAgcmV0dXJuIEdldE9yWmVybyhtZW10cmFja19wcm9jX2dsX3BzcywgcHJvY18pOwotfQotCi11aW50NjRfdCBNZW10cmFja1Byb2M6Om90aGVyX3RvdGFsKCkgY29uc3QgewotICByZXR1cm4gR2V0T3JaZXJvKG1lbXRyYWNrX3Byb2Nfb3RoZXJfdG90YWwsIHByb2NfKTsKLX0KLQotdWludDY0X3QgTWVtdHJhY2tQcm9jOjpvdGhlcl9wc3MoKSBjb25zdCB7Ci0gIHJldHVybiBHZXRPclplcm8obWVtdHJhY2tfcHJvY19vdGhlcl9wc3MsIHByb2NfKTsKLX0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL2xpYm1lbXRyYWNrX3dyYXBwZXIuaCBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL2xpYm1lbXRyYWNrX3dyYXBwZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VjNWNlYy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9saWJtZW10cmFja193cmFwcGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgTElCTUVNVFJBQ0tfV1JBUFBFUl9IXwotI2RlZmluZSBMSUJNRU1UUkFDS19XUkFQUEVSX0hfCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotLy8gV3JhcHBlciBvbiB0b3Agb2YgbGlibWVtdHJhY2sgQVBJLgotCi0vLyBPcGFxdWUgc3RydWN0dXJlIHdpdGggbWVtb3J5IHN0YXRzLgotLy8gU2VlICRBTkRST0lEL3N5c3RlbS9jb3JlL2xpYm1lbXRyYWNrL2luY2x1ZGUvbWVtdHJhY2svbWVtdHJhY2suaCBmb3IgZGV0YWlscy4KLXN0cnVjdCBsaWJtZW10cmFja19wcm9jOwotCi0vLyBUaGVzZSBudW1iZXJzIGFyZSB2ZW5kb3Itc3BlY2lmaWMgYW5kIGNhbid0IGJlIHRydXN0ZWQgYXMgYSBzdGFibGUgbWV0cmljCi0vLyBhY3Jvc3MgZGlmZmVyZW50IGhhcmR3YXJlIG9yIGRyaXZlciB2ZXJzaW9ucy4KLWNsYXNzIE1lbXRyYWNrUHJvYyB7Ci0gcHVibGljOgotICBleHBsaWNpdCBNZW10cmFja1Byb2MoaW50IHBpZCk7Ci0gIH5NZW10cmFja1Byb2MoKTsKLQotICB1aW50NjRfdCBncmFwaGljc190b3RhbCgpIGNvbnN0OwotICB1aW50NjRfdCBncmFwaGljc19wc3MoKSBjb25zdDsKLSAgdWludDY0X3QgZ2xfdG90YWwoKSBjb25zdDsKLSAgdWludDY0X3QgZ2xfcHNzKCkgY29uc3Q7Ci0gIHVpbnQ2NF90IG90aGVyX3RvdGFsKCkgY29uc3Q7Ci0gIHVpbnQ2NF90IG90aGVyX3BzcygpIGNvbnN0OwotCi0gIGJvb2wgaGFzX2Vycm9ycygpIGNvbnN0IHsgcmV0dXJuIHByb2NfID09IG51bGxwdHI7IH07Ci0KLSBwcml2YXRlOgotICBNZW10cmFja1Byb2MoY29uc3QgTWVtdHJhY2tQcm9jJikgPSBkZWxldGU7Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IE1lbXRyYWNrUHJvYyYpID0gZGVsZXRlOwotCi0gIGxpYm1lbXRyYWNrX3Byb2MqIHByb2NfID0gbnVsbHB0cjsKLX07Ci0KLSNlbmRpZiAgLy8gTElCTUVNVFJBQ0tfV1JBUFBFUl9IXwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvbG9nZ2luZy5oIGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvbG9nZ2luZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTMyMDUxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL2xvZ2dpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBMT0dHSU5HX0hfCi0jZGVmaW5lIExPR0dJTkdfSF8KLQotI2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jZGVmaW5lIENIRUNLX0FSR1MoQ09ORCwgRVJSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIkZBSUxFRCBDSEVDSyglcykgQCAlczolZCAoZXJybm86ICVzKVxuIiwgI0NPTkQsIF9fRklMRV9fLCBfX0xJTkVfXywgXAotICAgICAgc3RyZXJyb3IoRVJSKQotCi0jZGVmaW5lIENIRUNLKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghKHgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBjb25zdCBpbnQgZSA9IGVycm5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfRkFUQUwsICJhdHJhY2VfaGVscGVyIiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19BUkdTKHgsIGUpKTsgICAgICAgICAgICAgICAgICBcCi0gICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIiBDSEVDS19BUkdTKHgsIGUpKTsgICAgICAgICAgICAgICAgIFwKLSAgICAgIGZmbHVzaChzdGRlcnIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgYWJvcnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotaW5saW5lIHZvaWQgTG9nRXJyb3IoY29uc3QgY2hhciogbWVzc2FnZSkgewotICBfX2FuZHJvaWRfbG9nX3dyaXRlKEFORFJPSURfTE9HX0VSUk9SLCAiYXRyYWNlX2hlbHBlciIsIG1lc3NhZ2UpOwotICBmcHJpbnRmKHN0ZGVyciwgIlxuJXNcbiIsIG1lc3NhZ2UpOwotICBmZmx1c2goc3RkZXJyKTsKLX0KLQotI2VuZGlmICAvLyBMT0dHSU5HX0hfCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9tYWluLmNjIGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvbWFpbi5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY0YjU3My4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9tYWluLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0jaW5jbHVkZSAiYXRyYWNlX3Byb2Nlc3NfZHVtcC5oIgotI2luY2x1ZGUgImxvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIHsKLQotc3RkOjp1bmlxdWVfcHRyPEF0cmFjZVByb2Nlc3NEdW1wPiBnX3Byb2c7Ci0KLXZvaWQgUGFyc2VGdWxsRHVtcENvbmZpZyhjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBBdHJhY2VQcm9jZXNzRHVtcCogcHJvZykgewotICB1c2luZyBGdWxsRHVtcE1vZGUgPSBBdHJhY2VQcm9jZXNzRHVtcDo6RnVsbER1bXBNb2RlOwotICBpZiAoY29uZmlnID09ICJhbGwiKSB7Ci0gICAgcHJvZy0+c2V0X2Z1bGxfZHVtcF9tb2RlKEZ1bGxEdW1wTW9kZTo6a0FsbFByb2Nlc3Nlcyk7Ci0gIH0gZWxzZSBpZiAoY29uZmlnID09ICJhcHBzIikgewotICAgIHByb2ctPnNldF9mdWxsX2R1bXBfbW9kZShGdWxsRHVtcE1vZGU6OmtBbGxKYXZhQXBwcyk7Ci0gIH0gZWxzZSB7Ci0gICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IHdoaXRlbGlzdDsKLSAgICBzdGQ6OmlzdHJpbmdzdHJlYW0gc3MoY29uZmlnKTsKLSAgICBzdGQ6OnN0cmluZyBlbnRyeTsKLSAgICB3aGlsZSAoc3RkOjpnZXRsaW5lKHNzLCBlbnRyeSwgJywnKSkgewotICAgICAgd2hpdGVsaXN0Lmluc2VydChlbnRyeSk7Ci0gICAgfQotICAgIGlmICh3aGl0ZWxpc3QuZW1wdHkoKSkKLSAgICAgIHJldHVybjsKLSAgICBwcm9nLT5zZXRfZnVsbF9kdW1wX21vZGUoRnVsbER1bXBNb2RlOjprT25seVdoaXRlbGlzdGVkKTsKLSAgICBwcm9nLT5zZXRfZnVsbF9kdW1wX3doaXRlbGlzdCh3aGl0ZWxpc3QpOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAgaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLWVjaG8tdHMiKSkgewotICAgIC8vIFVzZWQgYnkgY2xvY2sgc3luYyBtYXJrZXIgdG8gY29ycmVjdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCi0gICAgLy8gTGludXggbW9ub3RvbmljIGNsb2NrcyBvbiB0aGUgZGV2aWNlIGFuZCBob3N0LgotICAgIHByaW50ZigiJWxsdVxuIiwgdGltZV91dGlsczo6R2V0VGltZXN0YW1wKCkpOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgYm9vbCBiYWNrZ3JvdW5kID0gZmFsc2U7Ci0gIGludCBkdW1wX2ludGVydmFsX21zID0gNTAwMDsKLSAgY2hhciBvdXRfZmlsZVtQQVRIX01BWF0gPSB7fTsKLSAgYm9vbCBkdW1wX3RvX2ZpbGUgPSBmYWxzZTsKLSAgaW50IGNvdW50ID0gLTE7Ci0KLSAgQXRyYWNlUHJvY2Vzc0R1bXAqIHByb2cgPSBuZXcgQXRyYWNlUHJvY2Vzc0R1bXAoKTsKLSAgZ19wcm9nID0gc3RkOjp1bmlxdWVfcHRyPEF0cmFjZVByb2Nlc3NEdW1wPihwcm9nKTsKLQotICBpZiAoZ2V0ZXVpZCgpKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJNdXN0IHJ1biBhcyByb290XG4iKTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gIH0KLQotICBpbnQgb3B0OwotICB3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiYm06Z3N0Om86YzoiKSkgIT0gLTEpIHsKLSAgICBzd2l0Y2ggKG9wdCkgewotICAgICAgY2FzZSAnYic6Ci0gICAgICAgIGJhY2tncm91bmQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ20nOgotICAgICAgICBQYXJzZUZ1bGxEdW1wQ29uZmlnKG9wdGFyZywgcHJvZyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAnZyc6Ci0gICAgICAgIHByb2ctPmVuYWJsZV9ncmFwaGljc19zdGF0cygpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ3MnOgotICAgICAgICBwcm9nLT5lbmFibGVfcHJpbnRfc21hcHMoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICd0JzoKLSAgICAgICAgZHVtcF9pbnRlcnZhbF9tcyA9IGF0b2kob3B0YXJnKTsKLSAgICAgICAgQ0hFQ0soZHVtcF9pbnRlcnZhbF9tcyA+IDApOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ2MnOgotICAgICAgICBjb3VudCA9IGF0b2kob3B0YXJnKTsKLSAgICAgICAgQ0hFQ0soY291bnQgPiAwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICdvJzoKLSAgICAgICAgc3RybmNweShvdXRfZmlsZSwgb3B0YXJnLCBzaXplb2Yob3V0X2ZpbGUpKTsKLSAgICAgICAgZHVtcF90b19maWxlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAiVXNhZ2U6ICVzIFstYl0gWy1tIGZ1bGxfZHVtcF9maWx0ZXJdIFstZ10gWy1zXSAiCi0gICAgICAgICAgICAgICAgIlstdCBkdW1wX2ludGVydmFsX21zXSAiCi0gICAgICAgICAgICAgICAgIlstYyBkdW1wc19jb3VudF0gWy1vIG91dC5qc29uXVxuIiwKLSAgICAgICAgICAgICAgICBhcmd2WzBdKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLSAgfQotCi0gIHByb2ctPnNldF9kdW1wX2NvdW50KGNvdW50KTsKLSAgcHJvZy0+U2V0RHVtcEludGVydmFsKGR1bXBfaW50ZXJ2YWxfbXMpOwotCi0gIEZJTEUqIG91dF9zdHJlYW0gPSBzdGRvdXQ7Ci0gIGNoYXIgdG1wX2ZpbGVbUEFUSF9NQVhdOwotICBpZiAoZHVtcF90b19maWxlKSB7Ci0gICAgdW5saW5rKG91dF9maWxlKTsKLSAgICBzcHJpbnRmKHRtcF9maWxlLCAiJXMudG1wIiwgb3V0X2ZpbGUpOwotICAgIG91dF9zdHJlYW0gPSBmb3Blbih0bXBfZmlsZSwgInciKTsKLSAgICBDSEVDSyhvdXRfc3RyZWFtKTsKLSAgfQotCi0gIGlmIChiYWNrZ3JvdW5kKSB7Ci0gICAgaWYgKCFkdW1wX3RvX2ZpbGUpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiLWIgcmVxdWlyZXMgLW8gZm9yIG91dHB1dCBkdW1wIHBhdGguXG4iKTsKLSAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0gICAgcHJpbnRmKCJDb250aW51aW5nIGluIGJhY2tncm91bmQuIGtpbGwgLVRFUk0gdG8gdGVybWluYXRlIHRoZSBkYWVtb24uXG4iKTsKLSAgICBDSEVDSyhkYWVtb24oMCAvKiBub2NoZGlyICovLCAwIC8qIG5vY2xvc2UgKi8pID09IDApOwotICB9Ci0KLSAgYXV0byBvbl9leGl0ID0gW10oaW50KSB7IGdfcHJvZy0+U3RvcCgpOyB9OwotICBzaWduYWwoU0lHSU5ULCBvbl9leGl0KTsKLSAgc2lnbmFsKFNJR1RFUk0sIG9uX2V4aXQpOwotCi0gIHByb2ctPlJ1bkFuZFByaW50SnNvbihvdXRfc3RyZWFtKTsKLSAgZmNsb3NlKG91dF9zdHJlYW0pOwotCi0gIGlmIChkdW1wX3RvX2ZpbGUpCi0gICAgcmVuYW1lKHRtcF9maWxlLCBvdXRfZmlsZSk7Ci19CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9wcm9jZXNzX2luZm8uaCBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL3Byb2Nlc3NfaW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODllNzdlLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL3Byb2Nlc3NfaW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIFBST0NFU1NfSU5GT19IXwotI2RlZmluZSBQUk9DRVNTX0lORk9fSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1ZGUgInByb2Nlc3NfbWVtb3J5X3N0YXRzLmgiCi0KLXN0cnVjdCBUaHJlYWRJbmZvIHsKLSAgaW50IHRpZDsKLSAgY2hhciBuYW1lWzE2XTsKLX07Ci0KLXN0cnVjdCBQcm9jZXNzSW5mbyB7Ci0gIGludCBwaWQ7Ci0gIGJvb2wgaW5fa2VybmVsOwotICBib29sIGlzX2FwcDsKLSAgY2hhciBuYW1lWzI1Nl07Ci0gIGNoYXIgZXhlWzI1Nl07Ci0gIHN0ZDo6bWFwPGludCwgVGhyZWFkSW5mbz4gdGhyZWFkczsKLX07Ci0KLXN0cnVjdCBQcm9jZXNzU25hcHNob3QgewotICBpbnQgcGlkOwotICBQcm9jZXNzTWVtb3J5U3RhdHMgbWVtb3J5OwotICAvLyBPT00gYmFkbmVzcyBhbmQgdG9sZXJhbmNlIChvb21fYWRqIGlzIGRlcHJlY2F0ZWQpLgotICBpbnQgb29tX3Njb3JlOwotICBpbnQgb29tX3Njb3JlX2FkajsKLSAgLy8gUGFnZSBmYXVsdHMuCi0gIHVuc2lnbmVkIGxvbmcgbWlub3JfZmF1bHRzOwotICB1bnNpZ25lZCBsb25nIG1ham9yX2ZhdWx0czsKLSAgLy8gVGltZSBzcGVudCBpbiB1c2Vyc3BhY2UgYW5kIGluIHRoZSBrZXJuZWwuCi0gIHVuc2lnbmVkIGxvbmcgdXRpbWU7Ci0gIHVuc2lnbmVkIGxvbmcgc3RpbWU7Ci19OwotCi0jZW5kaWYgIC8vIFBST0NFU1NfSU5GT19IXwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvcHJvY2Vzc19tZW1vcnlfc3RhdHMuY2MgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9wcm9jZXNzX21lbW9yeV9zdGF0cy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEzZGMyMi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9wcm9jZXNzX21lbW9yeV9zdGF0cy5jYworKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJwcm9jZXNzX21lbW9yeV9zdGF0cy5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImZpbGVfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJtZW10cmFja193cmFwcGVyLmgiCi0jaW5jbHVkZSAibG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgewotCi1jb25zdCBpbnQga0tiUGVyUGFnZSA9IDQ7Ci0KLWNvbnN0IGNoYXIga1Jzc1tdID0gIlJzcyI7Ci1jb25zdCBjaGFyIGtQc3NbXSA9ICJQc3MiOwotY29uc3QgY2hhciBrU3dhcFtdID0gIlN3YXAiOwotY29uc3QgY2hhciBrU2hhcmVkQ2xlYW5bXSA9ICJTaGFyZWRfQ2xlYW4iOwotY29uc3QgY2hhciBrU2hhcmVkRGlydHlbXSA9ICJTaGFyZWRfRGlydHkiOwotY29uc3QgY2hhciBrUHJpdmF0ZUNsZWFuW10gPSAiUHJpdmF0ZV9DbGVhbiI7Ci1jb25zdCBjaGFyIGtQcml2YXRlRGlydHlbXSA9ICJQcml2YXRlX0RpcnR5IjsKLQotYm9vbCBSZWFkU21hcHNNZXRyaWMoCi0gICAgY29uc3QgY2hhciogbGluZSwgY29uc3QgY2hhciogbWV0cmljLCBpbnQgbWV0cmljX3NpemUsIHVpbnQ2NF90KiByZXMpIHsKLSAgaWYgKHN0cm5jbXAobGluZSwgbWV0cmljLCBtZXRyaWNfc2l6ZSAtIDEpKQotICAgIHJldHVybiBmYWxzZTsKLSAgaWYgKGxpbmVbbWV0cmljX3NpemUgLSAxXSAhPSAnOicpCi0gICAgcmV0dXJuIGZhbHNlOwotICAqcmVzID0gc3RydG91bGwobGluZSArIG1ldHJpY19zaXplLCBudWxscHRyLCAxMCk7Ci0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotYm9vbCBQcm9jZXNzTWVtb3J5U3RhdHM6OlJlYWRMaWdodFN0YXRzKGludCBwaWQpIHsKLSAgY2hhciBidWZbNjRdOwotICBpZiAoZmlsZV91dGlsczo6UmVhZFByb2NGaWxlKHBpZCwgInN0YXRtIiwgYnVmLCBzaXplb2YoYnVmKSkgPD0gMCkKLSAgICByZXR1cm4gZmFsc2U7Ci0gIHVpbnQzMl90IHZtX3NpemVfcGFnZXM7Ci0gIHVpbnQzMl90IHJzc19wYWdlczsKLSAgaW50IHJlcyA9IHNzY2FuZihidWYsICIldSAldSIsICZ2bV9zaXplX3BhZ2VzLCAmcnNzX3BhZ2VzKTsKLSAgQ0hFQ0socmVzID09IDIpOwotICByc3Nfa2JfID0gcnNzX3BhZ2VzICoga0tiUGVyUGFnZTsKLSAgdmlydF9rYl8gPSB2bV9zaXplX3BhZ2VzICoga0tiUGVyUGFnZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvY2Vzc01lbW9yeVN0YXRzOjpSZWFkRnVsbFN0YXRzKGludCBwaWQpIHsKLSAgY29uc3Qgc2l6ZV90IGtCdWZTaXplID0gOHUgKiAxMDI0ICogMTAyNDsKLSAgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gYnVmKG5ldyBjaGFyW2tCdWZTaXplXSk7Ci0gIHNzaXplX3QgcnNpemUgPSBmaWxlX3V0aWxzOjpSZWFkUHJvY0ZpbGUocGlkLCAic21hcHMiLCAmYnVmWzBdLCBrQnVmU2l6ZSk7Ci0gIGlmIChyc2l6ZSA8PSAwKQotICAgIHJldHVybiBmYWxzZTsKLSAgTW1hcEluZm8qIGxhc3RfbW1hcF9lbnRyeSA9IG51bGxwdHI7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxNbWFwSW5mbz4gbmV3X21tYXAobmV3IE1tYXBJbmZvKCkpOwotICBDSEVDSyhtbWFwc18uZW1wdHkoKSk7Ci0gIENIRUNLKHJzc19rYl8gPT0gMCk7Ci0KLSAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBsaW5lcyBpbiAvcHJvYy9QSUQvc21hcHMuCi0gIGZpbGVfdXRpbHM6OkxpbmVSZWFkZXIgcmQoJmJ1ZlswXSwgcnNpemUpOwotICBmb3IgKGNvbnN0IGNoYXIqIGxpbmUgPSByZC5OZXh0TGluZSgpOyBsaW5lOyBsaW5lID0gcmQuTmV4dExpbmUoKSkgewotICAgIGlmICghbGluZVswXSkKLSAgICAgIGNvbnRpbnVlOwotICAgIC8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiAoaGFjaykuCi0gICAgLy8gQW55IGhlYWRlciBsaW5lIHN0YXJ0cyB3aXRoIGxvd2VyY2FzZSBoZXggZGlnaXQgYnV0IHN1YnNlcXVlbnQgbGluZXMKLSAgICAvLyBzdGFydCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXIuCi0gICAgaWYgKGxpbmVbMF0gPCAnQScgfHwgbGluZVswXSA+ICdaJykgewotICAgICAgLy8gTm90ZSB0aGF0IHRoZSBtYXBwZWQgZmlsZSBuYW1lIChbc3RhY2tdKSBpcyBvcHRpb25hbCBhbmQgd29uJ3QgYmUKLSAgICAgIC8vIHByZXNlbnQgb24gYW5vbnltb3VzIG1lbW9yeSBtYXBzIChoZW5jZSByZXMgPj0gMyBiZWxvdykuCi0gICAgICBpbnQgcmVzID0gc3NjYW5mKGxpbmUsCi0gICAgICAgICAgIiVsbHgtJWxseCAlNHMgJSpsbHggJSpbOjAtOWEtZl0gJSpbMC05YS1mXSUqWyBcdF0lMTI3W15cbl0iLAotICAgICAgICAgICZuZXdfbW1hcC0+c3RhcnRfYWRkciwgJm5ld19tbWFwLT5lbmRfYWRkciwgbmV3X21tYXAtPnByb3RfZmxhZ3MsCi0gICAgICAgICAgbmV3X21tYXAtPm1hcHBlZF9maWxlKTsKLSAgICAgIGxhc3RfbW1hcF9lbnRyeSA9IG5ld19tbWFwLmdldCgpOwotICAgICAgQ0hFQ0sobmV3X21tYXAtPmVuZF9hZGRyID49IG5ld19tbWFwLT5zdGFydF9hZGRyKTsKLSAgICAgIG5ld19tbWFwLT52aXJ0X2tiID0KLSAgICAgICAgICAobmV3X21tYXAtPmVuZF9hZGRyIC0gbmV3X21tYXAtPnN0YXJ0X2FkZHIpIC8gMTAyNDsKLSAgICAgIGlmIChyZXMgPT0gMykKLSAgICAgICAgbmV3X21tYXAtPm1hcHBlZF9maWxlWzBdID0gJ1wwJzsKLSAgICAgIHZpcnRfa2JfICs9IG5ld19tbWFwLT52aXJ0X2tiOwotICAgICAgbW1hcHNfLnB1c2hfYmFjayhzdGQ6Om1vdmUobmV3X21tYXApKTsKLSAgICAgIG5ld19tbWFwLnJlc2V0KG5ldyBNbWFwSW5mbygpKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gVGhlIGN1cnJlbnQgbGluZSBpcyBhIG1ldHJpY3MgbGluZSB3aXRoaW4gYSBtbWFwIGVudHJ5LCBlLmcuOgotICAgICAgLy8gU2l6ZTogICA0IGtCCi0gICAgICB1aW50NjRfdCBzaXplID0gMDsKLSAgICAgIENIRUNLKGxhc3RfbW1hcF9lbnRyeSk7Ci0gICAgICBpZiAoUmVhZFNtYXBzTWV0cmljKGxpbmUsIGtSc3MsIHNpemVvZihrUnNzKSwgJnNpemUpKSB7Ci0gICAgICAgIGxhc3RfbW1hcF9lbnRyeS0+cnNzX2tiID0gc2l6ZTsKLSAgICAgICAgcnNzX2tiXyArPSBzaXplOwotICAgICAgfSBlbHNlIGlmIChSZWFkU21hcHNNZXRyaWMobGluZSwga1Bzcywgc2l6ZW9mKGtQc3MpLCAmc2l6ZSkpIHsKLSAgICAgICAgbGFzdF9tbWFwX2VudHJ5LT5wc3Nfa2IgPSBzaXplOwotICAgICAgICBwc3Nfa2JfICs9IHNpemU7Ci0gICAgICB9IGVsc2UgaWYgKFJlYWRTbWFwc01ldHJpYyhsaW5lLCBrU3dhcCwgc2l6ZW9mKGtTd2FwKSwgJnNpemUpKSB7Ci0gICAgICAgIGxhc3RfbW1hcF9lbnRyeS0+c3dhcHBlZF9rYiA9IHNpemU7Ci0gICAgICAgIHN3YXBwZWRfa2JfICs9IHNpemU7Ci0gICAgICB9IGVsc2UgaWYgKFJlYWRTbWFwc01ldHJpYygKLSAgICAgICAgICAgICAgICAgICAgIGxpbmUsIGtTaGFyZWRDbGVhbiwgc2l6ZW9mKGtTaGFyZWRDbGVhbiksICZzaXplKSkgewotICAgICAgICBsYXN0X21tYXBfZW50cnktPnNoYXJlZF9jbGVhbl9rYiA9IHNpemU7Ci0gICAgICAgIHNoYXJlZF9jbGVhbl9rYl8gKz0gc2l6ZTsKLSAgICAgIH0gZWxzZSBpZiAoUmVhZFNtYXBzTWV0cmljKAotICAgICAgICAgICAgICAgICAgICAgbGluZSwga1NoYXJlZERpcnR5LCBzaXplb2Yoa1NoYXJlZERpcnR5KSwgJnNpemUpKSB7Ci0gICAgICAgIGxhc3RfbW1hcF9lbnRyeS0+c2hhcmVkX2RpcnR5X2tiID0gc2l6ZTsKLSAgICAgICAgc2hhcmVkX2RpcnR5X2tiXyArPSBzaXplOwotICAgICAgfSBlbHNlIGlmIChSZWFkU21hcHNNZXRyaWMoCi0gICAgICAgICAgICAgICAgICAgICBsaW5lLCBrUHJpdmF0ZUNsZWFuLCBzaXplb2Yoa1ByaXZhdGVDbGVhbiksICZzaXplKSkgewotICAgICAgICBsYXN0X21tYXBfZW50cnktPnByaXZhdGVfY2xlYW5fa2IgPSBzaXplOwotICAgICAgICBwcml2YXRlX2NsZWFuX2tiXyArPSBzaXplOwotICAgICAgfSBlbHNlIGlmIChSZWFkU21hcHNNZXRyaWMoCi0gICAgICAgICAgICAgICAgICAgICBsaW5lLCBrUHJpdmF0ZURpcnR5LCBzaXplb2Yoa1ByaXZhdGVEaXJ0eSksICZzaXplKSkgewotICAgICAgICBsYXN0X21tYXBfZW50cnktPnByaXZhdGVfZGlydHlfa2IgPSBzaXplOwotICAgICAgICBwcml2YXRlX2RpcnR5X2tiXyArPSBzaXplOwotICAgICAgfQotICAgIH0KLSAgfQotICBmdWxsX3N0YXRzXyA9IHRydWU7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2Nlc3NNZW1vcnlTdGF0czo6UmVhZEdwdVN0YXRzKGludCBwaWQpIHsKLSAgTWVtdHJhY2tQcm9jIG10KHBpZCk7Ci0gIGdwdV9ncmFwaGljc19rYl8gPSBtdC5ncmFwaGljc190b3RhbCgpIC8gMTAyNDsKLSAgZ3B1X2dyYXBoaWNzX3Bzc19rYl8gPSBtdC5ncmFwaGljc19wc3MoKSAvIDEwMjQ7Ci0gIGdwdV9nbF9rYl8gPSBtdC5nbF90b3RhbCgpIC8gMTAyNDsKLSAgZ3B1X2dsX3Bzc19rYl8gPSBtdC5nbF9wc3MoKSAvIDEwMjQ7Ci0gIGdwdV9vdGhlcl9rYl8gPSBtdC5vdGhlcl90b3RhbCgpIC8gMTAyNDsKLSAgZ3B1X290aGVyX3Bzc19rYl8gPSBtdC5vdGhlcl9wc3MoKSAvIDEwMjQ7Ci0KLSAgZ3B1X3N0YXRzXyA9ICFtdC5oYXNfZXJyb3JzKCkgJiYKLSAgICAgIChncHVfZ3JhcGhpY3Nfa2JfICE9IDAgfHwgZ3B1X2dsX2tiXyAhPSAwIHx8IGdwdV9vdGhlcl9rYl8gIT0gMCk7Ci0gIHJldHVybiBncHVfc3RhdHNfOwotfQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvcHJvY2Vzc19tZW1vcnlfc3RhdHMuaCBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL3Byb2Nlc3NfbWVtb3J5X3N0YXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NTg0YWEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvcHJvY2Vzc19tZW1vcnlfc3RhdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBQUk9DRVNTX01FTU9SWV9TVEFUU19IXwotI2RlZmluZSBQUk9DRVNTX01FTU9SWV9TVEFUU19IXwotCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0vLyBSZWFkcyBwcm9jZXNzIG1lbW9yeSBzdGF0cyBmcm9tIC9wcm9jL3BpZC97c3RhdG0sc21hcHN9LgotY2xhc3MgUHJvY2Vzc01lbW9yeVN0YXRzIHsKLSBwdWJsaWM6Ci0gIHN0cnVjdCBNbWFwSW5mbyB7Ci0gICAgY2hhciBtYXBwZWRfZmlsZVsxMjhdID0ge307Ci0gICAgY2hhciBwcm90X2ZsYWdzWzVdID0ge307Ci0gICAgdWludDY0X3Qgc3RhcnRfYWRkciA9IDA7Ci0gICAgdWludDY0X3QgZW5kX2FkZHIgPSAwOwotICAgIHVpbnQ2NF90IHZpcnRfa2IgPSAwOwotICAgIHVpbnQ2NF90IHBzc19rYiA9IDA7ICAvLyBQcm9wb3J0aW9uYWwgU2V0IFNpemUuCi0gICAgdWludDY0X3QgcnNzX2tiID0gMDsgIC8vIFJlc2lkZW50IFNldCBTaXplLgotICAgIHVpbnQ2NF90IHByaXZhdGVfY2xlYW5fa2IgPSAwOwotICAgIHVpbnQ2NF90IHByaXZhdGVfZGlydHlfa2IgPSAwOwotICAgIHVpbnQ2NF90IHNoYXJlZF9jbGVhbl9rYiA9IDA7Ci0gICAgdWludDY0X3Qgc2hhcmVkX2RpcnR5X2tiID0gMDsKLSAgICB1aW50NjRfdCBzd2FwcGVkX2tiID0gMDsKLSAgfTsKLQotICBQcm9jZXNzTWVtb3J5U3RhdHMoKSB7fQotCi0gIGJvb2wgUmVhZExpZ2h0U3RhdHMoaW50IHBpZCk7Ci0gIGJvb2wgUmVhZEZ1bGxTdGF0cyhpbnQgcGlkKTsKLSAgYm9vbCBSZWFkR3B1U3RhdHMoaW50IHBpZCk7Ci0KLSAgLy8gQXZhaWxhYmxlIGFmdGVyIFJlYWRMaWdodFN0YXRzKCkuCi0gIHVpbnQ2NF90IHZpcnRfa2IoKSBjb25zdCB7IHJldHVybiB2aXJ0X2tiXzsgfQotICB1aW50NjRfdCByc3Nfa2IoKSBjb25zdCB7IHJldHVybiByc3Nfa2JfOyB9Ci0KLSAgLy8gQXZhaWxhYmxlIGFmdGVyIFJlYWRGdWxsU3RhdHMoKS4KLSAgYm9vbCBmdWxsX3N0YXRzX2F2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZ1bGxfc3RhdHNfOyB9Ci0gIHVpbnQ2NF90IHBzc19rYigpIGNvbnN0IHsgcmV0dXJuIHBzc19rYl87IH0KLSAgdWludDY0X3QgcHJpdmF0ZV9jbGVhbl9rYigpIGNvbnN0IHsgcmV0dXJuIHByaXZhdGVfY2xlYW5fa2JfOyB9Ci0gIHVpbnQ2NF90IHByaXZhdGVfZGlydHlfa2IoKSBjb25zdCB7IHJldHVybiBwcml2YXRlX2RpcnR5X2tiXzsgfQotICB1aW50NjRfdCBzaGFyZWRfY2xlYW5fa2IoKSBjb25zdCB7IHJldHVybiBzaGFyZWRfY2xlYW5fa2JfOyB9Ci0gIHVpbnQ2NF90IHNoYXJlZF9kaXJ0eV9rYigpIGNvbnN0IHsgcmV0dXJuIHNoYXJlZF9kaXJ0eV9rYl87IH0KLSAgdWludDY0X3Qgc3dhcHBlZF9rYigpIGNvbnN0IHsgcmV0dXJuIHN3YXBwZWRfa2JfOyB9Ci0KLSAgLy8gQXZhaWxhYmxlIGFmdGVyIFJlYWRNZW10cmFja1N0YXRzKCkuCi0gIGJvb2wgZ3B1X3N0YXRzX2F2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGdwdV9zdGF0c187IH0KLSAgdWludDY0X3QgZ3B1X2dyYXBoaWNzX2tiKCkgY29uc3QgeyByZXR1cm4gZ3B1X2dyYXBoaWNzX2tiXzsgfQotICB1aW50NjRfdCBncHVfZ3JhcGhpY3NfcHNzX2tiKCkgY29uc3QgeyByZXR1cm4gZ3B1X2dyYXBoaWNzX3Bzc19rYl87IH0KLSAgdWludDY0X3QgZ3B1X2dsX2tiKCkgY29uc3QgeyByZXR1cm4gZ3B1X2dsX2tiXzsgfQotICB1aW50NjRfdCBncHVfZ2xfcHNzX2tiKCkgY29uc3QgeyByZXR1cm4gZ3B1X2dsX3Bzc19rYl87IH0KLSAgdWludDY0X3QgZ3B1X290aGVyX2tiKCkgY29uc3QgeyByZXR1cm4gZ3B1X290aGVyX2tiXzsgfQotICB1aW50NjRfdCBncHVfb3RoZXJfcHNzX2tiKCkgY29uc3QgeyByZXR1cm4gZ3B1X290aGVyX3Bzc19rYl87IH0KLQotICBzaXplX3QgbW1hcHNfY291bnQoKSBjb25zdCB7IHJldHVybiBtbWFwc18uc2l6ZSgpOyB9Ci0gIGNvbnN0IE1tYXBJbmZvKiBtbWFwKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbW1hcHNfW2luZGV4XS5nZXQoKTsgfQotCi0gcHJpdmF0ZToKLSAgUHJvY2Vzc01lbW9yeVN0YXRzKGNvbnN0IFByb2Nlc3NNZW1vcnlTdGF0cyYpID0gZGVsZXRlOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBQcm9jZXNzTWVtb3J5U3RhdHMmKSA9IGRlbGV0ZTsKLQotICAvLyBMaWdodCBzdGF0cy4KLSAgdWludDY0X3QgdmlydF9rYl8gPSAwOwotICB1aW50NjRfdCByc3Nfa2JfID0gMDsKLQotICAvLyBGdWxsIHN0YXRzLgotICBib29sIGZ1bGxfc3RhdHNfID0gZmFsc2U7Ci0gIHVpbnQ2NF90IHBzc19rYl8gPSAwOwotICB1aW50NjRfdCBwcml2YXRlX2NsZWFuX2tiXyA9IDA7Ci0gIHVpbnQ2NF90IHByaXZhdGVfZGlydHlfa2JfID0gMDsKLSAgdWludDY0X3Qgc2hhcmVkX2NsZWFuX2tiXyA9IDA7Ci0gIHVpbnQ2NF90IHNoYXJlZF9kaXJ0eV9rYl8gPSAwOwotICB1aW50NjRfdCBzd2FwcGVkX2tiXyA9IDA7Ci0KLSAgLy8gR3JhcGhpY3Mgc3RhdHMuCi0gIGJvb2wgZ3B1X3N0YXRzXyA9IGZhbHNlOwotICB1aW50NjRfdCBncHVfZ3JhcGhpY3Nfa2JfID0gMDsKLSAgdWludDY0X3QgZ3B1X2dyYXBoaWNzX3Bzc19rYl8gPSAwOwotICB1aW50NjRfdCBncHVfZ2xfa2JfID0gMDsKLSAgdWludDY0X3QgZ3B1X2dsX3Bzc19rYl8gPSAwOwotICB1aW50NjRfdCBncHVfb3RoZXJfa2JfID0gMDsKLSAgdWludDY0X3QgZ3B1X290aGVyX3Bzc19rYl8gPSAwOwotCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBNbWFwSW5mbz4+IG1tYXBzXzsKLX07Ci0KLSNlbmRpZiAgLy8gUFJPQ0VTU19NRU1PUllfU1RBVFNfSF8KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL3Byb2Nmc191dGlscy5jYyBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL3Byb2Nmc191dGlscy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkZWEyOS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS9wcm9jZnNfdXRpbHMuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAicHJvY2ZzX3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZmlsZV91dGlscy5oIgotI2luY2x1ZGUgImxvZ2dpbmcuaCIKLQotdXNpbmcgZmlsZV91dGlsczo6Rm9yRWFjaFBpZEluUHJvY1BhdGg7Ci11c2luZyBmaWxlX3V0aWxzOjpSZWFkUHJvY0ZpbGU7Ci11c2luZyBmaWxlX3V0aWxzOjpSZWFkUHJvY0ZpbGVUcmltbWVkOwotCi1uYW1lc3BhY2UgcHJvY2ZzX3V0aWxzIHsKLQotbmFtZXNwYWNlIHsKLQotY29uc3QgY2hhciBrSmF2YUFwcFByZWZpeFtdID0gIi9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzIjsKLWNvbnN0IGNoYXIga1p5Z290ZVByZWZpeFtdID0gInp5Z290ZSI7Ci0KLWlubGluZSB2b2lkIFJlYWRQcm9jU3RyaW5nKGludCBwaWQsIGNvbnN0IGNoYXIqIHBhdGgsIGNoYXIqIGJ1Ziwgc2l6ZV90IHNpemUpIHsKLSAgaWYgKCFmaWxlX3V0aWxzOjpSZWFkUHJvY0ZpbGVUcmltbWVkKHBpZCwgcGF0aCwgYnVmLCBzaXplKSkKLSAgICBidWZbMF0gPSAnXDAnOwotfQotCi1pbmxpbmUgdm9pZCBSZWFkRXhlUGF0aChpbnQgcGlkLCBjaGFyKiBidWYsIHNpemVfdCBzaXplKSB7Ci0gIGNoYXIgZXhlX3BhdGhbNjRdOwotICBzcHJpbnRmKGV4ZV9wYXRoLCAiL3Byb2MvJWQvZXhlIiwgcGlkKTsKLSAgc3NpemVfdCByZXMgPSByZWFkbGluayhleGVfcGF0aCwgYnVmLCBzaXplIC0gMSk7Ci0gIGlmIChyZXMgPj0gMCkKLSAgICBidWZbcmVzXSA9ICdcMCc7Ci0gIGVsc2UKLSAgICBidWZbMF0gPSAnXDAnOwotfQotCi1pbmxpbmUgYm9vbCBJc0FwcChjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBleGUpIHsKLSAgcmV0dXJuIHN0cm5jbXAoZXhlLCBrSmF2YUFwcFByZWZpeCwgc2l6ZW9mKGtKYXZhQXBwUHJlZml4KSAtIDEpID09IDAgJiYKLSAgICAgICAgIHN0cm5jbXAobmFtZSwga1p5Z290ZVByZWZpeCwgc2l6ZW9mKGtaeWdvdGVQcmVmaXgpIC0gMSkgIT0gMDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLWludCBSZWFkVGdpZChpbnQgcGlkKSB7Ci0gIHN0YXRpYyBjb25zdCBjaGFyIGtUZ2lkW10gPSAiXG5UZ2lkOiI7Ci0gIGNoYXIgYnVmWzUxMl07Ci0gIHNzaXplX3QgcnNpemUgPSBSZWFkUHJvY0ZpbGUocGlkLCAic3RhdHVzIiwgYnVmLCBzaXplb2YoYnVmKSk7Ci0gIGlmIChyc2l6ZSA8PSAwKQotICAgIHJldHVybiAtMTsKLSAgY29uc3QgY2hhciogdGdpZF9saW5lID0gc3Ryc3RyKGJ1Ziwga1RnaWQpOwotICBDSEVDSyh0Z2lkX2xpbmUpOwotICByZXR1cm4gYXRvaSh0Z2lkX2xpbmUgKyBzaXplb2Yoa1RnaWQpIC0gMSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzSW5mbz4gUmVhZFByb2Nlc3NJbmZvKGludCBwaWQpIHsKLSAgUHJvY2Vzc0luZm8qIHByb2Nlc3MgPSBuZXcgUHJvY2Vzc0luZm8oKTsKLSAgcHJvY2Vzcy0+cGlkID0gcGlkOwotICBSZWFkUHJvY1N0cmluZyhwaWQsICJjbWRsaW5lIiwgcHJvY2Vzcy0+bmFtZSwgc2l6ZW9mKHByb2Nlc3MtPm5hbWUpKTsKLSAgaWYgKHByb2Nlc3MtPm5hbWVbMF0gIT0gMCkgewotICAgIFJlYWRFeGVQYXRoKHBpZCwgcHJvY2Vzcy0+ZXhlLCBzaXplb2YocHJvY2Vzcy0+ZXhlKSk7Ci0gICAgcHJvY2Vzcy0+aXNfYXBwID0gSXNBcHAocHJvY2Vzcy0+bmFtZSwgcHJvY2Vzcy0+ZXhlKTsKLSAgfSBlbHNlIHsKLSAgICBSZWFkUHJvY1N0cmluZyhwaWQsICJjb21tIiwgcHJvY2Vzcy0+bmFtZSwgc2l6ZW9mKHByb2Nlc3MtPm5hbWUpKTsKLSAgICBDSEVDSyhwcm9jZXNzLT5uYW1lWzBdKTsKLSAgICBwcm9jZXNzLT5pbl9rZXJuZWwgPSB0cnVlOwotICB9Ci0gIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc0luZm8+KHByb2Nlc3MpOwotfQotCi12b2lkIFJlYWRQcm9jZXNzVGhyZWFkcyhQcm9jZXNzSW5mbyogcHJvY2VzcykgewotICBpZiAocHJvY2Vzcy0+aW5fa2VybmVsKQotICAgIHJldHVybjsKLQotICBjaGFyIHRhc2tzX3BhdGhbNjRdOwotICBzcHJpbnRmKHRhc2tzX3BhdGgsICIvcHJvYy8lZC90YXNrIiwgcHJvY2Vzcy0+cGlkKTsKLSAgRm9yRWFjaFBpZEluUHJvY1BhdGgodGFza3NfcGF0aCwgW3Byb2Nlc3NdKGludCB0aWQpIHsKLSAgICBpZiAocHJvY2Vzcy0+dGhyZWFkcy5jb3VudCh0aWQpKQotICAgICAgcmV0dXJuOwotICAgIFRocmVhZEluZm8gdGhyZWFkID0geyB0aWQsICIiIH07Ci0gICAgY2hhciB0YXNrX2NvbW1bNjRdOwotICAgIHNwcmludGYodGFza19jb21tLCAidGFzay8lZC9jb21tIiwgdGlkKTsKLSAgICBSZWFkUHJvY1N0cmluZyhwcm9jZXNzLT5waWQsIHRhc2tfY29tbSwgdGhyZWFkLm5hbWUsIHNpemVvZih0aHJlYWQubmFtZSkpOwotICAgIGlmICh0aHJlYWQubmFtZVswXSA9PSAnXDAnICYmIHByb2Nlc3MtPmlzX2FwcCkKLSAgICAgIHN0cmNweSh0aHJlYWQubmFtZSwgIlVJIFRocmVhZCIpOwotICAgIHByb2Nlc3MtPnRocmVhZHNbdGlkXSA9IHRocmVhZDsKLSAgfSk7Ci19Ci0KLWJvb2wgUmVhZE9vbVN0YXRzKFByb2Nlc3NTbmFwc2hvdCogc25hcHNob3QpIHsKLSAgY2hhciBidWZbNjRdOwotICBpZiAoUmVhZFByb2NGaWxlVHJpbW1lZChzbmFwc2hvdC0+cGlkLCAib29tX3Njb3JlIiwgYnVmLCBzaXplb2YoYnVmKSkpCi0gICAgc25hcHNob3QtPm9vbV9zY29yZSA9IGF0b2koYnVmKTsKLSAgZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgaWYgKFJlYWRQcm9jRmlsZVRyaW1tZWQoc25hcHNob3QtPnBpZCwgIm9vbV9zY29yZV9hZGoiLCBidWYsIHNpemVvZihidWYpKSkKLSAgICBzbmFwc2hvdC0+b29tX3Njb3JlX2FkaiA9IGF0b2koYnVmKTsKLSAgZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVhZFBhZ2VGYXVsdHNBbmRDcHVUaW1lU3RhdHMoUHJvY2Vzc1NuYXBzaG90KiBzbmFwc2hvdCkgewotICBjaGFyIGJ1Zls1MTJdOwotICBpZiAoIVJlYWRQcm9jRmlsZVRyaW1tZWQoc25hcHNob3QtPnBpZCwgInN0YXQiLCBidWYsIHNpemVvZihidWYpKSkKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGludCByZXQgPSBzc2NhbmYoYnVmLAotICAgICAgIiUqZCAoJSpbXildKSAlKmMgJSpkICUqZCAlKmQgJSpkICUqZCAlKnUgJWx1ICUqbHUgJWx1ICUqbHUgJWx1ICVsdSIsCi0gICAgICAmc25hcHNob3QtPm1pbm9yX2ZhdWx0cywgJnNuYXBzaG90LT5tYWpvcl9mYXVsdHMsCi0gICAgICAmc25hcHNob3QtPnV0aW1lLCAmc25hcHNob3QtPnN0aW1lKTsKLSAgQ0hFQ0socmV0ID09IDQpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZWFkTWVtSW5mb1N0YXRzKHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCB1aW50NjRfdD4qIG1lbV9pbmZvKSB7Ci0gIGNoYXIgYnVmWzEwMjRdOwotICBzc2l6ZV90IHJzaXplID0gZmlsZV91dGlsczo6UmVhZEZpbGUoIi9wcm9jL21lbWluZm8iLCBidWYsIHNpemVvZihidWYpKTsKLSAgaWYgKHJzaXplIDw9IDApCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGZpbGVfdXRpbHM6OkxpbmVSZWFkZXIgcmVhZGVyKGJ1ZiwgcnNpemUpOwotICBmb3IgKGNvbnN0IGNoYXIqIGxpbmUgPSByZWFkZXIuTmV4dExpbmUoKTsKLSAgICAgICBsaW5lICYmIGxpbmVbMF07Ci0gICAgICAgbGluZSA9IHJlYWRlci5OZXh0TGluZSgpKSB7Ci0KLSAgICBjb25zdCBjaGFyKiBwb3NfY29sb24gPSBzdHJzdHIobGluZSwgIjoiKTsKLSAgICBpZiAocG9zX2NvbG9uID09IG51bGxwdHIpCi0gICAgICBjb250aW51ZTsgIC8vIFNob3VsZCBub3QgaGFwcGVuLgotICAgIHN0ZDo6c3RyaW5nIG5hbWUobGluZSwgcG9zX2NvbG9uIC0gbGluZSk7Ci0gICAgKCptZW1faW5mbylbbmFtZV0gPSBzdHJ0b3VsbCgmcG9zX2NvbG9uWzFdLCBudWxscHRyLCAxMCk7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm9jZnNfdXRpbHMKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL3Byb2Nmc191dGlscy5oIGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvcHJvY2ZzX3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1Y2U3MDQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvcHJvY2ZzX3V0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgUFJPQ0ZTX1VUSUxTX0hfCi0jZGVmaW5lIFBST0NGU19VVElMU19IXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJwcm9jZXNzX2luZm8uaCIKLQotbmFtZXNwYWNlIHByb2Nmc191dGlscyB7Ci0KLS8vIFByb2NGUyBkb2Vzbid0IG5lY2Vzc2FybHkgZGlzdGluZ3Vpc2ggUElEIHZzLiBUSUQsIGJ1dCBhbGwgdGhyZWFkcyBvZiBhCi0vLyBwcm9jZXNzIGhhdmUgdGhlIHNhbWUgVGhyZWFkIEdyb3VwIElEIHdoaWNoIGlzIGVxdWFsIHRvIFByb2Nlc3MgSUQuCi1pbnQgUmVhZFRnaWQoaW50IHBpZCk7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzSW5mbz4gUmVhZFByb2Nlc3NJbmZvKGludCBwaWQpOwotdm9pZCBSZWFkUHJvY2Vzc1RocmVhZHMoUHJvY2Vzc0luZm8qIHByb2Nlc3MpOwotCi1ib29sIFJlYWRPb21TdGF0cyhQcm9jZXNzU25hcHNob3QqIHNuYXBzaG90KTsKLWJvb2wgUmVhZFBhZ2VGYXVsdHNBbmRDcHVUaW1lU3RhdHMoUHJvY2Vzc1NuYXBzaG90KiBzbmFwc2hvdCk7Ci0KLWJvb2wgUmVhZE1lbUluZm9TdGF0cyhzdGQ6Om1hcDxzdGQ6OnN0cmluZywgdWludDY0X3Q+KiBtZW1faW5mbyk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcm9jZnNfdXRpbHMKLQotI2VuZGlmICAvLyBQUk9DRlNfVVRJTFNfSF8KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL3RpbWVfdXRpbHMuY2MgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS90aW1lX3V0aWxzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGE3ZDc5Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2F0cmFjZV9oZWxwZXIvam5pL3RpbWVfdXRpbHMuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJ0aW1lX3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHN5cy90aW1lcmZkLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotCi0jaW5jbHVkZSAibG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgdGltZV91dGlscyB7Ci0KLXVpbnQ2NF90IEdldFRpbWVzdGFtcCgpIHsKLSAgc3RydWN0IHRpbWVzcGVjIHRzID0ge307Ci0gIENIRUNLKGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSwgJnRzKSA9PSAwKTsKLSAgcmV0dXJuIHRzLnR2X3NlYyAqIDEwMDAgKyB0cy50dl9uc2VjIC8gMTAwMDAwMHVsOwotfQotCi1QZXJpb2RpY1RpbWVyOjpQZXJpb2RpY1RpbWVyKGludCBpbnRlcnZhbF9tcykgOiBpbnRlcnZhbF9tc18oaW50ZXJ2YWxfbXMpIHsKLSAgdGltZXJfZmRfID0gLTE7Ci19Ci0KLVBlcmlvZGljVGltZXI6On5QZXJpb2RpY1RpbWVyKCkgewotICBTdG9wKCk7Ci19Ci0KLXZvaWQgUGVyaW9kaWNUaW1lcjo6U3RhcnQoKSB7Ci0gIFN0b3AoKTsKLSAgdGltZXJfZmRfID0gdGltZXJmZF9jcmVhdGUoQ0xPQ0tfTU9OT1RPTklDLCAwKTsKLSAgQ0hFQ0sodGltZXJfZmRfID49IDApOwotICBpbnQgc2VjID0gaW50ZXJ2YWxfbXNfIC8gMTAwMDsKLSAgaW50IG5zZWMgPSAoaW50ZXJ2YWxfbXNfICUgMTAwMCkgKiAxMDAwMDAwOwotICBzdHJ1Y3QgaXRpbWVyc3BlYyB0cyA9IHt9OwotICB0cy5pdF92YWx1ZS50dl9uc2VjID0gbnNlYzsKLSAgdHMuaXRfdmFsdWUudHZfc2VjID0gc2VjOwotICB0cy5pdF9pbnRlcnZhbC50dl9uc2VjID0gbnNlYzsKLSAgdHMuaXRfaW50ZXJ2YWwudHZfc2VjID0gc2VjOwotICBDSEVDSyh0aW1lcmZkX3NldHRpbWUodGltZXJfZmRfLCAwLCAmdHMsIG51bGxwdHIpID09IDApOwotfQotCi12b2lkIFBlcmlvZGljVGltZXI6OlN0b3AoKSB7Ci0gIGlmICh0aW1lcl9mZF8gPCAwKQotICAgIHJldHVybjsKLSAgY2xvc2UodGltZXJfZmRfKTsKLSAgdGltZXJfZmRfID0gLTE7Ci19Ci0KLWJvb2wgUGVyaW9kaWNUaW1lcjo6V2FpdCgpIHsKLSAgaWYgKHRpbWVyX2ZkXyA8IDApCi0gICAgcmV0dXJuIGZhbHNlOyAgLy8gTm90IHN0YXJ0ZWQgeWV0LgotICB1aW50NjRfdCBzdHViID0gMDsKLSAgaW50IHJlcyA9IHJlYWQodGltZXJfZmRfLCAmc3R1Yiwgc2l6ZW9mKHN0dWIpKTsKLSAgaWYgKHJlcyA8IDAgJiYgZXJybm8gPT0gRUJBREYpCi0gICAgcmV0dXJuIGZhbHNlOyAgLy8gSW50ZXJydXB0ZWQgYnkgU3RvcCgpLgotICBDSEVDSyhyZXMgPiAwKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB0aW1lX3V0aWxzCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS90aW1lX3V0aWxzLmggYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9hdHJhY2VfaGVscGVyL2puaS90aW1lX3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMTk2MDEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYXRyYWNlX2hlbHBlci9qbmkvdGltZV91dGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIFRJTUVfVVRJTFNfSF8KLSNkZWZpbmUgVElNRV9VVElMU19IXwotCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLW5hbWVzcGFjZSB0aW1lX3V0aWxzIHsKLQotdWludDY0X3QgR2V0VGltZXN0YW1wKCk7Ci0KLWNsYXNzIFBlcmlvZGljVGltZXIgewotIHB1YmxpYzoKLSAgUGVyaW9kaWNUaW1lcihpbnQgaW50ZXJ2YWxfbXMpOwotICB+UGVyaW9kaWNUaW1lcigpOwotCi0gIHZvaWQgU3RhcnQoKTsKLSAgdm9pZCBTdG9wKCk7Ci0gIC8vIFdhaXQgZm9yIG5leHQgdGljay4gUmV0dXJucyBmYWxzZSBpZiBpbnRlcnJ1cHRlZCBieSBTdG9wKCkgb3Igbm90IHN0YXJ0ZWQuCi0gIGJvb2wgV2FpdCgpOwotCi0gcHJpdmF0ZToKLSAgUGVyaW9kaWNUaW1lcihjb25zdCBQZXJpb2RpY1RpbWVyJikgPSBkZWxldGU7Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFBlcmlvZGljVGltZXImKSA9IGRlbGV0ZTsKLQotICBjb25zdCBpbnQgaW50ZXJ2YWxfbXNfOwotICBpbnQgdGltZXJfZmRfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHRpbWVfdXRpbHMKLQotI2VuZGlmICAvLyBUSU1FX1VUSUxTXwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYmluL2FkYl9wcm9maWxlX2Nocm9tZSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2Jpbi9hZGJfcHJvZmlsZV9jaHJvbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDUyMzFjOGYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYmluL2FkYl9wcm9maWxlX2Nocm9tZQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXN0cmFjZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nKSkKLSAgc3lzLnBhdGguYXBwZW5kKHN5c3RyYWNlX3BhdGgpCi0gIGZyb20gcHJvZmlsZV9jaHJvbWUgaW1wb3J0IG1haW4KLSAgc3lzLmV4aXQobWFpbi5tYWluKCkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9iaW4vYWRiX3Byb2ZpbGVfY2hyb21lX3N0YXJ0dXAgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9iaW4vYWRiX3Byb2ZpbGVfY2hyb21lX3N0YXJ0dXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDZiZDMyNzAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYmluL2FkYl9wcm9maWxlX2Nocm9tZV9zdGFydHVwCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB3ZWJicm93c2VyCi0KLV9TWVNUUkFDRV9ESVIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicpKQotc3lzLnBhdGguYXBwZW5kKF9TWVNUUkFDRV9ESVIpCi0KLWZyb20gcHJvZmlsZV9jaHJvbWUgaW1wb3J0IGNocm9tZV9zdGFydHVwX3RyYWNpbmdfYWdlbnQKLWZyb20gcHJvZmlsZV9jaHJvbWUgaW1wb3J0IGZsYWdzCi1mcm9tIHByb2ZpbGVfY2hyb21lIGltcG9ydCBwcm9maWxlcgotZnJvbSBwcm9maWxlX2Nocm9tZSBpbXBvcnQgdWkKLWZyb20gc3lzdHJhY2UgaW1wb3J0IHV0aWwKLWZyb20gc3lzdHJhY2UudHJhY2luZ19hZ2VudHMgaW1wb3J0IGF0cmFjZV9hZ2VudAotCi1fQ0FUQVBVTFRfRElSID0gb3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgJy4uJywgJy4uJykKLXN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4oX0NBVEFQVUxUX0RJUiwgJ2RldmlsJykpCi0KLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3V0aWxzCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBhZGJfd3JhcHBlcgotCi0KLV9DSFJPTUVfU1RBUlRVUF9NT0RVTEVTID0gW2F0cmFjZV9hZ2VudCwgY2hyb21lX3N0YXJ0dXBfdHJhY2luZ19hZ2VudF0KLV9ERUZBVUxUX0NIUk9NRV9DQVRFR09SSUVTID0gJ19ERUZBVUxUX0NIUk9NRV9DQVRFR09SSUVTJwotCi0KLWRlZiBfQ3JlYXRlT3B0aW9uUGFyc2VyKCk6Ci0gIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihkZXNjcmlwdGlvbj0nUmVjb3JkIGFib3V0Oi8vdHJhY2luZyBwcm9maWxlcyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbSBBbmRyb2lkIGJyb3dzZXJzIHN0YXJ0dXAsIGNvbWJpbmVkIHdpdGggJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FuZHJvaWQgc3lzdHJhY2UuIFNlZSBodHRwOi8vZGV2LmNocm9taXVtLm9yZycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvZGV2ZWxvcGVycy9ob3ctdG9zL3RyYWNlLWV2ZW50LXByb2ZpbGluZy0nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG9vbCBmb3IgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zIGZvciAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvZmlsaW5nLicsIGNvbmZsaWN0X2hhbmRsZXI9J3Jlc29sdmUnKQotICBwYXJzZXIgPSB1dGlsLmdldF9tYWluX29wdGlvbnMocGFyc2VyKQotCi0gIGJyb3dzZXJzID0gc29ydGVkKHV0aWwuZ2V0X3N1cHBvcnRlZF9icm93c2VycygpLmtleXMoKSkKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy1iJywgJy0tYnJvd3NlcicsIGhlbHA9J1NlbGVjdCBhbW9uZyBpbnN0YWxsZWQgYnJvd3NlcnMuICcKLSAgICAgICAgICAgICAgICAgICAgJ09uZSBvZiAnICsgJywgJy5qb2luKGJyb3dzZXJzKSArICcsICJzdGFibGUiIGlzIHVzZWQgYnkgJwotICAgICAgICAgICAgICAgICAgICAnZGVmYXVsdC4nLCB0eXBlPSdjaG9pY2UnLCBjaG9pY2VzPWJyb3dzZXJzLAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSdzdGFibGUnKQotICBwYXJzZXIuYWRkX29wdGlvbignLXYnLCAnLS12ZXJib3NlJywgaGVscD0nVmVyYm9zZSBsb2dnaW5nLicsCi0gICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCcteicsICctLWNvbXByZXNzJywgaGVscD0nQ29tcHJlc3MgdGhlIHJlc3VsdGluZyB0cmFjZSAnCi0gICAgICAgICAgICAgICAgICAgICd3aXRoIGd6aXAuICcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCctdCcsICctLXRpbWUnLCBoZWxwPSdTdG9wcyB0cmFjaW5nIGFmdGVyIE4gc2Vjb25kcywgMCB0byAnCi0gICAgICAgICAgICAgICAgICAgICdtYW51YWxseSBzdG9wIChzdGFydHVwIHRyYWNlIGVuZHMgYWZ0ZXIgYXQgbW9zdCA1cykuJywKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD01LCBtZXRhdmFyPSdOJywgdHlwZT0naW50JywgZGVzdD0ndHJhY2VfdGltZScpCi0KLSAgcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAoY2hyb21lX3N0YXJ0dXBfdHJhY2luZ19hZ2VudC5hZGRfb3B0aW9ucyhwYXJzZXIpKQotICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cChhdHJhY2VfYWdlbnQuYWRkX29wdGlvbnMocGFyc2VyKSkKLSAgcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAoZmxhZ3MuT3V0cHV0T3B0aW9ucyhwYXJzZXIpKQotCi0gIHJldHVybiBwYXJzZXIKLQotCi1kZWYgbWFpbigpOgotICBwYXJzZXIgPSBfQ3JlYXRlT3B0aW9uUGFyc2VyKCkKLSAgb3B0aW9ucywgXyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLQotICBpZiBub3Qgb3B0aW9ucy5kZXZpY2Vfc2VyaWFsX251bWJlcjoKLSAgICBkZXZpY2VzID0gW2EuR2V0RGV2aWNlU2VyaWFsKCkgZm9yIGEgaW4gYWRiX3dyYXBwZXIuQWRiV3JhcHBlci5EZXZpY2VzKCldCi0gICAgaWYgbGVuKGRldmljZXMpID09IDA6Ci0gICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ05vIEFEQiBkZXZpY2VzIGNvbm5lY3RlZC4nKQotICAgIGVsaWYgbGVuKGRldmljZXMpID49IDI6Ci0gICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ011bHRpcGxlIGRldmljZXMgY29ubmVjdGVkLCBzZXJpYWwgbnVtYmVyIHJlcXVpcmVkJykKLSAgICBvcHRpb25zLmRldmljZV9zZXJpYWxfbnVtYmVyID0gZGV2aWNlc1swXQotCi0gIGlmIG9wdGlvbnMudmVyYm9zZToKLSAgICBsb2dnaW5nLmdldExvZ2dlcigpLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0KLSAgZGV2aWNlcyA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscy5IZWFsdGh5RGV2aWNlcygpCi0gIGlmIGxlbihkZXZpY2VzKSAhPSAxOgotICAgIGxvZ2dpbmcuZXJyb3IoJ0V4YWN0bHkgMSBkZXZpY2UgbXVzdCBiZSBhdHRhY2hlZC4nKQotICAgIHJldHVybiAxCi0gIGRldmljZSA9IGRldmljZXNbMF0KLSAgcGFja2FnZV9pbmZvID0gdXRpbC5nZXRfc3VwcG9ydGVkX2Jyb3dzZXJzKClbb3B0aW9ucy5icm93c2VyXQotCi0gIG9wdGlvbnMuZGV2aWNlID0gZGV2aWNlCi0gIG9wdGlvbnMucGFja2FnZV9pbmZvID0gcGFja2FnZV9pbmZvCi0KLSAgIyBUT0RPKHdhc2hpbmd0b25wKTogT25jZSBTeXN0cmFjZSB1c2VzIGFsbCBvZiB0aGUgcHJvZmlsZV9jaHJvbWUgYWdlbnRzLAotICAjIG1hbnVhbGx5IHNldHRpbmcgdGhlc2Ugb3B0aW9ucyB3aWxsIG5vIGxvbmdlciBiZSBuZWNlc3NhcnkgYW5kIHNob3VsZCBiZQotICAjIHJlbW92ZWQuCi0gIG9wdGlvbnMucmluZ19idWZmZXIgPSBGYWxzZQotICBvcHRpb25zLnRyYWNlX21lbW9yeSA9IEZhbHNlCi0gIG9wdGlvbnMuY2hyb21lX2NhdGVnb3JpZXMgPSBfREVGQVVMVF9DSFJPTUVfQ0FURUdPUklFUwotCi0gIGlmIG9wdGlvbnMuYXRyYWNlX2NhdGVnb3JpZXMgaW4gWydsaXN0JywgJ2hlbHAnXToKLSAgICBhdHJhY2VfYWdlbnQubGlzdF9jYXRlZ29yaWVzKGF0cmFjZV9hZ2VudC5nZXRfY29uZmlnKG9wdGlvbnMpKQotICAgIHByaW50ICdcbicKLSAgICByZXR1cm4gMAotICByZXN1bHQgPSBwcm9maWxlci5DYXB0dXJlUHJvZmlsZShvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRyYWNlX3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DSFJPTUVfU1RBUlRVUF9NT0RVTEVTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQ9b3B0aW9ucy5vdXRwdXRfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3M9b3B0aW9ucy5jb21wcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfanNvbj1vcHRpb25zLndyaXRlX2pzb24pCi0gIGlmIG9wdGlvbnMudmlldzoKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICBvcy5zeXN0ZW0oJy91c3IvYmluL29wZW4gJXMnICUgb3MucGF0aC5hYnNwYXRoKHJlc3VsdCkpCi0gICAgZWxzZToKLSAgICAgIHdlYmJyb3dzZXIub3BlbihyZXN1bHQpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYmluL3J1bl90ZXN0cyBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL2Jpbi9ydW5fdGVzdHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDQ5NDRjMzYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYmluL3J1bl90ZXN0cworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbjIuNwotCi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlJ1bnMgdGhlIHVuaXQgdGVzdCBzdWl0ZSBmb3Igc3lzdHJhY2UuIiIiCi0KLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLQotX1NZU1RSQUNFX0RJUiA9IG9zLnBhdGguYWJzcGF0aCgKLSAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgb3MucGF0aC5wYXJkaXIpKQotc3lzLnBhdGguaW5zZXJ0KDAsIF9TWVNUUkFDRV9ESVIpCi1mcm9tIHN5c3RyYWNlIGltcG9ydCBkZWNvcmF0b3JzCi0KLQotZGVmIG1haW4oKToKLSAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKLSAgcGFyc2VyLmFkZF9vcHRpb24oIi1kIiwgIi0tZGV2aWNlIiwgZGVzdD0iZGV2aWNlIiwKLSAgICAgICAgICAgICAgICAgICAgaGVscD0iZGV2aWNlIHRoZSB0ZXN0IHJ1bnMgb24iLCBtZXRhdmFyPSJERVZJQ0UiKQotICBvcHRpb25zLCBfYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC12YXJpYWJsZQotICB1bmZpbHRlcmVkX3N1aXRlID0gdW5pdHRlc3QuVGVzdExvYWRlcigpLmRpc2NvdmVyKAotICAgICAgX1NZU1RSQUNFX0RJUiwKLSAgICAgIHBhdHRlcm4gPSAnKl91bml0dGVzdC5weScsCi0gICAgICB0b3BfbGV2ZWxfZGlyPV9TWVNUUkFDRV9ESVIpCi0gIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLQotICBmb3IgdGVzdF9ncm91cCBpbiB1bmZpbHRlcmVkX3N1aXRlLl90ZXN0czoKLSAgICBmb3IgaW5uZXJfZ3JvdXAgaW4gdGVzdF9ncm91cDoKLSAgICAgIGZvciB0ZXN0IGluIGlubmVyX2dyb3VwOgotICAgICAgICBtZXRob2QgPSBnZXRhdHRyKAotICAgICAgICAgIHRlc3QsIHRlc3QuX3Rlc3RNZXRob2ROYW1lKSAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwotICAgICAgICBpZiBub3QgZGVjb3JhdG9ycy5TaG91bGRTa2lwKG1ldGhvZCwgb3B0aW9ucy5kZXZpY2UpOgotICAgICAgICAgIHN1aXRlLmFkZFRlc3QodGVzdCkKLQotICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcih2ZXJib3NpdHk9MikucnVuKHN1aXRlKQotICBpZiByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpOgotICAgIHN5cy5leGl0KDApCi0gIGVsc2U6Ci0gICAgc3lzLmV4aXQoMSkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgbWFpbigpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9iaW4vc3lzdHJhY2UgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9iaW4vc3lzdHJhY2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGJjZTg2YTcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvYmluL3N5c3RyYWNlCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLV9TWVNUUkFDRV9ESVIgPSBvcy5wYXRoLmFic3BhdGgoCi0gICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIG9zLnBhdGgucGFyZGlyKSkKLXN5cy5wYXRoLmluc2VydCgwLCBfU1lTVFJBQ0VfRElSKQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgcnVuX3N5c3RyYWNlCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5leGl0KHJ1bl9zeXN0cmFjZS5tYWluKCkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjU3NjgxLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotCi1fQ0FUQVBVTFRfRElSID0gb3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgJy4uJywgJy4uJykKLXN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4oX0NBVEFQVUxUX0RJUiwgJ2RldmlsJykpCi1zeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKF9DQVRBUFVMVF9ESVIsICdzeXN0cmFjZScpKQotc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguam9pbihfQ0FUQVBVTFRfRElSLCAnY29tbW9uJywgJ3B5X3V0aWxzJykpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9jaHJvbWVfc3RhcnR1cF90cmFjaW5nX2FnZW50LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvY2hyb21lX3N0YXJ0dXBfdHJhY2luZ19hZ2VudC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM4OWMxNS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9jaHJvbWVfc3RhcnR1cF90cmFjaW5nX2FnZW50LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IG9zCi1pbXBvcnQgcHlfdXRpbHMKLWltcG9ydCByZQotCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGZsYWdfY2hhbmdlcgotZnJvbSBkZXZpbC5hbmRyb2lkLmNvbnN0YW50cyBpbXBvcnQgd2ViYXBrCi1mcm9tIGRldmlsLmFuZHJvaWQucGVyZiBpbXBvcnQgY2FjaGVfY29udHJvbAotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgaW50ZW50Ci0KLWZyb20gc3lzdHJhY2UgaW1wb3J0IHRyYWNlX3Jlc3VsdAotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2luZ19hZ2VudHMKLQotCi1jbGFzcyBDaHJvbWVTdGFydHVwVHJhY2luZ0FnZW50KHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdBZ2VudCk6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2UsIHBhY2thZ2VfaW5mbywgd2ViYXBrX3BhY2thZ2UsIGNvbGQsIHVybCwKLSAgICAgICAgICAgICAgIHRyYWNlX3RpbWU9Tm9uZSk6Ci0gICAgdHJhY2luZ19hZ2VudHMuVHJhY2luZ0FnZW50Ll9faW5pdF9fKHNlbGYpCi0gICAgc2VsZi5fZGV2aWNlID0gZGV2aWNlCi0gICAgc2VsZi5fcGFja2FnZV9pbmZvID0gcGFja2FnZV9pbmZvCi0gICAgc2VsZi5fd2ViYXBrX3BhY2thZ2UgPSB3ZWJhcGtfcGFja2FnZQotICAgIHNlbGYuX2NvbGQgPSBjb2xkCi0gICAgc2VsZi5fbG9nY2F0X21vbml0b3IgPSBzZWxmLl9kZXZpY2UuR2V0TG9nY2F0TW9uaXRvcigpCi0gICAgc2VsZi5fdXJsID0gdXJsCi0gICAgc2VsZi5fdHJhY2VfdGltZSA9IHRyYWNlX3RpbWUKLSAgICBzZWxmLl90cmFjZV9maWxlID0gTm9uZQotICAgIHNlbGYuX3RyYWNlX2ZpbmlzaF9yZSA9IHJlLmNvbXBpbGUocicgQ29tcGxldGVkIHN0YXJ0dXAgdHJhY2luZyB0byAoLiopJykKLSAgICBzZWxmLl9mbGFnX2NoYW5nZXIgPSBmbGFnX2NoYW5nZXIuRmxhZ0NoYW5nZXIoCi0gICAgICBzZWxmLl9kZXZpY2UsIHNlbGYuX3BhY2thZ2VfaW5mby5jbWRsaW5lX2ZpbGUpCi0KLSAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgIHJldHVybiAnQnJvd3NlciBTdGFydHVwIFRyYWNlJwotCi0gIGRlZiBfU2V0dXBUcmFjaW5nKHNlbGYpOgotICAgICMgVE9ETyhsaXplYik6IEZpZ3VyZSBvdXQgaG93IHRvIGNsZWFuIHVwIHRoZSBjb21tYW5kLWxpbmUgZmlsZSB3aGVuCi0gICAgIyBfVGVhckRvd25UcmFjaW5nKCkgaXMgbm90IGV4ZWN1dGVkIGluIFN0b3BUcmFjaW5nKCkuCi0gICAgZmxhZ3MgPSBbJy0tdHJhY2Utc3RhcnR1cCddCi0gICAgaWYgc2VsZi5fdHJhY2VfdGltZSBpcyBub3QgTm9uZToKLSAgICAgIGZsYWdzLmFwcGVuZCgnLS10cmFjZS1zdGFydHVwLWR1cmF0aW9uPXt9Jy5mb3JtYXQoc2VsZi5fdHJhY2VfdGltZSkpCi0gICAgc2VsZi5fZmxhZ19jaGFuZ2VyLkFkZEZsYWdzKGZsYWdzKQotICAgIHNlbGYuX2RldmljZS5Gb3JjZVN0b3Aoc2VsZi5fcGFja2FnZV9pbmZvLnBhY2thZ2UpCi0gICAgaWYgc2VsZi5fd2ViYXBrX3BhY2thZ2U6Ci0gICAgICBzZWxmLl9kZXZpY2UuRm9yY2VTdG9wKHNlbGYuX3dlYmFwa19wYWNrYWdlKQotICAgICAgbG9nZ2luZy53YXJuaW5nKCdGb3JjZXMgdG8gc3RvcCB0aGUgV2ViQVBLIGFuZCB0aGUgYnJvd3NlciBwcm92aWRlZCBieSAnCi0gICAgICAgICAgICAgICAgICAgICAgJy0tYnJvd3NlcjogJXMuIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGlzIGJyb3dzZXIgJwotICAgICAgICAgICAgICAgICAgICAgICdtYXRjaGVzIHRoZSBob3N0IGJyb3dzZXIgb2YgdGhlIFdlYkFQSyAlcy4gJywKLSAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYWNrYWdlX2luZm8ucGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93ZWJhcGtfcGFja2FnZSkKLSAgICBpZiBzZWxmLl9jb2xkOgotICAgICAgc2VsZi5fZGV2aWNlLkVuYWJsZVJvb3QoKQotICAgICAgY2FjaGVfY29udHJvbC5DYWNoZUNvbnRyb2woc2VsZi5fZGV2aWNlKS5Ecm9wUmFtQ2FjaGVzKCkKLSAgICBsYXVuY2hfaW50ZW50ID0gTm9uZQotICAgIGlmIHNlbGYuX3dlYmFwa19wYWNrYWdlOgotICAgICAgbGF1bmNoX2ludGVudCA9IGludGVudC5JbnRlbnQoCi0gICAgICAgICAgcGFja2FnZT1zZWxmLl93ZWJhcGtfcGFja2FnZSwKLSAgICAgICAgICBhY3Rpdml0eT13ZWJhcGsuV0VCQVBLX01BSU5fQUNUSVZJVFksCi0gICAgICAgICAgZGF0YT1zZWxmLl91cmwpCi0gICAgZWxpZiBzZWxmLl91cmwgPT0gJyc6Ci0gICAgICBsYXVuY2hfaW50ZW50ID0gaW50ZW50LkludGVudCgKLSAgICAgICAgICBhY3Rpb249J2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJywKLSAgICAgICAgICBwYWNrYWdlPXNlbGYuX3BhY2thZ2VfaW5mby5wYWNrYWdlLAotICAgICAgICAgIGFjdGl2aXR5PXNlbGYuX3BhY2thZ2VfaW5mby5hY3Rpdml0eSkKLSAgICBlbHNlOgotICAgICAgbGF1bmNoX2ludGVudCA9IGludGVudC5JbnRlbnQoCi0gICAgICAgICAgcGFja2FnZT1zZWxmLl9wYWNrYWdlX2luZm8ucGFja2FnZSwKLSAgICAgICAgICBhY3Rpdml0eT1zZWxmLl9wYWNrYWdlX2luZm8uYWN0aXZpdHksCi0gICAgICAgICAgZGF0YT1zZWxmLl91cmwsCi0gICAgICAgICAgZXh0cmFzPXsnY3JlYXRlX25ld190YWInOiBUcnVlfSkKLSAgICBzZWxmLl9sb2djYXRfbW9uaXRvci5TdGFydCgpCi0gICAgc2VsZi5fZGV2aWNlLlN0YXJ0QWN0aXZpdHkobGF1bmNoX2ludGVudCwgYmxvY2tpbmc9VHJ1ZSkKLQotICBkZWYgX1RlYXJEb3duVHJhY2luZyhzZWxmKToKLSAgICBzZWxmLl9mbGFnX2NoYW5nZXIuUmVzdG9yZSgpCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuU1RBUlRfU1RPUF9USU1FT1VUKQotICBkZWYgU3RhcnRBZ2VudFRyYWNpbmcoc2VsZiwgY29uZmlnLCB0aW1lb3V0PU5vbmUpOgotICAgIHNlbGYuX1NldHVwVHJhY2luZygpCi0gICAgcmV0dXJuIFRydWUKLQotICBAcHlfdXRpbHMuVGltZW91dCh0cmFjaW5nX2FnZW50cy5TVEFSVF9TVE9QX1RJTUVPVVQpCi0gIGRlZiBTdG9wQWdlbnRUcmFjaW5nKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgdHJ5OgotICAgICAgc2VsZi5fdHJhY2VfZmlsZSA9IHNlbGYuX2xvZ2NhdF9tb25pdG9yLldhaXRGb3IoCi0gICAgICAgICAgc2VsZi5fdHJhY2VfZmluaXNoX3JlKS5ncm91cCgxKQotICAgIGZpbmFsbHk6Ci0gICAgICBzZWxmLl9UZWFyRG93blRyYWNpbmcoKQotICAgIHJldHVybiBUcnVlCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuR0VUX1JFU1VMVFNfVElNRU9VVCkKLSAgZGVmIEdldFJlc3VsdHMoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICB3aXRoIG9wZW4oc2VsZi5fUHVsbFRyYWNlKCksICdyJykgYXMgZjoKLSAgICAgIHRyYWNlX2RhdGEgPSBmLnJlYWQoKQotICAgIHJldHVybiB0cmFjZV9yZXN1bHQuVHJhY2VSZXN1bHQoJ3RyYWNlRXZlbnRzJywgdHJhY2VfZGF0YSkKLQotICBkZWYgX1B1bGxUcmFjZShzZWxmKToKLSAgICB0cmFjZV9maWxlID0gc2VsZi5fdHJhY2VfZmlsZS5yZXBsYWNlKCcvc3RvcmFnZS9lbXVsYXRlZC8wLycsICcvc2RjYXJkLycpCi0gICAgaG9zdF9maWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguY3VyZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHRyYWNlX2ZpbGUpKQotICAgIHNlbGYuX2RldmljZS5QdWxsRmlsZSh0cmFjZV9maWxlLCBob3N0X2ZpbGUpCi0gICAgcmV0dXJuIGhvc3RfZmlsZQotCi0gIGRlZiBTdXBwb3J0c0V4cGxpY2l0Q2xvY2tTeW5jKHNlbGYpOgotICAgIHJldHVybiBGYWxzZQotCi0gIGRlZiBSZWNvcmRDbG9ja1N5bmNNYXJrZXIoc2VsZiwgc3luY19pZCwgZGlkX3JlY29yZF9zeW5jX21hcmtlcl9jYWxsYmFjayk6Ci0gICAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci0gICAgYXNzZXJ0IHNlbGYuU3VwcG9ydHNFeHBsaWNpdENsb2NrU3luYygpLCAoJ0Nsb2NrIHN5bmMgbWFya2VyIGNhbm5vdCBiZSAnCi0gICAgICAgICdyZWNvcmRlZCBzaW5jZSBleHBsaWNpdCBjbG9jayBzeW5jIGlzIG5vdCBzdXBwb3J0ZWQuJykKLQotCi1jbGFzcyBDaHJvbWVTdGFydHVwQ29uZmlnKHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdDb25maWcpOgotICBkZWYgX19pbml0X18oc2VsZiwgZGV2aWNlLCBwYWNrYWdlX2luZm8sIHdlYmFwa19wYWNrYWdlLCBjb2xkLCB1cmwsCi0gICAgICAgICAgICAgICBjaHJvbWVfY2F0ZWdvcmllcywgdHJhY2VfdGltZSk6Ci0gICAgdHJhY2luZ19hZ2VudHMuVHJhY2luZ0NvbmZpZy5fX2luaXRfXyhzZWxmKQotICAgIHNlbGYuZGV2aWNlID0gZGV2aWNlCi0gICAgc2VsZi5wYWNrYWdlX2luZm8gPSBwYWNrYWdlX2luZm8KLSAgICBzZWxmLndlYmFwa19wYWNrYWdlID0gd2ViYXBrX3BhY2thZ2UKLSAgICBzZWxmLmNvbGQgPSBjb2xkCi0gICAgc2VsZi51cmwgPSB1cmwKLSAgICBzZWxmLmNocm9tZV9jYXRlZ29yaWVzID0gY2hyb21lX2NhdGVnb3JpZXMKLSAgICBzZWxmLnRyYWNlX3RpbWUgPSB0cmFjZV90aW1lCi0KLQotZGVmIHRyeV9jcmVhdGVfYWdlbnQoY29uZmlnKToKLSAgcmV0dXJuIENocm9tZVN0YXJ0dXBUcmFjaW5nQWdlbnQoY29uZmlnLmRldmljZSwgY29uZmlnLnBhY2thZ2VfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLndlYmFwa19wYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuY29sZCwgY29uZmlnLnVybCwgY29uZmlnLnRyYWNlX3RpbWUpCi0KLWRlZiBhZGRfb3B0aW9ucyhwYXJzZXIpOgotICBvcHRpb25zID0gb3B0cGFyc2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnQ2hyb21lIHN0YXJ0dXAgdHJhY2luZycpCi0gIG9wdGlvbnMuYWRkX29wdGlvbignLS11cmwnLCBoZWxwPSdVUkwgdG8gdmlzaXQgb24gc3RhcnR1cC4gRGVmYXVsdDogJwotICAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lmdvb2dsZS5jb20uIEFuIGVtcHR5IFVSTCBsYXVuY2hlcyBDaHJvbWUgJwotICAgICAgICAgICAgICAgICAgICAgJ3dpdGggYSBNQUlOIGFjdGlvbiBpbnN0ZWFkIG9mIFZJRVcuJywKLSAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J2h0dHBzOi8vd3d3Lmdvb2dsZS5jb20nLCBtZXRhdmFyPSdVUkwnKQotICBvcHRpb25zLmFkZF9vcHRpb24oJy0tY29sZCcsIGhlbHA9J0ZsdXNoIHRoZSBPUyBwYWdlIGNhY2hlIGJlZm9yZSBzdGFydGluZyAnCi0gICAgICAgICAgICAgICAgICAgICAndGhlIGJyb3dzZXIuIE5vdGUgdGhhdCB0aGlzIHJlcXVpcmUgYSBkZXZpY2Ugd2l0aCByb290ICcKLSAgICAgICAgICAgICAgICAgICAgICdhY2Nlc3MuJywgZGVmYXVsdD1GYWxzZSwgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgb3B0aW9ucy5hZGRfb3B0aW9uKCctLXdlYmFway1wYWNrYWdlJywgaGVscD0nU3BlY2lmeSB0aGUgcGFja2FnZSBuYW1lICcKLSAgICAgICAgICAgICAgICAgICAgICdvZiB0aGUgV2ViQVBLIHRvIGxhdW5jaCB0aGUgZ2l2ZW4gVVJMLiBBbiBlbXB0eSBVUkwgJwotICAgICAgICAgICAgICAgICAgICAgJ2xhdWNuaGVzIHRoZSBob3N0IGJyb3dzZXIgb2YgdGhlIFdlYkFQSyB3aXRoIGFuIG5ldyAnCi0gICAgICAgICAgICAgICAgICAgICAndGFiLicsIGRlZmF1bHQ9Tm9uZSkKLQotICByZXR1cm4gb3B0aW9ucwotCi1kZWYgZ2V0X2NvbmZpZyhvcHRpb25zKToKLSAgcmV0dXJuIENocm9tZVN0YXJ0dXBDb25maWcob3B0aW9ucy5kZXZpY2UsIG9wdGlvbnMucGFja2FnZV9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLndlYmFwa19wYWNrYWdlLCBvcHRpb25zLmNvbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXJsLCBvcHRpb25zLmNocm9tZV9jYXRlZ29yaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRyYWNlX3RpbWUpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9jaHJvbWVfc3RhcnR1cF90cmFjaW5nX2FnZW50X3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvY2hyb21lX3N0YXJ0dXBfdHJhY2luZ19hZ2VudF91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEyM2MzYy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9jaHJvbWVfc3RhcnR1cF90cmFjaW5nX2FnZW50X3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQganNvbgotCi1mcm9tIHByb2ZpbGVfY2hyb21lIGltcG9ydCBjaHJvbWVfc3RhcnR1cF90cmFjaW5nX2FnZW50Ci1mcm9tIHN5c3RyYWNlIGltcG9ydCBkZWNvcmF0b3JzCi1mcm9tIHN5c3RyYWNlLnRyYWNpbmdfYWdlbnRzIGltcG9ydCBhZ2VudHNfdW5pdHRlc3QKLQotCi1jbGFzcyBDaHJvbWVBZ2VudFRlc3QoYWdlbnRzX3VuaXR0ZXN0LkJhc2VBZ2VudFRlc3QpOgotICAjIFRPRE8od2FzaGluZ3RvbnApOiBUaGlzIHRlc3Qgc2VlbXMgdG8gZmFpbCBvbiB0aGUgdmVyc2lvbiBvZiBBbmRyb2lkCi0gICMgY3VycmVudGx5IG9uIHRoZSBUcnlib3Qgc2VydmVycyAoS1RVODRQKSwgYWx0aG91Z2ggaXQgd29ya3Mgb24gQW5kcm9pZCBNLgotICAjIEVpdGhlciB1cGdyYWRlIHRoZSB2ZXJzaW9uIG9mIEFuZHJvaWQgb24gdGhlIFRyeWJvdCBzZXJ2ZXJzIG9yIGRldGVybWluZQotICAjIGlmIHRoZXJlIGlzIGEgd2F5IHRvIHJ1biB0aGlzIGFnZW50IG9uIEFuZHJvaWQgS1RVODRQLgotICBAZGVjb3JhdG9ycy5EaXNhYmxlZAotICBkZWYgdGVzdFRyYWNpbmcoc2VsZik6Ci0gICAgYWdlbnQgPSBjaHJvbWVfc3RhcnR1cF90cmFjaW5nX2FnZW50LkNocm9tZVN0YXJ0dXBUcmFjaW5nQWdlbnQoCi0gICAgICAgIHNlbGYuZGV2aWNlLCBzZWxmLnBhY2thZ2VfaW5mbywKLSAgICAgICAgJycsICMgd2ViYXBrX3BhY2thZ2UKLSAgICAgICAgRmFsc2UsICMgY29sZAotICAgICAgICAnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbScgIyB1cmwKLSAgICApCi0KLSAgICB0cnk6Ci0gICAgICBhZ2VudC5TdGFydEFnZW50VHJhY2luZyhOb25lKQotICAgIGZpbmFsbHk6Ci0gICAgICBhZ2VudC5TdG9wQWdlbnRUcmFjaW5nKCkKLQotICAgIHJlc3VsdCA9IGFnZW50LkdldFJlc3VsdHMoKQotICAgIGpzb24ubG9hZHMocmVzdWx0LnJhd19kYXRhKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvY2hyb21lX3RyYWNpbmdfYWdlbnQucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9jaHJvbWVfdHJhY2luZ19hZ2VudC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU4ODk1Yi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9jaHJvbWVfdHJhY2luZ19hZ2VudC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBqc29uCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCBvcwotaW1wb3J0IHB5X3V0aWxzCi1pbXBvcnQgcmUKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfZXJyb3JzCi1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBpbnRlbnQKLWZyb20gc3lzdHJhY2UgaW1wb3J0IHRyYWNlX3Jlc3VsdAotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2luZ19hZ2VudHMKLQotCi1ERUZBVUxUX0NIUk9NRV9DQVRFR09SSUVTID0gJ19ERUZBVUxUX0NIUk9NRV9DQVRFR09SSUVTJwotX0hFQVBfUFJPRklMRV9NTUFQX1BST1BFUlRZID0gJ2hlYXBwcm9mLm1tYXAnCi0KLQotY2xhc3MgQ2hyb21lVHJhY2luZ0FnZW50KHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdBZ2VudCk6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2UsIHBhY2thZ2VfaW5mbywgcmluZ19idWZmZXIsIHRyYWNlX21lbW9yeT1GYWxzZSk6Ci0gICAgdHJhY2luZ19hZ2VudHMuVHJhY2luZ0FnZW50Ll9faW5pdF9fKHNlbGYpCi0gICAgc2VsZi5fZGV2aWNlID0gZGV2aWNlCi0gICAgc2VsZi5fcGFja2FnZV9pbmZvID0gcGFja2FnZV9pbmZvCi0gICAgc2VsZi5fcmluZ19idWZmZXIgPSByaW5nX2J1ZmZlcgotICAgIHNlbGYuX2xvZ2NhdF9tb25pdG9yID0gc2VsZi5fZGV2aWNlLkdldExvZ2NhdE1vbml0b3IoKQotICAgIHNlbGYuX3RyYWNlX2ZpbGUgPSBOb25lCi0gICAgc2VsZi5fdHJhY2VfbWVtb3J5ID0gdHJhY2VfbWVtb3J5Ci0gICAgc2VsZi5faXNfdHJhY2luZyA9IEZhbHNlCi0gICAgc2VsZi5fdHJhY2Vfc3RhcnRfcmUgPSBcCi0gICAgICAgcmUuY29tcGlsZShyJ0xvZ2dpbmcgcGVyZm9ybWFuY2UgdHJhY2UgdG8gZmlsZScpCi0gICAgc2VsZi5fdHJhY2VfZmluaXNoX3JlID0gXAotICAgICAgIHJlLmNvbXBpbGUocidQcm9maWxlciBmaW5pc2hlZFsuXSBSZXN1bHRzIGFyZSBpbiAoLiopWy5dJykKLSAgICBzZWxmLl9jYXRlZ29yaWVzID0gTm9uZQotCi0gIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICByZXR1cm4gJ2Nocm9tZSB0cmFjZScKLQotICBAc3RhdGljbWV0aG9kCi0gIGRlZiBHZXRDYXRlZ29yaWVzKGRldmljZSwgcGFja2FnZV9pbmZvKToKLSAgICB3aXRoIGRldmljZS5HZXRMb2djYXRNb25pdG9yKCkgYXMgbG9nbW9uOgotICAgICAgZGV2aWNlLkJyb2FkY2FzdEludGVudChpbnRlbnQuSW50ZW50KAotICAgICAgICAgIGFjdGlvbj0nJXMuR1BVX1BST0ZJTEVSX0xJU1RfQ0FURUdPUklFUycgJSBwYWNrYWdlX2luZm8ucGFja2FnZSkpCi0gICAgICB0cnk6Ci0gICAgICAgIGpzb25fY2F0ZWdvcnlfbGlzdCA9IGxvZ21vbi5XYWl0Rm9yKAotICAgICAgICAgICAgcmUuY29tcGlsZShyJ3sidHJhY2VDYXRlZ29yaWVzTGlzdCguKiknKSwgdGltZW91dD01KS5ncm91cCgwKQotICAgICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQ29tbWFuZFRpbWVvdXRFcnJvcjoKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdQZXJmb3JtYW5jZSB0cmFjZSBjYXRlZ29yeSBsaXN0IG1hcmtlciBub3QgZm91bmQuICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdJcyB0aGUgY29ycmVjdCB2ZXJzaW9uIG9mIHRoZSBicm93c2VyIHJ1bm5pbmc/JykKLQotICAgIHJlY29yZF9jYXRlZ29yaWVzID0gc2V0KCkKLSAgICBkaXNhYmxlZF9ieV9kZWZhdWx0X2NhdGVnb3JpZXMgPSBzZXQoKQotICAgIGpzb25fZGF0YSA9IGpzb24ubG9hZHMoanNvbl9jYXRlZ29yeV9saXN0KVsndHJhY2VDYXRlZ29yaWVzTGlzdCddCi0gICAgZm9yIGl0ZW0gaW4ganNvbl9kYXRhOgotICAgICAgZm9yIGNhdGVnb3J5IGluIGl0ZW0uc3BsaXQoJywnKToKLSAgICAgICAgaWYgY2F0ZWdvcnkuc3RhcnRzd2l0aCgnZGlzYWJsZWQtYnktZGVmYXVsdCcpOgotICAgICAgICAgIGRpc2FibGVkX2J5X2RlZmF1bHRfY2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcmVjb3JkX2NhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KQotCi0gICAgcmV0dXJuIGxpc3QocmVjb3JkX2NhdGVnb3JpZXMpLCBsaXN0KGRpc2FibGVkX2J5X2RlZmF1bHRfY2F0ZWdvcmllcykKLQotICBAcHlfdXRpbHMuVGltZW91dCh0cmFjaW5nX2FnZW50cy5TVEFSVF9TVE9QX1RJTUVPVVQpCi0gIGRlZiBTdGFydEFnZW50VHJhY2luZyhzZWxmLCBjb25maWcsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgc2VsZi5fY2F0ZWdvcmllcyA9IF9Db21wdXRlQ2hyb21lQ2F0ZWdvcmllcyhjb25maWcpCi0gICAgc2VsZi5fbG9nY2F0X21vbml0b3IuU3RhcnQoKQotICAgIHN0YXJ0X2V4dHJhcyA9IHsnY2F0ZWdvcmllcyc6ICcsJy5qb2luKHNlbGYuX2NhdGVnb3JpZXMpfQotICAgIGlmIHNlbGYuX3JpbmdfYnVmZmVyOgotICAgICAgc3RhcnRfZXh0cmFzWydjb250aW51b3VzJ10gPSBOb25lCi0gICAgc2VsZi5fZGV2aWNlLkJyb2FkY2FzdEludGVudChpbnRlbnQuSW50ZW50KAotICAgICAgICBhY3Rpb249JyVzLkdQVV9QUk9GSUxFUl9TVEFSVCcgJSBzZWxmLl9wYWNrYWdlX2luZm8ucGFja2FnZSwKLSAgICAgICAgZXh0cmFzPXN0YXJ0X2V4dHJhcykpCi0KLSAgICBpZiBzZWxmLl90cmFjZV9tZW1vcnk6Ci0gICAgICBzZWxmLl9kZXZpY2UuRW5hYmxlUm9vdCgpCi0gICAgICBzZWxmLl9kZXZpY2UuU2V0UHJvcChfSEVBUF9QUk9GSUxFX01NQVBfUFJPUEVSVFksIDEpCi0KLSAgICAjIENocm9tZSBsb2dzIHR3byBkaWZmZXJlbnQgbWVzc2FnZXMgcmVsYXRlZCB0byB0cmFjaW5nOgotICAgICMKLSAgICAjIDEuICJMb2dnaW5nIHBlcmZvcm1hbmNlIHRyYWNlIHRvIGZpbGUiCi0gICAgIyAyLiAiUHJvZmlsZXIgZmluaXNoZWQuIFJlc3VsdHMgYXJlIGluIFsuLi5dIgotICAgICMKLSAgICAjIFRoZSBmaXJzdCBvbmUgaXMgcHJpbnRlZCB3aGVuIHRyYWNpbmcgc3RhcnRzIGFuZCB0aGUgc2Vjb25kIG9uZSBpbmRpY2F0ZXMKLSAgICAjIHRoYXQgdGhlIHRyYWNlIGZpbGUgaXMgcmVhZHkgdG8gYmUgcHVsbGVkLgotICAgIHRyeToKLSAgICAgIHNlbGYuX2xvZ2NhdF9tb25pdG9yLldhaXRGb3Ioc2VsZi5fdHJhY2Vfc3RhcnRfcmUsIHRpbWVvdXQ9NSkKLSAgICAgIHNlbGYuX2lzX3RyYWNpbmcgPSBUcnVlCi0gICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQ29tbWFuZFRpbWVvdXRFcnJvcjoKLSAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAnVHJhY2Ugc3RhcnQgbWFya2VyIG5vdCBmb3VuZC4gUG9zc2libGUgY2F1c2VzOiAxKSBJcyB0aGUgY29ycmVjdCAnCi0gICAgICAgICAgJ3ZlcnNpb24gb2YgdGhlIGJyb3dzZXIgcnVubmluZz8gMikgSXMgdGhlIGJyb3dzZXIgYWxyZWFkeSBsYXVuY2hlZD8nKQotICAgIHJldHVybiBUcnVlCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuU1RBUlRfU1RPUF9USU1FT1VUKQotICBkZWYgU3RvcEFnZW50VHJhY2luZyhzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgIGlmIHNlbGYuX2lzX3RyYWNpbmc6Ci0gICAgICBzZWxmLl9kZXZpY2UuQnJvYWRjYXN0SW50ZW50KGludGVudC5JbnRlbnQoCi0gICAgICAgICAgYWN0aW9uPSclcy5HUFVfUFJPRklMRVJfU1RPUCcgJSBzZWxmLl9wYWNrYWdlX2luZm8ucGFja2FnZSkpCi0gICAgICBzZWxmLl90cmFjZV9maWxlID0gc2VsZi5fbG9nY2F0X21vbml0b3IuV2FpdEZvcigKLSAgICAgICAgICBzZWxmLl90cmFjZV9maW5pc2hfcmUsIHRpbWVvdXQ9MTIwKS5ncm91cCgxKQotICAgICAgc2VsZi5faXNfdHJhY2luZyA9IEZhbHNlCi0gICAgaWYgc2VsZi5fdHJhY2VfbWVtb3J5OgotICAgICAgc2VsZi5fZGV2aWNlLlNldFByb3AoX0hFQVBfUFJPRklMRV9NTUFQX1BST1BFUlRZLCAwKQotICAgIHJldHVybiBUcnVlCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuR0VUX1JFU1VMVFNfVElNRU9VVCkKLSAgZGVmIEdldFJlc3VsdHMoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICB3aXRoIG9wZW4oc2VsZi5fUHVsbFRyYWNlKCksICdyJykgYXMgZjoKLSAgICAgIHRyYWNlX2RhdGEgPSBmLnJlYWQoKQotICAgIHJldHVybiB0cmFjZV9yZXN1bHQuVHJhY2VSZXN1bHQoJ3RyYWNlRXZlbnRzJywgdHJhY2VfZGF0YSkKLQotICBkZWYgX1B1bGxUcmFjZShzZWxmKToKLSAgICB0cmFjZV9maWxlID0gc2VsZi5fdHJhY2VfZmlsZS5yZXBsYWNlKCcvc3RvcmFnZS9lbXVsYXRlZC8wLycsICcvc2RjYXJkLycpCi0gICAgaG9zdF9maWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguY3VyZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHRyYWNlX2ZpbGUpKQotICAgIHRyeToKLSAgICAgIHNlbGYuX2RldmljZS5QdWxsRmlsZSh0cmFjZV9maWxlLCBob3N0X2ZpbGUpCi0gICAgZXhjZXB0IGRldmljZV9lcnJvcnMuQWRiQ29tbWFuZEZhaWxlZEVycm9yOgotICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICdDYW5ub3QgcHVsbCB0aGUgdHJhY2UgZmlsZS4gSGF2ZSB5b3UgZ3JhbnRlZCBTdG9yYWdlIHBlcm1pc3Npb24gdG8gJwotICAgICAgICAgICd0aGUgYnJvd3Nlcj8gKEFuZHJvaWQgU2V0dGluZ3MgLT4gQXBwcyAtPiBbdGhlIGJyb3dzZXIgYXBwXSAtPiAnCi0gICAgICAgICAgJ1Blcm1pc3Npb25zIC0+IFN0b3JhZ2UpJykKLSAgICByZXR1cm4gaG9zdF9maWxlCi0KLSAgZGVmIFN1cHBvcnRzRXhwbGljaXRDbG9ja1N5bmMoc2VsZik6Ci0gICAgcmV0dXJuIEZhbHNlCi0KLSAgZGVmIFJlY29yZENsb2NrU3luY01hcmtlcihzZWxmLCBzeW5jX2lkLCBkaWRfcmVjb3JkX3N5bmNfbWFya2VyX2NhbGxiYWNrKToKLSAgICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLSAgICBhc3NlcnQgc2VsZi5TdXBwb3J0c0V4cGxpY2l0Q2xvY2tTeW5jKCksICgnQ2xvY2sgc3luYyBtYXJrZXIgY2Fubm90IGJlICcKLSAgICAgICAgJ3JlY29yZGVkIHNpbmNlIGV4cGxpY2l0IGNsb2NrIHN5bmMgaXMgbm90IHN1cHBvcnRlZC4nKQotCi0KLWNsYXNzIENocm9tZUNvbmZpZyh0cmFjaW5nX2FnZW50cy5UcmFjaW5nQ29uZmlnKToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGNocm9tZV9jYXRlZ29yaWVzLCB0cmFjZV9jYywgdHJhY2VfZnJhbWVfdmlld2VyLAotICAgICAgICAgICAgICAgdHJhY2VfdWJlcmNvbXBvc2l0b3IsIHRyYWNlX2dwdSwgdHJhY2VfZmxvdywgdHJhY2VfbWVtb3J5LAotICAgICAgICAgICAgICAgdHJhY2Vfc2NoZWR1bGVyLCByaW5nX2J1ZmZlciwgZGV2aWNlLCBwYWNrYWdlX2luZm8pOgotICAgIHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdDb25maWcuX19pbml0X18oc2VsZikKLSAgICBzZWxmLmNocm9tZV9jYXRlZ29yaWVzID0gY2hyb21lX2NhdGVnb3JpZXMKLSAgICBzZWxmLnRyYWNlX2NjID0gdHJhY2VfY2MKLSAgICBzZWxmLnRyYWNlX2ZyYW1lX3ZpZXdlciA9IHRyYWNlX2ZyYW1lX3ZpZXdlcgotICAgIHNlbGYudHJhY2VfdWJlcmNvbXBvc2l0b3IgPSB0cmFjZV91YmVyY29tcG9zaXRvcgotICAgIHNlbGYudHJhY2VfZ3B1ID0gdHJhY2VfZ3B1Ci0gICAgc2VsZi50cmFjZV9mbG93ID0gdHJhY2VfZmxvdwotICAgIHNlbGYudHJhY2VfbWVtb3J5ID0gdHJhY2VfbWVtb3J5Ci0gICAgc2VsZi50cmFjZV9zY2hlZHVsZXIgPSB0cmFjZV9zY2hlZHVsZXIKLSAgICBzZWxmLnJpbmdfYnVmZmVyID0gcmluZ19idWZmZXIKLSAgICBzZWxmLmRldmljZSA9IGRldmljZQotICAgIHNlbGYucGFja2FnZV9pbmZvID0gcGFja2FnZV9pbmZvCi0KLQotZGVmIHRyeV9jcmVhdGVfYWdlbnQoY29uZmlnKToKLSAgaWYgY29uZmlnLmNocm9tZV9jYXRlZ29yaWVzOgotICAgIHJldHVybiBDaHJvbWVUcmFjaW5nQWdlbnQoY29uZmlnLmRldmljZSwgY29uZmlnLnBhY2thZ2VfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5yaW5nX2J1ZmZlciwgY29uZmlnLnRyYWNlX21lbW9yeSkKLSAgcmV0dXJuIE5vbmUKLQotZGVmIGFkZF9vcHRpb25zKHBhcnNlcik6Ci0gIGNocm9tZV9vcHRzID0gb3B0cGFyc2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnQ2hyb21lIHRyYWNpbmcgb3B0aW9ucycpCi0gIGNocm9tZV9vcHRzLmFkZF9vcHRpb24oJy1jJywgJy0tY2F0ZWdvcmllcycsIGhlbHA9J1NlbGVjdCBDaHJvbWUgdHJhY2luZyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGVnb3JpZXMgd2l0aCBjb21tYS1kZWxpbWl0ZWQgd2lsZGNhcmRzLCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2UuZy4sICIqIiwgImNhdDEqLC1jYXQxYSIuIE9taXQgdGhpcyBvcHRpb24gdG8gdHJhY2UgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdDaHJvbWVcJ3MgZGVmYXVsdCBjYXRlZ29yaWVzLiBDaHJvbWUgdHJhY2luZyBjYW4gYmUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlZCB3aXRoICItLWNhdGVnb3JpZXM9XCdcJyIuIFVzZSAibGlzdCIgdG8gJwotICAgICAgICAgICAgICAgICAgICAgICAgICdzZWUgdGhlIGF2YWlsYWJsZSBjYXRlZ29yaWVzLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0nQ0hST01FX0NBVEVHT1JJRVMnLCBkZXN0PSdjaHJvbWVfY2F0ZWdvcmllcycpCi0gIGNocm9tZV9vcHRzLmFkZF9vcHRpb24oJy0tdHJhY2UtY2MnLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0RlcHJlY2F0ZWQsIHVzZSAtLXRyYWNlLWZyYW1lLXZpZXdlci4nLAotICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gIGNocm9tZV9vcHRzLmFkZF9vcHRpb24oJy0tdHJhY2UtZnJhbWUtdmlld2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFbmFibGUgZW5vdWdoIHRyYWNlIGNhdGVnb3JpZXMgZm9yICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcG9zaXRvciBmcmFtZSB2aWV3aW5nLicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gIGNocm9tZV9vcHRzLmFkZF9vcHRpb24oJy0tdHJhY2UtdWJlcmNvbXBvc2l0b3InLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0VuYWJsZSBlbm91Z2ggdHJhY2UgY2F0ZWdvcmllcyBmb3IgJwotICAgICAgICAgICAgICAgICAgICAgICAgICd1YmVyY29tcG9zaXRvciBmcmFtZSBkYXRhLicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gIGNocm9tZV9vcHRzLmFkZF9vcHRpb24oJy0tdHJhY2UtZ3B1JywgaGVscD0nRW5hYmxlIGV4dHJhIHRyYWNlIGNhdGVnb3JpZXMgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdmb3IgR1BVIGRhdGEuJywgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgY2hyb21lX29wdHMuYWRkX29wdGlvbignLS10cmFjZS1mbG93JywgaGVscD0nRW5hYmxlIGV4dHJhIHRyYWNlIGNhdGVnb3JpZXMgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdmb3IgSVBDIG1lc3NhZ2UgZmxvd3MuJywgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgY2hyb21lX29wdHMuYWRkX29wdGlvbignLS10cmFjZS1tZW1vcnknLCBoZWxwPSdFbmFibGUgZXh0cmEgdHJhY2UgY2F0ZWdvcmllcyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvciBtZW1vcnkgcHJvZmlsZS4gKHRjbWFsbG9jIHJlcXVpcmVkKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgY2hyb21lX29wdHMuYWRkX29wdGlvbignLS10cmFjZS1zY2hlZHVsZXInLCBoZWxwPSdFbmFibGUgZXh0cmEgdHJhY2UgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdjYXRlZ29yaWVzIGZvciBzY2hlZHVsZXIgc3RhdGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gIHJldHVybiBjaHJvbWVfb3B0cwotCi1kZWYgZ2V0X2NvbmZpZyhvcHRpb25zKToKLSAgcmV0dXJuIENocm9tZUNvbmZpZyhvcHRpb25zLmNocm9tZV9jYXRlZ29yaWVzLCBvcHRpb25zLnRyYWNlX2NjLAotICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudHJhY2VfZnJhbWVfdmlld2VyLCBvcHRpb25zLnRyYWNlX3ViZXJjb21wb3NpdG9yLAotICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudHJhY2VfZ3B1LCBvcHRpb25zLnRyYWNlX2Zsb3csCi0gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50cmFjZV9tZW1vcnksIG9wdGlvbnMudHJhY2Vfc2NoZWR1bGVyLAotICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmluZ19idWZmZXIsIG9wdGlvbnMuZGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFja2FnZV9pbmZvKQotCi1kZWYgX0NvbXB1dGVDaHJvbWVDYXRlZ29yaWVzKGNvbmZpZyk6Ci0gIGNhdGVnb3JpZXMgPSBbXQotICBpZiBjb25maWcudHJhY2VfZnJhbWVfdmlld2VyOgotICAgIGNhdGVnb3JpZXMuYXBwZW5kKCdkaXNhYmxlZC1ieS1kZWZhdWx0LWNjLmRlYnVnJykKLSAgaWYgY29uZmlnLnRyYWNlX3ViZXJjb21wb3NpdG9yOgotICAgIGNhdGVnb3JpZXMuYXBwZW5kKCdkaXNhYmxlZC1ieS1kZWZhdWx0LWNjLmRlYnVnKicpCi0gIGlmIGNvbmZpZy50cmFjZV9ncHU6Ci0gICAgY2F0ZWdvcmllcy5hcHBlbmQoJ2Rpc2FibGVkLWJ5LWRlZmF1bHQtZ3B1LmRlYnVnKicpCi0gIGlmIGNvbmZpZy50cmFjZV9mbG93OgotICAgIGNhdGVnb3JpZXMuYXBwZW5kKCdkaXNhYmxlZC1ieS1kZWZhdWx0LXRvcGxldmVsLmZsb3cnKQotICBpZiBjb25maWcudHJhY2VfbWVtb3J5OgotICAgIGNhdGVnb3JpZXMuYXBwZW5kKCdkaXNhYmxlZC1ieS1kZWZhdWx0LW1lbW9yeScpCi0gIGlmIGNvbmZpZy50cmFjZV9zY2hlZHVsZXI6Ci0gICAgY2F0ZWdvcmllcy5hcHBlbmQoJ2Rpc2FibGVkLWJ5LWRlZmF1bHQtYmxpbmsuc2NoZWR1bGVyJykKLSAgICBjYXRlZ29yaWVzLmFwcGVuZCgnZGlzYWJsZWQtYnktZGVmYXVsdC1jYy5kZWJ1Zy5zY2hlZHVsZXInKQotICAgIGNhdGVnb3JpZXMuYXBwZW5kKCdkaXNhYmxlZC1ieS1kZWZhdWx0LXJlbmRlcmVyLnNjaGVkdWxlcicpCi0gIGlmIGNvbmZpZy5jaHJvbWVfY2F0ZWdvcmllczoKLSAgICBjYXRlZ29yaWVzICs9IGNvbmZpZy5jaHJvbWVfY2F0ZWdvcmllcy5zcGxpdCgnLCcpCi0gIHJldHVybiBjYXRlZ29yaWVzCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9jaHJvbWVfdHJhY2luZ19hZ2VudF91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL2Nocm9tZV90cmFjaW5nX2FnZW50X3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWM3MDFhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL2Nocm9tZV90cmFjaW5nX2FnZW50X3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQganNvbgotCi1mcm9tIHByb2ZpbGVfY2hyb21lIGltcG9ydCBjaHJvbWVfdHJhY2luZ19hZ2VudAotZnJvbSBzeXN0cmFjZSBpbXBvcnQgZGVjb3JhdG9ycwotZnJvbSBzeXN0cmFjZS50cmFjaW5nX2FnZW50cyBpbXBvcnQgYWdlbnRzX3VuaXR0ZXN0Ci0KLQotY2xhc3MgQ2hyb21lQWdlbnRUZXN0KGFnZW50c191bml0dGVzdC5CYXNlQWdlbnRUZXN0KToKLSAgIyBUT0RPKHdhc2hpbmd0b25wKTogVGhpcyB0ZXN0IHNlZW1zIHRvIGZhaWwgb24gdGhlIHZlcnNpb24gb2YgQW5kcm9pZAotICAjIGN1cnJlbnRseSBvbiB0aGUgVHJ5Ym90IHNlcnZlcnMgKEtUVTg0UCksIGFsdGhvdWdoIGl0IHdvcmtzIG9uIEFuZHJvaWQgTS4KLSAgIyBFaXRoZXIgdXBncmFkZSB0aGUgdmVyc2lvbiBvZiBBbmRyb2lkIG9uIHRoZSBUcnlib3Qgc2VydmVycyBvciBkZXRlcm1pbmUKLSAgIyBpZiB0aGVyZSBpcyBhIHdheSB0byBydW4gdGhpcyBhZ2VudCBvbiBBbmRyb2lkIEtUVTg0UC4KLSAgQGRlY29yYXRvcnMuRGlzYWJsZWQKLSAgZGVmIHRlc3RHZXRDYXRlZ29yaWVzKHNlbGYpOgotICAgIGN1cnJfYnJvd3NlciA9IHNlbGYuR2V0Q2hyb21lUHJvY2Vzc0lEKCkKLSAgICBpZiBjdXJyX2Jyb3dzZXIgPT0gTm9uZToKLSAgICAgIHNlbGYuU3RhcnRCcm93c2VyKCkKLQotICAgIGNhdGVnb3JpZXMgPSBcCi0gICAgICAgIGNocm9tZV90cmFjaW5nX2FnZW50LkNocm9tZVRyYWNpbmdBZ2VudC5HZXRDYXRlZ29yaWVzKAotICAgICAgICAgICAgc2VsZi5kZXZpY2UsIHNlbGYucGFja2FnZV9pbmZvKQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGNhdGVnb3JpZXMpLCAyKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYXRlZ29yaWVzWzBdKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYXRlZ29yaWVzWzFdKQotCi0gICMgVE9ETyh3YXNoaW5ndG9ucCk6IFRoaXMgdGVzdCBpcyBwcmV0dHkgZmxha3kgb24gdGhlIHZlcnNpb24gb2YgQW5kcm9pZAotICAjIGN1cnJlbnRseSBvbiB0aGUgVHJ5Ym90IHNlcnZlcnMgKEtUVTg0UCksIGFsdGhvdWdoIGl0IHdvcmtzIG9uIEFuZHJvaWQgTS4KLSAgIyBFaXRoZXIgdXBncmFkZSB0aGUgdmVyc2lvbiBvZiBBbmRyb2lkIG9uIHRoZSBUcnlib3Qgc2VydmVycyBvciBkZXRlcm1pbmUKLSAgIyBpZiB0aGVyZSBpcyBhIHdheSB0byBydW4gdGhpcyBhZ2VudCBvbiBBbmRyb2lkIEtUVTg0UC4KLSAgQGRlY29yYXRvcnMuRGlzYWJsZWQKLSAgZGVmIHRlc3RUcmFjaW5nKHNlbGYpOgotICAgIGN1cnJfYnJvd3NlciA9IHNlbGYuR2V0Q2hyb21lUHJvY2Vzc0lEKCkKLSAgICBpZiBjdXJyX2Jyb3dzZXIgPT0gTm9uZToKLSAgICAgIHNlbGYuU3RhcnRCcm93c2VyKCkKLQotICAgIGNhdGVnb3JpZXMgPSAnKicKLSAgICByaW5nX2J1ZmZlciA9IEZhbHNlCi0gICAgYWdlbnQgPSBjaHJvbWVfdHJhY2luZ19hZ2VudC5DaHJvbWVUcmFjaW5nQWdlbnQoc2VsZi5kZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZ19idWZmZXIpCi0gICAgYWdlbnQuU3RhcnRBZ2VudFRyYWNpbmcoY2hyb21lX3RyYWNpbmdfYWdlbnQuQ2hyb21lQ29uZmlnKGNhdGVnb3JpZXMsIE5vbmUsCi0gICAgICAgIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHJpbmdfYnVmZmVyLCBzZWxmLmRldmljZSwKLSAgICAgICAgc2VsZi5wYWNrYWdlX2luZm8pKQotICAgIGFnZW50LlN0b3BBZ2VudFRyYWNpbmcoKQotICAgIHJlc3VsdCA9IGFnZW50LkdldFJlc3VsdHMoKQotICAgIGpzb24ubG9hZHMocmVzdWx0LnJhd19kYXRhKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvZGRtc190cmFjaW5nX2FnZW50LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvZGRtc190cmFjaW5nX2FnZW50LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDA0MWI5Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL2RkbXNfdHJhY2luZ19hZ2VudC5weQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgb3MKLWltcG9ydCBweV91dGlscwotaW1wb3J0IHJlCi0KLWZyb20gcHJvZmlsZV9jaHJvbWUgaW1wb3J0IHV0aWwKLWZyb20gc3lzdHJhY2UgaW1wb3J0IHRyYWNlX3Jlc3VsdAotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2luZ19hZ2VudHMKLQotCi1fRERNU19TQU1QTElOR19GUkVRVUVOQ1lfVVMgPSAxMDAKLQotCi1jbGFzcyBEZG1zQWdlbnQodHJhY2luZ19hZ2VudHMuVHJhY2luZ0FnZW50KToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGRldmljZSwgcGFja2FnZV9pbmZvKToKLSAgICB0cmFjaW5nX2FnZW50cy5UcmFjaW5nQWdlbnQuX19pbml0X18oc2VsZikKLSAgICBzZWxmLl9kZXZpY2UgPSBkZXZpY2UKLSAgICBzZWxmLl9wYWNrYWdlID0gcGFja2FnZV9pbmZvLnBhY2thZ2UKLSAgICBzZWxmLl9vdXRwdXRfZmlsZSA9IE5vbmUKLSAgICBzZWxmLl9zdXBwb3J0c19zYW1wbGluZyA9IHNlbGYuX1N1cHBvcnRzU2FtcGxpbmcoKQotCi0gIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICByZXR1cm4gJ2RkbXMgcHJvZmlsZScKLQotICBkZWYgX1N1cHBvcnRzU2FtcGxpbmcoc2VsZik6Ci0gICAgZm9yIGxpbmUgaW4gc2VsZi5fZGV2aWNlLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgWydhbScsICctLWhlbHAnXSwgY2hlY2tfcmV0dXJuPVRydWUpOgotICAgICAgaWYgcmUubWF0Y2gocicuKmFtIHByb2ZpbGUgc3RhcnQuKi0tc2FtcGxpbmcnLCBsaW5lKToKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICByZXR1cm4gRmFsc2UKLQotICBAcHlfdXRpbHMuVGltZW91dCh0cmFjaW5nX2FnZW50cy5TVEFSVF9TVE9QX1RJTUVPVVQpCi0gIGRlZiBTdGFydEFnZW50VHJhY2luZyhzZWxmLCBjb25maWcsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgc2VsZi5fb3V0cHV0X2ZpbGUgPSAoCi0gICAgICAgICcvZGF0YS9sb2NhbC90bXAvZGRtcy1wcm9maWxlLSVzJyAlIHV0aWwuR2V0VHJhY2VUaW1lc3RhbXAoKSkKLSAgICBjbWQgPSBbJ2FtJywgJ3Byb2ZpbGUnLCAnc3RhcnQnXQotICAgIGlmIHNlbGYuX3N1cHBvcnRzX3NhbXBsaW5nOgotICAgICAgY21kLmV4dGVuZChbJy0tc2FtcGxpbmcnLCBzdHIoX0RETVNfU0FNUExJTkdfRlJFUVVFTkNZX1VTKV0pCi0gICAgY21kLmV4dGVuZChbc2VsZi5fcGFja2FnZSwgc2VsZi5fb3V0cHV0X2ZpbGVdKQotICAgIHNlbGYuX2RldmljZS5SdW5TaGVsbENvbW1hbmQoY21kLCBjaGVja19yZXR1cm49VHJ1ZSkKLSAgICByZXR1cm4gVHJ1ZQotCi0gIEBweV91dGlscy5UaW1lb3V0KHRyYWNpbmdfYWdlbnRzLlNUQVJUX1NUT1BfVElNRU9VVCkKLSAgZGVmIFN0b3BBZ2VudFRyYWNpbmcoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBbJ2FtJywgJ3Byb2ZpbGUnLCAnc3RvcCcsIHNlbGYuX3BhY2thZ2VdLCBjaGVja19yZXR1cm49VHJ1ZSkKLSAgICByZXR1cm4gVHJ1ZQotCi0gIEBweV91dGlscy5UaW1lb3V0KHRyYWNpbmdfYWdlbnRzLkdFVF9SRVNVTFRTX1RJTUVPVVQpCi0gIGRlZiBHZXRSZXN1bHRzKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgd2l0aCBvcGVuKHNlbGYuX1B1bGxUcmFjZSgpLCAncicpIGFzIGY6Ci0gICAgICB0cmFjZV9kYXRhID0gZi5yZWFkKCkKLSAgICByZXR1cm4gdHJhY2VfcmVzdWx0LlRyYWNlUmVzdWx0KCdkZG1zJywgdHJhY2VfZGF0YSkKLQotICBkZWYgX1B1bGxUcmFjZShzZWxmKToKLSAgICBpZiBub3Qgc2VsZi5fb3V0cHV0X2ZpbGU6Ci0gICAgICByZXR1cm4gTm9uZQotCi0gICAgaG9zdF9maWxlID0gb3MucGF0aC5qb2luKAotICAgICAgICBvcy5wYXRoLmN1cmRpciwgb3MucGF0aC5iYXNlbmFtZShzZWxmLl9vdXRwdXRfZmlsZSkpCi0gICAgc2VsZi5fZGV2aWNlLlB1bGxGaWxlKHNlbGYuX291dHB1dF9maWxlLCBob3N0X2ZpbGUpCi0gICAgcmV0dXJuIGhvc3RfZmlsZQotCi0gIGRlZiBTdXBwb3J0c0V4cGxpY2l0Q2xvY2tTeW5jKHNlbGYpOgotICAgIHJldHVybiBGYWxzZQotCi0gIGRlZiBSZWNvcmRDbG9ja1N5bmNNYXJrZXIoc2VsZiwgc3luY19pZCwgZGlkX3JlY29yZF9zeW5jX21hcmtlcl9jYWxsYmFjayk6Ci0gICAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci0gICAgYXNzZXJ0IHNlbGYuU3VwcG9ydHNFeHBsaWNpdENsb2NrU3luYygpLCAoJ0Nsb2NrIHN5bmMgbWFya2VyIGNhbm5vdCBiZSAnCi0gICAgICAgICdyZWNvcmRlZCBzaW5jZSBleHBsaWNpdCBjbG9jayBzeW5jIGlzIG5vdCBzdXBwb3J0ZWQuJykKLQotCi1jbGFzcyBEZG1zQ29uZmlnKHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdDb25maWcpOgotICBkZWYgX19pbml0X18oc2VsZiwgZGV2aWNlLCBwYWNrYWdlX2luZm8sIGRkbXMpOgotICAgIHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdDb25maWcuX19pbml0X18oc2VsZikKLSAgICBzZWxmLmRldmljZSA9IGRldmljZQotICAgIHNlbGYucGFja2FnZV9pbmZvID0gcGFja2FnZV9pbmZvCi0gICAgc2VsZi5kZG1zID0gZGRtcwotCi0KLWRlZiB0cnlfY3JlYXRlX2FnZW50KGNvbmZpZyk6Ci0gIGlmIGNvbmZpZy5kZG1zOgotICAgIHJldHVybiBEZG1zQWdlbnQoY29uZmlnLmRldmljZSwgY29uZmlnLnBhY2thZ2VfaW5mbykKLSAgcmV0dXJuIE5vbmUKLQotZGVmIGFkZF9vcHRpb25zKHBhcnNlcik6Ci0gIG9wdGlvbnMgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdKYXZhIHRyYWNpbmcnKQotICBvcHRpb25zLmFkZF9vcHRpb24oJy0tZGRtcycsIGhlbHA9J1RyYWNlIEphdmEgZXhlY3V0aW9uIHVzaW5nIERETVMgJwotICAgICAgICAgICAgICAgICAgICAgJ3NhbXBsaW5nLicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gIHJldHVybiBvcHRpb25zCi0KLWRlZiBnZXRfY29uZmlnKG9wdGlvbnMpOgotICByZXR1cm4gRGRtc0NvbmZpZyhvcHRpb25zLmRldmljZSwgb3B0aW9ucy5wYWNrYWdlX2luZm8sIG9wdGlvbnMuZGRtcykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL2RkbXNfdHJhY2luZ19hZ2VudF91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL2RkbXNfdHJhY2luZ19hZ2VudF91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcyNjliYi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9kZG1zX3RyYWNpbmdfYWdlbnRfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWZyb20gcHJvZmlsZV9jaHJvbWUgaW1wb3J0IGRkbXNfdHJhY2luZ19hZ2VudAotZnJvbSBzeXN0cmFjZSBpbXBvcnQgZGVjb3JhdG9ycwotZnJvbSBzeXN0cmFjZS50cmFjaW5nX2FnZW50cyBpbXBvcnQgYWdlbnRzX3VuaXR0ZXN0Ci0KLQotY2xhc3MgRGRtc0FnZW50VGVzdChhZ2VudHNfdW5pdHRlc3QuQmFzZUFnZW50VGVzdCk6Ci0gICMgVE9ETyh3YXNoaW5ndG9ucCk6IFRoZSBERE1TIHRlc3QgaXMgZmxha3kgb24gdGhlIFRyeXNlcnZlciwgYnV0IGl0Ci0gICMgY29uc2lzdGVudGx5IHBhc3NlcyBvbiBBbmRyb2lkIE0uIE5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhlIHJlc3VsdCBkYXRhCi0gICMgZG9lcyBub3Qgc3RhcnQgd2l0aCAnKnZlcnNpb24nIGFuZCB3aHkgdGhlIHRlc3QgaXMgZmxha3kuCi0gIEBkZWNvcmF0b3JzLkRpc2FibGVkCi0gIGRlZiB0ZXN0VHJhY2luZyhzZWxmKToKLSAgICBhZ2VudCA9IGRkbXNfdHJhY2luZ19hZ2VudC5EZG1zQWdlbnQoc2VsZi5kZXZpY2UsIHNlbGYucGFja2FnZV9pbmZvKQotCi0gICAgdHJ5OgotICAgICAgYWdlbnQuU3RhcnRBZ2VudFRyYWNpbmcoTm9uZSkKLSAgICBmaW5hbGx5OgotICAgICAgYWdlbnQuU3RvcEFnZW50VHJhY2luZygpCi0KLSAgICByZXN1bHQgPSBhZ2VudC5HZXRSZXN1bHRzKCkKLSAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LnJhd19kYXRhLnN0YXJ0c3dpdGgoJyp2ZXJzaW9uJykpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9mYWtlX2FnZW50XzEucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9mYWtlX2FnZW50XzEucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyODg5ZjQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvZmFrZV9hZ2VudF8xLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCB0ZW1wZmlsZQotCi1mcm9tIHN5c3RyYWNlIGltcG9ydCB0cmFjZV9yZXN1bHQKLWZyb20gc3lzdHJhY2UgaW1wb3J0IHRyYWNpbmdfYWdlbnRzCi0KLQotY2xhc3MgRmFrZUFnZW50KG9iamVjdCk6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZW50cz0nZmFrZS1jb250ZW50cycpOgotICAgIHNlbGYuY29udGVudHMgPSBjb250ZW50cwotICAgIHNlbGYuc3RvcHBlZCA9IEZhbHNlCi0gICAgc2VsZi5maWxlbmFtZSA9IE5vbmUKLSAgICBzZWxmLmNvbmZpZyA9IE5vbmUKLSAgICBzZWxmLnRpbWVvdXQgPSBOb25lCi0KLSAgZGVmIFN0YXJ0QWdlbnRUcmFjaW5nKHNlbGYsIGNvbmZpZywgdGltZW91dD1Ob25lKToKLSAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZwotICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKLSAgICByZXR1cm4gVHJ1ZQotCi0gICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAotICBkZWYgU3RvcEFnZW50VHJhY2luZyhzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgIHNlbGYuc3RvcHBlZCA9IFRydWUKLSAgICByZXR1cm4gVHJ1ZQotCi0gICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAotICBkZWYgR2V0UmVzdWx0cyhzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgIHRyYWNlX2RhdGEgPSBvcGVuKHNlbGYuX1B1bGxUcmFjZSgpKS5yZWFkKCkKLSAgICByZXR1cm4gdHJhY2VfcmVzdWx0LlRyYWNlUmVzdWx0KCdmYWtlRGF0YScsIHRyYWNlX2RhdGEpCi0KLSAgZGVmIF9QdWxsVHJhY2Uoc2VsZik6Ci0gICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlKSBhcyBmOgotICAgICAgc2VsZi5maWxlbmFtZSA9IGYubmFtZQotICAgICAgZi53cml0ZShzZWxmLmNvbnRlbnRzKQotICAgICAgcmV0dXJuIGYubmFtZQotCi0gICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtdXNlCi0gIGRlZiBTdXBwb3J0c0V4cGxpY2l0Q2xvY2tTeW5jKHNlbGYpOgotICAgIHJldHVybiBGYWxzZQotCi0gICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudCwgbm8tc2VsZi11c2UKLSAgZGVmIFJlY29yZENsb2NrU3luY01hcmtlcihzZWxmLCBzeW5jX2lkLCBkaWRfcmVjb3JkX3N5bmNfbWFya2VyX2NhbGxiYWNrKToKLSAgICBwcmludCAoJ0Nsb2NrIHN5bmMgbWFya2VyIGNhbm5vdCBiZSByZWNvcmRlZCBzaW5jZSBleHBsaWNpdCBjbG9jayBzeW5jICcKLSAgICAgICAgICAgJ2lzIG5vdCBzdXBwb3J0ZWQuJykKLQotICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgcmV0dXJuICdmYWtldHJhY2UnCi0KLQotY2xhc3MgRmFrZUNvbmZpZyh0cmFjaW5nX2FnZW50cy5UcmFjaW5nQ29uZmlnKToKLSAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgIHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdDb25maWcuX19pbml0X18oc2VsZikKLQotCi0jIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLWRlZiB0cnlfY3JlYXRlX2FnZW50KGNvbmZpZyk6Ci0gIHJldHVybiBGYWtlQWdlbnQoKQotCi1kZWYgYWRkX29wdGlvbnMocGFyc2VyKToKLSAgb3B0aW9ucyA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgJ0Zha2Ugb3B0aW9ucy4nKQotICByZXR1cm4gb3B0aW9ucwotCi0jIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLWRlZiBnZXRfY29uZmlnKG9wdGlvbnMpOgotICByZXR1cm4gRmFrZUNvbmZpZygpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9mYWtlX2FnZW50XzIucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9mYWtlX2FnZW50XzIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3N2I2YzcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvZmFrZV9hZ2VudF8yLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCB0ZW1wZmlsZQotCi1mcm9tIHN5c3RyYWNlIGltcG9ydCB0cmFjZV9yZXN1bHQKLWZyb20gc3lzdHJhY2UgaW1wb3J0IHRyYWNpbmdfYWdlbnRzCi0KLQotY2xhc3MgRmFrZUFnZW50MihvYmplY3QpOgotICBkZWYgX19pbml0X18oc2VsZiwgY29udGVudHM9J2Zha2UtY29udGVudHMnKToKLSAgICBzZWxmLmNvbnRlbnRzID0gY29udGVudHMKLSAgICBzZWxmLnN0b3BwZWQgPSBGYWxzZQotICAgIHNlbGYuY29uZmlnID0gTm9uZQotICAgIHNlbGYuZmlsZW5hbWUgPSBOb25lCi0KLSAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci0gIGRlZiBTdGFydEFnZW50VHJhY2luZyhzZWxmLCBjb25maWcsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgc2VsZi5jb25maWcgPSBjb25maWcKLSAgICByZXR1cm4gVHJ1ZQotCi0gICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAotICBkZWYgU3RvcEFnZW50VHJhY2luZyhzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgIHNlbGYuc3RvcHBlZCA9IFRydWUKLSAgICByZXR1cm4gVHJ1ZQotCi0gICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAotICBkZWYgR2V0UmVzdWx0cyhzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgIHRyYWNlX2RhdGEgPSBvcGVuKHNlbGYuX1B1bGxUcmFjZSgpKS5yZWFkKCkKLSAgICByZXR1cm4gdHJhY2VfcmVzdWx0LlRyYWNlUmVzdWx0KCdmYWtlRGF0YVR3bycsIHRyYWNlX2RhdGEpCi0KLSAgZGVmIF9QdWxsVHJhY2Uoc2VsZik6Ci0gICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlKSBhcyBmOgotICAgICAgc2VsZi5maWxlbmFtZSA9IGYubmFtZQotICAgICAgZi53cml0ZShzZWxmLmNvbnRlbnRzKQotICAgICAgcmV0dXJuIGYubmFtZQotCi0gICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtdXNlCi0gIGRlZiBTdXBwb3J0c0V4cGxpY2l0Q2xvY2tTeW5jKHNlbGYpOgotICAgIHJldHVybiBGYWxzZQotCi0gICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudCwgbm8tc2VsZi11c2UKLSAgZGVmIFJlY29yZENsb2NrU3luY01hcmtlcihzZWxmLCBzeW5jX2lkLCBkaWRfcmVjb3JkX3N5bmNfbWFya2VyX2NhbGxiYWNrKToKLSAgICBwcmludCAoJ0Nsb2NrIHN5bmMgbWFya2VyIGNhbm5vdCBiZSByZWNvcmRlZCBzaW5jZSBleHBsaWNpdCBjbG9jayBzeW5jICcKLSAgICAgICAgICAgJ2lzIG5vdCBzdXBwb3J0ZWQuJykKLQotICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgcmV0dXJuICdmYWtldHJhY2V0d28nCi0KLQotY2xhc3MgRmFrZUNvbmZpZyh0cmFjaW5nX2FnZW50cy5UcmFjaW5nQ29uZmlnKToKLSAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgIHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdDb25maWcuX19pbml0X18oc2VsZikKLQotCi0jIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLWRlZiB0cnlfY3JlYXRlX2FnZW50KGNvbmZpZyk6Ci0gIHJldHVybiBGYWtlQWdlbnQyKCkKLQotZGVmIGFkZF9vcHRpb25zKHBhcnNlcik6Ci0gIG9wdGlvbnMgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdGYWtlIG9wdGlvbnMuJykKLSAgcmV0dXJuIG9wdGlvbnMKLQotIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci1kZWYgZ2V0X2NvbmZpZyhvcHRpb25zKToKLSAgcmV0dXJuIEZha2VDb25maWcoKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvZmxhZ3MucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9mbGFncy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk1MTEyMy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9mbGFncy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9wdHBhcnNlCi0KLQotZGVmIE91dHB1dE9wdGlvbnMocGFyc2VyKToKLSAgb3V0cHV0X29wdGlvbnMgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdPdXRwdXQgb3B0aW9ucycpCi0gIG91dHB1dF9vcHRpb25zLmFkZF9vcHRpb24oJy1vJywgJy0tb3V0cHV0JywgZGVzdD0nb3V0cHV0X2ZpbGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NhdmUgdHJhY2Ugb3V0cHV0IHRvIGZpbGUuJykKLSAgb3V0cHV0X29wdGlvbnMuYWRkX29wdGlvbignLS1qc29uJywgaGVscD0nU2F2ZSB0cmFjZSBhcyByYXcgSlNPTiBpbnN0ZWFkIG9mICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSFRNTC4nLCBkZXN0PSd3cml0ZV9qc29uJykKLSAgb3V0cHV0X29wdGlvbnMuYWRkX29wdGlvbignLS12aWV3JywgaGVscD0nT3BlbiByZXN1bHRpbmcgdHJhY2UgZmlsZSBpbiBhICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnJvd3Nlci4nLCBhY3Rpb249J3N0b3JlX3RydWUnKQotICByZXR1cm4gb3V0cHV0X29wdGlvbnMKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL21haW4ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9tYWluLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2Y2Q4MTVjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL21haW4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHdlYmJyb3dzZXIKLQotZnJvbSBwcm9maWxlX2Nocm9tZSBpbXBvcnQgY2hyb21lX3RyYWNpbmdfYWdlbnQKLWZyb20gcHJvZmlsZV9jaHJvbWUgaW1wb3J0IGRkbXNfdHJhY2luZ19hZ2VudAotZnJvbSBwcm9maWxlX2Nocm9tZSBpbXBvcnQgZmxhZ3MKLWZyb20gcHJvZmlsZV9jaHJvbWUgaW1wb3J0IHBlcmZfdHJhY2luZ19hZ2VudAotZnJvbSBwcm9maWxlX2Nocm9tZSBpbXBvcnQgcHJvZmlsZXIKLWZyb20gcHJvZmlsZV9jaHJvbWUgaW1wb3J0IHVpCi1mcm9tIHN5c3RyYWNlIGltcG9ydCB1dGlsCi1mcm9tIHN5c3RyYWNlLnRyYWNpbmdfYWdlbnRzIGltcG9ydCBhdHJhY2VfYWdlbnQKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdXRpbHMKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IGFkYl93cmFwcGVyCi0KLQotX1BST0ZJTEVfQ0hST01FX0FHRU5UX01PRFVMRVMgPSBbY2hyb21lX3RyYWNpbmdfYWdlbnQsIGRkbXNfdHJhY2luZ19hZ2VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZfdHJhY2luZ19hZ2VudCwgYXRyYWNlX2FnZW50XQotCi0KLWRlZiBfQ3JlYXRlT3B0aW9uUGFyc2VyKCk6Ci0gIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihkZXNjcmlwdGlvbj0nUmVjb3JkIGFib3V0Oi8vdHJhY2luZyBwcm9maWxlcyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbSBBbmRyb2lkIGJyb3dzZXJzLiBTZWUgaHR0cDovL2Rldi4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2hyb21pdW0ub3JnL2RldmVsb3BlcnMvaG93LXRvcy90cmFjZS1ldmVudC0nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvZmlsaW5nLXRvb2wgZm9yIGRldGFpbGVkIGluc3RydWN0aW9ucyBmb3IgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb2ZpbGluZy4nLCBjb25mbGljdF9oYW5kbGVyPSdyZXNvbHZlJykKLQotICBwYXJzZXIgPSB1dGlsLmdldF9tYWluX29wdGlvbnMocGFyc2VyKQotCi0gIHRpbWVkX29wdGlvbnMgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdUaW1lZCB0cmFjaW5nJykKLSAgdGltZWRfb3B0aW9ucy5hZGRfb3B0aW9uKCctdCcsICctLXRpbWUnLCBoZWxwPSdQcm9maWxlIGZvciBOIHNlY29uZHMgYW5kICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkIHRoZSByZXN1bHRpbmcgdHJhY2UuJywgbWV0YXZhcj0nTicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdmbG9hdCcsIGRlc3Q9J3RyYWNlX3RpbWUnKQotICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cCh0aW1lZF9vcHRpb25zKQotCi0gIGNvbnRfb3B0aW9ucyA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgJ0NvbnRpbnVvdXMgdHJhY2luZycpCi0gIGNvbnRfb3B0aW9ucy5hZGRfb3B0aW9uKCctLWNvbnRpbnVvdXMnLCBoZWxwPSdQcm9maWxlIGNvbnRpbnVvdXNseSB1bnRpbCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdzdG9wcGVkLicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gIGNvbnRfb3B0aW9ucy5hZGRfb3B0aW9uKCctLXJpbmctYnVmZmVyJywgaGVscD0nVXNlIHRoZSB0cmFjZSBidWZmZXIgYXMgYSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdyaW5nIGJ1ZmZlciBhbmQgc2F2ZSBpdHMgY29udGVudHMgd2hlbiBzdG9wcGluZyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdpbnN0ZWFkIG9mIGFwcGVuZGluZyBldmVudHMgaW50byBvbmUgbG9uZyB0cmFjZS4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQotICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cChjb250X29wdGlvbnMpCi0KLSAgcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAoZmxhZ3MuT3V0cHV0T3B0aW9ucyhwYXJzZXIpKQotCi0gIGJyb3dzZXJzID0gc29ydGVkKHV0aWwuZ2V0X3N1cHBvcnRlZF9icm93c2VycygpLmtleXMoKSkKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy1iJywgJy0tYnJvd3NlcicsIGhlbHA9J1NlbGVjdCBhbW9uZyBpbnN0YWxsZWQgYnJvd3NlcnMuICcKLSAgICAgICAgICAgICAgICAgICAgJ09uZSBvZiAnICsgJywgJy5qb2luKGJyb3dzZXJzKSArICcsICJzdGFibGUiIGlzIHVzZWQgYnkgJwotICAgICAgICAgICAgICAgICAgICAnZGVmYXVsdC4nLCB0eXBlPSdjaG9pY2UnLCBjaG9pY2VzPWJyb3dzZXJzLAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSdzdGFibGUnKQotICBwYXJzZXIuYWRkX29wdGlvbignLXYnLCAnLS12ZXJib3NlJywgaGVscD0nVmVyYm9zZSBsb2dnaW5nLicsCi0gICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCcteicsICctLWNvbXByZXNzJywgaGVscD0nQ29tcHJlc3MgdGhlIHJlc3VsdGluZyB0cmFjZSAnCi0gICAgICAgICAgICAgICAgICAgICd3aXRoIGd6aXAuICcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0KLSAgIyBBZGQgb3B0aW9ucyBmcm9tIHByb2ZpbGVfY2hyb21lIGFnZW50cy4KLSAgZm9yIG1vZHVsZSBpbiBfUFJPRklMRV9DSFJPTUVfQUdFTlRfTU9EVUxFUzoKLSAgICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cChtb2R1bGUuYWRkX29wdGlvbnMocGFyc2VyKSkKLQotICByZXR1cm4gcGFyc2VyCi0KLQotZGVmIG1haW4oKToKLSAgcGFyc2VyID0gX0NyZWF0ZU9wdGlvblBhcnNlcigpCi0gIG9wdGlvbnMsIF9hcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKSAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLXZhcmlhYmxlCi0gIGlmIG9wdGlvbnMudHJhY2VfY2M6Ci0gICAgcGFyc2VyLmVycm9yKCIiIi0tdHJhY2UtY2MgaXMgZGVwcmVjYXRlZC4KLQotRm9yIGJhc2ljIGphbmsgYnVzdGluZyB1c2VzLCB1c2UgIC0tdHJhY2UtZnJhbWUtdmlld2VyCi1Gb3IgZGV0YWlsZWQgc3R1ZHkgb2YgdWJlcmNvbXBvc2l0b3IsIHBhc3MgLS10cmFjZS11YmVyY29tcG9zaXRvci4KLQotV2hlbiBpbiBkb3VidCwganVzdCB0cnkgb3V0IC0tdHJhY2UtZnJhbWUtdmlld2VyLgotIiIiKQotCi0gIGxvZ2dpbmcuYmFzaWNDb25maWcoKQotCi0gIGlmIG9wdGlvbnMudmVyYm9zZToKLSAgICBsb2dnaW5nLmdldExvZ2dlcigpLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0KLSAgaWYgbm90IG9wdGlvbnMuZGV2aWNlX3NlcmlhbF9udW1iZXI6Ci0gICAgZGV2aWNlcyA9IFthLkdldERldmljZVNlcmlhbCgpIGZvciBhIGluIGFkYl93cmFwcGVyLkFkYldyYXBwZXIuRGV2aWNlcygpXQotICAgIGlmIGxlbihkZXZpY2VzKSA9PSAwOgotICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdObyBBREIgZGV2aWNlcyBjb25uZWN0ZWQuJykKLSAgICBlbGlmIGxlbihkZXZpY2VzKSA+PSAyOgotICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdNdWx0aXBsZSBkZXZpY2VzIGNvbm5lY3RlZCwgc2VyaWFsIG51bWJlciByZXF1aXJlZCcpCi0gICAgb3B0aW9ucy5kZXZpY2Vfc2VyaWFsX251bWJlciA9IGRldmljZXNbMF0KLSAgZGV2aWNlID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzLkhlYWx0aHlEZXZpY2VzKGRldmljZV9hcmc9Ci0gICAgICBvcHRpb25zLmRldmljZV9zZXJpYWxfbnVtYmVyKVswXQotICBwYWNrYWdlX2luZm8gPSB1dGlsLmdldF9zdXBwb3J0ZWRfYnJvd3NlcnMoKVtvcHRpb25zLmJyb3dzZXJdCi0KLSAgb3B0aW9ucy5kZXZpY2UgPSBkZXZpY2UKLSAgb3B0aW9ucy5wYWNrYWdlX2luZm8gPSBwYWNrYWdlX2luZm8KLQotICAjIEluY2x1ZGUgQ2hyb21lIGNhdGVnb3JpZXMgYnkgZGVmYXVsdCBpbiBwcm9maWxlX2Nocm9tZS4KLSAgaWYgbm90IG9wdGlvbnMuY2hyb21lX2NhdGVnb3JpZXM6Ci0gICAgb3B0aW9ucy5jaHJvbWVfY2F0ZWdvcmllcyA9IGNocm9tZV90cmFjaW5nX2FnZW50LkRFRkFVTFRfQ0hST01FX0NBVEVHT1JJRVMKLQotICBpZiBvcHRpb25zLmNocm9tZV9jYXRlZ29yaWVzIGluIFsnbGlzdCcsICdoZWxwJ106Ci0gICAgdWkuUHJpbnRNZXNzYWdlKCdDb2xsZWN0aW5nIHJlY29yZCBjYXRlZ29yaWVzIGxpc3QuLi4nLCBlb2w9JycpCi0gICAgcmVjb3JkX2NhdGVnb3JpZXMgPSBbXQotICAgIGRpc2FibGVkX2J5X2RlZmF1bHRfY2F0ZWdvcmllcyA9IFtdCi0gICAgcmVjb3JkX2NhdGVnb3JpZXMsIGRpc2FibGVkX2J5X2RlZmF1bHRfY2F0ZWdvcmllcyA9IFwKLSAgICAgICAgY2hyb21lX3RyYWNpbmdfYWdlbnQuQ2hyb21lVHJhY2luZ0FnZW50LkdldENhdGVnb3JpZXMoCi0gICAgICAgICAgICBkZXZpY2UsIHBhY2thZ2VfaW5mbykKLQotICAgIHVpLlByaW50TWVzc2FnZSgnZG9uZScpCi0gICAgdWkuUHJpbnRNZXNzYWdlKCdSZWNvcmQgQ2F0ZWdvcmllczonKQotICAgIHVpLlByaW50TWVzc2FnZSgnXG4nLmpvaW4oJ1x0JXMnICUgaXRlbSBcCi0gICAgICAgIGZvciBpdGVtIGluIHNvcnRlZChyZWNvcmRfY2F0ZWdvcmllcykpKQotCi0gICAgdWkuUHJpbnRNZXNzYWdlKCdcbkRpc2FibGVkIGJ5IERlZmF1bHQgQ2F0ZWdvcmllczonKQotICAgIHVpLlByaW50TWVzc2FnZSgnXG4nLmpvaW4oJ1x0JXMnICUgaXRlbSBcCi0gICAgICAgIGZvciBpdGVtIGluIHNvcnRlZChkaXNhYmxlZF9ieV9kZWZhdWx0X2NhdGVnb3JpZXMpKSkKLQotICAgIHJldHVybiAwCi0KLSAgaWYgb3B0aW9ucy5hdHJhY2VfY2F0ZWdvcmllcyBpbiBbJ2xpc3QnLCAnaGVscCddOgotICAgIGF0cmFjZV9hZ2VudC5saXN0X2NhdGVnb3JpZXMoYXRyYWNlX2FnZW50LmdldF9jb25maWcob3B0aW9ucykpCi0gICAgcHJpbnQgJ1xuJwotICAgIHJldHVybiAwCi0KLSAgaWYgKHBlcmZfdHJhY2luZ19hZ2VudC5QZXJmUHJvZmlsZXJBZ2VudC5Jc1N1cHBvcnRlZCgpIGFuZAotICAgICAgb3B0aW9ucy5wZXJmX2NhdGVnb3JpZXMgaW4gWydsaXN0JywgJ2hlbHAnXSk6Ci0gICAgdWkuUHJpbnRNZXNzYWdlKCdcbicuam9pbigKLSAgICAgICAgcGVyZl90cmFjaW5nX2FnZW50LlBlcmZQcm9maWxlckFnZW50LkdldENhdGVnb3JpZXMoZGV2aWNlKSkpCi0gICAgcmV0dXJuIDAKLQotICBpZiBub3Qgb3B0aW9ucy50cmFjZV90aW1lIGFuZCBub3Qgb3B0aW9ucy5jb250aW51b3VzOgotICAgIHVpLlByaW50TWVzc2FnZSgnVGltZSBpbnRlcnZhbCBvciBjb250aW51b3VzIHRyYWNpbmcgc2hvdWxkIGJlIHNwZWNpZmllZC4nKQotICAgIHJldHVybiAxCi0KLSAgaWYgKG9wdGlvbnMuY2hyb21lX2NhdGVnb3JpZXMgYW5kIG9wdGlvbnMuYXRyYWNlX2NhdGVnb3JpZXMgYW5kCi0gICAgICAnd2VidmlldycgaW4gb3B0aW9ucy5hdHJhY2VfY2F0ZWdvcmllcyk6Ci0gICAgbG9nZ2luZy53YXJuaW5nKCdVc2luZyB0aGUgIndlYnZpZXciIGNhdGVnb3J5IGluIGF0cmFjZSB0b2dldGhlciB3aXRoICcKLSAgICAgICAgICAgICAgICAgICAgJ0Nocm9tZSB0cmFjaW5nIHJlc3VsdHMgaW4gZHVwbGljYXRlIHRyYWNlIGV2ZW50cy4nKQotCi0gIGlmIG9wdGlvbnMub3V0cHV0X2ZpbGU6Ci0gICAgb3B0aW9ucy5vdXRwdXRfZmlsZSA9IG9zLnBhdGguZXhwYW5kdXNlcihvcHRpb25zLm91dHB1dF9maWxlKQotICByZXN1bHQgPSBwcm9maWxlci5DYXB0dXJlUHJvZmlsZSgKLSAgICAgIG9wdGlvbnMsCi0gICAgICBvcHRpb25zLnRyYWNlX3RpbWUgaWYgbm90IG9wdGlvbnMuY29udGludW91cyBlbHNlIDAsCi0gICAgICBfUFJPRklMRV9DSFJPTUVfQUdFTlRfTU9EVUxFUywKLSAgICAgIG91dHB1dD1vcHRpb25zLm91dHB1dF9maWxlLAotICAgICAgY29tcHJlc3M9b3B0aW9ucy5jb21wcmVzcywKLSAgICAgIHdyaXRlX2pzb249b3B0aW9ucy53cml0ZV9qc29uKQotICBpZiBvcHRpb25zLnZpZXc6Ci0gICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgb3Muc3lzdGVtKCcvdXNyL2Jpbi9vcGVuICVzJyAlIG9zLnBhdGguYWJzcGF0aChyZXN1bHQpKQotICAgIGVsc2U6Ci0gICAgICB3ZWJicm93c2VyLm9wZW4ocmVzdWx0KQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvcGVyZl90cmFjaW5nX2FnZW50LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvcGVyZl90cmFjaW5nX2FnZW50LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTgzMWRmLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL3BlcmZfdHJhY2luZ19hZ2VudC5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCBvcwotaW1wb3J0IHB5X3V0aWxzCi1pbXBvcnQgc2lnbmFsCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotaW1wb3J0IHRlbXBmaWxlCi0KLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgZGV2aWNlX3RlbXBfZmlsZQotZnJvbSBkZXZpbC5hbmRyb2lkLnBlcmYgaW1wb3J0IHBlcmZfY29udHJvbAotCi1mcm9tIHByb2ZpbGVfY2hyb21lIGltcG9ydCB1aQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2VfcmVzdWx0Ci1mcm9tIHN5c3RyYWNlIGltcG9ydCB0cmFjaW5nX2FnZW50cwotCi1fQ0FUQVBVTFRfRElSID0gb3MucGF0aC5qb2luKAotICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgJy4uJywgJy4uJykKLXN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4oX0NBVEFQVUxUX0RJUiwgJ3RlbGVtZXRyeScpKQotdHJ5OgotICAjIHB5bGludDogZGlzYWJsZT1GMDQwMQotICBmcm9tIHRlbGVtZXRyeS5pbnRlcm5hbC5wbGF0Zm9ybS5wcm9maWxlciBpbXBvcnQgYW5kcm9pZF9wcm9maWxpbmdfaGVscGVyCi0gIGZyb20gdGVsZW1ldHJ5LmludGVybmFsLnV0aWwgaW1wb3J0IGJpbmFyeV9tYW5hZ2VyCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gIGFuZHJvaWRfcHJvZmlsaW5nX2hlbHBlciA9IE5vbmUKLSAgYmluYXJ5X21hbmFnZXIgPSBOb25lCi0KLQotX1BFUkZfT1BUSU9OUyA9IFsKLSAgICAjIFNhbXBsZSBhY3Jvc3MgYWxsIHByb2Nlc3NlcyBhbmQgQ1BVcyB0byBzbyB0aGF0IHRoZSBjdXJyZW50IENQVSBnZXRzCi0gICAgIyByZWNvcmRlZCB0byBlYWNoIHNhbXBsZS4KLSAgICAnLS1hbGwtY3B1cycsCi0gICAgIyBJbiBwZXJmIDMuMTMgLS1jYWxsLWdyYXBoIHJlcXVpcmVzIGFuIGFyZ3VtZW50LCBzbyB1c2UgdGhlIC1nIHNob3J0LWhhbmQKLSAgICAjIHdoaWNoIGRvZXMgbm90LgotICAgICctZycsCi0gICAgIyBJbmNyZWFzZSBwcmlvcml0eSB0byBhdm9pZCBkcm9wcGluZyBzYW1wbGVzLiBSZXF1aXJlcyByb290LgotICAgICctLXJlYWx0aW1lJywgJzgwJywKLSAgICAjIFJlY29yZCByYXcgc2FtcGxlcyB0byBnZXQgQ1BVIGluZm9ybWF0aW9uLgotICAgICctLXJhdy1zYW1wbGVzJywKLSAgICAjIEluY3JlYXNlIHNhbXBsaW5nIGZyZXF1ZW5jeSBmb3IgYmV0dGVyIGNvdmVyYWdlLgotICAgICctLWZyZXEnLCAnMjAwMCcsCi1dCi0KLQotY2xhc3MgX1BlcmZQcm9maWxlcihvYmplY3QpOgotICBkZWYgX19pbml0X18oc2VsZiwgZGV2aWNlLCBwZXJmX2JpbmFyeSwgY2F0ZWdvcmllcyk6Ci0gICAgc2VsZi5fZGV2aWNlID0gZGV2aWNlCi0gICAgc2VsZi5fb3V0cHV0X2ZpbGUgPSBkZXZpY2VfdGVtcF9maWxlLkRldmljZVRlbXBGaWxlKAotICAgICAgICBzZWxmLl9kZXZpY2UuYWRiLCBwcmVmaXg9J3BlcmZfb3V0cHV0JykKLSAgICBzZWxmLl9sb2dfZmlsZSA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQotCi0gICAgIyBUT0RPKGpidWRvcmljaykgTG9vayBhdCBwcm92aWRpbmcgYSB3YXkgdG8gdW5oYW5kcm9sbCB0aGlzIG9uY2UgdGhlCi0gICAgIyAgICAgICAgICAgICAgICAgYWRiIHJld3JpdGUgaGFzIGZ1bGx5IGxhbmRlZC4KLSAgICBkZXZpY2VfcGFyYW0gPSAoWyctcycsIHN0cihzZWxmLl9kZXZpY2UpXSBpZiBzdHIoc2VsZi5fZGV2aWNlKSBlbHNlIFtdKQotICAgIGNtZCA9IFsnYWRiJ10gKyBkZXZpY2VfcGFyYW0gKyBcCi0gICAgICAgICAgWydzaGVsbCcsIHBlcmZfYmluYXJ5LCAncmVjb3JkJywKLSAgICAgICAgICAgJy0tb3V0cHV0Jywgc2VsZi5fb3V0cHV0X2ZpbGUubmFtZV0gKyBfUEVSRl9PUFRJT05TCi0gICAgaWYgY2F0ZWdvcmllczoKLSAgICAgIGNtZCArPSBbJy0tZXZlbnQnLCAnLCcuam9pbihjYXRlZ29yaWVzKV0KLSAgICBzZWxmLl9wZXJmX2NvbnRyb2wgPSBwZXJmX2NvbnRyb2wuUGVyZkNvbnRyb2woc2VsZi5fZGV2aWNlKQotICAgIHNlbGYuX3BlcmZfY29udHJvbC5TZXRQZXJmUHJvZmlsaW5nTW9kZSgpCi0gICAgc2VsZi5fcGVyZl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c2VsZi5fbG9nX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0KLSAgZGVmIFNpZ25hbEFuZFdhaXQoc2VsZik6Ci0gICAgc2VsZi5fZGV2aWNlLktpbGxBbGwoJ3BlcmYnLCBzaWdudW09c2lnbmFsLlNJR0lOVCkKLSAgICBzZWxmLl9wZXJmX3Byb2Nlc3Mud2FpdCgpCi0gICAgc2VsZi5fcGVyZl9jb250cm9sLlNldERlZmF1bHRQZXJmTW9kZSgpCi0KLSAgZGVmIF9GYWlsV2l0aExvZyhzZWxmLCBtc2cpOgotICAgIHNlbGYuX2xvZ19maWxlLnNlZWsoMCkKLSAgICBsb2cgPSBzZWxmLl9sb2dfZmlsZS5yZWFkKCkKLSAgICByYWlzZSBSdW50aW1lRXJyb3IoJyVzLiBMb2cgb3V0cHV0OlxuJXMnICUgKG1zZywgbG9nKSkKLQotICBkZWYgUHVsbFJlc3VsdChzZWxmLCBvdXRwdXRfcGF0aCk6Ci0gICAgaWYgbm90IHNlbGYuX2RldmljZS5GaWxlRXhpc3RzKHNlbGYuX291dHB1dF9maWxlLm5hbWUpOgotICAgICAgc2VsZi5fRmFpbFdpdGhMb2coJ1BlcmYgcmVjb3JkZWQgbm8gZGF0YScpCi0KLSAgICBwZXJmX3Byb2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc2VsZi5fb3V0cHV0X2ZpbGUubmFtZSkpCi0gICAgc2VsZi5fZGV2aWNlLlB1bGxGaWxlKHNlbGYuX291dHB1dF9maWxlLm5hbWUsIHBlcmZfcHJvZmlsZSkKLSAgICBpZiBub3Qgb3Muc3RhdChwZXJmX3Byb2ZpbGUpLnN0X3NpemU6Ci0gICAgICBvcy5yZW1vdmUocGVyZl9wcm9maWxlKQotICAgICAgc2VsZi5fRmFpbFdpdGhMb2coJ1BlcmYgcmVjb3JkZWQgYSB6ZXJvLXNpemVkIGZpbGUnKQotCi0gICAgc2VsZi5fbG9nX2ZpbGUuY2xvc2UoKQotICAgIHNlbGYuX291dHB1dF9maWxlLmNsb3NlKCkKLSAgICByZXR1cm4gcGVyZl9wcm9maWxlCi0KLQotY2xhc3MgUGVyZlByb2ZpbGVyQWdlbnQodHJhY2luZ19hZ2VudHMuVHJhY2luZ0FnZW50KToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGRldmljZSk6Ci0gICAgdHJhY2luZ19hZ2VudHMuVHJhY2luZ0FnZW50Ll9faW5pdF9fKHNlbGYpCi0gICAgc2VsZi5fZGV2aWNlID0gZGV2aWNlCi0gICAgc2VsZi5fcGVyZl9iaW5hcnkgPSBzZWxmLl9QcmVwYXJlRGV2aWNlKGRldmljZSkKLSAgICBzZWxmLl9wZXJmX2luc3RhbmNlID0gTm9uZQotICAgIHNlbGYuX2NhdGVnb3JpZXMgPSBOb25lCi0KLSAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgIHJldHVybiAncGVyZiBwcm9maWxlJwotCi0gIEBzdGF0aWNtZXRob2QKLSAgZGVmIElzU3VwcG9ydGVkKCk6Ci0gICAgcmV0dXJuIGJvb2woYW5kcm9pZF9wcm9maWxpbmdfaGVscGVyKQotCi0gIEBzdGF0aWNtZXRob2QKLSAgZGVmIF9QcmVwYXJlRGV2aWNlKGRldmljZSk6Ci0gICAgaWYgbm90ICdCVUlMRFRZUEUnIGluIG9zLmVudmlyb246Ci0gICAgICBvcy5lbnZpcm9uWydCVUlMRFRZUEUnXSA9ICdSZWxlYXNlJwotICAgIGlmIGJpbmFyeV9tYW5hZ2VyLk5lZWRzSW5pdCgpOgotICAgICAgYmluYXJ5X21hbmFnZXIuSW5pdERlcGVuZGVuY3lNYW5hZ2VyKE5vbmUpCi0gICAgcmV0dXJuIGFuZHJvaWRfcHJvZmlsaW5nX2hlbHBlci5QcmVwYXJlRGV2aWNlRm9yUGVyZihkZXZpY2UpCi0KLSAgQGNsYXNzbWV0aG9kCi0gIGRlZiBHZXRDYXRlZ29yaWVzKGNscywgZGV2aWNlKToKLSAgICBwZXJmX2JpbmFyeSA9IGNscy5fUHJlcGFyZURldmljZShkZXZpY2UpCi0gICAgIyBQZXJmIGJpbmFyeSByZXR1cm5zIG5vbi16ZXJvIGV4aXQgc3RhdHVzIG9uICJsaXN0IiBjb21tYW5kLgotICAgIHJldHVybiBkZXZpY2UuUnVuU2hlbGxDb21tYW5kKFtwZXJmX2JpbmFyeSwgJ2xpc3QnXSwgY2hlY2tfcmV0dXJuPUZhbHNlKQotCi0gIEBweV91dGlscy5UaW1lb3V0KHRyYWNpbmdfYWdlbnRzLlNUQVJUX1NUT1BfVElNRU9VVCkKLSAgZGVmIFN0YXJ0QWdlbnRUcmFjaW5nKHNlbGYsIGNvbmZpZywgdGltZW91dD1Ob25lKToKLSAgICBzZWxmLl9jYXRlZ29yaWVzID0gX0NvbXB1dGVQZXJmQ2F0ZWdvcmllcyhjb25maWcpCi0gICAgc2VsZi5fcGVyZl9pbnN0YW5jZSA9IF9QZXJmUHJvZmlsZXIoc2VsZi5fZGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BlcmZfYmluYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhdGVnb3JpZXMpCi0gICAgcmV0dXJuIFRydWUKLQotICBAcHlfdXRpbHMuVGltZW91dCh0cmFjaW5nX2FnZW50cy5TVEFSVF9TVE9QX1RJTUVPVVQpCi0gIGRlZiBTdG9wQWdlbnRUcmFjaW5nKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgaWYgbm90IHNlbGYuX3BlcmZfaW5zdGFuY2U6Ci0gICAgICByZXR1cm4KLSAgICBzZWxmLl9wZXJmX2luc3RhbmNlLlNpZ25hbEFuZFdhaXQoKQotICAgIHJldHVybiBUcnVlCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuR0VUX1JFU1VMVFNfVElNRU9VVCkKLSAgZGVmIEdldFJlc3VsdHMoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICB3aXRoIG9wZW4oc2VsZi5fUHVsbFRyYWNlKCksICdyJykgYXMgZjoKLSAgICAgIHRyYWNlX2RhdGEgPSBmLnJlYWQoKQotICAgIHJldHVybiB0cmFjZV9yZXN1bHQuVHJhY2VSZXN1bHQoJ3BlcmYnLCB0cmFjZV9kYXRhKQotCi0gIEBzdGF0aWNtZXRob2QKLSAgZGVmIF9HZXRJbnRlcmFjdGl2ZVBlcmZDb21tYW5kKHBlcmZob3N0X3BhdGgsIHBlcmZfcHJvZmlsZSwgc3ltZnNfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRfbGlicywga2FsbHN5bXMpOgotICAgIGNtZCA9ICclcyByZXBvcnQgLW4gLWkgJXMgLS1zeW1mcyAlcyAtLWthbGxzeW1zICVzJyAlICgKLSAgICAgICAgb3MucGF0aC5yZWxwYXRoKHBlcmZob3N0X3BhdGgsICcuJyksIHBlcmZfcHJvZmlsZSwgc3ltZnNfZGlyLCBrYWxsc3ltcykKLSAgICBmb3IgbGliIGluIHJlcXVpcmVkX2xpYnM6Ci0gICAgICBsaWIgPSBvcy5wYXRoLmpvaW4oc3ltZnNfZGlyLCBsaWJbMTpdKQotICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxpYik6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICBvYmpkdW1wX3BhdGggPSBhbmRyb2lkX3Byb2ZpbGluZ19oZWxwZXIuR2V0VG9vbGNoYWluQmluYXJ5UGF0aCgKLSAgICAgICAgICBsaWIsICdvYmpkdW1wJykKLSAgICAgIGlmIG9iamR1bXBfcGF0aDoKLSAgICAgICAgY21kICs9ICcgLS1vYmpkdW1wICVzJyAlIG9zLnBhdGgucmVscGF0aChvYmpkdW1wX3BhdGgsICcuJykKLSAgICAgICAgYnJlYWsKLSAgICByZXR1cm4gY21kCi0KLSAgZGVmIF9QdWxsVHJhY2Uoc2VsZik6Ci0gICAgc3ltZnNfZGlyID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5leHBhbmR2YXJzKCckVVNFUi1wZXJmLXN5bWZzJykpCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHN5bWZzX2Rpcik6Ci0gICAgICBvcy5tYWtlZGlycyhzeW1mc19kaXIpCi0gICAgcmVxdWlyZWRfbGlicyA9IHNldCgpCi0KLSAgICAjIERvd25sb2FkIHRoZSByZWNvcmRlZCBwZXJmIHByb2ZpbGUuCi0gICAgcGVyZl9wcm9maWxlID0gc2VsZi5fcGVyZl9pbnN0YW5jZS5QdWxsUmVzdWx0KHN5bWZzX2RpcikKLSAgICByZXF1aXJlZF9saWJzID0gXAotICAgICAgICBhbmRyb2lkX3Byb2ZpbGluZ19oZWxwZXIuR2V0UmVxdWlyZWRMaWJyYXJpZXNGb3JQZXJmUHJvZmlsZSgKLSAgICAgICAgICAgIHBlcmZfcHJvZmlsZSkKLSAgICBpZiBub3QgcmVxdWlyZWRfbGliczoKLSAgICAgIGxvZ2dpbmcud2FybmluZygnTm8gbGlicmFyaWVzIHJlcXVpcmVkIGJ5IHBlcmYgdHJhY2UuIE1vc3QgbGlrZWx5IHRoZXJlICcKLSAgICAgICAgICAgICAgICAgICAgICAnYXJlIG5vIHNhbXBsZXMgaW4gdGhlIHRyYWNlLicpCi0KLSAgICAjIEJ1aWxkIGEgc3ltZnMgd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSBsaWJyYXJpZXMuCi0gICAga2FsbHN5bXMgPSBhbmRyb2lkX3Byb2ZpbGluZ19oZWxwZXIuQ3JlYXRlU3ltRnMoc2VsZi5fZGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWZzX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZF9saWJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9zeW1saW5rcz1GYWxzZSkKLSAgICBwZXJmaG9zdF9wYXRoID0gYmluYXJ5X21hbmFnZXIuRmV0Y2hQYXRoKAotICAgICAgICBhbmRyb2lkX3Byb2ZpbGluZ19oZWxwZXIuR2V0UGVyZmhvc3ROYW1lKCksICd4ODZfNjQnLCAnbGludXgnKQotCi0gICAgdWkuUHJpbnRNZXNzYWdlKCdcbk5vdGU6IHRvIHZpZXcgdGhlIHByb2ZpbGUgaW4gcGVyZiwgcnVuOicpCi0gICAgdWkuUHJpbnRNZXNzYWdlKCcgICcgKyBzZWxmLl9HZXRJbnRlcmFjdGl2ZVBlcmZDb21tYW5kKHBlcmZob3N0X3BhdGgsCi0gICAgICAgIHBlcmZfcHJvZmlsZSwgc3ltZnNfZGlyLCByZXF1aXJlZF9saWJzLCBrYWxsc3ltcykpCi0KLSAgICAjIENvbnZlcnQgdGhlIHBlcmYgcHJvZmlsZSBpbnRvIEpTT04uCi0gICAgcGVyZl9zY3JpcHRfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhpcmRfcGFydHknLCAncGVyZl90b190cmFjaW5nLnB5JykKLSAgICBqc29uX2ZpbGVfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGVyZl9wcm9maWxlKQotICAgIHdpdGggb3Blbihvcy5kZXZudWxsLCAndycpIGFzIGRldl9udWxsLCBcCi0gICAgICAgIG9wZW4oanNvbl9maWxlX25hbWUsICd3JykgYXMganNvbl9maWxlOgotICAgICAgY21kID0gW3BlcmZob3N0X3BhdGgsICdzY3JpcHQnLCAnLXMnLCBwZXJmX3NjcmlwdF9wYXRoLCAnLWknLAotICAgICAgICAgICAgIHBlcmZfcHJvZmlsZSwgJy0tc3ltZnMnLCBzeW1mc19kaXIsICctLWthbGxzeW1zJywga2FsbHN5bXNdCi0gICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoY21kLCBzdGRvdXQ9anNvbl9maWxlLCBzdGRlcnI9ZGV2X251bGwpOgotICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ1BlcmYgZGF0YSB0byBKU09OIGNvbnZlcnNpb24gZmFpbGVkLiBUaGUgcmVzdWx0IHdpbGwgJwotICAgICAgICAgICAgICAgICAgICAgICAgJ25vdCBjb250YWluIGFueSBwZXJmIHNhbXBsZXMuIFlvdSBjYW4gc3RpbGwgdmlldyB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgJ3BlcmYgZGF0YSBtYW51YWxseSBhcyBzaG93biBhYm92ZS4nKQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgcmV0dXJuIGpzb25fZmlsZV9uYW1lCi0KLSAgZGVmIFN1cHBvcnRzRXhwbGljaXRDbG9ja1N5bmMoc2VsZik6Ci0gICAgcmV0dXJuIEZhbHNlCi0KLSAgZGVmIFJlY29yZENsb2NrU3luY01hcmtlcihzZWxmLCBzeW5jX2lkLCBkaWRfcmVjb3JkX3N5bmNfbWFya2VyX2NhbGxiYWNrKToKLSAgICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLSAgICBhc3NlcnQgc2VsZi5TdXBwb3J0c0V4cGxpY2l0Q2xvY2tTeW5jKCksICgnQ2xvY2sgc3luYyBtYXJrZXIgY2Fubm90IGJlICcKLSAgICAgICAgJ3JlY29yZGVkIHNpbmNlIGV4cGxpY2l0IGNsb2NrIHN5bmMgaXMgbm90IHN1cHBvcnRlZC4nKQotCi1kZWYgX09wdGlvbmFsVmFsdWVDYWxsYmFjayhkZWZhdWx0X3ZhbHVlKToKLSAgZGVmIGNhbGxiYWNrKG9wdGlvbiwgXywgX18sIHBhcnNlcik6ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLSAgICB2YWx1ZSA9IGRlZmF1bHRfdmFsdWUKLSAgICBpZiBwYXJzZXIucmFyZ3MgYW5kIG5vdCBwYXJzZXIucmFyZ3NbMF0uc3RhcnRzd2l0aCgnLScpOgotICAgICAgdmFsdWUgPSBwYXJzZXIucmFyZ3MucG9wKDApCi0gICAgc2V0YXR0cihwYXJzZXIudmFsdWVzLCBvcHRpb24uZGVzdCwgdmFsdWUpCi0gIHJldHVybiBjYWxsYmFjawotCi0KLWNsYXNzIFBlcmZDb25maWcodHJhY2luZ19hZ2VudHMuVHJhY2luZ0NvbmZpZyk6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBwZXJmX2NhdGVnb3JpZXMsIGRldmljZSk6Ci0gICAgdHJhY2luZ19hZ2VudHMuVHJhY2luZ0NvbmZpZy5fX2luaXRfXyhzZWxmKQotICAgIHNlbGYucGVyZl9jYXRlZ29yaWVzID0gcGVyZl9jYXRlZ29yaWVzCi0gICAgc2VsZi5kZXZpY2UgPSBkZXZpY2UKLQotCi1kZWYgdHJ5X2NyZWF0ZV9hZ2VudChjb25maWcpOgotICBpZiBjb25maWcucGVyZl9jYXRlZ29yaWVzOgotICAgIHJldHVybiBQZXJmUHJvZmlsZXJBZ2VudChjb25maWcuZGV2aWNlKQotICByZXR1cm4gTm9uZQotCi1kZWYgYWRkX29wdGlvbnMocGFyc2VyKToKLSAgb3B0aW9ucyA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgJ1BlcmYgcHJvZmlsaW5nIG9wdGlvbnMnKQotICBvcHRpb25zLmFkZF9vcHRpb24oJy1wJywgJy0tcGVyZicsIGhlbHA9J0NhcHR1cmUgYSBwZXJmIHByb2ZpbGUgd2l0aCAnCi0gICAgICAgICAgICAgICAgICAgICAndGhlIGNob3NlbiBjb21tYS1kZWxpbWl0ZWQgZXZlbnQgY2F0ZWdvcmllcy4gJwotICAgICAgICAgICAgICAgICAgICAgJ1NhbXBsZXMgQ1BVIGN5Y2xlcyBieSBkZWZhdWx0LiBVc2UgImxpc3QiIHRvIHNlZSAnCi0gICAgICAgICAgICAgICAgICAgICAndGhlIGF2YWlsYWJsZSBzYW1wbGUgdHlwZXMuJywgYWN0aW9uPSdjYWxsYmFjaycsCi0gICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnLCBjYWxsYmFjaz1fT3B0aW9uYWxWYWx1ZUNhbGxiYWNrKCdjeWNsZXMnKSwKLSAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J1BFUkZfQ0FURUdPUklFUycsIGRlc3Q9J3BlcmZfY2F0ZWdvcmllcycpCi0gIHJldHVybiBvcHRpb25zCi0KLWRlZiBnZXRfY29uZmlnKG9wdGlvbnMpOgotICByZXR1cm4gUGVyZkNvbmZpZyhvcHRpb25zLnBlcmZfY2F0ZWdvcmllcywgb3B0aW9ucy5kZXZpY2UpCi0KLWRlZiBfQ29tcHV0ZVBlcmZDYXRlZ29yaWVzKGNvbmZpZyk6Ci0gIGlmIG5vdCBQZXJmUHJvZmlsZXJBZ2VudC5Jc1N1cHBvcnRlZCgpOgotICAgIHJldHVybiBbXQotICBpZiBub3QgY29uZmlnLnBlcmZfY2F0ZWdvcmllczoKLSAgICByZXR1cm4gW10KLSAgcmV0dXJuIGNvbmZpZy5wZXJmX2NhdGVnb3JpZXMuc3BsaXQoJywnKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvcGVyZl90cmFjaW5nX2FnZW50X3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvcGVyZl90cmFjaW5nX2FnZW50X3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGViZTNhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL3BlcmZfdHJhY2luZ19hZ2VudF91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGpzb24KLQotZnJvbSBwcm9maWxlX2Nocm9tZSBpbXBvcnQgcGVyZl90cmFjaW5nX2FnZW50Ci1mcm9tIHByb2ZpbGVfY2hyb21lIGltcG9ydCB1aQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgZGVjb3JhdG9ycwotZnJvbSBzeXN0cmFjZS50cmFjaW5nX2FnZW50cyBpbXBvcnQgYWdlbnRzX3VuaXR0ZXN0Ci0KLQotY2xhc3MgUGVyZlByb2ZpbGVyQWdlbnRUZXN0KGFnZW50c191bml0dGVzdC5CYXNlQWdlbnRUZXN0KToKLSAgQGRlY29yYXRvcnMuQ2xpZW50T25seVRlc3QKLSAgZGVmIHRlc3RHZXRDYXRlZ29yaWVzKHNlbGYpOgotICAgIGlmIG5vdCBwZXJmX3RyYWNpbmdfYWdlbnQuUGVyZlByb2ZpbGVyQWdlbnQuSXNTdXBwb3J0ZWQoKToKLSAgICAgIHJldHVybgotICAgIGNhdGVnb3JpZXMgPSBcCi0gICAgICAgIHBlcmZfdHJhY2luZ19hZ2VudC5QZXJmUHJvZmlsZXJBZ2VudC5HZXRDYXRlZ29yaWVzKHNlbGYuZGV2aWNlKQotICAgIGFzc2VydCAnY3ljbGVzJyBpbiAnICcuam9pbihjYXRlZ29yaWVzKQotCi0gICMgVE9ETyh3YXNoaW5ndG9ucCk6IFRyeSBlbmFibGluZyB0aGlzIHRlc3QgZm9yIHRoZSBTaW1wbGVwZXJmUHJvZmlsZXJBZ2VudCwKLSAgIyB3aGljaCB3aWxsIGJlIGFkZGVkIGxhdGVyLgotICBAZGVjb3JhdG9ycy5EaXNhYmxlZAotICBkZWYgdGVzdFRyYWNpbmcoc2VsZik6Ci0gICAgaWYgbm90IHBlcmZfdHJhY2luZ19hZ2VudC5QZXJmUHJvZmlsZXJBZ2VudC5Jc1N1cHBvcnRlZCgpOgotICAgICAgcmV0dXJuCi0gICAgdWkuRW5hYmxlVGVzdE1vZGUoKQotICAgIGNhdGVnb3JpZXMgPSAnY3ljbGVzJwotICAgIGFnZW50ID0gcGVyZl90cmFjaW5nX2FnZW50LlBlcmZQcm9maWxlckFnZW50KHNlbGYuZGV2aWNlKQotCi0gICAgdHJ5OgotICAgICAgYWdlbnQuU3RhcnRBZ2VudFRyYWNpbmcocGVyZl90cmFjaW5nX2FnZW50LlBlcmZDb25maWcoY2F0ZWdvcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGV2aWNlKSkKLSAgICBmaW5hbGx5OgotICAgICAgYWdlbnQuU3RvcEFnZW50VHJhY2luZygpCi0KLSAgICByZXN1bHQgPSBhZ2VudC5HZXRSZXN1bHRzKCkKLSAgICBqc29uLmxvYWRzKHJlc3VsdC5yYXdfZGF0YSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL3Byb2ZpbGVyLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvcHJvZmlsZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0OGFhYmIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvcHJvZmlsZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgdGltZQotCi1mcm9tIHByb2ZpbGVfY2hyb21lIGltcG9ydCBjaHJvbWVfc3RhcnR1cF90cmFjaW5nX2FnZW50Ci1mcm9tIHByb2ZpbGVfY2hyb21lIGltcG9ydCBjaHJvbWVfdHJhY2luZ19hZ2VudAotZnJvbSBwcm9maWxlX2Nocm9tZSBpbXBvcnQgdWkKLWZyb20gcHJvZmlsZV9jaHJvbWUgaW1wb3J0IHV0aWwKLWZyb20gc3lzdHJhY2UgaW1wb3J0IG91dHB1dF9nZW5lcmF0b3IKLWZyb20gc3lzdHJhY2UgaW1wb3J0IHRyYWNpbmdfY29udHJvbGxlcgotCi0KLWRlZiBfR2V0UmVzdWx0cyh0cmFjZV9yZXN1bHRzLCBjb250cm9sbGVyLCBvdXRwdXQsIGNvbXByZXNzLCB3cml0ZV9qc29uLAotICAgICAgICAgICAgICAgIGludGVydmFsKToKLSAgdWkuUHJpbnRNZXNzYWdlKCdEb3dubG9hZGluZy4uLicpCi0KLSAgIyBXYWl0IGZvciB0aGUgdHJhY2UgZmlsZSB0byBnZXQgd3JpdHRlbi4KLSAgdGltZS5zbGVlcCgxKQotCi0gIGZvciBhZ2VudCBpbiBjb250cm9sbGVyLmdldF9jaGlsZF9hZ2VudHM6Ci0gICAgaWYgaXNpbnN0YW5jZShhZ2VudCwgY2hyb21lX3RyYWNpbmdfYWdlbnQuQ2hyb21lVHJhY2luZ0FnZW50KToKLSAgICAgIHRpbWUuc2xlZXAoaW50ZXJ2YWwgLyA0KQotCi0gICMgSWdub3JlIHRoZSBzeXN0cmFjZUNvbnRyb2xsZXIgYmVjYXVzZSBpdCB3aWxsIG5vdCBjb250YWluIGFueSByZXN1bHRzLAotICAjIGluc3RlYWQgYmVpbmcgaW4gY2hhcmdlIG9mIGNvbGxlY3RpbmcgcmVzdWx0cy4KLSAgdHJhY2VfcmVzdWx0cyA9IFt4IGZvciB4IGluIGNvbnRyb2xsZXIuYWxsX3Jlc3VsdHMgaWYgbm90ICh4LnNvdXJjZV9uYW1lID09Ci0gICAgICAnc3lzdHJhY2VDb250cm9sbGVyJyldCi0KLSAgaWYgbm90IHRyYWNlX3Jlc3VsdHM6Ci0gICAgdWkuUHJpbnRNZXNzYWdlKCdObyByZXN1bHRzJykKLSAgICByZXR1cm4gJycKLQotICByZXN1bHQgPSBOb25lCi0gIHRyYWNlX3Jlc3VsdHMgPSBvdXRwdXRfZ2VuZXJhdG9yLk1lcmdlVHJhY2VSZXN1bHRzSWZOZWVkZWQodHJhY2VfcmVzdWx0cykKLSAgaWYgbm90IHdyaXRlX2pzb246Ci0gICAgdWkuUHJpbnRNZXNzYWdlKCdXcml0aW5nIHRyYWNlIEhUTUwuLi4nKQotICAgIGh0bWxfZmlsZSA9IG91dHB1dCBvciB0cmFjZV9yZXN1bHRzWzBdLnNvdXJjZV9uYW1lICsgJy5odG1sJwotICAgIHJlc3VsdCA9IG91dHB1dF9nZW5lcmF0b3IuR2VuZXJhdGVIVE1MT3V0cHV0KHRyYWNlX3Jlc3VsdHMsIGh0bWxfZmlsZSkKLSAgICB1aS5QcmludE1lc3NhZ2UoJ1xuV3JvdGUgZmlsZTovLyVzJyAlIHJlc3VsdCkKLSAgZWxpZiBjb21wcmVzcyBhbmQgbGVuKHRyYWNlX3Jlc3VsdHMpID09IDE6Ci0gICAgcmVzdWx0ID0gb3V0cHV0IG9yIHRyYWNlX3Jlc3VsdHNbMF0uc291cmNlX25hbWUgKyAnLmd6JwotICAgIHV0aWwuV3JpdGVEYXRhVG9Db21wcmVzc2VkRmlsZSh0cmFjZV9yZXN1bHRzWzBdLnJhd19kYXRhLCByZXN1bHQpCi0gIGVsaWYgbGVuKHRyYWNlX3Jlc3VsdHMpID4gMToKLSAgICByZXN1bHQgPSAob3V0cHV0IG9yICdjaHJvbWUtY29tYmluZWQtdHJhY2UtJXMuemlwJyAlCi0gICAgICAgICAgICAgIHV0aWwuR2V0VHJhY2VUaW1lc3RhbXAoKSkKLSAgICB1dGlsLkFyY2hpdmVEYXRhKHRyYWNlX3Jlc3VsdHMsIHJlc3VsdCkKLSAgZWxpZiBvdXRwdXQ6Ci0gICAgcmVzdWx0ID0gb3V0cHV0Ci0gICAgd2l0aCBvcGVuKHJlc3VsdCwgJ3diJykgYXMgZjoKLSAgICAgIGYud3JpdGUodHJhY2VfcmVzdWx0c1swXS5yYXdfZGF0YSkKLSAgZWxzZToKLSAgICByZXN1bHQgPSB0cmFjZV9yZXN1bHRzWzBdLnNvdXJjZV9uYW1lCi0gICAgd2l0aCBvcGVuKHJlc3VsdCwgJ3diJykgYXMgZjoKLSAgICAgIGYud3JpdGUodHJhY2VfcmVzdWx0c1swXS5yYXdfZGF0YSkKLQotICByZXR1cm4gcmVzdWx0Ci0KLQotZGVmIENhcHR1cmVQcm9maWxlKG9wdGlvbnMsIGludGVydmFsLCBtb2R1bGVzLCBvdXRwdXQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICBjb21wcmVzcz1GYWxzZSwgd3JpdGVfanNvbj1GYWxzZSk6Ci0gICIiIlJlY29yZHMgYSBwcm9maWxpbmcgdHJhY2Ugc2F2ZXMgdGhlIHJlc3VsdCB0byBhIGZpbGUuCi0KLSAgQXJnczoKLSAgICBvcHRpb25zOiBDb21tYW5kIGxpbmUgb3B0aW9ucy4KLSAgICBpbnRlcnZhbDogVGltZSBpbnRlcnZhbCB0byBjYXB0dXJlIGluIHNlY29uZHMuIEFuIGludGVydmFsIG9mIE5vbmUgKG9yIDApCi0gICAgICAgIGNvbnRpbnVlcyB0cmFjaW5nIHVudGlsIHN0b3BwZWQgYnkgdGhlIHVzZXIuCi0gICAgbW9kdWxlczogVGhlIGxpc3Qgb2YgbW9kdWxlcyB0byBpbml0aWFsaXplIHRoZSB0cmFjaW5nIGNvbnRyb2xsZXIgd2l0aC4KLSAgICBvdXRwdXQ6IE91dHB1dCBmaWxlIG5hbWUgb3IgTm9uZSB0byB1c2UgYW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbmFtZS4KLSAgICBjb21wcmVzczogSWYgVHJ1ZSwgdGhlIHJlc3VsdCB3aWxsIGJlIGNvbXByZXNzZWQgZWl0aGVyIHdpdGggZ3ppcCBvciB6aXAKLSAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgY2FwdHVyZWQgc3VidHJhY2VzLgotICAgIHdyaXRlX2pzb246IElmIFRydWUsIHByZWZlciBKU09OIG91dHB1dCBvdmVyIEhUTUwuCi0KLSAgUmV0dXJuczoKLSAgICBQYXRoIHRvIHNhdmVkIHByb2ZpbGUuCi0gICIiIgotICBhZ2VudHNfd2l0aF9jb25maWcgPSB0cmFjaW5nX2NvbnRyb2xsZXIuQ3JlYXRlQWdlbnRzV2l0aENvbmZpZyhvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzKQotICBpZiBjaHJvbWVfc3RhcnR1cF90cmFjaW5nX2FnZW50IGluIG1vZHVsZXM6Ci0gICAgY29udHJvbGxlcl9jb25maWcgPSB0cmFjaW5nX2NvbnRyb2xsZXIuR2V0Q2hyb21lU3RhcnR1cENvbnRyb2xsZXJDb25maWcoCi0gICAgICAgIG9wdGlvbnMpCi0gIGVsc2U6Ci0gICAgY29udHJvbGxlcl9jb25maWcgPSB0cmFjaW5nX2NvbnRyb2xsZXIuR2V0Q29udHJvbGxlckNvbmZpZyhvcHRpb25zKQotICBjb250cm9sbGVyID0gdHJhY2luZ19jb250cm9sbGVyLlRyYWNpbmdDb250cm9sbGVyKGFnZW50c193aXRoX2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyX2NvbmZpZykKLSAgdHJ5OgotICAgIHJlc3VsdCA9IGNvbnRyb2xsZXIuU3RhcnRUcmFjaW5nKCkKLSAgICB0cmFjZV90eXBlID0gY29udHJvbGxlci5HZXRUcmFjZVR5cGUoKQotICAgIGlmIG5vdCByZXN1bHQ6Ci0gICAgICB1aS5QcmludE1lc3NhZ2UoJ1RyYWNlIHN0YXJ0aW5nIGZhaWxlZC4nKQotICAgIGlmIGludGVydmFsOgotICAgICAgdWkuUHJpbnRNZXNzYWdlKCgnQ2FwdHVyaW5nICVkLXNlY29uZCAlcy4gUHJlc3MgRW50ZXIgdG8gc3RvcCBlYXJseS4uLicgJQotICAgICAgICAgICAgICAgICAgICAgKGludGVydmFsLCB0cmFjZV90eXBlKSksIGVvbD0nJykKLSAgICAgIHVpLldhaXRGb3JFbnRlcihpbnRlcnZhbCkKLSAgICBlbHNlOgotICAgICAgdWkuUHJpbnRNZXNzYWdlKCdDYXB0dXJpbmcgJXMuIFByZXNzIEVudGVyIHRvIHN0b3AuLi4nICUgdHJhY2VfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICBlb2w9JycpCi0gICAgICByYXdfaW5wdXQoKQotCi0gICAgdWkuUHJpbnRNZXNzYWdlKCdTdG9wcGluZy4uLicpCi0gICAgYWxsX3Jlc3VsdHMgPSBjb250cm9sbGVyLlN0b3BUcmFjaW5nKCkKLSAgZmluYWxseToKLSAgICBpZiBpbnRlcnZhbDoKLSAgICAgIHVpLlByaW50TWVzc2FnZSgnZG9uZScpCi0KLSAgcmV0dXJuIF9HZXRSZXN1bHRzKGFsbF9yZXN1bHRzLCBjb250cm9sbGVyLCBvdXRwdXQsIGNvbXByZXNzLCB3cml0ZV9qc29uLAotICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWwpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9wcm9maWxlcl91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL3Byb2ZpbGVyX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjM1NzUzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL3Byb2ZpbGVyX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IHppcGZpbGUKLQotZnJvbSBwcm9maWxlX2Nocm9tZSBpbXBvcnQgcHJvZmlsZXIKLWZyb20gcHJvZmlsZV9jaHJvbWUgaW1wb3J0IHVpCi1mcm9tIHByb2ZpbGVfY2hyb21lIGltcG9ydCBmYWtlX2FnZW50XzEKLWZyb20gcHJvZmlsZV9jaHJvbWUgaW1wb3J0IGZha2VfYWdlbnRfMgotZnJvbSBzeXN0cmFjZSBpbXBvcnQgZGVjb3JhdG9ycwotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2luZ19jb250cm9sbGVyCi0KLQotY2xhc3MgUHJvZmlsZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHVpLkVuYWJsZVRlc3RNb2RlKCkKLSAgICBzZWxmLl90cmFjaW5nX29wdGlvbnMgPSB0cmFjaW5nX2NvbnRyb2xsZXIuVHJhY2luZ0NvbnRyb2xsZXJDb25maWcoTm9uZSwKLSAgICAgICAgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkKLQotICBAZGVjb3JhdG9ycy5DbGllbnRPbmx5VGVzdAotICBkZWYgdGVzdENhcHR1cmVCYXNpY1Byb2ZpbGUoc2VsZik6Ci0gICAgcmVzdWx0ID0gcHJvZmlsZXIuQ2FwdHVyZVByb2ZpbGUoc2VsZi5fdHJhY2luZ19vcHRpb25zLCAxLCBbZmFrZV9hZ2VudF8xXSkKLQotICAgIHRyeToKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXN1bHQpKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5lbmRzd2l0aCgnLmh0bWwnKSkKLSAgICBmaW5hbGx5OgotICAgICAgaWYgb3MucGF0aC5leGlzdHMocmVzdWx0KToKLSAgICAgICAgb3MucmVtb3ZlKHJlc3VsdCkKLQotICBAZGVjb3JhdG9ycy5DbGllbnRPbmx5VGVzdAotICBkZWYgdGVzdENhcHR1cmVKc29uUHJvZmlsZShzZWxmKToKLSAgICByZXN1bHQgPSBwcm9maWxlci5DYXB0dXJlUHJvZmlsZShzZWxmLl90cmFjaW5nX29wdGlvbnMsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zha2VfYWdlbnRfMl0sIHdyaXRlX2pzb249VHJ1ZSkKLQotICAgIHRyeToKLSAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LmVuZHN3aXRoKCcuaHRtbCcpKQotICAgICAgd2l0aCBvcGVuKHJlc3VsdCkgYXMgZjoKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksICdmYWtlLWNvbnRlbnRzJykKLSAgICBmaW5hbGx5OgotICAgICAgaWYgb3MucGF0aC5leGlzdHMocmVzdWx0KToKLSAgICAgICAgb3MucmVtb3ZlKHJlc3VsdCkKLQotICBAZGVjb3JhdG9ycy5DbGllbnRPbmx5VGVzdAotICBkZWYgdGVzdENhcHR1cmVNdWx0aXBsZVByb2ZpbGVzKHNlbGYpOgotICAgIHJlc3VsdCA9IHByb2ZpbGVyLkNhcHR1cmVQcm9maWxlKHNlbGYuX3RyYWNpbmdfb3B0aW9ucywgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmFrZV9hZ2VudF8xLCBmYWtlX2FnZW50XzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX2pzb249VHJ1ZSkKLQotICAgIHRyeToKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuZW5kc3dpdGgoJy56aXAnKSkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmaWxlLmlzX3ppcGZpbGUocmVzdWx0KSkKLSAgICBmaW5hbGx5OgotICAgICAgaWYgb3MucGF0aC5leGlzdHMocmVzdWx0KToKLSAgICAgICAgb3MucmVtb3ZlKHJlc3VsdCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL3J1bl90ZXN0cyBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL3J1bl90ZXN0cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNmFlMTg1NC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS9ydW5fdGVzdHMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMhL2Jpbi9zaAotY2QgJChkaXJuYW1lICQwKS8uLi8KLWV4ZWMgcHl0aG9uIC1tIHVuaXR0ZXN0IGRpc2NvdmVyIHByb2ZpbGVfY2hyb21lICcqX3VuaXR0ZXN0LnB5JyAkQApkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvdGhpcmRfcGFydHkvQ09QWUlORyBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL3RoaXJkX3BhcnR5L0NPUFlJTkcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNTkxNjkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvdGhpcmRfcGFydHkvQ09QWUlORworKysgL2Rldi9udWxsCkBAIC0xLDMzOSArMCwwIEBACi0gICAgICAgICAgICAgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCi0gICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCi0KLSBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKLSBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCi0KLSAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgotZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLUxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKLXNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCi1HZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwotdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQotdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KLXlvdXIgcHJvZ3JhbXMsIHRvby4KLQotICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90Ci1wcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91Ci1oYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCi10aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKLWlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0Ci1pbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCi0KLSAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAotYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgotVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKLWRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KLQotICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCi1ncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKLXlvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCi1zb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCi1yaWdodHMuCi0KLSAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAotKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKLWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCi0KLSAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KLXRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCi1zb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKLXdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCi10aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAotYXV0aG9ycycgcmVwdXRhdGlvbnMuCi0KLSAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKLXBhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKLXByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKLXByb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQotcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KLQotICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAotbW9kaWZpY2F0aW9uIGZvbGxvdy4KLQotICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCi0KLSAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucwotYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKLXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKLXJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgotbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKLXRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCi1laXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgotbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgotdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCi0KLUFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Ci1jb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCi1ydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCi1pcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQotUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KLVdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgotCi0gIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncwotc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Ci1jb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCi1jb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCi1ub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7Ci1hbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCi1hbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgotCi1Zb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKLXlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCi0KLSAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgotb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAotZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCi1hYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgotCi0gICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KLQotICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgotICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQotICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCi0gICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgotCi0gICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQotICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKLSAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCi0gICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCi0gICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCi0gICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgotICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCi0gICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKLSAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCi0gICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCi0KLVRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKLWlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCi1hbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KLXRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKLXNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQotZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCi1vbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKLXRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCi1lbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCi0KLVRodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoteW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCi1leGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKLWNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCi0KLUluIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KLXdpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgotYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKLXRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCi11bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKLVNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLQotICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKLSAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKLSAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKLQotICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCi0gICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKLSAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCi0gICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQotICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCi0gICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAotCi0gICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKLSAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcwotICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91Ci0gICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAotICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQotCi1UaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCi1tYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQotY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKLWFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bwotY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQotc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCi1hbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQotZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKLW9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50Ci1pdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCi0KLUlmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKLWFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKLWFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcwotZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Ci1jb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgotCi0gIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAotb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCi12b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCi1Ib3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgotdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKLXBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KLQotICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKLXNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCi1kaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKLXByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKLW1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQotUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKLWFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKLXRoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgotCi0gIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKLVByb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCi1vcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCi10aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgotcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgotWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KLXRoaXMgTGljZW5zZS4KLQotICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50Ci1pbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAotY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgotb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAotZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKLWRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKLUxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKLW1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKLWxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKLWFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgotdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwotcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KLQotSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCi1hbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCi1hcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgotY2lyY3Vtc3RhbmNlcy4KLQotSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQotcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKLXN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKLWludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcwotaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCi1nZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCi10aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAotc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwotdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90Ci1pbXBvc2UgdGhhdCBjaG9pY2UuCi0KLVRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bwotYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KLWNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQotb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQotbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCi10aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCi1jb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKLXRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgotCi0gIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCi1vZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKLWJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwotYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCi0KLUVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KLXNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55Ci1sYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi1laXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgotdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbi4KLQotICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCi1wcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCi10byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcwotbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKLW9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKLW9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTk8gV0FSUkFOVFkKLQotICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKLUZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgotT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUwotUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKLU9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCi1UTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCi1QUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKLVJFUEFJUiBPUiBDT1JSRUNUSU9OLgotCi0gIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKLVdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKLVJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCi1JTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKLU9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKLVRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQotWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKLVBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQotUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgotCi0gICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQotICAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCi0KLSAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAotcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAotZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCi0KLSAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKLXRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKLWNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Ci10aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KLQotICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+Ci0gICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0KLUFsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgotCi1JZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCi13aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgotCi0gICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCi0gICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgotICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKLSAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCi0KLVRoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQotcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQotYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCi1tb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgotCi1Zb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgotc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKLW5lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKLQotICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCi0gIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgotCi0gIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQotICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQotCi1UaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KLXByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Ci1jb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKLWxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCi1QdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL3RoaXJkX3BhcnR5L1JFQURNRS5jaHJvbWl1bSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL3RoaXJkX3BhcnR5L1JFQURNRS5jaHJvbWl1bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY1OGE2NS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS90aGlyZF9wYXJ0eS9SRUFETUUuY2hyb21pdW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1OYW1lOiBQZXJmIHRvIEpTT04gY29udmVyc2lvbiBzY3JpcHQKLVNob3J0IE5hbWU6IHBlcmZfdG9fanNvbgotVVJMOiBodHRwOi8vd3d3LmNocm9taXVtLm9yZwotVmVyc2lvbjogMAotRGF0ZTogMjEuNy4yMDE0Ci1SZXZpc2lvbjogMAotTGljZW5zZTogR1BMCi1MaWNlbnNlIEZpbGU6IE5PVF9TSElQUEVECi1TZWN1cml0eSBDcml0aWNhbDogTm8KLQotRGVzY3JpcHRpb246Ci1TY3JpcHQgZm9yIGNvbnZlcnRpbmcgcGVyZiBzY3JpcHQgZXZlbnRzIGludG8gdHJhY2luZyBKU09OLgotCi1Mb2NhbCBNb2RpZmljYXRpb25zOgotTm9uZS4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL3RoaXJkX3BhcnR5L3BlcmZfdG9fdHJhY2luZy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL3RoaXJkX3BhcnR5L3BlcmZfdG9fdHJhY2luZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgwOTM3YS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS90aGlyZF9wYXJ0eS9wZXJmX3RvX3RyYWNpbmcucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotIyBTY3JpcHQgZm9yIGNvbnZlcnRpbmcgcGVyZiBzY3JpcHQgZXZlbnRzIGludG8gdHJhY2luZyBKU09OLgotIwotIyBHZW5lcmF0ZWQgYnkgcGVyZiBzY3JpcHQgLWcgcHl0aG9uCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMgotCi1pbXBvcnQganNvbgotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLWZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCi0KLQotIyBDYXRlZ29yaXplIERTT3MgYnkgY29tcG9uZW50LgotZHNvX3RvX2NvbXAgPSB7Ci0gICAgJ2xpYmR2bS5zbyc6ICdKYXZhJywKLSAgICAnbGliYXJ0LnNvJzogJ0phdmEnLAotICAgICdsaWJqYXZhY29yZS5zbyc6ICdKYXZhJywKLSAgICAnbGliYW5kcm9pZF9ydW50aW1lLnNvJzogJ0FuZHJvaWQnLAotICAgICdsaWJndWkuc28nOiAnQW5kcm9pZCcsCi0gICAgJ2xpYnVpLnNvJzogJ0FuZHJvaWQnLAotICAgICdsaWJiaW5kZXIuc28nOiAnQW5kcm9pZCcsCi0gICAgJ2xpYm1lbWFsbG9jLnNvJzogJ0FuZHJvaWQnLAotICAgICdsaWJjcnlwdG8uc28nOiAnQW5kcm9pZCcsCi0gICAgJ2xpYmN1dGlscy5zbyc6J0FuZHJvaWQnLAotICAgICdsaWJ1dGlscy5zbyc6ICdBbmRyb2lkJywKLSAgICAnW2tlcm5lbC5rYWxsc3ltc10nOiAnS2VybmVsJywKLSAgICAnbGliYy5zbyc6ICdTdGFuZGFyZCBMaWInLAotICAgICdsaWJzdGRjKysuc28nOiAnU3RhbmRhcmQgTGliJywKLSAgICAnbGlibS5zbyc6J1N0YW5kYXJkIExpYicsCi0gICAgJ2xpYkdMRVN2Ml9hZHJlbm8uc28nOiAnR1BVIERyaXZlcicsCi0gICAgJ2xpYkdMRVN2Ml9hZHJlbm8yMDAuc28nOiAnR1BVIERyaXZlcicsCi0gICAgJ2xpYnEzZHRvb2xzX2FkcmVubzIwMC5zbyc6ICdHUFUgRHJpdmVyJywKLSAgICAnbGliRUdMX2FkcmVuby5zbyc6ICdHUFUgRHJpdmVyJywKLSAgICAnbGliRUdMX2FkcmVubzIwMC5zbyc6ICdHUFUgRHJpdmVyJywKLSAgICAnbGliRUdMLnNvJzogJ0dQVSBEcml2ZXInLAotICAgICdsaWJnc2wuc28nOiAnR1BVIERyaXZlcicsCi0gICAgJ2xpYkdMRVN2Mi5zbyc6ICdHUFUgRHJpdmVyJywKLSAgICAnbGlic2MtYTN4eC5zbyc6ICdHUFUgRHJpdmVyJywKLSAgICAnbGliYWRyZW5vX3V0aWxzLnNvJzogJ0dQVSBEcml2ZXInLAotICAgICdlZ2xzdWJBbmRyb2lkLnNvJzogJ0dQVSBEcml2ZXInLAotICAgICdncmFsbG9jLm1zbTg5NjAuc28nOiAnR1BVIERyaXZlcicsCi0gICAgJ2xpYmFkcmVub191dGlscyc6ICdHUFUgRHJpdmVyJywKLSAgICAnbGliR0xFU19tYWxpLnNvJzogJ0dQVSBEcml2ZXInLAotICAgICdsaWJjaHJvbWV2aWV3LnNvJzogJ0Nocm9tZScsCi0gICAgJ1t1bmtub3duXSc6ICc8dW5rbm93bj4nLAotICAgICdbVU5LTk9XTl0nOiAnPHVua25vd24+JywKLX0KLQotCi1kZWYgRmlsdGVyU3ltYm9sTW9kdWxlKG1vZHVsZSk6Ci0gIG0gPSBkc29fdG9fY29tcC5nZXQobW9kdWxlLCBOb25lKQotICBpZiBtOgotICAgIHJldHVybiBtCi0gIGlmIG1vZHVsZS5maW5kKCdsaWJjaHJvbWUuJykgPT0gMDoKLSAgICByZXR1cm4gJ0Nocm9tZScKLSAgaWYgbW9kdWxlLmZpbmQoJ2RhbHZpaycpID49IDAgb3IgbW9kdWxlLmZpbmQoJ0AnKSA+PSAwOgotICAgIHJldHVybiAnSmF2YScKLSAgcmV0dXJuIG1vZHVsZQotCi0KLWRlZiBGaWx0ZXJTeW1ib2xOYW1lKG1vZHVsZSwgb3JpZ25fbW9kdWxlLCBuYW1lKToKLSAgaWYgbW9kdWxlID09ICdKYXZhJzoKLSAgICByZXR1cm4gbmFtZQotICBlbGlmIG1vZHVsZSA9PSAnR1BVIERyaXZlcic6Ci0gICAgcmV0dXJuIG5hbWUKLSAgaWYgbmFtZSA9PSAnJzoKLSAgICByZXR1cm4gb3JpZ25fbW9kdWxlICsgJzp1bmtub3duJwotICBpZiBuYW1lWzBdLmlzZGlnaXQoKSBvciBuYW1lID09ICcobmlsKSc6Ci0gICAgcmV0dXJuIG9yaWduX21vZHVsZSArICc6dW5rbm93bicKLSAgcmV0dXJuIG5hbWUKLQotCi1jbGFzcyBTdGFja0ZyYW1lTm9kZToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YWNrX2lkLCBuYW1lLCBjYXRlZ29yeSk6Ci0gICAgc2VsZi5zdGFja19pZCA9IHN0YWNrX2lkCi0gICAgc2VsZi5wYXJlbnRfaWQgPSAwCi0gICAgc2VsZi5jaGlsZHJlbiA9IHt9Ci0gICAgc2VsZi5jYXRlZ29yeSA9IGNhdGVnb3J5Ci0gICAgc2VsZi5uYW1lID0gbmFtZQotICAgIHNlbGYuc2FtcGxlcyA9IFtdCi0gICAgc2VsZi50b3RhbF93ZWlnaHQgPSAwLjAKLSAgICBzZWxmLmhhdmVfdG90YWxfd2VpZ2h0ID0gRmFsc2UKLSAgICBzZWxmLnBhcmVudCA9IE5vbmUKLQotICBkZWYgVG9EaWN0KHNlbGYsIG91dF9kaWN0KToKLSAgICBpZiBzZWxmLnN0YWNrX2lkOgotICAgICAgbm9kZV9kaWN0ID0ge30KLSAgICAgIG5vZGVfZGljdFsnbmFtZSddID0gc2VsZi5uYW1lCi0gICAgICBub2RlX2RpY3RbJ2NhdGVnb3J5J10gPSBzZWxmLmNhdGVnb3J5Ci0gICAgICBpZiBzZWxmLnBhcmVudF9pZDoKLSAgICAgICAgbm9kZV9kaWN0WydwYXJlbnQnXSA9IHNlbGYucGFyZW50X2lkCi0KLSAgICAgIG91dF9kaWN0W3NlbGYuc3RhY2tfaWRdID0gbm9kZV9kaWN0Ci0KLSAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbi52YWx1ZXMoKToKLSAgICAgIGNoaWxkLlRvRGljdChvdXRfZGljdCkKLSAgICByZXR1cm4gb3V0X2RpY3QKLQotICBkZWYgR2V0VG90YWxXZWlnaHQoc2VsZik6Ci0gICAgaWYgc2VsZi5oYXZlX3RvdGFsX3dlaWdodDoKLSAgICAgIHJldHVybiBzZWxmLnRvdGFsX3dlaWdodAotICAgIGVsc2U6Ci0gICAgICAjIFN1bSB1cCBzZWxmIHNhbXBsZXMgd2VpZ2h0LCBhbmQgY2hpbGRyZW4ncyB0b3RhbCB3ZWlnaHRzLgotICAgICAgZm9yIHMgaW4gc2VsZi5zYW1wbGVzOgotICAgICAgICBzZWxmLnRvdGFsX3dlaWdodCArPSBzLndlaWdodAotICAgICAgZm9yIGMgaW4gc2VsZi5jaGlsZHJlbi52YWx1ZXMoKToKLSAgICAgICAgc2VsZi50b3RhbF93ZWlnaHQgKz0gYy5HZXRUb3RhbFdlaWdodCgpCi0gICAgICBzZWxmLmhhdmVfdG90YWxfd2VpZ2h0ID0gVHJ1ZQotICAgICAgcmV0dXJuIHNlbGYudG90YWxfd2VpZ2h0Ci0KLQotY2xhc3MgUGVyZlNhbXBsZToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YWNrX2lkLCB0cywgY3B1LCB0aWQsIHdlaWdodCwgc2FtcF90eXBlLCBjb21tKToKLSAgICBzZWxmLnN0YWNrX2lkID0gc3RhY2tfaWQKLSAgICBzZWxmLnRzID0gdHMKLSAgICBzZWxmLmNwdSA9IGNwdQotICAgIHNlbGYudGlkID0gdGlkCi0gICAgc2VsZi53ZWlnaHQgPSB3ZWlnaHQKLSAgICBzZWxmLnR5cGUgPSBzYW1wX3R5cGUKLSAgICBzZWxmLmNvbW0gPSBjb21tCi0KLSAgZGVmIFRvRGljdChzZWxmKToKLSAgICByZXQgPSB7fQotICAgIHJldFsndHMnXSA9IHNlbGYudHMgLyAxMDAwLjAgICMgVGltZXN0YW1wIGluIG1pY3Jvc2Vjb25kcwotICAgIHJldFsndGlkJ10gPSBzZWxmLnRpZCAgIyBUaHJlYWQgaWQKLSAgICByZXRbJ2NwdSddID0gc2VsZi5jcHUgICMgU2FtcGxlZCBDUFUKLSAgICByZXRbJ3dlaWdodCddID0gc2VsZi53ZWlnaHQgICMgU2FtcGxlIHdlaWdodAotICAgIHJldFsnbmFtZSddID0gc2VsZi50eXBlICAjIFNhbXBsZSB0eXBlCi0gICAgcmV0Wydjb21tJ10gPSBzZWxmLmNvbW0gICMgU2FtcGxlIHR5cGUKLSAgICBhc3NlcnQgc2VsZi5zdGFja19pZCAhPSAwCi0gICAgaWYgc2VsZi5zdGFja19pZDoKLSAgICAgIHJldFsnc2YnXSA9IHNlbGYuc3RhY2tfaWQgICMgU3RhY2sgZnJhbWUgaWQKLSAgICByZXR1cm4gcmV0Ci0KLQotc2FtcGxlcyA9IFtdCi1yb290X2NoYWluID0gU3RhY2tGcmFtZU5vZGUoMCwgJ3Jvb3QnLCAnW3Vua25vd25dJykKLW5leHRfc3RhY2tfaWQgPSAxCi10b3RfcGVyaW9kID0gMAotc2F2ZWRfcGVyaW9kID0gMAotCi0KLWRlZiBwcm9jZXNzX2V2ZW50KHBhcmFtX2RpY3QpOgotICBnbG9iYWwgbmV4dF9zdGFja19pZAotICBnbG9iYWwgc2F2ZWRfcGVyaW9kCi0gIGdsb2JhbCB0b3RfcGVyaW9kCi0KLSAgc2FtcF9jb21tID0gcGFyYW1fZGljdFsnY29tbSddCi0gIHNhbXBfdGlkID0gcGFyYW1fZGljdFsndGlkJ10KLSAgc2FtcF9jcHUgPSBwYXJhbV9kaWN0WydjcHUnXQotICBzYW1wX3RzID0gcGFyYW1fZGljdFsndGltZSddCi0gIHNhbXBfcGVyaW9kID0gcGFyYW1fZGljdFsncGVyaW9kJ10KLSAgc2FtcF90eXBlID0gcGFyYW1fZGljdFsnZXZfbmFtZSddCi0gIHRvdF9wZXJpb2QgKz0gc2FtcF9wZXJpb2QKLQotICAjIFBhcnNlIGNhbGwgY2hhaW4uCi0gIHNlZW5fc3ltcyA9IHNldCgpCi0gIGNoYWluID0gZGVxdWUoKQotICBmb3IgY3MgaW4gcGFyYW1fZGljdFsnY3MnXToKLSAgICBjc19uYW1lID0gY3NbMF0KLSAgICBjc19kc28gPSBvcy5wYXRoLmJhc2VuYW1lKGNzWzFdKQotICAgIGNzX2NhdGVnb3J5ID0gRmlsdGVyU3ltYm9sTW9kdWxlKGNzX2RzbykKLSAgICBjc19uYW1lID0gRmlsdGVyU3ltYm9sTmFtZShjc19jYXRlZ29yeSwgY3NfZHNvLCBjc19uYW1lKQotCi0gICAgaWYgY3NfY2F0ZWdvcnkgIT0gJzx1bmtub3duPicgb3IgbGVuKGNoYWluKSA9PSAwOgotICAgICAgc3ltID0gKGNzX25hbWUsIGNzX2NhdGVnb3J5KQotICAgICAgaWYgc3ltIGluIHNlZW5fc3ltczoKLSAgICAgICAgd2hpbGUgY2hhaW5bMF0gIT0gc3ltOgotICAgICAgICAgIHNlZW5fc3ltcy5yZW1vdmUoY2hhaW5bMF0pCi0gICAgICAgICAgY2hhaW4ucG9wbGVmdCgpCi0gICAgICBlbHNlOgotICAgICAgICBzZWVuX3N5bXMuYWRkKHN5bSkKLSAgICAgICAgY2hhaW4uYXBwZW5kbGVmdChzeW0pCi0KLSAgICAgICMgRGlzY2FyZCBnYXJiYWdlIHN0YWNrdHJhY2UgYmVmb3JlIF9fcHRocmVhZF9zdGFydCgpCi0gICAgICBpZiBjc19uYW1lID09ICdfX3B0aHJlYWRfc3RhcnQodm9pZCopJzoKLSAgICAgICAgYnJlYWsKLQotICAjIERvbmUgcmVhZGluZyBjYWxsIGNoYWluLiAgQWRkIHRvIHN0YWNrIGZyYW1lIHRyZWUuCi0gIHN0YWNrX2ZyYW1lID0gcm9vdF9jaGFpbgotICBmb3IgY2FsbCBpbiBjaGFpbjoKLSAgICBpZiBjYWxsIGluIHN0YWNrX2ZyYW1lLmNoaWxkcmVuOgotICAgICAgc3RhY2tfZnJhbWUgPSBzdGFja19mcmFtZS5jaGlsZHJlbltjYWxsXQotICAgIGVsc2U6Ci0gICAgICBuZXdfbm9kZSA9IFN0YWNrRnJhbWVOb2RlKG5leHRfc3RhY2tfaWQsIGNhbGxbMF0sIGNhbGxbMV0pCi0gICAgICBuZXh0X3N0YWNrX2lkICs9IDEKLSAgICAgIG5ld19ub2RlLnBhcmVudF9pZCA9IHN0YWNrX2ZyYW1lLnN0YWNrX2lkCi0gICAgICBzdGFja19mcmFtZS5jaGlsZHJlbltjYWxsXSA9IG5ld19ub2RlCi0gICAgICBzdGFja19mcmFtZSA9IG5ld19ub2RlCi0KLSAgIyBTYXZlIHNhbXBsZS4KLSAgc2FtcGxlID0gUGVyZlNhbXBsZShzdGFja19mcmFtZS5zdGFja19pZCwKLSAgICAgICAgICAgICAgICAgIHNhbXBfdHMsCi0gICAgICAgICAgICAgICAgICBzYW1wX2NwdSwKLSAgICAgICAgICAgICAgICAgIHNhbXBfdGlkLAotICAgICAgICAgICAgICAgICAgc2FtcF9wZXJpb2QsCi0gICAgICAgICAgICAgICAgICBzYW1wX3R5cGUsCi0gICAgICAgICAgICAgICAgICBzYW1wX2NvbW0pCi0gIHNhbXBsZXMuYXBwZW5kKHNhbXBsZSkKLSAgc3RhY2tfZnJhbWUuc2FtcGxlcy5hcHBlbmQoc2FtcGxlKQotICBzYXZlZF9wZXJpb2QgKz0gc2FtcF9wZXJpb2QKLQotCi1kZWYgdHJhY2VfYmVnaW4oKToKLSAgcGFzcwotCi0KLWRlZiB0cmFjZV9lbmQoKToKLSAgIyBSZXR1cm4gc2libGluZ3Mgb2YgYSBjYWxsIHRyZWUgbm9kZS4KLSAgZGVmIEdldE5vZGVTaWJsaW5ncyhub2RlKToKLSAgICBpZiBub3Qgbm9kZToKLSAgICAgIHJldHVybiBbXQotICAgIGlmIG5vdCBub2RlLnBhcmVudDoKLSAgICAgIHJldHVybiBbXQotICAgIHJldHVybiBub2RlLnBhcmVudC5jaGlsZHJlbi52YWx1ZXMoKQotCi0gICMgVHJ5IHRvIHJlZHVjZSBtaXNwbGFjZWQgc3RhY2sgbGVhdmVzIGJ5IG1vdmluZyB0aGVtIHVwIGludG8gc2libGluZyBub2Rlcy4KLSAgZGVmIEZpeENhbGxUcmVlKG5vZGUsIHBhcmVudCk6Ci0gICAgIyBHZXQgc2libGluZ3Mgb2Ygbm9kZSdzIHBhcmVudC4KLSAgICBub2RlLnBhcmVudCA9IHBhcmVudAotICAgIHBhcmVudF9zaWJsaW5ncyA9IEdldE5vZGVTaWJsaW5ncyhwYXJlbnQpCi0KLSAgICAjIElmIHBhcmVudCdzIHNpYmxpbmcgaGFzIHNhbWUgbm9kZSBuYW1lLCBoYXMgbm8gY2hpbGRyZW4gYW5kIHNtYWxsIHdlaWdodCwKLSAgICAjIHRyYW5zcGxhbnQgc2libGluZydzIHNhbXBsZXMgaW50byB0aGUgY3VycmVudCBub2RlLgotICAgIGZvciBzaWJsaW5nIGluIHBhcmVudF9zaWJsaW5nczoKLSAgICAgIGlmIHNpYmxpbmcubmFtZSA9PSBub2RlLm5hbWUgYW5kIFwKLSAgICAgICAgICBsZW4oc2libGluZy5jaGlsZHJlbikgPT0gMCBhbmQgXAotICAgICAgICAgIHNpYmxpbmcuR2V0VG90YWxXZWlnaHQoKSA8PSBub2RlLkdldFRvdGFsV2VpZ2h0KCkgKiAwLjE1OgotCi0gICAgICAgICMgVHJhbnNwbGFudCBzYW1wbGVzIGZyb20gc2libGluZyB0byBjdXJyZW50IG5vZGUuCi0gICAgICAgIGZvciBzYW1wIGluIHNpYmxpbmcuc2FtcGxlczoKLSAgICAgICAgICBzYW1wLnN0YWNrX2lkID0gbm9kZS5zdGFja19pZAotICAgICAgICAgIG5vZGUuc2FtcGxlcy5hcHBlbmQoc2FtcCkKLSAgICAgICAgc2libGluZy5zYW1wbGVzID0gW10KLSAgICAgICAgYnJlYWsKLQotICAgICMgUmVjdXJzZSBjaGlsZCBub2Rlcy4KLSAgICBmb3IgYyBpbiBub2RlLmNoaWxkcmVuLnZhbHVlcygpOgotICAgICAgRml4Q2FsbFRyZWUoYywgbm9kZSkKLQotICBGaXhDYWxsVHJlZShyb290X2NoYWluLCBOb25lKQotCi0gIHRyYWNlX2RpY3QgPSB7fQotICB0cmFjZV9kaWN0WydzYW1wbGVzJ10gPSBbcy5Ub0RpY3QoKSBmb3IgcyBpbiBzYW1wbGVzXQotICB0cmFjZV9kaWN0WydzdGFja0ZyYW1lcyddID0gcm9vdF9jaGFpbi5Ub0RpY3Qoe30pCi0gIHRyYWNlX2RpY3RbJ3RyYWNlRXZlbnRzJ10gPSBbXQotCi0gIGpzb24uZHVtcCh0cmFjZV9kaWN0LCBzeXMuc3Rkb3V0LCBpbmRlbnQ9MSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3Byb2ZpbGVfY2hyb21lL3VpLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvdWkucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZWJkOWIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvdWkucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc2VsZWN0Ci1pbXBvcnQgc3lzCi0KLQotZGVmIFByaW50TWVzc2FnZShoZWFkaW5nLCBlb2w9J1xuJyk6Ci0gIHN5cy5zdGRvdXQud3JpdGUoJyVzJXMnICUgKGhlYWRpbmcsIGVvbCkpCi0gIHN5cy5zdGRvdXQuZmx1c2goKQotCi0KLWRlZiBXYWl0Rm9yRW50ZXIodGltZW91dCk6Ci0gIHNlbGVjdC5zZWxlY3QoW3N5cy5zdGRpbl0sIFtdLCBbXSwgdGltZW91dCkKLQotCi1kZWYgRW5hYmxlVGVzdE1vZGUoKToKLSAgZGVmIE5vT3AoKl8sICoqX18pOiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci0gICAgcGFzcwotICAjIHB5bGludDogZGlzYWJsZT1XMDYwMQotICBnbG9iYWwgUHJpbnRNZXNzYWdlCi0gIGdsb2JhbCBXYWl0Rm9yRW50ZXIKLSAgUHJpbnRNZXNzYWdlID0gTm9PcAotICBXYWl0Rm9yRW50ZXIgPSBOb09wCi0gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuZGlzYWJsZWQgPSBUcnVlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS91dGlsLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHJvZmlsZV9jaHJvbWUvdXRpbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVjYjViZi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9wcm9maWxlX2Nocm9tZS91dGlsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgZ3ppcAotaW1wb3J0IG9zCi1pbXBvcnQgdGltZQotaW1wb3J0IHppcGZpbGUKLQotCi1kZWYgQXJjaGl2ZUZpbGVzKGhvc3RfZmlsZXMsIG91dHB1dCk6Ci0gIHdpdGggemlwZmlsZS5aaXBGaWxlKG91dHB1dCwgJ3cnLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkgYXMgejoKLSAgICBmb3IgaG9zdF9maWxlIGluIGhvc3RfZmlsZXM6Ci0gICAgICB6LndyaXRlKGhvc3RfZmlsZSkKLSAgICAgIG9zLnVubGluayhob3N0X2ZpbGUpCi0KLWRlZiBDb21wcmVzc0ZpbGUoaG9zdF9maWxlLCBvdXRwdXQpOgotICB3aXRoIGd6aXAub3BlbihvdXRwdXQsICd3YicpIGFzIG91dCwgb3Blbihob3N0X2ZpbGUsICdyYicpIGFzIGlucHV0X2ZpbGU6Ci0gICAgb3V0LndyaXRlKGlucHV0X2ZpbGUucmVhZCgpKQotICBvcy51bmxpbmsoaG9zdF9maWxlKQotCi1kZWYgQXJjaGl2ZURhdGEodHJhY2VfcmVzdWx0cywgb3V0cHV0KToKLSAgd2l0aCB6aXBmaWxlLlppcEZpbGUob3V0cHV0LCAndycsIHppcGZpbGUuWklQX0RFRkxBVEVEKSBhcyB6OgotICAgIGZvciByZXN1bHQgaW4gdHJhY2VfcmVzdWx0czoKLSAgICAgIHRyYWNlX2ZpbGUgPSByZXN1bHQuc291cmNlX25hbWUgKyBHZXRUcmFjZVRpbWVzdGFtcCgpCi0gICAgICBXcml0ZURhdGFUb0NvbXByZXNzZWRGaWxlKHJlc3VsdC5yYXdfZGF0YSwgdHJhY2VfZmlsZSkKLSAgICAgIHoud3JpdGUodHJhY2VfZmlsZSkKLSAgICAgIG9zLnVubGluayh0cmFjZV9maWxlKQotCi1kZWYgV3JpdGVEYXRhVG9Db21wcmVzc2VkRmlsZShkYXRhLCBvdXRwdXQpOgotICB3aXRoIGd6aXAub3BlbihvdXRwdXQsICd3YicpIGFzIG91dDoKLSAgICBvdXQud3JpdGUoZGF0YSkKLQotZGVmIEdldFRyYWNlVGltZXN0YW1wKCk6Ci0gIHJldHVybiB0aW1lLnN0cmZ0aW1lKCclWS0lbS0lZC0lSCVNJVMnLCB0aW1lLmxvY2FsdGltZSgpKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2UvcHlsaW50cmMgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9weWxpbnRyYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIwNTFlNi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9weWxpbnRyYworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLVtNRVNTQUdFUyBDT05UUk9MXQotCi0jIERpc2FibGUgdGhlIG1lc3NhZ2UsIHJlcG9ydCwgY2F0ZWdvcnkgb3IgY2hlY2tlciB3aXRoIHRoZSBnaXZlbiBpZChzKS4KLSMgVE9ETzogU2hyaW5rIHRoaXMgbGlzdCB0byBhcyBzbWFsbCBhcyBwb3NzaWJsZS4KLWRpc2FibGU9Ci0gIGRlc2lnbiwKLSAgc2ltaWxhcml0aWVzLAotCi0gIGFic3RyYWN0LWNsYXNzLW5vdC11c2VkLAotICBiYWQtYnVpbHRpbiwKLSAgYmFkLWNvbnRpbnVhdGlvbiwKLSAgZXZhbC11c2VkLAotICBmaXhtZSwKLSAgaW52YWxpZC1uYW1lLAotICBsb2NhbGx5LWRpc2FibGVkLAotICBtaXNzaW5nLWRvY3N0cmluZywKLSAgcHJvdGVjdGVkLWFjY2VzcywKLSAgc3Rhci1hcmdzLAotCi0KLVtSRVBPUlRTXQotCi0jIERvbid0IHdyaXRlIG91dCBmdWxsIHJlcG9ydHMsIGp1c3QgbWVzc2FnZXMuCi1yZXBvcnRzPW5vCi0KLQotW0JBU0lDXQotCi0jIFJlZ3VsYXIgZXhwcmVzc2lvbiB3aGljaCBzaG91bGQgb25seSBtYXRjaCBjb3JyZWN0IGZ1bmN0aW9uIG5hbWVzLgotZnVuY3Rpb24tcmd4PV4oPzooP1A8ZXhlbXB0PnNldFVwfHRlYXJEb3dufHNldFVwTW9kdWxlfHRlYXJEb3duTW9kdWxlKXwoP1A8Y2FtZWxfY2FzZT5fP1tBLVpdW2EtekEtWjAtOV0qKSkkCi0KLSMgUmVndWxhciBleHByZXNzaW9uIHdoaWNoIHNob3VsZCBvbmx5IG1hdGNoIGNvcnJlY3QgbWV0aG9kIG5hbWVzLgotbWV0aG9kLXJneD1eKD86KD9QPGV4ZW1wdD5fW2EtejAtOV9dK19ffGdldHxwb3N0fHJ1blRlc3R8c2V0VXB8dGVhckRvd258c2V0VXBUZXN0Q2FzZXx0ZWFyRG93blRlc3RDYXNlfHNldHVwU2VsZnx0ZWFyRG93bkNsYXNzfHNldFVwQ2xhc3MpfCg/UDxjYW1lbF9jYXNlPihfezAsMn18dGVzdHxhc3NlcnQpW0EtWl1bYS16QS1aMC05X10qKSkkCi0KLSMgUmVndWxhciBleHByZXNzaW9uIHdoaWNoIHNob3VsZCBvbmx5IG1hdGNoIGNvcnJlY3QgYXJndW1lbnQgbmFtZXMuCi1hcmd1bWVudC1yZ3g9XlthLXpdW2EtejAtOV9dKiQKLQotIyBSZWd1bGFyIGV4cHJlc3Npb24gd2hpY2ggc2hvdWxkIG9ubHkgbWF0Y2ggY29ycmVjdCB2YXJpYWJsZSBuYW1lcy4KLXZhcmlhYmxlLXJneD1eW2Etel1bYS16MC05X10qJAotCi0jIEdvb2QgdmFyaWFibGUgbmFtZXMgd2hpY2ggc2hvdWxkIGFsd2F5cyBiZSBhY2NlcHRlZCwgc2VwYXJhdGVkIGJ5IGEgY29tbWEuCi1nb29kLW5hbWVzPW1haW4sXwotCi0jIExpc3Qgb2YgYnVpbHRpbnMgZnVuY3Rpb24gbmFtZXMgdGhhdCBzaG91bGQgbm90IGJlIHVzZWQsIHNlcGFyYXRlZCBieSBhIGNvbW1hLgotYmFkLWZ1bmN0aW9ucz1hcHBseSxpbnB1dCxyZWR1Y2UKLQotCi1bVkFSSUFCTEVTXQotCi0jIFRlbGxzIHdldGhlciB3ZSBzaG91bGQgY2hlY2sgZm9yIHVudXNlZCBpbXBvcnQgaW4gX19pbml0X18gZmlsZXMuCi1pbml0LWltcG9ydD1ubwotCi0jIEEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIG5hbWVzIHVzZWQgZm9yIGR1bW15IHZhcmlhYmxlcyAoaS5lLiBub3QgdXNlZCkuCi1kdW1teS12YXJpYWJsZXMtcmd4PV5cKnswLDJ9KF8kfHVudXNlZF8pCi0KLQotW1RZUEVDSEVDS10KLQotIyBUZWxscyB3ZXRoZXIgbWlzc2luZyBtZW1iZXJzIGFjY2Vzc2VkIGluIG1peGluIGNsYXNzIHNob3VsZCBiZSBpZ25vcmVkLiBBCi0jIG1peGluIGNsYXNzIGlzIGRldGVjdGVkIGlmIGl0cyBuYW1lIGVuZHMgd2l0aCAibWl4aW4iIChjYXNlIGluc2Vuc2l0aXZlKS4KLWlnbm9yZS1taXhpbi1tZW1iZXJzPXllcwotCi0KLVtGT1JNQVRdCi0KLSMgV2UgdXNlIHR3byBzcGFjZXMgZm9yIGluZGVudHMsIGluc3RlYWQgb2YgdGhlIHVzdWFsIGZvdXIgc3BhY2VzIG9yIHRhYi4KLWluZGVudC1zdHJpbmc9JyAgJwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvQVVUSE9SUyBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL0FVVEhPUlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhN2VkODIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvQVVUSE9SUworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMgTmFtZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoaXMgZmlsZSB3aXRoIHRoaXMgcGF0dGVybjoKLSMKLSMgRm9yIGluZGl2aWR1YWxzOgotIyAgIE5hbWUgPGVtYWlsIGFkZHJlc3M+Ci0jCi0jIEZvciBvcmdhbml6YXRpb25zOgotIyAgIE9yZ2FuaXphdGlvbiA8Zm5tYXRjaCBwYXR0ZXJuPgotIwotIyBTZWUgcHl0aG9uIGZubWF0Y2ggbW9kdWxlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLVRoZSBDaHJvbWl1bSBBdXRob3JzIDwqQGNocm9taXVtLm9yZz4KLUdvb2dsZSBJbmMuIDwqQGdvb2dsZS5jb20+CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS9MSUNFTlNFIGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvTElDRU5TRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRjMzUwNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS9MSUNFTlNFCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvUkVBRE1FLm1kIGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvUkVBRE1FLm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTEwM2E1Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL1JFQURNRS5tZAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwhLS0gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICAgIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSAgICAgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS0tPgotU3lzdHJhY2UKLT09PT09PT09Ci0KLVN5c3RyYWNlIHJlbGllcyBvbgotW1RyYWNlLVZpZXdlcl0oaHR0cHM6Ly9naXRodWIuY29tL2NhdGFwdWx0LXByb2plY3QvY2F0YXB1bHQvYmxvYi9tYXN0ZXIvdHJhY2luZy9SRUFETUUubWQpCi10byB2aXN1YWxpemUgdGhlIHRyYWNlcy4gVGhlIGRldmVsb3BtZW50IG9mIFRyYWNlLVZpZXdlciBhbmQgU3lzdHJhY2UgaXMKLWRlY291cGxlZCBieSB0aGUgc3lzdHJhY2VfdHJhY2Vfdmlld2VyLmh0bWwgZmlsZS4KLSogVGhlIHVwZGF0ZV9zeXN0cmFjZV90cmFjZV92aWV3ZXIucHkgc2NyaXB0IGdlbmVyYXRlcwotc3lzdHJhY2VfdHJhY2Vfdmlld2VyLmh0bWwgYmFzZWQgb24gdGhlIFRyYWNlLVZpZXdlciBjb2RlLgotKiBTeXN0cmFjZSB2aXN1YWxpemVzIHRoZSB0cmFjZSByZXN1bHQgYmFzZWQgb24gc3lzdHJhY2VfdHJhY2Vfdmlld2VyLmh0bWwuCi0qIFN5c3RyYWNlIHdpbGwgYXV0byB1cGRhdGUgc3lzdHJhY2VfdHJhY2Vfdmlld2VyLmh0bWwgaWYKLXVwZGF0ZV9zeXN0cmFjZV90cmFjZV92aWV3ZXIucHkgZXhpc3RzLgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvX19pbml0X18ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMxZjc3NC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1kZWYgX0pvaW5QYXRoKCpwYXRoX3BhcnRzKToKLSAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oKnBhdGhfcGFydHMpKQotCi0KLWRlZiBfQWRkRGlyVG9QeXRob25QYXRoKCpwYXRoX3BhcnRzKToKLSAgcGF0aCA9IF9Kb2luUGF0aCgqcGF0aF9wYXJ0cykKLSAgaWYgb3MucGF0aC5pc2RpcihwYXRoKSBhbmQgcGF0aCBub3QgaW4gc3lzLnBhdGg6Ci0gICAgIyBTb21lIGNhbGwgc2l0ZXMgdGhhdCB1c2UgVGVsZW1ldHJ5IGFzc3VtZSB0aGF0IHN5cy5wYXRoWzBdIGlzIHRoZQotICAgICMgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHNjcmlwdCwgc28gd2UgYWRkIHRoZXNlIGV4dHJhIHBhdGhzIHRvIHJpZ2h0Ci0gICAgIyBhZnRlciBzeXMucGF0aFswXS4KLSAgICBzeXMucGF0aC5pbnNlcnQoMSwgcGF0aCkKLQotX0NBVEFQVUxUX0RJUiA9IG9zLnBhdGguam9pbigKLSAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksIG9zLnBhdGgucGFyZGlyLCBvcy5wYXRoLnBhcmRpcikKLQotX0FkZERpclRvUHl0aG9uUGF0aChfQ0FUQVBVTFRfRElSLCAnY29tbW9uJywgJ2JhdHRvcicpCi1fQWRkRGlyVG9QeXRob25QYXRoKF9DQVRBUFVMVF9ESVIsICdjb21tb24nLCAncHlfdXRpbHMnKQotX0FkZERpclRvUHl0aG9uUGF0aChfQ0FUQVBVTFRfRElSLCAnY29tbW9uJywgJ3B5X3RyYWNlX2V2ZW50JykKLV9BZGREaXJUb1B5dGhvblBhdGgoX0NBVEFQVUxUX0RJUiwgJ2NvbW1vbicsICdweV90cmFjZV9ldmVudCcsICdweV90cmFjZV9ldmVudCcpCi1fQWRkRGlyVG9QeXRob25QYXRoKF9DQVRBUFVMVF9ESVIsICdkZXZpbCcpCi1fQWRkRGlyVG9QeXRob25QYXRoKF9DQVRBUFVMVF9ESVIsICdzeXN0cmFjZScpCi1fQWRkRGlyVG9QeXRob25QYXRoKF9DQVRBUFVMVF9ESVIsICd0cmFjaW5nJykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL2RlY29yYXRvcnMucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS9kZWNvcmF0b3JzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTQ1ZWFhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL2RlY29yYXRvcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLQotZGVmIEhvc3RPbmx5VGVzdChmdW5jKToKLSAgIiIiRGVjb3JhdG9yIGZvciBydW5uaW5nIHVuaXQgdGVzdHMgb25seSBvbiB0aGUgaG9zdCBkZXZpY2UuCi0KLSAgVGhpcyB3aWxsIGRpc2FibGUgdW5pdCB0ZXN0cyBmcm9tIHJ1bm5pbmcgb24gQW5kcm9pZCBkZXZpY2VzLgotICAiIiIKLSAgcmV0dXJuIF9Ta2lwVGVzdERlY29yYXRvckhlbHBlcihmdW5jLCBbJ2FuZHJvaWQnXSkKLQotCi1kZWYgQ2xpZW50T25seVRlc3QoZnVuYyk6Ci0gICIiIkRlY29yYXRvciBmb3IgcnVubmluZyB1bml0IHRlc3RzIG9ubHkgb24gY2xpZW50IGRldmljZXMgKEFuZHJvaWQpLgotICAiIiIKLSAgcmV0dXJuIF9Ta2lwVGVzdERlY29yYXRvckhlbHBlcihmdW5jLCBbJ3dpbicsICdsaW51eCcsICdtYWMnXSkKLQotCi1kZWYgRGlzYWJsZWQoZnVuYyk6Ci0gICIiIkRlY29yYXRvciBmb3Igbm90IHJ1bm5pbmcgYSB1bml0IHRlc3Qgb24gYW55IFRyeWJvdCBwbGF0Zm9ybS4KLSAgIiIiCi0gIHJldHVybiBfU2tpcFRlc3REZWNvcmF0b3JIZWxwZXIoZnVuYywgWyd3aW4nLCAnbGludXgnLCAnbWFjJywgJ2FuZHJvaWQnXSkKLQotCi1kZWYgTGludXhNYWNUZXN0KGZ1bmMpOgotICByZXR1cm4gX1NraXBUZXN0RGVjb3JhdG9ySGVscGVyKGZ1bmMsIFsnd2luJywgJ2FuZHJvaWQnXSkKLQotCi1kZWYgX1NraXBUZXN0RGVjb3JhdG9ySGVscGVyKGZ1bmMsIGRpc2FibGVkX3N0cmluZ3MpOgotICBpZiBub3QgaGFzYXR0cihmdW5jLCAnX2Rpc2FibGVkX3N0cmluZ3MnKToKLSAgICBzZXRhdHRyKGZ1bmMsICdfZGlzYWJsZWRfc3RyaW5ncycsIHNldChkaXNhYmxlZF9zdHJpbmdzKSkKLSAgcmV0dXJuIGZ1bmMKLQotCi1kZWYgU2hvdWxkU2tpcCh0ZXN0LCBkZXZpY2UpOgotICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHRlc3Qgc2hvdWxkIGJlIHNraXBwZWQgYW5kIHRoZSByZWFzb24gZm9yIGl0LiIiIgotICBpZiBoYXNhdHRyKHRlc3QsICdfZGlzYWJsZWRfc3RyaW5ncycpOgotICAgIGRpc2FibGVkX2RldmljZXMgPSBnZXRhdHRyKHRlc3QsICdfZGlzYWJsZWRfc3RyaW5ncycpCi0gICAgcmV0dXJuIGRldmljZSBpbiBkaXNhYmxlZF9kZXZpY2VzCi0gIHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvbW9uaXRvcl91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL21vbml0b3JfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZDYzZTEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvbW9uaXRvcl91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgZGVjb3JhdG9ycwotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdXBkYXRlX3N5c3RyYWNlX3RyYWNlX3ZpZXdlcgotCi1TQ1JJUFRfRElSID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCi1TVEFCTEVfVklFV0VSX1BBVEggPSBvcy5wYXRoLmpvaW4oU0NSSVBUX0RJUiwgJ3N5c3RyYWNlX3RyYWNlX3ZpZXdlci5odG1sJykKLQotIyBUZXN0cyBwcmVzZW5jZSBhbmQgY29udGVudCBvZiBzdGF0aWMgSFRNTCBmaWxlcyB1c2VkIG5vdCBvbmx5IGZvciBQeXRob24KLSMgc3lzdHJhY2UgY2FwdHVyZSwgYnV0IGFsc28gSmF2YS1iYXNlZCBjYXB0dXJlIGluIHRoZSBhbmRyb2lkIFNESyB0b29scy4KLSMKLSMgTk9URTogY2hhbmdlcyB0byB0aGlzIGZpbGUgc2hvdWxkIHR5cGljYWxseSBiZSBhY2NvbXBhbmllZCBieSBjaGFuZ2VzIHRvIHRoZQotIyBBbmRyb2lkIFNESydzIG1ldGhvZCBvZiBzeXN0cmFjZSBjYXB0dXJlLgotY2xhc3MgTW9uaXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIEBkZWNvcmF0b3JzLkhvc3RPbmx5VGVzdAotICBkZWYgdGVzdF9zeXN0cmFjZV90cmFjZV92aWV3ZXIoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbChTVEFCTEVfVklFV0VSX1BBVEgsCi0gICAgICB1cGRhdGVfc3lzdHJhY2VfdHJhY2Vfdmlld2VyLlNZU1RSQUNFX1RSQUNFX1ZJRVdFUl9IVE1MX0ZJTEUpCi0KLSAgICB1cGRhdGVfc3lzdHJhY2VfdHJhY2Vfdmlld2VyLnVwZGF0ZShmb3JjZV91cGRhdGU9VHJ1ZSkKLQotICAgIHdpdGggb3BlbihTVEFCTEVfVklFV0VSX1BBVEgpIGFzIGY6Ci0gICAgICBjb250ZW50ID0gZi5yZWFkKCkuc3RyaXAoKQotCi0gICAgICAjIGV4cGVjdCBiaWcgaHRtbCBmaWxlCi0gICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoNSAqIDEwMjQgKiAxMDI0LCBsZW4oY29udGVudCkpCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKCc8JywgY29udGVudFswXSkKLSAgICBvcy5yZW1vdmUoZi5uYW1lKQotCi0KLSAgQGRlY29yYXRvcnMuSG9zdE9ubHlUZXN0Ci0gIGRlZiB0ZXN0X3ByZWZpeChzZWxmKToKLSAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFNDUklQVF9ESVIsICdwcmVmaXguaHRtbCcpKSBhcyBmOgotICAgICAgY29udGVudCA9IGYucmVhZCgpLnN0cmlwKCkKLQotICAgICAgc2VsZi5hc3NlcnRUcnVlKCI8aHRtbD4iIGluIGNvbnRlbnQpCi0gICAgICBzZWxmLmFzc2VydFRydWUoIjx0aXRsZT5BbmRyb2lkIFN5c3RlbSBUcmFjZTwvdGl0bGU+IiBpbiBjb250ZW50KQotICAgICAgc2VsZi5hc3NlcnRUcnVlKCJ7e1NZU1RSQUNFX1RSQUNFX1ZJRVdFUl9IVE1MfX0iIGluIGNvbnRlbnQpCi0KLQotICBAZGVjb3JhdG9ycy5Ib3N0T25seVRlc3QKLSAgZGVmIHRlc3Rfc3VmZml4KHNlbGYpOgotICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oU0NSSVBUX0RJUiwgJ3N1ZmZpeC5odG1sJykpIGFzIGY6Ci0gICAgICBjb250ZW50ID0gZi5yZWFkKCkuc3RyaXAoKQotCi0gICAgICBzZWxmLmFzc2VydFRydWUoIjwvaHRtbD4iIGluIGNvbnRlbnQpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS9vdXRwdXRfZ2VuZXJhdG9yLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2Uvb3V0cHV0X2dlbmVyYXRvci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI2M2FjOC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS9vdXRwdXRfZ2VuZXJhdG9yLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBiYXNlNjQKLWltcG9ydCBnemlwCi1pbXBvcnQganNvbgotaW1wb3J0IG9zCi1pbXBvcnQgU3RyaW5nSU8KLQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2luZ19jb250cm9sbGVyCi1mcm9tIHN5c3RyYWNlIGltcG9ydCB0cmFjZV9yZXN1bHQKLWZyb20gdHJhY2luZy50cmFjZV9kYXRhIGltcG9ydCB0cmFjZV9kYXRhCi0KLQotIyBUT0RPKGFsZXhhbmRlcm1vbnQpOiBDdXJyZW50IHZlcnNpb24gb2YgdHJhY2Ugdmlld2VyIGRvZXMgbm90IHN1cHBvcnQKLSMgdGhlIGNvbnRyb2xsZXIgdHJhY2luZyBhZ2VudCBvdXRwdXQuIFRodXMgd2UgdXNlIHRoaXMgdmFyaWFibGUgdG8KLSMgc3VwcHJlc3MgdGhpcyB0cmFjaW5nIGFnZW50J3Mgb3V0cHV0LiBUaGlzIHNob3VsZCBiZSByZW1vdmVkIG9uY2UKLSMgdHJhY2Ugdmlld2VyIGlzIHdvcmtpbmcgYWdhaW4uCi1PVVRQVVRfQ09OVFJPTExFUl9UUkFDRV8gPSBGYWxzZQotQ09OVFJPTExFUl9UUkFDRV9EQVRBX0tFWSA9ICdjb250cm9sbGVyVHJhY2VEYXRhS2V5JwotX1NZU1RSQUNFX1RPX1RSQUNFX0RBVEFfTkFNRV9NQVBQSU5HID0gewotICAgICdhbmRyb2lkUHJvY2Vzc0R1bXAnOiB0cmFjZV9kYXRhLkFORFJPSURfUFJPQ0VTU19EQVRBX1BBUlQsCi0gICAgJ2F0cmFjZVByb2Nlc3NEdW1wJzogdHJhY2VfZGF0YS5BVFJBQ0VfUFJPQ0VTU19EVU1QX1BBUlQsCi0gICAgJ3N5c3RlbVRyYWNlRXZlbnRzJzogdHJhY2VfZGF0YS5BVFJBQ0VfUEFSVCwKLSAgICAncG93ZXJUcmFjZUFzU3RyaW5nJzogdHJhY2VfZGF0YS5CQVRUT1JfVFJBQ0VfUEFSVCwKLSAgICAnc3lzdHJhY2VDb250cm9sbGVyJzogdHJhY2VfZGF0YS5URUxFTUVUUllfUEFSVCwKLSAgICAndHJhY2VFdmVudHMnOiB0cmFjZV9kYXRhLkNIUk9NRV9UUkFDRV9QQVJULAotICAgICd3YWx0VHJhY2UnOiB0cmFjZV9kYXRhLldBTFRfVFJBQ0VfUEFSVCwKLX0KLV9TWVNUUkFDRV9IRUFERVIgPSAnU3lzdHJhY2UnCi0KLQotZGVmIE5ld0dlbmVyYXRlSFRNTE91dHB1dCh0cmFjZV9yZXN1bHRzLCBvdXRwdXRfZmlsZV9uYW1lKToKLSAgdHJhY2VfZGF0YV9idWlsZGVyID0gdHJhY2VfZGF0YS5UcmFjZURhdGFCdWlsZGVyKCkKLSAgZm9yIHRyYWNlIGluIHRyYWNlX3Jlc3VsdHM6Ci0gICAgdHJhY2VfZGF0YV9wYXJ0ID0gX1NZU1RSQUNFX1RPX1RSQUNFX0RBVEFfTkFNRV9NQVBQSU5HLmdldCgKLSAgICAgICAgdHJhY2Uuc291cmNlX25hbWUpCi0gICAgdHJhY2VfZGF0YV9idWlsZGVyLkFkZFRyYWNlRm9yKHRyYWNlX2RhdGFfcGFydCwgdHJhY2UucmF3X2RhdGEpCi0gIHRyYWNlX2RhdGFfYnVpbGRlci5Bc0RhdGEoKS5TZXJpYWxpemUob3V0cHV0X2ZpbGVfbmFtZSwgX1NZU1RSQUNFX0hFQURFUikKLQotCi1kZWYgR2VuZXJhdGVIVE1MT3V0cHV0KHRyYWNlX3Jlc3VsdHMsIG91dHB1dF9maWxlX25hbWUpOgotICAiIiJXcml0ZSB0aGUgcmVzdWx0cyBvZiBzeXN0cmFjZSB0byBhbiBIVE1MIGZpbGUuCi0KLSAgQXJnczoKLSAgICAgIHRyYWNlX3Jlc3VsdHM6IEEgbGlzdCBvZiBUcmFjZVJlc3VsdHMuCi0gICAgICBvdXRwdXRfZmlsZV9uYW1lOiBUaGUgbmFtZSBvZiB0aGUgSFRNTCBmaWxlIHRoYXQgdGhlIHRyYWNlIHZpZXdlcgotICAgICAgICAgIHJlc3VsdHMgc2hvdWxkIGJlIHdyaXR0ZW4gdG8uCi0gICIiIgotICBkZWYgX1JlYWRBc3NldChzcmNfZGlyLCBmaWxlbmFtZSk6Ci0gICAgcmV0dXJuIG9wZW4ob3MucGF0aC5qb2luKHNyY19kaXIsIGZpbGVuYW1lKSkucmVhZCgpCi0KLSAgIyBUT0RPKHJuZXBoZXcpOiBUaGUgdHJhY2luZyBvdXRwdXQgZm9ybWF0dGVyIGlzIGFibGUgdG8gaGFuZGxlIGEgc2luZ2xlCi0gICMgc3lzdHJhY2UgdHJhY2UganVzdCBhcyB3ZWxsIGFzIGl0IGhhbmRsZXMgbXVsdGlwbGUgdHJhY2VzLiBUaGUgb2J2aW91cyB0aGluZwotICAjIHRvIGRvIGhlcmUgd291bGQgYmUgdG8gdXNlIGl0IGFsbCBmb3IgYWxsIHN5c3RyYWNlIG91dHB1dDogaG93ZXZlciwgd2Ugd2FudAotICAjIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBsZWdhY3kgd2F5IG9mIGZvcm1hdHRpbmcgc3lzdHJhY2Ugb3V0cHV0IHdoZW4gYSBzaW5nbGUKLSAgIyBzeXN0cmFjZSBhbmQgdGhlIHRyYWNpbmcgY29udHJvbGxlciB0cmFjZSBhcmUgcHJlc2VudCBpbiBvcmRlciB0byBtYXRjaCB0aGUKLSAgIyBKYXZhIHZlcmlzb24gb2Ygc3lzdHJhY2UuIEphdmEgc3lzdHJhY2UgaXMgZXhwZWN0ZWQgdG8gYmUgZGVsZXRlZCBhdCBhIGxhdGVyCi0gICMgZGF0ZS4gV2Ugc2hvdWxkIGNvbnNvbGlkYXRlIHRoaXMgbG9naWMgd2hlbiB0aGF0IGhhcHBlbnMuCi0KLSAgaWYgbGVuKHRyYWNlX3Jlc3VsdHMpID4gMzoKLSAgICBOZXdHZW5lcmF0ZUhUTUxPdXRwdXQodHJhY2VfcmVzdWx0cywgb3V0cHV0X2ZpbGVfbmFtZSkKLSAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKG91dHB1dF9maWxlX25hbWUpCi0KLSAgc3lzdHJhY2VfZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCi0KLSAgdHJ5OgotICAgIGZyb20gc3lzdHJhY2UgaW1wb3J0IHVwZGF0ZV9zeXN0cmFjZV90cmFjZV92aWV3ZXIKLSAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKLSAgZWxzZToKLSAgICB1cGRhdGVfc3lzdHJhY2VfdHJhY2Vfdmlld2VyLnVwZGF0ZSgpCi0KLSAgdHJhY2Vfdmlld2VyX2h0bWwgPSBfUmVhZEFzc2V0KHN5c3RyYWNlX2RpciwgJ3N5c3RyYWNlX3RyYWNlX3ZpZXdlci5odG1sJykKLQotICAjIE9wZW4gdGhlIGZpbGUgaW4gYmluYXJ5IG1vZGUgdG8gcHJldmVudCBweXRob24gZnJvbSBjaGFuZ2luZyB0aGUKLSAgIyBsaW5lIGVuZGluZ3MsIHRoZW4gd3JpdGUgdGhlIHByZWZpeC4KLSAgc3lzdHJhY2VfZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCi0gIGh0bWxfcHJlZml4ID0gX1JlYWRBc3NldChzeXN0cmFjZV9kaXIsICdwcmVmaXguaHRtbCcpCi0gIGh0bWxfc3VmZml4ID0gX1JlYWRBc3NldChzeXN0cmFjZV9kaXIsICdzdWZmaXguaHRtbCcpCi0gIHRyYWNlX3ZpZXdlcl9odG1sID0gX1JlYWRBc3NldChzeXN0cmFjZV9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RyYWNlX3RyYWNlX3ZpZXdlci5odG1sJykKLQotICAjIE9wZW4gdGhlIGZpbGUgaW4gYmluYXJ5IG1vZGUgdG8gcHJldmVudCBweXRob24gZnJvbSBjaGFuZ2luZyB0aGUKLSAgIyBsaW5lIGVuZGluZ3MsIHRoZW4gd3JpdGUgdGhlIHByZWZpeC4KLSAgaHRtbF9maWxlID0gb3BlbihvdXRwdXRfZmlsZV9uYW1lLCAnd2InKQotICBodG1sX2ZpbGUud3JpdGUoaHRtbF9wcmVmaXgucmVwbGFjZSgne3tTWVNUUkFDRV9UUkFDRV9WSUVXRVJfSFRNTH19JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2Vfdmlld2VyX2h0bWwpKQotCi0gICMgV3JpdGUgdGhlIHRyYWNlIGRhdGEgaXRzZWxmLiBUaGVyZSBpcyBhIHNlcGFyYXRlIHNlY3Rpb24gb2YgdGhlIGZvcm0KLSAgIyA8c2NyaXB0IGNsYXNzPSJ0cmFjZS1kYXRhIiB0eXBlPSJhcHBsaWNhdGlvbi90ZXh0Ij4gLi4uIDwvc2NyaXB0PgotICAjIGZvciBlYWNoIHRyYWNpbmcgYWdlbnQgKGluY2x1ZGluZyB0aGUgY29udHJvbGxlciB0cmFjaW5nIGFnZW50KS4KLSAgaHRtbF9maWxlLndyaXRlKCc8IS0tIEJFR0lOIFRSQUNFIC0tPlxuJykKLSAgZm9yIHJlc3VsdCBpbiB0cmFjZV9yZXN1bHRzOgotICAgIGh0bWxfZmlsZS53cml0ZSgnICA8c2NyaXB0IGNsYXNzPSJ0cmFjZS1kYXRhIiB0eXBlPSJhcHBsaWNhdGlvbi90ZXh0Ij5cbicpCi0gICAgaHRtbF9maWxlLndyaXRlKF9Db252ZXJ0VG9IdG1sU3RyaW5nKHJlc3VsdC5yYXdfZGF0YSkpCi0gICAgaHRtbF9maWxlLndyaXRlKCcgIDwvc2NyaXB0PlxuJykKLSAgaHRtbF9maWxlLndyaXRlKCc8IS0tIEVORCBUUkFDRSAtLT5cbicpCi0KLSAgIyBXcml0ZSB0aGUgc3VmZml4IGFuZCBmaW5pc2guCi0gIGh0bWxfZmlsZS53cml0ZShodG1sX3N1ZmZpeCkKLSAgaHRtbF9maWxlLmNsb3NlKCkKLQotICBmaW5hbF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG91dHB1dF9maWxlX25hbWUpCi0gIHJldHVybiBmaW5hbF9wYXRoCi0KLWRlZiBfQ29udmVydFRvSHRtbFN0cmluZyhyZXN1bHQpOgotICAiIiJDb252ZXJ0IGEgdHJhY2UgcmVzdWx0IHRvIHRoZSBmb3JtYXQgdG8gYmUgb3V0cHV0IGludG8gSFRNTC4KLQotICBJZiB0aGUgdHJhY2UgcmVzdWx0IGlzIGEgZGljdGlvbmFyeSBvciBsaXN0LCBKU09OLWVuY29kZSBpdC4KLSAgSWYgdGhlIHRyYWNlIHJlc3VsdCBpcyBhIHN0cmluZywgbGVhdmUgaXQgdW5jaGFuZ2VkLgotICAiIiIKLSAgaWYgaXNpbnN0YW5jZShyZXN1bHQsIGRpY3QpIG9yIGlzaW5zdGFuY2UocmVzdWx0LCBsaXN0KToKLSAgICByZXR1cm4ganNvbi5kdW1wcyhyZXN1bHQpCi0gIGVsaWYgaXNpbnN0YW5jZShyZXN1bHQsIHN0cik6Ci0gICAgcmV0dXJuIHJlc3VsdAotICBlbHNlOgotICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgdHJhY2UgcmVzdWx0IGZvcm1hdCBmb3IgSFRNTCBvdXRwdXQnKQotCi1kZWYgR2VuZXJhdGVKU09OT3V0cHV0KHRyYWNlX3Jlc3VsdHMsIG91dHB1dF9maWxlX25hbWUpOgotICAiIiJXcml0ZSB0aGUgcmVzdWx0cyBvZiBzeXN0cmFjZSB0byBhIEpTT04gZmlsZS4KLQotICBBcmdzOgotICAgICAgdHJhY2VfcmVzdWx0czogQSBsaXN0IG9mIFRyYWNlUmVzdWx0cy4KLSAgICAgIG91dHB1dF9maWxlX25hbWU6IFRoZSBuYW1lIG9mIHRoZSBKU09OIGZpbGUgdGhhdCB0aGUgdHJhY2Ugdmlld2VyCi0gICAgICAgICAgcmVzdWx0cyBzaG91bGQgYmUgd3JpdHRlbiB0by4KLSAgIiIiCi0gIHJlc3VsdHMgPSBfQ29udmVydFRyYWNlTGlzdFRvRGljdGlvbmFyeSh0cmFjZV9yZXN1bHRzKQotICByZXN1bHRzW0NPTlRST0xMRVJfVFJBQ0VfREFUQV9LRVldID0gKAotICAgICAgdHJhY2luZ19jb250cm9sbGVyLlRSQUNFX0RBVEFfQ09OVFJPTExFUl9OQU1FKQotICB3aXRoIG9wZW4ob3V0cHV0X2ZpbGVfbmFtZSwgJ3cnKSBhcyBqc29uX2ZpbGU6Ci0gICAganNvbi5kdW1wKHJlc3VsdHMsIGpzb25fZmlsZSkKLSAgZmluYWxfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvdXRwdXRfZmlsZV9uYW1lKQotICByZXR1cm4gZmluYWxfcGF0aAotCi1kZWYgTWVyZ2VUcmFjZVJlc3VsdHNJZk5lZWRlZCh0cmFjZV9yZXN1bHRzKToKLSAgIiIiTWVyZ2UgYSBsaXN0IG9mIHRyYWNlIGRhdGEsIGlmIHBvc3NpYmxlLiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGFueSBsaXN0Ci0gICAgIG9mIHRyYWNlIGRhdGEsIGJ1dCBpdCB3aWxsIG9ubHkgbWVyZ2UgdGhlIEpTT04gZGF0YSAoc2luY2UgdGhhdCdzIGFsbAotICAgICB3ZSBjYW4gbWVyZ2UpLgotCi0gICAgIEFyZ3M6Ci0gICAgICAgIHRyYWNlX3Jlc3VsdHM6IEEgbGlzdCBvZiBUcmFjZVJlc3VsdHMgY29udGFpbmluZyB0cmFjZSBkYXRhLgotICAiIiIKLSAgaWYgbGVuKHRyYWNlX3Jlc3VsdHMpIDw9IDE6Ci0gICAgcmV0dXJuIHRyYWNlX3Jlc3VsdHMKLSAgbWVyZ2VfY2FuZGlkYXRlcyA9IFtdCi0gIGZvciByZXN1bHQgaW4gdHJhY2VfcmVzdWx0czoKLSAgICAjIFRyeSB0byBkZXRlY3QgYSBKU09OIGZpbGUgY2hlYXBseSBzaW5jZSB0aGF0J3MgYWxsIHdlIGNhbiBtZXJnZS4KLSAgICBpZiByZXN1bHQucmF3X2RhdGFbMF0gIT0gJ3snOgotICAgICAgY29udGludWUKLSAgICB0cnk6Ci0gICAgICBqc29uX2RhdGEgPSBqc29uLmxvYWRzKHJlc3VsdC5yYXdfZGF0YSkKLSAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgIGNvbnRpbnVlCi0gICAgbWVyZ2VfY2FuZGlkYXRlcy5hcHBlbmQodHJhY2VfcmVzdWx0LlRyYWNlUmVzdWx0KHJlc3VsdC5zb3VyY2VfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbl9kYXRhKSkKLQotICBpZiBsZW4obWVyZ2VfY2FuZGlkYXRlcykgPD0gMToKLSAgICByZXR1cm4gdHJhY2VfcmVzdWx0cwotCi0gIG90aGVyX3Jlc3VsdHMgPSBbciBmb3IgciBpbiB0cmFjZV9yZXN1bHRzCi0gICAgICAgICAgICAgICAgICAgaWYgbm90IHIuc291cmNlX25hbWUgaW4KLSAgICAgICAgICAgICAgICAgICBbYy5zb3VyY2VfbmFtZSBmb3IgYyBpbiBtZXJnZV9jYW5kaWRhdGVzXV0KLQotICBtZXJnZWRfZGF0YSA9IG1lcmdlX2NhbmRpZGF0ZXNbMF0ucmF3X2RhdGEKLQotICBmb3IgY2FuZGlkYXRlIGluIG1lcmdlX2NhbmRpZGF0ZXNbMTpdOgotICAgIGpzb25fZGF0YSA9IGNhbmRpZGF0ZS5yYXdfZGF0YQotICAgIGZvciBrZXksIHZhbHVlIGluIGpzb25fZGF0YS5pdGVtcygpOgotICAgICAgaWYgbm90IHN0cihrZXkpIGluIG1lcmdlZF9kYXRhIG9yIG5vdCBtZXJnZWRfZGF0YVtzdHIoa2V5KV06Ci0gICAgICAgIG1lcmdlZF9kYXRhW3N0cihrZXkpXSA9IHZhbHVlCi0KLSAgcmV0dXJuIChbdHJhY2VfcmVzdWx0LlRyYWNlUmVzdWx0KCdtZXJnZWQtZGF0YScsIGpzb24uZHVtcHMobWVyZ2VkX2RhdGEpKV0KLSAgICAgICAgICAgICAgKyBvdGhlcl9yZXN1bHRzKQotCi1kZWYgX0VuY29kZVRyYWNlRGF0YSh0cmFjZV9zdHJpbmcpOgotICBjb21wcmVzc2VkX3RyYWNlID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1jb21wcmVzc2VkX3RyYWNlLCBtb2RlPSd3JykgYXMgZjoKLSAgICBmLndyaXRlKHRyYWNlX3N0cmluZykKLSAgYjY0X2NvbnRlbnQgPSBiYXNlNjQuYjY0ZW5jb2RlKGNvbXByZXNzZWRfdHJhY2UuZ2V0dmFsdWUoKSkKLSAgcmV0dXJuIGI2NF9jb250ZW50Ci0KLWRlZiBfQ29udmVydFRyYWNlTGlzdFRvRGljdGlvbmFyeSh0cmFjZV9saXN0KToKLSAgdHJhY2VfZGljdCA9IHt9Ci0gIGZvciB0cmFjZSBpbiB0cmFjZV9saXN0OgotICAgIHRyYWNlX2RpY3RbdHJhY2Uuc291cmNlX25hbWVdID0gdHJhY2UucmF3X2RhdGEKLSAgcmV0dXJuIHRyYWNlX2RpY3QKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL291dHB1dF9nZW5lcmF0b3JfdW5pdHRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS9vdXRwdXRfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGUxMWFjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL291dHB1dF9nZW5lcmF0b3JfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGhhc2hsaWIKLWltcG9ydCBqc29uCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHN5c3RyYWNlIGltcG9ydCBkZWNvcmF0b3JzCi1mcm9tIHN5c3RyYWNlIGltcG9ydCBvdXRwdXRfZ2VuZXJhdG9yCi1mcm9tIHN5c3RyYWNlIGltcG9ydCB0cmFjZV9yZXN1bHQKLWZyb20gc3lzdHJhY2UgaW1wb3J0IHVwZGF0ZV9zeXN0cmFjZV90cmFjZV92aWV3ZXIKLWZyb20gc3lzdHJhY2UgaW1wb3J0IHV0aWwKLWZyb20gdHJhY2luZy50cmFjZV9kYXRhIGltcG9ydCB0cmFjZV9kYXRhIGFzIHRyYWNlX2RhdGFfbW9kdWxlCi0KLQotVEVTVF9ESVIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ3Rlc3RfZGF0YScpCi1BVFJBQ0VfREFUQSA9IG9zLnBhdGguam9pbihURVNUX0RJUiwgJ2F0cmFjZV9kYXRhJykKLUJBVFRPUl9EQVRBID0gb3MucGF0aC5qb2luKFRFU1RfRElSLCAnYmF0dG9yX3Rlc3RfZGF0YS50eHQnKQotQ09NQklORURfUFJPRklMRV9DSFJPTUVfREFUQSA9IG9zLnBhdGguam9pbigKLSAgICBURVNUX0RJUiwgJ3Byb2ZpbGUtY2hyb21lX3N5c3RyYWNlX3BlcmZfY2hyb21lX2RhdGEnKQotCi0KLWNsYXNzIE91dHB1dEdlbmVyYXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIEBkZWNvcmF0b3JzLkhvc3RPbmx5VGVzdAotICBkZWYgdGVzdEpzb25UcmFjZU1lcmdpbmcoc2VsZik6Ci0gICAgdXBkYXRlX3N5c3RyYWNlX3RyYWNlX3ZpZXdlci51cGRhdGUoZm9yY2VfdXBkYXRlPVRydWUpCi0gICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKAotICAgICAgICB1cGRhdGVfc3lzdHJhY2VfdHJhY2Vfdmlld2VyLlNZU1RSQUNFX1RSQUNFX1ZJRVdFUl9IVE1MX0ZJTEUpKQotICAgIHQxID0gInsndHJhY2VFdmVudHMnOiBbeyd0cyc6IDEyMywgJ3BoJzogJ2InfV19IgotICAgIHQyID0gInsndHJhY2VFdmVudHMnOiBbXSwgJ3N0YWNrRnJhbWVzJzogWydibGFoJ119IgotICAgIHJlc3VsdHMgPSBbdHJhY2VfcmVzdWx0LlRyYWNlUmVzdWx0KCdhJywgdDEpLAotICAgICAgICAgICAgICAgdHJhY2VfcmVzdWx0LlRyYWNlUmVzdWx0KCdiJywgdDIpXQotCi0gICAgbWVyZ2VkX3Jlc3VsdHMgPSBvdXRwdXRfZ2VuZXJhdG9yLk1lcmdlVHJhY2VSZXN1bHRzSWZOZWVkZWQocmVzdWx0cykKLSAgICBmb3IgciBpbiBtZXJnZWRfcmVzdWx0czoKLSAgICAgIGlmIHIuc291cmNlX25hbWUgPT0gJ2EnOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyLnJhd19kYXRhLCB0MSkKLSAgICAgIGVsaWYgci5zb3VyY2VfbmFtZSA9PSAnYic6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHIucmF3X2RhdGEsIHQyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihtZXJnZWRfcmVzdWx0cyksIGxlbihyZXN1bHRzKSkKLSAgICBvcy5yZW1vdmUodXBkYXRlX3N5c3RyYWNlX3RyYWNlX3ZpZXdlci5TWVNUUkFDRV9UUkFDRV9WSUVXRVJfSFRNTF9GSUxFKQotCi0gIEBkZWNvcmF0b3JzLkhvc3RPbmx5VGVzdAotICBkZWYgdGVzdEh0bWxPdXRwdXRHZW5lcmF0aW9uRm9ybWF0c1NpbmdsZVRyYWNlKHNlbGYpOgotICAgIHVwZGF0ZV9zeXN0cmFjZV90cmFjZV92aWV3ZXIudXBkYXRlKGZvcmNlX3VwZGF0ZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cygKLSAgICAgICAgdXBkYXRlX3N5c3RyYWNlX3RyYWNlX3ZpZXdlci5TWVNUUkFDRV9UUkFDRV9WSUVXRVJfSFRNTF9GSUxFKSkKLSAgICB3aXRoIG9wZW4oQVRSQUNFX0RBVEEpIGFzIGY6Ci0gICAgICBhdHJhY2VfZGF0YSA9IGYucmVhZCgpLnJlcGxhY2UoIiAiLCAiIikuc3RyaXAoKQotICAgICAgdHJhY2VfcmVzdWx0cyA9IFt0cmFjZV9yZXN1bHQuVHJhY2VSZXN1bHQoJ3N5c3RlbVRyYWNlRXZlbnRzJywKLSAgICAgICAgICAgICAgICAgICAgICAgYXRyYWNlX2RhdGEpXQotICAgICAgb3V0cHV0X2ZpbGVfbmFtZSA9IHV0aWwuZ2VuZXJhdGVfcmFuZG9tX2ZpbGVuYW1lX2Zvcl90ZXN0KCkKLSAgICAgIGZpbmFsX3BhdGggPSBvdXRwdXRfZ2VuZXJhdG9yLkdlbmVyYXRlSFRNTE91dHB1dCh0cmFjZV9yZXN1bHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9maWxlX25hbWUpCi0gICAgICB3aXRoIG9wZW4ob3V0cHV0X2ZpbGVfbmFtZSwgJ3InKSBhcyBmOgotICAgICAgICBvdXRwdXRfZ2VuZXJhdG9yLkdlbmVyYXRlSFRNTE91dHB1dCh0cmFjZV9yZXN1bHRzLCBmLm5hbWUpCi0gICAgICAgIGh0bWxfb3V0cHV0ID0gZi5yZWFkKCkKLSAgICAgICAgdHJhY2VfZGF0YSA9IChodG1sX291dHB1dC5zcGxpdCgKLSAgICAgICAgICAnPHNjcmlwdCBjbGFzcz0idHJhY2UtZGF0YSIgdHlwZT0iYXBwbGljYXRpb24vdGV4dCI+JylbMV0uc3BsaXQoCi0gICAgICAgICAgJzwvc2NyaXB0PicpKVswXS5yZXBsYWNlKCIgIiwgIiIpLnN0cmlwKCkKLSAgICAgIG9zLnJlbW92ZShmaW5hbF9wYXRoKQotCi0gICAgIyBFbnN1cmUgdGhlIHRyYWNlIGRhdGEgd3JpdHRlbiBpbiBIVE1MIGlzIGxvY2F0ZWQgd2l0aGluIHRoZQotICAgICMgY29ycmVjdCBwbGFjZSBpbiB0aGUgSFRNTCBkb2N1bWVudCBhbmQgdGhhdCB0aGUgZGF0YSBpcyBub3QKLSAgICAjIG1hbGZvcm1lZC4KLSAgICBzZWxmLmFzc2VydEVxdWFscyh0cmFjZV9kYXRhLCBhdHJhY2VfZGF0YSkKLSAgICBvcy5yZW1vdmUodXBkYXRlX3N5c3RyYWNlX3RyYWNlX3ZpZXdlci5TWVNUUkFDRV9UUkFDRV9WSUVXRVJfSFRNTF9GSUxFKQotCi0gIEBkZWNvcmF0b3JzLkhvc3RPbmx5VGVzdAotICBkZWYgdGVzdEh0bWxPdXRwdXRHZW5lcmF0aW9uRm9ybWF0c011bHRpcGxlVHJhY2VzKHNlbGYpOgotICAgIHRyYWNlX3Jlc3VsdHMgPSBbXQotICAgIHRyYWNlX2RhdGFfYnVpbGRlciA9IHRyYWNlX2RhdGFfbW9kdWxlLlRyYWNlRGF0YUJ1aWxkZXIoKQotCi0gICAgd2l0aCBvcGVuKEJBVFRPUl9EQVRBKSBhcyBmcDoKLSAgICAgIGJhdHRvcl9kYXRhID0gZnAucmVhZCgpCi0gICAgdHJhY2VfcmVzdWx0cy5hcHBlbmQoCi0gICAgICAgIHRyYWNlX3Jlc3VsdC5UcmFjZVJlc3VsdCgncG93ZXJUcmFjZUFzU3RyaW5nJywgYmF0dG9yX2RhdGEpKQotICAgIHRyYWNlX2RhdGFfYnVpbGRlci5BZGRUcmFjZUZvcigKLSAgICAgICAgdHJhY2VfZGF0YV9tb2R1bGUuQkFUVE9SX1RSQUNFX1BBUlQsIGJhdHRvcl9kYXRhKQotCi0gICAgd2l0aCBvcGVuKEFUUkFDRV9EQVRBKSBhcyBmcDoKLSAgICAgIGF0cmFjZV9kYXRhID0gZnAucmVhZCgpCi0gICAgdHJhY2VfcmVzdWx0cy5hcHBlbmQoCi0gICAgICAgIHRyYWNlX3Jlc3VsdC5UcmFjZVJlc3VsdCgnc3lzdGVtVHJhY2VFdmVudHMnLCBhdHJhY2VfZGF0YSkpCi0gICAgdHJhY2VfZGF0YV9idWlsZGVyLkFkZFRyYWNlRm9yKHRyYWNlX2RhdGFfbW9kdWxlLkFUUkFDRV9QQVJULCBhdHJhY2VfZGF0YSkKLQotCi0gICAgd2l0aCBvcGVuKENPTUJJTkVEX1BST0ZJTEVfQ0hST01FX0RBVEEpIGFzIGZwOgotICAgICAgY2hyb21lX2RhdGEgPSBmcC5yZWFkKCkKLSAgICB0cmFjZV9yZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgdHJhY2VfcmVzdWx0LlRyYWNlUmVzdWx0KCd0cmFjZUV2ZW50cycsIGpzb24ubG9hZHMoY2hyb21lX2RhdGEpKSkKLSAgICB0cmFjZV9kYXRhX2J1aWxkZXIuQWRkVHJhY2VGb3IoCi0gICAgICAgIHRyYWNlX2RhdGFfbW9kdWxlLkNIUk9NRV9UUkFDRV9QQVJULCBqc29uLmxvYWRzKGNocm9tZV9kYXRhKSkKLQotICAgIHRyYWNlX3Jlc3VsdHMuYXBwZW5kKAotICAgICAgICB0cmFjZV9yZXN1bHQuVHJhY2VSZXN1bHQoJ3N5c3RyYWNlQ29udHJvbGxlcicsIHN0cih7fSkpKQotICAgIHRyYWNlX2RhdGFfYnVpbGRlci5BZGRUcmFjZUZvcih0cmFjZV9kYXRhX21vZHVsZS5URUxFTUVUUllfUEFSVCwge30pCi0KLSAgICB0cnk6Ci0gICAgICBkYXRhX2J1aWxkZXJfb3V0ID0gdXRpbC5nZW5lcmF0ZV9yYW5kb21fZmlsZW5hbWVfZm9yX3Rlc3QoKQotICAgICAgb3V0cHV0X2dlbmVyYXRvcl9vdXQgPSB1dGlsLmdlbmVyYXRlX3JhbmRvbV9maWxlbmFtZV9mb3JfdGVzdCgpCi0gICAgICBvdXRwdXRfZ2VuZXJhdG9yLkdlbmVyYXRlSFRNTE91dHB1dCh0cmFjZV9yZXN1bHRzLCBvdXRwdXRfZ2VuZXJhdG9yX291dCkKLSAgICAgIHRyYWNlX2RhdGFfYnVpbGRlci5Bc0RhdGEoKS5TZXJpYWxpemUoZGF0YV9idWlsZGVyX291dCwgJ1N5c3RyYWNlJykKLQotICAgICAgb3V0cHV0X2dlbmVyYXRvcl9tZDVzdW0gPSBoYXNobGliLm1kNSgKLSAgICAgICAgICBvcGVuKG91dHB1dF9nZW5lcmF0b3Jfb3V0LCAncmInKS5yZWFkKCkpLmhleGRpZ2VzdCgpCi0gICAgICBkYXRhX2J1aWxkZXJfbWQ1c3VtID0gaGFzaGxpYi5tZDUoCi0gICAgICAgICAgb3BlbihkYXRhX2J1aWxkZXJfb3V0LCAncmInKS5yZWFkKCkpLmhleGRpZ2VzdCgpCi0KLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0X2dlbmVyYXRvcl9tZDVzdW0sIGRhdGFfYnVpbGRlcl9tZDVzdW0pCi0gICAgZmluYWxseToKLSAgICAgIGRlZiBkZWxfaWZfZXhpc3QocGF0aCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICBvcy5yZW1vdmUocGF0aCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgcGFzcwotICAgICAgZGVsX2lmX2V4aXN0KG91dHB1dF9nZW5lcmF0b3Jfb3V0KQotICAgICAgZGVsX2lmX2V4aXN0KGRhdGFfYnVpbGRlcl9vdXQpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS9wcmVmaXguaHRtbCBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3ByZWZpeC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjhlZWYwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3ByZWZpeC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkIGkxOG4tdmFsdWVzPSJkaXI6dGV4dGRpcmVjdGlvbjsiPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgotPG1ldGEgY2hhcnNldD0idXRmLTgiLz4KLTx0aXRsZT5BbmRyb2lkIFN5c3RlbSBUcmFjZTwvdGl0bGU+Ci08c3R5bGU+Ci0gIGh0bWwsCi0gIGJvZHkgewotICAgIGhlaWdodDogMTAwJTsKLSAgfQotCi0gIGJvZHkgewotICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci0gIH0KLQotICBib2R5ID4gdHItdWktdGltZWxpbmUtdmlldyB7Ci0gICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKLSAgICBtaW4taGVpZ2h0OiAwOwotICB9Ci0gIGJvZHkgPiB0ci11aS10aW1lbGluZS12aWV3OmZvY3VzIHsKLSAgICBvdXRsaW5lOiBub25lOwotICB9Ci08L3N0eWxlPgote3tTWVNUUkFDRV9UUkFDRV9WSUVXRVJfSFRNTH19Ci08L2hlYWQ+Ci08Ym9keT4KLSAgPHRyLXVpLXRpbWVsaW5lLXZpZXc+Ci0gICAgPHRyYWNrLXZpZXctY29udGFpbmVyIGlkPSd0cmFja192aWV3X2NvbnRhaW5lcic+PC90cmFjay12aWV3LWNvbnRhaW5lcj4KLSAgPC90ci11aS10aW1lbGluZS12aWV3PgotCi0gIDxzY3JpcHQ+Ci0gICd1c2Ugc3RyaWN0JzsKLSAgdmFyIHRpbWVsaW5lVmlld0VsOwotCi0gIGZ1bmN0aW9uIG9uTG9hZCgpIHsKLSAgICB0aW1lbGluZVZpZXdFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RyLXVpLXRpbWVsaW5lLXZpZXcnKTsKLSAgICB0aW1lbGluZVZpZXdFbC5nbG9iYWxNb2RlID0gdHJ1ZTsKLQotICAgIHZhciB0cmFjZURhdGFFbHMgPSBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJy50cmFjZS1kYXRhJyk7Ci0gICAgdmFyIHRyYWNlcyA9IFtdOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2VEYXRhRWxzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgdHJhY2VUZXh0ID0gdHJhY2VEYXRhRWxzW2ldLnRleHRDb250ZW50OwotICAgICAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nIG5ld2xpbmUuCi0gICAgICB0cmFjZVRleHQgPSB0cmFjZVRleHQuc3Vic3RyaW5nKDEpOwotICAgICAgdHJhY2VzLnB1c2godHJhY2VUZXh0KTsKLSAgICB9Ci0KLSAgICB2YXIgbSA9IG5ldyB0ci5Nb2RlbCgpOwotICAgIHZhciBpID0gbmV3IHRyLmltcG9ydGVyLkltcG9ydChtKTsKLSAgICB2YXIgcCA9IGkuaW1wb3J0VHJhY2VzV2l0aFByb2dyZXNzRGlhbG9nKHRyYWNlcyk7Ci0gICAgcC50aGVuKAotICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRpbWVsaW5lVmlld0VsLm1vZGVsID0gbTsKLSAgICAgICAgdGltZWxpbmVWaWV3RWwudXBkYXRlRG9jdW1lbnRGYXZpY29uKCk7Ci0gICAgICAgIHRpbWVsaW5lVmlld0VsLmdsb2JhbE1vZGUgPSB0cnVlOwotICAgICAgICB0aW1lbGluZVZpZXdFbC52aWV3VGl0bGUgPSAnQW5kcm9pZCBTeXN0ZW0gVHJhY2UnOwotICAgICAgfSwKLSAgICAgIGZ1bmN0aW9uKGVycikgewotICAgICAgICB2YXIgb3ZlcmxheSA9IG5ldyB0ci51aS5iLk92ZXJsYXkoKTsKLSAgICAgICAgb3ZlcmxheS50ZXh0Q29udGVudCA9IHRyLmIubm9ybWFsaXplRXhjZXB0aW9uKGVycikubWVzc2FnZTsKLSAgICAgICAgb3ZlcmxheS50aXRsZSA9ICdJbXBvcnQgZXJyb3InOwotICAgICAgICBvdmVybGF5LnZpc2libGUgPSB0cnVlOwotICAgICAgfSk7Ci0gIH0KLSAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBvbkxvYWQpOwotICA8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3J1bl9zeXN0cmFjZS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3J1bl9zeXN0cmFjZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggY2IzMjAzNi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS9ydW5fc3lzdHJhY2UucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIkFuZHJvaWQgc3lzdGVtLXdpZGUgdHJhY2luZyB1dGlsaXR5LgotCi1UaGlzIGlzIGEgdG9vbCBmb3IgY2FwdHVyaW5nIGEgdHJhY2UgdGhhdCBpbmNsdWRlcyBkYXRhIGZyb20gYm90aCB1c2VybGFuZCBhbmQKLXRoZSBrZXJuZWwuICBJdCBjcmVhdGVzIGFuIEhUTUwgZmlsZSBmb3IgdmlzdWFsaXppbmcgdGhlIHRyYWNlLgotIiIiCi0KLSMgTWFrZSBzdXJlIHdlJ3JlIHVzaW5nIGEgbmV3IGVub3VnaCB2ZXJzaW9uIG9mIFB5dGhvbi4KLSMgVGhlIGZsYWdzPSBwYXJhbWV0ZXIgb2YgcmUuc3ViKCkgaXMgbmV3IGluIFB5dGhvbiAyLjcuIEFuZCBTeXN0cmFjZSBkb2VzIG5vdAotIyBzdXBwb3J0IFB5dGhvbiAzIHlldC4KLQotaW1wb3J0IHN5cwotCi12ZXJzaW9uID0gc3lzLnZlcnNpb25faW5mb1s6Ml0KLWlmIHZlcnNpb24gIT0gKDIsIDcpOgotICBzeXMuc3RkZXJyLndyaXRlKCdUaGlzIHNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IFB5dGhvbiAlZC4lZC4gJwotICAgICAgICAgICAgICAgICAgICdQbGVhc2UgdXNlIFB5dGhvbiAyLjcuXG4nICUgdmVyc2lvbikKLSAgc3lzLmV4aXQoMSkKLQotCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCBvcwotaW1wb3J0IHRpbWUKLQotX1NZU1RSQUNFX0RJUiA9IG9zLnBhdGguYWJzcGF0aCgKLSAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgb3MucGF0aC5wYXJkaXIpKQotX0NBVEFQVUxUX0RJUiA9IG9zLnBhdGguam9pbigKLSAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksIG9zLnBhdGgucGFyZGlyLCBvcy5wYXRoLnBhcmRpcikKLV9ERVZJTF9ESVIgPSBvcy5wYXRoLmpvaW4oX0NBVEFQVUxUX0RJUiwgJ2RldmlsJykKLWlmIF9ERVZJTF9ESVIgbm90IGluIHN5cy5wYXRoOgotICBzeXMucGF0aC5pbnNlcnQoMCwgX0RFVklMX0RJUikKLWlmIF9TWVNUUkFDRV9ESVIgbm90IGluIHN5cy5wYXRoOgotICBzeXMucGF0aC5pbnNlcnQoMCwgX1NZU1RSQUNFX0RJUikKLQotZnJvbSBkZXZpbCBpbXBvcnQgZGV2aWxfZW52Ci1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBhZGJfd3JhcHBlcgotZnJvbSBzeXN0cmFjZSBpbXBvcnQgc3lzdHJhY2VfcnVubmVyCi1mcm9tIHN5c3RyYWNlIGltcG9ydCB1dGlsCi1mcm9tIHN5c3RyYWNlLnRyYWNpbmdfYWdlbnRzIGltcG9ydCBhdHJhY2VfYWdlbnQKLWZyb20gc3lzdHJhY2UudHJhY2luZ19hZ2VudHMgaW1wb3J0IGF0cmFjZV9mcm9tX2ZpbGVfYWdlbnQKLWZyb20gc3lzdHJhY2UudHJhY2luZ19hZ2VudHMgaW1wb3J0IGF0cmFjZV9wcm9jZXNzX2R1bXAKLWZyb20gc3lzdHJhY2UudHJhY2luZ19hZ2VudHMgaW1wb3J0IGJhdHRvcl90cmFjZV9hZ2VudAotZnJvbSBzeXN0cmFjZS50cmFjaW5nX2FnZW50cyBpbXBvcnQgZnRyYWNlX2FnZW50Ci1mcm9tIHN5c3RyYWNlLnRyYWNpbmdfYWdlbnRzIGltcG9ydCB3YWx0X2FnZW50Ci0KLQotQUxMX01PRFVMRVMgPSBbYXRyYWNlX2FnZW50LCBhdHJhY2VfZnJvbV9maWxlX2FnZW50LCBhdHJhY2VfcHJvY2Vzc19kdW1wLAotICAgICAgICAgICAgICAgYmF0dG9yX3RyYWNlX2FnZW50LCBmdHJhY2VfYWdlbnQsIHdhbHRfYWdlbnRdCi0KLQotZGVmIHBhcnNlX29wdGlvbnMoYXJndik6Ci0gICIiIlBhcnNlcyBhbmQgY2hlY2tzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KLQotICBSZXR1cm5zOgotICAgIEEgdHVwbGUgY29udGFpbmluZyB0aGUgb3B0aW9ucyBzdHJ1Y3R1cmUgYW5kIGEgbGlzdCBvZiBjYXRlZ29yaWVzIHRvCi0gICAgYmUgdHJhY2VkLgotICAiIiIKLSAgdXNhZ2UgPSAnVXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBbY2F0ZWdvcnkxIFtjYXRlZ29yeTIgLi4uXV0nCi0gIGRlc2MgPSAnRXhhbXBsZTogJXByb2cgLWIgMzI3NjggLXQgMTUgZ2Z4IGlucHV0IHZpZXcgc2NoZWQgZnJlcScKLSAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlLCBkZXNjcmlwdGlvbj1kZXNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RfaGFuZGxlcj0ncmVzb2x2ZScpCi0gIHBhcnNlciA9IHV0aWwuZ2V0X21haW5fb3B0aW9ucyhwYXJzZXIpCi0KLSAgcGFyc2VyLmFkZF9vcHRpb24oJy1sJywgJy0tbGlzdC1jYXRlZ29yaWVzJywgZGVzdD0nbGlzdF9jYXRlZ29yaWVzJywKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgaGVscD0nbGlzdCB0aGUgYXZhaWxhYmxlIGNhdGVnb3JpZXMgYW5kIGV4aXQnKQotCi0gICMgQWRkIHRoZSBvdGhlciBhZ2VudCBwYXJzaW5nIG9wdGlvbnMgdG8gdGhlIHBhcnNlci4gRm9yIFN5c3RyYWNlIG9uIHRoZQotICAjIGNvbW1hbmQgbGluZSwgYWxsIGFnZW50cyBhcmUgYWRkZWQuIEZvciBBbmRyb2lkLCBvbmx5IHRoZSBjb21wYXRpYmxlIGFnZW50cwotICAjIHdpbGwgYmUgYWRkZWQuCi0gIGZvciBtb2R1bGUgaW4gQUxMX01PRFVMRVM6Ci0gICAgb3B0aW9uX2dyb3VwID0gbW9kdWxlLmFkZF9vcHRpb25zKHBhcnNlcikKLSAgICBpZiBvcHRpb25fZ3JvdXA6Ci0gICAgICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cChvcHRpb25fZ3JvdXApCi0KLSAgb3B0aW9ucywgY2F0ZWdvcmllcyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3ZbMTpdKQotCi0gIGlmIG9wdGlvbnMub3V0cHV0X2ZpbGUgaXMgTm9uZToKLSAgICBiYXNlID0gJ3RyYWNlJwotICAgIGlmIG9wdGlvbnMuZnJvbV9maWxlIGlzIG5vdCBOb25lOgotICAgICAgYmFzZSA9IG9zLnBhdGguc3BsaXRleHQob3B0aW9ucy5mcm9tX2ZpbGUpWzBdCi0gICAgc3VmZml4ID0gJy5qc29uJyBpZiBvcHRpb25zLndyaXRlX2pzb24gZWxzZSAnLmh0bWwnCi0gICAgb3B0aW9ucy5vdXRwdXRfZmlsZSA9IGJhc2UgKyBzdWZmaXgKLQotICBpZiBvcHRpb25zLmxpbmtfYXNzZXRzIG9yIG9wdGlvbnMuYXNzZXRfZGlyICE9ICd0cmFjZS12aWV3ZXInOgotICAgIHBhcnNlci5lcnJvcignLS1saW5rLWFzc2V0cyBhbmQgLS1hc3NldC1kaXIgYXJlIGRlcHJlY2F0ZWQuJykKLQotICBpZiBvcHRpb25zLnRyYWNlX3RpbWUgYW5kIG9wdGlvbnMudHJhY2VfdGltZSA8IDA6Ci0gICAgcGFyc2VyLmVycm9yKCd0aGUgdHJhY2UgdGltZSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcicpCi0KLSAgaWYgKG9wdGlvbnMudHJhY2VfYnVmX3NpemUgaXMgbm90IE5vbmUpIGFuZCAob3B0aW9ucy50cmFjZV9idWZfc2l6ZSA8PSAwKToKLSAgICBwYXJzZXIuZXJyb3IoJ3RoZSB0cmFjZSBidWZmZXIgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJykKLQotICByZXR1cm4gKG9wdGlvbnMsIGNhdGVnb3JpZXMpCi0KLWRlZiBmaW5kX2FkYigpOgotICAiIiJGaW5kcyBhZGIgb24gdGhlIHBhdGguCi0KLSAgVGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgdG8gYXZvaWQgdGhlIGlzc3VlIG9mIGRpc2t1dGlscy5zcGF3bidzCi0gIGZpbmRfZXhlY3V0YWJsZSB3aGljaCBmaXJzdCBzZWFyY2hlcyB0aGUgY3VycmVudCBkaXJlY3RvcnkgYmVmb3JlCi0gIHNlYXJjaGluZyAkUEFUSC4gVGhhdCBiZWhhdmlvciByZXN1bHRzIGluIGlzc3VlcyB3aGVyZSBzeXN0cmFjZS5weQotICB1c2VzIGEgZGlmZmVyZW50IGFkYiB0aGFuIHRoZSBvbmUgaW4gdGhlIHBhdGguCi0gICIiIgotICBwYXRocyA9IG9zLmVudmlyb25bJ1BBVEgnXS5zcGxpdChvcy5wYXRoc2VwKQotICBleGVjdXRhYmxlID0gJ2FkYicKLSAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGUgKyAnLmV4ZScKLSAgZm9yIHAgaW4gcGF0aHM6Ci0gICAgZiA9IG9zLnBhdGguam9pbihwLCBleGVjdXRhYmxlKQotICAgIGlmIG9zLnBhdGguaXNmaWxlKGYpOgotICAgICAgcmV0dXJuIGYKLSAgcmV0dXJuIE5vbmUKLQotZGVmIGluaXRpYWxpemVfZGV2aWwoKToKLSAgIiIiSW5pdGlhbGl6ZSBkZXZpbCB0byB1c2UgYWRiIGZyb20gJFBBVEgiIiIKLSAgYWRiX3BhdGggPSBmaW5kX2FkYigpCi0gIGlmIGFkYl9wYXRoIGlzIE5vbmU6Ci0gICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIlVuYWJsZSB0byBmaW5kIGFkYiwgaXMgaXQgaW4geW91ciBwYXRoPyIKLSAgICBzeXMuZXhpdCgxKQotICBkZXZpbF9keW5hbWljX2NvbmZpZyA9IHsKLSAgICAnY29uZmlnX3R5cGUnOiAnQmFzZUNvbmZpZycsCi0gICAgJ2RlcGVuZGVuY2llcyc6IHsKLSAgICAgICdhZGInOiB7Ci0gICAgICAgICdmaWxlX2luZm8nOiB7Ci0gICAgICAgICAgZGV2aWxfZW52LkdldFBsYXRmb3JtKCk6IHsKLSAgICAgICAgICAgICdsb2NhbF9wYXRocyc6IFtvcy5wYXRoLmFic3BhdGgoYWRiX3BhdGgpXQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICBkZXZpbF9lbnYuY29uZmlnLkluaXRpYWxpemUoY29uZmlncz1bZGV2aWxfZHluYW1pY19jb25maWddKQotCi0KLWRlZiBtYWluX2ltcGwoYXJndW1lbnRzKToKLSAgIyBQYXJzZSB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMuCi0gIG9wdGlvbnMsIGNhdGVnb3JpZXMgPSBwYXJzZV9vcHRpb25zKGFyZ3VtZW50cykKLQotICAjIE92ZXJyaWRlIC0tYXRyYWNlLWNhdGVnb3JpZXMgYW5kIC0tZnRyYWNlLWNhdGVnb3JpZXMgZmxhZ3MgaWYgY29tbWFuZC1saW5lCi0gICMgY2F0ZWdvcmllcyBhcmUgcHJvdmlkZWQuCi0gIGlmIGNhdGVnb3JpZXM6Ci0gICAgaWYgb3B0aW9ucy50YXJnZXQgPT0gJ2FuZHJvaWQnOgotICAgICAgb3B0aW9ucy5hdHJhY2VfY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXMKLSAgICBlbGlmIG9wdGlvbnMudGFyZ2V0ID09ICdsaW51eCc6Ci0gICAgICBvcHRpb25zLmZ0cmFjZV9jYXRlZ29yaWVzID0gY2F0ZWdvcmllcwotICAgIGVsc2U6Ci0gICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0NhdGVnb3JpZXMgYXJlIG9ubHkgdmFsaWQgZm9yIGF0cmFjZS9mdHJhY2UuIFRhcmdldCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtIG11c3QgYmUgZWl0aGVyIEFuZHJvaWQgb3IgTGludXguJykKLQotICAjIEluY2x1ZGUgYXRyYWNlIGNhdGVnb3JpZXMgYnkgZGVmYXVsdCBpbiBTeXN0cmFjZS4KLSAgaWYgb3B0aW9ucy50YXJnZXQgPT0gJ2FuZHJvaWQnIGFuZCBub3Qgb3B0aW9ucy5hdHJhY2VfY2F0ZWdvcmllczoKLSAgICBvcHRpb25zLmF0cmFjZV9jYXRlZ29yaWVzID0gYXRyYWNlX2FnZW50LkRFRkFVTFRfQ0FURUdPUklFUwotCi0gIGlmIG9wdGlvbnMudGFyZ2V0ID09ICdhbmRyb2lkJyBhbmQgbm90IG9wdGlvbnMuZnJvbV9maWxlOgotICAgIGluaXRpYWxpemVfZGV2aWwoKQotICAgIGlmIG5vdCBvcHRpb25zLmRldmljZV9zZXJpYWxfbnVtYmVyOgotICAgICAgZGV2aWNlcyA9IFthLkdldERldmljZVNlcmlhbCgpIGZvciBhIGluIGFkYl93cmFwcGVyLkFkYldyYXBwZXIuRGV2aWNlcygpXQotICAgICAgaWYgbGVuKGRldmljZXMpID09IDA6Ci0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm8gQURCIGRldmljZXMgY29ubmVjdGVkLicpCi0gICAgICBlbGlmIGxlbihkZXZpY2VzKSA+PSAyOgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ011bHRpcGxlIGRldmljZXMgY29ubmVjdGVkLCBzZXJpYWwgbnVtYmVyIHJlcXVpcmVkJykKLSAgICAgIG9wdGlvbnMuZGV2aWNlX3NlcmlhbF9udW1iZXIgPSBkZXZpY2VzWzBdCi0KLSAgIyBJZiBsaXN0X2NhdGVnb3JpZXMgaXMgc2VsZWN0ZWQsIGp1c3QgcHJpbnQgdGhlIGxpc3Qgb2YgY2F0ZWdvcmllcy4KLSAgIyBJbiB0aGlzIGNhc2UsIHVzZSBvZiB0aGUgdHJhY2luZyBjb250cm9sbGVyIGlzIG5vdCBuZWNlc3NhcnkuCi0gIGlmIG9wdGlvbnMubGlzdF9jYXRlZ29yaWVzOgotICAgIGlmIG9wdGlvbnMudGFyZ2V0ID09ICdhbmRyb2lkJzoKLSAgICAgIGF0cmFjZV9hZ2VudC5saXN0X2NhdGVnb3JpZXMob3B0aW9ucykKLSAgICBlbGlmIG9wdGlvbnMudGFyZ2V0ID09ICdsaW51eCc6Ci0gICAgICBmdHJhY2VfYWdlbnQubGlzdF9jYXRlZ29yaWVzKG9wdGlvbnMpCi0gICAgcmV0dXJuCi0KLSAgIyBTZXQgdXAgdGhlIHN5c3RyYWNlIHJ1bm5lciBhbmQgc3RhcnQgdHJhY2luZy4KLSAgY29udHJvbGxlciA9IHN5c3RyYWNlX3J1bm5lci5TeXN0cmFjZVJ1bm5lcigKLSAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgb3B0aW9ucykKLSAgY29udHJvbGxlci5TdGFydFRyYWNpbmcoKQotCi0gICMgV2FpdCBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzIG9yIHVudGlsIHRoZSB1c2VyIHByZXNzZXMgZW50ZXIuCi0gICMgcHlsaW50OiBkaXNhYmxlPXN1cGVyZmx1b3VzLXBhcmVucwotICAjIChuZWVkIHRoZSBwYXJlbnMgc28gbm8gc3ludGF4IGVycm9yIGlmIHRyeWluZyB0byBsb2FkIHdpdGggUHl0aG9uIDMpCi0gIGlmIG9wdGlvbnMuZnJvbV9maWxlIGlzIG5vdCBOb25lOgotICAgIHByaW50KCdSZWFkaW5nIHJlc3VsdHMgZnJvbSBmaWxlLicpCi0gIGVsaWYgb3B0aW9ucy50cmFjZV90aW1lOgotICAgIHByaW50KCdTdGFydGluZyB0cmFjaW5nICglZCBzZWNvbmRzKScgJSBvcHRpb25zLnRyYWNlX3RpbWUpCi0gICAgdGltZS5zbGVlcChvcHRpb25zLnRyYWNlX3RpbWUpCi0gIGVsc2U6Ci0gICAgcmF3X2lucHV0KCdTdGFydGluZyB0cmFjaW5nIChzdG9wIHdpdGggZW50ZXIpJykKLQotICAjIFN0b3AgdHJhY2luZyBhbmQgY29sbGVjdCB0aGUgb3V0cHV0LgotICBwcmludCgnVHJhY2luZyBjb21wbGV0ZWQuIENvbGxlY3Rpbmcgb3V0cHV0Li4uJykKLSAgY29udHJvbGxlci5TdG9wVHJhY2luZygpCi0gIHByaW50KCdPdXRwdXR0aW5nIFN5c3RyYWNlIHJlc3VsdHMuLi4nKQotICBjb250cm9sbGVyLk91dHB1dFN5c3RyYWNlUmVzdWx0cyh3cml0ZV9qc29uPW9wdGlvbnMud3JpdGVfanNvbikKLQotZGVmIG1haW4oKToKLSAgbWFpbl9pbXBsKHN5cy5hcmd2KQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nIGFuZCBfX3BhY2thZ2VfXyBpcyBOb25lOgotICBtYWluKCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3N1ZmZpeC5odG1sIGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2Uvc3VmZml4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwOGIxZDAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2Uvc3VmZml4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3N5c3RyYWNlX3J1bm5lci5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3N5c3RyYWNlX3J1bm5lci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNkOTMyNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS9zeXN0cmFjZV9ydW5uZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0nJydJbXBsZW1lbnRhdGlvbiBvZiB0cmFjaW5nIGNvbnRyb2xsZXIgZm9yIHN5c3RyYWNlLiBUaGlzIGNsYXNzIGNyZWF0ZXMgdGhlCi1uZWNlc3NhcnkgdHJhY2luZyBhZ2VudHMgZm9yIHN5c3RyYWNlLCBydW5zIHRoZW0sIGFuZCBvdXRwdXRzIHRoZSByZXN1bHRzCi1hcyBhbiBIVE1MIG9yIEpTT04gZmlsZS4nJycKLQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgb3V0cHV0X2dlbmVyYXRvcgotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2luZ19jb250cm9sbGVyCi1mcm9tIHN5c3RyYWNlLnRyYWNpbmdfYWdlbnRzIGltcG9ydCBhbmRyb2lkX3Byb2Nlc3NfZGF0YV9hZ2VudAotZnJvbSBzeXN0cmFjZS50cmFjaW5nX2FnZW50cyBpbXBvcnQgYXRyYWNlX2FnZW50Ci1mcm9tIHN5c3RyYWNlLnRyYWNpbmdfYWdlbnRzIGltcG9ydCBhdHJhY2VfZnJvbV9maWxlX2FnZW50Ci1mcm9tIHN5c3RyYWNlLnRyYWNpbmdfYWdlbnRzIGltcG9ydCBhdHJhY2VfcHJvY2Vzc19kdW1wCi1mcm9tIHN5c3RyYWNlLnRyYWNpbmdfYWdlbnRzIGltcG9ydCBiYXR0b3JfdHJhY2VfYWdlbnQKLWZyb20gc3lzdHJhY2UudHJhY2luZ19hZ2VudHMgaW1wb3J0IGZ0cmFjZV9hZ2VudAotZnJvbSBzeXN0cmFjZS50cmFjaW5nX2FnZW50cyBpbXBvcnQgd2FsdF9hZ2VudAotCi1BR0VOVF9NT0RVTEVTID0gW2FuZHJvaWRfcHJvY2Vzc19kYXRhX2FnZW50LCBhdHJhY2VfYWdlbnQsCi0gICAgICAgICAgICAgICAgIGF0cmFjZV9mcm9tX2ZpbGVfYWdlbnQsIGF0cmFjZV9wcm9jZXNzX2R1bXAsCi0gICAgICAgICAgICAgICAgIGJhdHRvcl90cmFjZV9hZ2VudCwgZnRyYWNlX2FnZW50LCB3YWx0X2FnZW50XQotCi1jbGFzcyBTeXN0cmFjZVJ1bm5lcihvYmplY3QpOgotICBkZWYgX19pbml0X18oc2VsZiwgc2NyaXB0X2Rpciwgb3B0aW9ucyk6Ci0gICAgIiIiQ29uc3RydWN0b3IuCi0KLSAgICBBcmdzOgotICAgICAgICBzY3JpcHRfZGlyOiBEaXJlY3RvcnkgY29udGFpbmluZyB0aGUgdHJhY2Ugdmlld2VyIHNjcmlwdAotICAgICAgICAgICAgICAgICAgICAoc3lzdHJhY2VfdHJhY2Vfdmlld2VyLmh0bWwpCi0gICAgICAgIG9wdGlvbnM6IE9iamVjdCBjb250YWluaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zLgotICAgICIiIgotICAgICMgUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhbmQgY3JlYXRlIGFnZW50cy4KLSAgICBzZWxmLl9zY3JpcHRfZGlyID0gc2NyaXB0X2RpcgotICAgIHNlbGYuX291dF9maWxlbmFtZSA9IG9wdGlvbnMub3V0cHV0X2ZpbGUKLSAgICBhZ2VudHNfd2l0aF9jb25maWcgPSB0cmFjaW5nX2NvbnRyb2xsZXIuQ3JlYXRlQWdlbnRzV2l0aENvbmZpZygKLSAgICAgICAgb3B0aW9ucywgQUdFTlRfTU9EVUxFUykKLSAgICBjb250cm9sbGVyX2NvbmZpZyA9IHRyYWNpbmdfY29udHJvbGxlci5HZXRDb250cm9sbGVyQ29uZmlnKG9wdGlvbnMpCi0KLSAgICAjIFNldCB1cCB0cmFjaW5nIGNvbnRyb2xsZXIuCi0gICAgc2VsZi5fdHJhY2luZ19jb250cm9sbGVyID0gdHJhY2luZ19jb250cm9sbGVyLlRyYWNpbmdDb250cm9sbGVyKAotICAgICAgICBhZ2VudHNfd2l0aF9jb25maWcsIGNvbnRyb2xsZXJfY29uZmlnKQotCi0gIGRlZiBTdGFydFRyYWNpbmcoc2VsZik6Ci0gICAgc2VsZi5fdHJhY2luZ19jb250cm9sbGVyLlN0YXJ0VHJhY2luZygpCi0KLSAgZGVmIFN0b3BUcmFjaW5nKHNlbGYpOgotICAgIHNlbGYuX3RyYWNpbmdfY29udHJvbGxlci5TdG9wVHJhY2luZygpCi0KLSAgZGVmIE91dHB1dFN5c3RyYWNlUmVzdWx0cyhzZWxmLCB3cml0ZV9qc29uPUZhbHNlKToKLSAgICAiIiJPdXRwdXQgdGhlIHJlc3VsdHMgb2Ygc3lzdHJhY2UgdG8gYSBmaWxlLgotCi0gICAgSWYgb3V0cHV0IGlzIG5lY2Vzc2FyeSwgdGhlbiB3cml0ZSB0aGUgcmVzdWx0cyBvZiBzeXN0cmFjZSB0byBlaXRoZXIgKGEpCi0gICAgYSBzdGFuZGFsb25lIEhUTUwgZmlsZSwgb3IgKGIpIGEganNvbiBmaWxlIHdoaWNoIGNhbiBiZSByZWFkIGJ5IHRoZQotICAgIHRyYWNlIHZpZXdlci4KLQotICAgIEFyZ3M6Ci0gICAgICAgd3JpdGVfanNvbjogV2hldGhlciB0byBvdXRwdXQgdG8gYSBqc29uIGZpbGUgKGlmIGZhbHNlLCB1c2UgSFRNTCBmaWxlKQotICAgICIiIgotICAgIHByaW50ICdUcmFjaW5nIGNvbXBsZXRlLCB3cml0aW5nIHJlc3VsdHMnCi0gICAgaWYgd3JpdGVfanNvbjoKLSAgICAgIHJlc3VsdCA9IG91dHB1dF9nZW5lcmF0b3IuR2VuZXJhdGVKU09OT3V0cHV0KAotICAgICAgICAgICAgICAgICAgc2VsZi5fdHJhY2luZ19jb250cm9sbGVyLmFsbF9yZXN1bHRzLAotICAgICAgICAgICAgICAgICAgc2VsZi5fb3V0X2ZpbGVuYW1lKQotICAgIGVsc2U6Ci0gICAgICByZXN1bHQgPSBvdXRwdXRfZ2VuZXJhdG9yLkdlbmVyYXRlSFRNTE91dHB1dCgKLSAgICAgICAgICAgICAgICAgIHNlbGYuX3RyYWNpbmdfY29udHJvbGxlci5hbGxfcmVzdWx0cywKLSAgICAgICAgICAgICAgICAgIHNlbGYuX291dF9maWxlbmFtZSkKLSAgICBwcmludCAnXG5Xcm90ZSB0cmFjZSAlcyBmaWxlOiBmaWxlOi8vJXNcbicgJSAoKCdKU09OJyBpZiB3cml0ZV9qc29uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICdIVE1MJyksIHJlc3VsdCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3N5c3RyYWNlX3RyYWNlX3ZpZXdlci5odG1sIGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2Uvc3lzdHJhY2VfdHJhY2Vfdmlld2VyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiN2ZiMzkuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2Uvc3lzdHJhY2VfdHJhY2Vfdmlld2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NTYyICswLDAgQEAKLTx0ZW1wbGF0ZSBpZD0ib3ZlcmxheS10ZW1wbGF0ZSI+Ci0gIDxzdHlsZT4KLSAgICBvdmVybGF5LW1hc2sgewotICAgICAgbGVmdDogMDsKLSAgICAgIHBhZGRpbmc6IDhweDsKLSAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICAgIHRvcDogMDsKLSAgICAgIHotaW5kZXg6IDEwMDA7Ci0gICAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKLSAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ci0gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgaGVpZ2h0OiAxMDAlOwotICAgICAgbGVmdDogMDsKLSAgICAgIHBvc2l0aW9uOiBmaXhlZDsKLSAgICAgIHRvcDogMDsKLSAgICAgIHdpZHRoOiAxMDAlOwotICAgIH0KLSAgICBvdmVybGF5LW1hc2s6Zm9jdXMgewotICAgICAgb3V0bGluZTogbm9uZTsKLSAgICB9Ci0gICAgb3ZlcmxheS12ZXJ0aWNhbC1jZW50ZXJpbmctY29udGFpbmVyIHsKLSAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgICAgZGlzcGxheTogZmxleDsKLSAgICB9Ci0gICAgb3ZlcmxheS1mcmFtZSB7Ci0gICAgICB6LWluZGV4OiAxMTAwOwotICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwgMjU1LCAyNTUpOwotICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKLSAgICAgIG1hcmdpbjogNzVweDsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgICAgbWluLWhlaWdodDogMDsKLSAgICB9Ci0gICAgdGl0bGUtYmFyIHsKLSAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7Ci0gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYzsKLSAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgcGFkZGluZzogNXB4OwotICAgICAgZmxleDogMCAwIGF1dG87Ci0gICAgfQotICAgIHRpdGxlIHsKLSAgICAgIGRpc3BsYXk6IGlubGluZTsKLSAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgICAgZmxleDogMSAxIGF1dG87Ci0gICAgfQotICAgIGNsb3NlLWJ1dHRvbiB7Ci0gICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtZW5kOwotICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKLSAgICAgIGJhY2tncm91bmQtY29sb3I6ICM5OTk7Ci0gICAgICBmb250LXNpemU6IDEwcHQ7Ci0gICAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICAgIHBhZGRpbmc6IDJweDsKLSAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICAgIHdpZHRoOiAxNnB4OwotICAgIH0KLSAgICBjbG9zZS1idXR0b246aG92ZXIgewotICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDsKLSAgICAgIGJvcmRlci1jb2xvcjogYmxhY2s7Ci0gICAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAgfQotICAgIG92ZXJsYXktY29udGVudCB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZmxleDogMSAxIGF1dG87Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgICAgb3ZlcmZsb3cteTogYXV0bzsKLSAgICAgIHBhZGRpbmc6IDEwcHg7Ci0gICAgICBtaW4td2lkdGg6IDMwMHB4OwotICAgICAgbWluLWhlaWdodDogMDsKLSAgICB9Ci0gICAgYnV0dG9uLWJhciB7Ci0gICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBiYXNlbGluZTsKLSAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjOwotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGZsZXg6IDAgMCBhdXRvOwotICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwotICAgICAgcGFkZGluZzogNHB4OwotICAgIH0KLSAgPC9zdHlsZT4KLQotICA8b3ZlcmxheS1tYXNrPgotICAgIDxvdmVybGF5LXZlcnRpY2FsLWNlbnRlcmluZy1jb250YWluZXI+Ci0gICAgICA8b3ZlcmxheS1mcmFtZT4KLSAgICAgICAgPHRpdGxlLWJhcj4KLSAgICAgICAgICA8dGl0bGU+PC90aXRsZT4KLSAgICAgICAgICA8Y2xvc2UtYnV0dG9uPuKclTwvY2xvc2UtYnV0dG9uPgotICAgICAgICA8L3RpdGxlLWJhcj4KLSAgICAgICAgPG92ZXJsYXktY29udGVudD4KLSAgICAgICAgICA8Y29udGVudD48L2NvbnRlbnQ+Ci0gICAgICAgIDwvb3ZlcmxheS1jb250ZW50PgotICAgICAgICA8YnV0dG9uLWJhcj48L2J1dHRvbi1iYXI+Ci0gICAgICA8L292ZXJsYXktZnJhbWU+Ci0gICAgPC9vdmVybGF5LXZlcnRpY2FsLWNlbnRlcmluZy1jb250YWluZXI+Ci0gIDwvb3ZlcmxheS1tYXNrPgotPC90ZW1wbGF0ZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1hbmFseXNpcy1saW5rIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBpbmxpbmU7Ci0gICAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotICAgIH0KLSAgICBhIHsKLSAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDxhIGhyZWY9Int7aHJlZn19IiBvbi1jbGljaz0ib25DbGlja2VkXyIgb24tbW91c2VlbnRlcj0ib25Nb3VzZUVudGVyXyIgb24tbW91c2VsZWF2ZT0ib25Nb3VzZUxlYXZlXyI+PGNvbnRlbnQ+PC9jb250ZW50PjwvYT4KLQotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1iLXRhYmxlIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICAgIDpob3N0IHsKLSAgICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICAgIH0KLQotICAgICAgdGFibGUgewotICAgICAgICBmbGV4OiAxIDEgYXV0bzsKLSAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKLSAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKLSAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7Ci0gICAgICAgIGJvcmRlci13aWR0aDogMDsKLSAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogaW5pdGlhbDsKLSAgICAgIH0KLQotICAgICAgdHIgPiB0ZCB7Ci0gICAgICAgIHBhZGRpbmc6IDJweCA0cHggMnB4IDRweDsKLSAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKLSAgICAgIH0KLQotICAgICAgdGFibGUgPiB0Ym9keTpmb2N1cyB7Ci0gICAgICAgIG91dGxpbmU6IG5vbmU7Ci0gICAgICB9Ci0gICAgICB0YWJsZSA+IHRib2R5OmZvY3VzW3NlbGVjdGlvbi1tb2RlPSJyb3ciXSA+IHRyW3NlbGVjdGVkXSwKLSAgICAgIHRhYmxlID4gdGJvZHk6Zm9jdXNbc2VsZWN0aW9uLW1vZGU9ImNlbGwiXSA+IHRyID4gdGRbc2VsZWN0ZWRdLAotICAgICAgdGFibGUgPiB0Ym9keTpmb2N1cyA+IHRyLmVtcHR5LXJvdyA+IHRkIHsKLSAgICAgICAgb3V0bGluZTogMXB4IGRvdHRlZCAjNjY2NjY2OwotICAgICAgICBvdXRsaW5lLW9mZnNldDogLTFweDsKLSAgICAgIH0KLQotICAgICAgYnV0dG9uLnRvZ2dsZS1idXR0b24gewotICAgICAgICBoZWlnaHQ6IDE1cHg7Ci0gICAgICAgIGxpbmUtaGVpZ2h0OiA2MCU7Ci0gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci0gICAgICAgIHdpZHRoOiAxMDAlOwotICAgICAgfQotCi0gICAgICBidXR0b24gPiAqIHsKLSAgICAgICAgaGVpZ2h0OiAxNXB4OwotICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwotICAgICAgfQotCi0gICAgICB0ZC5idXR0b24tY29sdW1uIHsKLSAgICAgICAgd2lkdGg6IDMwcHg7Ci0gICAgICB9Ci0KLSAgICAgIHRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLnNlbnNpdGl2ZTpob3ZlciB7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmY2ZjZmM7Ci0gICAgICB9Ci0KLSAgICAgIHRhYmxlID4gdGhlYWQgPiB0ciA+IHRkIHsKLSAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7Ci0KLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKLSAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Ci0KLSAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNmZmZmZmY7Ci0gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYWFhOwotICAgICAgfQotCi0gICAgICB0YWJsZSA+IHRmb290IHsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKLSAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgICB9Ci0KLSAgICAgIC8qIExpZ2h0IHJvdyBhbmQgY2VsbCBoaWdobGlnaHQuICovCi0gICAgICB0YWJsZSA+IHRib2R5W3Jvdy1oaWdobGlnaHQtc3R5bGU9ImxpZ2h0Il0gPiB0cltzZWxlY3RlZF0sCi0gICAgICB0YWJsZSA+IHRib2R5W2NlbGwtaGlnaGxpZ2h0LXN0eWxlPSJsaWdodCJdID4gdHIgPiB0ZFtzZWxlY3RlZF0gewotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjEzLCAyMzYsIDIyOSk7ICAvKiBsaWdodCB0dXJxdW9pc2UgKi8KLSAgICAgIH0KLSAgICAgIHRhYmxlID4gdGJvZHlbcm93LWhpZ2hsaWdodC1zdHlsZT0ibGlnaHQiXSA+Ci0gICAgICAgICAgdHI6bm90KC5lbXB0eS1yb3cpOm5vdChbc2VsZWN0ZWRdKTpob3ZlciwKLSAgICAgIHRhYmxlID4gdGJvZHlbY2VsbC1oaWdobGlnaHQtc3R5bGU9ImxpZ2h0Il0gPgotICAgICAgICAgIHRyOm5vdCguZW1wdHktcm93KTpub3QoW3NlbGVjdGVkXSkgPiB0ZDpob3ZlciB7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmNmY2ZjY7ICAvKiBsaWdodCBncmV5ICovCi0gICAgICB9Ci0KLSAgICAgIC8qIERhcmsgcm93IGFuZCBjZWxsIGhpZ2hsaWdodC4gKi8KLSAgICAgIHRhYmxlID4gdGJvZHlbcm93LWhpZ2hsaWdodC1zdHlsZT0iZGFyayJdID4gdHJbc2VsZWN0ZWRdLAotICAgICAgdGFibGUgPiB0Ym9keVtjZWxsLWhpZ2hsaWdodC1zdHlsZT0iZGFyayJdID4gdHIgPiB0ZFtzZWxlY3RlZF0gewotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTAzLCAxOTksIDE2NSk7ICAvKiB0dXJxdW9pc2UgKi8KLSAgICAgIH0KLSAgICAgIHRhYmxlID4gdGJvZHlbcm93LWhpZ2hsaWdodC1zdHlsZT0iZGFyayJdID4KLSAgICAgICAgICB0cjpub3QoLmVtcHR5LXJvdyk6bm90KFtzZWxlY3RlZF0pOmhvdmVyLAotICAgICAgdGFibGUgPiB0Ym9keVtjZWxsLWhpZ2hsaWdodC1zdHlsZT0iZGFyayJdID4KLSAgICAgICAgICB0cjpub3QoLmVtcHR5LXJvdyk6bm90KFtzZWxlY3RlZF0pID4gdGQ6aG92ZXIgewotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2OyAgLyogZ3JleSAqLwotICAgICAgfQotICAgICAgdGFibGUgPiB0Ym9keVtyb3ctaGlnaGxpZ2h0LXN0eWxlPSJkYXJrIl0gPiB0cjpob3ZlcltzZWxlY3RlZF0sCi0gICAgICB0YWJsZSA+IHRib2R5W2NlbGwtaGlnaGxpZ2h0LXN0eWxlPSJkYXJrIl0gPiB0cltzZWxlY3RlZF0gPiB0ZDpob3ZlciB7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxNzEsIDIxNywgMjAyKTsgIC8qIHNlbWktbGlnaHQgdHVycXVvaXNlICovCi0gICAgICB9Ci0KLSAgICAgIHRhYmxlID4gY29sZ3JvdXAgPiBjb2xbc2VsZWN0ZWRdIHsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjsgIC8qIGdyZXkgKi8KLSAgICAgIH0KLQotICAgICAgdGFibGUgPiB0Ym9keSA+IHRyLmVtcHR5LXJvdyA+IHRkIHsKLSAgICAgICAgY29sb3I6ICM2NjY7Ci0gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLSAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAgICAgfQotCi0gICAgICB0YWJsZSA+IHRib2R5Lmhhcy1mb290ZXIgPiB0cjpsYXN0LWNoaWxkID4gdGQgewotICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2FhYTsKLSAgICAgIH0KLQotICAgICAgdGFibGUgPiB0Zm9vdCA+IHRyOmZpcnN0LWNoaWxkID4gdGQgewotICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2ZmZmZmZjsKLSAgICAgIH0KLQotICAgICAgOmhvc3QoW3plYnJhXSkgdGFibGUgdGJvZHkgdHI6bnRoLWNoaWxkKGV2ZW4pIHsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDsKLSAgICAgIH0KLQotICAgICAgZXhwYW5kLWJ1dHRvbiB7Ci0gICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ci0gICAgICAgIGN1cnNvcjogcG9pbnRlcjsKLSAgICAgICAgbWFyZ2luLXJpZ2h0OiAzcHg7Ci0gICAgICAgIGZvbnQtc2l6ZTogc21hbGxlcjsKLSAgICAgICAgaGVpZ2h0OiAxcmVtOwotICAgICAgfQotCi0gICAgICBleHBhbmQtYnV0dG9uLmJ1dHRvbi1leHBhbmRlZCB7Ci0gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKLSAgICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDx0YWJsZT4KLSAgICAgIDxjb2xncm91cCBpZD0iY29scyI+Ci0gICAgICA8L2NvbGdyb3VwPgotICAgICAgPHRoZWFkIGlkPSJoZWFkIj4KLSAgICAgIDwvdGhlYWQ+Ci0gICAgICA8dGJvZHkgaWQ9ImJvZHkiPgotICAgICAgPC90Ym9keT4KLSAgICAgIDx0Zm9vdCBpZD0iZm9vdCI+Ci0gICAgICA8L3Rmb290PgotICAgIDwvdGFibGU+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWItdGFibGUtaGVhZGVyLWNlbGwiPgotICA8dGVtcGxhdGU+Ci0gIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwotICAgICAgZGlzcGxheTogZmxleDsKLSAgICB9Ci0KLSAgICBzcGFuIHsKLSAgICAgIGZsZXg6IDAgMSBhdXRvOwotICAgIH0KLQotICAgICNzaWRlIHsKLSAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ci0gICAgICBmbGV4OiAwIDAgYXV0bzsKLSAgICAgIHBhZGRpbmctbGVmdDogMnB4OwotICAgICAgcGFkZGluZy1yaWdodDogMnB4OwotICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKLSAgICAgIGZvbnQtc2l6ZTogMTVweDsKLSAgICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwotICAgICAgbGluZS1oZWlnaHQ6IDg1JTsKLSAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7Ci0gICAgfQotCi0gICAgI3NpZGUuZGlzYWJsZWQgewotICAgICAgY29sb3I6IHJnYigxNDAsIDE0MCwgMTQwKTsKLSAgICB9Ci0KLSAgICAjdGl0bGU6ZW1wdHksICNzaWRlOmVtcHR5IHsKLSAgICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgfQotICA8L3N0eWxlPgotCi0gICAgPHNwYW4gaWQ9InRpdGxlIj48L3NwYW4+Ci0gICAgPHNwYW4gaWQ9InNpZGUiPjwvc3Bhbj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdi11aS1zY2FsYXItY29udGV4dC1jb250cm9sbGVyIj4KLSAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktc2NhbGFyLXNwYW4iPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwotICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKLSAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICAgIC8qIExpbWl0IHRoZSBzcGFya2xpbmUncyBuZWdhdGl2ZSB6LWluZGV4IHRvIHRoZSBzcGFuIG9ubHkuICovCi0gICAgICBpc29sYXRpb246IGlzb2xhdGU7Ci0gICAgfQotCi0gICAgOmhvc3QoLmxlZnQtYWxpZ24pIHsKLSAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKLSAgICB9Ci0KLSAgICA6aG9zdCguaW5saW5lKSB7Ci0gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKLSAgICB9Ci0KLSAgICAjc3BhcmtsaW5lIHsKLSAgICAgIHdpZHRoOiAwJTsKLSAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICAgIGJvdHRvbTogMDsKLSAgICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgICBoZWlnaHQ6IDEwMCU7Ci0gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2xhKDIxNiwgMTAwJSwgOTQuNSUsIC43NSk7Ci0gICAgICBib3JkZXItY29sb3I6IGhzbCgyMTYsIDEwMCUsIDg5JSk7Ci0gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgICAgei1pbmRleDogLTE7Ci0gICAgfQotICAgICNzcGFya2xpbmUucG9zaXRpdmUgewotICAgICAgYm9yZGVyLXJpZ2h0LXN0eWxlOiBzb2xpZDsKLSAgICAgIC8qIFRoZSBib3JkZXIgd2lkdGggbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBidWlsZFNwYXJrbGluZVN0eWxlXygpLiAqLwotICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAxcHg7Ci0gICAgfQotICAgICNzcGFya2xpbmU6bm90KC5wb3NpdGl2ZSkgewotICAgICAgYm9yZGVyLWxlZnQtc3R5bGU6IHNvbGlkOwotICAgICAgLyogVGhlIGJvcmRlciB3aWR0aCBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIGJ1aWxkU3BhcmtsaW5lU3R5bGVfKCkuICovCi0gICAgICBib3JkZXItbGVmdC13aWR0aDogMXB4OwotICAgIH0KLSAgICAjc3BhcmtsaW5lLmJldHRlciB7Ci0gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2xhKDExNSwgMTAwJSwgOTMlLCAuNzUpOwotICAgICAgYm9yZGVyLWNvbG9yOiBoc2woMTE4LCA2MCUsIDgwJSk7Ci0gICAgfQotICAgICNzcGFya2xpbmUud29yc2UgewotICAgICAgYmFja2dyb3VuZC1jb2xvcjogaHNsYSgwLCAxMDAlLCA4OCUsIC43NSk7Ci0gICAgICBib3JkZXItY29sb3I6IGhzbCgwLCAxMDAlLCA4MCUpOwotICAgIH0KLQotICAgICNjb250ZW50IHsKLSAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0gICAgfQotICAgICNjb250ZW50LCAjc2lnbmlmaWNhbmNlLCAjd2FybmluZyB7Ci0gICAgICBmbGV4LWdyb3c6IDA7Ci0gICAgfQotICAgICNjb250ZW50LmJldHRlciB7Ci0gICAgICBjb2xvcjogZ3JlZW47Ci0gICAgfQotICAgICNjb250ZW50LndvcnNlIHsKLSAgICAgIGNvbG9yOiByZWQ7Ci0gICAgfQotCi0gICAgI3NpZ25pZmljYW5jZSBzdmcgewotICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKLSAgICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgICBoZWlnaHQ6IDFlbTsKLSAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDsKLSAgICAgIHN0cm9rZS13aWR0aDogNDsKLSAgICAgIGZpbGw6IHJnYmEoMCwgMCwgMCwgMCk7Ci0gICAgfQotICAgICNzaWduaWZpY2FuY2UgI2luc2lnbmlmaWNhbnQgewotICAgICAgc3Ryb2tlOiBibGFjazsKLSAgICB9Ci0gICAgI3NpZ25pZmljYW5jZSAjc2lnbmlmaWNhbnRseV9iZXR0ZXIgewotICAgICAgc3Ryb2tlOiBncmVlbjsKLSAgICB9Ci0gICAgI3NpZ25pZmljYW5jZSAjc2lnbmlmaWNhbnRseV93b3JzZSB7Ci0gICAgICBzdHJva2U6IHJlZDsKLSAgICB9Ci0KLSAgICAjd2FybmluZyB7Ci0gICAgICBkaXNwbGF5OiBub25lOwotICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKLSAgICAgIGhlaWdodDogMWVtOwotICAgICAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wOwotICAgICAgc3Ryb2tlLXdpZHRoOiAwOwotICAgIH0KLSAgICAjd2FybmluZyBwYXRoIHsKLSAgICAgIGZpbGw6IHJnYigyNTUsIDE4NSwgMTg1KTsKLSAgICB9Ci0gICAgI3dhcm5pbmcgcmVjdCB7Ci0gICAgICBmaWxsOiByZWQ7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0KLSAgICA8c3BhbiBpZD0ic3BhcmtsaW5lIj48L3NwYW4+Ci0KLSAgICA8c3BhbiBpZD0iY29udGVudCI+PC9zcGFuPgotCi0gICAgPHNwYW4gaWQ9InNpZ25pZmljYW5jZSI+Ci0gICAgICAKLSAgICAgIDxzdmcgaWQ9Imluc2lnbmlmaWNhbnQiIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij4KLSAgICAgICAgPGNpcmNsZSBjeD0iNjQiIGN5PSI2NCIgcj0iNjAiPjwvY2lyY2xlPgotICAgICAgICA8Y2lyY2xlIGN4PSI0NCIgY3k9IjQ0IiByPSI0Ij48L2NpcmNsZT4KLSAgICAgICAgPGNpcmNsZSBjeD0iODQiIGN5PSI0NCIgcj0iNCI+PC9jaXJjbGU+Ci0gICAgICAgIDxsaW5lIHgxPSIzNiIgeDI9IjkyIiB5MT0iODAiIHkyPSI4MCI+PC9saW5lPgotICAgICAgPC9zdmc+Ci0KLSAgICAgIAotICAgICAgPHN2ZyBpZD0ic2lnbmlmaWNhbnRseV9iZXR0ZXIiIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij4KLSAgICAgICAgPGNpcmNsZSBjeD0iNjQiIGN5PSI2NCIgcj0iNjAiPjwvY2lyY2xlPgotICAgICAgICA8Y2lyY2xlIGN4PSI0NCIgY3k9IjQ0IiByPSI0Ij48L2NpcmNsZT4KLSAgICAgICAgPGNpcmNsZSBjeD0iODQiIGN5PSI0NCIgcj0iNCI+PC9jaXJjbGU+Ci0gICAgICAgIDxwYXRoIGQ9Ik0gMjggNjQgUSA2NCAxMjggMTAwIDY0Ij48L3BhdGg+Ci0gICAgICA8L3N2Zz4KLQotICAgICAgCi0gICAgICA8c3ZnIGlkPSJzaWduaWZpY2FudGx5X3dvcnNlIiB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+Ci0gICAgICAgIDxjaXJjbGUgY3g9IjY0IiBjeT0iNjQiIHI9IjYwIj48L2NpcmNsZT4KLSAgICAgICAgPGNpcmNsZSBjeD0iNDQiIGN5PSI0NCIgcj0iNCI+PC9jaXJjbGU+Ci0gICAgICAgIDxjaXJjbGUgY3g9Ijg0IiBjeT0iNDQiIHI9IjQiPjwvY2lyY2xlPgotICAgICAgICA8cGF0aCBkPSJNIDM2IDk2IFEgNjQgNDggOTIgOTYiPjwvcGF0aD4KLSAgICAgIDwvc3ZnPgotICAgIDwvc3Bhbj4KLQotICAgIDxzdmcgaWQ9Indhcm5pbmciIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij4KLSAgICAgIDxwYXRoIGQ9Ik0gNjQgMCBMIDEyOCAxMjggTCAwIDEyOCBMIDY0IDAiPjwvcGF0aD4KLSAgICAgIDxyZWN0IGhlaWdodD0iODQiIHdpZHRoPSI4IiB4PSI2MCIgeT0iMCI+PC9yZWN0PgotICAgICAgPHJlY3QgaGVpZ2h0PSIyNCIgd2lkdGg9IjgiIHg9IjYwIiB5PSIxMDAiPjwvcmVjdD4KLSAgICA8L3N2Zz4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1nZW5lcmljLW9iamVjdC12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBibG9jazsKLSAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPGRpdiBpZD0iY29udGVudCI+Ci0gICAgPC9kaXY+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtZ2VuZXJpYy1vYmplY3Qtdmlldy13aXRoLWxhYmVsIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBibG9jazsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYi1kcmFnLWhhbmRsZSI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKLSAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAgICBkaXNwbGF5OiBibG9jazsKLSAgICB9Ci0KLSAgICA6aG9zdCguaG9yaXpvbnRhbC1kcmFnLWhhbmRsZSkgewotICAgICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgMCwgMCAxMDAlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tKCNFNUU1RTUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bygjRDFEMUQxKSk7Ci0gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzhlOGU4ZTsKLSAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB3aGl0ZTsKLSAgICAgIGN1cnNvcjogbnMtcmVzaXplOwotICAgICAgZmxleDogMCAwIGF1dG87Ci0gICAgICBoZWlnaHQ6IDdweDsKLSAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICB9Ci0KLSAgICA6aG9zdCgudmVydGljYWwtZHJhZy1oYW5kbGUpIHsKLSAgICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDAsIDEwMCUgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSgjRTVFNUU1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8oI0QxRDFEMSkpOwotICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB3aGl0ZTsKLSAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICM4ZThlOGU7Ci0gICAgICBjdXJzb3I6IGV3LXJlc2l6ZTsKLSAgICAgIGZsZXg6IDAgMCBhdXRvOwotICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgICAgd2lkdGg6IDdweDsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8ZGl2PjwvZGl2PgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0di11aS1iLWhvdGtleS1jb250cm9sbGVyIj4KLSAgPHRlbXBsYXRlPgotICAgIDxkaXY+PC9kaXY+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWItaW5mby1iYXIiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Ci0gICAgICBmbGV4OiAwIDAgYXV0bzsKLSAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTIsIDIzNSwgMTYyKTsKLSAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQTNBM0EzOwotICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB3aGl0ZTsKLSAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNBM0EzQTM7Ci0gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgd2hpdGU7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgaGVpZ2h0OiAyNnB4OwotICAgICAgcGFkZGluZzogMCAzcHggMCAzcHg7Ci0gICAgfQotCi0gICAgOmhvc3QoW2hpZGRlbl0pIHsKLSAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKLSAgICB9Ci0KLSAgICAjbWVzc2FnZSB7IGZsZXg6IDEgMSBhdXRvOyB9Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzcGFuIGlkPSJtZXNzYWdlIj48L3NwYW4+Ci0gICAgPHNwYW4gaWQ9ImJ1dHRvbnMiPjwvc3Bhbj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYi1tb3VzZS1tb2RlLWljb24iPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGJsb2NrOwotICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRHdBQUFDaENBWUFBQUNiQk56dkFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFBTEVnQUFDeElCMHQxKy9BQUFBQlYwUlZoMFEzSmxZWFJwYjI0Z1ZHbHRaUUEzTHpFMkx6RXpSTkVLVXdBQUFCeDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdSbWx5WlhkdmNtdHpJRU5UTnVpOHNvd0FBQTlhU1VSQlZIaWM3VjFyVEZ2bC8vK1VyZ1VtWldNcGJMYTZjTEVyd3BZeGtxTEdrakFHODhXU2JtdW1HVWxsdmxtQUpjdE1SdHlidmxIckxYaUpVZWtNSVp1WVNDTDVnUytFdUxJWEdFR2pxQ3NsbENFVzZ4UUVDZ3pXRzdTMDUvK0MvemtwOUxUbjBnc0w2eWNoOUp6em5PZHpQajE5THVmNVBOL25DTjU5OTEzaXhSZGZSRmRYRnhMeC8yR0RnQ0FJWW1wcUNvV0ZoVWpFLzRjTmFlKzk5eDRBSUZIL0h6YWs3bkRxRHUrd095eXcyV3pFZGw5RU1wRzIzUmVRYktRRTczUThjb0ozYmZjRldLMVcvUGJiYi9ENy9VaExpLzM3RHdhREVJdkZLQzh2UjBsSlNkanhiUlZzdFZveFBEeU14eDkvSEFVRkJjak16SVJBSU9DZFh6QVloTnZ0aHQxdXgvRHdNQUNFaWQ1V3dTTWpJM2p5eVNkUlhGd01zVmdNb1ZBWWsyQ0NJSkNabVluczdHeU1qbzVpWkdRa1BvS1hsNWV4ZCs5ZTNoZEdJaGdNSWo4L0g1bVptUkNKUkl5Q3lRNU5KQkFFZ1VBZ0FLRlFpSUtDQWl3c0xJU2w0VnhvSEE0SCt2djc0WGE3dVo0YUJxRlFpT3pzYkloRUlvakZZb2pGWW9oRUl0cS84ZkZ4WExseUJVdExTeEhUaE9heFo4OGVDSVhDMkFXUGo0OERBSDc5OWRlWUJhZWxwVUVvRkxMNisrcXJyd0FBSDN6d0FhdjBZckdZdGhMa0pIaDZlaHB6YzNNQWdQbjVlVXhQVDhjc1dpQVFNSmJib2FFaG1NMW1BSURGWXNIUTBCRHZQRGtKdGxnc1lkdCt2NTlMRnJ4dy9mcjFzRzJYeThVckwwNkM2K3ZydzdiRllqRXZZaTc0N3J2dndyWWxFZ212dkRqVjBnNkhJK3Ayb2hCUDNxaDMyT0Z3b0xlM2wxVkd2YjI5c052dHZDOGtGQ01qSTlEcGRLelM2blE2bUV3bTFublRQZy83L1g2TWpZMWhjbktTL1ZYK1AvYnUzWXV5c2pMazV1WXlwdjM2NjY5eDh1UkpaR1JrUUNRU3dldjFvcU9qQXowOVBaeDVDd3NMY2VuU0pSdytmQmgrdngrcnE2c3dtVXg0NmFXWE5xV2p2Y01EQXdPOHhBSWJuWktCZ1FGZU5YaHpjek12c2NCR3A2UzV1UmsvL3ZoajFIUzBnclZhTFlxTGkza1J5K1Z5MU5YVlJlMFJSY0tOR3plZzBXaDQ4YXBVS25SMWRhRzZ1anBxT3RwS3krVnlRYTFXbzZTa0JMZHYzOGFGQ3hlb1k1OTg4Z24xK2ZMbHk5VG5MNzc0QXBXVmxYamlpU2ZnZERxeHRyYkcrYUo5UGgvMGVqM09uRGtEdlY2UFc3ZHVVY2VPSERsQ2ZSNGRIYVUrdi9EQ0M3aDI3UnJVYWpXY1RpZFdWMWVqY3RBS0pnZ0NLeXNyeU16TWhFNm53K3pzTE8zSm9mdDFPaDBlUEhpQXBhVWxkdXFpOEJZVkZhR3ZyNDhWYjE5Zkh5ZmVxTTJTeitkajNRVEVzNGxLSkMrbmpzZldKb3B0a3hVcnRqWlJiSnNzT25BU1hGdGJHM1U3VVhqcnJiZWlibk1CSjhGWldWa29LeXNEQUJRVUZDQXJLNHMzTVJjb0ZBcnFybFpYVjBPaFVQRE9pNU5nbjgrSHc0Y1BReXFWNHRsbm40WFA1K05OVElJZ21IMEFuOCtIVjE1NUJVcWxFcSsrK2lvcjNrQWdRTHVmODRqSDJ0b2FqaDgvanZYMWRhNm4wc0xqOFNBakk0TXhIVUVRK1BUVFQxbmxTUkFFSGp4NFFIdHNXOGUwUkNJUjdIWTc5dXpaRS9HT2NFVWdFRUFnRU1EZmYvOE5rVWdVZG54YkJSODVjZ1Jtc3hrQ2dRRDUrZmtSaDJYWUloQUk0UDc5KzVpYW1vTEQ0Y0N4WThmQzBteXI0S2VlZWdvQ2dRQldxeFZ6YzNOSVMwdUxlZFF5R0F4aTE2NWRLQzh2UjFGUlVWaWFsSHU0MDVFU3ZOUHh5QWxPdVlmSlJNbzlmRmpkdzNpQnEzdklCRGJ1NGJZSzN1b2V4dEt0SkVIMnlXTnlEOG55RUc4d3VZY2ZmdmdoYTNjeHJ1NmgzVzVIZjM5L1FveXphRTZmeVdSQ1EwTURaK01zTHU3aDh2SXllbnQ3c2J5OHpJazhWa3hOVFVHbjA4Rm1zOFVsUDA0Tm45L3ZSMzkvZjl3OEpMWnd1OTFvYkd6azVDRkZBcStXZm5oNG1ES29rNG1XbGhhMHRyYkdsQWZ2cnMzazVDUUdCZ2FTWW9pSG9xZW5CMWV2WGsyT0liNFZEb2NESnBNcDZlWGFZckdnc2JHUlY3bU91ZlBxOFhnd01EQ1E5SEk5TnplSHExZXZjaTdYdkRzZVVxa1VXcTBXNmVucENBYURjRHFkOEhxOWZMTmpEYVZTaVJzM2JrQWlrZkRpNVhTSHhXSXhhbXBxQUFBTEN3c1lHaHJDN093czV1Zm5FeXBXSXBIQVlEQUFBQ1ltSm5EOStuWGV2SndFbnpwMUNqS1pEQlVWRlFDQXNiR3hwSlRmano3NkNGVlZWV2hxYWdJQWRIUjA4RzZYV1F1dXFhbkI3dDI3NGZWNlVWcGFpdXpzYkFBYlR6eUpoTUZnZ0VLaGdOZnJSWDE5UFdReUdRREFhRFR5eW8rVjRKcWFHc2hrTXNyaWNMbGNPSDc4T0lDTkNXcDhwMGN3d1dBd29LcXFhaFB2RzIrOEFXRGppKzd1N3VhY0p5dkJNcGtzckt4a1pXVlIweUxHeHNZNEU3TkJWVlZWR0s5Q29hQ21SWFIwZEhET2s1Vmd1b3JCNS9PaG9xSUNZckU0WVoyUFNMeFhybHlCUkNMaE5jRTFwdWZoMWRWVlhMeDRFV2xwYVJHbkp6Q0JqWHRJZDg3ZzRHQlUzcmk1aDF1SjUrZm5ZOG1DdFh2SWhUZmxIb1lnNVI0bUV5bjNNQWw0NUt5V2xPQ2Rqa2RPY01vOVRDWlM3bUhLUGVTR2hMbUg1TEJPckFHWFhOMURjbGlIcmdkRmdzazk1Q3pZYnJmRGJEYkQ3L2Vqckt3c3RwbXROTzVoSkpoTUpyUzJ0c0x0ZHFPcHFRbGFyVFppMm1qdUlXdkJmcjhmWnJONTAvaXoyV3pHOVBRMG5uLytlZG9uRXpaZ2lqMTB1Vnd3R28yYnhwK05SaU9HaG9idyt1dXYwMDVoanRrOUpFTno2QWJieVdDdVJFU3AyV3cyTkRjMzB3NjJXeXdXNkhRNnpvT0lyTzV3Ym00dXpwOC9qNVdWRlhSMmRtNDZWbGRYaDMzNzltRjVlVGt1ODZkRFVWeGNqSzZ1THRoc3RyQ2xxcnE2dW5EbzBDSE92S3dFKy8xK0xDNHVVcUcwb1ppWW1JaGFpY1FDa3ZmdTNidGh4d1lHQm5oVm1weTZOblNEN2t4eFF2RUEzWm8rZklzUUo4RjA0MGozNzkvblJjd0ZkRjQwMzdGd1RvTHBoa1VYRnhkNUVYTUIzY2hrVWdRN25jNndmVDZmTCtHbStILy8vUmUyeitWeThUTEZHU3V0L3Y1K1JzUHNtMisrQWJEUjg0cFhMRk5EUXdQamVseG56NTRGc0JGSysvbm5uN1BLbC9FT2E3VmFWbUh2WXJFNGF1K0hLMjdldk1rcTdGMGlrZURtelp1czgyVVU3SEs1cUc4eUdzNmVQY3Q3M2dVZGZENGYydHZiR2RPMXQ3ZHphb2NaQlJNRUFhRlFTQm5oZEtpcHFZRlFLT1JsbTBUanpjdkxvNHh3T2hnTUJ1VGw1WEhpWlZWcCtmMSt5R1F5MmlEcTR1Sml5R1N5aEZSY2ZyOGZWVlZWdEVIVUdvMEdWVlZWbkhsWjE5SmVyeGRxdFJwU3FaVGFKNVZLb1ZhckV6cmR3ZXYxUXEvWFE2bFVVdnVVU2lYMGVqMHZYazdOMHNyS0NqUWFEYlhtalVhandjcktDbWZTVUxENU9hNnNyS0N0clEwU2lRUVNpUVJ0YlcyTXZIRnpEME1yc1hoVVVtemR3OUJLakttU2lxdDdTQkJFM0NvbnJ1NGhPYThrV3FCbnlqM2NnbDBFUWNRMGNNWVdXM2tJZ2tpS2U3aVZWMkMxV29uMDlQU1l4TENCMSt0RlptWW10YjIydG9idDRFMUxCaW1BVGFRQWtpS1dqdmVSODVaU2duYzZVdTVoTXBGeUQxUHVJVGVrWWcvWnhCNTJkWFhGVE1vMm4xRDM4TlNwVTd6akRFUC95SHppc25KcElzQm01ZEo0NXJudGdwT051SVRUSmlyY3RxV2xKYWJqZEdBVXZOVUVwME5vdXhjdnRMYTJNZ1pobVV3bXpxS2pDcmJiN2F3OUhDNXBtV0F5bVZpdmIya3ltVGdGZTBSc2xyYmVOVGExcnRsc2hrZ2tRbjUrUHVzTDJJcXRkNDJOZFdNMEdwR1ZsWVdUSjA4eXBvMTRoL25HSThVYXg4UTNYSmJ0ZVJFRlYxWlc4aUxtZXg2SmE5ZXVKZlM4aUQ5cHVWeU9tcG9hM0w1OUc4RG1WVXEzZ2x6TmxBem9pbVZndnJxNkdtbHBhZERyOVFBMnIxSzZGZVJxcG1SQUZ4dmVpSUs5WGk4VlovakxMNzh3aHVsVVZGVEVMSmJrSmVNTWpVWWpJMjlUVXhOcnNRQkRYNXFNTTR3MHFFMml1TGdZcGFXbGNYTVB5VGhEcGhXTU5Sb042dXZyT2ZHeXNrdlZhblhVTkdxMU9xNVdLY2xML3F3alFhL1hjK1psMWROaThuRmk5WmVTeVp2cVMwZXJqYm1BYlQ2a1Q3WDFsUXA4UWVZVHlhc0tFOHczYUpKdlBoNlBCd1JCWUdabUppNjhNek16cWRqRFVEeDY3bUVzRnh3clVyR0hTVUNxV2RycFNBbmU2ZGl4N3VGenp6MUhXMHMvRk83aC92MzdVVkJRZ01jZWV5eG05OURsY3NGdXQyTndjQkFDZ1NEc25USGI3aDRlUEhnUXhjWEZjVFBUTWpJeUlKRkljT2ZPSGZ6KysrOFBsMkRTUFNUZnR4UXY5M0RYcmwwb0tpckNuVHQzd3RJd0ZocTYyYXB1dHh0bXM1bWFDUjhwSFJPRVFpRWtFZ250ZXcvWDF0YkMzbXU0dExTRTl2WjJuRDkvbmpaZDZQbjc5dTNqSG9vM09UbUpzYkV4bkRsekJzREdXTFhkYnFjTm9lbnQ3WVZDb2NDaFE0ZFloK1ZGaWozczd1NUdSMGNIOVlXYVRDYmN1blZyMHlNa21mYkNoUXZRYXJYUWFyVlVXRjR3R0VSNmVqcDd3ZFBUMHpDYnpmQjRQSnYyUjdOVC9INC9yRllySmljblVWWld4bm93UHRUcEd4b2FndEZvREFzSWkyYW51TjF1ZlBubGwranU3c2FsUzVkdzRzUUpLays2NGhIMkZUZ2NEZ3dQRDRlSlpRdS8zdytiemNaNUpTU0x4WUwzMzMrZk52cU5EZHh1TjNwNmVoalBEeE1zbDh0amprdzVjZUlFTmZPVkxWUXFGZDU4ODgyWWVBMEdBN1dpV2lTRUNmYjVmUGpwcDU4QWJLeUJ4L2JDcFZJcDZ1cnFBQURmZi84OTV3ZjZ0YlUxZlBiWlp3Q0Fqei8rbVBIQ1NTaVZTc3IzZXVlZGR4aDVhV3RwTXJ3dUp5ZUg5Y3VjenAwN1I1VVp2a3RPL2Zubm53Q0FZOGVPb2Erdmo5VTVuWjJkMUNzSDJmaGFVWnVsd2NGQjFrR05pNHVMaksvZ1l3dUR3Y0NKOSsyMzMyYWRkOVJteVc2M3crMTJRNkZRSUM4dkQ1Y3ZYOGJDd2dJMTlWY3FsY0ptczhIaGNHQnljakp1U3o2YVRDYk16czVDcTlYaTZOR2pHQjBkeGNURUJKeE9KeVFTQ1pSS0pVWkdSakF5TW9MLy9lOS9qQkZzb2FBVkxKZkxLWnZENFhCUTM3WkVJdGxVcGgwT0IyMzhnVnd1NXlTUWhFcWxvcG8raThWQ3Ric3ltV3hUbWI1Nzl5NnQ0NkJTcVJnNWFBWFgxdGJpMjIrL0Radlk1WFE2YVFNdVF5R1ZTbEZiVzh0cmdiNldsaFkwTkRSZ1ltSmkwLzZabVJuR1lWeWxVb21XbGhiR2VHYmFNdXp4ZUtEUmFLaFZEZGtnT3pzYmxaV1ZPSGZ1SE84MmZIMTlIVzF0YldocWFtTDl1bDJaVEliWFhuc05uWjJkck43eUZmRkZqeTZYQzZXbHBWQ3BWRmhhV3NLLy8vNUxWZm56OC9QSXk4c0RBT3pldlJ1NXVibkl5Y21CeCtPSktaNllJQWo0ZkQ3VTE5ZWpzYkVSZi96eEI0YUhoeWtyZEh4OEhFOC8vVFFBWVAvKy9WQXFsVkFvRkp4NEkxWmFwR2l5ckJ3NGNBRDM3dDJEWEM3SGdRTUhBR3gwUVhOeWNyQyt2aDYzVlI1Q2VjbnczSjZlSHFoVUtwU1hsd1BZNk9JKzg4d3pBTGlIeG5ONlBQejU1NS9EOWgwOGVKQVRJUi9RemQ5Z0UvRktoOVNZRmx2STVYS3FQTVVDcmxGdUtwVUtwMCtmWmt3WERBWnA5M01TTEJhTFVWSlNncU5IanlJakl3TmVyemZtT1IwdWw0c3g5bEFpa2VEMDZkTjQrZVdYSVpWS0dYbmo1aDVldkhnUlhxOFhIbytIZDlNVENwRkloSHYzN2lFbkp5ZHFwLytISDM2QTErdUZ5K1ZpcktUaTZoN0d1Zzd0VnBEdUlVRVFLQ3dzak9nZS92UFBQNnp5Q3dRQ1dGNWV4bDkvL1lYNStYbGE5M0RielRTYnpRYXIxWXIxOWZXNHVvY2xKU1VwOXhCNEJKdWxsT0NkamtkTzhQOEJHQ1EwaG5GMUR4VUFBQUFBU1VWT1JLNUNZSUk9KTsKLSAgICAgIHdpZHRoOiAyN3B4OwotICAgICAgaGVpZ2h0OiAzMHB4OwotICAgIH0KLSAgICA6aG9zdC5hY3RpdmUgewotICAgICAgY3Vyc29yOiBhdXRvOwotICAgIH0KLSAgICA8L3N0eWxlPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1iLW1vdXNlLW1vZGUtc2VsZWN0b3IiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLQotICAgICAgLXdlYmtpdC11c2VyLWRyYWc6IGVsZW1lbnQ7Ci0gICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwotCi0gICAgICBiYWNrZ3JvdW5kOiAjREREOwotICAgICAgYm9yZGVyOiAxcHggc29saWQgI0JCQjsKLSAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKLSAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMik7Ci0gICAgICBsZWZ0OiBjYWxjKDEwMCUgLSAxMjBweCk7Ci0gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgICB0b3A6IDEwMHB4OwotICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7Ci0gICAgICB3aWR0aDogMjlweDsKLSAgICAgIHotaW5kZXg6IDIwOwotICAgIH0KLQotICAgIC5kcmFnLWhhbmRsZSB7Ci0gICAgICBiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEd0FBQUNoQ0FZQUFBQ2JCTnp2QUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFMRWdBQUN4SUIwdDErL0FBQUFCVjBSVmgwUTNKbFlYUnBiMjRnVkdsdFpRQTNMekUyTHpFelJORUtVd0FBQUJ4MFJWaDBVMjltZEhkaGNtVUFRV1J2WW1VZ1JtbHlaWGR2Y210eklFTlROdWk4c293QUFBOWFTVVJCVkhpYzdWMXJURnZsLy8rVXJnVW1aV01wYkxhNmNMRXJ3cFl4a3FMR2tqQUc4OFdTYm11bUdVbGx2bG1BSmN0TVJ0eWJ2bEhyTFhpSlVla01JWnVZU0NMNWdTK0V1TElYR0VHanFDc2xsQ0VXNnhRRUNneldHN1MwNS8rQy96a3A5TFRuMGdzTDZ5Y2g5Snp6bk9kelBqMTlMdWY1UE4vbkNONTk5MTNpeFJkZlJGZFhGeEx4LzJHRGdDQUlZbXBxQ29XRmhVakUvNGNOYWUrOTl4NEFJRkgvSHphazduRHFEdSt3T3l5dzJXekVkbDlFTXBHMjNSZVFiS1FFNzNROGNvSjNiZmNGV0sxVy9QYmJiL0Q3L1VoTGkvMzdEd2FERUl2RktDOHZSMGxKU2RqeGJSVnN0Vm94UER5TXh4OS9IQVVGQmNqTXpJUkFJT0NkWHpBWWhOdnRodDF1eC9Ed01BQ0VpZDVXd1NNakkzanl5U2RSWEZ3TXNWZ01vVkFZazJDQ0lKQ1ptWW5zN0d5TWpvNWlaR1FrUG9LWGw1ZXhkKzllM2hkR0loZ01JajgvSDVtWm1SQ0pSSXlDeVE1TkpCQUVnVUFnQUtGUWlJS0NBaXdzTElTbDRWeG9IQTRIK3Z2NzRYYTd1WjRhQnFGUWlPenNiSWhFSW9qRllvakZZb2hFSXRxLzhmRnhYTGx5QlV0TFN4SFRoT2F4Wjg4ZUNJWEMyQVdQajQ4REFINzk5ZGVZQmFlbHBVRW9GTEw2KytxcnJ3QUFIM3p3QWF2MFlyR1l0aExrSkhoNmVocHpjM01BZ1BuNWVVeFBUOGNzV2lBUU1KYmJvYUVobU0xbUFJREZZc0hRMEJEdlBEa0p0bGdzWWR0K3Y1OUxGcnh3L2ZyMXNHMlh5OFVyTDA2QzYrdnJ3N2JGWWpFdllpNzQ3cnZ2d3JZbEVnbXZ2RGpWMGc2SEkrcDJvaEJQM3FoMzJPRndvTGUzbDFWR3ZiMjlzTnZ0dkM4a0ZDTWpJOURwZEt6UzZuUTZtRXdtMW5uVFBnLzcvWDZNalkxaGNuS1MvVlgrUC9idTNZdXlzakxrNXVZeXB2MzY2Njl4OHVSSlpHUmtRQ1FTd2V2MW9xT2pBejA5UFp4NUN3c0xjZW5TSlJ3K2ZCaCt2eCtycTZzd21VeDQ2YVdYTnFXanZjTURBd084eEFJYm5aS0JnUUZlTlhoemN6TXZzY0JHcDZTNXVSay8vdmhqMUhTMGdyVmFMWXFMaTNrUnkrVnkxTlhWUmUwUlJjS05HemVnMFdoNDhhcFVLblIxZGFHNnVqcHFPdHBLeStWeVFhMVdvNlNrQkxkdjM4YUZDeGVvWTU5ODhnbjErZkxseTlUbkw3NzRBcFdWbFhqaWlTZmdkRHF4dHJiRythSjlQaC8wZWozT25Ea0R2VjZQVzdkdVVjZU9IRGxDZlI0ZEhhVSt2L0RDQzdoMjdSclVhaldjVGlkV1YxZWpjdEFLSmdnQ0t5c3J5TXpNaEU2bncrenNMTzNKb2Z0MU9oMGVQSGlBcGFVbGR1cWk4QllWRmFHdnI0OFZiMTlmSHlmZXFNMlN6K2RqM1FURXM0bEtKQytuanNmV0pvcHRreFVydGpaUmJKc3NPbkFTWEZ0YkczVTdVWGpycmJlaWJuTUJKOEZaV1Zrb0t5c0RBQlFVRkNBcks0czNNUmNvRkFycXJsWlhWME9oVVBET2k1TmduOCtIdzRjUFF5cVY0dGxubjRYUDUrTk5USUlnbUgwQW44K0hWMTU1QlVxbEVxKysraW9yM2tBZ1FMdWY4NGpIMnRvYWpoOC9qdlgxZGE2bjBzTGo4U0FqSTRNeEhVRVErUFRUVDFubFNSQUVIang0UUh0c1c4ZTBSQ0lSN0hZNzl1elpFL0dPY0VVZ0VFQWdFTURmZi84TmtVZ1VkbnhiQlI4NWNnUm1zeGtDZ1FENStma1JoMlhZSWhBSTRQNzkrNWlhbW9MRDRjQ3hZOGZDMG15cjRLZWVlZ29DZ1FCV3F4VnpjM05JUzB1TGVkUXlHQXhpMTY1ZEtDOHZSMUZSVVZpYWxIdTQwNUVTdk5QeHlBbE91WWZKUk1vOWZGamR3M2lCcTN2SUJEYnU0YllLM3VvZXh0S3RKRUgyeVdOeUQ4bnlFRzh3dVljZmZ2Z2hhM2N4cnU2aDNXNUhmMzkvUW95emFFNmZ5V1JDUTBNRForTXNMdTdoOHZJeWVudDdzYnk4eklrOFZreE5UVUduMDhGbXM4VWxQMDRObjkvdlIzOS9mOXc4Skxad3U5MW9iR3prNUNGRkFxK1dmbmg0bURLb2s0bVdsaGEwdHJiR2xBZnZyczNrNUNRR0JnYVNZb2lIb3FlbkIxZXZYazJPSWI0VkRvY0RKcE1wNmVYYVlyR2dzYkdSVjdtT3VmUHE4WGd3TURDUTlISTlOemVIcTFldmNpN1h2RHNlVXFrVVdxMFc2ZW5wQ0FhRGNEcWQ4SHE5ZkxOakRhVlNpUnMzYmtBaWtmRGk1WFNIeFdJeGFtcHFBQUFMQ3dzWUdockM3T3dzNXVmbkV5cFdJcEhBWURBQUFDWW1KbkQ5K25YZXZKd0VuenAxQ2pLWkRCVVZGUUNBc2JHeHBKVGZqejc2Q0ZWVlZXaHFhZ0lBZEhSMDhHNlhXUXV1cWFuQjd0Mjc0ZlY2VVZwYWl1enNiQUFiVHp5SmhNRmdnRUtoZ05mclJYMTlQV1F5R1FEQWFEVHl5bytWNEpxYUdzaGtNc3JpY0xsY09INzhPSUNOQ1dwOHAwY3d3V0F3b0txcWFoUHZHMis4QVdEamkrN3U3dWFjSnl2Qk1wa3NyS3hrWldWUjB5TEd4c1k0RTdOQlZWVlZHSzlDb2FDbVJYUjBkSERPazVWZ3VvckI1L09ob3FJQ1lyRTRZWjJQU0x4WHJseUJSQ0xoTmNFMXB1ZmgxZFZWWEx4NEVXbHBhUkduSnpDQmpYdElkODdnNEdCVTNyaTVoMXVKNStmblk4bUN0WHZJaFRmbEhvWWc1UjRtRXluM01BbDQ1S3lXbE9DZGprZE9jTW85VENaUzdtSEtQZVNHaExtSDVMQk9yQUdYWE4xRGNsaUhyZ2RGZ3NrOTVDellicmZEYkRiRDcvZWpyS3dzdHBtdE5PNWhKSmhNSnJTMnRzTHRkcU9wcVFsYXJUWmkybWp1SVd2QmZyOGZack41MC9pejJXekc5UFEwbm4vK2Vkb25FelpnaWoxMHVWd3dHbzJieHArTlJpT0dob2J3K3V1djAwNWhqdGs5SkVOejZBYmJ5V0N1UkVTcDJXdzJORGMzMHc2Mld5d1c2SFE2em9PSXJPNXdibTR1enA4L2o1V1ZGWFIyZG00NlZsZFhoMzM3OW1GNWVUa3U4NmREVVZ4Y2pLNnVMdGhzdHJDbHFycTZ1bkRvMENIT3ZLd0UrLzErTEM0dVVxRzBvWmlZbUloYWljUUNrdmZ1M2J0aHh3WUdCbmhWbXB5Nk5uU0Q3a3h4UXZFQTNabytmSXNRSjhGMDQwajM3OS9uUmN3RmRGNDAzN0Z3VG9McGhrVVhGeGQ1RVhNQjNjaGtVZ1E3bmM2d2ZUNmZMK0dtK0gvLy9SZTJ6K1Z5OFRMRkdTdXQvdjUrUnNQc20yKytBYkRSODRwWExGTkRRd1BqZWx4bno1NEZzQkZLKy9ubm43UEtsL0VPYTdWYVZtSHZZckU0YXUrSEsyN2V2TWtxN0YwaWtlRG16WnVzODJVVTdISzVxRzh5R3M2ZVBjdDczZ1VkZkQ0ZjJ0dmJHZE8xdDdkemFvY1pCUk1FQWFGUVNCbmhkS2lwcVlGUUtPUmxtMFRqemN2TG80eHdPaGdNQnVUbDVYSGlaVlZwK2YxK3lHUXkyaURxNHVKaXlHU3loRlJjZnI4ZlZWVlZ0RUhVR28wR1ZWVlZuSGxaMTlKZXJ4ZHF0UnBTcVpUYUo1VktvVmFyRXpyZHdldjFRcS9YUTZsVVV2dVVTaVgwZWowdlhrN04wc3JLQ2pRYURiWG1qVWFqd2NyS0NtZlNVTEQ1T2E2c3JLQ3RyUTBTaVFRU2lRUnRiVzJNdkhGekQwTXJzWGhVVW16ZHc5QktqS21TaXF0N1NCQkUzQ29ucnU0aE9hOGtXcUJueWozY2dsMEVRY1EwY01ZV1cza0lna2lLZTdpVlYyQzFXb24wOVBTWXhMQ0IxK3RGWm1ZbXRiMjJ0b2J0NEUxTEJpbUFUYVFBa2lLV2p2ZVI4NVpTZ25jNlV1NWhNcEZ5RDFQdUlUZWtZZy9aeEI1MmRYWEZUTW8ybjFEMzhOU3BVN3pqREVQL3lIemlzbkpwSXNCbTVkSjQ1cm50Z3BPTnVJVFRKaXJjdHFXbEphYmpkR0FVdk5VRXAwTm91eGN2dExhMk1nWmhtVXdtenFLakNyYmI3YXc5SEM1cG1XQXltVml2YjJreW1UZ0ZlMFJzbHJiZU5UYTFydGxzaGtna1FuNStQdXNMMklxdGQ0Mk5kV00wR3BHVmxZV1RKMDh5cG8xNGgvbkdJOFVheDhRM1hKYnRlUkVGVjFaVzhpTG1leDZKYTlldUpmUzhpRDlwdVZ5T21wb2EzTDU5RzhEbVZVcTNnbHpObEF6b2ltVmd2cnE2R21scGFkRHI5UUEycjFLNkZlUnFwbVJBRnh2ZWlJSzlYaThWWi9qTEw3OHdodWxVVkZURUxKYmtKZU1NalVZakkyOVRVeE5yc1FCRFg1cU1NNHcwcUUyaXVMZ1lwYVdsY1hNUHlUaERwaFdNTlJvTjZ1dnJPZkd5c2t2VmFuWFVOR3ExT3E1V0tjbEwvcXdqUWEvWGMrWmwxZE5pOG5GaTlaZVN5WnZxUzBlcmpibUFiVDZrVDdYMWxRcDhRZVlUeWFzS0U4dzNhSkp2UGg2UEJ3UkJZR1ptSmk2OE16TXpxZGpEVUR4NjdtRXNGeHdyVXJHSFNVQ3FXZHJwU0FuZTZkaXg3dUZ6enoxSFcwcy9GTzdoL3YzN1VWQlFnTWNlZXl4bTk5RGxjc0Z1dDJOd2NCQUNnU0RzblRIYjdoNGVQSGdReGNYRmNUUFRNakl5SUpGSWNPZk9IZnorKys4UGwyRFNQU1RmdHhRdjkzRFhybDBvS2lyQ25UdDN3dEl3RmhxNjJhcHV0eHRtczVtYUNSOHBIUk9FUWlFa0VnbnRldy9YMXRiQzNtdTR0TFNFOXZaMm5EOS9ualpkNlBuNzl1M2pIb28zT1RtSnNiRXhuRGx6QnNER1dMWGRicWNOb2VudDdZVkNvY0NoUTRkWWgrVkZpajNzN3U1R1IwY0g5WVdhVENiY3VuVnIweU1rbWZiQ2hRdlFhclhRYXJWVVdGNHdHRVI2ZWpwN3dkUFQwekNiemZCNFBKdjJSN05UL0g0L3JGWXJKaWNuVVZaV3hub3dQdFRwR3hvYWd0Rm9EQXNJaTJhbnVOMXVmUG5sbCtqdTdzYWxTNWR3NHNRSktrKzY0aEgyRlRnY0Rnd1BENGVKWlF1LzN3K2J6Y1o1SlNTTHhZTDMzMytmTnZxTkRkeHVOM3A2ZWhqUER4TXNsOHRqamt3NWNlSUVOZk9WTFZRcUZkNTg4ODJZZUEwR0E3V2lXaVNFQ2ZiNWZQanBwNThBYkt5QngvYkNwVklwNnVycUFBRGZmLzg5NXdmNnRiVTFmUGJaWndDQWp6LyttUEhDU1NpVlNzcjNldWVkZHhoNWFXdHBNcnd1SnllSDljdWN6cDA3UjVVWnZrdE8vZm5ubndDQVk4ZU9vYSt2ajlVNW5aMmQxQ3NIMmZoYVVadWx3Y0ZCMWtHTmk0dUxqSy9nWXd1RHdjQ0o5KzIzMzJhZGQ5Um15VzYzdysxMlE2RlFJQzh2RDVjdlg4YkN3Z0kxOVZjcWxjSm1zOEhoY0dCeWNqSnVTejZhVENiTXpzNUNxOVhpNk5HakdCMGR4Y1RFQkp4T0p5UVNDWlJLSlVaR1JqQXlNb0wvL2U5L2pCRnNvYUFWTEpmTEtadkQ0WEJRMzdaRUl0bFVwaDBPQjIzOGdWd3U1eVNRaEVxbG9wbytpOFZDdGJzeW1XeFRtYjU3OXk2dDQ2QlNxUmc1YUFYWDF0YmkyMisvRFp2WTVYUTZhUU11UXlHVlNsRmJXOHRyZ2I2V2xoWTBORFJnWW1KaTAvNlptUm5HWVZ5bFVvbVdsaGJHZUdiYU11enhlS0RSYUtoVkRka2dPenNibFpXVk9IZnVITzgyZkgxOUhXMXRiV2hxYW1MOXVsMlpUSWJYWG5zTm5aMmRyTjd5RmZGRmp5NlhDNldscFZDcFZGaGFXc0svLy81TFZmbno4L1BJeThzREFPemV2UnU1dWJuSXljbUJ4K09KS1o2WUlBajRmRDdVMTllanNiRVJmL3p4QjRhSGh5a3JkSHg4SEU4Ly9UUUFZUC8rL1ZBcWxWQW9GSng0STFaYXBHaXlyQnc0Y0FEMzd0MkRYQzdIZ1FNSEFHeDBRWE55Y3JDK3ZoNjNWUjVDZWNudzNKNmVIcWhVS3BTWGx3UFk2T0krODh3ekFMaUh4bk42UFB6NTU1L0Q5aDA4ZUpBVElSL1F6ZDlnRS9GS2g5U1lGbHZJNVhLcVBNVUNybEZ1S3BVS3AwK2Zaa3dYREFacDkzTVNMQmFMVVZKU2dxTkhqeUlqSXdOZXJ6Zm1PUjB1bDRzeDlsQWlrZUQwNmRONCtlV1hJWlZLR1huajVoNWV2SGdSWHE4WEhvK0hkOU1UQ3BGSWhIdjM3aUVuSnlkcXAvK0hIMzZBMSt1RnkrVmlyS1RpNmg3R3VnN3RWcER1SVVFUUtDd3NqT2dlL3ZQUFA2enlDd1FDV0Y1ZXhsOS8vWVg1K1hsYTkzRGJ6VFNielFhcjFZcjE5Zlc0dW9jbEpTVXA5eEI0Qkp1bGxPQ2Rqa2RPOFA4QkdDUTBobkYxRHhVQUFBQUFTVVZPUks1Q1lJST0pIDJweCAzcHggbm8tcmVwZWF0OwotICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLSAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkNCQ0JDOwotICAgICAgY3Vyc29yOiBtb3ZlOwotICAgICAgZGlzcGxheTogYmxvY2s7Ci0gICAgICBoZWlnaHQ6IDEzcHg7Ci0gICAgICB3aWR0aDogMjdweDsKLSAgICB9Ci0KLSAgICAudG9vbC1idXR0b24gewotICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsKLSAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Ci0gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JDQkNCQzsKLSAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRjFGMUYxOwotICAgICAgY3Vyc29yOiBwb2ludGVyOwotICAgIH0KLQotICAgIC5idXR0b25zID4gLnRvb2wtYnV0dG9uOmxhc3QtY2hpbGQgewotICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKLSAgICB9Ci0KLSAgICA8L3N0eWxlPgotICAgIDxkaXYgY2xhc3M9ImRyYWctaGFuZGxlIj48L2Rpdj4KLSAgICA8ZGl2IGNsYXNzPSJidXR0b25zIj4KLSAgICA8L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktZS1jaHJvbWUtY2MtZGlzcGxheS1pdGVtLWxpc3QtaXRlbSI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgICA6aG9zdCB7Ci0gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNTU1OwotICAgICAgICBkaXNwbGF5OiBibG9jazsKLSAgICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgICAgICBwYWRkaW5nOiAzcHggNXB4OwotICAgICAgfQotCi0gICAgICA6aG9zdCg6aG92ZXIpIHsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDsKLSAgICAgICAgY3Vyc29yOiBwb2ludGVyOwotICAgICAgfQotCi0gICAgICAuaGVhZGVyIHsKLSAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgICAgIG1hcmdpbjogMnB4IDA7Ci0gICAgICB9Ci0KLSAgICAgIC5oZWFkZXIgPiAuZXh0cmEgewotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzc3OwotICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7Ci0gICAgICAgIGNvbG9yOiB3aGl0ZTsKLSAgICAgICAgbWFyZ2luOiAwIDZweDsKLSAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotICAgICAgICBwYWRkaW5nOiAycHggNHB4OwotICAgICAgfQotCi0gICAgICAucmF3LWRldGFpbHMgewotICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Ci0gICAgICB9Ci0KLSAgICAgIC5kZXRhaWxzID4gZGwgewotICAgICAgICBtYXJnaW46IDA7Ci0gICAgICB9Ci0KLSAgICAgIDpob3N0KDpub3QoW3NlbGVjdGVkXSkpIC5kZXRhaWxzIHsKLSAgICAgICAgZGlzcGxheTogbm9uZTsKLSAgICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+Ci0gICAgICB7e25hbWV9fQotICAgICAgPHRlbXBsYXRlIGlmPSJ7e19jb21wdXRlSWYocmljaERldGFpbHMpfX0iIGlzPSJkb20taWYiPgotICAgICAgICA8YSBjbGFzcz0iZXh0cmEiIGRvd25sb2FkPSJkcmF3aW5nLnNrcCIgaHJlZiQ9Int7X2NvbXB1dGVIcmVmKHJpY2hEZXRhaWxzKX19IiBvbi1jbGljaz0ie3tzdG9wUHJvcGFnYXRpb259fSI+U0tQPC9hPgotICAgICAgPC90ZW1wbGF0ZT4KLSAgICA8L2Rpdj4KLSAgICA8ZGl2IGNsYXNzPSJkZXRhaWxzIj4KLSAgICAgIDx0ZW1wbGF0ZSBpZj0ie3tyYXdEZXRhaWxzfX0iPgotICAgICAgICA8ZGl2IGNsYXNzPSJyYXctZGV0YWlscyI+e3tyYXdEZXRhaWxzfX08L2Rpdj4KLSAgICAgIDwvdGVtcGxhdGU+Ci0gICAgICA8dGVtcGxhdGUgYmluZD0ie3tyaWNoRGV0YWlsc319IiBpZj0ie3tyaWNoRGV0YWlsc319IiBpcz0iZG9tLWlmIj4KLSAgICAgICAgPGRsPgotICAgICAgICAgIDx0ZW1wbGF0ZSBiaW5kPSJ7e2N1bGxSZWN0fX0iIGlmPSJ7e2N1bGxSZWN0fX0iIGlzPSJkb20taWYiPgotICAgICAgICAgICAgPGR0PkN1bGwgcmVjdDwvZHQ+Ci0gICAgICAgICAgICA8ZGQ+e3t4fX0se3t5fX0ge3t3aWR0aH19w5d7e2hlaWdodH19PC9kZD4KLSAgICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICAgIDx0ZW1wbGF0ZSBiaW5kPSJ7e3Zpc3VhbFJlY3R9fSIgaWY9Int7dmlzdWFsUmVjdH19IiBpcz0iZG9tLWlmIj4KLSAgICAgICAgICAgIDxkdD5WaXN1YWwgcmVjdDwvZHQ+Ci0gICAgICAgICAgICA8ZGQ+e3t4fX0se3t5fX0ge3t3aWR0aH19w5d7e2hlaWdodH19PC9kZD4KLSAgICAgICAgICA8L3RlbXBsYXRlPgotICAgICAgICA8L2RsPgotICAgICAgPC90ZW1wbGF0ZT4KLSAgICA8L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLQotPC9kb20tbW9kdWxlPjx0ZW1wbGF0ZSBpZD0idHItdWktZS1jaHJvbWUtY2MtZGlzcGxheS1pdGVtLWRlYnVnZ2VyLXRlbXBsYXRlIj4KLSAgPGxlZnQtcGFuZWw+Ci0gICAgPGRpc3BsYXktaXRlbS1pbmZvPgotICAgICAgPGhlYWRlcj4KLSAgICAgICAgPHNwYW4gY2xhc3M9InRpdGxlIj5EaXNwbGF5IEl0ZW0gTGlzdDwvc3Bhbj4KLSAgICAgICAgPHNwYW4gY2xhc3M9InNpemUiPjwvc3Bhbj4KLSAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0Ij4KLSAgICAgICAgICA8aW5wdXQgY2xhc3M9ImRsZmlsZW5hbWUiIHR5cGU9InRleHQiIHZhbHVlPSJkaXNwbGF5aXRlbWxpc3QuanNvbiIvPgotICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRsZXhwb3J0Ij5FeHBvcnQgZGlzcGxheSBpdGVtIGxpc3Q8L2J1dHRvbj4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImV4cG9ydCI+Ci0gICAgICAgICAgPGlucHV0IGNsYXNzPSJza3BmaWxlbmFtZSIgdHlwZT0idGV4dCIgdmFsdWU9InNrcGljdHVyZS5za3AiLz4KLSAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJza3BleHBvcnQiPkV4cG9ydCBsaXN0IGFzIFNrUGljdHVyZTwvYnV0dG9uPgotICAgICAgICA8L2Rpdj4KLSAgICAgIDwvaGVhZGVyPgotICAgIDwvZGlzcGxheS1pdGVtLWluZm8+Ci0gIDwvbGVmdC1wYW5lbD4KLSAgPHJpZ2h0LXBhbmVsPgotICAgIDxyYXN0ZXItYXJlYT48Y2FudmFzPjwvY2FudmFzPjwvcmFzdGVyLWFyZWE+Ci0gIDwvcmlnaHQtcGFuZWw+Ci08L3RlbXBsYXRlPjx0ZW1wbGF0ZSBpZD0icXVhZC1zdGFjay12aWV3LXRlbXBsYXRlIj4KLSAgPHN0eWxlPgotICAjY2hyb21lLWxlZnQgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQU1jQUFBQklDQVlBQUFCQzQrSExBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQllsQUFBV0pRRkpVaVR3QUFBQUIzUkpUVVVIM1FjTkZ5TW1WL1BtOVFBQUlBQkpSRUZVZU5ydHZYbXdYZGQxM3ZsYmU5LzdCZ3pFUUFJY1FBSUVRWUtqU0Fva0xWbE9XNUZrMm5MS21xeDBKMldwMGs2NTJoMTN1aXk1WFlxZHdVN3NTbmNrcFoxeVYzVTc1YXBVNGtvczI3RWx1OU5seVJYWmppaVJvbVNUSWlXWnMwaHdIc0FCSklZMzNyUFg2ai9XMnVlZWQzRHZBeURLS29HRlcwVUNlTy9lYy9mWlorMjl2N1hXdDc0bEFJdUxpN3RYVjFmL3JhcSt6Y3kyQW9nSVpzYnB2cnFmTXpORTVJUy8xL2ZWbjVzWkthVVRydFg5L3Y3blQrZm45ZS8xZTA1MlgvM3IxVEhXYTNSLzM3K21pS0NxN2MrbWpXL2ErRi9QNTd2ajYvNDViYXluK3d6WHM0bis3OTRROW5QOCtQSGRTMHRMMzFMVm1mcEdWUVU0WVNJbkdVYi9ZZlp2cG4renAvTFF1NFkyN1gzMWQ5MzNudXJrcStxYWEwOHlvdE81NW5wRzB2Mk8rcjEvWFo5ZmIyRk1Xb0Q5T2U1K3BqdS8vZStmZFAzdTgzK2oySSs4OU5KTG4xMWRYZjFiZFNDVEpublNTcHoyKy9WV1ovOG0rdytnL3pENjE2eVQyUDk3MzNCT1o1ZjRkaGJDZXZQUUhldDYzelZ0VjN5OW4xL3YvazluWjU2MlNOWTdHZDVvOWlQUFAvLzhxeFZLclFkTCtoT3kzcXFkTkVuVGp2MUpBK3Z1UnBNR3ZkN2tuOG9DcWRlZDlCMlRIdUo2dS9LazcrdnVpTk9nUUg4T1grL25wODEzLzM3Nk8vQ2tVMkVhdkR3VldQaUdzcDlubjMzV0p0M0l0RjJuZTJ4T2UyalRIdVRKTU9TMEhlMVVjRzMzNzkxSm1XUVlrekI2ZHlmcDd0eW5za3RQRzgvSmR2MlRHY0xwZkg3U2M1bTBFS1pCc1BWK3RwNFBNZTM5YndqN2VmcnBwMjI5RzV1Mk8zV1BwbE4xY0UvWFFac0VOeWJ0bk5OMnB2NHgzTjFGcHUyUy9TTzZqNmZYZ3o2bjRnUlBHbU1mUjcvZXovY1hkLzE3OThUc2ZyNFBNVTUyT3E0SHA5NUk5alBvcjdaSitHN1NUbEVudk43Z2VzZlhwQjJ0SDVsWnp5bnJPMDdUeHRiOTJhUVRZOXJ2KzNpMXY0anF2NXVtT1NFcTByOU8zL2lxRVV4Nk1QWG5xanB4cms3MzgxMm9NUW1QOTY4enlVajY4elBwK1UxYnhHODArNUdubm5yS3BrVnhUaVdVdU40cTcrOTYvWUZYcDZwdkFOTjhoRDdNbVJiRjZPNzIwMEtSOWVkOUNEYnBTRjR2NmpJSnRuUWpRZFBHT3lsSzlwMzQvSG93YUZMMFo3M0lVTmV4N1o1R2szYmtONkw5eUJOUFBHSGRZM2ZheXUzdVNQMGRxSDYydXlQMHc0WHJEV285NTdnUEVmcWY3OGU0cDRVOCswWTg2UjY3MTFwdkFVeUwzdlR2ZDlvdTIzOFEvWG40ZGo0L0NkNmQ3QmxNQzUzMjUzNFM5T25POHh2VmZ1VHh4eCszOVJKbGsvRHRwQUdjNms2aHF1U2NwKzdFa3lJbjArTFY2MFVmcHUycTA1ek4vc09ZRklmdlA4Q1Q1VkVtR1dOL2g1dzB6bS8zOCtzbDcvcjNkckxudHQ1OHJ6ZFhieVQ3a2NjZWU4ejZPMmIzSm5MTzZ6cGprNDdua3lWZzFwdTA3bXVhczliM0NhWmg0ZjV1UE1uNFNpa243Smo5UlRFSk1uUWZWSGRjazR4M1d0NWkwcUw2ZGo4LzZXUTVHY1NZQmlFbitTVHJoVC9mcVBZem1KWXhyUmNvcGF4NWVIMThPaTM4V0kydWxMSW1ZVFBOTWF2djcxNnovOTNyUlhVbU9aWFZnWjVrZVBYNytoUGVONXhKVG14M01kWGY5ekh5TTg4OHc4TEN3Z24zMElVUTB4eldTWXZoVkQ0L0xhclR6cFdCcE9sK3pxUlE5bHFqRTJEQ3RiSDJ4OU1XM1hBNDVKeHp6bUhuenAwbmpZcDlyOWpQb0g3NUdrZWtjOFNaMlpwanJIL0V6OHdNU1NtSE1ZNFlqWnAyTURubmlWR1Qvc1B2Umh4bVoyZkpPV0hteGowYWpVN0F0dlY2azQ3MjdnU2tsTWc1TTRqZHE2aXl1cm82OWJ2Nzk5Zk5wdFlGMFgzdkpLano4TU1QTXorL2dXdXZ1WWF0VzdlU2NnSUV3VEFERXdFVUFaRGtCZ3R1WU9ObENDSmdBdVovTjVRa0NjUDhhdkZ6VUg4ZnNaZ05Fb0pKTEFha2MrMlRqRU5pOTBSUWpHU0NKbTEvaHdsbWdtUkZGSXdFWW9pTnh5UHh2WVowN2dWS1V6aDgrREQzMzNjZlJaWExMcnZzQkx4ZmpibDc2cHlPL1pSUzF0aHEzMjVPMTM3azRZY2Z0dlVTT2YxVWZkY28vdXdMWCtMT3Y3aWJaMTk0RVlCZEYremtCOTU2Qys5OCs5OUFSRTY0dWU2WHF5cUR3YURkR1pxbTRRdGYvREszZitVdmVPN1FTMnV1OTQ0Zi9JSDJXcE53ZHAyVS9vVDgrVzIzYzhkWDcrSzVHTjlGRit6a2I3emxadDcxamg5Y3N3TlB3OHVUc1BVMGgxOVZlZVNSUjdqNTVsdll1bVV6SzZNQ3BxVHM5cDJBQWlSTG1DaFdCQklJaXFaRU1rVlVNQVFUSlp0UVNDQ0trREUwL2grN3R3a0twQ1NZeHJoVk1UR3lDWW9nb2hSTENHdkhvWUQweHlHS1NjSVVwQzVBVlNRbC8wQUNheGVDa0pKaGFrRENUSkVFaUtBbURNeDhYU2RBWTZsWlFqSG1ab2E4OU5MTDNQdjFyM1BWVlZlZXNESDNUK0ZUdFovdWd1aHU4djNvMzZuYWo0Z2dqenp5aVBYaHd0UmpPZjYrdExqRVAvLzRyM0hPdVJmdzVwc1BzT2VTWFFBOCtkUXozUHUxZXpsMitCQy8vSTkranZuNXVYV2pEZlcxdUxqSXIzN3kxOW04L2Z6SjEzdmxCZjc1TC80OGMzT3phM2FXYWRTUDVlVVZmdVVULzJiZDYvM3lML3h2Yk5nd3YyWTNxYnRPRjBKMk1mTjZrYTdubm51T3ZaZnVaY2ZPOHhpdEtubG9GQlhFQkhHTGM0TVRRd1ZFRGVJa3lBcWEvUGRoOXo1dmFxZ2tVdXo4YWtZR1ZBVEVIT1lZaUNTVVF0SnFrQ0RKc0pKSXZYRllOUkl6TEdXUVFxcUxFaU9ocUtTNmduemhxSjljSnBsc2lpWEJTbmZCSkY5NTdURW9KQktZWXNrd0ZVU2dXQ0tuQmttWnA1OSttcGRmZXBtZE8zZXUyVVNuK1YvcjJjL0pXQVg5Q04vSjdLZE5pRDc0NElPMm5xTTBDZmYrMDEvOVA3anM2Z1A4ZDI5L0M1ZGV0Sk50bXpZQzhPcnhCWjU0N2tWdS8rSmZjUERCZS9pWHYveFBrQ25rdkhhbG0vSFBUdlY2di9TUDI1dnMzbUIzZkt1ckkzN3BYMzZjZmRlc2Y3M0hIcmlILy8yWC8zRnIvTk9TVFpNeXpuMG4wc3g0N0xISCtKRWYrUkVXRmhkOHB6Y2xpUnR5QlZiRllsY1ROMGJmcG9XRVlpYXhFTlR0ak9Rd0J5T1o3K3IrYi96YWNZNVlJQ3ZIL2lEbUJ1cmptelFPS01sSVdrUFRocG9oa3VOMGl3V0krWXJOR2tkZVFzd3djYmhsV0VBenc4d1hhelpESmZzWU1QODRnaFh6eFNIaXA1ckIvSVk1L3N2LyswZGM5NlkzcmRtQTJ1ejBZREExRUhJcUROdjFLREFWdmsyeW42NHZPdWpIbHFkbEordnYvK3dMWDJKdXl3VmNmT2tlWGoyeXdHdEhuMEMxSG92K3VVc3UzY056enovSGY3dnRkbTU5NTlzblJrbnE2d3Rmdk9PVXIvZm5YN3lESDM3bjI5ZmNjQmRHNVp5NTdmWXZzMkhycVY3dmRtNTl4OXZYSmVxdHg2V3FEK1Q1NTUvbnlpdjNzN3k4VE1MaFNnTE1FbGtVUngrS0VOaSs3dXppMEVndElVQ2krT21Td0lwam1ZVFNBSU42dWlTRGtrQUtRZ3AvSWdPTit5YUdueElCei9yamNQY2tqMzBMVTVJNXJDc0pzaVlzYWZnakNiWEVVSXdpaXFxNGUxSjlGalZmTkNpb1lNbFBDL2VKSUZ1aXNUaU4wb0JraGxsQmNtSmxhWW5MOSsvbjBLRkQ3Tml4ZzV4emE2aFBQLzAwUzB0THpNN01oby9sZnBHaWNXL2h5eUNRQXY3NU51dytVT3dpL283V21YTGZDbGhZT01hV0xWdlp0V3RYRzdUcFJpYnJNeC8wVjFqMzRYY2RUNERCWU1BOTMzeVFuUmRleW1oVU9IWnNDWkZFcXJ1ck9SUlpIUlYyWHJDTHIzM2pmdDU5NnpzWmpVYnRpdXpHcVFlREFYZC8vVDUyWHJqM2xLNTN6emNlNEcvZCtrNldscGZYT0Y1alNBaGYrOFlEN0RqRjhkM3pqUWY1MFZ2ZlJkTTBMWXpxdi9wSGNIOW5hcHFHRjE1NGdiLzU5cmR6N1BoeFRQQ2ROU2xpaXNZdUs1cmpJUnNXUHllSlF5R2hXaHlOQ0VuOXNiclBJR1JKbUJSZmVDYitrRVhRd0RaRzQ5QUZJWW1oNGt2bWhIR1lJU1RFR2w5WUJpbVBvWnlwdng4VkpBM1I1SXVyTWNkclNUcmpMdUdqR0pDTnBKbkdsQ3dXcDZDUk1MSW9NQ0JoRkpQWUlBeE54alZYWDgzdi8vN3ZzMzM3ZG5MT05FMUR6cG1YWDM2WnQ3M3RCMWc4Zmh3emgzT0lPYnlycDYwSVdwOVhObEJmUnRrQ1BxV0lNOVQ1eCtHaERJUU44L084OHNyTGZQV3JYK1dXVzI0NUllTFZQdnZ1YnQ0OWJpWlJNVERqNk1JU0d6ZHQ5aTgxWVRqSXpNL09NamM3dzNBd0FOd3AyN2hwTTBjV2xuMGlPdDlSb3dydVNBbEhGcFpQNDNwTEp4QUI2OGxuWnVTVU9YSmE0MXRDSXVRN2pZQldmOWZuUDVrWm85R0lsWlVWTHJ6d1FwYVhWenhpaEdISkVFMXVjZGxJa2dPd0tNbmNqNURzMFNqZlpkMlI5cmU3QWVXa0dPRlVodU9ycmQrakZEUE1Fa0oxWEdQaHhkWStjUnpaQVJQSmZSOUppcW0vUDJ3T05LSEp3SlJzNmp0MFN1NW5XSEpmUWoySVlCUUlwMTR4QmtJNDdPRS9CVnlVRkk2L0tDazV6Sk9TR1kxVzJiRmpCMDNUck9HdHpReUhOS05SblRHUWdoV2pXSW54R0kwcGh2dHlOT1pnMEdBVTg2aG1sTVl3OWM5cU1ZeUNqZ3BIang5bmRtWUQzLy9XdDNMUFBmZE05RnRVbFlHcVVrbzVJYnpWZFVpN1dIdzRNOHZjM0N4emN6TnNtbmVqcTZIU3BoU1dWbFlCV0YyWlkyWjJ0dDJ0dXd1dy9ydVV3c3pzNlYydnV4aTZUbFlkNDh6TTZWK3ZDOC9xWXFnblpUODYxWStkUC9iWW8vem9qLzRZbzNvOHUxUGdvVlJKaVBxSkJSa1JvNkMrb3hjaFNhR0l4QzV1SkhFZndEZHFOM3hUZyt3UktYZDJFeVJJQnBwankvZkxZMDJDV0N6VHh1SFg5MU1BRWZkUE5KRVNxQm9wRmN3eUp1ckFxZzNqV3B4NkRxa0V4VklpTndJRFFhMUJBV1JBUWlFNVhFeEovVVJDeVFnRklabEI5cms4Y09BQXQ5MTJHL3YzNzI4amlNT1pHVlFERVNob1NVaHVFTTJVNUNlY0ZIV0lHYkF6bHdaSmdoUkRzMEFKMkZWZHUyd1VNeEkrWHlxRnBqRjI3ZHJGMGFOSDJiUnBVN3R4dDQ1NWZjalZ1Q3JFNkRzNkRrZFcyYkY5QzFsZzQ5d3NHK1ptT1dmakhOdTNiR0w3bGsxczJUalBwdmxaTnN6T2tNVFlzVzBMV3ZTRUhiaHJhRHUybmZyMXp0dTZoYWEzdUxxbjBxaHBPTyswcm5jT1RXY3krdm1NZXNMVnhWZ1hkaW1GcG1saWdXYm1aZ1p0TE44dkZtRlpiYkJHSGZkU3dvOXdoeG90OFpBZE15ZHpURzlhVURHS0dsWjhRYWlHVTZ3R1Z0RFNVQ2hJWTZqNmdxT0JUSFBTY1pqNXFWSFVvQWcwRGFZbElJV2hsajJxRlVoQkRVd0xOSDR0TUNnS1pxUlNHTXdPK1BNLy9WT0dnem5QZTJqRFlHYkl2ZmQ4ZzVtWkFhcENNY0VFdjZjSzhScEZMTEZwMDZaMkxxdnQ3ZG16aDRjZmVSQlRRMUUwNEdYQkVHMTg3cExTcU5LWWJ5Qm0wSVFkYTZNb0RVYkIxRHdRVXZ5RTF0SmdLRnFNMWRKdzZaNUxlZnp4eDF2YjdCNEVxYnRTSmptbVhZalZOSVhycjdtQ0k2OGRabWFRbUo4ZHN1MmNUZXpZdHBrZDJ6YXo5WnlOek04T21SbGtqcjUybUJ1dTJjL3FhSFJDWkdjTVN4cHV1R2IvcVYvdjJpc1l4Zlc2R2RGcXRFM1RjTU5wanE4bUdicyt4eVJTWDUyMEdoTXZwZkRDODg5ejdYWFhzZEtzWU1WOHQ3ZkEzQ2hZSm1XZ0dLa0lsaDNTV2VRRXdKRGtwMFVKS0tJaW9HTlhXOVIzUG5LS0VLK0UzMkJZRGx4dlVNVFF6RW5ISVJFUVNDUWFNU1JuOStkbHZLT21NVXIzYUZSS2NjbzQzSklVaWNXVStHKzNmWUhmL2MrL3g2Yys5UitaR1E2Wm1aM2p0ei8xS2Y3UFgvdlgzSFB2dlRIYVFzWWdLVW5GbzlDNW9CaXJLeXRjZGVWVnZQamlpKzF6RUJHT0hUdkd4azBiZlhHYWJ5eEdRMUdIbWFZQjRZcVJMRFlJSVh5dzR2RFEvSG9KUTYxQlRIeVBLZVozYU1ieGhRWG01K2RQU0RDYUdhbVB0N3BRWlJKTDhxWWJybVA1NktzY1Bud1lFWmdaSkFiWi81c1paTUE0ZlBnVmxvKyt5b0VicnFYQ3RxNEJkdjJibTkvOEpwYVB2WFpxMTd2KzJoTmdUWGN4TjAzRHpRZXVQK1h4M1hMZytoTm9HTjFUb2dzeHU0dW1uaWpQdi9BQys2L1lUeGxaWklvMVlKSWY1eUxtQnBlRk1oQ3dFZzY3SjhRa1ZhY3lSZTY2ZUxnMWFSdGNVVkZTZ216RnN4M3VXU0tTa1dJVWliaVNwY0QxNjQ4RE1VL2dnVHZQNnI1UHNraHJtRU1mUkZFSktCY1pmSlBranE0blFUQTEzdmszMzhtSGZ1SkRmT1hPci9KN3YvdDcvTTd2L0E1M2Z2bE9mdXFuZm9xYmJqaEE4ZGkxLzJuWnI1a1UwWVFsaHo3WHZ1a2FubnJxcVRXMnNuWHJWcFlYRnJCbUJINStPQm5BL0NSeFAwTkpWanlTWm9vMkRyTGNiaHUwZURUT1JPTm54ZGUzRlVRTHFvVm10TXJlUy9md3pEUFBuT0JlNUovKzZaLytGLzFkdlo5VjdCcUhpSEREdFZkeTUxZi9rdFZSdzlaek5wTWtNUm8xSEQxNmpBY2UvaGJQUHYway8rTi8vOTQxV2NyMUNvTnV2TzRxN3ZqS2V0ZDdnci8zdDk4emtYSjhRcFRKakJ1dXU1SXZUeG5mL1E5L2krZWZmcElQZi9ESEppcU85RVBYL1loZDlVdVdsNWZaTUQvUHJvc3VwSmhEQkVuaU96YUNXTWFrdU5Nc2pwMHpuaHpUU3Ywd1JiTDR5WUNReVdnbGlKaFRNektaUnR5M2NOaERKTmdNWTBBQ3o2NkgzMzNTY1JTSFZTbkNyWmJkZnpGcGM0b2tGTEhzdmtFa0JFMEU2WVNQZlh4UXJIREYvc3VablozanR0dSt3SFBQUGN2NzN2ZGVmdWlIZnBpVlpybE5iTFlKeTRIZm05dVNuNGphRkY0N2NvU2NVdXZuYmQyNmxjY09Qc2EyN2VlaHhYZC9KTzdMUUFaZ0pSWjg0K2VwWk04SmVZd3RJYUtJUlpwR3hYTkZMVHZNSXV5ZTJMUnhFNDgrK2lnN2QrNWM0OC9LUGZmY1k1TzQrMTFudk9zajFOL1B6Mi9nZ1llL3hhTlBQVWNUR0hjNEdMQnZ6MFZjYzhVK1ZsWlhwa3JnVENyUHJOZjcxcFBQbm5DOWE2KzhncVdseFRVT1V4MVQvVm1mR2JwaHcwYnVmK2dSSG4zeXVkYXZhTWUzLzNKV1ZwWlBZT1hXKzZ2WDdDWWN1OUdVcG1tNDc3NzcrT0FIUCtoNE54WWxTZHI4Z09HT1k0NVR3Q3BJc1JRd3hranF4aTdpRUNDSlkzTUJqOTFMOHZpWEtTbEZyTjdpRzZTeXJPcDFPYVZ4RUFsQjFFUEZ5VHpTVkNram1nU3AyWEdOUEFMQk8ya015MEpXOFloVzhWTnBPRHZMcC8vZzAzempHL2RpQ0RmZWVBTi8rOGMveU9ycUNsZ09McFpnQThOR0tVNnZPSTBRaE16SzhpTC85Zk9mNThvcnIyUXdHSkJ6NXY3NzcrZXRiL2wramgwOTZyQXpDTkFwYmhNcVJJdFRSVktIR0JtY0Y2Q1lrU1VqV2xyK3BOTnJJb2Rpd2xOUFA4V3VYYnZXSktvSFhldytHQXdZalVZbnhQUzc4ZDlxM0V0TGkremZkeW0zSExpQnVWbFAxcXl1clBMYWtTTXNyeXhQck5mdWhuTDdoTEtGaGVQczMzY3BOOS80SnVibTU4QmdlV1dGSTBlT3NMQndmTTNpN0JyeXRMcmxoWVhqWEwxL0g5OTMwNDNNenN5QXdNcktLc2VPSFdOeGNXRXE2YTNQek8wblNGV1YwV2pFN093c016T3pMQzh0ZWFnVFE1dzhGVmxqWjhCNmJEL0lnMllrVWF6NEkxVHgwNlNoK0U0Y3h1SVpjSGRBVThBazArVDJpaHRXellTajFOVGhTY2ZoWU00ZGJuZTZmVmNWOGJDeDV6cGljYW52dk8ycWl4K2JlcFNyRk1naXpNN084aDgvOVovNDZwMWY0ZjBmK0hFQS91Z1AvNUNWcFJVKy9LRVBzVHhhOFhBeGhwUlVNNkMrSUZWaURncWJOcDNUbnNvMTUzSGhoUmZ5eXVHWHlHbUdPanRKeGZsaXFZYkZQWCtocGlRS1dJb05CMUNGUVlyVHNxR0lSTFRLVCt4azBDaEE0WXI5KzNuZy92dlp1M2R2YXcrRDdtbXhzckxDWURCWTQ0VFdmM2VOc0pzUGVlV1ZWOWFWZGVrdnZtN1VxbDg4dExxNnlrc3Z2enkxc0grYVNraDlOVTNUK2swaXd1TGlJb3VMaSswSjJLOHptRVJQNytaMnF2UGR6M0VjT25TSTY2NjdqdFhWWlRRWjBwZ2Y4MUtack5XZ0F1TldybEpTU29sRVdQTDlXcVdHT3QyZUpTbGFndUpodnVzbkVjL3lWMHlnUmtrcGlIK1FSU25DU2NmaG5DbDFzbU00NEJWSWRWbkJubkZPRWZwTWlCVlVuTXhZZVdGWjNGUDYvejc3eDl4NXg1MjgvLzBmNEYzdmZBZGlncGJDWi83d00xeXllemR2ZWV0Ym5MOGxDYk5DNWNBVUo3ZDRTRm9TUzZObHJybm1hcDU1NWxsMjd0ekpjRGprM0hQUDVlREJnMXgyK1JVMHF5dGdRb2w1ZE5hRG9wYWN0b0xGQ1Z5UUxLaENTdWEraFFUeldEMzNZd0twY1VhQS84enRiQlJScy9iazZPUHNMa1RSb0hqM0MvWW4xUnYwL1pKSkJTYXJxNnRyb0VyM2MvWFBtdm51UTdGSm1mdStzTUFrSSsvV3BQUVRuZE1VUkdxQ3I4LzZyRDgvZE9nUTczblBlemgyN0hoRVl6ems2TWQ2cFg4YkZiQUlob25ESktob3hXTFhUd0ZwMU5kUFk4RWdGelQ4RHYrQU93Yk9yaldQZ0tYS2JmTG8xQ21ObzE1SFBIRm1VaGdUVlFoK2xPT1dMTTY0MWFDRldFdGJqK2NneW8vK3lMdlp0blViMy8vV3Q3RzZPa0l3ZnZpSGIyWG56Z3U0OGMzWHM3Szg2aWROelRHVW9MbEx4VWRPaU13STExNTlOWC81bDNleGJkdTI5amt1TGk0eVB6dkw4ZFVWU29ORHREakpMS0JSSTBZbWtxWE9jRVFTRkkyY1NoS2tMb3dTU1VsTGtVK0NaTWJpNGlMbmJ0L084dkl5TXpNemJrdDMzbm1uVGFxSzZsWngxYU91WDd2Y3greVRhbnE3TUtwYmZOUjFxdXZ1M0Y4d2ZRcDVkN2V2NCt2NkFsM28wL2VYMWhNSG0xYUxQRWw4WVdGaGdaV1ZaZDcrZ3ovSWF0T0VQekR3eWE4YmRYTG9Rd25xZ2xSNk9CRk5jcWhET0xicTIyZEVJaU01MTNpVVI4d295WjMyWEozc0ZEdWt1UHRTS2hueEZNYlJKZ1pqeDB5bUlJTTJDV2tCTzZ4UzRGTms3Y1ZRQzFqaWE2VU5oMXJPZmdLb3RnbkxGR09XRGtGUlRaeXVVbW9kU2FYMUJOb1lDRis1NDh2TURHZVluNTluWm1ZR1ZlWHdLNGZaZWY0RnFGa0VIMm93SVNFbG5pbCtYNzdBay9QUUxCWXpZTktRYk5EeXMyckV6aUpRa0ZETzJiS1Z1KzYraTcxNzk3cTlkeE5wL2QyNDd5ZlVuTUMwMEd3M2tkTk5sdFhQVGl0YjdWWjkxWVJRbjZ6WS85NitMMVREcTMwbnZZNmwrMmZObGRTeGRVL01mamkzQysxV1ZsWjQ1SkZIZU90YjNzWm9kVFdJYkw0cmFUQUthOFVGeFRsT1RsZnhaSlJVMzREa2NYdUxSRzZwNFZkQXN6dStRWlpUQlNrT1k2enUvTVVKV2FZUlRUdU5jZmh4bGFJT1ErSWs4QVJocVpCTlBPeU1KRkxrRkRUR1gwd3BKVUNZaUkrenRhSFk3QVNzR1J1ZW1TK2laQ0NxRWJpS01LdjZvdlJ4S2JjY3VJV0RCdysybEJJUjRZVkRMekF6SEpMUUNGMWJoelpTUEtuWkVqaUR2cUxtaTVzQ3lmTWVKcFU2NDA0NjZ1UFQ1UGU0UEZvaERUTEQ0ZEFSUTNlM3JZYmR6UkIzRjBtZnFqMHBEOUNGTDEyc1hpTSsxWkRyZDlXZmRTZWp2K0M2cE1XdWtYZXptdjMvdWhDcGU2M3VvcXZqcll1cTZXSE9ldHAxdjNOK2ZwNjUrVG5NTXBUU2hqT3QzUUU5Uk92WVBJNS84M29LbFJMMUZJcnpOU1J5QUpYRmFtQk5MZXh6ako3OG1xcStZRkp4QUNaNGR2QjB4cUZCRnljcFVNaG1sQncwazZDeFduSkRkbHFLbndSK2dlemNybUQrV2tSK3ROMS9qVUpBUlJNL3RTZysxbVNVOEs4MEtDR2tnaUVlb0ZBZmtxa3l0MmtEOC9QekxWbFZWYm4yMm11NTdZdGZZTFVVTm03Y2dCWWZtZ1ViMkJkdUhKZkZLQlJuQXFSSVhCWm5LSXVDTk1XVGlyRm8wZUtVRXdFZEdjdUx5Mk1idVAzMjI2MExmVTZtMHpSTm0zUTlYZFphekRJYWpSZ09oKzJDNkF1azlYMmU5ZFFwSnRVKzk2SFNZREE0SVlrNVRWaDRUZTF3K0JyOVUrUEZGMS9reXF1dVl1L2VTNTBLa2lRb0h0TG1DSEpFaEdvc25SclBENklnT2FJbDVyQUo4WVNZSm9XU1VTbms1QndxcTVnakpVeUxSNHR5YmhtOHZrQTRyWEZJTW1pRWtxU2xzd3NleWNsU1R4TDNYenlSQ0dMRjVRYWlaTFpTdzJ0K0p1SE9iYUp1QXVvOEtMRjZpL1YvRGd1MXBrK0MxaEVPY1JMUDhELzF6Rk04OU5CRG5ILysrUXlIUXk5MUhneDQ0SUVIS0tVd1B6OVBhWnE0dHhwVnE1V0lOWklYTG9KR3daYTRSeVp0ck56dlFWR1NlZDNMek93c0tRbTdkdTBhRXcrN2pteWZhRGlKUnRFTnVVMlRkK3ovdk12ZDZpNisrdTh1aE9wSGx5b0Vxb3VzcjNMWHZZZCtzcTdlVTljM21pU2pXUmRKOVdPNmk3RHVZSWNPSGVMSFAvQitqaTBza1NXeUE2a1dLS1UyeDEzTFVuM0hjdXlkVW9TamdrNk5KcXdVa056aVlNdEsxaFR3U09OS3ZnZ2srV0pKZ2JGTkdzd3lTY29wajZNTit5WmprRUFiUXdZTmxNd3dmS0tTUE44Uzl1OUpOY21JUmoxSGtCeWxpRWZHUm9LbTVLenhPTk1reHBDalRFRHc3TDFGV1VFU3BXZ0lYMlNMa29Lb0dNekMvaXV1NE10Zi9qSTdkdXhvYldKNWVabkxMcnVzalhoMlN3YjY5dE8zaVlwUXVxV3cxZmZ0Umt5SHcrR2FJTTJnTDBaUXY3anVudE4wbkxvWjlhNUQzR1hkdHRUZnlIcjJGMFFkY0g4eGRrK1A2a3QwRjB3M1JOeXYwT3RIMzdyWG44VEE3WXNvcks2dW5sQlBYRXBoWVdHQnl5KzdqTVdsWmErWUs4a2Q1c0RxS2VqZlJrTm1nQmFQdWJ2d2dOS1VRWXhSSVpudnhpbDJWQzMrV1JFbkZPSUx5c1NEcktvQ05BZ1NoVS9KNjg3bDlNZVJ5Z0NOWXFyaVRBN1B5cXV6Y1gwejk1M2ZpSVJNdG5FSmJRN2VsbnJRUUhNaGFhSUJwOGNITFBPS2tVcVYwVll2UXN5OFppVnFROFRwdTJPb25tQmxaWVg5Ky9kejVNZ1J0bXpac3FhTXRtOGJ3K0Z3emFiYVoyM1gxK3pzN0JvazAwOGtUNUpZU2wwajc0WnRSNlBSR29qVjNmRnJlTE9MeGZzK1M1ZitYWGZlNm10TUtwdXRpNkRyVlBmcElYMWZvbjVuMTUvbytnMlQ5R0hyT0phWGw5ZmtiVW9wclRKSkhXZGR3RTNUOE1RVFQvQ09IM29YcFNtUnFuUDZ0eWV4dktSVVVNUUc3bHVZMUdncWlTRjVVRHlua1N6d2RaU2Fta1F4ajRkWHN5V3lRRTd1dkZyVXdXcktFSVZQT3FnVjM2Yy9EbzNUUzZWR3NpTFdyMlBsa0F4WUtvNXphaVljb3pIbmNHbEFHRXNnSlVVZE9iaG40WkFtcDJBY3gySkhwQk81MHRadk1yRTJueTFSSEtYQTI3Ny9iUnc4ZUhDTlhYMjM3U2QxQzRlNmNLY2VNZDJzZEkzeWRKMzFTWVhzZFlEZDFkamR5ZnV3cWd0M0JvUEJDU0pqTlJGWnJ6Y2NEdGVzK3ZXVVV2cUp3dnIrNFhDNEpzeGNkNCs2KzZTVUdJMUdIRDE2bEFjZmZKRC80ZS84SFphUEwzblZXWENTUExUcExCMUxicW9wWkdzUVQ0YWxpQjVweWFUQXR3V1FRZkFodEpDRHFhcVJsQ3RCYWJCaHduS0pJaU9MVERmUVNPUXJUbjhjenNOSUhoVUw2SjBIT0d3ekp4VVdFWkpLc0RJRXk0Wko5aXBEclVvakdnNjdKd3VDS3h3ZWp1YzFMSWZKQjhZWEVZOVdSWkdYSW1RTjFpK0dwdVNuV1RHV1Y1YjQ4SWMvek5mdnZaZWpSNCt1UVRmZkxmdVIyNy8wcGRoQ2lBTDZNVW1NNEo3VXlxNVdtaVUwa21xRW8yb2oxWjlKeUxWVTNHcVJGZlU1Q3ArZ2U1MnVEeCs3VUoza1ZnRkpXUE8rK3Bza2ErVnFxcStGZGNiVCtTNGk0dEpxUmRYUVVDU1UzSmVUbGpNMUhBNjQrcW9yV1M0TjJWSjhqUVlCTHBNb1FVV0hBVUtEaXg5VStwdGovY0JJNG55bUFFdnhRQndlK1hYakhsSkJ0ZElRMDVod2g2SlpTUG82eHRGbTY4ZjNpNElGblp5Y1FoQmhuSkYzSDF5RDRoSWxzQ3BqeHE2TTYrTnBxVEloQXlTS0ZLZmlENUsxMUE5M3hJMHFGbFJUcVY0MkhMa2hFeVFKRHo3NHdBU3hEOXBuMVNHdXRRdGVxTSthY1JCaExCSTJ3WjdIdzIrdDYvbERoMndvUWhHOGRya2FhelVVQkkwMGV3cHFEQ2xSMUVYR3FpWlJxMklSMGpFNUhNK2F2WldJVHpzVE1xSW5FYjJvQzBCRG9DeEo4SW9pb3BDQ3krT3NTNmMxaVBpUjd4RkZJNmRRdnFoaUNqSGxMZndRTjZMeC9Yc3NwNWlRckJwSzVKSmJkcXJYU1lpRjFrZWdETThaQkRrdnBsSWw1aWdITFNNb0g5WFpGSU9TYTJXZGVYVmJaR3BkV01meHVWUkhIMzlmTEZ2UFZhaTg3bkg0SnNEYVo2V0c1U0JGVmw2WDFQbUhzVjVRaEVRY0NaY3NBQUFXaVVsRVFWVE4vM1MrVmZJaXBCb3NFMEZMeldSbmYxWjRWdHA5Si9XQVhjcFJ2QlZVcnBySWkvdkd4cEcyeU9XZjVGa0pSZHgrQmg2RGVOMzJuQ1JLRnlWMk5vMVlkMTJWaWd1TXBaUmlCL0FFVm9yNHUwVk0yK0xZTi9IajJMTzZjWGhHRlZqb1ZEamV0bnFzQk1VbkR1VlVSUzFJcE93N1RxUDEySzhMdzVObTd2QTVkVURWczhNU25sOGh3cEtoektmcUlnV3UzUlNjSGd0alN3NGw2czZTZ3RXS3VocUhVOU9remJZV015eDFnZ1BtN0ZaSnlaMVVCSXN5VG9zY2hndUcrSGNYeFpOK2tkbXVRVmROSlJKdzFqbFZ0UzJXK2s2TVE4VzhiRGNNTWhXalNmZ21ZOFZ6YTZvK1A4SGQwd2pGV2xRRzFtTmM4T2ZxR1dldjJXZ2lwS3pxQnVmK1Q0a3lGQjlmMFR6T2t0ZEVxTG9XbHBsNEhRYU44NkxzVkorVmVhVHZPMmpQZzZCNmVyUkRJSWRSMTNvRC8wMnMrdVFUU0p2cmRmd3BVVEJqQTJzVFI5SUlObENreVdpdXpNL3NEMERNU1MwbVRrcXpoS2JpQU5wbzJhQ2xFWExjMkxoWVA3S2ZnYi9yU1N2V3RNazJ5N0c3aGJTSFZVaWd0Y2pJS01VWDYwaUVRUU9XYS9EVTBCSXMyYWhSZHFMT2QyYU9paFplZStVd1JZc2JRM2EycW1iSXhiMWhDMVUzb1ExWmpSbTdHbmtGRVhLTElZbUVuNHpSUllwNmtYb2ZGWUlFeWRITEI0T0swUm1IZjVlQ2hPWVZZMnE4MWVkV2hkckNjM0I0R0JDM2FzM0ZzMHJGb2FEWGxsUVlvd0VWZmNNaWlKaDEwWXQyVHF6a1RHRS9HZVM3T2tlREZENUNTZkZuT0Z4U0FqUkt3S0lVeGtsR3ZDNFRHUlNrOGFJWGs4YkxPMU55eHVRZ2FvNnJvWWFSV2xTRVdaaGlJbEZhQXcrdHBNQU5LZUh4OElwNVd3NU5QRGoxWW5wUFBEbUZ1b3FNV1J6MVZmQU1ndmduaHBWd3hJcm41RXIySXFFa3ZqTW55U2pGVDZTVW5YLzBIWmlqNDR0SFdWa2RjY251M1p4OWZlKy9CdHI0RHV2VUJXMWhqaVRmTDFJcE5BS0R5TmlxRmVmTitLYnY4V3AxTGFWS29TZGk4OUlxNy9sUmxjMGpLSnFzZlc5Sk5pN2NKM21NUFJ3bHJVelR0b1lsZG9rb3JqWnhjS25pTzRlNkRJV3ZmTVZMU1hPRHVmVTd3Y0U4eVZacTJGREhPM3hqMVNlU1ZyMGpXVUUxb2ZMNjVzaElMQzZ0c0cvZlpXM00vZXpyZS91VmtCSlZabzVIQ2FjeHlEcnV1SmtUenF6U0hySzRXRnFGS1dMa3lPV2s2a1RXTEhsbFpoWVAzVVhaZWtSbGlGajR1SG9yQlNGTXpPUGRGbGxhQjh3NEYwWThzcUpWWGR6RWF4bkNhVFh4TWtweEJWbi91cVNoOUZjaW11RU91dFFRUlVyT2RrVTh2Qm8ra05jQ3ZQNDVTaUkwemVqc3dqaVRGb2RMT0RhVUNKMjFZYnpncEtTSUNubjlyYlNsaUNZUnByT0U1T1RPb0xnMmtKSElVUVlxMmFNS09WVnBSdHBvZUtveW1WTHB5MEZiU0E2NlVqaW54UkxKN1JmTEdVV2N5eU1PekNMQzZwZzR1VWFUbUtEWmE0ZnJvcEZVMm1pTmszQmFYZ2RTd3FsTGlnZTFhbVZkY3ZyMjY1NGo5emZPdnM0Z1dFVnhWVzJyTmMyaUhnN1A3cWlKaUR1anBwVHF0QlN3MUNEbWNYUldpZHFBOExPdHVBWVRUbE9RS09VWmt3SXJ2OFpGdWdicVdxelNPdWx4WkJRTk9VK0hMU2tjTmkzR0FFSHp5SVBER2t4UkYwY0tDcXBpS2FUN2k3cndXQlg2aXBOSU5idG9RSEpHSmptRmJFc1ZGTk9Xa1dxOHpqa2FkUnpEczY4ekJWYTV3UTJEZ3BBa09iT3NSRlNpQ3NkSnhkZ1p5S0htNE9GYkJoRzRTWlczNzNGekhVUjdsS0JHV0lUMlVpZUxPdFRJYVVRdG12c2JsVDd0eERVbGt6UlhJcVVuazVMbkh5UVdCa25JcUR2RmtseFZRMnNDTEJZZENjbUdXbkpKVHZGUW9SWWhEWUtCS2hHeHlRUlBLTFZoejI5bmpseE13RFZhT2JzMnpqQllGVW1keHF6RjN5STFsNURhVEtTaWFFa2dyaGhIRW1hR21jMmJOak03bUhGNG81SE9pMnF2WEVKdTMvREMvdUFRRVU1M0Zva2tXeERHVXRWWDlUTEhwRGtVeCt0V1BCWVRtOGtEbDZqSm5nankvR290QWZVUWNsUlRlbjExVk1haDQ3QmRVVWdwQko2REZhQ1VFQXd6SkdWbU44eXhZZE04bStZM1FNN1ZnNGtra1RFN25KMDZSNVZIWkhFQW5WMGJaeHlzaXF5c2VmaW9pRENJV21Rc3RieVlaTWxsS2tNbmRYNW1BLy8zYi93Ly9Nbm5Qc2V0dDk3Sy8vcXovd3VyaXdiWmQrSWFYVW8xMW04cGRGSWpjMTJNSkpHYmlPSVV6Rnp2dFIxUDAxYk9FVVM5bERPUFBQUVFyN3o2S2p1Mm44Y1ZWMXp1U1N0eGFVeHlpQ2ZYYTVpSGdFdVE1VnhDTU9SaFVFL0lWYXBRVUdGVFNxd3NML0U3di91ZitlWTN2ODZSSTBlWUdRNjUvUExMZWU5NzNzdTFOMXhQV1ZuaDJPSUNuLytqei9QK0Qzd2dBZ2VkT1RKWFJTOG1EQ0lqWFNraloxOW5DcXlLcktNVVQrSjVtdDRDSzlNYW1BWlJLaG5NemN6eUcvLzJOM2pvd1FlNTZhYWIrUHJYN3lVeEpDV0xDSkxEbk1vWndsd05JcWM0bmFReVNSMU1sY3A1Q1FsOFNTbjhGMmxUK1c1WW5wUnFTbUh2bmt0Sk9mSG9ZNCtTaGtGWXl6a1NTTllxamJjeVh1S0VFcTFaKzZpdXo0UkFjcHc2c3pOei9QbWYvbGYrM2svK0pOOTY5R0cyYmQvR3ZuMzd1UGlTU3poK2ZJR1BmL0lUL0l0ZitpV09IRHZHUnoveWMrUThPSEdPWXVKVVBOVGJXR2tUWTJkZlo5RGlLQURGRzVhSXBwWWU0S0ppMnFyc0lRMml3dXpjTFAvK3QvNEQ5OTkzSDl1MmJVTzFjUFBOTjZNbDVGNXFXTlpMZ2wyNjBXcnVvNnFNcDdhcmxscnhnRkh0SHlGZ3hlVlVVZ2d3TjVXOEtMN0lObTNlaUtKczJMUVJCUTUrNjNGeUVyU3g0UHhVaUZmcEdSNENkcUZ3UlRVRlQ2ajRZbzZTeWNFZzhjZC8vRi80OUdmK2tCdXV2eDVCMkxaMUc5ZGVleTJYN041TjBZWjkrL2F4dUxURXovN3N6N0pueis0V2duYm55S05tcmhpb2tTMjNzN0RxeklOVmlhYWxiWlFjTkdYUjBBYktUaHhJZ2xsaGJtNldULzMyYjNQM1hYZXpZOGNPekl3dFc3YnlEMy9tSDdLNHNoemRpWXhHOElSZkt6d2ZMTWlpWWVBYXhmbkZJMG9sbE1pbGJZNEhSYU5xTFhubVhESldDa1ZnenlXWDhzU1Rqek9jbVdQemhzMGNPWDZFSjU1OGt0Mjc5MFR5c0pDQ0p0QlVWVHlwUW9CR3lScDk4RUxtckhnVGw4T0hEL01IZi9CcDl1M2J4MmcwNHFNZi9RaDdkdTltZVdXWkxFTkthZmgzLytIZjgveHp6M0hGRlZjRTZ6ZW9KREZITHZEaFZCbFZGMUZHY29TbHp4cmNtZVZ6MkFCU29ZVFNSQWxZb0NsN0Q0ZWdnYzhNaDN6bU0zL0E3YmZmd2Zubm53L0F6cDA3K2RqSFBrYWpEZWZNRFVOaEkxcndCbGxOVlZsY1d2UmRORmlkM3F1Q3dQN2FHbzVaaW9ZcjNnZWtjbkE4Y3FXa2xNTUhTbHkrN3dvZWUrSWdPUTNZdW1VTGgxODl6TFBQUHNQRkYrOXFXeFJyNjZpSDZvYzYwU3hyaUJDck84MlNoSlFHZlBvemY4VGV2WHM1ZHV3WXYvaUx2OGltVGVkdzdQaHhoRVFqaXh4ZlhPYStiLzRWNSswNGIxeEdHd1ZIcVhLN3RlWlNTblRacW5VVGVqYVNlK1l0RHU4Mm1rVTZIWUV5WWg1Z0ZWTlNIdkM1UC9rVFB2LzVQK09paXk1c0RlT2hoeDdpM2U5K2QwaWd5TGdudFl5YnRtL2N1SkZmLzc5K25YTTJueFBLRXduSjJ0SktVdTBCSWVyWlpJV21LZHgxMXgxSVR1T1dYTGpnR1NIZkx5UzJiTjNDbHMzblVGVFp1blVicngwK3pQUFB2c0NGRjF6b1k4clI2a3FjcUdnYW9naVI2Zll3clVmV0JuT3pQUEx3ZzJ6ZmZpNlg3YnVNN2R1MnN6SmFEU3EyOE9MTHIvTFJqM3lFaXkrK21LTkhqM3A4UzRSbXRRa1dMZUhaVjNHeHF2QVhHRk5iWnZuWjE1bXlPRXdzSXErMWowRW1wZEtxU0tERzdQdzhuLzdNWjlpelo4K2E2cjl6enoyWDg4NDdiOTB2S0tYaGkxLzhFdTk5ejQrNSsyOGxFaGdTN0VwWHNjZ3B1enlLS0srOGRJaUxkKzloa01RMVl0TUlzMkZJeWdTMXBPbzZoUjloWkxadTM4NmhGdzZ4NitKZGpKckdlM2xIRVpFbnh4MzdheVR6YXJQSEptVTJKR05weVdWWkxycmdRbGFhMVNCT2VoUnIxd1VYOE5uUGZnNjBSUGJlTjREbDBRckx4eGZiWHVLbzUzMG9ObTRxR1lJSGRoWlhuV0dMd3hWaG5KRXE0bEREb3NSRWpaU2hySzV5MVZWWHNiUzBkTnBmc0xvNll2ZXVYV2h4RHlTSmR5OHlTU1JWMUxJcjFXbHBUNTY1alpzNWZ1d0lhV2JXOVkwc2s1SkdIc1BGWUVTOTc0S0tNRERIKzBYOU5HbWFFczBudmVqSGxGYnFzdTE5aDRldU5kaUJSWVc1dVZuWDJGMWFJcXNYejJqeFNwT2wwU3JMcjd6aWFSSmxYQVZuUm02VkE2dGdXL0ZrWXV1RTUxcE9lZloxUmkwT0Nya01LR21zbnlTQjJaTkFvMEpaWHVFakgva29uL3prSjliVVk1OS8vdmxjZmZWVjN0cE0yc0xUdHJaUHpOaXlkUXMzM25nVHk2dExrU2owdW9sa25nL0lPSEZQYTJtakdsdTNiaUpuZjIrdHgwZ2RTWUZnL1hQcytBSloxRHNVa1ZoWlh1RFNTeTlES1lnNU05aWpZdDRGcWFpUWNuRk5wV3hZeWQ1WlZZU2lEZWVmZno1TlU3ajc3cnY1MEU5OGlJV2xCVnFobTVKZHRzWXlzeHRtS0tQRyt3Q0tLM1ZYOUpTVE0zOHRORnFyT2tzS24rZnM2OHg1eWRQUFBGMTE2c1BvY2hTRitDNWVteUZJUkdRKzhZbVB0N1c4eno3N0hILy83LzhrYjM3ekFlK2FrdzFUYnd4WkJiVVY3eUNrVlc4MUhPeWNERzBrbWg1S1c4c3RWVk0xVlVIeENPOWFGTXZnbktuWFhuMk5sdzRkWXR1NTU0SVZGbGRYMkx0N0Q2VngveWRuZ3ZJdVVSSXFRWXlNOGxlU0p6c2p1NTJTY01jZHQvT2xMOTNPNHVJaUJ3NjhtYi83ZDMrQzVaWGxxR2x5Myt1VmwxN2lWMzdsVjdueHhodjRuLzdCLzh4b1pUV0taaXp5aTkzN1NPNlVSNHZqRnc0OXowMEhianByZFdkS25zT2FrRlV4alE2ZXhZbmVoZERtSHRkb29JV1BmZXhqbEpEYzJiWHJJbjd6TjMrVHYvcm1ONXp1UFlyckZIWGNyUmFHNkh0K01ZTlNFRlhLeUhNU3BwNExNTlNoa1hteVQ4M2FmbStWS0ZpMS9JNitlb1JubjN1R3JkdTNvUmlMU3l2c3VmZ1NtbEdsbzlkZWNOQ2tXbjloaktKR280UUFjcU5PRlVtbUZGUGU4YTUzSVNKczNyeVoyMjc3SXYvcTQvK0tsMTU2aVkwYk5vSEM1ejc3eC95algvZ0Z6ci9nZlA3aXJyOWtOZytwblFIYUE3Vm9Ld0VLaGpWQjNiZXoyZkV6N3VSNDhxa25MSk5iZFE5THRhQzRxa0RVY2tadm1TWEpNOVNmL09Rbld4bVVnd2NQOGx1LzlWc3NMaTRnNUNBU1d0Q1ZrcStUV21nVVJmRkFpSHBWWGFaZzlZcEh0Q3phOWJieWplSXdhU1lQK05yWHY4YXVDeTZDbEZnOHZzaWVTL2Q0RjliSXAyUnhrV0xOdExYWDBacGkzTTh1S1BCYU84REV5YmkwdU1Tdi9adGZZMjUybHVYbFpSNS8vSEVXRmhZWURBWmNjc2tsYk4rK25ZV0ZCZDczdnZkeDA4MDNVN1E1WVk2SU5zYVZHWitTeTgrOCtQd2hEaHc0Y05icXpxU1RvMkJScUZPaUZ0dUw4Rk1JRkZBMCtqUTAzcDh0Wlg3KzUzNmU1UldQN3V3NGI0ZC9QcWpwZzJnbW9xcUlHazJJaGxrcUZJTkdqU1pPQkZYdkVKcEtRYTJCUXFoSUJQdGNGR3U4R2FJVWI4NithWDRUQmVQNDhhUHMzck1iYlVZMFVTQ0Yrb21nUkt0aWN6SGpvaHBMMUplSEpxVXBUbCszNkhtdHBteVkzOEEvKzZmL2hBc3Z1b2pSYU1UKy9mdTUrYWFidWY2R0c1aWZuMmVRQi96TXovd0R2dStXNzZPVVp1SWNXYWlqYXpGVUNxV1JYbEhYMmRjWmNYSTg4ZVRqWnBKb0pZVGE1aUpqd1lGS3dvN01od3NjWktHTUNuZC83UzdlZE1PTmJKeWI5NGhUa2lpMkR3VndBYXhCWk5DV3QwcmtBUlN2aVpCaWxBUlp3MWhUTGNnZmg0VXNLdkVrcFBFWEZvNnpjZE5tMTJLMVZqbXJyZktyMmxPZWZtZzFXRUNkUytiNkpqWnVxRmdwTEhoZ1luN0RQTWVPSCtlUlJ4N202Tkdqek03TmNzbkZsN0Qzc3IwY083cmcyWEN4cVhPVTFKdXFKRndzTFEweWgxNTRucHR1T3V0em5EbUw0NGtuRFBIcU9SdDRFdy9WSFBVWElleWc0cFNMVUszVGtITVBjYWlxVGVGd0pWSDE0ZDJnMVp5cUhtTDFYcTBhZWxVYXVyQlpvb1ZDcmRnTG1KTnJmVG10VGxHS0w5Ym9BNkhpRFV3a2g4U1Bpb2Q5WFVDRDFFUTMxVlNicXNRQ2lTWXNZaEp0dmRwbEJHWTBTUmhhRmMySlRxYnFRb0dDWXFjNFJ6VWhtdE9BRjE4OEM2dk9MRmhGellyN2pxNUJJZGVvb1pCVVFnM1BYRCsxbE9peUdCaGUzZEZ1ckdxUWF0dnBFNkpLTGpYZVE2SFZFS29PZHB3UXhYTVkzcVhIRzQwVURHazgwbFRFZStVUmt2dGFxU2NXUFNyQ255QmdWSlhzTVV0b2J0cUdqOTczTzhpVU5DR3IwemozS2NpTnFyN2dCaHFra0xaM2hZWEJXMHV6UDVVNU1oT240N1NhVDJkZlo4emkwRWoyMWNhaFJMemVzOW5pRVNoMXlFRUpkWkNJSENXMXRyMlVpRitINk5tZzBSV3hyYlFUVjZ6VEtteEVrUFE2WDF4bEhOVUtBd25aenVSMVRxVUVFejNWMG05RGRlQ0QwMUF0ejNqVllUU2FsT0xZdndSZDNZb0xPbFNWRVN4YWtkbklHemhxUkpXaU01SUZyVVhSMXoxSFZiM3g3T3NNU2dJR0VobVRHNkwvQXNHWGtvem5NR29zbitRVmRDMDFQWVd5UndxWittanhTOXUxeEhkZEJNdkZkWWRMYVJ1eUNEa3k4alhXRk8xUXJMaVVUa2xSbytScWlra3QxTWt0WkVlak0xVUlLOVJia0ZRVjFyMWlSQzE3VVpWRWF4Y3BVUlVZY0VxaGlQc3owbmowcktyNklmSzY1MGdINWV6YU9OTk9EcW5FMXhBSUlLSXNWVlhEb3NtSVIxYjk0ZWRzblVJb0d4dFJMbTFPb1ZYd1ZXdFZEbk5URjAzVmVNMWVVcHFzYmRqWVJLS3ZzZzB6RG1Va0tTS2xJMVpjdXcrTlcrVldYOGVQSVJkU2JoZUxqRndOQkQ4TkJpV2ExQk9PZS9nRzVyTVNoVW9CTTc4RGMrU2x2K21zeFoxUlBrZm9RYm1ZUVkzcWdJNEUxUVl6eCtacTN1QVU5U3l6VmF3ZmpkMkxldE1VeFh0RVcvU0s4QjUwT1Q0VDZpTWFIWTVRU2hWSUVQSDZoK1RpelZXbFJJTW9XRlRSSWpUaS9ra0p5Q1lXYkZ0VGlyaWpYbFhOVlV1Y0hyWC90MnZyV2lOT2x5a3V1ZU5oWjFvcFRPL3pFaTIwTk5xaHZjNDUwcWF3WVg0RGYzWGZmV3NvT0dkZjM4UFJxc2NPUG1ZcEZHMVNobFN5YzVreVVRdnVyWFNsTkJHRmljQlUxRjIwV2xQcXVrMlZMbExGdnpVVXNWUHJSSWR2VUNLcVU2bnVkWTgzYWNOZzF0SzlNeVN2SUhSSXBlVGs2aVdFckdma01hTS9vcmNQUTFyZGJ2ZHRTaHJYa1ZleWpDaWxxcmtYVnpxUjZOdFhoY29ybit0MXoxSHhuTklycjc3S3lzcFM5TFVJWHRrYXlGVVpQYlYxZzdXZFdhUFhmQ3NLWVZpd1Z5U2F3WFRlWUl6SmpxM2F2N1RxN2JXUE54RUtyK09RV3JJczJwNkkxdW1qTiswMTFvU3ZyU2ZDeU9ydnBCYUdoU3A3UjRlMytweDB0WGJiZ2ErOWxlL1dITWxqang3MHBIZzRxU3FDeU1oTFNVMWM4N1hxelZwb0NJYlVqU3VYZ0tZUWNEYkk0dktac2thdXZtcmNnbWhHSlNSemdsZmxTdC9SdHNCY01zYzB0NFREa3NiaWJONFpLU3J3eEpDaUhuYXRSVkZ0OTZESXJrZHR0eVNYMUsrWkU0djBkVFhtRkNkVUZvbm1NY0VPaUp5TWlMYnE3OSt4T1pKT280VG9BZTYrajdXTFg2cjVtRGU3U1VHdDhRYVFIZ2swRmQ5NHNrYjlpclIrWEtwNktUSU9yMHQwbFIxSW5LaHJ4a0diYTVMaVJOUnN0WmVHejFPVG9vZVBwalZ0ak1mUEt1YXI2a05YS3FxNm92dWdmVlpFaTRCb1UyQWFXc1VoQjB2UTF1SjVFSldYMzYwNWFublZJa0tSRXAxRHMzY0JqUlpaSWVDSGlJdVUxVjNGekJzY2lubjcya1FKL0syUlNJd0ZJSlZIRlVWTlJOdXRDTjgyMFN2RGRiQWlqNUUxeUlkR3JoUU1JV1RqU3l2Q1RVN01ScWpVaFo0dGRpNk5aRjlvWnNWTlNMWnhmNDdzTFlOVFpNeWwraHJSTXlLcFJ1ZU15SE44cCtjb0txQlUxR251R0NXVnR0TnE3UjhqcWw2TGJuR2FSdTlBb2phbUNtMUhjVXRVWkRadXRCcVNRZW9WajJoQnRiZ0djSkVUeDRHWEFsanhaK2JzNldqdFhJeFJTTFlxNmd2REFxS0d3a3BTSW9FTTBnUW53U28xU1pncDN0TzhSQnNKZ25lbU1WZHVHK05ucGJVZUovRmRuNk9CVm1lMGhtS0pUcDl0bGpsazRpV3E4cUxmUmlyeHVUSnVRcVBSSnFnZW1WclBxdWdZbEVMYnFmNjJXSFNBU3VJZGYxbzJjTkRNcTkrU1FxYmV4cDJhbktCbzBmc2lHTVNSM0V2VzBFUmZEUmtZVFNQZWYxb0VIYWtMckpWRW9ZRTA5QXcrQ1ZkL3RLQ3daM0lxU0JuNFF5Z2grZm5YTkVlU0J0OFQ0emo3ck1aek5QaktWNzVLYmJMVDlpZG9nVmhJZU5aanJkdmFxc3JzbUVTdW85TWpxNk5DTXE2MUR2d3ZYZHpyMzVHaWhVQnRLbU5SbTYwaE5oMDVPTWZITVpRa3FkTjJyWXR2ZzlMUkppU3FobTBrTzEwQm9aVUJTaVl0REJ0TGhOU3VGRlZ3T25sbytLOXhqaExmRytNNCs2ekdjL1QvQTgvRy9zblpwU1dKQUFBQUFFbEZUa1N1UW1DQyk7Ci0gICAgZGlzcGxheTogbm9uZTsKLSAgfQotICAjY2hyb21lLW1pZCB7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVFBQUFCSUNBWUFBQURSYTFScEFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFCWWxBQUFXSlFGSlVpVHdBQUFBQjNSSlRVVUgzUWNORnljRTV2OWlGUUFBQVF0SlJFRlVPTXZ0a2pHU1d6RU1ReC8wZVlyTTN2OGszdmdxeWNhbFN3bEk4VWZ5bDNPQkZNdEdJZ1VDSUVkNlBCNlJCRUFTcXZmT05TckpYckROYk5rUTh5d0EyeS9TbWF5VytaSUVTVHNpeVFzeG80MHhtTVMyYVVtWWJoZUhwQ1ZkMCtVcUpHR01zZXkzbVV5bGRvVXZsWTNEOXJJTjBLN1diZS9XYloreTF5V3RhVnRycDNWSnpBRVg2WlZqYzJwN2IybXRuWWhOZGw2bTA1cnd0ZlYvbHR4N1h5cEpUcFhlTzdZNWp1T2xjaHpIYVd4eXJKbXVoTGFwcWdJSk9OdjA1K3NyVGhCZ2lRcEJUU1J3R09yM3J3Y2NnV0hVaEo3UDUvWU5sYmQvMlhpTDc4TC9XYWpQMjQwQVFVaWhmbng4NEVESmpDSEtIalRBYmtpbVFEZ0JqQUoxLzNrSEFnRWsvZ0w3MUFIRVdWWFBHUUFBQUFCSlJVNUVya0pnZ2c9PSk7Ci0gICAgZGlzcGxheTogbm9uZTsKLSAgfQotICAjY2hyb21lLXJpZ2h0IHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDWUFBQUJJQ0FZQUFBQ2F3NGVFQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUFCM1JKVFVVSDNRY05GeWdoS21PcW5RQUFERTFKUkVGVWFONmRtc3V5WnNkUmhiL00ydWYwN2JSRVlEeWtQZUlsZUFNaWJOeDkyaTlCZ0VQQmd5QjV4bHZndGdJOFZETkJJNDF4aEdrcFFvd0VSZ3F3M0gwdWUxY3VCbG0xVC8zVnU0WE5pV2o5bDEyWHJNeVZLMWZXTC92NjY2OGxDWGRIRXQvMVoyWW5ueVVoQ1RQYlg4ZG40NXBtUmtSODF6Ny9YVXI1OVB6OC9LOGVQbno0Ny9iVlYxOXBuRGh1MHQrUG14MForUHY4eld2MS9lWm5aMmRudHc4ZVBQaXpaWHc0Ymo1L1AzdnE2Ry9lZVBaaVg5ZmQ5L1huZzYvcmVnNzgvZEluenhQRzkrL2F1SDgzR2pFYlBVYWhqNm0xSG9hNnYxL1g5YytYUHJsUDdJTnFyZnVydTcrMTBXelVrVUh2T3RUb2pQRjFtUGRIU3pkcVBQWG81dm0wNDZiZHEwZmhHcitidlhaazZPZ0FNMk9aQng3aFpEN2huQ3pidHAxNDlXaWQwWU9qeCtlRTZ0OHRNemI2NTlFYmtnNVBQWThadlhwRVFXTkN6Y2syTTRIM0JXZU0xRnIzMS82K0d6aVBtVGVmTTN0Y1l6UW9JdDRhMytjc28yRXpoc1lUekFBZHc5TTlNM3J2aVB2NjgzZGwvT2k5cGRaS0tlVms0cGlWUnlEdTFOSTNtQ3RBUkZCS2VXZUdidHQyeUhWOUhYZG5HVU15R2pTZlpxNEs0MmFqWWJQWHg4MzZYak8ranNqM3Jhd2NGeDVkUGdLOGJ6SjZlR2J6STh5TzNqNHlhTVRvaVdGOThmbDBjNGJOU1hCRUovT3pkMUhTRVk4QkxHT0l4bE9OZUNxbG5IeVd0R05veHRlUk1YMzh1UDQ0Zmt5eVBuZnBwNTh6cXkvczdqc0dqMHJPRWN2UFZhTUQvc2o0SS96V1dsbG1NQi9WdmlPd0h1bXYrZGtSR2M5RU90T1V1NmZIWnRlT0dCdEROLytOZUp3UE5Sc3hsNTRSVTNQSU80eDgyN2Ezd053ZmRyNDVraWI5MldoQWY5K2ZIZW0xSTdGWmEzMXJyK1dJcjQ1a3pyalpzaXh2WldISFljZnFYRkhHY3RNOXRhN3JpZGNpZ21WWldOZjFEdnlsbE4yd2thdG1ISXhDYnk3a1l6YlBPRDJxRkNOMzllZnJ1dDU1ckU4WU0zSSs4VkVOSFBGVmEyVlpsa09TZFhlMmJUdWhtSGRsK1c1b3g4VDhZQ2JEL2wydDlZUXFSaU5Hang4bDFKRWFtVlhLcmk1NmRveVR1emZHaFdkK095TEpqc05SbG8rZUhhWDYzSXk4bGRualFuM2hibUEveWFnR3VzZkc3SndyeFp5dGN4TXlqcG5INzdWeVBFRVA2NWlWczV0bnRwNGxkcDh6bHJHK3g4ejJZOUwxZjkxSnkremVjY0dabjBadjluRkhUSDUwMEJHYk02SE9vak1pV0VaUWYxY043QXV0NjhxeUxDZGVHRk4reHVSWUo3dFh1NWZldFU5RVpDaVBPcDh4bThiVHpMcXBlMmprb0RuenhqQ09hOC9WWkJ5enpHN3Q4Z1E0ZVQrR2RPNEJlMGtaRFRncTVrZWEvMGcwUmdTK3J1c2hOa2JnOTNvNmFxZWVqVWVOUi9mY1VXbWFxV0xidG4zOU1kR1dHY1JIVXJjYjE3RTFqaHN6cTN0dnhOQ3NKdWFFNlZHWk1iZU1LVHJMNkxHZWxWTDJrNDFqeDZ6dVJia25TUzlCSTdXTWREUlR4TGkzeitWa0RsMy83dmIyOW9TM3hob1pFU2RaT200d2hyVy83L05IVDgzVXROemUzdTZjMUkwNk96czd3ZGpjN1BhUXpzVjhKTlNPcDdrOTdJRHZ0RFBEWVRkc3Z0czZQejgvTVhDc20yUEQyZy9UbStWeDBiSFpIVE52ak15UnloMnBhamsvUDBjSVpFQUhMTGdYUUxnNWNrRENBRnNLQ3d0SWVISEFRR0FtU25Fa01BeVpNQmtpbjRsYzNqQkVNNGE3TVpnbzdtQkdoTEQvK00xL3FpQ3FESmZsSWpJQ1lia25qbEV0UUVsODFjQkRZSWFVaTNhRHdvRVE3bUFCdUZNamNIT01RSExNUkxTRGhobEZRazQrazlJaExnZ1pCUkVlVkxOK05Od05DQWhSd2pHTWltR3lQSmxBM293eUl3aUtFbHRXalRCSE5jaElHcExsZUlTNUlUTktRSFZEWVJpQkdVUUkvODNYLzBYVXlvcmhtMkVLQXN2VDFJcUZnd3VzZ2dsQ1dBUlYzU3VHbWROY2h3Z2lSSFdRYWdjSElxQ05KN3doSjZBSTIwQWVVSjNBMGlsUC92UUozM3p6RGR2TkRiV2tPOTFvQXdwaHJhaDd3VkdHMWNITXFTSGtnZ2l3REp0aG1BY2dqSUlWZzVyZldjMWgyQVo3QWdCTHBNRWxNcFFDVXlPU1gvM3JyL2orOS8rRUdvRVFUZ0t4S25EQURSUk9tQ2lXeVNKQmVJTGJNQ3hFTlZod0JJU0NubGRtNEVCRWVpUVJrMUFKcy9ZNUVSMnE3QlgwM3YxN1NRbnVtRGVYUnFYZ0RhU0ExY1NkSUV4UURNK1VndG9BclR5TUlqQUJKVVB0NFMyaFJIRUlnYmRzdFY1TEk0T3VzRHZETWdNTnF3M3NIcWkwSFBjTW90eVJOcXA1QXJubVJya0x1Qm00a0htakRBZUVETUlDazJQRk13b21xakkyeFlTSHNKSVVVbnhvZUJPN3JkUVVKMnFlSms4U0xmZExHdGdXQ291RVZ6RlVHN05YTUFYVkcxWXF5RGRNaFNEZ0Z1VHBhYlVFaVVndVV3M0FpQWFmYmhvUjRFdG1wSmtuS0FyZ3l0TWFCSEJtSW96RUlRNDFNMWRLN3lTR0V2eFE4Tm9JMXcyV0ZoMFhsc1VhRllpbEo1emhwdUdLd0J4WGV5Z0lxeGxyRTZJaDF3S1BnaThMNzk5L1FHY0pvNE01bzlvWURmY0tVWkptRUZkWDEyenJpa2gyeHd3clFBMktPZXFFVFJsQ0dhS2FVRlhMcGpRd3k1RWx1NGR6ZmxiNHV3OC81TVhQL3dFc0U2T1JWWDhoYlZSelRWY040aWMvZWM0SEgzekE3WGFUQzFzUXRaVVhBbTk4WjdJN3V2amlpOCs1ZVB3NHBVaXd1N1RYdW9nTTNjWDdqL2poWC95SUp6OTQ4Z2YvTlBqbGwxL3l5MS8rRS8vejI5OVJDR3JMK0F4SThrclFmaGs1QWIrNkxtckd5REExZHZma3FPdlhOenk3Zk1vbm43dzh1bWphZmFibXNEdW93UFBuejNuejVqb0xpTjlWQ3dJcUpER0h3ZWl4VjU5L3dlTkhGNGl0WlNNSmJHcTYxa2czaDNOMmZzN0Q5eDdqSWRUd0l6dzN0Q3hyWm81NjBVNVU4ZnJORmR1NlVSV0pTOFJtUnVrdG8zc212MDd1eHdKck1hOXVMREpDRzFaS0k4N0FXSkJ2aEVPc0c5V0VoU1ZjV0J0dTFBNjE1ZGEya2JvaVBhUlc0aFNSY0JHRUNsaGcwY1REeWNXZEpSMVhnVWRrck4yaFJxc2xHYXB5ZG8rZmZmZ1JMMzcrSXIxb3B6cnJKSFpEQWlCNDl2eVN2LzNncDl6Y1JpcUxDcHNyalNMcm5wUTI3S0g4L0l0WFBIejRQdFJiUk1vVGFqckJ3NkhrNG84dkx2amhqLzZTSC93L3dmL3h4Ly9JNjI5L3U5ZlBqa3hMSVpmVndtTHdXQmhRcVVxZ1UxTlpsQ3JrUVZSd0dXOXVycmw4OXBSUFhyNzhndzI3dkh6TzlkVlZJMmNJT1lWSUdIa3JZWFZEVVFhUHZYckZvNHRIYkZWN2Rua2p6R1QrNUJqWHduSy9jUEhvdmNSTEk5aE1FM1plTTIrSHRSd1FBVmRYYjFpdnI2bGR6ZllDM3NTblBGQVVaSFcrSEU3V3RxYW1aTDA3YXZyY25ZZ0tLdFI2bS9WS1FUUjluMEpRalpqN0txRDJMQ0xZMmg0cXVxc0tOVVdBNUJRUGF0akFZMWhUcHVBTzJpcWxHTFYxRVFKOEM4N3ZuZk96ano3aXhTOCs1dmY5M3krc0ZlWm5sNWY4OUsvL2h0dHR3MWJBVzVkMDVyQUs5MGF3ak9ELy9CVVBIdHluYmxtSW5YU3R5VUhKUjNqdzNzVjcvUGpwVTU0OGVYSkFydlovZ3YvRng3L2c5YmZmdHVnNE5mVkthN2J5ZDhwTjlaVDVJOXJGU00vd1NQRlhyT241VGJ5NXZ1YnAweC96OHVVL3QxSng1L0g5djNiMy9xNFlHSmZQTHJsK2MwUGRlOGxnRVd4TjB6bkcxakc2ZSt6ZlhuSHZ3UU5FVGRtTUlOcWxTRWVaSjFEdm45M2o0dUppTCs2anY4VFFPOUw2bHlhOWYvZnRhMjYyMjh3b2RWd1pib0ZVMmdMYnFicWdsWkxhcnpUYmRwdkJFaFd4TkpJMWJxNXV1VjYvU1JDSHQzNUF5QXdQbzVhS1p6bElIUmI1U3FUUjFuUlNuaXRRdEM0cGhObHlxdmxUcHBSVWxtWkVRSml6aENFcmJZU2E1N0o4U05rTFJtM3M3UlY1NEFIeW1qSzljWWpVeWcrd3FWOFhSQ3RmZHplYStJWmlGSW9Tc0ZLQkVtMVNFMjZTcFhaQ2VEaDdnOVA2NFI0U3JVMlprQzFidGVhNVRNRHNxQ0o1VWZVdVp3TzFCbG5aNnRrZ3JXV1dxak9ncWhKbXNMV2EyZG93c0taSzBudUtsTVdva1dXQm9CSWVpSnBaRjZDcWh0bk1kSFNIVzZQZFpMZmlqaklTdTJIWDExZEVqVVJyVHphM0J0eW16YUxWNU5ad0VHUVlXNGVrYUxkQ2tYU0RSQ2tpZHIybi9YS0dVbE9LanhjNm9YWk4wSDRaZWZYclZ4UTNhdFRzakQxbGtKcElETkV3bFNDUlo1M3JwNHpWaU5pUXRxd0VTdEhUMVlvVU9hY2xTWTFNbW1qWENlbE56MlExVDVMLzdMUFBZREVlUFhxWU5hMEVOSG5kN3hlS0tVRmlBTzJIQk05N0RaTW9TMXByTW1RTHJxQ0U4dVpISWdWRE5BRnBGRVc3Qm5HS1dRdG5ZSjZHT21MNTQrOTlEMEpFemZUMWFsUnppa0h0ZGErMS80bnN4ay9WcVFabWxYWHpKTVVpcUZ1N25ySk1lOHYyTGh0ZXRldUF2RWNyVnFrMW0rT3dkbjloN1pZU0U2V0FJcmtqUENWSUZ1YThzMGpoV0hmaFo1WVpaNnJaTnhvcGxacDNjbGcydVVTS0FjbXdZcGdxVXMxaUZJNVo0cnIzbWxpcTNJVnFWRGJ3TTlDR2thbzFyTjFJUjZGNHhlcENFRmh0MXdBaElLalJOSDBEdjZ5bTVsSHJFUXc4SlNsVXRhcGdoSEorcWlLMTNPeVo2eXlmL3N1blNZcXlWdVBhdlZWcTNidlNnckt4Y0tWR1U3L3MxVTVvdlh6MVc1djlmdFBWZXQ2OGNiU2VoUm82NVpOZlV1Qi9BV0hMY2hWVVdKdEZBQUFBQUVsRlRrU3VRbUNDKTsKLSAgICBkaXNwbGF5OiBub25lOwotICB9Ci0gIDwvc3R5bGU+Ci0KLSAgPGRpdiBpZD0iaGVhZGVyIj48L2Rpdj4KLSAgPGlucHV0IGlkPSJzdGFja2luZy1kaXN0YW5jZS1zbGlkZXIiIG1heD0iNDAwIiBtaW49IjEiIHN0ZXA9IjEiIHR5cGU9InJhbmdlIi8+Ci0gIAotICA8Y2FudmFzIGlkPSJjYW52YXMiPjwvY2FudmFzPgotICA8aW1nIGlkPSJjaHJvbWUtbGVmdCIvPgotICA8aW1nIGlkPSJjaHJvbWUtbWlkIi8+Ci0gIDxpbWcgaWQ9ImNocm9tZS1yaWdodCIvPgotPC90ZW1wbGF0ZT48dGVtcGxhdGUgaWQ9InRyLXVpLWUtY2hyb21lLWNjLWxheWVyLXRyZWUtcXVhZC1zdGFjay12aWV3LXRlbXBsYXRlIj4KLSAgPHN0eWxlPgotICAjaW5wdXQtZXZlbnQgewotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUdRQUFBQmtDQVlBQUFCdzRwVlVBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQU1ud0FBREo4QlBqYTM5d0FBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUF5TlNVUkJWSGljN1oxUFRDUFhIY2MvNHdXV1ZiSk4yY0pTTFZxaVFKdUdwb0lHRVZXUmVvQk5JbElGNVJDUlN5c09LOUVia3NVZU9ITElJUWNVTGJMRUVZazdvcWR1RDZnU1JvcVVFeUs3ZENPYWJPSGdoQ2lBRS9KbnRRdGVzSHQ0ZnVNM3oyK01aenkyeDhaZmFUVGpOK1B4NC9maDkvN1BiNnhNSmtORDRWR2syaGxveUtrR2tKQ3BBU1JrYWdBSm1ScEFRcVlHa0pDcEFTUmthcXAyQnZ6S3NpemYzdzF6MzhzS2MrWlVhUUN1QUZlQjU3UDdxNEFGL0t4c2o0R25McmZMKzZQRFlvZlFBc2tDYUFKNmdKZUI2K1FBRk92WnB3Z3dQd09Id0NOZ041dXUvK0gyNTJyYUpIUkFMTXU2Z2dEd0N0QUxOQWY4RTg4UVVMNUFBSHFTVFZjTlVUVTRvUUJpV1ZZek1JaUEwRTNsR2h0cDRDc0VuUHRBQ2dGREdxWGlZS29LeExLc0NQQWFNSXdvamx6VjF0WkdWMWNYSFIwZGRIUjAwTjdlYmg5M2RIUUFjSGg0YUcvSlpOSSszdHZiNCtqbzZMenNQQVkrUVlBNUl4OUtCc29QcG1wQUxNdDZCWGdUYUhlN3ByZTNsNUdSRVVaR1J1anY3L2Zkc3Nwa01teHRiUkdQeDRuSDQrenM3QlM2L0h0Z0hmZ3ZPVzl4ZUUwNWJWWnhJSlpsZFFOdkFUZjFjNUZJaE1IQlFZYUhoN2wxNnhiZDNkMWx5VU1pa1dCdGJZMzE5WFUyTnpkSnA5T215NzRCMW9BRUFvYTh5SVpURHR0VkRJaGxXWmVCOTREZm04NlBqbzRTalViTEJzRk5pVVNDV0N6RzZ1cXEyeVZmQXY5Q05LSFRsTmxiS2dMRXNxeHJ3RitCWCtubmhvYUd1SFBuRHYzOS9XWFBSeUZ0YlcxeDkrNWROalkyVEtlUGdCWGdPd1FVRlV5ZzNsSjJJSlpsOVFBZkFLMXFlazlQRDlQVDA0eU1qSlQxOTcwcUhvOHpQei9QN3U2dWZ1b0UrQ2V3UXc2S3cyT0NzR1ZaZ1ZpVzlTZGdGTkdMQnFDMXRaV1ptUm5HeDhlSlJNSTVsSlpPcDFsWldXRnVibzdqNDJQMVZBWlI0VzhnV21KbjVLQkFBRVZZV1lCa203UHZJdm9XdGpvN08xbFlXS0N2cnkvdzN5eUh0cmUzbVpxYVluOS9Yei8xRVBnM290K2lRc2xRSXBUQWdXUmgvQTB4NUdGcllHQ0FXQ3hHZTd0ckt6ZVVTaWFUUktOUkhqeDRvSi82Q3ZnSG9pZ0xERW81eW94MzBXQ01qWTJ4dExSVWN6QUEydHZiV1ZwYVlteHNURDkxRTNnYk1iVFRCRnhDRk0wV1lQbnRNd1hxSWRrNjR4M2xNOUZvbE1uSnljQitvNXBhWEZ3a0ZvdnBsZmNuaURybE5MdkpYcjR2VHduTVE3S3RxVkUxclo1Z0FFeE9UaEtOUnZYa1B5TUdRYVdYbE9RcGdRREo5ak0rUUdsTmpZMk4xUlVNcWNuSlNiMzRzaENsd25WRThhVkNBWTlRU2k2eXNqM3d2Nk4wK2dZR0JsaGFXcUtscGFXa2U0ZFZxVlNLMjdkdjZ4WDlqOEF5WXBEeUdhTDRzdnNxeGRvNUNBOTVEd1ZHWjJjbnNWaXNibUVBdExTMEVJdkY2T3pzVkpOZlFJelJsVlRKbHdRa08xQm9qMDIxdHJheXNMQlFrNjBwcjJwdmIyZGhZWUhXVnNjQXhFdUkxcGNLSllJSEtLVjZ5RnZxaDVtWm1acnA5QVdodnI0K1ptWm05T1EzTUFNcFNyNkJaT2N6N0NIMG5wNGV4c2ZIL2Q2dVpqVStQazVQajZQYmRSMzRMVDY5eEJlUWJHLzhUVFZ0ZW5vNnRHTlQ1VlFrRW1GNmVscFBmaDI0VEs3VkZhRklLSDR0K0JyS1ROL1EwRkRvUm0wcnFaR1JFWWFHaHRTa1h5RHFWczlGbDJjZzJRVUp3MnJhblR0M3ZONm03bVN3d1I4UjY4ZFVMem0zMWVYSFF3WlJGaVNNam81V2ZYSXBET3J2NzJkMDFERlFjUVhvUTNoSTBWN2lCOGdyOXBjakVkTlF3b1ZWTkJyVjY5RVhjYW5jY2ZFU1QwQ3lpOWpzU2UvQndjR0t6NEdIV2QzZDNRd09PcWFBT29Ebk1GZnVSbm4xa0pmVjd3d1BEM3Y4ZXYxTHM0bUYrQWMyRlZzVzVDOGFMeHBJOW91L1U5TnUzYnJsT2NQMUxvTk5idUplaitSNWloY1BhUUorSXovMDl2WTJpaXVEdXJ1NzZlM3RWWk4ramVpVHlGSGdnc1dXRnlBOUtBdWZMM0svNHp4cHRya0UzTUNsWWtjRFV4UVFVM0hWQU9JdWcyMjZ5SGxJWHZOWHJVZThlRWlIUEdocmEydjBQUXFvdjcrZnRyWTJOZWtGekVWV1NYV0kzUm5zNnVvcTZaR3llcGRsV1hSMWRhbEpyUlR3RUZWZWdGeVZCM0w1ZjBQdTBtelVpckMxQ3NQb0pjVUN1WUx5R0ZrRHlQblNiQlFoQjhWVVpObTk5bk9CWkMrOHFxWmRoQm5CVW1XdzBSWE1RSHg1aU9QcHByQjV5TWJHQnA5OTlsbTFzK0dRd1VaWEtGQlVTUlVMeE9FaFlRTnkvLzU5SGo1OFdPMXNPT1FDcEdBZkJPb0VTQmhWd0VOTW02MWluL2NPWFJ0M2YzK2YwOU5UQUg3NjZTZGFXbHJZMjlzRG9MbTVtZXZYcjFjemUyNXk5UXlwWW9IOHJINDRQRHdzSVUvQjZLT1BQckx6Y1hCd1FDUVM0ZE5QUHdYZ3hvMGJmUHp4eDlYTW5zbEdKN2g3aGtYMkdaT2FCUktMeGV6anhjVkZMbCsrek1URVJCVno1SlRCUnNlR3kzelhJYUVERW5hNWVBZ0VOSVg3V1AyUVRDYUwvTnJGbGNGRzBrTUtMdkl0dHNoNmlsZzgzQVRoODVEMzMzOC9kR05ybW8zU2lBWFl1dkxnZUltWDlSajRwZUhIcXE1cjE2NVZPd3Q1MG14MGdqa3FoSlQ5MmN2Z29sMlA3TzN0aFNhK1ZCaVZ5V1RzSm5oV3N2NHdCclpSNVFXSWpmem82SWl0clMwdmVieFEydHJhMG9QZFBDYmZRNHplNGdYSUkvVkRQQjczazljTElZTnREbkFDVUo5dGQ4Z0xrRjJVaXFrQnhGMmFiYzZBSk9ib0QzbFF6Z1dpMUJXbkNDZ0E3T3pza0Vnay9PYTVicFZJSlBUd1Q5K1JDeW1vZTRqdklrdCs4UXMxY1cxdHpWZW02MWtHbThqaUtrMStnSUU4ZVYyNStJaGMzQ2pXMTljOWZyMytwZGtrZ3dDaXdzaUwrb0R5VUtoWElFOFFJU1VBMk56Y2JCUmJpaEtKQkp1Ym0yclNENGg0S0xMdU9NTVFSVWlWbjlYdmRyR1ZUcWNkZzN3WFhiRllUSTlPcDNxSHVxbFFIQ29LU05hZEpOSDdLR05icTZ1cmpUNEpvdStoUmFWTElVb1RFNHpBNmhENVE1K29DWGZ2M3ZWeG0vcVN3UVk3aUc2QzlCQVpCeVd2NmF1T2V2Z0JJcjNrZTVtd3NiRnhvZnNsOFhoY0R3MzRCUGdhWVhnMUtJMHA2SmxEUlFQUmlxMHpSR1ExVy9QejgyN1JQZXRhNlhTYStmbDVQZmwvNUx4QzNRckNBUDlQNFdZUWNXMi9rUW03dTd1c3JLejR2RjN0YW1WbFJZL1ArQ1B3TFRsdmNBTmlETi9rQ1lqaUpYTHY2QVhOemMyeHZiM3Q1WlkxcmUzdGJlYm01dlJrMlZjN0pSZUV4Z1REcUZJOEpJTUlNdnlsVER3K1BtWnFhdXBDekNnbWswbW1wcWIwSUprSGlMcFY5WXBuNU1BNG9KaW1NRHdEMGVxU0RDTElzRDNXdkwrL1R6UWFKWlZLZWIxMXpTaVZTaEdOUnZYZ21FK0F6OGtWVTgrVXJTanZnTktDejhqeG1hZUlJTU55RW9ZSER4NHdPenRid3EzRHJkblpXVDFXMWltaTVYbUNFMFlLbHlMTGJZTFBGeERsWmhMS2Q0Z2d3L2FKZS9mdXNiaTQ2T2Yyb2RiaTRpTDM3dDFUa3pMQWZ4QXpxbWM0UGNQa0lRVlZxb2ZJZlJyUkVWcFhMNGpGWW5VRlJRYkIxUFFJTVpzcVlhU1VyYWlXbGFxU1F2eGxWM3JJRmQyWEVJc20vZ0w4UWIxdWJHeU1Eei84c0dhanpLVlNLV1puWjNYUEFOSHMveHhoK0JTaXlEck9iaWZraXJDaWlpc0lEb2dLNVRJd2p2WTZpam9NcEh3RWJDSkFQQ01IUUlXaHhsNHNLbXhzRUVFd3dRbWxDUUhsYmVCVjlkbzZDalgrRGJCTkRvYnFIU1lZUlFmQ0xEbmltS0VaZkpiTjBDcGlFTkxPeGY3K1BoTVRFeXd2TDRkNm1DV2RUck84dk16RXhJUU9JNFBvZDMxT1Bvd1R6SFdIcHo4MGtNald5cXBCNlNYU1U1b1JRWWJmQVJ3VlNBMitydUlVMFpyU0svQVRuRUJreThveHFsdXNuUU1MTmE0VlhSYTVTcjRKRVlkd0RQRzh0a00xOGtLWEorVG1nV1EvUTNxRERzTlRKYTRyNk5qdmtBL2xFc0pUbmtkRU1YM0o5TjBRdi9Mb0FGRkV5UmFUYkZGSkdQSzRaQmhRbnRkVmdEdVVaa1RyNncyRTF6Z1VzcGVDL1lqb1kzeVBjemdrWmRoazU2OGtHRkMrRjdxQUU0cXNVMlM5MG93SXBmbzZJbUNrVVZWNmJkNFR4SHpHdHpnbm1OVGhFTjBySEswcFNuZ0ZVdGxlZWVRQ1JhMVhtaEhONDFlQkFjUkRrYTZxd0lzbFU0alJocS9Kbjh0UWgwSFVpdHR0V3RiM1l2Unl2NE1LY2s4TXlVZUNaUkdtZW9zTUdQa2lJc2hOcFI3MnlDQ1c2aHdnRmlUSTFwRTB0RFM2YWJEUTg3QklNYXJFVzlyQUdVRk5Ob3QxTUhML0hDSXMzazFFOEs5TEFXZnBEREVZZXBEZDVMb3BkYzViOVF4OXIxNG54L0VnQUJoUUFTQ1ExMDlSaXpBZGpBcEg5dmh2SU9KTnZZQ0lGeUpqaGhTak5MbG02V01FZ0NTNXRiYnFBamJUbEtzS3d3VENIbUN0bWZjWTJqL2toQ0wzYXV3UE5YeVJHcU93aWZ6UVJxMklZazdkd0RsOGNZd3dwam9xclJyU0RZWUtwZENhcXBMckM1T3E4UzVjK3hDengraHdUSnRiRUJkVDNhTWJVQnBWWFd2cnRzbnorb3AxQ05BclZGWGxiZEV1M21JQ293SlM5K2NCc1IvRXh4MklhUUcwYWYxdEhnZ0kxaXRVVmZ0OTZ2YWhzaS9rT2FiUHhRQ1JlOTNJYVczVEFWUU1oRlJWZ2RpWk1JT1JleE9nUWlEa1h2M0RkQU9iUE1ZSWdBcUJrQW9GRUNtdEorNEdwOUF4MnJFT1JlNTF3K3NRN09PSzE3RmhBcUxLQlk1NjdBYkJUU1k0cnNmVnNrdG9nYWdxQUNmdlVwZDB0ei9Ta1I0R1c5UUVFRlZCaHRBSTQ5OWVjMERxWGY4SDhmNFgxMGpmMllBQUFBQUFTVVZPUks1Q1lJST0pOwotICAgIGRpc3BsYXk6IG5vbmU7Ci0gIH0KLSAgPC9zdHlsZT4KLSAgPGltZyBpZD0iaW5wdXQtZXZlbnQiLz4KLTwvdGVtcGxhdGU+PHRlbXBsYXRlIGlkPSJ0ci11aS1lLWNocm9tZS1jYy1waWN0dXJlLWRlYnVnZ2VyLXRlbXBsYXRlIj4KLSAgPGxlZnQtcGFuZWw+Ci0gICAgPHBpY3R1cmUtaW5mbz4KLSAgICAgIDxkaXY+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJ0aXRsZSI+U2tpYSBQaWN0dXJlPC9zcGFuPgotICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+PC9zcGFuPgotICAgICAgPC9kaXY+Ci0gICAgICA8ZGl2PgotICAgICAgICA8aW5wdXQgY2xhc3M9ImZpbGVuYW1lIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ic2twaWN0dXJlLnNrcCIvPgotICAgICAgICA8YnV0dG9uIGNsYXNzPSJleHBvcnQiPkV4cG9ydDwvYnV0dG9uPgotICAgICAgPC9kaXY+Ci0gICAgPC9waWN0dXJlLWluZm8+Ci0gIDwvbGVmdC1wYW5lbD4KLSAgPHJpZ2h0LXBhbmVsPgotICAgIDx0ci11aS1lLWNocm9tZS1jYy1waWN0dXJlLW9wcy1jaGFydC12aWV3PgotICAgIDwvdHItdWktZS1jaHJvbWUtY2MtcGljdHVyZS1vcHMtY2hhcnQtdmlldz4KLSAgICA8cmFzdGVyLWFyZWE+PGNhbnZhcz48L2NhbnZhcz48L3Jhc3Rlci1hcmVhPgotICA8L3JpZ2h0LXBhbmVsPgotPC90ZW1wbGF0ZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1zdGFjay1mcmFtZSI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7Ci0gICAgICBhbGlnbi1pdGVtczogY2VudGVyOwotICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXNpbmdsZS1ldmVudC1zdWItdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGZsZXg6IDAgMTsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgfQotICAgICN0YWJsZSB7Ci0gICAgICBmbGV4OiAwIDEgYXV0bzsKLSAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7Ci0gICAgICBmb250LXNpemU6IDEycHg7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj4KLSAgICA8L3RyLXVpLWItdGFibGU+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWUtY2hyb21lLWNjLXJhc3Rlci10YXNrLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgIH0KLSAgICAjaGVhZGluZyB7Ci0gICAgICBmbGV4OiAwIDAgYXV0bzsKLSAgICB9Ci0gICAgdHItdWktYi10YWJsZSB7Ci0gICAgICBmb250LXNpemU6IDEycHg7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0KLSAgICA8ZGl2IGlkPSJoZWFkaW5nIj4KLSAgICAgIFJhc3Rlcml6YXRpb24gY29zdHMgaW4KLSAgICAgIDx0ci11aS1hLWFuYWx5c2lzLWxpbmsgaWQ9ImxpbmsiPjwvdHItdWktYS1hbmFseXNpcy1saW5rPgotICAgIDwvZGl2PgotICAgIDx0ci11aS1iLXRhYmxlIGlkPSJjb250ZW50Ij48L3RyLXVpLWItdGFibGU+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PHN0eWxlPgotLnRyLXVpLWUtY2hyb21lLWdwdS1zdGF0ZS1zbmFwc2hvdC12aWV3e2JhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ0FBQUFBZ0NBWUFBQUJ6ZW5yMEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFaaVMwZEVBRXdBVEFCTVlxcDNLQUFBQUFsd1NGbHpBQUFMRXdBQUN4TUJBSnFjR0FBQUFBZDBTVTFGQjkwSkNRc0JNQ0g3WnFZQUFBQVpkRVZZZEVOdmJXMWxiblFBUTNKbFlYUmxaQ0IzYVhSb0lFZEpUVkJYZ1E0WEFBQUFVRWxFUVZSWXcrM1d3UWtBSUFpRjRWYzBoVE81L3dpdVVSdllJY1FPdjFjUlBoRGxEWGZmU3NyTXNyWWlRaS96VTgwRkFBQ0FWWDNudDNsV0FBQkEveCtvdm5QeUFBQUE1QUh5QUFBQTN3TU9kMzRYZCtsc2dsZ0FBQUFBU1VWT1JLNUNZSUk9KTtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6YXV0b30udHItdWktZS1jaHJvbWUtZ3B1LXN0YXRlLXNuYXBzaG90LXZpZXcgaW1ne2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjE2cHggYXV0byAxNnB4IGF1dG99Ci08L3N0eWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLWxheW91dC10cmVlLXN1Yi12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICB0ci11aS1iLXRhYmxlIHsKLSAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8ZGl2IGlkPSJjb250ZW50Ij48L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktZS1zLWZyYW1lLWRhdGEtc2lkZS1wYW5lbCI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIHdpZHRoOiA2MDBweDsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgfQotICAgIHRhYmxlLWNvbnRhaW5lciB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgb3ZlcmZsb3c6IGF1dG87Ci0gICAgICBmb250LXNpemU6IDEycHg7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPGRpdj4KLSAgICAgIE9yZ2FuaXplIGJ5OgotICAgICAgPHNlbGVjdCBpZD0ic2VsZWN0Ij4KLSAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibm9uZSI+Tm9uZTwvb3B0aW9uPgotICAgICAgICA8b3B0aW9uIHZhbHVlPSJ0cmVlIj5GcmFtZSBUcmVlPC9vcHRpb24+Ci0gICAgICA8L3NlbGVjdD4KLSAgICA8L2Rpdj4KLSAgICA8dGFibGUtY29udGFpbmVyPgotICAgICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj48L3RyLXVpLWItdGFibGU+Ci0gICAgPC90YWJsZS1jb250YWluZXI+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWItY2hhcnQtbGVnZW5kLWtleSI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgICAjY2hlY2tib3ggewotICAgICAgICBtYXJnaW46IDA7Ci0gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKLSAgICAgICAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wOwotICAgICAgfQotICAgICAgI2xhYmVsLCAjbGluayB7Ci0gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwotICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgICB9Ci0gICAgPC9zdHlsZT4KLQotICAgIDxpbnB1dCBjaGVja2VkPSIiIGlkPSJjaGVja2JveCIgdHlwZT0iY2hlY2tib3giLz4KLSAgICA8dHItdWktYS1hbmFseXNpcy1saW5rIGlkPSJsaW5rIj48L3RyLXVpLWEtYW5hbHlzaXMtbGluaz4KLSAgICA8bGFiZWwgaWQ9ImxhYmVsIj48L2xhYmVsPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjx0ZW1wbGF0ZSBpZD0iY2hhcnQtYmFzZS10ZW1wbGF0ZSI+Ci0gIDxzdmc+IAotICAgIDxnIGlkPSJjaGFydC1hcmVhIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgotICAgICAgPGcgY2xhc3M9InggYXhpcyI+PC9nPgotICAgICAgPGcgY2xhc3M9InkgYXhpcyI+PC9nPgotICAgICAgPHRleHQgaWQ9InRpdGxlIj48L3RleHQ+Ci0gICAgPC9nPgotICA8L3N2Zz4KLTwvdGVtcGxhdGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWUtcy1pbnB1dC1sYXRlbmN5LXNpZGUtcGFuZWwiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgIH0KLSAgICB0b29sYmFyIHsKLSAgICAgIGZsZXg6IDAgMCBhdXRvOwotICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOwotICAgICAgZGlzcGxheTogZmxleDsKLSAgICB9Ci0gICAgcmVzdWx0LWFyZWEgewotICAgICAgZmxleDogMSAxIGF1dG87Ci0gICAgICBkaXNwbGF5OiBibG9jazsKLSAgICAgIG1pbi1oZWlnaHQ6IDA7Ci0gICAgICBvdmVyZmxvdy15OiBhdXRvOwotICAgIH0KLSAgICA8L3N0eWxlPgotCi0gICAgPHRvb2xiYXIgaWQ9InRvb2xiYXIiPjwvdG9vbGJhcj4KLSAgICA8cmVzdWx0LWFyZWEgaWQ9InJlc3VsdF9hcmVhIj48L3Jlc3VsdC1hcmVhPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1iLWhlYWRpbmciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNDMsIDI0NSwgMjQ3KTsKLSAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICM4ZThlOGU7Ci0gICAgICBkaXNwbGF5OiBibG9jazsKLSAgICAgIGhlaWdodDogMTAwJTsKLSAgICAgIG1hcmdpbjogMDsKLSAgICAgIHBhZGRpbmc6IDAgNXB4IDAgMDsKLSAgICB9Ci0KLSAgICBoZWFkaW5nIHsKLSAgICAgIGRpc3BsYXk6IGJsb2NrOwotICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwotICAgICAgdGV4dC1hbGlnbjogbGVmdDsKLSAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwotICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICB9Ci0KLSAgICAjYXJyb3cgewotICAgICAgZmxleDogMCAwIGF1dG87Ci0gICAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKLSAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7Ci0gICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKLSAgICAgIHdpZHRoOiA4cHg7Ci0gICAgfQotCi0gICAgI2xpbmssICNoZWFkaW5nX2NvbnRlbnQgewotICAgICAgZGlzcGxheTogbm9uZTsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8aGVhZGluZyBpZD0iaGVhZGluZyIgb24tY2xpY2s9Im9uSGVhZGluZ0RpdkNsaWNrZWRfIj4KLSAgICAgIDxzcGFuIGlkPSJhcnJvdyI+PC9zcGFuPgotICAgICAgPHNwYW4gaWQ9ImhlYWRpbmdfY29udGVudCI+PC9zcGFuPgotICAgICAgPHRyLXVpLWEtYW5hbHlzaXMtbGluayBpZD0ibGluayI+PC90ci11aS1hLWFuYWx5c2lzLWxpbms+Ci0gICAgPC9oZWFkaW5nPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxzdHlsZT4KLS50cmFjay1idXR0b257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuNSk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMSk7Y29sb3I6cmdiYSgwLDAsMCwwLjIpO2ZvbnQtc2l6ZToxMHB4O2hlaWdodDoxMnB4O3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEycHh9LnRyYWNrLWJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMS4wKTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC41KTtib3gtc2hhZG93OjAgMCAuMDVlbSByZ2JhKDAsMCwwLDAuNCk7Y29sb3I6cmdiYSgwLDAsMCwxKX0udHJhY2stY2xvc2UtYnV0dG9ue2xlZnQ6MnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoycHh9LnRyYWNrLWNvbGxhcHNlLWJ1dHRvbntsZWZ0OjNweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4fQotPC9zdHlsZT48c3R5bGU+Ci0ub2JqZWN0LWluc3RhbmNlLXRyYWNre2hlaWdodDoxOHB4fQotPC9zdHlsZT48c3R5bGU+Ci0udHItdWktZS1zeXN0ZW0tc3RhdHMtaW5zdGFuY2UtdHJhY2t7aGVpZ2h0OjUwMHB4fS50ci11aS1lLXN5c3RlbS1zdGF0cy1pbnN0YW5jZS10cmFjayB1bHtsaXN0LXN0eWxlOm5vbmU7bGlzdC1zdHlsZS1wb3NpdGlvbjpvdXRzaWRlO21hcmdpbjowO292ZXJmbG93OmhpZGRlbn0KLTwvc3R5bGU+PHN0eWxlPgotLnRyLXVpLWUtc3lzdGVtLXN0YXRzLXNuYXBzaG90LXZpZXcgLnN1YmhlYWR7Zm9udC1zaXplOnNtYWxsO3BhZGRpbmctYm90dG9tOjEwcHh9LnRyLXVpLWUtc3lzdGVtLXN0YXRzLXNuYXBzaG90LXZpZXcgdWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIDVweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MDtwYWRkaW5nLWxlZnQ6MTVweH0udHItdWktZS1zeXN0ZW0tc3RhdHMtc25hcHNob3QtdmlldyBsaXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgNXB4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtjdXJzb3I6cG9pbnRlcjtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZy1sZWZ0OjE1cHh9Ci08L3N0eWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1lLXY4LWdjLW9iamVjdHMtc3RhdHMtdGFibGUiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIHRyLXVpLWItdGFibGUgewotICAgICAgZmxleDogMCAwIGF1dG87Ci0gICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwotICAgICAgbWFyZ2luLXRvcDogMWVtOwotICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgIH0KLSAgICAuZGlmZiB7Ci0gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgICBtYXJnaW4tdG9wOiAxZW07Ci0gICAgICBtYXJnaW4tbGVmdDogMC44ZW07Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPGRpdiBjbGFzcz0iZGlmZiIgaWQ9ImRpZmZPcHRpb24iPgotICAgICAgRGlmZgotICAgIDwvZGl2PgotICAgIDx0ci11aS1iLXRhYmxlIGlkPSJkaWZmVGFibGUiPjwvdHItdWktYi10YWJsZT4KLSAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktZS1tdWx0aS12OC1nYy1zdGF0cy10aHJlYWQtc2xpY2Utc3ViLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDwvc3R5bGU+Ci0gICAgPHRyLXVpLWUtdjgtZ2Mtb2JqZWN0cy1zdGF0cy10YWJsZSBpZD0iZ2NPYmplY3RzU3RhdHMiPgotICAgIDwvdHItdWktZS12OC1nYy1vYmplY3RzLXN0YXRzLXRhYmxlPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1lLXY4LWljLXN0YXRzLXRhYmxlIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICB0ci11aS1iLXRhYmxlIHsKLSAgICAgIGZsZXg6IDAgMCBhdXRvOwotICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKLSAgICAgIG1hcmdpbi10b3A6IDFlbTsKLSAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICB9Ci0gICAgI3RvdGFsIHsKLSAgICAgIG1hcmdpbi10b3A6IDFlbTsKLSAgICAgIG1hcmdpbi1sZWZ0OiAwLjhlbTsKLSAgICB9Ci0gICAgI2dyb3VwT3B0aW9uIHsKLSAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICAgIG1hcmdpbi10b3A6IDFlbTsKLSAgICAgIG1hcmdpbi1sZWZ0OiAwLjhlbTsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nLXJpZ2h0OiAyMDBweCI+Ci0gICAgICA8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDsgIGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMXB4OyBwYWRkaW5nOjIwcHgiPgotICAgICAgICAwIHVuaW5pdGlhbGl6ZWQ8YnIvPgotICAgICAgICAuIHByZW1vbm9tb3JwaGljPGJyLz4KLSAgICAgICAgMSBtb25vbW9ycGhpYzxici8+Ci0gICAgICAgIF4gcmVjb21wdXRlIGhhbmRsZXI8YnIvPgotICAgICAgICBQIHBvbHltb3JwaGljPGJyLz4KLSAgICAgICAgTiBtZWdhbW9ycGhpYzxici8+Ci0gICAgICAgIEcgZ2VuZXJpYwotICAgICAgPC9kaXY+Ci0gICAgPC9kaXY+Ci0gICAgPGRpdiBpZD0idG90YWwiPgotICAgIDwvZGl2PgotICAgIDxkaXYgaWQ9Imdyb3VwT3B0aW9uIj4KLSAgICAgIEdyb3VwIEtleQotICAgIDwvZGl2PgotICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1lLW11bHRpLXY4LWljLXN0YXRzLXRocmVhZC1zbGljZS1zdWItdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8dHItdWktZS12OC1pYy1zdGF0cy10YWJsZSBpZD0idGFibGUiPgotICAgIDwvdHItdWktZS12OC1pYy1zdGF0cy10YWJsZT4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktZS12OC1ydW50aW1lLWNhbGwtc3RhdHMtdGFibGUiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgICN0YWJsZSwgI2JsaW5rX3Jjc190YWJsZSB7Ci0gICAgICBmbGV4OiAwIDAgYXV0bzsKLSAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7Ci0gICAgICBtYXJnaW4tdG9wOiAxZW07Ci0gICAgICBmb250LXNpemU6IDEycHg7Ci0gICAgfQotCi0gICAgI3Y4X3Jjc19oZWFkaW5nLCAjYmxpbmtfcmNzX2hlYWRpbmcgewotICAgICAgICBwYWRkaW5nLXRvcDogMWVtOwotICAgICAgICBmb250LXNpemU6IDE4cHg7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPGgxIGlkPSJ2OF9yY3NfaGVhZGluZyI+PC9oMT4KLSAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KLSAgICA8aDEgaWQ9ImJsaW5rX3Jjc19oZWFkaW5nIj48L2gxPgotICAgIDx0ci11aS1iLXRhYmxlIGlkPSJibGlua19yY3NfdGFibGUiPjwvdHItdWktYi10YWJsZT4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktZS1tdWx0aS12OC10aHJlYWQtc2xpY2Utc3ViLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHRyLXVpLWEtbXVsdGktdGhyZWFkLXNsaWNlLXN1Yi12aWV3IGlkPSJjb250ZW50Ij48L3RyLXVpLWEtbXVsdGktdGhyZWFkLXNsaWNlLXN1Yi12aWV3PgotICAgIDx0ci11aS1lLXY4LXJ1bnRpbWUtY2FsbC1zdGF0cy10YWJsZSBpZD0icnVudGltZUNhbGxTdGF0cyI+PC90ci11aS1lLXY4LXJ1bnRpbWUtY2FsbC1zdGF0cy10YWJsZT4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktZS1zaW5nbGUtdjgtZ2Mtc3RhdHMtdGhyZWFkLXNsaWNlLXN1Yi12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDx0ci11aS1hLXNpbmdsZS1ldmVudC1zdWItdmlldyBpZD0iY29udGVudCI+PC90ci11aS1hLXNpbmdsZS1ldmVudC1zdWItdmlldz4KLSAgICA8dHItdWktZS12OC1nYy1vYmplY3RzLXN0YXRzLXRhYmxlIGlkPSJnY09iamVjdHNTdGF0cyI+PC90ci11aS1lLXY4LWdjLW9iamVjdHMtc3RhdHMtdGFibGU+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWUtc2luZ2xlLXY4LWljLXN0YXRzLXRocmVhZC1zbGljZS1zdWItdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8dHItdWktZS12OC1pYy1zdGF0cy10YWJsZSBpZD0idGFibGUiPgotICAgIDwvdHItdWktZS12OC1pYy1zdGF0cy10YWJsZT4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktZS1zaW5nbGUtdjgtdGhyZWFkLXNsaWNlLXN1Yi12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDx0ci11aS1hLXNpbmdsZS10aHJlYWQtc2xpY2Utc3ViLXZpZXcgaWQ9ImNvbnRlbnQiPjwvdHItdWktYS1zaW5nbGUtdGhyZWFkLXNsaWNlLXN1Yi12aWV3PgotICAgIDx0ci11aS1lLXY4LXJ1bnRpbWUtY2FsbC1zdGF0cy10YWJsZSBpZD0icnVudGltZUNhbGxTdGF0cyI+PC90ci11aS1lLXY4LXJ1bnRpbWUtY2FsbC1zdGF0cy10YWJsZT4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1hbGVydC1zdWItdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgfQotICAgICN0YWJsZSB7Ci0gICAgICBmbGV4OiAxIDEgYXV0bzsKLSAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7Ci0gICAgICBmb250LXNpemU6IDEycHg7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj4KLSAgICA8L3RyLXVpLWItdGFibGU+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWItdGFiLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgICAgOmhvc3QgewotICAgICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgICAgfQotCi0gICAgICAjc2VsZWN0aW9uX2Rlc2NyaXB0aW9uLCAjdGFicyB7Ci0gICAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICAgIH0KLQotICAgICAgI3NlbGVjdGlvbl9kZXNjcmlwdGlvbiB7Ci0gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgICAgIG1hcmdpbjogOXB4IDBweCA0cHggMjBweDsKLSAgICAgIH0KLQotICAgICAgI3RhYnMgewotICAgICAgICBmbGV4OiAwIDAgYXV0bzsKLSAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICM4ZThlOGU7Ci0gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOGU4ZThlOwotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjOwotICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgICAgICBtYXJnaW46IDA7Ci0gICAgICB9Ci0KLSAgICAgICN0YWJzIGlucHV0W3R5cGU9cmFkaW9dIHsKLSAgICAgICAgZGlzcGxheTogbm9uZTsKLSAgICAgIH0KLQotICAgICAgI3RhYnMgdGFiIGxhYmVsIHsKLSAgICAgICAgY3Vyc29yOiBwb2ludGVyOwotICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlY2VjZWM7Ci0gICAgICAgIG1hcmdpbjogNXB4IDBweCAwcHggMTVweDsKLSAgICAgICAgcGFkZGluZzogM3B4IDEwcHggM3B4IDEwcHg7Ci0gICAgICB9Ci0KLSAgICAgICN0YWJzIHRhYiBsYWJlbCBzcGFuIHsKLSAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgICB9Ci0KLSAgICAgICN0YWJzOmZvY3VzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiBsYWJlbCB7Ci0gICAgICAgIG91dGxpbmU6IGRvdHRlZCAxcHggIzhlOGU4ZTsKLSAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7Ci0gICAgICB9Ci0KLSAgICAgICN0YWJzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiBsYWJlbCB7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwotICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOGU4ZThlOwotICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgd2hpdGU7Ci0gICAgICB9Ci0KLSAgICAgICNzdWJWaWV3IHsKLSAgICAgICAgZmxleDogMSAxIGF1dG87Ci0gICAgICAgIG92ZXJmbG93OiBhdXRvOwotICAgICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPGRpdiBoaWRkZW49IltbdGFic0hpZGRlbl1dIiBpZD0idGFicyI+Ci0gICAgICA8bGFiZWwgaWQ9InNlbGVjdGlvbl9kZXNjcmlwdGlvbiI+W1tsYWJlbF9dXTwvbGFiZWw+Ci0gICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3N1YlZpZXdzX11dIj4KLSAgICAgICAgPHRhYj4KLSAgICAgICAgICA8aW5wdXQgY2hlY2tlZD0iW1tpc0NoZWNrZWRfKGl0ZW0pXV0iIGlkJD0iW1tjb21wdXRlUmFkaW9JZF8oaXRlbSldXSIgbmFtZT0idGFicyIgb24tY2hhbmdlPSJvblRhYkNoYW5nZWRfIiB0eXBlPSJyYWRpbyIvPgotICAgICAgICAgIDxsYWJlbCBmb3IkPSJbW2NvbXB1dGVSYWRpb0lkXyhpdGVtKV1dIj4KLSAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZj0iW1tpdGVtLnRhYkljb25dXSIgaXM9ImRvbS1pZiI+Ci0gICAgICAgICAgICAgIDxzcGFuIHN0eWxlJD0iW1tpdGVtLnRhYkljb24uc3R5bGVdXSI+W1tpdGVtLnRhYkljb24udGV4dF1dPC9zcGFuPgotICAgICAgICAgICAgPC90ZW1wbGF0ZT4KLSAgICAgICAgICAgIFtbaXRlbS50YWJMYWJlbF1dCi0gICAgICAgICAgPC9sYWJlbD4KLSAgICAgICAgPC90YWI+Ci0gICAgICA8L3RlbXBsYXRlPgotICAgIDwvZGl2PgotICAgIDxkaXYgaWQ9InN1YlZpZXciPjwvZGl2PgotICAgIDxjb250ZW50PgotICAgIDwvY29udGVudD4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtYnJlYWtkb3duLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHRyLXVpLWItdGFiLXZpZXcgaWQ9InRhYnMiPjwvdHItdWktYi10YWItdmlldz4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtYnJlYWtkb3duLXZpZXctdGFiIj4KLSAgPHRlbXBsYXRlPgotICAgIDx0ci12LXVpLXNjYWxhci1jb250ZXh0LWNvbnRyb2xsZXI+PC90ci12LXVpLXNjYWxhci1jb250ZXh0LWNvbnRyb2xsZXI+Ci0gICAgPHRyLXVpLWItaW5mby1iYXIgaGlkZGVuPSIiIGlkPSJpbmZvIj48L3RyLXVpLWItaW5mby1iYXI+Ci0gICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj48L3RyLXVpLWItdGFibGU+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtbWVtb3J5LWR1bXAtaGVhcC1kZXRhaWxzLXBhdGgtdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgICA6aG9zdCB7Ci0gICAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8dHItdi11aS1zY2FsYXItY29udGV4dC1jb250cm9sbGVyPjwvdHItdi11aS1zY2FsYXItY29udGV4dC1jb250cm9sbGVyPgotICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW1lbW9yeS1kdW1wLWhlYXAtZGV0YWlscy1wYW5lIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICAgIDpob3N0IHsKLSAgICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICAgIH0KLQotICAgICAgI2hlYWRlciB7Ci0gICAgICAgIGZsZXg6IDAgMCBhdXRvOwotICAgICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwotICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwotCi0gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Ci0gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOGU4ZThlOwotICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgd2hpdGU7Ci0gICAgICB9Ci0KLSAgICAgICNsYWJlbCB7Ci0gICAgICAgIGZsZXg6IDEgMSBhdXRvOwotICAgICAgICBwYWRkaW5nOiA4cHg7Ci0gICAgICAgIGZvbnQtc2l6ZTogMTVweDsKLSAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgICB9Ci0KLSAgICAgICN2aWV3X21vZGVfY29udGFpbmVyIHsKLSAgICAgICAgZGlzcGxheTogbm9uZTsKLSAgICAgICAgZmxleDogMCAwIGF1dG87Ci0gICAgICAgIHBhZGRpbmc6IDVweDsKLSAgICAgICAgZm9udC1zaXplOiAxNXB4OwotICAgICAgfQotCi0gICAgICAjY29udGVudHMgewotICAgICAgICBmbGV4OiAxIDAgYXV0bzsKLSAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKLSAgICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgICAgfQotCi0gICAgICAjaW5mb190ZXh0IHsKLSAgICAgICAgcGFkZGluZzogOHB4OwotICAgICAgICBjb2xvcjogIzY2NjsKLSAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwotICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgICB9Ci0KLSAgICAgICNzcGxpdF92aWV3IHsKLSAgICAgICAgZGlzcGxheTogbm9uZTsgIC8qIEhpZGUgdW50aWwgbWVtb3J5IGFsbG9jYXRvciBkdW1wcyBhcmUgc2V0LiAqLwotICAgICAgICBmbGV4OiAxIDAgYXV0bzsKLSAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKLSAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKLSAgICAgIH0KLQotICAgICAgI3BhdGhfdmlldyB7Ci0gICAgICAgIHdpZHRoOiA1MCU7Ci0gICAgICB9Ci0KLSAgICAgICNicmVha2Rvd25fdmlldyB7Ci0gICAgICAgIGZsZXg6IDEgMSBhdXRvOwotICAgICAgICB3aWR0aDogMDsKLSAgICAgIH0KLQotICAgICAgI3BhdGhfdmlldywgI2JyZWFrZG93bl92aWV3IHsKLSAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsgIC8qIFNob3cgc2Nyb2xsYmFyIGlmIG5lY2Vzc2FyeS4gKi8KLSAgICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDxkaXYgaWQ9ImhlYWRlciI+Ci0gICAgICA8ZGl2IGlkPSJsYWJlbCI+SGVhcCBkZXRhaWxzPC9kaXY+Ci0gICAgICA8ZGl2IGlkPSJ2aWV3X21vZGVfY29udGFpbmVyIj4KLSAgICAgICAgPHNwYW4+VmlldyBtb2RlOjwvc3Bhbj4KLSAgICAgICAgCi0gICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4KLSAgICA8ZGl2IGlkPSJjb250ZW50cyI+Ci0gICAgICA8dHItdWktYi1pbmZvLWJhciBoaWRkZW49IiIgaWQ9ImluZm9fYmFyIj4KLSAgICAgIDwvdHItdWktYi1pbmZvLWJhcj4KLQotICAgICAgPGRpdiBpZD0iaW5mb190ZXh0Ij5ObyBoZWFwIGR1bXAgc2VsZWN0ZWQ8L2Rpdj4KLQotICAgICAgPGRpdiBpZD0ic3BsaXRfdmlldyI+Ci0gICAgICAgIDx0ci11aS1hLW1lbW9yeS1kdW1wLWhlYXAtZGV0YWlscy1wYXRoLXZpZXcgaWQ9InBhdGhfdmlldyI+Ci0gICAgICAgIDwvdHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtcGF0aC12aWV3PgotICAgICAgICA8dHItdWktYi1kcmFnLWhhbmRsZSBpZD0iZHJhZ19oYW5kbGUiPjwvdHItdWktYi1kcmFnLWhhbmRsZT4KLSAgICAgICAgPHRyLXVpLWEtbWVtb3J5LWR1bXAtaGVhcC1kZXRhaWxzLWJyZWFrZG93bi12aWV3IGlkPSJicmVha2Rvd25fdmlldyI+Ci0gICAgICAgIDwvdHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtYnJlYWtkb3duLXZpZXc+Ci0gICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tZW1vcnktZHVtcC1hbGxvY2F0b3ItZGV0YWlscy1wYW5lIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICAgIDpob3N0IHsKLSAgICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICAgIH0KLQotICAgICAgI2xhYmVsIHsKLSAgICAgICAgZmxleDogMCAwIGF1dG87Ci0gICAgICAgIHBhZGRpbmc6IDhweDsKLQotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwotICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzhlOGU4ZTsKLSAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHdoaXRlOwotCi0gICAgICAgIGZvbnQtc2l6ZTogIDE1cHg7Ci0gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgICAgfQotCi0gICAgICAjY29udGVudHMgewotICAgICAgICBmbGV4OiAxIDAgYXV0bzsKLSAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKLSAgICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgICAgfQotCi0gICAgICAjaW5mb190ZXh0IHsKLSAgICAgICAgcGFkZGluZzogOHB4OwotICAgICAgICBjb2xvcjogIzY2NjsKLSAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwotICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgICB9Ci0KLSAgICAgICN0YWJsZSB7Ci0gICAgICAgIGRpc3BsYXk6IG5vbmU7ICAvKiBIaWRlIHVudGlsIG1lbW9yeSBhbGxvY2F0b3IgZHVtcHMgYXJlIHNldC4gKi8KLSAgICAgICAgZmxleDogMSAwIGF1dG87Ci0gICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7Ci0gICAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDxkaXYgaWQ9ImxhYmVsIj5Db21wb25lbnQgZGV0YWlsczwvZGl2PgotICAgIDxkaXYgaWQ9ImNvbnRlbnRzIj4KLSAgICAgIDxkaXYgaWQ9ImluZm9fdGV4dCI+Tm8gbWVtb3J5IGFsbG9jYXRvciBkdW1wIHNlbGVjdGVkPC9kaXY+Ci0gICAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KLSAgICA8L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tZW1vcnktZHVtcC12bS1yZWdpb25zLWRldGFpbHMtcGFuZSI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgICA6aG9zdCB7Ci0gICAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgICB9Ci0KLSAgICAgICNsYWJlbCB7Ci0gICAgICAgIGZsZXg6IDAgMCBhdXRvOwotICAgICAgICBwYWRkaW5nOiA4cHg7Ci0KLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKLSAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4ZThlOGU7Ci0gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB3aGl0ZTsKLQotICAgICAgICBmb250LXNpemU6ICAxNXB4OwotICAgICAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICAgIH0KLQotICAgICAgI2NvbnRlbnRzIHsKLSAgICAgICAgZmxleDogMSAwIGF1dG87Ci0gICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7Ci0gICAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICAgIH0KLQotICAgICAgI2luZm9fdGV4dCB7Ci0gICAgICAgIHBhZGRpbmc6IDhweDsKLSAgICAgICAgY29sb3I6ICM2NjY7Ci0gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLSAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAgICAgfQotCi0gICAgICAjdGFibGUgewotICAgICAgICBkaXNwbGF5OiBub25lOyAgLyogSGlkZSB1bnRpbCBtZW1vcnkgZHVtcHMgYXJlIHNldC4gKi8KLSAgICAgICAgZmxleDogMSAwIGF1dG87Ci0gICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7Ci0gICAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDxkaXYgaWQ9ImxhYmVsIj5NZW1vcnkgbWFwczwvZGl2PgotICAgIDxkaXYgaWQ9ImNvbnRlbnRzIj4KLSAgICAgIDxkaXYgaWQ9ImluZm9fdGV4dCI+Tm8gbWVtb3J5IG1hcHMgc2VsZWN0ZWQ8L2Rpdj4KLSAgICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgotICAgIDwvZGl2PgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1iLWNvbG9yLWxlZ2VuZCI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIH0KLQotICAgICNzcXVhcmUgewotICAgICAgZm9udC1zaXplOiAxNTAlOyAgLyogTWFrZSB0aGUgc3F1YXJlIGJpZ2dlci4gKi8KLSAgICAgIGxpbmUtaGVpZ2h0OiAwJTsgIC8qIFByZXZlbnQgdGhlIHNxdWFyZSBmcm9tIGluY3JlYXNpbmcgbGVnZW5kIGhlaWdodC4gKi8KLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8c3BhbiBpZD0ic3F1YXJlIj48L3NwYW4+Ci0gICAgPHNwYW4gaWQ9ImxhYmVsIj48L3NwYW4+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWItdmlldy1zcGVjaWZpYy1icnVzaGluZy1zdGF0ZSI+Ci0gIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW1lbW9yeS1kdW1wLW92ZXJ2aWV3LXBhbmUiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgICAgOmhvc3QgewotICAgICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgICAgfQotCi0gICAgICAjbGFiZWwgewotICAgICAgICBmbGV4OiAwIDAgYXV0bzsKLSAgICAgICAgcGFkZGluZzogOHB4OwotCi0gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Ci0gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOGU4ZThlOwotICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgd2hpdGU7Ci0KLSAgICAgICAgZm9udC1zaXplOiAgMTVweDsKLSAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgICB9Ci0KLSAgICAgICNsYWJlbCBhIHsKLSAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICAgICAgZmxvYXQ6IHJpZ2h0OwotICAgICAgfQotCi0gICAgICAjY29udGVudHMgewotICAgICAgICBmbGV4OiAxIDAgYXV0bzsKLSAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKLSAgICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgICAgICBvdmVyZmxvdzogYXV0bzsKLSAgICAgIH0KLQotICAgICAgI2luZm9fdGV4dCB7Ci0gICAgICAgIHBhZGRpbmc6IDhweDsKLSAgICAgICAgY29sb3I6ICM2NjY7Ci0gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLSAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAgICAgfQotCi0gICAgICAjdGFibGUgewotICAgICAgICBkaXNwbGF5OiBub25lOyAgLyogSGlkZSB1bnRpbCBtZW1vcnkgZHVtcHMgYXJlIHNldC4gKi8KLSAgICAgICAgZmxleDogMSAwIGF1dG87Ci0gICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7Ci0gICAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDx0ci11aS1iLXZpZXctc3BlY2lmaWMtYnJ1c2hpbmctc3RhdGUgaWQ9InN0YXRlIiB2aWV3LWlkPSJhbmFseXNpcy5tZW1vcnlfZHVtcF9vdmVydmlld19wYW5lIj4KLSAgICA8L3RyLXVpLWItdmlldy1zcGVjaWZpYy1icnVzaGluZy1zdGF0ZT4KLSAgICA8ZGl2IGlkPSJsYWJlbCI+T3ZlcnZpZXcgPGEgaHJlZj0iaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYy8rL21hc3Rlci9kb2NzL21lbW9yeS1pbmZyYSI+SGVscDwvYT48L2Rpdj4KLSAgICA8ZGl2IGlkPSJjb250ZW50cyI+Ci0gICAgICA8ZGl2IGlkPSJpbmZvX3RleHQiPk5vIG1lbW9yeSBtZW1vcnkgZHVtcHMgc2VsZWN0ZWQ8L2Rpdj4KLSAgICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgotICAgIDwvZGl2PgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW1lbW9yeS1kdW1wLWhlYWRlci1wYW5lIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICAgIDpob3N0IHsKLSAgICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKLSAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKLQotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBkMGQwOwotICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzhlOGU4ZTsKLSAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHdoaXRlOwotICAgICAgfQotCi0gICAgICAjbGFiZWwgewotICAgICAgICBmbGV4OiAxIDEgYXV0bzsKLSAgICAgICAgcGFkZGluZzogNnB4OwotICAgICAgICBmb250LXNpemU6IDE1cHg7Ci0gICAgICB9Ci0KLSAgICAgICNhZ2dyZWdhdGlvbl9tb2RlX2NvbnRhaW5lciB7Ci0gICAgICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgICAgIGZsZXg6IDAgMCBhdXRvOwotICAgICAgICBwYWRkaW5nOiA1cHg7Ci0gICAgICAgIGZvbnQtc2l6ZTogMTVweDsKLSAgICAgIH0KLSAgICA8L3N0eWxlPgotICAgIAotICAgIDxkaXYgaWQ9ImxhYmVsIj48L2Rpdj4KLSAgICA8ZGl2IGlkPSJhZ2dyZWdhdGlvbl9tb2RlX2NvbnRhaW5lciI+Ci0gICAgICA8c3Bhbj5NZXRyaWMgYWdncmVnYXRpb246PC9zcGFuPgotICAgICAgCi0gICAgPC9kaXY+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtc3RhY2tlZC1wYW5lLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgIH0KLQotICAgICNwYW5lX2NvbnRhaW5lciA+ICogewotICAgICAgZmxleDogMCAwIGF1dG87Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPGRpdiBpZD0icGFuZV9jb250YWluZXIiPgotICAgIDwvZGl2PgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLWNvbnRhaW5lci1tZW1vcnktZHVtcC1zdWItdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgdHItdWktYi10YWJsZSB7Ci0gICAgICBmb250LXNpemU6IDEycHg7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPGRpdiBpZD0iY29udGVudCI+PC9kaXY+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtY291bnRlci1zYW1wbGUtc3ViLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgIH0KLSAgICB0ci11aS1iLXRhYmxlIHsKLSAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tdWx0aS1ldmVudC1zdW1tYXJ5LXRhYmxlIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgIH0KLSAgICAjdGFibGUgewotICAgICAgZmxleDogMSAxIGF1dG87Ci0gICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwotICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+Ci0gICAgPC90ci11aS1iLXRhYmxlPgotICAgIAotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXNlbGVjdGlvbi1zdW1tYXJ5LXRhYmxlIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgIH0KLSAgICAjdGFibGUgewotICAgICAgZmxleDogMSAxIGF1dG87Ci0gICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwotICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+Ci0gICAgPC90ci11aS1iLXRhYmxlPgotICAgIAotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1iLXJhZGlvLXBpY2tlciI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QoW3ZlcnRpY2FsXSkgI2NvbnRhaW5lciB7Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgIH0KLSAgICA6aG9zdCg6bm90W3ZlcnRpY2FsXSkgI2NvbnRhaW5lciB7Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwotICAgIH0KLSAgICAjY29udGFpbmVyIHsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgfQotICAgICNjb250YWluZXIgPiBkaXYgewotICAgICAgcGFkZGluZy1sZWZ0OiAxZW07Ci0gICAgICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPGRpdiBpZD0iY29udGFpbmVyIj48L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdi11aS1icmVha2Rvd24tc3BhbiI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgfQotICAgICN0YWJsZV9jb250YWluZXIgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGZsZXg6IDAgMCBhdXRvOwotICAgIH0KLSAgICAjdGFibGUgewotICAgICAgbWF4LWhlaWdodDogMTUwcHg7Ci0gICAgICBvdmVyZmxvdy15OiBhdXRvOwotICAgIH0KLSAgICA8L3N0eWxlPgotCi0gICAgPGRpdiBpZD0iZW1wdHkiPihlbXB0eSk8L2Rpdj4KLSAgICA8ZGl2IGlkPSJ0YWJsZV9jb250YWluZXIiPgotICAgICAgPGRpdiBpZD0iY29udGFpbmVyIj48L2Rpdj4KLSAgICAgIDxzcGFuPgotICAgICAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KLSAgICAgIDwvc3Bhbj4KLSAgICA8L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdi11aS1jb2xsZWN0ZWQtcmVsYXRlZC1ldmVudC1zZXQtc3BhbiI+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktZGF0ZS1yYW5nZS1zcGFuIj4KLSAgPHRlbXBsYXRlPgotICAgIDxjb250ZW50PjwvY29udGVudD4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdi11aS1nZW5lcmljLXNldC1zcGFuIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICAgIGEgewotICAgICAgICBkaXNwbGF5OiBibG9jazsKLSAgICAgIH0KLSAgICA8L3N0eWxlPgotCi0gICAgPHRyLXVpLWEtZ2VuZXJpYy1vYmplY3QtdmlldyBpZD0iZ2VuZXJpYyI+PC90ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXc+Ci0KLSAgICA8ZGl2IGlkPSJsaW5rcyI+PC9kaXY+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktcmVsYXRlZC1ldmVudC1zZXQtc3BhbiI+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktcmVsYXRlZC1oaXN0b2dyYW0tbWFwLXNwYW4iPgotICA8dGVtcGxhdGU+Ci0gICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj48L3RyLXVpLWItdGFibGU+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktc2NhbGFyLWRpYWdub3N0aWMtc3BhbiI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8dHItdi11aS1zY2FsYXItc3BhbiBpZD0ic2NhbGFyIj48L3RyLXYtdWktc2NhbGFyLXNwYW4+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktdGFnLW1hcC1zcGFuIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICAjaGlkZSwgI2dlbmVyaWMgewotICAgICAgZGlzcGxheTogbm9uZTsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8YnV0dG9uIGlkPSJzaG93IiBvbi1jbGljaz0ib25TaG93XyI+U2hvdzwvYnV0dG9uPgotICAgIDxidXR0b24gaWQ9ImhpZGUiIG9uLWNsaWNrPSJvbkhpZGVfIj5IaWRlPC9idXR0b24+Ci0gICAgPHRyLXVpLWEtZ2VuZXJpYy1vYmplY3QtdmlldyBpZD0iZ2VuZXJpYyI+PC90ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXc+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktdW5tZXJnZWFibGUtZGlhZ25vc3RpYy1zZXQtc3BhbiI+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktZGlhZ25vc3RpYy1tYXAtdGFibGUiPgotICA8dGVtcGxhdGU+Ci0gICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj48L3RyLXVpLWItdGFibGU+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktc2NhbGFyLW1hcC10YWJsZSI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdi11aS1oaXN0b2dyYW0tc3BhbiI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgI2NvbnRhaW5lciB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKLSAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKLSAgICB9Ci0gICAgI2NoYXJ0IHsKLSAgICAgIGZsZXgtZ3JvdzogMTsKLSAgICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgfQotICAgICNkcmFnX2hhbmRsZSwgI2RpYWdub3N0aWNzX3RhYl90ZW1wbGF0ZXMgewotICAgICAgZGlzcGxheTogbm9uZTsKLSAgICB9Ci0gICAgI2NoYXJ0IHN2ZyB7Ci0gICAgICBkaXNwbGF5OiBibG9jazsKLSAgICB9Ci0gICAgI3N0YXRzX2NvbnRhaW5lciB7Ci0gICAgICBvdmVyZmxvdy15OiBhdXRvOwotICAgIH0KLSAgICA8L3N0eWxlPgotCi0gICAgPGRpdiBpZD0iY29udGFpbmVyIj4KLSAgICAgIDxkaXYgaWQ9ImNoYXJ0Ij48L2Rpdj4KLSAgICAgIDxkaXYgaWQ9InN0YXRzX2NvbnRhaW5lciI+Ci0gICAgICAgIDx0ci12LXVpLXNjYWxhci1tYXAtdGFibGUgaWQ9InN0YXRzIj48L3RyLXYtdWktc2NhbGFyLW1hcC10YWJsZT4KLSAgICAgIDwvZGl2PgotICAgIDwvZGl2PgotICAgIDx0ci11aS1iLWRyYWctaGFuZGxlIGlkPSJkcmFnX2hhbmRsZSI+PC90ci11aS1iLWRyYWctaGFuZGxlPgotCi0gICAgPHRyLXVpLWItdGFiLXZpZXcgaWQ9ImRpYWdub3N0aWNzIj48L3RyLXVpLWItdGFiLXZpZXc+Ci0KLSAgICA8ZGl2IGlkPSJkaWFnbm9zdGljc190YWJfdGVtcGxhdGVzIj4KLSAgICAgIDx0ci12LXVpLWRpYWdub3N0aWMtbWFwLXRhYmxlIGlkPSJtZXRyaWNfZGlhZ25vc3RpY3MiPjwvdHItdi11aS1kaWFnbm9zdGljLW1hcC10YWJsZT4KLQotICAgICAgPHRyLXYtdWktZGlhZ25vc3RpYy1tYXAtdGFibGUgaWQ9Im1ldGFkYXRhX2RpYWdub3N0aWNzIj48L3RyLXYtdWktZGlhZ25vc3RpYy1tYXAtdGFibGU+Ci0KLSAgICAgIDxkaXYgaWQ9InNhbXBsZV9kaWFnbm9zdGljc19jb250YWluZXIiPgotICAgICAgICA8ZGl2IGlkPSJtZXJnZV9zYW1wbGVfZGlhZ25vc3RpY3NfY29udGFpbmVyIj4KLSAgICAgICAgICA8aW5wdXQgY2hlY2tlZD0iIiBpZD0ibWVyZ2Vfc2FtcGxlX2RpYWdub3N0aWNzIiBvbi1jaGFuZ2U9InVwZGF0ZURpYWdub3N0aWNzXyIgdHlwZT0iY2hlY2tib3giLz4KLSAgICAgICAgICA8bGFiZWwgZm9yPSJtZXJnZV9zYW1wbGVfZGlhZ25vc3RpY3MiPk1lcmdlIFNhbXBsZSBEaWFnbm9zdGljczwvbGFiZWw+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8dHItdi11aS1kaWFnbm9zdGljLW1hcC10YWJsZSBpZD0ic2FtcGxlX2RpYWdub3N0aWNzIj48L3RyLXYtdWktZGlhZ25vc3RpYy1tYXAtdGFibGU+Ci0gICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tdWx0aS1ldmVudC1zdWItdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIG92ZXJmbG93OiBhdXRvOwotICAgIH0KLSAgICAjY29udGVudCB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICAgIGZsZXg6IDAgMSBhdXRvOwotICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKLSAgICB9Ci0gICAgI2NvbnRlbnQgPiAqIHsKLSAgICAgIGZsZXg6IDAgMCBhdXRvOwotICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKLSAgICB9Ci0gICAgI2hpc3RvZ3JhbUNvbnRhaW5lciB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgIH0KLQotICAgIHRyLXVpLWEtbXVsdGktZXZlbnQtc3VtbWFyeS10YWJsZSB7Ci0gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2FhYTsKLSAgICB9Ci0KLSAgICB0ci11aS1hLXNlbGVjdGlvbi1zdW1tYXJ5LXRhYmxlICB7Ci0gICAgICBtYXJnaW4tdG9wOiAxLjI1ZW07Ci0gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2FhYTsKLSAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Ci0gICAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICAgIG1hcmdpbi1ib3R0b206IDEuMjVlbTsKLSAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYWFhOwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDxkaXYgaWQ9ImNvbnRlbnQiPgotICAgICAgPHRyLXVpLWEtbXVsdGktZXZlbnQtc3VtbWFyeS10YWJsZSBpZD0iZXZlbnRTdW1tYXJ5VGFibGUiPgotICAgICAgPC90ci11aS1hLW11bHRpLWV2ZW50LXN1bW1hcnktdGFibGU+Ci0gICAgICA8dHItdWktYS1zZWxlY3Rpb24tc3VtbWFyeS10YWJsZSBpZD0ic2VsZWN0aW9uU3VtbWFyeVRhYmxlIj4KLSAgICAgIDwvdHItdWktYS1zZWxlY3Rpb24tc3VtbWFyeS10YWJsZT4KLSAgICAgIDx0ci11aS1iLXJhZGlvLXBpY2tlciBpZD0icmFkaW9QaWNrZXIiPgotICAgICAgPC90ci11aS1iLXJhZGlvLXBpY2tlcj4KLSAgICAgIDxkaXYgaWQ9Imhpc3RvZ3JhbUNvbnRhaW5lciI+Ci0gICAgICAgIDx0ci12LXVpLWhpc3RvZ3JhbS1zcGFuIGlkPSJoaXN0b2dyYW1TcGFuIj4KLSAgICAgICAgPC90ci12LXVpLWhpc3RvZ3JhbS1zcGFuPgotICAgICAgPC9kaXY+Ci0gICAgPC9kaXY+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtcmVsYXRlZC1ldmVudHMiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgIH0KLSAgICAjdGFibGUgewotICAgICAgZmxleDogMSAxIGF1dG87Ci0gICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwotICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW11bHRpLWFzeW5jLXNsaWNlLXN1Yi12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgIH0KLSAgICAjY29udGFpbmVyIHsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICBmbGV4OiAxIDEgYXV0bzsKLSAgICB9Ci0gICAgI2V2ZW50cyB7Ci0gICAgICBtYXJnaW4tbGVmdDogOHB4OwotICAgICAgZmxleDogMCAxIDIwMHB4OwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+Ci0gICAgICA8dHItdWktYS1tdWx0aS1ldmVudC1zdWItdmlldyBpZD0iY29udGVudCI+PC90ci11aS1hLW11bHRpLWV2ZW50LXN1Yi12aWV3PgotICAgICAgPGRpdiBpZD0iZXZlbnRzIj4KLSAgICAgICAgPHRyLXVpLWEtcmVsYXRlZC1ldmVudHMgaWQ9InJlbGF0ZWRFdmVudHMiPjwvdHItdWktYS1yZWxhdGVkLWV2ZW50cz4KLSAgICAgIDwvZGl2PgotICAgIDwvZGl2PgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW11bHRpLWNwdS1zbGljZS1zdWItdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICB9Ci0gICAgI2NvbnRlbnQgewotICAgICAgZmxleDogMSAxIGF1dG87Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPHRyLXVpLWEtbXVsdGktZXZlbnQtc3ViLXZpZXcgaWQ9ImNvbnRlbnQiPjwvdHItdWktYS1tdWx0aS1ldmVudC1zdWItdmlldz4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tdWx0aS1mbG93LWV2ZW50LXN1Yi12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDx0ci11aS1hLW11bHRpLWV2ZW50LXN1Yi12aWV3IGlkPSJjb250ZW50Ij48L3RyLXVpLWEtbXVsdGktZXZlbnQtc3ViLXZpZXc+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtbXVsdGktaW5zdGFudC1ldmVudC1zdWItdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgZGlzcGxheTogYmxvY2s7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPGRpdiBpZD0iY29udGVudCI+PC9kaXY+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtbXVsdGktb2JqZWN0LXN1Yi12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDx0ci11aS1iLXRhYmxlIGlkPSJjb250ZW50Ij48L3RyLXVpLWItdGFibGU+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtZnJhbWUtcG93ZXItdXNhZ2UtY2hhcnQiPgotICA8dGVtcGxhdGU+Ci0gICAgPGRpdiBpZD0iY29udGVudCI+PC9kaXY+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtcG93ZXItc2FtcGxlLXN1bW1hcnktdGFibGUiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIHRyLXVpLWItdGFibGUgewotICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW11bHRpLXBvd2VyLXNhbXBsZS1zdWItdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7Ci0gICAgfQotICAgICN0YWJsZXMgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgICB3aWR0aDogNTAlOwotICAgIH0KLSAgICAjY2hhcnQgewotICAgICAgd2lkdGg6IDUwJTsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8ZGl2IGlkPSJ0YWJsZXMiPgotICAgICAgPHRyLXVpLWEtcG93ZXItc2FtcGxlLXN1bW1hcnktdGFibGUgaWQ9InN1bW1hcnlUYWJsZSI+Ci0gICAgICA8L3RyLXVpLWEtcG93ZXItc2FtcGxlLXN1bW1hcnktdGFibGU+Ci0gICAgPC9kaXY+Ci0gICAgPHRyLXVpLWEtZnJhbWUtcG93ZXItdXNhZ2UtY2hhcnQgaWQ9ImNoYXJ0Ij4KLSAgICA8L3RyLXVpLWEtZnJhbWUtcG93ZXItdXNhZ2UtY2hhcnQ+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtbXVsdGktc2FtcGxlLXN1Yi12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9Ci0gICAgI2NvbnRyb2wgewotICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjsKLSAgICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDAsIDAgMTAwJSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSgjRTVFNUU1KSwgdG8oI0QxRDFEMSkpOwotICAgICAgZmxleDogMCAwIGF1dG87Ci0gICAgICBvdmVyZmxvdy14OiBhdXRvOwotICAgIH0KLSAgICAjY29udHJvbDo6LXdlYmtpdC1zY3JvbGxiYXIgeyBoZWlnaHQ6IDBweDsgfQotICAgICNjb250cm9sIHsKLSAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwotICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7Ci0gICAgICBtYXJnaW46IDFweDsKLSAgICAgIG1hcmdpbi1yaWdodDogMnB4OwotICAgIH0KLSAgICB0ci11aS1iLXRhYmxlIHsKLSAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8ZGl2IGlkPSJjb250cm9sIj4KLSAgICAgIFNhbXBsZSBWaWV3IE9wdGlvbgotICAgIDwvZGl2PgotICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+Ci0gICAgPC90ci11aS1iLXRhYmxlPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW11bHRpLXRocmVhZC1zbGljZS1zdWItdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICB9Ci0gICAgI2NvbnRlbnQgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGZsZXg6IDEgMSBhdXRvOwotICAgIH0KLSAgICAjY29udGVudCA+IHRyLXVpLWEtcmVsYXRlZC1ldmVudHMgewotICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKLSAgICAgIGZsZXg6IDAgMSAyMDBweDsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8ZGl2IGlkPSJjb250ZW50Ij48L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tdWx0aS10aHJlYWQtdGltZS1zbGljZS1zdWItdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICB9Ci0gICAgI2NvbnRlbnQgewotICAgICAgZmxleDogMSAxIGF1dG87Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPHRyLXVpLWEtbXVsdGktZXZlbnQtc3ViLXZpZXcgaWQ9ImNvbnRlbnQiPjwvdHItdWktYS1tdWx0aS1ldmVudC1zdWItdmlldz4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS11c2VyLWV4cGVjdGF0aW9uLXJlbGF0ZWQtc2FtcGxlcy10YWJsZSI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgI3RhYmxlIHsKLSAgICAgIGZsZXg6IDEgMSBhdXRvOwotICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKLSAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tdWx0aS11c2VyLWV4cGVjdGF0aW9uLXN1Yi12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZmxleDogMSAxIGF1dG87Ci0gICAgfQotICAgICNldmVudHMgewotICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKLSAgICAgIGZsZXg6IDAgMSAyMDBweDsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8dHItdWktYS1tdWx0aS1ldmVudC1zdWItdmlldyBpZD0icmVhbFZpZXciPjwvdHItdWktYS1tdWx0aS1ldmVudC1zdWItdmlldz4KLSAgICA8ZGl2IGlkPSJldmVudHMiPgotICAgICAgPHRyLXVpLWEtdXNlci1leHBlY3RhdGlvbi1yZWxhdGVkLXNhbXBsZXMtdGFibGUgaWQ9InJlbGF0ZWRTYW1wbGVzIj48L3RyLXVpLWEtdXNlci1leHBlY3RhdGlvbi1yZWxhdGVkLXNhbXBsZXMtdGFibGU+Ci0gICAgPC9kaXY+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtc2luZ2xlLWFzeW5jLXNsaWNlLXN1Yi12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKLSAgICB9Ci0gICAgI2V2ZW50cyB7Ci0gICAgICBkaXNwbGF5OmZsZXg7Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDx0ci11aS1hLXNpbmdsZS1ldmVudC1zdWItdmlldyBpZD0iY29udGVudCI+PC90ci11aS1hLXNpbmdsZS1ldmVudC1zdWItdmlldz4KLSAgICA8ZGl2IGlkPSJldmVudHMiPgotICAgICAgPHRyLXVpLWEtcmVsYXRlZC1ldmVudHMgaWQ9InJlbGF0ZWRFdmVudHMiPjwvdHItdWktYS1yZWxhdGVkLWV2ZW50cz4KLSAgICA8L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1zaW5nbGUtY3B1LXNsaWNlLXN1Yi12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICB0YWJsZSB7Ci0gICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICAgICAgYm9yZGVyLXdpZHRoOiAwOwotICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKLSAgICAgIHdpZHRoOiAxMDAlOwotICAgIH0KLQotICAgIHRhYmxlIHRyID4gdGQ6Zmlyc3QtY2hpbGQgewotICAgICAgcGFkZGluZy1sZWZ0OiAycHg7Ci0gICAgfQotCi0gICAgdGFibGUgdHIgPiB0ZCB7Ci0gICAgICBwYWRkaW5nOiAycHggNHB4IDJweCA0cHg7Ci0gICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7Ci0gICAgICB3aWR0aDogMTUwcHg7Ci0gICAgfQotCi0gICAgdGFibGUgdGQgdGQgewotICAgICAgcGFkZGluZzogMCAwIDAgMDsKLSAgICAgIHdpZHRoOiBhdXRvOwotICAgIH0KLSAgICB0ciB7Ci0gICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwotICAgIH0KLQotICAgIHRyOm50aC1jaGlsZCgybiswKSB7Ci0gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlMmUyOwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDx0YWJsZT4KLSAgICAgIDx0Ym9keT48dHI+Ci0gICAgICAgIDx0ZD5SdW5uaW5nIHByb2Nlc3M6PC90ZD48dGQgaWQ9InByb2Nlc3MtbmFtZSI+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD5SdW5uaW5nIHRocmVhZDo8L3RkPjx0ZCBpZD0idGhyZWFkLW5hbWUiPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+U3RhcnQ6PC90ZD4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDx0ci12LXVpLXNjYWxhci1zcGFuIGlkPSJzdGFydCI+Ci0gICAgICAgICAgPC90ci12LXVpLXNjYWxhci1zcGFuPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPkR1cmF0aW9uOjwvdGQ+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8dHItdi11aS1zY2FsYXItc3BhbiBpZD0iZHVyYXRpb24iPgotICAgICAgICAgIDwvdHItdi11aS1zY2FsYXItc3Bhbj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD5BY3RpdmUgc2xpY2VzOjwvdGQ+PHRkIGlkPSJydW5uaW5nLXRocmVhZCI+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD5BcmdzOjwvdGQ+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICA8dHItdWktYS1nZW5lcmljLW9iamVjdC12aWV3IGlkPSJhcmdzIj4KLSAgICAgICAgICA8L3RyLXVpLWEtZ2VuZXJpYy1vYmplY3Qtdmlldz4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT48L3RhYmxlPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXNpbmdsZS1mbG93LWV2ZW50LXN1Yi12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBibG9jazsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8dHItdWktYS1zaW5nbGUtZXZlbnQtc3ViLXZpZXcgaWQ9InNpbmdsZUV2ZW50U3ViVmlldyI+Ci0gICAgPC90ci11aS1hLXNpbmdsZS1ldmVudC1zdWItdmlldz4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1zaW5nbGUtZnJhbWUtc3ViLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgIH0KLSAgICAjYXN2IHsKLSAgICAgIGZsZXg6IDAgMCBhdXRvOwotICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8dHItdWktYS1hbGVydC1zdWItdmlldyBpZD0iYXN2Ij4KLSAgICA8L3RyLXVpLWEtYWxlcnQtc3ViLXZpZXc+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtc2luZ2xlLWluc3RhbnQtZXZlbnQtc3ViLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDxkaXYgaWQ9ImNvbnRlbnQiPjwvZGl2PgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXNpbmdsZS1vYmplY3QtaW5zdGFuY2Utc3ViLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIH0KLQotICAgICNzbmFwc2hvdHMgPiAqIHsKLSAgICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIH0KLQotICAgIDpob3N0IHsKLSAgICAgIG92ZXJmbG93OiBhdXRvOwotICAgICAgZGlzcGxheTogYmxvY2s7Ci0gICAgfQotCi0gICAgKiB7Ci0gICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OwotICAgIH0KLQotICAgIC50aXRsZSB7Ci0gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDEyOCwgMTI4LCAxMjgpOwotICAgICAgZm9udC1zaXplOiAxMTAlOwotICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgfQotCi0gICAgdGQsIHRoIHsKLSAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Ci0gICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDxkaXYgaWQ9ImNvbnRlbnQiPjwvZGl2PgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXNpbmdsZS1vYmplY3Qtc25hcHNob3Qtc3ViLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgICNhcmdzIHsKLSAgICAgIHdoaXRlLXNwYWNlOiBwcmU7Ci0gICAgfQotCi0gICAgOmhvc3QgewotICAgICAgb3ZlcmZsb3c6IGF1dG87Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgIH0KLQotICAgIDo6Y29udGVudCAqIHsKLSAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7Ci0gICAgfQotCi0gICAgOjpjb250ZW50IC50aXRsZSB7Ci0gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDEyOCwgMTI4LCAxMjgpOwotICAgICAgZm9udC1zaXplOiAxMTAlOwotICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgfQotCi0gICAgOjpjb250ZW50IHRkLCB0aCB7Ci0gICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwotICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8Y29udGVudD48L2NvbnRlbnQ+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtcG93ZXItc2FtcGxlLXRhYmxlIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXNpbmdsZS1wb3dlci1zYW1wbGUtc3ViLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0KLSAgICA8L3N0eWxlPgotICAgIDx0ci11aS1hLXBvd2VyLXNhbXBsZS10YWJsZSBpZD0ic2FtcGxlc1RhYmxlIj4KLSAgICA8L3RyLXVpLWEtcG93ZXItc2FtcGxlLXRhYmxlPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXNpbmdsZS1zYW1wbGUtc3ViLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICBmb250LXNpemU6IDEycHg7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPHRyLXVpLWItdGFibGUgaWQ9ImNvbnRlbnQiPjwvdHItdWktYi10YWJsZT4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1zaW5nbGUtdGhyZWFkLXNsaWNlLXN1Yi12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKLSAgICB9Ci0gICAgI2V2ZW50cyB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICB9Ci0KLSAgICA8L3N0eWxlPgotICAgIDx0ci11aS1hLXNpbmdsZS1ldmVudC1zdWItdmlldyBpZD0iY29udGVudCI+PC90ci11aS1hLXNpbmdsZS1ldmVudC1zdWItdmlldz4KLSAgICA8ZGl2IGlkPSJldmVudHMiPgotICAgICAgPHRyLXVpLWEtcmVsYXRlZC1ldmVudHMgaWQ9InJlbGF0ZWRFdmVudHMiPgotICAgICAgPC90ci11aS1hLXJlbGF0ZWQtZXZlbnRzPgotICAgIDwvZGl2PgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXNpbmdsZS10aHJlYWQtdGltZS1zbGljZS1zdWItdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgdGFibGUgewotICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKLSAgICAgIGJvcmRlci13aWR0aDogMDsKLSAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7Ci0gICAgICB3aWR0aDogMTAwJTsKLSAgICB9Ci0KLSAgICB0YWJsZSB0ciA+IHRkOmZpcnN0LWNoaWxkIHsKLSAgICAgIHBhZGRpbmctbGVmdDogMnB4OwotICAgIH0KLQotICAgIHRhYmxlIHRyID4gdGQgewotICAgICAgcGFkZGluZzogMnB4IDRweCAycHggNHB4OwotICAgICAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wOwotICAgICAgd2lkdGg6IDE1MHB4OwotICAgIH0KLQotICAgIHRhYmxlIHRkIHRkIHsKLSAgICAgIHBhZGRpbmc6IDAgMCAwIDA7Ci0gICAgICB3aWR0aDogYXV0bzsKLSAgICB9Ci0gICAgdHIgewotICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKLSAgICB9Ci0KLSAgICB0cjpudGgtY2hpbGQoMm4rMCkgewotICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8dGFibGU+Ci0gICAgICA8dGJvZHk+PHRyPgotICAgICAgICA8dGQ+UnVubmluZyBwcm9jZXNzOjwvdGQ+PHRkIGlkPSJwcm9jZXNzLW5hbWUiPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+UnVubmluZyB0aHJlYWQ6PC90ZD48dGQgaWQ9InRocmVhZC1uYW1lIj48L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPlN0YXRlOjwvdGQ+Ci0gICAgICAgIDx0ZD48Yj48c3BhbiBpZD0ic3RhdGUiPjwvc3Bhbj48L2I+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD5TdGFydDo8L3RkPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgPHRyLXYtdWktc2NhbGFyLXNwYW4gaWQ9InN0YXJ0Ij4KLSAgICAgICAgICA8L3RyLXYtdWktc2NhbGFyLXNwYW4+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQ+RHVyYXRpb246PC90ZD4KLSAgICAgICAgPHRkPgotICAgICAgICAgIDx0ci12LXVpLXNjYWxhci1zcGFuIGlkPSJkdXJhdGlvbiI+Ci0gICAgICAgICAgPC90ci12LXVpLXNjYWxhci1zcGFuPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLQotICAgICAgPHRyPgotICAgICAgICA8dGQ+T24gQ1BVOjwvdGQ+PHRkIGlkPSJvbi1jcHUiPjwvdGQ+Ci0gICAgICA8L3RyPgotCi0gICAgICA8dHI+Ci0gICAgICAgIDx0ZD5SdW5uaW5nIGluc3RlYWQ6PC90ZD48dGQgaWQ9InJ1bm5pbmctaW5zdGVhZCI+PC90ZD4KLSAgICAgIDwvdHI+Ci0KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPkFyZ3M6PC90ZD48dGQgaWQ9ImFyZ3MiPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+PC90YWJsZT4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1zaW5nbGUtdXNlci1leHBlY3RhdGlvbi1zdWItdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgOmhvc3QgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7Ci0gICAgfQotICAgICNldmVudHMgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPHRyLXVpLWEtc2luZ2xlLWV2ZW50LXN1Yi12aWV3IGlkPSJyZWFsVmlldyI+PC90ci11aS1hLXNpbmdsZS1ldmVudC1zdWItdmlldz4KLSAgICA8ZGl2IGlkPSJldmVudHMiPgotICAgICAgPHRyLXVpLWEtdXNlci1leHBlY3RhdGlvbi1yZWxhdGVkLXNhbXBsZXMtdGFibGUgaWQ9InJlbGF0ZWRTYW1wbGVzIj48L3RyLXVpLWEtdXNlci1leHBlY3RhdGlvbi1yZWxhdGVkLXNhbXBsZXMtdGFibGU+Ci0gICAgPC9kaXY+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtYW5hbHlzaXMtdmlldyI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgICA6aG9zdCB7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwotICAgICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgICAgICBoZWlnaHQ6IDI3NXB4OwotICAgICAgICBvdmVyZmxvdzogYXV0bzsKLSAgICAgIH0KLQotICAgICAgOmhvc3QoLnRhbGwtbW9kZSkgewotICAgICAgICBoZWlnaHQ6IDUyNXB4OwotICAgICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPGNvbnRlbnQ+PC9jb250ZW50PgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1iLWRyb3Bkb3duIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICBidXR0b24gewotICAgICAgQGFwcGx5KC0tZHJvcGRvd24tYnV0dG9uKTsKLSAgICB9Ci0gICAgYnV0dG9uLm9wZW4gewotICAgICAgQGFwcGx5KC0tZHJvcGRvd24tYnV0dG9uLW9wZW4pOwotICAgIH0KLSAgICBkaWFsb2cgewotICAgICAgcG9zaXRpb246IGFic29sdXRlOwotICAgICAgbWFyZ2luOiAwOwotICAgICAgcGFkZGluZzogMWVtOwotICAgICAgYm9yZGVyOiAxcHggc29saWQgZGFya2dyZXk7Ci0gICAgICBAYXBwbHkoLS1kcm9wZG93bi1kaWFsb2cpOwotICAgIH0KLSAgICA8L3N0eWxlPgotCi0gICAgPGJ1dHRvbiBpZD0iYnV0dG9uIiBvbi10YXA9Im9wZW4iPltbbGFiZWxdXTwvYnV0dG9uPgotCi0gICAgPGRpYWxvZyBpZD0iZGlhbG9nIiBvbi1jYW5jZWw9ImNsb3NlIiBvbi10YXA9Im9uRGlhbG9nVGFwXyI+Ci0gICAgICA8Y29udGVudD48L2NvbnRlbnQ+Ci0gICAgPC9kaWFsb2c+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWItaW5mby1iYXItZ3JvdXAiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGZsZXg6IDAgMCBhdXRvOwotICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPGRpdiBpZD0ibWVzc2FnZXMiPjwvZGl2PgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1iLXRvb2xiYXItYnV0dG9uIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKLSAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC41KTsKLSAgICAgIGNvbG9yOiByZ2JhKDAsMCwwLDAuOCk7Ci0gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKLSAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7Ci0gICAgICBtaW4td2lkdGg6IDIzcHg7Ci0gICAgfQotCi0gICAgOmhvc3QoOmhvdmVyKSB7Ci0gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDEuMCk7Ci0gICAgICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTsKLSAgICAgIGJveC1zaGFkb3c6IDAgMCAuMDVlbSByZ2JhKDAsIDAsIDAsIDAuNCk7Ci0gICAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAxKTsKLSAgICB9Ci0KLSAgICAjYWxpZ25lciB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZmxleDogMCAwIGF1dG87Ci0gICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPGRpdiBpZD0iYWxpZ25lciI+Ci0gICAgICA8Y29udGVudD48L2NvbnRlbnQ+Ci0gICAgPC9kaXY+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PHN0eWxlPgotLmRyYXdpbmctY29udGFpbmVye2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OmF1dG87b3ZlcmZsb3cteDpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LmRyYXdpbmctY29udGFpbmVyLWNhbnZhc3tkaXNwbGF5OmJsb2NrO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9Ci08L3N0eWxlPjxzdHlsZT4KLS5sZXR0ZXItZG90LXRyYWNrIHsKLSAgaGVpZ2h0OiAxOHB4OwotfQotPC9zdHlsZT48c3R5bGU+Ci0uY2hhcnQtdHJhY2sgewotICBoZWlnaHQ6IDMwcHg7Ci0gIHBvc2l0aW9uOiByZWxhdGl2ZTsKLX0KLTwvc3R5bGU+PHN0eWxlPgotLmNwdS11c2FnZS10cmFjayB7Ci0gIGhlaWdodDogOTBweDsKLX0KLTwvc3R5bGU+PHN0eWxlPgotLnBvd2VyLXNlcmllcy10cmFjayB7Ci0gIGhlaWdodDogOTBweDsKLX0KLTwvc3R5bGU+PHN0eWxlPgotLnNwYWNpbmctdHJhY2t7aGVpZ2h0OjRweH0KLTwvc3R5bGU+PHN0eWxlPgotLnJlY3QtdHJhY2t7aGVpZ2h0OjE4cHh9Ci08L3N0eWxlPjxzdHlsZT4KLS50aHJlYWQtdHJhY2t7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX0KLTwvc3R5bGU+PHN0eWxlPgotLnByb2Nlc3MtdHJhY2staGVhZGVye2ZsZXg6MCAwIGF1dG87YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMTAwJSAwLGZyb20oI0U1RTVFNSksdG8oI0QxRDFEMSkpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM4ZThlOGU7Ym9yZGVyLXRvcDoxcHggc29saWQgd2hpdGU7Zm9udC1zaXplOjc1JX0ucHJvY2Vzcy10cmFjay1uYW1lOmJlZm9yZXtjb250ZW50OidcMjVCOCc7cGFkZGluZzowIDVweH0ucHJvY2Vzcy10cmFjay1iYXNlLmV4cGFuZGVkIC5wcm9jZXNzLXRyYWNrLW5hbWU6YmVmb3Jle2NvbnRlbnQ6J1wyNUJFJ30KLTwvc3R5bGU+PHN0eWxlPgotLm1vZGVsLXRyYWNrIHsKLSAgZmxleC1ncm93OiAxOwotfQotPC9zdHlsZT48c3R5bGU+Ci0ueC1heGlzLXRyYWNrIHsKLSAgaGVpZ2h0OiAxMnB4OwotfQotCi0ueC1heGlzLXRyYWNrLnRhbGwtbW9kZSB7Ci0gIGhlaWdodDogMzBweDsKLX0KLTwvc3R5bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLXRpbWVsaW5lLXRyYWNrLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIH0KLQotICAgIDpob3N0IDo6Y29udGVudCAqIHsKLSAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ci0gICAgICBjdXJzb3I6IGRlZmF1bHQ7Ci0gICAgfQotCi0gICAgI2RyYWdfYm94IHsKLSAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMjU1LCAwLjI1KTsKLSAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigwLCAwLCA5Nik7Ci0gICAgICBmb250LXNpemU6IDc1JTsKLSAgICAgIHBvc2l0aW9uOiBmaXhlZDsKLSAgICB9Ci0KLSAgICAjaGludF90ZXh0IHsKLSAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICAgIGJvdHRvbTogNnB4OwotICAgICAgcmlnaHQ6IDZweDsKLSAgICAgIGZvbnQtc2l6ZTogOHB0OwotICAgIH0KLSAgICA8L3N0eWxlPgotICAgIDxjb250ZW50PjwvY29udGVudD4KLQotICAgIDxkaXYgaWQ9ImRyYWdfYm94Ij48L2Rpdj4KLSAgICA8ZGl2IGlkPSJoaW50X3RleHQiPjwvZGl2PgotCi0gICAgPHR2LXVpLWItaG90a2V5LWNvbnRyb2xsZXIgaWQ9ImhvdGtleV9jb250cm9sbGVyIj4KLSAgICA8L3R2LXVpLWItaG90a2V5LWNvbnRyb2xsZXI+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWZpbmQtY29udHJvbCI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgICA6aG9zdCB7Ci0gICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ci0gICAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICAgIH0KLSAgICAgIGlucHV0IHsKLSAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogYXV0bzsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKLSAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjUpOwotICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgICAgICBtYXJnaW46IDA7Ci0gICAgICAgIHBhZGRpbmc6IDA7Ci0gICAgICAgIHdpZHRoOiAxNzBweDsKLSAgICAgIH0KLSAgICAgIGlucHV0OmZvY3VzIHsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0gICAgICB9Ci0gICAgICB0ci11aS1iLXRvb2xiYXItYnV0dG9uIHsKLSAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7Ci0gICAgICAgIG1hcmdpbjogMDsKLSAgICAgIH0KLSAgICAgICNoaXRDb3VudCB7Ci0gICAgICAgIGxlZnQ6IDA7Ci0gICAgICAgIG9wYWNpdHk6IDAuMjU7Ci0gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwotICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwotICAgICAgICB0b3A6IDJweDsKLSAgICAgICAgd2lkdGg6IDE2N3B4OwotICAgICAgICB6LWluZGV4OiAxOwotICAgICAgfQotICAgICAgI3NwaW5uZXIgewotICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47Ci0gICAgICAgIHdpZHRoOiA4cHg7Ci0gICAgICAgIGhlaWdodDogOHB4OwotICAgICAgICBsZWZ0OiAxNTRweDsKLSAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Ci0gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICAgICAgdG9wOiA0cHg7Ci0gICAgICAgIHotaW5kZXg6IDE7Ci0KLSAgICAgICAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7Ci0gICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNSk7Ci0gICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC41KTsKLSAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwotICAgICAgfQotICAgICAgQGtleWZyYW1lcyBzcGluIHsgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0gfQotICAgIDwvc3R5bGU+Ci0KLSAgICA8aW5wdXQgaWQ9ImZpbHRlciIgb24tYmx1cj0iZmlsdGVyQmx1ciIgb24tZm9jdXM9ImZpbHRlckZvY3VzIiBvbi1pbnB1dD0iZmlsdGVyVGV4dENoYW5nZWQiIG9uLWtleWRvd249ImZpbHRlcktleURvd24iIG9uLW1vdXNldXA9ImZpbHRlck1vdXNlVXAiIHR5cGU9InRleHQiLz4KLSAgICA8ZGl2IGlkPSJzcGlubmVyIj48L2Rpdj4KLSAgICA8dHItdWktYi10b29sYmFyLWJ1dHRvbiBvbi1jbGljaz0iZmluZFByZXZpb3VzIj4KLSAgICAgIOKGkAotICAgIDwvdHItdWktYi10b29sYmFyLWJ1dHRvbj4KLSAgICA8dHItdWktYi10b29sYmFyLWJ1dHRvbiBvbi1jbGljaz0iZmluZE5leHQiPgotICAgICAg4oaSCi0gICAgPC90ci11aS1iLXRvb2xiYXItYnV0dG9uPgotICAgIDxkaXYgaWQ9ImhpdENvdW50Ij4wIG9mIDA8L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktc2NyaXB0aW5nLWNvbnRyb2wiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgICAgOmhvc3QgewotICAgICAgICBmbGV4OiAxIDEgYXV0bzsKLSAgICAgIH0KLSAgICAgIC5yb290IHsKLSAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKLSAgICAgICAgY3Vyc29yOiB0ZXh0OwotCi0gICAgICAgIHBhZGRpbmc6IDJweDsKLSAgICAgICAgbWFyZ2luOiAycHg7Ci0gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC41KTsKLSAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7Ci0KLSAgICAgICAgaGVpZ2h0OiAxMDBweDsKLSAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKLQotICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBvcGFjaXR5LCBoZWlnaHQsIHBhZGRpbmcsIG1hcmdpbjsKLSAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogLjJzOwotICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1vdXQ7Ci0gICAgICB9Ci0gICAgICAuaGlkZGVuIHsKLSAgICAgICAgbWFyZ2luLXRvcDogMHB4OwotICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7Ci0gICAgICAgIHBhZGRpbmctdG9wOiAwcHg7Ci0gICAgICAgIHBhZGRpbmctYm90dG9tOiAwcHg7Ci0gICAgICAgIGhlaWdodDogMHB4OwotICAgICAgICBvcGFjaXR5OiAwOwotICAgICAgfQotICAgICAgLmZvY3VzZWQgewotICAgICAgICBvdXRsaW5lOiBhdXRvIDVweCAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7Ci0gICAgICB9Ci0gICAgICAjaGlzdG9yeSB7Ci0gICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7Ci0gICAgICAgIGNvbG9yOiAjNzc3OwotICAgICAgfQotICAgICAgI3Byb21wdENvbnRhaW5lciB7Ci0gICAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICB9Ci0gICAgICAjcHJvbXB0TWFyayB7Ci0gICAgICAgIHdpZHRoOiAxZW07Ci0gICAgICAgIGNvbG9yOiAjNDY4OwotICAgICAgfQotICAgICAgI3Byb21wdCB7Ci0gICAgICAgIGZsZXg6IDE7Ci0gICAgICAgIHdpZHRoOiAxMDAlOwotICAgICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50OwotICAgICAgICBmb250OiBpbmhlcml0ICFpbXBvcnRhbnQ7Ci0gICAgICAgIHRleHQtb3ZlcmZsb3c6IGNsaXAgIWltcG9ydGFudDsKLSAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7Ci0gICAgICB9Ci0gICAgICAjcHJvbXB0OmZvY3VzIHsKLSAgICAgICAgb3V0bGluZTogbm9uZTsKLSAgICAgIH0KLSAgICA8L3N0eWxlPgotCi0gICAgPGRpdiBjbGFzcz0icm9vdCBoaWRkZW4iIGlkPSJyb290IiBvbi1mb2N1cz0ib25Db25zb2xlRm9jdXMiIHRhYmluZGV4PSIwIj4KLSAgICAgIDxkaXYgaWQ9Imhpc3RvcnkiPjwvZGl2PgotICAgICAgPGRpdiBpZD0icHJvbXB0Q29udGFpbmVyIj4KLSAgICAgICAgPHNwYW4gaWQ9InByb21wdE1hcmsiPiZndDs8L3NwYW4+Ci0gICAgICAgIDxpbnB1dCBpZD0icHJvbXB0IiBvbi1ibHVyPSJvbkNvbnNvbGVCbHVyIiBvbi1rZXlkb3duPSJwcm9tcHRLZXlEb3duIiBvbi1rZXlwcmVzcz0icHJvbXB0S2V5UHJlc3MiIHR5cGU9InRleHQiLz4KLSAgICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktc2lkZS1wYW5lbC1jb250YWluZXIiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwotICAgIH0KLQotICAgIDpob3N0KFtleHBhbmRlZF0pID4gI3NpZGVfcGFuZWxfZHJhZ19oYW5kbGUsCi0gICAgOmhvc3QoW2V4cGFuZGVkXSkgPiBhY3RpdmUtcGFuZWwtY29udGFpbmVyIHsKLSAgICAgIGZsZXg6IDEgMSBhdXRvOwotICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBibGFjazsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgfQotCi0gICAgOmhvc3QoOm5vdChbZXhwYW5kZWRdKSkgPiAjc2lkZV9wYW5lbF9kcmFnX2hhbmRsZSwKLSAgICA6aG9zdCg6bm90KFtleHBhbmRlZF0pKSA+IGFjdGl2ZS1wYW5lbC1jb250YWluZXIgewotICAgICAgZGlzcGxheTogbm9uZTsKLSAgICB9Ci0KLSAgICBhY3RpdmUtcGFuZWwtY29udGFpbmVyIHsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgfQotCi0gICAgdGFiLXN0cmlwIHsKLSAgICAgIGZsZXg6IDAgMCBhdXRvOwotICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ci0gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjM2LCAyMzYsIDIzNik7Ci0gICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwotICAgICAgY3Vyc29yOiBkZWZhdWx0OwotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIG1pbi13aWR0aDogMThweDsgLyogd29ya2Fyb3VuZCBmb3IgZmxleGJveCBhbmQgd3JpdGluZy1tb2RlIG1peGluZyBidWcgKi8KLSAgICAgIHBhZGRpbmc6IDEwcHggMCAxMHB4IDA7Ci0gICAgICBmb250LXNpemU6IDEycHg7Ci0gICAgfQotCi0gICAgdGFiLXN0cmlwID4gdGFiLXN0cmlwLWxhYmVsIHsKLSAgICAgIGZsZXgtc2hyaW5rOiAwOwotICAgICAgLXdlYmtpdC13cml0aW5nLW1vZGU6IHZlcnRpY2FsLXJsOwotICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICAgIGRpc3BsYXk6IGlubGluZTsKLSAgICAgIG1hcmdpbi1yaWdodDogMXB4OwotICAgICAgbWluLWhlaWdodDogMjBweDsKLSAgICAgIHBhZGRpbmc6IDE1cHggM3B4IDE1cHggMXB4OwotICAgIH0KLQotICAgIHRhYi1zdHJpcCA+Ci0gICAgICAgIHRhYi1zdHJpcC1sYWJlbDpub3QoW2VuYWJsZWRdKSB7Ci0gICAgICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOwotICAgIH0KLQotICAgIHRhYi1zdHJpcCA+IHRhYi1zdHJpcC1sYWJlbFtzZWxlY3RlZF0gewotICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0gICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTYzLCAxNjMsIDE2Myk7Ci0gICAgICBib3JkZXItbGVmdDogbm9uZTsKLSAgICAgIHBhZGRpbmc6IDE0cHggMnB4IDE0cHggMXB4OwotICAgIH0KLQotICAgICNhY3RpdmVfcGFuZWxfY29udGFpbmVyIHsKLSAgICAgIG92ZXJmbG93OiBhdXRvOwotICAgIH0KLSAgICA8L3N0eWxlPgotCi0gICAgPHRyLXVpLWItZHJhZy1oYW5kbGUgaWQ9InNpZGVfcGFuZWxfZHJhZ19oYW5kbGUiPjwvdHItdWktYi1kcmFnLWhhbmRsZT4KLSAgICA8YWN0aXZlLXBhbmVsLWNvbnRhaW5lciBpZD0iYWN0aXZlX3BhbmVsX2NvbnRhaW5lciI+Ci0gICAgPC9hY3RpdmUtcGFuZWwtY29udGFpbmVyPgotICAgIDx0YWItc3RyaXAgaWQ9InRhYl9zdHJpcCI+PC90YWItc3RyaXA+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLXRpbWVsaW5lLXZpZXctaGVscC1vdmVybGF5Ij4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBmbGV4OiAxIDEgYXV0bzsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgd2lkdGg6IDcwMHB4OwotICAgIH0KLSAgICAuY29sdW1uIHsKLSAgICAgIHdpZHRoOiA1MCU7Ci0gICAgfQotICAgIGgyIHsKLSAgICAgIGZvbnQtc2l6ZTogMS4yZW07Ci0gICAgICBtYXJnaW46IDA7Ci0gICAgICBtYXJnaW4tdG9wOiA1cHg7Ci0gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgfQotICAgIGgzIHsKLSAgICAgIG1hcmdpbjogMDsKLSAgICAgIG1hcmdpbi1sZWZ0OiAxMjZweDsKLSAgICAgIG1hcmdpbi10b3A6IDEwcHg7Ci0gICAgfQotICAgIC5wYWlyIHsKLSAgICAgIGZsZXg6IDEgMSBhdXRvOwotICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgfQotICAgIC5jb21tYW5kIHsKLSAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Ci0gICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKLSAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwotICAgICAgd2lkdGg6IDE1MHB4OwotICAgIH0KLSAgICAuYWN0aW9uIHsKLSAgICAgIGZvbnQtc2l6ZTogMC45ZW07Ci0gICAgICB0ZXh0LWFsaWduOiBsZWZ0OwotICAgICAgd2lkdGg6IDIwMHB4OwotICAgIH0KLSAgICB0ci11aS1iLW1vdXNlLW1vZGUtaWNvbiB7Ci0gICAgICBib3JkZXI6IDFweCBzb2xpZCAjODg4OwotICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwotICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsMCwwLDAuMyk7Ci0gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgICBtYXJnaW4tcmlnaHQ6IDFweDsKLSAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICAgIHRvcDogNHB4OwotICAgIH0KLSAgICAubW91c2UtbW9kZS1pY29uLnBhbi1tb2RlIHsKLSAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xcHggLTExcHg7Ci0gICAgfQotICAgIC5tb3VzZS1tb2RlLWljb24uc2VsZWN0LW1vZGUgewotICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTFweCAtNDFweDsKLSAgICB9Ci0gICAgLm1vdXNlLW1vZGUtaWNvbi56b29tLW1vZGUgewotICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTFweCAtNzFweDsKLSAgICB9Ci0gICAgLm1vdXNlLW1vZGUtaWNvbi50aW1pbmctbW9kZSB7Ci0gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMXB4IC0xMDFweDsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8ZGl2IGNsYXNzPSJjb2x1bW4gbGVmdCI+Ci0gICAgICA8aDI+TmF2aWdhdGlvbjwvaDI+Ci0gICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KLSAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+dy9zPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+Wm9vbSBpbi9vdXQgKCtzaGlmdDogZmFzdGVyKTwvZGl2PgotICAgICAgPC9kaXY+Ci0KLSAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj5hL2Q8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5QYW4gbGVmdC9yaWdodCAoK3NoaWZ0OiBmYXN0ZXIpPC9kaXY+Ci0gICAgICA8L2Rpdj4KLQotICAgICAgPGRpdiBjbGFzcz0icGFpciI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPuKGki9zaGlmdC1UQUI8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5TZWxlY3QgcHJldmlvdXMgZXZlbnQ8L2Rpdj4KLSAgICAgIDwvZGl2PgotCi0gICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KLSAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+4oaQL1RBQjwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPlNlbGVjdCBuZXh0IGV2ZW50PC9kaXY+Ci0gICAgICA8L2Rpdj4KLQotICAgICAgPGgyPk1vdXNlIENvbnRyb2xzPC9oMj4KLSAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj5jbGljazwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPlNlbGVjdCBldmVudDwvZGl2PgotICAgICAgPC9kaXY+Ci0gICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KLSAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+YWx0LW1vdXNld2hlZWw8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5ab29tIGluL291dDwvZGl2PgotICAgICAgPC9kaXY+Ci0KLSAgICAgIDxoMz4KLSAgICAgICAgPHRyLXVpLWItbW91c2UtbW9kZS1pY29uIG1vZGUtbmFtZT0iU0VMRUNUSU9OIj48L3RyLXVpLWItbW91c2UtbW9kZS1pY29uPgotICAgICAgICBTZWxlY3QgbW9kZQotICAgICAgPC9oMz4KLSAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj5kcmFnPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+Qm94IHNlbGVjdDwvZGl2PgotICAgICAgPC9kaXY+Ci0KLSAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj48c3BhbiBjbGFzcz0ibW9kIj48L3NwYW4+LWNsaWNrL2RyYWc8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5BZGQgZXZlbnRzIHRvIHRoZSBjdXJyZW50IHNlbGVjdGlvbjwvZGl2PgotICAgICAgPC9kaXY+Ci0KLSAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj5kb3VibGUgY2xpY2s8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5TZWxlY3QgYWxsIGV2ZW50cyB3aXRoIHNhbWUgdGl0bGU8L2Rpdj4KLSAgICAgIDwvZGl2PgotCi0gICAgICA8aDM+Ci0gICAgICAgIDx0ci11aS1iLW1vdXNlLW1vZGUtaWNvbiBtb2RlLW5hbWU9IlBBTlNDQU4iPjwvdHItdWktYi1tb3VzZS1tb2RlLWljb24+Ci0gICAgICAgIFBhbiBtb2RlCi0gICAgICA8L2gzPgotICAgICAgPGRpdiBjbGFzcz0icGFpciI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPmRyYWc8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5QYW4gdGhlIHZpZXc8L2Rpdj4KLSAgICAgIDwvZGl2PgotCi0gICAgICA8aDM+Ci0gICAgICAgIDx0ci11aS1iLW1vdXNlLW1vZGUtaWNvbiBtb2RlLW5hbWU9IlpPT00iPjwvdHItdWktYi1tb3VzZS1tb2RlLWljb24+Ci0gICAgICAgIFpvb20gbW9kZQotICAgICAgPC9oMz4KLSAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj5kcmFnPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+Wm9vbSBpbi9vdXQgYnkgZHJhZ2dpbmcgdXAvZG93bjwvZGl2PgotICAgICAgPC9kaXY+Ci0KLSAgICAgIDxoMz4KLSAgICAgICAgPHRyLXVpLWItbW91c2UtbW9kZS1pY29uIG1vZGUtbmFtZT0iVElNSU5HIj48L3RyLXVpLWItbW91c2UtbW9kZS1pY29uPgotICAgICAgICBUaW1pbmcgbW9kZQotICAgICAgPC9oMz4KLSAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj5kcmFnPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+Q3JlYXRlIG9yIG1vdmUgbWFya2VyczwvZGl2PgotICAgICAgPC9kaXY+Ci0KLSAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj5kb3VibGUgY2xpY2s8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5TZXQgbWFya2VyIHJhbmdlIHRvIHNsaWNlPC9kaXY+Ci0gICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4KLQotICAgIDxkaXYgY2xhc3M9ImNvbHVtbiByaWdodCI+Ci0gICAgICA8aDI+R2VuZXJhbDwvaDI+Ci0gICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KLSAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+MS00PC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+U3dpdGNoIG1vdXNlIG1vZGU8L2Rpdj4KLSAgICAgIDwvZGl2PgotCi0gICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KLSAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+c2hpZnQ8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5Ib2xkIGZvciB0ZW1wb3Jhcnkgc2VsZWN0PC9kaXY+Ci0gICAgICA8L2Rpdj4KLQotICAgICAgPGRpdiBjbGFzcz0icGFpciI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPnNwYWNlPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+SG9sZCBmb3IgdGVtcG9yYXJ5IHBhbjwvZGl2PgotICAgICAgPC9kaXY+Ci0KLSAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj4vPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+U2VhcmNoPC9kaXY+Ci0gICAgICA8L2Rpdj4KLQotICAgICAgPGRpdiBjbGFzcz0icGFpciI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPmVudGVyPC9kaXY+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+U3RlcCB0aHJvdWdoIHNlYXJjaCByZXN1bHRzPC9kaXY+Ci0gICAgICA8L2Rpdj4KLQotICAgICAgPGRpdiBjbGFzcz0icGFpciI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPmY8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5ab29tIGludG8gc2VsZWN0aW9uPC9kaXY+Ci0gICAgICA8L2Rpdj4KLQotICAgICAgPGRpdiBjbGFzcz0icGFpciI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPnovMDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPlJlc2V0IHpvb20gYW5kIHBhbjwvZGl2PgotICAgICAgPC9kaXY+Ci0KLSAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj5nL0c8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5Ub2dnbGUgNjBoeiBncmlkPC9kaXY+Ci0gICAgICA8L2Rpdj4KLQotICAgICAgPGRpdiBjbGFzcz0icGFpciI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPnY8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5IaWdobGlnaHQgVlN5bmM8L2Rpdj4KLSAgICAgIDwvZGl2PgotCi0gICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KLSAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+aDwvZGl2PgotICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPlRvZ2dsZSBsb3cvaGlnaCBkZXRhaWxzPC9kaXY+Ci0gICAgICA8L2Rpdj4KLQotICAgICAgPGRpdiBjbGFzcz0icGFpciI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPm08L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5NYXJrIGN1cnJlbnQgc2VsZWN0aW9uPC9kaXY+Ci0gICAgICA8L2Rpdj4KLQotICAgICAgPGRpdiBjbGFzcz0icGFpciI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPnA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5TZWxlY3QgcG93ZXIgc2FtcGxlcyBvdmVyIGN1cnJlbnQgc2VsZWN0aW9uIGludGVydmFsPC9kaXY+Ci0gICAgICA8L2Rpdj4KLQotICAgICAgPGRpdiBjbGFzcz0icGFpciI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPmA8L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5TaG93IG9yIGhpZGUgdGhlIHNjcmlwdGluZyBjb25zb2xlPC9kaXY+Ci0gICAgICA8L2Rpdj4KLQotICAgICAgPGRpdiBjbGFzcz0icGFpciI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPj88L2Rpdj4KLSAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5TaG93IGhlbHA8L2Rpdj4KLSAgICAgIDwvZGl2PgotICAgIDwvZGl2PgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS10aW1lbGluZS12aWV3LW1ldGFkYXRhLW92ZXJsYXkiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIHdpZHRoOiA3MDBweDsKLQotICAgICAgb3ZlcmZsb3c6IGF1dG87Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj48L3RyLXVpLWItdGFibGU+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLXRpbWVsaW5lLXZpZXciPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgICBjdXJzb3I6IGRlZmF1bHQ7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Ci0gICAgICBwYWRkaW5nOiAwOwotICAgIH0KLQotICAgICNjb250cm9sIHsKLSAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7Ci0gICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsCi0gICAgICAgICAgZnJvbSgjRTVFNUU1KSwgdG8oI0QxRDFEMSkpOwotICAgICAgZmxleDogMCAwIGF1dG87Ci0gICAgICBvdmVyZmxvdy14OiBhdXRvOwotICAgIH0KLQotICAgICNjb250cm9sOjotd2Via2l0LXNjcm9sbGJhciB7IGhlaWdodDogMHB4OyB9Ci0KLSAgICAjY29udHJvbCA+ICNiYXIgewotICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7Ci0gICAgICBtYXJnaW46IDFweDsKLSAgICB9Ci0KLSAgICAjY29udHJvbCA+ICNiYXIgPiAjdGl0bGUgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Ci0gICAgICBwYWRkaW5nLWxlZnQ6IDhweDsKLSAgICAgIHBhZGRpbmctcmlnaHQ6IDhweDsKLSAgICAgIGZsZXg6IDEgMSBhdXRvOwotICAgIH0KLQotICAgICNjb250cm9sID4gI2JhciA+ICNsZWZ0X2NvbnRyb2xzLAotICAgICNjb250cm9sID4gI2JhciA+ICNyaWdodF9jb250cm9scyB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKLSAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwotICAgIH0KLQotICAgICNjb250cm9sID4gI2JhciA+ICNsZWZ0X2NvbnRyb2xzID4gKiB7IG1hcmdpbi1yaWdodDogMnB4OyB9Ci0gICAgI2NvbnRyb2wgPiAjYmFyID4gI3JpZ2h0X2NvbnRyb2xzID4gKiB7IG1hcmdpbi1sZWZ0OiAycHg7IH0KLSAgICAjY29udHJvbCA+ICNjb2xsYXBzaW5nX2NvbnRyb2xzIHsgZGlzcGxheTogZmxleDsgfQotCi0gICAgbWlkZGxlLWNvbnRhaW5lciB7Ci0gICAgICBmbGV4OiAxIDEgYXV0bzsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7Ci0gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzhlOGU4ZTsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICBtaW4taGVpZ2h0OiAwOwotICAgIH0KLQotICAgIG1pZGRsZS1jb250YWluZXIgOjpjb250ZW50IHRyYWNrLXZpZXctY29udGFpbmVyIHsKLSAgICAgIGZsZXg6IDEgMSBhdXRvOwotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIG1pbi1oZWlnaHQ6IDA7Ci0gICAgICBtaW4td2lkdGg6IDA7Ci0gICAgICBvdmVyZmxvdy14OiBoaWRkZW47Ci0gICAgfQotCi0gICAgbWlkZGxlLWNvbnRhaW5lciA6OmNvbnRlbnQgdHJhY2stdmlldy1jb250YWluZXIgPiAqIHsgZmxleDogMSAxIGF1dG87IH0KLSAgICBtaWRkbGUtY29udGFpbmVyID4geC10aW1lbGluZS12aWV3LXNpZGUtcGFuZWwtY29udGFpbmVyIHsgZmxleDogMCAwIGF1dG87IH0KLSAgICB0ci11aS1iLWRyYWctaGFuZGxlIHsgZmxleDogMCAwIGF1dG87IH0KLSAgICB0ci11aS1hLWFuYWx5c2lzLXZpZXcgeyBmbGV4OiAwIDAgYXV0bzsgfQotCi0gICAgI3ZpZXdfb3B0aW9uc19kcm9wZG93biB7Ci0gICAgICAtLWRyb3Bkb3duLWJ1dHRvbjogewotICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgICAgIGFsaWduLWl0ZW1zOiBub3JtYWw7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNDgsIDI0OCwgMjQ4KTsKLSAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjUpOwotICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKLSAgICAgICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTsKLSAgICAgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Ci0gICAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICAgICAgcGFkZGluZzogMnB4IDVweDsKLSAgICAgIH0KLSAgICB9Ci0gICAgPC9zdHlsZT4KLQotICAgIDx0di11aS1iLWhvdGtleS1jb250cm9sbGVyIGlkPSJoa2MiPjwvdHYtdWktYi1ob3RrZXktY29udHJvbGxlcj4KLSAgICA8ZGl2IGlkPSJjb250cm9sIj4KLSAgICAgIDxkaXYgaWQ9ImJhciI+Ci0gICAgICAgIDxkaXYgaWQ9ImxlZnRfY29udHJvbHMiPjwvZGl2PgotICAgICAgICA8ZGl2IGlkPSJ0aXRsZSI+Xl9ePC9kaXY+Ci0gICAgICAgIDxkaXYgaWQ9InJpZ2h0X2NvbnRyb2xzIj4KLSAgICAgICAgICA8dHItdWktYi10b29sYmFyLWJ1dHRvbiBpZD0idmlld19tZXRhZGF0YV9idXR0b24iPgotICAgICAgICAgICAgTQotICAgICAgICAgIDwvdHItdWktYi10b29sYmFyLWJ1dHRvbj4KLSAgICAgICAgICA8dHItdWktYi1kcm9wZG93biBpZD0idmlld19vcHRpb25zX2Ryb3Bkb3duIiBsYWJlbD0iVmlldyBPcHRpb25zIj48L3RyLXVpLWItZHJvcGRvd24+Ci0gICAgICAgICAgPHRyLXVpLWZpbmQtY29udHJvbCBpZD0idmlld19maW5kX2NvbnRyb2wiPjwvdHItdWktZmluZC1jb250cm9sPgotICAgICAgICAgIDx0ci11aS1iLXRvb2xiYXItYnV0dG9uIGlkPSJ2aWV3X2NvbnNvbGVfYnV0dG9uIj4KLSAgICAgICAgICAgIMK7Ci0gICAgICAgICAgPC90ci11aS1iLXRvb2xiYXItYnV0dG9uPgotICAgICAgICAgIDx0ci11aS1iLXRvb2xiYXItYnV0dG9uIGlkPSJ2aWV3X2hlbHBfYnV0dG9uIj4KLSAgICAgICAgICAgID8KLSAgICAgICAgICA8L3RyLXVpLWItdG9vbGJhci1idXR0b24+Ci0gICAgICAgIDwvZGl2PgotICAgICAgPC9kaXY+Ci0gICAgICA8ZGl2IGlkPSJjb2xsYXBzaW5nX2NvbnRyb2xzIj48L2Rpdj4KLSAgICAgIDx0ci11aS1iLWluZm8tYmFyLWdyb3VwIGlkPSJpbXBvcnQtd2FybmluZ3MiPgotICAgICAgPC90ci11aS1iLWluZm8tYmFyLWdyb3VwPgotICAgIDwvZGl2PgotICAgIDxtaWRkbGUtY29udGFpbmVyPgotICAgICAgPGNvbnRlbnQ+PC9jb250ZW50PgotCi0gICAgICA8dHItdWktc2lkZS1wYW5lbC1jb250YWluZXIgaWQ9InNpZGVfcGFuZWxfY29udGFpbmVyIj4KLSAgICAgIDwvdHItdWktc2lkZS1wYW5lbC1jb250YWluZXI+Ci0gICAgPC9taWRkbGUtY29udGFpbmVyPgotICAgIDx0ci11aS1iLWRyYWctaGFuZGxlIGlkPSJkcmFnX2hhbmRsZSI+PC90ci11aS1iLWRyYWctaGFuZGxlPgotICAgIDx0ci11aS1hLWFuYWx5c2lzLXZpZXcgaWQ9ImFuYWx5c2lzIj48L3RyLXVpLWEtYW5hbHlzaXMtdmlldz4KLQotICAgIDx0ci12LXVpLXByZWZlcnJlZC1kaXNwbGF5LXVuaXQgaWQ9ImRpc3BsYXlfdW5pdCI+Ci0gICAgPC90ci12LXVpLXByZWZlcnJlZC1kaXNwbGF5LXVuaXQ+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWItZ3JvdXBpbmctdGFibGUiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgfQotICAgICN0YWJsZSB7Ci0gICAgICBmbGV4OiAxIDEgYXV0bzsKLSAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLSAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYi1ncm91cGluZy10YWJsZS1ncm91cGJ5LXBpY2tlciI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgI2NvbnRhaW5lciB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgIH0KLSAgICAjY29udGFpbmVyICo6bm90KDpmaXJzdC1jaGlsZCkgewotICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7Ci0gICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwotICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLQotICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWItZ3JvdXBpbmctdGFibGUtZ3JvdXBieS1waWNrZXItZ3JvdXAiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0gICAgfQotICAgICNsZWZ0LCAjcmlnaHQgewotICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7Ci0gICAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0KLSAgICA8c3BhbiBpZD0ibGVmdCIgb24tY2xpY2s9Im1vdmVMZWZ0XyI+4peAPC9zcGFuPgotICAgIDxpbnB1dCBpZD0iZW5hYmxlZCIgb24tY2hhbmdlPSJvbkVuYWJsZUNoYW5nZWRfIiB0eXBlPSJjaGVja2JveCIvPgotICAgIDxsYWJlbCBmb3I9ImVuYWJsZWQiIGlkPSJsYWJlbCI+PC9sYWJlbD4KLSAgICA8c3BhbiBpZD0icmlnaHQiIG9uLWNsaWNrPSJtb3ZlUmlnaHRfIj7ilrY8L3NwYW4+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLXNwLWZpbGUtc2l6ZS1zdGF0cy1zaWRlLXBhbmVsIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICB9Ci0gICAgdG9vbGJhciB7Ci0gICAgICBhbGlnbi1pdGVtczogY2VudGVyOwotICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzNiwgMjM2LCAyMzYpOwotICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4ZThlOGU7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7Ci0gICAgICBmbGV4OiAwIDAgYXV0bzsKLSAgICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICAgIHBhZGRpbmc6IDAgMTBweCAwIDEwcHg7Ci0gICAgfQotICAgIHRhYmxlLWNvbnRhaW5lciB7Ci0gICAgICBkaXNwbGF5OiBmbGV4OwotICAgICAgbWluLWhlaWdodDogMHB4OwotICAgICAgb3ZlcmZsb3cteTogYXV0bzsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLQotICAgIDx0b29sYmFyPgotICAgICAgPHNwYW4+PGI+R3JvdXAgYnk6PC9iPjwvc3Bhbj4KLSAgICAgIDx0ci11aS1iLWdyb3VwaW5nLXRhYmxlLWdyb3VwYnktcGlja2VyIGlkPSJwaWNrZXIiPgotICAgICAgPC90ci11aS1iLWdyb3VwaW5nLXRhYmxlLWdyb3VwYnktcGlja2VyPgotICAgIDwvdG9vbGJhcj4KLSAgICA8dGFibGUtY29udGFpbmVyPgotICAgICAgPHRyLXVpLWItZ3JvdXBpbmctdGFibGUgaWQ9InRhYmxlIj48L3RyLXVpLWItZ3JvdXBpbmctdGFibGU+Ci0gICAgPC90YWJsZS1jb250YWluZXI+Ci0gIDwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktaGlzdG9ncmFtLXNldC1jb250cm9scy1leHBvcnQiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGdyaWQ7Ci0gICAgICBncmlkLWdhcDogMWVtOwotICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIGF1dG87Ci0gICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0bzsKLSAgICB9Ci0gICAgYnV0dG9uIHsKLSAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKLSAgICAgIGJvcmRlcjogMDsKLSAgICAgIGZvbnQtc2l6ZTogaW5pdGlhbDsKLSAgICAgIHBhZGRpbmc6IDVweDsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLQotICAgIDxidXR0b24gb24tdGFwPSJleHBvcnRSYXdDc3ZfIj5yYXcgQ1NWPC9idXR0b24+Ci0gICAgPGJ1dHRvbiBvbi10YXA9ImV4cG9ydFJhd0pzb25fIj5yYXcgSlNPTjwvYnV0dG9uPgotICAgIDxidXR0b24gb24tdGFwPSJleHBvcnRNZXJnZWRDc3ZfIj5tZXJnZWQgQ1NWPC9idXR0b24+Ci0gICAgPGJ1dHRvbiBvbi10YXA9ImV4cG9ydE1lcmdlZEpzb25fIj5tZXJnZWQgSlNPTjwvYnV0dG9uPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci12LXVpLWhpc3RvZ3JhbS1zZXQtY29udHJvbHMiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIH0KLQotICAgICNoZWxwLCAjZmVlZGJhY2sgewotICAgICAgZGlzcGxheTogbm9uZTsKLSAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4OwotICAgIH0KLQotICAgICNzZWFyY2hfY29udGFpbmVyIHsKLSAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwotICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OwotICAgICAgcGFkZGluZy1ib3R0b206IDFweDsKLSAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBkYXJrZ3JleTsKLSAgICB9Ci0KLSAgICAjc2VhcmNoIHsKLSAgICAgIGJvcmRlcjogMDsKLSAgICAgIG1heC13aWR0aDogMjBlbTsKLSAgICAgIG91dGxpbmU6IG5vbmU7Ci0gICAgfQotCi0gICAgI2NsZWFyX3NlYXJjaCB7Ci0gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47Ci0gICAgICBoZWlnaHQ6IDFlbTsKLSAgICAgIHN0cm9rZTogYmxhY2s7Ci0gICAgICBzdHJva2Utd2lkdGg6IDE2OwotICAgIH0KLQotICAgICNjb250cm9scyB7Ci0gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotICAgIH0KLQotICAgICNzaG93X292ZXJ2aWV3LCAjaGlkZV9vdmVydmlldyB7Ci0gICAgICBoZWlnaHQ6IDFlbTsKLSAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKLSAgICB9Ci0KLSAgICAjc2hvd19vdmVydmlldyB7Ci0gICAgICBzdHJva2U6IGJsdWU7Ci0gICAgICBzdHJva2Utd2lkdGg6IDE2OwotICAgIH0KLQotICAgICNzaG93X292ZXJ2aWV3OmhvdmVyIHsKLSAgICAgIGJhY2tncm91bmQ6IGJsdWU7Ci0gICAgICBzdHJva2U6IHdoaXRlOwotICAgIH0KLQotICAgICNoaWRlX292ZXJ2aWV3IHsKLSAgICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgICBzdHJva2Utd2lkdGg6IDE4OwotICAgICAgc3Ryb2tlOiBibGFjazsKLSAgICB9Ci0KLSAgICAjaGlkZV9vdmVydmlldzpob3ZlciB7Ci0gICAgICBiYWNrZ3JvdW5kOiBibGFjazsKLSAgICAgIHN0cm9rZTogd2hpdGU7Ci0gICAgfQotCi0gICAgI3JlZmVyZW5jZV9kaXNwbGF5X2xhYmVsIHsKLSAgICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7Ci0gICAgfQotCi0gICAgI2FscGhhLCAjYWxwaGFfc2xpZGVyX2NvbnRhaW5lciB7Ci0gICAgICBkaXNwbGF5OiBub25lOwotICAgIH0KLQotICAgICNhbHBoYSB7Ci0gICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7Ci0gICAgfQotCi0gICAgI2FscGhhX3NsaWRlcl9jb250YWluZXIgewotICAgICAgYmFja2dyb3VuZDogd2hpdGU7Ci0gICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ci0gICAgICBwYWRkaW5nOiAwLjVlbTsKLSAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICAgIHotaW5kZXg6IDEwOyAvKiBzY2FsYXItc3BhbiB1c2VzIHotaW5kZXggOi0oICovCi0gICAgfQotCi0gICAgI2FscGhhX3NsaWRlciB7Ci0gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNsaWRlci12ZXJ0aWNhbDsKLSAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKLSAgICAgIGhlaWdodDogMjAwcHg7Ci0gICAgICB3aWR0aDogMzBweDsKLSAgICB9Ci0KLSAgICAjc3RhdGlzdGljIHsKLSAgICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7Ci0gICAgfQotCi0gICAgI2V4cG9ydCB7Ci0gICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0KLSAgICA8ZGl2IGlkPSJjb250cm9scyI+Ci0gICAgICA8c3BhbiBpZD0ic2VhcmNoX2NvbnRhaW5lciI+Ci0gICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBwbGFjZWhvbGRlcj0iRmluZCBIaXN0b2dyYW0gbmFtZSIgdmFsdWU9Int7c2VhcmNoUXVlcnk6OmtleXVwfX0iLz4KLSAgICAgICAgPHN2ZyBpZD0iY2xlYXJfc2VhcmNoIiBvbi10YXA9ImNsZWFyU2VhcmNoXyIgdmlld0JveD0iMCAwIDEyOCAxMjgiPgotICAgICAgICAgIDxnPgotICAgICAgICAgIDx0aXRsZT5DbGVhciBzZWFyY2g8L3RpdGxlPgotICAgICAgICAgIDxsaW5lIHgxPSIyOCIgeDI9IjEwMCIgeTE9IjI4IiB5Mj0iMTAwIj48L2xpbmU+Ci0gICAgICAgICAgPGxpbmUgeDE9IjI4IiB4Mj0iMTAwIiB5MT0iMTAwIiB5Mj0iMjgiPjwvbGluZT4KLSAgICAgICAgICA8L2c+Ci0gICAgICAgIDwvc3ZnPgotICAgICAgPC9zcGFuPgotCi0gICAgICA8c3ZnIGlkPSJzaG93X292ZXJ2aWV3IiBvbi10YXA9InRvZ2dsZU92ZXJ2aWV3TGluZUNoYXJ0c18iIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij4KLSAgICAgICAgPGc+Ci0gICAgICAgIDx0aXRsZT5TaG93IG92ZXJ2aWV3IGNoYXJ0czwvdGl0bGU+Ci0gICAgICAgIDxsaW5lIHgxPSIxOSIgeDI9IjQ5IiB5MT0iMTA5IiB5Mj0iNDkiPjwvbGluZT4KLSAgICAgICAgPGxpbmUgeDE9IjQ5IiB4Mj0iNzkiIHkxPSI0OSIgeTI9Ijc5Ij48L2xpbmU+Ci0gICAgICAgIDxsaW5lIHgxPSI3OSIgeDI9IjEwOSIgeTE9Ijc5IiB5Mj0iMTkiPjwvbGluZT4KLSAgICAgICAgPC9nPgotICAgICAgPC9zdmc+Ci0gICAgICA8c3ZnIGlkPSJoaWRlX292ZXJ2aWV3IiBvbi10YXA9InRvZ2dsZU92ZXJ2aWV3TGluZUNoYXJ0c18iIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij4KLSAgICAgICAgPGc+Ci0gICAgICAgIDx0aXRsZT5IaWRlIG92ZXJ2aWV3IGNoYXJ0czwvdGl0bGU+Ci0gICAgICAgIDxsaW5lIHgxPSIyOCIgeDI9IjEwMCIgeTE9IjI4IiB5Mj0iMTAwIj48L2xpbmU+Ci0gICAgICAgIDxsaW5lIHgxPSIyOCIgeDI9IjEwMCIgeTE9IjEwMCIgeTI9IjI4Ij48L2xpbmU+Ci0gICAgICAgIDwvZz4KLSAgICAgIDwvc3ZnPgotCi0gICAgICA8c2VsZWN0IGlkPSJyZWZlcmVuY2VfZGlzcGxheV9sYWJlbCIgdmFsdWU9Int7cmVmZXJlbmNlRGlzcGxheUxhYmVsOjpjaGFuZ2V9fSI+Ci0gICAgICAgIDxvcHRpb24gdmFsdWU9IiI+U2VsZWN0IGEgcmVmZXJlbmNlIGNvbHVtbjwvb3B0aW9uPgotICAgICAgPC9zZWxlY3Q+Ci0KLSAgICAgIDxidXR0b24gaWQ9ImFscGhhIiBvbi10YXA9Im9wZW5BbHBoYVNsaWRlcl8iPs6xPVtbYWxwaGFTdHJpbmddXTwvYnV0dG9uPgotICAgICAgPGRpdiBpZD0iYWxwaGFfc2xpZGVyX2NvbnRhaW5lciI+Ci0gICAgICAgIDxpbnB1dCBpZD0iYWxwaGFfc2xpZGVyIiBtYXg9IjE4IiBtaW49IjAiIG9uLWJsdXI9ImNsb3NlQWxwaGFTbGlkZXJfIiBvbi1pbnB1dD0idXBkYXRlQWxwaGFfIiB0eXBlPSJyYW5nZSIgdmFsdWU9Int7YWxwaGFJbmRleDo6Y2hhbmdlfX0iLz4KLSAgICAgIDwvZGl2PgotCi0gICAgICA8c2VsZWN0IGlkPSJzdGF0aXN0aWMiIHZhbHVlPSJ7e2Rpc3BsYXlTdGF0aXN0aWNOYW1lOjpjaGFuZ2V9fSI+Ci0gICAgICA8L3NlbGVjdD4KLQotICAgICAgPHRyLXVpLWItZHJvcGRvd24gbGFiZWw9IkV4cG9ydCI+Ci0gICAgICAgIDx0ci12LXVpLWhpc3RvZ3JhbS1zZXQtY29udHJvbHMtZXhwb3J0PgotICAgICAgICA8L3RyLXYtdWktaGlzdG9ncmFtLXNldC1jb250cm9scy1leHBvcnQ+Ci0gICAgICA8L3RyLXVpLWItZHJvcGRvd24+Ci0KLSAgICAgIDxpbnB1dCBjaGVja2VkPSJ7e3Nob3dBbGw6OmNoYW5nZX19IiBpZD0ic2hvd19hbGwiIHRpdGxlPSJXaGVuIHVuY2hlY2tlZCwgbGVzcyBpbXBvcnRhbnQgaGlzdG9ncmFtcyBhcmUgaGlkZGVuLiIgdHlwZT0iY2hlY2tib3giLz4KLSAgICAgIDxsYWJlbCBmb3I9InNob3dfYWxsIiB0aXRsZT0iV2hlbiB1bmNoZWNrZWQsIGxlc3MgaW1wb3J0YW50IGhpc3RvZ3JhbXMgYXJlIGhpZGRlbi4iPlNob3cgYWxsPC9sYWJlbD4KLQotICAgICAgPGEgaWQ9ImhlbHAiPkhlbHA8L2E+Ci0gICAgICA8YSBpZD0iZmVlZGJhY2siPkZlZWRiYWNrPC9hPgotICAgIDwvZGl2PgotCi0gICAgPHRyLXVpLWItZ3JvdXBpbmctdGFibGUtZ3JvdXBieS1waWNrZXIgaWQ9InBpY2tlciI+Ci0gICAgPC90ci11aS1iLWdyb3VwaW5nLXRhYmxlLWdyb3VwYnktcGlja2VyPgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci12LXVpLWhpc3RvZ3JhbS1zZXQtdGFibGUtY2VsbCI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgI2hpc3RvZ3JhbV9jb250YWluZXIgewotICAgICAgZGlzcGxheTogZmxleDsKLSAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7Ci0gICAgfQotCi0gICAgI21pc3NpbmcsICNlbXB0eSwgI3VubWVyZ2VhYmxlLCAjc2NhbGFyIHsKLSAgICAgIGZsZXgtZ3JvdzogMTsKLSAgICB9Ci0KLSAgICAjb3Blbl9oaXN0b2dyYW0sICNjbG9zZV9oaXN0b2dyYW0sICNvcGVuX2hpc3RvZ3JhbSBzdmcsICNjbG9zZV9oaXN0b2dyYW0gc3ZnIHsKLSAgICAgIGhlaWdodDogMWVtOwotICAgIH0KLQotICAgICNvcGVuX2hpc3RvZ3JhbSBzdmcgewotICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKLSAgICAgIHN0cm9rZS13aWR0aDogMDsKLSAgICAgIHN0cm9rZTogYmx1ZTsKLSAgICAgIGZpbGw6IGJsdWU7Ci0gICAgfQotICAgIDpob3N0KDpob3ZlcikgI29wZW5faGlzdG9ncmFtIHN2ZyB7Ci0gICAgICBiYWNrZ3JvdW5kOiBibHVlOwotICAgICAgc3Ryb2tlOiB3aGl0ZTsKLSAgICAgIGZpbGw6IHdoaXRlOwotICAgIH0KLQotICAgICNzY2FsYXIgewotICAgICAgZmxleC1ncm93OiAxOwotICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICB9Ci0KLSAgICAjaGlzdG9ncmFtIHsKLSAgICAgIGZsZXgtZ3JvdzogMTsKLSAgICB9Ci0KLSAgICAjY2xvc2VfaGlzdG9ncmFtIHN2ZyBsaW5lIHsKLSAgICAgIHN0cm9rZS13aWR0aDogMTg7Ci0gICAgICBzdHJva2U6IGJsYWNrOwotICAgIH0KLSAgICAjY2xvc2VfaGlzdG9ncmFtOmhvdmVyIHN2ZyB7Ci0gICAgICBiYWNrZ3JvdW5kOiBibGFjazsKLSAgICB9Ci0gICAgI2Nsb3NlX2hpc3RvZ3JhbTpob3ZlciBzdmcgbGluZSB7Ci0gICAgICBzdHJva2U6IHdoaXRlOwotICAgIH0KLQotICAgICNvdmVydmlld19jb250YWluZXIgewotICAgICAgZGlzcGxheTogbm9uZTsKLSAgICB9Ci0gICAgPC9zdHlsZT4KLQotICAgIDxkaXYgaWQ9Imhpc3RvZ3JhbV9jb250YWluZXIiPgotICAgICAgPHNwYW4gaWQ9Im1pc3NpbmciPihtaXNzaW5nKTwvc3Bhbj4KLSAgICAgIDxzcGFuIGlkPSJlbXB0eSI+KGVtcHR5KTwvc3Bhbj4KLSAgICAgIDxzcGFuIGlkPSJ1bm1lcmdlYWJsZSI+KHVubWVyZ2VhYmxlKTwvc3Bhbj4KLQotICAgICAgPHRyLXYtdWktc2NhbGFyLXNwYW4gaWQ9InNjYWxhciIgb24tY2xpY2s9Im9wZW5IaXN0b2dyYW1fIj48L3RyLXYtdWktc2NhbGFyLXNwYW4+Ci0KLSAgICAgIDxzcGFuIGlkPSJvcGVuX2hpc3RvZ3JhbSIgb24tY2xpY2s9Im9wZW5IaXN0b2dyYW1fIj4KLSAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+Ci0gICAgICAgICAgPHJlY3QgaGVpZ2h0PSIxNiIgd2lkdGg9IjMyIiB4PSIxNiIgeT0iMjQiPjwvcmVjdD4KLSAgICAgICAgICA8cmVjdCBoZWlnaHQ9IjE2IiB3aWR0aD0iOTYiIHg9IjE2IiB5PSI1NiI+PC9yZWN0PgotICAgICAgICAgIDxyZWN0IGhlaWdodD0iMTYiIHdpZHRoPSI2NCIgeD0iMTYiIHk9Ijg4Ij48L3JlY3Q+Ci0gICAgICAgIDwvc3ZnPgotICAgICAgPC9zcGFuPgotCi0gICAgICA8c3BhbiBpZD0iaGlzdG9ncmFtIj48L3NwYW4+Ci0KLSAgICAgIDxzcGFuIGlkPSJjbG9zZV9oaXN0b2dyYW0iIG9uLWNsaWNrPSJjbG9zZUhpc3RvZ3JhbV8iPgotICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij4KLSAgICAgICAgICA8bGluZSB4MT0iMjgiIHgyPSIxMDAiIHkxPSIyOCIgeTI9IjEwMCI+PC9saW5lPgotICAgICAgICAgIDxsaW5lIHgxPSIyOCIgeDI9IjEwMCIgeTE9IjEwMCIgeTI9IjI4Ij48L2xpbmU+Ci0gICAgICAgIDwvc3ZnPgotICAgICAgPC9zcGFuPgotICAgIDwvZGl2PgotCi0gICAgPGRpdiBpZD0ib3ZlcnZpZXdfY29udGFpbmVyIj4KLSAgICA8L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdi11aS1oaXN0b2dyYW0tc2V0LXRhYmxlLW5hbWUtY2VsbCI+Ci0gIDx0ZW1wbGF0ZT4KLSAgICA8c3R5bGU+Ci0gICAgI25hbWVfY29udGFpbmVyIHsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgfQotCi0gICAgI25hbWUgewotICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0gICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKLSAgICB9Ci0KLSAgICAjc2hvd19vdmVydmlldywgI2hpZGVfb3ZlcnZpZXcsICNzaG93X292ZXJ2aWV3IHN2ZywgI2hpZGVfb3ZlcnZpZXcgc3ZnIHsKLSAgICAgIGhlaWdodDogMWVtOwotICAgICAgbWFyZ2luLWxlZnQ6IDVweDsKLSAgICB9Ci0KLSAgICAjc2hvd19vdmVydmlldyBzdmcgewotICAgICAgc3Ryb2tlOiBibHVlOwotICAgICAgc3Ryb2tlLXdpZHRoOiAxNjsKLSAgICB9Ci0KLSAgICAjc2hvd19vdmVydmlldzpob3ZlciBzdmcgewotICAgICAgYmFja2dyb3VuZDogYmx1ZTsKLSAgICAgIHN0cm9rZTogd2hpdGU7Ci0gICAgfQotCi0gICAgI2hpZGVfb3ZlcnZpZXcgewotICAgICAgZGlzcGxheTogbm9uZTsKLSAgICB9Ci0KLSAgICAjaGlkZV9vdmVydmlldyBzdmcgewotICAgICAgc3Ryb2tlLXdpZHRoOiAxODsKLSAgICAgIHN0cm9rZTogYmxhY2s7Ci0gICAgfQotCi0gICAgI2hpZGVfb3ZlcnZpZXc6aG92ZXIgc3ZnIHsKLSAgICAgIGJhY2tncm91bmQ6IGJsYWNrOwotICAgICAgc3Ryb2tlOiB3aGl0ZTsKLSAgICB9Ci0KLSAgICAjb3Blbl9oaXN0b2dyYW1zLCAjY2xvc2VfaGlzdG9ncmFtcywgI29wZW5faGlzdG9ncmFtcyBzdmcsICNjbG9zZV9oaXN0b2dyYW1zIHN2ZyB7Ci0gICAgICBoZWlnaHQ6IDFlbTsKLSAgICB9Ci0KLSAgICAjY2xvc2VfaGlzdG9ncmFtcyB7Ci0gICAgICBkaXNwbGF5OiBub25lOwotICAgIH0KLQotICAgICNvcGVuX2hpc3RvZ3JhbXMgc3ZnIHsKLSAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7Ci0gICAgICBzdHJva2Utd2lkdGg6IDA7Ci0gICAgICBzdHJva2U6IGJsdWU7Ci0gICAgICBmaWxsOiBibHVlOwotICAgIH0KLSAgICAjb3Blbl9oaXN0b2dyYW1zOmhvdmVyIHN2ZyB7Ci0gICAgICBiYWNrZ3JvdW5kOiBibHVlOwotICAgICAgc3Ryb2tlOiB3aGl0ZTsKLSAgICAgIGZpbGw6IHdoaXRlOwotICAgIH0KLQotICAgICNjbG9zZV9oaXN0b2dyYW1zIGxpbmUgewotICAgICAgc3Ryb2tlLXdpZHRoOiAxODsKLSAgICAgIHN0cm9rZTogYmxhY2s7Ci0gICAgfQotICAgICNjbG9zZV9oaXN0b2dyYW1zOmhvdmVyIHsKLSAgICAgIGJhY2tncm91bmQ6IGJsYWNrOwotICAgIH0KLSAgICAjY2xvc2VfaGlzdG9ncmFtczpob3ZlciBsaW5lIHsKLSAgICAgIHN0cm9rZTogd2hpdGU7Ci0gICAgfQotCi0gICAgI292ZXJ2aWV3X2NvbnRhaW5lciB7Ci0gICAgICBkaXNwbGF5OiBub25lOwotICAgIH0KLSAgICA8L3N0eWxlPgotCi0gICAgPGRpdiBpZD0ibmFtZV9jb250YWluZXIiPgotICAgICAgPHNwYW4gaWQ9Im5hbWUiPjwvc3Bhbj4KLQotICAgICAgPHNwYW4gaWQ9InNob3dfb3ZlcnZpZXciIG9uLWNsaWNrPSJzaG93T3ZlcnZpZXdfIj4KLSAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+Ci0gICAgICAgICAgPGxpbmUgeDE9IjE5IiB4Mj0iNDkiIHkxPSIxMDkiIHkyPSI0OSI+PC9saW5lPgotICAgICAgICAgIDxsaW5lIHgxPSI0OSIgeDI9Ijc5IiB5MT0iNDkiIHkyPSI3OSI+PC9saW5lPgotICAgICAgICAgIDxsaW5lIHgxPSI3OSIgeDI9IjEwOSIgeTE9Ijc5IiB5Mj0iMTkiPjwvbGluZT4KLSAgICAgICAgPC9zdmc+Ci0gICAgICA8L3NwYW4+Ci0KLSAgICAgIDxzcGFuIGlkPSJoaWRlX292ZXJ2aWV3IiBvbi1jbGljaz0iaGlkZU92ZXJ2aWV3XyI+Ci0gICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDEyOCAxMjgiPgotICAgICAgICAgIDxsaW5lIHgxPSIyOCIgeDI9IjEwMCIgeTE9IjI4IiB5Mj0iMTAwIj48L2xpbmU+Ci0gICAgICAgICAgPGxpbmUgeDE9IjI4IiB4Mj0iMTAwIiB5MT0iMTAwIiB5Mj0iMjgiPjwvbGluZT4KLSAgICAgICAgPC9zdmc+Ci0gICAgICA8L3NwYW4+Ci0KLSAgICAgIDxzcGFuIGlkPSJvcGVuX2hpc3RvZ3JhbXMiIG9uLWNsaWNrPSJvcGVuSGlzdG9ncmFtc18iPgotICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij4KLSAgICAgICAgICA8cmVjdCBoZWlnaHQ9IjE2IiB3aWR0aD0iMzIiIHg9IjE2IiB5PSIyNCI+PC9yZWN0PgotICAgICAgICAgIDxyZWN0IGhlaWdodD0iMTYiIHdpZHRoPSI5NiIgeD0iMTYiIHk9IjU2Ij48L3JlY3Q+Ci0gICAgICAgICAgPHJlY3QgaGVpZ2h0PSIxNiIgd2lkdGg9IjY0IiB4PSIxNiIgeT0iODgiPjwvcmVjdD4KLSAgICAgICAgPC9zdmc+Ci0gICAgICA8L3NwYW4+Ci0KLSAgICAgIDxzcGFuIGlkPSJjbG9zZV9oaXN0b2dyYW1zIiBvbi1jbGljaz0iY2xvc2VIaXN0b2dyYW1zXyI+Ci0gICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDEyOCAxMjgiPgotICAgICAgICAgIDxsaW5lIHgxPSIyOCIgeDI9IjEwMCIgeTE9IjI4IiB5Mj0iMTAwIj48L2xpbmU+Ci0gICAgICAgICAgPGxpbmUgeDE9IjI4IiB4Mj0iMTAwIiB5MT0iMTAwIiB5Mj0iMjgiPjwvbGluZT4KLSAgICAgICAgPC9zdmc+Ci0gICAgICA8L3NwYW4+Ci0gICAgPC9kaXY+Ci0KLSAgICA8ZGl2IGlkPSJvdmVydmlld19jb250YWluZXIiPgotICAgIDwvZGl2PgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci12LXVpLWhpc3RvZ3JhbS1zZXQtdGFibGUiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIG1pbi1oZWlnaHQ6IDBweDsKLSAgICAgIG92ZXJmbG93OiBhdXRvOwotICAgIH0KLSAgICAjdGFibGUgewotICAgICAgbWFyZ2luLXRvcDogNXB4OwotICAgIH0KLSAgICA8L3N0eWxlPgotCi0gICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj4KLSAgPC90ci11aS1iLXRhYmxlPjwvdGVtcGxhdGU+Ci08L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktaGlzdG9ncmFtLXNldC12aWV3Ij4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKLSAgICB9Ci0KLSAgICAjemVybyB7Ci0gICAgICBjb2xvcjogcmVkOwotICAgICAgLyogaGlzdG9ncmFtLXNldC10YWJsZSBpcyB1c2VkIGJ5IGJvdGggbWV0cmljcy1zaWRlLXBhbmVsIGFuZCByZXN1bHRzLmh0bWwuCi0gICAgICAgKiBUaGlzIGZvbnQtc2l6ZSBydWxlIGhhcyBubyBlZmZlY3QgaW4gcmVzdWx0cy5odG1sLCBidXQgaW1wcm92ZXMKLSAgICAgICAqIGxlZ2liaWxpdHkgaW4gdGhlIG1ldHJpY3Mtc2lkZS1wYW5lbCwgd2hpY2ggc2V0cyBmb250LXNpemUgaW4gb3JkZXIgdG8KLSAgICAgICAqIG1ha2UgdGhpcyB0YWJsZSBkZW5zZXIuCi0gICAgICAgKi8KLSAgICAgIGZvbnQtc2l6ZTogaW5pdGlhbDsKLSAgICB9Ci0KLSAgICAjY29udGFpbmVyIHsKLSAgICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgfQotICAgIDwvc3R5bGU+Ci0KLSAgICA8ZGl2IGlkPSJ6ZXJvIj56ZXJvIEhpc3RvZ3JhbXM8L2Rpdj4KLQotICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+Ci0gICAgICA8dHItdi11aS1oaXN0b2dyYW0tc2V0LWNvbnRyb2xzIGlkPSJjb250cm9scyI+Ci0gICAgICA8L3RyLXYtdWktaGlzdG9ncmFtLXNldC1jb250cm9scz4KLQotICAgICAgPHRyLXYtdWktaGlzdG9ncmFtLXNldC10YWJsZSBpZD0idGFibGUiPjwvdHItdi11aS1oaXN0b2dyYW0tc2V0LXRhYmxlPgotICAgIDwvZGl2PgotICA8L3RlbXBsYXRlPgotPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1zcC1tZXRyaWNzLXNpZGUtcGFuZWwiPgotICA8dGVtcGxhdGU+Ci0gICAgPHN0eWxlPgotICAgIDpob3N0IHsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwotICAgIH0KLSAgICBkaXYjZXJyb3IgewotICAgICAgY29sb3I6IHJlZDsKLSAgICB9Ci0gICAgI3Jlc3VsdHMgewotICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgIH0KLSAgICA8L3N0eWxlPgotCi0gICAgPHRvcC1sZWZ0LWNvbnRyb2xzIGlkPSJ0b3BfbGVmdF9jb250cm9scyI+PC90b3AtbGVmdC1jb250cm9scz4KLQotICAgIDx0ci12LXVpLWhpc3RvZ3JhbS1zZXQtdmlldyBpZD0icmVzdWx0cyI+PC90ci12LXVpLWhpc3RvZ3JhbS1zZXQtdmlldz4KLQotICAgIDxkaXYgaWQ9ImVycm9yIj48L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktZS1zLWFsZXJ0cy1zaWRlLXBhbmVsIj4KLSAgPHRlbXBsYXRlPgotICAgIDxzdHlsZT4KLSAgICA6aG9zdCB7Ci0gICAgICBkaXNwbGF5OiBibG9jazsKLSAgICAgIHdpZHRoOiAyNTBweDsKLSAgICB9Ci0gICAgI2NvbnRlbnQgewotICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgfQotICAgIHRyLXVpLWItdGFibGUgewotICAgICAgZm9udC1zaXplOiAxMnB4OwotICAgIH0KLSAgICA8L3N0eWxlPgotCi0gICAgPGRpdiBpZD0iY29udGVudCI+Ci0gICAgICA8dG9vbGJhciBpZD0idG9vbGJhciI+PC90b29sYmFyPgotICAgICAgPHJlc3VsdC1hcmVhIGlkPSJyZXN1bHRfYXJlYSI+PC9yZXN1bHQtYXJlYT4KLSAgICA8L2Rpdj4KLSAgPC90ZW1wbGF0ZT4KLTwvZG9tLW1vZHVsZT48c2NyaXB0PgotCi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLS8qIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBhdXRvIGdlbmVyYXRlZC4KLSAqCi0gKiBEbyBub3QgZWRpdCBkaXJlY3RseS4KLSAqLwotCi0ndXNlIHN0cmljdCc7aWYod2luZG93LlBvbHltZXIpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IHByb2NlZWQuIFBvbHltZXIgYWxyZWFkeSBwcmVzZW50LicpO30KLXdpbmRvdy5Qb2x5bWVyPXt9O3dpbmRvdy5Qb2x5bWVyLmRvbT0nc2hhZG93JzsoZnVuY3Rpb24oKXtmdW5jdGlvbiByZXNvbHZlKCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoJ3VucmVzb2x2ZWQnKTt9Ci1pZih3aW5kb3cuV2ViQ29tcG9uZW50cyl7YWRkRXZlbnRMaXN0ZW5lcignV2ViQ29tcG9uZW50c1JlYWR5JyxyZXNvbHZlKTt9ZWxzZXtpZihkb2N1bWVudC5yZWFkeVN0YXRlPT09J2ludGVyYWN0aXZlJ3x8ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSdjb21wbGV0ZScpe3Jlc29sdmUoKTt9ZWxzZXthZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJyxyZXNvbHZlKTt9fX0oKSk7d2luZG93LlBvbHltZXI9e1NldHRpbmdzOmZ1bmN0aW9uKCl7dmFyIHNldHRpbmdzPXdpbmRvdy5Qb2x5bWVyfHx7fTtpZighc2V0dGluZ3Mubm9VcmxTZXR0aW5ncyl7dmFyIHBhcnRzPWxvY2F0aW9uLnNlYXJjaC5zbGljZSgxKS5zcGxpdCgnJicpO2Zvcih2YXIgaT0wLG87aTxwYXJ0cy5sZW5ndGgmJihvPXBhcnRzW2ldKTtpKyspe289by5zcGxpdCgnPScpO29bMF0mJihzZXR0aW5nc1tvWzBdXT1vWzFdfHx0cnVlKTt9fQotc2V0dGluZ3Mud2FudFNoYWRvdz1zZXR0aW5ncy5kb209PT0nc2hhZG93JztzZXR0aW5ncy5oYXNTaGFkb3c9Qm9vbGVhbihFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTaGFkb3dSb290KTtzZXR0aW5ncy5uYXRpdmVTaGFkb3c9c2V0dGluZ3MuaGFzU2hhZG93JiYhd2luZG93LlNoYWRvd0RPTVBvbHlmaWxsO3NldHRpbmdzLnVzZVNoYWRvdz1zZXR0aW5ncy53YW50U2hhZG93JiZzZXR0aW5ncy5oYXNTaGFkb3c7c2V0dGluZ3MuaGFzTmF0aXZlSW1wb3J0cz1Cb29sZWFuKCdpbXBvcnQnaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpKTtzZXR0aW5ncy51c2VOYXRpdmVJbXBvcnRzPXNldHRpbmdzLmhhc05hdGl2ZUltcG9ydHM7c2V0dGluZ3MudXNlTmF0aXZlQ3VzdG9tRWxlbWVudHM9IXdpbmRvdy5DdXN0b21FbGVtZW50c3x8d2luZG93LkN1c3RvbUVsZW1lbnRzLnVzZU5hdGl2ZTtzZXR0aW5ncy51c2VOYXRpdmVTaGFkb3c9c2V0dGluZ3MudXNlU2hhZG93JiZzZXR0aW5ncy5uYXRpdmVTaGFkb3c7c2V0dGluZ3MudXNlUG9seWZpbGxQcm90bz0hc2V0dGluZ3MudXNlTmF0aXZlQ3VzdG9tRWxlbWVudHMmJiFPYmplY3QuX19wcm90b19fO3NldHRpbmdzLmhhc05hdGl2ZUNTU1Byb3BlcnRpZXM9IW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XC82MDF8RWRnZVwvMTUvKSYmd2luZG93LkNTUyYmQ1NTLnN1cHBvcnRzJiZDU1Muc3VwcG9ydHMoJ2JveC1zaGFkb3cnLCcwIDAgMCB2YXIoLS1mb28pJyk7c2V0dGluZ3MudXNlTmF0aXZlQ1NTUHJvcGVydGllcz1zZXR0aW5ncy5oYXNOYXRpdmVDU1NQcm9wZXJ0aWVzJiZzZXR0aW5ncy5sYXp5UmVnaXN0ZXImJnNldHRpbmdzLnVzZU5hdGl2ZUNTU1Byb3BlcnRpZXM7c2V0dGluZ3MuaXNJRT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKCdUcmlkZW50Jyk7c2V0dGluZ3MucGFzc2l2ZVRvdWNoR2VzdHVyZXM9c2V0dGluZ3MucGFzc2l2ZVRvdWNoR2VzdHVyZXN8fGZhbHNlO3JldHVybiBzZXR0aW5nczt9KCl9OyhmdW5jdGlvbigpe3ZhciB1c2VyUG9seW1lcj13aW5kb3cuUG9seW1lcjt3aW5kb3cuUG9seW1lcj1mdW5jdGlvbihwcm90b3R5cGUpe2lmKHR5cGVvZiBwcm90b3R5cGU9PT0nZnVuY3Rpb24nKXtwcm90b3R5cGU9cHJvdG90eXBlLnByb3RvdHlwZTt9Ci1pZighcHJvdG90eXBlKXtwcm90b3R5cGU9e307fQotcHJvdG90eXBlPWRlc3VnYXIocHJvdG90eXBlKTt2YXIgY3VzdG9tQ3Rvcj1wcm90b3R5cGU9PT1wcm90b3R5cGUuY29uc3RydWN0b3IucHJvdG90eXBlP3Byb3RvdHlwZS5jb25zdHJ1Y3RvcjpudWxsO3ZhciBvcHRpb25zPXtwcm90b3R5cGU6cHJvdG90eXBlfTtpZihwcm90b3R5cGUuZXh0ZW5kcyl7b3B0aW9ucy5leHRlbmRzPXByb3RvdHlwZS5leHRlbmRzO30KLVBvbHltZXIudGVsZW1ldHJ5Ll9yZWdpc3RyYXRlKHByb3RvdHlwZSk7dmFyIGN0b3I9ZG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50KHByb3RvdHlwZS5pcyxvcHRpb25zKTtyZXR1cm4gY3VzdG9tQ3Rvcnx8Y3Rvcjt9O3ZhciBkZXN1Z2FyPWZ1bmN0aW9uKHByb3RvdHlwZSl7dmFyIGJhc2U9UG9seW1lci5CYXNlO2lmKHByb3RvdHlwZS5leHRlbmRzKXtiYXNlPVBvbHltZXIuQmFzZS5fZ2V0RXh0ZW5kZWRQcm90b3R5cGUocHJvdG90eXBlLmV4dGVuZHMpO30KLXByb3RvdHlwZT1Qb2x5bWVyLkJhc2UuY2hhaW5PYmplY3QocHJvdG90eXBlLGJhc2UpO3Byb3RvdHlwZS5yZWdpc3RlckNhbGxiYWNrKCk7cmV0dXJuIHByb3RvdHlwZTt9O2lmKHVzZXJQb2x5bWVyKXtmb3IodmFyIGkgaW4gdXNlclBvbHltZXIpe1BvbHltZXJbaV09dXNlclBvbHltZXJbaV07fX0KLVBvbHltZXIuQ2xhc3M9ZnVuY3Rpb24ocHJvdG90eXBlKXtpZighcHJvdG90eXBlLmZhY3RvcnlJbXBsKXtwcm90b3R5cGUuZmFjdG9yeUltcGw9ZnVuY3Rpb24oKXt9O30KLXJldHVybiBkZXN1Z2FyKHByb3RvdHlwZSkuY29uc3RydWN0b3I7fTt9KCkpO1BvbHltZXIudGVsZW1ldHJ5PXtyZWdpc3RyYXRpb25zOltdLF9yZWdMb2c6ZnVuY3Rpb24ocHJvdG90eXBlKXtjb25zb2xlLmxvZygnWycrcHJvdG90eXBlLmlzKyddOiByZWdpc3RlcmVkJyk7fSxfcmVnaXN0cmF0ZTpmdW5jdGlvbihwcm90b3R5cGUpe3RoaXMucmVnaXN0cmF0aW9ucy5wdXNoKHByb3RvdHlwZSk7UG9seW1lci5sb2cmJnRoaXMuX3JlZ0xvZyhwcm90b3R5cGUpO30sZHVtcFJlZ2lzdHJhdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLnJlZ2lzdHJhdGlvbnMuZm9yRWFjaCh0aGlzLl9yZWdMb2cpO319O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csJ2N1cnJlbnRJbXBvcnQnLHtlbnVtZXJhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKGRvY3VtZW50Ll9jdXJyZW50U2NyaXB0fHxkb2N1bWVudC5jdXJyZW50U2NyaXB0fHx7fSkub3duZXJEb2N1bWVudDt9fSk7UG9seW1lci5SZW5kZXJTdGF0dXM9e19yZWFkeTpmYWxzZSxfY2FsbGJhY2tzOltdLHdoZW5SZWFkeTpmdW5jdGlvbihjYil7aWYodGhpcy5fcmVhZHkpe2NiKCk7fWVsc2V7dGhpcy5fY2FsbGJhY2tzLnB1c2goY2IpO319LF9tYWtlUmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkeT10cnVlO2Zvcih2YXIgaT0wO2k8dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDtpKyspe3RoaXMuX2NhbGxiYWNrc1tpXSgpO30KLXRoaXMuX2NhbGxiYWNrcz1bXTt9LF9jYXRjaEZpcnN0UmVuZGVyOmZ1bmN0aW9uKCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7UG9seW1lci5SZW5kZXJTdGF0dXMuX21ha2VSZWFkeSgpO30pO30sX2FmdGVyTmV4dFJlbmRlclF1ZXVlOltdLF93YWl0aW5nTmV4dFJlbmRlcjpmYWxzZSxhZnRlck5leHRSZW5kZXI6ZnVuY3Rpb24oZWxlbWVudCxmbixhcmdzKXt0aGlzLl93YXRjaE5leHRSZW5kZXIoKTt0aGlzLl9hZnRlck5leHRSZW5kZXJRdWV1ZS5wdXNoKFtlbGVtZW50LGZuLGFyZ3NdKTt9LGhhc1JlbmRlcmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWR5O30sX3dhdGNoTmV4dFJlbmRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl93YWl0aW5nTmV4dFJlbmRlcil7dGhpcy5fd2FpdGluZ05leHRSZW5kZXI9dHJ1ZTt2YXIgZm49ZnVuY3Rpb24oKXtQb2x5bWVyLlJlbmRlclN0YXR1cy5fZmx1c2hOZXh0UmVuZGVyKCk7fTtpZighdGhpcy5fcmVhZHkpe3RoaXMud2hlblJlYWR5KGZuKTt9ZWxzZXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZm4pO319fSxfZmx1c2hOZXh0UmVuZGVyOmZ1bmN0aW9uKCl7dmFyIHNlbGY9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2VsZi5fZmx1c2hSZW5kZXJDYWxsYmFja3Moc2VsZi5fYWZ0ZXJOZXh0UmVuZGVyUXVldWUpO3NlbGYuX2FmdGVyTmV4dFJlbmRlclF1ZXVlPVtdO3NlbGYuX3dhaXRpbmdOZXh0UmVuZGVyPWZhbHNlO30pO30sX2ZsdXNoUmVuZGVyQ2FsbGJhY2tzOmZ1bmN0aW9uKGNhbGxiYWNrcyl7Zm9yKHZhciBpPTAsaDtpPGNhbGxiYWNrcy5sZW5ndGg7aSsrKXtoPWNhbGxiYWNrc1tpXTtoWzFdLmFwcGx5KGhbMF0saFsyXXx8UG9seW1lci5uYXIpO319fTtpZih3aW5kb3cuSFRNTEltcG9ydHMpe0hUTUxJbXBvcnRzLndoZW5SZWFkeShmdW5jdGlvbigpe1BvbHltZXIuUmVuZGVyU3RhdHVzLl9jYXRjaEZpcnN0UmVuZGVyKCk7fSk7fWVsc2V7UG9seW1lci5SZW5kZXJTdGF0dXMuX2NhdGNoRmlyc3RSZW5kZXIoKTt9Ci1Qb2x5bWVyLkltcG9ydFN0YXR1cz1Qb2x5bWVyLlJlbmRlclN0YXR1cztQb2x5bWVyLkltcG9ydFN0YXR1cy53aGVuTG9hZGVkPVBvbHltZXIuSW1wb3J0U3RhdHVzLndoZW5SZWFkeTsoZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIHNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7UG9seW1lci5CYXNlPXtfX2lzUG9seW1lckluc3RhbmNlX186dHJ1ZSxfYWRkRmVhdHVyZTpmdW5jdGlvbihmZWF0dXJlKXt0aGlzLm1peGluKHRoaXMsZmVhdHVyZSk7fSxyZWdpc3RlckNhbGxiYWNrOmZ1bmN0aW9uKCl7aWYoc2V0dGluZ3MubGF6eVJlZ2lzdGVyPT09J21heCcpe2lmKHRoaXMuYmVmb3JlUmVnaXN0ZXIpe3RoaXMuYmVmb3JlUmVnaXN0ZXIoKTt9fWVsc2V7dGhpcy5fZGVzdWdhckJlaGF2aW9ycygpO2Zvcih2YXIgaT0wLGI7aTx0aGlzLmJlaGF2aW9ycy5sZW5ndGg7aSsrKXtiPXRoaXMuYmVoYXZpb3JzW2ldO2lmKGIuYmVmb3JlUmVnaXN0ZXIpe2IuYmVmb3JlUmVnaXN0ZXIuY2FsbCh0aGlzKTt9fQotaWYodGhpcy5iZWZvcmVSZWdpc3Rlcil7dGhpcy5iZWZvcmVSZWdpc3RlcigpO319Ci10aGlzLl9yZWdpc3RlckZlYXR1cmVzKCk7aWYoIXNldHRpbmdzLmxhenlSZWdpc3Rlcil7dGhpcy5lbnN1cmVSZWdpc3RlckZpbmlzaGVkKCk7fX0sY3JlYXRlZENhbGxiYWNrOmZ1bmN0aW9uKCl7aWYoc2V0dGluZ3MuZGlzYWJsZVVwZ3JhZGVFbmFibGVkKXtpZih0aGlzLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZS11cGdyYWRlJykpe3RoaXMuX3Byb3BlcnR5U2V0dGVyPWRpc2FibGVVcGdyYWRlUHJvcGVydHlTZXR0ZXI7dGhpcy5fY29uZmlnVmFsdWU9bnVsbDt0aGlzLl9fZGF0YV9fPXt9O3JldHVybjt9ZWxzZXt0aGlzLl9faGFzSW5pdGlhbGl6ZWQ9dHJ1ZTt9fQotdGhpcy5fX2luaXRpYWxpemUoKTt9LF9faW5pdGlhbGl6ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9faGFzUmVnaXN0ZXJGaW5pc2hlZCl7dGhpcy5fZW5zdXJlUmVnaXN0ZXJGaW5pc2hlZCh0aGlzLl9fcHJvdG9fXyk7fQotUG9seW1lci50ZWxlbWV0cnkuaW5zdGFuY2VDb3VudCsrO3RoaXMucm9vdD10aGlzO2Zvcih2YXIgaT0wLGI7aTx0aGlzLmJlaGF2aW9ycy5sZW5ndGg7aSsrKXtiPXRoaXMuYmVoYXZpb3JzW2ldO2lmKGIuY3JlYXRlZCl7Yi5jcmVhdGVkLmNhbGwodGhpcyk7fX0KLWlmKHRoaXMuY3JlYXRlZCl7dGhpcy5jcmVhdGVkKCk7fQotdGhpcy5faW5pdEZlYXR1cmVzKCk7fSxlbnN1cmVSZWdpc3RlckZpbmlzaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZW5zdXJlUmVnaXN0ZXJGaW5pc2hlZCh0aGlzKTt9LF9lbnN1cmVSZWdpc3RlckZpbmlzaGVkOmZ1bmN0aW9uKHByb3RvKXtpZihwcm90by5fX2hhc1JlZ2lzdGVyRmluaXNoZWQhPT1wcm90by5pc3x8IXByb3RvLmlzKXtpZihzZXR0aW5ncy5sYXp5UmVnaXN0ZXI9PT0nbWF4Jyl7cHJvdG8uX2Rlc3VnYXJCZWhhdmlvcnMoKTtmb3IodmFyIGk9MCxiO2k8cHJvdG8uYmVoYXZpb3JzLmxlbmd0aDtpKyspe2I9cHJvdG8uYmVoYXZpb3JzW2ldO2lmKGIuYmVmb3JlUmVnaXN0ZXIpe2IuYmVmb3JlUmVnaXN0ZXIuY2FsbChwcm90byk7fX19Ci1wcm90by5fX2hhc1JlZ2lzdGVyRmluaXNoZWQ9cHJvdG8uaXM7aWYocHJvdG8uX2ZpbmlzaFJlZ2lzdGVyRmVhdHVyZXMpe3Byb3RvLl9maW5pc2hSZWdpc3RlckZlYXR1cmVzKCk7fQotZm9yKHZhciBqPTAscGI7ajxwcm90by5iZWhhdmlvcnMubGVuZ3RoO2orKyl7cGI9cHJvdG8uYmVoYXZpb3JzW2pdO2lmKHBiLnJlZ2lzdGVyZWQpe3BiLnJlZ2lzdGVyZWQuY2FsbChwcm90byk7fX0KLWlmKHByb3RvLnJlZ2lzdGVyZWQpe3Byb3RvLnJlZ2lzdGVyZWQoKTt9Ci1pZihzZXR0aW5ncy51c2VQb2x5ZmlsbFByb3RvJiZwcm90byE9PXRoaXMpe3Byb3RvLmV4dGVuZCh0aGlzLHByb3RvKTt9fX0sYXR0YWNoZWRDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBzZWxmPXRoaXM7UG9seW1lci5SZW5kZXJTdGF0dXMud2hlblJlYWR5KGZ1bmN0aW9uKCl7c2VsZi5pc0F0dGFjaGVkPXRydWU7Zm9yKHZhciBpPTAsYjtpPHNlbGYuYmVoYXZpb3JzLmxlbmd0aDtpKyspe2I9c2VsZi5iZWhhdmlvcnNbaV07aWYoYi5hdHRhY2hlZCl7Yi5hdHRhY2hlZC5jYWxsKHNlbGYpO319Ci1pZihzZWxmLmF0dGFjaGVkKXtzZWxmLmF0dGFjaGVkKCk7fX0pO30sZGV0YWNoZWRDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBzZWxmPXRoaXM7UG9seW1lci5SZW5kZXJTdGF0dXMud2hlblJlYWR5KGZ1bmN0aW9uKCl7c2VsZi5pc0F0dGFjaGVkPWZhbHNlO2Zvcih2YXIgaT0wLGI7aTxzZWxmLmJlaGF2aW9ycy5sZW5ndGg7aSsrKXtiPXNlbGYuYmVoYXZpb3JzW2ldO2lmKGIuZGV0YWNoZWQpe2IuZGV0YWNoZWQuY2FsbChzZWxmKTt9fQotaWYoc2VsZi5kZXRhY2hlZCl7c2VsZi5kZXRhY2hlZCgpO319KTt9LGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjazpmdW5jdGlvbihuYW1lLG9sZFZhbHVlLG5ld1ZhbHVlKXt0aGlzLl9hdHRyaWJ1dGVDaGFuZ2VkSW1wbChuYW1lKTtmb3IodmFyIGk9MCxiO2k8dGhpcy5iZWhhdmlvcnMubGVuZ3RoO2krKyl7Yj10aGlzLmJlaGF2aW9yc1tpXTtpZihiLmF0dHJpYnV0ZUNoYW5nZWQpe2IuYXR0cmlidXRlQ2hhbmdlZC5jYWxsKHRoaXMsbmFtZSxvbGRWYWx1ZSxuZXdWYWx1ZSk7fX0KLWlmKHRoaXMuYXR0cmlidXRlQ2hhbmdlZCl7dGhpcy5hdHRyaWJ1dGVDaGFuZ2VkKG5hbWUsb2xkVmFsdWUsbmV3VmFsdWUpO319LF9hdHRyaWJ1dGVDaGFuZ2VkSW1wbDpmdW5jdGlvbihuYW1lKXt0aGlzLl9zZXRBdHRyaWJ1dGVUb1Byb3BlcnR5KHRoaXMsbmFtZSk7fSxleHRlbmQ6ZnVuY3Rpb24odGFyZ2V0LHNvdXJjZSl7aWYodGFyZ2V0JiZzb3VyY2Upe3ZhciBuJD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UpO2Zvcih2YXIgaT0wLG47aTxuJC5sZW5ndGgmJihuPW4kW2ldKTtpKyspe3RoaXMuY29weU93blByb3BlcnR5KG4sc291cmNlLHRhcmdldCk7fX0KLXJldHVybiB0YXJnZXR8fHNvdXJjZTt9LG1peGluOmZ1bmN0aW9uKHRhcmdldCxzb3VyY2Upe2Zvcih2YXIgaSBpbiBzb3VyY2Upe3RhcmdldFtpXT1zb3VyY2VbaV07fQotcmV0dXJuIHRhcmdldDt9LGNvcHlPd25Qcm9wZXJ0eTpmdW5jdGlvbihuYW1lLHNvdXJjZSx0YXJnZXQpe3ZhciBwZD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSxuYW1lKTtpZihwZCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxuYW1lLHBkKTt9fSxfbG9nZ2VyOmZ1bmN0aW9uKGxldmVsLGFyZ3Mpe2lmKGFyZ3MubGVuZ3RoPT09MSYmQXJyYXkuaXNBcnJheShhcmdzWzBdKSl7YXJncz1hcmdzWzBdO30KLXN3aXRjaChsZXZlbCl7Y2FzZSdsb2cnOmNhc2Und2Fybic6Y2FzZSdlcnJvcic6Y29uc29sZVtsZXZlbF0uYXBwbHkoY29uc29sZSxhcmdzKTticmVhazt9fSxfbG9nOmZ1bmN0aW9uKCl7dmFyIGFyZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3RoaXMuX2xvZ2dlcignbG9nJyxhcmdzKTt9LF93YXJuOmZ1bmN0aW9uKCl7dmFyIGFyZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3RoaXMuX2xvZ2dlcignd2FybicsYXJncyk7fSxfZXJyb3I6ZnVuY3Rpb24oKXt2YXIgYXJncz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7dGhpcy5fbG9nZ2VyKCdlcnJvcicsYXJncyk7fSxfbG9nZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2dQcmVmaXguY29uY2F0KHRoaXMuaXMpLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpO319O1BvbHltZXIuQmFzZS5fbG9nUHJlZml4PWZ1bmN0aW9uKCl7dmFyIGNvbG9yPXdpbmRvdy5jaHJvbWUmJiEvZWRnZS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtyZXR1cm4gY29sb3I/WyclY1slczo6JXNdOicsJ2ZvbnQtd2VpZ2h0OiBib2xkOyBiYWNrZ3JvdW5kLWNvbG9yOiNFRUVFMDA7J106WydbJXM6OiVzXTonXTt9KCk7UG9seW1lci5CYXNlLmNoYWluT2JqZWN0PWZ1bmN0aW9uKG9iamVjdCxpbmhlcml0ZWQpe2lmKG9iamVjdCYmaW5oZXJpdGVkJiZvYmplY3QhPT1pbmhlcml0ZWQpe2lmKCFPYmplY3QuX19wcm90b19fKXtvYmplY3Q9UG9seW1lci5CYXNlLmV4dGVuZChPYmplY3QuY3JlYXRlKGluaGVyaXRlZCksb2JqZWN0KTt9Ci1vYmplY3QuX19wcm90b19fPWluaGVyaXRlZDt9Ci1yZXR1cm4gb2JqZWN0O307UG9seW1lci5CYXNlPVBvbHltZXIuQmFzZS5jaGFpbk9iamVjdChQb2x5bWVyLkJhc2UsSFRNTEVsZW1lbnQucHJvdG90eXBlKTtQb2x5bWVyLkJhc2VEZXNjcmlwdG9ycz17fTt2YXIgZGlzYWJsZVVwZ3JhZGVQcm9wZXJ0eVNldHRlcjtpZihzZXR0aW5ncy5kaXNhYmxlVXBncmFkZUVuYWJsZWQpe2Rpc2FibGVVcGdyYWRlUHJvcGVydHlTZXR0ZXI9ZnVuY3Rpb24ocHJvcGVydHksdmFsdWUpe3RoaXMuX19kYXRhX19bcHJvcGVydHldPXZhbHVlO307dmFyIG9yaWdBdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2s9UG9seW1lci5CYXNlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaztQb2x5bWVyLkJhc2UuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrPWZ1bmN0aW9uKG5hbWUsb2xkVmFsdWUsbmV3VmFsdWUpe2lmKCF0aGlzLl9faGFzSW5pdGlhbGl6ZWQmJm5hbWU9PT0nZGlzYWJsZS11cGdyYWRlJyl7dGhpcy5fX2hhc0luaXRpYWxpemVkPXRydWU7dGhpcy5fcHJvcGVydHlTZXR0ZXI9UG9seW1lci5CaW5kLl9tb2RlbEFwaS5fcHJvcGVydHlTZXR0ZXI7dGhpcy5fY29uZmlnVmFsdWU9UG9seW1lci5CYXNlLl9jb25maWdWYWx1ZTt0aGlzLl9faW5pdGlhbGl6ZSgpO30KLW9yaWdBdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2suY2FsbCh0aGlzLG5hbWUsb2xkVmFsdWUsbmV3VmFsdWUpO307fQotaWYod2luZG93LkN1c3RvbUVsZW1lbnRzKXtQb2x5bWVyLmluc3RhbmNlb2Y9Q3VzdG9tRWxlbWVudHMuaW5zdGFuY2VvZjt9ZWxzZXtQb2x5bWVyLmluc3RhbmNlb2Y9ZnVuY3Rpb24ob2JqLGN0b3Ipe3JldHVybiBvYmogaW5zdGFuY2VvZiBjdG9yO307fQotUG9seW1lci5pc0luc3RhbmNlPWZ1bmN0aW9uKG9iail7cmV0dXJuIEJvb2xlYW4ob2JqJiZvYmouX19pc1BvbHltZXJJbnN0YW5jZV9fKTt9O1BvbHltZXIudGVsZW1ldHJ5Lmluc3RhbmNlQ291bnQ9MDt9KCkpOyhmdW5jdGlvbigpe3ZhciBtb2R1bGVzPXt9O3ZhciBsY01vZHVsZXM9e307dmFyIGZpbmRNb2R1bGU9ZnVuY3Rpb24oaWQpe3JldHVybiBtb2R1bGVzW2lkXXx8bGNNb2R1bGVzW2lkLnRvTG93ZXJDYXNlKCldO307dmFyIERvbU1vZHVsZT1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkb20tbW9kdWxlJyk7fTtEb21Nb2R1bGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSFRNTEVsZW1lbnQucHJvdG90eXBlKTtQb2x5bWVyLkJhc2UubWl4aW4oRG9tTW9kdWxlLnByb3RvdHlwZSx7Y3JlYXRlZENhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5yZWdpc3RlcigpO30scmVnaXN0ZXI6ZnVuY3Rpb24oaWQpe2lkPWlkfHx0aGlzLmlkfHx0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpfHx0aGlzLmdldEF0dHJpYnV0ZSgnaXMnKTtpZihpZCl7dGhpcy5pZD1pZDttb2R1bGVzW2lkXT10aGlzO2xjTW9kdWxlc1tpZC50b0xvd2VyQ2FzZSgpXT10aGlzO319LGltcG9ydDpmdW5jdGlvbihpZCxzZWxlY3Rvcil7aWYoaWQpe3ZhciBtPWZpbmRNb2R1bGUoaWQpO2lmKCFtKXtmb3JjZURvbU1vZHVsZXNVcGdyYWRlKCk7bT1maW5kTW9kdWxlKGlkKTt9Ci1pZihtJiZzZWxlY3Rvcil7bT1tLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO30KLXJldHVybiBtO319fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERvbU1vZHVsZS5wcm90b3R5cGUsJ2NvbnN0cnVjdG9yJyx7dmFsdWU6RG9tTW9kdWxlLGNvbmZpZ3VyYWJsZTp0cnVlLHdyaXRhYmxlOnRydWV9KTt2YXIgY2VQb2x5ZmlsbD13aW5kb3cuQ3VzdG9tRWxlbWVudHMmJiFDdXN0b21FbGVtZW50cy51c2VOYXRpdmU7ZG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50KCdkb20tbW9kdWxlJyxEb21Nb2R1bGUpO2Z1bmN0aW9uIGZvcmNlRG9tTW9kdWxlc1VwZ3JhZGUoKXtpZihjZVBvbHlmaWxsKXt2YXIgc2NyaXB0PWRvY3VtZW50Ll9jdXJyZW50U2NyaXB0fHxkb2N1bWVudC5jdXJyZW50U2NyaXB0O3ZhciBkb2M9c2NyaXB0JiZzY3JpcHQub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQ7dmFyIG1vZHVsZXM9ZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2RvbS1tb2R1bGUnKTtmb3IodmFyIGk9bW9kdWxlcy5sZW5ndGgtMSxtO2k+PTAmJihtPW1vZHVsZXNbaV0pO2ktLSl7aWYobS5fX3VwZ3JhZGVkX18pe3JldHVybjt9ZWxzZXtDdXN0b21FbGVtZW50cy51cGdyYWRlKG0pO319fX19KCkpO1BvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSh7X3ByZXBJczpmdW5jdGlvbigpe2lmKCF0aGlzLmlzKXt2YXIgbW9kdWxlPShkb2N1bWVudC5fY3VycmVudFNjcmlwdHx8ZG9jdW1lbnQuY3VycmVudFNjcmlwdCkucGFyZW50Tm9kZTtpZihtb2R1bGUubG9jYWxOYW1lPT09J2RvbS1tb2R1bGUnKXt2YXIgaWQ9bW9kdWxlLmlkfHxtb2R1bGUuZ2V0QXR0cmlidXRlKCduYW1lJyl8fG1vZHVsZS5nZXRBdHRyaWJ1dGUoJ2lzJyk7dGhpcy5pcz1pZDt9fQotaWYodGhpcy5pcyl7dGhpcy5pcz10aGlzLmlzLnRvTG93ZXJDYXNlKCk7fX19KTtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe2JlaGF2aW9yczpbXSxfZGVzdWdhckJlaGF2aW9yczpmdW5jdGlvbigpe2lmKHRoaXMuYmVoYXZpb3JzLmxlbmd0aCl7dGhpcy5iZWhhdmlvcnM9dGhpcy5fZGVzdWdhclNvbWVCZWhhdmlvcnModGhpcy5iZWhhdmlvcnMpO319LF9kZXN1Z2FyU29tZUJlaGF2aW9yczpmdW5jdGlvbihiZWhhdmlvcnMpe3ZhciBiZWhhdmlvclNldD1bXTtiZWhhdmlvcnM9dGhpcy5fZmxhdHRlbkJlaGF2aW9yc0xpc3QoYmVoYXZpb3JzKTtmb3IodmFyIGk9YmVoYXZpb3JzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgYj1iZWhhdmlvcnNbaV07aWYoYmVoYXZpb3JTZXQuaW5kZXhPZihiKT09PS0xKXt0aGlzLl9taXhpbkJlaGF2aW9yKGIpO2JlaGF2aW9yU2V0LnVuc2hpZnQoYik7fX0KLXJldHVybiBiZWhhdmlvclNldDt9LF9mbGF0dGVuQmVoYXZpb3JzTGlzdDpmdW5jdGlvbihiZWhhdmlvcnMpe3ZhciBmbGF0PVtdO2Zvcih2YXIgaT0wO2k8YmVoYXZpb3JzLmxlbmd0aDtpKyspe3ZhciBiPWJlaGF2aW9yc1tpXTtpZihiIGluc3RhbmNlb2YgQXJyYXkpe2ZsYXQ9ZmxhdC5jb25jYXQodGhpcy5fZmxhdHRlbkJlaGF2aW9yc0xpc3QoYikpO31lbHNlIGlmKGIpe2ZsYXQucHVzaChiKTt9ZWxzZXt0aGlzLl93YXJuKHRoaXMuX2xvZ2YoJ19mbGF0dGVuQmVoYXZpb3JzTGlzdCcsJ2JlaGF2aW9yIGlzIG51bGwsIGNoZWNrIGZvciBtaXNzaW5nIG9yIDQwNCBpbXBvcnQnKSk7fX0KLXJldHVybiBmbGF0O30sX21peGluQmVoYXZpb3I6ZnVuY3Rpb24oYil7dmFyIG4kPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpO3ZhciB1c2VBc3NpZ25tZW50PWIuX25vQWNjZXNzb3JzO2Zvcih2YXIgaT0wLG47aTxuJC5sZW5ndGgmJihuPW4kW2ldKTtpKyspe2lmKCFQb2x5bWVyLkJhc2UuX2JlaGF2aW9yUHJvcGVydGllc1tuXSYmIXRoaXMuaGFzT3duUHJvcGVydHkobikpe2lmKHVzZUFzc2lnbm1lbnQpe3RoaXNbbl09YltuXTt9ZWxzZXt0aGlzLmNvcHlPd25Qcm9wZXJ0eShuLGIsdGhpcyk7fX19fSxfcHJlcEJlaGF2aW9yczpmdW5jdGlvbigpe3RoaXMuX3ByZXBGbGF0dGVuZWRCZWhhdmlvcnModGhpcy5iZWhhdmlvcnMpO30sX3ByZXBGbGF0dGVuZWRCZWhhdmlvcnM6ZnVuY3Rpb24oYmVoYXZpb3JzKXtmb3IodmFyIGk9MCxsPWJlaGF2aW9ycy5sZW5ndGg7aTxsO2krKyl7dGhpcy5fcHJlcEJlaGF2aW9yKGJlaGF2aW9yc1tpXSk7fQotdGhpcy5fcHJlcEJlaGF2aW9yKHRoaXMpO30sX21hcnNoYWxCZWhhdmlvcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGk9MDtpPHRoaXMuYmVoYXZpb3JzLmxlbmd0aDtpKyspe3RoaXMuX21hcnNoYWxCZWhhdmlvcih0aGlzLmJlaGF2aW9yc1tpXSk7fQotdGhpcy5fbWFyc2hhbEJlaGF2aW9yKHRoaXMpO319KTtQb2x5bWVyLkJhc2UuX2JlaGF2aW9yUHJvcGVydGllcz17aG9zdEF0dHJpYnV0ZXM6dHJ1ZSxiZWZvcmVSZWdpc3Rlcjp0cnVlLHJlZ2lzdGVyZWQ6dHJ1ZSxwcm9wZXJ0aWVzOnRydWUsb2JzZXJ2ZXJzOnRydWUsbGlzdGVuZXJzOnRydWUsY3JlYXRlZDp0cnVlLGF0dGFjaGVkOnRydWUsZGV0YWNoZWQ6dHJ1ZSxhdHRyaWJ1dGVDaGFuZ2VkOnRydWUscmVhZHk6dHJ1ZSxfbm9BY2Nlc3NvcnM6dHJ1ZX07UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfZ2V0RXh0ZW5kZWRQcm90b3R5cGU6ZnVuY3Rpb24odGFnKXtyZXR1cm4gdGhpcy5fZ2V0RXh0ZW5kZWROYXRpdmVQcm90b3R5cGUodGFnKTt9LF9uYXRpdmVQcm90b3R5cGVzOnt9LF9nZXRFeHRlbmRlZE5hdGl2ZVByb3RvdHlwZTpmdW5jdGlvbih0YWcpe3ZhciBwPXRoaXMuX25hdGl2ZVByb3RvdHlwZXNbdGFnXTtpZighcCl7cD1PYmplY3QuY3JlYXRlKHRoaXMuZ2V0TmF0aXZlUHJvdG90eXBlKHRhZykpO3ZhciBwJD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhQb2x5bWVyLkJhc2UpO2Zvcih2YXIgaT0wLG47aTxwJC5sZW5ndGgmJihuPXAkW2ldKTtpKyspe2lmKCFQb2x5bWVyLkJhc2VEZXNjcmlwdG9yc1tuXSl7cFtuXT1Qb2x5bWVyLkJhc2Vbbl07fX0KLU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHAsUG9seW1lci5CYXNlRGVzY3JpcHRvcnMpO3RoaXMuX25hdGl2ZVByb3RvdHlwZXNbdGFnXT1wO30KLXJldHVybiBwO30sZ2V0TmF0aXZlUHJvdG90eXBlOmZ1bmN0aW9uKHRhZyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZykpO319KTtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe19wcmVwQ29uc3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLl9mYWN0b3J5QXJncz10aGlzLmV4dGVuZHM/W3RoaXMuZXh0ZW5kcyx0aGlzLmlzXTpbdGhpcy5pc107dmFyIGN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmFjdG9yeShhcmd1bWVudHMpO307aWYodGhpcy5oYXNPd25Qcm9wZXJ0eSgnZXh0ZW5kcycpKXtjdG9yLmV4dGVuZHM9dGhpcy5leHRlbmRzO30KLU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCdjb25zdHJ1Y3Rvcicse3ZhbHVlOmN0b3Isd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pO2N0b3IucHJvdG90eXBlPXRoaXM7fSxfZmFjdG9yeTpmdW5jdGlvbihhcmdzKXt2YXIgZWx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQuYXBwbHkoZG9jdW1lbnQsdGhpcy5fZmFjdG9yeUFyZ3MpO2lmKHRoaXMuZmFjdG9yeUltcGwpe3RoaXMuZmFjdG9yeUltcGwuYXBwbHkoZWx0LGFyZ3MpO30KLXJldHVybiBlbHQ7fX0pO1BvbHltZXIubm9iPU9iamVjdC5jcmVhdGUobnVsbCk7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtnZXRQcm9wZXJ0eUluZm86ZnVuY3Rpb24ocHJvcGVydHkpe3ZhciBpbmZvPXRoaXMuX2dldFByb3BlcnR5SW5mbyhwcm9wZXJ0eSx0aGlzLnByb3BlcnRpZXMpO2lmKCFpbmZvKXtmb3IodmFyIGk9MDtpPHRoaXMuYmVoYXZpb3JzLmxlbmd0aDtpKyspe2luZm89dGhpcy5fZ2V0UHJvcGVydHlJbmZvKHByb3BlcnR5LHRoaXMuYmVoYXZpb3JzW2ldLnByb3BlcnRpZXMpO2lmKGluZm8pe3JldHVybiBpbmZvO319fQotcmV0dXJuIGluZm98fFBvbHltZXIubm9iO30sX2dldFByb3BlcnR5SW5mbzpmdW5jdGlvbihwcm9wZXJ0eSxwcm9wZXJ0aWVzKXt2YXIgcD1wcm9wZXJ0aWVzJiZwcm9wZXJ0aWVzW3Byb3BlcnR5XTtpZih0eXBlb2YgcD09PSdmdW5jdGlvbicpe3A9cHJvcGVydGllc1twcm9wZXJ0eV09e3R5cGU6cH07fQotaWYocCl7cC5kZWZpbmVkPXRydWU7fQotcmV0dXJuIHA7fSxfcHJlcFByb3BlcnR5SW5mbzpmdW5jdGlvbigpe3RoaXMuX3Byb3BlcnR5SW5mbz17fTtmb3IodmFyIGk9MDtpPHRoaXMuYmVoYXZpb3JzLmxlbmd0aDtpKyspe3RoaXMuX2FkZFByb3BlcnR5SW5mbyh0aGlzLl9wcm9wZXJ0eUluZm8sdGhpcy5iZWhhdmlvcnNbaV0ucHJvcGVydGllcyk7fQotdGhpcy5fYWRkUHJvcGVydHlJbmZvKHRoaXMuX3Byb3BlcnR5SW5mbyx0aGlzLnByb3BlcnRpZXMpO3RoaXMuX2FkZFByb3BlcnR5SW5mbyh0aGlzLl9wcm9wZXJ0eUluZm8sdGhpcy5fcHJvcGVydHlFZmZlY3RzKTt9LF9hZGRQcm9wZXJ0eUluZm86ZnVuY3Rpb24odGFyZ2V0LHNvdXJjZSl7aWYoc291cmNlKXt2YXIgdCxzO2Zvcih2YXIgaSBpbiBzb3VyY2Upe3Q9dGFyZ2V0W2ldO3M9c291cmNlW2ldO2lmKGlbMF09PT0nXycmJiFzLnJlYWRPbmx5KXtjb250aW51ZTt9Ci1pZighdGFyZ2V0W2ldKXt0YXJnZXRbaV09e3R5cGU6dHlwZW9mIHM9PT0nZnVuY3Rpb24nP3M6cy50eXBlLHJlYWRPbmx5OnMucmVhZE9ubHksYXR0cmlidXRlOlBvbHltZXIuQ2FzZU1hcC5jYW1lbFRvRGFzaENhc2UoaSl9O31lbHNle2lmKCF0LnR5cGUpe3QudHlwZT1zLnR5cGU7fQotaWYoIXQucmVhZE9ubHkpe3QucmVhZE9ubHk9cy5yZWFkT25seTt9fX19fX0pOyhmdW5jdGlvbigpe3ZhciBwcm9wZXJ0aWVzRGVzYz17Y29uZmlndXJhYmxlOnRydWUsd3JpdGFibGU6dHJ1ZSxlbnVtZXJhYmxlOnRydWUsdmFsdWU6e319O1BvbHltZXIuQmFzZURlc2NyaXB0b3JzLnByb3BlcnRpZXM9cHJvcGVydGllc0Rlc2M7T2JqZWN0LmRlZmluZVByb3BlcnR5KFBvbHltZXIuQmFzZSwncHJvcGVydGllcycscHJvcGVydGllc0Rlc2MpO30oKSk7UG9seW1lci5DYXNlTWFwPXtfY2FzZU1hcDp7fSxfcng6e2Rhc2hUb0NhbWVsOi8tW2Etel0vZyxjYW1lbFRvRGFzaDovKFtBLVpdKS9nfSxkYXNoVG9DYW1lbENhc2U6ZnVuY3Rpb24oZGFzaCl7cmV0dXJuIHRoaXMuX2Nhc2VNYXBbZGFzaF18fCh0aGlzLl9jYXNlTWFwW2Rhc2hdPWRhc2guaW5kZXhPZignLScpPDA/ZGFzaDpkYXNoLnJlcGxhY2UodGhpcy5fcnguZGFzaFRvQ2FtZWwsZnVuY3Rpb24obSl7cmV0dXJuIG1bMV0udG9VcHBlckNhc2UoKTt9KSk7fSxjYW1lbFRvRGFzaENhc2U6ZnVuY3Rpb24oY2FtZWwpe3JldHVybiB0aGlzLl9jYXNlTWFwW2NhbWVsXXx8KHRoaXMuX2Nhc2VNYXBbY2FtZWxdPWNhbWVsLnJlcGxhY2UodGhpcy5fcnguY2FtZWxUb0Rhc2gsJy0kMScpLnRvTG93ZXJDYXNlKCkpO319O1BvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSh7X2FkZEhvc3RBdHRyaWJ1dGVzOmZ1bmN0aW9uKGF0dHJpYnV0ZXMpe2lmKCF0aGlzLl9hZ2dyZWdhdGVkQXR0cmlidXRlcyl7dGhpcy5fYWdncmVnYXRlZEF0dHJpYnV0ZXM9e307fQotaWYoYXR0cmlidXRlcyl7dGhpcy5taXhpbih0aGlzLl9hZ2dyZWdhdGVkQXR0cmlidXRlcyxhdHRyaWJ1dGVzKTt9fSxfbWFyc2hhbEhvc3RBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7aWYodGhpcy5fYWdncmVnYXRlZEF0dHJpYnV0ZXMpe3RoaXMuX2FwcGx5QXR0cmlidXRlcyh0aGlzLHRoaXMuX2FnZ3JlZ2F0ZWRBdHRyaWJ1dGVzKTt9fSxfYXBwbHlBdHRyaWJ1dGVzOmZ1bmN0aW9uKG5vZGUsYXR0ciQpe2Zvcih2YXIgbiBpbiBhdHRyJCl7aWYoIXRoaXMuaGFzQXR0cmlidXRlKG4pJiZuIT09J2NsYXNzJyl7dmFyIHY9YXR0ciRbbl07dGhpcy5zZXJpYWxpemVWYWx1ZVRvQXR0cmlidXRlKHYsbix0aGlzKTt9fX0sX21hcnNoYWxBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7dGhpcy5fdGFrZUF0dHJpYnV0ZXNUb01vZGVsKHRoaXMpO30sX3Rha2VBdHRyaWJ1dGVzVG9Nb2RlbDpmdW5jdGlvbihtb2RlbCl7aWYodGhpcy5oYXNBdHRyaWJ1dGVzKCkpe2Zvcih2YXIgaSBpbiB0aGlzLl9wcm9wZXJ0eUluZm8pe3ZhciBpbmZvPXRoaXMuX3Byb3BlcnR5SW5mb1tpXTtpZih0aGlzLmhhc0F0dHJpYnV0ZShpbmZvLmF0dHJpYnV0ZSkpe3RoaXMuX3NldEF0dHJpYnV0ZVRvUHJvcGVydHkobW9kZWwsaW5mby5hdHRyaWJ1dGUsaSxpbmZvKTt9fX19LF9zZXRBdHRyaWJ1dGVUb1Byb3BlcnR5OmZ1bmN0aW9uKG1vZGVsLGF0dHJpYnV0ZSxwcm9wZXJ0eSxpbmZvKXtpZighdGhpcy5fc2VyaWFsaXppbmcpe3Byb3BlcnR5PXByb3BlcnR5fHxQb2x5bWVyLkNhc2VNYXAuZGFzaFRvQ2FtZWxDYXNlKGF0dHJpYnV0ZSk7aW5mbz1pbmZvfHx0aGlzLl9wcm9wZXJ0eUluZm8mJnRoaXMuX3Byb3BlcnR5SW5mb1twcm9wZXJ0eV07aWYoaW5mbyYmIWluZm8ucmVhZE9ubHkpe3ZhciB2PXRoaXMuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7bW9kZWxbcHJvcGVydHldPXRoaXMuZGVzZXJpYWxpemUodixpbmZvLnR5cGUpO319fSxfc2VyaWFsaXppbmc6ZmFsc2UscmVmbGVjdFByb3BlcnR5VG9BdHRyaWJ1dGU6ZnVuY3Rpb24ocHJvcGVydHksYXR0cmlidXRlLHZhbHVlKXt0aGlzLl9zZXJpYWxpemluZz10cnVlO3ZhbHVlPXZhbHVlPT09dW5kZWZpbmVkP3RoaXNbcHJvcGVydHldOnZhbHVlO3RoaXMuc2VyaWFsaXplVmFsdWVUb0F0dHJpYnV0ZSh2YWx1ZSxhdHRyaWJ1dGV8fFBvbHltZXIuQ2FzZU1hcC5jYW1lbFRvRGFzaENhc2UocHJvcGVydHkpKTt0aGlzLl9zZXJpYWxpemluZz1mYWxzZTt9LHNlcmlhbGl6ZVZhbHVlVG9BdHRyaWJ1dGU6ZnVuY3Rpb24odmFsdWUsYXR0cmlidXRlLG5vZGUpe3ZhciBzdHI9dGhpcy5zZXJpYWxpemUodmFsdWUpO25vZGU9bm9kZXx8dGhpcztpZihzdHI9PT11bmRlZmluZWQpe25vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7fWVsc2V7bm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLHN0cik7fX0sZGVzZXJpYWxpemU6ZnVuY3Rpb24odmFsdWUsdHlwZSl7c3dpdGNoKHR5cGUpe2Nhc2UgTnVtYmVyOnZhbHVlPU51bWJlcih2YWx1ZSk7YnJlYWs7Y2FzZSBCb29sZWFuOnZhbHVlPXZhbHVlIT1udWxsO2JyZWFrO2Nhc2UgT2JqZWN0OnRyeXt2YWx1ZT1KU09OLnBhcnNlKHZhbHVlKTt9Y2F0Y2goeCl7fQotYnJlYWs7Y2FzZSBBcnJheTp0cnl7dmFsdWU9SlNPTi5wYXJzZSh2YWx1ZSk7fWNhdGNoKHgpe3ZhbHVlPW51bGw7Y29uc29sZS53YXJuKCdQb2x5bWVyOjpBdHRyaWJ1dGVzOiBjb3VsZG5gdCBkZWNvZGUgQXJyYXkgYXMgSlNPTicpO30KLWJyZWFrO2Nhc2UgRGF0ZTp2YWx1ZT1uZXcgRGF0ZSh2YWx1ZSk7YnJlYWs7Y2FzZSBTdHJpbmc6ZGVmYXVsdDpicmVhazt9Ci1yZXR1cm4gdmFsdWU7fSxzZXJpYWxpemU6ZnVuY3Rpb24odmFsdWUpe3N3aXRjaCh0eXBlb2YgdmFsdWUpe2Nhc2UnYm9vbGVhbic6cmV0dXJuIHZhbHVlPycnOnVuZGVmaW5lZDtjYXNlJ29iamVjdCc6aWYodmFsdWUgaW5zdGFuY2VvZiBEYXRlKXtyZXR1cm4gdmFsdWUudG9TdHJpbmcoKTt9ZWxzZSBpZih2YWx1ZSl7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7fWNhdGNoKHgpe3JldHVybicnO319Ci1kZWZhdWx0OnJldHVybiB2YWx1ZSE9bnVsbD92YWx1ZTp1bmRlZmluZWQ7fX19KTtQb2x5bWVyLnZlcnNpb249IjEuMTAuMSI7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfcmVnaXN0ZXJGZWF0dXJlczpmdW5jdGlvbigpe3RoaXMuX3ByZXBJcygpO3RoaXMuX3ByZXBCZWhhdmlvcnMoKTt0aGlzLl9wcmVwQ29uc3RydWN0b3IoKTt0aGlzLl9wcmVwUHJvcGVydHlJbmZvKCk7fSxfcHJlcEJlaGF2aW9yOmZ1bmN0aW9uKGIpe3RoaXMuX2FkZEhvc3RBdHRyaWJ1dGVzKGIuaG9zdEF0dHJpYnV0ZXMpO30sX21hcnNoYWxCZWhhdmlvcjpmdW5jdGlvbihiKXt9LF9pbml0RmVhdHVyZXM6ZnVuY3Rpb24oKXt0aGlzLl9tYXJzaGFsSG9zdEF0dHJpYnV0ZXMoKTt0aGlzLl9tYXJzaGFsQmVoYXZpb3JzKCk7fX0pOyhmdW5jdGlvbigpe2Z1bmN0aW9uIHJlc29sdmVDc3MoY3NzVGV4dCxvd25lckRvY3VtZW50KXtyZXR1cm4gY3NzVGV4dC5yZXBsYWNlKENTU19VUkxfUlgsZnVuY3Rpb24obSxwcmUsdXJsLHBvc3Qpe3JldHVybiBwcmUrJ1wnJytyZXNvbHZlKHVybC5yZXBsYWNlKC9bIiddL2csJycpLG93bmVyRG9jdW1lbnQpKydcJycrcG9zdDt9KTt9Ci1mdW5jdGlvbiByZXNvbHZlQXR0cnMoZWxlbWVudCxvd25lckRvY3VtZW50KXtmb3IodmFyIG5hbWUgaW4gVVJMX0FUVFJTKXt2YXIgYSQ9VVJMX0FUVFJTW25hbWVdO2Zvcih2YXIgaT0wLGw9YSQubGVuZ3RoLGEsYXQsdjtpPGwmJihhPWEkW2ldKTtpKyspe2lmKG5hbWU9PT0nKid8fGVsZW1lbnQubG9jYWxOYW1lPT09bmFtZSl7YXQ9ZWxlbWVudC5hdHRyaWJ1dGVzW2FdO3Y9YXQmJmF0LnZhbHVlO2lmKHYmJnYuc2VhcmNoKEJJTkRJTkdfUlgpPDApe2F0LnZhbHVlPWE9PT0nc3R5bGUnP3Jlc29sdmVDc3Modixvd25lckRvY3VtZW50KTpyZXNvbHZlKHYsb3duZXJEb2N1bWVudCk7fX19fX0KLWZ1bmN0aW9uIHJlc29sdmUodXJsLG93bmVyRG9jdW1lbnQpe2lmKHVybCYmQUJTX1VSTC50ZXN0KHVybCkpe3JldHVybiB1cmw7fQotdmFyIHJlc29sdmVyPWdldFVybFJlc29sdmVyKG93bmVyRG9jdW1lbnQpO3Jlc29sdmVyLmhyZWY9dXJsO3JldHVybiByZXNvbHZlci5ocmVmfHx1cmw7fQotdmFyIHRlbXBEb2M7dmFyIHRlbXBEb2NCYXNlO2Z1bmN0aW9uIHJlc29sdmVVcmwodXJsLGJhc2VVcmkpe2lmKCF0ZW1wRG9jKXt0ZW1wRG9jPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgndGVtcCcpO3RlbXBEb2NCYXNlPXRlbXBEb2MuY3JlYXRlRWxlbWVudCgnYmFzZScpO3RlbXBEb2MuaGVhZC5hcHBlbmRDaGlsZCh0ZW1wRG9jQmFzZSk7fQotdGVtcERvY0Jhc2UuaHJlZj1iYXNlVXJpO3JldHVybiByZXNvbHZlKHVybCx0ZW1wRG9jKTt9Ci1mdW5jdGlvbiBnZXRVcmxSZXNvbHZlcihvd25lckRvY3VtZW50KXtyZXR1cm4gb3duZXJEb2N1bWVudC5ib2R5Ll9fdXJsUmVzb2x2ZXJ8fChvd25lckRvY3VtZW50LmJvZHkuX191cmxSZXNvbHZlcj1vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKSk7fQotZnVuY3Rpb24gcGF0aEZyb21VcmwodXJsKXtyZXR1cm4gdXJsLnN1YnN0cmluZygwLHVybC5sYXN0SW5kZXhPZignLycpKzEpO30KLXZhciBDU1NfVVJMX1JYPS8odXJsXCgpKFteKV0qKShcKSkvZzt2YXIgVVJMX0FUVFJTPXsnKic6WydocmVmJywnc3JjJywnc3R5bGUnLCd1cmwnXSxmb3JtOlsnYWN0aW9uJ119O3ZhciBBQlNfVVJMPS8oXlwvKXwoXiMpfCheW1x3LVxkXSo6KS87dmFyIEJJTkRJTkdfUlg9L1x7XHt8XFtcWy87UG9seW1lci5SZXNvbHZlVXJsPXtyZXNvbHZlQ3NzOnJlc29sdmVDc3MscmVzb2x2ZUF0dHJzOnJlc29sdmVBdHRycyxyZXNvbHZlVXJsOnJlc29sdmVVcmwscGF0aEZyb21Vcmw6cGF0aEZyb21Vcmx9O1BvbHltZXIucm9vdFBhdGg9UG9seW1lci5TZXR0aW5ncy5yb290UGF0aHx8cGF0aEZyb21VcmwoZG9jdW1lbnQuYmFzZVVSSXx8d2luZG93LmxvY2F0aW9uLmhyZWYpO30oKSk7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfcHJlcFRlbXBsYXRlOmZ1bmN0aW9uKCl7dmFyIG1vZHVsZTtpZih0aGlzLl90ZW1wbGF0ZT09PXVuZGVmaW5lZCl7bW9kdWxlPVBvbHltZXIuRG9tTW9kdWxlLmltcG9ydCh0aGlzLmlzKTt0aGlzLl90ZW1wbGF0ZT1tb2R1bGUmJm1vZHVsZS5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpO30KLWlmKG1vZHVsZSl7dmFyIGFzc2V0UGF0aD1tb2R1bGUuZ2V0QXR0cmlidXRlKCdhc3NldHBhdGgnKXx8Jyc7dmFyIGltcG9ydFVSTD1Qb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZVVybChhc3NldFBhdGgsbW9kdWxlLm93bmVyRG9jdW1lbnQuYmFzZVVSSSk7dGhpcy5faW1wb3J0UGF0aD1Qb2x5bWVyLlJlc29sdmVVcmwucGF0aEZyb21VcmwoaW1wb3J0VVJMKTt9ZWxzZXt0aGlzLl9pbXBvcnRQYXRoPScnO30KLWlmKHRoaXMuX3RlbXBsYXRlJiZ0aGlzLl90ZW1wbGF0ZS5oYXNBdHRyaWJ1dGUoJ2lzJykpe3RoaXMuX3dhcm4odGhpcy5fbG9nZignX3ByZXBUZW1wbGF0ZScsJ3RvcC1sZXZlbCBQb2x5bWVyIHRlbXBsYXRlICcrJ211c3Qgbm90IGJlIGEgdHlwZS1leHRlbnNpb24sIGZvdW5kJyx0aGlzLl90ZW1wbGF0ZSwnTW92ZSBpbnNpZGUgc2ltcGxlIDx0ZW1wbGF0ZT4uJykpO30KLWlmKHRoaXMuX3RlbXBsYXRlJiYhdGhpcy5fdGVtcGxhdGUuY29udGVudCYmd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUpe0hUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUodGhpcy5fdGVtcGxhdGUpO319LF9zdGFtcFRlbXBsYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fdGVtcGxhdGUpe3RoaXMucm9vdD10aGlzLmluc3RhbmNlVGVtcGxhdGUodGhpcy5fdGVtcGxhdGUpO319LGluc3RhbmNlVGVtcGxhdGU6ZnVuY3Rpb24odGVtcGxhdGUpe3ZhciBkb209ZG9jdW1lbnQuaW1wb3J0Tm9kZSh0ZW1wbGF0ZS5fY29udGVudHx8dGVtcGxhdGUuY29udGVudCx0cnVlKTtyZXR1cm4gZG9tO319KTsoZnVuY3Rpb24oKXt2YXIgYmFzZUF0dGFjaGVkQ2FsbGJhY2s9UG9seW1lci5CYXNlLmF0dGFjaGVkQ2FsbGJhY2s7dmFyIGJhc2VEZXRhY2hlZENhbGxiYWNrPVBvbHltZXIuQmFzZS5kZXRhY2hlZENhbGxiYWNrO1BvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSh7X2hvc3RTdGFjazpbXSxyZWFkeTpmdW5jdGlvbigpe30sX3JlZ2lzdGVySG9zdDpmdW5jdGlvbihob3N0KXt0aGlzLmRhdGFIb3N0PWhvc3Q9aG9zdHx8UG9seW1lci5CYXNlLl9ob3N0U3RhY2tbUG9seW1lci5CYXNlLl9ob3N0U3RhY2subGVuZ3RoLTFdO2lmKGhvc3QmJmhvc3QuX2NsaWVudHMpe2hvc3QuX2NsaWVudHMucHVzaCh0aGlzKTt9Ci10aGlzLl9jbGllbnRzPW51bGw7dGhpcy5fY2xpZW50c1JlYWRpZWQ9ZmFsc2U7fSxfYmVnaW5Ib3N0aW5nOmZ1bmN0aW9uKCl7UG9seW1lci5CYXNlLl9ob3N0U3RhY2sucHVzaCh0aGlzKTtpZighdGhpcy5fY2xpZW50cyl7dGhpcy5fY2xpZW50cz1bXTt9fSxfZW5kSG9zdGluZzpmdW5jdGlvbigpe1BvbHltZXIuQmFzZS5faG9zdFN0YWNrLnBvcCgpO30sX3RyeVJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fcmVhZGllZD1mYWxzZTtpZih0aGlzLl9jYW5SZWFkeSgpKXt0aGlzLl9yZWFkeSgpO319LF9jYW5SZWFkeTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmRhdGFIb3N0fHx0aGlzLmRhdGFIb3N0Ll9jbGllbnRzUmVhZGllZDt9LF9yZWFkeTpmdW5jdGlvbigpe3RoaXMuX2JlZm9yZUNsaWVudHNSZWFkeSgpO2lmKHRoaXMuX3RlbXBsYXRlKXt0aGlzLl9zZXR1cFJvb3QoKTt0aGlzLl9yZWFkeUNsaWVudHMoKTt9Ci10aGlzLl9jbGllbnRzUmVhZGllZD10cnVlO3RoaXMuX2NsaWVudHM9bnVsbDt0aGlzLl9hZnRlckNsaWVudHNSZWFkeSgpO3RoaXMuX3JlYWR5U2VsZigpO30sX3JlYWR5Q2xpZW50czpmdW5jdGlvbigpe3RoaXMuX2JlZ2luRGlzdHJpYnV0ZSgpO3ZhciBjJD10aGlzLl9jbGllbnRzO2lmKGMkKXtmb3IodmFyIGk9MCxsPWMkLmxlbmd0aCxjO2k8bCYmKGM9YyRbaV0pO2krKyl7Yy5fcmVhZHkoKTt9fQotdGhpcy5fZmluaXNoRGlzdHJpYnV0ZSgpO30sX3JlYWR5U2VsZjpmdW5jdGlvbigpe2Zvcih2YXIgaT0wLGI7aTx0aGlzLmJlaGF2aW9ycy5sZW5ndGg7aSsrKXtiPXRoaXMuYmVoYXZpb3JzW2ldO2lmKGIucmVhZHkpe2IucmVhZHkuY2FsbCh0aGlzKTt9fQotaWYodGhpcy5yZWFkeSl7dGhpcy5yZWFkeSgpO30KLXRoaXMuX3JlYWRpZWQ9dHJ1ZTtpZih0aGlzLl9hdHRhY2hlZFBlbmRpbmcpe3RoaXMuX2F0dGFjaGVkUGVuZGluZz1mYWxzZTt0aGlzLmF0dGFjaGVkQ2FsbGJhY2soKTt9fSxfYmVmb3JlQ2xpZW50c1JlYWR5OmZ1bmN0aW9uKCl7fSxfYWZ0ZXJDbGllbnRzUmVhZHk6ZnVuY3Rpb24oKXt9LF9iZWZvcmVBdHRhY2hlZDpmdW5jdGlvbigpe30sYXR0YWNoZWRDYWxsYmFjazpmdW5jdGlvbigpe2lmKHRoaXMuX3JlYWRpZWQpe3RoaXMuX2JlZm9yZUF0dGFjaGVkKCk7YmFzZUF0dGFjaGVkQ2FsbGJhY2suY2FsbCh0aGlzKTt9ZWxzZXt0aGlzLl9hdHRhY2hlZFBlbmRpbmc9dHJ1ZTt9fSxkZXRhY2hlZENhbGxiYWNrOmZ1bmN0aW9uKCl7aWYodGhpcy5fcmVhZGllZCl7YmFzZURldGFjaGVkQ2FsbGJhY2suY2FsbCh0aGlzKTt9ZWxzZXt0aGlzLl9hdHRhY2hlZFBlbmRpbmc9ZmFsc2U7fX19KTt9KCkpO1BvbHltZXIuQXJyYXlTcGxpY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuZXdTcGxpY2UoaW5kZXgscmVtb3ZlZCxhZGRlZENvdW50KXtyZXR1cm57aW5kZXg6aW5kZXgscmVtb3ZlZDpyZW1vdmVkLGFkZGVkQ291bnQ6YWRkZWRDb3VudH07fQotdmFyIEVESVRfTEVBVkU9MDt2YXIgRURJVF9VUERBVEU9MTt2YXIgRURJVF9BREQ9Mjt2YXIgRURJVF9ERUxFVEU9MztmdW5jdGlvbiBBcnJheVNwbGljZSgpe30KLUFycmF5U3BsaWNlLnByb3RvdHlwZT17Y2FsY0VkaXREaXN0YW5jZXM6ZnVuY3Rpb24oY3VycmVudCxjdXJyZW50U3RhcnQsY3VycmVudEVuZCxvbGQsb2xkU3RhcnQsb2xkRW5kKXt2YXIgcm93Q291bnQ9b2xkRW5kLW9sZFN0YXJ0KzE7dmFyIGNvbHVtbkNvdW50PWN1cnJlbnRFbmQtY3VycmVudFN0YXJ0KzE7dmFyIGRpc3RhbmNlcz1uZXcgQXJyYXkocm93Q291bnQpO2Zvcih2YXIgaT0wO2k8cm93Q291bnQ7aSsrKXtkaXN0YW5jZXNbaV09bmV3IEFycmF5KGNvbHVtbkNvdW50KTtkaXN0YW5jZXNbaV1bMF09aTt9Ci1mb3IodmFyIGo9MDtqPGNvbHVtbkNvdW50O2orKykKLWRpc3RhbmNlc1swXVtqXT1qO2ZvcihpPTE7aTxyb3dDb3VudDtpKyspe2ZvcihqPTE7ajxjb2x1bW5Db3VudDtqKyspe2lmKHRoaXMuZXF1YWxzKGN1cnJlbnRbY3VycmVudFN0YXJ0K2otMV0sb2xkW29sZFN0YXJ0K2ktMV0pKQotZGlzdGFuY2VzW2ldW2pdPWRpc3RhbmNlc1tpLTFdW2otMV07ZWxzZXt2YXIgbm9ydGg9ZGlzdGFuY2VzW2ktMV1bal0rMTt2YXIgd2VzdD1kaXN0YW5jZXNbaV1bai0xXSsxO2Rpc3RhbmNlc1tpXVtqXT1ub3J0aDx3ZXN0P25vcnRoOndlc3Q7fX19Ci1yZXR1cm4gZGlzdGFuY2VzO30sc3BsaWNlT3BlcmF0aW9uc0Zyb21FZGl0RGlzdGFuY2VzOmZ1bmN0aW9uKGRpc3RhbmNlcyl7dmFyIGk9ZGlzdGFuY2VzLmxlbmd0aC0xO3ZhciBqPWRpc3RhbmNlc1swXS5sZW5ndGgtMTt2YXIgY3VycmVudD1kaXN0YW5jZXNbaV1bal07dmFyIGVkaXRzPVtdO3doaWxlKGk+MHx8aj4wKXtpZihpPT0wKXtlZGl0cy5wdXNoKEVESVRfQUREKTtqLS07Y29udGludWU7fQotaWYoaj09MCl7ZWRpdHMucHVzaChFRElUX0RFTEVURSk7aS0tO2NvbnRpbnVlO30KLXZhciBub3J0aFdlc3Q9ZGlzdGFuY2VzW2ktMV1bai0xXTt2YXIgd2VzdD1kaXN0YW5jZXNbaS0xXVtqXTt2YXIgbm9ydGg9ZGlzdGFuY2VzW2ldW2otMV07dmFyIG1pbjtpZih3ZXN0PG5vcnRoKQotbWluPXdlc3Q8bm9ydGhXZXN0P3dlc3Q6bm9ydGhXZXN0O2Vsc2UKLW1pbj1ub3J0aDxub3J0aFdlc3Q/bm9ydGg6bm9ydGhXZXN0O2lmKG1pbj09bm9ydGhXZXN0KXtpZihub3J0aFdlc3Q9PWN1cnJlbnQpe2VkaXRzLnB1c2goRURJVF9MRUFWRSk7fWVsc2V7ZWRpdHMucHVzaChFRElUX1VQREFURSk7Y3VycmVudD1ub3J0aFdlc3Q7fQotaS0tO2otLTt9ZWxzZSBpZihtaW49PXdlc3Qpe2VkaXRzLnB1c2goRURJVF9ERUxFVEUpO2ktLTtjdXJyZW50PXdlc3Q7fWVsc2V7ZWRpdHMucHVzaChFRElUX0FERCk7ai0tO2N1cnJlbnQ9bm9ydGg7fX0KLWVkaXRzLnJldmVyc2UoKTtyZXR1cm4gZWRpdHM7fSxjYWxjU3BsaWNlczpmdW5jdGlvbihjdXJyZW50LGN1cnJlbnRTdGFydCxjdXJyZW50RW5kLG9sZCxvbGRTdGFydCxvbGRFbmQpe3ZhciBwcmVmaXhDb3VudD0wO3ZhciBzdWZmaXhDb3VudD0wO3ZhciBtaW5MZW5ndGg9TWF0aC5taW4oY3VycmVudEVuZC1jdXJyZW50U3RhcnQsb2xkRW5kLW9sZFN0YXJ0KTtpZihjdXJyZW50U3RhcnQ9PTAmJm9sZFN0YXJ0PT0wKQotcHJlZml4Q291bnQ9dGhpcy5zaGFyZWRQcmVmaXgoY3VycmVudCxvbGQsbWluTGVuZ3RoKTtpZihjdXJyZW50RW5kPT1jdXJyZW50Lmxlbmd0aCYmb2xkRW5kPT1vbGQubGVuZ3RoKQotc3VmZml4Q291bnQ9dGhpcy5zaGFyZWRTdWZmaXgoY3VycmVudCxvbGQsbWluTGVuZ3RoLXByZWZpeENvdW50KTtjdXJyZW50U3RhcnQrPXByZWZpeENvdW50O29sZFN0YXJ0Kz1wcmVmaXhDb3VudDtjdXJyZW50RW5kLT1zdWZmaXhDb3VudDtvbGRFbmQtPXN1ZmZpeENvdW50O2lmKGN1cnJlbnRFbmQtY3VycmVudFN0YXJ0PT0wJiZvbGRFbmQtb2xkU3RhcnQ9PTApCi1yZXR1cm5bXTtpZihjdXJyZW50U3RhcnQ9PWN1cnJlbnRFbmQpe3ZhciBzcGxpY2U9bmV3U3BsaWNlKGN1cnJlbnRTdGFydCxbXSwwKTt3aGlsZShvbGRTdGFydDxvbGRFbmQpCi1zcGxpY2UucmVtb3ZlZC5wdXNoKG9sZFtvbGRTdGFydCsrXSk7cmV0dXJuW3NwbGljZV07fWVsc2UgaWYob2xkU3RhcnQ9PW9sZEVuZCkKLXJldHVybltuZXdTcGxpY2UoY3VycmVudFN0YXJ0LFtdLGN1cnJlbnRFbmQtY3VycmVudFN0YXJ0KV07dmFyIG9wcz10aGlzLnNwbGljZU9wZXJhdGlvbnNGcm9tRWRpdERpc3RhbmNlcyh0aGlzLmNhbGNFZGl0RGlzdGFuY2VzKGN1cnJlbnQsY3VycmVudFN0YXJ0LGN1cnJlbnRFbmQsb2xkLG9sZFN0YXJ0LG9sZEVuZCkpO3NwbGljZT11bmRlZmluZWQ7dmFyIHNwbGljZXM9W107dmFyIGluZGV4PWN1cnJlbnRTdGFydDt2YXIgb2xkSW5kZXg9b2xkU3RhcnQ7Zm9yKHZhciBpPTA7aTxvcHMubGVuZ3RoO2krKyl7c3dpdGNoKG9wc1tpXSl7Y2FzZSBFRElUX0xFQVZFOmlmKHNwbGljZSl7c3BsaWNlcy5wdXNoKHNwbGljZSk7c3BsaWNlPXVuZGVmaW5lZDt9Ci1pbmRleCsrO29sZEluZGV4Kys7YnJlYWs7Y2FzZSBFRElUX1VQREFURTppZighc3BsaWNlKQotc3BsaWNlPW5ld1NwbGljZShpbmRleCxbXSwwKTtzcGxpY2UuYWRkZWRDb3VudCsrO2luZGV4Kys7c3BsaWNlLnJlbW92ZWQucHVzaChvbGRbb2xkSW5kZXhdKTtvbGRJbmRleCsrO2JyZWFrO2Nhc2UgRURJVF9BREQ6aWYoIXNwbGljZSkKLXNwbGljZT1uZXdTcGxpY2UoaW5kZXgsW10sMCk7c3BsaWNlLmFkZGVkQ291bnQrKztpbmRleCsrO2JyZWFrO2Nhc2UgRURJVF9ERUxFVEU6aWYoIXNwbGljZSkKLXNwbGljZT1uZXdTcGxpY2UoaW5kZXgsW10sMCk7c3BsaWNlLnJlbW92ZWQucHVzaChvbGRbb2xkSW5kZXhdKTtvbGRJbmRleCsrO2JyZWFrO319Ci1pZihzcGxpY2Upe3NwbGljZXMucHVzaChzcGxpY2UpO30KLXJldHVybiBzcGxpY2VzO30sc2hhcmVkUHJlZml4OmZ1bmN0aW9uKGN1cnJlbnQsb2xkLHNlYXJjaExlbmd0aCl7Zm9yKHZhciBpPTA7aTxzZWFyY2hMZW5ndGg7aSsrKQotaWYoIXRoaXMuZXF1YWxzKGN1cnJlbnRbaV0sb2xkW2ldKSkKLXJldHVybiBpO3JldHVybiBzZWFyY2hMZW5ndGg7fSxzaGFyZWRTdWZmaXg6ZnVuY3Rpb24oY3VycmVudCxvbGQsc2VhcmNoTGVuZ3RoKXt2YXIgaW5kZXgxPWN1cnJlbnQubGVuZ3RoO3ZhciBpbmRleDI9b2xkLmxlbmd0aDt2YXIgY291bnQ9MDt3aGlsZShjb3VudDxzZWFyY2hMZW5ndGgmJnRoaXMuZXF1YWxzKGN1cnJlbnRbLS1pbmRleDFdLG9sZFstLWluZGV4Ml0pKQotY291bnQrKztyZXR1cm4gY291bnQ7fSxjYWxjdWxhdGVTcGxpY2VzOmZ1bmN0aW9uKGN1cnJlbnQscHJldmlvdXMpe3JldHVybiB0aGlzLmNhbGNTcGxpY2VzKGN1cnJlbnQsMCxjdXJyZW50Lmxlbmd0aCxwcmV2aW91cywwLHByZXZpb3VzLmxlbmd0aCk7fSxlcXVhbHM6ZnVuY3Rpb24oY3VycmVudFZhbHVlLHByZXZpb3VzVmFsdWUpe3JldHVybiBjdXJyZW50VmFsdWU9PT1wcmV2aW91c1ZhbHVlO319O3JldHVybiBuZXcgQXJyYXlTcGxpY2UoKTt9KCk7UG9seW1lci5kb21Jbm5lckhUTUw9ZnVuY3Rpb24oKXt2YXIgZXNjYXBlQXR0clJlZ0V4cD0vWyZcdTAwQTAiXS9nO3ZhciBlc2NhcGVEYXRhUmVnRXhwPS9bJlx1MDBBMDw+XS9nO2Z1bmN0aW9uIGVzY2FwZVJlcGxhY2UoYyl7c3dpdGNoKGMpe2Nhc2UnJic6cmV0dXJuJyZhbXA7JztjYXNlJzwnOnJldHVybicmbHQ7JztjYXNlJz4nOnJldHVybicmZ3Q7JztjYXNlJyInOnJldHVybicmcXVvdDsnO2Nhc2UnXHhBMCc6cmV0dXJuJyZuYnNwOyc7fX0KLWZ1bmN0aW9uIGVzY2FwZUF0dHIocyl7cmV0dXJuIHMucmVwbGFjZShlc2NhcGVBdHRyUmVnRXhwLGVzY2FwZVJlcGxhY2UpO30KLWZ1bmN0aW9uIGVzY2FwZURhdGEocyl7cmV0dXJuIHMucmVwbGFjZShlc2NhcGVEYXRhUmVnRXhwLGVzY2FwZVJlcGxhY2UpO30KLWZ1bmN0aW9uIG1ha2VTZXQoYXJyKXt2YXIgc2V0PXt9O2Zvcih2YXIgaT0wO2k8YXJyLmxlbmd0aDtpKyspe3NldFthcnJbaV1dPXRydWU7fQotcmV0dXJuIHNldDt9Ci12YXIgdm9pZEVsZW1lbnRzPW1ha2VTZXQoWydhcmVhJywnYmFzZScsJ2JyJywnY29sJywnY29tbWFuZCcsJ2VtYmVkJywnaHInLCdpbWcnLCdpbnB1dCcsJ2tleWdlbicsJ2xpbmsnLCdtZXRhJywncGFyYW0nLCdzb3VyY2UnLCd0cmFjaycsJ3diciddKTt2YXIgcGxhaW50ZXh0UGFyZW50cz1tYWtlU2V0KFsnc3R5bGUnLCdzY3JpcHQnLCd4bXAnLCdpZnJhbWUnLCdub2VtYmVkJywnbm9mcmFtZXMnLCdwbGFpbnRleHQnLCdub3NjcmlwdCddKTtmdW5jdGlvbiBnZXRPdXRlckhUTUwobm9kZSxwYXJlbnROb2RlLGNvbXBvc2VkKXtzd2l0Y2gobm9kZS5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTp2YXIgdGFnTmFtZT1ub2RlLmxvY2FsTmFtZTt2YXIgcz0nPCcrdGFnTmFtZTt2YXIgYXR0cnM9bm9kZS5hdHRyaWJ1dGVzO2Zvcih2YXIgaT0wLGF0dHI7YXR0cj1hdHRyc1tpXTtpKyspe3MrPScgJythdHRyLm5hbWUrJz0iJytlc2NhcGVBdHRyKGF0dHIudmFsdWUpKyciJzt9Ci1zKz0nPic7aWYodm9pZEVsZW1lbnRzW3RhZ05hbWVdKXtyZXR1cm4gczt9Ci1yZXR1cm4gcytnZXRJbm5lckhUTUwobm9kZSxjb21wb3NlZCkrJzwvJyt0YWdOYW1lKyc+JztjYXNlIE5vZGUuVEVYVF9OT0RFOnZhciBkYXRhPW5vZGUuZGF0YTtpZihwYXJlbnROb2RlJiZwbGFpbnRleHRQYXJlbnRzW3BhcmVudE5vZGUubG9jYWxOYW1lXSl7cmV0dXJuIGRhdGE7fQotcmV0dXJuIGVzY2FwZURhdGEoZGF0YSk7Y2FzZSBOb2RlLkNPTU1FTlRfTk9ERTpyZXR1cm4nPCEtLScrbm9kZS5kYXRhKyctLT4nO2RlZmF1bHQ6Y29uc29sZS5lcnJvcihub2RlKTt0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO319Ci1mdW5jdGlvbiBnZXRJbm5lckhUTUwobm9kZSxjb21wb3NlZCl7aWYobm9kZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpCi1ub2RlPW5vZGUuY29udGVudDt2YXIgcz0nJzt2YXIgYyQ9UG9seW1lci5kb20obm9kZSkuY2hpbGROb2Rlcztmb3IodmFyIGk9MCxsPWMkLmxlbmd0aCxjaGlsZDtpPGwmJihjaGlsZD1jJFtpXSk7aSsrKXtzKz1nZXRPdXRlckhUTUwoY2hpbGQsbm9kZSxjb21wb3NlZCk7fQotcmV0dXJuIHM7fQotcmV0dXJue2dldElubmVySFRNTDpnZXRJbm5lckhUTUx9O30oKTsoZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIG5hdGl2ZUluc2VydEJlZm9yZT1FbGVtZW50LnByb3RvdHlwZS5pbnNlcnRCZWZvcmU7dmFyIG5hdGl2ZUFwcGVuZENoaWxkPUVsZW1lbnQucHJvdG90eXBlLmFwcGVuZENoaWxkO3ZhciBuYXRpdmVSZW1vdmVDaGlsZD1FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZDtQb2x5bWVyLlRyZWVBcGk9e2FycmF5Q29weUNoaWxkTm9kZXM6ZnVuY3Rpb24ocGFyZW50KXt2YXIgY29weT1bXSxpPTA7Zm9yKHZhciBuPXBhcmVudC5maXJzdENoaWxkO247bj1uLm5leHRTaWJsaW5nKXtjb3B5W2krK109bjt9Ci1yZXR1cm4gY29weTt9LGFycmF5Q29weUNoaWxkcmVuOmZ1bmN0aW9uKHBhcmVudCl7dmFyIGNvcHk9W10saT0wO2Zvcih2YXIgbj1wYXJlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7bjtuPW4ubmV4dEVsZW1lbnRTaWJsaW5nKXtjb3B5W2krK109bjt9Ci1yZXR1cm4gY29weTt9LGFycmF5Q29weTpmdW5jdGlvbihhJCl7dmFyIGw9YSQubGVuZ3RoO3ZhciBjb3B5PW5ldyBBcnJheShsKTtmb3IodmFyIGk9MDtpPGw7aSsrKXtjb3B5W2ldPWEkW2ldO30KLXJldHVybiBjb3B5O319O1BvbHltZXIuVHJlZUFwaS5Mb2dpY2FsPXtoYXNQYXJlbnROb2RlOmZ1bmN0aW9uKG5vZGUpe3JldHVybiBCb29sZWFuKG5vZGUuX19kb20mJm5vZGUuX19kb20ucGFyZW50Tm9kZSk7fSxoYXNDaGlsZE5vZGVzOmZ1bmN0aW9uKG5vZGUpe3JldHVybiBCb29sZWFuKG5vZGUuX19kb20mJm5vZGUuX19kb20uY2hpbGROb2RlcyE9PXVuZGVmaW5lZCk7fSxnZXRDaGlsZE5vZGVzOmZ1bmN0aW9uKG5vZGUpe3JldHVybiB0aGlzLmhhc0NoaWxkTm9kZXMobm9kZSk/dGhpcy5fZ2V0Q2hpbGROb2Rlcyhub2RlKTpub2RlLmNoaWxkTm9kZXM7fSxfZ2V0Q2hpbGROb2RlczpmdW5jdGlvbihub2RlKXtpZighbm9kZS5fX2RvbS5jaGlsZE5vZGVzKXtub2RlLl9fZG9tLmNoaWxkTm9kZXM9W107Zm9yKHZhciBuPW5vZGUuX19kb20uZmlyc3RDaGlsZDtuO249bi5fX2RvbS5uZXh0U2libGluZyl7bm9kZS5fX2RvbS5jaGlsZE5vZGVzLnB1c2gobik7fX0KLXJldHVybiBub2RlLl9fZG9tLmNoaWxkTm9kZXM7fSxnZXRQYXJlbnROb2RlOmZ1bmN0aW9uKG5vZGUpe3JldHVybiBub2RlLl9fZG9tJiZub2RlLl9fZG9tLnBhcmVudE5vZGUhPT11bmRlZmluZWQ/bm9kZS5fX2RvbS5wYXJlbnROb2RlOm5vZGUucGFyZW50Tm9kZTt9LGdldEZpcnN0Q2hpbGQ6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIG5vZGUuX19kb20mJm5vZGUuX19kb20uZmlyc3RDaGlsZCE9PXVuZGVmaW5lZD9ub2RlLl9fZG9tLmZpcnN0Q2hpbGQ6bm9kZS5maXJzdENoaWxkO30sZ2V0TGFzdENoaWxkOmZ1bmN0aW9uKG5vZGUpe3JldHVybiBub2RlLl9fZG9tJiZub2RlLl9fZG9tLmxhc3RDaGlsZCE9PXVuZGVmaW5lZD9ub2RlLl9fZG9tLmxhc3RDaGlsZDpub2RlLmxhc3RDaGlsZDt9LGdldE5leHRTaWJsaW5nOmZ1bmN0aW9uKG5vZGUpe3JldHVybiBub2RlLl9fZG9tJiZub2RlLl9fZG9tLm5leHRTaWJsaW5nIT09dW5kZWZpbmVkP25vZGUuX19kb20ubmV4dFNpYmxpbmc6bm9kZS5uZXh0U2libGluZzt9LGdldFByZXZpb3VzU2libGluZzpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5fX2RvbSYmbm9kZS5fX2RvbS5wcmV2aW91c1NpYmxpbmchPT11bmRlZmluZWQ/bm9kZS5fX2RvbS5wcmV2aW91c1NpYmxpbmc6bm9kZS5wcmV2aW91c1NpYmxpbmc7fSxnZXRGaXJzdEVsZW1lbnRDaGlsZDpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5fX2RvbSYmbm9kZS5fX2RvbS5maXJzdENoaWxkIT09dW5kZWZpbmVkP3RoaXMuX2dldEZpcnN0RWxlbWVudENoaWxkKG5vZGUpOm5vZGUuZmlyc3RFbGVtZW50Q2hpbGQ7fSxfZ2V0Rmlyc3RFbGVtZW50Q2hpbGQ6ZnVuY3Rpb24obm9kZSl7dmFyIG49bm9kZS5fX2RvbS5maXJzdENoaWxkO3doaWxlKG4mJm4ubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSl7bj1uLl9fZG9tLm5leHRTaWJsaW5nO30KLXJldHVybiBuO30sZ2V0TGFzdEVsZW1lbnRDaGlsZDpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5fX2RvbSYmbm9kZS5fX2RvbS5sYXN0Q2hpbGQhPT11bmRlZmluZWQ/dGhpcy5fZ2V0TGFzdEVsZW1lbnRDaGlsZChub2RlKTpub2RlLmxhc3RFbGVtZW50Q2hpbGQ7fSxfZ2V0TGFzdEVsZW1lbnRDaGlsZDpmdW5jdGlvbihub2RlKXt2YXIgbj1ub2RlLl9fZG9tLmxhc3RDaGlsZDt3aGlsZShuJiZuLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpe249bi5fX2RvbS5wcmV2aW91c1NpYmxpbmc7fQotcmV0dXJuIG47fSxnZXROZXh0RWxlbWVudFNpYmxpbmc6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIG5vZGUuX19kb20mJm5vZGUuX19kb20ubmV4dFNpYmxpbmchPT11bmRlZmluZWQ/dGhpcy5fZ2V0TmV4dEVsZW1lbnRTaWJsaW5nKG5vZGUpOm5vZGUubmV4dEVsZW1lbnRTaWJsaW5nO30sX2dldE5leHRFbGVtZW50U2libGluZzpmdW5jdGlvbihub2RlKXt2YXIgbj1ub2RlLl9fZG9tLm5leHRTaWJsaW5nO3doaWxlKG4mJm4ubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSl7bj1uLl9fZG9tLm5leHRTaWJsaW5nO30KLXJldHVybiBuO30sZ2V0UHJldmlvdXNFbGVtZW50U2libGluZzpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5fX2RvbSYmbm9kZS5fX2RvbS5wcmV2aW91c1NpYmxpbmchPT11bmRlZmluZWQ/dGhpcy5fZ2V0UHJldmlvdXNFbGVtZW50U2libGluZyhub2RlKTpub2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7fSxfZ2V0UHJldmlvdXNFbGVtZW50U2libGluZzpmdW5jdGlvbihub2RlKXt2YXIgbj1ub2RlLl9fZG9tLnByZXZpb3VzU2libGluZzt3aGlsZShuJiZuLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpe249bi5fX2RvbS5wcmV2aW91c1NpYmxpbmc7fQotcmV0dXJuIG47fSxzYXZlQ2hpbGROb2RlczpmdW5jdGlvbihub2RlKXtpZighdGhpcy5oYXNDaGlsZE5vZGVzKG5vZGUpKXtub2RlLl9fZG9tPW5vZGUuX19kb218fHt9O25vZGUuX19kb20uZmlyc3RDaGlsZD1ub2RlLmZpcnN0Q2hpbGQ7bm9kZS5fX2RvbS5sYXN0Q2hpbGQ9bm9kZS5sYXN0Q2hpbGQ7bm9kZS5fX2RvbS5jaGlsZE5vZGVzPVtdO2Zvcih2YXIgbj1ub2RlLmZpcnN0Q2hpbGQ7bjtuPW4ubmV4dFNpYmxpbmcpe24uX19kb209bi5fX2RvbXx8e307bi5fX2RvbS5wYXJlbnROb2RlPW5vZGU7bm9kZS5fX2RvbS5jaGlsZE5vZGVzLnB1c2gobik7bi5fX2RvbS5uZXh0U2libGluZz1uLm5leHRTaWJsaW5nO24uX19kb20ucHJldmlvdXNTaWJsaW5nPW4ucHJldmlvdXNTaWJsaW5nO319fSxyZWNvcmRJbnNlcnRCZWZvcmU6ZnVuY3Rpb24obm9kZSxjb250YWluZXIscmVmX25vZGUpe2NvbnRhaW5lci5fX2RvbS5jaGlsZE5vZGVzPW51bGw7aWYobm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7Zm9yKHZhciBuPW5vZGUuZmlyc3RDaGlsZDtuO249bi5uZXh0U2libGluZyl7dGhpcy5fbGlua05vZGUobixjb250YWluZXIscmVmX25vZGUpO319ZWxzZXt0aGlzLl9saW5rTm9kZShub2RlLGNvbnRhaW5lcixyZWZfbm9kZSk7fX0sX2xpbmtOb2RlOmZ1bmN0aW9uKG5vZGUsY29udGFpbmVyLHJlZl9ub2RlKXtub2RlLl9fZG9tPW5vZGUuX19kb218fHt9O2NvbnRhaW5lci5fX2RvbT1jb250YWluZXIuX19kb218fHt9O2lmKHJlZl9ub2RlKXtyZWZfbm9kZS5fX2RvbT1yZWZfbm9kZS5fX2RvbXx8e307fQotbm9kZS5fX2RvbS5wcmV2aW91c1NpYmxpbmc9cmVmX25vZGU/cmVmX25vZGUuX19kb20ucHJldmlvdXNTaWJsaW5nOmNvbnRhaW5lci5fX2RvbS5sYXN0Q2hpbGQ7aWYobm9kZS5fX2RvbS5wcmV2aW91c1NpYmxpbmcpe25vZGUuX19kb20ucHJldmlvdXNTaWJsaW5nLl9fZG9tLm5leHRTaWJsaW5nPW5vZGU7fQotbm9kZS5fX2RvbS5uZXh0U2libGluZz1yZWZfbm9kZXx8bnVsbDtpZihub2RlLl9fZG9tLm5leHRTaWJsaW5nKXtub2RlLl9fZG9tLm5leHRTaWJsaW5nLl9fZG9tLnByZXZpb3VzU2libGluZz1ub2RlO30KLW5vZGUuX19kb20ucGFyZW50Tm9kZT1jb250YWluZXI7aWYocmVmX25vZGUpe2lmKHJlZl9ub2RlPT09Y29udGFpbmVyLl9fZG9tLmZpcnN0Q2hpbGQpe2NvbnRhaW5lci5fX2RvbS5maXJzdENoaWxkPW5vZGU7fX1lbHNle2NvbnRhaW5lci5fX2RvbS5sYXN0Q2hpbGQ9bm9kZTtpZighY29udGFpbmVyLl9fZG9tLmZpcnN0Q2hpbGQpe2NvbnRhaW5lci5fX2RvbS5maXJzdENoaWxkPW5vZGU7fX0KLWNvbnRhaW5lci5fX2RvbS5jaGlsZE5vZGVzPW51bGw7fSxyZWNvcmRSZW1vdmVDaGlsZDpmdW5jdGlvbihub2RlLGNvbnRhaW5lcil7bm9kZS5fX2RvbT1ub2RlLl9fZG9tfHx7fTtjb250YWluZXIuX19kb209Y29udGFpbmVyLl9fZG9tfHx7fTtpZihub2RlPT09Y29udGFpbmVyLl9fZG9tLmZpcnN0Q2hpbGQpe2NvbnRhaW5lci5fX2RvbS5maXJzdENoaWxkPW5vZGUuX19kb20ubmV4dFNpYmxpbmc7fQotaWYobm9kZT09PWNvbnRhaW5lci5fX2RvbS5sYXN0Q2hpbGQpe2NvbnRhaW5lci5fX2RvbS5sYXN0Q2hpbGQ9bm9kZS5fX2RvbS5wcmV2aW91c1NpYmxpbmc7fQotdmFyIHA9bm9kZS5fX2RvbS5wcmV2aW91c1NpYmxpbmc7dmFyIG49bm9kZS5fX2RvbS5uZXh0U2libGluZztpZihwKXtwLl9fZG9tLm5leHRTaWJsaW5nPW47fQotaWYobil7bi5fX2RvbS5wcmV2aW91c1NpYmxpbmc9cDt9Ci1ub2RlLl9fZG9tLnBhcmVudE5vZGU9bm9kZS5fX2RvbS5wcmV2aW91c1NpYmxpbmc9bm9kZS5fX2RvbS5uZXh0U2libGluZz11bmRlZmluZWQ7Y29udGFpbmVyLl9fZG9tLmNoaWxkTm9kZXM9bnVsbDt9fTtQb2x5bWVyLlRyZWVBcGkuQ29tcG9zZWQ9e2dldENoaWxkTm9kZXM6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIFBvbHltZXIuVHJlZUFwaS5hcnJheUNvcHlDaGlsZE5vZGVzKG5vZGUpO30sZ2V0UGFyZW50Tm9kZTpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5wYXJlbnROb2RlO30sY2xlYXJDaGlsZE5vZGVzOmZ1bmN0aW9uKG5vZGUpe25vZGUudGV4dENvbnRlbnQ9Jyc7fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24ocGFyZW50Tm9kZSxuZXdDaGlsZCxyZWZDaGlsZCl7cmV0dXJuIG5hdGl2ZUluc2VydEJlZm9yZS5jYWxsKHBhcmVudE5vZGUsbmV3Q2hpbGQscmVmQ2hpbGR8fG51bGwpO30sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24ocGFyZW50Tm9kZSxuZXdDaGlsZCl7cmV0dXJuIG5hdGl2ZUFwcGVuZENoaWxkLmNhbGwocGFyZW50Tm9kZSxuZXdDaGlsZCk7fSxyZW1vdmVDaGlsZDpmdW5jdGlvbihwYXJlbnROb2RlLG5vZGUpe3JldHVybiBuYXRpdmVSZW1vdmVDaGlsZC5jYWxsKHBhcmVudE5vZGUsbm9kZSk7fX07fSgpKTtQb2x5bWVyLkRvbUFwaT1mdW5jdGlvbigpeyd1c2Ugc3RyaWN0Jzt2YXIgU2V0dGluZ3M9UG9seW1lci5TZXR0aW5nczt2YXIgVHJlZUFwaT1Qb2x5bWVyLlRyZWVBcGk7dmFyIERvbUFwaT1mdW5jdGlvbihub2RlKXt0aGlzLm5vZGU9bmVlZHNUb1dyYXA/RG9tQXBpLndyYXAobm9kZSk6bm9kZTt9O3ZhciBuZWVkc1RvV3JhcD1TZXR0aW5ncy5oYXNTaGFkb3cmJiFTZXR0aW5ncy5uYXRpdmVTaGFkb3c7RG9tQXBpLndyYXA9d2luZG93LndyYXA/d2luZG93LndyYXA6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIG5vZGU7fTtEb21BcGkucHJvdG90eXBlPXtmbHVzaDpmdW5jdGlvbigpe1BvbHltZXIuZG9tLmZsdXNoKCk7fSxkZWVwQ29udGFpbnM6ZnVuY3Rpb24obm9kZSl7aWYodGhpcy5ub2RlLmNvbnRhaW5zKG5vZGUpKXtyZXR1cm4gdHJ1ZTt9Ci12YXIgbj1ub2RlO3ZhciBkb2M9bm9kZS5vd25lckRvY3VtZW50O3doaWxlKG4mJm4hPT1kb2MmJm4hPT10aGlzLm5vZGUpe249UG9seW1lci5kb20obikucGFyZW50Tm9kZXx8bi5ob3N0O30KLXJldHVybiBuPT09dGhpcy5ub2RlO30scXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzOmZ1bmN0aW9uKHNlbGVjdG9yKXt2YXIgYyQ9dGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCk7dmFyIGxpc3Q9W107Zm9yKHZhciBpPTAsbD1jJC5sZW5ndGgsYztpPGwmJihjPWMkW2ldKTtpKyspe2lmKGMubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmRG9tQXBpLm1hdGNoZXNTZWxlY3Rvci5jYWxsKGMsc2VsZWN0b3IpKXtsaXN0LnB1c2goYyk7fX0KLXJldHVybiBsaXN0O30sZ2V0RWZmZWN0aXZlQ2hpbGROb2RlczpmdW5jdGlvbigpe3ZhciBsaXN0PVtdO3ZhciBjJD10aGlzLmNoaWxkTm9kZXM7Zm9yKHZhciBpPTAsbD1jJC5sZW5ndGgsYztpPGwmJihjPWMkW2ldKTtpKyspe2lmKGMubG9jYWxOYW1lPT09Q09OVEVOVCl7dmFyIGQkPWRvbShjKS5nZXREaXN0cmlidXRlZE5vZGVzKCk7Zm9yKHZhciBqPTA7ajxkJC5sZW5ndGg7aisrKXtsaXN0LnB1c2goZCRbal0pO319ZWxzZXtsaXN0LnB1c2goYyk7fX0KLXJldHVybiBsaXN0O30sb2JzZXJ2ZU5vZGVzOmZ1bmN0aW9uKGNhbGxiYWNrKXtpZihjYWxsYmFjayl7aWYoIXRoaXMub2JzZXJ2ZXIpe3RoaXMub2JzZXJ2ZXI9dGhpcy5ub2RlLmxvY2FsTmFtZT09PUNPTlRFTlQ/bmV3IERvbUFwaS5EaXN0cmlidXRlZE5vZGVzT2JzZXJ2ZXIodGhpcyk6bmV3IERvbUFwaS5FZmZlY3RpdmVOb2Rlc09ic2VydmVyKHRoaXMpO30KLXJldHVybiB0aGlzLm9ic2VydmVyLmFkZExpc3RlbmVyKGNhbGxiYWNrKTt9fSx1bm9ic2VydmVOb2RlczpmdW5jdGlvbihoYW5kbGUpe2lmKHRoaXMub2JzZXJ2ZXIpe3RoaXMub2JzZXJ2ZXIucmVtb3ZlTGlzdGVuZXIoaGFuZGxlKTt9fSxub3RpZnlPYnNlcnZlcjpmdW5jdGlvbigpe2lmKHRoaXMub2JzZXJ2ZXIpe3RoaXMub2JzZXJ2ZXIubm90aWZ5KCk7fX0sX3F1ZXJ5OmZ1bmN0aW9uKG1hdGNoZXIsbm9kZSxoYWx0ZXIpe25vZGU9bm9kZXx8dGhpcy5ub2RlO3ZhciBsaXN0PVtdO3RoaXMuX3F1ZXJ5RWxlbWVudHMoVHJlZUFwaS5Mb2dpY2FsLmdldENoaWxkTm9kZXMobm9kZSksbWF0Y2hlcixoYWx0ZXIsbGlzdCk7cmV0dXJuIGxpc3Q7fSxfcXVlcnlFbGVtZW50czpmdW5jdGlvbihlbGVtZW50cyxtYXRjaGVyLGhhbHRlcixsaXN0KXtmb3IodmFyIGk9MCxsPWVsZW1lbnRzLmxlbmd0aCxjO2k8bCYmKGM9ZWxlbWVudHNbaV0pO2krKyl7aWYoYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXtpZih0aGlzLl9xdWVyeUVsZW1lbnQoYyxtYXRjaGVyLGhhbHRlcixsaXN0KSl7cmV0dXJuIHRydWU7fX19fSxfcXVlcnlFbGVtZW50OmZ1bmN0aW9uKG5vZGUsbWF0Y2hlcixoYWx0ZXIsbGlzdCl7dmFyIHJlc3VsdD1tYXRjaGVyKG5vZGUpO2lmKHJlc3VsdCl7bGlzdC5wdXNoKG5vZGUpO30KLWlmKGhhbHRlciYmaGFsdGVyKHJlc3VsdCkpe3JldHVybiByZXN1bHQ7fQotdGhpcy5fcXVlcnlFbGVtZW50cyhUcmVlQXBpLkxvZ2ljYWwuZ2V0Q2hpbGROb2Rlcyhub2RlKSxtYXRjaGVyLGhhbHRlcixsaXN0KTt9fTt2YXIgQ09OVEVOVD1Eb21BcGkuQ09OVEVOVD0nY29udGVudCc7dmFyIGRvbT1Eb21BcGkuZmFjdG9yeT1mdW5jdGlvbihub2RlKXtub2RlPW5vZGV8fGRvY3VtZW50O2lmKCFub2RlLl9fZG9tQXBpKXtub2RlLl9fZG9tQXBpPW5ldyBEb21BcGkuY3Rvcihub2RlKTt9Ci1yZXR1cm4gbm9kZS5fX2RvbUFwaTt9O0RvbUFwaS5oYXNBcGk9ZnVuY3Rpb24obm9kZSl7cmV0dXJuIEJvb2xlYW4obm9kZS5fX2RvbUFwaSk7fTtEb21BcGkuY3Rvcj1Eb21BcGk7UG9seW1lci5kb209ZnVuY3Rpb24ob2JqLHBhdGNoKXtpZihvYmogaW5zdGFuY2VvZiBFdmVudCl7cmV0dXJuIFBvbHltZXIuRXZlbnRBcGkuZmFjdG9yeShvYmopO31lbHNle3JldHVybiBEb21BcGkuZmFjdG9yeShvYmoscGF0Y2gpO319O3ZhciBwPUVsZW1lbnQucHJvdG90eXBlO0RvbUFwaS5tYXRjaGVzU2VsZWN0b3I9cC5tYXRjaGVzfHxwLm1hdGNoZXNTZWxlY3Rvcnx8cC5tb3pNYXRjaGVzU2VsZWN0b3J8fHAubXNNYXRjaGVzU2VsZWN0b3J8fHAub01hdGNoZXNTZWxlY3Rvcnx8cC53ZWJraXRNYXRjaGVzU2VsZWN0b3I7cmV0dXJuIERvbUFwaTt9KCk7KGZ1bmN0aW9uKCl7J3VzZSBzdHJpY3QnO3ZhciBTZXR0aW5ncz1Qb2x5bWVyLlNldHRpbmdzO3ZhciBEb21BcGk9UG9seW1lci5Eb21BcGk7dmFyIGRvbT1Eb21BcGkuZmFjdG9yeTt2YXIgVHJlZUFwaT1Qb2x5bWVyLlRyZWVBcGk7dmFyIGdldElubmVySFRNTD1Qb2x5bWVyLmRvbUlubmVySFRNTC5nZXRJbm5lckhUTUw7dmFyIENPTlRFTlQ9RG9tQXBpLkNPTlRFTlQ7aWYoU2V0dGluZ3MudXNlU2hhZG93KXtyZXR1cm47fQotdmFyIG5hdGl2ZUNsb25lTm9kZT1FbGVtZW50LnByb3RvdHlwZS5jbG9uZU5vZGU7dmFyIG5hdGl2ZUltcG9ydE5vZGU9RG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU7UG9seW1lci5CYXNlLm1peGluKERvbUFwaS5wcm90b3R5cGUse19sYXp5RGlzdHJpYnV0ZTpmdW5jdGlvbihob3N0KXtpZihob3N0LnNoYWR5Um9vdCYmaG9zdC5zaGFkeVJvb3QuX2Rpc3RyaWJ1dGlvbkNsZWFuKXtob3N0LnNoYWR5Um9vdC5fZGlzdHJpYnV0aW9uQ2xlYW49ZmFsc2U7UG9seW1lci5kb20uYWRkRGVib3VuY2VyKGhvc3QuZGVib3VuY2UoJ19kaXN0cmlidXRlJyxob3N0Ll9kaXN0cmlidXRlQ29udGVudCkpO319LGFwcGVuZENoaWxkOmZ1bmN0aW9uKG5vZGUpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShub2RlKTt9LGluc2VydEJlZm9yZTpmdW5jdGlvbihub2RlLHJlZl9ub2RlKXtpZihyZWZfbm9kZSYmVHJlZUFwaS5Mb2dpY2FsLmdldFBhcmVudE5vZGUocmVmX25vZGUpIT09dGhpcy5ub2RlKXt0aHJvdyBFcnJvcignVGhlIHJlZl9ub2RlIHRvIGJlIGluc2VydGVkIGJlZm9yZSBpcyBub3QgYSBjaGlsZCAnKydvZiB0aGlzIG5vZGUnKTt9Ci1pZihub2RlLm5vZGVUeXBlIT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXt2YXIgcGFyZW50PVRyZWVBcGkuTG9naWNhbC5nZXRQYXJlbnROb2RlKG5vZGUpO2lmKHBhcmVudCl7aWYoRG9tQXBpLmhhc0FwaShwYXJlbnQpKXtkb20ocGFyZW50KS5ub3RpZnlPYnNlcnZlcigpO30KLXRoaXMuX3JlbW92ZU5vZGUobm9kZSk7fWVsc2V7dGhpcy5fcmVtb3ZlT3duZXJTaGFkeVJvb3Qobm9kZSk7fX0KLWlmKCF0aGlzLl9hZGROb2RlKG5vZGUscmVmX25vZGUpKXtpZihyZWZfbm9kZSl7cmVmX25vZGU9cmVmX25vZGUubG9jYWxOYW1lPT09Q09OVEVOVD90aGlzLl9maXJzdENvbXBvc2VkTm9kZShyZWZfbm9kZSk6cmVmX25vZGU7fQotdmFyIGNvbnRhaW5lcj10aGlzLm5vZGUuX2lzU2hhZHlSb290P3RoaXMubm9kZS5ob3N0OnRoaXMubm9kZTtpZihyZWZfbm9kZSl7VHJlZUFwaS5Db21wb3NlZC5pbnNlcnRCZWZvcmUoY29udGFpbmVyLG5vZGUscmVmX25vZGUpO31lbHNle1RyZWVBcGkuQ29tcG9zZWQuYXBwZW5kQ2hpbGQoY29udGFpbmVyLG5vZGUpO319Ci10aGlzLm5vdGlmeU9ic2VydmVyKCk7cmV0dXJuIG5vZGU7fSxfYWRkTm9kZTpmdW5jdGlvbihub2RlLHJlZl9ub2RlKXt2YXIgcm9vdD10aGlzLmdldE93bmVyUm9vdCgpO2lmKHJvb3Qpe3ZhciBpcEFkZGVkPXRoaXMuX21heWJlQWRkSW5zZXJ0aW9uUG9pbnQobm9kZSx0aGlzLm5vZGUpO2lmKCFyb290Ll9pbnZhbGlkSW5zZXJ0aW9uUG9pbnRzKXtyb290Ll9pbnZhbGlkSW5zZXJ0aW9uUG9pbnRzPWlwQWRkZWQ7fQotdGhpcy5fYWRkTm9kZVRvSG9zdChyb290Lmhvc3Qsbm9kZSk7fQotaWYoVHJlZUFwaS5Mb2dpY2FsLmhhc0NoaWxkTm9kZXModGhpcy5ub2RlKSl7VHJlZUFwaS5Mb2dpY2FsLnJlY29yZEluc2VydEJlZm9yZShub2RlLHRoaXMubm9kZSxyZWZfbm9kZSk7fQotdmFyIGhhbmRsZWQ9dGhpcy5fbWF5YmVEaXN0cmlidXRlKG5vZGUpfHx0aGlzLm5vZGUuc2hhZHlSb290O2lmKGhhbmRsZWQpe2lmKG5vZGUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpe3doaWxlKG5vZGUuZmlyc3RDaGlsZCl7VHJlZUFwaS5Db21wb3NlZC5yZW1vdmVDaGlsZChub2RlLG5vZGUuZmlyc3RDaGlsZCk7fX1lbHNle3ZhciBwYXJlbnQ9VHJlZUFwaS5Db21wb3NlZC5nZXRQYXJlbnROb2RlKG5vZGUpO2lmKHBhcmVudCl7VHJlZUFwaS5Db21wb3NlZC5yZW1vdmVDaGlsZChwYXJlbnQsbm9kZSk7fX19Ci1yZXR1cm4gaGFuZGxlZDt9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKG5vZGUpe2lmKFRyZWVBcGkuTG9naWNhbC5nZXRQYXJlbnROb2RlKG5vZGUpIT09dGhpcy5ub2RlKXt0aHJvdyBFcnJvcignVGhlIG5vZGUgdG8gYmUgcmVtb3ZlZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIG5vZGU6ICcrbm9kZSk7fQotaWYoIXRoaXMuX3JlbW92ZU5vZGUobm9kZSkpe3ZhciBjb250YWluZXI9dGhpcy5ub2RlLl9pc1NoYWR5Um9vdD90aGlzLm5vZGUuaG9zdDp0aGlzLm5vZGU7dmFyIHBhcmVudD1UcmVlQXBpLkNvbXBvc2VkLmdldFBhcmVudE5vZGUobm9kZSk7aWYoY29udGFpbmVyPT09cGFyZW50KXtUcmVlQXBpLkNvbXBvc2VkLnJlbW92ZUNoaWxkKGNvbnRhaW5lcixub2RlKTt9fQotdGhpcy5ub3RpZnlPYnNlcnZlcigpO3JldHVybiBub2RlO30sX3JlbW92ZU5vZGU6ZnVuY3Rpb24obm9kZSl7dmFyIGxvZ2ljYWxQYXJlbnQ9VHJlZUFwaS5Mb2dpY2FsLmhhc1BhcmVudE5vZGUobm9kZSkmJlRyZWVBcGkuTG9naWNhbC5nZXRQYXJlbnROb2RlKG5vZGUpO3ZhciBkaXN0cmlidXRlZDt2YXIgcm9vdD10aGlzLl9vd25lclNoYWR5Um9vdEZvck5vZGUobm9kZSk7aWYobG9naWNhbFBhcmVudCl7ZGlzdHJpYnV0ZWQ9ZG9tKG5vZGUpLl9tYXliZURpc3RyaWJ1dGVQYXJlbnQoKTtUcmVlQXBpLkxvZ2ljYWwucmVjb3JkUmVtb3ZlQ2hpbGQobm9kZSxsb2dpY2FsUGFyZW50KTtpZihyb290JiZ0aGlzLl9yZW1vdmVEaXN0cmlidXRlZENoaWxkcmVuKHJvb3Qsbm9kZSkpe3Jvb3QuX2ludmFsaWRJbnNlcnRpb25Qb2ludHM9dHJ1ZTt0aGlzLl9sYXp5RGlzdHJpYnV0ZShyb290Lmhvc3QpO319Ci10aGlzLl9yZW1vdmVPd25lclNoYWR5Um9vdChub2RlKTtpZihyb290KXt0aGlzLl9yZW1vdmVOb2RlRnJvbUhvc3Qocm9vdC5ob3N0LG5vZGUpO30KLXJldHVybiBkaXN0cmlidXRlZDt9LHJlcGxhY2VDaGlsZDpmdW5jdGlvbihub2RlLHJlZl9ub2RlKXt0aGlzLmluc2VydEJlZm9yZShub2RlLHJlZl9ub2RlKTt0aGlzLnJlbW92ZUNoaWxkKHJlZl9ub2RlKTtyZXR1cm4gbm9kZTt9LF9oYXNDYWNoZWRPd25lclJvb3Q6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIEJvb2xlYW4obm9kZS5fb3duZXJTaGFkeVJvb3QhPT11bmRlZmluZWQpO30sZ2V0T3duZXJSb290OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX293bmVyU2hhZHlSb290Rm9yTm9kZSh0aGlzLm5vZGUpO30sX293bmVyU2hhZHlSb290Rm9yTm9kZTpmdW5jdGlvbihub2RlKXtpZighbm9kZSl7cmV0dXJuO30KLXZhciByb290PW5vZGUuX293bmVyU2hhZHlSb290O2lmKHJvb3Q9PT11bmRlZmluZWQpe2lmKG5vZGUuX2lzU2hhZHlSb290KXtyb290PW5vZGU7fWVsc2V7dmFyIHBhcmVudD1UcmVlQXBpLkxvZ2ljYWwuZ2V0UGFyZW50Tm9kZShub2RlKTtpZihwYXJlbnQpe3Jvb3Q9cGFyZW50Ll9pc1NoYWR5Um9vdD9wYXJlbnQ6dGhpcy5fb3duZXJTaGFkeVJvb3RGb3JOb2RlKHBhcmVudCk7fWVsc2V7cm9vdD1udWxsO319Ci1pZihyb290fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMobm9kZSkpe25vZGUuX293bmVyU2hhZHlSb290PXJvb3Q7fX0KLXJldHVybiByb290O30sX21heWJlRGlzdHJpYnV0ZTpmdW5jdGlvbihub2RlKXt2YXIgZnJhZ0NvbnRlbnQ9bm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmIW5vZGUuX19ub0NvbnRlbnQmJmRvbShub2RlKS5xdWVyeVNlbGVjdG9yKENPTlRFTlQpO3ZhciB3cmFwcGVkQ29udGVudD1mcmFnQ29udGVudCYmVHJlZUFwaS5Mb2dpY2FsLmdldFBhcmVudE5vZGUoZnJhZ0NvbnRlbnQpLm5vZGVUeXBlIT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFO3ZhciBoYXNDb250ZW50PWZyYWdDb250ZW50fHxub2RlLmxvY2FsTmFtZT09PUNPTlRFTlQ7aWYoaGFzQ29udGVudCl7dmFyIHJvb3Q9dGhpcy5nZXRPd25lclJvb3QoKTtpZihyb290KXt0aGlzLl9sYXp5RGlzdHJpYnV0ZShyb290Lmhvc3QpO319Ci12YXIgbmVlZHNEaXN0PXRoaXMuX25vZGVOZWVkc0Rpc3RyaWJ1dGlvbih0aGlzLm5vZGUpO2lmKG5lZWRzRGlzdCl7dGhpcy5fbGF6eURpc3RyaWJ1dGUodGhpcy5ub2RlKTt9Ci1yZXR1cm4gbmVlZHNEaXN0fHxoYXNDb250ZW50JiYhd3JhcHBlZENvbnRlbnQ7fSxfbWF5YmVBZGRJbnNlcnRpb25Qb2ludDpmdW5jdGlvbihub2RlLHBhcmVudCl7dmFyIGFkZGVkO2lmKG5vZGUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJiFub2RlLl9fbm9Db250ZW50KXt2YXIgYyQ9ZG9tKG5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoQ09OVEVOVCk7Zm9yKHZhciBpPTAsbixucCxuYTtpPGMkLmxlbmd0aCYmKG49YyRbaV0pO2krKyl7bnA9VHJlZUFwaS5Mb2dpY2FsLmdldFBhcmVudE5vZGUobik7aWYobnA9PT1ub2RlKXtucD1wYXJlbnQ7fQotbmE9dGhpcy5fbWF5YmVBZGRJbnNlcnRpb25Qb2ludChuLG5wKTthZGRlZD1hZGRlZHx8bmE7fX1lbHNlIGlmKG5vZGUubG9jYWxOYW1lPT09Q09OVEVOVCl7VHJlZUFwaS5Mb2dpY2FsLnNhdmVDaGlsZE5vZGVzKHBhcmVudCk7VHJlZUFwaS5Mb2dpY2FsLnNhdmVDaGlsZE5vZGVzKG5vZGUpO2FkZGVkPXRydWU7fQotcmV0dXJuIGFkZGVkO30sX3VwZGF0ZUluc2VydGlvblBvaW50czpmdW5jdGlvbihob3N0KXt2YXIgaSQ9aG9zdC5zaGFkeVJvb3QuX2luc2VydGlvblBvaW50cz1kb20oaG9zdC5zaGFkeVJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoQ09OVEVOVCk7Zm9yKHZhciBpPTAsYztpPGkkLmxlbmd0aDtpKyspe2M9aSRbaV07VHJlZUFwaS5Mb2dpY2FsLnNhdmVDaGlsZE5vZGVzKGMpO1RyZWVBcGkuTG9naWNhbC5zYXZlQ2hpbGROb2RlcyhUcmVlQXBpLkxvZ2ljYWwuZ2V0UGFyZW50Tm9kZShjKSk7fX0sX25vZGVOZWVkc0Rpc3RyaWJ1dGlvbjpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZSYmbm9kZS5zaGFkeVJvb3QmJkRvbUFwaS5oYXNJbnNlcnRpb25Qb2ludChub2RlLnNoYWR5Um9vdCk7fSxfYWRkTm9kZVRvSG9zdDpmdW5jdGlvbihob3N0LG5vZGUpe2lmKGhvc3QuX2VsZW1lbnRBZGQpe2hvc3QuX2VsZW1lbnRBZGQobm9kZSk7fX0sX3JlbW92ZU5vZGVGcm9tSG9zdDpmdW5jdGlvbihob3N0LG5vZGUpe2lmKGhvc3QuX2VsZW1lbnRSZW1vdmUpe2hvc3QuX2VsZW1lbnRSZW1vdmUobm9kZSk7fX0sX3JlbW92ZURpc3RyaWJ1dGVkQ2hpbGRyZW46ZnVuY3Rpb24ocm9vdCxjb250YWluZXIpe3ZhciBob3N0TmVlZHNEaXN0O3ZhciBpcCQ9cm9vdC5faW5zZXJ0aW9uUG9pbnRzO2Zvcih2YXIgaT0wO2k8aXAkLmxlbmd0aDtpKyspe3ZhciBjb250ZW50PWlwJFtpXTtpZih0aGlzLl9jb250YWlucyhjb250YWluZXIsY29udGVudCkpe3ZhciBkYyQ9ZG9tKGNvbnRlbnQpLmdldERpc3RyaWJ1dGVkTm9kZXMoKTtmb3IodmFyIGo9MDtqPGRjJC5sZW5ndGg7aisrKXtob3N0TmVlZHNEaXN0PXRydWU7dmFyIG5vZGU9ZGMkW2pdO3ZhciBwYXJlbnQ9VHJlZUFwaS5Db21wb3NlZC5nZXRQYXJlbnROb2RlKG5vZGUpO2lmKHBhcmVudCl7VHJlZUFwaS5Db21wb3NlZC5yZW1vdmVDaGlsZChwYXJlbnQsbm9kZSk7fX19fQotcmV0dXJuIGhvc3ROZWVkc0Rpc3Q7fSxfY29udGFpbnM6ZnVuY3Rpb24oY29udGFpbmVyLG5vZGUpe3doaWxlKG5vZGUpe2lmKG5vZGU9PWNvbnRhaW5lcil7cmV0dXJuIHRydWU7fQotbm9kZT1UcmVlQXBpLkxvZ2ljYWwuZ2V0UGFyZW50Tm9kZShub2RlKTt9fSxfcmVtb3ZlT3duZXJTaGFkeVJvb3Q6ZnVuY3Rpb24obm9kZSl7aWYodGhpcy5faGFzQ2FjaGVkT3duZXJSb290KG5vZGUpKXt2YXIgYyQ9VHJlZUFwaS5Mb2dpY2FsLmdldENoaWxkTm9kZXMobm9kZSk7Zm9yKHZhciBpPTAsbD1jJC5sZW5ndGgsbjtpPGwmJihuPWMkW2ldKTtpKyspe3RoaXMuX3JlbW92ZU93bmVyU2hhZHlSb290KG4pO319Ci1ub2RlLl9vd25lclNoYWR5Um9vdD11bmRlZmluZWQ7fSxfZmlyc3RDb21wb3NlZE5vZGU6ZnVuY3Rpb24oY29udGVudCl7dmFyIG4kPWRvbShjb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCk7Zm9yKHZhciBpPTAsbD1uJC5sZW5ndGgsbixwJDtpPGwmJihuPW4kW2ldKTtpKyspe3AkPWRvbShuKS5nZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cygpO2lmKHAkW3AkLmxlbmd0aC0xXT09PWNvbnRlbnQpe3JldHVybiBuO319fSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHNlbGVjdG9yKXt2YXIgcmVzdWx0PXRoaXMuX3F1ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBEb21BcGkubWF0Y2hlc1NlbGVjdG9yLmNhbGwobixzZWxlY3Rvcik7fSx0aGlzLm5vZGUsZnVuY3Rpb24obil7cmV0dXJuIEJvb2xlYW4obik7fSlbMF07cmV0dXJuIHJlc3VsdHx8bnVsbDt9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oc2VsZWN0b3Ipe3JldHVybiB0aGlzLl9xdWVyeShmdW5jdGlvbihuKXtyZXR1cm4gRG9tQXBpLm1hdGNoZXNTZWxlY3Rvci5jYWxsKG4sc2VsZWN0b3IpO30sdGhpcy5ub2RlKTt9LGdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fZGVzdGluYXRpb25JbnNlcnRpb25Qb2ludHN8fFtdO30sZ2V0RGlzdHJpYnV0ZWROb2RlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX2Rpc3RyaWJ1dGVkTm9kZXN8fFtdO30sX2NsZWFyOmZ1bmN0aW9uKCl7d2hpbGUodGhpcy5jaGlsZE5vZGVzLmxlbmd0aCl7dGhpcy5yZW1vdmVDaGlsZCh0aGlzLmNoaWxkTm9kZXNbMF0pO319LHNldEF0dHJpYnV0ZTpmdW5jdGlvbihuYW1lLHZhbHVlKXt0aGlzLm5vZGUuc2V0QXR0cmlidXRlKG5hbWUsdmFsdWUpO3RoaXMuX21heWJlRGlzdHJpYnV0ZVBhcmVudCgpO30scmVtb3ZlQXR0cmlidXRlOmZ1bmN0aW9uKG5hbWUpe3RoaXMubm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7dGhpcy5fbWF5YmVEaXN0cmlidXRlUGFyZW50KCk7fSxfbWF5YmVEaXN0cmlidXRlUGFyZW50OmZ1bmN0aW9uKCl7aWYodGhpcy5fbm9kZU5lZWRzRGlzdHJpYnV0aW9uKHRoaXMucGFyZW50Tm9kZSkpe3RoaXMuX2xhenlEaXN0cmlidXRlKHRoaXMucGFyZW50Tm9kZSk7cmV0dXJuIHRydWU7fX0sY2xvbmVOb2RlOmZ1bmN0aW9uKGRlZXApe3ZhciBuPW5hdGl2ZUNsb25lTm9kZS5jYWxsKHRoaXMubm9kZSxmYWxzZSk7aWYoZGVlcCl7dmFyIGMkPXRoaXMuY2hpbGROb2Rlczt2YXIgZD1kb20obik7Zm9yKHZhciBpPTAsbmM7aTxjJC5sZW5ndGg7aSsrKXtuYz1kb20oYyRbaV0pLmNsb25lTm9kZSh0cnVlKTtkLmFwcGVuZENoaWxkKG5jKTt9fQotcmV0dXJuIG47fSxpbXBvcnROb2RlOmZ1bmN0aW9uKGV4dGVybmFsTm9kZSxkZWVwKXt2YXIgZG9jPXRoaXMubm9kZSBpbnN0YW5jZW9mIERvY3VtZW50P3RoaXMubm9kZTp0aGlzLm5vZGUub3duZXJEb2N1bWVudDt2YXIgbj1uYXRpdmVJbXBvcnROb2RlLmNhbGwoZG9jLGV4dGVybmFsTm9kZSxmYWxzZSk7aWYoZGVlcCl7dmFyIGMkPVRyZWVBcGkuTG9naWNhbC5nZXRDaGlsZE5vZGVzKGV4dGVybmFsTm9kZSk7dmFyIGQ9ZG9tKG4pO2Zvcih2YXIgaT0wLG5jO2k8YyQubGVuZ3RoO2krKyl7bmM9ZG9tKGRvYykuaW1wb3J0Tm9kZShjJFtpXSx0cnVlKTtkLmFwcGVuZENoaWxkKG5jKTt9fQotcmV0dXJuIG47fSxfZ2V0Q29tcG9zZWRJbm5lckhUTUw6ZnVuY3Rpb24oKXtyZXR1cm4gZ2V0SW5uZXJIVE1MKHRoaXMubm9kZSx0cnVlKTt9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG9tQXBpLnByb3RvdHlwZSx7YWN0aXZlRWxlbWVudDp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGFjdGl2ZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCFhY3RpdmUpe3JldHVybiBudWxsO30KLXZhciBpc1NoYWR5Um9vdD0hIXRoaXMubm9kZS5faXNTaGFkeVJvb3Q7aWYodGhpcy5ub2RlIT09ZG9jdW1lbnQpe2lmKCFpc1NoYWR5Um9vdCl7cmV0dXJuIG51bGw7fQotaWYodGhpcy5ub2RlLmhvc3Q9PT1hY3RpdmV8fCF0aGlzLm5vZGUuaG9zdC5jb250YWlucyhhY3RpdmUpKXtyZXR1cm4gbnVsbDt9fQotdmFyIGFjdGl2ZVJvb3Q9ZG9tKGFjdGl2ZSkuZ2V0T3duZXJSb290KCk7d2hpbGUoYWN0aXZlUm9vdCYmYWN0aXZlUm9vdCE9PXRoaXMubm9kZSl7YWN0aXZlPWFjdGl2ZVJvb3QuaG9zdDthY3RpdmVSb290PWRvbShhY3RpdmUpLmdldE93bmVyUm9vdCgpO30KLWlmKHRoaXMubm9kZT09PWRvY3VtZW50KXtyZXR1cm4gYWN0aXZlUm9vdD9udWxsOmFjdGl2ZTt9ZWxzZXtyZXR1cm4gYWN0aXZlUm9vdD09PXRoaXMubm9kZT9hY3RpdmU6bnVsbDt9fSxjb25maWd1cmFibGU6dHJ1ZX0sY2hpbGROb2Rlczp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGMkPVRyZWVBcGkuTG9naWNhbC5nZXRDaGlsZE5vZGVzKHRoaXMubm9kZSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyQpP2MkOlRyZWVBcGkuYXJyYXlDb3B5Q2hpbGROb2Rlcyh0aGlzLm5vZGUpO30sY29uZmlndXJhYmxlOnRydWV9LGNoaWxkcmVuOntnZXQ6ZnVuY3Rpb24oKXtpZihUcmVlQXBpLkxvZ2ljYWwuaGFzQ2hpbGROb2Rlcyh0aGlzLm5vZGUpKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKHRoaXMuY2hpbGROb2RlcyxmdW5jdGlvbihuKXtyZXR1cm4gbi5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFO30pO31lbHNle3JldHVybiBUcmVlQXBpLmFycmF5Q29weUNoaWxkcmVuKHRoaXMubm9kZSk7fX0sY29uZmlndXJhYmxlOnRydWV9LHBhcmVudE5vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBUcmVlQXBpLkxvZ2ljYWwuZ2V0UGFyZW50Tm9kZSh0aGlzLm5vZGUpO30sY29uZmlndXJhYmxlOnRydWV9LGZpcnN0Q2hpbGQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBUcmVlQXBpLkxvZ2ljYWwuZ2V0Rmlyc3RDaGlsZCh0aGlzLm5vZGUpO30sY29uZmlndXJhYmxlOnRydWV9LGxhc3RDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFRyZWVBcGkuTG9naWNhbC5nZXRMYXN0Q2hpbGQodGhpcy5ub2RlKTt9LGNvbmZpZ3VyYWJsZTp0cnVlfSxuZXh0U2libGluZzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFRyZWVBcGkuTG9naWNhbC5nZXROZXh0U2libGluZyh0aGlzLm5vZGUpO30sY29uZmlndXJhYmxlOnRydWV9LHByZXZpb3VzU2libGluZzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFRyZWVBcGkuTG9naWNhbC5nZXRQcmV2aW91c1NpYmxpbmcodGhpcy5ub2RlKTt9LGNvbmZpZ3VyYWJsZTp0cnVlfSxmaXJzdEVsZW1lbnRDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFRyZWVBcGkuTG9naWNhbC5nZXRGaXJzdEVsZW1lbnRDaGlsZCh0aGlzLm5vZGUpO30sY29uZmlndXJhYmxlOnRydWV9LGxhc3RFbGVtZW50Q2hpbGQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBUcmVlQXBpLkxvZ2ljYWwuZ2V0TGFzdEVsZW1lbnRDaGlsZCh0aGlzLm5vZGUpO30sY29uZmlndXJhYmxlOnRydWV9LG5leHRFbGVtZW50U2libGluZzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFRyZWVBcGkuTG9naWNhbC5nZXROZXh0RWxlbWVudFNpYmxpbmcodGhpcy5ub2RlKTt9LGNvbmZpZ3VyYWJsZTp0cnVlfSxwcmV2aW91c0VsZW1lbnRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVHJlZUFwaS5Mb2dpY2FsLmdldFByZXZpb3VzRWxlbWVudFNpYmxpbmcodGhpcy5ub2RlKTt9LGNvbmZpZ3VyYWJsZTp0cnVlfSx0ZXh0Q29udGVudDp7Z2V0OmZ1bmN0aW9uKCl7dmFyIG50PXRoaXMubm9kZS5ub2RlVHlwZTtpZihudD09PU5vZGUuVEVYVF9OT0RFfHxudD09PU5vZGUuQ09NTUVOVF9OT0RFKXtyZXR1cm4gdGhpcy5ub2RlLnRleHRDb250ZW50O31lbHNle3ZhciB0Yz1bXTtmb3IodmFyIGk9MCxjbj10aGlzLmNoaWxkTm9kZXMsYztjPWNuW2ldO2krKyl7aWYoYy5ub2RlVHlwZSE9PU5vZGUuQ09NTUVOVF9OT0RFKXt0Yy5wdXNoKGMudGV4dENvbnRlbnQpO319Ci1yZXR1cm4gdGMuam9pbignJyk7fX0sc2V0OmZ1bmN0aW9uKHRleHQpe3ZhciBudD10aGlzLm5vZGUubm9kZVR5cGU7aWYobnQ9PT1Ob2RlLlRFWFRfTk9ERXx8bnQ9PT1Ob2RlLkNPTU1FTlRfTk9ERSl7dGhpcy5ub2RlLnRleHRDb250ZW50PXRleHQ7fWVsc2V7dGhpcy5fY2xlYXIoKTtpZih0ZXh0KXt0aGlzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTt9fX0sY29uZmlndXJhYmxlOnRydWV9LGlubmVySFRNTDp7Z2V0OmZ1bmN0aW9uKCl7dmFyIG50PXRoaXMubm9kZS5ub2RlVHlwZTtpZihudD09PU5vZGUuVEVYVF9OT0RFfHxudD09PU5vZGUuQ09NTUVOVF9OT0RFKXtyZXR1cm4gbnVsbDt9ZWxzZXtyZXR1cm4gZ2V0SW5uZXJIVE1MKHRoaXMubm9kZSk7fX0sc2V0OmZ1bmN0aW9uKHRleHQpe3ZhciBudD10aGlzLm5vZGUubm9kZVR5cGU7aWYobnQhPT1Ob2RlLlRFWFRfTk9ERXx8bnQhPT1Ob2RlLkNPTU1FTlRfTk9ERSl7dGhpcy5fY2xlYXIoKTt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtkLmlubmVySFRNTD10ZXh0O3ZhciBjJD1UcmVlQXBpLmFycmF5Q29weUNoaWxkTm9kZXMoZCk7Zm9yKHZhciBpPTA7aTxjJC5sZW5ndGg7aSsrKXt0aGlzLmFwcGVuZENoaWxkKGMkW2ldKTt9fX0sY29uZmlndXJhYmxlOnRydWV9fSk7RG9tQXBpLmhhc0luc2VydGlvblBvaW50PWZ1bmN0aW9uKHJvb3Qpe3JldHVybiBCb29sZWFuKHJvb3QmJnJvb3QuX2luc2VydGlvblBvaW50cy5sZW5ndGgpO307fSgpKTsoZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIFNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7dmFyIFRyZWVBcGk9UG9seW1lci5UcmVlQXBpO3ZhciBEb21BcGk9UG9seW1lci5Eb21BcGk7aWYoIVNldHRpbmdzLnVzZVNoYWRvdyl7cmV0dXJuO30KLVBvbHltZXIuQmFzZS5taXhpbihEb21BcGkucHJvdG90eXBlLHtxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHNlbGVjdG9yKXtyZXR1cm4gVHJlZUFwaS5hcnJheUNvcHkodGhpcy5ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTt9LGdldE93bmVyUm9vdDpmdW5jdGlvbigpe3ZhciBuPXRoaXMubm9kZTt3aGlsZShuKXtpZihuLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFJiZuLmhvc3Qpe3JldHVybiBuO30KLW49bi5wYXJlbnROb2RlO319LGltcG9ydE5vZGU6ZnVuY3Rpb24oZXh0ZXJuYWxOb2RlLGRlZXApe3ZhciBkb2M9dGhpcy5ub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQ/dGhpcy5ub2RlOnRoaXMubm9kZS5vd25lckRvY3VtZW50O3JldHVybiBkb2MuaW1wb3J0Tm9kZShleHRlcm5hbE5vZGUsZGVlcCk7fSxnZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50czpmdW5jdGlvbigpe3ZhciBuJD10aGlzLm5vZGUuZ2V0RGVzdGluYXRpb25JbnNlcnRpb25Qb2ludHMmJnRoaXMubm9kZS5nZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cygpO3JldHVybiBuJD9UcmVlQXBpLmFycmF5Q29weShuJCk6W107fSxnZXREaXN0cmlidXRlZE5vZGVzOmZ1bmN0aW9uKCl7dmFyIG4kPXRoaXMubm9kZS5nZXREaXN0cmlidXRlZE5vZGVzJiZ0aGlzLm5vZGUuZ2V0RGlzdHJpYnV0ZWROb2RlcygpO3JldHVybiBuJD9UcmVlQXBpLmFycmF5Q29weShuJCk6W107fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvbUFwaS5wcm90b3R5cGUse2FjdGl2ZUVsZW1lbnQ6e2dldDpmdW5jdGlvbigpe3ZhciBub2RlPURvbUFwaS53cmFwKHRoaXMubm9kZSk7dmFyIGFjdGl2ZUVsZW1lbnQ9bm9kZS5hY3RpdmVFbGVtZW50O3JldHVybiBub2RlLmNvbnRhaW5zKGFjdGl2ZUVsZW1lbnQpP2FjdGl2ZUVsZW1lbnQ6bnVsbDt9LGNvbmZpZ3VyYWJsZTp0cnVlfSxjaGlsZE5vZGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVHJlZUFwaS5hcnJheUNvcHlDaGlsZE5vZGVzKHRoaXMubm9kZSk7fSxjb25maWd1cmFibGU6dHJ1ZX0sY2hpbGRyZW46e2dldDpmdW5jdGlvbigpe3JldHVybiBUcmVlQXBpLmFycmF5Q29weUNoaWxkcmVuKHRoaXMubm9kZSk7fSxjb25maWd1cmFibGU6dHJ1ZX0sdGV4dENvbnRlbnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUudGV4dENvbnRlbnQ7fSxzZXQ6ZnVuY3Rpb24odmFsdWUpe3JldHVybiB0aGlzLm5vZGUudGV4dENvbnRlbnQ9dmFsdWU7fSxjb25maWd1cmFibGU6dHJ1ZX0saW5uZXJIVE1MOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLmlubmVySFRNTDt9LHNldDpmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHRoaXMubm9kZS5pbm5lckhUTUw9dmFsdWU7fSxjb25maWd1cmFibGU6dHJ1ZX19KTt2YXIgZm9yd2FyZE1ldGhvZHM9ZnVuY3Rpb24obSQpe2Zvcih2YXIgaT0wO2k8bSQubGVuZ3RoO2krKyl7Zm9yd2FyZE1ldGhvZChtJFtpXSk7fX07dmFyIGZvcndhcmRNZXRob2Q9ZnVuY3Rpb24obWV0aG9kKXtEb21BcGkucHJvdG90eXBlW21ldGhvZF09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW21ldGhvZF0uYXBwbHkodGhpcy5ub2RlLGFyZ3VtZW50cyk7fTt9O2ZvcndhcmRNZXRob2RzKFsnY2xvbmVOb2RlJywnYXBwZW5kQ2hpbGQnLCdpbnNlcnRCZWZvcmUnLCdyZW1vdmVDaGlsZCcsJ3JlcGxhY2VDaGlsZCcsJ3NldEF0dHJpYnV0ZScsJ3JlbW92ZUF0dHJpYnV0ZScsJ3F1ZXJ5U2VsZWN0b3InXSk7dmFyIGZvcndhcmRQcm9wZXJ0aWVzPWZ1bmN0aW9uKGYkKXtmb3IodmFyIGk9MDtpPGYkLmxlbmd0aDtpKyspe2ZvcndhcmRQcm9wZXJ0eShmJFtpXSk7fX07dmFyIGZvcndhcmRQcm9wZXJ0eT1mdW5jdGlvbihuYW1lKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoRG9tQXBpLnByb3RvdHlwZSxuYW1lLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW25hbWVdO30sY29uZmlndXJhYmxlOnRydWV9KTt9O2ZvcndhcmRQcm9wZXJ0aWVzKFsncGFyZW50Tm9kZScsJ2ZpcnN0Q2hpbGQnLCdsYXN0Q2hpbGQnLCduZXh0U2libGluZycsJ3ByZXZpb3VzU2libGluZycsJ2ZpcnN0RWxlbWVudENoaWxkJywnbGFzdEVsZW1lbnRDaGlsZCcsJ25leHRFbGVtZW50U2libGluZycsJ3ByZXZpb3VzRWxlbWVudFNpYmxpbmcnXSk7fSgpKTtQb2x5bWVyLkJhc2UubWl4aW4oUG9seW1lci5kb20se19mbHVzaEd1YXJkOjAsX0ZMVVNIX01BWDoxMDAsX25lZWRzVGFrZVJlY29yZHM6IVBvbHltZXIuU2V0dGluZ3MudXNlTmF0aXZlQ3VzdG9tRWxlbWVudHMsX2RlYm91bmNlcnM6W10sX3N0YXRpY0ZsdXNoTGlzdDpbXSxfZmluaXNoRGVib3VuY2VyOm51bGwsZmx1c2g6ZnVuY3Rpb24oKXt0aGlzLl9mbHVzaEd1YXJkPTA7dGhpcy5fcHJlcGFyZUZsdXNoKCk7d2hpbGUodGhpcy5fZGVib3VuY2Vycy5sZW5ndGgmJnRoaXMuX2ZsdXNoR3VhcmQ8dGhpcy5fRkxVU0hfTUFYKXt3aGlsZSh0aGlzLl9kZWJvdW5jZXJzLmxlbmd0aCl7dGhpcy5fZGVib3VuY2Vycy5zaGlmdCgpLmNvbXBsZXRlKCk7fQotaWYodGhpcy5fZmluaXNoRGVib3VuY2VyKXt0aGlzLl9maW5pc2hEZWJvdW5jZXIuY29tcGxldGUoKTt9Ci10aGlzLl9wcmVwYXJlRmx1c2goKTt0aGlzLl9mbHVzaEd1YXJkKys7fQotaWYodGhpcy5fZmx1c2hHdWFyZD49dGhpcy5fRkxVU0hfTUFYKXtjb25zb2xlLndhcm4oJ1BvbHltZXIuZG9tLmZsdXNoIGFib3J0ZWQuIEZsdXNoIG1heSBub3QgYmUgY29tcGxldGUuJyk7fX0sX3ByZXBhcmVGbHVzaDpmdW5jdGlvbigpe2lmKHRoaXMuX25lZWRzVGFrZVJlY29yZHMpe0N1c3RvbUVsZW1lbnRzLnRha2VSZWNvcmRzKCk7fQotZm9yKHZhciBpPTA7aTx0aGlzLl9zdGF0aWNGbHVzaExpc3QubGVuZ3RoO2krKyl7dGhpcy5fc3RhdGljRmx1c2hMaXN0W2ldKCk7fX0sYWRkU3RhdGljRmx1c2g6ZnVuY3Rpb24oZm4pe3RoaXMuX3N0YXRpY0ZsdXNoTGlzdC5wdXNoKGZuKTt9LHJlbW92ZVN0YXRpY0ZsdXNoOmZ1bmN0aW9uKGZuKXt2YXIgaT10aGlzLl9zdGF0aWNGbHVzaExpc3QuaW5kZXhPZihmbik7aWYoaT49MCl7dGhpcy5fc3RhdGljRmx1c2hMaXN0LnNwbGljZShpLDEpO319LGFkZERlYm91bmNlcjpmdW5jdGlvbihkZWJvdW5jZXIpe3RoaXMuX2RlYm91bmNlcnMucHVzaChkZWJvdW5jZXIpO3RoaXMuX2ZpbmlzaERlYm91bmNlcj1Qb2x5bWVyLkRlYm91bmNlKHRoaXMuX2ZpbmlzaERlYm91bmNlcix0aGlzLl9maW5pc2hGbHVzaCk7fSxfZmluaXNoRmx1c2g6ZnVuY3Rpb24oKXtQb2x5bWVyLmRvbS5fZGVib3VuY2Vycz1bXTt9fSk7UG9seW1lci5FdmVudEFwaT1mdW5jdGlvbigpeyd1c2Ugc3RyaWN0Jzt2YXIgRG9tQXBpPVBvbHltZXIuRG9tQXBpLmN0b3I7dmFyIFNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7RG9tQXBpLkV2ZW50PWZ1bmN0aW9uKGV2ZW50KXt0aGlzLmV2ZW50PWV2ZW50O307aWYoU2V0dGluZ3MudXNlU2hhZG93KXtEb21BcGkuRXZlbnQucHJvdG90eXBlPXtnZXQgcm9vdFRhcmdldCgpe3JldHVybiB0aGlzLmV2ZW50LnBhdGhbMF07fSxnZXQgbG9jYWxUYXJnZXQoKXtyZXR1cm4gdGhpcy5ldmVudC50YXJnZXQ7fSxnZXQgcGF0aCgpe3ZhciBwYXRoPXRoaXMuZXZlbnQucGF0aDtpZighQXJyYXkuaXNBcnJheShwYXRoKSl7cGF0aD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChwYXRoKTt9Ci1yZXR1cm4gcGF0aDt9fTt9ZWxzZXtEb21BcGkuRXZlbnQucHJvdG90eXBlPXtnZXQgcm9vdFRhcmdldCgpe3JldHVybiB0aGlzLmV2ZW50LnRhcmdldDt9LGdldCBsb2NhbFRhcmdldCgpe3ZhciBjdXJyZW50PXRoaXMuZXZlbnQuY3VycmVudFRhcmdldDt2YXIgY3VycmVudFJvb3Q9Y3VycmVudCYmUG9seW1lci5kb20oY3VycmVudCkuZ2V0T3duZXJSb290KCk7dmFyIHAkPXRoaXMucGF0aDtmb3IodmFyIGk9MDtpPHAkLmxlbmd0aDtpKyspe2lmKFBvbHltZXIuZG9tKHAkW2ldKS5nZXRPd25lclJvb3QoKT09PWN1cnJlbnRSb290KXtyZXR1cm4gcCRbaV07fX19LGdldCBwYXRoKCl7aWYoIXRoaXMuZXZlbnQuX3BhdGgpe3ZhciBwYXRoPVtdO3ZhciBjdXJyZW50PXRoaXMucm9vdFRhcmdldDt3aGlsZShjdXJyZW50KXtwYXRoLnB1c2goY3VycmVudCk7dmFyIGluc2VydGlvblBvaW50cz1Qb2x5bWVyLmRvbShjdXJyZW50KS5nZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cygpO2lmKGluc2VydGlvblBvaW50cy5sZW5ndGgpe2Zvcih2YXIgaT0wO2k8aW5zZXJ0aW9uUG9pbnRzLmxlbmd0aC0xO2krKyl7cGF0aC5wdXNoKGluc2VydGlvblBvaW50c1tpXSk7fQotY3VycmVudD1pbnNlcnRpb25Qb2ludHNbaW5zZXJ0aW9uUG9pbnRzLmxlbmd0aC0xXTt9ZWxzZXtjdXJyZW50PVBvbHltZXIuZG9tKGN1cnJlbnQpLnBhcmVudE5vZGV8fGN1cnJlbnQuaG9zdDt9fQotcGF0aC5wdXNoKHdpbmRvdyk7dGhpcy5ldmVudC5fcGF0aD1wYXRoO30KLXJldHVybiB0aGlzLmV2ZW50Ll9wYXRoO319O30KLXZhciBmYWN0b3J5PWZ1bmN0aW9uKGV2ZW50KXtpZighZXZlbnQuX19ldmVudEFwaSl7ZXZlbnQuX19ldmVudEFwaT1uZXcgRG9tQXBpLkV2ZW50KGV2ZW50KTt9Ci1yZXR1cm4gZXZlbnQuX19ldmVudEFwaTt9O3JldHVybntmYWN0b3J5OmZhY3Rvcnl9O30oKTsoZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIERvbUFwaT1Qb2x5bWVyLkRvbUFwaS5jdG9yO3ZhciB1c2VTaGFkb3c9UG9seW1lci5TZXR0aW5ncy51c2VTaGFkb3c7T2JqZWN0LmRlZmluZVByb3BlcnR5KERvbUFwaS5wcm90b3R5cGUsJ2NsYXNzTGlzdCcse2dldDpmdW5jdGlvbigpe2lmKCF0aGlzLl9jbGFzc0xpc3Qpe3RoaXMuX2NsYXNzTGlzdD1uZXcgRG9tQXBpLkNsYXNzTGlzdCh0aGlzKTt9Ci1yZXR1cm4gdGhpcy5fY2xhc3NMaXN0O30sY29uZmlndXJhYmxlOnRydWV9KTtEb21BcGkuQ2xhc3NMaXN0PWZ1bmN0aW9uKGhvc3Qpe3RoaXMuZG9tQXBpPWhvc3Q7dGhpcy5ub2RlPWhvc3Qubm9kZTt9O0RvbUFwaS5DbGFzc0xpc3QucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oKXt0aGlzLm5vZGUuY2xhc3NMaXN0LmFkZC5hcHBseSh0aGlzLm5vZGUuY2xhc3NMaXN0LGFyZ3VtZW50cyk7dGhpcy5fZGlzdHJpYnV0ZVBhcmVudCgpO30scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5ub2RlLmNsYXNzTGlzdC5yZW1vdmUuYXBwbHkodGhpcy5ub2RlLmNsYXNzTGlzdCxhcmd1bWVudHMpO3RoaXMuX2Rpc3RyaWJ1dGVQYXJlbnQoKTt9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMubm9kZS5jbGFzc0xpc3QudG9nZ2xlLmFwcGx5KHRoaXMubm9kZS5jbGFzc0xpc3QsYXJndW1lbnRzKTt0aGlzLl9kaXN0cmlidXRlUGFyZW50KCk7fSxfZGlzdHJpYnV0ZVBhcmVudDpmdW5jdGlvbigpe2lmKCF1c2VTaGFkb3cpe3RoaXMuZG9tQXBpLl9tYXliZURpc3RyaWJ1dGVQYXJlbnQoKTt9fSxjb250YWluczpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zLmFwcGx5KHRoaXMubm9kZS5jbGFzc0xpc3QsYXJndW1lbnRzKTt9fTt9KCkpOyhmdW5jdGlvbigpeyd1c2Ugc3RyaWN0Jzt2YXIgRG9tQXBpPVBvbHltZXIuRG9tQXBpLmN0b3I7dmFyIFNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7RG9tQXBpLkVmZmVjdGl2ZU5vZGVzT2JzZXJ2ZXI9ZnVuY3Rpb24oZG9tQXBpKXt0aGlzLmRvbUFwaT1kb21BcGk7dGhpcy5ub2RlPXRoaXMuZG9tQXBpLm5vZGU7dGhpcy5fbGlzdGVuZXJzPVtdO307RG9tQXBpLkVmZmVjdGl2ZU5vZGVzT2JzZXJ2ZXIucHJvdG90eXBlPXthZGRMaXN0ZW5lcjpmdW5jdGlvbihjYWxsYmFjayl7aWYoIXRoaXMuX2lzU2V0dXApe3RoaXMuX3NldHVwKCk7dGhpcy5faXNTZXR1cD10cnVlO30KLXZhciBsaXN0ZW5lcj17Zm46Y2FsbGJhY2ssX25vZGVzOltdfTt0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7dGhpcy5fc2NoZWR1bGVOb3RpZnkoKTtyZXR1cm4gbGlzdGVuZXI7fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihoYW5kbGUpe3ZhciBpPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGhhbmRsZSk7aWYoaT49MCl7dGhpcy5fbGlzdGVuZXJzLnNwbGljZShpLDEpO2hhbmRsZS5fbm9kZXM9W107fQotaWYoIXRoaXMuX2hhc0xpc3RlbmVycygpKXt0aGlzLl9jbGVhbnVwKCk7dGhpcy5faXNTZXR1cD1mYWxzZTt9fSxfc2V0dXA6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlQ29udGVudEVsZW1lbnRzKHRoaXMuZG9tQXBpLmNoaWxkTm9kZXMpO30sX2NsZWFudXA6ZnVuY3Rpb24oKXt0aGlzLl91bm9ic2VydmVDb250ZW50RWxlbWVudHModGhpcy5kb21BcGkuY2hpbGROb2Rlcyk7fSxfaGFzTGlzdGVuZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fbGlzdGVuZXJzLmxlbmd0aCk7fSxfc2NoZWR1bGVOb3RpZnk6ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWJvdW5jZXIpe3RoaXMuX2RlYm91bmNlci5zdG9wKCk7fQotdGhpcy5fZGVib3VuY2VyPVBvbHltZXIuRGVib3VuY2UodGhpcy5fZGVib3VuY2VyLHRoaXMuX25vdGlmeSk7dGhpcy5fZGVib3VuY2VyLmNvbnRleHQ9dGhpcztQb2x5bWVyLmRvbS5hZGREZWJvdW5jZXIodGhpcy5fZGVib3VuY2VyKTt9LG5vdGlmeTpmdW5jdGlvbigpe2lmKHRoaXMuX2hhc0xpc3RlbmVycygpKXt0aGlzLl9zY2hlZHVsZU5vdGlmeSgpO319LF9ub3RpZnk6ZnVuY3Rpb24oKXt0aGlzLl9iZWZvcmVDYWxsTGlzdGVuZXJzKCk7dGhpcy5fY2FsbExpc3RlbmVycygpO30sX2JlZm9yZUNhbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVDb250ZW50RWxlbWVudHMoKTt9LF91cGRhdGVDb250ZW50RWxlbWVudHM6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlQ29udGVudEVsZW1lbnRzKHRoaXMuZG9tQXBpLmNoaWxkTm9kZXMpO30sX29ic2VydmVDb250ZW50RWxlbWVudHM6ZnVuY3Rpb24oZWxlbWVudHMpe2Zvcih2YXIgaT0wLG47aTxlbGVtZW50cy5sZW5ndGgmJihuPWVsZW1lbnRzW2ldKTtpKyspe2lmKHRoaXMuX2lzQ29udGVudChuKSl7bi5fX29ic2VydmVOb2Rlc01hcD1uLl9fb2JzZXJ2ZU5vZGVzTWFwfHxuZXcgV2Vha01hcCgpO2lmKCFuLl9fb2JzZXJ2ZU5vZGVzTWFwLmhhcyh0aGlzKSl7bi5fX29ic2VydmVOb2Rlc01hcC5zZXQodGhpcyx0aGlzLl9vYnNlcnZlQ29udGVudChuKSk7fX19fSxfb2JzZXJ2ZUNvbnRlbnQ6ZnVuY3Rpb24oY29udGVudCl7dmFyIHNlbGY9dGhpczt2YXIgaD1Qb2x5bWVyLmRvbShjb250ZW50KS5vYnNlcnZlTm9kZXMoZnVuY3Rpb24oKXtzZWxmLl9zY2hlZHVsZU5vdGlmeSgpO30pO2guX2F2b2lkQ2hhbmdlQ2FsY3VsYXRpb249dHJ1ZTtyZXR1cm4gaDt9LF91bm9ic2VydmVDb250ZW50RWxlbWVudHM6ZnVuY3Rpb24oZWxlbWVudHMpe2Zvcih2YXIgaT0wLG4saDtpPGVsZW1lbnRzLmxlbmd0aCYmKG49ZWxlbWVudHNbaV0pO2krKyl7aWYodGhpcy5faXNDb250ZW50KG4pKXtoPW4uX19vYnNlcnZlTm9kZXNNYXAuZ2V0KHRoaXMpO2lmKGgpe1BvbHltZXIuZG9tKG4pLnVub2JzZXJ2ZU5vZGVzKGgpO24uX19vYnNlcnZlTm9kZXNNYXAuZGVsZXRlKHRoaXMpO319fX0sX2lzQ29udGVudDpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5sb2NhbE5hbWU9PT0nY29udGVudCc7fSxfY2FsbExpc3RlbmVyczpmdW5jdGlvbigpe3ZhciBvJD10aGlzLl9saXN0ZW5lcnM7dmFyIG5vZGVzPXRoaXMuX2dldEVmZmVjdGl2ZU5vZGVzKCk7Zm9yKHZhciBpPTAsbztpPG8kLmxlbmd0aCYmKG89byRbaV0pO2krKyl7dmFyIGluZm89dGhpcy5fZ2VuZXJhdGVMaXN0ZW5lckluZm8obyxub2Rlcyk7aWYoaW5mb3x8by5fYWx3YXlzTm90aWZ5KXt0aGlzLl9jYWxsTGlzdGVuZXIobyxpbmZvKTt9fX0sX2dldEVmZmVjdGl2ZU5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tQXBpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTt9LF9nZW5lcmF0ZUxpc3RlbmVySW5mbzpmdW5jdGlvbihsaXN0ZW5lcixuZXdOb2Rlcyl7aWYobGlzdGVuZXIuX2F2b2lkQ2hhbmdlQ2FsY3VsYXRpb24pe3JldHVybiB0cnVlO30KLXZhciBvbGROb2Rlcz1saXN0ZW5lci5fbm9kZXM7dmFyIGluZm89e3RhcmdldDp0aGlzLm5vZGUsYWRkZWROb2RlczpbXSxyZW1vdmVkTm9kZXM6W119O3ZhciBzcGxpY2VzPVBvbHltZXIuQXJyYXlTcGxpY2UuY2FsY3VsYXRlU3BsaWNlcyhuZXdOb2RlcyxvbGROb2Rlcyk7Zm9yKHZhciBpPTAscztpPHNwbGljZXMubGVuZ3RoJiYocz1zcGxpY2VzW2ldKTtpKyspe2Zvcih2YXIgaj0wLG47ajxzLnJlbW92ZWQubGVuZ3RoJiYobj1zLnJlbW92ZWRbal0pO2orKyl7aW5mby5yZW1vdmVkTm9kZXMucHVzaChuKTt9fQotZm9yKGk9MCxzO2k8c3BsaWNlcy5sZW5ndGgmJihzPXNwbGljZXNbaV0pO2krKyl7Zm9yKGo9cy5pbmRleDtqPHMuaW5kZXgrcy5hZGRlZENvdW50O2orKyl7aW5mby5hZGRlZE5vZGVzLnB1c2gobmV3Tm9kZXNbal0pO319Ci1saXN0ZW5lci5fbm9kZXM9bmV3Tm9kZXM7aWYoaW5mby5hZGRlZE5vZGVzLmxlbmd0aHx8aW5mby5yZW1vdmVkTm9kZXMubGVuZ3RoKXtyZXR1cm4gaW5mbzt9fSxfY2FsbExpc3RlbmVyOmZ1bmN0aW9uKGxpc3RlbmVyLGluZm8pe3JldHVybiBsaXN0ZW5lci5mbi5jYWxsKHRoaXMubm9kZSxpbmZvKTt9LGVuYWJsZVNoYWRvd0F0dHJpYnV0ZVRyYWNraW5nOmZ1bmN0aW9uKCl7fX07aWYoU2V0dGluZ3MudXNlU2hhZG93KXt2YXIgYmFzZVNldHVwPURvbUFwaS5FZmZlY3RpdmVOb2Rlc09ic2VydmVyLnByb3RvdHlwZS5fc2V0dXA7dmFyIGJhc2VDbGVhbnVwPURvbUFwaS5FZmZlY3RpdmVOb2Rlc09ic2VydmVyLnByb3RvdHlwZS5fY2xlYW51cDtQb2x5bWVyLkJhc2UubWl4aW4oRG9tQXBpLkVmZmVjdGl2ZU5vZGVzT2JzZXJ2ZXIucHJvdG90eXBlLHtfc2V0dXA6ZnVuY3Rpb24oKXtpZighdGhpcy5fb2JzZXJ2ZXIpe3ZhciBzZWxmPXRoaXM7dGhpcy5fbXV0YXRpb25IYW5kbGVyPWZ1bmN0aW9uKG14bnMpe2lmKG14bnMmJm14bnMubGVuZ3RoKXtzZWxmLl9zY2hlZHVsZU5vdGlmeSgpO319O3RoaXMuX29ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMuX211dGF0aW9uSGFuZGxlcik7dGhpcy5fYm91bmRGbHVzaD1mdW5jdGlvbigpe3NlbGYuX2ZsdXNoKCk7fTtQb2x5bWVyLmRvbS5hZGRTdGF0aWNGbHVzaCh0aGlzLl9ib3VuZEZsdXNoKTt0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHRoaXMubm9kZSx7Y2hpbGRMaXN0OnRydWV9KTt9Ci1iYXNlU2V0dXAuY2FsbCh0aGlzKTt9LF9jbGVhbnVwOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO3RoaXMuX29ic2VydmVyPW51bGw7dGhpcy5fbXV0YXRpb25IYW5kbGVyPW51bGw7UG9seW1lci5kb20ucmVtb3ZlU3RhdGljRmx1c2godGhpcy5fYm91bmRGbHVzaCk7YmFzZUNsZWFudXAuY2FsbCh0aGlzKTt9LF9mbHVzaDpmdW5jdGlvbigpe2lmKHRoaXMuX29ic2VydmVyKXt0aGlzLl9tdXRhdGlvbkhhbmRsZXIodGhpcy5fb2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk7fX0sZW5hYmxlU2hhZG93QXR0cmlidXRlVHJhY2tpbmc6ZnVuY3Rpb24oKXtpZih0aGlzLl9vYnNlcnZlcil7dGhpcy5fbWFrZUNvbnRlbnRMaXN0ZW5lcnNBbHdheXNOb3RpZnkoKTt0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCk7dGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLm5vZGUse2NoaWxkTGlzdDp0cnVlLGF0dHJpYnV0ZXM6dHJ1ZSxzdWJ0cmVlOnRydWV9KTt2YXIgcm9vdD10aGlzLmRvbUFwaS5nZXRPd25lclJvb3QoKTt2YXIgaG9zdD1yb290JiZyb290Lmhvc3Q7aWYoaG9zdCYmUG9seW1lci5kb20oaG9zdCkub2JzZXJ2ZXIpe1BvbHltZXIuZG9tKGhvc3QpLm9ic2VydmVyLmVuYWJsZVNoYWRvd0F0dHJpYnV0ZVRyYWNraW5nKCk7fX19LF9tYWtlQ29udGVudExpc3RlbmVyc0Fsd2F5c05vdGlmeTpmdW5jdGlvbigpe2Zvcih2YXIgaT0wLGg7aTx0aGlzLl9saXN0ZW5lcnMubGVuZ3RoO2krKyl7aD10aGlzLl9saXN0ZW5lcnNbaV07aC5fYWx3YXlzTm90aWZ5PWguX2lzQ29udGVudExpc3RlbmVyO319fSk7fX0oKSk7KGZ1bmN0aW9uKCl7J3VzZSBzdHJpY3QnO3ZhciBEb21BcGk9UG9seW1lci5Eb21BcGkuY3Rvcjt2YXIgU2V0dGluZ3M9UG9seW1lci5TZXR0aW5ncztEb21BcGkuRGlzdHJpYnV0ZWROb2Rlc09ic2VydmVyPWZ1bmN0aW9uKGRvbUFwaSl7RG9tQXBpLkVmZmVjdGl2ZU5vZGVzT2JzZXJ2ZXIuY2FsbCh0aGlzLGRvbUFwaSk7fTtEb21BcGkuRGlzdHJpYnV0ZWROb2Rlc09ic2VydmVyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKERvbUFwaS5FZmZlY3RpdmVOb2Rlc09ic2VydmVyLnByb3RvdHlwZSk7UG9seW1lci5CYXNlLm1peGluKERvbUFwaS5EaXN0cmlidXRlZE5vZGVzT2JzZXJ2ZXIucHJvdG90eXBlLHtfc2V0dXA6ZnVuY3Rpb24oKXt9LF9jbGVhbnVwOmZ1bmN0aW9uKCl7fSxfYmVmb3JlQ2FsbExpc3RlbmVyczpmdW5jdGlvbigpe30sX2dldEVmZmVjdGl2ZU5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tQXBpLmdldERpc3RyaWJ1dGVkTm9kZXMoKTt9fSk7aWYoU2V0dGluZ3MudXNlU2hhZG93KXtQb2x5bWVyLkJhc2UubWl4aW4oRG9tQXBpLkRpc3RyaWJ1dGVkTm9kZXNPYnNlcnZlci5wcm90b3R5cGUse19zZXR1cDpmdW5jdGlvbigpe2lmKCF0aGlzLl9vYnNlcnZlcil7dmFyIHJvb3Q9dGhpcy5kb21BcGkuZ2V0T3duZXJSb290KCk7dmFyIGhvc3Q9cm9vdCYmcm9vdC5ob3N0O2lmKGhvc3Qpe3ZhciBzZWxmPXRoaXM7dGhpcy5fb2JzZXJ2ZXI9UG9seW1lci5kb20oaG9zdCkub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKCl7c2VsZi5fc2NoZWR1bGVOb3RpZnkoKTt9KTt0aGlzLl9vYnNlcnZlci5faXNDb250ZW50TGlzdGVuZXI9dHJ1ZTtpZih0aGlzLl9oYXNBdHRyU2VsZWN0KCkpe1BvbHltZXIuZG9tKGhvc3QpLm9ic2VydmVyLmVuYWJsZVNoYWRvd0F0dHJpYnV0ZVRyYWNraW5nKCk7fX19fSxfaGFzQXR0clNlbGVjdDpmdW5jdGlvbigpe3ZhciBzZWxlY3Q9dGhpcy5ub2RlLmdldEF0dHJpYnV0ZSgnc2VsZWN0Jyk7cmV0dXJuIHNlbGVjdCYmc2VsZWN0Lm1hdGNoKC9bWy5dKy8pO30sX2NsZWFudXA6ZnVuY3Rpb24oKXt2YXIgcm9vdD10aGlzLmRvbUFwaS5nZXRPd25lclJvb3QoKTt2YXIgaG9zdD1yb290JiZyb290Lmhvc3Q7aWYoaG9zdCl7UG9seW1lci5kb20oaG9zdCkudW5vYnNlcnZlTm9kZXModGhpcy5fb2JzZXJ2ZXIpO30KLXRoaXMuX29ic2VydmVyPW51bGw7fX0pO319KCkpOyhmdW5jdGlvbigpe3ZhciBEb21BcGk9UG9seW1lci5Eb21BcGk7dmFyIFRyZWVBcGk9UG9seW1lci5UcmVlQXBpO1BvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSh7X3ByZXBTaGFkeTpmdW5jdGlvbigpe3RoaXMuX3VzZUNvbnRlbnQ9dGhpcy5fdXNlQ29udGVudHx8Qm9vbGVhbih0aGlzLl90ZW1wbGF0ZSk7fSxfc2V0dXBTaGFkeTpmdW5jdGlvbigpe3RoaXMuc2hhZHlSb290PW51bGw7aWYoIXRoaXMuX19kb21BcGkpe3RoaXMuX19kb21BcGk9bnVsbDt9Ci1pZighdGhpcy5fX2RvbSl7dGhpcy5fX2RvbT1udWxsO30KLWlmKCF0aGlzLl9vd25lclNoYWR5Um9vdCl7dGhpcy5fb3duZXJTaGFkeVJvb3Q9dW5kZWZpbmVkO319LF9wb29sQ29udGVudDpmdW5jdGlvbigpe2lmKHRoaXMuX3VzZUNvbnRlbnQpe1RyZWVBcGkuTG9naWNhbC5zYXZlQ2hpbGROb2Rlcyh0aGlzKTt9fSxfc2V0dXBSb290OmZ1bmN0aW9uKCl7aWYodGhpcy5fdXNlQ29udGVudCl7dGhpcy5fY3JlYXRlTG9jYWxSb290KCk7aWYoIXRoaXMuZGF0YUhvc3Qpe3VwZ3JhZGVMb2dpY2FsQ2hpbGRyZW4oVHJlZUFwaS5Mb2dpY2FsLmdldENoaWxkTm9kZXModGhpcykpO319fSxfY3JlYXRlTG9jYWxSb290OmZ1bmN0aW9uKCl7dGhpcy5zaGFkeVJvb3Q9dGhpcy5yb290O3RoaXMuc2hhZHlSb290Ll9kaXN0cmlidXRpb25DbGVhbj1mYWxzZTt0aGlzLnNoYWR5Um9vdC5faGFzRGlzdHJpYnV0ZWQ9ZmFsc2U7dGhpcy5zaGFkeVJvb3QuX2lzU2hhZHlSb290PXRydWU7dGhpcy5zaGFkeVJvb3QuX2RpcnR5Um9vdHM9W107dmFyIGkkPXRoaXMuc2hhZHlSb290Ll9pbnNlcnRpb25Qb2ludHM9IXRoaXMuX25vdGVzfHx0aGlzLl9ub3Rlcy5faGFzQ29udGVudD90aGlzLnNoYWR5Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdjb250ZW50Jyk6W107VHJlZUFwaS5Mb2dpY2FsLnNhdmVDaGlsZE5vZGVzKHRoaXMuc2hhZHlSb290KTtmb3IodmFyIGk9MCxjO2k8aSQubGVuZ3RoO2krKyl7Yz1pJFtpXTtUcmVlQXBpLkxvZ2ljYWwuc2F2ZUNoaWxkTm9kZXMoYyk7VHJlZUFwaS5Mb2dpY2FsLnNhdmVDaGlsZE5vZGVzKGMucGFyZW50Tm9kZSk7fQotdGhpcy5zaGFkeVJvb3QuaG9zdD10aGlzO30sZGlzdHJpYnV0ZUNvbnRlbnQ6ZnVuY3Rpb24odXBkYXRlSW5zZXJ0aW9uUG9pbnRzKXtpZih0aGlzLnNoYWR5Um9vdCl7dGhpcy5zaGFkeVJvb3QuX2ludmFsaWRJbnNlcnRpb25Qb2ludHM9dGhpcy5zaGFkeVJvb3QuX2ludmFsaWRJbnNlcnRpb25Qb2ludHN8fHVwZGF0ZUluc2VydGlvblBvaW50czt2YXIgaG9zdD1nZXRUb3BEaXN0cmlidXRpbmdIb3N0KHRoaXMpO1BvbHltZXIuZG9tKHRoaXMpLl9sYXp5RGlzdHJpYnV0ZShob3N0KTt9fSxfZGlzdHJpYnV0ZUNvbnRlbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLl91c2VDb250ZW50JiYhdGhpcy5zaGFkeVJvb3QuX2Rpc3RyaWJ1dGlvbkNsZWFuKXtpZih0aGlzLnNoYWR5Um9vdC5faW52YWxpZEluc2VydGlvblBvaW50cyl7UG9seW1lci5kb20odGhpcykuX3VwZGF0ZUluc2VydGlvblBvaW50cyh0aGlzKTt0aGlzLnNoYWR5Um9vdC5faW52YWxpZEluc2VydGlvblBvaW50cz1mYWxzZTt9Ci10aGlzLl9iZWdpbkRpc3RyaWJ1dGUoKTt0aGlzLl9kaXN0cmlidXRlRGlydHlSb290cygpO3RoaXMuX2ZpbmlzaERpc3RyaWJ1dGUoKTt9fSxfYmVnaW5EaXN0cmlidXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fdXNlQ29udGVudCYmRG9tQXBpLmhhc0luc2VydGlvblBvaW50KHRoaXMuc2hhZHlSb290KSl7dGhpcy5fcmVzZXREaXN0cmlidXRpb24oKTt0aGlzLl9kaXN0cmlidXRlUG9vbCh0aGlzLnNoYWR5Um9vdCx0aGlzLl9jb2xsZWN0UG9vbCgpKTt9fSxfZGlzdHJpYnV0ZURpcnR5Um9vdHM6ZnVuY3Rpb24oKXt2YXIgYyQ9dGhpcy5zaGFkeVJvb3QuX2RpcnR5Um9vdHM7Zm9yKHZhciBpPTAsbD1jJC5sZW5ndGgsYztpPGwmJihjPWMkW2ldKTtpKyspe2MuX2Rpc3RyaWJ1dGVDb250ZW50KCk7fQotdGhpcy5zaGFkeVJvb3QuX2RpcnR5Um9vdHM9W107fSxfZmluaXNoRGlzdHJpYnV0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX3VzZUNvbnRlbnQpe3RoaXMuc2hhZHlSb290Ll9kaXN0cmlidXRpb25DbGVhbj10cnVlO2lmKERvbUFwaS5oYXNJbnNlcnRpb25Qb2ludCh0aGlzLnNoYWR5Um9vdCkpe3RoaXMuX2NvbXBvc2VUcmVlKCk7bm90aWZ5Q29udGVudE9ic2VydmVycyh0aGlzLnNoYWR5Um9vdCk7fWVsc2V7aWYoIXRoaXMuc2hhZHlSb290Ll9oYXNEaXN0cmlidXRlZCl7VHJlZUFwaS5Db21wb3NlZC5jbGVhckNoaWxkTm9kZXModGhpcyk7dGhpcy5hcHBlbmRDaGlsZCh0aGlzLnNoYWR5Um9vdCk7fWVsc2V7dmFyIGNoaWxkcmVuPXRoaXMuX2NvbXBvc2VOb2RlKHRoaXMpO3RoaXMuX3VwZGF0ZUNoaWxkTm9kZXModGhpcyxjaGlsZHJlbik7fX0KLWlmKCF0aGlzLnNoYWR5Um9vdC5faGFzRGlzdHJpYnV0ZWQpe25vdGlmeUluaXRpYWxEaXN0cmlidXRpb24odGhpcyk7fQotdGhpcy5zaGFkeVJvb3QuX2hhc0Rpc3RyaWJ1dGVkPXRydWU7fX0sZWxlbWVudE1hdGNoZXM6ZnVuY3Rpb24oc2VsZWN0b3Isbm9kZSl7bm9kZT1ub2RlfHx0aGlzO3JldHVybiBEb21BcGkubWF0Y2hlc1NlbGVjdG9yLmNhbGwobm9kZSxzZWxlY3Rvcik7fSxfcmVzZXREaXN0cmlidXRpb246ZnVuY3Rpb24oKXt2YXIgY2hpbGRyZW49VHJlZUFwaS5Mb2dpY2FsLmdldENoaWxkTm9kZXModGhpcyk7Zm9yKHZhciBpPTA7aTxjaGlsZHJlbi5sZW5ndGg7aSsrKXt2YXIgY2hpbGQ9Y2hpbGRyZW5baV07aWYoY2hpbGQuX2Rlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKXtjaGlsZC5fZGVzdGluYXRpb25JbnNlcnRpb25Qb2ludHM9dW5kZWZpbmVkO30KLWlmKGlzSW5zZXJ0aW9uUG9pbnQoY2hpbGQpKXtjbGVhckRpc3RyaWJ1dGVkRGVzdGluYXRpb25JbnNlcnRpb25Qb2ludHMoY2hpbGQpO319Ci12YXIgcm9vdD10aGlzLnNoYWR5Um9vdDt2YXIgcCQ9cm9vdC5faW5zZXJ0aW9uUG9pbnRzO2Zvcih2YXIgaj0wO2o8cCQubGVuZ3RoO2orKyl7cCRbal0uX2Rpc3RyaWJ1dGVkTm9kZXM9W107fX0sX2NvbGxlY3RQb29sOmZ1bmN0aW9uKCl7dmFyIHBvb2w9W107dmFyIGNoaWxkcmVuPVRyZWVBcGkuTG9naWNhbC5nZXRDaGlsZE5vZGVzKHRoaXMpO2Zvcih2YXIgaT0wO2k8Y2hpbGRyZW4ubGVuZ3RoO2krKyl7dmFyIGNoaWxkPWNoaWxkcmVuW2ldO2lmKGlzSW5zZXJ0aW9uUG9pbnQoY2hpbGQpKXtwb29sLnB1c2guYXBwbHkocG9vbCxjaGlsZC5fZGlzdHJpYnV0ZWROb2Rlcyk7fWVsc2V7cG9vbC5wdXNoKGNoaWxkKTt9fQotcmV0dXJuIHBvb2w7fSxfZGlzdHJpYnV0ZVBvb2w6ZnVuY3Rpb24obm9kZSxwb29sKXt2YXIgcCQ9bm9kZS5faW5zZXJ0aW9uUG9pbnRzO2Zvcih2YXIgaT0wLGw9cCQubGVuZ3RoLHA7aTxsJiYocD1wJFtpXSk7aSsrKXt0aGlzLl9kaXN0cmlidXRlSW5zZXJ0aW9uUG9pbnQocCxwb29sKTttYXliZVJlZGlzdHJpYnV0ZVBhcmVudChwLHRoaXMpO319LF9kaXN0cmlidXRlSW5zZXJ0aW9uUG9pbnQ6ZnVuY3Rpb24oY29udGVudCxwb29sKXt2YXIgYW55RGlzdHJpYnV0ZWQ9ZmFsc2U7Zm9yKHZhciBpPTAsbD1wb29sLmxlbmd0aCxub2RlO2k8bDtpKyspe25vZGU9cG9vbFtpXTtpZighbm9kZSl7Y29udGludWU7fQotaWYodGhpcy5fbWF0Y2hlc0NvbnRlbnRTZWxlY3Qobm9kZSxjb250ZW50KSl7ZGlzdHJpYnV0ZU5vZGVJbnRvKG5vZGUsY29udGVudCk7cG9vbFtpXT11bmRlZmluZWQ7YW55RGlzdHJpYnV0ZWQ9dHJ1ZTt9fQotaWYoIWFueURpc3RyaWJ1dGVkKXt2YXIgY2hpbGRyZW49VHJlZUFwaS5Mb2dpY2FsLmdldENoaWxkTm9kZXMoY29udGVudCk7Zm9yKHZhciBqPTA7ajxjaGlsZHJlbi5sZW5ndGg7aisrKXtkaXN0cmlidXRlTm9kZUludG8oY2hpbGRyZW5bal0sY29udGVudCk7fX19LF9jb21wb3NlVHJlZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUNoaWxkTm9kZXModGhpcyx0aGlzLl9jb21wb3NlTm9kZSh0aGlzKSk7dmFyIHAkPXRoaXMuc2hhZHlSb290Ll9pbnNlcnRpb25Qb2ludHM7Zm9yKHZhciBpPTAsbD1wJC5sZW5ndGgscCxwYXJlbnQ7aTxsJiYocD1wJFtpXSk7aSsrKXtwYXJlbnQ9VHJlZUFwaS5Mb2dpY2FsLmdldFBhcmVudE5vZGUocCk7aWYoIXBhcmVudC5fdXNlQ29udGVudCYmcGFyZW50IT09dGhpcyYmcGFyZW50IT09dGhpcy5zaGFkeVJvb3Qpe3RoaXMuX3VwZGF0ZUNoaWxkTm9kZXMocGFyZW50LHRoaXMuX2NvbXBvc2VOb2RlKHBhcmVudCkpO319fSxfY29tcG9zZU5vZGU6ZnVuY3Rpb24obm9kZSl7dmFyIGNoaWxkcmVuPVtdO3ZhciBjJD1UcmVlQXBpLkxvZ2ljYWwuZ2V0Q2hpbGROb2Rlcyhub2RlLnNoYWR5Um9vdHx8bm9kZSk7Zm9yKHZhciBpPTA7aTxjJC5sZW5ndGg7aSsrKXt2YXIgY2hpbGQ9YyRbaV07aWYoaXNJbnNlcnRpb25Qb2ludChjaGlsZCkpe3ZhciBkaXN0cmlidXRlZE5vZGVzPWNoaWxkLl9kaXN0cmlidXRlZE5vZGVzO2Zvcih2YXIgaj0wO2o8ZGlzdHJpYnV0ZWROb2Rlcy5sZW5ndGg7aisrKXt2YXIgZGlzdHJpYnV0ZWROb2RlPWRpc3RyaWJ1dGVkTm9kZXNbal07aWYoaXNGaW5hbERlc3RpbmF0aW9uKGNoaWxkLGRpc3RyaWJ1dGVkTm9kZSkpe2NoaWxkcmVuLnB1c2goZGlzdHJpYnV0ZWROb2RlKTt9fX1lbHNle2NoaWxkcmVuLnB1c2goY2hpbGQpO319Ci1yZXR1cm4gY2hpbGRyZW47fSxfdXBkYXRlQ2hpbGROb2RlczpmdW5jdGlvbihjb250YWluZXIsY2hpbGRyZW4pe3ZhciBjb21wb3NlZD1UcmVlQXBpLkNvbXBvc2VkLmdldENoaWxkTm9kZXMoY29udGFpbmVyKTt2YXIgc3BsaWNlcz1Qb2x5bWVyLkFycmF5U3BsaWNlLmNhbGN1bGF0ZVNwbGljZXMoY2hpbGRyZW4sY29tcG9zZWQpO2Zvcih2YXIgaT0wLGQ9MCxzO2k8c3BsaWNlcy5sZW5ndGgmJihzPXNwbGljZXNbaV0pO2krKyl7Zm9yKHZhciBqPTAsbjtqPHMucmVtb3ZlZC5sZW5ndGgmJihuPXMucmVtb3ZlZFtqXSk7aisrKXtpZihUcmVlQXBpLkNvbXBvc2VkLmdldFBhcmVudE5vZGUobik9PT1jb250YWluZXIpe1RyZWVBcGkuQ29tcG9zZWQucmVtb3ZlQ2hpbGQoY29udGFpbmVyLG4pO30KLWNvbXBvc2VkLnNwbGljZShzLmluZGV4K2QsMSk7fQotZC09cy5hZGRlZENvdW50O30KLWZvcih2YXIgaT0wLHMsbmV4dDtpPHNwbGljZXMubGVuZ3RoJiYocz1zcGxpY2VzW2ldKTtpKyspe25leHQ9Y29tcG9zZWRbcy5pbmRleF07Zm9yKGo9cy5pbmRleCxuO2o8cy5pbmRleCtzLmFkZGVkQ291bnQ7aisrKXtuPWNoaWxkcmVuW2pdO1RyZWVBcGkuQ29tcG9zZWQuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lcixuLG5leHQpO2NvbXBvc2VkLnNwbGljZShqLDAsbik7fX19LF9tYXRjaGVzQ29udGVudFNlbGVjdDpmdW5jdGlvbihub2RlLGNvbnRlbnRFbGVtZW50KXt2YXIgc2VsZWN0PWNvbnRlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnc2VsZWN0Jyk7aWYoIXNlbGVjdCl7cmV0dXJuIHRydWU7fQotc2VsZWN0PXNlbGVjdC50cmltKCk7aWYoIXNlbGVjdCl7cmV0dXJuIHRydWU7fQotaWYoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpe3JldHVybiBmYWxzZTt9Ci12YXIgdmFsaWRTZWxlY3RvcnM9L14oOm5vdFwoKT9bKi4jW2EtekEtWl98XS87aWYoIXZhbGlkU2VsZWN0b3JzLnRlc3Qoc2VsZWN0KSl7cmV0dXJuIGZhbHNlO30KLXJldHVybiB0aGlzLmVsZW1lbnRNYXRjaGVzKHNlbGVjdCxub2RlKTt9LF9lbGVtZW50QWRkOmZ1bmN0aW9uKCl7fSxfZWxlbWVudFJlbW92ZTpmdW5jdGlvbigpe319KTt2YXIgZG9tSG9zdERlc2M9e2dldDpmdW5jdGlvbigpe3ZhciByb290PVBvbHltZXIuZG9tKHRoaXMpLmdldE93bmVyUm9vdCgpO3JldHVybiByb290JiZyb290Lmhvc3Q7fSxjb25maWd1cmFibGU6dHJ1ZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFBvbHltZXIuQmFzZSwnZG9tSG9zdCcsZG9tSG9zdERlc2MpO1BvbHltZXIuQmFzZURlc2NyaXB0b3JzLmRvbUhvc3Q9ZG9tSG9zdERlc2M7ZnVuY3Rpb24gZGlzdHJpYnV0ZU5vZGVJbnRvKGNoaWxkLGluc2VydGlvblBvaW50KXtpbnNlcnRpb25Qb2ludC5fZGlzdHJpYnV0ZWROb2Rlcy5wdXNoKGNoaWxkKTt2YXIgcG9pbnRzPWNoaWxkLl9kZXN0aW5hdGlvbkluc2VydGlvblBvaW50cztpZighcG9pbnRzKXtjaGlsZC5fZGVzdGluYXRpb25JbnNlcnRpb25Qb2ludHM9W2luc2VydGlvblBvaW50XTt9ZWxzZXtwb2ludHMucHVzaChpbnNlcnRpb25Qb2ludCk7fX0KLWZ1bmN0aW9uIGNsZWFyRGlzdHJpYnV0ZWREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cyhjb250ZW50KXt2YXIgZSQ9Y29udGVudC5fZGlzdHJpYnV0ZWROb2RlcztpZihlJCl7Zm9yKHZhciBpPTA7aTxlJC5sZW5ndGg7aSsrKXt2YXIgZD1lJFtpXS5fZGVzdGluYXRpb25JbnNlcnRpb25Qb2ludHM7aWYoZCl7ZC5zcGxpY2UoZC5pbmRleE9mKGNvbnRlbnQpKzEsZC5sZW5ndGgpO319fX0KLWZ1bmN0aW9uIG1heWJlUmVkaXN0cmlidXRlUGFyZW50KGNvbnRlbnQsaG9zdCl7dmFyIHBhcmVudD1UcmVlQXBpLkxvZ2ljYWwuZ2V0UGFyZW50Tm9kZShjb250ZW50KTtpZihwYXJlbnQmJnBhcmVudC5zaGFkeVJvb3QmJkRvbUFwaS5oYXNJbnNlcnRpb25Qb2ludChwYXJlbnQuc2hhZHlSb290KSYmcGFyZW50LnNoYWR5Um9vdC5fZGlzdHJpYnV0aW9uQ2xlYW4pe3BhcmVudC5zaGFkeVJvb3QuX2Rpc3RyaWJ1dGlvbkNsZWFuPWZhbHNlO2hvc3Quc2hhZHlSb290Ll9kaXJ0eVJvb3RzLnB1c2gocGFyZW50KTt9fQotZnVuY3Rpb24gaXNGaW5hbERlc3RpbmF0aW9uKGluc2VydGlvblBvaW50LG5vZGUpe3ZhciBwb2ludHM9bm9kZS5fZGVzdGluYXRpb25JbnNlcnRpb25Qb2ludHM7cmV0dXJuIHBvaW50cyYmcG9pbnRzW3BvaW50cy5sZW5ndGgtMV09PT1pbnNlcnRpb25Qb2ludDt9Ci1mdW5jdGlvbiBpc0luc2VydGlvblBvaW50KG5vZGUpe3JldHVybiBub2RlLmxvY2FsTmFtZT09J2NvbnRlbnQnO30KLWZ1bmN0aW9uIGdldFRvcERpc3RyaWJ1dGluZ0hvc3QoaG9zdCl7d2hpbGUoaG9zdCYmaG9zdE5lZWRzUmVkaXN0cmlidXRpb24oaG9zdCkpe2hvc3Q9aG9zdC5kb21Ib3N0O30KLXJldHVybiBob3N0O30KLWZ1bmN0aW9uIGhvc3ROZWVkc1JlZGlzdHJpYnV0aW9uKGhvc3Qpe3ZhciBjJD1UcmVlQXBpLkxvZ2ljYWwuZ2V0Q2hpbGROb2Rlcyhob3N0KTtmb3IodmFyIGk9MCxjO2k8YyQubGVuZ3RoO2krKyl7Yz1jJFtpXTtpZihjLmxvY2FsTmFtZSYmYy5sb2NhbE5hbWU9PT0nY29udGVudCcpe3JldHVybiBob3N0LmRvbUhvc3Q7fX19Ci1mdW5jdGlvbiBub3RpZnlDb250ZW50T2JzZXJ2ZXJzKHJvb3Qpe2Zvcih2YXIgaT0wLGM7aTxyb290Ll9pbnNlcnRpb25Qb2ludHMubGVuZ3RoO2krKyl7Yz1yb290Ll9pbnNlcnRpb25Qb2ludHNbaV07aWYoRG9tQXBpLmhhc0FwaShjKSl7UG9seW1lci5kb20oYykubm90aWZ5T2JzZXJ2ZXIoKTt9fX0KLWZ1bmN0aW9uIG5vdGlmeUluaXRpYWxEaXN0cmlidXRpb24oaG9zdCl7aWYoRG9tQXBpLmhhc0FwaShob3N0KSl7UG9seW1lci5kb20oaG9zdCkubm90aWZ5T2JzZXJ2ZXIoKTt9fQotdmFyIG5lZWRzVXBncmFkZT13aW5kb3cuQ3VzdG9tRWxlbWVudHMmJiFDdXN0b21FbGVtZW50cy51c2VOYXRpdmU7ZnVuY3Rpb24gdXBncmFkZUxvZ2ljYWxDaGlsZHJlbihjaGlsZHJlbil7aWYobmVlZHNVcGdyYWRlJiZjaGlsZHJlbil7Zm9yKHZhciBpPTA7aTxjaGlsZHJlbi5sZW5ndGg7aSsrKXtDdXN0b21FbGVtZW50cy51cGdyYWRlKGNoaWxkcmVuW2ldKTt9fX19KCkpO2lmKFBvbHltZXIuU2V0dGluZ3MudXNlU2hhZG93KXtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe19wb29sQ29udGVudDpmdW5jdGlvbigpe30sX2JlZ2luRGlzdHJpYnV0ZTpmdW5jdGlvbigpe30sZGlzdHJpYnV0ZUNvbnRlbnQ6ZnVuY3Rpb24oKXt9LF9kaXN0cmlidXRlQ29udGVudDpmdW5jdGlvbigpe30sX2ZpbmlzaERpc3RyaWJ1dGU6ZnVuY3Rpb24oKXt9LF9jcmVhdGVMb2NhbFJvb3Q6ZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZVNoYWRvd1Jvb3QoKTt0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGhpcy5yb290KTt0aGlzLnJvb3Q9dGhpcy5zaGFkb3dSb290O319KTt9UG9seW1lci5Bc3luYz17X2N1cnJWYWw6MCxfbGFzdFZhbDowLF9jYWxsYmFja3M6W10sX3R3aWRkbGVDb250ZW50OjAsX3R3aWRkbGU6ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpLHJ1bjpmdW5jdGlvbihjYWxsYmFjayx3YWl0VGltZSl7aWYod2FpdFRpbWU+MCl7cmV0dXJufnNldFRpbWVvdXQoY2FsbGJhY2ssd2FpdFRpbWUpO31lbHNle3RoaXMuX3R3aWRkbGUudGV4dENvbnRlbnQ9dGhpcy5fdHdpZGRsZUNvbnRlbnQrKzt0aGlzLl9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7cmV0dXJuIHRoaXMuX2N1cnJWYWwrKzt9fSxjYW5jZWw6ZnVuY3Rpb24oaGFuZGxlKXtpZihoYW5kbGU8MCl7Y2xlYXJUaW1lb3V0KH5oYW5kbGUpO31lbHNle3ZhciBpZHg9aGFuZGxlLXRoaXMuX2xhc3RWYWw7aWYoaWR4Pj0wKXtpZighdGhpcy5fY2FsbGJhY2tzW2lkeF0pe3Rocm93J2ludmFsaWQgYXN5bmMgaGFuZGxlOiAnK2hhbmRsZTt9Ci10aGlzLl9jYWxsYmFja3NbaWR4XT1udWxsO319fSxfYXRFbmRPZk1pY3JvdGFzazpmdW5jdGlvbigpe3ZhciBsZW49dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDtmb3IodmFyIGk9MDtpPGxlbjtpKyspe3ZhciBjYj10aGlzLl9jYWxsYmFja3NbaV07aWYoY2Ipe3RyeXtjYigpO31jYXRjaChlKXtpKys7dGhpcy5fY2FsbGJhY2tzLnNwbGljZSgwLGkpO3RoaXMuX2xhc3RWYWwrPWk7dGhpcy5fdHdpZGRsZS50ZXh0Q29udGVudD10aGlzLl90d2lkZGxlQ29udGVudCsrO3Rocm93IGU7fX19Ci10aGlzLl9jYWxsYmFja3Muc3BsaWNlKDAsbGVuKTt0aGlzLl9sYXN0VmFsKz1sZW47fX07bmV3IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCl7UG9seW1lci5Bc3luYy5fYXRFbmRPZk1pY3JvdGFzaygpO30pLm9ic2VydmUoUG9seW1lci5Bc3luYy5fdHdpZGRsZSx7Y2hhcmFjdGVyRGF0YTp0cnVlfSk7UG9seW1lci5EZWJvdW5jZT1mdW5jdGlvbigpe3ZhciBBc3luYz1Qb2x5bWVyLkFzeW5jO3ZhciBEZWJvdW5jZXI9ZnVuY3Rpb24oY29udGV4dCl7dGhpcy5jb250ZXh0PWNvbnRleHQ7dmFyIHNlbGY9dGhpczt0aGlzLmJvdW5kQ29tcGxldGU9ZnVuY3Rpb24oKXtzZWxmLmNvbXBsZXRlKCk7fTt9O0RlYm91bmNlci5wcm90b3R5cGU9e2dvOmZ1bmN0aW9uKGNhbGxiYWNrLHdhaXQpe3ZhciBoO3RoaXMuZmluaXNoPWZ1bmN0aW9uKCl7QXN5bmMuY2FuY2VsKGgpO307aD1Bc3luYy5ydW4odGhpcy5ib3VuZENvbXBsZXRlLHdhaXQpO3RoaXMuY2FsbGJhY2s9Y2FsbGJhY2s7fSxzdG9wOmZ1bmN0aW9uKCl7aWYodGhpcy5maW5pc2gpe3RoaXMuZmluaXNoKCk7dGhpcy5maW5pc2g9bnVsbDt0aGlzLmNhbGxiYWNrPW51bGw7fX0sY29tcGxldGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpbmlzaCl7dmFyIGNhbGxiYWNrPXRoaXMuY2FsbGJhY2s7dGhpcy5zdG9wKCk7Y2FsbGJhY2suY2FsbCh0aGlzLmNvbnRleHQpO319fTtmdW5jdGlvbiBkZWJvdW5jZShkZWJvdW5jZXIsY2FsbGJhY2ssd2FpdCl7aWYoZGVib3VuY2VyKXtkZWJvdW5jZXIuc3RvcCgpO31lbHNle2RlYm91bmNlcj1uZXcgRGVib3VuY2VyKHRoaXMpO30KLWRlYm91bmNlci5nbyhjYWxsYmFjayx3YWl0KTtyZXR1cm4gZGVib3VuY2VyO30KLXJldHVybiBkZWJvdW5jZTt9KCk7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfc2V0dXBEZWJvdW5jZXJzOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2Vycz17fTt9LGRlYm91bmNlOmZ1bmN0aW9uKGpvYk5hbWUsY2FsbGJhY2ssd2FpdCl7cmV0dXJuIHRoaXMuX2RlYm91bmNlcnNbam9iTmFtZV09UG9seW1lci5EZWJvdW5jZS5jYWxsKHRoaXMsdGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXSxjYWxsYmFjayx3YWl0KTt9LGlzRGVib3VuY2VyQWN0aXZlOmZ1bmN0aW9uKGpvYk5hbWUpe3ZhciBkZWJvdW5jZXI9dGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXTtyZXR1cm4hIShkZWJvdW5jZXImJmRlYm91bmNlci5maW5pc2gpO30sZmx1c2hEZWJvdW5jZXI6ZnVuY3Rpb24oam9iTmFtZSl7dmFyIGRlYm91bmNlcj10aGlzLl9kZWJvdW5jZXJzW2pvYk5hbWVdO2lmKGRlYm91bmNlcil7ZGVib3VuY2VyLmNvbXBsZXRlKCk7fX0sY2FuY2VsRGVib3VuY2VyOmZ1bmN0aW9uKGpvYk5hbWUpe3ZhciBkZWJvdW5jZXI9dGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXTtpZihkZWJvdW5jZXIpe2RlYm91bmNlci5zdG9wKCk7fX19KTtQb2x5bWVyLkRvbU1vZHVsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkb20tbW9kdWxlJyk7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfcmVnaXN0ZXJGZWF0dXJlczpmdW5jdGlvbigpe3RoaXMuX3ByZXBJcygpO3RoaXMuX3ByZXBCZWhhdmlvcnMoKTt0aGlzLl9wcmVwQ29uc3RydWN0b3IoKTt0aGlzLl9wcmVwVGVtcGxhdGUoKTt0aGlzLl9wcmVwU2hhZHkoKTt0aGlzLl9wcmVwUHJvcGVydHlJbmZvKCk7fSxfcHJlcEJlaGF2aW9yOmZ1bmN0aW9uKGIpe3RoaXMuX2FkZEhvc3RBdHRyaWJ1dGVzKGIuaG9zdEF0dHJpYnV0ZXMpO30sX2luaXRGZWF0dXJlczpmdW5jdGlvbigpe3RoaXMuX3JlZ2lzdGVySG9zdCgpO2lmKHRoaXMuX3RlbXBsYXRlKXt0aGlzLl9wb29sQ29udGVudCgpO3RoaXMuX2JlZ2luSG9zdGluZygpO3RoaXMuX3N0YW1wVGVtcGxhdGUoKTt0aGlzLl9lbmRIb3N0aW5nKCk7fQotdGhpcy5fbWFyc2hhbEhvc3RBdHRyaWJ1dGVzKCk7dGhpcy5fc2V0dXBEZWJvdW5jZXJzKCk7dGhpcy5fbWFyc2hhbEJlaGF2aW9ycygpO3RoaXMuX3RyeVJlYWR5KCk7fSxfbWFyc2hhbEJlaGF2aW9yOmZ1bmN0aW9uKGIpe319KTsoZnVuY3Rpb24oKXtQb2x5bWVyLm5hcj1bXTt2YXIgZGlzYWJsZVVwZ3JhZGVFbmFibGVkPVBvbHltZXIuU2V0dGluZ3MuZGlzYWJsZVVwZ3JhZGVFbmFibGVkO1BvbHltZXIuQW5ub3RhdGlvbnM9e3BhcnNlQW5ub3RhdGlvbnM6ZnVuY3Rpb24odGVtcGxhdGUsc3RyaXBXaGl0ZVNwYWNlKXt2YXIgbGlzdD1bXTt2YXIgY29udGVudD10ZW1wbGF0ZS5fY29udGVudHx8dGVtcGxhdGUuY29udGVudDt0aGlzLl9wYXJzZU5vZGVBbm5vdGF0aW9ucyhjb250ZW50LGxpc3Qsc3RyaXBXaGl0ZVNwYWNlfHx0ZW1wbGF0ZS5oYXNBdHRyaWJ1dGUoJ3N0cmlwLXdoaXRlc3BhY2UnKSk7cmV0dXJuIGxpc3Q7fSxfcGFyc2VOb2RlQW5ub3RhdGlvbnM6ZnVuY3Rpb24obm9kZSxsaXN0LHN0cmlwV2hpdGVTcGFjZSl7cmV0dXJuIG5vZGUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLl9wYXJzZVRleHROb2RlQW5ub3RhdGlvbihub2RlLGxpc3QpOnRoaXMuX3BhcnNlRWxlbWVudEFubm90YXRpb25zKG5vZGUsbGlzdCxzdHJpcFdoaXRlU3BhY2UpO30sX2JpbmRpbmdSZWdleDpmdW5jdGlvbigpe3ZhciBJREVOVD0nKD86JysnW2EtekEtWl8kXVtcXHcuOiRcXC0qXSonKycpJzt2YXIgTlVNQkVSPScoPzonKydbLStdP1swLTldKlxcLj9bMC05XSsoPzpbZUVdWy0rXT9bMC05XSspPycrJyknO3ZhciBTUVVPVEVfU1RSSU5HPScoPzonKydcJyg/OlteXCdcXFxcXXxcXFxcLikqXCcnKycpJzt2YXIgRFFVT1RFX1NUUklORz0nKD86JysnIig/OlteIlxcXFxdfFxcXFwuKSoiJysnKSc7dmFyIFNUUklORz0nKD86JytTUVVPVEVfU1RSSU5HKyd8JytEUVVPVEVfU1RSSU5HKycpJzt2YXIgQVJHVU1FTlQ9Jyg/OicrSURFTlQrJ3wnK05VTUJFUisnfCcrU1RSSU5HKydcXHMqJysnKSc7dmFyIEFSR1VNRU5UUz0nKD86JytBUkdVTUVOVCsnKD86LFxccyonK0FSR1VNRU5UKycpKicrJyknO3ZhciBBUkdVTUVOVF9MSVNUPScoPzonKydcXChcXHMqJysnKD86JytBUkdVTUVOVFMrJz8nKycpJysnXFwpXFxzKicrJyknO3ZhciBCSU5ESU5HPScoJytJREVOVCsnXFxzKicrQVJHVU1FTlRfTElTVCsnPycrJyknO3ZhciBPUEVOX0JSQUNLRVQ9JyhcXFtcXFt8e3spJysnXFxzKic7dmFyIENMT1NFX0JSQUNLRVQ9Jyg/Ol1dfH19KSc7dmFyIE5FR0FURT0nKD86KCEpXFxzKik/Jzt2YXIgRVhQUkVTU0lPTj1PUEVOX0JSQUNLRVQrTkVHQVRFK0JJTkRJTkcrQ0xPU0VfQlJBQ0tFVDtyZXR1cm4gbmV3IFJlZ0V4cChFWFBSRVNTSU9OLCdnJyk7fSgpLF9wYXJzZUJpbmRpbmdzOmZ1bmN0aW9uKHRleHQpe3ZhciByZT10aGlzLl9iaW5kaW5nUmVnZXg7dmFyIHBhcnRzPVtdO3ZhciBsYXN0SW5kZXg9MDt2YXIgbTt3aGlsZSgobT1yZS5leGVjKHRleHQpKSE9PW51bGwpe2lmKG0uaW5kZXg+bGFzdEluZGV4KXtwYXJ0cy5wdXNoKHtsaXRlcmFsOnRleHQuc2xpY2UobGFzdEluZGV4LG0uaW5kZXgpfSk7fQotdmFyIG1vZGU9bVsxXVswXTt2YXIgbmVnYXRlPUJvb2xlYW4obVsyXSk7dmFyIHZhbHVlPW1bM10udHJpbSgpO3ZhciBjdXN0b21FdmVudCxub3RpZnlFdmVudCxjb2xvbjtpZihtb2RlPT0neycmJihjb2xvbj12YWx1ZS5pbmRleE9mKCc6OicpKT4wKXtub3RpZnlFdmVudD12YWx1ZS5zdWJzdHJpbmcoY29sb24rMik7dmFsdWU9dmFsdWUuc3Vic3RyaW5nKDAsY29sb24pO2N1c3RvbUV2ZW50PXRydWU7fQotcGFydHMucHVzaCh7Y29tcG91bmRJbmRleDpwYXJ0cy5sZW5ndGgsdmFsdWU6dmFsdWUsbW9kZTptb2RlLG5lZ2F0ZTpuZWdhdGUsZXZlbnQ6bm90aWZ5RXZlbnQsY3VzdG9tRXZlbnQ6Y3VzdG9tRXZlbnR9KTtsYXN0SW5kZXg9cmUubGFzdEluZGV4O30KLWlmKGxhc3RJbmRleCYmbGFzdEluZGV4PHRleHQubGVuZ3RoKXt2YXIgbGl0ZXJhbD10ZXh0LnN1YnN0cmluZyhsYXN0SW5kZXgpO2lmKGxpdGVyYWwpe3BhcnRzLnB1c2goe2xpdGVyYWw6bGl0ZXJhbH0pO319Ci1pZihwYXJ0cy5sZW5ndGgpe3JldHVybiBwYXJ0czt9fSxfbGl0ZXJhbEZyb21QYXJ0czpmdW5jdGlvbihwYXJ0cyl7dmFyIHM9Jyc7Zm9yKHZhciBpPTA7aTxwYXJ0cy5sZW5ndGg7aSsrKXt2YXIgbGl0ZXJhbD1wYXJ0c1tpXS5saXRlcmFsO3MrPWxpdGVyYWx8fCcnO30KLXJldHVybiBzO30sX3BhcnNlVGV4dE5vZGVBbm5vdGF0aW9uOmZ1bmN0aW9uKG5vZGUsbGlzdCl7dmFyIHBhcnRzPXRoaXMuX3BhcnNlQmluZGluZ3Mobm9kZS50ZXh0Q29udGVudCk7aWYocGFydHMpe25vZGUudGV4dENvbnRlbnQ9dGhpcy5fbGl0ZXJhbEZyb21QYXJ0cyhwYXJ0cyl8fCcgJzt2YXIgYW5ub3RlPXtiaW5kaW5nczpbe2tpbmQ6J3RleHQnLG5hbWU6J3RleHRDb250ZW50JyxwYXJ0czpwYXJ0cyxpc0NvbXBvdW5kOnBhcnRzLmxlbmd0aCE9PTF9XX07bGlzdC5wdXNoKGFubm90ZSk7cmV0dXJuIGFubm90ZTt9fSxfcGFyc2VFbGVtZW50QW5ub3RhdGlvbnM6ZnVuY3Rpb24oZWxlbWVudCxsaXN0LHN0cmlwV2hpdGVTcGFjZSl7dmFyIGFubm90ZT17YmluZGluZ3M6W10sZXZlbnRzOltdfTtpZihlbGVtZW50LmxvY2FsTmFtZT09PSdjb250ZW50Jyl7bGlzdC5faGFzQ29udGVudD10cnVlO30KLXRoaXMuX3BhcnNlQ2hpbGROb2Rlc0Fubm90YXRpb25zKGVsZW1lbnQsYW5ub3RlLGxpc3Qsc3RyaXBXaGl0ZVNwYWNlKTtpZihlbGVtZW50LmF0dHJpYnV0ZXMpe3RoaXMuX3BhcnNlTm9kZUF0dHJpYnV0ZUFubm90YXRpb25zKGVsZW1lbnQsYW5ub3RlLGxpc3QpO2lmKHRoaXMucHJlcEVsZW1lbnQpe3RoaXMucHJlcEVsZW1lbnQoZWxlbWVudCk7fX0KLWlmKGFubm90ZS5iaW5kaW5ncy5sZW5ndGh8fGFubm90ZS5ldmVudHMubGVuZ3RofHxhbm5vdGUuaWQpe2xpc3QucHVzaChhbm5vdGUpO30KLXJldHVybiBhbm5vdGU7fSxfcGFyc2VDaGlsZE5vZGVzQW5ub3RhdGlvbnM6ZnVuY3Rpb24ocm9vdCxhbm5vdGUsbGlzdCxzdHJpcFdoaXRlU3BhY2Upe2lmKHJvb3QuZmlyc3RDaGlsZCl7dmFyIG5vZGU9cm9vdC5maXJzdENoaWxkO3ZhciBpPTA7d2hpbGUobm9kZSl7dmFyIG5leHQ9bm9kZS5uZXh0U2libGluZztpZihub2RlLmxvY2FsTmFtZT09PSd0ZW1wbGF0ZScmJiFub2RlLmhhc0F0dHJpYnV0ZSgncHJlc2VydmUtY29udGVudCcpKXt0aGlzLl9wYXJzZVRlbXBsYXRlKG5vZGUsaSxsaXN0LGFubm90ZSxzdHJpcFdoaXRlU3BhY2UpO30KLWlmKG5vZGUubG9jYWxOYW1lPT0nc2xvdCcpe25vZGU9dGhpcy5fcmVwbGFjZVNsb3RXaXRoQ29udGVudChub2RlKTt9Ci1pZihub2RlLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe3ZhciBuPW5leHQ7d2hpbGUobiYmbi5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXtub2RlLnRleHRDb250ZW50Kz1uLnRleHRDb250ZW50O25leHQ9bi5uZXh0U2libGluZztyb290LnJlbW92ZUNoaWxkKG4pO249bmV4dDt9Ci1pZihzdHJpcFdoaXRlU3BhY2UmJiFub2RlLnRleHRDb250ZW50LnRyaW0oKSl7cm9vdC5yZW1vdmVDaGlsZChub2RlKTtpLS07fX0KLWlmKG5vZGUucGFyZW50Tm9kZSl7dmFyIGNoaWxkQW5ub3RhdGlvbj10aGlzLl9wYXJzZU5vZGVBbm5vdGF0aW9ucyhub2RlLGxpc3Qsc3RyaXBXaGl0ZVNwYWNlKTtpZihjaGlsZEFubm90YXRpb24pe2NoaWxkQW5ub3RhdGlvbi5wYXJlbnQ9YW5ub3RlO2NoaWxkQW5ub3RhdGlvbi5pbmRleD1pO319Ci1ub2RlPW5leHQ7aSsrO319fSxfcmVwbGFjZVNsb3RXaXRoQ29udGVudDpmdW5jdGlvbihzbG90KXt2YXIgY29udGVudD1zbG90Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY29udGVudCcpO3doaWxlKHNsb3QuZmlyc3RDaGlsZCl7Y29udGVudC5hcHBlbmRDaGlsZChzbG90LmZpcnN0Q2hpbGQpO30KLXZhciBhdHRycz1zbG90LmF0dHJpYnV0ZXM7Zm9yKHZhciBpPTA7aTxhdHRycy5sZW5ndGg7aSsrKXt2YXIgYXR0cj1hdHRyc1tpXTtjb250ZW50LnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsYXR0ci52YWx1ZSk7fQotdmFyIG5hbWU9c2xvdC5nZXRBdHRyaWJ1dGUoJ25hbWUnKTtpZihuYW1lKXtjb250ZW50LnNldEF0dHJpYnV0ZSgnc2VsZWN0JywnW3Nsb3Q9XCcnK25hbWUrJ1wnXScpO30KLXNsb3QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29udGVudCxzbG90KTtyZXR1cm4gY29udGVudDt9LF9wYXJzZVRlbXBsYXRlOmZ1bmN0aW9uKG5vZGUsaW5kZXgsbGlzdCxwYXJlbnQsc3RyaXBXaGl0ZVNwYWNlKXt2YXIgY29udGVudD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Y29udGVudC5fbm90ZXM9dGhpcy5wYXJzZUFubm90YXRpb25zKG5vZGUsc3RyaXBXaGl0ZVNwYWNlKTtjb250ZW50LmFwcGVuZENoaWxkKG5vZGUuY29udGVudCk7bGlzdC5wdXNoKHtiaW5kaW5nczpQb2x5bWVyLm5hcixldmVudHM6UG9seW1lci5uYXIsdGVtcGxhdGVDb250ZW50OmNvbnRlbnQscGFyZW50OnBhcmVudCxpbmRleDppbmRleH0pO30sX3BhcnNlTm9kZUF0dHJpYnV0ZUFubm90YXRpb25zOmZ1bmN0aW9uKG5vZGUsYW5ub3RhdGlvbil7dmFyIGF0dHJzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG5vZGUuYXR0cmlidXRlcyk7Zm9yKHZhciBpPWF0dHJzLmxlbmd0aC0xLGE7YT1hdHRyc1tpXTtpLS0pe3ZhciBuPWEubmFtZTt2YXIgdj1hLnZhbHVlO3ZhciBiO2lmKG4uc2xpY2UoMCwzKT09PSdvbi0nKXtub2RlLnJlbW92ZUF0dHJpYnV0ZShuKTthbm5vdGF0aW9uLmV2ZW50cy5wdXNoKHtuYW1lOm4uc2xpY2UoMyksdmFsdWU6dn0pO31lbHNlIGlmKGI9dGhpcy5fcGFyc2VOb2RlQXR0cmlidXRlQW5ub3RhdGlvbihub2RlLG4sdikpe2Fubm90YXRpb24uYmluZGluZ3MucHVzaChiKTt9ZWxzZSBpZihuPT09J2lkJyl7YW5ub3RhdGlvbi5pZD12O319fSxfcGFyc2VOb2RlQXR0cmlidXRlQW5ub3RhdGlvbjpmdW5jdGlvbihub2RlLG5hbWUsdmFsdWUpe3ZhciBwYXJ0cz10aGlzLl9wYXJzZUJpbmRpbmdzKHZhbHVlKTtpZihwYXJ0cyl7dmFyIG9yaWdOYW1lPW5hbWU7dmFyIGtpbmQ9J3Byb3BlcnR5JztpZihuYW1lW25hbWUubGVuZ3RoLTFdPT0nJCcpe25hbWU9bmFtZS5zbGljZSgwLC0xKTtraW5kPSdhdHRyaWJ1dGUnO30KLXZhciBsaXRlcmFsPXRoaXMuX2xpdGVyYWxGcm9tUGFydHMocGFydHMpO2lmKGxpdGVyYWwmJmtpbmQ9PSdhdHRyaWJ1dGUnKXtub2RlLnNldEF0dHJpYnV0ZShuYW1lLGxpdGVyYWwpO30KLWlmKG5vZGUubG9jYWxOYW1lPT09J2lucHV0JyYmb3JpZ05hbWU9PT0ndmFsdWUnKXtub2RlLnNldEF0dHJpYnV0ZShvcmlnTmFtZSwnJyk7fQotaWYoZGlzYWJsZVVwZ3JhZGVFbmFibGVkJiZvcmlnTmFtZT09PSdkaXNhYmxlLXVwZ3JhZGUkJyl7bm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwnJyk7fQotbm9kZS5yZW1vdmVBdHRyaWJ1dGUob3JpZ05hbWUpO3ZhciBwcm9wZXJ0eU5hbWU9UG9seW1lci5DYXNlTWFwLmRhc2hUb0NhbWVsQ2FzZShuYW1lKTtpZihraW5kPT09J3Byb3BlcnR5Jyl7bmFtZT1wcm9wZXJ0eU5hbWU7fQotcmV0dXJue2tpbmQ6a2luZCxuYW1lOm5hbWUscHJvcGVydHlOYW1lOnByb3BlcnR5TmFtZSxwYXJ0czpwYXJ0cyxsaXRlcmFsOmxpdGVyYWwsaXNDb21wb3VuZDpwYXJ0cy5sZW5ndGghPT0xfTt9fSxmaW5kQW5ub3RhdGVkTm9kZTpmdW5jdGlvbihyb290LGFubm90ZSl7dmFyIHBhcmVudD1hbm5vdGUucGFyZW50JiZQb2x5bWVyLkFubm90YXRpb25zLmZpbmRBbm5vdGF0ZWROb2RlKHJvb3QsYW5ub3RlLnBhcmVudCk7aWYocGFyZW50KXtmb3IodmFyIG49cGFyZW50LmZpcnN0Q2hpbGQsaT0wO247bj1uLm5leHRTaWJsaW5nKXtpZihhbm5vdGUuaW5kZXg9PT1pKyspe3JldHVybiBuO319fWVsc2V7cmV0dXJuIHJvb3Q7fX19O30oKSk7UG9seW1lci5QYXRoPXtyb290OmZ1bmN0aW9uKHBhdGgpe3ZhciBkb3RJbmRleD1wYXRoLmluZGV4T2YoJy4nKTtpZihkb3RJbmRleD09PS0xKXtyZXR1cm4gcGF0aDt9Ci1yZXR1cm4gcGF0aC5zbGljZSgwLGRvdEluZGV4KTt9LGlzRGVlcDpmdW5jdGlvbihwYXRoKXtyZXR1cm4gcGF0aC5pbmRleE9mKCcuJykhPT0tMTt9LGlzQW5jZXN0b3I6ZnVuY3Rpb24oYmFzZSxwYXRoKXtyZXR1cm4gYmFzZS5pbmRleE9mKHBhdGgrJy4nKT09PTA7fSxpc0Rlc2NlbmRhbnQ6ZnVuY3Rpb24oYmFzZSxwYXRoKXtyZXR1cm4gcGF0aC5pbmRleE9mKGJhc2UrJy4nKT09PTA7fSx0cmFuc2xhdGU6ZnVuY3Rpb24oYmFzZSxuZXdCYXNlLHBhdGgpe3JldHVybiBuZXdCYXNlK3BhdGguc2xpY2UoYmFzZS5sZW5ndGgpO30sbWF0Y2hlczpmdW5jdGlvbihiYXNlLHdpbGRjYXJkLHBhdGgpe3JldHVybiBiYXNlPT09cGF0aHx8dGhpcy5pc0FuY2VzdG9yKGJhc2UscGF0aCl8fEJvb2xlYW4od2lsZGNhcmQpJiZ0aGlzLmlzRGVzY2VuZGFudChiYXNlLHBhdGgpO319O1BvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSh7X3ByZXBBbm5vdGF0aW9uczpmdW5jdGlvbigpe2lmKCF0aGlzLl90ZW1wbGF0ZSl7dGhpcy5fbm90ZXM9W107fWVsc2V7dmFyIHNlbGY9dGhpcztQb2x5bWVyLkFubm90YXRpb25zLnByZXBFbGVtZW50PWZ1bmN0aW9uKGVsZW1lbnQpe3NlbGYuX3ByZXBFbGVtZW50KGVsZW1lbnQpO307aWYodGhpcy5fdGVtcGxhdGUuX2NvbnRlbnQmJnRoaXMuX3RlbXBsYXRlLl9jb250ZW50Ll9ub3Rlcyl7dGhpcy5fbm90ZXM9dGhpcy5fdGVtcGxhdGUuX2NvbnRlbnQuX25vdGVzO31lbHNle3RoaXMuX25vdGVzPVBvbHltZXIuQW5ub3RhdGlvbnMucGFyc2VBbm5vdGF0aW9ucyh0aGlzLl90ZW1wbGF0ZSk7dGhpcy5fcHJvY2Vzc0Fubm90YXRpb25zKHRoaXMuX25vdGVzKTt9Ci1Qb2x5bWVyLkFubm90YXRpb25zLnByZXBFbGVtZW50PW51bGw7fX0sX3Byb2Nlc3NBbm5vdGF0aW9uczpmdW5jdGlvbihub3Rlcyl7Zm9yKHZhciBpPTA7aTxub3Rlcy5sZW5ndGg7aSsrKXt2YXIgbm90ZT1ub3Rlc1tpXTtmb3IodmFyIGo9MDtqPG5vdGUuYmluZGluZ3MubGVuZ3RoO2orKyl7dmFyIGI9bm90ZS5iaW5kaW5nc1tqXTtmb3IodmFyIGs9MDtrPGIucGFydHMubGVuZ3RoO2srKyl7dmFyIHA9Yi5wYXJ0c1trXTtpZighcC5saXRlcmFsKXt2YXIgc2lnbmF0dXJlPXRoaXMuX3BhcnNlTWV0aG9kKHAudmFsdWUpO2lmKHNpZ25hdHVyZSl7cC5zaWduYXR1cmU9c2lnbmF0dXJlO31lbHNle3AubW9kZWw9UG9seW1lci5QYXRoLnJvb3QocC52YWx1ZSk7fX19fQotaWYobm90ZS50ZW1wbGF0ZUNvbnRlbnQpe3RoaXMuX3Byb2Nlc3NBbm5vdGF0aW9ucyhub3RlLnRlbXBsYXRlQ29udGVudC5fbm90ZXMpO3ZhciBwcD1ub3RlLnRlbXBsYXRlQ29udGVudC5fcGFyZW50UHJvcHM9dGhpcy5fZGlzY292ZXJUZW1wbGF0ZVBhcmVudFByb3BzKG5vdGUudGVtcGxhdGVDb250ZW50Ll9ub3Rlcyk7dmFyIGJpbmRpbmdzPVtdO2Zvcih2YXIgcHJvcCBpbiBwcCl7dmFyIG5hbWU9J19wYXJlbnRfJytwcm9wO2JpbmRpbmdzLnB1c2goe2luZGV4Om5vdGUuaW5kZXgsa2luZDoncHJvcGVydHknLG5hbWU6bmFtZSxwcm9wZXJ0eU5hbWU6bmFtZSxwYXJ0czpbe21vZGU6J3snLG1vZGVsOnByb3AsdmFsdWU6cHJvcH1dfSk7fQotbm90ZS5iaW5kaW5ncz1ub3RlLmJpbmRpbmdzLmNvbmNhdChiaW5kaW5ncyk7fX19LF9kaXNjb3ZlclRlbXBsYXRlUGFyZW50UHJvcHM6ZnVuY3Rpb24obm90ZXMpe3ZhciBwcD17fTtmb3IodmFyIGk9MCxuO2k8bm90ZXMubGVuZ3RoJiYobj1ub3Rlc1tpXSk7aSsrKXtmb3IodmFyIGo9MCxiJD1uLmJpbmRpbmdzLGI7ajxiJC5sZW5ndGgmJihiPWIkW2pdKTtqKyspe2Zvcih2YXIgaz0wLHAkPWIucGFydHMscDtrPHAkLmxlbmd0aCYmKHA9cCRba10pO2srKyl7aWYocC5zaWduYXR1cmUpe3ZhciBhcmdzPXAuc2lnbmF0dXJlLmFyZ3M7Zm9yKHZhciBraz0wO2trPGFyZ3MubGVuZ3RoO2trKyspe3ZhciBtb2RlbD1hcmdzW2trXS5tb2RlbDtpZihtb2RlbCl7cHBbbW9kZWxdPXRydWU7fX0KLWlmKHAuc2lnbmF0dXJlLmR5bmFtaWNGbil7cHBbcC5zaWduYXR1cmUubWV0aG9kXT10cnVlO319ZWxzZXtpZihwLm1vZGVsKXtwcFtwLm1vZGVsXT10cnVlO319fX0KLWlmKG4udGVtcGxhdGVDb250ZW50KXt2YXIgdHBwPW4udGVtcGxhdGVDb250ZW50Ll9wYXJlbnRQcm9wcztQb2x5bWVyLkJhc2UubWl4aW4ocHAsdHBwKTt9fQotcmV0dXJuIHBwO30sX3ByZXBFbGVtZW50OmZ1bmN0aW9uKGVsZW1lbnQpe1BvbHltZXIuUmVzb2x2ZVVybC5yZXNvbHZlQXR0cnMoZWxlbWVudCx0aGlzLl90ZW1wbGF0ZS5vd25lckRvY3VtZW50KTt9LF9maW5kQW5ub3RhdGVkTm9kZTpQb2x5bWVyLkFubm90YXRpb25zLmZpbmRBbm5vdGF0ZWROb2RlLF9tYXJzaGFsQW5ub3RhdGlvblJlZmVyZW5jZXM6ZnVuY3Rpb24oKXtpZih0aGlzLl90ZW1wbGF0ZSl7dGhpcy5fbWFyc2hhbElkTm9kZXMoKTt0aGlzLl9tYXJzaGFsQW5ub3RhdGVkTm9kZXMoKTt0aGlzLl9tYXJzaGFsQW5ub3RhdGVkTGlzdGVuZXJzKCk7fX0sX2NvbmZpZ3VyZUFubm90YXRpb25SZWZlcmVuY2VzOmZ1bmN0aW9uKCl7dmFyIG5vdGVzPXRoaXMuX25vdGVzO3ZhciBub2Rlcz10aGlzLl9ub2Rlcztmb3IodmFyIGk9MDtpPG5vdGVzLmxlbmd0aDtpKyspe3ZhciBub3RlPW5vdGVzW2ldO3ZhciBub2RlPW5vZGVzW2ldO3RoaXMuX2NvbmZpZ3VyZVRlbXBsYXRlQ29udGVudChub3RlLG5vZGUpO3RoaXMuX2NvbmZpZ3VyZUNvbXBvdW5kQmluZGluZ3Mobm90ZSxub2RlKTt9fSxfY29uZmlndXJlVGVtcGxhdGVDb250ZW50OmZ1bmN0aW9uKG5vdGUsbm9kZSl7aWYobm90ZS50ZW1wbGF0ZUNvbnRlbnQpe25vZGUuX2NvbnRlbnQ9bm90ZS50ZW1wbGF0ZUNvbnRlbnQ7fX0sX2NvbmZpZ3VyZUNvbXBvdW5kQmluZGluZ3M6ZnVuY3Rpb24obm90ZSxub2RlKXt2YXIgYmluZGluZ3M9bm90ZS5iaW5kaW5ncztmb3IodmFyIGk9MDtpPGJpbmRpbmdzLmxlbmd0aDtpKyspe3ZhciBiaW5kaW5nPWJpbmRpbmdzW2ldO2lmKGJpbmRpbmcuaXNDb21wb3VuZCl7dmFyIHN0b3JhZ2U9bm9kZS5fX2NvbXBvdW5kU3RvcmFnZV9ffHwobm9kZS5fX2NvbXBvdW5kU3RvcmFnZV9fPXt9KTt2YXIgcGFydHM9YmluZGluZy5wYXJ0czt2YXIgbGl0ZXJhbHM9bmV3IEFycmF5KHBhcnRzLmxlbmd0aCk7Zm9yKHZhciBqPTA7ajxwYXJ0cy5sZW5ndGg7aisrKXtsaXRlcmFsc1tqXT1wYXJ0c1tqXS5saXRlcmFsO30KLXZhciBuYW1lPWJpbmRpbmcubmFtZTtzdG9yYWdlW25hbWVdPWxpdGVyYWxzO2lmKGJpbmRpbmcubGl0ZXJhbCYmYmluZGluZy5raW5kPT0ncHJvcGVydHknKXtpZihub2RlLl9jb25maWdWYWx1ZSl7bm9kZS5fY29uZmlnVmFsdWUobmFtZSxiaW5kaW5nLmxpdGVyYWwpO31lbHNle25vZGVbbmFtZV09YmluZGluZy5saXRlcmFsO319fX19LF9tYXJzaGFsSWROb2RlczpmdW5jdGlvbigpe3RoaXMuJD17fTtmb3IodmFyIGk9MCxsPXRoaXMuX25vdGVzLmxlbmd0aCxhO2k8bCYmKGE9dGhpcy5fbm90ZXNbaV0pO2krKyl7aWYoYS5pZCl7dGhpcy4kW2EuaWRdPXRoaXMuX2ZpbmRBbm5vdGF0ZWROb2RlKHRoaXMucm9vdCxhKTt9fX0sX21hcnNoYWxBbm5vdGF0ZWROb2RlczpmdW5jdGlvbigpe2lmKHRoaXMuX25vdGVzJiZ0aGlzLl9ub3Rlcy5sZW5ndGgpe3ZhciByPW5ldyBBcnJheSh0aGlzLl9ub3Rlcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5fbm90ZXMubGVuZ3RoO2krKyl7cltpXT10aGlzLl9maW5kQW5ub3RhdGVkTm9kZSh0aGlzLnJvb3QsdGhpcy5fbm90ZXNbaV0pO30KLXRoaXMuX25vZGVzPXI7fX0sX21hcnNoYWxBbm5vdGF0ZWRMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGk9MCxsPXRoaXMuX25vdGVzLmxlbmd0aCxhO2k8bCYmKGE9dGhpcy5fbm90ZXNbaV0pO2krKyl7aWYoYS5ldmVudHMmJmEuZXZlbnRzLmxlbmd0aCl7dmFyIG5vZGU9dGhpcy5fZmluZEFubm90YXRlZE5vZGUodGhpcy5yb290LGEpO2Zvcih2YXIgaj0wLGUkPWEuZXZlbnRzLGU7ajxlJC5sZW5ndGgmJihlPWUkW2pdKTtqKyspe3RoaXMubGlzdGVuKG5vZGUsZS5uYW1lLGUudmFsdWUpO319fX19KTtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe2xpc3RlbmVyczp7fSxfbGlzdGVuTGlzdGVuZXJzOmZ1bmN0aW9uKGxpc3RlbmVycyl7dmFyIG5vZGUsbmFtZSxldmVudE5hbWU7Zm9yKGV2ZW50TmFtZSBpbiBsaXN0ZW5lcnMpe2lmKGV2ZW50TmFtZS5pbmRleE9mKCcuJyk8MCl7bm9kZT10aGlzO25hbWU9ZXZlbnROYW1lO31lbHNle25hbWU9ZXZlbnROYW1lLnNwbGl0KCcuJyk7bm9kZT10aGlzLiRbbmFtZVswXV07bmFtZT1uYW1lWzFdO30KLXRoaXMubGlzdGVuKG5vZGUsbmFtZSxsaXN0ZW5lcnNbZXZlbnROYW1lXSk7fX0sbGlzdGVuOmZ1bmN0aW9uKG5vZGUsZXZlbnROYW1lLG1ldGhvZE5hbWUpe3ZhciBoYW5kbGVyPXRoaXMuX3JlY2FsbEV2ZW50SGFuZGxlcih0aGlzLGV2ZW50TmFtZSxub2RlLG1ldGhvZE5hbWUpO2lmKCFoYW5kbGVyKXtoYW5kbGVyPXRoaXMuX2NyZWF0ZUV2ZW50SGFuZGxlcihub2RlLGV2ZW50TmFtZSxtZXRob2ROYW1lKTt9Ci1pZihoYW5kbGVyLl9saXN0ZW5pbmcpe3JldHVybjt9Ci10aGlzLl9saXN0ZW4obm9kZSxldmVudE5hbWUsaGFuZGxlcik7aGFuZGxlci5fbGlzdGVuaW5nPXRydWU7fSxfYm91bmRMaXN0ZW5lcktleTpmdW5jdGlvbihldmVudE5hbWUsbWV0aG9kTmFtZSl7cmV0dXJuIGV2ZW50TmFtZSsnOicrbWV0aG9kTmFtZTt9LF9yZWNvcmRFdmVudEhhbmRsZXI6ZnVuY3Rpb24oaG9zdCxldmVudE5hbWUsdGFyZ2V0LG1ldGhvZE5hbWUsaGFuZGxlcil7dmFyIGhibD1ob3N0Ll9fYm91bmRMaXN0ZW5lcnM7aWYoIWhibCl7aGJsPWhvc3QuX19ib3VuZExpc3RlbmVycz1uZXcgV2Vha01hcCgpO30KLXZhciBibD1oYmwuZ2V0KHRhcmdldCk7aWYoIWJsKXtibD17fTtpZighUG9seW1lci5TZXR0aW5ncy5pc0lFfHx0YXJnZXQhPXdpbmRvdyl7aGJsLnNldCh0YXJnZXQsYmwpO319Ci12YXIga2V5PXRoaXMuX2JvdW5kTGlzdGVuZXJLZXkoZXZlbnROYW1lLG1ldGhvZE5hbWUpO2JsW2tleV09aGFuZGxlcjt9LF9yZWNhbGxFdmVudEhhbmRsZXI6ZnVuY3Rpb24oaG9zdCxldmVudE5hbWUsdGFyZ2V0LG1ldGhvZE5hbWUpe3ZhciBoYmw9aG9zdC5fX2JvdW5kTGlzdGVuZXJzO2lmKCFoYmwpe3JldHVybjt9Ci12YXIgYmw9aGJsLmdldCh0YXJnZXQpO2lmKCFibCl7cmV0dXJuO30KLXZhciBrZXk9dGhpcy5fYm91bmRMaXN0ZW5lcktleShldmVudE5hbWUsbWV0aG9kTmFtZSk7cmV0dXJuIGJsW2tleV07fSxfY3JlYXRlRXZlbnRIYW5kbGVyOmZ1bmN0aW9uKG5vZGUsZXZlbnROYW1lLG1ldGhvZE5hbWUpe3ZhciBob3N0PXRoaXM7dmFyIGhhbmRsZXI9ZnVuY3Rpb24oZSl7aWYoaG9zdFttZXRob2ROYW1lXSl7aG9zdFttZXRob2ROYW1lXShlLGUuZGV0YWlsKTt9ZWxzZXtob3N0Ll93YXJuKGhvc3QuX2xvZ2YoJ19jcmVhdGVFdmVudEhhbmRsZXInLCdsaXN0ZW5lciBtZXRob2QgYCcrbWV0aG9kTmFtZSsnYCBub3QgZGVmaW5lZCcpKTt9fTtoYW5kbGVyLl9saXN0ZW5pbmc9ZmFsc2U7dGhpcy5fcmVjb3JkRXZlbnRIYW5kbGVyKGhvc3QsZXZlbnROYW1lLG5vZGUsbWV0aG9kTmFtZSxoYW5kbGVyKTtyZXR1cm4gaGFuZGxlcjt9LHVubGlzdGVuOmZ1bmN0aW9uKG5vZGUsZXZlbnROYW1lLG1ldGhvZE5hbWUpe3ZhciBoYW5kbGVyPXRoaXMuX3JlY2FsbEV2ZW50SGFuZGxlcih0aGlzLGV2ZW50TmFtZSxub2RlLG1ldGhvZE5hbWUpO2lmKGhhbmRsZXIpe3RoaXMuX3VubGlzdGVuKG5vZGUsZXZlbnROYW1lLGhhbmRsZXIpO2hhbmRsZXIuX2xpc3RlbmluZz1mYWxzZTt9fSxfbGlzdGVuOmZ1bmN0aW9uKG5vZGUsZXZlbnROYW1lLGhhbmRsZXIpe25vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsaGFuZGxlcik7fSxfdW5saXN0ZW46ZnVuY3Rpb24obm9kZSxldmVudE5hbWUsaGFuZGxlcil7bm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSxoYW5kbGVyKTt9fSk7KGZ1bmN0aW9uKCl7J3VzZSBzdHJpY3QnO3ZhciB3cmFwPVBvbHltZXIuRG9tQXBpLndyYXA7dmFyIEhBU19OQVRJVkVfVEE9dHlwZW9mIGRvY3VtZW50LmhlYWQuc3R5bGUudG91Y2hBY3Rpb249PT0nc3RyaW5nJzt2YXIgR0VTVFVSRV9LRVk9J19fcG9seW1lckdlc3R1cmVzJzt2YXIgSEFORExFRF9PQko9J19fcG9seW1lckdlc3R1cmVzSGFuZGxlZCc7dmFyIFRPVUNIX0FDVElPTj0nX19wb2x5bWVyR2VzdHVyZXNUb3VjaEFjdGlvbic7dmFyIFRBUF9ESVNUQU5DRT0yNTt2YXIgVFJBQ0tfRElTVEFOQ0U9NTt2YXIgVFJBQ0tfTEVOR1RIPTI7dmFyIE1PVVNFX1RJTUVPVVQ9MjUwMDt2YXIgTU9VU0VfRVZFTlRTPVsnbW91c2Vkb3duJywnbW91c2Vtb3ZlJywnbW91c2V1cCcsJ2NsaWNrJ107dmFyIE1PVVNFX1dISUNIX1RPX0JVVFRPTlM9WzAsMSw0LDJdO3ZhciBNT1VTRV9IQVNfQlVUVE9OUz1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IE1vdXNlRXZlbnQoJ3Rlc3QnLHtidXR0b25zOjF9KS5idXR0b25zPT09MTt9Y2F0Y2goZSl7cmV0dXJuIGZhbHNlO319KCk7ZnVuY3Rpb24gaXNNb3VzZUV2ZW50KG5hbWUpe3JldHVybiBNT1VTRV9FVkVOVFMuaW5kZXhPZihuYW1lKT4tMTt9Ci12YXIgU1VQUE9SVFNfUEFTU0lWRT1mYWxzZTsoZnVuY3Rpb24oKXt0cnl7dmFyIG9wdHM9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCdwYXNzaXZlJyx7Z2V0OmZ1bmN0aW9uKCl7U1VQUE9SVFNfUEFTU0lWRT10cnVlO319KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsbnVsbCxvcHRzKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsbnVsbCxvcHRzKTt9Y2F0Y2goZSl7fX0oKSk7ZnVuY3Rpb24gUEFTU0lWRV9UT1VDSCgpe2lmKEhBU19OQVRJVkVfVEEmJlNVUFBPUlRTX1BBU1NJVkUmJlBvbHltZXIuU2V0dGluZ3MucGFzc2l2ZVRvdWNoR2VzdHVyZXMpe3JldHVybntwYXNzaXZlOnRydWV9O319Ci12YXIgSVNfVE9VQ0hfT05MWT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OltvYV1kfGhvbmUpfEFuZHJvaWQvKTt2YXIgbW91c2VDYW5jZWxsZXI9ZnVuY3Rpb24obW91c2VFdmVudCl7dmFyIHNjPW1vdXNlRXZlbnQuc291cmNlQ2FwYWJpbGl0aWVzO2lmKHNjJiYhc2MuZmlyZXNUb3VjaEV2ZW50cyl7cmV0dXJuO30KLW1vdXNlRXZlbnRbSEFORExFRF9PQkpdPXtza2lwOnRydWV9O2lmKG1vdXNlRXZlbnQudHlwZT09PSdjbGljaycpe3ZhciBwYXRoPVBvbHltZXIuZG9tKG1vdXNlRXZlbnQpLnBhdGg7Zm9yKHZhciBpPTA7aTxwYXRoLmxlbmd0aDtpKyspe2lmKHBhdGhbaV09PT1QT0lOVEVSU1RBVEUubW91c2UudGFyZ2V0KXtyZXR1cm47fX0KLW1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTttb3VzZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO319O2Z1bmN0aW9uIHNldHVwVGVhcmRvd25Nb3VzZUNhbmNlbGxlcihzZXR1cCl7dmFyIGV2ZW50cz1JU19UT1VDSF9PTkxZP1snY2xpY2snXTpNT1VTRV9FVkVOVFM7Zm9yKHZhciBpPTAsZW47aTxldmVudHMubGVuZ3RoO2krKyl7ZW49ZXZlbnRzW2ldO2lmKHNldHVwKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGVuLG1vdXNlQ2FuY2VsbGVyLHRydWUpO31lbHNle2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZW4sbW91c2VDYW5jZWxsZXIsdHJ1ZSk7fX19Ci1mdW5jdGlvbiBpZ25vcmVNb3VzZShldil7aWYoIVBPSU5URVJTVEFURS5tb3VzZS5tb3VzZUlnbm9yZUpvYil7c2V0dXBUZWFyZG93bk1vdXNlQ2FuY2VsbGVyKHRydWUpO30KLXZhciB1bnNldD1mdW5jdGlvbigpe3NldHVwVGVhcmRvd25Nb3VzZUNhbmNlbGxlcigpO1BPSU5URVJTVEFURS5tb3VzZS50YXJnZXQ9bnVsbDtQT0lOVEVSU1RBVEUubW91c2UubW91c2VJZ25vcmVKb2I9bnVsbDt9O1BPSU5URVJTVEFURS5tb3VzZS50YXJnZXQ9UG9seW1lci5kb20oZXYpLnJvb3RUYXJnZXQ7UE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iPVBvbHltZXIuRGVib3VuY2UoUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iLHVuc2V0LE1PVVNFX1RJTUVPVVQpO30KLWZ1bmN0aW9uIGhhc0xlZnRNb3VzZUJ1dHRvbihldil7dmFyIHR5cGU9ZXYudHlwZTtpZighaXNNb3VzZUV2ZW50KHR5cGUpKXtyZXR1cm4gZmFsc2U7fQotaWYodHlwZT09PSdtb3VzZW1vdmUnKXt2YXIgYnV0dG9ucz1ldi5idXR0b25zPT09dW5kZWZpbmVkPzE6ZXYuYnV0dG9ucztpZihldiBpbnN0YW5jZW9mIHdpbmRvdy5Nb3VzZUV2ZW50JiYhTU9VU0VfSEFTX0JVVFRPTlMpe2J1dHRvbnM9TU9VU0VfV0hJQ0hfVE9fQlVUVE9OU1tldi53aGljaF18fDA7fQotcmV0dXJuIEJvb2xlYW4oYnV0dG9ucyYxKTt9ZWxzZXt2YXIgYnV0dG9uPWV2LmJ1dHRvbj09PXVuZGVmaW5lZD8wOmV2LmJ1dHRvbjtyZXR1cm4gYnV0dG9uPT09MDt9fQotZnVuY3Rpb24gaXNTeW50aGV0aWNDbGljayhldil7aWYoZXYudHlwZT09PSdjbGljaycpe2lmKGV2LmRldGFpbD09PTApe3JldHVybiB0cnVlO30KLXZhciB0PUdlc3R1cmVzLmZpbmRPcmlnaW5hbFRhcmdldChldik7dmFyIGJjcj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ZhciB4PWV2LnBhZ2VYLHk9ZXYucGFnZVk7cmV0dXJuISh4Pj1iY3IubGVmdCYmeDw9YmNyLnJpZ2h0JiYoeT49YmNyLnRvcCYmeTw9YmNyLmJvdHRvbSkpO30KLXJldHVybiBmYWxzZTt9Ci12YXIgUE9JTlRFUlNUQVRFPXttb3VzZTp7dGFyZ2V0Om51bGwsbW91c2VJZ25vcmVKb2I6bnVsbH0sdG91Y2g6e3g6MCx5OjAsaWQ6LTEsc2Nyb2xsRGVjaWRlZDpmYWxzZX19O2Z1bmN0aW9uIGZpcnN0VG91Y2hBY3Rpb24oZXYpe3ZhciBwYXRoPVBvbHltZXIuZG9tKGV2KS5wYXRoO3ZhciB0YT0nYXV0byc7Zm9yKHZhciBpPTAsbjtpPHBhdGgubGVuZ3RoO2krKyl7bj1wYXRoW2ldO2lmKG5bVE9VQ0hfQUNUSU9OXSl7dGE9bltUT1VDSF9BQ1RJT05dO2JyZWFrO319Ci1yZXR1cm4gdGE7fQotZnVuY3Rpb24gdHJhY2tEb2N1bWVudChzdGF0ZU9iaixtb3ZlZm4sdXBmbil7c3RhdGVPYmoubW92ZWZuPW1vdmVmbjtzdGF0ZU9iai51cGZuPXVwZm47ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyxtb3ZlZm4pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLHVwZm4pO30KLWZ1bmN0aW9uIHVudHJhY2tEb2N1bWVudChzdGF0ZU9iail7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyxzdGF0ZU9iai5tb3ZlZm4pO2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLHN0YXRlT2JqLnVwZm4pO3N0YXRlT2JqLm1vdmVmbj1udWxsO3N0YXRlT2JqLnVwZm49bnVsbDt9Ci1kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsaWdub3JlTW91c2UsU1VQUE9SVFNfUEFTU0lWRT97cGFzc2l2ZTp0cnVlfTpmYWxzZSk7dmFyIEdlc3R1cmVzPXtnZXN0dXJlczp7fSxyZWNvZ25pemVyczpbXSxkZWVwVGFyZ2V0RmluZDpmdW5jdGlvbih4LHkpe3ZhciBub2RlPWRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCx5KTt2YXIgbmV4dD1ub2RlO3doaWxlKG5leHQmJm5leHQuc2hhZG93Um9vdCl7bmV4dD1uZXh0LnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludCh4LHkpO2lmKG5leHQpe25vZGU9bmV4dDt9fQotcmV0dXJuIG5vZGU7fSxmaW5kT3JpZ2luYWxUYXJnZXQ6ZnVuY3Rpb24oZXYpe2lmKGV2LnBhdGgpe3JldHVybiBldi5wYXRoWzBdO30KLXJldHVybiBldi50YXJnZXQ7fSxoYW5kbGVOYXRpdmU6ZnVuY3Rpb24oZXYpe3ZhciBoYW5kbGVkO3ZhciB0eXBlPWV2LnR5cGU7dmFyIG5vZGU9d3JhcChldi5jdXJyZW50VGFyZ2V0KTt2YXIgZ29iaj1ub2RlW0dFU1RVUkVfS0VZXTtpZighZ29iail7cmV0dXJuO30KLXZhciBncz1nb2JqW3R5cGVdO2lmKCFncyl7cmV0dXJuO30KLWlmKCFldltIQU5ETEVEX09CSl0pe2V2W0hBTkRMRURfT0JKXT17fTtpZih0eXBlLnNsaWNlKDAsNSk9PT0ndG91Y2gnKXt2YXIgdD1ldi5jaGFuZ2VkVG91Y2hlc1swXTtpZih0eXBlPT09J3RvdWNoc3RhcnQnKXtpZihldi50b3VjaGVzLmxlbmd0aD09PTEpe1BPSU5URVJTVEFURS50b3VjaC5pZD10LmlkZW50aWZpZXI7fX0KLWlmKFBPSU5URVJTVEFURS50b3VjaC5pZCE9PXQuaWRlbnRpZmllcil7cmV0dXJuO30KLWlmKCFIQVNfTkFUSVZFX1RBKXtpZih0eXBlPT09J3RvdWNoc3RhcnQnfHx0eXBlPT09J3RvdWNobW92ZScpe0dlc3R1cmVzLmhhbmRsZVRvdWNoQWN0aW9uKGV2KTt9fX19Ci1oYW5kbGVkPWV2W0hBTkRMRURfT0JKXTtpZihoYW5kbGVkLnNraXApe3JldHVybjt9Ci12YXIgcmVjb2duaXplcnM9R2VzdHVyZXMucmVjb2duaXplcnM7Zm9yKHZhciBpPTAscjtpPHJlY29nbml6ZXJzLmxlbmd0aDtpKyspe3I9cmVjb2duaXplcnNbaV07aWYoZ3Nbci5uYW1lXSYmIWhhbmRsZWRbci5uYW1lXSl7aWYoci5mbG93JiZyLmZsb3cuc3RhcnQuaW5kZXhPZihldi50eXBlKT4tMSYmci5yZXNldCl7ci5yZXNldCgpO319fQotZm9yKGk9MCxyO2k8cmVjb2duaXplcnMubGVuZ3RoO2krKyl7cj1yZWNvZ25pemVyc1tpXTtpZihnc1tyLm5hbWVdJiYhaGFuZGxlZFtyLm5hbWVdKXtoYW5kbGVkW3IubmFtZV09dHJ1ZTtyW3R5cGVdKGV2KTt9fX0saGFuZGxlVG91Y2hBY3Rpb246ZnVuY3Rpb24oZXYpe3ZhciB0PWV2LmNoYW5nZWRUb3VjaGVzWzBdO3ZhciB0eXBlPWV2LnR5cGU7aWYodHlwZT09PSd0b3VjaHN0YXJ0Jyl7UE9JTlRFUlNUQVRFLnRvdWNoLng9dC5jbGllbnRYO1BPSU5URVJTVEFURS50b3VjaC55PXQuY2xpZW50WTtQT0lOVEVSU1RBVEUudG91Y2guc2Nyb2xsRGVjaWRlZD1mYWxzZTt9ZWxzZSBpZih0eXBlPT09J3RvdWNobW92ZScpe2lmKFBPSU5URVJTVEFURS50b3VjaC5zY3JvbGxEZWNpZGVkKXtyZXR1cm47fQotUE9JTlRFUlNUQVRFLnRvdWNoLnNjcm9sbERlY2lkZWQ9dHJ1ZTt2YXIgdGE9Zmlyc3RUb3VjaEFjdGlvbihldik7dmFyIHByZXZlbnQ9ZmFsc2U7dmFyIGR4PU1hdGguYWJzKFBPSU5URVJTVEFURS50b3VjaC54LXQuY2xpZW50WCk7dmFyIGR5PU1hdGguYWJzKFBPSU5URVJTVEFURS50b3VjaC55LXQuY2xpZW50WSk7aWYoIWV2LmNhbmNlbGFibGUpe31lbHNlIGlmKHRhPT09J25vbmUnKXtwcmV2ZW50PXRydWU7fWVsc2UgaWYodGE9PT0ncGFuLXgnKXtwcmV2ZW50PWR5PmR4O31lbHNlIGlmKHRhPT09J3Bhbi15Jyl7cHJldmVudD1keD5keTt9Ci1pZihwcmV2ZW50KXtldi5wcmV2ZW50RGVmYXVsdCgpO31lbHNle0dlc3R1cmVzLnByZXZlbnQoJ3RyYWNrJyk7fX19LGFkZDpmdW5jdGlvbihub2RlLGV2VHlwZSxoYW5kbGVyKXtub2RlPXdyYXAobm9kZSk7dmFyIHJlY29nbml6ZXI9dGhpcy5nZXN0dXJlc1tldlR5cGVdO3ZhciBkZXBzPXJlY29nbml6ZXIuZGVwczt2YXIgbmFtZT1yZWNvZ25pemVyLm5hbWU7dmFyIGdvYmo9bm9kZVtHRVNUVVJFX0tFWV07aWYoIWdvYmope25vZGVbR0VTVFVSRV9LRVldPWdvYmo9e307fQotZm9yKHZhciBpPTAsZGVwLGdkO2k8ZGVwcy5sZW5ndGg7aSsrKXtkZXA9ZGVwc1tpXTtpZihJU19UT1VDSF9PTkxZJiZpc01vdXNlRXZlbnQoZGVwKSYmZGVwIT09J2NsaWNrJyl7Y29udGludWU7fQotZ2Q9Z29ialtkZXBdO2lmKCFnZCl7Z29ialtkZXBdPWdkPXtfY291bnQ6MH07fQotaWYoZ2QuX2NvdW50PT09MCl7dmFyIG9wdGlvbnM9IWlzTW91c2VFdmVudChkZXApJiZQQVNTSVZFX1RPVUNIKCk7bm9kZS5hZGRFdmVudExpc3RlbmVyKGRlcCx0aGlzLmhhbmRsZU5hdGl2ZSxvcHRpb25zKTt9Ci1nZFtuYW1lXT0oZ2RbbmFtZV18fDApKzE7Z2QuX2NvdW50PShnZC5fY291bnR8fDApKzE7fQotbm9kZS5hZGRFdmVudExpc3RlbmVyKGV2VHlwZSxoYW5kbGVyKTtpZihyZWNvZ25pemVyLnRvdWNoQWN0aW9uKXt0aGlzLnNldFRvdWNoQWN0aW9uKG5vZGUscmVjb2duaXplci50b3VjaEFjdGlvbik7fX0scmVtb3ZlOmZ1bmN0aW9uKG5vZGUsZXZUeXBlLGhhbmRsZXIpe25vZGU9d3JhcChub2RlKTt2YXIgcmVjb2duaXplcj10aGlzLmdlc3R1cmVzW2V2VHlwZV07dmFyIGRlcHM9cmVjb2duaXplci5kZXBzO3ZhciBuYW1lPXJlY29nbml6ZXIubmFtZTt2YXIgZ29iaj1ub2RlW0dFU1RVUkVfS0VZXTtpZihnb2JqKXtmb3IodmFyIGk9MCxkZXAsZ2Q7aTxkZXBzLmxlbmd0aDtpKyspe2RlcD1kZXBzW2ldO2dkPWdvYmpbZGVwXTtpZihnZCYmZ2RbbmFtZV0pe2dkW25hbWVdPShnZFtuYW1lXXx8MSktMTtnZC5fY291bnQ9KGdkLl9jb3VudHx8MSktMTtpZihnZC5fY291bnQ9PT0wKXt2YXIgb3B0aW9ucz0haXNNb3VzZUV2ZW50KGRlcCkmJlBBU1NJVkVfVE9VQ0goKTtub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZGVwLHRoaXMuaGFuZGxlTmF0aXZlLG9wdGlvbnMpO319fX0KLW5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldlR5cGUsaGFuZGxlcik7fSxyZWdpc3RlcjpmdW5jdGlvbihyZWNvZyl7dGhpcy5yZWNvZ25pemVycy5wdXNoKHJlY29nKTtmb3IodmFyIGk9MDtpPHJlY29nLmVtaXRzLmxlbmd0aDtpKyspe3RoaXMuZ2VzdHVyZXNbcmVjb2cuZW1pdHNbaV1dPXJlY29nO319LGZpbmRSZWNvZ25pemVyQnlFdmVudDpmdW5jdGlvbihldk5hbWUpe2Zvcih2YXIgaT0wLHI7aTx0aGlzLnJlY29nbml6ZXJzLmxlbmd0aDtpKyspe3I9dGhpcy5yZWNvZ25pemVyc1tpXTtmb3IodmFyIGo9MCxuO2o8ci5lbWl0cy5sZW5ndGg7aisrKXtuPXIuZW1pdHNbal07aWYobj09PWV2TmFtZSl7cmV0dXJuIHI7fX19Ci1yZXR1cm4gbnVsbDt9LHNldFRvdWNoQWN0aW9uOmZ1bmN0aW9uKG5vZGUsdmFsdWUpe2lmKEhBU19OQVRJVkVfVEEpe25vZGUuc3R5bGUudG91Y2hBY3Rpb249dmFsdWU7fQotbm9kZVtUT1VDSF9BQ1RJT05dPXZhbHVlO30sZmlyZTpmdW5jdGlvbih0YXJnZXQsdHlwZSxkZXRhaWwpe3ZhciBldj1Qb2x5bWVyLkJhc2UuZmlyZSh0eXBlLGRldGFpbCx7bm9kZTp0YXJnZXQsYnViYmxlczp0cnVlLGNhbmNlbGFibGU6dHJ1ZX0pO2lmKGV2LmRlZmF1bHRQcmV2ZW50ZWQpe3ZhciBwcmV2ZW50ZXI9ZGV0YWlsLnByZXZlbnRlcnx8ZGV0YWlsLnNvdXJjZUV2ZW50O2lmKHByZXZlbnRlciYmcHJldmVudGVyLnByZXZlbnREZWZhdWx0KXtwcmV2ZW50ZXIucHJldmVudERlZmF1bHQoKTt9fX0scHJldmVudDpmdW5jdGlvbihldk5hbWUpe3ZhciByZWNvZ25pemVyPXRoaXMuZmluZFJlY29nbml6ZXJCeUV2ZW50KGV2TmFtZSk7aWYocmVjb2duaXplci5pbmZvKXtyZWNvZ25pemVyLmluZm8ucHJldmVudD10cnVlO319LHJlc2V0TW91c2VDYW5jZWxsZXI6ZnVuY3Rpb24oKXtpZihQT0lOVEVSU1RBVEUubW91c2UubW91c2VJZ25vcmVKb2Ipe1BPSU5URVJTVEFURS5tb3VzZS5tb3VzZUlnbm9yZUpvYi5jb21wbGV0ZSgpO319fTtHZXN0dXJlcy5yZWdpc3Rlcih7bmFtZTonZG93bnVwJyxkZXBzOlsnbW91c2Vkb3duJywndG91Y2hzdGFydCcsJ3RvdWNoZW5kJ10sZmxvdzp7c3RhcnQ6Wydtb3VzZWRvd24nLCd0b3VjaHN0YXJ0J10sZW5kOlsnbW91c2V1cCcsJ3RvdWNoZW5kJ119LGVtaXRzOlsnZG93bicsJ3VwJ10saW5mbzp7bW92ZWZuOm51bGwsdXBmbjpudWxsfSxyZXNldDpmdW5jdGlvbigpe3VudHJhY2tEb2N1bWVudCh0aGlzLmluZm8pO30sbW91c2Vkb3duOmZ1bmN0aW9uKGUpe2lmKCFoYXNMZWZ0TW91c2VCdXR0b24oZSkpe3JldHVybjt9Ci12YXIgdD1HZXN0dXJlcy5maW5kT3JpZ2luYWxUYXJnZXQoZSk7dmFyIHNlbGY9dGhpczt2YXIgbW92ZWZuPWZ1bmN0aW9uIG1vdmVmbihlKXtpZighaGFzTGVmdE1vdXNlQnV0dG9uKGUpKXtzZWxmLmZpcmUoJ3VwJyx0LGUpO3VudHJhY2tEb2N1bWVudChzZWxmLmluZm8pO319O3ZhciB1cGZuPWZ1bmN0aW9uIHVwZm4oZSl7aWYoaGFzTGVmdE1vdXNlQnV0dG9uKGUpKXtzZWxmLmZpcmUoJ3VwJyx0LGUpO30KLXVudHJhY2tEb2N1bWVudChzZWxmLmluZm8pO307dHJhY2tEb2N1bWVudCh0aGlzLmluZm8sbW92ZWZuLHVwZm4pO3RoaXMuZmlyZSgnZG93bicsdCxlKTt9LHRvdWNoc3RhcnQ6ZnVuY3Rpb24oZSl7dGhpcy5maXJlKCdkb3duJyxHZXN0dXJlcy5maW5kT3JpZ2luYWxUYXJnZXQoZSksZS5jaGFuZ2VkVG91Y2hlc1swXSxlKTt9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe3RoaXMuZmlyZSgndXAnLEdlc3R1cmVzLmZpbmRPcmlnaW5hbFRhcmdldChlKSxlLmNoYW5nZWRUb3VjaGVzWzBdLGUpO30sZmlyZTpmdW5jdGlvbih0eXBlLHRhcmdldCxldmVudCxwcmV2ZW50ZXIpe0dlc3R1cmVzLmZpcmUodGFyZ2V0LHR5cGUse3g6ZXZlbnQuY2xpZW50WCx5OmV2ZW50LmNsaWVudFksc291cmNlRXZlbnQ6ZXZlbnQscHJldmVudGVyOnByZXZlbnRlcixwcmV2ZW50OmZ1bmN0aW9uKGUpe3JldHVybiBHZXN0dXJlcy5wcmV2ZW50KGUpO319KTt9fSk7R2VzdHVyZXMucmVnaXN0ZXIoe25hbWU6J3RyYWNrJyx0b3VjaEFjdGlvbjonbm9uZScsZGVwczpbJ21vdXNlZG93bicsJ3RvdWNoc3RhcnQnLCd0b3VjaG1vdmUnLCd0b3VjaGVuZCddLGZsb3c6e3N0YXJ0OlsnbW91c2Vkb3duJywndG91Y2hzdGFydCddLGVuZDpbJ21vdXNldXAnLCd0b3VjaGVuZCddfSxlbWl0czpbJ3RyYWNrJ10saW5mbzp7eDowLHk6MCxzdGF0ZTonc3RhcnQnLHN0YXJ0ZWQ6ZmFsc2UsbW92ZXM6W10sYWRkTW92ZTpmdW5jdGlvbihtb3ZlKXtpZih0aGlzLm1vdmVzLmxlbmd0aD5UUkFDS19MRU5HVEgpe3RoaXMubW92ZXMuc2hpZnQoKTt9Ci10aGlzLm1vdmVzLnB1c2gobW92ZSk7fSxtb3ZlZm46bnVsbCx1cGZuOm51bGwscHJldmVudDpmYWxzZX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmluZm8uc3RhdGU9J3N0YXJ0Jzt0aGlzLmluZm8uc3RhcnRlZD1mYWxzZTt0aGlzLmluZm8ubW92ZXM9W107dGhpcy5pbmZvLng9MDt0aGlzLmluZm8ueT0wO3RoaXMuaW5mby5wcmV2ZW50PWZhbHNlO3VudHJhY2tEb2N1bWVudCh0aGlzLmluZm8pO30saGFzTW92ZWRFbm91Z2g6ZnVuY3Rpb24oeCx5KXtpZih0aGlzLmluZm8ucHJldmVudCl7cmV0dXJuIGZhbHNlO30KLWlmKHRoaXMuaW5mby5zdGFydGVkKXtyZXR1cm4gdHJ1ZTt9Ci12YXIgZHg9TWF0aC5hYnModGhpcy5pbmZvLngteCk7dmFyIGR5PU1hdGguYWJzKHRoaXMuaW5mby55LXkpO3JldHVybiBkeD49VFJBQ0tfRElTVEFOQ0V8fGR5Pj1UUkFDS19ESVNUQU5DRTt9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtpZighaGFzTGVmdE1vdXNlQnV0dG9uKGUpKXtyZXR1cm47fQotdmFyIHQ9R2VzdHVyZXMuZmluZE9yaWdpbmFsVGFyZ2V0KGUpO3ZhciBzZWxmPXRoaXM7dmFyIG1vdmVmbj1mdW5jdGlvbiBtb3ZlZm4oZSl7dmFyIHg9ZS5jbGllbnRYLHk9ZS5jbGllbnRZO2lmKHNlbGYuaGFzTW92ZWRFbm91Z2goeCx5KSl7c2VsZi5pbmZvLnN0YXRlPXNlbGYuaW5mby5zdGFydGVkP2UudHlwZT09PSdtb3VzZXVwJz8nZW5kJzondHJhY2snOidzdGFydCc7aWYoc2VsZi5pbmZvLnN0YXRlPT09J3N0YXJ0Jyl7R2VzdHVyZXMucHJldmVudCgndGFwJyk7fQotc2VsZi5pbmZvLmFkZE1vdmUoe3g6eCx5Onl9KTtpZighaGFzTGVmdE1vdXNlQnV0dG9uKGUpKXtzZWxmLmluZm8uc3RhdGU9J2VuZCc7dW50cmFja0RvY3VtZW50KHNlbGYuaW5mbyk7fQotc2VsZi5maXJlKHQsZSk7c2VsZi5pbmZvLnN0YXJ0ZWQ9dHJ1ZTt9fTt2YXIgdXBmbj1mdW5jdGlvbiB1cGZuKGUpe2lmKHNlbGYuaW5mby5zdGFydGVkKXttb3ZlZm4oZSk7fQotdW50cmFja0RvY3VtZW50KHNlbGYuaW5mbyk7fTt0cmFja0RvY3VtZW50KHRoaXMuaW5mbyxtb3ZlZm4sdXBmbik7dGhpcy5pbmZvLng9ZS5jbGllbnRYO3RoaXMuaW5mby55PWUuY2xpZW50WTt9LHRvdWNoc3RhcnQ6ZnVuY3Rpb24oZSl7dmFyIGN0PWUuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5pbmZvLng9Y3QuY2xpZW50WDt0aGlzLmluZm8ueT1jdC5jbGllbnRZO30sdG91Y2htb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PUdlc3R1cmVzLmZpbmRPcmlnaW5hbFRhcmdldChlKTt2YXIgY3Q9ZS5jaGFuZ2VkVG91Y2hlc1swXTt2YXIgeD1jdC5jbGllbnRYLHk9Y3QuY2xpZW50WTtpZih0aGlzLmhhc01vdmVkRW5vdWdoKHgseSkpe2lmKHRoaXMuaW5mby5zdGF0ZT09PSdzdGFydCcpe0dlc3R1cmVzLnByZXZlbnQoJ3RhcCcpO30KLXRoaXMuaW5mby5hZGRNb3ZlKHt4OngseTp5fSk7dGhpcy5maXJlKHQsY3QpO3RoaXMuaW5mby5zdGF0ZT0ndHJhY2snO3RoaXMuaW5mby5zdGFydGVkPXRydWU7fX0sdG91Y2hlbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9R2VzdHVyZXMuZmluZE9yaWdpbmFsVGFyZ2V0KGUpO3ZhciBjdD1lLmNoYW5nZWRUb3VjaGVzWzBdO2lmKHRoaXMuaW5mby5zdGFydGVkKXt0aGlzLmluZm8uc3RhdGU9J2VuZCc7dGhpcy5pbmZvLmFkZE1vdmUoe3g6Y3QuY2xpZW50WCx5OmN0LmNsaWVudFl9KTt0aGlzLmZpcmUodCxjdCxlKTt9fSxmaXJlOmZ1bmN0aW9uKHRhcmdldCx0b3VjaCxwcmV2ZW50ZXIpe3ZhciBzZWNvbmRsYXN0PXRoaXMuaW5mby5tb3Zlc1t0aGlzLmluZm8ubW92ZXMubGVuZ3RoLTJdO3ZhciBsYXN0bW92ZT10aGlzLmluZm8ubW92ZXNbdGhpcy5pbmZvLm1vdmVzLmxlbmd0aC0xXTt2YXIgZHg9bGFzdG1vdmUueC10aGlzLmluZm8ueDt2YXIgZHk9bGFzdG1vdmUueS10aGlzLmluZm8ueTt2YXIgZGR4LGRkeT0wO2lmKHNlY29uZGxhc3Qpe2RkeD1sYXN0bW92ZS54LXNlY29uZGxhc3QueDtkZHk9bGFzdG1vdmUueS1zZWNvbmRsYXN0Lnk7fQotcmV0dXJuIEdlc3R1cmVzLmZpcmUodGFyZ2V0LCd0cmFjaycse3N0YXRlOnRoaXMuaW5mby5zdGF0ZSx4OnRvdWNoLmNsaWVudFgseTp0b3VjaC5jbGllbnRZLGR4OmR4LGR5OmR5LGRkeDpkZHgsZGR5OmRkeSxzb3VyY2VFdmVudDp0b3VjaCxwcmV2ZW50ZXI6cHJldmVudGVyLGhvdmVyOmZ1bmN0aW9uKCl7cmV0dXJuIEdlc3R1cmVzLmRlZXBUYXJnZXRGaW5kKHRvdWNoLmNsaWVudFgsdG91Y2guY2xpZW50WSk7fX0pO319KTtHZXN0dXJlcy5yZWdpc3Rlcih7bmFtZTondGFwJyxkZXBzOlsnbW91c2Vkb3duJywnY2xpY2snLCd0b3VjaHN0YXJ0JywndG91Y2hlbmQnXSxmbG93OntzdGFydDpbJ21vdXNlZG93bicsJ3RvdWNoc3RhcnQnXSxlbmQ6WydjbGljaycsJ3RvdWNoZW5kJ119LGVtaXRzOlsndGFwJ10saW5mbzp7eDpOYU4seTpOYU4scHJldmVudDpmYWxzZX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmluZm8ueD1OYU47dGhpcy5pbmZvLnk9TmFOO3RoaXMuaW5mby5wcmV2ZW50PWZhbHNlO30sc2F2ZTpmdW5jdGlvbihlKXt0aGlzLmluZm8ueD1lLmNsaWVudFg7dGhpcy5pbmZvLnk9ZS5jbGllbnRZO30sbW91c2Vkb3duOmZ1bmN0aW9uKGUpe2lmKGhhc0xlZnRNb3VzZUJ1dHRvbihlKSl7dGhpcy5zYXZlKGUpO319LGNsaWNrOmZ1bmN0aW9uKGUpe2lmKGhhc0xlZnRNb3VzZUJ1dHRvbihlKSl7dGhpcy5mb3J3YXJkKGUpO319LHRvdWNoc3RhcnQ6ZnVuY3Rpb24oZSl7dGhpcy5zYXZlKGUuY2hhbmdlZFRvdWNoZXNbMF0sZSk7fSx0b3VjaGVuZDpmdW5jdGlvbihlKXt0aGlzLmZvcndhcmQoZS5jaGFuZ2VkVG91Y2hlc1swXSxlKTt9LGZvcndhcmQ6ZnVuY3Rpb24oZSxwcmV2ZW50ZXIpe3ZhciBkeD1NYXRoLmFicyhlLmNsaWVudFgtdGhpcy5pbmZvLngpO3ZhciBkeT1NYXRoLmFicyhlLmNsaWVudFktdGhpcy5pbmZvLnkpO3ZhciB0PUdlc3R1cmVzLmZpbmRPcmlnaW5hbFRhcmdldChlKTtpZihpc05hTihkeCl8fGlzTmFOKGR5KXx8ZHg8PVRBUF9ESVNUQU5DRSYmZHk8PVRBUF9ESVNUQU5DRXx8aXNTeW50aGV0aWNDbGljayhlKSl7aWYoIXRoaXMuaW5mby5wcmV2ZW50KXtHZXN0dXJlcy5maXJlKHQsJ3RhcCcse3g6ZS5jbGllbnRYLHk6ZS5jbGllbnRZLHNvdXJjZUV2ZW50OmUscHJldmVudGVyOnByZXZlbnRlcn0pO319fX0pO3ZhciBESVJFQ1RJT05fTUFQPXt4OidwYW4teCcseToncGFuLXknLG5vbmU6J25vbmUnLGFsbDonYXV0byd9O1BvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSh7X3NldHVwR2VzdHVyZXM6ZnVuY3Rpb24oKXt0aGlzLl9fcG9seW1lckdlc3R1cmVzPW51bGw7fSxfbGlzdGVuOmZ1bmN0aW9uKG5vZGUsZXZlbnROYW1lLGhhbmRsZXIpe2lmKEdlc3R1cmVzLmdlc3R1cmVzW2V2ZW50TmFtZV0pe0dlc3R1cmVzLmFkZChub2RlLGV2ZW50TmFtZSxoYW5kbGVyKTt9ZWxzZXtub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLGhhbmRsZXIpO319LF91bmxpc3RlbjpmdW5jdGlvbihub2RlLGV2ZW50TmFtZSxoYW5kbGVyKXtpZihHZXN0dXJlcy5nZXN0dXJlc1tldmVudE5hbWVdKXtHZXN0dXJlcy5yZW1vdmUobm9kZSxldmVudE5hbWUsaGFuZGxlcik7fWVsc2V7bm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSxoYW5kbGVyKTt9fSxzZXRTY3JvbGxEaXJlY3Rpb246ZnVuY3Rpb24oZGlyZWN0aW9uLG5vZGUpe25vZGU9bm9kZXx8dGhpcztHZXN0dXJlcy5zZXRUb3VjaEFjdGlvbihub2RlLERJUkVDVElPTl9NQVBbZGlyZWN0aW9uXXx8J2F1dG8nKTt9fSk7UG9seW1lci5HZXN0dXJlcz1HZXN0dXJlczt9KCkpOyhmdW5jdGlvbigpeyd1c2Ugc3RyaWN0JztQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoeyQkOmZ1bmN0aW9uKHNsY3RyKXtyZXR1cm4gUG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKHNsY3RyKTt9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKG5hbWUsYm9vbCxub2RlKXtub2RlPW5vZGV8fHRoaXM7aWYoYXJndW1lbnRzLmxlbmd0aD09MSl7Ym9vbD0hbm9kZS5jbGFzc0xpc3QuY29udGFpbnMobmFtZSk7fQotaWYoYm9vbCl7UG9seW1lci5kb20obm9kZSkuY2xhc3NMaXN0LmFkZChuYW1lKTt9ZWxzZXtQb2x5bWVyLmRvbShub2RlKS5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO319LHRvZ2dsZUF0dHJpYnV0ZTpmdW5jdGlvbihuYW1lLGJvb2wsbm9kZSl7bm9kZT1ub2RlfHx0aGlzO2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe2Jvb2w9IW5vZGUuaGFzQXR0cmlidXRlKG5hbWUpO30KLWlmKGJvb2wpe1BvbHltZXIuZG9tKG5vZGUpLnNldEF0dHJpYnV0ZShuYW1lLCcnKTt9ZWxzZXtQb2x5bWVyLmRvbShub2RlKS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7fX0sY2xhc3NGb2xsb3dzOmZ1bmN0aW9uKG5hbWUsdG9FbGVtZW50LGZyb21FbGVtZW50KXtpZihmcm9tRWxlbWVudCl7UG9seW1lci5kb20oZnJvbUVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUobmFtZSk7fQotaWYodG9FbGVtZW50KXtQb2x5bWVyLmRvbSh0b0VsZW1lbnQpLmNsYXNzTGlzdC5hZGQobmFtZSk7fX0sYXR0cmlidXRlRm9sbG93czpmdW5jdGlvbihuYW1lLHRvRWxlbWVudCxmcm9tRWxlbWVudCl7aWYoZnJvbUVsZW1lbnQpe1BvbHltZXIuZG9tKGZyb21FbGVtZW50KS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7fQotaWYodG9FbGVtZW50KXtQb2x5bWVyLmRvbSh0b0VsZW1lbnQpLnNldEF0dHJpYnV0ZShuYW1lLCcnKTt9fSxnZXRFZmZlY3RpdmVDaGlsZE5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIFBvbHltZXIuZG9tKHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTt9LGdldEVmZmVjdGl2ZUNoaWxkcmVuOmZ1bmN0aW9uKCl7dmFyIGxpc3Q9UG9seW1lci5kb20odGhpcykuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpO3JldHVybiBsaXN0LmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFO30pO30sZ2V0RWZmZWN0aXZlVGV4dENvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgY249dGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCk7dmFyIHRjPVtdO2Zvcih2YXIgaT0wLGM7Yz1jbltpXTtpKyspe2lmKGMubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSl7dGMucHVzaChQb2x5bWVyLmRvbShjKS50ZXh0Q29udGVudCk7fX0KLXJldHVybiB0Yy5qb2luKCcnKTt9LHF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW46ZnVuY3Rpb24oc2xjdHIpe3ZhciBlJD1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMoc2xjdHIpO3JldHVybiBlJCYmZSRbMF07fSxxdWVyeUFsbEVmZmVjdGl2ZUNoaWxkcmVuOmZ1bmN0aW9uKHNsY3RyKXtyZXR1cm4gUG9seW1lci5kb20odGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHNsY3RyKTt9LGdldENvbnRlbnRDaGlsZE5vZGVzOmZ1bmN0aW9uKHNsY3RyKXt2YXIgY29udGVudD1Qb2x5bWVyLmRvbSh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3Ioc2xjdHJ8fCdjb250ZW50Jyk7cmV0dXJuIGNvbnRlbnQ/UG9seW1lci5kb20oY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpOltdO30sZ2V0Q29udGVudENoaWxkcmVuOmZ1bmN0aW9uKHNsY3RyKXtyZXR1cm4gdGhpcy5nZXRDb250ZW50Q2hpbGROb2RlcyhzbGN0cikuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU7fSk7fSxmaXJlOmZ1bmN0aW9uKHR5cGUsZGV0YWlsLG9wdGlvbnMpe29wdGlvbnM9b3B0aW9uc3x8UG9seW1lci5ub2I7dmFyIG5vZGU9b3B0aW9ucy5ub2RlfHx0aGlzO2RldGFpbD1kZXRhaWw9PT1udWxsfHxkZXRhaWw9PT11bmRlZmluZWQ/e306ZGV0YWlsO3ZhciBidWJibGVzPW9wdGlvbnMuYnViYmxlcz09PXVuZGVmaW5lZD90cnVlOm9wdGlvbnMuYnViYmxlczt2YXIgY2FuY2VsYWJsZT1Cb29sZWFuKG9wdGlvbnMuY2FuY2VsYWJsZSk7dmFyIHVzZUNhY2hlPW9wdGlvbnMuX3VzZUNhY2hlO3ZhciBldmVudD10aGlzLl9nZXRFdmVudCh0eXBlLGJ1YmJsZXMsY2FuY2VsYWJsZSx1c2VDYWNoZSk7ZXZlbnQuZGV0YWlsPWRldGFpbDtpZih1c2VDYWNoZSl7dGhpcy5fX2V2ZW50Q2FjaGVbdHlwZV09bnVsbDt9Ci1ub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO2lmKHVzZUNhY2hlKXt0aGlzLl9fZXZlbnRDYWNoZVt0eXBlXT1ldmVudDt9Ci1yZXR1cm4gZXZlbnQ7fSxfX2V2ZW50Q2FjaGU6e30sX2dldEV2ZW50OmZ1bmN0aW9uKHR5cGUsYnViYmxlcyxjYW5jZWxhYmxlLHVzZUNhY2hlKXt2YXIgZXZlbnQ9dXNlQ2FjaGUmJnRoaXMuX19ldmVudENhY2hlW3R5cGVdO2lmKCFldmVudHx8KGV2ZW50LmJ1YmJsZXMhPWJ1YmJsZXN8fGV2ZW50LmNhbmNlbGFibGUhPWNhbmNlbGFibGUpKXtldmVudD1uZXcgRXZlbnQodHlwZSx7YnViYmxlczpCb29sZWFuKGJ1YmJsZXMpLGNhbmNlbGFibGU6Y2FuY2VsYWJsZX0pO30KLXJldHVybiBldmVudDt9LGFzeW5jOmZ1bmN0aW9uKGNhbGxiYWNrLHdhaXRUaW1lKXt2YXIgc2VsZj10aGlzO3JldHVybiBQb2x5bWVyLkFzeW5jLnJ1bihmdW5jdGlvbigpe2NhbGxiYWNrLmNhbGwoc2VsZik7fSx3YWl0VGltZSk7fSxjYW5jZWxBc3luYzpmdW5jdGlvbihoYW5kbGUpe1BvbHltZXIuQXN5bmMuY2FuY2VsKGhhbmRsZSk7fSxhcnJheURlbGV0ZTpmdW5jdGlvbihwYXRoLGl0ZW0pe3ZhciBpbmRleDtpZihBcnJheS5pc0FycmF5KHBhdGgpKXtpbmRleD1wYXRoLmluZGV4T2YoaXRlbSk7aWYoaW5kZXg+PTApe3JldHVybiBwYXRoLnNwbGljZShpbmRleCwxKTt9fWVsc2V7dmFyIGFycj10aGlzLl9nZXQocGF0aCk7aW5kZXg9YXJyLmluZGV4T2YoaXRlbSk7aWYoaW5kZXg+PTApe3JldHVybiB0aGlzLnNwbGljZShwYXRoLGluZGV4LDEpO319fSx0cmFuc2Zvcm06ZnVuY3Rpb24odHJhbnNmb3JtLG5vZGUpe25vZGU9bm9kZXx8dGhpcztub2RlLnN0eWxlLndlYmtpdFRyYW5zZm9ybT10cmFuc2Zvcm07bm9kZS5zdHlsZS50cmFuc2Zvcm09dHJhbnNmb3JtO30sdHJhbnNsYXRlM2Q6ZnVuY3Rpb24oeCx5LHosbm9kZSl7bm9kZT1ub2RlfHx0aGlzO3RoaXMudHJhbnNmb3JtKCd0cmFuc2xhdGUzZCgnK3grJywnK3krJywnK3orJyknLG5vZGUpO30saW1wb3J0SHJlZjpmdW5jdGlvbihocmVmLG9ubG9hZCxvbmVycm9yLG9wdEFzeW5jKXt2YXIgbGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7bGluay5yZWw9J2ltcG9ydCc7bGluay5ocmVmPWhyZWY7dmFyIGxpc3Q9UG9seW1lci5CYXNlLmltcG9ydEhyZWYuaW1wb3J0ZWQ9UG9seW1lci5CYXNlLmltcG9ydEhyZWYuaW1wb3J0ZWR8fHt9O3ZhciBjYWNoZWQ9bGlzdFtsaW5rLmhyZWZdO3ZhciBpbXBydD1jYWNoZWR8fGxpbms7dmFyIHNlbGY9dGhpczt2YXIgbG9hZExpc3RlbmVyPWZ1bmN0aW9uKGUpe2UudGFyZ2V0Ll9fZmlyZWRMb2FkPXRydWU7ZS50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsbG9hZExpc3RlbmVyKTtlLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsZXJyb3JMaXN0ZW5lcik7cmV0dXJuIG9ubG9hZC5jYWxsKHNlbGYsZSk7fTt2YXIgZXJyb3JMaXN0ZW5lcj1mdW5jdGlvbihlKXtlLnRhcmdldC5fX2ZpcmVkRXJyb3I9dHJ1ZTtlLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJyxsb2FkTGlzdGVuZXIpO2UudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJyxlcnJvckxpc3RlbmVyKTtyZXR1cm4gb25lcnJvci5jYWxsKHNlbGYsZSk7fTtpZihvbmxvYWQpe2ltcHJ0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLGxvYWRMaXN0ZW5lcik7fQotaWYob25lcnJvcil7aW1wcnQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLGVycm9yTGlzdGVuZXIpO30KLWlmKGNhY2hlZCl7aWYoY2FjaGVkLl9fZmlyZWRMb2FkKXtjYWNoZWQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2xvYWQnKSk7fQotaWYoY2FjaGVkLl9fZmlyZWRFcnJvcil7Y2FjaGVkLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKTt9fWVsc2V7bGlzdFtsaW5rLmhyZWZdPWxpbms7b3B0QXN5bmM9Qm9vbGVhbihvcHRBc3luYyk7aWYob3B0QXN5bmMpe2xpbmsuc2V0QXR0cmlidXRlKCdhc3luYycsJycpO30KLWRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7fQotcmV0dXJuIGltcHJ0O30sY3JlYXRlOmZ1bmN0aW9uKHRhZyxwcm9wcyl7dmFyIGVsdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7aWYocHJvcHMpe2Zvcih2YXIgbiBpbiBwcm9wcyl7ZWx0W25dPXByb3BzW25dO319Ci1yZXR1cm4gZWx0O30saXNMaWdodERlc2NlbmRhbnQ6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIHRoaXMhPT1ub2RlJiZ0aGlzLmNvbnRhaW5zKG5vZGUpJiZQb2x5bWVyLmRvbSh0aGlzKS5nZXRPd25lclJvb3QoKT09PVBvbHltZXIuZG9tKG5vZGUpLmdldE93bmVyUm9vdCgpO30saXNMb2NhbERlc2NlbmRhbnQ6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIHRoaXMucm9vdD09PVBvbHltZXIuZG9tKG5vZGUpLmdldE93bmVyUm9vdCgpO319KTtpZighUG9seW1lci5TZXR0aW5ncy51c2VOYXRpdmVDdXN0b21FbGVtZW50cyl7dmFyIGltcG9ydEhyZWY9UG9seW1lci5CYXNlLmltcG9ydEhyZWY7UG9seW1lci5CYXNlLmltcG9ydEhyZWY9ZnVuY3Rpb24oaHJlZixvbmxvYWQsb25lcnJvcixvcHRBc3luYyl7Q3VzdG9tRWxlbWVudHMucmVhZHk9ZmFsc2U7dmFyIGxvYWRGbj1mdW5jdGlvbihlKXtDdXN0b21FbGVtZW50cy51cGdyYWRlRG9jdW1lbnRUcmVlKGRvY3VtZW50KTtDdXN0b21FbGVtZW50cy5yZWFkeT10cnVlO2lmKG9ubG9hZCl7cmV0dXJuIG9ubG9hZC5jYWxsKHRoaXMsZSk7fX07cmV0dXJuIGltcG9ydEhyZWYuY2FsbCh0aGlzLGhyZWYsbG9hZEZuLG9uZXJyb3Isb3B0QXN5bmMpO307fX0oKSk7UG9seW1lci5CaW5kPXtwcmVwYXJlTW9kZWw6ZnVuY3Rpb24obW9kZWwpe1BvbHltZXIuQmFzZS5taXhpbihtb2RlbCx0aGlzLl9tb2RlbEFwaSk7fSxfbW9kZWxBcGk6e19ub3RpZnlDaGFuZ2U6ZnVuY3Rpb24oc291cmNlLGV2ZW50LHZhbHVlKXt2YWx1ZT12YWx1ZT09PXVuZGVmaW5lZD90aGlzW3NvdXJjZV06dmFsdWU7ZXZlbnQ9ZXZlbnR8fFBvbHltZXIuQ2FzZU1hcC5jYW1lbFRvRGFzaENhc2Uoc291cmNlKSsnLWNoYW5nZWQnO3RoaXMuZmlyZShldmVudCx7dmFsdWU6dmFsdWV9LHtidWJibGVzOmZhbHNlLGNhbmNlbGFibGU6ZmFsc2UsX3VzZUNhY2hlOlBvbHltZXIuU2V0dGluZ3MuZXZlbnREYXRhQ2FjaGV8fCFQb2x5bWVyLlNldHRpbmdzLmlzSUV9KTt9LF9wcm9wZXJ0eVNldHRlcjpmdW5jdGlvbihwcm9wZXJ0eSx2YWx1ZSxlZmZlY3RzLGZyb21BYm92ZSl7dmFyIG9sZD10aGlzLl9fZGF0YV9fW3Byb3BlcnR5XTtpZihvbGQhPT12YWx1ZSYmKG9sZD09PW9sZHx8dmFsdWU9PT12YWx1ZSkpe3RoaXMuX19kYXRhX19bcHJvcGVydHldPXZhbHVlO2lmKHR5cGVvZiB2YWx1ZT09J29iamVjdCcpe3RoaXMuX2NsZWFyUGF0aChwcm9wZXJ0eSk7fQotaWYodGhpcy5fcHJvcGVydHlDaGFuZ2VkKXt0aGlzLl9wcm9wZXJ0eUNoYW5nZWQocHJvcGVydHksdmFsdWUsb2xkKTt9Ci1pZihlZmZlY3RzKXt0aGlzLl9lZmZlY3RFZmZlY3RzKHByb3BlcnR5LHZhbHVlLGVmZmVjdHMsb2xkLGZyb21BYm92ZSk7fX0KLXJldHVybiBvbGQ7fSxfX3NldFByb3BlcnR5OmZ1bmN0aW9uKHByb3BlcnR5LHZhbHVlLHF1aWV0LG5vZGUpe25vZGU9bm9kZXx8dGhpczt2YXIgZWZmZWN0cz1ub2RlLl9wcm9wZXJ0eUVmZmVjdHMmJm5vZGUuX3Byb3BlcnR5RWZmZWN0c1twcm9wZXJ0eV07aWYoZWZmZWN0cyl7bm9kZS5fcHJvcGVydHlTZXR0ZXIocHJvcGVydHksdmFsdWUsZWZmZWN0cyxxdWlldCk7fWVsc2UgaWYobm9kZVtwcm9wZXJ0eV0hPT12YWx1ZSl7bm9kZVtwcm9wZXJ0eV09dmFsdWU7fX0sX2VmZmVjdEVmZmVjdHM6ZnVuY3Rpb24ocHJvcGVydHksdmFsdWUsZWZmZWN0cyxvbGQsZnJvbUFib3ZlKXtmb3IodmFyIGk9MCxsPWVmZmVjdHMubGVuZ3RoLGZ4O2k8bCYmKGZ4PWVmZmVjdHNbaV0pO2krKyl7ZnguZm4uY2FsbCh0aGlzLHByb3BlcnR5LHRoaXNbcHJvcGVydHldLGZ4LmVmZmVjdCxvbGQsZnJvbUFib3ZlKTt9fSxfY2xlYXJQYXRoOmZ1bmN0aW9uKHBhdGgpe2Zvcih2YXIgcHJvcCBpbiB0aGlzLl9fZGF0YV9fKXtpZihQb2x5bWVyLlBhdGguaXNEZXNjZW5kYW50KHBhdGgscHJvcCkpe3RoaXMuX19kYXRhX19bcHJvcF09dW5kZWZpbmVkO319fX0sZW5zdXJlUHJvcGVydHlFZmZlY3RzOmZ1bmN0aW9uKG1vZGVsLHByb3BlcnR5KXtpZighbW9kZWwuX3Byb3BlcnR5RWZmZWN0cyl7bW9kZWwuX3Byb3BlcnR5RWZmZWN0cz17fTt9Ci12YXIgZng9bW9kZWwuX3Byb3BlcnR5RWZmZWN0c1twcm9wZXJ0eV07aWYoIWZ4KXtmeD1tb2RlbC5fcHJvcGVydHlFZmZlY3RzW3Byb3BlcnR5XT1bXTt9Ci1yZXR1cm4gZng7fSxhZGRQcm9wZXJ0eUVmZmVjdDpmdW5jdGlvbihtb2RlbCxwcm9wZXJ0eSxraW5kLGVmZmVjdCl7dmFyIGZ4PXRoaXMuZW5zdXJlUHJvcGVydHlFZmZlY3RzKG1vZGVsLHByb3BlcnR5KTt2YXIgcHJvcEVmZmVjdD17a2luZDpraW5kLGVmZmVjdDplZmZlY3QsZm46UG9seW1lci5CaW5kWydfJytraW5kKydFZmZlY3QnXX07ZngucHVzaChwcm9wRWZmZWN0KTtyZXR1cm4gcHJvcEVmZmVjdDt9LGNyZWF0ZUJpbmRpbmdzOmZ1bmN0aW9uKG1vZGVsKXt2YXIgZngkPW1vZGVsLl9wcm9wZXJ0eUVmZmVjdHM7aWYoZngkKXtmb3IodmFyIG4gaW4gZngkKXt2YXIgZng9ZngkW25dO2Z4LnNvcnQodGhpcy5fc29ydFByb3BlcnR5RWZmZWN0cyk7dGhpcy5fY3JlYXRlQWNjZXNzb3JzKG1vZGVsLG4sZngpO319fSxfc29ydFByb3BlcnR5RWZmZWN0czpmdW5jdGlvbigpe3ZhciBFRkZFQ1RfT1JERVI9eydjb21wdXRlJzowLCdhbm5vdGF0aW9uJzoxLCdhbm5vdGF0ZWRDb21wdXRhdGlvbic6MiwncmVmbGVjdCc6Mywnbm90aWZ5Jzo0LCdvYnNlcnZlcic6NSwnY29tcGxleE9ic2VydmVyJzo2LCdmdW5jdGlvbic6N307cmV0dXJuIGZ1bmN0aW9uKGEsYil7cmV0dXJuIEVGRkVDVF9PUkRFUlthLmtpbmRdLUVGRkVDVF9PUkRFUltiLmtpbmRdO307fSgpLF9jcmVhdGVBY2Nlc3NvcnM6ZnVuY3Rpb24obW9kZWwscHJvcGVydHksZWZmZWN0cyl7dmFyIGRlZnVuPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2RhdGFfX1twcm9wZXJ0eV07fX07dmFyIHNldHRlcj1mdW5jdGlvbih2YWx1ZSl7dGhpcy5fcHJvcGVydHlTZXR0ZXIocHJvcGVydHksdmFsdWUsZWZmZWN0cyk7fTt2YXIgaW5mbz1tb2RlbC5nZXRQcm9wZXJ0eUluZm8mJm1vZGVsLmdldFByb3BlcnR5SW5mbyhwcm9wZXJ0eSk7aWYoaW5mbyYmaW5mby5yZWFkT25seSl7aWYoIWluZm8uY29tcHV0ZWQpe21vZGVsWydfc2V0Jyt0aGlzLnVwcGVyKHByb3BlcnR5KV09c2V0dGVyO319ZWxzZXtkZWZ1bi5zZXQ9c2V0dGVyO30KLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2RlbCxwcm9wZXJ0eSxkZWZ1bik7fSx1cHBlcjpmdW5jdGlvbihuYW1lKXtyZXR1cm4gbmFtZVswXS50b1VwcGVyQ2FzZSgpK25hbWUuc3Vic3RyaW5nKDEpO30sX2FkZEFubm90YXRlZExpc3RlbmVyOmZ1bmN0aW9uKG1vZGVsLGluZGV4LHByb3BlcnR5LHBhdGgsZXZlbnQsbmVnYXRlZCl7aWYoIW1vZGVsLl9iaW5kTGlzdGVuZXJzKXttb2RlbC5fYmluZExpc3RlbmVycz1bXTt9Ci12YXIgZm49dGhpcy5fbm90ZWRMaXN0ZW5lckZhY3RvcnkocHJvcGVydHkscGF0aCxQb2x5bWVyLlBhdGguaXNEZWVwKHBhdGgpLG5lZ2F0ZWQpO3ZhciBldmVudE5hbWU9ZXZlbnR8fFBvbHltZXIuQ2FzZU1hcC5jYW1lbFRvRGFzaENhc2UocHJvcGVydHkpKyctY2hhbmdlZCc7bW9kZWwuX2JpbmRMaXN0ZW5lcnMucHVzaCh7aW5kZXg6aW5kZXgscHJvcGVydHk6cHJvcGVydHkscGF0aDpwYXRoLGNoYW5nZWRGbjpmbixldmVudDpldmVudE5hbWV9KTt9LF9pc0V2ZW50Qm9ndXM6ZnVuY3Rpb24oZSx0YXJnZXQpe3JldHVybiBlLnBhdGgmJmUucGF0aFswXSE9PXRhcmdldDt9LF9ub3RlZExpc3RlbmVyRmFjdG9yeTpmdW5jdGlvbihwcm9wZXJ0eSxwYXRoLGlzU3RydWN0dXJlZCxuZWdhdGVkKXtyZXR1cm4gZnVuY3Rpb24odGFyZ2V0LHZhbHVlLHRhcmdldFBhdGgpe2lmKHRhcmdldFBhdGgpe3ZhciBuZXdQYXRoPVBvbHltZXIuUGF0aC50cmFuc2xhdGUocHJvcGVydHkscGF0aCx0YXJnZXRQYXRoKTt0aGlzLl9ub3RpZnlQYXRoKG5ld1BhdGgsdmFsdWUpO31lbHNle3ZhbHVlPXRhcmdldFtwcm9wZXJ0eV07aWYobmVnYXRlZCl7dmFsdWU9IXZhbHVlO30KLWlmKCFpc1N0cnVjdHVyZWQpe3RoaXNbcGF0aF09dmFsdWU7fWVsc2V7aWYodGhpcy5fX2RhdGFfX1twYXRoXSE9dmFsdWUpe3RoaXMuc2V0KHBhdGgsdmFsdWUpO319fX07fSxwcmVwYXJlSW5zdGFuY2U6ZnVuY3Rpb24oaW5zdCl7aW5zdC5fX2RhdGFfXz1PYmplY3QuY3JlYXRlKG51bGwpO30sc2V0dXBCaW5kTGlzdGVuZXJzOmZ1bmN0aW9uKGluc3Qpe3ZhciBiJD1pbnN0Ll9iaW5kTGlzdGVuZXJzO2Zvcih2YXIgaT0wLGw9YiQubGVuZ3RoLGluZm87aTxsJiYoaW5mbz1iJFtpXSk7aSsrKXt2YXIgbm9kZT1pbnN0Ll9ub2Rlc1tpbmZvLmluZGV4XTt0aGlzLl9hZGROb3RpZnlMaXN0ZW5lcihub2RlLGluc3QsaW5mby5ldmVudCxpbmZvLmNoYW5nZWRGbik7fX0sX2FkZE5vdGlmeUxpc3RlbmVyOmZ1bmN0aW9uKGVsZW1lbnQsY29udGV4dCxldmVudCxjaGFuZ2VkRm4pe2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCxmdW5jdGlvbihlKXtyZXR1cm4gY29udGV4dC5fbm90aWZ5TGlzdGVuZXIoY2hhbmdlZEZuLGUpO30pO319O1BvbHltZXIuQmFzZS5taXhpbihQb2x5bWVyLkJpbmQse19zaG91bGRBZGRMaXN0ZW5lcjpmdW5jdGlvbihlZmZlY3Qpe3JldHVybiBlZmZlY3QubmFtZSYmZWZmZWN0LmtpbmQhPSdhdHRyaWJ1dGUnJiZlZmZlY3Qua2luZCE9J3RleHQnJiYhZWZmZWN0LmlzQ29tcG91bmQmJmVmZmVjdC5wYXJ0c1swXS5tb2RlPT09J3snO30sX2Fubm90YXRpb25FZmZlY3Q6ZnVuY3Rpb24oc291cmNlLHZhbHVlLGVmZmVjdCl7aWYoc291cmNlIT1lZmZlY3QudmFsdWUpe3ZhbHVlPXRoaXMuX2dldChlZmZlY3QudmFsdWUpO3RoaXMuX19kYXRhX19bZWZmZWN0LnZhbHVlXT12YWx1ZTt9Ci10aGlzLl9hcHBseUVmZmVjdFZhbHVlKGVmZmVjdCx2YWx1ZSk7fSxfcmVmbGVjdEVmZmVjdDpmdW5jdGlvbihzb3VyY2UsdmFsdWUsZWZmZWN0KXt0aGlzLnJlZmxlY3RQcm9wZXJ0eVRvQXR0cmlidXRlKHNvdXJjZSxlZmZlY3QuYXR0cmlidXRlLHZhbHVlKTt9LF9ub3RpZnlFZmZlY3Q6ZnVuY3Rpb24oc291cmNlLHZhbHVlLGVmZmVjdCxvbGQsZnJvbUFib3ZlKXtpZighZnJvbUFib3ZlKXt0aGlzLl9ub3RpZnlDaGFuZ2Uoc291cmNlLGVmZmVjdC5ldmVudCx2YWx1ZSk7fX0sX2Z1bmN0aW9uRWZmZWN0OmZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSxmbixvbGQsZnJvbUFib3ZlKXtmbi5jYWxsKHRoaXMsc291cmNlLHZhbHVlLG9sZCxmcm9tQWJvdmUpO30sX29ic2VydmVyRWZmZWN0OmZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSxlZmZlY3Qsb2xkKXt2YXIgZm49dGhpc1tlZmZlY3QubWV0aG9kXTtpZihmbil7Zm4uY2FsbCh0aGlzLHZhbHVlLG9sZCk7fWVsc2V7dGhpcy5fd2Fybih0aGlzLl9sb2dmKCdfb2JzZXJ2ZXJFZmZlY3QnLCdvYnNlcnZlciBtZXRob2QgYCcrZWZmZWN0Lm1ldGhvZCsnYCBub3QgZGVmaW5lZCcpKTt9fSxfY29tcGxleE9ic2VydmVyRWZmZWN0OmZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSxlZmZlY3Qpe3ZhciBmbj10aGlzW2VmZmVjdC5tZXRob2RdO2lmKGZuKXt2YXIgYXJncz1Qb2x5bWVyLkJpbmQuX21hcnNoYWxBcmdzKHRoaXMuX19kYXRhX18sZWZmZWN0LHNvdXJjZSx2YWx1ZSk7aWYoYXJncyl7Zm4uYXBwbHkodGhpcyxhcmdzKTt9fWVsc2UgaWYoZWZmZWN0LmR5bmFtaWNGbil7fWVsc2V7dGhpcy5fd2Fybih0aGlzLl9sb2dmKCdfY29tcGxleE9ic2VydmVyRWZmZWN0Jywnb2JzZXJ2ZXIgbWV0aG9kIGAnK2VmZmVjdC5tZXRob2QrJ2Agbm90IGRlZmluZWQnKSk7fX0sX2NvbXB1dGVFZmZlY3Q6ZnVuY3Rpb24oc291cmNlLHZhbHVlLGVmZmVjdCl7dmFyIGZuPXRoaXNbZWZmZWN0Lm1ldGhvZF07aWYoZm4pe3ZhciBhcmdzPVBvbHltZXIuQmluZC5fbWFyc2hhbEFyZ3ModGhpcy5fX2RhdGFfXyxlZmZlY3Qsc291cmNlLHZhbHVlKTtpZihhcmdzKXt2YXIgY29tcHV0ZWR2YWx1ZT1mbi5hcHBseSh0aGlzLGFyZ3MpO3RoaXMuX19zZXRQcm9wZXJ0eShlZmZlY3QubmFtZSxjb21wdXRlZHZhbHVlKTt9fWVsc2UgaWYoZWZmZWN0LmR5bmFtaWNGbil7fWVsc2V7dGhpcy5fd2Fybih0aGlzLl9sb2dmKCdfY29tcHV0ZUVmZmVjdCcsJ2NvbXB1dGUgbWV0aG9kIGAnK2VmZmVjdC5tZXRob2QrJ2Agbm90IGRlZmluZWQnKSk7fX0sX2Fubm90YXRlZENvbXB1dGF0aW9uRWZmZWN0OmZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSxlZmZlY3Qpe3ZhciBjb21wdXRlZEhvc3Q9dGhpcy5fcm9vdERhdGFIb3N0fHx0aGlzO3ZhciBmbj1jb21wdXRlZEhvc3RbZWZmZWN0Lm1ldGhvZF07aWYoZm4pe3ZhciBhcmdzPVBvbHltZXIuQmluZC5fbWFyc2hhbEFyZ3ModGhpcy5fX2RhdGFfXyxlZmZlY3Qsc291cmNlLHZhbHVlKTtpZihhcmdzKXt2YXIgY29tcHV0ZWR2YWx1ZT1mbi5hcHBseShjb21wdXRlZEhvc3QsYXJncyk7dGhpcy5fYXBwbHlFZmZlY3RWYWx1ZShlZmZlY3QsY29tcHV0ZWR2YWx1ZSk7fX1lbHNlIGlmKGVmZmVjdC5keW5hbWljRm4pe31lbHNle2NvbXB1dGVkSG9zdC5fd2Fybihjb21wdXRlZEhvc3QuX2xvZ2YoJ19hbm5vdGF0ZWRDb21wdXRhdGlvbkVmZmVjdCcsJ2NvbXB1dGUgbWV0aG9kIGAnK2VmZmVjdC5tZXRob2QrJ2Agbm90IGRlZmluZWQnKSk7fX0sX21hcnNoYWxBcmdzOmZ1bmN0aW9uKG1vZGVsLGVmZmVjdCxwYXRoLHZhbHVlKXt2YXIgdmFsdWVzPVtdO3ZhciBhcmdzPWVmZmVjdC5hcmdzO3ZhciBiYWlsb3V0RWFybHk9YXJncy5sZW5ndGg+MXx8ZWZmZWN0LmR5bmFtaWNGbjtmb3IodmFyIGk9MCxsPWFyZ3MubGVuZ3RoO2k8bDtpKyspe3ZhciBhcmc9YXJnc1tpXTt2YXIgbmFtZT1hcmcubmFtZTt2YXIgdjtpZihhcmcubGl0ZXJhbCl7dj1hcmcudmFsdWU7fWVsc2UgaWYocGF0aD09PW5hbWUpe3Y9dmFsdWU7fWVsc2V7dj1tb2RlbFtuYW1lXTtpZih2PT09dW5kZWZpbmVkJiZhcmcuc3RydWN0dXJlZCl7dj1Qb2x5bWVyLkJhc2UuX2dldChuYW1lLG1vZGVsKTt9fQotaWYoYmFpbG91dEVhcmx5JiZ2PT09dW5kZWZpbmVkKXtyZXR1cm47fQotaWYoYXJnLndpbGRjYXJkKXt2YXIgbWF0Y2hlcz1Qb2x5bWVyLlBhdGguaXNBbmNlc3RvcihwYXRoLG5hbWUpO3ZhbHVlc1tpXT17cGF0aDptYXRjaGVzP3BhdGg6bmFtZSx2YWx1ZTptYXRjaGVzP3ZhbHVlOnYsYmFzZTp2fTt9ZWxzZXt2YWx1ZXNbaV09djt9fQotcmV0dXJuIHZhbHVlczt9fSk7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfYWRkUHJvcGVydHlFZmZlY3Q6ZnVuY3Rpb24ocHJvcGVydHksa2luZCxlZmZlY3Qpe3ZhciBwcm9wPVBvbHltZXIuQmluZC5hZGRQcm9wZXJ0eUVmZmVjdCh0aGlzLHByb3BlcnR5LGtpbmQsZWZmZWN0KTtwcm9wLnBhdGhGbj10aGlzWydfJytwcm9wLmtpbmQrJ1BhdGhFZmZlY3QnXTt9LF9wcmVwRWZmZWN0czpmdW5jdGlvbigpe1BvbHltZXIuQmluZC5wcmVwYXJlTW9kZWwodGhpcyk7dGhpcy5fYWRkQW5ub3RhdGlvbkVmZmVjdHModGhpcy5fbm90ZXMpO30sX3ByZXBCaW5kaW5nczpmdW5jdGlvbigpe1BvbHltZXIuQmluZC5jcmVhdGVCaW5kaW5ncyh0aGlzKTt9LF9hZGRQcm9wZXJ0eUVmZmVjdHM6ZnVuY3Rpb24ocHJvcGVydGllcyl7aWYocHJvcGVydGllcyl7Zm9yKHZhciBwIGluIHByb3BlcnRpZXMpe3ZhciBwcm9wPXByb3BlcnRpZXNbcF07aWYocHJvcC5vYnNlcnZlcil7dGhpcy5fYWRkT2JzZXJ2ZXJFZmZlY3QocCxwcm9wLm9ic2VydmVyKTt9Ci1pZihwcm9wLmNvbXB1dGVkKXtwcm9wLnJlYWRPbmx5PXRydWU7dGhpcy5fYWRkQ29tcHV0ZWRFZmZlY3QocCxwcm9wLmNvbXB1dGVkKTt9Ci1pZihwcm9wLm5vdGlmeSl7dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QocCwnbm90aWZ5Jyx7ZXZlbnQ6UG9seW1lci5DYXNlTWFwLmNhbWVsVG9EYXNoQ2FzZShwKSsnLWNoYW5nZWQnfSk7fQotaWYocHJvcC5yZWZsZWN0VG9BdHRyaWJ1dGUpe3ZhciBhdHRyPVBvbHltZXIuQ2FzZU1hcC5jYW1lbFRvRGFzaENhc2UocCk7aWYoYXR0clswXT09PSctJyl7dGhpcy5fd2Fybih0aGlzLl9sb2dmKCdfYWRkUHJvcGVydHlFZmZlY3RzJywnUHJvcGVydHkgJytwKycgY2Fubm90IGJlIHJlZmxlY3RlZCB0byBhdHRyaWJ1dGUgJythdHRyKycgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgc3RhcnRpbmcgYXR0cmlidXRlIG5hbWUuIFVzZSBhIGxvd2VyY2FzZSBmaXJzdCBsZXR0ZXIgZm9yIHRoZSBwcm9wZXJ0eSBpbnN0ZWFkLicpKTt9ZWxzZXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChwLCdyZWZsZWN0Jyx7YXR0cmlidXRlOmF0dHJ9KTt9fQotaWYocHJvcC5yZWFkT25seSl7UG9seW1lci5CaW5kLmVuc3VyZVByb3BlcnR5RWZmZWN0cyh0aGlzLHApO319fX0sX2FkZENvbXB1dGVkRWZmZWN0OmZ1bmN0aW9uKG5hbWUsZXhwcmVzc2lvbil7dmFyIHNpZz10aGlzLl9wYXJzZU1ldGhvZChleHByZXNzaW9uKTt2YXIgZHluYW1pY0ZuPXNpZy5keW5hbWljRm47Zm9yKHZhciBpPTAsYXJnO2k8c2lnLmFyZ3MubGVuZ3RoJiYoYXJnPXNpZy5hcmdzW2ldKTtpKyspe3RoaXMuX2FkZFByb3BlcnR5RWZmZWN0KGFyZy5tb2RlbCwnY29tcHV0ZScse21ldGhvZDpzaWcubWV0aG9kLGFyZ3M6c2lnLmFyZ3MsdHJpZ2dlcjphcmcsbmFtZTpuYW1lLGR5bmFtaWNGbjpkeW5hbWljRm59KTt9Ci1pZihkeW5hbWljRm4pe3RoaXMuX2FkZFByb3BlcnR5RWZmZWN0KHNpZy5tZXRob2QsJ2NvbXB1dGUnLHttZXRob2Q6c2lnLm1ldGhvZCxhcmdzOnNpZy5hcmdzLHRyaWdnZXI6bnVsbCxuYW1lOm5hbWUsZHluYW1pY0ZuOmR5bmFtaWNGbn0pO319LF9hZGRPYnNlcnZlckVmZmVjdDpmdW5jdGlvbihwcm9wZXJ0eSxvYnNlcnZlcil7dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QocHJvcGVydHksJ29ic2VydmVyJyx7bWV0aG9kOm9ic2VydmVyLHByb3BlcnR5OnByb3BlcnR5fSk7fSxfYWRkQ29tcGxleE9ic2VydmVyRWZmZWN0czpmdW5jdGlvbihvYnNlcnZlcnMpe2lmKG9ic2VydmVycyl7Zm9yKHZhciBpPTAsbztpPG9ic2VydmVycy5sZW5ndGgmJihvPW9ic2VydmVyc1tpXSk7aSsrKXt0aGlzLl9hZGRDb21wbGV4T2JzZXJ2ZXJFZmZlY3Qobyk7fX19LF9hZGRDb21wbGV4T2JzZXJ2ZXJFZmZlY3Q6ZnVuY3Rpb24ob2JzZXJ2ZXIpe3ZhciBzaWc9dGhpcy5fcGFyc2VNZXRob2Qob2JzZXJ2ZXIpO2lmKCFzaWcpe3Rocm93IG5ldyBFcnJvcignTWFsZm9ybWVkIG9ic2VydmVyIGV4cHJlc3Npb24gXCcnK29ic2VydmVyKydcJycpO30KLXZhciBkeW5hbWljRm49c2lnLmR5bmFtaWNGbjtmb3IodmFyIGk9MCxhcmc7aTxzaWcuYXJncy5sZW5ndGgmJihhcmc9c2lnLmFyZ3NbaV0pO2krKyl7dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoYXJnLm1vZGVsLCdjb21wbGV4T2JzZXJ2ZXInLHttZXRob2Q6c2lnLm1ldGhvZCxhcmdzOnNpZy5hcmdzLHRyaWdnZXI6YXJnLGR5bmFtaWNGbjpkeW5hbWljRm59KTt9Ci1pZihkeW5hbWljRm4pe3RoaXMuX2FkZFByb3BlcnR5RWZmZWN0KHNpZy5tZXRob2QsJ2NvbXBsZXhPYnNlcnZlcicse21ldGhvZDpzaWcubWV0aG9kLGFyZ3M6c2lnLmFyZ3MsdHJpZ2dlcjpudWxsLGR5bmFtaWNGbjpkeW5hbWljRm59KTt9fSxfYWRkQW5ub3RhdGlvbkVmZmVjdHM6ZnVuY3Rpb24obm90ZXMpe2Zvcih2YXIgaT0wLG5vdGU7aTxub3Rlcy5sZW5ndGgmJihub3RlPW5vdGVzW2ldKTtpKyspe3ZhciBiJD1ub3RlLmJpbmRpbmdzO2Zvcih2YXIgaj0wLGJpbmRpbmc7ajxiJC5sZW5ndGgmJihiaW5kaW5nPWIkW2pdKTtqKyspe3RoaXMuX2FkZEFubm90YXRpb25FZmZlY3QoYmluZGluZyxpKTt9fX0sX2FkZEFubm90YXRpb25FZmZlY3Q6ZnVuY3Rpb24obm90ZSxpbmRleCl7aWYoUG9seW1lci5CaW5kLl9zaG91bGRBZGRMaXN0ZW5lcihub3RlKSl7UG9seW1lci5CaW5kLl9hZGRBbm5vdGF0ZWRMaXN0ZW5lcih0aGlzLGluZGV4LG5vdGUubmFtZSxub3RlLnBhcnRzWzBdLnZhbHVlLG5vdGUucGFydHNbMF0uZXZlbnQsbm90ZS5wYXJ0c1swXS5uZWdhdGUpO30KLWZvcih2YXIgaT0wO2k8bm90ZS5wYXJ0cy5sZW5ndGg7aSsrKXt2YXIgcGFydD1ub3RlLnBhcnRzW2ldO2lmKHBhcnQuc2lnbmF0dXJlKXt0aGlzLl9hZGRBbm5vdGF0ZWRDb21wdXRhdGlvbkVmZmVjdChub3RlLHBhcnQsaW5kZXgpO31lbHNlIGlmKCFwYXJ0LmxpdGVyYWwpe2lmKG5vdGUua2luZD09PSdhdHRyaWJ1dGUnJiZub3RlLm5hbWVbMF09PT0nLScpe3RoaXMuX3dhcm4odGhpcy5fbG9nZignX2FkZEFubm90YXRpb25FZmZlY3QnLCdDYW5ub3Qgc2V0IGF0dHJpYnV0ZSAnK25vdGUubmFtZSsnIGJlY2F1c2UgIi0iIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBzdGFydGluZyBjaGFyYWN0ZXInKSk7fWVsc2V7dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QocGFydC5tb2RlbCwnYW5ub3RhdGlvbicse2tpbmQ6bm90ZS5raW5kLGluZGV4OmluZGV4LG5hbWU6bm90ZS5uYW1lLHByb3BlcnR5TmFtZTpub3RlLnByb3BlcnR5TmFtZSx2YWx1ZTpwYXJ0LnZhbHVlLGlzQ29tcG91bmQ6bm90ZS5pc0NvbXBvdW5kLGNvbXBvdW5kSW5kZXg6cGFydC5jb21wb3VuZEluZGV4LGV2ZW50OnBhcnQuZXZlbnQsY3VzdG9tRXZlbnQ6cGFydC5jdXN0b21FdmVudCxuZWdhdGU6cGFydC5uZWdhdGV9KTt9fX19LF9hZGRBbm5vdGF0ZWRDb21wdXRhdGlvbkVmZmVjdDpmdW5jdGlvbihub3RlLHBhcnQsaW5kZXgpe3ZhciBzaWc9cGFydC5zaWduYXR1cmU7aWYoc2lnLnN0YXRpYyl7dGhpcy5fX2FkZEFubm90YXRlZENvbXB1dGF0aW9uRWZmZWN0KCdfX3N0YXRpY19fJyxpbmRleCxub3RlLHBhcnQsbnVsbCk7fWVsc2V7Zm9yKHZhciBpPTAsYXJnO2k8c2lnLmFyZ3MubGVuZ3RoJiYoYXJnPXNpZy5hcmdzW2ldKTtpKyspe2lmKCFhcmcubGl0ZXJhbCl7dGhpcy5fX2FkZEFubm90YXRlZENvbXB1dGF0aW9uRWZmZWN0KGFyZy5tb2RlbCxpbmRleCxub3RlLHBhcnQsYXJnKTt9fQotaWYoc2lnLmR5bmFtaWNGbil7dGhpcy5fX2FkZEFubm90YXRlZENvbXB1dGF0aW9uRWZmZWN0KHNpZy5tZXRob2QsaW5kZXgsbm90ZSxwYXJ0LG51bGwpO319fSxfX2FkZEFubm90YXRlZENvbXB1dGF0aW9uRWZmZWN0OmZ1bmN0aW9uKHByb3BlcnR5LGluZGV4LG5vdGUscGFydCx0cmlnZ2VyKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwnYW5ub3RhdGVkQ29tcHV0YXRpb24nLHtpbmRleDppbmRleCxpc0NvbXBvdW5kOm5vdGUuaXNDb21wb3VuZCxjb21wb3VuZEluZGV4OnBhcnQuY29tcG91bmRJbmRleCxraW5kOm5vdGUua2luZCxuYW1lOm5vdGUubmFtZSxuZWdhdGU6cGFydC5uZWdhdGUsbWV0aG9kOnBhcnQuc2lnbmF0dXJlLm1ldGhvZCxhcmdzOnBhcnQuc2lnbmF0dXJlLmFyZ3MsdHJpZ2dlcjp0cmlnZ2VyLGR5bmFtaWNGbjpwYXJ0LnNpZ25hdHVyZS5keW5hbWljRm59KTt9LF9wYXJzZU1ldGhvZDpmdW5jdGlvbihleHByZXNzaW9uKXt2YXIgbT1leHByZXNzaW9uLm1hdGNoKC8oW15cc10rPylcKChbXHNcU10qKVwpLyk7aWYobSl7dmFyIHNpZz17bWV0aG9kOm1bMV0sc3RhdGljOnRydWV9O2lmKHRoaXMuZ2V0UHJvcGVydHlJbmZvKHNpZy5tZXRob2QpIT09UG9seW1lci5ub2Ipe3NpZy5zdGF0aWM9ZmFsc2U7c2lnLmR5bmFtaWNGbj10cnVlO30KLWlmKG1bMl0udHJpbSgpKXt2YXIgYXJncz1tWzJdLnJlcGxhY2UoL1xcLC9nLCcmY29tbWE7Jykuc3BsaXQoJywnKTtyZXR1cm4gdGhpcy5fcGFyc2VBcmdzKGFyZ3Msc2lnKTt9ZWxzZXtzaWcuYXJncz1Qb2x5bWVyLm5hcjtyZXR1cm4gc2lnO319fSxfcGFyc2VBcmdzOmZ1bmN0aW9uKGFyZ0xpc3Qsc2lnKXtzaWcuYXJncz1hcmdMaXN0Lm1hcChmdW5jdGlvbihyYXdBcmcpe3ZhciBhcmc9dGhpcy5fcGFyc2VBcmcocmF3QXJnKTtpZighYXJnLmxpdGVyYWwpe3NpZy5zdGF0aWM9ZmFsc2U7fQotcmV0dXJuIGFyZzt9LHRoaXMpO3JldHVybiBzaWc7fSxfcGFyc2VBcmc6ZnVuY3Rpb24ocmF3QXJnKXt2YXIgYXJnPXJhd0FyZy50cmltKCkucmVwbGFjZSgvJmNvbW1hOy9nLCcsJykucmVwbGFjZSgvXFwoLikvZywnJDEnKTt2YXIgYT17bmFtZTphcmd9O3ZhciBmYz1hcmdbMF07aWYoZmM9PT0nLScpe2ZjPWFyZ1sxXTt9Ci1pZihmYz49JzAnJiZmYzw9JzknKXtmYz0nIyc7fQotc3dpdGNoKGZjKXtjYXNlJ1wnJzpjYXNlJyInOmEudmFsdWU9YXJnLnNsaWNlKDEsLTEpO2EubGl0ZXJhbD10cnVlO2JyZWFrO2Nhc2UnIyc6YS52YWx1ZT1OdW1iZXIoYXJnKTthLmxpdGVyYWw9dHJ1ZTticmVhazt9Ci1pZighYS5saXRlcmFsKXthLm1vZGVsPVBvbHltZXIuUGF0aC5yb290KGFyZyk7YS5zdHJ1Y3R1cmVkPVBvbHltZXIuUGF0aC5pc0RlZXAoYXJnKTtpZihhLnN0cnVjdHVyZWQpe2Eud2lsZGNhcmQ9YXJnLnNsaWNlKC0yKT09Jy4qJztpZihhLndpbGRjYXJkKXthLm5hbWU9YXJnLnNsaWNlKDAsLTIpO319fQotcmV0dXJuIGE7fSxfbWFyc2hhbEluc3RhbmNlRWZmZWN0czpmdW5jdGlvbigpe1BvbHltZXIuQmluZC5wcmVwYXJlSW5zdGFuY2UodGhpcyk7aWYodGhpcy5fYmluZExpc3RlbmVycyl7UG9seW1lci5CaW5kLnNldHVwQmluZExpc3RlbmVycyh0aGlzKTt9fSxfYXBwbHlFZmZlY3RWYWx1ZTpmdW5jdGlvbihpbmZvLHZhbHVlKXt2YXIgbm9kZT10aGlzLl9ub2Rlc1tpbmZvLmluZGV4XTt2YXIgcHJvcGVydHk9aW5mby5uYW1lO3ZhbHVlPXRoaXMuX2NvbXB1dGVGaW5hbEFubm90YXRpb25WYWx1ZShub2RlLHByb3BlcnR5LHZhbHVlLGluZm8pO2lmKGluZm8ua2luZD09J2F0dHJpYnV0ZScpe3RoaXMuc2VyaWFsaXplVmFsdWVUb0F0dHJpYnV0ZSh2YWx1ZSxwcm9wZXJ0eSxub2RlKTt9ZWxzZXt2YXIgcGluZm89bm9kZS5fcHJvcGVydHlJbmZvJiZub2RlLl9wcm9wZXJ0eUluZm9bcHJvcGVydHldO2lmKHBpbmZvJiZwaW5mby5yZWFkT25seSl7cmV0dXJuO30KLXRoaXMuX19zZXRQcm9wZXJ0eShwcm9wZXJ0eSx2YWx1ZSxQb2x5bWVyLlNldHRpbmdzLnN1cHByZXNzQmluZGluZ05vdGlmaWNhdGlvbnMsbm9kZSk7fX0sX2NvbXB1dGVGaW5hbEFubm90YXRpb25WYWx1ZTpmdW5jdGlvbihub2RlLHByb3BlcnR5LHZhbHVlLGluZm8pe2lmKGluZm8ubmVnYXRlKXt2YWx1ZT0hdmFsdWU7fQotaWYoaW5mby5pc0NvbXBvdW5kKXt2YXIgc3RvcmFnZT1ub2RlLl9fY29tcG91bmRTdG9yYWdlX19bcHJvcGVydHldO3N0b3JhZ2VbaW5mby5jb21wb3VuZEluZGV4XT12YWx1ZTt2YWx1ZT1zdG9yYWdlLmpvaW4oJycpO30KLWlmKGluZm8ua2luZCE9PSdhdHRyaWJ1dGUnKXtpZihwcm9wZXJ0eT09PSdjbGFzc05hbWUnKXt2YWx1ZT10aGlzLl9zY29wZUVsZW1lbnRDbGFzcyhub2RlLHZhbHVlKTt9Ci1pZihwcm9wZXJ0eT09PSd0ZXh0Q29udGVudCd8fG5vZGUubG9jYWxOYW1lPT0naW5wdXQnJiZwcm9wZXJ0eT09J3ZhbHVlJyl7dmFsdWU9dmFsdWU9PXVuZGVmaW5lZD8nJzp2YWx1ZTt9fQotcmV0dXJuIHZhbHVlO30sX2V4ZWN1dGVTdGF0aWNFZmZlY3RzOmZ1bmN0aW9uKCl7aWYodGhpcy5fcHJvcGVydHlFZmZlY3RzJiZ0aGlzLl9wcm9wZXJ0eUVmZmVjdHMuX19zdGF0aWNfXyl7dGhpcy5fZWZmZWN0RWZmZWN0cygnX19zdGF0aWNfXycsbnVsbCx0aGlzLl9wcm9wZXJ0eUVmZmVjdHMuX19zdGF0aWNfXyk7fX19KTsoZnVuY3Rpb24oKXt2YXIgdXNlUG9seWZpbGxQcm90bz1Qb2x5bWVyLlNldHRpbmdzLnVzZVBvbHlmaWxsUHJvdG87dmFyIGF2b2lkSW5zdGFuY2VQcm9wZXJ0aWVzPUJvb2xlYW4oT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsJ3Byb3BlcnRpZXMnKSk7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfc2V0dXBDb25maWd1cmU6ZnVuY3Rpb24oaW5pdGlhbENvbmZpZyl7dGhpcy5fY29uZmlnPXt9O3RoaXMuX2hhbmRsZXJzPVtdO3RoaXMuX2Fib3ZlQ29uZmlnPW51bGw7aWYoaW5pdGlhbENvbmZpZyl7Zm9yKHZhciBpIGluIGluaXRpYWxDb25maWcpe2lmKGluaXRpYWxDb25maWdbaV0hPT11bmRlZmluZWQpe3RoaXMuX2NvbmZpZ1tpXT1pbml0aWFsQ29uZmlnW2ldO319fX0sX21hcnNoYWxBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7dGhpcy5fdGFrZUF0dHJpYnV0ZXNUb01vZGVsKHRoaXMuX2NvbmZpZyk7fSxfYXR0cmlidXRlQ2hhbmdlZEltcGw6ZnVuY3Rpb24obmFtZSl7dmFyIG1vZGVsPXRoaXMuX2NsaWVudHNSZWFkaWVkP3RoaXM6dGhpcy5fY29uZmlnO3RoaXMuX3NldEF0dHJpYnV0ZVRvUHJvcGVydHkobW9kZWwsbmFtZSk7fSxfY29uZmlnVmFsdWU6ZnVuY3Rpb24obmFtZSx2YWx1ZSl7dmFyIGluZm89dGhpcy5fcHJvcGVydHlJbmZvW25hbWVdO2lmKCFpbmZvfHwhaW5mby5yZWFkT25seSl7dGhpcy5fY29uZmlnW25hbWVdPXZhbHVlO319LF9iZWZvcmVDbGllbnRzUmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9jb25maWd1cmUoKTt9LF9jb25maWd1cmU6ZnVuY3Rpb24oKXt0aGlzLl9jb25maWd1cmVBbm5vdGF0aW9uUmVmZXJlbmNlcygpO3RoaXMuX2NvbmZpZ3VyZUluc3RhbmNlUHJvcGVydGllcygpO3RoaXMuX2Fib3ZlQ29uZmlnPXRoaXMubWl4aW4oe30sdGhpcy5fY29uZmlnKTt2YXIgY29uZmlnPXt9O2Zvcih2YXIgaT0wO2k8dGhpcy5iZWhhdmlvcnMubGVuZ3RoO2krKyl7dGhpcy5fY29uZmlndXJlUHJvcGVydGllcyh0aGlzLmJlaGF2aW9yc1tpXS5wcm9wZXJ0aWVzLGNvbmZpZyk7fQotdGhpcy5fY29uZmlndXJlUHJvcGVydGllcyhhdm9pZEluc3RhbmNlUHJvcGVydGllcz90aGlzLl9fcHJvdG9fXy5wcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllcyxjb25maWcpO3RoaXMubWl4aW4oY29uZmlnLHRoaXMuX2Fib3ZlQ29uZmlnKTt0aGlzLl9jb25maWc9Y29uZmlnO2lmKHRoaXMuX2NsaWVudHMmJnRoaXMuX2NsaWVudHMubGVuZ3RoKXt0aGlzLl9kaXN0cmlidXRlQ29uZmlnKHRoaXMuX2NvbmZpZyk7fX0sX2NvbmZpZ3VyZUluc3RhbmNlUHJvcGVydGllczpmdW5jdGlvbigpe2Zvcih2YXIgaSBpbiB0aGlzLl9wcm9wZXJ0eUVmZmVjdHMpe2lmKCF1c2VQb2x5ZmlsbFByb3RvJiZ0aGlzLmhhc093blByb3BlcnR5KGkpKXt0aGlzLl9jb25maWdWYWx1ZShpLHRoaXNbaV0pO2RlbGV0ZSB0aGlzW2ldO319fSxfY29uZmlndXJlUHJvcGVydGllczpmdW5jdGlvbihwcm9wZXJ0aWVzLGNvbmZpZyl7Zm9yKHZhciBpIGluIHByb3BlcnRpZXMpe3ZhciBjPXByb3BlcnRpZXNbaV07aWYoYy52YWx1ZSE9PXVuZGVmaW5lZCl7dmFyIHZhbHVlPWMudmFsdWU7aWYodHlwZW9mIHZhbHVlPT0nZnVuY3Rpb24nKXt2YWx1ZT12YWx1ZS5jYWxsKHRoaXMsdGhpcy5fY29uZmlnKTt9Ci1jb25maWdbaV09dmFsdWU7fX19LF9kaXN0cmlidXRlQ29uZmlnOmZ1bmN0aW9uKGNvbmZpZyl7dmFyIGZ4JD10aGlzLl9wcm9wZXJ0eUVmZmVjdHM7aWYoZngkKXtmb3IodmFyIHAgaW4gY29uZmlnKXt2YXIgZng9ZngkW3BdO2lmKGZ4KXtmb3IodmFyIGk9MCxsPWZ4Lmxlbmd0aCx4O2k8bCYmKHg9ZnhbaV0pO2krKyl7aWYoeC5raW5kPT09J2Fubm90YXRpb24nKXt2YXIgbm9kZT10aGlzLl9ub2Rlc1t4LmVmZmVjdC5pbmRleF07dmFyIG5hbWU9eC5lZmZlY3QucHJvcGVydHlOYW1lO3ZhciBpc0F0dHI9eC5lZmZlY3Qua2luZD09J2F0dHJpYnV0ZSc7dmFyIGhhc0VmZmVjdD1ub2RlLl9wcm9wZXJ0eUVmZmVjdHMmJm5vZGUuX3Byb3BlcnR5RWZmZWN0c1tuYW1lXTtpZihub2RlLl9jb25maWdWYWx1ZSYmKGhhc0VmZmVjdHx8IWlzQXR0cikpe3ZhciB2YWx1ZT1wPT09eC5lZmZlY3QudmFsdWU/Y29uZmlnW3BdOnRoaXMuX2dldCh4LmVmZmVjdC52YWx1ZSxjb25maWcpO3ZhbHVlPXRoaXMuX2NvbXB1dGVGaW5hbEFubm90YXRpb25WYWx1ZShub2RlLG5hbWUsdmFsdWUseC5lZmZlY3QpO2lmKGlzQXR0cil7dmFsdWU9bm9kZS5kZXNlcmlhbGl6ZSh0aGlzLnNlcmlhbGl6ZSh2YWx1ZSksbm9kZS5fcHJvcGVydHlJbmZvW25hbWVdLnR5cGUpO30KLW5vZGUuX2NvbmZpZ1ZhbHVlKG5hbWUsdmFsdWUpO319fX19fX0sX2FmdGVyQ2xpZW50c1JlYWR5OmZ1bmN0aW9uKCl7dGhpcy5pbXBvcnRQYXRoPXRoaXMuX2ltcG9ydFBhdGg7dGhpcy5yb290UGF0aD1Qb2x5bWVyLnJvb3RQYXRoO3RoaXMuX2V4ZWN1dGVTdGF0aWNFZmZlY3RzKCk7dGhpcy5fYXBwbHlDb25maWcodGhpcy5fY29uZmlnLHRoaXMuX2Fib3ZlQ29uZmlnKTt0aGlzLl9mbHVzaEhhbmRsZXJzKCk7fSxfYXBwbHlDb25maWc6ZnVuY3Rpb24oY29uZmlnLGFib3ZlQ29uZmlnKXtmb3IodmFyIG4gaW4gY29uZmlnKXtpZih0aGlzW25dPT09dW5kZWZpbmVkKXt0aGlzLl9fc2V0UHJvcGVydHkobixjb25maWdbbl0sbiBpbiBhYm92ZUNvbmZpZyk7fX19LF9ub3RpZnlMaXN0ZW5lcjpmdW5jdGlvbihmbixlKXtpZighUG9seW1lci5CaW5kLl9pc0V2ZW50Qm9ndXMoZSxlLnRhcmdldCkpe3ZhciB2YWx1ZSxwYXRoO2lmKGUuZGV0YWlsKXt2YWx1ZT1lLmRldGFpbC52YWx1ZTtwYXRoPWUuZGV0YWlsLnBhdGg7fQotaWYoIXRoaXMuX2NsaWVudHNSZWFkaWVkKXt0aGlzLl9xdWV1ZUhhbmRsZXIoW2ZuLGUudGFyZ2V0LHZhbHVlLHBhdGhdKTt9ZWxzZXtyZXR1cm4gZm4uY2FsbCh0aGlzLGUudGFyZ2V0LHZhbHVlLHBhdGgpO319fSxfcXVldWVIYW5kbGVyOmZ1bmN0aW9uKGFyZ3Mpe3RoaXMuX2hhbmRsZXJzLnB1c2goYXJncyk7fSxfZmx1c2hIYW5kbGVyczpmdW5jdGlvbigpe3ZhciBoJD10aGlzLl9oYW5kbGVycztmb3IodmFyIGk9MCxsPWgkLmxlbmd0aCxoO2k8bCYmKGg9aCRbaV0pO2krKyl7aFswXS5jYWxsKHRoaXMsaFsxXSxoWzJdLGhbM10pO30KLXRoaXMuX2hhbmRsZXJzPVtdO319KTt9KCkpOyhmdW5jdGlvbigpeyd1c2Ugc3RyaWN0Jzt2YXIgUGF0aD1Qb2x5bWVyLlBhdGg7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtub3RpZnlQYXRoOmZ1bmN0aW9uKHBhdGgsdmFsdWUsZnJvbUFib3ZlKXt2YXIgaW5mbz17fTt2YXIgdj10aGlzLl9nZXQocGF0aCx0aGlzLGluZm8pO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0xKXt2YWx1ZT12O30KLWlmKGluZm8ucGF0aCl7dGhpcy5fbm90aWZ5UGF0aChpbmZvLnBhdGgsdmFsdWUsZnJvbUFib3ZlKTt9fSxfbm90aWZ5UGF0aDpmdW5jdGlvbihwYXRoLHZhbHVlLGZyb21BYm92ZSl7dmFyIG9sZD10aGlzLl9wcm9wZXJ0eVNldHRlcihwYXRoLHZhbHVlKTtpZihvbGQhPT12YWx1ZSYmKG9sZD09PW9sZHx8dmFsdWU9PT12YWx1ZSkpe3RoaXMuX3BhdGhFZmZlY3RvcihwYXRoLHZhbHVlKTtpZighZnJvbUFib3ZlKXt0aGlzLl9ub3RpZnlQYXRoVXAocGF0aCx2YWx1ZSk7fQotcmV0dXJuIHRydWU7fX0sX2dldFBhdGhQYXJ0czpmdW5jdGlvbihwYXRoKXtpZihBcnJheS5pc0FycmF5KHBhdGgpKXt2YXIgcGFydHM9W107Zm9yKHZhciBpPTA7aTxwYXRoLmxlbmd0aDtpKyspe3ZhciBhcmdzPXBhdGhbaV0udG9TdHJpbmcoKS5zcGxpdCgnLicpO2Zvcih2YXIgaj0wO2o8YXJncy5sZW5ndGg7aisrKXtwYXJ0cy5wdXNoKGFyZ3Nbal0pO319Ci1yZXR1cm4gcGFydHM7fWVsc2V7cmV0dXJuIHBhdGgudG9TdHJpbmcoKS5zcGxpdCgnLicpO319LHNldDpmdW5jdGlvbihwYXRoLHZhbHVlLHJvb3Qpe3ZhciBwcm9wPXJvb3R8fHRoaXM7dmFyIHBhcnRzPXRoaXMuX2dldFBhdGhQYXJ0cyhwYXRoKTt2YXIgYXJyYXk7dmFyIGxhc3Q9cGFydHNbcGFydHMubGVuZ3RoLTFdO2lmKHBhcnRzLmxlbmd0aD4xKXtmb3IodmFyIGk9MDtpPHBhcnRzLmxlbmd0aC0xO2krKyl7dmFyIHBhcnQ9cGFydHNbaV07aWYoYXJyYXkmJnBhcnRbMF09PScjJyl7cHJvcD1Qb2x5bWVyLkNvbGxlY3Rpb24uZ2V0KGFycmF5KS5nZXRJdGVtKHBhcnQpO31lbHNle3Byb3A9cHJvcFtwYXJ0XTtpZihhcnJheSYmcGFyc2VJbnQocGFydCwxMCk9PXBhcnQpe3BhcnRzW2ldPVBvbHltZXIuQ29sbGVjdGlvbi5nZXQoYXJyYXkpLmdldEtleShwcm9wKTt9fQotaWYoIXByb3Ape3JldHVybjt9Ci1hcnJheT1BcnJheS5pc0FycmF5KHByb3ApP3Byb3A6bnVsbDt9Ci1pZihhcnJheSl7dmFyIGNvbGw9UG9seW1lci5Db2xsZWN0aW9uLmdldChhcnJheSk7dmFyIG9sZCxrZXk7aWYobGFzdFswXT09JyMnKXtrZXk9bGFzdDtvbGQ9Y29sbC5nZXRJdGVtKGtleSk7bGFzdD1hcnJheS5pbmRleE9mKG9sZCk7Y29sbC5zZXRJdGVtKGtleSx2YWx1ZSk7fWVsc2UgaWYocGFyc2VJbnQobGFzdCwxMCk9PWxhc3Qpe29sZD1wcm9wW2xhc3RdO2tleT1jb2xsLmdldEtleShvbGQpO3BhcnRzW2ldPWtleTtjb2xsLnNldEl0ZW0oa2V5LHZhbHVlKTt9fQotcHJvcFtsYXN0XT12YWx1ZTtpZighcm9vdCl7dGhpcy5fbm90aWZ5UGF0aChwYXJ0cy5qb2luKCcuJyksdmFsdWUpO319ZWxzZXtwcm9wW3BhdGhdPXZhbHVlO319LGdldDpmdW5jdGlvbihwYXRoLHJvb3Qpe3JldHVybiB0aGlzLl9nZXQocGF0aCxyb290KTt9LF9nZXQ6ZnVuY3Rpb24ocGF0aCxyb290LGluZm8pe3ZhciBwcm9wPXJvb3R8fHRoaXM7dmFyIHBhcnRzPXRoaXMuX2dldFBhdGhQYXJ0cyhwYXRoKTt2YXIgYXJyYXk7Zm9yKHZhciBpPTA7aTxwYXJ0cy5sZW5ndGg7aSsrKXtpZighcHJvcCl7cmV0dXJuO30KLXZhciBwYXJ0PXBhcnRzW2ldO2lmKGFycmF5JiZwYXJ0WzBdPT0nIycpe3Byb3A9UG9seW1lci5Db2xsZWN0aW9uLmdldChhcnJheSkuZ2V0SXRlbShwYXJ0KTt9ZWxzZXtwcm9wPXByb3BbcGFydF07aWYoaW5mbyYmYXJyYXkmJnBhcnNlSW50KHBhcnQsMTApPT1wYXJ0KXtwYXJ0c1tpXT1Qb2x5bWVyLkNvbGxlY3Rpb24uZ2V0KGFycmF5KS5nZXRLZXkocHJvcCk7fX0KLWFycmF5PUFycmF5LmlzQXJyYXkocHJvcCk/cHJvcDpudWxsO30KLWlmKGluZm8pe2luZm8ucGF0aD1wYXJ0cy5qb2luKCcuJyk7fQotcmV0dXJuIHByb3A7fSxfcGF0aEVmZmVjdG9yOmZ1bmN0aW9uKHBhdGgsdmFsdWUpe3ZhciBtb2RlbD1QYXRoLnJvb3QocGF0aCk7dmFyIGZ4JD10aGlzLl9wcm9wZXJ0eUVmZmVjdHMmJnRoaXMuX3Byb3BlcnR5RWZmZWN0c1ttb2RlbF07aWYoZngkKXtmb3IodmFyIGk9MCxmeDtpPGZ4JC5sZW5ndGgmJihmeD1meCRbaV0pO2krKyl7dmFyIGZ4Rm49ZngucGF0aEZuO2lmKGZ4Rm4pe2Z4Rm4uY2FsbCh0aGlzLHBhdGgsdmFsdWUsZnguZWZmZWN0KTt9fX0KLWlmKHRoaXMuX2JvdW5kUGF0aHMpe3RoaXMuX25vdGlmeUJvdW5kUGF0aHMocGF0aCx2YWx1ZSk7fX0sX2Fubm90YXRpb25QYXRoRWZmZWN0OmZ1bmN0aW9uKHBhdGgsdmFsdWUsZWZmZWN0KXtpZihQYXRoLm1hdGNoZXMoZWZmZWN0LnZhbHVlLGZhbHNlLHBhdGgpKXtQb2x5bWVyLkJpbmQuX2Fubm90YXRpb25FZmZlY3QuY2FsbCh0aGlzLHBhdGgsdmFsdWUsZWZmZWN0KTt9ZWxzZSBpZighZWZmZWN0Lm5lZ2F0ZSYmUGF0aC5pc0Rlc2NlbmRhbnQoZWZmZWN0LnZhbHVlLHBhdGgpKXt2YXIgbm9kZT10aGlzLl9ub2Rlc1tlZmZlY3QuaW5kZXhdO2lmKG5vZGUmJm5vZGUuX25vdGlmeVBhdGgpe3ZhciBuZXdQYXRoPVBhdGgudHJhbnNsYXRlKGVmZmVjdC52YWx1ZSxlZmZlY3QubmFtZSxwYXRoKTtub2RlLl9ub3RpZnlQYXRoKG5ld1BhdGgsdmFsdWUsdHJ1ZSk7fX19LF9jb21wbGV4T2JzZXJ2ZXJQYXRoRWZmZWN0OmZ1bmN0aW9uKHBhdGgsdmFsdWUsZWZmZWN0KXtpZihQYXRoLm1hdGNoZXMoZWZmZWN0LnRyaWdnZXIubmFtZSxlZmZlY3QudHJpZ2dlci53aWxkY2FyZCxwYXRoKSl7UG9seW1lci5CaW5kLl9jb21wbGV4T2JzZXJ2ZXJFZmZlY3QuY2FsbCh0aGlzLHBhdGgsdmFsdWUsZWZmZWN0KTt9fSxfY29tcHV0ZVBhdGhFZmZlY3Q6ZnVuY3Rpb24ocGF0aCx2YWx1ZSxlZmZlY3Qpe2lmKFBhdGgubWF0Y2hlcyhlZmZlY3QudHJpZ2dlci5uYW1lLGVmZmVjdC50cmlnZ2VyLndpbGRjYXJkLHBhdGgpKXtQb2x5bWVyLkJpbmQuX2NvbXB1dGVFZmZlY3QuY2FsbCh0aGlzLHBhdGgsdmFsdWUsZWZmZWN0KTt9fSxfYW5ub3RhdGVkQ29tcHV0YXRpb25QYXRoRWZmZWN0OmZ1bmN0aW9uKHBhdGgsdmFsdWUsZWZmZWN0KXtpZihQYXRoLm1hdGNoZXMoZWZmZWN0LnRyaWdnZXIubmFtZSxlZmZlY3QudHJpZ2dlci53aWxkY2FyZCxwYXRoKSl7UG9seW1lci5CaW5kLl9hbm5vdGF0ZWRDb21wdXRhdGlvbkVmZmVjdC5jYWxsKHRoaXMscGF0aCx2YWx1ZSxlZmZlY3QpO319LGxpbmtQYXRoczpmdW5jdGlvbih0byxmcm9tKXt0aGlzLl9ib3VuZFBhdGhzPXRoaXMuX2JvdW5kUGF0aHN8fHt9O2lmKGZyb20pe3RoaXMuX2JvdW5kUGF0aHNbdG9dPWZyb207fWVsc2V7dGhpcy51bmxpbmtQYXRocyh0byk7fX0sdW5saW5rUGF0aHM6ZnVuY3Rpb24ocGF0aCl7aWYodGhpcy5fYm91bmRQYXRocyl7ZGVsZXRlIHRoaXMuX2JvdW5kUGF0aHNbcGF0aF07fX0sX25vdGlmeUJvdW5kUGF0aHM6ZnVuY3Rpb24ocGF0aCx2YWx1ZSl7Zm9yKHZhciBhIGluIHRoaXMuX2JvdW5kUGF0aHMpe3ZhciBiPXRoaXMuX2JvdW5kUGF0aHNbYV07aWYoUGF0aC5pc0Rlc2NlbmRhbnQoYSxwYXRoKSl7dGhpcy5fbm90aWZ5UGF0aChQYXRoLnRyYW5zbGF0ZShhLGIscGF0aCksdmFsdWUpO31lbHNlIGlmKFBhdGguaXNEZXNjZW5kYW50KGIscGF0aCkpe3RoaXMuX25vdGlmeVBhdGgoUGF0aC50cmFuc2xhdGUoYixhLHBhdGgpLHZhbHVlKTt9fX0sX25vdGlmeVBhdGhVcDpmdW5jdGlvbihwYXRoLHZhbHVlKXt2YXIgcm9vdE5hbWU9UGF0aC5yb290KHBhdGgpO3ZhciBkYXNoQ2FzZU5hbWU9UG9seW1lci5DYXNlTWFwLmNhbWVsVG9EYXNoQ2FzZShyb290TmFtZSk7dmFyIGV2ZW50TmFtZT1kYXNoQ2FzZU5hbWUrdGhpcy5fRVZFTlRfQ0hBTkdFRDt0aGlzLmZpcmUoZXZlbnROYW1lLHtwYXRoOnBhdGgsdmFsdWU6dmFsdWV9LHtidWJibGVzOmZhbHNlLF91c2VDYWNoZTpQb2x5bWVyLlNldHRpbmdzLmV2ZW50RGF0YUNhY2hlfHwhUG9seW1lci5TZXR0aW5ncy5pc0lFfSk7fSxfRVZFTlRfQ0hBTkdFRDonLWNoYW5nZWQnLG5vdGlmeVNwbGljZXM6ZnVuY3Rpb24ocGF0aCxzcGxpY2VzKXt2YXIgaW5mbz17fTt2YXIgYXJyYXk9dGhpcy5fZ2V0KHBhdGgsdGhpcyxpbmZvKTt0aGlzLl9ub3RpZnlTcGxpY2VzKGFycmF5LGluZm8ucGF0aCxzcGxpY2VzKTt9LF9ub3RpZnlTcGxpY2VzOmZ1bmN0aW9uKGFycmF5LHBhdGgsc3BsaWNlcyl7dmFyIGNoYW5nZT17a2V5U3BsaWNlczpQb2x5bWVyLkNvbGxlY3Rpb24uYXBwbHlTcGxpY2VzKGFycmF5LHNwbGljZXMpLGluZGV4U3BsaWNlczpzcGxpY2VzfTt2YXIgc3BsaWNlc1BhdGg9cGF0aCsnLnNwbGljZXMnO3RoaXMuX25vdGlmeVBhdGgoc3BsaWNlc1BhdGgsY2hhbmdlKTt0aGlzLl9ub3RpZnlQYXRoKHBhdGgrJy5sZW5ndGgnLGFycmF5Lmxlbmd0aCk7dGhpcy5fX2RhdGFfX1tzcGxpY2VzUGF0aF09e2tleVNwbGljZXM6bnVsbCxpbmRleFNwbGljZXM6bnVsbH07fSxfbm90aWZ5U3BsaWNlOmZ1bmN0aW9uKGFycmF5LHBhdGgsaW5kZXgsYWRkZWQscmVtb3ZlZCl7dGhpcy5fbm90aWZ5U3BsaWNlcyhhcnJheSxwYXRoLFt7aW5kZXg6aW5kZXgsYWRkZWRDb3VudDphZGRlZCxyZW1vdmVkOnJlbW92ZWQsb2JqZWN0OmFycmF5LHR5cGU6J3NwbGljZSd9XSk7fSxwdXNoOmZ1bmN0aW9uKHBhdGgpe3ZhciBpbmZvPXt9O3ZhciBhcnJheT10aGlzLl9nZXQocGF0aCx0aGlzLGluZm8pO3ZhciBhcmdzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTt2YXIgbGVuPWFycmF5Lmxlbmd0aDt2YXIgcmV0PWFycmF5LnB1c2guYXBwbHkoYXJyYXksYXJncyk7aWYoYXJncy5sZW5ndGgpe3RoaXMuX25vdGlmeVNwbGljZShhcnJheSxpbmZvLnBhdGgsbGVuLGFyZ3MubGVuZ3RoLFtdKTt9Ci1yZXR1cm4gcmV0O30scG9wOmZ1bmN0aW9uKHBhdGgpe3ZhciBpbmZvPXt9O3ZhciBhcnJheT10aGlzLl9nZXQocGF0aCx0aGlzLGluZm8pO3ZhciBoYWRMZW5ndGg9Qm9vbGVhbihhcnJheS5sZW5ndGgpO3ZhciBhcmdzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTt2YXIgcmV0PWFycmF5LnBvcC5hcHBseShhcnJheSxhcmdzKTtpZihoYWRMZW5ndGgpe3RoaXMuX25vdGlmeVNwbGljZShhcnJheSxpbmZvLnBhdGgsYXJyYXkubGVuZ3RoLDAsW3JldF0pO30KLXJldHVybiByZXQ7fSxzcGxpY2U6ZnVuY3Rpb24ocGF0aCxzdGFydCl7dmFyIGluZm89e307dmFyIGFycmF5PXRoaXMuX2dldChwYXRoLHRoaXMsaW5mbyk7aWYoc3RhcnQ8MCl7c3RhcnQ9YXJyYXkubGVuZ3RoLU1hdGguZmxvb3IoLXN0YXJ0KTt9ZWxzZXtzdGFydD1NYXRoLmZsb29yKHN0YXJ0KTt9Ci1pZighc3RhcnQpe3N0YXJ0PTA7fQotdmFyIGFyZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3ZhciByZXQ9YXJyYXkuc3BsaWNlLmFwcGx5KGFycmF5LGFyZ3MpO3ZhciBhZGRlZENvdW50PU1hdGgubWF4KGFyZ3MubGVuZ3RoLTIsMCk7aWYoYWRkZWRDb3VudHx8cmV0Lmxlbmd0aCl7dGhpcy5fbm90aWZ5U3BsaWNlKGFycmF5LGluZm8ucGF0aCxzdGFydCxhZGRlZENvdW50LHJldCk7fQotcmV0dXJuIHJldDt9LHNoaWZ0OmZ1bmN0aW9uKHBhdGgpe3ZhciBpbmZvPXt9O3ZhciBhcnJheT10aGlzLl9nZXQocGF0aCx0aGlzLGluZm8pO3ZhciBoYWRMZW5ndGg9Qm9vbGVhbihhcnJheS5sZW5ndGgpO3ZhciBhcmdzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTt2YXIgcmV0PWFycmF5LnNoaWZ0LmFwcGx5KGFycmF5LGFyZ3MpO2lmKGhhZExlbmd0aCl7dGhpcy5fbm90aWZ5U3BsaWNlKGFycmF5LGluZm8ucGF0aCwwLDAsW3JldF0pO30KLXJldHVybiByZXQ7fSx1bnNoaWZ0OmZ1bmN0aW9uKHBhdGgpe3ZhciBpbmZvPXt9O3ZhciBhcnJheT10aGlzLl9nZXQocGF0aCx0aGlzLGluZm8pO3ZhciBhcmdzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTt2YXIgcmV0PWFycmF5LnVuc2hpZnQuYXBwbHkoYXJyYXksYXJncyk7aWYoYXJncy5sZW5ndGgpe3RoaXMuX25vdGlmeVNwbGljZShhcnJheSxpbmZvLnBhdGgsMCxhcmdzLmxlbmd0aCxbXSk7fQotcmV0dXJuIHJldDt9LHByZXBhcmVNb2RlbE5vdGlmeVBhdGg6ZnVuY3Rpb24obW9kZWwpe3RoaXMubWl4aW4obW9kZWwse2ZpcmU6UG9seW1lci5CYXNlLmZpcmUsX2dldEV2ZW50OlBvbHltZXIuQmFzZS5fZ2V0RXZlbnQsX19ldmVudENhY2hlOlBvbHltZXIuQmFzZS5fX2V2ZW50Q2FjaGUsbm90aWZ5UGF0aDpQb2x5bWVyLkJhc2Uubm90aWZ5UGF0aCxfZ2V0OlBvbHltZXIuQmFzZS5fZ2V0LF9FVkVOVF9DSEFOR0VEOlBvbHltZXIuQmFzZS5fRVZFTlRfQ0hBTkdFRCxfbm90aWZ5UGF0aDpQb2x5bWVyLkJhc2UuX25vdGlmeVBhdGgsX25vdGlmeVBhdGhVcDpQb2x5bWVyLkJhc2UuX25vdGlmeVBhdGhVcCxfcGF0aEVmZmVjdG9yOlBvbHltZXIuQmFzZS5fcGF0aEVmZmVjdG9yLF9hbm5vdGF0aW9uUGF0aEVmZmVjdDpQb2x5bWVyLkJhc2UuX2Fubm90YXRpb25QYXRoRWZmZWN0LF9jb21wbGV4T2JzZXJ2ZXJQYXRoRWZmZWN0OlBvbHltZXIuQmFzZS5fY29tcGxleE9ic2VydmVyUGF0aEVmZmVjdCxfYW5ub3RhdGVkQ29tcHV0YXRpb25QYXRoRWZmZWN0OlBvbHltZXIuQmFzZS5fYW5ub3RhdGVkQ29tcHV0YXRpb25QYXRoRWZmZWN0LF9jb21wdXRlUGF0aEVmZmVjdDpQb2x5bWVyLkJhc2UuX2NvbXB1dGVQYXRoRWZmZWN0LF9ub3RpZnlCb3VuZFBhdGhzOlBvbHltZXIuQmFzZS5fbm90aWZ5Qm91bmRQYXRocyxfZ2V0UGF0aFBhcnRzOlBvbHltZXIuQmFzZS5fZ2V0UGF0aFBhcnRzfSk7fX0pO30oKSk7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtyZXNvbHZlVXJsOmZ1bmN0aW9uKHVybCl7cmV0dXJuIFBvbHltZXIuUmVzb2x2ZVVybC5yZXNvbHZlVXJsKHVybCx0aGlzLl9pbXBvcnRQYXRoKTt9fSk7UG9seW1lci5Dc3NQYXJzZT1mdW5jdGlvbigpe3JldHVybntwYXJzZTpmdW5jdGlvbih0ZXh0KXt0ZXh0PXRoaXMuX2NsZWFuKHRleHQpO3JldHVybiB0aGlzLl9wYXJzZUNzcyh0aGlzLl9sZXgodGV4dCksdGV4dCk7fSxfY2xlYW46ZnVuY3Rpb24oY3NzVGV4dCl7cmV0dXJuIGNzc1RleHQucmVwbGFjZSh0aGlzLl9yeC5jb21tZW50cywnJykucmVwbGFjZSh0aGlzLl9yeC5wb3J0LCcnKTt9LF9sZXg6ZnVuY3Rpb24odGV4dCl7dmFyIHJvb3Q9e3N0YXJ0OjAsZW5kOnRleHQubGVuZ3RofTt2YXIgbj1yb290O2Zvcih2YXIgaT0wLGw9dGV4dC5sZW5ndGg7aTxsO2krKyl7c3dpdGNoKHRleHRbaV0pe2Nhc2UgdGhpcy5PUEVOX0JSQUNFOmlmKCFuLnJ1bGVzKXtuLnJ1bGVzPVtdO30KLXZhciBwPW47dmFyIHByZXZpb3VzPXAucnVsZXNbcC5ydWxlcy5sZW5ndGgtMV07bj17c3RhcnQ6aSsxLHBhcmVudDpwLHByZXZpb3VzOnByZXZpb3VzfTtwLnJ1bGVzLnB1c2gobik7YnJlYWs7Y2FzZSB0aGlzLkNMT1NFX0JSQUNFOm4uZW5kPWkrMTtuPW4ucGFyZW50fHxyb290O2JyZWFrO319Ci1yZXR1cm4gcm9vdDt9LF9wYXJzZUNzczpmdW5jdGlvbihub2RlLHRleHQpe3ZhciB0PXRleHQuc3Vic3RyaW5nKG5vZGUuc3RhcnQsbm9kZS5lbmQtMSk7bm9kZS5wYXJzZWRDc3NUZXh0PW5vZGUuY3NzVGV4dD10LnRyaW0oKTtpZihub2RlLnBhcmVudCl7dmFyIHNzPW5vZGUucHJldmlvdXM/bm9kZS5wcmV2aW91cy5lbmQ6bm9kZS5wYXJlbnQuc3RhcnQ7dD10ZXh0LnN1YnN0cmluZyhzcyxub2RlLnN0YXJ0LTEpO3Q9dGhpcy5fZXhwYW5kVW5pY29kZUVzY2FwZXModCk7dD10LnJlcGxhY2UodGhpcy5fcngubXVsdGlwbGVTcGFjZXMsJyAnKTt0PXQuc3Vic3RyaW5nKHQubGFzdEluZGV4T2YoJzsnKSsxKTt2YXIgcz1ub2RlLnBhcnNlZFNlbGVjdG9yPW5vZGUuc2VsZWN0b3I9dC50cmltKCk7bm9kZS5hdFJ1bGU9cy5pbmRleE9mKHRoaXMuQVRfU1RBUlQpPT09MDtpZihub2RlLmF0UnVsZSl7aWYocy5pbmRleE9mKHRoaXMuTUVESUFfU1RBUlQpPT09MCl7bm9kZS50eXBlPXRoaXMudHlwZXMuTUVESUFfUlVMRTt9ZWxzZSBpZihzLm1hdGNoKHRoaXMuX3J4LmtleWZyYW1lc1J1bGUpKXtub2RlLnR5cGU9dGhpcy50eXBlcy5LRVlGUkFNRVNfUlVMRTtub2RlLmtleWZyYW1lc05hbWU9bm9kZS5zZWxlY3Rvci5zcGxpdCh0aGlzLl9yeC5tdWx0aXBsZVNwYWNlcykucG9wKCk7fX1lbHNle2lmKHMuaW5kZXhPZih0aGlzLlZBUl9TVEFSVCk9PT0wKXtub2RlLnR5cGU9dGhpcy50eXBlcy5NSVhJTl9SVUxFO31lbHNle25vZGUudHlwZT10aGlzLnR5cGVzLlNUWUxFX1JVTEU7fX19Ci12YXIgciQ9bm9kZS5ydWxlcztpZihyJCl7Zm9yKHZhciBpPTAsbD1yJC5sZW5ndGgscjtpPGwmJihyPXIkW2ldKTtpKyspe3RoaXMuX3BhcnNlQ3NzKHIsdGV4dCk7fX0KLXJldHVybiBub2RlO30sX2V4cGFuZFVuaWNvZGVFc2NhcGVzOmZ1bmN0aW9uKHMpe3JldHVybiBzLnJlcGxhY2UoL1xcKFswLTlhLWZdezEsNn0pXHMvZ2ksZnVuY3Rpb24oKXt2YXIgY29kZT1hcmd1bWVudHNbMV0scmVwZWF0PTYtY29kZS5sZW5ndGg7d2hpbGUocmVwZWF0LS0pe2NvZGU9JzAnK2NvZGU7fQotcmV0dXJuJ1xcJytjb2RlO30pO30sc3RyaW5naWZ5OmZ1bmN0aW9uKG5vZGUscHJlc2VydmVQcm9wZXJ0aWVzLHRleHQpe3RleHQ9dGV4dHx8Jyc7dmFyIGNzc1RleHQ9Jyc7aWYobm9kZS5jc3NUZXh0fHxub2RlLnJ1bGVzKXt2YXIgciQ9bm9kZS5ydWxlcztpZihyJCYmIXRoaXMuX2hhc01peGluUnVsZXMociQpKXtmb3IodmFyIGk9MCxsPXIkLmxlbmd0aCxyO2k8bCYmKHI9ciRbaV0pO2krKyl7Y3NzVGV4dD10aGlzLnN0cmluZ2lmeShyLHByZXNlcnZlUHJvcGVydGllcyxjc3NUZXh0KTt9fWVsc2V7Y3NzVGV4dD1wcmVzZXJ2ZVByb3BlcnRpZXM/bm9kZS5jc3NUZXh0OnRoaXMucmVtb3ZlQ3VzdG9tUHJvcHMobm9kZS5jc3NUZXh0KTtjc3NUZXh0PWNzc1RleHQudHJpbSgpO2lmKGNzc1RleHQpe2Nzc1RleHQ9JyAgJytjc3NUZXh0Kydcbic7fX19Ci1pZihjc3NUZXh0KXtpZihub2RlLnNlbGVjdG9yKXt0ZXh0Kz1ub2RlLnNlbGVjdG9yKycgJyt0aGlzLk9QRU5fQlJBQ0UrJ1xuJzt9Ci10ZXh0Kz1jc3NUZXh0O2lmKG5vZGUuc2VsZWN0b3Ipe3RleHQrPXRoaXMuQ0xPU0VfQlJBQ0UrJ1xuXG4nO319Ci1yZXR1cm4gdGV4dDt9LF9oYXNNaXhpblJ1bGVzOmZ1bmN0aW9uKHJ1bGVzKXtyZXR1cm4gcnVsZXNbMF0uc2VsZWN0b3IuaW5kZXhPZih0aGlzLlZBUl9TVEFSVCk9PT0wO30scmVtb3ZlQ3VzdG9tUHJvcHM6ZnVuY3Rpb24oY3NzVGV4dCl7Y3NzVGV4dD10aGlzLnJlbW92ZUN1c3RvbVByb3BBc3NpZ25tZW50KGNzc1RleHQpO3JldHVybiB0aGlzLnJlbW92ZUN1c3RvbVByb3BBcHBseShjc3NUZXh0KTt9LHJlbW92ZUN1c3RvbVByb3BBc3NpZ25tZW50OmZ1bmN0aW9uKGNzc1RleHQpe3JldHVybiBjc3NUZXh0LnJlcGxhY2UodGhpcy5fcnguY3VzdG9tUHJvcCwnJykucmVwbGFjZSh0aGlzLl9yeC5taXhpblByb3AsJycpO30scmVtb3ZlQ3VzdG9tUHJvcEFwcGx5OmZ1bmN0aW9uKGNzc1RleHQpe3JldHVybiBjc3NUZXh0LnJlcGxhY2UodGhpcy5fcngubWl4aW5BcHBseSwnJykucmVwbGFjZSh0aGlzLl9yeC52YXJBcHBseSwnJyk7fSx0eXBlczp7U1RZTEVfUlVMRToxLEtFWUZSQU1FU19SVUxFOjcsTUVESUFfUlVMRTo0LE1JWElOX1JVTEU6MTAwMH0sT1BFTl9CUkFDRToneycsQ0xPU0VfQlJBQ0U6J30nLF9yeDp7Y29tbWVudHM6L1wvXCpbXipdKlwqKyhbXlwvKl1bXipdKlwqKykqXC8vZ2ltLHBvcnQ6L0BpbXBvcnRbXjtdKjsvZ2ltLGN1c3RvbVByb3A6Lyg/Ol5bXjtcLVxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/KD86Wztcbl18JCkvZ2ltLG1peGluUHJvcDovKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj97W159XSo/fSg/Ols7XG5dfCQpPy9naW0sbWl4aW5BcHBseTovQGFwcGx5XHMqXCg/W14pO10qXCk/XHMqKD86Wztcbl18JCk/L2dpbSx2YXJBcHBseTovW147Ol0qPzpbXjtdKj92YXJcKFteO10qXCkoPzpbO1xuXXwkKT8vZ2ltLGtleWZyYW1lc1J1bGU6L15AW15cc10qa2V5ZnJhbWVzLyxtdWx0aXBsZVNwYWNlczovXHMrL2d9LFZBUl9TVEFSVDonLS0nLE1FRElBX1NUQVJUOidAbWVkaWEnLEFUX1NUQVJUOidAJ307fSgpO1BvbHltZXIuU3R5bGVVdGlsPWZ1bmN0aW9uKCl7dmFyIHNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7cmV0dXJue05BVElWRV9WQVJJQUJMRVM6UG9seW1lci5TZXR0aW5ncy51c2VOYXRpdmVDU1NQcm9wZXJ0aWVzLE1PRFVMRV9TVFlMRVNfU0VMRUNUT1I6J3N0eWxlLCBsaW5rW3JlbD1pbXBvcnRdW3R5cGV+PWNzc10sIHRlbXBsYXRlJyxJTkNMVURFX0FUVFI6J2luY2x1ZGUnLHRvQ3NzVGV4dDpmdW5jdGlvbihydWxlcyxjYWxsYmFjayl7aWYodHlwZW9mIHJ1bGVzPT09J3N0cmluZycpe3J1bGVzPXRoaXMucGFyc2VyLnBhcnNlKHJ1bGVzKTt9Ci1pZihjYWxsYmFjayl7dGhpcy5mb3JFYWNoUnVsZShydWxlcyxjYWxsYmFjayk7fQotcmV0dXJuIHRoaXMucGFyc2VyLnN0cmluZ2lmeShydWxlcyx0aGlzLk5BVElWRV9WQVJJQUJMRVMpO30sZm9yUnVsZXNJblN0eWxlczpmdW5jdGlvbihzdHlsZXMsc3R5bGVSdWxlQ2FsbGJhY2ssa2V5ZnJhbWVzUnVsZUNhbGxiYWNrKXtpZihzdHlsZXMpe2Zvcih2YXIgaT0wLGw9c3R5bGVzLmxlbmd0aCxzO2k8bCYmKHM9c3R5bGVzW2ldKTtpKyspe3RoaXMuZm9yRWFjaFJ1bGVJblN0eWxlKHMsc3R5bGVSdWxlQ2FsbGJhY2ssa2V5ZnJhbWVzUnVsZUNhbGxiYWNrKTt9fX0sZm9yQWN0aXZlUnVsZXNJblN0eWxlczpmdW5jdGlvbihzdHlsZXMsc3R5bGVSdWxlQ2FsbGJhY2ssa2V5ZnJhbWVzUnVsZUNhbGxiYWNrKXtpZihzdHlsZXMpe2Zvcih2YXIgaT0wLGw9c3R5bGVzLmxlbmd0aCxzO2k8bCYmKHM9c3R5bGVzW2ldKTtpKyspe3RoaXMuZm9yRWFjaFJ1bGVJblN0eWxlKHMsc3R5bGVSdWxlQ2FsbGJhY2ssa2V5ZnJhbWVzUnVsZUNhbGxiYWNrLHRydWUpO319fSxydWxlc0ZvclN0eWxlOmZ1bmN0aW9uKHN0eWxlKXtpZighc3R5bGUuX19jc3NSdWxlcyYmc3R5bGUudGV4dENvbnRlbnQpe3N0eWxlLl9fY3NzUnVsZXM9dGhpcy5wYXJzZXIucGFyc2Uoc3R5bGUudGV4dENvbnRlbnQpO30KLXJldHVybiBzdHlsZS5fX2Nzc1J1bGVzO30saXNLZXlmcmFtZXNTZWxlY3RvcjpmdW5jdGlvbihydWxlKXtyZXR1cm4gcnVsZS5wYXJlbnQmJnJ1bGUucGFyZW50LnR5cGU9PT10aGlzLnJ1bGVUeXBlcy5LRVlGUkFNRVNfUlVMRTt9LGZvckVhY2hSdWxlSW5TdHlsZTpmdW5jdGlvbihzdHlsZSxzdHlsZVJ1bGVDYWxsYmFjayxrZXlmcmFtZXNSdWxlQ2FsbGJhY2ssb25seUFjdGl2ZVJ1bGVzKXt2YXIgcnVsZXM9dGhpcy5ydWxlc0ZvclN0eWxlKHN0eWxlKTt2YXIgc3R5bGVDYWxsYmFjayxrZXlmcmFtZUNhbGxiYWNrO2lmKHN0eWxlUnVsZUNhbGxiYWNrKXtzdHlsZUNhbGxiYWNrPWZ1bmN0aW9uKHJ1bGUpe3N0eWxlUnVsZUNhbGxiYWNrKHJ1bGUsc3R5bGUpO307fQotaWYoa2V5ZnJhbWVzUnVsZUNhbGxiYWNrKXtrZXlmcmFtZUNhbGxiYWNrPWZ1bmN0aW9uKHJ1bGUpe2tleWZyYW1lc1J1bGVDYWxsYmFjayhydWxlLHN0eWxlKTt9O30KLXRoaXMuZm9yRWFjaFJ1bGUocnVsZXMsc3R5bGVDYWxsYmFjayxrZXlmcmFtZUNhbGxiYWNrLG9ubHlBY3RpdmVSdWxlcyk7fSxmb3JFYWNoUnVsZTpmdW5jdGlvbihub2RlLHN0eWxlUnVsZUNhbGxiYWNrLGtleWZyYW1lc1J1bGVDYWxsYmFjayxvbmx5QWN0aXZlUnVsZXMpe2lmKCFub2RlKXtyZXR1cm47fQotdmFyIHNraXBSdWxlcz1mYWxzZTtpZihvbmx5QWN0aXZlUnVsZXMpe2lmKG5vZGUudHlwZT09PXRoaXMucnVsZVR5cGVzLk1FRElBX1JVTEUpe3ZhciBtYXRjaE1lZGlhPW5vZGUuc2VsZWN0b3IubWF0Y2godGhpcy5yeC5NRURJQV9NQVRDSCk7aWYobWF0Y2hNZWRpYSl7aWYoIXdpbmRvdy5tYXRjaE1lZGlhKG1hdGNoTWVkaWFbMV0pLm1hdGNoZXMpe3NraXBSdWxlcz10cnVlO319fX0KLWlmKG5vZGUudHlwZT09PXRoaXMucnVsZVR5cGVzLlNUWUxFX1JVTEUpe3N0eWxlUnVsZUNhbGxiYWNrKG5vZGUpO31lbHNlIGlmKGtleWZyYW1lc1J1bGVDYWxsYmFjayYmbm9kZS50eXBlPT09dGhpcy5ydWxlVHlwZXMuS0VZRlJBTUVTX1JVTEUpe2tleWZyYW1lc1J1bGVDYWxsYmFjayhub2RlKTt9ZWxzZSBpZihub2RlLnR5cGU9PT10aGlzLnJ1bGVUeXBlcy5NSVhJTl9SVUxFKXtza2lwUnVsZXM9dHJ1ZTt9Ci12YXIgciQ9bm9kZS5ydWxlcztpZihyJCYmIXNraXBSdWxlcyl7Zm9yKHZhciBpPTAsbD1yJC5sZW5ndGgscjtpPGwmJihyPXIkW2ldKTtpKyspe3RoaXMuZm9yRWFjaFJ1bGUocixzdHlsZVJ1bGVDYWxsYmFjayxrZXlmcmFtZXNSdWxlQ2FsbGJhY2ssb25seUFjdGl2ZVJ1bGVzKTt9fX0sYXBwbHlDc3M6ZnVuY3Rpb24oY3NzVGV4dCxtb25pa2VyLHRhcmdldCxjb250ZXh0Tm9kZSl7dmFyIHN0eWxlPXRoaXMuY3JlYXRlU2NvcGVTdHlsZShjc3NUZXh0LG1vbmlrZXIpO3JldHVybiB0aGlzLmFwcGx5U3R5bGUoc3R5bGUsdGFyZ2V0LGNvbnRleHROb2RlKTt9LGFwcGx5U3R5bGU6ZnVuY3Rpb24oc3R5bGUsdGFyZ2V0LGNvbnRleHROb2RlKXt0YXJnZXQ9dGFyZ2V0fHxkb2N1bWVudC5oZWFkO3ZhciBhZnRlcj1jb250ZXh0Tm9kZSYmY29udGV4dE5vZGUubmV4dFNpYmxpbmd8fHRhcmdldC5maXJzdENoaWxkO3RoaXMuX19sYXN0SGVhZEFwcGx5Tm9kZT1zdHlsZTtyZXR1cm4gdGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSxhZnRlcik7fSxjcmVhdGVTY29wZVN0eWxlOmZ1bmN0aW9uKGNzc1RleHQsbW9uaWtlcil7dmFyIHN0eWxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7aWYobW9uaWtlcil7c3R5bGUuc2V0QXR0cmlidXRlKCdzY29wZScsbW9uaWtlcik7fQotc3R5bGUudGV4dENvbnRlbnQ9Y3NzVGV4dDtyZXR1cm4gc3R5bGU7fSxfX2xhc3RIZWFkQXBwbHlOb2RlOm51bGwsYXBwbHlTdHlsZVBsYWNlSG9sZGVyOmZ1bmN0aW9uKG1vbmlrZXIpe3ZhciBwbGFjZUhvbGRlcj1kb2N1bWVudC5jcmVhdGVDb21tZW50KCcgU2hhZHkgRE9NIHN0eWxlcyBmb3IgJyttb25pa2VyKycgJyk7dmFyIGFmdGVyPXRoaXMuX19sYXN0SGVhZEFwcGx5Tm9kZT90aGlzLl9fbGFzdEhlYWRBcHBseU5vZGUubmV4dFNpYmxpbmc6bnVsbDt2YXIgc2NvcGU9ZG9jdW1lbnQuaGVhZDtzY29wZS5pbnNlcnRCZWZvcmUocGxhY2VIb2xkZXIsYWZ0ZXJ8fHNjb3BlLmZpcnN0Q2hpbGQpO3RoaXMuX19sYXN0SGVhZEFwcGx5Tm9kZT1wbGFjZUhvbGRlcjtyZXR1cm4gcGxhY2VIb2xkZXI7fSxjc3NGcm9tTW9kdWxlczpmdW5jdGlvbihtb2R1bGVJZHMsd2FybklmTm90Rm91bmQpe3ZhciBtb2R1bGVzPW1vZHVsZUlkcy50cmltKCkuc3BsaXQoJyAnKTt2YXIgY3NzVGV4dD0nJztmb3IodmFyIGk9MDtpPG1vZHVsZXMubGVuZ3RoO2krKyl7Y3NzVGV4dCs9dGhpcy5jc3NGcm9tTW9kdWxlKG1vZHVsZXNbaV0sd2FybklmTm90Rm91bmQpO30KLXJldHVybiBjc3NUZXh0O30sY3NzRnJvbU1vZHVsZTpmdW5jdGlvbihtb2R1bGVJZCx3YXJuSWZOb3RGb3VuZCl7dmFyIG09UG9seW1lci5Eb21Nb2R1bGUuaW1wb3J0KG1vZHVsZUlkKTtpZihtJiYhbS5fY3NzVGV4dCl7bS5fY3NzVGV4dD10aGlzLmNzc0Zyb21FbGVtZW50KG0pO30KLWlmKCFtJiZ3YXJuSWZOb3RGb3VuZCl7Y29uc29sZS53YXJuKCdDb3VsZCBub3QgZmluZCBzdHlsZSBkYXRhIGluIG1vZHVsZSBuYW1lZCcsbW9kdWxlSWQpO30KLXJldHVybiBtJiZtLl9jc3NUZXh0fHwnJzt9LGNzc0Zyb21FbGVtZW50OmZ1bmN0aW9uKGVsZW1lbnQpe3ZhciBjc3NUZXh0PScnO3ZhciBjb250ZW50PWVsZW1lbnQuY29udGVudHx8ZWxlbWVudDt2YXIgZSQ9UG9seW1lci5UcmVlQXBpLmFycmF5Q29weShjb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5NT0RVTEVfU1RZTEVTX1NFTEVDVE9SKSk7Zm9yKHZhciBpPTAsZTtpPGUkLmxlbmd0aDtpKyspe2U9ZSRbaV07aWYoZS5sb2NhbE5hbWU9PT0ndGVtcGxhdGUnKXtpZighZS5oYXNBdHRyaWJ1dGUoJ3ByZXNlcnZlLWNvbnRlbnQnKSl7Y3NzVGV4dCs9dGhpcy5jc3NGcm9tRWxlbWVudChlKTt9fWVsc2V7aWYoZS5sb2NhbE5hbWU9PT0nc3R5bGUnKXt2YXIgaW5jbHVkZT1lLmdldEF0dHJpYnV0ZSh0aGlzLklOQ0xVREVfQVRUUik7aWYoaW5jbHVkZSl7Y3NzVGV4dCs9dGhpcy5jc3NGcm9tTW9kdWxlcyhpbmNsdWRlLHRydWUpO30KLWU9ZS5fX2FwcGxpZWRFbGVtZW50fHxlO2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTtjc3NUZXh0Kz10aGlzLnJlc29sdmVDc3MoZS50ZXh0Q29udGVudCxlbGVtZW50Lm93bmVyRG9jdW1lbnQpO31lbHNlIGlmKGUuaW1wb3J0JiZlLmltcG9ydC5ib2R5KXtjc3NUZXh0Kz10aGlzLnJlc29sdmVDc3MoZS5pbXBvcnQuYm9keS50ZXh0Q29udGVudCxlLmltcG9ydCk7fX19Ci1yZXR1cm4gY3NzVGV4dDt9LHN0eWxlSW5jbHVkZXNUb1RlbXBsYXRlOmZ1bmN0aW9uKHRhcmdldFRlbXBsYXRlKXt2YXIgc3R5bGVzPXRhcmdldFRlbXBsYXRlLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGVbaW5jbHVkZV0nKTtmb3IodmFyIGk9MCxzO2k8c3R5bGVzLmxlbmd0aDtpKyspe3M9c3R5bGVzW2ldO3MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5faW5jbHVkZXNUb0ZyYWdtZW50KHMuZ2V0QXR0cmlidXRlKCdpbmNsdWRlJykpLHMpO319LF9pbmNsdWRlc1RvRnJhZ21lbnQ6ZnVuY3Rpb24oc3R5bGVJbmNsdWRlcyl7dmFyIGluY2x1ZGVBcnJheT1zdHlsZUluY2x1ZGVzLnRyaW0oKS5zcGxpdCgnICcpO3ZhciBmcmFnPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtmb3IodmFyIGk9MDtpPGluY2x1ZGVBcnJheS5sZW5ndGg7aSsrKXt2YXIgdD1Qb2x5bWVyLkRvbU1vZHVsZS5pbXBvcnQoaW5jbHVkZUFycmF5W2ldLCd0ZW1wbGF0ZScpO2lmKHQpe3RoaXMuX2FkZFN0eWxlc1RvRnJhZ21lbnQoZnJhZyx0LmNvbnRlbnQpO319Ci1yZXR1cm4gZnJhZzt9LF9hZGRTdHlsZXNUb0ZyYWdtZW50OmZ1bmN0aW9uKGZyYWcsc291cmNlKXt2YXIgcyQ9c291cmNlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3N0eWxlJyk7Zm9yKHZhciBpPTAscztpPHMkLmxlbmd0aDtpKyspe3M9cyRbaV07dmFyIGluY2x1ZGU9cy5nZXRBdHRyaWJ1dGUoJ2luY2x1ZGUnKTtpZihpbmNsdWRlKXtmcmFnLmFwcGVuZENoaWxkKHRoaXMuX2luY2x1ZGVzVG9GcmFnbWVudChpbmNsdWRlKSk7fQotaWYocy50ZXh0Q29udGVudCl7ZnJhZy5hcHBlbmRDaGlsZChzLmNsb25lTm9kZSh0cnVlKSk7fX19LGlzVGFyZ2V0ZWRCdWlsZDpmdW5jdGlvbihidWlsZFR5cGUpe3JldHVybiBzZXR0aW5ncy51c2VOYXRpdmVTaGFkb3c/YnVpbGRUeXBlPT09J3NoYWRvdyc6YnVpbGRUeXBlPT09J3NoYWR5Jzt9LGNzc0J1aWxkVHlwZUZvck1vZHVsZTpmdW5jdGlvbihtb2R1bGUpe3ZhciBkbT1Qb2x5bWVyLkRvbU1vZHVsZS5pbXBvcnQobW9kdWxlKTtpZihkbSl7cmV0dXJuIHRoaXMuZ2V0Q3NzQnVpbGRUeXBlKGRtKTt9fSxnZXRDc3NCdWlsZFR5cGU6ZnVuY3Rpb24oZWxlbWVudCl7cmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjc3MtYnVpbGQnKTt9LF9maW5kTWF0Y2hpbmdQYXJlbjpmdW5jdGlvbih0ZXh0LHN0YXJ0KXt2YXIgbGV2ZWw9MDtmb3IodmFyIGk9c3RhcnQsbD10ZXh0Lmxlbmd0aDtpPGw7aSsrKXtzd2l0Y2godGV4dFtpXSl7Y2FzZScoJzpsZXZlbCsrO2JyZWFrO2Nhc2UnKSc6aWYoLS1sZXZlbD09PTApe3JldHVybiBpO30KLWJyZWFrO319Ci1yZXR1cm4tMTt9LHByb2Nlc3NWYXJpYWJsZUFuZEZhbGxiYWNrOmZ1bmN0aW9uKHN0cixjYWxsYmFjayl7dmFyIHN0YXJ0PXN0ci5pbmRleE9mKCd2YXIoJyk7aWYoc3RhcnQ9PT0tMSl7cmV0dXJuIGNhbGxiYWNrKHN0ciwnJywnJywnJyk7fQotdmFyIGVuZD10aGlzLl9maW5kTWF0Y2hpbmdQYXJlbihzdHIsc3RhcnQrMyk7dmFyIGlubmVyPXN0ci5zdWJzdHJpbmcoc3RhcnQrNCxlbmQpO3ZhciBwcmVmaXg9c3RyLnN1YnN0cmluZygwLHN0YXJ0KTt2YXIgc3VmZml4PXRoaXMucHJvY2Vzc1ZhcmlhYmxlQW5kRmFsbGJhY2soc3RyLnN1YnN0cmluZyhlbmQrMSksY2FsbGJhY2spO3ZhciBjb21tYT1pbm5lci5pbmRleE9mKCcsJyk7aWYoY29tbWE9PT0tMSl7cmV0dXJuIGNhbGxiYWNrKHByZWZpeCxpbm5lci50cmltKCksJycsc3VmZml4KTt9Ci12YXIgdmFsdWU9aW5uZXIuc3Vic3RyaW5nKDAsY29tbWEpLnRyaW0oKTt2YXIgZmFsbGJhY2s9aW5uZXIuc3Vic3RyaW5nKGNvbW1hKzEpLnRyaW0oKTtyZXR1cm4gY2FsbGJhY2socHJlZml4LHZhbHVlLGZhbGxiYWNrLHN1ZmZpeCk7fSxyeDp7VkFSX0FTU0lHTjovKD86XnxbO1xze11ccyopKC0tW1x3LV0qPylccyo6XHMqKD86KFteO3tdKil8eyhbXn1dKil9KSg/Oig/PVs7XHN9XSl8JCkvZ2ksTUlYSU5fTUFUQ0g6Lyg/Ol58XFcrKUBhcHBseVxzKlwoPyhbXik7XG5dKilcKT8vZ2ksVkFSX0NPTlNVTUVEOi8oLS1bXHctXSspXHMqKFs6LDspXXwkKS9naSxBTklNQVRJT05fTUFUQ0g6LyhhbmltYXRpb25ccyo6KXwoYW5pbWF0aW9uLW5hbWVccyo6KS8sTUVESUFfTUFUQ0g6L0BtZWRpYVteKF0qKFwoW14pXSpcKSkvLElTX1ZBUjovXi0tLyxCUkFDS0VURUQ6L1x7W159XSpcfS9nLEhPU1RfUFJFRklYOicoPzpefFteLiNbOl0pJyxIT1NUX1NVRkZJWDonKCR8Wy46W1xccz4rfl0pJ30scmVzb2x2ZUNzczpQb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZUNzcyxwYXJzZXI6UG9seW1lci5Dc3NQYXJzZSxydWxlVHlwZXM6UG9seW1lci5Dc3NQYXJzZS50eXBlc307fSgpO1BvbHltZXIuU3R5bGVUcmFuc2Zvcm1lcj1mdW5jdGlvbigpe3ZhciBzdHlsZVV0aWw9UG9seW1lci5TdHlsZVV0aWw7dmFyIHNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7dmFyIGFwaT17ZG9tOmZ1bmN0aW9uKG5vZGUsc2NvcGUsdXNlQXR0cixzaG91bGRSZW1vdmVTY29wZSl7dGhpcy5fdHJhbnNmb3JtRG9tKG5vZGUsc2NvcGV8fCcnLHVzZUF0dHIsc2hvdWxkUmVtb3ZlU2NvcGUpO30sX3RyYW5zZm9ybURvbTpmdW5jdGlvbihub2RlLHNlbGVjdG9yLHVzZUF0dHIsc2hvdWxkUmVtb3ZlU2NvcGUpe2lmKG5vZGUuc2V0QXR0cmlidXRlKXt0aGlzLmVsZW1lbnQobm9kZSxzZWxlY3Rvcix1c2VBdHRyLHNob3VsZFJlbW92ZVNjb3BlKTt9Ci12YXIgYyQ9UG9seW1lci5kb20obm9kZSkuY2hpbGROb2Rlcztmb3IodmFyIGk9MDtpPGMkLmxlbmd0aDtpKyspe3RoaXMuX3RyYW5zZm9ybURvbShjJFtpXSxzZWxlY3Rvcix1c2VBdHRyLHNob3VsZFJlbW92ZVNjb3BlKTt9fSxlbGVtZW50OmZ1bmN0aW9uKGVsZW1lbnQsc2NvcGUsdXNlQXR0cixzaG91bGRSZW1vdmVTY29wZSl7aWYodXNlQXR0cil7aWYoc2hvdWxkUmVtb3ZlU2NvcGUpe2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFNDT1BFX05BTUUpO31lbHNle2VsZW1lbnQuc2V0QXR0cmlidXRlKFNDT1BFX05BTUUsc2NvcGUpO319ZWxzZXtpZihzY29wZSl7aWYoZWxlbWVudC5jbGFzc0xpc3Qpe2lmKHNob3VsZFJlbW92ZVNjb3BlKXtlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoU0NPUEVfTkFNRSk7ZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHNjb3BlKTt9ZWxzZXtlbGVtZW50LmNsYXNzTGlzdC5hZGQoU0NPUEVfTkFNRSk7ZWxlbWVudC5jbGFzc0xpc3QuYWRkKHNjb3BlKTt9fWVsc2UgaWYoZWxlbWVudC5nZXRBdHRyaWJ1dGUpe3ZhciBjPWVsZW1lbnQuZ2V0QXR0cmlidXRlKENMQVNTKTtpZihzaG91bGRSZW1vdmVTY29wZSl7aWYoYyl7ZWxlbWVudC5zZXRBdHRyaWJ1dGUoQ0xBU1MsYy5yZXBsYWNlKFNDT1BFX05BTUUsJycpLnJlcGxhY2Uoc2NvcGUsJycpKTt9fWVsc2V7ZWxlbWVudC5zZXRBdHRyaWJ1dGUoQ0xBU1MsKGM/YysnICc6JycpK1NDT1BFX05BTUUrJyAnK3Njb3BlKTt9fX19fSxlbGVtZW50U3R5bGVzOmZ1bmN0aW9uKGVsZW1lbnQsY2FsbGJhY2spe3ZhciBzdHlsZXM9ZWxlbWVudC5fc3R5bGVzO3ZhciBjc3NUZXh0PScnO3ZhciBjc3NCdWlsZFR5cGU9ZWxlbWVudC5fX2Nzc0J1aWxkO3ZhciBwYXNzdGhyb3VnaD1zZXR0aW5ncy51c2VOYXRpdmVTaGFkb3d8fGNzc0J1aWxkVHlwZT09PSdzaGFkeSc7dmFyIGNiO2lmKHBhc3N0aHJvdWdoKXt2YXIgc2VsZj10aGlzO2NiPWZ1bmN0aW9uKHJ1bGUpe3J1bGUuc2VsZWN0b3I9c2VsZi5fc2xvdHRlZFRvQ29udGVudChydWxlLnNlbGVjdG9yKTtydWxlLnNlbGVjdG9yPXJ1bGUuc2VsZWN0b3IucmVwbGFjZShST09ULCc6aG9zdCA+IConKTtpZihjYWxsYmFjayl7Y2FsbGJhY2socnVsZSk7fX07fQotZm9yKHZhciBpPTAsbD1zdHlsZXMubGVuZ3RoLHM7aTxsJiYocz1zdHlsZXNbaV0pO2krKyl7dmFyIHJ1bGVzPXN0eWxlVXRpbC5ydWxlc0ZvclN0eWxlKHMpO2Nzc1RleHQrPXBhc3N0aHJvdWdoP3N0eWxlVXRpbC50b0Nzc1RleHQocnVsZXMsY2IpOnRoaXMuY3NzKHJ1bGVzLGVsZW1lbnQuaXMsZWxlbWVudC5leHRlbmRzLGNhbGxiYWNrLGVsZW1lbnQuX3Njb3BlQ3NzVmlhQXR0cikrJ1xuXG4nO30KLXJldHVybiBjc3NUZXh0LnRyaW0oKTt9LGNzczpmdW5jdGlvbihydWxlcyxzY29wZSxleHQsY2FsbGJhY2ssdXNlQXR0cil7dmFyIGhvc3RTY29wZT10aGlzLl9jYWxjSG9zdFNjb3BlKHNjb3BlLGV4dCk7c2NvcGU9dGhpcy5fY2FsY0VsZW1lbnRTY29wZShzY29wZSx1c2VBdHRyKTt2YXIgc2VsZj10aGlzO3JldHVybiBzdHlsZVV0aWwudG9Dc3NUZXh0KHJ1bGVzLGZ1bmN0aW9uKHJ1bGUpe2lmKCFydWxlLmlzU2NvcGVkKXtzZWxmLnJ1bGUocnVsZSxzY29wZSxob3N0U2NvcGUpO3J1bGUuaXNTY29wZWQ9dHJ1ZTt9Ci1pZihjYWxsYmFjayl7Y2FsbGJhY2socnVsZSxzY29wZSxob3N0U2NvcGUpO319KTt9LF9jYWxjRWxlbWVudFNjb3BlOmZ1bmN0aW9uKHNjb3BlLHVzZUF0dHIpe2lmKHNjb3BlKXtyZXR1cm4gdXNlQXR0cj9DU1NfQVRUUl9QUkVGSVgrc2NvcGUrQ1NTX0FUVFJfU1VGRklYOkNTU19DTEFTU19QUkVGSVgrc2NvcGU7fWVsc2V7cmV0dXJuJyc7fX0sX2NhbGNIb3N0U2NvcGU6ZnVuY3Rpb24oc2NvcGUsZXh0KXtyZXR1cm4gZXh0PydbaXM9JytzY29wZSsnXSc6c2NvcGU7fSxydWxlOmZ1bmN0aW9uKHJ1bGUsc2NvcGUsaG9zdFNjb3BlKXt0aGlzLl90cmFuc2Zvcm1SdWxlKHJ1bGUsdGhpcy5fdHJhbnNmb3JtQ29tcGxleFNlbGVjdG9yLHNjb3BlLGhvc3RTY29wZSk7fSxfdHJhbnNmb3JtUnVsZTpmdW5jdGlvbihydWxlLHRyYW5zZm9ybWVyLHNjb3BlLGhvc3RTY29wZSl7cnVsZS5zZWxlY3Rvcj1ydWxlLnRyYW5zZm9ybWVkU2VsZWN0b3I9dGhpcy5fdHJhbnNmb3JtUnVsZUNzcyhydWxlLHRyYW5zZm9ybWVyLHNjb3BlLGhvc3RTY29wZSk7fSxfdHJhbnNmb3JtUnVsZUNzczpmdW5jdGlvbihydWxlLHRyYW5zZm9ybWVyLHNjb3BlLGhvc3RTY29wZSl7dmFyIHAkPXJ1bGUuc2VsZWN0b3Iuc3BsaXQoQ09NUExFWF9TRUxFQ1RPUl9TRVApO2lmKCFzdHlsZVV0aWwuaXNLZXlmcmFtZXNTZWxlY3RvcihydWxlKSl7Zm9yKHZhciBpPTAsbD1wJC5sZW5ndGgscDtpPGwmJihwPXAkW2ldKTtpKyspe3AkW2ldPXRyYW5zZm9ybWVyLmNhbGwodGhpcyxwLHNjb3BlLGhvc3RTY29wZSk7fX0KLXJldHVybiBwJC5qb2luKENPTVBMRVhfU0VMRUNUT1JfU0VQKTt9LF90cmFuc2Zvcm1Db21wbGV4U2VsZWN0b3I6ZnVuY3Rpb24oc2VsZWN0b3Isc2NvcGUsaG9zdFNjb3BlKXt2YXIgc3RvcD1mYWxzZTt2YXIgaG9zdENvbnRleHQ9ZmFsc2U7dmFyIHNlbGY9dGhpcztzZWxlY3Rvcj1zZWxlY3Rvci50cmltKCk7c2VsZWN0b3I9dGhpcy5fc2xvdHRlZFRvQ29udGVudChzZWxlY3Rvcik7c2VsZWN0b3I9c2VsZWN0b3IucmVwbGFjZShST09ULCc6aG9zdCA+IConKTtzZWxlY3Rvcj1zZWxlY3Rvci5yZXBsYWNlKENPTlRFTlRfU1RBUlQsSE9TVCsnICQxJyk7c2VsZWN0b3I9c2VsZWN0b3IucmVwbGFjZShTSU1QTEVfU0VMRUNUT1JfU0VQLGZ1bmN0aW9uKG0sYyxzKXtpZighc3RvcCl7dmFyIGluZm89c2VsZi5fdHJhbnNmb3JtQ29tcG91bmRTZWxlY3RvcihzLGMsc2NvcGUsaG9zdFNjb3BlKTtzdG9wPXN0b3B8fGluZm8uc3RvcDtob3N0Q29udGV4dD1ob3N0Q29udGV4dHx8aW5mby5ob3N0Q29udGV4dDtjPWluZm8uY29tYmluYXRvcjtzPWluZm8udmFsdWU7fWVsc2V7cz1zLnJlcGxhY2UoU0NPUEVfSlVNUCwnICcpO30KLXJldHVybiBjK3M7fSk7aWYoaG9zdENvbnRleHQpe3NlbGVjdG9yPXNlbGVjdG9yLnJlcGxhY2UoSE9TVF9DT05URVhUX1BBUkVOLGZ1bmN0aW9uKG0scHJlLHBhcmVuLHBvc3Qpe3JldHVybiBwcmUrcGFyZW4rJyAnK2hvc3RTY29wZStwb3N0K0NPTVBMRVhfU0VMRUNUT1JfU0VQKycgJytwcmUraG9zdFNjb3BlK3BhcmVuK3Bvc3Q7fSk7fQotcmV0dXJuIHNlbGVjdG9yO30sX3RyYW5zZm9ybUNvbXBvdW5kU2VsZWN0b3I6ZnVuY3Rpb24oc2VsZWN0b3IsY29tYmluYXRvcixzY29wZSxob3N0U2NvcGUpe3ZhciBqdW1wSW5kZXg9c2VsZWN0b3Iuc2VhcmNoKFNDT1BFX0pVTVApO3ZhciBob3N0Q29udGV4dD1mYWxzZTtpZihzZWxlY3Rvci5pbmRleE9mKEhPU1RfQ09OVEVYVCk+PTApe2hvc3RDb250ZXh0PXRydWU7fWVsc2UgaWYoc2VsZWN0b3IuaW5kZXhPZihIT1NUKT49MCl7c2VsZWN0b3I9dGhpcy5fdHJhbnNmb3JtSG9zdFNlbGVjdG9yKHNlbGVjdG9yLGhvc3RTY29wZSk7fWVsc2UgaWYoanVtcEluZGV4IT09MCl7c2VsZWN0b3I9c2NvcGU/dGhpcy5fdHJhbnNmb3JtU2ltcGxlU2VsZWN0b3Ioc2VsZWN0b3Isc2NvcGUpOnNlbGVjdG9yO30KLWlmKHNlbGVjdG9yLmluZGV4T2YoQ09OVEVOVCk+PTApe2NvbWJpbmF0b3I9Jyc7fQotdmFyIHN0b3A7aWYoanVtcEluZGV4Pj0wKXtzZWxlY3Rvcj1zZWxlY3Rvci5yZXBsYWNlKFNDT1BFX0pVTVAsJyAnKTtzdG9wPXRydWU7fQotcmV0dXJue3ZhbHVlOnNlbGVjdG9yLGNvbWJpbmF0b3I6Y29tYmluYXRvcixzdG9wOnN0b3AsaG9zdENvbnRleHQ6aG9zdENvbnRleHR9O30sX3RyYW5zZm9ybVNpbXBsZVNlbGVjdG9yOmZ1bmN0aW9uKHNlbGVjdG9yLHNjb3BlKXt2YXIgcCQ9c2VsZWN0b3Iuc3BsaXQoUFNFVURPX1BSRUZJWCk7cCRbMF0rPXNjb3BlO3JldHVybiBwJC5qb2luKFBTRVVET19QUkVGSVgpO30sX3RyYW5zZm9ybUhvc3RTZWxlY3RvcjpmdW5jdGlvbihzZWxlY3Rvcixob3N0U2NvcGUpe3ZhciBtPXNlbGVjdG9yLm1hdGNoKEhPU1RfUEFSRU4pO3ZhciBwYXJlbj1tJiZtWzJdLnRyaW0oKXx8Jyc7aWYocGFyZW4pe2lmKCFwYXJlblswXS5tYXRjaChTSU1QTEVfU0VMRUNUT1JfUFJFRklYKSl7dmFyIHR5cGVTZWxlY3Rvcj1wYXJlbi5zcGxpdChTSU1QTEVfU0VMRUNUT1JfUFJFRklYKVswXTtpZih0eXBlU2VsZWN0b3I9PT1ob3N0U2NvcGUpe3JldHVybiBwYXJlbjt9ZWxzZXtyZXR1cm4gU0VMRUNUT1JfTk9fTUFUQ0g7fX1lbHNle3JldHVybiBzZWxlY3Rvci5yZXBsYWNlKEhPU1RfUEFSRU4sZnVuY3Rpb24obSxob3N0LHBhcmVuKXtyZXR1cm4gaG9zdFNjb3BlK3BhcmVuO30pO319ZWxzZXtyZXR1cm4gc2VsZWN0b3IucmVwbGFjZShIT1NULGhvc3RTY29wZSk7fX0sZG9jdW1lbnRSdWxlOmZ1bmN0aW9uKHJ1bGUpe3J1bGUuc2VsZWN0b3I9cnVsZS5wYXJzZWRTZWxlY3Rvcjt0aGlzLm5vcm1hbGl6ZVJvb3RTZWxlY3RvcihydWxlKTtpZighc2V0dGluZ3MudXNlTmF0aXZlU2hhZG93KXt0aGlzLl90cmFuc2Zvcm1SdWxlKHJ1bGUsdGhpcy5fdHJhbnNmb3JtRG9jdW1lbnRTZWxlY3Rvcik7fX0sbm9ybWFsaXplUm9vdFNlbGVjdG9yOmZ1bmN0aW9uKHJ1bGUpe3J1bGUuc2VsZWN0b3I9cnVsZS5zZWxlY3Rvci5yZXBsYWNlKFJPT1QsJ2h0bWwnKTt2YXIgcGFydHM9cnVsZS5zZWxlY3Rvci5zcGxpdChDT01QTEVYX1NFTEVDVE9SX1NFUCk7cGFydHM9cGFydHMuZmlsdGVyKGZ1bmN0aW9uKHBhcnQpe3JldHVybiFwYXJ0Lm1hdGNoKEhPU1RfT1JfSE9TVF9HVF9TVEFSKTt9KTtydWxlLnNlbGVjdG9yPXBhcnRzLmpvaW4oQ09NUExFWF9TRUxFQ1RPUl9TRVApO30sX3RyYW5zZm9ybURvY3VtZW50U2VsZWN0b3I6ZnVuY3Rpb24oc2VsZWN0b3Ipe3JldHVybiBzZWxlY3Rvci5tYXRjaChTQ09QRV9KVU1QKT90aGlzLl90cmFuc2Zvcm1Db21wbGV4U2VsZWN0b3Ioc2VsZWN0b3IsU0NPUEVfRE9DX1NFTEVDVE9SKTp0aGlzLl90cmFuc2Zvcm1TaW1wbGVTZWxlY3RvcihzZWxlY3Rvci50cmltKCksU0NPUEVfRE9DX1NFTEVDVE9SKTt9LF9zbG90dGVkVG9Db250ZW50OmZ1bmN0aW9uKGNzc1RleHQpe3JldHVybiBjc3NUZXh0LnJlcGxhY2UoU0xPVFRFRF9QQVJFTixDT05URU5UKyc+ICQxJyk7fSxTQ09QRV9OQU1FOidzdHlsZS1zY29wZSd9O3ZhciBTQ09QRV9OQU1FPWFwaS5TQ09QRV9OQU1FO3ZhciBTQ09QRV9ET0NfU0VMRUNUT1I9Jzpub3QoWycrU0NPUEVfTkFNRSsnXSknKyc6bm90KC4nK1NDT1BFX05BTUUrJyknO3ZhciBDT01QTEVYX1NFTEVDVE9SX1NFUD0nLCc7dmFyIFNJTVBMRV9TRUxFQ1RPUl9TRVA9LyhefFtccz4rfl0rKSgoPzpcWy4rP1xdfFteXHM+K349XFtdKSspL2c7dmFyIFNJTVBMRV9TRUxFQ1RPUl9QUkVGSVg9L1tbLjojKl0vO3ZhciBIT1NUPSc6aG9zdCc7dmFyIFJPT1Q9Jzpyb290Jzt2YXIgSE9TVF9QQVJFTj0vKDpob3N0KSg/OlwoKCg/OlwoW14pKF0qXCl8W14pKF0qKSs/KVwpKS87dmFyIEhPU1RfQ09OVEVYVD0nOmhvc3QtY29udGV4dCc7dmFyIEhPU1RfQ09OVEVYVF9QQVJFTj0vKC4qKSg/Ojpob3N0LWNvbnRleHQpKD86XCgoKD86XChbXikoXSpcKXxbXikoXSopKz8pXCkpKC4qKS87dmFyIENPTlRFTlQ9Jzo6Y29udGVudCc7dmFyIFNDT1BFX0pVTVA9Lzo6Y29udGVudHw6OnNoYWRvd3xcL2RlZXBcLy87dmFyIENTU19DTEFTU19QUkVGSVg9Jy4nO3ZhciBDU1NfQVRUUl9QUkVGSVg9J1snK1NDT1BFX05BTUUrJ349Jzt2YXIgQ1NTX0FUVFJfU1VGRklYPSddJzt2YXIgUFNFVURPX1BSRUZJWD0nOic7dmFyIENMQVNTPSdjbGFzcyc7dmFyIENPTlRFTlRfU1RBUlQ9bmV3IFJlZ0V4cCgnXignK0NPTlRFTlQrJyknKTt2YXIgU0VMRUNUT1JfTk9fTUFUQ0g9J3Nob3VsZF9ub3RfbWF0Y2gnO3ZhciBTTE9UVEVEX1BBUkVOPS8oPzo6OnNsb3R0ZWQpKD86XCgoKD86XChbXikoXSpcKXxbXikoXSopKz8pXCkpL2c7dmFyIEhPU1RfT1JfSE9TVF9HVF9TVEFSPS86aG9zdCg/OlxzKj5ccypcKik/LztyZXR1cm4gYXBpO30oKTtQb2x5bWVyLlN0eWxlRXh0ZW5kcz1mdW5jdGlvbigpe3ZhciBzdHlsZVV0aWw9UG9seW1lci5TdHlsZVV0aWw7cmV0dXJue2hhc0V4dGVuZHM6ZnVuY3Rpb24oY3NzVGV4dCl7cmV0dXJuIEJvb2xlYW4oY3NzVGV4dC5tYXRjaCh0aGlzLnJ4LkVYVEVORCkpO30sdHJhbnNmb3JtOmZ1bmN0aW9uKHN0eWxlKXt2YXIgcnVsZXM9c3R5bGVVdGlsLnJ1bGVzRm9yU3R5bGUoc3R5bGUpO3ZhciBzZWxmPXRoaXM7c3R5bGVVdGlsLmZvckVhY2hSdWxlKHJ1bGVzLGZ1bmN0aW9uKHJ1bGUpe3NlbGYuX21hcFJ1bGVPbnRvUGFyZW50KHJ1bGUpO2lmKHJ1bGUucGFyZW50KXt2YXIgbTt3aGlsZShtPXNlbGYucnguRVhURU5ELmV4ZWMocnVsZS5jc3NUZXh0KSl7dmFyIGV4dGVuZD1tWzFdO3ZhciBleHRlbmRvcj1zZWxmLl9maW5kRXh0ZW5kb3IoZXh0ZW5kLHJ1bGUpO2lmKGV4dGVuZG9yKXtzZWxmLl9leHRlbmRSdWxlKHJ1bGUsZXh0ZW5kb3IpO319fQotcnVsZS5jc3NUZXh0PXJ1bGUuY3NzVGV4dC5yZXBsYWNlKHNlbGYucnguRVhURU5ELCcnKTt9KTtyZXR1cm4gc3R5bGVVdGlsLnRvQ3NzVGV4dChydWxlcyxmdW5jdGlvbihydWxlKXtpZihydWxlLnNlbGVjdG9yLm1hdGNoKHNlbGYucnguU1RSSVApKXtydWxlLmNzc1RleHQ9Jyc7fX0sdHJ1ZSk7fSxfbWFwUnVsZU9udG9QYXJlbnQ6ZnVuY3Rpb24ocnVsZSl7aWYocnVsZS5wYXJlbnQpe3ZhciBtYXA9cnVsZS5wYXJlbnQubWFwfHwocnVsZS5wYXJlbnQubWFwPXt9KTt2YXIgcGFydHM9cnVsZS5zZWxlY3Rvci5zcGxpdCgnLCcpO2Zvcih2YXIgaT0wLHA7aTxwYXJ0cy5sZW5ndGg7aSsrKXtwPXBhcnRzW2ldO21hcFtwLnRyaW0oKV09cnVsZTt9Ci1yZXR1cm4gbWFwO319LF9maW5kRXh0ZW5kb3I6ZnVuY3Rpb24oZXh0ZW5kLHJ1bGUpe3JldHVybiBydWxlLnBhcmVudCYmcnVsZS5wYXJlbnQubWFwJiZydWxlLnBhcmVudC5tYXBbZXh0ZW5kXXx8dGhpcy5fZmluZEV4dGVuZG9yKGV4dGVuZCxydWxlLnBhcmVudCk7fSxfZXh0ZW5kUnVsZTpmdW5jdGlvbih0YXJnZXQsc291cmNlKXtpZih0YXJnZXQucGFyZW50IT09c291cmNlLnBhcmVudCl7dGhpcy5fY2xvbmVBbmRBZGRSdWxlVG9QYXJlbnQoc291cmNlLHRhcmdldC5wYXJlbnQpO30KLXRhcmdldC5leHRlbmRzPXRhcmdldC5leHRlbmRzfHxbXTt0YXJnZXQuZXh0ZW5kcy5wdXNoKHNvdXJjZSk7c291cmNlLnNlbGVjdG9yPXNvdXJjZS5zZWxlY3Rvci5yZXBsYWNlKHRoaXMucnguU1RSSVAsJycpO3NvdXJjZS5zZWxlY3Rvcj0oc291cmNlLnNlbGVjdG9yJiZzb3VyY2Uuc2VsZWN0b3IrJyxcbicpK3RhcmdldC5zZWxlY3RvcjtpZihzb3VyY2UuZXh0ZW5kcyl7c291cmNlLmV4dGVuZHMuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLl9leHRlbmRSdWxlKHRhcmdldCxlKTt9LHRoaXMpO319LF9jbG9uZUFuZEFkZFJ1bGVUb1BhcmVudDpmdW5jdGlvbihydWxlLHBhcmVudCl7cnVsZT1PYmplY3QuY3JlYXRlKHJ1bGUpO3J1bGUucGFyZW50PXBhcmVudDtpZihydWxlLmV4dGVuZHMpe3J1bGUuZXh0ZW5kcz1ydWxlLmV4dGVuZHMuc2xpY2UoKTt9Ci1wYXJlbnQucnVsZXMucHVzaChydWxlKTt9LHJ4OntFWFRFTkQ6L0BleHRlbmRzXCgoW14pXSopXClccyo/Oy9naW0sU1RSSVA6LyVbXixdKiQvfX07fSgpO1BvbHltZXIuQXBwbHlTaGltPWZ1bmN0aW9uKCl7J3VzZSBzdHJpY3QnO3ZhciBzdHlsZVV0aWw9UG9seW1lci5TdHlsZVV0aWw7dmFyIE1JWElOX01BVENIPXN0eWxlVXRpbC5yeC5NSVhJTl9NQVRDSDt2YXIgVkFSX0FTU0lHTj1zdHlsZVV0aWwucnguVkFSX0FTU0lHTjt2YXIgQkFEX1ZBUj0vdmFyXChccyooLS1bXixdKiksXHMqKC0tW14pXSopXCkvZzt2YXIgQVBQTFlfTkFNRV9DTEVBTj0vO1xzKi9tO3ZhciBJTklUSUFMX0lOSEVSSVQ9L15ccyooaW5pdGlhbCl8KGluaGVyaXQpXHMqJC87dmFyIE1JWElOX1ZBUl9TRVA9J18tXyc7dmFyIG1peGluTWFwPXt9O2Z1bmN0aW9uIG1hcFNldChuYW1lLHByb3BzKXtuYW1lPW5hbWUudHJpbSgpO21peGluTWFwW25hbWVdPXtwcm9wZXJ0aWVzOnByb3BzLGRlcGVuZGFudHM6e319O30KLWZ1bmN0aW9uIG1hcEdldChuYW1lKXtuYW1lPW5hbWUudHJpbSgpO3JldHVybiBtaXhpbk1hcFtuYW1lXTt9Ci1mdW5jdGlvbiByZXBsYWNlSW5pdGlhbE9ySW5oZXJpdChwcm9wZXJ0eSx2YWx1ZSl7dmFyIG1hdGNoPUlOSVRJQUxfSU5IRVJJVC5leGVjKHZhbHVlKTtpZihtYXRjaCl7aWYobWF0Y2hbMV0pe3ZhbHVlPUFwcGx5U2hpbS5fZ2V0SW5pdGlhbFZhbHVlRm9yUHJvcGVydHkocHJvcGVydHkpO31lbHNle3ZhbHVlPSdhcHBseS1zaGltLWluaGVyaXQnO319Ci1yZXR1cm4gdmFsdWU7fQotZnVuY3Rpb24gY3NzVGV4dFRvTWFwKHRleHQpe3ZhciBwcm9wcz10ZXh0LnNwbGl0KCc7Jyk7dmFyIHByb3BlcnR5LHZhbHVlO3ZhciBvdXQ9e307Zm9yKHZhciBpPTAscCxzcDtpPHByb3BzLmxlbmd0aDtpKyspe3A9cHJvcHNbaV07aWYocCl7c3A9cC5zcGxpdCgnOicpO2lmKHNwLmxlbmd0aD4xKXtwcm9wZXJ0eT1zcFswXS50cmltKCk7dmFsdWU9cmVwbGFjZUluaXRpYWxPckluaGVyaXQocHJvcGVydHksc3Auc2xpY2UoMSkuam9pbignOicpKTtvdXRbcHJvcGVydHldPXZhbHVlO319fQotcmV0dXJuIG91dDt9Ci1mdW5jdGlvbiBpbnZhbGlkYXRlTWl4aW5FbnRyeShtaXhpbkVudHJ5KXt2YXIgY3VycmVudFByb3RvPUFwcGx5U2hpbS5fX2N1cnJlbnRFbGVtZW50UHJvdG87dmFyIGN1cnJlbnRFbGVtZW50TmFtZT1jdXJyZW50UHJvdG8mJmN1cnJlbnRQcm90by5pcztmb3IodmFyIGVsZW1lbnROYW1lIGluIG1peGluRW50cnkuZGVwZW5kYW50cyl7aWYoZWxlbWVudE5hbWUhPT1jdXJyZW50RWxlbWVudE5hbWUpe21peGluRW50cnkuZGVwZW5kYW50c1tlbGVtZW50TmFtZV0uX19hcHBseVNoaW1JbnZhbGlkPXRydWU7fX19Ci1mdW5jdGlvbiBwcm9kdWNlQ3NzUHJvcGVydGllcyhtYXRjaFRleHQscHJvcGVydHlOYW1lLHZhbHVlUHJvcGVydHksdmFsdWVNaXhpbil7aWYodmFsdWVQcm9wZXJ0eSl7c3R5bGVVdGlsLnByb2Nlc3NWYXJpYWJsZUFuZEZhbGxiYWNrKHZhbHVlUHJvcGVydHksZnVuY3Rpb24ocHJlZml4LHZhbHVlKXtpZih2YWx1ZSYmbWFwR2V0KHZhbHVlKSl7dmFsdWVNaXhpbj0nQGFwcGx5ICcrdmFsdWUrJzsnO319KTt9Ci1pZighdmFsdWVNaXhpbil7cmV0dXJuIG1hdGNoVGV4dDt9Ci12YXIgbWl4aW5Bc1Byb3BlcnRpZXM9Y29uc3VtZUNzc1Byb3BlcnRpZXModmFsdWVNaXhpbik7dmFyIHByZWZpeD1tYXRjaFRleHQuc2xpY2UoMCxtYXRjaFRleHQuaW5kZXhPZignLS0nKSk7dmFyIG1peGluVmFsdWVzPWNzc1RleHRUb01hcChtaXhpbkFzUHJvcGVydGllcyk7dmFyIGNvbWJpbmVkUHJvcHM9bWl4aW5WYWx1ZXM7dmFyIG1peGluRW50cnk9bWFwR2V0KHByb3BlcnR5TmFtZSk7dmFyIG9sZFByb3BzPW1peGluRW50cnkmJm1peGluRW50cnkucHJvcGVydGllcztpZihvbGRQcm9wcyl7Y29tYmluZWRQcm9wcz1PYmplY3QuY3JlYXRlKG9sZFByb3BzKTtjb21iaW5lZFByb3BzPVBvbHltZXIuQmFzZS5taXhpbihjb21iaW5lZFByb3BzLG1peGluVmFsdWVzKTt9ZWxzZXttYXBTZXQocHJvcGVydHlOYW1lLGNvbWJpbmVkUHJvcHMpO30KLXZhciBvdXQ9W107dmFyIHAsdjt2YXIgbmVlZFRvSW52YWxpZGF0ZT1mYWxzZTtmb3IocCBpbiBjb21iaW5lZFByb3BzKXt2PW1peGluVmFsdWVzW3BdO2lmKHY9PT11bmRlZmluZWQpe3Y9J2luaXRpYWwnO30KLWlmKG9sZFByb3BzJiYhKHAgaW4gb2xkUHJvcHMpKXtuZWVkVG9JbnZhbGlkYXRlPXRydWU7fQotb3V0LnB1c2gocHJvcGVydHlOYW1lK01JWElOX1ZBUl9TRVArcCsnOiAnK3YpO30KLWlmKG5lZWRUb0ludmFsaWRhdGUpe2ludmFsaWRhdGVNaXhpbkVudHJ5KG1peGluRW50cnkpO30KLWlmKG1peGluRW50cnkpe21peGluRW50cnkucHJvcGVydGllcz1jb21iaW5lZFByb3BzO30KLWlmKHZhbHVlUHJvcGVydHkpe3ByZWZpeD1tYXRjaFRleHQrJzsnK3ByZWZpeDt9Ci1yZXR1cm4gcHJlZml4K291dC5qb2luKCc7ICcpKyc7Jzt9Ci1mdW5jdGlvbiBmaXhWYXJzKG1hdGNoVGV4dCx2YXJBLHZhckIpe3JldHVybid2YXIoJyt2YXJBKycsJysndmFyKCcrdmFyQisnKSknO30KLWZ1bmN0aW9uIGF0QXBwbHlUb0Nzc1Byb3BlcnRpZXMobWl4aW5OYW1lLGZhbGxiYWNrcyl7bWl4aW5OYW1lPW1peGluTmFtZS5yZXBsYWNlKEFQUExZX05BTUVfQ0xFQU4sJycpO3ZhciB2YXJzPVtdO3ZhciBtaXhpbkVudHJ5PW1hcEdldChtaXhpbk5hbWUpO2lmKCFtaXhpbkVudHJ5KXttYXBTZXQobWl4aW5OYW1lLHt9KTttaXhpbkVudHJ5PW1hcEdldChtaXhpbk5hbWUpO30KLWlmKG1peGluRW50cnkpe3ZhciBjdXJyZW50UHJvdG89QXBwbHlTaGltLl9fY3VycmVudEVsZW1lbnRQcm90bztpZihjdXJyZW50UHJvdG8pe21peGluRW50cnkuZGVwZW5kYW50c1tjdXJyZW50UHJvdG8uaXNdPWN1cnJlbnRQcm90bzt9Ci12YXIgcCxwYXJ0cyxmO2ZvcihwIGluIG1peGluRW50cnkucHJvcGVydGllcyl7Zj1mYWxsYmFja3MmJmZhbGxiYWNrc1twXTtwYXJ0cz1bcCwnOiB2YXIoJyxtaXhpbk5hbWUsTUlYSU5fVkFSX1NFUCxwXTtpZihmKXtwYXJ0cy5wdXNoKCcsJyxmKTt9Ci1wYXJ0cy5wdXNoKCcpJyk7dmFycy5wdXNoKHBhcnRzLmpvaW4oJycpKTt9fQotcmV0dXJuIHZhcnMuam9pbignOyAnKTt9Ci1mdW5jdGlvbiBjb25zdW1lQ3NzUHJvcGVydGllcyh0ZXh0KXt2YXIgbTt3aGlsZShtPU1JWElOX01BVENILmV4ZWModGV4dCkpe3ZhciBtYXRjaFRleHQ9bVswXTt2YXIgbWl4aW5OYW1lPW1bMV07dmFyIGlkeD1tLmluZGV4O3ZhciBhcHBseVBvcz1pZHgrbWF0Y2hUZXh0LmluZGV4T2YoJ0BhcHBseScpO3ZhciBhZnRlckFwcGx5UG9zPWlkeCttYXRjaFRleHQubGVuZ3RoO3ZhciB0ZXh0QmVmb3JlQXBwbHk9dGV4dC5zbGljZSgwLGFwcGx5UG9zKTt2YXIgdGV4dEFmdGVyQXBwbHk9dGV4dC5zbGljZShhZnRlckFwcGx5UG9zKTt2YXIgZGVmYXVsdHM9Y3NzVGV4dFRvTWFwKHRleHRCZWZvcmVBcHBseSk7dmFyIHJlcGxhY2VtZW50PWF0QXBwbHlUb0Nzc1Byb3BlcnRpZXMobWl4aW5OYW1lLGRlZmF1bHRzKTt0ZXh0PVt0ZXh0QmVmb3JlQXBwbHkscmVwbGFjZW1lbnQsdGV4dEFmdGVyQXBwbHldLmpvaW4oJycpO01JWElOX01BVENILmxhc3RJbmRleD1pZHgrcmVwbGFjZW1lbnQubGVuZ3RoO30KLXJldHVybiB0ZXh0O30KLXZhciBBcHBseVNoaW09e19tZWFzdXJlRWxlbWVudDpudWxsLF9tYXA6bWl4aW5NYXAsX3NlcGFyYXRvcjpNSVhJTl9WQVJfU0VQLHRyYW5zZm9ybTpmdW5jdGlvbihzdHlsZXMsZWxlbWVudFByb3RvKXt0aGlzLl9fY3VycmVudEVsZW1lbnRQcm90bz1lbGVtZW50UHJvdG87c3R5bGVVdGlsLmZvclJ1bGVzSW5TdHlsZXMoc3R5bGVzLHRoaXMuX2JvdW5kRmluZERlZmluaXRpb25zKTtzdHlsZVV0aWwuZm9yUnVsZXNJblN0eWxlcyhzdHlsZXMsdGhpcy5fYm91bmRGaW5kQXBwbGljYXRpb25zKTtpZihlbGVtZW50UHJvdG8pe2VsZW1lbnRQcm90by5fX2FwcGx5U2hpbUludmFsaWQ9ZmFsc2U7fQotdGhpcy5fX2N1cnJlbnRFbGVtZW50UHJvdG89bnVsbDt9LF9maW5kRGVmaW5pdGlvbnM6ZnVuY3Rpb24ocnVsZSl7dmFyIGNzc1RleHQ9cnVsZS5wYXJzZWRDc3NUZXh0O2Nzc1RleHQ9Y3NzVGV4dC5yZXBsYWNlKEJBRF9WQVIsZml4VmFycyk7Y3NzVGV4dD1jc3NUZXh0LnJlcGxhY2UoVkFSX0FTU0lHTixwcm9kdWNlQ3NzUHJvcGVydGllcyk7cnVsZS5jc3NUZXh0PWNzc1RleHQ7aWYocnVsZS5zZWxlY3Rvcj09PSc6cm9vdCcpe3J1bGUuc2VsZWN0b3I9Jzpob3N0ID4gKic7fX0sX2ZpbmRBcHBsaWNhdGlvbnM6ZnVuY3Rpb24ocnVsZSl7cnVsZS5jc3NUZXh0PWNvbnN1bWVDc3NQcm9wZXJ0aWVzKHJ1bGUuY3NzVGV4dCk7fSx0cmFuc2Zvcm1SdWxlOmZ1bmN0aW9uKHJ1bGUpe3RoaXMuX2ZpbmREZWZpbml0aW9ucyhydWxlKTt0aGlzLl9maW5kQXBwbGljYXRpb25zKHJ1bGUpO30sX2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5OmZ1bmN0aW9uKHByb3BlcnR5KXtpZighdGhpcy5fbWVhc3VyZUVsZW1lbnQpe3RoaXMuX21lYXN1cmVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTt0aGlzLl9tZWFzdXJlRWxlbWVudC5zdHlsZS5hbGw9J2luaXRpYWwnO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodGhpcy5fbWVhc3VyZUVsZW1lbnQpO30KLXJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9tZWFzdXJlRWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSk7fX07QXBwbHlTaGltLl9ib3VuZFRyYW5zZm9ybVJ1bGU9QXBwbHlTaGltLnRyYW5zZm9ybVJ1bGUuYmluZChBcHBseVNoaW0pO0FwcGx5U2hpbS5fYm91bmRGaW5kRGVmaW5pdGlvbnM9QXBwbHlTaGltLl9maW5kRGVmaW5pdGlvbnMuYmluZChBcHBseVNoaW0pO0FwcGx5U2hpbS5fYm91bmRGaW5kQXBwbGljYXRpb25zPUFwcGx5U2hpbS5fZmluZEFwcGxpY2F0aW9ucy5iaW5kKEFwcGx5U2hpbSk7cmV0dXJuIEFwcGx5U2hpbTt9KCk7KGZ1bmN0aW9uKCl7dmFyIHByZXBFbGVtZW50PVBvbHltZXIuQmFzZS5fcHJlcEVsZW1lbnQ7dmFyIG5hdGl2ZVNoYWRvdz1Qb2x5bWVyLlNldHRpbmdzLnVzZU5hdGl2ZVNoYWRvdzt2YXIgc3R5bGVVdGlsPVBvbHltZXIuU3R5bGVVdGlsO3ZhciBzdHlsZVRyYW5zZm9ybWVyPVBvbHltZXIuU3R5bGVUcmFuc2Zvcm1lcjt2YXIgc3R5bGVFeHRlbmRzPVBvbHltZXIuU3R5bGVFeHRlbmRzO3ZhciBhcHBseVNoaW09UG9seW1lci5BcHBseVNoaW07dmFyIHNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfcHJlcEVsZW1lbnQ6ZnVuY3Rpb24oZWxlbWVudCl7aWYodGhpcy5fZW5jYXBzdWxhdGVTdHlsZSYmdGhpcy5fX2Nzc0J1aWxkIT09J3NoYWR5Jyl7c3R5bGVUcmFuc2Zvcm1lci5lbGVtZW50KGVsZW1lbnQsdGhpcy5pcyx0aGlzLl9zY29wZUNzc1ZpYUF0dHIpO30KLXByZXBFbGVtZW50LmNhbGwodGhpcyxlbGVtZW50KTt9LF9wcmVwU3R5bGVzOmZ1bmN0aW9uKCl7aWYodGhpcy5fZW5jYXBzdWxhdGVTdHlsZT09PXVuZGVmaW5lZCl7dGhpcy5fZW5jYXBzdWxhdGVTdHlsZT0hbmF0aXZlU2hhZG93O30KLWlmKCFuYXRpdmVTaGFkb3cpe3RoaXMuX3Njb3BlU3R5bGU9c3R5bGVVdGlsLmFwcGx5U3R5bGVQbGFjZUhvbGRlcih0aGlzLmlzKTt9Ci10aGlzLl9fY3NzQnVpbGQ9c3R5bGVVdGlsLmNzc0J1aWxkVHlwZUZvck1vZHVsZSh0aGlzLmlzKTt9LF9wcmVwU2hpbVN0eWxlczpmdW5jdGlvbigpe2lmKHRoaXMuX3RlbXBsYXRlKXt2YXIgaGFzVGFyZ2V0ZWRDc3NCdWlsZD1zdHlsZVV0aWwuaXNUYXJnZXRlZEJ1aWxkKHRoaXMuX19jc3NCdWlsZCk7aWYoc2V0dGluZ3MudXNlTmF0aXZlQ1NTUHJvcGVydGllcyYmdGhpcy5fX2Nzc0J1aWxkPT09J3NoYWRvdycmJmhhc1RhcmdldGVkQ3NzQnVpbGQpe2lmKHNldHRpbmdzLnByZXNlcnZlU3R5bGVJbmNsdWRlcyl7c3R5bGVVdGlsLnN0eWxlSW5jbHVkZXNUb1RlbXBsYXRlKHRoaXMuX3RlbXBsYXRlKTt9Ci1yZXR1cm47fQotdGhpcy5fc3R5bGVzPXRoaXMuX3N0eWxlc3x8dGhpcy5fY29sbGVjdFN0eWxlcygpO2lmKHNldHRpbmdzLnVzZU5hdGl2ZUNTU1Byb3BlcnRpZXMmJiF0aGlzLl9fY3NzQnVpbGQpe2FwcGx5U2hpbS50cmFuc2Zvcm0odGhpcy5fc3R5bGVzLHRoaXMpO30KLXZhciBjc3NUZXh0PXNldHRpbmdzLnVzZU5hdGl2ZUNTU1Byb3BlcnRpZXMmJmhhc1RhcmdldGVkQ3NzQnVpbGQ/dGhpcy5fc3R5bGVzLmxlbmd0aCYmdGhpcy5fc3R5bGVzWzBdLnRleHRDb250ZW50LnRyaW0oKTpzdHlsZVRyYW5zZm9ybWVyLmVsZW1lbnRTdHlsZXModGhpcyk7dGhpcy5fcHJlcFN0eWxlUHJvcGVydGllcygpO2lmKCF0aGlzLl9uZWVkc1N0eWxlUHJvcGVydGllcygpJiZjc3NUZXh0KXtzdHlsZVV0aWwuYXBwbHlDc3MoY3NzVGV4dCx0aGlzLmlzLG5hdGl2ZVNoYWRvdz90aGlzLl90ZW1wbGF0ZS5jb250ZW50Om51bGwsdGhpcy5fc2NvcGVTdHlsZSk7fX1lbHNle3RoaXMuX3N0eWxlcz1bXTt9fSxfY29sbGVjdFN0eWxlczpmdW5jdGlvbigpe3ZhciBzdHlsZXM9W107dmFyIGNzc1RleHQ9JycsbSQ9dGhpcy5zdHlsZU1vZHVsZXM7aWYobSQpe2Zvcih2YXIgaT0wLGw9bSQubGVuZ3RoLG07aTxsJiYobT1tJFtpXSk7aSsrKXtjc3NUZXh0Kz1zdHlsZVV0aWwuY3NzRnJvbU1vZHVsZShtKTt9fQotY3NzVGV4dCs9c3R5bGVVdGlsLmNzc0Zyb21Nb2R1bGUodGhpcy5pcyk7dmFyIHA9dGhpcy5fdGVtcGxhdGUmJnRoaXMuX3RlbXBsYXRlLnBhcmVudE5vZGU7aWYodGhpcy5fdGVtcGxhdGUmJighcHx8cC5pZC50b0xvd2VyQ2FzZSgpIT09dGhpcy5pcykpe2Nzc1RleHQrPXN0eWxlVXRpbC5jc3NGcm9tRWxlbWVudCh0aGlzLl90ZW1wbGF0ZSk7fQotaWYoY3NzVGV4dCl7dmFyIHN0eWxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7c3R5bGUudGV4dENvbnRlbnQ9Y3NzVGV4dDtpZihzdHlsZUV4dGVuZHMuaGFzRXh0ZW5kcyhzdHlsZS50ZXh0Q29udGVudCkpe2Nzc1RleHQ9c3R5bGVFeHRlbmRzLnRyYW5zZm9ybShzdHlsZSk7fQotc3R5bGVzLnB1c2goc3R5bGUpO30KLXJldHVybiBzdHlsZXM7fSxfZWxlbWVudEFkZDpmdW5jdGlvbihub2RlKXtpZih0aGlzLl9lbmNhcHN1bGF0ZVN0eWxlKXtpZihub2RlLl9fc3R5bGVTY29wZWQpe25vZGUuX19zdHlsZVNjb3BlZD1mYWxzZTt9ZWxzZXtzdHlsZVRyYW5zZm9ybWVyLmRvbShub2RlLHRoaXMuaXMsdGhpcy5fc2NvcGVDc3NWaWFBdHRyKTt9fX0sX2VsZW1lbnRSZW1vdmU6ZnVuY3Rpb24obm9kZSl7aWYodGhpcy5fZW5jYXBzdWxhdGVTdHlsZSl7c3R5bGVUcmFuc2Zvcm1lci5kb20obm9kZSx0aGlzLmlzLHRoaXMuX3Njb3BlQ3NzVmlhQXR0cix0cnVlKTt9fSxzY29wZVN1YnRyZWU6ZnVuY3Rpb24oY29udGFpbmVyLHNob3VsZE9ic2VydmUpe2lmKG5hdGl2ZVNoYWRvdyl7cmV0dXJuO30KLXZhciBzZWxmPXRoaXM7dmFyIHNjb3BpZnk9ZnVuY3Rpb24obm9kZSl7aWYobm9kZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgY2xhc3NOYW1lPW5vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpO25vZGUuc2V0QXR0cmlidXRlKCdjbGFzcycsc2VsZi5fc2NvcGVFbGVtZW50Q2xhc3Mobm9kZSxjbGFzc05hbWUpKTt2YXIgbiQ9bm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7Zm9yKHZhciBpPTAsbjtpPG4kLmxlbmd0aCYmKG49biRbaV0pO2krKyl7Y2xhc3NOYW1lPW4uZ2V0QXR0cmlidXRlKCdjbGFzcycpO24uc2V0QXR0cmlidXRlKCdjbGFzcycsc2VsZi5fc2NvcGVFbGVtZW50Q2xhc3MobixjbGFzc05hbWUpKTt9fX07c2NvcGlmeShjb250YWluZXIpO2lmKHNob3VsZE9ic2VydmUpe3ZhciBtbz1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihteG5zKXtmb3IodmFyIGk9MCxtO2k8bXhucy5sZW5ndGgmJihtPW14bnNbaV0pO2krKyl7aWYobS5hZGRlZE5vZGVzKXtmb3IodmFyIGo9MDtqPG0uYWRkZWROb2Rlcy5sZW5ndGg7aisrKXtzY29waWZ5KG0uYWRkZWROb2Rlc1tqXSk7fX19fSk7bW8ub2JzZXJ2ZShjb250YWluZXIse2NoaWxkTGlzdDp0cnVlLHN1YnRyZWU6dHJ1ZX0pO3JldHVybiBtbzt9fX0pO30oKSk7UG9seW1lci5TdHlsZVByb3BlcnRpZXM9ZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIG1hdGNoZXNTZWxlY3Rvcj1Qb2x5bWVyLkRvbUFwaS5tYXRjaGVzU2VsZWN0b3I7dmFyIHN0eWxlVXRpbD1Qb2x5bWVyLlN0eWxlVXRpbDt2YXIgc3R5bGVUcmFuc2Zvcm1lcj1Qb2x5bWVyLlN0eWxlVHJhbnNmb3JtZXI7dmFyIElTX0lFPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goJ1RyaWRlbnQnKTt2YXIgc2V0dGluZ3M9UG9seW1lci5TZXR0aW5ncztyZXR1cm57ZGVjb3JhdGVTdHlsZXM6ZnVuY3Rpb24oc3R5bGVzLHNjb3BlKXt2YXIgc2VsZj10aGlzLHByb3BzPXt9LGtleWZyYW1lcz1bXSxydWxlSW5kZXg9MDt2YXIgc2NvcGVTZWxlY3Rvcj1zdHlsZVRyYW5zZm9ybWVyLl9jYWxjSG9zdFNjb3BlKHNjb3BlLmlzLHNjb3BlLmV4dGVuZHMpO3N0eWxlVXRpbC5mb3JSdWxlc0luU3R5bGVzKHN0eWxlcyxmdW5jdGlvbihydWxlLHN0eWxlKXtzZWxmLmRlY29yYXRlUnVsZShydWxlKTtydWxlLmluZGV4PXJ1bGVJbmRleCsrO3NlbGYud2hlbkhvc3RPclJvb3RSdWxlKHNjb3BlLHJ1bGUsc3R5bGUsZnVuY3Rpb24oaW5mbyl7aWYocnVsZS5wYXJlbnQudHlwZT09PXN0eWxlVXRpbC5ydWxlVHlwZXMuTUVESUFfUlVMRSl7c2NvcGUuX19ub3RTdHlsZVNjb3BlQ2FjaGVhYmxlPXRydWU7fQotaWYoaW5mby5pc0hvc3Qpe3ZhciBob3N0Q29udGV4dE9yRnVuY3Rpb249aW5mby5zZWxlY3Rvci5zcGxpdCgnICcpLnNvbWUoZnVuY3Rpb24ocyl7cmV0dXJuIHMuaW5kZXhPZihzY29wZVNlbGVjdG9yKT09PTAmJnMubGVuZ3RoIT09c2NvcGVTZWxlY3Rvci5sZW5ndGg7fSk7c2NvcGUuX19ub3RTdHlsZVNjb3BlQ2FjaGVhYmxlPXNjb3BlLl9fbm90U3R5bGVTY29wZUNhY2hlYWJsZXx8aG9zdENvbnRleHRPckZ1bmN0aW9uO319KTtzZWxmLmNvbGxlY3RQcm9wZXJ0aWVzSW5Dc3NUZXh0KHJ1bGUucHJvcGVydHlJbmZvLmNzc1RleHQscHJvcHMpO30sZnVuY3Rpb24gb25LZXlmcmFtZXNSdWxlKHJ1bGUpe2tleWZyYW1lcy5wdXNoKHJ1bGUpO30pO3N0eWxlcy5fa2V5ZnJhbWVzPWtleWZyYW1lczt2YXIgbmFtZXM9W107Zm9yKHZhciBpIGluIHByb3BzKXtuYW1lcy5wdXNoKGkpO30KLXJldHVybiBuYW1lczt9LGRlY29yYXRlUnVsZTpmdW5jdGlvbihydWxlKXtpZihydWxlLnByb3BlcnR5SW5mbyl7cmV0dXJuIHJ1bGUucHJvcGVydHlJbmZvO30KLXZhciBpbmZvPXt9LHByb3BlcnRpZXM9e307dmFyIGhhc1Byb3BlcnRpZXM9dGhpcy5jb2xsZWN0UHJvcGVydGllcyhydWxlLHByb3BlcnRpZXMpO2lmKGhhc1Byb3BlcnRpZXMpe2luZm8ucHJvcGVydGllcz1wcm9wZXJ0aWVzO3J1bGUucnVsZXM9bnVsbDt9Ci1pbmZvLmNzc1RleHQ9dGhpcy5jb2xsZWN0Q3NzVGV4dChydWxlKTtydWxlLnByb3BlcnR5SW5mbz1pbmZvO3JldHVybiBpbmZvO30sY29sbGVjdFByb3BlcnRpZXM6ZnVuY3Rpb24ocnVsZSxwcm9wZXJ0aWVzKXt2YXIgaW5mbz1ydWxlLnByb3BlcnR5SW5mbztpZihpbmZvKXtpZihpbmZvLnByb3BlcnRpZXMpe1BvbHltZXIuQmFzZS5taXhpbihwcm9wZXJ0aWVzLGluZm8ucHJvcGVydGllcyk7cmV0dXJuIHRydWU7fX1lbHNle3ZhciBtLHJ4PXRoaXMucnguVkFSX0FTU0lHTjt2YXIgY3NzVGV4dD1ydWxlLnBhcnNlZENzc1RleHQ7dmFyIHZhbHVlO3ZhciBhbnk7d2hpbGUobT1yeC5leGVjKGNzc1RleHQpKXt2YWx1ZT0obVsyXXx8bVszXSkudHJpbSgpO2lmKHZhbHVlIT09J2luaGVyaXQnKXtwcm9wZXJ0aWVzW21bMV0udHJpbSgpXT12YWx1ZTt9Ci1hbnk9dHJ1ZTt9Ci1yZXR1cm4gYW55O319LGNvbGxlY3RDc3NUZXh0OmZ1bmN0aW9uKHJ1bGUpe3JldHVybiB0aGlzLmNvbGxlY3RDb25zdW1pbmdDc3NUZXh0KHJ1bGUucGFyc2VkQ3NzVGV4dCk7fSxjb2xsZWN0Q29uc3VtaW5nQ3NzVGV4dDpmdW5jdGlvbihjc3NUZXh0KXtyZXR1cm4gY3NzVGV4dC5yZXBsYWNlKHRoaXMucnguQlJBQ0tFVEVELCcnKS5yZXBsYWNlKHRoaXMucnguVkFSX0FTU0lHTiwnJyk7fSxjb2xsZWN0UHJvcGVydGllc0luQ3NzVGV4dDpmdW5jdGlvbihjc3NUZXh0LHByb3BzKXt2YXIgbTt3aGlsZShtPXRoaXMucnguVkFSX0NPTlNVTUVELmV4ZWMoY3NzVGV4dCkpe3ZhciBuYW1lPW1bMV07aWYobVsyXSE9PSc6Jyl7cHJvcHNbbmFtZV09dHJ1ZTt9fX0scmVpZnk6ZnVuY3Rpb24ocHJvcHMpe3ZhciBuYW1lcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm9wcyk7Zm9yKHZhciBpPTAsbjtpPG5hbWVzLmxlbmd0aDtpKyspe249bmFtZXNbaV07cHJvcHNbbl09dGhpcy52YWx1ZUZvclByb3BlcnR5KHByb3BzW25dLHByb3BzKTt9fSx2YWx1ZUZvclByb3BlcnR5OmZ1bmN0aW9uKHByb3BlcnR5LHByb3BzKXtpZihwcm9wZXJ0eSl7aWYocHJvcGVydHkuaW5kZXhPZignOycpPj0wKXtwcm9wZXJ0eT10aGlzLnZhbHVlRm9yUHJvcGVydGllcyhwcm9wZXJ0eSxwcm9wcyk7fWVsc2V7dmFyIHNlbGY9dGhpczt2YXIgZm49ZnVuY3Rpb24ocHJlZml4LHZhbHVlLGZhbGxiYWNrLHN1ZmZpeCl7dmFyIHByb3BlcnR5VmFsdWU9c2VsZi52YWx1ZUZvclByb3BlcnR5KHByb3BzW3ZhbHVlXSxwcm9wcyk7aWYoIXByb3BlcnR5VmFsdWV8fHByb3BlcnR5VmFsdWU9PT0naW5pdGlhbCcpe3Byb3BlcnR5VmFsdWU9c2VsZi52YWx1ZUZvclByb3BlcnR5KHByb3BzW2ZhbGxiYWNrXXx8ZmFsbGJhY2sscHJvcHMpfHxmYWxsYmFjazt9ZWxzZSBpZihwcm9wZXJ0eVZhbHVlPT09J2FwcGx5LXNoaW0taW5oZXJpdCcpe3Byb3BlcnR5VmFsdWU9J2luaGVyaXQnO30KLXJldHVybiBwcmVmaXgrKHByb3BlcnR5VmFsdWV8fCcnKStzdWZmaXg7fTtwcm9wZXJ0eT1zdHlsZVV0aWwucHJvY2Vzc1ZhcmlhYmxlQW5kRmFsbGJhY2socHJvcGVydHksZm4pO319Ci1yZXR1cm4gcHJvcGVydHkmJnByb3BlcnR5LnRyaW0oKXx8Jyc7fSx2YWx1ZUZvclByb3BlcnRpZXM6ZnVuY3Rpb24ocHJvcGVydHkscHJvcHMpe3ZhciBwYXJ0cz1wcm9wZXJ0eS5zcGxpdCgnOycpO2Zvcih2YXIgaT0wLHAsbTtpPHBhcnRzLmxlbmd0aDtpKyspe2lmKHA9cGFydHNbaV0pe3RoaXMucnguTUlYSU5fTUFUQ0gubGFzdEluZGV4PTA7bT10aGlzLnJ4Lk1JWElOX01BVENILmV4ZWMocCk7aWYobSl7cD10aGlzLnZhbHVlRm9yUHJvcGVydHkocHJvcHNbbVsxXV0scHJvcHMpO31lbHNle3ZhciBjb2xvbj1wLmluZGV4T2YoJzonKTtpZihjb2xvbiE9PS0xKXt2YXIgcHA9cC5zdWJzdHJpbmcoY29sb24pO3BwPXBwLnRyaW0oKTtwcD10aGlzLnZhbHVlRm9yUHJvcGVydHkocHAscHJvcHMpfHxwcDtwPXAuc3Vic3RyaW5nKDAsY29sb24pK3BwO319Ci1wYXJ0c1tpXT1wJiZwLmxhc3RJbmRleE9mKCc7Jyk9PT1wLmxlbmd0aC0xP3Auc2xpY2UoMCwtMSk6cHx8Jyc7fX0KLXJldHVybiBwYXJ0cy5qb2luKCc7Jyk7fSxhcHBseVByb3BlcnRpZXM6ZnVuY3Rpb24ocnVsZSxwcm9wcyl7dmFyIG91dHB1dD0nJztpZighcnVsZS5wcm9wZXJ0eUluZm8pe3RoaXMuZGVjb3JhdGVSdWxlKHJ1bGUpO30KLWlmKHJ1bGUucHJvcGVydHlJbmZvLmNzc1RleHQpe291dHB1dD10aGlzLnZhbHVlRm9yUHJvcGVydGllcyhydWxlLnByb3BlcnR5SW5mby5jc3NUZXh0LHByb3BzKTt9Ci1ydWxlLmNzc1RleHQ9b3V0cHV0O30sYXBwbHlLZXlmcmFtZVRyYW5zZm9ybXM6ZnVuY3Rpb24ocnVsZSxrZXlmcmFtZVRyYW5zZm9ybXMpe3ZhciBpbnB1dD1ydWxlLmNzc1RleHQ7dmFyIG91dHB1dD1ydWxlLmNzc1RleHQ7aWYocnVsZS5oYXNBbmltYXRpb25zPT1udWxsKXtydWxlLmhhc0FuaW1hdGlvbnM9dGhpcy5yeC5BTklNQVRJT05fTUFUQ0gudGVzdChpbnB1dCk7fQotaWYocnVsZS5oYXNBbmltYXRpb25zKXt2YXIgdHJhbnNmb3JtO2lmKHJ1bGUua2V5ZnJhbWVOYW1lc1RvVHJhbnNmb3JtPT1udWxsKXtydWxlLmtleWZyYW1lTmFtZXNUb1RyYW5zZm9ybT1bXTtmb3IodmFyIGtleWZyYW1lIGluIGtleWZyYW1lVHJhbnNmb3Jtcyl7dHJhbnNmb3JtPWtleWZyYW1lVHJhbnNmb3Jtc1trZXlmcmFtZV07b3V0cHV0PXRyYW5zZm9ybShpbnB1dCk7aWYoaW5wdXQhPT1vdXRwdXQpe2lucHV0PW91dHB1dDtydWxlLmtleWZyYW1lTmFtZXNUb1RyYW5zZm9ybS5wdXNoKGtleWZyYW1lKTt9fX1lbHNle2Zvcih2YXIgaT0wO2k8cnVsZS5rZXlmcmFtZU5hbWVzVG9UcmFuc2Zvcm0ubGVuZ3RoOysraSl7dHJhbnNmb3JtPWtleWZyYW1lVHJhbnNmb3Jtc1tydWxlLmtleWZyYW1lTmFtZXNUb1RyYW5zZm9ybVtpXV07aW5wdXQ9dHJhbnNmb3JtKGlucHV0KTt9Ci1vdXRwdXQ9aW5wdXQ7fX0KLXJ1bGUuY3NzVGV4dD1vdXRwdXQ7fSxwcm9wZXJ0eURhdGFGcm9tU3R5bGVzOmZ1bmN0aW9uKHN0eWxlcyxlbGVtZW50KXt2YXIgcHJvcHM9e30sc2VsZj10aGlzO3ZhciBvPVtdO3N0eWxlVXRpbC5mb3JBY3RpdmVSdWxlc0luU3R5bGVzKHN0eWxlcyxmdW5jdGlvbihydWxlKXtpZighcnVsZS5wcm9wZXJ0eUluZm8pe3NlbGYuZGVjb3JhdGVSdWxlKHJ1bGUpO30KLXZhciBzZWxlY3RvclRvTWF0Y2g9cnVsZS50cmFuc2Zvcm1lZFNlbGVjdG9yfHxydWxlLnBhcnNlZFNlbGVjdG9yO2lmKGVsZW1lbnQmJnJ1bGUucHJvcGVydHlJbmZvLnByb3BlcnRpZXMmJnNlbGVjdG9yVG9NYXRjaCl7aWYobWF0Y2hlc1NlbGVjdG9yLmNhbGwoZWxlbWVudCxzZWxlY3RvclRvTWF0Y2gpKXtzZWxmLmNvbGxlY3RQcm9wZXJ0aWVzKHJ1bGUscHJvcHMpO2FkZFRvQml0TWFzayhydWxlLmluZGV4LG8pO319fSk7cmV0dXJue3Byb3BlcnRpZXM6cHJvcHMsa2V5Om99O30sX3Jvb3RTZWxlY3RvcjovOnJvb3R8Omhvc3Rccyo+XHMqXCovLF9jaGVja1Jvb3Q6ZnVuY3Rpb24oaG9zdFNjb3BlLHNlbGVjdG9yKXtyZXR1cm4gQm9vbGVhbihzZWxlY3Rvci5tYXRjaCh0aGlzLl9yb290U2VsZWN0b3IpKXx8aG9zdFNjb3BlPT09J2h0bWwnJiZzZWxlY3Rvci5pbmRleE9mKCdodG1sJyk+LTE7fSx3aGVuSG9zdE9yUm9vdFJ1bGU6ZnVuY3Rpb24oc2NvcGUscnVsZSxzdHlsZSxjYWxsYmFjayl7aWYoIXJ1bGUucHJvcGVydHlJbmZvKXtzZWxmLmRlY29yYXRlUnVsZShydWxlKTt9Ci1pZighcnVsZS5wcm9wZXJ0eUluZm8ucHJvcGVydGllcyl7cmV0dXJuO30KLXZhciBob3N0U2NvcGU9c2NvcGUuaXM/c3R5bGVUcmFuc2Zvcm1lci5fY2FsY0hvc3RTY29wZShzY29wZS5pcyxzY29wZS5leHRlbmRzKTonaHRtbCc7dmFyIHBhcnNlZFNlbGVjdG9yPXJ1bGUucGFyc2VkU2VsZWN0b3I7dmFyIGlzUm9vdD10aGlzLl9jaGVja1Jvb3QoaG9zdFNjb3BlLHBhcnNlZFNlbGVjdG9yKTt2YXIgaXNIb3N0PSFpc1Jvb3QmJnBhcnNlZFNlbGVjdG9yLmluZGV4T2YoJzpob3N0Jyk9PT0wO3ZhciBjc3NCdWlsZD1zY29wZS5fX2Nzc0J1aWxkfHxzdHlsZS5fX2Nzc0J1aWxkO2lmKGNzc0J1aWxkPT09J3NoYWR5Jyl7aXNSb290PXBhcnNlZFNlbGVjdG9yPT09aG9zdFNjb3BlKycgPiAqLicraG9zdFNjb3BlfHxwYXJzZWRTZWxlY3Rvci5pbmRleE9mKCdodG1sJyk+LTE7aXNIb3N0PSFpc1Jvb3QmJnBhcnNlZFNlbGVjdG9yLmluZGV4T2YoaG9zdFNjb3BlKT09PTA7fQotaWYoIWlzUm9vdCYmIWlzSG9zdCl7cmV0dXJuO30KLXZhciBzZWxlY3RvclRvTWF0Y2g9aG9zdFNjb3BlO2lmKGlzSG9zdCl7aWYoc2V0dGluZ3MudXNlTmF0aXZlU2hhZG93JiYhcnVsZS50cmFuc2Zvcm1lZFNlbGVjdG9yKXtydWxlLnRyYW5zZm9ybWVkU2VsZWN0b3I9c3R5bGVUcmFuc2Zvcm1lci5fdHJhbnNmb3JtUnVsZUNzcyhydWxlLHN0eWxlVHJhbnNmb3JtZXIuX3RyYW5zZm9ybUNvbXBsZXhTZWxlY3RvcixzY29wZS5pcyxob3N0U2NvcGUpO30KLXNlbGVjdG9yVG9NYXRjaD1ydWxlLnRyYW5zZm9ybWVkU2VsZWN0b3J8fHJ1bGUucGFyc2VkU2VsZWN0b3I7fQotaWYoaXNSb290JiZob3N0U2NvcGU9PT0naHRtbCcpe3NlbGVjdG9yVG9NYXRjaD1ydWxlLnRyYW5zZm9ybWVkU2VsZWN0b3J8fHJ1bGUucGFyc2VkU2VsZWN0b3I7fQotY2FsbGJhY2soe3NlbGVjdG9yOnNlbGVjdG9yVG9NYXRjaCxpc0hvc3Q6aXNIb3N0LGlzUm9vdDppc1Jvb3R9KTt9LGhvc3RBbmRSb290UHJvcGVydGllc0ZvclNjb3BlOmZ1bmN0aW9uKHNjb3BlKXt2YXIgaG9zdFByb3BzPXt9LHJvb3RQcm9wcz17fSxzZWxmPXRoaXM7c3R5bGVVdGlsLmZvckFjdGl2ZVJ1bGVzSW5TdHlsZXMoc2NvcGUuX3N0eWxlcyxmdW5jdGlvbihydWxlLHN0eWxlKXtzZWxmLndoZW5Ib3N0T3JSb290UnVsZShzY29wZSxydWxlLHN0eWxlLGZ1bmN0aW9uKGluZm8pe3ZhciBlbGVtZW50PXNjb3BlLl9lbGVtZW50fHxzY29wZTtpZihtYXRjaGVzU2VsZWN0b3IuY2FsbChlbGVtZW50LGluZm8uc2VsZWN0b3IpKXtpZihpbmZvLmlzSG9zdCl7c2VsZi5jb2xsZWN0UHJvcGVydGllcyhydWxlLGhvc3RQcm9wcyk7fWVsc2V7c2VsZi5jb2xsZWN0UHJvcGVydGllcyhydWxlLHJvb3RQcm9wcyk7fX19KTt9KTtyZXR1cm57cm9vdFByb3BzOnJvb3RQcm9wcyxob3N0UHJvcHM6aG9zdFByb3BzfTt9LHRyYW5zZm9ybVN0eWxlczpmdW5jdGlvbihlbGVtZW50LHByb3BlcnRpZXMsc2NvcGVTZWxlY3Rvcil7dmFyIHNlbGY9dGhpczt2YXIgaG9zdFNlbGVjdG9yPXN0eWxlVHJhbnNmb3JtZXIuX2NhbGNIb3N0U2NvcGUoZWxlbWVudC5pcyxlbGVtZW50LmV4dGVuZHMpO3ZhciByeEhvc3RTZWxlY3Rvcj1lbGVtZW50LmV4dGVuZHM/J1xcJytob3N0U2VsZWN0b3Iuc2xpY2UoMCwtMSkrJ1xcXSc6aG9zdFNlbGVjdG9yO3ZhciBob3N0Ung9bmV3IFJlZ0V4cCh0aGlzLnJ4LkhPU1RfUFJFRklYK3J4SG9zdFNlbGVjdG9yK3RoaXMucnguSE9TVF9TVUZGSVgpO3ZhciBrZXlmcmFtZVRyYW5zZm9ybXM9dGhpcy5fZWxlbWVudEtleWZyYW1lVHJhbnNmb3JtcyhlbGVtZW50LHNjb3BlU2VsZWN0b3IpO3JldHVybiBzdHlsZVRyYW5zZm9ybWVyLmVsZW1lbnRTdHlsZXMoZWxlbWVudCxmdW5jdGlvbihydWxlKXtzZWxmLmFwcGx5UHJvcGVydGllcyhydWxlLHByb3BlcnRpZXMpO2lmKCFzZXR0aW5ncy51c2VOYXRpdmVTaGFkb3cmJiFQb2x5bWVyLlN0eWxlVXRpbC5pc0tleWZyYW1lc1NlbGVjdG9yKHJ1bGUpJiZydWxlLmNzc1RleHQpe3NlbGYuYXBwbHlLZXlmcmFtZVRyYW5zZm9ybXMocnVsZSxrZXlmcmFtZVRyYW5zZm9ybXMpO3NlbGYuX3Njb3BlU2VsZWN0b3IocnVsZSxob3N0UngsaG9zdFNlbGVjdG9yLGVsZW1lbnQuX3Njb3BlQ3NzVmlhQXR0cixzY29wZVNlbGVjdG9yKTt9fSk7fSxfZWxlbWVudEtleWZyYW1lVHJhbnNmb3JtczpmdW5jdGlvbihlbGVtZW50LHNjb3BlU2VsZWN0b3Ipe3ZhciBrZXlmcmFtZXNSdWxlcz1lbGVtZW50Ll9zdHlsZXMuX2tleWZyYW1lczt2YXIga2V5ZnJhbWVUcmFuc2Zvcm1zPXt9O2lmKCFzZXR0aW5ncy51c2VOYXRpdmVTaGFkb3cmJmtleWZyYW1lc1J1bGVzKXtmb3IodmFyIGk9MCxrZXlmcmFtZXNSdWxlPWtleWZyYW1lc1J1bGVzW2ldO2k8a2V5ZnJhbWVzUnVsZXMubGVuZ3RoO2tleWZyYW1lc1J1bGU9a2V5ZnJhbWVzUnVsZXNbKytpXSl7dGhpcy5fc2NvcGVLZXlmcmFtZXMoa2V5ZnJhbWVzUnVsZSxzY29wZVNlbGVjdG9yKTtrZXlmcmFtZVRyYW5zZm9ybXNba2V5ZnJhbWVzUnVsZS5rZXlmcmFtZXNOYW1lXT10aGlzLl9rZXlmcmFtZXNSdWxlVHJhbnNmb3JtZXIoa2V5ZnJhbWVzUnVsZSk7fX0KLXJldHVybiBrZXlmcmFtZVRyYW5zZm9ybXM7fSxfa2V5ZnJhbWVzUnVsZVRyYW5zZm9ybWVyOmZ1bmN0aW9uKGtleWZyYW1lc1J1bGUpe3JldHVybiBmdW5jdGlvbihjc3NUZXh0KXtyZXR1cm4gY3NzVGV4dC5yZXBsYWNlKGtleWZyYW1lc1J1bGUua2V5ZnJhbWVzTmFtZVJ4LGtleWZyYW1lc1J1bGUudHJhbnNmb3JtZWRLZXlmcmFtZXNOYW1lKTt9O30sX3Njb3BlS2V5ZnJhbWVzOmZ1bmN0aW9uKHJ1bGUsc2NvcGVJZCl7cnVsZS5rZXlmcmFtZXNOYW1lUng9bmV3IFJlZ0V4cChydWxlLmtleWZyYW1lc05hbWUsJ2cnKTtydWxlLnRyYW5zZm9ybWVkS2V5ZnJhbWVzTmFtZT1ydWxlLmtleWZyYW1lc05hbWUrJy0nK3Njb3BlSWQ7cnVsZS50cmFuc2Zvcm1lZFNlbGVjdG9yPXJ1bGUudHJhbnNmb3JtZWRTZWxlY3Rvcnx8cnVsZS5zZWxlY3RvcjtydWxlLnNlbGVjdG9yPXJ1bGUudHJhbnNmb3JtZWRTZWxlY3Rvci5yZXBsYWNlKHJ1bGUua2V5ZnJhbWVzTmFtZSxydWxlLnRyYW5zZm9ybWVkS2V5ZnJhbWVzTmFtZSk7fSxfc2NvcGVTZWxlY3RvcjpmdW5jdGlvbihydWxlLGhvc3RSeCxob3N0U2VsZWN0b3IsdmlhQXR0cixzY29wZUlkKXtydWxlLnRyYW5zZm9ybWVkU2VsZWN0b3I9cnVsZS50cmFuc2Zvcm1lZFNlbGVjdG9yfHxydWxlLnNlbGVjdG9yO3ZhciBzZWxlY3Rvcj1ydWxlLnRyYW5zZm9ybWVkU2VsZWN0b3I7dmFyIHNjb3BlPXZpYUF0dHI/J1snK3N0eWxlVHJhbnNmb3JtZXIuU0NPUEVfTkFNRSsnfj0nK3Njb3BlSWQrJ10nOicuJytzY29wZUlkO3ZhciBwYXJ0cz1zZWxlY3Rvci5zcGxpdCgnLCcpO2Zvcih2YXIgaT0wLGw9cGFydHMubGVuZ3RoLHA7aTxsJiYocD1wYXJ0c1tpXSk7aSsrKXtwYXJ0c1tpXT1wLm1hdGNoKGhvc3RSeCk/cC5yZXBsYWNlKGhvc3RTZWxlY3RvcixzY29wZSk6c2NvcGUrJyAnK3A7fQotcnVsZS5zZWxlY3Rvcj1wYXJ0cy5qb2luKCcsJyk7fSxhcHBseUVsZW1lbnRTY29wZVNlbGVjdG9yOmZ1bmN0aW9uKGVsZW1lbnQsc2VsZWN0b3Isb2xkLHZpYUF0dHIpe3ZhciBjPXZpYUF0dHI/ZWxlbWVudC5nZXRBdHRyaWJ1dGUoc3R5bGVUcmFuc2Zvcm1lci5TQ09QRV9OQU1FKTplbGVtZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKXx8Jyc7dmFyIHY9b2xkP2MucmVwbGFjZShvbGQsc2VsZWN0b3IpOihjP2MrJyAnOicnKSt0aGlzLlhTQ09QRV9OQU1FKycgJytzZWxlY3RvcjtpZihjIT09dil7aWYodmlhQXR0cil7ZWxlbWVudC5zZXRBdHRyaWJ1dGUoc3R5bGVUcmFuc2Zvcm1lci5TQ09QRV9OQU1FLHYpO31lbHNle2VsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsdik7fX19LGFwcGx5RWxlbWVudFN0eWxlOmZ1bmN0aW9uKGVsZW1lbnQscHJvcGVydGllcyxzZWxlY3RvcixzdHlsZSl7dmFyIGNzc1RleHQ9c3R5bGU/c3R5bGUudGV4dENvbnRlbnR8fCcnOnRoaXMudHJhbnNmb3JtU3R5bGVzKGVsZW1lbnQscHJvcGVydGllcyxzZWxlY3Rvcik7dmFyIHM9ZWxlbWVudC5fY3VzdG9tU3R5bGU7aWYocyYmIXNldHRpbmdzLnVzZU5hdGl2ZVNoYWRvdyYmcyE9PXN0eWxlKXtzLl91c2VDb3VudC0tO2lmKHMuX3VzZUNvdW50PD0wJiZzLnBhcmVudE5vZGUpe3MucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzKTt9fQotaWYoc2V0dGluZ3MudXNlTmF0aXZlU2hhZG93KXtpZihlbGVtZW50Ll9jdXN0b21TdHlsZSl7ZWxlbWVudC5fY3VzdG9tU3R5bGUudGV4dENvbnRlbnQ9Y3NzVGV4dDtzdHlsZT1lbGVtZW50Ll9jdXN0b21TdHlsZTt9ZWxzZSBpZihjc3NUZXh0KXtzdHlsZT1zdHlsZVV0aWwuYXBwbHlDc3MoY3NzVGV4dCxzZWxlY3RvcixlbGVtZW50LnJvb3QsZWxlbWVudC5fc2NvcGVTdHlsZSk7fX1lbHNle2lmKCFzdHlsZSl7aWYoY3NzVGV4dCl7c3R5bGU9c3R5bGVVdGlsLmFwcGx5Q3NzKGNzc1RleHQsc2VsZWN0b3IsbnVsbCxlbGVtZW50Ll9zY29wZVN0eWxlKTt9fWVsc2UgaWYoIXN0eWxlLnBhcmVudE5vZGUpe2lmKElTX0lFJiZjc3NUZXh0LmluZGV4T2YoJ0BtZWRpYScpPi0xKXtzdHlsZS50ZXh0Q29udGVudD1jc3NUZXh0O30KLXN0eWxlVXRpbC5hcHBseVN0eWxlKHN0eWxlLG51bGwsZWxlbWVudC5fc2NvcGVTdHlsZSk7fX0KLWlmKHN0eWxlKXtzdHlsZS5fdXNlQ291bnQ9c3R5bGUuX3VzZUNvdW50fHwwO2lmKGVsZW1lbnQuX2N1c3RvbVN0eWxlIT1zdHlsZSl7c3R5bGUuX3VzZUNvdW50Kys7fQotZWxlbWVudC5fY3VzdG9tU3R5bGU9c3R5bGU7fQotcmV0dXJuIHN0eWxlO30sbWl4aW5DdXN0b21TdHlsZTpmdW5jdGlvbihwcm9wcyxjdXN0b21TdHlsZSl7dmFyIHY7Zm9yKHZhciBpIGluIGN1c3RvbVN0eWxlKXt2PWN1c3RvbVN0eWxlW2ldO2lmKHZ8fHY9PT0wKXtwcm9wc1tpXT12O319fSx1cGRhdGVOYXRpdmVTdHlsZVByb3BlcnRpZXM6ZnVuY3Rpb24oZWxlbWVudCxwcm9wZXJ0aWVzKXt2YXIgb2xkUHJvcGVydHlOYW1lcz1lbGVtZW50Ll9fY3VzdG9tU3R5bGVQcm9wZXJ0aWVzO2lmKG9sZFByb3BlcnR5TmFtZXMpe2Zvcih2YXIgaT0wO2k8b2xkUHJvcGVydHlOYW1lcy5sZW5ndGg7aSsrKXtlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KG9sZFByb3BlcnR5TmFtZXNbaV0pO319Ci12YXIgcHJvcGVydHlOYW1lcz1bXTtmb3IodmFyIHAgaW4gcHJvcGVydGllcyl7aWYocHJvcGVydGllc1twXSE9PW51bGwpe2VsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkocCxwcm9wZXJ0aWVzW3BdKTtwcm9wZXJ0eU5hbWVzLnB1c2gocCk7fX0KLWVsZW1lbnQuX19jdXN0b21TdHlsZVByb3BlcnRpZXM9cHJvcGVydHlOYW1lczt9LHJ4OnN0eWxlVXRpbC5yeCxYU0NPUEVfTkFNRToneC1zY29wZSd9O2Z1bmN0aW9uIGFkZFRvQml0TWFzayhuLGJpdHMpe3ZhciBvPXBhcnNlSW50KG4vMzIpO3ZhciB2PTE8PG4lMzI7Yml0c1tvXT0oYml0c1tvXXx8MCl8djt9fSgpOyhmdW5jdGlvbigpe1BvbHltZXIuU3R5bGVDYWNoZT1mdW5jdGlvbigpe3RoaXMuY2FjaGU9e307fTtQb2x5bWVyLlN0eWxlQ2FjaGUucHJvdG90eXBlPXtNQVg6MTAwLHN0b3JlOmZ1bmN0aW9uKGlzLGRhdGEsa2V5VmFsdWVzLGtleVN0eWxlcyl7ZGF0YS5rZXlWYWx1ZXM9a2V5VmFsdWVzO2RhdGEuc3R5bGVzPWtleVN0eWxlczt2YXIgcyQ9dGhpcy5jYWNoZVtpc109dGhpcy5jYWNoZVtpc118fFtdO3MkLnB1c2goZGF0YSk7aWYocyQubGVuZ3RoPnRoaXMuTUFYKXtzJC5zaGlmdCgpO319LHJldHJpZXZlOmZ1bmN0aW9uKGlzLGtleVZhbHVlcyxrZXlTdHlsZXMpe3ZhciBjYWNoZT10aGlzLmNhY2hlW2lzXTtpZihjYWNoZSl7Zm9yKHZhciBpPWNhY2hlLmxlbmd0aC0xLGRhdGE7aT49MDtpLS0pe2RhdGE9Y2FjaGVbaV07aWYoa2V5U3R5bGVzPT09ZGF0YS5zdHlsZXMmJnRoaXMuX29iamVjdHNFcXVhbChrZXlWYWx1ZXMsZGF0YS5rZXlWYWx1ZXMpKXtyZXR1cm4gZGF0YTt9fX19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5jYWNoZT17fTt9LF9vYmplY3RzRXF1YWw6ZnVuY3Rpb24odGFyZ2V0LHNvdXJjZSl7dmFyIHQscztmb3IodmFyIGkgaW4gdGFyZ2V0KXt0PXRhcmdldFtpXSxzPXNvdXJjZVtpXTtpZighKHR5cGVvZiB0PT09J29iamVjdCcmJnQ/dGhpcy5fb2JqZWN0c1N0cmljdGx5RXF1YWwodCxzKTp0PT09cykpe3JldHVybiBmYWxzZTt9fQotaWYoQXJyYXkuaXNBcnJheSh0YXJnZXQpKXtyZXR1cm4gdGFyZ2V0Lmxlbmd0aD09PXNvdXJjZS5sZW5ndGg7fQotcmV0dXJuIHRydWU7fSxfb2JqZWN0c1N0cmljdGx5RXF1YWw6ZnVuY3Rpb24odGFyZ2V0LHNvdXJjZSl7cmV0dXJuIHRoaXMuX29iamVjdHNFcXVhbCh0YXJnZXQsc291cmNlKSYmdGhpcy5fb2JqZWN0c0VxdWFsKHNvdXJjZSx0YXJnZXQpO319O30oKSk7UG9seW1lci5TdHlsZURlZmF1bHRzPWZ1bmN0aW9uKCl7dmFyIHN0eWxlUHJvcGVydGllcz1Qb2x5bWVyLlN0eWxlUHJvcGVydGllczt2YXIgU3R5bGVDYWNoZT1Qb2x5bWVyLlN0eWxlQ2FjaGU7dmFyIG5hdGl2ZVZhcmlhYmxlcz1Qb2x5bWVyLlNldHRpbmdzLnVzZU5hdGl2ZUNTU1Byb3BlcnRpZXM7dmFyIGFwaT17X3N0eWxlczpbXSxfcHJvcGVydGllczpudWxsLGN1c3RvbVN0eWxlOnt9LF9zdHlsZUNhY2hlOm5ldyBTdHlsZUNhY2hlKCksX2VsZW1lbnQ6UG9seW1lci5Eb21BcGkud3JhcChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLGFkZFN0eWxlOmZ1bmN0aW9uKHN0eWxlKXt0aGlzLl9zdHlsZXMucHVzaChzdHlsZSk7dGhpcy5fcHJvcGVydGllcz1udWxsO30sZ2V0IF9zdHlsZVByb3BlcnRpZXMoKXtpZighdGhpcy5fcHJvcGVydGllcyl7c3R5bGVQcm9wZXJ0aWVzLmRlY29yYXRlU3R5bGVzKHRoaXMuX3N0eWxlcyx0aGlzKTt0aGlzLl9zdHlsZXMuX3Njb3BlU3R5bGVQcm9wZXJ0aWVzPW51bGw7dGhpcy5fcHJvcGVydGllcz1zdHlsZVByb3BlcnRpZXMuaG9zdEFuZFJvb3RQcm9wZXJ0aWVzRm9yU2NvcGUodGhpcykucm9vdFByb3BzO3N0eWxlUHJvcGVydGllcy5taXhpbkN1c3RvbVN0eWxlKHRoaXMuX3Byb3BlcnRpZXMsdGhpcy5jdXN0b21TdHlsZSk7c3R5bGVQcm9wZXJ0aWVzLnJlaWZ5KHRoaXMuX3Byb3BlcnRpZXMpO30KLXJldHVybiB0aGlzLl9wcm9wZXJ0aWVzO30saGFzU3R5bGVQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fcHJvcGVydGllcyk7fSxfbmVlZHNTdHlsZVByb3BlcnRpZXM6ZnVuY3Rpb24oKXt9LF9jb21wdXRlU3R5bGVQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0eWxlUHJvcGVydGllczt9LHVwZGF0ZVN0eWxlczpmdW5jdGlvbihwcm9wZXJ0aWVzKXt0aGlzLl9wcm9wZXJ0aWVzPW51bGw7aWYocHJvcGVydGllcyl7UG9seW1lci5CYXNlLm1peGluKHRoaXMuY3VzdG9tU3R5bGUscHJvcGVydGllcyk7fQotdGhpcy5fc3R5bGVDYWNoZS5jbGVhcigpO2Zvcih2YXIgaT0wLHM7aTx0aGlzLl9zdHlsZXMubGVuZ3RoO2krKyl7cz10aGlzLl9zdHlsZXNbaV07cz1zLl9faW1wb3J0RWxlbWVudHx8cztzLl9hcHBseSgpO30KLWlmKG5hdGl2ZVZhcmlhYmxlcyl7c3R5bGVQcm9wZXJ0aWVzLnVwZGF0ZU5hdGl2ZVN0eWxlUHJvcGVydGllcyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdGhpcy5jdXN0b21TdHlsZSk7fX19O3JldHVybiBhcGk7fSgpOyhmdW5jdGlvbigpeyd1c2Ugc3RyaWN0Jzt2YXIgc2VyaWFsaXplVmFsdWVUb0F0dHJpYnV0ZT1Qb2x5bWVyLkJhc2Uuc2VyaWFsaXplVmFsdWVUb0F0dHJpYnV0ZTt2YXIgcHJvcGVydHlVdGlscz1Qb2x5bWVyLlN0eWxlUHJvcGVydGllczt2YXIgc3R5bGVUcmFuc2Zvcm1lcj1Qb2x5bWVyLlN0eWxlVHJhbnNmb3JtZXI7dmFyIHN0eWxlRGVmYXVsdHM9UG9seW1lci5TdHlsZURlZmF1bHRzO3ZhciBuYXRpdmVTaGFkb3c9UG9seW1lci5TZXR0aW5ncy51c2VOYXRpdmVTaGFkb3c7dmFyIG5hdGl2ZVZhcmlhYmxlcz1Qb2x5bWVyLlNldHRpbmdzLnVzZU5hdGl2ZUNTU1Byb3BlcnRpZXM7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfcHJlcFN0eWxlUHJvcGVydGllczpmdW5jdGlvbigpe2lmKCFuYXRpdmVWYXJpYWJsZXMpe3RoaXMuX293blN0eWxlUHJvcGVydHlOYW1lcz10aGlzLl9zdHlsZXMmJnRoaXMuX3N0eWxlcy5sZW5ndGg/cHJvcGVydHlVdGlscy5kZWNvcmF0ZVN0eWxlcyh0aGlzLl9zdHlsZXMsdGhpcyk6bnVsbDt9fSxjdXN0b21TdHlsZTpudWxsLGdldENvbXB1dGVkU3R5bGVWYWx1ZTpmdW5jdGlvbihwcm9wZXJ0eSl7aWYoIW5hdGl2ZVZhcmlhYmxlcyYmIXRoaXMuX3N0eWxlUHJvcGVydGllcyl7dGhpcy5fY29tcHV0ZVN0eWxlUHJvcGVydGllcygpO30KLXJldHVybiFuYXRpdmVWYXJpYWJsZXMmJnRoaXMuX3N0eWxlUHJvcGVydGllcyYmdGhpcy5fc3R5bGVQcm9wZXJ0aWVzW3Byb3BlcnR5XXx8Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTt9LF9zZXR1cFN0eWxlUHJvcGVydGllczpmdW5jdGlvbigpe3RoaXMuY3VzdG9tU3R5bGU9e307dGhpcy5fc3R5bGVDYWNoZT1udWxsO3RoaXMuX3N0eWxlUHJvcGVydGllcz1udWxsO3RoaXMuX3Njb3BlU2VsZWN0b3I9bnVsbDt0aGlzLl9vd25TdHlsZVByb3BlcnRpZXM9bnVsbDt0aGlzLl9jdXN0b21TdHlsZT1udWxsO30sX25lZWRzU3R5bGVQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oIW5hdGl2ZVZhcmlhYmxlcyYmdGhpcy5fb3duU3R5bGVQcm9wZXJ0eU5hbWVzJiZ0aGlzLl9vd25TdHlsZVByb3BlcnR5TmFtZXMubGVuZ3RoKTt9LF92YWxpZGF0ZUFwcGx5U2hpbTpmdW5jdGlvbigpe2lmKHRoaXMuX19hcHBseVNoaW1JbnZhbGlkKXtQb2x5bWVyLkFwcGx5U2hpbS50cmFuc2Zvcm0odGhpcy5fc3R5bGVzLHRoaXMuX19wcm90b19fKTt2YXIgY3NzVGV4dD1zdHlsZVRyYW5zZm9ybWVyLmVsZW1lbnRTdHlsZXModGhpcyk7aWYobmF0aXZlU2hhZG93KXt2YXIgdGVtcGxhdGVTdHlsZT10aGlzLl90ZW1wbGF0ZS5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoJ3N0eWxlJyk7aWYodGVtcGxhdGVTdHlsZSl7dGVtcGxhdGVTdHlsZS50ZXh0Q29udGVudD1jc3NUZXh0O319ZWxzZXt2YXIgc2hhZHlTdHlsZT10aGlzLl9zY29wZVN0eWxlJiZ0aGlzLl9zY29wZVN0eWxlLm5leHRTaWJsaW5nO2lmKHNoYWR5U3R5bGUpe3NoYWR5U3R5bGUudGV4dENvbnRlbnQ9Y3NzVGV4dDt9fX19LF9iZWZvcmVBdHRhY2hlZDpmdW5jdGlvbigpe2lmKCghdGhpcy5fc2NvcGVTZWxlY3Rvcnx8dGhpcy5fX3N0eWxlUHJvcGVydGllc0ludmFsaWQpJiZ0aGlzLl9uZWVkc1N0eWxlUHJvcGVydGllcygpKXt0aGlzLl9fc3R5bGVQcm9wZXJ0aWVzSW52YWxpZD1mYWxzZTt0aGlzLl91cGRhdGVTdHlsZVByb3BlcnRpZXMoKTt9fSxfZmluZFN0eWxlSG9zdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMscm9vdDt3aGlsZShyb290PVBvbHltZXIuZG9tKGUpLmdldE93bmVyUm9vdCgpKXtpZihQb2x5bWVyLmlzSW5zdGFuY2Uocm9vdC5ob3N0KSl7cmV0dXJuIHJvb3QuaG9zdDt9Ci1lPXJvb3QuaG9zdDt9Ci1yZXR1cm4gc3R5bGVEZWZhdWx0czt9LF91cGRhdGVTdHlsZVByb3BlcnRpZXM6ZnVuY3Rpb24oKXt2YXIgaW5mbyxzY29wZT10aGlzLl9maW5kU3R5bGVIb3N0KCk7aWYoIXNjb3BlLl9zdHlsZVByb3BlcnRpZXMpe3Njb3BlLl9jb21wdXRlU3R5bGVQcm9wZXJ0aWVzKCk7fQotaWYoIXNjb3BlLl9zdHlsZUNhY2hlKXtzY29wZS5fc3R5bGVDYWNoZT1uZXcgUG9seW1lci5TdHlsZUNhY2hlKCk7fQotdmFyIHNjb3BlRGF0YT1wcm9wZXJ0eVV0aWxzLnByb3BlcnR5RGF0YUZyb21TdHlsZXMoc2NvcGUuX3N0eWxlcyx0aGlzKTt2YXIgc2NvcGVDYWNoZWFibGU9IXRoaXMuX19ub3RTdHlsZVNjb3BlQ2FjaGVhYmxlO2lmKHNjb3BlQ2FjaGVhYmxlKXtzY29wZURhdGEua2V5LmN1c3RvbVN0eWxlPXRoaXMuY3VzdG9tU3R5bGU7aW5mbz1zY29wZS5fc3R5bGVDYWNoZS5yZXRyaWV2ZSh0aGlzLmlzLHNjb3BlRGF0YS5rZXksdGhpcy5fc3R5bGVzKTt9Ci12YXIgc2NvcGVDYWNoZWQ9Qm9vbGVhbihpbmZvKTtpZihzY29wZUNhY2hlZCl7dGhpcy5fc3R5bGVQcm9wZXJ0aWVzPWluZm8uX3N0eWxlUHJvcGVydGllczt9ZWxzZXt0aGlzLl9jb21wdXRlU3R5bGVQcm9wZXJ0aWVzKHNjb3BlRGF0YS5wcm9wZXJ0aWVzKTt9Ci10aGlzLl9jb21wdXRlT3duU3R5bGVQcm9wZXJ0aWVzKCk7aWYoIXNjb3BlQ2FjaGVkKXtpbmZvPXN0eWxlQ2FjaGUucmV0cmlldmUodGhpcy5pcyx0aGlzLl9vd25TdHlsZVByb3BlcnRpZXMsdGhpcy5fc3R5bGVzKTt9Ci12YXIgZ2xvYmFsQ2FjaGVkPUJvb2xlYW4oaW5mbykmJiFzY29wZUNhY2hlZDt2YXIgc3R5bGU9dGhpcy5fYXBwbHlTdHlsZVByb3BlcnRpZXMoaW5mbyk7aWYoIXNjb3BlQ2FjaGVkKXtzdHlsZT1zdHlsZSYmbmF0aXZlU2hhZG93P3N0eWxlLmNsb25lTm9kZSh0cnVlKTpzdHlsZTtpbmZvPXtzdHlsZTpzdHlsZSxfc2NvcGVTZWxlY3Rvcjp0aGlzLl9zY29wZVNlbGVjdG9yLF9zdHlsZVByb3BlcnRpZXM6dGhpcy5fc3R5bGVQcm9wZXJ0aWVzfTtpZihzY29wZUNhY2hlYWJsZSl7c2NvcGVEYXRhLmtleS5jdXN0b21TdHlsZT17fTt0aGlzLm1peGluKHNjb3BlRGF0YS5rZXkuY3VzdG9tU3R5bGUsdGhpcy5jdXN0b21TdHlsZSk7c2NvcGUuX3N0eWxlQ2FjaGUuc3RvcmUodGhpcy5pcyxpbmZvLHNjb3BlRGF0YS5rZXksdGhpcy5fc3R5bGVzKTt9Ci1pZighZ2xvYmFsQ2FjaGVkKXtzdHlsZUNhY2hlLnN0b3JlKHRoaXMuaXMsT2JqZWN0LmNyZWF0ZShpbmZvKSx0aGlzLl9vd25TdHlsZVByb3BlcnRpZXMsdGhpcy5fc3R5bGVzKTt9fX0sX2NvbXB1dGVTdHlsZVByb3BlcnRpZXM6ZnVuY3Rpb24oc2NvcGVQcm9wcyl7dmFyIHNjb3BlPXRoaXMuX2ZpbmRTdHlsZUhvc3QoKTtpZighc2NvcGUuX3N0eWxlUHJvcGVydGllcyl7c2NvcGUuX2NvbXB1dGVTdHlsZVByb3BlcnRpZXMoKTt9Ci12YXIgcHJvcHM9T2JqZWN0LmNyZWF0ZShzY29wZS5fc3R5bGVQcm9wZXJ0aWVzKTt2YXIgaG9zdEFuZFJvb3RQcm9wcz1wcm9wZXJ0eVV0aWxzLmhvc3RBbmRSb290UHJvcGVydGllc0ZvclNjb3BlKHRoaXMpO3RoaXMubWl4aW4ocHJvcHMsaG9zdEFuZFJvb3RQcm9wcy5ob3N0UHJvcHMpO3Njb3BlUHJvcHM9c2NvcGVQcm9wc3x8cHJvcGVydHlVdGlscy5wcm9wZXJ0eURhdGFGcm9tU3R5bGVzKHNjb3BlLl9zdHlsZXMsdGhpcykucHJvcGVydGllczt0aGlzLm1peGluKHByb3BzLHNjb3BlUHJvcHMpO3RoaXMubWl4aW4ocHJvcHMsaG9zdEFuZFJvb3RQcm9wcy5yb290UHJvcHMpO3Byb3BlcnR5VXRpbHMubWl4aW5DdXN0b21TdHlsZShwcm9wcyx0aGlzLmN1c3RvbVN0eWxlKTtwcm9wZXJ0eVV0aWxzLnJlaWZ5KHByb3BzKTt0aGlzLl9zdHlsZVByb3BlcnRpZXM9cHJvcHM7fSxfY29tcHV0ZU93blN0eWxlUHJvcGVydGllczpmdW5jdGlvbigpe3ZhciBwcm9wcz17fTtmb3IodmFyIGk9MCxuO2k8dGhpcy5fb3duU3R5bGVQcm9wZXJ0eU5hbWVzLmxlbmd0aDtpKyspe249dGhpcy5fb3duU3R5bGVQcm9wZXJ0eU5hbWVzW2ldO3Byb3BzW25dPXRoaXMuX3N0eWxlUHJvcGVydGllc1tuXTt9Ci10aGlzLl9vd25TdHlsZVByb3BlcnRpZXM9cHJvcHM7fSxfc2NvcGVDb3VudDowLF9hcHBseVN0eWxlUHJvcGVydGllczpmdW5jdGlvbihpbmZvKXt2YXIgb2xkU2NvcGVTZWxlY3Rvcj10aGlzLl9zY29wZVNlbGVjdG9yO3RoaXMuX3Njb3BlU2VsZWN0b3I9aW5mbz9pbmZvLl9zY29wZVNlbGVjdG9yOnRoaXMuaXMrJy0nK3RoaXMuX19wcm90b19fLl9zY29wZUNvdW50Kys7dmFyIHN0eWxlPXByb3BlcnR5VXRpbHMuYXBwbHlFbGVtZW50U3R5bGUodGhpcyx0aGlzLl9zdHlsZVByb3BlcnRpZXMsdGhpcy5fc2NvcGVTZWxlY3RvcixpbmZvJiZpbmZvLnN0eWxlKTtpZighbmF0aXZlU2hhZG93KXtwcm9wZXJ0eVV0aWxzLmFwcGx5RWxlbWVudFNjb3BlU2VsZWN0b3IodGhpcyx0aGlzLl9zY29wZVNlbGVjdG9yLG9sZFNjb3BlU2VsZWN0b3IsdGhpcy5fc2NvcGVDc3NWaWFBdHRyKTt9Ci1yZXR1cm4gc3R5bGU7fSxzZXJpYWxpemVWYWx1ZVRvQXR0cmlidXRlOmZ1bmN0aW9uKHZhbHVlLGF0dHJpYnV0ZSxub2RlKXtub2RlPW5vZGV8fHRoaXM7aWYoYXR0cmlidXRlPT09J2NsYXNzJyYmIW5hdGl2ZVNoYWRvdyl7dmFyIGhvc3Q9bm9kZT09PXRoaXM/dGhpcy5kb21Ib3N0fHx0aGlzLmRhdGFIb3N0OnRoaXM7aWYoaG9zdCl7dmFsdWU9aG9zdC5fc2NvcGVFbGVtZW50Q2xhc3Mobm9kZSx2YWx1ZSk7fX0KLW5vZGU9dGhpcy5zaGFkeVJvb3QmJnRoaXMuc2hhZHlSb290Ll9oYXNEaXN0cmlidXRlZD9Qb2x5bWVyLmRvbShub2RlKTpub2RlO3NlcmlhbGl6ZVZhbHVlVG9BdHRyaWJ1dGUuY2FsbCh0aGlzLHZhbHVlLGF0dHJpYnV0ZSxub2RlKTt9LF9zY29wZUVsZW1lbnRDbGFzczpmdW5jdGlvbihlbGVtZW50LHNlbGVjdG9yKXtpZighbmF0aXZlU2hhZG93JiYhdGhpcy5fc2NvcGVDc3NWaWFBdHRyKXtzZWxlY3Rvcj0oc2VsZWN0b3I/c2VsZWN0b3IrJyAnOicnKStTQ09QRV9OQU1FKycgJyt0aGlzLmlzKyhlbGVtZW50Ll9zY29wZVNlbGVjdG9yPycgJytYU0NPUEVfTkFNRSsnICcrZWxlbWVudC5fc2NvcGVTZWxlY3RvcjonJyk7fQotcmV0dXJuIHNlbGVjdG9yO30sdXBkYXRlU3R5bGVzOmZ1bmN0aW9uKHByb3BlcnRpZXMpe2lmKHByb3BlcnRpZXMpe3RoaXMubWl4aW4odGhpcy5jdXN0b21TdHlsZSxwcm9wZXJ0aWVzKTt9Ci1pZihuYXRpdmVWYXJpYWJsZXMpe3Byb3BlcnR5VXRpbHMudXBkYXRlTmF0aXZlU3R5bGVQcm9wZXJ0aWVzKHRoaXMsdGhpcy5jdXN0b21TdHlsZSk7fWVsc2V7aWYodGhpcy5pc0F0dGFjaGVkKXtpZih0aGlzLl9uZWVkc1N0eWxlUHJvcGVydGllcygpKXt0aGlzLl91cGRhdGVTdHlsZVByb3BlcnRpZXMoKTt9ZWxzZXt0aGlzLl9zdHlsZVByb3BlcnRpZXM9bnVsbDt9fWVsc2V7dGhpcy5fX3N0eWxlUHJvcGVydGllc0ludmFsaWQ9dHJ1ZTt9Ci1pZih0aGlzLl9zdHlsZUNhY2hlKXt0aGlzLl9zdHlsZUNhY2hlLmNsZWFyKCk7fQotdGhpcy5fdXBkYXRlUm9vdFN0eWxlcygpO319LF91cGRhdGVSb290U3R5bGVzOmZ1bmN0aW9uKHJvb3Qpe3Jvb3Q9cm9vdHx8dGhpcy5yb290O3ZhciBjJD1Qb2x5bWVyLmRvbShyb290KS5fcXVlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2hhZHlSb290fHxlLnNoYWRvd1Jvb3Q7fSk7Zm9yKHZhciBpPTAsbD1jJC5sZW5ndGgsYztpPGwmJihjPWMkW2ldKTtpKyspe2lmKGMudXBkYXRlU3R5bGVzKXtjLnVwZGF0ZVN0eWxlcygpO319fX0pO1BvbHltZXIudXBkYXRlU3R5bGVzPWZ1bmN0aW9uKHByb3BlcnRpZXMpe3N0eWxlRGVmYXVsdHMudXBkYXRlU3R5bGVzKHByb3BlcnRpZXMpO1BvbHltZXIuQmFzZS5fdXBkYXRlUm9vdFN0eWxlcyhkb2N1bWVudCk7fTt2YXIgc3R5bGVDYWNoZT1uZXcgUG9seW1lci5TdHlsZUNhY2hlKCk7UG9seW1lci5jdXN0b21TdHlsZUNhY2hlPXN0eWxlQ2FjaGU7dmFyIFNDT1BFX05BTUU9c3R5bGVUcmFuc2Zvcm1lci5TQ09QRV9OQU1FO3ZhciBYU0NPUEVfTkFNRT1wcm9wZXJ0eVV0aWxzLlhTQ09QRV9OQU1FO30oKSk7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfcmVnaXN0ZXJGZWF0dXJlczpmdW5jdGlvbigpe3RoaXMuX3ByZXBJcygpO2lmKHRoaXMuZmFjdG9yeUltcGwpe3RoaXMuX3ByZXBDb25zdHJ1Y3RvcigpO30KLXRoaXMuX3ByZXBTdHlsZXMoKTt9LF9maW5pc2hSZWdpc3RlckZlYXR1cmVzOmZ1bmN0aW9uKCl7dGhpcy5fcHJlcFRlbXBsYXRlKCk7dGhpcy5fcHJlcFNoaW1TdHlsZXMoKTt0aGlzLl9wcmVwQW5ub3RhdGlvbnMoKTt0aGlzLl9wcmVwRWZmZWN0cygpO3RoaXMuX3ByZXBCZWhhdmlvcnMoKTt0aGlzLl9wcmVwUHJvcGVydHlJbmZvKCk7dGhpcy5fcHJlcEJpbmRpbmdzKCk7dGhpcy5fcHJlcFNoYWR5KCk7fSxfcHJlcEJlaGF2aW9yOmZ1bmN0aW9uKGIpe3RoaXMuX2FkZFByb3BlcnR5RWZmZWN0cyhiLnByb3BlcnRpZXMpO3RoaXMuX2FkZENvbXBsZXhPYnNlcnZlckVmZmVjdHMoYi5vYnNlcnZlcnMpO3RoaXMuX2FkZEhvc3RBdHRyaWJ1dGVzKGIuaG9zdEF0dHJpYnV0ZXMpO30sX2luaXRGZWF0dXJlczpmdW5jdGlvbigpe3RoaXMuX3NldHVwR2VzdHVyZXMoKTt0aGlzLl9zZXR1cENvbmZpZ3VyZSh0aGlzLl9fZGF0YV9fKTt0aGlzLl9zZXR1cFN0eWxlUHJvcGVydGllcygpO3RoaXMuX3NldHVwRGVib3VuY2VycygpO3RoaXMuX3NldHVwU2hhZHkoKTt0aGlzLl9yZWdpc3Rlckhvc3QoKTtpZih0aGlzLl90ZW1wbGF0ZSl7dGhpcy5fdmFsaWRhdGVBcHBseVNoaW0oKTt0aGlzLl9wb29sQ29udGVudCgpO3RoaXMuX2JlZ2luSG9zdGluZygpO3RoaXMuX3N0YW1wVGVtcGxhdGUoKTt0aGlzLl9lbmRIb3N0aW5nKCk7dGhpcy5fbWFyc2hhbEFubm90YXRpb25SZWZlcmVuY2VzKCk7fQotdGhpcy5fbWFyc2hhbEluc3RhbmNlRWZmZWN0cygpO3RoaXMuX21hcnNoYWxCZWhhdmlvcnMoKTt0aGlzLl9tYXJzaGFsSG9zdEF0dHJpYnV0ZXMoKTt0aGlzLl9tYXJzaGFsQXR0cmlidXRlcygpO3RoaXMuX3RyeVJlYWR5KCk7fSxfbWFyc2hhbEJlaGF2aW9yOmZ1bmN0aW9uKGIpe2lmKGIubGlzdGVuZXJzKXt0aGlzLl9saXN0ZW5MaXN0ZW5lcnMoYi5saXN0ZW5lcnMpO319fSk7KGZ1bmN0aW9uKCl7dmFyIHByb3BlcnR5VXRpbHM9UG9seW1lci5TdHlsZVByb3BlcnRpZXM7dmFyIHN0eWxlVXRpbD1Qb2x5bWVyLlN0eWxlVXRpbDt2YXIgY3NzUGFyc2U9UG9seW1lci5Dc3NQYXJzZTt2YXIgc3R5bGVEZWZhdWx0cz1Qb2x5bWVyLlN0eWxlRGVmYXVsdHM7dmFyIHN0eWxlVHJhbnNmb3JtZXI9UG9seW1lci5TdHlsZVRyYW5zZm9ybWVyO3ZhciBhcHBseVNoaW09UG9seW1lci5BcHBseVNoaW07dmFyIGRlYm91bmNlPVBvbHltZXIuRGVib3VuY2U7dmFyIHNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7dmFyIHVwZGF0ZURlYm91bmNlcjtQb2x5bWVyKHtpczonY3VzdG9tLXN0eWxlJyxleHRlbmRzOidzdHlsZScsX3RlbXBsYXRlOm51bGwscHJvcGVydGllczp7aW5jbHVkZTpTdHJpbmd9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fX2FwcGxpZWRFbGVtZW50PXRoaXMuX19hcHBsaWVkRWxlbWVudHx8dGhpczt0aGlzLl9fY3NzQnVpbGQ9c3R5bGVVdGlsLmdldENzc0J1aWxkVHlwZSh0aGlzKTtpZih0aGlzLl9fYXBwbGllZEVsZW1lbnQhPT10aGlzKXt0aGlzLl9fYXBwbGllZEVsZW1lbnQuX19jc3NCdWlsZD10aGlzLl9fY3NzQnVpbGQ7fQotaWYodGhpcy5vd25lckRvY3VtZW50IT09d2luZG93LmRvY3VtZW50JiZ0aGlzLl9fYXBwbGllZEVsZW1lbnQ9PT10aGlzKXtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMpO30KLXRoaXMuX3RyeUFwcGx5KCk7fSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3RyeUFwcGx5KCk7fSxfdHJ5QXBwbHk6ZnVuY3Rpb24oKXtpZighdGhpcy5fYXBwbGllc1RvRG9jdW1lbnQpe2lmKHRoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmxvY2FsTmFtZSE9PSdkb20tbW9kdWxlJyl7dGhpcy5fYXBwbGllc1RvRG9jdW1lbnQ9dHJ1ZTt2YXIgZT10aGlzLl9fYXBwbGllZEVsZW1lbnQ7aWYoIXNldHRpbmdzLnVzZU5hdGl2ZUNTU1Byb3BlcnRpZXMpe3RoaXMuX19uZWVkc1VwZGF0ZVN0eWxlcz1zdHlsZURlZmF1bHRzLmhhc1N0eWxlUHJvcGVydGllcygpO3N0eWxlRGVmYXVsdHMuYWRkU3R5bGUoZSk7fQotaWYoZS50ZXh0Q29udGVudHx8dGhpcy5pbmNsdWRlKXt0aGlzLl9hcHBseSh0cnVlKTt9ZWxzZXt2YXIgc2VsZj10aGlzO3ZhciBvYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpe29ic2VydmVyLmRpc2Nvbm5lY3QoKTtzZWxmLl9hcHBseSh0cnVlKTt9KTtvYnNlcnZlci5vYnNlcnZlKGUse2NoaWxkTGlzdDp0cnVlfSk7fX19fSxfdXBkYXRlU3R5bGVzOmZ1bmN0aW9uKCl7UG9seW1lci51cGRhdGVTdHlsZXMoKTt9LF9hcHBseTpmdW5jdGlvbihpbml0aWFsQXBwbHkpe3ZhciBlPXRoaXMuX19hcHBsaWVkRWxlbWVudDtpZih0aGlzLmluY2x1ZGUpe2UudGV4dENvbnRlbnQ9c3R5bGVVdGlsLmNzc0Zyb21Nb2R1bGVzKHRoaXMuaW5jbHVkZSx0cnVlKStlLnRleHRDb250ZW50O30KLWlmKCFlLnRleHRDb250ZW50KXtyZXR1cm47fQotdmFyIGJ1aWxkVHlwZT10aGlzLl9fY3NzQnVpbGQ7dmFyIHRhcmdldGVkQnVpbGQ9c3R5bGVVdGlsLmlzVGFyZ2V0ZWRCdWlsZChidWlsZFR5cGUpO2lmKHNldHRpbmdzLnVzZU5hdGl2ZUNTU1Byb3BlcnRpZXMmJnRhcmdldGVkQnVpbGQpe3JldHVybjt9Ci12YXIgc3R5bGVSdWxlcz1zdHlsZVV0aWwucnVsZXNGb3JTdHlsZShlKTtpZighdGFyZ2V0ZWRCdWlsZCl7c3R5bGVVdGlsLmZvckVhY2hSdWxlKHN0eWxlUnVsZXMsZnVuY3Rpb24ocnVsZSl7c3R5bGVUcmFuc2Zvcm1lci5kb2N1bWVudFJ1bGUocnVsZSk7fSk7aWYoc2V0dGluZ3MudXNlTmF0aXZlQ1NTUHJvcGVydGllcyYmIWJ1aWxkVHlwZSl7YXBwbHlTaGltLnRyYW5zZm9ybShbZV0pO319Ci1pZihzZXR0aW5ncy51c2VOYXRpdmVDU1NQcm9wZXJ0aWVzKXtlLnRleHRDb250ZW50PXN0eWxlVXRpbC50b0Nzc1RleHQoc3R5bGVSdWxlcyk7fWVsc2V7dmFyIHNlbGY9dGhpczt2YXIgZm49ZnVuY3Rpb24gZm4oKXtzZWxmLl9mbHVzaEN1c3RvbVByb3BlcnRpZXMoKTt9O2lmKGluaXRpYWxBcHBseSl7UG9seW1lci5SZW5kZXJTdGF0dXMud2hlblJlYWR5KGZuKTt9ZWxzZXtmbigpO319fSxfZmx1c2hDdXN0b21Qcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7aWYodGhpcy5fX25lZWRzVXBkYXRlU3R5bGVzKXt0aGlzLl9fbmVlZHNVcGRhdGVTdHlsZXM9ZmFsc2U7dXBkYXRlRGVib3VuY2VyPWRlYm91bmNlKHVwZGF0ZURlYm91bmNlcix0aGlzLl91cGRhdGVTdHlsZXMpO31lbHNle3RoaXMuX2FwcGx5Q3VzdG9tUHJvcGVydGllcygpO319LF9hcHBseUN1c3RvbVByb3BlcnRpZXM6ZnVuY3Rpb24oKXt2YXIgZWxlbWVudD10aGlzLl9fYXBwbGllZEVsZW1lbnQ7dGhpcy5fY29tcHV0ZVN0eWxlUHJvcGVydGllcygpO3ZhciBwcm9wcz10aGlzLl9zdHlsZVByb3BlcnRpZXM7dmFyIHJ1bGVzPXN0eWxlVXRpbC5ydWxlc0ZvclN0eWxlKGVsZW1lbnQpO2lmKCFydWxlcyl7cmV0dXJuO30KLWVsZW1lbnQudGV4dENvbnRlbnQ9c3R5bGVVdGlsLnRvQ3NzVGV4dChydWxlcyxmdW5jdGlvbihydWxlKXt2YXIgY3NzPXJ1bGUuY3NzVGV4dD1ydWxlLnBhcnNlZENzc1RleHQ7aWYocnVsZS5wcm9wZXJ0eUluZm8mJnJ1bGUucHJvcGVydHlJbmZvLmNzc1RleHQpe2Nzcz1jc3NQYXJzZS5yZW1vdmVDdXN0b21Qcm9wQXNzaWdubWVudChjc3MpO3J1bGUuY3NzVGV4dD1wcm9wZXJ0eVV0aWxzLnZhbHVlRm9yUHJvcGVydGllcyhjc3MscHJvcHMpO319KTt9fSk7fSgpKTtQb2x5bWVyLlRlbXBsYXRpemVyPXtwcm9wZXJ0aWVzOntfX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX186e29ic2VydmVyOidfc2hvd0hpZGVDaGlsZHJlbid9fSxfaW5zdGFuY2VQcm9wczpQb2x5bWVyLm5vYixfcGFyZW50UHJvcFByZWZpeDonX3BhcmVudF8nLHRlbXBsYXRpemU6ZnVuY3Rpb24odGVtcGxhdGUpe3RoaXMuX3RlbXBsYXRpemVkPXRlbXBsYXRlO2lmKCF0ZW1wbGF0ZS5fY29udGVudCl7dGVtcGxhdGUuX2NvbnRlbnQ9dGVtcGxhdGUuY29udGVudDt9Ci1pZih0ZW1wbGF0ZS5fY29udGVudC5fY3Rvcil7dGhpcy5jdG9yPXRlbXBsYXRlLl9jb250ZW50Ll9jdG9yO3RoaXMuX3ByZXBQYXJlbnRQcm9wZXJ0aWVzKHRoaXMuY3Rvci5wcm90b3R5cGUsdGVtcGxhdGUpO3JldHVybjt9Ci12YXIgYXJjaGV0eXBlPU9iamVjdC5jcmVhdGUoUG9seW1lci5CYXNlKTt0aGlzLl9jdXN0b21QcmVwQW5ub3RhdGlvbnMoYXJjaGV0eXBlLHRlbXBsYXRlKTt0aGlzLl9wcmVwUGFyZW50UHJvcGVydGllcyhhcmNoZXR5cGUsdGVtcGxhdGUpO2FyY2hldHlwZS5fcHJlcEVmZmVjdHMoKTt0aGlzLl9jdXN0b21QcmVwRWZmZWN0cyhhcmNoZXR5cGUpO2FyY2hldHlwZS5fcHJlcEJlaGF2aW9ycygpO2FyY2hldHlwZS5fcHJlcFByb3BlcnR5SW5mbygpO2FyY2hldHlwZS5fcHJlcEJpbmRpbmdzKCk7YXJjaGV0eXBlLl9ub3RpZnlQYXRoVXA9dGhpcy5fbm90aWZ5UGF0aFVwSW1wbDthcmNoZXR5cGUuX3Njb3BlRWxlbWVudENsYXNzPXRoaXMuX3Njb3BlRWxlbWVudENsYXNzSW1wbDthcmNoZXR5cGUubGlzdGVuPXRoaXMuX2xpc3RlbkltcGw7YXJjaGV0eXBlLl9zaG93SGlkZUNoaWxkcmVuPXRoaXMuX3Nob3dIaWRlQ2hpbGRyZW5JbXBsO2FyY2hldHlwZS5fX3NldFByb3BlcnR5T3JpZz10aGlzLl9fc2V0UHJvcGVydHk7YXJjaGV0eXBlLl9fc2V0UHJvcGVydHk9dGhpcy5fX3NldFByb3BlcnR5SW1wbDt2YXIgX2NvbnN0cnVjdG9yPXRoaXMuX2NvbnN0cnVjdG9ySW1wbDt2YXIgY3Rvcj1mdW5jdGlvbiBUZW1wbGF0ZUluc3RhbmNlKG1vZGVsLGhvc3Qpe19jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsbW9kZWwsaG9zdCk7fTtjdG9yLnByb3RvdHlwZT1hcmNoZXR5cGU7YXJjaGV0eXBlLmNvbnN0cnVjdG9yPWN0b3I7dGVtcGxhdGUuX2NvbnRlbnQuX2N0b3I9Y3Rvcjt0aGlzLmN0b3I9Y3Rvcjt9LF9nZXRSb290RGF0YUhvc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhSG9zdCYmdGhpcy5kYXRhSG9zdC5fcm9vdERhdGFIb3N0fHx0aGlzLmRhdGFIb3N0O30sX3Nob3dIaWRlQ2hpbGRyZW5JbXBsOmZ1bmN0aW9uKGhpZGUpe3ZhciBjPXRoaXMuX2NoaWxkcmVuO2Zvcih2YXIgaT0wO2k8Yy5sZW5ndGg7aSsrKXt2YXIgbj1jW2ldO2lmKEJvb2xlYW4oaGlkZSkhPUJvb2xlYW4obi5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX18pKXtpZihuLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2lmKGhpZGUpe24uX19wb2x5bWVyVGV4dENvbnRlbnRfXz1uLnRleHRDb250ZW50O24udGV4dENvbnRlbnQ9Jyc7fWVsc2V7bi50ZXh0Q29udGVudD1uLl9fcG9seW1lclRleHRDb250ZW50X187fX1lbHNlIGlmKG4uc3R5bGUpe2lmKGhpZGUpe24uX19wb2x5bWVyRGlzcGxheV9fPW4uc3R5bGUuZGlzcGxheTtuLnN0eWxlLmRpc3BsYXk9J25vbmUnO31lbHNle24uc3R5bGUuZGlzcGxheT1uLl9fcG9seW1lckRpc3BsYXlfXzt9fX0KLW4uX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fPWhpZGU7fX0sX19zZXRQcm9wZXJ0eUltcGw6ZnVuY3Rpb24ocHJvcGVydHksdmFsdWUsZnJvbUFib3ZlLG5vZGUpe2lmKG5vZGUmJm5vZGUuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fJiZwcm9wZXJ0eT09J3RleHRDb250ZW50Jyl7cHJvcGVydHk9J19fcG9seW1lclRleHRDb250ZW50X18nO30KLXRoaXMuX19zZXRQcm9wZXJ0eU9yaWcocHJvcGVydHksdmFsdWUsZnJvbUFib3ZlLG5vZGUpO30sX2RlYm91bmNlVGVtcGxhdGU6ZnVuY3Rpb24oZm4pe1BvbHltZXIuZG9tLmFkZERlYm91bmNlcih0aGlzLmRlYm91bmNlKCdfZGVib3VuY2VUZW1wbGF0ZScsZm4pKTt9LF9mbHVzaFRlbXBsYXRlczpmdW5jdGlvbigpe1BvbHltZXIuZG9tLmZsdXNoKCk7fSxfY3VzdG9tUHJlcEVmZmVjdHM6ZnVuY3Rpb24oYXJjaGV0eXBlKXt2YXIgcGFyZW50UHJvcHM9YXJjaGV0eXBlLl9wYXJlbnRQcm9wcztmb3IodmFyIHByb3AgaW4gcGFyZW50UHJvcHMpe2FyY2hldHlwZS5fYWRkUHJvcGVydHlFZmZlY3QocHJvcCwnZnVuY3Rpb24nLHRoaXMuX2NyZWF0ZUhvc3RQcm9wRWZmZWN0b3IocHJvcCkpO30KLWZvcihwcm9wIGluIHRoaXMuX2luc3RhbmNlUHJvcHMpe2FyY2hldHlwZS5fYWRkUHJvcGVydHlFZmZlY3QocHJvcCwnZnVuY3Rpb24nLHRoaXMuX2NyZWF0ZUluc3RhbmNlUHJvcEVmZmVjdG9yKHByb3ApKTt9fSxfY3VzdG9tUHJlcEFubm90YXRpb25zOmZ1bmN0aW9uKGFyY2hldHlwZSx0ZW1wbGF0ZSl7YXJjaGV0eXBlLl90ZW1wbGF0ZT10ZW1wbGF0ZTt2YXIgYz10ZW1wbGF0ZS5fY29udGVudDtpZighYy5fbm90ZXMpe3ZhciByb290RGF0YUhvc3Q9YXJjaGV0eXBlLl9yb290RGF0YUhvc3Q7aWYocm9vdERhdGFIb3N0KXtQb2x5bWVyLkFubm90YXRpb25zLnByZXBFbGVtZW50PWZ1bmN0aW9uKCl7cm9vdERhdGFIb3N0Ll9wcmVwRWxlbWVudCgpO307fQotYy5fbm90ZXM9UG9seW1lci5Bbm5vdGF0aW9ucy5wYXJzZUFubm90YXRpb25zKHRlbXBsYXRlKTtQb2x5bWVyLkFubm90YXRpb25zLnByZXBFbGVtZW50PW51bGw7dGhpcy5fcHJvY2Vzc0Fubm90YXRpb25zKGMuX25vdGVzKTt9Ci1hcmNoZXR5cGUuX25vdGVzPWMuX25vdGVzO2FyY2hldHlwZS5fcGFyZW50UHJvcHM9Yy5fcGFyZW50UHJvcHM7fSxfcHJlcFBhcmVudFByb3BlcnRpZXM6ZnVuY3Rpb24oYXJjaGV0eXBlLHRlbXBsYXRlKXt2YXIgcGFyZW50UHJvcHM9dGhpcy5fcGFyZW50UHJvcHM9YXJjaGV0eXBlLl9wYXJlbnRQcm9wcztpZih0aGlzLl9mb3J3YXJkUGFyZW50UHJvcCYmcGFyZW50UHJvcHMpe3ZhciBwcm90bz1hcmNoZXR5cGUuX3BhcmVudFByb3BQcm90bzt2YXIgcHJvcDtpZighcHJvdG8pe2Zvcihwcm9wIGluIHRoaXMuX2luc3RhbmNlUHJvcHMpe2RlbGV0ZSBwYXJlbnRQcm9wc1twcm9wXTt9Ci1wcm90bz1hcmNoZXR5cGUuX3BhcmVudFByb3BQcm90bz1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHRlbXBsYXRlIT10aGlzKXtQb2x5bWVyLkJpbmQucHJlcGFyZU1vZGVsKHByb3RvKTtQb2x5bWVyLkJhc2UucHJlcGFyZU1vZGVsTm90aWZ5UGF0aChwcm90byk7fQotZm9yKHByb3AgaW4gcGFyZW50UHJvcHMpe3ZhciBwYXJlbnRQcm9wPXRoaXMuX3BhcmVudFByb3BQcmVmaXgrcHJvcDt2YXIgZWZmZWN0cz1be2tpbmQ6J2Z1bmN0aW9uJyxlZmZlY3Q6dGhpcy5fY3JlYXRlRm9yd2FyZFByb3BFZmZlY3Rvcihwcm9wKSxmbjpQb2x5bWVyLkJpbmQuX2Z1bmN0aW9uRWZmZWN0fSx7a2luZDonbm90aWZ5JyxmbjpQb2x5bWVyLkJpbmQuX25vdGlmeUVmZmVjdCxlZmZlY3Q6e2V2ZW50OlBvbHltZXIuQ2FzZU1hcC5jYW1lbFRvRGFzaENhc2UocGFyZW50UHJvcCkrJy1jaGFuZ2VkJ319XTtwcm90by5fcHJvcGVydHlFZmZlY3RzPXByb3RvLl9wcm9wZXJ0eUVmZmVjdHN8fHt9O3Byb3RvLl9wcm9wZXJ0eUVmZmVjdHNbcGFyZW50UHJvcF09ZWZmZWN0cztQb2x5bWVyLkJpbmQuX2NyZWF0ZUFjY2Vzc29ycyhwcm90byxwYXJlbnRQcm9wLGVmZmVjdHMpO319Ci12YXIgc2VsZj10aGlzO2lmKHRlbXBsYXRlIT10aGlzKXtQb2x5bWVyLkJpbmQucHJlcGFyZUluc3RhbmNlKHRlbXBsYXRlKTt0ZW1wbGF0ZS5fZm9yd2FyZFBhcmVudFByb3A9ZnVuY3Rpb24oc291cmNlLHZhbHVlKXtzZWxmLl9mb3J3YXJkUGFyZW50UHJvcChzb3VyY2UsdmFsdWUpO307fQotdGhpcy5fZXh0ZW5kVGVtcGxhdGUodGVtcGxhdGUscHJvdG8pO3RlbXBsYXRlLl9wYXRoRWZmZWN0b3I9ZnVuY3Rpb24ocGF0aCx2YWx1ZSxmcm9tQWJvdmUpe3JldHVybiBzZWxmLl9wYXRoRWZmZWN0b3JJbXBsKHBhdGgsdmFsdWUsZnJvbUFib3ZlKTt9O319LF9jcmVhdGVGb3J3YXJkUHJvcEVmZmVjdG9yOmZ1bmN0aW9uKHByb3Ape3JldHVybiBmdW5jdGlvbihzb3VyY2UsdmFsdWUpe3RoaXMuX2ZvcndhcmRQYXJlbnRQcm9wKHByb3AsdmFsdWUpO307fSxfY3JlYXRlSG9zdFByb3BFZmZlY3RvcjpmdW5jdGlvbihwcm9wKXt2YXIgcHJlZml4PXRoaXMuX3BhcmVudFByb3BQcmVmaXg7cmV0dXJuIGZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSl7dGhpcy5kYXRhSG9zdC5fdGVtcGxhdGl6ZWRbcHJlZml4K3Byb3BdPXZhbHVlO307fSxfY3JlYXRlSW5zdGFuY2VQcm9wRWZmZWN0b3I6ZnVuY3Rpb24ocHJvcCl7cmV0dXJuIGZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSxvbGQsZnJvbUFib3ZlKXtpZighZnJvbUFib3ZlKXt0aGlzLmRhdGFIb3N0Ll9mb3J3YXJkSW5zdGFuY2VQcm9wKHRoaXMscHJvcCx2YWx1ZSk7fX07fSxfZXh0ZW5kVGVtcGxhdGU6ZnVuY3Rpb24odGVtcGxhdGUscHJvdG8pe3ZhciBuJD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90byk7aWYocHJvdG8uX3Byb3BlcnR5U2V0dGVyKXt0ZW1wbGF0ZS5fcHJvcGVydHlTZXR0ZXI9cHJvdG8uX3Byb3BlcnR5U2V0dGVyO30KLWZvcih2YXIgaT0wLG47aTxuJC5sZW5ndGgmJihuPW4kW2ldKTtpKyspe3ZhciB2YWw9dGVtcGxhdGVbbl07aWYodmFsJiZuPT0nX3Byb3BlcnR5RWZmZWN0cycpe3ZhciBwZT1Qb2x5bWVyLkJhc2UubWl4aW4oe30sdmFsKTt0ZW1wbGF0ZS5fcHJvcGVydHlFZmZlY3RzPVBvbHltZXIuQmFzZS5taXhpbihwZSxwcm90by5fcHJvcGVydHlFZmZlY3RzKTt9ZWxzZXt2YXIgcGQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90byxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGVtcGxhdGUsbixwZCk7aWYodmFsIT09dW5kZWZpbmVkKXt0ZW1wbGF0ZS5fcHJvcGVydHlTZXR0ZXIobix2YWwpO319fX0sX3Nob3dIaWRlQ2hpbGRyZW46ZnVuY3Rpb24oaGlkZGVuKXt9LF9mb3J3YXJkSW5zdGFuY2VQYXRoOmZ1bmN0aW9uKGluc3QscGF0aCx2YWx1ZSl7fSxfZm9yd2FyZEluc3RhbmNlUHJvcDpmdW5jdGlvbihpbnN0LHByb3AsdmFsdWUpe30sX25vdGlmeVBhdGhVcEltcGw6ZnVuY3Rpb24ocGF0aCx2YWx1ZSl7dmFyIGRhdGFIb3N0PXRoaXMuZGF0YUhvc3Q7dmFyIHJvb3Q9UG9seW1lci5QYXRoLnJvb3QocGF0aCk7ZGF0YUhvc3QuX2ZvcndhcmRJbnN0YW5jZVBhdGguY2FsbChkYXRhSG9zdCx0aGlzLHBhdGgsdmFsdWUpO2lmKHJvb3QgaW4gZGF0YUhvc3QuX3BhcmVudFByb3BzKXtkYXRhSG9zdC5fdGVtcGxhdGl6ZWQuX25vdGlmeVBhdGgoZGF0YUhvc3QuX3BhcmVudFByb3BQcmVmaXgrcGF0aCx2YWx1ZSk7fX0sX3BhdGhFZmZlY3RvckltcGw6ZnVuY3Rpb24ocGF0aCx2YWx1ZSxmcm9tQWJvdmUpe2lmKHRoaXMuX2ZvcndhcmRQYXJlbnRQYXRoKXtpZihwYXRoLmluZGV4T2YodGhpcy5fcGFyZW50UHJvcFByZWZpeCk9PT0wKXt2YXIgc3ViUGF0aD1wYXRoLnN1YnN0cmluZyh0aGlzLl9wYXJlbnRQcm9wUHJlZml4Lmxlbmd0aCk7dmFyIG1vZGVsPVBvbHltZXIuUGF0aC5yb290KHN1YlBhdGgpO2lmKG1vZGVsIGluIHRoaXMuX3BhcmVudFByb3BzKXt0aGlzLl9mb3J3YXJkUGFyZW50UGF0aChzdWJQYXRoLHZhbHVlKTt9fX0KLVBvbHltZXIuQmFzZS5fcGF0aEVmZmVjdG9yLmNhbGwodGhpcy5fdGVtcGxhdGl6ZWQscGF0aCx2YWx1ZSxmcm9tQWJvdmUpO30sX2NvbnN0cnVjdG9ySW1wbDpmdW5jdGlvbihtb2RlbCxob3N0KXt0aGlzLl9yb290RGF0YUhvc3Q9aG9zdC5fZ2V0Um9vdERhdGFIb3N0KCk7dGhpcy5fc2V0dXBDb25maWd1cmUobW9kZWwpO3RoaXMuX3JlZ2lzdGVySG9zdChob3N0KTt0aGlzLl9iZWdpbkhvc3RpbmcoKTt0aGlzLnJvb3Q9dGhpcy5pbnN0YW5jZVRlbXBsYXRlKHRoaXMuX3RlbXBsYXRlKTt0aGlzLnJvb3QuX19ub0NvbnRlbnQ9IXRoaXMuX25vdGVzLl9oYXNDb250ZW50O3RoaXMucm9vdC5fX3N0eWxlU2NvcGVkPXRydWU7dGhpcy5fZW5kSG9zdGluZygpO3RoaXMuX21hcnNoYWxBbm5vdGF0ZWROb2RlcygpO3RoaXMuX21hcnNoYWxJbnN0YW5jZUVmZmVjdHMoKTt0aGlzLl9tYXJzaGFsQW5ub3RhdGVkTGlzdGVuZXJzKCk7dmFyIGNoaWxkcmVuPVtdO2Zvcih2YXIgbj10aGlzLnJvb3QuZmlyc3RDaGlsZDtuO249bi5uZXh0U2libGluZyl7Y2hpbGRyZW4ucHVzaChuKTtuLl90ZW1wbGF0ZUluc3RhbmNlPXRoaXM7fQotdGhpcy5fY2hpbGRyZW49Y2hpbGRyZW47aWYoaG9zdC5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX18pe3RoaXMuX3Nob3dIaWRlQ2hpbGRyZW4odHJ1ZSk7fQotdGhpcy5fdHJ5UmVhZHkoKTt9LF9saXN0ZW5JbXBsOmZ1bmN0aW9uKG5vZGUsZXZlbnROYW1lLG1ldGhvZE5hbWUpe3ZhciBtb2RlbD10aGlzO3ZhciBob3N0PXRoaXMuX3Jvb3REYXRhSG9zdDt2YXIgaGFuZGxlcj1ob3N0Ll9jcmVhdGVFdmVudEhhbmRsZXIobm9kZSxldmVudE5hbWUsbWV0aG9kTmFtZSk7dmFyIGRlY29yYXRlZD1mdW5jdGlvbihlKXtlLm1vZGVsPW1vZGVsO2hhbmRsZXIoZSk7fTtob3N0Ll9saXN0ZW4obm9kZSxldmVudE5hbWUsZGVjb3JhdGVkKTt9LF9zY29wZUVsZW1lbnRDbGFzc0ltcGw6ZnVuY3Rpb24obm9kZSx2YWx1ZSl7dmFyIGhvc3Q9dGhpcy5fcm9vdERhdGFIb3N0O2lmKGhvc3Qpe3JldHVybiBob3N0Ll9zY29wZUVsZW1lbnRDbGFzcyhub2RlLHZhbHVlKTt9Ci1yZXR1cm4gdmFsdWU7fSxzdGFtcDpmdW5jdGlvbihtb2RlbCl7bW9kZWw9bW9kZWx8fHt9O2lmKHRoaXMuX3BhcmVudFByb3BzKXt2YXIgdGVtcGxhdGl6ZWQ9dGhpcy5fdGVtcGxhdGl6ZWQ7Zm9yKHZhciBwcm9wIGluIHRoaXMuX3BhcmVudFByb3BzKXtpZihtb2RlbFtwcm9wXT09PXVuZGVmaW5lZCl7bW9kZWxbcHJvcF09dGVtcGxhdGl6ZWRbdGhpcy5fcGFyZW50UHJvcFByZWZpeCtwcm9wXTt9fX0KLXJldHVybiBuZXcgdGhpcy5jdG9yKG1vZGVsLHRoaXMpO30sbW9kZWxGb3JFbGVtZW50OmZ1bmN0aW9uKGVsKXt2YXIgbW9kZWw7d2hpbGUoZWwpe2lmKG1vZGVsPWVsLl90ZW1wbGF0ZUluc3RhbmNlKXtpZihtb2RlbC5kYXRhSG9zdCE9dGhpcyl7ZWw9bW9kZWwuZGF0YUhvc3Q7fWVsc2V7cmV0dXJuIG1vZGVsO319ZWxzZXtlbD1lbC5wYXJlbnROb2RlO319fX07UG9seW1lcih7aXM6J2RvbS10ZW1wbGF0ZScsZXh0ZW5kczondGVtcGxhdGUnLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbUG9seW1lci5UZW1wbGF0aXplcl0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnRlbXBsYXRpemUodGhpcyk7fX0pO1BvbHltZXIuX2NvbGxlY3Rpb25zPW5ldyBXZWFrTWFwKCk7UG9seW1lci5Db2xsZWN0aW9uPWZ1bmN0aW9uKHVzZXJBcnJheSl7UG9seW1lci5fY29sbGVjdGlvbnMuc2V0KHVzZXJBcnJheSx0aGlzKTt0aGlzLnVzZXJBcnJheT11c2VyQXJyYXk7dGhpcy5zdG9yZT11c2VyQXJyYXkuc2xpY2UoKTt0aGlzLmluaXRNYXAoKTt9O1BvbHltZXIuQ29sbGVjdGlvbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBvbHltZXIuQ29sbGVjdGlvbixpbml0TWFwOmZ1bmN0aW9uKCl7dmFyIG9tYXA9dGhpcy5vbWFwPW5ldyBXZWFrTWFwKCk7dmFyIHBtYXA9dGhpcy5wbWFwPXt9O3ZhciBzPXRoaXMuc3RvcmU7Zm9yKHZhciBpPTA7aTxzLmxlbmd0aDtpKyspe3ZhciBpdGVtPXNbaV07aWYoaXRlbSYmdHlwZW9mIGl0ZW09PSdvYmplY3QnKXtvbWFwLnNldChpdGVtLGkpO31lbHNle3BtYXBbaXRlbV09aTt9fX0sYWRkOmZ1bmN0aW9uKGl0ZW0pe3ZhciBrZXk9dGhpcy5zdG9yZS5wdXNoKGl0ZW0pLTE7aWYoaXRlbSYmdHlwZW9mIGl0ZW09PSdvYmplY3QnKXt0aGlzLm9tYXAuc2V0KGl0ZW0sa2V5KTt9ZWxzZXt0aGlzLnBtYXBbaXRlbV09a2V5O30KLXJldHVybicjJytrZXk7fSxyZW1vdmVLZXk6ZnVuY3Rpb24oa2V5KXtpZihrZXk9dGhpcy5fcGFyc2VLZXkoa2V5KSl7dGhpcy5fcmVtb3ZlRnJvbU1hcCh0aGlzLnN0b3JlW2tleV0pO2RlbGV0ZSB0aGlzLnN0b3JlW2tleV07fX0sX3JlbW92ZUZyb21NYXA6ZnVuY3Rpb24oaXRlbSl7aWYoaXRlbSYmdHlwZW9mIGl0ZW09PSdvYmplY3QnKXt0aGlzLm9tYXAuZGVsZXRlKGl0ZW0pO31lbHNle2RlbGV0ZSB0aGlzLnBtYXBbaXRlbV07fX0scmVtb3ZlOmZ1bmN0aW9uKGl0ZW0pe3ZhciBrZXk9dGhpcy5nZXRLZXkoaXRlbSk7dGhpcy5yZW1vdmVLZXkoa2V5KTtyZXR1cm4ga2V5O30sZ2V0S2V5OmZ1bmN0aW9uKGl0ZW0pe3ZhciBrZXk7aWYoaXRlbSYmdHlwZW9mIGl0ZW09PSdvYmplY3QnKXtrZXk9dGhpcy5vbWFwLmdldChpdGVtKTt9ZWxzZXtrZXk9dGhpcy5wbWFwW2l0ZW1dO30KLWlmKGtleSE9dW5kZWZpbmVkKXtyZXR1cm4nIycra2V5O319LGdldEtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zdG9yZSkubWFwKGZ1bmN0aW9uKGtleSl7cmV0dXJuJyMnK2tleTt9KTt9LF9wYXJzZUtleTpmdW5jdGlvbihrZXkpe2lmKGtleSYma2V5WzBdPT0nIycpe3JldHVybiBrZXkuc2xpY2UoMSk7fX0sc2V0SXRlbTpmdW5jdGlvbihrZXksaXRlbSl7aWYoa2V5PXRoaXMuX3BhcnNlS2V5KGtleSkpe3ZhciBvbGQ9dGhpcy5zdG9yZVtrZXldO2lmKG9sZCl7dGhpcy5fcmVtb3ZlRnJvbU1hcChvbGQpO30KLWlmKGl0ZW0mJnR5cGVvZiBpdGVtPT0nb2JqZWN0Jyl7dGhpcy5vbWFwLnNldChpdGVtLGtleSk7fWVsc2V7dGhpcy5wbWFwW2l0ZW1dPWtleTt9Ci10aGlzLnN0b3JlW2tleV09aXRlbTt9fSxnZXRJdGVtOmZ1bmN0aW9uKGtleSl7aWYoa2V5PXRoaXMuX3BhcnNlS2V5KGtleSkpe3JldHVybiB0aGlzLnN0b3JlW2tleV07fX0sZ2V0SXRlbXM6ZnVuY3Rpb24oKXt2YXIgaXRlbXM9W10sc3RvcmU9dGhpcy5zdG9yZTtmb3IodmFyIGtleSBpbiBzdG9yZSl7aXRlbXMucHVzaChzdG9yZVtrZXldKTt9Ci1yZXR1cm4gaXRlbXM7fSxfYXBwbHlTcGxpY2VzOmZ1bmN0aW9uKHNwbGljZXMpe3ZhciBrZXlNYXA9e30sa2V5O2Zvcih2YXIgaT0wLHM7aTxzcGxpY2VzLmxlbmd0aCYmKHM9c3BsaWNlc1tpXSk7aSsrKXtzLmFkZGVkS2V5cz1bXTtmb3IodmFyIGo9MDtqPHMucmVtb3ZlZC5sZW5ndGg7aisrKXtrZXk9dGhpcy5nZXRLZXkocy5yZW1vdmVkW2pdKTtrZXlNYXBba2V5XT1rZXlNYXBba2V5XT9udWxsOi0xO30KLWZvcihqPTA7ajxzLmFkZGVkQ291bnQ7aisrKXt2YXIgaXRlbT10aGlzLnVzZXJBcnJheVtzLmluZGV4K2pdO2tleT10aGlzLmdldEtleShpdGVtKTtrZXk9a2V5PT09dW5kZWZpbmVkP3RoaXMuYWRkKGl0ZW0pOmtleTtrZXlNYXBba2V5XT1rZXlNYXBba2V5XT9udWxsOjE7cy5hZGRlZEtleXMucHVzaChrZXkpO319Ci12YXIgcmVtb3ZlZD1bXTt2YXIgYWRkZWQ9W107Zm9yKGtleSBpbiBrZXlNYXApe2lmKGtleU1hcFtrZXldPDApe3RoaXMucmVtb3ZlS2V5KGtleSk7cmVtb3ZlZC5wdXNoKGtleSk7fQotaWYoa2V5TWFwW2tleV0+MCl7YWRkZWQucHVzaChrZXkpO319Ci1yZXR1cm5be3JlbW92ZWQ6cmVtb3ZlZCxhZGRlZDphZGRlZH1dO319O1BvbHltZXIuQ29sbGVjdGlvbi5nZXQ9ZnVuY3Rpb24odXNlckFycmF5KXtyZXR1cm4gUG9seW1lci5fY29sbGVjdGlvbnMuZ2V0KHVzZXJBcnJheSl8fG5ldyBQb2x5bWVyLkNvbGxlY3Rpb24odXNlckFycmF5KTt9O1BvbHltZXIuQ29sbGVjdGlvbi5hcHBseVNwbGljZXM9ZnVuY3Rpb24odXNlckFycmF5LHNwbGljZXMpe3ZhciBjb2xsPVBvbHltZXIuX2NvbGxlY3Rpb25zLmdldCh1c2VyQXJyYXkpO3JldHVybiBjb2xsP2NvbGwuX2FwcGx5U3BsaWNlcyhzcGxpY2VzKTpudWxsO307UG9seW1lcih7aXM6J2RvbS1yZXBlYXQnLGV4dGVuZHM6J3RlbXBsYXRlJyxfdGVtcGxhdGU6bnVsbCxwcm9wZXJ0aWVzOntpdGVtczp7dHlwZTpBcnJheX0sYXM6e3R5cGU6U3RyaW5nLHZhbHVlOidpdGVtJ30saW5kZXhBczp7dHlwZTpTdHJpbmcsdmFsdWU6J2luZGV4J30sc29ydDp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjonX3NvcnRDaGFuZ2VkJ30sZmlsdGVyOnt0eXBlOkZ1bmN0aW9uLG9ic2VydmVyOidfZmlsdGVyQ2hhbmdlZCd9LG9ic2VydmU6e3R5cGU6U3RyaW5nLG9ic2VydmVyOidfb2JzZXJ2ZUNoYW5nZWQnfSxkZWxheTpOdW1iZXIscmVuZGVyZWRJdGVtQ291bnQ6e3R5cGU6TnVtYmVyLG5vdGlmeTohUG9seW1lci5TZXR0aW5ncy5zdXBwcmVzc1RlbXBsYXRlTm90aWZpY2F0aW9ucyxyZWFkT25seTp0cnVlfSxpbml0aWFsQ291bnQ6e3R5cGU6TnVtYmVyLG9ic2VydmVyOidfaW5pdGlhbGl6ZUNodW5raW5nJ30sdGFyZ2V0RnJhbWVyYXRlOnt0eXBlOk51bWJlcix2YWx1ZToyMH0sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59LF90YXJnZXRGcmFtZVRpbWU6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOidfY29tcHV0ZUZyYW1lVGltZSh0YXJnZXRGcmFtZXJhdGUpJ319LGJlaGF2aW9yczpbUG9seW1lci5UZW1wbGF0aXplcl0sb2JzZXJ2ZXJzOlsnX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSddLGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9pbnN0YW5jZXM9W107dGhpcy5fcG9vbD1bXTt0aGlzLl9saW1pdD1JbmZpbml0eTt2YXIgc2VsZj10aGlzO3RoaXMuX2JvdW5kUmVuZGVyQ2h1bms9ZnVuY3Rpb24oKXtzZWxmLl9yZW5kZXJDaHVuaygpO307fSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX19pc0RldGFjaGVkPXRydWU7Zm9yKHZhciBpPTA7aTx0aGlzLl9pbnN0YW5jZXMubGVuZ3RoO2krKyl7dGhpcy5fZGV0YWNoSW5zdGFuY2UoaSk7fX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9faXNEZXRhY2hlZCl7dGhpcy5fX2lzRGV0YWNoZWQ9ZmFsc2U7dmFyIHJlZk5vZGU7dmFyIHBhcmVudE5vZGU9UG9seW1lci5kb20odGhpcykucGFyZW50Tm9kZTtpZihwYXJlbnROb2RlLmxvY2FsTmFtZT09dGhpcy5pcyl7cmVmTm9kZT1wYXJlbnROb2RlO3BhcmVudE5vZGU9UG9seW1lci5kb20ocGFyZW50Tm9kZSkucGFyZW50Tm9kZTt9ZWxzZXtyZWZOb2RlPXRoaXM7fQotdmFyIHBhcmVudD1Qb2x5bWVyLmRvbShwYXJlbnROb2RlKTtmb3IodmFyIGk9MDtpPHRoaXMuX2luc3RhbmNlcy5sZW5ndGg7aSsrKXt0aGlzLl9hdHRhY2hJbnN0YW5jZShpLHBhcmVudCxyZWZOb2RlKTt9fX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9pbnN0YW5jZVByb3BzPXtfX2tleV9fOnRydWV9O3RoaXMuX2luc3RhbmNlUHJvcHNbdGhpcy5hc109dHJ1ZTt0aGlzLl9pbnN0YW5jZVByb3BzW3RoaXMuaW5kZXhBc109dHJ1ZTtpZighdGhpcy5jdG9yKXt0aGlzLnRlbXBsYXRpemUodGhpcyk7fX0sX3NvcnRDaGFuZ2VkOmZ1bmN0aW9uKHNvcnQpe3ZhciBkYXRhSG9zdD10aGlzLl9nZXRSb290RGF0YUhvc3QoKTt0aGlzLl9zb3J0Rm49c29ydCYmKHR5cGVvZiBzb3J0PT0nZnVuY3Rpb24nP3NvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZGF0YUhvc3Rbc29ydF0uYXBwbHkoZGF0YUhvc3QsYXJndW1lbnRzKTt9KTt0aGlzLl9uZWVkRnVsbFJlZnJlc2g9dHJ1ZTtpZih0aGlzLml0ZW1zKXt0aGlzLl9kZWJvdW5jZVRlbXBsYXRlKHRoaXMuX3JlbmRlcik7fX0sX2ZpbHRlckNoYW5nZWQ6ZnVuY3Rpb24oZmlsdGVyKXt2YXIgZGF0YUhvc3Q9dGhpcy5fZ2V0Um9vdERhdGFIb3N0KCk7dGhpcy5fZmlsdGVyRm49ZmlsdGVyJiYodHlwZW9mIGZpbHRlcj09J2Z1bmN0aW9uJz9maWx0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZGF0YUhvc3RbZmlsdGVyXS5hcHBseShkYXRhSG9zdCxhcmd1bWVudHMpO30pO3RoaXMuX25lZWRGdWxsUmVmcmVzaD10cnVlO2lmKHRoaXMuaXRlbXMpe3RoaXMuX2RlYm91bmNlVGVtcGxhdGUodGhpcy5fcmVuZGVyKTt9fSxfY29tcHV0ZUZyYW1lVGltZTpmdW5jdGlvbihyYXRlKXtyZXR1cm4gTWF0aC5jZWlsKDEwMDAvcmF0ZSk7fSxfaW5pdGlhbGl6ZUNodW5raW5nOmZ1bmN0aW9uKCl7aWYodGhpcy5pbml0aWFsQ291bnQpe3RoaXMuX2xpbWl0PXRoaXMuaW5pdGlhbENvdW50O3RoaXMuX2NodW5rQ291bnQ9dGhpcy5pbml0aWFsQ291bnQ7dGhpcy5fbGFzdENodW5rVGltZT1wZXJmb3JtYW5jZS5ub3coKTt9fSxfdHJ5UmVuZGVyQ2h1bms6ZnVuY3Rpb24oKXtpZih0aGlzLml0ZW1zJiZ0aGlzLl9saW1pdDx0aGlzLml0ZW1zLmxlbmd0aCl7dGhpcy5kZWJvdW5jZSgncmVuZGVyQ2h1bmsnLHRoaXMuX3JlcXVlc3RSZW5kZXJDaHVuayk7fX0sX3JlcXVlc3RSZW5kZXJDaHVuazpmdW5jdGlvbigpe3JlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9ib3VuZFJlbmRlckNodW5rKTt9LF9yZW5kZXJDaHVuazpmdW5jdGlvbigpe3ZhciBjdXJyQ2h1bmtUaW1lPXBlcmZvcm1hbmNlLm5vdygpO3ZhciByYXRpbz10aGlzLl90YXJnZXRGcmFtZVRpbWUvKGN1cnJDaHVua1RpbWUtdGhpcy5fbGFzdENodW5rVGltZSk7dGhpcy5fY2h1bmtDb3VudD1NYXRoLnJvdW5kKHRoaXMuX2NodW5rQ291bnQqcmF0aW8pfHwxO3RoaXMuX2xpbWl0Kz10aGlzLl9jaHVua0NvdW50O3RoaXMuX2xhc3RDaHVua1RpbWU9Y3VyckNodW5rVGltZTt0aGlzLl9kZWJvdW5jZVRlbXBsYXRlKHRoaXMuX3JlbmRlcik7fSxfb2JzZXJ2ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlUGF0aHM9dGhpcy5vYnNlcnZlJiZ0aGlzLm9ic2VydmUucmVwbGFjZSgnLionLCcuJykuc3BsaXQoJyAnKTt9LF9pdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oY2hhbmdlKXtpZihjaGFuZ2UucGF0aD09J2l0ZW1zJyl7aWYoQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKSl7dGhpcy5jb2xsZWN0aW9uPVBvbHltZXIuQ29sbGVjdGlvbi5nZXQodGhpcy5pdGVtcyk7fWVsc2UgaWYoIXRoaXMuaXRlbXMpe3RoaXMuY29sbGVjdGlvbj1udWxsO31lbHNle3RoaXMuX2Vycm9yKHRoaXMuX2xvZ2YoJ2RvbS1yZXBlYXQnLCdleHBlY3RlZCBhcnJheSBmb3IgYGl0ZW1zYCwnKycgZm91bmQnLHRoaXMuaXRlbXMpKTt9Ci10aGlzLl9rZXlTcGxpY2VzPVtdO3RoaXMuX2luZGV4U3BsaWNlcz1bXTt0aGlzLl9uZWVkRnVsbFJlZnJlc2g9dHJ1ZTt0aGlzLl9pbml0aWFsaXplQ2h1bmtpbmcoKTt0aGlzLl9kZWJvdW5jZVRlbXBsYXRlKHRoaXMuX3JlbmRlcik7fWVsc2UgaWYoY2hhbmdlLnBhdGg9PSdpdGVtcy5zcGxpY2VzJyl7dGhpcy5fa2V5U3BsaWNlcz10aGlzLl9rZXlTcGxpY2VzLmNvbmNhdChjaGFuZ2UudmFsdWUua2V5U3BsaWNlcyk7dGhpcy5faW5kZXhTcGxpY2VzPXRoaXMuX2luZGV4U3BsaWNlcy5jb25jYXQoY2hhbmdlLnZhbHVlLmluZGV4U3BsaWNlcyk7dGhpcy5fZGVib3VuY2VUZW1wbGF0ZSh0aGlzLl9yZW5kZXIpO31lbHNle3ZhciBzdWJwYXRoPWNoYW5nZS5wYXRoLnNsaWNlKDYpO3RoaXMuX2ZvcndhcmRJdGVtUGF0aChzdWJwYXRoLGNoYW5nZS52YWx1ZSk7dGhpcy5fY2hlY2tPYnNlcnZlZFBhdGhzKHN1YnBhdGgpO319LF9jaGVja09ic2VydmVkUGF0aHM6ZnVuY3Rpb24ocGF0aCl7aWYodGhpcy5fb2JzZXJ2ZVBhdGhzKXtwYXRoPXBhdGguc3Vic3RyaW5nKHBhdGguaW5kZXhPZignLicpKzEpO3ZhciBwYXRocz10aGlzLl9vYnNlcnZlUGF0aHM7Zm9yKHZhciBpPTA7aTxwYXRocy5sZW5ndGg7aSsrKXtpZihwYXRoLmluZGV4T2YocGF0aHNbaV0pPT09MCl7dGhpcy5fbmVlZEZ1bGxSZWZyZXNoPXRydWU7aWYodGhpcy5kZWxheSl7dGhpcy5kZWJvdW5jZSgncmVuZGVyJyx0aGlzLl9yZW5kZXIsdGhpcy5kZWxheSk7fWVsc2V7dGhpcy5fZGVib3VuY2VUZW1wbGF0ZSh0aGlzLl9yZW5kZXIpO30KLXJldHVybjt9fX19LHJlbmRlcjpmdW5jdGlvbigpe3RoaXMuX25lZWRGdWxsUmVmcmVzaD10cnVlO3RoaXMuX2RlYm91bmNlVGVtcGxhdGUodGhpcy5fcmVuZGVyKTt0aGlzLl9mbHVzaFRlbXBsYXRlcygpO30sX3JlbmRlcjpmdW5jdGlvbigpe2lmKHRoaXMuX25lZWRGdWxsUmVmcmVzaCl7dGhpcy5fYXBwbHlGdWxsUmVmcmVzaCgpO3RoaXMuX25lZWRGdWxsUmVmcmVzaD1mYWxzZTt9ZWxzZSBpZih0aGlzLl9rZXlTcGxpY2VzLmxlbmd0aCl7aWYodGhpcy5fc29ydEZuKXt0aGlzLl9hcHBseVNwbGljZXNVc2VyU29ydCh0aGlzLl9rZXlTcGxpY2VzKTt9ZWxzZXtpZih0aGlzLl9maWx0ZXJGbil7dGhpcy5fYXBwbHlGdWxsUmVmcmVzaCgpO31lbHNle3RoaXMuX2FwcGx5U3BsaWNlc0FycmF5T3JkZXIodGhpcy5faW5kZXhTcGxpY2VzKTt9fX1lbHNle30KLXRoaXMuX2tleVNwbGljZXM9W107dGhpcy5faW5kZXhTcGxpY2VzPVtdO3ZhciBrZXlUb0lkeD10aGlzLl9rZXlUb0luc3RJZHg9e307Zm9yKHZhciBpPXRoaXMuX2luc3RhbmNlcy5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIGluc3Q9dGhpcy5faW5zdGFuY2VzW2ldO2lmKGluc3QuaXNQbGFjZWhvbGRlciYmaTx0aGlzLl9saW1pdCl7aW5zdD10aGlzLl9pbnNlcnRJbnN0YW5jZShpLGluc3QuX19rZXlfXyk7fWVsc2UgaWYoIWluc3QuaXNQbGFjZWhvbGRlciYmaT49dGhpcy5fbGltaXQpe2luc3Q9dGhpcy5fZG93bmdyYWRlSW5zdGFuY2UoaSxpbnN0Ll9fa2V5X18pO30KLWtleVRvSWR4W2luc3QuX19rZXlfX109aTtpZighaW5zdC5pc1BsYWNlaG9sZGVyKXtpbnN0Ll9fc2V0UHJvcGVydHkodGhpcy5pbmRleEFzLGksdHJ1ZSk7fX0KLXRoaXMuX3Bvb2wubGVuZ3RoPTA7dGhpcy5fc2V0UmVuZGVyZWRJdGVtQ291bnQodGhpcy5faW5zdGFuY2VzLmxlbmd0aCk7aWYoIVBvbHltZXIuU2V0dGluZ3Muc3VwcHJlc3NUZW1wbGF0ZU5vdGlmaWNhdGlvbnN8fHRoaXMubm90aWZ5RG9tQ2hhbmdlKXt0aGlzLmZpcmUoJ2RvbS1jaGFuZ2UnKTt9Ci10aGlzLl90cnlSZW5kZXJDaHVuaygpO30sX2FwcGx5RnVsbFJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmNvbGxlY3Rpb247dmFyIGtleXM7aWYodGhpcy5fc29ydEZuKXtrZXlzPWM/Yy5nZXRLZXlzKCk6W107fWVsc2V7a2V5cz1bXTt2YXIgaXRlbXM9dGhpcy5pdGVtcztpZihpdGVtcyl7Zm9yKHZhciBpPTA7aTxpdGVtcy5sZW5ndGg7aSsrKXtrZXlzLnB1c2goYy5nZXRLZXkoaXRlbXNbaV0pKTt9fX0KLXZhciBzZWxmPXRoaXM7aWYodGhpcy5fZmlsdGVyRm4pe2tleXM9a2V5cy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIHNlbGYuX2ZpbHRlckZuKGMuZ2V0SXRlbShhKSk7fSk7fQotaWYodGhpcy5fc29ydEZuKXtrZXlzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gc2VsZi5fc29ydEZuKGMuZ2V0SXRlbShhKSxjLmdldEl0ZW0oYikpO30pO30KLWZvcihpPTA7aTxrZXlzLmxlbmd0aDtpKyspe3ZhciBrZXk9a2V5c1tpXTt2YXIgaW5zdD10aGlzLl9pbnN0YW5jZXNbaV07aWYoaW5zdCl7aW5zdC5fX2tleV9fPWtleTtpZighaW5zdC5pc1BsYWNlaG9sZGVyJiZpPHRoaXMuX2xpbWl0KXtpbnN0Ll9fc2V0UHJvcGVydHkodGhpcy5hcyxjLmdldEl0ZW0oa2V5KSx0cnVlKTt9fWVsc2UgaWYoaTx0aGlzLl9saW1pdCl7dGhpcy5faW5zZXJ0SW5zdGFuY2UoaSxrZXkpO31lbHNle3RoaXMuX2luc2VydFBsYWNlaG9sZGVyKGksa2V5KTt9fQotZm9yKHZhciBqPXRoaXMuX2luc3RhbmNlcy5sZW5ndGgtMTtqPj1pO2otLSl7dGhpcy5fZGV0YWNoQW5kUmVtb3ZlSW5zdGFuY2Uoaik7fX0sX251bWVyaWNTb3J0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEtYjt9LF9hcHBseVNwbGljZXNVc2VyU29ydDpmdW5jdGlvbihzcGxpY2VzKXt2YXIgYz10aGlzLmNvbGxlY3Rpb247dmFyIGtleU1hcD17fTt2YXIga2V5O2Zvcih2YXIgaT0wLHM7aTxzcGxpY2VzLmxlbmd0aCYmKHM9c3BsaWNlc1tpXSk7aSsrKXtmb3IodmFyIGo9MDtqPHMucmVtb3ZlZC5sZW5ndGg7aisrKXtrZXk9cy5yZW1vdmVkW2pdO2tleU1hcFtrZXldPWtleU1hcFtrZXldP251bGw6LTE7fQotZm9yKGo9MDtqPHMuYWRkZWQubGVuZ3RoO2orKyl7a2V5PXMuYWRkZWRbal07a2V5TWFwW2tleV09a2V5TWFwW2tleV0/bnVsbDoxO319Ci12YXIgcmVtb3ZlZElkeHM9W107dmFyIGFkZGVkS2V5cz1bXTtmb3Ioa2V5IGluIGtleU1hcCl7aWYoa2V5TWFwW2tleV09PT0tMSl7cmVtb3ZlZElkeHMucHVzaCh0aGlzLl9rZXlUb0luc3RJZHhba2V5XSk7fQotaWYoa2V5TWFwW2tleV09PT0xKXthZGRlZEtleXMucHVzaChrZXkpO319Ci1pZihyZW1vdmVkSWR4cy5sZW5ndGgpe3JlbW92ZWRJZHhzLnNvcnQodGhpcy5fbnVtZXJpY1NvcnQpO2ZvcihpPXJlbW92ZWRJZHhzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgaWR4PXJlbW92ZWRJZHhzW2ldO2lmKGlkeCE9PXVuZGVmaW5lZCl7dGhpcy5fZGV0YWNoQW5kUmVtb3ZlSW5zdGFuY2UoaWR4KTt9fX0KLXZhciBzZWxmPXRoaXM7aWYoYWRkZWRLZXlzLmxlbmd0aCl7aWYodGhpcy5fZmlsdGVyRm4pe2FkZGVkS2V5cz1hZGRlZEtleXMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBzZWxmLl9maWx0ZXJGbihjLmdldEl0ZW0oYSkpO30pO30KLWFkZGVkS2V5cy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIHNlbGYuX3NvcnRGbihjLmdldEl0ZW0oYSksYy5nZXRJdGVtKGIpKTt9KTt2YXIgc3RhcnQ9MDtmb3IoaT0wO2k8YWRkZWRLZXlzLmxlbmd0aDtpKyspe3N0YXJ0PXRoaXMuX2luc2VydFJvd1VzZXJTb3J0KHN0YXJ0LGFkZGVkS2V5c1tpXSk7fX19LF9pbnNlcnRSb3dVc2VyU29ydDpmdW5jdGlvbihzdGFydCxrZXkpe3ZhciBjPXRoaXMuY29sbGVjdGlvbjt2YXIgaXRlbT1jLmdldEl0ZW0oa2V5KTt2YXIgZW5kPXRoaXMuX2luc3RhbmNlcy5sZW5ndGgtMTt2YXIgaWR4PS0xO3doaWxlKHN0YXJ0PD1lbmQpe3ZhciBtaWQ9c3RhcnQrZW5kPj4xO3ZhciBtaWRLZXk9dGhpcy5faW5zdGFuY2VzW21pZF0uX19rZXlfXzt2YXIgY21wPXRoaXMuX3NvcnRGbihjLmdldEl0ZW0obWlkS2V5KSxpdGVtKTtpZihjbXA8MCl7c3RhcnQ9bWlkKzE7fWVsc2UgaWYoY21wPjApe2VuZD1taWQtMTt9ZWxzZXtpZHg9bWlkO2JyZWFrO319Ci1pZihpZHg8MCl7aWR4PWVuZCsxO30KLXRoaXMuX2luc2VydFBsYWNlaG9sZGVyKGlkeCxrZXkpO3JldHVybiBpZHg7fSxfYXBwbHlTcGxpY2VzQXJyYXlPcmRlcjpmdW5jdGlvbihzcGxpY2VzKXtmb3IodmFyIGk9MCxzO2k8c3BsaWNlcy5sZW5ndGgmJihzPXNwbGljZXNbaV0pO2krKyl7Zm9yKHZhciBqPTA7ajxzLnJlbW92ZWQubGVuZ3RoO2orKyl7dGhpcy5fZGV0YWNoQW5kUmVtb3ZlSW5zdGFuY2Uocy5pbmRleCk7fQotZm9yKGo9MDtqPHMuYWRkZWRLZXlzLmxlbmd0aDtqKyspe3RoaXMuX2luc2VydFBsYWNlaG9sZGVyKHMuaW5kZXgraixzLmFkZGVkS2V5c1tqXSk7fX19LF9kZXRhY2hJbnN0YW5jZTpmdW5jdGlvbihpZHgpe3ZhciBpbnN0PXRoaXMuX2luc3RhbmNlc1tpZHhdO2lmKCFpbnN0LmlzUGxhY2Vob2xkZXIpe2Zvcih2YXIgaT0wO2k8aW5zdC5fY2hpbGRyZW4ubGVuZ3RoO2krKyl7dmFyIGVsPWluc3QuX2NoaWxkcmVuW2ldO1BvbHltZXIuZG9tKGluc3Qucm9vdCkuYXBwZW5kQ2hpbGQoZWwpO30KLXJldHVybiBpbnN0O319LF9hdHRhY2hJbnN0YW5jZTpmdW5jdGlvbihpZHgscGFyZW50LHJlZk5vZGUpe3ZhciBpbnN0PXRoaXMuX2luc3RhbmNlc1tpZHhdO2lmKCFpbnN0LmlzUGxhY2Vob2xkZXIpe3BhcmVudC5pbnNlcnRCZWZvcmUoaW5zdC5yb290LHJlZk5vZGUpO319LF9kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZTpmdW5jdGlvbihpZHgpe3ZhciBpbnN0PXRoaXMuX2RldGFjaEluc3RhbmNlKGlkeCk7aWYoaW5zdCl7dGhpcy5fcG9vbC5wdXNoKGluc3QpO30KLXRoaXMuX2luc3RhbmNlcy5zcGxpY2UoaWR4LDEpO30sX2luc2VydFBsYWNlaG9sZGVyOmZ1bmN0aW9uKGlkeCxrZXkpe3RoaXMuX2luc3RhbmNlcy5zcGxpY2UoaWR4LDAse2lzUGxhY2Vob2xkZXI6dHJ1ZSxfX2tleV9fOmtleX0pO30sX3N0YW1wSW5zdGFuY2U6ZnVuY3Rpb24oaWR4LGtleSl7dmFyIG1vZGVsPXtfX2tleV9fOmtleX07bW9kZWxbdGhpcy5hc109dGhpcy5jb2xsZWN0aW9uLmdldEl0ZW0oa2V5KTttb2RlbFt0aGlzLmluZGV4QXNdPWlkeDtyZXR1cm4gdGhpcy5zdGFtcChtb2RlbCk7fSxfaW5zZXJ0SW5zdGFuY2U6ZnVuY3Rpb24oaWR4LGtleSl7dmFyIGluc3Q9dGhpcy5fcG9vbC5wb3AoKTtpZihpbnN0KXtpbnN0Ll9fc2V0UHJvcGVydHkodGhpcy5hcyx0aGlzLmNvbGxlY3Rpb24uZ2V0SXRlbShrZXkpLHRydWUpO2luc3QuX19zZXRQcm9wZXJ0eSgnX19rZXlfXycsa2V5LHRydWUpO31lbHNle2luc3Q9dGhpcy5fc3RhbXBJbnN0YW5jZShpZHgsa2V5KTt9Ci12YXIgYmVmb3JlUm93PXRoaXMuX2luc3RhbmNlc1tpZHgrMV07dmFyIGJlZm9yZU5vZGU9YmVmb3JlUm93JiYhYmVmb3JlUm93LmlzUGxhY2Vob2xkZXI/YmVmb3JlUm93Ll9jaGlsZHJlblswXTp0aGlzO3ZhciBwYXJlbnROb2RlPVBvbHltZXIuZG9tKHRoaXMpLnBhcmVudE5vZGU7aWYocGFyZW50Tm9kZS5sb2NhbE5hbWU9PXRoaXMuaXMpe2lmKGJlZm9yZU5vZGU9PXRoaXMpe2JlZm9yZU5vZGU9cGFyZW50Tm9kZTt9Ci1wYXJlbnROb2RlPVBvbHltZXIuZG9tKHBhcmVudE5vZGUpLnBhcmVudE5vZGU7fQotUG9seW1lci5kb20ocGFyZW50Tm9kZSkuaW5zZXJ0QmVmb3JlKGluc3Qucm9vdCxiZWZvcmVOb2RlKTt0aGlzLl9pbnN0YW5jZXNbaWR4XT1pbnN0O3JldHVybiBpbnN0O30sX2Rvd25ncmFkZUluc3RhbmNlOmZ1bmN0aW9uKGlkeCxrZXkpe3ZhciBpbnN0PXRoaXMuX2RldGFjaEluc3RhbmNlKGlkeCk7aWYoaW5zdCl7dGhpcy5fcG9vbC5wdXNoKGluc3QpO30KLWluc3Q9e2lzUGxhY2Vob2xkZXI6dHJ1ZSxfX2tleV9fOmtleX07dGhpcy5faW5zdGFuY2VzW2lkeF09aW5zdDtyZXR1cm4gaW5zdDt9LF9zaG93SGlkZUNoaWxkcmVuOmZ1bmN0aW9uKGhpZGRlbil7Zm9yKHZhciBpPTA7aTx0aGlzLl9pbnN0YW5jZXMubGVuZ3RoO2krKyl7aWYoIXRoaXMuX2luc3RhbmNlc1tpXS5pc1BsYWNlaG9sZGVyKQotdGhpcy5faW5zdGFuY2VzW2ldLl9zaG93SGlkZUNoaWxkcmVuKGhpZGRlbik7fX0sX2ZvcndhcmRJbnN0YW5jZVByb3A6ZnVuY3Rpb24oaW5zdCxwcm9wLHZhbHVlKXtpZihwcm9wPT10aGlzLmFzKXt2YXIgaWR4O2lmKHRoaXMuX3NvcnRGbnx8dGhpcy5fZmlsdGVyRm4pe2lkeD10aGlzLml0ZW1zLmluZGV4T2YodGhpcy5jb2xsZWN0aW9uLmdldEl0ZW0oaW5zdC5fX2tleV9fKSk7fWVsc2V7aWR4PWluc3RbdGhpcy5pbmRleEFzXTt9Ci10aGlzLnNldCgnaXRlbXMuJytpZHgsdmFsdWUpO319LF9mb3J3YXJkSW5zdGFuY2VQYXRoOmZ1bmN0aW9uKGluc3QscGF0aCx2YWx1ZSl7aWYocGF0aC5pbmRleE9mKHRoaXMuYXMrJy4nKT09PTApe3RoaXMuX25vdGlmeVBhdGgoJ2l0ZW1zLicraW5zdC5fX2tleV9fKycuJytwYXRoLnNsaWNlKHRoaXMuYXMubGVuZ3RoKzEpLHZhbHVlKTt9fSxfZm9yd2FyZFBhcmVudFByb3A6ZnVuY3Rpb24ocHJvcCx2YWx1ZSl7dmFyIGkkPXRoaXMuX2luc3RhbmNlcztmb3IodmFyIGk9MCxpbnN0O2k8aSQubGVuZ3RoJiYoaW5zdD1pJFtpXSk7aSsrKXtpZighaW5zdC5pc1BsYWNlaG9sZGVyKXtpbnN0Ll9fc2V0UHJvcGVydHkocHJvcCx2YWx1ZSx0cnVlKTt9fX0sX2ZvcndhcmRQYXJlbnRQYXRoOmZ1bmN0aW9uKHBhdGgsdmFsdWUpe3ZhciBpJD10aGlzLl9pbnN0YW5jZXM7Zm9yKHZhciBpPTAsaW5zdDtpPGkkLmxlbmd0aCYmKGluc3Q9aSRbaV0pO2krKyl7aWYoIWluc3QuaXNQbGFjZWhvbGRlcil7aW5zdC5fbm90aWZ5UGF0aChwYXRoLHZhbHVlLHRydWUpO319fSxfZm9yd2FyZEl0ZW1QYXRoOmZ1bmN0aW9uKHBhdGgsdmFsdWUpe2lmKHRoaXMuX2tleVRvSW5zdElkeCl7dmFyIGRvdD1wYXRoLmluZGV4T2YoJy4nKTt2YXIga2V5PXBhdGguc3Vic3RyaW5nKDAsZG90PDA/cGF0aC5sZW5ndGg6ZG90KTt2YXIgaWR4PXRoaXMuX2tleVRvSW5zdElkeFtrZXldO3ZhciBpbnN0PXRoaXMuX2luc3RhbmNlc1tpZHhdO2lmKGluc3QmJiFpbnN0LmlzUGxhY2Vob2xkZXIpe2lmKGRvdD49MCl7cGF0aD10aGlzLmFzKycuJytwYXRoLnN1YnN0cmluZyhkb3QrMSk7aW5zdC5fbm90aWZ5UGF0aChwYXRoLHZhbHVlLHRydWUpO31lbHNle2luc3QuX19zZXRQcm9wZXJ0eSh0aGlzLmFzLHZhbHVlLHRydWUpO319fX0saXRlbUZvckVsZW1lbnQ6ZnVuY3Rpb24oZWwpe3ZhciBpbnN0YW5jZT10aGlzLm1vZGVsRm9yRWxlbWVudChlbCk7cmV0dXJuIGluc3RhbmNlJiZpbnN0YW5jZVt0aGlzLmFzXTt9LGtleUZvckVsZW1lbnQ6ZnVuY3Rpb24oZWwpe3ZhciBpbnN0YW5jZT10aGlzLm1vZGVsRm9yRWxlbWVudChlbCk7cmV0dXJuIGluc3RhbmNlJiZpbnN0YW5jZS5fX2tleV9fO30saW5kZXhGb3JFbGVtZW50OmZ1bmN0aW9uKGVsKXt2YXIgaW5zdGFuY2U9dGhpcy5tb2RlbEZvckVsZW1lbnQoZWwpO3JldHVybiBpbnN0YW5jZSYmaW5zdGFuY2VbdGhpcy5pbmRleEFzXTt9fSk7UG9seW1lcih7aXM6J2FycmF5LXNlbGVjdG9yJyxfdGVtcGxhdGU6bnVsbCxwcm9wZXJ0aWVzOntpdGVtczp7dHlwZTpBcnJheSxvYnNlcnZlcjonY2xlYXJTZWxlY3Rpb24nfSxtdWx0aTp7dHlwZTpCb29sZWFuLHZhbHVlOmZhbHNlLG9ic2VydmVyOidjbGVhclNlbGVjdGlvbid9LHNlbGVjdGVkOnt0eXBlOk9iamVjdCxub3RpZnk6dHJ1ZX0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6dHJ1ZX0sdG9nZ2xlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ZmFsc2V9fSxjbGVhclNlbGVjdGlvbjpmdW5jdGlvbigpe2lmKEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZCkpe2Zvcih2YXIgaT0wO2k8dGhpcy5zZWxlY3RlZC5sZW5ndGg7aSsrKXt0aGlzLnVubGlua1BhdGhzKCdzZWxlY3RlZC4nK2kpO319ZWxzZXt0aGlzLnVubGlua1BhdGhzKCdzZWxlY3RlZCcpO3RoaXMudW5saW5rUGF0aHMoJ3NlbGVjdGVkSXRlbScpO30KLWlmKHRoaXMubXVsdGkpe2lmKCF0aGlzLnNlbGVjdGVkfHx0aGlzLnNlbGVjdGVkLmxlbmd0aCl7dGhpcy5zZWxlY3RlZD1bXTt0aGlzLl9zZWxlY3RlZENvbGw9UG9seW1lci5Db2xsZWN0aW9uLmdldCh0aGlzLnNlbGVjdGVkKTt9fWVsc2V7dGhpcy5zZWxlY3RlZD1udWxsO3RoaXMuX3NlbGVjdGVkQ29sbD1udWxsO30KLXRoaXMuc2VsZWN0ZWRJdGVtPW51bGw7fSxpc1NlbGVjdGVkOmZ1bmN0aW9uKGl0ZW0pe2lmKHRoaXMubXVsdGkpe3JldHVybiB0aGlzLl9zZWxlY3RlZENvbGwuZ2V0S2V5KGl0ZW0pIT09dW5kZWZpbmVkO31lbHNle3JldHVybiB0aGlzLnNlbGVjdGVkPT1pdGVtO319LGRlc2VsZWN0OmZ1bmN0aW9uKGl0ZW0pe2lmKHRoaXMubXVsdGkpe2lmKHRoaXMuaXNTZWxlY3RlZChpdGVtKSl7dmFyIHNrZXk9dGhpcy5fc2VsZWN0ZWRDb2xsLmdldEtleShpdGVtKTt0aGlzLmFycmF5RGVsZXRlKCdzZWxlY3RlZCcsaXRlbSk7dGhpcy51bmxpbmtQYXRocygnc2VsZWN0ZWQuJytza2V5KTt9fWVsc2V7dGhpcy5zZWxlY3RlZD1udWxsO3RoaXMuc2VsZWN0ZWRJdGVtPW51bGw7dGhpcy51bmxpbmtQYXRocygnc2VsZWN0ZWQnKTt0aGlzLnVubGlua1BhdGhzKCdzZWxlY3RlZEl0ZW0nKTt9fSxzZWxlY3Q6ZnVuY3Rpb24oaXRlbSl7dmFyIGljb2w9UG9seW1lci5Db2xsZWN0aW9uLmdldCh0aGlzLml0ZW1zKTt2YXIga2V5PWljb2wuZ2V0S2V5KGl0ZW0pO2lmKHRoaXMubXVsdGkpe2lmKHRoaXMuaXNTZWxlY3RlZChpdGVtKSl7aWYodGhpcy50b2dnbGUpe3RoaXMuZGVzZWxlY3QoaXRlbSk7fX1lbHNle3RoaXMucHVzaCgnc2VsZWN0ZWQnLGl0ZW0pO3ZhciBza2V5PXRoaXMuX3NlbGVjdGVkQ29sbC5nZXRLZXkoaXRlbSk7dGhpcy5saW5rUGF0aHMoJ3NlbGVjdGVkLicrc2tleSwnaXRlbXMuJytrZXkpO319ZWxzZXtpZih0aGlzLnRvZ2dsZSYmaXRlbT09dGhpcy5zZWxlY3RlZCl7dGhpcy5kZXNlbGVjdCgpO31lbHNle3RoaXMuc2VsZWN0ZWQ9aXRlbTt0aGlzLnNlbGVjdGVkSXRlbT1pdGVtO3RoaXMubGlua1BhdGhzKCdzZWxlY3RlZCcsJ2l0ZW1zLicra2V5KTt0aGlzLmxpbmtQYXRocygnc2VsZWN0ZWRJdGVtJywnaXRlbXMuJytrZXkpO319fX0pO1BvbHltZXIoe2lzOidkb20taWYnLGV4dGVuZHM6J3RlbXBsYXRlJyxfdGVtcGxhdGU6bnVsbCxwcm9wZXJ0aWVzOnsnaWYnOnt0eXBlOkJvb2xlYW4sdmFsdWU6ZmFsc2Usb2JzZXJ2ZXI6J19xdWV1ZVJlbmRlcid9LHJlc3RhbXA6e3R5cGU6Qm9vbGVhbix2YWx1ZTpmYWxzZSxvYnNlcnZlcjonX3F1ZXVlUmVuZGVyJ30sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59fSxiZWhhdmlvcnM6W1BvbHltZXIuVGVtcGxhdGl6ZXJdLF9xdWV1ZVJlbmRlcjpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlVGVtcGxhdGUodGhpcy5fcmVuZGVyKTt9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dmFyIHBhcmVudE5vZGU9dGhpcy5wYXJlbnROb2RlO2lmKHBhcmVudE5vZGUmJnBhcmVudE5vZGUubG9jYWxOYW1lPT10aGlzLmlzKXtwYXJlbnROb2RlPVBvbHltZXIuZG9tKHBhcmVudE5vZGUpLnBhcmVudE5vZGU7fQotaWYoIXBhcmVudE5vZGV8fHBhcmVudE5vZGUubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmKCFQb2x5bWVyLlNldHRpbmdzLmhhc1NoYWRvd3x8IShwYXJlbnROb2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdCkpKXt0aGlzLl90ZWFyZG93bkluc3RhbmNlKCk7fX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLmlmJiZ0aGlzLmN0b3Ipe3RoaXMuYXN5bmModGhpcy5fZW5zdXJlSW5zdGFuY2UpO319LHJlbmRlcjpmdW5jdGlvbigpe3RoaXMuX2ZsdXNoVGVtcGxhdGVzKCk7fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5pZil7aWYoIXRoaXMuY3Rvcil7dGhpcy50ZW1wbGF0aXplKHRoaXMpO30KLXRoaXMuX2Vuc3VyZUluc3RhbmNlKCk7dGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpO31lbHNlIGlmKHRoaXMucmVzdGFtcCl7dGhpcy5fdGVhcmRvd25JbnN0YW5jZSgpO30KLWlmKCF0aGlzLnJlc3RhbXAmJnRoaXMuX2luc3RhbmNlKXt0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCk7fQotaWYodGhpcy5pZiE9dGhpcy5fbGFzdElmKXtpZighUG9seW1lci5TZXR0aW5ncy5zdXBwcmVzc1RlbXBsYXRlTm90aWZpY2F0aW9uc3x8dGhpcy5ub3RpZnlEb21DaGFuZ2Upe3RoaXMuZmlyZSgnZG9tLWNoYW5nZScpO30KLXRoaXMuX2xhc3RJZj10aGlzLmlmO319LF9lbnN1cmVJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciByZWZOb2RlO3ZhciBwYXJlbnROb2RlPVBvbHltZXIuZG9tKHRoaXMpLnBhcmVudE5vZGU7aWYocGFyZW50Tm9kZSYmcGFyZW50Tm9kZS5sb2NhbE5hbWU9PXRoaXMuaXMpe3JlZk5vZGU9cGFyZW50Tm9kZTtwYXJlbnROb2RlPVBvbHltZXIuZG9tKHBhcmVudE5vZGUpLnBhcmVudE5vZGU7fWVsc2V7cmVmTm9kZT10aGlzO30KLWlmKHBhcmVudE5vZGUpe2lmKCF0aGlzLl9pbnN0YW5jZSl7dGhpcy5faW5zdGFuY2U9dGhpcy5zdGFtcCgpO3ZhciByb290PXRoaXMuX2luc3RhbmNlLnJvb3Q7UG9seW1lci5kb20ocGFyZW50Tm9kZSkuaW5zZXJ0QmVmb3JlKHJvb3QscmVmTm9kZSk7fWVsc2V7dmFyIGMkPXRoaXMuX2luc3RhbmNlLl9jaGlsZHJlbjtpZihjJCYmYyQubGVuZ3RoKXt2YXIgbGFzdENoaWxkPVBvbHltZXIuZG9tKHJlZk5vZGUpLnByZXZpb3VzU2libGluZztpZihsYXN0Q2hpbGQhPT1jJFtjJC5sZW5ndGgtMV0pe2Zvcih2YXIgaT0wLG47aTxjJC5sZW5ndGgmJihuPWMkW2ldKTtpKyspe1BvbHltZXIuZG9tKHBhcmVudE5vZGUpLmluc2VydEJlZm9yZShuLHJlZk5vZGUpO319fX19fSxfdGVhcmRvd25JbnN0YW5jZTpmdW5jdGlvbigpe2lmKHRoaXMuX2luc3RhbmNlKXt2YXIgYyQ9dGhpcy5faW5zdGFuY2UuX2NoaWxkcmVuO2lmKGMkJiZjJC5sZW5ndGgpe3ZhciBwYXJlbnQ9UG9seW1lci5kb20oUG9seW1lci5kb20oYyRbMF0pLnBhcmVudE5vZGUpO2Zvcih2YXIgaT0wLG47aTxjJC5sZW5ndGgmJihuPWMkW2ldKTtpKyspe3BhcmVudC5yZW1vdmVDaGlsZChuKTt9fQotdGhpcy5faW5zdGFuY2U9bnVsbDt9fSxfc2hvd0hpZGVDaGlsZHJlbjpmdW5jdGlvbigpe3ZhciBoaWRkZW49dGhpcy5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX198fCF0aGlzLmlmO2lmKHRoaXMuX2luc3RhbmNlKXt0aGlzLl9pbnN0YW5jZS5fc2hvd0hpZGVDaGlsZHJlbihoaWRkZW4pO319LF9mb3J3YXJkUGFyZW50UHJvcDpmdW5jdGlvbihwcm9wLHZhbHVlKXtpZih0aGlzLl9pbnN0YW5jZSl7dGhpcy5faW5zdGFuY2UuX19zZXRQcm9wZXJ0eShwcm9wLHZhbHVlLHRydWUpO319LF9mb3J3YXJkUGFyZW50UGF0aDpmdW5jdGlvbihwYXRoLHZhbHVlKXtpZih0aGlzLl9pbnN0YW5jZSl7dGhpcy5faW5zdGFuY2UuX25vdGlmeVBhdGgocGF0aCx2YWx1ZSx0cnVlKTt9fX0pO1BvbHltZXIoe2lzOidkb20tYmluZCcscHJvcGVydGllczp7bm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59fSxleHRlbmRzOid0ZW1wbGF0ZScsX3RlbXBsYXRlOm51bGwsY3JlYXRlZDpmdW5jdGlvbigpe3ZhciBzZWxmPXRoaXM7UG9seW1lci5SZW5kZXJTdGF0dXMud2hlblJlYWR5KGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQucmVhZHlTdGF0ZT09J2xvYWRpbmcnKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJyxmdW5jdGlvbigpe3NlbGYuX21hcmtJbXBvcnRzUmVhZHkoKTt9KTt9ZWxzZXtzZWxmLl9tYXJrSW1wb3J0c1JlYWR5KCk7fX0pO30sX2Vuc3VyZVJlYWR5OmZ1bmN0aW9uKCl7aWYoIXRoaXMuX3JlYWRpZWQpe3RoaXMuX3JlYWR5U2VsZigpO319LF9tYXJrSW1wb3J0c1JlYWR5OmZ1bmN0aW9uKCl7dGhpcy5faW1wb3J0c1JlYWR5PXRydWU7dGhpcy5fZW5zdXJlUmVhZHkoKTt9LF9yZWdpc3RlckZlYXR1cmVzOmZ1bmN0aW9uKCl7dGhpcy5fcHJlcENvbnN0cnVjdG9yKCk7fSxfaW5zZXJ0Q2hpbGRyZW46ZnVuY3Rpb24oKXt2YXIgcmVmTm9kZTt2YXIgcGFyZW50Tm9kZT1Qb2x5bWVyLmRvbSh0aGlzKS5wYXJlbnROb2RlO2lmKHBhcmVudE5vZGUubG9jYWxOYW1lPT10aGlzLmlzKXtyZWZOb2RlPXBhcmVudE5vZGU7cGFyZW50Tm9kZT1Qb2x5bWVyLmRvbShwYXJlbnROb2RlKS5wYXJlbnROb2RlO31lbHNle3JlZk5vZGU9dGhpczt9Ci1Qb2x5bWVyLmRvbShwYXJlbnROb2RlKS5pbnNlcnRCZWZvcmUodGhpcy5yb290LHJlZk5vZGUpO30sX3JlbW92ZUNoaWxkcmVuOmZ1bmN0aW9uKCl7aWYodGhpcy5fY2hpbGRyZW4pe2Zvcih2YXIgaT0wO2k8dGhpcy5fY2hpbGRyZW4ubGVuZ3RoO2krKyl7dGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuX2NoaWxkcmVuW2ldKTt9fX0sX2luaXRGZWF0dXJlczpmdW5jdGlvbigpe30sX3Njb3BlRWxlbWVudENsYXNzOmZ1bmN0aW9uKGVsZW1lbnQsc2VsZWN0b3Ipe2lmKHRoaXMuZGF0YUhvc3Qpe3JldHVybiB0aGlzLmRhdGFIb3N0Ll9zY29wZUVsZW1lbnRDbGFzcyhlbGVtZW50LHNlbGVjdG9yKTt9ZWxzZXtyZXR1cm4gc2VsZWN0b3I7fX0sX2NvbmZpZ3VyZUluc3RhbmNlUHJvcGVydGllczpmdW5jdGlvbigpe30sX3ByZXBDb25maWd1cmU6ZnVuY3Rpb24oKXt2YXIgY29uZmlnPXt9O2Zvcih2YXIgcHJvcCBpbiB0aGlzLl9wcm9wZXJ0eUVmZmVjdHMpe2NvbmZpZ1twcm9wXT10aGlzW3Byb3BdO30KLXZhciBzZXR1cENvbmZpZ3VyZT10aGlzLl9zZXR1cENvbmZpZ3VyZTt0aGlzLl9zZXR1cENvbmZpZ3VyZT1mdW5jdGlvbigpe3NldHVwQ29uZmlndXJlLmNhbGwodGhpcyxjb25maWcpO307fSxhdHRhY2hlZDpmdW5jdGlvbigpe2lmKHRoaXMuX2ltcG9ydHNSZWFkeSl7dGhpcy5yZW5kZXIoKTt9fSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUNoaWxkcmVuKCk7fSxyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLl9lbnN1cmVSZWFkeSgpO2lmKCF0aGlzLl9jaGlsZHJlbil7dGhpcy5fdGVtcGxhdGU9dGhpczt0aGlzLl9wcmVwQW5ub3RhdGlvbnMoKTt0aGlzLl9wcmVwRWZmZWN0cygpO3RoaXMuX3ByZXBCZWhhdmlvcnMoKTt0aGlzLl9wcmVwQ29uZmlndXJlKCk7dGhpcy5fcHJlcEJpbmRpbmdzKCk7dGhpcy5fcHJlcFByb3BlcnR5SW5mbygpO1BvbHltZXIuQmFzZS5faW5pdEZlYXR1cmVzLmNhbGwodGhpcyk7dGhpcy5fY2hpbGRyZW49UG9seW1lci5UcmVlQXBpLmFycmF5Q29weUNoaWxkTm9kZXModGhpcy5yb290KTt9Ci10aGlzLl9pbnNlcnRDaGlsZHJlbigpO2lmKCFQb2x5bWVyLlNldHRpbmdzLnN1cHByZXNzVGVtcGxhdGVOb3RpZmljYXRpb25zfHx0aGlzLm5vdGlmeURvbUNoYW5nZSl7dGhpcy5maXJlKCdkb20tY2hhbmdlJyk7fX19KTsndXNlIHN0cmljdCc7aWYoIVBvbHltZXIuU2V0dGluZ3MudXNlTmF0aXZlU2hhZG93KXt0ci5zaG93UGFuaWMoJ1BvbHltZXIgZXJyb3InLCdiYXNlIG9ubHkgd29ya3MgaW4gc2hhZG93IG1vZGUnKTt9J3VzZSBzdHJpY3QnO2NvbnN0IGdsb2JhbD10aGlzLndpbmRvd3x8dGhpcy5nbG9iYWw7dGhpcy50cj0oZnVuY3Rpb24oKXtpZihnbG9iYWwudHIpcmV0dXJuIGdsb2JhbC50cjtmdW5jdGlvbiBleHBvcnRQYXRoKG5hbWUpe2NvbnN0IHBhcnRzPW5hbWUuc3BsaXQoJy4nKTtsZXQgY3VyPWdsb2JhbDtmb3IobGV0IHBhcnQ7cGFydHMubGVuZ3RoJiYocGFydD1wYXJ0cy5zaGlmdCgpKTspe2lmKHBhcnQgaW4gY3VyKXtjdXI9Y3VyW3BhcnRdO31lbHNle2N1cj1jdXJbcGFydF09e307fX0KLXJldHVybiBjdXI7fQotZnVuY3Rpb24gaXNFeHBvcnRlZChuYW1lKXtjb25zdCBwYXJ0cz1uYW1lLnNwbGl0KCcuJyk7bGV0IGN1cj1nbG9iYWw7Zm9yKGxldCBwYXJ0O3BhcnRzLmxlbmd0aCYmKHBhcnQ9cGFydHMuc2hpZnQoKSk7KXtpZihwYXJ0IGluIGN1cil7Y3VyPWN1cltwYXJ0XTt9ZWxzZXtyZXR1cm4gZmFsc2U7fX0KLXJldHVybiB0cnVlO30KLWZ1bmN0aW9uIGlzRGVmaW5lZChuYW1lKXtjb25zdCBwYXJ0cz1uYW1lLnNwbGl0KCcuJyk7bGV0IGN1ck9iamVjdD1nbG9iYWw7Zm9yKGxldCBpPTA7aTxwYXJ0cy5sZW5ndGg7aSsrKXtjb25zdCBwYXJ0TmFtZT1wYXJ0c1tpXTtjb25zdCBuZXh0T2JqZWN0PWN1ck9iamVjdFtwYXJ0TmFtZV07aWYobmV4dE9iamVjdD09PXVuZGVmaW5lZClyZXR1cm4gZmFsc2U7Y3VyT2JqZWN0PW5leHRPYmplY3Q7fQotcmV0dXJuIHRydWU7fQotbGV0IHBhbmljRWxlbWVudD11bmRlZmluZWQ7Y29uc3QgcmF3UGFuaWNNZXNzYWdlcz1bXTtmdW5jdGlvbiBzaG93UGFuaWNFbGVtZW50SWZOZWVkZWQoKXtpZihwYW5pY0VsZW1lbnQpcmV0dXJuO2NvbnN0IHBhbmljT3ZlcmxheT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtwYW5pY092ZXJsYXkuc3R5bGUuYmFja2dyb3VuZENvbG9yPSd3aGl0ZSc7cGFuaWNPdmVybGF5LnN0eWxlLmJvcmRlcj0nM3B4IHNvbGlkIHJlZCc7cGFuaWNPdmVybGF5LnN0eWxlLmJveFNpemluZz0nYm9yZGVyLWJveCc7cGFuaWNPdmVybGF5LnN0eWxlLmNvbG9yPSdibGFjayc7cGFuaWNPdmVybGF5LnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3BhbmljT3ZlcmxheS5zdHlsZS5oZWlnaHQ9JzEwMCUnO3BhbmljT3ZlcmxheS5zdHlsZS5sZWZ0PTA7cGFuaWNPdmVybGF5LnN0eWxlLnBhZGRpbmc9JzhweCc7cGFuaWNPdmVybGF5LnN0eWxlLnBvc2l0aW9uPSdmaXhlZCc7cGFuaWNPdmVybGF5LnN0eWxlLnRvcD0wO3BhbmljT3ZlcmxheS5zdHlsZS53ZWJraXRGbGV4RGlyZWN0aW9uPSdjb2x1bW4nO3BhbmljT3ZlcmxheS5zdHlsZS53aWR0aD0nMTAwJSc7cGFuaWNFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO3BhbmljRWxlbWVudC5zdHlsZS53ZWJraXRGbGV4PScxIDEgYXV0byc7cGFuaWNFbGVtZW50LnN0eWxlLm92ZXJmbG93PSdhdXRvJztwYW5pY092ZXJsYXkuYXBwZW5kQ2hpbGQocGFuaWNFbGVtZW50KTtpZighZG9jdW1lbnQuYm9keSl7c2V0VGltZW91dChmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocGFuaWNPdmVybGF5KTt9LDE1MCk7fWVsc2V7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwYW5pY092ZXJsYXkpO319Ci1mdW5jdGlvbiBzaG93UGFuaWMocGFuaWNUaXRsZSxwYW5pY0RldGFpbHMpe2lmKHRyLmlzSGVhZGxlc3Mpe2lmKHBhbmljRGV0YWlscyBpbnN0YW5jZW9mIEVycm9yKXRocm93IHBhbmljRGV0YWlsczt0aHJvdyBuZXcgRXJyb3IoJ1BhbmljOiAnK3BhbmljVGl0bGUrJzpcbicrcGFuaWNEZXRhaWxzKTt9Ci1pZihwYW5pY0RldGFpbHMgaW5zdGFuY2VvZiBFcnJvcil7cGFuaWNEZXRhaWxzPXBhbmljRGV0YWlscy5zdGFjazt9Ci1zaG93UGFuaWNFbGVtZW50SWZOZWVkZWQoKTtjb25zdCBwYW5pY01lc3NhZ2VFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtwYW5pY01lc3NhZ2VFbC5pbm5lckhUTUw9JzxoMiBpZD0ibWVzc2FnZSI+PC9oMj4nKyc8cHJlIGlkPSJkZXRhaWxzIj48L3ByZT4nO3BhbmljTWVzc2FnZUVsLnF1ZXJ5U2VsZWN0b3IoJyNtZXNzYWdlJykudGV4dENvbnRlbnQ9cGFuaWNUaXRsZTtwYW5pY01lc3NhZ2VFbC5xdWVyeVNlbGVjdG9yKCcjZGV0YWlscycpLnRleHRDb250ZW50PXBhbmljRGV0YWlscztwYW5pY0VsZW1lbnQuYXBwZW5kQ2hpbGQocGFuaWNNZXNzYWdlRWwpO3Jhd1BhbmljTWVzc2FnZXMucHVzaCh7dGl0bGU6cGFuaWNUaXRsZSxkZXRhaWxzOnBhbmljRGV0YWlsc30pO30KLWZ1bmN0aW9uIGhhc1BhbmljKCl7cmV0dXJuIHJhd1BhbmljTWVzc2FnZXMubGVuZ3RoIT09MDt9Ci1mdW5jdGlvbiBnZXRQYW5pY1RleHQoKXtyZXR1cm4gcmF3UGFuaWNNZXNzYWdlcy5tYXAoZnVuY3Rpb24obXNnKXtyZXR1cm4gbXNnLnRpdGxlO30pLmpvaW4oJywgJyk7fQotZnVuY3Rpb24gZXhwb3J0VG8obmFtZXNwYWNlLGZuKXtjb25zdCBvYmo9ZXhwb3J0UGF0aChuYW1lc3BhY2UpO2NvbnN0IGV4cG9ydHM9Zm4oKTtmb3IoY29uc3QgcHJvcGVydHlOYW1lIGluIGV4cG9ydHMpe2NvbnN0IHByb3BlcnR5RGVzY3JpcHRvcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4cG9ydHMscHJvcGVydHlOYW1lKTtpZihwcm9wZXJ0eURlc2NyaXB0b3Ipe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmoscHJvcGVydHlOYW1lLHByb3BlcnR5RGVzY3JpcHRvcik7fX19Ci1mdW5jdGlvbiBpbml0aWFsaXplKCl7aWYoZ2xvYmFsLmlzVmlubil7dHIuaXNWaW5uPXRydWU7fWVsc2UgaWYoZ2xvYmFsLnByb2Nlc3MmJmdsb2JhbC5wcm9jZXNzLnZlcnNpb25zLm5vZGUpe3RyLmlzTm9kZT10cnVlO31lbHNle3RyLmlzVmlubj1mYWxzZTt0ci5pc05vZGU9ZmFsc2U7dHIuZG9jPWRvY3VtZW50O3RyLmlzTWFjPS9NYWMvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTt0ci5pc1dpbmRvd3M9L1dpbi8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pO3RyLmlzQ2hyb21lT1M9L0NyT1MvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7dHIuaXNMaW51eD0vTGludXgvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7fQotdHIuaXNIZWFkbGVzcz10ci5pc1Zpbm58fHRyLmlzTm9kZTt9Ci1yZXR1cm57aW5pdGlhbGl6ZSxleHBvcnRUbyxpc0V4cG9ydGVkLGlzRGVmaW5lZCxzaG93UGFuaWMsaGFzUGFuaWMsZ2V0UGFuaWNUZXh0LH07fSkoKTt0ci5pbml0aWFsaXplKCk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEV2ZW50VGFyZ2V0KCl7fQotRXZlbnRUYXJnZXQuZGVjb3JhdGU9ZnVuY3Rpb24odGFyZ2V0KXtmb3IoY29uc3QgayBpbiBFdmVudFRhcmdldC5wcm90b3R5cGUpe2lmKGs9PT0nZGVjb3JhdGUnKWNvbnRpbnVlO2NvbnN0IHY9RXZlbnRUYXJnZXQucHJvdG90eXBlW2tdO2lmKHR5cGVvZiB2IT09J2Z1bmN0aW9uJyljb250aW51ZTt0YXJnZXRba109djt9fTtFdmVudFRhcmdldC5wcm90b3R5cGU9e2FkZEV2ZW50TGlzdGVuZXIodHlwZSxoYW5kbGVyKXtpZighdGhpcy5saXN0ZW5lcnNfKXt0aGlzLmxpc3RlbmVyc189T2JqZWN0LmNyZWF0ZShudWxsKTt9Ci1pZighKHR5cGUgaW4gdGhpcy5saXN0ZW5lcnNfKSl7dGhpcy5saXN0ZW5lcnNfW3R5cGVdPVtoYW5kbGVyXTt9ZWxzZXtjb25zdCBoYW5kbGVycz10aGlzLmxpc3RlbmVyc19bdHlwZV07aWYoaGFuZGxlcnMuaW5kZXhPZihoYW5kbGVyKTwwKXtoYW5kbGVycy5wdXNoKGhhbmRsZXIpO319fSxyZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsaGFuZGxlcil7aWYoIXRoaXMubGlzdGVuZXJzXylyZXR1cm47aWYodHlwZSBpbiB0aGlzLmxpc3RlbmVyc18pe2NvbnN0IGhhbmRsZXJzPXRoaXMubGlzdGVuZXJzX1t0eXBlXTtjb25zdCBpbmRleD1oYW5kbGVycy5pbmRleE9mKGhhbmRsZXIpO2lmKGluZGV4Pj0wKXtpZihoYW5kbGVycy5sZW5ndGg9PT0xKXtkZWxldGUgdGhpcy5saXN0ZW5lcnNfW3R5cGVdO31lbHNle2hhbmRsZXJzLnNwbGljZShpbmRleCwxKTt9fX19LGRpc3BhdGNoRXZlbnQoZXZlbnQpe2lmKCF0aGlzLmxpc3RlbmVyc18pcmV0dXJuIHRydWU7ZXZlbnQuX19kZWZpbmVHZXR0ZXJfXygndGFyZ2V0JywoKT0+dGhpcyk7Y29uc3QgcmVhbFByZXZlbnREZWZhdWx0PWV2ZW50LnByZXZlbnREZWZhdWx0O2V2ZW50LnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7cmVhbFByZXZlbnREZWZhdWx0LmNhbGwodGhpcyk7dGhpcy5yYXdSZXR1cm5WYWx1ZT1mYWxzZTt9O2NvbnN0IHR5cGU9ZXZlbnQudHlwZTtsZXQgcHJldmVudGVkPTA7aWYodHlwZSBpbiB0aGlzLmxpc3RlbmVyc18pe2NvbnN0IGhhbmRsZXJzPXRoaXMubGlzdGVuZXJzX1t0eXBlXS5jb25jYXQoKTtmb3IobGV0IGk9MCxoYW5kbGVyO2hhbmRsZXI9aGFuZGxlcnNbaV07aSsrKXtpZihoYW5kbGVyLmhhbmRsZUV2ZW50KXtwcmV2ZW50ZWR8PWhhbmRsZXIuaGFuZGxlRXZlbnQuY2FsbChoYW5kbGVyLGV2ZW50KT09PWZhbHNlO31lbHNle3ByZXZlbnRlZHw9aGFuZGxlci5jYWxsKHRoaXMsZXZlbnQpPT09ZmFsc2U7fX19Ci1yZXR1cm4hcHJldmVudGVkJiZldmVudC5yYXdSZXR1cm5WYWx1ZTt9LGFzeW5jIGRpc3BhdGNoQXN5bmMoZXZlbnQpe2lmKCF0aGlzLmxpc3RlbmVyc18pcmV0dXJuIHRydWU7Y29uc3QgbGlzdGVuZXJzPXRoaXMubGlzdGVuZXJzX1tldmVudC50eXBlXTtpZihsaXN0ZW5lcnM9PT11bmRlZmluZWQpcmV0dXJuO2F3YWl0IFByb21pc2UuYWxsKGxpc3RlbmVycy5zbGljZSgpLm1hcChsaXN0ZW5lcj0+e2lmKGxpc3RlbmVyLmhhbmRsZUV2ZW50KXtyZXR1cm4gbGlzdGVuZXIuaGFuZGxlRXZlbnQuY2FsbChsaXN0ZW5lcixldmVudCk7fQotcmV0dXJuIGxpc3RlbmVyLmNhbGwodGhpcyxldmVudCk7fSkpO30saGFzRXZlbnRMaXN0ZW5lcih0eXBlKXtyZXR1cm4odGhpcy5saXN0ZW5lcnNfIT09dW5kZWZpbmVkJiZ0aGlzLmxpc3RlbmVyc19bdHlwZV0hPT11bmRlZmluZWQpO319O3JldHVybntFdmVudFRhcmdldCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBSZWdpc3RlcmVkVHlwZUluZm8oY29uc3RydWN0b3IsbWV0YWRhdGEpe3RoaXMuY29uc3RydWN0b3I9Y29uc3RydWN0b3I7dGhpcy5tZXRhZGF0YT1tZXRhZGF0YTt9Ci1jb25zdCBCQVNJQ19SRUdJU1RSWV9NT0RFPSdCQVNJQ19SRUdJU1RSWV9NT0RFJztjb25zdCBUWVBFX0JBU0VEX1JFR0lTVFJZX01PREU9J1RZUEVfQkFTRURfUkVHSVNUUllfTU9ERSc7Y29uc3QgQUxMX01PREVTPXtCQVNJQ19SRUdJU1RSWV9NT0RFOnRydWUsVFlQRV9CQVNFRF9SRUdJU1RSWV9NT0RFOnRydWV9O2Z1bmN0aW9uIEV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucyhtb2RlKXtpZihtb2RlPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ01vZGUgaXMgcmVxdWlyZWQnKTt9Ci1pZighQUxMX01PREVTW21vZGVdKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBhIG1vZGUuJyk7fQotdGhpcy5tb2RlXz1tb2RlO3RoaXMuZGVmYXVsdE1ldGFkYXRhXz17fTt0aGlzLmRlZmF1bHRDb25zdHJ1Y3Rvcl89dW5kZWZpbmVkO3RoaXMuZGVmYXVsdFR5cGVJbmZvXz11bmRlZmluZWQ7dGhpcy5mcm96ZW5fPWZhbHNlO30KLUV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucy5wcm90b3R5cGU9e2ZyZWV6ZSgpe2lmKHRoaXMuZnJvemVuXyl7dGhyb3cgbmV3IEVycm9yKCdGcm96ZW4nKTt9Ci10aGlzLmZyb3plbl89dHJ1ZTt9LGdldCBtb2RlKCl7cmV0dXJuIHRoaXMubW9kZV87fSxnZXQgZGVmYXVsdE1ldGFkYXRhKCl7cmV0dXJuIHRoaXMuZGVmYXVsdE1ldGFkYXRhXzt9LHNldCBkZWZhdWx0TWV0YWRhdGEoZGVmYXVsdE1ldGFkYXRhKXtpZih0aGlzLmZyb3plbl8pe3Rocm93IG5ldyBFcnJvcignRnJvemVuJyk7fQotdGhpcy5kZWZhdWx0TWV0YWRhdGFfPWRlZmF1bHRNZXRhZGF0YTt0aGlzLmRlZmF1bHRUeXBlSW5mb189dW5kZWZpbmVkO30sZ2V0IGRlZmF1bHRDb25zdHJ1Y3Rvcigpe3JldHVybiB0aGlzLmRlZmF1bHRDb25zdHJ1Y3Rvcl87fSxzZXQgZGVmYXVsdENvbnN0cnVjdG9yKGRlZmF1bHRDb25zdHJ1Y3Rvcil7aWYodGhpcy5mcm96ZW5fKXt0aHJvdyBuZXcgRXJyb3IoJ0Zyb3plbicpO30KLXRoaXMuZGVmYXVsdENvbnN0cnVjdG9yXz1kZWZhdWx0Q29uc3RydWN0b3I7dGhpcy5kZWZhdWx0VHlwZUluZm9fPXVuZGVmaW5lZDt9LGdldCBkZWZhdWx0VHlwZUluZm8oKXtpZih0aGlzLmRlZmF1bHRUeXBlSW5mb189PT11bmRlZmluZWQmJnRoaXMuZGVmYXVsdENvbnN0cnVjdG9yXyl7dGhpcy5kZWZhdWx0VHlwZUluZm9fPW5ldyBSZWdpc3RlcmVkVHlwZUluZm8odGhpcy5kZWZhdWx0Q29uc3RydWN0b3IsdGhpcy5kZWZhdWx0TWV0YWRhdGEpO30KLXJldHVybiB0aGlzLmRlZmF1bHRUeXBlSW5mb187fSx2YWxpZGF0ZUNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKXtpZighdGhpcy5tYW5kYXRvcnlCYXNlQ2xhc3MpcmV0dXJuO2xldCBjdXJQcm90bz1jb25zdHJ1Y3Rvci5wcm90b3R5cGUuX19wcm90b19fO2xldCBvaz1mYWxzZTt3aGlsZShjdXJQcm90byl7aWYoY3VyUHJvdG89PT10aGlzLm1hbmRhdG9yeUJhc2VDbGFzcy5wcm90b3R5cGUpe29rPXRydWU7YnJlYWs7fQotY3VyUHJvdG89Y3VyUHJvdG8uX19wcm90b19fO30KLWlmKCFvayl7dGhyb3cgbmV3IEVycm9yKGNvbnN0cnVjdG9yKydtdXN0IGJlIHN1YmNsYXNzIG9mICcrcmVnaXN0cnkpO319fTtyZXR1cm57QkFTSUNfUkVHSVNUUllfTU9ERSxUWVBFX0JBU0VEX1JFR0lTVFJZX01PREUsRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zLFJlZ2lzdGVyZWRUeXBlSW5mbyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtsZXQgRXZlbnQ7aWYodHIuaXNIZWFkbGVzcyl7ZnVuY3Rpb24gSGVhZGxlc3NFdmVudCh0eXBlLG9wdF9idWJibGVzLG9wdF9wcmV2ZW50YWJsZSl7dGhpcy50eXBlPXR5cGU7dGhpcy5idWJibGVzPShvcHRfYnViYmxlcyE9PXVuZGVmaW5lZD8hIW9wdF9idWJibGVzOmZhbHNlKTt0aGlzLmNhbmNlbGFibGU9KG9wdF9wcmV2ZW50YWJsZSE9PXVuZGVmaW5lZD8hIW9wdF9wcmV2ZW50YWJsZTpmYWxzZSk7dGhpcy5kZWZhdWx0UHJldmVudGVkPWZhbHNlO3RoaXMuY2FuY2VsQnViYmxlPWZhbHNlO30KLUhlYWRsZXNzRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdCgpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD10cnVlO30sc3RvcFByb3BhZ2F0aW9uKCl7dGhpcy5jYW5jZWxCdWJibGU9dHJ1ZTt9fTtFdmVudD1IZWFkbGVzc0V2ZW50O31lbHNle2Z1bmN0aW9uIFRyRXZlbnQodHlwZSxvcHRfYnViYmxlcyxvcHRfcHJldmVudGFibGUpe2NvbnN0IGU9dHIuZG9jLmNyZWF0ZUV2ZW50KCdFdmVudCcpO2UuaW5pdEV2ZW50KHR5cGUsISFvcHRfYnViYmxlcywhIW9wdF9wcmV2ZW50YWJsZSk7ZS5fX3Byb3RvX189Z2xvYmFsLkV2ZW50LnByb3RvdHlwZTtyZXR1cm4gZTt9Ci1UckV2ZW50LnByb3RvdHlwZT17X19wcm90b19fOmdsb2JhbC5FdmVudC5wcm90b3R5cGV9O0V2ZW50PVRyRXZlbnQ7fQotZnVuY3Rpb24gZGlzcGF0Y2hTaW1wbGVFdmVudCh0YXJnZXQsdHlwZSxvcHRfYnViYmxlcyxvcHRfY2FuY2VsYWJsZSxvcHRfZmllbGRzKXtjb25zdCBlPW5ldyB0ci5iLkV2ZW50KHR5cGUsb3B0X2J1YmJsZXMsb3B0X2NhbmNlbGFibGUpO09iamVjdC5hc3NpZ24oZSxvcHRfZmllbGRzKTtyZXR1cm4gdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZSk7fQotYXN5bmMgZnVuY3Rpb24gZGlzcGF0Y2hTaW1wbGVFdmVudEFzeW5jKHRhcmdldCx0eXBlLG9wdF9maWVsZHMpe2NvbnN0IGU9bmV3IHRyLmIuRXZlbnQodHlwZSxmYWxzZSxmYWxzZSk7T2JqZWN0LmFzc2lnbihlLG9wdF9maWVsZHMpO3JldHVybiBhd2FpdCB0YXJnZXQuZGlzcGF0Y2hBc3luYyhlKTt9Ci1yZXR1cm57RXZlbnQsZGlzcGF0Y2hTaW1wbGVFdmVudCxkaXNwYXRjaFNpbXBsZUV2ZW50QXN5bmMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y29uc3QgUmVnaXN0ZXJlZFR5cGVJbmZvPXRyLmIuUmVnaXN0ZXJlZFR5cGVJbmZvO2NvbnN0IEV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucz10ci5iLkV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucztmdW5jdGlvbiBkZWNvcmF0ZUJhc2ljRXh0ZW5zaW9uUmVnaXN0cnkocmVnaXN0cnksZXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKXtjb25zdCBzYXZlZFN0YXRlU3RhY2s9W107cmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc189W107cmVnaXN0cnkucmVnaXN0ZXI9ZnVuY3Rpb24oY29uc3RydWN0b3Isb3B0X21ldGFkYXRhKXtpZihyZWdpc3RyeS5maW5kSW5kZXhPZlJlZ2lzdGVyZWRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikhPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignSGFuZGxlciBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yICcrY29uc3RydWN0b3IpO30KLWV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucy52YWxpZGF0ZUNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKTtjb25zdCBtZXRhZGF0YT17fTtmb3IoY29uc3QgayBpbiBleHRlbnNpb25SZWdpc3RyeU9wdGlvbnMuZGVmYXVsdE1ldGFkYXRhKXttZXRhZGF0YVtrXT1leHRlbnNpb25SZWdpc3RyeU9wdGlvbnMuZGVmYXVsdE1ldGFkYXRhW2tdO30KLWlmKG9wdF9tZXRhZGF0YSl7Zm9yKGNvbnN0IGsgaW4gb3B0X21ldGFkYXRhKXttZXRhZGF0YVtrXT1vcHRfbWV0YWRhdGFba107fX0KLWNvbnN0IHR5cGVJbmZvPW5ldyBSZWdpc3RlcmVkVHlwZUluZm8oY29uc3RydWN0b3IsbWV0YWRhdGEpO2xldCBlPW5ldyB0ci5iLkV2ZW50KCd3aWxsLXJlZ2lzdGVyJyk7ZS50eXBlSW5mbz10eXBlSW5mbztyZWdpc3RyeS5kaXNwYXRjaEV2ZW50KGUpO3JlZ2lzdHJ5LnJlZ2lzdGVyZWRUeXBlSW5mb3NfLnB1c2godHlwZUluZm8pO2U9bmV3IHRyLmIuRXZlbnQoJ3JlZ2lzdHJ5LWNoYW5nZWQnKTtyZWdpc3RyeS5kaXNwYXRjaEV2ZW50KGUpO307cmVnaXN0cnkucHVzaENsZWFuU3RhdGVCZWZvcmVUZXN0PWZ1bmN0aW9uKCl7c2F2ZWRTdGF0ZVN0YWNrLnB1c2gocmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc18pO3JlZ2lzdHJ5LnJlZ2lzdGVyZWRUeXBlSW5mb3NfPVtdO2NvbnN0IGU9bmV3IHRyLmIuRXZlbnQoJ3JlZ2lzdHJ5LWNoYW5nZWQnKTtyZWdpc3RyeS5kaXNwYXRjaEV2ZW50KGUpO307cmVnaXN0cnkucG9wQ2xlYW5TdGF0ZUFmdGVyVGVzdD1mdW5jdGlvbigpe3JlZ2lzdHJ5LnJlZ2lzdGVyZWRUeXBlSW5mb3NfPXNhdmVkU3RhdGVTdGFja1swXTtzYXZlZFN0YXRlU3RhY2suc3BsaWNlKDAsMSk7Y29uc3QgZT1uZXcgdHIuYi5FdmVudCgncmVnaXN0cnktY2hhbmdlZCcpO3JlZ2lzdHJ5LmRpc3BhdGNoRXZlbnQoZSk7fTtyZWdpc3RyeS5maW5kSW5kZXhPZlJlZ2lzdGVyZWRDb25zdHJ1Y3Rvcj1mdW5jdGlvbihjb25zdHJ1Y3Rvcil7Zm9yKGxldCBpPTA7aTxyZWdpc3RyeS5yZWdpc3RlcmVkVHlwZUluZm9zXy5sZW5ndGg7aSsrKXtpZihyZWdpc3RyeS5yZWdpc3RlcmVkVHlwZUluZm9zX1tpXS5jb25zdHJ1Y3Rvcj09PWNvbnN0cnVjdG9yKXtyZXR1cm4gaTt9fQotcmV0dXJuIHVuZGVmaW5lZDt9O3JlZ2lzdHJ5LnVucmVnaXN0ZXI9ZnVuY3Rpb24oY29uc3RydWN0b3Ipe2NvbnN0IGZvdW5kSW5kZXg9cmVnaXN0cnkuZmluZEluZGV4T2ZSZWdpc3RlcmVkQ29uc3RydWN0b3IoY29uc3RydWN0b3IpO2lmKGZvdW5kSW5kZXg9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcihjb25zdHJ1Y3RvcisnIG5vdCByZWdpc3RlcmVkJyk7fQotcmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc18uc3BsaWNlKGZvdW5kSW5kZXgsMSk7Y29uc3QgZT1uZXcgdHIuYi5FdmVudCgncmVnaXN0cnktY2hhbmdlZCcpO3JlZ2lzdHJ5LmRpc3BhdGNoRXZlbnQoZSk7fTtyZWdpc3RyeS5nZXRBbGxSZWdpc3RlcmVkVHlwZUluZm9zPWZ1bmN0aW9uKCl7cmV0dXJuIHJlZ2lzdHJ5LnJlZ2lzdGVyZWRUeXBlSW5mb3NfO307cmVnaXN0cnkuZmluZFR5cGVJbmZvPWZ1bmN0aW9uKGNvbnN0cnVjdG9yKXtjb25zdCBmb3VuZEluZGV4PXRoaXMuZmluZEluZGV4T2ZSZWdpc3RlcmVkQ29uc3RydWN0b3IoY29uc3RydWN0b3IpO2lmKGZvdW5kSW5kZXghPT11bmRlZmluZWQpe3JldHVybiB0aGlzLnJlZ2lzdGVyZWRUeXBlSW5mb3NfW2ZvdW5kSW5kZXhdO30KLXJldHVybiB1bmRlZmluZWQ7fTtyZWdpc3RyeS5maW5kVHlwZUluZm9NYXRjaGluZz1mdW5jdGlvbihwcmVkaWNhdGUsb3B0X3RoaXMpe29wdF90aGlzPW9wdF90aGlzP29wdF90aGlzOnVuZGVmaW5lZDtmb3IobGV0IGk9MDtpPHJlZ2lzdHJ5LnJlZ2lzdGVyZWRUeXBlSW5mb3NfLmxlbmd0aDsrK2kpe2NvbnN0IHR5cGVJbmZvPXJlZ2lzdHJ5LnJlZ2lzdGVyZWRUeXBlSW5mb3NfW2ldO2lmKHByZWRpY2F0ZS5jYWxsKG9wdF90aGlzLHR5cGVJbmZvKSl7cmV0dXJuIHR5cGVJbmZvO319Ci1yZXR1cm4gZXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zLmRlZmF1bHRUeXBlSW5mbzt9O3JlZ2lzdHJ5LmZpbmRUeXBlSW5mb1dpdGhOYW1lPWZ1bmN0aW9uKG5hbWUpe2lmKHR5cGVvZihuYW1lKSE9PSdzdHJpbmcnKXt0aHJvdyBuZXcgRXJyb3IoJ05hbWUgaXMgbm90IGEgc3RyaW5nLicpO30KLWNvbnN0IHR5cGVJbmZvPXJlZ2lzdHJ5LmZpbmRUeXBlSW5mb01hdGNoaW5nKGZ1bmN0aW9uKHRpKXtyZXR1cm4gdGkuY29uc3RydWN0b3IubmFtZT09PW5hbWU7fSk7aWYodHlwZUluZm8pcmV0dXJuIHR5cGVJbmZvO3JldHVybiB1bmRlZmluZWQ7fTt9Ci1yZXR1cm57X2RlY29yYXRlQmFzaWNFeHRlbnNpb25SZWdpc3RyeTpkZWNvcmF0ZUJhc2ljRXh0ZW5zaW9uUmVnaXN0cnl9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtjb25zdCBjYXRlZ29yeVBhcnRzRm9yPXt9O2Z1bmN0aW9uIGdldENhdGVnb3J5UGFydHMoY2F0ZWdvcnkpe2xldCBwYXJ0cz1jYXRlZ29yeVBhcnRzRm9yW2NhdGVnb3J5XTtpZihwYXJ0cyE9PXVuZGVmaW5lZClyZXR1cm4gcGFydHM7cGFydHM9Y2F0ZWdvcnkuc3BsaXQoJywnKTtjYXRlZ29yeVBhcnRzRm9yW2NhdGVnb3J5XT1wYXJ0cztyZXR1cm4gcGFydHM7fQotcmV0dXJue2dldENhdGVnb3J5UGFydHMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y29uc3QgZ2V0Q2F0ZWdvcnlQYXJ0cz10ci5iLmdldENhdGVnb3J5UGFydHM7Y29uc3QgUmVnaXN0ZXJlZFR5cGVJbmZvPXRyLmIuUmVnaXN0ZXJlZFR5cGVJbmZvO2NvbnN0IEV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucz10ci5iLkV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucztmdW5jdGlvbiBkZWNvcmF0ZVR5cGVCYXNlZEV4dGVuc2lvblJlZ2lzdHJ5KHJlZ2lzdHJ5LGV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucyl7Y29uc3Qgc2F2ZWRTdGF0ZVN0YWNrPVtdO3JlZ2lzdHJ5LnJlZ2lzdGVyZWRUeXBlSW5mb3NfPVtdO3JlZ2lzdHJ5LmNhdGVnb3J5UGFydFRvVHlwZUluZm9NYXBfPW5ldyBNYXAoKTtyZWdpc3RyeS50eXBlTmFtZVRvVHlwZUluZm9NYXBfPW5ldyBNYXAoKTtyZWdpc3RyeS5yZWdpc3Rlcj1mdW5jdGlvbihjb25zdHJ1Y3RvcixtZXRhZGF0YSl7ZXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zLnZhbGlkYXRlQ29uc3RydWN0b3IoY29uc3RydWN0b3IpO2NvbnN0IHR5cGVJbmZvPW5ldyBSZWdpc3RlcmVkVHlwZUluZm8oY29uc3RydWN0b3IsbWV0YWRhdGF8fGV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucy5kZWZhdWx0TWV0YWRhdGEpO3R5cGVJbmZvLnR5cGVOYW1lcz1bXTt0eXBlSW5mby5jYXRlZ29yeVBhcnRzPVtdO2lmKG1ldGFkYXRhJiZtZXRhZGF0YS50eXBlTmFtZSl7dHlwZUluZm8udHlwZU5hbWVzLnB1c2gobWV0YWRhdGEudHlwZU5hbWUpO30KLWlmKG1ldGFkYXRhJiZtZXRhZGF0YS50eXBlTmFtZXMpe3R5cGVJbmZvLnR5cGVOYW1lcy5wdXNoLmFwcGx5KHR5cGVJbmZvLnR5cGVOYW1lcyxtZXRhZGF0YS50eXBlTmFtZXMpO30KLWlmKG1ldGFkYXRhJiZtZXRhZGF0YS5jYXRlZ29yeVBhcnRzKXt0eXBlSW5mby5jYXRlZ29yeVBhcnRzLnB1c2guYXBwbHkodHlwZUluZm8uY2F0ZWdvcnlQYXJ0cyxtZXRhZGF0YS5jYXRlZ29yeVBhcnRzKTt9Ci1pZih0eXBlSW5mby50eXBlTmFtZXMubGVuZ3RoPT09MCYmdHlwZUluZm8uY2F0ZWdvcnlQYXJ0cy5sZW5ndGg9PT0wKXt0aHJvdyBuZXcgRXJyb3IoJ3R5cGVOYW1lIG9yIHR5cGVOYW1lcyBtdXN0IGJlIHByb3ZpZGVkJyk7fQotdHlwZUluZm8udHlwZU5hbWVzLmZvckVhY2goZnVuY3Rpb24odHlwZU5hbWUpe2lmKHJlZ2lzdHJ5LnR5cGVOYW1lVG9UeXBlSW5mb01hcF8uaGFzKHR5cGVOYW1lKSl7dGhyb3cgbmV3IEVycm9yKCd0eXBlTmFtZSAnK3R5cGVOYW1lKycgYWxyZWFkeSByZWdpc3RlcmVkJyk7fX0pO3R5cGVJbmZvLmNhdGVnb3J5UGFydHMuZm9yRWFjaChmdW5jdGlvbihjYXRlZ29yeVBhcnQpe2lmKHJlZ2lzdHJ5LmNhdGVnb3J5UGFydFRvVHlwZUluZm9NYXBfLmhhcyhjYXRlZ29yeVBhcnQpKXt0aHJvdyBuZXcgRXJyb3IoJ2NhdGVnb3J5UGFydCAnK2NhdGVnb3J5UGFydCsnIGFscmVhZHkgcmVnaXN0ZXJlZCcpO319KTtsZXQgZT1uZXcgdHIuYi5FdmVudCgnd2lsbC1yZWdpc3RlcicpO2UudHlwZUluZm89dHlwZUluZm87cmVnaXN0cnkuZGlzcGF0Y2hFdmVudChlKTt0eXBlSW5mby50eXBlTmFtZXMuZm9yRWFjaChmdW5jdGlvbih0eXBlTmFtZSl7cmVnaXN0cnkudHlwZU5hbWVUb1R5cGVJbmZvTWFwXy5zZXQodHlwZU5hbWUsdHlwZUluZm8pO30pO3R5cGVJbmZvLmNhdGVnb3J5UGFydHMuZm9yRWFjaChmdW5jdGlvbihjYXRlZ29yeVBhcnQpe3JlZ2lzdHJ5LmNhdGVnb3J5UGFydFRvVHlwZUluZm9NYXBfLnNldChjYXRlZ29yeVBhcnQsdHlwZUluZm8pO30pO3JlZ2lzdHJ5LnJlZ2lzdGVyZWRUeXBlSW5mb3NfLnB1c2godHlwZUluZm8pO2U9bmV3IHRyLmIuRXZlbnQoJ3JlZ2lzdHJ5LWNoYW5nZWQnKTtyZWdpc3RyeS5kaXNwYXRjaEV2ZW50KGUpO307cmVnaXN0cnkucHVzaENsZWFuU3RhdGVCZWZvcmVUZXN0PWZ1bmN0aW9uKCl7c2F2ZWRTdGF0ZVN0YWNrLnB1c2goe3JlZ2lzdGVyZWRUeXBlSW5mb3M6cmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc18sdHlwZU5hbWVUb1R5cGVJbmZvTWFwOnJlZ2lzdHJ5LnR5cGVOYW1lVG9UeXBlSW5mb01hcF8sY2F0ZWdvcnlQYXJ0VG9UeXBlSW5mb01hcDpyZWdpc3RyeS5jYXRlZ29yeVBhcnRUb1R5cGVJbmZvTWFwX30pO3JlZ2lzdHJ5LnJlZ2lzdGVyZWRUeXBlSW5mb3NfPVtdO3JlZ2lzdHJ5LnR5cGVOYW1lVG9UeXBlSW5mb01hcF89bmV3IE1hcCgpO3JlZ2lzdHJ5LmNhdGVnb3J5UGFydFRvVHlwZUluZm9NYXBfPW5ldyBNYXAoKTtjb25zdCBlPW5ldyB0ci5iLkV2ZW50KCdyZWdpc3RyeS1jaGFuZ2VkJyk7cmVnaXN0cnkuZGlzcGF0Y2hFdmVudChlKTt9O3JlZ2lzdHJ5LnBvcENsZWFuU3RhdGVBZnRlclRlc3Q9ZnVuY3Rpb24oKXtjb25zdCBzdGF0ZT1zYXZlZFN0YXRlU3RhY2tbMF07c2F2ZWRTdGF0ZVN0YWNrLnNwbGljZSgwLDEpO3JlZ2lzdHJ5LnJlZ2lzdGVyZWRUeXBlSW5mb3NfPXN0YXRlLnJlZ2lzdGVyZWRUeXBlSW5mb3M7cmVnaXN0cnkudHlwZU5hbWVUb1R5cGVJbmZvTWFwXz1zdGF0ZS50eXBlTmFtZVRvVHlwZUluZm9NYXA7cmVnaXN0cnkuY2F0ZWdvcnlQYXJ0VG9UeXBlSW5mb01hcF89c3RhdGUuY2F0ZWdvcnlQYXJ0VG9UeXBlSW5mb01hcDtjb25zdCBlPW5ldyB0ci5iLkV2ZW50KCdyZWdpc3RyeS1jaGFuZ2VkJyk7cmVnaXN0cnkuZGlzcGF0Y2hFdmVudChlKTt9O3JlZ2lzdHJ5LnVucmVnaXN0ZXI9ZnVuY3Rpb24oY29uc3RydWN0b3Ipe2xldCB0eXBlSW5mb0luZGV4PS0xO2ZvcihsZXQgaT0wO2k8cmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc18ubGVuZ3RoO2krKyl7aWYocmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc19baV0uY29uc3RydWN0b3I9PT1jb25zdHJ1Y3Rvcil7dHlwZUluZm9JbmRleD1pO2JyZWFrO319Ci1pZih0eXBlSW5mb0luZGV4PT09LTEpe3Rocm93IG5ldyBFcnJvcihjb25zdHJ1Y3RvcisnIG5vdCByZWdpc3RlcmVkJyk7fQotY29uc3QgdHlwZUluZm89cmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc19bdHlwZUluZm9JbmRleF07cmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc18uc3BsaWNlKHR5cGVJbmZvSW5kZXgsMSk7dHlwZUluZm8udHlwZU5hbWVzLmZvckVhY2goZnVuY3Rpb24odHlwZU5hbWUpe3JlZ2lzdHJ5LnR5cGVOYW1lVG9UeXBlSW5mb01hcF8uZGVsZXRlKHR5cGVOYW1lKTt9KTt0eXBlSW5mby5jYXRlZ29yeVBhcnRzLmZvckVhY2goZnVuY3Rpb24oY2F0ZWdvcnlQYXJ0KXtyZWdpc3RyeS5jYXRlZ29yeVBhcnRUb1R5cGVJbmZvTWFwXy5kZWxldGUoY2F0ZWdvcnlQYXJ0KTt9KTtjb25zdCBlPW5ldyB0ci5iLkV2ZW50KCdyZWdpc3RyeS1jaGFuZ2VkJyk7cmVnaXN0cnkuZGlzcGF0Y2hFdmVudChlKTt9O3JlZ2lzdHJ5LmdldFR5cGVJbmZvPWZ1bmN0aW9uKGNhdGVnb3J5LHR5cGVOYW1lKXtpZihjYXRlZ29yeSl7Y29uc3QgY2F0ZWdvcnlQYXJ0cz1nZXRDYXRlZ29yeVBhcnRzKGNhdGVnb3J5KTtmb3IobGV0IGk9MDtpPGNhdGVnb3J5UGFydHMubGVuZ3RoO2krKyl7Y29uc3QgY2F0ZWdvcnlQYXJ0PWNhdGVnb3J5UGFydHNbaV07Y29uc3QgdHlwZUluZm89cmVnaXN0cnkuY2F0ZWdvcnlQYXJ0VG9UeXBlSW5mb01hcF8uZ2V0KGNhdGVnb3J5UGFydCk7aWYodHlwZUluZm8hPT11bmRlZmluZWQpcmV0dXJuIHR5cGVJbmZvO319Ci1jb25zdCB0eXBlSW5mbz1yZWdpc3RyeS50eXBlTmFtZVRvVHlwZUluZm9NYXBfLmdldCh0eXBlTmFtZSk7aWYodHlwZUluZm8hPT11bmRlZmluZWQpcmV0dXJuIHR5cGVJbmZvO3JldHVybiBleHRlbnNpb25SZWdpc3RyeU9wdGlvbnMuZGVmYXVsdFR5cGVJbmZvO307cmVnaXN0cnkuZ2V0Q29uc3RydWN0b3I9ZnVuY3Rpb24oY2F0ZWdvcnksdHlwZU5hbWUpe2NvbnN0IHR5cGVJbmZvPXJlZ2lzdHJ5LmdldFR5cGVJbmZvKGNhdGVnb3J5LHR5cGVOYW1lKTtpZih0eXBlSW5mbylyZXR1cm4gdHlwZUluZm8uY29uc3RydWN0b3I7cmV0dXJuIHVuZGVmaW5lZDt9O30KLXJldHVybntfZGVjb3JhdGVUeXBlQmFzZWRFeHRlbnNpb25SZWdpc3RyeTpkZWNvcmF0ZVR5cGVCYXNlZEV4dGVuc2lvblJlZ2lzdHJ5fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y29uc3QgVVJMX1JFR0VYPS9eKGh0dHBzPzpcL1wvKHd3d1wuKT9bLWEtekEtWjAtOUA6JS5fXCt+Iz1dezIsMjU2fVwuW2Etel17Miw2fVxifGZpbGU6XC9cLykoWy1hLXpBLVowLTlAOiVfXCsufiM/Ji8vPV0qKSQvO2Z1bmN0aW9uIGRlZXBDb3B5KHZhbHVlKXtpZighKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSl7aWYodmFsdWU9PT11bmRlZmluZWR8fHZhbHVlPT09bnVsbClyZXR1cm4gdmFsdWU7aWYodHlwZW9mIHZhbHVlPT09J3N0cmluZycpcmV0dXJuIHZhbHVlLnN1YnN0cmluZygpO2lmKHR5cGVvZiB2YWx1ZT09PSdib29sZWFuJylyZXR1cm4gdmFsdWU7aWYodHlwZW9mIHZhbHVlPT09J251bWJlcicpcmV0dXJuIHZhbHVlO3Rocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkOiAnK3R5cGVvZiB2YWx1ZSk7fQotY29uc3Qgb2JqZWN0PXZhbHVlO2lmKG9iamVjdCBpbnN0YW5jZW9mIEFycmF5KXtjb25zdCByZXM9bmV3IEFycmF5KG9iamVjdC5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8b2JqZWN0Lmxlbmd0aDtpKyspe3Jlc1tpXT1kZWVwQ29weShvYmplY3RbaV0pO30KLXJldHVybiByZXM7fQotaWYob2JqZWN0Ll9fcHJvdG9fXyE9PU9iamVjdC5wcm90b3R5cGUpe3Rocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgY2xvbmUgc2ltcGxlIHR5cGVzJyk7fQotY29uc3QgcmVzPXt9O2Zvcihjb25zdCBrZXkgaW4gb2JqZWN0KXtyZXNba2V5XT1kZWVwQ29weShvYmplY3Rba2V5XSk7fQotcmV0dXJuIHJlczt9Ci1mdW5jdGlvbiBub3JtYWxpemVFeGNlcHRpb24oZSl7aWYoZT09PXVuZGVmaW5lZHx8ZT09PW51bGwpe3JldHVybnt0eXBlTmFtZTonVW5kZWZpbmVkRXJyb3InLG1lc3NhZ2U6J1Vua25vd246IG51bGwgb3IgdW5kZWZpbmVkIGV4Y2VwdGlvbicsc3RhY2s6J1Vua25vd24nfTt9Ci1pZih0eXBlb2YoZSk9PT0nc3RyaW5nJyl7cmV0dXJue3R5cGVOYW1lOidTdHJpbmdFcnJvcicsbWVzc2FnZTplLHN0YWNrOltlXX07fQotbGV0IHR5cGVOYW1lO2lmKGUubmFtZSl7dHlwZU5hbWU9ZS5uYW1lO31lbHNlIGlmKGUuY29uc3RydWN0b3Ipe2lmKGUuY29uc3RydWN0b3IubmFtZSl7dHlwZU5hbWU9ZS5jb25zdHJ1Y3Rvci5uYW1lO31lbHNle3R5cGVOYW1lPSdBbm9ueW1vdXNFcnJvcic7fX1lbHNle3R5cGVOYW1lPSdFcnJvcldpdGhOb0NvbnN0cnVjdG9yJzt9Ci1jb25zdCBtc2c9ZS5tZXNzYWdlP2UubWVzc2FnZTonVW5rbm93bic7cmV0dXJue3R5cGVOYW1lLG1lc3NhZ2U6bXNnLHN0YWNrOmUuc3RhY2s/ZS5zdGFjazpbbXNnXX07fQotZnVuY3Rpb24gc3RhY2tUcmFjZUFzU3RyaW5nKCl7cmV0dXJuIG5ldyBFcnJvcigpLnN0YWNrKycnO30KLWZ1bmN0aW9uIHN0YWNrVHJhY2UoKXtsZXQgc3RhY2s9c3RhY2tUcmFjZUFzU3RyaW5nKCk7c3RhY2s9c3RhY2suc3BsaXQoJ1xuJyk7cmV0dXJuIHN0YWNrLnNsaWNlKDIpO30KLWZ1bmN0aW9uIGdldFVzaW5nUGF0aChwYXRoLGZyb21EaWN0KXtjb25zdCBwYXJ0cz1wYXRoLnNwbGl0KCcuJyk7bGV0IGN1cj1mcm9tRGljdDtmb3IobGV0IHBhcnQ7cGFydHMubGVuZ3RoJiYocGFydD1wYXJ0cy5zaGlmdCgpKTspe2lmKCFwYXJ0cy5sZW5ndGgpe3JldHVybiBjdXJbcGFydF07fWVsc2UgaWYocGFydCBpbiBjdXIpe2N1cj1jdXJbcGFydF07fWVsc2V7cmV0dXJuIHVuZGVmaW5lZDt9fQotcmV0dXJuIHVuZGVmaW5lZDt9Ci1mdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpe3JldHVybiBkYXRlLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgnVCcsJyAnKS5zbGljZSgwLDE5KTt9Ci1mdW5jdGlvbiBudW1iZXJUb0pzb24obil7aWYoaXNOYU4obikpcmV0dXJuJ05hTic7aWYobj09PUluZmluaXR5KXJldHVybidJbmZpbml0eSc7aWYobj09PS1JbmZpbml0eSlyZXR1cm4nLUluZmluaXR5JztyZXR1cm4gbjt9Ci1mdW5jdGlvbiBudW1iZXJGcm9tSnNvbihuKXtpZihuPT09J05hTid8fG49PT1udWxsKXJldHVybiBOYU47aWYobj09PSdJbmZpbml0eScpcmV0dXJuIEluZmluaXR5O2lmKG49PT0nLUluZmluaXR5JylyZXR1cm4tSW5maW5pdHk7cmV0dXJuIG47fQotZnVuY3Rpb24gcnVuTGVuZ3RoRW5jb2RpbmcoYXJ5KXtjb25zdCBlbmNvZGVkQXJyYXk9W107Zm9yKGNvbnN0IGVsZW1lbnQgb2YgYXJ5KXtpZihlbmNvZGVkQXJyYXkubGVuZ3RoPT09MHx8ZW5jb2RlZEFycmF5W2VuY29kZWRBcnJheS5sZW5ndGgtMV0udmFsdWUhPT1lbGVtZW50KXtlbmNvZGVkQXJyYXkucHVzaCh7dmFsdWU6ZWxlbWVudCxjb3VudDoxLH0pO31lbHNle2VuY29kZWRBcnJheVtlbmNvZGVkQXJyYXkubGVuZ3RoLTFdLmNvdW50Kz0xO319Ci1yZXR1cm4gZW5jb2RlZEFycmF5O30KLWZ1bmN0aW9uIGlzVXJsKHMpe3JldHVybiB0eXBlb2Yocyk9PT0nc3RyaW5nJyYmcy5tYXRjaChVUkxfUkVHRVgpIT09bnVsbDt9Ci1mdW5jdGlvbiBnZXRPbmx5RWxlbWVudChpdGVyYWJsZSl7Y29uc3QgaXRlcmF0b3I9aXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO2NvbnN0IGZpcnN0SXRlcmF0aW9uPWl0ZXJhdG9yLm5leHQoKTtpZihmaXJzdEl0ZXJhdGlvbi5kb25lKXt0aHJvdyBuZXcgRXJyb3IoJ2dldE9ubHlFbGVtZW50IHdhcyBwYXNzZWQgYW4gZW1wdHkgaXRlcmFibGUuJyk7fQotY29uc3Qgc2Vjb25kSXRlcmF0aW9uPWl0ZXJhdG9yLm5leHQoKTtpZighc2Vjb25kSXRlcmF0aW9uLmRvbmUpe3Rocm93IG5ldyBFcnJvcignZ2V0T25seUVsZW1lbnQgd2FzIHBhc3NlZCBhbiBpdGVyYWJsZSB3aXRoIG11bHRpcGxlIGVsZW1lbnRzLicpO30KLXJldHVybiBmaXJzdEl0ZXJhdGlvbi52YWx1ZTt9Ci1mdW5jdGlvbiBnZXRGaXJzdEVsZW1lbnQoaXRlcmFibGUpe2NvbnN0IGl0ZXJhdG9yPWl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtjb25zdCByZXN1bHQ9aXRlcmF0b3IubmV4dCgpO2lmKHJlc3VsdC5kb25lKXt0aHJvdyBuZXcgRXJyb3IoJ2dldEZpcnN0RWxlbWVudCB3YXMgcGFzc2VkIGFuIGVtcHR5IGl0ZXJhYmxlLicpO30KLXJldHVybiByZXN1bHQudmFsdWU7fQotZnVuY3Rpb24gY29tcGFyZUFycmF5cyh4LHksZWxlbWVudENtcCl7Y29uc3QgbWluTGVuZ3RoPU1hdGgubWluKHgubGVuZ3RoLHkubGVuZ3RoKTtsZXQgaTtmb3IoaT0wO2k8bWluTGVuZ3RoO2krKyl7Y29uc3QgdG1wPWVsZW1lbnRDbXAoeFtpXSx5W2ldKTtpZih0bXApcmV0dXJuIHRtcDt9Ci1pZih4Lmxlbmd0aD09PXkubGVuZ3RoKXJldHVybiAwO2lmKHhbaV09PT11bmRlZmluZWQpcmV0dXJuLTE7cmV0dXJuIDE7fQotZnVuY3Rpb24gZ3JvdXBJbnRvTWFwKGFyeSxjYWxsYmFjayxvcHRfdGhpcyxvcHRfYXJyYXlDb25zdHJ1Y3Rvcil7Y29uc3QgYXJyYXlDb25zdHJ1Y3Rvcj1vcHRfYXJyYXlDb25zdHJ1Y3Rvcnx8QXJyYXk7Y29uc3QgcmVzdWx0cz1uZXcgTWFwKCk7Zm9yKGNvbnN0IGVsZW1lbnQgb2YgYXJ5KXtjb25zdCBrZXk9Y2FsbGJhY2suY2FsbChvcHRfdGhpcyxlbGVtZW50KTtsZXQgaXRlbXM9cmVzdWx0cy5nZXQoa2V5KTtpZihpdGVtcz09PXVuZGVmaW5lZCl7aXRlbXM9bmV3IGFycmF5Q29uc3RydWN0b3IoKTtyZXN1bHRzLnNldChrZXksaXRlbXMpO30KLWl0ZW1zLnB1c2goZWxlbWVudCk7fQotcmV0dXJuIHJlc3VsdHM7fQotZnVuY3Rpb24gaW5QbGFjZUZpbHRlcihhcnJheSxwcmVkaWNhdGUsb3B0X3RoaXMpe29wdF90aGlzPW9wdF90aGlzfHx0aGlzO2xldCBuZXh0UG9zaXRpb249MDtmb3IobGV0IGk9MDtpPGFycmF5Lmxlbmd0aDtpKyspe2lmKCFwcmVkaWNhdGUuY2FsbChvcHRfdGhpcyxhcnJheVtpXSxpKSljb250aW51ZTtpZihuZXh0UG9zaXRpb248aSl7YXJyYXlbbmV4dFBvc2l0aW9uXT1hcnJheVtpXTt9Ci1uZXh0UG9zaXRpb24rKzt9Ci1pZihuZXh0UG9zaXRpb248YXJyYXkubGVuZ3RoKXthcnJheS5sZW5ndGg9bmV4dFBvc2l0aW9uO319Ci1mdW5jdGlvbiBpbnZlcnRBcnJheU9mRGljdHMoYXJyYXksb3B0X2RpY3RHZXR0ZXIsb3B0X3RoaXMpe29wdF90aGlzPW9wdF90aGlzfHx0aGlzO2NvbnN0IHJlc3VsdD17fTtmb3IobGV0IGk9MDtpPGFycmF5Lmxlbmd0aDtpKyspe2NvbnN0IGl0ZW09YXJyYXlbaV07aWYoaXRlbT09PXVuZGVmaW5lZCljb250aW51ZTtjb25zdCBkaWN0PW9wdF9kaWN0R2V0dGVyP29wdF9kaWN0R2V0dGVyLmNhbGwob3B0X3RoaXMsaXRlbSk6aXRlbTtpZihkaWN0PT09dW5kZWZpbmVkKWNvbnRpbnVlO2Zvcihjb25zdCBrZXkgaW4gZGljdCl7bGV0IHZhbHVlTGlzdD1yZXN1bHRba2V5XTtpZih2YWx1ZUxpc3Q9PT11bmRlZmluZWQpe3Jlc3VsdFtrZXldPXZhbHVlTGlzdD1uZXcgQXJyYXkoYXJyYXkubGVuZ3RoKTt9Ci12YWx1ZUxpc3RbaV09ZGljdFtrZXldO319Ci1yZXR1cm4gcmVzdWx0O30KLWZ1bmN0aW9uIHNldHNFcXVhbChhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIFNldCl8fCEoYiBpbnN0YW5jZW9mIFNldCkpcmV0dXJuIGZhbHNlO2lmKGEuc2l6ZSE9PWIuc2l6ZSlyZXR1cm4gZmFsc2U7Zm9yKGNvbnN0IHggb2YgYSl7aWYoIWIuaGFzKHgpKXJldHVybiBmYWxzZTt9Ci1yZXR1cm4gdHJ1ZTt9Ci1mdW5jdGlvbiBmaW5kTG93SW5kZXhJblNvcnRlZEFycmF5KGFyeSxtYXBGbixsb1ZhbCl7aWYoYXJ5Lmxlbmd0aD09PTApcmV0dXJuIDE7bGV0IGxvdz0wO2xldCBoaWdoPWFyeS5sZW5ndGgtMTtsZXQgaTtsZXQgY29tcGFyaXNvbjtsZXQgaGl0UG9zPS0xO3doaWxlKGxvdzw9aGlnaCl7aT1NYXRoLmZsb29yKChsb3craGlnaCkvMik7Y29tcGFyaXNvbj1tYXBGbihhcnlbaV0pLWxvVmFsO2lmKGNvbXBhcmlzb248MCl7bG93PWkrMTtjb250aW51ZTt9ZWxzZSBpZihjb21wYXJpc29uPjApe2hpZ2g9aS0xO2NvbnRpbnVlO31lbHNle2hpdFBvcz1pO2hpZ2g9aS0xO319Ci1yZXR1cm4gaGl0UG9zIT09LTE/aGl0UG9zOmxvdzt9Ci1mdW5jdGlvbiBmaW5kSW5kZXhJblNvcnRlZEludGVydmFscyhhcnksbWFwTG9GbixtYXBXaWR0aEZuLGxvVmFsKXtjb25zdCBmaXJzdD1maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KGFyeSxtYXBMb0ZuLGxvVmFsKTtpZihmaXJzdD09PTApe2lmKGxvVmFsPj1tYXBMb0ZuKGFyeVswXSkmJmxvVmFsPG1hcExvRm4oYXJ5WzBdKSttYXBXaWR0aEZuKGFyeVswXSwwKSl7cmV0dXJuIDA7fQotcmV0dXJuLTE7fQotaWYoZmlyc3Q8YXJ5Lmxlbmd0aCl7aWYobG9WYWw+PW1hcExvRm4oYXJ5W2ZpcnN0XSkmJmxvVmFsPG1hcExvRm4oYXJ5W2ZpcnN0XSkrbWFwV2lkdGhGbihhcnlbZmlyc3RdLGZpcnN0KSl7cmV0dXJuIGZpcnN0O30KLWlmKGxvVmFsPj1tYXBMb0ZuKGFyeVtmaXJzdC0xXSkmJmxvVmFsPG1hcExvRm4oYXJ5W2ZpcnN0LTFdKSsKLW1hcFdpZHRoRm4oYXJ5W2ZpcnN0LTFdLGZpcnN0LTEpKXtyZXR1cm4gZmlyc3QtMTt9Ci1yZXR1cm4gYXJ5Lmxlbmd0aDt9Ci1pZihmaXJzdD09PWFyeS5sZW5ndGgpe2lmKGxvVmFsPj1tYXBMb0ZuKGFyeVtmaXJzdC0xXSkmJmxvVmFsPG1hcExvRm4oYXJ5W2ZpcnN0LTFdKSsKLW1hcFdpZHRoRm4oYXJ5W2ZpcnN0LTFdLGZpcnN0LTEpKXtyZXR1cm4gZmlyc3QtMTt9Ci1yZXR1cm4gYXJ5Lmxlbmd0aDt9Ci1yZXR1cm4gYXJ5Lmxlbmd0aDt9Ci1mdW5jdGlvbiBmaW5kSW5kZXhJblNvcnRlZENsb3NlZEludGVydmFscyhhcnksbWFwTG9GbixtYXBIaUZuLHZhbCl7Y29uc3QgaT1maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KGFyeSxtYXBMb0ZuLHZhbCk7aWYoaT09PTApe2lmKHZhbD49bWFwTG9GbihhcnlbMF0sMCkmJnZhbDw9bWFwSGlGbihhcnlbMF0sMCkpe3JldHVybiAwO30KLXJldHVybi0xO30KLWlmKGk8YXJ5Lmxlbmd0aCl7aWYodmFsPj1tYXBMb0ZuKGFyeVtpLTFdLGktMSkmJnZhbDw9bWFwSGlGbihhcnlbaS0xXSxpLTEpKXtyZXR1cm4gaS0xO30KLWlmKHZhbD49bWFwTG9GbihhcnlbaV0saSkmJnZhbDw9bWFwSGlGbihhcnlbaV0saSkpe3JldHVybiBpO30KLXJldHVybiBhcnkubGVuZ3RoO30KLWlmKGk9PT1hcnkubGVuZ3RoKXtpZih2YWw+PW1hcExvRm4oYXJ5W2ktMV0saS0xKSYmdmFsPD1tYXBIaUZuKGFyeVtpLTFdLGktMSkpe3JldHVybiBpLTE7fQotcmV0dXJuIGFyeS5sZW5ndGg7fQotcmV0dXJuIGFyeS5sZW5ndGg7fQotZnVuY3Rpb24gaXRlcmF0ZU92ZXJJbnRlcnNlY3RpbmdJbnRlcnZhbHMoYXJ5LG1hcExvRm4sbWFwV2lkdGhGbixsb1ZhbCxoaVZhbCxjYil7aWYoYXJ5Lmxlbmd0aD09PTApcmV0dXJuO2lmKGxvVmFsPmhpVmFsKXJldHVybjtsZXQgaT1maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KGFyeSxtYXBMb0ZuLGxvVmFsKTtpZihpPT09LTEpe3JldHVybjt9Ci1pZihpPjApe2NvbnN0IGhpPW1hcExvRm4oYXJ5W2ktMV0pK21hcFdpZHRoRm4oYXJ5W2ktMV0saS0xKTtpZihoaT49bG9WYWwpe2NiKGFyeVtpLTFdLGktMSk7fX0KLWlmKGk9PT1hcnkubGVuZ3RoKXtyZXR1cm47fQotZm9yKGxldCBuPWFyeS5sZW5ndGg7aTxuO2krKyl7Y29uc3QgbG89bWFwTG9GbihhcnlbaV0pO2lmKGxvPj1oaVZhbClicmVhaztjYihhcnlbaV0saSk7fX0KLWZ1bmN0aW9uIGZpbmRDbG9zZXN0RWxlbWVudEluU29ydGVkQXJyYXkoYXJ5LG1hcEZuLHZhbCxtYXhEaWZmKXtpZihhcnkubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtsZXQgYWZ0SWR4PWZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkoYXJ5LG1hcEZuLHZhbCk7Y29uc3QgYmVmSWR4PWFmdElkeD4wP2FmdElkeC0xOjA7aWYoYWZ0SWR4PT09YXJ5Lmxlbmd0aClhZnRJZHgtPTE7Y29uc3QgYmVmRGlmZj1NYXRoLmFicyh2YWwtbWFwRm4oYXJ5W2JlZklkeF0pKTtjb25zdCBhZnREaWZmPU1hdGguYWJzKHZhbC1tYXBGbihhcnlbYWZ0SWR4XSkpO2lmKGJlZkRpZmY+bWF4RGlmZiYmYWZ0RGlmZj5tYXhEaWZmKXJldHVybiBudWxsO2NvbnN0IGlkeD1iZWZEaWZmPGFmdERpZmY/YmVmSWR4OmFmdElkeDtyZXR1cm4gYXJ5W2lkeF07fQotZnVuY3Rpb24gZmluZENsb3Nlc3RJbnRlcnZhbEluU29ydGVkSW50ZXJ2YWxzKGFyeSxtYXBMb0ZuLG1hcEhpRm4sdmFsLG1heERpZmYpe2lmKGFyeS5sZW5ndGg9PT0wKXJldHVybiBudWxsO2xldCBpZHg9ZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheShhcnksbWFwTG9Gbix2YWwpO2lmKGlkeD4wKWlkeC09MTtjb25zdCBoaUludD1hcnlbaWR4XTtsZXQgbG9JbnQ9aGlJbnQ7aWYodmFsPm1hcEhpRm4oaGlJbnQpJiZpZHgrMTxhcnkubGVuZ3RoKXtsb0ludD1hcnlbaWR4KzFdO30KLWNvbnN0IGxvRGlmZj1NYXRoLmFicyh2YWwtbWFwTG9Gbihsb0ludCkpO2NvbnN0IGhpRGlmZj1NYXRoLmFicyh2YWwtbWFwSGlGbihoaUludCkpO2lmKGxvRGlmZj5tYXhEaWZmJiZoaURpZmY+bWF4RGlmZilyZXR1cm4gbnVsbDtpZihsb0RpZmY8aGlEaWZmKXJldHVybiBsb0ludDtyZXR1cm4gaGlJbnQ7fQotZnVuY3Rpb24gZmluZEZpcnN0VHJ1ZUluZGV4SW5Tb3J0ZWRBcnJheShhcnJheSx0ZXN0KXtsZXQgaTA9MDtsZXQgaTE9YXJyYXkubGVuZ3RoO3doaWxlKGkwPGkxKXtjb25zdCBpPU1hdGgudHJ1bmMoKGkwK2kxKS8yKTtpZih0ZXN0KGFycmF5W2ldKSl7aTE9aTt9ZWxzZXtpMD1pKzE7fX0KLXJldHVybiBpMTt9Ci1yZXR1cm57Y29tcGFyZUFycmF5cyxkZWVwQ29weSxmaW5kQ2xvc2VzdEVsZW1lbnRJblNvcnRlZEFycmF5LGZpbmRDbG9zZXN0SW50ZXJ2YWxJblNvcnRlZEludGVydmFscyxmaW5kRmlyc3RUcnVlSW5kZXhJblNvcnRlZEFycmF5LGZpbmRJbmRleEluU29ydGVkQ2xvc2VkSW50ZXJ2YWxzLGZpbmRJbmRleEluU29ydGVkSW50ZXJ2YWxzLGZpbmRMb3dJbmRleEluU29ydGVkQXJyYXksZm9ybWF0RGF0ZSxnZXRGaXJzdEVsZW1lbnQsZ2V0T25seUVsZW1lbnQsZ2V0VXNpbmdQYXRoLGdyb3VwSW50b01hcCxpblBsYWNlRmlsdGVyLGludmVydEFycmF5T2ZEaWN0cyxpc1VybCxpdGVyYXRlT3ZlckludGVyc2VjdGluZ0ludGVydmFscyxub3JtYWxpemVFeGNlcHRpb24sbnVtYmVyRnJvbUpzb24sbnVtYmVyVG9Kc29uLHJ1bkxlbmd0aEVuY29kaW5nLHNldHNFcXVhbCxzdGFja1RyYWNlLHN0YWNrVHJhY2VBc1N0cmluZyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBkZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KHJlZ2lzdHJ5LHJlZ2lzdHJ5T3B0aW9ucyl7aWYocmVnaXN0cnkucmVnaXN0ZXIpe3Rocm93IG5ldyBFcnJvcignQWxyZWFkeSBoYXMgcmVnaXN0cnknKTt9Ci1yZWdpc3RyeU9wdGlvbnMuZnJlZXplKCk7aWYocmVnaXN0cnlPcHRpb25zLm1vZGU9PT10ci5iLkJBU0lDX1JFR0lTVFJZX01PREUpe3RyLmIuX2RlY29yYXRlQmFzaWNFeHRlbnNpb25SZWdpc3RyeShyZWdpc3RyeSxyZWdpc3RyeU9wdGlvbnMpO31lbHNlIGlmKHJlZ2lzdHJ5T3B0aW9ucy5tb2RlPT09dHIuYi5UWVBFX0JBU0VEX1JFR0lTVFJZX01PREUpe3RyLmIuX2RlY29yYXRlVHlwZUJhc2VkRXh0ZW5zaW9uUmVnaXN0cnkocmVnaXN0cnkscmVnaXN0cnlPcHRpb25zKTt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBtb2RlJyk7fQotaWYocmVnaXN0cnkuYWRkRXZlbnRMaXN0ZW5lcj09PXVuZGVmaW5lZCl7dHIuYi5FdmVudFRhcmdldC5kZWNvcmF0ZShyZWdpc3RyeSk7fX0KLXJldHVybntkZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5pbXBvcnRlcicsZnVuY3Rpb24oKXtmdW5jdGlvbiBJbXBvcnRlcigpe30KLUltcG9ydGVyLnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdC5wcm90b3R5cGUsZ2V0IGltcG9ydGVyTmFtZSgpe3JldHVybidJbXBvcnRlcic7fSxpc1RyYWNlRGF0YUNvbnRhaW5lcigpe3JldHVybiBmYWxzZTt9LGV4dHJhY3RTdWJ0cmFjZXMoKXtyZXR1cm5bXTt9LGltcG9ydENsb2NrU3luY01hcmtlcnMoKXt9LGltcG9ydEV2ZW50cygpe30saW1wb3J0U2FtcGxlRGF0YSgpe30sZmluYWxpemVJbXBvcnQoKXt9fTtjb25zdCBvcHRpb25zPW5ldyB0ci5iLkV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucyh0ci5iLkJBU0lDX1JFR0lTVFJZX01PREUpO29wdGlvbnMuZGVmYXVsdE1ldGFkYXRhPXt9O29wdGlvbnMubWFuZGF0b3J5QmFzZUNsYXNzPUltcG9ydGVyO3RyLmIuZGVjb3JhdGVFeHRlbnNpb25SZWdpc3RyeShJbXBvcnRlcixvcHRpb25zKTtJbXBvcnRlci5maW5kSW1wb3J0ZXJGb3I9ZnVuY3Rpb24oZXZlbnREYXRhKXtjb25zdCB0eXBlSW5mbz1JbXBvcnRlci5maW5kVHlwZUluZm9NYXRjaGluZyhmdW5jdGlvbih0aSl7cmV0dXJuIHRpLmNvbnN0cnVjdG9yLmNhbkltcG9ydChldmVudERhdGEpO30pO2lmKHR5cGVJbmZvKXtyZXR1cm4gdHlwZUluZm8uY29uc3RydWN0b3I7fQotcmV0dXJuIHVuZGVmaW5lZDt9O3JldHVybntJbXBvcnRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5nY2xvdWRfdHJhY2UnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gR2Nsb3VkVHJhY2VJbXBvcnRlcihtb2RlbCxldmVudERhdGEpe3RoaXMuaW1wb3J0UHJpb3JpdHk9Mjt0aGlzLmV2ZW50RGF0YV89ZXZlbnREYXRhO30KLUdjbG91ZFRyYWNlSW1wb3J0ZXIuY2FuSW1wb3J0PWZ1bmN0aW9uKGV2ZW50RGF0YSl7aWYodHlwZW9mKGV2ZW50RGF0YSkhPT0nc3RyaW5nJyYmIShldmVudERhdGEgaW5zdGFuY2VvZiBTdHJpbmcpKXtyZXR1cm4gZmFsc2U7fQotY29uc3Qgbm9ybWFsaXplZEV2ZW50RGF0YT1ldmVudERhdGEuc2xpY2UoMCwyMCkucmVwbGFjZSgvXHMvZywnJyk7aWYobm9ybWFsaXplZEV2ZW50RGF0YS5sZW5ndGg8MTQpcmV0dXJuIGZhbHNlO3JldHVybiBub3JtYWxpemVkRXZlbnREYXRhLnNsaWNlKDAsMTQpPT09J3sicHJvamVjdElkIjoiJzt9O0djbG91ZFRyYWNlSW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucHJvdG90eXBlLGdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nR2Nsb3VkVHJhY2VJbXBvcnRlcic7fSxleHRyYWN0U3VidHJhY2VzKCl7Y29uc3QgdHJhY2VFdmVudHM9dGhpcy5jcmVhdGVFdmVudHNGb3JUcmFjZSgpO3JldHVybiB0cmFjZUV2ZW50cz9bdHJhY2VFdmVudHNdOltdO30sY3JlYXRlRXZlbnRzRm9yVHJhY2UoKXtjb25zdCBldmVudHM9W107Y29uc3QgdHJhY2U9SlNPTi5wYXJzZSh0aGlzLmV2ZW50RGF0YV8pO2NvbnN0IHNwYW5MZW5ndGg9dHJhY2Uuc3BhbnMubGVuZ3RoO2ZvcihsZXQgaT0wO2k8c3Bhbkxlbmd0aDtpKyspe2V2ZW50cy5wdXNoKHRoaXMuY3JlYXRlRXZlbnRGb3JTcGFuKHRyYWNlLnRyYWNlSWQsdHJhY2Uuc3BhbnNbaV0pKTt9Ci1yZXR1cm57J3RyYWNlRXZlbnRzJzpldmVudHN9O30sY3JlYXRlRXZlbnRGb3JTcGFuKHRyYWNlSWQsc3Bhbil7bGV0IG5ld0FyZ3M9e307aWYoc3Bhbi5sYWJlbHMpe25ld0FyZ3M9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzcGFuLmxhYmVscykpO30KLW5ld0FyZ3NbJ1NwYW4gSUQnXT1zcGFuLnNwYW5JZDtuZXdBcmdzWydTdGFydCBUaW1lJ109c3Bhbi5zdGFydFRpbWU7bmV3QXJnc1snRW5kIFRpbWUnXT1zcGFuLmVuZFRpbWU7aWYoc3Bhbi5wYXJlbnRTcGFuSWQpe25ld0FyZ3NbJ1BhcmVudCBTcGFuIElEJ109c3Bhbi5wYXJlbnRTcGFuSWQ7fQotcmV0dXJue25hbWU6c3Bhbi5uYW1lLGFyZ3M6bmV3QXJncyxwaWQ6dHJhY2VJZCx0czpEYXRlLnBhcnNlKHNwYW4uc3RhcnRUaW1lKSoxMDAwLGR1cjooRGF0ZS5wYXJzZShzcGFuLmVuZFRpbWUpLURhdGUucGFyc2Uoc3Bhbi5zdGFydFRpbWUpKSoxMDAwLGNhdDondHJhY2VzcGFuJyx0aWQ6dHJhY2VJZCxwaDonWCd9O319O3RyLmltcG9ydGVyLkltcG9ydGVyLnJlZ2lzdGVyKEdjbG91ZFRyYWNlSW1wb3J0ZXIpO3JldHVybntHY2xvdWRUcmFjZUltcG9ydGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iLm1hdGgnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gY29udmVydEV2ZW50c1RvUmFuZ2VzKGV2ZW50cyl7cmV0dXJuIGV2ZW50cy5tYXAoZnVuY3Rpb24oZXZlbnQpe3JldHVybiB0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoZXZlbnQuc3RhcnQsZXZlbnQuZW5kKTt9KTt9Ci1mdW5jdGlvbiBtZXJnZVJhbmdlcyhpblJhbmdlcyxtZXJnZVRocmVzaG9sZCxtZXJnZUZ1bmN0aW9uKXtjb25zdCByZW1haW5pbmdFdmVudHM9aW5SYW5nZXMuc2xpY2UoKTtyZW1haW5pbmdFdmVudHMuc29ydChmdW5jdGlvbih4LHkpe3JldHVybiB4Lm1pbi15Lm1pbjt9KTtpZihyZW1haW5pbmdFdmVudHMubGVuZ3RoPD0xKXtjb25zdCBtZXJnZWQ9W107aWYocmVtYWluaW5nRXZlbnRzLmxlbmd0aD09PTEpe21lcmdlZC5wdXNoKG1lcmdlRnVuY3Rpb24ocmVtYWluaW5nRXZlbnRzKSk7fQotcmV0dXJuIG1lcmdlZDt9Ci1jb25zdCBtZXJnZWRFdmVudHM9W107bGV0IGN1cnJlbnRNZXJnZUJ1ZmZlcj1bXTtsZXQgcmlnaHRFZGdlO2Z1bmN0aW9uIGJlZ2luTWVyZ2luZygpe2N1cnJlbnRNZXJnZUJ1ZmZlci5wdXNoKHJlbWFpbmluZ0V2ZW50c1swXSk7cmVtYWluaW5nRXZlbnRzLnNwbGljZSgwLDEpO3JpZ2h0RWRnZT1jdXJyZW50TWVyZ2VCdWZmZXJbMF0ubWF4O30KLWZ1bmN0aW9uIGZsdXNoQ3VycmVudE1lcmdlQnVmZmVyKCl7aWYoY3VycmVudE1lcmdlQnVmZmVyLmxlbmd0aD09PTApcmV0dXJuO21lcmdlZEV2ZW50cy5wdXNoKG1lcmdlRnVuY3Rpb24oY3VycmVudE1lcmdlQnVmZmVyKSk7Y3VycmVudE1lcmdlQnVmZmVyPVtdO2lmKHJlbWFpbmluZ0V2ZW50cy5sZW5ndGghPT0wKWJlZ2luTWVyZ2luZygpO30KLWJlZ2luTWVyZ2luZygpO3doaWxlKHJlbWFpbmluZ0V2ZW50cy5sZW5ndGgpe2NvbnN0IGN1cnJlbnRFdmVudD1yZW1haW5pbmdFdmVudHNbMF07Y29uc3QgZGlzdGFuY2VGcm9tUmlnaHRFZGdlPWN1cnJlbnRFdmVudC5taW4tcmlnaHRFZGdlO2lmKGRpc3RhbmNlRnJvbVJpZ2h0RWRnZTxtZXJnZVRocmVzaG9sZCl7cmlnaHRFZGdlPU1hdGgubWF4KHJpZ2h0RWRnZSxjdXJyZW50RXZlbnQubWF4KTtyZW1haW5pbmdFdmVudHMuc3BsaWNlKDAsMSk7Y3VycmVudE1lcmdlQnVmZmVyLnB1c2goY3VycmVudEV2ZW50KTtjb250aW51ZTt9Ci1mbHVzaEN1cnJlbnRNZXJnZUJ1ZmZlcigpO30KLWZsdXNoQ3VycmVudE1lcmdlQnVmZmVyKCk7cmV0dXJuIG1lcmdlZEV2ZW50czt9Ci1mdW5jdGlvbiBmaW5kRW1wdHlSYW5nZXNCZXR3ZWVuUmFuZ2VzKGluUmFuZ2VzLG9wdF90b3RhbFJhbmdlKXtpZihvcHRfdG90YWxSYW5nZSYmb3B0X3RvdGFsUmFuZ2UuaXNFbXB0eSlvcHRfdG90YWxSYW5nZT11bmRlZmluZWQ7Y29uc3QgZW1wdHlSYW5nZXM9W107aWYoIWluUmFuZ2VzLmxlbmd0aCl7aWYob3B0X3RvdGFsUmFuZ2UpZW1wdHlSYW5nZXMucHVzaChvcHRfdG90YWxSYW5nZSk7cmV0dXJuIGVtcHR5UmFuZ2VzO30KLWluUmFuZ2VzPWluUmFuZ2VzLnNsaWNlKCk7aW5SYW5nZXMuc29ydChmdW5jdGlvbih4LHkpe3JldHVybiB4Lm1pbi15Lm1pbjt9KTtpZihvcHRfdG90YWxSYW5nZSYmKG9wdF90b3RhbFJhbmdlLm1pbjxpblJhbmdlc1swXS5taW4pKXtlbXB0eVJhbmdlcy5wdXNoKHRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShvcHRfdG90YWxSYW5nZS5taW4saW5SYW5nZXNbMF0ubWluKSk7fQotaW5SYW5nZXMuZm9yRWFjaChmdW5jdGlvbihyYW5nZSxpbmRleCl7Zm9yKGxldCBvdGhlckluZGV4PTA7b3RoZXJJbmRleDxpblJhbmdlcy5sZW5ndGg7KytvdGhlckluZGV4KXtpZihpbmRleD09PW90aGVySW5kZXgpY29udGludWU7Y29uc3Qgb3RoZXI9aW5SYW5nZXNbb3RoZXJJbmRleF07aWYob3RoZXIubWluPnJhbmdlLm1heCl7ZW1wdHlSYW5nZXMucHVzaCh0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UocmFuZ2UubWF4LG90aGVyLm1pbikpO3JldHVybjt9Ci1pZihvdGhlci5tYXg+cmFuZ2UubWF4KXtyZXR1cm47fX0KLWlmKG9wdF90b3RhbFJhbmdlJiYocmFuZ2UubWF4PG9wdF90b3RhbFJhbmdlLm1heCkpe2VtcHR5UmFuZ2VzLnB1c2godHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHJhbmdlLm1heCxvcHRfdG90YWxSYW5nZS5tYXgpKTt9fSk7cmV0dXJuIGVtcHR5UmFuZ2VzO30KLXJldHVybntjb252ZXJ0RXZlbnRzVG9SYW5nZXMsZmluZEVtcHR5UmFuZ2VzQmV0d2VlblJhbmdlcyxtZXJnZVJhbmdlcyx9O30pOyFmdW5jdGlvbih0LG4pe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9bigpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUobik7ZWxzZXt2YXIgcj1uKCk7Zm9yKHZhciBhIGluIHIpKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzOnQpW2FdPXJbYV19fSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oYSl7aWYoclthXSlyZXR1cm4gclthXS5leHBvcnRzO3ZhciBlPXJbYV09e2V4cG9ydHM6e30saWQ6YSxsb2FkZWQ6ITF9O3JldHVybiB0W2FdLmNhbGwoZS5leHBvcnRzLGUsZS5leHBvcnRzLG4pLGUubG9hZGVkPSEwLGUuZXhwb3J0c312YXIgcj17fTtyZXR1cm4gbi5tPXQsbi5jPXIsbi5wPSIiLG4oMCl9KFtmdW5jdGlvbih0LG4scil7bi5nbE1hdHJpeD1yKDEpLG4ubWF0Mj1yKDIpLG4ubWF0MmQ9cigzKSxuLm1hdDM9cig0KSxuLm1hdDQ9cig1KSxuLnF1YXQ9cig2KSxuLnZlYzI9cig5KSxuLnZlYzM9cig3KSxuLnZlYzQ9cig4KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBhPXt9O2EuRVBTSUxPTj0xZS02LGEuQVJSQVlfVFlQRT0idW5kZWZpbmVkIiE9dHlwZW9mIEZsb2F0MzJBcnJheT9GbG9hdDMyQXJyYXk6QXJyYXksYS5SQU5ET009TWF0aC5yYW5kb20sYS5zZXRNYXRyaXhBcnJheVR5cGU9ZnVuY3Rpb24odCl7R0xNQVRfQVJSQVlfVFlQRT10fTt2YXIgZT1NYXRoLlBJLzE4MDthLnRvUmFkaWFuPWZ1bmN0aW9uKHQpe3JldHVybiB0KmV9LHQuZXhwb3J0cz1hfSxmdW5jdGlvbih0LG4scil7dmFyIGE9cigxKSxlPXt9O2UuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGEuQVJSQVlfVFlQRSg0KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0xLHR9LGUuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIG49bmV3IGEuQVJSQVlfVFlQRSg0KTtyZXR1cm4gblswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT10WzNdLG59LGUuY29weT1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPW5bMF0sdFsxXT1uWzFdLHRbMl09blsyXSx0WzNdPW5bM10sdH0sZS5pZGVudGl0eT1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0xLHR9LGUudHJhbnNwb3NlPWZ1bmN0aW9uKHQsbil7aWYodD09PW4pe3ZhciByPW5bMV07dFsxXT1uWzJdLHRbMl09cn1lbHNlIHRbMF09blswXSx0WzFdPW5bMl0sdFsyXT1uWzFdLHRbM109blszXTtyZXR1cm4gdH0sZS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLGE9blsxXSxlPW5bMl0sdT1uWzNdLG89cip1LWUqYTtyZXR1cm4gbz8obz0xL28sdFswXT11Km8sdFsxXT0tYSpvLHRbMl09LWUqbyx0WzNdPXIqbyx0KTpudWxsfSxlLmFkam9pbnQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdO3JldHVybiB0WzBdPW5bM10sdFsxXT0tblsxXSx0WzJdPS1uWzJdLHRbM109cix0fSxlLmRldGVybWluYW50PWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdKnRbM10tdFsyXSp0WzFdfSxlLm11bHRpcGx5PWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1uWzNdLGk9clswXSxjPXJbMV0sZj1yWzJdLHM9clszXTtyZXR1cm4gdFswXT1hKmkrdSpjLHRbMV09ZSppK28qYyx0WzJdPWEqZit1KnMsdFszXT1lKmYrbypzLHR9LGUubXVsPWUubXVsdGlwbHksZS5yb3RhdGU9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPW5bM10saT1NYXRoLnNpbihyKSxjPU1hdGguY29zKHIpO3JldHVybiB0WzBdPWEqYyt1KmksdFsxXT1lKmMrbyppLHRbMl09YSotaSt1KmMsdFszXT1lKi1pK28qYyx0fSxlLnNjYWxlPWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1uWzNdLGk9clswXSxjPXJbMV07cmV0dXJuIHRbMF09YSppLHRbMV09ZSppLHRbMl09dSpjLHRbM109bypjLHR9LGUuZnJvbVJvdGF0aW9uPWZ1bmN0aW9uKHQsbil7dmFyIHI9TWF0aC5zaW4obiksYT1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1hLHRbMV09cix0WzJdPS1yLHRbM109YSx0fSxlLmZyb21TY2FsaW5nPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09blswXSx0WzFdPTAsdFsyXT0wLHRbM109blsxXSx0fSxlLnN0cj1mdW5jdGlvbih0KXtyZXR1cm4ibWF0MigiK3RbMF0rIiwgIit0WzFdKyIsICIrdFsyXSsiLCAiK3RbM10rIikifSxlLmZyb2I9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0WzBdLDIpK01hdGgucG93KHRbMV0sMikrTWF0aC5wb3codFsyXSwyKStNYXRoLnBvdyh0WzNdLDIpKX0sZS5MRFU9ZnVuY3Rpb24odCxuLHIsYSl7cmV0dXJuIHRbMl09YVsyXS9hWzBdLHJbMF09YVswXSxyWzFdPWFbMV0sclszXT1hWzNdLXRbMl0qclsxXSxbdCxuLHJdfSx0LmV4cG9ydHM9ZX0sZnVuY3Rpb24odCxuLHIpe3ZhciBhPXIoMSksZT17fTtlLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBhLkFSUkFZX1RZUEUoNik7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0WzRdPTAsdFs1XT0wLHR9LGUuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIG49bmV3IGEuQVJSQVlfVFlQRSg2KTtyZXR1cm4gblswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT10WzNdLG5bNF09dFs0XSxuWzVdPXRbNV0sbn0sZS5jb3B5PWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09blswXSx0WzFdPW5bMV0sdFsyXT1uWzJdLHRbM109blszXSx0WzRdPW5bNF0sdFs1XT1uWzVdLHR9LGUuaWRlbnRpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0WzRdPTAsdFs1XT0wLHR9LGUuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXSxhPW5bMV0sZT1uWzJdLHU9blszXSxvPW5bNF0saT1uWzVdLGM9cip1LWEqZTtyZXR1cm4gYz8oYz0xL2MsdFswXT11KmMsdFsxXT0tYSpjLHRbMl09LWUqYyx0WzNdPXIqYyx0WzRdPShlKmktdSpvKSpjLHRbNV09KGEqby1yKmkpKmMsdCk6bnVsbH0sZS5kZXRlcm1pbmFudD1mdW5jdGlvbih0KXtyZXR1cm4gdFswXSp0WzNdLXRbMV0qdFsyXX0sZS5tdWx0aXBseT1mdW5jdGlvbih0LG4scil7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdLG89blszXSxpPW5bNF0sYz1uWzVdLGY9clswXSxzPXJbMV0saD1yWzJdLE09clszXSxsPXJbNF0sdj1yWzVdO3JldHVybiB0WzBdPWEqZit1KnMsdFsxXT1lKmYrbypzLHRbMl09YSpoK3UqTSx0WzNdPWUqaCtvKk0sdFs0XT1hKmwrdSp2K2ksdFs1XT1lKmwrbyp2K2MsdH0sZS5tdWw9ZS5tdWx0aXBseSxlLnJvdGF0ZT1mdW5jdGlvbih0LG4scil7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdLG89blszXSxpPW5bNF0sYz1uWzVdLGY9TWF0aC5zaW4ocikscz1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1hKnMrdSpmLHRbMV09ZSpzK28qZix0WzJdPWEqLWYrdSpzLHRbM109ZSotZitvKnMsdFs0XT1pLHRbNV09Yyx0fSxlLnNjYWxlPWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1uWzNdLGk9bls0XSxjPW5bNV0sZj1yWzBdLHM9clsxXTtyZXR1cm4gdFswXT1hKmYsdFsxXT1lKmYsdFsyXT11KnMsdFszXT1vKnMsdFs0XT1pLHRbNV09Yyx0fSxlLnRyYW5zbGF0ZT1mdW5jdGlvbih0LG4scil7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdLG89blszXSxpPW5bNF0sYz1uWzVdLGY9clswXSxzPXJbMV07cmV0dXJuIHRbMF09YSx0WzFdPWUsdFsyXT11LHRbM109byx0WzRdPWEqZit1KnMraSx0WzVdPWUqZitvKnMrYyx0fSxlLmZyb21Sb3RhdGlvbj1mdW5jdGlvbih0LG4pe3ZhciByPU1hdGguc2luKG4pLGE9TWF0aC5jb3Mobik7cmV0dXJuIHRbMF09YSx0WzFdPXIsdFsyXT0tcix0WzNdPWEsdFs0XT0wLHRbNV09MCx0fSxlLmZyb21TY2FsaW5nPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09blswXSx0WzFdPTAsdFsyXT0wLHRbM109blsxXSx0WzRdPTAsdFs1XT0wLHR9LGUuZnJvbVRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0WzRdPW5bMF0sdFs1XT1uWzFdLHR9LGUuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJtYXQyZCgiK3RbMF0rIiwgIit0WzFdKyIsICIrdFsyXSsiLCAiK3RbM10rIiwgIit0WzRdKyIsICIrdFs1XSsiKSJ9LGUuZnJvYj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHRbMF0sMikrTWF0aC5wb3codFsxXSwyKStNYXRoLnBvdyh0WzJdLDIpK01hdGgucG93KHRbM10sMikrTWF0aC5wb3codFs0XSwyKStNYXRoLnBvdyh0WzVdLDIpKzEpfSx0LmV4cG9ydHM9ZX0sZnVuY3Rpb24odCxuLHIpe3ZhciBhPXIoMSksZT17fTtlLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBhLkFSUkFZX1RZUEUoOSk7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGUuZnJvbU1hdDQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT1uWzBdLHRbMV09blsxXSx0WzJdPW5bMl0sdFszXT1uWzRdLHRbNF09bls1XSx0WzVdPW5bNl0sdFs2XT1uWzhdLHRbN109bls5XSx0WzhdPW5bMTBdLHR9LGUuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIG49bmV3IGEuQVJSQVlfVFlQRSg5KTtyZXR1cm4gblswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT10WzNdLG5bNF09dFs0XSxuWzVdPXRbNV0sbls2XT10WzZdLG5bN109dFs3XSxuWzhdPXRbOF0sbn0sZS5jb3B5PWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09blswXSx0WzFdPW5bMV0sdFsyXT1uWzJdLHRbM109blszXSx0WzRdPW5bNF0sdFs1XT1uWzVdLHRbNl09bls2XSx0WzddPW5bN10sdFs4XT1uWzhdLHR9LGUuaWRlbnRpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGUudHJhbnNwb3NlPWZ1bmN0aW9uKHQsbil7aWYodD09PW4pe3ZhciByPW5bMV0sYT1uWzJdLGU9bls1XTt0WzFdPW5bM10sdFsyXT1uWzZdLHRbM109cix0WzVdPW5bN10sdFs2XT1hLHRbN109ZX1lbHNlIHRbMF09blswXSx0WzFdPW5bM10sdFsyXT1uWzZdLHRbM109blsxXSx0WzRdPW5bNF0sdFs1XT1uWzddLHRbNl09blsyXSx0WzddPW5bNV0sdFs4XT1uWzhdO3JldHVybiB0fSxlLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciByPW5bMF0sYT1uWzFdLGU9blsyXSx1PW5bM10sbz1uWzRdLGk9bls1XSxjPW5bNl0sZj1uWzddLHM9bls4XSxoPXMqby1pKmYsTT0tcyp1K2kqYyxsPWYqdS1vKmMsdj1yKmgrYSpNK2UqbDtyZXR1cm4gdj8odj0xL3YsdFswXT1oKnYsdFsxXT0oLXMqYStlKmYpKnYsdFsyXT0oaSphLWUqbykqdix0WzNdPU0qdix0WzRdPShzKnItZSpjKSp2LHRbNV09KC1pKnIrZSp1KSp2LHRbNl09bCp2LHRbN109KC1mKnIrYSpjKSp2LHRbOF09KG8qci1hKnUpKnYsdCk6bnVsbH0sZS5hZGpvaW50PWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXSxhPW5bMV0sZT1uWzJdLHU9blszXSxvPW5bNF0saT1uWzVdLGM9bls2XSxmPW5bN10scz1uWzhdO3JldHVybiB0WzBdPW8qcy1pKmYsdFsxXT1lKmYtYSpzLHRbMl09YSppLWUqbyx0WzNdPWkqYy11KnMsdFs0XT1yKnMtZSpjLHRbNV09ZSp1LXIqaSx0WzZdPXUqZi1vKmMsdFs3XT1hKmMtcipmLHRbOF09cipvLWEqdSx0fSxlLmRldGVybWluYW50PWZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0scj10WzFdLGE9dFsyXSxlPXRbM10sdT10WzRdLG89dFs1XSxpPXRbNl0sYz10WzddLGY9dFs4XTtyZXR1cm4gbiooZip1LW8qYykrciooLWYqZStvKmkpK2EqKGMqZS11KmkpfSxlLm11bHRpcGx5PWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1uWzNdLGk9bls0XSxjPW5bNV0sZj1uWzZdLHM9bls3XSxoPW5bOF0sTT1yWzBdLGw9clsxXSx2PXJbMl0sbT1yWzNdLHA9cls0XSxkPXJbNV0sQT1yWzZdLFI9cls3XSx3PXJbOF07cmV0dXJuIHRbMF09TSphK2wqbyt2KmYsdFsxXT1NKmUrbCppK3Yqcyx0WzJdPU0qdStsKmMrdipoLHRbM109bSphK3AqbytkKmYsdFs0XT1tKmUrcCppK2Qqcyx0WzVdPW0qdStwKmMrZCpoLHRbNl09QSphK1Iqbyt3KmYsdFs3XT1BKmUrUippK3cqcyx0WzhdPUEqdStSKmMrdypoLHR9LGUubXVsPWUubXVsdGlwbHksZS50cmFuc2xhdGU9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPW5bM10saT1uWzRdLGM9bls1XSxmPW5bNl0scz1uWzddLGg9bls4XSxNPXJbMF0sbD1yWzFdO3JldHVybiB0WzBdPWEsdFsxXT1lLHRbMl09dSx0WzNdPW8sdFs0XT1pLHRbNV09Yyx0WzZdPU0qYStsKm8rZix0WzddPU0qZStsKmkrcyx0WzhdPU0qdStsKmMraCx0fSxlLnJvdGF0ZT1mdW5jdGlvbih0LG4scil7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdLG89blszXSxpPW5bNF0sYz1uWzVdLGY9bls2XSxzPW5bN10saD1uWzhdLE09TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1sKmErTSpvLHRbMV09bCplK00qaSx0WzJdPWwqdStNKmMsdFszXT1sKm8tTSphLHRbNF09bCppLU0qZSx0WzVdPWwqYy1NKnUsdFs2XT1mLHRbN109cyx0WzhdPWgsdH0sZS5zY2FsZT1mdW5jdGlvbih0LG4scil7dmFyIGE9clswXSxlPXJbMV07cmV0dXJuIHRbMF09YSpuWzBdLHRbMV09YSpuWzFdLHRbMl09YSpuWzJdLHRbM109ZSpuWzNdLHRbNF09ZSpuWzRdLHRbNV09ZSpuWzVdLHRbNl09bls2XSx0WzddPW5bN10sdFs4XT1uWzhdLHR9LGUuZnJvbVRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09blswXSx0WzddPW5bMV0sdFs4XT0xLHR9LGUuZnJvbVJvdGF0aW9uPWZ1bmN0aW9uKHQsbil7dmFyIHI9TWF0aC5zaW4obiksYT1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1hLHRbMV09cix0WzJdPTAsdFszXT0tcix0WzRdPWEsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGUuZnJvbVNjYWxpbmc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT1uWzBdLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09blsxXSx0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPTEsdH0sZS5mcm9tTWF0MmQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT1uWzBdLHRbMV09blsxXSx0WzJdPTAsdFszXT1uWzJdLHRbNF09blszXSx0WzVdPTAsdFs2XT1uWzRdLHRbN109bls1XSx0WzhdPTEsdH0sZS5mcm9tUXVhdD1mdW5jdGlvbih0LG4pe3ZhciByPW5bMF0sYT1uWzFdLGU9blsyXSx1PW5bM10sbz1yK3IsaT1hK2EsYz1lK2UsZj1yKm8scz1hKm8saD1hKmksTT1lKm8sbD1lKmksdj1lKmMsbT11Km8scD11KmksZD11KmM7cmV0dXJuIHRbMF09MS1oLXYsdFszXT1zLWQsdFs2XT1NK3AsdFsxXT1zK2QsdFs0XT0xLWYtdix0WzddPWwtbSx0WzJdPU0tcCx0WzVdPWwrbSx0WzhdPTEtZi1oLHR9LGUubm9ybWFsRnJvbU1hdDQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLGE9blsxXSxlPW5bMl0sdT1uWzNdLG89bls0XSxpPW5bNV0sYz1uWzZdLGY9bls3XSxzPW5bOF0saD1uWzldLE09blsxMF0sbD1uWzExXSx2PW5bMTJdLG09blsxM10scD1uWzE0XSxkPW5bMTVdLEE9cippLWEqbyxSPXIqYy1lKm8sdz1yKmYtdSpvLHE9YSpjLWUqaSxZPWEqZi11KmksZz1lKmYtdSpjLHk9cyptLWgqdix4PXMqcC1NKnYsUD1zKmQtbCp2LEU9aCpwLU0qbSxUPWgqZC1sKm0sYj1NKmQtbCpwLEQ9QSpiLVIqVCt3KkUrcSpQLVkqeCtnKnk7cmV0dXJuIEQ/KEQ9MS9ELHRbMF09KGkqYi1jKlQrZipFKSpELHRbMV09KGMqUC1vKmItZip4KSpELHRbMl09KG8qVC1pKlArZip5KSpELHRbM109KGUqVC1hKmItdSpFKSpELHRbNF09KHIqYi1lKlArdSp4KSpELHRbNV09KGEqUC1yKlQtdSp5KSpELHRbNl09KG0qZy1wKlkrZCpxKSpELHRbN109KHAqdy12KmctZCpSKSpELHRbOF09KHYqWS1tKncrZCpBKSpELHQpOm51bGx9LGUuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJtYXQzKCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIsICIrdFszXSsiLCAiK3RbNF0rIiwgIit0WzVdKyIsICIrdFs2XSsiLCAiK3RbN10rIiwgIit0WzhdKyIpIn0sZS5mcm9iPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codFswXSwyKStNYXRoLnBvdyh0WzFdLDIpK01hdGgucG93KHRbMl0sMikrTWF0aC5wb3codFszXSwyKStNYXRoLnBvdyh0WzRdLDIpK01hdGgucG93KHRbNV0sMikrTWF0aC5wb3codFs2XSwyKStNYXRoLnBvdyh0WzddLDIpK01hdGgucG93KHRbOF0sMikpfSx0LmV4cG9ydHM9ZX0sZnVuY3Rpb24odCxuLHIpe3ZhciBhPXIoMSksZT17fTtlLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBhLkFSUkFZX1RZUEUoMTYpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0sZS5jbG9uZT1mdW5jdGlvbih0KXt2YXIgbj1uZXcgYS5BUlJBWV9UWVBFKDE2KTtyZXR1cm4gblswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT10WzNdLG5bNF09dFs0XSxuWzVdPXRbNV0sbls2XT10WzZdLG5bN109dFs3XSxuWzhdPXRbOF0sbls5XT10WzldLG5bMTBdPXRbMTBdLG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59LGUuY29weT1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPW5bMF0sdFsxXT1uWzFdLHRbMl09blsyXSx0WzNdPW5bM10sdFs0XT1uWzRdLHRbNV09bls1XSx0WzZdPW5bNl0sdFs3XT1uWzddLHRbOF09bls4XSx0WzldPW5bOV0sdFsxMF09blsxMF0sdFsxMV09blsxMV0sdFsxMl09blsxMl0sdFsxM109blsxM10sdFsxNF09blsxNF0sdFsxNV09blsxNV0sdH0sZS5pZGVudGl0eT1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LGUudHJhbnNwb3NlPWZ1bmN0aW9uKHQsbil7aWYodD09PW4pe3ZhciByPW5bMV0sYT1uWzJdLGU9blszXSx1PW5bNl0sbz1uWzddLGk9blsxMV07dFsxXT1uWzRdLHRbMl09bls4XSx0WzNdPW5bMTJdLHRbNF09cix0WzZdPW5bOV0sdFs3XT1uWzEzXSx0WzhdPWEsdFs5XT11LHRbMTFdPW5bMTRdLHRbMTJdPWUsdFsxM109byx0WzE0XT1pfWVsc2UgdFswXT1uWzBdLHRbMV09bls0XSx0WzJdPW5bOF0sdFszXT1uWzEyXSx0WzRdPW5bMV0sdFs1XT1uWzVdLHRbNl09bls5XSx0WzddPW5bMTNdLHRbOF09blsyXSx0WzldPW5bNl0sdFsxMF09blsxMF0sdFsxMV09blsxNF0sdFsxMl09blszXSx0WzEzXT1uWzddLHRbMTRdPW5bMTFdLHRbMTVdPW5bMTVdO3JldHVybiB0fSxlLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciByPW5bMF0sYT1uWzFdLGU9blsyXSx1PW5bM10sbz1uWzRdLGk9bls1XSxjPW5bNl0sZj1uWzddLHM9bls4XSxoPW5bOV0sTT1uWzEwXSxsPW5bMTFdLHY9blsxMl0sbT1uWzEzXSxwPW5bMTRdLGQ9blsxNV0sQT1yKmktYSpvLFI9cipjLWUqbyx3PXIqZi11Km8scT1hKmMtZSppLFk9YSpmLXUqaSxnPWUqZi11KmMseT1zKm0taCp2LHg9cypwLU0qdixQPXMqZC1sKnYsRT1oKnAtTSptLFQ9aCpkLWwqbSxiPU0qZC1sKnAsRD1BKmItUipUK3cqRStxKlAtWSp4K2cqeTtyZXR1cm4gRD8oRD0xL0QsdFswXT0oaSpiLWMqVCtmKkUpKkQsdFsxXT0oZSpULWEqYi11KkUpKkQsdFsyXT0obSpnLXAqWStkKnEpKkQsdFszXT0oTSpZLWgqZy1sKnEpKkQsdFs0XT0oYypQLW8qYi1mKngpKkQsdFs1XT0ocipiLWUqUCt1KngpKkQsdFs2XT0ocCp3LXYqZy1kKlIpKkQsdFs3XT0ocypnLU0qdytsKlIpKkQsdFs4XT0obypULWkqUCtmKnkpKkQsdFs5XT0oYSpQLXIqVC11KnkpKkQsdFsxMF09KHYqWS1tKncrZCpBKSpELHRbMTFdPShoKnctcypZLWwqQSkqRCx0WzEyXT0oaSp4LW8qRS1jKnkpKkQsdFsxM109KHIqRS1hKngrZSp5KSpELHRbMTRdPShtKlItdipxLXAqQSkqRCx0WzE1XT0ocypxLWgqUitNKkEpKkQsdCk6bnVsbH0sZS5hZGpvaW50PWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXSxhPW5bMV0sZT1uWzJdLHU9blszXSxvPW5bNF0saT1uWzVdLGM9bls2XSxmPW5bN10scz1uWzhdLGg9bls5XSxNPW5bMTBdLGw9blsxMV0sdj1uWzEyXSxtPW5bMTNdLHA9blsxNF0sZD1uWzE1XTtyZXR1cm4gdFswXT1pKihNKmQtbCpwKS1oKihjKmQtZipwKSttKihjKmwtZipNKSx0WzFdPS0oYSooTSpkLWwqcCktaCooZSpkLXUqcCkrbSooZSpsLXUqTSkpLHRbMl09YSooYypkLWYqcCktaSooZSpkLXUqcCkrbSooZSpmLXUqYyksdFszXT0tKGEqKGMqbC1mKk0pLWkqKGUqbC11Kk0pK2gqKGUqZi11KmMpKSx0WzRdPS0obyooTSpkLWwqcCktcyooYypkLWYqcCkrdiooYypsLWYqTSkpLHRbNV09ciooTSpkLWwqcCktcyooZSpkLXUqcCkrdiooZSpsLXUqTSksdFs2XT0tKHIqKGMqZC1mKnApLW8qKGUqZC11KnApK3YqKGUqZi11KmMpKSx0WzddPXIqKGMqbC1mKk0pLW8qKGUqbC11Kk0pK3MqKGUqZi11KmMpLHRbOF09byooaCpkLWwqbSktcyooaSpkLWYqbSkrdiooaSpsLWYqaCksdFs5XT0tKHIqKGgqZC1sKm0pLXMqKGEqZC11Km0pK3YqKGEqbC11KmgpKSx0WzEwXT1yKihpKmQtZiptKS1vKihhKmQtdSptKSt2KihhKmYtdSppKSx0WzExXT0tKHIqKGkqbC1mKmgpLW8qKGEqbC11KmgpK3MqKGEqZi11KmkpKSx0WzEyXT0tKG8qKGgqcC1NKm0pLXMqKGkqcC1jKm0pK3YqKGkqTS1jKmgpKSx0WzEzXT1yKihoKnAtTSptKS1zKihhKnAtZSptKSt2KihhKk0tZSpoKSx0WzE0XT0tKHIqKGkqcC1jKm0pLW8qKGEqcC1lKm0pK3YqKGEqYy1lKmkpKSx0WzE1XT1yKihpKk0tYypoKS1vKihhKk0tZSpoKStzKihhKmMtZSppKSx0fSxlLmRldGVybWluYW50PWZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0scj10WzFdLGE9dFsyXSxlPXRbM10sdT10WzRdLG89dFs1XSxpPXRbNl0sYz10WzddLGY9dFs4XSxzPXRbOV0saD10WzEwXSxNPXRbMTFdLGw9dFsxMl0sdj10WzEzXSxtPXRbMTRdLHA9dFsxNV0sZD1uKm8tcip1LEE9bippLWEqdSxSPW4qYy1lKnUsdz1yKmktYSpvLHE9cipjLWUqbyxZPWEqYy1lKmksZz1mKnYtcypsLHk9ZiptLWgqbCx4PWYqcC1NKmwsUD1zKm0taCp2LEU9cypwLU0qdixUPWgqcC1NKm07cmV0dXJuIGQqVC1BKkUrUipQK3cqeC1xKnkrWSpnfSxlLm11bHRpcGx5PWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1uWzNdLGk9bls0XSxjPW5bNV0sZj1uWzZdLHM9bls3XSxoPW5bOF0sTT1uWzldLGw9blsxMF0sdj1uWzExXSxtPW5bMTJdLHA9blsxM10sZD1uWzE0XSxBPW5bMTVdLFI9clswXSx3PXJbMV0scT1yWzJdLFk9clszXTtyZXR1cm4gdFswXT1SKmErdyppK3EqaCtZKm0sdFsxXT1SKmUrdypjK3EqTStZKnAsdFsyXT1SKnUrdypmK3EqbCtZKmQsdFszXT1SKm8rdypzK3EqditZKkEsUj1yWzRdLHc9cls1XSxxPXJbNl0sWT1yWzddLHRbNF09UiphK3cqaStxKmgrWSptLHRbNV09UiplK3cqYytxKk0rWSpwLHRbNl09Uip1K3cqZitxKmwrWSpkLHRbN109UipvK3cqcytxKnYrWSpBLFI9cls4XSx3PXJbOV0scT1yWzEwXSxZPXJbMTFdLHRbOF09UiphK3cqaStxKmgrWSptLHRbOV09UiplK3cqYytxKk0rWSpwLHRbMTBdPVIqdSt3KmYrcSpsK1kqZCx0WzExXT1SKm8rdypzK3EqditZKkEsUj1yWzEyXSx3PXJbMTNdLHE9clsxNF0sWT1yWzE1XSx0WzEyXT1SKmErdyppK3EqaCtZKm0sdFsxM109UiplK3cqYytxKk0rWSpwLHRbMTRdPVIqdSt3KmYrcSpsK1kqZCx0WzE1XT1SKm8rdypzK3EqditZKkEsdH0sZS5tdWw9ZS5tdWx0aXBseSxlLnRyYW5zbGF0ZT1mdW5jdGlvbih0LG4scil7dmFyIGEsZSx1LG8saSxjLGYscyxoLE0sbCx2LG09clswXSxwPXJbMV0sZD1yWzJdO3JldHVybiBuPT09dD8odFsxMl09blswXSptK25bNF0qcCtuWzhdKmQrblsxMl0sdFsxM109blsxXSptK25bNV0qcCtuWzldKmQrblsxM10sdFsxNF09blsyXSptK25bNl0qcCtuWzEwXSpkK25bMTRdLHRbMTVdPW5bM10qbStuWzddKnArblsxMV0qZCtuWzE1XSk6KGE9blswXSxlPW5bMV0sdT1uWzJdLG89blszXSxpPW5bNF0sYz1uWzVdLGY9bls2XSxzPW5bN10saD1uWzhdLE09bls5XSxsPW5bMTBdLHY9blsxMV0sdFswXT1hLHRbMV09ZSx0WzJdPXUsdFszXT1vLHRbNF09aSx0WzVdPWMsdFs2XT1mLHRbN109cyx0WzhdPWgsdFs5XT1NLHRbMTBdPWwsdFsxMV09dix0WzEyXT1hKm0raSpwK2gqZCtuWzEyXSx0WzEzXT1lKm0rYypwK00qZCtuWzEzXSx0WzE0XT11Km0rZipwK2wqZCtuWzE0XSx0WzE1XT1vKm0rcypwK3YqZCtuWzE1XSksdH0sZS5zY2FsZT1mdW5jdGlvbih0LG4scil7dmFyIGE9clswXSxlPXJbMV0sdT1yWzJdO3JldHVybiB0WzBdPW5bMF0qYSx0WzFdPW5bMV0qYSx0WzJdPW5bMl0qYSx0WzNdPW5bM10qYSx0WzRdPW5bNF0qZSx0WzVdPW5bNV0qZSx0WzZdPW5bNl0qZSx0WzddPW5bN10qZSx0WzhdPW5bOF0qdSx0WzldPW5bOV0qdSx0WzEwXT1uWzEwXSp1LHRbMTFdPW5bMTFdKnUsdFsxMl09blsxMl0sdFsxM109blsxM10sdFsxNF09blsxNF0sdFsxNV09blsxNV0sdH0sZS5yb3RhdGU9ZnVuY3Rpb24odCxuLHIsZSl7dmFyIHUsbyxpLGMsZixzLGgsTSxsLHYsbSxwLGQsQSxSLHcscSxZLGcseSx4LFAsRSxULGI9ZVswXSxEPWVbMV0sTD1lWzJdLF89TWF0aC5zcXJ0KGIqYitEKkQrTCpMKTtyZXR1cm4gTWF0aC5hYnMoXyk8YS5FUFNJTE9OP251bGw6KF89MS9fLGIqPV8sRCo9XyxMKj1fLHU9TWF0aC5zaW4ociksbz1NYXRoLmNvcyhyKSxpPTEtbyxjPW5bMF0sZj1uWzFdLHM9blsyXSxoPW5bM10sTT1uWzRdLGw9bls1XSx2PW5bNl0sbT1uWzddLHA9bls4XSxkPW5bOV0sQT1uWzEwXSxSPW5bMTFdLHc9YipiKmkrbyxxPUQqYippK0wqdSxZPUwqYippLUQqdSxnPWIqRCppLUwqdSx5PUQqRCppK28seD1MKkQqaStiKnUsUD1iKkwqaStEKnUsRT1EKkwqaS1iKnUsVD1MKkwqaStvLHRbMF09Yyp3K00qcStwKlksdFsxXT1mKncrbCpxK2QqWSx0WzJdPXMqdyt2KnErQSpZLHRbM109aCp3K20qcStSKlksdFs0XT1jKmcrTSp5K3AqeCx0WzVdPWYqZytsKnkrZCp4LHRbNl09cypnK3YqeStBKngsdFs3XT1oKmcrbSp5K1IqeCx0WzhdPWMqUCtNKkUrcCpULHRbOV09ZipQK2wqRStkKlQsdFsxMF09cypQK3YqRStBKlQsdFsxMV09aCpQK20qRStSKlQsbiE9PXQmJih0WzEyXT1uWzEyXSx0WzEzXT1uWzEzXSx0WzE0XT1uWzE0XSx0WzE1XT1uWzE1XSksdCl9LGUucm90YXRlWD1mdW5jdGlvbih0LG4scil7dmFyIGE9TWF0aC5zaW4ociksZT1NYXRoLmNvcyhyKSx1PW5bNF0sbz1uWzVdLGk9bls2XSxjPW5bN10sZj1uWzhdLHM9bls5XSxoPW5bMTBdLE09blsxMV07cmV0dXJuIG4hPT10JiYodFswXT1uWzBdLHRbMV09blsxXSx0WzJdPW5bMl0sdFszXT1uWzNdLHRbMTJdPW5bMTJdLHRbMTNdPW5bMTNdLHRbMTRdPW5bMTRdLHRbMTVdPW5bMTVdKSx0WzRdPXUqZStmKmEsdFs1XT1vKmUrcyphLHRbNl09aSplK2gqYSx0WzddPWMqZStNKmEsdFs4XT1mKmUtdSphLHRbOV09cyplLW8qYSx0WzEwXT1oKmUtaSphLHRbMTFdPU0qZS1jKmEsdH0sZS5yb3RhdGVZPWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1NYXRoLnNpbihyKSxlPU1hdGguY29zKHIpLHU9blswXSxvPW5bMV0saT1uWzJdLGM9blszXSxmPW5bOF0scz1uWzldLGg9blsxMF0sTT1uWzExXTtyZXR1cm4gbiE9PXQmJih0WzRdPW5bNF0sdFs1XT1uWzVdLHRbNl09bls2XSx0WzddPW5bN10sdFsxMl09blsxMl0sdFsxM109blsxM10sdFsxNF09blsxNF0sdFsxNV09blsxNV0pLHRbMF09dSplLWYqYSx0WzFdPW8qZS1zKmEsdFsyXT1pKmUtaCphLHRbM109YyplLU0qYSx0WzhdPXUqYStmKmUsdFs5XT1vKmErcyplLHRbMTBdPWkqYStoKmUsdFsxMV09YyphK00qZSx0fSxlLnJvdGF0ZVo9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPU1hdGguc2luKHIpLGU9TWF0aC5jb3MociksdT1uWzBdLG89blsxXSxpPW5bMl0sYz1uWzNdLGY9bls0XSxzPW5bNV0saD1uWzZdLE09bls3XTtyZXR1cm4gbiE9PXQmJih0WzhdPW5bOF0sdFs5XT1uWzldLHRbMTBdPW5bMTBdLHRbMTFdPW5bMTFdLHRbMTJdPW5bMTJdLHRbMTNdPW5bMTNdLHRbMTRdPW5bMTRdLHRbMTVdPW5bMTVdKSx0WzBdPXUqZStmKmEsdFsxXT1vKmUrcyphLHRbMl09aSplK2gqYSx0WzNdPWMqZStNKmEsdFs0XT1mKmUtdSphLHRbNV09cyplLW8qYSx0WzZdPWgqZS1pKmEsdFs3XT1NKmUtYyphLHR9LGUuZnJvbVRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09blswXSx0WzEzXT1uWzFdLHRbMTRdPW5bMl0sdFsxNV09MSx0fSxlLmZyb21TY2FsaW5nPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09blswXSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1uWzFdLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT1uWzJdLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxlLmZyb21Sb3RhdGlvbj1mdW5jdGlvbih0LG4scil7dmFyIGUsdSxvLGk9clswXSxjPXJbMV0sZj1yWzJdLHM9TWF0aC5zcXJ0KGkqaStjKmMrZipmKTtyZXR1cm4gTWF0aC5hYnMocyk8YS5FUFNJTE9OP251bGw6KHM9MS9zLGkqPXMsYyo9cyxmKj1zLGU9TWF0aC5zaW4obiksdT1NYXRoLmNvcyhuKSxvPTEtdSx0WzBdPWkqaSpvK3UsdFsxXT1jKmkqbytmKmUsdFsyXT1mKmkqby1jKmUsdFszXT0wLHRbNF09aSpjKm8tZiplLHRbNV09YypjKm8rdSx0WzZdPWYqYypvK2kqZSx0WzddPTAsdFs4XT1pKmYqbytjKmUsdFs5XT1jKmYqby1pKmUsdFsxMF09ZipmKm8rdSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdCl9LGUuZnJvbVhSb3RhdGlvbj1mdW5jdGlvbih0LG4pe3ZhciByPU1hdGguc2luKG4pLGE9TWF0aC5jb3Mobik7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1hLHRbNl09cix0WzddPTAsdFs4XT0wLHRbOV09LXIsdFsxMF09YSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0sZS5mcm9tWVJvdGF0aW9uPWZ1bmN0aW9uKHQsbil7dmFyIHI9TWF0aC5zaW4obiksYT1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1hLHRbMV09MCx0WzJdPS1yLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT1yLHRbOV09MCx0WzEwXT1hLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxlLmZyb21aUm90YXRpb249ZnVuY3Rpb24odCxuKXt2YXIgcj1NYXRoLnNpbihuKSxhPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWEsdFsxXT1yLHRbMl09MCx0WzNdPTAsdFs0XT0tcix0WzVdPWEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LGUuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb249ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPW5bM10saT1hK2EsYz1lK2UsZj11K3Uscz1hKmksaD1hKmMsTT1hKmYsbD1lKmMsdj1lKmYsbT11KmYscD1vKmksZD1vKmMsQT1vKmY7cmV0dXJuIHRbMF09MS0obCttKSx0WzFdPWgrQSx0WzJdPU0tZCx0WzNdPTAsdFs0XT1oLUEsdFs1XT0xLShzK20pLHRbNl09ditwLHRbN109MCx0WzhdPU0rZCx0WzldPXYtcCx0WzEwXT0xLShzK2wpLHRbMTFdPTAsdFsxMl09clswXSx0WzEzXT1yWzFdLHRbMTRdPXJbMl0sdFsxNV09MSx0fSxlLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uU2NhbGU9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIGU9blswXSx1PW5bMV0sbz1uWzJdLGk9blszXSxjPWUrZSxmPXUrdSxzPW8rbyxoPWUqYyxNPWUqZixsPWUqcyx2PXUqZixtPXUqcyxwPW8qcyxkPWkqYyxBPWkqZixSPWkqcyx3PWFbMF0scT1hWzFdLFk9YVsyXTtyZXR1cm4gdFswXT0oMS0oditwKSkqdyx0WzFdPShNK1IpKncsdFsyXT0obC1BKSp3LHRbM109MCx0WzRdPShNLVIpKnEsdFs1XT0oMS0oaCtwKSkqcSx0WzZdPShtK2QpKnEsdFs3XT0wLHRbOF09KGwrQSkqWSx0WzldPShtLWQpKlksdFsxMF09KDEtKGgrdikpKlksdFsxMV09MCx0WzEyXT1yWzBdLHRbMTNdPXJbMV0sdFsxNF09clsyXSx0WzE1XT0xLHR9LGUuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25TY2FsZU9yaWdpbj1mdW5jdGlvbih0LG4scixhLGUpe3ZhciB1PW5bMF0sbz1uWzFdLGk9blsyXSxjPW5bM10sZj11K3Uscz1vK28saD1pK2ksTT11KmYsbD11KnMsdj11KmgsbT1vKnMscD1vKmgsZD1pKmgsQT1jKmYsUj1jKnMsdz1jKmgscT1hWzBdLFk9YVsxXSxnPWFbMl0seT1lWzBdLHg9ZVsxXSxQPWVbMl07cmV0dXJuIHRbMF09KDEtKG0rZCkpKnEsdFsxXT0obCt3KSpxLHRbMl09KHYtUikqcSx0WzNdPTAsdFs0XT0obC13KSpZLHRbNV09KDEtKE0rZCkpKlksdFs2XT0ocCtBKSpZLHRbN109MCx0WzhdPSh2K1IpKmcsdFs5XT0ocC1BKSpnLHRbMTBdPSgxLShNK20pKSpnLHRbMTFdPTAsdFsxMl09clswXSt5LSh0WzBdKnkrdFs0XSp4K3RbOF0qUCksdFsxM109clsxXSt4LSh0WzFdKnkrdFs1XSp4K3RbOV0qUCksdFsxNF09clsyXStQLSh0WzJdKnkrdFs2XSp4K3RbMTBdKlApLHRbMTVdPTEsdH0sZS5mcm9tUXVhdD1mdW5jdGlvbih0LG4pe3ZhciByPW5bMF0sYT1uWzFdLGU9blsyXSx1PW5bM10sbz1yK3IsaT1hK2EsYz1lK2UsZj1yKm8scz1hKm8saD1hKmksTT1lKm8sbD1lKmksdj1lKmMsbT11Km8scD11KmksZD11KmM7cmV0dXJuIHRbMF09MS1oLXYsdFsxXT1zK2QsdFsyXT1NLXAsdFszXT0wLHRbNF09cy1kLHRbNV09MS1mLXYsdFs2XT1sK20sdFs3XT0wLHRbOF09TStwLHRbOV09bC1tLHRbMTBdPTEtZi1oLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxlLmZydXN0dW09ZnVuY3Rpb24odCxuLHIsYSxlLHUsbyl7dmFyIGk9MS8oci1uKSxjPTEvKGUtYSksZj0xLyh1LW8pO3JldHVybiB0WzBdPTIqdSppLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTIqdSpjLHRbNl09MCx0WzddPTAsdFs4XT0ocituKSppLHRbOV09KGUrYSkqYyx0WzEwXT0obyt1KSpmLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT1vKnUqMipmLHRbMTVdPTAsdH0sZS5wZXJzcGVjdGl2ZT1mdW5jdGlvbih0LG4scixhLGUpe3ZhciB1PTEvTWF0aC50YW4obi8yKSxvPTEvKGEtZSk7cmV0dXJuIHRbMF09dS9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPXUsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPShlK2EpKm8sdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTIqZSphKm8sdFsxNV09MCx0fSxlLnBlcnNwZWN0aXZlRnJvbUZpZWxkT2ZWaWV3PWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBlPU1hdGgudGFuKG4udXBEZWdyZWVzKk1hdGguUEkvMTgwKSx1PU1hdGgudGFuKG4uZG93bkRlZ3JlZXMqTWF0aC5QSS8xODApLG89TWF0aC50YW4obi5sZWZ0RGVncmVlcypNYXRoLlBJLzE4MCksaT1NYXRoLnRhbihuLnJpZ2h0RGVncmVlcypNYXRoLlBJLzE4MCksYz0yLyhvK2kpLGY9Mi8oZSt1KTtyZXR1cm4gdFswXT1jLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWYsdFs2XT0wLHRbN109MCx0WzhdPS0oKG8taSkqYyouNSksdFs5XT0oZS11KSpmKi41LHRbMTBdPWEvKHItYSksdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPWEqci8oci1hKSx0WzE1XT0wLHR9LGUub3J0aG89ZnVuY3Rpb24odCxuLHIsYSxlLHUsbyl7dmFyIGk9MS8obi1yKSxjPTEvKGEtZSksZj0xLyh1LW8pO3JldHVybiB0WzBdPS0yKmksdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09LTIqYyx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MipmLHRbMTFdPTAsdFsxMl09KG4rcikqaSx0WzEzXT0oZSthKSpjLHRbMTRdPShvK3UpKmYsdFsxNV09MSx0fSxlLmxvb2tBdD1mdW5jdGlvbih0LG4scix1KXt2YXIgbyxpLGMsZixzLGgsTSxsLHYsbSxwPW5bMF0sZD1uWzFdLEE9blsyXSxSPXVbMF0sdz11WzFdLHE9dVsyXSxZPXJbMF0sZz1yWzFdLHk9clsyXTtyZXR1cm4gTWF0aC5hYnMocC1ZKTxhLkVQU0lMT04mJk1hdGguYWJzKGQtZyk8YS5FUFNJTE9OJiZNYXRoLmFicyhBLXkpPGEuRVBTSUxPTj9lLmlkZW50aXR5KHQpOihNPXAtWSxsPWQtZyx2PUEteSxtPTEvTWF0aC5zcXJ0KE0qTStsKmwrdip2KSxNKj1tLGwqPW0sdio9bSxvPXcqdi1xKmwsaT1xKk0tUip2LGM9UipsLXcqTSxtPU1hdGguc3FydChvKm8raSppK2MqYyksbT8obT0xL20sbyo9bSxpKj1tLGMqPW0pOihvPTAsaT0wLGM9MCksZj1sKmMtdippLHM9dipvLU0qYyxoPU0qaS1sKm8sbT1NYXRoLnNxcnQoZipmK3MqcytoKmgpLG0/KG09MS9tLGYqPW0scyo9bSxoKj1tKTooZj0wLHM9MCxoPTApLHRbMF09byx0WzFdPWYsdFsyXT1NLHRbM109MCx0WzRdPWksdFs1XT1zLHRbNl09bCx0WzddPTAsdFs4XT1jLHRbOV09aCx0WzEwXT12LHRbMTFdPTAsdFsxMl09LShvKnAraSpkK2MqQSksdFsxM109LShmKnArcypkK2gqQSksdFsxNF09LShNKnArbCpkK3YqQSksdFsxNV09MSx0KX0sZS5zdHI9ZnVuY3Rpb24odCl7cmV0dXJuIm1hdDQoIit0WzBdKyIsICIrdFsxXSsiLCAiK3RbMl0rIiwgIit0WzNdKyIsICIrdFs0XSsiLCAiK3RbNV0rIiwgIit0WzZdKyIsICIrdFs3XSsiLCAiK3RbOF0rIiwgIit0WzldKyIsICIrdFsxMF0rIiwgIit0WzExXSsiLCAiK3RbMTJdKyIsICIrdFsxM10rIiwgIit0WzE0XSsiLCAiK3RbMTVdKyIpIn0sZS5mcm9iPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codFswXSwyKStNYXRoLnBvdyh0WzFdLDIpK01hdGgucG93KHRbMl0sMikrTWF0aC5wb3codFszXSwyKStNYXRoLnBvdyh0WzRdLDIpK01hdGgucG93KHRbNV0sMikrTWF0aC5wb3codFs2XSwyKStNYXRoLnBvdyh0WzddLDIpK01hdGgucG93KHRbOF0sMikrTWF0aC5wb3codFs5XSwyKStNYXRoLnBvdyh0WzEwXSwyKStNYXRoLnBvdyh0WzExXSwyKStNYXRoLnBvdyh0WzEyXSwyKStNYXRoLnBvdyh0WzEzXSwyKStNYXRoLnBvdyh0WzE0XSwyKStNYXRoLnBvdyh0WzE1XSwyKSl9LHQuZXhwb3J0cz1lfSxmdW5jdGlvbih0LG4scil7dmFyIGE9cigxKSxlPXIoNCksdT1yKDcpLG89cig4KSxpPXt9O2kuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGEuQVJSQVlfVFlQRSg0KTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdFszXT0xLHR9LGkucm90YXRpb25Ubz1mdW5jdGlvbigpe3ZhciB0PXUuY3JlYXRlKCksbj11LmZyb21WYWx1ZXMoMSwwLDApLHI9dS5mcm9tVmFsdWVzKDAsMSwwKTtyZXR1cm4gZnVuY3Rpb24oYSxlLG8pe3ZhciBjPXUuZG90KGUsbyk7cmV0dXJuLS45OTk5OTk+Yz8odS5jcm9zcyh0LG4sZSksdS5sZW5ndGgodCk8MWUtNiYmdS5jcm9zcyh0LHIsZSksdS5ub3JtYWxpemUodCx0KSxpLnNldEF4aXNBbmdsZShhLHQsTWF0aC5QSSksYSk6Yz4uOTk5OTk5PyhhWzBdPTAsYVsxXT0wLGFbMl09MCxhWzNdPTEsYSk6KHUuY3Jvc3ModCxlLG8pLGFbMF09dFswXSxhWzFdPXRbMV0sYVsyXT10WzJdLGFbM109MStjLGkubm9ybWFsaXplKGEsYSkpfX0oKSxpLnNldEF4ZXM9ZnVuY3Rpb24oKXt2YXIgdD1lLmNyZWF0ZSgpO3JldHVybiBmdW5jdGlvbihuLHIsYSxlKXtyZXR1cm4gdFswXT1hWzBdLHRbM109YVsxXSx0WzZdPWFbMl0sdFsxXT1lWzBdLHRbNF09ZVsxXSx0WzddPWVbMl0sdFsyXT0tclswXSx0WzVdPS1yWzFdLHRbOF09LXJbMl0saS5ub3JtYWxpemUobixpLmZyb21NYXQzKG4sdCkpfX0oKSxpLmNsb25lPW8uY2xvbmUsaS5mcm9tVmFsdWVzPW8uZnJvbVZhbHVlcyxpLmNvcHk9by5jb3B5LGkuc2V0PW8uc2V0LGkuaWRlbnRpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxpLnNldEF4aXNBbmdsZT1mdW5jdGlvbih0LG4scil7cj0uNSpyO3ZhciBhPU1hdGguc2luKHIpO3JldHVybiB0WzBdPWEqblswXSx0WzFdPWEqblsxXSx0WzJdPWEqblsyXSx0WzNdPU1hdGguY29zKHIpLHR9LGkuYWRkPW8uYWRkLGkubXVsdGlwbHk9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPW5bM10saT1yWzBdLGM9clsxXSxmPXJbMl0scz1yWzNdO3JldHVybiB0WzBdPWEqcytvKmkrZSpmLXUqYyx0WzFdPWUqcytvKmMrdSppLWEqZix0WzJdPXUqcytvKmYrYSpjLWUqaSx0WzNdPW8qcy1hKmktZSpjLXUqZix0fSxpLm11bD1pLm11bHRpcGx5LGkuc2NhbGU9by5zY2FsZSxpLnJvdGF0ZVg9ZnVuY3Rpb24odCxuLHIpe3IqPS41O3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPW5bM10saT1NYXRoLnNpbihyKSxjPU1hdGguY29zKHIpO3JldHVybiB0WzBdPWEqYytvKmksdFsxXT1lKmMrdSppLHRbMl09dSpjLWUqaSx0WzNdPW8qYy1hKmksdH0saS5yb3RhdGVZPWZ1bmN0aW9uKHQsbixyKXtyKj0uNTt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1uWzNdLGk9TWF0aC5zaW4ociksYz1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1hKmMtdSppLHRbMV09ZSpjK28qaSx0WzJdPXUqYythKmksdFszXT1vKmMtZSppLHR9LGkucm90YXRlWj1mdW5jdGlvbih0LG4scil7cio9LjU7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdLG89blszXSxpPU1hdGguc2luKHIpLGM9TWF0aC5jb3Mocik7cmV0dXJuIHRbMF09YSpjK2UqaSx0WzFdPWUqYy1hKmksdFsyXT11KmMrbyppLHRbM109bypjLXUqaSx0fSxpLmNhbGN1bGF0ZVc9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLGE9blsxXSxlPW5bMl07cmV0dXJuIHRbMF09cix0WzFdPWEsdFsyXT1lLHRbM109TWF0aC5zcXJ0KE1hdGguYWJzKDEtcipyLWEqYS1lKmUpKSx0fSxpLmRvdD1vLmRvdCxpLmxlcnA9by5sZXJwLGkuc2xlcnA9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIGUsdSxvLGksYyxmPW5bMF0scz1uWzFdLGg9blsyXSxNPW5bM10sbD1yWzBdLHY9clsxXSxtPXJbMl0scD1yWzNdO3JldHVybiB1PWYqbCtzKnYraCptK00qcCwwPnUmJih1PS11LGw9LWwsdj0tdixtPS1tLHA9LXApLDEtdT4xZS02PyhlPU1hdGguYWNvcyh1KSxvPU1hdGguc2luKGUpLGk9TWF0aC5zaW4oKDEtYSkqZSkvbyxjPU1hdGguc2luKGEqZSkvbyk6KGk9MS1hLGM9YSksdFswXT1pKmYrYypsLHRbMV09aSpzK2Mqdix0WzJdPWkqaCtjKm0sdFszXT1pKk0rYypwLHR9LGkuc3FsZXJwPWZ1bmN0aW9uKCl7dmFyIHQ9aS5jcmVhdGUoKSxuPWkuY3JlYXRlKCk7cmV0dXJuIGZ1bmN0aW9uKHIsYSxlLHUsbyxjKXtyZXR1cm4gaS5zbGVycCh0LGEsbyxjKSxpLnNsZXJwKG4sZSx1LGMpLGkuc2xlcnAocix0LG4sMipjKigxLWMpKSxyfX0oKSxpLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciByPW5bMF0sYT1uWzFdLGU9blsyXSx1PW5bM10sbz1yKnIrYSphK2UqZSt1KnUsaT1vPzEvbzowO3JldHVybiB0WzBdPS1yKmksdFsxXT0tYSppLHRbMl09LWUqaSx0WzNdPXUqaSx0fSxpLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPS1uWzBdLHRbMV09LW5bMV0sdFsyXT0tblsyXSx0WzNdPW5bM10sdH0saS5sZW5ndGg9by5sZW5ndGgsaS5sZW49aS5sZW5ndGgsaS5zcXVhcmVkTGVuZ3RoPW8uc3F1YXJlZExlbmd0aCxpLnNxckxlbj1pLnNxdWFyZWRMZW5ndGgsaS5ub3JtYWxpemU9by5ub3JtYWxpemUsaS5mcm9tTWF0Mz1mdW5jdGlvbih0LG4pe3ZhciByLGE9blswXStuWzRdK25bOF07aWYoYT4wKXI9TWF0aC5zcXJ0KGErMSksdFszXT0uNSpyLHI9LjUvcix0WzBdPShuWzVdLW5bN10pKnIsdFsxXT0obls2XS1uWzJdKSpyLHRbMl09KG5bMV0tblszXSkqcjtlbHNle3ZhciBlPTA7bls0XT5uWzBdJiYoZT0xKSxuWzhdPm5bMyplK2VdJiYoZT0yKTt2YXIgdT0oZSsxKSUzLG89KGUrMiklMztyPU1hdGguc3FydChuWzMqZStlXS1uWzMqdSt1XS1uWzMqbytvXSsxKSx0W2VdPS41KnIscj0uNS9yLHRbM109KG5bMyp1K29dLW5bMypvK3VdKSpyLHRbdV09KG5bMyp1K2VdK25bMyplK3VdKSpyLHRbb109KG5bMypvK2VdK25bMyplK29dKSpyfXJldHVybiB0fSxpLnN0cj1mdW5jdGlvbih0KXtyZXR1cm4icXVhdCgiK3RbMF0rIiwgIit0WzFdKyIsICIrdFsyXSsiLCAiK3RbM10rIikifSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxuLHIpe3ZhciBhPXIoMSksZT17fTtlLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBhLkFSUkFZX1RZUEUoMyk7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHR9LGUuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIG49bmV3IGEuQVJSQVlfVFlQRSgzKTtyZXR1cm4gblswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sbn0sZS5mcm9tVmFsdWVzPWZ1bmN0aW9uKHQsbixyKXt2YXIgZT1uZXcgYS5BUlJBWV9UWVBFKDMpO3JldHVybiBlWzBdPXQsZVsxXT1uLGVbMl09cixlfSxlLmNvcHk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT1uWzBdLHRbMV09blsxXSx0WzJdPW5bMl0sdH0sZS5zZXQ9ZnVuY3Rpb24odCxuLHIsYSl7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT1hLHR9LGUuYWRkPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFswXT1uWzBdK3JbMF0sdFsxXT1uWzFdK3JbMV0sdFsyXT1uWzJdK3JbMl0sdH0sZS5zdWJ0cmFjdD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09blswXS1yWzBdLHRbMV09blsxXS1yWzFdLHRbMl09blsyXS1yWzJdLHR9LGUuc3ViPWUuc3VidHJhY3QsZS5tdWx0aXBseT1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09blswXSpyWzBdLHRbMV09blsxXSpyWzFdLHRbMl09blsyXSpyWzJdLHR9LGUubXVsPWUubXVsdGlwbHksZS5kaXZpZGU9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPW5bMF0vclswXSx0WzFdPW5bMV0vclsxXSx0WzJdPW5bMl0vclsyXSx0fSxlLmRpdj1lLmRpdmlkZSxlLm1pbj1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09TWF0aC5taW4oblswXSxyWzBdKSx0WzFdPU1hdGgubWluKG5bMV0sclsxXSksdFsyXT1NYXRoLm1pbihuWzJdLHJbMl0pLHR9LGUubWF4PWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFswXT1NYXRoLm1heChuWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoblsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KG5bMl0sclsyXSksdH0sZS5zY2FsZT1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09blswXSpyLHRbMV09blsxXSpyLHRbMl09blsyXSpyLHR9LGUuc2NhbGVBbmRBZGQ9ZnVuY3Rpb24odCxuLHIsYSl7cmV0dXJuIHRbMF09blswXStyWzBdKmEsdFsxXT1uWzFdK3JbMV0qYSx0WzJdPW5bMl0rclsyXSphLHR9LGUuZGlzdGFuY2U9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLXRbMF0sYT1uWzFdLXRbMV0sZT1uWzJdLXRbMl07cmV0dXJuIE1hdGguc3FydChyKnIrYSphK2UqZSl9LGUuZGlzdD1lLmRpc3RhbmNlLGUuc3F1YXJlZERpc3RhbmNlPWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXS10WzBdLGE9blsxXS10WzFdLGU9blsyXS10WzJdO3JldHVybiByKnIrYSphK2UqZX0sZS5zcXJEaXN0PWUuc3F1YXJlZERpc3RhbmNlLGUubGVuZ3RoPWZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0scj10WzFdLGE9dFsyXTtyZXR1cm4gTWF0aC5zcXJ0KG4qbityKnIrYSphKX0sZS5sZW49ZS5sZW5ndGgsZS5zcXVhcmVkTGVuZ3RoPWZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0scj10WzFdLGE9dFsyXTtyZXR1cm4gbipuK3IqcithKmF9LGUuc3FyTGVuPWUuc3F1YXJlZExlbmd0aCxlLm5lZ2F0ZT1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPS1uWzBdLHRbMV09LW5bMV0sdFsyXT0tblsyXSx0fSxlLmludmVyc2U9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT0xL25bMF0sdFsxXT0xL25bMV0sdFsyXT0xL25bMl0sdH0sZS5ub3JtYWxpemU9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLGE9blsxXSxlPW5bMl0sdT1yKnIrYSphK2UqZTtyZXR1cm4gdT4wJiYodT0xL01hdGguc3FydCh1KSx0WzBdPW5bMF0qdSx0WzFdPW5bMV0qdSx0WzJdPW5bMl0qdSksdH0sZS5kb3Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXSpuWzBdK3RbMV0qblsxXSt0WzJdKm5bMl19LGUuY3Jvc3M9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPXJbMF0saT1yWzFdLGM9clsyXTtyZXR1cm4gdFswXT1lKmMtdSppLHRbMV09dSpvLWEqYyx0WzJdPWEqaS1lKm8sdH0sZS5sZXJwPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBlPW5bMF0sdT1uWzFdLG89blsyXTtyZXR1cm4gdFswXT1lK2EqKHJbMF0tZSksdFsxXT11K2EqKHJbMV0tdSksdFsyXT1vK2EqKHJbMl0tbyksdH0sZS5oZXJtaXRlPWZ1bmN0aW9uKHQsbixyLGEsZSx1KXt2YXIgbz11KnUsaT1vKigyKnUtMykrMSxjPW8qKHUtMikrdSxmPW8qKHUtMSkscz1vKigzLTIqdSk7cmV0dXJuIHRbMF09blswXSppK3JbMF0qYythWzBdKmYrZVswXSpzLHRbMV09blsxXSppK3JbMV0qYythWzFdKmYrZVsxXSpzLHRbMl09blsyXSppK3JbMl0qYythWzJdKmYrZVsyXSpzLHR9LGUuYmV6aWVyPWZ1bmN0aW9uKHQsbixyLGEsZSx1KXt2YXIgbz0xLXUsaT1vKm8sYz11KnUsZj1pKm8scz0zKnUqaSxoPTMqYypvLE09Yyp1O3JldHVybiB0WzBdPW5bMF0qZityWzBdKnMrYVswXSpoK2VbMF0qTSx0WzFdPW5bMV0qZityWzFdKnMrYVsxXSpoK2VbMV0qTSx0WzJdPW5bMl0qZityWzJdKnMrYVsyXSpoK2VbMl0qTSx0fSxlLnJhbmRvbT1mdW5jdGlvbih0LG4pe249bnx8MTt2YXIgcj0yKmEuUkFORE9NKCkqTWF0aC5QSSxlPTIqYS5SQU5ET00oKS0xLHU9TWF0aC5zcXJ0KDEtZSplKSpuO3JldHVybiB0WzBdPU1hdGguY29zKHIpKnUsdFsxXT1NYXRoLnNpbihyKSp1LHRbMl09ZSpuLHR9LGUudHJhbnNmb3JtTWF0ND1mdW5jdGlvbih0LG4scil7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdLG89clszXSphK3JbN10qZStyWzExXSp1K3JbMTVdO3JldHVybiBvPW98fDEsdFswXT0oclswXSphK3JbNF0qZStyWzhdKnUrclsxMl0pL28sdFsxXT0oclsxXSphK3JbNV0qZStyWzldKnUrclsxM10pL28sdFsyXT0oclsyXSphK3JbNl0qZStyWzEwXSp1K3JbMTRdKS9vLHR9LGUudHJhbnNmb3JtTWF0Mz1mdW5jdGlvbih0LG4scil7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdO3JldHVybiB0WzBdPWEqclswXStlKnJbM10rdSpyWzZdLHRbMV09YSpyWzFdK2Uqcls0XSt1KnJbN10sdFsyXT1hKnJbMl0rZSpyWzVdK3Uqcls4XSx0fSxlLnRyYW5zZm9ybVF1YXQ9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPXJbMF0saT1yWzFdLGM9clsyXSxmPXJbM10scz1mKmEraSp1LWMqZSxoPWYqZStjKmEtbyp1LE09Zip1K28qZS1pKmEsbD0tbyphLWkqZS1jKnU7cmV0dXJuIHRbMF09cypmK2wqLW8raCotYy1NKi1pLHRbMV09aCpmK2wqLWkrTSotby1zKi1jLHRbMl09TSpmK2wqLWMrcyotaS1oKi1vLHR9LGUucm90YXRlWD1mdW5jdGlvbih0LG4scixhKXt2YXIgZT1bXSx1PVtdO3JldHVybiBlWzBdPW5bMF0tclswXSxlWzFdPW5bMV0tclsxXSxlWzJdPW5bMl0tclsyXSx1WzBdPWVbMF0sdVsxXT1lWzFdKk1hdGguY29zKGEpLWVbMl0qTWF0aC5zaW4oYSksdVsyXT1lWzFdKk1hdGguc2luKGEpK2VbMl0qTWF0aC5jb3MoYSksdFswXT11WzBdK3JbMF0sdFsxXT11WzFdK3JbMV0sdFsyXT11WzJdK3JbMl0sdH0sZS5yb3RhdGVZPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBlPVtdLHU9W107cmV0dXJuIGVbMF09blswXS1yWzBdLGVbMV09blsxXS1yWzFdLGVbMl09blsyXS1yWzJdLHVbMF09ZVsyXSpNYXRoLnNpbihhKStlWzBdKk1hdGguY29zKGEpLHVbMV09ZVsxXSx1WzJdPWVbMl0qTWF0aC5jb3MoYSktZVswXSpNYXRoLnNpbihhKSx0WzBdPXVbMF0rclswXSx0WzFdPXVbMV0rclsxXSx0WzJdPXVbMl0rclsyXSx0fSxlLnJvdGF0ZVo9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIGU9W10sdT1bXTtyZXR1cm4gZVswXT1uWzBdLXJbMF0sZVsxXT1uWzFdLXJbMV0sZVsyXT1uWzJdLXJbMl0sdVswXT1lWzBdKk1hdGguY29zKGEpLWVbMV0qTWF0aC5zaW4oYSksdVsxXT1lWzBdKk1hdGguc2luKGEpK2VbMV0qTWF0aC5jb3MoYSksdVsyXT1lWzJdLHRbMF09dVswXStyWzBdLHRbMV09dVsxXStyWzFdLHRbMl09dVsyXStyWzJdLHR9LGUuZm9yRWFjaD1mdW5jdGlvbigpe3ZhciB0PWUuY3JlYXRlKCk7cmV0dXJuIGZ1bmN0aW9uKG4scixhLGUsdSxvKXt2YXIgaSxjO2ZvcihyfHwocj0zKSxhfHwoYT0wKSxjPWU/TWF0aC5taW4oZSpyK2Esbi5sZW5ndGgpOm4ubGVuZ3RoLGk9YTtjPmk7aSs9cil0WzBdPW5baV0sdFsxXT1uW2krMV0sdFsyXT1uW2krMl0sdSh0LHQsbyksbltpXT10WzBdLG5baSsxXT10WzFdLG5baSsyXT10WzJdO3JldHVybiBufX0oKSxlLmFuZ2xlPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZS5mcm9tVmFsdWVzKHRbMF0sdFsxXSx0WzJdKSxhPWUuZnJvbVZhbHVlcyhuWzBdLG5bMV0sblsyXSk7ZS5ub3JtYWxpemUocixyKSxlLm5vcm1hbGl6ZShhLGEpO3ZhciB1PWUuZG90KHIsYSk7cmV0dXJuIHU+MT8wOk1hdGguYWNvcyh1KX0sZS5zdHI9ZnVuY3Rpb24odCl7cmV0dXJuInZlYzMoIit0WzBdKyIsICIrdFsxXSsiLCAiK3RbMl0rIikifSx0LmV4cG9ydHM9ZX0sZnVuY3Rpb24odCxuLHIpe3ZhciBhPXIoMSksZT17fTtlLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBhLkFSUkFZX1RZUEUoNCk7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MCx0fSxlLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBhLkFSUkFZX1RZUEUoNCk7cmV0dXJuIG5bMF09dFswXSxuWzFdPXRbMV0sblsyXT10WzJdLG5bM109dFszXSxufSxlLmZyb21WYWx1ZXM9ZnVuY3Rpb24odCxuLHIsZSl7dmFyIHU9bmV3IGEuQVJSQVlfVFlQRSg0KTtyZXR1cm4gdVswXT10LHVbMV09bix1WzJdPXIsdVszXT1lLHV9LGUuY29weT1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPW5bMF0sdFsxXT1uWzFdLHRbMl09blsyXSx0WzNdPW5bM10sdH0sZS5zZXQ9ZnVuY3Rpb24odCxuLHIsYSxlKXtyZXR1cm4gdFswXT1uLHRbMV09cix0WzJdPWEsdFszXT1lLHR9LGUuYWRkPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFswXT1uWzBdK3JbMF0sdFsxXT1uWzFdK3JbMV0sdFsyXT1uWzJdK3JbMl0sdFszXT1uWzNdK3JbM10sdH0sZS5zdWJ0cmFjdD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09blswXS1yWzBdLHRbMV09blsxXS1yWzFdLHRbMl09blsyXS1yWzJdLHRbM109blszXS1yWzNdLHR9LGUuc3ViPWUuc3VidHJhY3QsZS5tdWx0aXBseT1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09blswXSpyWzBdLHRbMV09blsxXSpyWzFdLHRbMl09blsyXSpyWzJdLHRbM109blszXSpyWzNdLHR9LGUubXVsPWUubXVsdGlwbHksZS5kaXZpZGU9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPW5bMF0vclswXSx0WzFdPW5bMV0vclsxXSx0WzJdPW5bMl0vclsyXSx0WzNdPW5bM10vclszXSx0fSxlLmRpdj1lLmRpdmlkZSxlLm1pbj1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09TWF0aC5taW4oblswXSxyWzBdKSx0WzFdPU1hdGgubWluKG5bMV0sclsxXSksdFsyXT1NYXRoLm1pbihuWzJdLHJbMl0pLHRbM109TWF0aC5taW4oblszXSxyWzNdKSx0fSxlLm1heD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09TWF0aC5tYXgoblswXSxyWzBdKSx0WzFdPU1hdGgubWF4KG5bMV0sclsxXSksdFsyXT1NYXRoLm1heChuWzJdLHJbMl0pLHRbM109TWF0aC5tYXgoblszXSxyWzNdKSx0fSxlLnNjYWxlPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFswXT1uWzBdKnIsdFsxXT1uWzFdKnIsdFsyXT1uWzJdKnIsdFszXT1uWzNdKnIsdH0sZS5zY2FsZUFuZEFkZD1mdW5jdGlvbih0LG4scixhKXtyZXR1cm4gdFswXT1uWzBdK3JbMF0qYSx0WzFdPW5bMV0rclsxXSphLHRbMl09blsyXStyWzJdKmEsdFszXT1uWzNdK3JbM10qYSx0fSxlLmRpc3RhbmNlPWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXS10WzBdLGE9blsxXS10WzFdLGU9blsyXS10WzJdLHU9blszXS10WzNdO3JldHVybiBNYXRoLnNxcnQocipyK2EqYStlKmUrdSp1KX0sZS5kaXN0PWUuZGlzdGFuY2UsZS5zcXVhcmVkRGlzdGFuY2U9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLXRbMF0sYT1uWzFdLXRbMV0sZT1uWzJdLXRbMl0sdT1uWzNdLXRbM107cmV0dXJuIHIqcithKmErZSplK3UqdX0sZS5zcXJEaXN0PWUuc3F1YXJlZERpc3RhbmNlLGUubGVuZ3RoPWZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0scj10WzFdLGE9dFsyXSxlPXRbM107cmV0dXJuIE1hdGguc3FydChuKm4rcipyK2EqYStlKmUpfSxlLmxlbj1lLmxlbmd0aCxlLnNxdWFyZWRMZW5ndGg9ZnVuY3Rpb24odCl7dmFyIG49dFswXSxyPXRbMV0sYT10WzJdLGU9dFszXTtyZXR1cm4gbipuK3IqcithKmErZSplfSxlLnNxckxlbj1lLnNxdWFyZWRMZW5ndGgsZS5uZWdhdGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT0tblswXSx0WzFdPS1uWzFdLHRbMl09LW5bMl0sdFszXT0tblszXSx0fSxlLmludmVyc2U9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT0xL25bMF0sdFsxXT0xL25bMV0sdFsyXT0xL25bMl0sdFszXT0xL25bM10sdH0sZS5ub3JtYWxpemU9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLGE9blsxXSxlPW5bMl0sdT1uWzNdLG89cipyK2EqYStlKmUrdSp1O3JldHVybiBvPjAmJihvPTEvTWF0aC5zcXJ0KG8pLHRbMF09cipvLHRbMV09YSpvLHRbMl09ZSpvLHRbM109dSpvKSx0fSxlLmRvdD1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdKm5bMF0rdFsxXSpuWzFdK3RbMl0qblsyXSt0WzNdKm5bM119LGUubGVycD1mdW5jdGlvbih0LG4scixhKXt2YXIgZT1uWzBdLHU9blsxXSxvPW5bMl0saT1uWzNdO3JldHVybiB0WzBdPWUrYSooclswXS1lKSx0WzFdPXUrYSooclsxXS11KSx0WzJdPW8rYSooclsyXS1vKSx0WzNdPWkrYSooclszXS1pKSx0fSxlLnJhbmRvbT1mdW5jdGlvbih0LG4pe3JldHVybiBuPW58fDEsdFswXT1hLlJBTkRPTSgpLHRbMV09YS5SQU5ET00oKSx0WzJdPWEuUkFORE9NKCksdFszXT1hLlJBTkRPTSgpLGUubm9ybWFsaXplKHQsdCksZS5zY2FsZSh0LHQsbiksdH0sZS50cmFuc2Zvcm1NYXQ0PWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1uWzNdO3JldHVybiB0WzBdPXJbMF0qYStyWzRdKmUrcls4XSp1K3JbMTJdKm8sdFsxXT1yWzFdKmErcls1XSplK3JbOV0qdStyWzEzXSpvLHRbMl09clsyXSphK3JbNl0qZStyWzEwXSp1K3JbMTRdKm8sdFszXT1yWzNdKmErcls3XSplK3JbMTFdKnUrclsxNV0qbyx0fSxlLnRyYW5zZm9ybVF1YXQ9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPXJbMF0saT1yWzFdLGM9clsyXSxmPXJbM10scz1mKmEraSp1LWMqZSxoPWYqZStjKmEtbyp1LE09Zip1K28qZS1pKmEsbD0tbyphLWkqZS1jKnU7cmV0dXJuIHRbMF09cypmK2wqLW8raCotYy1NKi1pLHRbMV09aCpmK2wqLWkrTSotby1zKi1jLHRbMl09TSpmK2wqLWMrcyotaS1oKi1vLHRbM109blszXSx0fSxlLmZvckVhY2g9ZnVuY3Rpb24oKXt2YXIgdD1lLmNyZWF0ZSgpO3JldHVybiBmdW5jdGlvbihuLHIsYSxlLHUsbyl7dmFyIGksYztmb3Iocnx8KHI9NCksYXx8KGE9MCksYz1lP01hdGgubWluKGUqcithLG4ubGVuZ3RoKTpuLmxlbmd0aCxpPWE7Yz5pO2krPXIpdFswXT1uW2ldLHRbMV09bltpKzFdLHRbMl09bltpKzJdLHRbM109bltpKzNdLHUodCx0LG8pLG5baV09dFswXSxuW2krMV09dFsxXSxuW2krMl09dFsyXSxuW2krM109dFszXTtyZXR1cm4gbn19KCksZS5zdHI9ZnVuY3Rpb24odCl7cmV0dXJuInZlYzQoIit0WzBdKyIsICIrdFsxXSsiLCAiK3RbMl0rIiwgIit0WzNdKyIpIn0sdC5leHBvcnRzPWV9LGZ1bmN0aW9uKHQsbixyKXt2YXIgYT1yKDEpLGU9e307ZS5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYS5BUlJBWV9UWVBFKDIpO3JldHVybiB0WzBdPTAsdFsxXT0wLHR9LGUuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIG49bmV3IGEuQVJSQVlfVFlQRSgyKTtyZXR1cm4gblswXT10WzBdLG5bMV09dFsxXSxufSxlLmZyb21WYWx1ZXM9ZnVuY3Rpb24odCxuKXt2YXIgcj1uZXcgYS5BUlJBWV9UWVBFKDIpO3JldHVybiByWzBdPXQsclsxXT1uLHJ9LGUuY29weT1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPW5bMF0sdFsxXT1uWzFdLHR9LGUuc2V0PWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFswXT1uLHRbMV09cix0fSxlLmFkZD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09blswXStyWzBdLHRbMV09blsxXStyWzFdLHR9LGUuc3VidHJhY3Q9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPW5bMF0tclswXSx0WzFdPW5bMV0tclsxXSx0fSxlLnN1Yj1lLnN1YnRyYWN0LGUubXVsdGlwbHk9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPW5bMF0qclswXSx0WzFdPW5bMV0qclsxXSx0fSxlLm11bD1lLm11bHRpcGx5LGUuZGl2aWRlPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFswXT1uWzBdL3JbMF0sdFsxXT1uWzFdL3JbMV0sdH0sZS5kaXY9ZS5kaXZpZGUsZS5taW49ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPU1hdGgubWluKG5bMF0sclswXSksdFsxXT1NYXRoLm1pbihuWzFdLHJbMV0pLHR9LGUubWF4PWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFswXT1NYXRoLm1heChuWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoblsxXSxyWzFdKSx0fSxlLnNjYWxlPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFswXT1uWzBdKnIsdFsxXT1uWzFdKnIsdH0sZS5zY2FsZUFuZEFkZD1mdW5jdGlvbih0LG4scixhKXtyZXR1cm4gdFswXT1uWzBdK3JbMF0qYSx0WzFdPW5bMV0rclsxXSphLHR9LGUuZGlzdGFuY2U9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLXRbMF0sYT1uWzFdLXRbMV07cmV0dXJuIE1hdGguc3FydChyKnIrYSphKX0sZS5kaXN0PWUuZGlzdGFuY2UsZS5zcXVhcmVkRGlzdGFuY2U9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLXRbMF0sYT1uWzFdLXRbMV07cmV0dXJuIHIqcithKmF9LGUuc3FyRGlzdD1lLnNxdWFyZWREaXN0YW5jZSxlLmxlbmd0aD1mdW5jdGlvbih0KXt2YXIgbj10WzBdLHI9dFsxXTtyZXR1cm4gTWF0aC5zcXJ0KG4qbityKnIpfSxlLmxlbj1lLmxlbmd0aCxlLnNxdWFyZWRMZW5ndGg9ZnVuY3Rpb24odCl7dmFyIG49dFswXSxyPXRbMV07cmV0dXJuIG4qbityKnJ9LGUuc3FyTGVuPWUuc3F1YXJlZExlbmd0aCxlLm5lZ2F0ZT1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPS1uWzBdLHRbMV09LW5bMV0sdH0sZS5pbnZlcnNlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09MS9uWzBdLHRbMV09MS9uWzFdLHR9LGUubm9ybWFsaXplPWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXSxhPW5bMV0sZT1yKnIrYSphO3JldHVybiBlPjAmJihlPTEvTWF0aC5zcXJ0KGUpLHRbMF09blswXSplLHRbMV09blsxXSplKSx0fSxlLmRvdD1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdKm5bMF0rdFsxXSpuWzFdfSxlLmNyb3NzPWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdKnJbMV0tblsxXSpyWzBdO3JldHVybiB0WzBdPXRbMV09MCx0WzJdPWEsdH0sZS5sZXJwPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBlPW5bMF0sdT1uWzFdO3JldHVybiB0WzBdPWUrYSooclswXS1lKSx0WzFdPXUrYSooclsxXS11KSx0fSxlLnJhbmRvbT1mdW5jdGlvbih0LG4pe249bnx8MTt2YXIgcj0yKmEuUkFORE9NKCkqTWF0aC5QSTtyZXR1cm4gdFswXT1NYXRoLmNvcyhyKSpuLHRbMV09TWF0aC5zaW4ocikqbix0fSxlLnRyYW5zZm9ybU1hdDI9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdO3JldHVybiB0WzBdPXJbMF0qYStyWzJdKmUsdFsxXT1yWzFdKmErclszXSplLHR9LGUudHJhbnNmb3JtTWF0MmQ9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdO3JldHVybiB0WzBdPXJbMF0qYStyWzJdKmUrcls0XSx0WzFdPXJbMV0qYStyWzNdKmUrcls1XSx0fSxlLnRyYW5zZm9ybU1hdDM9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdO3JldHVybiB0WzBdPXJbMF0qYStyWzNdKmUrcls2XSx0WzFdPXJbMV0qYStyWzRdKmUrcls3XSx0fSxlLnRyYW5zZm9ybU1hdDQ9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdO3JldHVybiB0WzBdPXJbMF0qYStyWzRdKmUrclsxMl0sdFsxXT1yWzFdKmErcls1XSplK3JbMTNdLHR9LGUuZm9yRWFjaD1mdW5jdGlvbigpe3ZhciB0PWUuY3JlYXRlKCk7cmV0dXJuIGZ1bmN0aW9uKG4scixhLGUsdSxvKXt2YXIgaSxjO2ZvcihyfHwocj0yKSxhfHwoYT0wKSxjPWU/TWF0aC5taW4oZSpyK2Esbi5sZW5ndGgpOm4ubGVuZ3RoLGk9YTtjPmk7aSs9cil0WzBdPW5baV0sdFsxXT1uW2krMV0sdSh0LHQsbyksbltpXT10WzBdLG5baSsxXT10WzFdO3JldHVybiBufX0oKSxlLnN0cj1mdW5jdGlvbih0KXtyZXR1cm4idmVjMigiK3RbMF0rIiwgIit0WzFdKyIpIn0sdC5leHBvcnRzPWV9XSl9KTsndXNlIHN0cmljdCc7KGZ1bmN0aW9uKGdsb2JhbCl7aWYodHIuaXNOb2RlKXtjb25zdCBnbE1hdHJpeEFic1BhdGg9SFRNTEltcG9ydHNMb2FkZXIuaHJlZlRvQWJzb2x1dGVQYXRoKCcvZ2wtbWF0cml4LW1pbi5qcycpO2NvbnN0IGdsTWF0cml4TW9kdWxlPXJlcXVpcmUoZ2xNYXRyaXhBYnNQYXRoKTtmb3IoY29uc3QgZXhwb3J0TmFtZSBpbiBnbE1hdHJpeE1vZHVsZSl7Z2xvYmFsW2V4cG9ydE5hbWVdPWdsTWF0cml4TW9kdWxlW2V4cG9ydE5hbWVdO319fSkodGhpcyk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iLm1hdGgnLGZ1bmN0aW9uKCl7Y29uc3QgUFJFRkVSUkVEX05VTUJFUl9TRVJJRVNfTVVMVElQTElFUlM9WzEsMiw1LDEwXTtmdW5jdGlvbiBhcHByb3hpbWF0ZWx5KHgseSxkZWx0YSl7aWYoZGVsdGE9PT11bmRlZmluZWQpZGVsdGE9MWUtOTtyZXR1cm4gTWF0aC5hYnMoeC15KTxkZWx0YTt9Ci1mdW5jdGlvbiBjbGFtcCh4LGxvLGhpKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoeCxsbyksaGkpO30KLWZ1bmN0aW9uIGxlcnAocGVyY2VudGFnZSxsbyxoaSl7Y29uc3QgcmFuZ2U9aGktbG87cmV0dXJuIGxvK3BlcmNlbnRhZ2UqcmFuZ2U7fQotZnVuY3Rpb24gbm9ybWFsaXplKHZhbHVlLGxvLGhpKXtyZXR1cm4odmFsdWUtbG8pLyhoaS1sbyk7fQotZnVuY3Rpb24gZGVnMnJhZChkZWcpe3JldHVybihNYXRoLlBJKmRlZykvMTgwLjA7fQotZnVuY3Rpb24gZXJmKHgpe2NvbnN0IHNpZ249KHg+PTApPzE6LTE7eD1NYXRoLmFicyh4KTtjb25zdCBhMT0wLjI1NDgyOTU5Mjtjb25zdCBhMj0tMC4yODQ0OTY3MzY7Y29uc3QgYTM9MS40MjE0MTM3NDE7Y29uc3QgYTQ9LTEuNDUzMTUyMDI3O2NvbnN0IGE1PTEuMDYxNDA1NDI5O2NvbnN0IHA9MC4zMjc1OTExO2NvbnN0IHQ9MS4wLygxLjArcCp4KTtjb25zdCB5PTEuMC0oKCgoKGE1KnQrYTQpKnQpK2EzKSp0K2EyKSp0K2ExKSp0Kk1hdGguZXhwKC14KngpO3JldHVybiBzaWduKnk7fQotY29uc3QgdG1wVmVjMj12ZWMyLmNyZWF0ZSgpO2NvbnN0IHRtcFZlYzJiPXZlYzIuY3JlYXRlKCk7Y29uc3QgdG1wVmVjND12ZWM0LmNyZWF0ZSgpO2NvbnN0IHRtcE1hdDJkPW1hdDJkLmNyZWF0ZSgpO3ZlYzIuY3JlYXRlRnJvbUFycmF5PWZ1bmN0aW9uKGFycil7aWYoYXJyLmxlbmd0aCE9PTIpdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgYmUgbGVuZ3RoIDInKTtjb25zdCB2PXZlYzIuY3JlYXRlKCk7dmVjMi5zZXQodixhcnJbMF0sYXJyWzFdKTtyZXR1cm4gdjt9O3ZlYzIuY3JlYXRlWFk9ZnVuY3Rpb24oeCx5KXtjb25zdCB2PXZlYzIuY3JlYXRlKCk7dmVjMi5zZXQodix4LHkpO3JldHVybiB2O307dmVjMi50b1N0cmluZz1mdW5jdGlvbihhKXtyZXR1cm4nWycrYVswXSsnLCAnK2FbMV0rJ10nO307dmVjMi5hZGRUd29TY2FsZWRVbml0VmVjdG9ycz1mdW5jdGlvbihvdXQsdTEsc2NhbGUxLHUyLHNjYWxlMil7dmVjMi5zY2FsZSh0bXBWZWMyLHUxLHNjYWxlMSk7dmVjMi5zY2FsZSh0bXBWZWMyYix1MixzY2FsZTIpO3ZlYzIuYWRkKG91dCx0bXBWZWMyLHRtcFZlYzJiKTt9O3ZlYzIuaW50ZXJwb2xhdGVQaWVjZXdpc2VGdW5jdGlvbj1mdW5jdGlvbihwb2ludHMseCl7aWYoeDxwb2ludHNbMF1bMF0pcmV0dXJuIHBvaW50c1swXVsxXTtmb3IobGV0IGk9MTtpPHBvaW50cy5sZW5ndGg7KytpKXtpZih4PHBvaW50c1tpXVswXSl7Y29uc3QgcGVyY2VudD1ub3JtYWxpemUoeCxwb2ludHNbaS0xXVswXSxwb2ludHNbaV1bMF0pO3JldHVybiBsZXJwKHBlcmNlbnQscG9pbnRzW2ktMV1bMV0scG9pbnRzW2ldWzFdKTt9fQotcmV0dXJuIHBvaW50c1twb2ludHMubGVuZ3RoLTFdWzFdO307dmVjMy5jcmVhdGVYWVo9ZnVuY3Rpb24oeCx5LHope2NvbnN0IHY9dmVjMy5jcmVhdGUoKTt2ZWMzLnNldCh2LHgseSx6KTtyZXR1cm4gdjt9O3ZlYzMudG9TdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuJ3ZlYzMoJythWzBdKycsICcrYVsxXSsnLCAnK2FbMl0rJyknO307bWF0MmQudHJhbnNsYXRlWFk9ZnVuY3Rpb24ob3V0LHgseSl7dmVjMi5zZXQodG1wVmVjMix4LHkpO21hdDJkLnRyYW5zbGF0ZShvdXQsb3V0LHRtcFZlYzIpO307bWF0MmQuc2NhbGVYWT1mdW5jdGlvbihvdXQseCx5KXt2ZWMyLnNldCh0bXBWZWMyLHgseSk7bWF0MmQuc2NhbGUob3V0LG91dCx0bXBWZWMyKTt9O3ZlYzQudW5pdGl6ZT1mdW5jdGlvbihvdXQsYSl7b3V0WzBdPWFbMF0vYVszXTtvdXRbMV09YVsxXS9hWzNdO291dFsyXT1hWzJdL2FbM107b3V0WzNdPTE7cmV0dXJuIG91dDt9O3ZlYzIuY29weUZyb21WZWM0PWZ1bmN0aW9uKG91dCxhKXt2ZWM0LnVuaXRpemUodG1wVmVjNCxhKTt2ZWMyLmNvcHkob3V0LHRtcFZlYzQpO307ZnVuY3Rpb24gbG9nT3JMb2cxMCh4LGJhc2Upe2lmKGJhc2U9PT0xMClyZXR1cm4gTWF0aC5sb2cxMCh4KTtyZXR1cm4gTWF0aC5sb2coeCkvTWF0aC5sb2coYmFzZSk7fQotZnVuY3Rpb24gbGVzc2VyUG93ZXIoeCxvcHRfYmFzZSl7Y29uc3QgYmFzZT1vcHRfYmFzZXx8MTA7cmV0dXJuIE1hdGgucG93KGJhc2UsTWF0aC5mbG9vcihsb2dPckxvZzEwKHgsYmFzZSkpKTt9Ci1mdW5jdGlvbiBncmVhdGVyUG93ZXIoeCxvcHRfYmFzZSl7Y29uc3QgYmFzZT1vcHRfYmFzZXx8MTA7cmV0dXJuIE1hdGgucG93KGJhc2UsTWF0aC5jZWlsKGxvZ09yTG9nMTAoeCxiYXNlKSkpO30KLWZ1bmN0aW9uIGxlc3Nlcldob2xlTnVtYmVyKHgpe2lmKHg9PT0wKXJldHVybiAwO2NvbnN0IHBvdzEwPSh4PDApPy1sZXNzZXJQb3dlcigteCk6bGVzc2VyUG93ZXIoeCk7cmV0dXJuIHBvdzEwKk1hdGguZmxvb3IoeC9wb3cxMCk7fQotZnVuY3Rpb24gZ3JlYXRlcldob2xlTnVtYmVyKHgpe2lmKHg9PT0wKXJldHVybiAwO2NvbnN0IHBvdzEwPSh4PDApPy1sZXNzZXJQb3dlcigteCk6bGVzc2VyUG93ZXIoeCk7cmV0dXJuIHBvdzEwKk1hdGguY2VpbCh4L3BvdzEwKTt9Ci1mdW5jdGlvbiBwcmVmZXJyZWROdW1iZXJMYXJnZXJUaGFuTWluKG1pbil7Y29uc3QgYWJzTWluPU1hdGguYWJzKG1pbik7Y29uc3QgY29uc2VydmF0aXZlR3Vlc3M9dHIuYi5tYXRoLmxlc3NlclBvd2VyKGFic01pbik7bGV0IG1pblByZWZlcmVkTnVtYmVyPXVuZGVmaW5lZDtmb3IoY29uc3QgbXVsdGlwbGllciBvZiBQUkVGRVJSRURfTlVNQkVSX1NFUklFU19NVUxUSVBMSUVSUyl7Y29uc3QgdGlnaHRlbmVkR3Vlc3M9Y29uc2VydmF0aXZlR3Vlc3MqbXVsdGlwbGllcjtpZih0aWdodGVuZWRHdWVzcz49YWJzTWluKXttaW5QcmVmZXJlZE51bWJlcj10aWdodGVuZWRHdWVzczticmVhazt9fQotaWYobWluUHJlZmVyZWROdW1iZXI9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignQ291bGQgbm90IGNvbXB1dGUgcHJlZmVycmVkIG51bWJlciBmb3IgJyttaW4pO30KLWlmKG1pbjwwKW1pblByZWZlcmVkTnVtYmVyKj0tMTtyZXR1cm4gbWluUHJlZmVyZWROdW1iZXI7fQotcmV0dXJue2FwcHJveGltYXRlbHksY2xhbXAsbGVycCxub3JtYWxpemUsZGVnMnJhZCxlcmYsbGVzc2VyUG93ZXIsZ3JlYXRlclBvd2VyLGxlc3Nlcldob2xlTnVtYmVyLGdyZWF0ZXJXaG9sZU51bWJlcixwcmVmZXJyZWROdW1iZXJMYXJnZXJUaGFuTWluLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iLm1hdGgnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUmFuZ2UoKXt0aGlzLmlzRW1wdHlfPXRydWU7dGhpcy5taW5fPXVuZGVmaW5lZDt0aGlzLm1heF89dW5kZWZpbmVkO30KLVJhbmdlLnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdC5wcm90b3R5cGUsY2xvbmUoKXtpZih0aGlzLmlzRW1wdHkpcmV0dXJuIG5ldyBSYW5nZSgpO3JldHVybiBSYW5nZS5mcm9tRXhwbGljaXRSYW5nZSh0aGlzLm1pbl8sdGhpcy5tYXhfKTt9LHJlc2V0KCl7dGhpcy5pc0VtcHR5Xz10cnVlO3RoaXMubWluXz11bmRlZmluZWQ7dGhpcy5tYXhfPXVuZGVmaW5lZDt9LGdldCBpc0VtcHR5KCl7cmV0dXJuIHRoaXMuaXNFbXB0eV87fSxhZGRSYW5nZShyYW5nZSl7aWYocmFuZ2UuaXNFbXB0eSlyZXR1cm47dGhpcy5hZGRWYWx1ZShyYW5nZS5taW4pO3RoaXMuYWRkVmFsdWUocmFuZ2UubWF4KTt9LGFkZFZhbHVlKHZhbHVlKXtpZih0aGlzLmlzRW1wdHlfKXt0aGlzLm1heF89dmFsdWU7dGhpcy5taW5fPXZhbHVlO3RoaXMuaXNFbXB0eV89ZmFsc2U7cmV0dXJuO30KLXRoaXMubWF4Xz1NYXRoLm1heCh0aGlzLm1heF8sdmFsdWUpO3RoaXMubWluXz1NYXRoLm1pbih0aGlzLm1pbl8sdmFsdWUpO30sc2V0IG1pbihtaW4pe3RoaXMuaXNFbXB0eV89ZmFsc2U7dGhpcy5taW5fPW1pbjt9LGdldCBtaW4oKXtpZih0aGlzLmlzRW1wdHlfKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMubWluXzt9LGdldCBtYXgoKXtpZih0aGlzLmlzRW1wdHlfKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMubWF4Xzt9LHNldCBtYXgobWF4KXt0aGlzLmlzRW1wdHlfPWZhbHNlO3RoaXMubWF4Xz1tYXg7fSxnZXQgcmFuZ2UoKXtpZih0aGlzLmlzRW1wdHlfKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMubWF4Xy10aGlzLm1pbl87fSxnZXQgY2VudGVyKCl7cmV0dXJuKHRoaXMubWluXyt0aGlzLm1heF8pKjAuNTt9LGdldCBkdXJhdGlvbigpe2lmKHRoaXMuaXNFbXB0eV8pcmV0dXJuIDA7cmV0dXJuIHRoaXMubWF4Xy10aGlzLm1pbl87fSxlbmNsb3NpbmdQb3dlcnMob3B0X2Jhc2Upe2lmKHRoaXMuaXNFbXB0eSlyZXR1cm4gbmV3IFJhbmdlKCk7cmV0dXJuIFJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHRyLmIubWF0aC5sZXNzZXJQb3dlcih0aGlzLm1pbl8sb3B0X2Jhc2UpLHRyLmIubWF0aC5ncmVhdGVyUG93ZXIodGhpcy5tYXhfLG9wdF9iYXNlKSk7fSxub3JtYWxpemUoeCl7cmV0dXJuIHRyLmIubWF0aC5ub3JtYWxpemUoeCx0aGlzLm1pbix0aGlzLm1heCk7fSxsZXJwKHgpe3JldHVybiB0ci5iLm1hdGgubGVycCh4LHRoaXMubWluLHRoaXMubWF4KTt9LGNsYW1wKHgpe3JldHVybiB0ci5iLm1hdGguY2xhbXAoeCx0aGlzLm1pbix0aGlzLm1heCk7fSxlcXVhbHModGhhdCl7aWYodGhpcy5pc0VtcHR5JiZ0aGF0LmlzRW1wdHkpcmV0dXJuIHRydWU7aWYodGhpcy5pc0VtcHR5IT09dGhhdC5pc0VtcHR5KXJldHVybiBmYWxzZTtyZXR1cm4odHIuYi5tYXRoLmFwcHJveGltYXRlbHkodGhpcy5taW4sdGhhdC5taW4pJiZ0ci5iLm1hdGguYXBwcm94aW1hdGVseSh0aGlzLm1heCx0aGF0Lm1heCkpO30sY29udGFpbnNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKG1pbixtYXgpe2lmKHRoaXMuaXNFbXB0eSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRoaXMubWluXzw9bWluJiZtYXg8PXRoaXMubWF4Xzt9LGNvbnRhaW5zRXhwbGljaXRSYW5nZUV4Y2x1c2l2ZShtaW4sbWF4KXtpZih0aGlzLmlzRW1wdHkpcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLm1pbl88bWluJiZtYXg8dGhpcy5tYXhfO30saW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUobWluLG1heCl7aWYodGhpcy5pc0VtcHR5KXJldHVybiBmYWxzZTtyZXR1cm4gdGhpcy5taW5fPD1tYXgmJm1pbjw9dGhpcy5tYXhfO30saW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VFeGNsdXNpdmUobWluLG1heCl7aWYodGhpcy5pc0VtcHR5KXJldHVybiBmYWxzZTtyZXR1cm4gdGhpcy5taW5fPG1heCYmbWluPHRoaXMubWF4Xzt9LGNvbnRhaW5zUmFuZ2VJbmNsdXNpdmUocmFuZ2Upe2lmKHJhbmdlLmlzRW1wdHkpcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLmNvbnRhaW5zRXhwbGljaXRSYW5nZUluY2x1c2l2ZShyYW5nZS5taW5fLHJhbmdlLm1heF8pO30sY29udGFpbnNSYW5nZUV4Y2x1c2l2ZShyYW5nZSl7aWYocmFuZ2UuaXNFbXB0eSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRoaXMuY29udGFpbnNFeHBsaWNpdFJhbmdlRXhjbHVzaXZlKHJhbmdlLm1pbl8scmFuZ2UubWF4Xyk7fSxpbnRlcnNlY3RzUmFuZ2VJbmNsdXNpdmUocmFuZ2Upe2lmKHJhbmdlLmlzRW1wdHkpcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHJhbmdlLm1pbl8scmFuZ2UubWF4Xyk7fSxpbnRlcnNlY3RzUmFuZ2VFeGNsdXNpdmUocmFuZ2Upe2lmKHJhbmdlLmlzRW1wdHkpcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLmludGVyc2VjdHNFeHBsaWNpdFJhbmdlRXhjbHVzaXZlKHJhbmdlLm1pbl8scmFuZ2UubWF4Xyk7fSxmaW5kRXhwbGljaXRJbnRlcnNlY3Rpb25EdXJhdGlvbihtaW4sbWF4KXttaW49TWF0aC5tYXgodGhpcy5taW4sbWluKTttYXg9TWF0aC5taW4odGhpcy5tYXgsbWF4KTtpZihtYXg8bWluKXJldHVybiAwO3JldHVybiBtYXgtbWluO30sZmluZEludGVyc2VjdGlvbihyYW5nZSl7aWYodGhpcy5pc0VtcHR5fHxyYW5nZS5pc0VtcHR5KXJldHVybiBuZXcgUmFuZ2UoKTtjb25zdCBtaW49TWF0aC5tYXgodGhpcy5taW4scmFuZ2UubWluKTtjb25zdCBtYXg9TWF0aC5taW4odGhpcy5tYXgscmFuZ2UubWF4KTtpZihtYXg8bWluKXJldHVybiBuZXcgUmFuZ2UoKTtyZXR1cm4gUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UobWluLG1heCk7fSx0b0pTT04oKXtpZih0aGlzLmlzRW1wdHlfKXJldHVybntpc0VtcHR5OnRydWV9O3JldHVybntpc0VtcHR5OmZhbHNlLG1heDp0aGlzLm1heCxtaW46dGhpcy5taW59O30sZmlsdGVyQXJyYXkoc29ydGVkQXJyYXksb3B0X2tleUZ1bmMsb3B0X3RoaXMpe2lmKHRoaXMuaXNFbXB0eV8pcmV0dXJuW107Y29uc3Qga2V5RnVuYz1vcHRfa2V5RnVuY3x8KHg9PngpO2Z1bmN0aW9uIGdldFZhbHVlKG9iail7cmV0dXJuIGtleUZ1bmMuY2FsbChvcHRfdGhpcyxvYmopO30KLWNvbnN0IGZpcnN0PXRyLmIuZmluZEZpcnN0VHJ1ZUluZGV4SW5Tb3J0ZWRBcnJheShzb3J0ZWRBcnJheSxvYmo9PnRoaXMubWluXz09PXVuZGVmaW5lZHx8dGhpcy5taW5fPD1nZXRWYWx1ZShvYmopKTtjb25zdCBsYXN0PXRyLmIuZmluZEZpcnN0VHJ1ZUluZGV4SW5Tb3J0ZWRBcnJheShzb3J0ZWRBcnJheSxvYmo9PnRoaXMubWF4XyE9PXVuZGVmaW5lZCYmdGhpcy5tYXhfPGdldFZhbHVlKG9iaikpO3JldHVybiBzb3J0ZWRBcnJheS5zbGljZShmaXJzdCxsYXN0KTt9fTtSYW5nZS5mcm9tRGljdD1mdW5jdGlvbihkKXtpZihkLmlzRW1wdHk9PT10cnVlKXJldHVybiBuZXcgUmFuZ2UoKTtpZihkLmlzRW1wdHk9PT1mYWxzZSl7Y29uc3QgcmFuZ2U9bmV3IFJhbmdlKCk7cmFuZ2UubWluPWQubWluO3JhbmdlLm1heD1kLm1heDtyZXR1cm4gcmFuZ2U7fQotdGhyb3cgbmV3IEVycm9yKCdOb3QgYSByYW5nZScpO307UmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2U9ZnVuY3Rpb24obWluLG1heCl7Y29uc3QgcmFuZ2U9bmV3IFJhbmdlKCk7cmFuZ2UubWluPW1pbjtyYW5nZS5tYXg9bWF4O3JldHVybiByYW5nZTt9O1JhbmdlLmNvbXBhcmVCeU1pblRpbWVzPWZ1bmN0aW9uKGEsYil7aWYoIWEuaXNFbXB0eSYmIWIuaXNFbXB0eSlyZXR1cm4gYS5taW5fLWIubWluXztpZihhLmlzRW1wdHkmJiFiLmlzRW1wdHkpcmV0dXJuLTE7aWYoIWEuaXNFbXB0eSYmYi5pc0VtcHR5KXJldHVybiAxO3JldHVybiAwO307UmFuZ2UuZmluZERpZmZlcmVuY2U9ZnVuY3Rpb24ocmFuZ2VBLHJhbmdlQil7aWYoIXJhbmdlQXx8cmFuZ2VBLmR1cmF0aW9uPDB8fCFyYW5nZUJ8fHJhbmdlQi5kdXJhdGlvbjwwKXt0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IHN1YnRyYWN0IHJhbmdlc2ApO30KLWNvbnN0IHJlc3VsdFJhbmdlcz1bXTtpZihyYW5nZUEuaXNFbXB0eSlyZXR1cm4gcmVzdWx0UmFuZ2VzO2lmKHJhbmdlQi5pc0VtcHR5KXJldHVybltyYW5nZUEuY2xvbmUoKV07Y29uc3QgaW50ZXJzZWN0aW9uPXJhbmdlQS5maW5kSW50ZXJzZWN0aW9uKHJhbmdlQik7aWYoaW50ZXJzZWN0aW9uLmlzRW1wdHkpe3JldHVybltyYW5nZUEuY2xvbmUoKV07fQotaWYocmFuZ2VBLmR1cmF0aW9uPT09MCYmcmFuZ2VCLmR1cmF0aW9uPT09MCl7aWYoaW50ZXJzZWN0aW9uLmVtcHR5KXJldHVybltyYW5nZUEuY2xvbmUoKV07ZWxzZSBpZihpbnRlcnNlY3Rpb24uZHVyYXRpb249PT0wKXJldHVybiByZXN1bHRSYW5nZXM7dGhyb3cgbmV3IEVycm9yKGBUd28gcG9pbnRzJyBpbnRlcnNlY3Rpb24gY2FuIG9ubHkgYmUgYSBwb2ludCBvciBlbXB0eWApO30KLWNvbnN0IGxlZnRSYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UocmFuZ2VBLm1pbixpbnRlcnNlY3Rpb24ubWluKTtpZihsZWZ0UmFuZ2UuZHVyYXRpb24+MCl7cmVzdWx0UmFuZ2VzLnB1c2gobGVmdFJhbmdlKTt9Ci1jb25zdCByaWdodFJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShpbnRlcnNlY3Rpb24ubWF4LHJhbmdlQS5tYXgpO2lmKHJpZ2h0UmFuZ2UuZHVyYXRpb24+MCl7cmVzdWx0UmFuZ2VzLnB1c2gocmlnaHRSYW5nZSk7fQotcmV0dXJuIHJlc3VsdFJhbmdlczt9O1JhbmdlLlBFUkNFTlRfUkFOR0U9UmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoMCwxKTtPYmplY3QuZnJlZXplKFJhbmdlLlBFUkNFTlRfUkFOR0UpO3JldHVybntSYW5nZSx9O30pOyd1c2Ugc3RyaWN0JzsoZnVuY3Rpb24oZXhwb3J0cyl7dmFyIHJhbms9e3N0YW5kYXJkOmZ1bmN0aW9uKGFycmF5LGtleSl7YXJyYXk9YXJyYXkuc29ydChmdW5jdGlvbihhLGIpe3ZhciB4PWFba2V5XTt2YXIgeT1iW2tleV07cmV0dXJuKCh4PHkpPy0xOigoeD55KT8xOjApKTt9KTtmb3IodmFyIGk9MTtpPGFycmF5Lmxlbmd0aCsxO2krKyl7YXJyYXlbaS0xXVsncmFuayddPWk7fQotcmV0dXJuIGFycmF5O30sZnJhY3Rpb25hbDpmdW5jdGlvbihhcnJheSxrZXkpe2FycmF5PXRoaXMuc3RhbmRhcmQoYXJyYXksa2V5KTt2YXIgcG9zPTA7d2hpbGUocG9zPGFycmF5Lmxlbmd0aCl7dmFyIHN1bT0wO3ZhciBpPTA7Zm9yKGk9MDthcnJheVtwb3MraSsxXSYmKGFycmF5W3BvcytpXVtrZXldPT09YXJyYXlbcG9zK2krMV1ba2V5XSk7aSsrKXtzdW0rPWFycmF5W3BvcytpXVsncmFuayddO30KLXN1bSs9YXJyYXlbcG9zK2ldWydyYW5rJ107dmFyIGVuZFBvcz1wb3MraSsxO2Zvcihwb3M7cG9zPGVuZFBvcztwb3MrKyl7YXJyYXlbcG9zXVsncmFuayddPXN1bS8oaSsxKTt9Ci1wb3M9ZW5kUG9zO30KLXJldHVybiBhcnJheTt9LHJhbms6ZnVuY3Rpb24oeCx5KXt2YXIgbng9eC5sZW5ndGgsbnk9eS5sZW5ndGgsY29tYmluZWQ9W10scmFua2VkO3doaWxlKG54LS0pe2NvbWJpbmVkLnB1c2goe3NldDoneCcsdmFsOnhbbnhdfSk7fQotd2hpbGUobnktLSl7Y29tYmluZWQucHVzaCh7c2V0Oid5Jyx2YWw6eVtueV19KTt9Ci1yYW5rZWQ9dGhpcy5mcmFjdGlvbmFsKGNvbWJpbmVkLCd2YWwnKTtyZXR1cm4gcmFua2VkfX07dmFyIGVyZj1mdW5jdGlvbiBlcmYoeCl7dmFyIGNvZj1bLTEuMzAyNjUzNzE5NzgxNzA5NCw2LjQxOTY5NzkyMzU2NDkwMjZlLTEsMS45NDc2NDczMjA0MTg1ODM2ZS0yLC05LjU2MTUxNDc4NjgwODYzMWUtMywtOS40NjU5NTM0NDQ4MjAzNmUtNCwzLjY2ODM5NDk3ODUyNzYxZS00LDQuMjUyMzMyNDgwNjkwN2UtNSwtMi4wMjc4NTc4MTEyNTM0ZS01LC0xLjYyNDI5MDAwNDY0N2UtNiwxLjMwMzY1NTgzNTU4MGUtNiwxLjU2MjY0NDE3MjJlLTgsLTguNTIzODA5NTkxNWUtOCw2LjUyOTA1NDQzOWUtOSw1LjA1OTM0MzQ5NWUtOSwtOS45MTM2NDE1NmUtMTAsLTIuMjczNjUxMjJlLTEwLDkuNjQ2NzkxMWUtMTEsMi4zOTQwMzhlLTEyLC02Ljg4NjAyN2UtMTIsOC45NDQ4N2UtMTMsMy4xMzA5MmUtMTMsLTEuMTI3MDhlLTEzLDMuODFlLTE2LDcuMTA2ZS0xNSwtMS41MjNlLTE1LC05LjRlLTE3LDEuMjFlLTE2LC0yLjhlLTE3XTt2YXIgaj1jb2YubGVuZ3RoLTE7dmFyIGlzbmVnPWZhbHNlO3ZhciBkPTA7dmFyIGRkPTA7dmFyIHQsdHksdG1wLHJlcztpZih4PDApe3g9LXg7aXNuZWc9dHJ1ZTt9Ci10PTIvKDIreCk7dHk9NCp0LTI7Zm9yKDtqPjA7ai0tKXt0bXA9ZDtkPXR5KmQtZGQrY29mW2pdO2RkPXRtcDt9Ci1yZXM9dCpNYXRoLmV4cCgteCp4KzAuNSooY29mWzBdK3R5KmQpLWRkKTtyZXR1cm4gaXNuZWc/cmVzLTE6MS1yZXM7fTt2YXIgZG5vcm09ZnVuY3Rpb24oeCxtZWFuLHN0ZCl7cmV0dXJuIDAuNSooMStlcmYoKHgtbWVhbikvTWF0aC5zcXJ0KDIqc3RkKnN0ZCkpKTt9Ci12YXIgc3RhdGlzdGljPWZ1bmN0aW9uKHgseSl7dmFyIHJhbmtlZD1yYW5rLnJhbmsoeCx5KSxucj1yYW5rZWQubGVuZ3RoLG54PXgubGVuZ3RoLG55PXkubGVuZ3RoLHJhbmtzdW1zPXt4OjAseTowfSxpPTAsdD0wLG50PTEsdGNmLHV4LHV5O3doaWxlKGk8bnIpe2lmKGk+MCl7aWYocmFua2VkW2ldLnZhbD09cmFua2VkW2ktMV0udmFsKXtudCsrO31lbHNle2lmKG50PjEpe3QrPU1hdGgucG93KG50LDMpLW50Ci1udD0xO319fQotcmFua3N1bXNbcmFua2VkW2ldLnNldF0rPXJhbmtlZFtpXS5yYW5rCi1pKys7fQotdGNmPTEtKHQvKE1hdGgucG93KG5yLDMpLW5yKSkKLXV4PW54Km55KyhueCoobngrMSkvMiktcmFua3N1bXMueDt1eT1ueCpueS11eDtyZXR1cm57dGNmOnRjZix1eDp1eCx1eTp1eSxiaWc6TWF0aC5tYXgodXgsdXkpLHNtYWxsOk1hdGgubWluKHV4LHV5KX19Ci1leHBvcnRzLnRlc3Q9ZnVuY3Rpb24oeCx5LGFsdCxjb3JyKXthbHQ9dHlwZW9mIGFsdCE9PSd1bmRlZmluZWQnP2FsdDondHdvLXNpZGVkJztjb3JyPXR5cGVvZiBjb3JyIT09J3VuZGVmaW5lZCc/Y29ycjp0cnVlO3ZhciBueD14Lmxlbmd0aCxueT15Lmxlbmd0aCxmPTEsdSxtdSxzdGQseixwO3U9c3RhdGlzdGljKHgseSk7aWYoY29ycil7bXU9KG54Km55LzIpKzAuNTt9ZWxzZXttdT1ueCpueS8yO30KLXN0ZD1NYXRoLnNxcnQodS50Y2YqbngqbnkqKG54K255KzEpLzEyKTtpZihhbHQ9PSdsZXNzJyl7ej0odS51eC1tdSkvc3RkO31lbHNlIGlmKGFsdD09J2dyZWF0ZXInKXt6PSh1LnV5LW11KS9zdGQ7fWVsc2UgaWYoYWx0PT0ndHdvLXNpZGVkJyl7ej1NYXRoLmFicygodS5iaWctbXUpL3N0ZCk7fWVsc2V7Y29uc29sZS5sb2coJ1Vua25vd24gYWx0ZXJuYXRpdmUgYXJndW1lbnQnKTt9Ci1pZihhbHQ9PSd0d28tc2lkZWQnKXtmPTI7fQotcD1kbm9ybSgteiwwLDEpKmY7cmV0dXJue1U6dS5zbWFsbCxwOnB9O319KSh0eXBlb2YgZXhwb3J0cz09PSd1bmRlZmluZWQnP3RoaXNbJ21hbm53aGl0bmV5dSddPXt9OmV4cG9ydHMpOyd1c2Ugc3RyaWN0JzsoZnVuY3Rpb24oZ2xvYmFsKXtpZih0ci5pc05vZGUpe2NvbnN0IG13dUFic1BhdGg9SFRNTEltcG9ydHNMb2FkZXIuaHJlZlRvQWJzb2x1dGVQYXRoKCcvbWFubndoaXRuZXl1LmpzJyk7Y29uc3QgbXd1TW9kdWxlPXJlcXVpcmUobXd1QWJzUGF0aCk7Zm9yKGNvbnN0IGV4cG9ydE5hbWUgaW4gbXd1TW9kdWxlKXtnbG9iYWxbZXhwb3J0TmFtZV09bXd1TW9kdWxlW2V4cG9ydE5hbWVdO319fSkodGhpcyk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iLm1hdGgnLGZ1bmN0aW9uKCl7Y29uc3QgU3RhdGlzdGljcz17fTtTdGF0aXN0aWNzLmRpdmlkZUlmUG9zc2libGVPclplcm89ZnVuY3Rpb24obnVtZXJhdG9yLGRlbm9taW5hdG9yKXtpZihkZW5vbWluYXRvcj09PTApcmV0dXJuIDA7cmV0dXJuIG51bWVyYXRvci9kZW5vbWluYXRvcjt9O1N0YXRpc3RpY3Muc3VtPWZ1bmN0aW9uKGFyeSxvcHRfZnVuYyxvcHRfdGhpcyl7Y29uc3QgZnVuYz1vcHRfZnVuY3x8KHg9PngpO2xldCByZXQ9MDtsZXQgaT0wO2Zvcihjb25zdCBlbHQgb2YgYXJ5KXtyZXQrPWZ1bmMuY2FsbChvcHRfdGhpcyxlbHQsaSsrKTt9Ci1yZXR1cm4gcmV0O307U3RhdGlzdGljcy5tZWFuPWZ1bmN0aW9uKGFyeSxvcHRfZnVuYyxvcHRfdGhpcyl7Y29uc3QgZnVuYz1vcHRfZnVuY3x8KHg9PngpO2xldCBzdW09MDtsZXQgaT0wO2Zvcihjb25zdCBlbHQgb2YgYXJ5KXtzdW0rPWZ1bmMuY2FsbChvcHRfdGhpcyxlbHQsaSsrKTt9Ci1pZihpPT09MClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBzdW0vaTt9O1N0YXRpc3RpY3MuZ2VvbWV0cmljTWVhbj1mdW5jdGlvbihhcnksb3B0X2Z1bmMsb3B0X3RoaXMpe2NvbnN0IGZ1bmM9b3B0X2Z1bmN8fCh4PT54KTtsZXQgaT0wO2xldCBsb2dzdW09MDtmb3IoY29uc3QgZWx0IG9mIGFyeSl7Y29uc3QgeD1mdW5jLmNhbGwob3B0X3RoaXMsZWx0LGkrKyk7aWYoeDw9MClyZXR1cm4gMDtsb2dzdW0rPU1hdGgubG9nKE1hdGguYWJzKHgpKTt9Ci1pZihpPT09MClyZXR1cm4gMTtyZXR1cm4gTWF0aC5leHAobG9nc3VtL2kpO307U3RhdGlzdGljcy53ZWlnaHRlZE1lYW49ZnVuY3Rpb24oYXJ5LHdlaWdodENhbGxiYWNrLG9wdF92YWx1ZUNhbGxiYWNrLG9wdF90aGlzKXtjb25zdCB2YWx1ZUNhbGxiYWNrPW9wdF92YWx1ZUNhbGxiYWNrfHwoeD0+eCk7bGV0IG51bWVyYXRvcj0wO2xldCBkZW5vbWluYXRvcj0wO2xldCBpPS0xO2Zvcihjb25zdCBlbHQgb2YgYXJ5KXtpKys7Y29uc3QgdmFsdWU9dmFsdWVDYWxsYmFjay5jYWxsKG9wdF90aGlzLGVsdCxpKTtpZih2YWx1ZT09PXVuZGVmaW5lZCljb250aW51ZTtjb25zdCB3ZWlnaHQ9d2VpZ2h0Q2FsbGJhY2suY2FsbChvcHRfdGhpcyxlbHQsaSx2YWx1ZSk7bnVtZXJhdG9yKz13ZWlnaHQqdmFsdWU7ZGVub21pbmF0b3IrPXdlaWdodDt9Ci1pZihkZW5vbWluYXRvcj09PTApcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gbnVtZXJhdG9yL2Rlbm9taW5hdG9yO307U3RhdGlzdGljcy52YXJpYW5jZT1mdW5jdGlvbihhcnksb3B0X2Z1bmMsb3B0X3RoaXMpe2lmKGFyeS5sZW5ndGg9PT0wKXJldHVybiB1bmRlZmluZWQ7aWYoYXJ5Lmxlbmd0aD09PTEpcmV0dXJuIDA7Y29uc3QgZnVuYz1vcHRfZnVuY3x8KHg9PngpO2NvbnN0IG1lYW49U3RhdGlzdGljcy5tZWFuKGFyeSxmdW5jLG9wdF90aGlzKTtjb25zdCBzdW1PZlNxdWFyZWREaXN0YW5jZXM9U3RhdGlzdGljcy5zdW0oYXJ5LGZ1bmN0aW9uKGQsaSl7Y29uc3Qgdj1mdW5jLmNhbGwodGhpcyxkLGkpLW1lYW47cmV0dXJuIHYqdjt9LG9wdF90aGlzKTtyZXR1cm4gc3VtT2ZTcXVhcmVkRGlzdGFuY2VzLyhhcnkubGVuZ3RoLTEpO307U3RhdGlzdGljcy5zdGRkZXY9ZnVuY3Rpb24oYXJ5LG9wdF9mdW5jLG9wdF90aGlzKXtpZihhcnkubGVuZ3RoPT09MClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBNYXRoLnNxcnQoU3RhdGlzdGljcy52YXJpYW5jZShhcnksb3B0X2Z1bmMsb3B0X3RoaXMpKTt9O1N0YXRpc3RpY3MubWF4PWZ1bmN0aW9uKGFyeSxvcHRfZnVuYyxvcHRfdGhpcyl7Y29uc3QgZnVuYz1vcHRfZnVuY3x8KHg9PngpO2xldCByZXQ9LUluZmluaXR5O2xldCBpPTA7Zm9yKGNvbnN0IGVsdCBvZiBhcnkpe3JldD1NYXRoLm1heChyZXQsZnVuYy5jYWxsKG9wdF90aGlzLGVsdCxpKyspKTt9Ci1yZXR1cm4gcmV0O307U3RhdGlzdGljcy5taW49ZnVuY3Rpb24oYXJ5LG9wdF9mdW5jLG9wdF90aGlzKXtjb25zdCBmdW5jPW9wdF9mdW5jfHwoeD0+eCk7bGV0IHJldD1JbmZpbml0eTtsZXQgaT0wO2Zvcihjb25zdCBlbHQgb2YgYXJ5KXtyZXQ9TWF0aC5taW4ocmV0LGZ1bmMuY2FsbChvcHRfdGhpcyxlbHQsaSsrKSk7fQotcmV0dXJuIHJldDt9O1N0YXRpc3RpY3MucmFuZ2U9ZnVuY3Rpb24oYXJ5LG9wdF9mdW5jLG9wdF90aGlzKXtjb25zdCBmdW5jPW9wdF9mdW5jfHwoeD0+eCk7Y29uc3QgcmV0PW5ldyB0ci5iLm1hdGguUmFuZ2UoKTtsZXQgaT0wO2Zvcihjb25zdCBlbHQgb2YgYXJ5KXtyZXQuYWRkVmFsdWUoZnVuYy5jYWxsKG9wdF90aGlzLGVsdCxpKyspKTt9Ci1yZXR1cm4gcmV0O307U3RhdGlzdGljcy5wZXJjZW50aWxlPWZ1bmN0aW9uKGFyeSxwZXJjZW50LG9wdF9mdW5jLG9wdF90aGlzKXtpZighKHBlcmNlbnQ+PTAmJnBlcmNlbnQ8PTEpKXt0aHJvdyBuZXcgRXJyb3IoJ3BlcmNlbnQgbXVzdCBiZSBbMCwxXScpO30KLWNvbnN0IGZ1bmM9b3B0X2Z1bmN8fCh4PT54KTtjb25zdCB0bXA9bmV3IEFycmF5KGFyeS5sZW5ndGgpO2xldCBpPTA7Zm9yKGNvbnN0IGVsdCBvZiBhcnkpe3RtcFtpXT1mdW5jLmNhbGwob3B0X3RoaXMsZWx0LGkrKyk7fQotdG1wLnNvcnQoKGEsYik9PmEtYik7Y29uc3QgaWR4PU1hdGguZmxvb3IoKGFyeS5sZW5ndGgtMSkqcGVyY2VudCk7cmV0dXJuIHRtcFtpZHhdO307U3RhdGlzdGljcy5ub3JtYWxpemVTYW1wbGVzPWZ1bmN0aW9uKHNhbXBsZXMpe2lmKHNhbXBsZXMubGVuZ3RoPT09MCl7cmV0dXJue25vcm1hbGl6ZWRfc2FtcGxlczpzYW1wbGVzLHNjYWxlOjEuMH07fQotc2FtcGxlcz1zYW1wbGVzLnNsaWNlKCkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLWI7fSk7Y29uc3QgbG93PU1hdGgubWluLmFwcGx5KG51bGwsc2FtcGxlcyk7Y29uc3QgaGlnaD1NYXRoLm1heC5hcHBseShudWxsLHNhbXBsZXMpO2NvbnN0IG5ld0xvdz0wLjUvc2FtcGxlcy5sZW5ndGg7Y29uc3QgbmV3SGlnaD0oc2FtcGxlcy5sZW5ndGgtMC41KS9zYW1wbGVzLmxlbmd0aDtpZihoaWdoLWxvdz09PTAuMCl7c2FtcGxlcz1BcnJheS5hcHBseShudWxsLG5ldyBBcnJheShzYW1wbGVzLmxlbmd0aCkpLm1hcChmdW5jdGlvbigpe3JldHVybiAwLjU7fSk7cmV0dXJue25vcm1hbGl6ZWRfc2FtcGxlczpzYW1wbGVzLHNjYWxlOjEuMH07fQotY29uc3Qgc2NhbGU9KG5ld0hpZ2gtbmV3TG93KS8oaGlnaC1sb3cpO2ZvcihsZXQgaT0wO2k8c2FtcGxlcy5sZW5ndGg7aSsrKXtzYW1wbGVzW2ldPShzYW1wbGVzW2ldLWxvdykqc2NhbGUrbmV3TG93O30KLXJldHVybntub3JtYWxpemVkX3NhbXBsZXM6c2FtcGxlcyxzY2FsZX07fTtTdGF0aXN0aWNzLmRpc2NyZXBhbmN5PWZ1bmN0aW9uKHNhbXBsZXMsb3B0X2xvY2F0aW9uQ291bnQpe2lmKHNhbXBsZXMubGVuZ3RoPT09MClyZXR1cm4gMC4wO2xldCBtYXhMb2NhbERpc2NyZXBhbmN5PTA7Y29uc3QgaW52U2FtcGxlQ291bnQ9MS4wL3NhbXBsZXMubGVuZ3RoO2NvbnN0IGxvY2F0aW9ucz1bXTtjb25zdCBjb3VudExlc3M9W107Y29uc3QgY291bnRMZXNzRXF1YWw9W107aWYob3B0X2xvY2F0aW9uQ291bnQhPT11bmRlZmluZWQpe2xldCBzYW1wbGVJbmRleD0wO2ZvcihsZXQgaT0wO2k8b3B0X2xvY2F0aW9uQ291bnQ7aSsrKXtjb25zdCBsb2NhdGlvbj1pLyhvcHRfbG9jYXRpb25Db3VudC0xKTtsb2NhdGlvbnMucHVzaChsb2NhdGlvbik7d2hpbGUoc2FtcGxlSW5kZXg8c2FtcGxlcy5sZW5ndGgmJnNhbXBsZXNbc2FtcGxlSW5kZXhdPGxvY2F0aW9uKXtzYW1wbGVJbmRleCs9MTt9Ci1jb3VudExlc3MucHVzaChzYW1wbGVJbmRleCk7d2hpbGUoc2FtcGxlSW5kZXg8c2FtcGxlcy5sZW5ndGgmJnNhbXBsZXNbc2FtcGxlSW5kZXhdPD1sb2NhdGlvbil7c2FtcGxlSW5kZXgrPTE7fQotY291bnRMZXNzRXF1YWwucHVzaChzYW1wbGVJbmRleCk7fX1lbHNle2lmKHNhbXBsZXNbMF0+MC4wKXtsb2NhdGlvbnMucHVzaCgwLjApO2NvdW50TGVzcy5wdXNoKDApO2NvdW50TGVzc0VxdWFsLnB1c2goMCk7fQotZm9yKGxldCBpPTA7aTxzYW1wbGVzLmxlbmd0aDtpKyspe2xvY2F0aW9ucy5wdXNoKHNhbXBsZXNbaV0pO2NvdW50TGVzcy5wdXNoKGkpO2NvdW50TGVzc0VxdWFsLnB1c2goaSsxKTt9Ci1pZihzYW1wbGVzWy0xXTwxLjApe2xvY2F0aW9ucy5wdXNoKDEuMCk7Y291bnRMZXNzLnB1c2goc2FtcGxlcy5sZW5ndGgpO2NvdW50TGVzc0VxdWFsLnB1c2goc2FtcGxlcy5sZW5ndGgpO319Ci1sZXQgbWF4RGlmZj0wO2xldCBtaW5EaWZmPTA7Zm9yKGxldCBpPTE7aTxsb2NhdGlvbnMubGVuZ3RoO2krKyl7Y29uc3QgbGVuZ3RoPWxvY2F0aW9uc1tpXS1sb2NhdGlvbnNbaS0xXTtjb25zdCBjb3VudENsb3NlZD1jb3VudExlc3NFcXVhbFtpXS1jb3VudExlc3NbaS0xXTtjb25zdCBjb3VudE9wZW49Y291bnRMZXNzW2ldLWNvdW50TGVzc0VxdWFsW2ktMV07Y29uc3QgY291bnRDbG9zZWRJbmNyZW1lbnQ9Y291bnRMZXNzRXF1YWxbaV0tY291bnRMZXNzRXF1YWxbaS0xXTtjb25zdCBjb3VudE9wZW5JbmNyZW1lbnQ9Y291bnRMZXNzW2ldLWNvdW50TGVzc1tpLTFdO21heERpZmY9TWF0aC5tYXgoY291bnRDbG9zZWRJbmNyZW1lbnQqaW52U2FtcGxlQ291bnQtbGVuZ3RoK21heERpZmYsY291bnRDbG9zZWQqaW52U2FtcGxlQ291bnQtbGVuZ3RoKTttaW5EaWZmPU1hdGgubWluKGNvdW50T3BlbkluY3JlbWVudCppbnZTYW1wbGVDb3VudC1sZW5ndGgrbWluRGlmZixjb3VudE9wZW4qaW52U2FtcGxlQ291bnQtbGVuZ3RoKTttYXhMb2NhbERpc2NyZXBhbmN5PU1hdGgubWF4KG1heERpZmYsLW1pbkRpZmYsbWF4TG9jYWxEaXNjcmVwYW5jeSk7fQotcmV0dXJuIG1heExvY2FsRGlzY3JlcGFuY3k7fTtTdGF0aXN0aWNzLnRpbWVzdGFtcHNEaXNjcmVwYW5jeT1mdW5jdGlvbih0aW1lc3RhbXBzLG9wdF9hYnNvbHV0ZSxvcHRfbG9jYXRpb25Db3VudCl7aWYodGltZXN0YW1wcy5sZW5ndGg9PT0wKXJldHVybiAwLjA7aWYob3B0X2Fic29sdXRlPT09dW5kZWZpbmVkKW9wdF9hYnNvbHV0ZT10cnVlO2lmKEFycmF5LmlzQXJyYXkodGltZXN0YW1wc1swXSkpe2NvbnN0IHJhbmdlRGlzY3JlcGFuY2llcz10aW1lc3RhbXBzLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gU3RhdGlzdGljcy50aW1lc3RhbXBzRGlzY3JlcGFuY3kocik7fSk7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwscmFuZ2VEaXNjcmVwYW5jaWVzKTt9Ci1jb25zdCBzPVN0YXRpc3RpY3Mubm9ybWFsaXplU2FtcGxlcyh0aW1lc3RhbXBzKTtjb25zdCBzYW1wbGVzPXMubm9ybWFsaXplZF9zYW1wbGVzO2NvbnN0IHNhbXBsZVNjYWxlPXMuc2NhbGU7bGV0IGRpc2NyZXBhbmN5PVN0YXRpc3RpY3MuZGlzY3JlcGFuY3koc2FtcGxlcyxvcHRfbG9jYXRpb25Db3VudCk7Y29uc3QgaW52U2FtcGxlQ291bnQ9MS4wL3NhbXBsZXMubGVuZ3RoO2lmKG9wdF9hYnNvbHV0ZT09PXRydWUpe2Rpc2NyZXBhbmN5Lz1zYW1wbGVTY2FsZTt9ZWxzZXtkaXNjcmVwYW5jeT10ci5iLm1hdGguY2xhbXAoKGRpc2NyZXBhbmN5LWludlNhbXBsZUNvdW50KS8oMS4wLWludlNhbXBsZUNvdW50KSwwLjAsMS4wKTt9Ci1yZXR1cm4gZGlzY3JlcGFuY3k7fTtTdGF0aXN0aWNzLmR1cmF0aW9uc0Rpc2NyZXBhbmN5PWZ1bmN0aW9uKGR1cmF0aW9ucyxvcHRfYWJzb2x1dGUsb3B0X2xvY2F0aW9uQ291bnQpe2lmKGR1cmF0aW9ucy5sZW5ndGg9PT0wKXJldHVybiAwLjA7Y29uc3QgdGltZXN0YW1wcz1kdXJhdGlvbnMucmVkdWNlKGZ1bmN0aW9uKHByZXYsY3VycixpbmRleCxhcnJheSl7cHJldi5wdXNoKHByZXZbcHJldi5sZW5ndGgtMV0rY3Vycik7cmV0dXJuIHByZXY7fSxbMF0pO3JldHVybiBTdGF0aXN0aWNzLnRpbWVzdGFtcHNEaXNjcmVwYW5jeSh0aW1lc3RhbXBzLG9wdF9hYnNvbHV0ZSxvcHRfbG9jYXRpb25Db3VudCk7fTtTdGF0aXN0aWNzLnVuaWZvcm1seVNhbXBsZUFycmF5PWZ1bmN0aW9uKHNhbXBsZXMsY291bnQpe2lmKHNhbXBsZXMubGVuZ3RoPD1jb3VudCl7cmV0dXJuIHNhbXBsZXM7fQotd2hpbGUoc2FtcGxlcy5sZW5ndGg+Y291bnQpe2NvbnN0IGk9cGFyc2VJbnQoTWF0aC5yYW5kb20oKSpzYW1wbGVzLmxlbmd0aCk7c2FtcGxlcy5zcGxpY2UoaSwxKTt9Ci1yZXR1cm4gc2FtcGxlczt9O1N0YXRpc3RpY3MudW5pZm9ybWx5U2FtcGxlU3RyZWFtPWZ1bmN0aW9uKHNhbXBsZXMsc3RyZWFtTGVuZ3RoLG5ld0VsZW1lbnQsbnVtU2FtcGxlcyl7aWYoc3RyZWFtTGVuZ3RoPD1udW1TYW1wbGVzKXtpZihzYW1wbGVzLmxlbmd0aD49c3RyZWFtTGVuZ3RoKXtzYW1wbGVzW3N0cmVhbUxlbmd0aC0xXT1uZXdFbGVtZW50O31lbHNle3NhbXBsZXMucHVzaChuZXdFbGVtZW50KTt9Ci1yZXR1cm47fQotY29uc3QgcHJvYlRvS2VlcD1udW1TYW1wbGVzL3N0cmVhbUxlbmd0aDtpZihNYXRoLnJhbmRvbSgpPnByb2JUb0tlZXApcmV0dXJuO2NvbnN0IGluZGV4PU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpudW1TYW1wbGVzKTtzYW1wbGVzW2luZGV4XT1uZXdFbGVtZW50O307U3RhdGlzdGljcy5tZXJnZVNhbXBsZWRTdHJlYW1zPWZ1bmN0aW9uKHNhbXBsZXNBLHN0cmVhbUxlbmd0aEEsc2FtcGxlc0Isc3RyZWFtTGVuZ3RoQixudW1TYW1wbGVzKXtpZihzdHJlYW1MZW5ndGhCPG51bVNhbXBsZXMpe2NvbnN0IG5iRWxlbWVudHM9TWF0aC5taW4oc3RyZWFtTGVuZ3RoQixzYW1wbGVzQi5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8bmJFbGVtZW50czsrK2kpe1N0YXRpc3RpY3MudW5pZm9ybWx5U2FtcGxlU3RyZWFtKHNhbXBsZXNBLHN0cmVhbUxlbmd0aEEraSsxLHNhbXBsZXNCW2ldLG51bVNhbXBsZXMpO30KLXJldHVybjt9Ci1pZihzdHJlYW1MZW5ndGhBPG51bVNhbXBsZXMpe2NvbnN0IG5iRWxlbWVudHM9TWF0aC5taW4oc3RyZWFtTGVuZ3RoQSxzYW1wbGVzQS5sZW5ndGgpO2NvbnN0IHRlbXBTYW1wbGVzPXNhbXBsZXNCLnNsaWNlKCk7Zm9yKGxldCBpPTA7aTxuYkVsZW1lbnRzOysraSl7U3RhdGlzdGljcy51bmlmb3JtbHlTYW1wbGVTdHJlYW0odGVtcFNhbXBsZXMsc3RyZWFtTGVuZ3RoQitpKzEsc2FtcGxlc0FbaV0sbnVtU2FtcGxlcyk7fQotZm9yKGxldCBpPTA7aTx0ZW1wU2FtcGxlcy5sZW5ndGg7KytpKXtzYW1wbGVzQVtpXT10ZW1wU2FtcGxlc1tpXTt9Ci1yZXR1cm47fQotY29uc3QgbmJFbGVtZW50cz1NYXRoLm1pbihudW1TYW1wbGVzLHNhbXBsZXNCLmxlbmd0aCk7Y29uc3QgcHJvYk9mU3dhcHBpbmc9c3RyZWFtTGVuZ3RoQi8oc3RyZWFtTGVuZ3RoQStzdHJlYW1MZW5ndGhCKTtmb3IobGV0IGk9MDtpPG5iRWxlbWVudHM7KytpKXtpZihNYXRoLnJhbmRvbSgpPHByb2JPZlN3YXBwaW5nKXtzYW1wbGVzQVtpXT1zYW1wbGVzQltpXTt9fX07ZnVuY3Rpb24gRGlzdHJpYnV0aW9uKCl7fQotRGlzdHJpYnV0aW9uLnByb3RvdHlwZT17Y29tcHV0ZURlbnNpdHkoeCl7dGhyb3cgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sY29tcHV0ZVBlcmNlbnRpbGUoeCl7dGhyb3cgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sY29tcHV0ZUNvbXBsZW1lbnRhcnlQZXJjZW50aWxlKHgpe3JldHVybiAxLXRoaXMuY29tcHV0ZVBlcmNlbnRpbGUoeCk7fSxnZXQgbWVhbigpe3Rocm93IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGdldCBtb2RlKCl7dGhyb3cgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sZ2V0IG1lZGlhbigpe3Rocm93IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGdldCBzdGFuZGFyZERldmlhdGlvbigpe3Rocm93IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGdldCB2YXJpYW5jZSgpe3Rocm93IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9fTtTdGF0aXN0aWNzLlVuaWZvcm1EaXN0cmlidXRpb249ZnVuY3Rpb24ob3B0X3JhbmdlKXtpZighb3B0X3JhbmdlKW9wdF9yYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoMCwxKTt0aGlzLnJhbmdlPW9wdF9yYW5nZTt9O1N0YXRpc3RpY3MuVW5pZm9ybURpc3RyaWJ1dGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzpEaXN0cmlidXRpb24ucHJvdG90eXBlLGNvbXB1dGVEZW5zaXR5KHgpe3JldHVybiAxL3RoaXMucmFuZ2UucmFuZ2U7fSxjb21wdXRlUGVyY2VudGlsZSh4KXtyZXR1cm4gdHIuYi5tYXRoLm5vcm1hbGl6ZSh4LHRoaXMucmFuZ2UubWluLHRoaXMucmFuZ2UubWF4KTt9LGdldCBtZWFuKCl7cmV0dXJuIHRoaXMucmFuZ2UuY2VudGVyO30sZ2V0IG1vZGUoKXtyZXR1cm4gdW5kZWZpbmVkO30sZ2V0IG1lZGlhbigpe3JldHVybiB0aGlzLm1lYW47fSxnZXQgc3RhbmRhcmREZXZpYXRpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMudmFyaWFuY2UpO30sZ2V0IHZhcmlhbmNlKCl7cmV0dXJuIE1hdGgucG93KHRoaXMucmFuZ2UucmFuZ2UsMikvMTI7fX07U3RhdGlzdGljcy5Ob3JtYWxEaXN0cmlidXRpb249ZnVuY3Rpb24ob3B0X21lYW4sb3B0X3ZhcmlhbmNlKXt0aGlzLm1lYW5fPW9wdF9tZWFufHwwO3RoaXMudmFyaWFuY2VfPW9wdF92YXJpYW5jZXx8MTt0aGlzLnN0YW5kYXJkRGV2aWF0aW9uXz1NYXRoLnNxcnQodGhpcy52YXJpYW5jZV8pO307U3RhdGlzdGljcy5Ob3JtYWxEaXN0cmlidXRpb24ucHJvdG90eXBlPXtfX3Byb3RvX186RGlzdHJpYnV0aW9uLnByb3RvdHlwZSxjb21wdXRlRGVuc2l0eSh4KXtjb25zdCBzY2FsZT0oMS4wLyh0aGlzLnN0YW5kYXJkRGV2aWF0aW9uKk1hdGguc3FydCgyLjAqTWF0aC5QSSkpKTtjb25zdCBleHBvbmVudD0tTWF0aC5wb3coeC10aGlzLm1lYW4sMikvKDIuMCp0aGlzLnZhcmlhbmNlKTtyZXR1cm4gc2NhbGUqTWF0aC5leHAoZXhwb25lbnQpO30sY29tcHV0ZVBlcmNlbnRpbGUoeCl7Y29uc3Qgc3RhbmRhcmRpemVkWD0oKHgtdGhpcy5tZWFuKS9NYXRoLnNxcnQoMi4wKnRoaXMudmFyaWFuY2UpKTtyZXR1cm4oMS4wK3RyLmIubWF0aC5lcmYoc3RhbmRhcmRpemVkWCkpLzIuMDt9LGdldCBtZWFuKCl7cmV0dXJuIHRoaXMubWVhbl87fSxnZXQgbWVkaWFuKCl7cmV0dXJuIHRoaXMubWVhbjt9LGdldCBtb2RlKCl7cmV0dXJuIHRoaXMubWVhbjt9LGdldCBzdGFuZGFyZERldmlhdGlvbigpe3JldHVybiB0aGlzLnN0YW5kYXJkRGV2aWF0aW9uXzt9LGdldCB2YXJpYW5jZSgpe3JldHVybiB0aGlzLnZhcmlhbmNlXzt9fTtTdGF0aXN0aWNzLkxvZ05vcm1hbERpc3RyaWJ1dGlvbj1mdW5jdGlvbihvcHRfbG9jYXRpb24sb3B0X3NoYXBlKXt0aGlzLm5vcm1hbERpc3RyaWJ1dGlvbl89bmV3IFN0YXRpc3RpY3MuTm9ybWFsRGlzdHJpYnV0aW9uKG9wdF9sb2NhdGlvbixNYXRoLnBvdyhvcHRfc2hhcGV8fDEsMikpO307U3RhdGlzdGljcy5Mb2dOb3JtYWxEaXN0cmlidXRpb24ucHJvdG90eXBlPXtfX3Byb3RvX186U3RhdGlzdGljcy5Ob3JtYWxEaXN0cmlidXRpb24ucHJvdG90eXBlLGNvbXB1dGVEZW5zaXR5KHgpe3JldHVybiB0aGlzLm5vcm1hbERpc3RyaWJ1dGlvbl8uY29tcHV0ZURlbnNpdHkoTWF0aC5sb2coeCkpL3g7fSxjb21wdXRlUGVyY2VudGlsZSh4KXtyZXR1cm4gdGhpcy5ub3JtYWxEaXN0cmlidXRpb25fLmNvbXB1dGVQZXJjZW50aWxlKE1hdGgubG9nKHgpKTt9LGdldCBtZWFuKCl7cmV0dXJuIE1hdGguZXhwKHRoaXMubm9ybWFsRGlzdHJpYnV0aW9uXy5tZWFuKwotKHRoaXMubm9ybWFsRGlzdHJpYnV0aW9uXy52YXJpYW5jZS8yKSk7fSxnZXQgdmFyaWFuY2UoKXtjb25zdCBubT10aGlzLm5vcm1hbERpc3RyaWJ1dGlvbl8ubWVhbjtjb25zdCBudj10aGlzLm5vcm1hbERpc3RyaWJ1dGlvbl8udmFyaWFuY2U7cmV0dXJuKE1hdGguZXhwKDIqKG5tK252KSktCi1NYXRoLmV4cCgyKm5tK252KSk7fSxnZXQgc3RhbmRhcmREZXZpYXRpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMudmFyaWFuY2UpO30sZ2V0IG1lZGlhbigpe3JldHVybiBNYXRoLmV4cCh0aGlzLm5vcm1hbERpc3RyaWJ1dGlvbl8ubWVhbik7fSxnZXQgbW9kZSgpe3JldHVybiBNYXRoLmV4cCh0aGlzLm5vcm1hbERpc3RyaWJ1dGlvbl8ubWVhbi0KLXRoaXMubm9ybWFsRGlzdHJpYnV0aW9uXy52YXJpYW5jZSk7fX07U3RhdGlzdGljcy5Mb2dOb3JtYWxEaXN0cmlidXRpb24uZnJvbU1lZGlhbkFuZERpbWluaXNoaW5nUmV0dXJucz1mdW5jdGlvbihtZWRpYW4sZGltaW5pc2hpbmdSZXR1cm5zKXtkaW1pbmlzaGluZ1JldHVybnM9TWF0aC5sb2coZGltaW5pc2hpbmdSZXR1cm5zL21lZGlhbik7Y29uc3Qgc2hhcGU9TWF0aC5zcXJ0KDEtMypkaW1pbmlzaGluZ1JldHVybnMtCi1NYXRoLnNxcnQoTWF0aC5wb3coZGltaW5pc2hpbmdSZXR1cm5zLTMsMiktOCkpLzI7Y29uc3QgbG9jYXRpb249TWF0aC5sb2cobWVkaWFuKTtyZXR1cm4gbmV3IFN0YXRpc3RpY3MuTG9nTm9ybWFsRGlzdHJpYnV0aW9uKGxvY2F0aW9uLHNoYXBlKTt9O1N0YXRpc3RpY3MuREVGQVVMVF9BTFBIQT0wLjAxO1N0YXRpc3RpY3MuTUFYX1NVR0dFU1RFRF9TQU1QTEVfU0laRT0yMDtTdGF0aXN0aWNzLlNpZ25pZmljYW5jZT17U0lHTklGSUNBTlQ6J1JFSkVDVCcsSU5TSUdOSUZJQ0FOVDonRkFJTF9UT19SRUpFQ1QnLE5FRURfTU9SRV9EQVRBOidORUVEX01PUkVfREFUQScsRE9OVF9DQVJFOidET05UX0NBUkUnLH07Y2xhc3MgSHlwb3RoZXNpc1Rlc3RSZXN1bHR7Y29uc3RydWN0b3IocCx1LG5lZWRNb3JlRGF0YSxvcHRfYWxwaGEpe3RoaXMucF89cDt0aGlzLnVfPXU7dGhpcy5uZWVkTW9yZURhdGFfPW5lZWRNb3JlRGF0YTt0aGlzLmNvbXBhcmUob3B0X2FscGhhKTt9Ci1nZXQgcCgpe3JldHVybiB0aGlzLnBfO30KLWdldCBVKCl7cmV0dXJuIHRoaXMudV87fQotZ2V0IHNpZ25pZmljYW5jZSgpe3JldHVybiB0aGlzLnNpZ25pZmljYW5jZV87fQotY29tcGFyZShvcHRfYWxwaGEpe2NvbnN0IGFscGhhPW9wdF9hbHBoYXx8U3RhdGlzdGljcy5ERUZBVUxUX0FMUEhBO2lmKHRoaXMucDxhbHBoYSl7dGhpcy5zaWduaWZpY2FuY2VfPVN0YXRpc3RpY3MuU2lnbmlmaWNhbmNlLlNJR05JRklDQU5UO31lbHNlIGlmKHRoaXMubmVlZE1vcmVEYXRhXyl7dGhpcy5zaWduaWZpY2FuY2VfPVN0YXRpc3RpY3MuU2lnbmlmaWNhbmNlLk5FRURfTU9SRV9EQVRBO31lbHNle3RoaXMuc2lnbmlmaWNhbmNlXz1TdGF0aXN0aWNzLlNpZ25pZmljYW5jZS5JTlNJR05JRklDQU5UO30KLXJldHVybiB0aGlzLnNpZ25pZmljYW5jZV87fQotYXNEaWN0KCl7cmV0dXJue3A6dGhpcy5wLFU6dGhpcy5VLHNpZ25pZmljYW5jZTp0aGlzLnNpZ25pZmljYW5jZSx9O319Ci1TdGF0aXN0aWNzLm13dT1mdW5jdGlvbihhLGIsb3B0X2FscGhhLG9wdF9yZXFTYW1wbGVTaXplKXtjb25zdCByZXN1bHQ9bWFubndoaXRuZXl1LnRlc3QoYSxiKTtjb25zdCBuZWVkTW9yZURhdGE9b3B0X3JlcVNhbXBsZVNpemUmJk1hdGgubWluKGEubGVuZ3RoLGIubGVuZ3RoKTxvcHRfcmVxU2FtcGxlU2l6ZTtyZXR1cm4gbmV3IEh5cG90aGVzaXNUZXN0UmVzdWx0KHJlc3VsdC5wLHJlc3VsdC5VLG5lZWRNb3JlRGF0YSxvcHRfYWxwaGEpO307cmV0dXJue1N0YXRpc3RpY3MsfTt9KTsndXNlIHN0cmljdCc7Y29uc3QgR1JFRUtfU01BTExfTEVUVEVSX01VPVN0cmluZy5mcm9tQ2hhckNvZGUoOTU2KTt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtjb25zdCBTRUNPTkRTX0lOX0FfTUlOVVRFPTYwO2NvbnN0IFNFQ09ORFNfSU5fQU5fSE9VUj1TRUNPTkRTX0lOX0FfTUlOVVRFKjYwO2NvbnN0IFNFQ09ORFNfSU5fQV9EQVk9U0VDT05EU19JTl9BTl9IT1VSKjI0O2NvbnN0IFNFQ09ORFNfSU5fQV9XRUVLPVNFQ09ORFNfSU5fQV9EQVkqNztjb25zdCBTRUNPTkRTX0lOX0FfWUVBUj1TRUNPTkRTX0lOX0FfREFZKjM2NS4yNDIyO2NvbnN0IFNFQ09ORFNfSU5fQV9NT05USD1TRUNPTkRTX0lOX0FfWUVBUi8xMjtjb25zdCBVbml0UHJlZml4U2NhbGU9e307Y29uc3QgVW5pdFNjYWxlPXt9O2Z1bmN0aW9uIGRlZmluZVVuaXRQcmVmaXhTY2FsZShuYW1lLHByZWZpeGVzKXtpZihVbml0UHJlZml4U2NhbGVbbmFtZV0hPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignVW5pdCBwcmVmaXggc2NhbGUgXCcnK25hbWUrJ1wnIGFscmVhZHkgZXhpc3RzJyk7fQotaWYocHJlZml4ZXMuQVVUTyE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdUaGUgXCdBVVRPXCcgdW5pdCBwcmVmaXggaXMgbm90IHN1cHBvcnRlZCBmb3IgdW5pdCcrJ3ByZWZpeCBzY2FsZXMgYW5kIGNhbm5vdCBiZSBhZGRlZCB0byBzY2FsZSBcJycrbmFtZSsnXCcnKTt9Ci1Vbml0UHJlZml4U2NhbGVbbmFtZV09cHJlZml4ZXM7fQotVW5pdFNjYWxlLmRlZmluZVVuaXRTY2FsZT1mdW5jdGlvbihuYW1lLHVuaXRTY2FsZSl7aWYoVW5pdFNjYWxlW25hbWVdIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1VuaXQgc2NhbGUgXCcnK25hbWUrJ1wnIGFscmVhZHkgZXhpc3RzJyk7fQotaWYodW5pdFNjYWxlLkFVVE8hPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignXCdBVVRPXCcgdW5pdCBzY2FsZSB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkgJysnZm9yIHVuaXQgc2NhbGUgXCcnK25hbWUrJ1wnJyk7fQotdW5pdFNjYWxlLkFVVE89T2JqZWN0LnZhbHVlcyh1bml0U2NhbGUpO3VuaXRTY2FsZS5BVVRPLnNvcnQoKGEsYik9PmEudmFsdWUtYi52YWx1ZSk7aWYobmFtZSlVbml0U2NhbGVbbmFtZV09dW5pdFNjYWxlO3JldHVybiB1bml0U2NhbGU7fTtVbml0U2NhbGUuZGVmaW5lVW5pdFNjYWxlRnJvbVByZWZpeFNjYWxlPWZ1bmN0aW9uKGJhc2VTeW1ib2wsYmFzZU5hbWUscHJlZml4U2NhbGUsb3B0X3NjYWxlTmFtZSl7aWYoYmFzZVN5bWJvbD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIFVuaXRTY2FsZSB3aXRoIHVuZGVmaW5lZCBiYXNlU3ltYm9sLicpO30KLWlmKCFiYXNlTmFtZSl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIFVuaXRTY2FsZSB3aXRob3V0IGEgYmFzZU5hbWUuJyk7fQotaWYoIXByZWZpeFNjYWxlKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgVW5pdFNjYWxlIHdpdGhvdXQgYSBwcmVmaXggc2NhbGUuJyk7fQotY29uc3QgdW5pdFNjYWxlPXt9O2Zvcihjb25zdCBjdXJQcmVmaXggb2YgT2JqZWN0LmtleXMocHJlZml4U2NhbGUpKXtjb25zdCBjdXJTY2FsZT1wcmVmaXhTY2FsZVtjdXJQcmVmaXhdO2lmKGN1clNjYWxlLnN5bWJvbD09PXVuZGVmaW5lZHx8IWN1clNjYWxlLnZhbHVlKXt0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb252ZXJ0IFByZWZpeFNjYWxlIHdpdGggbWFsZm9ybWVkIHByZWZpeCAke2N1clNjYWxlfS5gKTt9Ci1jb25zdCBuYW1lPWN1clByZWZpeD09PSdOT05FJz9iYXNlTmFtZTpgJHtjdXJQcmVmaXh9XyR7YmFzZU5hbWV9YDt1bml0U2NhbGVbbmFtZV09e3ZhbHVlOmN1clNjYWxlLnZhbHVlLHN5bWJvbDpjdXJTY2FsZS5zeW1ib2wrYmFzZVN5bWJvbCxiYXNlU3ltYm9sfTt9Ci1yZXR1cm4gVW5pdFNjYWxlLmRlZmluZVVuaXRTY2FsZShvcHRfc2NhbGVOYW1lLHVuaXRTY2FsZSk7fTtmdW5jdGlvbiBjb252ZXJ0VW5pdCh2YWx1ZSxmcm9tU2NhbGUsdG9TY2FsZSl7aWYodmFsdWU9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCBmcm9tU2NhbGVCYXNlPWZyb21TY2FsZS5iYXNlU3ltYm9sO2NvbnN0IHRvU2NhbGVCYXNlPXRvU2NhbGUuYmFzZVN5bWJvbDtpZihmcm9tU2NhbGVCYXNlIT09dW5kZWZpbmVkJiZ0b1NjYWxlQmFzZSE9PXVuZGVmaW5lZCYmZnJvbVNjYWxlQmFzZSE9PXRvU2NhbGVCYXNlKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGJldHdlZW4gdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZSBzeW1ib2xzLicpO30KLXJldHVybiB2YWx1ZSooZnJvbVNjYWxlLnZhbHVlL3RvU2NhbGUudmFsdWUpO30KLWRlZmluZVVuaXRQcmVmaXhTY2FsZSgnQklOQVJZJyx7Tk9ORTp7dmFsdWU6TWF0aC5wb3coMTAyNCwwKSxzeW1ib2w6Jyd9LEtJQkk6e3ZhbHVlOk1hdGgucG93KDEwMjQsMSksc3ltYm9sOidLaSd9LE1FQkk6e3ZhbHVlOk1hdGgucG93KDEwMjQsMiksc3ltYm9sOidNaSd9LEdJQkk6e3ZhbHVlOk1hdGgucG93KDEwMjQsMyksc3ltYm9sOidHaSd9LFRFQkk6e3ZhbHVlOk1hdGgucG93KDEwMjQsNCksc3ltYm9sOidUaSd9fSk7ZGVmaW5lVW5pdFByZWZpeFNjYWxlKCdNRVRSSUMnLHtOQU5POnt2YWx1ZToxZS05LHN5bWJvbDonbid9LE1JQ1JPOnt2YWx1ZToxZS02LHN5bWJvbDpHUkVFS19TTUFMTF9MRVRURVJfTVV9LE1JTExJOnt2YWx1ZToxZS0zLHN5bWJvbDonbSd9LE5PTkU6e3ZhbHVlOjEsc3ltYm9sOicnfSxLSUxPOnt2YWx1ZToxZTMsc3ltYm9sOidrJ30sTUVHQTp7dmFsdWU6MWU2LHN5bWJvbDonTSd9LEdJR0E6e3ZhbHVlOjFlOSxzeW1ib2w6J0cnfX0pO1VuaXRTY2FsZS5kZWZpbmVVbml0U2NhbGUoJ1RJTUUnLHtOQU5PX1NFQzp7dmFsdWU6MWUtOSxzeW1ib2w6J25zJyxiYXNlU3ltYm9sOidzJ30sTUlDUk9fU0VDOnt2YWx1ZToxZS02LHN5bWJvbDpHUkVFS19TTUFMTF9MRVRURVJfTVUrJ3MnLGJhc2VTeW1ib2w6J3MnfSxNSUxMSV9TRUM6e3ZhbHVlOjFlLTMsc3ltYm9sOidtcycsYmFzZVN5bWJvbDoncyd9LFNFQzp7dmFsdWU6MSxzeW1ib2w6J3MnLGJhc2VTeW1ib2w6J3MnfSxNSU5VVEU6e3ZhbHVlOlNFQ09ORFNfSU5fQV9NSU5VVEUsc3ltYm9sOidtaW4nLGJhc2VTeW1ib2w6J3MnfSxIT1VSOnt2YWx1ZTpTRUNPTkRTX0lOX0FOX0hPVVIsc3ltYm9sOidocicsYmFzZVN5bWJvbDoncyd9LERBWTp7dmFsdWU6U0VDT05EU19JTl9BX0RBWSxzeW1ib2w6J2RheXMnLGJhc2VTeW1ib2w6J3MnfSxXRUVLOnt2YWx1ZTpTRUNPTkRTX0lOX0FfV0VFSyxzeW1ib2w6J3dlZWtzJyxiYXNlU3ltYm9sOidzJ30sTU9OVEg6e3ZhbHVlOlNFQ09ORFNfSU5fQV9NT05USCxzeW1ib2w6J21vbnRocycsYmFzZVN5bWJvbDoncyd9LFlFQVI6e3ZhbHVlOlNFQ09ORFNfSU5fQV9ZRUFSLHN5bWJvbDoneWVhcnMnLGJhc2VTeW1ib2w6J3MnfX0pO1VuaXRTY2FsZS5kZWZpbmVVbml0U2NhbGVGcm9tUHJlZml4U2NhbGUoJ0InLCdCWVRFJyxVbml0UHJlZml4U2NhbGUuQklOQVJZLCdNRU1PUlknKTtyZXR1cm57VW5pdFByZWZpeFNjYWxlLFVuaXRTY2FsZSxjb252ZXJ0VW5pdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtjb25zdCBtc0Rpc3BsYXlNb2RlPXtzY2FsZToxZS0zLHN1ZmZpeDonbXMnLHJvdW5kZWRMZXNzKGEsYil7cmV0dXJuIE1hdGgucm91bmQoYSoxMDAwKTxNYXRoLnJvdW5kKGIqMTAwMCk7fSxmb3JtYXRTcGVjOnt1bml0U2NhbGU6W3RyLmIuVW5pdFNjYWxlLlRJTUUuTUlMTElfU0VDXSxtaW5pbXVtRnJhY3Rpb25EaWdpdHM6Myx9fTtjb25zdCBuc0Rpc3BsYXlNb2RlPXtzY2FsZToxZS05LHN1ZmZpeDonbnMnLHJvdW5kZWRMZXNzKGEsYil7cmV0dXJuIE1hdGgucm91bmQoYSoxMDAwMDAwKTxNYXRoLnJvdW5kKGIqMTAwMDAwMCk7fSxmb3JtYXRTcGVjOnt1bml0U2NhbGU6W3RyLmIuVW5pdFNjYWxlLlRJTUUuTkFOT19TRUNdLG1heGltdW1GcmFjdGlvbkRpZ2l0czowfX07Y29uc3QgVGltZURpc3BsYXlNb2Rlcz17bnM6bnNEaXNwbGF5TW9kZSxtczptc0Rpc3BsYXlNb2RlfTtyZXR1cm57VGltZURpc3BsYXlNb2Rlcyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBpdGVyYXRlRWxlbWVudERlZXBseUltcGwoZWxlbWVudCxjYix0aGlzQXJnLGluY2x1ZGVFbGVtZW50KXtpZihpbmNsdWRlRWxlbWVudCYmY2IuY2FsbCh0aGlzQXJnLGVsZW1lbnQpKXJldHVybiB0cnVlO2lmKGVsZW1lbnQucm9vdCYmZWxlbWVudC5yb290IT09ZWxlbWVudCYmaXRlcmF0ZUVsZW1lbnREZWVwbHlJbXBsKGVsZW1lbnQucm9vdCxjYix0aGlzQXJnLGZhbHNlKSl7cmV0dXJuIHRydWU7fQotY29uc3QgY2hpbGRyZW49UG9seW1lci5kb20oZWxlbWVudCkuY2hpbGRyZW47Zm9yKGxldCBpPTA7aTxjaGlsZHJlbi5sZW5ndGg7aSsrKXtpZihpdGVyYXRlRWxlbWVudERlZXBseUltcGwoY2hpbGRyZW5baV0sY2IsdGhpc0FyZyx0cnVlKSl7cmV0dXJuIHRydWU7fX0KLXJldHVybiBmYWxzZTt9Ci1mdW5jdGlvbiBpdGVyYXRlRWxlbWVudERlZXBseShlbGVtZW50LGNiLHRoaXNBcmcpe2l0ZXJhdGVFbGVtZW50RGVlcGx5SW1wbChlbGVtZW50LGNiLHRoaXNBcmcsZmFsc2UpO30KLWZ1bmN0aW9uIGZpbmREZWVwRWxlbWVudE1hdGNoaW5nUHJlZGljYXRlKGVsZW1lbnQscHJlZGljYXRlKXtsZXQgZm91bmRFbGVtZW50PXVuZGVmaW5lZDtmdW5jdGlvbiBtYXRjaGVzKGVsZW1lbnQpe2NvbnN0IG1hdGNoPXByZWRpY2F0ZShlbGVtZW50KTtpZighbWF0Y2gpe3JldHVybiBmYWxzZTt9Ci1mb3VuZEVsZW1lbnQ9ZWxlbWVudDtyZXR1cm4gdHJ1ZTt9Ci1pdGVyYXRlRWxlbWVudERlZXBseShlbGVtZW50LG1hdGNoZXMpO3JldHVybiBmb3VuZEVsZW1lbnQ7fQotZnVuY3Rpb24gZmluZERlZXBFbGVtZW50c01hdGNoaW5nUHJlZGljYXRlKGVsZW1lbnQscHJlZGljYXRlKXtjb25zdCBmb3VuZEVsZW1lbnRzPVtdO2Z1bmN0aW9uIG1hdGNoZXMoZWxlbWVudCl7Y29uc3QgbWF0Y2g9cHJlZGljYXRlKGVsZW1lbnQpO2lmKG1hdGNoKXtmb3VuZEVsZW1lbnRzLnB1c2goZWxlbWVudCk7fQotcmV0dXJuIGZhbHNlO30KLWl0ZXJhdGVFbGVtZW50RGVlcGx5KGVsZW1lbnQsbWF0Y2hlcyk7cmV0dXJuIGZvdW5kRWxlbWVudHM7fQotZnVuY3Rpb24gZmluZERlZXBFbGVtZW50TWF0Y2hpbmcoZWxlbWVudCxzZWxlY3Rvcil7cmV0dXJuIGZpbmREZWVwRWxlbWVudE1hdGNoaW5nUHJlZGljYXRlKGVsZW1lbnQsZnVuY3Rpb24oZWxlbWVudCl7cmV0dXJuIGVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7fSk7fQotZnVuY3Rpb24gZmluZERlZXBFbGVtZW50c01hdGNoaW5nKGVsZW1lbnQsc2VsZWN0b3Ipe3JldHVybiBmaW5kRGVlcEVsZW1lbnRzTWF0Y2hpbmdQcmVkaWNhdGUoZWxlbWVudCxmdW5jdGlvbihlbGVtZW50KXtyZXR1cm4gZWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKTt9KTt9Ci1mdW5jdGlvbiBmaW5kRGVlcEVsZW1lbnRXaXRoVGV4dENvbnRlbnQoZWxlbWVudCxyZSl7cmV0dXJuIGZpbmREZWVwRWxlbWVudE1hdGNoaW5nUHJlZGljYXRlKGVsZW1lbnQsZnVuY3Rpb24oZWxlbWVudCl7aWYoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGghPT0wKXJldHVybiBmYWxzZTtyZXR1cm4gcmUudGVzdChQb2x5bWVyLmRvbShlbGVtZW50KS50ZXh0Q29udGVudCk7fSk7fQotcmV0dXJue2ZpbmREZWVwRWxlbWVudE1hdGNoaW5nLGZpbmREZWVwRWxlbWVudHNNYXRjaGluZyxmaW5kRGVlcEVsZW1lbnRNYXRjaGluZ1ByZWRpY2F0ZSxmaW5kRGVlcEVsZW1lbnRzTWF0Y2hpbmdQcmVkaWNhdGUsZmluZERlZXBFbGVtZW50V2l0aFRleHRDb250ZW50LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2NvbnN0IFRpbWVEaXNwbGF5TW9kZXM9dHIuYi5UaW1lRGlzcGxheU1vZGVzO2NvbnN0IFBMVVNfTUlOVVNfU0lHTj1TdHJpbmcuZnJvbUNoYXJDb2RlKDE3Nyk7Y29uc3QgQ0FDSEVEX0ZPUk1BVFRFUlM9e307ZnVuY3Rpb24gZ2V0TnVtYmVyRm9ybWF0dGVyKG1pblNwZWMsbWF4U3BlYyxtaW5DdHgsbWF4Q3R4KXtjb25zdCBrZXk9bWluU3BlYysnLScrbWF4U3BlYysnLScrbWluQ3R4KyctJyttYXhDdHg7bGV0IGZvcm1hdHRlcj1DQUNIRURfRk9STUFUVEVSU1trZXldO2lmKGZvcm1hdHRlcj09PXVuZGVmaW5lZCl7bGV0IG1pbmltdW1GcmFjdGlvbkRpZ2l0cz1taW5DdHghPT11bmRlZmluZWQ/bWluQ3R4Om1pblNwZWM7bGV0IG1heGltdW1GcmFjdGlvbkRpZ2l0cz1tYXhDdHghPT11bmRlZmluZWQ/bWF4Q3R4Om1heFNwZWM7aWYobWluaW11bUZyYWN0aW9uRGlnaXRzPm1heGltdW1GcmFjdGlvbkRpZ2l0cyl7aWYobWluQ3R4IT09dW5kZWZpbmVkJiZtYXhDdHg9PT11bmRlZmluZWQpe21heGltdW1GcmFjdGlvbkRpZ2l0cz1taW5pbXVtRnJhY3Rpb25EaWdpdHM7fWVsc2UgaWYobWluQ3R4PT09dW5kZWZpbmVkJiZtYXhDdHghPT11bmRlZmluZWQpe21pbmltdW1GcmFjdGlvbkRpZ2l0cz1tYXhpbXVtRnJhY3Rpb25EaWdpdHM7fX0KLWZvcm1hdHRlcj1uZXcgSW50bC5OdW1iZXJGb3JtYXQodW5kZWZpbmVkLHttaW5pbXVtRnJhY3Rpb25EaWdpdHMsbWF4aW11bUZyYWN0aW9uRGlnaXRzLH0pO0NBQ0hFRF9GT1JNQVRURVJTW2tleV09Zm9ybWF0dGVyO30KLXJldHVybiBmb3JtYXR0ZXI7fQotZnVuY3Rpb24gbWF4KGEsYil7aWYoYT09PXVuZGVmaW5lZClyZXR1cm4gYjtpZihiPT09dW5kZWZpbmVkKXJldHVybiBhO3JldHVybiBhLnNjYWxlPmIuc2NhbGU/YTpiO30KLWNvbnN0IEltcHJvdmVtZW50RGlyZWN0aW9uPXtET05UX0NBUkU6MCxCSUdHRVJfSVNfQkVUVEVSOjEsU01BTExFUl9JU19CRVRURVI6Mn07ZnVuY3Rpb24gVW5pdCh1bml0TmFtZSxqc29uTmFtZSxzY2FsZUJhc2VVbml0LGlzRGVsdGEsaW1wcm92ZW1lbnREaXJlY3Rpb24sZm9ybWF0U3BlYyl7dGhpcy51bml0TmFtZT11bml0TmFtZTt0aGlzLmpzb25OYW1lPWpzb25OYW1lO3RoaXMuc2NhbGVCYXNlVW5pdD1zY2FsZUJhc2VVbml0O3RoaXMuaXNEZWx0YT1pc0RlbHRhO3RoaXMuaW1wcm92ZW1lbnREaXJlY3Rpb249aW1wcm92ZW1lbnREaXJlY3Rpb247dGhpcy5mb3JtYXRTcGVjXz1mb3JtYXRTcGVjO3RoaXMuYmFzZVVuaXQ9dW5kZWZpbmVkO3RoaXMuY29ycmVzcG9uZGluZ0RlbHRhVW5pdD11bmRlZmluZWQ7fQotVW5pdC5wcm90b3R5cGU9e2FzSlNPTigpe3JldHVybiB0aGlzLmpzb25OYW1lO30sZ2V0VW5pdFNjYWxlXyhvcHRfY29udGV4dCl7bGV0IGZvcm1hdFNwZWM9dGhpcy5mb3JtYXRTcGVjXztsZXQgZm9ybWF0U3BlY1dhc0Z1bmN0aW9uPWZhbHNlO2lmKHR5cGVvZiBmb3JtYXRTcGVjPT09J2Z1bmN0aW9uJyl7Zm9ybWF0U3BlY1dhc0Z1bmN0aW9uPXRydWU7Zm9ybWF0U3BlYz1mb3JtYXRTcGVjKCk7fQotY29uc3QgY29udGV4dD1vcHRfY29udGV4dHx8e307bGV0IHNjYWxlPXVuZGVmaW5lZDtpZihjb250ZXh0LnVuaXRTY2FsZSl7c2NhbGU9Y29udGV4dC51bml0U2NhbGU7fWVsc2UgaWYoY29udGV4dC51bml0UHJlZml4KXtjb25zdCBzeW1ib2w9Zm9ybWF0U3BlYy5iYXNlU3ltYm9sP2Zvcm1hdFNwZWMuYmFzZVN5bWJvbDp0aGlzLnNjYWxlQmFzZVVuaXQuYmFzZVN5bWJvbDtzY2FsZT10ci5iLlVuaXRTY2FsZS5kZWZpbmVVbml0U2NhbGVGcm9tUHJlZml4U2NhbGUoc3ltYm9sLHN5bWJvbCxbY29udGV4dC51bml0UHJlZml4XSkuQVVUTzt9ZWxzZXtzY2FsZT1mb3JtYXRTcGVjLnVuaXRTY2FsZTtpZighc2NhbGUpe3NjYWxlPVt7dmFsdWU6MSxzeW1ib2w6Zm9ybWF0U3BlYy5iYXNlU3ltYm9sfHwnJyxiYXNlU3ltYm9sOmZvcm1hdFNwZWMuYmFzZVN5bWJvbHx8Jyd9XTtpZighZm9ybWF0U3BlY1dhc0Z1bmN0aW9uKWZvcm1hdFNwZWMudW5pdFNjYWxlPXNjYWxlO319Ci1pZighKHNjYWxlIGluc3RhbmNlb2YgQXJyYXkpKXt0aHJvdyBuZXcgRXJyb3IoJ1VuaXQgaGFzIGEgbWFsZm9ybWVkIHVuaXQgc2NhbGUuJyk7fQotcmV0dXJuIHNjYWxlO30sZ2V0IHVuaXRTdHJpbmcoKXtjb25zdCBzY2FsZT10aGlzLmdldFVuaXRTY2FsZV8oKTtpZighc2NhbGUpe3Rocm93IG5ldyBFcnJvcignQSBVbml0U2NhbGUgY291bGQgbm90IGJlIGZvdW5kIGZvciBVbml0ICcrdGhpcy51bml0TmFtZSk7fQotcmV0dXJuIHNjYWxlWzBdLnN5bWJvbDt9LGZvcm1hdCh2YWx1ZSxvcHRfY29udGV4dCl7bGV0IHNpZ25TdHJpbmc9Jyc7aWYodmFsdWU8MCl7c2lnblN0cmluZz0nLSc7dmFsdWU9LXZhbHVlO31lbHNlIGlmKHRoaXMuaXNEZWx0YSl7c2lnblN0cmluZz12YWx1ZT09PTA/UExVU19NSU5VU19TSUdOOicrJzt9Ci1jb25zdCBjb250ZXh0PW9wdF9jb250ZXh0fHx7fTtjb25zdCBzY2FsZT10aGlzLmdldFVuaXRTY2FsZV8oY29udGV4dCk7bGV0IGRlbHRhVmFsdWU9Y29udGV4dC5kZWx0YVZhbHVlPT09dW5kZWZpbmVkP3ZhbHVlOmNvbnRleHQuZGVsdGFWYWx1ZTtkZWx0YVZhbHVlPU1hdGguYWJzKGRlbHRhVmFsdWUpKnRoaXMuc2NhbGVCYXNlVW5pdC52YWx1ZTtsZXQgaT0wO3doaWxlKGk8c2NhbGUubGVuZ3RoLTEmJmRlbHRhVmFsdWUvc2NhbGVbaSsxXS52YWx1ZT49MSl7aSsrO30KLWNvbnN0IHNlbGVjdGVkU3ViVW5pdD1zY2FsZVtpXTtsZXQgZm9ybWF0U3BlYz10aGlzLmZvcm1hdFNwZWNfO2lmKHR5cGVvZiBmb3JtYXRTcGVjPT09J2Z1bmN0aW9uJylmb3JtYXRTcGVjPWZvcm1hdFNwZWMoKTtsZXQgdW5pdFN0cmluZz0nJztpZihzZWxlY3RlZFN1YlVuaXQuc3ltYm9sKXtpZighZm9ybWF0U3BlYy5hdm9pZFNwYWNlUHJlY2VkaW5nVW5pdCl1bml0U3RyaW5nPScgJzt1bml0U3RyaW5nKz1zZWxlY3RlZFN1YlVuaXQuc3ltYm9sO30KLXZhbHVlPXRyLmIuY29udmVydFVuaXQodmFsdWUsdGhpcy5zY2FsZUJhc2VVbml0LHNlbGVjdGVkU3ViVW5pdCk7Y29uc3QgbnVtYmVyU3RyaW5nPWdldE51bWJlckZvcm1hdHRlcihmb3JtYXRTcGVjLm1pbmltdW1GcmFjdGlvbkRpZ2l0cyxmb3JtYXRTcGVjLm1heGltdW1GcmFjdGlvbkRpZ2l0cyxjb250ZXh0Lm1pbmltdW1GcmFjdGlvbkRpZ2l0cyxjb250ZXh0Lm1heGltdW1GcmFjdGlvbkRpZ2l0cykuZm9ybWF0KHZhbHVlKTtyZXR1cm4gc2lnblN0cmluZytudW1iZXJTdHJpbmcrdW5pdFN0cmluZzt9fTtVbml0LnJlc2V0PWZ1bmN0aW9uKCl7VW5pdC5jdXJyZW50VGltZURpc3BsYXlNb2RlPVRpbWVEaXNwbGF5TW9kZXMubXM7fTtVbml0LnRpbWVzdGFtcEZyb21Vcz1mdW5jdGlvbih1cyl7cmV0dXJuIHRyLmIuY29udmVydFVuaXQodXMsdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk1JQ1JPLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUxMSSk7fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVW5pdCwnY3VycmVudFRpbWVEaXNwbGF5TW9kZScse2dldCgpe3JldHVybiBVbml0LmN1cnJlbnRUaW1lRGlzcGxheU1vZGVfO30sc2V0KHZhbHVlKXtpZihVbml0LmN1cnJlbnRUaW1lRGlzcGxheU1vZGVfPT09dmFsdWUpcmV0dXJuO1VuaXQuY3VycmVudFRpbWVEaXNwbGF5TW9kZV89dmFsdWU7VW5pdC5kaXNwYXRjaEV2ZW50KG5ldyB0ci5iLkV2ZW50KCdkaXNwbGF5LW1vZGUtY2hhbmdlZCcpKTt9fSk7VW5pdC5kaWRQcmVmZXJyZWRUaW1lRGlzcGxheVVuaXRDaGFuZ2U9ZnVuY3Rpb24oKXtsZXQgbGFyZ2VzdD11bmRlZmluZWQ7Y29uc3QgZWxzPXRyLnVpLmIuZmluZERlZXBFbGVtZW50c01hdGNoaW5nKGRvY3VtZW50LmJvZHksJ3RyLXYtdWktcHJlZmVycmVkLWRpc3BsYXktdW5pdCcpO2Vscy5mb3JFYWNoKGZ1bmN0aW9uKGVsKXtsYXJnZXN0PW1heChsYXJnZXN0LGVsLnByZWZlcnJlZFRpbWVEaXNwbGF5TW9kZSk7fSk7VW5pdC5jdXJyZW50VGltZURpc3BsYXlNb2RlPWxhcmdlc3Q9PT11bmRlZmluZWQ/VGltZURpc3BsYXlNb2Rlcy5tczpsYXJnZXN0O307VW5pdC5ieU5hbWU9e307VW5pdC5ieUpTT05OYW1lPXt9O1VuaXQuZnJvbUpTT049ZnVuY3Rpb24ob2JqZWN0KXtjb25zdCB1PVVuaXQuYnlKU09OTmFtZVtvYmplY3RdO2lmKHUpe3JldHVybiB1O30KLXRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHVuaXQgIiR7b2JqZWN0fSJgKTt9O1VuaXQuZGVmaW5lPWZ1bmN0aW9uKHBhcmFtcyl7Y29uc3QgZGVmaW5lZFVuaXRzPVtdO2Zvcihjb25zdCBpbXByb3ZlbWVudERpcmVjdGlvbiBvZiBPYmplY3QudmFsdWVzKEltcHJvdmVtZW50RGlyZWN0aW9uKSl7Y29uc3QgcmVndWxhclVuaXQ9VW5pdC5kZWZpbmVVbml0VmFyaWFudF8ocGFyYW1zLGZhbHNlLGltcHJvdmVtZW50RGlyZWN0aW9uKTtjb25zdCBkZWx0YVVuaXQ9VW5pdC5kZWZpbmVVbml0VmFyaWFudF8ocGFyYW1zLHRydWUsaW1wcm92ZW1lbnREaXJlY3Rpb24pO3JlZ3VsYXJVbml0LmNvcnJlc3BvbmRpbmdEZWx0YVVuaXQ9ZGVsdGFVbml0O2RlbHRhVW5pdC5jb3JyZXNwb25kaW5nRGVsdGFVbml0PWRlbHRhVW5pdDtkZWZpbmVkVW5pdHMucHVzaChyZWd1bGFyVW5pdCxkZWx0YVVuaXQpO30KLWNvbnN0IGJhc2VVbml0PVVuaXQuYnlOYW1lW3BhcmFtcy5iYXNlVW5pdE5hbWVdO2RlZmluZWRVbml0cy5mb3JFYWNoKHU9PnUuYmFzZVVuaXQ9YmFzZVVuaXQpO307VW5pdC5uYW1lU3VmZml4Rm9ySW1wcm92ZW1lbnREaXJlY3Rpb249ZnVuY3Rpb24oaW1wcm92ZW1lbnREaXJlY3Rpb24pe3N3aXRjaChpbXByb3ZlbWVudERpcmVjdGlvbil7Y2FzZSBJbXByb3ZlbWVudERpcmVjdGlvbi5ET05UX0NBUkU6cmV0dXJuJyc7Y2FzZSBJbXByb3ZlbWVudERpcmVjdGlvbi5CSUdHRVJfSVNfQkVUVEVSOnJldHVybidfYmlnZ2VySXNCZXR0ZXInO2Nhc2UgSW1wcm92ZW1lbnREaXJlY3Rpb24uU01BTExFUl9JU19CRVRURVI6cmV0dXJuJ19zbWFsbGVySXNCZXR0ZXInO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGltcHJvdmVtZW50IGRpcmVjdGlvbjogJytpbXByb3ZlbWVudERpcmVjdGlvbik7fX07VW5pdC5kZWZpbmVVbml0VmFyaWFudF89ZnVuY3Rpb24ocGFyYW1zLGlzRGVsdGEsaW1wcm92ZW1lbnREaXJlY3Rpb24pe2xldCBuYW1lU3VmZml4PWlzRGVsdGE/J0RlbHRhJzonJztuYW1lU3VmZml4Kz1Vbml0Lm5hbWVTdWZmaXhGb3JJbXByb3ZlbWVudERpcmVjdGlvbihpbXByb3ZlbWVudERpcmVjdGlvbik7Y29uc3QgdW5pdE5hbWU9cGFyYW1zLmJhc2VVbml0TmFtZStuYW1lU3VmZml4O2NvbnN0IGpzb25OYW1lPXBhcmFtcy5iYXNlSnNvbk5hbWUrbmFtZVN1ZmZpeDtpZihVbml0LmJ5TmFtZVt1bml0TmFtZV0hPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignVW5pdCBcJycrdW5pdE5hbWUrJ1wnIGFscmVhZHkgZXhpc3RzJyk7fQotaWYoVW5pdC5ieUpTT05OYW1lW2pzb25OYW1lXSE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdKU09OIHVuaXQgXCcnK2pzb25OYW1lKydcJyBhbHJlYWQgZXhpc3RzJyk7fQotbGV0IHNjYWxlQmFzZVVuaXQ9cGFyYW1zLnNjYWxlQmFzZVVuaXQ7aWYoIXNjYWxlQmFzZVVuaXQpe2xldCBmb3JtYXRTcGVjPXBhcmFtcy5mb3JtYXRTcGVjO2lmKHR5cGVvZiBmb3JtYXRTcGVjPT09J2Z1bmN0aW9uJylmb3JtYXRTcGVjPWZvcm1hdFNwZWMoKTtjb25zdCBiYXNlU3ltYm9sPWZvcm1hdFNwZWMudW5pdFNjYWxlP2Zvcm1hdFNwZWMudW5pdFNjYWxlWzBdLmJhc2VTeW1ib2w6KGZvcm1hdFNwZWMuYmFzZVN5bWJvbHx8JycpO3NjYWxlQmFzZVVuaXQ9e3ZhbHVlOjEsc3ltYm9sOmJhc2VTeW1ib2wsYmFzZVN5bWJvbH07fQotY29uc3QgdW5pdD1uZXcgVW5pdCh1bml0TmFtZSxqc29uTmFtZSxzY2FsZUJhc2VVbml0LGlzRGVsdGEsaW1wcm92ZW1lbnREaXJlY3Rpb24scGFyYW1zLmZvcm1hdFNwZWMpO1VuaXQuYnlOYW1lW3VuaXROYW1lXT11bml0O1VuaXQuYnlKU09OTmFtZVtqc29uTmFtZV09dW5pdDtyZXR1cm4gdW5pdDt9O3RyLmIuRXZlbnRUYXJnZXQuZGVjb3JhdGUoVW5pdCk7VW5pdC5yZXNldCgpO1VuaXQuZGVmaW5lKHtiYXNlVW5pdE5hbWU6J3RpbWVJbk1zQXV0b0Zvcm1hdCcsYmFzZUpzb25OYW1lOidtc0Jlc3RGaXRGb3JtYXQnLHNjYWxlQmFzZVVuaXQ6dHIuYi5Vbml0U2NhbGUuVElNRS5NSUxMSV9TRUMsZm9ybWF0U3BlYzp7dW5pdFNjYWxlOnRyLmIuVW5pdFNjYWxlLlRJTUUuQVVUTyxtaW5pbXVtRnJhY3Rpb25EaWdpdHM6MCxtYXhpbXVtRnJhY3Rpb25EaWdpdHM6M319KTtVbml0LmRlZmluZSh7YmFzZVVuaXROYW1lOid0aW1lRHVyYXRpb25Jbk1zJyxiYXNlSnNvbk5hbWU6J21zJyxzY2FsZUJhc2VVbml0OnRyLmIuVW5pdFNjYWxlLlRJTUUuTUlMTElfU0VDLGZvcm1hdFNwZWMoKXtyZXR1cm4gVW5pdC5jdXJyZW50VGltZURpc3BsYXlNb2RlXy5mb3JtYXRTcGVjO319KTtVbml0LmRlZmluZSh7YmFzZVVuaXROYW1lOid0aW1lU3RhbXBJbk1zJyxiYXNlSnNvbk5hbWU6J3RzTXMnLHNjYWxlQmFzZVVuaXQ6dHIuYi5Vbml0U2NhbGUuVElNRS5NSUxMSV9TRUMsZm9ybWF0U3BlYygpe3JldHVybiBVbml0LmN1cnJlbnRUaW1lRGlzcGxheU1vZGVfLmZvcm1hdFNwZWM7fX0pO1VuaXQuZGVmaW5lKHtiYXNlVW5pdE5hbWU6J25vcm1hbGl6ZWRQZXJjZW50YWdlJyxiYXNlSnNvbk5hbWU6J24lJyxmb3JtYXRTcGVjOnt1bml0U2NhbGU6W3t2YWx1ZTowLjAxLHN5bWJvbDonJSd9XSxhdm9pZFNwYWNlUHJlY2VkaW5nVW5pdDp0cnVlLG1pbmltdW1GcmFjdGlvbkRpZ2l0czozLG1heGltdW1GcmFjdGlvbkRpZ2l0czozfX0pO1VuaXQuZGVmaW5lKHtiYXNlVW5pdE5hbWU6J3NpemVJbkJ5dGVzJyxiYXNlSnNvbk5hbWU6J3NpemVJbkJ5dGVzJyxmb3JtYXRTcGVjOnt1bml0U2NhbGU6dHIuYi5Vbml0U2NhbGUuTUVNT1JZLkFVVE8sbWluaW11bUZyYWN0aW9uRGlnaXRzOjEsbWF4aW11bUZyYWN0aW9uRGlnaXRzOjF9fSk7VW5pdC5kZWZpbmUoe2Jhc2VVbml0TmFtZTonZW5lcmd5SW5Kb3VsZXMnLGJhc2VKc29uTmFtZTonSicsZm9ybWF0U3BlYzp7YmFzZVN5bWJvbDonSicsbWluaW11bUZyYWN0aW9uRGlnaXRzOjN9fSk7VW5pdC5kZWZpbmUoe2Jhc2VVbml0TmFtZToncG93ZXJJbldhdHRzJyxiYXNlSnNvbk5hbWU6J1cnLGZvcm1hdFNwZWM6e2Jhc2VTeW1ib2w6J1cnLG1pbmltdW1GcmFjdGlvbkRpZ2l0czozfX0pO1VuaXQuZGVmaW5lKHtiYXNlVW5pdE5hbWU6J3VuaXRsZXNzTnVtYmVyJyxiYXNlSnNvbk5hbWU6J3VuaXRsZXNzJyxmb3JtYXRTcGVjOnttaW5pbXVtRnJhY3Rpb25EaWdpdHM6MyxtYXhpbXVtRnJhY3Rpb25EaWdpdHM6M319KTtVbml0LmRlZmluZSh7YmFzZVVuaXROYW1lOidjb3VudCcsYmFzZUpzb25OYW1lOidjb3VudCcsZm9ybWF0U3BlYzp7bWluaW11bUZyYWN0aW9uRGlnaXRzOjAsbWF4aW11bUZyYWN0aW9uRGlnaXRzOjB9fSk7VW5pdC5kZWZpbmUoe2Jhc2VVbml0TmFtZTonc2lnbWEnLGJhc2VKc29uTmFtZTonc2lnbWEnLGZvcm1hdFNwZWM6e2Jhc2VTeW1ib2w6U3RyaW5nLmZyb21DaGFyQ29kZSg5NjMpLG1pbmltdW1GcmFjdGlvbkRpZ2l0czoxLG1heGltdW1GcmFjdGlvbkRpZ2l0czoxfX0pO3JldHVybntJbXByb3ZlbWVudERpcmVjdGlvbixVbml0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2NsYXNzIFNjYWxhcntjb25zdHJ1Y3Rvcih1bml0LHZhbHVlKXtpZighKHVuaXQgaW5zdGFuY2VvZiB0ci5iLlVuaXQpKXt0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFVuaXQnKTt9Ci1pZighKHR5cGVvZih2YWx1ZSk9PT0nbnVtYmVyJykpe3Rocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdmFsdWUgdG8gYmUgbnVtYmVyJyk7fQotdGhpcy51bml0PXVuaXQ7dGhpcy52YWx1ZT12YWx1ZTt9Ci1hc0RpY3QoKXtyZXR1cm57dW5pdDp0aGlzLnVuaXQuYXNKU09OKCksdmFsdWU6dHIuYi5udW1iZXJUb0pzb24odGhpcy52YWx1ZSksfTt9Ci10b1N0cmluZygpe3JldHVybiB0aGlzLnVuaXQuZm9ybWF0KHRoaXMudmFsdWUpO30KLXN0YXRpYyBmcm9tRGljdChkKXtyZXR1cm4gbmV3IFNjYWxhcih0ci5iLlVuaXQuZnJvbUpTT04oZC51bml0KSx0ci5iLm51bWJlckZyb21Kc29uKGQudmFsdWUpKTt9fQotcmV0dXJue1NjYWxhcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYycsZnVuY3Rpb24oKXtmdW5jdGlvbiBBdWRpdG9yKG1vZGVsKXt0aGlzLm1vZGVsXz1tb2RlbDt9Ci1BdWRpdG9yLnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdC5wcm90b3R5cGUsZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30scnVuQW5ub3RhdGUoKXt9LGluc3RhbGxVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlcklmTmVlZGVkKCl7fSxydW5BdWRpdCgpe319O2NvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuQkFTSUNfUkVHSVNUUllfTU9ERSk7b3B0aW9ucy5kZWZhdWx0TWV0YWRhdGE9e307b3B0aW9ucy5tYW5kYXRvcnlCYXNlQ2xhc3M9QXVkaXRvcjt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoQXVkaXRvcixvcHRpb25zKTtyZXR1cm57QXVkaXRvcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBjbGFtcDAxKHZhbHVlKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLHZhbHVlKSk7fQotZnVuY3Rpb24gQ29sb3Iob3B0X3Isb3B0X2csb3B0X2Isb3B0X2Epe3RoaXMucj1NYXRoLmZsb29yKG9wdF9yKXx8MDt0aGlzLmc9TWF0aC5mbG9vcihvcHRfZyl8fDA7dGhpcy5iPU1hdGguZmxvb3Iob3B0X2IpfHwwO3RoaXMuYT1vcHRfYTt9Ci1Db2xvci5mcm9tU3RyaW5nPWZ1bmN0aW9uKHN0cil7bGV0IHRtcDtsZXQgdmFsdWVzO2lmKHN0ci5zdWJzdHIoMCw0KT09PSdyZ2IoJyl7dG1wPXN0ci5zdWJzdHIoNCxzdHIubGVuZ3RoLTUpO3ZhbHVlcz10bXAuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYucmVwbGFjZSgvXlxzKy8sJycsJ2cnKTt9KTtpZih2YWx1ZXMubGVuZ3RoIT09Myl7dGhyb3cgbmV3IEVycm9yKCdNYWxmb3JtYXR0ZWQgcmdiLWV4cHJlc3Npb24nKTt9Ci1yZXR1cm4gbmV3IENvbG9yKHBhcnNlSW50KHZhbHVlc1swXSkscGFyc2VJbnQodmFsdWVzWzFdKSxwYXJzZUludCh2YWx1ZXNbMl0pKTt9Ci1pZihzdHIuc3Vic3RyKDAsNSk9PT0ncmdiYSgnKXt0bXA9c3RyLnN1YnN0cig1LHN0ci5sZW5ndGgtNik7dmFsdWVzPXRtcC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5yZXBsYWNlKC9eXHMrLywnJywnZycpO30pO2lmKHZhbHVlcy5sZW5ndGghPT00KXt0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1hdHRlZCByZ2ItZXhwcmVzc2lvbicpO30KLXJldHVybiBuZXcgQ29sb3IocGFyc2VJbnQodmFsdWVzWzBdKSxwYXJzZUludCh2YWx1ZXNbMV0pLHBhcnNlSW50KHZhbHVlc1syXSkscGFyc2VGbG9hdCh2YWx1ZXNbM10pKTt9Ci1pZihzdHJbMF09PT0nIycmJnN0ci5sZW5ndGg9PT03KXtyZXR1cm4gbmV3IENvbG9yKHBhcnNlSW50KHN0ci5zdWJzdHIoMSwyKSwxNikscGFyc2VJbnQoc3RyLnN1YnN0cigzLDIpLDE2KSxwYXJzZUludChzdHIuc3Vic3RyKDUsMiksMTYpKTt9Ci10aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBzdHJpbmcgZm9ybWF0LicpO307Q29sb3IubGVycD1mdW5jdGlvbihhLGIscGVyY2VudCl7aWYoYS5hIT09dW5kZWZpbmVkJiZiLmEhPT11bmRlZmluZWQpe3JldHVybiBDb2xvci5sZXJwUkdCQShhLGIscGVyY2VudCk7fQotcmV0dXJuIENvbG9yLmxlcnBSR0IoYSxiLHBlcmNlbnQpO307Q29sb3IubGVycFJHQj1mdW5jdGlvbihhLGIscGVyY2VudCl7cmV0dXJuIG5ldyBDb2xvcigoKGIuci1hLnIpKnBlcmNlbnQpK2EuciwoKGIuZy1hLmcpKnBlcmNlbnQpK2EuZywoKGIuYi1hLmIpKnBlcmNlbnQpK2EuYik7fTtDb2xvci5sZXJwUkdCQT1mdW5jdGlvbihhLGIscGVyY2VudCl7cmV0dXJuIG5ldyBDb2xvcigoKGIuci1hLnIpKnBlcmNlbnQpK2EuciwoKGIuZy1hLmcpKnBlcmNlbnQpK2EuZywoKGIuYi1hLmIpKnBlcmNlbnQpK2EuYiwoKGIuYS1hLmEpKnBlcmNlbnQpK2EuYSk7fTtDb2xvci5mcm9tRGljdD1mdW5jdGlvbihkaWN0KXtyZXR1cm4gbmV3IENvbG9yKGRpY3QucixkaWN0LmcsZGljdC5iLGRpY3QuYSk7fTtDb2xvci5mcm9tSFNMRXhwbGljaXQ9ZnVuY3Rpb24oaCxzLGwsYSl7bGV0IHI7bGV0IGc7bGV0IGI7ZnVuY3Rpb24gaHVlMnJnYihwLHEsdCl7aWYodDwwKXQrPTE7aWYodD4xKXQtPTE7aWYodDwxLzYpcmV0dXJuIHArKHEtcCkqNip0O2lmKHQ8MS8yKXJldHVybiBxO2lmKHQ8Mi8zKXJldHVybiBwKyhxLXApKigyLzMtdCkqNjtyZXR1cm4gcDt9Ci1pZihzPT09MCl7cj1nPWI9bDt9ZWxzZXtjb25zdCBxPWw8MC41P2wqKDErcyk6bCtzLWwqcztjb25zdCBwPTIqbC1xO3I9aHVlMnJnYihwLHEsaCsxLzMpO2c9aHVlMnJnYihwLHEsaCk7Yj1odWUycmdiKHAscSxoLTEvMyk7fQotcmV0dXJuIG5ldyBDb2xvcihNYXRoLmZsb29yKHIqMjU1KSxNYXRoLmZsb29yKGcqMjU1KSxNYXRoLmZsb29yKGIqMjU1KSxhKTt9O0NvbG9yLmZyb21IU0w9ZnVuY3Rpb24oaHNsKXtyZXR1cm4gQ29sb3IuZnJvbUhTTEV4cGxpY2l0KGhzbC5oLGhzbC5zLGhzbC5sLGhzbC5hKTt9O0NvbG9yLnByb3RvdHlwZT17Y2xvbmUoKXtjb25zdCBjPW5ldyBDb2xvcigpO2Mucj10aGlzLnI7Yy5nPXRoaXMuZztjLmI9dGhpcy5iO2MuYT10aGlzLmE7cmV0dXJuIGM7fSxibGVuZE92ZXIoYmdDb2xvcil7Y29uc3Qgb25lTWludXNUaGlzQWxwaGE9MS10aGlzLmE7Y29uc3Qgb3V0QT10aGlzLmErYmdDb2xvci5hKm9uZU1pbnVzVGhpc0FscGhhO2NvbnN0IGJnQmxlbmQ9KGJnQ29sb3IuYSpvbmVNaW51c1RoaXNBbHBoYSkvYmdDb2xvci5hO3JldHVybiBuZXcgQ29sb3IodGhpcy5yKnRoaXMuYStiZ0NvbG9yLnIqYmdCbGVuZCx0aGlzLmcqdGhpcy5hK2JnQ29sb3IuZypiZ0JsZW5kLHRoaXMuYip0aGlzLmErYmdDb2xvci5iKmJnQmxlbmQsb3V0QSk7fSxicmlnaHRlbihvcHRfayl7Y29uc3Qgaz1vcHRfa3x8MC40NTtyZXR1cm4gbmV3IENvbG9yKE1hdGgubWluKDI1NSx0aGlzLnIrTWF0aC5mbG9vcih0aGlzLnIqaykpLE1hdGgubWluKDI1NSx0aGlzLmcrTWF0aC5mbG9vcih0aGlzLmcqaykpLE1hdGgubWluKDI1NSx0aGlzLmIrTWF0aC5mbG9vcih0aGlzLmIqaykpLHRoaXMuYSk7fSxsaWdodGVuKGssb3B0X21heEwpe2NvbnN0IG1heEw9b3B0X21heEwhPT11bmRlZmluZWQ/b3B0X21heEw6MS4wO2NvbnN0IGhzbD10aGlzLnRvSFNMKCk7aHNsLmw9TWF0aC5taW4oaHNsLmwrayxtYXhMKTtyZXR1cm4gQ29sb3IuZnJvbUhTTChoc2wpO30sZGFya2VuKG9wdF9rKXtsZXQgaztpZihvcHRfayE9PXVuZGVmaW5lZCl7az1vcHRfazt9ZWxzZXtrPTAuNDU7fQotcmV0dXJuIG5ldyBDb2xvcihNYXRoLm1pbigyNTUsdGhpcy5yLU1hdGguZmxvb3IodGhpcy5yKmspKSxNYXRoLm1pbigyNTUsdGhpcy5nLU1hdGguZmxvb3IodGhpcy5nKmspKSxNYXRoLm1pbigyNTUsdGhpcy5iLU1hdGguZmxvb3IodGhpcy5iKmspKSx0aGlzLmEpO30sZGVzYXR1cmF0ZShvcHRfZGVzYXR1cmF0ZUZhY3Rvcil7bGV0IGRlc2F0dXJhdGVGYWN0b3I7aWYob3B0X2Rlc2F0dXJhdGVGYWN0b3IhPT11bmRlZmluZWQpe2Rlc2F0dXJhdGVGYWN0b3I9b3B0X2Rlc2F0dXJhdGVGYWN0b3I7fWVsc2V7ZGVzYXR1cmF0ZUZhY3Rvcj0xO30KLWNvbnN0IGhzbD10aGlzLnRvSFNMKCk7aHNsLnM9Y2xhbXAwMShoc2wucyooMS1kZXNhdHVyYXRlRmFjdG9yKSk7cmV0dXJuIENvbG9yLmZyb21IU0woaHNsKTt9LHdpdGhBbHBoYShhKXtyZXR1cm4gbmV3IENvbG9yKHRoaXMucix0aGlzLmcsdGhpcy5iLGEpO30sdG9TdHJpbmcoKXtpZih0aGlzLmEhPT11bmRlZmluZWQpe3JldHVybidyZ2JhKCcrCi10aGlzLnIrJywnK3RoaXMuZysnLCcrCi10aGlzLmIrJywnK3RoaXMuYSsnKSc7fQotcmV0dXJuJ3JnYignK3RoaXMucisnLCcrdGhpcy5nKycsJyt0aGlzLmIrJyknO30sdG9IU0woKXtjb25zdCByPXRoaXMuci8yNTU7Y29uc3QgZz10aGlzLmcvMjU1O2NvbnN0IGI9dGhpcy5iLzI1NTtjb25zdCBtYXg9TWF0aC5tYXgocixnLGIpO2NvbnN0IG1pbj1NYXRoLm1pbihyLGcsYik7bGV0IGg7bGV0IHM7Y29uc3QgbD0obWF4K21pbikvMjtpZihtaW49PT1tYXgpe2g9MDtzPTA7fWVsc2V7Y29uc3QgZGVsdGE9bWF4LW1pbjtpZihsPjAuNSl7cz1kZWx0YS8oMi1tYXgtbWluKTt9ZWxzZXtzPWRlbHRhLyhtYXgrbWluKTt9Ci1pZihyPT09bWF4KXtoPShnLWIpL2RlbHRhO2lmKGc8YiloKz02O31lbHNlIGlmKGc9PT1tYXgpe2g9MisoKGItcikvZGVsdGEpO31lbHNle2g9NCsoKHItZykvZGVsdGEpO30KLWgvPTY7fQotcmV0dXJue2gscyxsLGE6dGhpcy5hfTt9LHRvU3RyaW5nV2l0aEFscGhhT3ZlcnJpZGUoYWxwaGEpe3JldHVybidyZ2JhKCcrCi10aGlzLnIrJywnK3RoaXMuZysnLCcrCi10aGlzLmIrJywnK2FscGhhKycpJzt9fTtyZXR1cm57Q29sb3IsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y29uc3QgZ2VuZXJhbFB1cnBvc2VDb2xvcnM9W25ldyB0ci5iLkNvbG9yKDEyMiw5OCwxMzUpLG5ldyB0ci5iLkNvbG9yKDE1MCw4MywxMDUpLG5ldyB0ci5iLkNvbG9yKDQ0LDU2LDE4OSksbmV3IHRyLmIuQ29sb3IoOTksODYsMTQ3KSxuZXcgdHIuYi5Db2xvcigxMDQsMTI5LDEwNyksbmV3IHRyLmIuQ29sb3IoMTMwLDE3OCw1NSksbmV3IHRyLmIuQ29sb3IoODcsMTA5LDE0NyksbmV3IHRyLmIuQ29sb3IoMTExLDE0NSw4OCksbmV3IHRyLmIuQ29sb3IoODEsMTUyLDEzMSksbmV3IHRyLmIuQ29sb3IoMTQyLDkxLDExMSksbmV3IHRyLmIuQ29sb3IoODEsMTYzLDcwKSxuZXcgdHIuYi5Db2xvcigxNDgsOTQsODYpLG5ldyB0ci5iLkNvbG9yKDE0NCw4OSwxMTgpLG5ldyB0ci5iLkNvbG9yKDgzLDE1MCw5NyksbmV3IHRyLmIuQ29sb3IoMTA1LDk0LDEzOSksbmV3IHRyLmIuQ29sb3IoODksMTQ0LDEyMiksbmV3IHRyLmIuQ29sb3IoMTA1LDExOSwxMjgpLG5ldyB0ci5iLkNvbG9yKDk2LDEyOCwxMzcpLG5ldyB0ci5iLkNvbG9yKDE0NSw4OCwxNDUpLG5ldyB0ci5iLkNvbG9yKDg4LDE0NSwxNDQpLG5ldyB0ci5iLkNvbG9yKDkwLDEwMCwxNDMpLG5ldyB0ci5iLkNvbG9yKDEyMSw5NywxMzYpLG5ldyB0ci5iLkNvbG9yKDExMSwxNjAsNzMpLG5ldyB0ci5iLkNvbG9yKDExMiw5MSwxNDIpLG5ldyB0ci5iLkNvbG9yKDg2LDE0Nyw4NiksbmV3IHRyLmIuQ29sb3IoNjMsMTAwLDE3MCksbmV3IHRyLmIuQ29sb3IoODEsMTUyLDEwNyksbmV3IHRyLmIuQ29sb3IoNjAsMTY0LDE3MyksbmV3IHRyLmIuQ29sb3IoMTQzLDcyLDE2MSksbmV3IHRyLmIuQ29sb3IoMTU5LDc0LDg2KV07Y29uc3QgcmVzZXJ2ZWRDb2xvcnNCeU5hbWU9e3RocmVhZF9zdGF0ZV91bmludGVycnVwdGlibGU6bmV3IHRyLmIuQ29sb3IoMTgyLDEyNSwxNDMpLHRocmVhZF9zdGF0ZV9pb3dhaXQ6bmV3IHRyLmIuQ29sb3IoMjU1LDE0MCwwKSx0aHJlYWRfc3RhdGVfcnVubmluZzpuZXcgdHIuYi5Db2xvcigxMjYsMjAwLDE0OCksdGhyZWFkX3N0YXRlX3J1bm5hYmxlOm5ldyB0ci5iLkNvbG9yKDEzMywxNjAsMjEwKSx0aHJlYWRfc3RhdGVfc2xlZXBpbmc6bmV3IHRyLmIuQ29sb3IoMjQwLDI0MCwyNDApLHRocmVhZF9zdGF0ZV91bmtub3duOm5ldyB0ci5iLkNvbG9yKDE5OSwxNTUsMTI1KSxiYWNrZ3JvdW5kX21lbW9yeV9kdW1wOm5ldyB0ci5iLkNvbG9yKDAsMTgwLDE4MCksbGlnaHRfbWVtb3J5X2R1bXA6bmV3IHRyLmIuQ29sb3IoMCwwLDE4MCksZGV0YWlsZWRfbWVtb3J5X2R1bXA6bmV3IHRyLmIuQ29sb3IoMTgwLDAsMTgwKSx2c3luY19oaWdobGlnaHRfY29sb3I6bmV3IHRyLmIuQ29sb3IoMCwwLDI1NSksZ2VuZXJpY193b3JrOm5ldyB0ci5iLkNvbG9yKDEyNSwxMjUsMTI1KSxnb29kOm5ldyB0ci5iLkNvbG9yKDAsMTI1LDApLGJhZDpuZXcgdHIuYi5Db2xvcigxODAsMTI1LDApLHRlcnJpYmxlOm5ldyB0ci5iLkNvbG9yKDE4MCwwLDApLGJsYWNrOm5ldyB0ci5iLkNvbG9yKDAsMCwwKSxncmV5Om5ldyB0ci5iLkNvbG9yKDIyMSwyMjEsMjIxKSx3aGl0ZTpuZXcgdHIuYi5Db2xvcigyNTUsMjU1LDI1NSkseWVsbG93Om5ldyB0ci5iLkNvbG9yKDI1NSwyNTUsMCksb2xpdmU6bmV3IHRyLmIuQ29sb3IoMTAwLDEwMCwwKSxyYWlsX3Jlc3BvbnNlOm5ldyB0ci5iLkNvbG9yKDY3LDEzNSwyNTMpLHJhaWxfYW5pbWF0aW9uOm5ldyB0ci5iLkNvbG9yKDI0NCw3NCw2MykscmFpbF9pZGxlOm5ldyB0ci5iLkNvbG9yKDIzOCwxNDIsMCkscmFpbF9sb2FkOm5ldyB0ci5iLkNvbG9yKDEzLDE2OCw5Nyksc3RhcnR1cDpuZXcgdHIuYi5Db2xvcigyMzAsMjMwLDApLGhlYXBfZHVtcF9zdGFja19mcmFtZTpuZXcgdHIuYi5Db2xvcigxMjgsMTI4LDEyOCksaGVhcF9kdW1wX29iamVjdF90eXBlOm5ldyB0ci5iLkNvbG9yKDAsMCwyNTUpLGhlYXBfZHVtcF9jaGlsZF9ub2RlX2Fycm93Om5ldyB0ci5iLkNvbG9yKDIwNCwxMDIsMCksY3FfYnVpbGRfcnVubmluZzpuZXcgdHIuYi5Db2xvcigyNTUsMjU1LDExOSksY3FfYnVpbGRfcGFzc2VkOm5ldyB0ci5iLkNvbG9yKDE1MywyMzgsMTAyKSxjcV9idWlsZF9mYWlsZWQ6bmV3IHRyLmIuQ29sb3IoMjM4LDEzNiwxMzYpLGNxX2J1aWxkX2FiYW5kb25lZDpuZXcgdHIuYi5Db2xvcigxODcsMTg3LDE4NyksY3FfYnVpbGRfYXR0ZW1wdF9ydW5uaWc6bmV3IHRyLmIuQ29sb3IoMjIyLDIyMiw3NSksY3FfYnVpbGRfYXR0ZW1wdF9wYXNzZWQ6bmV3IHRyLmIuQ29sb3IoMTAzLDIxOCwzNSksY3FfYnVpbGRfYXR0ZW1wdF9mYWlsZWQ6bmV3IHRyLmIuQ29sb3IoMTk3LDgxLDgxKX07Y29uc3QgbnVtR2VuZXJhbFB1cnBvc2VDb2xvcklkcz1nZW5lcmFsUHVycG9zZUNvbG9ycy5sZW5ndGg7Y29uc3QgbnVtUmVzZXJ2ZWRDb2xvcklkcz1PYmplY3Qua2V5cyhyZXNlcnZlZENvbG9yc0J5TmFtZSkubGVuZ3RoO2NvbnN0IG51bUNvbG9yc1BlclZhcmlhbnQ9bnVtR2VuZXJhbFB1cnBvc2VDb2xvcklkcytudW1SZXNlcnZlZENvbG9ySWRzO2Z1bmN0aW9uIENvbG9yU2NoZW1lKCl7fQotY29uc3QgcGFsZXR0ZUJhc2U9W107cGFsZXR0ZUJhc2UucHVzaC5hcHBseShwYWxldHRlQmFzZSxnZW5lcmFsUHVycG9zZUNvbG9ycyk7cGFsZXR0ZUJhc2UucHVzaC5hcHBseShwYWxldHRlQmFzZSxPYmplY3QudmFsdWVzKHJlc2VydmVkQ29sb3JzQnlOYW1lKSk7Q29sb3JTY2hlbWUuY29sb3JzPVtdO0NvbG9yU2NoZW1lLnByb3BlcnRpZXM9e307Q29sb3JTY2hlbWUucHJvcGVydGllcz17bnVtQ29sb3JzUGVyVmFyaWFudCx9O2Z1bmN0aW9uIHB1c2hWYXJpYW50KGZ1bmMpe2NvbnN0IHZhcmlhbnRDb2xvcnM9cGFsZXR0ZUJhc2UubWFwKGZ1bmMpO0NvbG9yU2NoZW1lLmNvbG9ycy5wdXNoLmFwcGx5KENvbG9yU2NoZW1lLmNvbG9ycyx2YXJpYW50Q29sb3JzKTt9Ci1wdXNoVmFyaWFudChmdW5jdGlvbihjKXtyZXR1cm4gYzt9KTtDb2xvclNjaGVtZS5wcm9wZXJ0aWVzLmJyaWdodGVuZWRPZmZzZXRzPVtdO0NvbG9yU2NoZW1lLnByb3BlcnRpZXMuYnJpZ2h0ZW5lZE9mZnNldHMucHVzaChDb2xvclNjaGVtZS5jb2xvcnMubGVuZ3RoKTtwdXNoVmFyaWFudChmdW5jdGlvbihjKXtyZXR1cm4gYy5saWdodGVuKDAuMywwLjgpO30pO0NvbG9yU2NoZW1lLnByb3BlcnRpZXMuYnJpZ2h0ZW5lZE9mZnNldHMucHVzaChDb2xvclNjaGVtZS5jb2xvcnMubGVuZ3RoKTtwdXNoVmFyaWFudChmdW5jdGlvbihjKXtyZXR1cm4gYy5saWdodGVuKDAuNDgsMC44NSk7fSk7Q29sb3JTY2hlbWUucHJvcGVydGllcy5icmlnaHRlbmVkT2Zmc2V0cy5wdXNoKENvbG9yU2NoZW1lLmNvbG9ycy5sZW5ndGgpO3B1c2hWYXJpYW50KGZ1bmN0aW9uKGMpe3JldHVybiBjLmxpZ2h0ZW4oMC42NSwwLjkpO30pO0NvbG9yU2NoZW1lLnByb3BlcnRpZXMuZGltbWVkT2Zmc2V0cz1bXTtDb2xvclNjaGVtZS5wcm9wZXJ0aWVzLmRpbW1lZE9mZnNldHMucHVzaChDb2xvclNjaGVtZS5jb2xvcnMubGVuZ3RoKTtwdXNoVmFyaWFudChmdW5jdGlvbihjKXtyZXR1cm4gYy5kZXNhdHVyYXRlKCk7fSk7Q29sb3JTY2hlbWUucHJvcGVydGllcy5kaW1tZWRPZmZzZXRzLnB1c2goQ29sb3JTY2hlbWUuY29sb3JzLmxlbmd0aCk7cHVzaFZhcmlhbnQoZnVuY3Rpb24oYyl7cmV0dXJuIGMuZGVzYXR1cmF0ZSgwLjUpO30pO0NvbG9yU2NoZW1lLnByb3BlcnRpZXMuZGltbWVkT2Zmc2V0cy5wdXNoKENvbG9yU2NoZW1lLmNvbG9ycy5sZW5ndGgpO3B1c2hWYXJpYW50KGZ1bmN0aW9uKGMpe3JldHVybiBjLmRlc2F0dXJhdGUoMC4zKTt9KTtDb2xvclNjaGVtZS5jb2xvcnNBc1N0cmluZ3M9Q29sb3JTY2hlbWUuY29sb3JzLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYy50b1N0cmluZygpO30pO2NvbnN0IHJlc2VydmVkQ29sb3JOYW1lVG9JZE1hcD0oZnVuY3Rpb24oKXtjb25zdCBtPW5ldyBNYXAoKTtsZXQgaT1nZW5lcmFsUHVycG9zZUNvbG9ycy5sZW5ndGg7Zm9yKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNlcnZlZENvbG9yc0J5TmFtZSkpe20uc2V0KGtleSxpKyspO30KLXJldHVybiBtO30pKCk7Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZT1mdW5jdGlvbihuYW1lKXtjb25zdCBpZD1yZXNlcnZlZENvbG9yTmFtZVRvSWRNYXAuZ2V0KG5hbWUpO2lmKGlkPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBjb2xvciAnK25hbWUpO30KLXJldHVybiBpZDt9O0NvbG9yU2NoZW1lLmdldENvbG9yRm9yUmVzZXJ2ZWROYW1lQXNTdHJpbmc9ZnVuY3Rpb24ocmVzZXJ2ZWROYW1lKXtjb25zdCBpZD1Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lKHJlc2VydmVkTmFtZSk7cmV0dXJuIENvbG9yU2NoZW1lLmNvbG9yc0FzU3RyaW5nc1tpZF07fTtDb2xvclNjaGVtZS5nZXRTdHJpbmdIYXNoPWZ1bmN0aW9uKG5hbWUpe2xldCBoYXNoPTA7Zm9yKGxldCBpPTA7aTxuYW1lLmxlbmd0aDsrK2kpe2hhc2g9KGhhc2grMzcqaGFzaCsxMSpuYW1lLmNoYXJDb2RlQXQoaSkpJTB4RkZGRkZGRkY7fQotcmV0dXJuIGhhc2g7fTtjb25zdCBzdHJpbmdDb2xvcklkQ2FjaGU9bmV3IE1hcCgpO0NvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZz1mdW5jdGlvbihzdHJpbmcpe2lmKHN0cmluZ0NvbG9ySWRDYWNoZS5nZXQoc3RyaW5nKT09PXVuZGVmaW5lZCl7Y29uc3QgaGFzaD1Db2xvclNjaGVtZS5nZXRTdHJpbmdIYXNoKHN0cmluZyk7c3RyaW5nQ29sb3JJZENhY2hlLnNldChzdHJpbmcsaGFzaCVudW1HZW5lcmFsUHVycG9zZUNvbG9ySWRzKTt9Ci1yZXR1cm4gc3RyaW5nQ29sb3JJZENhY2hlLmdldChzdHJpbmcpO307Q29sb3JTY2hlbWUuZ2V0QW5vdGhlckNvbG9ySWQ9ZnVuY3Rpb24oY29sb3JJZCxuKXtyZXR1cm4oY29sb3JJZCtuKSVudW1Db2xvcnNQZXJWYXJpYW50O307Q29sb3JTY2hlbWUuZ2V0VmFyaWFudENvbG9ySWQ9ZnVuY3Rpb24oY29sb3JJZCxvZmZzZXQpe3JldHVybiBjb2xvcklkK29mZnNldDt9O3JldHVybntDb2xvclNjaGVtZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtmdW5jdGlvbiBFdmVudEluZm8odGl0bGUsZGVzY3JpcHRpb24sZG9jTGlua3Mpe3RoaXMudGl0bGU9dGl0bGU7dGhpcy5kZXNjcmlwdGlvbj1kZXNjcmlwdGlvbjt0aGlzLmRvY0xpbmtzPWRvY0xpbmtzO3RoaXMuY29sb3JJZD1Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcodGl0bGUpO30KLXJldHVybntFdmVudEluZm8sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7bGV0IG5leHRHVUlEPTE7Y29uc3QgVVVJRDRfUEFUVEVSTj0neHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jztjb25zdCBHVUlEPXthbGxvY2F0ZVNpbXBsZSgpe3JldHVybiBuZXh0R1VJRCsrO30sZ2V0TGFzdFNpbXBsZUd1aWQoKXtyZXR1cm4gbmV4dEdVSUQtMTt9LGFsbG9jYXRlVVVJRDQoKXtyZXR1cm4gVVVJRDRfUEFUVEVSTi5yZXBsYWNlKC9beHldL2csZnVuY3Rpb24oYyl7bGV0IHI9cGFyc2VJbnQoTWF0aC5yYW5kb20oKSoxNik7aWYoYz09PSd5JylyPShyJjMpKzg7cmV0dXJuIHIudG9TdHJpbmcoMTYpO30pO319O3JldHVybntHVUlELH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBFdmVudFJlZ2lzdHJ5KCl7fQotY29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5CQVNJQ19SRUdJU1RSWV9NT0RFKTt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoRXZlbnRSZWdpc3RyeSxvcHRpb25zKTtFdmVudFJlZ2lzdHJ5LmFkZEV2ZW50TGlzdGVuZXIoJ3dpbGwtcmVnaXN0ZXInLGZ1bmN0aW9uKGUpe2NvbnN0IG1ldGFkYXRhPWUudHlwZUluZm8ubWV0YWRhdGE7aWYobWV0YWRhdGEubmFtZT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdSZWdpc3RlcmVkIGV2ZW50cyBtdXN0IHByb3ZpZGUgbmFtZSBtZXRhZGF0YScpO30KLWlmKG1ldGFkYXRhLnBsdXJhbE5hbWU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignUmVnaXN0ZXJlZCBldmVudHMgbXVzdCBwcm92aWRlIHBsdXJhbE5hbWUgbWV0YWRhdGEnKTt9Ci1pZihtZXRhZGF0YS5zdWJUeXBlcz09PXVuZGVmaW5lZCl7bWV0YWRhdGEuc3ViVHlwZXM9e307Y29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5UWVBFX0JBU0VEX1JFR0lTVFJZX01PREUpO29wdGlvbnMubWFuZGF0b3J5QmFzZUNsYXNzPWUudHlwZUluZm8uY29uc3RydWN0b3I7b3B0aW9ucy5kZWZhdWx0Q29uc3RydWN0b3I9ZS50eXBlSW5mby5jb25zdHJ1Y3Rvcjt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkobWV0YWRhdGEuc3ViVHlwZXMsb3B0aW9ucyk7fWVsc2V7aWYoIW1ldGFkYXRhLnN1YlR5cGVzLnJlZ2lzdGVyKXt0aHJvdyBuZXcgRXJyb3IoJ21ldGFkYXRhLnN1YlR5cGVzIG11c3QgYmUgYW4gZXh0ZW5zaW9uIHJlZ2lzdHJ5LicpO319Ci1lLnR5cGVJbmZvLmNvbnN0cnVjdG9yLnN1YlR5cGVzPW1ldGFkYXRhLnN1YlR5cGVzO30pO2xldCBldmVudHNCeVR5cGVOYW1lPXVuZGVmaW5lZDtFdmVudFJlZ2lzdHJ5LmdldEV2ZW50VHlwZUluZm9CeVR5cGVOYW1lPWZ1bmN0aW9uKHR5cGVOYW1lKXtpZihldmVudHNCeVR5cGVOYW1lPT09dW5kZWZpbmVkKXtldmVudHNCeVR5cGVOYW1lPXt9O0V2ZW50UmVnaXN0cnkuZ2V0QWxsUmVnaXN0ZXJlZFR5cGVJbmZvcygpLmZvckVhY2goZnVuY3Rpb24odHlwZUluZm8pe2V2ZW50c0J5VHlwZU5hbWVbdHlwZUluZm8ubWV0YWRhdGEubmFtZV09dHlwZUluZm87fSk7fQotcmV0dXJuIGV2ZW50c0J5VHlwZU5hbWVbdHlwZU5hbWVdO307RXZlbnRSZWdpc3RyeS5hZGRFdmVudExpc3RlbmVyKCdyZWdpc3RyeS1jaGFuZ2VkJyxmdW5jdGlvbigpe2V2ZW50c0J5VHlwZU5hbWU9dW5kZWZpbmVkO30pO2Z1bmN0aW9uIGNvbnZlcnRDYW1lbENhc2VUb1RpdGxlQ2FzZShuYW1lKXtsZXQgcmVzdWx0PW5hbWUucmVwbGFjZSgvW0EtWl0vZywnICQmJyk7cmVzdWx0PXJlc3VsdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStyZXN1bHQuc2xpY2UoMSk7cmV0dXJuIHJlc3VsdDt9Ci1FdmVudFJlZ2lzdHJ5LmdldFVzZXJGcmllbmRseVNpbmd1bGFyTmFtZT1mdW5jdGlvbih0eXBlTmFtZSl7Y29uc3QgdHlwZUluZm89RXZlbnRSZWdpc3RyeS5nZXRFdmVudFR5cGVJbmZvQnlUeXBlTmFtZSh0eXBlTmFtZSk7Y29uc3Qgc3RyPXR5cGVJbmZvLm1ldGFkYXRhLm5hbWU7cmV0dXJuIGNvbnZlcnRDYW1lbENhc2VUb1RpdGxlQ2FzZShzdHIpO307RXZlbnRSZWdpc3RyeS5nZXRVc2VyRnJpZW5kbHlQbHVyYWxOYW1lPWZ1bmN0aW9uKHR5cGVOYW1lKXtjb25zdCB0eXBlSW5mbz1FdmVudFJlZ2lzdHJ5LmdldEV2ZW50VHlwZUluZm9CeVR5cGVOYW1lKHR5cGVOYW1lKTtjb25zdCBzdHI9dHlwZUluZm8ubWV0YWRhdGEucGx1cmFsTmFtZTtyZXR1cm4gY29udmVydENhbWVsQ2FzZVRvVGl0bGVDYXNlKHN0cik7fTtyZXR1cm57RXZlbnRSZWdpc3RyeSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgRXZlbnRSZWdpc3RyeT10ci5tb2RlbC5FdmVudFJlZ2lzdHJ5O2NvbnN0IFJlcXVlc3RTZWxlY3Rpb25DaGFuZ2VFdmVudD10ci5iLkV2ZW50LmJpbmQodW5kZWZpbmVkLCdyZXF1ZXN0U2VsZWN0aW9uQ2hhbmdlJyx0cnVlLGZhbHNlKTtmdW5jdGlvbiBFdmVudFNldChvcHRfZXZlbnRzKXt0aGlzLmJvdW5kc189bmV3IHRyLmIubWF0aC5SYW5nZSgpO3RoaXMuZXZlbnRzXz1uZXcgU2V0KCk7dGhpcy5ndWlkXz10ci5iLkdVSUQuYWxsb2NhdGVTaW1wbGUoKTtpZihvcHRfZXZlbnRzKXtpZihvcHRfZXZlbnRzIGluc3RhbmNlb2YgQXJyYXkpe2Zvcihjb25zdCBldmVudCBvZiBvcHRfZXZlbnRzKXt0aGlzLnB1c2goZXZlbnQpO319ZWxzZSBpZihvcHRfZXZlbnRzIGluc3RhbmNlb2YgRXZlbnRTZXQpe3RoaXMuYWRkRXZlbnRTZXQob3B0X2V2ZW50cyk7fWVsc2V7dGhpcy5wdXNoKG9wdF9ldmVudHMpO319fQotRXZlbnRTZXQucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZSxnZXQgYm91bmRzKCl7cmV0dXJuIHRoaXMuYm91bmRzXzt9LGdldCBkdXJhdGlvbigpe2lmKHRoaXMuYm91bmRzXy5pc0VtcHR5KXJldHVybiAwO3JldHVybiB0aGlzLmJvdW5kc18ubWF4LXRoaXMuYm91bmRzXy5taW47fSxnZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZXZlbnRzXy5zaXplO30sZ2V0IGd1aWQoKXtyZXR1cm4gdGhpcy5ndWlkXzt9LCpbU3ltYm9sLml0ZXJhdG9yXSgpe2Zvcihjb25zdCBldmVudCBvZiB0aGlzLmV2ZW50c18pe3lpZWxkIGV2ZW50O319LGNsZWFyKCl7dGhpcy5ib3VuZHNfPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTt0aGlzLmV2ZW50c18uY2xlYXIoKTt9LHB1c2goLi4uZXZlbnRzKXtsZXQgbnVtUHVzaGVkO2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2lmKGV2ZW50Lmd1aWQ9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignRXZlbnQgbXVzdCBoYXZlIGEgR1VJRCcpO30KLWlmKCF0aGlzLmV2ZW50c18uaGFzKGV2ZW50KSl7dGhpcy5ldmVudHNfLmFkZChldmVudCk7aWYoZXZlbnQuYWRkQm91bmRzVG9SYW5nZSl7aWYodGhpcy5ib3VuZHNfIT09dW5kZWZpbmVkKXtldmVudC5hZGRCb3VuZHNUb1JhbmdlKHRoaXMuYm91bmRzXyk7fX19Ci1udW1QdXNoZWQrKzt9Ci1yZXR1cm4gbnVtUHVzaGVkO30sY29udGFpbnMoZXZlbnQpe2lmKHRoaXMuZXZlbnRzXy5oYXMoZXZlbnQpKXJldHVybiBldmVudDtyZXR1cm4gdW5kZWZpbmVkO30sYWRkRXZlbnRTZXQoZXZlbnRTZXQpe2Zvcihjb25zdCBldmVudCBvZiBldmVudFNldCl7dGhpcy5wdXNoKGV2ZW50KTt9fSxpbnRlcnNlY3Rpb25Jc0VtcHR5KG90aGVyRXZlbnRTZXQpe3JldHVybiF0aGlzLnNvbWUoZXZlbnQ9Pm90aGVyRXZlbnRTZXQuY29udGFpbnMoZXZlbnQpKTt9LGVxdWFscyh0aGF0KXtpZih0aGlzLmxlbmd0aCE9PXRoYXQubGVuZ3RoKXJldHVybiBmYWxzZTtyZXR1cm4gdGhpcy5ldmVyeShldmVudD0+dGhhdC5jb250YWlucyhldmVudCkpO30sc29ydEV2ZW50cyhjb21wYXJlKXtjb25zdCBhcnk9dGhpcy50b0FycmF5KCk7YXJ5LnNvcnQoY29tcGFyZSk7dGhpcy5jbGVhcigpO2Zvcihjb25zdCBldmVudCBvZiBhcnkpe3RoaXMucHVzaChldmVudCk7fX0sZ2V0RXZlbnRzT3JnYW5pemVkQnlCYXNlVHlwZShvcHRfcHJ1bmVFbXB0eSl7Y29uc3QgYWxsVHlwZUluZm9zPUV2ZW50UmVnaXN0cnkuZ2V0QWxsUmVnaXN0ZXJlZFR5cGVJbmZvcygpO2NvbnN0IGV2ZW50cz10aGlzLmdldEV2ZW50c09yZ2FuaXplZEJ5Q2FsbGJhY2soZnVuY3Rpb24oZXZlbnQpe2xldCBtYXhFdmVudEluZGV4PS0xO2xldCBtYXhFdmVudFR5cGVJbmZvPXVuZGVmaW5lZDthbGxUeXBlSW5mb3MuZm9yRWFjaChmdW5jdGlvbihldmVudFR5cGVJbmZvLGV2ZW50SW5kZXgpe2lmKCEoZXZlbnQgaW5zdGFuY2VvZiBldmVudFR5cGVJbmZvLmNvbnN0cnVjdG9yKSlyZXR1cm47aWYoZXZlbnRJbmRleD5tYXhFdmVudEluZGV4KXttYXhFdmVudEluZGV4PWV2ZW50SW5kZXg7bWF4RXZlbnRUeXBlSW5mbz1ldmVudFR5cGVJbmZvO319KTtpZihtYXhFdmVudEluZGV4PT09LTEpe3Rocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGV2ZW50IHR5cGU6ICR7ZXZlbnQuY29uc3RydWN0b3IubmFtZX1gKTt9Ci1yZXR1cm4gbWF4RXZlbnRUeXBlSW5mby5tZXRhZGF0YS5uYW1lO30pO2lmKCFvcHRfcHJ1bmVFbXB0eSl7YWxsVHlwZUluZm9zLmZvckVhY2goZnVuY3Rpb24oZXZlbnRUeXBlSW5mbyl7aWYoZXZlbnRzW2V2ZW50VHlwZUluZm8ubWV0YWRhdGEubmFtZV09PT11bmRlZmluZWQpe2V2ZW50c1tldmVudFR5cGVJbmZvLm1ldGFkYXRhLm5hbWVdPW5ldyBFdmVudFNldCgpO319KTt9Ci1yZXR1cm4gZXZlbnRzO30sZ2V0RXZlbnRzT3JnYW5pemVkQnlUaXRsZSgpe3JldHVybiB0aGlzLmdldEV2ZW50c09yZ2FuaXplZEJ5Q2FsbGJhY2soZnVuY3Rpb24oZXZlbnQpe2lmKGV2ZW50LnRpdGxlPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0FuIGV2ZW50IGRpZG5cJ3QgaGF2ZSBhIHRpdGxlIScpO30KLXJldHVybiBldmVudC50aXRsZTt9KTt9LGdldEV2ZW50c09yZ2FuaXplZEJ5Q2FsbGJhY2soY2Isb3B0X3RoaXMpe2NvbnN0IGdyb3VwZWRFdmVudHM9dHIuYi5ncm91cEludG9NYXAodGhpcyxjYixvcHRfdGhpc3x8dGhpcyk7Y29uc3QgZ3JvdXBlZEV2ZW50c0RpY3Q9e307Zm9yKGNvbnN0W2ssZXZlbnRzXW9mIGdyb3VwZWRFdmVudHMpe2dyb3VwZWRFdmVudHNEaWN0W2tdPW5ldyBFdmVudFNldChldmVudHMpO30KLXJldHVybiBncm91cGVkRXZlbnRzRGljdDt9LGVudW1FdmVudHNPZlR5cGUodHlwZSxmdW5jKXtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcyl7aWYoZXZlbnQgaW5zdGFuY2VvZiB0eXBlKXtmdW5jKGV2ZW50KTt9fX0sZ2V0IHVzZXJGcmllbmRseU5hbWUoKXtpZih0aGlzLmxlbmd0aD09PTApe3Rocm93IG5ldyBFcnJvcignRW1wdHkgZXZlbnQgc2V0Jyk7fQotY29uc3QgZXZlbnRzQnlCYXNlVHlwZT10aGlzLmdldEV2ZW50c09yZ2FuaXplZEJ5QmFzZVR5cGUodHJ1ZSk7Y29uc3QgZXZlbnRUeXBlTmFtZT1PYmplY3Qua2V5cyhldmVudHNCeUJhc2VUeXBlKVswXTtpZih0aGlzLmxlbmd0aD09PTEpe2NvbnN0IHRtcD1FdmVudFJlZ2lzdHJ5LmdldFVzZXJGcmllbmRseVNpbmd1bGFyTmFtZShldmVudFR5cGVOYW1lKTtyZXR1cm4gdHIuYi5nZXRPbmx5RWxlbWVudCh0aGlzLmV2ZW50c18pLnVzZXJGcmllbmRseU5hbWU7fQotY29uc3QgbnVtRXZlbnRUeXBlcz1PYmplY3Qua2V5cyhldmVudHNCeUJhc2VUeXBlKS5sZW5ndGg7aWYobnVtRXZlbnRUeXBlcyE9PTEpe3JldHVybiB0aGlzLmxlbmd0aCsnIGV2ZW50cyBvZiB2YXJpb3VzIHR5cGVzJzt9Ci1jb25zdCB0bXA9RXZlbnRSZWdpc3RyeS5nZXRVc2VyRnJpZW5kbHlQbHVyYWxOYW1lKGV2ZW50VHlwZU5hbWUpO3JldHVybiB0aGlzLmxlbmd0aCsnICcrdG1wO30sZmlsdGVyKGZuLG9wdF90aGlzKXtjb25zdCByZXM9bmV3IEV2ZW50U2V0KCk7Zm9yKGNvbnN0IGV2ZW50IG9mIHRoaXMpe2lmKGZuLmNhbGwob3B0X3RoaXMsZXZlbnQpKXtyZXMucHVzaChldmVudCk7fX0KLXJldHVybiByZXM7fSx0b0FycmF5KCl7Y29uc3QgYXJ5PVtdO2Zvcihjb25zdCBldmVudCBvZiB0aGlzKXthcnkucHVzaChldmVudCk7fQotcmV0dXJuIGFyeTt9LGZvckVhY2goZm4sb3B0X3RoaXMpe2Zvcihjb25zdCBldmVudCBvZiB0aGlzKXtmbi5jYWxsKG9wdF90aGlzLGV2ZW50KTt9fSxtYXAoZm4sb3B0X3RoaXMpe2NvbnN0IHJlcz1bXTtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcyl7cmVzLnB1c2goZm4uY2FsbChvcHRfdGhpcyxldmVudCkpO30KLXJldHVybiByZXM7fSxldmVyeShmbixvcHRfdGhpcyl7Zm9yKGNvbnN0IGV2ZW50IG9mIHRoaXMpe2lmKCFmbi5jYWxsKG9wdF90aGlzLGV2ZW50KSl7cmV0dXJuIGZhbHNlO319Ci1yZXR1cm4gdHJ1ZTt9LHNvbWUoZm4sb3B0X3RoaXMpe2Zvcihjb25zdCBldmVudCBvZiB0aGlzKXtpZihmbi5jYWxsKG9wdF90aGlzLGV2ZW50KSl7cmV0dXJuIHRydWU7fX0KLXJldHVybiBmYWxzZTt9LGFzRGljdCgpe2NvbnN0IHN0YWJsZUlkcz1bXTtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcyl7c3RhYmxlSWRzLnB1c2goZXZlbnQuc3RhYmxlSWQpO30KLXJldHVybnsnZXZlbnRzJzpzdGFibGVJZHN9O30sYXNTZXQoKXtyZXR1cm4gdGhpcy5ldmVudHNfO319O0V2ZW50U2V0LklNTVVUQUJMRV9FTVBUWV9TRVQ9KGZ1bmN0aW9uKCl7Y29uc3Qgcz1uZXcgRXZlbnRTZXQoKTtzLnB1c2g9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwdXNoIHRvIGFuIGltbXV0YWJsZSBldmVudCBzZXQnKTt9O3MuYWRkRXZlbnRTZXQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhZGQgdG8gYW4gaW1tdXRhYmxlIGV2ZW50IHNldCcpO307T2JqZWN0LmZyZWV6ZShzKTtyZXR1cm4gczt9KSgpO3JldHVybntFdmVudFNldCxSZXF1ZXN0U2VsZWN0aW9uQ2hhbmdlRXZlbnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgU2VsZWN0aW9uU3RhdGU9e05PTkU6MCxTRUxFQ1RFRDpDb2xvclNjaGVtZS5wcm9wZXJ0aWVzLmJyaWdodGVuZWRPZmZzZXRzWzBdLEhJR0hMSUdIVEVEOkNvbG9yU2NoZW1lLnByb3BlcnRpZXMuYnJpZ2h0ZW5lZE9mZnNldHNbMV0sRElNTUVEOkNvbG9yU2NoZW1lLnByb3BlcnRpZXMuZGltbWVkT2Zmc2V0c1swXSxCUklHSFRFTkVEMDpDb2xvclNjaGVtZS5wcm9wZXJ0aWVzLmJyaWdodGVuZWRPZmZzZXRzWzBdLEJSSUdIVEVORUQxOkNvbG9yU2NoZW1lLnByb3BlcnRpZXMuYnJpZ2h0ZW5lZE9mZnNldHNbMV0sQlJJR0hURU5FRDI6Q29sb3JTY2hlbWUucHJvcGVydGllcy5icmlnaHRlbmVkT2Zmc2V0c1syXSxESU1NRUQwOkNvbG9yU2NoZW1lLnByb3BlcnRpZXMuZGltbWVkT2Zmc2V0c1swXSxESU1NRUQxOkNvbG9yU2NoZW1lLnByb3BlcnRpZXMuZGltbWVkT2Zmc2V0c1sxXSxESU1NRUQyOkNvbG9yU2NoZW1lLnByb3BlcnRpZXMuZGltbWVkT2Zmc2V0c1syXX07Y29uc3QgYnJpZ2h0ZW5pbmdMZXZlbHM9W1NlbGVjdGlvblN0YXRlLk5PTkUsU2VsZWN0aW9uU3RhdGUuQlJJR0hURU5FRDAsU2VsZWN0aW9uU3RhdGUuQlJJR0hURU5FRDEsU2VsZWN0aW9uU3RhdGUuQlJJR0hURU5FRDJdO1NlbGVjdGlvblN0YXRlLmdldEZyb21CcmlnaHRlbmluZ0xldmVsPWZ1bmN0aW9uKGxldmVsKXtyZXR1cm4gYnJpZ2h0ZW5pbmdMZXZlbHNbbGV2ZWxdO307Y29uc3QgZGltbWluZ0xldmVscz1bU2VsZWN0aW9uU3RhdGUuRElNTUVEMCxTZWxlY3Rpb25TdGF0ZS5ESU1NRUQxLFNlbGVjdGlvblN0YXRlLkRJTU1FRDJdO1NlbGVjdGlvblN0YXRlLmdldEZyb21EaW1taW5nTGV2ZWw9ZnVuY3Rpb24obGV2ZWwpe3JldHVybiBkaW1taW5nTGV2ZWxzW2xldmVsXTt9O3JldHVybntTZWxlY3Rpb25TdGF0ZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgU2VsZWN0aW9uU3RhdGU9dHIubW9kZWwuU2VsZWN0aW9uU3RhdGU7ZnVuY3Rpb24gU2VsZWN0YWJsZUl0ZW0obW9kZWxJdGVtKXt0aGlzLm1vZGVsSXRlbV89bW9kZWxJdGVtO30KLVNlbGVjdGFibGVJdGVtLnByb3RvdHlwZT17Z2V0IG1vZGVsSXRlbSgpe3JldHVybiB0aGlzLm1vZGVsSXRlbV87fSxnZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLlNFTEVDVEVEO30sYWRkVG9TZWxlY3Rpb24oc2VsZWN0aW9uKXtjb25zdCBtb2RlbEl0ZW09dGhpcy5tb2RlbEl0ZW1fO2lmKCFtb2RlbEl0ZW0pcmV0dXJuO3NlbGVjdGlvbi5wdXNoKG1vZGVsSXRlbSk7fSxhZGRUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCx0cmFjayl7Y29uc3QgbW9kZWxJdGVtPXRoaXMubW9kZWxJdGVtXztpZighbW9kZWxJdGVtKXJldHVybjtldmVudFRvVHJhY2tNYXAuYWRkRXZlbnQobW9kZWxJdGVtLHRyYWNrKTt9fTtyZXR1cm57U2VsZWN0YWJsZUl0ZW0sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IFNlbGVjdGFibGVJdGVtPXRyLm1vZGVsLlNlbGVjdGFibGVJdGVtO2NvbnN0IFNlbGVjdGlvblN0YXRlPXRyLm1vZGVsLlNlbGVjdGlvblN0YXRlO2NvbnN0IElNTVVUQUJMRV9FTVBUWV9TRVQ9dHIubW9kZWwuRXZlbnRTZXQuSU1NVVRBQkxFX0VNUFRZX1NFVDtmdW5jdGlvbiBFdmVudCgpe1NlbGVjdGFibGVJdGVtLmNhbGwodGhpcyx0aGlzKTt0aGlzLmd1aWRfPXRyLmIuR1VJRC5hbGxvY2F0ZVNpbXBsZSgpO3RoaXMuc2VsZWN0aW9uU3RhdGU9U2VsZWN0aW9uU3RhdGUuTk9ORTt0aGlzLmluZm89dW5kZWZpbmVkO30KLUV2ZW50LnByb3RvdHlwZT17X19wcm90b19fOlNlbGVjdGFibGVJdGVtLnByb3RvdHlwZSxnZXQgZ3VpZCgpe3JldHVybiB0aGlzLmd1aWRfO30sZ2V0IHN0YWJsZUlkKCl7cmV0dXJuIHVuZGVmaW5lZDt9LGdldCByYW5nZSgpe2NvbnN0IHJhbmdlPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTt0aGlzLmFkZEJvdW5kc1RvUmFuZ2UocmFuZ2UpO3JldHVybiByYW5nZTt9LGFzc29jaWF0ZWRBbGVydHM6SU1NVVRBQkxFX0VNUFRZX1NFVCxhZGRBc3NvY2lhdGVkQWxlcnQoYWxlcnQpe2lmKHRoaXMuYXNzb2NpYXRlZEFsZXJ0cz09PUlNTVVUQUJMRV9FTVBUWV9TRVQpe3RoaXMuYXNzb2NpYXRlZEFsZXJ0cz1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTt9Ci10aGlzLmFzc29jaWF0ZWRBbGVydHMucHVzaChhbGVydCk7fSxhZGRCb3VuZHNUb1JhbmdlKHJhbmdlKXt9fTtyZXR1cm57RXZlbnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFRpbWVkRXZlbnQoc3RhcnQpe3RyLm1vZGVsLkV2ZW50LmNhbGwodGhpcyk7dGhpcy5zdGFydD1zdGFydDt0aGlzLmR1cmF0aW9uPTA7dGhpcy5jcHVTdGFydD11bmRlZmluZWQ7dGhpcy5jcHVEdXJhdGlvbj11bmRlZmluZWQ7dGhpcy5jb250ZXh0cz1PYmplY3QuZnJlZXplKFtdKTt9Ci1UaW1lZEV2ZW50LnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLkV2ZW50LnByb3RvdHlwZSxnZXQgZW5kKCl7cmV0dXJuIHRoaXMuc3RhcnQrdGhpcy5kdXJhdGlvbjt9LGFkZEJvdW5kc1RvUmFuZ2UocmFuZ2Upe3JhbmdlLmFkZFZhbHVlKHRoaXMuc3RhcnQpO3JhbmdlLmFkZFZhbHVlKHRoaXMuZW5kKTt9LGJvdW5kcyh0aGF0LG9wdF9wcmVjaXNpb25Vbml0KXtpZihvcHRfcHJlY2lzaW9uVW5pdD09PXVuZGVmaW5lZCl7b3B0X3ByZWNpc2lvblVuaXQ9dHIuYi5UaW1lRGlzcGxheU1vZGVzLm1zO30KLWNvbnN0IHN0YXJ0c0JlZm9yZT1vcHRfcHJlY2lzaW9uVW5pdC5yb3VuZGVkTGVzcyh0aGF0LnN0YXJ0LHRoaXMuc3RhcnQpO2NvbnN0IGVuZHNBZnRlcj1vcHRfcHJlY2lzaW9uVW5pdC5yb3VuZGVkTGVzcyh0aGlzLmVuZCx0aGF0LmVuZCk7cmV0dXJuIXN0YXJ0c0JlZm9yZSYmIWVuZHNBZnRlcjt9fTtyZXR1cm57VGltZWRFdmVudCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQWxlcnQoaW5mbyxzdGFydCxvcHRfYXNzb2NpYXRlZEV2ZW50cyxvcHRfYXJncyl7dHIubW9kZWwuVGltZWRFdmVudC5jYWxsKHRoaXMsc3RhcnQpO3RoaXMuaW5mbz1pbmZvO3RoaXMuYXJncz1vcHRfYXJnc3x8e307dGhpcy5hc3NvY2lhdGVkRXZlbnRzPW5ldyB0ci5tb2RlbC5FdmVudFNldChvcHRfYXNzb2NpYXRlZEV2ZW50cyk7dGhpcy5hc3NvY2lhdGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2V2ZW50LmFkZEFzc29jaWF0ZWRBbGVydCh0aGlzKTt9LHRoaXMpO30KLUFsZXJ0LnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLlRpbWVkRXZlbnQucHJvdG90eXBlLGdldCB0aXRsZSgpe3JldHVybiB0aGlzLmluZm8udGl0bGU7fSxnZXQgY29sb3JJZCgpe3JldHVybiB0aGlzLmluZm8uY29sb3JJZDt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ0FsZXJ0ICcrdGhpcy50aXRsZSsnIGF0ICcrCi10ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMuZm9ybWF0KHRoaXMuc3RhcnQpO319O3RyLm1vZGVsLkV2ZW50UmVnaXN0cnkucmVnaXN0ZXIoQWxlcnQse25hbWU6J2FsZXJ0JyxwbHVyYWxOYW1lOidhbGVydHMnfSk7cmV0dXJue0FsZXJ0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFN0YXRpc3RpY3M9dHIuYi5tYXRoLlN0YXRpc3RpY3M7Y29uc3QgRlJBTUVfUEVSRl9DTEFTUz17R09PRDonZ29vZCcsQkFEOidiYWQnLFRFUlJJQkxFOid0ZXJyaWJsZScsTkVVVFJBTDonZ2VuZXJpY193b3JrJ307ZnVuY3Rpb24gRnJhbWUoYXNzb2NpYXRlZEV2ZW50cyx0aHJlYWRUaW1lUmFuZ2VzLG9wdF9hcmdzKXt0ci5tb2RlbC5FdmVudC5jYWxsKHRoaXMpO3RoaXMudGhyZWFkVGltZVJhbmdlcz10aHJlYWRUaW1lUmFuZ2VzO3RoaXMuYXNzb2NpYXRlZEV2ZW50cz1uZXcgdHIubW9kZWwuRXZlbnRTZXQoYXNzb2NpYXRlZEV2ZW50cyk7dGhpcy5hcmdzPW9wdF9hcmdzfHx7fTt0aGlzLnRpdGxlPSdGcmFtZSc7dGhpcy5zdGFydD1TdGF0aXN0aWNzLm1pbih0aHJlYWRUaW1lUmFuZ2VzLGZ1bmN0aW9uKHgpe3JldHVybiB4LnN0YXJ0O30pO3RoaXMuZW5kPVN0YXRpc3RpY3MubWF4KHRocmVhZFRpbWVSYW5nZXMsZnVuY3Rpb24oeCl7cmV0dXJuIHguZW5kO30pO3RoaXMudG90YWxEdXJhdGlvbj1TdGF0aXN0aWNzLnN1bSh0aHJlYWRUaW1lUmFuZ2VzLGZ1bmN0aW9uKHgpe3JldHVybiB4LmVuZC14LnN0YXJ0O30pO3RoaXMucGVyZkNsYXNzPUZSQU1FX1BFUkZfQ0xBU1MuTkVVVFJBTDt9Ci1GcmFtZS5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5FdmVudC5wcm90b3R5cGUsc2V0IHBlcmZDbGFzcyhwZXJmQ2xhc3Mpe3RoaXMuY29sb3JJZD1Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lKHBlcmZDbGFzcyk7dGhpcy5wZXJmQ2xhc3NfPXBlcmZDbGFzczt9LGdldCBwZXJmQ2xhc3MoKXtyZXR1cm4gdGhpcy5wZXJmQ2xhc3NfO30sc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpe3RoaXMuc3RhcnQrPWFtb3VudDt0aGlzLmVuZCs9YW1vdW50O2ZvcihsZXQgaT0wO2k8dGhpcy50aHJlYWRUaW1lUmFuZ2VzLmxlbmd0aDtpKyspe3RoaXMudGhyZWFkVGltZVJhbmdlc1tpXS5zdGFydCs9YW1vdW50O3RoaXMudGhyZWFkVGltZVJhbmdlc1tpXS5lbmQrPWFtb3VudDt9fSxhZGRCb3VuZHNUb1JhbmdlKHJhbmdlKXtyYW5nZS5hZGRWYWx1ZSh0aGlzLnN0YXJ0KTtyYW5nZS5hZGRWYWx1ZSh0aGlzLmVuZCk7fX07dHIubW9kZWwuRXZlbnRSZWdpc3RyeS5yZWdpc3RlcihGcmFtZSx7bmFtZTonZnJhbWUnLHBsdXJhbE5hbWU6J2ZyYW1lcyd9KTtyZXR1cm57RnJhbWUsRlJBTUVfUEVSRl9DTEFTUyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwuaGVscGVycycsZnVuY3Rpb24oKXtjb25zdCBGcmFtZT10ci5tb2RlbC5GcmFtZTtjb25zdCBTdGF0aXN0aWNzPXRyLmIubWF0aC5TdGF0aXN0aWNzO2NvbnN0IFVJX0RSQVdfVFlQRT17Tk9ORTonbm9uZScsTEVHQUNZOidsZWdhY3knLE1BUlNITUFMTE9XOidtYXJzaG1hbGxvdyd9O2NvbnN0IFVJX1RIUkVBRF9EUkFXX05BTUVTPXsncGVyZm9ybVRyYXZlcnNhbHMnOlVJX0RSQVdfVFlQRS5MRUdBQ1ksJ0Nob3Jlb2dyYXBoZXIjZG9GcmFtZSc6VUlfRFJBV19UWVBFLk1BUlNITUFMTE9XfTtjb25zdCBSRU5ERVJfVEhSRUFEX0RSQVdfTkFNRT0nRHJhd0ZyYW1lJztjb25zdCBSRU5ERVJfVEhSRUFEX0lOREVQX0RSQVdfTkFNRT0nZG9GcmFtZSc7Y29uc3QgUkVOREVSX1RIUkVBRF9RVUVVRV9OQU1FPSdxdWV1ZUJ1ZmZlcic7Y29uc3QgUkVOREVSX1RIUkVBRF9TV0FQX05BTUU9J2VnbFN3YXBCdWZmZXJzJztjb25zdCBUSFJFQURfU1lOQ19OQU1FPSdzeW5jRnJhbWVTdGF0ZSc7ZnVuY3Rpb24gZ2V0U2xpY2VzRm9yVGhyZWFkVGltZVJhbmdlcyh0aHJlYWRUaW1lUmFuZ2VzKXtjb25zdCByZXQ9W107dGhyZWFkVGltZVJhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uKHRocmVhZFRpbWVSYW5nZSl7Y29uc3Qgc2xpY2VzPVtdO3RocmVhZFRpbWVSYW5nZS50aHJlYWQuc2xpY2VHcm91cC5pdGVyU2xpY2VzSW5UaW1lUmFuZ2UoZnVuY3Rpb24oc2xpY2Upe3NsaWNlcy5wdXNoKHNsaWNlKTt9LHRocmVhZFRpbWVSYW5nZS5zdGFydCx0aHJlYWRUaW1lUmFuZ2UuZW5kKTtyZXQucHVzaC5hcHBseShyZXQsc2xpY2VzKTt9KTtyZXR1cm4gcmV0O30KLWZ1bmN0aW9uIG1ha2VGcmFtZSh0aHJlYWRUaW1lUmFuZ2VzLHN1cmZhY2VGbGluZ2VyKXtjb25zdCBhcmdzPXt9O2lmKHN1cmZhY2VGbGluZ2VyJiZzdXJmYWNlRmxpbmdlci5oYXNWc3luY3Mpe2NvbnN0IHN0YXJ0PVN0YXRpc3RpY3MubWluKHRocmVhZFRpbWVSYW5nZXMsZnVuY3Rpb24odGhyZWFkVGltZVJhbmdlcyl7cmV0dXJuIHRocmVhZFRpbWVSYW5nZXMuc3RhcnQ7fSk7YXJncy5kZWFkbGluZT1zdXJmYWNlRmxpbmdlci5nZXRGcmFtZURlYWRsaW5lKHN0YXJ0KTthcmdzLmZyYW1lS2lja29mZj1zdXJmYWNlRmxpbmdlci5nZXRGcmFtZUtpY2tvZmYoc3RhcnQpO30KLWNvbnN0IGV2ZW50cz1nZXRTbGljZXNGb3JUaHJlYWRUaW1lUmFuZ2VzKHRocmVhZFRpbWVSYW5nZXMpO3JldHVybiBuZXcgRnJhbWUoZXZlbnRzLHRocmVhZFRpbWVSYW5nZXMsYXJncyk7fQotZnVuY3Rpb24gZmluZE92ZXJsYXBwaW5nRHJhd0ZyYW1lKHJlbmRlclRocmVhZCx1aURyYXdTbGljZSl7aWYoIXJlbmRlclRocmVhZClyZXR1cm4gdW5kZWZpbmVkO2xldCBvdmVybGFwcGluZ0RyYXdGcmFtZTtjb25zdCBzbGljZXM9dHIuYi5pdGVyYXRlT3ZlckludGVyc2VjdGluZ0ludGVydmFscyhyZW5kZXJUaHJlYWQuc2xpY2VHcm91cC5zbGljZXMsZnVuY3Rpb24ocmFuZ2Upe3JldHVybiByYW5nZS5zdGFydDt9LGZ1bmN0aW9uKHJhbmdlKXtyZXR1cm4gcmFuZ2UuZW5kO30sdWlEcmF3U2xpY2Uuc3RhcnQsdWlEcmF3U2xpY2UuZW5kLGZ1bmN0aW9uKHJ0RHJhd1NsaWNlKXtpZihydERyYXdTbGljZS50aXRsZT09PVJFTkRFUl9USFJFQURfRFJBV19OQU1FKXtjb25zdCBydFN5bmNTbGljZT1ydERyYXdTbGljZS5maW5kRGVzY2VuZGVudFNsaWNlKFRIUkVBRF9TWU5DX05BTUUpO2lmKHJ0U3luY1NsaWNlJiZydFN5bmNTbGljZS5zdGFydD49dWlEcmF3U2xpY2Uuc3RhcnQmJnJ0U3luY1NsaWNlLmVuZDw9dWlEcmF3U2xpY2UuZW5kKXtvdmVybGFwcGluZ0RyYXdGcmFtZT1ydERyYXdTbGljZTt9fX0pO3JldHVybiBvdmVybGFwcGluZ0RyYXdGcmFtZTt9Ci1mdW5jdGlvbiBnZXRQcmVUcmF2ZXJzYWxXb3JrUmFuZ2VzKHVpVGhyZWFkKXtpZighdWlUaHJlYWQpcmV0dXJuW107Y29uc3QgcHJlRnJhbWVFdmVudHM9W107dWlUaHJlYWQuc2xpY2VHcm91cC5zbGljZXMuZm9yRWFjaChmdW5jdGlvbihzbGljZSl7aWYoc2xpY2UudGl0bGU9PT0nb2J0YWluVmlldyd8fHNsaWNlLnRpdGxlPT09J3NldHVwTGlzdEl0ZW0nfHxzbGljZS50aXRsZT09PSdkZWxpdmVySW5wdXRFdmVudCd8fHNsaWNlLnRpdGxlPT09J1JWIFNjcm9sbCcpe3ByZUZyYW1lRXZlbnRzLnB1c2goc2xpY2UpO319KTt1aVRocmVhZC5hc3luY1NsaWNlR3JvdXAuc2xpY2VzLmZvckVhY2goZnVuY3Rpb24oc2xpY2Upe2lmKHNsaWNlLnRpdGxlPT09J2RlbGl2ZXJJbnB1dEV2ZW50Jyl7cHJlRnJhbWVFdmVudHMucHVzaChzbGljZSk7fX0pO3JldHVybiB0ci5iLm1hdGgubWVyZ2VSYW5nZXModHIuYi5tYXRoLmNvbnZlcnRFdmVudHNUb1JhbmdlcyhwcmVGcmFtZUV2ZW50cyksMyxmdW5jdGlvbihldmVudHMpe3JldHVybntzdGFydDpldmVudHNbMF0ubWluLGVuZDpldmVudHNbZXZlbnRzLmxlbmd0aC0xXS5tYXh9O30pO30KLWZ1bmN0aW9uIGdldEZyYW1lU3RhcnRUaW1lKHRyYXZlcnNhbFN0YXJ0LHByZVRyYXZlcnNhbFdvcmtSYW5nZXMpe2NvbnN0IHByZVRyYXZlcnNhbFdvcmtSYW5nZT10ci5iLmZpbmRDbG9zZXN0SW50ZXJ2YWxJblNvcnRlZEludGVydmFscyhwcmVUcmF2ZXJzYWxXb3JrUmFuZ2VzLGZ1bmN0aW9uKHJhbmdlKXtyZXR1cm4gcmFuZ2Uuc3RhcnQ7fSxmdW5jdGlvbihyYW5nZSl7cmV0dXJuIHJhbmdlLmVuZDt9LHRyYXZlcnNhbFN0YXJ0LDMpO2lmKHByZVRyYXZlcnNhbFdvcmtSYW5nZSl7cmV0dXJuIHByZVRyYXZlcnNhbFdvcmtSYW5nZS5zdGFydDt9Ci1yZXR1cm4gdHJhdmVyc2FsU3RhcnQ7fQotZnVuY3Rpb24gZ2V0UnRGcmFtZUVuZFRpbWUocnREcmF3U2xpY2Upe2NvbnN0IHJ0UXVldWVTbGljZT1ydERyYXdTbGljZS5maW5kRGVzY2VuZGVudFNsaWNlKFJFTkRFUl9USFJFQURfUVVFVUVfTkFNRSk7aWYocnRRdWV1ZVNsaWNlKXtyZXR1cm4gcnRRdWV1ZVNsaWNlLmVuZDt9Ci1jb25zdCBydFN3YXBTbGljZT1ydERyYXdTbGljZS5maW5kRGVzY2VuZGVudFNsaWNlKFJFTkRFUl9USFJFQURfU1dBUF9OQU1FKTtpZihydFN3YXBTbGljZSl7cmV0dXJuIHJ0U3dhcFNsaWNlLmVuZDt9Ci1yZXR1cm4gcnREcmF3U2xpY2UuZW5kO30KLWZ1bmN0aW9uIGdldFVpVGhyZWFkRHJpdmVuRnJhbWVzKGFwcCl7aWYoIWFwcC51aVRocmVhZClyZXR1cm5bXTtsZXQgcHJlVHJhdmVyc2FsV29ya1Jhbmdlcz1bXTtpZihhcHAudWlEcmF3VHlwZT09PVVJX0RSQVdfVFlQRS5MRUdBQ1kpe3ByZVRyYXZlcnNhbFdvcmtSYW5nZXM9Z2V0UHJlVHJhdmVyc2FsV29ya1JhbmdlcyhhcHAudWlUaHJlYWQpO30KLWNvbnN0IGZyYW1lcz1bXTthcHAudWlUaHJlYWQuc2xpY2VHcm91cC5zbGljZXMuZm9yRWFjaChmdW5jdGlvbihzbGljZSl7aWYoIShzbGljZS50aXRsZSBpbiBVSV9USFJFQURfRFJBV19OQU1FUykpe3JldHVybjt9Ci1jb25zdCB0aHJlYWRUaW1lUmFuZ2VzPVtdO2NvbnN0IHVpVGhyZWFkVGltZVJhbmdlPXt0aHJlYWQ6YXBwLnVpVGhyZWFkLHN0YXJ0OmdldEZyYW1lU3RhcnRUaW1lKHNsaWNlLnN0YXJ0LHByZVRyYXZlcnNhbFdvcmtSYW5nZXMpLGVuZDpzbGljZS5lbmR9O3RocmVhZFRpbWVSYW5nZXMucHVzaCh1aVRocmVhZFRpbWVSYW5nZSk7Y29uc3QgcnREcmF3U2xpY2U9ZmluZE92ZXJsYXBwaW5nRHJhd0ZyYW1lKGFwcC5yZW5kZXJUaHJlYWQsc2xpY2UpO2lmKHJ0RHJhd1NsaWNlKXtjb25zdCBydFN5bmNTbGljZT1ydERyYXdTbGljZS5maW5kRGVzY2VuZGVudFNsaWNlKFRIUkVBRF9TWU5DX05BTUUpO2lmKHJ0U3luY1NsaWNlKXt1aVRocmVhZFRpbWVSYW5nZS5lbmQ9TWF0aC5taW4odWlUaHJlYWRUaW1lUmFuZ2UuZW5kLHJ0U3luY1NsaWNlLnN0YXJ0KTt9Ci10aHJlYWRUaW1lUmFuZ2VzLnB1c2goe3RocmVhZDphcHAucmVuZGVyVGhyZWFkLHN0YXJ0OnJ0RHJhd1NsaWNlLnN0YXJ0LGVuZDpnZXRSdEZyYW1lRW5kVGltZShydERyYXdTbGljZSl9KTt9Ci1mcmFtZXMucHVzaChtYWtlRnJhbWUodGhyZWFkVGltZVJhbmdlcyxhcHAuc3VyZmFjZUZsaW5nZXIpKTt9KTtyZXR1cm4gZnJhbWVzO30KLWZ1bmN0aW9uIGdldFJlbmRlclRocmVhZERyaXZlbkZyYW1lcyhhcHApe2lmKCFhcHAucmVuZGVyVGhyZWFkKXJldHVybltdO2NvbnN0IGZyYW1lcz1bXTthcHAucmVuZGVyVGhyZWFkLnNsaWNlR3JvdXAuZ2V0U2xpY2VzT2ZOYW1lKFJFTkRFUl9USFJFQURfSU5ERVBfRFJBV19OQU1FKS5mb3JFYWNoKGZ1bmN0aW9uKHNsaWNlKXtjb25zdCB0aHJlYWRUaW1lUmFuZ2VzPVt7dGhyZWFkOmFwcC5yZW5kZXJUaHJlYWQsc3RhcnQ6c2xpY2Uuc3RhcnQsZW5kOnNsaWNlLmVuZH1dO2ZyYW1lcy5wdXNoKG1ha2VGcmFtZSh0aHJlYWRUaW1lUmFuZ2VzLGFwcC5zdXJmYWNlRmxpbmdlcikpO30pO3JldHVybiBmcmFtZXM7fQotZnVuY3Rpb24gZ2V0VWlEcmF3VHlwZSh1aVRocmVhZCl7aWYoIXVpVGhyZWFkKXtyZXR1cm4gVUlfRFJBV19UWVBFLk5PTkU7fQotY29uc3Qgc2xpY2VzPXVpVGhyZWFkLnNsaWNlR3JvdXAuc2xpY2VzO2ZvcihsZXQgaT0wO2k8c2xpY2VzLmxlbmd0aDtpKyspe2lmKHNsaWNlc1tpXS50aXRsZSBpbiBVSV9USFJFQURfRFJBV19OQU1FUyl7cmV0dXJuIFVJX1RIUkVBRF9EUkFXX05BTUVTW3NsaWNlc1tpXS50aXRsZV07fX0KLXJldHVybiBVSV9EUkFXX1RZUEUuTk9ORTt9Ci1mdW5jdGlvbiBnZXRJbnB1dFNhbXBsZXMocHJvY2Vzcyl7bGV0IHNhbXBsZXM9dW5kZWZpbmVkO2Zvcihjb25zdCBjb3VudGVyTmFtZSBpbiBwcm9jZXNzLmNvdW50ZXJzKXtpZigvXmFuZHJvaWRcLmFxXDpwZW5kaW5nLy50ZXN0KGNvdW50ZXJOYW1lKSYmcHJvY2Vzcy5jb3VudGVyc1tjb3VudGVyTmFtZV0ubnVtU2VyaWVzPT09MSl7c2FtcGxlcz1wcm9jZXNzLmNvdW50ZXJzW2NvdW50ZXJOYW1lXS5zZXJpZXNbMF0uc2FtcGxlczticmVhazt9fQotaWYoIXNhbXBsZXMpcmV0dXJuW107Y29uc3QgaW5wdXRTYW1wbGVzPVtdO2xldCBsYXN0VmFsdWU9MDtzYW1wbGVzLmZvckVhY2goZnVuY3Rpb24oc2FtcGxlKXtpZihzYW1wbGUudmFsdWU+bGFzdFZhbHVlKXtpbnB1dFNhbXBsZXMucHVzaChzYW1wbGUpO30KLWxhc3RWYWx1ZT1zYW1wbGUudmFsdWU7fSk7cmV0dXJuIGlucHV0U2FtcGxlczt9Ci1mdW5jdGlvbiBnZXRBbmltYXRpb25Bc3luY1NsaWNlcyh1aVRocmVhZCl7aWYoIXVpVGhyZWFkKXJldHVybltdO2NvbnN0IHNsaWNlcz1bXTtmb3IoY29uc3Qgc2xpY2Ugb2YgdWlUaHJlYWQuYXN5bmNTbGljZUdyb3VwLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoL15hbmltYXRvclw6Ly50ZXN0KHNsaWNlLnRpdGxlKSl7c2xpY2VzLnB1c2goc2xpY2UpO319Ci1yZXR1cm4gc2xpY2VzO30KLWZ1bmN0aW9uIEFuZHJvaWRBcHAocHJvY2Vzcyx1aVRocmVhZCxyZW5kZXJUaHJlYWQsc3VyZmFjZUZsaW5nZXIsdWlEcmF3VHlwZSl7dGhpcy5wcm9jZXNzPXByb2Nlc3M7dGhpcy51aVRocmVhZD11aVRocmVhZDt0aGlzLnJlbmRlclRocmVhZD1yZW5kZXJUaHJlYWQ7dGhpcy5zdXJmYWNlRmxpbmdlcj1zdXJmYWNlRmxpbmdlcjt0aGlzLnVpRHJhd1R5cGU9dWlEcmF3VHlwZTt0aGlzLmZyYW1lc189dW5kZWZpbmVkO3RoaXMuaW5wdXRzXz11bmRlZmluZWQ7fQotQW5kcm9pZEFwcC5jcmVhdGVGb3JQcm9jZXNzSWZQb3NzaWJsZT1mdW5jdGlvbihwcm9jZXNzLHN1cmZhY2VGbGluZ2VyKXtsZXQgdWlUaHJlYWQ9cHJvY2Vzcy5nZXRUaHJlYWQocHJvY2Vzcy5waWQpO2NvbnN0IHVpRHJhd1R5cGU9Z2V0VWlEcmF3VHlwZSh1aVRocmVhZCk7aWYodWlEcmF3VHlwZT09PVVJX0RSQVdfVFlQRS5OT05FKXt1aVRocmVhZD11bmRlZmluZWQ7fQotY29uc3QgcmVuZGVyVGhyZWFkcz1wcm9jZXNzLmZpbmRBbGxUaHJlYWRzTmFtZWQoJ1JlbmRlclRocmVhZCcpO2NvbnN0IHJlbmRlclRocmVhZD0ocmVuZGVyVGhyZWFkcy5sZW5ndGg9PT0xP3JlbmRlclRocmVhZHNbMF06dW5kZWZpbmVkKTtpZih1aVRocmVhZHx8cmVuZGVyVGhyZWFkKXtyZXR1cm4gbmV3IEFuZHJvaWRBcHAocHJvY2Vzcyx1aVRocmVhZCxyZW5kZXJUaHJlYWQsc3VyZmFjZUZsaW5nZXIsdWlEcmF3VHlwZSk7fX07QW5kcm9pZEFwcC5wcm90b3R5cGU9e2dldEZyYW1lcygpe2lmKCF0aGlzLmZyYW1lc18pe2NvbnN0IHVpRnJhbWVzPWdldFVpVGhyZWFkRHJpdmVuRnJhbWVzKHRoaXMpO2NvbnN0IHJ0RnJhbWVzPWdldFJlbmRlclRocmVhZERyaXZlbkZyYW1lcyh0aGlzKTt0aGlzLmZyYW1lc189dWlGcmFtZXMuY29uY2F0KHJ0RnJhbWVzKTt0aGlzLmZyYW1lc18uc29ydChmdW5jdGlvbihhLGIpe2EuZW5kLWIuZW5kO30pO30KLXJldHVybiB0aGlzLmZyYW1lc187fSxnZXRJbnB1dFNhbXBsZXMoKXtpZighdGhpcy5pbnB1dHNfKXt0aGlzLmlucHV0c189Z2V0SW5wdXRTYW1wbGVzKHRoaXMucHJvY2Vzcyk7fQotcmV0dXJuIHRoaXMuaW5wdXRzXzt9LGdldEFuaW1hdGlvbkFzeW5jU2xpY2VzKCl7aWYoIXRoaXMuYW5pbWF0aW9uc18pe3RoaXMuYW5pbWF0aW9uc189Z2V0QW5pbWF0aW9uQXN5bmNTbGljZXModGhpcy51aVRocmVhZCk7fQotcmV0dXJuIHRoaXMuYW5pbWF0aW9uc187fX07cmV0dXJue0FuZHJvaWRBcHAsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLmhlbHBlcnMnLGZ1bmN0aW9uKCl7Y29uc3QgZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheT10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXk7Y29uc3QgVlNZTkNfU0ZfTkFNRT0nYW5kcm9pZC5WU1lOQy1zZic7Y29uc3QgVlNZTkNfQVBQX05BTUU9J2FuZHJvaWQuVlNZTkMtYXBwJztjb25zdCBWU1lOQ19GQUxMQkFDS19OQU1FPSdhbmRyb2lkLlZTWU5DJztjb25zdCBUSU1FU1RBTVBfRlVER0VfTVM9MC4wMTtmdW5jdGlvbiBnZXRWc3luY1RpbWVzdGFtcHMocHJvY2Vzcyxjb3VudGVyTmFtZSl7bGV0IHZzeW5jPXByb2Nlc3MuY291bnRlcnNbY291bnRlck5hbWVdO2lmKCF2c3luYyl7dnN5bmM9cHJvY2Vzcy5jb3VudGVyc1tWU1lOQ19GQUxMQkFDS19OQU1FXTt9Ci1pZih2c3luYyYmdnN5bmMubnVtU2VyaWVzPT09MSYmdnN5bmMubnVtU2FtcGxlcz4xKXtyZXR1cm4gdnN5bmMuc2VyaWVzWzBdLnRpbWVzdGFtcHM7fQotcmV0dXJuIHVuZGVmaW5lZDt9Ci1mdW5jdGlvbiBBbmRyb2lkU3VyZmFjZUZsaW5nZXIocHJvY2Vzcyx0aHJlYWQpe3RoaXMucHJvY2Vzcz1wcm9jZXNzO3RoaXMudGhyZWFkPXRocmVhZDt0aGlzLmFwcFZzeW5jXz11bmRlZmluZWQ7dGhpcy5zZlZzeW5jXz11bmRlZmluZWQ7dGhpcy5hcHBWc3luY1RpbWVzdGFtcHNfPWdldFZzeW5jVGltZXN0YW1wcyhwcm9jZXNzLFZTWU5DX0FQUF9OQU1FKTt0aGlzLnNmVnN5bmNUaW1lc3RhbXBzXz1nZXRWc3luY1RpbWVzdGFtcHMocHJvY2VzcyxWU1lOQ19TRl9OQU1FKTt0aGlzLmRlYWRsaW5lRGVsYXlNc189dGhpcy5hcHBWc3luY1RpbWVzdGFtcHNfIT09dGhpcy5zZlZzeW5jVGltZXN0YW1wc18/NTpUSU1FU1RBTVBfRlVER0VfTVM7fQotQW5kcm9pZFN1cmZhY2VGbGluZ2VyLmNyZWF0ZUZvclByb2Nlc3NJZlBvc3NpYmxlPWZ1bmN0aW9uKHByb2Nlc3Mpe2NvbnN0IG1haW5UaHJlYWQ9cHJvY2Vzcy5nZXRUaHJlYWQocHJvY2Vzcy5waWQpO2lmKG1haW5UaHJlYWQmJm1haW5UaHJlYWQubmFtZSYmL3N1cmZhY2VmbGluZ2VyLy50ZXN0KG1haW5UaHJlYWQubmFtZSkpe3JldHVybiBuZXcgQW5kcm9pZFN1cmZhY2VGbGluZ2VyKHByb2Nlc3MsbWFpblRocmVhZCk7fQotY29uc3QgcHJpbWFyeVRocmVhZHM9cHJvY2Vzcy5maW5kQWxsVGhyZWFkc05hbWVkKCdTdXJmYWNlRmxpbmdlcicpO2lmKHByaW1hcnlUaHJlYWRzLmxlbmd0aD09PTEpe3JldHVybiBuZXcgQW5kcm9pZFN1cmZhY2VGbGluZ2VyKHByb2Nlc3MscHJpbWFyeVRocmVhZHNbMF0pO30KLXJldHVybiB1bmRlZmluZWQ7fTtBbmRyb2lkU3VyZmFjZUZsaW5nZXIucHJvdG90eXBlPXtnZXQgaGFzVnN5bmNzKCl7cmV0dXJuISF0aGlzLmFwcFZzeW5jVGltZXN0YW1wc18mJiEhdGhpcy5zZlZzeW5jVGltZXN0YW1wc187fSxnZXRGcmFtZUtpY2tvZmYodGltZXN0YW1wKXtpZighdGhpcy5oYXNWc3luY3Mpe3Rocm93IG5ldyBFcnJvcignY2Fubm90IHF1ZXJ5IHZzeW5jIGluZm8gd2l0aG91dCB2c3luY3MnKTt9Ci1jb25zdCBmaXJzdEdyZWF0ZXJJbmRleD1maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMuYXBwVnN5bmNUaW1lc3RhbXBzXyxmdW5jdGlvbih4KXtyZXR1cm4geDt9LHRpbWVzdGFtcCtUSU1FU1RBTVBfRlVER0VfTVMpO2lmKGZpcnN0R3JlYXRlckluZGV4PDEpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdGhpcy5hcHBWc3luY1RpbWVzdGFtcHNfW2ZpcnN0R3JlYXRlckluZGV4LTFdO30sZ2V0RnJhbWVEZWFkbGluZSh0aW1lc3RhbXApe2lmKCF0aGlzLmhhc1ZzeW5jcyl7dGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgcXVlcnkgdnN5bmMgaW5mbyB3aXRob3V0IHZzeW5jcycpO30KLWNvbnN0IGZpcnN0R3JlYXRlckluZGV4PWZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkodGhpcy5zZlZzeW5jVGltZXN0YW1wc18sZnVuY3Rpb24oeCl7cmV0dXJuIHg7fSx0aW1lc3RhbXArdGhpcy5kZWFkbGluZURlbGF5TXNfKTtpZihmaXJzdEdyZWF0ZXJJbmRleD49dGhpcy5zZlZzeW5jVGltZXN0YW1wc18ubGVuZ3RoKXtyZXR1cm4gdW5kZWZpbmVkO30KLXJldHVybiB0aGlzLnNmVnN5bmNUaW1lc3RhbXBzX1tmaXJzdEdyZWF0ZXJJbmRleF07fX07cmV0dXJue0FuZHJvaWRTdXJmYWNlRmxpbmdlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwuaGVscGVycycsZnVuY3Rpb24oKXtjb25zdCBBbmRyb2lkQXBwPXRyLm1vZGVsLmhlbHBlcnMuQW5kcm9pZEFwcDtjb25zdCBBbmRyb2lkU3VyZmFjZUZsaW5nZXI9dHIubW9kZWwuaGVscGVycy5BbmRyb2lkU3VyZmFjZUZsaW5nZXI7Y29uc3QgSU1QT1JUQU5UX1NVUkZBQ0VfRkxJTkdFUl9TTElDRVM9eydkb0NvbXBvc2l0aW9uJzp0cnVlLCd1cGRhdGVUZXhJbWFnZSc6dHJ1ZSwncG9zdEZyYW1lYnVmZmVyJzp0cnVlfTtjb25zdCBJTVBPUlRBTlRfVUlfVEhSRUFEX1NMSUNFUz17J0Nob3Jlb2dyYXBoZXIjZG9GcmFtZSc6dHJ1ZSwncGVyZm9ybVRyYXZlcnNhbHMnOnRydWUsJ2RlbGl2ZXJJbnB1dEV2ZW50Jzp0cnVlfTtjb25zdCBJTVBPUlRBTlRfUkVOREVSX1RIUkVBRF9TTElDRVM9eydkb0ZyYW1lJzp0cnVlfTtmdW5jdGlvbiBpdGVyYXRlSW1wb3J0YW50VGhyZWFkU2xpY2VzKHRocmVhZCxpbXBvcnRhbnQsY2FsbGJhY2spe2lmKCF0aHJlYWQpcmV0dXJuO3RocmVhZC5zbGljZUdyb3VwLnNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHNsaWNlKXtpZihzbGljZS50aXRsZSBpbiBpbXBvcnRhbnQpe2NhbGxiYWNrKHNsaWNlKTt9fSk7fQotZnVuY3Rpb24gQW5kcm9pZE1vZGVsSGVscGVyKG1vZGVsKXt0aGlzLm1vZGVsPW1vZGVsO3RoaXMuYXBwcz1bXTt0aGlzLnN1cmZhY2VGbGluZ2VyPXVuZGVmaW5lZDtjb25zdCBwcm9jZXNzZXM9bW9kZWwuZ2V0QWxsUHJvY2Vzc2VzKCk7Zm9yKGxldCBpPTA7aTxwcm9jZXNzZXMubGVuZ3RoJiYhdGhpcy5zdXJmYWNlRmxpbmdlcjtpKyspe3RoaXMuc3VyZmFjZUZsaW5nZXI9QW5kcm9pZFN1cmZhY2VGbGluZ2VyLmNyZWF0ZUZvclByb2Nlc3NJZlBvc3NpYmxlKHByb2Nlc3Nlc1tpXSk7fQotbW9kZWwuZ2V0QWxsUHJvY2Vzc2VzKCkuZm9yRWFjaChmdW5jdGlvbihwcm9jZXNzKXtjb25zdCBhcHA9QW5kcm9pZEFwcC5jcmVhdGVGb3JQcm9jZXNzSWZQb3NzaWJsZShwcm9jZXNzLHRoaXMuc3VyZmFjZUZsaW5nZXIpO2lmKGFwcCl7dGhpcy5hcHBzLnB1c2goYXBwKTt9fSx0aGlzKTt9Ci1BbmRyb2lkTW9kZWxIZWxwZXIuZ3VpZD10ci5iLkdVSUQuYWxsb2NhdGVTaW1wbGUoKTtBbmRyb2lkTW9kZWxIZWxwZXIuc3VwcG9ydHNNb2RlbD1mdW5jdGlvbihtb2RlbCl7cmV0dXJuIHRydWU7fTtBbmRyb2lkTW9kZWxIZWxwZXIucHJvdG90eXBlPXtpdGVyYXRlSW1wb3J0YW50U2xpY2VzKGNhbGxiYWNrKXtpZih0aGlzLnN1cmZhY2VGbGluZ2VyKXtpdGVyYXRlSW1wb3J0YW50VGhyZWFkU2xpY2VzKHRoaXMuc3VyZmFjZUZsaW5nZXIudGhyZWFkLElNUE9SVEFOVF9TVVJGQUNFX0ZMSU5HRVJfU0xJQ0VTLGNhbGxiYWNrKTt9Ci10aGlzLmFwcHMuZm9yRWFjaChmdW5jdGlvbihhcHApe2l0ZXJhdGVJbXBvcnRhbnRUaHJlYWRTbGljZXMoYXBwLnVpVGhyZWFkLElNUE9SVEFOVF9VSV9USFJFQURfU0xJQ0VTLGNhbGxiYWNrKTtpdGVyYXRlSW1wb3J0YW50VGhyZWFkU2xpY2VzKGFwcC5yZW5kZXJUaHJlYWQsSU1QT1JUQU5UX1JFTkRFUl9USFJFQURfU0xJQ0VTLGNhbGxiYWNrKTt9KTt9fTtyZXR1cm57QW5kcm9pZE1vZGVsSGVscGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBTbGljZShjYXRlZ29yeSx0aXRsZSxjb2xvcklkLHN0YXJ0LGFyZ3Msb3B0X2R1cmF0aW9uLG9wdF9jcHVTdGFydCxvcHRfY3B1RHVyYXRpb24sb3B0X2FyZ3NTdHJpcHBlZCxvcHRfYmluZElkKXtpZihuZXcudGFyZ2V0KXt0aHJvdyBuZXcgRXJyb3IoJ0NhblwndCBpbnN0YW50aWF0ZSBwdXJlIHZpcnR1YWwgY2xhc3MgU2xpY2UnKTt9Ci10ci5tb2RlbC5UaW1lZEV2ZW50LmNhbGwodGhpcyxzdGFydCk7dGhpcy5jYXRlZ29yeT1jYXRlZ29yeXx8Jyc7dGhpcy50aXRsZT10aXRsZTt0aGlzLmNvbG9ySWQ9Y29sb3JJZDt0aGlzLmFyZ3M9YXJnczt0aGlzLnN0YXJ0U3RhY2tGcmFtZT11bmRlZmluZWQ7dGhpcy5lbmRTdGFja0ZyYW1lPXVuZGVmaW5lZDt0aGlzLmRpZE5vdEZpbmlzaD1mYWxzZTt0aGlzLmluRmxvd0V2ZW50cz1bXTt0aGlzLm91dEZsb3dFdmVudHM9W107dGhpcy5zdWJTbGljZXM9W107dGhpcy5zZWxmVGltZT11bmRlZmluZWQ7dGhpcy5jcHVTZWxmVGltZT11bmRlZmluZWQ7dGhpcy5pbXBvcnRhbnQ9ZmFsc2U7dGhpcy5wYXJlbnRDb250YWluZXI9dW5kZWZpbmVkO3RoaXMuYXJnc1N0cmlwcGVkPWZhbHNlO3RoaXMuYmluZF9pZF89b3B0X2JpbmRJZDt0aGlzLnBhcmVudFNsaWNlPXVuZGVmaW5lZDt0aGlzLmlzVG9wTGV2ZWw9ZmFsc2U7aWYob3B0X2R1cmF0aW9uIT09dW5kZWZpbmVkKXt0aGlzLmR1cmF0aW9uPW9wdF9kdXJhdGlvbjt9Ci1pZihvcHRfY3B1U3RhcnQhPT11bmRlZmluZWQpe3RoaXMuY3B1U3RhcnQ9b3B0X2NwdVN0YXJ0O30KLWlmKG9wdF9jcHVEdXJhdGlvbiE9PXVuZGVmaW5lZCl7dGhpcy5jcHVEdXJhdGlvbj1vcHRfY3B1RHVyYXRpb247fQotaWYob3B0X2FyZ3NTdHJpcHBlZCE9PXVuZGVmaW5lZCl7dGhpcy5hcmdzU3RyaXBwZWQ9dHJ1ZTt9fQotU2xpY2UucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuVGltZWRFdmVudC5wcm90b3R5cGUsZ2V0IGFuYWx5c2lzVHlwZU5hbWUoKXtyZXR1cm4gdGhpcy50aXRsZTt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ1NsaWNlICcrdGhpcy50aXRsZSsnIGF0ICcrCi10ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMuZm9ybWF0KHRoaXMuc3RhcnQpO30sZ2V0IHN0YWJsZUlkKCl7Y29uc3QgcGFyZW50U2xpY2VHcm91cD10aGlzLnBhcmVudENvbnRhaW5lci5zbGljZUdyb3VwO3JldHVybiBwYXJlbnRTbGljZUdyb3VwLnN0YWJsZUlkKycuJysKLXBhcmVudFNsaWNlR3JvdXAuc2xpY2VzLmluZGV4T2YodGhpcyk7fSxnZXQgYmluZElkKCl7cmV0dXJuIHRoaXMuYmluZF9pZF87fSxmaW5kRGVzY2VuZGVudFNsaWNlKHRhcmdldFRpdGxlKXtpZighdGhpcy5zdWJTbGljZXMpe3JldHVybiB1bmRlZmluZWQ7fQotZm9yKGxldCBpPTA7aTx0aGlzLnN1YlNsaWNlcy5sZW5ndGg7aSsrKXtpZih0aGlzLnN1YlNsaWNlc1tpXS50aXRsZT09PXRhcmdldFRpdGxlKXtyZXR1cm4gdGhpcy5zdWJTbGljZXNbaV07fQotY29uc3Qgc2xpY2U9dGhpcy5zdWJTbGljZXNbaV0uZmluZERlc2NlbmRlbnRTbGljZSh0YXJnZXRUaXRsZSk7aWYoc2xpY2UpcmV0dXJuIHNsaWNlO30KLXJldHVybiB1bmRlZmluZWQ7fSxnZXQgbW9zdFRvcExldmVsU2xpY2UoKXtpZighdGhpcy5wYXJlbnRTbGljZSlyZXR1cm4gdGhpcztyZXR1cm4gdGhpcy5wYXJlbnRTbGljZS5tb3N0VG9wTGV2ZWxTbGljZTt9LGdldFByb2Nlc3MoKXtjb25zdCB0aHJlYWQ9dGhpcy5wYXJlbnRDb250YWluZXI7aWYodGhyZWFkJiZ0aHJlYWQuZ2V0UHJvY2Vzcyl7cmV0dXJuIHRocmVhZC5nZXRQcm9jZXNzKCk7fQotcmV0dXJuIHVuZGVmaW5lZDt9LGdldCBtb2RlbCgpe2NvbnN0IHByb2Nlc3M9dGhpcy5nZXRQcm9jZXNzKCk7aWYocHJvY2VzcyE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMuZ2V0UHJvY2VzcygpLm1vZGVsO30KLXJldHVybiB1bmRlZmluZWQ7fSwqZmluZFRvcG1vc3RTbGljZXNSZWxhdGl2ZVRvVGhpc1NsaWNlKGV2ZW50UHJlZGljYXRlKXtpZihldmVudFByZWRpY2F0ZSh0aGlzKSl7eWllbGQgdGhpcztyZXR1cm47fQotZm9yKGNvbnN0IHMgb2YgdGhpcy5zdWJTbGljZXMpe3lpZWxkKnMuZmluZFRvcG1vc3RTbGljZXNSZWxhdGl2ZVRvVGhpc1NsaWNlKGV2ZW50UHJlZGljYXRlKTt9fSxpdGVyYXRlQWxsU3Vic2VxdWVudFNsaWNlcyhjYWxsYmFjayxvcHRfdGhpcyl7Y29uc3QgcGFyZW50U3RhY2s9W107bGV0IHN0YXJ0ZWQ9ZmFsc2U7Y29uc3QgdG9wbW9zdFNsaWNlPXRoaXMubW9zdFRvcExldmVsU2xpY2U7cGFyZW50U3RhY2sucHVzaCh0b3Btb3N0U2xpY2UpO3doaWxlKHBhcmVudFN0YWNrLmxlbmd0aCE9PTApe2NvbnN0IGN1clNsaWNlPXBhcmVudFN0YWNrLnBvcCgpO2lmKHN0YXJ0ZWQpe2NhbGxiYWNrLmNhbGwob3B0X3RoaXMsY3VyU2xpY2UpO31lbHNle3N0YXJ0ZWQ9KGN1clNsaWNlLmd1aWQ9PT10aGlzLmd1aWQpO30KLWZvcihsZXQgaT1jdXJTbGljZS5zdWJTbGljZXMubGVuZ3RoLTE7aT49MDtpLS0pe3BhcmVudFN0YWNrLnB1c2goY3VyU2xpY2Uuc3ViU2xpY2VzW2ldKTt9fX0sZ2V0IHN1YnNlcXVlbnRTbGljZXMoKXtjb25zdCByZXM9W107dGhpcy5pdGVyYXRlQWxsU3Vic2VxdWVudFNsaWNlcyhmdW5jdGlvbihzdWJzZXFTbGljZSl7cmVzLnB1c2goc3Vic2VxU2xpY2UpO30pO3JldHVybiByZXM7fSwqZW51bWVyYXRlQWxsQW5jZXN0b3JzKCl7bGV0IGN1clNsaWNlPXRoaXMucGFyZW50U2xpY2U7d2hpbGUoY3VyU2xpY2Upe3lpZWxkIGN1clNsaWNlO2N1clNsaWNlPWN1clNsaWNlLnBhcmVudFNsaWNlO319LGdldCBhbmNlc3RvclNsaWNlcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuZW51bWVyYXRlQWxsQW5jZXN0b3JzKCkpO30saXRlcmF0ZUVudGlyZUhpZXJhcmNoeShjYWxsYmFjayxvcHRfdGhpcyl7Y29uc3QgbW9zdFRvcExldmVsU2xpY2U9dGhpcy5tb3N0VG9wTGV2ZWxTbGljZTtjYWxsYmFjay5jYWxsKG9wdF90aGlzLG1vc3RUb3BMZXZlbFNsaWNlKTttb3N0VG9wTGV2ZWxTbGljZS5pdGVyYXRlQWxsU3Vic2VxdWVudFNsaWNlcyhjYWxsYmFjayxvcHRfdGhpcyk7fSxnZXQgZW50aXJlSGllcmFyY2h5KCl7Y29uc3QgcmVzPVtdO3RoaXMuaXRlcmF0ZUVudGlyZUhpZXJhcmNoeShmdW5jdGlvbihzbGljZSl7cmVzLnB1c2goc2xpY2UpO30pO3JldHVybiByZXM7fSxnZXQgYW5jZXN0b3JBbmRTdWJzZXF1ZW50U2xpY2VzKCl7Y29uc3QgcmVzPVtdO3Jlcy5wdXNoKHRoaXMpO2Zvcihjb25zdCBhU2xpY2Ugb2YgdGhpcy5lbnVtZXJhdGVBbGxBbmNlc3RvcnMoKSl7cmVzLnB1c2goYVNsaWNlKTt9Ci10aGlzLml0ZXJhdGVBbGxTdWJzZXF1ZW50U2xpY2VzKGZ1bmN0aW9uKHNTbGljZSl7cmVzLnB1c2goc1NsaWNlKTt9KTtyZXR1cm4gcmVzO30sKmVudW1lcmF0ZUFsbERlc2NlbmRlbnRzKCl7Zm9yKGNvbnN0IHNsaWNlIG9mIHRoaXMuc3ViU2xpY2VzKXt5aWVsZCBzbGljZTt9Ci1mb3IoY29uc3Qgc2xpY2Ugb2YgdGhpcy5zdWJTbGljZXMpe3lpZWxkKnNsaWNlLmVudW1lcmF0ZUFsbERlc2NlbmRlbnRzKCk7fX0sZ2V0IGRlc2NlbmRlbnRTbGljZXMoKXtjb25zdCByZXM9W107Zm9yKGNvbnN0IHNsaWNlIG9mIHRoaXMuZW51bWVyYXRlQWxsRGVzY2VuZGVudHMoKSl7cmVzLnB1c2goc2xpY2UpO30KLXJldHVybiByZXM7fX07cmV0dXJue1NsaWNlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBTbGljZT10ci5tb2RlbC5TbGljZTtjb25zdCBTQ0hFRFVMSU5HX1NUQVRFPXtERUJVRzonRGVidWcnLEVYSVRfREVBRDonRXhpdCBEZWFkJyxSVU5OQUJMRTonUnVubmFibGUnLFJVTk5JTkc6J1J1bm5pbmcnLFNMRUVQSU5HOidTbGVlcGluZycsU1RPUFBFRDonU3RvcHBlZCcsVEFTS19ERUFEOidUYXNrIERlYWQnLFVOSU5UUl9TTEVFUDonVW5pbnRlcnJ1cHRpYmxlIFNsZWVwJyxVTklOVFJfU0xFRVBfV0FLRV9LSUxMOidVbmludGVycnVwdGlibGUgU2xlZXAgfCBXYWtlS2lsbCcsVU5JTlRSX1NMRUVQX1dBS0lORzonVW5pbnRlcnJ1cHRpYmxlIFNsZWVwIHwgV2FraW5nJyxVTklOVFJfU0xFRVBfSU86J1VuaW50ZXJydXB0aWJsZSBTbGVlcCAtIEJsb2NrIEkvTycsVU5JTlRSX1NMRUVQX1dBS0VfS0lMTF9JTzonVW5pbnRlcnJ1cHRpYmxlIFNsZWVwIHwgV2FrZUtpbGwgLSBCbG9jayBJL08nLFVOSU5UUl9TTEVFUF9XQUtJTkdfSU86J1VuaW50ZXJydXB0aWJsZSBTbGVlcCB8IFdha2luZyAtIEJsb2NrIEkvTycsVU5LTk9XTjonVU5LTk9XTicsV0FLRV9LSUxMOidXYWtla2lsbCcsV0FLSU5HOidXYWtpbmcnLFpPTUJJRTonWm9tYmllJ307ZnVuY3Rpb24gVGhyZWFkVGltZVNsaWNlKHRocmVhZCxzY2hlZHVsaW5nU3RhdGUsY2F0LHN0YXJ0LGFyZ3Msb3B0X2R1cmF0aW9uKXtTbGljZS5jYWxsKHRoaXMsY2F0LHNjaGVkdWxpbmdTdGF0ZSx0aGlzLmdldENvbG9yRm9yU3RhdGVfKHNjaGVkdWxpbmdTdGF0ZSksc3RhcnQsYXJncyxvcHRfZHVyYXRpb24pO3RoaXMudGhyZWFkPXRocmVhZDt0aGlzLnNjaGVkdWxpbmdTdGF0ZT1zY2hlZHVsaW5nU3RhdGU7dGhpcy5jcHVPbldoaWNoVGhyZWFkV2FzUnVubmluZz11bmRlZmluZWQ7fQotVGhyZWFkVGltZVNsaWNlLnByb3RvdHlwZT17X19wcm90b19fOlNsaWNlLnByb3RvdHlwZSxnZXRDb2xvckZvclN0YXRlXyhzdGF0ZSl7Y29uc3QgZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZT10ci5iLkNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWU7c3dpdGNoKHN0YXRlKXtjYXNlIFNDSEVEVUxJTkdfU1RBVEUuUlVOTkFCTEU6cmV0dXJuIGdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWUoJ3RocmVhZF9zdGF0ZV9ydW5uYWJsZScpO2Nhc2UgU0NIRURVTElOR19TVEFURS5SVU5OSU5HOnJldHVybiBnZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lKCd0aHJlYWRfc3RhdGVfcnVubmluZycpO2Nhc2UgU0NIRURVTElOR19TVEFURS5TTEVFUElORzpyZXR1cm4gZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZSgndGhyZWFkX3N0YXRlX3NsZWVwaW5nJyk7Y2FzZSBTQ0hFRFVMSU5HX1NUQVRFLkRFQlVHOmNhc2UgU0NIRURVTElOR19TVEFURS5FWElUX0RFQUQ6Y2FzZSBTQ0hFRFVMSU5HX1NUQVRFLlNUT1BQRUQ6Y2FzZSBTQ0hFRFVMSU5HX1NUQVRFLlRBU0tfREVBRDpjYXNlIFNDSEVEVUxJTkdfU1RBVEUuVU5JTlRSX1NMRUVQOmNhc2UgU0NIRURVTElOR19TVEFURS5VTklOVFJfU0xFRVBfV0FLRV9LSUxMOmNhc2UgU0NIRURVTElOR19TVEFURS5VTklOVFJfU0xFRVBfV0FLSU5HOmNhc2UgU0NIRURVTElOR19TVEFURS5VTktOT1dOOmNhc2UgU0NIRURVTElOR19TVEFURS5XQUtFX0tJTEw6Y2FzZSBTQ0hFRFVMSU5HX1NUQVRFLldBS0lORzpjYXNlIFNDSEVEVUxJTkdfU1RBVEUuWk9NQklFOnJldHVybiBnZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lKCd0aHJlYWRfc3RhdGVfdW5pbnRlcnJ1cHRpYmxlJyk7Y2FzZSBTQ0hFRFVMSU5HX1NUQVRFLlVOSU5UUl9TTEVFUF9JTzpjYXNlIFNDSEVEVUxJTkdfU1RBVEUuVU5JTlRSX1NMRUVQX1dBS0VfS0lMTF9JTzpjYXNlIFNDSEVEVUxJTkdfU1RBVEUuVU5JTlRSX1NMRUVQX1dBS0lOR19JTzpyZXR1cm4gZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZSgndGhyZWFkX3N0YXRlX2lvd2FpdCcpO2RlZmF1bHQ6cmV0dXJuIGdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWUoJ3RocmVhZF9zdGF0ZV91bmtub3duJyk7fX0sZ2V0IGFuYWx5c2lzVHlwZU5hbWUoKXtyZXR1cm4ndHIudWkuYW5hbHlzaXMuVGhyZWFkVGltZVNsaWNlJzt9LGdldEFzc29jaWF0ZWRDcHVTbGljZSgpe2lmKCF0aGlzLmNwdU9uV2hpY2hUaHJlYWRXYXNSdW5uaW5nKXJldHVybiB1bmRlZmluZWQ7Y29uc3QgY3B1U2xpY2VzPXRoaXMuY3B1T25XaGljaFRocmVhZFdhc1J1bm5pbmcuc2xpY2VzO2ZvcihsZXQgaT0wO2k8Y3B1U2xpY2VzLmxlbmd0aDtpKyspe2NvbnN0IGNwdVNsaWNlPWNwdVNsaWNlc1tpXTtpZihjcHVTbGljZS5zdGFydCE9PXRoaXMuc3RhcnQpY29udGludWU7aWYoY3B1U2xpY2UuZHVyYXRpb24hPT10aGlzLmR1cmF0aW9uKWNvbnRpbnVlO3JldHVybiBjcHVTbGljZTt9Ci1yZXR1cm4gdW5kZWZpbmVkO30sZ2V0Q3B1U2xpY2VUaGF0VG9va0NwdSgpe2lmKHRoaXMuY3B1T25XaGljaFRocmVhZFdhc1J1bm5pbmcpcmV0dXJuIHVuZGVmaW5lZDtsZXQgY3VySW5kZXg9dGhpcy50aHJlYWQuaW5kZXhPZlRpbWVTbGljZSh0aGlzKTtsZXQgY3B1U2xpY2VXaGVuTGFzdFJ1bm5pbmc7d2hpbGUoY3VySW5kZXg+PTApe2NvbnN0IGN1clNsaWNlPXRoaXMudGhyZWFkLnRpbWVTbGljZXNbY3VySW5kZXhdO2lmKCFjdXJTbGljZS5jcHVPbldoaWNoVGhyZWFkV2FzUnVubmluZyl7Y3VySW5kZXgtLTtjb250aW51ZTt9Ci1jcHVTbGljZVdoZW5MYXN0UnVubmluZz1jdXJTbGljZS5nZXRBc3NvY2lhdGVkQ3B1U2xpY2UoKTticmVhazt9Ci1pZighY3B1U2xpY2VXaGVuTGFzdFJ1bm5pbmcpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCBjcHU9Y3B1U2xpY2VXaGVuTGFzdFJ1bm5pbmcuY3B1O2NvbnN0IGluZGV4T2ZTbGljZU9uQ3B1V2hlbkxhc3RSdW5uaW5nPWNwdS5pbmRleE9mKGNwdVNsaWNlV2hlbkxhc3RSdW5uaW5nKTtjb25zdCBuZXh0UnVubmluZ1NsaWNlPWNwdS5zbGljZXNbaW5kZXhPZlNsaWNlT25DcHVXaGVuTGFzdFJ1bm5pbmcrMV07aWYoIW5leHRSdW5uaW5nU2xpY2UpcmV0dXJuIHVuZGVmaW5lZDtpZihNYXRoLmFicyhuZXh0UnVubmluZ1NsaWNlLnN0YXJ0LWNwdVNsaWNlV2hlbkxhc3RSdW5uaW5nLmVuZCk8MC4wMDAwMSl7cmV0dXJuIG5leHRSdW5uaW5nU2xpY2U7fQotcmV0dXJuIHVuZGVmaW5lZDt9fTt0ci5tb2RlbC5FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKFRocmVhZFRpbWVTbGljZSx7bmFtZTondGhyZWFkVGltZVNsaWNlJyxwbHVyYWxOYW1lOid0aHJlYWRUaW1lU2xpY2VzJ30pO3JldHVybntUaHJlYWRUaW1lU2xpY2UsU0NIRURVTElOR19TVEFURSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgQ29tcG91bmRFdmVudFNlbGVjdGlvblN0YXRlPXtOT1RfU0VMRUNURUQ6MCxFVkVOVF9TRUxFQ1RFRDoweDEsU09NRV9BU1NPQ0lBVEVEX0VWRU5UU19TRUxFQ1RFRDoweDIsQUxMX0FTU09DSUFURURfRVZFTlRTX1NFTEVDVEVEOjB4NCxFVkVOVF9BTkRfU09NRV9BU1NPQ0lBVEVEX1NFTEVDVEVEOjB4MXwweDIsRVZFTlRfQU5EX0FMTF9BU1NPQ0lBVEVEX1NFTEVDVEVEOjB4MXwweDR9O3JldHVybntDb21wb3VuZEV2ZW50U2VsZWN0aW9uU3RhdGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLnVtJyxmdW5jdGlvbigpe2NvbnN0IENvbXBvdW5kRXZlbnRTZWxlY3Rpb25TdGF0ZT10ci5tb2RlbC5Db21wb3VuZEV2ZW50U2VsZWN0aW9uU3RhdGU7ZnVuY3Rpb24gVXNlckV4cGVjdGF0aW9uKHBhcmVudE1vZGVsLGluaXRpYXRvclR5cGUsc3RhcnQsZHVyYXRpb24pe3RyLm1vZGVsLlRpbWVkRXZlbnQuY2FsbCh0aGlzLHN0YXJ0KTt0aGlzLmFzc29jaWF0ZWRFdmVudHM9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7dGhpcy5kdXJhdGlvbj1kdXJhdGlvbjt0aGlzLmluaXRpYXRvclR5cGVfPWluaXRpYXRvclR5cGU7dGhpcy5wYXJlbnRNb2RlbD1wYXJlbnRNb2RlbDt0aGlzLnR5cGVJbmZvXz11bmRlZmluZWQ7dGhpcy5zb3VyY2VFdmVudHM9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7fQotY29uc3QgSU5JVElBVE9SX1RZUEU9e0tFWUJPQVJEOidLZXlib2FyZCcsTU9VU0U6J01vdXNlJyxNT1VTRV9XSEVFTDonTW91c2VXaGVlbCcsVEFQOidUYXAnLFBJTkNIOidQaW5jaCcsRkxJTkc6J0ZsaW5nJyxUT1VDSDonVG91Y2gnLFNDUk9MTDonU2Nyb2xsJyxDU1M6J0NTUycsV0VCR0w6J1dlYkdMJyxWSURFTzonVmlkZW8nLFZSOidWUicsfTtVc2VyRXhwZWN0YXRpb24ucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuVGltZWRFdmVudC5wcm90b3R5cGUsY29tcHV0ZUNvbXBvdW5kRXZlblNlbGVjdGlvblN0YXRlKHNlbGVjdGlvbil7bGV0IGNlc3M9Q29tcG91bmRFdmVudFNlbGVjdGlvblN0YXRlLk5PVF9TRUxFQ1RFRDtpZihzZWxlY3Rpb24uY29udGFpbnModGhpcykpe2Nlc3N8PUNvbXBvdW5kRXZlbnRTZWxlY3Rpb25TdGF0ZS5FVkVOVF9TRUxFQ1RFRDt9Ci1pZih0aGlzLmFzc29jaWF0ZWRFdmVudHMuaW50ZXJzZWN0aW9uSXNFbXB0eShzZWxlY3Rpb24pKXtyZXR1cm4gY2Vzczt9Ci1jb25zdCBhbGxDb250YWluZWQ9dGhpcy5hc3NvY2lhdGVkRXZlbnRzLmV2ZXJ5KGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gc2VsZWN0aW9uLmNvbnRhaW5zKGV2ZW50KTt9KTtpZihhbGxDb250YWluZWQpe2Nlc3N8PUNvbXBvdW5kRXZlbnRTZWxlY3Rpb25TdGF0ZS5BTExfQVNTT0NJQVRFRF9FVkVOVFNfU0VMRUNURUQ7fWVsc2V7Y2Vzc3w9Q29tcG91bmRFdmVudFNlbGVjdGlvblN0YXRlLlNPTUVfQVNTT0NJQVRFRF9FVkVOVFNfU0VMRUNURUQ7fQotcmV0dXJuIGNlc3M7fSxnZXQgYXNzb2NpYXRlZFNhbXBsZXMoKXtjb25zdCBzYW1wbGVzPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO3RoaXMuYXNzb2NpYXRlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtpZihldmVudCBpbnN0YW5jZW9mIHRyLm1vZGVsLlRocmVhZFNsaWNlKXtzYW1wbGVzLmFkZEV2ZW50U2V0KGV2ZW50Lm92ZXJsYXBwaW5nU2FtcGxlcyk7fX0pO3JldHVybiBzYW1wbGVzO30sZ2V0IHVzZXJGcmllbmRseU5hbWUoKXtyZXR1cm4gdGhpcy50aXRsZSsnIFVzZXIgRXhwZWN0YXRpb24gYXQgJysKLXRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Ncy5mb3JtYXQodGhpcy5zdGFydCk7fSxnZXQgc3RhYmxlSWQoKXtyZXR1cm4oJ1VzZXJFeHBlY3RhdGlvbi4nK3RoaXMuZ3VpZCk7fSxnZXQgdHlwZUluZm8oKXtpZighdGhpcy50eXBlSW5mb18pe3RoaXMudHlwZUluZm9fPVVzZXJFeHBlY3RhdGlvbi5zdWJUeXBlcy5maW5kVHlwZUluZm8odGhpcy5jb25zdHJ1Y3Rvcik7fQotaWYoIXRoaXMudHlwZUluZm9fKXt0aHJvdyBuZXcgRXJyb3IoJ1VucmVnaXN0ZXJlZCBVc2VyRXhwZWN0YXRpb24nKTt9Ci1yZXR1cm4gdGhpcy50eXBlSW5mb187fSxnZXQgY29sb3JJZCgpe3JldHVybiB0aGlzLnR5cGVJbmZvLm1ldGFkYXRhLmNvbG9ySWQ7fSxnZXQgc3RhZ2VUaXRsZSgpe3JldHVybiB0aGlzLnR5cGVJbmZvLm1ldGFkYXRhLnN0YWdlVGl0bGU7fSxnZXQgaW5pdGlhdG9yVHlwZSgpe3JldHVybiB0aGlzLmluaXRpYXRvclR5cGVfO30sZ2V0IHRpdGxlKCl7aWYoIXRoaXMuaW5pdGlhdG9yVHlwZSl7cmV0dXJuIHRoaXMuc3RhZ2VUaXRsZTt9Ci1yZXR1cm4gdGhpcy5pbml0aWF0b3JUeXBlKycgJyt0aGlzLnN0YWdlVGl0bGU7fSxnZXQgdG90YWxDcHVNcygpe2xldCBjcHVNcz0wO3RoaXMuYXNzb2NpYXRlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtpZihldmVudC5jcHVTZWxmVGltZSl7Y3B1TXMrPWV2ZW50LmNwdVNlbGZUaW1lO319KTtyZXR1cm4gY3B1TXM7fX07Y29uc3Qgc3ViVHlwZXM9e307Y29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5CQVNJQ19SRUdJU1RSWV9NT0RFKTt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoc3ViVHlwZXMsb3B0aW9ucyk7c3ViVHlwZXMuYWRkRXZlbnRMaXN0ZW5lcignd2lsbC1yZWdpc3RlcicsZnVuY3Rpb24oZSl7Y29uc3QgbWV0YWRhdGE9ZS50eXBlSW5mby5tZXRhZGF0YTtpZihtZXRhZGF0YS5zdGFnZVRpdGxlPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1JlZ2lzdGVyZWQgVXNlckV4cGVjdGF0aW9ucyBtdXN0IHByb3ZpZGUgJysnc3RhZ2VUaXRsZScpO30KLWlmKG1ldGFkYXRhLmNvbG9ySWQ9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignUmVnaXN0ZXJlZCBVc2VyRXhwZWN0YXRpb25zIG11c3QgcHJvdmlkZSAnKydjb2xvcklkJyk7fX0pO3RyLm1vZGVsLkV2ZW50UmVnaXN0cnkucmVnaXN0ZXIoVXNlckV4cGVjdGF0aW9uLHtuYW1lOid1c2VyRXhwZWN0YXRpb24nLHBsdXJhbE5hbWU6J3VzZXJFeHBlY3RhdGlvbnMnLHN1YlR5cGVzfSk7cmV0dXJue1VzZXJFeHBlY3RhdGlvbixJTklUSUFUT1JfVFlQRSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwudW0nLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUmVzcG9uc2VFeHBlY3RhdGlvbihwYXJlbnRNb2RlbCxpbml0aWF0b3JUaXRsZSxzdGFydCxkdXJhdGlvbixvcHRfaXNBbmltYXRpb25CZWdpbil7dHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLmNhbGwodGhpcyxwYXJlbnRNb2RlbCxpbml0aWF0b3JUaXRsZSxzdGFydCxkdXJhdGlvbik7dGhpcy5pc0FuaW1hdGlvbkJlZ2luPW9wdF9pc0FuaW1hdGlvbkJlZ2lufHxmYWxzZTt9Ci1SZXNwb25zZUV4cGVjdGF0aW9uLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLnVtLlVzZXJFeHBlY3RhdGlvbi5wcm90b3R5cGUsY29uc3RydWN0b3I6UmVzcG9uc2VFeHBlY3RhdGlvbn07dHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLnN1YlR5cGVzLnJlZ2lzdGVyKFJlc3BvbnNlRXhwZWN0YXRpb24se3N0YWdlVGl0bGU6J1Jlc3BvbnNlJyxjb2xvcklkOnRyLmIuQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZSgncmFpbF9yZXNwb25zZScpfSk7cmV0dXJue1Jlc3BvbnNlRXhwZWN0YXRpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuYXVkaXRzJyxmdW5jdGlvbigpe2NvbnN0IFNDSEVEVUxJTkdfU1RBVEU9dHIubW9kZWwuU0NIRURVTElOR19TVEFURTtjb25zdCBBdWRpdG9yPXRyLmMuQXVkaXRvcjtjb25zdCBBbmRyb2lkTW9kZWxIZWxwZXI9dHIubW9kZWwuaGVscGVycy5BbmRyb2lkTW9kZWxIZWxwZXI7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBTdGF0aXN0aWNzPXRyLmIubWF0aC5TdGF0aXN0aWNzO2NvbnN0IEZSQU1FX1BFUkZfQ0xBU1M9dHIubW9kZWwuRlJBTUVfUEVSRl9DTEFTUztjb25zdCBBbGVydD10ci5tb2RlbC5BbGVydDtjb25zdCBFdmVudEluZm89dHIubW9kZWwuRXZlbnRJbmZvO2NvbnN0IFNjYWxhcj10ci5iLlNjYWxhcjtjb25zdCB0aW1lRHVyYXRpb25Jbk1zPXRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Ncztjb25zdCBFWFBFQ1RFRF9GUkFNRV9USU1FX01TPTE2LjY3O2Z1bmN0aW9uIGdldFN0YXJ0KGUpe3JldHVybiBlLnN0YXJ0O30KLWZ1bmN0aW9uIGdldER1cmF0aW9uKGUpe3JldHVybiBlLmR1cmF0aW9uO30KLWZ1bmN0aW9uIGdldENwdUR1cmF0aW9uKGUpe3JldHVybihlLmNwdUR1cmF0aW9uIT09dW5kZWZpbmVkKT9lLmNwdUR1cmF0aW9uOmUuZHVyYXRpb247fQotZnVuY3Rpb24gZnJhbWVJc0FjdGl2aXR5U3RhcnQoZnJhbWUpe3JldHVybiBmcmFtZS5hc3NvY2lhdGVkRXZlbnRzLmFueSh4PT54LnRpdGxlPT09J2FjdGl2aXR5U3RhcnQnKTt9Ci1mdW5jdGlvbiBmcmFtZU1pc3NlZERlYWRsaW5lKGZyYW1lKXtyZXR1cm4gZnJhbWUuYXJncy5kZWFkbGluZSYmZnJhbWUuYXJncy5kZWFkbGluZTxmcmFtZS5lbmQ7fQotZnVuY3Rpb24gRG9jTGlua0J1aWxkZXIoKXt0aGlzLmRvY0xpbmtzPVtdO30KLURvY0xpbmtCdWlsZGVyLnByb3RvdHlwZT17YWRkQXBwVmlkZW8obmFtZSx2aWRlb0lkKXt0aGlzLmRvY0xpbmtzLnB1c2goe2xhYmVsOidWaWRlbyBMaW5rJyx0ZXh0Q29udGVudDooJ0FuZHJvaWQgUGVyZm9ybWFuY2UgUGF0dGVybnM6ICcrbmFtZSksaHJlZjonaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/bGlzdD1QTFd6NXJKMkVLS2M5Q0J4cjNCVmpQVFBvRFBMZFBJRkNFJnY9Jyt2aWRlb0lkfSk7cmV0dXJuIHRoaXM7fSxhZGREYWNSZWYobmFtZSxsaW5rKXt0aGlzLmRvY0xpbmtzLnB1c2goe2xhYmVsOidEb2MgTGluaycsdGV4dENvbnRlbnQ6KG5hbWUrJyBkb2N1bWVudGF0aW9uJyksaHJlZjonaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlLycrbGlua30pO3JldHVybiB0aGlzO30sYnVpbGQoKXtyZXR1cm4gdGhpcy5kb2NMaW5rczt9fTtmdW5jdGlvbiBBbmRyb2lkQXVkaXRvcihtb2RlbCl7QXVkaXRvci5jYWxsKHRoaXMsbW9kZWwpO2NvbnN0IGhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcihBbmRyb2lkTW9kZWxIZWxwZXIpO2lmKGhlbHBlci5hcHBzLmxlbmd0aHx8aGVscGVyLnN1cmZhY2VGbGluZ2VyKXt0aGlzLmhlbHBlcj1oZWxwZXI7fX0KLUFuZHJvaWRBdWRpdG9yLnZpZXdBbHBoYUFsZXJ0SW5mb189bmV3IEV2ZW50SW5mbygnSW5lZmZpY2llbnQgVmlldyBhbHBoYSB1c2FnZScsJ1NldHRpbmcgYW4gYWxwaGEgYmV0d2VlbiAwIGFuZCAxIGhhcyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBjb3N0cywgaWYgb25lIG9mIHRoZSBmYXN0IGFscGhhIHBhdGhzIGlzIG5vdCB1c2VkLicsbmV3IERvY0xpbmtCdWlsZGVyKCkuYWRkQXBwVmlkZW8oJ0hpZGRlbiBDb3N0IG9mIFRyYW5zcGFyZW5jeScsJ3dJeThnOHlOaE5rJykuYWRkRGFjUmVmKCdWaWV3I3NldEFscGhhKCknLCdhbmRyb2lkL3ZpZXcvVmlldy5odG1sI3NldEFscGhhKGZsb2F0KScpLmJ1aWxkKCkpO0FuZHJvaWRBdWRpdG9yLnNhdmVMYXllckFsZXJ0SW5mb189bmV3IEV2ZW50SW5mbygnRXhwZW5zaXZlIHJlbmRlcmluZyB3aXRoIENhbnZhcyNzYXZlTGF5ZXIoKScsJ0NhbnZhcyNzYXZlTGF5ZXIoKSBpbmN1cnMgZXh0cmVtZWx5IGhpZ2ggcmVuZGVyaW5nIGNvc3QuIFRoZXkgZGlzcnVwdCB0aGUgcmVuZGVyaW5nIHBpcGVsaW5lIHdoZW4gZHJhd24sIGZvcmNpbmcgYSBmbHVzaCBvZiBkcmF3aW5nIGNvbnRlbnQuIEluc3RlYWQgdXNlIFZpZXcgaGFyZHdhcmUgbGF5ZXJzLCBvciBzdGF0aWMgQml0bWFwcy4gVGhpcyBlbmFibGVzIHRoZSBvZmZzY3JlZW4gYnVmZmVycyB0byBiZSByZXVzZWQgaW4gYmV0d2VlbiBmcmFtZXMsIGFuZCBhdm9pZHMgdGhlIGRpc3J1cHRpdmUgcmVuZGVyIHRhcmdldCBzd2l0Y2guJyxuZXcgRG9jTGlua0J1aWxkZXIoKS5hZGRBcHBWaWRlbygnSGlkZGVuIENvc3Qgb2YgVHJhbnNwYXJlbmN5Jywnd0l5OGc4eU5oTmsnKS5hZGREYWNSZWYoJ0NhbnZhcyNzYXZlTGF5ZXJBbHBoYSgpJywnYW5kcm9pZC9ncmFwaGljcy9DYW52YXMuaHRtbCNzYXZlTGF5ZXJBbHBoYShhbmRyb2lkLmdyYXBoaWNzLlJlY3RGLCBpbnQsIGludCknKS5idWlsZCgpKTtBbmRyb2lkQXVkaXRvci5nZXRTYXZlTGF5ZXJBbGVydHNfPWZ1bmN0aW9uKGZyYW1lKXtjb25zdCBiYWRBbHBoYVJlZ0V4PS9eKC4rKSBhbHBoYSBjYXVzZWQgKHVuY2xpcHBlZCApP3NhdmVMYXllciAoXGQrKXgoXGQrKSQvO2NvbnN0IHNhdmVMYXllclJlZ0V4PS9eKHVuY2xpcHBlZCApP3NhdmVMYXllciAoXGQrKXgoXGQrKSQvO2NvbnN0IHJldD1bXTtjb25zdCBldmVudHM9W107ZnJhbWUuYXNzb2NpYXRlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHNsaWNlKXtjb25zdCBtYXRjaD1iYWRBbHBoYVJlZ0V4LmV4ZWMoc2xpY2UudGl0bGUpO2lmKG1hdGNoKXtjb25zdCBhcmdzPXsndmlldyBuYW1lJzptYXRjaFsxXSwnd2lkdGgnOnBhcnNlSW50KG1hdGNoWzNdKSwnaGVpZ2h0JzpwYXJzZUludChtYXRjaFs0XSl9O3JldC5wdXNoKG5ldyBBbGVydChBbmRyb2lkQXVkaXRvci52aWV3QWxwaGFBbGVydEluZm9fLHNsaWNlLnN0YXJ0LFtzbGljZV0sYXJncykpO31lbHNlIGlmKHNhdmVMYXllclJlZ0V4LnRlc3Qoc2xpY2UudGl0bGUpKXtldmVudHMucHVzaChzbGljZSk7fX0sdGhpcyk7aWYoZXZlbnRzLmxlbmd0aD5yZXQubGVuZ3RoKXtjb25zdCB1bmNsaXBwZWRTZWVuPVN0YXRpc3RpY3Muc3VtKGV2ZW50cyxmdW5jdGlvbihzbGljZSl7cmV0dXJuIHNhdmVMYXllclJlZ0V4LmV4ZWMoc2xpY2UudGl0bGUpWzFdPzE6MDt9KTtjb25zdCBjbGlwcGVkU2Vlbj1ldmVudHMubGVuZ3RoLXVuY2xpcHBlZFNlZW47Y29uc3QgZWFybGllc3RTdGFydD1TdGF0aXN0aWNzLm1pbihldmVudHMsZnVuY3Rpb24oc2xpY2Upe3JldHVybiBzbGljZS5zdGFydDt9KTtjb25zdCBhcmdzPXsnVW5jbGlwcGVkIHNhdmVMYXllciBjb3VudCAoZXNwZWNpYWxseSBiYWQhKSc6dW5jbGlwcGVkU2VlbiwnQ2xpcHBlZCBzYXZlTGF5ZXIgY291bnQnOmNsaXBwZWRTZWVufTtldmVudHMucHVzaChmcmFtZSk7cmV0LnB1c2gobmV3IEFsZXJ0KEFuZHJvaWRBdWRpdG9yLnNhdmVMYXllckFsZXJ0SW5mb18sZWFybGllc3RTdGFydCxldmVudHMsYXJncykpO30KLXJldHVybiByZXQ7fTtBbmRyb2lkQXVkaXRvci5wYXRoQWxlcnRJbmZvXz1uZXcgRXZlbnRJbmZvKCdQYXRoIHRleHR1cmUgY2h1cm4nLCdQYXRocyBhcmUgZHJhd24gd2l0aCBhIG1hc2sgdGV4dHVyZSwgc28gd2hlbiBhIHBhdGggaXMgbW9kaWZpZWQgLyBuZXdseSBkcmF3biwgdGhhdCB0ZXh0dXJlIG11c3QgYmUgZ2VuZXJhdGVkIGFuZCB1cGxvYWRlZCB0byB0aGUgR1BVLiBFbnN1cmUgdGhhdCB5b3UgY2FjaGUgcGF0aHMgYmV0d2VlbiBmcmFtZXMgYW5kIGRvIG5vdCB1bm5lY2Vzc2FyaWx5IGNhbGwgUGF0aCNyZXNldCgpLiBZb3UgY2FuIGN1dCBkb3duIG9uIHRoaXMgY29zdCBieSBzaGFyaW5nIFBhdGggb2JqZWN0IGluc3RhbmNlcyBiZXR3ZWVuIGRyYXdhYmxlcy92aWV3cy4nKTtBbmRyb2lkQXVkaXRvci5nZXRQYXRoQWxlcnRfPWZ1bmN0aW9uKGZyYW1lKXtjb25zdCB1cGxvYWRSZWdFeD0vXkdlbmVyYXRlIFBhdGggVGV4dHVyZSQvO2NvbnN0IGV2ZW50cz1mcmFtZS5hc3NvY2lhdGVkRXZlbnRzLmZpbHRlcihmdW5jdGlvbihldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlPT09J0dlbmVyYXRlIFBhdGggVGV4dHVyZSc7fSk7Y29uc3Qgc3RhcnQ9U3RhdGlzdGljcy5taW4oZXZlbnRzLGdldFN0YXJ0KTtjb25zdCBkdXJhdGlvbj1TdGF0aXN0aWNzLnN1bShldmVudHMsZ2V0RHVyYXRpb24pO2lmKGR1cmF0aW9uPDMpcmV0dXJuIHVuZGVmaW5lZDtldmVudHMucHVzaChmcmFtZSk7cmV0dXJuIG5ldyBBbGVydChBbmRyb2lkQXVkaXRvci5wYXRoQWxlcnRJbmZvXyxzdGFydCxldmVudHMseydUaW1lIHNwZW50JzpuZXcgU2NhbGFyKHRpbWVEdXJhdGlvbkluTXMsZHVyYXRpb24pfSk7fTtBbmRyb2lkQXVkaXRvci51cGxvYWRBbGVydEluZm9fPW5ldyBFdmVudEluZm8oJ0V4cGVuc2l2ZSBCaXRtYXAgdXBsb2FkcycsJ0JpdG1hcHMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgLyBuZXdseSBkcmF3biBtdXN0IGJlIHVwbG9hZGVkIHRvIHRoZSBHUFUuIFNpbmNlIHRoaXMgaXMgZXhwZW5zaXZlIGlmIHRoZSB0b3RhbCBudW1iZXIgb2YgcGl4ZWxzIHVwbG9hZGVkIGlzIGxhcmdlLCByZWR1Y2UgdGhlIGFtb3VudCBvZiBCaXRtYXAgY2h1cm4gaW4gdGhpcyBhbmltYXRpb24vY29udGV4dCwgcGVyIGZyYW1lLicpO0FuZHJvaWRBdWRpdG9yLmdldFVwbG9hZEFsZXJ0Xz1mdW5jdGlvbihmcmFtZSl7Y29uc3QgdXBsb2FkUmVnRXg9L15VcGxvYWQgKFxkKyl4KFxkKykgVGV4dHVyZSQvO2NvbnN0IGV2ZW50cz1bXTtsZXQgc3RhcnQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBkdXJhdGlvbj0wO2xldCBwaXhlbHNVcGxvYWRlZD0wO2ZyYW1lLmFzc29jaWF0ZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7Y29uc3QgbWF0Y2g9dXBsb2FkUmVnRXguZXhlYyhldmVudC50aXRsZSk7aWYobWF0Y2gpe2V2ZW50cy5wdXNoKGV2ZW50KTtzdGFydD1NYXRoLm1pbihzdGFydCxldmVudC5zdGFydCk7ZHVyYXRpb24rPWV2ZW50LmR1cmF0aW9uO3BpeGVsc1VwbG9hZGVkKz1wYXJzZUludChtYXRjaFsxXSkqcGFyc2VJbnQobWF0Y2hbMl0pO319KTtpZihldmVudHMubGVuZ3RoPT09MHx8ZHVyYXRpb248MylyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IG1QaXhlbHM9KHBpeGVsc1VwbG9hZGVkLzEwMDAwMDApLnRvRml4ZWQoMikrJyBtaWxsaW9uJztjb25zdCBhcmdzPXsnUGl4ZWxzIHVwbG9hZGVkJzptUGl4ZWxzLCdUaW1lIHNwZW50JzpuZXcgU2NhbGFyKHRpbWVEdXJhdGlvbkluTXMsZHVyYXRpb24pfTtldmVudHMucHVzaChmcmFtZSk7cmV0dXJuIG5ldyBBbGVydChBbmRyb2lkQXVkaXRvci51cGxvYWRBbGVydEluZm9fLHN0YXJ0LGV2ZW50cyxhcmdzKTt9O0FuZHJvaWRBdWRpdG9yLkxpc3RWaWV3SW5mbGF0ZUFsZXJ0SW5mb189bmV3IEV2ZW50SW5mbygnSW5mbGF0aW9uIGR1cmluZyBMaXN0VmlldyByZWN5Y2xpbmcnLCdMaXN0VmlldyBpdGVtIHJlY3ljbGluZyBpbnZvbHZlZCBpbmZsYXRpbmcgdmlld3MuIEVuc3VyZSB5b3VyIEFkYXB0ZXIjZ2V0VmlldygpIHJlY3ljbGVzIHRoZSBpbmNvbWluZyBWaWV3LCBpbnN0ZWFkIG9mIGNvbnN0cnVjdGluZyBhIG5ldyBvbmUuJyk7QW5kcm9pZEF1ZGl0b3IuTGlzdFZpZXdCaW5kQWxlcnRJbmZvXz1uZXcgRXZlbnRJbmZvKCdJbmVmZmljaWVudCBMaXN0VmlldyByZWN5Y2xpbmcvcmViaW5kaW5nJywnTGlzdFZpZXcgcmVjeWNsaW5nIHRha2luZyB0b28gbXVjaCB0aW1lIHBlciBmcmFtZS4gRW5zdXJlIHlvdXIgQWRhcHRlciNnZXRWaWV3KCkgYmluZHMgZGF0YSBlZmZpY2llbnRseS4nKTtBbmRyb2lkQXVkaXRvci5nZXRMaXN0Vmlld0FsZXJ0Xz1mdW5jdGlvbihmcmFtZSl7Y29uc3QgZXZlbnRzPWZyYW1lLmFzc29jaWF0ZWRFdmVudHMuZmlsdGVyKGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGU9PT0nb2J0YWluVmlldyd8fGV2ZW50LnRpdGxlPT09J3NldHVwTGlzdEl0ZW0nO30pO2NvbnN0IGR1cmF0aW9uPVN0YXRpc3RpY3Muc3VtKGV2ZW50cyxnZXRDcHVEdXJhdGlvbik7aWYoZXZlbnRzLmxlbmd0aD09PTB8fGR1cmF0aW9uPDMpcmV0dXJuIHVuZGVmaW5lZDtsZXQgaGFzSW5mbGF0aW9uPWZhbHNlO2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2lmKGV2ZW50LmZpbmREZXNjZW5kZW50U2xpY2UoJ2luZmxhdGUnKSl7aGFzSW5mbGF0aW9uPXRydWU7fX0KLWNvbnN0IHN0YXJ0PVN0YXRpc3RpY3MubWluKGV2ZW50cyxnZXRTdGFydCk7Y29uc3QgYXJncz17J1RpbWUgc3BlbnQnOm5ldyBTY2FsYXIodGltZUR1cmF0aW9uSW5NcyxkdXJhdGlvbil9O2FyZ3NbJ0xpc3RWaWV3IGl0ZW1zICcrKGhhc0luZmxhdGlvbj8naW5mbGF0ZWQnOidyZWJvdW5kJyldPWV2ZW50cy5sZW5ndGgvMjtjb25zdCBldmVudEluZm89aGFzSW5mbGF0aW9uP0FuZHJvaWRBdWRpdG9yLkxpc3RWaWV3SW5mbGF0ZUFsZXJ0SW5mb186QW5kcm9pZEF1ZGl0b3IuTGlzdFZpZXdCaW5kQWxlcnRJbmZvXztldmVudHMucHVzaChmcmFtZSk7cmV0dXJuIG5ldyBBbGVydChldmVudEluZm8sc3RhcnQsZXZlbnRzLGFyZ3MpO307QW5kcm9pZEF1ZGl0b3IubWVhc3VyZUxheW91dEFsZXJ0SW5mb189bmV3IEV2ZW50SW5mbygnRXhwZW5zaXZlIG1lYXN1cmUvbGF5b3V0IHBhc3MnLCdNZWFzdXJlL0xheW91dCB0b29rIGEgc2lnbmlmaWNhbnQgdGltZSwgY29udHJpYnV0aW5nIHRvIGphbmsuIEF2b2lkIHRyaWdnZXJpbmcgbGF5b3V0IGR1cmluZyBhbmltYXRpb25zLicsbmV3IERvY0xpbmtCdWlsZGVyKCkuYWRkQXBwVmlkZW8oJ0ludmFsaWRhdGlvbnMsIExheW91dHMsIGFuZCBQZXJmb3JtYW5jZScsJ3dlNnBvUDBrdzZFJykuYnVpbGQoKSk7QW5kcm9pZEF1ZGl0b3IuZ2V0TWVhc3VyZUxheW91dEFsZXJ0Xz1mdW5jdGlvbihmcmFtZSl7Y29uc3QgZXZlbnRzPWZyYW1lLmFzc29jaWF0ZWRFdmVudHMuZmlsdGVyKGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGU9PT0nbWVhc3VyZSd8fGV2ZW50LnRpdGxlPT09J2xheW91dCc7fSk7Y29uc3QgZHVyYXRpb249U3RhdGlzdGljcy5zdW0oZXZlbnRzLGdldENwdUR1cmF0aW9uKTtpZihldmVudHMubGVuZ3RoPT09MHx8ZHVyYXRpb248MylyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHN0YXJ0PVN0YXRpc3RpY3MubWluKGV2ZW50cyxnZXRTdGFydCk7ZXZlbnRzLnB1c2goZnJhbWUpO3JldHVybiBuZXcgQWxlcnQoQW5kcm9pZEF1ZGl0b3IubWVhc3VyZUxheW91dEFsZXJ0SW5mb18sc3RhcnQsZXZlbnRzLHsnVGltZSBzcGVudCc6bmV3IFNjYWxhcih0aW1lRHVyYXRpb25Jbk1zLGR1cmF0aW9uKX0pO307QW5kcm9pZEF1ZGl0b3Iudmlld0RyYXdBbGVydEluZm9fPW5ldyBFdmVudEluZm8oJ0xvbmcgVmlldyNkcmF3KCknLCdSZWNvcmRpbmcgdGhlIGRyYXdpbmcgY29tbWFuZHMgb2YgaW52YWxpZGF0ZWQgVmlld3MgdG9vayBhIGxvbmcgdGltZS4gQXZvaWQgc2lnbmlmaWNhbnQgd29yayBpbiBWaWV3IG9yIERyYXdhYmxlIGN1c3RvbSBkcmF3aW5nLCBlc3BlY2lhbGx5IGFsbG9jYXRpb25zIG9yIGRyYXdpbmcgdG8gQml0bWFwcy4nLG5ldyBEb2NMaW5rQnVpbGRlcigpLmFkZEFwcFZpZGVvKCdJbnZhbGlkYXRpb25zLCBMYXlvdXRzLCBhbmQgUGVyZm9ybWFuY2UnLCd3ZTZwb1Awa3c2RScpLmFkZEFwcFZpZGVvKCdBdm9pZGluZyBBbGxvY2F0aW9ucyBpbiBvbkRyYXcoKScsJ0hBSzVhY0hRNTNFJykuYnVpbGQoKSk7QW5kcm9pZEF1ZGl0b3IuZ2V0Vmlld0RyYXdBbGVydF89ZnVuY3Rpb24oZnJhbWUpe2xldCBzbGljZT11bmRlZmluZWQ7Zm9yKGNvbnN0IGV2ZW50IG9mIGZyYW1lLmFzc29jaWF0ZWRFdmVudHMpe2lmKGV2ZW50LnRpdGxlPT09J2dldERpc3BsYXlMaXN0J3x8ZXZlbnQudGl0bGU9PT0nUmVjb3JkIFZpZXcjZHJhdygpJyl7c2xpY2U9ZXZlbnQ7YnJlYWs7fX0KLWlmKCFzbGljZXx8Z2V0Q3B1RHVyYXRpb24oc2xpY2UpPDMpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gbmV3IEFsZXJ0KEFuZHJvaWRBdWRpdG9yLnZpZXdEcmF3QWxlcnRJbmZvXyxzbGljZS5zdGFydCxbc2xpY2UsZnJhbWVdLHsnVGltZSBzcGVudCc6bmV3IFNjYWxhcih0aW1lRHVyYXRpb25Jbk1zLGdldENwdUR1cmF0aW9uKHNsaWNlKSl9KTt9O0FuZHJvaWRBdWRpdG9yLmJsb2NraW5nR2NBbGVydEluZm9fPW5ldyBFdmVudEluZm8oJ0Jsb2NraW5nIEdhcmJhZ2UgQ29sbGVjdGlvbicsJ0Jsb2NraW5nIEdDcyBhcmUgY2F1c2VkIGJ5IG9iamVjdCBjaHVybiwgYW5kIG1hZGUgd29yc2UgYnkgaGF2aW5nIGxhcmdlIG51bWJlcnMgb2Ygb2JqZWN0cyBpbiB0aGUgaGVhcC4gQXZvaWQgYWxsb2NhdGluZyBvYmplY3RzIGR1cmluZyBhbmltYXRpb25zL3Njcm9sbGluZywgYW5kIHJlY3ljbGUgQml0bWFwcyB0byBhdm9pZCB0cmlnZ2VyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi4nLG5ldyBEb2NMaW5rQnVpbGRlcigpLmFkZEFwcFZpZGVvKCdHYXJiYWdlIENvbGxlY3Rpb24gaW4gQW5kcm9pZCcsJ3B6Znp6NTBXNVVvJykuYWRkQXBwVmlkZW8oJ0F2b2lkaW5nIEFsbG9jYXRpb25zIGluIG9uRHJhdygpJywnSEFLNWFjSFE1M0UnKS5idWlsZCgpKTtBbmRyb2lkQXVkaXRvci5nZXRCbG9ja2luZ0djQWxlcnRfPWZ1bmN0aW9uKGZyYW1lKXtjb25zdCBldmVudHM9ZnJhbWUuYXNzb2NpYXRlZEV2ZW50cy5maWx0ZXIoZnVuY3Rpb24oZXZlbnQpe3JldHVybiBldmVudC50aXRsZT09PSdEVk0gU3VzcGVuZCd8fGV2ZW50LnRpdGxlPT09J0dDOiBXYWl0IEZvciBDb25jdXJyZW50Jzt9KTtjb25zdCBibG9ja2VkRHVyYXRpb249U3RhdGlzdGljcy5zdW0oZXZlbnRzLGdldER1cmF0aW9uKTtpZihibG9ja2VkRHVyYXRpb248MylyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHN0YXJ0PVN0YXRpc3RpY3MubWluKGV2ZW50cyxnZXRTdGFydCk7ZXZlbnRzLnB1c2goZnJhbWUpO3JldHVybiBuZXcgQWxlcnQoQW5kcm9pZEF1ZGl0b3IuYmxvY2tpbmdHY0FsZXJ0SW5mb18sc3RhcnQsZXZlbnRzLHsnQmxvY2tlZCBkdXJhdGlvbic6bmV3IFNjYWxhcih0aW1lRHVyYXRpb25Jbk1zLGJsb2NrZWREdXJhdGlvbil9KTt9O0FuZHJvaWRBdWRpdG9yLmxvY2tDb250ZW50aW9uQWxlcnRJbmZvXz1uZXcgRXZlbnRJbmZvKCdMb2NrIGNvbnRlbnRpb24nLCdVSSB0aHJlYWQgbG9jayBjb250ZW50aW9uIGlzIGNhdXNlZCB3aGVuIGFub3RoZXIgdGhyZWFkIGhvbGRzIGEgbG9jayB0aGF0IHRoZSBVSSB0aHJlYWQgaXMgdHJ5aW5nIHRvIHVzZS4gVUkgdGhyZWFkIHByb2dyZXNzIGlzIGJsb2NrZWQgdW50aWwgdGhlIGxvY2sgaXMgcmVsZWFzZWQuIEluc3BlY3QgbG9ja2luZyBkb25lIHdpdGhpbiB0aGUgVUkgdGhyZWFkLCBhbmQgZW5zdXJlIGNyaXRpY2FsIHNlY3Rpb25zIGFyZSBzaG9ydC4nKTtBbmRyb2lkQXVkaXRvci5nZXRMb2NrQ29udGVudGlvbkFsZXJ0Xz1mdW5jdGlvbihmcmFtZSl7Y29uc3QgZXZlbnRzPWZyYW1lLmFzc29jaWF0ZWRFdmVudHMuZmlsdGVyKGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4vXkxvY2sgQ29udGVudGlvbiBvbiAvLnRlc3QoZXZlbnQudGl0bGUpO30pO2NvbnN0IGJsb2NrZWREdXJhdGlvbj1TdGF0aXN0aWNzLnN1bShldmVudHMsZ2V0RHVyYXRpb24pO2lmKGJsb2NrZWREdXJhdGlvbjwxKXJldHVybiB1bmRlZmluZWQ7Y29uc3Qgc3RhcnQ9U3RhdGlzdGljcy5taW4oZXZlbnRzLGdldFN0YXJ0KTtldmVudHMucHVzaChmcmFtZSk7cmV0dXJuIG5ldyBBbGVydChBbmRyb2lkQXVkaXRvci5sb2NrQ29udGVudGlvbkFsZXJ0SW5mb18sc3RhcnQsZXZlbnRzLHsnQmxvY2tlZCBkdXJhdGlvbic6bmV3IFNjYWxhcih0aW1lRHVyYXRpb25Jbk1zLGJsb2NrZWREdXJhdGlvbil9KTt9O0FuZHJvaWRBdWRpdG9yLnNjaGVkdWxpbmdBbGVydEluZm9fPW5ldyBFdmVudEluZm8oJ1NjaGVkdWxpbmcgZGVsYXknLCdXb3JrIHRvIHByb2R1Y2UgdGhpcyBmcmFtZSB3YXMgZGVzY2hlZHVsZWQgZm9yIHNldmVyYWwgbWlsbGlzZWNvbmRzLCBjb250cmlidXRpbmcgdG8gamFuay4gRW5zdXJlIHRoYXQgY29kZSBvbiB0aGUgVUkgdGhyZWFkIGRvZXNuXCd0IGJsb2NrIG9uIHdvcmsgYmVpbmcgZG9uZSBvbiBvdGhlciB0aHJlYWRzLCBhbmQgdGhhdCBiYWNrZ3JvdW5kIHRocmVhZHMgKGRvaW5nIGUuZy4gbmV0d29yayBvciBiaXRtYXAgbG9hZGluZykgYXJlIHJ1bm5pbmcgYXQgYW5kcm9pZC5vcy5Qcm9jZXNzI1RIUkVBRF9QUklPUklUWV9CQUNLR1JPVU5EIG9yIGxvd2VyIHNvIHRoZXkgYXJlIGxlc3MgbGlrZWx5IHRvIGludGVycnVwdCB0aGUgVUkgdGhyZWFkLiBUaGVzZSBiYWNrZ3JvdW5kIHRocmVhZHMgc2hvdWxkIHNob3cgdXAgd2l0aCBhIHByaW9yaXR5IG51bWJlciBvZiAxMzAgb3IgaGlnaGVyIGluIHRoZSBzY2hlZHVsaW5nIHNlY3Rpb24gdW5kZXIgdGhlIEtlcm5lbCBwcm9jZXNzLicpO0FuZHJvaWRBdWRpdG9yLmdldFNjaGVkdWxpbmdBbGVydF89ZnVuY3Rpb24oZnJhbWUpe2xldCB0b3RhbER1cmF0aW9uPTA7Y29uc3QgdG90YWxTdGF0cz17fTtmb3IoY29uc3QgdHRyIG9mIGZyYW1lLnRocmVhZFRpbWVSYW5nZXMpe2NvbnN0IHN0YXRzPXR0ci50aHJlYWQuZ2V0U2NoZWR1bGluZ1N0YXRzRm9yUmFuZ2UodHRyLnN0YXJ0LHR0ci5lbmQpO2Zvcihjb25zdFtrZXksdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMoc3RhdHMpKXtpZighKGtleSBpbiB0b3RhbFN0YXRzKSl7dG90YWxTdGF0c1trZXldPTA7fQotdG90YWxTdGF0c1trZXldKz12YWx1ZTt0b3RhbER1cmF0aW9uKz12YWx1ZTt9fQotaWYoIShTQ0hFRFVMSU5HX1NUQVRFLlJVTk5JTkcgaW4gdG90YWxTdGF0cyl8fHRvdGFsRHVyYXRpb249PT0wfHx0b3RhbER1cmF0aW9uLXRvdGFsU3RhdHNbU0NIRURVTElOR19TVEFURS5SVU5OSU5HXTwzKXtyZXR1cm47fQotY29uc3QgYXJncz17fTtmb3IoY29uc3Rba2V5LHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKHRvdGFsU3RhdHMpKXtsZXQgbmV3S2V5PWtleTtpZihrZXk9PT1TQ0hFRFVMSU5HX1NUQVRFLlJVTk5BQkxFKXtuZXdLZXk9J05vdCBzY2hlZHVsZWQsIGJ1dCBydW5uYWJsZSc7fWVsc2UgaWYoa2V5PT09U0NIRURVTElOR19TVEFURS5VTklOVFJfU0xFRVApe25ld0tleT0nQmxvY2tpbmcgSS9PIGRlbGF5Jzt9Ci1hcmdzW25ld0tleV09bmV3IFNjYWxhcih0aW1lRHVyYXRpb25Jbk1zLHZhbHVlKTt9Ci1yZXR1cm4gbmV3IEFsZXJ0KEFuZHJvaWRBdWRpdG9yLnNjaGVkdWxpbmdBbGVydEluZm9fLGZyYW1lLnN0YXJ0LFtmcmFtZV0sYXJncyk7fTtBbmRyb2lkQXVkaXRvci5wcm90b3R5cGU9e19fcHJvdG9fXzpBdWRpdG9yLnByb3RvdHlwZSxyZW5hbWVBbmRTb3J0Xygpe3RoaXMubW9kZWwua2VybmVsLmltcG9ydGFudD1mYWxzZTt0aGlzLm1vZGVsLmdldEFsbFByb2Nlc3NlcygpLmZvckVhY2goZnVuY3Rpb24ocHJvY2Vzcyl7aWYodGhpcy5oZWxwZXIuc3VyZmFjZUZsaW5nZXImJnByb2Nlc3M9PT10aGlzLmhlbHBlci5zdXJmYWNlRmxpbmdlci5wcm9jZXNzKXtpZighcHJvY2Vzcy5uYW1lKXtwcm9jZXNzLm5hbWU9J1N1cmZhY2VGbGluZ2VyJzt9Ci1wcm9jZXNzLnNvcnRJbmRleD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7cHJvY2Vzcy5pbXBvcnRhbnQ9ZmFsc2U7cmV0dXJuO30KLWNvbnN0IHVpVGhyZWFkPXByb2Nlc3MuZ2V0VGhyZWFkKHByb2Nlc3MucGlkKTtpZighcHJvY2Vzcy5uYW1lJiZ1aVRocmVhZCYmdWlUaHJlYWQubmFtZSl7aWYoL15uZHJvaWRcLi8udGVzdCh1aVRocmVhZC5uYW1lKSl7dWlUaHJlYWQubmFtZT0nYScrdWlUaHJlYWQubmFtZTt9Ci1wcm9jZXNzLm5hbWU9dWlUaHJlYWQubmFtZTt1aVRocmVhZC5uYW1lPSdVSSBUaHJlYWQnO30KLXByb2Nlc3Muc29ydEluZGV4PTA7Zm9yKGNvbnN0IHRpZCBpbiBwcm9jZXNzLnRocmVhZHMpe3Byb2Nlc3Muc29ydEluZGV4LT1wcm9jZXNzLnRocmVhZHNbdGlkXS5zbGljZUdyb3VwLnNsaWNlcy5sZW5ndGg7fX0sdGhpcyk7dGhpcy5tb2RlbC5nZXRBbGxUaHJlYWRzKCkuZm9yRWFjaChmdW5jdGlvbih0aHJlYWQpe2lmKHRocmVhZC50aWQ9PT10aHJlYWQucGFyZW50LnBpZCl7dGhyZWFkLnNvcnRJbmRleD0tMzt9Ci1pZih0aHJlYWQubmFtZT09PSdSZW5kZXJUaHJlYWQnKXt0aHJlYWQuc29ydEluZGV4PS0yO30KLWlmKC9eaHd1aVRhc2svLnRlc3QodGhyZWFkLm5hbWUpKXt0aHJlYWQuc29ydEluZGV4PS0xO319KTt9LHB1c2hGcmFtZXNBbmRKdWRnZUphbmtfKCl7bGV0IGJhZEZyYW1lc09ic2VydmVkPTA7bGV0IGZyYW1lc09ic2VydmVkPTA7Y29uc3Qgc3VyZmFjZUZsaW5nZXI9dGhpcy5oZWxwZXIuc3VyZmFjZUZsaW5nZXI7dGhpcy5oZWxwZXIuYXBwcy5mb3JFYWNoKGZ1bmN0aW9uKGFwcCl7YXBwLnByb2Nlc3MuZnJhbWVzPWFwcC5nZXRGcmFtZXMoKTthcHAucHJvY2Vzcy5mcmFtZXMuZm9yRWFjaChmdW5jdGlvbihmcmFtZSl7aWYoZnJhbWUudG90YWxEdXJhdGlvbj5FWFBFQ1RFRF9GUkFNRV9USU1FX01TKjIpe2JhZEZyYW1lc09ic2VydmVkKz0yO2ZyYW1lLnBlcmZDbGFzcz1GUkFNRV9QRVJGX0NMQVNTLlRFUlJJQkxFO31lbHNlIGlmKGZyYW1lLnRvdGFsRHVyYXRpb24+RVhQRUNURURfRlJBTUVfVElNRV9NU3x8ZnJhbWVNaXNzZWREZWFkbGluZShmcmFtZSkpe2JhZEZyYW1lc09ic2VydmVkKys7ZnJhbWUucGVyZkNsYXNzPUZSQU1FX1BFUkZfQ0xBU1MuQkFEO31lbHNle2ZyYW1lLnBlcmZDbGFzcz1GUkFNRV9QRVJGX0NMQVNTLkdPT0Q7fX0pO2ZyYW1lc09ic2VydmVkKz1hcHAucHJvY2Vzcy5mcmFtZXMubGVuZ3RoO30pO2lmKGZyYW1lc09ic2VydmVkKXtjb25zdCBwb3J0aW9uQmFkPWJhZEZyYW1lc09ic2VydmVkL2ZyYW1lc09ic2VydmVkO2lmKHBvcnRpb25CYWQ+MC4zKXt0aGlzLm1vZGVsLmZhdmljb25IdWU9J3JlZCc7fWVsc2UgaWYocG9ydGlvbkJhZD4wLjA1KXt0aGlzLm1vZGVsLmZhdmljb25IdWU9J3llbGxvdyc7fWVsc2V7dGhpcy5tb2RlbC5mYXZpY29uSHVlPSdncmVlbic7fX19LHB1c2hFdmVudEluZm9fKCl7Y29uc3QgYXBwQW5ub3RhdG9yPW5ldyBBcHBBbm5vdGF0b3IoKTt0aGlzLmhlbHBlci5hcHBzLmZvckVhY2goZnVuY3Rpb24oYXBwKXtpZihhcHAudWlUaHJlYWQpe2FwcEFubm90YXRvci5hcHBseUV2ZW50SW5mb3MoYXBwLnVpVGhyZWFkLnNsaWNlR3JvdXApO30KLWlmKGFwcC5yZW5kZXJUaHJlYWQpe2FwcEFubm90YXRvci5hcHBseUV2ZW50SW5mb3MoYXBwLnJlbmRlclRocmVhZC5zbGljZUdyb3VwKTt9fSk7fSxydW5Bbm5vdGF0ZSgpe2lmKCF0aGlzLmhlbHBlcilyZXR1cm47dGhpcy5yZW5hbWVBbmRTb3J0XygpO3RoaXMucHVzaEZyYW1lc0FuZEp1ZGdlSmFua18oKTt0aGlzLnB1c2hFdmVudEluZm9fKCk7dGhpcy5oZWxwZXIuaXRlcmF0ZUltcG9ydGFudFNsaWNlcyhmdW5jdGlvbihzbGljZSl7c2xpY2UuaW1wb3J0YW50PXRydWU7fSk7fSxydW5BdWRpdCgpe2lmKCF0aGlzLmhlbHBlcilyZXR1cm47Y29uc3QgYWxlcnRzPXRoaXMubW9kZWwuYWxlcnRzO3RoaXMuaGVscGVyLmFwcHMuZm9yRWFjaChmdW5jdGlvbihhcHApe2FwcC5nZXRGcmFtZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGZyYW1lKXthbGVydHMucHVzaC5hcHBseShhbGVydHMsQW5kcm9pZEF1ZGl0b3IuZ2V0U2F2ZUxheWVyQWxlcnRzXyhmcmFtZSkpO2lmKGZyYW1lLnBlcmZDbGFzcz09PUZSQU1FX1BFUkZfQ0xBU1MuTkVVVFJBTHx8ZnJhbWUucGVyZkNsYXNzPT09RlJBTUVfUEVSRl9DTEFTUy5HT09EKXtyZXR1cm47fQotbGV0IGFsZXJ0PUFuZHJvaWRBdWRpdG9yLmdldFBhdGhBbGVydF8oZnJhbWUpO2lmKGFsZXJ0KWFsZXJ0cy5wdXNoKGFsZXJ0KTthbGVydD1BbmRyb2lkQXVkaXRvci5nZXRVcGxvYWRBbGVydF8oZnJhbWUpO2lmKGFsZXJ0KWFsZXJ0cy5wdXNoKGFsZXJ0KTthbGVydD1BbmRyb2lkQXVkaXRvci5nZXRMaXN0Vmlld0FsZXJ0XyhmcmFtZSk7aWYoYWxlcnQpYWxlcnRzLnB1c2goYWxlcnQpO2FsZXJ0PUFuZHJvaWRBdWRpdG9yLmdldE1lYXN1cmVMYXlvdXRBbGVydF8oZnJhbWUpO2lmKGFsZXJ0KWFsZXJ0cy5wdXNoKGFsZXJ0KTthbGVydD1BbmRyb2lkQXVkaXRvci5nZXRWaWV3RHJhd0FsZXJ0XyhmcmFtZSk7aWYoYWxlcnQpYWxlcnRzLnB1c2goYWxlcnQpO2FsZXJ0PUFuZHJvaWRBdWRpdG9yLmdldEJsb2NraW5nR2NBbGVydF8oZnJhbWUpO2lmKGFsZXJ0KWFsZXJ0cy5wdXNoKGFsZXJ0KTthbGVydD1BbmRyb2lkQXVkaXRvci5nZXRMb2NrQ29udGVudGlvbkFsZXJ0XyhmcmFtZSk7aWYoYWxlcnQpYWxlcnRzLnB1c2goYWxlcnQpO2FsZXJ0PUFuZHJvaWRBdWRpdG9yLmdldFNjaGVkdWxpbmdBbGVydF8oZnJhbWUpO2lmKGFsZXJ0KWFsZXJ0cy5wdXNoKGFsZXJ0KTt9KTt9LHRoaXMpO3RoaXMuYWRkUmVuZGVyaW5nSW50ZXJhY3Rpb25SZWNvcmRzKCk7dGhpcy5hZGRJbnB1dEludGVyYWN0aW9uUmVjb3JkcygpO30sYWRkUmVuZGVyaW5nSW50ZXJhY3Rpb25SZWNvcmRzKCl7Y29uc3QgZXZlbnRzPVtdO3RoaXMuaGVscGVyLmFwcHMuZm9yRWFjaChmdW5jdGlvbihhcHApe2V2ZW50cy5wdXNoLmFwcGx5KGV2ZW50cyxhcHAuZ2V0QW5pbWF0aW9uQXN5bmNTbGljZXMoKSk7ZXZlbnRzLnB1c2guYXBwbHkoZXZlbnRzLGFwcC5nZXRGcmFtZXMoKSk7fSk7Y29uc3QgbWVyZ2VyRnVuY3Rpb249ZnVuY3Rpb24oZXZlbnRzKXtjb25zdCBpcj1uZXcgdHIubW9kZWwudW0uUmVzcG9uc2VFeHBlY3RhdGlvbih0aGlzLm1vZGVsLCdSZW5kZXJpbmcnLGV2ZW50c1swXS5taW4sZXZlbnRzW2V2ZW50cy5sZW5ndGgtMV0ubWF4LWV2ZW50c1swXS5taW4pO3RoaXMubW9kZWwudXNlck1vZGVsLmV4cGVjdGF0aW9ucy5wdXNoKGlyKTt9LmJpbmQodGhpcyk7dHIuYi5tYXRoLm1lcmdlUmFuZ2VzKHRyLmIubWF0aC5jb252ZXJ0RXZlbnRzVG9SYW5nZXMoZXZlbnRzKSwzMCxtZXJnZXJGdW5jdGlvbik7fSxhZGRJbnB1dEludGVyYWN0aW9uUmVjb3Jkcygpe2NvbnN0IGlucHV0U2FtcGxlcz1bXTt0aGlzLmhlbHBlci5hcHBzLmZvckVhY2goZnVuY3Rpb24oYXBwKXtpbnB1dFNhbXBsZXMucHVzaC5hcHBseShpbnB1dFNhbXBsZXMsYXBwLmdldElucHV0U2FtcGxlcygpKTt9KTtjb25zdCBtZXJnZXJGdW5jdGlvbj1mdW5jdGlvbihldmVudHMpe2NvbnN0IGlyPW5ldyB0ci5tb2RlbC51bS5SZXNwb25zZUV4cGVjdGF0aW9uKHRoaXMubW9kZWwsJ0lucHV0JyxldmVudHNbMF0ubWluLGV2ZW50c1tldmVudHMubGVuZ3RoLTFdLm1heC1ldmVudHNbMF0ubWluKTt0aGlzLm1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnMucHVzaChpcik7fS5iaW5kKHRoaXMpO2NvbnN0IGlucHV0UmFuZ2VzPWlucHV0U2FtcGxlcy5tYXAoZnVuY3Rpb24oc2FtcGxlKXtyZXR1cm4gdHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHNhbXBsZS50aW1lc3RhbXAsc2FtcGxlLnRpbWVzdGFtcCk7fSk7dHIuYi5tYXRoLm1lcmdlUmFuZ2VzKGlucHV0UmFuZ2VzLDMwLG1lcmdlckZ1bmN0aW9uKTt9fTtBdWRpdG9yLnJlZ2lzdGVyKEFuZHJvaWRBdWRpdG9yKTtmdW5jdGlvbiBBcHBBbm5vdGF0b3IoKXt0aGlzLnRpdGxlSW5mb0xvb2t1cD1uZXcgTWFwKCk7dGhpcy50aXRsZVBhcmVudExvb2t1cD1uZXcgTWFwKCk7dGhpcy5idWlsZF8oKTt9Ci1BcHBBbm5vdGF0b3IucHJvdG90eXBlPXtidWlsZF8oKXtjb25zdCByZWdpc3RlckV2ZW50SW5mbz1mdW5jdGlvbihkaWN0KXt0aGlzLnRpdGxlSW5mb0xvb2t1cC5zZXQoZGljdC50aXRsZSxuZXcgRXZlbnRJbmZvKGRpY3QudGl0bGUsZGljdC5kZXNjcmlwdGlvbixkaWN0LmRvY0xpbmtzKSk7aWYoZGljdC5wYXJlbnRzKXt0aGlzLnRpdGxlUGFyZW50TG9va3VwLnNldChkaWN0LnRpdGxlLGRpY3QucGFyZW50cyk7fX0uYmluZCh0aGlzKTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J2luZmxhdGUnLGRlc2NyaXB0aW9uOidDb25zdHJ1Y3RpbmcgYSBWaWV3IGhpZXJhcmNoeSBmcm9tIHByZS1wcm9jZXNzZWQgWE1MIHZpYSBMYXlvdXRJbmZsYXRlciNsYXlvdXQuIFRoaXMgaW5jbHVkZXMgY29uc3RydWN0aW5nIGFsbCBvZiB0aGUgVmlldyBvYmplY3RzIGluIHRoZSBoaWVyYXJjaHksIGFuZCBhcHBseWluZyBzdHlsZWQgYXR0cmlidXRlcy4nfSk7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidvYnRhaW5WaWV3JyxkZXNjcmlwdGlvbjonQWRhcHRlciNnZXRWaWV3KCkgY2FsbGVkIHRvIGJpbmQgY29udGVudCB0byBhIHJlY3ljbGVkIFZpZXcgdGhhdCBpcyBiZWluZyBwcmVzZW50ZWQuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonc2V0dXBMaXN0SXRlbScsZGVzY3JpcHRpb246J0F0dGFjaGVkIGEgbmV3bHktYm91bmQsIHJlY3ljbGVkIFZpZXcgdG8gaXRzIHBhcmVudCBMaXN0Vmlldy4nfSk7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidzZXR1cEdyaWRJdGVtJyxkZXNjcmlwdGlvbjonQXR0YWNoZWQgYSBuZXdseS1ib3VuZCwgcmVjeWNsZWQgVmlldyB0byBpdHMgcGFyZW50IEdyaWRWaWV3Lid9KTtjb25zdCBjaG9yZW9ncmFwaGVyTGlua3M9bmV3IERvY0xpbmtCdWlsZGVyKCkuYWRkRGFjUmVmKCdDaG9yZW9ncmFwaGVyJywnYW5kcm9pZC92aWV3L0Nob3Jlb2dyYXBoZXIuaHRtbCcpLmJ1aWxkKCk7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidDaG9yZW9ncmFwaGVyI2RvRnJhbWUnLGRvY0xpbmtzOmNob3Jlb2dyYXBoZXJMaW5rcyxkZXNjcmlwdGlvbjonQ2hvcmVvZ3JhcGhlciBleGVjdXRlcyBmcmFtZSBjYWxsYmFja3MgZm9yIGlucHV0cywgYW5pbWF0aW9ucywgYW5kIHJlbmRlcmluZyB0cmF2ZXJzYWxzLiBXaGVuIHRoaXMgd29yayBpcyBkb25lLCBhIGZyYW1lIHdpbGwgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J2lucHV0JyxwYXJlbnRzOlsnQ2hvcmVvZ3JhcGhlciNkb0ZyYW1lJ10sZG9jTGlua3M6Y2hvcmVvZ3JhcGhlckxpbmtzLGRlc2NyaXB0aW9uOidJbnB1dCBjYWxsYmFja3MgYXJlIHByb2Nlc3NlZC4gVGhpcyBnZW5lcmFsbHkgZW5jb21wYXNzZXMgZGlzcGF0Y2hpbmcgaW5wdXQgdG8gVmlld3MsIGFzIHdlbGwgYXMgYW55IHdvcmsgdGhlIFZpZXdzIGRvIHRvIHByb2Nlc3MgdGhpcyBpbnB1dC9nZXN0dXJlLid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J2FuaW1hdGlvbicscGFyZW50czpbJ0Nob3Jlb2dyYXBoZXIjZG9GcmFtZSddLGRvY0xpbmtzOmNob3Jlb2dyYXBoZXJMaW5rcyxkZXNjcmlwdGlvbjonQW5pbWF0aW9uIGNhbGxiYWNrcyBhcmUgcHJvY2Vzc2VkLiBUaGlzIGlzIGdlbmVyYWxseSBtaW5pbWFsIHdvcmssIGFzIGFuaW1hdGlvbnMgZGV0ZXJtaW5lIHByb2dyZXNzIGZvciB0aGUgZnJhbWUsIGFuZCBwdXNoIG5ldyBzdGF0ZSB0byBhbmltYXRlZCBvYmplY3RzIChzdWNoIGFzIHNldHRpbmcgVmlldyBwcm9wZXJ0aWVzKS4nfSk7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOid0cmF2ZXJzYWxzJyxwYXJlbnRzOlsnQ2hvcmVvZ3JhcGhlciNkb0ZyYW1lJ10sZG9jTGlua3M6Y2hvcmVvZ3JhcGhlckxpbmtzLGRlc2NyaXB0aW9uOidQcmltYXJ5IGRyYXcgdHJhdmVyc2Fscy4gVGhpcyBpcyB0aGUgcHJpbWFyeSB0cmF2ZXJzYWwgb2YgdGhlIFZpZXcgaGllcmFyY2h5LCBpbmNsdWRpbmcgbGF5b3V0IGFuZCBkcmF3IHBhc3Nlcy4nfSk7Y29uc3QgdHJhdmVyc2FsUGFyZW50cz1bJ0Nob3Jlb2dyYXBoZXIjZG9GcmFtZScsJ3BlcmZvcm1UcmF2ZXJzYWxzJ107Y29uc3QgbGF5b3V0TGlua3M9bmV3IERvY0xpbmtCdWlsZGVyKCkuYWRkRGFjUmVmKCdWaWV3I0xheW91dCcsJ2FuZHJvaWQvdmlldy9WaWV3Lmh0bWwjTGF5b3V0JykuYnVpbGQoKTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J3BlcmZvcm1UcmF2ZXJzYWxzJyxkZXNjcmlwdGlvbjonQSBkcmF3aW5nIHRyYXZlcnNhbCBvZiB0aGUgVmlldyBoaWVyYXJjaHksIGNvbXByaXNlZCBvZiBhbGwgbGF5b3V0IGFuZCBkcmF3aW5nIG5lZWRlZCB0byBwcm9kdWNlIHRoZSBmcmFtZS4nfSk7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidtZWFzdXJlJyxwYXJlbnRzOnRyYXZlcnNhbFBhcmVudHMsZG9jTGlua3M6bGF5b3V0TGlua3MsZGVzY3JpcHRpb246J0ZpcnN0IG9mIHR3byBwaGFzZXMgaW4gdmlldyBoaWVyYXJjaHkgbGF5b3V0LiBWaWV3cyBhcmUgYXNrZWQgdG8gc2l6ZSB0aGVtc2VsdmVzIGFjY29yZGluZyB0byBjb25zdHJhaW50cyBzdXBwbGllZCBieSB0aGVpciBwYXJlbnQuIFNvbWUgVmlld0dyb3VwcyBtYXkgbWVhc3VyZSBhIGNoaWxkIG1vcmUgdGhhbiBvbmNlIHRvIGhlbHAgc2F0aXNmeSB0aGVpciBvd24gY29uc3RyYWludHMuIE5lc3RpbmcgVmlld0dyb3VwcyB0aGF0IG1lYXN1cmUgY2hpbGRyZW4gbW9yZSB0aGFuIG9uY2UgY2FuIGxlYWQgdG8gZXhjZXNzaXZlIGFuZCByZXBlYXRlZCB3b3JrLid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J2xheW91dCcscGFyZW50czp0cmF2ZXJzYWxQYXJlbnRzLGRvY0xpbmtzOmxheW91dExpbmtzLGRlc2NyaXB0aW9uOidTZWNvbmQgb2YgdHdvIHBoYXNlcyBpbiB2aWV3IGhpZXJhcmNoeSBsYXlvdXQsIHJlcG9zaXRpb25pbmcgY29udGVudCBhbmQgY2hpbGQgVmlld3MgaW50byB0aGVpciBuZXcgbG9jYXRpb25zLid9KTtjb25zdCBkcmF3U3RyaW5nPSdEcmF3IHBhc3Mgb3ZlciB0aGUgVmlldyBoaWVyYXJjaHkuIEV2ZXJ5IGludmFsaWRhdGVkIFZpZXcgd2lsbCBoYXZlIGl0cyBkcmF3aW5nIGNvbW1hbmRzIHJlY29yZGVkLiBPbiBBbmRyb2lkIHZlcnNpb25zIHByaW9yIHRvIExvbGxpcG9wLCB0aGlzIHdvdWxkIGFsc28gaW5jbHVkZSB0aGUgaXNzdWluZyBvZiBkcmF3IGNvbW1hbmRzIHRvIHRoZSBHUFUuIFN0YXJ0aW5nIHdpdGggTG9sbGlwb3AsIGl0IG9ubHkgaW5jbHVkZXMgdGhlIHJlY29yZGluZyBvZiBjb21tYW5kcywgYW5kIHN5bmNpbmcgdGhhdCBpbmZvcm1hdGlvbiB0byB0aGUgUmVuZGVyVGhyZWFkLic7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidkcmF3JyxwYXJlbnRzOnRyYXZlcnNhbFBhcmVudHMsZGVzY3JpcHRpb246ZHJhd1N0cmluZ30pO2NvbnN0IHJlY29yZFN0cmluZz0nRXZlcnkgaW52YWxpZGF0ZWQgVmlld1wncyBkcmF3aW5nIGNvbW1hbmRzIGFyZSByZWNvcmRlZC4gRWFjaCB3aWxsIGhhdmUgVmlldyNkcmF3KCkgY2FsbGVkLCBhbmQgaXMgcGFzc2VkIGEgQ2FudmFzIHRoYXQgd2lsbCByZWNvcmQgYW5kIHN0b3JlIGl0cyBkcmF3aW5nIGNvbW1hbmRzIHVudGlsIGl0IGlzIG5leHQgaW52YWxpZGF0ZWQvcmVyZWNvcmRlZC4nO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonZ2V0RGlzcGxheUxpc3QnLHBhcmVudHM6WydkcmF3J10sZGVzY3JpcHRpb246cmVjb3JkU3RyaW5nfSk7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidSZWNvcmQgVmlldyNkcmF3KCknLHBhcmVudHM6WydkcmF3J10sZGVzY3JpcHRpb246cmVjb3JkU3RyaW5nfSk7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidkcmF3RGlzcGxheUxpc3QnLHBhcmVudHM6WydkcmF3J10sZGVzY3JpcHRpb246J0V4ZWN1dGlvbiBvZiByZWNvcmRlZCBkcmF3IGNvbW1hbmRzIHRvIGdlbmVyYXRlIGEgZnJhbWUuIFRoaXMgcmVwcmVzZW50cyB0aGUgYWN0dWFsIGZvcm1hdGlvbiBhbmQgaXNzdWluZyBvZiBkcmF3aW5nIGNvbW1hbmRzIHRvIHRoZSBHUFUuIE9uIEFuZHJvaWQgTCBhbmQgaGlnaGVyIGRldmljZXMsIHRoaXMgd29yayBpcyBkb25lIG9uIGEgZGVkaWNhdGVkIFJlbmRlclRocmVhZCwgaW5zdGVhZCBvZiBvbiB0aGUgVUkgVGhyZWFkLid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J0RyYXdGcmFtZScsZGVzY3JpcHRpb246J1JlbmRlclRocmVhZCBwb3J0aW9uIG9mIHRoZSBzdGFuZGFyZCBVSS9SZW5kZXJUaHJlYWQgc3BsaXQgZnJhbWUuIFRoaXMgcmVwcmVzZW50cyB0aGUgYWN0dWFsIGZvcm1hdGlvbiBhbmQgaXNzdWluZyBvZiBkcmF3aW5nIGNvbW1hbmRzIHRvIHRoZSBHUFUuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonZG9GcmFtZScsZGVzY3JpcHRpb246J1JlbmRlclRocmVhZCBhbmltYXRpb24gZnJhbWUuIFJlcHJlc2VudHMgZHJhd2luZyB3b3JrIGRvbmUgYnkgdGhlIFJlbmRlclRocmVhZCBvbiBhIGZyYW1lIHdoZXJlIHRoZSBVSSB0aHJlYWQgZGlkIG5vdCBwcm9kdWNlIG5ldyBkcmF3aW5nIGNvbnRlbnQuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonc3luY0ZyYW1lU3RhdGUnLGRlc2NyaXB0aW9uOidTeW5jIHN0YWdlIGJldHdlZW4gdGhlIFVJIHRocmVhZCBhbmQgdGhlIFJlbmRlclRocmVhZCwgd2hlcmUgdGhlIFVJIHRocmVhZCBoYW5kcyBvZmYgYSBmcmFtZSAoaW5jbHVkaW5nIGluZm9ybWF0aW9uIGFib3V0IG1vZGlmaWVkIFZpZXdzKS4gVGltZSBpbiB0aGlzIG1ldGhvZCBwcmltYXJpbHkgY29uc2lzdHMgb2YgdXBsb2FkaW5nIG1vZGlmaWVkIEJpdG1hcHMgdG8gdGhlIEdQVS4gQWZ0ZXIgdGhpcyBzeW5jIGlzIGNvbXBsZXRlZCwgdGhlIFVJIHRocmVhZCBpcyB1bmJsb2NrZWQsIGFuZCB0aGUgUmVuZGVyVGhyZWFkIHN0YXJ0cyB0byByZW5kZXIgdGhlIGZyYW1lLid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J2ZsdXNoIGRyYXdpbmcgY29tbWFuZHMnLGRlc2NyaXB0aW9uOidJc3N1aW5nIHRoZSBub3cgY29tcGxldGUgZHJhd2luZyBjb21tYW5kcyB0byB0aGUgR1BVLid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J2VnbFN3YXBCdWZmZXJzJyxkZXNjcmlwdGlvbjonQ29tcGxldGUgR1BVIHJlbmRlcmluZyBvZiB0aGUgZnJhbWUuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonUlYgU2Nyb2xsJyxkZXNjcmlwdGlvbjonUmVjeWNsZXJWaWV3IGlzIGNhbGN1bGF0aW5nIGEgc2Nyb2xsLiBJZiB0aGVyZSBhcmUgdG9vIG1hbnkgb2YgdGhlc2UgaW4gU3lzdHJhY2UsIHNvbWUgVmlld3MgaW5zaWRlIFJlY3ljbGVyVmlldyBtaWdodCBiZSBjYXVzaW5nIGl0LiBUcnkgdG8gYXZvaWQgdXNpbmcgRWRpdFRleHQsIGZvY3VzYWJsZSB2aWV3cyBvciBoYW5kbGUgdGhlbSB3aXRoIGNhcmUuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonUlYgT25MYXlvdXQnLGRlc2NyaXB0aW9uOidPbkxheW91dCBoYXMgYmVlbiBjYWxsZWQgYnkgdGhlIFZpZXcgc3lzdGVtLiBJZiB0aGlzIHNob3dzIHVwIHRvbyBtYW55IHRpbWVzIGluIFN5c3RyYWNlLCBtYWtlIHN1cmUgdGhlIGNoaWxkcmVuIG9mIFJlY3ljbGVyVmlldyBkbyBub3QgdXBkYXRlIHRoZW1zZWx2ZXMgZGlyZWN0bHkuIFRoaXMgd2lsbCBjYXVzZSBhIGZ1bGwgcmUtbGF5b3V0IGJ1dCB3aGVuIGl0IGhhcHBlbnMgdmlhIHRoZSBBZGFwdGVyIG5vdGlmeUl0ZW1DaGFuZ2VkLCBSZWN5Y2xlclZpZXcgY2FuIGF2b2lkIGZ1bGwgbGF5b3V0IGNhbGN1bGF0aW9uLid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J1JWIEZ1bGxJbnZhbGlkYXRlJyxkZXNjcmlwdGlvbjonTm90aWZ5RGF0YVNldENoYW5nZWQgb3IgZXF1YWwgaGFzIGJlZW4gY2FsbGVkLiBJZiB0aGlzIGlzIHRha2luZyBhIGxvbmcgdGltZSwgdHJ5IHNlbmRpbmcgZ3JhbnVsYXIgbm90aWZ5IGFkYXB0ZXIgY2hhbmdlcyBpbnN0ZWFkIG9mIGp1c3QgY2FsbGluZyBub3RpZnlEYXRhU2V0Q2hhbmdlZCBvciBzZXRBZGFwdGVyIC8gc3dhcEFkYXB0ZXIuIEFkZGluZyBzdGFibGUgaWRzIHRvIHlvdXIgYWRhcHRlciBtaWdodCBoZWxwLid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J1JWIFBhcnRpYWxJbnZhbGlkYXRlJyxkZXNjcmlwdGlvbjonUmVjeWNsZXJWaWV3IGlzIHJlYmluZGluZyBhIFZpZXcuIElmIHRoaXMgaXMgdGFraW5nIGEgbG90IG9mIHRpbWUsIGNvbnNpZGVyIG9wdGltaXppbmcgeW91ciBsYXlvdXQgb3IgbWFrZSBzdXJlIHlvdSBhcmUgbm90IGRvaW5nIGV4dHJhIG9wZXJhdGlvbnMgaW4gb25CaW5kVmlld0hvbGRlciBjYWxsLid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J1JWIE9uQmluZFZpZXcnLGRlc2NyaXB0aW9uOidSZWN5Y2xlclZpZXcgaXMgcmViaW5kaW5nIGEgVmlldy4gSWYgdGhpcyBpcyB0YWtpbmcgYSBsb3Qgb2YgdGltZSwgY29uc2lkZXIgb3B0aW1pemluZyB5b3VyIGxheW91dCBvciBtYWtlIHN1cmUgeW91IGFyZSBub3QgZG9pbmcgZXh0cmEgb3BlcmF0aW9ucyBpbiBvbkJpbmRWaWV3SG9sZGVyIGNhbGwuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonUlYgQ3JlYXRlVmlldycsZGVzY3JpcHRpb246J1JlY3ljbGVyVmlldyBpcyBjcmVhdGluZyBhIG5ldyBWaWV3LiBJZiB0b28gbWFueSBvZiB0aGVzZSBhcmUgcHJlc2VudDogMSkgVGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtIGluIFJlY3ljbGluZyAoZS5nLiBjdXN0b20gQW5pbWF0aW9ucyB0aGF0IHNldCB0cmFuc2llbnQgc3RhdGUgYW5kIHByZXZlbnQgcmVjeWNsaW5nIG9yIEl0ZW1BbmltYXRvciBub3QgaW1wbGVtZW50aW5nIHRoZSBjb250cmFjdCBwcm9wZXJseS4gU2VlIEFkYXB0ZXIjb25GYWlsZWRUb1JlY3ljbGVWaWV3KFZpZXdIb2xkZXIpLiAyKSBUaGVyZSBtYXkgYmUgdG9vIG1hbnkgaXRlbSB2aWV3IHR5cGVzLiBUcnkgbWVyZ2luZyB0aGVtLiAzKSBUaGVyZSBtaWdodCBiZSB0b28gbWFueSBpdGVtQ2hhbmdlIGFuaW1hdGlvbnMgYW5kIG5vdCBlbm91Z2ggc3BhY2UgaW4gUmVjeWNsZXJQb29sLiBUcnkgaW5jcmVhc2luZyB5b3VyIHBvb2wgc2l6ZSBhbmQgaXRlbSBjYWNoZSBzaXplLid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J2VnbFN3YXBCdWZmZXJzJyxkZXNjcmlwdGlvbjonVGhlIENQVSBoYXMgZmluaXNoZWQgcHJvZHVjaW5nIGRyYXdpbmcgY29tbWFuZHMsIGFuZCBpcyBmbHVzaGluZyBkcmF3aW5nIHdvcmsgdG8gdGhlIEdQVSwgYW5kIHBvc3RpbmcgdGhhdCBidWZmZXIgdG8gdGhlIGNvbnN1bWVyICh3aGljaCBpcyBvZnRlbiBTdXJmYWNlRmxpbmdlciB3aW5kb3cgY29tcG9zaXRpb24pLiBPbmNlIHRoaXMgaXMgY29tcGxldGVkLCB0aGUgR1BVIGNhbiBwcm9kdWNlIHRoZSBmcmFtZSBjb250ZW50IHdpdGhvdXQgYW55IGludm9sdmVtZW50IGZyb20gdGhlIENQVS4nfSk7fSxhcHBseUV2ZW50SW5mb3NSZWN1cnNpdmVfKHBhcmVudE5hbWVzLHNsaWNlKXtjb25zdCBjaGVja0V4cGVjdGVkUGFyZW50TmFtZXM9ZnVuY3Rpb24oZXhwZWN0ZWRQYXJlbnROYW1lcyl7aWYoIWV4cGVjdGVkUGFyZW50TmFtZXMpcmV0dXJuIHRydWU7cmV0dXJuIGV4cGVjdGVkUGFyZW50TmFtZXMuc29tZShmdW5jdGlvbihuYW1lKXtyZXR1cm4gcGFyZW50TmFtZXMuaGFzKG5hbWUpO30pO307aWYodGhpcy50aXRsZUluZm9Mb29rdXAuaGFzKHNsaWNlLnRpdGxlKSl7aWYoY2hlY2tFeHBlY3RlZFBhcmVudE5hbWVzKHRoaXMudGl0bGVQYXJlbnRMb29rdXAuZ2V0KHNsaWNlLnRpdGxlKSkpe3NsaWNlLmluZm89dGhpcy50aXRsZUluZm9Mb29rdXAuZ2V0KHNsaWNlLnRpdGxlKTt9fQotaWYoc2xpY2Uuc3ViU2xpY2VzLmxlbmd0aD4wKXtpZighcGFyZW50TmFtZXMuaGFzKHNsaWNlLnRpdGxlKSl7cGFyZW50TmFtZXMuc2V0KHNsaWNlLnRpdGxlLDApO30KLXBhcmVudE5hbWVzLnNldChzbGljZS50aXRsZSxwYXJlbnROYW1lcy5nZXQoc2xpY2UudGl0bGUpKzEpO3NsaWNlLnN1YlNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHN1YlNsaWNlKXt0aGlzLmFwcGx5RXZlbnRJbmZvc1JlY3Vyc2l2ZV8ocGFyZW50TmFtZXMsc3ViU2xpY2UpO30sdGhpcyk7cGFyZW50TmFtZXMuc2V0KHNsaWNlLnRpdGxlLHBhcmVudE5hbWVzLmdldChzbGljZS50aXRsZSktMSk7aWYocGFyZW50TmFtZXMuZ2V0KHNsaWNlLnRpdGxlKT09PTApe2RlbGV0ZSBwYXJlbnROYW1lc1tzbGljZS50aXRsZV07fX19LGFwcGx5RXZlbnRJbmZvcyhzbGljZUdyb3VwKXtzbGljZUdyb3VwLnRvcExldmVsU2xpY2VzLmZvckVhY2goZnVuY3Rpb24oc2xpY2Upe3RoaXMuYXBwbHlFdmVudEluZm9zUmVjdXJzaXZlXyhuZXcgTWFwKCksc2xpY2UpO30sdGhpcyk7fX07cmV0dXJue0FuZHJvaWRBdWRpdG9yLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBPYmplY3RTbmFwc2hvdChvYmplY3RJbnN0YW5jZSx0cyxhcmdzKXt0ci5tb2RlbC5FdmVudC5jYWxsKHRoaXMpO3RoaXMub2JqZWN0SW5zdGFuY2U9b2JqZWN0SW5zdGFuY2U7dGhpcy50cz10czt0aGlzLmFyZ3M9YXJnczt9Ci1PYmplY3RTbmFwc2hvdC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5FdmVudC5wcm90b3R5cGUscHJlSW5pdGlhbGl6ZSgpe30saW5pdGlhbGl6ZSgpe30scmVmZXJlbmNlZEF0KGl0ZW0sb2JqZWN0LGZpZWxkKXt9LGFkZEJvdW5kc1RvUmFuZ2UocmFuZ2Upe3JhbmdlLmFkZFZhbHVlKHRoaXMudHMpO30sZ2V0IHVzZXJGcmllbmRseU5hbWUoKXtyZXR1cm4nU25hcHNob3Qgb2YgJyt0aGlzLm9iamVjdEluc3RhbmNlLnVzZXJGcmllbmRseU5hbWUrJyBAICcrCi10ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMuZm9ybWF0KHRoaXMudHMpO319O3RyLm1vZGVsLkV2ZW50UmVnaXN0cnkucmVnaXN0ZXIoT2JqZWN0U25hcHNob3Qse25hbWU6J29iamVjdFNuYXBzaG90JyxwbHVyYWxOYW1lOidvYmplY3RTbmFwc2hvdHMnfSk7cmV0dXJue09iamVjdFNuYXBzaG90LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBPYmplY3RTbmFwc2hvdD10ci5tb2RlbC5PYmplY3RTbmFwc2hvdDtmdW5jdGlvbiBPYmplY3RJbnN0YW5jZShwYXJlbnQsc2NvcGVkSWQsY2F0ZWdvcnksbmFtZSxjcmVhdGlvblRzLG9wdF9iYXNlVHlwZU5hbWUpe3RyLm1vZGVsLkV2ZW50LmNhbGwodGhpcyk7dGhpcy5wYXJlbnQ9cGFyZW50O3RoaXMuc2NvcGVkSWQ9c2NvcGVkSWQ7dGhpcy5jYXRlZ29yeT1jYXRlZ29yeTt0aGlzLmJhc2VUeXBlTmFtZT1vcHRfYmFzZVR5cGVOYW1lP29wdF9iYXNlVHlwZU5hbWU6bmFtZTt0aGlzLm5hbWU9bmFtZTt0aGlzLmNyZWF0aW9uVHM9Y3JlYXRpb25Uczt0aGlzLmNyZWF0aW9uVHNXYXNFeHBsaWNpdD1mYWxzZTt0aGlzLmRlbGV0aW9uVHM9TnVtYmVyLk1BWF9WQUxVRTt0aGlzLmRlbGV0aW9uVHNXYXNFeHBsaWNpdD1mYWxzZTt0aGlzLmNvbG9ySWQ9MDt0aGlzLmJvdW5kcz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7dGhpcy5zbmFwc2hvdHM9W107dGhpcy5oYXNJbXBsaWNpdFNuYXBzaG90cz1mYWxzZTt9Ci1PYmplY3RJbnN0YW5jZS5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5FdmVudC5wcm90b3R5cGUsZ2V0IHR5cGVOYW1lKCl7cmV0dXJuIHRoaXMubmFtZTt9LGFkZEJvdW5kc1RvUmFuZ2UocmFuZ2Upe3JhbmdlLmFkZFJhbmdlKHRoaXMuYm91bmRzKTt9LGFkZFNuYXBzaG90KHRzLGFyZ3Msb3B0X25hbWUsb3B0X2Jhc2VUeXBlTmFtZSl7aWYodHM8dGhpcy5jcmVhdGlvblRzKXt0aHJvdyBuZXcgRXJyb3IoJ1NuYXBzaG90cyBtdXN0IGJlID49IGluc3RhbmNlLmNyZWF0aW9uVHMnKTt9Ci1pZih0cz49dGhpcy5kZWxldGlvblRzKXt0aHJvdyBuZXcgRXJyb3IoJ1NuYXBzaG90cyBjYW5ub3QgYmUgYWRkZWQgYWZ0ZXIgJysnYW4gb2JqZWN0cyBkZWxldGlvbiB0aW1lc3RhbXAuJyk7fQotbGV0IGxhc3RTbmFwc2hvdDtpZih0aGlzLnNuYXBzaG90cy5sZW5ndGg+MCl7bGFzdFNuYXBzaG90PXRoaXMuc25hcHNob3RzW3RoaXMuc25hcHNob3RzLmxlbmd0aC0xXTtpZihsYXN0U25hcHNob3QudHM9PT10cyl7dGhyb3cgbmV3IEVycm9yKCdTbmFwc2hvdHMgYWxyZWFkeSBleGlzdHMgYXQgdGhpcyB0aW1lIScpO30KLWlmKHRzPGxhc3RTbmFwc2hvdC50cyl7dGhyb3cgbmV3IEVycm9yKCdTbmFwc2hvdHMgbXVzdCBiZSBhZGRlZCBpbiBpbmNyZWFzaW5nIHRpbWVzdGFtcCBvcmRlcicpO319Ci1pZihvcHRfbmFtZSYmKHRoaXMubmFtZSE9PW9wdF9uYW1lKSl7aWYoIW9wdF9iYXNlVHlwZU5hbWUpe3Rocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGJhc2UgdHlwZSBuYW1lIGZvciBuYW1lIHVwZGF0ZScpO30KLWlmKHRoaXMuYmFzZVR5cGVOYW1lIT09b3B0X2Jhc2VUeXBlTmFtZSl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXBkYXRlIHR5cGUgbmFtZTogYmFzZSB0eXBlcyBkb250IG1hdGNoJyk7fQotdGhpcy5uYW1lPW9wdF9uYW1lO30KLWNvbnN0IHNuYXBzaG90Q29uc3RydWN0b3I9dHIubW9kZWwuT2JqZWN0U25hcHNob3Quc3ViVHlwZXMuZ2V0Q29uc3RydWN0b3IodGhpcy5jYXRlZ29yeSx0aGlzLm5hbWUpO2NvbnN0IHNuYXBzaG90PW5ldyBzbmFwc2hvdENvbnN0cnVjdG9yKHRoaXMsdHMsYXJncyk7dGhpcy5zbmFwc2hvdHMucHVzaChzbmFwc2hvdCk7cmV0dXJuIHNuYXBzaG90O30sd2FzRGVsZXRlZCh0cyl7bGV0IGxhc3RTbmFwc2hvdDtpZih0aGlzLnNuYXBzaG90cy5sZW5ndGg+MCl7bGFzdFNuYXBzaG90PXRoaXMuc25hcHNob3RzW3RoaXMuc25hcHNob3RzLmxlbmd0aC0xXTtpZihsYXN0U25hcHNob3QudHM+dHMpe3Rocm93IG5ldyBFcnJvcignSW5zdGFuY2UgY2Fubm90IGJlIGRlbGV0ZWQgYXQgdHM9JysKLXRzKycuIEEgc25hcHNob3QgZXhpc3RzIHRoYXQgaXMgb2xkZXIuJyk7fX0KLXRoaXMuZGVsZXRpb25Ucz10czt0aGlzLmRlbGV0aW9uVHNXYXNFeHBsaWNpdD10cnVlO30scHJlSW5pdGlhbGl6ZSgpe2ZvcihsZXQgaT0wO2k8dGhpcy5zbmFwc2hvdHMubGVuZ3RoO2krKyl7dGhpcy5zbmFwc2hvdHNbaV0ucHJlSW5pdGlhbGl6ZSgpO319LGluaXRpYWxpemUoKXtmb3IobGV0IGk9MDtpPHRoaXMuc25hcHNob3RzLmxlbmd0aDtpKyspe3RoaXMuc25hcHNob3RzW2ldLmluaXRpYWxpemUoKTt9fSxpc0FsaXZlQXQodHMpe2lmKHRzPHRoaXMuY3JlYXRpb25UcyYmdGhpcy5jcmVhdGlvblRzV2FzRXhwbGljaXQpe3JldHVybiBmYWxzZTt9Ci1pZih0cz50aGlzLmRlbGV0aW9uVHMpe3JldHVybiBmYWxzZTt9Ci1yZXR1cm4gdHJ1ZTt9LGdldFNuYXBzaG90QXQodHMpe2lmKHRzPHRoaXMuY3JlYXRpb25Ucyl7aWYodGhpcy5jcmVhdGlvblRzV2FzRXhwbGljaXQpe3Rocm93IG5ldyBFcnJvcigndHMgbXVzdCBiZSB3aXRoaW4gbGlmZXRpbWUgb2YgdGhpcyBpbnN0YW5jZScpO30KLXJldHVybiB0aGlzLnNuYXBzaG90c1swXTt9Ci1pZih0cz50aGlzLmRlbGV0aW9uVHMpe3Rocm93IG5ldyBFcnJvcigndHMgbXVzdCBiZSB3aXRoaW4gbGlmZXRpbWUgb2YgdGhpcyBpbnN0YW5jZScpO30KLWNvbnN0IHNuYXBzaG90cz10aGlzLnNuYXBzaG90cztjb25zdCBpPXRyLmIuZmluZEluZGV4SW5Tb3J0ZWRJbnRlcnZhbHMoc25hcHNob3RzLGZ1bmN0aW9uKHNuYXBzaG90KXtyZXR1cm4gc25hcHNob3QudHM7fSxmdW5jdGlvbihzbmFwc2hvdCxpKXtpZihpPT09c25hcHNob3RzLmxlbmd0aC0xKXtyZXR1cm4gc25hcHNob3RzW2ldLm9iamVjdEluc3RhbmNlLmRlbGV0aW9uVHM7fQotcmV0dXJuIHNuYXBzaG90c1tpKzFdLnRzLXNuYXBzaG90c1tpXS50czt9LHRzKTtpZihpPDApe3JldHVybiB0aGlzLnNuYXBzaG90c1swXTt9Ci1pZihpPj10aGlzLnNuYXBzaG90cy5sZW5ndGgpe3JldHVybiB0aGlzLnNuYXBzaG90c1t0aGlzLnNuYXBzaG90cy5sZW5ndGgtMV07fQotcmV0dXJuIHRoaXMuc25hcHNob3RzW2ldO30sdXBkYXRlQm91bmRzKCl7dGhpcy5ib3VuZHMucmVzZXQoKTt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLmNyZWF0aW9uVHMpO2lmKHRoaXMuZGVsZXRpb25UcyE9PU51bWJlci5NQVhfVkFMVUUpe3RoaXMuYm91bmRzLmFkZFZhbHVlKHRoaXMuZGVsZXRpb25Ucyk7fWVsc2UgaWYodGhpcy5zbmFwc2hvdHMubGVuZ3RoPjApe3RoaXMuYm91bmRzLmFkZFZhbHVlKHRoaXMuc25hcHNob3RzW3RoaXMuc25hcHNob3RzLmxlbmd0aC0xXS50cyk7fX0sc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpe3RoaXMuY3JlYXRpb25Ucys9YW1vdW50O2lmKHRoaXMuZGVsZXRpb25UcyE9PU51bWJlci5NQVhfVkFMVUUpe3RoaXMuZGVsZXRpb25Ucys9YW1vdW50O30KLXRoaXMuc25hcHNob3RzLmZvckVhY2goZnVuY3Rpb24oc25hcHNob3Qpe3NuYXBzaG90LnRzKz1hbW91bnQ7fSk7fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybiB0aGlzLnR5cGVOYW1lKycgb2JqZWN0ICcrdGhpcy5zY29wZWRJZDt9fTt0ci5tb2RlbC5FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKE9iamVjdEluc3RhbmNlLHtuYW1lOidvYmplY3RJbnN0YW5jZScscGx1cmFsTmFtZTonb2JqZWN0SW5zdGFuY2VzJ30pO3JldHVybntPYmplY3RJbnN0YW5jZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgT2JqZWN0U25hcHNob3Q9dHIubW9kZWwuT2JqZWN0U25hcHNob3Q7Y29uc3QgT2JqZWN0SW5zdGFuY2U9dHIubW9kZWwuT2JqZWN0SW5zdGFuY2U7ZnVuY3Rpb24gQmxhbWVDb250ZXh0U25hcHNob3QoKXtPYmplY3RTbmFwc2hvdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQotQmxhbWVDb250ZXh0U25hcHNob3QucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0U25hcHNob3QucHJvdG90eXBlLGdldCBwYXJlbnRDb250ZXh0KCl7aWYodGhpcy5hcmdzLnBhcmVudCBpbnN0YW5jZW9mIEJsYW1lQ29udGV4dFNuYXBzaG90KXtyZXR1cm4gdGhpcy5hcmdzLnBhcmVudDt9Ci1yZXR1cm4gdW5kZWZpbmVkO30sZ2V0IHVzZXJGcmllbmRseU5hbWUoKXtyZXR1cm4nQmxhbWVDb250ZXh0Jzt9fTtmdW5jdGlvbiBCbGFtZUNvbnRleHRJbnN0YW5jZSgpe09iamVjdEluc3RhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9Ci1CbGFtZUNvbnRleHRJbnN0YW5jZS5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3RJbnN0YW5jZS5wcm90b3R5cGUsZ2V0IGJsYW1lQ29udGV4dFR5cGUoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO319O3JldHVybntCbGFtZUNvbnRleHRTbmFwc2hvdCxCbGFtZUNvbnRleHRJbnN0YW5jZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgQmxhbWVDb250ZXh0U25hcHNob3Q9dHIuZS5jaHJvbWUuQmxhbWVDb250ZXh0U25hcHNob3Q7Y29uc3QgQmxhbWVDb250ZXh0SW5zdGFuY2U9dHIuZS5jaHJvbWUuQmxhbWVDb250ZXh0SW5zdGFuY2U7ZnVuY3Rpb24gRnJhbWVUcmVlTm9kZVNuYXBzaG90KCl7QmxhbWVDb250ZXh0U25hcHNob3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO30KLUZyYW1lVHJlZU5vZGVTbmFwc2hvdC5wcm90b3R5cGU9e19fcHJvdG9fXzpCbGFtZUNvbnRleHRTbmFwc2hvdC5wcm90b3R5cGUsZ2V0IHJlbmRlckZyYW1lKCl7aWYodGhpcy5hcmdzLnJlbmRlckZyYW1lIGluc3RhbmNlb2YgdHIuZS5jaHJvbWUuUmVuZGVyRnJhbWVTbmFwc2hvdCl7cmV0dXJuIHRoaXMuYXJncy5yZW5kZXJGcmFtZTt9Ci1yZXR1cm4gdW5kZWZpbmVkO30sZ2V0IHVybCgpe3JldHVybiB0aGlzLmFyZ3MudXJsO30sZ2V0IHVzZXJGcmllbmRseU5hbWUoKXtyZXR1cm4nRnJhbWVUcmVlTm9kZSc7fX07dHIubW9kZWwuT2JqZWN0U25hcHNob3Quc3ViVHlwZXMucmVnaXN0ZXIoRnJhbWVUcmVlTm9kZVNuYXBzaG90LHt0eXBlTmFtZTonRnJhbWVUcmVlTm9kZSd9KTtmdW5jdGlvbiBGcmFtZVRyZWVOb2RlSW5zdGFuY2UoKXtCbGFtZUNvbnRleHRJbnN0YW5jZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQotRnJhbWVUcmVlTm9kZUluc3RhbmNlLnByb3RvdHlwZT17X19wcm90b19fOkJsYW1lQ29udGV4dEluc3RhbmNlLnByb3RvdHlwZSxnZXQgYmxhbWVDb250ZXh0VHlwZSgpe3JldHVybidGcmFtZSc7fX07dHIubW9kZWwuT2JqZWN0SW5zdGFuY2Uuc3ViVHlwZXMucmVnaXN0ZXIoRnJhbWVUcmVlTm9kZUluc3RhbmNlLHt0eXBlTmFtZTonRnJhbWVUcmVlTm9kZSd9KTtyZXR1cm57RnJhbWVUcmVlTm9kZVNuYXBzaG90LEZyYW1lVHJlZU5vZGVJbnN0YW5jZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgQmxhbWVDb250ZXh0U25hcHNob3Q9dHIuZS5jaHJvbWUuQmxhbWVDb250ZXh0U25hcHNob3Q7Y29uc3QgQmxhbWVDb250ZXh0SW5zdGFuY2U9dHIuZS5jaHJvbWUuQmxhbWVDb250ZXh0SW5zdGFuY2U7ZnVuY3Rpb24gUmVuZGVyRnJhbWVTbmFwc2hvdCgpe0JsYW1lQ29udGV4dFNuYXBzaG90LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9Ci1SZW5kZXJGcmFtZVNuYXBzaG90LnByb3RvdHlwZT17X19wcm90b19fOkJsYW1lQ29udGV4dFNuYXBzaG90LnByb3RvdHlwZSxyZWZlcmVuY2VkQXQoaXRlbSxvYmplY3QsZmllbGQpe2lmKGl0ZW0gaW5zdGFuY2VvZiB0ci5lLmNocm9tZS5GcmFtZVRyZWVOb2RlU25hcHNob3QmJm9iamVjdD09PWl0ZW0uYXJncyYmZmllbGQ9PT0ncmVuZGVyRnJhbWUnKXt0aGlzLmFyZ3MuZnJhbWVUcmVlTm9kZT1pdGVtO319LGdldCBmcmFtZVRyZWVOb2RlKCl7aWYodGhpcy5hcmdzLmZyYW1lVHJlZU5vZGUgaW5zdGFuY2VvZgotdHIuZS5jaHJvbWUuRnJhbWVUcmVlTm9kZVNuYXBzaG90KXtyZXR1cm4gdGhpcy5hcmdzLmZyYW1lVHJlZU5vZGU7fQotcmV0dXJuIHVuZGVmaW5lZDt9LGdldCB1cmwoKXtpZih0aGlzLmZyYW1lVHJlZU5vZGUpe3JldHVybiB0aGlzLmZyYW1lVHJlZU5vZGUudXJsO30KLXJldHVybiB1bmRlZmluZWQ7fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybidSZW5kZXJGcmFtZSc7fX07dHIubW9kZWwuT2JqZWN0U25hcHNob3Quc3ViVHlwZXMucmVnaXN0ZXIoUmVuZGVyRnJhbWVTbmFwc2hvdCx7dHlwZU5hbWU6J1JlbmRlckZyYW1lJ30pO2Z1bmN0aW9uIFJlbmRlckZyYW1lSW5zdGFuY2UoKXtCbGFtZUNvbnRleHRJbnN0YW5jZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQotUmVuZGVyRnJhbWVJbnN0YW5jZS5wcm90b3R5cGU9e19fcHJvdG9fXzpCbGFtZUNvbnRleHRJbnN0YW5jZS5wcm90b3R5cGUsZ2V0IGJsYW1lQ29udGV4dFR5cGUoKXtyZXR1cm4nRnJhbWUnO319O3RyLm1vZGVsLk9iamVjdEluc3RhbmNlLnN1YlR5cGVzLnJlZ2lzdGVyKFJlbmRlckZyYW1lSW5zdGFuY2Use3R5cGVOYW1lOidSZW5kZXJGcmFtZSd9KTtyZXR1cm57UmVuZGVyRnJhbWVTbmFwc2hvdCxSZW5kZXJGcmFtZUluc3RhbmNlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmNocm9tZScsZnVuY3Rpb24oKXtjb25zdCBCbGFtZUNvbnRleHRTbmFwc2hvdD10ci5lLmNocm9tZS5CbGFtZUNvbnRleHRTbmFwc2hvdDtjb25zdCBCbGFtZUNvbnRleHRJbnN0YW5jZT10ci5lLmNocm9tZS5CbGFtZUNvbnRleHRJbnN0YW5jZTtmdW5jdGlvbiBUb3BMZXZlbFNuYXBzaG90KCl7QmxhbWVDb250ZXh0U25hcHNob3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO30KLVRvcExldmVsU25hcHNob3QucHJvdG90eXBlPXtfX3Byb3RvX186QmxhbWVDb250ZXh0U25hcHNob3QucHJvdG90eXBlLGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ1RvcExldmVsJzt9fTt0ci5tb2RlbC5PYmplY3RTbmFwc2hvdC5zdWJUeXBlcy5yZWdpc3RlcihUb3BMZXZlbFNuYXBzaG90LHt0eXBlTmFtZTonVG9wTGV2ZWwnfSk7ZnVuY3Rpb24gVG9wTGV2ZWxJbnN0YW5jZSgpe0JsYW1lQ29udGV4dEluc3RhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9Ci1Ub3BMZXZlbEluc3RhbmNlLnByb3RvdHlwZT17X19wcm90b19fOkJsYW1lQ29udGV4dEluc3RhbmNlLnByb3RvdHlwZSxnZXQgYmxhbWVDb250ZXh0VHlwZSgpe3JldHVybidUb3BMZXZlbCc7fX07dHIubW9kZWwuT2JqZWN0SW5zdGFuY2Uuc3ViVHlwZXMucmVnaXN0ZXIoVG9wTGV2ZWxJbnN0YW5jZSx7dHlwZU5hbWU6J1RvcExldmVsJ30pO3JldHVybntUb3BMZXZlbFNuYXBzaG90LFRvcExldmVsSW5zdGFuY2UsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEFzeW5jU2xpY2UoY2F0ZWdvcnksdGl0bGUsY29sb3JJZCxzdGFydCxhcmdzLGR1cmF0aW9uLG9wdF9pc1RvcExldmVsLG9wdF9jcHVTdGFydCxvcHRfY3B1RHVyYXRpb24sb3B0X2FyZ3NTdHJpcHBlZCl7dHIubW9kZWwuVGltZWRFdmVudC5jYWxsKHRoaXMsc3RhcnQpO3RoaXMuY2F0ZWdvcnk9Y2F0ZWdvcnl8fCcnO3RoaXMub3JpZ2luYWxUaXRsZT10aXRsZTt0aGlzLnRpdGxlPXRpdGxlO3RoaXMuY29sb3JJZD1jb2xvcklkO3RoaXMuYXJncz1hcmdzO3RoaXMuc3RhcnRTdGFja0ZyYW1lPXVuZGVmaW5lZDt0aGlzLmVuZFN0YWNrRnJhbWU9dW5kZWZpbmVkO3RoaXMuZGlkTm90RmluaXNoPWZhbHNlO3RoaXMuaW1wb3J0YW50PWZhbHNlO3RoaXMuc3ViU2xpY2VzPVtdO3RoaXMucGFyZW50Q29udGFpbmVyXz11bmRlZmluZWQ7dGhpcy5pZD11bmRlZmluZWQ7dGhpcy5zdGFydFRocmVhZD11bmRlZmluZWQ7dGhpcy5lbmRUaHJlYWQ9dW5kZWZpbmVkO3RoaXMuY3B1U3RhcnQ9dW5kZWZpbmVkO3RoaXMuY3B1RHVyYXRpb249dW5kZWZpbmVkO3RoaXMuYXJnc1N0cmlwcGVkPWZhbHNlO3RoaXMuc3RhcnRTdGFja0ZyYW1lPXVuZGVmaW5lZDt0aGlzLmVuZFN0YWNrRnJhbWU9dW5kZWZpbmVkO3RoaXMuZHVyYXRpb249ZHVyYXRpb247dGhpcy5pc1RvcExldmVsPShvcHRfaXNUb3BMZXZlbD09PXRydWUpO2lmKG9wdF9jcHVTdGFydCE9PXVuZGVmaW5lZCl7dGhpcy5jcHVTdGFydD1vcHRfY3B1U3RhcnQ7fQotaWYob3B0X2NwdUR1cmF0aW9uIT09dW5kZWZpbmVkKXt0aGlzLmNwdUR1cmF0aW9uPW9wdF9jcHVEdXJhdGlvbjt9Ci1pZihvcHRfYXJnc1N0cmlwcGVkIT09dW5kZWZpbmVkKXt0aGlzLmFyZ3NTdHJpcHBlZD1vcHRfYXJnc1N0cmlwcGVkO319Ci1Bc3luY1NsaWNlLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLlRpbWVkRXZlbnQucHJvdG90eXBlLGdldCBhbmFseXNpc1R5cGVOYW1lKCl7cmV0dXJuIHRoaXMudGl0bGU7fSxnZXQgcGFyZW50Q29udGFpbmVyKCl7cmV0dXJuIHRoaXMucGFyZW50Q29udGFpbmVyXzt9LHNldCBwYXJlbnRDb250YWluZXIocGFyZW50Q29udGFpbmVyKXt0aGlzLnBhcmVudENvbnRhaW5lcl89cGFyZW50Q29udGFpbmVyO2ZvcihsZXQgaT0wO2k8dGhpcy5zdWJTbGljZXMubGVuZ3RoO2krKyl7Y29uc3Qgc3ViU2xpY2U9dGhpcy5zdWJTbGljZXNbaV07aWYoc3ViU2xpY2UucGFyZW50Q29udGFpbmVyPT09dW5kZWZpbmVkKXtzdWJTbGljZS5wYXJlbnRDb250YWluZXI9cGFyZW50Q29udGFpbmVyO319fSxnZXQgdmlld1N1Ykdyb3VwVGl0bGUoKXtyZXR1cm4gdGhpcy50aXRsZTt9LGdldCB2aWV3U3ViR3JvdXBHcm91cGluZ0tleSgpe3JldHVybiB1bmRlZmluZWQ7fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybidBc3luYyBzbGljZSAnK3RoaXMudGl0bGUrJyBhdCAnKwotdHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLmZvcm1hdCh0aGlzLnN0YXJ0KTt9LGdldCBzdGFibGVJZCgpe2NvbnN0IHBhcmVudEFzeW5jU2xpY2VHcm91cD10aGlzLnBhcmVudENvbnRhaW5lci5hc3luY1NsaWNlR3JvdXA7cmV0dXJuIHBhcmVudEFzeW5jU2xpY2VHcm91cC5zdGFibGVJZCsnLicrCi1wYXJlbnRBc3luY1NsaWNlR3JvdXAuc2xpY2VzLmluZGV4T2YodGhpcyk7fSwqZmluZFRvcG1vc3RTbGljZXNSZWxhdGl2ZVRvVGhpc1NsaWNlKGV2ZW50UHJlZGljYXRlLG9wdF90aGlzKXtpZihldmVudFByZWRpY2F0ZSh0aGlzKSl7eWllbGQgdGhpcztyZXR1cm47fQotZm9yKGNvbnN0IHMgb2YgdGhpcy5zdWJTbGljZXMpe3lpZWxkKnMuZmluZFRvcG1vc3RTbGljZXNSZWxhdGl2ZVRvVGhpc1NsaWNlKGV2ZW50UHJlZGljYXRlKTt9fSxmaW5kRGVzY2VuZGVudFNsaWNlKHRhcmdldFRpdGxlKXtpZighdGhpcy5zdWJTbGljZXMpcmV0dXJuIHVuZGVmaW5lZDtmb3IobGV0IGk9MDtpPHRoaXMuc3ViU2xpY2VzLmxlbmd0aDtpKyspe2lmKHRoaXMuc3ViU2xpY2VzW2ldLnRpdGxlPT09dGFyZ2V0VGl0bGUpe3JldHVybiB0aGlzLnN1YlNsaWNlc1tpXTt9Ci1jb25zdCBzbGljZT10aGlzLnN1YlNsaWNlc1tpXS5maW5kRGVzY2VuZGVudFNsaWNlKHRhcmdldFRpdGxlKTtpZihzbGljZSlyZXR1cm4gc2xpY2U7fQotcmV0dXJuIHVuZGVmaW5lZDt9LCplbnVtZXJhdGVBbGxEZXNjZW5kZW50cygpe2Zvcihjb25zdCBzbGljZSBvZiB0aGlzLnN1YlNsaWNlcyl7eWllbGQgc2xpY2U7fQotZm9yKGNvbnN0IHNsaWNlIG9mIHRoaXMuc3ViU2xpY2VzKXtpZihzbGljZS5lbnVtZXJhdGVBbGxEZXNjZW5kZW50cyE9PXVuZGVmaW5lZCl7eWllbGQqc2xpY2UuZW51bWVyYXRlQWxsRGVzY2VuZGVudHMoKTt9fX0sY29tcGFyZVRvKHRoYXQpe3JldHVybiB0aGlzLnRpdGxlLmxvY2FsZUNvbXBhcmUodGhhdC50aXRsZSk7fX07dHIubW9kZWwuRXZlbnRSZWdpc3RyeS5yZWdpc3RlcihBc3luY1NsaWNlLHtuYW1lOidhc3luY1NsaWNlJyxwbHVyYWxOYW1lOidhc3luY1NsaWNlcyd9KTtyZXR1cm57QXN5bmNTbGljZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5ibGluaycsZnVuY3Rpb24oKXtjbGFzcyBCbGlua1NjaGVkdWxlckFzeW5jU2xpY2UgZXh0ZW5kcyB0ci5tb2RlbC5Bc3luY1NsaWNle2dldCB2aWV3U3ViR3JvdXBHcm91cGluZ0tleSgpe2lmKHRoaXMudGl0bGUuc3RhcnRzV2l0aCgnV2ViRnJhbWVTY2hlZHVsZXIuJykpe3JldHVybidXZWJGcmFtZScrdGhpcy5pZDt9Ci1yZXR1cm4gdW5kZWZpbmVkO319Ci10ci5tb2RlbC5Bc3luY1NsaWNlLnN1YlR5cGVzLnJlZ2lzdGVyKEJsaW5rU2NoZWR1bGVyQXN5bmNTbGljZSx7Y2F0ZWdvcnlQYXJ0czpbJ3JlbmRlcmVyLnNjaGVkdWxlcicsJ2Rpc2FibGVkLWJ5LWRlZmF1bHQtcmVuZGVyZXIuc2NoZWR1bGVyJyxdfSk7cmV0dXJue0JsaW5rU2NoZWR1bGVyQXN5bmNTbGljZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwuaGVscGVycycsZnVuY3Rpb24oKXtjb25zdCBNQUlOX0ZSQU1FVElNRV9UWVBFPSdtYWluX2ZyYW1ldGltZV90eXBlJztjb25zdCBJTVBMX0ZSQU1FVElNRV9UWVBFPSdpbXBsX2ZyYW1ldGltZV90eXBlJztjb25zdCBNQUlOX1JFTkRFUklOR19TVEFUUz0nQmVuY2htYXJrSW5zdHJ1bWVudGF0aW9uOjpNYWluVGhyZWFkUmVuZGVyaW5nU3RhdHMnO2NvbnN0IElNUExfUkVOREVSSU5HX1NUQVRTPSdCZW5jaG1hcmtJbnN0cnVtZW50YXRpb246OkltcGxUaHJlYWRSZW5kZXJpbmdTdGF0cyc7ZnVuY3Rpb24gZ2V0U2xpY2VzSW50ZXJzZWN0aW5nUmFuZ2UocmFuZ2VPZkludGVyZXN0LHNsaWNlcyl7Y29uc3Qgc2xpY2VzSW5GaWx0ZXJSYW5nZT1bXTtmb3IobGV0IGk9MDtpPHNsaWNlcy5sZW5ndGg7aSsrKXtjb25zdCBzbGljZT1zbGljZXNbaV07aWYocmFuZ2VPZkludGVyZXN0LmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHNsaWNlLnN0YXJ0LHNsaWNlLmVuZCkpe3NsaWNlc0luRmlsdGVyUmFuZ2UucHVzaChzbGljZSk7fX0KLXJldHVybiBzbGljZXNJbkZpbHRlclJhbmdlO30KLWZ1bmN0aW9uIENocm9tZVByb2Nlc3NIZWxwZXIobW9kZWxIZWxwZXIscHJvY2Vzcyl7dGhpcy5tb2RlbEhlbHBlcj1tb2RlbEhlbHBlcjt0aGlzLnByb2Nlc3M9cHJvY2Vzczt0aGlzLnRlbGVtZXRyeUludGVybmFsUmFuZ2VzXz11bmRlZmluZWQ7fQotQ2hyb21lUHJvY2Vzc0hlbHBlci5wcm90b3R5cGU9e2dldCBwaWQoKXtyZXR1cm4gdGhpcy5wcm9jZXNzLnBpZDt9LGlzVGVsZW1ldHJ5SW50ZXJuYWxFdmVudChzbGljZSl7aWYodGhpcy50ZWxlbWV0cnlJbnRlcm5hbFJhbmdlc189PT11bmRlZmluZWQpe3RoaXMuZmluZFRlbGVtZXRyeUludGVybmFsUmFuZ2VzXygpO30KLWZvcihjb25zdCByYW5nZSBvZiB0aGlzLnRlbGVtZXRyeUludGVybmFsUmFuZ2VzXyl7aWYocmFuZ2UuY29udGFpbnNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHNsaWNlLnN0YXJ0LHNsaWNlLmVuZCkpe3JldHVybiB0cnVlO319Ci1yZXR1cm4gZmFsc2U7fSxmaW5kVGVsZW1ldHJ5SW50ZXJuYWxSYW5nZXNfKCl7dGhpcy50ZWxlbWV0cnlJbnRlcm5hbFJhbmdlc189W107bGV0IHN0YXJ0PTA7Zm9yKGNvbnN0IHRocmVhZCBvZiBPYmplY3QudmFsdWVzKHRoaXMucHJvY2Vzcy50aHJlYWRzKSl7Zm9yKGNvbnN0IHNsaWNlIG9mIHRocmVhZC5hc3luY1NsaWNlR3JvdXAuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZigvXnRlbGVtZXRyeVwuaW50ZXJuYWxcLi4qXC5zdGFydCQvLnRlc3Qoc2xpY2UudGl0bGUpKXtzdGFydD1zbGljZS5zdGFydDt9ZWxzZSBpZigvXnRlbGVtZXRyeVwuaW50ZXJuYWxcLi4qXC5lbmQkLy50ZXN0KHNsaWNlLnRpdGxlKSYmc3RhcnQhPT11bmRlZmluZWQpe3RoaXMudGVsZW1ldHJ5SW50ZXJuYWxSYW5nZXNfLnB1c2godHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHN0YXJ0LHNsaWNlLmVuZCkpO3N0YXJ0PXVuZGVmaW5lZDt9fX19LGdldEZyYW1lRXZlbnRzSW5SYW5nZShmcmFtZXRpbWVUeXBlLHJhbmdlKXtjb25zdCB0aXRsZVRvR2V0PShmcmFtZXRpbWVUeXBlPT09TUFJTl9GUkFNRVRJTUVfVFlQRT9NQUlOX1JFTkRFUklOR19TVEFUUzpJTVBMX1JFTkRFUklOR19TVEFUUyk7Y29uc3QgZnJhbWVFdmVudHM9W107Zm9yKGNvbnN0IGV2ZW50IG9mIHRoaXMucHJvY2Vzcy5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKGV2ZW50LnRpdGxlPT09dGl0bGVUb0dldCl7aWYocmFuZ2UuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUoZXZlbnQuc3RhcnQsZXZlbnQuZW5kKSl7ZnJhbWVFdmVudHMucHVzaChldmVudCk7fX19Ci1mcmFtZUV2ZW50cy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnQtYi5zdGFydDt9KTtyZXR1cm4gZnJhbWVFdmVudHM7fX07ZnVuY3Rpb24gZ2V0RnJhbWV0aW1lRGF0YUZyb21FdmVudHMoZnJhbWVFdmVudHMpe2NvbnN0IGZyYW1ldGltZURhdGE9W107Zm9yKGxldCBpPTE7aTxmcmFtZUV2ZW50cy5sZW5ndGg7aSsrKXtjb25zdCBkaWZmPWZyYW1lRXZlbnRzW2ldLnN0YXJ0LWZyYW1lRXZlbnRzW2ktMV0uc3RhcnQ7ZnJhbWV0aW1lRGF0YS5wdXNoKHsneCc6ZnJhbWVFdmVudHNbaV0uc3RhcnQsJ2ZyYW1ldGltZSc6ZGlmZn0pO30KLXJldHVybiBmcmFtZXRpbWVEYXRhO30KLXJldHVybntDaHJvbWVQcm9jZXNzSGVscGVyLE1BSU5fRlJBTUVUSU1FX1RZUEUsSU1QTF9GUkFNRVRJTUVfVFlQRSxNQUlOX1JFTkRFUklOR19TVEFUUyxJTVBMX1JFTkRFUklOR19TVEFUUyxnZXRTbGljZXNJbnRlcnNlY3RpbmdSYW5nZSxnZXRGcmFtZXRpbWVEYXRhRnJvbUV2ZW50cyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwuaGVscGVycycsZnVuY3Rpb24oKXtmdW5jdGlvbiBDaHJvbWVCcm93c2VySGVscGVyKG1vZGVsSGVscGVyLHByb2Nlc3Mpe3RyLm1vZGVsLmhlbHBlcnMuQ2hyb21lUHJvY2Vzc0hlbHBlci5jYWxsKHRoaXMsbW9kZWxIZWxwZXIscHJvY2Vzcyk7dGhpcy5tYWluVGhyZWFkXz1wcm9jZXNzLmZpbmRBdE1vc3RPbmVUaHJlYWROYW1lZCgnQ3JCcm93c2VyTWFpbicpO2lmKCFwcm9jZXNzLm5hbWUpe3Byb2Nlc3MubmFtZT1DaHJvbWVCcm93c2VySGVscGVyLlBST0NFU1NfTkFNRTt9fQotQ2hyb21lQnJvd3NlckhlbHBlci5QUk9DRVNTX05BTUU9J0Jyb3dzZXInO0Nocm9tZUJyb3dzZXJIZWxwZXIuaXNCcm93c2VyUHJvY2Vzcz1mdW5jdGlvbihwcm9jZXNzKXtyZXR1cm4hIXByb2Nlc3MuZmluZEF0TW9zdE9uZVRocmVhZE5hbWVkKCdDckJyb3dzZXJNYWluJyk7fTtDaHJvbWVCcm93c2VySGVscGVyLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lUHJvY2Vzc0hlbHBlci5wcm90b3R5cGUsZ2V0IGJyb3dzZXJOYW1lKCl7Y29uc3QgaGFzSW5Qcm9jZXNzUmVuZGVyZXJUaHJlYWQ9dGhpcy5wcm9jZXNzLmZpbmRBbGxUaHJlYWRzTmFtZWQoJ0Nocm9tZV9JblByb2NSZW5kZXJlclRocmVhZCcpLmxlbmd0aD4wO3JldHVybiBoYXNJblByb2Nlc3NSZW5kZXJlclRocmVhZD8nd2Vidmlldyc6J2Nocm9tZSc7fSxnZXQgbWFpblRocmVhZCgpe3JldHVybiB0aGlzLm1haW5UaHJlYWRfO30sZ2V0IHJlbmRlcmVySGVscGVycygpe3JldHVybiB0aGlzLm1vZGVsSGVscGVyLnJlbmRlcmVySGVscGVyczt9LGdldExvYWRpbmdFdmVudHNJblJhbmdlKHJhbmdlT2ZJbnRlcmVzdCl7cmV0dXJuIHRoaXMuZ2V0QWxsQXN5bmNTbGljZXNNYXRjaGluZyhmdW5jdGlvbihzbGljZSl7cmV0dXJuIHNsaWNlLnRpdGxlLmluZGV4T2YoJ1dlYkNvbnRlbnRzSW1wbCBMb2FkaW5nJyk9PT0wJiZyYW5nZU9mSW50ZXJlc3QuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUoc2xpY2Uuc3RhcnQsc2xpY2UuZW5kKTt9KTt9LGdldENvbW1pdFByb3Zpc2lvbmFsTG9hZEV2ZW50c0luUmFuZ2UocmFuZ2VPZkludGVyZXN0KXtyZXR1cm4gdGhpcy5nZXRBbGxBc3luY1NsaWNlc01hdGNoaW5nKGZ1bmN0aW9uKHNsaWNlKXtyZXR1cm4gc2xpY2UudGl0bGU9PT0nUmVuZGVyRnJhbWVJbXBsOjpkaWRDb21taXRQcm92aXNpb25hbExvYWQnJiZyYW5nZU9mSW50ZXJlc3QuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUoc2xpY2Uuc3RhcnQsc2xpY2UuZW5kKTt9KTt9LGdldCBoYXNMYXRlbmN5RXZlbnRzKCl7bGV0IGhhc0xhdGVuY3k9ZmFsc2U7Zm9yKGNvbnN0IHRocmVhZCBvZiB0aGlzLm1vZGVsSGVscGVyLm1vZGVsLmdldEFsbFRocmVhZHMoKSl7Zm9yKGNvbnN0IGV2ZW50IG9mIHRocmVhZC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKCFldmVudC5pc1RvcExldmVsKWNvbnRpbnVlO2lmKCEoZXZlbnQgaW5zdGFuY2VvZiB0ci5lLmNjLklucHV0TGF0ZW5jeUFzeW5jU2xpY2UpKXtjb250aW51ZTt9Ci1oYXNMYXRlbmN5PXRydWU7fX0KLXJldHVybiBoYXNMYXRlbmN5O30sZ2V0TGF0ZW5jeUV2ZW50c0luUmFuZ2UocmFuZ2VPZkludGVyZXN0KXtyZXR1cm4gdGhpcy5nZXRBbGxBc3luY1NsaWNlc01hdGNoaW5nKGZ1bmN0aW9uKHNsaWNlKXtyZXR1cm4oc2xpY2UudGl0bGUuaW5kZXhPZignSW5wdXRMYXRlbmN5Jyk9PT0wKSYmcmFuZ2VPZkludGVyZXN0LmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHNsaWNlLnN0YXJ0LHNsaWNlLmVuZCk7fSk7fSxnZXRBbGxBc3luY1NsaWNlc01hdGNoaW5nKHByZWQsb3B0X3RoaXMpe2NvbnN0IGV2ZW50cz1bXTt0aGlzLml0ZXJBbGxUaHJlYWRzKGZ1bmN0aW9uKHRocmVhZCl7Zm9yKGNvbnN0IHNsaWNlIG9mIHRocmVhZC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKHByZWQuY2FsbChvcHRfdGhpcyxzbGljZSkpe2V2ZW50cy5wdXNoKHNsaWNlKTt9fX0pO3JldHVybiBldmVudHM7fSxpdGVyQWxsVGhyZWFkcyhmdW5jLG9wdF90aGlzKXtmb3IoY29uc3QgdGhyZWFkIG9mIE9iamVjdC52YWx1ZXModGhpcy5wcm9jZXNzLnRocmVhZHMpKXtmdW5jLmNhbGwob3B0X3RoaXMsdGhyZWFkKTt9Ci1mb3IoY29uc3QgcmVuZGVyZXJIZWxwZXIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlbmRlcmVySGVscGVycykpe2NvbnN0IHJlbmRlcmVyUHJvY2Vzcz1yZW5kZXJlckhlbHBlci5wcm9jZXNzO2Zvcihjb25zdCB0aHJlYWQgb2YgT2JqZWN0LnZhbHVlcyhyZW5kZXJlclByb2Nlc3MudGhyZWFkcykpe2Z1bmMuY2FsbChvcHRfdGhpcyx0aHJlYWQpO319fX07cmV0dXJue0Nocm9tZUJyb3dzZXJIZWxwZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLmhlbHBlcnMnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQ2hyb21lR3B1SGVscGVyKG1vZGVsSGVscGVyLHByb2Nlc3Mpe3RyLm1vZGVsLmhlbHBlcnMuQ2hyb21lUHJvY2Vzc0hlbHBlci5jYWxsKHRoaXMsbW9kZWxIZWxwZXIscHJvY2Vzcyk7aWYoIXByb2Nlc3MubmFtZSl7cHJvY2Vzcy5uYW1lPUNocm9tZUdwdUhlbHBlci5QUk9DRVNTX05BTUU7fX0KLUNocm9tZUdwdUhlbHBlci5QUk9DRVNTX05BTUU9J0dQVSBQcm9jZXNzJztDaHJvbWVHcHVIZWxwZXIuaXNHcHVQcm9jZXNzPWZ1bmN0aW9uKHByb2Nlc3Mpe2lmKHByb2Nlc3MuZmluZEF0TW9zdE9uZVRocmVhZE5hbWVkKCdDckJyb3dzZXJNYWluJyl8fHByb2Nlc3MuZmluZEF0TW9zdE9uZVRocmVhZE5hbWVkKCdDclJlbmRlcmVyTWFpbicpKXtyZXR1cm4gZmFsc2U7fQotcmV0dXJuIHByb2Nlc3MuZmluZEFsbFRocmVhZHNOYW1lZCgnQ3JHcHVNYWluJykubGVuZ3RoPjA7fTtDaHJvbWVHcHVIZWxwZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuaGVscGVycy5DaHJvbWVQcm9jZXNzSGVscGVyLnByb3RvdHlwZX07cmV0dXJue0Nocm9tZUdwdUhlbHBlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwuaGVscGVycycsZnVuY3Rpb24oKXtjb25zdCBORVRfQ0FURUdPUklFUz1uZXcgU2V0KFsnbmV0JywnbmV0bG9nJywnZGlzYWJsZWQtYnktZGVmYXVsdC1uZXRsb2cnLCdkaXNhYmxlZC1ieS1kZWZhdWx0LW5ldHdvcmsnXSk7Y2xhc3MgQ2hyb21lVGhyZWFkSGVscGVye2NvbnN0cnVjdG9yKHRocmVhZCl7dGhpcy50aHJlYWQ9dGhyZWFkO30KLWdldE5ldHdvcmtFdmVudHMoKXtjb25zdCBuZXR3b3JrRXZlbnRzPVtdO2Zvcihjb25zdCBzbGljZSBvZiB0aGlzLnRocmVhZC5hc3luY1NsaWNlR3JvdXAuc2xpY2VzKXtjb25zdCBjYXRlZ29yaWVzPXRyLmIuZ2V0Q2F0ZWdvcnlQYXJ0cyhzbGljZS5jYXRlZ29yeSk7Y29uc3QgaXNOZXRFdmVudD1jYXRlZ29yeT0+TkVUX0NBVEVHT1JJRVMuaGFzKGNhdGVnb3J5KTtpZihjYXRlZ29yaWVzLmZpbHRlcihpc05ldEV2ZW50KS5sZW5ndGg9PT0wKWNvbnRpbnVlO25ldHdvcmtFdmVudHMucHVzaChzbGljZSk7fQotcmV0dXJuIG5ldHdvcmtFdmVudHM7fX0KLXJldHVybntDaHJvbWVUaHJlYWRIZWxwZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLmhlbHBlcnMnLGZ1bmN0aW9uKCl7Y29uc3QgQ2hyb21lVGhyZWFkSGVscGVyPXRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lVGhyZWFkSGVscGVyO2Z1bmN0aW9uIENocm9tZVJlbmRlcmVySGVscGVyKG1vZGVsSGVscGVyLHByb2Nlc3Mpe3RyLm1vZGVsLmhlbHBlcnMuQ2hyb21lUHJvY2Vzc0hlbHBlci5jYWxsKHRoaXMsbW9kZWxIZWxwZXIscHJvY2Vzcyk7dGhpcy5tYWluVGhyZWFkXz1wcm9jZXNzLmZpbmRBdE1vc3RPbmVUaHJlYWROYW1lZCgnQ3JSZW5kZXJlck1haW4nKXx8cHJvY2Vzcy5maW5kQXRNb3N0T25lVGhyZWFkTmFtZWQoJ0Nocm9tZV9JblByb2NSZW5kZXJlclRocmVhZCcpO3RoaXMuY29tcG9zaXRvclRocmVhZF89cHJvY2Vzcy5maW5kQXRNb3N0T25lVGhyZWFkTmFtZWQoJ0NvbXBvc2l0b3InKTt0aGlzLnJhc3RlcldvcmtlclRocmVhZHNfPXByb2Nlc3MuZmluZEFsbFRocmVhZHNNYXRjaGluZyhmdW5jdGlvbih0KXtpZih0Lm5hbWU9PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO2lmKHQubmFtZS5pbmRleE9mKCdDb21wb3NpdG9yVGlsZVdvcmtlcicpPT09MClyZXR1cm4gdHJ1ZTtpZih0Lm5hbWUuaW5kZXhPZignQ29tcG9zaXRvclJhc3RlcldvcmtlcicpPT09MClyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2U7fSk7aWYoIXByb2Nlc3MubmFtZSl7cHJvY2Vzcy5uYW1lPUNocm9tZVJlbmRlcmVySGVscGVyLlBST0NFU1NfTkFNRTt9fQotQ2hyb21lUmVuZGVyZXJIZWxwZXIuUFJPQ0VTU19OQU1FPSdSZW5kZXJlcic7Q2hyb21lUmVuZGVyZXJIZWxwZXIuaXNSZW5kZXJQcm9jZXNzPWZ1bmN0aW9uKHByb2Nlc3Mpe2lmKHByb2Nlc3MuZmluZEF0TW9zdE9uZVRocmVhZE5hbWVkKCdDclJlbmRlcmVyTWFpbicpKXJldHVybiB0cnVlO2lmKHByb2Nlc3MuZmluZEF0TW9zdE9uZVRocmVhZE5hbWVkKCdDb21wb3NpdG9yJykpcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNlO307Q2hyb21lUmVuZGVyZXJIZWxwZXIuaXNUcmFjaW5nUHJvY2Vzcz1mdW5jdGlvbihwcm9jZXNzKXtyZXR1cm4gcHJvY2Vzcy5sYWJlbHMhPT11bmRlZmluZWQmJnByb2Nlc3MubGFiZWxzLmxlbmd0aD09PTEmJnByb2Nlc3MubGFiZWxzWzBdPT09J2Nocm9tZTovL3RyYWNpbmcnO307Q2hyb21lUmVuZGVyZXJIZWxwZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuaGVscGVycy5DaHJvbWVQcm9jZXNzSGVscGVyLnByb3RvdHlwZSxnZXQgbWFpblRocmVhZCgpe3JldHVybiB0aGlzLm1haW5UaHJlYWRfO30sZ2V0IGNvbXBvc2l0b3JUaHJlYWQoKXtyZXR1cm4gdGhpcy5jb21wb3NpdG9yVGhyZWFkXzt9LGdldCByYXN0ZXJXb3JrZXJUaHJlYWRzKCl7cmV0dXJuIHRoaXMucmFzdGVyV29ya2VyVGhyZWFkc187fSxnZXQgaXNDaHJvbWVUcmFjaW5nVUkoKXtyZXR1cm4gQ2hyb21lUmVuZGVyZXJIZWxwZXIuaXNUcmFjaW5nUHJvY2Vzcyh0aGlzLnByb2Nlc3MpO30sfTtyZXR1cm57Q2hyb21lUmVuZGVyZXJIZWxwZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLmhlbHBlcnMnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZmluZENocm9tZUJyb3dzZXJQcm9jZXNzZXMobW9kZWwpe3JldHVybiBtb2RlbC5nZXRBbGxQcm9jZXNzZXModHIubW9kZWwuaGVscGVycy5DaHJvbWVCcm93c2VySGVscGVyLmlzQnJvd3NlclByb2Nlc3MpO30KLWZ1bmN0aW9uIGZpbmRDaHJvbWVSZW5kZXJQcm9jZXNzZXMobW9kZWwpe3JldHVybiBtb2RlbC5nZXRBbGxQcm9jZXNzZXModHIubW9kZWwuaGVscGVycy5DaHJvbWVSZW5kZXJlckhlbHBlci5pc1JlbmRlclByb2Nlc3MpO30KLWZ1bmN0aW9uIGZpbmRDaHJvbWVHcHVQcm9jZXNzKG1vZGVsKXtjb25zdCBncHVQcm9jZXNzZXM9bW9kZWwuZ2V0QWxsUHJvY2Vzc2VzKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lR3B1SGVscGVyLmlzR3B1UHJvY2Vzcyk7aWYoZ3B1UHJvY2Vzc2VzLmxlbmd0aCE9PTEpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gZ3B1UHJvY2Vzc2VzWzBdO30KLWZ1bmN0aW9uIENocm9tZU1vZGVsSGVscGVyKG1vZGVsKXt0aGlzLm1vZGVsXz1tb2RlbDtjb25zdCBicm93c2VyUHJvY2Vzc2VzPWZpbmRDaHJvbWVCcm93c2VyUHJvY2Vzc2VzKG1vZGVsKTt0aGlzLmJyb3dzZXJIZWxwZXJzXz1icm93c2VyUHJvY2Vzc2VzLm1hcChwPT5uZXcgdHIubW9kZWwuaGVscGVycy5DaHJvbWVCcm93c2VySGVscGVyKHRoaXMscCkpO2NvbnN0IGdwdVByb2Nlc3M9ZmluZENocm9tZUdwdVByb2Nlc3MobW9kZWwpO2lmKGdwdVByb2Nlc3Mpe3RoaXMuZ3B1SGVscGVyXz1uZXcgdHIubW9kZWwuaGVscGVycy5DaHJvbWVHcHVIZWxwZXIodGhpcyxncHVQcm9jZXNzKTt9ZWxzZXt0aGlzLmdwdUhlbHBlcl89dW5kZWZpbmVkO30KLWNvbnN0IHJlbmRlcmVyUHJvY2Vzc2VzXz1maW5kQ2hyb21lUmVuZGVyUHJvY2Vzc2VzKG1vZGVsKTt0aGlzLnJlbmRlcmVySGVscGVyc189e307cmVuZGVyZXJQcm9jZXNzZXNfLmZvckVhY2goZnVuY3Rpb24ocmVuZGVyUHJvY2Vzcyl7Y29uc3QgcmVuZGVyZXJIZWxwZXI9bmV3IHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lUmVuZGVyZXJIZWxwZXIodGhpcyxyZW5kZXJQcm9jZXNzKTt0aGlzLnJlbmRlcmVySGVscGVyc19bcmVuZGVyZXJIZWxwZXIucGlkXT1yZW5kZXJlckhlbHBlcjt9LHRoaXMpO3RoaXMuY2hyb21lQm91bmRzXz11bmRlZmluZWQ7fQotQ2hyb21lTW9kZWxIZWxwZXIuZ3VpZD10ci5iLkdVSUQuYWxsb2NhdGVTaW1wbGUoKTtDaHJvbWVNb2RlbEhlbHBlci5zdXBwb3J0c01vZGVsPWZ1bmN0aW9uKG1vZGVsKXtpZihmaW5kQ2hyb21lQnJvd3NlclByb2Nlc3Nlcyhtb2RlbCkubGVuZ3RoKXJldHVybiB0cnVlO2lmKGZpbmRDaHJvbWVSZW5kZXJQcm9jZXNzZXMobW9kZWwpLmxlbmd0aClyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2U7fTtDaHJvbWVNb2RlbEhlbHBlci5wcm90b3R5cGU9e2dldCBwaWQoKXt0aHJvdyBuZXcgRXJyb3IoJ3dvYWgnKTt9LGdldCBwcm9jZXNzKCl7dGhyb3cgbmV3IEVycm9yKCd3b2FoJyk7fSxnZXQgbW9kZWwoKXtyZXR1cm4gdGhpcy5tb2RlbF87fSxnZXQgYnJvd3NlclByb2Nlc3MoKXtpZih0aGlzLmJyb3dzZXJIZWxwZXI9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdGhpcy5icm93c2VySGVscGVyLnByb2Nlc3M7fSxnZXQgYnJvd3NlckhlbHBlcigpe3JldHVybiB0aGlzLmJyb3dzZXJIZWxwZXJzX1swXTt9LGdldCBicm93c2VySGVscGVycygpe3JldHVybiB0aGlzLmJyb3dzZXJIZWxwZXJzXzt9LGdldCBncHVIZWxwZXIoKXtyZXR1cm4gdGhpcy5ncHVIZWxwZXJfO30sZ2V0IHJlbmRlcmVySGVscGVycygpe3JldHVybiB0aGlzLnJlbmRlcmVySGVscGVyc187fSxnZXQgcmVuZGVyZXJXaXRoTGFyZ2VzdFBpZCgpe2xldCBsYXJnZXN0UGlkPS0xO2Zvcihjb25zdCBwaWQgaW4gdGhpcy5yZW5kZXJlckhlbHBlcnMpe2NvbnN0IHJlbmRlcmVySGVscGVyPXRoaXMucmVuZGVyZXJIZWxwZXJzW3BpZF07aWYocmVuZGVyZXJIZWxwZXIuaXNDaHJvbWVUcmFjaW5nVUkpY29udGludWU7aWYocGlkPmxhcmdlc3RQaWQpbGFyZ2VzdFBpZD1waWQ7fQotaWYobGFyZ2VzdFBpZD09PS0xKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMucmVuZGVyZXJIZWxwZXJzW2xhcmdlc3RQaWRdO30sZ2V0IGNocm9tZUJvdW5kcygpe2lmKCF0aGlzLmNocm9tZUJvdW5kc18pe3RoaXMuY2hyb21lQm91bmRzXz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7Zm9yKGNvbnN0IGJyb3dzZXJIZWxwZXIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmJyb3dzZXJIZWxwZXJzKSl7dGhpcy5jaHJvbWVCb3VuZHNfLmFkZFJhbmdlKGJyb3dzZXJIZWxwZXIucHJvY2Vzcy5ib3VuZHMpO30KLWZvcihjb25zdCByZW5kZXJlckhlbHBlciBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVuZGVyZXJIZWxwZXJzKSl7dGhpcy5jaHJvbWVCb3VuZHNfLmFkZFJhbmdlKHJlbmRlcmVySGVscGVyLnByb2Nlc3MuYm91bmRzKTt9Ci1pZih0aGlzLmdwdUhlbHBlcil7dGhpcy5jaHJvbWVCb3VuZHNfLmFkZFJhbmdlKHRoaXMuZ3B1SGVscGVyLnByb2Nlc3MuYm91bmRzKTt9fQotaWYodGhpcy5jaHJvbWVCb3VuZHNfLmlzRW1wdHkpe3JldHVybiB1bmRlZmluZWQ7fQotcmV0dXJuIHRoaXMuY2hyb21lQm91bmRzXzt9fTtyZXR1cm57Q2hyb21lTW9kZWxIZWxwZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2MnLGZ1bmN0aW9uKCl7Y29uc3QgQXN5bmNTbGljZT10ci5tb2RlbC5Bc3luY1NsaWNlO2NvbnN0IEV2ZW50U2V0PXRyLm1vZGVsLkV2ZW50U2V0O2NvbnN0IFVJX0NPTVBfTkFNRT0nSU5QVVRfRVZFTlRfTEFURU5DWV9VSV9DT01QT05FTlQnO2NvbnN0IE9SSUdJTkFMX0NPTVBfTkFNRT0nSU5QVVRfRVZFTlRfTEFURU5DWV9PUklHSU5BTF9DT01QT05FTlQnO2NvbnN0IEJFR0lOX0NPTVBfTkFNRT0nSU5QVVRfRVZFTlRfTEFURU5DWV9CRUdJTl9SV0hfQ09NUE9ORU5UJztjb25zdCBFTkRfQ09NUF9OQU1FPSdJTlBVVF9FVkVOVF9MQVRFTkNZX1RFUk1JTkFURURfRlJBTUVfU1dBUF9DT01QT05FTlQnO2NvbnN0IE1BSU5fUkVOREVSRVJfVEhSRUFEX05BTUU9J0NyUmVuZGVyZXJNYWluJztjb25zdCBDT01QT1NJVE9SX1RIUkVBRF9OQU1FPSdDb21wb3NpdG9yJztjb25zdCBQT1NUVEFTS19GTE9XX0VWRU5UPSdkaXNhYmxlZC1ieS1kZWZhdWx0LXRvcGxldmVsLmZsb3cnO2NvbnN0IElQQ19GTE9XX0VWRU5UPSdkaXNhYmxlZC1ieS1kZWZhdWx0LWlwYy5mbG93Jztjb25zdCBJTlBVVF9FVkVOVF9UWVBFX05BTUVTPXtDSEFSOidDaGFyJyxDTElDSzonR2VzdHVyZUNsaWNrJyxDT05URVhUX01FTlU6J0NvbnRleHRNZW51JyxGTElOR19DQU5DRUw6J0dlc3R1cmVGbGluZ0NhbmNlbCcsRkxJTkdfU1RBUlQ6J0dlc3R1cmVGbGluZ1N0YXJ0JyxLRVlfRE9XTjonS2V5RG93bicsS0VZX0RPV05fUkFXOidSYXdLZXlEb3duJyxLRVlfVVA6J0tleVVwJyxMQVRFTkNZX1NDUk9MTF9VUERBVEU6J1Njcm9sbFVwZGF0ZScsTU9VU0VfRE9XTjonTW91c2VEb3duJyxNT1VTRV9FTlRFUjonTW91c2VFbnRlcicsTU9VU0VfTEVBVkU6J01vdXNlTGVhdmUnLE1PVVNFX01PVkU6J01vdXNlTW92ZScsTU9VU0VfVVA6J01vdXNlVXAnLE1PVVNFX1dIRUVMOidNb3VzZVdoZWVsJyxQSU5DSF9CRUdJTjonR2VzdHVyZVBpbmNoQmVnaW4nLFBJTkNIX0VORDonR2VzdHVyZVBpbmNoRW5kJyxQSU5DSF9VUERBVEU6J0dlc3R1cmVQaW5jaFVwZGF0ZScsU0NST0xMX0JFR0lOOidHZXN0dXJlU2Nyb2xsQmVnaW4nLFNDUk9MTF9FTkQ6J0dlc3R1cmVTY3JvbGxFbmQnLFNDUk9MTF9VUERBVEU6J0dlc3R1cmVTY3JvbGxVcGRhdGUnLFNDUk9MTF9VUERBVEVfUkVOREVSRVI6J1Njcm9sbFVwZGF0ZScsU0hPV19QUkVTUzonR2VzdHVyZVNob3dQcmVzcycsVEFQOidHZXN0dXJlVGFwJyxUQVBfQ0FOQ0VMOidHZXN0dXJlVGFwQ2FuY2VsJyxUQVBfRE9XTjonR2VzdHVyZVRhcERvd24nLFRPVUNIX0NBTkNFTDonVG91Y2hDYW5jZWwnLFRPVUNIX0VORDonVG91Y2hFbmQnLFRPVUNIX01PVkU6J1RvdWNoTW92ZScsVE9VQ0hfU1RBUlQ6J1RvdWNoU3RhcnQnLFVOS05PV046J1VOS05PV04nfTtmdW5jdGlvbiBJbnB1dExhdGVuY3lBc3luY1NsaWNlKCl7QXN5bmNTbGljZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5hc3NvY2lhdGVkRXZlbnRzXz1uZXcgRXZlbnRTZXQoKTt0aGlzLnR5cGVOYW1lXz11bmRlZmluZWQ7aWYoIXRoaXMuaXNMZWdhY3lFdmVudCl7dGhpcy5kZXRlcm1pbmVNb2Rlcm5UeXBlTmFtZV8oKTt9fQotSW5wdXRMYXRlbmN5QXN5bmNTbGljZS5wcm90b3R5cGU9e19fcHJvdG9fXzpBc3luY1NsaWNlLnByb3RvdHlwZSxnZXQgaXNMZWdhY3lFdmVudCgpe3JldHVybiB0aGlzLnRpdGxlPT09J0lucHV0TGF0ZW5jeSc7fSxnZXQgdHlwZU5hbWUoKXtpZighdGhpcy50eXBlTmFtZV8pe3RoaXMuZGV0ZXJtaW5lTGVnYWN5VHlwZU5hbWVfKCk7fQotcmV0dXJuIHRoaXMudHlwZU5hbWVfO30sY2hlY2tUeXBlTmFtZV8oKXtpZighdGhpcy50eXBlTmFtZV8pe3Rocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGRldGVybWluZSB0eXBlTmFtZScpO30KLWxldCBmb3VuZD1mYWxzZTtmb3IoY29uc3QgdHlwZU5hbWUgaW4gSU5QVVRfRVZFTlRfVFlQRV9OQU1FUyl7aWYodGhpcy50eXBlTmFtZT09PUlOUFVUX0VWRU5UX1RZUEVfTkFNRVNbdHlwZU5hbWVdKXtmb3VuZD10cnVlO2JyZWFrO319Ci1pZighZm91bmQpe3RoaXMudHlwZU5hbWVfPUlOUFVUX0VWRU5UX1RZUEVfTkFNRVMuVU5LTk9XTjt9fSxkZXRlcm1pbmVNb2Rlcm5UeXBlTmFtZV8oKXtjb25zdCBsYXN0Q29sb25JbmRleD10aGlzLnRpdGxlLmxhc3RJbmRleE9mKCc6Jyk7aWYobGFzdENvbG9uSW5kZXg8MClyZXR1cm47Y29uc3QgY2hhcmFjdGVyQWZ0ZXJMYXN0Q29sb25JbmRleD1sYXN0Q29sb25JbmRleCsxO3RoaXMudHlwZU5hbWVfPXRoaXMudGl0bGUuc2xpY2UoY2hhcmFjdGVyQWZ0ZXJMYXN0Q29sb25JbmRleCk7dGhpcy5jaGVja1R5cGVOYW1lXygpO30sZGV0ZXJtaW5lTGVnYWN5VHlwZU5hbWVfKCl7Zm9yKGNvbnN0IHN1YlNsaWNlIG9mIHRoaXMuZW51bWVyYXRlQWxsRGVzY2VuZGVudHMoKSl7Y29uc3Qgc3ViU2xpY2VJc0FJbnB1dExhdGVuY3lBc3luY1NsaWNlPShzdWJTbGljZSBpbnN0YW5jZW9mIElucHV0TGF0ZW5jeUFzeW5jU2xpY2UpO2lmKCFzdWJTbGljZUlzQUlucHV0TGF0ZW5jeUFzeW5jU2xpY2UpY29udGludWU7aWYoIXN1YlNsaWNlLnR5cGVOYW1lKWNvbnRpbnVlO2lmKHRoaXMudHlwZU5hbWVfJiZzdWJTbGljZS50eXBlTmFtZV8pe2NvbnN0IHN1YlNsaWNlSGFzRGlmZmVyZW50VHlwZU5hbWU9KHRoaXMudHlwZU5hbWVfIT09c3ViU2xpY2UudHlwZU5hbWVfKTtpZihzdWJTbGljZUhhc0RpZmZlcmVudFR5cGVOYW1lKXt0aHJvdyBuZXcgRXJyb3IoJ0lucHV0TGF0ZW5jeUFzeW5jU2xpY2UuZGV0ZXJtaW5lTGVnYWN5VHlwZU5hbWVfKCkgJysnIGZvdW5kIG11bHRpcGxlIHR5cGVOYW1lcycpO319Ci10aGlzLnR5cGVOYW1lXz1zdWJTbGljZS50eXBlTmFtZV87fQotaWYoIXRoaXMudHlwZU5hbWVfKXt0aHJvdyBuZXcgRXJyb3IoJ0lucHV0TGF0ZW5jeUFzeW5jU2xpY2UuZGV0ZXJtaW5lTGVnYWN5VHlwZU5hbWVfKCkgZmFpbGVkJyk7fQotdGhpcy5jaGVja1R5cGVOYW1lXygpO30sZ2V0UmVuZGVyZXJIZWxwZXIoc291cmNlU2xpY2VzKXtjb25zdCB0cmFjZU1vZGVsPXRoaXMuc3RhcnRUaHJlYWQucGFyZW50Lm1vZGVsO2NvbnN0IG1vZGVsSGVscGVyPXRyYWNlTW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYoIW1vZGVsSGVscGVyKXJldHVybiB1bmRlZmluZWQ7bGV0IG1haW5UaHJlYWQ9dW5kZWZpbmVkO2xldCBjb21wb3NpdG9yVGhyZWFkPXVuZGVmaW5lZDtmb3IoY29uc3QgaSBpbiBzb3VyY2VTbGljZXMpe2lmKHNvdXJjZVNsaWNlc1tpXS5wYXJlbnRDb250YWluZXIubmFtZT09PU1BSU5fUkVOREVSRVJfVEhSRUFEX05BTUUpe21haW5UaHJlYWQ9c291cmNlU2xpY2VzW2ldLnBhcmVudENvbnRhaW5lcjt9ZWxzZSBpZihzb3VyY2VTbGljZXNbaV0ucGFyZW50Q29udGFpbmVyLm5hbWU9PT1DT01QT1NJVE9SX1RIUkVBRF9OQU1FKXtjb21wb3NpdG9yVGhyZWFkPXNvdXJjZVNsaWNlc1tpXS5wYXJlbnRDb250YWluZXI7fQotaWYobWFpblRocmVhZCYmY29tcG9zaXRvclRocmVhZClicmVhazt9Ci1jb25zdCByZW5kZXJlckhlbHBlcnM9bW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzO2NvbnN0IHBpZHM9T2JqZWN0LmtleXMocmVuZGVyZXJIZWxwZXJzKTtmb3IobGV0IGk9MDtpPHBpZHMubGVuZ3RoO2krKyl7Y29uc3QgcGlkPXBpZHNbaV07Y29uc3QgcmVuZGVyZXJIZWxwZXI9cmVuZGVyZXJIZWxwZXJzW3BpZF07aWYocmVuZGVyZXJIZWxwZXIubWFpblRocmVhZD09PW1haW5UaHJlYWR8fHJlbmRlcmVySGVscGVyLmNvbXBvc2l0b3JUaHJlYWQ9PT1jb21wb3NpdG9yVGhyZWFkKXtyZXR1cm4gcmVuZGVyZXJIZWxwZXI7fX0KLXJldHVybiB1bmRlZmluZWQ7fSxhZGRFbnRpcmVTbGljZUhpZXJhcmNoeShzbGljZSl7dGhpcy5hc3NvY2lhdGVkRXZlbnRzXy5wdXNoKHNsaWNlKTtzbGljZS5pdGVyYXRlQWxsU3Vic2VxdWVudFNsaWNlcyhmdW5jdGlvbihzdWJzZXF1ZW50U2xpY2Upe3RoaXMuYXNzb2NpYXRlZEV2ZW50c18ucHVzaChzdWJzZXF1ZW50U2xpY2UpO30sdGhpcyk7fSxhZGREaXJlY3RseUFzc29jaWF0ZWRFdmVudHMoZmxvd0V2ZW50cyl7Y29uc3Qgc2xpY2VzPVtdO2Zsb3dFdmVudHMuZm9yRWFjaChmdW5jdGlvbihmbG93RXZlbnQpe3RoaXMuYXNzb2NpYXRlZEV2ZW50c18ucHVzaChmbG93RXZlbnQpO2NvbnN0IG5ld1NvdXJjZT1mbG93RXZlbnQuc3RhcnRTbGljZS5tb3N0VG9wTGV2ZWxTbGljZTtpZihzbGljZXMuaW5kZXhPZihuZXdTb3VyY2UpPT09LTEpe3NsaWNlcy5wdXNoKG5ld1NvdXJjZSk7fX0sdGhpcyk7Y29uc3QgbGFzdEZsb3dFdmVudD1mbG93RXZlbnRzW2Zsb3dFdmVudHMubGVuZ3RoLTFdO2NvbnN0IGxhc3RTb3VyY2U9bGFzdEZsb3dFdmVudC5lbmRTbGljZS5tb3N0VG9wTGV2ZWxTbGljZTtpZihzbGljZXMuaW5kZXhPZihsYXN0U291cmNlKT09PS0xKXtzbGljZXMucHVzaChsYXN0U291cmNlKTt9Ci1yZXR1cm4gc2xpY2VzO30sYWRkU2Nyb2xsVXBkYXRlRXZlbnRzKHJlbmRlcmVySGVscGVyKXtpZighcmVuZGVyZXJIZWxwZXJ8fCFyZW5kZXJlckhlbHBlci5jb21wb3NpdG9yVGhyZWFkKXtyZXR1cm47fQotY29uc3QgY29tcG9zaXRvclRocmVhZD1yZW5kZXJlckhlbHBlci5jb21wb3NpdG9yVGhyZWFkO2NvbnN0IGdlc3R1cmVTY3JvbGxVcGRhdGVTdGFydD10aGlzLnN0YXJ0O2NvbnN0IGdlc3R1cmVTY3JvbGxVcGRhdGVFbmQ9dGhpcy5lbmQ7Y29uc3QgYWxsQ29tcG9zaXRvckFzeW5jU2xpY2VzPWNvbXBvc2l0b3JUaHJlYWQuYXN5bmNTbGljZUdyb3VwLnNsaWNlcztmb3IoY29uc3QgaSBpbiBhbGxDb21wb3NpdG9yQXN5bmNTbGljZXMpe2NvbnN0IHNsaWNlPWFsbENvbXBvc2l0b3JBc3luY1NsaWNlc1tpXTtpZihzbGljZS50aXRsZSE9PSdMYXRlbmN5OjpTY3JvbGxVcGRhdGUnKWNvbnRpbnVlO2NvbnN0IHBhcmVudElkPXNsaWNlLmFyZ3MuZGF0YS5JTlBVVF9FVkVOVF9MQVRFTkNZX0ZPUldBUkRfU0NST0xMX1VQREFURV9UT19NQUlOX0NPTVBPTkVOVC5zZXF1ZW5jZV9udW1iZXI7aWYocGFyZW50SWQ9PT11bmRlZmluZWQpe2lmKHNsaWNlLnN0YXJ0PGdlc3R1cmVTY3JvbGxVcGRhdGVTdGFydHx8c2xpY2Uuc3RhcnQ+PWdlc3R1cmVTY3JvbGxVcGRhdGVFbmQpe2NvbnRpbnVlO319ZWxzZXtpZihwYXJzZUludChwYXJlbnRJZCkhPT1wYXJzZUludCh0aGlzLmlkKSl7Y29udGludWU7fX0KLXNsaWNlLmFzc29jaWF0ZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7dGhpcy5hc3NvY2lhdGVkRXZlbnRzXy5wdXNoKGV2ZW50KTt9LHRoaXMpO2JyZWFrO319LGJlbG9uZ1RvT3RoZXJJbnB1dHMoc2xpY2UsZmxvd0V2ZW50cyl7bGV0IGZyb21PdGhlcklucHV0cz1mYWxzZTtzbGljZS5pdGVyYXRlRW50aXJlSGllcmFyY2h5KGZ1bmN0aW9uKHN1YnNlcXVlbnRTbGljZSl7aWYoZnJvbU90aGVySW5wdXRzKXJldHVybjtzdWJzZXF1ZW50U2xpY2UuaW5GbG93RXZlbnRzLmZvckVhY2goZnVuY3Rpb24oaW5mbG93KXtpZihmcm9tT3RoZXJJbnB1dHMpcmV0dXJuO2lmKGluZmxvdy5jYXRlZ29yeS5pbmRleE9mKCdpbnB1dCcpPi0xKXtpZihmbG93RXZlbnRzLmluZGV4T2YoaW5mbG93KT09PS0xKXtmcm9tT3RoZXJJbnB1dHM9dHJ1ZTt9fX0sdGhpcyk7fSx0aGlzKTtyZXR1cm4gZnJvbU90aGVySW5wdXRzO30sdHJpZ2dlck90aGVySW5wdXRzKGV2ZW50LGZsb3dFdmVudHMpe2lmKGV2ZW50Lm91dEZsb3dFdmVudHM9PT11bmRlZmluZWR8fGV2ZW50Lm91dEZsb3dFdmVudHMubGVuZ3RoPT09MCl7cmV0dXJuIGZhbHNlO30KLWNvbnN0IGZsb3c9ZXZlbnQub3V0Rmxvd0V2ZW50c1swXTtpZihmbG93LmNhdGVnb3J5IT09UE9TVFRBU0tfRkxPV19FVkVOVHx8IWZsb3cuZW5kU2xpY2Upe3JldHVybiBmYWxzZTt9Ci1jb25zdCBlbmRTbGljZT1mbG93LmVuZFNsaWNlO2lmKHRoaXMuYmVsb25nVG9PdGhlcklucHV0cyhlbmRTbGljZS5tb3N0VG9wTGV2ZWxTbGljZSxmbG93RXZlbnRzKSl7cmV0dXJuIHRydWU7fQotcmV0dXJuIGZhbHNlO30sZm9sbG93U3Vic2VxdWVudFNsaWNlcyhldmVudCxxdWV1ZSx2aXNpdGVkLGZsb3dFdmVudHMpe2xldCBzdG9wRm9sbG93aW5nPWZhbHNlO2xldCBpbnB1dEFjaz1mYWxzZTtldmVudC5pdGVyYXRlQWxsU3Vic2VxdWVudFNsaWNlcyhmdW5jdGlvbihzbGljZSl7aWYoc3RvcEZvbGxvd2luZylyZXR1cm47aWYoc2xpY2UudGl0bGU9PT0nVGFza1F1ZXVlTWFuYWdlcjo6UnVuVGFzaycpcmV0dXJuO2lmKHNsaWNlLnRpdGxlPT09J1RocmVhZFByb3h5OjpTY2hlZHVsZWRBY3Rpb25TZW5kQmVnaW5NYWluRnJhbWUnKXtyZXR1cm47fQotaWYoc2xpY2UudGl0bGU9PT0nU2NoZWR1bGVyOjpTY2hlZHVsZUJlZ2luSW1wbEZyYW1lRGVhZGxpbmUnKXtpZih0aGlzLnRyaWdnZXJPdGhlcklucHV0cyhzbGljZSxmbG93RXZlbnRzKSlyZXR1cm47fQotaWYoc2xpY2UudGl0bGU9PT0nQ29tcG9zaXRvckltcGw6OlBvc3RDb21wb3NpdGUnKXtpZih0aGlzLnRyaWdnZXJPdGhlcklucHV0cyhzbGljZSxmbG93RXZlbnRzKSlyZXR1cm47fQotaWYoc2xpY2UudGl0bGU9PT0nSW5wdXRSb3V0ZXJJbXBsOjpQcm9jZXNzSW5wdXRFdmVudEFjaycpe2lucHV0QWNrPXRydWU7fQotaWYoaW5wdXRBY2smJnNsaWNlLnRpdGxlPT09J0lucHV0Um91dGVySW1wbDo6RmlsdGVyQW5kU2VuZFdlYklucHV0RXZlbnQnKXtzdG9wRm9sbG93aW5nPXRydWU7fQotdGhpcy5mb2xsb3dDdXJyZW50U2xpY2Uoc2xpY2UscXVldWUsdmlzaXRlZCk7fSx0aGlzKTt9LGZvbGxvd0N1cnJlbnRTbGljZShldmVudCxxdWV1ZSx2aXNpdGVkKXtldmVudC5vdXRGbG93RXZlbnRzLmZvckVhY2goZnVuY3Rpb24ob3V0Zmxvdyl7aWYoKG91dGZsb3cuY2F0ZWdvcnk9PT1QT1NUVEFTS19GTE9XX0VWRU5UfHxvdXRmbG93LmNhdGVnb3J5PT09SVBDX0ZMT1dfRVZFTlQpJiZvdXRmbG93LmVuZFNsaWNlKXt0aGlzLmFzc29jaWF0ZWRFdmVudHNfLnB1c2gob3V0Zmxvdyk7Y29uc3QgbmV4dEV2ZW50PW91dGZsb3cuZW5kU2xpY2UubW9zdFRvcExldmVsU2xpY2U7aWYoIXZpc2l0ZWQuY29udGFpbnMobmV4dEV2ZW50KSl7dmlzaXRlZC5wdXNoKG5leHRFdmVudCk7cXVldWUucHVzaChuZXh0RXZlbnQpO319fSx0aGlzKTt9LGJhY2t0cmFjZUZyb21EcmF3KGJlZ2luSW1wbEZyYW1lLHZpc2l0ZWQpe2NvbnN0IHBlbmRpbmdFdmVudFF1ZXVlPVtdO3BlbmRpbmdFdmVudFF1ZXVlLnB1c2goYmVnaW5JbXBsRnJhbWUubW9zdFRvcExldmVsU2xpY2UpO3doaWxlKHBlbmRpbmdFdmVudFF1ZXVlLmxlbmd0aCE9PTApe2NvbnN0IGV2ZW50PXBlbmRpbmdFdmVudFF1ZXVlLnBvcCgpO3RoaXMuYWRkRW50aXJlU2xpY2VIaWVyYXJjaHkoZXZlbnQpO2V2ZW50LmluRmxvd0V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGluZmxvdyl7aWYoaW5mbG93LmNhdGVnb3J5PT09UE9TVFRBU0tfRkxPV19FVkVOVCYmaW5mbG93LnN0YXJ0U2xpY2Upe2NvbnN0IG5leHRFdmVudD1pbmZsb3cuc3RhcnRTbGljZS5tb3N0VG9wTGV2ZWxTbGljZTtpZighdmlzaXRlZC5jb250YWlucyhuZXh0RXZlbnQpKXt2aXNpdGVkLnB1c2gobmV4dEV2ZW50KTtwZW5kaW5nRXZlbnRRdWV1ZS5wdXNoKG5leHRFdmVudCk7fX19LHRoaXMpO319LHNvcnRSYXN0ZXJpemVyU2xpY2VzKHJhc3RlcldvcmtlclRocmVhZHMsc29ydGVkUmFzdGVyaXplclNsaWNlcyl7cmFzdGVyV29ya2VyVGhyZWFkcy5mb3JFYWNoKGZ1bmN0aW9uKHJhc3Rlcml6ZXIpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHNvcnRlZFJhc3Rlcml6ZXJTbGljZXMscmFzdGVyaXplci5zbGljZUdyb3VwLnNsaWNlcyk7fSx0aGlzKTtzb3J0ZWRSYXN0ZXJpemVyU2xpY2VzLnNvcnQoZnVuY3Rpb24oYSxiKXtpZihhLnN0YXJ0IT09Yi5zdGFydCl7cmV0dXJuIGEuc3RhcnQtYi5zdGFydDt9Ci1yZXR1cm4gYS5ndWlkLWIuZ3VpZDt9KTt9LGFkZFJhc3Rlcml6YXRpb25FdmVudHMocHJlcGFyZVRpbGVzLHJlbmRlcmVySGVscGVyLHZpc2l0ZWQsZmxvd0V2ZW50cyxzb3J0ZWRSYXN0ZXJpemVyU2xpY2VzKXtpZighcHJlcGFyZVRpbGVzLmFyZ3MucHJlcGFyZV90aWxlc19pZClyZXR1cm47aWYoIXJlbmRlcmVySGVscGVyfHwhcmVuZGVyZXJIZWxwZXIucmFzdGVyV29ya2VyVGhyZWFkcyl7cmV0dXJuO30KLWNvbnN0IHJhc3RlcldvcmtlclRocmVhZHM9cmVuZGVyZXJIZWxwZXIucmFzdGVyV29ya2VyVGhyZWFkcztjb25zdCBwcmVwYXJlVGlsZUlkPXByZXBhcmVUaWxlcy5hcmdzLnByZXBhcmVfdGlsZXNfaWQ7Y29uc3QgcGVuZGluZ0V2ZW50UXVldWU9W107aWYoc29ydGVkUmFzdGVyaXplclNsaWNlcy5sZW5ndGg9PT0wKXt0aGlzLnNvcnRSYXN0ZXJpemVyU2xpY2VzKHJhc3RlcldvcmtlclRocmVhZHMsc29ydGVkUmFzdGVyaXplclNsaWNlcyk7fQotbGV0IG51bUZpbmlzaGVkVGFza3M9MDtjb25zdCBSQVNURVJfVEFTS19USVRMRT0nUmFzdGVyaXplclRhc2tJbXBsOjpSdW5PbldvcmtlclRocmVhZCc7Y29uc3QgSU1BR0VERUNPREVfVEFTS19USVRMRT0nSW1hZ2VEZWNvZGVUYXNrSW1wbDo6UnVuT25Xb3JrZXJUaHJlYWQnO2NvbnN0IEZJTklTSEVEX1RBU0tfVElUTEU9J1Rhc2tTZXRGaW5pc2hlZFRhc2tJbXBsOjpSdW5PbldvcmtlclRocmVhZCc7Zm9yKGxldCBpPTA7aTxzb3J0ZWRSYXN0ZXJpemVyU2xpY2VzLmxlbmd0aDtpKyspe2NvbnN0IHRhc2s9c29ydGVkUmFzdGVyaXplclNsaWNlc1tpXTtpZih0YXNrLnRpdGxlPT09UkFTVEVSX1RBU0tfVElUTEV8fHRhc2sudGl0bGU9PT1JTUFHRURFQ09ERV9UQVNLX1RJVExFKXtpZih0YXNrLmFyZ3Muc291cmNlX3ByZXBhcmVfdGlsZXNfaWQ9PT1wcmVwYXJlVGlsZUlkKXt0aGlzLmFkZEVudGlyZVNsaWNlSGllcmFyY2h5KHRhc2subW9zdFRvcExldmVsU2xpY2UpO319ZWxzZSBpZih0YXNrLnRpdGxlPT09RklOSVNIRURfVEFTS19USVRMRSl7aWYodGFzay5zdGFydD5wcmVwYXJlVGlsZXMuc3RhcnQpe3BlbmRpbmdFdmVudFF1ZXVlLnB1c2godGFzay5tb3N0VG9wTGV2ZWxTbGljZSk7aWYoKytudW1GaW5pc2hlZFRhc2tzPT09MylicmVhazt9fX0KLXdoaWxlKHBlbmRpbmdFdmVudFF1ZXVlLmxlbmd0aCE9PTApe2NvbnN0IGV2ZW50PXBlbmRpbmdFdmVudFF1ZXVlLnBvcCgpO3RoaXMuYWRkRW50aXJlU2xpY2VIaWVyYXJjaHkoZXZlbnQpO3RoaXMuZm9sbG93U3Vic2VxdWVudFNsaWNlcyhldmVudCxwZW5kaW5nRXZlbnRRdWV1ZSx2aXNpdGVkLGZsb3dFdmVudHMpO319LGFkZE90aGVyQ2F1c2FsbHlSZWxhdGVkRXZlbnRzKHJlbmRlcmVySGVscGVyLHNvdXJjZVNsaWNlcyxmbG93RXZlbnRzLHNvcnRlZFJhc3Rlcml6ZXJTbGljZXMpe2NvbnN0IHBlbmRpbmdFdmVudFF1ZXVlPVtdO2NvbnN0IHZpc2l0ZWRFdmVudHM9bmV3IEV2ZW50U2V0KCk7bGV0IGJlZ2luSW1wbEZyYW1lPXVuZGVmaW5lZDtsZXQgcHJlcGFyZVRpbGVzPXVuZGVmaW5lZDtzb3J0ZWRSYXN0ZXJpemVyU2xpY2VzPVtdO3NvdXJjZVNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHNvdXJjZVNsaWNlKXtpZighdmlzaXRlZEV2ZW50cy5jb250YWlucyhzb3VyY2VTbGljZSkpe3Zpc2l0ZWRFdmVudHMucHVzaChzb3VyY2VTbGljZSk7cGVuZGluZ0V2ZW50UXVldWUucHVzaChzb3VyY2VTbGljZSk7fX0sdGhpcyk7d2hpbGUocGVuZGluZ0V2ZW50UXVldWUubGVuZ3RoIT09MCl7Y29uc3QgZXZlbnQ9cGVuZGluZ0V2ZW50UXVldWUucG9wKCk7dGhpcy5hZGRFbnRpcmVTbGljZUhpZXJhcmNoeShldmVudCk7dGhpcy5mb2xsb3dDdXJyZW50U2xpY2UoZXZlbnQscGVuZGluZ0V2ZW50UXVldWUsdmlzaXRlZEV2ZW50cyk7dGhpcy5mb2xsb3dTdWJzZXF1ZW50U2xpY2VzKGV2ZW50LHBlbmRpbmdFdmVudFF1ZXVlLHZpc2l0ZWRFdmVudHMsZmxvd0V2ZW50cyk7Y29uc3QgQ09NUE9TSVRPUl9QUkVQQVJFX1RJTEVTPSdUaWxlTWFuYWdlcjo6UHJlcGFyZVRpbGVzJztwcmVwYXJlVGlsZXM9ZXZlbnQuZmluZERlc2NlbmRlbnRTbGljZShDT01QT1NJVE9SX1BSRVBBUkVfVElMRVMpO2lmKHByZXBhcmVUaWxlcyl7dGhpcy5hZGRSYXN0ZXJpemF0aW9uRXZlbnRzKHByZXBhcmVUaWxlcyxyZW5kZXJlckhlbHBlcix2aXNpdGVkRXZlbnRzLGZsb3dFdmVudHMsc29ydGVkUmFzdGVyaXplclNsaWNlcyk7fQotY29uc3QgQ09NUE9TSVRPUl9PTl9CSUZEPSdTY2hlZHVsZXI6Ok9uQmVnaW5JbXBsRnJhbWVEZWFkbGluZSc7YmVnaW5JbXBsRnJhbWU9ZXZlbnQuZmluZERlc2NlbmRlbnRTbGljZShDT01QT1NJVE9SX09OX0JJRkQpO2lmKGJlZ2luSW1wbEZyYW1lKXt0aGlzLmJhY2t0cmFjZUZyb21EcmF3KGJlZ2luSW1wbEZyYW1lLHZpc2l0ZWRFdmVudHMpO319Ci1jb25zdCBJTlBVVF9HU1U9J0lucHV0TGF0ZW5jeTo6R2VzdHVyZVNjcm9sbFVwZGF0ZSc7aWYodGhpcy50aXRsZT09PUlOUFVUX0dTVSl7dGhpcy5hZGRTY3JvbGxVcGRhdGVFdmVudHMocmVuZGVyZXJIZWxwZXIpO319LGdldCBhc3NvY2lhdGVkRXZlbnRzKCl7aWYodGhpcy5hc3NvY2lhdGVkRXZlbnRzXy5sZW5ndGghPT0wKXtyZXR1cm4gdGhpcy5hc3NvY2lhdGVkRXZlbnRzXzt9Ci1jb25zdCBtb2RlbEluZGljZXM9dGhpcy5zdGFydFRocmVhZC5wYXJlbnQubW9kZWwubW9kZWxJbmRpY2VzO2NvbnN0IGZsb3dFdmVudHM9bW9kZWxJbmRpY2VzLmdldEZsb3dFdmVudHNXaXRoSWQodGhpcy5pZCk7aWYoZmxvd0V2ZW50cy5sZW5ndGg9PT0wKXtyZXR1cm4gdGhpcy5hc3NvY2lhdGVkRXZlbnRzXzt9Ci1jb25zdCBzb3VyY2VTbGljZXM9dGhpcy5hZGREaXJlY3RseUFzc29jaWF0ZWRFdmVudHMoZmxvd0V2ZW50cyk7Y29uc3QgcmVuZGVyZXJIZWxwZXI9dGhpcy5nZXRSZW5kZXJlckhlbHBlcihzb3VyY2VTbGljZXMpO3RoaXMuYWRkT3RoZXJDYXVzYWxseVJlbGF0ZWRFdmVudHMocmVuZGVyZXJIZWxwZXIsc291cmNlU2xpY2VzLGZsb3dFdmVudHMpO3JldHVybiB0aGlzLmFzc29jaWF0ZWRFdmVudHNfO30sZ2V0IGlucHV0TGF0ZW5jeSgpe2lmKCEoJ2RhdGEnaW4gdGhpcy5hcmdzKSlyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IGRhdGE9dGhpcy5hcmdzLmRhdGE7aWYoIShFTkRfQ09NUF9OQU1FIGluIGRhdGEpKXJldHVybiB1bmRlZmluZWQ7bGV0IGxhdGVuY3k9MDtjb25zdCBlbmRUaW1lPWRhdGFbRU5EX0NPTVBfTkFNRV0udGltZTtpZihPUklHSU5BTF9DT01QX05BTUUgaW4gZGF0YSl7bGF0ZW5jeT1lbmRUaW1lLWRhdGFbT1JJR0lOQUxfQ09NUF9OQU1FXS50aW1lO31lbHNlIGlmKFVJX0NPTVBfTkFNRSBpbiBkYXRhKXtsYXRlbmN5PWVuZFRpbWUtZGF0YVtVSV9DT01QX05BTUVdLnRpbWU7fWVsc2UgaWYoQkVHSU5fQ09NUF9OQU1FIGluIGRhdGEpe2xhdGVuY3k9ZW5kVGltZS1kYXRhW0JFR0lOX0NPTVBfTkFNRV0udGltZTt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoJ05vIHZhbGlkIGJlZ2luIGxhdGVuY3kgY29tcG9uZW50Jyk7fQotcmV0dXJuIGxhdGVuY3k7fX07Y29uc3QgZXZlbnRUeXBlTmFtZXM9WydDaGFyJywnQ29udGV4dE1lbnUnLCdHZXN0dXJlQ2xpY2snLCdHZXN0dXJlRmxpbmdDYW5jZWwnLCdHZXN0dXJlRmxpbmdTdGFydCcsJ0dlc3R1cmVTY3JvbGxCZWdpbicsJ0dlc3R1cmVTY3JvbGxFbmQnLCdHZXN0dXJlU2Nyb2xsVXBkYXRlJywnR2VzdHVyZVNob3dQcmVzcycsJ0dlc3R1cmVUYXAnLCdHZXN0dXJlVGFwQ2FuY2VsJywnR2VzdHVyZVRhcERvd24nLCdHZXN0dXJlUGluY2hCZWdpbicsJ0dlc3R1cmVQaW5jaEVuZCcsJ0dlc3R1cmVQaW5jaFVwZGF0ZScsJ0tleURvd24nLCdLZXlVcCcsJ01vdXNlRG93bicsJ01vdXNlRW50ZXInLCdNb3VzZUxlYXZlJywnTW91c2VNb3ZlJywnTW91c2VVcCcsJ01vdXNlV2hlZWwnLCdSYXdLZXlEb3duJywnU2Nyb2xsVXBkYXRlJywnVG91Y2hDYW5jZWwnLCdUb3VjaEVuZCcsJ1RvdWNoTW92ZScsJ1RvdWNoU3RhcnQnXTtjb25zdCBhbGxUeXBlTmFtZXM9WydJbnB1dExhdGVuY3knXTtldmVudFR5cGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50VHlwZU5hbWUpe2FsbFR5cGVOYW1lcy5wdXNoKCdJbnB1dExhdGVuY3k6JytldmVudFR5cGVOYW1lKTthbGxUeXBlTmFtZXMucHVzaCgnSW5wdXRMYXRlbmN5OjonK2V2ZW50VHlwZU5hbWUpO30pO0FzeW5jU2xpY2Uuc3ViVHlwZXMucmVnaXN0ZXIoSW5wdXRMYXRlbmN5QXN5bmNTbGljZSx7dHlwZU5hbWVzOmFsbFR5cGVOYW1lcyxjYXRlZ29yeVBhcnRzOlsnbGF0ZW5jeUluZm8nXX0pO3JldHVybntJbnB1dExhdGVuY3lBc3luY1NsaWNlLElOUFVUX0VWRU5UX1RZUEVfTkFNRVMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gU2luZWJvd0NvbG9yR2VuZXJhdG9yKG9wdF9hLG9wdF9icmlnaHRuZXNzKXt0aGlzLmFfPShvcHRfYT09PXVuZGVmaW5lZCk/MTpvcHRfYTt0aGlzLmJyaWdodG5lc3NfPShvcHRfYnJpZ2h0bmVzcz09PXVuZGVmaW5lZCk/MTpvcHRfYnJpZ2h0bmVzczt0aGlzLmNvbG9ySW5kZXhfPTA7dGhpcy5rZXlUb0NvbG9yPXt9O30KLVNpbmVib3dDb2xvckdlbmVyYXRvci5wcm90b3R5cGU9e2NvbG9yRm9yS2V5KGtleSl7aWYoIXRoaXMua2V5VG9Db2xvcltrZXldKXt0aGlzLmtleVRvQ29sb3Jba2V5XT10aGlzLm5leHRDb2xvcigpO30KLXJldHVybiB0aGlzLmtleVRvQ29sb3Jba2V5XTt9LG5leHRDb2xvcigpe2NvbnN0IGNvbXBvbmVudHM9U2luZWJvd0NvbG9yR2VuZXJhdG9yLm50aENvbG9yKHRoaXMuY29sb3JJbmRleF8rKyk7cmV0dXJuIHRyLmIuQ29sb3IuZnJvbVN0cmluZyhTaW5lYm93Q29sb3JHZW5lcmF0b3IuY2FsY3VsYXRlQ29sb3IoY29tcG9uZW50c1swXSxjb21wb25lbnRzWzFdLGNvbXBvbmVudHNbMl0sdGhpcy5hXyx0aGlzLmJyaWdodG5lc3NfKSk7fX07U2luZWJvd0NvbG9yR2VuZXJhdG9yLlBIST0oMStNYXRoLnNxcnQoNSkpLzI7U2luZWJvd0NvbG9yR2VuZXJhdG9yLnNpbmVib3dfPWZ1bmN0aW9uKGgpe2grPTAuNTtoPS1oO2xldCByPU1hdGguc2luKE1hdGguUEkqaCk7bGV0IGc9TWF0aC5zaW4oTWF0aC5QSSooaCsxLzMpKTtsZXQgYj1NYXRoLnNpbihNYXRoLlBJKihoKzIvMykpO3IqPXI7Zyo9ZztiKj1iO2NvbnN0IHk9MiooMC4yOTg5KnIrMC41ODcwKmcrMC4xMTQwKmIpO3IvPXk7Zy89eTtiLz15O3JldHVyblsyNTYqciwyNTYqZywyNTYqYl07fTtTaW5lYm93Q29sb3JHZW5lcmF0b3IubnRoQ29sb3I9ZnVuY3Rpb24obil7cmV0dXJuIFNpbmVib3dDb2xvckdlbmVyYXRvci5zaW5lYm93XyhuKnRoaXMuUEhJKTt9O1NpbmVib3dDb2xvckdlbmVyYXRvci5jYWxjdWxhdGVDb2xvcj1mdW5jdGlvbihyLGcsYixhLGJyaWdodG5lc3Mpe2lmKGJyaWdodG5lc3M8PTEpe3IqPWJyaWdodG5lc3M7Zyo9YnJpZ2h0bmVzcztiKj1icmlnaHRuZXNzO31lbHNle3I9dHIuYi5tYXRoLmxlcnAodHIuYi5tYXRoLm5vcm1hbGl6ZShicmlnaHRuZXNzLDEsMiksciwyNTUpO2c9dHIuYi5tYXRoLmxlcnAodHIuYi5tYXRoLm5vcm1hbGl6ZShicmlnaHRuZXNzLDEsMiksZywyNTUpO2I9dHIuYi5tYXRoLmxlcnAodHIuYi5tYXRoLm5vcm1hbGl6ZShicmlnaHRuZXNzLDEsMiksYiwyNTUpO30KLXI9TWF0aC5yb3VuZChyKTtnPU1hdGgucm91bmQoZyk7Yj1NYXRoLnJvdW5kKGIpO3JldHVybidyZ2JhKCcrcisnLCcrZysnLCcrYisnLCAnK2ErJyknO307cmV0dXJue1NpbmVib3dDb2xvckdlbmVyYXRvcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgU0FNRV9BU19QQVJFTlQ9J3NhbWUtYXMtcGFyZW50Jztjb25zdCBUSVRMRVNfRk9SX1VTRVJfRlJJRU5ETFlfQ0FURUdPUlk9e2NvbXBvc2l0ZTpbJ0NvbXBvc2l0aW5nSW5wdXRzVXBkYXRlcjo6dXBkYXRlJywnVGhyZWFkUHJveHk6OlNldE5lZWRzVXBkYXRlTGF5ZXJzJywnTGF5ZXJUcmVlSG9zdDo6VXBkYXRlTGF5ZXJzOjpDYWxjRHJhd1Byb3BzJywnVXBkYXRlTGF5ZXJUcmVlJyxdLGdjOlsnbWlub3JHQycsJ21ham9yR0MnLCdNYWpvckdDJywnTWlub3JHQycsJ1Y4LkdDU2NhdmVuZ2VyJywnVjguR0NJbmNyZW1lbnRhbE1hcmtpbmcnLCdWOC5HQ0lkbGVOb3RpZmljYXRpb24nLCdWOC5HQ0NvbnRleHQnLCdWOC5HQ0NvbXBhY3RvcicsJ1Y4R0NDb250cm9sbGVyOjp0cmFjZURPTVdyYXBwZXJzJyxdLGlmcmFtZV9jcmVhdGlvbjpbJ1dlYkxvY2FsRnJhbWVJbXBsOjpjcmVhdGVDaGlsZGZyYW1lJyxdLGltYWdlRGVjb2RlOlsnRGVjb2RlIEltYWdlJywnSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlJywnSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlQW5kU2NhbGUnLCdJbWFnZVJlc291cmNlQ29udGVudDo6dXBkYXRlSW1hZ2UnLF0saW5wdXQ6WydIaXRUZXN0JywnU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCcsJ0V2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQnLF0sbGF5b3V0OlsnRGlzcGxheUl0ZW1MaXN0OjpGaW5hbGl6ZScsJ0ludGVyc2VjdGlvbk9ic2VydmVyQ29udHJvbGxlcjo6Y29tcHV0ZVRyYWNrZWRJbnRlcnNlY3Rpb25PYnNlcnZhdGlvbnMnLCdMb2NhbEZyYW1lVmlldzo6aW52YWxpZGF0ZVRyZWUnLCdMb2NhbEZyYW1lVmlldzo6bGF5b3V0JywnTG9jYWxGcmFtZVZpZXc6OnBlcmZvcm1MYXlvdXQnLCdMb2NhbEZyYW1lVmlldzo6cGVyZm9ybVBvc3RMYXlvdXRUYXNrcycsJ0xvY2FsRnJhbWVWaWV3OjpwZXJmb3JtUHJlTGF5b3V0VGFza3MnLCdGcmFtZVZpZXc6OmludmFsaWRhdGVUcmVlJywnRnJhbWVWaWV3OjpsYXlvdXQnLCdGcmFtZVZpZXc6OnBlcmZvcm1MYXlvdXQnLCdGcmFtZVZpZXc6OnBlcmZvcm1Qb3N0TGF5b3V0VGFza3MnLCdGcmFtZVZpZXc6OnBlcmZvcm1QcmVMYXlvdXRUYXNrcycsJ0xheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0JywnTGF5ZXJUcmVlSG9zdEluUHJvY2Vzczo6VXBkYXRlTGF5ZXJzOjpCdWlsZFByb3BlcnR5VHJlZXMnLCdMYXlvdXQnLCdMYXlvdXRWaWV3OjpoaXRUZXN0JywnUGFpbnRMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dCcsJ1Jlc291cmNlTG9hZFByaW9yaXR5T3B0aW1pemVyOjp1cGRhdGVBbGxJbWFnZVJlc291cmNlUHJpb3JpdGllcycsJ1dlYlZpZXdJbXBsOjpsYXlvdXQnLF0scGFyc2VIVE1MOlsnQmFja2dyb3VuZEhUTUxQYXJzZXI6OnB1bXBUb2tlbml6ZXInLCdCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6c2VuZFRva2Vuc1RvTWFpblRocmVhZCcsJ0hUTUxEb2N1bWVudFBhcnNlcjo6ZGlkUmVjZWl2ZVBhcnNlZENodW5rRnJvbUJhY2tncm91bmRQYXJzZXInLCdIVE1MRG9jdW1lbnRQYXJzZXI6OmRvY3VtZW50RWxlbWVudEF2YWlsYWJsZScsJ0hUTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5UGVuZGluZ1Rva2VuaXplZENodW5rcycsJ0hUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc1BhcnNlZENodW5rRnJvbUJhY2tncm91bmRQYXJzZXInLCdIVE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NUb2tlbml6ZWRDaHVua0Zyb21CYWNrZ3JvdW5kUGFyc2VyJywnUGFyc2VIVE1MJyxdLHJhc3RlcjpbJ0Rpc3BsYXlMaXN0UmFzdGVyU291cmNlOjpQZXJmb3JtU29saWRDb2xvckFuYWx5c2lzJywnUGljdHVyZTo6UmFzdGVyJywnUmFzdGVyQnVmZmVySW1wbDo6UGxheWJhY2snLCdSYXN0ZXJUYXNrJywnUmFzdGVyaXplclRhc2tJbXBsOjpSdW5PbldvcmtlclRocmVhZCcsJ1NrQ2FudmFzOjpkcmF3SW1hZ2VSZWN0KCknLCdTa0NhbnZhczo6ZHJhd1BpY3R1cmUoKScsJ1NrQ2FudmFzOjpkcmF3VGV4dEJsb2IoKScsJ1RpbGVUYXNrV29ya2VyUG9vbDo6UGxheWJhY2tUb01lbW9yeScsXSxyZWNvcmQ6WydDYW52YXMyRExheWVyQnJpZGdlOjpmbHVzaFJlY29yZGluZ09ubHknLCdDb21wb3NpdGluZ1JlcXVpcmVtZW50c1VwZGF0ZXI6OnVwZGF0ZVJlY3Vyc2l2ZScsJ0NvbnRlbnRMYXllckRlbGVnYXRlOjpwYWludENvbnRlbnRzJywnRGVwcmVjYXRlZFBhaW50TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVJZk5lZWRlZFJlY3Vyc2l2ZScsJ0RlcHJlY2F0ZWRQYWludExheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dCcsJ0xvY2FsRnJhbWVWaWV3OjpwYWludFRyZWUnLCdMb2NhbEZyYW1lVmlldzo6cHJlUGFpbnQnLCdQYWludCcsJ1BhaW50Q29udHJvbGxlcjo6Y29tbWl0TmV3RGlzcGxheUl0ZW1zJywnUGFpbnRMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUlmTmVlZGVkUmVjdXJzaXZlJywnUGljdHVyZTo6UmVjb3JkJywnUGljdHVyZUxheWVyOjpVcGRhdGUnLCdSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dCcsXSxzdHlsZTpbJ0NTU1BhcnNlckltcGw6OnBhcnNlU3R5bGVTaGVldC5wYXJzZScsJ0NTU1BhcnNlckltcGw6OnBhcnNlU3R5bGVTaGVldC50b2tlbml6ZScsJ0RvY3VtZW50OjpyZWJ1aWxkTGF5b3V0VHJlZScsJ0RvY3VtZW50OjpyZWNhbGNTdHlsZScsJ0RvY3VtZW50Ojp1cGRhdGVBY3RpdmVTdHlsZScsJ0RvY3VtZW50Ojp1cGRhdGVTdHlsZScsJ0RvY3VtZW50Ojp1cGRhdGVTdHlsZUludmFsaWRhdGlvbklmTmVlZGVkJywnTG9jYWxGcmFtZVZpZXc6OnVwZGF0ZVN0eWxlQW5kTGF5b3V0SWZOZWVkZWRSZWN1cnNpdmUnLCdQYXJzZUF1dGhvclN0eWxlU2hlZXQnLCdSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldCcsJ1N0eWxlRWxlbWVudDo6cHJvY2Vzc1N0eWxlU2hlZXQnLCdTdHlsZUVuZ2luZTo6Y3JlYXRlUmVzb2x2ZXInLCdTdHlsZUVuZ2luZTo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMnLCdTdHlsZVNoZWV0Q29udGVudHM6OnBhcnNlQXV0aG9yU3R5bGVTaGVldCcsJ1VwZGF0ZUxheW91dFRyZWUnLF0sc2NyaXB0X3BhcnNlX2FuZF9jb21waWxlOlsnVjguQ29tcGlsZUZ1bGxDb2RlJywnVjguTmV3Q29udGV4dCcsJ1Y4LlBhcnNlJywnVjguUGFyc2VMYXp5JywnVjguUmVjb21waWxlU3luY2hyb25vdXMnLCdWOC5TY3JpcHRDb21waWxlcicsJ3Y4LmNvbXBpbGUnLCd2OC5wYXJzZU9uQmFja2dyb3VuZCcsXSxzY3JpcHRfZXhlY3V0ZTpbJ0V2YWx1YXRlU2NyaXB0JywnRnVuY3Rpb25DYWxsJywnSFRNTFBhcnNlclNjcmlwdFJ1bm5lciBFeGVjdXRlU2NyaXB0JywnVjguRXhlY3V0ZScsJ1Y4LlJ1bk1pY3JvdGFza3MnLCdWOC5UYXNrJywnV2luZG93UHJveHk6OmluaXRpYWxpemUnLCd2OC5jYWxsRnVuY3Rpb24nLCd2OC5ydW4nLF0scmVzb3VyY2VfbG9hZGluZzpbJ1JlbmRlckZyYW1lSW1wbDo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkJywnUmVuZGVyRnJhbWVJbXBsOjpkaWRGaW5pc2hMb2FkJywnUmVzb3VyY2U6OmFwcGVuZERhdGEnLCdSZXNvdXJjZURpc3BhdGNoZXI6Ok9uUmVjZWl2ZWREYXRhJywnUmVzb3VyY2VEaXNwYXRjaGVyOjpPblJlY2VpdmVkUmVzcG9uc2UnLCdSZXNvdXJjZURpc3BhdGNoZXI6Ok9uUmVxdWVzdENvbXBsZXRlJywnUmVzb3VyY2VGZXRjaGVyOjpyZXF1ZXN0UmVzb3VyY2UnLCdXZWJVUkxMb2FkZXJJbXBsOjpDb250ZXh0OjpDYW5jZWwnLCdXZWJVUkxMb2FkZXJJbXBsOjpDb250ZXh0OjpPbkNvbXBsZXRlZFJlcXVlc3QnLCdXZWJVUkxMb2FkZXJJbXBsOjpDb250ZXh0OjpPblJlY2VpdmVkRGF0YScsJ1dlYlVSTExvYWRlckltcGw6OkNvbnRleHQ6Ok9uUmVjZWl2ZWRSZWRpcmVjdCcsJ1dlYlVSTExvYWRlckltcGw6OkNvbnRleHQ6Ok9uUmVjZWl2ZWRSZXNwb25zZScsJ1dlYlVSTExvYWRlckltcGw6OkNvbnRleHQ6OlN0YXJ0JywnV2ViVVJMTG9hZGVySW1wbDo6bG9hZEFzeW5jaHJvbm91c2x5JywnV2ViVVJMTG9hZGVySW1wbDo6bG9hZFN5bmNocm9ub3VzbHknLCdjb250ZW50Ojptb2pvbTo6VVJMTG9hZGVyQ2xpZW50JyxdLHJlbmRlcmVyX21pc2M6WydEZWNvZGVGb250JywnVGhyZWFkU3RhdGU6OmNvbXBsZXRlU3dlZXAnLF0sdjhfcnVudGltZTpbXSxbU0FNRV9BU19QQVJFTlRdOlsnU3luY0NoYW5uZWw6OlNlbmQnLF19O2NvbnN0IENPTE9SX0ZPUl9VU0VSX0ZSSUVORExZX0NBVEVHT1JZPW5ldyB0ci5iLlNpbmVib3dDb2xvckdlbmVyYXRvcigpO2NvbnN0IFVTRVJfRlJJRU5ETFlfQ0FURUdPUllfRk9SX1RJVExFPW5ldyBNYXAoKTtmb3IoY29uc3QgY2F0ZWdvcnkgaW4gVElUTEVTX0ZPUl9VU0VSX0ZSSUVORExZX0NBVEVHT1JZKXtUSVRMRVNfRk9SX1VTRVJfRlJJRU5ETFlfQ0FURUdPUllbY2F0ZWdvcnldLmZvckVhY2goZnVuY3Rpb24odGl0bGUpe1VTRVJfRlJJRU5ETFlfQ0FURUdPUllfRk9SX1RJVExFLnNldCh0aXRsZSxjYXRlZ29yeSk7fSk7fQotY29uc3QgVVNFUl9GUklFTkRMWV9DQVRFR09SWV9GT1JfRVZFTlRfQ0FURUdPUlk9e25ldGxvZzonbmV0JyxvdmVyaGVhZDonb3ZlcmhlYWQnLHN0YXJ0dXA6J3N0YXJ0dXAnLGdwdTonZ3B1Jyx9O2Z1bmN0aW9uIENocm9tZVVzZXJGcmllbmRseUNhdGVnb3J5RHJpdmVyKCl7fQotQ2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIuZnJvbUV2ZW50PWZ1bmN0aW9uKGV2ZW50KXtsZXQgdXNlckZyaWVuZGx5Q2F0ZWdvcnk9VVNFUl9GUklFTkRMWV9DQVRFR09SWV9GT1JfVElUTEUuZ2V0KGV2ZW50LnRpdGxlKTtpZih1c2VyRnJpZW5kbHlDYXRlZ29yeSl7aWYodXNlckZyaWVuZGx5Q2F0ZWdvcnk9PT1TQU1FX0FTX1BBUkVOVCl7aWYoZXZlbnQucGFyZW50U2xpY2Upe3JldHVybiBDaHJvbWVVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlci5mcm9tRXZlbnQoZXZlbnQucGFyZW50U2xpY2UpO319ZWxzZXtyZXR1cm4gdXNlckZyaWVuZGx5Q2F0ZWdvcnk7fX0KLWNvbnN0IGV2ZW50Q2F0ZWdvcnlQYXJ0cz10ci5iLmdldENhdGVnb3J5UGFydHMoZXZlbnQuY2F0ZWdvcnkpO2ZvcihsZXQgaT0wO2k8ZXZlbnRDYXRlZ29yeVBhcnRzLmxlbmd0aDsrK2kpe2NvbnN0IGV2ZW50Q2F0ZWdvcnk9ZXZlbnRDYXRlZ29yeVBhcnRzW2ldO3VzZXJGcmllbmRseUNhdGVnb3J5PVVTRVJfRlJJRU5ETFlfQ0FURUdPUllfRk9SX0VWRU5UX0NBVEVHT1JZW2V2ZW50Q2F0ZWdvcnldO2lmKHVzZXJGcmllbmRseUNhdGVnb3J5KXtyZXR1cm4gdXNlckZyaWVuZGx5Q2F0ZWdvcnk7fX0KLXJldHVybidvdGhlcic7fTtDaHJvbWVVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlci5nZXRDb2xvcj1mdW5jdGlvbih1ZmMpe3JldHVybiBDT0xPUl9GT1JfVVNFUl9GUklFTkRMWV9DQVRFR09SWS5jb2xvckZvcktleSh1ZmMpO307Q2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIuQUxMX1RJVExFUz1bJ290aGVyJ107Zm9yKGNvbnN0IGNhdGVnb3J5IGluIFRJVExFU19GT1JfVVNFUl9GUklFTkRMWV9DQVRFR09SWSl7aWYoY2F0ZWdvcnk9PT1TQU1FX0FTX1BBUkVOVCljb250aW51ZTtDaHJvbWVVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlci5BTExfVElUTEVTLnB1c2goY2F0ZWdvcnkpO30KLWZvcihjb25zdCBjYXRlZ29yeSBvZiBPYmplY3QudmFsdWVzKFVTRVJfRlJJRU5ETFlfQ0FURUdPUllfRk9SX0VWRU5UX0NBVEVHT1JZKSl7Q2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIuQUxMX1RJVExFUy5wdXNoKGNhdGVnb3J5KTt9Ci1DaHJvbWVVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlci5BTExfVElUTEVTLnNvcnQoKTtmb3IoY29uc3QgY2F0ZWdvcnkgb2YgQ2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIuQUxMX1RJVExFUyl7Q2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIuZ2V0Q29sb3IoY2F0ZWdvcnkpO30KLXJldHVybntDaHJvbWVVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7cmV0dXJue0JST1dTRVJfUFJPQ0VTU19QSURfUkVGOi0xLE9CSkVDVF9ERUZBVUxUX1NDT1BFOidwdHInLExPQ0FMX0lEX1BIQVNFUzpuZXcgU2V0KFsnTicsJ0QnLCdPJywnKCcsJyknXSl9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5hdWRpdHMnLGZ1bmN0aW9uKCl7Y29uc3QgQXVkaXRvcj10ci5jLkF1ZGl0b3I7ZnVuY3Rpb24gQ2hyb21lQXVkaXRvcihtb2RlbCl7QXVkaXRvci5jYWxsKHRoaXMsbW9kZWwpO2NvbnN0IG1vZGVsSGVscGVyPXRoaXMubW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYobW9kZWxIZWxwZXImJm1vZGVsSGVscGVyLmJyb3dzZXJIZWxwZXIpe3RoaXMubW9kZWxIZWxwZXI9bW9kZWxIZWxwZXI7fWVsc2V7dGhpcy5tb2RlbEhlbHBlcj11bmRlZmluZWQ7fX0KLUNocm9tZUF1ZGl0b3IucHJvdG90eXBlPXtfX3Byb3RvX186QXVkaXRvci5wcm90b3R5cGUscnVuQW5ub3RhdGUoKXtpZighdGhpcy5tb2RlbEhlbHBlcilyZXR1cm47Zm9yKGNvbnN0IHBpZCBpbiB0aGlzLm1vZGVsSGVscGVyLnJlbmRlcmVySGVscGVycyl7Y29uc3QgcmVuZGVyZXJIZWxwZXI9dGhpcy5tb2RlbEhlbHBlci5yZW5kZXJlckhlbHBlcnNbcGlkXTtpZihyZW5kZXJlckhlbHBlci5pc0Nocm9tZVRyYWNpbmdVSSl7cmVuZGVyZXJIZWxwZXIucHJvY2Vzcy5pbXBvcnRhbnQ9ZmFsc2U7fX19LGluc3RhbGxVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlcklmTmVlZGVkKCl7dGhpcy5tb2RlbC5hZGRVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlcih0ci5lLmNocm9tZS5DaHJvbWVVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlcik7fSxydW5BdWRpdCgpe2lmKCF0aGlzLm1vZGVsSGVscGVyKXJldHVybjt0aGlzLm1vZGVsLnJlcGxhY2VQSURSZWZzSW5QYXRjaHVwcyh0ci5tb2RlbC5CUk9XU0VSX1BST0NFU1NfUElEX1JFRix0aGlzLm1vZGVsSGVscGVyLmJyb3dzZXJQcm9jZXNzLnBpZCk7dGhpcy5tb2RlbC5hcHBseU9iamVjdFJlZlBhdGNodXBzKCk7fX07QXVkaXRvci5yZWdpc3RlcihDaHJvbWVBdWRpdG9yKTtyZXR1cm57Q2hyb21lQXVkaXRvcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgS05PV05fUFJPUEVSVElFUz17YWJzWDoxLGFic1k6MSxhZGRyZXNzOjEsYW5vbnltb3VzOjEsY2hpbGROZWVkczoxLGNoaWxkcmVuOjEsY2xhc3NOYW1lczoxLGNvbDoxLGNvbFNwYW46MSxmbG9hdDoxLGhlaWdodDoxLGh0bWxJZDoxLG5hbWU6MSxwb3NDaGlsZE5lZWRzOjEscG9zaXRpb25lZDoxLHBvc2l0aW9uZWRNb3ZlbWVudDoxLHJlbFg6MSxyZWxZOjEscmVsYXRpdmVQb3NpdGlvbmVkOjEscm93OjEscm93U3BhbjoxLHNlbGZOZWVkczoxLHN0aWNreVBvc2l0aW9uZWQ6MSx0YWc6MSx3aWR0aDoxfTtmdW5jdGlvbiBMYXlvdXRPYmplY3Qoc25hcHNob3QsYXJncyl7dGhpcy5zbmFwc2hvdF89c25hcHNob3Q7dGhpcy5pZF89YXJncy5hZGRyZXNzO3RoaXMubmFtZV89YXJncy5uYW1lO3RoaXMuY2hpbGRMYXlvdXRPYmplY3RzXz1bXTt0aGlzLm90aGVyUHJvcGVydGllc189e307dGhpcy50YWdfPWFyZ3MudGFnO3RoaXMucmVsYXRpdmVSZWN0Xz10ci5iLm1hdGguUmVjdC5mcm9tWFlXSChhcmdzLnJlbFgsYXJncy5yZWxZLGFyZ3Mud2lkdGgsYXJncy5oZWlnaHQpO3RoaXMuYWJzb2x1dGVSZWN0Xz10ci5iLm1hdGguUmVjdC5mcm9tWFlXSChhcmdzLmFic1gsYXJncy5hYnNZLGFyZ3Mud2lkdGgsYXJncy5oZWlnaHQpO3RoaXMuaXNGbG9hdF89YXJncy5mbG9hdDt0aGlzLmlzU3RpY2t5UG9zaXRpb25lZF89YXJncy5zdGlja3lQb3NpdGlvbmVkO3RoaXMuaXNQb3NpdGlvbmVkXz1hcmdzLnBvc2l0aW9uZWQ7dGhpcy5pc1JlbGF0aXZlUG9zaXRpb25lZF89YXJncy5yZWxhdGl2ZVBvc2l0aW9uZWQ7dGhpcy5pc0Fub255bW91c189YXJncy5hbm9ueW1vdXM7dGhpcy5odG1sSWRfPWFyZ3MuaHRtbElkO3RoaXMuY2xhc3NOYW1lc189YXJncy5jbGFzc05hbWVzO3RoaXMubmVlZHNMYXlvdXRSZWFzb25zXz1bXTtpZihhcmdzLnNlbGZOZWVkcyl7dGhpcy5uZWVkc0xheW91dFJlYXNvbnNfLnB1c2goJ3NlbGYnKTt9Ci1pZihhcmdzLmNoaWxkTmVlZHMpe3RoaXMubmVlZHNMYXlvdXRSZWFzb25zXy5wdXNoKCdjaGlsZCcpO30KLWlmKGFyZ3MucG9zQ2hpbGROZWVkcyl7dGhpcy5uZWVkc0xheW91dFJlYXNvbnNfLnB1c2goJ3Bvc2l0aW9uZWRDaGlsZCcpO30KLWlmKGFyZ3MucG9zaXRpb25lZE1vdmVtZW50KXt0aGlzLm5lZWRzTGF5b3V0UmVhc29uc18ucHVzaCgncG9zaXRpb25lZE1vdmVtZW50Jyk7fQotdGhpcy50YWJsZVJvd189YXJncy5yb3c7dGhpcy50YWJsZUNvbF89YXJncy5jb2w7dGhpcy50YWJsZVJvd1NwYW5fPWFyZ3Mucm93U3Bhbjt0aGlzLnRhYmxlQ29sU3Bhbl89YXJncy5jb2xTcGFuO2lmKGFyZ3MuY2hpbGRyZW4pe2FyZ3MuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjaGlsZCl7dGhpcy5jaGlsZExheW91dE9iamVjdHNfLnB1c2gobmV3IExheW91dE9iamVjdChzbmFwc2hvdCxjaGlsZCkpO30uYmluZCh0aGlzKSk7fQotZm9yKGNvbnN0IHByb3BlcnR5IGluIGFyZ3Mpe2lmKCFLTk9XTl9QUk9QRVJUSUVTW3Byb3BlcnR5XSl7dGhpcy5vdGhlclByb3BlcnRpZXNfW3Byb3BlcnR5XT1hcmdzW3Byb3BlcnR5XTt9fX0KLUxheW91dE9iamVjdC5wcm90b3R5cGU9e2dldCBzbmFwc2hvdCgpe3JldHVybiB0aGlzLnNuYXBzaG90Xzt9LGdldCBpZCgpe3JldHVybiB0aGlzLmlkXzt9LGdldCBuYW1lKCl7cmV0dXJuIHRoaXMubmFtZV87fSxnZXQgdGFnKCl7cmV0dXJuIHRoaXMudGFnXzt9LGdldCByZWxhdGl2ZVJlY3QoKXtyZXR1cm4gdGhpcy5yZWxhdGl2ZVJlY3RfO30sZ2V0IGFic29sdXRlUmVjdCgpe3JldHVybiB0aGlzLmFic29sdXRlUmVjdF87fSxnZXQgaXNQb3NpdGlvbmVkKCl7cmV0dXJuIHRoaXMuaXNQb3NpdGlvbmVkXzt9LGdldCBpc0Zsb2F0KCl7cmV0dXJuIHRoaXMuaXNGbG9hdF87fSxnZXQgaXNTdGlja3lQb3NpdGlvbmVkKCl7cmV0dXJuIHRoaXMuaXNTdGlja3lQb3NpdGlvbmVkXzt9LGdldCBpc1JlbGF0aXZlUG9zaXRpb25lZCgpe3JldHVybiB0aGlzLmlzUmVsYXRpdmVQb3NpdGlvbmVkXzt9LGdldCBpc0Fub255bW91cygpe3JldHVybiB0aGlzLmlzQW5vbnltb3VzXzt9LGdldCB0YWJsZVJvdygpe3JldHVybiB0aGlzLnRhYmxlUm93Xzt9LGdldCB0YWJsZUNvbCgpe3JldHVybiB0aGlzLnRhYmxlQ29sXzt9LGdldCB0YWJsZVJvd1NwYW4oKXtyZXR1cm4gdGhpcy50YWJsZVJvd1NwYW5fO30sZ2V0IHRhYmxlQ29sU3Bhbigpe3JldHVybiB0aGlzLnRhYmxlQ29sU3Bhbl87fSxnZXQgaHRtbElkKCl7cmV0dXJuIHRoaXMuaHRtbElkXzt9LGdldCBjbGFzc05hbWVzKCl7cmV0dXJuIHRoaXMuY2xhc3NOYW1lc187fSxnZXQgbmVlZHNMYXlvdXRSZWFzb25zKCl7cmV0dXJuIHRoaXMubmVlZHNMYXlvdXRSZWFzb25zXzt9LGdldCBoYXNDaGlsZExheW91dE9iamVjdHMoKXtyZXR1cm4gdGhpcy5jaGlsZExheW91dE9iamVjdHNfLmxlbmd0aD4wO30sZ2V0IGNoaWxkTGF5b3V0T2JqZWN0cygpe3JldHVybiB0aGlzLmNoaWxkTGF5b3V0T2JqZWN0c187fSx0cmF2ZXJzZVRyZWUoY2Isb3B0X3RoaXMpe2NiLmNhbGwob3B0X3RoaXMsdGhpcyk7aWYoIXRoaXMuaGFzQ2hpbGRMYXlvdXRPYmplY3RzKXJldHVybjt0aGlzLmNoaWxkTGF5b3V0T2JqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKXtjaGlsZC50cmF2ZXJzZVRyZWUoY2Isb3B0X3RoaXMpO30pO30sZ2V0IG90aGVyUHJvcGVydHlOYW1lcygpe2NvbnN0IG5hbWVzPVtdO2Zvcihjb25zdCBuYW1lIGluIHRoaXMub3RoZXJQcm9wZXJ0aWVzXyl7bmFtZXMucHVzaChuYW1lKTt9Ci1yZXR1cm4gbmFtZXM7fSxnZXRQcm9wZXJ0eShuYW1lKXtyZXR1cm4gdGhpcy5vdGhlclByb3BlcnRpZXNfW25hbWVdO30sZ2V0IHByZXZpb3VzU25hcHNob3RMYXlvdXRPYmplY3QoKXtpZighdGhpcy5zbmFwc2hvdC5wcmV2aW91c1NuYXBzaG90KXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMuc25hcHNob3QucHJldmlvdXNTbmFwc2hvdC5nZXRMYXlvdXRPYmplY3RCeUlkKHRoaXMuaWQpO30sZ2V0IG5leHRTbmFwc2hvdExheW91dE9iamVjdCgpe2lmKCF0aGlzLnNuYXBzaG90Lm5leHRTbmFwc2hvdClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLnNuYXBzaG90Lm5leHRTbmFwc2hvdC5nZXRMYXlvdXRPYmplY3RCeUlkKHRoaXMuaWQpO319O3JldHVybntMYXlvdXRPYmplY3QsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2hyb21lJyxmdW5jdGlvbigpe2NvbnN0IE9iamVjdFNuYXBzaG90PXRyLm1vZGVsLk9iamVjdFNuYXBzaG90O2NvbnN0IE9iamVjdEluc3RhbmNlPXRyLm1vZGVsLk9iamVjdEluc3RhbmNlO2Z1bmN0aW9uIExheW91dFRyZWVJbnN0YW5jZSgpe09iamVjdEluc3RhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9Ci1MYXlvdXRUcmVlSW5zdGFuY2UucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0SW5zdGFuY2UucHJvdG90eXBlLH07T2JqZWN0SW5zdGFuY2Uuc3ViVHlwZXMucmVnaXN0ZXIoTGF5b3V0VHJlZUluc3RhbmNlLHt0eXBlTmFtZTonTGF5b3V0VHJlZSd9KTtmdW5jdGlvbiBMYXlvdXRUcmVlU25hcHNob3QoKXtPYmplY3RTbmFwc2hvdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5yb290TGF5b3V0T2JqZWN0PW5ldyB0ci5lLmNocm9tZS5MYXlvdXRPYmplY3QodGhpcyx0aGlzLmFyZ3MpO30KLUxheW91dFRyZWVTbmFwc2hvdC5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3RTbmFwc2hvdC5wcm90b3R5cGUsfTtPYmplY3RTbmFwc2hvdC5zdWJUeXBlcy5yZWdpc3RlcihMYXlvdXRUcmVlU25hcHNob3Qse3R5cGVOYW1lOidMYXlvdXRUcmVlJ30pO3JldHVybntMYXlvdXRUcmVlSW5zdGFuY2UsTGF5b3V0VHJlZVNuYXBzaG90LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBFdmVudENvbnRhaW5lcigpe3RoaXMuZ3VpZF89dHIuYi5HVUlELmFsbG9jYXRlU2ltcGxlKCk7dGhpcy5pbXBvcnRhbnQ9dHJ1ZTt0aGlzLmJvdW5kc189bmV3IHRyLmIubWF0aC5SYW5nZSgpO30KLUV2ZW50Q29udGFpbmVyLnByb3RvdHlwZT17Z2V0IGd1aWQoKXtyZXR1cm4gdGhpcy5ndWlkXzt9LGdldCBzdGFibGVJZCgpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxnZXQgYm91bmRzKCl7cmV0dXJuIHRoaXMuYm91bmRzXzt9LHVwZGF0ZUJvdW5kcygpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxzaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LCpjaGlsZEV2ZW50cygpe30sKmdldERlc2NlbmRhbnRFdmVudHMoKXt5aWVsZCp0aGlzLmNoaWxkRXZlbnRzKCk7Zm9yKGNvbnN0IGNvbnRhaW5lciBvZiB0aGlzLmNoaWxkRXZlbnRDb250YWluZXJzKCkpe3lpZWxkKmNvbnRhaW5lci5nZXREZXNjZW5kYW50RXZlbnRzKCk7fX0sKmNoaWxkRXZlbnRDb250YWluZXJzKCl7fSwqZ2V0RGVzY2VuZGFudEV2ZW50Q29udGFpbmVycygpe3lpZWxkIHRoaXM7Zm9yKGNvbnN0IGNvbnRhaW5lciBvZiB0aGlzLmNoaWxkRXZlbnRDb250YWluZXJzKCkpe3lpZWxkKmNvbnRhaW5lci5nZXREZXNjZW5kYW50RXZlbnRDb250YWluZXJzKCk7fX0sKmZpbmRUb3Btb3N0U2xpY2VzSW5UaGlzQ29udGFpbmVyKGV2ZW50UHJlZGljYXRlLG9wdF90aGlzKXt9LCpmaW5kVG9wbW9zdFNsaWNlcyhldmVudFByZWRpY2F0ZSl7Zm9yKGNvbnN0IGVjIG9mIHRoaXMuZ2V0RGVzY2VuZGFudEV2ZW50Q29udGFpbmVycygpKXt5aWVsZCplYy5maW5kVG9wbW9zdFNsaWNlc0luVGhpc0NvbnRhaW5lcihldmVudFByZWRpY2F0ZSk7fX0sKmZpbmRUb3Btb3N0U2xpY2VzTmFtZWQobmFtZSl7eWllbGQqdGhpcy5maW5kVG9wbW9zdFNsaWNlcyhlPT5lLnRpdGxlPT09bmFtZSk7fX07cmV0dXJue0V2ZW50Q29udGFpbmVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBFdmVudD10ci5tb2RlbC5FdmVudDtjb25zdCBFdmVudFJlZ2lzdHJ5PXRyLm1vZGVsLkV2ZW50UmVnaXN0cnk7Y2xhc3MgUmVzb3VyY2VVc2FnZVNhbXBsZSBleHRlbmRzIEV2ZW50e2NvbnN0cnVjdG9yKHNlcmllcyxzdGFydCx1c2FnZSl7c3VwZXIoKTt0aGlzLnNlcmllc189c2VyaWVzO3RoaXMuc3RhcnRfPXN0YXJ0O3RoaXMudXNhZ2VfPXVzYWdlO30KLWdldCBzZXJpZXMoKXtyZXR1cm4gdGhpcy5zZXJpZXNfO30KLWdldCBzdGFydCgpe3JldHVybiB0aGlzLnN0YXJ0Xzt9Ci1zZXQgc3RhcnQodmFsdWUpe3RoaXMuc3RhcnRfPXZhbHVlO30KLWdldCB1c2FnZSgpe3JldHVybiB0aGlzLnVzYWdlXzt9Ci1zZXQgdXNhZ2UodmFsdWUpe3RoaXMudXNhZ2VfPXZhbHVlO30KLWFkZEJvdW5kc1RvUmFuZ2UocmFuZ2Upe3JhbmdlLmFkZFZhbHVlKHRoaXMuc3RhcnQpO319Ci1FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKFJlc291cmNlVXNhZ2VTYW1wbGUse25hbWU6J3Jlc291cmNlVXNhZ2VTYW1wbGUnLHBsdXJhbE5hbWU6J3Jlc291cmNlVXNhZ2VTYW1wbGVzJ30pO3JldHVybntSZXNvdXJjZVVzYWdlU2FtcGxlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBSZXNvdXJjZVVzYWdlU2FtcGxlPXRyLm1vZGVsLlJlc291cmNlVXNhZ2VTYW1wbGU7Y2xhc3MgUmVzb3VyY2VVc2FnZVNlcmllcyBleHRlbmRzIHRyLm1vZGVsLkV2ZW50Q29udGFpbmVye2NvbnN0cnVjdG9yKGRldmljZSl7c3VwZXIoKTt0aGlzLmRldmljZV89ZGV2aWNlO3RoaXMuc2FtcGxlc189W107fQotZ2V0IGRldmljZSgpe3JldHVybiB0aGlzLmRldmljZV87fQotZ2V0IHNhbXBsZXMoKXtyZXR1cm4gdGhpcy5zYW1wbGVzXzt9Ci1nZXQgc3RhYmxlSWQoKXtyZXR1cm4gdGhpcy5kZXZpY2VfLnN0YWJsZUlkKycuUmVzb3VyY2VVc2FnZVNlcmllcyc7fQotYWRkVXNhZ2VTYW1wbGUodHMsdmFsKXtjb25zdCBzYW1wbGU9bmV3IFJlc291cmNlVXNhZ2VTYW1wbGUodGhpcyx0cyx2YWwpO3RoaXMuc2FtcGxlc18ucHVzaChzYW1wbGUpO3JldHVybiBzYW1wbGU7fQotY29tcHV0ZVJlc291cmNlVGltZUNvbnN1bWVkSW5NcyhzdGFydCxlbmQpe2NvbnN0IG1lYXN1cmVtZW50UmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHN0YXJ0LGVuZCk7bGV0IHJlc291cmNlVGltZUluTXM9MDtsZXQgc3RhcnRJbmRleD10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkodGhpcy5zYW1wbGVzLHg9Pnguc3RhcnQsc3RhcnQpLTE7Y29uc3QgZW5kSW5kZXg9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMuc2FtcGxlcyx4PT54LnN0YXJ0LGVuZCk7aWYoc3RhcnRJbmRleDwwKXN0YXJ0SW5kZXg9MDtmb3IobGV0IGk9c3RhcnRJbmRleDtpPGVuZEluZGV4O2krKyl7Y29uc3Qgc2FtcGxlPXRoaXMuc2FtcGxlc1tpXTtjb25zdCBuZXh0U2FtcGxlPXRoaXMuc2FtcGxlc1tpKzFdO2NvbnN0IHNhbXBsZVJhbmdlPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTtzYW1wbGVSYW5nZS5hZGRWYWx1ZShzYW1wbGUuc3RhcnQpO3NhbXBsZVJhbmdlLmFkZFZhbHVlKG5leHRTYW1wbGU/bmV4dFNhbXBsZS5zdGFydDpzYW1wbGUuc3RhcnQpO2NvbnN0IGludGVyc2VjdGlvblJhbmdlSW5Ncz1tZWFzdXJlbWVudFJhbmdlLmZpbmRJbnRlcnNlY3Rpb24oc2FtcGxlUmFuZ2UpO3Jlc291cmNlVGltZUluTXMrPWludGVyc2VjdGlvblJhbmdlSW5Ncy5kdXJhdGlvbipzYW1wbGUudXNhZ2U7fQotcmV0dXJuIHJlc291cmNlVGltZUluTXM7fQotZ2V0U2FtcGxlc1dpdGhpblJhbmdlKHN0YXJ0LGVuZCl7Y29uc3Qgc3RhcnRJbmRleD10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkodGhpcy5zYW1wbGVzLHg9Pnguc3RhcnQsc3RhcnQpO2NvbnN0IGVuZEluZGV4PXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheSh0aGlzLnNhbXBsZXMseD0+eC5zdGFydCxlbmQpO3JldHVybiB0aGlzLnNhbXBsZXMuc2xpY2Uoc3RhcnRJbmRleCxlbmRJbmRleCk7fQotc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpe2ZvcihsZXQgaT0wO2k8dGhpcy5zYW1wbGVzXy5sZW5ndGg7KytpKXt0aGlzLnNhbXBsZXNfW2ldLnN0YXJ0Kz1hbW91bnQ7fX0KLXVwZGF0ZUJvdW5kcygpe3RoaXMuYm91bmRzLnJlc2V0KCk7aWYodGhpcy5zYW1wbGVzXy5sZW5ndGg9PT0wKXJldHVybjt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLnNhbXBsZXNfWzBdLnN0YXJ0KTt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLnNhbXBsZXNfW3RoaXMuc2FtcGxlc18ubGVuZ3RoLTFdLnN0YXJ0KTt9KmNoaWxkRXZlbnRzKCl7eWllbGQqdGhpcy5zYW1wbGVzXzt9fQotcmV0dXJue1Jlc291cmNlVXNhZ2VTZXJpZXMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuYXVkaXRzJyxmdW5jdGlvbigpe2NsYXNzIENwdVVzYWdlQXVkaXRvciBleHRlbmRzIHRyLmMuQXVkaXRvcntjb25zdHJ1Y3Rvcihtb2RlbCl7c3VwZXIoKTt0aGlzLm1vZGVsXz1tb2RlbDt9Ci1ydW5Bbm5vdGF0ZSgpe3RoaXMubW9kZWxfLmRldmljZS5jcHVVc2FnZVNlcmllcz10aGlzLmNvbXB1dGVDcHVVc2FnZVNlcmllc18odGhpcy5tb2RlbF8uYm91bmRzLm1pbix0aGlzLm1vZGVsXy5ib3VuZHMubWF4LHRoaXMuY29tcHV0ZUNwdVVzYWdlXygpKTt9Ci1jb21wdXRlQmluU2l6ZV8oc3RhcnQsZW5kKXtjb25zdCBNSU5fQklOX1NJWkVfTVM9MS4wO2NvbnN0IE1BWF9OVU1fQklOUz0xMDAwMDA7Y29uc3QgaW50ZXJ2YWw9ZW5kLXN0YXJ0O2xldCBiaW5TaXplPU1JTl9CSU5fU0laRV9NUzt3aGlsZShiaW5TaXplKk1BWF9OVU1fQklOUzxpbnRlcnZhbCliaW5TaXplKj0yO3JldHVybiBiaW5TaXplO30KLWNvbXB1dGVDcHVVc2FnZVNlcmllc18oc3RhcnQsZW5kLHVzYWdlUmVjb3Jkcyl7Y29uc3Qgc2VyaWVzPW5ldyB0ci5tb2RlbC5SZXNvdXJjZVVzYWdlU2VyaWVzKCk7aWYoc3RhcnQ9PT11bmRlZmluZWR8fHVzYWdlUmVjb3Jkcy5sZW5ndGg9PT0wKXJldHVybiBzZXJpZXM7Y29uc3QgYmluU2l6ZT10aGlzLmNvbXB1dGVCaW5TaXplXyhzdGFydCxlbmQpO2NvbnN0IG51bUJpbnM9TWF0aC5jZWlsKChlbmQtc3RhcnQpL2JpblNpemUpO2NvbnN0IGFycj1uZXcgQXJyYXkobnVtQmlucykuZmlsbCgwKTtmb3IoY29uc3QgcmVjb3JkIG9mIHVzYWdlUmVjb3Jkcyl7Y29uc3QgZmlyc3RJbmRleD1NYXRoLmNlaWwoKHJlY29yZC5zdGFydC1zdGFydCkvYmluU2l6ZSk7Y29uc3QgbGFzdEluZGV4PU1hdGguZmxvb3IoKHJlY29yZC5lbmQtc3RhcnQpL2JpblNpemUpO2ZvcihsZXQgaT1maXJzdEluZGV4O2k8PWxhc3RJbmRleDtpKyspYXJyW2ldKz1yZWNvcmQudXNhZ2U7fQotZm9yKGxldCBpPTA7aTxudW1CaW5zO2krKyl7c2VyaWVzLmFkZFVzYWdlU2FtcGxlKHN0YXJ0KyhpKmJpblNpemUpLGFycltpXSk7fQotcmV0dXJuIHNlcmllczt9Ci1jb21wdXRlQ3B1VXNhZ2VfKCl7Y29uc3QgbW9kZWw9dGhpcy5tb2RlbF87Y29uc3QgcmVzdWx0PVtdO2Zvcihjb25zdCBwaWQgaW4gbW9kZWwucHJvY2Vzc2VzKXtmb3IoY29uc3QgZSBvZiBtb2RlbC5wcm9jZXNzZXNbcGlkXS5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKCEoZSBpbnN0YW5jZW9mIHRyLm1vZGVsLlRocmVhZFNsaWNlKXx8ZS5kdXJhdGlvbj09PTB8fGUuY3B1RHVyYXRpb249PT11bmRlZmluZWQpe2NvbnRpbnVlO30KLWlmKGUuc2VsZlRpbWU9PT0wfHxlLnNlbGZUaW1lPT09dW5kZWZpbmVkfHxlLmNwdVNlbGZUaW1lPT09dW5kZWZpbmVkKXtjb250aW51ZTt9Ci1jb25zdCB1c2FnZT10ci5iLm1hdGguY2xhbXAoZS5jcHVTZWxmVGltZS9lLnNlbGZUaW1lLDAsMSk7bGV0IGxhc3RUaW1lPWUuc3RhcnQ7Zm9yKGNvbnN0IHN1YnNsaWNlIG9mIGUuc3ViU2xpY2VzKXtyZXN1bHQucHVzaCh7dXNhZ2Usc3RhcnQ6bGFzdFRpbWUsZW5kOnN1YnNsaWNlLnN0YXJ0fSk7bGFzdFRpbWU9c3Vic2xpY2UuZW5kO30KLXJlc3VsdC5wdXNoKHt1c2FnZSxzdGFydDpsYXN0VGltZSxlbmQ6ZS5lbmR9KTt9fQotcmV0dXJuIHJlc3VsdDt9fQotdHIuYy5BdWRpdG9yLnJlZ2lzdGVyKENwdVVzYWdlQXVkaXRvcik7cmV0dXJue0NwdVVzYWdlQXVkaXRvcn07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEJhc2U2NCgpe30KLWZ1bmN0aW9uIGI2NFRvVWludDYobkNocil7aWYobkNocj42NCYmbkNocjw5MSlyZXR1cm4gbkNoci02NTtpZihuQ2hyPjk2JiZuQ2hyPDEyMylyZXR1cm4gbkNoci03MTtpZihuQ2hyPjQ3JiZuQ2hyPDU4KXJldHVybiBuQ2hyKzQ7aWYobkNocj09PTQzKXJldHVybiA2MjtpZihuQ2hyPT09NDcpcmV0dXJuIDYzO3JldHVybiAwO30KLUJhc2U2NC5nZXREZWNvZGVkQnVmZmVyTGVuZ3RoPWZ1bmN0aW9uKGlucHV0KXtsZXQgcGFkPTA7aWYoaW5wdXQuc3Vic3RyKC0yKT09PSc9PScpe3BhZD0yO31lbHNlIGlmKGlucHV0LnN1YnN0cigtMSk9PT0nPScpe3BhZD0xO30KLXJldHVybigoaW5wdXQubGVuZ3RoKjMrMSk+PjIpLXBhZDt9O0Jhc2U2NC5FbmNvZGVBcnJheUJ1ZmZlclRvU3RyaW5nPWZ1bmN0aW9uKGlucHV0KXtsZXQgYmluYXJ5PScnO2NvbnN0IGJ5dGVzPW5ldyBVaW50OEFycmF5KGlucHV0KTtjb25zdCBsZW49Ynl0ZXMuYnl0ZUxlbmd0aDtmb3IobGV0IGk9MDtpPGxlbjtpKyspe2JpbmFyeSs9U3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7fQotcmV0dXJuIGJ0b2EoYmluYXJ5KTt9O0Jhc2U2NC5EZWNvZGVUb1R5cGVkQXJyYXk9ZnVuY3Rpb24oaW5wdXQsb3V0cHV0KXtjb25zdCBuSW5MZW49aW5wdXQubGVuZ3RoO2NvbnN0IG5PdXRMZW49QmFzZTY0LmdldERlY29kZWRCdWZmZXJMZW5ndGgoaW5wdXQpO2xldCBuTW9kMz0wO2xldCBuTW9kND0wO2xldCBuVWludDI0PTA7bGV0IG5PdXRJZHg9MDtpZihuT3V0TGVuPm91dHB1dC5ieXRlTGVuZ3RoKXt0aHJvdyBuZXcgRXJyb3IoJ091dHB1dCBidWZmZXIgdG9vIHNtYWxsIHRvIGRlY29kZS4nKTt9Ci1mb3IobGV0IG5JbklkeD0wO25JbklkeDxuSW5MZW47bkluSWR4Kyspe25Nb2Q0PW5JbklkeCYzO25VaW50MjR8PWI2NFRvVWludDYoaW5wdXQuY2hhckNvZGVBdChuSW5JZHgpKTw8MTgtNipuTW9kNDtpZihuTW9kND09PTN8fG5Jbkxlbi1uSW5JZHg9PT0xKXtmb3Iobk1vZDM9MDtuTW9kMzwzJiZuT3V0SWR4PG5PdXRMZW47bk1vZDMrKyxuT3V0SWR4Kyspe291dHB1dC5zZXRVaW50OChuT3V0SWR4LG5VaW50MjQ+Pj4oMTY+Pj5uTW9kMyYyNCkmMjU1KTt9Ci1uVWludDI0PTA7fX0KLXJldHVybiBuT3V0TGVuO307QmFzZTY0LmJ0b2E9ZnVuY3Rpb24oaW5wdXQpe3JldHVybiBidG9hKGlucHV0KTt9O0Jhc2U2NC5hdG9iPWZ1bmN0aW9uKGlucHV0KXtyZXR1cm4gYXRvYihpbnB1dCk7fTtyZXR1cm57QmFzZTY0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmV0dycsZnVuY3Rpb24oKXtmdW5jdGlvbiBQYXJzZXIoaW1wb3J0ZXIpe3RoaXMuaW1wb3J0ZXI9aW1wb3J0ZXI7dGhpcy5tb2RlbD1pbXBvcnRlci5tb2RlbDt9Ci1QYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZX07Y29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5CQVNJQ19SRUdJU1RSWV9NT0RFKTtvcHRpb25zLm1hbmRhdG9yeUJhc2VDbGFzcz1QYXJzZXI7dHIuYi5kZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KFBhcnNlcixvcHRpb25zKTtyZXR1cm57UGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmV0dycsZnVuY3Rpb24oKXtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5ldHcuUGFyc2VyO2NvbnN0IGd1aWQ9JzY4RkREOTAwLTRBM0UtMTFEMS04NEY0LTAwMDBGODA0NjRFMyc7Y29uc3Qga0V2ZW50VHJhY2VIZWFkZXJPcGNvZGU9MDtmdW5jdGlvbiBFdmVudFRyYWNlUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihndWlkLGtFdmVudFRyYWNlSGVhZGVyT3Bjb2RlLEV2ZW50VHJhY2VQYXJzZXIucHJvdG90eXBlLmRlY29kZUhlYWRlci5iaW5kKHRoaXMpKTt9Ci1FdmVudFRyYWNlUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsZGVjb2RlRmllbGRzKGhlYWRlcixkZWNvZGVyKXtpZihoZWFkZXIudmVyc2lvbiE9PTIpe3Rocm93IG5ldyBFcnJvcignSW5jb21wYXRpYmxlIEV2ZW50VHJhY2UgZXZlbnQgdmVyc2lvbi4nKTt9Ci1jb25zdCBidWZmZXJTaXplPWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3QgdmVyc2lvbj1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IHByb3ZpZGVyVmVyc2lvbj1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IG51bWJlck9mUHJvY2Vzc29ycz1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IGVuZFRpbWU9ZGVjb2Rlci5kZWNvZGVVSW50NjRUb1N0cmluZygpO2NvbnN0IHRpbWVyUmVzb2x1dGlvbj1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IG1heEZpbGVTaXplPWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3QgbG9nRmlsZU1vZGU9ZGVjb2Rlci5kZWNvZGVVSW50MzIoKTtjb25zdCBidWZmZXJzV3JpdHRlbj1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IHN0YXJ0QnVmZmVycz1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IHBvaW50ZXJTaXplPWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3QgZXZlbnRzTG9zdD1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IGNwdVNwZWVkPWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3QgbG9nZ2VyTmFtZT1kZWNvZGVyLmRlY29kZVVJbnRlZ2VyKGhlYWRlci5pczY0KTtjb25zdCBsb2dGaWxlTmFtZT1kZWNvZGVyLmRlY29kZVVJbnRlZ2VyKGhlYWRlci5pczY0KTtjb25zdCB0aW1lWm9uZUluZm9ybWF0aW9uPWRlY29kZXIuZGVjb2RlVGltZVpvbmVJbmZvcm1hdGlvbigpO2NvbnN0IHBhZGRpbmc9ZGVjb2Rlci5kZWNvZGVVSW50MzIoKTtjb25zdCBib290VGltZT1kZWNvZGVyLmRlY29kZVVJbnQ2NFRvU3RyaW5nKCk7Y29uc3QgcGVyZkZyZXE9ZGVjb2Rlci5kZWNvZGVVSW50NjRUb1N0cmluZygpO2NvbnN0IHN0YXJ0VGltZT1kZWNvZGVyLmRlY29kZVVJbnQ2NFRvU3RyaW5nKCk7Y29uc3QgcmVzZXJ2ZWRGbGFncz1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IGJ1ZmZlcnNMb3N0PWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3Qgc2Vzc2lvbk5hbWVTdHJpbmc9ZGVjb2Rlci5kZWNvZGVXMTZTdHJpbmcoKTtjb25zdCBsb2dGaWxlTmFtZVN0cmluZz1kZWNvZGVyLmRlY29kZVcxNlN0cmluZygpO3JldHVybntidWZmZXJTaXplLHZlcnNpb24scHJvdmlkZXJWZXJzaW9uLG51bWJlck9mUHJvY2Vzc29ycyxlbmRUaW1lLHRpbWVyUmVzb2x1dGlvbixtYXhGaWxlU2l6ZSxsb2dGaWxlTW9kZSxidWZmZXJzV3JpdHRlbixzdGFydEJ1ZmZlcnMscG9pbnRlclNpemUsZXZlbnRzTG9zdCxjcHVTcGVlZCxsb2dnZXJOYW1lLGxvZ0ZpbGVOYW1lLHRpbWVab25lSW5mb3JtYXRpb24sYm9vdFRpbWUscGVyZkZyZXEsc3RhcnRUaW1lLHJlc2VydmVkRmxhZ3MsYnVmZmVyc0xvc3Qsc2Vzc2lvbk5hbWVTdHJpbmcsbG9nRmlsZU5hbWVTdHJpbmd9O30sZGVjb2RlSGVhZGVyKGhlYWRlcixkZWNvZGVyKXtjb25zdCBmaWVsZHM9dGhpcy5kZWNvZGVGaWVsZHMoaGVhZGVyLGRlY29kZXIpO3JldHVybiB0cnVlO319O1BhcnNlci5yZWdpc3RlcihFdmVudFRyYWNlUGFyc2VyKTtyZXR1cm57RXZlbnRUcmFjZVBhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5ldHcnLGZ1bmN0aW9uKCl7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIuZXR3LlBhcnNlcjtjb25zdCBndWlkPSczRDZGQThEMC1GRTA1LTExRDAtOUREQS0wMEMwNEZEN0JBN0MnO2NvbnN0IGtQcm9jZXNzU3RhcnRPcGNvZGU9MTtjb25zdCBrUHJvY2Vzc0VuZE9wY29kZT0yO2NvbnN0IGtQcm9jZXNzRENTdGFydE9wY29kZT0zO2NvbnN0IGtQcm9jZXNzRENFbmRPcGNvZGU9NDtjb25zdCBrUHJvY2Vzc0RlZnVuY3RPcGNvZGU9Mzk7ZnVuY3Rpb24gUHJvY2Vzc1BhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoZ3VpZCxrUHJvY2Vzc1N0YXJ0T3Bjb2RlLFByb2Nlc3NQYXJzZXIucHJvdG90eXBlLmRlY29kZVN0YXJ0LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGd1aWQsa1Byb2Nlc3NFbmRPcGNvZGUsUHJvY2Vzc1BhcnNlci5wcm90b3R5cGUuZGVjb2RlRW5kLmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGd1aWQsa1Byb2Nlc3NEQ1N0YXJ0T3Bjb2RlLFByb2Nlc3NQYXJzZXIucHJvdG90eXBlLmRlY29kZURDU3RhcnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoZ3VpZCxrUHJvY2Vzc0RDRW5kT3Bjb2RlLFByb2Nlc3NQYXJzZXIucHJvdG90eXBlLmRlY29kZURDRW5kLmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGd1aWQsa1Byb2Nlc3NEZWZ1bmN0T3Bjb2RlLFByb2Nlc3NQYXJzZXIucHJvdG90eXBlLmRlY29kZURlZnVuY3QuYmluZCh0aGlzKSk7fQotUHJvY2Vzc1BhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLGRlY29kZUZpZWxkcyhoZWFkZXIsZGVjb2Rlcil7aWYoaGVhZGVyLnZlcnNpb24+NSl7dGhyb3cgbmV3IEVycm9yKCdJbmNvbXBhdGlibGUgUHJvY2VzcyBldmVudCB2ZXJzaW9uLicpO30KLWxldCBwYWdlRGlyZWN0b3J5QmFzZTtpZihoZWFkZXIudmVyc2lvbj09PTEpe3BhZ2VEaXJlY3RvcnlCYXNlPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO30KLWxldCB1bmlxdWVQcm9jZXNzS2V5O2lmKGhlYWRlci52ZXJzaW9uPj0yKXt1bmlxdWVQcm9jZXNzS2V5PWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO30KLWNvbnN0IHByb2Nlc3NJZD1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IHBhcmVudElkPWRlY29kZXIuZGVjb2RlVUludDMyKCk7bGV0IHNlc3Npb25JZDtsZXQgZXhpdFN0YXR1cztpZihoZWFkZXIudmVyc2lvbj49MSl7c2Vzc2lvbklkPWRlY29kZXIuZGVjb2RlVUludDMyKCk7ZXhpdFN0YXR1cz1kZWNvZGVyLmRlY29kZUludDMyKCk7fQotbGV0IGRpcmVjdG9yeVRhYmxlQmFzZTtpZihoZWFkZXIudmVyc2lvbj49Myl7ZGlyZWN0b3J5VGFibGVCYXNlPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO30KLWxldCBmbGFncztpZihoZWFkZXIudmVyc2lvbj49NCl7ZmxhZ3M9ZGVjb2Rlci5kZWNvZGVVSW50MzIoKTt9Ci1jb25zdCB1c2VyU0lEPWRlY29kZXIuZGVjb2RlU0lEKGhlYWRlci5pczY0KTtsZXQgaW1hZ2VGaWxlTmFtZTtpZihoZWFkZXIudmVyc2lvbj49MSl7aW1hZ2VGaWxlTmFtZT1kZWNvZGVyLmRlY29kZVN0cmluZygpO30KLWxldCBjb21tYW5kTGluZTtpZihoZWFkZXIudmVyc2lvbj49Mil7Y29tbWFuZExpbmU9ZGVjb2Rlci5kZWNvZGVXMTZTdHJpbmcoKTt9Ci1sZXQgcGFja2FnZUZ1bGxOYW1lO2xldCBhcHBsaWNhdGlvbklkO2lmKGhlYWRlci52ZXJzaW9uPj00KXtwYWNrYWdlRnVsbE5hbWU9ZGVjb2Rlci5kZWNvZGVXMTZTdHJpbmcoKTthcHBsaWNhdGlvbklkPWRlY29kZXIuZGVjb2RlVzE2U3RyaW5nKCk7fQotbGV0IGV4aXRUaW1lO2lmKGhlYWRlci52ZXJzaW9uPT09NSYmaGVhZGVyLm9wY29kZT09PWtQcm9jZXNzRGVmdW5jdE9wY29kZSl7ZXhpdFRpbWU9ZGVjb2Rlci5kZWNvZGVVSW50NjRUb1N0cmluZygpO30KLXJldHVybntwYWdlRGlyZWN0b3J5QmFzZSx1bmlxdWVQcm9jZXNzS2V5LHByb2Nlc3NJZCxwYXJlbnRJZCxzZXNzaW9uSWQsZXhpdFN0YXR1cyxkaXJlY3RvcnlUYWJsZUJhc2UsZmxhZ3MsdXNlclNJRCxpbWFnZUZpbGVOYW1lLGNvbW1hbmRMaW5lLHBhY2thZ2VGdWxsTmFtZSxhcHBsaWNhdGlvbklkLGV4aXRUaW1lfTt9LGRlY29kZVN0YXJ0KGhlYWRlcixkZWNvZGVyKXtjb25zdCBmaWVsZHM9dGhpcy5kZWNvZGVGaWVsZHMoaGVhZGVyLGRlY29kZXIpO2NvbnN0IHByb2Nlc3M9dGhpcy5tb2RlbC5nZXRPckNyZWF0ZVByb2Nlc3MoZmllbGRzLnByb2Nlc3NJZCk7aWYocHJvY2Vzcy5oYXNPd25Qcm9wZXJ0eSgnaGFzX2VuZGVkJykpe3Rocm93IG5ldyBFcnJvcignUHJvY2VzcyBjbGFzaCBkZXRlY3RlZC4nKTt9Ci1wcm9jZXNzLm5hbWU9ZmllbGRzLmltYWdlRmlsZU5hbWU7cmV0dXJuIHRydWU7fSxkZWNvZGVFbmQoaGVhZGVyLGRlY29kZXIpe2NvbnN0IGZpZWxkcz10aGlzLmRlY29kZUZpZWxkcyhoZWFkZXIsZGVjb2Rlcik7Y29uc3QgcHJvY2Vzcz10aGlzLm1vZGVsLmdldE9yQ3JlYXRlUHJvY2VzcyhmaWVsZHMucHJvY2Vzc0lkKTtwcm9jZXNzLmhhc19lbmRlZD10cnVlO3JldHVybiB0cnVlO30sZGVjb2RlRENTdGFydChoZWFkZXIsZGVjb2Rlcil7Y29uc3QgZmllbGRzPXRoaXMuZGVjb2RlRmllbGRzKGhlYWRlcixkZWNvZGVyKTtjb25zdCBwcm9jZXNzPXRoaXMubW9kZWwuZ2V0T3JDcmVhdGVQcm9jZXNzKGZpZWxkcy5wcm9jZXNzSWQpO2lmKHByb2Nlc3MuaGFzT3duUHJvcGVydHkoJ2hhc19lbmRlZCcpKXt0aHJvdyBuZXcgRXJyb3IoJ1Byb2Nlc3MgY2xhc2ggZGV0ZWN0ZWQuJyk7fQotcHJvY2Vzcy5uYW1lPWZpZWxkcy5pbWFnZUZpbGVOYW1lO3JldHVybiB0cnVlO30sZGVjb2RlRENFbmQoaGVhZGVyLGRlY29kZXIpe2NvbnN0IGZpZWxkcz10aGlzLmRlY29kZUZpZWxkcyhoZWFkZXIsZGVjb2Rlcik7Y29uc3QgcHJvY2Vzcz10aGlzLm1vZGVsLmdldE9yQ3JlYXRlUHJvY2VzcyhmaWVsZHMucHJvY2Vzc0lkKTtwcm9jZXNzLmhhc19lbmRlZD10cnVlO3JldHVybiB0cnVlO30sZGVjb2RlRGVmdW5jdChoZWFkZXIsZGVjb2Rlcil7Y29uc3QgZmllbGRzPXRoaXMuZGVjb2RlRmllbGRzKGhlYWRlcixkZWNvZGVyKTtyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoUHJvY2Vzc1BhcnNlcik7cmV0dXJue1Byb2Nlc3NQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIuZXR3JyxmdW5jdGlvbigpe2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmV0dy5QYXJzZXI7Y29uc3QgZ3VpZD0nM0Q2RkE4RDEtRkUwNS0xMUQwLTlEREEtMDBDMDRGRDdCQTdDJztjb25zdCBrVGhyZWFkU3RhcnRPcGNvZGU9MTtjb25zdCBrVGhyZWFkRW5kT3Bjb2RlPTI7Y29uc3Qga1RocmVhZERDU3RhcnRPcGNvZGU9Mztjb25zdCBrVGhyZWFkRENFbmRPcGNvZGU9NDtjb25zdCBrVGhyZWFkQ1N3aXRjaE9wY29kZT0zNjtmdW5jdGlvbiBUaHJlYWRQYXJzZXIoaW1wb3J0ZXIpe1BhcnNlci5jYWxsKHRoaXMsaW1wb3J0ZXIpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGd1aWQsa1RocmVhZFN0YXJ0T3Bjb2RlLFRocmVhZFBhcnNlci5wcm90b3R5cGUuZGVjb2RlU3RhcnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoZ3VpZCxrVGhyZWFkRW5kT3Bjb2RlLFRocmVhZFBhcnNlci5wcm90b3R5cGUuZGVjb2RlRW5kLmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGd1aWQsa1RocmVhZERDU3RhcnRPcGNvZGUsVGhyZWFkUGFyc2VyLnByb3RvdHlwZS5kZWNvZGVEQ1N0YXJ0LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGd1aWQsa1RocmVhZERDRW5kT3Bjb2RlLFRocmVhZFBhcnNlci5wcm90b3R5cGUuZGVjb2RlRENFbmQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoZ3VpZCxrVGhyZWFkQ1N3aXRjaE9wY29kZSxUaHJlYWRQYXJzZXIucHJvdG90eXBlLmRlY29kZUNTd2l0Y2guYmluZCh0aGlzKSk7fQotVGhyZWFkUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsZGVjb2RlRmllbGRzKGhlYWRlcixkZWNvZGVyKXtpZihoZWFkZXIudmVyc2lvbj4zKXt0aHJvdyBuZXcgRXJyb3IoJ0luY29tcGF0aWJsZSBUaHJlYWQgZXZlbnQgdmVyc2lvbi4nKTt9Ci1jb25zdCBwcm9jZXNzSWQ9ZGVjb2Rlci5kZWNvZGVVSW50MzIoKTtjb25zdCB0aHJlYWRJZD1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2xldCBzdGFja0Jhc2U7bGV0IHN0YWNrTGltaXQ7bGV0IHVzZXJTdGFja0Jhc2U7bGV0IHVzZXJTdGFja0xpbWl0O2xldCBhZmZpbml0eTtsZXQgc3RhcnRBZGRyO2xldCB3aW4zMlN0YXJ0QWRkcjtsZXQgdGViQmFzZTtsZXQgc3ViUHJvY2Vzc1RhZztsZXQgYmFzZVByaW9yaXR5O2xldCBwYWdlUHJpb3JpdHk7bGV0IGlvUHJpb3JpdHk7bGV0IHRocmVhZEZsYWdzO2xldCB3YWl0TW9kZTtpZihoZWFkZXIudmVyc2lvbj09PTEpe2lmKGhlYWRlci5vcGNvZGU9PT1rVGhyZWFkU3RhcnRPcGNvZGV8fGhlYWRlci5vcGNvZGU9PT1rVGhyZWFkRENTdGFydE9wY29kZSl7c3RhY2tCYXNlPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO3N0YWNrTGltaXQ9ZGVjb2Rlci5kZWNvZGVVSW50ZWdlcihoZWFkZXIuaXM2NCk7dXNlclN0YWNrQmFzZT1kZWNvZGVyLmRlY29kZVVJbnRlZ2VyKGhlYWRlci5pczY0KTt1c2VyU3RhY2tMaW1pdD1kZWNvZGVyLmRlY29kZVVJbnRlZ2VyKGhlYWRlci5pczY0KTtzdGFydEFkZHI9ZGVjb2Rlci5kZWNvZGVVSW50ZWdlcihoZWFkZXIuaXM2NCk7d2luMzJTdGFydEFkZHI9ZGVjb2Rlci5kZWNvZGVVSW50ZWdlcihoZWFkZXIuaXM2NCk7d2FpdE1vZGU9ZGVjb2Rlci5kZWNvZGVJbnQ4KCk7ZGVjb2Rlci5za2lwKDMpO319ZWxzZXtzdGFja0Jhc2U9ZGVjb2Rlci5kZWNvZGVVSW50ZWdlcihoZWFkZXIuaXM2NCk7c3RhY2tMaW1pdD1kZWNvZGVyLmRlY29kZVVJbnRlZ2VyKGhlYWRlci5pczY0KTt1c2VyU3RhY2tCYXNlPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO3VzZXJTdGFja0xpbWl0PWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO2lmKGhlYWRlci52ZXJzaW9uPT09Mil7c3RhcnRBZGRyPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO31lbHNle2FmZmluaXR5PWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO30KLXdpbjMyU3RhcnRBZGRyPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO3RlYkJhc2U9ZGVjb2Rlci5kZWNvZGVVSW50ZWdlcihoZWFkZXIuaXM2NCk7c3ViUHJvY2Vzc1RhZz1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2lmKGhlYWRlci52ZXJzaW9uPT09Myl7YmFzZVByaW9yaXR5PWRlY29kZXIuZGVjb2RlVUludDgoKTtwYWdlUHJpb3JpdHk9ZGVjb2Rlci5kZWNvZGVVSW50OCgpO2lvUHJpb3JpdHk9ZGVjb2Rlci5kZWNvZGVVSW50OCgpO3RocmVhZEZsYWdzPWRlY29kZXIuZGVjb2RlVUludDgoKTt9fQotcmV0dXJue3Byb2Nlc3NJZCx0aHJlYWRJZCxzdGFja0Jhc2Usc3RhY2tMaW1pdCx1c2VyU3RhY2tCYXNlLHVzZXJTdGFja0xpbWl0LGFmZmluaXR5LHN0YXJ0QWRkcix3aW4zMlN0YXJ0QWRkcix0ZWJCYXNlLHN1YlByb2Nlc3NUYWcsd2FpdE1vZGUsYmFzZVByaW9yaXR5LHBhZ2VQcmlvcml0eSxpb1ByaW9yaXR5LHRocmVhZEZsYWdzfTt9LGRlY29kZUNTd2l0Y2hGaWVsZHMoaGVhZGVyLGRlY29kZXIpe2lmKGhlYWRlci52ZXJzaW9uIT09Mil7dGhyb3cgbmV3IEVycm9yKCdJbmNvbXBhdGlibGUgVGhyZWFkIGV2ZW50IHZlcnNpb24uJyk7fQotY29uc3QgbmV3VGhyZWFkSWQ9ZGVjb2Rlci5kZWNvZGVVSW50MzIoKTtjb25zdCBvbGRUaHJlYWRJZD1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IG5ld1RocmVhZFByaW9yaXR5PWRlY29kZXIuZGVjb2RlSW50OCgpO2NvbnN0IG9sZFRocmVhZFByaW9yaXR5PWRlY29kZXIuZGVjb2RlSW50OCgpO2NvbnN0IHByZXZpb3VzQ1N0YXRlPWRlY29kZXIuZGVjb2RlVUludDgoKTtjb25zdCBzcGFyZUJ5dGU9ZGVjb2Rlci5kZWNvZGVJbnQ4KCk7Y29uc3Qgb2xkVGhyZWFkV2FpdFJlYXNvbj1kZWNvZGVyLmRlY29kZUludDgoKTtjb25zdCBvbGRUaHJlYWRXYWl0TW9kZT1kZWNvZGVyLmRlY29kZUludDgoKTtjb25zdCBvbGRUaHJlYWRTdGF0ZT1kZWNvZGVyLmRlY29kZUludDgoKTtjb25zdCBvbGRUaHJlYWRXYWl0SWRlYWxQcm9jZXNzb3I9ZGVjb2Rlci5kZWNvZGVJbnQ4KCk7Y29uc3QgbmV3VGhyZWFkV2FpdFRpbWU9ZGVjb2Rlci5kZWNvZGVVSW50MzIoKTtjb25zdCByZXNlcnZlZD1kZWNvZGVyLmRlY29kZVVJbnQzMigpO3JldHVybntuZXdUaHJlYWRJZCxvbGRUaHJlYWRJZCxuZXdUaHJlYWRQcmlvcml0eSxvbGRUaHJlYWRQcmlvcml0eSxwcmV2aW91c0NTdGF0ZSxzcGFyZUJ5dGUsb2xkVGhyZWFkV2FpdFJlYXNvbixvbGRUaHJlYWRXYWl0TW9kZSxvbGRUaHJlYWRTdGF0ZSxvbGRUaHJlYWRXYWl0SWRlYWxQcm9jZXNzb3IsbmV3VGhyZWFkV2FpdFRpbWUscmVzZXJ2ZWR9O30sZGVjb2RlU3RhcnQoaGVhZGVyLGRlY29kZXIpe2NvbnN0IGZpZWxkcz10aGlzLmRlY29kZUZpZWxkcyhoZWFkZXIsZGVjb2Rlcik7dGhpcy5pbXBvcnRlci5jcmVhdGVUaHJlYWRJZk5lZWRlZChmaWVsZHMucHJvY2Vzc0lkLGZpZWxkcy50aHJlYWRJZCk7cmV0dXJuIHRydWU7fSxkZWNvZGVFbmQoaGVhZGVyLGRlY29kZXIpe2NvbnN0IGZpZWxkcz10aGlzLmRlY29kZUZpZWxkcyhoZWFkZXIsZGVjb2Rlcik7dGhpcy5pbXBvcnRlci5yZW1vdmVUaHJlYWRJZlByZXNlbnQoZmllbGRzLnRocmVhZElkKTtyZXR1cm4gdHJ1ZTt9LGRlY29kZURDU3RhcnQoaGVhZGVyLGRlY29kZXIpe2NvbnN0IGZpZWxkcz10aGlzLmRlY29kZUZpZWxkcyhoZWFkZXIsZGVjb2Rlcik7dGhpcy5pbXBvcnRlci5jcmVhdGVUaHJlYWRJZk5lZWRlZChmaWVsZHMucHJvY2Vzc0lkLGZpZWxkcy50aHJlYWRJZCk7cmV0dXJuIHRydWU7fSxkZWNvZGVEQ0VuZChoZWFkZXIsZGVjb2Rlcil7Y29uc3QgZmllbGRzPXRoaXMuZGVjb2RlRmllbGRzKGhlYWRlcixkZWNvZGVyKTt0aGlzLmltcG9ydGVyLnJlbW92ZVRocmVhZElmUHJlc2VudChmaWVsZHMudGhyZWFkSWQpO3JldHVybiB0cnVlO30sZGVjb2RlQ1N3aXRjaChoZWFkZXIsZGVjb2Rlcil7Y29uc3QgZmllbGRzPXRoaXMuZGVjb2RlQ1N3aXRjaEZpZWxkcyhoZWFkZXIsZGVjb2Rlcik7Y29uc3QgY3B1PXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVDcHUoaGVhZGVyLmNwdSk7Y29uc3QgbmV3VGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0VGhyZWFkRnJvbVdpbmRvd3NUaWQoZmllbGRzLm5ld1RocmVhZElkKTtsZXQgbmV3VGhyZWFkTmFtZTtpZihuZXdUaHJlYWQmJm5ld1RocmVhZC51c2VyRnJpZW5kbHlOYW1lKXtuZXdUaHJlYWROYW1lPW5ld1RocmVhZC51c2VyRnJpZW5kbHlOYW1lO31lbHNle2NvbnN0IG5ld1Byb2Nlc3NJZD10aGlzLmltcG9ydGVyLmdldFBpZEZyb21XaW5kb3dzVGlkKGZpZWxkcy5uZXdUaHJlYWRJZCk7Y29uc3QgbmV3UHJvY2Vzcz10aGlzLm1vZGVsLmdldFByb2Nlc3MobmV3UHJvY2Vzc0lkKTtsZXQgbmV3UHJvY2Vzc05hbWU7aWYobmV3UHJvY2Vzcyl7bmV3UHJvY2Vzc05hbWU9bmV3UHJvY2Vzcy5uYW1lO31lbHNle25ld1Byb2Nlc3NOYW1lPSdVbmtub3duIHByb2Nlc3MnO30KLW5ld1RocmVhZE5hbWU9bmV3UHJvY2Vzc05hbWUrJyAodGlkICcrZmllbGRzLm5ld1RocmVhZElkKycpJzt9Ci1jcHUuc3dpdGNoQWN0aXZlVGhyZWFkKGhlYWRlci50aW1lc3RhbXAse30sZmllbGRzLm5ld1RocmVhZElkLG5ld1RocmVhZE5hbWUsZmllbGRzKTtyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoVGhyZWFkUGFyc2VyKTtyZXR1cm57VGhyZWFkUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIG1heChhLGIpe2lmKGE9PT11bmRlZmluZWQpcmV0dXJuIGI7aWYoYj09PXVuZGVmaW5lZClyZXR1cm4gYTtyZXR1cm4gTWF0aC5tYXgoYSxiKTt9Ci1mdW5jdGlvbiBJbnRlcnZhbFRyZWUoYmVnaW5Qb3NpdGlvbkNiLGVuZFBvc2l0aW9uQ2Ipe3RoaXMuYmVnaW5Qb3NpdGlvbkNiXz1iZWdpblBvc2l0aW9uQ2I7dGhpcy5lbmRQb3NpdGlvbkNiXz1lbmRQb3NpdGlvbkNiO3RoaXMucm9vdF89dW5kZWZpbmVkO3RoaXMuc2l6ZV89MDt9Ci1JbnRlcnZhbFRyZWUucHJvdG90eXBlPXtpbnNlcnQoZGF0dW0pe2NvbnN0IHN0YXJ0UG9zaXRpb249dGhpcy5iZWdpblBvc2l0aW9uQ2JfKGRhdHVtKTtjb25zdCBlbmRQb3NpdGlvbj10aGlzLmVuZFBvc2l0aW9uQ2JfKGRhdHVtKTtjb25zdCBub2RlPW5ldyBJbnRlcnZhbFRyZWVOb2RlKGRhdHVtLHN0YXJ0UG9zaXRpb24sZW5kUG9zaXRpb24pO3RoaXMuc2l6ZV8rKzt0aGlzLnJvb3RfPXRoaXMuaW5zZXJ0Tm9kZV8odGhpcy5yb290Xyxub2RlKTt0aGlzLnJvb3RfLmNvbG91cj1Db2xvdXIuQkxBQ0s7cmV0dXJuIGRhdHVtO30saW5zZXJ0Tm9kZV8ocm9vdCxub2RlKXtpZihyb290PT09dW5kZWZpbmVkKXJldHVybiBub2RlO2lmKHJvb3QubGVmdE5vZGUmJnJvb3QubGVmdE5vZGUuaXNSZWQmJnJvb3QucmlnaHROb2RlJiZyb290LnJpZ2h0Tm9kZS5pc1JlZCl7dGhpcy5mbGlwTm9kZUNvbG91cl8ocm9vdCk7fQotaWYobm9kZS5rZXk8cm9vdC5rZXkpe3Jvb3QubGVmdE5vZGU9dGhpcy5pbnNlcnROb2RlXyhyb290LmxlZnROb2RlLG5vZGUpO31lbHNlIGlmKG5vZGUua2V5PT09cm9vdC5rZXkpe3Jvb3QubWVyZ2Uobm9kZSk7fWVsc2V7cm9vdC5yaWdodE5vZGU9dGhpcy5pbnNlcnROb2RlXyhyb290LnJpZ2h0Tm9kZSxub2RlKTt9Ci1pZihyb290LnJpZ2h0Tm9kZSYmcm9vdC5yaWdodE5vZGUuaXNSZWQmJihyb290LmxlZnROb2RlPT09dW5kZWZpbmVkfHwhcm9vdC5sZWZ0Tm9kZS5pc1JlZCkpe3Jvb3Q9dGhpcy5yb3RhdGVMZWZ0Xyhyb290KTt9Ci1pZihyb290LmxlZnROb2RlJiZyb290LmxlZnROb2RlLmlzUmVkJiZyb290LmxlZnROb2RlLmxlZnROb2RlJiZyb290LmxlZnROb2RlLmxlZnROb2RlLmlzUmVkKXtyb290PXRoaXMucm90YXRlUmlnaHRfKHJvb3QpO30KLXJldHVybiByb290O30scm90YXRlUmlnaHRfKG5vZGUpe2NvbnN0IHNpYmxpbmc9bm9kZS5sZWZ0Tm9kZTtub2RlLmxlZnROb2RlPXNpYmxpbmcucmlnaHROb2RlO3NpYmxpbmcucmlnaHROb2RlPW5vZGU7c2libGluZy5jb2xvdXI9bm9kZS5jb2xvdXI7bm9kZS5jb2xvdXI9Q29sb3VyLlJFRDtyZXR1cm4gc2libGluZzt9LHJvdGF0ZUxlZnRfKG5vZGUpe2NvbnN0IHNpYmxpbmc9bm9kZS5yaWdodE5vZGU7bm9kZS5yaWdodE5vZGU9c2libGluZy5sZWZ0Tm9kZTtzaWJsaW5nLmxlZnROb2RlPW5vZGU7c2libGluZy5jb2xvdXI9bm9kZS5jb2xvdXI7bm9kZS5jb2xvdXI9Q29sb3VyLlJFRDtyZXR1cm4gc2libGluZzt9LGZsaXBOb2RlQ29sb3VyXyhub2RlKXtub2RlLmNvbG91cj10aGlzLmZsaXBDb2xvdXJfKG5vZGUuY29sb3VyKTtub2RlLmxlZnROb2RlLmNvbG91cj10aGlzLmZsaXBDb2xvdXJfKG5vZGUubGVmdE5vZGUuY29sb3VyKTtub2RlLnJpZ2h0Tm9kZS5jb2xvdXI9dGhpcy5mbGlwQ29sb3VyXyhub2RlLnJpZ2h0Tm9kZS5jb2xvdXIpO30sZmxpcENvbG91cl8oY29sb3VyKXtyZXR1cm4gY29sb3VyPT09Q29sb3VyLlJFRD9Db2xvdXIuQkxBQ0s6Q29sb3VyLlJFRDt9LHVwZGF0ZUhpZ2hWYWx1ZXMoKXt0aGlzLnVwZGF0ZUhpZ2hWYWx1ZXNfKHRoaXMucm9vdF8pO30sdXBkYXRlSGlnaFZhbHVlc18obm9kZSl7aWYobm9kZT09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO25vZGUubWF4SGlnaExlZnQ9dGhpcy51cGRhdGVIaWdoVmFsdWVzXyhub2RlLmxlZnROb2RlKTtub2RlLm1heEhpZ2hSaWdodD10aGlzLnVwZGF0ZUhpZ2hWYWx1ZXNfKG5vZGUucmlnaHROb2RlKTtyZXR1cm4gbWF4KG1heChub2RlLm1heEhpZ2hMZWZ0LG5vZGUuaGlnaFZhbHVlKSxub2RlLm1heEhpZ2hSaWdodCk7fSx2YWxpZGF0ZUZpbmRBcmd1bWVudHNfKHF1ZXJ5TG93LHF1ZXJ5SGlnaCl7aWYocXVlcnlMb3c9PT11bmRlZmluZWR8fHF1ZXJ5SGlnaD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdxdWVyeUxvdyBhbmQgcXVlcnlIaWdoIG11c3QgYmUgZGVmaW5lZCcpO30KLWlmKCh0eXBlb2YgcXVlcnlMb3chPT0nbnVtYmVyJyl8fCh0eXBlb2YgcXVlcnlIaWdoIT09J251bWJlcicpKXt0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TG93IGFuZCBxdWVyeUhpZ2ggbXVzdCBiZSBudW1iZXJzJyk7fX0sZmluZEludGVyc2VjdGlvbihxdWVyeUxvdyxxdWVyeUhpZ2gpe3RoaXMudmFsaWRhdGVGaW5kQXJndW1lbnRzXyhxdWVyeUxvdyxxdWVyeUhpZ2gpO2lmKHRoaXMucm9vdF89PT11bmRlZmluZWQpcmV0dXJuW107Y29uc3QgcmV0PVtdO3RoaXMucm9vdF8uYXBwZW5kSW50ZXJzZWN0aW9uc0ludG9fKHJldCxxdWVyeUxvdyxxdWVyeUhpZ2gpO3JldHVybiByZXQ7fSxnZXQgc2l6ZSgpe3JldHVybiB0aGlzLnNpemVfO30sZ2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5yb290Xzt9LGR1bXBfKCl7aWYodGhpcy5yb290Xz09PXVuZGVmaW5lZClyZXR1cm5bXTtyZXR1cm4gdGhpcy5yb290Xy5kdW1wKCk7fX07Y29uc3QgQ29sb3VyPXtSRUQ6J3JlZCcsQkxBQ0s6J2JsYWNrJ307ZnVuY3Rpb24gSW50ZXJ2YWxUcmVlTm9kZShkYXR1bSxsb3dWYWx1ZSxoaWdoVmFsdWUpe3RoaXMubG93VmFsdWVfPWxvd1ZhbHVlO3RoaXMuZGF0YV89W3tkYXR1bSxoaWdoOmhpZ2hWYWx1ZSxsb3c6bG93VmFsdWV9XTt0aGlzLmNvbG91cl89Q29sb3VyLlJFRDt0aGlzLnBhcmVudE5vZGVfPXVuZGVmaW5lZDt0aGlzLmxlZnROb2RlXz11bmRlZmluZWQ7dGhpcy5yaWdodE5vZGVfPXVuZGVmaW5lZDt0aGlzLm1heEhpZ2hMZWZ0Xz11bmRlZmluZWQ7dGhpcy5tYXhIaWdoUmlnaHRfPXVuZGVmaW5lZDt9Ci1JbnRlcnZhbFRyZWVOb2RlLnByb3RvdHlwZT17YXBwZW5kSW50ZXJzZWN0aW9uc0ludG9fKHJldCxxdWVyeUxvdyxxdWVyeUhpZ2gpe2lmKHRoaXMubG93VmFsdWVfPj1xdWVyeUhpZ2gpe2lmKCF0aGlzLmxlZnROb2RlXylyZXR1cm47cmV0dXJuIHRoaXMubGVmdE5vZGVfLmFwcGVuZEludGVyc2VjdGlvbnNJbnRvXyhyZXQscXVlcnlMb3cscXVlcnlIaWdoKTt9Ci1pZih0aGlzLm1heEhpZ2hMZWZ0Xz5xdWVyeUxvdyl7dGhpcy5sZWZ0Tm9kZV8uYXBwZW5kSW50ZXJzZWN0aW9uc0ludG9fKHJldCxxdWVyeUxvdyxxdWVyeUhpZ2gpO30KLWlmKHRoaXMuaGlnaFZhbHVlPnF1ZXJ5TG93KXtmb3IobGV0IGk9KHRoaXMuZGF0YS5sZW5ndGgtMSk7aT49MDstLWkpe2lmKHRoaXMuZGF0YVtpXS5oaWdoPHF1ZXJ5TG93KWJyZWFrO3JldC5wdXNoKHRoaXMuZGF0YVtpXS5kYXR1bSk7fX0KLWlmKHRoaXMucmlnaHROb2RlXyl7dGhpcy5yaWdodE5vZGVfLmFwcGVuZEludGVyc2VjdGlvbnNJbnRvXyhyZXQscXVlcnlMb3cscXVlcnlIaWdoKTt9fSxnZXQgY29sb3VyKCl7cmV0dXJuIHRoaXMuY29sb3VyXzt9LHNldCBjb2xvdXIoY29sb3VyKXt0aGlzLmNvbG91cl89Y29sb3VyO30sZ2V0IGtleSgpe3JldHVybiB0aGlzLmxvd1ZhbHVlXzt9LGdldCBsb3dWYWx1ZSgpe3JldHVybiB0aGlzLmxvd1ZhbHVlXzt9LGdldCBoaWdoVmFsdWUoKXtyZXR1cm4gdGhpcy5kYXRhX1t0aGlzLmRhdGFfLmxlbmd0aC0xXS5oaWdoO30sc2V0IGxlZnROb2RlKGxlZnQpe3RoaXMubGVmdE5vZGVfPWxlZnQ7fSxnZXQgbGVmdE5vZGUoKXtyZXR1cm4gdGhpcy5sZWZ0Tm9kZV87fSxnZXQgaGFzTGVmdE5vZGUoKXtyZXR1cm4gdGhpcy5sZWZ0Tm9kZV8hPT11bmRlZmluZWQ7fSxzZXQgcmlnaHROb2RlKHJpZ2h0KXt0aGlzLnJpZ2h0Tm9kZV89cmlnaHQ7fSxnZXQgcmlnaHROb2RlKCl7cmV0dXJuIHRoaXMucmlnaHROb2RlXzt9LGdldCBoYXNSaWdodE5vZGUoKXtyZXR1cm4gdGhpcy5yaWdodE5vZGVfIT09dW5kZWZpbmVkO30sc2V0IHBhcmVudE5vZGUocGFyZW50KXt0aGlzLnBhcmVudE5vZGVfPXBhcmVudDt9LGdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZV87fSxnZXQgaXNSb290Tm9kZSgpe3JldHVybiB0aGlzLnBhcmVudE5vZGVfPT09dW5kZWZpbmVkO30sc2V0IG1heEhpZ2hMZWZ0KGhpZ2gpe3RoaXMubWF4SGlnaExlZnRfPWhpZ2g7fSxnZXQgbWF4SGlnaExlZnQoKXtyZXR1cm4gdGhpcy5tYXhIaWdoTGVmdF87fSxzZXQgbWF4SGlnaFJpZ2h0KGhpZ2gpe3RoaXMubWF4SGlnaFJpZ2h0Xz1oaWdoO30sZ2V0IG1heEhpZ2hSaWdodCgpe3JldHVybiB0aGlzLm1heEhpZ2hSaWdodF87fSxnZXQgZGF0YSgpe3JldHVybiB0aGlzLmRhdGFfO30sZ2V0IGlzUmVkKCl7cmV0dXJuIHRoaXMuY29sb3VyXz09PUNvbG91ci5SRUQ7fSxtZXJnZShub2RlKXtmb3IobGV0IGk9MDtpPG5vZGUuZGF0YS5sZW5ndGg7aSsrKXt0aGlzLmRhdGFfLnB1c2gobm9kZS5kYXRhW2ldKTt9Ci10aGlzLmRhdGFfLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5oaWdoLWIuaGlnaDt9KTt9LGR1bXAoKXtjb25zdCByZXQ9e307aWYodGhpcy5sZWZ0Tm9kZV8pe3JldC5sZWZ0PXRoaXMubGVmdE5vZGVfLmR1bXAoKTt9Ci1yZXQuZGF0YT10aGlzLmRhdGFfLm1hcChmdW5jdGlvbihkKXtyZXR1cm5bZC5sb3csZC5oaWdoXTt9KTtpZih0aGlzLnJpZ2h0Tm9kZV8pe3JldC5yaWdodD10aGlzLnJpZ2h0Tm9kZV8uZHVtcCgpO30KLXJldHVybiByZXQ7fX07cmV0dXJue0ludGVydmFsVHJlZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYi5tYXRoJyxmdW5jdGlvbigpe2NvbnN0IHRtcFZlYzJzPVtdO2ZvcihsZXQgaT0wO2k8ODtpKyspe3RtcFZlYzJzW2ldPXZlYzIuY3JlYXRlKCk7fQotY29uc3QgdG1wVmVjMmE9dmVjNC5jcmVhdGUoKTtjb25zdCB0bXBWZWM0YT12ZWM0LmNyZWF0ZSgpO2NvbnN0IHRtcFZlYzRiPXZlYzQuY3JlYXRlKCk7Y29uc3QgdG1wTWF0ND1tYXQ0LmNyZWF0ZSgpO2NvbnN0IHRtcE1hdDRiPW1hdDQuY3JlYXRlKCk7Y29uc3QgcDAwPXZlYzIuY3JlYXRlWFkoMCwwKTtjb25zdCBwMTA9dmVjMi5jcmVhdGVYWSgxLDApO2NvbnN0IHAwMT12ZWMyLmNyZWF0ZVhZKDAsMSk7Y29uc3QgcDExPXZlYzIuY3JlYXRlWFkoMSwxKTtjb25zdCBsZXJwaW5nVmVjQT12ZWMyLmNyZWF0ZSgpO2NvbnN0IGxlcnBpbmdWZWNCPXZlYzIuY3JlYXRlKCk7ZnVuY3Rpb24gbGVycFZlYzIob3V0LGEsYixhbXQpe3ZlYzIuc2NhbGUobGVycGluZ1ZlY0EsYSxhbXQpO3ZlYzIuc2NhbGUobGVycGluZ1ZlY0IsYiwxLWFtdCk7dmVjMi5hZGQob3V0LGxlcnBpbmdWZWNBLGxlcnBpbmdWZWNCKTt2ZWMyLm5vcm1hbGl6ZShvdXQsb3V0KTtyZXR1cm4gb3V0O30KLWZ1bmN0aW9uIFF1YWQoKXt0aGlzLnAxPXZlYzIuY3JlYXRlKCk7dGhpcy5wMj12ZWMyLmNyZWF0ZSgpO3RoaXMucDM9dmVjMi5jcmVhdGUoKTt0aGlzLnA0PXZlYzIuY3JlYXRlKCk7fQotUXVhZC5mcm9tWFlXSD1mdW5jdGlvbih4LHksdyxoKXtjb25zdCBxPW5ldyBRdWFkKCk7dmVjMi5zZXQocS5wMSx4LHkpO3ZlYzIuc2V0KHEucDIseCt3LHkpO3ZlYzIuc2V0KHEucDMseCt3LHkraCk7dmVjMi5zZXQocS5wNCx4LHkraCk7cmV0dXJuIHE7fTtRdWFkLmZyb21SZWN0PWZ1bmN0aW9uKHIpe3JldHVybiBuZXcgUXVhZC5mcm9tWFlXSChyLngsci55LHIud2lkdGgsci5oZWlnaHQpO307UXVhZC5mcm9tNFZlY3M9ZnVuY3Rpb24ocDEscDIscDMscDQpe2NvbnN0IHE9bmV3IFF1YWQoKTt2ZWMyLnNldChxLnAxLHAxWzBdLHAxWzFdKTt2ZWMyLnNldChxLnAyLHAyWzBdLHAyWzFdKTt2ZWMyLnNldChxLnAzLHAzWzBdLHAzWzFdKTt2ZWMyLnNldChxLnA0LHA0WzBdLHA0WzFdKTtyZXR1cm4gcTt9O1F1YWQuZnJvbThBcnJheT1mdW5jdGlvbihhcnIpe2lmKGFyci5sZW5ndGghPT04KXt0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IG11c3QgYmUgOCBsb25nJyk7fQotY29uc3QgcT1uZXcgUXVhZCgpO3EucDFbMF09YXJyWzBdO3EucDFbMV09YXJyWzFdO3EucDJbMF09YXJyWzJdO3EucDJbMV09YXJyWzNdO3EucDNbMF09YXJyWzRdO3EucDNbMV09YXJyWzVdO3EucDRbMF09YXJyWzZdO3EucDRbMV09YXJyWzddO3JldHVybiBxO307UXVhZC5wcm90b3R5cGU9e3BvaW50SW5zaWRlKHBvaW50KXtyZXR1cm4gcG9pbnRJbkltcGxpY2l0UXVhZChwb2ludCx0aGlzLnAxLHRoaXMucDIsdGhpcy5wMyx0aGlzLnA0KTt9LGJvdW5kaW5nUmVjdCgpe2NvbnN0IHgwPU1hdGgubWluKHRoaXMucDFbMF0sdGhpcy5wMlswXSx0aGlzLnAzWzBdLHRoaXMucDRbMF0pO2NvbnN0IHkwPU1hdGgubWluKHRoaXMucDFbMV0sdGhpcy5wMlsxXSx0aGlzLnAzWzFdLHRoaXMucDRbMV0pO2NvbnN0IHgxPU1hdGgubWF4KHRoaXMucDFbMF0sdGhpcy5wMlswXSx0aGlzLnAzWzBdLHRoaXMucDRbMF0pO2NvbnN0IHkxPU1hdGgubWF4KHRoaXMucDFbMV0sdGhpcy5wMlsxXSx0aGlzLnAzWzFdLHRoaXMucDRbMV0pO3JldHVybiBuZXcgdHIuYi5tYXRoLlJlY3QuZnJvbVhZV0goeDAseTAseDEteDAseTEteTApO30sY2xvbmUoKXtjb25zdCBxPW5ldyBRdWFkKCk7dmVjMi5jb3B5KHEucDEsdGhpcy5wMSk7dmVjMi5jb3B5KHEucDIsdGhpcy5wMik7dmVjMi5jb3B5KHEucDMsdGhpcy5wMyk7dmVjMi5jb3B5KHEucDQsdGhpcy5wNCk7cmV0dXJuIHE7fSxzY2FsZShzKXtjb25zdCBxPW5ldyBRdWFkKCk7dGhpcy5zY2FsZUZhc3QocSxzKTtyZXR1cm4gcTt9LHNjYWxlRmFzdChkc3RRdWFkLHMpe3ZlYzIuY29weShkc3RRdWFkLnAxLHRoaXMucDEscyk7dmVjMi5jb3B5KGRzdFF1YWQucDIsdGhpcy5wMixzKTt2ZWMyLmNvcHkoZHN0UXVhZC5wMyx0aGlzLnAzLHMpO3ZlYzIuY29weShkc3RRdWFkLnAzLHRoaXMucDMscyk7fSxpc1JlY3RhbmdsZSgpe2NvbnN0IGJvdW5kcz10aGlzLmJvdW5kaW5nUmVjdCgpO3JldHVybihib3VuZHMueD09PXRoaXMucDFbMF0mJmJvdW5kcy55PT09dGhpcy5wMVsxXSYmYm91bmRzLndpZHRoPT09dGhpcy5wMlswXS10aGlzLnAxWzBdJiZib3VuZHMueT09PXRoaXMucDJbMV0mJmJvdW5kcy53aWR0aD09PXRoaXMucDNbMF0tdGhpcy5wMVswXSYmYm91bmRzLmhlaWdodD09PXRoaXMucDNbMV0tdGhpcy5wMlsxXSYmYm91bmRzLng9PT10aGlzLnA0WzBdJiZib3VuZHMuaGVpZ2h0PT09dGhpcy5wNFsxXS10aGlzLnAyWzFdKTt9LHByb2plY3RVbml0UmVjdChyZWN0KXtjb25zdCBxPW5ldyBRdWFkKCk7dGhpcy5wcm9qZWN0VW5pdFJlY3RGYXN0KHEscmVjdCk7cmV0dXJuIHE7fSxwcm9qZWN0VW5pdFJlY3RGYXN0KGRzdFF1YWQscmVjdCl7Y29uc3QgdjEyPXRtcFZlYzJzWzBdO2NvbnN0IHYxND10bXBWZWMyc1sxXTtjb25zdCB2MjM9dG1wVmVjMnNbMl07Y29uc3QgdjQzPXRtcFZlYzJzWzNdO3ZlYzIuc3ViKHYxMix0aGlzLnAyLHRoaXMucDEpO2NvbnN0IGwxMj12ZWMyLmxlbmd0aCh2MTIpO3ZlYzIuc2NhbGUodjEyLHYxMiwxL2wxMik7dmVjMi5zdWIodjE0LHRoaXMucDQsdGhpcy5wMSk7Y29uc3QgbDE0PXZlYzIubGVuZ3RoKHYxNCk7dmVjMi5zY2FsZSh2MTQsdjE0LDEvbDE0KTt2ZWMyLnN1Yih2MjMsdGhpcy5wMyx0aGlzLnAyKTtjb25zdCBsMjM9dmVjMi5sZW5ndGgodjIzKTt2ZWMyLnNjYWxlKHYyMyx2MjMsMS9sMjMpO3ZlYzIuc3ViKHY0Myx0aGlzLnAzLHRoaXMucDQpO2NvbnN0IGw0Mz12ZWMyLmxlbmd0aCh2NDMpO3ZlYzIuc2NhbGUodjQzLHY0MywxL2w0Myk7Y29uc3QgYjEyPXRtcFZlYzJzWzBdO2NvbnN0IGIxND10bXBWZWMyc1sxXTtjb25zdCBiMjM9dG1wVmVjMnNbMl07Y29uc3QgYjQzPXRtcFZlYzJzWzNdO2xlcnBWZWMyKGIxMix2MTIsdjQzLHJlY3QueSk7bGVycFZlYzIoYjQzLHYxMix2NDMsMS1yZWN0LmJvdHRvbSk7bGVycFZlYzIoYjE0LHYxNCx2MjMscmVjdC54KTtsZXJwVmVjMihiMjMsdjE0LHYyMywxLXJlY3QucmlnaHQpO3ZlYzIuYWRkVHdvU2NhbGVkVW5pdFZlY3RvcnModG1wVmVjMmEsYjEyLGwxMipyZWN0LngsYjE0LGwxNCpyZWN0LnkpO3ZlYzIuYWRkKGRzdFF1YWQucDEsdGhpcy5wMSx0bXBWZWMyYSk7dmVjMi5hZGRUd29TY2FsZWRVbml0VmVjdG9ycyh0bXBWZWMyYSxiMTIsbDEyKi0oMS4wLXJlY3QucmlnaHQpLGIyMyxsMjMqcmVjdC55KTt2ZWMyLmFkZChkc3RRdWFkLnAyLHRoaXMucDIsdG1wVmVjMmEpO3ZlYzIuYWRkVHdvU2NhbGVkVW5pdFZlY3RvcnModG1wVmVjMmEsYjQzLGw0MyotKDEuMC1yZWN0LnJpZ2h0KSxiMjMsbDIzKi0oMS4wLXJlY3QuYm90dG9tKSk7dmVjMi5hZGQoZHN0UXVhZC5wMyx0aGlzLnAzLHRtcFZlYzJhKTt2ZWMyLmFkZFR3b1NjYWxlZFVuaXRWZWN0b3JzKHRtcFZlYzJhLGI0MyxsNDMqcmVjdC5sZWZ0LGIxNCxsMTQqLSgxLjAtcmVjdC5ib3R0b20pKTt2ZWMyLmFkZChkc3RRdWFkLnA0LHRoaXMucDQsdG1wVmVjMmEpO30sdG9TdHJpbmcoKXtyZXR1cm4nUXVhZCgnKwotdmVjMi50b1N0cmluZyh0aGlzLnAxKSsnLCAnKwotdmVjMi50b1N0cmluZyh0aGlzLnAyKSsnLCAnKwotdmVjMi50b1N0cmluZyh0aGlzLnAzKSsnLCAnKwotdmVjMi50b1N0cmluZyh0aGlzLnA0KSsnKSc7fX07ZnVuY3Rpb24gc2lnbihwMSxwMixwMyl7cmV0dXJuKHAxWzBdLXAzWzBdKSoocDJbMV0tcDNbMV0pLQotKHAyWzBdLXAzWzBdKSoocDFbMV0tcDNbMV0pO30KLWZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZTIocHQscDEscDIscDMpe2NvbnN0IGIxPXNpZ24ocHQscDEscDIpPDAuMDtjb25zdCBiMj1zaWduKHB0LHAyLHAzKTwwLjA7Y29uc3QgYjM9c2lnbihwdCxwMyxwMSk8MC4wO3JldHVybigoYjE9PT1iMikmJihiMj09PWIzKSk7fQotZnVuY3Rpb24gcG9pbnRJbkltcGxpY2l0UXVhZChwb2ludCxwMSxwMixwMyxwNCl7cmV0dXJuIHBvaW50SW5UcmlhbmdsZTIocG9pbnQscDEscDIscDMpfHxwb2ludEluVHJpYW5nbGUyKHBvaW50LHAxLHAzLHA0KTt9Ci1yZXR1cm57cG9pbnRJblRyaWFuZ2xlMixwb2ludEluSW1wbGljaXRRdWFkLFF1YWQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y29uc3QgRVNUSU1BVEVEX0lETEVfUEVSSU9EX0xFTkdUSF9NSUxMSVNFQ09ORFM9MTA7Y29uc3QgUkVRVUVTVF9JRExFX0NBTExCQUNLX1RJTUVPVVRfTUlMTElTRUNPTkRTPTEwMDtjb25zdCByZWNvcmRSQUZTdGFja3M9ZmFsc2U7bGV0IHBlbmRpbmdQcmVBRnM9W107bGV0IHBlbmRpbmdSQUZzPVtdO2NvbnN0IHBlbmRpbmdJZGxlQ2FsbGJhY2tzPVtdO2xldCBjdXJyZW50UkFGRGlzcGF0Y2hMaXN0PXVuZGVmaW5lZDtsZXQgcmFmU2NoZWR1bGVkPWZhbHNlO2xldCBpZGxlV29ya1NjaGVkdWxlZD1mYWxzZTtmdW5jdGlvbiBzY2hlZHVsZVJBRigpe2lmKHJhZlNjaGVkdWxlZClyZXR1cm47cmFmU2NoZWR1bGVkPXRydWU7aWYodHIuaXNIZWFkbGVzcyl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3Byb2Nlc3NSZXF1ZXN0cyhmYWxzZSwwKTt9LGZ1bmN0aW9uKGUpe3Rocm93IGU7fSk7fWVsc2V7aWYod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShwcm9jZXNzUmVxdWVzdHMuYmluZCh0aGlzLGZhbHNlKSk7fWVsc2V7Y29uc3QgZGVsdGE9RGF0ZS5ub3coKS13aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7d2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbihkb21UaW1lU3RhbXApe3Byb2Nlc3NSZXF1ZXN0cyhmYWxzZSxkb21UaW1lU3RhbXAtZGVsdGEpO30pO319fQotZnVuY3Rpb24gbmF0aXZlUmVxdWVzdElkbGVDYWxsYmFja1N1cHBvcnRlZCgpe3JldHVybiF0ci5pc0hlYWRsZXNzJiZ3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjazt9Ci1mdW5jdGlvbiBzY2hlZHVsZUlkbGVXb3JrKCl7aWYoaWRsZVdvcmtTY2hlZHVsZWQpcmV0dXJuO2lmKCFuYXRpdmVSZXF1ZXN0SWRsZUNhbGxiYWNrU3VwcG9ydGVkKCkpe3NjaGVkdWxlUkFGKCk7cmV0dXJuO30KLWlkbGVXb3JrU2NoZWR1bGVkPXRydWU7d2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2soZnVuY3Rpb24oZGVhZGxpbmUsZGlkVGltZW91dCl7cHJvY2Vzc0lkbGVXb3JrKGZhbHNlLGRlYWRsaW5lKTt9LHt0aW1lb3V0OlJFUVVFU1RfSURMRV9DQUxMQkFDS19USU1FT1VUX01JTExJU0VDT05EU30pO30KLWZ1bmN0aW9uIG9uQW5pbWF0aW9uRnJhbWVFcnJvcihlLG9wdF9zdGFjayl7Y29uc29sZS5sb2coZS5zdGFjayk7aWYodHIuaXNIZWFkbGVzcyl0aHJvdyBlO2lmKG9wdF9zdGFjayljb25zb2xlLmxvZyhvcHRfc3RhY2spO2lmKGUubWVzc2FnZSl7Y29uc29sZS5lcnJvcihlLm1lc3NhZ2UsZS5zdGFjayk7fWVsc2V7Y29uc29sZS5lcnJvcihlKTt9fQotZnVuY3Rpb24gcnVuVGFzayh0YXNrLGZyYW1lQmVnaW5UaW1lKXt0cnl7dGFzay5jYWxsYmFjay5jYWxsKHRhc2suY29udGV4dCxmcmFtZUJlZ2luVGltZSk7fWNhdGNoKGUpe3RyLmIub25BbmltYXRpb25GcmFtZUVycm9yKGUsdGFzay5zdGFjayk7fX0KLWZ1bmN0aW9uIHByb2Nlc3NSZXF1ZXN0cyhmb3JjZUFsbFRhc2tzVG9SdW4sZnJhbWVCZWdpblRpbWUpe3JhZlNjaGVkdWxlZD1mYWxzZTtjb25zdCBjdXJyZW50UHJlQUZzPXBlbmRpbmdQcmVBRnM7Y3VycmVudFJBRkRpc3BhdGNoTGlzdD1wZW5kaW5nUkFGcztwZW5kaW5nUHJlQUZzPVtdO3BlbmRpbmdSQUZzPVtdO2NvbnN0IGhhc1JBRlRhc2tzPWN1cnJlbnRQcmVBRnMubGVuZ3RofHxjdXJyZW50UkFGRGlzcGF0Y2hMaXN0Lmxlbmd0aDtmb3IobGV0IGk9MDtpPGN1cnJlbnRQcmVBRnMubGVuZ3RoO2krKyl7cnVuVGFzayhjdXJyZW50UHJlQUZzW2ldLGZyYW1lQmVnaW5UaW1lKTt9Ci13aGlsZShjdXJyZW50UkFGRGlzcGF0Y2hMaXN0Lmxlbmd0aD4wKXtydW5UYXNrKGN1cnJlbnRSQUZEaXNwYXRjaExpc3Quc2hpZnQoKSxmcmFtZUJlZ2luVGltZSk7fQotY3VycmVudFJBRkRpc3BhdGNoTGlzdD11bmRlZmluZWQ7aWYoKCFoYXNSQUZUYXNrcyYmIW5hdGl2ZVJlcXVlc3RJZGxlQ2FsbGJhY2tTdXBwb3J0ZWQoKSl8fGZvcmNlQWxsVGFza3NUb1J1bil7Y29uc3QgcmFmQ29tcGxldGlvbkRlYWRsaW5lPWZyYW1lQmVnaW5UaW1lK0VTVElNQVRFRF9JRExFX1BFUklPRF9MRU5HVEhfTUlMTElTRUNPTkRTO3Byb2Nlc3NJZGxlV29yayhmb3JjZUFsbFRhc2tzVG9SdW4se3RpbWVSZW1haW5pbmcoKXtyZXR1cm4gcmFmQ29tcGxldGlvbkRlYWRsaW5lLXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTt9fSk7fQotaWYocGVuZGluZ0lkbGVDYWxsYmFja3MubGVuZ3RoPjApc2NoZWR1bGVJZGxlV29yaygpO30KLWZ1bmN0aW9uIHByb2Nlc3NJZGxlV29yayhmb3JjZUFsbFRhc2tzVG9SdW4sZGVhZGxpbmUpe2lkbGVXb3JrU2NoZWR1bGVkPWZhbHNlO3doaWxlKHBlbmRpbmdJZGxlQ2FsbGJhY2tzLmxlbmd0aD4wKXtydW5UYXNrKHBlbmRpbmdJZGxlQ2FsbGJhY2tzLnNoaWZ0KCkpO2lmKCFmb3JjZUFsbFRhc2tzVG9SdW4mJih0ci5pc0hlYWRsZXNzfHxkZWFkbGluZS50aW1lUmVtYWluaW5nKCk8PTApKXticmVhazt9fQotaWYocGVuZGluZ0lkbGVDYWxsYmFja3MubGVuZ3RoPjApc2NoZWR1bGVJZGxlV29yaygpO30KLWZ1bmN0aW9uIGdldFN0YWNrXygpe2lmKCFyZWNvcmRSQUZTdGFja3MpcmV0dXJuJyc7Y29uc3Qgc3RhY2tMaW5lcz10ci5iLnN0YWNrVHJhY2UoKTtzdGFja0xpbmVzLnNoaWZ0KCk7cmV0dXJuIHN0YWNrTGluZXMuam9pbignXG4nKTt9Ci1mdW5jdGlvbiByZXF1ZXN0UHJlQW5pbWF0aW9uRnJhbWUoY2FsbGJhY2ssb3B0X3RoaXMpe3BlbmRpbmdQcmVBRnMucHVzaCh7Y2FsbGJhY2ssY29udGV4dDpvcHRfdGhpc3x8Z2xvYmFsLHN0YWNrOmdldFN0YWNrXygpfSk7c2NoZWR1bGVSQUYoKTt9Ci1mdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVJblRoaXNGcmFtZUlmUG9zc2libGUoY2FsbGJhY2ssb3B0X3RoaXMpe2lmKCFjdXJyZW50UkFGRGlzcGF0Y2hMaXN0KXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2ssb3B0X3RoaXMpO3JldHVybjt9Ci1jdXJyZW50UkFGRGlzcGF0Y2hMaXN0LnB1c2goe2NhbGxiYWNrLGNvbnRleHQ6b3B0X3RoaXN8fGdsb2JhbCxzdGFjazpnZXRTdGFja18oKX0pO3JldHVybjt9Ci1mdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2ssb3B0X3RoaXMpe3BlbmRpbmdSQUZzLnB1c2goe2NhbGxiYWNrLGNvbnRleHQ6b3B0X3RoaXN8fGdsb2JhbCxzdGFjazpnZXRTdGFja18oKX0pO3NjaGVkdWxlUkFGKCk7fQotZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWUoKXtyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZT0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUpKTt9Ci1mdW5jdGlvbiByZXF1ZXN0SWRsZUNhbGxiYWNrKGNhbGxiYWNrLG9wdF90aGlzKXtwZW5kaW5nSWRsZUNhbGxiYWNrcy5wdXNoKHtjYWxsYmFjayxjb250ZXh0Om9wdF90aGlzfHxnbG9iYWwsc3RhY2s6Z2V0U3RhY2tfKCl9KTtzY2hlZHVsZUlkbGVXb3JrKCk7fQotZnVuY3Rpb24gZm9yY2VQZW5kaW5nUkFGVGFza3NUb1J1bihmcmFtZUJlZ2luVGltZSl7aWYoIXJhZlNjaGVkdWxlZClyZXR1cm47cHJvY2Vzc1JlcXVlc3RzKGZhbHNlLGZyYW1lQmVnaW5UaW1lKTt9Ci1mdW5jdGlvbiBmb3JjZUFsbFBlbmRpbmdUYXNrc1RvUnVuRm9yVGVzdCgpe2lmKCFyYWZTY2hlZHVsZWQmJiFpZGxlV29ya1NjaGVkdWxlZClyZXR1cm47cHJvY2Vzc1JlcXVlc3RzKHRydWUsMCk7fQotZnVuY3Rpb24gdGltZW91dChtcyl7cmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmU9PndpbmRvdy5zZXRUaW1lb3V0KHJlc29sdmUsbXMpKTt9Ci1mdW5jdGlvbiBpZGxlKCl7cmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmU9PnJlcXVlc3RJZGxlQ2FsbGJhY2socmVzb2x2ZSkpO30KLXJldHVybnthbmltYXRpb25GcmFtZSxmb3JjZUFsbFBlbmRpbmdUYXNrc1RvUnVuRm9yVGVzdCxmb3JjZVBlbmRpbmdSQUZUYXNrc1RvUnVuLGlkbGUsb25BbmltYXRpb25GcmFtZUVycm9yLHJlcXVlc3RBbmltYXRpb25GcmFtZSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWVJblRoaXNGcmFtZUlmUG9zc2libGUscmVxdWVzdElkbGVDYWxsYmFjayxyZXF1ZXN0UHJlQW5pbWF0aW9uRnJhbWUsdGltZW91dCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtjbGFzcyBNYXJre2NvbnN0cnVjdG9yKGdyb3VwTmFtZSxmdW5jdGlvbk5hbWUpe2lmKHRyLmlzSGVhZGxlc3MpcmV0dXJuO3RoaXMuZ3JvdXBOYW1lXz1ncm91cE5hbWU7dGhpcy5mdW5jdGlvbk5hbWVfPWZ1bmN0aW9uTmFtZTtjb25zdCBndWlkPXRyLmIuR1VJRC5hbGxvY2F0ZVNpbXBsZSgpO3RoaXMubWVhc3VyZU5hbWVfPWAke2dyb3VwTmFtZX0gJHtmdW5jdGlvbk5hbWV9YDt0aGlzLnN0YXJ0TWFya05hbWVfPWAke3RoaXMubWVhc3VyZU5hbWV9ICR7Z3VpZH0gc3RhcnRgO3RoaXMuZW5kTWFya05hbWVfPWAke3RoaXMubWVhc3VyZU5hbWV9ICR7Z3VpZH0gZW5kYDt3aW5kb3cucGVyZm9ybWFuY2UubWFyayh0aGlzLnN0YXJ0TWFya05hbWVfKTt9Ci1nZXQgZ3JvdXBOYW1lKCl7cmV0dXJuIHRoaXMuZ3JvdXBOYW1lXzt9Ci1nZXQgZnVuY3Rpb25OYW1lKCl7cmV0dXJuIHRoaXMuZnVuY3Rpb25OYW1lXzt9Ci1nZXQgbWVhc3VyZU5hbWUoKXtyZXR1cm4gdGhpcy5tZWFzdXJlTmFtZV87fQotZ2V0IHN0YXJ0TWFyaygpe3JldHVybiB0ci5iLmdldE9ubHlFbGVtZW50KHdpbmRvdy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKHRoaXMuc3RhcnRNYXJrTmFtZV8pKTt9Ci1nZXQgZW5kTWFyaygpe3JldHVybiB0ci5iLmdldE9ubHlFbGVtZW50KHdpbmRvdy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKHRoaXMuZW5kTWFya05hbWVfKSk7fQotZ2V0IGR1cmF0aW9uTXMoKXtyZXR1cm4gdGhpcy5lbmRNYXJrLnN0YXJ0VGltZS10aGlzLnN0YXJ0TWFyay5zdGFydFRpbWU7fQotZW5kKCl7aWYodHIuaXNIZWFkbGVzcylyZXR1cm47d2luZG93LnBlcmZvcm1hbmNlLm1hcmsodGhpcy5lbmRNYXJrTmFtZV8pO3dpbmRvdy5wZXJmb3JtYW5jZS5tZWFzdXJlKHRoaXMubWVhc3VyZU5hbWVfLHRoaXMuc3RhcnRNYXJrTmFtZV8sdGhpcy5lbmRNYXJrTmFtZV8pO2lmKCEod2luZG93LmdhIGluc3RhbmNlb2YgRnVuY3Rpb24pKXJldHVybjtnYSgnc2VuZCcse2hpdFR5cGU6J2V2ZW50JyxldmVudENhdGVnb3J5OnRoaXMuZ3JvdXBOYW1lLGV2ZW50QWN0aW9uOnRoaXMuZnVuY3Rpb25OYW1lLGV2ZW50VmFsdWU6dGhpcy5kdXJhdGlvbk1zLH0pO319Ci1jbGFzcyBUaW1pbmd7c3RhdGljIG1hcmsoZ3JvdXBOYW1lLGZ1bmN0aW9uTmFtZSl7cmV0dXJuIG5ldyBNYXJrKGdyb3VwTmFtZSxmdW5jdGlvbk5hbWUpO30KLXN0YXRpYyBpbnN0YW50KGdyb3VwTmFtZSxmdW5jdGlvbk5hbWUsb3B0X3ZhbHVlKXtjb25zdCB2YWx1ZVN0cmluZz1vcHRfdmFsdWU9PT11bmRlZmluZWQ/Jyc6JyAnK29wdF92YWx1ZTtpZihjb25zb2xlJiZjb25zb2xlLnRpbWVTdGFtcCl7Y29uc29sZS50aW1lU3RhbXAoYCR7Z3JvdXBOYW1lfSAke2Z1bmN0aW9uTmFtZX0ke3ZhbHVlU3RyaW5nfWApO30KLWlmKHdpbmRvdyYmd2luZG93LmdhIGluc3RhbmNlb2YgRnVuY3Rpb24pe2dhKCdzZW5kJyx7aGl0VHlwZTonZXZlbnQnLGV2ZW50Q2F0ZWdvcnk6Z3JvdXBOYW1lLGV2ZW50QWN0aW9uOmZ1bmN0aW9uTmFtZSxldmVudFZhbHVlOm9wdF92YWx1ZSx9KTt9fQotc3RhdGljIGdldEN1cnJlbnRUaW1lTXMoKXt0cnl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO31jYXRjaChlcnJvcil7fQotcmV0dXJuIDA7fX0KLXJldHVybntUaW1pbmcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y29uc3QgVGltaW5nPXRyLmIuVGltaW5nO2Z1bmN0aW9uIFRhc2socnVuQ2IsdGhpc0FyZyl7aWYocnVuQ2IhPT11bmRlZmluZWQmJnRoaXNBcmc9PT11bmRlZmluZWQmJnJ1bkNiLnByb3RvdHlwZSE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdBbG1vc3QgY2VydGFpbmx5IHlvdSBtZWFudCB0byBwYXNzIGEgYm91bmQgY2FsbGJhY2sgJysnb3IgdGhpc0FyZy4nKTt9Ci10aGlzLnJ1bkNiXz1ydW5DYjt0aGlzLnRoaXNBcmdfPXRoaXNBcmc7dGhpcy5hZnRlclRhc2tfPXVuZGVmaW5lZDt0aGlzLnN1YlRhc2tzXz1bXTt0aGlzLnVwZGF0ZXNVaV89ZmFsc2U7fQotVGFzay5wcm90b3R5cGU9e2dldCBuYW1lKCl7cmV0dXJuIHRoaXMucnVuQ2JfLm5hbWU7fSxzZXQgdXBkYXRlc1VpKHZhbHVlKXt0aGlzLnVwZGF0ZXNVaV89dmFsdWU7fSxzdWJUYXNrKGNiLHRoaXNBcmcpe2lmKGNiIGluc3RhbmNlb2YgVGFzayl7dGhpcy5zdWJUYXNrc18ucHVzaChjYik7fWVsc2V7dGhpcy5zdWJUYXNrc18ucHVzaChuZXcgVGFzayhjYix0aGlzQXJnKSk7fQotcmV0dXJuIHRoaXMuc3ViVGFza3NfW3RoaXMuc3ViVGFza3NfLmxlbmd0aC0xXTt9LHJ1bigpe2lmKHRoaXMucnVuQ2JfIT09dW5kZWZpbmVkKXRoaXMucnVuQ2JfLmNhbGwodGhpcy50aGlzQXJnXyx0aGlzKTtjb25zdCBzdWJUYXNrcz10aGlzLnN1YlRhc2tzXzt0aGlzLnN1YlRhc2tzXz11bmRlZmluZWQ7aWYoIXN1YlRhc2tzLmxlbmd0aClyZXR1cm4gdGhpcy5hZnRlclRhc2tfO2ZvcihsZXQgaT0xO2k8c3ViVGFza3MubGVuZ3RoO2krKyl7c3ViVGFza3NbaS0xXS5hZnRlclRhc2tfPXN1YlRhc2tzW2ldO30KLXN1YlRhc2tzW3N1YlRhc2tzLmxlbmd0aC0xXS5hZnRlclRhc2tfPXRoaXMuYWZ0ZXJUYXNrXztyZXR1cm4gc3ViVGFza3NbMF07fSxhZnRlcihjYix0aGlzQXJnKXtpZih0aGlzLmFmdGVyVGFza18pe3Rocm93IG5ldyBFcnJvcignSGFzIGFuIGFmdGVyIHRhc2sgYWxyZWFkeScpO30KLWlmKGNiIGluc3RhbmNlb2YgVGFzayl7dGhpcy5hZnRlclRhc2tfPWNiO31lbHNle3RoaXMuYWZ0ZXJUYXNrXz1uZXcgVGFzayhjYix0aGlzQXJnKTt9Ci1yZXR1cm4gdGhpcy5hZnRlclRhc2tfO30sZW5xdWV1ZShjYix0aGlzQXJnKXtpZighdGhpcy5hZnRlclRhc2tfKXJldHVybiB0aGlzLmFmdGVyKGNiLHRoaXNBcmcpO3JldHVybiB0aGlzLmFmdGVyVGFza18uZW5xdWV1ZShjYix0aGlzQXJnKTt9fTtUYXNrLlJ1blN5bmNocm9ub3VzbHk9ZnVuY3Rpb24odGFzayl7bGV0IGN1clRhc2s9dGFzazt3aGlsZShjdXJUYXNrKXtjdXJUYXNrPWN1clRhc2sucnVuKCk7fX07VGFzay5SdW5XaGVuSWRsZT1mdW5jdGlvbih0YXNrKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3Qpe2xldCBjdXJUYXNrPXRhc2s7ZnVuY3Rpb24gcnVuQW5vdGhlcigpe3RyeXtjdXJUYXNrPWN1clRhc2sucnVuKCk7fWNhdGNoKGUpe3JlamVjdChlKTtyZXR1cm47fQotaWYoY3VyVGFzayl7aWYoY3VyVGFzay51cGRhdGVzVWlfKXt0ci5iLnJlcXVlc3RBbmltYXRpb25GcmFtZUluVGhpc0ZyYW1lSWZQb3NzaWJsZShydW5Bbm90aGVyKTt9ZWxzZXt0ci5iLnJlcXVlc3RJZGxlQ2FsbGJhY2socnVuQW5vdGhlcik7fQotcmV0dXJuO30KLXJlc29sdmUoKTt9Ci10ci5iLnJlcXVlc3RJZGxlQ2FsbGJhY2socnVuQW5vdGhlcik7fSk7fTtyZXR1cm57VGFzayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYycsZnVuY3Rpb24oKXtmdW5jdGlvbiBtYWtlQ2FzZUluc2Vuc2l0aXZlUmVnZXgocGF0dGVybil7cGF0dGVybj1wYXR0ZXJuLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCdcXCQmJyk7cmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwnaScpO30KLWZ1bmN0aW9uIEZpbHRlcigpe30KLUZpbHRlci5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3QucHJvdG90eXBlLG1hdGNoQ291bnRlcihjb3VudGVyKXtyZXR1cm4gdHJ1ZTt9LG1hdGNoQ3B1KGNwdSl7cmV0dXJuIHRydWU7fSxtYXRjaFByb2Nlc3MocHJvY2Vzcyl7cmV0dXJuIHRydWU7fSxtYXRjaFNsaWNlKHNsaWNlKXtyZXR1cm4gdHJ1ZTt9LG1hdGNoVGhyZWFkKHRocmVhZCl7cmV0dXJuIHRydWU7fX07ZnVuY3Rpb24gVGl0bGVPckNhdGVnb3J5RmlsdGVyKHRleHQpe0ZpbHRlci5jYWxsKHRoaXMpO3RoaXMucmVnZXhfPW1ha2VDYXNlSW5zZW5zaXRpdmVSZWdleCh0ZXh0KTtpZighdGV4dC5sZW5ndGgpe3Rocm93IG5ldyBFcnJvcignRmlsdGVyIHRleHQgaXMgZW1wdHkuJyk7fX0KLVRpdGxlT3JDYXRlZ29yeUZpbHRlci5wcm90b3R5cGU9e19fcHJvdG9fXzpGaWx0ZXIucHJvdG90eXBlLG1hdGNoU2xpY2Uoc2xpY2Upe2lmKHNsaWNlLnRpdGxlPT09dW5kZWZpbmVkJiZzbGljZS5jYXRlZ29yeT09PXVuZGVmaW5lZCl7cmV0dXJuIGZhbHNlO30KLXJldHVybiB0aGlzLnJlZ2V4Xy50ZXN0KHNsaWNlLnRpdGxlKXx8KCEhc2xpY2UuY2F0ZWdvcnkmJnRoaXMucmVnZXhfLnRlc3Qoc2xpY2UuY2F0ZWdvcnkpKTt9fTtmdW5jdGlvbiBFeGFjdFRpdGxlRmlsdGVyKHRleHQpe0ZpbHRlci5jYWxsKHRoaXMpO3RoaXMudGV4dF89dGV4dDtpZighdGV4dC5sZW5ndGgpe3Rocm93IG5ldyBFcnJvcignRmlsdGVyIHRleHQgaXMgZW1wdHkuJyk7fX0KLUV4YWN0VGl0bGVGaWx0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186RmlsdGVyLnByb3RvdHlwZSxtYXRjaFNsaWNlKHNsaWNlKXtyZXR1cm4gc2xpY2UudGl0bGU9PT10aGlzLnRleHRfO319O2Z1bmN0aW9uIEZ1bGxUZXh0RmlsdGVyKHRleHQpe0ZpbHRlci5jYWxsKHRoaXMpO3RoaXMucmVnZXhfPW1ha2VDYXNlSW5zZW5zaXRpdmVSZWdleCh0ZXh0KTt0aGlzLnRpdGxlT3JDYXRlZ29yeUZpbHRlcl89bmV3IFRpdGxlT3JDYXRlZ29yeUZpbHRlcih0ZXh0KTt9Ci1GdWxsVGV4dEZpbHRlci5wcm90b3R5cGU9e19fcHJvdG9fXzpGaWx0ZXIucHJvdG90eXBlLG1hdGNoT2JqZWN0XyhvYmope2Zvcihjb25zdCBrZXkgaW4gb2JqKXtpZighb2JqLmhhc093blByb3BlcnR5KGtleSkpY29udGludWU7aWYodGhpcy5yZWdleF8udGVzdChrZXkpKXJldHVybiB0cnVlO2lmKHRoaXMucmVnZXhfLnRlc3Qob2JqW2tleV0pKXJldHVybiB0cnVlO30KLXJldHVybiBmYWxzZTt9LG1hdGNoU2xpY2Uoc2xpY2Upe2lmKHRoaXMudGl0bGVPckNhdGVnb3J5RmlsdGVyXy5tYXRjaFNsaWNlKHNsaWNlKSlyZXR1cm4gdHJ1ZTtyZXR1cm4gdGhpcy5tYXRjaE9iamVjdF8oc2xpY2UuYXJncyk7fX07cmV0dXJue0ZpbHRlcixUaXRsZU9yQ2F0ZWdvcnlGaWx0ZXIsRXhhY3RUaXRsZUZpbHRlcixGdWxsVGV4dEZpbHRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgQ2xvY2tEb21haW5JZD17QkFUVE9SOidCQVRUT1InLFVOS05PV05fQ0hST01FX0xFR0FDWTonVU5LTk9XTl9DSFJPTUVfTEVHQUNZJyxMSU5VWF9DTE9DS19NT05PVE9OSUM6J0xJTlVYX0NMT0NLX01PTk9UT05JQycsTElOVVhfRlRSQUNFX0dMT0JBTDonTElOVVhfRlRSQUNFX0dMT0JBTCcsTUFDX01BQ0hfQUJTT0xVVEVfVElNRTonTUFDX01BQ0hfQUJTT0xVVEVfVElNRScsV0lOX1JPTExPVkVSX1BST1RFQ1RFRF9USU1FX0dFVF9USU1FOidXSU5fUk9MTE9WRVJfUFJPVEVDVEVEX1RJTUVfR0VUX1RJTUUnLFdJTl9RUEM6J1dJTl9RUEMnLFNZU1RSQUNFOidTWVNUUkFDRScsVEVMRU1FVFJZOidURUxFTUVUUlknfTtjb25zdCBQT1NTSUJMRV9DSFJPTUVfQ0xPQ0tfRE9NQUlOUz1uZXcgU2V0KFtDbG9ja0RvbWFpbklkLlVOS05PV05fQ0hST01FX0xFR0FDWSxDbG9ja0RvbWFpbklkLkxJTlVYX0NMT0NLX01PTk9UT05JQyxDbG9ja0RvbWFpbklkLk1BQ19NQUNIX0FCU09MVVRFX1RJTUUsQ2xvY2tEb21haW5JZC5XSU5fUk9MTE9WRVJfUFJPVEVDVEVEX1RJTUVfR0VUX1RJTUUsQ2xvY2tEb21haW5JZC5XSU5fUVBDXSk7Y29uc3QgQkFUVE9SX0ZBU1RfU1lOQ19USFJFU0hPTERfTVM9MztmdW5jdGlvbiBDbG9ja1N5bmNNYW5hZ2VyKCl7dGhpcy5kb21haW5zU2Vlbl89bmV3IFNldCgpO3RoaXMubWFya2Vyc0J5U3luY0lkXz1uZXcgTWFwKCk7dGhpcy50cmFuc2Zvcm1lck1hcEJ5RG9tYWluSWRfPXt9O30KLUNsb2NrU3luY01hbmFnZXIucHJvdG90eXBlPXthZGRDbG9ja1N5bmNNYXJrZXIoZG9tYWluSWQsc3luY0lkLHN0YXJ0VHMsb3B0X2VuZFRzKXt0aGlzLm9uRG9tYWluU2Vlbl8oZG9tYWluSWQpO2lmKE9iamVjdC52YWx1ZXMoQ2xvY2tEb21haW5JZCkuaW5kZXhPZihkb21haW5JZCk8MCl7dGhyb3cgbmV3IEVycm9yKCciJytkb21haW5JZCsnIiBpcyBub3QgaW4gdGhlIGxpc3Qgb2Yga25vd24gJysnY2xvY2sgZG9tYWluIElEcy4nKTt9Ci1pZih0aGlzLm1vZGVsRG9tYWluSWRfKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhZGQgbmV3IGNsb2NrIHN5bmMgbWFya2VycyBhZnRlciBnZXR0aW5nICcrJ2EgbW9kZWwgdGltZSB0cmFuc2Zvcm1lci4nKTt9Ci1jb25zdCBtYXJrZXI9bmV3IENsb2NrU3luY01hcmtlcihkb21haW5JZCxzdGFydFRzLG9wdF9lbmRUcyk7aWYoIXRoaXMubWFya2Vyc0J5U3luY0lkXy5oYXMoc3luY0lkKSl7dGhpcy5tYXJrZXJzQnlTeW5jSWRfLnNldChzeW5jSWQsW21hcmtlcl0pO3JldHVybjt9Ci1jb25zdCBtYXJrZXJzPXRoaXMubWFya2Vyc0J5U3luY0lkXy5nZXQoc3luY0lkKTtpZihtYXJrZXJzLmxlbmd0aD09PTIpe3Rocm93IG5ldyBFcnJvcignQ2xvY2sgc3luYyB3aXRoIElEICInK3N5bmNJZCsnIiBpcyBhbHJlYWR5ICcrJ2NvbXBsZXRlIC0gY2Fubm90IGFkZCBhIHRoaXJkIGNsb2NrIHN5bmMgbWFya2VyIHRvIGl0LicpO30KLWlmKG1hcmtlcnNbMF0uZG9tYWluSWQ9PT1kb21haW5JZCl7dGhyb3cgbmV3IEVycm9yKCdBIGNsb2NrIGRvbWFpbiBjYW5ub3Qgc3luYyB3aXRoIGl0c2VsZi4nKTt9Ci1tYXJrZXJzLnB1c2gobWFya2VyKTt0aGlzLm9uU3luY0NvbXBsZXRlZF8obWFya2Vyc1swXSxtYXJrZXIpO30sZ2V0IG1hcmtlcnNCeVN5bmNJZCgpe3JldHVybiB0aGlzLm1hcmtlcnNCeVN5bmNJZF87fSxnZXQgZG9tYWluc1NlZW4oKXtyZXR1cm4gdGhpcy5kb21haW5zU2Vlbl87fSxnZXRNb2RlbFRpbWVUcmFuc2Zvcm1lcihkb21haW5JZCl7dGhpcy5vbkRvbWFpblNlZW5fKGRvbWFpbklkKTtpZighdGhpcy5tb2RlbERvbWFpbklkXyl7dGhpcy5zZWxlY3RNb2RlbERvbWFpbklkXygpO30KLXJldHVybiB0aGlzLmdldFRpbWVUcmFuc2Zvcm1lclJhd18oZG9tYWluSWQsdGhpcy5tb2RlbERvbWFpbklkXykuZm47fSxnZXRUaW1lVHJhbnNmb3JtZXJFcnJvcihmcm9tRG9tYWluSWQsdG9Eb21haW5JZCl7dGhpcy5vbkRvbWFpblNlZW5fKGZyb21Eb21haW5JZCk7dGhpcy5vbkRvbWFpblNlZW5fKHRvRG9tYWluSWQpO3JldHVybiB0aGlzLmdldFRpbWVUcmFuc2Zvcm1lclJhd18oZnJvbURvbWFpbklkLHRvRG9tYWluSWQpLmVycm9yO30sZ2V0VGltZVRyYW5zZm9ybWVyUmF3Xyhmcm9tRG9tYWluSWQsdG9Eb21haW5JZCl7Y29uc3QgdHJhbnNmb3JtZXI9dGhpcy5nZXRUcmFuc2Zvcm1lckJldHdlZW5fKGZyb21Eb21haW5JZCx0b0RvbWFpbklkKTtpZighdHJhbnNmb3JtZXIpe3Rocm93IG5ldyBFcnJvcignTm8gY2xvY2sgc3luYyBtYXJrZXJzIGV4aXN0IHBhaXJpbmcgY2xvY2sgZG9tYWluICInKwotZnJvbURvbWFpbklkKyciICcrJ3dpdGggdGFyZ2V0IGNsb2NrIGRvbWFpbiAiJysKLXRvRG9tYWluSWQrJyIuJyk7fQotcmV0dXJuIHRyYW5zZm9ybWVyO30sZ2V0VHJhbnNmb3JtZXJCZXR3ZWVuXyhmcm9tRG9tYWluSWQsdG9Eb21haW5JZCl7Y29uc3QgdmlzaXRlZERvbWFpbklkcz1uZXcgU2V0KCk7Y29uc3QgcXVldWU9W3tkb21haW5JZDpmcm9tRG9tYWluSWQsdHJhbnNmb3JtZXI6VHJhbnNmb3JtZXIuSURFTlRJVFl9XTt3aGlsZShxdWV1ZS5sZW5ndGg+MCl7cXVldWUuc29ydCgoZG9tYWluMSxkb21haW4yKT0+ZG9tYWluMS50cmFuc2Zvcm1lci5lcnJvci1kb21haW4yLnRyYW5zZm9ybWVyLmVycm9yKTtjb25zdCBjdXJyZW50PXF1ZXVlLnNoaWZ0KCk7aWYoY3VycmVudC5kb21haW5JZD09PXRvRG9tYWluSWQpe3JldHVybiBjdXJyZW50LnRyYW5zZm9ybWVyO30KLWlmKHZpc2l0ZWREb21haW5JZHMuaGFzKGN1cnJlbnQuZG9tYWluSWQpKXtjb250aW51ZTt9Ci12aXNpdGVkRG9tYWluSWRzLmFkZChjdXJyZW50LmRvbWFpbklkKTtjb25zdCBvdXRnb2luZ1RyYW5zZm9ybWVycz10aGlzLnRyYW5zZm9ybWVyTWFwQnlEb21haW5JZF9bY3VycmVudC5kb21haW5JZF07aWYoIW91dGdvaW5nVHJhbnNmb3JtZXJzKWNvbnRpbnVlO2Zvcihjb25zdCBvdXRnb2luZ0RvbWFpbklkIGluIG91dGdvaW5nVHJhbnNmb3JtZXJzKXtjb25zdCB0b05leHREb21haW5UcmFuc2Zvcm1lcj1vdXRnb2luZ1RyYW5zZm9ybWVyc1tvdXRnb2luZ0RvbWFpbklkXTtjb25zdCB0b0N1cnJlbnREb21haW5UcmFuc2Zvcm1lcj1jdXJyZW50LnRyYW5zZm9ybWVyO3F1ZXVlLnB1c2goe2RvbWFpbklkOm91dGdvaW5nRG9tYWluSWQsdHJhbnNmb3JtZXI6VHJhbnNmb3JtZXIuY29tcG9zZSh0b05leHREb21haW5UcmFuc2Zvcm1lcix0b0N1cnJlbnREb21haW5UcmFuc2Zvcm1lcil9KTt9fQotcmV0dXJuIHVuZGVmaW5lZDt9LHNlbGVjdE1vZGVsRG9tYWluSWRfKCl7dGhpcy5lbnN1cmVBbGxEb21haW5zQXJlQ29ubmVjdGVkXygpO2Zvcihjb25zdCBjaHJvbWVEb21haW5JZCBvZiBQT1NTSUJMRV9DSFJPTUVfQ0xPQ0tfRE9NQUlOUyl7aWYodGhpcy5kb21haW5zU2Vlbl8uaGFzKGNocm9tZURvbWFpbklkKSl7dGhpcy5tb2RlbERvbWFpbklkXz1jaHJvbWVEb21haW5JZDtyZXR1cm47fX0KLWNvbnN0IGRvbWFpbnNTZWVuQXJyYXk9QXJyYXkuZnJvbSh0aGlzLmRvbWFpbnNTZWVuXyk7ZG9tYWluc1NlZW5BcnJheS5zb3J0KCk7dGhpcy5tb2RlbERvbWFpbklkXz1kb21haW5zU2VlbkFycmF5WzBdO30sZW5zdXJlQWxsRG9tYWluc0FyZUNvbm5lY3RlZF8oKXtsZXQgZmlyc3REb21haW5JZD11bmRlZmluZWQ7Zm9yKGNvbnN0IGRvbWFpbklkIG9mIHRoaXMuZG9tYWluc1NlZW5fKXtpZighZmlyc3REb21haW5JZCl7Zmlyc3REb21haW5JZD1kb21haW5JZDtjb250aW51ZTt9Ci1pZighdGhpcy5nZXRUcmFuc2Zvcm1lckJldHdlZW5fKGZpcnN0RG9tYWluSWQsZG9tYWluSWQpKXt0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBzZWxlY3QgYSBtYXN0ZXIgY2xvY2sgZG9tYWluIGJlY2F1c2Ugbm8gJysncGF0aCBjYW4gYmUgZm91bmQgZnJvbSAiJytmaXJzdERvbWFpbklkKyciIHRvICInK2RvbWFpbklkKyciLicpO319Ci1yZXR1cm4gdHJ1ZTt9LG9uRG9tYWluU2Vlbl8oZG9tYWluSWQpe2lmKGRvbWFpbklkPT09Q2xvY2tEb21haW5JZC5VTktOT1dOX0NIUk9NRV9MRUdBQ1kmJiF0aGlzLmRvbWFpbnNTZWVuXy5oYXMoQ2xvY2tEb21haW5JZC5VTktOT1dOX0NIUk9NRV9MRUdBQ1kpKXtmb3IoY29uc3QgY2hyb21lRG9tYWluSWQgb2YgUE9TU0lCTEVfQ0hST01FX0NMT0NLX0RPTUFJTlMpe2lmKGNocm9tZURvbWFpbklkPT09Q2xvY2tEb21haW5JZC5VTktOT1dOX0NIUk9NRV9MRUdBQ1kpe2NvbnRpbnVlO30KLXRoaXMuY29sbGFwc2VEb21haW5zXyhDbG9ja0RvbWFpbklkLlVOS05PV05fQ0hST01FX0xFR0FDWSxjaHJvbWVEb21haW5JZCk7fX0KLXRoaXMuZG9tYWluc1NlZW5fLmFkZChkb21haW5JZCk7fSxvblN5bmNDb21wbGV0ZWRfKG1hcmtlcjEsbWFya2VyMil7Y29uc3QgZm9yd2FyZFRyYW5zZm9ybWVyPVRyYW5zZm9ybWVyLmZyb21NYXJrZXJzKG1hcmtlcjEsbWFya2VyMik7Y29uc3QgYmFja3dhcmRUcmFuc2Zvcm1lcj1UcmFuc2Zvcm1lci5mcm9tTWFya2VycyhtYXJrZXIyLG1hcmtlcjEpO2NvbnN0IGV4aXN0aW5nVHJhbnNmb3JtZXI9dGhpcy5nZXRPckNyZWF0ZVRyYW5zZm9ybWVyTWFwXyhtYXJrZXIxLmRvbWFpbklkKVttYXJrZXIyLmRvbWFpbklkXTtpZighZXhpc3RpbmdUcmFuc2Zvcm1lcnx8Zm9yd2FyZFRyYW5zZm9ybWVyLmVycm9yPGV4aXN0aW5nVHJhbnNmb3JtZXIuZXJyb3Ipe3RoaXMuZ2V0T3JDcmVhdGVUcmFuc2Zvcm1lck1hcF8obWFya2VyMS5kb21haW5JZClbbWFya2VyMi5kb21haW5JZF09Zm9yd2FyZFRyYW5zZm9ybWVyO3RoaXMuZ2V0T3JDcmVhdGVUcmFuc2Zvcm1lck1hcF8obWFya2VyMi5kb21haW5JZClbbWFya2VyMS5kb21haW5JZF09YmFja3dhcmRUcmFuc2Zvcm1lcjt9fSxjb2xsYXBzZURvbWFpbnNfKGRvbWFpbjFJZCxkb21haW4ySWQpe3RoaXMuZ2V0T3JDcmVhdGVUcmFuc2Zvcm1lck1hcF8oZG9tYWluMUlkKVtkb21haW4ySWRdPXRoaXMuZ2V0T3JDcmVhdGVUcmFuc2Zvcm1lck1hcF8oZG9tYWluMklkKVtkb21haW4xSWRdPVRyYW5zZm9ybWVyLklERU5USVRZO30sZ2V0T3JDcmVhdGVUcmFuc2Zvcm1lck1hcF8oZG9tYWluSWQpe2lmKCF0aGlzLnRyYW5zZm9ybWVyTWFwQnlEb21haW5JZF9bZG9tYWluSWRdKXt0aGlzLnRyYW5zZm9ybWVyTWFwQnlEb21haW5JZF9bZG9tYWluSWRdPXt9O30KLXJldHVybiB0aGlzLnRyYW5zZm9ybWVyTWFwQnlEb21haW5JZF9bZG9tYWluSWRdO30sY29tcHV0ZURvdEdyYXBoKCl7bGV0IGRvdFN0cmluZz0nZ3JhcGgge1xuJztjb25zdCBkb21haW5zU2Vlbj1bLi4udGhpcy5kb21haW5zU2Vlbl9dLnNvcnQoKTtmb3IoY29uc3QgZG9tYWluSWQgb2YgZG9tYWluc1NlZW4pe2RvdFN0cmluZys9YCAgJHtkb21haW5JZH1bc2hhcGU9Ym94XVxuYDt9Ci1jb25zdCBtYXJrZXJzQnlTeW5jSWRFbnRyaWVzPVsuLi50aGlzLm1hcmtlcnNCeVN5bmNJZF8uZW50cmllcygpXS5zb3J0KChbc3luY0lkMSxtYXJrZXJzMV0sW3N5bmNJZDIsbWFya2VyczJdKT0+c3luY0lkMS5sb2NhbGVDb21wYXJlKHN5bmNJZDIpKTtmb3IoY29uc3Rbc3luY0lkLG1hcmtlcnNdb2YgbWFya2Vyc0J5U3luY0lkRW50cmllcyl7Y29uc3Qgc29ydGVkTWFya2Vycz1tYXJrZXJzLnNvcnQoKGEsYik9PmEuZG9tYWluSWQubG9jYWxlQ29tcGFyZShiLmRvbWFpbklkKSk7Zm9yKGNvbnN0IG0gb2YgbWFya2Vycyl7ZG90U3RyaW5nKz1gICAiJHtzeW5jSWR9IiAtLSAke20uZG9tYWluSWR9IGA7ZG90U3RyaW5nKz1gW2xhYmVsPSJbJHttLnN0YXJ0VHN9LCAke20uZW5kVHN9XSJdXG5gO319Ci1kb3RTdHJpbmcrPSd9JztyZXR1cm4gZG90U3RyaW5nO319O2Z1bmN0aW9uIENsb2NrU3luY01hcmtlcihkb21haW5JZCxzdGFydFRzLG9wdF9lbmRUcyl7dGhpcy5kb21haW5JZD1kb21haW5JZDt0aGlzLnN0YXJ0VHM9c3RhcnRUczt0aGlzLmVuZFRzPW9wdF9lbmRUcz09PXVuZGVmaW5lZD9zdGFydFRzOm9wdF9lbmRUczt9Ci1DbG9ja1N5bmNNYXJrZXIucHJvdG90eXBlPXtnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5lbmRUcy10aGlzLnN0YXJ0VHM7fSxnZXQgdHMoKXtyZXR1cm4gdGhpcy5zdGFydFRzK3RoaXMuZHVyYXRpb24vMjt9fTtmdW5jdGlvbiBUcmFuc2Zvcm1lcihmbixlcnJvcil7dGhpcy5mbj1mbjt0aGlzLmVycm9yPWVycm9yO30KLVRyYW5zZm9ybWVyLklERU5USVRZPW5ldyBUcmFuc2Zvcm1lcigoeD0+eCksMCk7VHJhbnNmb3JtZXIuY29tcG9zZT1mdW5jdGlvbihhVG9CLGJUb0Mpe3JldHVybiBuZXcgVHJhbnNmb3JtZXIoKHRzKT0+YlRvQy5mbihhVG9CLmZuKHRzKSksYVRvQi5lcnJvcitiVG9DLmVycm9yKTt9O1RyYW5zZm9ybWVyLmZyb21NYXJrZXJzPWZ1bmN0aW9uKGZyb21NYXJrZXIsdG9NYXJrZXIpe2xldCBmcm9tVHM9ZnJvbU1hcmtlci50cztsZXQgdG9Ucz10b01hcmtlci50cztpZihmcm9tTWFya2VyLmRvbWFpbklkPT09Q2xvY2tEb21haW5JZC5CQVRUT1ImJnRvTWFya2VyLmR1cmF0aW9uPkJBVFRPUl9GQVNUX1NZTkNfVEhSRVNIT0xEX01TKXt0b1RzPXRvTWFya2VyLnN0YXJ0VHM7fWVsc2UgaWYodG9NYXJrZXIuZG9tYWluSWQ9PT1DbG9ja0RvbWFpbklkLkJBVFRPUiYmZnJvbU1hcmtlci5kdXJhdGlvbj5CQVRUT1JfRkFTVF9TWU5DX1RIUkVTSE9MRF9NUyl7ZnJvbVRzPWZyb21NYXJrZXIuc3RhcnRUczt9Ci1jb25zdCB0c1NoaWZ0PXRvVHMtZnJvbVRzO3JldHVybiBuZXcgVHJhbnNmb3JtZXIoKHRzKT0+dHMrdHNTaGlmdCxmcm9tTWFya2VyLmR1cmF0aW9uK3RvTWFya2VyLmR1cmF0aW9uKTt9O3JldHVybntDbG9ja0RvbWFpbklkLENsb2NrU3luY01hbmFnZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIENvdW50ZXJTYW1wbGUoc2VyaWVzLHRpbWVzdGFtcCx2YWx1ZSl7dHIubW9kZWwuRXZlbnQuY2FsbCh0aGlzKTt0aGlzLnNlcmllc189c2VyaWVzO3RoaXMudGltZXN0YW1wXz10aW1lc3RhbXA7dGhpcy52YWx1ZV89dmFsdWU7fQotQ291bnRlclNhbXBsZS5ncm91cEJ5VGltZXN0YW1wPWZ1bmN0aW9uKHNhbXBsZXMpe2NvbnN0IHNhbXBsZXNCeVRpbWVzdGFtcD10ci5iLmdyb3VwSW50b01hcChzYW1wbGVzLHM9PnMudGltZXN0YW1wKTtjb25zdCB0aW1lc3RhbXBzPUFycmF5LmZyb20oc2FtcGxlc0J5VGltZXN0YW1wLmtleXMoKSk7dGltZXN0YW1wcy5zb3J0KCk7Y29uc3QgZ3JvdXBzPVtdO2Zvcihjb25zdCB0cyBvZiB0aW1lc3RhbXBzKXtjb25zdCBncm91cD1zYW1wbGVzQnlUaW1lc3RhbXAuZ2V0KHRzKTtncm91cC5zb3J0KCh4LHkpPT54LnNlcmllcy5zZXJpZXNJbmRleC15LnNlcmllcy5zZXJpZXNJbmRleCk7Z3JvdXBzLnB1c2goZ3JvdXApO30KLXJldHVybiBncm91cHM7fTtDb3VudGVyU2FtcGxlLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLkV2ZW50LnByb3RvdHlwZSxnZXQgc2VyaWVzKCl7cmV0dXJuIHRoaXMuc2VyaWVzXzt9LGdldCB0aW1lc3RhbXAoKXtyZXR1cm4gdGhpcy50aW1lc3RhbXBfO30sZ2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWVfO30sc2V0IHRpbWVzdGFtcCh0aW1lc3RhbXApe3RoaXMudGltZXN0YW1wXz10aW1lc3RhbXA7fSxhZGRCb3VuZHNUb1JhbmdlKHJhbmdlKXtyYW5nZS5hZGRWYWx1ZSh0aGlzLnRpbWVzdGFtcCk7fSxnZXRTYW1wbGVJbmRleCgpe3JldHVybiB0ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkodGhpcy5zZXJpZXMudGltZXN0YW1wcyxmdW5jdGlvbih4KXtyZXR1cm4geDt9LHRoaXMudGltZXN0YW1wXyk7fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybidDb3VudGVyIHNhbXBsZSBmcm9tICcrdGhpcy5zZXJpZXNfLnRpdGxlKycgYXQgJysKLXRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Ncy5mb3JtYXQodGhpcy50aW1lc3RhbXApO319O3RyLm1vZGVsLkV2ZW50UmVnaXN0cnkucmVnaXN0ZXIoQ291bnRlclNhbXBsZSx7bmFtZTonY291bnRlclNhbXBsZScscGx1cmFsTmFtZTonY291bnRlclNhbXBsZXMnfSk7cmV0dXJue0NvdW50ZXJTYW1wbGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IENvdW50ZXJTYW1wbGU9dHIubW9kZWwuQ291bnRlclNhbXBsZTtmdW5jdGlvbiBDb3VudGVyU2VyaWVzKG5hbWUsY29sb3Ipe3RyLm1vZGVsLkV2ZW50Q29udGFpbmVyLmNhbGwodGhpcyk7dGhpcy5uYW1lXz1uYW1lO3RoaXMuY29sb3JfPWNvbG9yO3RoaXMudGltZXN0YW1wc189W107dGhpcy5zYW1wbGVzXz1bXTt0aGlzLmNvdW50ZXI9dW5kZWZpbmVkO3RoaXMuc2VyaWVzSW5kZXg9dW5kZWZpbmVkO30KLUNvdW50ZXJTZXJpZXMucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuRXZlbnRDb250YWluZXIucHJvdG90eXBlLGdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy50aW1lc3RhbXBzXy5sZW5ndGg7fSxnZXQgbmFtZSgpe3JldHVybiB0aGlzLm5hbWVfO30sZ2V0IGNvbG9yKCl7cmV0dXJuIHRoaXMuY29sb3JfO30sZ2V0IHNhbXBsZXMoKXtyZXR1cm4gdGhpcy5zYW1wbGVzXzt9LGdldCB0aW1lc3RhbXBzKCl7cmV0dXJuIHRoaXMudGltZXN0YW1wc187fSxnZXRTYW1wbGUoaWR4KXtyZXR1cm4gdGhpcy5zYW1wbGVzX1tpZHhdO30sZ2V0VGltZXN0YW1wKGlkeCl7cmV0dXJuIHRoaXMudGltZXN0YW1wc19baWR4XTt9LGFkZENvdW50ZXJTYW1wbGUodHMsdmFsKXtjb25zdCBzYW1wbGU9bmV3IENvdW50ZXJTYW1wbGUodGhpcyx0cyx2YWwpO3RoaXMuYWRkU2FtcGxlKHNhbXBsZSk7cmV0dXJuIHNhbXBsZTt9LGFkZFNhbXBsZShzYW1wbGUpe3RoaXMudGltZXN0YW1wc18ucHVzaChzYW1wbGUudGltZXN0YW1wKTt0aGlzLnNhbXBsZXNfLnB1c2goc2FtcGxlKTt9LGdldFN0YXRpc3RpY3Moc2FtcGxlSW5kaWNlcyl7bGV0IHN1bT0wO2xldCBtaW49TnVtYmVyLk1BWF9WQUxVRTtsZXQgbWF4PS1OdW1iZXIuTUFYX1ZBTFVFO2ZvcihsZXQgaT0wO2k8c2FtcGxlSW5kaWNlcy5sZW5ndGg7KytpKXtjb25zdCBzYW1wbGU9dGhpcy5nZXRTYW1wbGUoc2FtcGxlSW5kaWNlc1tpXSkudmFsdWU7c3VtKz1zYW1wbGU7bWluPU1hdGgubWluKHNhbXBsZSxtaW4pO21heD1NYXRoLm1heChzYW1wbGUsbWF4KTt9Ci1yZXR1cm57bWluLG1heCxhdmc6KHN1bS9zYW1wbGVJbmRpY2VzLmxlbmd0aCksc3RhcnQ6dGhpcy5nZXRTYW1wbGUoc2FtcGxlSW5kaWNlc1swXSkudmFsdWUsZW5kOnRoaXMuZ2V0U2FtcGxlKHNhbXBsZUluZGljZXMubGVuZ3RoLTEpLnZhbHVlfTt9LHNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KXtmb3IobGV0IGk9MDtpPHRoaXMudGltZXN0YW1wc18ubGVuZ3RoOysraSl7dGhpcy50aW1lc3RhbXBzX1tpXSs9YW1vdW50O3RoaXMuc2FtcGxlc19baV0udGltZXN0YW1wPXRoaXMudGltZXN0YW1wc19baV07fX0sKmNoaWxkRXZlbnRzKCl7eWllbGQqdGhpcy5zYW1wbGVzXzt9LCpjaGlsZEV2ZW50Q29udGFpbmVycygpe319O3JldHVybntDb3VudGVyU2VyaWVzLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBDb3VudGVyKHBhcmVudCxpZCxjYXRlZ29yeSxuYW1lKXt0ci5tb2RlbC5FdmVudENvbnRhaW5lci5jYWxsKHRoaXMpO3RoaXMucGFyZW50Xz1wYXJlbnQ7dGhpcy5pZF89aWQ7dGhpcy5jYXRlZ29yeV89Y2F0ZWdvcnl8fCcnO3RoaXMubmFtZV89bmFtZTt0aGlzLnNlcmllc189W107dGhpcy50b3RhbHM9W107fQotQ291bnRlci5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5FdmVudENvbnRhaW5lci5wcm90b3R5cGUsZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLnBhcmVudF87fSxnZXQgaWQoKXtyZXR1cm4gdGhpcy5pZF87fSxnZXQgY2F0ZWdvcnkoKXtyZXR1cm4gdGhpcy5jYXRlZ29yeV87fSxnZXQgbmFtZSgpe3JldHVybiB0aGlzLm5hbWVfO30sKmNoaWxkRXZlbnRzKCl7fSwqY2hpbGRFdmVudENvbnRhaW5lcnMoKXt5aWVsZCp0aGlzLnNlcmllczt9LHNldCB0aW1lc3RhbXBzKGFyZyl7dGhyb3cgbmV3IEVycm9yKCdCYWQgY291bnRlciBBUEkuIE5vIGNvb2tpZS4nKTt9LHNldCBzZXJpZXNOYW1lcyhhcmcpe3Rocm93IG5ldyBFcnJvcignQmFkIGNvdW50ZXIgQVBJLiBObyBjb29raWUuJyk7fSxzZXQgc2VyaWVzQ29sb3JzKGFyZyl7dGhyb3cgbmV3IEVycm9yKCdCYWQgY291bnRlciBBUEkuIE5vIGNvb2tpZS4nKTt9LHNldCBzYW1wbGVzKGFyZyl7dGhyb3cgbmV3IEVycm9yKCdCYWQgY291bnRlciBBUEkuIE5vIGNvb2tpZS4nKTt9LGFkZFNlcmllcyhzZXJpZXMpe3Nlcmllcy5jb3VudGVyPXRoaXM7c2VyaWVzLnNlcmllc0luZGV4PXRoaXMuc2VyaWVzXy5sZW5ndGg7dGhpcy5zZXJpZXNfLnB1c2goc2VyaWVzKTtyZXR1cm4gc2VyaWVzO30sZ2V0U2VyaWVzKGlkeCl7cmV0dXJuIHRoaXMuc2VyaWVzX1tpZHhdO30sZ2V0IHNlcmllcygpe3JldHVybiB0aGlzLnNlcmllc187fSxnZXQgbnVtU2VyaWVzKCl7cmV0dXJuIHRoaXMuc2VyaWVzXy5sZW5ndGg7fSxnZXQgbnVtU2FtcGxlcygpe2lmKHRoaXMuc2VyaWVzXy5sZW5ndGg9PT0wKXJldHVybiAwO3JldHVybiB0aGlzLnNlcmllc19bMF0ubGVuZ3RoO30sZ2V0IHRpbWVzdGFtcHMoKXtpZih0aGlzLnNlcmllc18ubGVuZ3RoPT09MClyZXR1cm5bXTtyZXR1cm4gdGhpcy5zZXJpZXNfWzBdLnRpbWVzdGFtcHM7fSxnZXRTYW1wbGVTdGF0aXN0aWNzKHNhbXBsZUluZGljZXMpe3NhbXBsZUluZGljZXMuc29ydCgpO2NvbnN0IHJldD1bXTt0aGlzLnNlcmllc18uZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3JldC5wdXNoKHNlcmllcy5nZXRTdGF0aXN0aWNzKHNhbXBsZUluZGljZXMpKTt9KTtyZXR1cm4gcmV0O30sc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpe2ZvcihsZXQgaT0wO2k8dGhpcy5zZXJpZXNfLmxlbmd0aDsrK2kpe3RoaXMuc2VyaWVzX1tpXS5zaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCk7fX0sdXBkYXRlQm91bmRzKCl7dGhpcy50b3RhbHM9W107dGhpcy5tYXhUb3RhbD0wO3RoaXMuYm91bmRzLnJlc2V0KCk7aWYodGhpcy5zZXJpZXNfLmxlbmd0aD09PTApcmV0dXJuO2NvbnN0IGZpcnN0U2VyaWVzPXRoaXMuc2VyaWVzX1swXTtjb25zdCBsYXN0U2VyaWVzPXRoaXMuc2VyaWVzX1t0aGlzLnNlcmllc18ubGVuZ3RoLTFdO3RoaXMuYm91bmRzLmFkZFZhbHVlKGZpcnN0U2VyaWVzLmdldFRpbWVzdGFtcCgwKSk7dGhpcy5ib3VuZHMuYWRkVmFsdWUobGFzdFNlcmllcy5nZXRUaW1lc3RhbXAobGFzdFNlcmllcy5sZW5ndGgtMSkpO2NvbnN0IG51bVNlcmllcz10aGlzLm51bVNlcmllczt0aGlzLm1heFRvdGFsPS1JbmZpbml0eTtmb3IobGV0IGk9MDtpPGZpcnN0U2VyaWVzLmxlbmd0aDsrK2kpe2xldCB0b3RhbD0wO3RoaXMuc2VyaWVzXy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7dG90YWwrPXNlcmllcy5nZXRTYW1wbGUoaSkudmFsdWU7dGhpcy50b3RhbHMucHVzaCh0b3RhbCk7fS5iaW5kKHRoaXMpKTt0aGlzLm1heFRvdGFsPU1hdGgubWF4KHRvdGFsLHRoaXMubWF4VG90YWwpO319fTtDb3VudGVyLmNvbXBhcmU9ZnVuY3Rpb24oeCx5KXtsZXQgdG1wPXgucGFyZW50LmNvbXBhcmVUbyh5LnBhcmVudCk7aWYodG1wIT09MClyZXR1cm4gdG1wO3RtcD14Lm5hbWUubG9jYWxlQ29tcGFyZSh5Lm5hbWUpO2lmKHRtcD09PTApcmV0dXJuIHgudGlkLXkudGlkO3JldHVybiB0bXA7fTtyZXR1cm57Q291bnRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgU2xpY2U9dHIubW9kZWwuU2xpY2U7ZnVuY3Rpb24gQ3B1U2xpY2UoY2F0LHRpdGxlLGNvbG9ySWQsc3RhcnQsYXJncyxvcHRfZHVyYXRpb24pe1NsaWNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRocmVhZFRoYXRXYXNSdW5uaW5nPXVuZGVmaW5lZDt0aGlzLmNwdT11bmRlZmluZWQ7fQotQ3B1U2xpY2UucHJvdG90eXBlPXtfX3Byb3RvX186U2xpY2UucHJvdG90eXBlLGdldCBhbmFseXNpc1R5cGVOYW1lKCl7cmV0dXJuJ3RyLnVpLmFuYWx5c2lzLkNwdVNsaWNlJzt9LGdldEFzc29jaWF0ZWRUaW1lc2xpY2UoKXtpZighdGhpcy50aHJlYWRUaGF0V2FzUnVubmluZyl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1jb25zdCB0aW1lU2xpY2VzPXRoaXMudGhyZWFkVGhhdFdhc1J1bm5pbmcudGltZVNsaWNlcztmb3IobGV0IGk9MDtpPHRpbWVTbGljZXMubGVuZ3RoO2krKyl7Y29uc3QgdGltZVNsaWNlPXRpbWVTbGljZXNbaV07aWYodGltZVNsaWNlLnN0YXJ0IT09dGhpcy5zdGFydCl7Y29udGludWU7fQotaWYodGltZVNsaWNlLmR1cmF0aW9uIT09dGhpcy5kdXJhdGlvbil7Y29udGludWU7fQotcmV0dXJuIHRpbWVTbGljZTt9Ci1yZXR1cm4gdW5kZWZpbmVkO319O3RyLm1vZGVsLkV2ZW50UmVnaXN0cnkucmVnaXN0ZXIoQ3B1U2xpY2Use25hbWU6J2NwdVNsaWNlJyxwbHVyYWxOYW1lOidjcHVTbGljZXMnfSk7cmV0dXJue0NwdVNsaWNlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBUaW1lVG9PYmplY3RJbnN0YW5jZU1hcChjcmVhdGVPYmplY3RJbnN0YW5jZUZ1bmN0aW9uLHBhcmVudCxzY29wZWRJZCl7dGhpcy5jcmVhdGVPYmplY3RJbnN0YW5jZUZ1bmN0aW9uXz1jcmVhdGVPYmplY3RJbnN0YW5jZUZ1bmN0aW9uO3RoaXMucGFyZW50PXBhcmVudDt0aGlzLnNjb3BlZElkPXNjb3BlZElkO3RoaXMuaW5zdGFuY2VzPVtdO30KLVRpbWVUb09iamVjdEluc3RhbmNlTWFwLnByb3RvdHlwZT17aWRXYXNDcmVhdGVkKGNhdGVnb3J5LG5hbWUsdHMpe2lmKHRoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTApe3RoaXMuaW5zdGFuY2VzLnB1c2godGhpcy5jcmVhdGVPYmplY3RJbnN0YW5jZUZ1bmN0aW9uXyh0aGlzLnBhcmVudCx0aGlzLnNjb3BlZElkLGNhdGVnb3J5LG5hbWUsdHMpKTt0aGlzLmluc3RhbmNlc1swXS5jcmVhdGlvblRzV2FzRXhwbGljaXQ9dHJ1ZTtyZXR1cm4gdGhpcy5pbnN0YW5jZXNbMF07fQotbGV0IGxhc3RJbnN0YW5jZT10aGlzLmluc3RhbmNlc1t0aGlzLmluc3RhbmNlcy5sZW5ndGgtMV07aWYodHM8bGFzdEluc3RhbmNlLmRlbGV0aW9uVHMpe3Rocm93IG5ldyBFcnJvcignTXV0YXRpb24gb2YgdGhlIFRpbWVUb09iamVjdEluc3RhbmNlTWFwIG11c3QgYmUgJysnZG9uZSBpbiBhc2NlbmRpbmcgdGltZXN0YW1wIG9yZGVyLicpO30KLWxhc3RJbnN0YW5jZT10aGlzLmNyZWF0ZU9iamVjdEluc3RhbmNlRnVuY3Rpb25fKHRoaXMucGFyZW50LHRoaXMuc2NvcGVkSWQsY2F0ZWdvcnksbmFtZSx0cyk7bGFzdEluc3RhbmNlLmNyZWF0aW9uVHNXYXNFeHBsaWNpdD10cnVlO3RoaXMuaW5zdGFuY2VzLnB1c2gobGFzdEluc3RhbmNlKTtyZXR1cm4gbGFzdEluc3RhbmNlO30sYWRkU25hcHNob3QoY2F0ZWdvcnksbmFtZSx0cyxhcmdzLG9wdF9iYXNlVHlwZU5hbWUpe2lmKHRoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTApe3RoaXMuaW5zdGFuY2VzLnB1c2godGhpcy5jcmVhdGVPYmplY3RJbnN0YW5jZUZ1bmN0aW9uXyh0aGlzLnBhcmVudCx0aGlzLnNjb3BlZElkLGNhdGVnb3J5LG5hbWUsdHMsb3B0X2Jhc2VUeXBlTmFtZSkpO30KLWNvbnN0IGk9dHIuYi5maW5kSW5kZXhJblNvcnRlZEludGVydmFscyh0aGlzLmluc3RhbmNlcyxmdW5jdGlvbihpbnN0KXtyZXR1cm4gaW5zdC5jcmVhdGlvblRzO30sZnVuY3Rpb24oaW5zdCl7cmV0dXJuIGluc3QuZGVsZXRpb25Ucy1pbnN0LmNyZWF0aW9uVHM7fSx0cyk7bGV0IGluc3RhbmNlO2lmKGk8MCl7aW5zdGFuY2U9dGhpcy5pbnN0YW5jZXNbMF07aWYodHM+aW5zdGFuY2UuZGVsZXRpb25Uc3x8aW5zdGFuY2UuY3JlYXRpb25Uc1dhc0V4cGxpY2l0KXt0aHJvdyBuZXcgRXJyb3IoJ0F0IHRoZSBwcm92aWRlZCB0aW1lc3RhbXAsIG5vIGluc3RhbmNlIHdhcyBzdGlsbCBhbGl2ZScpO30KLWlmKGluc3RhbmNlLnNuYXBzaG90cy5sZW5ndGghPT0wKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzaGlmdCBjcmVhdGlvblRzIGZvcndhcmQsICcrJ3NuYXBzaG90cyBoYXZlIGJlZW4gYWRkZWQuIEZpcnN0IHNuYXAgd2FzIGF0IHRzPScrCi1pbnN0YW5jZS5zbmFwc2hvdHNbMF0udHMrJyBhbmQgY3JlYXRpb25UcyB3YXMgJysKLWluc3RhbmNlLmNyZWF0aW9uVHMpO30KLWluc3RhbmNlLmNyZWF0aW9uVHM9dHM7fWVsc2UgaWYoaT49dGhpcy5pbnN0YW5jZXMubGVuZ3RoKXtpbnN0YW5jZT10aGlzLmluc3RhbmNlc1t0aGlzLmluc3RhbmNlcy5sZW5ndGgtMV07aWYodHM+PWluc3RhbmNlLmRlbGV0aW9uVHMpe2luc3RhbmNlPXRoaXMuY3JlYXRlT2JqZWN0SW5zdGFuY2VGdW5jdGlvbl8odGhpcy5wYXJlbnQsdGhpcy5zY29wZWRJZCxjYXRlZ29yeSxuYW1lLHRzLG9wdF9iYXNlVHlwZU5hbWUpO3RoaXMuaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO31lbHNle2xldCBsYXN0VmFsaWRJbmRleDtmb3IobGV0IGk9dGhpcy5pbnN0YW5jZXMubGVuZ3RoLTE7aT49MDtpLS0pe2NvbnN0IHRtcD10aGlzLmluc3RhbmNlc1tpXTtpZih0cz49dG1wLmRlbGV0aW9uVHMpYnJlYWs7aWYodG1wLmNyZWF0aW9uVHNXYXNFeHBsaWNpdD09PWZhbHNlJiZ0bXAuc25hcHNob3RzLmxlbmd0aD09PTApe2xhc3RWYWxpZEluZGV4PWk7fX0KLWlmKGxhc3RWYWxpZEluZGV4PT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhZGQgc25hcHNob3QuIE5vIGluc3RhbmNlIHdhcyBhbGl2ZSB0aGF0IHdhcyBtdXRhYmxlLicpO30KLWluc3RhbmNlPXRoaXMuaW5zdGFuY2VzW2xhc3RWYWxpZEluZGV4XTtpbnN0YW5jZS5jcmVhdGlvblRzPXRzO319ZWxzZXtpbnN0YW5jZT10aGlzLmluc3RhbmNlc1tpXTt9Ci1yZXR1cm4gaW5zdGFuY2UuYWRkU25hcHNob3QodHMsYXJncyxuYW1lLG9wdF9iYXNlVHlwZU5hbWUpO30sZ2V0IGxhc3RJbnN0YW5jZSgpe2lmKHRoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTApcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdGhpcy5pbnN0YW5jZXNbdGhpcy5pbnN0YW5jZXMubGVuZ3RoLTFdO30saWRXYXNEZWxldGVkKGNhdGVnb3J5LG5hbWUsdHMpe2lmKHRoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTApe3RoaXMuaW5zdGFuY2VzLnB1c2godGhpcy5jcmVhdGVPYmplY3RJbnN0YW5jZUZ1bmN0aW9uXyh0aGlzLnBhcmVudCx0aGlzLnNjb3BlZElkLGNhdGVnb3J5LG5hbWUsdHMpKTt9Ci1sZXQgbGFzdEluc3RhbmNlPXRoaXMuaW5zdGFuY2VzW3RoaXMuaW5zdGFuY2VzLmxlbmd0aC0xXTtpZih0czxsYXN0SW5zdGFuY2UuY3JlYXRpb25Ucyl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGVsZXRlIGFuIGlkIGJlZm9yZSBpdCB3YXMgY3JlYXRlZCcpO30KLWlmKGxhc3RJbnN0YW5jZS5kZWxldGlvblRzPT09TnVtYmVyLk1BWF9WQUxVRSl7bGFzdEluc3RhbmNlLndhc0RlbGV0ZWQodHMpO3JldHVybiBsYXN0SW5zdGFuY2U7fQotaWYodHM8bGFzdEluc3RhbmNlLmRlbGV0aW9uVHMpe3Rocm93IG5ldyBFcnJvcignaWQgd2FzIGFscmVhZHkgZGVsZXRlZCBlYXJsaWVyLicpO30KLWxhc3RJbnN0YW5jZT10aGlzLmNyZWF0ZU9iamVjdEluc3RhbmNlRnVuY3Rpb25fKHRoaXMucGFyZW50LHRoaXMuc2NvcGVkSWQsY2F0ZWdvcnksbmFtZSx0cyk7dGhpcy5pbnN0YW5jZXMucHVzaChsYXN0SW5zdGFuY2UpO2xhc3RJbnN0YW5jZS53YXNEZWxldGVkKHRzKTtyZXR1cm4gbGFzdEluc3RhbmNlO30sZ2V0SW5zdGFuY2VBdCh0cyl7Y29uc3QgaT10ci5iLmZpbmRJbmRleEluU29ydGVkSW50ZXJ2YWxzKHRoaXMuaW5zdGFuY2VzLGZ1bmN0aW9uKGluc3Qpe3JldHVybiBpbnN0LmNyZWF0aW9uVHM7fSxmdW5jdGlvbihpbnN0KXtyZXR1cm4gaW5zdC5kZWxldGlvblRzLWluc3QuY3JlYXRpb25Uczt9LHRzKTtpZihpPDApe2lmKHRoaXMuaW5zdGFuY2VzWzBdLmNyZWF0aW9uVHNXYXNFeHBsaWNpdCl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1yZXR1cm4gdGhpcy5pbnN0YW5jZXNbMF07fWVsc2UgaWYoaT49dGhpcy5pbnN0YW5jZXMubGVuZ3RoKXtyZXR1cm4gdW5kZWZpbmVkO30KLXJldHVybiB0aGlzLmluc3RhbmNlc1tpXTt9fTtyZXR1cm57VGltZVRvT2JqZWN0SW5zdGFuY2VNYXAsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IE9iamVjdEluc3RhbmNlPXRyLm1vZGVsLk9iamVjdEluc3RhbmNlO2NvbnN0IE9iamVjdFNuYXBzaG90PXRyLm1vZGVsLk9iamVjdFNuYXBzaG90O2Z1bmN0aW9uIE9iamVjdENvbGxlY3Rpb24ocGFyZW50KXt0ci5tb2RlbC5FdmVudENvbnRhaW5lci5jYWxsKHRoaXMpO3RoaXMucGFyZW50PXBhcmVudDt0aGlzLmluc3RhbmNlTWFwc0J5U2NvcGVkSWRfPXt9O3RoaXMuaW5zdGFuY2VzQnlUeXBlTmFtZV89e307dGhpcy5jcmVhdGVPYmplY3RJbnN0YW5jZV89dGhpcy5jcmVhdGVPYmplY3RJbnN0YW5jZV8uYmluZCh0aGlzKTt9Ci1PYmplY3RDb2xsZWN0aW9uLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLkV2ZW50Q29udGFpbmVyLnByb3RvdHlwZSwqY2hpbGRFdmVudHMoKXtmb3IoY29uc3QgaW5zdGFuY2Ugb2YgdGhpcy5nZXRBbGxPYmplY3RJbnN0YW5jZXMoKSl7eWllbGQgaW5zdGFuY2U7eWllbGQqaW5zdGFuY2Uuc25hcHNob3RzO319LGNyZWF0ZU9iamVjdEluc3RhbmNlXyhwYXJlbnQsc2NvcGVkSWQsY2F0ZWdvcnksbmFtZSxjcmVhdGlvblRzLG9wdF9iYXNlVHlwZU5hbWUpe2NvbnN0IGNvbnN0cnVjdG9yPXRyLm1vZGVsLk9iamVjdEluc3RhbmNlLnN1YlR5cGVzLmdldENvbnN0cnVjdG9yKGNhdGVnb3J5LG5hbWUpO2NvbnN0IGluc3RhbmNlPW5ldyBjb25zdHJ1Y3RvcihwYXJlbnQsc2NvcGVkSWQsY2F0ZWdvcnksbmFtZSxjcmVhdGlvblRzLG9wdF9iYXNlVHlwZU5hbWUpO2NvbnN0IHR5cGVOYW1lPWluc3RhbmNlLnR5cGVOYW1lO2xldCBpbnN0YW5jZXNPZlR5cGVOYW1lPXRoaXMuaW5zdGFuY2VzQnlUeXBlTmFtZV9bdHlwZU5hbWVdO2lmKCFpbnN0YW5jZXNPZlR5cGVOYW1lKXtpbnN0YW5jZXNPZlR5cGVOYW1lPVtdO3RoaXMuaW5zdGFuY2VzQnlUeXBlTmFtZV9bdHlwZU5hbWVdPWluc3RhbmNlc09mVHlwZU5hbWU7fQotaW5zdGFuY2VzT2ZUeXBlTmFtZS5wdXNoKGluc3RhbmNlKTtyZXR1cm4gaW5zdGFuY2U7fSxnZXRPckNyZWF0ZUluc3RhbmNlTWFwXyhzY29wZWRJZCl7bGV0IGRpY3Q7aWYoc2NvcGVkSWQuc2NvcGUgaW4gdGhpcy5pbnN0YW5jZU1hcHNCeVNjb3BlZElkXyl7ZGljdD10aGlzLmluc3RhbmNlTWFwc0J5U2NvcGVkSWRfW3Njb3BlZElkLnNjb3BlXTt9ZWxzZXtkaWN0PXt9O3RoaXMuaW5zdGFuY2VNYXBzQnlTY29wZWRJZF9bc2NvcGVkSWQuc2NvcGVdPWRpY3Q7fQotbGV0IGluc3RhbmNlTWFwPWRpY3Rbc2NvcGVkSWQuaWRdO2lmKGluc3RhbmNlTWFwKXJldHVybiBpbnN0YW5jZU1hcDtpbnN0YW5jZU1hcD1uZXcgdHIubW9kZWwuVGltZVRvT2JqZWN0SW5zdGFuY2VNYXAodGhpcy5jcmVhdGVPYmplY3RJbnN0YW5jZV8sdGhpcy5wYXJlbnQsc2NvcGVkSWQpO2RpY3Rbc2NvcGVkSWQuaWRdPWluc3RhbmNlTWFwO3JldHVybiBpbnN0YW5jZU1hcDt9LGlkV2FzQ3JlYXRlZChzY29wZWRJZCxjYXRlZ29yeSxuYW1lLHRzKXtjb25zdCBpbnN0YW5jZU1hcD10aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2VNYXBfKHNjb3BlZElkKTtyZXR1cm4gaW5zdGFuY2VNYXAuaWRXYXNDcmVhdGVkKGNhdGVnb3J5LG5hbWUsdHMpO30sYWRkU25hcHNob3Qoc2NvcGVkSWQsY2F0ZWdvcnksbmFtZSx0cyxhcmdzLG9wdF9iYXNlVHlwZU5hbWUpe2NvbnN0IGluc3RhbmNlTWFwPXRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZU1hcF8oc2NvcGVkSWQpO2NvbnN0IHNuYXBzaG90PWluc3RhbmNlTWFwLmFkZFNuYXBzaG90KGNhdGVnb3J5LG5hbWUsdHMsYXJncyxvcHRfYmFzZVR5cGVOYW1lKTtpZihzbmFwc2hvdC5vYmplY3RJbnN0YW5jZS5jYXRlZ29yeSE9PWNhdGVnb3J5KXtjb25zdCBtc2c9J0FkZGVkIHNuYXBzaG90IG5hbWU9JytuYW1lKycgd2l0aCBjYXQ9JytjYXRlZ29yeSsnIGltcG9zc2libGUuIEl0IGluc3RhbmNlIHdhcyBjcmVhdGVkL3NuYXBzaG90dGVkIHdpdGggY2F0PScrCi1zbmFwc2hvdC5vYmplY3RJbnN0YW5jZS5jYXRlZ29yeSsnIG5hbWU9JysKLXNuYXBzaG90Lm9iamVjdEluc3RhbmNlLm5hbWU7dGhyb3cgbmV3IEVycm9yKG1zZyk7fQotaWYob3B0X2Jhc2VUeXBlTmFtZSYmc25hcHNob3Qub2JqZWN0SW5zdGFuY2UuYmFzZVR5cGVOYW1lIT09b3B0X2Jhc2VUeXBlTmFtZSl7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgYWRkIHNuYXBzaG90IHdpdGggYmFzZVR5cGVOYW1lPScrCi1vcHRfYmFzZVR5cGVOYW1lKycuIEl0ICcrJ3dhcyBwcmV2aW91c2x5IGNyZWF0ZWQgd2l0aCBuYW1lPScrCi1zbmFwc2hvdC5vYmplY3RJbnN0YW5jZS5iYXNlVHlwZU5hbWUpO30KLWlmKHNuYXBzaG90Lm9iamVjdEluc3RhbmNlLm5hbWUhPT1uYW1lKXt0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBhZGQgc25hcHNob3Qgd2l0aCBuYW1lPScrbmFtZSsnLiBJdCAnKyd3YXMgcHJldmlvdXNseSBjcmVhdGVkIHdpdGggbmFtZT0nKwotc25hcHNob3Qub2JqZWN0SW5zdGFuY2UubmFtZSk7fQotcmV0dXJuIHNuYXBzaG90O30saWRXYXNEZWxldGVkKHNjb3BlZElkLGNhdGVnb3J5LG5hbWUsdHMpe2NvbnN0IGluc3RhbmNlTWFwPXRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZU1hcF8oc2NvcGVkSWQpO2NvbnN0IGRlbGV0ZWRJbnN0YW5jZT1pbnN0YW5jZU1hcC5pZFdhc0RlbGV0ZWQoY2F0ZWdvcnksbmFtZSx0cyk7aWYoIWRlbGV0ZWRJbnN0YW5jZSlyZXR1cm47aWYoZGVsZXRlZEluc3RhbmNlLmNhdGVnb3J5IT09Y2F0ZWdvcnkpe2NvbnN0IG1zZz0nRGVsZXRpbmcgb2JqZWN0ICcrZGVsZXRlZEluc3RhbmNlLm5hbWUrJyB3aXRoIGEgZGlmZmVyZW50IGNhdGVnb3J5ICcrJ3RoYW4gd2hlbiBpdCB3YXMgY3JlYXRlZC4gSXQgcHJldmlvdXMgaGFkIGNhdD0nKwotZGVsZXRlZEluc3RhbmNlLmNhdGVnb3J5KycgYnV0IHRoZSBkZWxldGUgY29tbWFuZCAnKydoYWQgY2F0PScrY2F0ZWdvcnk7dGhyb3cgbmV3IEVycm9yKG1zZyk7fQotaWYoZGVsZXRlZEluc3RhbmNlLmJhc2VUeXBlTmFtZSE9PW5hbWUpe3Rocm93IG5ldyBFcnJvcignRGVsZXRpb24gcmVxdWVzdGVkIGZvciBuYW1lPScrCi1uYW1lKycgY291bGQgbm90IHByb2NlZWQ6ICcrJ0FuIGV4aXN0aW5nIG9iamVjdCB3aXRoIGJhc2VUeXBlTmFtZT0nKwotZGVsZXRlZEluc3RhbmNlLmJhc2VUeXBlTmFtZSsnIGV4aXN0ZWQuJyk7fX0sYXV0b0RlbGV0ZU9iamVjdHMobWF4VGltZXN0YW1wKXtmb3IoY29uc3QgaW1hcEJ5SWQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmluc3RhbmNlTWFwc0J5U2NvcGVkSWRfKSl7Zm9yKGNvbnN0IGkyaW1hcCBvZiBPYmplY3QudmFsdWVzKGltYXBCeUlkKSl7Y29uc3QgbGFzdEluc3RhbmNlPWkyaW1hcC5sYXN0SW5zdGFuY2U7aWYobGFzdEluc3RhbmNlLmRlbGV0aW9uVHMhPT1OdW1iZXIuTUFYX1ZBTFVFKWNvbnRpbnVlO2kyaW1hcC5pZFdhc0RlbGV0ZWQobGFzdEluc3RhbmNlLmNhdGVnb3J5LGxhc3RJbnN0YW5jZS5uYW1lLG1heFRpbWVzdGFtcCk7bGFzdEluc3RhbmNlLmRlbGV0aW9uVHNXYXNFeHBsaWNpdD1mYWxzZTt9fX0sZ2V0T2JqZWN0SW5zdGFuY2VBdChzY29wZWRJZCx0cyl7bGV0IGluc3RhbmNlTWFwO2lmKHNjb3BlZElkLnNjb3BlIGluIHRoaXMuaW5zdGFuY2VNYXBzQnlTY29wZWRJZF8pe2luc3RhbmNlTWFwPXRoaXMuaW5zdGFuY2VNYXBzQnlTY29wZWRJZF9bc2NvcGVkSWQuc2NvcGVdW3Njb3BlZElkLmlkXTt9Ci1pZighaW5zdGFuY2VNYXApcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gaW5zdGFuY2VNYXAuZ2V0SW5zdGFuY2VBdCh0cyk7fSxnZXRTbmFwc2hvdEF0KHNjb3BlZElkLHRzKXtjb25zdCBpbnN0YW5jZT10aGlzLmdldE9iamVjdEluc3RhbmNlQXQoc2NvcGVkSWQsdHMpO2lmKCFpbnN0YW5jZSlyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBpbnN0YW5jZS5nZXRTbmFwc2hvdEF0KHRzKTt9LGl0ZXJPYmplY3RJbnN0YW5jZXMoaXRlcixvcHRfdGhpcyl7b3B0X3RoaXM9b3B0X3RoaXN8fHRoaXM7Zm9yKGNvbnN0IGltYXBCeUlkIG9mIE9iamVjdC52YWx1ZXModGhpcy5pbnN0YW5jZU1hcHNCeVNjb3BlZElkXykpe2Zvcihjb25zdCBpMmltYXAgb2YgT2JqZWN0LnZhbHVlcyhpbWFwQnlJZCkpe2kyaW1hcC5pbnN0YW5jZXMuZm9yRWFjaChpdGVyLG9wdF90aGlzKTt9fX0sZ2V0QWxsT2JqZWN0SW5zdGFuY2VzKCl7Y29uc3QgaW5zdGFuY2VzPVtdO3RoaXMuaXRlck9iamVjdEluc3RhbmNlcyhmdW5jdGlvbihpKXtpbnN0YW5jZXMucHVzaChpKTt9KTtyZXR1cm4gaW5zdGFuY2VzO30sZ2V0QWxsSW5zdGFuY2VzTmFtZWQobmFtZSl7cmV0dXJuIHRoaXMuaW5zdGFuY2VzQnlUeXBlTmFtZV9bbmFtZV07fSxnZXRBbGxJbnN0YW5jZXNCeVR5cGVOYW1lKCl7cmV0dXJuIHRoaXMuaW5zdGFuY2VzQnlUeXBlTmFtZV87fSxwcmVJbml0aWFsaXplQWxsT2JqZWN0cygpe3RoaXMuaXRlck9iamVjdEluc3RhbmNlcyhmdW5jdGlvbihpbnN0YW5jZSl7aW5zdGFuY2UucHJlSW5pdGlhbGl6ZSgpO30pO30saW5pdGlhbGl6ZUFsbE9iamVjdHMoKXt0aGlzLml0ZXJPYmplY3RJbnN0YW5jZXMoZnVuY3Rpb24oaW5zdGFuY2Upe2luc3RhbmNlLmluaXRpYWxpemUoKTt9KTt9LGluaXRpYWxpemVJbnN0YW5jZXMoKXt0aGlzLml0ZXJPYmplY3RJbnN0YW5jZXMoZnVuY3Rpb24oaW5zdGFuY2Upe2luc3RhbmNlLmluaXRpYWxpemUoKTt9KTt9LHVwZGF0ZUJvdW5kcygpe3RoaXMuYm91bmRzLnJlc2V0KCk7dGhpcy5pdGVyT2JqZWN0SW5zdGFuY2VzKGZ1bmN0aW9uKGluc3RhbmNlKXtpbnN0YW5jZS51cGRhdGVCb3VuZHMoKTt0aGlzLmJvdW5kcy5hZGRSYW5nZShpbnN0YW5jZS5ib3VuZHMpO30sdGhpcyk7fSxzaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCl7dGhpcy5pdGVyT2JqZWN0SW5zdGFuY2VzKGZ1bmN0aW9uKGluc3RhbmNlKXtpbnN0YW5jZS5zaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCk7fSk7fSxhZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KXt0aGlzLml0ZXJPYmplY3RJbnN0YW5jZXMoZnVuY3Rpb24oaW5zdGFuY2Upe2NhdGVnb3JpZXNEaWN0W2luc3RhbmNlLmNhdGVnb3J5XT10cnVlO30pO319O3JldHVybntPYmplY3RDb2xsZWN0aW9uLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjbGFzcyBBc3luY1NsaWNlR3JvdXAgZXh0ZW5kcyB0ci5tb2RlbC5FdmVudENvbnRhaW5lcntjb25zdHJ1Y3RvcihwYXJlbnRDb250YWluZXIsb3B0X25hbWUpe3N1cGVyKCk7dGhpcy5wYXJlbnRDb250YWluZXJfPXBhcmVudENvbnRhaW5lcjt0aGlzLm5hbWVfPW9wdF9uYW1lO3RoaXMuc2xpY2VzPVtdO3RoaXMudmlld1N1Ykdyb3Vwc189dW5kZWZpbmVkO3RoaXMubmVzdGVkTGV2ZWxfPTA7dGhpcy5oYXNOZXN0ZWRTdWJHcm91cHNfPXRydWU7dGhpcy50aXRsZV89dW5kZWZpbmVkO30KLWdldCBwYXJlbnRDb250YWluZXIoKXtyZXR1cm4gdGhpcy5wYXJlbnRDb250YWluZXJfO30KLWdldCBtb2RlbCgpe3JldHVybiB0aGlzLnBhcmVudENvbnRhaW5lcl8ucGFyZW50Lm1vZGVsO30KLWdldCBzdGFibGVJZCgpe3JldHVybiB0aGlzLnBhcmVudENvbnRhaW5lcl8uc3RhYmxlSWQrJy5Bc3luY1NsaWNlR3JvdXAnO30KLWdldCB0aXRsZSgpe2lmKHRoaXMubmVzdGVkX2xldmVsXz09PTApe3JldHVybic8cm9vdD4nO30KLXJldHVybiB0aGlzLnRpdGxlXzt9Ci1nZXRTZXR0aW5nc0tleSgpe2lmKHRoaXMubmFtZV89PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWQ7fQotY29uc3QgcGFyZW50S2V5PXRoaXMucGFyZW50Q29udGFpbmVyXy5nZXRTZXR0aW5nc0tleSgpO2lmKHBhcmVudEtleT09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1yZXR1cm4gcGFyZW50S2V5KycuJyt0aGlzLm5hbWVfO30KLXB1c2goc2xpY2Upe2lmKHRoaXMudmlld1N1Ykdyb3Vwc18hPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTm8gbmV3IHNsaWNlcyBhcmUgYWxsb3dlZCB3aGVuIHZpZXcgc3ViLWdyb3VwcyBhbHJlYWR5IGZvcm1lZC4nKTt9Ci1zbGljZS5wYXJlbnRDb250YWluZXI9dGhpcy5wYXJlbnRDb250YWluZXI7dGhpcy5zbGljZXMucHVzaChzbGljZSk7cmV0dXJuIHNsaWNlO30KLWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5zbGljZXMubGVuZ3RoO30KLXNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KXtmb3IoY29uc3Qgc2xpY2Ugb2YgdGhpcy5jaGlsZEV2ZW50cygpKXtzbGljZS5zdGFydCs9YW1vdW50O319Ci11cGRhdGVCb3VuZHMoKXt0aGlzLmJvdW5kcy5yZXNldCgpO2ZvcihsZXQgaT0wO2k8dGhpcy5zbGljZXMubGVuZ3RoO2krKyl7dGhpcy5ib3VuZHMuYWRkVmFsdWUodGhpcy5zbGljZXNbaV0uc3RhcnQpO3RoaXMuYm91bmRzLmFkZFZhbHVlKHRoaXMuc2xpY2VzW2ldLmVuZCk7fX0KLWF1dG9DbG9zZU9wZW5TbGljZXMoKXtjb25zdCBtYXhUaW1lc3RhbXA9dGhpcy5wYXJlbnRDb250YWluZXJfLnBhcmVudC5tb2RlbC5ib3VuZHMubWF4O2Zvcihjb25zdCBzbGljZSBvZiB0aGlzLmNoaWxkRXZlbnRzKCkpe2lmKHNsaWNlLmRpZE5vdEZpbmlzaCl7c2xpY2UuZHVyYXRpb249bWF4VGltZXN0YW1wLXNsaWNlLnN0YXJ0O319fQotZ2V0IHZpZXdTdWJHcm91cHMoKXtpZighdGhpcy5oYXNOZXN0ZWRTdWJHcm91cHNffHx0aGlzLm5lc3RlZExldmVsXz09PTIpe3JldHVybltdO30KLWlmKHRoaXMudmlld1N1Ykdyb3Vwc18hPT11bmRlZmluZWQpe3JldHVybiB0aGlzLnZpZXdTdWJHcm91cHNfO30KLWNvbnN0IHN1Ykdyb3Vwc0J5VGl0bGU9bmV3IE1hcCgpO2Zvcihjb25zdCBzbGljZSBvZiB0aGlzLnNsaWNlcyl7bGV0IHN1Ykdyb3VwVGl0bGU9c2xpY2Uudmlld1N1Ykdyb3VwVGl0bGU7bGV0IGhhc05lc3RlZFN1Ykdyb3Vwcz1mYWxzZTtpZih0aGlzLm5lc3RlZExldmVsXz09PTAmJnNsaWNlLnZpZXdTdWJHcm91cEdyb3VwaW5nS2V5IT09dW5kZWZpbmVkKXtzdWJHcm91cFRpdGxlPXNsaWNlLnZpZXdTdWJHcm91cEdyb3VwaW5nS2V5O2hhc05lc3RlZFN1Ykdyb3Vwcz10cnVlO30KLWxldCBzdWJHcm91cD1zdWJHcm91cHNCeVRpdGxlLmdldChzdWJHcm91cFRpdGxlKTtpZihzdWJHcm91cD09PXVuZGVmaW5lZCl7bGV0IG5hbWU7aWYodGhpcy5uYW1lXyE9PXVuZGVmaW5lZCl7bmFtZT10aGlzLm5hbWVfKycuJytzdWJHcm91cFRpdGxlO31lbHNle25hbWU9c3ViR3JvdXBUaXRsZTt9Ci1zdWJHcm91cD1uZXcgQXN5bmNTbGljZUdyb3VwKHRoaXMucGFyZW50Q29udGFpbmVyXyxuYW1lKTtzdWJHcm91cC50aXRsZV89c3ViR3JvdXBUaXRsZTtzdWJHcm91cC5oYXNOZXN0ZWRTdWJHcm91cHNfPWhhc05lc3RlZFN1Ykdyb3VwcztzdWJHcm91cC5uZXN0ZWRMZXZlbF89dGhpcy5uZXN0ZWRMZXZlbF8rMTtzdWJHcm91cHNCeVRpdGxlLnNldChzdWJHcm91cFRpdGxlLHN1Ykdyb3VwKTt9Ci1zdWJHcm91cC5wdXNoKHNsaWNlKTt9Ci10aGlzLnZpZXdTdWJHcm91cHNfPUFycmF5LmZyb20oc3ViR3JvdXBzQnlUaXRsZS52YWx1ZXMoKSk7dGhpcy52aWV3U3ViR3JvdXBzXy5zb3J0KChhLGIpPT5hLnRpdGxlLmxvY2FsZUNvbXBhcmUoYi50aXRsZSkpO3JldHVybiB0aGlzLnZpZXdTdWJHcm91cHNfO30qZmluZFRvcG1vc3RTbGljZXNJblRoaXNDb250YWluZXIoZXZlbnRQcmVkaWNhdGUsb3B0X3RoaXMpe2Zvcihjb25zdCBzbGljZSBvZiB0aGlzLnNsaWNlcyl7aWYoc2xpY2UuaXNUb3BMZXZlbCl7eWllbGQqc2xpY2UuZmluZFRvcG1vc3RTbGljZXNSZWxhdGl2ZVRvVGhpc1NsaWNlKGV2ZW50UHJlZGljYXRlLG9wdF90aGlzKTt9fX0qY2hpbGRFdmVudHMoKXtmb3IoY29uc3Qgc2xpY2Ugb2YgdGhpcy5zbGljZXMpe3lpZWxkIHNsaWNlO3lpZWxkKnNsaWNlLmVudW1lcmF0ZUFsbERlc2NlbmRlbnRzKCk7fX0qY2hpbGRFdmVudENvbnRhaW5lcnMoKXt9fQotcmV0dXJue0FzeW5jU2xpY2VHcm91cCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgU2xpY2U9dHIubW9kZWwuU2xpY2U7ZnVuY3Rpb24gVGhyZWFkU2xpY2UoY2F0LHRpdGxlLGNvbG9ySWQsc3RhcnQsYXJncyxvcHRfZHVyYXRpb24sb3B0X2NwdVN0YXJ0LG9wdF9jcHVEdXJhdGlvbixvcHRfYXJnc1N0cmlwcGVkLG9wdF9iaW5kSWQpe1NsaWNlLmNhbGwodGhpcyxjYXQsdGl0bGUsY29sb3JJZCxzdGFydCxhcmdzLG9wdF9kdXJhdGlvbixvcHRfY3B1U3RhcnQsb3B0X2NwdUR1cmF0aW9uLG9wdF9hcmdzU3RyaXBwZWQsb3B0X2JpbmRJZCk7dGhpcy5zdWJTbGljZXM9W107fQotVGhyZWFkU2xpY2UucHJvdG90eXBlPXtfX3Byb3RvX186U2xpY2UucHJvdG90eXBlLGdldCBvdmVybGFwcGluZ1NhbXBsZXMoKXtjb25zdCBzYW1wbGVzPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2lmKCF0aGlzLnBhcmVudENvbnRhaW5lcnx8IXRoaXMucGFyZW50Q29udGFpbmVyLnNhbXBsZXMpe3JldHVybiBzYW1wbGVzO30KLXRoaXMucGFyZW50Q29udGFpbmVyLnNhbXBsZXMuZm9yRWFjaChmdW5jdGlvbihzYW1wbGUpe2lmKHRoaXMuc3RhcnQ8PXNhbXBsZS5zdGFydCYmc2FtcGxlLnN0YXJ0PD10aGlzLmVuZCl7c2FtcGxlcy5wdXNoKHNhbXBsZSk7fX0sdGhpcyk7cmV0dXJuIHNhbXBsZXM7fX07dHIubW9kZWwuRXZlbnRSZWdpc3RyeS5yZWdpc3RlcihUaHJlYWRTbGljZSx7bmFtZTonc2xpY2UnLHBsdXJhbE5hbWU6J3NsaWNlcyd9KTtyZXR1cm57VGhyZWFkU2xpY2UsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgVGhyZWFkU2xpY2U9dHIubW9kZWwuVGhyZWFkU2xpY2U7ZnVuY3Rpb24gZ2V0U2xpY2VMbyhzKXtyZXR1cm4gcy5zdGFydDt9Ci1mdW5jdGlvbiBnZXRTbGljZUhpKHMpe3JldHVybiBzLmVuZDt9Ci1mdW5jdGlvbiBTbGljZUdyb3VwKHBhcmVudENvbnRhaW5lcixvcHRfc2xpY2VDb25zdHJ1Y3RvcixvcHRfbmFtZSl7dHIubW9kZWwuRXZlbnRDb250YWluZXIuY2FsbCh0aGlzKTt0aGlzLnBhcmVudENvbnRhaW5lcl89cGFyZW50Q29udGFpbmVyO2NvbnN0IHNsaWNlQ29uc3RydWN0b3I9b3B0X3NsaWNlQ29uc3RydWN0b3J8fFRocmVhZFNsaWNlO3RoaXMuc2xpY2VDb25zdHJ1Y3Rvcj1zbGljZUNvbnN0cnVjdG9yO3RoaXMuc2xpY2VDb25zdHJ1Y3RvclN1YlR5cGVzPXRoaXMuc2xpY2VDb25zdHJ1Y3Rvci5zdWJUeXBlcztpZighdGhpcy5zbGljZUNvbnN0cnVjdG9yU3ViVHlwZXMpe3Rocm93IG5ldyBFcnJvcignb3B0X3NsaWNlQ29uc3RydWN0b3IgbXVzdCBoYXZlIGEgc3VidHlwZSByZWdpc3RyeS4nKTt9Ci10aGlzLm9wZW5QYXJ0aWFsU2xpY2VzXz1bXTt0aGlzLnNsaWNlcz1bXTt0aGlzLnRvcExldmVsU2xpY2VzPVtdO3RoaXMuaGF2ZVRvcExldmVsU2xpY2VzQmVlbkJ1aWx0PWZhbHNlO3RoaXMubmFtZV89b3B0X25hbWU7aWYodGhpcy5tb2RlbD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdTbGljZUdyb3VwIG11c3QgaGF2ZSBtb2RlbCBkZWZpbmVkLicpO319Ci1TbGljZUdyb3VwLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLkV2ZW50Q29udGFpbmVyLnByb3RvdHlwZSxnZXQgcGFyZW50Q29udGFpbmVyKCl7cmV0dXJuIHRoaXMucGFyZW50Q29udGFpbmVyXzt9LGdldCBtb2RlbCgpe3JldHVybiB0aGlzLnBhcmVudENvbnRhaW5lcl8ubW9kZWw7fSxnZXQgc3RhYmxlSWQoKXtyZXR1cm4gdGhpcy5wYXJlbnRDb250YWluZXJfLnN0YWJsZUlkKycuU2xpY2VHcm91cCc7fSxnZXRTZXR0aW5nc0tleSgpe2lmKCF0aGlzLm5hbWVfKXJldHVybiB1bmRlZmluZWQ7Y29uc3QgcGFyZW50S2V5PXRoaXMucGFyZW50Q29udGFpbmVyXy5nZXRTZXR0aW5nc0tleSgpO2lmKCFwYXJlbnRLZXkpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gcGFyZW50S2V5KycuJyt0aGlzLm5hbWU7fSxnZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuc2xpY2VzLmxlbmd0aDt9LHB1c2hTbGljZShzbGljZSl7dGhpcy5oYXZlVG9wTGV2ZWxTbGljZXNCZWVuQnVpbHQ9ZmFsc2U7c2xpY2UucGFyZW50Q29udGFpbmVyPXRoaXMucGFyZW50Q29udGFpbmVyXzt0aGlzLnNsaWNlcy5wdXNoKHNsaWNlKTtyZXR1cm4gc2xpY2U7fSxwdXNoU2xpY2VzKHNsaWNlcyl7dGhpcy5oYXZlVG9wTGV2ZWxTbGljZXNCZWVuQnVpbHQ9ZmFsc2U7c2xpY2VzLmZvckVhY2goZnVuY3Rpb24oc2xpY2Upe3NsaWNlLnBhcmVudENvbnRhaW5lcj10aGlzLnBhcmVudENvbnRhaW5lcl87dGhpcy5zbGljZXMucHVzaChzbGljZSk7fSx0aGlzKTt9LGJlZ2luU2xpY2UoY2F0ZWdvcnksdGl0bGUsdHMsb3B0X2FyZ3Msb3B0X3R0cyxvcHRfYXJnc1N0cmlwcGVkLG9wdF9jb2xvcklkKXtpZih0aGlzLm9wZW5QYXJ0aWFsU2xpY2VzXy5sZW5ndGgpe2NvbnN0IHByZXZTbGljZT10aGlzLm9wZW5QYXJ0aWFsU2xpY2VzX1t0aGlzLm9wZW5QYXJ0aWFsU2xpY2VzXy5sZW5ndGgtMV07aWYodHM8cHJldlNsaWNlLnN0YXJ0KXt0aHJvdyBuZXcgRXJyb3IoJ1NsaWNlcyBtdXN0IGJlIGFkZGVkIGluIGluY3JlYXNpbmcgdGltZXN0YW1wIG9yZGVyJyk7fX0KLWNvbnN0IGNvbG9ySWQ9b3B0X2NvbG9ySWR8fENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyh0aXRsZSk7Y29uc3Qgc2xpY2VDb25zdHJ1Y3RvclN1YlR5cGVzPXRoaXMuc2xpY2VDb25zdHJ1Y3RvclN1YlR5cGVzO2NvbnN0IHNsaWNlVHlwZT1zbGljZUNvbnN0cnVjdG9yU3ViVHlwZXMuZ2V0Q29uc3RydWN0b3IoY2F0ZWdvcnksdGl0bGUpO2NvbnN0IHNsaWNlPW5ldyBzbGljZVR5cGUoY2F0ZWdvcnksdGl0bGUsY29sb3JJZCx0cyxvcHRfYXJncz9vcHRfYXJnczp7fSxudWxsLG9wdF90dHMsdW5kZWZpbmVkLG9wdF9hcmdzU3RyaXBwZWQpO3RoaXMub3BlblBhcnRpYWxTbGljZXNfLnB1c2goc2xpY2UpO3NsaWNlLmRpZE5vdEZpbmlzaD10cnVlO3RoaXMucHVzaFNsaWNlKHNsaWNlKTtyZXR1cm4gc2xpY2U7fSxpc1RpbWVzdGFtcFZhbGlkRm9yQmVnaW5PckVuZCh0cyl7aWYoIXRoaXMub3BlblBhcnRpYWxTbGljZXNfLmxlbmd0aClyZXR1cm4gdHJ1ZTtjb25zdCB0b3A9dGhpcy5vcGVuUGFydGlhbFNsaWNlc19bdGhpcy5vcGVuUGFydGlhbFNsaWNlc18ubGVuZ3RoLTFdO3JldHVybiB0cz49dG9wLnN0YXJ0O30sZ2V0IG9wZW5TbGljZUNvdW50KCl7cmV0dXJuIHRoaXMub3BlblBhcnRpYWxTbGljZXNfLmxlbmd0aDt9LGdldCBtb3N0UmVjZW50bHlPcGVuZWRQYXJ0aWFsU2xpY2UoKXtpZighdGhpcy5vcGVuUGFydGlhbFNsaWNlc18ubGVuZ3RoKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMub3BlblBhcnRpYWxTbGljZXNfW3RoaXMub3BlblBhcnRpYWxTbGljZXNfLmxlbmd0aC0xXTt9LGVuZFNsaWNlKHRzLG9wdF90dHMsb3B0X2NvbG9ySWQpe2lmKCF0aGlzLm9wZW5TbGljZUNvdW50KXt0aHJvdyBuZXcgRXJyb3IoJ2VuZFNsaWNlIGNhbGxlZCB3aXRob3V0IGFuIG9wZW4gc2xpY2UnKTt9Ci1jb25zdCBzbGljZT10aGlzLm9wZW5QYXJ0aWFsU2xpY2VzX1t0aGlzLm9wZW5TbGljZUNvdW50LTFdO3RoaXMub3BlblBhcnRpYWxTbGljZXNfLnNwbGljZSh0aGlzLm9wZW5TbGljZUNvdW50LTEsMSk7aWYodHM8c2xpY2Uuc3RhcnQpe3Rocm93IG5ldyBFcnJvcignU2xpY2UgJytzbGljZS50aXRsZSsnIGVuZCB0aW1lIGlzIGJlZm9yZSBpdHMgc3RhcnQuJyk7fQotc2xpY2UuZHVyYXRpb249dHMtc2xpY2Uuc3RhcnQ7c2xpY2UuZGlkTm90RmluaXNoPWZhbHNlO3NsaWNlLmNvbG9ySWQ9b3B0X2NvbG9ySWR8fHNsaWNlLmNvbG9ySWQ7aWYob3B0X3R0cyYmc2xpY2UuY3B1U3RhcnQhPT11bmRlZmluZWQpe3NsaWNlLmNwdUR1cmF0aW9uPW9wdF90dHMtc2xpY2UuY3B1U3RhcnQ7fQotcmV0dXJuIHNsaWNlO30scHVzaENvbXBsZXRlU2xpY2UoY2F0ZWdvcnksdGl0bGUsdHMsZHVyYXRpb24sdHRzLGNwdUR1cmF0aW9uLG9wdF9hcmdzLG9wdF9hcmdzU3RyaXBwZWQsb3B0X2NvbG9ySWQsb3B0X2JpbmRJZCl7Y29uc3QgY29sb3JJZD1vcHRfY29sb3JJZHx8Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHRpdGxlKTtjb25zdCBzbGljZUNvbnN0cnVjdG9yU3ViVHlwZXM9dGhpcy5zbGljZUNvbnN0cnVjdG9yU3ViVHlwZXM7Y29uc3Qgc2xpY2VUeXBlPXNsaWNlQ29uc3RydWN0b3JTdWJUeXBlcy5nZXRDb25zdHJ1Y3RvcihjYXRlZ29yeSx0aXRsZSk7Y29uc3Qgc2xpY2U9bmV3IHNsaWNlVHlwZShjYXRlZ29yeSx0aXRsZSxjb2xvcklkLHRzLG9wdF9hcmdzP29wdF9hcmdzOnt9LGR1cmF0aW9uLHR0cyxjcHVEdXJhdGlvbixvcHRfYXJnc1N0cmlwcGVkLG9wdF9iaW5kSWQpO2lmKGR1cmF0aW9uPT09dW5kZWZpbmVkKXtzbGljZS5kaWROb3RGaW5pc2g9dHJ1ZTt9Ci10aGlzLnB1c2hTbGljZShzbGljZSk7cmV0dXJuIHNsaWNlO30sYXV0b0Nsb3NlT3BlblNsaWNlcygpe3RoaXMudXBkYXRlQm91bmRzKCk7Y29uc3QgbWF4VGltZXN0YW1wPXRoaXMuYm91bmRzLm1heDtmb3IobGV0IHNJPTA7c0k8dGhpcy5zbGljZXMubGVuZ3RoO3NJKyspe2NvbnN0IHNsaWNlPXRoaXMuc2xpY2VzW3NJXTtpZihzbGljZS5kaWROb3RGaW5pc2gpe3NsaWNlLmR1cmF0aW9uPW1heFRpbWVzdGFtcC1zbGljZS5zdGFydDt9fQotdGhpcy5vcGVuUGFydGlhbFNsaWNlc189W107fSxzaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCl7Zm9yKGxldCBzST0wO3NJPHRoaXMuc2xpY2VzLmxlbmd0aDtzSSsrKXtjb25zdCBzbGljZT10aGlzLnNsaWNlc1tzSV07c2xpY2Uuc3RhcnQ9KHNsaWNlLnN0YXJ0K2Ftb3VudCk7fX0sdXBkYXRlQm91bmRzKCl7dGhpcy5ib3VuZHMucmVzZXQoKTtmb3IobGV0IGk9MDtpPHRoaXMuc2xpY2VzLmxlbmd0aDtpKyspe3RoaXMuYm91bmRzLmFkZFZhbHVlKHRoaXMuc2xpY2VzW2ldLnN0YXJ0KTt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLnNsaWNlc1tpXS5lbmQpO319LGNvcHlTbGljZShzbGljZSl7Y29uc3Qgc2xpY2VDb25zdHJ1Y3RvclN1YlR5cGVzPXRoaXMuc2xpY2VDb25zdHJ1Y3RvclN1YlR5cGVzO2NvbnN0IHNsaWNlVHlwZT1zbGljZUNvbnN0cnVjdG9yU3ViVHlwZXMuZ2V0Q29uc3RydWN0b3Ioc2xpY2UuY2F0ZWdvcnksc2xpY2UudGl0bGUpO2NvbnN0IG5ld1NsaWNlPW5ldyBzbGljZVR5cGUoc2xpY2UuY2F0ZWdvcnksc2xpY2UudGl0bGUsc2xpY2UuY29sb3JJZCxzbGljZS5zdGFydCxzbGljZS5hcmdzLHNsaWNlLmR1cmF0aW9uLHNsaWNlLmNwdVN0YXJ0LHNsaWNlLmNwdUR1cmF0aW9uKTtuZXdTbGljZS5kaWROb3RGaW5pc2g9c2xpY2UuZGlkTm90RmluaXNoO3JldHVybiBuZXdTbGljZTt9LCpmaW5kVG9wbW9zdFNsaWNlc0luVGhpc0NvbnRhaW5lcihldmVudFByZWRpY2F0ZSxvcHRfdGhpcyl7aWYoIXRoaXMuaGF2ZVRvcExldmVsU2xpY2VzQmVlbkJ1aWx0KXt0aHJvdyBuZXcgRXJyb3IoJ05vcGUnKTt9Ci1mb3IoY29uc3QgcyBvZiB0aGlzLnRvcExldmVsU2xpY2VzKXt5aWVsZCpzLmZpbmRUb3Btb3N0U2xpY2VzUmVsYXRpdmVUb1RoaXNTbGljZShldmVudFByZWRpY2F0ZSk7fX0sKmNoaWxkRXZlbnRzKCl7eWllbGQqdGhpcy5zbGljZXM7fSwqY2hpbGRFdmVudENvbnRhaW5lcnMoKXt9LGdldFNsaWNlc09mTmFtZSh0aXRsZSl7Y29uc3Qgc2xpY2VzPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5zbGljZXMubGVuZ3RoO2krKyl7aWYodGhpcy5zbGljZXNbaV0udGl0bGU9PT10aXRsZSl7c2xpY2VzLnB1c2godGhpcy5zbGljZXNbaV0pO319Ci1yZXR1cm4gc2xpY2VzO30saXRlclNsaWNlc0luVGltZVJhbmdlKGNhbGxiYWNrLHN0YXJ0LGVuZCl7Y29uc3QgcmV0PVtdO3RyLmIuaXRlcmF0ZU92ZXJJbnRlcnNlY3RpbmdJbnRlcnZhbHModGhpcy50b3BMZXZlbFNsaWNlcyxmdW5jdGlvbihzKXtyZXR1cm4gcy5zdGFydDt9LGZ1bmN0aW9uKHMpe3JldHVybiBzLmR1cmF0aW9uO30sc3RhcnQsZW5kLGZ1bmN0aW9uKHRvcExldmVsU2xpY2Upe2NhbGxiYWNrKHRvcExldmVsU2xpY2UpO2Zvcihjb25zdCBzbGljZSBvZiB0b3BMZXZlbFNsaWNlLmVudW1lcmF0ZUFsbERlc2NlbmRlbnRzKCkpe2NhbGxiYWNrKHNsaWNlKTt9fSk7cmV0dXJuIHJldDt9LGZpbmRGaXJzdFNsaWNlKCl7aWYoIXRoaXMuaGF2ZVRvcExldmVsU2xpY2VzQmVlbkJ1aWx0KXt0aHJvdyBuZXcgRXJyb3IoJ05vcGUnKTt9Ci1pZigwPT09dGhpcy5zbGljZXMubGVuZ3RoKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMuc2xpY2VzWzBdO30sZmluZFNsaWNlQXRUcyh0cyl7aWYoIXRoaXMuaGF2ZVRvcExldmVsU2xpY2VzQmVlbkJ1aWx0KXRocm93IG5ldyBFcnJvcignTm9wZScpO2xldCBpPXRyLmIuZmluZEluZGV4SW5Tb3J0ZWRDbG9zZWRJbnRlcnZhbHModGhpcy50b3BMZXZlbFNsaWNlcyxnZXRTbGljZUxvLGdldFNsaWNlSGksdHMpO2lmKGk9PT0tMXx8aT09PXRoaXMudG9wTGV2ZWxTbGljZXMubGVuZ3RoKXtyZXR1cm4gdW5kZWZpbmVkO30KLWxldCBjdXJTbGljZT10aGlzLnRvcExldmVsU2xpY2VzW2ldO3doaWxlKHRydWUpe2k9dHIuYi5maW5kSW5kZXhJblNvcnRlZENsb3NlZEludGVydmFscyhjdXJTbGljZS5zdWJTbGljZXMsZ2V0U2xpY2VMbyxnZXRTbGljZUhpLHRzKTtpZihpPT09LTF8fGk9PT1jdXJTbGljZS5zdWJTbGljZXMubGVuZ3RoKXtyZXR1cm4gY3VyU2xpY2U7fQotY3VyU2xpY2U9Y3VyU2xpY2Uuc3ViU2xpY2VzW2ldO319LGZpbmROZXh0U2xpY2VBZnRlcih0cyxyZWZHdWlkKXtsZXQgaT10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkodGhpcy5zbGljZXMsZ2V0U2xpY2VMbyx0cyk7aWYoaT09PXRoaXMuc2xpY2VzLmxlbmd0aCl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1mb3IoO2k8dGhpcy5zbGljZXMubGVuZ3RoO2krKyl7Y29uc3Qgc2xpY2U9dGhpcy5zbGljZXNbaV07aWYoc2xpY2Uuc3RhcnQ+dHMpcmV0dXJuIHNsaWNlO2lmKHNsaWNlLmd1aWQ8PXJlZkd1aWQpY29udGludWU7cmV0dXJuIHNsaWNlO30KLXJldHVybiB1bmRlZmluZWQ7fSxoYXNDcHVEdXJhdGlvbl8oKXtpZih0aGlzLnNsaWNlcy5zb21lKGZ1bmN0aW9uKHNsaWNlKXtyZXR1cm4gc2xpY2UuY3B1RHVyYXRpb24hPT11bmRlZmluZWQ7fSkpcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNlO30sY3JlYXRlU3ViU2xpY2VzKCl7dGhpcy5oYXZlVG9wTGV2ZWxTbGljZXNCZWVuQnVpbHQ9dHJ1ZTt0aGlzLmNyZWF0ZVN1YlNsaWNlc0ltcGxfKCk7aWYoIXRoaXMuaGFzQ3B1RHVyYXRpb25fKCkmJnRoaXMucGFyZW50Q29udGFpbmVyLnRpbWVTbGljZXMpe3RoaXMuYWRkQ3B1VGltZVRvU3Vic2xpY2VzXyh0aGlzLnBhcmVudENvbnRhaW5lci50aW1lU2xpY2VzKTt9Ci10aGlzLnNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHNsaWNlKXtsZXQgc2VsZlRpbWU9c2xpY2UuZHVyYXRpb247Zm9yKGxldCBpPTA7aTxzbGljZS5zdWJTbGljZXMubGVuZ3RoO2krKyl7c2VsZlRpbWUtPXNsaWNlLnN1YlNsaWNlc1tpXS5kdXJhdGlvbjt9Ci1zbGljZS5zZWxmVGltZT1zZWxmVGltZTtpZihzbGljZS5jcHVEdXJhdGlvbj09PXVuZGVmaW5lZClyZXR1cm47bGV0IGNwdVNlbGZUaW1lPXNsaWNlLmNwdUR1cmF0aW9uO2ZvcihsZXQgaT0wO2k8c2xpY2Uuc3ViU2xpY2VzLmxlbmd0aDtpKyspe2lmKHNsaWNlLnN1YlNsaWNlc1tpXS5jcHVEdXJhdGlvbiE9PXVuZGVmaW5lZCl7Y3B1U2VsZlRpbWUtPXNsaWNlLnN1YlNsaWNlc1tpXS5jcHVEdXJhdGlvbjt9fQotc2xpY2UuY3B1U2VsZlRpbWU9Y3B1U2VsZlRpbWU7fSk7fSxjcmVhdGVTdWJTbGljZXNJbXBsXygpe2NvbnN0IHByZWNpc2lvblVuaXQ9dGhpcy5tb2RlbC5pbnRyaW5zaWNUaW1lVW5pdDtmdW5jdGlvbiBhZGRTbGljZUlmQm91bmRzKHBhcmVudCxjaGlsZCl7aWYocGFyZW50LmJvdW5kcyhjaGlsZCxwcmVjaXNpb25Vbml0KSl7Y2hpbGQucGFyZW50U2xpY2U9cGFyZW50O2lmKHBhcmVudC5zdWJTbGljZXM9PT11bmRlZmluZWQpe3BhcmVudC5zdWJTbGljZXM9W107fQotcGFyZW50LnN1YlNsaWNlcy5wdXNoKGNoaWxkKTtyZXR1cm4gdHJ1ZTt9Ci1yZXR1cm4gZmFsc2U7fQotaWYoIXRoaXMuc2xpY2VzLmxlbmd0aClyZXR1cm47Y29uc3Qgb3BzPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5zbGljZXMubGVuZ3RoO2krKyl7aWYodGhpcy5zbGljZXNbaV0uc3ViU2xpY2VzKXt0aGlzLnNsaWNlc1tpXS5zdWJTbGljZXMuc3BsaWNlKDAsdGhpcy5zbGljZXNbaV0uc3ViU2xpY2VzLmxlbmd0aCk7fQotb3BzLnB1c2goaSk7fQotY29uc3Qgb3JpZ2luYWxTbGljZXM9dGhpcy5zbGljZXM7b3BzLnNvcnQoZnVuY3Rpb24oaXgsaXkpe2NvbnN0IHg9b3JpZ2luYWxTbGljZXNbaXhdO2NvbnN0IHk9b3JpZ2luYWxTbGljZXNbaXldO2lmKHguc3RhcnQhPT15LnN0YXJ0KXtyZXR1cm4geC5zdGFydC15LnN0YXJ0O30KLXJldHVybiBpeC1peTt9KTtjb25zdCBzbGljZXM9bmV3IEFycmF5KHRoaXMuc2xpY2VzLmxlbmd0aCk7Zm9yKGxldCBpPTA7aTxvcHMubGVuZ3RoO2krKyl7c2xpY2VzW2ldPW9yaWdpbmFsU2xpY2VzW29wc1tpXV07fQotbGV0IHJvb3RTbGljZT1zbGljZXNbMF07dGhpcy50b3BMZXZlbFNsaWNlcz1bXTt0aGlzLnRvcExldmVsU2xpY2VzLnB1c2gocm9vdFNsaWNlKTtyb290U2xpY2UuaXNUb3BMZXZlbD10cnVlO2ZvcihsZXQgaT0xO2k8c2xpY2VzLmxlbmd0aDtpKyspe2NvbnN0IHNsaWNlPXNsaWNlc1tpXTt3aGlsZShyb290U2xpY2UhPT11bmRlZmluZWQmJighYWRkU2xpY2VJZkJvdW5kcyhyb290U2xpY2Usc2xpY2UpKSl7cm9vdFNsaWNlPXJvb3RTbGljZS5wYXJlbnRTbGljZTt9Ci1pZihyb290U2xpY2U9PT11bmRlZmluZWQpe3RoaXMudG9wTGV2ZWxTbGljZXMucHVzaChzbGljZSk7c2xpY2UuaXNUb3BMZXZlbD10cnVlO30KLXJvb3RTbGljZT1zbGljZTt9Ci10aGlzLnNsaWNlcz1zbGljZXM7fSxhZGRDcHVUaW1lVG9TdWJzbGljZXNfKHRpbWVTbGljZXMpe2NvbnN0IFNDSEVEVUxJTkdfU1RBVEU9dHIubW9kZWwuU0NIRURVTElOR19TVEFURTtsZXQgc2xpY2VJZHg9MDt0aW1lU2xpY2VzLmZvckVhY2goZnVuY3Rpb24odGltZVNsaWNlKXtpZih0aW1lU2xpY2Uuc2NoZWR1bGluZ1N0YXRlPT09U0NIRURVTElOR19TVEFURS5SVU5OSU5HKXt3aGlsZShzbGljZUlkeDx0aGlzLnRvcExldmVsU2xpY2VzLmxlbmd0aCl7aWYodGhpcy5hZGRDcHVUaW1lVG9TdWJzbGljZV8odGhpcy50b3BMZXZlbFNsaWNlc1tzbGljZUlkeF0sdGltZVNsaWNlKSl7c2xpY2VJZHgrKzt9ZWxzZXticmVhazt9fX19LHRoaXMpO30sYWRkQ3B1VGltZVRvU3Vic2xpY2VfKHNsaWNlLHRpbWVTbGljZSl7aWYoc2xpY2Uuc3RhcnQ+dGltZVNsaWNlLmVuZHx8c2xpY2UuZW5kPHRpbWVTbGljZS5zdGFydCl7cmV0dXJuIHNsaWNlLmVuZDw9dGltZVNsaWNlLmVuZDt9Ci1sZXQgZHVyYXRpb249dGltZVNsaWNlLmR1cmF0aW9uO2lmKHNsaWNlLnN0YXJ0PnRpbWVTbGljZS5zdGFydCl7ZHVyYXRpb24tPXNsaWNlLnN0YXJ0LXRpbWVTbGljZS5zdGFydDt9Ci1pZih0aW1lU2xpY2UuZW5kPnNsaWNlLmVuZCl7ZHVyYXRpb24tPXRpbWVTbGljZS5lbmQtc2xpY2UuZW5kO30KLWlmKHNsaWNlLmNwdUR1cmF0aW9uKXtzbGljZS5jcHVEdXJhdGlvbis9ZHVyYXRpb247fWVsc2V7c2xpY2UuY3B1RHVyYXRpb249ZHVyYXRpb247fQotZm9yKGxldCBpPTA7aTxzbGljZS5zdWJTbGljZXMubGVuZ3RoO2krKyl7dGhpcy5hZGRDcHVUaW1lVG9TdWJzbGljZV8oc2xpY2Uuc3ViU2xpY2VzW2ldLHRpbWVTbGljZSk7fQotcmV0dXJuIHNsaWNlLmVuZDw9dGltZVNsaWNlLmVuZDt9fTtTbGljZUdyb3VwLm1lcmdlPWZ1bmN0aW9uKGdyb3VwQSxncm91cEIpe2lmKGdyb3VwQS5vcGVuUGFydGlhbFNsaWNlc18ubGVuZ3RoPjApe3Rocm93IG5ldyBFcnJvcignZ3JvdXBBIGhhcyBvcGVuIHBhcnRpYWwgc2xpY2VzJyk7fQotaWYoZ3JvdXBCLm9wZW5QYXJ0aWFsU2xpY2VzXy5sZW5ndGg+MCl7dGhyb3cgbmV3IEVycm9yKCdncm91cEIgaGFzIG9wZW4gcGFydGlhbCBzbGljZXMnKTt9Ci1pZihncm91cEEucGFyZW50Q29udGFpbmVyIT09Z3JvdXBCLnBhcmVudENvbnRhaW5lcil7dGhyb3cgbmV3IEVycm9yKCdEaWZmZXJlbnQgcGFyZW50IHRocmVhZHMuIENhbm5vdCBtZXJnZScpO30KLWlmKGdyb3VwQS5zbGljZUNvbnN0cnVjdG9yIT09Z3JvdXBCLnNsaWNlQ29uc3RydWN0b3Ipe3Rocm93IG5ldyBFcnJvcignRGlmZmVyZW50IHNsaWNlIGNvbnN0cnVjdG9ycy4gQ2Fubm90IG1lcmdlJyk7fQotY29uc3QgcmVzdWx0PW5ldyBTbGljZUdyb3VwKGdyb3VwQS5wYXJlbnRDb250YWluZXIsZ3JvdXBBLnNsaWNlQ29uc3RydWN0b3IsZ3JvdXBBLm5hbWVfKTtjb25zdCBzbGljZXNBPWdyb3VwQS5zbGljZXM7Y29uc3Qgc2xpY2VzQj1ncm91cEIuc2xpY2VzO2xldCBpZHhBPTA7bGV0IGlkeEI9MDtjb25zdCBvcGVuQT1bXTtjb25zdCBvcGVuQj1bXTtjb25zdCBzcGxpdE9wZW5TbGljZXM9ZnVuY3Rpb24od2hlbil7Zm9yKGxldCBpPTA7aTxvcGVuQi5sZW5ndGg7aSsrKXtjb25zdCBvbGRTbGljZT1vcGVuQltpXTtjb25zdCBvbGRFbmQ9b2xkU2xpY2UuZW5kO2lmKHdoZW48b2xkU2xpY2Uuc3RhcnR8fG9sZEVuZDx3aGVuKXt0aHJvdyBuZXcgRXJyb3IoJ3NsaWNlIHNob3VsZCBub3QgYmUgc3BsaXQnKTt9Ci1jb25zdCBuZXdTbGljZT1yZXN1bHQuY29weVNsaWNlKG9sZFNsaWNlKTtuZXdTbGljZS5zdGFydD13aGVuO25ld1NsaWNlLmR1cmF0aW9uPW9sZEVuZC13aGVuO2lmKG5ld1NsaWNlLnRpdGxlLmluZGV4T2YoJyAoY29udC4pJyk9PT0tMSl7bmV3U2xpY2UudGl0bGUrPScgKGNvbnQuKSc7fQotb2xkU2xpY2UuZHVyYXRpb249d2hlbi1vbGRTbGljZS5zdGFydDtvcGVuQltpXT1uZXdTbGljZTtyZXN1bHQucHVzaFNsaWNlKG5ld1NsaWNlKTt9fTtjb25zdCBjbG9zZU9wZW5TbGljZXM9ZnVuY3Rpb24odXBUbyl7d2hpbGUob3BlbkEubGVuZ3RoPjB8fG9wZW5CLmxlbmd0aD4wKXtjb25zdCBuZXh0QT1vcGVuQVtvcGVuQS5sZW5ndGgtMV07Y29uc3QgbmV4dEI9b3BlbkJbb3BlbkIubGVuZ3RoLTFdO2NvbnN0IGVuZEE9bmV4dEEmJm5leHRBLmVuZDtjb25zdCBlbmRCPW5leHRCJiZuZXh0Qi5lbmQ7aWYoKGVuZEE9PT11bmRlZmluZWR8fGVuZEE+dXBUbykmJihlbmRCPT09dW5kZWZpbmVkfHxlbmRCPnVwVG8pKXtyZXR1cm47fQotaWYoZW5kQj09PXVuZGVmaW5lZHx8ZW5kQTxlbmRCKXtzcGxpdE9wZW5TbGljZXMoZW5kQSk7b3BlbkEucG9wKCk7fWVsc2V7b3BlbkIucG9wKCk7fX19O3doaWxlKGlkeEE8c2xpY2VzQS5sZW5ndGh8fGlkeEI8c2xpY2VzQi5sZW5ndGgpe2NvbnN0IHNBPXNsaWNlc0FbaWR4QV07Y29uc3Qgc0I9c2xpY2VzQltpZHhCXTtsZXQgbmV4dFNsaWNlO2xldCBpc0Zyb21CO2lmKHNBPT09dW5kZWZpbmVkfHwoc0IhPT11bmRlZmluZWQmJnNBLnN0YXJ0PnNCLnN0YXJ0KSl7bmV4dFNsaWNlPXJlc3VsdC5jb3B5U2xpY2Uoc0IpO2lzRnJvbUI9dHJ1ZTtpZHhCKys7fWVsc2V7bmV4dFNsaWNlPXJlc3VsdC5jb3B5U2xpY2Uoc0EpO2lzRnJvbUI9ZmFsc2U7aWR4QSsrO30KLWNsb3NlT3BlblNsaWNlcyhuZXh0U2xpY2Uuc3RhcnQpO3Jlc3VsdC5wdXNoU2xpY2UobmV4dFNsaWNlKTtpZihpc0Zyb21CKXtvcGVuQi5wdXNoKG5leHRTbGljZSk7fWVsc2V7c3BsaXRPcGVuU2xpY2VzKG5leHRTbGljZS5zdGFydCk7b3BlbkEucHVzaChuZXh0U2xpY2UpO319Ci1jbG9zZU9wZW5TbGljZXMoKTtyZXR1cm4gcmVzdWx0O307cmV0dXJue1NsaWNlR3JvdXAsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IEFzeW5jU2xpY2U9dHIubW9kZWwuQXN5bmNTbGljZTtjb25zdCBBc3luY1NsaWNlR3JvdXA9dHIubW9kZWwuQXN5bmNTbGljZUdyb3VwO2NvbnN0IFNsaWNlR3JvdXA9dHIubW9kZWwuU2xpY2VHcm91cDtjb25zdCBUaHJlYWRTbGljZT10ci5tb2RlbC5UaHJlYWRTbGljZTtjb25zdCBUaHJlYWRUaW1lU2xpY2U9dHIubW9kZWwuVGhyZWFkVGltZVNsaWNlO2Z1bmN0aW9uIFRocmVhZChwYXJlbnQsdGlkKXtpZighcGFyZW50KXt0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBtdXN0IGJlIHByb3ZpZGVkLicpO30KLXRyLm1vZGVsLkV2ZW50Q29udGFpbmVyLmNhbGwodGhpcyk7dGhpcy5wYXJlbnQ9cGFyZW50O3RoaXMuc29ydEluZGV4PTA7dGhpcy50aWQ9dGlkO3RoaXMubmFtZT11bmRlZmluZWQ7dGhpcy5zYW1wbGVzXz11bmRlZmluZWQ7dGhpcy5zbGljZUdyb3VwPW5ldyBTbGljZUdyb3VwKHRoaXMsVGhyZWFkU2xpY2UsJ3NsaWNlcycpO3RoaXMudGltZVNsaWNlcz11bmRlZmluZWQ7dGhpcy5rZXJuZWxTbGljZUdyb3VwPW5ldyBTbGljZUdyb3VwKHRoaXMsVGhyZWFkU2xpY2UsJ2tlcm5lbC1zbGljZXMnKTt0aGlzLmFzeW5jU2xpY2VHcm91cD1uZXcgQXN5bmNTbGljZUdyb3VwKHRoaXMsJ2FzeW5jLXNsaWNlcycpO30KLVRocmVhZC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5FdmVudENvbnRhaW5lci5wcm90b3R5cGUsZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMucGFyZW50Lm1vZGVsO30sZ2V0IHN0YWJsZUlkKCl7cmV0dXJuIHRoaXMucGFyZW50LnN0YWJsZUlkKycuJyt0aGlzLnRpZDt9LGNvbXBhcmVUbyh0aGF0KXtyZXR1cm4gVGhyZWFkLmNvbXBhcmUodGhpcyx0aGF0KTt9LCpjaGlsZEV2ZW50Q29udGFpbmVycygpe2lmKHRoaXMuc2xpY2VHcm91cC5sZW5ndGgpe3lpZWxkIHRoaXMuc2xpY2VHcm91cDt9Ci1pZih0aGlzLmtlcm5lbFNsaWNlR3JvdXAubGVuZ3RoKXt5aWVsZCB0aGlzLmtlcm5lbFNsaWNlR3JvdXA7fQotaWYodGhpcy5hc3luY1NsaWNlR3JvdXAubGVuZ3RoKXt5aWVsZCB0aGlzLmFzeW5jU2xpY2VHcm91cDt9fSwqY2hpbGRFdmVudHMoKXtpZih0aGlzLnRpbWVTbGljZXMpe3lpZWxkKnRoaXMudGltZVNsaWNlczt9fSxpdGVyYXRlQWxsUGVyc2lzdGFibGVPYmplY3RzKGNiKXtjYih0aGlzKTtpZih0aGlzLnNsaWNlR3JvdXAubGVuZ3RoKXtjYih0aGlzLnNsaWNlR3JvdXApO30KLXRoaXMuYXN5bmNTbGljZUdyb3VwLnZpZXdTdWJHcm91cHMuZm9yRWFjaChjYik7fSxzaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCl7dGhpcy5zbGljZUdyb3VwLnNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KTtpZih0aGlzLnRpbWVTbGljZXMpe2ZvcihsZXQgaT0wO2k8dGhpcy50aW1lU2xpY2VzLmxlbmd0aDtpKyspe2NvbnN0IHNsaWNlPXRoaXMudGltZVNsaWNlc1tpXTtzbGljZS5zdGFydCs9YW1vdW50O319Ci10aGlzLmtlcm5lbFNsaWNlR3JvdXAuc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpO3RoaXMuYXN5bmNTbGljZUdyb3VwLnNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KTt9LGdldCBpc0VtcHR5KCl7aWYodGhpcy5zbGljZUdyb3VwLmxlbmd0aClyZXR1cm4gZmFsc2U7aWYodGhpcy5zbGljZUdyb3VwLm9wZW5TbGljZUNvdW50KXJldHVybiBmYWxzZTtpZih0aGlzLnRpbWVTbGljZXMmJnRoaXMudGltZVNsaWNlcy5sZW5ndGgpcmV0dXJuIGZhbHNlO2lmKHRoaXMua2VybmVsU2xpY2VHcm91cC5sZW5ndGgpcmV0dXJuIGZhbHNlO2lmKHRoaXMuYXN5bmNTbGljZUdyb3VwLmxlbmd0aClyZXR1cm4gZmFsc2U7aWYodGhpcy5zYW1wbGVzXy5sZW5ndGgpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlO30sdXBkYXRlQm91bmRzKCl7dGhpcy5ib3VuZHMucmVzZXQoKTt0aGlzLnNsaWNlR3JvdXAudXBkYXRlQm91bmRzKCk7dGhpcy5ib3VuZHMuYWRkUmFuZ2UodGhpcy5zbGljZUdyb3VwLmJvdW5kcyk7dGhpcy5rZXJuZWxTbGljZUdyb3VwLnVwZGF0ZUJvdW5kcygpO3RoaXMuYm91bmRzLmFkZFJhbmdlKHRoaXMua2VybmVsU2xpY2VHcm91cC5ib3VuZHMpO3RoaXMuYXN5bmNTbGljZUdyb3VwLnVwZGF0ZUJvdW5kcygpO3RoaXMuYm91bmRzLmFkZFJhbmdlKHRoaXMuYXN5bmNTbGljZUdyb3VwLmJvdW5kcyk7aWYodGhpcy50aW1lU2xpY2VzJiZ0aGlzLnRpbWVTbGljZXMubGVuZ3RoKXt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLnRpbWVTbGljZXNbMF0uc3RhcnQpO3RoaXMuYm91bmRzLmFkZFZhbHVlKHRoaXMudGltZVNsaWNlc1t0aGlzLnRpbWVTbGljZXMubGVuZ3RoLTFdLmVuZCk7fQotaWYodGhpcy5zYW1wbGVzXyYmdGhpcy5zYW1wbGVzXy5sZW5ndGgpe3RoaXMuYm91bmRzLmFkZFZhbHVlKHRoaXMuc2FtcGxlc19bMF0uc3RhcnQpO3RoaXMuYm91bmRzLmFkZFZhbHVlKHRoaXMuc2FtcGxlc19bdGhpcy5zYW1wbGVzXy5sZW5ndGgtMV0uZW5kKTt9fSxhZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KXtmb3IobGV0IGk9MDtpPHRoaXMuc2xpY2VHcm91cC5sZW5ndGg7aSsrKXtjYXRlZ29yaWVzRGljdFt0aGlzLnNsaWNlR3JvdXAuc2xpY2VzW2ldLmNhdGVnb3J5XT10cnVlO30KLWZvcihsZXQgaT0wO2k8dGhpcy5rZXJuZWxTbGljZUdyb3VwLmxlbmd0aDtpKyspe2NhdGVnb3JpZXNEaWN0W3RoaXMua2VybmVsU2xpY2VHcm91cC5zbGljZXNbaV0uY2F0ZWdvcnldPXRydWU7fQotZm9yKGxldCBpPTA7aTx0aGlzLmFzeW5jU2xpY2VHcm91cC5sZW5ndGg7aSsrKXtjYXRlZ29yaWVzRGljdFt0aGlzLmFzeW5jU2xpY2VHcm91cC5zbGljZXNbaV0uY2F0ZWdvcnldPXRydWU7fQotaWYodGhpcy5zYW1wbGVzXyl7Zm9yKGxldCBpPTA7aTx0aGlzLnNhbXBsZXNfLmxlbmd0aDtpKyspe2NhdGVnb3JpZXNEaWN0W3RoaXMuc2FtcGxlc19baV0uY2F0ZWdvcnldPXRydWU7fX19LGF1dG9DbG9zZU9wZW5TbGljZXMoKXt0aGlzLnNsaWNlR3JvdXAuYXV0b0Nsb3NlT3BlblNsaWNlcygpO3RoaXMuYXN5bmNTbGljZUdyb3VwLmF1dG9DbG9zZU9wZW5TbGljZXMoKTt0aGlzLmtlcm5lbFNsaWNlR3JvdXAuYXV0b0Nsb3NlT3BlblNsaWNlcygpO30sbWVyZ2VLZXJuZWxXaXRoVXNlcmxhbmQoKXtpZih0aGlzLmtlcm5lbFNsaWNlR3JvdXAubGVuZ3RoPjApe2NvbnN0IG5ld1NsaWNlcz1TbGljZUdyb3VwLm1lcmdlKHRoaXMuc2xpY2VHcm91cCx0aGlzLmtlcm5lbFNsaWNlR3JvdXApO3RoaXMuc2xpY2VHcm91cC5zbGljZXM9bmV3U2xpY2VzLnNsaWNlczt0aGlzLmtlcm5lbFNsaWNlR3JvdXA9bmV3IFNsaWNlR3JvdXAodGhpcyk7dGhpcy51cGRhdGVCb3VuZHMoKTt9fSxjcmVhdGVTdWJTbGljZXMoKXt0aGlzLnNsaWNlR3JvdXAuY3JlYXRlU3ViU2xpY2VzKCk7dGhpcy5zYW1wbGVzXz10aGlzLnBhcmVudC5tb2RlbC5zYW1wbGVzLmZpbHRlcihzYW1wbGU9PnNhbXBsZS50aHJlYWQ9PT10aGlzKTt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuIHRoaXMubmFtZXx8dGhpcy50aWQ7fSxnZXQgdXNlckZyaWVuZGx5RGV0YWlscygpe3JldHVybid0aWQ6ICcrdGhpcy50aWQrCi0odGhpcy5uYW1lPycsIG5hbWU6ICcrdGhpcy5uYW1lOicnKTt9LGdldFNldHRpbmdzS2V5KCl7aWYoIXRoaXMubmFtZSlyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHBhcmVudEtleT10aGlzLnBhcmVudC5nZXRTZXR0aW5nc0tleSgpO2lmKCFwYXJlbnRLZXkpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gcGFyZW50S2V5KycuJyt0aGlzLm5hbWU7fSxnZXRQcm9jZXNzKCl7cmV0dXJuIHRoaXMucGFyZW50O30saW5kZXhPZlRpbWVTbGljZSh0aW1lU2xpY2Upe2NvbnN0IGk9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMudGltZVNsaWNlcyxmdW5jdGlvbihzbGljZSl7cmV0dXJuIHNsaWNlLnN0YXJ0O30sdGltZVNsaWNlLnN0YXJ0KTtpZih0aGlzLnRpbWVTbGljZXNbaV0hPT10aW1lU2xpY2UpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gaTt9LGdldENwdVN0YXRzRm9yUmFuZ2UocmFuZ2Upe2NvbnN0IHN0YXRzPXt9O3N0YXRzLnRvdGFsPTA7aWYoIXRoaXMudGltZVNsaWNlcylyZXR1cm4gc3RhdHM7ZnVuY3Rpb24gYWRkU3RhdHNGb3JTbGljZSh0aHJlYWRUaW1lU2xpY2Upe2NvbnN0IGZyZXFSYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UodGhyZWFkVGltZVNsaWNlLnN0YXJ0LHRocmVhZFRpbWVTbGljZS5lbmQpO2NvbnN0IGludGVyc2VjdGlvbj1mcmVxUmFuZ2UuZmluZEludGVyc2VjdGlvbihyYW5nZSk7aWYodGhyZWFkVGltZVNsaWNlLnNjaGVkdWxpbmdTdGF0ZT09PXRyLm1vZGVsLlNDSEVEVUxJTkdfU1RBVEUuUlVOTklORyl7Y29uc3QgY3B1PXRocmVhZFRpbWVTbGljZS5jcHVPbldoaWNoVGhyZWFkV2FzUnVubmluZztpZighKGNwdS5jcHVOdW1iZXIgaW4gc3RhdHMpKXtzdGF0c1tjcHUuY3B1TnVtYmVyXT0wO30KLXN0YXRzW2NwdS5jcHVOdW1iZXJdKz1pbnRlcnNlY3Rpb24uZHVyYXRpb247c3RhdHMudG90YWwrPWludGVyc2VjdGlvbi5kdXJhdGlvbjt9fQotdHIuYi5pdGVyYXRlT3ZlckludGVyc2VjdGluZ0ludGVydmFscyh0aGlzLnRpbWVTbGljZXMsZnVuY3Rpb24oeCl7cmV0dXJuIHguc3RhcnQ7fSxmdW5jdGlvbih4KXtyZXR1cm4geC5lbmQ7fSxyYW5nZS5taW4scmFuZ2UubWF4LGFkZFN0YXRzRm9yU2xpY2UpO3JldHVybiBzdGF0czt9LGdldFNjaGVkdWxpbmdTdGF0c0ZvclJhbmdlKHN0YXJ0LGVuZCl7Y29uc3Qgc3RhdHM9e307aWYoIXRoaXMudGltZVNsaWNlcylyZXR1cm4gc3RhdHM7ZnVuY3Rpb24gYWRkU3RhdHNGb3JTbGljZSh0aHJlYWRUaW1lU2xpY2Upe2NvbnN0IG92ZXJsYXBTdGFydD1NYXRoLm1heCh0aHJlYWRUaW1lU2xpY2Uuc3RhcnQsc3RhcnQpO2NvbnN0IG92ZXJsYXBFbmQ9TWF0aC5taW4odGhyZWFkVGltZVNsaWNlLmVuZCxlbmQpO2NvbnN0IHNjaGVkdWxpbmdTdGF0ZT10aHJlYWRUaW1lU2xpY2Uuc2NoZWR1bGluZ1N0YXRlO2lmKCEoc2NoZWR1bGluZ1N0YXRlIGluIHN0YXRzKSlzdGF0c1tzY2hlZHVsaW5nU3RhdGVdPTA7c3RhdHNbc2NoZWR1bGluZ1N0YXRlXSs9b3ZlcmxhcEVuZC1vdmVybGFwU3RhcnQ7fQotdHIuYi5pdGVyYXRlT3ZlckludGVyc2VjdGluZ0ludGVydmFscyh0aGlzLnRpbWVTbGljZXMsZnVuY3Rpb24oeCl7cmV0dXJuIHguc3RhcnQ7fSxmdW5jdGlvbih4KXtyZXR1cm4geC5lbmQ7fSxzdGFydCxlbmQsYWRkU3RhdHNGb3JTbGljZSk7cmV0dXJuIHN0YXRzO30sZ2V0IHNhbXBsZXMoKXtyZXR1cm4gdGhpcy5zYW1wbGVzXzt9LGdldCB0eXBlKCl7Y29uc3QgcmU9L15bXjAtOXxcL10rLztjb25zdCBtYXRjaGVzPXJlLmV4ZWModGhpcy5uYW1lKTtpZihtYXRjaGVzJiZtYXRjaGVzWzBdKXJldHVybiBtYXRjaGVzWzBdO3Rocm93IG5ldyBFcnJvcignQ291bGQgbm90IGRldGVybWluZSB0aHJlYWQgdHlwZSBmb3IgdGhyZWFkIG5hbWUgJysKLXRoaXMubmFtZSk7fX07VGhyZWFkLmNvbXBhcmU9ZnVuY3Rpb24oeCx5KXtsZXQgdG1wPXgucGFyZW50LmNvbXBhcmVUbyh5LnBhcmVudCk7aWYodG1wKXJldHVybiB0bXA7dG1wPXguc29ydEluZGV4LXkuc29ydEluZGV4O2lmKHRtcClyZXR1cm4gdG1wO2lmKHgubmFtZSE9PXVuZGVmaW5lZCl7aWYoeS5uYW1lIT09dW5kZWZpbmVkKXt0bXA9eC5uYW1lLmxvY2FsZUNvbXBhcmUoeS5uYW1lKTt9ZWxzZXt0bXA9LTE7fX1lbHNlIGlmKHkubmFtZSE9PXVuZGVmaW5lZCl7dG1wPTE7fQotaWYodG1wKXJldHVybiB0bXA7cmV0dXJuIHgudGlkLXkudGlkO307cmV0dXJue1RocmVhZCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgVGhyZWFkPXRyLm1vZGVsLlRocmVhZDtjb25zdCBDb3VudGVyPXRyLm1vZGVsLkNvdW50ZXI7ZnVuY3Rpb24gUHJvY2Vzc0Jhc2UobW9kZWwpe2lmKCFtb2RlbCl7dGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgYSBtb2RlbCcpO30KLXRyLm1vZGVsLkV2ZW50Q29udGFpbmVyLmNhbGwodGhpcyk7dGhpcy5tb2RlbD1tb2RlbDt0aGlzLnRocmVhZHM9e307dGhpcy5jb3VudGVycz17fTt0aGlzLm9iamVjdHM9bmV3IHRyLm1vZGVsLk9iamVjdENvbGxlY3Rpb24odGhpcyk7dGhpcy5zb3J0SW5kZXg9MDt9Ci1Qcm9jZXNzQmFzZS5jb21wYXJlPWZ1bmN0aW9uKHgseSl7cmV0dXJuIHguc29ydEluZGV4LXkuc29ydEluZGV4O307UHJvY2Vzc0Jhc2UucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuRXZlbnRDb250YWluZXIucHJvdG90eXBlLGdldCBzdGFibGVJZCgpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSwqY2hpbGRFdmVudENvbnRhaW5lcnMoKXt5aWVsZCpPYmplY3QudmFsdWVzKHRoaXMudGhyZWFkcyk7eWllbGQqT2JqZWN0LnZhbHVlcyh0aGlzLmNvdW50ZXJzKTt5aWVsZCB0aGlzLm9iamVjdHM7fSxpdGVyYXRlQWxsUGVyc2lzdGFibGVPYmplY3RzKGNiKXtjYih0aGlzKTtmb3IoY29uc3QgdGlkIGluIHRoaXMudGhyZWFkcyl7dGhpcy50aHJlYWRzW3RpZF0uaXRlcmF0ZUFsbFBlcnNpc3RhYmxlT2JqZWN0cyhjYik7fX0sZ2V0IG51bVRocmVhZHMoKXtsZXQgbj0wO2Zvcihjb25zdCBwIGluIHRoaXMudGhyZWFkcyl7bisrO30KLXJldHVybiBuO30sc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpe2Zvcihjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkRXZlbnRDb250YWluZXJzKCkpe2NoaWxkLnNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KTt9fSxhdXRvQ2xvc2VPcGVuU2xpY2VzKCl7Zm9yKGNvbnN0IHRpZCBpbiB0aGlzLnRocmVhZHMpe2NvbnN0IHRocmVhZD10aGlzLnRocmVhZHNbdGlkXTt0aHJlYWQuYXV0b0Nsb3NlT3BlblNsaWNlcygpO319LGF1dG9EZWxldGVPYmplY3RzKG1heFRpbWVzdGFtcCl7dGhpcy5vYmplY3RzLmF1dG9EZWxldGVPYmplY3RzKG1heFRpbWVzdGFtcCk7fSxwcmVJbml0aWFsaXplT2JqZWN0cygpe3RoaXMub2JqZWN0cy5wcmVJbml0aWFsaXplQWxsT2JqZWN0cygpO30saW5pdGlhbGl6ZU9iamVjdHMoKXt0aGlzLm9iamVjdHMuaW5pdGlhbGl6ZUFsbE9iamVjdHMoKTt9LG1lcmdlS2VybmVsV2l0aFVzZXJsYW5kKCl7Zm9yKGNvbnN0IHRpZCBpbiB0aGlzLnRocmVhZHMpe2NvbnN0IHRocmVhZD10aGlzLnRocmVhZHNbdGlkXTt0aHJlYWQubWVyZ2VLZXJuZWxXaXRoVXNlcmxhbmQoKTt9fSx1cGRhdGVCb3VuZHMoKXt0aGlzLmJvdW5kcy5yZXNldCgpO2Zvcihjb25zdCB0aWQgaW4gdGhpcy50aHJlYWRzKXt0aGlzLnRocmVhZHNbdGlkXS51cGRhdGVCb3VuZHMoKTt0aGlzLmJvdW5kcy5hZGRSYW5nZSh0aGlzLnRocmVhZHNbdGlkXS5ib3VuZHMpO30KLWZvcihjb25zdCBpZCBpbiB0aGlzLmNvdW50ZXJzKXt0aGlzLmNvdW50ZXJzW2lkXS51cGRhdGVCb3VuZHMoKTt0aGlzLmJvdW5kcy5hZGRSYW5nZSh0aGlzLmNvdW50ZXJzW2lkXS5ib3VuZHMpO30KLXRoaXMub2JqZWN0cy51cGRhdGVCb3VuZHMoKTt0aGlzLmJvdW5kcy5hZGRSYW5nZSh0aGlzLm9iamVjdHMuYm91bmRzKTt9LGFkZENhdGVnb3JpZXNUb0RpY3QoY2F0ZWdvcmllc0RpY3Qpe2Zvcihjb25zdCB0aWQgaW4gdGhpcy50aHJlYWRzKXt0aGlzLnRocmVhZHNbdGlkXS5hZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KTt9Ci1mb3IoY29uc3QgaWQgaW4gdGhpcy5jb3VudGVycyl7Y2F0ZWdvcmllc0RpY3RbdGhpcy5jb3VudGVyc1tpZF0uY2F0ZWdvcnldPXRydWU7fQotdGhpcy5vYmplY3RzLmFkZENhdGVnb3JpZXNUb0RpY3QoY2F0ZWdvcmllc0RpY3QpO30sZmluZEFsbFRocmVhZHNNYXRjaGluZyhwcmVkaWNhdGUsb3B0X3RoaXMpe2NvbnN0IHRocmVhZHM9W107Zm9yKGNvbnN0IHRpZCBpbiB0aGlzLnRocmVhZHMpe2NvbnN0IHRocmVhZD10aGlzLnRocmVhZHNbdGlkXTtpZihwcmVkaWNhdGUuY2FsbChvcHRfdGhpcyx0aHJlYWQpKXt0aHJlYWRzLnB1c2godGhyZWFkKTt9fQotcmV0dXJuIHRocmVhZHM7fSxmaW5kQWxsVGhyZWFkc05hbWVkKG5hbWUpe2NvbnN0IHRocmVhZHM9dGhpcy5maW5kQWxsVGhyZWFkc01hdGNoaW5nKGZ1bmN0aW9uKHRocmVhZCl7aWYoIXRocmVhZC5uYW1lKXJldHVybiBmYWxzZTtyZXR1cm4gdGhyZWFkLm5hbWU9PT1uYW1lO30pO3JldHVybiB0aHJlYWRzO30sZmluZEF0TW9zdE9uZVRocmVhZE5hbWVkKG5hbWUpe2NvbnN0IHRocmVhZHM9dGhpcy5maW5kQWxsVGhyZWFkc05hbWVkKG5hbWUpO2lmKHRocmVhZHMubGVuZ3RoPT09MClyZXR1cm4gdW5kZWZpbmVkO2lmKHRocmVhZHMubGVuZ3RoPjEpe3Rocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgbm8gbW9yZSB0aGFuIG9uZSAnK25hbWUpO30KLXJldHVybiB0aHJlYWRzWzBdO30scHJ1bmVFbXB0eUNvbnRhaW5lcnMoKXtjb25zdCB0aHJlYWRzVG9LZWVwPXt9O2Zvcihjb25zdCB0aWQgaW4gdGhpcy50aHJlYWRzKXtjb25zdCB0aHJlYWQ9dGhpcy50aHJlYWRzW3RpZF07aWYoIXRocmVhZC5pc0VtcHR5KXt0aHJlYWRzVG9LZWVwW3RpZF09dGhyZWFkO319Ci10aGlzLnRocmVhZHM9dGhyZWFkc1RvS2VlcDt9LGdldFRocmVhZCh0aWQpe3JldHVybiB0aGlzLnRocmVhZHNbdGlkXTt9LGdldE9yQ3JlYXRlVGhyZWFkKHRpZCl7aWYoIXRoaXMudGhyZWFkc1t0aWRdKXt0aGlzLnRocmVhZHNbdGlkXT1uZXcgVGhyZWFkKHRoaXMsdGlkKTt9Ci1yZXR1cm4gdGhpcy50aHJlYWRzW3RpZF07fSxnZXRPckNyZWF0ZUNvdW50ZXIoY2F0LG5hbWUpe2NvbnN0IGlkPWNhdCsnLicrbmFtZTtpZighdGhpcy5jb3VudGVyc1tpZF0pe3RoaXMuY291bnRlcnNbaWRdPW5ldyBDb3VudGVyKHRoaXMsaWQsY2F0LG5hbWUpO30KLXJldHVybiB0aGlzLmNvdW50ZXJzW2lkXTt9LGdldFNldHRpbmdzS2V5KCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGNyZWF0ZVN1YlNsaWNlcygpe2Zvcihjb25zdCB0aWQgaW4gdGhpcy50aHJlYWRzKXt0aGlzLnRocmVhZHNbdGlkXS5jcmVhdGVTdWJTbGljZXMoKTt9fX07cmV0dXJue1Byb2Nlc3NCYXNlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IENvdW50ZXI9dHIubW9kZWwuQ291bnRlcjtjb25zdCBDcHVTbGljZT10ci5tb2RlbC5DcHVTbGljZTtmdW5jdGlvbiBDcHUoa2VybmVsLG51bWJlcil7aWYoa2VybmVsPT09dW5kZWZpbmVkfHxudW1iZXI9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudHMnKTt9Ci10aGlzLmtlcm5lbD1rZXJuZWw7dGhpcy5jcHVOdW1iZXI9bnVtYmVyO3RoaXMuc2xpY2VzPVtdO3RoaXMuY291bnRlcnM9e307dGhpcy5ib3VuZHNfPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTt0aGlzLnNhbXBsZXNfPXVuZGVmaW5lZDt0aGlzLmxhc3RBY3RpdmVUaW1lc3RhbXBfPXVuZGVmaW5lZDt0aGlzLmxhc3RBY3RpdmVUaHJlYWRfPXVuZGVmaW5lZDt0aGlzLmxhc3RBY3RpdmVOYW1lXz11bmRlZmluZWQ7dGhpcy5sYXN0QWN0aXZlQXJnc189dW5kZWZpbmVkO30KLUNwdS5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5FdmVudENvbnRhaW5lci5wcm90b3R5cGUsZ2V0IHNhbXBsZXMoKXtyZXR1cm4gdGhpcy5zYW1wbGVzXzt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ0NQVSAnK3RoaXMuY3B1TnVtYmVyO30sKmZpbmRUb3Btb3N0U2xpY2VzSW5UaGlzQ29udGFpbmVyKGV2ZW50UHJlZGljYXRlLG9wdF90aGlzKXtmb3IoY29uc3QgcyBvZiB0aGlzLnNsaWNlcyl7eWllbGQqcy5maW5kVG9wbW9zdFNsaWNlc1JlbGF0aXZlVG9UaGlzU2xpY2UoZXZlbnRQcmVkaWNhdGUsb3B0X3RoaXMpO319LCpjaGlsZEV2ZW50cygpe3lpZWxkKnRoaXMuc2xpY2VzO2lmKHRoaXMuc2FtcGxlc18pe3lpZWxkKnRoaXMuc2FtcGxlc187fX0sKmNoaWxkRXZlbnRDb250YWluZXJzKCl7eWllbGQqT2JqZWN0LnZhbHVlcyh0aGlzLmNvdW50ZXJzKTt9LGdldE9yQ3JlYXRlQ291bnRlcihjYXQsbmFtZSl7Y29uc3QgaWQ9Y2F0KycuJytuYW1lO2lmKCF0aGlzLmNvdW50ZXJzW2lkXSl7dGhpcy5jb3VudGVyc1tpZF09bmV3IENvdW50ZXIodGhpcyxpZCxjYXQsbmFtZSk7fQotcmV0dXJuIHRoaXMuY291bnRlcnNbaWRdO30sZ2V0Q291bnRlcihjYXQsbmFtZSl7Y29uc3QgaWQ9Y2F0KycuJytuYW1lO2lmKCF0aGlzLmNvdW50ZXJzW2lkXSl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1yZXR1cm4gdGhpcy5jb3VudGVyc1tpZF07fSxzaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCl7Zm9yKGxldCBzST0wO3NJPHRoaXMuc2xpY2VzLmxlbmd0aDtzSSsrKXt0aGlzLnNsaWNlc1tzSV0uc3RhcnQ9KHRoaXMuc2xpY2VzW3NJXS5zdGFydCthbW91bnQpO30KLWZvcihjb25zdCBpZCBpbiB0aGlzLmNvdW50ZXJzKXt0aGlzLmNvdW50ZXJzW2lkXS5zaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCk7fX0sdXBkYXRlQm91bmRzKCl7dGhpcy5ib3VuZHNfLnJlc2V0KCk7aWYodGhpcy5zbGljZXMubGVuZ3RoKXt0aGlzLmJvdW5kc18uYWRkVmFsdWUodGhpcy5zbGljZXNbMF0uc3RhcnQpO3RoaXMuYm91bmRzXy5hZGRWYWx1ZSh0aGlzLnNsaWNlc1t0aGlzLnNsaWNlcy5sZW5ndGgtMV0uZW5kKTt9Ci1mb3IoY29uc3QgaWQgaW4gdGhpcy5jb3VudGVycyl7dGhpcy5jb3VudGVyc1tpZF0udXBkYXRlQm91bmRzKCk7dGhpcy5ib3VuZHNfLmFkZFJhbmdlKHRoaXMuY291bnRlcnNbaWRdLmJvdW5kcyk7fQotaWYodGhpcy5zYW1wbGVzXyYmdGhpcy5zYW1wbGVzXy5sZW5ndGgpe3RoaXMuYm91bmRzXy5hZGRWYWx1ZSh0aGlzLnNhbXBsZXNfWzBdLnN0YXJ0KTt0aGlzLmJvdW5kc18uYWRkVmFsdWUodGhpcy5zYW1wbGVzX1t0aGlzLnNhbXBsZXNfLmxlbmd0aC0xXS5lbmQpO319LGNyZWF0ZVN1YlNsaWNlcygpe3RoaXMuc2FtcGxlc189dGhpcy5rZXJuZWwubW9kZWwuc2FtcGxlcy5maWx0ZXIoZnVuY3Rpb24oc2FtcGxlKXtyZXR1cm4gc2FtcGxlLmNwdT09PXRoaXM7fSx0aGlzKTt9LGFkZENhdGVnb3JpZXNUb0RpY3QoY2F0ZWdvcmllc0RpY3Qpe2ZvcihsZXQgaT0wO2k8dGhpcy5zbGljZXMubGVuZ3RoO2krKyl7Y2F0ZWdvcmllc0RpY3RbdGhpcy5zbGljZXNbaV0uY2F0ZWdvcnldPXRydWU7fQotZm9yKGNvbnN0IGlkIGluIHRoaXMuY291bnRlcnMpe2NhdGVnb3JpZXNEaWN0W3RoaXMuY291bnRlcnNbaWRdLmNhdGVnb3J5XT10cnVlO30KLWZvcihsZXQgaT0wO2k8dGhpcy5zYW1wbGVzXy5sZW5ndGg7aSsrKXtjYXRlZ29yaWVzRGljdFt0aGlzLnNhbXBsZXNfW2ldLmNhdGVnb3J5XT10cnVlO319LGluZGV4T2YoY3B1U2xpY2Upe2NvbnN0IGk9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMuc2xpY2VzLGZ1bmN0aW9uKHNsaWNlKXtyZXR1cm4gc2xpY2Uuc3RhcnQ7fSxjcHVTbGljZS5zdGFydCk7aWYodGhpcy5zbGljZXNbaV0hPT1jcHVTbGljZSlyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBpO30sY2xvc2VBY3RpdmVUaHJlYWQoZW5kVGltZXN0YW1wLGFyZ3Mpe2lmKHRoaXMubGFzdEFjdGl2ZVRocmVhZF89PT11bmRlZmluZWR8fHRoaXMubGFzdEFjdGl2ZVRocmVhZF89PT0wKXtyZXR1cm47fQotaWYoZW5kVGltZXN0YW1wPHRoaXMubGFzdEFjdGl2ZVRpbWVzdGFtcF8pe3Rocm93IG5ldyBFcnJvcignVGhlIGVuZCB0aW1lc3RhbXAgb2YgYSB0aHJlYWQgcnVubmluZyBvbiBDUFUgJysKLXRoaXMuY3B1TnVtYmVyKycgaXMgYmVmb3JlIGl0cyBzdGFydCB0aW1lc3RhbXAuJyk7fQotZm9yKGNvbnN0IGtleSBpbiBhcmdzKXt0aGlzLmxhc3RBY3RpdmVBcmdzX1trZXldPWFyZ3Nba2V5XTt9Ci1jb25zdCBkdXJhdGlvbj1lbmRUaW1lc3RhbXAtdGhpcy5sYXN0QWN0aXZlVGltZXN0YW1wXztjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuQ3B1U2xpY2UoJycsdGhpcy5sYXN0QWN0aXZlTmFtZV8sQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHRoaXMubGFzdEFjdGl2ZU5hbWVfKSx0aGlzLmxhc3RBY3RpdmVUaW1lc3RhbXBfLHRoaXMubGFzdEFjdGl2ZUFyZ3NfLGR1cmF0aW9uKTtzbGljZS5jcHU9dGhpczt0aGlzLnNsaWNlcy5wdXNoKHNsaWNlKTt0aGlzLmxhc3RBY3RpdmVUaW1lc3RhbXBfPXVuZGVmaW5lZDt0aGlzLmxhc3RBY3RpdmVUaHJlYWRfPXVuZGVmaW5lZDt0aGlzLmxhc3RBY3RpdmVOYW1lXz11bmRlZmluZWQ7dGhpcy5sYXN0QWN0aXZlQXJnc189dW5kZWZpbmVkO30sc3dpdGNoQWN0aXZlVGhyZWFkKHRpbWVzdGFtcCxvbGRUaHJlYWRBcmdzLG5ld1RocmVhZElkLG5ld1RocmVhZE5hbWUsbmV3VGhyZWFkQXJncyl7dGhpcy5jbG9zZUFjdGl2ZVRocmVhZCh0aW1lc3RhbXAsb2xkVGhyZWFkQXJncyk7dGhpcy5sYXN0QWN0aXZlVGltZXN0YW1wXz10aW1lc3RhbXA7dGhpcy5sYXN0QWN0aXZlVGhyZWFkXz1uZXdUaHJlYWRJZDt0aGlzLmxhc3RBY3RpdmVOYW1lXz1uZXdUaHJlYWROYW1lO3RoaXMubGFzdEFjdGl2ZUFyZ3NfPW5ld1RocmVhZEFyZ3M7fSxnZXRGcmVxU3RhdHNGb3JSYW5nZShyYW5nZSl7Y29uc3Qgc3RhdHM9e307ZnVuY3Rpb24gYWRkU3RhdHNGb3JGcmVxKGZyZXFTYW1wbGUsaW5kZXgpe2NvbnN0IGZyZXFFbmQ9KGluZGV4PGZyZXFTYW1wbGUuc2VyaWVzXy5sZW5ndGgtMSk/ZnJlcVNhbXBsZS5zZXJpZXNfLnNhbXBsZXNfW2luZGV4KzFdLnRpbWVzdGFtcDpyYW5nZS5tYXg7Y29uc3QgZnJlcVJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShmcmVxU2FtcGxlLnRpbWVzdGFtcCxmcmVxRW5kKTtjb25zdCBpbnRlcnNlY3Rpb249ZnJlcVJhbmdlLmZpbmRJbnRlcnNlY3Rpb24ocmFuZ2UpO2lmKCEoZnJlcVNhbXBsZS52YWx1ZSBpbiBzdGF0cykpe3N0YXRzW2ZyZXFTYW1wbGUudmFsdWVdPTA7fQotc3RhdHNbZnJlcVNhbXBsZS52YWx1ZV0rPWludGVyc2VjdGlvbi5kdXJhdGlvbjt9Ci1jb25zdCBmcmVxQ291bnRlcj10aGlzLmdldENvdW50ZXIoJycsJ0Nsb2NrIEZyZXF1ZW5jeScpO2lmKGZyZXFDb3VudGVyIT09dW5kZWZpbmVkKXtjb25zdCBmcmVxU2VyaWVzPWZyZXFDb3VudGVyLmdldFNlcmllcygwKTtpZighZnJlcVNlcmllcylyZXR1cm47dHIuYi5pdGVyYXRlT3ZlckludGVyc2VjdGluZ0ludGVydmFscyhmcmVxU2VyaWVzLnNhbXBsZXNfLGZ1bmN0aW9uKHgpe3JldHVybiB4LnRpbWVzdGFtcDt9LGZ1bmN0aW9uKHgsaW5kZXgpe2lmKGluZGV4PGZyZXFTZXJpZXMubGVuZ3RoLTEpe3JldHVybiBmcmVxU2VyaWVzLnNhbXBsZXNfW2luZGV4KzFdLnRpbWVzdGFtcDt9Ci1yZXR1cm4gcmFuZ2UubWF4O30scmFuZ2UubWluLHJhbmdlLm1heCxhZGRTdGF0c0ZvckZyZXEpO30KLXJldHVybiBzdGF0czt9fTtDcHUuY29tcGFyZT1mdW5jdGlvbih4LHkpe3JldHVybiB4LmNwdU51bWJlci15LmNwdU51bWJlcjt9O3JldHVybntDcHUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IEV2ZW50PXRyLm1vZGVsLkV2ZW50O2NvbnN0IEV2ZW50UmVnaXN0cnk9dHIubW9kZWwuRXZlbnRSZWdpc3RyeTtmdW5jdGlvbiBQb3dlclNhbXBsZShzZXJpZXMsc3RhcnQscG93ZXJJblcpe0V2ZW50LmNhbGwodGhpcyk7dGhpcy5zZXJpZXNfPXNlcmllczt0aGlzLnN0YXJ0Xz1wYXJzZUZsb2F0KHN0YXJ0KTt0aGlzLnBvd2VySW5XXz1wYXJzZUZsb2F0KHBvd2VySW5XKTt9Ci1Qb3dlclNhbXBsZS5wcm90b3R5cGU9e19fcHJvdG9fXzpFdmVudC5wcm90b3R5cGUsZ2V0IHNlcmllcygpe3JldHVybiB0aGlzLnNlcmllc187fSxnZXQgc3RhcnQoKXtyZXR1cm4gdGhpcy5zdGFydF87fSxzZXQgc3RhcnQodmFsdWUpe3RoaXMuc3RhcnRfPXZhbHVlO30sZ2V0IHBvd2VySW5XKCl7cmV0dXJuIHRoaXMucG93ZXJJbldfO30sc2V0IHBvd2VySW5XKHZhbHVlKXt0aGlzLnBvd2VySW5XXz12YWx1ZTt9LGFkZEJvdW5kc1RvUmFuZ2UocmFuZ2Upe3JhbmdlLmFkZFZhbHVlKHRoaXMuc3RhcnQpO319O0V2ZW50UmVnaXN0cnkucmVnaXN0ZXIoUG93ZXJTYW1wbGUse25hbWU6J3Bvd2VyU2FtcGxlJyxwbHVyYWxOYW1lOidwb3dlclNhbXBsZXMnfSk7cmV0dXJue1Bvd2VyU2FtcGxlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBQb3dlclNhbXBsZT10ci5tb2RlbC5Qb3dlclNhbXBsZTtmdW5jdGlvbiBQb3dlclNlcmllcyhkZXZpY2Upe3RyLm1vZGVsLkV2ZW50Q29udGFpbmVyLmNhbGwodGhpcyk7dGhpcy5kZXZpY2VfPWRldmljZTt0aGlzLnNhbXBsZXNfPVtdO30KLVBvd2VyU2VyaWVzLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLkV2ZW50Q29udGFpbmVyLnByb3RvdHlwZSxnZXQgZGV2aWNlKCl7cmV0dXJuIHRoaXMuZGV2aWNlXzt9LGdldCBzYW1wbGVzKCl7cmV0dXJuIHRoaXMuc2FtcGxlc187fSxnZXQgc3RhYmxlSWQoKXtyZXR1cm4gdGhpcy5kZXZpY2VfLnN0YWJsZUlkKycuUG93ZXJTZXJpZXMnO30sYWRkUG93ZXJTYW1wbGUodHMsdmFsKXtjb25zdCBzYW1wbGU9bmV3IFBvd2VyU2FtcGxlKHRoaXMsdHMsdmFsKTt0aGlzLnNhbXBsZXNfLnB1c2goc2FtcGxlKTtyZXR1cm4gc2FtcGxlO30sZ2V0RW5lcmd5Q29uc3VtZWRJbkooc3RhcnQsZW5kKXtjb25zdCBtZWFzdXJlbWVudFJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShzdGFydCxlbmQpO2xldCBlbmVyZ3lDb25zdW1lZEluSj0wO2xldCBzdGFydEluZGV4PXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheSh0aGlzLnNhbXBsZXMseD0+eC5zdGFydCxzdGFydCktMTtjb25zdCBlbmRJbmRleD10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkodGhpcy5zYW1wbGVzLHg9Pnguc3RhcnQsZW5kKTtpZihzdGFydEluZGV4PDApe3N0YXJ0SW5kZXg9MDt9Ci1mb3IobGV0IGk9c3RhcnRJbmRleDtpPGVuZEluZGV4O2krKyl7Y29uc3Qgc2FtcGxlPXRoaXMuc2FtcGxlc1tpXTtjb25zdCBuZXh0U2FtcGxlPXRoaXMuc2FtcGxlc1tpKzFdO2NvbnN0IHNhbXBsZVJhbmdlPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTtzYW1wbGVSYW5nZS5hZGRWYWx1ZShzYW1wbGUuc3RhcnQpO3NhbXBsZVJhbmdlLmFkZFZhbHVlKG5leHRTYW1wbGU/bmV4dFNhbXBsZS5zdGFydDpzYW1wbGUuc3RhcnQpO2NvbnN0IGludGVyc2VjdGlvblJhbmdlSW5Ncz1tZWFzdXJlbWVudFJhbmdlLmZpbmRJbnRlcnNlY3Rpb24oc2FtcGxlUmFuZ2UpO2NvbnN0IGR1cmF0aW9uSW5TPXRyLmIuY29udmVydFVuaXQoaW50ZXJzZWN0aW9uUmFuZ2VJbk1zLmR1cmF0aW9uLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUxMSSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTk9ORSk7ZW5lcmd5Q29uc3VtZWRJbkorPWR1cmF0aW9uSW5TKnNhbXBsZS5wb3dlckluVzt9Ci1yZXR1cm4gZW5lcmd5Q29uc3VtZWRJbko7fSxnZXRTYW1wbGVzV2l0aGluUmFuZ2Uoc3RhcnQsZW5kKXtjb25zdCBzdGFydEluZGV4PXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheSh0aGlzLnNhbXBsZXMseD0+eC5zdGFydCxzdGFydCk7Y29uc3QgZW5kSW5kZXg9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMuc2FtcGxlcyx4PT54LnN0YXJ0LGVuZCk7cmV0dXJuIHRoaXMuc2FtcGxlcy5zbGljZShzdGFydEluZGV4LGVuZEluZGV4KTt9LHNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KXtmb3IobGV0IGk9MDtpPHRoaXMuc2FtcGxlc18ubGVuZ3RoOysraSl7dGhpcy5zYW1wbGVzX1tpXS5zdGFydCs9YW1vdW50O319LHVwZGF0ZUJvdW5kcygpe3RoaXMuYm91bmRzLnJlc2V0KCk7aWYodGhpcy5zYW1wbGVzXy5sZW5ndGg9PT0wKXJldHVybjt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLnNhbXBsZXNfWzBdLnN0YXJ0KTt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLnNhbXBsZXNfW3RoaXMuc2FtcGxlc18ubGVuZ3RoLTFdLnN0YXJ0KTt9LCpjaGlsZEV2ZW50cygpe3lpZWxkKnRoaXMuc2FtcGxlc187fSx9O3JldHVybntQb3dlclNlcmllcyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRGV2aWNlKG1vZGVsKXtpZighbW9kZWwpe3Rocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGEgbW9kZWwuJyk7fQotdHIubW9kZWwuRXZlbnRDb250YWluZXIuY2FsbCh0aGlzKTt0aGlzLnBvd2VyU2VyaWVzXz11bmRlZmluZWQ7dGhpcy5jcHVVc2FnZVNlcmllc189dW5kZWZpbmVkO3RoaXMudlN5bmNUaW1lc3RhbXBzXz1bXTt9Ci1EZXZpY2UuY29tcGFyZT1mdW5jdGlvbih4LHkpe3JldHVybiB4Lmd1aWQteS5ndWlkO307RGV2aWNlLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLkV2ZW50Q29udGFpbmVyLnByb3RvdHlwZSxjb21wYXJlVG8odGhhdCl7cmV0dXJuIERldmljZS5jb21wYXJlKHRoaXMsdGhhdCk7fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybidEZXZpY2UnO30sZ2V0IHVzZXJGcmllbmRseURldGFpbHMoKXtyZXR1cm4nRGV2aWNlJzt9LGdldCBzdGFibGVJZCgpe3JldHVybidEZXZpY2UnO30sZ2V0U2V0dGluZ3NLZXkoKXtyZXR1cm4nZGV2aWNlJzt9LGdldCBwb3dlclNlcmllcygpe3JldHVybiB0aGlzLnBvd2VyU2VyaWVzXzt9LHNldCBwb3dlclNlcmllcyhwb3dlclNlcmllcyl7dGhpcy5wb3dlclNlcmllc189cG93ZXJTZXJpZXM7fSxnZXQgY3B1VXNhZ2VTZXJpZXMoKXtyZXR1cm4gdGhpcy5jcHVVc2FnZVNlcmllc187fSxzZXQgY3B1VXNhZ2VTZXJpZXMoY3B1VXNhZ2VTZXJpZXMpe3RoaXMuY3B1VXNhZ2VTZXJpZXNfPWNwdVVzYWdlU2VyaWVzO30sZ2V0IHZTeW5jVGltZXN0YW1wcygpe3JldHVybiB0aGlzLnZTeW5jVGltZXN0YW1wc187fSxzZXQgdlN5bmNUaW1lc3RhbXBzKHZhbHVlKXt0aGlzLnZTeW5jVGltZXN0YW1wc189dmFsdWU7fSx1cGRhdGVCb3VuZHMoKXt0aGlzLmJvdW5kcy5yZXNldCgpO2Zvcihjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkRXZlbnRDb250YWluZXJzKCkpe2NoaWxkLnVwZGF0ZUJvdW5kcygpO3RoaXMuYm91bmRzLmFkZFJhbmdlKGNoaWxkLmJvdW5kcyk7fX0sc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpe2Zvcihjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkRXZlbnRDb250YWluZXJzKCkpe2NoaWxkLnNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KTt9Ci1mb3IobGV0IGk9MDtpPHRoaXMudlN5bmNUaW1lc3RhbXBzXy5sZW5ndGg7aSsrKXt0aGlzLnZTeW5jVGltZXN0YW1wc19baV0rPWFtb3VudDt9fSxhZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KXt9LCpjaGlsZEV2ZW50Q29udGFpbmVycygpe2lmKHRoaXMucG93ZXJTZXJpZXNfKXt5aWVsZCB0aGlzLnBvd2VyU2VyaWVzXzt9Ci1pZih0aGlzLmNwdVVzYWdlU2VyaWVzXyl7eWllbGQgdGhpcy5jcHVVc2FnZVNlcmllc187fX19O3JldHVybntEZXZpY2UsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEZsb3dFdmVudChjYXRlZ29yeSxpZCx0aXRsZSxjb2xvcklkLHN0YXJ0LGFyZ3Msb3B0X2R1cmF0aW9uKXt0ci5tb2RlbC5UaW1lZEV2ZW50LmNhbGwodGhpcyxzdGFydCk7dGhpcy5jYXRlZ29yeT1jYXRlZ29yeXx8Jyc7dGhpcy50aXRsZT10aXRsZTt0aGlzLmNvbG9ySWQ9Y29sb3JJZDt0aGlzLnN0YXJ0PXN0YXJ0O3RoaXMuYXJncz1hcmdzO3RoaXMuaWQ9aWQ7dGhpcy5zdGFydFNsaWNlPXVuZGVmaW5lZDt0aGlzLmVuZFNsaWNlPXVuZGVmaW5lZDt0aGlzLnN0YXJ0U3RhY2tGcmFtZT11bmRlZmluZWQ7dGhpcy5lbmRTdGFja0ZyYW1lPXVuZGVmaW5lZDtpZihvcHRfZHVyYXRpb24hPT11bmRlZmluZWQpe3RoaXMuZHVyYXRpb249b3B0X2R1cmF0aW9uO319Ci1GbG93RXZlbnQucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuVGltZWRFdmVudC5wcm90b3R5cGUsZ2V0IHVzZXJGcmllbmRseU5hbWUoKXtyZXR1cm4nRmxvdyBldmVudCBuYW1lZCAnK3RoaXMudGl0bGUrJyBhdCAnKwotdHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLmZvcm1hdCh0aGlzLnRpbWVzdGFtcCk7fX07dHIubW9kZWwuRXZlbnRSZWdpc3RyeS5yZWdpc3RlcihGbG93RXZlbnQse25hbWU6J2Zsb3dFdmVudCcscGx1cmFsTmFtZTonZmxvd0V2ZW50cyd9KTtyZXR1cm57Rmxvd0V2ZW50LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBDb250YWluZXJNZW1vcnlEdW1wKHN0YXJ0KXt0ci5tb2RlbC5UaW1lZEV2ZW50LmNhbGwodGhpcyxzdGFydCk7dGhpcy5sZXZlbE9mRGV0YWlsPXVuZGVmaW5lZDt0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzXz11bmRlZmluZWQ7dGhpcy5tZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWVfPXVuZGVmaW5lZDt9Ci1Db250YWluZXJNZW1vcnlEdW1wLkxldmVsT2ZEZXRhaWw9e0JBQ0tHUk9VTkQ6MCxMSUdIVDoxLERFVEFJTEVEOjJ9O0NvbnRhaW5lck1lbW9yeUR1bXAucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuVGltZWRFdmVudC5wcm90b3R5cGUsc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpe3RoaXMuc3RhcnQrPWFtb3VudDt9LGdldCBtZW1vcnlBbGxvY2F0b3JEdW1wcygpe3JldHVybiB0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzXzt9LHNldCBtZW1vcnlBbGxvY2F0b3JEdW1wcyhtZW1vcnlBbGxvY2F0b3JEdW1wcyl7dGhpcy5tZW1vcnlBbGxvY2F0b3JEdW1wc189bWVtb3J5QWxsb2NhdG9yRHVtcHM7dGhpcy5mb3JjZVJlYnVpbGRpbmdNZW1vcnlBbGxvY2F0b3JEdW1wQnlGdWxsTmFtZUluZGV4KCk7fSxnZXRNZW1vcnlBbGxvY2F0b3JEdW1wQnlGdWxsTmFtZShmdWxsTmFtZSl7aWYodGhpcy5tZW1vcnlBbGxvY2F0b3JEdW1wc189PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtpZih0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZV89PT11bmRlZmluZWQpe2NvbnN0IGluZGV4PXt9O2Z1bmN0aW9uIGFkZER1bXBzVG9JbmRleChkdW1wcyl7ZHVtcHMuZm9yRWFjaChmdW5jdGlvbihkdW1wKXtpbmRleFtkdW1wLmZ1bGxOYW1lXT1kdW1wO2FkZER1bXBzVG9JbmRleChkdW1wLmNoaWxkcmVuKTt9KTt9Ci1hZGREdW1wc1RvSW5kZXgodGhpcy5tZW1vcnlBbGxvY2F0b3JEdW1wc18pO3RoaXMubWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lXz1pbmRleDt9Ci1yZXR1cm4gdGhpcy5tZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWVfW2Z1bGxOYW1lXTt9LGZvcmNlUmVidWlsZGluZ01lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lSW5kZXgoKXt0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZV89dW5kZWZpbmVkO30saXRlcmF0ZVJvb3RBbGxvY2F0b3JEdW1wcyhmbixvcHRfdGhpcyl7aWYodGhpcy5tZW1vcnlBbGxvY2F0b3JEdW1wcz09PXVuZGVmaW5lZClyZXR1cm47dGhpcy5tZW1vcnlBbGxvY2F0b3JEdW1wcy5mb3JFYWNoKGZuLG9wdF90aGlzfHx0aGlzKTt9fTtyZXR1cm57Q29udGFpbmVyTWVtb3J5RHVtcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gTWVtb3J5QWxsb2NhdG9yRHVtcChjb250YWluZXJNZW1vcnlEdW1wLGZ1bGxOYW1lLG9wdF9ndWlkKXt0aGlzLmZ1bGxOYW1lPWZ1bGxOYW1lO3RoaXMucGFyZW50PXVuZGVmaW5lZDt0aGlzLmNoaWxkcmVuPVtdO3RoaXMubnVtZXJpY3M9e307dGhpcy5kaWFnbm9zdGljcz17fTt0aGlzLmNvbnRhaW5lck1lbW9yeUR1bXA9Y29udGFpbmVyTWVtb3J5RHVtcDt0aGlzLm93bnM9dW5kZWZpbmVkO3RoaXMub3duZWRCeT1bXTt0aGlzLm93bmVkQnlTaWJsaW5nU2l6ZXM9bmV3IE1hcCgpO3RoaXMucmV0YWlucz1bXTt0aGlzLnJldGFpbmVkQnk9W107dGhpcy53ZWFrPWZhbHNlO3RoaXMuaW5mb3M9W107dGhpcy5ndWlkPW9wdF9ndWlkO30KLU1lbW9yeUFsbG9jYXRvckR1bXAuU0laRV9OVU1FUklDX05BTUU9J3NpemUnO01lbW9yeUFsbG9jYXRvckR1bXAuRUZGRUNUSVZFX1NJWkVfTlVNRVJJQ19OQU1FPSdlZmZlY3RpdmVfc2l6ZSc7TWVtb3J5QWxsb2NhdG9yRHVtcC5SRVNJREVOVF9TSVpFX05VTUVSSUNfTkFNRT0ncmVzaWRlbnRfc2l6ZSc7TWVtb3J5QWxsb2NhdG9yRHVtcC5ESVNQTEFZRURfU0laRV9OVU1FUklDX05BTUU9TWVtb3J5QWxsb2NhdG9yRHVtcC5FRkZFQ1RJVkVfU0laRV9OVU1FUklDX05BTUU7TWVtb3J5QWxsb2NhdG9yRHVtcC5wcm90b3R5cGU9e2dldCBuYW1lKCl7cmV0dXJuIHRoaXMuZnVsbE5hbWUuc3Vic3RyaW5nKHRoaXMuZnVsbE5hbWUubGFzdEluZGV4T2YoJy8nKSsxKTt9LGdldCBxdWFudGlmaWVkTmFtZSgpe3JldHVybidcJycrdGhpcy5mdWxsTmFtZSsnXCcgaW4gJysKLXRoaXMuY29udGFpbmVyTWVtb3J5RHVtcC5jb250YWluZXJOYW1lO30sZ2V0RGVzY2VuZGFudER1bXBCeUZ1bGxOYW1lKGZ1bGxOYW1lKXtyZXR1cm4gdGhpcy5jb250YWluZXJNZW1vcnlEdW1wLmdldE1lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lKHRoaXMuZnVsbE5hbWUrJy8nK2Z1bGxOYW1lKTt9LGlzRGVzY2VuZGFudE9mKG90aGVyRHVtcCl7aWYodGhpcz09PW90aGVyRHVtcClyZXR1cm4gdHJ1ZTtpZih0aGlzLnBhcmVudD09PXVuZGVmaW5lZClyZXR1cm4gZmFsc2U7cmV0dXJuIHRoaXMucGFyZW50LmlzRGVzY2VuZGFudE9mKG90aGVyRHVtcCk7fSxhZGROdW1lcmljKG5hbWUsbnVtZXJpYyl7aWYoIShudW1lcmljIGluc3RhbmNlb2YgdHIuYi5TY2FsYXIpKXt0aHJvdyBuZXcgRXJyb3IoJ051bWVyaWMgdmFsdWUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBTY2FsYXIuJyk7fQotaWYobmFtZSBpbiB0aGlzLm51bWVyaWNzKXt0aHJvdyBuZXcgRXJyb3IoJ0R1cGxpY2F0ZSBudW1lcmljIG5hbWU6ICcrbmFtZSsnLicpO30KLXRoaXMubnVtZXJpY3NbbmFtZV09bnVtZXJpYzt9LGFkZERpYWdub3N0aWMobmFtZSx0ZXh0KXtpZih0eXBlb2YgdGV4dCE9PSdzdHJpbmcnKXt0aHJvdyBuZXcgRXJyb3IoJ0RpYWdub3N0aWMgdGV4dCBtdXN0IGJlIGEgc3RyaW5nLicpO30KLWlmKG5hbWUgaW4gdGhpcy5kaWFnbm9zdGljcyl7dGhyb3cgbmV3IEVycm9yKCdEdXBsaWNhdGUgZGlhZ25vc3RpYyBuYW1lOiAnK25hbWUrJy4nKTt9Ci10aGlzLmRpYWdub3N0aWNzW25hbWVdPXRleHQ7fSxhZ2dyZWdhdGVOdW1lcmljc1JlY3Vyc2l2ZWx5KG9wdF9tb2RlbCl7Y29uc3QgbnVtZXJpY05hbWVzPW5ldyBTZXQoKTt0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpe2NoaWxkLmFnZ3JlZ2F0ZU51bWVyaWNzUmVjdXJzaXZlbHkob3B0X21vZGVsKTtmb3IoY29uc3RbaXRlbSx2YWx1ZV1vZiBPYmplY3QuZW50cmllcyhjaGlsZC5udW1lcmljcykpe251bWVyaWNOYW1lcy5hZGQoaXRlbSx2YWx1ZSk7fX0sdGhpcyk7bnVtZXJpY05hbWVzLmZvckVhY2goZnVuY3Rpb24obnVtZXJpY05hbWUpe2lmKG51bWVyaWNOYW1lPT09TWVtb3J5QWxsb2NhdG9yRHVtcC5TSVpFX05VTUVSSUNfTkFNRXx8bnVtZXJpY05hbWU9PT1NZW1vcnlBbGxvY2F0b3JEdW1wLkVGRkVDVElWRV9TSVpFX05VTUVSSUNfTkFNRXx8dGhpcy5udW1lcmljc1tudW1lcmljTmFtZV0hPT11bmRlZmluZWQpe3JldHVybjt9Ci10aGlzLm51bWVyaWNzW251bWVyaWNOYW1lXT1NZW1vcnlBbGxvY2F0b3JEdW1wLmFnZ3JlZ2F0ZU51bWVyaWNzKHRoaXMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGNoaWxkKXtyZXR1cm4gY2hpbGQubnVtZXJpY3NbbnVtZXJpY05hbWVdO30pLG9wdF9tb2RlbCk7fSx0aGlzKTt9fTtNZW1vcnlBbGxvY2F0b3JEdW1wLmFnZ3JlZ2F0ZU51bWVyaWNzPWZ1bmN0aW9uKG51bWVyaWNzLG9wdF9tb2RlbCl7bGV0IHNob3VsZExvZ1dhcm5pbmc9ISFvcHRfbW9kZWw7bGV0IGFnZ3JlZ2F0ZWRVbml0PXVuZGVmaW5lZDtsZXQgYWdncmVnYXRlZFZhbHVlPTA7bnVtZXJpY3MuZm9yRWFjaChmdW5jdGlvbihudW1lcmljKXtpZihudW1lcmljPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCB1bml0PW51bWVyaWMudW5pdDtpZihhZ2dyZWdhdGVkVW5pdD09PXVuZGVmaW5lZCl7YWdncmVnYXRlZFVuaXQ9dW5pdDt9ZWxzZSBpZihhZ2dyZWdhdGVkVW5pdCE9PXVuaXQpe2lmKHNob3VsZExvZ1dhcm5pbmcpe29wdF9tb2RlbC5pbXBvcnRXYXJuaW5nKHt0eXBlOidudW1lcmljX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNdWx0aXBsZSB1bml0cyBwcm92aWRlZCBmb3IgbnVtZXJpYzogXCcnKwotYWdncmVnYXRlZFVuaXQudW5pdE5hbWUrJ1wnIGFuZCBcJycrdW5pdC51bml0TmFtZSsnXCcuJ30pO3Nob3VsZExvZ1dhcm5pbmc9ZmFsc2U7fQotYWdncmVnYXRlZFVuaXQ9dHIuYi5Vbml0LmJ5TmFtZS51bml0bGVzc051bWJlcl9zbWFsbGVySXNCZXR0ZXI7fQotYWdncmVnYXRlZFZhbHVlKz1udW1lcmljLnZhbHVlO30sdGhpcyk7aWYoYWdncmVnYXRlZFVuaXQ9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gbmV3IHRyLmIuU2NhbGFyKGFnZ3JlZ2F0ZWRVbml0LGFnZ3JlZ2F0ZWRWYWx1ZSk7fTtmdW5jdGlvbiBNZW1vcnlBbGxvY2F0b3JEdW1wTGluayhzb3VyY2UsdGFyZ2V0LG9wdF9pbXBvcnRhbmNlKXt0aGlzLnNvdXJjZT1zb3VyY2U7dGhpcy50YXJnZXQ9dGFyZ2V0O3RoaXMuaW1wb3J0YW5jZT1vcHRfaW1wb3J0YW5jZTt0aGlzLnNpemU9dW5kZWZpbmVkO30KLWNvbnN0IE1lbW9yeUFsbG9jYXRvckR1bXBJbmZvVHlwZT17UFJPVklERURfU0laRV9MRVNTX1RIQU5fQUdHUkVHQVRFRF9DSElMRFJFTjowLFBST1ZJREVEX1NJWkVfTEVTU19USEFOX0xBUkdFU1RfT1dORVI6MX07cmV0dXJue01lbW9yeUFsbG9jYXRvckR1bXAsTWVtb3J5QWxsb2NhdG9yRHVtcExpbmssTWVtb3J5QWxsb2NhdG9yRHVtcEluZm9UeXBlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBHbG9iYWxNZW1vcnlEdW1wKG1vZGVsLHN0YXJ0KXt0ci5tb2RlbC5Db250YWluZXJNZW1vcnlEdW1wLmNhbGwodGhpcyxzdGFydCk7dGhpcy5tb2RlbD1tb2RlbDt0aGlzLnByb2Nlc3NNZW1vcnlEdW1wcz17fTt9Ci1jb25zdCBTSVpFX05VTUVSSUNfTkFNRT10ci5tb2RlbC5NZW1vcnlBbGxvY2F0b3JEdW1wLlNJWkVfTlVNRVJJQ19OQU1FO2NvbnN0IEVGRkVDVElWRV9TSVpFX05VTUVSSUNfTkFNRT10ci5tb2RlbC5NZW1vcnlBbGxvY2F0b3JEdW1wLkVGRkVDVElWRV9TSVpFX05VTUVSSUNfTkFNRTtjb25zdCBNZW1vcnlBbGxvY2F0b3JEdW1wSW5mb1R5cGU9dHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcEluZm9UeXBlO2NvbnN0IFBST1ZJREVEX1NJWkVfTEVTU19USEFOX0FHR1JFR0FURURfQ0hJTERSRU49TWVtb3J5QWxsb2NhdG9yRHVtcEluZm9UeXBlLlBST1ZJREVEX1NJWkVfTEVTU19USEFOX0FHR1JFR0FURURfQ0hJTERSRU47Y29uc3QgUFJPVklERURfU0laRV9MRVNTX1RIQU5fTEFSR0VTVF9PV05FUj1NZW1vcnlBbGxvY2F0b3JEdW1wSW5mb1R5cGUuUFJPVklERURfU0laRV9MRVNTX1RIQU5fTEFSR0VTVF9PV05FUjtmdW5jdGlvbiBnZXRTaXplKGR1bXApe2NvbnN0IG51bWVyaWM9ZHVtcC5udW1lcmljc1tTSVpFX05VTUVSSUNfTkFNRV07aWYobnVtZXJpYz09PXVuZGVmaW5lZClyZXR1cm4gMDtyZXR1cm4gbnVtZXJpYy52YWx1ZTt9Ci1mdW5jdGlvbiBoYXNTaXplKGR1bXApe3JldHVybiBkdW1wLm51bWVyaWNzW1NJWkVfTlVNRVJJQ19OQU1FXSE9PXVuZGVmaW5lZDt9Ci1mdW5jdGlvbiBvcHRpb25hbCh2YWx1ZSxkZWZhdWx0VmFsdWUpe2lmKHZhbHVlPT09dW5kZWZpbmVkKXJldHVybiBkZWZhdWx0VmFsdWU7cmV0dXJuIHZhbHVlO30KLUdsb2JhbE1lbW9yeUR1bXAucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuQ29udGFpbmVyTWVtb3J5RHVtcC5wcm90b3R5cGUsZ2V0IHVzZXJGcmllbmRseU5hbWUoKXtyZXR1cm4nR2xvYmFsIG1lbW9yeSBkdW1wIGF0ICcrCi10ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMuZm9ybWF0KHRoaXMuc3RhcnQpO30sZ2V0IGNvbnRhaW5lck5hbWUoKXtyZXR1cm4nZ2xvYmFsIHNwYWNlJzt9LGZpbmFsaXplR3JhcGgoKXt0aGlzLnJlbW92ZVdlYWtEdW1wcygpO3RoaXMuc2V0VXBUcmFjaW5nT3ZlcmhlYWRPd25lcnNoaXAoKTt0aGlzLmFnZ3JlZ2F0ZU51bWVyaWNzKCk7dGhpcy5jYWxjdWxhdGVTaXplcygpO3RoaXMuY2FsY3VsYXRlRWZmZWN0aXZlU2l6ZXMoKTt0aGlzLmRpc2NvdW50VHJhY2luZ092ZXJoZWFkRnJvbVZtUmVnaW9ucygpO3RoaXMuZm9yY2VSZWJ1aWxkaW5nTWVtb3J5QWxsb2NhdG9yRHVtcEJ5RnVsbE5hbWVJbmRpY2VzKCk7fSxyZW1vdmVXZWFrRHVtcHMoKXt0aGlzLnRyYXZlcnNlQWxsb2NhdG9yRHVtcHNJbkRlcHRoRmlyc3RQcmVPcmRlcihmdW5jdGlvbihkdW1wKXtpZihkdW1wLndlYWspcmV0dXJuO2lmKChkdW1wLm93bnMhPT11bmRlZmluZWQmJmR1bXAub3ducy50YXJnZXQud2Vhayl8fChkdW1wLnBhcmVudCE9PXVuZGVmaW5lZCYmZHVtcC5wYXJlbnQud2Vhaykpe2R1bXAud2Vhaz10cnVlO319KTtmdW5jdGlvbiByZW1vdmVXZWFrRHVtcHNGcm9tTGlzdFJlY3Vyc2l2ZWx5KGR1bXBzKXt0ci5iLmluUGxhY2VGaWx0ZXIoZHVtcHMsZnVuY3Rpb24oZHVtcCl7aWYoZHVtcC53ZWFrKXtyZXR1cm4gZmFsc2U7fQotcmVtb3ZlV2Vha0R1bXBzRnJvbUxpc3RSZWN1cnNpdmVseShkdW1wLmNoaWxkcmVuKTt0ci5iLmluUGxhY2VGaWx0ZXIoZHVtcC5vd25lZEJ5LGZ1bmN0aW9uKG93bmVyc2hpcExpbmspe3JldHVybiFvd25lcnNoaXBMaW5rLnNvdXJjZS53ZWFrO30pO3JldHVybiB0cnVlO30pO30KLXRoaXMuaXRlcmF0ZUNvbnRhaW5lckR1bXBzKGZ1bmN0aW9uKGNvbnRhaW5lckR1bXApe2NvbnN0IG1lbW9yeUFsbG9jYXRvckR1bXBzPWNvbnRhaW5lckR1bXAubWVtb3J5QWxsb2NhdG9yRHVtcHM7aWYobWVtb3J5QWxsb2NhdG9yRHVtcHMhPT11bmRlZmluZWQpe3JlbW92ZVdlYWtEdW1wc0Zyb21MaXN0UmVjdXJzaXZlbHkobWVtb3J5QWxsb2NhdG9yRHVtcHMpO319KTt9LGNhbGN1bGF0ZVNpemVzKCl7dGhpcy50cmF2ZXJzZUFsbG9jYXRvckR1bXBzSW5EZXB0aEZpcnN0UG9zdE9yZGVyKHRoaXMuY2FsY3VsYXRlTWVtb3J5QWxsb2NhdG9yRHVtcFNpemVfLmJpbmQodGhpcykpO30sY2FsY3VsYXRlTWVtb3J5QWxsb2NhdG9yRHVtcFNpemVfKGR1bXApe2xldCBzaG91bGREZWZpbmVTaXplPWZhbHNlO2Z1bmN0aW9uIGdldERlcGVuZGVuY3lTaXplKGRlcGVuZGVuY3lEdW1wKXtjb25zdCBudW1lcmljPWRlcGVuZGVuY3lEdW1wLm51bWVyaWNzW1NJWkVfTlVNRVJJQ19OQU1FXTtpZihudW1lcmljPT09dW5kZWZpbmVkKXJldHVybiAwO3Nob3VsZERlZmluZVNpemU9dHJ1ZTtyZXR1cm4gbnVtZXJpYy52YWx1ZTt9Ci1jb25zdCBzaXplTnVtZXJpYz1kdW1wLm51bWVyaWNzW1NJWkVfTlVNRVJJQ19OQU1FXTtsZXQgc2l6ZT0wO2xldCBjaGVja0RlcGVuZGVuY3lTaXplSXNDb25zaXN0ZW50PWZ1bmN0aW9uKCl7fTtpZihzaXplTnVtZXJpYyE9PXVuZGVmaW5lZCl7c2l6ZT1zaXplTnVtZXJpYy52YWx1ZTtzaG91bGREZWZpbmVTaXplPXRydWU7aWYoc2l6ZU51bWVyaWMudW5pdCE9PXRyLmIuVW5pdC5ieU5hbWUuc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyKXt0aGlzLm1vZGVsLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidJbnZhbGlkIHVuaXQgb2YgXCdzaXplXCcgbnVtZXJpYyBvZiBtZW1vcnkgYWxsb2NhdG9yICcrJ2R1bXAgJytkdW1wLnF1YW50aWZpZWROYW1lKyc6ICcrCi1zaXplTnVtZXJpYy51bml0LnVuaXROYW1lKycuJ30pO30KLWNoZWNrRGVwZW5kZW5jeVNpemVJc0NvbnNpc3RlbnQ9ZnVuY3Rpb24oZGVwZW5kZW5jeVNpemUsZGVwZW5kZW5jeUluZm9UeXBlLGRlcGVuZGVuY3lOYW1lKXtpZihzaXplPj1kZXBlbmRlbmN5U2l6ZSlyZXR1cm47dGhpcy5tb2RlbC5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonU2l6ZSBwcm92aWRlZCBieSBtZW1vcnkgYWxsb2NhdG9yIGR1bXAgXCcnKwotZHVtcC5mdWxsTmFtZSsnXCcnKwotdHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlcy5mb3JtYXQoc2l6ZSkrJykgaXMgbGVzcyB0aGFuICcrZGVwZW5kZW5jeU5hbWUrJyAoJysKLXRyLmIuVW5pdC5ieU5hbWUuc2l6ZUluQnl0ZXMuZm9ybWF0KGRlcGVuZGVuY3lTaXplKSsnKS4nfSk7ZHVtcC5pbmZvcy5wdXNoKHt0eXBlOmRlcGVuZGVuY3lJbmZvVHlwZSxwcm92aWRlZFNpemU6c2l6ZSxkZXBlbmRlbmN5U2l6ZX0pO30uYmluZCh0aGlzKTt9Ci1sZXQgYWdncmVnYXRlZENoaWxkcmVuU2l6ZT0wO2NvbnN0IGFsbE92ZXJsYXBzPXt9O2R1bXAuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjaGlsZER1bXApe2Z1bmN0aW9uIGFnZ3JlZ2F0ZURlc2NlbmRhbnREdW1wKGRlc2NlbmRhbnREdW1wKXtjb25zdCBvd25lZER1bXBMaW5rPWRlc2NlbmRhbnREdW1wLm93bnM7aWYob3duZWREdW1wTGluayE9PXVuZGVmaW5lZCYmb3duZWREdW1wTGluay50YXJnZXQuaXNEZXNjZW5kYW50T2YoZHVtcCkpe2xldCBvd25lZENoaWxkRHVtcD1vd25lZER1bXBMaW5rLnRhcmdldDt3aGlsZShvd25lZENoaWxkRHVtcC5wYXJlbnQhPT1kdW1wKXtvd25lZENoaWxkRHVtcD1vd25lZENoaWxkRHVtcC5wYXJlbnQ7fQotaWYoY2hpbGREdW1wIT09b3duZWRDaGlsZER1bXApe2NvbnN0IG93bmVkQnlTaWJsaW5nU2l6ZT1nZXREZXBlbmRlbmN5U2l6ZShkZXNjZW5kYW50RHVtcCk7aWYob3duZWRCeVNpYmxpbmdTaXplPjApe2NvbnN0IHByZXZpb3VzVG90YWxPd25lZEJ5U2libGluZ1NpemU9b3duZWRDaGlsZER1bXAub3duZWRCeVNpYmxpbmdTaXplcy5nZXQoY2hpbGREdW1wKXx8MDtjb25zdCB1cGRhdGVkVG90YWxPd25lZEJ5U2libGluZ1NpemU9cHJldmlvdXNUb3RhbE93bmVkQnlTaWJsaW5nU2l6ZStvd25lZEJ5U2libGluZ1NpemU7b3duZWRDaGlsZER1bXAub3duZWRCeVNpYmxpbmdTaXplcy5zZXQoY2hpbGREdW1wLHVwZGF0ZWRUb3RhbE93bmVkQnlTaWJsaW5nU2l6ZSk7fX0KLXJldHVybjt9Ci1pZihkZXNjZW5kYW50RHVtcC5jaGlsZHJlbi5sZW5ndGg9PT0wKXthZ2dyZWdhdGVkQ2hpbGRyZW5TaXplKz1nZXREZXBlbmRlbmN5U2l6ZShkZXNjZW5kYW50RHVtcCk7cmV0dXJuO30KLWRlc2NlbmRhbnREdW1wLmNoaWxkcmVuLmZvckVhY2goYWdncmVnYXRlRGVzY2VuZGFudER1bXApO30KLWFnZ3JlZ2F0ZURlc2NlbmRhbnREdW1wKGNoaWxkRHVtcCk7fSk7Y2hlY2tEZXBlbmRlbmN5U2l6ZUlzQ29uc2lzdGVudChhZ2dyZWdhdGVkQ2hpbGRyZW5TaXplLFBST1ZJREVEX1NJWkVfTEVTU19USEFOX0FHR1JFR0FURURfQ0hJTERSRU4sJ3RoZSBhZ2dyZWdhdGVkIHNpemUgb2YgaXRzIGNoaWxkcmVuJyk7bGV0IGxhcmdlc3RPd25lclNpemU9MDtkdW1wLm93bmVkQnkuZm9yRWFjaChmdW5jdGlvbihvd25lcnNoaXBMaW5rKXtjb25zdCBvd25lcj1vd25lcnNoaXBMaW5rLnNvdXJjZTtjb25zdCBvd25lclNpemU9Z2V0RGVwZW5kZW5jeVNpemUob3duZXIpO2xhcmdlc3RPd25lclNpemU9TWF0aC5tYXgobGFyZ2VzdE93bmVyU2l6ZSxvd25lclNpemUpO30pO2NoZWNrRGVwZW5kZW5jeVNpemVJc0NvbnNpc3RlbnQobGFyZ2VzdE93bmVyU2l6ZSxQUk9WSURFRF9TSVpFX0xFU1NfVEhBTl9MQVJHRVNUX09XTkVSLCd0aGUgc2l6ZSBvZiBpdHMgbGFyZ2VzdCBvd25lcicpO2lmKCFzaG91bGREZWZpbmVTaXplKXtkZWxldGUgZHVtcC5udW1lcmljc1tTSVpFX05VTUVSSUNfTkFNRV07cmV0dXJuO30KLXNpemU9TWF0aC5tYXgoc2l6ZSxhZ2dyZWdhdGVkQ2hpbGRyZW5TaXplLGxhcmdlc3RPd25lclNpemUpO2R1bXAubnVtZXJpY3NbU0laRV9OVU1FUklDX05BTUVdPW5ldyB0ci5iLlNjYWxhcih0ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixzaXplKTtpZihhZ2dyZWdhdGVkQ2hpbGRyZW5TaXplPHNpemUmJmR1bXAuY2hpbGRyZW4hPT11bmRlZmluZWQmJmR1bXAuY2hpbGRyZW4ubGVuZ3RoPjApe2NvbnN0IHZpcnR1YWxDaGlsZD1uZXcgdHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcChkdW1wLmNvbnRhaW5lck1lbW9yeUR1bXAsZHVtcC5mdWxsTmFtZSsnLzx1bnNwZWNpZmllZD4nKTt2aXJ0dWFsQ2hpbGQucGFyZW50PWR1bXA7ZHVtcC5jaGlsZHJlbi51bnNoaWZ0KHZpcnR1YWxDaGlsZCk7dmlydHVhbENoaWxkLm51bWVyaWNzW1NJWkVfTlVNRVJJQ19OQU1FXT1uZXcgdHIuYi5TY2FsYXIodHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsc2l6ZS1hZ2dyZWdhdGVkQ2hpbGRyZW5TaXplKTt9fSxjYWxjdWxhdGVFZmZlY3RpdmVTaXplcygpe3RoaXMudHJhdmVyc2VBbGxvY2F0b3JEdW1wc0luRGVwdGhGaXJzdFBvc3RPcmRlcih0aGlzLmNhbGN1bGF0ZUR1bXBTdWJTaXplc18uYmluZCh0aGlzKSk7dGhpcy50cmF2ZXJzZUFsbG9jYXRvckR1bXBzSW5EZXB0aEZpcnN0UG9zdE9yZGVyKHRoaXMuY2FsY3VsYXRlRHVtcE93bmVyc2hpcENvZWZmaWNpZW50Xy5iaW5kKHRoaXMpKTt0aGlzLnRyYXZlcnNlQWxsb2NhdG9yRHVtcHNJbkRlcHRoRmlyc3RQcmVPcmRlcih0aGlzLmNhbGN1bGF0ZUR1bXBDdW11bGF0aXZlT3duZXJzaGlwQ29lZmZpY2llbnRfLmJpbmQodGhpcykpO3RoaXMudHJhdmVyc2VBbGxvY2F0b3JEdW1wc0luRGVwdGhGaXJzdFBvc3RPcmRlcih0aGlzLmNhbGN1bGF0ZUR1bXBFZmZlY3RpdmVTaXplXy5iaW5kKHRoaXMpKTt9LGNhbGN1bGF0ZUR1bXBTdWJTaXplc18oZHVtcCl7aWYoIWhhc1NpemUoZHVtcCkpcmV0dXJuO2lmKGR1bXAuY2hpbGRyZW49PT11bmRlZmluZWR8fGR1bXAuY2hpbGRyZW4ubGVuZ3RoPT09MCl7Y29uc3Qgc2l6ZT1nZXRTaXplKGR1bXApO2R1bXAubm90T3duaW5nU3ViU2l6ZV89c2l6ZTtkdW1wLm5vdE93bmVkU3ViU2l6ZV89c2l6ZTtyZXR1cm47fQotbGV0IG5vdE93bmluZ1N1YlNpemU9MDtkdW1wLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGREdW1wKXtpZihjaGlsZER1bXAub3ducyE9PXVuZGVmaW5lZClyZXR1cm47bm90T3duaW5nU3ViU2l6ZSs9b3B0aW9uYWwoY2hpbGREdW1wLm5vdE93bmluZ1N1YlNpemVfLDApO30pO2R1bXAubm90T3duaW5nU3ViU2l6ZV89bm90T3duaW5nU3ViU2l6ZTtsZXQgbm90T3duZWRTdWJTaXplPTA7ZHVtcC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkRHVtcCl7aWYoY2hpbGREdW1wLm93bmVkQnkubGVuZ3RoPT09MCl7bm90T3duZWRTdWJTaXplKz1vcHRpb25hbChjaGlsZER1bXAubm90T3duZWRTdWJTaXplXywwKTtyZXR1cm47fQotbGV0IGxhcmdlc3RDaGlsZE93bmVyU2l6ZT0wO2NoaWxkRHVtcC5vd25lZEJ5LmZvckVhY2goZnVuY3Rpb24ob3duZXJzaGlwTGluayl7bGFyZ2VzdENoaWxkT3duZXJTaXplPU1hdGgubWF4KGxhcmdlc3RDaGlsZE93bmVyU2l6ZSxnZXRTaXplKG93bmVyc2hpcExpbmsuc291cmNlKSk7fSk7bm90T3duZWRTdWJTaXplKz1nZXRTaXplKGNoaWxkRHVtcCktbGFyZ2VzdENoaWxkT3duZXJTaXplO30pO2R1bXAubm90T3duZWRTdWJTaXplXz1ub3RPd25lZFN1YlNpemU7fSxjYWxjdWxhdGVEdW1wT3duZXJzaGlwQ29lZmZpY2llbnRfKGR1bXApe2lmKCFoYXNTaXplKGR1bXApKXJldHVybjtpZihkdW1wLm93bmVkQnkubGVuZ3RoPT09MClyZXR1cm47Y29uc3Qgb3duZXJzPWR1bXAub3duZWRCeS5tYXAoZnVuY3Rpb24ob3duZXJzaGlwTGluayl7cmV0dXJue2R1bXA6b3duZXJzaGlwTGluay5zb3VyY2UsaW1wb3J0YW5jZTpvcHRpb25hbChvd25lcnNoaXBMaW5rLmltcG9ydGFuY2UsMCksbm90T3duaW5nU3ViU2l6ZTpvcHRpb25hbChvd25lcnNoaXBMaW5rLnNvdXJjZS5ub3RPd25pbmdTdWJTaXplXywwKX07fSk7b3duZXJzLnNvcnQoZnVuY3Rpb24oYSxiKXtpZihhLmltcG9ydGFuY2U9PT1iLmltcG9ydGFuY2Upe3JldHVybiBhLm5vdE93bmluZ1N1YlNpemUtYi5ub3RPd25pbmdTdWJTaXplO30KLXJldHVybiBiLmltcG9ydGFuY2UtYS5pbXBvcnRhbmNlO30pO2xldCBjdXJyZW50SW1wb3J0YW5jZVN0YXJ0UG9zPTA7bGV0IGFscmVhZHlBdHRyaWJ1dGVkU3ViU2l6ZT0wO3doaWxlKGN1cnJlbnRJbXBvcnRhbmNlU3RhcnRQb3M8b3duZXJzLmxlbmd0aCl7Y29uc3QgY3VycmVudEltcG9ydGFuY2U9b3duZXJzW2N1cnJlbnRJbXBvcnRhbmNlU3RhcnRQb3NdLmltcG9ydGFuY2U7bGV0IG5leHRJbXBvcnRhbmNlU3RhcnRQb3M9Y3VycmVudEltcG9ydGFuY2VTdGFydFBvcysxO3doaWxlKG5leHRJbXBvcnRhbmNlU3RhcnRQb3M8b3duZXJzLmxlbmd0aCYmb3duZXJzW25leHRJbXBvcnRhbmNlU3RhcnRQb3NdLmltcG9ydGFuY2U9PT1jdXJyZW50SW1wb3J0YW5jZSl7bmV4dEltcG9ydGFuY2VTdGFydFBvcysrO30KLWxldCBhdHRyaWJ1dGVkTm90T3duaW5nU3ViU2l6ZT0wO2ZvcihsZXQgcG9zPWN1cnJlbnRJbXBvcnRhbmNlU3RhcnRQb3M7cG9zPG5leHRJbXBvcnRhbmNlU3RhcnRQb3M7cG9zKyspe2NvbnN0IG93bmVyPW93bmVyc1twb3NdO2NvbnN0IG5vdE93bmluZ1N1YlNpemU9b3duZXIubm90T3duaW5nU3ViU2l6ZTtpZihub3RPd25pbmdTdWJTaXplPmFscmVhZHlBdHRyaWJ1dGVkU3ViU2l6ZSl7YXR0cmlidXRlZE5vdE93bmluZ1N1YlNpemUrPShub3RPd25pbmdTdWJTaXplLWFscmVhZHlBdHRyaWJ1dGVkU3ViU2l6ZSkvKG5leHRJbXBvcnRhbmNlU3RhcnRQb3MtcG9zKTthbHJlYWR5QXR0cmlidXRlZFN1YlNpemU9bm90T3duaW5nU3ViU2l6ZTt9Ci1sZXQgb3duaW5nQ29lZmZpY2llbnQ9MDtpZihub3RPd25pbmdTdWJTaXplIT09MCl7b3duaW5nQ29lZmZpY2llbnQ9YXR0cmlidXRlZE5vdE93bmluZ1N1YlNpemUvbm90T3duaW5nU3ViU2l6ZTt9Ci1vd25lci5kdW1wLm93bmluZ0NvZWZmaWNpZW50Xz1vd25pbmdDb2VmZmljaWVudDt9Ci1jdXJyZW50SW1wb3J0YW5jZVN0YXJ0UG9zPW5leHRJbXBvcnRhbmNlU3RhcnRQb3M7fQotY29uc3Qgbm90T3duZWRTdWJTaXplPW9wdGlvbmFsKGR1bXAubm90T3duZWRTdWJTaXplXywwKTtjb25zdCByZW1haW5kZXJTdWJTaXplPW5vdE93bmVkU3ViU2l6ZS1hbHJlYWR5QXR0cmlidXRlZFN1YlNpemU7bGV0IG93bmVkQ29lZmZpY2llbnQ9MDtpZihub3RPd25lZFN1YlNpemUhPT0wKXtvd25lZENvZWZmaWNpZW50PXJlbWFpbmRlclN1YlNpemUvbm90T3duZWRTdWJTaXplO30KLWR1bXAub3duZWRDb2VmZmljaWVudF89b3duZWRDb2VmZmljaWVudDt9LGNhbGN1bGF0ZUR1bXBDdW11bGF0aXZlT3duZXJzaGlwQ29lZmZpY2llbnRfKGR1bXApe2lmKCFoYXNTaXplKGR1bXApKXJldHVybjtsZXQgY3VtdWxhdGl2ZU93bmVkQ29lZmZpY2llbnQ9b3B0aW9uYWwoZHVtcC5vd25lZENvZWZmaWNpZW50XywxKTtjb25zdCBwYXJlbnQ9ZHVtcC5wYXJlbnQ7aWYoZHVtcC5wYXJlbnQhPT11bmRlZmluZWQpe2N1bXVsYXRpdmVPd25lZENvZWZmaWNpZW50Kj1kdW1wLnBhcmVudC5jdW11bGF0aXZlT3duZWRDb2VmZmljaWVudF87fQotZHVtcC5jdW11bGF0aXZlT3duZWRDb2VmZmljaWVudF89Y3VtdWxhdGl2ZU93bmVkQ29lZmZpY2llbnQ7bGV0IGN1bXVsYXRpdmVPd25pbmdDb2VmZmljaWVudDtpZihkdW1wLm93bnMhPT11bmRlZmluZWQpe2N1bXVsYXRpdmVPd25pbmdDb2VmZmljaWVudD1kdW1wLm93bmluZ0NvZWZmaWNpZW50XypkdW1wLm93bnMudGFyZ2V0LmN1bXVsYXRpdmVPd25pbmdDb2VmZmljaWVudF87fWVsc2UgaWYoZHVtcC5wYXJlbnQhPT11bmRlZmluZWQpe2N1bXVsYXRpdmVPd25pbmdDb2VmZmljaWVudD1kdW1wLnBhcmVudC5jdW11bGF0aXZlT3duaW5nQ29lZmZpY2llbnRfO31lbHNle2N1bXVsYXRpdmVPd25pbmdDb2VmZmljaWVudD0xO30KLWR1bXAuY3VtdWxhdGl2ZU93bmluZ0NvZWZmaWNpZW50Xz1jdW11bGF0aXZlT3duaW5nQ29lZmZpY2llbnQ7fSxjYWxjdWxhdGVEdW1wRWZmZWN0aXZlU2l6ZV8oZHVtcCl7aWYoIWhhc1NpemUoZHVtcCkpe2RlbGV0ZSBkdW1wLm51bWVyaWNzW0VGRkVDVElWRV9TSVpFX05VTUVSSUNfTkFNRV07cmV0dXJuO30KLWxldCBlZmZlY3RpdmVTaXplO2lmKGR1bXAuY2hpbGRyZW49PT11bmRlZmluZWR8fGR1bXAuY2hpbGRyZW4ubGVuZ3RoPT09MCl7ZWZmZWN0aXZlU2l6ZT1nZXRTaXplKGR1bXApKmR1bXAuY3VtdWxhdGl2ZU93bmluZ0NvZWZmaWNpZW50XypkdW1wLmN1bXVsYXRpdmVPd25lZENvZWZmaWNpZW50Xzt9ZWxzZXtlZmZlY3RpdmVTaXplPTA7ZHVtcC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkRHVtcCl7aWYoIWhhc1NpemUoY2hpbGREdW1wKSlyZXR1cm47ZWZmZWN0aXZlU2l6ZSs9Y2hpbGREdW1wLm51bWVyaWNzW0VGRkVDVElWRV9TSVpFX05VTUVSSUNfTkFNRV0udmFsdWU7fSk7fQotZHVtcC5udW1lcmljc1tFRkZFQ1RJVkVfU0laRV9OVU1FUklDX05BTUVdPW5ldyB0ci5iLlNjYWxhcih0ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixlZmZlY3RpdmVTaXplKTt9LGFnZ3JlZ2F0ZU51bWVyaWNzKCl7dGhpcy5pdGVyYXRlUm9vdEFsbG9jYXRvckR1bXBzKGZ1bmN0aW9uKGR1bXApe2R1bXAuYWdncmVnYXRlTnVtZXJpY3NSZWN1cnNpdmVseSh0aGlzLm1vZGVsKTt9KTt0aGlzLml0ZXJhdGVSb290QWxsb2NhdG9yRHVtcHModGhpcy5wcm9wYWdhdGVOdW1lcmljc0FuZERpYWdub3N0aWNzUmVjdXJzaXZlbHkpO2Zvcihjb25zdCBwcm9jZXNzTWVtb3J5RHVtcCBvZiBPYmplY3QudmFsdWVzKHRoaXMucHJvY2Vzc01lbW9yeUR1bXBzKSl7cHJvY2Vzc01lbW9yeUR1bXAuaXRlcmF0ZVJvb3RBbGxvY2F0b3JEdW1wcyhmdW5jdGlvbihkdW1wKXtkdW1wLmFnZ3JlZ2F0ZU51bWVyaWNzUmVjdXJzaXZlbHkodGhpcy5tb2RlbCk7fSx0aGlzKTt9fSxwcm9wYWdhdGVOdW1lcmljc0FuZERpYWdub3N0aWNzUmVjdXJzaXZlbHkoZ2xvYmFsQWxsb2NhdG9yRHVtcCl7WydudW1lcmljcycsJ2RpYWdub3N0aWNzJ10uZm9yRWFjaChmdW5jdGlvbihmaWVsZCl7Zm9yKGNvbnN0W25hbWUsdmFsdWVdb2YKLU9iamVjdC5lbnRyaWVzKGdsb2JhbEFsbG9jYXRvckR1bXBbZmllbGRdKSl7Z2xvYmFsQWxsb2NhdG9yRHVtcC5vd25lZEJ5LmZvckVhY2goZnVuY3Rpb24ob3duZXJzaGlwTGluayl7Y29uc3QgcHJvY2Vzc0FsbG9jYXRvckR1bXA9b3duZXJzaGlwTGluay5zb3VyY2U7aWYocHJvY2Vzc0FsbG9jYXRvckR1bXBbZmllbGRdW25hbWVdIT09dW5kZWZpbmVkKXtyZXR1cm47fQotcHJvY2Vzc0FsbG9jYXRvckR1bXBbZmllbGRdW25hbWVdPXZhbHVlO30pO319KTtnbG9iYWxBbGxvY2F0b3JEdW1wLmNoaWxkcmVuLmZvckVhY2godGhpcy5wcm9wYWdhdGVOdW1lcmljc0FuZERpYWdub3N0aWNzUmVjdXJzaXZlbHksdGhpcyk7fSxzZXRVcFRyYWNpbmdPdmVyaGVhZE93bmVyc2hpcCgpe2Zvcihjb25zdCBkdW1wIG9mIE9iamVjdC52YWx1ZXModGhpcy5wcm9jZXNzTWVtb3J5RHVtcHMpKXtkdW1wLnNldFVwVHJhY2luZ092ZXJoZWFkT3duZXJzaGlwKHRoaXMubW9kZWwpO319LGRpc2NvdW50VHJhY2luZ092ZXJoZWFkRnJvbVZtUmVnaW9ucygpe2Zvcihjb25zdCBkdW1wIG9mIE9iamVjdC52YWx1ZXModGhpcy5wcm9jZXNzTWVtb3J5RHVtcHMpKXtkdW1wLmRpc2NvdW50VHJhY2luZ092ZXJoZWFkRnJvbVZtUmVnaW9ucyh0aGlzLm1vZGVsKTt9fSxmb3JjZVJlYnVpbGRpbmdNZW1vcnlBbGxvY2F0b3JEdW1wQnlGdWxsTmFtZUluZGljZXMoKXt0aGlzLml0ZXJhdGVDb250YWluZXJEdW1wcyhmdW5jdGlvbihjb250YWluZXJEdW1wKXtjb250YWluZXJEdW1wLmZvcmNlUmVidWlsZGluZ01lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lSW5kZXgoKTt9KTt9LGl0ZXJhdGVDb250YWluZXJEdW1wcyhmbil7Zm4uY2FsbCh0aGlzLHRoaXMpO2Zvcihjb25zdCBwcm9jZXNzRHVtcCBvZiBPYmplY3QudmFsdWVzKHRoaXMucHJvY2Vzc01lbW9yeUR1bXBzKSl7Zm4uY2FsbCh0aGlzLHByb2Nlc3NEdW1wKTt9fSxpdGVyYXRlQWxsUm9vdEFsbG9jYXRvckR1bXBzKGZuKXt0aGlzLml0ZXJhdGVDb250YWluZXJEdW1wcyhmdW5jdGlvbihjb250YWluZXJEdW1wKXtjb250YWluZXJEdW1wLml0ZXJhdGVSb290QWxsb2NhdG9yRHVtcHMoZm4sdGhpcyk7fSk7fSx0cmF2ZXJzZUFsbG9jYXRvckR1bXBzSW5EZXB0aEZpcnN0UG9zdE9yZGVyKGZuKXtjb25zdCB2aXNpdGVkRHVtcHM9bmV3IFdlYWtTZXQoKTtjb25zdCBvcGVuRHVtcHM9bmV3IFdlYWtTZXQoKTtmdW5jdGlvbiB2aXNpdChkdW1wKXtpZih2aXNpdGVkRHVtcHMuaGFzKGR1bXApKXJldHVybjtpZihvcGVuRHVtcHMuaGFzKGR1bXApKXt0aHJvdyBuZXcgRXJyb3IoZHVtcC51c2VyRnJpZW5kbHlOYW1lKycgY29udGFpbnMgYSBjeWNsZScpO30KLW9wZW5EdW1wcy5hZGQoZHVtcCk7ZHVtcC5vd25lZEJ5LmZvckVhY2goZnVuY3Rpb24ob3duZXJzaGlwTGluayl7dmlzaXQuY2FsbCh0aGlzLG93bmVyc2hpcExpbmsuc291cmNlKTt9LHRoaXMpO2R1bXAuY2hpbGRyZW4uZm9yRWFjaCh2aXNpdCx0aGlzKTtmbi5jYWxsKHRoaXMsZHVtcCk7dmlzaXRlZER1bXBzLmFkZChkdW1wKTtvcGVuRHVtcHMuZGVsZXRlKGR1bXApO30KLXRoaXMuaXRlcmF0ZUFsbFJvb3RBbGxvY2F0b3JEdW1wcyh2aXNpdCk7fSx0cmF2ZXJzZUFsbG9jYXRvckR1bXBzSW5EZXB0aEZpcnN0UHJlT3JkZXIoZm4pe2NvbnN0IHZpc2l0ZWREdW1wcz1uZXcgV2Vha1NldCgpO2Z1bmN0aW9uIHZpc2l0KGR1bXApe2lmKHZpc2l0ZWREdW1wcy5oYXMoZHVtcCkpcmV0dXJuO2lmKGR1bXAub3ducyE9PXVuZGVmaW5lZCYmIXZpc2l0ZWREdW1wcy5oYXMoZHVtcC5vd25zLnRhcmdldCkpe3JldHVybjt9Ci1pZihkdW1wLnBhcmVudCE9PXVuZGVmaW5lZCYmIXZpc2l0ZWREdW1wcy5oYXMoZHVtcC5wYXJlbnQpKXtyZXR1cm47fQotZm4uY2FsbCh0aGlzLGR1bXApO3Zpc2l0ZWREdW1wcy5hZGQoZHVtcCk7ZHVtcC5vd25lZEJ5LmZvckVhY2goZnVuY3Rpb24ob3duZXJzaGlwTGluayl7dmlzaXQuY2FsbCh0aGlzLG93bmVyc2hpcExpbmsuc291cmNlKTt9LHRoaXMpO2R1bXAuY2hpbGRyZW4uZm9yRWFjaCh2aXNpdCx0aGlzKTt9Ci10aGlzLml0ZXJhdGVBbGxSb290QWxsb2NhdG9yRHVtcHModmlzaXQpO319O3RyLm1vZGVsLkV2ZW50UmVnaXN0cnkucmVnaXN0ZXIoR2xvYmFsTWVtb3J5RHVtcCx7bmFtZTonZ2xvYmFsTWVtb3J5RHVtcCcscGx1cmFsTmFtZTonZ2xvYmFsTWVtb3J5RHVtcHMnfSk7cmV0dXJue0dsb2JhbE1lbW9yeUR1bXAsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IEluc3RhbnRFdmVudFR5cGU9e0dMT0JBTDoxLFBST0NFU1M6Mn07ZnVuY3Rpb24gSW5zdGFudEV2ZW50KGNhdGVnb3J5LHRpdGxlLGNvbG9ySWQsc3RhcnQsYXJncyl7dHIubW9kZWwuVGltZWRFdmVudC5jYWxsKHRoaXMsc3RhcnQpO3RoaXMuY2F0ZWdvcnk9Y2F0ZWdvcnl8fCcnO3RoaXMudGl0bGU9dGl0bGU7dGhpcy5jb2xvcklkPWNvbG9ySWQ7dGhpcy5hcmdzPWFyZ3M7dGhpcy50eXBlPXVuZGVmaW5lZDt9Ci1JbnN0YW50RXZlbnQucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuVGltZWRFdmVudC5wcm90b3R5cGV9O2Z1bmN0aW9uIEdsb2JhbEluc3RhbnRFdmVudChjYXRlZ29yeSx0aXRsZSxjb2xvcklkLHN0YXJ0LGFyZ3Mpe0luc3RhbnRFdmVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50eXBlPUluc3RhbnRFdmVudFR5cGUuR0xPQkFMO30KLUdsb2JhbEluc3RhbnRFdmVudC5wcm90b3R5cGU9e19fcHJvdG9fXzpJbnN0YW50RXZlbnQucHJvdG90eXBlLGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ0dsb2JhbCBpbnN0YW50IGV2ZW50ICcrdGhpcy50aXRsZSsnIEAgJysKLXRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Ncy5mb3JtYXQoc3RhcnQpO319O2Z1bmN0aW9uIFByb2Nlc3NJbnN0YW50RXZlbnQoY2F0ZWdvcnksdGl0bGUsY29sb3JJZCxzdGFydCxhcmdzKXtJbnN0YW50RXZlbnQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudHlwZT1JbnN0YW50RXZlbnRUeXBlLlBST0NFU1M7fQotUHJvY2Vzc0luc3RhbnRFdmVudC5wcm90b3R5cGU9e19fcHJvdG9fXzpJbnN0YW50RXZlbnQucHJvdG90eXBlLGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ1Byb2Nlc3MtbGV2ZWwgaW5zdGFudCBldmVudCAnK3RoaXMudGl0bGUrJyBAICcrCi10ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMuZm9ybWF0KHN0YXJ0KTt9fTt0ci5tb2RlbC5FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKEluc3RhbnRFdmVudCx7bmFtZTonaW5zdGFudEV2ZW50JyxwbHVyYWxOYW1lOidpbnN0YW50RXZlbnRzJ30pO3JldHVybntHbG9iYWxJbnN0YW50RXZlbnQsUHJvY2Vzc0luc3RhbnRFdmVudCxJbnN0YW50RXZlbnRUeXBlLEluc3RhbnRFdmVudCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgQ3B1PXRyLm1vZGVsLkNwdTtjb25zdCBQcm9jZXNzQmFzZT10ci5tb2RlbC5Qcm9jZXNzQmFzZTtmdW5jdGlvbiBLZXJuZWwobW9kZWwpe1Byb2Nlc3NCYXNlLmNhbGwodGhpcyxtb2RlbCk7dGhpcy5jcHVzPXt9O3RoaXMuc29mdHdhcmVNZWFzdXJlZENwdUNvdW50Xz11bmRlZmluZWQ7fQotS2VybmVsLmNvbXBhcmU9ZnVuY3Rpb24oeCx5KXtyZXR1cm4gMDt9O0tlcm5lbC5wcm90b3R5cGU9e19fcHJvdG9fXzpQcm9jZXNzQmFzZS5wcm90b3R5cGUsY29tcGFyZVRvKHRoYXQpe3JldHVybiBLZXJuZWwuY29tcGFyZSh0aGlzLHRoYXQpO30sZ2V0IHVzZXJGcmllbmRseU5hbWUoKXtyZXR1cm4nS2VybmVsJzt9LGdldCB1c2VyRnJpZW5kbHlEZXRhaWxzKCl7cmV0dXJuJ0tlcm5lbCc7fSxnZXQgc3RhYmxlSWQoKXtyZXR1cm4nS2VybmVsJzt9LGdldE9yQ3JlYXRlQ3B1KGNwdU51bWJlcil7aWYoIXRoaXMuY3B1c1tjcHVOdW1iZXJdKXt0aGlzLmNwdXNbY3B1TnVtYmVyXT1uZXcgQ3B1KHRoaXMsY3B1TnVtYmVyKTt9Ci1yZXR1cm4gdGhpcy5jcHVzW2NwdU51bWJlcl07fSxnZXQgc29mdHdhcmVNZWFzdXJlZENwdUNvdW50KCl7cmV0dXJuIHRoaXMuc29mdHdhcmVNZWFzdXJlZENwdUNvdW50Xzt9LHNldCBzb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnQoc29mdHdhcmVNZWFzdXJlZENwdUNvdW50KXtpZih0aGlzLnNvZnR3YXJlTWVhc3VyZWRDcHVDb3VudF8hPT11bmRlZmluZWQmJnRoaXMuc29mdHdhcmVNZWFzdXJlZENwdUNvdW50XyE9PXNvZnR3YXJlTWVhc3VyZWRDcHVDb3VudCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2hhbmdlIHRoZSBzb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnQgb25jZSBpdCBpcyBzZXQnKTt9Ci10aGlzLnNvZnR3YXJlTWVhc3VyZWRDcHVDb3VudF89c29mdHdhcmVNZWFzdXJlZENwdUNvdW50O30sZ2V0IGJlc3RHdWVzc0F0Q3B1Q291bnQoKXtjb25zdCByZWFsQ3B1Q291bnQ9T2JqZWN0LmtleXModGhpcy5jcHVzKS5sZW5ndGg7aWYocmVhbENwdUNvdW50IT09MCl7cmV0dXJuIHJlYWxDcHVDb3VudDt9Ci1yZXR1cm4gdGhpcy5zb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnQ7fSx1cGRhdGVCb3VuZHMoKXtQcm9jZXNzQmFzZS5wcm90b3R5cGUudXBkYXRlQm91bmRzLmNhbGwodGhpcyk7Zm9yKGNvbnN0IGNwdU51bWJlciBpbiB0aGlzLmNwdXMpe2NvbnN0IGNwdT10aGlzLmNwdXNbY3B1TnVtYmVyXTtjcHUudXBkYXRlQm91bmRzKCk7dGhpcy5ib3VuZHMuYWRkUmFuZ2UoY3B1LmJvdW5kcyk7fX0sY3JlYXRlU3ViU2xpY2VzKCl7UHJvY2Vzc0Jhc2UucHJvdG90eXBlLmNyZWF0ZVN1YlNsaWNlcy5jYWxsKHRoaXMpO2Zvcihjb25zdCBjcHVOdW1iZXIgaW4gdGhpcy5jcHVzKXtjb25zdCBjcHU9dGhpcy5jcHVzW2NwdU51bWJlcl07Y3B1LmNyZWF0ZVN1YlNsaWNlcygpO319LGFkZENhdGVnb3JpZXNUb0RpY3QoY2F0ZWdvcmllc0RpY3Qpe1Byb2Nlc3NCYXNlLnByb3RvdHlwZS5hZGRDYXRlZ29yaWVzVG9EaWN0LmNhbGwodGhpcyxjYXRlZ29yaWVzRGljdCk7Zm9yKGNvbnN0IGNwdU51bWJlciBpbiB0aGlzLmNwdXMpe3RoaXMuY3B1c1tjcHVOdW1iZXJdLmFkZENhdGVnb3JpZXNUb0RpY3QoY2F0ZWdvcmllc0RpY3QpO319LGdldFNldHRpbmdzS2V5KCl7cmV0dXJuJ2tlcm5lbCc7fSwqY2hpbGRFdmVudENvbnRhaW5lcnMoKXt5aWVsZCpQcm9jZXNzQmFzZS5wcm90b3R5cGUuY2hpbGRFdmVudENvbnRhaW5lcnMuY2FsbCh0aGlzKTt5aWVsZCpPYmplY3QudmFsdWVzKHRoaXMuY3B1cyk7fSx9O3JldHVybntLZXJuZWwsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIE1vZGVsSW5kaWNlcyhtb2RlbCl7dGhpcy5mbG93RXZlbnRzQnlJZF89e307bW9kZWwuZmxvd0V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGZlKXtpZihmZS5pZCE9PXVuZGVmaW5lZCl7aWYoIXRoaXMuZmxvd0V2ZW50c0J5SWRfLmhhc093blByb3BlcnR5KGZlLmlkKSl7dGhpcy5mbG93RXZlbnRzQnlJZF9bZmUuaWRdPVtdO30KLXRoaXMuZmxvd0V2ZW50c0J5SWRfW2ZlLmlkXS5wdXNoKGZlKTt9fSx0aGlzKTt9Ci1Nb2RlbEluZGljZXMucHJvdG90eXBlPXthZGRFdmVudFdpdGhJZChpZCxldmVudCl7aWYoIXRoaXMuZmxvd0V2ZW50c0J5SWRfLmhhc093blByb3BlcnR5KGlkKSl7dGhpcy5mbG93RXZlbnRzQnlJZF9baWRdPVtdO30KLXRoaXMuZmxvd0V2ZW50c0J5SWRfW2lkXS5wdXNoKGV2ZW50KTt9LGdldEZsb3dFdmVudHNXaXRoSWQoaWQpe2lmKCF0aGlzLmZsb3dFdmVudHNCeUlkXy5oYXNPd25Qcm9wZXJ0eShpZCkpe3JldHVybltdO30KLXJldHVybiB0aGlzLmZsb3dFdmVudHNCeUlkX1tpZF07fX07cmV0dXJue01vZGVsSW5kaWNlcyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gTW9kZWxTdGF0cygpe3RoaXMudHJhY2VFdmVudENvdW50c0J5S2V5Xz1uZXcgTWFwKCk7dGhpcy5hbGxUcmFjZUV2ZW50U3RhdHNfPVtdO3RoaXMudHJhY2VFdmVudFN0YXRzSW5UaW1lSW50ZXJ2YWxzXz1uZXcgTWFwKCk7dGhpcy5hbGxUcmFjZUV2ZW50U3RhdHNJblRpbWVJbnRlcnZhbHNfPVtdO3RoaXMuaGFzRXZlbnRTaXplc2luQnl0ZXNfPWZhbHNlO3RoaXMudHJhY2VJbXBvcnREdXJhdGlvbk1zXz11bmRlZmluZWQ7fQotTW9kZWxTdGF0cy5wcm90b3R5cGU9e1RJTUVfSU5URVJWQUxfU0laRV9JTl9NUzoxMDAsd2lsbFByb2Nlc3NCYXNpY1RyYWNlRXZlbnQocGhhc2UsY2F0ZWdvcnksdGl0bGUsdHMsb3B0X2V2ZW50U2l6ZWluQnl0ZXMpe2NvbnN0IGtleT1waGFzZSsnLycrY2F0ZWdvcnkrJy8nK3RpdGxlO2xldCBldmVudFN0YXRzPXRoaXMudHJhY2VFdmVudENvdW50c0J5S2V5Xy5nZXQoa2V5KTtpZihldmVudFN0YXRzPT09dW5kZWZpbmVkKXtldmVudFN0YXRzPXtwaGFzZSxjYXRlZ29yeSx0aXRsZSxudW1FdmVudHM6MCx0b3RhbEV2ZW50U2l6ZWluQnl0ZXM6MH07dGhpcy50cmFjZUV2ZW50Q291bnRzQnlLZXlfLnNldChrZXksZXZlbnRTdGF0cyk7dGhpcy5hbGxUcmFjZUV2ZW50U3RhdHNfLnB1c2goZXZlbnRTdGF0cyk7fQotZXZlbnRTdGF0cy5udW1FdmVudHMrKztjb25zdCB0aW1lSW50ZXJ2YWxLZXk9TWF0aC5mbG9vcih0ci5iLlVuaXQudGltZXN0YW1wRnJvbVVzKHRzKS90aGlzLlRJTUVfSU5URVJWQUxfU0laRV9JTl9NUyk7bGV0IGV2ZW50U3RhdHNCeVRpbWVJbnZlcnZhbD10aGlzLnRyYWNlRXZlbnRTdGF0c0luVGltZUludGVydmFsc18uZ2V0KHRpbWVJbnRlcnZhbEtleSk7aWYoZXZlbnRTdGF0c0J5VGltZUludmVydmFsPT09dW5kZWZpbmVkKXtldmVudFN0YXRzQnlUaW1lSW52ZXJ2YWw9e3RpbWVJbnRlcnZhbDp0aW1lSW50ZXJ2YWxLZXksbnVtRXZlbnRzOjAsdG90YWxFdmVudFNpemVpbkJ5dGVzOjB9O3RoaXMudHJhY2VFdmVudFN0YXRzSW5UaW1lSW50ZXJ2YWxzXy5zZXQodGltZUludGVydmFsS2V5LGV2ZW50U3RhdHNCeVRpbWVJbnZlcnZhbCk7dGhpcy5hbGxUcmFjZUV2ZW50U3RhdHNJblRpbWVJbnRlcnZhbHNfLnB1c2goZXZlbnRTdGF0c0J5VGltZUludmVydmFsKTt9Ci1ldmVudFN0YXRzQnlUaW1lSW52ZXJ2YWwubnVtRXZlbnRzKys7aWYob3B0X2V2ZW50U2l6ZWluQnl0ZXMhPT11bmRlZmluZWQpe3RoaXMuaGFzRXZlbnRTaXplc2luQnl0ZXNfPXRydWU7ZXZlbnRTdGF0cy50b3RhbEV2ZW50U2l6ZWluQnl0ZXMrPW9wdF9ldmVudFNpemVpbkJ5dGVzO2V2ZW50U3RhdHNCeVRpbWVJbnZlcnZhbC50b3RhbEV2ZW50U2l6ZWluQnl0ZXMrPW9wdF9ldmVudFNpemVpbkJ5dGVzO319LGdldCBhbGxUcmFjZUV2ZW50U3RhdHMoKXtyZXR1cm4gdGhpcy5hbGxUcmFjZUV2ZW50U3RhdHNfO30sZ2V0IGFsbFRyYWNlRXZlbnRTdGF0c0luVGltZUludGVydmFscygpe3JldHVybiB0aGlzLmFsbFRyYWNlRXZlbnRTdGF0c0luVGltZUludGVydmFsc187fSxnZXQgaGFzRXZlbnRTaXplc2luQnl0ZXMoKXtyZXR1cm4gdGhpcy5oYXNFdmVudFNpemVzaW5CeXRlc187fSxnZXQgdHJhY2VJbXBvcnREdXJhdGlvbk1zKCl7cmV0dXJuIHRoaXMudHJhY2VJbXBvcnREdXJhdGlvbk1zXzt9LHNldCB0cmFjZUltcG9ydER1cmF0aW9uTXModHJhY2VJbXBvcnREdXJhdGlvbk1zKXt0aGlzLnRyYWNlSW1wb3J0RHVyYXRpb25Nc189dHJhY2VJbXBvcnREdXJhdGlvbk1zO319O3JldHVybntNb2RlbFN0YXRzLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBWTVJlZ2lvbihzdGFydEFkZHJlc3Msc2l6ZUluQnl0ZXMscHJvdGVjdGlvbkZsYWdzLG1hcHBlZEZpbGUsYnl0ZVN0YXRzKXt0aGlzLnN0YXJ0QWRkcmVzcz1zdGFydEFkZHJlc3M7dGhpcy5zaXplSW5CeXRlcz1zaXplSW5CeXRlczt0aGlzLnByb3RlY3Rpb25GbGFncz1wcm90ZWN0aW9uRmxhZ3M7dGhpcy5tYXBwZWRGaWxlPW1hcHBlZEZpbGV8fCcnO3RoaXMuYnl0ZVN0YXRzPWJ5dGVTdGF0c3x8e307fQotVk1SZWdpb24uUFJPVEVDVElPTl9GTEFHX1JFQUQ9NDtWTVJlZ2lvbi5QUk9URUNUSU9OX0ZMQUdfV1JJVEU9MjtWTVJlZ2lvbi5QUk9URUNUSU9OX0ZMQUdfRVhFQ1VURT0xO1ZNUmVnaW9uLlBST1RFQ1RJT05fRkxBR19NQVlTSEFSRT0xMjg7Vk1SZWdpb24ucHJvdG90eXBlPXtnZXQgdW5pcXVlSWRXaXRoaW5Qcm9jZXNzKCl7cmV0dXJuIHRoaXMubWFwcGVkRmlsZSsnIycrdGhpcy5zdGFydEFkZHJlc3M7fSxnZXQgcHJvdGVjdGlvbkZsYWdzVG9TdHJpbmcoKXtpZih0aGlzLnByb3RlY3Rpb25GbGFncz09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO3JldHVybigodGhpcy5wcm90ZWN0aW9uRmxhZ3MmVk1SZWdpb24uUFJPVEVDVElPTl9GTEFHX1JFQUQ/J3InOictJykrCi0odGhpcy5wcm90ZWN0aW9uRmxhZ3MmVk1SZWdpb24uUFJPVEVDVElPTl9GTEFHX1dSSVRFPyd3JzonLScpKwotKHRoaXMucHJvdGVjdGlvbkZsYWdzJlZNUmVnaW9uLlBST1RFQ1RJT05fRkxBR19FWEVDVVRFPyd4JzonLScpKwotKHRoaXMucHJvdGVjdGlvbkZsYWdzJlZNUmVnaW9uLlBST1RFQ1RJT05fRkxBR19NQVlTSEFSRT8ncyc6J3AnKSk7fX07Vk1SZWdpb24uZnJvbURpY3Q9ZnVuY3Rpb24oZGljdCl7cmV0dXJuIG5ldyBWTVJlZ2lvbihkaWN0LnN0YXJ0QWRkcmVzcyxkaWN0LnNpemVJbkJ5dGVzLGRpY3QucHJvdGVjdGlvbkZsYWdzLGRpY3QubWFwcGVkRmlsZSxkaWN0LmJ5dGVTdGF0cyk7fTtmdW5jdGlvbiBWTVJlZ2lvbkNsYXNzaWZpY2F0aW9uTm9kZShvcHRfcnVsZSl7dGhpcy5ydWxlXz1vcHRfcnVsZXx8Vk1SZWdpb25DbGFzc2lmaWNhdGlvbk5vZGUuQ0xBU1NJRklDQVRJT05fUlVMRVM7dGhpcy5oYXNSZWdpb25zPWZhbHNlO3RoaXMuc2l6ZUluQnl0ZXM9dW5kZWZpbmVkO3RoaXMuYnl0ZVN0YXRzPXt9O3RoaXMuY2hpbGRyZW5fPXVuZGVmaW5lZDt0aGlzLnJlZ2lvbnNfPVtdO30KLVZNUmVnaW9uQ2xhc3NpZmljYXRpb25Ob2RlLkNMQVNTSUZJQ0FUSU9OX1JVTEVTPXtuYW1lOidUb3RhbCcsY2hpbGRyZW46W3tuYW1lOidBbmRyb2lkJyxmaWxlOi9eXC9kZXZcL2FzaG1lbSg/IVwvbGliYyBtYWxsb2MpLyxjaGlsZHJlbjpbe25hbWU6J0phdmEgcnVudGltZScsZmlsZTovXlwvZGV2XC9hc2htZW1cL2RhbHZpay0vLGNoaWxkcmVuOlt7bmFtZTonU3BhY2VzJyxmaWxlOi9cL2RhbHZpay0oYWxsb2N8bWFpbnxsYXJnZSBvYmplY3R8bm9uIG1vdmluZ3x6eWdvdGUpIHNwYWNlLyxjaGlsZHJlbjpbe25hbWU6J05vcm1hbCcsZmlsZTovXC9kYWx2aWstKGFsbG9jfG1haW4pL30se25hbWU6J0xhcmdlJyxmaWxlOi9cL2RhbHZpay1sYXJnZSBvYmplY3QvfSx7bmFtZTonWnlnb3RlJyxmaWxlOi9cL2RhbHZpay16eWdvdGUvfSx7bmFtZTonTm9uLW1vdmluZycsZmlsZTovXC9kYWx2aWstbm9uIG1vdmluZy99XX0se25hbWU6J0xpbmVhciBBbGxvYycsZmlsZTovXC9kYWx2aWstTGluZWFyQWxsb2MvfSx7bmFtZTonSW5kaXJlY3QgUmVmZXJlbmNlIFRhYmxlJyxmaWxlOi9cL2RhbHZpay1pbmRpcmVjdC5yZWYvfSx7bmFtZTonQ2FjaGUnLGZpbGU6L1wvZGFsdmlrLWppdC1jb2RlLWNhY2hlL30se25hbWU6J0FjY291bnRpbmcnfV19LHtuYW1lOidDdXJzb3InLGZpbGU6L1wvQ3Vyc29yV2luZG93L30se25hbWU6J0FzaG1lbSd9XX0se25hbWU6J05hdGl2ZSBoZWFwJyxmaWxlOi9eKChcW2hlYXBcXSl8KFxbYW5vbjopfChcL2RldlwvYXNobWVtXC9saWJjIG1hbGxvYyl8KFxbZGlzY291bnRlZCB0cmFjaW5nIG92ZXJoZWFkXF0pfCQpL30se25hbWU6J1N0YWNrJyxmaWxlOi9eXFtzdGFjay99LHtuYW1lOidGaWxlcycsZmlsZTovXC4oKCgoamFyKXwoYXBrKXwodHRmKXwob2RleCl8KG9hdCl8KGFydCkpJCl8KGRleCl8KHNvKSkvLGNoaWxkcmVuOlt7bmFtZTonc28nLGZpbGU6L1wuc28vfSx7bmFtZTonamFyJyxmaWxlOi9cLmphciQvfSx7bmFtZTonYXBrJyxmaWxlOi9cLmFwayQvfSx7bmFtZTondHRmJyxmaWxlOi9cLnR0ZiQvfSx7bmFtZTonZGV4JyxmaWxlOi9cLigoZGV4KXwob2RleCQpKS99LHtuYW1lOidvYXQnLGZpbGU6L1wub2F0JC99LHtuYW1lOidhcnQnLGZpbGU6L1wuYXJ0JC99XX0se25hbWU6J0RldmljZXMnLGZpbGU6LyheXC9kZXZcLyl8KGFub25faW5vZGU6ZG1hYnVmKS8sY2hpbGRyZW46W3tuYW1lOidHUFUnLGZpbGU6L1wvKChudil8KG1hbGkpfChrZ3NsKSkvfSx7bmFtZTonRE1BJyxmaWxlOi9hbm9uX2lub2RlOmRtYWJ1Zi99XX1dfTtWTVJlZ2lvbkNsYXNzaWZpY2F0aW9uTm9kZS5PVEhFUl9SVUxFPXtuYW1lOidPdGhlcid9O1ZNUmVnaW9uQ2xhc3NpZmljYXRpb25Ob2RlLmZyb21SZWdpb25zPWZ1bmN0aW9uKHJlZ2lvbnMsb3B0X3J1bGVzKXtjb25zdCB0cmVlPW5ldyBWTVJlZ2lvbkNsYXNzaWZpY2F0aW9uTm9kZShvcHRfcnVsZXMpO3RyZWUucmVnaW9uc189cmVnaW9ucztmb3IobGV0IGk9MDtpPHJlZ2lvbnMubGVuZ3RoO2krKyl7dHJlZS5hZGRTdGF0c0Zyb21SZWdpb25fKHJlZ2lvbnNbaV0pO30KLXJldHVybiB0cmVlO307Vk1SZWdpb25DbGFzc2lmaWNhdGlvbk5vZGUucHJvdG90eXBlPXtnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5ydWxlXy5uYW1lO30sZ2V0IGNoaWxkcmVuKCl7aWYodGhpcy5pc0xlYWZOb2RlKXtyZXR1cm4gdW5kZWZpbmVkO30KLWlmKHRoaXMuY2hpbGRyZW5fPT09dW5kZWZpbmVkKXt0aGlzLmJ1aWxkVHJlZV8oKTt9Ci1yZXR1cm4gdGhpcy5jaGlsZHJlbl87fSxnZXQgcmVnaW9ucygpe2lmKCF0aGlzLmlzTGVhZk5vZGUpe3JldHVybiB1bmRlZmluZWQ7fQotcmV0dXJuIHRoaXMucmVnaW9uc187fSxnZXQgYWxsUmVnaW9uc0ZvclRlc3RpbmcoKXtpZih0aGlzLnJlZ2lvbnNfIT09dW5kZWZpbmVkKXtpZih0aGlzLmNoaWxkcmVuXyE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBlcnJvcjogYSBWTSByZWdpb24gY2xhc3NpZmljYXRpb24gbm9kZSAnKydjYW5ub3QgaGF2ZSBib3RoIHJlZ2lvbnMgYW5kIGNoaWxkcmVuJyk7fQotcmV0dXJuIHRoaXMucmVnaW9uc187fQotbGV0IHJlZ2lvbnM9W107dGhpcy5jaGlsZHJlbl8uZm9yRWFjaChmdW5jdGlvbihjaGlsZE5vZGUpe3JlZ2lvbnM9cmVnaW9ucy5jb25jYXQoY2hpbGROb2RlLmFsbFJlZ2lvbnNGb3JUZXN0aW5nKTt9KTtyZXR1cm4gcmVnaW9uczt9LGdldCBpc0xlYWZOb2RlKCl7Y29uc3QgY2hpbGRyZW49dGhpcy5ydWxlXy5jaGlsZHJlbjtyZXR1cm4gY2hpbGRyZW49PT11bmRlZmluZWR8fGNoaWxkcmVuLmxlbmd0aD09PTA7fSxhZGRSZWdpb24ocmVnaW9uKXt0aGlzLmFkZFJlZ2lvblJlY3Vyc2l2ZWx5XyhyZWdpb24sdHJ1ZSk7fSxzb21lUmVnaW9uKGZuLG9wdF90aGlzKXtpZih0aGlzLnJlZ2lvbnNfIT09dW5kZWZpbmVkKXtyZXR1cm4gdGhpcy5yZWdpb25zXy5zb21lKGZuLG9wdF90aGlzKTt9Ci1yZXR1cm4gdGhpcy5jaGlsZHJlbl8uc29tZShmdW5jdGlvbihjaGlsZE5vZGUpe3JldHVybiBjaGlsZE5vZGUuc29tZVJlZ2lvbihmbixvcHRfdGhpcyk7fSk7fSxhZGRSZWdpb25SZWN1cnNpdmVseV8ocmVnaW9uLGFkZFN0YXRzVG9UaGlzTm9kZSl7aWYoYWRkU3RhdHNUb1RoaXNOb2RlKXt0aGlzLmFkZFN0YXRzRnJvbVJlZ2lvbl8ocmVnaW9uKTt9Ci1pZih0aGlzLnJlZ2lvbnNfIT09dW5kZWZpbmVkKXtpZih0aGlzLmNoaWxkcmVuXyE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBlcnJvcjogYSBWTSByZWdpb24gY2xhc3NpZmljYXRpb24gbm9kZSAnKydjYW5ub3QgaGF2ZSBib3RoIHJlZ2lvbnMgYW5kIGNoaWxkcmVuJyk7fQotdGhpcy5yZWdpb25zXy5wdXNoKHJlZ2lvbik7cmV0dXJuO30KLWZ1bmN0aW9uIHJlZ2lvblJvd01hdGNoZXNDaGlsZE5pZGUoY2hpbGQpe2NvbnN0IGZpbGVSZWdFeHA9Y2hpbGQucnVsZV8uZmlsZTtpZihmaWxlUmVnRXhwPT09dW5kZWZpbmVkKXJldHVybiB0cnVlO3JldHVybiBmaWxlUmVnRXhwLnRlc3QocmVnaW9uLm1hcHBlZEZpbGUpO30KLWxldCBtYXRjaGVkQ2hpbGQ9dGhpcy5jaGlsZHJlbl8uZmluZChyZWdpb25Sb3dNYXRjaGVzQ2hpbGROaWRlKTtpZihtYXRjaGVkQ2hpbGQ9PT11bmRlZmluZWQpe2lmKHRoaXMuY2hpbGRyZW5fLmxlbmd0aCE9PXRoaXMucnVsZV8uY2hpbGRyZW4ubGVuZ3RoKXt0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGVycm9yJyk7fQotbWF0Y2hlZENoaWxkPW5ldyBWTVJlZ2lvbkNsYXNzaWZpY2F0aW9uTm9kZShWTVJlZ2lvbkNsYXNzaWZpY2F0aW9uTm9kZS5PVEhFUl9SVUxFKTt0aGlzLmNoaWxkcmVuXy5wdXNoKG1hdGNoZWRDaGlsZCk7fQotbWF0Y2hlZENoaWxkLmFkZFJlZ2lvblJlY3Vyc2l2ZWx5XyhyZWdpb24sdHJ1ZSk7fSxidWlsZFRyZWVfKCl7Y29uc3QgY2FjaGVkUmVnaW9ucz10aGlzLnJlZ2lvbnNfO3RoaXMucmVnaW9uc189dW5kZWZpbmVkO3RoaXMuYnVpbGRDaGlsZE5vZGVzUmVjdXJzaXZlbHlfKCk7Zm9yKGxldCBpPTA7aTxjYWNoZWRSZWdpb25zLmxlbmd0aDtpKyspe3RoaXMuYWRkUmVnaW9uUmVjdXJzaXZlbHlfKGNhY2hlZFJlZ2lvbnNbaV0sZmFsc2UpO319LGJ1aWxkQ2hpbGROb2Rlc1JlY3Vyc2l2ZWx5Xygpe2lmKHRoaXMuY2hpbGRyZW5fIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGVycm9yOiBDbGFzc2lmaWNhdGlvbiBub2RlIGFscmVhZHkgaGFzIGNoaWxkcmVuJyk7fQotaWYodGhpcy5yZWdpb25zXyE9PXVuZGVmaW5lZCYmdGhpcy5yZWdpb25zXy5sZW5ndGghPT0wKXt0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGVycm9yOiBDbGFzc2lmaWNhdGlvbiBub2RlIHNob3VsZCBoYXZlIG5vIHJlZ2lvbnMnKTt9Ci1pZih0aGlzLmlzTGVhZk5vZGUpe3JldHVybjt9Ci10aGlzLnJlZ2lvbnNfPXVuZGVmaW5lZDt0aGlzLmNoaWxkcmVuXz10aGlzLnJ1bGVfLmNoaWxkcmVuLm1hcChmdW5jdGlvbihjaGlsZFJ1bGUpe2NvbnN0IGNoaWxkPW5ldyBWTVJlZ2lvbkNsYXNzaWZpY2F0aW9uTm9kZShjaGlsZFJ1bGUpO2NoaWxkLmJ1aWxkQ2hpbGROb2Rlc1JlY3Vyc2l2ZWx5XygpO3JldHVybiBjaGlsZDt9KTt9LGFkZFN0YXRzRnJvbVJlZ2lvbl8ocmVnaW9uKXt0aGlzLmhhc1JlZ2lvbnM9dHJ1ZTtjb25zdCByZWdpb25TaXplSW5CeXRlcz1yZWdpb24uc2l6ZUluQnl0ZXM7aWYocmVnaW9uU2l6ZUluQnl0ZXMhPT11bmRlZmluZWQpe3RoaXMuc2l6ZUluQnl0ZXM9KHRoaXMuc2l6ZUluQnl0ZXN8fDApK3JlZ2lvblNpemVJbkJ5dGVzO30KLWNvbnN0IHRoaXNCeXRlU3RhdHM9dGhpcy5ieXRlU3RhdHM7Y29uc3QgcmVnaW9uQnl0ZVN0YXRzPXJlZ2lvbi5ieXRlU3RhdHM7Zm9yKGNvbnN0IGJ5dGVTdGF0TmFtZSBpbiByZWdpb25CeXRlU3RhdHMpe2NvbnN0IHJlZ2lvbkJ5dGVTdGF0VmFsdWU9cmVnaW9uQnl0ZVN0YXRzW2J5dGVTdGF0TmFtZV07aWYocmVnaW9uQnl0ZVN0YXRWYWx1ZT09PXVuZGVmaW5lZCljb250aW51ZTt0aGlzQnl0ZVN0YXRzW2J5dGVTdGF0TmFtZV09KHRoaXNCeXRlU3RhdHNbYnl0ZVN0YXROYW1lXXx8MCkrcmVnaW9uQnl0ZVN0YXRWYWx1ZTt9fX07cmV0dXJue1ZNUmVnaW9uLFZNUmVnaW9uQ2xhc3NpZmljYXRpb25Ob2RlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBESVNDT1VOVEVEX0FMTE9DQVRPUl9OQU1FUz1bJ3dpbmhlYXAnLCdtYWxsb2MnXTtjb25zdCBUUkFDSU5HX09WRVJIRUFEX1BBVEg9WydhbGxvY2F0ZWRfb2JqZWN0cycsJ3RyYWNpbmdfb3ZlcmhlYWQnXTtjb25zdCBTSVpFX05VTUVSSUNfTkFNRT10ci5tb2RlbC5NZW1vcnlBbGxvY2F0b3JEdW1wLlNJWkVfTlVNRVJJQ19OQU1FO2NvbnN0IFJFU0lERU5UX1NJWkVfTlVNRVJJQ19OQU1FPXRyLm1vZGVsLk1lbW9yeUFsbG9jYXRvckR1bXAuUkVTSURFTlRfU0laRV9OVU1FUklDX05BTUU7ZnVuY3Rpb24gZ2V0U2l6ZU51bWVyaWNWYWx1ZShkdW1wLHNpemVOdW1lcmljTmFtZSl7Y29uc3Qgc2l6ZU51bWVyaWM9ZHVtcC5udW1lcmljc1tzaXplTnVtZXJpY05hbWVdO2lmKHNpemVOdW1lcmljPT09dW5kZWZpbmVkKXJldHVybiAwO3JldHVybiBzaXplTnVtZXJpYy52YWx1ZTt9Ci1mdW5jdGlvbiBQcm9jZXNzTWVtb3J5RHVtcChnbG9iYWxNZW1vcnlEdW1wLHByb2Nlc3Msc3RhcnQpe3RyLm1vZGVsLkNvbnRhaW5lck1lbW9yeUR1bXAuY2FsbCh0aGlzLHN0YXJ0KTt0aGlzLnByb2Nlc3M9cHJvY2Vzczt0aGlzLmdsb2JhbE1lbW9yeUR1bXA9Z2xvYmFsTWVtb3J5RHVtcDt0aGlzLnRvdGFscz11bmRlZmluZWQ7dGhpcy52bVJlZ2lvbnM9dW5kZWZpbmVkO3RoaXMuaGVhcER1bXBzPXVuZGVmaW5lZDt0aGlzLnRyYWNpbmdPdmVyaGVhZE93bmVyc2hpcFNldFVwXz1mYWxzZTt0aGlzLnRyYWNpbmdPdmVyaGVhZERpc2NvdW50ZWRGcm9tVm1SZWdpb25zXz1mYWxzZTt9Ci1Qcm9jZXNzTWVtb3J5RHVtcC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5Db250YWluZXJNZW1vcnlEdW1wLnByb3RvdHlwZSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybidQcm9jZXNzIG1lbW9yeSBkdW1wIGF0ICcrCi10ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMuZm9ybWF0KHRoaXMuc3RhcnQpO30sZ2V0IGNvbnRhaW5lck5hbWUoKXtyZXR1cm4gdGhpcy5wcm9jZXNzLnVzZXJGcmllbmRseU5hbWU7fSxnZXQgcHJvY2Vzc01lbW9yeUR1bXBzKCl7Y29uc3QgZHVtcHM9e307ZHVtcHNbdGhpcy5wcm9jZXNzLnBpZF09dGhpcztyZXR1cm4gZHVtcHM7fSxnZXQgaGFzT3duVm1SZWdpb25zKCl7cmV0dXJuIHRoaXMudm1SZWdpb25zIT09dW5kZWZpbmVkO30sc2V0VXBUcmFjaW5nT3ZlcmhlYWRPd25lcnNoaXAob3B0X21vZGVsKXtpZih0aGlzLnRyYWNpbmdPdmVyaGVhZE93bmVyc2hpcFNldFVwXylyZXR1cm47dGhpcy50cmFjaW5nT3ZlcmhlYWRPd25lcnNoaXBTZXRVcF89dHJ1ZTtjb25zdCB0cmFjaW5nRHVtcD10aGlzLmdldE1lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lKCd0cmFjaW5nJyk7aWYodHJhY2luZ0R1bXA9PT11bmRlZmluZWR8fHRyYWNpbmdEdW1wLm93bnMhPT11bmRlZmluZWQpe3JldHVybjt9Ci1pZih0cmFjaW5nRHVtcC5vd25zIT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBoYXNEaXNjb3VudGVkRnJvbUFsbG9jYXRvckR1bXBzPURJU0NPVU5URURfQUxMT0NBVE9SX05BTUVTLnNvbWUoZnVuY3Rpb24oYWxsb2NhdG9yTmFtZSl7Y29uc3QgYWxsb2NhdG9yRHVtcD10aGlzLmdldE1lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lKGFsbG9jYXRvck5hbWUpO2lmKGFsbG9jYXRvckR1bXA9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9Ci1sZXQgbmV4dFBhdGhJbmRleD0wO2xldCBjdXJyZW50RHVtcD1hbGxvY2F0b3JEdW1wO2xldCBjdXJyZW50RnVsbE5hbWU9YWxsb2NhdG9yTmFtZTtmb3IoO25leHRQYXRoSW5kZXg8VFJBQ0lOR19PVkVSSEVBRF9QQVRILmxlbmd0aDtuZXh0UGF0aEluZGV4Kyspe2NvbnN0IGNoaWxkRnVsbE5hbWU9Y3VycmVudEZ1bGxOYW1lKycvJysKLVRSQUNJTkdfT1ZFUkhFQURfUEFUSFtuZXh0UGF0aEluZGV4XTtjb25zdCBjaGlsZER1bXA9dGhpcy5nZXRNZW1vcnlBbGxvY2F0b3JEdW1wQnlGdWxsTmFtZShjaGlsZEZ1bGxOYW1lKTtpZihjaGlsZER1bXA9PT11bmRlZmluZWQpYnJlYWs7Y3VycmVudER1bXA9Y2hpbGREdW1wO2N1cnJlbnRGdWxsTmFtZT1jaGlsZEZ1bGxOYW1lO30KLWZvcig7bmV4dFBhdGhJbmRleDxUUkFDSU5HX09WRVJIRUFEX1BBVEgubGVuZ3RoO25leHRQYXRoSW5kZXgrKyl7Y29uc3QgY2hpbGRGdWxsTmFtZT1jdXJyZW50RnVsbE5hbWUrJy8nKwotVFJBQ0lOR19PVkVSSEVBRF9QQVRIW25leHRQYXRoSW5kZXhdO2NvbnN0IGNoaWxkRHVtcD1uZXcgdHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcChjdXJyZW50RHVtcC5jb250YWluZXJNZW1vcnlEdW1wLGNoaWxkRnVsbE5hbWUpO2NoaWxkRHVtcC5wYXJlbnQ9Y3VycmVudER1bXA7Y3VycmVudER1bXAuY2hpbGRyZW4ucHVzaChjaGlsZER1bXApO2N1cnJlbnRGdWxsTmFtZT1jaGlsZEZ1bGxOYW1lO2N1cnJlbnREdW1wPWNoaWxkRHVtcDt9Ci1jb25zdCBvd25lcnNoaXBMaW5rPW5ldyB0ci5tb2RlbC5NZW1vcnlBbGxvY2F0b3JEdW1wTGluayh0cmFjaW5nRHVtcCxjdXJyZW50RHVtcCk7dHJhY2luZ0R1bXAub3ducz1vd25lcnNoaXBMaW5rO2N1cnJlbnREdW1wLm93bmVkQnkucHVzaChvd25lcnNoaXBMaW5rKTtyZXR1cm4gdHJ1ZTt9LHRoaXMpO2lmKGhhc0Rpc2NvdW50ZWRGcm9tQWxsb2NhdG9yRHVtcHMpe3RoaXMuZm9yY2VSZWJ1aWxkaW5nTWVtb3J5QWxsb2NhdG9yRHVtcEJ5RnVsbE5hbWVJbmRleCgpO319LGRpc2NvdW50VHJhY2luZ092ZXJoZWFkRnJvbVZtUmVnaW9ucyhvcHRfbW9kZWwpe2lmKHRoaXMudHJhY2luZ092ZXJoZWFkRGlzY291bnRlZEZyb21WbVJlZ2lvbnNfKXJldHVybjt0aGlzLnRyYWNpbmdPdmVyaGVhZERpc2NvdW50ZWRGcm9tVm1SZWdpb25zXz10cnVlO2NvbnN0IHRyYWNpbmdEdW1wPXRoaXMuZ2V0TWVtb3J5QWxsb2NhdG9yRHVtcEJ5RnVsbE5hbWUoJ3RyYWNpbmcnKTtpZih0cmFjaW5nRHVtcD09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgZGlzY291bnRlZFNpemU9Z2V0U2l6ZU51bWVyaWNWYWx1ZSh0cmFjaW5nRHVtcCxTSVpFX05VTUVSSUNfTkFNRSk7Y29uc3QgZGlzY291bnRlZFJlc2lkZW50U2l6ZT1nZXRTaXplTnVtZXJpY1ZhbHVlKHRyYWNpbmdEdW1wLFJFU0lERU5UX1NJWkVfTlVNRVJJQ19OQU1FKTtpZihkaXNjb3VudGVkU2l6ZTw9MCYmZGlzY291bnRlZFJlc2lkZW50U2l6ZTw9MClyZXR1cm47aWYodGhpcy50b3RhbHMhPT11bmRlZmluZWQpe2lmKHRoaXMudG90YWxzLnJlc2lkZW50Qnl0ZXMhPT11bmRlZmluZWQpe3RoaXMudG90YWxzLnJlc2lkZW50Qnl0ZXMtPWRpc2NvdW50ZWRSZXNpZGVudFNpemU7fQotaWYodGhpcy50b3RhbHMucGVha1Jlc2lkZW50Qnl0ZXMhPT11bmRlZmluZWQpe3RoaXMudG90YWxzLnBlYWtSZXNpZGVudEJ5dGVzLT1kaXNjb3VudGVkUmVzaWRlbnRTaXplO319Ci1pZih0aGlzLnZtUmVnaW9ucyE9PXVuZGVmaW5lZCl7Y29uc3QgaGFzU2l6ZUluQnl0ZXM9dGhpcy52bVJlZ2lvbnMuc2l6ZUluQnl0ZXMhPT11bmRlZmluZWQ7Y29uc3QgaGFzUHJpdmF0ZURpcnR5UmVzaWRlbnQ9dGhpcy52bVJlZ2lvbnMuYnl0ZVN0YXRzLnByaXZhdGVEaXJ0eVJlc2lkZW50IT09dW5kZWZpbmVkO2NvbnN0IGhhc1Byb3BvcnRpb25hbFJlc2lkZW50PXRoaXMudm1SZWdpb25zLmJ5dGVTdGF0cy5wcm9wb3J0aW9uYWxSZXNpZGVudCE9PXVuZGVmaW5lZDtpZigoaGFzU2l6ZUluQnl0ZXMmJmRpc2NvdW50ZWRTaXplPjApfHwoKGhhc1ByaXZhdGVEaXJ0eVJlc2lkZW50fHxoYXNQcm9wb3J0aW9uYWxSZXNpZGVudCkmJmRpc2NvdW50ZWRSZXNpZGVudFNpemU+MCkpe2NvbnN0IGJ5dGVTdGF0cz17fTtpZihoYXNQcml2YXRlRGlydHlSZXNpZGVudCl7Ynl0ZVN0YXRzLnByaXZhdGVEaXJ0eVJlc2lkZW50PS1kaXNjb3VudGVkUmVzaWRlbnRTaXplO30KLWlmKGhhc1Byb3BvcnRpb25hbFJlc2lkZW50KXtieXRlU3RhdHMucHJvcG9ydGlvbmFsUmVzaWRlbnQ9LWRpc2NvdW50ZWRSZXNpZGVudFNpemU7fQotdGhpcy52bVJlZ2lvbnMuYWRkUmVnaW9uKHRyLm1vZGVsLlZNUmVnaW9uLmZyb21EaWN0KHttYXBwZWRGaWxlOidbZGlzY291bnRlZCB0cmFjaW5nIG92ZXJoZWFkXScsc2l6ZUluQnl0ZXM6aGFzU2l6ZUluQnl0ZXM/LWRpc2NvdW50ZWRTaXplOnVuZGVmaW5lZCxieXRlU3RhdHN9KSk7fX19fTtQcm9jZXNzTWVtb3J5RHVtcC5ob29rVXBNb3N0UmVjZW50Vm1SZWdpb25zTGlua3M9ZnVuY3Rpb24ocHJvY2Vzc0R1bXBzKXtsZXQgbW9zdFJlY2VudFZtUmVnaW9ucz11bmRlZmluZWQ7cHJvY2Vzc0R1bXBzLmZvckVhY2goZnVuY3Rpb24ocHJvY2Vzc0R1bXApe2lmKHByb2Nlc3NEdW1wLnZtUmVnaW9ucyE9PXVuZGVmaW5lZCl7bW9zdFJlY2VudFZtUmVnaW9ucz1wcm9jZXNzRHVtcC52bVJlZ2lvbnM7fQotcHJvY2Vzc0R1bXAubW9zdFJlY2VudFZtUmVnaW9ucz1tb3N0UmVjZW50Vm1SZWdpb25zO30pO307dHIubW9kZWwuRXZlbnRSZWdpc3RyeS5yZWdpc3RlcihQcm9jZXNzTWVtb3J5RHVtcCx7bmFtZToncHJvY2Vzc01lbW9yeUR1bXAnLHBsdXJhbE5hbWU6J3Byb2Nlc3NNZW1vcnlEdW1wcyd9KTtyZXR1cm57UHJvY2Vzc01lbW9yeUR1bXAsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IFByb2Nlc3NCYXNlPXRyLm1vZGVsLlByb2Nlc3NCYXNlO2NvbnN0IFByb2Nlc3NJbnN0YW50RXZlbnQ9dHIubW9kZWwuUHJvY2Vzc0luc3RhbnRFdmVudDtjb25zdCBGcmFtZT10ci5tb2RlbC5GcmFtZTtjb25zdCBQcm9jZXNzTWVtb3J5RHVtcD10ci5tb2RlbC5Qcm9jZXNzTWVtb3J5RHVtcDtmdW5jdGlvbiBQcm9jZXNzKG1vZGVsLHBpZCl7aWYobW9kZWw9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignbW9kZWwgbXVzdCBiZSBwcm92aWRlZCcpO30KLWlmKHBpZD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdwaWQgbXVzdCBiZSBwcm92aWRlZCcpO30KLXRyLm1vZGVsLlByb2Nlc3NCYXNlLmNhbGwodGhpcyxtb2RlbCk7dGhpcy5waWQ9cGlkO3RoaXMubmFtZT11bmRlZmluZWQ7dGhpcy5sYWJlbHM9W107dGhpcy51cHRpbWVfc2Vjb25kcz0wO3RoaXMuaW5zdGFudEV2ZW50cz1bXTt0aGlzLm1lbW9yeUR1bXBzPVtdO3RoaXMuZnJhbWVzPVtdO3RoaXMuYWN0aXZpdGllcz1bXTt9Ci1Qcm9jZXNzLmNvbXBhcmU9ZnVuY3Rpb24oeCx5KXtsZXQgdG1wPXRyLm1vZGVsLlByb2Nlc3NCYXNlLmNvbXBhcmUoeCx5KTtpZih0bXApcmV0dXJuIHRtcDtpZih4Lm5hbWUhPT11bmRlZmluZWQpe2lmKHkubmFtZSE9PXVuZGVmaW5lZCl7dG1wPXgubmFtZS5sb2NhbGVDb21wYXJlKHkubmFtZSk7fWVsc2V7dG1wPS0xO319ZWxzZSBpZih5Lm5hbWUhPT11bmRlZmluZWQpe3RtcD0xO30KLWlmKHRtcClyZXR1cm4gdG1wO3RtcD10ci5iLmNvbXBhcmVBcnJheXMoeC5sYWJlbHMseS5sYWJlbHMsZnVuY3Rpb24oeCx5KXtyZXR1cm4geC5sb2NhbGVDb21wYXJlKHkpO30pO2lmKHRtcClyZXR1cm4gdG1wO3JldHVybiB4LnBpZC15LnBpZDt9O1Byb2Nlc3MucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuUHJvY2Vzc0Jhc2UucHJvdG90eXBlLGdldCBzdGFibGVJZCgpe3JldHVybiB0aGlzLnBpZDt9LGNvbXBhcmVUbyh0aGF0KXtyZXR1cm4gUHJvY2Vzcy5jb21wYXJlKHRoaXMsdGhhdCk7fSwqY2hpbGRFdmVudHMoKXt5aWVsZCpQcm9jZXNzQmFzZS5wcm90b3R5cGUuY2hpbGRFdmVudHMuY2FsbCh0aGlzKTt5aWVsZCp0aGlzLmluc3RhbnRFdmVudHM7eWllbGQqdGhpcy5mcmFtZXM7eWllbGQqdGhpcy5tZW1vcnlEdW1wczt9LGFkZExhYmVsSWZOZWVkZWQobGFiZWxOYW1lKXtmb3IobGV0IGk9MDtpPHRoaXMubGFiZWxzLmxlbmd0aDtpKyspe2lmKHRoaXMubGFiZWxzW2ldPT09bGFiZWxOYW1lKXJldHVybjt9Ci10aGlzLmxhYmVscy5wdXNoKGxhYmVsTmFtZSk7fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe2xldCByZXM7aWYodGhpcy5uYW1lKXtyZXM9dGhpcy5uYW1lKycgKHBpZCAnK3RoaXMucGlkKycpJzt9ZWxzZXtyZXM9J1Byb2Nlc3MgJyt0aGlzLnBpZDt9Ci1pZih0aGlzLmxhYmVscy5sZW5ndGgpe3Jlcys9JzogJyt0aGlzLmxhYmVscy5qb2luKCcsICcpO30KLWlmKHRoaXMudXB0aW1lX3NlY29uZHMpe3Jlcys9JywgdXB0aW1lOicrdGhpcy51cHRpbWVfc2Vjb25kcysncyc7fQotcmV0dXJuIHJlczt9LGdldCB1c2VyRnJpZW5kbHlEZXRhaWxzKCl7aWYodGhpcy5uYW1lKXtyZXR1cm4gdGhpcy5uYW1lKycgKHBpZCAnK3RoaXMucGlkKycpJzt9Ci1yZXR1cm4ncGlkOiAnK3RoaXMucGlkO30sZ2V0U2V0dGluZ3NLZXkoKXtpZighdGhpcy5uYW1lKXJldHVybiB1bmRlZmluZWQ7aWYoIXRoaXMubGFiZWxzLmxlbmd0aClyZXR1cm4ncHJvY2Vzc2VzLicrdGhpcy5uYW1lO3JldHVybidwcm9jZXNzZXMuJyt0aGlzLm5hbWUrJy4nK3RoaXMubGFiZWxzLmpvaW4oJy4nKTt9LHNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KXtmb3IobGV0IGk9MDtpPHRoaXMuaW5zdGFudEV2ZW50cy5sZW5ndGg7aSsrKXt0aGlzLmluc3RhbnRFdmVudHNbaV0uc3RhcnQrPWFtb3VudDt9Ci1mb3IobGV0IGk9MDtpPHRoaXMuZnJhbWVzLmxlbmd0aDtpKyspe3RoaXMuZnJhbWVzW2ldLnNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KTt9Ci1mb3IobGV0IGk9MDtpPHRoaXMubWVtb3J5RHVtcHMubGVuZ3RoO2krKyl7dGhpcy5tZW1vcnlEdW1wc1tpXS5zaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCk7fQotZm9yKGxldCBpPTA7aTx0aGlzLmFjdGl2aXRpZXMubGVuZ3RoO2krKyl7dGhpcy5hY3Rpdml0aWVzW2ldLnNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KTt9Ci10ci5tb2RlbC5Qcm9jZXNzQmFzZS5wcm90b3R5cGUuc2hpZnRUaW1lc3RhbXBzRm9yd2FyZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fSx1cGRhdGVCb3VuZHMoKXt0ci5tb2RlbC5Qcm9jZXNzQmFzZS5wcm90b3R5cGUudXBkYXRlQm91bmRzLmFwcGx5KHRoaXMpO2ZvcihsZXQgaT0wO2k8dGhpcy5mcmFtZXMubGVuZ3RoO2krKyl7dGhpcy5mcmFtZXNbaV0uYWRkQm91bmRzVG9SYW5nZSh0aGlzLmJvdW5kcyk7fQotZm9yKGxldCBpPTA7aTx0aGlzLm1lbW9yeUR1bXBzLmxlbmd0aDtpKyspe3RoaXMubWVtb3J5RHVtcHNbaV0uYWRkQm91bmRzVG9SYW5nZSh0aGlzLmJvdW5kcyk7fQotZm9yKGxldCBpPTA7aTx0aGlzLmFjdGl2aXRpZXMubGVuZ3RoO2krKyl7dGhpcy5hY3Rpdml0aWVzW2ldLmFkZEJvdW5kc1RvUmFuZ2UodGhpcy5ib3VuZHMpO319LHNvcnRNZW1vcnlEdW1wcygpe3RoaXMubWVtb3J5RHVtcHMuc29ydChmdW5jdGlvbih4LHkpe3JldHVybiB4LnN0YXJ0LXkuc3RhcnQ7fSk7dHIubW9kZWwuUHJvY2Vzc01lbW9yeUR1bXAuaG9va1VwTW9zdFJlY2VudFZtUmVnaW9uc0xpbmtzKHRoaXMubWVtb3J5RHVtcHMpO319O3JldHVybntQcm9jZXNzLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBTYW1wbGUoc3RhcnQsdGl0bGUsbGVhZk5vZGUsdGhyZWFkLG9wdF9jcHUsb3B0X3dlaWdodCxvcHRfYXJncyl7dHIubW9kZWwuVGltZWRFdmVudC5jYWxsKHRoaXMsc3RhcnQpO3RoaXMuc3RhcnRfPXN0YXJ0O3RoaXMudGl0bGVfPXRpdGxlO3RoaXMubGVhZk5vZGVfPWxlYWZOb2RlO3RoaXMudGhyZWFkXz10aHJlYWQ7dGhpcy5jb2xvcklkXz1sZWFmTm9kZS5jb2xvcklkO3RoaXMuY3B1Xz1vcHRfY3B1O3RoaXMud2VpZ2h0Xz1vcHRfd2VpZ2h0O3RoaXMuYXJncz1vcHRfYXJnc3x8e307fQotU2FtcGxlLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLlRpbWVkRXZlbnQucHJvdG90eXBlLGdldCB0aXRsZSgpe3JldHVybiB0aGlzLnRpdGxlXzt9LGdldCBjb2xvcklkKCl7cmV0dXJuIHRoaXMuY29sb3JJZF87fSxnZXQgdGhyZWFkKCl7cmV0dXJuIHRoaXMudGhyZWFkXzt9LGdldCBsZWFmTm9kZSgpe3JldHVybiB0aGlzLmxlYWZOb2RlXzt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ1NhbXBsZSBhdCAnKwotdHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLmZvcm1hdCh0aGlzLnN0YXJ0KTt9LGdldCB1c2VyRnJpZW5kbHlTdGFjaygpe3JldHVybiB0aGlzLmxlYWZOb2RlXy51c2VyRnJpZW5kbHlTdGFjazt9LGdldE5vZGVzQXNBcnJheSgpe2NvbnN0IG5vZGVzPVtdO2xldCBub2RlPXRoaXMubGVhZk5vZGVfO3doaWxlKG5vZGUhPT11bmRlZmluZWQpe25vZGVzLnB1c2gobm9kZSk7bm9kZT1ub2RlLnBhcmVudE5vZGU7fQotcmV0dXJuIG5vZGVzO30sZ2V0IGNwdSgpe3JldHVybiB0aGlzLmNwdV87fSxnZXQgd2VpZ2h0KCl7cmV0dXJuIHRoaXMud2VpZ2h0Xzt9LH07dHIubW9kZWwuRXZlbnRSZWdpc3RyeS5yZWdpc3RlcihTYW1wbGUse25hbWU6J1NhbXBsZScscGx1cmFsTmFtZTonU2FtcGxlcyd9KTtyZXR1cm57U2FtcGxlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBTdGFja0ZyYW1lKHBhcmVudEZyYW1lLGlkLHRpdGxlLGNvbG9ySWQsb3B0X3NvdXJjZUluZm8pe2lmKGlkPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ2lkIG11c3QgYmUgZ2l2ZW4nKTt9Ci10aGlzLnBhcmVudEZyYW1lXz1wYXJlbnRGcmFtZTt0aGlzLmlkPWlkO3RoaXMudGl0bGVfPXRpdGxlO3RoaXMuY29sb3JJZD1jb2xvcklkO3RoaXMuY2hpbGRyZW49W107dGhpcy5zb3VyY2VJbmZvXz1vcHRfc291cmNlSW5mbztpZih0aGlzLnBhcmVudEZyYW1lXyl7dGhpcy5wYXJlbnRGcmFtZV8uYWRkQ2hpbGQodGhpcyk7fX0KLVN0YWNrRnJhbWUucHJvdG90eXBlPXtnZXQgcGFyZW50RnJhbWUoKXtyZXR1cm4gdGhpcy5wYXJlbnRGcmFtZV87fSxnZXQgdGl0bGUoKXtpZih0aGlzLnNvdXJjZUluZm9fKXtjb25zdCBzcmM9dGhpcy5zb3VyY2VJbmZvXy50b1N0cmluZygpO3JldHVybiB0aGlzLnRpdGxlXysoc3JjPT09Jyc/Jyc6JyAnK3NyYyk7fQotcmV0dXJuIHRoaXMudGl0bGVfO30sZ2V0IGRvbWFpbigpe2xldCByZXN1bHQ9J3Vua25vd24nO2lmKHRoaXMuc291cmNlSW5mb18mJnRoaXMuc291cmNlSW5mb18uZG9tYWluKXtyZXN1bHQ9dGhpcy5zb3VyY2VJbmZvXy5kb21haW47fQotaWYocmVzdWx0PT09J3Vua25vd24nJiZ0aGlzLnBhcmVudEZyYW1lKXtyZXN1bHQ9dGhpcy5wYXJlbnRGcmFtZS5kb21haW47fQotcmV0dXJuIHJlc3VsdDt9LGdldCBzb3VyY2VJbmZvKCl7cmV0dXJuIHRoaXMuc291cmNlSW5mb187fSxzZXQgcGFyZW50RnJhbWUocGFyZW50RnJhbWUpe2lmKHRoaXMucGFyZW50RnJhbWVfKXtQb2x5bWVyLmRvbSh0aGlzLnBhcmVudEZyYW1lXykucmVtb3ZlQ2hpbGQodGhpcyk7fQotdGhpcy5wYXJlbnRGcmFtZV89cGFyZW50RnJhbWU7aWYodGhpcy5wYXJlbnRGcmFtZV8pe3RoaXMucGFyZW50RnJhbWVfLmFkZENoaWxkKHRoaXMpO319LGFkZENoaWxkKGNoaWxkKXt0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO30scmVtb3ZlQ2hpbGQoY2hpbGQpe2NvbnN0IGk9dGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkLmlkKTtpZihpPT09LTEpe3Rocm93IG5ldyBFcnJvcignb21nJyk7fQotdGhpcy5jaGlsZHJlbi5zcGxpY2UoaSwxKTt9LHJlbW92ZUFsbENoaWxkcmVuKCl7Zm9yKGxldCBpPTA7aTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtpKyspe3RoaXMuY2hpbGRyZW5baV0ucGFyZW50RnJhbWVfPXVuZGVmaW5lZDt9Ci10aGlzLmNoaWxkcmVuLnNwbGljZSgwLHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTt9LGdldCBzdGFja1RyYWNlKCl7Y29uc3Qgc3RhY2s9W3RoaXNdO2xldCBjdXI9dGhpcy5wYXJlbnRGcmFtZTt3aGlsZShjdXIpe3N0YWNrLnB1c2goY3VyKTtjdXI9Y3VyLnBhcmVudEZyYW1lO30KLXJldHVybiBzdGFjazt9LGdldFVzZXJGcmllbmRseVN0YWNrVHJhY2UoKXtyZXR1cm4gdGhpcy5zdGFja1RyYWNlLm1hcChmdW5jdGlvbih4KXtyZXR1cm4geC50aXRsZTt9KTt9fTtyZXR1cm57U3RhY2tGcmFtZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwudW0nLGZ1bmN0aW9uKCl7Y2xhc3MgU2VnbWVudCBleHRlbmRzIHRyLm1vZGVsLlRpbWVkRXZlbnR7Y29uc3RydWN0b3Ioc3RhcnQsZHVyYXRpb24pe3N1cGVyKHN0YXJ0KTt0aGlzLmR1cmF0aW9uPWR1cmF0aW9uO3RoaXMuZXhwZWN0YXRpb25zXz1bXTt9Ci1nZXQgZXhwZWN0YXRpb25zKCl7cmV0dXJuIHRoaXMuZXhwZWN0YXRpb25zXzt9Ci1jbG9uZSgpe2NvbnN0IGNsb25lPW5ldyBTZWdtZW50KHRoaXMuc3RhcnQsdGhpcy5kdXJhdGlvbik7Y2xvbmUuZXhwZWN0YXRpb25zLnB1c2goLi4udGhpcy5leHBlY3RhdGlvbnMpO3JldHVybiBjbG9uZTt9Ci1hZGRTZWdtZW50KG90aGVyKXt0aGlzLmR1cmF0aW9uKz1vdGhlci5kdXJhdGlvbjt0aGlzLmV4cGVjdGF0aW9ucy5wdXNoKC4uLm90aGVyLmV4cGVjdGF0aW9ucyk7fX0KLXJldHVybntTZWdtZW50LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbC51bScsZnVuY3Rpb24oKXtjbGFzcyBVc2VyTW9kZWwgZXh0ZW5kcyB0ci5tb2RlbC5FdmVudENvbnRhaW5lcntjb25zdHJ1Y3RvcihwYXJlbnRNb2RlbCl7c3VwZXIoKTt0aGlzLnBhcmVudE1vZGVsXz1wYXJlbnRNb2RlbDt0aGlzLmV4cGVjdGF0aW9uc189bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7dGhpcy5zZWdtZW50c189W107fQotZ2V0IHN0YWJsZUlkKCl7cmV0dXJuJ1VzZXJNb2RlbCc7fQotZ2V0IHBhcmVudE1vZGVsKCl7cmV0dXJuIHRoaXMucGFyZW50TW9kZWxfO30KLXNvcnRFeHBlY3RhdGlvbnMoKXt0aGlzLmV4cGVjdGF0aW9uc18uc29ydEV2ZW50cygoeCx5KT0+KHguc3RhcnQteS5zdGFydCkpO30KLWdldCBleHBlY3RhdGlvbnMoKXtyZXR1cm4gdGhpcy5leHBlY3RhdGlvbnNfO30KLXNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KXt9Ci1hZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KXt9Ci1nZXQgc2VnbWVudHMoKXtyZXR1cm4gdGhpcy5zZWdtZW50c187fSpjaGlsZEV2ZW50cygpe3lpZWxkKnRoaXMuZXhwZWN0YXRpb25zO30qY2hpbGRFdmVudENvbnRhaW5lcnMoKXt9Ci11cGRhdGVCb3VuZHMoKXt0aGlzLmJvdW5kcy5yZXNldCgpO2Zvcihjb25zdCBleHBlY3RhdGlvbiBvZiB0aGlzLmV4cGVjdGF0aW9ucyl7ZXhwZWN0YXRpb24uYWRkQm91bmRzVG9SYW5nZSh0aGlzLmJvdW5kcyk7fX0KLXJlc2VnbWVudChnZXRLZXlGb3JTZWdtZW50KXtjb25zdCBuZXdTZWdtZW50cz1bXTtsZXQgcHJldktleT11bmRlZmluZWQ7bGV0IHByZXZTZWdtZW50PXVuZGVmaW5lZDtmb3IobGV0IGk9MDtpPHRoaXMuc2VnbWVudHMubGVuZ3RoOysraSl7Y29uc3Qgc2VnbWVudD10aGlzLnNlZ21lbnRzW2ldO2NvbnN0IGtleT1nZXRLZXlGb3JTZWdtZW50KHNlZ21lbnQsaSk7aWYocHJldlNlZ21lbnQhPT11bmRlZmluZWQmJmtleT09PXByZXZLZXkpe3ByZXZTZWdtZW50LmFkZFNlZ21lbnQoc2VnbWVudCk7fWVsc2V7cHJldlNlZ21lbnQ9c2VnbWVudC5jbG9uZSgpO25ld1NlZ21lbnRzLnB1c2gocHJldlNlZ21lbnQpO30KLXByZXZLZXk9a2V5O30KLXJldHVybiBuZXdTZWdtZW50czt9fQotcmV0dXJue1VzZXJNb2RlbCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHInLGZ1bmN0aW9uKCl7Y29uc3QgUHJvY2Vzcz10ci5tb2RlbC5Qcm9jZXNzO2NvbnN0IERldmljZT10ci5tb2RlbC5EZXZpY2U7Y29uc3QgS2VybmVsPXRyLm1vZGVsLktlcm5lbDtjb25zdCBHbG9iYWxNZW1vcnlEdW1wPXRyLm1vZGVsLkdsb2JhbE1lbW9yeUR1bXA7Y29uc3QgR2xvYmFsSW5zdGFudEV2ZW50PXRyLm1vZGVsLkdsb2JhbEluc3RhbnRFdmVudDtjb25zdCBGbG93RXZlbnQ9dHIubW9kZWwuRmxvd0V2ZW50O2NvbnN0IEFsZXJ0PXRyLm1vZGVsLkFsZXJ0O2NvbnN0IFNhbXBsZT10ci5tb2RlbC5TYW1wbGU7ZnVuY3Rpb24gTW9kZWwoKXt0ci5tb2RlbC5FdmVudENvbnRhaW5lci5jYWxsKHRoaXMpO3RyLmIuRXZlbnRUYXJnZXQuZGVjb3JhdGUodGhpcyk7dGhpcy50aW1lc3RhbXBTaGlmdFRvWmVyb0Ftb3VudF89MDt0aGlzLmZhdmljb25IdWU9J2JsdWUnO3RoaXMuZGV2aWNlPW5ldyBEZXZpY2UodGhpcyk7dGhpcy5rZXJuZWw9bmV3IEtlcm5lbCh0aGlzKTt0aGlzLnByb2Nlc3Nlcz17fTt0aGlzLm1ldGFkYXRhPVtdO3RoaXMuY2F0ZWdvcmllcz1bXTt0aGlzLmluc3RhbnRFdmVudHM9W107dGhpcy5mbG93RXZlbnRzPVtdO3RoaXMuY2xvY2tTeW5jTWFuYWdlcj1uZXcgdHIubW9kZWwuQ2xvY2tTeW5jTWFuYWdlcigpO3RoaXMuaW50cmluc2ljVGltZVVuaXRfPXVuZGVmaW5lZDt0aGlzLnN0YWNrRnJhbWVzPXt9O3RoaXMuc2FtcGxlcz1bXTt0aGlzLmFsZXJ0cz1bXTt0aGlzLnVzZXJNb2RlbD1uZXcgdHIubW9kZWwudW0uVXNlck1vZGVsKHRoaXMpO3RoaXMuZmxvd0ludGVydmFsVHJlZT1uZXcgdHIuYi5JbnRlcnZhbFRyZWUoKGYpPT5mLnN0YXJ0LChmKT0+Zi5lbmQpO3RoaXMuZ2xvYmFsTWVtb3J5RHVtcHM9W107dGhpcy51c2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlcnNfPVtdO3RoaXMuYW5ub3RhdGlvbnNCeUd1aWRfPXt9O3RoaXMubW9kZWxJbmRpY2VzPXVuZGVmaW5lZDt0aGlzLnN0YXRzPW5ldyB0ci5tb2RlbC5Nb2RlbFN0YXRzKCk7dGhpcy5pbXBvcnRXYXJuaW5nc189W107dGhpcy5yZXBvcnRlZEltcG9ydFdhcm5pbmdzXz17fTt0aGlzLmlzVGltZUhpZ2hSZXNvbHV0aW9uXz10cnVlO3RoaXMucGF0Y2h1cHNUb0FwcGx5Xz1bXTt0aGlzLmRvZXNIZWxwZXJHVUlEU3VwcG9ydFRoaXNNb2RlbF89e307dGhpcy5oZWxwZXJzQnlDb25zdHJ1Y3RvckdVSURfPXt9O3RoaXMuZXZlbnRzQnlTdGFibGVJZF89dW5kZWZpbmVkO30KLU1vZGVsLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLkV2ZW50Q29udGFpbmVyLnByb3RvdHlwZSxnZXRFdmVudEJ5U3RhYmxlSWQoc3RhYmxlSWQpe2lmKHRoaXMuZXZlbnRzQnlTdGFibGVJZF89PT11bmRlZmluZWQpe3RoaXMuZXZlbnRzQnlTdGFibGVJZF89e307Zm9yKGNvbnN0IGV2ZW50IG9mIHRoaXMuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXt0aGlzLmV2ZW50c0J5U3RhYmxlSWRfW2V2ZW50LnN0YWJsZUlkXT1ldmVudDt9fQotcmV0dXJuIHRoaXMuZXZlbnRzQnlTdGFibGVJZF9bc3RhYmxlSWRdO30sZ2V0T3JDcmVhdGVIZWxwZXIoY29uc3RydWN0b3Ipe2lmKCFjb25zdHJ1Y3Rvci5ndWlkKXt0aHJvdyBuZXcgRXJyb3IoJ0hlbHBlciBjb25zdHJ1Y3RvcnMgbXVzdCBoYXZlIEdVSURzJyk7fQotaWYodGhpcy5oZWxwZXJzQnlDb25zdHJ1Y3RvckdVSURfW2NvbnN0cnVjdG9yLmd1aWRdPT09dW5kZWZpbmVkKXtpZih0aGlzLmRvZXNIZWxwZXJHVUlEU3VwcG9ydFRoaXNNb2RlbF9bY29uc3RydWN0b3IuZ3VpZF09PT11bmRlZmluZWQpe3RoaXMuZG9lc0hlbHBlckdVSURTdXBwb3J0VGhpc01vZGVsX1tjb25zdHJ1Y3Rvci5ndWlkXT1jb25zdHJ1Y3Rvci5zdXBwb3J0c01vZGVsKHRoaXMpO30KLWlmKCF0aGlzLmRvZXNIZWxwZXJHVUlEU3VwcG9ydFRoaXNNb2RlbF9bY29uc3RydWN0b3IuZ3VpZF0pe3JldHVybiB1bmRlZmluZWQ7fQotdGhpcy5oZWxwZXJzQnlDb25zdHJ1Y3RvckdVSURfW2NvbnN0cnVjdG9yLmd1aWRdPW5ldyBjb25zdHJ1Y3Rvcih0aGlzKTt9Ci1yZXR1cm4gdGhpcy5oZWxwZXJzQnlDb25zdHJ1Y3RvckdVSURfW2NvbnN0cnVjdG9yLmd1aWRdO30sKmNoaWxkRXZlbnRzKCl7eWllbGQqdGhpcy5nbG9iYWxNZW1vcnlEdW1wczt5aWVsZCp0aGlzLmluc3RhbnRFdmVudHM7eWllbGQqdGhpcy5mbG93RXZlbnRzO3lpZWxkKnRoaXMuYWxlcnRzO3lpZWxkKnRoaXMuc2FtcGxlczt9LCpjaGlsZEV2ZW50Q29udGFpbmVycygpe3lpZWxkIHRoaXMudXNlck1vZGVsO3lpZWxkIHRoaXMuZGV2aWNlO3lpZWxkIHRoaXMua2VybmVsO3lpZWxkKk9iamVjdC52YWx1ZXModGhpcy5wcm9jZXNzZXMpO30saXRlcmF0ZUFsbFBlcnNpc3RhYmxlT2JqZWN0cyhjYWxsYmFjayl7dGhpcy5rZXJuZWwuaXRlcmF0ZUFsbFBlcnNpc3RhYmxlT2JqZWN0cyhjYWxsYmFjayk7Zm9yKGNvbnN0IHBpZCBpbiB0aGlzLnByb2Nlc3Nlcyl7dGhpcy5wcm9jZXNzZXNbcGlkXS5pdGVyYXRlQWxsUGVyc2lzdGFibGVPYmplY3RzKGNhbGxiYWNrKTt9fSx1cGRhdGVCb3VuZHMoKXt0aGlzLmJvdW5kcy5yZXNldCgpO2NvbnN0IGJvdW5kcz10aGlzLmJvdW5kcztmb3IoY29uc3QgZWMgb2YgdGhpcy5jaGlsZEV2ZW50Q29udGFpbmVycygpKXtlYy51cGRhdGVCb3VuZHMoKTtib3VuZHMuYWRkUmFuZ2UoZWMuYm91bmRzKTt9Ci1mb3IoY29uc3QgZXZlbnQgb2YgdGhpcy5jaGlsZEV2ZW50cygpKXtldmVudC5hZGRCb3VuZHNUb1JhbmdlKGJvdW5kcyk7fX0sc2hpZnRXb3JsZFRvWmVybygpe2NvbnN0IHNoaWZ0QW1vdW50PS10aGlzLmJvdW5kcy5taW47dGhpcy50aW1lc3RhbXBTaGlmdFRvWmVyb0Ftb3VudF89c2hpZnRBbW91bnQ7Zm9yKGNvbnN0IGVjIG9mIHRoaXMuY2hpbGRFdmVudENvbnRhaW5lcnMoKSl7ZWMuc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChzaGlmdEFtb3VudCk7fQotZm9yKGNvbnN0IGV2ZW50IG9mIHRoaXMuY2hpbGRFdmVudHMoKSl7ZXZlbnQuc3RhcnQrPXNoaWZ0QW1vdW50O30KLXRoaXMudXBkYXRlQm91bmRzKCk7fSxjb252ZXJ0VGltZXN0YW1wVG9Nb2RlbFRpbWUoc291cmNlQ2xvY2tEb21haW5OYW1lLHRzKXtpZihzb3VyY2VDbG9ja0RvbWFpbk5hbWUhPT0ndHJhY2VFdmVudENsb2NrJyl7dGhyb3cgbmV3IEVycm9yKCdPbmx5IHRyYWNlRXZlbnRDbG9jayBpcyBzdXBwb3J0ZWQuJyk7fQotcmV0dXJuIHRyLmIuVW5pdC50aW1lc3RhbXBGcm9tVXModHMpKwotdGhpcy50aW1lc3RhbXBTaGlmdFRvWmVyb0Ftb3VudF87fSxnZXQgbnVtUHJvY2Vzc2VzKCl7bGV0IG49MDtmb3IoY29uc3QgcCBpbiB0aGlzLnByb2Nlc3Nlcyl7bisrO30KLXJldHVybiBuO30sZ2V0UHJvY2VzcyhwaWQpe3JldHVybiB0aGlzLnByb2Nlc3Nlc1twaWRdO30sZ2V0T3JDcmVhdGVQcm9jZXNzKHBpZCl7aWYoIXRoaXMucHJvY2Vzc2VzW3BpZF0pe3RoaXMucHJvY2Vzc2VzW3BpZF09bmV3IFByb2Nlc3ModGhpcyxwaWQpO30KLXJldHVybiB0aGlzLnByb2Nlc3Nlc1twaWRdO30sYWRkU3RhY2tGcmFtZShzdGFja0ZyYW1lKXtpZih0aGlzLnN0YWNrRnJhbWVzW3N0YWNrRnJhbWUuaWRdKXt0aHJvdyBuZXcgRXJyb3IoJ1N0YWNrIGZyYW1lIGFscmVhZHkgZXhpc3RzJyk7fQotdGhpcy5zdGFja0ZyYW1lc1tzdGFja0ZyYW1lLmlkXT1zdGFja0ZyYW1lO3JldHVybiBzdGFja0ZyYW1lO30sdXBkYXRlQ2F0ZWdvcmllc18oKXtjb25zdCBjYXRlZ29yaWVzRGljdD17fTt0aGlzLnVzZXJNb2RlbC5hZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KTt0aGlzLmRldmljZS5hZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KTt0aGlzLmtlcm5lbC5hZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KTtmb3IoY29uc3QgcGlkIGluIHRoaXMucHJvY2Vzc2VzKXt0aGlzLnByb2Nlc3Nlc1twaWRdLmFkZENhdGVnb3JpZXNUb0RpY3QoY2F0ZWdvcmllc0RpY3QpO30KLXRoaXMuY2F0ZWdvcmllcz1bXTtmb3IoY29uc3QgY2F0ZWdvcnkgaW4gY2F0ZWdvcmllc0RpY3Qpe2lmKGNhdGVnb3J5IT09Jycpe3RoaXMuY2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTt9fX0sZ2V0QWxsVGhyZWFkcygpe2NvbnN0IHRocmVhZHM9W107Zm9yKGNvbnN0IHRpZCBpbiB0aGlzLmtlcm5lbC50aHJlYWRzKXt0aHJlYWRzLnB1c2gocHJvY2Vzcy50aHJlYWRzW3RpZF0pO30KLWZvcihjb25zdCBwaWQgaW4gdGhpcy5wcm9jZXNzZXMpe2NvbnN0IHByb2Nlc3M9dGhpcy5wcm9jZXNzZXNbcGlkXTtmb3IoY29uc3QgdGlkIGluIHByb2Nlc3MudGhyZWFkcyl7dGhyZWFkcy5wdXNoKHByb2Nlc3MudGhyZWFkc1t0aWRdKTt9fQotcmV0dXJuIHRocmVhZHM7fSxnZXRBbGxQcm9jZXNzZXMob3B0X3ByZWRpY2F0ZSl7Y29uc3QgcHJvY2Vzc2VzPVtdO2Zvcihjb25zdCBwaWQgaW4gdGhpcy5wcm9jZXNzZXMpe2NvbnN0IHByb2Nlc3M9dGhpcy5wcm9jZXNzZXNbcGlkXTtpZihvcHRfcHJlZGljYXRlPT09dW5kZWZpbmVkfHxvcHRfcHJlZGljYXRlKHByb2Nlc3MpKXtwcm9jZXNzZXMucHVzaChwcm9jZXNzKTt9fQotcmV0dXJuIHByb2Nlc3Nlczt9LGdldEFsbENvdW50ZXJzKCl7Y29uc3QgY291bnRlcnM9W107Y291bnRlcnMucHVzaC5hcHBseShjb3VudGVycyxPYmplY3QudmFsdWVzKHRoaXMuZGV2aWNlLmNvdW50ZXJzfHx7fSkpO2NvdW50ZXJzLnB1c2guYXBwbHkoY291bnRlcnMsT2JqZWN0LnZhbHVlcyh0aGlzLmtlcm5lbC5jb3VudGVyc3x8e30pKTtmb3IoY29uc3QgcGlkIGluIHRoaXMucHJvY2Vzc2VzKXtjb25zdCBwcm9jZXNzPXRoaXMucHJvY2Vzc2VzW3BpZF07Zm9yKGNvbnN0IHRpZCBpbiBwcm9jZXNzLmNvdW50ZXJzKXtjb3VudGVycy5wdXNoKHByb2Nlc3MuY291bnRlcnNbdGlkXSk7fX0KLXJldHVybiBjb3VudGVyczt9LGdldEFubm90YXRpb25CeUdVSUQoZ3VpZCl7cmV0dXJuIHRoaXMuYW5ub3RhdGlvbnNCeUd1aWRfW2d1aWRdO30sYWRkQW5ub3RhdGlvbihhbm5vdGF0aW9uKXtpZighYW5ub3RhdGlvbi5ndWlkKXt0aHJvdyBuZXcgRXJyb3IoJ0Fubm90YXRpb24gd2l0aCB1bmRlZmluZWQgZ3VpZCBnaXZlbicpO30KLXRoaXMuYW5ub3RhdGlvbnNCeUd1aWRfW2Fubm90YXRpb24uZ3VpZF09YW5ub3RhdGlvbjt0ci5iLmRpc3BhdGNoU2ltcGxlRXZlbnQodGhpcywnYW5ub3RhdGlvbkNoYW5nZScpO30scmVtb3ZlQW5ub3RhdGlvbihhbm5vdGF0aW9uKXt0aGlzLmFubm90YXRpb25zQnlHdWlkX1thbm5vdGF0aW9uLmd1aWRdLm9uUmVtb3ZlKCk7ZGVsZXRlIHRoaXMuYW5ub3RhdGlvbnNCeUd1aWRfW2Fubm90YXRpb24uZ3VpZF07dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ2Fubm90YXRpb25DaGFuZ2UnKTt9LGdldEFsbEFubm90YXRpb25zKCl7cmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5hbm5vdGF0aW9uc0J5R3VpZF8pO30sYWRkVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIodWZjZCl7dGhpcy51c2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlcnNfLnB1c2godWZjZCk7fSxnZXRVc2VyRnJpZW5kbHlDYXRlZ29yeUZyb21FdmVudChldmVudCl7Zm9yKGxldCBpPTA7aTx0aGlzLnVzZXJGcmllbmRseUNhdGVnb3J5RHJpdmVyc18ubGVuZ3RoO2krKyl7Y29uc3QgdWZjPXRoaXMudXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXJzX1tpXS5mcm9tRXZlbnQoZXZlbnQpO2lmKHVmYyE9PXVuZGVmaW5lZClyZXR1cm4gdWZjO30KLXJldHVybiB1bmRlZmluZWQ7fSxmaW5kQWxsVGhyZWFkc05hbWVkKG5hbWUpe2NvbnN0IG5hbWVkVGhyZWFkcz1bXTtuYW1lZFRocmVhZHMucHVzaC5hcHBseShuYW1lZFRocmVhZHMsdGhpcy5rZXJuZWwuZmluZEFsbFRocmVhZHNOYW1lZChuYW1lKSk7Zm9yKGNvbnN0IHBpZCBpbiB0aGlzLnByb2Nlc3Nlcyl7bmFtZWRUaHJlYWRzLnB1c2guYXBwbHkobmFtZWRUaHJlYWRzLHRoaXMucHJvY2Vzc2VzW3BpZF0uZmluZEFsbFRocmVhZHNOYW1lZChuYW1lKSk7fQotcmV0dXJuIG5hbWVkVGhyZWFkczt9LGdldCBpbXBvcnRPcHRpb25zKCl7cmV0dXJuIHRoaXMuaW1wb3J0T3B0aW9uc187fSxzZXQgaW1wb3J0T3B0aW9ucyhvcHRpb25zKXt0aGlzLmltcG9ydE9wdGlvbnNfPW9wdGlvbnM7fSxnZXQgaW50cmluc2ljVGltZVVuaXQoKXtpZih0aGlzLmludHJpbnNpY1RpbWVVbml0Xz09PXVuZGVmaW5lZCl7cmV0dXJuIHRyLmIuVGltZURpc3BsYXlNb2Rlcy5tczt9Ci1yZXR1cm4gdGhpcy5pbnRyaW5zaWNUaW1lVW5pdF87fSxzZXQgaW50cmluc2ljVGltZVVuaXQodmFsdWUpe2lmKHRoaXMuaW50cmluc2ljVGltZVVuaXRfPT09dmFsdWUpcmV0dXJuO2lmKHRoaXMuaW50cmluc2ljVGltZVVuaXRfIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0ludHJpbnNpYyB0aW1lIHVuaXQgYWxyZWFkeSBzZXQnKTt9Ci10aGlzLmludHJpbnNpY1RpbWVVbml0Xz12YWx1ZTt9LGdldCBpc1RpbWVIaWdoUmVzb2x1dGlvbigpe3JldHVybiB0aGlzLmlzVGltZUhpZ2hSZXNvbHV0aW9uXzt9LHNldCBpc1RpbWVIaWdoUmVzb2x1dGlvbih2YWx1ZSl7dGhpcy5pc1RpbWVIaWdoUmVzb2x1dGlvbl89dmFsdWU7fSxnZXQgY2Fub25pY2FsVXJsKCl7cmV0dXJuIHRoaXMuY2Fub25pY2FsVXJsXzt9LHNldCBjYW5vbmljYWxVcmwodmFsdWUpe2lmKHRoaXMuY2Fub25pY2FsVXJsXz09PXZhbHVlKXJldHVybjtpZih0aGlzLmNhbm9uaWNhbFVybF8hPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignY2Fub25pY2FsVXJsIGFscmVhZHkgc2V0Jyk7fQotdGhpcy5jYW5vbmljYWxVcmxfPXZhbHVlO30saW1wb3J0V2FybmluZyhkYXRhKXtkYXRhLnNob3dUb1VzZXI9ISFkYXRhLnNob3dUb1VzZXI7dGhpcy5pbXBvcnRXYXJuaW5nc18ucHVzaChkYXRhKTtpZih0aGlzLnJlcG9ydGVkSW1wb3J0V2FybmluZ3NfW2RhdGEudHlwZV09PT10cnVlKXJldHVybjt0aGlzLnJlcG9ydGVkSW1wb3J0V2FybmluZ3NfW2RhdGEudHlwZV09dHJ1ZTt9LGdldCBoYXNJbXBvcnRXYXJuaW5ncygpe3JldHVybih0aGlzLmltcG9ydFdhcm5pbmdzXy5sZW5ndGg+MCk7fSxnZXQgaW1wb3J0V2FybmluZ3MoKXtyZXR1cm4gdGhpcy5pbXBvcnRXYXJuaW5nc187fSxnZXQgaW1wb3J0V2FybmluZ3NUaGF0U2hvdWxkQmVTaG93blRvVXNlcigpe3JldHVybiB0aGlzLmltcG9ydFdhcm5pbmdzXy5maWx0ZXIoZnVuY3Rpb24od2FybmluZyl7cmV0dXJuIHdhcm5pbmcuc2hvd1RvVXNlcjt9KTt9LGF1dG9DbG9zZU9wZW5TbGljZXMoKXt0aGlzLnNhbXBsZXMuc29ydChmdW5jdGlvbih4LHkpe3JldHVybiB4LnN0YXJ0LXkuc3RhcnQ7fSk7dGhpcy51cGRhdGVCb3VuZHMoKTt0aGlzLmtlcm5lbC5hdXRvQ2xvc2VPcGVuU2xpY2VzKCk7Zm9yKGNvbnN0IHBpZCBpbiB0aGlzLnByb2Nlc3Nlcyl7dGhpcy5wcm9jZXNzZXNbcGlkXS5hdXRvQ2xvc2VPcGVuU2xpY2VzKCk7fX0sY3JlYXRlU3ViU2xpY2VzKCl7dGhpcy5rZXJuZWwuY3JlYXRlU3ViU2xpY2VzKCk7Zm9yKGNvbnN0IHBpZCBpbiB0aGlzLnByb2Nlc3Nlcyl7dGhpcy5wcm9jZXNzZXNbcGlkXS5jcmVhdGVTdWJTbGljZXMoKTt9fSxwcmVJbml0aWFsaXplT2JqZWN0cygpe2Zvcihjb25zdCBwaWQgaW4gdGhpcy5wcm9jZXNzZXMpe3RoaXMucHJvY2Vzc2VzW3BpZF0ucHJlSW5pdGlhbGl6ZU9iamVjdHMoKTt9fSxpbml0aWFsaXplT2JqZWN0cygpe2Zvcihjb25zdCBwaWQgaW4gdGhpcy5wcm9jZXNzZXMpe3RoaXMucHJvY2Vzc2VzW3BpZF0uaW5pdGlhbGl6ZU9iamVjdHMoKTt9fSxwcnVuZUVtcHR5Q29udGFpbmVycygpe3RoaXMua2VybmVsLnBydW5lRW1wdHlDb250YWluZXJzKCk7Zm9yKGNvbnN0IHBpZCBpbiB0aGlzLnByb2Nlc3Nlcyl7dGhpcy5wcm9jZXNzZXNbcGlkXS5wcnVuZUVtcHR5Q29udGFpbmVycygpO319LG1lcmdlS2VybmVsV2l0aFVzZXJsYW5kKCl7Zm9yKGNvbnN0IHBpZCBpbiB0aGlzLnByb2Nlc3Nlcyl7dGhpcy5wcm9jZXNzZXNbcGlkXS5tZXJnZUtlcm5lbFdpdGhVc2VybGFuZCgpO319LGNvbXB1dGVXb3JsZEJvdW5kcyhzaGlmdFdvcmxkVG9aZXJvKXt0aGlzLnVwZGF0ZUJvdW5kcygpO3RoaXMudXBkYXRlQ2F0ZWdvcmllc18oKTtpZihzaGlmdFdvcmxkVG9aZXJvKXt0aGlzLnNoaWZ0V29ybGRUb1plcm8oKTt9fSxidWlsZEZsb3dFdmVudEludGVydmFsVHJlZSgpe2ZvcihsZXQgaT0wO2k8dGhpcy5mbG93RXZlbnRzLmxlbmd0aDsrK2kpe2NvbnN0IGZsb3dFdmVudD10aGlzLmZsb3dFdmVudHNbaV07dGhpcy5mbG93SW50ZXJ2YWxUcmVlLmluc2VydChmbG93RXZlbnQpO30KLXRoaXMuZmxvd0ludGVydmFsVHJlZS51cGRhdGVIaWdoVmFsdWVzKCk7fSxjbGVhbnVwVW5kZWxldGVkT2JqZWN0cygpe2Zvcihjb25zdCBwaWQgaW4gdGhpcy5wcm9jZXNzZXMpe3RoaXMucHJvY2Vzc2VzW3BpZF0uYXV0b0RlbGV0ZU9iamVjdHModGhpcy5ib3VuZHMubWF4KTt9fSxzb3J0TWVtb3J5RHVtcHMoKXt0aGlzLmdsb2JhbE1lbW9yeUR1bXBzLnNvcnQoZnVuY3Rpb24oeCx5KXtyZXR1cm4geC5zdGFydC15LnN0YXJ0O30pO2Zvcihjb25zdCBwaWQgaW4gdGhpcy5wcm9jZXNzZXMpe3RoaXMucHJvY2Vzc2VzW3BpZF0uc29ydE1lbW9yeUR1bXBzKCk7fX0sZmluYWxpemVNZW1vcnlHcmFwaHMoKXt0aGlzLmdsb2JhbE1lbW9yeUR1bXBzLmZvckVhY2goZnVuY3Rpb24oZHVtcCl7ZHVtcC5maW5hbGl6ZUdyYXBoKCk7fSk7fSxidWlsZEV2ZW50SW5kaWNlcygpe3RoaXMubW9kZWxJbmRpY2VzPW5ldyB0ci5tb2RlbC5Nb2RlbEluZGljZXModGhpcyk7fSxzb3J0QWxlcnRzKCl7dGhpcy5hbGVydHMuc29ydChmdW5jdGlvbih4LHkpe3JldHVybiB4LnN0YXJ0LXkuc3RhcnQ7fSk7fSxhcHBseU9iamVjdFJlZlBhdGNodXBzKCl7Y29uc3QgdW5yZXNvbHZlZD1bXTt0aGlzLnBhdGNodXBzVG9BcHBseV8uZm9yRWFjaChmdW5jdGlvbihwYXRjaHVwKXtpZihwYXRjaHVwLnBpZFJlZiBpbiB0aGlzLnByb2Nlc3Nlcyl7Y29uc3Qgc25hcHNob3Q9dGhpcy5wcm9jZXNzZXNbcGF0Y2h1cC5waWRSZWZdLm9iamVjdHMuZ2V0U25hcHNob3RBdChwYXRjaHVwLnNjb3BlZElkLHBhdGNodXAudHMpO2lmKHNuYXBzaG90KXtwYXRjaHVwLm9iamVjdFtwYXRjaHVwLmZpZWxkXT1zbmFwc2hvdDtzbmFwc2hvdC5yZWZlcmVuY2VkQXQocGF0Y2h1cC5pdGVtLHBhdGNodXAub2JqZWN0LHBhdGNodXAuZmllbGQpO3JldHVybjt9fQotdW5yZXNvbHZlZC5wdXNoKHBhdGNodXApO30sdGhpcyk7dGhpcy5wYXRjaHVwc1RvQXBwbHlfPXVucmVzb2x2ZWQ7fSxyZXBsYWNlUElEUmVmc0luUGF0Y2h1cHMob2xkUGlkUmVmLG5ld1BpZFJlZil7dGhpcy5wYXRjaHVwc1RvQXBwbHlfLmZvckVhY2goZnVuY3Rpb24ocGF0Y2h1cCl7aWYocGF0Y2h1cC5waWRSZWY9PT1vbGRQaWRSZWYpe3BhdGNodXAucGlkUmVmPW5ld1BpZFJlZjt9fSk7fSxqb2luUmVmcygpe3RoaXMuam9pbk9iamVjdFJlZnNfKCk7dGhpcy5hcHBseU9iamVjdFJlZlBhdGNodXBzKCk7fSxqb2luT2JqZWN0UmVmc18oKXtmb3IoY29uc3RbcGlkLHByb2Nlc3Ndb2YgT2JqZWN0LmVudHJpZXModGhpcy5wcm9jZXNzZXMpKXt0aGlzLmpvaW5PYmplY3RSZWZzRm9yUHJvY2Vzc18ocGlkLHByb2Nlc3MpO319LGpvaW5PYmplY3RSZWZzRm9yUHJvY2Vzc18ocGlkLHByb2Nlc3Mpe2Zvcihjb25zdCB0aHJlYWQgb2YgT2JqZWN0LnZhbHVlcyhwcm9jZXNzLnRocmVhZHMpKXt0aHJlYWQuYXN5bmNTbGljZUdyb3VwLnNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe3RoaXMuc2VhcmNoSXRlbUZvcklEUmVmc18ocGlkLCdzdGFydCcsaXRlbSk7fSx0aGlzKTt0aHJlYWQuc2xpY2VHcm91cC5zbGljZXMuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt0aGlzLnNlYXJjaEl0ZW1Gb3JJRFJlZnNfKHBpZCwnc3RhcnQnLGl0ZW0pO30sdGhpcyk7fQotcHJvY2Vzcy5vYmplY3RzLml0ZXJPYmplY3RJbnN0YW5jZXMoZnVuY3Rpb24oaW5zdGFuY2Upe2luc3RhbmNlLnNuYXBzaG90cy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe3RoaXMuc2VhcmNoSXRlbUZvcklEUmVmc18ocGlkLCd0cycsaXRlbSk7fSx0aGlzKTt9LHRoaXMpO30sc2VhcmNoSXRlbUZvcklEUmVmc18ocGlkLGl0ZW1UaW1lc3RhbXBGaWVsZCxpdGVtKXtpZighaXRlbS5hcmdzJiYhaXRlbS5jb250ZXh0cylyZXR1cm47Y29uc3QgcGF0Y2h1cHNUb0FwcGx5PXRoaXMucGF0Y2h1cHNUb0FwcGx5XztmdW5jdGlvbiBoYW5kbGVGaWVsZChvYmplY3QsZmllbGROYW1lLGZpZWxkVmFsdWUpe2lmKCFmaWVsZFZhbHVlfHwoIWZpZWxkVmFsdWUuaWRfcmVmJiYhZmllbGRWYWx1ZS5pZFJlZikpe3JldHVybjt9Ci1jb25zdCBzY29wZT1maWVsZFZhbHVlLnNjb3BlfHx0ci5tb2RlbC5PQkpFQ1RfREVGQVVMVF9TQ09QRTtjb25zdCBpZFJlZj1maWVsZFZhbHVlLmlkX3JlZnx8ZmllbGRWYWx1ZS5pZFJlZjtjb25zdCBzY29wZWRJZD1uZXcgdHIubW9kZWwuU2NvcGVkSWQoc2NvcGUsaWRSZWYpO2NvbnN0IHBpZFJlZj1maWVsZFZhbHVlLnBpZF9yZWZ8fGZpZWxkVmFsdWUucGlkUmVmfHxwaWQ7Y29uc3QgdHM9aXRlbVtpdGVtVGltZXN0YW1wRmllbGRdO3BhdGNodXBzVG9BcHBseS5wdXNoKHtpdGVtLG9iamVjdCxmaWVsZDpmaWVsZE5hbWUscGlkUmVmLHNjb3BlZElkLHRzfSk7fQotZnVuY3Rpb24gaXRlck9iamVjdEZpZWxkc1JlY3Vyc2l2ZWx5KG9iamVjdCl7aWYoIShvYmplY3QgaW5zdGFuY2VvZiBPYmplY3QpKXJldHVybjtpZigob2JqZWN0IGluc3RhbmNlb2YgdHIubW9kZWwuT2JqZWN0U25hcHNob3QpfHwob2JqZWN0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXx8KG9iamVjdCBpbnN0YW5jZW9mIHRyLmIubWF0aC5RdWFkKSl7cmV0dXJuO30KLWlmKG9iamVjdCBpbnN0YW5jZW9mIEFycmF5KXtmb3IobGV0IGk9MDtpPG9iamVjdC5sZW5ndGg7aSsrKXtoYW5kbGVGaWVsZChvYmplY3QsaSxvYmplY3RbaV0pO2l0ZXJPYmplY3RGaWVsZHNSZWN1cnNpdmVseShvYmplY3RbaV0pO30KLXJldHVybjt9Ci1mb3IoY29uc3Qga2V5IGluIG9iamVjdCl7Y29uc3QgdmFsdWU9b2JqZWN0W2tleV07aGFuZGxlRmllbGQob2JqZWN0LGtleSx2YWx1ZSk7aXRlck9iamVjdEZpZWxkc1JlY3Vyc2l2ZWx5KHZhbHVlKTt9fQotaXRlck9iamVjdEZpZWxkc1JlY3Vyc2l2ZWx5KGl0ZW0uYXJncyk7aXRlck9iamVjdEZpZWxkc1JlY3Vyc2l2ZWx5KGl0ZW0uY29udGV4dHMpO319O3JldHVybntNb2RlbCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5ldHcnLGZ1bmN0aW9uKCl7Y29uc3Qga1RocmVhZEd1aWQ9JzNENkZBOEQxLUZFMDUtMTFEMC05RERBLTAwQzA0RkQ3QkE3Qyc7Y29uc3Qga1RocmVhZERDU3RhcnRPcGNvZGU9MztmdW5jdGlvbiBEZWNvZGVyKCl7dGhpcy5wYXlsb2FkXz1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDI1NikpO30KLURlY29kZXIucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZSxyZXNldChiYXNlNjRQYXlsb2FkKXtjb25zdCBkZWNvZGVkU2l6ZT10ci5iLkJhc2U2NC5nZXREZWNvZGVkQnVmZmVyTGVuZ3RoKGJhc2U2NFBheWxvYWQpO2lmKGRlY29kZWRTaXplPnRoaXMucGF5bG9hZF8uYnl0ZUxlbmd0aCl7dGhpcy5wYXlsb2FkXz1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKGRlY29kZWRTaXplKSk7fQotdHIuYi5CYXNlNjQuRGVjb2RlVG9UeXBlZEFycmF5KGJhc2U2NFBheWxvYWQsdGhpcy5wYXlsb2FkXyk7dGhpcy5wb3NpdGlvbl89MDt9LHNraXAobGVuZ3RoKXt0aGlzLnBvc2l0aW9uXys9bGVuZ3RoO30sZGVjb2RlVUludDgoKXtjb25zdCByZXN1bHQ9dGhpcy5wYXlsb2FkXy5nZXRVaW50OCh0aGlzLnBvc2l0aW9uXyx0cnVlKTt0aGlzLnBvc2l0aW9uXys9MTtyZXR1cm4gcmVzdWx0O30sZGVjb2RlVUludDE2KCl7Y29uc3QgcmVzdWx0PXRoaXMucGF5bG9hZF8uZ2V0VWludDE2KHRoaXMucG9zaXRpb25fLHRydWUpO3RoaXMucG9zaXRpb25fKz0yO3JldHVybiByZXN1bHQ7fSxkZWNvZGVVSW50MzIoKXtjb25zdCByZXN1bHQ9dGhpcy5wYXlsb2FkXy5nZXRVaW50MzIodGhpcy5wb3NpdGlvbl8sdHJ1ZSk7dGhpcy5wb3NpdGlvbl8rPTQ7cmV0dXJuIHJlc3VsdDt9LGRlY29kZVVJbnQ2NFRvU3RyaW5nKCl7Y29uc3QgbG93PXRoaXMuZGVjb2RlVUludDMyKCk7Y29uc3QgaGlnaD10aGlzLmRlY29kZVVJbnQzMigpO2NvbnN0IGxvd1N0cj0oJzAwMDAwMDAnK2xvdy50b1N0cmluZygxNikpLnN1YnN0cigtOCk7Y29uc3QgaGlnaFN0cj0oJzAwMDAwMDAnK2hpZ2gudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTgpO2NvbnN0IHJlc3VsdD1oaWdoU3RyK2xvd1N0cjtyZXR1cm4gcmVzdWx0O30sZGVjb2RlSW50OCgpe2NvbnN0IHJlc3VsdD10aGlzLnBheWxvYWRfLmdldEludDgodGhpcy5wb3NpdGlvbl8sdHJ1ZSk7dGhpcy5wb3NpdGlvbl8rPTE7cmV0dXJuIHJlc3VsdDt9LGRlY29kZUludDE2KCl7Y29uc3QgcmVzdWx0PXRoaXMucGF5bG9hZF8uZ2V0SW50MTYodGhpcy5wb3NpdGlvbl8sdHJ1ZSk7dGhpcy5wb3NpdGlvbl8rPTI7cmV0dXJuIHJlc3VsdDt9LGRlY29kZUludDMyKCl7Y29uc3QgcmVzdWx0PXRoaXMucGF5bG9hZF8uZ2V0SW50MzIodGhpcy5wb3NpdGlvbl8sdHJ1ZSk7dGhpcy5wb3NpdGlvbl8rPTQ7cmV0dXJuIHJlc3VsdDt9LGRlY29kZUludDY0VG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5kZWNvZGVVSW50NjRUb1N0cmluZygpO30sZGVjb2RlVUludGVnZXIoaXM2NCl7aWYoaXM2NCl7cmV0dXJuIHRoaXMuZGVjb2RlVUludDY0VG9TdHJpbmcoKTt9Ci1yZXR1cm4gdGhpcy5kZWNvZGVVSW50MzIoKTt9LGRlY29kZVN0cmluZygpe2xldCBzdHI9Jyc7d2hpbGUodHJ1ZSl7Y29uc3QgYz10aGlzLmRlY29kZVVJbnQ4KCk7aWYoIWMpcmV0dXJuIHN0cjtzdHI9c3RyK1N0cmluZy5mcm9tQ2hhckNvZGUoYyk7fX0sZGVjb2RlVzE2U3RyaW5nKCl7bGV0IHN0cj0nJzt3aGlsZSh0cnVlKXtjb25zdCBjPXRoaXMuZGVjb2RlVUludDE2KCk7aWYoIWMpcmV0dXJuIHN0cjtzdHI9c3RyK1N0cmluZy5mcm9tQ2hhckNvZGUoYyk7fX0sZGVjb2RlRml4ZWRXMTZTdHJpbmcobGVuZ3RoKXtjb25zdCBvbGRQb3NpdGlvbj10aGlzLnBvc2l0aW9uXztsZXQgc3RyPScnO2ZvcihsZXQgaT0wO2k8bGVuZ3RoO2krKyl7Y29uc3QgYz10aGlzLmRlY29kZVVJbnQxNigpO2lmKCFjKWJyZWFrO3N0cj1zdHIrU3RyaW5nLmZyb21DaGFyQ29kZShjKTt9Ci10aGlzLnBvc2l0aW9uXz1vbGRQb3NpdGlvbisyKmxlbmd0aDtyZXR1cm4gc3RyO30sZGVjb2RlQnl0ZXMobGVuZ3RoKXtjb25zdCBieXRlcz1bXTtmb3IobGV0IGk9MDtpPGxlbmd0aDsrK2kpe2NvbnN0IGM9dGhpcy5kZWNvZGVVSW50OCgpO2J5dGVzLnB1c2goYyk7fQotcmV0dXJuIGJ5dGVzO30sZGVjb2RlU0lEKGlzNjQpe2NvbnN0IHBTaWQ9dGhpcy5kZWNvZGVVSW50ZWdlcihpczY0KTtjb25zdCBhdHRyaWJ1dGVzPXRoaXMuZGVjb2RlVUludDMyKCk7aWYoaXM2NCl7dGhpcy5kZWNvZGVVSW50MzIoKTt9Ci1jb25zdCByZXZpc2lvbj10aGlzLmRlY29kZVVJbnQ4KCk7Y29uc3Qgc3ViQXV0aG9yaXR5Q291bnQ9dGhpcy5kZWNvZGVVSW50OCgpO3RoaXMuZGVjb2RlVUludDE2KCk7dGhpcy5kZWNvZGVVSW50MzIoKTtpZihyZXZpc2lvbiE9PTEpe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBTSUQgcmV2aXNpb246IGNvdWxkIG5vdCBkZWNvZGUgdGhlIFNJRCBzdHJ1Y3R1cmUuJyk7fQotY29uc3Qgc2lkPXRoaXMuZGVjb2RlQnl0ZXMoNCpzdWJBdXRob3JpdHlDb3VudCk7cmV0dXJue3BTaWQsYXR0cmlidXRlcyxzaWR9O30sZGVjb2RlU3lzdGVtVGltZSgpe2NvbnN0IHdZZWFyPXRoaXMuZGVjb2RlSW50MTYoKTtjb25zdCB3TW9udGg9dGhpcy5kZWNvZGVJbnQxNigpO2NvbnN0IHdEYXlPZldlZWs9dGhpcy5kZWNvZGVJbnQxNigpO2NvbnN0IHdEYXk9dGhpcy5kZWNvZGVJbnQxNigpO2NvbnN0IHdIb3VyPXRoaXMuZGVjb2RlSW50MTYoKTtjb25zdCB3TWludXRlPXRoaXMuZGVjb2RlSW50MTYoKTtjb25zdCB3U2Vjb25kPXRoaXMuZGVjb2RlSW50MTYoKTtjb25zdCB3TWlsbGlzZWNvbmRzPXRoaXMuZGVjb2RlSW50MTYoKTtyZXR1cm57d1llYXIsd01vbnRoLHdEYXlPZldlZWssd0RheSx3SG91cix3TWludXRlLHdTZWNvbmQsd01pbGxpc2Vjb25kc307fSxkZWNvZGVUaW1lWm9uZUluZm9ybWF0aW9uKCl7Y29uc3QgYmlhcz10aGlzLmRlY29kZVVJbnQzMigpO2NvbnN0IHN0YW5kYXJkTmFtZT10aGlzLmRlY29kZUZpeGVkVzE2U3RyaW5nKDMyKTtjb25zdCBzdGFuZGFyZERhdGU9dGhpcy5kZWNvZGVTeXN0ZW1UaW1lKCk7Y29uc3Qgc3RhbmRhcmRCaWFzPXRoaXMuZGVjb2RlVUludDMyKCk7Y29uc3QgZGF5bGlnaHROYW1lPXRoaXMuZGVjb2RlRml4ZWRXMTZTdHJpbmcoMzIpO2NvbnN0IGRheWxpZ2h0RGF0ZT10aGlzLmRlY29kZVN5c3RlbVRpbWUoKTtjb25zdCBkYXlsaWdodEJpYXM9dGhpcy5kZWNvZGVVSW50MzIoKTtyZXR1cm57YmlhcyxzdGFuZGFyZE5hbWUsc3RhbmRhcmREYXRlLHN0YW5kYXJkQmlhcyxkYXlsaWdodE5hbWUsZGF5bGlnaHREYXRlLGRheWxpZ2h0Qmlhc307fX07ZnVuY3Rpb24gRXR3SW1wb3J0ZXIobW9kZWwsZXZlbnRzKXt0aGlzLmltcG9ydFByaW9yaXR5PTM7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy5ldmVudHNfPWV2ZW50czt0aGlzLmhhbmRsZXJzXz17fTt0aGlzLmRlY29kZXJfPW5ldyBEZWNvZGVyKCk7dGhpcy53YWxsdGltZV89dW5kZWZpbmVkO3RoaXMudGlja3NfPXVuZGVmaW5lZDt0aGlzLmlzNjRiaXRfPXVuZGVmaW5lZDt0aGlzLnRpZHNUb1BpZF89e307Y29uc3QgYWxsVHlwZUluZm9zPXRyLmUuaW1wb3J0ZXIuZXR3LlBhcnNlci5nZXRBbGxSZWdpc3RlcmVkVHlwZUluZm9zKCk7dGhpcy5wYXJzZXJzXz1hbGxUeXBlSW5mb3MubWFwKGZ1bmN0aW9uKHR5cGVJbmZvKXtyZXR1cm4gbmV3IHR5cGVJbmZvLmNvbnN0cnVjdG9yKHRoaXMpO30sdGhpcyk7fQotRXR3SW1wb3J0ZXIuY2FuSW1wb3J0PWZ1bmN0aW9uKGV2ZW50cyl7aWYoIWV2ZW50cy5oYXNPd25Qcm9wZXJ0eSgnbmFtZScpfHwhZXZlbnRzLmhhc093blByb3BlcnR5KCdjb250ZW50Jyl8fGV2ZW50cy5uYW1lIT09J0VUVycpe3JldHVybiBmYWxzZTt9Ci1yZXR1cm4gdHJ1ZTt9O0V0d0ltcG9ydGVyLnByb3RvdHlwZT17X19wcm90b19fOnRyLmltcG9ydGVyLkltcG9ydGVyLnByb3RvdHlwZSxnZXQgaW1wb3J0ZXJOYW1lKCl7cmV0dXJuJ0V0d0ltcG9ydGVyJzt9LGdldCBtb2RlbCgpe3JldHVybiB0aGlzLm1vZGVsXzt9LGNyZWF0ZVRocmVhZElmTmVlZGVkKHBpZCx0aWQpe3RoaXMudGlkc1RvUGlkX1t0aWRdPXBpZDt9LHJlbW92ZVRocmVhZElmUHJlc2VudCh0aWQpe3RoaXMudGlkc1RvUGlkX1t0aWRdPXVuZGVmaW5lZDt9LGdldFBpZEZyb21XaW5kb3dzVGlkKHRpZCl7aWYodGlkPT09MClyZXR1cm4gMDtjb25zdCBwaWQ9dGhpcy50aWRzVG9QaWRfW3RpZF07aWYocGlkPT09dW5kZWZpbmVkKXtyZXR1cm4gMDt9Ci1yZXR1cm4gcGlkO30sZ2V0VGhyZWFkRnJvbVdpbmRvd3NUaWQodGlkKXtjb25zdCBwaWQ9dGhpcy5nZXRQaWRGcm9tV2luZG93c1RpZCh0aWQpO2NvbnN0IHByb2Nlc3M9dGhpcy5tb2RlbF8uZ2V0UHJvY2VzcyhwaWQpO2lmKCFwcm9jZXNzKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHByb2Nlc3MuZ2V0VGhyZWFkKHRpZCk7fSxnZXRPckNyZWF0ZUNwdShjcHVOdW1iZXIpe2NvbnN0IGNwdT10aGlzLm1vZGVsXy5rZXJuZWwuZ2V0T3JDcmVhdGVDcHUoY3B1TnVtYmVyKTtyZXR1cm4gY3B1O30saW1wb3J0RXZlbnRzKCl7dGhpcy5ldmVudHNfLmNvbnRlbnQuZm9yRWFjaCh0aGlzLnBhcnNlSW5mby5iaW5kKHRoaXMpKTtpZih0aGlzLndhbGx0aW1lXz09PXVuZGVmaW5lZHx8dGhpcy50aWNrc189PT11bmRlZmluZWQpe3Rocm93IEVycm9yKCdDYW5ub3QgZmluZCBjbG9jayBzeW5jIGluZm9ybWF0aW9uIGluIHRoZSBzeXN0ZW0gdHJhY2UuJyk7fQotaWYodGhpcy5pczY0Yml0Xz09PXVuZGVmaW5lZCl7dGhyb3cgRXJyb3IoJ0Nhbm5vdCBkZXRlcm1pbmUgcG9pbnRlciBzaXplIG9mIHRoZSBzeXN0ZW0gdHJhY2UuJyk7fQotdGhpcy5ldmVudHNfLmNvbnRlbnQuZm9yRWFjaCh0aGlzLnBhcnNlRXZlbnQuYmluZCh0aGlzKSk7fSxpbXBvcnRUaW1lc3RhbXAodGltZXN0YW1wKXtjb25zdCB0cz1wYXJzZUludCh0aW1lc3RhbXAsMTYpO3JldHVybih0cy10aGlzLndhbGx0aW1lXyt0aGlzLnRpY2tzXykvMTAwMC47fSxwYXJzZUluZm8oZXZlbnQpe2lmKGV2ZW50Lmhhc093blByb3BlcnR5KCdndWlkJykmJmV2ZW50Lmhhc093blByb3BlcnR5KCd3YWxsdGltZScpJiZldmVudC5oYXNPd25Qcm9wZXJ0eSgndGljaycpJiZldmVudC5ndWlkPT09J0Nsb2NrU3luYycpe3RoaXMud2FsbHRpbWVfPXBhcnNlSW50KGV2ZW50LndhbGx0aW1lLDE2KTt0aGlzLnRpY2tzXz1wYXJzZUludChldmVudC50aWNrLDE2KTt9Ci1pZih0aGlzLmlzNjRiaXRfPT09dW5kZWZpbmVkJiZldmVudC5oYXNPd25Qcm9wZXJ0eSgnZ3VpZCcpJiZldmVudC5oYXNPd25Qcm9wZXJ0eSgnb3AnKSYmZXZlbnQuaGFzT3duUHJvcGVydHkoJ3ZlcicpJiZldmVudC5oYXNPd25Qcm9wZXJ0eSgncGF5bG9hZCcpJiZldmVudC5ndWlkPT09a1RocmVhZEd1aWQmJmV2ZW50Lm9wPT09a1RocmVhZERDU3RhcnRPcGNvZGUpe2NvbnN0IGRlY29kZWRTaXplPXRyLmIuQmFzZTY0LmdldERlY29kZWRCdWZmZXJMZW5ndGgoZXZlbnQucGF5bG9hZCk7aWYoZXZlbnQudmVyPT09MSl7aWYoZGVjb2RlZFNpemU+PTUyKXt0aGlzLmlzNjRiaXRfPXRydWU7fWVsc2V7dGhpcy5pczY0Yml0Xz1mYWxzZTt9fWVsc2UgaWYoZXZlbnQudmVyPT09Mil7aWYoZGVjb2RlZFNpemU+PTY0KXt0aGlzLmlzNjRiaXRfPXRydWU7fWVsc2V7dGhpcy5pczY0Yml0Xz1mYWxzZTt9fWVsc2UgaWYoZXZlbnQudmVyPT09Myl7aWYoZGVjb2RlZFNpemU+PTYwKXt0aGlzLmlzNjRiaXRfPXRydWU7fWVsc2V7dGhpcy5pczY0Yml0Xz1mYWxzZTt9fX0KLXJldHVybiB0cnVlO30scGFyc2VFdmVudChldmVudCl7aWYoIWV2ZW50Lmhhc093blByb3BlcnR5KCdndWlkJyl8fCFldmVudC5oYXNPd25Qcm9wZXJ0eSgnb3AnKXx8IWV2ZW50Lmhhc093blByb3BlcnR5KCd2ZXInKXx8IWV2ZW50Lmhhc093blByb3BlcnR5KCdjcHUnKXx8IWV2ZW50Lmhhc093blByb3BlcnR5KCd0cycpfHwhZXZlbnQuaGFzT3duUHJvcGVydHkoJ3BheWxvYWQnKSl7cmV0dXJuIGZhbHNlO30KLWNvbnN0IHRpbWVzdGFtcD10aGlzLmltcG9ydFRpbWVzdGFtcChldmVudC50cyk7Y29uc3QgaGVhZGVyPXtndWlkOmV2ZW50Lmd1aWQsb3Bjb2RlOmV2ZW50Lm9wLHZlcnNpb246ZXZlbnQudmVyLGNwdTpldmVudC5jcHUsdGltZXN0YW1wLGlzNjQ6dGhpcy5pczY0Yml0X307Y29uc3QgZGVjb2Rlcj10aGlzLmRlY29kZXJfO2RlY29kZXIucmVzZXQoZXZlbnQucGF5bG9hZCk7Y29uc3QgaGFuZGxlcj10aGlzLmdldEV2ZW50SGFuZGxlcihoZWFkZXIuZ3VpZCxoZWFkZXIub3Bjb2RlKTtpZighaGFuZGxlcilyZXR1cm4gZmFsc2U7aWYoIWhhbmRsZXIoaGVhZGVyLGRlY29kZXIpKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidwYXJzZV9lcnJvcicsbWVzc2FnZTonTWFsZm9ybWVkICcraGVhZGVyLmd1aWQrJyBldmVudCAoJytldmVudC5wYXlsb2FkKycpJ30pO3JldHVybiBmYWxzZTt9Ci1yZXR1cm4gdHJ1ZTt9LHJlZ2lzdGVyRXZlbnRIYW5kbGVyKGd1aWQsb3Bjb2RlLGhhbmRsZXIpe2lmKHRoaXMuaGFuZGxlcnNfW2d1aWRdPT09dW5kZWZpbmVkKXt0aGlzLmhhbmRsZXJzX1tndWlkXT1bXTt9Ci10aGlzLmhhbmRsZXJzX1tndWlkXVtvcGNvZGVdPWhhbmRsZXI7fSxnZXRFdmVudEhhbmRsZXIoZ3VpZCxvcGNvZGUpe2lmKHRoaXMuaGFuZGxlcnNfW2d1aWRdPT09dW5kZWZpbmVkKXtyZXR1cm4gdW5kZWZpbmVkO30KLXJldHVybiB0aGlzLmhhbmRsZXJzX1tndWlkXVtvcGNvZGVdO319O3RyLmltcG9ydGVyLkltcG9ydGVyLnJlZ2lzdGVyKEV0d0ltcG9ydGVyKTtyZXR1cm57RXR3SW1wb3J0ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y2xhc3MgVHJhY2VTdHJlYW17c3RhdGljIGdldCBIRUFERVJfU0laRSgpe3JldHVybiBNYXRoLnBvdygyLDEwKTt9Ci1zdGF0aWMgZ2V0IENIVU5LX1NJWkUoKXtyZXR1cm4gTWF0aC5wb3coMiwyMCk7fQotZ2V0IGlzQmluYXJ5KCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9Ci1nZXQgaGFzRGF0YSgpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fQotZ2V0IGhlYWRlcigpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fQotcmVhZFVudGlsRGVsaW1pdGVyKGRlbGltKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30KLXJlYWROdW1CeXRlcyhvcHRfc2l6ZSl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9Ci1yZXdpbmQoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30KLXN1YnN0cmVhbShvZmZzZXQsb3B0X2xlbmd0aCxvcHRfaGVhZGVyU2l6ZSl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9fQotcmV0dXJue1RyYWNlU3RyZWFtLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmZ1Y2hzaWEnLGZ1bmN0aW9uKCl7Y29uc3QgSU1QT1JUX1BSSU9SSVRZPTA7Y29uc3QgSURMRV9USFJFQURfVEhSRVNIT0xEPTY0NDQwMDAwMDA7Y2xhc3MgRnVjaHNpYUltcG9ydGVyIGV4dGVuZHMgdHIuaW1wb3J0ZXIuSW1wb3J0ZXJ7Y29uc3RydWN0b3IobW9kZWwsZXZlbnREYXRhKXtzdXBlcihtb2RlbCxldmVudERhdGEpO3RoaXMuaW1wb3J0UHJpb3JpdHk9SU1QT1JUX1BSSU9SSVRZO3RoaXMubW9kZWxfPW1vZGVsO3RoaXMuZXZlbnRzXz1ldmVudERhdGEuZXZlbnRzO3RoaXMucGFyc2Vyc189W107dGhpcy50aHJlYWRJbmZvXz1uZXcgTWFwKCk7dGhpcy5wcm9jZXNzTmFtZXNfPW5ldyBNYXAoKTt9Ci1zdGF0aWMgY2FuSW1wb3J0KGV2ZW50RGF0YSl7aWYoZXZlbnREYXRhIGluc3RhbmNlb2YgdHIuYi5UcmFjZVN0cmVhbSl7aWYoZXZlbnREYXRhLmlzQmluYXJ5KXJldHVybiBmYWxzZTtldmVudERhdGE9ZXZlbnREYXRhLmhlYWRlcjt9Ci1pZihldmVudERhdGEgaW5zdGFuY2VvZiBPYmplY3QmJmV2ZW50RGF0YS50eXBlPT09J2Z1Y2hzaWEnKXtyZXR1cm4gdHJ1ZTt9Ci1yZXR1cm4gZmFsc2U7fQotZ2V0IGltcG9ydGVyTmFtZSgpe3JldHVybidGdWNoc2lhSW1wb3J0ZXInO30KLWdldCBtb2RlbCgpe3JldHVybiB0aGlzLm1vZGVsXzt9Ci1pbXBvcnRDbG9ja1N5bmNNYXJrZXJzKCl7fQotZmluYWxpemVJbXBvcnQoKXt9Ci1wcm9jZXNzQ29udGV4dFN3aXRjaEV2ZW50XyhldmVudCl7bGV0IHRpZD1ldmVudC5pbi50aWQ7bGV0IHRocmVhZE5hbWU9dGlkLnRvU3RyaW5nKCk7bGV0IHByb2NOYW1lPScnO2lmKHRoaXMudGhyZWFkSW5mb18uaGFzKHRpZCkpe2NvbnN0IHRocmVhZEluZm89dGhpcy50aHJlYWRJbmZvXy5nZXQodGlkKTt0aHJlYWROYW1lPXRocmVhZEluZm8ubmFtZTtjb25zdCBwaWQ9dGhyZWFkSW5mby5waWQ7aWYodGhpcy5wcm9jZXNzTmFtZXNfLmhhcyhwaWQpKXtwcm9jTmFtZT10aGlzLnByb2Nlc3NOYW1lc18uZ2V0KHBpZCkrJzonO319Ci1jb25zdCBuYW1lPXByb2NOYW1lK3RocmVhZE5hbWU7aWYodGlkPklETEVfVEhSRUFEX1RIUkVTSE9MRCl7dGlkPXVuZGVmaW5lZDt9Ci1jb25zdCBjcHU9dGhpcy5tb2RlbF8ua2VybmVsLmdldE9yQ3JlYXRlQ3B1KGV2ZW50LmNwdSk7Y3B1LnN3aXRjaEFjdGl2ZVRocmVhZCh0ci5iLlVuaXQudGltZXN0YW1wRnJvbVVzKGV2ZW50LnRzKSx7fSx0aWQsbmFtZSx0aWQpO30KLXByb2Nlc3NQcm9jZXNzSW5mb0V2ZW50XyhldmVudCl7Y29uc3QgcHJvY2Vzcz10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKTtwcm9jZXNzLm5hbWU9ZXZlbnQubmFtZTt0aGlzLnByb2Nlc3NOYW1lc18uc2V0KGV2ZW50LnBpZCxldmVudC5uYW1lKTtpZignc29ydF9pbmRleCdpbiBldmVudCl7cHJvY2Vzcy5zb3J0SW5kZXg9ZXZlbnQuc29ydF9pbmRleDt9fQotcHJvY2Vzc1RocmVhZEluZm9FdmVudF8oZXZlbnQpe2NvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKS5nZXRPckNyZWF0ZVRocmVhZChldmVudC50aWQpO3RocmVhZC5uYW1lPWV2ZW50Lm5hbWU7dGhpcy50aHJlYWRJbmZvXy5zZXQoZXZlbnQudGlkLHsnbmFtZSc6ZXZlbnQubmFtZSwncGlkJzpldmVudC5waWR9KTtpZignc29ydF9pbmRleCdpbiBldmVudCl7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhldmVudC5waWQpLmdldE9yQ3JlYXRlVGhyZWFkKGV2ZW50LnRpZCk7dGhyZWFkLnNvcnRJbmRleD1ldmVudC5zb3J0X2luZGV4O319Ci1wcm9jZXNzRXZlbnRfKGV2ZW50KXtzd2l0Y2goZXZlbnQucGgpe2Nhc2Unayc6dGhpcy5wcm9jZXNzQ29udGV4dFN3aXRjaEV2ZW50XyhldmVudCk7YnJlYWs7Y2FzZSdwJzp0aGlzLnByb2Nlc3NQcm9jZXNzSW5mb0V2ZW50XyhldmVudCk7YnJlYWs7Y2FzZSd0Jzp0aGlzLnByb2Nlc3NUaHJlYWRJbmZvRXZlbnRfKGV2ZW50KTticmVhazt9fQotaW1wb3J0RXZlbnRzKCl7Zm9yKGNvbnN0IGV2ZW50IG9mIHRoaXMuZXZlbnRzXyl7dGhpcy5wcm9jZXNzRXZlbnRfKGV2ZW50KTt9fX0KLXRyLmltcG9ydGVyLkltcG9ydGVyLnJlZ2lzdGVyKEZ1Y2hzaWFJbXBvcnRlcik7cmV0dXJue0Z1Y2hzaWFJbXBvcnRlcixJTVBPUlRfUFJJT1JJVFksfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y29uc3QgTUFYX0ZVTkNUSU9OX0FSR1NfQ09VTlQ9TWF0aC5wb3coMiwxNSktMTtjbGFzcyBJbk1lbW9yeVRyYWNlU3RyZWFtIGV4dGVuZHMgdHIuYi5UcmFjZVN0cmVhbXtjb25zdHJ1Y3RvcihidWZmZXIsaXNCaW5hcnksb3B0X2hlYWRlclNpemUpe3N1cGVyKCk7aWYoIWJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe3Rocm93IG5ldyBFcnJvcignYnVmZmVyIHNob3VsZCBiZSBhIFVpbnQ4QXJyYXknKTt9Ci1jb25zdCBoZWFkZXJTaXplPW9wdF9oZWFkZXJTaXplfHx0ci5iLlRyYWNlU3RyZWFtLkhFQURFUl9TSVpFO3RoaXMuZGF0YV89YnVmZmVyO3RoaXMuaXNCaW5hcnlfPWlzQmluYXJ5O3RoaXMuaGVhZGVyXz1Jbk1lbW9yeVRyYWNlU3RyZWFtLnVpbnQ4QXJyYXlUb1N0cmluZ18odGhpcy5kYXRhXy5zdWJhcnJheSgwLGhlYWRlclNpemUpKTt0aGlzLmN1cnNvcl89MDt9Ci1nZXQgaXNCaW5hcnkoKXtyZXR1cm4gdGhpcy5pc0JpbmFyeV87fQotZ2V0IGhhc0RhdGEoKXtyZXR1cm4gdGhpcy5jdXJzb3JfPHRoaXMuZGF0YV8ubGVuZ3RoO30KLWdldCBoZWFkZXIoKXtyZXR1cm4gdGhpcy5oZWFkZXJfO30KLWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuZGF0YV87fQotdG9TdHJpbmcoKXt0aGlzLnJld2luZCgpO3JldHVybiB0aGlzLnJlYWROdW1CeXRlcyhOdW1iZXIuTUFYX1ZBTFVFKTt9Ci1yZWFkVW50aWxEZWxpbWl0ZXIoZGVsaW0pe2lmKGRlbGltLmxlbmd0aCE9PTEpe3Rocm93IG5ldyBFcnJvcignZGVsaW0gbXVzdCBiZSBleGFjdGx5IG9uZSBjaGFyYWN0ZXInKTt9Ci1jb25zdCBvZmZzZXQ9dGhpcy5kYXRhXy5pbmRleE9mKGRlbGltLmNoYXJDb2RlQXQoMCksdGhpcy5jdXJzb3JfKSsxO3JldHVybiB0aGlzLnJlYWRUb09mZnNldF8ob2Zmc2V0PjA/TWF0aC5taW4ob2Zmc2V0LHRoaXMuZGF0YV8ubGVuZ3RoKTp0aGlzLmRhdGFfLmxlbmd0aCk7fQotcmVhZE51bUJ5dGVzKG9wdF9zaXplKXtpZihvcHRfc2l6ZSE9PXVuZGVmaW5lZCYmb3B0X3NpemU8PTApe3Rocm93IG5ldyBFcnJvcihgcmVhZE51bUJ5dGVzIGV4cGVjdHMgYSBwb3NpdGl2ZSBzaXplICgke29wdF9zaXplfSBnaXZlbilgKTt9Ci1jb25zdCBzaXplPW9wdF9zaXplfHx0ci5iLlRyYWNlU3RyZWFtLkNIVU5LX1NJWkU7Y29uc3Qgb2Zmc2V0PU1hdGgubWluKHRoaXMuY3Vyc29yXytzaXplLHRoaXMuZGF0YV8ubGVuZ3RoKTtyZXR1cm4gdGhpcy5yZWFkVG9PZmZzZXRfKG9mZnNldCk7fQotcmV3aW5kKCl7dGhpcy5jdXJzb3JfPTA7fQotc3Vic3RyZWFtKHN0YXJ0T2Zmc2V0LG9wdF9lbmRPZmZzZXQsb3B0X2hlYWRlclNpemUpe3JldHVybiBuZXcgSW5NZW1vcnlUcmFjZVN0cmVhbSh0aGlzLmRhdGFfLnN1YmFycmF5KHN0YXJ0T2Zmc2V0LG9wdF9lbmRPZmZzZXQpLHRoaXMuaXNCaW5hcnlfLG9wdF9oZWFkZXJTaXplKTt9Ci1yZWFkVG9PZmZzZXRfKG9mZnNldCl7Y29uc3Qgb3V0PUluTWVtb3J5VHJhY2VTdHJlYW0udWludDhBcnJheVRvU3RyaW5nXyh0aGlzLmRhdGFfLnN1YmFycmF5KHRoaXMuY3Vyc29yXyxvZmZzZXQpKTt0aGlzLmN1cnNvcl89b2Zmc2V0O3JldHVybiBvdXQ7fQotc3RhdGljIHVpbnQ4QXJyYXlUb1N0cmluZ18oYXJyKXtpZih0eXBlb2YgVGV4dERlY29kZXIhPT0ndW5kZWZpbmVkJyl7Y29uc3QgZGVjb2Rlcj1uZXcgVGV4dERlY29kZXIoJ3V0Zi04Jyk7cmV0dXJuIGRlY29kZXIuZGVjb2RlKGFycik7fQotY29uc3QgYz1bXTtmb3IobGV0IGk9MDtpPGFyci5sZW5ndGg7aSs9TUFYX0ZVTkNUSU9OX0FSR1NfQ09VTlQpe2MucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmFyci5zdWJhcnJheShpLGkrTUFYX0ZVTkNUSU9OX0FSR1NfQ09VTlQpKSk7fQotcmV0dXJuIGMuam9pbignJyk7fX0KLXJldHVybntJbk1lbW9yeVRyYWNlU3RyZWFtLH07fSk7IWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dCgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sdCk7ZWxzZXsoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKS5wYWtvPXQoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxhLGkpe2Z1bmN0aW9uIG4ocyxvKXtpZighYVtzXSl7aWYoIWVbc10pe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFvJiZsKXJldHVybiBsKHMsITApO2lmKHIpcmV0dXJuIHIocywhMCk7dmFyIGg9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrcysiJyIpO3Rocm93IGguY29kZT0iTU9EVUxFX05PVF9GT1VORCIsaH12YXIgZD1hW3NdPXtleHBvcnRzOnt9fTtlW3NdWzBdLmNhbGwoZC5leHBvcnRzLGZ1bmN0aW9uKHQpe3ZhciBhPWVbc11bMV1bdF07cmV0dXJuIG4oYXx8dCl9LGQsZC5leHBvcnRzLHQsZSxhLGkpfXJldHVybiBhW3NdLmV4cG9ydHN9Zm9yKHZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLHM9MDtzPGkubGVuZ3RoO3MrKyluKGlbc10pO3JldHVybiBufSh7MTpbZnVuY3Rpb24odCxlLGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGkpKXJldHVybiBuZXcgaSh0KTt0aGlzLm9wdGlvbnM9cy5hc3NpZ24oe2xldmVsOl8sbWV0aG9kOmMsY2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxzdHJhdGVneTp1LHRvOiIifSx0fHx7fSk7dmFyIGU9dGhpcy5vcHRpb25zO2UucmF3JiZlLndpbmRvd0JpdHM+MD9lLndpbmRvd0JpdHM9LWUud2luZG93Qml0czplLmd6aXAmJmUud2luZG93Qml0cz4wJiZlLndpbmRvd0JpdHM8MTYmJihlLndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBoLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgYT1yLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sZS5sZXZlbCxlLm1ldGhvZCxlLndpbmRvd0JpdHMsZS5tZW1MZXZlbCxlLnN0cmF0ZWd5KTtpZihhIT09Zil0aHJvdyBuZXcgRXJyb3IobFthXSk7aWYoZS5oZWFkZXImJnIuZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sZS5oZWFkZXIpLGUuZGljdGlvbmFyeSl7dmFyIG47aWYobj0ic3RyaW5nIj09dHlwZW9mIGUuZGljdGlvbmFyeT9vLnN0cmluZzJidWYoZS5kaWN0aW9uYXJ5KToiW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09ZC5jYWxsKGUuZGljdGlvbmFyeSk/bmV3IFVpbnQ4QXJyYXkoZS5kaWN0aW9uYXJ5KTplLmRpY3Rpb25hcnksKGE9ci5kZWZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sbikpIT09Zil0aHJvdyBuZXcgRXJyb3IobFthXSk7dGhpcy5fZGljdF9zZXQ9ITB9fWZ1bmN0aW9uIG4odCxlKXt2YXIgYT1uZXcgaShlKTtpZihhLnB1c2godCwhMCksYS5lcnIpdGhyb3cgYS5tc2d8fGxbYS5lcnJdO3JldHVybiBhLnJlc3VsdH12YXIgcj10KCIuL3psaWIvZGVmbGF0ZSIpLHM9dCgiLi91dGlscy9jb21tb24iKSxvPXQoIi4vdXRpbHMvc3RyaW5ncyIpLGw9dCgiLi96bGliL21lc3NhZ2VzIiksaD10KCIuL3psaWIvenN0cmVhbSIpLGQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxmPTAsXz0tMSx1PTAsYz04O2kucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXt2YXIgYSxpLG49dGhpcy5zdHJtLGw9dGhpcy5vcHRpb25zLmNodW5rU2l6ZTtpZih0aGlzLmVuZGVkKXJldHVybiExO2k9ZT09PX5+ZT9lOiEwPT09ZT80OjAsInN0cmluZyI9PXR5cGVvZiB0P24uaW5wdXQ9by5zdHJpbmcyYnVmKHQpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1kLmNhbGwodCk/bi5pbnB1dD1uZXcgVWludDhBcnJheSh0KTpuLmlucHV0PXQsbi5uZXh0X2luPTAsbi5hdmFpbF9pbj1uLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09bi5hdmFpbF9vdXQmJihuLm91dHB1dD1uZXcgcy5CdWY4KGwpLG4ubmV4dF9vdXQ9MCxuLmF2YWlsX291dD1sKSwxIT09KGE9ci5kZWZsYXRlKG4saSkpJiZhIT09ZilyZXR1cm4gdGhpcy5vbkVuZChhKSx0aGlzLmVuZGVkPSEwLCExOzAhPT1uLmF2YWlsX291dCYmKDAhPT1uLmF2YWlsX2lufHw0IT09aSYmMiE9PWkpfHwoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5vbkRhdGEoby5idWYyYmluc3RyaW5nKHMuc2hyaW5rQnVmKG4ub3V0cHV0LG4ubmV4dF9vdXQpKSk6dGhpcy5vbkRhdGEocy5zaHJpbmtCdWYobi5vdXRwdXQsbi5uZXh0X291dCkpKX13aGlsZSgobi5hdmFpbF9pbj4wfHwwPT09bi5hdmFpbF9vdXQpJiYxIT09YSk7cmV0dXJuIDQ9PT1pPyhhPXIuZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoYSksdGhpcy5lbmRlZD0hMCxhPT09Zik6MiE9PWl8fCh0aGlzLm9uRW5kKGYpLG4uYXZhaWxfb3V0PTAsITApfSxpLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24odCl7dGhpcy5jaHVua3MucHVzaCh0KX0saS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24odCl7dD09PWYmJigic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKCIiKTp0aGlzLnJlc3VsdD1zLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj10LHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LGEuRGVmbGF0ZT1pLGEuZGVmbGF0ZT1uLGEuZGVmbGF0ZVJhdz1mdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fHt9LGUucmF3PSEwLG4odCxlKX0sYS5nemlwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZXx8e30sZS5nemlwPSEwLG4odCxlKX19LHsiLi91dGlscy9jb21tb24iOjMsIi4vdXRpbHMvc3RyaW5ncyI6NCwiLi96bGliL2RlZmxhdGUiOjgsIi4vemxpYi9tZXNzYWdlcyI6MTMsIi4vemxpYi96c3RyZWFtIjoxNX1dLDI6W2Z1bmN0aW9uKHQsZSxhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkodCk7dGhpcy5vcHRpb25zPXMuYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSx0fHx7fSk7dmFyIGU9dGhpcy5vcHRpb25zO2UucmF3JiZlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNiYmKGUud2luZG93Qml0cz0tZS53aW5kb3dCaXRzLDA9PT1lLndpbmRvd0JpdHMmJihlLndpbmRvd0JpdHM9LTE1KSksIShlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNil8fHQmJnQud2luZG93Qml0c3x8KGUud2luZG93Qml0cys9MzIpLGUud2luZG93Qml0cz4xNSYmZS53aW5kb3dCaXRzPDQ4JiYwPT0oMTUmZS53aW5kb3dCaXRzKSYmKGUud2luZG93Qml0c3w9MTUpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IGQsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBhPXIuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSxlLndpbmRvd0JpdHMpO2lmKGEhPT1sLlpfT0spdGhyb3cgbmV3IEVycm9yKGhbYV0pO3RoaXMuaGVhZGVyPW5ldyBmLHIuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfWZ1bmN0aW9uIG4odCxlKXt2YXIgYT1uZXcgaShlKTtpZihhLnB1c2godCwhMCksYS5lcnIpdGhyb3cgYS5tc2d8fGhbYS5lcnJdO3JldHVybiBhLnJlc3VsdH12YXIgcj10KCIuL3psaWIvaW5mbGF0ZSIpLHM9dCgiLi91dGlscy9jb21tb24iKSxvPXQoIi4vdXRpbHMvc3RyaW5ncyIpLGw9dCgiLi96bGliL2NvbnN0YW50cyIpLGg9dCgiLi96bGliL21lc3NhZ2VzIiksZD10KCIuL3psaWIvenN0cmVhbSIpLGY9dCgiLi96bGliL2d6aGVhZGVyIiksXz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2kucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXt2YXIgYSxpLG4saCxkLGYsdT10aGlzLnN0cm0sYz10aGlzLm9wdGlvbnMuY2h1bmtTaXplLGI9dGhpcy5vcHRpb25zLmRpY3Rpb25hcnksZz0hMTtpZih0aGlzLmVuZGVkKXJldHVybiExO2k9ZT09PX5+ZT9lOiEwPT09ZT9sLlpfRklOSVNIOmwuWl9OT19GTFVTSCwic3RyaW5nIj09dHlwZW9mIHQ/dS5pbnB1dD1vLmJpbnN0cmluZzJidWYodCk6IltvYmplY3QgQXJyYXlCdWZmZXJdIj09PV8uY2FsbCh0KT91LmlucHV0PW5ldyBVaW50OEFycmF5KHQpOnUuaW5wdXQ9dCx1Lm5leHRfaW49MCx1LmF2YWlsX2luPXUuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT11LmF2YWlsX291dCYmKHUub3V0cHV0PW5ldyBzLkJ1ZjgoYyksdS5uZXh0X291dD0wLHUuYXZhaWxfb3V0PWMpLChhPXIuaW5mbGF0ZSh1LGwuWl9OT19GTFVTSCkpPT09bC5aX05FRURfRElDVCYmYiYmKGY9InN0cmluZyI9PXR5cGVvZiBiP28uc3RyaW5nMmJ1ZihiKToiW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09Xy5jYWxsKGIpP25ldyBVaW50OEFycmF5KGIpOmIsYT1yLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxmKSksYT09PWwuWl9CVUZfRVJST1ImJiEwPT09ZyYmKGE9bC5aX09LLGc9ITEpLGEhPT1sLlpfU1RSRUFNX0VORCYmYSE9PWwuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChhKSx0aGlzLmVuZGVkPSEwLCExO3UubmV4dF9vdXQmJigwIT09dS5hdmFpbF9vdXQmJmEhPT1sLlpfU1RSRUFNX0VORCYmKDAhPT11LmF2YWlsX2lufHxpIT09bC5aX0ZJTklTSCYmaSE9PWwuWl9TWU5DX0ZMVVNIKXx8KCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyhuPW8udXRmOGJvcmRlcih1Lm91dHB1dCx1Lm5leHRfb3V0KSxoPXUubmV4dF9vdXQtbixkPW8uYnVmMnN0cmluZyh1Lm91dHB1dCxuKSx1Lm5leHRfb3V0PWgsdS5hdmFpbF9vdXQ9Yy1oLGgmJnMuYXJyYXlTZXQodS5vdXRwdXQsdS5vdXRwdXQsbixoLDApLHRoaXMub25EYXRhKGQpKTp0aGlzLm9uRGF0YShzLnNocmlua0J1Zih1Lm91dHB1dCx1Lm5leHRfb3V0KSkpKSwwPT09dS5hdmFpbF9pbiYmMD09PXUuYXZhaWxfb3V0JiYoZz0hMCl9d2hpbGUoKHUuYXZhaWxfaW4+MHx8MD09PXUuYXZhaWxfb3V0KSYmYSE9PWwuWl9TVFJFQU1fRU5EKTtyZXR1cm4gYT09PWwuWl9TVFJFQU1fRU5EJiYoaT1sLlpfRklOSVNIKSxpPT09bC5aX0ZJTklTSD8oYT1yLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKGEpLHRoaXMuZW5kZWQ9ITAsYT09PWwuWl9PSyk6aSE9PWwuWl9TWU5DX0ZMVVNIfHwodGhpcy5vbkVuZChsLlpfT0spLHUuYXZhaWxfb3V0PTAsITApfSxpLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24odCl7dGhpcy5jaHVua3MucHVzaCh0KX0saS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24odCl7dD09PWwuWl9PSyYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PXMuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPXQsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sYS5JbmZsYXRlPWksYS5pbmZsYXRlPW4sYS5pbmZsYXRlUmF3PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZXx8e30sZS5yYXc9ITAsbih0LGUpfSxhLnVuZ3ppcD1ufSx7Ii4vdXRpbHMvY29tbW9uIjozLCIuL3V0aWxzL3N0cmluZ3MiOjQsIi4vemxpYi9jb25zdGFudHMiOjYsIi4vemxpYi9nemhlYWRlciI6OSwiLi96bGliL2luZmxhdGUiOjExLCIuL3psaWIvbWVzc2FnZXMiOjEzLCIuL3psaWIvenN0cmVhbSI6MTV9XSwzOltmdW5jdGlvbih0LGUsYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQxNkFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIEludDMyQXJyYXk7YS5hc3NpZ249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtlLmxlbmd0aDspe3ZhciBhPWUuc2hpZnQoKTtpZihhKXtpZigib2JqZWN0IiE9dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcihhKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIG4gaW4gYSlpKGEsbikmJih0W25dPWFbbl0pfX1yZXR1cm4gdH0sYS5zaHJpbmtCdWY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg9PT1lP3Q6dC5zdWJhcnJheT90LnN1YmFycmF5KDAsZSk6KHQubGVuZ3RoPWUsdCl9O3ZhciByPXthcnJheVNldDpmdW5jdGlvbih0LGUsYSxpLG4pe2lmKGUuc3ViYXJyYXkmJnQuc3ViYXJyYXkpdC5zZXQoZS5zdWJhcnJheShhLGEraSksbik7ZWxzZSBmb3IodmFyIHI9MDtyPGk7cisrKXRbbityXT1lW2Ercl19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24odCl7dmFyIGUsYSxpLG4scixzO2ZvcihpPTAsZT0wLGE9dC5sZW5ndGg7ZTxhO2UrKylpKz10W2VdLmxlbmd0aDtmb3Iocz1uZXcgVWludDhBcnJheShpKSxuPTAsZT0wLGE9dC5sZW5ndGg7ZTxhO2UrKylyPXRbZV0scy5zZXQocixuKSxuKz1yLmxlbmd0aDtyZXR1cm4gc319LHM9e2FycmF5U2V0OmZ1bmN0aW9uKHQsZSxhLGksbil7Zm9yKHZhciByPTA7cjxpO3IrKyl0W24rcl09ZVthK3JdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKHQpe3JldHVybltdLmNvbmNhdC5hcHBseShbXSx0KX19O2Euc2V0VHlwZWQ9ZnVuY3Rpb24odCl7dD8oYS5CdWY4PVVpbnQ4QXJyYXksYS5CdWYxNj1VaW50MTZBcnJheSxhLkJ1ZjMyPUludDMyQXJyYXksYS5hc3NpZ24oYSxyKSk6KGEuQnVmOD1BcnJheSxhLkJ1ZjE2PUFycmF5LGEuQnVmMzI9QXJyYXksYS5hc3NpZ24oYSxzKSl9LGEuc2V0VHlwZWQobil9LHt9XSw0OltmdW5jdGlvbih0LGUsYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCxlKXtpZihlPDY1NTM3JiYodC5zdWJhcnJheSYmc3x8IXQuc3ViYXJyYXkmJnIpKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbi5zaHJpbmtCdWYodCxlKSk7Zm9yKHZhciBhPSIiLGk9MDtpPGU7aSsrKWErPVN0cmluZy5mcm9tQ2hhckNvZGUodFtpXSk7cmV0dXJuIGF9dmFyIG49dCgiLi9jb21tb24iKSxyPSEwLHM9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0pfWNhdGNoKHQpe3I9ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2godCl7cz0hMX1mb3IodmFyIG89bmV3IG4uQnVmOCgyNTYpLGw9MDtsPDI1NjtsKyspb1tsXT1sPj0yNTI/NjpsPj0yNDg/NTpsPj0yNDA/NDpsPj0yMjQ/MzpsPj0xOTI/MjoxO29bMjU0XT1vWzI1NF09MSxhLnN0cmluZzJidWY9ZnVuY3Rpb24odCl7dmFyIGUsYSxpLHIscyxvPXQubGVuZ3RoLGw9MDtmb3Iocj0wO3I8bztyKyspNTUyOTY9PSg2NDUxMiYoYT10LmNoYXJDb2RlQXQocikpKSYmcisxPG8mJjU2MzIwPT0oNjQ1MTImKGk9dC5jaGFyQ29kZUF0KHIrMSkpKSYmKGE9NjU1MzYrKGEtNTUyOTY8PDEwKSsoaS01NjMyMCkscisrKSxsKz1hPDEyOD8xOmE8MjA0OD8yOmE8NjU1MzY/Mzo0O2ZvcihlPW5ldyBuLkJ1ZjgobCkscz0wLHI9MDtzPGw7cisrKTU1Mjk2PT0oNjQ1MTImKGE9dC5jaGFyQ29kZUF0KHIpKSkmJnIrMTxvJiY1NjMyMD09KDY0NTEyJihpPXQuY2hhckNvZGVBdChyKzEpKSkmJihhPTY1NTM2KyhhLTU1Mjk2PDwxMCkrKGktNTYzMjApLHIrKyksYTwxMjg/ZVtzKytdPWE6YTwyMDQ4PyhlW3MrK109MTkyfGE+Pj42LGVbcysrXT0xMjh8NjMmYSk6YTw2NTUzNj8oZVtzKytdPTIyNHxhPj4+MTIsZVtzKytdPTEyOHxhPj4+NiY2MyxlW3MrK109MTI4fDYzJmEpOihlW3MrK109MjQwfGE+Pj4xOCxlW3MrK109MTI4fGE+Pj4xMiY2MyxlW3MrK109MTI4fGE+Pj42JjYzLGVbcysrXT0xMjh8NjMmYSk7cmV0dXJuIGV9LGEuYnVmMmJpbnN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LHQubGVuZ3RoKX0sYS5iaW5zdHJpbmcyYnVmPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgbi5CdWY4KHQubGVuZ3RoKSxhPTAsaT1lLmxlbmd0aDthPGk7YSsrKWVbYV09dC5jaGFyQ29kZUF0KGEpO3JldHVybiBlfSxhLmJ1ZjJzdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgYSxuLHIscyxsPWV8fHQubGVuZ3RoLGg9bmV3IEFycmF5KDIqbCk7Zm9yKG49MCxhPTA7YTxsOylpZigocj10W2ErK10pPDEyOCloW24rK109cjtlbHNlIGlmKChzPW9bcl0pPjQpaFtuKytdPTY1NTMzLGErPXMtMTtlbHNle2ZvcihyJj0yPT09cz8zMTozPT09cz8xNTo3O3M+MSYmYTxsOylyPXI8PDZ8NjMmdFthKytdLHMtLTtzPjE/aFtuKytdPTY1NTMzOnI8NjU1MzY/aFtuKytdPXI6KHItPTY1NTM2LGhbbisrXT01NTI5NnxyPj4xMCYxMDIzLGhbbisrXT01NjMyMHwxMDIzJnIpfXJldHVybiBpKGgsbil9LGEudXRmOGJvcmRlcj1mdW5jdGlvbih0LGUpe3ZhciBhO2ZvcigoZT1lfHx0Lmxlbmd0aCk+dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxhPWUtMTthPj0wJiYxMjg9PSgxOTImdFthXSk7KWEtLTtyZXR1cm4gYTwwP2U6MD09PWE/ZTphK29bdFthXV0+ZT9hOmV9fSx7Ii4vY29tbW9uIjozfV0sNTpbZnVuY3Rpb24odCxlLGEpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLGEsaSl7Zm9yKHZhciBuPTY1NTM1JnR8MCxyPXQ+Pj4xNiY2NTUzNXwwLHM9MDswIT09YTspe2EtPXM9YT4yZTM/MmUzOmE7ZG97cj1yKyhuPW4rZVtpKytdfDApfDB9d2hpbGUoLS1zKTtuJT02NTUyMSxyJT02NTUyMX1yZXR1cm4gbnxyPDwxNnwwfX0se31dLDY6W2Z1bmN0aW9uKHQsZSxhKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9UUkVFUzo2LFpfT0s6MCxaX1NUUkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9EQVRBX0VSUk9SOi0zLFpfQlVGX0VSUk9SOi01LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJT046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9PTkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZBVUxUX1NUUkFURUdZOjAsWl9CSU5BUlk6MCxaX1RFWFQ6MSxaX1VOS05PV046MixaX0RFRkxBVEVEOjh9fSx7fV0sNzpbZnVuY3Rpb24odCxlLGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgaT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLGE9MDthPDI1NjthKyspe3Q9YTtmb3IodmFyIGk9MDtpPDg7aSsrKXQ9MSZ0PzM5ODgyOTIzODRedD4+PjE6dD4+PjE7ZVthXT10fXJldHVybiBlfSgpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUsYSxuKXt2YXIgcj1pLHM9bithO3RePS0xO2Zvcih2YXIgbz1uO288cztvKyspdD10Pj4+OF5yWzI1NSYodF5lW29dKV07cmV0dXJuLTFedH19LHt9XSw4OltmdW5jdGlvbih0LGUsYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC5tc2c9QVtlXSxlfWZ1bmN0aW9uIG4odCl7cmV0dXJuKHQ8PDEpLSh0PjQ/OTowKX1mdW5jdGlvbiByKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDstLWU+PTA7KXRbZV09MH1mdW5jdGlvbiBzKHQpe3ZhciBlPXQuc3RhdGUsYT1lLnBlbmRpbmc7YT50LmF2YWlsX291dCYmKGE9dC5hdmFpbF9vdXQpLDAhPT1hJiYoei5hcnJheVNldCh0Lm91dHB1dCxlLnBlbmRpbmdfYnVmLGUucGVuZGluZ19vdXQsYSx0Lm5leHRfb3V0KSx0Lm5leHRfb3V0Kz1hLGUucGVuZGluZ19vdXQrPWEsdC50b3RhbF9vdXQrPWEsdC5hdmFpbF9vdXQtPWEsZS5wZW5kaW5nLT1hLDA9PT1lLnBlbmRpbmcmJihlLnBlbmRpbmdfb3V0PTApKX1mdW5jdGlvbiBvKHQsZSl7Qi5fdHJfZmx1c2hfYmxvY2sodCx0LmJsb2NrX3N0YXJ0Pj0wP3QuYmxvY2tfc3RhcnQ6LTEsdC5zdHJzdGFydC10LmJsb2NrX3N0YXJ0LGUpLHQuYmxvY2tfc3RhcnQ9dC5zdHJzdGFydCxzKHQuc3RybSl9ZnVuY3Rpb24gbCh0LGUpe3QucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPWV9ZnVuY3Rpb24gaCh0LGUpe3QucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPWU+Pj44JjI1NSx0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmZX1mdW5jdGlvbiBkKHQsZSxhLGkpe3ZhciBuPXQuYXZhaWxfaW47cmV0dXJuIG4+aSYmKG49aSksMD09PW4/MDoodC5hdmFpbF9pbi09bix6LmFycmF5U2V0KGUsdC5pbnB1dCx0Lm5leHRfaW4sbixhKSwxPT09dC5zdGF0ZS53cmFwP3QuYWRsZXI9Uyh0LmFkbGVyLGUsbixhKToyPT09dC5zdGF0ZS53cmFwJiYodC5hZGxlcj1FKHQuYWRsZXIsZSxuLGEpKSx0Lm5leHRfaW4rPW4sdC50b3RhbF9pbis9bixuKX1mdW5jdGlvbiBmKHQsZSl7dmFyIGEsaSxuPXQubWF4X2NoYWluX2xlbmd0aCxyPXQuc3Ryc3RhcnQscz10LnByZXZfbGVuZ3RoLG89dC5uaWNlX21hdGNoLGw9dC5zdHJzdGFydD50Lndfc2l6ZS1pdD90LnN0cnN0YXJ0LSh0Lndfc2l6ZS1pdCk6MCxoPXQud2luZG93LGQ9dC53X21hc2ssZj10LnByZXYsXz10LnN0cnN0YXJ0K2F0LHU9aFtyK3MtMV0sYz1oW3Irc107dC5wcmV2X2xlbmd0aD49dC5nb29kX21hdGNoJiYobj4+PTIpLG8+dC5sb29rYWhlYWQmJihvPXQubG9va2FoZWFkKTtkb3tpZihhPWUsaFthK3NdPT09YyYmaFthK3MtMV09PT11JiZoW2FdPT09aFtyXSYmaFsrK2FdPT09aFtyKzFdKXtyKz0yLGErKztkb3t9d2hpbGUoaFsrK3JdPT09aFsrK2FdJiZoWysrcl09PT1oWysrYV0mJmhbKytyXT09PWhbKythXSYmaFsrK3JdPT09aFsrK2FdJiZoWysrcl09PT1oWysrYV0mJmhbKytyXT09PWhbKythXSYmaFsrK3JdPT09aFsrK2FdJiZoWysrcl09PT1oWysrYV0mJnI8Xyk7aWYoaT1hdC0oXy1yKSxyPV8tYXQsaT5zKXtpZih0Lm1hdGNoX3N0YXJ0PWUscz1pLGk+PW8pYnJlYWs7dT1oW3Ircy0xXSxjPWhbcitzXX19fXdoaWxlKChlPWZbZSZkXSk+bCYmMCE9LS1uKTtyZXR1cm4gczw9dC5sb29rYWhlYWQ/czp0Lmxvb2thaGVhZH1mdW5jdGlvbiBfKHQpe3ZhciBlLGEsaSxuLHIscz10Lndfc2l6ZTtkb3tpZihuPXQud2luZG93X3NpemUtdC5sb29rYWhlYWQtdC5zdHJzdGFydCx0LnN0cnN0YXJ0Pj1zKyhzLWl0KSl7ei5hcnJheVNldCh0LndpbmRvdyx0LndpbmRvdyxzLHMsMCksdC5tYXRjaF9zdGFydC09cyx0LnN0cnN0YXJ0LT1zLHQuYmxvY2tfc3RhcnQtPXMsZT1hPXQuaGFzaF9zaXplO2Rve2k9dC5oZWFkWy0tZV0sdC5oZWFkW2VdPWk+PXM/aS1zOjB9d2hpbGUoLS1hKTtlPWE9cztkb3tpPXQucHJldlstLWVdLHQucHJldltlXT1pPj1zP2ktczowfXdoaWxlKC0tYSk7bis9c31pZigwPT09dC5zdHJtLmF2YWlsX2luKWJyZWFrO2lmKGE9ZCh0LnN0cm0sdC53aW5kb3csdC5zdHJzdGFydCt0Lmxvb2thaGVhZCxuKSx0Lmxvb2thaGVhZCs9YSx0Lmxvb2thaGVhZCt0Lmluc2VydD49ZXQpZm9yKHI9dC5zdHJzdGFydC10Lmluc2VydCx0Lmluc19oPXQud2luZG93W3JdLHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1tyKzFdKSZ0Lmhhc2hfbWFzazt0Lmluc2VydCYmKHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1tyK2V0LTFdKSZ0Lmhhc2hfbWFzayx0LnByZXZbciZ0LndfbWFza109dC5oZWFkW3QuaW5zX2hdLHQuaGVhZFt0Lmluc19oXT1yLHIrKyx0Lmluc2VydC0tLCEodC5sb29rYWhlYWQrdC5pbnNlcnQ8ZXQpKTspO313aGlsZSh0Lmxvb2thaGVhZDxpdCYmMCE9PXQuc3RybS5hdmFpbF9pbil9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgYSxpOzspe2lmKHQubG9va2FoZWFkPGl0KXtpZihfKHQpLHQubG9va2FoZWFkPGl0JiZlPT09WilyZXR1cm4gX3Q7aWYoMD09PXQubG9va2FoZWFkKWJyZWFrfWlmKGE9MCx0Lmxvb2thaGVhZD49ZXQmJih0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbdC5zdHJzdGFydCtldC0xXSkmdC5oYXNoX21hc2ssYT10LnByZXZbdC5zdHJzdGFydCZ0LndfbWFza109dC5oZWFkW3QuaW5zX2hdLHQuaGVhZFt0Lmluc19oXT10LnN0cnN0YXJ0KSwwIT09YSYmdC5zdHJzdGFydC1hPD10Lndfc2l6ZS1pdCYmKHQubWF0Y2hfbGVuZ3RoPWYodCxhKSksdC5tYXRjaF9sZW5ndGg+PWV0KWlmKGk9Qi5fdHJfdGFsbHkodCx0LnN0cnN0YXJ0LXQubWF0Y2hfc3RhcnQsdC5tYXRjaF9sZW5ndGgtZXQpLHQubG9va2FoZWFkLT10Lm1hdGNoX2xlbmd0aCx0Lm1hdGNoX2xlbmd0aDw9dC5tYXhfbGF6eV9tYXRjaCYmdC5sb29rYWhlYWQ+PWV0KXt0Lm1hdGNoX2xlbmd0aC0tO2Rve3Quc3Ryc3RhcnQrKyx0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbdC5zdHJzdGFydCtldC0xXSkmdC5oYXNoX21hc2ssYT10LnByZXZbdC5zdHJzdGFydCZ0LndfbWFza109dC5oZWFkW3QuaW5zX2hdLHQuaGVhZFt0Lmluc19oXT10LnN0cnN0YXJ0fXdoaWxlKDAhPS0tdC5tYXRjaF9sZW5ndGgpO3Quc3Ryc3RhcnQrK31lbHNlIHQuc3Ryc3RhcnQrPXQubWF0Y2hfbGVuZ3RoLHQubWF0Y2hfbGVuZ3RoPTAsdC5pbnNfaD10LndpbmRvd1t0LnN0cnN0YXJ0XSx0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbdC5zdHJzdGFydCsxXSkmdC5oYXNoX21hc2s7ZWxzZSBpPUIuX3RyX3RhbGx5KHQsMCx0LndpbmRvd1t0LnN0cnN0YXJ0XSksdC5sb29rYWhlYWQtLSx0LnN0cnN0YXJ0Kys7aWYoaSYmKG8odCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiBfdH1yZXR1cm4gdC5pbnNlcnQ9dC5zdHJzdGFydDxldC0xP3Quc3Ryc3RhcnQ6ZXQtMSxlPT09Tj8obyh0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD9jdDpidCk6dC5sYXN0X2xpdCYmKG8odCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpP190OnV0fWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIGEsaSxuOzspe2lmKHQubG9va2FoZWFkPGl0KXtpZihfKHQpLHQubG9va2FoZWFkPGl0JiZlPT09WilyZXR1cm4gX3Q7aWYoMD09PXQubG9va2FoZWFkKWJyZWFrfWlmKGE9MCx0Lmxvb2thaGVhZD49ZXQmJih0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbdC5zdHJzdGFydCtldC0xXSkmdC5oYXNoX21hc2ssYT10LnByZXZbdC5zdHJzdGFydCZ0LndfbWFza109dC5oZWFkW3QuaW5zX2hdLHQuaGVhZFt0Lmluc19oXT10LnN0cnN0YXJ0KSx0LnByZXZfbGVuZ3RoPXQubWF0Y2hfbGVuZ3RoLHQucHJldl9tYXRjaD10Lm1hdGNoX3N0YXJ0LHQubWF0Y2hfbGVuZ3RoPWV0LTEsMCE9PWEmJnQucHJldl9sZW5ndGg8dC5tYXhfbGF6eV9tYXRjaCYmdC5zdHJzdGFydC1hPD10Lndfc2l6ZS1pdCYmKHQubWF0Y2hfbGVuZ3RoPWYodCxhKSx0Lm1hdGNoX2xlbmd0aDw9NSYmKHQuc3RyYXRlZ3k9PT1IfHx0Lm1hdGNoX2xlbmd0aD09PWV0JiZ0LnN0cnN0YXJ0LXQubWF0Y2hfc3RhcnQ+NDA5NikmJih0Lm1hdGNoX2xlbmd0aD1ldC0xKSksdC5wcmV2X2xlbmd0aD49ZXQmJnQubWF0Y2hfbGVuZ3RoPD10LnByZXZfbGVuZ3RoKXtuPXQuc3Ryc3RhcnQrdC5sb29rYWhlYWQtZXQsaT1CLl90cl90YWxseSh0LHQuc3Ryc3RhcnQtMS10LnByZXZfbWF0Y2gsdC5wcmV2X2xlbmd0aC1ldCksdC5sb29rYWhlYWQtPXQucHJldl9sZW5ndGgtMSx0LnByZXZfbGVuZ3RoLT0yO2RveysrdC5zdHJzdGFydDw9biYmKHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0K2V0LTFdKSZ0Lmhhc2hfbWFzayxhPXQucHJldlt0LnN0cnN0YXJ0JnQud19tYXNrXT10LmhlYWRbdC5pbnNfaF0sdC5oZWFkW3QuaW5zX2hdPXQuc3Ryc3RhcnQpfXdoaWxlKDAhPS0tdC5wcmV2X2xlbmd0aCk7aWYodC5tYXRjaF9hdmFpbGFibGU9MCx0Lm1hdGNoX2xlbmd0aD1ldC0xLHQuc3Ryc3RhcnQrKyxpJiYobyh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIF90fWVsc2UgaWYodC5tYXRjaF9hdmFpbGFibGUpe2lmKChpPUIuX3RyX3RhbGx5KHQsMCx0LndpbmRvd1t0LnN0cnN0YXJ0LTFdKSkmJm8odCwhMSksdC5zdHJzdGFydCsrLHQubG9va2FoZWFkLS0sMD09PXQuc3RybS5hdmFpbF9vdXQpcmV0dXJuIF90fWVsc2UgdC5tYXRjaF9hdmFpbGFibGU9MSx0LnN0cnN0YXJ0KyssdC5sb29rYWhlYWQtLX1yZXR1cm4gdC5tYXRjaF9hdmFpbGFibGUmJihpPUIuX3RyX3RhbGx5KHQsMCx0LndpbmRvd1t0LnN0cnN0YXJ0LTFdKSx0Lm1hdGNoX2F2YWlsYWJsZT0wKSx0Lmluc2VydD10LnN0cnN0YXJ0PGV0LTE/dC5zdHJzdGFydDpldC0xLGU9PT1OPyhvKHQsITApLDA9PT10LnN0cm0uYXZhaWxfb3V0P2N0OmJ0KTp0Lmxhc3RfbGl0JiYobyh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCk/X3Q6dXR9ZnVuY3Rpb24gYih0LGUpe2Zvcih2YXIgYSxpLG4scixzPXQud2luZG93Ozspe2lmKHQubG9va2FoZWFkPD1hdCl7aWYoXyh0KSx0Lmxvb2thaGVhZDw9YXQmJmU9PT1aKXJldHVybiBfdDtpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9aWYodC5tYXRjaF9sZW5ndGg9MCx0Lmxvb2thaGVhZD49ZXQmJnQuc3Ryc3RhcnQ+MCYmKG49dC5zdHJzdGFydC0xLChpPXNbbl0pPT09c1srK25dJiZpPT09c1srK25dJiZpPT09c1srK25dKSl7cj10LnN0cnN0YXJ0K2F0O2Rve313aGlsZShpPT09c1srK25dJiZpPT09c1srK25dJiZpPT09c1srK25dJiZpPT09c1srK25dJiZpPT09c1srK25dJiZpPT09c1srK25dJiZpPT09c1srK25dJiZpPT09c1srK25dJiZuPHIpO3QubWF0Y2hfbGVuZ3RoPWF0LShyLW4pLHQubWF0Y2hfbGVuZ3RoPnQubG9va2FoZWFkJiYodC5tYXRjaF9sZW5ndGg9dC5sb29rYWhlYWQpfWlmKHQubWF0Y2hfbGVuZ3RoPj1ldD8oYT1CLl90cl90YWxseSh0LDEsdC5tYXRjaF9sZW5ndGgtZXQpLHQubG9va2FoZWFkLT10Lm1hdGNoX2xlbmd0aCx0LnN0cnN0YXJ0Kz10Lm1hdGNoX2xlbmd0aCx0Lm1hdGNoX2xlbmd0aD0wKTooYT1CLl90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydF0pLHQubG9va2FoZWFkLS0sdC5zdHJzdGFydCsrKSxhJiYobyh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIF90fXJldHVybiB0Lmluc2VydD0wLGU9PT1OPyhvKHQsITApLDA9PT10LnN0cm0uYXZhaWxfb3V0P2N0OmJ0KTp0Lmxhc3RfbGl0JiYobyh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCk/X3Q6dXR9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgYTs7KXtpZigwPT09dC5sb29rYWhlYWQmJihfKHQpLDA9PT10Lmxvb2thaGVhZCkpe2lmKGU9PT1aKXJldHVybiBfdDticmVha31pZih0Lm1hdGNoX2xlbmd0aD0wLGE9Qi5fdHJfdGFsbHkodCwwLHQud2luZG93W3Quc3Ryc3RhcnRdKSx0Lmxvb2thaGVhZC0tLHQuc3Ryc3RhcnQrKyxhJiYobyh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIF90fXJldHVybiB0Lmluc2VydD0wLGU9PT1OPyhvKHQsITApLDA9PT10LnN0cm0uYXZhaWxfb3V0P2N0OmJ0KTp0Lmxhc3RfbGl0JiYobyh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCk/X3Q6dXR9ZnVuY3Rpb24gbSh0LGUsYSxpLG4pe3RoaXMuZ29vZF9sZW5ndGg9dCx0aGlzLm1heF9sYXp5PWUsdGhpcy5uaWNlX2xlbmd0aD1hLHRoaXMubWF4X2NoYWluPWksdGhpcy5mdW5jPW59ZnVuY3Rpb24gdyh0KXt0LndpbmRvd19zaXplPTIqdC53X3NpemUscih0LmhlYWQpLHQubWF4X2xhenlfbWF0Y2g9eFt0LmxldmVsXS5tYXhfbGF6eSx0Lmdvb2RfbWF0Y2g9eFt0LmxldmVsXS5nb29kX2xlbmd0aCx0Lm5pY2VfbWF0Y2g9eFt0LmxldmVsXS5uaWNlX2xlbmd0aCx0Lm1heF9jaGFpbl9sZW5ndGg9eFt0LmxldmVsXS5tYXhfY2hhaW4sdC5zdHJzdGFydD0wLHQuYmxvY2tfc3RhcnQ9MCx0Lmxvb2thaGVhZD0wLHQuaW5zZXJ0PTAsdC5tYXRjaF9sZW5ndGg9dC5wcmV2X2xlbmd0aD1ldC0xLHQubWF0Y2hfYXZhaWxhYmxlPTAsdC5pbnNfaD0wfWZ1bmN0aW9uIHAoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0aGlzLm1ldGhvZD1xLHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5oYXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5tYXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMuZHluX2x0cmVlPW5ldyB6LkJ1ZjE2KDIqJCksdGhpcy5keW5fZHRyZWU9bmV3IHouQnVmMTYoMiooMipRKzEpKSx0aGlzLmJsX3RyZWU9bmV3IHouQnVmMTYoMiooMipWKzEpKSxyKHRoaXMuZHluX2x0cmVlKSxyKHRoaXMuZHluX2R0cmVlKSxyKHRoaXMuYmxfdHJlZSksdGhpcy5sX2Rlc2M9bnVsbCx0aGlzLmRfZGVzYz1udWxsLHRoaXMuYmxfZGVzYz1udWxsLHRoaXMuYmxfY291bnQ9bmV3IHouQnVmMTYodHQrMSksdGhpcy5oZWFwPW5ldyB6LkJ1ZjE2KDIqSisxKSxyKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyB6LkJ1ZjE2KDIqSisxKSxyKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIHYodCl7dmFyIGU7cmV0dXJuIHQmJnQuc3RhdGU/KHQudG90YWxfaW49dC50b3RhbF9vdXQ9MCx0LmRhdGFfdHlwZT1ZLGU9dC5zdGF0ZSxlLnBlbmRpbmc9MCxlLnBlbmRpbmdfb3V0PTAsZS53cmFwPDAmJihlLndyYXA9LWUud3JhcCksZS5zdGF0dXM9ZS53cmFwP3J0OmR0LHQuYWRsZXI9Mj09PWUud3JhcD8wOjEsZS5sYXN0X2ZsdXNoPVosQi5fdHJfaW5pdChlKSxEKTppKHQsVSl9ZnVuY3Rpb24gayh0KXt2YXIgZT12KHQpO3JldHVybiBlPT09RCYmdyh0LnN0YXRlKSxlfWZ1bmN0aW9uIHkodCxlLGEsbixyLHMpe2lmKCF0KXJldHVybiBVO3ZhciBvPTE7aWYoZT09PUwmJihlPTYpLG48MD8obz0wLG49LW4pOm4+MTUmJihvPTIsbi09MTYpLHI8MXx8cj5HfHxhIT09cXx8bjw4fHxuPjE1fHxlPDB8fGU+OXx8czwwfHxzPk0pcmV0dXJuIGkodCxVKTs4PT09biYmKG49OSk7dmFyIGw9bmV3IHA7cmV0dXJuIHQuc3RhdGU9bCxsLnN0cm09dCxsLndyYXA9byxsLmd6aGVhZD1udWxsLGwud19iaXRzPW4sbC53X3NpemU9MTw8bC53X2JpdHMsbC53X21hc2s9bC53X3NpemUtMSxsLmhhc2hfYml0cz1yKzcsbC5oYXNoX3NpemU9MTw8bC5oYXNoX2JpdHMsbC5oYXNoX21hc2s9bC5oYXNoX3NpemUtMSxsLmhhc2hfc2hpZnQ9fn4oKGwuaGFzaF9iaXRzK2V0LTEpL2V0KSxsLndpbmRvdz1uZXcgei5CdWY4KDIqbC53X3NpemUpLGwuaGVhZD1uZXcgei5CdWYxNihsLmhhc2hfc2l6ZSksbC5wcmV2PW5ldyB6LkJ1ZjE2KGwud19zaXplKSxsLmxpdF9idWZzaXplPTE8PHIrNixsLnBlbmRpbmdfYnVmX3NpemU9NCpsLmxpdF9idWZzaXplLGwucGVuZGluZ19idWY9bmV3IHouQnVmOChsLnBlbmRpbmdfYnVmX3NpemUpLGwuZF9idWY9MSpsLmxpdF9idWZzaXplLGwubF9idWY9MypsLmxpdF9idWZzaXplLGwubGV2ZWw9ZSxsLnN0cmF0ZWd5PXMsbC5tZXRob2Q9YSxrKHQpfXZhciB4LHo9dCgiLi4vdXRpbHMvY29tbW9uIiksQj10KCIuL3RyZWVzIiksUz10KCIuL2FkbGVyMzIiKSxFPXQoIi4vY3JjMzIiKSxBPXQoIi4vbWVzc2FnZXMiKSxaPTAsUj0xLEM9MyxOPTQsTz01LEQ9MCxJPTEsVT0tMixUPS0zLEY9LTUsTD0tMSxIPTEsaj0yLEs9MyxNPTQsUD0wLFk9MixxPTgsRz05LFg9MTUsVz04LEo9Mjg2LFE9MzAsVj0xOSwkPTIqSisxLHR0PTE1LGV0PTMsYXQ9MjU4LGl0PWF0K2V0KzEsbnQ9MzIscnQ9NDIsc3Q9Njksb3Q9NzMsbHQ9OTEsaHQ9MTAzLGR0PTExMyxmdD02NjYsX3Q9MSx1dD0yLGN0PTMsYnQ9NCxndD0zO3g9W25ldyBtKDAsMCwwLDAsZnVuY3Rpb24odCxlKXt2YXIgYT02NTUzNTtmb3IoYT50LnBlbmRpbmdfYnVmX3NpemUtNSYmKGE9dC5wZW5kaW5nX2J1Zl9zaXplLTUpOzspe2lmKHQubG9va2FoZWFkPD0xKXtpZihfKHQpLDA9PT10Lmxvb2thaGVhZCYmZT09PVopcmV0dXJuIF90O2lmKDA9PT10Lmxvb2thaGVhZClicmVha310LnN0cnN0YXJ0Kz10Lmxvb2thaGVhZCx0Lmxvb2thaGVhZD0wO3ZhciBpPXQuYmxvY2tfc3RhcnQrYTtpZigoMD09PXQuc3Ryc3RhcnR8fHQuc3Ryc3RhcnQ+PWkpJiYodC5sb29rYWhlYWQ9dC5zdHJzdGFydC1pLHQuc3Ryc3RhcnQ9aSxvKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gX3Q7aWYodC5zdHJzdGFydC10LmJsb2NrX3N0YXJ0Pj10Lndfc2l6ZS1pdCYmKG8odCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiBfdH1yZXR1cm4gdC5pbnNlcnQ9MCxlPT09Tj8obyh0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD9jdDpidCk6KHQuc3Ryc3RhcnQ+dC5ibG9ja19zdGFydCYmKG8odCwhMSksdC5zdHJtLmF2YWlsX291dCksX3QpfSksbmV3IG0oNCw0LDgsNCx1KSxuZXcgbSg0LDUsMTYsOCx1KSxuZXcgbSg0LDYsMzIsMzIsdSksbmV3IG0oNCw0LDE2LDE2LGMpLG5ldyBtKDgsMTYsMzIsMzIsYyksbmV3IG0oOCwxNiwxMjgsMTI4LGMpLG5ldyBtKDgsMzIsMTI4LDI1NixjKSxuZXcgbSgzMiwxMjgsMjU4LDEwMjQsYyksbmV3IG0oMzIsMjU4LDI1OCw0MDk2LGMpXSxhLmRlZmxhdGVJbml0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkodCxlLHEsWCxXLFApfSxhLmRlZmxhdGVJbml0Mj15LGEuZGVmbGF0ZVJlc2V0PWssYS5kZWZsYXRlUmVzZXRLZWVwPXYsYS5kZWZsYXRlU2V0SGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnQuc3RhdGU/MiE9PXQuc3RhdGUud3JhcD9VOih0LnN0YXRlLmd6aGVhZD1lLEQpOlV9LGEuZGVmbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBhLG8sZCxmO2lmKCF0fHwhdC5zdGF0ZXx8ZT5PfHxlPDApcmV0dXJuIHQ/aSh0LFUpOlU7aWYobz10LnN0YXRlLCF0Lm91dHB1dHx8IXQuaW5wdXQmJjAhPT10LmF2YWlsX2lufHxvLnN0YXR1cz09PWZ0JiZlIT09TilyZXR1cm4gaSh0LDA9PT10LmF2YWlsX291dD9GOlUpO2lmKG8uc3RybT10LGE9by5sYXN0X2ZsdXNoLG8ubGFzdF9mbHVzaD1lLG8uc3RhdHVzPT09cnQpaWYoMj09PW8ud3JhcCl0LmFkbGVyPTAsbChvLDMxKSxsKG8sMTM5KSxsKG8sOCksby5nemhlYWQ/KGwobywoby5nemhlYWQudGV4dD8xOjApKyhvLmd6aGVhZC5oY3JjPzI6MCkrKG8uZ3poZWFkLmV4dHJhPzQ6MCkrKG8uZ3poZWFkLm5hbWU/ODowKSsoby5nemhlYWQuY29tbWVudD8xNjowKSksbChvLDI1NSZvLmd6aGVhZC50aW1lKSxsKG8sby5nemhlYWQudGltZT4+OCYyNTUpLGwobyxvLmd6aGVhZC50aW1lPj4xNiYyNTUpLGwobyxvLmd6aGVhZC50aW1lPj4yNCYyNTUpLGwobyw5PT09by5sZXZlbD8yOm8uc3RyYXRlZ3k+PWp8fG8ubGV2ZWw8Mj80OjApLGwobywyNTUmby5nemhlYWQub3MpLG8uZ3poZWFkLmV4dHJhJiZvLmd6aGVhZC5leHRyYS5sZW5ndGgmJihsKG8sMjU1Jm8uZ3poZWFkLmV4dHJhLmxlbmd0aCksbChvLG8uZ3poZWFkLmV4dHJhLmxlbmd0aD4+OCYyNTUpKSxvLmd6aGVhZC5oY3JjJiYodC5hZGxlcj1FKHQuYWRsZXIsby5wZW5kaW5nX2J1ZixvLnBlbmRpbmcsMCkpLG8uZ3ppbmRleD0wLG8uc3RhdHVzPXN0KToobChvLDApLGwobywwKSxsKG8sMCksbChvLDApLGwobywwKSxsKG8sOT09PW8ubGV2ZWw/MjpvLnN0cmF0ZWd5Pj1qfHxvLmxldmVsPDI/NDowKSxsKG8sZ3QpLG8uc3RhdHVzPWR0KTtlbHNle3ZhciBfPXErKG8ud19iaXRzLTg8PDQpPDw4O198PShvLnN0cmF0ZWd5Pj1qfHxvLmxldmVsPDI/MDpvLmxldmVsPDY/MTo2PT09by5sZXZlbD8yOjMpPDw2LDAhPT1vLnN0cnN0YXJ0JiYoX3w9bnQpLF8rPTMxLV8lMzEsby5zdGF0dXM9ZHQsaChvLF8pLDAhPT1vLnN0cnN0YXJ0JiYoaChvLHQuYWRsZXI+Pj4xNiksaChvLDY1NTM1JnQuYWRsZXIpKSx0LmFkbGVyPTF9aWYoby5zdGF0dXM9PT1zdClpZihvLmd6aGVhZC5leHRyYSl7Zm9yKGQ9by5wZW5kaW5nO28uZ3ppbmRleDwoNjU1MzUmby5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKG8ucGVuZGluZyE9PW8ucGVuZGluZ19idWZfc2l6ZXx8KG8uZ3poZWFkLmhjcmMmJm8ucGVuZGluZz5kJiYodC5hZGxlcj1FKHQuYWRsZXIsby5wZW5kaW5nX2J1ZixvLnBlbmRpbmctZCxkKSkscyh0KSxkPW8ucGVuZGluZyxvLnBlbmRpbmchPT1vLnBlbmRpbmdfYnVmX3NpemUpKTspbChvLDI1NSZvLmd6aGVhZC5leHRyYVtvLmd6aW5kZXhdKSxvLmd6aW5kZXgrKztvLmd6aGVhZC5oY3JjJiZvLnBlbmRpbmc+ZCYmKHQuYWRsZXI9RSh0LmFkbGVyLG8ucGVuZGluZ19idWYsby5wZW5kaW5nLWQsZCkpLG8uZ3ppbmRleD09PW8uZ3poZWFkLmV4dHJhLmxlbmd0aCYmKG8uZ3ppbmRleD0wLG8uc3RhdHVzPW90KX1lbHNlIG8uc3RhdHVzPW90O2lmKG8uc3RhdHVzPT09b3QpaWYoby5nemhlYWQubmFtZSl7ZD1vLnBlbmRpbmc7ZG97aWYoby5wZW5kaW5nPT09by5wZW5kaW5nX2J1Zl9zaXplJiYoby5nemhlYWQuaGNyYyYmby5wZW5kaW5nPmQmJih0LmFkbGVyPUUodC5hZGxlcixvLnBlbmRpbmdfYnVmLG8ucGVuZGluZy1kLGQpKSxzKHQpLGQ9by5wZW5kaW5nLG8ucGVuZGluZz09PW8ucGVuZGluZ19idWZfc2l6ZSkpe2Y9MTticmVha31mPW8uZ3ppbmRleDxvLmd6aGVhZC5uYW1lLmxlbmd0aD8yNTUmby5nemhlYWQubmFtZS5jaGFyQ29kZUF0KG8uZ3ppbmRleCsrKTowLGwobyxmKX13aGlsZSgwIT09Zik7by5nemhlYWQuaGNyYyYmby5wZW5kaW5nPmQmJih0LmFkbGVyPUUodC5hZGxlcixvLnBlbmRpbmdfYnVmLG8ucGVuZGluZy1kLGQpKSwwPT09ZiYmKG8uZ3ppbmRleD0wLG8uc3RhdHVzPWx0KX1lbHNlIG8uc3RhdHVzPWx0O2lmKG8uc3RhdHVzPT09bHQpaWYoby5nemhlYWQuY29tbWVudCl7ZD1vLnBlbmRpbmc7ZG97aWYoby5wZW5kaW5nPT09by5wZW5kaW5nX2J1Zl9zaXplJiYoby5nemhlYWQuaGNyYyYmby5wZW5kaW5nPmQmJih0LmFkbGVyPUUodC5hZGxlcixvLnBlbmRpbmdfYnVmLG8ucGVuZGluZy1kLGQpKSxzKHQpLGQ9by5wZW5kaW5nLG8ucGVuZGluZz09PW8ucGVuZGluZ19idWZfc2l6ZSkpe2Y9MTticmVha31mPW8uZ3ppbmRleDxvLmd6aGVhZC5jb21tZW50Lmxlbmd0aD8yNTUmby5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KG8uZ3ppbmRleCsrKTowLGwobyxmKX13aGlsZSgwIT09Zik7by5nemhlYWQuaGNyYyYmby5wZW5kaW5nPmQmJih0LmFkbGVyPUUodC5hZGxlcixvLnBlbmRpbmdfYnVmLG8ucGVuZGluZy1kLGQpKSwwPT09ZiYmKG8uc3RhdHVzPWh0KX1lbHNlIG8uc3RhdHVzPWh0O2lmKG8uc3RhdHVzPT09aHQmJihvLmd6aGVhZC5oY3JjPyhvLnBlbmRpbmcrMj5vLnBlbmRpbmdfYnVmX3NpemUmJnModCksby5wZW5kaW5nKzI8PW8ucGVuZGluZ19idWZfc2l6ZSYmKGwobywyNTUmdC5hZGxlciksbChvLHQuYWRsZXI+PjgmMjU1KSx0LmFkbGVyPTAsby5zdGF0dXM9ZHQpKTpvLnN0YXR1cz1kdCksMCE9PW8ucGVuZGluZyl7aWYocyh0KSwwPT09dC5hdmFpbF9vdXQpcmV0dXJuIG8ubGFzdF9mbHVzaD0tMSxEfWVsc2UgaWYoMD09PXQuYXZhaWxfaW4mJm4oZSk8PW4oYSkmJmUhPT1OKXJldHVybiBpKHQsRik7aWYoby5zdGF0dXM9PT1mdCYmMCE9PXQuYXZhaWxfaW4pcmV0dXJuIGkodCxGKTtpZigwIT09dC5hdmFpbF9pbnx8MCE9PW8ubG9va2FoZWFkfHxlIT09WiYmby5zdGF0dXMhPT1mdCl7dmFyIHU9by5zdHJhdGVneT09PWo/ZyhvLGUpOm8uc3RyYXRlZ3k9PT1LP2IobyxlKTp4W28ubGV2ZWxdLmZ1bmMobyxlKTtpZih1IT09Y3QmJnUhPT1idHx8KG8uc3RhdHVzPWZ0KSx1PT09X3R8fHU9PT1jdClyZXR1cm4gMD09PXQuYXZhaWxfb3V0JiYoby5sYXN0X2ZsdXNoPS0xKSxEO2lmKHU9PT11dCYmKGU9PT1SP0IuX3RyX2FsaWduKG8pOmUhPT1PJiYoQi5fdHJfc3RvcmVkX2Jsb2NrKG8sMCwwLCExKSxlPT09QyYmKHIoby5oZWFkKSwwPT09by5sb29rYWhlYWQmJihvLnN0cnN0YXJ0PTAsby5ibG9ja19zdGFydD0wLG8uaW5zZXJ0PTApKSkscyh0KSwwPT09dC5hdmFpbF9vdXQpKXJldHVybiBvLmxhc3RfZmx1c2g9LTEsRH1yZXR1cm4gZSE9PU4/RDpvLndyYXA8PTA/STooMj09PW8ud3JhcD8obChvLDI1NSZ0LmFkbGVyKSxsKG8sdC5hZGxlcj4+OCYyNTUpLGwobyx0LmFkbGVyPj4xNiYyNTUpLGwobyx0LmFkbGVyPj4yNCYyNTUpLGwobywyNTUmdC50b3RhbF9pbiksbChvLHQudG90YWxfaW4+PjgmMjU1KSxsKG8sdC50b3RhbF9pbj4+MTYmMjU1KSxsKG8sdC50b3RhbF9pbj4+MjQmMjU1KSk6KGgobyx0LmFkbGVyPj4+MTYpLGgobyw2NTUzNSZ0LmFkbGVyKSkscyh0KSxvLndyYXA+MCYmKG8ud3JhcD0tby53cmFwKSwwIT09by5wZW5kaW5nP0Q6SSl9LGEuZGVmbGF0ZUVuZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gdCYmdC5zdGF0ZT8oZT10LnN0YXRlLnN0YXR1cykhPT1ydCYmZSE9PXN0JiZlIT09b3QmJmUhPT1sdCYmZSE9PWh0JiZlIT09ZHQmJmUhPT1mdD9pKHQsVSk6KHQuc3RhdGU9bnVsbCxlPT09ZHQ/aSh0LFQpOkQpOlV9LGEuZGVmbGF0ZVNldERpY3Rpb25hcnk9ZnVuY3Rpb24odCxlKXt2YXIgYSxpLG4scyxvLGwsaCxkLGY9ZS5sZW5ndGg7aWYoIXR8fCF0LnN0YXRlKXJldHVybiBVO2lmKGE9dC5zdGF0ZSwyPT09KHM9YS53cmFwKXx8MT09PXMmJmEuc3RhdHVzIT09cnR8fGEubG9va2FoZWFkKXJldHVybiBVO2ZvcigxPT09cyYmKHQuYWRsZXI9Uyh0LmFkbGVyLGUsZiwwKSksYS53cmFwPTAsZj49YS53X3NpemUmJigwPT09cyYmKHIoYS5oZWFkKSxhLnN0cnN0YXJ0PTAsYS5ibG9ja19zdGFydD0wLGEuaW5zZXJ0PTApLGQ9bmV3IHouQnVmOChhLndfc2l6ZSksei5hcnJheVNldChkLGUsZi1hLndfc2l6ZSxhLndfc2l6ZSwwKSxlPWQsZj1hLndfc2l6ZSksbz10LmF2YWlsX2luLGw9dC5uZXh0X2luLGg9dC5pbnB1dCx0LmF2YWlsX2luPWYsdC5uZXh0X2luPTAsdC5pbnB1dD1lLF8oYSk7YS5sb29rYWhlYWQ+PWV0Oyl7aT1hLnN0cnN0YXJ0LG49YS5sb29rYWhlYWQtKGV0LTEpO2Rve2EuaW5zX2g9KGEuaW5zX2g8PGEuaGFzaF9zaGlmdF5hLndpbmRvd1tpK2V0LTFdKSZhLmhhc2hfbWFzayxhLnByZXZbaSZhLndfbWFza109YS5oZWFkW2EuaW5zX2hdLGEuaGVhZFthLmluc19oXT1pLGkrK313aGlsZSgtLW4pO2Euc3Ryc3RhcnQ9aSxhLmxvb2thaGVhZD1ldC0xLF8oYSl9cmV0dXJuIGEuc3Ryc3RhcnQrPWEubG9va2FoZWFkLGEuYmxvY2tfc3RhcnQ9YS5zdHJzdGFydCxhLmluc2VydD1hLmxvb2thaGVhZCxhLmxvb2thaGVhZD0wLGEubWF0Y2hfbGVuZ3RoPWEucHJldl9sZW5ndGg9ZXQtMSxhLm1hdGNoX2F2YWlsYWJsZT0wLHQubmV4dF9pbj1sLHQuaW5wdXQ9aCx0LmF2YWlsX2luPW8sYS53cmFwPXMsRH0sYS5kZWZsYXRlSW5mbz0icGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjozLCIuL2FkbGVyMzIiOjUsIi4vY3JjMzIiOjcsIi4vbWVzc2FnZXMiOjEzLCIuL3RyZWVzIjoxNH1dLDk6W2Z1bmN0aW9uKHQsZSxhKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9fSx7fV0sMTA6W2Z1bmN0aW9uKHQsZSxhKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIGEsaSxuLHIscyxvLGwsaCxkLGYsXyx1LGMsYixnLG0sdyxwLHYsayx5LHgseixCLFM7YT10LnN0YXRlLGk9dC5uZXh0X2luLEI9dC5pbnB1dCxuPWkrKHQuYXZhaWxfaW4tNSkscj10Lm5leHRfb3V0LFM9dC5vdXRwdXQscz1yLShlLXQuYXZhaWxfb3V0KSxvPXIrKHQuYXZhaWxfb3V0LTI1NyksbD1hLmRtYXgsaD1hLndzaXplLGQ9YS53aGF2ZSxmPWEud25leHQsXz1hLndpbmRvdyx1PWEuaG9sZCxjPWEuYml0cyxiPWEubGVuY29kZSxnPWEuZGlzdGNvZGUsbT0oMTw8YS5sZW5iaXRzKS0xLHc9KDE8PGEuZGlzdGJpdHMpLTE7dDpkb3tjPDE1JiYodSs9QltpKytdPDxjLGMrPTgsdSs9QltpKytdPDxjLGMrPTgpLHA9Ylt1Jm1dO2U6Zm9yKDs7KXtpZih2PXA+Pj4yNCx1Pj4+PXYsYy09diwwPT09KHY9cD4+PjE2JjI1NSkpU1tyKytdPTY1NTM1JnA7ZWxzZXtpZighKDE2JnYpKXtpZigwPT0oNjQmdikpe3A9YlsoNjU1MzUmcCkrKHUmKDE8PHYpLTEpXTtjb250aW51ZSBlfWlmKDMyJnYpe2EubW9kZT0xMjticmVhayB0fXQubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLGEubW9kZT0zMDticmVhayB0fWs9NjU1MzUmcCwodiY9MTUpJiYoYzx2JiYodSs9QltpKytdPDxjLGMrPTgpLGsrPXUmKDE8PHYpLTEsdT4+Pj12LGMtPXYpLGM8MTUmJih1Kz1CW2krK108PGMsYys9OCx1Kz1CW2krK108PGMsYys9OCkscD1nW3Umd107YTpmb3IoOzspe2lmKHY9cD4+PjI0LHU+Pj49dixjLT12LCEoMTYmKHY9cD4+PjE2JjI1NSkpKXtpZigwPT0oNjQmdikpe3A9Z1soNjU1MzUmcCkrKHUmKDE8PHYpLTEpXTtjb250aW51ZSBhfXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLGEubW9kZT0zMDticmVhayB0fWlmKHk9NjU1MzUmcCx2Jj0xNSxjPHYmJih1Kz1CW2krK108PGMsKGMrPTgpPHYmJih1Kz1CW2krK108PGMsYys9OCkpLCh5Kz11JigxPDx2KS0xKT5sKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLGEubW9kZT0zMDticmVhayB0fWlmKHU+Pj49dixjLT12LHY9ci1zLHk+dil7aWYoKHY9eS12KT5kJiZhLnNhbmUpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsYS5tb2RlPTMwO2JyZWFrIHR9aWYoeD0wLHo9XywwPT09Zil7aWYoeCs9aC12LHY8ayl7ay09djtkb3tTW3IrK109X1t4KytdfXdoaWxlKC0tdik7eD1yLXksej1TfX1lbHNlIGlmKGY8dil7aWYoeCs9aCtmLXYsKHYtPWYpPGspe2stPXY7ZG97U1tyKytdPV9beCsrXX13aGlsZSgtLXYpO2lmKHg9MCxmPGspe2stPXY9Zjtkb3tTW3IrK109X1t4KytdfXdoaWxlKC0tdik7eD1yLXksej1TfX19ZWxzZSBpZih4Kz1mLXYsdjxrKXtrLT12O2Rve1NbcisrXT1fW3grK119d2hpbGUoLS12KTt4PXIteSx6PVN9Zm9yKDtrPjI7KVNbcisrXT16W3grK10sU1tyKytdPXpbeCsrXSxTW3IrK109elt4KytdLGstPTM7ayYmKFNbcisrXT16W3grK10saz4xJiYoU1tyKytdPXpbeCsrXSkpfWVsc2V7eD1yLXk7ZG97U1tyKytdPVNbeCsrXSxTW3IrK109U1t4KytdLFNbcisrXT1TW3grK10say09M313aGlsZShrPjIpO2smJihTW3IrK109U1t4KytdLGs+MSYmKFNbcisrXT1TW3grK10pKX1icmVha319YnJlYWt9fXdoaWxlKGk8biYmcjxvKTtpLT1rPWM+PjMsdSY9KDE8PChjLT1rPDwzKSktMSx0Lm5leHRfaW49aSx0Lm5leHRfb3V0PXIsdC5hdmFpbF9pbj1pPG4/bi1pKzU6NS0oaS1uKSx0LmF2YWlsX291dD1yPG8/by1yKzI1NzoyNTctKHItbyksYS5ob2xkPXUsYS5iaXRzPWN9fSx7fV0sMTE6W2Z1bmN0aW9uKHQsZSxhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4odD4+PjI0JjI1NSkrKHQ+Pj44JjY1MjgwKSsoKDY1MjgwJnQpPDw4KSsoKDI1NSZ0KTw8MjQpfWZ1bmN0aW9uIG4oKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IHUuQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IHUuQnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gcih0KXt2YXIgZTtyZXR1cm4gdCYmdC5zdGF0ZT8oZT10LnN0YXRlLHQudG90YWxfaW49dC50b3RhbF9vdXQ9ZS50b3RhbD0wLHQubXNnPSIiLGUud3JhcCYmKHQuYWRsZXI9MSZlLndyYXApLGUubW9kZT1OLGUubGFzdD0wLGUuaGF2ZWRpY3Q9MCxlLmRtYXg9MzI3NjgsZS5oZWFkPW51bGwsZS5ob2xkPTAsZS5iaXRzPTAsZS5sZW5jb2RlPWUubGVuZHluPW5ldyB1LkJ1ZjMyKGR0KSxlLmRpc3Rjb2RlPWUuZGlzdGR5bj1uZXcgdS5CdWYzMihmdCksZS5zYW5lPTEsZS5iYWNrPS0xLHopOkV9ZnVuY3Rpb24gcyh0KXt2YXIgZTtyZXR1cm4gdCYmdC5zdGF0ZT8oZT10LnN0YXRlLGUud3NpemU9MCxlLndoYXZlPTAsZS53bmV4dD0wLHIodCkpOkV9ZnVuY3Rpb24gbyh0LGUpe3ZhciBhLGk7cmV0dXJuIHQmJnQuc3RhdGU/KGk9dC5zdGF0ZSxlPDA/KGE9MCxlPS1lKTooYT0xKyhlPj40KSxlPDQ4JiYoZSY9MTUpKSxlJiYoZTw4fHxlPjE1KT9FOihudWxsIT09aS53aW5kb3cmJmkud2JpdHMhPT1lJiYoaS53aW5kb3c9bnVsbCksaS53cmFwPWEsaS53Yml0cz1lLHModCkpKTpFfWZ1bmN0aW9uIGwodCxlKXt2YXIgYSxpO3JldHVybiB0PyhpPW5ldyBuLHQuc3RhdGU9aSxpLndpbmRvdz1udWxsLChhPW8odCxlKSkhPT16JiYodC5zdGF0ZT1udWxsKSxhKTpFfWZ1bmN0aW9uIGgodCl7aWYodXQpe3ZhciBlO2ZvcihmPW5ldyB1LkJ1ZjMyKDUxMiksXz1uZXcgdS5CdWYzMigzMiksZT0wO2U8MTQ0Oyl0LmxlbnNbZSsrXT04O2Zvcig7ZTwyNTY7KXQubGVuc1tlKytdPTk7Zm9yKDtlPDI4MDspdC5sZW5zW2UrK109Nztmb3IoO2U8Mjg4Oyl0LmxlbnNbZSsrXT04O2ZvcihtKHAsdC5sZW5zLDAsMjg4LGYsMCx0Lndvcmsse2JpdHM6OX0pLGU9MDtlPDMyOyl0LmxlbnNbZSsrXT01O20odix0LmxlbnMsMCwzMixfLDAsdC53b3JrLHtiaXRzOjV9KSx1dD0hMX10LmxlbmNvZGU9Zix0LmxlbmJpdHM9OSx0LmRpc3Rjb2RlPV8sdC5kaXN0Yml0cz01fWZ1bmN0aW9uIGQodCxlLGEsaSl7dmFyIG4scj10LnN0YXRlO3JldHVybiBudWxsPT09ci53aW5kb3cmJihyLndzaXplPTE8PHIud2JpdHMsci53bmV4dD0wLHIud2hhdmU9MCxyLndpbmRvdz1uZXcgdS5CdWY4KHIud3NpemUpKSxpPj1yLndzaXplPyh1LmFycmF5U2V0KHIud2luZG93LGUsYS1yLndzaXplLHIud3NpemUsMCksci53bmV4dD0wLHIud2hhdmU9ci53c2l6ZSk6KChuPXIud3NpemUtci53bmV4dCk+aSYmKG49aSksdS5hcnJheVNldChyLndpbmRvdyxlLGEtaSxuLHIud25leHQpLChpLT1uKT8odS5hcnJheVNldChyLndpbmRvdyxlLGEtaSxpLDApLHIud25leHQ9aSxyLndoYXZlPXIud3NpemUpOihyLnduZXh0Kz1uLHIud25leHQ9PT1yLndzaXplJiYoci53bmV4dD0wKSxyLndoYXZlPHIud3NpemUmJihyLndoYXZlKz1uKSkpLDB9dmFyIGYsXyx1PXQoIi4uL3V0aWxzL2NvbW1vbiIpLGM9dCgiLi9hZGxlcjMyIiksYj10KCIuL2NyYzMyIiksZz10KCIuL2luZmZhc3QiKSxtPXQoIi4vaW5mdHJlZXMiKSx3PTAscD0xLHY9MixrPTQseT01LHg9Nix6PTAsQj0xLFM9MixFPS0yLEE9LTMsWj0tNCxSPS01LEM9OCxOPTEsTz0yLEQ9MyxJPTQsVT01LFQ9NixGPTcsTD04LEg9OSxqPTEwLEs9MTEsTT0xMixQPTEzLFk9MTQscT0xNSxHPTE2LFg9MTcsVz0xOCxKPTE5LFE9MjAsVj0yMSwkPTIyLHR0PTIzLGV0PTI0LGF0PTI1LGl0PTI2LG50PTI3LHJ0PTI4LHN0PTI5LG90PTMwLGx0PTMxLGh0PTMyLGR0PTg1MixmdD01OTIsX3Q9MTUsdXQ9ITA7YS5pbmZsYXRlUmVzZXQ9cyxhLmluZmxhdGVSZXNldDI9byxhLmluZmxhdGVSZXNldEtlZXA9cixhLmluZmxhdGVJbml0PWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsX3QpfSxhLmluZmxhdGVJbml0Mj1sLGEuaW5mbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBhLG4scixzLG8sbCxmLF8sZHQsZnQsX3QsdXQsY3QsYnQsZ3QsbXQsd3QscHQsdnQsa3QseXQseHQsenQsQnQsU3Q9MCxFdD1uZXcgdS5CdWY4KDQpLEF0PVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighdHx8IXQuc3RhdGV8fCF0Lm91dHB1dHx8IXQuaW5wdXQmJjAhPT10LmF2YWlsX2luKXJldHVybiBFOyhhPXQuc3RhdGUpLm1vZGU9PT1NJiYoYS5tb2RlPVApLG89dC5uZXh0X291dCxyPXQub3V0cHV0LGY9dC5hdmFpbF9vdXQscz10Lm5leHRfaW4sbj10LmlucHV0LGw9dC5hdmFpbF9pbixfPWEuaG9sZCxkdD1hLmJpdHMsZnQ9bCxfdD1mLHh0PXo7dDpmb3IoOzspc3dpdGNoKGEubW9kZSl7Y2FzZSBOOmlmKDA9PT1hLndyYXApe2EubW9kZT1QO2JyZWFrfWZvcig7ZHQ8MTY7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fWlmKDImYS53cmFwJiYzNTYxNT09PV8pe2EuY2hlY2s9MCxFdFswXT0yNTUmXyxFdFsxXT1fPj4+OCYyNTUsYS5jaGVjaz1iKGEuY2hlY2ssRXQsMiwwKSxfPTAsZHQ9MCxhLm1vZGU9TzticmVha31pZihhLmZsYWdzPTAsYS5oZWFkJiYoYS5oZWFkLmRvbmU9ITEpLCEoMSZhLndyYXApfHwoKCgyNTUmXyk8PDgpKyhfPj44KSklMzEpe3QubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIixhLm1vZGU9b3Q7YnJlYWt9aWYoKDE1Jl8pIT09Qyl7dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixhLm1vZGU9b3Q7YnJlYWt9aWYoXz4+Pj00LGR0LT00LHl0PTgrKDE1Jl8pLDA9PT1hLndiaXRzKWEud2JpdHM9eXQ7ZWxzZSBpZih5dD5hLndiaXRzKXt0Lm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsYS5tb2RlPW90O2JyZWFrfWEuZG1heD0xPDx5dCx0LmFkbGVyPWEuY2hlY2s9MSxhLm1vZGU9NTEyJl8/ajpNLF89MCxkdD0wO2JyZWFrO2Nhc2UgTzpmb3IoO2R0PDE2Oyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH1pZihhLmZsYWdzPV8sKDI1NSZhLmZsYWdzKSE9PUMpe3QubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsYS5tb2RlPW90O2JyZWFrfWlmKDU3MzQ0JmEuZmxhZ3Mpe3QubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLGEubW9kZT1vdDticmVha31hLmhlYWQmJihhLmhlYWQudGV4dD1fPj44JjEpLDUxMiZhLmZsYWdzJiYoRXRbMF09MjU1Jl8sRXRbMV09Xz4+PjgmMjU1LGEuY2hlY2s9YihhLmNoZWNrLEV0LDIsMCkpLF89MCxkdD0wLGEubW9kZT1EO2Nhc2UgRDpmb3IoO2R0PDMyOyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH1hLmhlYWQmJihhLmhlYWQudGltZT1fKSw1MTImYS5mbGFncyYmKEV0WzBdPTI1NSZfLEV0WzFdPV8+Pj44JjI1NSxFdFsyXT1fPj4+MTYmMjU1LEV0WzNdPV8+Pj4yNCYyNTUsYS5jaGVjaz1iKGEuY2hlY2ssRXQsNCwwKSksXz0wLGR0PTAsYS5tb2RlPUk7Y2FzZSBJOmZvcig7ZHQ8MTY7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fWEuaGVhZCYmKGEuaGVhZC54ZmxhZ3M9MjU1Jl8sYS5oZWFkLm9zPV8+PjgpLDUxMiZhLmZsYWdzJiYoRXRbMF09MjU1Jl8sRXRbMV09Xz4+PjgmMjU1LGEuY2hlY2s9YihhLmNoZWNrLEV0LDIsMCkpLF89MCxkdD0wLGEubW9kZT1VO2Nhc2UgVTppZigxMDI0JmEuZmxhZ3Mpe2Zvcig7ZHQ8MTY7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fWEubGVuZ3RoPV8sYS5oZWFkJiYoYS5oZWFkLmV4dHJhX2xlbj1fKSw1MTImYS5mbGFncyYmKEV0WzBdPTI1NSZfLEV0WzFdPV8+Pj44JjI1NSxhLmNoZWNrPWIoYS5jaGVjayxFdCwyLDApKSxfPTAsZHQ9MH1lbHNlIGEuaGVhZCYmKGEuaGVhZC5leHRyYT1udWxsKTthLm1vZGU9VDtjYXNlIFQ6aWYoMTAyNCZhLmZsYWdzJiYoKHV0PWEubGVuZ3RoKT5sJiYodXQ9bCksdXQmJihhLmhlYWQmJih5dD1hLmhlYWQuZXh0cmFfbGVuLWEubGVuZ3RoLGEuaGVhZC5leHRyYXx8KGEuaGVhZC5leHRyYT1uZXcgQXJyYXkoYS5oZWFkLmV4dHJhX2xlbikpLHUuYXJyYXlTZXQoYS5oZWFkLmV4dHJhLG4scyx1dCx5dCkpLDUxMiZhLmZsYWdzJiYoYS5jaGVjaz1iKGEuY2hlY2ssbix1dCxzKSksbC09dXQscys9dXQsYS5sZW5ndGgtPXV0KSxhLmxlbmd0aCkpYnJlYWsgdDthLmxlbmd0aD0wLGEubW9kZT1GO2Nhc2UgRjppZigyMDQ4JmEuZmxhZ3Mpe2lmKDA9PT1sKWJyZWFrIHQ7dXQ9MDtkb3t5dD1uW3MrdXQrK10sYS5oZWFkJiZ5dCYmYS5sZW5ndGg8NjU1MzYmJihhLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh5dCkpfXdoaWxlKHl0JiZ1dDxsKTtpZig1MTImYS5mbGFncyYmKGEuY2hlY2s9YihhLmNoZWNrLG4sdXQscykpLGwtPXV0LHMrPXV0LHl0KWJyZWFrIHR9ZWxzZSBhLmhlYWQmJihhLmhlYWQubmFtZT1udWxsKTthLmxlbmd0aD0wLGEubW9kZT1MO2Nhc2UgTDppZig0MDk2JmEuZmxhZ3Mpe2lmKDA9PT1sKWJyZWFrIHQ7dXQ9MDtkb3t5dD1uW3MrdXQrK10sYS5oZWFkJiZ5dCYmYS5sZW5ndGg8NjU1MzYmJihhLmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZSh5dCkpfXdoaWxlKHl0JiZ1dDxsKTtpZig1MTImYS5mbGFncyYmKGEuY2hlY2s9YihhLmNoZWNrLG4sdXQscykpLGwtPXV0LHMrPXV0LHl0KWJyZWFrIHR9ZWxzZSBhLmhlYWQmJihhLmhlYWQuY29tbWVudD1udWxsKTthLm1vZGU9SDtjYXNlIEg6aWYoNTEyJmEuZmxhZ3Mpe2Zvcig7ZHQ8MTY7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fWlmKF8hPT0oNjU1MzUmYS5jaGVjaykpe3QubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixhLm1vZGU9b3Q7YnJlYWt9Xz0wLGR0PTB9YS5oZWFkJiYoYS5oZWFkLmhjcmM9YS5mbGFncz4+OSYxLGEuaGVhZC5kb25lPSEwKSx0LmFkbGVyPWEuY2hlY2s9MCxhLm1vZGU9TTticmVhaztjYXNlIGo6Zm9yKDtkdDwzMjspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9dC5hZGxlcj1hLmNoZWNrPWkoXyksXz0wLGR0PTAsYS5tb2RlPUs7Y2FzZSBLOmlmKDA9PT1hLmhhdmVkaWN0KXJldHVybiB0Lm5leHRfb3V0PW8sdC5hdmFpbF9vdXQ9Zix0Lm5leHRfaW49cyx0LmF2YWlsX2luPWwsYS5ob2xkPV8sYS5iaXRzPWR0LFM7dC5hZGxlcj1hLmNoZWNrPTEsYS5tb2RlPU07Y2FzZSBNOmlmKGU9PT15fHxlPT09eClicmVhayB0O2Nhc2UgUDppZihhLmxhc3Qpe18+Pj49NyZkdCxkdC09NyZkdCxhLm1vZGU9bnQ7YnJlYWt9Zm9yKDtkdDwzOyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH1zd2l0Y2goYS5sYXN0PTEmXyxfPj4+PTEsZHQtPTEsMyZfKXtjYXNlIDA6YS5tb2RlPVk7YnJlYWs7Y2FzZSAxOmlmKGgoYSksYS5tb2RlPVEsZT09PXgpe18+Pj49MixkdC09MjticmVhayB0fWJyZWFrO2Nhc2UgMjphLm1vZGU9WDticmVhaztjYXNlIDM6dC5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIsYS5tb2RlPW90fV8+Pj49MixkdC09MjticmVhaztjYXNlIFk6Zm9yKF8+Pj49NyZkdCxkdC09NyZkdDtkdDwzMjspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9aWYoKDY1NTM1Jl8pIT0oXz4+PjE2XjY1NTM1KSl7dC5tc2c9ImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLGEubW9kZT1vdDticmVha31pZihhLmxlbmd0aD02NTUzNSZfLF89MCxkdD0wLGEubW9kZT1xLGU9PT14KWJyZWFrIHQ7Y2FzZSBxOmEubW9kZT1HO2Nhc2UgRzppZih1dD1hLmxlbmd0aCl7aWYodXQ+bCYmKHV0PWwpLHV0PmYmJih1dD1mKSwwPT09dXQpYnJlYWsgdDt1LmFycmF5U2V0KHIsbixzLHV0LG8pLGwtPXV0LHMrPXV0LGYtPXV0LG8rPXV0LGEubGVuZ3RoLT11dDticmVha31hLm1vZGU9TTticmVhaztjYXNlIFg6Zm9yKDtkdDwxNDspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9aWYoYS5ubGVuPTI1NysoMzEmXyksXz4+Pj01LGR0LT01LGEubmRpc3Q9MSsoMzEmXyksXz4+Pj01LGR0LT01LGEubmNvZGU9NCsoMTUmXyksXz4+Pj00LGR0LT00LGEubmxlbj4yODZ8fGEubmRpc3Q+MzApe3QubXNnPSJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyIsYS5tb2RlPW90O2JyZWFrfWEuaGF2ZT0wLGEubW9kZT1XO2Nhc2UgVzpmb3IoO2EuaGF2ZTxhLm5jb2RlOyl7Zm9yKDtkdDwzOyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH1hLmxlbnNbQXRbYS5oYXZlKytdXT03Jl8sXz4+Pj0zLGR0LT0zfWZvcig7YS5oYXZlPDE5OylhLmxlbnNbQXRbYS5oYXZlKytdXT0wO2lmKGEubGVuY29kZT1hLmxlbmR5bixhLmxlbmJpdHM9Nyx6dD17Yml0czphLmxlbmJpdHN9LHh0PW0odyxhLmxlbnMsMCwxOSxhLmxlbmNvZGUsMCxhLndvcmssenQpLGEubGVuYml0cz16dC5iaXRzLHh0KXt0Lm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixhLm1vZGU9b3Q7YnJlYWt9YS5oYXZlPTAsYS5tb2RlPUo7Y2FzZSBKOmZvcig7YS5oYXZlPGEubmxlbithLm5kaXN0Oyl7Zm9yKDtTdD1hLmxlbmNvZGVbXyYoMTw8YS5sZW5iaXRzKS0xXSxndD1TdD4+PjI0LG10PVN0Pj4+MTYmMjU1LHd0PTY1NTM1JlN0LCEoZ3Q8PWR0KTspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9aWYod3Q8MTYpXz4+Pj1ndCxkdC09Z3QsYS5sZW5zW2EuaGF2ZSsrXT13dDtlbHNle2lmKDE2PT09d3Qpe2ZvcihCdD1ndCsyO2R0PEJ0Oyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH1pZihfPj4+PWd0LGR0LT1ndCwwPT09YS5oYXZlKXt0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsYS5tb2RlPW90O2JyZWFrfXl0PWEubGVuc1thLmhhdmUtMV0sdXQ9MysoMyZfKSxfPj4+PTIsZHQtPTJ9ZWxzZSBpZigxNz09PXd0KXtmb3IoQnQ9Z3QrMztkdDxCdDspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9ZHQtPWd0LHl0PTAsdXQ9MysoNyYoXz4+Pj1ndCkpLF8+Pj49MyxkdC09M31lbHNle2ZvcihCdD1ndCs3O2R0PEJ0Oyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH1kdC09Z3QseXQ9MCx1dD0xMSsoMTI3JihfPj4+PWd0KSksXz4+Pj03LGR0LT03fWlmKGEuaGF2ZSt1dD5hLm5sZW4rYS5uZGlzdCl7dC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLGEubW9kZT1vdDticmVha31mb3IoO3V0LS07KWEubGVuc1thLmhhdmUrK109eXR9fWlmKGEubW9kZT09PW90KWJyZWFrO2lmKDA9PT1hLmxlbnNbMjU2XSl7dC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsYS5tb2RlPW90O2JyZWFrfWlmKGEubGVuYml0cz05LHp0PXtiaXRzOmEubGVuYml0c30seHQ9bShwLGEubGVucywwLGEubmxlbixhLmxlbmNvZGUsMCxhLndvcmssenQpLGEubGVuYml0cz16dC5iaXRzLHh0KXt0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixhLm1vZGU9b3Q7YnJlYWt9aWYoYS5kaXN0Yml0cz02LGEuZGlzdGNvZGU9YS5kaXN0ZHluLHp0PXtiaXRzOmEuZGlzdGJpdHN9LHh0PW0odixhLmxlbnMsYS5ubGVuLGEubmRpc3QsYS5kaXN0Y29kZSwwLGEud29yayx6dCksYS5kaXN0Yml0cz16dC5iaXRzLHh0KXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixhLm1vZGU9b3Q7YnJlYWt9aWYoYS5tb2RlPVEsZT09PXgpYnJlYWsgdDtjYXNlIFE6YS5tb2RlPVY7Y2FzZSBWOmlmKGw+PTYmJmY+PTI1OCl7dC5uZXh0X291dD1vLHQuYXZhaWxfb3V0PWYsdC5uZXh0X2luPXMsdC5hdmFpbF9pbj1sLGEuaG9sZD1fLGEuYml0cz1kdCxnKHQsX3QpLG89dC5uZXh0X291dCxyPXQub3V0cHV0LGY9dC5hdmFpbF9vdXQscz10Lm5leHRfaW4sbj10LmlucHV0LGw9dC5hdmFpbF9pbixfPWEuaG9sZCxkdD1hLmJpdHMsYS5tb2RlPT09TSYmKGEuYmFjaz0tMSk7YnJlYWt9Zm9yKGEuYmFjaz0wO1N0PWEubGVuY29kZVtfJigxPDxhLmxlbmJpdHMpLTFdLGd0PVN0Pj4+MjQsbXQ9U3Q+Pj4xNiYyNTUsd3Q9NjU1MzUmU3QsIShndDw9ZHQpOyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH1pZihtdCYmMD09KDI0MCZtdCkpe2ZvcihwdD1ndCx2dD1tdCxrdD13dDtTdD1hLmxlbmNvZGVba3QrKChfJigxPDxwdCt2dCktMSk+PnB0KV0sZ3Q9U3Q+Pj4yNCxtdD1TdD4+PjE2JjI1NSx3dD02NTUzNSZTdCwhKHB0K2d0PD1kdCk7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fV8+Pj49cHQsZHQtPXB0LGEuYmFjays9cHR9aWYoXz4+Pj1ndCxkdC09Z3QsYS5iYWNrKz1ndCxhLmxlbmd0aD13dCwwPT09bXQpe2EubW9kZT1pdDticmVha31pZigzMiZtdCl7YS5iYWNrPS0xLGEubW9kZT1NO2JyZWFrfWlmKDY0Jm10KXt0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixhLm1vZGU9b3Q7YnJlYWt9YS5leHRyYT0xNSZtdCxhLm1vZGU9JDtjYXNlICQ6aWYoYS5leHRyYSl7Zm9yKEJ0PWEuZXh0cmE7ZHQ8QnQ7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fWEubGVuZ3RoKz1fJigxPDxhLmV4dHJhKS0xLF8+Pj49YS5leHRyYSxkdC09YS5leHRyYSxhLmJhY2srPWEuZXh0cmF9YS53YXM9YS5sZW5ndGgsYS5tb2RlPXR0O2Nhc2UgdHQ6Zm9yKDtTdD1hLmRpc3Rjb2RlW18mKDE8PGEuZGlzdGJpdHMpLTFdLGd0PVN0Pj4+MjQsbXQ9U3Q+Pj4xNiYyNTUsd3Q9NjU1MzUmU3QsIShndDw9ZHQpOyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH1pZigwPT0oMjQwJm10KSl7Zm9yKHB0PWd0LHZ0PW10LGt0PXd0O1N0PWEuZGlzdGNvZGVba3QrKChfJigxPDxwdCt2dCktMSk+PnB0KV0sZ3Q9U3Q+Pj4yNCxtdD1TdD4+PjE2JjI1NSx3dD02NTUzNSZTdCwhKHB0K2d0PD1kdCk7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fV8+Pj49cHQsZHQtPXB0LGEuYmFjays9cHR9aWYoXz4+Pj1ndCxkdC09Z3QsYS5iYWNrKz1ndCw2NCZtdCl7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsYS5tb2RlPW90O2JyZWFrfWEub2Zmc2V0PXd0LGEuZXh0cmE9MTUmbXQsYS5tb2RlPWV0O2Nhc2UgZXQ6aWYoYS5leHRyYSl7Zm9yKEJ0PWEuZXh0cmE7ZHQ8QnQ7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fWEub2Zmc2V0Kz1fJigxPDxhLmV4dHJhKS0xLF8+Pj49YS5leHRyYSxkdC09YS5leHRyYSxhLmJhY2srPWEuZXh0cmF9aWYoYS5vZmZzZXQ+YS5kbWF4KXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLGEubW9kZT1vdDticmVha31hLm1vZGU9YXQ7Y2FzZSBhdDppZigwPT09ZilicmVhayB0O2lmKHV0PV90LWYsYS5vZmZzZXQ+dXQpe2lmKCh1dD1hLm9mZnNldC11dCk+YS53aGF2ZSYmYS5zYW5lKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLGEubW9kZT1vdDticmVha311dD5hLnduZXh0Pyh1dC09YS53bmV4dCxjdD1hLndzaXplLXV0KTpjdD1hLnduZXh0LXV0LHV0PmEubGVuZ3RoJiYodXQ9YS5sZW5ndGgpLGJ0PWEud2luZG93fWVsc2UgYnQ9cixjdD1vLWEub2Zmc2V0LHV0PWEubGVuZ3RoO3V0PmYmJih1dD1mKSxmLT11dCxhLmxlbmd0aC09dXQ7ZG97cltvKytdPWJ0W2N0KytdfXdoaWxlKC0tdXQpOzA9PT1hLmxlbmd0aCYmKGEubW9kZT1WKTticmVhaztjYXNlIGl0OmlmKDA9PT1mKWJyZWFrIHQ7cltvKytdPWEubGVuZ3RoLGYtLSxhLm1vZGU9VjticmVhaztjYXNlIG50OmlmKGEud3JhcCl7Zm9yKDtkdDwzMjspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF98PW5bcysrXTw8ZHQsZHQrPTh9aWYoX3QtPWYsdC50b3RhbF9vdXQrPV90LGEudG90YWwrPV90LF90JiYodC5hZGxlcj1hLmNoZWNrPWEuZmxhZ3M/YihhLmNoZWNrLHIsX3Qsby1fdCk6YyhhLmNoZWNrLHIsX3Qsby1fdCkpLF90PWYsKGEuZmxhZ3M/XzppKF8pKSE9PWEuY2hlY2spe3QubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsYS5tb2RlPW90O2JyZWFrfV89MCxkdD0wfWEubW9kZT1ydDtjYXNlIHJ0OmlmKGEud3JhcCYmYS5mbGFncyl7Zm9yKDtkdDwzMjspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9aWYoXyE9PSg0Mjk0OTY3Mjk1JmEudG90YWwpKXt0Lm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsYS5tb2RlPW90O2JyZWFrfV89MCxkdD0wfWEubW9kZT1zdDtjYXNlIHN0Onh0PUI7YnJlYWsgdDtjYXNlIG90Onh0PUE7YnJlYWsgdDtjYXNlIGx0OnJldHVybiBaO2Nhc2UgaHQ6ZGVmYXVsdDpyZXR1cm4gRX1yZXR1cm4gdC5uZXh0X291dD1vLHQuYXZhaWxfb3V0PWYsdC5uZXh0X2luPXMsdC5hdmFpbF9pbj1sLGEuaG9sZD1fLGEuYml0cz1kdCwoYS53c2l6ZXx8X3QhPT10LmF2YWlsX291dCYmYS5tb2RlPG90JiYoYS5tb2RlPG50fHxlIT09aykpJiZkKHQsdC5vdXRwdXQsdC5uZXh0X291dCxfdC10LmF2YWlsX291dCk/KGEubW9kZT1sdCxaKTooZnQtPXQuYXZhaWxfaW4sX3QtPXQuYXZhaWxfb3V0LHQudG90YWxfaW4rPWZ0LHQudG90YWxfb3V0Kz1fdCxhLnRvdGFsKz1fdCxhLndyYXAmJl90JiYodC5hZGxlcj1hLmNoZWNrPWEuZmxhZ3M/YihhLmNoZWNrLHIsX3QsdC5uZXh0X291dC1fdCk6YyhhLmNoZWNrLHIsX3QsdC5uZXh0X291dC1fdCkpLHQuZGF0YV90eXBlPWEuYml0cysoYS5sYXN0PzY0OjApKyhhLm1vZGU9PT1NPzEyODowKSsoYS5tb2RlPT09UXx8YS5tb2RlPT09cT8yNTY6MCksKDA9PT1mdCYmMD09PV90fHxlPT09aykmJnh0PT09eiYmKHh0PVIpLHh0KX0sYS5pbmZsYXRlRW5kPWZ1bmN0aW9uKHQpe2lmKCF0fHwhdC5zdGF0ZSlyZXR1cm4gRTt2YXIgZT10LnN0YXRlO3JldHVybiBlLndpbmRvdyYmKGUud2luZG93PW51bGwpLHQuc3RhdGU9bnVsbCx6fSxhLmluZmxhdGVHZXRIZWFkZXI9ZnVuY3Rpb24odCxlKXt2YXIgYTtyZXR1cm4gdCYmdC5zdGF0ZT8wPT0oMiYoYT10LnN0YXRlKS53cmFwKT9FOihhLmhlYWQ9ZSxlLmRvbmU9ITEseik6RX0sYS5pbmZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbih0LGUpe3ZhciBhLGksbj1lLmxlbmd0aDtyZXR1cm4gdCYmdC5zdGF0ZT8wIT09KGE9dC5zdGF0ZSkud3JhcCYmYS5tb2RlIT09Sz9FOmEubW9kZT09PUsmJihpPTEsKGk9YyhpLGUsbiwwKSkhPT1hLmNoZWNrKT9BOmQodCxlLG4sbik/KGEubW9kZT1sdCxaKTooYS5oYXZlZGljdD0xLHopOkV9LGEuaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MywiLi9hZGxlcjMyIjo1LCIuL2NyYzMyIjo3LCIuL2luZmZhc3QiOjEwLCIuL2luZnRyZWVzIjoxMn1dLDEyOltmdW5jdGlvbih0LGUsYSl7InVzZSBzdHJpY3QiO3ZhciBpPXQoIi4uL3V0aWxzL2NvbW1vbiIpLG49WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxyPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0scz1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0sbz1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUsYSxsLGgsZCxmLF8pe3ZhciB1LGMsYixnLG0sdyxwLHYsayx5PV8uYml0cyx4PTAsej0wLEI9MCxTPTAsRT0wLEE9MCxaPTAsUj0wLEM9MCxOPTAsTz1udWxsLEQ9MCxJPW5ldyBpLkJ1ZjE2KDE2KSxVPW5ldyBpLkJ1ZjE2KDE2KSxUPW51bGwsRj0wO2Zvcih4PTA7eDw9MTU7eCsrKUlbeF09MDtmb3Ioej0wO3o8bDt6KyspSVtlW2Erel1dKys7Zm9yKEU9eSxTPTE1O1M+PTEmJjA9PT1JW1NdO1MtLSk7aWYoRT5TJiYoRT1TKSwwPT09UylyZXR1cm4gaFtkKytdPTIwOTcxNTIwLGhbZCsrXT0yMDk3MTUyMCxfLmJpdHM9MSwwO2ZvcihCPTE7QjxTJiYwPT09SVtCXTtCKyspO2ZvcihFPEImJihFPUIpLFI9MSx4PTE7eDw9MTU7eCsrKWlmKFI8PD0xLChSLT1JW3hdKTwwKXJldHVybi0xO2lmKFI+MCYmKDA9PT10fHwxIT09UykpcmV0dXJuLTE7Zm9yKFVbMV09MCx4PTE7eDwxNTt4KyspVVt4KzFdPVVbeF0rSVt4XTtmb3Ioej0wO3o8bDt6KyspMCE9PWVbYSt6XSYmKGZbVVtlW2Erel1dKytdPXopO2lmKDA9PT10PyhPPVQ9Zix3PTE5KToxPT09dD8oTz1uLEQtPTI1NyxUPXIsRi09MjU3LHc9MjU2KTooTz1zLFQ9byx3PS0xKSxOPTAsej0wLHg9QixtPWQsQT1FLFo9MCxiPS0xLEM9MTw8RSxnPUMtMSwxPT09dCYmQz44NTJ8fDI9PT10JiZDPjU5MilyZXR1cm4gMTtmb3IoOzspe3A9eC1aLGZbel08dz8odj0wLGs9Zlt6XSk6Zlt6XT53Pyh2PVRbRitmW3pdXSxrPU9bRCtmW3pdXSk6KHY9OTYsaz0wKSx1PTE8PHgtWixCPWM9MTw8QTtkb3toW20rKE4+PlopKyhjLT11KV09cDw8MjR8djw8MTZ8a3wwfXdoaWxlKDAhPT1jKTtmb3IodT0xPDx4LTE7TiZ1Oyl1Pj49MTtpZigwIT09dT8oTiY9dS0xLE4rPXUpOk49MCx6KyssMD09LS1JW3hdKXtpZih4PT09UylicmVhazt4PWVbYStmW3pdXX1pZih4PkUmJihOJmcpIT09Yil7Zm9yKDA9PT1aJiYoWj1FKSxtKz1CLFI9MTw8KEE9eC1aKTtBK1o8UyYmISgoUi09SVtBK1pdKTw9MCk7KUErKyxSPDw9MTtpZihDKz0xPDxBLDE9PT10JiZDPjg1Mnx8Mj09PXQmJkM+NTkyKXJldHVybiAxO2hbYj1OJmddPUU8PDI0fEE8PDE2fG0tZHwwfX1yZXR1cm4gMCE9PU4mJihoW20rTl09eC1aPDwyNHw2NDw8MTZ8MCksXy5iaXRzPUUsMH19LHsiLi4vdXRpbHMvY29tbW9uIjozfV0sMTM6W2Z1bmN0aW9uKHQsZSxhKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSwxNDpbZnVuY3Rpb24odCxlLGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDstLWU+PTA7KXRbZV09MH1mdW5jdGlvbiBuKHQsZSxhLGksbil7dGhpcy5zdGF0aWNfdHJlZT10LHRoaXMuZXh0cmFfYml0cz1lLHRoaXMuZXh0cmFfYmFzZT1hLHRoaXMuZWxlbXM9aSx0aGlzLm1heF9sZW5ndGg9bix0aGlzLmhhc19zdHJlZT10JiZ0Lmxlbmd0aH1mdW5jdGlvbiByKHQsZSl7dGhpcy5keW5fdHJlZT10LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1lfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQ8MjU2P2V0W3RdOmV0WzI1NisodD4+PjcpXX1mdW5jdGlvbiBvKHQsZSl7dC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK109MjU1JmUsdC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK109ZT4+PjgmMjU1fWZ1bmN0aW9uIGwodCxlLGEpe3QuYmlfdmFsaWQ+TS1hPyh0LmJpX2J1Znw9ZTw8dC5iaV92YWxpZCY2NTUzNSxvKHQsdC5iaV9idWYpLHQuYmlfYnVmPWU+Pk0tdC5iaV92YWxpZCx0LmJpX3ZhbGlkKz1hLU0pOih0LmJpX2J1Znw9ZTw8dC5iaV92YWxpZCY2NTUzNSx0LmJpX3ZhbGlkKz1hKX1mdW5jdGlvbiBoKHQsZSxhKXtsKHQsYVsyKmVdLGFbMiplKzFdKX1mdW5jdGlvbiBkKHQsZSl7dmFyIGE9MDtkb3thfD0xJnQsdD4+Pj0xLGE8PD0xfXdoaWxlKC0tZT4wKTtyZXR1cm4gYT4+PjF9ZnVuY3Rpb24gZih0KXsxNj09PXQuYmlfdmFsaWQ/KG8odCx0LmJpX2J1ZiksdC5iaV9idWY9MCx0LmJpX3ZhbGlkPTApOnQuYmlfdmFsaWQ+PTgmJih0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmdC5iaV9idWYsdC5iaV9idWY+Pj04LHQuYmlfdmFsaWQtPTgpfWZ1bmN0aW9uIF8odCxlKXt2YXIgYSxpLG4scixzLG8sbD1lLmR5bl90cmVlLGg9ZS5tYXhfY29kZSxkPWUuc3RhdF9kZXNjLnN0YXRpY190cmVlLGY9ZS5zdGF0X2Rlc2MuaGFzX3N0cmVlLF89ZS5zdGF0X2Rlc2MuZXh0cmFfYml0cyx1PWUuc3RhdF9kZXNjLmV4dHJhX2Jhc2UsYz1lLnN0YXRfZGVzYy5tYXhfbGVuZ3RoLGI9MDtmb3Iocj0wO3I8PUs7cisrKXQuYmxfY291bnRbcl09MDtmb3IobFsyKnQuaGVhcFt0LmhlYXBfbWF4XSsxXT0wLGE9dC5oZWFwX21heCsxO2E8ajthKyspKHI9bFsyKmxbMiooaT10LmhlYXBbYV0pKzFdKzFdKzEpPmMmJihyPWMsYisrKSxsWzIqaSsxXT1yLGk+aHx8KHQuYmxfY291bnRbcl0rKyxzPTAsaT49dSYmKHM9X1tpLXVdKSxvPWxbMippXSx0Lm9wdF9sZW4rPW8qKHIrcyksZiYmKHQuc3RhdGljX2xlbis9byooZFsyKmkrMV0rcykpKTtpZigwIT09Yil7ZG97Zm9yKHI9Yy0xOzA9PT10LmJsX2NvdW50W3JdOylyLS07dC5ibF9jb3VudFtyXS0tLHQuYmxfY291bnRbcisxXSs9Mix0LmJsX2NvdW50W2NdLS0sYi09Mn13aGlsZShiPjApO2ZvcihyPWM7MCE9PXI7ci0tKWZvcihpPXQuYmxfY291bnRbcl07MCE9PWk7KShuPXQuaGVhcFstLWFdKT5ofHwobFsyKm4rMV0hPT1yJiYodC5vcHRfbGVuKz0oci1sWzIqbisxXSkqbFsyKm5dLGxbMipuKzFdPXIpLGktLSl9fWZ1bmN0aW9uIHUodCxlLGEpe3ZhciBpLG4scj1uZXcgQXJyYXkoSysxKSxzPTA7Zm9yKGk9MTtpPD1LO2krKylyW2ldPXM9cythW2ktMV08PDE7Zm9yKG49MDtuPD1lO24rKyl7dmFyIG89dFsyKm4rMV07MCE9PW8mJih0WzIqbl09ZChyW29dKyssbykpfX1mdW5jdGlvbiBjKCl7dmFyIHQsZSxhLGkscixzPW5ldyBBcnJheShLKzEpO2ZvcihhPTAsaT0wO2k8VS0xO2krKylmb3IoaXRbaV09YSx0PTA7dDwxPDxXW2ldO3QrKylhdFthKytdPWk7Zm9yKGF0W2EtMV09aSxyPTAsaT0wO2k8MTY7aSsrKWZvcihudFtpXT1yLHQ9MDt0PDE8PEpbaV07dCsrKWV0W3IrK109aTtmb3Iocj4+PTc7aTxMO2krKylmb3IobnRbaV09cjw8Nyx0PTA7dDwxPDxKW2ldLTc7dCsrKWV0WzI1NityKytdPWk7Zm9yKGU9MDtlPD1LO2UrKylzW2VdPTA7Zm9yKHQ9MDt0PD0xNDM7KSRbMip0KzFdPTgsdCsrLHNbOF0rKztmb3IoO3Q8PTI1NTspJFsyKnQrMV09OSx0Kyssc1s5XSsrO2Zvcig7dDw9Mjc5OykkWzIqdCsxXT03LHQrKyxzWzddKys7Zm9yKDt0PD0yODc7KSRbMip0KzFdPTgsdCsrLHNbOF0rKztmb3IodSgkLEYrMSxzKSx0PTA7dDxMO3QrKyl0dFsyKnQrMV09NSx0dFsyKnRdPWQodCw1KTtydD1uZXcgbigkLFcsVCsxLEYsSyksc3Q9bmV3IG4odHQsSiwwLEwsSyksb3Q9bmV3IG4obmV3IEFycmF5KDApLFEsMCxILFApfWZ1bmN0aW9uIGIodCl7dmFyIGU7Zm9yKGU9MDtlPEY7ZSsrKXQuZHluX2x0cmVlWzIqZV09MDtmb3IoZT0wO2U8TDtlKyspdC5keW5fZHRyZWVbMiplXT0wO2ZvcihlPTA7ZTxIO2UrKyl0LmJsX3RyZWVbMiplXT0wO3QuZHluX2x0cmVlWzIqWV09MSx0Lm9wdF9sZW49dC5zdGF0aWNfbGVuPTAsdC5sYXN0X2xpdD10Lm1hdGNoZXM9MH1mdW5jdGlvbiBnKHQpe3QuYmlfdmFsaWQ+OD9vKHQsdC5iaV9idWYpOnQuYmlfdmFsaWQ+MCYmKHQucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPXQuYmlfYnVmKSx0LmJpX2J1Zj0wLHQuYmlfdmFsaWQ9MH1mdW5jdGlvbiBtKHQsZSxhLGkpe2codCksaSYmKG8odCxhKSxvKHQsfmEpKSxBLmFycmF5U2V0KHQucGVuZGluZ19idWYsdC53aW5kb3csZSxhLHQucGVuZGluZyksdC5wZW5kaW5nKz1hfWZ1bmN0aW9uIHcodCxlLGEsaSl7dmFyIG49MiplLHI9MiphO3JldHVybiB0W25dPHRbcl18fHRbbl09PT10W3JdJiZpW2VdPD1pW2FdfWZ1bmN0aW9uIHAodCxlLGEpe2Zvcih2YXIgaT10LmhlYXBbYV0sbj1hPDwxO248PXQuaGVhcF9sZW4mJihuPHQuaGVhcF9sZW4mJncoZSx0LmhlYXBbbisxXSx0LmhlYXBbbl0sdC5kZXB0aCkmJm4rKywhdyhlLGksdC5oZWFwW25dLHQuZGVwdGgpKTspdC5oZWFwW2FdPXQuaGVhcFtuXSxhPW4sbjw8PTE7dC5oZWFwW2FdPWl9ZnVuY3Rpb24gdih0LGUsYSl7dmFyIGksbixyLG8sZD0wO2lmKDAhPT10Lmxhc3RfbGl0KWRve2k9dC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqZF08PDh8dC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqZCsxXSxuPXQucGVuZGluZ19idWZbdC5sX2J1ZitkXSxkKyssMD09PWk/aCh0LG4sZSk6KGgodCwocj1hdFtuXSkrVCsxLGUpLDAhPT0obz1XW3JdKSYmbCh0LG4tPWl0W3JdLG8pLGgodCxyPXMoLS1pKSxhKSwwIT09KG89SltyXSkmJmwodCxpLT1udFtyXSxvKSl9d2hpbGUoZDx0Lmxhc3RfbGl0KTtoKHQsWSxlKX1mdW5jdGlvbiBrKHQsZSl7dmFyIGEsaSxuLHI9ZS5keW5fdHJlZSxzPWUuc3RhdF9kZXNjLnN0YXRpY190cmVlLG89ZS5zdGF0X2Rlc2MuaGFzX3N0cmVlLGw9ZS5zdGF0X2Rlc2MuZWxlbXMsaD0tMTtmb3IodC5oZWFwX2xlbj0wLHQuaGVhcF9tYXg9aixhPTA7YTxsO2ErKykwIT09clsyKmFdPyh0LmhlYXBbKyt0LmhlYXBfbGVuXT1oPWEsdC5kZXB0aFthXT0wKTpyWzIqYSsxXT0wO2Zvcig7dC5oZWFwX2xlbjwyOylyWzIqKG49dC5oZWFwWysrdC5oZWFwX2xlbl09aDwyPysraDowKV09MSx0LmRlcHRoW25dPTAsdC5vcHRfbGVuLS0sbyYmKHQuc3RhdGljX2xlbi09c1syKm4rMV0pO2ZvcihlLm1heF9jb2RlPWgsYT10LmhlYXBfbGVuPj4xO2E+PTE7YS0tKXAodCxyLGEpO249bDtkb3thPXQuaGVhcFsxXSx0LmhlYXBbMV09dC5oZWFwW3QuaGVhcF9sZW4tLV0scCh0LHIsMSksaT10LmhlYXBbMV0sdC5oZWFwWy0tdC5oZWFwX21heF09YSx0LmhlYXBbLS10LmhlYXBfbWF4XT1pLHJbMipuXT1yWzIqYV0rclsyKmldLHQuZGVwdGhbbl09KHQuZGVwdGhbYV0+PXQuZGVwdGhbaV0/dC5kZXB0aFthXTp0LmRlcHRoW2ldKSsxLHJbMiphKzFdPXJbMippKzFdPW4sdC5oZWFwWzFdPW4rKyxwKHQsciwxKX13aGlsZSh0LmhlYXBfbGVuPj0yKTt0LmhlYXBbLS10LmhlYXBfbWF4XT10LmhlYXBbMV0sXyh0LGUpLHUocixoLHQuYmxfY291bnQpfWZ1bmN0aW9uIHkodCxlLGEpe3ZhciBpLG4scj0tMSxzPWVbMV0sbz0wLGw9NyxoPTQ7Zm9yKDA9PT1zJiYobD0xMzgsaD0zKSxlWzIqKGErMSkrMV09NjU1MzUsaT0wO2k8PWE7aSsrKW49cyxzPWVbMiooaSsxKSsxXSwrK288bCYmbj09PXN8fChvPGg/dC5ibF90cmVlWzIqbl0rPW86MCE9PW4/KG4hPT1yJiZ0LmJsX3RyZWVbMipuXSsrLHQuYmxfdHJlZVsyKnFdKyspOm88PTEwP3QuYmxfdHJlZVsyKkddKys6dC5ibF90cmVlWzIqWF0rKyxvPTAscj1uLDA9PT1zPyhsPTEzOCxoPTMpOm49PT1zPyhsPTYsaD0zKToobD03LGg9NCkpfWZ1bmN0aW9uIHgodCxlLGEpe3ZhciBpLG4scj0tMSxzPWVbMV0sbz0wLGQ9NyxmPTQ7Zm9yKDA9PT1zJiYoZD0xMzgsZj0zKSxpPTA7aTw9YTtpKyspaWYobj1zLHM9ZVsyKihpKzEpKzFdLCEoKytvPGQmJm49PT1zKSl7aWYobzxmKWRve2godCxuLHQuYmxfdHJlZSl9d2hpbGUoMCE9LS1vKTtlbHNlIDAhPT1uPyhuIT09ciYmKGgodCxuLHQuYmxfdHJlZSksby0tKSxoKHQscSx0LmJsX3RyZWUpLGwodCxvLTMsMikpOm88PTEwPyhoKHQsRyx0LmJsX3RyZWUpLGwodCxvLTMsMykpOihoKHQsWCx0LmJsX3RyZWUpLGwodCxvLTExLDcpKTtvPTAscj1uLDA9PT1zPyhkPTEzOCxmPTMpOm49PT1zPyhkPTYsZj0zKTooZD03LGY9NCl9fWZ1bmN0aW9uIHoodCl7dmFyIGU7Zm9yKHkodCx0LmR5bl9sdHJlZSx0LmxfZGVzYy5tYXhfY29kZSkseSh0LHQuZHluX2R0cmVlLHQuZF9kZXNjLm1heF9jb2RlKSxrKHQsdC5ibF9kZXNjKSxlPUgtMTtlPj0zJiYwPT09dC5ibF90cmVlWzIqVltlXSsxXTtlLS0pO3JldHVybiB0Lm9wdF9sZW4rPTMqKGUrMSkrNSs1KzQsZX1mdW5jdGlvbiBCKHQsZSxhLGkpe3ZhciBuO2ZvcihsKHQsZS0yNTcsNSksbCh0LGEtMSw1KSxsKHQsaS00LDQpLG49MDtuPGk7bisrKWwodCx0LmJsX3RyZWVbMipWW25dKzFdLDMpO3godCx0LmR5bl9sdHJlZSxlLTEpLHgodCx0LmR5bl9kdHJlZSxhLTEpfWZ1bmN0aW9uIFModCl7dmFyIGUsYT00MDkzNjI0NDQ3O2ZvcihlPTA7ZTw9MzE7ZSsrLGE+Pj49MSlpZigxJmEmJjAhPT10LmR5bl9sdHJlZVsyKmVdKXJldHVybiBSO2lmKDAhPT10LmR5bl9sdHJlZVsxOF18fDAhPT10LmR5bl9sdHJlZVsyMF18fDAhPT10LmR5bl9sdHJlZVsyNl0pcmV0dXJuIEM7Zm9yKGU9MzI7ZTxUO2UrKylpZigwIT09dC5keW5fbHRyZWVbMiplXSlyZXR1cm4gQztyZXR1cm4gUn1mdW5jdGlvbiBFKHQsZSxhLGkpe2wodCwoTzw8MSkrKGk/MTowKSwzKSxtKHQsZSxhLCEwKX12YXIgQT10KCIuLi91dGlscy9jb21tb24iKSxaPTQsUj0wLEM9MSxOPTIsTz0wLEQ9MSxJPTIsVT0yOSxUPTI1NixGPVQrMStVLEw9MzAsSD0xOSxqPTIqRisxLEs9MTUsTT0xNixQPTcsWT0yNTYscT0xNixHPTE3LFg9MTgsVz1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxKPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSxRPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxWPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSwkPW5ldyBBcnJheSgyKihGKzIpKTtpKCQpO3ZhciB0dD1uZXcgQXJyYXkoMipMKTtpKHR0KTt2YXIgZXQ9bmV3IEFycmF5KDUxMik7aShldCk7dmFyIGF0PW5ldyBBcnJheSgyNTYpO2koYXQpO3ZhciBpdD1uZXcgQXJyYXkoVSk7aShpdCk7dmFyIG50PW5ldyBBcnJheShMKTtpKG50KTt2YXIgcnQsc3Qsb3QsbHQ9ITE7YS5fdHJfaW5pdD1mdW5jdGlvbih0KXtsdHx8KGMoKSxsdD0hMCksdC5sX2Rlc2M9bmV3IHIodC5keW5fbHRyZWUscnQpLHQuZF9kZXNjPW5ldyByKHQuZHluX2R0cmVlLHN0KSx0LmJsX2Rlc2M9bmV3IHIodC5ibF90cmVlLG90KSx0LmJpX2J1Zj0wLHQuYmlfdmFsaWQ9MCxiKHQpfSxhLl90cl9zdG9yZWRfYmxvY2s9RSxhLl90cl9mbHVzaF9ibG9jaz1mdW5jdGlvbih0LGUsYSxpKXt2YXIgbixyLHM9MDt0LmxldmVsPjA/KHQuc3RybS5kYXRhX3R5cGU9PT1OJiYodC5zdHJtLmRhdGFfdHlwZT1TKHQpKSxrKHQsdC5sX2Rlc2MpLGsodCx0LmRfZGVzYykscz16KHQpLG49dC5vcHRfbGVuKzMrNz4+PjMsKHI9dC5zdGF0aWNfbGVuKzMrNz4+PjMpPD1uJiYobj1yKSk6bj1yPWErNSxhKzQ8PW4mJi0xIT09ZT9FKHQsZSxhLGkpOnQuc3RyYXRlZ3k9PT1afHxyPT09bj8obCh0LChEPDwxKSsoaT8xOjApLDMpLHYodCwkLHR0KSk6KGwodCwoSTw8MSkrKGk/MTowKSwzKSxCKHQsdC5sX2Rlc2MubWF4X2NvZGUrMSx0LmRfZGVzYy5tYXhfY29kZSsxLHMrMSksdih0LHQuZHluX2x0cmVlLHQuZHluX2R0cmVlKSksYih0KSxpJiZnKHQpfSxhLl90cl90YWxseT1mdW5jdGlvbih0LGUsYSl7cmV0dXJuIHQucGVuZGluZ19idWZbdC5kX2J1ZisyKnQubGFzdF9saXRdPWU+Pj44JjI1NSx0LnBlbmRpbmdfYnVmW3QuZF9idWYrMip0Lmxhc3RfbGl0KzFdPTI1NSZlLHQucGVuZGluZ19idWZbdC5sX2J1Zit0Lmxhc3RfbGl0XT0yNTUmYSx0Lmxhc3RfbGl0KyssMD09PWU/dC5keW5fbHRyZWVbMiphXSsrOih0Lm1hdGNoZXMrKyxlLS0sdC5keW5fbHRyZWVbMiooYXRbYV0rVCsxKV0rKyx0LmR5bl9kdHJlZVsyKnMoZSldKyspLHQubGFzdF9saXQ9PT10LmxpdF9idWZzaXplLTF9LGEuX3RyX2FsaWduPWZ1bmN0aW9uKHQpe2wodCxEPDwxLDMpLGgodCxZLCQpLGYodCl9fSx7Ii4uL3V0aWxzL2NvbW1vbiI6M31dLDE1OltmdW5jdGlvbih0LGUsYSl7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9fSx7fV0sIi8iOltmdW5jdGlvbih0LGUsYSl7InVzZSBzdHJpY3QiO3ZhciBpPXt9OygwLHQoIi4vbGliL3V0aWxzL2NvbW1vbiIpLmFzc2lnbikoaSx0KCIuL2xpYi9kZWZsYXRlIiksdCgiLi9saWIvaW5mbGF0ZSIpLHQoIi4vbGliL3psaWIvY29uc3RhbnRzIikpLGUuZXhwb3J0cz1pfSx7Ii4vbGliL2RlZmxhdGUiOjEsIi4vbGliL2luZmxhdGUiOjIsIi4vbGliL3V0aWxzL2NvbW1vbiI6MywiLi9saWIvemxpYi9jb25zdGFudHMiOjZ9XX0se30sW10pKCIvIil9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7Y29uc3QgR1pJUF9NRU1CRVJfSEVBREVSX0lEX1NJWkU9Mztjb25zdCBHWklQX0hFQURFUl9JRDE9MHgxZjtjb25zdCBHWklQX0hFQURFUl9JRDI9MHg4Yjtjb25zdCBHWklQX0RFRkxBVEVfQ09NUFJFU1NJT049ODtmdW5jdGlvbiBfc3RyaW5nVG9VSW50OEFycmF5KHN0cil7Y29uc3QgYXJyYXk9bmV3IFVpbnQ4QXJyYXkoc3RyLmxlbmd0aCk7Zm9yKGxldCBpPTA7aTxzdHIubGVuZ3RoOysraSl7YXJyYXlbaV09c3RyLmNoYXJDb2RlQXQoaSk7fQotcmV0dXJuIGFycmF5O30KLWZ1bmN0aW9uIEd6aXBJbXBvcnRlcihtb2RlbCxldmVudERhdGEpe3RoaXMuaW5mbGF0ZUFzVHJhY2VTdHJlYW09ZmFsc2U7aWYodHlwZW9mKGV2ZW50RGF0YSk9PT0nc3RyaW5nJ3x8ZXZlbnREYXRhIGluc3RhbmNlb2YgU3RyaW5nKXtldmVudERhdGE9X3N0cmluZ1RvVUludDhBcnJheShldmVudERhdGEpO31lbHNlIGlmKGV2ZW50RGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXtldmVudERhdGE9bmV3IFVpbnQ4QXJyYXkoZXZlbnREYXRhKTt9ZWxzZSBpZihldmVudERhdGEgaW5zdGFuY2VvZiB0ci5iLkluTWVtb3J5VHJhY2VTdHJlYW0pe2V2ZW50RGF0YT1ldmVudERhdGEuZGF0YTt0aGlzLmluZmxhdGVBc1RyYWNlU3RyZWFtXz10cnVlO31lbHNle3Rocm93IG5ldyBFcnJvcignVW5rbm93biBnemlwIGRhdGEgZm9ybWF0Jyk7fQotdGhpcy5tb2RlbF89bW9kZWw7dGhpcy5nemlwRGF0YV89ZXZlbnREYXRhO30KLUd6aXBJbXBvcnRlci5jYW5JbXBvcnQ9ZnVuY3Rpb24oZXZlbnREYXRhKXtpZihldmVudERhdGEgaW5zdGFuY2VvZiB0ci5iLkluTWVtb3J5VHJhY2VTdHJlYW0pe2V2ZW50RGF0YT1ldmVudERhdGEuaGVhZGVyO30KLWxldCBoZWFkZXI7aWYoZXZlbnREYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe2hlYWRlcj1uZXcgVWludDhBcnJheShldmVudERhdGEuc2xpY2UoMCxHWklQX01FTUJFUl9IRUFERVJfSURfU0laRSkpO31lbHNlIGlmKHR5cGVvZihldmVudERhdGEpPT09J3N0cmluZyd8fGV2ZW50RGF0YSBpbnN0YW5jZW9mIFN0cmluZyl7aGVhZGVyPWV2ZW50RGF0YS5zdWJzdHJpbmcoMCxHWklQX01FTUJFUl9IRUFERVJfSURfU0laRSk7aGVhZGVyPV9zdHJpbmdUb1VJbnQ4QXJyYXkoaGVhZGVyKTt9ZWxzZXtyZXR1cm4gZmFsc2U7fQotcmV0dXJuIGhlYWRlclswXT09PUdaSVBfSEVBREVSX0lEMSYmaGVhZGVyWzFdPT09R1pJUF9IRUFERVJfSUQyJiZoZWFkZXJbMl09PT1HWklQX0RFRkxBVEVfQ09NUFJFU1NJT047fTtHemlwSW1wb3J0ZXIuaW5mbGF0ZUd6aXBEYXRhXz1mdW5jdGlvbihkYXRhKXtsZXQgcG9zaXRpb249MDtmdW5jdGlvbiBnZXRCeXRlKCl7aWYocG9zaXRpb24+PWRhdGEubGVuZ3RoKXt0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kIG9mIGd6aXAgZGF0YScpO30KLXJldHVybiBkYXRhW3Bvc2l0aW9uKytdO30KLWZ1bmN0aW9uIGdldFdvcmQoKXtjb25zdCBsb3c9Z2V0Qnl0ZSgpO2NvbnN0IGhpZ2g9Z2V0Qnl0ZSgpO3JldHVybihoaWdoPDw4KStsb3c7fQotZnVuY3Rpb24gc2tpcEJ5dGVzKGFtb3VudCl7cG9zaXRpb24rPWFtb3VudDt9Ci1mdW5jdGlvbiBza2lwWmVyb1Rlcm1pbmF0ZWRTdHJpbmcoKXt3aGlsZShnZXRCeXRlKCkhPT0wKXt9fQotY29uc3QgaWQxPWdldEJ5dGUoKTtjb25zdCBpZDI9Z2V0Qnl0ZSgpO2lmKGlkMSE9PUdaSVBfSEVBREVSX0lEMXx8aWQyIT09R1pJUF9IRUFERVJfSUQyKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBnemlwIGRhdGEnKTt9Ci1jb25zdCBjb21wcmVzc2lvbk1ldGhvZD1nZXRCeXRlKCk7aWYoY29tcHJlc3Npb25NZXRob2QhPT1HWklQX0RFRkxBVEVfQ09NUFJFU1NJT04pe3Rocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gbWV0aG9kOiAnK2NvbXByZXNzaW9uTWV0aG9kKTt9Ci1jb25zdCBmbGFncz1nZXRCeXRlKCk7Y29uc3QgaGF2ZUhlYWRlckNyYz1mbGFncyYoMTw8MSk7Y29uc3QgaGF2ZUV4dHJhRmllbGRzPWZsYWdzJigxPDwyKTtjb25zdCBoYXZlRmlsZU5hbWU9ZmxhZ3MmKDE8PDMpO2NvbnN0IGhhdmVDb21tZW50PWZsYWdzJigxPDw0KTtza2lwQnl0ZXMoNCsxKzEpO2lmKGhhdmVFeHRyYUZpZWxkcyl7Y29uc3QgYnl0ZXNUb1NraXA9Z2V0V29yZCgpO3NraXBCeXRlcyhieXRlc1RvU2tpcCk7fQotaWYoaGF2ZUZpbGVOYW1lKXNraXBaZXJvVGVybWluYXRlZFN0cmluZygpO2lmKGhhdmVDb21tZW50KXNraXBaZXJvVGVybWluYXRlZFN0cmluZygpO2lmKGhhdmVIZWFkZXJDcmMpZ2V0V29yZCgpO2NvbnN0IGluZmxhdGVkRGF0YT1wYWtvLmluZmxhdGVSYXcoZGF0YS5zdWJhcnJheShwb3NpdGlvbikpO2lmKHRoaXMuaW5mbGF0ZUFzVHJhY2VTdHJlYW1fKXtyZXR1cm4gR3ppcEltcG9ydGVyLnRyYW5zZm9ybVRvU3RyZWFtKGluZmxhdGVkRGF0YSk7fQotbGV0IHN0cmluZzt0cnl7c3RyaW5nPUd6aXBJbXBvcnRlci50cmFuc2Zvcm1Ub1N0cmluZyhpbmZsYXRlZERhdGEpO31jYXRjaChlcnIpe3JldHVybiBHemlwSW1wb3J0ZXIudHJhbnNmb3JtVG9TdHJlYW0oaW5mbGF0ZWREYXRhKTt9Ci1pZihpbmZsYXRlZERhdGEubGVuZ3RoPjAmJnN0cmluZy5sZW5ndGg9PT0wKXtyZXR1cm4gR3ppcEltcG9ydGVyLnRyYW5zZm9ybVRvU3RyZWFtKGluZmxhdGVkRGF0YSk7fQotcmV0dXJuIHN0cmluZzt9O0d6aXBJbXBvcnRlci50cmFuc2Zvcm1Ub1N0cmVhbT1mdW5jdGlvbihkYXRhKXtpZihkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSl7cmV0dXJuIG5ldyB0ci5iLkluTWVtb3J5VHJhY2VTdHJlYW0oZGF0YSxmYWxzZSk7fQotdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdHJhbnNmb3JtICR7dHlwZX0gdG8gVHJhY2VTdHJlYW0uYCk7fTtHemlwSW1wb3J0ZXIudHJhbnNmb3JtVG9TdHJpbmc9ZnVuY3Rpb24oZGF0YSl7aWYodHlwZW9mKGRhdGEpPT09J3N0cmluZycpcmV0dXJuIGRhdGE7aWYodHlwZW9mIFRleHREZWNvZGVyPT09J3VuZGVmaW5lZCcpe2lmKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7ZGF0YT1uZXcgVWludDhBcnJheShkYXRhKTt9Ci1jb25zdCByZXN1bHQ9W107bGV0IGNodW5rPTY1NTM2O2xldCBrPTA7Y29uc3QgbGVuPWRhdGEubGVuZ3RoO3doaWxlKGs8bGVuJiZjaHVuaz4xKXt0cnl7Y29uc3QgY2h1bmtsZW49TWF0aC5taW4oaytjaHVuayxsZW4pO2xldCBkYXRhc2xpY2U7aWYoZGF0YSBpbnN0YW5jZW9mIEFycmF5KXtkYXRhc2xpY2U9ZGF0YS5zbGljZShrLGNodW5rbGVuKTt9ZWxzZXtkYXRhc2xpY2U9ZGF0YS5zdWJhcnJheShrLGNodW5rbGVuKTt9Ci1yZXN1bHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZGF0YXNsaWNlKSk7ays9Y2h1bms7fWNhdGNoKGUpe2NodW5rPU1hdGguZmxvb3IoY2h1bmsvMik7fX0KLXJldHVybiByZXN1bHQuam9pbignJyk7fQotaWYoZGF0YSBpbnN0YW5jZW9mIEFycmF5KXtkYXRhPW5ldyBVaW50OEFycmF5KGRhdGEpO30KLXJldHVybiBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JykuZGVjb2RlKGRhdGEpO307R3ppcEltcG9ydGVyLnByb3RvdHlwZT17X19wcm90b19fOnRyLmltcG9ydGVyLkltcG9ydGVyLnByb3RvdHlwZSxnZXQgaW1wb3J0ZXJOYW1lKCl7cmV0dXJuJ0d6aXBJbXBvcnRlcic7fSxpc1RyYWNlRGF0YUNvbnRhaW5lcigpe3JldHVybiB0cnVlO30sZXh0cmFjdFN1YnRyYWNlcygpe2NvbnN0IGV2ZW50RGF0YT1HemlwSW1wb3J0ZXIuaW5mbGF0ZUd6aXBEYXRhXyh0aGlzLmd6aXBEYXRhXyk7cmV0dXJuIGV2ZW50RGF0YT9bZXZlbnREYXRhXTpbXTt9fTt0ci5pbXBvcnRlci5JbXBvcnRlci5yZWdpc3RlcihHemlwSW1wb3J0ZXIpO3JldHVybntHemlwSW1wb3J0ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmltcG9ydGVyJyxmdW5jdGlvbigpe2NsYXNzIFNpbXBsZUxpbmVSZWFkZXJ7Y29uc3RydWN0b3IodGV4dCl7dGhpcy5kYXRhXz10ZXh0IGluc3RhbmNlb2YgdHIuYi5UcmFjZVN0cmVhbT90ZXh0OnRleHQuc3BsaXQobmV3IFJlZ0V4cCgnXHI/XG4nKSk7dGhpcy5jdXJMaW5lXz0wO3RoaXMucmVhZExhc3RMaW5lXz1mYWxzZTt0aGlzLnNhdmVkTGluZXNfPXVuZGVmaW5lZDt9KltTeW1ib2wuaXRlcmF0b3JdKCl7bGV0IGxhc3RMaW5lPXVuZGVmaW5lZDt3aGlsZSh0aGlzLmhhc0RhdGFfKXtpZih0aGlzLnJlYWRMYXN0TGluZV8pe3RoaXMuY3VyTGluZV8rKzt0aGlzLnJlYWRMYXN0TGluZV89ZmFsc2U7fWVsc2UgaWYodGhpcy5kYXRhXyBpbnN0YW5jZW9mIHRyLmIuVHJhY2VTdHJlYW0pe3RoaXMuY3VyTGluZV8rKztjb25zdCBsaW5lPXRoaXMuZGF0YV8ucmVhZFVudGlsRGVsaW1pdGVyKCdcbicpO2lmKGxpbmUuZW5kc1dpdGgoJ1xyXG4nKSl7bGFzdExpbmU9bGluZS5zbGljZSgwLC0yKTt9ZWxzZSBpZihsaW5lLmVuZHNXaXRoKCdcbicpKXtsYXN0TGluZT1saW5lLnNsaWNlKDAsLTEpO31lbHNle2xhc3RMaW5lPWxpbmU7fX1lbHNle3RoaXMuY3VyTGluZV8rKztsYXN0TGluZT10aGlzLmRhdGFfW3RoaXMuY3VyTGluZV8tMV07fQoteWllbGQgbGFzdExpbmU7fX0KLWdldCBjdXJMaW5lTnVtYmVyKCl7cmV0dXJuIHRoaXMuY3VyTGluZV87fQotZ2V0IGhhc0RhdGFfKCl7aWYodGhpcy5kYXRhXyBpbnN0YW5jZW9mIHRyLmIuVHJhY2VTdHJlYW0pcmV0dXJuIHRoaXMuZGF0YV8uaGFzRGF0YTtyZXR1cm4gdGhpcy5jdXJMaW5lXzx0aGlzLmRhdGFfLmxlbmd0aDt9Ci1hZHZhbmNlVG9MaW5lTWF0Y2hpbmcocmVnZXgpe2Zvcihjb25zdCBsaW5lIG9mIHRoaXMpe2lmKHRoaXMuc2F2ZWRMaW5lc18hPT11bmRlZmluZWQpdGhpcy5zYXZlZExpbmVzXy5wdXNoKGxpbmUpO2lmKHJlZ2V4LnRlc3QobGluZSkpe3RoaXMuZ29CYWNrXygpO3JldHVybiB0cnVlO319Ci1yZXR1cm4gZmFsc2U7fQotZ29CYWNrXygpe2lmKHRoaXMucmVhZExhc3RMaW5lXyl7dGhyb3cgbmV3IEVycm9yKCdUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3Qgb25lIG5leHRMaW5lIGNhbGwgYmV0d2VlbiAnKydhbnkgdHdvIGdvQmFjayBjYWxscy4nKTt9Ci1pZih0aGlzLmN1ckxpbmVfPT09MCl7dGhyb3cgbmV3IEVycm9yKCdUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3Qgb25lIG5leHRMaW5lIGNhbGwgYmVmb3JlICcrJ3RoZSBmaXJzdCBnb0JhY2sgY2FsbC4nKTt9Ci10aGlzLnJlYWRMYXN0TGluZV89dHJ1ZTt0aGlzLmN1ckxpbmVfLS07fQotYmVnaW5TYXZpbmdMaW5lcygpe3RoaXMuc2F2ZWRMaW5lc189W107fQotZW5kU2F2aW5nTGluZXNBbmRHZXRSZXN1bHQoKXtjb25zdCB0bXA9dGhpcy5zYXZlZExpbmVzXzt0aGlzLnNhdmVkTGluZXNfPXVuZGVmaW5lZDtyZXR1cm4gdG1wO319Ci1yZXR1cm57U2ltcGxlTGluZVJlYWRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlcicsZnVuY3Rpb24oKXtmdW5jdGlvbiBUcmFjZTJIVE1MSW1wb3J0ZXIobW9kZWwsZXZlbnRzKXt0aGlzLmltcG9ydFByaW9yaXR5PTA7fQotVHJhY2UySFRNTEltcG9ydGVyLnN1YnRyYWNlc189W107ZnVuY3Rpb24gX2V4dHJhY3RFdmVudHNGcm9tSFRNTCh0ZXh0KXtUcmFjZTJIVE1MSW1wb3J0ZXIuc3VidHJhY2VzXz1bXTtjb25zdCByPW5ldyB0ci5pbXBvcnRlci5TaW1wbGVMaW5lUmVhZGVyKHRleHQpO3doaWxlKHRydWUpe2lmKCFyLmFkdmFuY2VUb0xpbmVNYXRjaGluZyhuZXcgUmVnRXhwKCdePFxzKnNjcmlwdCBpZD0idmlld2VyLWRhdGEiICcrJ3R5cGU9IihhcHBsaWNhdGlvblwvanNvbnx0ZXh0XC9wbGFpbikiPlxyPyQnKSkpe2JyZWFrO30KLXIuYmVnaW5TYXZpbmdMaW5lcygpO2lmKCFyLmFkdmFuY2VUb0xpbmVNYXRjaGluZygvXjxcL1xzKnNjcmlwdD5ccj8kLykpcmV0dXJuO2xldCByYXdFdmVudHM9ci5lbmRTYXZpbmdMaW5lc0FuZEdldFJlc3VsdCgpO3Jhd0V2ZW50cz1yYXdFdmVudHMuc2xpY2UoMSxyYXdFdmVudHMubGVuZ3RoLTEpO2NvbnN0IGRhdGE2ND1yYXdFdmVudHMuam9pbignXG4nKTtjb25zdCBidWZmZXI9bmV3IEFycmF5QnVmZmVyKHRyLmIuQmFzZTY0LmdldERlY29kZWRCdWZmZXJMZW5ndGgoZGF0YTY0KSk7Y29uc3QgbGVuPXRyLmIuQmFzZTY0LkRlY29kZVRvVHlwZWRBcnJheShkYXRhNjQsbmV3IERhdGFWaWV3KGJ1ZmZlcikpO1RyYWNlMkhUTUxJbXBvcnRlci5zdWJ0cmFjZXNfLnB1c2goYnVmZmVyLnNsaWNlKDAsbGVuKSk7fX0KLWZ1bmN0aW9uIF9jYW5JbXBvcnRGcm9tSFRNTCh0ZXh0KXtpZighL148IURPQ1RZUEUgaHRtbD4vLnRlc3QodGV4dCkpcmV0dXJuIGZhbHNlO19leHRyYWN0RXZlbnRzRnJvbUhUTUwodGV4dCk7aWYoVHJhY2UySFRNTEltcG9ydGVyLnN1YnRyYWNlc18ubGVuZ3RoPT09MClyZXR1cm4gZmFsc2U7cmV0dXJuIHRydWU7fQotVHJhY2UySFRNTEltcG9ydGVyLmNhbkltcG9ydD1mdW5jdGlvbihldmVudHMpe2lmKGV2ZW50cyBpbnN0YW5jZW9mIHRyLmIuVHJhY2VTdHJlYW0pcmV0dXJuIGZhbHNlO3JldHVybiBfY2FuSW1wb3J0RnJvbUhUTUwoZXZlbnRzKTt9O1RyYWNlMkhUTUxJbXBvcnRlci5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5pbXBvcnRlci5JbXBvcnRlci5wcm90b3R5cGUsZ2V0IGltcG9ydGVyTmFtZSgpe3JldHVybidUcmFjZTJIVE1MSW1wb3J0ZXInO30saXNUcmFjZURhdGFDb250YWluZXIoKXtyZXR1cm4gdHJ1ZTt9LGV4dHJhY3RTdWJ0cmFjZXMoKXtyZXR1cm4gVHJhY2UySFRNTEltcG9ydGVyLnN1YnRyYWNlc187fSxpbXBvcnRFdmVudHMoKXt9fTt0ci5pbXBvcnRlci5JbXBvcnRlci5yZWdpc3RlcihUcmFjZTJIVE1MSW1wb3J0ZXIpO3JldHVybntUcmFjZTJIVE1MSW1wb3J0ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIudjgnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gU3BsYXlUcmVlKCl7fQotU3BsYXlUcmVlLnByb3RvdHlwZS5yb290Xz1udWxsO1NwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiF0aGlzLnJvb3RfO307U3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oa2V5LHZhbHVlKXtpZih0aGlzLmlzRW1wdHkoKSl7dGhpcy5yb290Xz1uZXcgU3BsYXlUcmVlLk5vZGUoa2V5LHZhbHVlKTtyZXR1cm47fQotdGhpcy5zcGxheV8oa2V5KTtpZih0aGlzLnJvb3RfLmtleT09PWtleSl7cmV0dXJuO30KLWNvbnN0IG5vZGU9bmV3IFNwbGF5VHJlZS5Ob2RlKGtleSx2YWx1ZSk7aWYoa2V5PnRoaXMucm9vdF8ua2V5KXtub2RlLmxlZnQ9dGhpcy5yb290Xztub2RlLnJpZ2h0PXRoaXMucm9vdF8ucmlnaHQ7dGhpcy5yb290Xy5yaWdodD1udWxsO31lbHNle25vZGUucmlnaHQ9dGhpcy5yb290Xztub2RlLmxlZnQ9dGhpcy5yb290Xy5sZWZ0O3RoaXMucm9vdF8ubGVmdD1udWxsO30KLXRoaXMucm9vdF89bm9kZTt9O1NwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGtleSl7aWYodGhpcy5pc0VtcHR5KCkpe3Rocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnK2tleSk7fQotdGhpcy5zcGxheV8oa2V5KTtpZih0aGlzLnJvb3RfLmtleSE9PWtleSl7dGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcra2V5KTt9Ci1jb25zdCByZW1vdmVkPXRoaXMucm9vdF87aWYoIXRoaXMucm9vdF8ubGVmdCl7dGhpcy5yb290Xz10aGlzLnJvb3RfLnJpZ2h0O31lbHNle2NvbnN0IHJpZ2h0PXRoaXMucm9vdF8ucmlnaHQ7dGhpcy5yb290Xz10aGlzLnJvb3RfLmxlZnQ7dGhpcy5zcGxheV8oa2V5KTt0aGlzLnJvb3RfLnJpZ2h0PXJpZ2h0O30KLXJldHVybiByZW1vdmVkO307U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKGtleSl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuIG51bGw7dGhpcy5zcGxheV8oa2V5KTtyZXR1cm4gdGhpcy5yb290Xy5rZXk9PT1rZXk/dGhpcy5yb290XzpudWxsO307U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWluPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuIG51bGw7bGV0IGN1cnJlbnQ9dGhpcy5yb290Xzt3aGlsZShjdXJyZW50LmxlZnQpe2N1cnJlbnQ9Y3VycmVudC5sZWZ0O30KLXJldHVybiBjdXJyZW50O307U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4PWZ1bmN0aW9uKG9wdF9zdGFydE5vZGUpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiBudWxsO2xldCBjdXJyZW50PW9wdF9zdGFydE5vZGV8fHRoaXMucm9vdF87d2hpbGUoY3VycmVudC5yaWdodCl7Y3VycmVudD1jdXJyZW50LnJpZ2h0O30KLXJldHVybiBjdXJyZW50O307U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbj1mdW5jdGlvbihrZXkpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiBudWxsO3RoaXMuc3BsYXlfKGtleSk7aWYodGhpcy5yb290Xy5rZXk8PWtleSl7cmV0dXJuIHRoaXMucm9vdF87fQotaWYodGhpcy5yb290Xy5sZWZ0KXtyZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVmdCk7fQotcmV0dXJuIG51bGw7fTtTcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXNBbmRWYWx1ZXM9ZnVuY3Rpb24oKXtjb25zdCByZXN1bHQ9W107dGhpcy50cmF2ZXJzZV8oZnVuY3Rpb24obm9kZSl7cmVzdWx0LnB1c2goW25vZGUua2V5LG5vZGUudmFsdWVdKTt9KTtyZXR1cm4gcmVzdWx0O307U3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRWYWx1ZXM9ZnVuY3Rpb24oKXtjb25zdCByZXN1bHQ9W107dGhpcy50cmF2ZXJzZV8oZnVuY3Rpb24obm9kZSl7cmVzdWx0LnB1c2gobm9kZS52YWx1ZSk7fSk7cmV0dXJuIHJlc3VsdDt9O1NwbGF5VHJlZS5wcm90b3R5cGUuc3BsYXlfPWZ1bmN0aW9uKGtleSl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuO2NvbnN0IGR1bW15PW5ldyBTcGxheVRyZWUuTm9kZShudWxsLG51bGwpO2xldCBsZWZ0PWR1bW15O2xldCByaWdodD1kdW1teTtsZXQgY3VycmVudD10aGlzLnJvb3RfO3doaWxlKHRydWUpe2lmKGtleTxjdXJyZW50LmtleSl7aWYoIWN1cnJlbnQubGVmdCl7YnJlYWs7fQotaWYoa2V5PGN1cnJlbnQubGVmdC5rZXkpe2NvbnN0IHRtcD1jdXJyZW50LmxlZnQ7Y3VycmVudC5sZWZ0PXRtcC5yaWdodDt0bXAucmlnaHQ9Y3VycmVudDtjdXJyZW50PXRtcDtpZighY3VycmVudC5sZWZ0KXticmVhazt9fQotcmlnaHQubGVmdD1jdXJyZW50O3JpZ2h0PWN1cnJlbnQ7Y3VycmVudD1jdXJyZW50LmxlZnQ7fWVsc2UgaWYoa2V5PmN1cnJlbnQua2V5KXtpZighY3VycmVudC5yaWdodCl7YnJlYWs7fQotaWYoa2V5PmN1cnJlbnQucmlnaHQua2V5KXtjb25zdCB0bXA9Y3VycmVudC5yaWdodDtjdXJyZW50LnJpZ2h0PXRtcC5sZWZ0O3RtcC5sZWZ0PWN1cnJlbnQ7Y3VycmVudD10bXA7aWYoIWN1cnJlbnQucmlnaHQpe2JyZWFrO319Ci1sZWZ0LnJpZ2h0PWN1cnJlbnQ7bGVmdD1jdXJyZW50O2N1cnJlbnQ9Y3VycmVudC5yaWdodDt9ZWxzZXticmVhazt9fQotbGVmdC5yaWdodD1jdXJyZW50LmxlZnQ7cmlnaHQubGVmdD1jdXJyZW50LnJpZ2h0O2N1cnJlbnQubGVmdD1kdW1teS5yaWdodDtjdXJyZW50LnJpZ2h0PWR1bW15LmxlZnQ7dGhpcy5yb290Xz1jdXJyZW50O307U3BsYXlUcmVlLnByb3RvdHlwZS50cmF2ZXJzZV89ZnVuY3Rpb24oZil7Y29uc3Qgbm9kZXNUb1Zpc2l0PVt0aGlzLnJvb3RfXTt3aGlsZShub2Rlc1RvVmlzaXQubGVuZ3RoPjApe2NvbnN0IG5vZGU9bm9kZXNUb1Zpc2l0LnNoaWZ0KCk7aWYobm9kZT09PW51bGwpY29udGludWU7Zihub2RlKTtub2Rlc1RvVmlzaXQucHVzaChub2RlLmxlZnQpO25vZGVzVG9WaXNpdC5wdXNoKG5vZGUucmlnaHQpO319O1NwbGF5VHJlZS5Ob2RlPWZ1bmN0aW9uKGtleSx2YWx1ZSl7dGhpcy5rZXk9a2V5O3RoaXMudmFsdWU9dmFsdWU7fTtTcGxheVRyZWUuTm9kZS5wcm90b3R5cGUubGVmdD1udWxsO1NwbGF5VHJlZS5Ob2RlLnByb3RvdHlwZS5yaWdodD1udWxsO3JldHVybntTcGxheVRyZWUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIudjgnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQ29kZU1hcCgpe3RoaXMuZHluYW1pY3NfPW5ldyB0ci5lLmltcG9ydGVyLnY4LlNwbGF5VHJlZSgpO3RoaXMuZHluYW1pY3NOYW1lR2VuXz1uZXcgdHIuZS5pbXBvcnRlci52OC5Db2RlTWFwLk5hbWVHZW5lcmF0b3IoKTt0aGlzLnN0YXRpY3NfPW5ldyB0ci5lLmltcG9ydGVyLnY4LlNwbGF5VHJlZSgpO3RoaXMubGlicmFyaWVzXz1uZXcgdHIuZS5pbXBvcnRlci52OC5TcGxheVRyZWUoKTt0aGlzLnBhZ2VzXz1bXTt9Ci1Db2RlTWFwLlBBR0VfQUxJR05NRU5UPTEyO0NvZGVNYXAuUEFHRV9TSVpFPTE8PENvZGVNYXAuUEFHRV9BTElHTk1FTlQ7Q29kZU1hcC5wcm90b3R5cGUuYWRkQ29kZT1mdW5jdGlvbihzdGFydCxjb2RlRW50cnkpe3RoaXMuZGVsZXRlQWxsQ292ZXJlZE5vZGVzXyh0aGlzLmR5bmFtaWNzXyxzdGFydCxzdGFydCtjb2RlRW50cnkuc2l6ZSk7dGhpcy5keW5hbWljc18uaW5zZXJ0KHN0YXJ0LGNvZGVFbnRyeSk7fTtDb2RlTWFwLnByb3RvdHlwZS5tb3ZlQ29kZT1mdW5jdGlvbihmcm9tLHRvKXtjb25zdCByZW1vdmVkTm9kZT10aGlzLmR5bmFtaWNzXy5yZW1vdmUoZnJvbSk7dGhpcy5kZWxldGVBbGxDb3ZlcmVkTm9kZXNfKHRoaXMuZHluYW1pY3NfLHRvLHRvK3JlbW92ZWROb2RlLnZhbHVlLnNpemUpO3RoaXMuZHluYW1pY3NfLmluc2VydCh0byxyZW1vdmVkTm9kZS52YWx1ZSk7fTtDb2RlTWFwLnByb3RvdHlwZS5kZWxldGVDb2RlPWZ1bmN0aW9uKHN0YXJ0KXtjb25zdCByZW1vdmVkTm9kZT10aGlzLmR5bmFtaWNzXy5yZW1vdmUoc3RhcnQpO307Q29kZU1hcC5wcm90b3R5cGUuYWRkTGlicmFyeT1mdW5jdGlvbihzdGFydCxjb2RlRW50cnkpe3RoaXMubWFya1BhZ2VzXyhzdGFydCxzdGFydCtjb2RlRW50cnkuc2l6ZSk7dGhpcy5saWJyYXJpZXNfLmluc2VydChzdGFydCxjb2RlRW50cnkpO307Q29kZU1hcC5wcm90b3R5cGUuYWRkU3RhdGljQ29kZT1mdW5jdGlvbihzdGFydCxjb2RlRW50cnkpe3RoaXMuc3RhdGljc18uaW5zZXJ0KHN0YXJ0LGNvZGVFbnRyeSk7fTtDb2RlTWFwLnByb3RvdHlwZS5tYXJrUGFnZXNfPWZ1bmN0aW9uKHN0YXJ0LGVuZCl7Zm9yKGxldCBhZGRyPXN0YXJ0O2FkZHI8PWVuZDthZGRyKz1Db2RlTWFwLlBBR0VfU0laRSl7dGhpcy5wYWdlc19bYWRkcj4+PkNvZGVNYXAuUEFHRV9BTElHTk1FTlRdPTE7fX07Q29kZU1hcC5wcm90b3R5cGUuZGVsZXRlQWxsQ292ZXJlZE5vZGVzXz1mdW5jdGlvbih0cmVlLHN0YXJ0LGVuZCl7Y29uc3QgdG9EZWxldGU9W107bGV0IGFkZHI9ZW5kLTE7d2hpbGUoYWRkcj49c3RhcnQpe2NvbnN0IG5vZGU9dHJlZS5maW5kR3JlYXRlc3RMZXNzVGhhbihhZGRyKTtpZighbm9kZSlicmVhaztjb25zdCBzdGFydDI9bm9kZS5rZXk7Y29uc3QgZW5kMj1zdGFydDIrbm9kZS52YWx1ZS5zaXplO2lmKHN0YXJ0MjxlbmQmJnN0YXJ0PGVuZDIpdG9EZWxldGUucHVzaChzdGFydDIpO2FkZHI9c3RhcnQyLTE7fQotZm9yKGxldCBpPTAsbD10b0RlbGV0ZS5sZW5ndGg7aTxsOysraSl0cmVlLnJlbW92ZSh0b0RlbGV0ZVtpXSk7fTtDb2RlTWFwLnByb3RvdHlwZS5pc0FkZHJlc3NCZWxvbmdzVG9fPWZ1bmN0aW9uKGFkZHIsbm9kZSl7cmV0dXJuIGFkZHI+PW5vZGUua2V5JiZhZGRyPChub2RlLmtleStub2RlLnZhbHVlLnNpemUpO307Q29kZU1hcC5wcm90b3R5cGUuZmluZEluVHJlZV89ZnVuY3Rpb24odHJlZSxhZGRyKXtjb25zdCBub2RlPXRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oYWRkcik7cmV0dXJuIG5vZGUmJnRoaXMuaXNBZGRyZXNzQmVsb25nc1RvXyhhZGRyLG5vZGUpP25vZGUudmFsdWU6bnVsbDt9O0NvZGVNYXAucHJvdG90eXBlLmZpbmRFbnRyeUluTGlicmFyaWVzPWZ1bmN0aW9uKGFkZHIpe2NvbnN0IHBhZ2VBZGRyPWFkZHI+Pj5Db2RlTWFwLlBBR0VfQUxJR05NRU5UO2lmKHBhZ2VBZGRyIGluIHRoaXMucGFnZXNfKXtyZXR1cm4gdGhpcy5maW5kSW5UcmVlXyh0aGlzLmxpYnJhcmllc18sYWRkcik7fQotcmV0dXJuIHVuZGVmaW5lZDt9O0NvZGVNYXAucHJvdG90eXBlLmZpbmRFbnRyeT1mdW5jdGlvbihhZGRyKXtjb25zdCBwYWdlQWRkcj1hZGRyPj4+Q29kZU1hcC5QQUdFX0FMSUdOTUVOVDtpZihwYWdlQWRkciBpbiB0aGlzLnBhZ2VzXyl7cmV0dXJuIHRoaXMuZmluZEluVHJlZV8odGhpcy5zdGF0aWNzXyxhZGRyKXx8dGhpcy5maW5kSW5UcmVlXyh0aGlzLmxpYnJhcmllc18sYWRkcik7fQotY29uc3QgbWluPXRoaXMuZHluYW1pY3NfLmZpbmRNaW4oKTtjb25zdCBtYXg9dGhpcy5keW5hbWljc18uZmluZE1heCgpO2lmKG1heCE9PW51bGwmJmFkZHI8KG1heC5rZXkrbWF4LnZhbHVlLnNpemUpJiZhZGRyPj1taW4ua2V5KXtjb25zdCBkeW5hRW50cnk9dGhpcy5maW5kSW5UcmVlXyh0aGlzLmR5bmFtaWNzXyxhZGRyKTtpZihkeW5hRW50cnk9PT1udWxsKXJldHVybiBudWxsO2lmKCFkeW5hRW50cnkubmFtZVVwZGF0ZWRfKXtkeW5hRW50cnkubmFtZT10aGlzLmR5bmFtaWNzTmFtZUdlbl8uZ2V0TmFtZShkeW5hRW50cnkubmFtZSk7ZHluYUVudHJ5Lm5hbWVVcGRhdGVkXz10cnVlO30KLXJldHVybiBkeW5hRW50cnk7fQotcmV0dXJuIG51bGw7fTtDb2RlTWFwLnByb3RvdHlwZS5maW5kRHluYW1pY0VudHJ5QnlTdGFydEFkZHJlc3M9ZnVuY3Rpb24oYWRkcil7Y29uc3Qgbm9kZT10aGlzLmR5bmFtaWNzXy5maW5kKGFkZHIpO3JldHVybiBub2RlP25vZGUudmFsdWU6bnVsbDt9O0NvZGVNYXAucHJvdG90eXBlLmdldEFsbER5bmFtaWNFbnRyaWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHluYW1pY3NfLmV4cG9ydFZhbHVlcygpO307Q29kZU1hcC5wcm90b3R5cGUuZ2V0QWxsRHluYW1pY0VudHJpZXNXaXRoQWRkcmVzc2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHluYW1pY3NfLmV4cG9ydEtleXNBbmRWYWx1ZXMoKTt9O0NvZGVNYXAucHJvdG90eXBlLmdldEFsbFN0YXRpY0VudHJpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0aWNzXy5leHBvcnRWYWx1ZXMoKTt9O0NvZGVNYXAucHJvdG90eXBlLmdldEFsbExpYnJhcmllc0VudHJpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saWJyYXJpZXNfLmV4cG9ydFZhbHVlcygpO307Q29kZU1hcC5Db2RlU3RhdGU9e0NPTVBJTEVEOjAsT1BUSU1JWkFCTEU6MSxPUFRJTUlaRUQ6Mn07Q29kZU1hcC5Db2RlRW50cnk9ZnVuY3Rpb24oc2l6ZSxvcHRfbmFtZSxvcHRfdHlwZSl7dGhpcy5pZD10ci5iLkdVSUQuYWxsb2NhdGVTaW1wbGUoKTt0aGlzLnNpemU9c2l6ZTt0aGlzLm5hbWVfPW9wdF9uYW1lfHwnJzt0aGlzLnR5cGU9b3B0X3R5cGV8fCcnO3RoaXMubmFtZVVwZGF0ZWRfPWZhbHNlO307Q29kZU1hcC5Db2RlRW50cnkucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZSxnZXQgbmFtZSgpe3JldHVybiB0aGlzLm5hbWVfO30sc2V0IG5hbWUodmFsdWUpe3RoaXMubmFtZV89dmFsdWU7fSx0b1N0cmluZygpe3RoaXMubmFtZV8rJzogJyt0aGlzLnNpemUudG9TdHJpbmcoMTYpO319O0NvZGVNYXAuQ29kZUVudHJ5LlRZUEU9e1NIQVJFRF9MSUI6J1NIQVJFRF9MSUInLENQUDonQ1BQJ307Q29kZU1hcC5EeW5hbWljRnVuY0NvZGVFbnRyeT1mdW5jdGlvbihzaXplLHR5cGUsZnVuYyxzdGF0ZSl7Q29kZU1hcC5Db2RlRW50cnkuY2FsbCh0aGlzLHNpemUsJycsdHlwZSk7dGhpcy5mdW5jPWZ1bmM7dGhpcy5zdGF0ZT1zdGF0ZTt9O0NvZGVNYXAuRHluYW1pY0Z1bmNDb2RlRW50cnkuU1RBVEVfUFJFRklYPVsnJywnficsJyonXTtDb2RlTWFwLkR5bmFtaWNGdW5jQ29kZUVudHJ5LnByb3RvdHlwZT17X19wcm90b19fOkNvZGVNYXAuQ29kZUVudHJ5LnByb3RvdHlwZSxnZXQgbmFtZSgpe3JldHVybiBDb2RlTWFwLkR5bmFtaWNGdW5jQ29kZUVudHJ5LlNUQVRFX1BSRUZJWFt0aGlzLnN0YXRlXSsKLXRoaXMuZnVuYy5uYW1lO30sc2V0IG5hbWUodmFsdWUpe3RoaXMubmFtZV89dmFsdWU7fSxnZXRSYXdOYW1lKCl7cmV0dXJuIHRoaXMuZnVuYy5nZXROYW1lKCk7fSxpc0pTRnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9LHRvU3RyaW5nKCl7cmV0dXJuIHRoaXMudHlwZSsnOiAnK3RoaXMubmFtZSsnOiAnK3RoaXMuc2l6ZS50b1N0cmluZygxNik7fX07Q29kZU1hcC5GdW5jdGlvbkVudHJ5PWZ1bmN0aW9uKG5hbWUpe0NvZGVNYXAuQ29kZUVudHJ5LmNhbGwodGhpcywwLG5hbWUpO307Q29kZU1hcC5GdW5jdGlvbkVudHJ5LnByb3RvdHlwZT17X19wcm90b19fOkNvZGVNYXAuQ29kZUVudHJ5LnByb3RvdHlwZSxnZXQgbmFtZSgpe2xldCBuYW1lPXRoaXMubmFtZV87aWYobmFtZS5sZW5ndGg9PT0wKXtuYW1lPSc8YW5vbnltb3VzPic7fWVsc2UgaWYobmFtZS5jaGFyQXQoMCk9PT0nICcpe25hbWU9Jzxhbm9ueW1vdXM+JytuYW1lO30KLXJldHVybiBuYW1lO30sc2V0IG5hbWUodmFsdWUpe3RoaXMubmFtZV89dmFsdWU7fX07Q29kZU1hcC5OYW1lR2VuZXJhdG9yPWZ1bmN0aW9uKCl7dGhpcy5rbm93bk5hbWVzXz17fTt9O0NvZGVNYXAuTmFtZUdlbmVyYXRvci5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbihuYW1lKXtpZighKG5hbWUgaW4gdGhpcy5rbm93bk5hbWVzXykpe3RoaXMua25vd25OYW1lc19bbmFtZV09MDtyZXR1cm4gbmFtZTt9Ci1jb25zdCBjb3VudD0rK3RoaXMua25vd25OYW1lc19bbmFtZV07cmV0dXJuIG5hbWUrJyB7Jytjb3VudCsnfSc7fTtyZXR1cm57Q29kZU1hcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci52OCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBDc3ZQYXJzZXIoKXt9Ci1Dc3ZQYXJzZXIuQ1NWX0ZJRUxEX1JFXz0vXiIoKD86W14iXXwiIikqKSJ8KFteLF0qKS87Q3N2UGFyc2VyLkRPVUJMRV9RVU9URV9SRV89LyIiL2c7Q3N2UGFyc2VyLnByb3RvdHlwZS5wYXJzZUxpbmU9ZnVuY3Rpb24obGluZSl7Y29uc3QgZmllbGRSZT1Dc3ZQYXJzZXIuQ1NWX0ZJRUxEX1JFXztjb25zdCBkb3VibGVRdW90ZVJlPUNzdlBhcnNlci5ET1VCTEVfUVVPVEVfUkVfO2xldCBwb3M9MDtjb25zdCBlbmRQb3M9bGluZS5sZW5ndGg7Y29uc3QgZmllbGRzPVtdO2lmKGVuZFBvcz4wKXtkb3tjb25zdCBmaWVsZE1hdGNoPWZpZWxkUmUuZXhlYyhsaW5lLnN1YnN0cihwb3MpKTtpZih0eXBlb2YgZmllbGRNYXRjaFsxXT09PSdzdHJpbmcnKXtjb25zdCBmaWVsZD1maWVsZE1hdGNoWzFdO3Bvcys9ZmllbGQubGVuZ3RoKzM7ZmllbGRzLnB1c2goZmllbGQucmVwbGFjZShkb3VibGVRdW90ZVJlLCciJykpO31lbHNle2NvbnN0IGZpZWxkPWZpZWxkTWF0Y2hbMl07cG9zKz1maWVsZC5sZW5ndGgrMTtmaWVsZHMucHVzaChmaWVsZCk7fX13aGlsZShwb3M8PWVuZFBvcyk7fQotcmV0dXJuIGZpZWxkczt9O2Z1bmN0aW9uIExvZ1JlYWRlcihkaXNwYXRjaFRhYmxlKXt0aGlzLmRpc3BhdGNoVGFibGVfPWRpc3BhdGNoVGFibGU7dGhpcy5saW5lTnVtXz0wO3RoaXMuY3N2UGFyc2VyXz1uZXcgQ3N2UGFyc2VyKCk7fQotTG9nUmVhZGVyLnByb3RvdHlwZS5wcmludEVycm9yPWZ1bmN0aW9uKHN0cil7fTtMb2dSZWFkZXIucHJvdG90eXBlLnByb2Nlc3NMb2dDaHVuaz1mdW5jdGlvbihjaHVuayl7dGhpcy5wcm9jZXNzTG9nXyhjaHVuay5zcGxpdCgnXG4nKSk7fTtMb2dSZWFkZXIucHJvdG90eXBlLnByb2Nlc3NMb2dMaW5lPWZ1bmN0aW9uKGxpbmUpe3RoaXMucHJvY2Vzc0xvZ18oW2xpbmVdKTt9O0xvZ1JlYWRlci5wcm90b3R5cGUucHJvY2Vzc1N0YWNrPWZ1bmN0aW9uKHBjLGZ1bmMsc3RhY2spe2NvbnN0IGZ1bGxTdGFjaz1mdW5jP1twYyxmdW5jXTpbcGNdO2xldCBwcmV2RnJhbWU9cGM7Zm9yKGxldCBpPTAsbj1zdGFjay5sZW5ndGg7aTxuOysraSl7Y29uc3QgZnJhbWU9c3RhY2tbaV07Y29uc3QgZmlyc3RDaGFyPWZyYW1lLmNoYXJBdCgwKTtpZihmaXJzdENoYXI9PT0nKyd8fGZpcnN0Q2hhcj09PSctJyl7cHJldkZyYW1lKz1wYXJzZUludChmcmFtZSwxNik7ZnVsbFN0YWNrLnB1c2gocHJldkZyYW1lKTt9ZWxzZSBpZihmaXJzdENoYXIhPT0nbycpe2Z1bGxTdGFjay5wdXNoKHBhcnNlSW50KGZyYW1lLDE2KSk7fX0KLXJldHVybiBmdWxsU3RhY2s7fTtMb2dSZWFkZXIucHJvdG90eXBlLnNraXBEaXNwYXRjaD1mdW5jdGlvbihkaXNwYXRjaCl7cmV0dXJuIGZhbHNlO307TG9nUmVhZGVyLnByb3RvdHlwZS5kaXNwYXRjaExvZ1Jvd189ZnVuY3Rpb24oZmllbGRzKXtjb25zdCBjb21tYW5kPWZpZWxkc1swXTtpZighKGNvbW1hbmQgaW4gdGhpcy5kaXNwYXRjaFRhYmxlXykpcmV0dXJuO2NvbnN0IGRpc3BhdGNoPXRoaXMuZGlzcGF0Y2hUYWJsZV9bY29tbWFuZF07aWYoZGlzcGF0Y2g9PT1udWxsfHx0aGlzLnNraXBEaXNwYXRjaChkaXNwYXRjaCkpe3JldHVybjt9Ci1jb25zdCBwYXJzZWRGaWVsZHM9W107Zm9yKGxldCBpPTA7aTxkaXNwYXRjaC5wYXJzZXJzLmxlbmd0aDsrK2kpe2NvbnN0IHBhcnNlcj1kaXNwYXRjaC5wYXJzZXJzW2ldO2lmKHBhcnNlcj09PW51bGwpe3BhcnNlZEZpZWxkcy5wdXNoKGZpZWxkc1sxK2ldKTt9ZWxzZSBpZih0eXBlb2YgcGFyc2VyPT09J2Z1bmN0aW9uJyl7cGFyc2VkRmllbGRzLnB1c2gocGFyc2VyKGZpZWxkc1sxK2ldKSk7fWVsc2V7cGFyc2VkRmllbGRzLnB1c2goZmllbGRzLnNsaWNlKDEraSkpO2JyZWFrO319Ci1kaXNwYXRjaC5wcm9jZXNzb3IuYXBwbHkodGhpcyxwYXJzZWRGaWVsZHMpO307TG9nUmVhZGVyLnByb3RvdHlwZS5wcm9jZXNzTG9nXz1mdW5jdGlvbihsaW5lcyl7Zm9yKGxldCBpPTAsbj1saW5lcy5sZW5ndGg7aTxuOysraSwrK3RoaXMubGluZU51bV8pe2NvbnN0IGxpbmU9bGluZXNbaV07aWYoIWxpbmUpe2NvbnRpbnVlO30KLXRyeXtjb25zdCBmaWVsZHM9dGhpcy5jc3ZQYXJzZXJfLnBhcnNlTGluZShsaW5lKTt0aGlzLmRpc3BhdGNoTG9nUm93XyhmaWVsZHMpO31jYXRjaChlKXt0aGlzLnByaW50RXJyb3IoJ2xpbmUgJysodGhpcy5saW5lTnVtXysxKSsnOiAnKwotKGUubWVzc2FnZXx8ZSkpO319fTtyZXR1cm57TG9nUmVhZGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBQcm9maWxlTm9kZShpZCx0aXRsZSxwYXJlbnROb2RlKXt0aGlzLmlkXz1pZDt0aGlzLnRpdGxlXz10aXRsZTt0aGlzLnBhcmVudE5vZGVfPXBhcmVudE5vZGU7dGhpcy5jb2xvcklkXz0tMTt0aGlzLnVzZXJGcmllbmRseVN0YWNrXz1bXTt9Ci1Qcm9maWxlTm9kZS5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3QucHJvdG90eXBlLGdldCB0aXRsZSgpe3JldHVybiB0aGlzLnRpdGxlXzt9LGdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZV87fSxzZXQgcGFyZW50Tm9kZSh2YWx1ZSl7dGhpcy5wYXJlbnROb2RlXz12YWx1ZTt9LGdldCBpZCgpe3JldHVybiB0aGlzLmlkXzt9LGdldCBjb2xvcklkKCl7cmV0dXJuIHRoaXMuY29sb3JJZF87fSxzZXQgY29sb3JJZCh2YWx1ZSl7dGhpcy5jb2xvcklkXz12YWx1ZTt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuIHRoaXMudGl0bGVfO30sZ2V0IHVzZXJGcmllbmRseVN0YWNrKCl7aWYodGhpcy51c2VyRnJpZW5kbHlTdGFja18ubGVuZ3RoPT09MCl7dGhpcy51c2VyRnJpZW5kbHlTdGFja189W3RoaXMudXNlckZyaWVuZGx5TmFtZV07aWYodGhpcy5wYXJlbnROb2RlXyE9PXVuZGVmaW5lZCl7dGhpcy51c2VyRnJpZW5kbHlTdGFja189dGhpcy51c2VyRnJpZW5kbHlTdGFja18uY29uY2F0KHRoaXMucGFyZW50Tm9kZV8udXNlckZyaWVuZGx5U3RhY2spO319Ci1yZXR1cm4gdGhpcy51c2VyRnJpZW5kbHlTdGFja187fSxnZXQgc2FtcGxlVGl0bGUoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZC4nKTt9fTt0ci5tb2RlbC5FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKFByb2ZpbGVOb2RlLHtuYW1lOidOb2RlJyxwbHVyYWxOYW1lOidOb2Rlcyd9KTtyZXR1cm57UHJvZmlsZU5vZGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUudjgnLGZ1bmN0aW9uKCl7Y29uc3QgUHJvZmlsZU5vZGU9dHIubW9kZWwuUHJvZmlsZU5vZGU7ZnVuY3Rpb24gVjhDcHVQcm9maWxlTm9kZShpZCxjYWxsRnJhbWUscGFyZW50Tm9kZSl7UHJvZmlsZU5vZGUuY2FsbCh0aGlzLGlkLGNhbGxGcmFtZS5mdW5jdGlvbk5hbWUscGFyZW50Tm9kZSk7dGhpcy5jYWxsRnJhbWVfPXRyLmIuZGVlcENvcHkoY2FsbEZyYW1lKTt0aGlzLmRlb3B0UmVhc29uXz0nJzt0aGlzLmNvbG9ySWRfPXRyLmIuQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGNhbGxGcmFtZS5mdW5jdGlvbk5hbWUpO30KLVY4Q3B1UHJvZmlsZU5vZGUucHJvdG90eXBlPXtfX3Byb3RvX186UHJvZmlsZU5vZGUucHJvdG90eXBlLGdldCBmdW5jdGlvbk5hbWUoKXtyZXR1cm4gdGhpcy5jYWxsRnJhbWVfLmZ1bmN0aW9uTmFtZTt9LGdldCBzY3JpcHRJZCgpe3JldHVybiB0aGlzLmNhbGxGcmFtZV8uc2NyaXB0SWQ7fSxnZXQgdXJsKCl7aWYoIXRoaXMuY2FsbEZyYW1lXy51cmwpe3JldHVybid1bmtub3duJzt9Ci1sZXQgdXJsPXRoaXMuY2FsbEZyYW1lXy51cmw7aWYodGhpcy5jYWxsRnJhbWVfLmxpbmVOdW1iZXI9PT11bmRlZmluZWQpe3JldHVybiB1cmw7fQotdXJsPXVybCsnOicrdGhpcy5jYWxsRnJhbWVfLmxpbmVOdW1iZXI7aWYodGhpcy5jYWxsRnJhbWVfLmNvbHVtbk51bWJlcj09PXVuZGVmaW5lZCl7cmV0dXJuIHVybDt9Ci11cmw9dXJsKyc6Jyt0aGlzLmNhbGxGcmFtZV8uY29sdW1uTnVtYmVyO3JldHVybiB1cmw7fSxnZXQgZGVvcHRSZWFzb24oKXtyZXR1cm4gdGhpcy5kZW9wdFJlYXNvbl87fSxzZXQgZGVvcHRSZWFzb24odmFsdWUpe3RoaXMuZGVvcHRSZWFzb25fPXZhbHVlO30sZ2V0IHVzZXJGcmllbmRseU5hbWUoKXtjb25zdCBuYW1lPXRoaXMuZnVuY3Rpb25OYW1lKycgdXJsOiAnK3RoaXMudXJsO3JldHVybiF0aGlzLmRlb3B0UmVhc29uXz9uYW1lOm5hbWUrJyBEZW9wdGltaXplZCByZWFzb246ICcrdGhpcy5kZW9wdFJlYXNvbl87fSxnZXQgc2FtcGxlVGl0bGUoKXtyZXR1cm4nVjggU2FtcGxlJzt9fTtWOENwdVByb2ZpbGVOb2RlLmNvbnN0cnVjdEZyb21PYmplY3Q9ZnVuY3Rpb24ocHJvZmlsZVRyZWUsbm9kZSl7Y29uc3Qgbm9kZUlkPW5vZGUuaWQ7aWYobm9kZUlkPT09MSl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1jb25zdCBwYXJlbnROb2RlPXByb2ZpbGVUcmVlLmdldE5vZGUobm9kZS5wYXJlbnQpO2NvbnN0IHByb2ZpbGVOb2RlPW5ldyBWOENwdVByb2ZpbGVOb2RlKG5vZGVJZCxub2RlLmNhbGxGcmFtZSxwYXJlbnROb2RlKTtpZihub2RlLmRlb3B0UmVhc29uIT09dW5kZWZpbmVkKXtwcm9maWxlTm9kZS5kZW9wdFJlYXNvbj1ub2RlLmRlb3B0UmVhc29uO30KLXJldHVybiBwcm9maWxlTm9kZTt9O1Byb2ZpbGVOb2RlLnN1YlR5cGVzLnJlZ2lzdGVyKFY4Q3B1UHJvZmlsZU5vZGUse3R5cGVOYW1lOidjcHVQcm9maWxlJyxuYW1lOid2OCBjcHUgcHJvZmlsZSBub2RlJyxwbHVyYWxOYW1lOid2OCBjcHUgcHJvZmlsZSBub2Rlcyd9KTtQcm9maWxlTm9kZS5zdWJUeXBlcy5yZWdpc3RlcihWOENwdVByb2ZpbGVOb2RlLHt0eXBlTmFtZTonbGVnYWN5U2FtcGxlJyxuYW1lOid2OCBjcHUgcHJvZmlsZSBub2RlJyxwbHVyYWxOYW1lOid2OCBjcHUgcHJvZmlsZSBub2Rlcyd9KTtyZXR1cm57UHJvZmlsZU5vZGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFByb2ZpbGVUcmVlKCl7dGhpcy5zdGFydFRpbWVfPXVuZGVmaW5lZDt0aGlzLmVuZFRpbWVfPXVuZGVmaW5lZDt0aGlzLnRyZWVfPW5ldyBNYXAoKTt0aGlzLnBpZF89LTE7dGhpcy50aWRfPS0xO30KLVByb2ZpbGVUcmVlLnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdC5wcm90b3R5cGUsZ2V0IHBpZCgpe3JldHVybiB0aGlzLnBpZF87fSxzZXQgcGlkKHZhbHVlKXt0aGlzLnBpZF89dmFsdWU7fSxnZXQgdGlkKCl7cmV0dXJuIHRoaXMudGlkXzt9LHNldCB0aWQodmFsdWUpe3RoaXMudGlkXz12YWx1ZTt9LGdldCB0cmVlKCl7cmV0dXJuIHRoaXMudHJlZV87fSxnZXQgc3RhcnRUaW1lKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lXzt9LHNldCBzdGFydFRpbWUodmFsdWUpe3RoaXMuc3RhcnRUaW1lXz12YWx1ZTt0aGlzLmVuZFRpbWVfPXZhbHVlO30sZ2V0IGVuZFRpbWUoKXtyZXR1cm4gdGhpcy5lbmRUaW1lXzt9LHNldCBlbmRUaW1lKHZhbHVlKXt0aGlzLmVuZFRpbWVfPXZhbHVlO30sYWRkKG5vZGUpe2lmKHRoaXMudHJlZV8uaGFzKG5vZGUuaWQpKXt0aHJvdyBuZXcgRXJyb3IoJ0NvbmZsaWN0IGlkIGluIHRoZSBwcm9maWxlIHRyZWUuJyk7fQotdGhpcy50cmVlXy5zZXQobm9kZS5pZCxub2RlKTtyZXR1cm4gbm9kZTt9LGdldE5vZGUobm9kZUlkKXtyZXR1cm4gdGhpcy50cmVlXy5nZXQobm9kZUlkKTt9fTtyZXR1cm57UHJvZmlsZVRyZWUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIudjgnLGZ1bmN0aW9uKCl7Y29uc3QgQ29kZUVudHJ5PXRyLmUuaW1wb3J0ZXIudjguQ29kZU1hcC5Db2RlRW50cnk7Y29uc3QgQ29kZU1hcD10ci5lLmltcG9ydGVyLnY4LkNvZGVNYXA7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBEeW5hbWljRnVuY0NvZGVFbnRyeT10ci5lLmltcG9ydGVyLnY4LkNvZGVNYXAuRHluYW1pY0Z1bmNDb2RlRW50cnk7Y29uc3QgRnVuY3Rpb25FbnRyeT10ci5lLmltcG9ydGVyLnY4LkNvZGVNYXAuRnVuY3Rpb25FbnRyeTtjb25zdCBQcm9maWxlTm9kZVR5cGU9dHIubW9kZWwuUHJvZmlsZU5vZGUuc3ViVHlwZXMuZ2V0Q29uc3RydWN0b3IodW5kZWZpbmVkLCdsZWdhY3lTYW1wbGUnKTtmdW5jdGlvbiBWOExvZ0ltcG9ydGVyKG1vZGVsLGV2ZW50RGF0YSl7dGhpcy5pbXBvcnRQcmlvcml0eT0zO3RoaXMubW9kZWxfPW1vZGVsO3RoaXMubG9nRGF0YV89ZXZlbnREYXRhO3RoaXMuY29kZV9tYXBfPW5ldyBDb2RlTWFwKCk7dGhpcy52OF90aW1lcl90aHJlYWRfPXVuZGVmaW5lZDt0aGlzLnY4X3RocmVhZF89dW5kZWZpbmVkO3RoaXMucHJvZmlsZVRyZWVfPW5ldyB0ci5tb2RlbC5Qcm9maWxlVHJlZSgpO3RoaXMucHJvZmlsZVRyZWVfLmFkZChuZXcgUHJvZmlsZU5vZGVUeXBlKC0xLHt1cmw6JycsZnVuY3Rpb25OYW1lOid1bmtub3duJ30pKTt0aGlzLnY4X3N0YWNrX3RpbWVsaW5lXz1bXTt9Ci1jb25zdCBrVjhCaW5hcnlTdWZmaXhlcz1bJy9kOCcsJy9saWJ2OC5zbyddO2NvbnN0IFRpbWVyRXZlbnREZWZhdWx0QXJncz17J1Y4LkV4ZWN1dGUnOntwYXVzZTpmYWxzZSxub19leGVjdXRpb246ZmFsc2V9LCdWOC5FeHRlcm5hbCc6e3BhdXNlOmZhbHNlLG5vX2V4ZWN1dGlvbjp0cnVlfSwnVjguQ29tcGlsZUZ1bGxDb2RlJzp7cGF1c2U6dHJ1ZSxub19leGVjdXRpb246dHJ1ZX0sJ1Y4LlJlY29tcGlsZVN5bmNocm9ub3VzJzp7cGF1c2U6dHJ1ZSxub19leGVjdXRpb246dHJ1ZX0sJ1Y4LlJlY29tcGlsZVBhcmFsbGVsJzp7cGF1c2U6ZmFsc2Usbm9fZXhlY3V0aW9uOmZhbHNlfSwnVjguQ29tcGlsZUV2YWwnOntwYXVzZTp0cnVlLG5vX2V4ZWN1dGlvbjp0cnVlfSwnVjguUGFyc2UnOntwYXVzZTp0cnVlLG5vX2V4ZWN1dGlvbjp0cnVlfSwnVjguUHJlUGFyc2UnOntwYXVzZTp0cnVlLG5vX2V4ZWN1dGlvbjp0cnVlfSwnVjguUGFyc2VMYXp5Jzp7cGF1c2U6dHJ1ZSxub19leGVjdXRpb246dHJ1ZX0sJ1Y4LkdDU2NhdmVuZ2VyJzp7cGF1c2U6dHJ1ZSxub19leGVjdXRpb246dHJ1ZX0sJ1Y4LkdDQ29tcGFjdG9yJzp7cGF1c2U6dHJ1ZSxub19leGVjdXRpb246dHJ1ZX0sJ1Y4LkdDQ29udGV4dCc6e3BhdXNlOnRydWUsbm9fZXhlY3V0aW9uOnRydWV9fTtWOExvZ0ltcG9ydGVyLmNhbkltcG9ydD1mdW5jdGlvbihldmVudERhdGEpe2lmKHR5cGVvZihldmVudERhdGEpIT09J3N0cmluZycmJiEoZXZlbnREYXRhIGluc3RhbmNlb2YgU3RyaW5nKSl7cmV0dXJuIGZhbHNlO30KLXJldHVybiBldmVudERhdGEuc3Vic3RyaW5nKDAsMTEpPT09J3Y4LXZlcnNpb24sJ3x8ZXZlbnREYXRhLnN1YnN0cmluZygwLDEyKT09PSd0aW1lci1ldmVudCwnfHxldmVudERhdGEuc3Vic3RyaW5nKDAsNSk9PT0ndGljaywnfHxldmVudERhdGEuc3Vic3RyaW5nKDAsMTUpPT09J3NoYXJlZC1saWJyYXJ5LCd8fGV2ZW50RGF0YS5zdWJzdHJpbmcoMCw5KT09PSdwcm9maWxlciwnfHxldmVudERhdGEuc3Vic3RyaW5nKDAsMTQpPT09J2NvZGUtY3JlYXRpb24sJzt9O1Y4TG9nSW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucHJvdG90eXBlLGdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nVjhMb2dJbXBvcnRlcic7fSxwcm9jZXNzVGltZXJFdmVudF8obmFtZSxzdGFydEluVXMsbGVuZ3RoSW5Vcyl7Y29uc3QgYXJncz1UaW1lckV2ZW50RGVmYXVsdEFyZ3NbbmFtZV07aWYoYXJncz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3Qgc3RhcnRJbk1zPXRyLmIuY29udmVydFVuaXQoc3RhcnRJblVzLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUNSTyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEkpO2NvbnN0IGxlbmd0aEluTXM9dHIuYi5jb252ZXJ0VW5pdChsZW5ndGhJblVzLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUNSTyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEkpO2NvbnN0IGNvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKG5hbWUpO2NvbnN0IHNsaWNlPW5ldyB0ci5tb2RlbC5UaHJlYWRTbGljZSgndjgnLG5hbWUsY29sb3JJZCxzdGFydEluTXMsYXJncyxsZW5ndGhJbk1zKTt0aGlzLnY4X3RpbWVyX3RocmVhZF8uc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO30scHJvY2Vzc1RpbWVyRXZlbnRTdGFydF8obmFtZSxzdGFydEluVXMpe2NvbnN0IGFyZ3M9VGltZXJFdmVudERlZmF1bHRBcmdzW25hbWVdO2lmKGFyZ3M9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IHN0YXJ0SW5Ncz10ci5iLmNvbnZlcnRVbml0KHN0YXJ0SW5Vcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlDUk8sdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk1JTExJKTt0aGlzLnY4X3RpbWVyX3RocmVhZF8uc2xpY2VHcm91cC5iZWdpblNsaWNlKCd2OCcsbmFtZSxzdGFydEluTXMsYXJncyk7fSxwcm9jZXNzVGltZXJFdmVudEVuZF8obmFtZSxlbmRJblVzKXtjb25zdCBlbmRJbk1zPXRyLmIuY29udmVydFVuaXQoZW5kSW5Vcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlDUk8sdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk1JTExJKTt0aGlzLnY4X3RpbWVyX3RocmVhZF8uc2xpY2VHcm91cC5lbmRTbGljZShlbmRJbk1zKTt9LHByb2Nlc3NDb2RlQ3JlYXRlRXZlbnRfKHR5cGUsa2luZCxhZGRyZXNzLHNpemUsbmFtZSxtYXliZUZ1bmMpe2Z1bmN0aW9uIHBhcnNlU3RhdGUocyl7c3dpdGNoKHMpe2Nhc2UnJzpyZXR1cm4gQ29kZU1hcC5Db2RlU3RhdGUuQ09NUElMRUQ7Y2FzZSd+JzpyZXR1cm4gQ29kZU1hcC5Db2RlU3RhdGUuT1BUSU1JWkFCTEU7Y2FzZScqJzpyZXR1cm4gQ29kZU1hcC5Db2RlU3RhdGUuT1BUSU1JWkVEO30KLXRocm93IG5ldyBFcnJvcigndW5rbm93biBjb2RlIHN0YXRlOiAnK3MpO30KLWlmKG1heWJlRnVuYy5sZW5ndGgpe2NvbnN0IGZ1bmNBZGRyPXBhcnNlSW50KG1heWJlRnVuY1swXSk7Y29uc3Qgc3RhdGU9cGFyc2VTdGF0ZShtYXliZUZ1bmNbMV0pO2xldCBmdW5jPXRoaXMuY29kZV9tYXBfLmZpbmREeW5hbWljRW50cnlCeVN0YXJ0QWRkcmVzcyhmdW5jQWRkcik7aWYoIWZ1bmMpe2Z1bmM9bmV3IEZ1bmN0aW9uRW50cnkobmFtZSk7ZnVuYy5raW5kPWtpbmQ7dGhpcy5jb2RlX21hcF8uYWRkQ29kZShmdW5jQWRkcixmdW5jKTt9ZWxzZSBpZihmdW5jLm5hbWUhPT1uYW1lKXtmdW5jLm5hbWU9bmFtZTt9Ci1sZXQgZW50cnk9dGhpcy5jb2RlX21hcF8uZmluZER5bmFtaWNFbnRyeUJ5U3RhcnRBZGRyZXNzKGFkZHJlc3MpO2lmKGVudHJ5KXtpZihlbnRyeS5zaXplPT09c2l6ZSYmZW50cnkuZnVuYz09PWZ1bmMpe2VudHJ5LnN0YXRlPXN0YXRlO319ZWxzZXtlbnRyeT1uZXcgRHluYW1pY0Z1bmNDb2RlRW50cnkoc2l6ZSx0eXBlLGZ1bmMsc3RhdGUpO2VudHJ5LmtpbmQ9a2luZDt0aGlzLmNvZGVfbWFwXy5hZGRDb2RlKGFkZHJlc3MsZW50cnkpO319ZWxzZXtjb25zdCBjb2RlRW50cnk9bmV3IENvZGVFbnRyeShzaXplLG5hbWUpO2NvZGVFbnRyeS5raW5kPWtpbmQ7dGhpcy5jb2RlX21hcF8uYWRkQ29kZShhZGRyZXNzLGNvZGVFbnRyeSk7fX0scHJvY2Vzc0NvZGVNb3ZlRXZlbnRfKGZyb20sdG8pe3RoaXMuY29kZV9tYXBfLm1vdmVDb2RlKGZyb20sdG8pO30scHJvY2Vzc0NvZGVEZWxldGVFdmVudF8oYWRkcmVzcyl7dGhpcy5jb2RlX21hcF8uZGVsZXRlQ29kZShhZGRyZXNzKTt9LHByb2Nlc3NTaGFyZWRMaWJyYXJ5XyhuYW1lLHN0YXJ0LGVuZCl7Y29uc3QgY29kZUVudHJ5PW5ldyBDb2RlRW50cnkoZW5kLXN0YXJ0LG5hbWUsQ29kZUVudHJ5LlRZUEUuU0hBUkVEX0xJQik7Y29kZUVudHJ5LmtpbmQ9LTM7Zm9yKGxldCBpPTA7aTxrVjhCaW5hcnlTdWZmaXhlcy5sZW5ndGg7aSsrKXtjb25zdCBzdWZmaXg9a1Y4QmluYXJ5U3VmZml4ZXNbaV07aWYobmFtZS5pbmRleE9mKHN1ZmZpeCxuYW1lLmxlbmd0aC1zdWZmaXgubGVuZ3RoKT49MCl7Y29kZUVudHJ5LmtpbmQ9LTE7YnJlYWs7fX0KLXRoaXMuY29kZV9tYXBfLmFkZExpYnJhcnkoc3RhcnQsY29kZUVudHJ5KTt9LHByb2Nlc3NDcHBTeW1ib2xfKGFkZHJlc3Msc2l6ZSxuYW1lKXtjb25zdCBjb2RlRW50cnk9bmV3IENvZGVFbnRyeShzaXplLG5hbWUsQ29kZUVudHJ5LlRZUEUuQ1BQKTtjb2RlRW50cnkua2luZD0tMTt0aGlzLmNvZGVfbWFwXy5hZGRTdGF0aWNDb2RlKGFkZHJlc3MsY29kZUVudHJ5KTt9LHByb2Nlc3NUaWNrRXZlbnRfKHBjLHN0YXJ0SW5Vcyxpc0V4dGVybmFsQ2FsbGJhY2ssdG9zT3JFeHRlcm5hbENhbGxiYWNrLHZtc3RhdGUsc3RhY2spe2NvbnN0IHN0YXJ0SW5Ncz10ci5iLmNvbnZlcnRVbml0KHN0YXJ0SW5Vcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlDUk8sdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk1JTExJKTtmdW5jdGlvbiBmaW5kQ2hpbGRXaXRoRW50cnlJRChzdGFja0ZyYW1lLGVudHJ5SUQpe2ZvcihsZXQgaT0wO2k8c3RhY2tGcmFtZS5jaGlsZHJlbi5sZW5ndGg7aSsrKXtpZihzdGFja0ZyYW1lLmNoaWxkcmVuW2ldLmVudHJ5SUQ9PT1lbnRyeUlEKXtyZXR1cm4gc3RhY2tGcmFtZS5jaGlsZHJlbltpXTt9fQotcmV0dXJuIHVuZGVmaW5lZDt9Ci1mdW5jdGlvbiBwcm9jZXNzU3RhY2socGMsZnVuYyxzdGFjayl7Y29uc3QgZnVsbFN0YWNrPWZ1bmM/W3BjLGZ1bmNdOltwY107bGV0IHByZXZGcmFtZT1wYztmb3IobGV0IGk9MCxuPXN0YWNrLmxlbmd0aDtpPG47KytpKXtjb25zdCBmcmFtZT1zdGFja1tpXTtjb25zdCBmaXJzdENoYXI9ZnJhbWUuY2hhckF0KDApO2lmKGZpcnN0Q2hhcj09PScrJ3x8Zmlyc3RDaGFyPT09Jy0nKXtwcmV2RnJhbWUrPXBhcnNlSW50KGZyYW1lLDE2KTtmdWxsU3RhY2sucHVzaChwcmV2RnJhbWUpO31lbHNlIGlmKGZpcnN0Q2hhciE9PSdvJyl7ZnVsbFN0YWNrLnB1c2gocGFyc2VJbnQoZnJhbWUsMTYpKTt9fQotcmV0dXJuIGZ1bGxTdGFjazt9Ci1pZihpc0V4dGVybmFsQ2FsbGJhY2spe3BjPXRvc09yRXh0ZXJuYWxDYWxsYmFjazt0b3NPckV4dGVybmFsQ2FsbGJhY2s9MDt9ZWxzZSBpZih0b3NPckV4dGVybmFsQ2FsbGJhY2spe2NvbnN0IGZ1bmNFbnRyeT10aGlzLmNvZGVfbWFwXy5maW5kRW50cnkodG9zT3JFeHRlcm5hbENhbGxiYWNrKTtpZighZnVuY0VudHJ5fHwhZnVuY0VudHJ5LmlzSlNGdW5jdGlvbnx8IWZ1bmNFbnRyeS5pc0pTRnVuY3Rpb24oKSl7dG9zT3JFeHRlcm5hbENhbGxiYWNrPTA7fX0KLWxldCBwcm9jZXNzZWRTdGFjaz1wcm9jZXNzU3RhY2socGMsdG9zT3JFeHRlcm5hbENhbGxiYWNrLHN0YWNrKTtsZXQgbm9kZT11bmRlZmluZWQ7bGV0IGxhc3ROb2RlPXVuZGVmaW5lZDtwcm9jZXNzZWRTdGFjaz1wcm9jZXNzZWRTdGFjay5yZXZlcnNlKCk7Zm9yKGxldCBpPTAsbj1wcm9jZXNzZWRTdGFjay5sZW5ndGg7aTxuO2krKyl7Y29uc3QgZnJhbWU9cHJvY2Vzc2VkU3RhY2tbaV07aWYoIWZyYW1lKWJyZWFrO2NvbnN0IGVudHJ5PXRoaXMuY29kZV9tYXBfLmZpbmRFbnRyeShmcmFtZSk7aWYoIWVudHJ5JiZpIT09MCl7Y29udGludWU7fQotbGV0IHNvdXJjZUluZm89dW5kZWZpbmVkO2lmKGVudHJ5JiZlbnRyeS50eXBlPT09Q29kZUVudHJ5LlRZUEUuQ1BQKXtjb25zdCBsaWJFbnRyeT10aGlzLmNvZGVfbWFwXy5maW5kRW50cnlJbkxpYnJhcmllcyhmcmFtZSk7aWYobGliRW50cnkpe3NvdXJjZUluZm89e2ZpbGU6bGliRW50cnkubmFtZX07fX0KLWNvbnN0IGVudHJ5SWQ9ZW50cnk/ZW50cnkuaWQ6LTE7bm9kZT10aGlzLnByb2ZpbGVUcmVlXy5nZXROb2RlKGVudHJ5SWQpO2lmKG5vZGU9PT11bmRlZmluZWQpe25vZGU9dGhpcy5wcm9maWxlVHJlZV8uYWRkKG5ldyBQcm9maWxlTm9kZVR5cGUoZW50cnlJZCx7ZnVuY3Rpb25OYW1lOmVudHJ5Lm5hbWUsdXJsOnNvdXJjZUluZm8/c291cmNlSW5mby5maWxlOicnLGxpbmVOdW1iZXI6c291cmNlSW5mbz9zb3VyY2VJbmZvLmxpbmU6dW5kZWZpbmVkLGNvbHVtbk51bWJlcjpzb3VyY2VJbmZvP3NvdXJjZUluZm8uY29sdW1uOnVuZGVmaW5lZCxzY3JpcHRJZDpzb3VyY2VJbmZvP3NvdXJjZUluZm8uc2NyaXB0SWQ6dW5kZWZpbmVkfSxsYXN0Tm9kZSkpO30KLWxhc3ROb2RlPW5vZGU7fQotdGhpcy5tb2RlbF8uc2FtcGxlcy5wdXNoKG5ldyB0ci5tb2RlbC5TYW1wbGUoc3RhcnRJbk1zLCdWOCBQQycsbm9kZSx0aGlzLnY4X3RocmVhZF8sdW5kZWZpbmVkLDEpKTt9LHByb2Nlc3NEaXN0b3J0aW9uXyhkaXN0b3J0aW9uSW5QaWNvc2Vjb25kcyl7fSxwcm9jZXNzUGxvdFJhbmdlXyhzdGFydCxlbmQpe30scHJvY2Vzc1Y4VmVyc2lvbl8obWFqb3IsbWlub3IsYnVpbGQscGF0Y2gsY2FuZGlkYXRlKXt9LGltcG9ydEV2ZW50cygpe2NvbnN0IGxvZ3JlYWRlcj1uZXcgdHIuZS5pbXBvcnRlci52OC5Mb2dSZWFkZXIoeyd0aW1lci1ldmVudCc6e3BhcnNlcnM6W251bGwscGFyc2VJbnQscGFyc2VJbnRdLHByb2Nlc3Nvcjp0aGlzLnByb2Nlc3NUaW1lckV2ZW50Xy5iaW5kKHRoaXMpfSwnc2hhcmVkLWxpYnJhcnknOntwYXJzZXJzOltudWxsLHBhcnNlSW50LHBhcnNlSW50XSxwcm9jZXNzb3I6dGhpcy5wcm9jZXNzU2hhcmVkTGlicmFyeV8uYmluZCh0aGlzKX0sJ3RpbWVyLWV2ZW50LXN0YXJ0Jzp7cGFyc2VyczpbbnVsbCxwYXJzZUludF0scHJvY2Vzc29yOnRoaXMucHJvY2Vzc1RpbWVyRXZlbnRTdGFydF8uYmluZCh0aGlzKX0sJ3RpbWVyLWV2ZW50LWVuZCc6e3BhcnNlcnM6W251bGwscGFyc2VJbnRdLHByb2Nlc3Nvcjp0aGlzLnByb2Nlc3NUaW1lckV2ZW50RW5kXy5iaW5kKHRoaXMpfSwnY29kZS1jcmVhdGlvbic6e3BhcnNlcnM6W251bGwscGFyc2VJbnQscGFyc2VJbnQscGFyc2VJbnQsbnVsbCwndmFyLWFyZ3MnXSxwcm9jZXNzb3I6dGhpcy5wcm9jZXNzQ29kZUNyZWF0ZUV2ZW50Xy5iaW5kKHRoaXMpfSwnY29kZS1tb3ZlJzp7cGFyc2VyczpbcGFyc2VJbnQscGFyc2VJbnRdLHByb2Nlc3Nvcjp0aGlzLnByb2Nlc3NDb2RlTW92ZUV2ZW50Xy5iaW5kKHRoaXMpfSwnY29kZS1kZWxldGUnOntwYXJzZXJzOltwYXJzZUludF0scHJvY2Vzc29yOnRoaXMucHJvY2Vzc0NvZGVEZWxldGVFdmVudF8uYmluZCh0aGlzKX0sJ2NwcCc6e3BhcnNlcnM6W3BhcnNlSW50LHBhcnNlSW50LG51bGxdLHByb2Nlc3Nvcjp0aGlzLnByb2Nlc3NDcHBTeW1ib2xfLmJpbmQodGhpcyl9LCd0aWNrJzp7cGFyc2VyczpbcGFyc2VJbnQscGFyc2VJbnQscGFyc2VJbnQscGFyc2VJbnQscGFyc2VJbnQsJ3Zhci1hcmdzJ10scHJvY2Vzc29yOnRoaXMucHJvY2Vzc1RpY2tFdmVudF8uYmluZCh0aGlzKX0sJ2Rpc3RvcnRpb24nOntwYXJzZXJzOltwYXJzZUludF0scHJvY2Vzc29yOnRoaXMucHJvY2Vzc0Rpc3RvcnRpb25fLmJpbmQodGhpcyl9LCdwbG90LXJhbmdlJzp7cGFyc2VyczpbcGFyc2VJbnQscGFyc2VJbnRdLHByb2Nlc3Nvcjp0aGlzLnByb2Nlc3NQbG90UmFuZ2VfLmJpbmQodGhpcyl9LCd2OC12ZXJzaW9uJzp7cGFyc2VyczpbcGFyc2VJbnQscGFyc2VJbnQscGFyc2VJbnQscGFyc2VJbnQscGFyc2VJbnRdLHByb2Nlc3Nvcjp0aGlzLnByb2Nlc3NWOFZlcnNpb25fLmJpbmQodGhpcyl9fSk7dGhpcy52OF90aW1lcl90aHJlYWRfPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcygtMzIpLmdldE9yQ3JlYXRlVGhyZWFkKDEpO3RoaXMudjhfdGltZXJfdGhyZWFkXy5uYW1lPSdWOCBUaW1lcnMnO3RoaXMudjhfdGhyZWFkXz10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoLTMyKS5nZXRPckNyZWF0ZVRocmVhZCgyKTt0aGlzLnY4X3RocmVhZF8ubmFtZT0nVjgnO2NvbnN0IGxpbmVzPXRoaXMubG9nRGF0YV8uc3BsaXQoJ1xuJyk7Zm9yKGxldCBpPTA7aTxsaW5lcy5sZW5ndGg7aSsrKXtsb2dyZWFkZXIucHJvY2Vzc0xvZ0xpbmUobGluZXNbaV0pO30KLWZ1bmN0aW9uIGFkZFNsaWNlcyhzbGljZXMsdGhyZWFkKXtmb3IobGV0IGk9MDtpPHNsaWNlcy5sZW5ndGg7aSsrKXtjb25zdCBkdXJhdGlvbj1zbGljZXNbaV0uZW5kLXNsaWNlc1tpXS5zdGFydDtjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJ3Y4JyxzbGljZXNbaV0ubmFtZSxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcoc2xpY2VzW2ldLm5hbWUpLHNsaWNlc1tpXS5zdGFydCx7fSxkdXJhdGlvbik7dGhyZWFkLnNsaWNlR3JvdXAucHVzaFNsaWNlKHNsaWNlKTthZGRTbGljZXMoc2xpY2VzW2ldLmNoaWxkcmVuLHRocmVhZCk7fX0KLWFkZFNsaWNlcyh0aGlzLnY4X3N0YWNrX3RpbWVsaW5lXyx0aGlzLnY4X3RocmVhZF8pO319O3RyLmltcG9ydGVyLkltcG9ydGVyLnJlZ2lzdGVyKFY4TG9nSW1wb3J0ZXIpO3JldHVybntWOExvZ0ltcG9ydGVyLH07fSk7J3VzZSBzdHJpY3QnO2lmKHRyLmlzVmlubil7Z2xvYmFsLndpbmRvdz17fTt9Ci0hZnVuY3Rpb24oYSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1hKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxhKTtlbHNle3ZhciBiOyJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P2I9d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2I9Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmKGI9c2VsZiksYi5KU1ppcD1hKCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBhKGIsYyxkKXtmdW5jdGlvbiBlKGcsaCl7aWYoIWNbZ10pe2lmKCFiW2ddKXt2YXIgaT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighaCYmaSlyZXR1cm4gaShnLCEwKTtpZihmKXJldHVybiBmKGcsITApO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2crIiciKX12YXIgaj1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoai5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoYz9jOmEpfSxqLGouZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxnPTA7ZzxkLmxlbmd0aDtnKyspZShkW2ddKTtyZXR1cm4gZX0oezE6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IjtjLmVuY29kZT1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxlLGYsZyxoLGksaj0iIixrPTA7azxhLmxlbmd0aDspYj1hLmNoYXJDb2RlQXQoaysrKSxjPWEuY2hhckNvZGVBdChrKyspLGU9YS5jaGFyQ29kZUF0KGsrKyksZj1iPj4yLGc9KDMmYik8PDR8Yz4+NCxoPSgxNSZjKTw8MnxlPj42LGk9NjMmZSxpc05hTihjKT9oPWk9NjQ6aXNOYU4oZSkmJihpPTY0KSxqPWorZC5jaGFyQXQoZikrZC5jaGFyQXQoZykrZC5jaGFyQXQoaCkrZC5jaGFyQXQoaSk7cmV0dXJuIGp9LGMuZGVjb2RlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGcsaCxpLGo9IiIsaz0wO2ZvcihhPWEucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO2s8YS5sZW5ndGg7KWY9ZC5pbmRleE9mKGEuY2hhckF0KGsrKykpLGc9ZC5pbmRleE9mKGEuY2hhckF0KGsrKykpLGg9ZC5pbmRleE9mKGEuY2hhckF0KGsrKykpLGk9ZC5pbmRleE9mKGEuY2hhckF0KGsrKykpLGI9Zjw8MnxnPj40LGM9KDE1JmcpPDw0fGg+PjIsZT0oMyZoKTw8NnxpLGorPVN0cmluZy5mcm9tQ2hhckNvZGUoYiksNjQhPWgmJihqKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpKSw2NCE9aSYmKGorPVN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO3JldHVybiBqfX0se31dLDI6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoKXt0aGlzLmNvbXByZXNzZWRTaXplPTAsdGhpcy51bmNvbXByZXNzZWRTaXplPTAsdGhpcy5jcmMzMj0wLHRoaXMuY29tcHJlc3Npb25NZXRob2Q9bnVsbCx0aGlzLmNvbXByZXNzZWRDb250ZW50PW51bGx9Yy5wcm90b3R5cGU9e2dldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZ2V0Q29tcHJlc3NlZENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LGIuZXhwb3J0cz1jfSx7fV0sMzpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtjLlNUT1JFPXttYWdpYzoiXHgwMFx4MDAiLGNvbXByZXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhfSx1bmNvbXByZXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxjb21wcmVzc0lucHV0VHlwZTpudWxsLHVuY29tcHJlc3NJbnB1dFR5cGU6bnVsbH0sYy5ERUZMQVRFPWEoIi4vZmxhdGUiKX0seyIuL2ZsYXRlIjo4fV0sNDpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7dmFyIGM9YSgiLi91dGlscyIpLGQ9WzAsMTk5Njk1OTg5NCwzOTkzOTE5Nzg4LDI1Njc1MjQ3OTQsMTI0NjM0MTM3LDE4ODYwNTc2MTUsMzkxNTYyMTY4NSwyNjU3MzkyMDM1LDI0OTI2ODI3NCwyMDQ0NTA4MzI0LDM3NzIxMTUyMzAsMjU0NzE3Nzg2NCwxNjI5NDE5OTUsMjEyNTU2MTAyMSwzODg3NjA3MDQ3LDI0Mjg0NDQwNDksNDk4NTM2NTQ4LDE3ODk5Mjc2NjYsNDA4OTAxNjY0OCwyMjI3MDYxMjE0LDQ1MDU0ODg2MSwxODQzMjU4NjAzLDQxMDc1ODA3NTMsMjIxMTY3NzYzOSwzMjU4ODM5OTAsMTY4NDc3NzE1Miw0MjUxMTIyMDQyLDIzMjE5MjY2MzYsMzM1NjMzNDg3LDE2NjEzNjU0NjUsNDE5NTMwMjc1NSwyMzY2MTE1MzE3LDk5NzA3MzA5NiwxMjgxOTUzODg2LDM1Nzk4NTUzMzIsMjcyNDY4ODI0MiwxMDA2ODg4MTQ1LDEyNTg2MDc2ODcsMzUyNDEwMTYyOSwyNzY4OTQyNDQzLDkwMTA5NzcyMiwxMTE5MDAwNjg0LDM2ODY1MTcyMDYsMjg5ODA2NTcyOCw4NTMwNDQ0NTEsMTE3MjI2NjEwMSwzNzA1MDE1NzU5LDI4ODI2MTY2NjUsNjUxNzY3OTgwLDEzNzM1MDM1NDYsMzM2OTU1NDMwNCwzMjE4MTA0NTk4LDU2NTUwNzI1MywxNDU0NjIxNzMxLDM0ODUxMTE3MDUsMzA5OTQzNjMwMyw2NzEyNjY5NzQsMTU5NDE5ODAyNCwzMzIyNzMwOTMwLDI5NzAzNDc4MTIsNzk1ODM1NTI3LDE0ODMyMzAyMjUsMzI0NDM2NzI3NSwzMDYwMTQ5NTY1LDE5OTQxNDYxOTIsMzExNTg1MzQsMjU2MzkwNzc3Miw0MDIzNzE3OTMwLDE5MDc0NTk0NjUsMTEyNjM3MjE1LDI2ODAxNTMyNTMsMzkwNDQyNzA1OSwyMDEzNzc2MjkwLDI1MTcyMjAzNiwyNTE3MjE1Mzc0LDM3NzU4MzAwNDAsMjEzNzY1Njc2MywxNDEzNzY4MTMsMjQzOTI3NzcxOSwzODY1MjcxMjk3LDE4MDIxOTU0NDQsNDc2ODY0ODY2LDIyMzgwMDEzNjgsNDA2NjUwODg3OCwxODEyMzcwOTI1LDQ1MzA5MjczMSwyMTgxNjI1MDI1LDQxMTE0NTEyMjMsMTcwNjA4ODkwMiwzMTQwNDI3MDQsMjM0NDUzMjIwMiw0MjQwMDE3NTMyLDE2NTg2NTgyNzEsMzY2NjE5OTc3LDIzNjI2NzAzMjMsNDIyNDk5NDQwNSwxMzAzNTM1OTYwLDk4NDk2MTQ4NiwyNzQ3MDA3MDkyLDM1NjkwMzc1MzgsMTI1NjE3MDgxNywxMDM3NjA0MzExLDI3NjUyMTA3MzMsMzU1NDA3OTk5NSwxMTMxMDE0NTA2LDg3OTY3OTk5NiwyOTA5MjQzNDYyLDM2NjM3NzE4NTYsMTE0MTEyNDQ2Nyw4NTU4NDIyNzcsMjg1MjgwMTYzMSwzNzA4NjQ4NjQ5LDEzNDI1MzM5NDgsNjU0NDU5MzA2LDMxODgzOTYwNDgsMzM3MzAxNTE3NCwxNDY2NDc5OTA5LDU0NDE3OTYzNSwzMTEwNTIzOTEzLDM0NjI1MjIwMTUsMTU5MTY3MTA1NCw3MDIxMzg3NzYsMjk2NjQ2MDQ1MCwzMzUyNzk5NDEyLDE1MDQ5MTg4MDcsNzgzNTUxODczLDMwODI2NDA0NDMsMzIzMzQ0Mjk4OSwzOTg4MjkyMzg0LDI1OTYyNTQ2NDYsNjIzMTcwNjgsMTk1NzgxMDg0MiwzOTM5ODQ1OTQ1LDI2NDc4MTYxMTEsODE0NzA5OTcsMTk0MzgwMzUyMywzODE0OTE4OTMwLDI0ODk1OTY4MDQsMjI1Mjc0NDMwLDIwNTM3OTAzNzYsMzgyNjE3NTc1NSwyNDY2OTA2MDEzLDE2NzgxNjc0MywyMDk3NjUxMzc3LDQwMjc1NTI1ODAsMjI2NTQ5MDM4Niw1MDM0NDQwNzIsMTc2MjA1MDgxNCw0MTUwNDE3MjQ1LDIxNTQxMjkzNTUsNDI2NTIyMjI1LDE4NTI1MDc4NzksNDI3NTMxMzUyNiwyMzEyMzE3OTIwLDI4Mjc1MzYyNiwxNzQyNTU1ODUyLDQxODk3MDgxNDMsMjM5NDg3Nzk0NSwzOTc5MTc3NjMsMTYyMjE4MzYzNywzNjA0MzkwODg4LDI3MTQ4NjY1NTgsOTUzNzI5NzMyLDEzNDAwNzY2MjYsMzUxODcxOTk4NSwyNzk3MzYwOTk5LDEwNjg4MjgzODEsMTIxOTYzODg1OSwzNjI0NzQxODUwLDI5MzY2NzUxNDgsOTA2MTg1NDYyLDEwOTA4MTI1MTIsMzc0NzY3MjAwMywyODI1Mzc5NjY5LDgyOTMyOTEzNSwxMTgxMzM1MTYxLDM0MTIxNzc4MDQsMzE2MDgzNDg0Miw2MjgwODU0MDgsMTM4MjYwNTM2NiwzNDIzMzY5MTA5LDMxMzgwNzg0NjcsNTcwNTYyMjMzLDE0MjY0MDA4MTUsMzMxNzMxNjU0MiwyOTk4NzMzNjA4LDczMzIzOTk1NCwxNTU1MjYxOTU2LDMyNjg5MzU1OTEsMzA1MDM2MDYyNSw3NTI0NTk0MDMsMTU0MTMyMDIyMSwyNjA3MDcxOTIwLDM5NjU5NzMwMzAsMTk2OTkyMjk3Miw0MDczNTQ5OCwyNjE3ODM3MjI1LDM5NDM1NzcxNTEsMTkxMzA4Nzg3Nyw4MzkwODM3MSwyNTEyMzQxNjM0LDM4MDM3NDA2OTIsMjA3NTIwODYyMiwyMTMyNjExMTIsMjQ2MzI3MjYwMywzODU1OTkwMjg1LDIwOTQ4NTQwNzEsMTk4OTU4ODgxLDIyNjIwMjkwMTIsNDA1NzI2MDYxMCwxNzU5MzU5OTkyLDUzNDQxNDE5MCwyMTc2NzE4NTQxLDQxMzkzMjkxMTUsMTg3MzgzNjAwMSw0MTQ2NjQ1NjcsMjI4MjI0ODkzNCw0Mjc5MjAwMzY4LDE3MTE2ODQ1NTQsMjg1MjgxMTE2LDI0MDU4MDE3MjcsNDE2NzIxNjc0NSwxNjM0NDY3Nzk1LDM3NjIyOTcwMSwyNjg1MDY3ODk2LDM2MDgwMDc0MDYsMTMwODkxODYxMiw5NTY1NDM5MzgsMjgwODU1NTEwNSwzNDk1OTU4MjYzLDEyMzE2MzYzMDEsMTA0NzQyNzAzNSwyOTMyOTU5ODE4LDM2NTQ3MDM4MzYsMTA4ODM1OTI3MCw5MzY5MThlMywyODQ3NzE0ODk5LDM3MzY4Mzc4MjksMTIwMjkwMDg2Myw4MTcyMzM4OTcsMzE4MzM0MjEwOCwzNDAxMjM3MTMwLDE0MDQyNzc1NTIsNjE1ODE4MTUwLDMxMzQyMDc0OTMsMzQ1MzQyMTIwMywxNDIzODU3NDQ5LDYwMTQ1MDQzMSwzMDA5ODM3NjE0LDMyOTQ3MTA0NTYsMTU2NzEwMzc0Niw3MTE5Mjg3MjQsMzAyMDY2ODQ3MSwzMjcyMzgwMDY1LDE1MTAzMzQyMzUsNzU1MTY3MTE3XTtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIGF8fCFhLmxlbmd0aClyZXR1cm4gMDt2YXIgZT0ic3RyaW5nIiE9PWMuZ2V0VHlwZU9mKGEpOyJ1bmRlZmluZWQiPT10eXBlb2YgYiYmKGI9MCk7dmFyIGY9MCxnPTAsaD0wO2I9LTFeYjtmb3IodmFyIGk9MCxqPWEubGVuZ3RoO2o+aTtpKyspaD1lP2FbaV06YS5jaGFyQ29kZUF0KGkpLGc9MjU1JihiXmgpLGY9ZFtnXSxiPWI+Pj44XmY7cmV0dXJuLTFeYn19LHsiLi91dGlscyI6MjF9XSw1OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKCl7dGhpcy5kYXRhPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLmluZGV4PTB9dmFyIGQ9YSgiLi91dGlscyIpO2MucHJvdG90eXBlPXtjaGVja09mZnNldDpmdW5jdGlvbihhKXt0aGlzLmNoZWNrSW5kZXgodGhpcy5pbmRleCthKX0sY2hlY2tJbmRleDpmdW5jdGlvbihhKXtpZih0aGlzLmxlbmd0aDxhfHwwPmEpdGhyb3cgbmV3IEVycm9yKCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9ICIrdGhpcy5sZW5ndGgrIiwgYXNrZWQgaW5kZXggPSAiK2ErIikuIENvcnJ1cHRlZCB6aXAgPyIpfSxzZXRJbmRleDpmdW5jdGlvbihhKXt0aGlzLmNoZWNrSW5kZXgoYSksdGhpcy5pbmRleD1hfSxza2lwOmZ1bmN0aW9uKGEpe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRleCthKX0sYnl0ZUF0OmZ1bmN0aW9uKCl7fSxyZWFkSW50OmZ1bmN0aW9uKGEpe3ZhciBiLGM9MDtmb3IodGhpcy5jaGVja09mZnNldChhKSxiPXRoaXMuaW5kZXgrYS0xO2I+PXRoaXMuaW5kZXg7Yi0tKWM9KGM8PDgpK3RoaXMuYnl0ZUF0KGIpO3JldHVybiB0aGlzLmluZGV4Kz1hLGN9LHJlYWRTdHJpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuIGQudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5yZWFkRGF0YShhKSl9LHJlYWREYXRhOmZ1bmN0aW9uKCl7fSxsYXN0SW5kZXhPZlNpZ25hdHVyZTpmdW5jdGlvbigpe30scmVhZERhdGU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRJbnQoNCk7cmV0dXJuIG5ldyBEYXRlKChhPj4yNSYxMjcpKzE5ODAsKGE+PjIxJjE1KS0xLGE+PjE2JjMxLGE+PjExJjMxLGE+PjUmNjMsKDMxJmEpPDwxKX19LGIuZXhwb3J0cz1jfSx7Ii4vdXRpbHMiOjIxfV0sNjpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtjLmJhc2U2ND0hMSxjLmJpbmFyeT0hMSxjLmRpcj0hMSxjLmNyZWF0ZUZvbGRlcnM9ITEsYy5kYXRlPW51bGwsYy5jb21wcmVzc2lvbj1udWxsLGMuY29tbWVudD1udWxsfSx7fV0sNzpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1hKCIuL3V0aWxzIik7Yy5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKGEpe3JldHVybiBkLnN0cmluZzJiaW5hcnkoYSl9LGMuc3RyaW5nMlVpbnQ4QXJyYXk9ZnVuY3Rpb24oYSl7cmV0dXJuIGQudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLGEpfSxjLnVpbnQ4QXJyYXkyU3RyaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBkLnRyYW5zZm9ybVRvKCJzdHJpbmciLGEpfSxjLnN0cmluZzJCbG9iPWZ1bmN0aW9uKGEpe3ZhciBiPWQudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixhKTtyZXR1cm4gZC5hcnJheUJ1ZmZlcjJCbG9iKGIpfSxjLmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuYXJyYXlCdWZmZXIyQmxvYihhKX0sYy50cmFuc2Zvcm1Ubz1mdW5jdGlvbihhLGIpe3JldHVybiBkLnRyYW5zZm9ybVRvKGEsYil9LGMuZ2V0VHlwZU9mPWZ1bmN0aW9uKGEpe3JldHVybiBkLmdldFR5cGVPZihhKX0sYy5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuY2hlY2tTdXBwb3J0KGEpfSxjLk1BWF9WQUxVRV8xNkJJVFM9ZC5NQVhfVkFMVUVfMTZCSVRTLGMuTUFYX1ZBTFVFXzMyQklUUz1kLk1BWF9WQUxVRV8zMkJJVFMsYy5wcmV0dHk9ZnVuY3Rpb24oYSl7cmV0dXJuIGQucHJldHR5KGEpfSxjLmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihhKXtyZXR1cm4gZC5maW5kQ29tcHJlc3Npb24oYSl9LGMuaXNSZWdFeHA9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuaXNSZWdFeHAoYSl9fSx7Ii4vdXRpbHMiOjIxfV0sODpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgVWludDE2QXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgVWludDMyQXJyYXksZT1hKCJwYWtvIik7Yy51bmNvbXByZXNzSW5wdXRUeXBlPWQ/InVpbnQ4YXJyYXkiOiJhcnJheSIsYy5jb21wcmVzc0lucHV0VHlwZT1kPyJ1aW50OGFycmF5IjoiYXJyYXkiLGMubWFnaWM9IlxiXHgwMCIsYy5jb21wcmVzcz1mdW5jdGlvbihhKXtyZXR1cm4gZS5kZWZsYXRlUmF3KGEpfSxjLnVuY29tcHJlc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGUuaW5mbGF0ZVJhdyhhKX19LHtwYWtvOjI0fV0sOTpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYz8odGhpcy5maWxlcz17fSx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLnJvb3Q9IiIsYSYmdGhpcy5sb2FkKGEsYiksdm9pZCh0aGlzLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGM7Zm9yKHZhciBiIGluIHRoaXMpImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXNbYl0mJihhW2JdPXRoaXNbYl0pO3JldHVybiBhfSkpOm5ldyBjKGEsYil9dmFyIGQ9YSgiLi9iYXNlNjQiKTtjLnByb3RvdHlwZT1hKCIuL29iamVjdCIpLGMucHJvdG90eXBlLmxvYWQ9YSgiLi9sb2FkIiksYy5zdXBwb3J0PWEoIi4vc3VwcG9ydCIpLGMuZGVmYXVsdHM9YSgiLi9kZWZhdWx0cyIpLGMudXRpbHM9YSgiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiKSxjLmJhc2U2ND17ZW5jb2RlOmZ1bmN0aW9uKGEpe3JldHVybiBkLmVuY29kZShhKX0sZGVjb2RlOmZ1bmN0aW9uKGEpe3JldHVybiBkLmRlY29kZShhKX19LGMuY29tcHJlc3Npb25zPWEoIi4vY29tcHJlc3Npb25zIiksYi5leHBvcnRzPWN9LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3Npb25zIjozLCIuL2RlZmF1bHRzIjo2LCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyI6NywiLi9sb2FkIjoxMCwiLi9vYmplY3QiOjEzLCIuL3N1cHBvcnQiOjE3fV0sMTA6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO3ZhciBjPWEoIi4vYmFzZTY0IiksZD1hKCIuL3ppcEVudHJpZXMiKTtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXt2YXIgZSxmLGcsaDtmb3IoYj1ifHx7fSxiLmJhc2U2NCYmKGE9Yy5kZWNvZGUoYSkpLGY9bmV3IGQoYSxiKSxlPWYuZmlsZXMsZz0wO2c8ZS5sZW5ndGg7ZysrKWg9ZVtnXSx0aGlzLmZpbGUoaC5maWxlTmFtZSxoLmRlY29tcHJlc3NlZCx7YmluYXJ5OiEwLG9wdGltaXplZEJpbmFyeVN0cmluZzohMCxkYXRlOmguZGF0ZSxkaXI6aC5kaXIsY29tbWVudDpoLmZpbGVDb21tZW50Lmxlbmd0aD9oLmZpbGVDb21tZW50Om51bGwsY3JlYXRlRm9sZGVyczpiLmNyZWF0ZUZvbGRlcnN9KTtyZXR1cm4gZi56aXBDb21tZW50Lmxlbmd0aCYmKHRoaXMuY29tbWVudD1mLnppcENvbW1lbnQpLHRoaXN9fSx7Ii4vYmFzZTY0IjoxLCIuL3ppcEVudHJpZXMiOjIyfV0sMTE6W2Z1bmN0aW9uKGEsYil7KGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtiLmV4cG9ydHM9ZnVuY3Rpb24oYixjKXtyZXR1cm4gbmV3IGEoYixjKX0sYi5leHBvcnRzLnRlc3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuaXNCdWZmZXIoYil9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgQnVmZmVyP0J1ZmZlcjp2b2lkIDApfSx7fV0sMTI6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoYSl7dGhpcy5kYXRhPWEsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9dmFyIGQ9YSgiLi91aW50OEFycmF5UmVhZGVyIik7Yy5wcm90b3R5cGU9bmV3IGQsYy5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oYSl7dGhpcy5jaGVja09mZnNldChhKTt2YXIgYj10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K2EpO3JldHVybiB0aGlzLmluZGV4Kz1hLGJ9LGIuZXhwb3J0cz1jfSx7Ii4vdWludDhBcnJheVJlYWRlciI6MTh9XSwxMzpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7dmFyIGM9YSgiLi9zdXBwb3J0IiksZD1hKCIuL3V0aWxzIiksZT1hKCIuL2NyYzMyIiksZj1hKCIuL3NpZ25hdHVyZSIpLGc9YSgiLi9kZWZhdWx0cyIpLGg9YSgiLi9iYXNlNjQiKSxpPWEoIi4vY29tcHJlc3Npb25zIiksaj1hKCIuL2NvbXByZXNzZWRPYmplY3QiKSxrPWEoIi4vbm9kZUJ1ZmZlciIpLGw9YSgiLi91dGY4IiksbT1hKCIuL3N0cmluZ1dyaXRlciIpLG49YSgiLi91aW50OEFycmF5V3JpdGVyIiksbz1mdW5jdGlvbihhKXtpZihhLl9kYXRhIGluc3RhbmNlb2YgaiYmKGEuX2RhdGE9YS5fZGF0YS5nZXRDb250ZW50KCksYS5vcHRpb25zLmJpbmFyeT0hMCxhLm9wdGlvbnMuYmFzZTY0PSExLCJ1aW50OGFycmF5Ij09PWQuZ2V0VHlwZU9mKGEuX2RhdGEpKSl7dmFyIGI9YS5fZGF0YTthLl9kYXRhPW5ldyBVaW50OEFycmF5KGIubGVuZ3RoKSwwIT09Yi5sZW5ndGgmJmEuX2RhdGEuc2V0KGIsMCl9cmV0dXJuIGEuX2RhdGF9LHA9ZnVuY3Rpb24oYSl7dmFyIGI9byhhKSxlPWQuZ2V0VHlwZU9mKGIpO3JldHVybiJzdHJpbmciPT09ZT8hYS5vcHRpb25zLmJpbmFyeSYmYy5ub2RlYnVmZmVyP2soYiwidXRmLTgiKTphLmFzQmluYXJ5KCk6Yn0scT1mdW5jdGlvbihhKXt2YXIgYj1vKHRoaXMpO3JldHVybiBudWxsPT09Ynx8InVuZGVmaW5lZCI9PXR5cGVvZiBiPyIiOih0aGlzLm9wdGlvbnMuYmFzZTY0JiYoYj1oLmRlY29kZShiKSksYj1hJiZ0aGlzLm9wdGlvbnMuYmluYXJ5P0EudXRmOGRlY29kZShiKTpkLnRyYW5zZm9ybVRvKCJzdHJpbmciLGIpLGF8fHRoaXMub3B0aW9ucy5iaW5hcnl8fChiPWQudHJhbnNmb3JtVG8oInN0cmluZyIsQS51dGY4ZW5jb2RlKGIpKSksYil9LHI9ZnVuY3Rpb24oYSxiLGMpe3RoaXMubmFtZT1hLHRoaXMuZGlyPWMuZGlyLHRoaXMuZGF0ZT1jLmRhdGUsdGhpcy5jb21tZW50PWMuY29tbWVudCx0aGlzLl9kYXRhPWIsdGhpcy5vcHRpb25zPWMsdGhpcy5faW5pdGlhbE1ldGFkYXRhPXtkaXI6Yy5kaXIsZGF0ZTpjLmRhdGV9fTtyLnByb3RvdHlwZT17YXNUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHEuY2FsbCh0aGlzLCEwKX0sYXNCaW5hcnk6ZnVuY3Rpb24oKXtyZXR1cm4gcS5jYWxsKHRoaXMsITEpfSxhc05vZGVCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgYT1wKHRoaXMpO3JldHVybiBkLnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIixhKX0sYXNVaW50OEFycmF5OmZ1bmN0aW9uKCl7dmFyIGE9cCh0aGlzKTtyZXR1cm4gZC50cmFuc2Zvcm1UbygidWludDhhcnJheSIsYSl9LGFzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc1VpbnQ4QXJyYXkoKS5idWZmZXJ9fTt2YXIgcz1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9IiI7Zm9yKGM9MDtiPmM7YysrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmEpLGE+Pj49ODtyZXR1cm4gZH0sdD1mdW5jdGlvbigpe3ZhciBhLGIsYz17fTtmb3IoYT0wO2E8YXJndW1lbnRzLmxlbmd0aDthKyspZm9yKGIgaW4gYXJndW1lbnRzW2FdKWFyZ3VtZW50c1thXS5oYXNPd25Qcm9wZXJ0eShiKSYmInVuZGVmaW5lZCI9PXR5cGVvZiBjW2JdJiYoY1tiXT1hcmd1bWVudHNbYV1bYl0pO3JldHVybiBjfSx1PWZ1bmN0aW9uKGEpe3JldHVybiBhPWF8fHt9LGEuYmFzZTY0IT09ITB8fG51bGwhPT1hLmJpbmFyeSYmdm9pZCAwIT09YS5iaW5hcnl8fChhLmJpbmFyeT0hMCksYT10KGEsZyksYS5kYXRlPWEuZGF0ZXx8bmV3IERhdGUsbnVsbCE9PWEuY29tcHJlc3Npb24mJihhLmNvbXByZXNzaW9uPWEuY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSksYX0sdj1mdW5jdGlvbihhLGIsYyl7dmFyIGUsZj1kLmdldFR5cGVPZihiKTtpZihjPXUoYyksYy5jcmVhdGVGb2xkZXJzJiYoZT13KGEpKSYmeC5jYWxsKHRoaXMsZSwhMCksYy5kaXJ8fG51bGw9PT1ifHwidW5kZWZpbmVkIj09dHlwZW9mIGIpYy5iYXNlNjQ9ITEsYy5iaW5hcnk9ITEsYj1udWxsO2Vsc2UgaWYoInN0cmluZyI9PT1mKWMuYmluYXJ5JiYhYy5iYXNlNjQmJmMub3B0aW1pemVkQmluYXJ5U3RyaW5nIT09ITAmJihiPWQuc3RyaW5nMmJpbmFyeShiKSk7ZWxzZXtpZihjLmJhc2U2ND0hMSxjLmJpbmFyeT0hMCwhKGZ8fGIgaW5zdGFuY2VvZiBqKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBkYXRhIG9mICciK2ErIicgaXMgaW4gYW4gdW5zdXBwb3J0ZWQgZm9ybWF0ICEiKTsiYXJyYXlidWZmZXIiPT09ZiYmKGI9ZC50cmFuc2Zvcm1UbygidWludDhhcnJheSIsYikpfXZhciBnPW5ldyByKGEsYixjKTtyZXR1cm4gdGhpcy5maWxlc1thXT1nLGd9LHc9ZnVuY3Rpb24oYSl7Ii8iPT1hLnNsaWNlKC0xKSYmKGE9YS5zdWJzdHJpbmcoMCxhLmxlbmd0aC0xKSk7dmFyIGI9YS5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBiPjA/YS5zdWJzdHJpbmcoMCxiKToiIn0seD1mdW5jdGlvbihhLGIpe3JldHVybiIvIiE9YS5zbGljZSgtMSkmJihhKz0iLyIpLGI9InVuZGVmaW5lZCIhPXR5cGVvZiBiP2I6ITEsdGhpcy5maWxlc1thXXx8di5jYWxsKHRoaXMsYSxudWxsLHtkaXI6ITAsY3JlYXRlRm9sZGVyczpifSksdGhpcy5maWxlc1thXX0seT1mdW5jdGlvbihhLGIpe3ZhciBjLGY9bmV3IGo7cmV0dXJuIGEuX2RhdGEgaW5zdGFuY2VvZiBqPyhmLnVuY29tcHJlc3NlZFNpemU9YS5fZGF0YS51bmNvbXByZXNzZWRTaXplLGYuY3JjMzI9YS5fZGF0YS5jcmMzMiwwPT09Zi51bmNvbXByZXNzZWRTaXplfHxhLmRpcj8oYj1pLlNUT1JFLGYuY29tcHJlc3NlZENvbnRlbnQ9IiIsZi5jcmMzMj0wKTphLl9kYXRhLmNvbXByZXNzaW9uTWV0aG9kPT09Yi5tYWdpYz9mLmNvbXByZXNzZWRDb250ZW50PWEuX2RhdGEuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKTooYz1hLl9kYXRhLmdldENvbnRlbnQoKSxmLmNvbXByZXNzZWRDb250ZW50PWIuY29tcHJlc3MoZC50cmFuc2Zvcm1UbyhiLmNvbXByZXNzSW5wdXRUeXBlLGMpKSkpOihjPXAoYSksKCFjfHwwPT09Yy5sZW5ndGh8fGEuZGlyKSYmKGI9aS5TVE9SRSxjPSIiKSxmLnVuY29tcHJlc3NlZFNpemU9Yy5sZW5ndGgsZi5jcmMzMj1lKGMpLGYuY29tcHJlc3NlZENvbnRlbnQ9Yi5jb21wcmVzcyhkLnRyYW5zZm9ybVRvKGIuY29tcHJlc3NJbnB1dFR5cGUsYykpKSxmLmNvbXByZXNzZWRTaXplPWYuY29tcHJlc3NlZENvbnRlbnQubGVuZ3RoLGYuY29tcHJlc3Npb25NZXRob2Q9Yi5tYWdpYyxmfSx6PWZ1bmN0aW9uKGEsYixjLGcpe3ZhciBoLGksaixrLG09KGMuY29tcHJlc3NlZENvbnRlbnQsZC50cmFuc2Zvcm1Ubygic3RyaW5nIixsLnV0ZjhlbmNvZGUoYi5uYW1lKSkpLG49Yi5jb21tZW50fHwiIixvPWQudHJhbnNmb3JtVG8oInN0cmluZyIsbC51dGY4ZW5jb2RlKG4pKSxwPW0ubGVuZ3RoIT09Yi5uYW1lLmxlbmd0aCxxPW8ubGVuZ3RoIT09bi5sZW5ndGgscj1iLm9wdGlvbnMsdD0iIix1PSIiLHY9IiI7aj1iLl9pbml0aWFsTWV0YWRhdGEuZGlyIT09Yi5kaXI/Yi5kaXI6ci5kaXIsaz1iLl9pbml0aWFsTWV0YWRhdGEuZGF0ZSE9PWIuZGF0ZT9iLmRhdGU6ci5kYXRlLGg9ay5nZXRIb3VycygpLGg8PD02LGh8PWsuZ2V0TWludXRlcygpLGg8PD01LGh8PWsuZ2V0U2Vjb25kcygpLzIsaT1rLmdldEZ1bGxZZWFyKCktMTk4MCxpPDw9NCxpfD1rLmdldE1vbnRoKCkrMSxpPDw9NSxpfD1rLmdldERhdGUoKSxwJiYodT1zKDEsMSkrcyhlKG0pLDQpK20sdCs9InVwIitzKHUubGVuZ3RoLDIpK3UpLHEmJih2PXMoMSwxKStzKHRoaXMuY3JjMzIobyksNCkrbyx0Kz0idWMiK3Modi5sZW5ndGgsMikrdik7dmFyIHc9IiI7dys9IlxuXHgwMCIsdys9cHx8cT8iXHgwMFxiIjoiXHgwMFx4MDAiLHcrPWMuY29tcHJlc3Npb25NZXRob2Qsdys9cyhoLDIpLHcrPXMoaSwyKSx3Kz1zKGMuY3JjMzIsNCksdys9cyhjLmNvbXByZXNzZWRTaXplLDQpLHcrPXMoYy51bmNvbXByZXNzZWRTaXplLDQpLHcrPXMobS5sZW5ndGgsMiksdys9cyh0Lmxlbmd0aCwyKTt2YXIgeD1mLkxPQ0FMX0ZJTEVfSEVBREVSK3crbSt0LHk9Zi5DRU5UUkFMX0ZJTEVfSEVBREVSKyIUXHgwMCIrdytzKG8ubGVuZ3RoLDIpKyJceDAwXHgwMFx4MDBceDAwIisoaj09PSEwPyIQXHgwMFx4MDBceDAwIjoiXHgwMFx4MDBceDAwXHgwMCIpK3MoZyw0KSttK3QrbztyZXR1cm57ZmlsZVJlY29yZDp4LGRpclJlY29yZDp5LGNvbXByZXNzZWRPYmplY3Q6Y319LEE9e2xvYWQ6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkxvYWQgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLiBJcyB0aGUgZmlsZSBqc3ppcC1sb2FkLmpzIGluY2x1ZGVkID8iKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGY9W107Zm9yKGIgaW4gdGhpcy5maWxlcyl0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KGIpJiYoZD10aGlzLmZpbGVzW2JdLGU9bmV3IHIoZC5uYW1lLGQuX2RhdGEsdChkLm9wdGlvbnMpKSxjPWIuc2xpY2UodGhpcy5yb290Lmxlbmd0aCxiLmxlbmd0aCksYi5zbGljZSgwLHRoaXMucm9vdC5sZW5ndGgpPT09dGhpcy5yb290JiZhKGMsZSkmJmYucHVzaChlKSk7cmV0dXJuIGZ9LGZpbGU6ZnVuY3Rpb24oYSxiLGMpe2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihkLmlzUmVnRXhwKGEpKXt2YXIgZT1hO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihhLGIpe3JldHVybiFiLmRpciYmZS50ZXN0KGEpfSl9cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGIsYyl7cmV0dXJuIWMuZGlyJiZiPT09YX0pWzBdfHxudWxsfXJldHVybiBhPXRoaXMucm9vdCthLHYuY2FsbCh0aGlzLGEsYixjKSx0aGlzfSxmb2xkZXI6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIHRoaXM7aWYoZC5pc1JlZ0V4cChhKSlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oYixjKXtyZXR1cm4gYy5kaXImJmEudGVzdChiKX0pO3ZhciBiPXRoaXMucm9vdCthLGM9eC5jYWxsKHRoaXMsYiksZT10aGlzLmNsb25lKCk7cmV0dXJuIGUucm9vdD1jLm5hbWUsZX0scmVtb3ZlOmZ1bmN0aW9uKGEpe2E9dGhpcy5yb290K2E7dmFyIGI9dGhpcy5maWxlc1thXTtpZihifHwoIi8iIT1hLnNsaWNlKC0xKSYmKGErPSIvIiksYj10aGlzLmZpbGVzW2FdKSxiJiYhYi5kaXIpZGVsZXRlIHRoaXMuZmlsZXNbYV07ZWxzZSBmb3IodmFyIGM9dGhpcy5maWx0ZXIoZnVuY3Rpb24oYixjKXtyZXR1cm4gYy5uYW1lLnNsaWNlKDAsYS5sZW5ndGgpPT09YX0pLGQ9MDtkPGMubGVuZ3RoO2QrKylkZWxldGUgdGhpcy5maWxlc1tjW2RdLm5hbWVdO3JldHVybiB0aGlzfSxnZW5lcmF0ZTpmdW5jdGlvbihhKXthPXQoYXx8e30se2Jhc2U2NDohMCxjb21wcmVzc2lvbjoiU1RPUkUiLHR5cGU6ImJhc2U2NCIsY29tbWVudDpudWxsfSksZC5jaGVja1N1cHBvcnQoYS50eXBlKTt2YXIgYixjLGU9W10sZz0wLGo9MCxrPWQudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy51dGY4ZW5jb2RlKGEuY29tbWVudHx8dGhpcy5jb21tZW50fHwiIikpO2Zvcih2YXIgbCBpbiB0aGlzLmZpbGVzKWlmKHRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkobCkpe3ZhciBvPXRoaXMuZmlsZXNbbF0scD1vLm9wdGlvbnMuY29tcHJlc3Npb258fGEuY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSxxPWlbcF07aWYoIXEpdGhyb3cgbmV3IEVycm9yKHArIiBpcyBub3QgYSB2YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgISIpO3ZhciByPXkuY2FsbCh0aGlzLG8scSksdT16LmNhbGwodGhpcyxsLG8scixnKTtnKz11LmZpbGVSZWNvcmQubGVuZ3RoK3IuY29tcHJlc3NlZFNpemUsais9dS5kaXJSZWNvcmQubGVuZ3RoLGUucHVzaCh1KX12YXIgdj0iIjt2PWYuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKyJceDAwXHgwMFx4MDBceDAwIitzKGUubGVuZ3RoLDIpK3MoZS5sZW5ndGgsMikrcyhqLDQpK3MoZyw0KStzKGsubGVuZ3RoLDIpK2s7dmFyIHc9YS50eXBlLnRvTG93ZXJDYXNlKCk7Zm9yKGI9InVpbnQ4YXJyYXkiPT09d3x8ImFycmF5YnVmZmVyIj09PXd8fCJibG9iIj09PXd8fCJub2RlYnVmZmVyIj09PXc/bmV3IG4oZytqK3YubGVuZ3RoKTpuZXcgbShnK2ordi5sZW5ndGgpLGM9MDtjPGUubGVuZ3RoO2MrKyliLmFwcGVuZChlW2NdLmZpbGVSZWNvcmQpLGIuYXBwZW5kKGVbY10uY29tcHJlc3NlZE9iamVjdC5jb21wcmVzc2VkQ29udGVudCk7Zm9yKGM9MDtjPGUubGVuZ3RoO2MrKyliLmFwcGVuZChlW2NdLmRpclJlY29yZCk7Yi5hcHBlbmQodik7dmFyIHg9Yi5maW5hbGl6ZSgpO3N3aXRjaChhLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1aW50OGFycmF5IjpjYXNlImFycmF5YnVmZmVyIjpjYXNlIm5vZGVidWZmZXIiOnJldHVybiBkLnRyYW5zZm9ybVRvKGEudHlwZS50b0xvd2VyQ2FzZSgpLHgpO2Nhc2UiYmxvYiI6cmV0dXJuIGQuYXJyYXlCdWZmZXIyQmxvYihkLnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIseCkpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gYS5iYXNlNjQ/aC5lbmNvZGUoeCk6eDtkZWZhdWx0OnJldHVybiB4fX0sY3JjMzI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZShhLGIpfSx1dGY4ZW5jb2RlOmZ1bmN0aW9uKGEpe3JldHVybiBkLnRyYW5zZm9ybVRvKCJzdHJpbmciLGwudXRmOGVuY29kZShhKSl9LHV0ZjhkZWNvZGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGwudXRmOGRlY29kZShhKX19O2IuZXhwb3J0cz1BfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vY29tcHJlc3Npb25zIjozLCIuL2NyYzMyIjo0LCIuL2RlZmF1bHRzIjo2LCIuL25vZGVCdWZmZXIiOjExLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nV3JpdGVyIjoxNiwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5V3JpdGVyIjoxOSwiLi91dGY4IjoyMCwiLi91dGlscyI6MjF9XSwxNDpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtjLkxPQ0FMX0ZJTEVfSEVBREVSPSJQSwMEIixjLkNFTlRSQUxfRklMRV9IRUFERVI9IlBLAQIiLGMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQSwUGIixjLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9IlBLBgciLGMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQSwYGIixjLkRBVEFfREVTQ1JJUFRPUj0iUEsHXGIifSx7fV0sMTU6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoYSxiKXt0aGlzLmRhdGE9YSxifHwodGhpcy5kYXRhPWUuc3RyaW5nMmJpbmFyeSh0aGlzLmRhdGEpKSx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MH12YXIgZD1hKCIuL2RhdGFSZWFkZXIiKSxlPWEoIi4vdXRpbHMiKTtjLnByb3RvdHlwZT1uZXcgZCxjLnByb3RvdHlwZS5ieXRlQXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KGEpfSxjLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhLmxhc3RJbmRleE9mKGEpfSxjLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihhKXt0aGlzLmNoZWNrT2Zmc2V0KGEpO3ZhciBiPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrYSk7cmV0dXJuIHRoaXMuaW5kZXgrPWEsYn0sYi5leHBvcnRzPWN9LHsiLi9kYXRhUmVhZGVyIjo1LCIuL3V0aWxzIjoyMX1dLDE2OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz1hKCIuL3V0aWxzIiksZD1mdW5jdGlvbigpe3RoaXMuZGF0YT1bXX07ZC5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihhKXthPWMudHJhbnNmb3JtVG8oInN0cmluZyIsYSksdGhpcy5kYXRhLnB1c2goYSl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5qb2luKCIiKX19LGIuZXhwb3J0cz1kfSx7Ii4vdXRpbHMiOjIxfV0sMTc6W2Z1bmN0aW9uKGEsYixjKXsoZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2lmKGMuYmFzZTY0PSEwLGMuYXJyYXk9ITAsYy5zdHJpbmc9ITAsYy5hcnJheWJ1ZmZlcj0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYidW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXksYy5ub2RlYnVmZmVyPSJ1bmRlZmluZWQiIT10eXBlb2YgYSxjLnVpbnQ4YXJyYXk9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5LCJ1bmRlZmluZWQiPT10eXBlb2YgQXJyYXlCdWZmZXIpYy5ibG9iPSExO2Vsc2V7dmFyIGI9bmV3IEFycmF5QnVmZmVyKDApO3RyeXtjLmJsb2I9MD09PW5ldyBCbG9iKFtiXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pLnNpemV9Y2F0Y2goZCl7dHJ5e3ZhciBlPXdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyLGY9bmV3IGU7Zi5hcHBlbmQoYiksYy5ibG9iPTA9PT1mLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpLnNpemV9Y2F0Y2goZCl7Yy5ibG9iPSExfX19fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgQnVmZmVyP0J1ZmZlcjp2b2lkIDApfSx7fV0sMTg6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoYSl7YSYmKHRoaXMuZGF0YT1hLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wKX12YXIgZD1hKCIuL2RhdGFSZWFkZXIiKTtjLnByb3RvdHlwZT1uZXcgZCxjLnByb3RvdHlwZS5ieXRlQXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YVthXX0sYy5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEuY2hhckNvZGVBdCgwKSxjPWEuY2hhckNvZGVBdCgxKSxkPWEuY2hhckNvZGVBdCgyKSxlPWEuY2hhckNvZGVBdCgzKSxmPXRoaXMubGVuZ3RoLTQ7Zj49MDstLWYpaWYodGhpcy5kYXRhW2ZdPT09YiYmdGhpcy5kYXRhW2YrMV09PT1jJiZ0aGlzLmRhdGFbZisyXT09PWQmJnRoaXMuZGF0YVtmKzNdPT09ZSlyZXR1cm4gZjtyZXR1cm4tMX0sYy5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oYSl7aWYodGhpcy5jaGVja09mZnNldChhKSwwPT09YSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIGI9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuaW5kZXgsdGhpcy5pbmRleCthKTtyZXR1cm4gdGhpcy5pbmRleCs9YSxifSxiLmV4cG9ydHM9Y30seyIuL2RhdGFSZWFkZXIiOjV9XSwxOTpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7dmFyIGM9YSgiLi91dGlscyIpLGQ9ZnVuY3Rpb24oYSl7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KGEpLHRoaXMuaW5kZXg9MH07ZC5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihhKXswIT09YS5sZW5ndGgmJihhPWMudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLGEpLHRoaXMuZGF0YS5zZXQoYSx0aGlzLmluZGV4KSx0aGlzLmluZGV4Kz1hLmxlbmd0aCl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LGIuZXhwb3J0cz1kfSx7Ii4vdXRpbHMiOjIxfV0sMjA6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7Zm9yKHZhciBkPWEoIi4vdXRpbHMiKSxlPWEoIi4vc3VwcG9ydCIpLGY9YSgiLi9ub2RlQnVmZmVyIiksZz1uZXcgQXJyYXkoMjU2KSxoPTA7MjU2Pmg7aCsrKWdbaF09aD49MjUyPzY6aD49MjQ4PzU6aD49MjQwPzQ6aD49MjI0PzM6aD49MTkyPzI6MTtnWzI1NF09Z1syNTRdPTE7dmFyIGk9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGYsZyxoPWEubGVuZ3RoLGk9MDtmb3IoZj0wO2g+ZjtmKyspYz1hLmNoYXJDb2RlQXQoZiksNTUyOTY9PT0oNjQ1MTImYykmJmg+ZisxJiYoZD1hLmNoYXJDb2RlQXQoZisxKSw1NjMyMD09PSg2NDUxMiZkKSYmKGM9NjU1MzYrKGMtNTUyOTY8PDEwKSsoZC01NjMyMCksZisrKSksaSs9MTI4PmM/MToyMDQ4PmM/Mjo2NTUzNj5jPzM6NDtmb3IoYj1lLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoaSk6bmV3IEFycmF5KGkpLGc9MCxmPTA7aT5nO2YrKyljPWEuY2hhckNvZGVBdChmKSw1NTI5Nj09PSg2NDUxMiZjKSYmaD5mKzEmJihkPWEuY2hhckNvZGVBdChmKzEpLDU2MzIwPT09KDY0NTEyJmQpJiYoYz02NTUzNisoYy01NTI5Njw8MTApKyhkLTU2MzIwKSxmKyspKSwxMjg+Yz9iW2crK109YzoyMDQ4PmM/KGJbZysrXT0xOTJ8Yz4+PjYsYltnKytdPTEyOHw2MyZjKTo2NTUzNj5jPyhiW2crK109MjI0fGM+Pj4xMixiW2crK109MTI4fGM+Pj42JjYzLGJbZysrXT0xMjh8NjMmYyk6KGJbZysrXT0yNDB8Yz4+PjE4LGJbZysrXT0xMjh8Yz4+PjEyJjYzLGJbZysrXT0xMjh8Yz4+PjYmNjMsYltnKytdPTEyOHw2MyZjKTtyZXR1cm4gYn0saj1mdW5jdGlvbihhLGIpe3ZhciBjO2ZvcihiPWJ8fGEubGVuZ3RoLGI+YS5sZW5ndGgmJihiPWEubGVuZ3RoKSxjPWItMTtjPj0wJiYxMjg9PT0oMTkyJmFbY10pOyljLS07cmV0dXJuIDA+Yz9iOjA9PT1jP2I6YytnW2FbY11dPmI/YzpifSxrPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGg9YS5sZW5ndGgsaT1uZXcgQXJyYXkoMipoKTtmb3IoYz0wLGI9MDtoPmI7KWlmKGU9YVtiKytdLDEyOD5lKWlbYysrXT1lO2Vsc2UgaWYoZj1nW2VdLGY+NClpW2MrK109NjU1MzMsYis9Zi0xO2Vsc2V7Zm9yKGUmPTI9PT1mPzMxOjM9PT1mPzE1Ojc7Zj4xJiZoPmI7KWU9ZTw8Nnw2MyZhW2IrK10sZi0tO2Y+MT9pW2MrK109NjU1MzM6NjU1MzY+ZT9pW2MrK109ZTooZS09NjU1MzYsaVtjKytdPTU1Mjk2fGU+PjEwJjEwMjMsaVtjKytdPTU2MzIwfDEwMjMmZSl9cmV0dXJuIGkubGVuZ3RoIT09YyYmKGkuc3ViYXJyYXk/aT1pLnN1YmFycmF5KDAsYyk6aS5sZW5ndGg9YyksZC5hcHBseUZyb21DaGFyQ29kZShpKX07Yy51dGY4ZW5jb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBlLm5vZGVidWZmZXI/ZihhLCJ1dGYtOCIpOmkoYSl9LGMudXRmOGRlY29kZT1mdW5jdGlvbihhKXtpZihlLm5vZGVidWZmZXIpcmV0dXJuIGQudHJhbnNmb3JtVG8oIm5vZGVidWZmZXIiLGEpLnRvU3RyaW5nKCJ1dGYtOCIpO2E9ZC50cmFuc2Zvcm1UbyhlLnVpbnQ4YXJyYXk/InVpbnQ4YXJyYXkiOiJhcnJheSIsYSk7Zm9yKHZhciBiPVtdLGM9MCxmPWEubGVuZ3RoLGc9NjU1MzY7Zj5jOyl7dmFyIGg9aihhLE1hdGgubWluKGMrZyxmKSk7Yi5wdXNoKGUudWludDhhcnJheT9rKGEuc3ViYXJyYXkoYyxoKSk6ayhhLnNsaWNlKGMsaCkpKSxjPWh9cmV0dXJuIGIuam9pbigiIil9fSx7Ii4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTcsIi4vdXRpbHMiOjIxfV0sMjE6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhKXtyZXR1cm4gYX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDsrK2MpYltjXT0yNTUmYS5jaGFyQ29kZUF0KGMpO3JldHVybiBifWZ1bmN0aW9uIGYoYSl7dmFyIGI9NjU1MzYsZD1bXSxlPWEubGVuZ3RoLGY9Yy5nZXRUeXBlT2YoYSksZz0wLGg9ITA7dHJ5e3N3aXRjaChmKXtjYXNlInVpbnQ4YXJyYXkiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgwKSk7YnJlYWs7Y2FzZSJub2RlYnVmZmVyIjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsaigwKSl9fWNhdGNoKGkpe2g9ITF9aWYoIWgpe2Zvcih2YXIgaz0iIixsPTA7bDxhLmxlbmd0aDtsKyspays9U3RyaW5nLmZyb21DaGFyQ29kZShhW2xdKTtyZXR1cm4ga31mb3IoO2U+ZyYmYj4xOyl0cnl7ZC5wdXNoKCJhcnJheSI9PT1mfHwibm9kZWJ1ZmZlciI9PT1mP1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxhLnNsaWNlKGcsTWF0aC5taW4oZytiLGUpKSk6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGEuc3ViYXJyYXkoZyxNYXRoLm1pbihnK2IsZSkpKSksZys9Yn1jYXRjaChpKXtiPU1hdGguZmxvb3IoYi8yKX1yZXR1cm4gZC5qb2luKCIiKX1mdW5jdGlvbiBnKGEsYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspYltjXT1hW2NdO3JldHVybiBifXZhciBoPWEoIi4vc3VwcG9ydCIpLGk9YSgiLi9jb21wcmVzc2lvbnMiKSxqPWEoIi4vbm9kZUJ1ZmZlciIpO2Muc3RyaW5nMmJpbmFyeT1mdW5jdGlvbihhKXtmb3IodmFyIGI9IiIsYz0wO2M8YS5sZW5ndGg7YysrKWIrPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmEuY2hhckNvZGVBdChjKSk7cmV0dXJuIGJ9LGMuYXJyYXlCdWZmZXIyQmxvYj1mdW5jdGlvbihhKXtjLmNoZWNrU3VwcG9ydCgiYmxvYiIpO3RyeXtyZXR1cm4gbmV3IEJsb2IoW2FdLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSl9Y2F0Y2goYil7dHJ5e3ZhciBkPXdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyLGU9bmV3IGQ7cmV0dXJuIGUuYXBwZW5kKGEpLGUuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIil9Y2F0Y2goYil7dGhyb3cgbmV3IEVycm9yKCJCdWcgOiBjYW4ndCBjb25zdHJ1Y3QgdGhlIEJsb2IuIil9fX0sYy5hcHBseUZyb21DaGFyQ29kZT1mO3ZhciBrPXt9O2suc3RyaW5nPXtzdHJpbmc6ZCxhcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gZShhLG5ldyBBcnJheShhLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihhKXtyZXR1cm4gay5zdHJpbmcudWludDhhcnJheShhKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSxuZXcgVWludDhBcnJheShhLmxlbmd0aCkpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGEpe3JldHVybiBlKGEsaihhLmxlbmd0aCkpfX0say5hcnJheT17c3RyaW5nOmYsYXJyYXk6ZCxhcnJheWJ1ZmZlcjpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgVWludDhBcnJheShhKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihhKXtyZXR1cm4gaihhKX19LGsuYXJyYXlidWZmZXI9e3N0cmluZzpmdW5jdGlvbihhKXtyZXR1cm4gZihuZXcgVWludDhBcnJheShhKSl9LGFycmF5OmZ1bmN0aW9uKGEpe3JldHVybiBnKG5ldyBVaW50OEFycmF5KGEpLG5ldyBBcnJheShhLmJ5dGVMZW5ndGgpKX0sYXJyYXlidWZmZXI6ZCx1aW50OGFycmF5OmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgVWludDhBcnJheShhKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihhKXtyZXR1cm4gaihuZXcgVWludDhBcnJheShhKSl9fSxrLnVpbnQ4YXJyYXk9e3N0cmluZzpmLGFycmF5OmZ1bmN0aW9uKGEpe3JldHVybiBnKGEsbmV3IEFycmF5KGEubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGEpe3JldHVybiBhLmJ1ZmZlcn0sdWludDhhcnJheTpkLG5vZGVidWZmZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGooYSl9fSxrLm5vZGVidWZmZXI9e3N0cmluZzpmLGFycmF5OmZ1bmN0aW9uKGEpe3JldHVybiBnKGEsbmV3IEFycmF5KGEubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGEpe3JldHVybiBrLm5vZGVidWZmZXIudWludDhhcnJheShhKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIGcoYSxuZXcgVWludDhBcnJheShhLmxlbmd0aCkpfSxub2RlYnVmZmVyOmR9LGMudHJhbnNmb3JtVG89ZnVuY3Rpb24oYSxiKXtpZihifHwoYj0iIiksIWEpcmV0dXJuIGI7Yy5jaGVja1N1cHBvcnQoYSk7dmFyIGQ9Yy5nZXRUeXBlT2YoYiksZT1rW2RdW2FdKGIpO3JldHVybiBlfSxjLmdldFR5cGVPZj1mdW5jdGlvbihhKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGE/InN0cmluZyI6IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKT8iYXJyYXkiOmgubm9kZWJ1ZmZlciYmai50ZXN0KGEpPyJub2RlYnVmZmVyIjpoLnVpbnQ4YXJyYXkmJmEgaW5zdGFuY2VvZiBVaW50OEFycmF5PyJ1aW50OGFycmF5IjpoLmFycmF5YnVmZmVyJiZhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ImFycmF5YnVmZmVyIjp2b2lkIDB9LGMuY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKGEpe3ZhciBiPWhbYS50b0xvd2VyQ2FzZSgpXTtpZighYil0aHJvdyBuZXcgRXJyb3IoYSsiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyIil9LGMuTUFYX1ZBTFVFXzE2QklUUz02NTUzNSxjLk1BWF9WQUxVRV8zMkJJVFM9LTEsYy5wcmV0dHk9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPSIiO2ZvcihjPTA7YzwoYXx8IiIpLmxlbmd0aDtjKyspYj1hLmNoYXJDb2RlQXQoYyksZCs9IlxceCIrKDE2PmI/IjAiOiIiKStiLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBkfSxjLmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gaSlpZihpLmhhc093blByb3BlcnR5KGIpJiZpW2JdLm1hZ2ljPT09YSlyZXR1cm4gaVtiXTtyZXR1cm4gbnVsbH0sYy5pc1JlZ0V4cD1mdW5jdGlvbihhKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX19LHsiLi9jb21wcmVzc2lvbnMiOjMsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTd9XSwyMjpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhLGIpe3RoaXMuZmlsZXM9W10sdGhpcy5sb2FkT3B0aW9ucz1iLGEmJnRoaXMubG9hZChhKX12YXIgZD1hKCIuL3N0cmluZ1JlYWRlciIpLGU9YSgiLi9ub2RlQnVmZmVyUmVhZGVyIiksZj1hKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKSxnPWEoIi4vdXRpbHMiKSxoPWEoIi4vc2lnbmF0dXJlIiksaT1hKCIuL3ppcEVudHJ5Iiksaj1hKCIuL3N1cHBvcnQiKSxrPWEoIi4vb2JqZWN0Iik7Yy5wcm90b3R5cGU9e2NoZWNrU2lnbmF0dXJlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk7aWYoYiE9PWEpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIG9yIGJ1ZyA6IHVuZXhwZWN0ZWQgc2lnbmF0dXJlICgiK2cucHJldHR5KGIpKyIsIGV4cGVjdGVkICIrZy5wcmV0dHkoYSkrIikiKX0scmVhZEJsb2NrRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnppcENvbW1lbnRMZW5ndGg9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLnppcENvbW1lbnQ9dGhpcy5yZWFkZXIucmVhZFN0cmluZyh0aGlzLnppcENvbW1lbnRMZW5ndGgpLHRoaXMuemlwQ29tbWVudD1rLnV0ZjhkZWNvZGUodGhpcy56aXBDb21tZW50KX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMudmVyc2lvbk1hZGVCeT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRlZD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhPXt9O2Zvcih2YXIgYSxiLGMsZD10aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZS00NCxlPTA7ZD5lOylhPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksYj10aGlzLnJlYWRlci5yZWFkSW50KDQpLGM9dGhpcy5yZWFkZXIucmVhZFN0cmluZyhiKSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGFbYV09e2lkOmEsbGVuZ3RoOmIsdmFsdWU6Y319LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuZGlza1dpdGhaaXA2NENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcj10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuZGlza3NDb3VudD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza3NDb3VudD4xKXRocm93IG5ldyBFcnJvcigiTXVsdGktdm9sdW1lcyB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKX0scmVhZExvY2FsRmlsZXM6ZnVuY3Rpb24oKXt2YXIgYSxiO2ZvcihhPTA7YTx0aGlzLmZpbGVzLmxlbmd0aDthKyspYj10aGlzLmZpbGVzW2FdLHRoaXMucmVhZGVyLnNldEluZGV4KGIubG9jYWxIZWFkZXJPZmZzZXQpLHRoaXMuY2hlY2tTaWduYXR1cmUoaC5MT0NBTF9GSUxFX0hFQURFUiksYi5yZWFkTG9jYWxQYXJ0KHRoaXMucmVhZGVyKSxiLmhhbmRsZVVURjgoKX0scmVhZENlbnRyYWxEaXI6ZnVuY3Rpb24oKXt2YXIgYTtmb3IodGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFsRGlyT2Zmc2V0KTt0aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpPT09aC5DRU5UUkFMX0ZJTEVfSEVBREVSOylhPW5ldyBpKHt6aXA2NDp0aGlzLnppcDY0fSx0aGlzLmxvYWRPcHRpb25zKSxhLnJlYWRDZW50cmFsUGFydCh0aGlzLnJlYWRlciksdGhpcy5maWxlcy5wdXNoKGEpfSxyZWFkRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoaC5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpO2lmKC0xPT09YSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIpO2lmKHRoaXMucmVhZGVyLnNldEluZGV4KGEpLHRoaXMuY2hlY2tTaWduYXR1cmUoaC5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrRW5kT2ZDZW50cmFsKCksdGhpcy5kaXNrTnVtYmVyPT09Zy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PT09Zy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz09PWcuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkcz09PWcuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyU2l6ZT09PWcuTUFYX1ZBTFVFXzMyQklUU3x8dGhpcy5jZW50cmFsRGlyT2Zmc2V0PT09Zy5NQVhfVkFMVUVfMzJCSVRTKXtpZih0aGlzLnppcDY0PSEwLGE9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoaC5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSwtMT09PWEpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCB0aGUgWklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3IiKTt0aGlzLnJlYWRlci5zZXRJbmRleChhKSx0aGlzLmNoZWNrU2lnbmF0dXJlKGguWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3IoKSx0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIpLHRoaXMuY2hlY2tTaWduYXR1cmUoaC5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWwoKX19LHByZXBhcmVSZWFkZXI6ZnVuY3Rpb24oYSl7dmFyIGI9Zy5nZXRUeXBlT2YoYSk7dGhpcy5yZWFkZXI9InN0cmluZyIhPT1ifHxqLnVpbnQ4YXJyYXk/Im5vZGVidWZmZXIiPT09Yj9uZXcgZShhKTpuZXcgZihnLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixhKSk6bmV3IGQoYSx0aGlzLmxvYWRPcHRpb25zLm9wdGltaXplZEJpbmFyeVN0cmluZyl9LGxvYWQ6ZnVuY3Rpb24oYSl7dGhpcy5wcmVwYXJlUmVhZGVyKGEpLHRoaXMucmVhZEVuZE9mQ2VudHJhbCgpLHRoaXMucmVhZENlbnRyYWxEaXIoKSx0aGlzLnJlYWRMb2NhbEZpbGVzKCl9fSxiLmV4cG9ydHM9Y30seyIuL25vZGVCdWZmZXJSZWFkZXIiOjEyLCIuL29iamVjdCI6MTMsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlSZWFkZXIiOjE4LCIuL3V0aWxzIjoyMSwiLi96aXBFbnRyeSI6MjN9XSwyMzpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhLGIpe3RoaXMub3B0aW9ucz1hLHRoaXMubG9hZE9wdGlvbnM9Yn12YXIgZD1hKCIuL3N0cmluZ1JlYWRlciIpLGU9YSgiLi91dGlscyIpLGY9YSgiLi9jb21wcmVzc2VkT2JqZWN0IiksZz1hKCIuL29iamVjdCIpO2MucHJvdG90eXBlPXtpc0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybiAxPT09KDEmdGhpcy5iaXRGbGFnKX0sdXNlVVRGODpmdW5jdGlvbigpe3JldHVybiAyMDQ4PT09KDIwNDgmdGhpcy5iaXRGbGFnKX0scHJlcGFyZUNvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1hLmluZGV4O2Euc2V0SW5kZXgoYik7dmFyIGU9YS5yZWFkRGF0YShjKTtyZXR1cm4gYS5zZXRJbmRleChkKSxlfX0scHJlcGFyZUNvbnRlbnQ6ZnVuY3Rpb24oYSxiLGMsZCxmKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1lLnRyYW5zZm9ybVRvKGQudW5jb21wcmVzc0lucHV0VHlwZSx0aGlzLmdldENvbXByZXNzZWRDb250ZW50KCkpLGI9ZC51bmNvbXByZXNzKGEpO2lmKGIubGVuZ3RoIT09Zil0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0Y2giKTtyZXR1cm4gYn19LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oYSl7dmFyIGIsYztpZihhLnNraXAoMjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9YS5yZWFkSW50KDIpLGM9YS5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9YS5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpLGEuc2tpcChjKSwtMT09dGhpcy5jb21wcmVzc2VkU2l6ZXx8LTE9PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZyBvciBjb3JydXB0ZWQgemlwIDogZGlkbid0IGdldCBlbm91Z2ggaW5mb3JtYXRpb25zIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PSAtMSB8fCB1bmNvbXByZXNzZWRTaXplID09IC0xKSIpO2lmKGI9ZS5maW5kQ29tcHJlc3Npb24odGhpcy5jb21wcmVzc2lvbk1ldGhvZCksbnVsbD09PWIpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gIitlLnByZXR0eSh0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSsiIHVua25vd24gKGlubmVyIGZpbGUgOiAiK3RoaXMuZmlsZU5hbWUrIikiKTtpZih0aGlzLmRlY29tcHJlc3NlZD1uZXcgZix0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2VkU2l6ZT10aGlzLmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLnVuY29tcHJlc3NlZFNpemU9dGhpcy51bmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLmNyYzMyPXRoaXMuY3JjMzIsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3Npb25NZXRob2Q9dGhpcy5jb21wcmVzc2lvbk1ldGhvZCx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb21wcmVzc2VkQ29udGVudD10aGlzLnByZXBhcmVDb21wcmVzc2VkQ29udGVudChhLGEuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxiKSx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50PXRoaXMucHJlcGFyZUNvbnRlbnQoYSxhLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsYix0aGlzLnVuY29tcHJlc3NlZFNpemUpLHRoaXMubG9hZE9wdGlvbnMuY2hlY2tDUkMzMiYmKHRoaXMuZGVjb21wcmVzc2VkPWUudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudCgpKSxnLmNyYzMyKHRoaXMuZGVjb21wcmVzc2VkKSE9PXRoaXMuY3JjMzIpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIil9LHJlYWRDZW50cmFsUGFydDpmdW5jdGlvbihhKXtpZih0aGlzLnZlcnNpb25NYWRlQnk9YS5yZWFkU3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRlZD1hLnJlYWRJbnQoMiksdGhpcy5iaXRGbGFnPWEucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPWEucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9YS5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9YS5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9YS5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1hLnJlYWRJbnQoNCksdGhpcy5maWxlTmFtZUxlbmd0aD1hLnJlYWRJbnQoMiksdGhpcy5leHRyYUZpZWxkc0xlbmd0aD1hLnJlYWRJbnQoMiksdGhpcy5maWxlQ29tbWVudExlbmd0aD1hLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9YS5yZWFkSW50KDIpLHRoaXMuaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1hLnJlYWRJbnQoMiksdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPWEucmVhZEludCg0KSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PWEucmVhZEludCg0KSx0aGlzLmlzRW5jcnlwdGVkKCkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0ZWQgemlwIGFyZSBub3Qgc3VwcG9ydGVkIik7dGhpcy5maWxlTmFtZT1hLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoYSksdGhpcy5wYXJzZVpJUDY0RXh0cmFGaWVsZChhKSx0aGlzLmZpbGVDb21tZW50PWEucmVhZFN0cmluZyh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKSx0aGlzLmRpcj0xNiZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXM/ITA6ITF9LHBhcnNlWklQNjRFeHRyYUZpZWxkOmZ1bmN0aW9uKCl7aWYodGhpcy5leHRyYUZpZWxkc1sxXSl7dmFyIGE9bmV3IGQodGhpcy5leHRyYUZpZWxkc1sxXS52YWx1ZSk7dGhpcy51bmNvbXByZXNzZWRTaXplPT09ZS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy51bmNvbXByZXNzZWRTaXplPWEucmVhZEludCg4KSksdGhpcy5jb21wcmVzc2VkU2l6ZT09PWUuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuY29tcHJlc3NlZFNpemU9YS5yZWFkSW50KDgpKSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PT09ZS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5sb2NhbEhlYWRlck9mZnNldD1hLnJlYWRJbnQoOCkpLHRoaXMuZGlza051bWJlclN0YXJ0PT09ZS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5kaXNrTnVtYmVyU3RhcnQ9YS5yZWFkSW50KDQpKX19LHJlYWRFeHRyYUZpZWxkczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT1hLmluZGV4O2Zvcih0aGlzLmV4dHJhRmllbGRzPXRoaXMuZXh0cmFGaWVsZHN8fHt9O2EuaW5kZXg8ZSt0aGlzLmV4dHJhRmllbGRzTGVuZ3RoOyliPWEucmVhZEludCgyKSxjPWEucmVhZEludCgyKSxkPWEucmVhZFN0cmluZyhjKSx0aGlzLmV4dHJhRmllbGRzW2JdPXtpZDpiLGxlbmd0aDpjLHZhbHVlOmR9fSxoYW5kbGVVVEY4OmZ1bmN0aW9uKCl7aWYodGhpcy51c2VVVEY4KCkpdGhpcy5maWxlTmFtZT1nLnV0ZjhkZWNvZGUodGhpcy5maWxlTmFtZSksdGhpcy5maWxlQ29tbWVudD1nLnV0ZjhkZWNvZGUodGhpcy5maWxlQ29tbWVudCk7ZWxzZXt2YXIgYT10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGgoKTtudWxsIT09YSYmKHRoaXMuZmlsZU5hbWU9YSk7dmFyIGI9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50KCk7bnVsbCE9PWImJih0aGlzLmZpbGVDb21tZW50PWIpfX0sZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZXh0cmFGaWVsZHNbMjg3ODldO2lmKGEpe3ZhciBiPW5ldyBkKGEudmFsdWUpO3JldHVybiAxIT09Yi5yZWFkSW50KDEpP251bGw6Zy5jcmMzMih0aGlzLmZpbGVOYW1lKSE9PWIucmVhZEludCg0KT9udWxsOmcudXRmOGRlY29kZShiLnJlYWRTdHJpbmcoYS5sZW5ndGgtNSkpfXJldHVybiBudWxsfSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5leHRyYUZpZWxkc1syNTQ2MV07aWYoYSl7dmFyIGI9bmV3IGQoYS52YWx1ZSk7cmV0dXJuIDEhPT1iLnJlYWRJbnQoMSk/bnVsbDpnLmNyYzMyKHRoaXMuZmlsZUNvbW1lbnQpIT09Yi5yZWFkSW50KDQpP251bGw6Zy51dGY4ZGVjb2RlKGIucmVhZFN0cmluZyhhLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSxiLmV4cG9ydHM9Y30seyIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vb2JqZWN0IjoxMywiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3V0aWxzIjoyMX1dLDI0OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz1hKCIuL2xpYi91dGlscy9jb21tb24iKS5hc3NpZ24sZD1hKCIuL2xpYi9kZWZsYXRlIiksZT1hKCIuL2xpYi9pbmZsYXRlIiksZj1hKCIuL2xpYi96bGliL2NvbnN0YW50cyIpLGc9e307YyhnLGQsZSxmKSxiLmV4cG9ydHM9Z30seyIuL2xpYi9kZWZsYXRlIjoyNSwiLi9saWIvaW5mbGF0ZSI6MjYsIi4vbGliL3V0aWxzL2NvbW1vbiI6MjcsIi4vbGliL3psaWIvY29uc3RhbnRzIjozMH1dLDI1OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSxiKXt2YXIgYz1uZXcgcyhiKTtpZihjLnB1c2goYSwhMCksYy5lcnIpdGhyb3cgYy5tc2c7cmV0dXJuIGMucmVzdWx0fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gYj1ifHx7fSxiLnJhdz0hMCxkKGEsYil9ZnVuY3Rpb24gZihhLGIpe3JldHVybiBiPWJ8fHt9LGIuZ3ppcD0hMCxkKGEsYil9dmFyIGc9YSgiLi96bGliL2RlZmxhdGUuanMiKSxoPWEoIi4vdXRpbHMvY29tbW9uIiksaT1hKCIuL3V0aWxzL3N0cmluZ3MiKSxqPWEoIi4vemxpYi9tZXNzYWdlcyIpLGs9YSgiLi96bGliL3pzdHJlYW0iKSxsPTAsbT00LG49MCxvPTEscD0tMSxxPTAscj04LHM9ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zPWguYXNzaWduKHtsZXZlbDpwLG1ldGhvZDpyLGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6cSx0bzoiIn0sYXx8e30pO3ZhciBiPXRoaXMub3B0aW9ucztiLnJhdyYmYi53aW5kb3dCaXRzPjA/Yi53aW5kb3dCaXRzPS1iLndpbmRvd0JpdHM6Yi5nemlwJiZiLndpbmRvd0JpdHM+MCYmYi53aW5kb3dCaXRzPDE2JiYoYi53aW5kb3dCaXRzKz0xNiksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgayx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIGM9Zy5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLGIubGV2ZWwsYi5tZXRob2QsYi53aW5kb3dCaXRzLGIubWVtTGV2ZWwsYi5zdHJhdGVneSk7aWYoYyE9PW4pdGhyb3cgbmV3IEVycm9yKGpbY10pO2IuaGVhZGVyJiZnLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLGIuaGVhZGVyKX07cy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZT10aGlzLnN0cm0sZj10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7ZD1iPT09fn5iP2I6Yj09PSEwP206bCxlLmlucHV0PSJzdHJpbmciPT10eXBlb2YgYT9pLnN0cmluZzJidWYoYSk6YSxlLm5leHRfaW49MCxlLmF2YWlsX2luPWUuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1lLmF2YWlsX291dCYmKGUub3V0cHV0PW5ldyBoLkJ1ZjgoZiksZS5uZXh0X291dD0wLGUuYXZhaWxfb3V0PWYpLGM9Zy5kZWZsYXRlKGUsZCksYyE9PW8mJmMhPT1uKXJldHVybiB0aGlzLm9uRW5kKGMpLHRoaXMuZW5kZWQ9ITAsITE7KDA9PT1lLmF2YWlsX291dHx8MD09PWUuYXZhaWxfaW4mJmQ9PT1tKSYmdGhpcy5vbkRhdGEoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/aS5idWYyYmluc3RyaW5nKGguc2hyaW5rQnVmKGUub3V0cHV0LGUubmV4dF9vdXQpKTpoLnNocmlua0J1ZihlLm91dHB1dCxlLm5leHRfb3V0KSl9d2hpbGUoKGUuYXZhaWxfaW4+MHx8MD09PWUuYXZhaWxfb3V0KSYmYyE9PW8pO3JldHVybiBkPT09bT8oYz1nLmRlZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKGMpLHRoaXMuZW5kZWQ9ITAsYz09PW4pOiEwfSxzLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oYSl7dGhpcy5jaHVua3MucHVzaChhKX0scy5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oYSl7YT09PW4mJih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpoLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1hLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LGMuRGVmbGF0ZT1zLGMuZGVmbGF0ZT1kLGMuZGVmbGF0ZVJhdz1lLGMuZ3ppcD1mfSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2RlZmxhdGUuanMiOjMyLCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwyNjpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEsYil7dmFyIGM9bmV3IG0oYik7aWYoYy5wdXNoKGEsITApLGMuZXJyKXRocm93IGMubXNnO3JldHVybiBjLnJlc3VsdH1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGI9Ynx8e30sYi5yYXc9ITAsZChhLGIpfXZhciBmPWEoIi4vemxpYi9pbmZsYXRlLmpzIiksZz1hKCIuL3V0aWxzL2NvbW1vbiIpLGg9YSgiLi91dGlscy9zdHJpbmdzIiksaT1hKCIuL3psaWIvY29uc3RhbnRzIiksaj1hKCIuL3psaWIvbWVzc2FnZXMiKSxrPWEoIi4vemxpYi96c3RyZWFtIiksbD1hKCIuL3psaWIvZ3poZWFkZXIiKSxtPWZ1bmN0aW9uKGEpe3RoaXMub3B0aW9ucz1nLmFzc2lnbih7Y2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MCx0bzoiIn0sYXx8e30pO3ZhciBiPXRoaXMub3B0aW9ucztiLnJhdyYmYi53aW5kb3dCaXRzPj0wJiZiLndpbmRvd0JpdHM8MTYmJihiLndpbmRvd0JpdHM9LWIud2luZG93Qml0cywwPT09Yi53aW5kb3dCaXRzJiYoYi53aW5kb3dCaXRzPS0xNSkpLCEoYi53aW5kb3dCaXRzPj0wJiZiLndpbmRvd0JpdHM8MTYpfHxhJiZhLndpbmRvd0JpdHN8fChiLndpbmRvd0JpdHMrPTMyKSxiLndpbmRvd0JpdHM+MTUmJmIud2luZG93Qml0czw0OCYmMD09PSgxNSZiLndpbmRvd0JpdHMpJiYoYi53aW5kb3dCaXRzfD0xNSksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgayx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIGM9Zi5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLGIud2luZG93Qml0cyk7aWYoYyE9PWkuWl9PSyl0aHJvdyBuZXcgRXJyb3IoaltjXSk7dGhpcy5oZWFkZXI9bmV3IGwsZi5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSx0aGlzLmhlYWRlcil9O20ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsaixrLGw9dGhpcy5zdHJtLG09dGhpcy5vcHRpb25zLmNodW5rU2l6ZTtpZih0aGlzLmVuZGVkKXJldHVybiExO2Q9Yj09PX5+Yj9iOmI9PT0hMD9pLlpfRklOSVNIOmkuWl9OT19GTFVTSCxsLmlucHV0PSJzdHJpbmciPT10eXBlb2YgYT9oLmJpbnN0cmluZzJidWYoYSk6YSxsLm5leHRfaW49MCxsLmF2YWlsX2luPWwuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1sLmF2YWlsX291dCYmKGwub3V0cHV0PW5ldyBnLkJ1ZjgobSksbC5uZXh0X291dD0wLGwuYXZhaWxfb3V0PW0pLGM9Zi5pbmZsYXRlKGwsaS5aX05PX0ZMVVNIKSxjIT09aS5aX1NUUkVBTV9FTkQmJmMhPT1pLlpfT0spcmV0dXJuIHRoaXMub25FbmQoYyksdGhpcy5lbmRlZD0hMCwhMTtsLm5leHRfb3V0JiYoMD09PWwuYXZhaWxfb3V0fHxjPT09aS5aX1NUUkVBTV9FTkR8fDA9PT1sLmF2YWlsX2luJiZkPT09aS5aX0ZJTklTSCkmJigic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz8oZT1oLnV0Zjhib3JkZXIobC5vdXRwdXQsbC5uZXh0X291dCksaj1sLm5leHRfb3V0LWUsaz1oLmJ1ZjJzdHJpbmcobC5vdXRwdXQsZSksbC5uZXh0X291dD1qLGwuYXZhaWxfb3V0PW0taixqJiZnLmFycmF5U2V0KGwub3V0cHV0LGwub3V0cHV0LGUsaiwwKSx0aGlzLm9uRGF0YShrKSk6dGhpcy5vbkRhdGEoZy5zaHJpbmtCdWYobC5vdXRwdXQsbC5uZXh0X291dCkpKX13aGlsZShsLmF2YWlsX2luPjAmJmMhPT1pLlpfU1RSRUFNX0VORCk7cmV0dXJuIGM9PT1pLlpfU1RSRUFNX0VORCYmKGQ9aS5aX0ZJTklTSCksZD09PWkuWl9GSU5JU0g/KGM9Zi5pbmZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChjKSx0aGlzLmVuZGVkPSEwLGM9PT1pLlpfT0spOiEwfSxtLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oYSl7dGhpcy5jaHVua3MucHVzaChhKX0sbS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oYSl7YT09PWkuWl9PSyYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOmcuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWEsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sYy5JbmZsYXRlPW0sYy5pbmZsYXRlPWQsYy5pbmZsYXRlUmF3PWUsYy51bmd6aXA9ZH0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMvc3RyaW5ncyI6MjgsIi4vemxpYi9jb25zdGFudHMiOjMwLCIuL3psaWIvZ3poZWFkZXIiOjMzLCIuL3psaWIvaW5mbGF0ZS5qcyI6MzUsIi4vemxpYi9tZXNzYWdlcyI6MzcsIi4vemxpYi96c3RyZWFtIjozOX1dLDI3OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheSYmInVuZGVmaW5lZCIhPXR5cGVvZiBVaW50MTZBcnJheSYmInVuZGVmaW5lZCIhPXR5cGVvZiBJbnQzMkFycmF5O2MuYXNzaWduPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7Yi5sZW5ndGg7KXt2YXIgYz1iLnNoaWZ0KCk7aWYoYyl7aWYoIm9iamVjdCIhPXR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoYysibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBkIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShkKSYmKGFbZF09Y1tkXSl9fXJldHVybiBhfSxjLnNocmlua0J1Zj1mdW5jdGlvbihhLGIpe3JldHVybiBhLmxlbmd0aD09PWI/YTphLnN1YmFycmF5P2Euc3ViYXJyYXkoMCxiKTooYS5sZW5ndGg9YixhKX07dmFyIGU9e2FycmF5U2V0OmZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoYi5zdWJhcnJheSYmYS5zdWJhcnJheSlyZXR1cm4gdm9pZCBhLnNldChiLnN1YmFycmF5KGMsYytkKSxlKTtmb3IodmFyIGY9MDtkPmY7ZisrKWFbZStmXT1iW2MrZl19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnO2ZvcihkPTAsYj0wLGM9YS5sZW5ndGg7Yz5iO2IrKylkKz1hW2JdLmxlbmd0aDtmb3IoZz1uZXcgVWludDhBcnJheShkKSxlPTAsYj0wLGM9YS5sZW5ndGg7Yz5iO2IrKylmPWFbYl0sZy5zZXQoZixlKSxlKz1mLmxlbmd0aDtyZXR1cm4gZ319LGY9e2FycmF5U2V0OmZ1bmN0aW9uKGEsYixjLGQsZSl7Zm9yKHZhciBmPTA7ZD5mO2YrKylhW2UrZl09YltjK2ZdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKGEpe3JldHVybltdLmNvbmNhdC5hcHBseShbXSxhKX19O2Muc2V0VHlwZWQ9ZnVuY3Rpb24oYSl7YT8oYy5CdWY4PVVpbnQ4QXJyYXksYy5CdWYxNj1VaW50MTZBcnJheSxjLkJ1ZjMyPUludDMyQXJyYXksYy5hc3NpZ24oYyxlKSk6KGMuQnVmOD1BcnJheSxjLkJ1ZjE2PUFycmF5LGMuQnVmMzI9QXJyYXksYy5hc3NpZ24oYyxmKSl9LGMuc2V0VHlwZWQoZCl9LHt9XSwyODpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEsYil7aWYoNjU1Mzc+YiYmKGEuc3ViYXJyYXkmJmd8fCFhLnN1YmFycmF5JiZmKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc2hyaW5rQnVmKGEsYikpO2Zvcih2YXIgYz0iIixkPTA7Yj5kO2QrKyljKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFbZF0pO3JldHVybiBjfXZhciBlPWEoIi4vY29tbW9uIiksZj0hMCxnPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsWzBdKX1jYXRjaChoKXtmPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoKGgpe2c9ITF9Zm9yKHZhciBpPW5ldyBlLkJ1ZjgoMjU2KSxqPTA7MjU2Pmo7aisrKWlbal09aj49MjUyPzY6aj49MjQ4PzU6aj49MjQwPzQ6aj49MjI0PzM6aj49MTkyPzI6MTtpWzI1NF09aVsyNTRdPTEsYy5zdHJpbmcyYnVmPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxmLGcsaD1hLmxlbmd0aCxpPTA7Zm9yKGY9MDtoPmY7ZisrKWM9YS5jaGFyQ29kZUF0KGYpLDU1Mjk2PT09KDY0NTEyJmMpJiZoPmYrMSYmKGQ9YS5jaGFyQ29kZUF0KGYrMSksNTYzMjA9PT0oNjQ1MTImZCkmJihjPTY1NTM2KyhjLTU1Mjk2PDwxMCkrKGQtNTYzMjApLGYrKykpLGkrPTEyOD5jPzE6MjA0OD5jPzI6NjU1MzY+Yz8zOjQ7Zm9yKGI9bmV3IGUuQnVmOChpKSxnPTAsZj0wO2k+ZztmKyspYz1hLmNoYXJDb2RlQXQoZiksNTUyOTY9PT0oNjQ1MTImYykmJmg+ZisxJiYoZD1hLmNoYXJDb2RlQXQoZisxKSw1NjMyMD09PSg2NDUxMiZkKSYmKGM9NjU1MzYrKGMtNTUyOTY8PDEwKSsoZC01NjMyMCksZisrKSksMTI4PmM/YltnKytdPWM6MjA0OD5jPyhiW2crK109MTkyfGM+Pj42LGJbZysrXT0xMjh8NjMmYyk6NjU1MzY+Yz8oYltnKytdPTIyNHxjPj4+MTIsYltnKytdPTEyOHxjPj4+NiY2MyxiW2crK109MTI4fDYzJmMpOihiW2crK109MjQwfGM+Pj4xOCxiW2crK109MTI4fGM+Pj4xMiY2MyxiW2crK109MTI4fGM+Pj42JjYzLGJbZysrXT0xMjh8NjMmYyk7cmV0dXJuIGJ9LGMuYnVmMmJpbnN0cmluZz1mdW5jdGlvbihhKXtyZXR1cm4gZChhLGEubGVuZ3RoKX0sYy5iaW5zdHJpbmcyYnVmPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1uZXcgZS5CdWY4KGEubGVuZ3RoKSxjPTAsZD1iLmxlbmd0aDtkPmM7YysrKWJbY109YS5jaGFyQ29kZUF0KGMpO3JldHVybiBifSxjLmJ1ZjJzdHJpbmc9ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZyxoPWJ8fGEubGVuZ3RoLGo9bmV3IEFycmF5KDIqaCk7Zm9yKGU9MCxjPTA7aD5jOylpZihmPWFbYysrXSwxMjg+ZilqW2UrK109ZjtlbHNlIGlmKGc9aVtmXSxnPjQpaltlKytdPTY1NTMzLGMrPWctMTtlbHNle2ZvcihmJj0yPT09Zz8zMTozPT09Zz8xNTo3O2c+MSYmaD5jOylmPWY8PDZ8NjMmYVtjKytdLGctLTtnPjE/altlKytdPTY1NTMzOjY1NTM2PmY/altlKytdPWY6KGYtPTY1NTM2LGpbZSsrXT01NTI5NnxmPj4xMCYxMDIzLGpbZSsrXT01NjMyMHwxMDIzJmYpfXJldHVybiBkKGosZSl9LGMudXRmOGJvcmRlcj1mdW5jdGlvbihhLGIpe3ZhciBjO2ZvcihiPWJ8fGEubGVuZ3RoLGI+YS5sZW5ndGgmJihiPWEubGVuZ3RoKSxjPWItMTtjPj0wJiYxMjg9PT0oMTkyJmFbY10pOyljLS07cmV0dXJuIDA+Yz9iOjA9PT1jP2I6YytpW2FbY11dPmI/YzpifX0seyIuL2NvbW1vbiI6Mjd9XSwyOTpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhLGIsYyxkKXtmb3IodmFyIGU9NjU1MzUmYXwwLGY9YT4+PjE2JjY1NTM1fDAsZz0wOzAhPT1jOyl7Zz1jPjJlMz8yZTM6YyxjLT1nO2RvIGU9ZStiW2QrK118MCxmPWYrZXwwO3doaWxlKC0tZyk7ZSU9NjU1MjEsZiU9NjU1MjF9cmV0dXJuIGV8Zjw8MTZ8MH1iLmV4cG9ydHM9Y30se31dLDMwOltmdW5jdGlvbihhLGIpe2IuZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fX0se31dLDMxOltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKCl7Zm9yKHZhciBhLGI9W10sYz0wOzI1Nj5jO2MrKyl7YT1jO2Zvcih2YXIgZD0wOzg+ZDtkKyspYT0xJmE/Mzk4ODI5MjM4NF5hPj4+MTphPj4+MTtiW2NdPWF9cmV0dXJuIGJ9ZnVuY3Rpb24gZChhLGIsYyxkKXt2YXIgZj1lLGc9ZCtjO2E9LTFeYTtmb3IodmFyIGg9ZDtnPmg7aCsrKWE9YT4+PjheZlsyNTUmKGFeYltoXSldO3JldHVybi0xXmF9dmFyIGU9YygpO2IuZXhwb3J0cz1kfSx7fV0sMzI6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhLm1zZz1HW2JdLGJ9ZnVuY3Rpb24gZShhKXtyZXR1cm4oYTw8MSktKGE+ND85OjApfWZ1bmN0aW9uIGYoYSl7Zm9yKHZhciBiPWEubGVuZ3RoOy0tYj49MDspYVtiXT0wfWZ1bmN0aW9uIGcoYSl7dmFyIGI9YS5zdGF0ZSxjPWIucGVuZGluZztjPmEuYXZhaWxfb3V0JiYoYz1hLmF2YWlsX291dCksMCE9PWMmJihDLmFycmF5U2V0KGEub3V0cHV0LGIucGVuZGluZ19idWYsYi5wZW5kaW5nX291dCxjLGEubmV4dF9vdXQpLGEubmV4dF9vdXQrPWMsYi5wZW5kaW5nX291dCs9YyxhLnRvdGFsX291dCs9YyxhLmF2YWlsX291dC09YyxiLnBlbmRpbmctPWMsMD09PWIucGVuZGluZyYmKGIucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIGgoYSxiKXtELl90cl9mbHVzaF9ibG9jayhhLGEuYmxvY2tfc3RhcnQ+PTA/YS5ibG9ja19zdGFydDotMSxhLnN0cnN0YXJ0LWEuYmxvY2tfc3RhcnQsYiksYS5ibG9ja19zdGFydD1hLnN0cnN0YXJ0LGcoYS5zdHJtKX1mdW5jdGlvbiBpKGEsYil7YS5wZW5kaW5nX2J1ZlthLnBlbmRpbmcrK109Yn1mdW5jdGlvbiBqKGEsYil7YS5wZW5kaW5nX2J1ZlthLnBlbmRpbmcrK109Yj4+PjgmMjU1LGEucGVuZGluZ19idWZbYS5wZW5kaW5nKytdPTI1NSZifWZ1bmN0aW9uIGsoYSxiLGMsZCl7dmFyIGU9YS5hdmFpbF9pbjtyZXR1cm4gZT5kJiYoZT1kKSwwPT09ZT8wOihhLmF2YWlsX2luLT1lLEMuYXJyYXlTZXQoYixhLmlucHV0LGEubmV4dF9pbixlLGMpLDE9PT1hLnN0YXRlLndyYXA/YS5hZGxlcj1FKGEuYWRsZXIsYixlLGMpOjI9PT1hLnN0YXRlLndyYXAmJihhLmFkbGVyPUYoYS5hZGxlcixiLGUsYykpLGEubmV4dF9pbis9ZSxhLnRvdGFsX2luKz1lLGUpfWZ1bmN0aW9uIGwoYSxiKXt2YXIgYyxkLGU9YS5tYXhfY2hhaW5fbGVuZ3RoLGY9YS5zdHJzdGFydCxnPWEucHJldl9sZW5ndGgsaD1hLm5pY2VfbWF0Y2gsaT1hLnN0cnN0YXJ0PmEud19zaXplLWpiP2Euc3Ryc3RhcnQtKGEud19zaXplLWpiKTowLGo9YS53aW5kb3csaz1hLndfbWFzayxsPWEucHJldixtPWEuc3Ryc3RhcnQraWIsbj1qW2YrZy0xXSxvPWpbZitnXTthLnByZXZfbGVuZ3RoPj1hLmdvb2RfbWF0Y2gmJihlPj49MiksaD5hLmxvb2thaGVhZCYmKGg9YS5sb29rYWhlYWQpO2RvIGlmKGM9YixqW2MrZ109PT1vJiZqW2MrZy0xXT09PW4mJmpbY109PT1qW2ZdJiZqWysrY109PT1qW2YrMV0pe2YrPTIsYysrO2RvO3doaWxlKGpbKytmXT09PWpbKytjXSYmalsrK2ZdPT09alsrK2NdJiZqWysrZl09PT1qWysrY10mJmpbKytmXT09PWpbKytjXSYmalsrK2ZdPT09alsrK2NdJiZqWysrZl09PT1qWysrY10mJmpbKytmXT09PWpbKytjXSYmalsrK2ZdPT09alsrK2NdJiZtPmYpO2lmKGQ9aWItKG0tZiksZj1tLWliLGQ+Zyl7aWYoYS5tYXRjaF9zdGFydD1iLGc9ZCxkPj1oKWJyZWFrO249altmK2ctMV0sbz1qW2YrZ119fXdoaWxlKChiPWxbYiZrXSk+aSYmMCE9PS0tZSk7cmV0dXJuIGc8PWEubG9va2FoZWFkP2c6YS5sb29rYWhlYWR9ZnVuY3Rpb24gbShhKXt2YXIgYixjLGQsZSxmLGc9YS53X3NpemU7ZG97aWYoZT1hLndpbmRvd19zaXplLWEubG9va2FoZWFkLWEuc3Ryc3RhcnQsYS5zdHJzdGFydD49ZysoZy1qYikpe0MuYXJyYXlTZXQoYS53aW5kb3csYS53aW5kb3csZyxnLDApLGEubWF0Y2hfc3RhcnQtPWcsYS5zdHJzdGFydC09ZyxhLmJsb2NrX3N0YXJ0LT1nLGM9YS5oYXNoX3NpemUsYj1jO2RvIGQ9YS5oZWFkWy0tYl0sYS5oZWFkW2JdPWQ+PWc/ZC1nOjA7d2hpbGUoLS1jKTtjPWcsYj1jO2RvIGQ9YS5wcmV2Wy0tYl0sYS5wcmV2W2JdPWQ+PWc/ZC1nOjA7d2hpbGUoLS1jKTtlKz1nfWlmKDA9PT1hLnN0cm0uYXZhaWxfaW4pYnJlYWs7aWYoYz1rKGEuc3RybSxhLndpbmRvdyxhLnN0cnN0YXJ0K2EubG9va2FoZWFkLGUpLGEubG9va2FoZWFkKz1jLGEubG9va2FoZWFkK2EuaW5zZXJ0Pj1oYilmb3IoZj1hLnN0cnN0YXJ0LWEuaW5zZXJ0LGEuaW5zX2g9YS53aW5kb3dbZl0sYS5pbnNfaD0oYS5pbnNfaDw8YS5oYXNoX3NoaWZ0XmEud2luZG93W2YrMV0pJmEuaGFzaF9tYXNrO2EuaW5zZXJ0JiYoYS5pbnNfaD0oYS5pbnNfaDw8YS5oYXNoX3NoaWZ0XmEud2luZG93W2YraGItMV0pJmEuaGFzaF9tYXNrLGEucHJldltmJmEud19tYXNrXT1hLmhlYWRbYS5pbnNfaF0sYS5oZWFkW2EuaW5zX2hdPWYsZisrLGEuaW5zZXJ0LS0sIShhLmxvb2thaGVhZCthLmluc2VydDxoYikpOyk7fXdoaWxlKGEubG9va2FoZWFkPGpiJiYwIT09YS5zdHJtLmF2YWlsX2luKX1mdW5jdGlvbiBuKGEsYil7dmFyIGM9NjU1MzU7Zm9yKGM+YS5wZW5kaW5nX2J1Zl9zaXplLTUmJihjPWEucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihhLmxvb2thaGVhZDw9MSl7aWYobShhKSwwPT09YS5sb29rYWhlYWQmJmI9PT1IKXJldHVybiBzYjtpZigwPT09YS5sb29rYWhlYWQpYnJlYWt9YS5zdHJzdGFydCs9YS5sb29rYWhlYWQsYS5sb29rYWhlYWQ9MDt2YXIgZD1hLmJsb2NrX3N0YXJ0K2M7aWYoKDA9PT1hLnN0cnN0YXJ0fHxhLnN0cnN0YXJ0Pj1kKSYmKGEubG9va2FoZWFkPWEuc3Ryc3RhcnQtZCxhLnN0cnN0YXJ0PWQsaChhLCExKSwwPT09YS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIHNiO2lmKGEuc3Ryc3RhcnQtYS5ibG9ja19zdGFydD49YS53X3NpemUtamImJihoKGEsITEpLDA9PT1hLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gc2J9cmV0dXJuIGEuaW5zZXJ0PTAsYj09PUs/KGgoYSwhMCksMD09PWEuc3RybS5hdmFpbF9vdXQ/dWI6dmIpOmEuc3Ryc3RhcnQ+YS5ibG9ja19zdGFydCYmKGgoYSwhMSksMD09PWEuc3RybS5hdmFpbF9vdXQpP3NiOnNifWZ1bmN0aW9uIG8oYSxiKXtmb3IodmFyIGMsZDs7KXtpZihhLmxvb2thaGVhZDxqYil7aWYobShhKSxhLmxvb2thaGVhZDxqYiYmYj09PUgpcmV0dXJuIHNiO2lmKDA9PT1hLmxvb2thaGVhZClicmVha31pZihjPTAsYS5sb29rYWhlYWQ+PWhiJiYoYS5pbnNfaD0oYS5pbnNfaDw8YS5oYXNoX3NoaWZ0XmEud2luZG93W2Euc3Ryc3RhcnQraGItMV0pJmEuaGFzaF9tYXNrLGM9YS5wcmV2W2Euc3Ryc3RhcnQmYS53X21hc2tdPWEuaGVhZFthLmluc19oXSxhLmhlYWRbYS5pbnNfaF09YS5zdHJzdGFydCksMCE9PWMmJmEuc3Ryc3RhcnQtYzw9YS53X3NpemUtamImJihhLm1hdGNoX2xlbmd0aD1sKGEsYykpLGEubWF0Y2hfbGVuZ3RoPj1oYilpZihkPUQuX3RyX3RhbGx5KGEsYS5zdHJzdGFydC1hLm1hdGNoX3N0YXJ0LGEubWF0Y2hfbGVuZ3RoLWhiKSxhLmxvb2thaGVhZC09YS5tYXRjaF9sZW5ndGgsYS5tYXRjaF9sZW5ndGg8PWEubWF4X2xhenlfbWF0Y2gmJmEubG9va2FoZWFkPj1oYil7YS5tYXRjaF9sZW5ndGgtLTtkbyBhLnN0cnN0YXJ0KyssYS5pbnNfaD0oYS5pbnNfaDw8YS5oYXNoX3NoaWZ0XmEud2luZG93W2Euc3Ryc3RhcnQraGItMV0pJmEuaGFzaF9tYXNrLGM9YS5wcmV2W2Euc3Ryc3RhcnQmYS53X21hc2tdPWEuaGVhZFthLmluc19oXSxhLmhlYWRbYS5pbnNfaF09YS5zdHJzdGFydDt3aGlsZSgwIT09LS1hLm1hdGNoX2xlbmd0aCk7YS5zdHJzdGFydCsrfWVsc2UgYS5zdHJzdGFydCs9YS5tYXRjaF9sZW5ndGgsYS5tYXRjaF9sZW5ndGg9MCxhLmluc19oPWEud2luZG93W2Euc3Ryc3RhcnRdLGEuaW5zX2g9KGEuaW5zX2g8PGEuaGFzaF9zaGlmdF5hLndpbmRvd1thLnN0cnN0YXJ0KzFdKSZhLmhhc2hfbWFzaztlbHNlIGQ9RC5fdHJfdGFsbHkoYSwwLGEud2luZG93W2Euc3Ryc3RhcnRdKSxhLmxvb2thaGVhZC0tLGEuc3Ryc3RhcnQrKztpZihkJiYoaChhLCExKSwwPT09YS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIHNifXJldHVybiBhLmluc2VydD1hLnN0cnN0YXJ0PGhiLTE/YS5zdHJzdGFydDpoYi0xLGI9PT1LPyhoKGEsITApLDA9PT1hLnN0cm0uYXZhaWxfb3V0P3ViOnZiKTphLmxhc3RfbGl0JiYoaChhLCExKSwwPT09YS5zdHJtLmF2YWlsX291dCk/c2I6dGJ9ZnVuY3Rpb24gcChhLGIpe2Zvcih2YXIgYyxkLGU7Oyl7aWYoYS5sb29rYWhlYWQ8amIpe2lmKG0oYSksYS5sb29rYWhlYWQ8amImJmI9PT1IKXJldHVybiBzYjtpZigwPT09YS5sb29rYWhlYWQpYnJlYWt9aWYoYz0wLGEubG9va2FoZWFkPj1oYiYmKGEuaW5zX2g9KGEuaW5zX2g8PGEuaGFzaF9zaGlmdF5hLndpbmRvd1thLnN0cnN0YXJ0K2hiLTFdKSZhLmhhc2hfbWFzayxjPWEucHJldlthLnN0cnN0YXJ0JmEud19tYXNrXT1hLmhlYWRbYS5pbnNfaF0sYS5oZWFkW2EuaW5zX2hdPWEuc3Ryc3RhcnQpLGEucHJldl9sZW5ndGg9YS5tYXRjaF9sZW5ndGgsYS5wcmV2X21hdGNoPWEubWF0Y2hfc3RhcnQsYS5tYXRjaF9sZW5ndGg9aGItMSwwIT09YyYmYS5wcmV2X2xlbmd0aDxhLm1heF9sYXp5X21hdGNoJiZhLnN0cnN0YXJ0LWM8PWEud19zaXplLWpiJiYoYS5tYXRjaF9sZW5ndGg9bChhLGMpLGEubWF0Y2hfbGVuZ3RoPD01JiYoYS5zdHJhdGVneT09PVN8fGEubWF0Y2hfbGVuZ3RoPT09aGImJmEuc3Ryc3RhcnQtYS5tYXRjaF9zdGFydD40MDk2KSYmKGEubWF0Y2hfbGVuZ3RoPWhiLTEpKSxhLnByZXZfbGVuZ3RoPj1oYiYmYS5tYXRjaF9sZW5ndGg8PWEucHJldl9sZW5ndGgpe2U9YS5zdHJzdGFydCthLmxvb2thaGVhZC1oYixkPUQuX3RyX3RhbGx5KGEsYS5zdHJzdGFydC0xLWEucHJldl9tYXRjaCxhLnByZXZfbGVuZ3RoLWhiKSxhLmxvb2thaGVhZC09YS5wcmV2X2xlbmd0aC0xLGEucHJldl9sZW5ndGgtPTI7ZG8rK2Euc3Ryc3RhcnQ8PWUmJihhLmluc19oPShhLmluc19oPDxhLmhhc2hfc2hpZnReYS53aW5kb3dbYS5zdHJzdGFydCtoYi0xXSkmYS5oYXNoX21hc2ssYz1hLnByZXZbYS5zdHJzdGFydCZhLndfbWFza109YS5oZWFkW2EuaW5zX2hdLGEuaGVhZFthLmluc19oXT1hLnN0cnN0YXJ0KTt3aGlsZSgwIT09LS1hLnByZXZfbGVuZ3RoKTtpZihhLm1hdGNoX2F2YWlsYWJsZT0wLGEubWF0Y2hfbGVuZ3RoPWhiLTEsYS5zdHJzdGFydCsrLGQmJihoKGEsITEpLDA9PT1hLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gc2J9ZWxzZSBpZihhLm1hdGNoX2F2YWlsYWJsZSl7aWYoZD1ELl90cl90YWxseShhLDAsYS53aW5kb3dbYS5zdHJzdGFydC0xXSksZCYmaChhLCExKSxhLnN0cnN0YXJ0KyssYS5sb29rYWhlYWQtLSwwPT09YS5zdHJtLmF2YWlsX291dClyZXR1cm4gc2J9ZWxzZSBhLm1hdGNoX2F2YWlsYWJsZT0xLGEuc3Ryc3RhcnQrKyxhLmxvb2thaGVhZC0tfXJldHVybiBhLm1hdGNoX2F2YWlsYWJsZSYmKGQ9RC5fdHJfdGFsbHkoYSwwLGEud2luZG93W2Euc3Ryc3RhcnQtMV0pLGEubWF0Y2hfYXZhaWxhYmxlPTApLGEuaW5zZXJ0PWEuc3Ryc3RhcnQ8aGItMT9hLnN0cnN0YXJ0OmhiLTEsYj09PUs/KGgoYSwhMCksMD09PWEuc3RybS5hdmFpbF9vdXQ/dWI6dmIpOmEubGFzdF9saXQmJihoKGEsITEpLDA9PT1hLnN0cm0uYXZhaWxfb3V0KT9zYjp0Yn1mdW5jdGlvbiBxKGEsYil7Zm9yKHZhciBjLGQsZSxmLGc9YS53aW5kb3c7Oyl7aWYoYS5sb29rYWhlYWQ8PWliKXtpZihtKGEpLGEubG9va2FoZWFkPD1pYiYmYj09PUgpcmV0dXJuIHNiO2lmKDA9PT1hLmxvb2thaGVhZClicmVha31pZihhLm1hdGNoX2xlbmd0aD0wLGEubG9va2FoZWFkPj1oYiYmYS5zdHJzdGFydD4wJiYoZT1hLnN0cnN0YXJ0LTEsZD1nW2VdLGQ9PT1nWysrZV0mJmQ9PT1nWysrZV0mJmQ9PT1nWysrZV0pKXtmPWEuc3Ryc3RhcnQraWI7ZG87d2hpbGUoZD09PWdbKytlXSYmZD09PWdbKytlXSYmZD09PWdbKytlXSYmZD09PWdbKytlXSYmZD09PWdbKytlXSYmZD09PWdbKytlXSYmZD09PWdbKytlXSYmZD09PWdbKytlXSYmZj5lKTthLm1hdGNoX2xlbmd0aD1pYi0oZi1lKSxhLm1hdGNoX2xlbmd0aD5hLmxvb2thaGVhZCYmKGEubWF0Y2hfbGVuZ3RoPWEubG9va2FoZWFkKX1pZihhLm1hdGNoX2xlbmd0aD49aGI/KGM9RC5fdHJfdGFsbHkoYSwxLGEubWF0Y2hfbGVuZ3RoLWhiKSxhLmxvb2thaGVhZC09YS5tYXRjaF9sZW5ndGgsYS5zdHJzdGFydCs9YS5tYXRjaF9sZW5ndGgsYS5tYXRjaF9sZW5ndGg9MCk6KGM9RC5fdHJfdGFsbHkoYSwwLGEud2luZG93W2Euc3Ryc3RhcnRdKSxhLmxvb2thaGVhZC0tLGEuc3Ryc3RhcnQrKyksYyYmKGgoYSwhMSksMD09PWEuc3RybS5hdmFpbF9vdXQpKXJldHVybiBzYn1yZXR1cm4gYS5pbnNlcnQ9MCxiPT09Sz8oaChhLCEwKSwwPT09YS5zdHJtLmF2YWlsX291dD91Yjp2Yik6YS5sYXN0X2xpdCYmKGgoYSwhMSksMD09PWEuc3RybS5hdmFpbF9vdXQpP3NiOnRifWZ1bmN0aW9uIHIoYSxiKXtmb3IodmFyIGM7Oyl7aWYoMD09PWEubG9va2FoZWFkJiYobShhKSwwPT09YS5sb29rYWhlYWQpKXtpZihiPT09SClyZXR1cm4gc2I7YnJlYWt9aWYoYS5tYXRjaF9sZW5ndGg9MCxjPUQuX3RyX3RhbGx5KGEsMCxhLndpbmRvd1thLnN0cnN0YXJ0XSksYS5sb29rYWhlYWQtLSxhLnN0cnN0YXJ0KyssYyYmKGgoYSwhMSksMD09PWEuc3RybS5hdmFpbF9vdXQpKXJldHVybiBzYn1yZXR1cm4gYS5pbnNlcnQ9MCxiPT09Sz8oaChhLCEwKSwwPT09YS5zdHJtLmF2YWlsX291dD91Yjp2Yik6YS5sYXN0X2xpdCYmKGgoYSwhMSksMD09PWEuc3RybS5hdmFpbF9vdXQpP3NiOnRifWZ1bmN0aW9uIHMoYSl7YS53aW5kb3dfc2l6ZT0yKmEud19zaXplLGYoYS5oZWFkKSxhLm1heF9sYXp5X21hdGNoPUJbYS5sZXZlbF0ubWF4X2xhenksYS5nb29kX21hdGNoPUJbYS5sZXZlbF0uZ29vZF9sZW5ndGgsYS5uaWNlX21hdGNoPUJbYS5sZXZlbF0ubmljZV9sZW5ndGgsYS5tYXhfY2hhaW5fbGVuZ3RoPUJbYS5sZXZlbF0ubWF4X2NoYWluLGEuc3Ryc3RhcnQ9MCxhLmJsb2NrX3N0YXJ0PTAsYS5sb29rYWhlYWQ9MCxhLmluc2VydD0wLGEubWF0Y2hfbGVuZ3RoPWEucHJldl9sZW5ndGg9aGItMSxhLm1hdGNoX2F2YWlsYWJsZT0wLGEuaW5zX2g9MH1mdW5jdGlvbiB0KCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9WSx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgQy5CdWYxNigyKmZiKSx0aGlzLmR5bl9kdHJlZT1uZXcgQy5CdWYxNigyKigyKmRiKzEpKSx0aGlzLmJsX3RyZWU9bmV3IEMuQnVmMTYoMiooMiplYisxKSksZih0aGlzLmR5bl9sdHJlZSksZih0aGlzLmR5bl9kdHJlZSksZih0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBDLkJ1ZjE2KGdiKzEpLHRoaXMuaGVhcD1uZXcgQy5CdWYxNigyKmNiKzEpLGYodGhpcy5oZWFwKSx0aGlzLmhlYXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IEMuQnVmMTYoMipjYisxKSxmKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIHUoYSl7dmFyIGI7cmV0dXJuIGEmJmEuc3RhdGU/KGEudG90YWxfaW49YS50b3RhbF9vdXQ9MCxhLmRhdGFfdHlwZT1YLGI9YS5zdGF0ZSxiLnBlbmRpbmc9MCxiLnBlbmRpbmdfb3V0PTAsYi53cmFwPDAmJihiLndyYXA9LWIud3JhcCksYi5zdGF0dXM9Yi53cmFwP2xiOnFiLGEuYWRsZXI9Mj09PWIud3JhcD8wOjEsYi5sYXN0X2ZsdXNoPUgsRC5fdHJfaW5pdChiKSxNKTpkKGEsTyl9ZnVuY3Rpb24gdihhKXt2YXIgYj11KGEpO3JldHVybiBiPT09TSYmcyhhLnN0YXRlKSxifWZ1bmN0aW9uIHcoYSxiKXtyZXR1cm4gYSYmYS5zdGF0ZT8yIT09YS5zdGF0ZS53cmFwP086KGEuc3RhdGUuZ3poZWFkPWIsTSk6T31mdW5jdGlvbiB4KGEsYixjLGUsZixnKXtpZighYSlyZXR1cm4gTzt2YXIgaD0xO2lmKGI9PT1SJiYoYj02KSwwPmU/KGg9MCxlPS1lKTplPjE1JiYoaD0yLGUtPTE2KSwxPmZ8fGY+Wnx8YyE9PVl8fDg+ZXx8ZT4xNXx8MD5ifHxiPjl8fDA+Z3x8Zz5WKXJldHVybiBkKGEsTyk7OD09PWUmJihlPTkpO3ZhciBpPW5ldyB0O3JldHVybiBhLnN0YXRlPWksaS5zdHJtPWEsaS53cmFwPWgsaS5nemhlYWQ9bnVsbCxpLndfYml0cz1lLGkud19zaXplPTE8PGkud19iaXRzLGkud19tYXNrPWkud19zaXplLTEsaS5oYXNoX2JpdHM9Zis3LGkuaGFzaF9zaXplPTE8PGkuaGFzaF9iaXRzLGkuaGFzaF9tYXNrPWkuaGFzaF9zaXplLTEsaS5oYXNoX3NoaWZ0PX5+KChpLmhhc2hfYml0cytoYi0xKS9oYiksaS53aW5kb3c9bmV3IEMuQnVmOCgyKmkud19zaXplKSxpLmhlYWQ9bmV3IEMuQnVmMTYoaS5oYXNoX3NpemUpLGkucHJldj1uZXcgQy5CdWYxNihpLndfc2l6ZSksaS5saXRfYnVmc2l6ZT0xPDxmKzYsaS5wZW5kaW5nX2J1Zl9zaXplPTQqaS5saXRfYnVmc2l6ZSxpLnBlbmRpbmdfYnVmPW5ldyBDLkJ1ZjgoaS5wZW5kaW5nX2J1Zl9zaXplKSxpLmRfYnVmPWkubGl0X2J1ZnNpemU+PjEsaS5sX2J1Zj0zKmkubGl0X2J1ZnNpemUsaS5sZXZlbD1iLGkuc3RyYXRlZ3k9ZyxpLm1ldGhvZD1jLHYoYSl9ZnVuY3Rpb24geShhLGIpe3JldHVybiB4KGEsYixZLCQsXyxXKX1mdW5jdGlvbiB6KGEsYil7dmFyIGMsaCxrLGw7aWYoIWF8fCFhLnN0YXRlfHxiPkx8fDA+YilyZXR1cm4gYT9kKGEsTyk6TztpZihoPWEuc3RhdGUsIWEub3V0cHV0fHwhYS5pbnB1dCYmMCE9PWEuYXZhaWxfaW58fGguc3RhdHVzPT09cmImJmIhPT1LKXJldHVybiBkKGEsMD09PWEuYXZhaWxfb3V0P1E6Tyk7aWYoaC5zdHJtPWEsYz1oLmxhc3RfZmx1c2gsaC5sYXN0X2ZsdXNoPWIsaC5zdGF0dXM9PT1sYilpZigyPT09aC53cmFwKWEuYWRsZXI9MCxpKGgsMzEpLGkoaCwxMzkpLGkoaCw4KSxoLmd6aGVhZD8oaShoLChoLmd6aGVhZC50ZXh0PzE6MCkrKGguZ3poZWFkLmhjcmM/MjowKSsoaC5nemhlYWQuZXh0cmE/NDowKSsoaC5nemhlYWQubmFtZT84OjApKyhoLmd6aGVhZC5jb21tZW50PzE2OjApKSxpKGgsMjU1JmguZ3poZWFkLnRpbWUpLGkoaCxoLmd6aGVhZC50aW1lPj44JjI1NSksaShoLGguZ3poZWFkLnRpbWU+PjE2JjI1NSksaShoLGguZ3poZWFkLnRpbWU+PjI0JjI1NSksaShoLDk9PT1oLmxldmVsPzI6aC5zdHJhdGVneT49VHx8aC5sZXZlbDwyPzQ6MCksaShoLDI1NSZoLmd6aGVhZC5vcyksaC5nemhlYWQuZXh0cmEmJmguZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGkoaCwyNTUmaC5nemhlYWQuZXh0cmEubGVuZ3RoKSxpKGgsaC5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLGguZ3poZWFkLmhjcmMmJihhLmFkbGVyPUYoYS5hZGxlcixoLnBlbmRpbmdfYnVmLGgucGVuZGluZywwKSksaC5nemluZGV4PTAsaC5zdGF0dXM9bWIpOihpKGgsMCksaShoLDApLGkoaCwwKSxpKGgsMCksaShoLDApLGkoaCw5PT09aC5sZXZlbD8yOmguc3RyYXRlZ3k+PVR8fGgubGV2ZWw8Mj80OjApLGkoaCx3YiksaC5zdGF0dXM9cWIpO2Vsc2V7dmFyIG09WSsoaC53X2JpdHMtODw8NCk8PDgsbj0tMTtuPWguc3RyYXRlZ3k+PVR8fGgubGV2ZWw8Mj8wOmgubGV2ZWw8Nj8xOjY9PT1oLmxldmVsPzI6MyxtfD1uPDw2LDAhPT1oLnN0cnN0YXJ0JiYobXw9a2IpLG0rPTMxLW0lMzEsaC5zdGF0dXM9cWIsaihoLG0pLDAhPT1oLnN0cnN0YXJ0JiYoaihoLGEuYWRsZXI+Pj4xNiksaihoLDY1NTM1JmEuYWRsZXIpKSxhLmFkbGVyPTF9aWYoaC5zdGF0dXM9PT1tYilpZihoLmd6aGVhZC5leHRyYSl7Zm9yKGs9aC5wZW5kaW5nO2guZ3ppbmRleDwoNjU1MzUmaC5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKGgucGVuZGluZyE9PWgucGVuZGluZ19idWZfc2l6ZXx8KGguZ3poZWFkLmhjcmMmJmgucGVuZGluZz5rJiYoYS5hZGxlcj1GKGEuYWRsZXIsaC5wZW5kaW5nX2J1ZixoLnBlbmRpbmctayxrKSksZyhhKSxrPWgucGVuZGluZyxoLnBlbmRpbmchPT1oLnBlbmRpbmdfYnVmX3NpemUpKTspaShoLDI1NSZoLmd6aGVhZC5leHRyYVtoLmd6aW5kZXhdKSxoLmd6aW5kZXgrKztoLmd6aGVhZC5oY3JjJiZoLnBlbmRpbmc+ayYmKGEuYWRsZXI9RihhLmFkbGVyLGgucGVuZGluZ19idWYsaC5wZW5kaW5nLWssaykpLGguZ3ppbmRleD09PWguZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGguZ3ppbmRleD0wLGguc3RhdHVzPW5iKX1lbHNlIGguc3RhdHVzPW5iO2lmKGguc3RhdHVzPT09bmIpaWYoaC5nemhlYWQubmFtZSl7az1oLnBlbmRpbmc7ZG97aWYoaC5wZW5kaW5nPT09aC5wZW5kaW5nX2J1Zl9zaXplJiYoaC5nemhlYWQuaGNyYyYmaC5wZW5kaW5nPmsmJihhLmFkbGVyPUYoYS5hZGxlcixoLnBlbmRpbmdfYnVmLGgucGVuZGluZy1rLGspKSxnKGEpLGs9aC5wZW5kaW5nLGgucGVuZGluZz09PWgucGVuZGluZ19idWZfc2l6ZSkpe2w9MTticmVha31sPWguZ3ppbmRleDxoLmd6aGVhZC5uYW1lLmxlbmd0aD8yNTUmaC5nemhlYWQubmFtZS5jaGFyQ29kZUF0KGguZ3ppbmRleCsrKTowLGkoaCxsKX13aGlsZSgwIT09bCk7aC5nemhlYWQuaGNyYyYmaC5wZW5kaW5nPmsmJihhLmFkbGVyPUYoYS5hZGxlcixoLnBlbmRpbmdfYnVmLGgucGVuZGluZy1rLGspKSwwPT09bCYmKGguZ3ppbmRleD0wLGguc3RhdHVzPW9iKX1lbHNlIGguc3RhdHVzPW9iO2lmKGguc3RhdHVzPT09b2IpaWYoaC5nemhlYWQuY29tbWVudCl7az1oLnBlbmRpbmc7ZG97aWYoaC5wZW5kaW5nPT09aC5wZW5kaW5nX2J1Zl9zaXplJiYoaC5nemhlYWQuaGNyYyYmaC5wZW5kaW5nPmsmJihhLmFkbGVyPUYoYS5hZGxlcixoLnBlbmRpbmdfYnVmLGgucGVuZGluZy1rLGspKSxnKGEpLGs9aC5wZW5kaW5nLGgucGVuZGluZz09PWgucGVuZGluZ19idWZfc2l6ZSkpe2w9MTticmVha31sPWguZ3ppbmRleDxoLmd6aGVhZC5jb21tZW50Lmxlbmd0aD8yNTUmaC5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KGguZ3ppbmRleCsrKTowLGkoaCxsKX13aGlsZSgwIT09bCk7aC5nemhlYWQuaGNyYyYmaC5wZW5kaW5nPmsmJihhLmFkbGVyPUYoYS5hZGxlcixoLnBlbmRpbmdfYnVmLGgucGVuZGluZy1rLGspKSwwPT09bCYmKGguc3RhdHVzPXBiKX1lbHNlIGguc3RhdHVzPXBiO2lmKGguc3RhdHVzPT09cGImJihoLmd6aGVhZC5oY3JjPyhoLnBlbmRpbmcrMj5oLnBlbmRpbmdfYnVmX3NpemUmJmcoYSksaC5wZW5kaW5nKzI8PWgucGVuZGluZ19idWZfc2l6ZSYmKGkoaCwyNTUmYS5hZGxlciksaShoLGEuYWRsZXI+PjgmMjU1KSxhLmFkbGVyPTAsaC5zdGF0dXM9cWIpKTpoLnN0YXR1cz1xYiksMCE9PWgucGVuZGluZyl7aWYoZyhhKSwwPT09YS5hdmFpbF9vdXQpcmV0dXJuIGgubGFzdF9mbHVzaD0tMSxNfWVsc2UgaWYoMD09PWEuYXZhaWxfaW4mJmUoYik8PWUoYykmJmIhPT1LKXJldHVybiBkKGEsUSk7aWYoaC5zdGF0dXM9PT1yYiYmMCE9PWEuYXZhaWxfaW4pcmV0dXJuIGQoYSxRKTtpZigwIT09YS5hdmFpbF9pbnx8MCE9PWgubG9va2FoZWFkfHxiIT09SCYmaC5zdGF0dXMhPT1yYil7dmFyIG89aC5zdHJhdGVneT09PVQ/cihoLGIpOmguc3RyYXRlZ3k9PT1VP3EoaCxiKTpCW2gubGV2ZWxdLmZ1bmMoaCxiKTtpZigobz09PXVifHxvPT09dmIpJiYoaC5zdGF0dXM9cmIpLG89PT1zYnx8bz09PXViKXJldHVybiAwPT09YS5hdmFpbF9vdXQmJihoLmxhc3RfZmx1c2g9LTEpLE07aWYobz09PXRiJiYoYj09PUk/RC5fdHJfYWxpZ24oaCk6YiE9PUwmJihELl90cl9zdG9yZWRfYmxvY2soaCwwLDAsITEpLGI9PT1KJiYoZihoLmhlYWQpLDA9PT1oLmxvb2thaGVhZCYmKGguc3Ryc3RhcnQ9MCxoLmJsb2NrX3N0YXJ0PTAsaC5pbnNlcnQ9MCkpKSxnKGEpLDA9PT1hLmF2YWlsX291dCkpcmV0dXJuIGgubGFzdF9mbHVzaD0tMSxNfXJldHVybiBiIT09Sz9NOmgud3JhcDw9MD9OOigyPT09aC53cmFwPyhpKGgsMjU1JmEuYWRsZXIpLGkoaCxhLmFkbGVyPj44JjI1NSksaShoLGEuYWRsZXI+PjE2JjI1NSksaShoLGEuYWRsZXI+PjI0JjI1NSksaShoLDI1NSZhLnRvdGFsX2luKSxpKGgsYS50b3RhbF9pbj4+OCYyNTUpLGkoaCxhLnRvdGFsX2luPj4xNiYyNTUpLGkoaCxhLnRvdGFsX2luPj4yNCYyNTUpKTooaihoLGEuYWRsZXI+Pj4xNiksaihoLDY1NTM1JmEuYWRsZXIpKSxnKGEpLGgud3JhcD4wJiYoaC53cmFwPS1oLndyYXApLDAhPT1oLnBlbmRpbmc/TTpOKX1mdW5jdGlvbiBBKGEpe3ZhciBiO3JldHVybiBhJiZhLnN0YXRlPyhiPWEuc3RhdGUuc3RhdHVzLGIhPT1sYiYmYiE9PW1iJiZiIT09bmImJmIhPT1vYiYmYiE9PXBiJiZiIT09cWImJmIhPT1yYj9kKGEsTyk6KGEuc3RhdGU9bnVsbCxiPT09cWI/ZChhLFApOk0pKTpPfXZhciBCLEM9YSgiLi4vdXRpbHMvY29tbW9uIiksRD1hKCIuL3RyZWVzIiksRT1hKCIuL2FkbGVyMzIiKSxGPWEoIi4vY3JjMzIiKSxHPWEoIi4vbWVzc2FnZXMiKSxIPTAsST0xLEo9MyxLPTQsTD01LE09MCxOPTEsTz0tMixQPS0zLFE9LTUsUj0tMSxTPTEsVD0yLFU9MyxWPTQsVz0wLFg9MixZPTgsWj05LCQ9MTUsXz04LGFiPTI5LGJiPTI1NixjYj1iYisxK2FiLGRiPTMwLGViPTE5LGZiPTIqY2IrMSxnYj0xNSxoYj0zLGliPTI1OCxqYj1pYitoYisxLGtiPTMyLGxiPTQyLG1iPTY5LG5iPTczLG9iPTkxLHBiPTEwMyxxYj0xMTMscmI9NjY2LHNiPTEsdGI9Mix1Yj0zLHZiPTQsd2I9Myx4Yj1mdW5jdGlvbihhLGIsYyxkLGUpe3RoaXMuZ29vZF9sZW5ndGg9YSx0aGlzLm1heF9sYXp5PWIsdGhpcy5uaWNlX2xlbmd0aD1jLHRoaXMubWF4X2NoYWluPWQsdGhpcy5mdW5jPWV9O0I9W25ldyB4YigwLDAsMCwwLG4pLG5ldyB4Yig0LDQsOCw0LG8pLG5ldyB4Yig0LDUsMTYsOCxvKSxuZXcgeGIoNCw2LDMyLDMyLG8pLG5ldyB4Yig0LDQsMTYsMTYscCksbmV3IHhiKDgsMTYsMzIsMzIscCksbmV3IHhiKDgsMTYsMTI4LDEyOCxwKSxuZXcgeGIoOCwzMiwxMjgsMjU2LHApLG5ldyB4YigzMiwxMjgsMjU4LDEwMjQscCksbmV3IHhiKDMyLDI1OCwyNTgsNDA5NixwKV0sYy5kZWZsYXRlSW5pdD15LGMuZGVmbGF0ZUluaXQyPXgsYy5kZWZsYXRlUmVzZXQ9dixjLmRlZmxhdGVSZXNldEtlZXA9dSxjLmRlZmxhdGVTZXRIZWFkZXI9dyxjLmRlZmxhdGU9eixjLmRlZmxhdGVFbmQ9QSxjLmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9tZXNzYWdlcyI6MzcsIi4vdHJlZXMiOjM4fV0sMzM6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX1iLmV4cG9ydHM9Y30se31dLDM0OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz0zMCxkPTEyO2IuZXhwb3J0cz1mdW5jdGlvbihhLGIpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LHgseSx6LEEsQixDO2U9YS5zdGF0ZSxmPWEubmV4dF9pbixCPWEuaW5wdXQsZz1mKyhhLmF2YWlsX2luLTUpLGg9YS5uZXh0X291dCxDPWEub3V0cHV0LGk9aC0oYi1hLmF2YWlsX291dCksaj1oKyhhLmF2YWlsX291dC0yNTcpLGs9ZS5kbWF4LGw9ZS53c2l6ZSxtPWUud2hhdmUsbj1lLnduZXh0LG89ZS53aW5kb3cscD1lLmhvbGQscT1lLmJpdHMscj1lLmxlbmNvZGUscz1lLmRpc3Rjb2RlLHQ9KDE8PGUubGVuYml0cyktMSx1PSgxPDxlLmRpc3RiaXRzKS0xO2E6ZG97MTU+cSYmKHArPUJbZisrXTw8cSxxKz04LHArPUJbZisrXTw8cSxxKz04KSx2PXJbcCZ0XTtiOmZvcig7Oyl7aWYodz12Pj4+MjQscD4+Pj13LHEtPXcsdz12Pj4+MTYmMjU1LDA9PT13KUNbaCsrXT02NTUzNSZ2O2Vsc2V7aWYoISgxNiZ3KSl7aWYoMD09PSg2NCZ3KSl7dj1yWyg2NTUzNSZ2KSsocCYoMTw8dyktMSldO2NvbnRpbnVlIGJ9aWYoMzImdyl7ZS5tb2RlPWQ7YnJlYWsgYX1hLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixlLm1vZGU9YzticmVhayBhfXg9NjU1MzUmdix3Jj0xNSx3JiYodz5xJiYocCs9QltmKytdPDxxLHErPTgpLHgrPXAmKDE8PHcpLTEscD4+Pj13LHEtPXcpLDE1PnEmJihwKz1CW2YrK108PHEscSs9OCxwKz1CW2YrK108PHEscSs9OCksdj1zW3AmdV07Yzpmb3IoOzspe2lmKHc9dj4+PjI0LHA+Pj49dyxxLT13LHc9dj4+PjE2JjI1NSwhKDE2JncpKXtpZigwPT09KDY0JncpKXt2PXNbKDY1NTM1JnYpKyhwJigxPDx3KS0xKV07Y29udGludWUgY31hLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixlLm1vZGU9YzticmVhayBhfWlmKHk9NjU1MzUmdix3Jj0xNSx3PnEmJihwKz1CW2YrK108PHEscSs9OCx3PnEmJihwKz1CW2YrK108PHEscSs9OCkpLHkrPXAmKDE8PHcpLTEseT5rKXthLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLGUubW9kZT1jO2JyZWFrIGF9aWYocD4+Pj13LHEtPXcsdz1oLWkseT53KXtpZih3PXktdyx3Pm0mJmUuc2FuZSl7YS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixlLm1vZGU9YzticmVhayBhfWlmKHo9MCxBPW8sMD09PW4pe2lmKHorPWwtdyx4Pncpe3gtPXc7ZG8gQ1toKytdPW9beisrXTt3aGlsZSgtLXcpO3o9aC15LEE9Q319ZWxzZSBpZih3Pm4pe2lmKHorPWwrbi13LHctPW4seD53KXt4LT13O2RvIENbaCsrXT1vW3orK107d2hpbGUoLS13KTtpZih6PTAseD5uKXt3PW4seC09dztkbyBDW2grK109b1t6KytdO3doaWxlKC0tdyk7ej1oLXksQT1DfX19ZWxzZSBpZih6Kz1uLXcseD53KXt4LT13O2RvIENbaCsrXT1vW3orK107d2hpbGUoLS13KTt6PWgteSxBPUN9Zm9yKDt4PjI7KUNbaCsrXT1BW3orK10sQ1toKytdPUFbeisrXSxDW2grK109QVt6KytdLHgtPTM7eCYmKENbaCsrXT1BW3orK10seD4xJiYoQ1toKytdPUFbeisrXSkpfWVsc2V7ej1oLXk7ZG8gQ1toKytdPUNbeisrXSxDW2grK109Q1t6KytdLENbaCsrXT1DW3orK10seC09Mzt3aGlsZSh4PjIpO3gmJihDW2grK109Q1t6KytdLHg+MSYmKENbaCsrXT1DW3orK10pKX1icmVha319YnJlYWt9fXdoaWxlKGc+ZiYmaj5oKTt4PXE+PjMsZi09eCxxLT14PDwzLHAmPSgxPDxxKS0xLGEubmV4dF9pbj1mLGEubmV4dF9vdXQ9aCxhLmF2YWlsX2luPWc+Zj81KyhnLWYpOjUtKGYtZyksYS5hdmFpbF9vdXQ9aj5oPzI1Nysoai1oKToyNTctKGgtaiksZS5ob2xkPXAsZS5iaXRzPXF9fSx7fV0sMzU6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhKXtyZXR1cm4oYT4+PjI0JjI1NSkrKGE+Pj44JjY1MjgwKSsoKDY1MjgwJmEpPDw4KSsoKDI1NSZhKTw8MjQpfWZ1bmN0aW9uIGUoKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IHIuQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IHIuQnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gZihhKXt2YXIgYjtyZXR1cm4gYSYmYS5zdGF0ZT8oYj1hLnN0YXRlLGEudG90YWxfaW49YS50b3RhbF9vdXQ9Yi50b3RhbD0wLGEubXNnPSIiLGIud3JhcCYmKGEuYWRsZXI9MSZiLndyYXApLGIubW9kZT1LLGIubGFzdD0wLGIuaGF2ZWRpY3Q9MCxiLmRtYXg9MzI3NjgsYi5oZWFkPW51bGwsYi5ob2xkPTAsYi5iaXRzPTAsYi5sZW5jb2RlPWIubGVuZHluPW5ldyByLkJ1ZjMyKG9iKSxiLmRpc3Rjb2RlPWIuZGlzdGR5bj1uZXcgci5CdWYzMihwYiksYi5zYW5lPTEsYi5iYWNrPS0xLEMpOkZ9ZnVuY3Rpb24gZyhhKXt2YXIgYjtyZXR1cm4gYSYmYS5zdGF0ZT8oYj1hLnN0YXRlLGIud3NpemU9MCxiLndoYXZlPTAsYi53bmV4dD0wLGYoYSkpOkZ9ZnVuY3Rpb24gaChhLGIpe3ZhciBjLGQ7cmV0dXJuIGEmJmEuc3RhdGU/KGQ9YS5zdGF0ZSwwPmI/KGM9MCxiPS1iKTooYz0oYj4+NCkrMSw0OD5iJiYoYiY9MTUpKSxiJiYoOD5ifHxiPjE1KT9GOihudWxsIT09ZC53aW5kb3cmJmQud2JpdHMhPT1iJiYoZC53aW5kb3c9bnVsbCksZC53cmFwPWMsZC53Yml0cz1iLGcoYSkpKTpGfWZ1bmN0aW9uIGkoYSxiKXt2YXIgYyxkO3JldHVybiBhPyhkPW5ldyBlLGEuc3RhdGU9ZCxkLndpbmRvdz1udWxsLGM9aChhLGIpLGMhPT1DJiYoYS5zdGF0ZT1udWxsKSxjKTpGfWZ1bmN0aW9uIGooYSl7cmV0dXJuIGkoYSxyYil9ZnVuY3Rpb24gayhhKXtpZihzYil7dmFyIGI7Zm9yKHA9bmV3IHIuQnVmMzIoNTEyKSxxPW5ldyByLkJ1ZjMyKDMyKSxiPTA7MTQ0PmI7KWEubGVuc1tiKytdPTg7Zm9yKDsyNTY+YjspYS5sZW5zW2IrK109OTtmb3IoOzI4MD5iOylhLmxlbnNbYisrXT03O2Zvcig7Mjg4PmI7KWEubGVuc1tiKytdPTg7Zm9yKHYoeCxhLmxlbnMsMCwyODgscCwwLGEud29yayx7Yml0czo5fSksYj0wOzMyPmI7KWEubGVuc1tiKytdPTU7dih5LGEubGVucywwLDMyLHEsMCxhLndvcmsse2JpdHM6NX0pLHNiPSExfWEubGVuY29kZT1wLGEubGVuYml0cz05LGEuZGlzdGNvZGU9cSxhLmRpc3RiaXRzPTV9ZnVuY3Rpb24gbChhLGIsYyxkKXt2YXIgZSxmPWEuc3RhdGU7cmV0dXJuIG51bGw9PT1mLndpbmRvdyYmKGYud3NpemU9MTw8Zi53Yml0cyxmLnduZXh0PTAsZi53aGF2ZT0wLGYud2luZG93PW5ldyByLkJ1ZjgoZi53c2l6ZSkpLGQ+PWYud3NpemU/KHIuYXJyYXlTZXQoZi53aW5kb3csYixjLWYud3NpemUsZi53c2l6ZSwwKSxmLnduZXh0PTAsZi53aGF2ZT1mLndzaXplKTooZT1mLndzaXplLWYud25leHQsZT5kJiYoZT1kKSxyLmFycmF5U2V0KGYud2luZG93LGIsYy1kLGUsZi53bmV4dCksZC09ZSxkPyhyLmFycmF5U2V0KGYud2luZG93LGIsYy1kLGQsMCksZi53bmV4dD1kLGYud2hhdmU9Zi53c2l6ZSk6KGYud25leHQrPWUsZi53bmV4dD09PWYud3NpemUmJihmLnduZXh0PTApLGYud2hhdmU8Zi53c2l6ZSYmKGYud2hhdmUrPWUpKSksMH1mdW5jdGlvbiBtKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosbSxuLG8scCxxLG9iLHBiLHFiLHJiLHNiLHRiLHViLHZiLHdiLHhiLHliLHpiLEFiPTAsQmI9bmV3IHIuQnVmOCg0KSxDYj1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIWF8fCFhLnN0YXRlfHwhYS5vdXRwdXR8fCFhLmlucHV0JiYwIT09YS5hdmFpbF9pbilyZXR1cm4gRjtjPWEuc3RhdGUsYy5tb2RlPT09ViYmKGMubW9kZT1XKSxoPWEubmV4dF9vdXQsZj1hLm91dHB1dCxqPWEuYXZhaWxfb3V0LGc9YS5uZXh0X2luLGU9YS5pbnB1dCxpPWEuYXZhaWxfaW4sbT1jLmhvbGQsbj1jLmJpdHMsbz1pLHA9aix4Yj1DO2E6Zm9yKDs7KXN3aXRjaChjLm1vZGUpe2Nhc2UgSzppZigwPT09Yy53cmFwKXtjLm1vZGU9VzticmVha31mb3IoOzE2Pm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1pZigyJmMud3JhcCYmMzU2MTU9PT1tKXtjLmNoZWNrPTAsQmJbMF09MjU1Jm0sQmJbMV09bT4+PjgmMjU1LGMuY2hlY2s9dChjLmNoZWNrLEJiLDIsMCksbT0wLG49MCxjLm1vZGU9TDticmVha31pZihjLmZsYWdzPTAsYy5oZWFkJiYoYy5oZWFkLmRvbmU9ITEpLCEoMSZjLndyYXApfHwoKCgyNTUmbSk8PDgpKyhtPj44KSklMzEpe2EubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIixjLm1vZGU9bGI7YnJlYWt9aWYoKDE1Jm0pIT09Sil7YS5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixjLm1vZGU9bGI7YnJlYWt9aWYobT4+Pj00LG4tPTQsd2I9KDE1Jm0pKzgsMD09PWMud2JpdHMpYy53Yml0cz13YjtlbHNlIGlmKHdiPmMud2JpdHMpe2EubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixjLm1vZGU9bGI7YnJlYWt9Yy5kbWF4PTE8PHdiLGEuYWRsZXI9Yy5jaGVjaz0xLGMubW9kZT01MTImbT9UOlYsbT0wLG49MDticmVhaztjYXNlIEw6Zm9yKDsxNj5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9aWYoYy5mbGFncz1tLCgyNTUmYy5mbGFncykhPT1KKXthLm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLGMubW9kZT1sYjticmVha31pZig1NzM0NCZjLmZsYWdzKXthLm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixjLm1vZGU9bGI7YnJlYWt9Yy5oZWFkJiYoYy5oZWFkLnRleHQ9bT4+OCYxKSw1MTImYy5mbGFncyYmKEJiWzBdPTI1NSZtLEJiWzFdPW0+Pj44JjI1NSxjLmNoZWNrPXQoYy5jaGVjayxCYiwyLDApKSxtPTAsbj0wLGMubW9kZT1NO2Nhc2UgTTpmb3IoOzMyPm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1jLmhlYWQmJihjLmhlYWQudGltZT1tKSw1MTImYy5mbGFncyYmKEJiWzBdPTI1NSZtLEJiWzFdPW0+Pj44JjI1NSxCYlsyXT1tPj4+MTYmMjU1LEJiWzNdPW0+Pj4yNCYyNTUsYy5jaGVjaz10KGMuY2hlY2ssQmIsNCwwKSksbT0wLG49MCxjLm1vZGU9TjtjYXNlIE46Zm9yKDsxNj5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9Yy5oZWFkJiYoYy5oZWFkLnhmbGFncz0yNTUmbSxjLmhlYWQub3M9bT4+OCksNTEyJmMuZmxhZ3MmJihCYlswXT0yNTUmbSxCYlsxXT1tPj4+OCYyNTUsYy5jaGVjaz10KGMuY2hlY2ssQmIsMiwwKSksbT0wLG49MCxjLm1vZGU9TztjYXNlIE86aWYoMTAyNCZjLmZsYWdzKXtmb3IoOzE2Pm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1jLmxlbmd0aD1tLGMuaGVhZCYmKGMuaGVhZC5leHRyYV9sZW49bSksNTEyJmMuZmxhZ3MmJihCYlswXT0yNTUmbSxCYlsxXT1tPj4+OCYyNTUsYy5jaGVjaz10KGMuY2hlY2ssQmIsMiwwKSksbT0wLG49MH1lbHNlIGMuaGVhZCYmKGMuaGVhZC5leHRyYT1udWxsKTtjLm1vZGU9UDtjYXNlIFA6aWYoMTAyNCZjLmZsYWdzJiYocT1jLmxlbmd0aCxxPmkmJihxPWkpLHEmJihjLmhlYWQmJih3Yj1jLmhlYWQuZXh0cmFfbGVuLWMubGVuZ3RoLGMuaGVhZC5leHRyYXx8KGMuaGVhZC5leHRyYT1uZXcgQXJyYXkoYy5oZWFkLmV4dHJhX2xlbikpLHIuYXJyYXlTZXQoYy5oZWFkLmV4dHJhLGUsZyxxLHdiKSksNTEyJmMuZmxhZ3MmJihjLmNoZWNrPXQoYy5jaGVjayxlLHEsZykpLGktPXEsZys9cSxjLmxlbmd0aC09cSksYy5sZW5ndGgpKWJyZWFrIGE7Yy5sZW5ndGg9MCxjLm1vZGU9UTtjYXNlIFE6aWYoMjA0OCZjLmZsYWdzKXtpZigwPT09aSlicmVhayBhO3E9MDtkbyB3Yj1lW2crcSsrXSxjLmhlYWQmJndiJiZjLmxlbmd0aDw2NTUzNiYmKGMuaGVhZC5uYW1lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHdiKSk7d2hpbGUod2ImJmk+cSk7aWYoNTEyJmMuZmxhZ3MmJihjLmNoZWNrPXQoYy5jaGVjayxlLHEsZykpLGktPXEsZys9cSx3YilicmVhayBhfWVsc2UgYy5oZWFkJiYoYy5oZWFkLm5hbWU9bnVsbCk7Yy5sZW5ndGg9MCxjLm1vZGU9UjtjYXNlIFI6aWYoNDA5NiZjLmZsYWdzKXtpZigwPT09aSlicmVhayBhO3E9MDtkbyB3Yj1lW2crcSsrXSxjLmhlYWQmJndiJiZjLmxlbmd0aDw2NTUzNiYmKGMuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHdiKSk7d2hpbGUod2ImJmk+cSk7aWYoNTEyJmMuZmxhZ3MmJihjLmNoZWNrPXQoYy5jaGVjayxlLHEsZykpLGktPXEsZys9cSx3YilicmVhayBhfWVsc2UgYy5oZWFkJiYoYy5oZWFkLmNvbW1lbnQ9bnVsbCk7Yy5tb2RlPVM7Y2FzZSBTOmlmKDUxMiZjLmZsYWdzKXtmb3IoOzE2Pm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1pZihtIT09KDY1NTM1JmMuY2hlY2spKXthLm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsYy5tb2RlPWxiO2JyZWFrfW09MCxuPTB9Yy5oZWFkJiYoYy5oZWFkLmhjcmM9Yy5mbGFncz4+OSYxLGMuaGVhZC5kb25lPSEwKSxhLmFkbGVyPWMuY2hlY2s9MCxjLm1vZGU9VjticmVhaztjYXNlIFQ6Zm9yKDszMj5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9YS5hZGxlcj1jLmNoZWNrPWQobSksbT0wLG49MCxjLm1vZGU9VTtjYXNlIFU6aWYoMD09PWMuaGF2ZWRpY3QpcmV0dXJuIGEubmV4dF9vdXQ9aCxhLmF2YWlsX291dD1qLGEubmV4dF9pbj1nLGEuYXZhaWxfaW49aSxjLmhvbGQ9bSxjLmJpdHM9bixFO2EuYWRsZXI9Yy5jaGVjaz0xLGMubW9kZT1WO2Nhc2UgVjppZihiPT09QXx8Yj09PUIpYnJlYWsgYTtjYXNlIFc6aWYoYy5sYXN0KXttPj4+PTcmbixuLT03Jm4sYy5tb2RlPWliO2JyZWFrfWZvcig7Mz5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9c3dpdGNoKGMubGFzdD0xJm0sbT4+Pj0xLG4tPTEsMyZtKXtjYXNlIDA6Yy5tb2RlPVg7YnJlYWs7Y2FzZSAxOmlmKGsoYyksYy5tb2RlPWJiLGI9PT1CKXttPj4+PTIsbi09MjticmVhayBhfWJyZWFrO2Nhc2UgMjpjLm1vZGU9JDticmVhaztjYXNlIDM6YS5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIsYy5tb2RlPWxifW0+Pj49MixuLT0yO2JyZWFrO2Nhc2UgWDpmb3IobT4+Pj03Jm4sbi09NyZuOzMyPm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1pZigoNjU1MzUmbSkhPT0obT4+PjE2XjY1NTM1KSl7YS5tc2c9ImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLGMubW9kZT1sYjticmVha31pZihjLmxlbmd0aD02NTUzNSZtLG09MCxuPTAsYy5tb2RlPVksYj09PUIpYnJlYWsgYTtjYXNlIFk6Yy5tb2RlPVo7Y2FzZSBaOmlmKHE9Yy5sZW5ndGgpe2lmKHE+aSYmKHE9aSkscT5qJiYocT1qKSwwPT09cSlicmVhayBhO3IuYXJyYXlTZXQoZixlLGcscSxoKSxpLT1xLGcrPXEsai09cSxoKz1xLGMubGVuZ3RoLT1xO2JyZWFrfWMubW9kZT1WO2JyZWFrO2Nhc2UgJDpmb3IoOzE0Pm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1pZihjLm5sZW49KDMxJm0pKzI1NyxtPj4+PTUsbi09NSxjLm5kaXN0PSgzMSZtKSsxLG0+Pj49NSxuLT01LGMubmNvZGU9KDE1Jm0pKzQsbT4+Pj00LG4tPTQsYy5ubGVuPjI4Nnx8Yy5uZGlzdD4zMCl7YS5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixjLm1vZGU9bGI7YnJlYWt9Yy5oYXZlPTAsYy5tb2RlPV87Y2FzZSBfOmZvcig7Yy5oYXZlPGMubmNvZGU7KXtmb3IoOzM+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWMubGVuc1tDYltjLmhhdmUrK11dPTcmbSxtPj4+PTMsbi09M31mb3IoO2MuaGF2ZTwxOTspYy5sZW5zW0NiW2MuaGF2ZSsrXV09MDtpZihjLmxlbmNvZGU9Yy5sZW5keW4sYy5sZW5iaXRzPTcseWI9e2JpdHM6Yy5sZW5iaXRzfSx4Yj12KHcsYy5sZW5zLDAsMTksYy5sZW5jb2RlLDAsYy53b3JrLHliKSxjLmxlbmJpdHM9eWIuYml0cyx4Yil7YS5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsYy5tb2RlPWxiO2JyZWFrfWMuaGF2ZT0wLGMubW9kZT1hYjtjYXNlIGFiOmZvcig7Yy5oYXZlPGMubmxlbitjLm5kaXN0Oyl7Zm9yKDtBYj1jLmxlbmNvZGVbbSYoMTw8Yy5sZW5iaXRzKS0xXSxxYj1BYj4+PjI0LHJiPUFiPj4+MTYmMjU1LHNiPTY1NTM1JkFiLCEobj49cWIpOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9aWYoMTY+c2IpbT4+Pj1xYixuLT1xYixjLmxlbnNbYy5oYXZlKytdPXNiO2Vsc2V7aWYoMTY9PT1zYil7Zm9yKHpiPXFiKzI7emI+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWlmKG0+Pj49cWIsbi09cWIsMD09PWMuaGF2ZSl7YS5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLGMubW9kZT1sYjticmVha313Yj1jLmxlbnNbYy5oYXZlLTFdLHE9MysoMyZtKSxtPj4+PTIsbi09Mn1lbHNlIGlmKDE3PT09c2Ipe2Zvcih6Yj1xYiszO3piPm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1tPj4+PXFiLG4tPXFiLHdiPTAscT0zKyg3Jm0pLG0+Pj49MyxuLT0zfWVsc2V7Zm9yKHpiPXFiKzc7emI+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fW0+Pj49cWIsbi09cWIsd2I9MCxxPTExKygxMjcmbSksbT4+Pj03LG4tPTd9aWYoYy5oYXZlK3E+Yy5ubGVuK2MubmRpc3Qpe2EubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixjLm1vZGU9bGI7YnJlYWt9Zm9yKDtxLS07KWMubGVuc1tjLmhhdmUrK109d2J9fWlmKGMubW9kZT09PWxiKWJyZWFrO2lmKDA9PT1jLmxlbnNbMjU2XSl7YS5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsYy5tb2RlPWxiO2JyZWFrfWlmKGMubGVuYml0cz05LHliPXtiaXRzOmMubGVuYml0c30seGI9dih4LGMubGVucywwLGMubmxlbixjLmxlbmNvZGUsMCxjLndvcmsseWIpLGMubGVuYml0cz15Yi5iaXRzLHhiKXthLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixjLm1vZGU9bGI7YnJlYWt9aWYoYy5kaXN0Yml0cz02LGMuZGlzdGNvZGU9Yy5kaXN0ZHluLHliPXtiaXRzOmMuZGlzdGJpdHN9LHhiPXYoeSxjLmxlbnMsYy5ubGVuLGMubmRpc3QsYy5kaXN0Y29kZSwwLGMud29yayx5YiksYy5kaXN0Yml0cz15Yi5iaXRzLHhiKXthLm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixjLm1vZGU9bGI7YnJlYWt9aWYoYy5tb2RlPWJiLGI9PT1CKWJyZWFrIGE7Y2FzZSBiYjpjLm1vZGU9Y2I7Y2FzZSBjYjppZihpPj02JiZqPj0yNTgpe2EubmV4dF9vdXQ9aCxhLmF2YWlsX291dD1qLGEubmV4dF9pbj1nLGEuYXZhaWxfaW49aSxjLmhvbGQ9bSxjLmJpdHM9bix1KGEscCksaD1hLm5leHRfb3V0LGY9YS5vdXRwdXQsaj1hLmF2YWlsX291dCxnPWEubmV4dF9pbixlPWEuaW5wdXQsaT1hLmF2YWlsX2luLG09Yy5ob2xkLG49Yy5iaXRzLGMubW9kZT09PVYmJihjLmJhY2s9LTEpO2JyZWFrfWZvcihjLmJhY2s9MDtBYj1jLmxlbmNvZGVbbSYoMTw8Yy5sZW5iaXRzKS0xXSxxYj1BYj4+PjI0LHJiPUFiPj4+MTYmMjU1LHNiPTY1NTM1JkFiLCEobj49cWIpOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9aWYocmImJjA9PT0oMjQwJnJiKSl7Zm9yKHRiPXFiLHViPXJiLHZiPXNiO0FiPWMubGVuY29kZVt2YisoKG0mKDE8PHRiK3ViKS0xKT4+dGIpXSxxYj1BYj4+PjI0LHJiPUFiPj4+MTYmMjU1LHNiPTY1NTM1JkFiLCEobj49dGIrcWIpOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9bT4+Pj10YixuLT10YixjLmJhY2srPXRifWlmKG0+Pj49cWIsbi09cWIsYy5iYWNrKz1xYixjLmxlbmd0aD1zYiwwPT09cmIpe2MubW9kZT1oYjticmVha31pZigzMiZyYil7Yy5iYWNrPS0xLGMubW9kZT1WO2JyZWFrfWlmKDY0JnJiKXthLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixjLm1vZGU9bGI7YnJlYWt9Yy5leHRyYT0xNSZyYixjLm1vZGU9ZGI7Y2FzZSBkYjppZihjLmV4dHJhKXtmb3IoemI9Yy5leHRyYTt6Yj5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9Yy5sZW5ndGgrPW0mKDE8PGMuZXh0cmEpLTEsbT4+Pj1jLmV4dHJhLG4tPWMuZXh0cmEsYy5iYWNrKz1jLmV4dHJhfWMud2FzPWMubGVuZ3RoLGMubW9kZT1lYjtjYXNlIGViOmZvcig7QWI9Yy5kaXN0Y29kZVttJigxPDxjLmRpc3RiaXRzKS0xXSxxYj1BYj4+PjI0LHJiPUFiPj4+MTYmMjU1LHNiPTY1NTM1JkFiLCEobj49cWIpOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9aWYoMD09PSgyNDAmcmIpKXtmb3IodGI9cWIsdWI9cmIsdmI9c2I7QWI9Yy5kaXN0Y29kZVt2YisoKG0mKDE8PHRiK3ViKS0xKT4+dGIpXSxxYj1BYj4+PjI0LHJiPUFiPj4+MTYmMjU1LHNiPTY1NTM1JkFiLCEobj49dGIrcWIpOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9bT4+Pj10YixuLT10YixjLmJhY2srPXRifWlmKG0+Pj49cWIsbi09cWIsYy5iYWNrKz1xYiw2NCZyYil7YS5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsYy5tb2RlPWxiO2JyZWFrfWMub2Zmc2V0PXNiLGMuZXh0cmE9MTUmcmIsYy5tb2RlPWZiO2Nhc2UgZmI6aWYoYy5leHRyYSl7Zm9yKHpiPWMuZXh0cmE7emI+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWMub2Zmc2V0Kz1tJigxPDxjLmV4dHJhKS0xLG0+Pj49Yy5leHRyYSxuLT1jLmV4dHJhLGMuYmFjays9Yy5leHRyYX1pZihjLm9mZnNldD5jLmRtYXgpe2EubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsYy5tb2RlPWxiO2JyZWFrfWMubW9kZT1nYjtjYXNlIGdiOmlmKDA9PT1qKWJyZWFrIGE7aWYocT1wLWosYy5vZmZzZXQ+cSl7aWYocT1jLm9mZnNldC1xLHE+Yy53aGF2ZSYmYy5zYW5lKXthLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLGMubW9kZT1sYjticmVha31xPmMud25leHQ/KHEtPWMud25leHQsb2I9Yy53c2l6ZS1xKTpvYj1jLnduZXh0LXEscT5jLmxlbmd0aCYmKHE9Yy5sZW5ndGgpLHBiPWMud2luZG93fWVsc2UgcGI9ZixvYj1oLWMub2Zmc2V0LHE9Yy5sZW5ndGg7cT5qJiYocT1qKSxqLT1xLGMubGVuZ3RoLT1xO2RvIGZbaCsrXT1wYltvYisrXTt3aGlsZSgtLXEpOzA9PT1jLmxlbmd0aCYmKGMubW9kZT1jYik7YnJlYWs7Y2FzZSBoYjppZigwPT09ailicmVhayBhO2ZbaCsrXT1jLmxlbmd0aCxqLS0sYy5tb2RlPWNiO2JyZWFrO2Nhc2UgaWI6aWYoYy53cmFwKXtmb3IoOzMyPm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtfD1lW2crK108PG4sbis9OH1pZihwLT1qLGEudG90YWxfb3V0Kz1wLGMudG90YWwrPXAscCYmKGEuYWRsZXI9Yy5jaGVjaz1jLmZsYWdzP3QoYy5jaGVjayxmLHAsaC1wKTpzKGMuY2hlY2ssZixwLGgtcCkpLHA9aiwoYy5mbGFncz9tOmQobSkpIT09Yy5jaGVjayl7YS5tc2c9ImluY29ycmVjdCBkYXRhIGNoZWNrIixjLm1vZGU9bGI7YnJlYWt9bT0wLG49MH1jLm1vZGU9amI7Y2FzZSBqYjppZihjLndyYXAmJmMuZmxhZ3Mpe2Zvcig7MzI+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWlmKG0hPT0oNDI5NDk2NzI5NSZjLnRvdGFsKSl7YS5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLGMubW9kZT1sYjticmVha31tPTAsbj0wfWMubW9kZT1rYjtjYXNlIGtiOnhiPUQ7YnJlYWsgYTtjYXNlIGxiOnhiPUc7YnJlYWsgYTtjYXNlIG1iOnJldHVybiBIO2Nhc2UgbmI6ZGVmYXVsdDpyZXR1cm4gRn1yZXR1cm4gYS5uZXh0X291dD1oLGEuYXZhaWxfb3V0PWosYS5uZXh0X2luPWcsYS5hdmFpbF9pbj1pLGMuaG9sZD1tLGMuYml0cz1uLChjLndzaXplfHxwIT09YS5hdmFpbF9vdXQmJmMubW9kZTxsYiYmKGMubW9kZTxpYnx8YiE9PXopKSYmbChhLGEub3V0cHV0LGEubmV4dF9vdXQscC1hLmF2YWlsX291dCk/KGMubW9kZT1tYixIKTooby09YS5hdmFpbF9pbixwLT1hLmF2YWlsX291dCxhLnRvdGFsX2luKz1vLGEudG90YWxfb3V0Kz1wLGMudG90YWwrPXAsYy53cmFwJiZwJiYoYS5hZGxlcj1jLmNoZWNrPWMuZmxhZ3M/dChjLmNoZWNrLGYscCxhLm5leHRfb3V0LXApOnMoYy5jaGVjayxmLHAsYS5uZXh0X291dC1wKSksYS5kYXRhX3R5cGU9Yy5iaXRzKyhjLmxhc3Q/NjQ6MCkrKGMubW9kZT09PVY/MTI4OjApKyhjLm1vZGU9PT1iYnx8Yy5tb2RlPT09WT8yNTY6MCksKDA9PT1vJiYwPT09cHx8Yj09PXopJiZ4Yj09PUMmJih4Yj1JKSx4Yil9ZnVuY3Rpb24gbihhKXtpZighYXx8IWEuc3RhdGUpcmV0dXJuIEY7dmFyIGI9YS5zdGF0ZTtyZXR1cm4gYi53aW5kb3cmJihiLndpbmRvdz1udWxsKSxhLnN0YXRlPW51bGwsQ31mdW5jdGlvbiBvKGEsYil7dmFyIGM7cmV0dXJuIGEmJmEuc3RhdGU/KGM9YS5zdGF0ZSwwPT09KDImYy53cmFwKT9GOihjLmhlYWQ9YixiLmRvbmU9ITEsQykpOkZ9dmFyIHAscSxyPWEoIi4uL3V0aWxzL2NvbW1vbiIpLHM9YSgiLi9hZGxlcjMyIiksdD1hKCIuL2NyYzMyIiksdT1hKCIuL2luZmZhc3QiKSx2PWEoIi4vaW5mdHJlZXMiKSx3PTAseD0xLHk9Mix6PTQsQT01LEI9NixDPTAsRD0xLEU9MixGPS0yLEc9LTMsSD0tNCxJPS01LEo9OCxLPTEsTD0yLE09MyxOPTQsTz01LFA9NixRPTcsUj04LFM9OSxUPTEwLFU9MTEsVj0xMixXPTEzLFg9MTQsWT0xNSxaPTE2LCQ9MTcsXz0xOCxhYj0xOSxiYj0yMCxjYj0yMSxkYj0yMixlYj0yMyxmYj0yNCxnYj0yNSxoYj0yNixpYj0yNyxqYj0yOCxrYj0yOSxsYj0zMCxtYj0zMSxuYj0zMixvYj04NTIscGI9NTkyLHFiPTE1LHJiPXFiLHNiPSEwO2MuaW5mbGF0ZVJlc2V0PWcsYy5pbmZsYXRlUmVzZXQyPWgsYy5pbmZsYXRlUmVzZXRLZWVwPWYsYy5pbmZsYXRlSW5pdD1qLGMuaW5mbGF0ZUluaXQyPWksYy5pbmZsYXRlPW0sYy5pbmZsYXRlRW5kPW4sYy5pbmZsYXRlR2V0SGVhZGVyPW8sYy5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjoyNywiLi9hZGxlcjMyIjoyOSwiLi9jcmMzMiI6MzEsIi4vaW5mZmFzdCI6MzQsIi4vaW5mdHJlZXMiOjM2fV0sMzY6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO3ZhciBjPWEoIi4uL3V0aWxzL2NvbW1vbiIpLGQ9MTUsZT04NTIsZj01OTIsZz0wLGg9MSxpPTIsaj1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdLGs9WzE2LDE2LDE2LDE2LDE2LDE2LDE2LDE2LDE3LDE3LDE3LDE3LDE4LDE4LDE4LDE4LDE5LDE5LDE5LDE5LDIwLDIwLDIwLDIwLDIxLDIxLDIxLDIxLDE2LDcyLDc4XSxsPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSxtPVsxNiwxNiwxNiwxNiwxNywxNywxOCwxOCwxOSwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNCwyNSwyNSwyNiwyNiwyNywyNywyOCwyOCwyOSwyOSw2NCw2NF07Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixuLG8scCxxLHIscyl7dmFyIHQsdSx2LHcseCx5LHosQSxCLEM9cy5iaXRzLEQ9MCxFPTAsRj0wLEc9MCxIPTAsST0wLEo9MCxLPTAsTD0wLE09MCxOPW51bGwsTz0wLFA9bmV3IGMuQnVmMTYoZCsxKSxRPW5ldyBjLkJ1ZjE2KGQrMSksUj1udWxsLFM9MDtmb3IoRD0wO2Q+PUQ7RCsrKVBbRF09MDtmb3IoRT0wO28+RTtFKyspUFtiW24rRV1dKys7Zm9yKEg9QyxHPWQ7Rz49MSYmMD09PVBbR107Ry0tKTtpZihIPkcmJihIPUcpLDA9PT1HKXJldHVybiBwW3ErK109MjA5NzE1MjAscFtxKytdPTIwOTcxNTIwLHMuYml0cz0xLDA7Zm9yKEY9MTtHPkYmJjA9PT1QW0ZdO0YrKyk7Zm9yKEY+SCYmKEg9RiksSz0xLEQ9MTtkPj1EO0QrKylpZihLPDw9MSxLLT1QW0RdLDA+SylyZXR1cm4tMTtpZihLPjAmJihhPT09Z3x8MSE9PUcpKXJldHVybi0xO2ZvcihRWzFdPTAsRD0xO2Q+RDtEKyspUVtEKzFdPVFbRF0rUFtEXTtmb3IoRT0wO28+RTtFKyspMCE9PWJbbitFXSYmKHJbUVtiW24rRV1dKytdPUUpO2lmKGE9PT1nPyhOPVI9cix5PTE5KTphPT09aD8oTj1qLE8tPTI1NyxSPWssUy09MjU3LHk9MjU2KTooTj1sLFI9bSx5PS0xKSxNPTAsRT0wLEQ9Rix4PXEsST1ILEo9MCx2PS0xLEw9MTw8SCx3PUwtMSxhPT09aCYmTD5lfHxhPT09aSYmTD5mKXJldHVybiAxO2Zvcih2YXIgVD0wOzspe1QrKyx6PUQtSixyW0VdPHk/KEE9MCxCPXJbRV0pOnJbRV0+eT8oQT1SW1MrcltFXV0sQj1OW08rcltFXV0pOihBPTk2LEI9MCksdD0xPDxELUosdT0xPDxJLEY9dTtkbyB1LT10LHBbeCsoTT4+SikrdV09ejw8MjR8QTw8MTZ8QnwwO3doaWxlKDAhPT11KTtmb3IodD0xPDxELTE7TSZ0Oyl0Pj49MTtpZigwIT09dD8oTSY9dC0xLE0rPXQpOk09MCxFKyssMD09PS0tUFtEXSl7aWYoRD09PUcpYnJlYWs7RD1iW24rcltFXV19aWYoRD5IJiYoTSZ3KSE9PXYpe2ZvcigwPT09SiYmKEo9SCkseCs9RixJPUQtSixLPTE8PEk7Rz5JK0omJihLLT1QW0krSl0sISgwPj1LKSk7KUkrKyxLPDw9MTtpZihMKz0xPDxJLGE9PT1oJiZMPmV8fGE9PT1pJiZMPmYpcmV0dXJuIDE7dj1NJncscFt2XT1IPDwyNHxJPDwxNnx4LXF8MH19cmV0dXJuIDAhPT1NJiYocFt4K01dPUQtSjw8MjR8NjQ8PDE2fDApLHMuYml0cz1ILDB9fSx7Ii4uL3V0aWxzL2NvbW1vbiI6Mjd9XSwzNzpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7Yi5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSwzODpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe2Zvcih2YXIgYj1hLmxlbmd0aDstLWI+PTA7KWFbYl09MH1mdW5jdGlvbiBlKGEpe3JldHVybiAyNTY+YT9nYlthXTpnYlsyNTYrKGE+Pj43KV19ZnVuY3Rpb24gZihhLGIpe2EucGVuZGluZ19idWZbYS5wZW5kaW5nKytdPTI1NSZiLGEucGVuZGluZ19idWZbYS5wZW5kaW5nKytdPWI+Pj44JjI1NX1mdW5jdGlvbiBnKGEsYixjKXthLmJpX3ZhbGlkPlYtYz8oYS5iaV9idWZ8PWI8PGEuYmlfdmFsaWQmNjU1MzUsZihhLGEuYmlfYnVmKSxhLmJpX2J1Zj1iPj5WLWEuYmlfdmFsaWQsYS5iaV92YWxpZCs9Yy1WKTooYS5iaV9idWZ8PWI8PGEuYmlfdmFsaWQmNjU1MzUsYS5iaV92YWxpZCs9Yyl9ZnVuY3Rpb24gaChhLGIsYyl7ZyhhLGNbMipiXSxjWzIqYisxXSl9ZnVuY3Rpb24gaShhLGIpe3ZhciBjPTA7ZG8gY3w9MSZhLGE+Pj49MSxjPDw9MTt3aGlsZSgtLWI+MCk7cmV0dXJuIGM+Pj4xfWZ1bmN0aW9uIGooYSl7MTY9PT1hLmJpX3ZhbGlkPyhmKGEsYS5iaV9idWYpLGEuYmlfYnVmPTAsYS5iaV92YWxpZD0wKTphLmJpX3ZhbGlkPj04JiYoYS5wZW5kaW5nX2J1ZlthLnBlbmRpbmcrK109MjU1JmEuYmlfYnVmLGEuYmlfYnVmPj49OCxhLmJpX3ZhbGlkLT04KX1mdW5jdGlvbiBrKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk9Yi5keW5fdHJlZSxqPWIubWF4X2NvZGUsaz1iLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxsPWIuc3RhdF9kZXNjLmhhc19zdHJlZSxtPWIuc3RhdF9kZXNjLmV4dHJhX2JpdHMsbj1iLnN0YXRfZGVzYy5leHRyYV9iYXNlLG89Yi5zdGF0X2Rlc2MubWF4X2xlbmd0aCxwPTA7Zm9yKGY9MDtVPj1mO2YrKylhLmJsX2NvdW50W2ZdPTA7Zm9yKGlbMiphLmhlYXBbYS5oZWFwX21heF0rMV09MCxjPWEuaGVhcF9tYXgrMTtUPmM7YysrKWQ9YS5oZWFwW2NdLGY9aVsyKmlbMipkKzFdKzFdKzEsZj5vJiYoZj1vLHArKyksaVsyKmQrMV09ZixkPmp8fChhLmJsX2NvdW50W2ZdKyssZz0wLGQ+PW4mJihnPW1bZC1uXSksaD1pWzIqZF0sYS5vcHRfbGVuKz1oKihmK2cpLGwmJihhLnN0YXRpY19sZW4rPWgqKGtbMipkKzFdK2cpKSk7aWYoMCE9PXApe2Rve2ZvcihmPW8tMTswPT09YS5ibF9jb3VudFtmXTspZi0tO2EuYmxfY291bnRbZl0tLSxhLmJsX2NvdW50W2YrMV0rPTIsYS5ibF9jb3VudFtvXS0tLHAtPTJ9d2hpbGUocD4wKTtmb3IoZj1vOzAhPT1mO2YtLSlmb3IoZD1hLmJsX2NvdW50W2ZdOzAhPT1kOyllPWEuaGVhcFstLWNdLGU+anx8KGlbMiplKzFdIT09ZiYmKGEub3B0X2xlbis9KGYtaVsyKmUrMV0pKmlbMiplXSxpWzIqZSsxXT1mKSxkLS0pfX1mdW5jdGlvbiBsKGEsYixjKXt2YXIgZCxlLGY9bmV3IEFycmF5KFUrMSksZz0wO2ZvcihkPTE7VT49ZDtkKyspZltkXT1nPWcrY1tkLTFdPDwxO2ZvcihlPTA7Yj49ZTtlKyspe3ZhciBoPWFbMiplKzFdOzAhPT1oJiYoYVsyKmVdPWkoZltoXSsrLGgpKX19ZnVuY3Rpb24gbSgpe3ZhciBhLGIsYyxkLGUsZj1uZXcgQXJyYXkoVSsxKTtmb3IoYz0wLGQ9MDtPLTE+ZDtkKyspZm9yKGliW2RdPWMsYT0wO2E8MTw8X1tkXTthKyspaGJbYysrXT1kO2ZvcihoYltjLTFdPWQsZT0wLGQ9MDsxNj5kO2QrKylmb3IoamJbZF09ZSxhPTA7YTwxPDxhYltkXTthKyspZ2JbZSsrXT1kO2ZvcihlPj49NztSPmQ7ZCsrKWZvcihqYltkXT1lPDw3LGE9MDthPDE8PGFiW2RdLTc7YSsrKWdiWzI1NitlKytdPWQ7Zm9yKGI9MDtVPj1iO2IrKylmW2JdPTA7Zm9yKGE9MDsxNDM+PWE7KWViWzIqYSsxXT04LGErKyxmWzhdKys7Zm9yKDsyNTU+PWE7KWViWzIqYSsxXT05LGErKyxmWzldKys7Zm9yKDsyNzk+PWE7KWViWzIqYSsxXT03LGErKyxmWzddKys7Zm9yKDsyODc+PWE7KWViWzIqYSsxXT04LGErKyxmWzhdKys7Zm9yKGwoZWIsUSsxLGYpLGE9MDtSPmE7YSsrKWZiWzIqYSsxXT01LGZiWzIqYV09aShhLDUpO2tiPW5ldyBuYihlYixfLFArMSxRLFUpLGxiPW5ldyBuYihmYixhYiwwLFIsVSksbWI9bmV3IG5iKG5ldyBBcnJheSgwKSxiYiwwLFMsVyl9ZnVuY3Rpb24gbihhKXt2YXIgYjtmb3IoYj0wO1E+YjtiKyspYS5keW5fbHRyZWVbMipiXT0wO2ZvcihiPTA7Uj5iO2IrKylhLmR5bl9kdHJlZVsyKmJdPTA7Zm9yKGI9MDtTPmI7YisrKWEuYmxfdHJlZVsyKmJdPTA7YS5keW5fbHRyZWVbMipYXT0xLGEub3B0X2xlbj1hLnN0YXRpY19sZW49MCxhLmxhc3RfbGl0PWEubWF0Y2hlcz0wfWZ1bmN0aW9uIG8oYSl7YS5iaV92YWxpZD44P2YoYSxhLmJpX2J1Zik6YS5iaV92YWxpZD4wJiYoYS5wZW5kaW5nX2J1ZlthLnBlbmRpbmcrK109YS5iaV9idWYpLGEuYmlfYnVmPTAsYS5iaV92YWxpZD0wfWZ1bmN0aW9uIHAoYSxiLGMsZCl7byhhKSxkJiYoZihhLGMpLGYoYSx+YykpLEUuYXJyYXlTZXQoYS5wZW5kaW5nX2J1ZixhLndpbmRvdyxiLGMsYS5wZW5kaW5nKSxhLnBlbmRpbmcrPWN9ZnVuY3Rpb24gcShhLGIsYyxkKXt2YXIgZT0yKmIsZj0yKmM7cmV0dXJuIGFbZV08YVtmXXx8YVtlXT09PWFbZl0mJmRbYl08PWRbY119ZnVuY3Rpb24gcihhLGIsYyl7Zm9yKHZhciBkPWEuaGVhcFtjXSxlPWM8PDE7ZTw9YS5oZWFwX2xlbiYmKGU8YS5oZWFwX2xlbiYmcShiLGEuaGVhcFtlKzFdLGEuaGVhcFtlXSxhLmRlcHRoKSYmZSsrLCFxKGIsZCxhLmhlYXBbZV0sYS5kZXB0aCkpOylhLmhlYXBbY109YS5oZWFwW2VdLGM9ZSxlPDw9MTthLmhlYXBbY109ZH1mdW5jdGlvbiBzKGEsYixjKXt2YXIgZCxmLGksaixrPTA7aWYoMCE9PWEubGFzdF9saXQpZG8gZD1hLnBlbmRpbmdfYnVmW2EuZF9idWYrMiprXTw8OHxhLnBlbmRpbmdfYnVmW2EuZF9idWYrMiprKzFdLGY9YS5wZW5kaW5nX2J1ZlthLmxfYnVmK2tdLGsrKywwPT09ZD9oKGEsZixiKTooaT1oYltmXSxoKGEsaStQKzEsYiksaj1fW2ldLDAhPT1qJiYoZi09aWJbaV0sZyhhLGYsaikpLGQtLSxpPWUoZCksaChhLGksYyksaj1hYltpXSwwIT09aiYmKGQtPWpiW2ldLGcoYSxkLGopKSk7d2hpbGUoazxhLmxhc3RfbGl0KTtoKGEsWCxiKX1mdW5jdGlvbiB0KGEsYil7dmFyIGMsZCxlLGY9Yi5keW5fdHJlZSxnPWIuc3RhdF9kZXNjLnN0YXRpY190cmVlLGg9Yi5zdGF0X2Rlc2MuaGFzX3N0cmVlLGk9Yi5zdGF0X2Rlc2MuZWxlbXMsaj0tMTtmb3IoYS5oZWFwX2xlbj0wLGEuaGVhcF9tYXg9VCxjPTA7aT5jO2MrKykwIT09ZlsyKmNdPyhhLmhlYXBbKythLmhlYXBfbGVuXT1qPWMsYS5kZXB0aFtjXT0wKTpmWzIqYysxXT0wO2Zvcig7YS5oZWFwX2xlbjwyOyllPWEuaGVhcFsrK2EuaGVhcF9sZW5dPTI+aj8rK2o6MCxmWzIqZV09MSxhLmRlcHRoW2VdPTAsYS5vcHRfbGVuLS0saCYmKGEuc3RhdGljX2xlbi09Z1syKmUrMV0pO2ZvcihiLm1heF9jb2RlPWosYz1hLmhlYXBfbGVuPj4xO2M+PTE7Yy0tKXIoYSxmLGMpO2U9aTtkbyBjPWEuaGVhcFsxXSxhLmhlYXBbMV09YS5oZWFwW2EuaGVhcF9sZW4tLV0scihhLGYsMSksZD1hLmhlYXBbMV0sYS5oZWFwWy0tYS5oZWFwX21heF09YyxhLmhlYXBbLS1hLmhlYXBfbWF4XT1kLGZbMiplXT1mWzIqY10rZlsyKmRdLGEuZGVwdGhbZV09KGEuZGVwdGhbY10+PWEuZGVwdGhbZF0/YS5kZXB0aFtjXTphLmRlcHRoW2RdKSsxLGZbMipjKzFdPWZbMipkKzFdPWUsYS5oZWFwWzFdPWUrKyxyKGEsZiwxKTt3aGlsZShhLmhlYXBfbGVuPj0yKTthLmhlYXBbLS1hLmhlYXBfbWF4XT1hLmhlYXBbMV0sayhhLGIpLGwoZixqLGEuYmxfY291bnQpfWZ1bmN0aW9uIHUoYSxiLGMpe3ZhciBkLGUsZj0tMSxnPWJbMV0saD0wLGk9NyxqPTQ7Zm9yKDA9PT1nJiYoaT0xMzgsaj0zKSxiWzIqKGMrMSkrMV09NjU1MzUsZD0wO2M+PWQ7ZCsrKWU9ZyxnPWJbMiooZCsxKSsxXSwrK2g8aSYmZT09PWd8fChqPmg/YS5ibF90cmVlWzIqZV0rPWg6MCE9PWU/KGUhPT1mJiZhLmJsX3RyZWVbMiplXSsrLGEuYmxfdHJlZVsyKlldKyspOjEwPj1oP2EuYmxfdHJlZVsyKlpdKys6YS5ibF90cmVlWzIqJF0rKyxoPTAsZj1lLDA9PT1nPyhpPTEzOCxqPTMpOmU9PT1nPyhpPTYsaj0zKTooaT03LGo9NCkpfWZ1bmN0aW9uIHYoYSxiLGMpe3ZhciBkLGUsZj0tMSxpPWJbMV0saj0wLGs9NyxsPTQ7Zm9yKDA9PT1pJiYoaz0xMzgsbD0zKSxkPTA7Yz49ZDtkKyspaWYoZT1pLGk9YlsyKihkKzEpKzFdLCEoKytqPGsmJmU9PT1pKSl7aWYobD5qKXtkbyBoKGEsZSxhLmJsX3RyZWUpO3doaWxlKDAhPT0tLWopfWVsc2UgMCE9PWU/KGUhPT1mJiYoaChhLGUsYS5ibF90cmVlKSxqLS0pLGgoYSxZLGEuYmxfdHJlZSksZyhhLGotMywyKSk6MTA+PWo/KGgoYSxaLGEuYmxfdHJlZSksZyhhLGotMywzKSk6KGgoYSwkLGEuYmxfdHJlZSksZyhhLGotMTEsNykpO2o9MCxmPWUsMD09PWk/KGs9MTM4LGw9Myk6ZT09PWk/KGs9NixsPTMpOihrPTcsbD00KX19ZnVuY3Rpb24gdyhhKXt2YXIgYjtmb3IodShhLGEuZHluX2x0cmVlLGEubF9kZXNjLm1heF9jb2RlKSx1KGEsYS5keW5fZHRyZWUsYS5kX2Rlc2MubWF4X2NvZGUpLHQoYSxhLmJsX2Rlc2MpLGI9Uy0xO2I+PTMmJjA9PT1hLmJsX3RyZWVbMipjYltiXSsxXTtiLS0pO3JldHVybiBhLm9wdF9sZW4rPTMqKGIrMSkrNSs1KzQsYn1mdW5jdGlvbiB4KGEsYixjLGQpe3ZhciBlO2ZvcihnKGEsYi0yNTcsNSksZyhhLGMtMSw1KSxnKGEsZC00LDQpLGU9MDtkPmU7ZSsrKWcoYSxhLmJsX3RyZWVbMipjYltlXSsxXSwzKTt2KGEsYS5keW5fbHRyZWUsYi0xKSx2KGEsYS5keW5fZHRyZWUsYy0xKX1mdW5jdGlvbiB5KGEpe3ZhciBiLGM9NDA5MzYyNDQ0Nztmb3IoYj0wOzMxPj1iO2IrKyxjPj4+PTEpaWYoMSZjJiYwIT09YS5keW5fbHRyZWVbMipiXSlyZXR1cm4gRztpZigwIT09YS5keW5fbHRyZWVbMThdfHwwIT09YS5keW5fbHRyZWVbMjBdfHwwIT09YS5keW5fbHRyZWVbMjZdKXJldHVybiBIO2ZvcihiPTMyO1A+YjtiKyspaWYoMCE9PWEuZHluX2x0cmVlWzIqYl0pcmV0dXJuIEg7cmV0dXJuIEd9ZnVuY3Rpb24geihhKXtwYnx8KG0oKSxwYj0hMCksYS5sX2Rlc2M9bmV3IG9iKGEuZHluX2x0cmVlLGtiKSxhLmRfZGVzYz1uZXcgb2IoYS5keW5fZHRyZWUsbGIpLGEuYmxfZGVzYz1uZXcgb2IoYS5ibF90cmVlLG1iKSxhLmJpX2J1Zj0wLGEuYmlfdmFsaWQ9MCxuKGEpfWZ1bmN0aW9uIEEoYSxiLGMsZCl7ZyhhLChKPDwxKSsoZD8xOjApLDMpLHAoYSxiLGMsITApfWZ1bmN0aW9uIEIoYSl7ZyhhLEs8PDEsMyksaChhLFgsZWIpLGooYSl9ZnVuY3Rpb24gQyhhLGIsYyxkKXt2YXIgZSxmLGg9MDthLmxldmVsPjA/KGEuc3RybS5kYXRhX3R5cGU9PT1JJiYoYS5zdHJtLmRhdGFfdHlwZT15KGEpKSx0KGEsYS5sX2Rlc2MpLHQoYSxhLmRfZGVzYyksaD13KGEpLGU9YS5vcHRfbGVuKzMrNz4+PjMsZj1hLnN0YXRpY19sZW4rMys3Pj4+MyxlPj1mJiYoZT1mKSk6ZT1mPWMrNSxlPj1jKzQmJi0xIT09Yj9BKGEsYixjLGQpOmEuc3RyYXRlZ3k9PT1GfHxmPT09ZT8oZyhhLChLPDwxKSsoZD8xOjApLDMpLHMoYSxlYixmYikpOihnKGEsKEw8PDEpKyhkPzE6MCksMykseChhLGEubF9kZXNjLm1heF9jb2RlKzEsYS5kX2Rlc2MubWF4X2NvZGUrMSxoKzEpLHMoYSxhLmR5bl9sdHJlZSxhLmR5bl9kdHJlZSkpLG4oYSksZCYmbyhhKX1mdW5jdGlvbiBEKGEsYixjKXtyZXR1cm4gYS5wZW5kaW5nX2J1ZlthLmRfYnVmKzIqYS5sYXN0X2xpdF09Yj4+PjgmMjU1LGEucGVuZGluZ19idWZbYS5kX2J1ZisyKmEubGFzdF9saXQrMV09MjU1JmIsYS5wZW5kaW5nX2J1ZlthLmxfYnVmK2EubGFzdF9saXRdPTI1NSZjLGEubGFzdF9saXQrKywwPT09Yj9hLmR5bl9sdHJlZVsyKmNdKys6KGEubWF0Y2hlcysrLGItLSxhLmR5bl9sdHJlZVsyKihoYltjXStQKzEpXSsrLGEuZHluX2R0cmVlWzIqZShiKV0rKyksYS5sYXN0X2xpdD09PWEubGl0X2J1ZnNpemUtMX12YXIgRT1hKCIuLi91dGlscy9jb21tb24iKSxGPTQsRz0wLEg9MSxJPTIsSj0wLEs9MSxMPTIsTT0zLE49MjU4LE89MjksUD0yNTYsUT1QKzErTyxSPTMwLFM9MTksVD0yKlErMSxVPTE1LFY9MTYsVz03LFg9MjU2LFk9MTYsWj0xNywkPTE4LF89WzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMF0sYWI9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLGJiPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxjYj1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0sZGI9NTEyLGViPW5ldyBBcnJheSgyKihRKzIpKTtkKGViKTt2YXIgZmI9bmV3IEFycmF5KDIqUik7ZChmYik7dmFyIGdiPW5ldyBBcnJheShkYik7ZChnYik7dmFyIGhiPW5ldyBBcnJheShOLU0rMSk7ZChoYik7dmFyIGliPW5ldyBBcnJheShPKTtkKGliKTt2YXIgamI9bmV3IEFycmF5KFIpO2QoamIpO3ZhciBrYixsYixtYixuYj1mdW5jdGlvbihhLGIsYyxkLGUpe3RoaXMuc3RhdGljX3RyZWU9YSx0aGlzLmV4dHJhX2JpdHM9Yix0aGlzLmV4dHJhX2Jhc2U9Yyx0aGlzLmVsZW1zPWQsdGhpcy5tYXhfbGVuZ3RoPWUsdGhpcy5oYXNfc3RyZWU9YSYmYS5sZW5ndGh9LG9iPWZ1bmN0aW9uKGEsYil7dGhpcy5keW5fdHJlZT1hLHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1ifSxwYj0hMTtjLl90cl9pbml0PXosYy5fdHJfc3RvcmVkX2Jsb2NrPUEsYy5fdHJfZmx1c2hfYmxvY2s9QyxjLl90cl90YWxseT1ELGMuX3RyX2FsaWduPUJ9LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM5OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRhdGFfdHlwZT0yLHRoaXMuYWRsZXI9MH1iLmV4cG9ydHM9Y30se31dfSx7fSxbOV0pKDkpfSk7J3VzZSBzdHJpY3QnO2lmKHRyLmlzVmlubil7Z2xvYmFsLkpTWmlwPWdsb2JhbC53aW5kb3cuSlNaaXA7Z2xvYmFsLndpbmRvdz11bmRlZmluZWQ7fWVsc2UgaWYodHIuaXNOb2RlKXtjb25zdCBqc1ppcEFic1BhdGg9SFRNTEltcG9ydHNMb2FkZXIuaHJlZlRvQWJzb2x1dGVQYXRoKCcvanN6aXAubWluLmpzJyk7Y29uc3QganNaaXBNb2R1bGU9cmVxdWlyZShqc1ppcEFic1BhdGgpO2dsb2JhbC5KU1ppcD1qc1ppcE1vZHVsZTt9J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFppcEltcG9ydGVyKG1vZGVsLGV2ZW50RGF0YSl7aWYoZXZlbnREYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe2V2ZW50RGF0YT1uZXcgVWludDhBcnJheShldmVudERhdGEpO30KLXRoaXMubW9kZWxfPW1vZGVsO3RoaXMuZXZlbnREYXRhXz1ldmVudERhdGE7fQotWmlwSW1wb3J0ZXIuY2FuSW1wb3J0PWZ1bmN0aW9uKGV2ZW50RGF0YSl7bGV0IGhlYWRlcjtpZihldmVudERhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7aGVhZGVyPW5ldyBVaW50OEFycmF5KGV2ZW50RGF0YS5zbGljZSgwLDIpKTt9ZWxzZSBpZih0eXBlb2YoZXZlbnREYXRhKT09PSdzdHJpbmcnfHxldmVudERhdGEgaW5zdGFuY2VvZiBTdHJpbmcpe2hlYWRlcj1bZXZlbnREYXRhLmNoYXJDb2RlQXQoMCksZXZlbnREYXRhLmNoYXJDb2RlQXQoMSldO31lbHNle3JldHVybiBmYWxzZTt9Ci1yZXR1cm4gaGVhZGVyWzBdPT09J1AnLmNoYXJDb2RlQXQoMCkmJmhlYWRlclsxXT09PSdLJy5jaGFyQ29kZUF0KDApO307WmlwSW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucHJvdG90eXBlLGdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nWmlwSW1wb3J0ZXInO30saXNUcmFjZURhdGFDb250YWluZXIoKXtyZXR1cm4gdHJ1ZTt9LGV4dHJhY3RTdWJ0cmFjZXMoKXtjb25zdCB6aXA9bmV3IEpTWmlwKHRoaXMuZXZlbnREYXRhXyk7Y29uc3Qgc3VidHJhY2VzPVtdO2Zvcihjb25zdCBpZHggaW4gemlwLmZpbGVzKXtzdWJ0cmFjZXMucHVzaCh6aXAuZmlsZXNbaWR4XS5hc0JpbmFyeSgpKTt9Ci1yZXR1cm4gc3VidHJhY2VzO319O3RyLmltcG9ydGVyLkltcG9ydGVyLnJlZ2lzdGVyKFppcEltcG9ydGVyKTtyZXR1cm57WmlwSW1wb3J0ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEhlYXBFbnRyeShoZWFwRHVtcCxsZWFmU3RhY2tGcmFtZSxvYmplY3RUeXBlTmFtZSxzaXplLGNvdW50LHZhbHVlc0FyZVRvdGFscyl7dGhpcy5oZWFwRHVtcD1oZWFwRHVtcDt0aGlzLmxlYWZTdGFja0ZyYW1lPWxlYWZTdGFja0ZyYW1lO3RoaXMub2JqZWN0VHlwZU5hbWU9b2JqZWN0VHlwZU5hbWU7dGhpcy5zaXplPXNpemU7dGhpcy5jb3VudD1jb3VudDt0aGlzLnZhbHVlc0FyZVRvdGFscz12YWx1ZXNBcmVUb3RhbHM7fQotZnVuY3Rpb24gSGVhcER1bXAocHJvY2Vzc01lbW9yeUR1bXAsYWxsb2NhdG9yTmFtZSxpc0NvbXBsZXRlKXt0aGlzLnByb2Nlc3NNZW1vcnlEdW1wPXByb2Nlc3NNZW1vcnlEdW1wO3RoaXMuYWxsb2NhdG9yTmFtZT1hbGxvY2F0b3JOYW1lO3RoaXMuaXNDb21wbGV0ZT1pc0NvbXBsZXRlO3RoaXMuZW50cmllcz1bXTt9Ci1IZWFwRHVtcC5wcm90b3R5cGU9e2FkZEVudHJ5KGxlYWZTdGFja0ZyYW1lLG9iamVjdFR5cGVOYW1lLHNpemUsY291bnQsb3B0X3ZhbHVlc0FyZVRvdGFscyl7aWYob3B0X3ZhbHVlc0FyZVRvdGFscz09PXVuZGVmaW5lZClvcHRfdmFsdWVzQXJlVG90YWxzPXRydWU7Y29uc3QgdmFsdWVzQXJlVG90YWxzPW9wdF92YWx1ZXNBcmVUb3RhbHM7Y29uc3QgZW50cnk9bmV3IEhlYXBFbnRyeSh0aGlzLGxlYWZTdGFja0ZyYW1lLG9iamVjdFR5cGVOYW1lLHNpemUsY291bnQsdmFsdWVzQXJlVG90YWxzKTt0aGlzLmVudHJpZXMucHVzaChlbnRyeSk7cmV0dXJuIGVudHJ5O319O3JldHVybntIZWFwRW50cnksSGVhcER1bXAsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gSGVhcER1bXBUcmFjZUV2ZW50SW1wb3J0ZXIoaGVhcFByb2ZpbGVFeHBhbmRlcixzdGFja0ZyYW1lcyxwcm9jZXNzTWVtb3J5RHVtcCxpZFByZWZpeCxtb2RlbCl7dGhpcy5leHBhbmRlcj1oZWFwUHJvZmlsZUV4cGFuZGVyO3RoaXMuc3RhY2tGcmFtZXM9c3RhY2tGcmFtZXM7dGhpcy5wcm9jZXNzTWVtb3J5RHVtcD1wcm9jZXNzTWVtb3J5RHVtcDt0aGlzLmlkUHJlZml4PWlkUHJlZml4O3RoaXMubW9kZWw9bW9kZWw7fQotSGVhcER1bXBUcmFjZUV2ZW50SW1wb3J0ZXIucHJvdG90eXBlPXtnZXRMZWFmU3RhY2tGcmFtZShzdGFja0ZyYW1lSWQpe2lmKHN0YWNrRnJhbWVJZD09PScnKXJldHVybiB1bmRlZmluZWQ7Y29uc3QgcGFyZW50SWQ9dGhpcy5pZFByZWZpeCtzdGFja0ZyYW1lSWQ7Y29uc3QgaWQ9cGFyZW50SWQrJzpzZWxmJztpZighdGhpcy5zdGFja0ZyYW1lc1tpZF0pe2NvbnN0IHBhcmVudFN0YWNrRnJhbWU9dGhpcy5zdGFja0ZyYW1lc1twYXJlbnRJZF07Y29uc3Qgc3RhY2tGcmFtZT1uZXcgdHIubW9kZWwuU3RhY2tGcmFtZShwYXJlbnRTdGFja0ZyYW1lLGlkLCc8c2VsZj4nLHVuZGVmaW5lZCk7dGhpcy5tb2RlbC5hZGRTdGFja0ZyYW1lKHN0YWNrRnJhbWUpO30KLXJldHVybiB0aGlzLnN0YWNrRnJhbWVzW2lkXTt9LHBhcnNlRW50cnkoZW50cnksaGVhcER1bXApe2NvbnN0IHNpemU9ZW50cnkuc2l6ZTtjb25zdCBjb3VudD1lbnRyeS5jb3VudDtjb25zdCBsZWFmU3RhY2tGcmFtZT10aGlzLmdldExlYWZTdGFja0ZyYW1lKGVudHJ5Lm5vZGUuaWQpO2NvbnN0IG9iamVjdFR5cGVOYW1lPWVudHJ5LnR5cGUubmFtZTtjb25zdCB2YWx1ZXNBcmVUb3RhbHM9ZmFsc2U7aWYob2JqZWN0VHlwZU5hbWU9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNaXNzaW5nIG9iamVjdCB0eXBlIG5hbWUgKElEICcrdHlwZUlkKycpJyx9KTt9Ci1oZWFwRHVtcC5hZGRFbnRyeShsZWFmU3RhY2tGcmFtZSxvYmplY3RUeXBlTmFtZSxzaXplLGNvdW50LHZhbHVlc0FyZVRvdGFscyk7fSxwYXJzZSgpe2NvbnN0IGhlYXBEdW1wcz17fTtjb25zdCBpbmZsYXRlZD10aGlzLmV4cGFuZGVyLmluZmxhdGVkO2Zvcihjb25zdFthbGxvY2F0b3JOYW1lLGVudHJpZXNdb2YgT2JqZWN0LmVudHJpZXMoaW5mbGF0ZWQpKXtjb25zdCBoZWFwRHVtcD1uZXcgdHIubW9kZWwuSGVhcER1bXAodGhpcy5wcm9jZXNzTWVtb3J5RHVtcCxhbGxvY2F0b3JOYW1lKTtmb3IoY29uc3QgZW50cnkgb2YgZW50cmllcyl7dGhpcy5wYXJzZUVudHJ5KGVudHJ5LGhlYXBEdW1wKTt9Ci1oZWFwRHVtcC5pc0NvbXBsZXRlPXRydWU7aGVhcER1bXBzW2FsbG9jYXRvck5hbWVdPWhlYXBEdW1wO30KLXJldHVybiBoZWFwRHVtcHM7fSx9O3JldHVybntIZWFwRHVtcFRyYWNlRXZlbnRJbXBvcnRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlcicsZnVuY3Rpb24oKXtmdW5jdGlvbiBMZWdhY3lIZWFwRHVtcFRyYWNlRXZlbnRJbXBvcnRlcihtb2RlbCxwcm9jZXNzTWVtb3J5RHVtcCxwcm9jZXNzT2JqZWN0VHlwZU5hbWVNYXAsaWRQcmVmaXgsZHVtcElkLHJhd0hlYXBEdW1wcyl7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy5wcm9jZXNzT2JqZWN0VHlwZU5hbWVNYXBfPXByb2Nlc3NPYmplY3RUeXBlTmFtZU1hcDt0aGlzLmlkUHJlZml4Xz1pZFByZWZpeDt0aGlzLnByb2Nlc3NNZW1vcnlEdW1wXz1wcm9jZXNzTWVtb3J5RHVtcDt0aGlzLnBpZF89dGhpcy5wcm9jZXNzTWVtb3J5RHVtcF8ucHJvY2Vzcy5waWQ7dGhpcy5kdW1wSWRfPWR1bXBJZDt0aGlzLnJhd0hlYXBEdW1wc189cmF3SGVhcER1bXBzO30KLUxlZ2FjeUhlYXBEdW1wVHJhY2VFdmVudEltcG9ydGVyLnByb3RvdHlwZT17cGFyc2VSYXdIZWFwRHVtcChyYXdIZWFwRHVtcCxhbGxvY2F0b3JOYW1lKXtjb25zdCBtb2RlbD10aGlzLm1vZGVsXztjb25zdCBwcm9jZXNzTWVtb3J5RHVtcD10aGlzLnByb2Nlc3NNZW1vcnlEdW1wXztjb25zdCBoZWFwRHVtcD1uZXcgdHIubW9kZWwuSGVhcER1bXAocHJvY2Vzc01lbW9yeUR1bXAsYWxsb2NhdG9yTmFtZSk7Y29uc3QgZW50cmllcz1yYXdIZWFwRHVtcC5lbnRyaWVzO2lmKGVudHJpZXM9PT11bmRlZmluZWR8fGVudHJpZXMubGVuZ3RoPT09MCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J05vIGhlYXAgZW50cmllcyBpbiBhICcrYWxsb2NhdG9yTmFtZSsnIGhlYXAgZHVtcCBmb3IgUElEPScrdGhpcy5waWRfKycgYW5kIGR1bXAgSUQ9Jyt0aGlzLmR1bXBJZF8rJy4nfSk7cmV0dXJuIHVuZGVmaW5lZDt9Ci1jb25zdCBpc09sZEZvcm1hdD1lbnRyaWVzWzBdLmJ0PT09dW5kZWZpbmVkO2lmKCFpc09sZEZvcm1hdCYmdGhpcy5wcm9jZXNzT2JqZWN0VHlwZU5hbWVNYXBfPT09dW5kZWZpbmVkKXtyZXR1cm4gdW5kZWZpbmVkO30KLWZvcihsZXQgaT0wO2k8ZW50cmllcy5sZW5ndGg7aSsrKXtjb25zdCBlbnRyeT1lbnRyaWVzW2ldO2NvbnN0IHNpemU9cGFyc2VJbnQoZW50cnkuc2l6ZSwxNik7Y29uc3QgbGVhZlN0YWNrRnJhbWVJbmRleD1lbnRyeS5idDtsZXQgbGVhZlN0YWNrRnJhbWU7aWYoaXNPbGRGb3JtYXQpe2lmKGxlYWZTdGFja0ZyYW1lSW5kZXg9PT11bmRlZmluZWQpe2xlYWZTdGFja0ZyYW1lPXVuZGVmaW5lZDt9ZWxzZXtsZXQgbGVhZlN0YWNrRnJhbWVJZD10aGlzLmlkUHJlZml4XytsZWFmU3RhY2tGcmFtZUluZGV4O2lmKGxlYWZTdGFja0ZyYW1lSW5kZXg9PT0nJyl7bGVhZlN0YWNrRnJhbWU9dW5kZWZpbmVkO31lbHNle2xlYWZTdGFja0ZyYW1lPW1vZGVsLnN0YWNrRnJhbWVzW2xlYWZTdGFja0ZyYW1lSWRdO2lmKGxlYWZTdGFja0ZyYW1lPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonTWlzc2luZyBsZWFmIHN0YWNrIGZyYW1lIChJRCAnKwotbGVhZlN0YWNrRnJhbWVJZCsnKSBvZiBoZWFwIGVudHJ5ICcraSsnIChzaXplICcrCi1zaXplKycpIGluIGEgJythbGxvY2F0b3JOYW1lKycgaGVhcCBkdW1wIGZvciBQSUQ9Jyt0aGlzLnBpZF8rJy4nfSk7Y29udGludWU7fX0KLWxlYWZTdGFja0ZyYW1lSWQrPSc6c2VsZic7aWYobW9kZWwuc3RhY2tGcmFtZXNbbGVhZlN0YWNrRnJhbWVJZF0hPT11bmRlZmluZWQpe2xlYWZTdGFja0ZyYW1lPW1vZGVsLnN0YWNrRnJhbWVzW2xlYWZTdGFja0ZyYW1lSWRdO31lbHNle2xlYWZTdGFja0ZyYW1lPW5ldyB0ci5tb2RlbC5TdGFja0ZyYW1lKGxlYWZTdGFja0ZyYW1lLGxlYWZTdGFja0ZyYW1lSWQsJzxzZWxmPicsdW5kZWZpbmVkKTttb2RlbC5hZGRTdGFja0ZyYW1lKGxlYWZTdGFja0ZyYW1lKTt9fX1lbHNle2lmKGxlYWZTdGFja0ZyYW1lSW5kZXg9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNaXNzaW5nIHN0YWNrIGZyYW1lIElEIG9mIGhlYXAgZW50cnkgJytpKycgKHNpemUgJytzaXplKycpIGluIGEgJythbGxvY2F0b3JOYW1lKycgaGVhcCBkdW1wIGZvciBQSUQ9Jyt0aGlzLnBpZF8rJy4nfSk7Y29udGludWU7fQotY29uc3QgbGVhZlN0YWNrRnJhbWVJZD10aGlzLmlkUHJlZml4XytsZWFmU3RhY2tGcmFtZUluZGV4O2lmKGxlYWZTdGFja0ZyYW1lSW5kZXg9PT0nJyl7bGVhZlN0YWNrRnJhbWU9dW5kZWZpbmVkO31lbHNle2xlYWZTdGFja0ZyYW1lPW1vZGVsLnN0YWNrRnJhbWVzW2xlYWZTdGFja0ZyYW1lSWRdO2lmKGxlYWZTdGFja0ZyYW1lPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonTWlzc2luZyBsZWFmIHN0YWNrIGZyYW1lIChJRCAnK2xlYWZTdGFja0ZyYW1lSWQrJykgb2YgaGVhcCBlbnRyeSAnK2krJyAoc2l6ZSAnK3NpemUrJykgaW4gYSAnKwotYWxsb2NhdG9yTmFtZSsnIGhlYXAgZHVtcCBmb3IgUElEPScrdGhpcy5waWRfKycuJ30pO2NvbnRpbnVlO319fQotY29uc3Qgb2JqZWN0VHlwZUlkPWVudHJ5LnR5cGU7bGV0IG9iamVjdFR5cGVOYW1lO2lmKG9iamVjdFR5cGVJZD09PXVuZGVmaW5lZCl7b2JqZWN0VHlwZU5hbWU9dW5kZWZpbmVkO31lbHNlIGlmKHRoaXMucHJvY2Vzc09iamVjdFR5cGVOYW1lTWFwXz09PXVuZGVmaW5lZCl7Y29udGludWU7fWVsc2V7b2JqZWN0VHlwZU5hbWU9dGhpcy5wcm9jZXNzT2JqZWN0VHlwZU5hbWVNYXBfW29iamVjdFR5cGVJZF07aWYob2JqZWN0VHlwZU5hbWU9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNaXNzaW5nIG9iamVjdCB0eXBlIG5hbWUgKElEICcrb2JqZWN0VHlwZUlkKycpIG9mIGhlYXAgZW50cnkgJytpKycgKHNpemUgJytzaXplKycpIGluIGEgJysKLWFsbG9jYXRvck5hbWUrJyBoZWFwIGR1bXAgZm9yIFBJRD0nK3RoaXMucGlkXysnLid9KTtjb250aW51ZTt9fQotY29uc3QgY291bnQ9ZW50cnkuY291bnQ9PT11bmRlZmluZWQ/dW5kZWZpbmVkOnBhcnNlSW50KGVudHJ5LmNvdW50LDE2KTtoZWFwRHVtcC5hZGRFbnRyeShsZWFmU3RhY2tGcmFtZSxvYmplY3RUeXBlTmFtZSxzaXplLGNvdW50KTt9Ci1yZXR1cm4gaGVhcER1bXA7fSxwYXJzZSgpe2NvbnN0IGhlYXBEdW1wcz17fTtmb3IoY29uc3QgYWxsb2NhdG9yTmFtZSBpbiB0aGlzLnJhd0hlYXBEdW1wc18pe2NvbnN0IHJhd0hlYXBEdW1wPXRoaXMucmF3SGVhcER1bXBzX1thbGxvY2F0b3JOYW1lXTtjb25zdCBoZWFwRHVtcD10aGlzLnBhcnNlUmF3SGVhcER1bXAocmF3SGVhcER1bXAsYWxsb2NhdG9yTmFtZSk7aWYoaGVhcER1bXAhPT11bmRlZmluZWQmJmhlYXBEdW1wLmVudHJpZXMubGVuZ3RoPjApe2hlYXBEdW1wc1thbGxvY2F0b3JOYW1lXT1oZWFwRHVtcDt9fQotcmV0dXJuIGhlYXBEdW1wczt9LH07cmV0dXJue0xlZ2FjeUhlYXBEdW1wVHJhY2VFdmVudEltcG9ydGVyLH07fSk7J3VzZSBzdHJpY3QnO2lmKHRyLmlzSGVhZGxlc3Mpe2dsb2JhbC53aW5kb3c9e307fQotKGZ1bmN0aW9uKHdpbmRvdyxPYmplY3QsQXJyYXksRXJyb3IsSlNPTix1bmRlZmluZWQpe3ZhciBwYXJ0aWFsQ29tcGxldGU9dmFyQXJncyhmdW5jdGlvbihmbixhcmdzKXt2YXIgbnVtQm91bmRBcmdzPWFyZ3MubGVuZ3RoO3JldHVybiB2YXJBcmdzKGZ1bmN0aW9uKGNhbGxBcmdzKXtmb3IodmFyIGk9MDtpPGNhbGxBcmdzLmxlbmd0aDtpKyspe2FyZ3NbbnVtQm91bmRBcmdzK2ldPWNhbGxBcmdzW2ldO30KLWFyZ3MubGVuZ3RoPW51bUJvdW5kQXJncytjYWxsQXJncy5sZW5ndGg7cmV0dXJuIGZuLmFwcGx5KHRoaXMsYXJncyk7fSk7fSksY29tcG9zZT12YXJBcmdzKGZ1bmN0aW9uKGZucyl7dmFyIGZuc0xpc3Q9YXJyYXlBc0xpc3QoZm5zKTtmdW5jdGlvbiBuZXh0KHBhcmFtcyxjdXJGbil7cmV0dXJuW2FwcGx5KHBhcmFtcyxjdXJGbildO30KLXJldHVybiB2YXJBcmdzKGZ1bmN0aW9uKHN0YXJ0UGFyYW1zKXtyZXR1cm4gZm9sZFIobmV4dCxzdGFydFBhcmFtcyxmbnNMaXN0KVswXTt9KTt9KTtmdW5jdGlvbiBjb21wb3NlMihmMSxmMil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGYxLmNhbGwodGhpcyxmMi5hcHBseSh0aGlzLGFyZ3VtZW50cykpO319Ci1mdW5jdGlvbiBhdHRyKGtleSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiBvW2tleV07fTt9Ci12YXIgbGF6eVVuaW9uPXZhckFyZ3MoZnVuY3Rpb24oZm5zKXtyZXR1cm4gdmFyQXJncyhmdW5jdGlvbihwYXJhbXMpe3ZhciBtYXliZVZhbHVlO2Zvcih2YXIgaT0wO2k8bGVuKGZucyk7aSsrKXttYXliZVZhbHVlPWFwcGx5KHBhcmFtcyxmbnNbaV0pO2lmKG1heWJlVmFsdWUpe3JldHVybiBtYXliZVZhbHVlO319fSk7fSk7ZnVuY3Rpb24gYXBwbHkoYXJncyxmbil7cmV0dXJuIGZuLmFwcGx5KHVuZGVmaW5lZCxhcmdzKTt9Ci1mdW5jdGlvbiB2YXJBcmdzKGZuKXt2YXIgbnVtYmVyT2ZGaXhlZEFyZ3VtZW50cz1mbi5sZW5ndGgtMSxzbGljZT1BcnJheS5wcm90b3R5cGUuc2xpY2U7aWYobnVtYmVyT2ZGaXhlZEFyZ3VtZW50cz09MCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGZuLmNhbGwodGhpcyxzbGljZS5jYWxsKGFyZ3VtZW50cykpO319ZWxzZSBpZihudW1iZXJPZkZpeGVkQXJndW1lbnRzPT0xKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZm4uY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxzbGljZS5jYWxsKGFyZ3VtZW50cywxKSk7fX0KLXZhciBhcmdzSG9sZGVyPUFycmF5KGZuLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTA7aTxudW1iZXJPZkZpeGVkQXJndW1lbnRzO2krKyl7YXJnc0hvbGRlcltpXT1hcmd1bWVudHNbaV07fQotYXJnc0hvbGRlcltudW1iZXJPZkZpeGVkQXJndW1lbnRzXT1zbGljZS5jYWxsKGFyZ3VtZW50cyxudW1iZXJPZkZpeGVkQXJndW1lbnRzKTtyZXR1cm4gZm4uYXBwbHkodGhpcyxhcmdzSG9sZGVyKTt9fQotZnVuY3Rpb24gZmxpcChmbil7cmV0dXJuIGZ1bmN0aW9uKGEsYil7cmV0dXJuIGZuKGIsYSk7fX0KLWZ1bmN0aW9uIGxhenlJbnRlcnNlY3Rpb24oZm4xLGZuMil7cmV0dXJuIGZ1bmN0aW9uKHBhcmFtKXtyZXR1cm4gZm4xKHBhcmFtKSYmZm4yKHBhcmFtKTt9O30KLWZ1bmN0aW9uIG5vb3AoKXt9Ci1mdW5jdGlvbiBhbHdheXMoKXtyZXR1cm4gdHJ1ZX0KLWZ1bmN0aW9uIGZ1bmN0b3IodmFsKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdmFsO319Ci1mdW5jdGlvbiBpc09mVHlwZShULG1heWJlU29tZXRoaW5nKXtyZXR1cm4gbWF5YmVTb21ldGhpbmcmJm1heWJlU29tZXRoaW5nLmNvbnN0cnVjdG9yPT09VDt9Ci12YXIgbGVuPWF0dHIoJ2xlbmd0aCcpLGlzU3RyaW5nPXBhcnRpYWxDb21wbGV0ZShpc09mVHlwZSxTdHJpbmcpO2Z1bmN0aW9uIGRlZmluZWQodmFsdWUpe3JldHVybiB2YWx1ZSE9PXVuZGVmaW5lZDt9Ci1mdW5jdGlvbiBoYXNBbGxQcm9wZXJ0aWVzKGZpZWxkTGlzdCxvKXtyZXR1cm4obyBpbnN0YW5jZW9mIE9iamVjdCkmJmFsbChmdW5jdGlvbihmaWVsZCl7cmV0dXJuKGZpZWxkIGluIG8pO30sZmllbGRMaXN0KTt9Ci1mdW5jdGlvbiBjb25zKHgseHMpe3JldHVyblt4LHhzXTt9Ci12YXIgZW1wdHlMaXN0PW51bGwsaGVhZD1hdHRyKDApLHRhaWw9YXR0cigxKTtmdW5jdGlvbiBhcnJheUFzTGlzdChpbnB1dEFycmF5KXtyZXR1cm4gcmV2ZXJzZUxpc3QoaW5wdXRBcnJheS5yZWR1Y2UoZmxpcChjb25zKSxlbXB0eUxpc3QpKTt9Ci12YXIgbGlzdD12YXJBcmdzKGFycmF5QXNMaXN0KTtmdW5jdGlvbiBsaXN0QXNBcnJheShsaXN0KXtyZXR1cm4gZm9sZFIoZnVuY3Rpb24oYXJyYXlTb0ZhcixsaXN0SXRlbSl7YXJyYXlTb0Zhci51bnNoaWZ0KGxpc3RJdGVtKTtyZXR1cm4gYXJyYXlTb0Zhcjt9LFtdLGxpc3QpO30KLWZ1bmN0aW9uIG1hcChmbixsaXN0KXtyZXR1cm4gbGlzdD9jb25zKGZuKGhlYWQobGlzdCkpLG1hcChmbix0YWlsKGxpc3QpKSk6ZW1wdHlMaXN0O30KLWZ1bmN0aW9uIGZvbGRSKGZuLHN0YXJ0VmFsdWUsbGlzdCl7cmV0dXJuIGxpc3Q/Zm4oZm9sZFIoZm4sc3RhcnRWYWx1ZSx0YWlsKGxpc3QpKSxoZWFkKGxpc3QpKTpzdGFydFZhbHVlO30KLWZ1bmN0aW9uIGZvbGRSMShmbixsaXN0KXtyZXR1cm4gdGFpbChsaXN0KT9mbihmb2xkUjEoZm4sdGFpbChsaXN0KSksaGVhZChsaXN0KSk6aGVhZChsaXN0KTt9Ci1mdW5jdGlvbiB3aXRob3V0KGxpc3QsdGVzdCxyZW1vdmVkRm4pe3JldHVybiB3aXRob3V0SW5uZXIobGlzdCxyZW1vdmVkRm58fG5vb3ApO2Z1bmN0aW9uIHdpdGhvdXRJbm5lcihzdWJMaXN0LHJlbW92ZWRGbil7cmV0dXJuIHN1Ykxpc3Q/KHRlc3QoaGVhZChzdWJMaXN0KSk/KHJlbW92ZWRGbihoZWFkKHN1Ykxpc3QpKSx0YWlsKHN1Ykxpc3QpKTpjb25zKGhlYWQoc3ViTGlzdCksd2l0aG91dElubmVyKHRhaWwoc3ViTGlzdCkscmVtb3ZlZEZuKSkpOmVtcHR5TGlzdDt9fQotZnVuY3Rpb24gYWxsKGZuLGxpc3Qpe3JldHVybiFsaXN0fHwoZm4oaGVhZChsaXN0KSkmJmFsbChmbix0YWlsKGxpc3QpKSk7fQotZnVuY3Rpb24gYXBwbHlFYWNoKGZuTGlzdCxhcmdzKXtpZihmbkxpc3Qpe2hlYWQoZm5MaXN0KS5hcHBseShudWxsLGFyZ3MpO2FwcGx5RWFjaCh0YWlsKGZuTGlzdCksYXJncyk7fX0KLWZ1bmN0aW9uIHJldmVyc2VMaXN0KGxpc3Qpe2Z1bmN0aW9uIHJldmVyc2VJbm5lcihsaXN0LHJldmVyc2VkQWxyZWFkeSl7aWYoIWxpc3Qpe3JldHVybiByZXZlcnNlZEFscmVhZHk7fQotcmV0dXJuIHJldmVyc2VJbm5lcih0YWlsKGxpc3QpLGNvbnMoaGVhZChsaXN0KSxyZXZlcnNlZEFscmVhZHkpKX0KLXJldHVybiByZXZlcnNlSW5uZXIobGlzdCxlbXB0eUxpc3QpO30KLWZ1bmN0aW9uIGZpcnN0KHRlc3QsbGlzdCl7cmV0dXJuIGxpc3QmJih0ZXN0KGhlYWQobGlzdCkpP2hlYWQobGlzdCk6Zmlyc3QodGVzdCx0YWlsKGxpc3QpKSk7fQotZnVuY3Rpb24gY2xhcmluZXQoZXZlbnRCdXMpeyJ1c2Ugc3RyaWN0Ijt2YXIKLWVtaXRTYXhLZXk9ZXZlbnRCdXMoU0FYX0tFWSkuZW1pdCxlbWl0VmFsdWVPcGVuPWV2ZW50QnVzKFNBWF9WQUxVRV9PUEVOKS5lbWl0LGVtaXRWYWx1ZUNsb3NlPWV2ZW50QnVzKFNBWF9WQUxVRV9DTE9TRSkuZW1pdCxlbWl0RmFpbD1ldmVudEJ1cyhGQUlMX0VWRU5UKS5lbWl0LE1BWF9CVUZGRVJfTEVOR1RIPTY0KjEwMjQsc3RyaW5nVG9rZW5QYXR0ZXJuPS9bXFwiXG5dL2csX249MCxCRUdJTj1fbisrLFZBTFVFPV9uKyssT1BFTl9PQkpFQ1Q9X24rKyxDTE9TRV9PQkpFQ1Q9X24rKyxPUEVOX0FSUkFZPV9uKyssQ0xPU0VfQVJSQVk9X24rKyxTVFJJTkc9X24rKyxPUEVOX0tFWT1fbisrLENMT1NFX0tFWT1fbisrLFRSVUU9X24rKyxUUlVFMj1fbisrLFRSVUUzPV9uKyssRkFMU0U9X24rKyxGQUxTRTI9X24rKyxGQUxTRTM9X24rKyxGQUxTRTQ9X24rKyxOVUxMPV9uKyssTlVMTDI9X24rKyxOVUxMMz1fbisrLE5VTUJFUl9ERUNJTUFMX1BPSU5UPV9uKyssTlVNQkVSX0RJR0lUPV9uLGJ1ZmZlckNoZWNrUG9zaXRpb249TUFYX0JVRkZFUl9MRU5HVEgsbGF0ZXN0RXJyb3IsYyxwLHRleHROb2RlPXVuZGVmaW5lZCxudW1iZXJOb2RlPSIiLHNsYXNoZWQ9ZmFsc2UsY2xvc2VkPWZhbHNlLHN0YXRlPUJFR0lOLHN0YWNrPVtdLHVuaWNvZGVTPW51bGwsdW5pY29kZUk9MCxkZXB0aD0wLHBvc2l0aW9uPTAsY29sdW1uPTAsbGluZT0xO2Z1bmN0aW9uIGNoZWNrQnVmZmVyTGVuZ3RoKCl7dmFyIG1heEFjdHVhbD0wO2lmKHRleHROb2RlIT09dW5kZWZpbmVkJiZ0ZXh0Tm9kZS5sZW5ndGg+TUFYX0JVRkZFUl9MRU5HVEgpe2VtaXRFcnJvcigiTWF4IGJ1ZmZlciBsZW5ndGggZXhjZWVkZWQ6IHRleHROb2RlIik7bWF4QWN0dWFsPU1hdGgubWF4KG1heEFjdHVhbCx0ZXh0Tm9kZS5sZW5ndGgpO30KLWlmKG51bWJlck5vZGUubGVuZ3RoPk1BWF9CVUZGRVJfTEVOR1RIKXtlbWl0RXJyb3IoIk1heCBidWZmZXIgbGVuZ3RoIGV4Y2VlZGVkOiBudW1iZXJOb2RlIik7bWF4QWN0dWFsPU1hdGgubWF4KG1heEFjdHVhbCxudW1iZXJOb2RlLmxlbmd0aCk7fQotYnVmZmVyQ2hlY2tQb3NpdGlvbj0oTUFYX0JVRkZFUl9MRU5HVEgtbWF4QWN0dWFsKQotK3Bvc2l0aW9uO30KLWV2ZW50QnVzKFNUUkVBTV9EQVRBKS5vbihoYW5kbGVEYXRhKTtldmVudEJ1cyhTVFJFQU1fRU5EKS5vbihoYW5kbGVTdHJlYW1FbmQpO2Z1bmN0aW9uIGVtaXRFcnJvcihlcnJvclN0cmluZyl7aWYodGV4dE5vZGUhPT11bmRlZmluZWQpe2VtaXRWYWx1ZU9wZW4odGV4dE5vZGUpO2VtaXRWYWx1ZUNsb3NlKCk7dGV4dE5vZGU9dW5kZWZpbmVkO30KLWxhdGVzdEVycm9yPUVycm9yKGVycm9yU3RyaW5nKyJcbkxuOiAiK2xpbmUrIlxuQ29sOiAiK2NvbHVtbisiXG5DaHI6ICIrYyk7ZW1pdEZhaWwoZXJyb3JSZXBvcnQodW5kZWZpbmVkLHVuZGVmaW5lZCxsYXRlc3RFcnJvcikpO30KLWZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVuZCgpe2lmKHN0YXRlPT1CRUdJTil7ZW1pdFZhbHVlT3Blbih7fSk7ZW1pdFZhbHVlQ2xvc2UoKTtjbG9zZWQ9dHJ1ZTtyZXR1cm47fQotaWYoc3RhdGUhPT1WQUxVRXx8ZGVwdGghPT0wKQotZW1pdEVycm9yKCJVbmV4cGVjdGVkIGVuZCIpO2lmKHRleHROb2RlIT09dW5kZWZpbmVkKXtlbWl0VmFsdWVPcGVuKHRleHROb2RlKTtlbWl0VmFsdWVDbG9zZSgpO3RleHROb2RlPXVuZGVmaW5lZDt9Ci1jbG9zZWQ9dHJ1ZTt9Ci1mdW5jdGlvbiB3aGl0ZXNwYWNlKGMpe3JldHVybiBjPT0nXHInfHxjPT0nXG4nfHxjPT0nICd8fGM9PSdcdCc7fQotZnVuY3Rpb24gaGFuZGxlRGF0YShjaHVuayl7aWYobGF0ZXN0RXJyb3IpCi1yZXR1cm47aWYoY2xvc2VkKXtyZXR1cm4gZW1pdEVycm9yKCJDYW5ub3Qgd3JpdGUgYWZ0ZXIgY2xvc2UiKTt9Ci12YXIgaT0wO2M9Y2h1bmtbMF07d2hpbGUoYyl7cD1jO2M9Y2h1bmtbaSsrXTtpZighYylicmVhaztwb3NpdGlvbisrO2lmKGM9PSJcbiIpe2xpbmUrKztjb2x1bW49MDt9ZWxzZSBjb2x1bW4rKztzd2l0Y2goc3RhdGUpe2Nhc2UgQkVHSU46aWYoYz09PSJ7IilzdGF0ZT1PUEVOX09CSkVDVDtlbHNlIGlmKGM9PT0iWyIpc3RhdGU9T1BFTl9BUlJBWTtlbHNlIGlmKCF3aGl0ZXNwYWNlKGMpKQotcmV0dXJuIGVtaXRFcnJvcigiTm9uLXdoaXRlc3BhY2UgYmVmb3JlIHtbLiIpO2NvbnRpbnVlO2Nhc2UgT1BFTl9LRVk6Y2FzZSBPUEVOX09CSkVDVDppZih3aGl0ZXNwYWNlKGMpKWNvbnRpbnVlO2lmKHN0YXRlPT09T1BFTl9LRVkpc3RhY2sucHVzaChDTE9TRV9LRVkpO2Vsc2V7aWYoYz09PSd9Jyl7ZW1pdFZhbHVlT3Blbih7fSk7ZW1pdFZhbHVlQ2xvc2UoKTtzdGF0ZT1zdGFjay5wb3AoKXx8VkFMVUU7Y29udGludWU7fWVsc2Ugc3RhY2sucHVzaChDTE9TRV9PQkpFQ1QpO30KLWlmKGM9PT0nIicpCi1zdGF0ZT1TVFJJTkc7ZWxzZQotcmV0dXJuIGVtaXRFcnJvcigiTWFsZm9ybWVkIG9iamVjdCBrZXkgc2hvdWxkIHN0YXJ0IHdpdGggXCIgIik7Y29udGludWU7Y2FzZSBDTE9TRV9LRVk6Y2FzZSBDTE9TRV9PQkpFQ1Q6aWYod2hpdGVzcGFjZShjKSljb250aW51ZTtpZihjPT09JzonKXtpZihzdGF0ZT09PUNMT1NFX09CSkVDVCl7c3RhY2sucHVzaChDTE9TRV9PQkpFQ1QpO2lmKHRleHROb2RlIT09dW5kZWZpbmVkKXtlbWl0VmFsdWVPcGVuKHt9KTtlbWl0U2F4S2V5KHRleHROb2RlKTt0ZXh0Tm9kZT11bmRlZmluZWQ7fQotZGVwdGgrKzt9ZWxzZXtpZih0ZXh0Tm9kZSE9PXVuZGVmaW5lZCl7ZW1pdFNheEtleSh0ZXh0Tm9kZSk7dGV4dE5vZGU9dW5kZWZpbmVkO319Ci1zdGF0ZT1WQUxVRTt9ZWxzZSBpZihjPT09J30nKXtpZih0ZXh0Tm9kZSE9PXVuZGVmaW5lZCl7ZW1pdFZhbHVlT3Blbih0ZXh0Tm9kZSk7ZW1pdFZhbHVlQ2xvc2UoKTt0ZXh0Tm9kZT11bmRlZmluZWQ7fQotZW1pdFZhbHVlQ2xvc2UoKTtkZXB0aC0tO3N0YXRlPXN0YWNrLnBvcCgpfHxWQUxVRTt9ZWxzZSBpZihjPT09JywnKXtpZihzdGF0ZT09PUNMT1NFX09CSkVDVCkKLXN0YWNrLnB1c2goQ0xPU0VfT0JKRUNUKTtpZih0ZXh0Tm9kZSE9PXVuZGVmaW5lZCl7ZW1pdFZhbHVlT3Blbih0ZXh0Tm9kZSk7ZW1pdFZhbHVlQ2xvc2UoKTt0ZXh0Tm9kZT11bmRlZmluZWQ7fQotc3RhdGU9T1BFTl9LRVk7fWVsc2UKLXJldHVybiBlbWl0RXJyb3IoJ0JhZCBvYmplY3QnKTtjb250aW51ZTtjYXNlIE9QRU5fQVJSQVk6Y2FzZSBWQUxVRTppZih3aGl0ZXNwYWNlKGMpKWNvbnRpbnVlO2lmKHN0YXRlPT09T1BFTl9BUlJBWSl7ZW1pdFZhbHVlT3BlbihbXSk7ZGVwdGgrKztzdGF0ZT1WQUxVRTtpZihjPT09J10nKXtlbWl0VmFsdWVDbG9zZSgpO2RlcHRoLS07c3RhdGU9c3RhY2sucG9wKCl8fFZBTFVFO2NvbnRpbnVlO31lbHNle3N0YWNrLnB1c2goQ0xPU0VfQVJSQVkpO319Ci1pZihjPT09JyInKXN0YXRlPVNUUklORztlbHNlIGlmKGM9PT0neycpc3RhdGU9T1BFTl9PQkpFQ1Q7ZWxzZSBpZihjPT09J1snKXN0YXRlPU9QRU5fQVJSQVk7ZWxzZSBpZihjPT09J3QnKXN0YXRlPVRSVUU7ZWxzZSBpZihjPT09J2YnKXN0YXRlPUZBTFNFO2Vsc2UgaWYoYz09PSduJylzdGF0ZT1OVUxMO2Vsc2UgaWYoYz09PSctJyl7bnVtYmVyTm9kZSs9Yzt9ZWxzZSBpZihjPT09JzAnKXtudW1iZXJOb2RlKz1jO3N0YXRlPU5VTUJFUl9ESUdJVDt9ZWxzZSBpZignMTIzNDU2Nzg5Jy5pbmRleE9mKGMpIT09LTEpe251bWJlck5vZGUrPWM7c3RhdGU9TlVNQkVSX0RJR0lUO31lbHNlCi1yZXR1cm4gZW1pdEVycm9yKCJCYWQgdmFsdWUiKTtjb250aW51ZTtjYXNlIENMT1NFX0FSUkFZOmlmKGM9PT0nLCcpe3N0YWNrLnB1c2goQ0xPU0VfQVJSQVkpO2lmKHRleHROb2RlIT09dW5kZWZpbmVkKXtlbWl0VmFsdWVPcGVuKHRleHROb2RlKTtlbWl0VmFsdWVDbG9zZSgpO3RleHROb2RlPXVuZGVmaW5lZDt9Ci1zdGF0ZT1WQUxVRTt9ZWxzZSBpZihjPT09J10nKXtpZih0ZXh0Tm9kZSE9PXVuZGVmaW5lZCl7ZW1pdFZhbHVlT3Blbih0ZXh0Tm9kZSk7ZW1pdFZhbHVlQ2xvc2UoKTt0ZXh0Tm9kZT11bmRlZmluZWQ7fQotZW1pdFZhbHVlQ2xvc2UoKTtkZXB0aC0tO3N0YXRlPXN0YWNrLnBvcCgpfHxWQUxVRTt9ZWxzZSBpZih3aGl0ZXNwYWNlKGMpKQotY29udGludWU7ZWxzZQotcmV0dXJuIGVtaXRFcnJvcignQmFkIGFycmF5Jyk7Y29udGludWU7Y2FzZSBTVFJJTkc6aWYodGV4dE5vZGU9PT11bmRlZmluZWQpe3RleHROb2RlPSIiO30KLXZhciBzdGFydGk9aS0xO1NUUklOR19CSUdMT09QOndoaWxlKHRydWUpe3doaWxlKHVuaWNvZGVJPjApe3VuaWNvZGVTKz1jO2M9Y2h1bmsuY2hhckF0KGkrKyk7aWYodW5pY29kZUk9PT00KXt0ZXh0Tm9kZSs9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh1bmljb2RlUywxNikpO3VuaWNvZGVJPTA7c3RhcnRpPWktMTt9ZWxzZXt1bmljb2RlSSsrO30KLWlmKCFjKWJyZWFrIFNUUklOR19CSUdMT09QO30KLWlmKGM9PT0nIicmJiFzbGFzaGVkKXtzdGF0ZT1zdGFjay5wb3AoKXx8VkFMVUU7dGV4dE5vZGUrPWNodW5rLnN1YnN0cmluZyhzdGFydGksaS0xKTticmVhazt9Ci1pZihjPT09J1xcJyYmIXNsYXNoZWQpe3NsYXNoZWQ9dHJ1ZTt0ZXh0Tm9kZSs9Y2h1bmsuc3Vic3RyaW5nKHN0YXJ0aSxpLTEpO2M9Y2h1bmsuY2hhckF0KGkrKyk7aWYoIWMpYnJlYWs7fQotaWYoc2xhc2hlZCl7c2xhc2hlZD1mYWxzZTtpZihjPT09J24nKXt0ZXh0Tm9kZSs9J1xuJzt9Ci1lbHNlIGlmKGM9PT0ncicpe3RleHROb2RlKz0nXHInO30KLWVsc2UgaWYoYz09PSd0Jyl7dGV4dE5vZGUrPSdcdCc7fQotZWxzZSBpZihjPT09J2YnKXt0ZXh0Tm9kZSs9J1xmJzt9Ci1lbHNlIGlmKGM9PT0nYicpe3RleHROb2RlKz0nXGInO30KLWVsc2UgaWYoYz09PSd1Jyl7dW5pY29kZUk9MTt1bmljb2RlUz0nJzt9ZWxzZXt0ZXh0Tm9kZSs9Yzt9Ci1jPWNodW5rLmNoYXJBdChpKyspO3N0YXJ0aT1pLTE7aWYoIWMpYnJlYWs7ZWxzZSBjb250aW51ZTt9Ci1zdHJpbmdUb2tlblBhdHRlcm4ubGFzdEluZGV4PWk7dmFyIHJlUmVzdWx0PXN0cmluZ1Rva2VuUGF0dGVybi5leGVjKGNodW5rKTtpZighcmVSZXN1bHQpe2k9Y2h1bmsubGVuZ3RoKzE7dGV4dE5vZGUrPWNodW5rLnN1YnN0cmluZyhzdGFydGksaS0xKTticmVhazt9Ci1pPXJlUmVzdWx0LmluZGV4KzE7Yz1jaHVuay5jaGFyQXQocmVSZXN1bHQuaW5kZXgpO2lmKCFjKXt0ZXh0Tm9kZSs9Y2h1bmsuc3Vic3RyaW5nKHN0YXJ0aSxpLTEpO2JyZWFrO319Ci1jb250aW51ZTtjYXNlIFRSVUU6aWYoIWMpY29udGludWU7aWYoYz09PSdyJylzdGF0ZT1UUlVFMjtlbHNlCi1yZXR1cm4gZW1pdEVycm9yKCdJbnZhbGlkIHRydWUgc3RhcnRlZCB3aXRoIHQnK2MpO2NvbnRpbnVlO2Nhc2UgVFJVRTI6aWYoIWMpY29udGludWU7aWYoYz09PSd1JylzdGF0ZT1UUlVFMztlbHNlCi1yZXR1cm4gZW1pdEVycm9yKCdJbnZhbGlkIHRydWUgc3RhcnRlZCB3aXRoIHRyJytjKTtjb250aW51ZTtjYXNlIFRSVUUzOmlmKCFjKWNvbnRpbnVlO2lmKGM9PT0nZScpe2VtaXRWYWx1ZU9wZW4odHJ1ZSk7ZW1pdFZhbHVlQ2xvc2UoKTtzdGF0ZT1zdGFjay5wb3AoKXx8VkFMVUU7fWVsc2UKLXJldHVybiBlbWl0RXJyb3IoJ0ludmFsaWQgdHJ1ZSBzdGFydGVkIHdpdGggdHJ1JytjKTtjb250aW51ZTtjYXNlIEZBTFNFOmlmKCFjKWNvbnRpbnVlO2lmKGM9PT0nYScpc3RhdGU9RkFMU0UyO2Vsc2UKLXJldHVybiBlbWl0RXJyb3IoJ0ludmFsaWQgZmFsc2Ugc3RhcnRlZCB3aXRoIGYnK2MpO2NvbnRpbnVlO2Nhc2UgRkFMU0UyOmlmKCFjKWNvbnRpbnVlO2lmKGM9PT0nbCcpc3RhdGU9RkFMU0UzO2Vsc2UKLXJldHVybiBlbWl0RXJyb3IoJ0ludmFsaWQgZmFsc2Ugc3RhcnRlZCB3aXRoIGZhJytjKTtjb250aW51ZTtjYXNlIEZBTFNFMzppZighYyljb250aW51ZTtpZihjPT09J3MnKXN0YXRlPUZBTFNFNDtlbHNlCi1yZXR1cm4gZW1pdEVycm9yKCdJbnZhbGlkIGZhbHNlIHN0YXJ0ZWQgd2l0aCBmYWwnK2MpO2NvbnRpbnVlO2Nhc2UgRkFMU0U0OmlmKCFjKWNvbnRpbnVlO2lmKGM9PT0nZScpe2VtaXRWYWx1ZU9wZW4oZmFsc2UpO2VtaXRWYWx1ZUNsb3NlKCk7c3RhdGU9c3RhY2sucG9wKCl8fFZBTFVFO31lbHNlCi1yZXR1cm4gZW1pdEVycm9yKCdJbnZhbGlkIGZhbHNlIHN0YXJ0ZWQgd2l0aCBmYWxzJytjKTtjb250aW51ZTtjYXNlIE5VTEw6aWYoIWMpY29udGludWU7aWYoYz09PSd1JylzdGF0ZT1OVUxMMjtlbHNlCi1yZXR1cm4gZW1pdEVycm9yKCdJbnZhbGlkIG51bGwgc3RhcnRlZCB3aXRoIG4nK2MpO2NvbnRpbnVlO2Nhc2UgTlVMTDI6aWYoIWMpY29udGludWU7aWYoYz09PSdsJylzdGF0ZT1OVUxMMztlbHNlCi1yZXR1cm4gZW1pdEVycm9yKCdJbnZhbGlkIG51bGwgc3RhcnRlZCB3aXRoIG51JytjKTtjb250aW51ZTtjYXNlIE5VTEwzOmlmKCFjKWNvbnRpbnVlO2lmKGM9PT0nbCcpe2VtaXRWYWx1ZU9wZW4obnVsbCk7ZW1pdFZhbHVlQ2xvc2UoKTtzdGF0ZT1zdGFjay5wb3AoKXx8VkFMVUU7fWVsc2UKLXJldHVybiBlbWl0RXJyb3IoJ0ludmFsaWQgbnVsbCBzdGFydGVkIHdpdGggbnVsJytjKTtjb250aW51ZTtjYXNlIE5VTUJFUl9ERUNJTUFMX1BPSU5UOmlmKGM9PT0nLicpe251bWJlck5vZGUrPWM7c3RhdGU9TlVNQkVSX0RJR0lUO31lbHNlCi1yZXR1cm4gZW1pdEVycm9yKCdMZWFkaW5nIHplcm8gbm90IGZvbGxvd2VkIGJ5IC4nKTtjb250aW51ZTtjYXNlIE5VTUJFUl9ESUdJVDppZignMDEyMzQ1Njc4OScuaW5kZXhPZihjKSE9PS0xKW51bWJlck5vZGUrPWM7ZWxzZSBpZihjPT09Jy4nKXtpZihudW1iZXJOb2RlLmluZGV4T2YoJy4nKSE9PS0xKQotcmV0dXJuIGVtaXRFcnJvcignSW52YWxpZCBudW1iZXIgaGFzIHR3byBkb3RzJyk7bnVtYmVyTm9kZSs9Yzt9ZWxzZSBpZihjPT09J2UnfHxjPT09J0UnKXtpZihudW1iZXJOb2RlLmluZGV4T2YoJ2UnKSE9PS0xfHxudW1iZXJOb2RlLmluZGV4T2YoJ0UnKSE9PS0xKQotcmV0dXJuIGVtaXRFcnJvcignSW52YWxpZCBudW1iZXIgaGFzIHR3byBleHBvbmVudGlhbCcpO251bWJlck5vZGUrPWM7fWVsc2UgaWYoYz09PSIrInx8Yz09PSItIil7aWYoIShwPT09J2UnfHxwPT09J0UnKSkKLXJldHVybiBlbWl0RXJyb3IoJ0ludmFsaWQgc3ltYm9sIGluIG51bWJlcicpO251bWJlck5vZGUrPWM7fWVsc2V7aWYobnVtYmVyTm9kZSl7ZW1pdFZhbHVlT3BlbihwYXJzZUZsb2F0KG51bWJlck5vZGUpKTtlbWl0VmFsdWVDbG9zZSgpO251bWJlck5vZGU9IiI7fQotaS0tO3N0YXRlPXN0YWNrLnBvcCgpfHxWQUxVRTt9Ci1jb250aW51ZTtkZWZhdWx0OnJldHVybiBlbWl0RXJyb3IoIlVua25vd24gc3RhdGU6ICIrc3RhdGUpO319Ci1pZihwb3NpdGlvbj49YnVmZmVyQ2hlY2tQb3NpdGlvbikKLWNoZWNrQnVmZmVyTGVuZ3RoKCk7fX0KLWZ1bmN0aW9uIGFzY2VudE1hbmFnZXIob2JvZUJ1cyxoYW5kbGVycyl7InVzZSBzdHJpY3QiO3ZhciBsaXN0ZW5lcklkPXt9LGFzY2VudDtmdW5jdGlvbiBzdGF0ZUFmdGVyKGhhbmRsZXIpe3JldHVybiBmdW5jdGlvbihwYXJhbSl7YXNjZW50PWhhbmRsZXIoYXNjZW50LHBhcmFtKTt9fQotZm9yKHZhciBldmVudE5hbWUgaW4gaGFuZGxlcnMpe29ib2VCdXMoZXZlbnROYW1lKS5vbihzdGF0ZUFmdGVyKGhhbmRsZXJzW2V2ZW50TmFtZV0pLGxpc3RlbmVySWQpO30KLW9ib2VCdXMoTk9ERV9TV0FQKS5vbihmdW5jdGlvbihuZXdOb2RlKXt2YXIgb2xkSGVhZD1oZWFkKGFzY2VudCksa2V5PWtleU9mKG9sZEhlYWQpLGFuY2VzdG9ycz10YWlsKGFzY2VudCkscGFyZW50Tm9kZTtpZihhbmNlc3RvcnMpe3BhcmVudE5vZGU9bm9kZU9mKGhlYWQoYW5jZXN0b3JzKSk7cGFyZW50Tm9kZVtrZXldPW5ld05vZGU7fX0pO29ib2VCdXMoTk9ERV9EUk9QKS5vbihmdW5jdGlvbigpe3ZhciBvbGRIZWFkPWhlYWQoYXNjZW50KSxrZXk9a2V5T2Yob2xkSGVhZCksYW5jZXN0b3JzPXRhaWwoYXNjZW50KSxwYXJlbnROb2RlO2lmKGFuY2VzdG9ycyl7cGFyZW50Tm9kZT1ub2RlT2YoaGVhZChhbmNlc3RvcnMpKTtkZWxldGUgcGFyZW50Tm9kZVtrZXldO319KTtvYm9lQnVzKEFCT1JUSU5HKS5vbihmdW5jdGlvbigpe2Zvcih2YXIgZXZlbnROYW1lIGluIGhhbmRsZXJzKXtvYm9lQnVzKGV2ZW50TmFtZSkudW4obGlzdGVuZXJJZCk7fX0pO30KLWZ1bmN0aW9uIHBhcnNlUmVzcG9uc2VIZWFkZXJzKGhlYWRlclN0cil7dmFyIGhlYWRlcnM9e307aGVhZGVyU3RyJiZoZWFkZXJTdHIuc3BsaXQoJ1x1MDAwZFx1MDAwYScpLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyUGFpcil7dmFyIGluZGV4PWhlYWRlclBhaXIuaW5kZXhPZignXHUwMDNhXHUwMDIwJyk7aGVhZGVyc1toZWFkZXJQYWlyLnN1YnN0cmluZygwLGluZGV4KV09aGVhZGVyUGFpci5zdWJzdHJpbmcoaW5kZXgrMik7fSk7cmV0dXJuIGhlYWRlcnM7fQotZnVuY3Rpb24gaXNDcm9zc09yaWdpbihwYWdlTG9jYXRpb24sYWpheEhvc3Qpe2Z1bmN0aW9uIGRlZmF1bHRQb3J0KHByb3RvY29sKXtyZXR1cm57J2h0dHA6Jzo4MCwnaHR0cHM6Jzo0NDN9W3Byb3RvY29sXTt9Ci1mdW5jdGlvbiBwb3J0T2YobG9jYXRpb24pe3JldHVybiBsb2NhdGlvbi5wb3J0fHxkZWZhdWx0UG9ydChsb2NhdGlvbi5wcm90b2NvbHx8cGFnZUxvY2F0aW9uLnByb3RvY29sKTt9Ci1yZXR1cm4hISgoYWpheEhvc3QucHJvdG9jb2wmJihhamF4SG9zdC5wcm90b2NvbCE9cGFnZUxvY2F0aW9uLnByb3RvY29sKSl8fChhamF4SG9zdC5ob3N0JiYoYWpheEhvc3QuaG9zdCE9cGFnZUxvY2F0aW9uLmhvc3QpKXx8KGFqYXhIb3N0Lmhvc3QmJihwb3J0T2YoYWpheEhvc3QpIT1wb3J0T2YocGFnZUxvY2F0aW9uKSkpKTt9Ci1mdW5jdGlvbiBwYXJzZVVybE9yaWdpbih1cmwpe3ZhciBVUkxfSE9TVF9QQVRURVJOPS8oXHcrOik/KD86XC9cLykoW1x3Li1dKyk/KD86OihcZCspKT9cLz8vLHVybEhvc3RNYXRjaD1VUkxfSE9TVF9QQVRURVJOLmV4ZWModXJsKXx8W107cmV0dXJue3Byb3RvY29sOnVybEhvc3RNYXRjaFsxXXx8JycsaG9zdDp1cmxIb3N0TWF0Y2hbMl18fCcnLHBvcnQ6dXJsSG9zdE1hdGNoWzNdfHwnJ307fQotZnVuY3Rpb24gaHR0cFRyYW5zcG9ydCgpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTt9Ci1mdW5jdGlvbiBzdHJlYW1pbmdIdHRwKG9ib2VCdXMseGhyLG1ldGhvZCx1cmwsZGF0YSxoZWFkZXJzLHdpdGhDcmVkZW50aWFscyl7InVzZSBzdHJpY3QiO3ZhciBlbWl0U3RyZWFtRGF0YT1vYm9lQnVzKFNUUkVBTV9EQVRBKS5lbWl0LGVtaXRGYWlsPW9ib2VCdXMoRkFJTF9FVkVOVCkuZW1pdCxudW1iZXJPZkNoYXJzQWxyZWFkeUdpdmVuVG9DYWxsYmFjaz0wLHN0aWxsVG9TZW5kU3RhcnRFdmVudD10cnVlO29ib2VCdXMoQUJPUlRJTkcpLm9uKGZ1bmN0aW9uKCl7eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsO3hoci5hYm9ydCgpO30pO2Z1bmN0aW9uIGhhbmRsZVByb2dyZXNzKCl7dmFyIHRleHRTb0Zhcj14aHIucmVzcG9uc2VUZXh0LG5ld1RleHQ9dGV4dFNvRmFyLnN1YnN0cihudW1iZXJPZkNoYXJzQWxyZWFkeUdpdmVuVG9DYWxsYmFjayk7aWYobmV3VGV4dCl7ZW1pdFN0cmVhbURhdGEobmV3VGV4dCk7fQotbnVtYmVyT2ZDaGFyc0FscmVhZHlHaXZlblRvQ2FsbGJhY2s9bGVuKHRleHRTb0Zhcik7fQotaWYoJ29ucHJvZ3Jlc3MnaW4geGhyKXt4aHIub25wcm9ncmVzcz1oYW5kbGVQcm9ncmVzczt9Ci14aHIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gc2VuZFN0YXJ0SWZOb3RBbHJlYWR5KCl7dHJ5e3N0aWxsVG9TZW5kU3RhcnRFdmVudCYmb2JvZUJ1cyhIVFRQX1NUQVJUKS5lbWl0KHhoci5zdGF0dXMscGFyc2VSZXNwb25zZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSk7c3RpbGxUb1NlbmRTdGFydEV2ZW50PWZhbHNlO31jYXRjaChlKXt9fQotc3dpdGNoKHhoci5yZWFkeVN0YXRlKXtjYXNlIDI6Y2FzZSAzOnJldHVybiBzZW5kU3RhcnRJZk5vdEFscmVhZHkoKTtjYXNlIDQ6c2VuZFN0YXJ0SWZOb3RBbHJlYWR5KCk7dmFyIHN1Y2Nlc3NmdWw9U3RyaW5nKHhoci5zdGF0dXMpWzBdPT0yO2lmKHN1Y2Nlc3NmdWwpe2hhbmRsZVByb2dyZXNzKCk7b2JvZUJ1cyhTVFJFQU1fRU5EKS5lbWl0KCk7fWVsc2V7ZW1pdEZhaWwoZXJyb3JSZXBvcnQoeGhyLnN0YXR1cyx4aHIucmVzcG9uc2VUZXh0KSk7fX19O3RyeXt4aHIub3BlbihtZXRob2QsdXJsLHRydWUpO2Zvcih2YXIgaGVhZGVyTmFtZSBpbiBoZWFkZXJzKXt4aHIuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXJOYW1lLGhlYWRlcnNbaGVhZGVyTmFtZV0pO30KLWlmKCFpc0Nyb3NzT3JpZ2luKHdpbmRvdy5sb2NhdGlvbixwYXJzZVVybE9yaWdpbih1cmwpKSl7eGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtUmVxdWVzdGVkLVdpdGgnLCdYTUxIdHRwUmVxdWVzdCcpO30KLXhoci53aXRoQ3JlZGVudGlhbHM9d2l0aENyZWRlbnRpYWxzO3hoci5zZW5kKGRhdGEpO31jYXRjaChlKXt3aW5kb3cuc2V0VGltZW91dChwYXJ0aWFsQ29tcGxldGUoZW1pdEZhaWwsZXJyb3JSZXBvcnQodW5kZWZpbmVkLHVuZGVmaW5lZCxlKSksMCk7fX0KLXZhciBqc29uUGF0aFN5bnRheD0oZnVuY3Rpb24oKXt2YXIKLXJlZ2V4RGVzY3JpcHRvcj1mdW5jdGlvbiByZWdleERlc2NyaXB0b3IocmVnZXgpe3JldHVybiByZWdleC5leGVjLmJpbmQocmVnZXgpO30sanNvblBhdGhDbGF1c2U9dmFyQXJncyhmdW5jdGlvbihjb21wb25lbnRSZWdleGVzKXtjb21wb25lbnRSZWdleGVzLnVuc2hpZnQoL14vKTtyZXR1cm4gcmVnZXhEZXNjcmlwdG9yKFJlZ0V4cChjb21wb25lbnRSZWdleGVzLm1hcChhdHRyKCdzb3VyY2UnKSkuam9pbignJykpKTt9KSxwb3NzaWJseUNhcHR1cmluZz0vKFwkPykvLG5hbWVkTm9kZT0vKFtcdy1fXSt8XCopLyxuYW1lUGxhY2Vob2xkZXI9LygpLyxub2RlSW5BcnJheU5vdGF0aW9uPS9cWyIoW14iXSspIlxdLyxudW1iZXJlZE5vZGVJbkFycmF5Tm90YXRpb249L1xbKFxkK3xcKilcXS8sZmllbGRMaXN0PS97KFtcdyBdKj8pfS8sb3B0aW9uYWxGaWVsZExpc3Q9Lyg/OnsoW1x3IF0qPyl9KT8vCi0sanNvblBhdGhOYW1lZE5vZGVJbk9iamVjdE5vdGF0aW9uPWpzb25QYXRoQ2xhdXNlKHBvc3NpYmx5Q2FwdHVyaW5nLG5hbWVkTm9kZSxvcHRpb25hbEZpZWxkTGlzdCksanNvblBhdGhOYW1lZE5vZGVJbkFycmF5Tm90YXRpb249anNvblBhdGhDbGF1c2UocG9zc2libHlDYXB0dXJpbmcsbm9kZUluQXJyYXlOb3RhdGlvbixvcHRpb25hbEZpZWxkTGlzdCksanNvblBhdGhOdW1iZXJlZE5vZGVJbkFycmF5Tm90YXRpb249anNvblBhdGhDbGF1c2UocG9zc2libHlDYXB0dXJpbmcsbnVtYmVyZWROb2RlSW5BcnJheU5vdGF0aW9uLG9wdGlvbmFsRmllbGRMaXN0KSxqc29uUGF0aFB1cmVEdWNrVHlwaW5nPWpzb25QYXRoQ2xhdXNlKHBvc3NpYmx5Q2FwdHVyaW5nLG5hbWVQbGFjZWhvbGRlcixmaWVsZExpc3QpLGpzb25QYXRoRG91YmxlRG90PWpzb25QYXRoQ2xhdXNlKC9cLlwuLyksanNvblBhdGhEb3Q9anNvblBhdGhDbGF1c2UoL1wuLyksanNvblBhdGhCYW5nPWpzb25QYXRoQ2xhdXNlKHBvc3NpYmx5Q2FwdHVyaW5nLC8hLyksZW1wdHlTdHJpbmc9anNvblBhdGhDbGF1c2UoLyQvKTtyZXR1cm4gZnVuY3Rpb24oZm4pe3JldHVybiBmbihsYXp5VW5pb24oanNvblBhdGhOYW1lZE5vZGVJbk9iamVjdE5vdGF0aW9uLGpzb25QYXRoTmFtZWROb2RlSW5BcnJheU5vdGF0aW9uLGpzb25QYXRoTnVtYmVyZWROb2RlSW5BcnJheU5vdGF0aW9uLGpzb25QYXRoUHVyZUR1Y2tUeXBpbmcpLGpzb25QYXRoRG91YmxlRG90LGpzb25QYXRoRG90LGpzb25QYXRoQmFuZyxlbXB0eVN0cmluZyk7fTt9KCkpO2Z1bmN0aW9uIG5hbWVkTm9kZShrZXksbm9kZSl7cmV0dXJue2tleTprZXksbm9kZTpub2RlfTt9Ci12YXIga2V5T2Y9YXR0cigna2V5Jyk7dmFyIG5vZGVPZj1hdHRyKCdub2RlJyk7dmFyIFJPT1RfUEFUSD17fTtmdW5jdGlvbiBpbmNyZW1lbnRhbENvbnRlbnRCdWlsZGVyKG9ib2VCdXMpe3ZhciBlbWl0Tm9kZU9wZW5lZD1vYm9lQnVzKE5PREVfT1BFTkVEKS5lbWl0LGVtaXROb2RlQ2xvc2VkPW9ib2VCdXMoTk9ERV9DTE9TRUQpLmVtaXQsZW1pdFJvb3RPcGVuZWQ9b2JvZUJ1cyhST09UX1BBVEhfRk9VTkQpLmVtaXQsZW1pdFJvb3RDbG9zZWQ9b2JvZUJ1cyhST09UX05PREVfRk9VTkQpLmVtaXQ7ZnVuY3Rpb24gYXJyYXlJbmRpY2VzQXJlS2V5cyhwb3NzaWJseUluY29uc2lzdGVudEFzY2VudCxuZXdEZWVwZXN0Tm9kZSl7dmFyIHBhcmVudE5vZGU9bm9kZU9mKGhlYWQocG9zc2libHlJbmNvbnNpc3RlbnRBc2NlbnQpKTtyZXR1cm4gaXNPZlR5cGUoQXJyYXkscGFyZW50Tm9kZSk/a2V5Rm91bmQocG9zc2libHlJbmNvbnNpc3RlbnRBc2NlbnQsbGVuKHBhcmVudE5vZGUpLG5ld0RlZXBlc3ROb2RlKTpwb3NzaWJseUluY29uc2lzdGVudEFzY2VudDt9Ci1mdW5jdGlvbiBub2RlT3BlbmVkKGFzY2VudCxuZXdEZWVwZXN0Tm9kZSl7aWYoIWFzY2VudCl7ZW1pdFJvb3RPcGVuZWQobmV3RGVlcGVzdE5vZGUpO3JldHVybiBrZXlGb3VuZChhc2NlbnQsUk9PVF9QQVRILG5ld0RlZXBlc3ROb2RlKTt9Ci12YXIgYXJyYXlDb25zaXN0ZW50QXNjZW50PWFycmF5SW5kaWNlc0FyZUtleXMoYXNjZW50LG5ld0RlZXBlc3ROb2RlKSxhbmNlc3RvckJyYW5jaGVzPXRhaWwoYXJyYXlDb25zaXN0ZW50QXNjZW50KSxwcmV2aW91c2x5VW5tYXBwZWROYW1lPWtleU9mKGhlYWQoYXJyYXlDb25zaXN0ZW50QXNjZW50KSk7YXBwZW5kQnVpbHRDb250ZW50KGFuY2VzdG9yQnJhbmNoZXMscHJldmlvdXNseVVubWFwcGVkTmFtZSxuZXdEZWVwZXN0Tm9kZSk7cmV0dXJuIGNvbnMobmFtZWROb2RlKHByZXZpb3VzbHlVbm1hcHBlZE5hbWUsbmV3RGVlcGVzdE5vZGUpLGFuY2VzdG9yQnJhbmNoZXMpO30KLWZ1bmN0aW9uIGFwcGVuZEJ1aWx0Q29udGVudChhbmNlc3RvckJyYW5jaGVzLGtleSxub2RlKXtub2RlT2YoaGVhZChhbmNlc3RvckJyYW5jaGVzKSlba2V5XT1ub2RlO30KLWZ1bmN0aW9uIGtleUZvdW5kKGFzY2VudCxuZXdEZWVwZXN0TmFtZSxtYXliZU5ld0RlZXBlc3ROb2RlKXtpZihhc2NlbnQpe2FwcGVuZEJ1aWx0Q29udGVudChhc2NlbnQsbmV3RGVlcGVzdE5hbWUsbWF5YmVOZXdEZWVwZXN0Tm9kZSk7fQotdmFyIGFzY2VudFdpdGhOZXdQYXRoPWNvbnMobmFtZWROb2RlKG5ld0RlZXBlc3ROYW1lLG1heWJlTmV3RGVlcGVzdE5vZGUpLGFzY2VudCk7ZW1pdE5vZGVPcGVuZWQoYXNjZW50V2l0aE5ld1BhdGgpO3JldHVybiBhc2NlbnRXaXRoTmV3UGF0aDt9Ci1mdW5jdGlvbiBub2RlQ2xvc2VkKGFzY2VudCl7ZW1pdE5vZGVDbG9zZWQoYXNjZW50KTtyZXR1cm4gdGFpbChhc2NlbnQpfHxlbWl0Um9vdENsb3NlZChub2RlT2YoaGVhZChhc2NlbnQpKSk7fQotdmFyIGNvbnRlbnRCdWlsZGVySGFuZGxlcnM9e307Y29udGVudEJ1aWxkZXJIYW5kbGVyc1tTQVhfVkFMVUVfT1BFTl09bm9kZU9wZW5lZDtjb250ZW50QnVpbGRlckhhbmRsZXJzW1NBWF9WQUxVRV9DTE9TRV09bm9kZUNsb3NlZDtjb250ZW50QnVpbGRlckhhbmRsZXJzW1NBWF9LRVldPWtleUZvdW5kO3JldHVybiBjb250ZW50QnVpbGRlckhhbmRsZXJzO30KLXZhciBqc29uUGF0aENvbXBpbGVyPWpzb25QYXRoU3ludGF4KGZ1bmN0aW9uKHBhdGhOb2RlU3ludGF4LGRvdWJsZURvdFN5bnRheCxkb3RTeW50YXgsYmFuZ1N5bnRheCxlbXB0eVN5bnRheCl7dmFyIENBUFRVUklOR19JTkRFWD0xO3ZhciBOQU1FX0lOREVYPTI7dmFyIEZJRUxEX0xJU1RfSU5ERVg9Mzt2YXIgaGVhZEtleT1jb21wb3NlMihrZXlPZixoZWFkKSxoZWFkTm9kZT1jb21wb3NlMihub2RlT2YsaGVhZCk7ZnVuY3Rpb24gbmFtZUNsYXVzZShwcmV2aW91c0V4cHIsZGV0ZWN0aW9uKXt2YXIgbmFtZT1kZXRlY3Rpb25bTkFNRV9JTkRFWF0sbWF0Y2hlc05hbWU9KCFuYW1lfHxuYW1lPT0nKicpP2Fsd2F5czpmdW5jdGlvbihhc2NlbnQpe3JldHVybiBoZWFkS2V5KGFzY2VudCk9PW5hbWV9O3JldHVybiBsYXp5SW50ZXJzZWN0aW9uKG1hdGNoZXNOYW1lLHByZXZpb3VzRXhwcik7fQotZnVuY3Rpb24gZHVja1R5cGVDbGF1c2UocHJldmlvdXNFeHByLGRldGVjdGlvbil7dmFyIGZpZWxkTGlzdFN0cj1kZXRlY3Rpb25bRklFTERfTElTVF9JTkRFWF07aWYoIWZpZWxkTGlzdFN0cikKLXJldHVybiBwcmV2aW91c0V4cHI7dmFyIGhhc0FsbHJlcXVpcmVkRmllbGRzPXBhcnRpYWxDb21wbGV0ZShoYXNBbGxQcm9wZXJ0aWVzLGFycmF5QXNMaXN0KGZpZWxkTGlzdFN0ci5zcGxpdCgvXFcrLykpKSxpc01hdGNoPWNvbXBvc2UyKGhhc0FsbHJlcXVpcmVkRmllbGRzLGhlYWROb2RlKTtyZXR1cm4gbGF6eUludGVyc2VjdGlvbihpc01hdGNoLHByZXZpb3VzRXhwcik7fQotZnVuY3Rpb24gY2FwdHVyZShwcmV2aW91c0V4cHIsZGV0ZWN0aW9uKXt2YXIgY2FwdHVyaW5nPSEhZGV0ZWN0aW9uW0NBUFRVUklOR19JTkRFWF07aWYoIWNhcHR1cmluZykKLXJldHVybiBwcmV2aW91c0V4cHI7cmV0dXJuIGxhenlJbnRlcnNlY3Rpb24ocHJldmlvdXNFeHByLGhlYWQpO30KLWZ1bmN0aW9uIHNraXAxKHByZXZpb3VzRXhwcil7aWYocHJldmlvdXNFeHByPT1hbHdheXMpe3JldHVybiBhbHdheXM7fQotZnVuY3Rpb24gbm90QXRSb290KGFzY2VudCl7cmV0dXJuIGhlYWRLZXkoYXNjZW50KSE9Uk9PVF9QQVRIO30KLXJldHVybiBsYXp5SW50ZXJzZWN0aW9uKG5vdEF0Um9vdCxjb21wb3NlMihwcmV2aW91c0V4cHIsdGFpbCkpO30KLWZ1bmN0aW9uIHNraXBNYW55KHByZXZpb3VzRXhwcil7aWYocHJldmlvdXNFeHByPT1hbHdheXMpe3JldHVybiBhbHdheXM7fQotdmFyCi10ZXJtaW5hbENhc2VXaGVuQXJyaXZpbmdBdFJvb3Q9cm9vdEV4cHIoKSx0ZXJtaW5hbENhc2VXaGVuUHJldmlvdXNFeHByZXNzaW9uSXNTYXRpc2ZpZWQ9cHJldmlvdXNFeHByLHJlY3Vyc2l2ZUNhc2U9c2tpcDEoZnVuY3Rpb24oYXNjZW50KXtyZXR1cm4gY2FzZXMoYXNjZW50KTt9KSxjYXNlcz1sYXp5VW5pb24odGVybWluYWxDYXNlV2hlbkFycml2aW5nQXRSb290LHRlcm1pbmFsQ2FzZVdoZW5QcmV2aW91c0V4cHJlc3Npb25Jc1NhdGlzZmllZCxyZWN1cnNpdmVDYXNlKTtyZXR1cm4gY2FzZXM7fQotZnVuY3Rpb24gcm9vdEV4cHIoKXtyZXR1cm4gZnVuY3Rpb24oYXNjZW50KXtyZXR1cm4gaGVhZEtleShhc2NlbnQpPT1ST09UX1BBVEg7fTt9Ci1mdW5jdGlvbiBzdGF0ZW1lbnRFeHByKGxhc3RDbGF1c2Upe3JldHVybiBmdW5jdGlvbihhc2NlbnQpe3ZhciBleHByTWF0Y2g9bGFzdENsYXVzZShhc2NlbnQpO3JldHVybiBleHByTWF0Y2g9PT10cnVlP2hlYWQoYXNjZW50KTpleHByTWF0Y2g7fTt9Ci1mdW5jdGlvbiBleHByZXNzaW9uc1JlYWRlcihleHBycyxwYXJzZXJHZW5lcmF0ZWRTb0ZhcixkZXRlY3Rpb24pe3JldHVybiBmb2xkUihmdW5jdGlvbihwYXJzZXJHZW5lcmF0ZWRTb0ZhcixleHByKXtyZXR1cm4gZXhwcihwYXJzZXJHZW5lcmF0ZWRTb0ZhcixkZXRlY3Rpb24pO30scGFyc2VyR2VuZXJhdGVkU29GYXIsZXhwcnMpO30KLWZ1bmN0aW9uIGdlbmVyYXRlQ2xhdXNlUmVhZGVySWZUb2tlbkZvdW5kKHRva2VuRGV0ZWN0b3IsY2xhdXNlRXZhbHVhdG9yR2VuZXJhdG9ycyxqc29uUGF0aCxwYXJzZXJHZW5lcmF0ZWRTb0ZhcixvblN1Y2Nlc3Mpe3ZhciBkZXRlY3RlZD10b2tlbkRldGVjdG9yKGpzb25QYXRoKTtpZihkZXRlY3RlZCl7dmFyIGNvbXBpbGVkUGFyc2VyPWV4cHJlc3Npb25zUmVhZGVyKGNsYXVzZUV2YWx1YXRvckdlbmVyYXRvcnMscGFyc2VyR2VuZXJhdGVkU29GYXIsZGV0ZWN0ZWQpLHJlbWFpbmluZ1VucGFyc2VkSnNvblBhdGg9anNvblBhdGguc3Vic3RyKGxlbihkZXRlY3RlZFswXSkpO3JldHVybiBvblN1Y2Nlc3MocmVtYWluaW5nVW5wYXJzZWRKc29uUGF0aCxjb21waWxlZFBhcnNlcik7fX0KLWZ1bmN0aW9uIGNsYXVzZU1hdGNoZXIodG9rZW5EZXRlY3RvcixleHBycyl7cmV0dXJuIHBhcnRpYWxDb21wbGV0ZShnZW5lcmF0ZUNsYXVzZVJlYWRlcklmVG9rZW5Gb3VuZCx0b2tlbkRldGVjdG9yLGV4cHJzKTt9Ci12YXIgY2xhdXNlRm9ySnNvblBhdGg9bGF6eVVuaW9uKGNsYXVzZU1hdGNoZXIocGF0aE5vZGVTeW50YXgsbGlzdChjYXB0dXJlLGR1Y2tUeXBlQ2xhdXNlLG5hbWVDbGF1c2Usc2tpcDEpKSxjbGF1c2VNYXRjaGVyKGRvdWJsZURvdFN5bnRheCxsaXN0KHNraXBNYW55KSksY2xhdXNlTWF0Y2hlcihkb3RTeW50YXgsbGlzdCgpKSxjbGF1c2VNYXRjaGVyKGJhbmdTeW50YXgsbGlzdChjYXB0dXJlLHJvb3RFeHByKSksY2xhdXNlTWF0Y2hlcihlbXB0eVN5bnRheCxsaXN0KHN0YXRlbWVudEV4cHIpKSxmdW5jdGlvbihqc29uUGF0aCl7dGhyb3cgRXJyb3IoJyInK2pzb25QYXRoKyciIGNvdWxkIG5vdCBiZSB0b2tlbmlzZWQnKX0pO2Z1bmN0aW9uIHJldHVybkZvdW5kUGFyc2VyKF9yZW1haW5pbmdKc29uUGF0aCxjb21waWxlZFBhcnNlcil7cmV0dXJuIGNvbXBpbGVkUGFyc2VyfQotZnVuY3Rpb24gY29tcGlsZUpzb25QYXRoVG9GdW5jdGlvbih1bmNvbXBpbGVkSnNvblBhdGgscGFyc2VyR2VuZXJhdGVkU29GYXIpe3ZhciBvbkZpbmQ9dW5jb21waWxlZEpzb25QYXRoP2NvbXBpbGVKc29uUGF0aFRvRnVuY3Rpb246cmV0dXJuRm91bmRQYXJzZXI7cmV0dXJuIGNsYXVzZUZvckpzb25QYXRoKHVuY29tcGlsZWRKc29uUGF0aCxwYXJzZXJHZW5lcmF0ZWRTb0ZhcixvbkZpbmQpO30KLXJldHVybiBmdW5jdGlvbihqc29uUGF0aCl7dHJ5e3JldHVybiBjb21waWxlSnNvblBhdGhUb0Z1bmN0aW9uKGpzb25QYXRoLGFsd2F5cyk7fWNhdGNoKGUpe3Rocm93IEVycm9yKCdDb3VsZCBub3QgY29tcGlsZSAiJytqc29uUGF0aCsnIiBiZWNhdXNlICcrZS5tZXNzYWdlKTt9fX0pO2Z1bmN0aW9uIHNpbmdsZUV2ZW50UHViU3ViKGV2ZW50VHlwZSxuZXdMaXN0ZW5lcixyZW1vdmVMaXN0ZW5lcil7dmFyIGxpc3RlbmVyVHVwbGVMaXN0LGxpc3RlbmVyTGlzdDtmdW5jdGlvbiBoYXNJZChpZCl7cmV0dXJuIGZ1bmN0aW9uKHR1cGxlKXtyZXR1cm4gdHVwbGUuaWQ9PWlkO307fQotcmV0dXJue29uOmZ1bmN0aW9uKGxpc3RlbmVyLGxpc3RlbmVySWQpe3ZhciB0dXBsZT17bGlzdGVuZXI6bGlzdGVuZXIsaWQ6bGlzdGVuZXJJZHx8bGlzdGVuZXJ9O2lmKG5ld0xpc3RlbmVyKXtuZXdMaXN0ZW5lci5lbWl0KGV2ZW50VHlwZSxsaXN0ZW5lcix0dXBsZS5pZCk7fQotbGlzdGVuZXJUdXBsZUxpc3Q9Y29ucyh0dXBsZSxsaXN0ZW5lclR1cGxlTGlzdCk7bGlzdGVuZXJMaXN0PWNvbnMobGlzdGVuZXIsbGlzdGVuZXJMaXN0KTtyZXR1cm4gdGhpczt9LGVtaXQ6ZnVuY3Rpb24oKXthcHBseUVhY2gobGlzdGVuZXJMaXN0LGFyZ3VtZW50cyk7fSx1bjpmdW5jdGlvbihsaXN0ZW5lcklkKXt2YXIgcmVtb3ZlZDtsaXN0ZW5lclR1cGxlTGlzdD13aXRob3V0KGxpc3RlbmVyVHVwbGVMaXN0LGhhc0lkKGxpc3RlbmVySWQpLGZ1bmN0aW9uKHR1cGxlKXtyZW1vdmVkPXR1cGxlO30pO2lmKHJlbW92ZWQpe2xpc3RlbmVyTGlzdD13aXRob3V0KGxpc3RlbmVyTGlzdCxmdW5jdGlvbihsaXN0ZW5lcil7cmV0dXJuIGxpc3RlbmVyPT1yZW1vdmVkLmxpc3RlbmVyO30pO2lmKHJlbW92ZUxpc3RlbmVyKXtyZW1vdmVMaXN0ZW5lci5lbWl0KGV2ZW50VHlwZSxyZW1vdmVkLmxpc3RlbmVyLHJlbW92ZWQuaWQpO319fSxsaXN0ZW5lcnM6ZnVuY3Rpb24oKXtyZXR1cm4gbGlzdGVuZXJMaXN0O30saGFzTGlzdGVuZXI6ZnVuY3Rpb24obGlzdGVuZXJJZCl7dmFyIHRlc3Q9bGlzdGVuZXJJZD9oYXNJZChsaXN0ZW5lcklkKTphbHdheXM7cmV0dXJuIGRlZmluZWQoZmlyc3QodGVzdCxsaXN0ZW5lclR1cGxlTGlzdCkpO319O30KLWZ1bmN0aW9uIHB1YlN1Yigpe3ZhciBzaW5nbGVzPXt9LG5ld0xpc3RlbmVyPW5ld1NpbmdsZSgnbmV3TGlzdGVuZXInKSxyZW1vdmVMaXN0ZW5lcj1uZXdTaW5nbGUoJ3JlbW92ZUxpc3RlbmVyJyk7ZnVuY3Rpb24gbmV3U2luZ2xlKGV2ZW50TmFtZSl7cmV0dXJuIHNpbmdsZXNbZXZlbnROYW1lXT1zaW5nbGVFdmVudFB1YlN1YihldmVudE5hbWUsbmV3TGlzdGVuZXIscmVtb3ZlTGlzdGVuZXIpO30KLWZ1bmN0aW9uIHB1YlN1Ykluc3RhbmNlKGV2ZW50TmFtZSl7cmV0dXJuIHNpbmdsZXNbZXZlbnROYW1lXXx8bmV3U2luZ2xlKGV2ZW50TmFtZSk7fQotWydlbWl0Jywnb24nLCd1biddLmZvckVhY2goZnVuY3Rpb24obWV0aG9kTmFtZSl7cHViU3ViSW5zdGFuY2VbbWV0aG9kTmFtZV09dmFyQXJncyhmdW5jdGlvbihldmVudE5hbWUscGFyYW1ldGVycyl7YXBwbHkocGFyYW1ldGVycyxwdWJTdWJJbnN0YW5jZShldmVudE5hbWUpW21ldGhvZE5hbWVdKTt9KTt9KTtyZXR1cm4gcHViU3ViSW5zdGFuY2U7fQotdmFyCi1fUz0xLE5PREVfT1BFTkVEPV9TKyssTk9ERV9DTE9TRUQ9X1MrKyxOT0RFX1NXQVA9X1MrKyxOT0RFX0RST1A9X1MrKyxGQUlMX0VWRU5UPSdmYWlsJyxST09UX05PREVfRk9VTkQ9X1MrKyxST09UX1BBVEhfRk9VTkQ9X1MrKyxIVFRQX1NUQVJUPSdzdGFydCcsU1RSRUFNX0RBVEE9J2RhdGEnLFNUUkVBTV9FTkQ9J2VuZCcsQUJPUlRJTkc9X1MrKyxTQVhfS0VZPV9TKyssU0FYX1ZBTFVFX09QRU49X1MrKyxTQVhfVkFMVUVfQ0xPU0U9X1MrKztmdW5jdGlvbiBlcnJvclJlcG9ydChzdGF0dXNDb2RlLGJvZHksZXJyb3Ipe3RyeXt2YXIganNvbkJvZHk9SlNPTi5wYXJzZShib2R5KTt9Y2F0Y2goZSl7fQotcmV0dXJue3N0YXR1c0NvZGU6c3RhdHVzQ29kZSxib2R5OmJvZHksanNvbkJvZHk6anNvbkJvZHksdGhyb3duOmVycm9yfTt9Ci1mdW5jdGlvbiBwYXR0ZXJuQWRhcHRlcihvYm9lQnVzLGpzb25QYXRoQ29tcGlsZXIpe3ZhciBwcmVkaWNhdGVFdmVudE1hcD17bm9kZTpvYm9lQnVzKE5PREVfQ0xPU0VEKSxwYXRoOm9ib2VCdXMoTk9ERV9PUEVORUQpfTtmdW5jdGlvbiBlbWl0TWF0Y2hpbmdOb2RlKGVtaXRNYXRjaCxub2RlLGFzY2VudCl7dmFyIGRlc2NlbnQ9cmV2ZXJzZUxpc3QoYXNjZW50KTtlbWl0TWF0Y2gobm9kZSxsaXN0QXNBcnJheSh0YWlsKG1hcChrZXlPZixkZXNjZW50KSkpLGxpc3RBc0FycmF5KG1hcChub2RlT2YsZGVzY2VudCkpKTt9Ci1mdW5jdGlvbiBhZGRVbmRlcmx5aW5nTGlzdGVuZXIoZnVsbEV2ZW50TmFtZSxwcmVkaWNhdGVFdmVudCxjb21waWxlZEpzb25QYXRoKXt2YXIgZW1pdE1hdGNoPW9ib2VCdXMoZnVsbEV2ZW50TmFtZSkuZW1pdDtwcmVkaWNhdGVFdmVudC5vbihmdW5jdGlvbihhc2NlbnQpe3ZhciBtYXliZU1hdGNoaW5nTWFwcGluZz1jb21waWxlZEpzb25QYXRoKGFzY2VudCk7aWYobWF5YmVNYXRjaGluZ01hcHBpbmchPT1mYWxzZSl7ZW1pdE1hdGNoaW5nTm9kZShlbWl0TWF0Y2gsbm9kZU9mKG1heWJlTWF0Y2hpbmdNYXBwaW5nKSxhc2NlbnQpO319LGZ1bGxFdmVudE5hbWUpO29ib2VCdXMoJ3JlbW92ZUxpc3RlbmVyJykub24oZnVuY3Rpb24ocmVtb3ZlZEV2ZW50TmFtZSl7aWYocmVtb3ZlZEV2ZW50TmFtZT09ZnVsbEV2ZW50TmFtZSl7aWYoIW9ib2VCdXMocmVtb3ZlZEV2ZW50TmFtZSkubGlzdGVuZXJzKCkpe3ByZWRpY2F0ZUV2ZW50LnVuKGZ1bGxFdmVudE5hbWUpO319fSk7fQotb2JvZUJ1cygnbmV3TGlzdGVuZXInKS5vbihmdW5jdGlvbihmdWxsRXZlbnROYW1lKXt2YXIgbWF0Y2g9Lyhub2RlfHBhdGgpOiguKikvLmV4ZWMoZnVsbEV2ZW50TmFtZSk7aWYobWF0Y2gpe3ZhciBwcmVkaWNhdGVFdmVudD1wcmVkaWNhdGVFdmVudE1hcFttYXRjaFsxXV07aWYoIXByZWRpY2F0ZUV2ZW50Lmhhc0xpc3RlbmVyKGZ1bGxFdmVudE5hbWUpKXthZGRVbmRlcmx5aW5nTGlzdGVuZXIoZnVsbEV2ZW50TmFtZSxwcmVkaWNhdGVFdmVudCxqc29uUGF0aENvbXBpbGVyKG1hdGNoWzJdKSk7fX19KX0KLWZ1bmN0aW9uIGluc3RhbmNlQXBpKG9ib2VCdXMsY29udGVudFNvdXJjZSl7dmFyIG9ib2VBcGksZnVsbHlRdWFsaWZpZWROYW1lUGF0dGVybj0vXihub2RlfHBhdGgpOi4vLHJvb3ROb2RlRmluaXNoZWRFdmVudD1vYm9lQnVzKFJPT1RfTk9ERV9GT1VORCksZW1pdE5vZGVEcm9wPW9ib2VCdXMoTk9ERV9EUk9QKS5lbWl0LGVtaXROb2RlU3dhcD1vYm9lQnVzKE5PREVfU1dBUCkuZW1pdCxhZGRMaXN0ZW5lcj12YXJBcmdzKGZ1bmN0aW9uKGV2ZW50SWQscGFyYW1ldGVycyl7aWYob2JvZUFwaVtldmVudElkXSl7YXBwbHkocGFyYW1ldGVycyxvYm9lQXBpW2V2ZW50SWRdKTt9ZWxzZXt2YXIgZXZlbnQ9b2JvZUJ1cyhldmVudElkKSxsaXN0ZW5lcj1wYXJhbWV0ZXJzWzBdO2lmKGZ1bGx5UXVhbGlmaWVkTmFtZVBhdHRlcm4udGVzdChldmVudElkKSl7YWRkRm9yZ2V0dGFibGVDYWxsYmFjayhldmVudCxsaXN0ZW5lcik7fWVsc2V7ZXZlbnQub24obGlzdGVuZXIpO319Ci1yZXR1cm4gb2JvZUFwaTt9KSxyZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihldmVudElkLHAyLHAzKXtpZihldmVudElkPT0nZG9uZScpe3Jvb3ROb2RlRmluaXNoZWRFdmVudC51bihwMik7fWVsc2UgaWYoZXZlbnRJZD09J25vZGUnfHxldmVudElkPT0ncGF0aCcpe29ib2VCdXMudW4oZXZlbnRJZCsnOicrcDIscDMpO31lbHNle3ZhciBsaXN0ZW5lcj1wMjtvYm9lQnVzKGV2ZW50SWQpLnVuKGxpc3RlbmVyKTt9Ci1yZXR1cm4gb2JvZUFwaTt9O2Z1bmN0aW9uIGFkZFByb3RlY3RlZENhbGxiYWNrKGV2ZW50TmFtZSxjYWxsYmFjayl7b2JvZUJ1cyhldmVudE5hbWUpLm9uKHByb3RlY3RlZENhbGxiYWNrKGNhbGxiYWNrKSxjYWxsYmFjayk7cmV0dXJuIG9ib2VBcGk7fQotZnVuY3Rpb24gYWRkRm9yZ2V0dGFibGVDYWxsYmFjayhldmVudCxjYWxsYmFjayxsaXN0ZW5lcklkKXtsaXN0ZW5lcklkPWxpc3RlbmVySWR8fGNhbGxiYWNrO3ZhciBzYWZlQ2FsbGJhY2s9cHJvdGVjdGVkQ2FsbGJhY2soY2FsbGJhY2spO2V2ZW50Lm9uKGZ1bmN0aW9uKCl7dmFyIGRpc2NhcmQ9ZmFsc2U7b2JvZUFwaS5mb3JnZXQ9ZnVuY3Rpb24oKXtkaXNjYXJkPXRydWU7fTthcHBseShhcmd1bWVudHMsc2FmZUNhbGxiYWNrKTtkZWxldGUgb2JvZUFwaS5mb3JnZXQ7aWYoZGlzY2FyZCl7ZXZlbnQudW4obGlzdGVuZXJJZCk7fX0sbGlzdGVuZXJJZCk7cmV0dXJuIG9ib2VBcGk7fQotZnVuY3Rpb24gcHJvdGVjdGVkQ2FsbGJhY2soY2FsbGJhY2spe3JldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4gY2FsbGJhY2suYXBwbHkob2JvZUFwaSxhcmd1bWVudHMpO31jYXRjaChlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKGUubWVzc2FnZSk7fSk7fX19Ci1mdW5jdGlvbiBmdWxseVF1YWxpZmllZFBhdHRlcm5NYXRjaEV2ZW50KHR5cGUscGF0dGVybil7cmV0dXJuIG9ib2VCdXModHlwZSsnOicrcGF0dGVybik7fQotZnVuY3Rpb24gd3JhcENhbGxiYWNrVG9Td2FwTm9kZUlmU29tZXRoaW5nUmV0dXJuZWQoY2FsbGJhY2spe3JldHVybiBmdW5jdGlvbigpe3ZhciByZXR1cm5WYWx1ZUZyb21DYWxsYmFjaz1jYWxsYmFjay5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoZGVmaW5lZChyZXR1cm5WYWx1ZUZyb21DYWxsYmFjaykpe2lmKHJldHVyblZhbHVlRnJvbUNhbGxiYWNrPT1vYm9lLmRyb3Ape2VtaXROb2RlRHJvcCgpO31lbHNle2VtaXROb2RlU3dhcChyZXR1cm5WYWx1ZUZyb21DYWxsYmFjayk7fX19fQotZnVuY3Rpb24gYWRkU2luZ2xlTm9kZU9yUGF0aExpc3RlbmVyKGV2ZW50SWQscGF0dGVybixjYWxsYmFjayl7dmFyIGVmZmVjdGl2ZUNhbGxiYWNrO2lmKGV2ZW50SWQ9PSdub2RlJyl7ZWZmZWN0aXZlQ2FsbGJhY2s9d3JhcENhbGxiYWNrVG9Td2FwTm9kZUlmU29tZXRoaW5nUmV0dXJuZWQoY2FsbGJhY2spO31lbHNle2VmZmVjdGl2ZUNhbGxiYWNrPWNhbGxiYWNrO30KLWFkZEZvcmdldHRhYmxlQ2FsbGJhY2soZnVsbHlRdWFsaWZpZWRQYXR0ZXJuTWF0Y2hFdmVudChldmVudElkLHBhdHRlcm4pLGVmZmVjdGl2ZUNhbGxiYWNrLGNhbGxiYWNrKTt9Ci1mdW5jdGlvbiBhZGRNdWx0aXBsZU5vZGVPclBhdGhMaXN0ZW5lcnMoZXZlbnRJZCxsaXN0ZW5lck1hcCl7Zm9yKHZhciBwYXR0ZXJuIGluIGxpc3RlbmVyTWFwKXthZGRTaW5nbGVOb2RlT3JQYXRoTGlzdGVuZXIoZXZlbnRJZCxwYXR0ZXJuLGxpc3RlbmVyTWFwW3BhdHRlcm5dKTt9fQotZnVuY3Rpb24gYWRkTm9kZU9yUGF0aExpc3RlbmVyQXBpKGV2ZW50SWQsanNvblBhdGhPckxpc3RlbmVyTWFwLGNhbGxiYWNrKXtpZihpc1N0cmluZyhqc29uUGF0aE9yTGlzdGVuZXJNYXApKXthZGRTaW5nbGVOb2RlT3JQYXRoTGlzdGVuZXIoZXZlbnRJZCxqc29uUGF0aE9yTGlzdGVuZXJNYXAsY2FsbGJhY2spO31lbHNle2FkZE11bHRpcGxlTm9kZU9yUGF0aExpc3RlbmVycyhldmVudElkLGpzb25QYXRoT3JMaXN0ZW5lck1hcCk7fQotcmV0dXJuIG9ib2VBcGk7fQotb2JvZUJ1cyhST09UX1BBVEhfRk9VTkQpLm9uKGZ1bmN0aW9uKHJvb3ROb2RlKXtvYm9lQXBpLnJvb3Q9ZnVuY3Rvcihyb290Tm9kZSk7fSk7b2JvZUJ1cyhIVFRQX1NUQVJUKS5vbihmdW5jdGlvbihfc3RhdHVzQ29kZSxoZWFkZXJzKXtvYm9lQXBpLmhlYWRlcj1mdW5jdGlvbihuYW1lKXtyZXR1cm4gbmFtZT9oZWFkZXJzW25hbWVdOmhlYWRlcnM7fX0pO3JldHVybiBvYm9lQXBpPXtvbjphZGRMaXN0ZW5lcixhZGRMaXN0ZW5lcjphZGRMaXN0ZW5lcixyZW1vdmVMaXN0ZW5lcjpyZW1vdmVMaXN0ZW5lcixlbWl0Om9ib2VCdXMuZW1pdCxub2RlOnBhcnRpYWxDb21wbGV0ZShhZGROb2RlT3JQYXRoTGlzdGVuZXJBcGksJ25vZGUnKSxwYXRoOnBhcnRpYWxDb21wbGV0ZShhZGROb2RlT3JQYXRoTGlzdGVuZXJBcGksJ3BhdGgnKSxkb25lOnBhcnRpYWxDb21wbGV0ZShhZGRGb3JnZXR0YWJsZUNhbGxiYWNrLHJvb3ROb2RlRmluaXNoZWRFdmVudCksc3RhcnQ6cGFydGlhbENvbXBsZXRlKGFkZFByb3RlY3RlZENhbGxiYWNrLEhUVFBfU1RBUlQpLGZhaWw6b2JvZUJ1cyhGQUlMX0VWRU5UKS5vbixhYm9ydDpvYm9lQnVzKEFCT1JUSU5HKS5lbWl0LHdyaXRlOm9ib2VCdXMoU1RSRUFNX0RBVEEpLmVtaXQsZmluaXNoOm9ib2VCdXMoU1RSRUFNX0VORCkuZW1pdCxoZWFkZXI6bm9vcCxyb290Om5vb3Asc291cmNlOmNvbnRlbnRTb3VyY2V9O30KLWZ1bmN0aW9uIHdpcmUoaHR0cE1ldGhvZE5hbWUsY29udGVudFNvdXJjZSxib2R5LGhlYWRlcnMsd2l0aENyZWRlbnRpYWxzKXt2YXIgb2JvZUJ1cz1wdWJTdWIoKTtpZihjb250ZW50U291cmNlKXtzdHJlYW1pbmdIdHRwKG9ib2VCdXMsaHR0cFRyYW5zcG9ydCgpLGh0dHBNZXRob2ROYW1lLGNvbnRlbnRTb3VyY2UsYm9keSxoZWFkZXJzLHdpdGhDcmVkZW50aWFscyk7fQotY2xhcmluZXQob2JvZUJ1cyk7YXNjZW50TWFuYWdlcihvYm9lQnVzLGluY3JlbWVudGFsQ29udGVudEJ1aWxkZXIob2JvZUJ1cykpO3BhdHRlcm5BZGFwdGVyKG9ib2VCdXMsanNvblBhdGhDb21waWxlcik7cmV0dXJuIGluc3RhbmNlQXBpKG9ib2VCdXMsY29udGVudFNvdXJjZSk7fQotZnVuY3Rpb24gYXBwbHlEZWZhdWx0cyhwYXNzdGhyb3VnaCx1cmwsaHR0cE1ldGhvZE5hbWUsYm9keSxoZWFkZXJzLHdpdGhDcmVkZW50aWFscyxjYWNoZWQpe2hlYWRlcnM9aGVhZGVycz9KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGhlYWRlcnMpKTp7fTtpZihib2R5KXtpZighaXNTdHJpbmcoYm9keSkpe2JvZHk9SlNPTi5zdHJpbmdpZnkoYm9keSk7aGVhZGVyc1snQ29udGVudC1UeXBlJ109aGVhZGVyc1snQ29udGVudC1UeXBlJ118fCdhcHBsaWNhdGlvbi9qc29uJzt9fWVsc2V7Ym9keT1udWxsO30KLWZ1bmN0aW9uIG1vZGlmaWVkVXJsKGJhc2VVcmwsY2FjaGVkKXtpZihjYWNoZWQ9PT1mYWxzZSl7aWYoYmFzZVVybC5pbmRleE9mKCc/Jyk9PS0xKXtiYXNlVXJsKz0nPyc7fWVsc2V7YmFzZVVybCs9JyYnO30KLWJhc2VVcmwrPSdfPScrbmV3IERhdGUoKS5nZXRUaW1lKCk7fQotcmV0dXJuIGJhc2VVcmw7fQotcmV0dXJuIHBhc3N0aHJvdWdoKGh0dHBNZXRob2ROYW1lfHwnR0VUJyxtb2RpZmllZFVybCh1cmwsY2FjaGVkKSxib2R5LGhlYWRlcnMsd2l0aENyZWRlbnRpYWxzfHxmYWxzZSk7fQotZnVuY3Rpb24gb2JvZShhcmcxKXt2YXIgbm9kZVN0cmVhbU1ldGhvZE5hbWVzPWxpc3QoJ3Jlc3VtZScsJ3BhdXNlJywncGlwZScpLGlzU3RyZWFtPXBhcnRpYWxDb21wbGV0ZShoYXNBbGxQcm9wZXJ0aWVzLG5vZGVTdHJlYW1NZXRob2ROYW1lcyk7aWYoYXJnMSl7aWYoaXNTdHJlYW0oYXJnMSl8fGlzU3RyaW5nKGFyZzEpKXtyZXR1cm4gYXBwbHlEZWZhdWx0cyh3aXJlLGFyZzEpO31lbHNle3JldHVybiBhcHBseURlZmF1bHRzKHdpcmUsYXJnMS51cmwsYXJnMS5tZXRob2QsYXJnMS5ib2R5LGFyZzEuaGVhZGVycyxhcmcxLndpdGhDcmVkZW50aWFscyxhcmcxLmNhY2hlZCk7fX1lbHNle3JldHVybiB3aXJlKCk7fX0KLW9ib2UuZHJvcD1mdW5jdGlvbigpe3JldHVybiBvYm9lLmRyb3A7fTtpZih0eXBlb2YgZGVmaW5lPT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKCJvYm9lIixbXSxmdW5jdGlvbigpe3JldHVybiBvYm9lO30pO31lbHNlIGlmKHR5cGVvZiBleHBvcnRzPT09J29iamVjdCcpe21vZHVsZS5leHBvcnRzPW9ib2U7fWVsc2V7d2luZG93Lm9ib2U9b2JvZTt9fSkoKGZ1bmN0aW9uKCl7dHJ5e3JldHVybiB3aW5kb3c7fWNhdGNoKGUpe3JldHVybiBzZWxmO319KCkpLE9iamVjdCxBcnJheSxFcnJvcixKU09OKTsndXNlIHN0cmljdCc7aWYodHIuaXNWaW5uKXtnbG9iYWwub2JvZT1nbG9iYWwud2luZG93Lm9ib2U7Z2xvYmFsLndpbmRvdz11bmRlZmluZWQ7fWVsc2UgaWYodHIuaXNOb2RlKXtnbG9iYWwud2luZG93PXVuZGVmaW5lZDtjb25zdCBwYXRoPUhUTUxJbXBvcnRzTG9hZGVyLmhyZWZUb0Fic29sdXRlUGF0aCgnL29ib2UvZGlzdC9vYm9lLW5vZGUuanMnKTtnbG9iYWwub2JvZT1yZXF1aXJlKHBhdGgpO30ndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7Y29uc3QgU1RSSU5HX0lEX1NVRkZJWD0nX3NpZCc7Y29uc3QgUExVUkFMX1NUUklOR19JRF9TVUZGSVg9J19zaWRzJztmdW5jdGlvbiBpc1N0cmluZ1JlZmVyZW5jZShzKXtyZXR1cm4gcy5lbmRzV2l0aChTVFJJTkdfSURfU1VGRklYKXx8cy5lbmRzV2l0aChQTFVSQUxfU1RSSU5HX0lEX1NVRkZJWCk7fQotZnVuY3Rpb24gZ2V0U3RyaW5nUmVmZXJlbmNlTmFtZShuYW1lKXtpZihuYW1lLmVuZHNXaXRoKFBMVVJBTF9TVFJJTkdfSURfU1VGRklYKSl7cmV0dXJuIG5hbWUuc2xpY2UoMCwtUExVUkFMX1NUUklOR19JRF9TVUZGSVgubGVuZ3RoKTt9Ci1yZXR1cm4gbmFtZS5zbGljZSgwLC1TVFJJTkdfSURfU1VGRklYLmxlbmd0aCk7fQotZnVuY3Rpb24gZGVmZXJlbmNlU3RyaW5ncyhpZFRvU3RyaW5nLG8pe2NvbnN0IGNsb25lPU9iamVjdC5hc3NpZ24oe30sbyk7Zm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBPYmplY3QuZW50cmllcyhjbG9uZSkpe2lmKGlzU3RyaW5nUmVmZXJlbmNlKGtleSkpe2NvbnN0IG5hbWU9Z2V0U3RyaW5nUmVmZXJlbmNlTmFtZShrZXkpO2Nsb25lW25hbWVdPWlkVG9TdHJpbmcodmFsdWUpO319Ci1yZXR1cm4gY2xvbmU7fQotZnVuY3Rpb24gc2luZ3VsYXJpemUod29yZCl7aWYod29yZC5lbmRzV2l0aCgncycpKXtyZXR1cm4gd29yZC5zbGljZSgwLC0xKTt9Ci1yZXR1cm4gd29yZDt9Ci1mdW5jdGlvbiBnZXRNZXRhZGF0YVBhaXJzKGRhdGFKc29uKXtjb25zdCBpc01ldGFkYXRhPXY9PnR5cGVvZiB2IT09J29iamVjdCd8fEFycmF5LmlzQXJyYXkodik7Y29uc3QgcGFpcnM9T2JqZWN0LmVudHJpZXMoZGF0YUpzb24pO2NvbnN0IG1ldGFkYXRhUGFpcnM9cGFpcnMuZmlsdGVyKChbXyx2XSk9PmlzTWV0YWRhdGEodikpO3JldHVybiBtZXRhZGF0YVBhaXJzO30KLWZ1bmN0aW9uIGdldEdyb3VwUGFpcnMoZGF0YUpzb24pe2NvbnN0IHBhaXJzPU9iamVjdC5lbnRyaWVzKGRhdGFKc29uKTtjb25zdCBub25NYXBQYWlycz1wYWlycy5maWx0ZXIoKFtrLF9dKT0+ayE9PSdtYXBzJyk7Y29uc3QgZ3JvdXBQYWlycz1ub25NYXBQYWlycy5maWx0ZXIoKFtfLHZdKT0+dHlwZW9mIHY9PT0nb2JqZWN0Jyk7cmV0dXJuIGdyb3VwUGFpcnM7fQotZnVuY3Rpb24gY3JlYXRlTWFwKG1hcEpzb24pe2NvbnN0IG1hcD1uZXcgTWFwKCk7Zm9yKGNvbnN0IGVudHJ5IG9mIG1hcEpzb24pe2lmKGVudHJ5LmlkPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQga2V5ICJpZCIgaW4gc3RyZWFtaW5nIGV2ZW50LicpO30KLW1hcC5zZXQoZW50cnkuaWQsZW50cnkpO30KLXJldHVybiBtYXA7fQotZnVuY3Rpb24gY3JlYXRlTWFwcyhtYXBzSnNvbil7Y29uc3QgbWFwcz1uZXcgTWFwKCk7Zm9yKGNvbnN0W25hbWUsbWFwSnNvbl1vZiBPYmplY3QuZW50cmllcyhtYXBzSnNvbikpe21hcHMuc2V0KG5hbWUsY3JlYXRlTWFwKG1hcEpzb24pKTt9Ci1yZXR1cm4gbWFwczt9Ci1mdW5jdGlvbiBjcmVhdGVHcm91cChncm91cEpzb24sb3B0X3N0YXJ0VGltZSl7Y29uc3QgZW50cmllcz1bXTtjb25zdCBuPU9iamVjdC52YWx1ZXMoZ3JvdXBKc29uKVswXS5sZW5ndGg7Zm9yKGxldCBpPTA7aTxuO2krKyl7Y29uc3QgZW50cnk9e307Zm9yKGNvbnN0IG5hbWUgaW4gZ3JvdXBKc29uKXtlbnRyeVtuYW1lXT1ncm91cEpzb25bbmFtZV1baV07fQotZW50cmllcy5wdXNoKGVudHJ5KTt9Ci1jb25zdCB0aW1lRGVsdGE9Z3JvdXBKc29uLnRpbWVEZWx0YTtpZihvcHRfc3RhcnRUaW1lPT09dW5kZWZpbmVkJiZ0aW1lRGVsdGEhPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBrZXkgInN0YXJ0VGltZSIgaW4gc3RyZWFtaW5nIGV2ZW50LicpO30KLWlmKG9wdF9zdGFydFRpbWUpe2xldCBkZWx0YT0wO2Zvcihjb25zdCBlbnRyeSBvZiBlbnRyaWVzKXtkZWx0YSs9ZW50cnkudGltZURlbHRhP2VudHJ5LnRpbWVEZWx0YTowO2VudHJ5LnRpbWU9b3B0X3N0YXJ0VGltZStkZWx0YTt9fQotcmV0dXJuIGVudHJpZXM7fQotZnVuY3Rpb24gY3JlYXRlR3JvdXBzKGdyb3Vwc0pzb24sb3B0X3N0YXJ0VGltZSl7Y29uc3QgZ3JvdXBzPW5ldyBNYXAoKTtmb3IoY29uc3RbbmFtZSxncm91cEpzb25db2YgT2JqZWN0LmVudHJpZXMoZ3JvdXBzSnNvbikpe2dyb3Vwcy5zZXQobmFtZSxjcmVhdGVHcm91cChncm91cEpzb24sb3B0X3N0YXJ0VGltZSkpO30KLXJldHVybiBncm91cHM7fQotZnVuY3Rpb24gY3JlYXRlTWV0YWRhdGEobWV0YWRhdGFQYWlycyl7Y29uc3QgbWV0YWRhdGE9bmV3IE1hcCgpO2Zvcihjb25zdFtuYW1lLHZhbHVlXW9mIG1ldGFkYXRhUGFpcnMpe21ldGFkYXRhLnNldChuYW1lLHZhbHVlKTt9Ci1pZihtZXRhZGF0YS5nZXQoJ3ZlcnNpb24nKT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIGtleSAidmVyc2lvbiIgaW4gc3RyZWFtaW5nIGV2ZW50LicpO30KLXJldHVybiBtZXRhZGF0YTt9Ci1jbGFzcyBQcm9maWxpbmdEaWN0aW9uYXJ5UmVhZGVye2NvbnN0cnVjdG9yKG9wdF9tZXRhZGF0YSxvcHRfbWFwcyxvcHRfZ3JvdXBzLG9wdF9wYXJlbnQpe3RoaXMubWV0YWRhdGE9b3B0X21ldGFkYXRhfHxuZXcgTWFwKCk7dGhpcy5tYXBzPW9wdF9tYXBzfHxuZXcgTWFwKCk7dGhpcy5ncm91cHM9b3B0X2dyb3Vwc3x8bmV3IE1hcCgpO3RoaXMucGFyZW50Xz1vcHRfcGFyZW50fHx1bmRlZmluZWQ7dGhpcy5pbmZsYXRlZF89dW5kZWZpbmVkO3RoaXMucmF3Xz11bmRlZmluZWQ7dGhpcy5ib3VuZEdldFN0cmluZ189dGhpcy5nZXRTdHJpbmcuYmluZCh0aGlzKTt0aGlzLmRlZmVyZW5jZVN0cmluZ3NfPW89PmRlZmVyZW5jZVN0cmluZ3ModGhpcy5ib3VuZEdldFN0cmluZ18sbyk7fQotc3RhdGljIGVtcHR5KCl7cmV0dXJuIG5ldyBQcm9maWxpbmdEaWN0aW9uYXJ5UmVhZGVyKCk7fQotZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLnBhcmVudF87fQotZ2V0IHJhdygpe2lmKHRoaXMucmF3XylyZXR1cm4gdGhpcy5yYXdfO3RoaXMucmF3Xz17fTtmb3IoY29uc3RbbmFtZSxncm91cF1vZiB0aGlzLmdyb3Vwcy5lbnRyaWVzKCkpe3RoaXMucmF3X1tuYW1lXT1ncm91cDt9Ci1yZXR1cm4gdGhpcy5yYXdfO30KLWdldCBpbmZsYXRlZCgpe2lmKHRoaXMuaW5mbGF0ZWRfKXJldHVybiB0aGlzLmluZmxhdGVkXzt0aGlzLmluZmxhdGVkXz17fTtmb3IoY29uc3RbbmFtZSxncm91cF1vZiB0aGlzLmdyb3Vwcy5lbnRyaWVzKCkpe3RoaXMuaW5mbGF0ZWRfW25hbWVdPXRoaXMuaW5mbGF0ZUdyb3VwKGdyb3VwKTt9Ci1yZXR1cm4gdGhpcy5pbmZsYXRlZF87fQotZ2V0TmV3TWFwKG5hbWUpe3JldHVybiB0aGlzLm1hcHMuZ2V0KG5hbWUpfHxuZXcgTWFwKCk7fQotZ2V0TWFwVmFsdWUobWFwTmFtZSxpZCl7bGV0IHZhbHVlPXRoaXMuZ2V0TmV3TWFwKG1hcE5hbWUpLmdldChpZCk7aWYodmFsdWU9PT11bmRlZmluZWQmJnRoaXMucGFyZW50KXt2YWx1ZT10aGlzLnBhcmVudC5nZXRNYXBWYWx1ZShtYXBOYW1lLGlkKTt9Ci1yZXR1cm4gdmFsdWU7fQotZ2V0U3RyaW5nKGlkKXtjb25zdCB2YWx1ZT10aGlzLmdldE1hcFZhbHVlKCdzdHJpbmdzJyxpZCk7aWYodmFsdWU9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdmFsdWUuc3RyaW5nO30KLWhhc01hcChuYW1lKXtpZih0aGlzLm1hcHMuaGFzKG5hbWUpKXJldHVybiB0cnVlO2lmKHRoaXMucGFyZW50PT09dW5kZWZpbmVkKXJldHVybiBmYWxzZTtyZXR1cm4gdGhpcy5wYXJlbnQuaGFzTWFwKG5hbWUpO30KLWluZmxhdGVHcm91cChncm91cCl7cmV0dXJuIGdyb3VwLm1hcCh0aGlzLmluZmxhdGVFbnRyeS5iaW5kKHRoaXMpKTt9Ci1pbmZsYXRlRW50cnkoZW50cnkpe2NvbnN0IGluZmxhdGVkRW50cnk9e307Zm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMoZW50cnkpKXtsZXQgaW5mbGF0ZWRWYWx1ZTtpZih0aGlzLmhhc01hcChuYW1lKSl7Y29uc3QgaWQ9dmFsdWU7aW5mbGF0ZWRWYWx1ZT10aGlzLmRlZmVyZW5jZVN0cmluZ3NfKHRoaXMuZ2V0TWFwVmFsdWUobmFtZSxpZCkpO31lbHNle2luZmxhdGVkVmFsdWU9dmFsdWU7fQotaW5mbGF0ZWRFbnRyeVtzaW5ndWxhcml6ZShuYW1lKV09aW5mbGF0ZWRWYWx1ZTt9Ci1yZXR1cm4gdGhpcy5kZWZlcmVuY2VTdHJpbmdzXyhpbmZsYXRlZEVudHJ5KTt9Ci1leHBhbmREYXRhKGRhdGEpe2NvbnN0IG1hcHNKc29uPWRhdGEubWFwc3x8e307Y29uc3QgZ3JvdXBzSnNvbj1kYXRhLmFsbG9jYXRvcnN8fHt9O2NvbnN0IG1ldGFkYXRhUGFpcnM9Z2V0TWV0YWRhdGFQYWlycyhkYXRhKTtjb25zdCBtZXRhZGF0YT1jcmVhdGVNZXRhZGF0YShtZXRhZGF0YVBhaXJzKTtjb25zdCBvcHRfc3RhcnRUaW1lPW1ldGFkYXRhLmdldCgnc3RhcnRUaW1lJyk7Y29uc3QgbWFwcz1jcmVhdGVNYXBzKG1hcHNKc29uKTtjb25zdCBncm91cHM9Y3JlYXRlR3JvdXBzKGdyb3Vwc0pzb24sb3B0X3N0YXJ0VGltZSk7cmV0dXJuIG5ldyBQcm9maWxpbmdEaWN0aW9uYXJ5UmVhZGVyKG1ldGFkYXRhLG1hcHMsZ3JvdXBzLHRoaXMpO30KLWV4cGFuZEV2ZW50KGV2ZW50KXtyZXR1cm4gdGhpcy5leHBhbmREYXRhKGV2ZW50LmFyZ3MuZGF0YSk7fX0KLXJldHVybntQcm9maWxpbmdEaWN0aW9uYXJ5UmVhZGVyLHNpbmd1bGFyaXplLGRlZmVyZW5jZVN0cmluZ3NGb3JUZXN0OmRlZmVyZW5jZVN0cmluZ3MsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLnNvdXJjZV9pbmZvJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFNvdXJjZUluZm8oZmlsZSxvcHRfbGluZSxvcHRfY29sdW1uKXt0aGlzLmZpbGVfPWZpbGU7dGhpcy5saW5lXz1vcHRfbGluZXx8LTE7dGhpcy5jb2x1bW5fPW9wdF9jb2x1bW58fC0xO30KLVNvdXJjZUluZm8ucHJvdG90eXBlPXtnZXQgZmlsZSgpe3JldHVybiB0aGlzLmZpbGVfO30sZ2V0IGxpbmUoKXtyZXR1cm4gdGhpcy5saW5lXzt9LGdldCBjb2x1bW4oKXtyZXR1cm4gdGhpcy5jb2x1bW5fO30sZ2V0IGRvbWFpbigpe2lmKCF0aGlzLmZpbGVfKXJldHVybiB1bmRlZmluZWQ7Y29uc3QgZG9tYWluPXRoaXMuZmlsZV8ubWF0Y2goLyguKjpcL1wvW146XC9dKikvaSk7cmV0dXJuIGRvbWFpbj9kb21haW5bMV06dW5kZWZpbmVkO30sdG9TdHJpbmcoKXtsZXQgc3RyPScnO2lmKHRoaXMuZmlsZV8pe3N0cis9dGhpcy5maWxlXzt9Ci1pZih0aGlzLmxpbmVfPjApe3N0cis9JzonK3RoaXMubGluZV87fQotaWYodGhpcy5jb2x1bW5fPjApe3N0cis9JzonK3RoaXMuY29sdW1uXzt9Ci1yZXR1cm4gc3RyO319O3JldHVybntTb3VyY2VJbmZvLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbC5zb3VyY2VfaW5mbycsZnVuY3Rpb24oKXtmdW5jdGlvbiBKU1NvdXJjZUluZm8oZmlsZSxsaW5lLGNvbHVtbixpc05hdGl2ZSxzY3JpcHRJZCxzdGF0ZSl7dHIubW9kZWwuc291cmNlX2luZm8uU291cmNlSW5mby5jYWxsKHRoaXMsZmlsZSxsaW5lLGNvbHVtbik7dGhpcy5pc05hdGl2ZV89aXNOYXRpdmU7dGhpcy5zY3JpcHRJZF89c2NyaXB0SWQ7dGhpcy5zdGF0ZV89c3RhdGU7fQotSlNTb3VyY2VJbmZvLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLnNvdXJjZV9pbmZvLlNvdXJjZUluZm8ucHJvdG90eXBlLGdldCBzdGF0ZSgpe3JldHVybiB0aGlzLnN0YXRlXzt9LGdldCBpc05hdGl2ZSgpe3JldHVybiB0aGlzLmlzTmF0aXZlXzt9LGdldCBzY3JpcHRJZCgpe3JldHVybiB0aGlzLnNjcmlwdElkXzt9LHRvU3RyaW5nKCl7Y29uc3Qgc3RyPXRoaXMuaXNOYXRpdmVfPydbbmF0aXZlIHY4XSAnOicnO3JldHVybiBzdHIrCi10ci5tb2RlbC5zb3VyY2VfaW5mby5Tb3VyY2VJbmZvLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpO319O2NvbnN0IEpTU291cmNlU3RhdGU9e0NPTVBJTEVEOidjb21waWxlZCcsT1BUSU1JWkFCTEU6J29wdGltaXphYmxlJyxPUFRJTUlaRUQ6J29wdGltaXplZCcsVU5LTk9XTjondW5rbm93bicsfTtyZXR1cm57SlNTb3VyY2VJbmZvLEpTU291cmNlU3RhdGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gVHJhY2VDb2RlRW50cnkoYWRkcmVzcyxzaXplLG5hbWUsc2NyaXB0SWQpe3RoaXMuaWRfPXRyLmIuR1VJRC5hbGxvY2F0ZVNpbXBsZSgpO3RoaXMuYWRkcmVzc189YWRkcmVzczt0aGlzLnNpemVfPXNpemU7Y29uc3QgcmVQcmVmaXg9L14oXHcqOik/KFsqfl0/KSguKikkL207Y29uc3QgdG9rZW5zPXJlUHJlZml4LmV4ZWMobmFtZSk7Y29uc3QgcHJlZml4PXRva2Vuc1sxXTtsZXQgc3RhdGU9dG9rZW5zWzJdO2NvbnN0IGJvZHk9dG9rZW5zWzNdO2lmKHN0YXRlPT09JyonKXtzdGF0ZT10ci5tb2RlbC5zb3VyY2VfaW5mby5KU1NvdXJjZVN0YXRlLk9QVElNSVpFRDt9ZWxzZSBpZihzdGF0ZT09PSd+Jyl7c3RhdGU9dHIubW9kZWwuc291cmNlX2luZm8uSlNTb3VyY2VTdGF0ZS5PUFRJTUlaQUJMRTt9ZWxzZSBpZihzdGF0ZT09PScnKXtzdGF0ZT10ci5tb2RlbC5zb3VyY2VfaW5mby5KU1NvdXJjZVN0YXRlLkNPTVBJTEVEO31lbHNle3N0YXRlPXRyLm1vZGVsLnNvdXJjZV9pbmZvLkpTU291cmNlU3RhdGUuVU5LTk9XTjt9Ci1sZXQgcmF3TmFtZTtsZXQgcmF3VXJsO2lmKHByZWZpeD09PSdTY3JpcHQ6Jyl7cmF3TmFtZT0nJztyYXdVcmw9Ym9keTt9ZWxzZXtjb25zdCBzcGFjZVBvcz1ib2R5Lmxhc3RJbmRleE9mKCcgJyk7cmF3TmFtZT1zcGFjZVBvcyE9PS0xP2JvZHkuc3Vic3RyKDAsc3BhY2VQb3MpOmJvZHk7cmF3VXJsPXNwYWNlUG9zIT09LTE/Ym9keS5zdWJzdHIoc3BhY2VQb3MrMSk6Jyc7fQotZnVuY3Rpb24gc3BsaXRMaW5lQW5kQ29sdW1uKHVybCl7Y29uc3QgbGluZUNvbHVtblJlZ0V4PS8oPzo6KFxkKykpPyg/OjooXGQrKSk/JC87Y29uc3QgbGluZUNvbHVtbk1hdGNoPWxpbmVDb2x1bW5SZWdFeC5leGVjKHVybCk7bGV0IGxpbmVOdW1iZXI7bGV0IGNvbHVtbk51bWJlcjtpZih0eXBlb2YobGluZUNvbHVtbk1hdGNoWzFdKT09PSdzdHJpbmcnKXtsaW5lTnVtYmVyPXBhcnNlSW50KGxpbmVDb2x1bW5NYXRjaFsxXSwxMCk7bGluZU51bWJlcj1pc05hTihsaW5lTnVtYmVyKT91bmRlZmluZWQ6bGluZU51bWJlci0xO30KLWlmKHR5cGVvZihsaW5lQ29sdW1uTWF0Y2hbMl0pPT09J3N0cmluZycpe2NvbHVtbk51bWJlcj1wYXJzZUludChsaW5lQ29sdW1uTWF0Y2hbMl0sMTApO2NvbHVtbk51bWJlcj1pc05hTihjb2x1bW5OdW1iZXIpP3VuZGVmaW5lZDpjb2x1bW5OdW1iZXItMTt9Ci1yZXR1cm57dXJsOnVybC5zdWJzdHJpbmcoMCx1cmwubGVuZ3RoLWxpbmVDb2x1bW5NYXRjaFswXS5sZW5ndGgpLGxpbmVOdW1iZXIsY29sdW1uTnVtYmVyfTt9Ci1jb25zdCBuYXRpdmVTdWZmaXg9JyBuYXRpdmUnO2NvbnN0IGlzTmF0aXZlPXJhd05hbWUuZW5kc1dpdGgobmF0aXZlU3VmZml4KTt0aGlzLm5hbWVfPWlzTmF0aXZlP3Jhd05hbWUuc2xpY2UoMCwtbmF0aXZlU3VmZml4Lmxlbmd0aCk6cmF3TmFtZTtjb25zdCB1cmxEYXRhPXNwbGl0TGluZUFuZENvbHVtbihyYXdVcmwpO2NvbnN0IHVybD11cmxEYXRhLnVybHx8Jyc7Y29uc3QgbGluZT11cmxEYXRhLmxpbmVOdW1iZXJ8fDA7Y29uc3QgY29sdW1uPXVybERhdGEuY29sdW1uTnVtYmVyfHwwO3RoaXMuc291cmNlSW5mb189bmV3IHRyLm1vZGVsLnNvdXJjZV9pbmZvLkpTU291cmNlSW5mbyh1cmwsbGluZSxjb2x1bW4saXNOYXRpdmUsc2NyaXB0SWQsc3RhdGUpO30KLVRyYWNlQ29kZUVudHJ5LnByb3RvdHlwZT17Z2V0IGlkKCl7cmV0dXJuIHRoaXMuaWRfO30sZ2V0IHNvdXJjZUluZm8oKXtyZXR1cm4gdGhpcy5zb3VyY2VJbmZvXzt9LGdldCBuYW1lKCl7cmV0dXJuIHRoaXMubmFtZV87fSxzZXQgYWRkcmVzcyhhZGRyZXNzKXt0aGlzLmFkZHJlc3NfPWFkZHJlc3M7fSxnZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLmFkZHJlc3NfO30sc2V0IHNpemUoc2l6ZSl7dGhpcy5zaXplXz1zaXplO30sZ2V0IHNpemUoKXtyZXR1cm4gdGhpcy5zaXplXzt9fTtyZXR1cm57VHJhY2VDb2RlRW50cnksfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gVHJhY2VDb2RlTWFwKCl7dGhpcy5iYW5rc189bmV3IE1hcCgpO30KLVRyYWNlQ29kZU1hcC5wcm90b3R5cGU9e2FkZEVudHJ5KGFkZHJlc3NIZXgsc2l6ZSxuYW1lLHNjcmlwdElkKXtjb25zdCBlbnRyeT1uZXcgdHIuZS5pbXBvcnRlci5UcmFjZUNvZGVFbnRyeSh0aGlzLmdldEFkZHJlc3NfKGFkZHJlc3NIZXgpLHNpemUsbmFtZSxzY3JpcHRJZCk7dGhpcy5hZGRFbnRyeV8oYWRkcmVzc0hleCxlbnRyeSk7fSxtb3ZlRW50cnkob2xkQWRkcmVzc0hleCxuZXdBZGRyZXNzSGV4LHNpemUpe2NvbnN0IGVudHJ5PXRoaXMuZ2V0QmFua18ob2xkQWRkcmVzc0hleCkucmVtb3ZlRW50cnkodGhpcy5nZXRBZGRyZXNzXyhvbGRBZGRyZXNzSGV4KSk7aWYoIWVudHJ5KXJldHVybjtlbnRyeS5hZGRyZXNzPXRoaXMuZ2V0QWRkcmVzc18obmV3QWRkcmVzc0hleCk7ZW50cnkuc2l6ZT1zaXplO3RoaXMuYWRkRW50cnlfKG5ld0FkZHJlc3NIZXgsZW50cnkpO30sbG9va3VwRW50cnkoYWRkcmVzc0hleCl7cmV0dXJuIHRoaXMuZ2V0QmFua18oYWRkcmVzc0hleCkubG9va3VwRW50cnkodGhpcy5nZXRBZGRyZXNzXyhhZGRyZXNzSGV4KSk7fSxhZGRFbnRyeV8oYWRkcmVzc0hleCxlbnRyeSl7dGhpcy5nZXRCYW5rXyhhZGRyZXNzSGV4KS5hZGRFbnRyeShlbnRyeSk7fSxnZXRBZGRyZXNzXyhhZGRyZXNzSGV4KXtjb25zdCBiYW5rU2l6ZUhleERpZ2l0cz0xMzthZGRyZXNzSGV4PWFkZHJlc3NIZXguc2xpY2UoMik7cmV0dXJuIHBhcnNlSW50KGFkZHJlc3NIZXguc2xpY2UoLWJhbmtTaXplSGV4RGlnaXRzKSwxNik7fSxnZXRCYW5rXyhhZGRyZXNzSGV4KXthZGRyZXNzSGV4PWFkZHJlc3NIZXguc2xpY2UoMik7Y29uc3QgYmFua1NpemVIZXhEaWdpdHM9MTM7Y29uc3QgbWF4SGV4RGlnaXRzPTE2O2NvbnN0IGJhbmtOYW1lPWFkZHJlc3NIZXguc2xpY2UoLW1heEhleERpZ2l0cywtYmFua1NpemVIZXhEaWdpdHMpO2xldCBiYW5rPXRoaXMuYmFua3NfLmdldChiYW5rTmFtZSk7aWYoIWJhbmspe2Jhbms9bmV3IFRyYWNlQ29kZUJhbmsoKTt0aGlzLmJhbmtzXy5zZXQoYmFua05hbWUsYmFuayk7fQotcmV0dXJuIGJhbms7fX07ZnVuY3Rpb24gVHJhY2VDb2RlQmFuaygpe3RoaXMuZW50cmllc189W107fQotVHJhY2VDb2RlQmFuay5wcm90b3R5cGU9e3JlbW92ZUVudHJ5KGFkZHJlc3Mpe2lmKHRoaXMuZW50cmllc18ubGVuZ3RoPT09MClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IGluZGV4PXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheSh0aGlzLmVudHJpZXNfLGZ1bmN0aW9uKGVudHJ5KXtyZXR1cm4gZW50cnkuYWRkcmVzczt9LGFkZHJlc3MpO2NvbnN0IGVudHJ5PXRoaXMuZW50cmllc19baW5kZXhdO2lmKCFlbnRyeXx8ZW50cnkuYWRkcmVzcyE9PWFkZHJlc3MpcmV0dXJuIHVuZGVmaW5lZDt0aGlzLmVudHJpZXNfLnNwbGljZShpbmRleCwxKTtyZXR1cm4gZW50cnk7fSxsb29rdXBFbnRyeShhZGRyZXNzKXtjb25zdCBpbmRleD10ci5iLmZpbmRGaXJzdFRydWVJbmRleEluU29ydGVkQXJyYXkodGhpcy5lbnRyaWVzXyxlPT4oYWRkcmVzczxlLmFkZHJlc3MpKS0xO2NvbnN0IGVudHJ5PXRoaXMuZW50cmllc19baW5kZXhdO3JldHVybiBlbnRyeSYmYWRkcmVzczxlbnRyeS5hZGRyZXNzK2VudHJ5LnNpemU/ZW50cnk6dW5kZWZpbmVkO30sYWRkRW50cnkobmV3RW50cnkpe2lmKHRoaXMuZW50cmllc18ubGVuZ3RoPT09MCl7dGhpcy5lbnRyaWVzXy5wdXNoKG5ld0VudHJ5KTt9Ci1jb25zdCBlbmRBZGRyZXNzPW5ld0VudHJ5LmFkZHJlc3MrbmV3RW50cnkuc2l6ZTtjb25zdCBsYXN0SW5kZXg9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMuZW50cmllc18sZnVuY3Rpb24oZW50cnkpe3JldHVybiBlbnRyeS5hZGRyZXNzO30sZW5kQWRkcmVzcyk7bGV0IGluZGV4O2ZvcihpbmRleD1sYXN0SW5kZXgtMTtpbmRleD49MDstLWluZGV4KXtjb25zdCBlbnRyeT10aGlzLmVudHJpZXNfW2luZGV4XTtjb25zdCBlbnRyeUVuZEFkZHJlc3M9ZW50cnkuYWRkcmVzcytlbnRyeS5zaXplO2lmKGVudHJ5RW5kQWRkcmVzczw9bmV3RW50cnkuYWRkcmVzcylicmVhazt9Ci0rK2luZGV4O3RoaXMuZW50cmllc18uc3BsaWNlKGluZGV4LGxhc3RJbmRleC1pbmRleCxuZXdFbnRyeSk7fX07cmV0dXJue1RyYWNlQ29kZU1hcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQ29udGV4dFByb2Nlc3Nvcihtb2RlbCl7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy5hY3RpdmVDb250ZXh0c189W107dGhpcy5zdGFja1BlclR5cGVfPXt9O3RoaXMuY29udGV4dENhY2hlXz17fTt0aGlzLmNvbnRleHRTZXRDYWNoZV89e307dGhpcy5jYWNoZWRFbnRyeUZvckFjdGl2ZUNvbnRleHRzXz11bmRlZmluZWQ7dGhpcy5zZWVuU25hcHNob3RzXz17fTt9Ci1Db250ZXh0UHJvY2Vzc29yLnByb3RvdHlwZT17ZW50ZXJDb250ZXh0KGNvbnRleHRUeXBlLHNjb3BlZElkKXtjb25zdCBuZXdBY3RpdmVDb250ZXh0cz1bdGhpcy5nZXRPckNyZWF0ZUNvbnRleHRfKGNvbnRleHRUeXBlLHNjb3BlZElkKSxdO2Zvcihjb25zdCBvbGRDb250ZXh0IG9mIHRoaXMuYWN0aXZlQ29udGV4dHNfKXtpZihvbGRDb250ZXh0LnR5cGU9PT1jb250ZXh0VHlwZSl7dGhpcy5wdXNoQ29udGV4dF8ob2xkQ29udGV4dCk7fWVsc2V7bmV3QWN0aXZlQ29udGV4dHMucHVzaChvbGRDb250ZXh0KTt9fQotdGhpcy5hY3RpdmVDb250ZXh0c189bmV3QWN0aXZlQ29udGV4dHM7dGhpcy5jYWNoZWRFbnRyeUZvckFjdGl2ZUNvbnRleHRzXz11bmRlZmluZWQ7fSxsZWF2ZUNvbnRleHQoY29udGV4dFR5cGUsc2NvcGVkSWQpe3RoaXMubGVhdmVDb250ZXh0SW1wbF8oY29udGV4dD0+Y29udGV4dC50eXBlPT09Y29udGV4dFR5cGUmJmNvbnRleHQuc25hcHNob3Quc2NvcGU9PT1zY29wZWRJZC5zY29wZSYmY29udGV4dC5zbmFwc2hvdC5pZFJlZj09PXNjb3BlZElkLmlkKTt9LGRlc3Ryb3lDb250ZXh0KHNjb3BlZElkKXtmb3IoY29uc3Qgc3RhY2sgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnN0YWNrUGVyVHlwZV8pKXtsZXQgbmV3TGVuZ3RoPTA7Zm9yKGxldCBpPTA7aTxzdGFjay5sZW5ndGg7KytpKXtpZihzdGFja1tpXS5zbmFwc2hvdC5zY29wZSE9PXNjb3BlZElkLnNjb3BlfHxzdGFja1tpXS5zbmFwc2hvdC5pZFJlZiE9PXNjb3BlZElkLmlkKXtzdGFja1tuZXdMZW5ndGgrK109c3RhY2tbaV07fX0KLXN0YWNrLmxlbmd0aD1uZXdMZW5ndGg7fQotdGhpcy5sZWF2ZUNvbnRleHRJbXBsXyhjb250ZXh0PT5jb250ZXh0LnNuYXBzaG90LnNjb3BlPT09c2NvcGVkSWQuc2NvcGUmJmNvbnRleHQuc25hcHNob3QuaWRSZWY9PT1zY29wZWRJZC5pZCk7fSxsZWF2ZUNvbnRleHRJbXBsXyhwcmVkaWNhdGUpe2NvbnN0IG5ld0FjdGl2ZUNvbnRleHRzPVtdO2Zvcihjb25zdCBvbGRDb250ZXh0IG9mIHRoaXMuYWN0aXZlQ29udGV4dHNfKXtpZihwcmVkaWNhdGUob2xkQ29udGV4dCkpe2NvbnN0IHByZXZpb3VzQ29udGV4dD10aGlzLnBvcENvbnRleHRfKG9sZENvbnRleHQudHlwZSk7aWYocHJldmlvdXNDb250ZXh0KXtuZXdBY3RpdmVDb250ZXh0cy5wdXNoKHByZXZpb3VzQ29udGV4dCk7fX1lbHNle25ld0FjdGl2ZUNvbnRleHRzLnB1c2gob2xkQ29udGV4dCk7fX0KLXRoaXMuYWN0aXZlQ29udGV4dHNfPW5ld0FjdGl2ZUNvbnRleHRzO3RoaXMuY2FjaGVkRW50cnlGb3JBY3RpdmVDb250ZXh0c189dW5kZWZpbmVkO30sZ2V0T3JDcmVhdGVDb250ZXh0Xyhjb250ZXh0VHlwZSxzY29wZWRJZCl7Y29uc3QgY29udGV4dD17dHlwZTpjb250ZXh0VHlwZSxzbmFwc2hvdDp7c2NvcGU6c2NvcGVkSWQuc2NvcGUsaWRSZWY6c2NvcGVkSWQuaWR9fTtjb25zdCBrZXk9dGhpcy5nZXRDb250ZXh0S2V5Xyhjb250ZXh0KTtpZihrZXkgaW4gdGhpcy5jb250ZXh0Q2FjaGVfKXtyZXR1cm4gdGhpcy5jb250ZXh0Q2FjaGVfW2tleV07fQotdGhpcy5jb250ZXh0Q2FjaGVfW2tleV09Y29udGV4dDtjb25zdCBzbmFwc2hvdEtleT10aGlzLmdldFNuYXBzaG90S2V5XyhzY29wZWRJZCk7dGhpcy5zZWVuU25hcHNob3RzX1tzbmFwc2hvdEtleV09dHJ1ZTtyZXR1cm4gY29udGV4dDt9LHB1c2hDb250ZXh0Xyhjb250ZXh0KXtpZighKGNvbnRleHQudHlwZSBpbiB0aGlzLnN0YWNrUGVyVHlwZV8pKXt0aGlzLnN0YWNrUGVyVHlwZV9bY29udGV4dC50eXBlXT1bXTt9Ci10aGlzLnN0YWNrUGVyVHlwZV9bY29udGV4dC50eXBlXS5wdXNoKGNvbnRleHQpO30scG9wQ29udGV4dF8oY29udGV4dFR5cGUpe2lmKCEoY29udGV4dFR5cGUgaW4gdGhpcy5zdGFja1BlclR5cGVfKSl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1yZXR1cm4gdGhpcy5zdGFja1BlclR5cGVfW2NvbnRleHRUeXBlXS5wb3AoKTt9LGdldENvbnRleHRLZXlfKGNvbnRleHQpe3JldHVybltjb250ZXh0LnR5cGUsY29udGV4dC5zbmFwc2hvdC5zY29wZSxjb250ZXh0LnNuYXBzaG90LmlkUmVmXS5qb2luKCdceDAwJyk7fSxnZXRTbmFwc2hvdEtleV8oc2NvcGVkSWQpe3JldHVybltzY29wZWRJZC5zY29wZSxzY29wZWRJZC5pZFJlZl0uam9pbignXHgwMCcpO30sZ2V0IGFjdGl2ZUNvbnRleHRzKCl7aWYodGhpcy5jYWNoZWRFbnRyeUZvckFjdGl2ZUNvbnRleHRzXz09PXVuZGVmaW5lZCl7bGV0IGtleT1bXTtmb3IoY29uc3QgY29udGV4dCBvZiB0aGlzLmFjdGl2ZUNvbnRleHRzXyl7a2V5LnB1c2godGhpcy5nZXRDb250ZXh0S2V5Xyhjb250ZXh0KSk7fQota2V5LnNvcnQoKTtrZXk9a2V5LmpvaW4oJ1x4MDAnKTtpZihrZXkgaW4gdGhpcy5jb250ZXh0U2V0Q2FjaGVfKXt0aGlzLmNhY2hlZEVudHJ5Rm9yQWN0aXZlQ29udGV4dHNfPXRoaXMuY29udGV4dFNldENhY2hlX1trZXldO31lbHNle3RoaXMuYWN0aXZlQ29udGV4dHNfLnNvcnQoZnVuY3Rpb24oYSxiKXtjb25zdCBrZXlBPXRoaXMuZ2V0Q29udGV4dEtleV8oYSk7Y29uc3Qga2V5Qj10aGlzLmdldENvbnRleHRLZXlfKGIpO2lmKGtleUE8a2V5Qil7cmV0dXJuLTE7fQotaWYoa2V5QT5rZXlCKXtyZXR1cm4gMTt9Ci1yZXR1cm4gMDt9LmJpbmQodGhpcykpO3RoaXMuY29udGV4dFNldENhY2hlX1trZXldPU9iamVjdC5mcmVlemUodGhpcy5hY3RpdmVDb250ZXh0c18pO3RoaXMuY2FjaGVkRW50cnlGb3JBY3RpdmVDb250ZXh0c189dGhpcy5jb250ZXh0U2V0Q2FjaGVfW2tleV07fX0KLXJldHVybiB0aGlzLmNhY2hlZEVudHJ5Rm9yQWN0aXZlQ29udGV4dHNfO30saW52YWxpZGF0ZUNvbnRleHRDYWNoZUZvclNuYXBzaG90KHNjb3BlZElkKXtjb25zdCBzbmFwc2hvdEtleT10aGlzLmdldFNuYXBzaG90S2V5XyhzY29wZWRJZCk7aWYoIShzbmFwc2hvdEtleSBpbiB0aGlzLnNlZW5TbmFwc2hvdHNfKSlyZXR1cm47dGhpcy5jb250ZXh0Q2FjaGVfPXt9O3RoaXMuY29udGV4dFNldENhY2hlXz17fTt0aGlzLmNhY2hlZEVudHJ5Rm9yQWN0aXZlQ29udGV4dHNfPXVuZGVmaW5lZDt0aGlzLmFjdGl2ZUNvbnRleHRzXz10aGlzLmFjdGl2ZUNvbnRleHRzXy5tYXAoZnVuY3Rpb24oY29udGV4dCl7aWYoY29udGV4dC5zbmFwc2hvdC5zY29wZSE9PXNjb3BlZElkLnNjb3BlfHxjb250ZXh0LnNuYXBzaG90LmlkUmVmIT09c2NvcGVkSWQuaWQpe3JldHVybiBjb250ZXh0O30KLXJldHVybnt0eXBlOmNvbnRleHQudHlwZSxzbmFwc2hvdDp7c2NvcGU6Y29udGV4dC5zbmFwc2hvdC5zY29wZSxpZFJlZjpjb250ZXh0LnNuYXBzaG90LmlkUmVmfX07fSk7dGhpcy5zZWVuU25hcHNob3RzXz17fTt9LH07cmV0dXJue0NvbnRleHRQcm9jZXNzb3IsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEFubm90YXRpb24oKXt0aGlzLmd1aWRfPXRyLmIuR1VJRC5hbGxvY2F0ZVNpbXBsZSgpO3RoaXMudmlld189dW5kZWZpbmVkO30KLUFubm90YXRpb24uZnJvbURpY3RJZlBvc3NpYmxlPWZ1bmN0aW9uKGFyZ3Mpe2lmKGFyZ3MudHlwZU5hbWU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTWlzc2luZyB0eXBlTmFtZSBhcmd1bWVudCcpO30KLWNvbnN0IHR5cGVJbmZvPUFubm90YXRpb24uZmluZFR5cGVJbmZvTWF0Y2hpbmcoZnVuY3Rpb24odHlwZUluZm8pe3JldHVybiB0eXBlSW5mby5tZXRhZGF0YS50eXBlTmFtZT09PWFyZ3MudHlwZU5hbWU7fSk7aWYodHlwZUluZm89PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdHlwZUluZm8uY29uc3RydWN0b3IuZnJvbURpY3QoYXJncyk7fTtBbm5vdGF0aW9uLmZyb21EaWN0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9O0Fubm90YXRpb24ucHJvdG90eXBlPXtnZXQgZ3VpZCgpe3JldHVybiB0aGlzLmd1aWRfO30sb25SZW1vdmUoKXt9LHRvRGljdCgpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxnZXRPckNyZWF0ZVZpZXcodmlld3BvcnQpe2lmKCF0aGlzLnZpZXdfKXt0aGlzLnZpZXdfPXRoaXMuY3JlYXRlVmlld18odmlld3BvcnQpO30KLXJldHVybiB0aGlzLnZpZXdfO30sY3JlYXRlVmlld18oKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO319O2NvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuQkFTSUNfUkVHSVNUUllfTU9ERSk7dHIuYi5kZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KEFubm90YXRpb24sb3B0aW9ucyk7QW5ub3RhdGlvbi5hZGRFdmVudExpc3RlbmVyKCd3aWxsLXJlZ2lzdGVyJyxmdW5jdGlvbihlKXtpZighZS50eXBlSW5mby5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgnZnJvbURpY3QnKSl7dGhyb3cgbmV3IEVycm9yKCdNdXN0IGhhdmUgZnJvbURpY3QgbWV0aG9kJyk7fQotaWYoIWUudHlwZUluZm8ubWV0YWRhdGEudHlwZU5hbWUpe3Rocm93IG5ldyBFcnJvcignUmVnaXN0ZXJlZCBBbm5vdGF0aW9ucyBtdXN0IHByb3ZpZGUgdHlwZU5hbWUnKTt9fSk7cmV0dXJue0Fubm90YXRpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFlDb21wb25lbnQoc3RhYmxlSWQseVBlcmNlbnRPZmZzZXQpe3RoaXMuc3RhYmxlSWQ9c3RhYmxlSWQ7dGhpcy55UGVyY2VudE9mZnNldD15UGVyY2VudE9mZnNldDt9Ci1ZQ29tcG9uZW50LnByb3RvdHlwZT17dG9EaWN0KCl7cmV0dXJue3N0YWJsZUlkOnRoaXMuc3RhYmxlSWQseVBlcmNlbnRPZmZzZXQ6dGhpcy55UGVyY2VudE9mZnNldH07fX07ZnVuY3Rpb24gTG9jYXRpb24oeFdvcmxkLHlDb21wb25lbnRzKXt0aGlzLnhXb3JsZF89eFdvcmxkO3RoaXMueUNvbXBvbmVudHNfPXlDb21wb25lbnRzO30KLUxvY2F0aW9uLmZyb21WaWV3Q29vcmRpbmF0ZXM9ZnVuY3Rpb24odmlld3BvcnQsdmlld1gsdmlld1kpe2NvbnN0IGR0PXZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IHhXb3JsZD1kdC54Vmlld1RvV29ybGQodmlld1gpO2NvbnN0IHlDb21wb25lbnRzPVtdO2xldCBlbGVtPWRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodmlld1grdmlld3BvcnQubW9kZWxUcmFja0NvbnRhaW5lci5jYW52YXMub2Zmc2V0TGVmdCx2aWV3WSt2aWV3cG9ydC5tb2RlbFRyYWNrQ29udGFpbmVyLmNhbnZhcy5vZmZzZXRUb3ApO3doaWxlKGVsZW0gaW5zdGFuY2VvZiB0ci51aS50cmFja3MuVHJhY2spe2lmKGVsZW0uZXZlbnRDb250YWluZXIpe2NvbnN0IGJvdW5kUmVjdD1lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IHlQZXJjZW50T2Zmc2V0PSh2aWV3WS1ib3VuZFJlY3QudG9wKS9ib3VuZFJlY3QuaGVpZ2h0O3lDb21wb25lbnRzLnB1c2gobmV3IFlDb21wb25lbnQoZWxlbS5ldmVudENvbnRhaW5lci5zdGFibGVJZCx5UGVyY2VudE9mZnNldCkpO30KLWVsZW09ZWxlbS5wYXJlbnRFbGVtZW50O30KLWlmKHlDb21wb25lbnRzLmxlbmd0aD09PTApcmV0dXJuO3JldHVybiBuZXcgTG9jYXRpb24oeFdvcmxkLHlDb21wb25lbnRzKTt9O0xvY2F0aW9uLmZyb21TdGFibGVJZEFuZFRpbWVzdGFtcD1mdW5jdGlvbih2aWV3cG9ydCxzdGFibGVJZCx0cyl7Y29uc3QgeFdvcmxkPXRzO2NvbnN0IHlDb21wb25lbnRzPVtdO2NvbnN0IGNvbnRhaW5lclRvVHJhY2s9dmlld3BvcnQuY29udGFpbmVyVG9UcmFja01hcDtsZXQgZWxlbT1jb250YWluZXJUb1RyYWNrLmdldFRyYWNrQnlTdGFibGVJZChzdGFibGVJZCk7aWYoIWVsZW0pcmV0dXJuO2NvbnN0IGZpcnN0WT1lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDt3aGlsZShlbGVtIGluc3RhbmNlb2YgdHIudWkudHJhY2tzLlRyYWNrKXtpZihlbGVtLmV2ZW50Q29udGFpbmVyKXtjb25zdCBib3VuZFJlY3Q9ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCB5UGVyY2VudE9mZnNldD0oZmlyc3RZLWJvdW5kUmVjdC50b3ApL2JvdW5kUmVjdC5oZWlnaHQ7eUNvbXBvbmVudHMucHVzaChuZXcgWUNvbXBvbmVudChlbGVtLmV2ZW50Q29udGFpbmVyLnN0YWJsZUlkLHlQZXJjZW50T2Zmc2V0KSk7fQotZWxlbT1lbGVtLnBhcmVudEVsZW1lbnQ7fQotaWYoeUNvbXBvbmVudHMubGVuZ3RoPT09MClyZXR1cm47cmV0dXJuIG5ldyBMb2NhdGlvbih4V29ybGQseUNvbXBvbmVudHMpO307TG9jYXRpb24ucHJvdG90eXBlPXtnZXQgeFdvcmxkKCl7cmV0dXJuIHRoaXMueFdvcmxkXzt9LGdldENvbnRhaW5pbmdUcmFjayh2aWV3cG9ydCl7Y29uc3QgY29udGFpbmVyVG9UcmFjaz12aWV3cG9ydC5jb250YWluZXJUb1RyYWNrTWFwO2Zvcihjb25zdCBpIGluIHRoaXMueUNvbXBvbmVudHNfKXtjb25zdCB5Q29tcG9uZW50PXRoaXMueUNvbXBvbmVudHNfW2ldO2NvbnN0IHRyYWNrPWNvbnRhaW5lclRvVHJhY2suZ2V0VHJhY2tCeVN0YWJsZUlkKHlDb21wb25lbnQuc3RhYmxlSWQpO2lmKHRyYWNrIT09dW5kZWZpbmVkKXJldHVybiB0cmFjazt9fSx0b1ZpZXdDb29yZGluYXRlcyh2aWV3cG9ydCl7Y29uc3QgZHQ9dmlld3BvcnQuY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3QgY29udGFpbmVyVG9UcmFjaz12aWV3cG9ydC5jb250YWluZXJUb1RyYWNrTWFwO2NvbnN0IHZpZXdYPWR0LnhXb3JsZFRvVmlldyh0aGlzLnhXb3JsZF8pO2xldCB2aWV3WT0tMTtmb3IoY29uc3QgaW5kZXggaW4gdGhpcy55Q29tcG9uZW50c18pe2NvbnN0IHlDb21wb25lbnQ9dGhpcy55Q29tcG9uZW50c19baW5kZXhdO2NvbnN0IHRyYWNrPWNvbnRhaW5lclRvVHJhY2suZ2V0VHJhY2tCeVN0YWJsZUlkKHlDb21wb25lbnQuc3RhYmxlSWQpO2lmKHRyYWNrIT09dW5kZWZpbmVkKXtjb25zdCBib3VuZFJlY3Q9dHJhY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmlld1k9eUNvbXBvbmVudC55UGVyY2VudE9mZnNldCpib3VuZFJlY3QuaGVpZ2h0K2JvdW5kUmVjdC50b3A7YnJlYWs7fX0KLXJldHVybnt2aWV3WCx2aWV3WX07fSx0b0RpY3QoKXtyZXR1cm57eFdvcmxkOnRoaXMueFdvcmxkXyx5Q29tcG9uZW50czp0aGlzLnlDb21wb25lbnRzX307fX07cmV0dXJue0xvY2F0aW9uLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5hbm5vdGF0aW9ucycsZnVuY3Rpb24oKXtmdW5jdGlvbiBBbm5vdGF0aW9uVmlldyh2aWV3cG9ydCxhbm5vdGF0aW9uKXt9Ci1Bbm5vdGF0aW9uVmlldy5wcm90b3R5cGU9e2RyYXcoY3R4KXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO319O3JldHVybntBbm5vdGF0aW9uVmlldyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5ub3RhdGlvbnMnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUmVjdEFubm90YXRpb25WaWV3KHZpZXdwb3J0LGFubm90YXRpb24pe3RoaXMudmlld3BvcnRfPXZpZXdwb3J0O3RoaXMuYW5ub3RhdGlvbl89YW5ub3RhdGlvbjt9Ci1SZWN0QW5ub3RhdGlvblZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5ub3RhdGlvbnMuQW5ub3RhdGlvblZpZXcucHJvdG90eXBlLGRyYXcoY3R4KXtjb25zdCBkdD10aGlzLnZpZXdwb3J0Xy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCBzdGFydENvb3Jkcz10aGlzLmFubm90YXRpb25fLnN0YXJ0TG9jYXRpb24udG9WaWV3Q29vcmRpbmF0ZXModGhpcy52aWV3cG9ydF8pO2NvbnN0IGVuZENvb3Jkcz10aGlzLmFubm90YXRpb25fLmVuZExvY2F0aW9uLnRvVmlld0Nvb3JkaW5hdGVzKHRoaXMudmlld3BvcnRfKTtsZXQgc3RhcnRZPXN0YXJ0Q29vcmRzLnZpZXdZLWN0eC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO2NvbnN0IHNpemVZPWVuZENvb3Jkcy52aWV3WS1zdGFydENvb3Jkcy52aWV3WTtpZihzdGFydFkrc2l6ZVk8MCl7c3RhcnRZPXNpemVZO31lbHNlIGlmKHN0YXJ0WTwwKXtzdGFydFk9MDt9Ci1jdHguZmlsbFN0eWxlPXRoaXMuYW5ub3RhdGlvbl8uZmlsbFN0eWxlO2N0eC5maWxsUmVjdChzdGFydENvb3Jkcy52aWV3WCxzdGFydFksZW5kQ29vcmRzLnZpZXdYLXN0YXJ0Q29vcmRzLnZpZXdYLHNpemVZKTt9fTtyZXR1cm57UmVjdEFubm90YXRpb25WaWV3LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBSZWN0QW5ub3RhdGlvbihzdGFydCxlbmQpe3RyLm1vZGVsLkFubm90YXRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuc3RhcnRMb2NhdGlvbl89c3RhcnQ7dGhpcy5lbmRMb2NhdGlvbl89ZW5kO3RoaXMuZmlsbFN0eWxlPSdyZ2JhKDI1NSwgMTgwLCAwLCAwLjMpJzt9Ci1SZWN0QW5ub3RhdGlvbi5mcm9tRGljdD1mdW5jdGlvbihkaWN0KXtjb25zdCBhcmdzPWRpY3QuYXJncztjb25zdCBzdGFydExvYz1uZXcgdHIubW9kZWwuTG9jYXRpb24oYXJncy5zdGFydC54V29ybGQsYXJncy5zdGFydC55Q29tcG9uZW50cyk7Y29uc3QgZW5kTG9jPW5ldyB0ci5tb2RlbC5Mb2NhdGlvbihhcmdzLmVuZC54V29ybGQsYXJncy5lbmQueUNvbXBvbmVudHMpO3JldHVybiBuZXcgdHIubW9kZWwuUmVjdEFubm90YXRpb24oc3RhcnRMb2MsZW5kTG9jKTt9O1JlY3RBbm5vdGF0aW9uLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLkFubm90YXRpb24ucHJvdG90eXBlLGdldCBzdGFydExvY2F0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRMb2NhdGlvbl87fSxnZXQgZW5kTG9jYXRpb24oKXtyZXR1cm4gdGhpcy5lbmRMb2NhdGlvbl87fSx0b0RpY3QoKXtyZXR1cm57dHlwZU5hbWU6J3JlY3QnLGFyZ3M6e3N0YXJ0OnRoaXMuc3RhcnRMb2NhdGlvbi50b0RpY3QoKSxlbmQ6dGhpcy5lbmRMb2NhdGlvbi50b0RpY3QoKX19O30sY3JlYXRlVmlld18odmlld3BvcnQpe3JldHVybiBuZXcgdHIudWkuYW5ub3RhdGlvbnMuUmVjdEFubm90YXRpb25WaWV3KHZpZXdwb3J0LHRoaXMpO319O3RyLm1vZGVsLkFubm90YXRpb24ucmVnaXN0ZXIoUmVjdEFubm90YXRpb24se3R5cGVOYW1lOidyZWN0J30pO3JldHVybntSZWN0QW5ub3RhdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5ub3RhdGlvbnMnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQ29tbWVudEJveEFubm90YXRpb25WaWV3KHZpZXdwb3J0LGFubm90YXRpb24pe3RoaXMudmlld3BvcnRfPXZpZXdwb3J0O3RoaXMuYW5ub3RhdGlvbl89YW5ub3RhdGlvbjt0aGlzLnRleHRBcmVhXz11bmRlZmluZWQ7dGhpcy5zdHlsZVdpZHRoPTI1MDt0aGlzLnN0eWxlSGVpZ2h0PTUwO3RoaXMuZm9udFNpemU9MTA7dGhpcy5yaWdodE9mZnNldD01MDt0aGlzLnRvcE9mZnNldD0yNTt9Ci1Db21tZW50Qm94QW5ub3RhdGlvblZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5ub3RhdGlvbnMuQW5ub3RhdGlvblZpZXcucHJvdG90eXBlLHJlbW92ZVRleHRBcmVhKCl7UG9seW1lci5kb20oUG9seW1lci5kb20odGhpcy50ZXh0QXJlYV8pLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKHRoaXMudGV4dEFyZWFfKTt9LGRyYXcoY3R4KXtjb25zdCBjb29yZHM9dGhpcy5hbm5vdGF0aW9uXy5sb2NhdGlvbi50b1ZpZXdDb29yZGluYXRlcyh0aGlzLnZpZXdwb3J0Xyk7aWYoY29vcmRzLnZpZXdYPDApe2lmKHRoaXMudGV4dEFyZWFfKXt0aGlzLnRleHRBcmVhXy5zdHlsZS52aXNpYmlsaXR5PSdoaWRkZW4nO30KLXJldHVybjt9Ci1pZighdGhpcy50ZXh0QXJlYV8pe3RoaXMudGV4dEFyZWFfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7dGhpcy50ZXh0QXJlYV8uc3R5bGUucG9zaXRpb249J2Fic29sdXRlJzt0aGlzLnRleHRBcmVhXy5yZWFkT25seT10cnVlO3RoaXMudGV4dEFyZWFfLnZhbHVlPXRoaXMuYW5ub3RhdGlvbl8udGV4dDt0aGlzLnRleHRBcmVhXy5zdHlsZS56SW5kZXg9MTtQb2x5bWVyLmRvbShQb2x5bWVyLmRvbShjdHguY2FudmFzKS5wYXJlbnROb2RlKS5hcHBlbmRDaGlsZCh0aGlzLnRleHRBcmVhXyk7fQotdGhpcy50ZXh0QXJlYV8uc3R5bGUud2lkdGg9dGhpcy5zdHlsZVdpZHRoKydweCc7dGhpcy50ZXh0QXJlYV8uc3R5bGUuaGVpZ2h0PXRoaXMuc3R5bGVIZWlnaHQrJ3B4Jzt0aGlzLnRleHRBcmVhXy5zdHlsZS5mb250U2l6ZT10aGlzLmZvbnRTaXplKydweCc7dGhpcy50ZXh0QXJlYV8uc3R5bGUudmlzaWJpbGl0eT0ndmlzaWJsZSc7dGhpcy50ZXh0QXJlYV8uc3R5bGUubGVmdD1jb29yZHMudmlld1grY3R4LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0KwotdGhpcy5yaWdodE9mZnNldCsncHgnO3RoaXMudGV4dEFyZWFfLnN0eWxlLnRvcD1jb29yZHMudmlld1ktY3R4LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtCi10aGlzLnRvcE9mZnNldCsncHgnO2N0eC5zdHJva2VTdHlsZT0ncmdiKDAsIDAsIDApJztjdHgubGluZVdpZHRoPTI7Y3R4LmJlZ2luUGF0aCgpO3RyLnVpLmIuZHJhd0xpbmUoY3R4LGNvb3Jkcy52aWV3WCxjb29yZHMudmlld1ktY3R4LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsY29vcmRzLnZpZXdYK3RoaXMucmlnaHRPZmZzZXQsY29vcmRzLnZpZXdZLXRoaXMudG9wT2Zmc2V0LQotY3R4LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApO2N0eC5zdHJva2UoKTt9fTtyZXR1cm57Q29tbWVudEJveEFubm90YXRpb25WaWV3LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBDb21tZW50Qm94QW5ub3RhdGlvbihsb2NhdGlvbix0ZXh0KXt0ci5tb2RlbC5Bbm5vdGF0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmxvY2F0aW9uPWxvY2F0aW9uO3RoaXMudGV4dD10ZXh0O30KLUNvbW1lbnRCb3hBbm5vdGF0aW9uLmZyb21EaWN0PWZ1bmN0aW9uKGRpY3Qpe2NvbnN0IGFyZ3M9ZGljdC5hcmdzO2NvbnN0IGxvY2F0aW9uPW5ldyB0ci5tb2RlbC5Mb2NhdGlvbihhcmdzLmxvY2F0aW9uLnhXb3JsZCxhcmdzLmxvY2F0aW9uLnlDb21wb25lbnRzKTtyZXR1cm4gbmV3IHRyLm1vZGVsLkNvbW1lbnRCb3hBbm5vdGF0aW9uKGxvY2F0aW9uLGFyZ3MudGV4dCk7fTtDb21tZW50Qm94QW5ub3RhdGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5Bbm5vdGF0aW9uLnByb3RvdHlwZSxvblJlbW92ZSgpe3RoaXMudmlld18ucmVtb3ZlVGV4dEFyZWEoKTt9LHRvRGljdCgpe3JldHVybnt0eXBlTmFtZTonY29tbWVudF9ib3gnLGFyZ3M6e3RleHQ6dGhpcy50ZXh0LGxvY2F0aW9uOnRoaXMubG9jYXRpb24udG9EaWN0KCl9fTt9LGNyZWF0ZVZpZXdfKHZpZXdwb3J0KXtyZXR1cm4gbmV3IHRyLnVpLmFubm90YXRpb25zLkNvbW1lbnRCb3hBbm5vdGF0aW9uVmlldyh2aWV3cG9ydCx0aGlzKTt9fTt0ci5tb2RlbC5Bbm5vdGF0aW9uLnJlZ2lzdGVyKENvbW1lbnRCb3hBbm5vdGF0aW9uLHt0eXBlTmFtZTonY29tbWVudF9ib3gnfSk7cmV0dXJue0NvbW1lbnRCb3hBbm5vdGF0aW9uLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBTY29wZWRJZChzY29wZSxpZCxwaWQpe2lmKHNjb3BlPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1Njb3BlIHNob3VsZCBiZSBkZWZpbmVkLiBVc2UgXCcnKwotdHIubW9kZWwuT0JKRUNUX0RFRkFVTFRfU0NPUEUrJ1wnIGFzIHRoZSBkZWZhdWx0IHNjb3BlLicpO30KLXRoaXMuc2NvcGU9c2NvcGU7dGhpcy5pZD1pZDt0aGlzLnBpZD1waWQ7fQotU2NvcGVkSWQucHJvdG90eXBlPXt0b1N0cmluZygpe2NvbnN0IHBpZFN0cj10aGlzLnBpZD09PXVuZGVmaW5lZD8nJzoncGlkOiAnK3RoaXMucGlkKycsICc7cmV0dXJuJ3snK3BpZFN0cisnc2NvcGU6ICcrdGhpcy5zY29wZSsnLCBpZDogJyt0aGlzLmlkKyd9Jzt9LHRvU3RyaW5nV2l0aERlbGltaXRlcihkZWxpbSl7cmV0dXJuKHRoaXMucGlkPT09dW5kZWZpbmVkPycnOnRoaXMucGlkKStkZWxpbSsKLXRoaXMuc2NvcGUrZGVsaW0rdGhpcy5pZDt9fTtyZXR1cm57U2NvcGVkSWQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFubm90YXRpb25zJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFhNYXJrZXJBbm5vdGF0aW9uVmlldyh2aWV3cG9ydCxhbm5vdGF0aW9uKXt0aGlzLnZpZXdwb3J0Xz12aWV3cG9ydDt0aGlzLmFubm90YXRpb25fPWFubm90YXRpb247fQotWE1hcmtlckFubm90YXRpb25WaWV3LnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmFubm90YXRpb25zLkFubm90YXRpb25WaWV3LnByb3RvdHlwZSxkcmF3KGN0eCl7Y29uc3QgZHQ9dGhpcy52aWV3cG9ydF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3Qgdmlld1g9ZHQueFdvcmxkVG9WaWV3KHRoaXMuYW5ub3RhdGlvbl8udGltZXN0YW1wKTtjdHguYmVnaW5QYXRoKCk7dHIudWkuYi5kcmF3TGluZShjdHgsdmlld1gsMCx2aWV3WCxjdHguY2FudmFzLmhlaWdodCk7Y3R4LnN0cm9rZVN0eWxlPXRoaXMuYW5ub3RhdGlvbl8uc3Ryb2tlU3R5bGU7Y3R4LnN0cm9rZSgpO319O3JldHVybntYTWFya2VyQW5ub3RhdGlvblZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFhNYXJrZXJBbm5vdGF0aW9uKHRpbWVzdGFtcCl7dHIubW9kZWwuQW5ub3RhdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50aW1lc3RhbXA9dGltZXN0YW1wO3RoaXMuc3Ryb2tlU3R5bGU9J3JnYmEoMCwgMCwgMjU1LCAwLjUpJzt9Ci1YTWFya2VyQW5ub3RhdGlvbi5mcm9tRGljdD1mdW5jdGlvbihkaWN0KXtyZXR1cm4gbmV3IFhNYXJrZXJBbm5vdGF0aW9uKGRpY3QuYXJncy50aW1lc3RhbXApO307WE1hcmtlckFubm90YXRpb24ucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuQW5ub3RhdGlvbi5wcm90b3R5cGUsdG9EaWN0KCl7cmV0dXJue3R5cGVOYW1lOid4bWFya2VyJyxhcmdzOnt0aW1lc3RhbXA6dGhpcy50aW1lc3RhbXB9fTt9LGNyZWF0ZVZpZXdfKHZpZXdwb3J0KXtyZXR1cm4gbmV3IHRyLnVpLmFubm90YXRpb25zLlhNYXJrZXJBbm5vdGF0aW9uVmlldyh2aWV3cG9ydCx0aGlzKTt9fTt0ci5tb2RlbC5Bbm5vdGF0aW9uLnJlZ2lzdGVyKFhNYXJrZXJBbm5vdGF0aW9uLHt0eXBlTmFtZToneG1hcmtlcid9KTtyZXR1cm57WE1hcmtlckFubm90YXRpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7Y29uc3QgQmFzZTY0PXRyLmIuQmFzZTY0O2NvbnN0IGRlZXBDb3B5PXRyLmIuZGVlcENvcHk7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBIZWFwRHVtcFRyYWNlRXZlbnRJbXBvcnRlcj10ci5lLmltcG9ydGVyLkhlYXBEdW1wVHJhY2VFdmVudEltcG9ydGVyO2NvbnN0IExlZ2FjeUhlYXBEdW1wVHJhY2VFdmVudEltcG9ydGVyPXRyLmUuaW1wb3J0ZXIuTGVnYWN5SGVhcER1bXBUcmFjZUV2ZW50SW1wb3J0ZXI7Y29uc3QgU3RyZWFtaW5nRXZlbnRFeHBhbmRlcj10ci5lLmltcG9ydGVyLlN0cmVhbWluZ0V2ZW50RXhwYW5kZXI7Y29uc3QgUHJvZmlsaW5nRGljdGlvbmFyeVJlYWRlcj10ci5lLmltcG9ydGVyLlByb2ZpbGluZ0RpY3Rpb25hcnlSZWFkZXI7ZnVuY3Rpb24gZ2V0RXZlbnRDb2xvcihldmVudCxvcHRfY3VzdG9tTmFtZSl7aWYoZXZlbnQuY25hbWUpe3JldHVybiBDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lKGV2ZW50LmNuYW1lKTt9ZWxzZSBpZihvcHRfY3VzdG9tTmFtZXx8ZXZlbnQubmFtZSl7cmV0dXJuIENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhvcHRfY3VzdG9tTmFtZXx8ZXZlbnQubmFtZSk7fX0KLWZ1bmN0aW9uIGlzTGVnYWN5Q2hyb21lQ2xvY2tTeW5jRXZlbnQoZXZlbnQpe3JldHVybiBldmVudC5uYW1lIT09dW5kZWZpbmVkJiZldmVudC5uYW1lLnN0YXJ0c1dpdGgoTEVHQUNZX0NIUk9NRV9DTE9DS19TWU5DX0VWRU5UX05BTUVfUFJFRklYKSYmKChldmVudC5waD09PSdTJyl8fChldmVudC5waD09PSdGJykpO30KLWNvbnN0IFBST0RVQ0VSPSdwcm9kdWNlcic7Y29uc3QgQ09OU1VNRVI9J2NvbnN1bWVyJztjb25zdCBTVEVQPSdzdGVwJztjb25zdCBCQUNLR1JPVU5EPXRyLm1vZGVsLkNvbnRhaW5lck1lbW9yeUR1bXAuTGV2ZWxPZkRldGFpbC5CQUNLR1JPVU5EO2NvbnN0IExJR0hUPXRyLm1vZGVsLkNvbnRhaW5lck1lbW9yeUR1bXAuTGV2ZWxPZkRldGFpbC5MSUdIVDtjb25zdCBERVRBSUxFRD10ci5tb2RlbC5Db250YWluZXJNZW1vcnlEdW1wLkxldmVsT2ZEZXRhaWwuREVUQUlMRUQ7Y29uc3QgTUVNT1JZX0RVTVBfTEVWRUxfT0ZfREVUQUlMX09SREVSPVt1bmRlZmluZWQsQkFDS0dST1VORCxMSUdIVCxERVRBSUxFRF07Y29uc3QgR0xPQkFMX01FTU9SWV9BTExPQ0FUT1JfRFVNUF9QUkVGSVg9J2dsb2JhbC8nO2NvbnN0IExFR0FDWV9DSFJPTUVfQ0xPQ0tfU1lOQ19FVkVOVF9OQU1FX1BSRUZJWD0nQ2xvY2tTeW5jRXZlbnQuJztjb25zdCBCWVRFX1NUQVRfTkFNRV9NQVA9eydwYyc6J3ByaXZhdGVDbGVhblJlc2lkZW50JywncGQnOidwcml2YXRlRGlydHlSZXNpZGVudCcsJ3NjJzonc2hhcmVkQ2xlYW5SZXNpZGVudCcsJ3NkJzonc2hhcmVkRGlydHlSZXNpZGVudCcsJ3Bzcyc6J3Byb3BvcnRpb25hbFJlc2lkZW50Jywnc3cnOidzd2FwcGVkJ307Y29uc3QgV0VBS19NRU1PUllfQUxMT0NBVE9SX0RVTVBfRkxBRz0xPDwwO2NvbnN0IE9CSkVDVF9UWVBFX05BTUVfUEFUVEVSTlM9W3twcmVmaXg6J2NvbnN0IGNoYXIgKldURjo6Z2V0U3RyaW5nV2l0aFR5cGVOYW1lKCkgW1QgPSAnLHN1ZmZpeDonXSd9LHtwcmVmaXg6J2NvbnN0IGNoYXIqIFdURjo6Z2V0U3RyaW5nV2l0aFR5cGVOYW1lKCkgW3dpdGggVCA9ICcsc3VmZml4OiddJ30se3ByZWZpeDonY29uc3QgY2hhciAqX19jZGVjbCBXVEY6OmdldFN0cmluZ1dpdGhUeXBlTmFtZTwnLHN1ZmZpeDonPih2b2lkKSd9XTtjb25zdCBTVUJUUkFDRV9GSUVMRFM9bmV3IFNldChbJ3Bvd2VyVHJhY2VBc1N0cmluZycsJ3N5c3RlbVRyYWNlRXZlbnRzJyxdKTtjb25zdCBOT05fTUVUQURBVEFfRklFTERTPW5ldyBTZXQoWydkaXNwbGF5VGltZVVuaXQnLCdzYW1wbGVzJywnc3RhY2tGcmFtZXMnLCd0cmFjZUFubm90YXRpb25zJywndHJhY2VFdmVudHMnLC4uLlNVQlRSQUNFX0ZJRUxEU10pO2Z1bmN0aW9uIFRyYWNlRXZlbnRJbXBvcnRlcihtb2RlbCxldmVudERhdGEpe3RoaXMuaGFzRXZlbnRzXz11bmRlZmluZWQ7dGhpcy5pbXBvcnRQcmlvcml0eT0xO3RoaXMubW9kZWxfPW1vZGVsO3RoaXMuZXZlbnRzXz11bmRlZmluZWQ7dGhpcy5zYW1wbGVFdmVudHNfPXVuZGVmaW5lZDt0aGlzLnN0YWNrRnJhbWVFdmVudHNfPXVuZGVmaW5lZDt0aGlzLnN0YWNrRnJhbWVUcmVlXz1uZXcgdHIubW9kZWwuUHJvZmlsZVRyZWUoKTt0aGlzLnN1YnRyYWNlc189W107dGhpcy5ldmVudHNXZXJlRnJvbVN0cmluZ189ZmFsc2U7dGhpcy5zb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnRfPXVuZGVmaW5lZDt0aGlzLmFsbEFzeW5jRXZlbnRzXz1bXTt0aGlzLmFsbEZsb3dFdmVudHNfPVtdO3RoaXMuYWxsT2JqZWN0RXZlbnRzXz1bXTt0aGlzLmNvbnRleHRQcm9jZXNzb3JQZXJUaHJlYWQ9e307dGhpcy50cmFjZUV2ZW50U2FtcGxlU3RhY2tGcmFtZXNCeU5hbWVfPXt9O3RoaXMudjhQcm9jZXNzQ29kZU1hcHNfPXt9O3RoaXMudjhQcm9jZXNzUm9vdFN0YWNrRnJhbWVfPXt9O3RoaXMudjhTYW1wbGluZ0RhdGFfPVtdO3RoaXMucHJvZmlsZVRyZWVzXz1uZXcgTWFwKCk7dGhpcy5wcm9maWxlSW5mb189bmV3IE1hcCgpO3RoaXMubGVnYWN5Q2hyb21lQ2xvY2tTeW5jU3RhcnRFdmVudF89dW5kZWZpbmVkO3RoaXMubGVnYWN5Q2hyb21lQ2xvY2tTeW5jRmluaXNoRXZlbnRfPXVuZGVmaW5lZDt0aGlzLmFsbE1lbW9yeUR1bXBFdmVudHNfPXt9O3RoaXMuaGVhcFByb2ZpbGVFeHBhbmRlcj1uZXcgUHJvZmlsaW5nRGljdGlvbmFyeVJlYWRlcigpO3RoaXMub2JqZWN0VHlwZU5hbWVNYXBfPXt9O3RoaXMuY2xvY2tEb21haW5JZF89dHIubW9kZWwuQ2xvY2tEb21haW5JZC5VTktOT1dOX0NIUk9NRV9MRUdBQ1k7dGhpcy50b01vZGVsVGltZV89dW5kZWZpbmVkO2lmKHR5cGVvZihldmVudERhdGEpPT09J3N0cmluZyd8fGV2ZW50RGF0YSBpbnN0YW5jZW9mIFN0cmluZyl7ZXZlbnREYXRhPWV2ZW50RGF0YS50cmltKCk7aWYoZXZlbnREYXRhWzBdPT09J1snKXtldmVudERhdGE9ZXZlbnREYXRhLnJlcGxhY2UoL1xzKixccyokLywnJyk7aWYoZXZlbnREYXRhW2V2ZW50RGF0YS5sZW5ndGgtMV0hPT0nXScpe2V2ZW50RGF0YT1ldmVudERhdGErJ10nO319Ci10aGlzLmV2ZW50c189SlNPTi5wYXJzZShldmVudERhdGEpO3RoaXMuZXZlbnRzV2VyZUZyb21TdHJpbmdfPXRydWU7fWVsc2V7dGhpcy5ldmVudHNfPWV2ZW50RGF0YTt9Ci1pZih0aGlzLmV2ZW50c18udHJhY2VFdmVudHMpe2NvbnN0IGNvbnRhaW5lcj10aGlzLmV2ZW50c187dGhpcy5ldmVudHNfPXRoaXMuZXZlbnRzXy50cmFjZUV2ZW50cztmb3IoY29uc3Qgc3VidHJhY2VGaWVsZCBvZiBTVUJUUkFDRV9GSUVMRFMpe2lmKGNvbnRhaW5lcltzdWJ0cmFjZUZpZWxkXSl7dGhpcy5zdG9yZVN1YnRyYWNlXyhjb250YWluZXJbc3VidHJhY2VGaWVsZF0pO319Ci10aGlzLnN0b3JlU2FtcGxlc18oY29udGFpbmVyLnNhbXBsZXMpO3RoaXMuc3RvcmVTdGFja0ZyYW1lc18oY29udGFpbmVyLnN0YWNrRnJhbWVzKTt0aGlzLnN0b3JlRGlzcGxheVRpbWVVbml0Xyhjb250YWluZXIuZGlzcGxheVRpbWVVbml0KTt0aGlzLnN0b3JlVHJhY2VBbm5vdGF0aW9uc18oY29udGFpbmVyLnRyYWNlQW5ub3RhdGlvbnMpO3RoaXMuc3RvcmVNZXRhZGF0YV8oY29udGFpbmVyKTt9ZWxzZSBpZih0aGlzLmV2ZW50c18gaW5zdGFuY2VvZiB0ci5iLlRyYWNlU3RyZWFtKXtjb25zdCBwYXJzZXI9b2JvZSgpLm5vZGUoJ3tjYXQgcGh9JyxmdW5jdGlvbihlKXtyZXR1cm4gb2JvZS5kcm9wO30pLm5vZGUoJyEucG93ZXJUcmFjZUFzU3RyaW5nJyx0aGlzLnN0b3JlU3VidHJhY2VfLmJpbmQodGhpcykpLm5vZGUoJyEuc3lzdGVtVHJhY2VFdmVudHMnLHRoaXMuc3RvcmVTdWJ0cmFjZV8uYmluZCh0aGlzKSkubm9kZSgnIS5zYW1wbGVzJyx0aGlzLnN0b3JlU2FtcGxlc18uYmluZCh0aGlzKSkubm9kZSgnIS5zdGFja0ZyYW1lcycsdGhpcy5zdG9yZVN0YWNrRnJhbWVzXy5iaW5kKHRoaXMpKS5ub2RlKCchLmRpc3BsYXlUaW1lVW5pdCcsdGhpcy5zdG9yZURpc3BsYXlUaW1lVW5pdF8uYmluZCh0aGlzKSkubm9kZSgnIS50cmFjZUFubm90YXRpb25zJyx0aGlzLnN0b3JlVHJhY2VBbm5vdGF0aW9uc18uYmluZCh0aGlzKSkuZG9uZSh0aGlzLnN0b3JlTWV0YWRhdGFfLmJpbmQodGhpcykpO3RoaXMuZXZlbnRzXy5yZXdpbmQoKTt3aGlsZSh0aGlzLmV2ZW50c18uaGFzRGF0YSl7cGFyc2VyLndyaXRlKHRoaXMuZXZlbnRzXy5yZWFkTnVtQnl0ZXMoKSk7fQotcGFyc2VyLmZpbmlzaCgpO319Ci1UcmFjZUV2ZW50SW1wb3J0ZXIuY2FuSW1wb3J0PWZ1bmN0aW9uKGV2ZW50RGF0YSl7aWYoZXZlbnREYXRhIGluc3RhbmNlb2YgdHIuYi5UcmFjZVN0cmVhbSl7aWYoZXZlbnREYXRhLmlzQmluYXJ5KXJldHVybiBmYWxzZTtldmVudERhdGE9ZXZlbnREYXRhLmhlYWRlcjt9Ci1pZih0eXBlb2YoZXZlbnREYXRhKT09PSdzdHJpbmcnfHxldmVudERhdGEgaW5zdGFuY2VvZiBTdHJpbmcpe2V2ZW50RGF0YT1ldmVudERhdGEudHJpbSgpO3JldHVybiBldmVudERhdGFbMF09PT0neyd8fGV2ZW50RGF0YVswXT09PSdbJzt9Ci1pZihldmVudERhdGEgaW5zdGFuY2VvZiBBcnJheSYmZXZlbnREYXRhLmxlbmd0aCYmZXZlbnREYXRhWzBdLnBoKXtyZXR1cm4gdHJ1ZTt9Ci1pZihldmVudERhdGEudHJhY2VFdmVudHMpe2lmKGV2ZW50RGF0YS50cmFjZUV2ZW50cyBpbnN0YW5jZW9mIEFycmF5KXtpZihldmVudERhdGEudHJhY2VFdmVudHMubGVuZ3RoJiZldmVudERhdGEudHJhY2VFdmVudHNbMF0ucGgpe3JldHVybiB0cnVlO30KLWlmKGV2ZW50RGF0YS5zYW1wbGVzJiZldmVudERhdGEuc2FtcGxlcy5sZW5ndGgmJmV2ZW50RGF0YS5zdGFja0ZyYW1lcyE9PXVuZGVmaW5lZCl7cmV0dXJuIHRydWU7fX19Ci1yZXR1cm4gZmFsc2U7fTtUcmFjZUV2ZW50SW1wb3J0ZXIuc2NvcGVkSWRGb3JFdmVudF89ZnVuY3Rpb24oZXZlbnQpe2NvbnN0IHNjb3BlPWV2ZW50LnNjb3BlfHx0ci5tb2RlbC5PQkpFQ1RfREVGQVVMVF9TQ09QRTtsZXQgcGlkPXVuZGVmaW5lZDtpZihldmVudC5pZCE9PXVuZGVmaW5lZCl7aWYoZXZlbnQuaWQyIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0V2ZW50IGhhcyBib3RoIGlkIGFuZCBpZDInKTt9Ci1waWQ9dHIubW9kZWwuTE9DQUxfSURfUEhBU0VTLmhhcyhldmVudC5waCk/ZXZlbnQucGlkOnVuZGVmaW5lZDtyZXR1cm4gbmV3IHRyLm1vZGVsLlNjb3BlZElkKHNjb3BlLGV2ZW50LmlkLHBpZCk7fWVsc2UgaWYoZXZlbnQuaWQyIT09dW5kZWZpbmVkKXtpZihldmVudC5pZDIuZ2xvYmFsIT09dW5kZWZpbmVkKXtyZXR1cm4gbmV3IHRyLm1vZGVsLlNjb3BlZElkKHNjb3BlLGV2ZW50LmlkMi5nbG9iYWwpO31lbHNlIGlmKGV2ZW50LmlkMi5sb2NhbCE9PXVuZGVmaW5lZCl7cmV0dXJuIG5ldyB0ci5tb2RlbC5TY29wZWRJZChzY29wZSxldmVudC5pZDIubG9jYWwsZXZlbnQucGlkKTt9Ci10aHJvdyBuZXcgRXJyb3IoJ0V2ZW50IHRoYXQgdXNlcyBpZDIgbXVzdCBoYXZlIGVpdGhlciBhIGdsb2JhbCBvciBsb2NhbCBJRCcpO30KLXJldHVybiB1bmRlZmluZWQ7fTtUcmFjZUV2ZW50SW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucHJvdG90eXBlLGdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nVHJhY2VFdmVudEltcG9ydGVyJzt9LGV4dHJhY3RTdWJ0cmFjZXMoKXtjb25zdCBzdWJ0cmFjZXM9dGhpcy5zdWJ0cmFjZXNfO3RoaXMuc3VidHJhY2VzXz1bXTtyZXR1cm4gc3VidHJhY2VzO30sZGVlcENvcHlJZk5lZWRlZF8ob2JqKXtpZihvYmo9PT11bmRlZmluZWQpb2JqPXt9O2lmKHRoaXMuZXZlbnRzV2VyZUZyb21TdHJpbmdfKXJldHVybiBvYmo7cmV0dXJuIGRlZXBDb3B5KG9iaik7fSxkZWVwQ29weUFsd2F5c18ob2JqKXtpZihvYmo9PT11bmRlZmluZWQpb2JqPXt9O3JldHVybiBkZWVwQ29weShvYmopO30scHJvY2Vzc0FzeW5jRXZlbnQoZXZlbnQpe2NvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKS5nZXRPckNyZWF0ZVRocmVhZChldmVudC50aWQpO3RoaXMuYWxsQXN5bmNFdmVudHNfLnB1c2goe3NlcXVlbmNlTnVtYmVyOnRoaXMuYWxsQXN5bmNFdmVudHNfLmxlbmd0aCxldmVudCx0aHJlYWR9KTt9LHByb2Nlc3NGbG93RXZlbnQoZXZlbnQsb3B0X3NsaWNlKXtjb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKGV2ZW50LnBpZCkuZ2V0T3JDcmVhdGVUaHJlYWQoZXZlbnQudGlkKTt0aGlzLmFsbEZsb3dFdmVudHNfLnB1c2goe3JlZkd1aWQ6dHIuYi5HVUlELmdldExhc3RTaW1wbGVHdWlkKCksc2VxdWVuY2VOdW1iZXI6dGhpcy5hbGxGbG93RXZlbnRzXy5sZW5ndGgsZXZlbnQsc2xpY2U6b3B0X3NsaWNlLHRocmVhZH0pO30scHJvY2Vzc0NvdW50ZXJFdmVudChldmVudCl7bGV0IGN0ck5hbWU7aWYoZXZlbnQuaWQhPT11bmRlZmluZWQpe2N0ck5hbWU9ZXZlbnQubmFtZSsnWycrZXZlbnQuaWQrJ10nO31lbHNle2N0ck5hbWU9ZXZlbnQubmFtZTt9Ci1jb25zdCBjdHI9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKGV2ZW50LnBpZCkuZ2V0T3JDcmVhdGVDb3VudGVyKGV2ZW50LmNhdCxjdHJOYW1lKTtjb25zdCByZXNlcnZlZENvbG9ySWQ9ZXZlbnQuY25hbWU/Z2V0RXZlbnRDb2xvcihldmVudCk6dW5kZWZpbmVkO2lmKGN0ci5udW1TZXJpZXM9PT0wKXtmb3IoY29uc3Qgc2VyaWVzTmFtZSBpbiBldmVudC5hcmdzKXtjb25zdCBjb2xvcklkPXJlc2VydmVkQ29sb3JJZHx8Z2V0RXZlbnRDb2xvcihldmVudCxjdHIubmFtZSsnLicrc2VyaWVzTmFtZSk7Y3RyLmFkZFNlcmllcyhuZXcgdHIubW9kZWwuQ291bnRlclNlcmllcyhzZXJpZXNOYW1lLGNvbG9ySWQpKTt9Ci1pZihjdHIubnVtU2VyaWVzPT09MCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonY291bnRlcl9wYXJzZV9lcnJvcicsbWVzc2FnZTonRXhwZWN0ZWQgY291bnRlciAnK2V2ZW50Lm5hbWUrJyB0byBoYXZlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCB0byB1c2UgYXMgYSB2YWx1ZS4nfSk7ZGVsZXRlIGN0ci5wYXJlbnQuY291bnRlcnNbY3RyLm5hbWVdO3JldHVybjt9fQotY29uc3QgdHM9dGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHMpO2N0ci5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe2NvbnN0IHZhbD1ldmVudC5hcmdzW3Nlcmllcy5uYW1lXT9ldmVudC5hcmdzW3Nlcmllcy5uYW1lXTowO3Nlcmllcy5hZGRDb3VudGVyU2FtcGxlKHRzLHZhbCk7fSk7fSxwcm9jZXNzT2JqZWN0RXZlbnQoZXZlbnQpe2NvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKS5nZXRPckNyZWF0ZVRocmVhZChldmVudC50aWQpO3RoaXMuYWxsT2JqZWN0RXZlbnRzXy5wdXNoKHtzZXF1ZW5jZU51bWJlcjp0aGlzLmFsbE9iamVjdEV2ZW50c18ubGVuZ3RoLGV2ZW50LHRocmVhZH0pO2lmKHRocmVhZC5ndWlkIGluIHRoaXMuY29udGV4dFByb2Nlc3NvclBlclRocmVhZCl7Y29uc3QgcHJvY2Vzc29yPXRoaXMuY29udGV4dFByb2Nlc3NvclBlclRocmVhZFt0aHJlYWQuZ3VpZF07Y29uc3Qgc2NvcGVkSWQ9VHJhY2VFdmVudEltcG9ydGVyLnNjb3BlZElkRm9yRXZlbnRfKGV2ZW50KTtpZihldmVudC5waD09PSdEJyl7cHJvY2Vzc29yLmRlc3Ryb3lDb250ZXh0KHNjb3BlZElkKTt9Ci1wcm9jZXNzb3IuaW52YWxpZGF0ZUNvbnRleHRDYWNoZUZvclNuYXBzaG90KHNjb3BlZElkKTt9fSxwcm9jZXNzQ29udGV4dEV2ZW50KGV2ZW50KXtjb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKGV2ZW50LnBpZCkuZ2V0T3JDcmVhdGVUaHJlYWQoZXZlbnQudGlkKTtpZighKHRocmVhZC5ndWlkIGluIHRoaXMuY29udGV4dFByb2Nlc3NvclBlclRocmVhZCkpe3RoaXMuY29udGV4dFByb2Nlc3NvclBlclRocmVhZFt0aHJlYWQuZ3VpZF09bmV3IHRyLmltcG9ydGVyLkNvbnRleHRQcm9jZXNzb3IodGhpcy5tb2RlbF8pO30KLWNvbnN0IHNjb3BlZElkPVRyYWNlRXZlbnRJbXBvcnRlci5zY29wZWRJZEZvckV2ZW50XyhldmVudCk7Y29uc3QgY29udGV4dFR5cGU9ZXZlbnQubmFtZTtjb25zdCBwcm9jZXNzb3I9dGhpcy5jb250ZXh0UHJvY2Vzc29yUGVyVGhyZWFkW3RocmVhZC5ndWlkXTtpZihldmVudC5waD09PScoJyl7cHJvY2Vzc29yLmVudGVyQ29udGV4dChjb250ZXh0VHlwZSxzY29wZWRJZCk7fWVsc2UgaWYoZXZlbnQucGg9PT0nKScpe3Byb2Nlc3Nvci5sZWF2ZUNvbnRleHQoY29udGV4dFR5cGUsc2NvcGVkSWQpO31lbHNle3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J3Vua25vd25fY29udGV4dF9waGFzZScsbWVzc2FnZTonVW5rbm93biBjb250ZXh0IGV2ZW50IHBoYXNlOiAnK2V2ZW50LnBoKycuJ30pO319LHNldENvbnRleHRzRnJvbVRocmVhZF8odGhyZWFkLHNsaWNlKXtpZih0aHJlYWQuZ3VpZCBpbiB0aGlzLmNvbnRleHRQcm9jZXNzb3JQZXJUaHJlYWQpe3NsaWNlLmNvbnRleHRzPXRoaXMuY29udGV4dFByb2Nlc3NvclBlclRocmVhZFt0aHJlYWQuZ3VpZF0uYWN0aXZlQ29udGV4dHM7fX0scHJvY2Vzc0R1cmF0aW9uRXZlbnQoZXZlbnQpe2NvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKS5nZXRPckNyZWF0ZVRocmVhZChldmVudC50aWQpO2NvbnN0IHRzPXRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKGV2ZW50LnRzKTtpZighdGhyZWFkLnNsaWNlR3JvdXAuaXNUaW1lc3RhbXBWYWxpZEZvckJlZ2luT3JFbmQodHMpKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidkdXJhdGlvbl9wYXJzZV9lcnJvcicsbWVzc2FnZTonVGltZXN0YW1wcyBhcmUgbW92aW5nIGJhY2t3YXJkLid9KTtyZXR1cm47fQotaWYoZXZlbnQucGg9PT0nQicpe2NvbnN0IHNsaWNlPXRocmVhZC5zbGljZUdyb3VwLmJlZ2luU2xpY2UoZXZlbnQuY2F0LGV2ZW50Lm5hbWUsdGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHMpLHRoaXMuZGVlcENvcHlJZk5lZWRlZF8oZXZlbnQuYXJncyksdGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHRzKSxldmVudC5hcmdzU3RyaXBwZWQsZ2V0RXZlbnRDb2xvcihldmVudCkpO3NsaWNlLnN0YXJ0U3RhY2tGcmFtZT10aGlzLmdldFN0YWNrRnJhbWVGb3JFdmVudF8oZXZlbnQpO3RoaXMuc2V0Q29udGV4dHNGcm9tVGhyZWFkXyh0aHJlYWQsc2xpY2UpO31lbHNlIGlmKGV2ZW50LnBoPT09J0knfHxldmVudC5waD09PSdpJ3x8ZXZlbnQucGg9PT0nUicpe2lmKGV2ZW50LnMhPT11bmRlZmluZWQmJmV2ZW50LnMhPT0ndCcpe3Rocm93IG5ldyBFcnJvcignVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuJyk7fQotdGhyZWFkLnNsaWNlR3JvdXAuYmVnaW5TbGljZShldmVudC5jYXQsZXZlbnQubmFtZSx0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cyksdGhpcy5kZWVwQ29weUlmTmVlZGVkXyhldmVudC5hcmdzKSx0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50dHMpLGV2ZW50LmFyZ3NTdHJpcHBlZCxnZXRFdmVudENvbG9yKGV2ZW50KSk7Y29uc3Qgc2xpY2U9dGhyZWFkLnNsaWNlR3JvdXAuZW5kU2xpY2UodGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHMpLHRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKGV2ZW50LnR0cykpO3NsaWNlLnN0YXJ0U3RhY2tGcmFtZT10aGlzLmdldFN0YWNrRnJhbWVGb3JFdmVudF8oZXZlbnQpO3NsaWNlLmVuZFN0YWNrRnJhbWU9dW5kZWZpbmVkO31lbHNle2lmKCF0aHJlYWQuc2xpY2VHcm91cC5vcGVuU2xpY2VDb3VudCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonZHVyYXRpb25fcGFyc2VfZXJyb3InLG1lc3NhZ2U6J0UgcGhhc2UgZXZlbnQgd2l0aG91dCBhIG1hdGNoaW5nIEIgcGhhc2UgZXZlbnQuJ30pO3JldHVybjt9Ci1jb25zdCBzbGljZT10aHJlYWQuc2xpY2VHcm91cC5lbmRTbGljZSh0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cyksdGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHRzKSxnZXRFdmVudENvbG9yKGV2ZW50KSk7aWYoZXZlbnQubmFtZSYmc2xpY2UudGl0bGUhPT1ldmVudC5uYW1lKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOid0aXRsZV9tYXRjaF9lcnJvcicsbWVzc2FnZTonVGl0bGVzIGRvIG5vdCBtYXRjaC4gVGl0bGUgaXMgJysKLXNsaWNlLnRpdGxlKycgaW4gb3BlblNsaWNlLCBhbmQgaXMgJysKLWV2ZW50Lm5hbWUrJyBpbiBlbmRTbGljZSd9KTt9Ci1zbGljZS5lbmRTdGFja0ZyYW1lPXRoaXMuZ2V0U3RhY2tGcmFtZUZvckV2ZW50XyhldmVudCk7dGhpcy5tZXJnZUFyZ3NJbnRvXyhzbGljZS5hcmdzLGV2ZW50LmFyZ3Msc2xpY2UudGl0bGUpO319LG1lcmdlQXJnc0ludG9fKGRzdEFyZ3Msc3JjQXJncyxldmVudE5hbWUpe2Zvcihjb25zdCBhcmcgaW4gc3JjQXJncyl7aWYoZHN0QXJnc1thcmddIT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidhcmdfbWVyZ2VfZXJyb3InLG1lc3NhZ2U6J0RpZmZlcmVudCBwaGFzZXMgb2YgJytldmVudE5hbWUrJyBwcm92aWRlZCB2YWx1ZXMgZm9yIGFyZ3VtZW50ICcrYXJnKycuJysnIFRoZSBsYXN0IHByb3ZpZGVkIHZhbHVlIHdpbGwgYmUgdXNlZC4nfSk7fQotZHN0QXJnc1thcmddPXRoaXMuZGVlcENvcHlJZk5lZWRlZF8oc3JjQXJnc1thcmddKTt9fSxwcm9jZXNzQ29tcGxldGVFdmVudChldmVudCl7aWYoZXZlbnQuY2F0IT09dW5kZWZpbmVkJiZldmVudC5jYXQuaW5kZXhPZigndHJhY2VfZXZlbnRfb3ZlcmhlYWQnKT4tMSl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1jb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKGV2ZW50LnBpZCkuZ2V0T3JDcmVhdGVUaHJlYWQoZXZlbnQudGlkKTtpZihldmVudC5mbG93X291dCl7aWYoZXZlbnQuZmxvd19pbil7ZXZlbnQuZmxvd1BoYXNlPVNURVA7fWVsc2V7ZXZlbnQuZmxvd1BoYXNlPVBST0RVQ0VSO319ZWxzZSBpZihldmVudC5mbG93X2luKXtldmVudC5mbG93UGhhc2U9Q09OU1VNRVI7fQotY29uc3Qgc2xpY2U9dGhyZWFkLnNsaWNlR3JvdXAucHVzaENvbXBsZXRlU2xpY2UoZXZlbnQuY2F0LGV2ZW50Lm5hbWUsdGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHMpLHRoaXMubWF5YmVUb01vZGVsVGltZUZyb21Vc18oZXZlbnQuZHVyKSx0aGlzLm1heWJlVG9Nb2RlbFRpbWVGcm9tVXNfKGV2ZW50LnR0cyksdGhpcy5tYXliZVRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50ZHVyKSx0aGlzLmRlZXBDb3B5SWZOZWVkZWRfKGV2ZW50LmFyZ3MpLGV2ZW50LmFyZ3NTdHJpcHBlZCxnZXRFdmVudENvbG9yKGV2ZW50KSxldmVudC5iaW5kX2lkKTtzbGljZS5zdGFydFN0YWNrRnJhbWU9dGhpcy5nZXRTdGFja0ZyYW1lRm9yRXZlbnRfKGV2ZW50KTtzbGljZS5lbmRTdGFja0ZyYW1lPXRoaXMuZ2V0U3RhY2tGcmFtZUZvckV2ZW50XyhldmVudCx0cnVlKTt0aGlzLnNldENvbnRleHRzRnJvbVRocmVhZF8odGhyZWFkLHNsaWNlKTtyZXR1cm4gc2xpY2U7fSxwcm9jZXNzSml0Q29kZUV2ZW50KGV2ZW50KXtpZih0aGlzLnY4UHJvY2Vzc0NvZGVNYXBzX1tldmVudC5waWRdPT09dW5kZWZpbmVkKXt0aGlzLnY4UHJvY2Vzc0NvZGVNYXBzX1tldmVudC5waWRdPW5ldyB0ci5lLmltcG9ydGVyLlRyYWNlQ29kZU1hcCgpO30KLWNvbnN0IG1hcD10aGlzLnY4UHJvY2Vzc0NvZGVNYXBzX1tldmVudC5waWRdO2NvbnN0IGRhdGE9ZXZlbnQuYXJncy5kYXRhO2lmKGV2ZW50Lm5hbWU9PT0nSml0Q29kZU1vdmVkJyl7bWFwLm1vdmVFbnRyeShkYXRhLmNvZGVfc3RhcnQsZGF0YS5uZXdfY29kZV9zdGFydCxkYXRhLmNvZGVfbGVuKTt9ZWxzZXttYXAuYWRkRW50cnkoZGF0YS5jb2RlX3N0YXJ0LGRhdGEuY29kZV9sZW4sZGF0YS5uYW1lLGRhdGEuc2NyaXB0X2lkKTt9fSxwcm9jZXNzTWV0YWRhdGFFdmVudChldmVudCl7aWYoZXZlbnQubmFtZT09PSdKaXRDb2RlQWRkZWQnfHxldmVudC5uYW1lPT09J0ppdENvZGVNb3ZlZCcpe3RoaXMudjhTYW1wbGluZ0RhdGFfLnB1c2goZXZlbnQpO3JldHVybjt9Ci1pZihldmVudC5hcmdzU3RyaXBwZWQpcmV0dXJuO2lmKGV2ZW50Lm5hbWU9PT0ncHJvY2Vzc19uYW1lJyl7Y29uc3QgcHJvY2Vzcz10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKTtwcm9jZXNzLm5hbWU9ZXZlbnQuYXJncy5uYW1lO31lbHNlIGlmKGV2ZW50Lm5hbWU9PT0ncHJvY2Vzc19sYWJlbHMnKXtjb25zdCBwcm9jZXNzPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhldmVudC5waWQpO2NvbnN0IGxhYmVscz1ldmVudC5hcmdzLmxhYmVscy5zcGxpdCgnLCcpO2ZvcihsZXQgaT0wO2k8bGFiZWxzLmxlbmd0aDtpKyspe3Byb2Nlc3MuYWRkTGFiZWxJZk5lZWRlZChsYWJlbHNbaV0pO319ZWxzZSBpZihldmVudC5uYW1lPT09J3Byb2Nlc3NfdXB0aW1lX3NlY29uZHMnKXtjb25zdCBwcm9jZXNzPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhldmVudC5waWQpO3Byb2Nlc3MudXB0aW1lX3NlY29uZHM9ZXZlbnQuYXJncy51cHRpbWU7fWVsc2UgaWYoZXZlbnQubmFtZT09PSdwcm9jZXNzX3NvcnRfaW5kZXgnKXtjb25zdCBwcm9jZXNzPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhldmVudC5waWQpO3Byb2Nlc3Muc29ydEluZGV4PWV2ZW50LmFyZ3Muc29ydF9pbmRleDt9ZWxzZSBpZihldmVudC5uYW1lPT09J3RocmVhZF9uYW1lJyl7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhldmVudC5waWQpLmdldE9yQ3JlYXRlVGhyZWFkKGV2ZW50LnRpZCk7dGhyZWFkLm5hbWU9ZXZlbnQuYXJncy5uYW1lO31lbHNlIGlmKGV2ZW50Lm5hbWU9PT0ndGhyZWFkX3NvcnRfaW5kZXgnKXtjb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKGV2ZW50LnBpZCkuZ2V0T3JDcmVhdGVUaHJlYWQoZXZlbnQudGlkKTt0aHJlYWQuc29ydEluZGV4PWV2ZW50LmFyZ3Muc29ydF9pbmRleDt9ZWxzZSBpZihldmVudC5uYW1lPT09J251bV9jcHVzJyl7bGV0IG49ZXZlbnQuYXJncy5udW1iZXI7aWYodGhpcy5zb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnRfIT09dW5kZWZpbmVkKXtuPU1hdGgubWF4KG4sdGhpcy5zb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnRfKTt9Ci10aGlzLnNvZnR3YXJlTWVhc3VyZWRDcHVDb3VudF89bjt9ZWxzZSBpZihldmVudC5uYW1lPT09J3N0YWNrRnJhbWVzJyl7Y29uc3Qgc3RhY2tGcmFtZXM9ZXZlbnQuYXJncy5zdGFja0ZyYW1lcztpZihzdGFja0ZyYW1lcz09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWV0YWRhdGFfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J05vIHN0YWNrIGZyYW1lcyBmb3VuZCBpbiBhIFwnJytldmVudC5uYW1lKydcJyBtZXRhZGF0YSBldmVudCd9KTt9ZWxzZXt0aGlzLmltcG9ydFN0YWNrRnJhbWVzXyhzdGFja0ZyYW1lcywncCcrZXZlbnQucGlkKyc6Jyk7fX1lbHNlIGlmKGV2ZW50Lm5hbWU9PT0ndHlwZU5hbWVzJyl7Y29uc3Qgb2JqZWN0VHlwZU5hbWVNYXA9ZXZlbnQuYXJncy50eXBlTmFtZXM7aWYob2JqZWN0VHlwZU5hbWVNYXA9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21ldGFkYXRhX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidObyBtYXBwaW5nIGZyb20gb2JqZWN0IHR5cGUgSURzIHRvIG5hbWVzIGZvdW5kIGluIGEgXCcnKwotZXZlbnQubmFtZSsnXCcgbWV0YWRhdGEgZXZlbnQnfSk7fWVsc2V7dGhpcy5pbXBvcnRPYmplY3RUeXBlTmFtZU1hcF8ob2JqZWN0VHlwZU5hbWVNYXAsZXZlbnQucGlkKTt9fWVsc2UgaWYoZXZlbnQubmFtZT09PSdUcmFjZUNvbmZpZycpe3RoaXMubW9kZWxfLm1ldGFkYXRhLnB1c2goe25hbWU6J1RyYWNlQ29uZmlnJyx2YWx1ZTpldmVudC5hcmdzLnZhbHVlfSk7fWVsc2V7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWV0YWRhdGFfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J1VucmVjb2duaXplZCBtZXRhZGF0YSBuYW1lOiAnK2V2ZW50Lm5hbWV9KTt9fSxwcm9jZXNzSW5zdGFudEV2ZW50KGV2ZW50KXtpZihldmVudC5uYW1lPT09J0ppdENvZGVBZGRlZCd8fGV2ZW50Lm5hbWU9PT0nSml0Q29kZU1vdmVkJyl7dGhpcy52OFNhbXBsaW5nRGF0YV8ucHVzaChldmVudCk7cmV0dXJuO30KLWlmKGV2ZW50LnM9PT0ndCd8fGV2ZW50LnM9PT11bmRlZmluZWQpe3RoaXMucHJvY2Vzc0R1cmF0aW9uRXZlbnQoZXZlbnQpO3JldHVybjt9Ci1sZXQgY29uc3RydWN0b3I7c3dpdGNoKGV2ZW50LnMpe2Nhc2UnZyc6Y29uc3RydWN0b3I9dHIubW9kZWwuR2xvYmFsSW5zdGFudEV2ZW50O2JyZWFrO2Nhc2UncCc6Y29uc3RydWN0b3I9dHIubW9kZWwuUHJvY2Vzc0luc3RhbnRFdmVudDticmVhaztkZWZhdWx0OnRoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2luc3RhbnRfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J0kgcGhhc2UgZXZlbnQgd2l0aCB1bmtub3duICJzIiBmaWVsZCB2YWx1ZS4nfSk7cmV0dXJuO30KLWNvbnN0IGluc3RhbnRFdmVudD1uZXcgY29uc3RydWN0b3IoZXZlbnQuY2F0LGV2ZW50Lm5hbWUsZ2V0RXZlbnRDb2xvcihldmVudCksdGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHMpLHRoaXMuZGVlcENvcHlJZk5lZWRlZF8oZXZlbnQuYXJncykpO3N3aXRjaChpbnN0YW50RXZlbnQudHlwZSl7Y2FzZSB0ci5tb2RlbC5JbnN0YW50RXZlbnRUeXBlLkdMT0JBTDp0aGlzLm1vZGVsXy5pbnN0YW50RXZlbnRzLnB1c2goaW5zdGFudEV2ZW50KTticmVhaztjYXNlIHRyLm1vZGVsLkluc3RhbnRFdmVudFR5cGUuUFJPQ0VTUzp7Y29uc3QgcHJvY2Vzcz10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKTtwcm9jZXNzLmluc3RhbnRFdmVudHMucHVzaChpbnN0YW50RXZlbnQpO2JyZWFrO30KLWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGluc3RhbnQgZXZlbnQgdHlwZTogJytldmVudC5zKTt9fSxnZXRPckNyZWF0ZVByb2ZpbGVUcmVlXyhzYW1wbGVUeXBlLGlkKXtpZighdGhpcy5wcm9maWxlVHJlZXNfLmhhcyhzYW1wbGVUeXBlKSl7dGhpcy5wcm9maWxlVHJlZXNfLnNldChzYW1wbGVUeXBlLG5ldyBNYXAoKSk7fQotY29uc3QgcHJvZmlsZVRyZWVNYXA9dGhpcy5wcm9maWxlVHJlZXNfLmdldChzYW1wbGVUeXBlKTtpZihwcm9maWxlVHJlZU1hcC5oYXMoaWQpKXtyZXR1cm4gcHJvZmlsZVRyZWVNYXAuZ2V0KGlkKTt9Ci1jb25zdCBwcm9maWxlVHJlZT1uZXcgdHIubW9kZWwuUHJvZmlsZVRyZWUoKTtwcm9maWxlVHJlZU1hcC5zZXQoaWQscHJvZmlsZVRyZWUpO2NvbnN0IGluZm89dGhpcy5wcm9maWxlSW5mb18uZ2V0KGlkKTtpZihpbmZvIT09dW5kZWZpbmVkKXtwcm9maWxlVHJlZS5zdGFydFRpbWU9aW5mby5zdGFydFRpbWU7cHJvZmlsZVRyZWUucGlkPWluZm8ucGlkO3Byb2ZpbGVUcmVlLnRpZD1pbmZvLnRpZDt9Ci1yZXR1cm4gcHJvZmlsZVRyZWU7fSxwcm9jZXNzU2FtcGxlKGV2ZW50KXtpZihldmVudC5hcmdzPT09dW5kZWZpbmVkfHxldmVudC5hcmdzLmRhdGE9PT11bmRlZmluZWQpe3JldHVybjt9Ci1pZihldmVudC5pZD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdObyBldmVudCBJRCBpbiBzYW1wbGUnKTt9Ci1jb25zdCBkYXRhPWV2ZW50LmFyZ3MuZGF0YTtpZihkYXRhLnN0YXJ0VGltZSE9PXVuZGVmaW5lZCl7dGhpcy5wcm9maWxlSW5mb18uc2V0KGV2ZW50LmlkLHtzdGFydFRpbWU6ZGF0YS5zdGFydFRpbWUscGlkOmV2ZW50LnBpZCx0aWQ6ZXZlbnQudGlkfSk7fQotY29uc3QgdGltZURlbHRhcz1kYXRhLnRpbWVEZWx0YXM7Zm9yKGNvbnN0IHNhbXBsZVR5cGUgaW4gZGF0YSl7aWYoc2FtcGxlVHlwZT09PSd0aW1lRGVsdGFzJ3x8c2FtcGxlVHlwZT09PSdzdGFydFRpbWUnKXtjb250aW51ZTt9Ci1pZihkYXRhW3NhbXBsZVR5cGVdLnNhbXBsZXMmJnRpbWVEZWx0YXMmJmRhdGFbc2FtcGxlVHlwZV0uc2FtcGxlcy5sZW5ndGghPT10aW1lRGVsdGFzLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCdzYW1wbGVzIGFuZCB0aW1lRGVsdGFzIGFycmF5IHNob3VsZCBoYXZlIHNhbWUgbGVuZ3RoJyk7fQotY29uc3QgcHJvZmlsZVRyZWU9dGhpcy5nZXRPckNyZWF0ZVByb2ZpbGVUcmVlXyhzYW1wbGVUeXBlLGV2ZW50LmlkKTtjb25zdCBub2Rlcz1kYXRhW3NhbXBsZVR5cGVdLm5vZGVzO2NvbnN0IHNhbXBsZXM9ZGF0YVtzYW1wbGVUeXBlXS5zYW1wbGVzO2lmKG5vZGVzIT09dW5kZWZpbmVkKXtmb3IoY29uc3Qgbm9kZSBvZiBub2Rlcyl7Y29uc3QgUHJvZmlsZU5vZGVUeXBlPXRyLm1vZGVsLlByb2ZpbGVOb2RlLnN1YlR5cGVzLmdldENvbnN0cnVjdG9yKHVuZGVmaW5lZCxzYW1wbGVUeXBlKTtjb25zdCBwcm9maWxlTm9kZT1Qcm9maWxlTm9kZVR5cGUuY29uc3RydWN0RnJvbU9iamVjdChwcm9maWxlVHJlZSxub2RlKTtpZihwcm9maWxlTm9kZT09PXVuZGVmaW5lZCl7Y29udGludWU7fQotcHJvZmlsZVRyZWUuYWRkKHByb2ZpbGVOb2RlKTt9fQotaWYoc2FtcGxlcyE9PXVuZGVmaW5lZCl7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2Vzcyhwcm9maWxlVHJlZS5waWQpLmdldE9yQ3JlYXRlVGhyZWFkKHByb2ZpbGVUcmVlLnRpZCk7Zm9yKGxldCBpPTAsbGVuPXNhbXBsZXMubGVuZ3RoO2k8bGVuOysraSl7Y29uc3Qgbm9kZT1wcm9maWxlVHJlZS5nZXROb2RlKHNhbXBsZXNbaV0pO3Byb2ZpbGVUcmVlLmVuZFRpbWUrPXRpbWVEZWx0YXNbaV07aWYobm9kZT09PXVuZGVmaW5lZCljb250aW51ZTtjb25zdCBzdGFydD10aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhwcm9maWxlVHJlZS5lbmRUaW1lKTt0aGlzLm1vZGVsXy5zYW1wbGVzLnB1c2gobmV3IHRyLm1vZGVsLlNhbXBsZShzdGFydCxub2RlLnNhbXBsZVRpdGxlLG5vZGUsdGhyZWFkKSk7fX19fSxwcm9jZXNzTGVnYWN5VjhTYW1wbGUoZXZlbnQpe2NvbnN0IGRhdGE9ZXZlbnQuYXJncy5kYXRhO2NvbnN0IHNhbXBsZVR5cGU9J2xlZ2FjeVNhbXBsZSc7Y29uc3QgUHJvZmlsZU5vZGVUeXBlPXRyLm1vZGVsLlByb2ZpbGVOb2RlLnN1YlR5cGVzLmdldENvbnN0cnVjdG9yKHVuZGVmaW5lZCxzYW1wbGVUeXBlKTtpZihkYXRhLnZtX3N0YXRlPT09J2pzJyYmIWRhdGEuc3RhY2subGVuZ3RoKXJldHVybjtjb25zdCBwcm9maWxlVHJlZT10aGlzLmdldE9yQ3JlYXRlUHJvZmlsZVRyZWVfKHNhbXBsZVR5cGUsZXZlbnQucGlkKTtpZihwcm9maWxlVHJlZS5nZXROb2RlKC0xKT09PXVuZGVmaW5lZCl7cHJvZmlsZVRyZWUuYWRkKG5ldyBQcm9maWxlTm9kZVR5cGUoLTEse3VybDonJyxzY3JpcHRJZDotMSxmdW5jdGlvbk5hbWU6J3Vua25vd24nfSx1bmRlZmluZWQpKTt9Ci1sZXQgbm9kZT11bmRlZmluZWQ7aWYoZGF0YS5zdGFjay5sZW5ndGg+MCYmdGhpcy52OFByb2Nlc3NDb2RlTWFwc19bZXZlbnQucGlkXSl7Y29uc3QgbWFwPXRoaXMudjhQcm9jZXNzQ29kZU1hcHNfW2V2ZW50LnBpZF07ZGF0YS5zdGFjay5yZXZlcnNlKCk7bGV0IHBhcmVudE5vZGU9dW5kZWZpbmVkO2ZvcihsZXQgaT0wO2k8ZGF0YS5zdGFjay5sZW5ndGg7aSsrKXtjb25zdCBlbnRyeT1tYXAubG9va3VwRW50cnkoZGF0YS5zdGFja1tpXSk7aWYoZW50cnk9PT11bmRlZmluZWQpe25vZGU9cHJvZmlsZVRyZWUuZ2V0Tm9kZSgtMSk7fWVsc2V7bm9kZT1wcm9maWxlVHJlZS5nZXROb2RlKGVudHJ5LmlkKTtpZihub2RlPT09dW5kZWZpbmVkKXtjb25zdCBzb3VyY2VJbmZvPWVudHJ5LnNvdXJjZUluZm87bm9kZT1uZXcgUHJvZmlsZU5vZGVUeXBlKGVudHJ5LmlkLHtmdW5jdGlvbk5hbWU6ZW50cnkubmFtZSx1cmw6ZW50cnkuc291cmNlSW5mby5maWxlLGxpbmVOdW1iZXI6c291cmNlSW5mby5saW5lIT09LTE/c291cmNlSW5mby5saW5lOnVuZGVmaW5lZCxjb2x1bW5OdW1iZXI6c291cmNlSW5mby5jb2x1bW4hPT0tMT9zb3VyY2VJbmZvLmNvbHVtbjp1bmRlZmluZWQsc2NyaXB0aWQ6ZW50cnkuc291cmNlSW5mby5zY3JpcHRJZH0scGFyZW50Tm9kZSk7cHJvZmlsZVRyZWUuYWRkKG5vZGUpO319Ci1wYXJlbnROb2RlPW5vZGU7fX1lbHNle25vZGU9cHJvZmlsZVRyZWUuZ2V0Tm9kZShkYXRhLnZtX3N0YXRlKTtpZihub2RlPT09dW5kZWZpbmVkKXtub2RlPW5ldyBQcm9maWxlTm9kZVR5cGUoZGF0YS52bV9zdGF0ZSx7dXJsOicnLGZ1bmN0aW9uTmFtZTpkYXRhLnZtX3N0YXRlfSx1bmRlZmluZWQpO3Byb2ZpbGVUcmVlLmFkZChub2RlKTt9fQotY29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhldmVudC5waWQpLmdldE9yQ3JlYXRlVGhyZWFkKGV2ZW50LnRpZCk7dGhpcy5tb2RlbF8uc2FtcGxlcy5wdXNoKG5ldyB0ci5tb2RlbC5TYW1wbGUodGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHMpLG5vZGUuc2FtcGxlVGl0bGUsbm9kZSx0aHJlYWQpKTt9LHByb2Nlc3NUcmFjZVNhbXBsZUV2ZW50KGV2ZW50KXtpZihldmVudC5uYW1lPT09J1Y4U2FtcGxlJ3x8ZXZlbnQubmFtZS5zdGFydHNXaXRoKCdQcm9maWxlJykpe3RoaXMudjhTYW1wbGluZ0RhdGFfLnB1c2goZXZlbnQpO3JldHVybjt9Ci1sZXQgbm9kZT10aGlzLnN0YWNrRnJhbWVUcmVlXy5nZXROb2RlKGV2ZW50Lm5hbWUpO2lmKG5vZGU9PT11bmRlZmluZWQmJmV2ZW50LnNmIT09dW5kZWZpbmVkKXtub2RlPXRoaXMuc3RhY2tGcmFtZVRyZWVfLmdldE5vZGUoJ2cnK2V2ZW50LnNmKTt9Ci1pZihub2RlPT09dW5kZWZpbmVkKXtsZXQgaWQ9ZXZlbnQubmFtZTtpZihldmVudC5zZil7aWQ9J2cnK2V2ZW50LnNmO30KLWNvbnN0IFByb2ZpbGVOb2RlVHlwZT10ci5tb2RlbC5Qcm9maWxlTm9kZS5zdWJUeXBlcy5nZXRDb25zdHJ1Y3Rvcih1bmRlZmluZWQsJ2xlZ2FjeVNhbXBsZScpO25vZGU9dGhpcy5zdGFja0ZyYW1lVHJlZV8uYWRkKG5ldyBQcm9maWxlTm9kZVR5cGUoaWQse2Z1bmN0aW9uTmFtZTpldmVudC5uYW1lfSx1bmRlZmluZWQpKTt9Ci1jb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKGV2ZW50LnBpZCkuZ2V0T3JDcmVhdGVUaHJlYWQoZXZlbnQudGlkKTtjb25zdCBzYW1wbGU9bmV3IHRyLm1vZGVsLlNhbXBsZSh0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cyksJ1RyYWNlIEV2ZW50IFNhbXBsZScsbm9kZSx0aHJlYWQsdW5kZWZpbmVkLDEsdGhpcy5kZWVwQ29weUlmTmVlZGVkXyhldmVudC5hcmdzKSk7dGhpcy5zZXRDb250ZXh0c0Zyb21UaHJlYWRfKHRocmVhZCxzYW1wbGUpO3RoaXMubW9kZWxfLnNhbXBsZXMucHVzaChzYW1wbGUpO30scHJvY2Vzc01lbW9yeUR1bXBFdmVudChldmVudCl7aWYoZXZlbnQucGghPT0ndicpe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBtZW1vcnkgZHVtcCBldmVudCBwaGFzZSAiJytldmVudC5waCsnIi4nKTt9Ci1jb25zdCBkdW1wSWQ9ZXZlbnQuaWQ7aWYoZHVtcElkPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonTWVtb3J5IGR1bXAgZXZlbnQgKHBoYXNlIFwnJytldmVudC5waCsnXCcpIHdpdGhvdXQgYSBkdW1wIElELid9KTtyZXR1cm47fQotY29uc3QgcGlkPWV2ZW50LnBpZDtpZihwaWQ9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNZW1vcnkgZHVtcCBldmVudCAocGhhc2VcJycrZXZlbnQucGgrJ1wnLCBkdW1wIElEIFwnJysKLWR1bXBJZCsnXCcpIHdpdGhvdXQgYSBQSUQuJ30pO3JldHVybjt9Ci1jb25zdCBhbGxFdmVudHM9dGhpcy5hbGxNZW1vcnlEdW1wRXZlbnRzXztsZXQgZHVtcElkRXZlbnRzPWFsbEV2ZW50c1tkdW1wSWRdO2lmKGR1bXBJZEV2ZW50cz09PXVuZGVmaW5lZCl7YWxsRXZlbnRzW2R1bXBJZF09ZHVtcElkRXZlbnRzPXt9O30KLWxldCBwcm9jZXNzRXZlbnRzPWR1bXBJZEV2ZW50c1twaWRdO2lmKHByb2Nlc3NFdmVudHM9PT11bmRlZmluZWQpe2R1bXBJZEV2ZW50c1twaWRdPXByb2Nlc3NFdmVudHM9W107fQotcHJvY2Vzc0V2ZW50cy5wdXNoKGV2ZW50KTt9LHByb2Nlc3NDbG9ja1N5bmNFdmVudChldmVudCl7aWYoZXZlbnQucGghPT0nYycpe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBjbG9jayBzeW5jIGV2ZW50IHBoYXNlICInK2V2ZW50LnBoKyciLicpO30KLWNvbnN0IHN5bmNJZD1ldmVudC5hcmdzLnN5bmNfaWQ7aWYoc3luY0lkPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidjbG9ja19zeW5jX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidDbG9jayBzeW5jIGF0IHRpbWUgJytldmVudC50cysnIHdpdGhvdXQgYW4gSUQuJ30pO3JldHVybjt9Ci1pZihldmVudC5hcmdzJiZldmVudC5hcmdzLmlzc3VlX3RzIT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5jbG9ja1N5bmNNYW5hZ2VyLmFkZENsb2NrU3luY01hcmtlcih0aGlzLmNsb2NrRG9tYWluSWRfLHN5bmNJZCx0ci5iLlVuaXQudGltZXN0YW1wRnJvbVVzKGV2ZW50LmFyZ3MuaXNzdWVfdHMpLHRyLmIuVW5pdC50aW1lc3RhbXBGcm9tVXMoZXZlbnQudHMpKTt9ZWxzZXt0aGlzLm1vZGVsXy5jbG9ja1N5bmNNYW5hZ2VyLmFkZENsb2NrU3luY01hcmtlcih0aGlzLmNsb2NrRG9tYWluSWRfLHN5bmNJZCx0ci5iLlVuaXQudGltZXN0YW1wRnJvbVVzKGV2ZW50LnRzKSk7fX0scHJvY2Vzc0xlZ2FjeUNocm9tZUNsb2NrU3luY0V2ZW50KGV2ZW50KXtpZihldmVudC5waD09PSdTJyl7dGhpcy5sZWdhY3lDaHJvbWVDbG9ja1N5bmNTdGFydEV2ZW50Xz1ldmVudDt9ZWxzZSBpZihldmVudC5waD09PSdGJyl7dGhpcy5sZWdhY3lDaHJvbWVDbG9ja1N5bmNGaW5pc2hFdmVudF89ZXZlbnQ7fQotaWYodGhpcy5sZWdhY3lDaHJvbWVDbG9ja1N5bmNTdGFydEV2ZW50Xz09PXVuZGVmaW5lZHx8dGhpcy5sZWdhY3lDaHJvbWVDbG9ja1N5bmNGaW5pc2hFdmVudF89PT11bmRlZmluZWQpe3JldHVybjt9Ci1jb25zdCBzdGFydFN5bmNJZD10aGlzLmxlZ2FjeUNocm9tZUNsb2NrU3luY1N0YXJ0RXZlbnRfLm5hbWUuc3Vic3RyaW5nKExFR0FDWV9DSFJPTUVfQ0xPQ0tfU1lOQ19FVkVOVF9OQU1FX1BSRUZJWC5sZW5ndGgpO2NvbnN0IGZpbmlzaFN5bmNJZD10aGlzLmxlZ2FjeUNocm9tZUNsb2NrU3luY0ZpbmlzaEV2ZW50Xy5uYW1lLnN1YnN0cmluZyhMRUdBQ1lfQ0hST01FX0NMT0NLX1NZTkNfRVZFTlRfTkFNRV9QUkVGSVgubGVuZ3RoKTtpZihzdGFydFN5bmNJZCE9PWZpbmlzaFN5bmNJZCl7dGhyb3cgbmV3IEVycm9yKCdJbmNvbnNpc3RlbnQgY2xvY2sgc3luYyBJRCBvZiBsZWdhY3kgQ2hyb21lIGNsb2NrIHN5bmMgZXZlbnRzJyk7fQotdGhpcy5tb2RlbF8uY2xvY2tTeW5jTWFuYWdlci5hZGRDbG9ja1N5bmNNYXJrZXIodGhpcy5jbG9ja0RvbWFpbklkXyxzdGFydFN5bmNJZCx0ci5iLlVuaXQudGltZXN0YW1wRnJvbVVzKHRoaXMubGVnYWN5Q2hyb21lQ2xvY2tTeW5jU3RhcnRFdmVudF8udHMpLHRyLmIuVW5pdC50aW1lc3RhbXBGcm9tVXModGhpcy5sZWdhY3lDaHJvbWVDbG9ja1N5bmNGaW5pc2hFdmVudF8udHMpKTt9LHByb2Nlc3NWOEV2ZW50cygpe3RoaXMudjhTYW1wbGluZ0RhdGFfLnNvcnQoZnVuY3Rpb24oYSxiKXtpZihhLnRzIT09Yi50cylyZXR1cm4gYS50cy1iLnRzO2lmKGEucGg9PT0nTSd8fGEucGg9PT0nSScpe3JldHVybi0xO31lbHNlIGlmKGIucGg9PT0nTSd8fGIucGg9PT0nSScpe3JldHVybiAxO30KLXJldHVybiAwO30pO2NvbnN0IGxlbmd0aD10aGlzLnY4U2FtcGxpbmdEYXRhXy5sZW5ndGg7Zm9yKGxldCBpPTA7aTxsZW5ndGg7KytpKXtjb25zdCBldmVudD10aGlzLnY4U2FtcGxpbmdEYXRhX1tpXTtpZihldmVudC5waD09PSdNJ3x8ZXZlbnQucGg9PT0nSScpe3RoaXMucHJvY2Vzc0ppdENvZGVFdmVudChldmVudCk7fWVsc2UgaWYoZXZlbnQucGg9PT0nUCcpe2lmKGV2ZW50Lm5hbWUuc3RhcnRzV2l0aCgnUHJvZmlsZScpKXt0aGlzLnByb2Nlc3NTYW1wbGUoZXZlbnQpO31lbHNle3RoaXMucHJvY2Vzc0xlZ2FjeVY4U2FtcGxlKGV2ZW50KTt9fX19LGltcG9ydENsb2NrU3luY01hcmtlcnMoKXtpZih0aGlzLmV2ZW50c18gaW5zdGFuY2VvZiB0ci5iLlRyYWNlU3RyZWFtKXtjb25zdCBwYXJzZXI9b2JvZSgpLm5vZGUoJ3tjYXQgcGh9Jyx0aGlzLmltcG9ydENsb2NrU3luY01hcmtlcl8uYmluZCh0aGlzKSk7dGhpcy5ldmVudHNfLnJld2luZCgpO3doaWxlKHRoaXMuZXZlbnRzXy5oYXNEYXRhKXtwYXJzZXIud3JpdGUodGhpcy5ldmVudHNfLnJlYWROdW1CeXRlcygpKTt9Ci1wYXJzZXIuZmluaXNoKCk7fWVsc2V7Zm9yKGxldCBpPTA7aTx0aGlzLmV2ZW50c18ubGVuZ3RoO2krKyl7dGhpcy5pbXBvcnRDbG9ja1N5bmNNYXJrZXJfKHRoaXMuZXZlbnRzX1tpXSk7fX19LGltcG9ydENsb2NrU3luY01hcmtlcl8oZXZlbnQpe2NvbnN0IGlzTGVnYWN5Q2hyb21lQ2xvY2tTeW5jPWlzTGVnYWN5Q2hyb21lQ2xvY2tTeW5jRXZlbnQoZXZlbnQpO2lmKGV2ZW50LnBoIT09J2MnJiYhaXNMZWdhY3lDaHJvbWVDbG9ja1N5bmMpcmV0dXJuO2NvbnN0IGV2ZW50U2l6ZUluQnl0ZXM9dGhpcy5tb2RlbF8uaW1wb3J0T3B0aW9ucy50cmFja0RldGFpbGVkTW9kZWxTdGF0cz9KU09OLnN0cmluZ2lmeShldmVudCkubGVuZ3RoOnVuZGVmaW5lZDt0aGlzLm1vZGVsXy5zdGF0cy53aWxsUHJvY2Vzc0Jhc2ljVHJhY2VFdmVudCgnY2xvY2tfc3luYycsZXZlbnQuY2F0LGV2ZW50Lm5hbWUsZXZlbnQudHMsZXZlbnRTaXplSW5CeXRlcyk7aWYoaXNMZWdhY3lDaHJvbWVDbG9ja1N5bmMpe3RoaXMucHJvY2Vzc0xlZ2FjeUNocm9tZUNsb2NrU3luY0V2ZW50KGV2ZW50KTt9ZWxzZXt0aGlzLnByb2Nlc3NDbG9ja1N5bmNFdmVudChldmVudCk7fX0saW1wb3J0RXZlbnRzKCl7dGhpcy5oYXNFdmVudHNfPWZhbHNlO2lmKHRoaXMuc3RhY2tGcmFtZUV2ZW50c18pe3RoaXMuaW1wb3J0U3RhY2tGcmFtZXNfKHRoaXMuc3RhY2tGcmFtZUV2ZW50c18sJ2cnKTt9Ci1pZih0aGlzLnRyYWNlQW5ub3RhdGlvbnNfKXRoaXMuaW1wb3J0QW5ub3RhdGlvbnNfKCk7aWYodGhpcy5ldmVudHNfIGluc3RhbmNlb2YgdHIuYi5UcmFjZVN0cmVhbSl7Y29uc3QgcGFyc2VyPW9ib2UoKS5ub2RlKCd7Y2F0IHBofScsdGhpcy5wcm9jZXNzRXZlbnRfLmJpbmQodGhpcykpO3RoaXMuZXZlbnRzXy5yZXdpbmQoKTt3aGlsZSh0aGlzLmV2ZW50c18uaGFzRGF0YSl7cGFyc2VyLndyaXRlKHRoaXMuZXZlbnRzXy5yZWFkTnVtQnl0ZXMoKSk7fQotcGFyc2VyLmZpbmlzaCgpO31lbHNle2ZvcihsZXQgZUk9MDtlSTx0aGlzLmV2ZW50c18ubGVuZ3RoO2VJKyspe3RoaXMucHJvY2Vzc0V2ZW50Xyh0aGlzLmV2ZW50c19bZUldKTt9fQotdGhpcy5jcmVhdGVBc3luY1NsaWNlc18oKTt0aGlzLnByb2Nlc3NWOEV2ZW50cygpO2Zvcihjb25zdCBmcmFtZSBvZiBPYmplY3QudmFsdWVzKHRoaXMudjhQcm9jZXNzUm9vdFN0YWNrRnJhbWVfKSl7ZnJhbWUucmVtb3ZlQWxsQ2hpbGRyZW4oKTt9fSxzdG9yZVN1YnRyYWNlXyhzdWJ0cmFjZSl7dGhpcy5zdWJ0cmFjZXNfLnB1c2goc3VidHJhY2UpO3JldHVybiBvYm9lLmRyb3A7fSxzdG9yZVNhbXBsZXNfKHNhbXBsZXMpe3RoaXMuc2FtcGxlRXZlbnRzXz1zYW1wbGVzO3JldHVybiBvYm9lLmRyb3A7fSxzdG9yZVN0YWNrRnJhbWVzXyhzdGFja0ZyYW1lcyl7dGhpcy5zdGFja0ZyYW1lRXZlbnRzXz1zdGFja0ZyYW1lcztyZXR1cm4gb2JvZS5kcm9wO30sc3RvcmVEaXNwbGF5VGltZVVuaXRfKHVuaXROYW1lKXtpZighdW5pdE5hbWUpcmV0dXJuO2NvbnN0IHVuaXQ9dHIuYi5UaW1lRGlzcGxheU1vZGVzW3VuaXROYW1lXTtpZih1bml0PT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1VuaXQgJyt1bml0TmFtZSsnIGlzIG5vdCBzdXBwb3J0ZWQuJyk7fQotdGhpcy5tb2RlbF8uaW50cmluc2ljVGltZVVuaXQ9dW5pdDtyZXR1cm4gb2JvZS5kcm9wO30sc3RvcmVUcmFjZUFubm90YXRpb25zXyh0cmFjZUFubm90YXRpb25zKXt0aGlzLnRyYWNlQW5ub3RhdGlvbnNfPXRyYWNlQW5ub3RhdGlvbnM7cmV0dXJuIG9ib2UuZHJvcDt9LHN0b3JlTWV0YWRhdGFfKGNvbnRhaW5lcil7Zm9yKGNvbnN0IGZpZWxkTmFtZSBvZiBPYmplY3Qua2V5cyhjb250YWluZXIpKXtpZihOT05fTUVUQURBVEFfRklFTERTLmhhcyhmaWVsZE5hbWUpKWNvbnRpbnVlO3RoaXMubW9kZWxfLm1ldGFkYXRhLnB1c2goe25hbWU6ZmllbGROYW1lLHZhbHVlOmNvbnRhaW5lcltmaWVsZE5hbWVdfSk7aWYoZmllbGROYW1lIT09J21ldGFkYXRhJyljb250aW51ZTtjb25zdCBtZXRhZGF0YT1jb250YWluZXJbZmllbGROYW1lXTtpZihtZXRhZGF0YVsnaGlnaHJlcy10aWNrcyddKXt0aGlzLm1vZGVsXy5pc1RpbWVIaWdoUmVzb2x1dGlvbj1tZXRhZGF0YVsnaGlnaHJlcy10aWNrcyddO30KLWlmKG1ldGFkYXRhWydjbG9jay1kb21haW4nXSl7dGhpcy5jbG9ja0RvbWFpbklkXz1tZXRhZGF0YVsnY2xvY2stZG9tYWluJ107fX0KLXJldHVybiBvYm9lLmRyb3A7fSxwcm9jZXNzRXZlbnRfKGV2ZW50KXt0aGlzLmhhc0V2ZW50c189dHJ1ZTtjb25zdCBpbXBvcnRPcHRpb25zPXRoaXMubW9kZWxfLmltcG9ydE9wdGlvbnM7Y29uc3QgdHJhY2tEZXRhaWxlZE1vZGVsU3RhdHM9aW1wb3J0T3B0aW9ucy50cmFja0RldGFpbGVkTW9kZWxTdGF0cztjb25zdCBtb2RlbFN0YXRzPXRoaXMubW9kZWxfLnN0YXRzO2lmKGV2ZW50LmFyZ3M9PT0nX19zdHJpcHBlZF9fJyl7ZXZlbnQuYXJnc1N0cmlwcGVkPXRydWU7ZXZlbnQuYXJncz11bmRlZmluZWQ7fQotbGV0IGV2ZW50U2l6ZUluQnl0ZXM9dW5kZWZpbmVkO2lmKHRyYWNrRGV0YWlsZWRNb2RlbFN0YXRzKXtldmVudFNpemVJbkJ5dGVzPUpTT04uc3RyaW5naWZ5KGV2ZW50KS5sZW5ndGg7fQotc3dpdGNoKGV2ZW50LnBoKXtjYXNlJ0InOmNhc2UnRSc6bW9kZWxTdGF0cy53aWxsUHJvY2Vzc0Jhc2ljVHJhY2VFdmVudCgnYmVnaW5fZW5kIChub24tY29tcGFjdCknLGV2ZW50LmNhdCxldmVudC5uYW1lLGV2ZW50LnRzLGV2ZW50U2l6ZUluQnl0ZXMpO3RoaXMucHJvY2Vzc0R1cmF0aW9uRXZlbnQoZXZlbnQpO2JyZWFrO2Nhc2UnWCc6e21vZGVsU3RhdHMud2lsbFByb2Nlc3NCYXNpY1RyYWNlRXZlbnQoJ2JlZ2luX2VuZCAoY29tcGFjdCknLGV2ZW50LmNhdCxldmVudC5uYW1lLGV2ZW50LnRzLGV2ZW50U2l6ZUluQnl0ZXMpO2NvbnN0IHNsaWNlPXRoaXMucHJvY2Vzc0NvbXBsZXRlRXZlbnQoZXZlbnQpO2lmKHNsaWNlIT09dW5kZWZpbmVkJiZldmVudC5iaW5kX2lkIT09dW5kZWZpbmVkKXt0aGlzLnByb2Nlc3NGbG93RXZlbnQoZXZlbnQsc2xpY2UpO30KLWJyZWFrO30KLWNhc2UnYic6Y2FzZSdlJzpjYXNlJ24nOmNhc2UnUyc6Y2FzZSdGJzpjYXNlJ1QnOmNhc2UncCc6bW9kZWxTdGF0cy53aWxsUHJvY2Vzc0Jhc2ljVHJhY2VFdmVudCgnYXN5bmMnLGV2ZW50LmNhdCxldmVudC5uYW1lLGV2ZW50LnRzLGV2ZW50U2l6ZUluQnl0ZXMpO3RoaXMucHJvY2Vzc0FzeW5jRXZlbnQoZXZlbnQpO2JyZWFrO2Nhc2UnSSc6Y2FzZSdpJzpjYXNlJ1InOm1vZGVsU3RhdHMud2lsbFByb2Nlc3NCYXNpY1RyYWNlRXZlbnQoJ2luc3RhbnQnLGV2ZW50LmNhdCxldmVudC5uYW1lLGV2ZW50LnRzLGV2ZW50U2l6ZUluQnl0ZXMpO3RoaXMucHJvY2Vzc0luc3RhbnRFdmVudChldmVudCk7YnJlYWs7Y2FzZSdQJzptb2RlbFN0YXRzLndpbGxQcm9jZXNzQmFzaWNUcmFjZUV2ZW50KCdzYW1wbGVzJyxldmVudC5jYXQsZXZlbnQubmFtZSxldmVudC50cyxldmVudFNpemVJbkJ5dGVzKTt0aGlzLnByb2Nlc3NUcmFjZVNhbXBsZUV2ZW50KGV2ZW50KTticmVhaztjYXNlJ0MnOm1vZGVsU3RhdHMud2lsbFByb2Nlc3NCYXNpY1RyYWNlRXZlbnQoJ2NvdW50ZXJzJyxldmVudC5jYXQsZXZlbnQubmFtZSxldmVudC50cyxldmVudFNpemVJbkJ5dGVzKTt0aGlzLnByb2Nlc3NDb3VudGVyRXZlbnQoZXZlbnQpO2JyZWFrO2Nhc2UnTSc6bW9kZWxTdGF0cy53aWxsUHJvY2Vzc0Jhc2ljVHJhY2VFdmVudCgnbWV0YWRhdGEnLGV2ZW50LmNhdCxldmVudC5uYW1lLGV2ZW50LnRzLGV2ZW50U2l6ZUluQnl0ZXMpO3RoaXMucHJvY2Vzc01ldGFkYXRhRXZlbnQoZXZlbnQpO2JyZWFrO2Nhc2UnTic6Y2FzZSdEJzpjYXNlJ08nOm1vZGVsU3RhdHMud2lsbFByb2Nlc3NCYXNpY1RyYWNlRXZlbnQoJ29iamVjdHMnLGV2ZW50LmNhdCxldmVudC5uYW1lLGV2ZW50LnRzLGV2ZW50U2l6ZUluQnl0ZXMpO3RoaXMucHJvY2Vzc09iamVjdEV2ZW50KGV2ZW50KTticmVhaztjYXNlJ3MnOmNhc2UndCc6Y2FzZSdmJzptb2RlbFN0YXRzLndpbGxQcm9jZXNzQmFzaWNUcmFjZUV2ZW50KCdmbG93cycsZXZlbnQuY2F0LGV2ZW50Lm5hbWUsZXZlbnQudHMsZXZlbnRTaXplSW5CeXRlcyk7dGhpcy5wcm9jZXNzRmxvd0V2ZW50KGV2ZW50KTticmVhaztjYXNlJ3YnOm1vZGVsU3RhdHMud2lsbFByb2Nlc3NCYXNpY1RyYWNlRXZlbnQoJ21lbW9yeV9kdW1wcycsZXZlbnQuY2F0LGV2ZW50Lm5hbWUsZXZlbnQudHMsZXZlbnRTaXplSW5CeXRlcyk7dGhpcy5wcm9jZXNzTWVtb3J5RHVtcEV2ZW50KGV2ZW50KTticmVhaztjYXNlJygnOmNhc2UnKSc6dGhpcy5wcm9jZXNzQ29udGV4dEV2ZW50KGV2ZW50KTticmVhaztjYXNlJ2MnOmJyZWFrO2RlZmF1bHQ6bW9kZWxTdGF0cy53aWxsUHJvY2Vzc0Jhc2ljVHJhY2VFdmVudCgndW5rbm93bicsZXZlbnQuY2F0LGV2ZW50Lm5hbWUsZXZlbnQudHMsZXZlbnRTaXplSW5CeXRlcyk7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J1VucmVjb2duaXplZCBldmVudCBwaGFzZTogJysKLWV2ZW50LnBoKycgKCcrZXZlbnQubmFtZSsnKSd9KTt9Ci1yZXR1cm4gb2JvZS5kcm9wO30saW1wb3J0U3RhY2tGcmFtZXNfKHJhd1N0YWNrRnJhbWVzLGlkUHJlZml4KXtjb25zdCBtb2RlbD10aGlzLm1vZGVsXztmb3IoY29uc3QgaWQgaW4gcmF3U3RhY2tGcmFtZXMpe2NvbnN0IHJhd1N0YWNrRnJhbWU9cmF3U3RhY2tGcmFtZXNbaWRdO2NvbnN0IGZ1bGxJZD1pZFByZWZpeCtpZDtjb25zdCB0ZXh0Rm9yQ29sb3I9cmF3U3RhY2tGcmFtZS5jYXRlZ29yeT9yYXdTdGFja0ZyYW1lLmNhdGVnb3J5OnJhd1N0YWNrRnJhbWUubmFtZTtjb25zdCBzdGFja0ZyYW1lPW5ldyB0ci5tb2RlbC5TdGFja0ZyYW1lKHVuZGVmaW5lZCxmdWxsSWQscmF3U3RhY2tGcmFtZS5uYW1lLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyh0ZXh0Rm9yQ29sb3IpKTttb2RlbC5hZGRTdGFja0ZyYW1lKHN0YWNrRnJhbWUpO30KLWZvcihjb25zdCBpZCBpbiByYXdTdGFja0ZyYW1lcyl7Y29uc3QgZnVsbElkPWlkUHJlZml4K2lkO2NvbnN0IHN0YWNrRnJhbWU9bW9kZWwuc3RhY2tGcmFtZXNbZnVsbElkXTtpZihzdGFja0ZyYW1lPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGVycm9yJyk7fQotY29uc3QgcmF3U3RhY2tGcmFtZT1yYXdTdGFja0ZyYW1lc1tpZF07Y29uc3QgcGFyZW50SWQ9cmF3U3RhY2tGcmFtZS5wYXJlbnQ7bGV0IHBhcmVudFN0YWNrRnJhbWU7aWYocGFyZW50SWQ9PT11bmRlZmluZWQpe3BhcmVudFN0YWNrRnJhbWU9dW5kZWZpbmVkO31lbHNle2NvbnN0IHBhcmVudEZ1bGxJZD1pZFByZWZpeCtwYXJlbnRJZDtwYXJlbnRTdGFja0ZyYW1lPW1vZGVsLnN0YWNrRnJhbWVzW3BhcmVudEZ1bGxJZF07aWYocGFyZW50U3RhY2tGcmFtZT09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWV0YWRhdGFfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J01pc3NpbmcgcGFyZW50IGZyYW1lIHdpdGggSUQgJytwYXJlbnRGdWxsSWQrJyBmb3Igc3RhY2sgZnJhbWUgXCcnK3N0YWNrRnJhbWUubmFtZSsnXCcgKElEICcrZnVsbElkKycpLid9KTt9fQotc3RhY2tGcmFtZS5wYXJlbnRGcmFtZT1wYXJlbnRTdGFja0ZyYW1lO30KLWNvbnN0IFByb2ZpbGVOb2RlVHlwZT10ci5tb2RlbC5Qcm9maWxlTm9kZS5zdWJUeXBlcy5nZXRDb25zdHJ1Y3Rvcih1bmRlZmluZWQsJ2xlZ2FjeVNhbXBsZScpO2lmKGlkUHJlZml4PT09J2cnKXtmb3IoY29uc3QgaWQgaW4gcmF3U3RhY2tGcmFtZXMpe2NvbnN0IHJhd1N0YWNrRnJhbWU9cmF3U3RhY2tGcmFtZXNbaWRdO2NvbnN0IHRleHRGb3JDb2xvcj1yYXdTdGFja0ZyYW1lLmNhdGVnb3J5P3Jhd1N0YWNrRnJhbWUuY2F0ZWdvcnk6cmF3U3RhY2tGcmFtZS5uYW1lO2NvbnN0IG5vZGU9dGhpcy5zdGFja0ZyYW1lVHJlZV8uYWRkKG5ldyBQcm9maWxlTm9kZVR5cGUoJ2cnK2lkLHtmdW5jdGlvbk5hbWU6cmF3U3RhY2tGcmFtZS5uYW1lfSx1bmRlZmluZWQpKTtub2RlLmNvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHRleHRGb3JDb2xvcik7bm9kZS5wYXJlbnRJZD1yYXdTdGFja0ZyYW1lLnBhcmVudDt9Ci1mb3IoY29uc3QgaWQgaW4gcmF3U3RhY2tGcmFtZXMpe2NvbnN0IG5vZGU9dGhpcy5zdGFja0ZyYW1lVHJlZV8uZ2V0Tm9kZSgnZycraWQpO2NvbnN0IHBhcmVudElkPW5vZGUucGFyZW50SWQ7bGV0IHBhcmVudE5vZGU9dW5kZWZpbmVkO2lmKHBhcmVudElkIT09dW5kZWZpbmVkKXtwYXJlbnROb2RlPXRoaXMuc3RhY2tGcmFtZVRyZWVfLmdldE5vZGUoJ2cnK3BhcmVudElkKTtpZihwYXJlbnROb2RlPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZXRhZGF0YV9wYXJzZV9lcnJvcicsbWVzc2FnZTonTWlzc2luZyBwYXJlbnQgZnJhbWUgd2l0aCBJRCAnK3BhcmVudElkKycgZm9yIHN0YWNrIGZyYW1lIFwnJytub2RlLm5hbWUrJ1wnIChJRCAnK25vZGUuaWQrJykuJ30pO30KLW5vZGUucGFyZW50Tm9kZT1wYXJlbnROb2RlO319fX0saW1wb3J0T2JqZWN0VHlwZU5hbWVNYXBfKHJhd09iamVjdFR5cGVOYW1lTWFwLHBpZCl7aWYocGlkIGluIHRoaXMub2JqZWN0VHlwZU5hbWVNYXBfKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZXRhZGF0YV9wYXJzZV9lcnJvcicsbWVzc2FnZTonTWFwcGluZyBmcm9tIG9iamVjdCB0eXBlIElEcyB0byBuYW1lcyBwcm92aWRlZCBmb3IgcGlkPScrCi1waWQrJyBtdWx0aXBsZSB0aW1lcy4nfSk7cmV0dXJuO30KLWxldCBvYmplY3RUeXBlTmFtZVByZWZpeD11bmRlZmluZWQ7bGV0IG9iamVjdFR5cGVOYW1lU3VmZml4PXVuZGVmaW5lZDtjb25zdCBvYmplY3RUeXBlTmFtZU1hcD17fTtmb3IoY29uc3Qgb2JqZWN0VHlwZUlkIGluIHJhd09iamVjdFR5cGVOYW1lTWFwKXtjb25zdCByYXdPYmplY3RUeXBlTmFtZT1yYXdPYmplY3RUeXBlTmFtZU1hcFtvYmplY3RUeXBlSWRdO2lmKG9iamVjdFR5cGVOYW1lUHJlZml4PT09dW5kZWZpbmVkKXtmb3IobGV0IGk9MDtpPE9CSkVDVF9UWVBFX05BTUVfUEFUVEVSTlMubGVuZ3RoO2krKyl7Y29uc3QgcGF0dGVybj1PQkpFQ1RfVFlQRV9OQU1FX1BBVFRFUk5TW2ldO2lmKHJhd09iamVjdFR5cGVOYW1lLnN0YXJ0c1dpdGgocGF0dGVybi5wcmVmaXgpJiZyYXdPYmplY3RUeXBlTmFtZS5lbmRzV2l0aChwYXR0ZXJuLnN1ZmZpeCkpe29iamVjdFR5cGVOYW1lUHJlZml4PXBhdHRlcm4ucHJlZml4O29iamVjdFR5cGVOYW1lU3VmZml4PXBhdHRlcm4uc3VmZml4O2JyZWFrO319fQotaWYob2JqZWN0VHlwZU5hbWVQcmVmaXghPT11bmRlZmluZWQmJnJhd09iamVjdFR5cGVOYW1lLnN0YXJ0c1dpdGgob2JqZWN0VHlwZU5hbWVQcmVmaXgpJiZyYXdPYmplY3RUeXBlTmFtZS5lbmRzV2l0aChvYmplY3RUeXBlTmFtZVN1ZmZpeCkpe29iamVjdFR5cGVOYW1lTWFwW29iamVjdFR5cGVJZF09cmF3T2JqZWN0VHlwZU5hbWUuc3Vic3RyaW5nKG9iamVjdFR5cGVOYW1lUHJlZml4Lmxlbmd0aCxyYXdPYmplY3RUeXBlTmFtZS5sZW5ndGgtb2JqZWN0VHlwZU5hbWVTdWZmaXgubGVuZ3RoKTt9ZWxzZXtvYmplY3RUeXBlTmFtZU1hcFtvYmplY3RUeXBlSWRdPXJhd09iamVjdFR5cGVOYW1lO319Ci10aGlzLm9iamVjdFR5cGVOYW1lTWFwX1twaWRdPW9iamVjdFR5cGVOYW1lTWFwO30saW1wb3J0QW5ub3RhdGlvbnNfKCl7Zm9yKGNvbnN0IGlkIGluIHRoaXMudHJhY2VBbm5vdGF0aW9uc18pe2NvbnN0IGFubm90YXRpb249dHIubW9kZWwuQW5ub3RhdGlvbi5mcm9tRGljdElmUG9zc2libGUodGhpcy50cmFjZUFubm90YXRpb25zX1tpZF0pO2lmKCFhbm5vdGF0aW9uKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidhbm5vdGF0aW9uX3dhcm5pbmcnLG1lc3NhZ2U6J1VucmVjb2duaXplZCB0cmFjZUFubm90YXRpb24gdHlwZU5hbWUgXCInKwotdGhpcy50cmFjZUFubm90YXRpb25zX1tpZF0udHlwZU5hbWUrJ1wiJ30pO2NvbnRpbnVlO30KLXRoaXMubW9kZWxfLmFkZEFubm90YXRpb24oYW5ub3RhdGlvbik7fX0sZmluYWxpemVJbXBvcnQoKXtpZih0aGlzLnNvZnR3YXJlTWVhc3VyZWRDcHVDb3VudF8hPT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmtlcm5lbC5zb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnQ9dGhpcy5zb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnRfO30KLXRoaXMuY3JlYXRlRmxvd1NsaWNlc18oKTt0aGlzLmNyZWF0ZUV4cGxpY2l0T2JqZWN0c18oKTt0aGlzLmNyZWF0ZUltcGxpY2l0T2JqZWN0c18oKTt0aGlzLmNyZWF0ZU1lbW9yeUR1bXBzXygpO30sZ2V0U3RhY2tGcmFtZUZvckV2ZW50XyhldmVudCxvcHRfbG9va0ZvckVuZEV2ZW50KXtsZXQgc2Y7bGV0IHN0YWNrO2lmKG9wdF9sb29rRm9yRW5kRXZlbnQpe3NmPWV2ZW50LmVzZjtzdGFjaz1ldmVudC5lc3RhY2s7fWVsc2V7c2Y9ZXZlbnQuc2Y7c3RhY2s9ZXZlbnQuc3RhY2s7fQotaWYoc3RhY2shPT11bmRlZmluZWQmJnNmIT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidzdGFja19mcmFtZV9hbmRfc3RhY2tfZXJyb3InLG1lc3NhZ2U6J0V2ZW50IGF0ICcrZXZlbnQudHMrJyBjYW5ub3QgaGF2ZSBib3RoIGEgc3RhY2sgYW5kIGEgc3RhY2tmcmFtZS4nfSk7cmV0dXJuIHVuZGVmaW5lZDt9Ci1pZihzdGFjayE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMubW9kZWxfLnJlc29sdmVTdGFja1RvU3RhY2tGcmFtZV8oZXZlbnQucGlkLHN0YWNrKTt9Ci1pZihzZj09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHN0YWNrRnJhbWU9dGhpcy5tb2RlbF8uc3RhY2tGcmFtZXNbJ2cnK3NmXTtpZihzdGFja0ZyYW1lPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidzYW1wbGVfaW1wb3J0X2Vycm9yJyxtZXNzYWdlOidObyBmcmFtZSBmb3IgJytzZn0pO3JldHVybjt9Ci1yZXR1cm4gc3RhY2tGcmFtZTt9LHJlc29sdmVTdGFja1RvU3RhY2tGcmFtZV8ocGlkLHN0YWNrKXtyZXR1cm4gdW5kZWZpbmVkO30saW1wb3J0U2FtcGxlRGF0YSgpe2lmKCF0aGlzLnNhbXBsZUV2ZW50c18pcmV0dXJuO2NvbnN0IG09dGhpcy5tb2RlbF87Y29uc3QgZXZlbnRzPXRoaXMuc2FtcGxlRXZlbnRzXztpZih0aGlzLmhhc0V2ZW50c189PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignaW1wb3J0RXZlbnRzIGlzIG5vdCBydW4gYmVmb3JlIGltcG9ydFNhbXBsZURhdGEnKTt9ZWxzZSBpZighdGhpcy5oYXNFdmVudHNfKXtmb3IobGV0IGk9MDtpPGV2ZW50cy5sZW5ndGg7aSsrKXtjb25zdCBldmVudD1ldmVudHNbaV07bS5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQudGlkKS5nZXRPckNyZWF0ZVRocmVhZChldmVudC50aWQpO319Ci1jb25zdCB0aHJlYWRzQnlUaWQ9e307bS5nZXRBbGxUaHJlYWRzKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0aHJlYWRzQnlUaWRbdC50aWRdPXQ7fSk7Zm9yKGxldCBpPTA7aTxldmVudHMubGVuZ3RoO2krKyl7Y29uc3QgZXZlbnQ9ZXZlbnRzW2ldO2NvbnN0IHRocmVhZD10aHJlYWRzQnlUaWRbZXZlbnQudGlkXTtpZih0aHJlYWQ9PT11bmRlZmluZWQpe20uaW1wb3J0V2FybmluZyh7dHlwZTonc2FtcGxlX2ltcG9ydF9lcnJvcicsbWVzc2FnZTonVGhyZWFkICcrZXZlbnRzLnRpZCsnbm90IGZvdW5kJ30pO2NvbnRpbnVlO30KLWxldCBjcHU7aWYoZXZlbnQuY3B1IT09dW5kZWZpbmVkKXtjcHU9bS5rZXJuZWwuZ2V0T3JDcmVhdGVDcHUoZXZlbnQuY3B1KTt9Ci1jb25zdCBsZWFmTm9kZT10aGlzLnN0YWNrRnJhbWVUcmVlXy5nZXROb2RlKCdnJytldmVudC5zZik7Y29uc3Qgc2FtcGxlPW5ldyB0ci5tb2RlbC5TYW1wbGUodGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHMpLGV2ZW50Lm5hbWUsbGVhZk5vZGUsdGhyZWFkLGNwdSxldmVudC53ZWlnaHQpO20uc2FtcGxlcy5wdXNoKHNhbXBsZSk7fX0sY3JlYXRlQXN5bmNTbGljZXNfKCl7aWYodGhpcy5hbGxBc3luY0V2ZW50c18ubGVuZ3RoPT09MClyZXR1cm47dGhpcy5hbGxBc3luY0V2ZW50c18uc29ydChmdW5jdGlvbih4LHkpe2NvbnN0IGQ9eC5ldmVudC50cy15LmV2ZW50LnRzO2lmKGQhPT0wKXJldHVybiBkO3JldHVybiB4LnNlcXVlbmNlTnVtYmVyLXkuc2VxdWVuY2VOdW1iZXI7fSk7Y29uc3QgbGVnYWN5RXZlbnRzPVtdO2NvbnN0IG5lc3RhYmxlQXN5bmNFdmVudHNCeUtleT17fTtjb25zdCBuZXN0YWJsZU1lYXN1cmVBc3luY0V2ZW50c0J5S2V5PXt9O2ZvcihsZXQgaT0wO2k8dGhpcy5hbGxBc3luY0V2ZW50c18ubGVuZ3RoO2krKyl7Y29uc3QgYXN5bmNFdmVudFN0YXRlPXRoaXMuYWxsQXN5bmNFdmVudHNfW2ldO2NvbnN0IGV2ZW50PWFzeW5jRXZlbnRTdGF0ZS5ldmVudDtpZihldmVudC5waD09PSdTJ3x8ZXZlbnQucGg9PT0nRid8fGV2ZW50LnBoPT09J1QnfHxldmVudC5waD09PSdwJyl7bGVnYWN5RXZlbnRzLnB1c2goYXN5bmNFdmVudFN0YXRlKTtjb250aW51ZTt9Ci1pZihldmVudC5jYXQ9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2FzeW5jX3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidOZXN0YWJsZSBhc3luYyBldmVudHMgKHBoOiBiLCBlLCBvciBuKSByZXF1aXJlIGEgJysnY2F0IHBhcmFtZXRlci4nfSk7Y29udGludWU7fQotaWYoZXZlbnQubmFtZT09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonYXN5bmNfc2xpY2VfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J05lc3RhYmxlIGFzeW5jIGV2ZW50cyAocGg6IGIsIGUsIG9yIG4pIHJlcXVpcmUgYSAnKyduYW1lIHBhcmFtZXRlci4nfSk7Y29udGludWU7fQotY29uc3QgaWQ9VHJhY2VFdmVudEltcG9ydGVyLnNjb3BlZElkRm9yRXZlbnRfKGV2ZW50KTtpZihpZD09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonYXN5bmNfc2xpY2VfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J05lc3RhYmxlIGFzeW5jIGV2ZW50cyAocGg6IGIsIGUsIG9yIG4pIHJlcXVpcmUgYW4gJysnaWQgcGFyYW1ldGVyLid9KTtjb250aW51ZTt9Ci1pZihldmVudC5jYXQ9PT0nYmxpbmsudXNlcl90aW1pbmcnKXtjb25zdCBtYXRjaGVkPS8oW15cLzpdKyk6KFteXC86XSspXC8/KC4qKS8uZXhlYyhldmVudC5uYW1lKTtpZihtYXRjaGVkIT09bnVsbCl7Y29uc3Qga2V5PW1hdGNoZWRbMV0rJzonK2V2ZW50LmNhdDtldmVudC5hcmdzPUpTT04ucGFyc2UoQmFzZTY0LmF0b2IobWF0Y2hlZFszXSl8fCd7fScpO2lmKG5lc3RhYmxlTWVhc3VyZUFzeW5jRXZlbnRzQnlLZXlba2V5XT09PXVuZGVmaW5lZCl7bmVzdGFibGVNZWFzdXJlQXN5bmNFdmVudHNCeUtleVtrZXldPVtdO30KLW5lc3RhYmxlTWVhc3VyZUFzeW5jRXZlbnRzQnlLZXlba2V5XS5wdXNoKGFzeW5jRXZlbnRTdGF0ZSk7Y29udGludWU7fX0KLWNvbnN0IGtleT1ldmVudC5jYXQrJzonK2lkLnRvU3RyaW5nV2l0aERlbGltaXRlcignOicpO2lmKG5lc3RhYmxlQXN5bmNFdmVudHNCeUtleVtrZXldPT09dW5kZWZpbmVkKXtuZXN0YWJsZUFzeW5jRXZlbnRzQnlLZXlba2V5XT1bXTt9Ci1uZXN0YWJsZUFzeW5jRXZlbnRzQnlLZXlba2V5XS5wdXNoKGFzeW5jRXZlbnRTdGF0ZSk7fQotdGhpcy5jcmVhdGVMZWdhY3lBc3luY1NsaWNlc18obGVnYWN5RXZlbnRzKTt0aGlzLmNyZWF0ZU5lc3RhYmxlQXN5bmNTbGljZXNfKG5lc3RhYmxlTWVhc3VyZUFzeW5jRXZlbnRzQnlLZXkpO3RoaXMuY3JlYXRlTmVzdGFibGVBc3luY1NsaWNlc18obmVzdGFibGVBc3luY0V2ZW50c0J5S2V5KTt9LGNyZWF0ZUxlZ2FjeUFzeW5jU2xpY2VfKGV2ZW50cyl7Y29uc3QgYXN5bmNFdmVudFN0YXRlPWV2ZW50c1tldmVudHMubGVuZ3RoLTFdO2NvbnN0IGV2ZW50PWFzeW5jRXZlbnRTdGF0ZS5ldmVudDtjb25zdCBuYW1lPWV2ZW50Lm5hbWU7Y29uc3QgaWQ9VHJhY2VFdmVudEltcG9ydGVyLnNjb3BlZElkRm9yRXZlbnRfKGV2ZW50KTtjb25zdCBrZXk9aWQudG9TdHJpbmdXaXRoRGVsaW1pdGVyKCc6Jyk7Y29uc3QgYXN5bmNTbGljZUNvbnN0cnVjdG9yPXRyLm1vZGVsLkFzeW5jU2xpY2Uuc3ViVHlwZXMuZ2V0Q29uc3RydWN0b3IoZXZlbnRzWzBdLmV2ZW50LmNhdCxuYW1lKTtsZXQgZHVyYXRpb247aWYoZXZlbnQudHMhPT11bmRlZmluZWQpe2R1cmF0aW9uPXRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKGV2ZW50LnRzLWV2ZW50c1swXS5ldmVudC50cyk7fQotY29uc3Qgc2xpY2U9bmV3IGFzeW5jU2xpY2VDb25zdHJ1Y3RvcihldmVudHNbMF0uZXZlbnQuY2F0LG5hbWUsZ2V0RXZlbnRDb2xvcihldmVudHNbMF0uZXZlbnQpLHRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKGV2ZW50c1swXS5ldmVudC50cyksT2JqZWN0LmFzc2lnbih7fSxldmVudHNbMF0uZXZlbnQuYXJncyxldmVudC5hcmdzKSxkdXJhdGlvbnx8MCx0cnVlLHVuZGVmaW5lZCx1bmRlZmluZWQsZXZlbnRzWzBdLmV2ZW50LmFyZ3NTdHJpcHBlZCk7aWYoZHVyYXRpb249PT11bmRlZmluZWQpe3NsaWNlLmRpZE5vdEZpbmlzaD10cnVlO3NsaWNlLmVycm9yPSdTbGljZSBoYXMgbm8gbWF0Y2hpbmcgRU5ELiBFbmQgdGltZSBoYXMgYmVlbiBhZGp1c3RlZC4nO3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2FzeW5jX3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidMZWdhY3kgYXN5bmMgQkVHSU4gZXZlbnQgYXQgJysKLWV2ZW50c1swXS5ldmVudC50cysnIHdpdGggbmFtZT0iJysKLW5hbWUrJyIgYW5kIGlkPScra2V5Kycgd2FzIHVubWF0Y2hlZC4nfSk7fQotc2xpY2Uuc3RhcnRUaHJlYWQ9ZXZlbnRzWzBdLnRocmVhZDtzbGljZS5lbmRUaHJlYWQ9YXN5bmNFdmVudFN0YXRlLnRocmVhZDtzbGljZS5pZD1rZXk7Y29uc3Qgc3RlcFR5cGU9ZXZlbnRzWzFdLmV2ZW50LnBoO2xldCBpc1ZhbGlkPXRydWU7Zm9yKGxldCBqPTE7ajxldmVudHMubGVuZ3RoLTE7KytqKXtpZihldmVudHNbal0uZXZlbnQucGg9PT0nVCd8fGV2ZW50c1tqXS5ldmVudC5waD09PSdwJyl7aXNWYWxpZD10aGlzLmFzc2VydFN0ZXBUeXBlTWF0Y2hlc18oc3RlcFR5cGUsZXZlbnRzW2pdKTtpZighaXNWYWxpZClicmVhazt9Ci1pZihldmVudHNbal0uZXZlbnQucGg9PT0nUycpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2FzeW5jX3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidBdCAnK2V2ZW50c1tqXS5ldmVudC50cysnLCBhIHNsaWNlIG5hbWVkICInKwotbmFtZSsnIiB3aXRoIGlkPScraWQrJyBoYWQgYSBzdGVwIGJlZm9yZSB0aGUgc3RhcnQgZXZlbnQuJ30pO2NvbnRpbnVlO30KLWlmKGV2ZW50c1tqXS5ldmVudC5waD09PSdGJyl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonYXN5bmNfc2xpY2VfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J0F0ICcrZXZlbnRzW2pdLmV2ZW50LnRzKycsIGEgc2xpY2UgbmFtZWQgJysKLW5hbWUrJyB3aXRoIGlkPScraWQrJyBoYWQgYSBzdGVwIGFmdGVyIHRoZSBmaW5pc2ggZXZlbnQuJ30pO2NvbnRpbnVlO30KLWNvbnN0IHN0YXJ0SW5kZXg9aisoc3RlcFR5cGU9PT0nVCc/MDotMSk7Y29uc3QgZW5kSW5kZXg9c3RhcnRJbmRleCsxO2xldCBzdWJOYW1lPW5hbWU7aWYoIWV2ZW50c1tqXS5ldmVudC5hcmdzU3RyaXBwZWQmJihldmVudHNbal0uZXZlbnQucGg9PT0nVCd8fGV2ZW50c1tqXS5ldmVudC5waD09PSdwJykpe3N1Yk5hbWU9ZXZlbnRzW2pdLmV2ZW50LmFyZ3Muc3RlcDt9Ci1jb25zdCBhc3luY1NsaWNlQ29uc3RydWN0b3I9dHIubW9kZWwuQXN5bmNTbGljZS5zdWJUeXBlcy5nZXRDb25zdHJ1Y3RvcihldmVudHNbMF0uZXZlbnQuY2F0LHN1Yk5hbWUpO2xldCBkdXJhdGlvbjtpZihldmVudHNbZW5kSW5kZXhdLmV2ZW50LnRzIT09dW5kZWZpbmVkKXtkdXJhdGlvbj10aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudHNbZW5kSW5kZXhdLmV2ZW50LnRzLWV2ZW50c1tzdGFydEluZGV4XS5ldmVudC50cyk7fQotY29uc3Qgc3ViU2xpY2U9bmV3IGFzeW5jU2xpY2VDb25zdHJ1Y3RvcihldmVudHNbMF0uZXZlbnQuY2F0LHN1Yk5hbWUsZ2V0RXZlbnRDb2xvcihldmVudHNbMF0uZXZlbnQsc3ViTmFtZStqKSx0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudHNbc3RhcnRJbmRleF0uZXZlbnQudHMpLHRoaXMuZGVlcENvcHlJZk5lZWRlZF8oZXZlbnRzW2pdLmV2ZW50LmFyZ3MpLGR1cmF0aW9ufHwwLHVuZGVmaW5lZCx1bmRlZmluZWQsZXZlbnRzW3N0YXJ0SW5kZXhdLmV2ZW50LmFyZ3NTdHJpcHBlZCk7aWYoZHVyYXRpb249PT11bmRlZmluZWQpe3N1YlNsaWNlLmRpZE5vdEZpbmlzaD10cnVlO3N1YlNsaWNlLmVycm9yPSdTbGljZSBoYXMgbm8gbWF0Y2hpbmcgRU5ELiBFbmQgdGltZSBoYXMgYmVlbiBhZGp1c3RlZC4nO30KLXN1YlNsaWNlLnN0YXJ0VGhyZWFkPWV2ZW50c1tzdGFydEluZGV4XS50aHJlYWQ7c3ViU2xpY2UuZW5kVGhyZWFkPWV2ZW50c1tlbmRJbmRleF0udGhyZWFkO3N1YlNsaWNlLmlkPWtleTtzbGljZS5zdWJTbGljZXMucHVzaChzdWJTbGljZSk7fQotaWYoaXNWYWxpZCl7c2xpY2Uuc3RhcnRUaHJlYWQuYXN5bmNTbGljZUdyb3VwLnB1c2goc2xpY2UpO319LGNyZWF0ZUxlZ2FjeUFzeW5jU2xpY2VzXyhsZWdhY3lFdmVudHMpe2lmKGxlZ2FjeUV2ZW50cy5sZW5ndGg9PT0wKXJldHVybjtsZWdhY3lFdmVudHMuc29ydChmdW5jdGlvbih4LHkpe2NvbnN0IGQ9eC5ldmVudC50cy15LmV2ZW50LnRzO2lmKGQhPT0wKXJldHVybiBkO3JldHVybiB4LnNlcXVlbmNlTnVtYmVyLXkuc2VxdWVuY2VOdW1iZXI7fSk7Y29uc3QgYXN5bmNFdmVudFN0YXRlc0J5TmFtZVRoZW5JRD17fTtmb3IobGV0IGk9MDtpPGxlZ2FjeUV2ZW50cy5sZW5ndGg7aSsrKXtjb25zdCBhc3luY0V2ZW50U3RhdGU9bGVnYWN5RXZlbnRzW2ldO2NvbnN0IGV2ZW50PWFzeW5jRXZlbnRTdGF0ZS5ldmVudDtjb25zdCBuYW1lPWV2ZW50Lm5hbWU7aWYobmFtZT09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonYXN5bmNfc2xpY2VfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J0FzeW5jIGV2ZW50cyAocGg6IFMsIFQsIHAsIG9yIEYpIHJlcXVpcmUgYSBuYW1lICcrJyBwYXJhbWV0ZXIuJ30pO2NvbnRpbnVlO30KLWNvbnN0IGlkPVRyYWNlRXZlbnRJbXBvcnRlci5zY29wZWRJZEZvckV2ZW50XyhldmVudCk7aWYoaWQ9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2FzeW5jX3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidBc3luYyBldmVudHMgKHBoOiBTLCBULCBwLCBvciBGKSByZXF1aXJlIGFuIGlkIHBhcmFtZXRlci4nfSk7Y29udGludWU7fQotY29uc3Qga2V5PWlkLnRvU3RyaW5nV2l0aERlbGltaXRlcignOicpO2lmKGV2ZW50LnBoPT09J1MnKXtpZihhc3luY0V2ZW50U3RhdGVzQnlOYW1lVGhlbklEW25hbWVdPT09dW5kZWZpbmVkKXthc3luY0V2ZW50U3RhdGVzQnlOYW1lVGhlbklEW25hbWVdPXt9O30KLWlmKGFzeW5jRXZlbnRTdGF0ZXNCeU5hbWVUaGVuSURbbmFtZV1ba2V5XSl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonYXN5bmNfc2xpY2VfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J0F0ICcrZXZlbnQudHMrJywgYSBzbGljZSBvZiB0aGUgc2FtZSBpZCAnK2lkKycgd2FzIGFscmFkeSBvcGVuLid9KTtjb250aW51ZTt9Ci1hc3luY0V2ZW50U3RhdGVzQnlOYW1lVGhlbklEW25hbWVdW2tleV09W107YXN5bmNFdmVudFN0YXRlc0J5TmFtZVRoZW5JRFtuYW1lXVtrZXldLnB1c2goYXN5bmNFdmVudFN0YXRlKTt9ZWxzZXtpZihhc3luY0V2ZW50U3RhdGVzQnlOYW1lVGhlbklEW25hbWVdPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidhc3luY19zbGljZV9wYXJzZV9lcnJvcicsbWVzc2FnZTpgQXQgJHtldmVudC50c30sIG5vIHNsaWNlIG5hbWVkICIke25hbWV9IiB3YXMgb3Blbi5gLH0pO2NvbnRpbnVlO30KLWlmKGFzeW5jRXZlbnRTdGF0ZXNCeU5hbWVUaGVuSURbbmFtZV1ba2V5XT09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonYXN5bmNfc2xpY2VfcGFyc2VfZXJyb3InLG1lc3NhZ2U6YEF0ICR7ZXZlbnQudHN9LCBubyBzbGljZSBuYW1lZCAiJHtuYW1lfSIgd2l0aCBpZD0ke2lkfSB3YXMgYCsnb3Blbi4nLH0pO2NvbnRpbnVlO30KLWNvbnN0IGV2ZW50cz1hc3luY0V2ZW50U3RhdGVzQnlOYW1lVGhlbklEW25hbWVdW2tleV07ZXZlbnRzLnB1c2goYXN5bmNFdmVudFN0YXRlKTtpZihldmVudC5waD09PSdGJyl7dGhpcy5jcmVhdGVMZWdhY3lBc3luY1NsaWNlXyhldmVudHMpO2RlbGV0ZSBhc3luY0V2ZW50U3RhdGVzQnlOYW1lVGhlbklEW25hbWVdW2tleV07fX19Ci1mb3IoY29uc3RbbmFtZSxzdGF0ZXNCeUlEXW9mCi1PYmplY3QuZW50cmllcyhhc3luY0V2ZW50U3RhdGVzQnlOYW1lVGhlbklEKSl7Zm9yKGNvbnN0W2lkLHN0YXRlc11vZiBPYmplY3QuZW50cmllcyhzdGF0ZXNCeUlEKSl7Y29uc3Qgc3RhcnRFdmVudD1zdGF0ZXNbMF0uZXZlbnQ7c3RhdGVzLnB1c2goe3NlcXVlbmNlTnVtYmVyOjErc3RhdGVzW3N0YXRlcy5sZW5ndGgtMV0uc2VxdWVuY2VOdW1iZXIsZXZlbnQ6e3BoOidGJyxuYW1lLGlkOnN0YXJ0RXZlbnQuaWQsaWQyOnN0YXJ0RXZlbnQuaWQyLHNjb3BlOnN0YXJ0RXZlbnQuc2NvcGUscGlkOnN0YXJ0RXZlbnQucGlkLHRpZDpzdGFydEV2ZW50LnRpZCxjYXQ6c3RhcnRFdmVudC5jYXQsYXJnczp7fSx9LHRocmVhZDp0aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3Moc3RhcnRFdmVudC5waWQpLmdldE9yQ3JlYXRlVGhyZWFkKHN0YXJ0RXZlbnQudGlkKSx9KTt0aGlzLmNyZWF0ZUxlZ2FjeUFzeW5jU2xpY2VfKHN0YXRlcyk7fX19LGNyZWF0ZU5lc3RhYmxlQXN5bmNTbGljZXNfKG5lc3RhYmxlRXZlbnRzQnlLZXkpe2Zvcihjb25zdCBrZXkgaW4gbmVzdGFibGVFdmVudHNCeUtleSl7Y29uc3QgZXZlbnRTdGF0ZUVudHJpZXM9bmVzdGFibGVFdmVudHNCeUtleVtrZXldO2NvbnN0IHBhcmVudFN0YWNrPVtdO2ZvcihsZXQgaT0wO2k8ZXZlbnRTdGF0ZUVudHJpZXMubGVuZ3RoOysraSl7Y29uc3QgZXZlbnRTdGF0ZUVudHJ5PWV2ZW50U3RhdGVFbnRyaWVzW2ldO2lmKGV2ZW50U3RhdGVFbnRyeS5ldmVudC5waD09PSdlJyl7bGV0IHBhcmVudEluZGV4PS0xO2ZvcihsZXQgaz1wYXJlbnRTdGFjay5sZW5ndGgtMTtrPj0wOy0tayl7aWYocGFyZW50U3RhY2tba10uZXZlbnQubmFtZT09PWV2ZW50U3RhdGVFbnRyeS5ldmVudC5uYW1lKXtwYXJlbnRJbmRleD1rO2JyZWFrO319Ci1pZihwYXJlbnRJbmRleD09PS0xKXtldmVudFN0YXRlRW50cnkuZmluaXNoZWQ9ZmFsc2U7fWVsc2V7cGFyZW50U3RhY2tbcGFyZW50SW5kZXhdLmVuZD1ldmVudFN0YXRlRW50cnk7d2hpbGUocGFyZW50SW5kZXg8cGFyZW50U3RhY2subGVuZ3RoKXtwYXJlbnRTdGFjay5wb3AoKTt9fX0KLWlmKHBhcmVudFN0YWNrLmxlbmd0aD4wKXtldmVudFN0YXRlRW50cnkucGFyZW50RW50cnk9cGFyZW50U3RhY2tbcGFyZW50U3RhY2subGVuZ3RoLTFdO30KLWlmKGV2ZW50U3RhdGVFbnRyeS5ldmVudC5waD09PSdiJyl7cGFyZW50U3RhY2sucHVzaChldmVudFN0YXRlRW50cnkpO319Ci1jb25zdCB0b3BMZXZlbFNsaWNlcz1bXTtmb3IobGV0IGk9MDtpPGV2ZW50U3RhdGVFbnRyaWVzLmxlbmd0aDsrK2kpe2NvbnN0IGV2ZW50U3RhdGVFbnRyeT1ldmVudFN0YXRlRW50cmllc1tpXTtpZihldmVudFN0YXRlRW50cnkuZXZlbnQucGg9PT0nZScmJmV2ZW50U3RhdGVFbnRyeS5maW5pc2hlZD09PXVuZGVmaW5lZCl7Y29udGludWU7fQotbGV0IHN0YXJ0U3RhdGU9dW5kZWZpbmVkO2xldCBlbmRTdGF0ZT11bmRlZmluZWQ7bGV0IHNsaWNlQXJncz1ldmVudFN0YXRlRW50cnkuZXZlbnQuYXJnc3x8e307bGV0IHNsaWNlRXJyb3I9dW5kZWZpbmVkO2NvbnN0IGlkPVRyYWNlRXZlbnRJbXBvcnRlci5zY29wZWRJZEZvckV2ZW50XyhldmVudFN0YXRlRW50cnkuZXZlbnQpO2lmKGV2ZW50U3RhdGVFbnRyeS5ldmVudC5waD09PSduJyl7c3RhcnRTdGF0ZT1ldmVudFN0YXRlRW50cnk7ZW5kU3RhdGU9ZXZlbnRTdGF0ZUVudHJ5O31lbHNlIGlmKGV2ZW50U3RhdGVFbnRyeS5ldmVudC5waD09PSdiJyl7aWYoZXZlbnRTdGF0ZUVudHJ5LmVuZD09PXVuZGVmaW5lZCl7ZXZlbnRTdGF0ZUVudHJ5LmVuZD1ldmVudFN0YXRlRW50cmllc1tldmVudFN0YXRlRW50cmllcy5sZW5ndGgtMV07c2xpY2VFcnJvcj0nU2xpY2UgaGFzIG5vIG1hdGNoaW5nIEVORC4gRW5kIHRpbWUgaGFzIGJlZW4gYWRqdXN0ZWQuJzt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidhc3luY19zbGljZV9wYXJzZV9lcnJvcicsbWVzc2FnZTonTmVzdGFibGUgYXN5bmMgQkVHSU4gZXZlbnQgYXQgJysKLWV2ZW50U3RhdGVFbnRyeS5ldmVudC50cysnIHdpdGggbmFtZT0iJysKLWV2ZW50U3RhdGVFbnRyeS5ldmVudC5uYW1lKyciIGFuZCBpZD0nK2lkKycgd2FzIHVubWF0Y2hlZC4nfSk7fWVsc2V7ZnVuY3Rpb24gY29uY2F0ZW5hdGVBcmd1bWVudHMoYXJnczEsYXJnczIpe2lmKGFyZ3MxLnBhcmFtcz09PXVuZGVmaW5lZHx8YXJnczIucGFyYW1zPT09dW5kZWZpbmVkKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxhcmdzMSxhcmdzMik7fQotY29uc3QgYXJnczM9e307YXJnczMucGFyYW1zPU9iamVjdC5hc3NpZ24oe30sYXJnczEucGFyYW1zLGFyZ3MyLnBhcmFtcyk7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sYXJnczEsYXJnczIsYXJnczMpO30KLWNvbnN0IGVuZEFyZ3M9ZXZlbnRTdGF0ZUVudHJ5LmVuZC5ldmVudC5hcmdzfHx7fTtzbGljZUFyZ3M9Y29uY2F0ZW5hdGVBcmd1bWVudHMoc2xpY2VBcmdzLGVuZEFyZ3MpO30KLXN0YXJ0U3RhdGU9ZXZlbnRTdGF0ZUVudHJ5O2VuZFN0YXRlPWV2ZW50U3RhdGVFbnRyeS5lbmQ7fWVsc2V7c2xpY2VFcnJvcj0nU2xpY2UgaGFzIG5vIG1hdGNoaW5nIEJFR0lOLiBTdGFydCB0aW1lIGhhcyBiZWVuIGFkanVzdGVkLic7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonYXN5bmNfc2xpY2VfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J05lc3RhYmxlIGFzeW5jIEVORCBldmVudCBhdCAnKwotZXZlbnRTdGF0ZUVudHJ5LmV2ZW50LnRzKycgd2l0aCBuYW1lPScrCi1ldmVudFN0YXRlRW50cnkuZXZlbnQubmFtZSsnIGFuZCBpZD0nK2lkKycgd2FzIHVubWF0Y2hlZC4nfSk7c3RhcnRTdGF0ZT1ldmVudFN0YXRlRW50cmllc1swXTtlbmRTdGF0ZT1ldmVudFN0YXRlRW50cnk7fQotY29uc3QgaXNUb3BMZXZlbD0oZXZlbnRTdGF0ZUVudHJ5LnBhcmVudEVudHJ5PT09dW5kZWZpbmVkKTtjb25zdCBhc3luY1NsaWNlQ29uc3RydWN0b3I9dHIubW9kZWwuQXN5bmNTbGljZS5zdWJUeXBlcy5nZXRDb25zdHJ1Y3RvcihldmVudFN0YXRlRW50cnkuZXZlbnQuY2F0LGV2ZW50U3RhdGVFbnRyeS5ldmVudC5uYW1lKTtsZXQgdGhyZWFkU3RhcnQ9dW5kZWZpbmVkO2xldCB0aHJlYWREdXJhdGlvbj11bmRlZmluZWQ7aWYoc3RhcnRTdGF0ZS5ldmVudC50dHMmJnN0YXJ0U3RhdGUuZXZlbnQudXNlX2FzeW5jX3R0cyl7dGhyZWFkU3RhcnQ9dGhpcy50b01vZGVsVGltZUZyb21Vc18oc3RhcnRTdGF0ZS5ldmVudC50dHMpO2lmKGVuZFN0YXRlLmV2ZW50LnR0cyl7Y29uc3QgdGhyZWFkRW5kPXRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKGVuZFN0YXRlLmV2ZW50LnR0cyk7dGhyZWFkRHVyYXRpb249dGhyZWFkRW5kLXRocmVhZFN0YXJ0O319Ci1jb25zdCBzbGljZT1uZXcgYXN5bmNTbGljZUNvbnN0cnVjdG9yKGV2ZW50U3RhdGVFbnRyeS5ldmVudC5jYXQsZXZlbnRTdGF0ZUVudHJ5LmV2ZW50Lm5hbWUsZ2V0RXZlbnRDb2xvcihlbmRTdGF0ZS5ldmVudCksdGhpcy50b01vZGVsVGltZUZyb21Vc18oc3RhcnRTdGF0ZS5ldmVudC50cyksc2xpY2VBcmdzLHRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKGVuZFN0YXRlLmV2ZW50LnRzLXN0YXJ0U3RhdGUuZXZlbnQudHMpLGlzVG9wTGV2ZWwsdGhyZWFkU3RhcnQsdGhyZWFkRHVyYXRpb24sc3RhcnRTdGF0ZS5ldmVudC5hcmdzU3RyaXBwZWQpO3NsaWNlLnN0YXJ0VGhyZWFkPXN0YXJ0U3RhdGUudGhyZWFkO3NsaWNlLmVuZFRocmVhZD1lbmRTdGF0ZS50aHJlYWQ7c2xpY2Uuc3RhcnRTdGFja0ZyYW1lPXRoaXMuZ2V0U3RhY2tGcmFtZUZvckV2ZW50XyhzdGFydFN0YXRlLmV2ZW50KTtzbGljZS5lbmRTdGFja0ZyYW1lPXRoaXMuZ2V0U3RhY2tGcmFtZUZvckV2ZW50XyhlbmRTdGF0ZS5ldmVudCk7c2xpY2UuaWQ9a2V5O2lmKHNsaWNlRXJyb3IhPT11bmRlZmluZWQpe3NsaWNlLmVycm9yPXNsaWNlRXJyb3I7fQotZXZlbnRTdGF0ZUVudHJ5LnNsaWNlPXNsaWNlO2lmKGlzVG9wTGV2ZWwpe3RvcExldmVsU2xpY2VzLnB1c2goc2xpY2UpO31lbHNlIGlmKGV2ZW50U3RhdGVFbnRyeS5wYXJlbnRFbnRyeS5zbGljZSE9PXVuZGVmaW5lZCl7ZXZlbnRTdGF0ZUVudHJ5LnBhcmVudEVudHJ5LnNsaWNlLnN1YlNsaWNlcy5wdXNoKHNsaWNlKTt9fQotZm9yKGxldCBzaT0wO3NpPHRvcExldmVsU2xpY2VzLmxlbmd0aDtzaSsrKXt0b3BMZXZlbFNsaWNlc1tzaV0uc3RhcnRUaHJlYWQuYXN5bmNTbGljZUdyb3VwLnB1c2godG9wTGV2ZWxTbGljZXNbc2ldKTt9fX0sYXNzZXJ0U3RlcFR5cGVNYXRjaGVzXyhzdGVwVHlwZSxldmVudCl7aWYoc3RlcFR5cGUhPT1ldmVudC5ldmVudC5waCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonYXN5bmNfc2xpY2VfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J0F0ICcrZXZlbnQuZXZlbnQudHMrJywgYSBzbGljZSBuYW1lZCAnKwotZXZlbnQuZXZlbnQubmFtZSsnIHdpdGggaWQ9JysKLVRyYWNlRXZlbnRJbXBvcnRlci5zY29wZWRJZEZvckV2ZW50XyhldmVudC5ldmVudCkrJyBoYWQgYm90aCBiZWdpbiBhbmQgZW5kIHN0ZXBzLCB3aGljaCBpcyBub3QgYWxsb3dlZC4nfSk7cmV0dXJuIGZhbHNlO30KLXJldHVybiB0cnVlO30sdmFsaWRhdGVGbG93RXZlbnRfKGV2ZW50KXtpZihldmVudC5uYW1lPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidmbG93X3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidGbG93IGV2ZW50cyAocGg6IHMsIHQgb3IgZikgcmVxdWlyZSBhIG5hbWUgcGFyYW1ldGVyLid9KTtyZXR1cm4gZmFsc2U7fQotaWYoZXZlbnQucGg9PT0ncyd8fGV2ZW50LnBoPT09J2YnfHxldmVudC5waD09PSd0Jyl7aWYoZXZlbnQuaWQ9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2Zsb3dfc2xpY2VfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J0Zsb3cgZXZlbnRzIChwaDogcywgdCBvciBmKSByZXF1aXJlIGFuIGlkIHBhcmFtZXRlci4nfSk7cmV0dXJuIGZhbHNlO30KLXJldHVybiB0cnVlO30KLWlmKGV2ZW50LmJpbmRfaWQpe2lmKGV2ZW50LmZsb3dfaW49PT11bmRlZmluZWQmJmV2ZW50LmZsb3dfb3V0PT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidmbG93X3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidGbG93IHByb2R1Y2VyIG9yIGNvbnN1bWVyIHJlcXVpcmUgZmxvd19pbiBvciBmbG93X291dC4nfSk7cmV0dXJuIGZhbHNlO30KLXJldHVybiB0cnVlO30KLXJldHVybiBmYWxzZTt9LGNyZWF0ZUZsb3dTbGljZXNfKCl7aWYodGhpcy5hbGxGbG93RXZlbnRzXy5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBjcmVhdGVGbG93RXZlbnQ9ZnVuY3Rpb24odGhyZWFkLGV2ZW50LG9wdF9zbGljZSl7bGV0IHN0YXJ0U2xpY2U7bGV0IGZsb3dJZDtsZXQgZmxvd1N0YXJ0VHM7aWYoZXZlbnQuYmluZF9pZCl7c3RhcnRTbGljZT1vcHRfc2xpY2U7Zmxvd0lkPWV2ZW50LmJpbmRfaWQ7Zmxvd1N0YXJ0VHM9dGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHMrZXZlbnQuZHVyKTt9ZWxzZXtjb25zdCB0cz10aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cyk7c3RhcnRTbGljZT10aHJlYWQuc2xpY2VHcm91cC5maW5kU2xpY2VBdFRzKHRzKTtpZihzdGFydFNsaWNlPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7Zmxvd0lkPWV2ZW50LmlkO2Zsb3dTdGFydFRzPXRzO30KLWNvbnN0IGZsb3dFdmVudD1uZXcgdHIubW9kZWwuRmxvd0V2ZW50KGV2ZW50LmNhdCxmbG93SWQsZXZlbnQubmFtZSxnZXRFdmVudENvbG9yKGV2ZW50KSxmbG93U3RhcnRUcyx0aGlzLmRlZXBDb3B5QWx3YXlzXyhldmVudC5hcmdzKSk7Zmxvd0V2ZW50LnN0YXJ0U2xpY2U9c3RhcnRTbGljZTtmbG93RXZlbnQuc3RhcnRTdGFja0ZyYW1lPXRoaXMuZ2V0U3RhY2tGcmFtZUZvckV2ZW50XyhldmVudCk7Zmxvd0V2ZW50LmVuZFN0YWNrRnJhbWU9dW5kZWZpbmVkO3N0YXJ0U2xpY2Uub3V0Rmxvd0V2ZW50cy5wdXNoKGZsb3dFdmVudCk7cmV0dXJuIGZsb3dFdmVudDt9LmJpbmQodGhpcyk7Y29uc3QgZmluaXNoRmxvd0V2ZW50V2l0aD1mdW5jdGlvbihmbG93RXZlbnQsdGhyZWFkLGV2ZW50LHJlZkd1aWQsYmluZFRvUGFyZW50LG9wdF9zbGljZSl7bGV0IGVuZFNsaWNlO2lmKGV2ZW50LmJpbmRfaWQpe2VuZFNsaWNlPW9wdF9zbGljZTt9ZWxzZXtjb25zdCB0cz10aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cyk7aWYoYmluZFRvUGFyZW50KXtlbmRTbGljZT10aHJlYWQuc2xpY2VHcm91cC5maW5kU2xpY2VBdFRzKHRzKTt9ZWxzZXtlbmRTbGljZT10aHJlYWQuc2xpY2VHcm91cC5maW5kTmV4dFNsaWNlQWZ0ZXIodHMscmVmR3VpZCk7fQotaWYoZW5kU2xpY2U9PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO30KLWVuZFNsaWNlLmluRmxvd0V2ZW50cy5wdXNoKGZsb3dFdmVudCk7Zmxvd0V2ZW50LmVuZFNsaWNlPWVuZFNsaWNlO2Zsb3dFdmVudC5kdXJhdGlvbj10aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cyktZmxvd0V2ZW50LnN0YXJ0O2Zsb3dFdmVudC5lbmRTdGFja0ZyYW1lPXRoaXMuZ2V0U3RhY2tGcmFtZUZvckV2ZW50XyhldmVudCk7dGhpcy5tZXJnZUFyZ3NJbnRvXyhmbG93RXZlbnQuYXJncyxldmVudC5hcmdzLGZsb3dFdmVudC50aXRsZSk7cmV0dXJuIHRydWU7fS5iaW5kKHRoaXMpO2NvbnN0IHByb2Nlc3NGbG93Q29uc3VtZXI9ZnVuY3Rpb24oZmxvd0lkVG9FdmVudCxzbGljZUd1aWRUb0V2ZW50LGV2ZW50LHNsaWNlKXtsZXQgZmxvd0V2ZW50PWZsb3dJZFRvRXZlbnRbZXZlbnQuYmluZF9pZF07aWYoZmxvd0V2ZW50PT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidmbG93X3NsaWNlX29yZGVyaW5nX2Vycm9yJyxtZXNzYWdlOidGbG93IGNvbnN1bWVyICcrZXZlbnQuYmluZF9pZCsnIGRvZXMgbm90IGhhdmUgJysnYSBmbG93IHByb2R1Y2VyJ30pO3JldHVybiBmYWxzZTt9ZWxzZSBpZihmbG93RXZlbnQuZW5kU2xpY2Upe2NvbnN0IGZsb3dQcm9kdWNlcj1mbG93RXZlbnQuc3RhcnRTbGljZTtmbG93RXZlbnQ9Y3JlYXRlRmxvd0V2ZW50KHVuZGVmaW5lZCxzbGljZUd1aWRUb0V2ZW50W2Zsb3dQcm9kdWNlci5ndWlkXSxmbG93UHJvZHVjZXIpO30KLWNvbnN0IHJlZkd1aWQ9dW5kZWZpbmVkO2NvbnN0IG9rPWZpbmlzaEZsb3dFdmVudFdpdGgoZmxvd0V2ZW50LHVuZGVmaW5lZCxldmVudCxyZWZHdWlkLHVuZGVmaW5lZCxzbGljZSk7aWYob2spe3RoaXMubW9kZWxfLmZsb3dFdmVudHMucHVzaChmbG93RXZlbnQpO31lbHNle3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2Zsb3dfc2xpY2VfZW5kX2Vycm9yJyxtZXNzYWdlOidGbG93IGNvbnN1bWVyICcrZXZlbnQuYmluZF9pZCsnIGRvZXMgbm90IGVuZCAnKydhdCBhbiBhY3R1YWwgc2xpY2UsIHNvIGNhbm5vdCBiZSBjcmVhdGVkLid9KTtyZXR1cm4gZmFsc2U7fQotcmV0dXJuIHRydWU7fS5iaW5kKHRoaXMpO2NvbnN0IHByb2Nlc3NGbG93UHJvZHVjZXI9ZnVuY3Rpb24oZmxvd0lkVG9FdmVudCxmbG93U3RhdHVzLGV2ZW50LHNsaWNlKXtpZihmbG93SWRUb0V2ZW50W2V2ZW50LmJpbmRfaWRdJiZmbG93U3RhdHVzW2V2ZW50LmJpbmRfaWRdKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidmbG93X3NsaWNlX3N0YXJ0X2Vycm9yJyxtZXNzYWdlOidGbG93IHByb2R1Y2VyICcrZXZlbnQuYmluZF9pZCsnIGFscmVhZHkgc2Vlbid9KTtyZXR1cm4gZmFsc2U7fQotY29uc3QgZmxvd0V2ZW50PWNyZWF0ZUZsb3dFdmVudCh1bmRlZmluZWQsZXZlbnQsc2xpY2UpO2lmKCFmbG93RXZlbnQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2Zsb3dfc2xpY2Vfc3RhcnRfZXJyb3InLG1lc3NhZ2U6J0Zsb3cgcHJvZHVjZXIgJytldmVudC5iaW5kX2lkKycgZG9lcyBub3Qgc3RhcnQnKydhIGZsb3cnfSk7cmV0dXJuIGZhbHNlO30KLWZsb3dJZFRvRXZlbnRbZXZlbnQuYmluZF9pZF09Zmxvd0V2ZW50O30uYmluZCh0aGlzKTt0aGlzLmFsbEZsb3dFdmVudHNfLnNvcnQoZnVuY3Rpb24oeCx5KXtjb25zdCBkPXguZXZlbnQudHMteS5ldmVudC50cztpZihkIT09MClyZXR1cm4gZDtyZXR1cm4geC5zZXF1ZW5jZU51bWJlci15LnNlcXVlbmNlTnVtYmVyO30pO2NvbnN0IGZsb3dJZFRvRXZlbnQ9e307Y29uc3Qgc2xpY2VHdWlkVG9FdmVudD17fTtjb25zdCBmbG93U3RhdHVzPXt9O2ZvcihsZXQgaT0wO2k8dGhpcy5hbGxGbG93RXZlbnRzXy5sZW5ndGg7KytpKXtjb25zdCBkYXRhPXRoaXMuYWxsRmxvd0V2ZW50c19baV07Y29uc3QgcmVmR3VpZD1kYXRhLnJlZkd1aWQ7Y29uc3QgZXZlbnQ9ZGF0YS5ldmVudDtjb25zdCB0aHJlYWQ9ZGF0YS50aHJlYWQ7aWYoIXRoaXMudmFsaWRhdGVGbG93RXZlbnRfKGV2ZW50KSljb250aW51ZTtpZihldmVudC5iaW5kX2lkKXtjb25zdCBzbGljZT1kYXRhLnNsaWNlO3NsaWNlR3VpZFRvRXZlbnRbc2xpY2UuZ3VpZF09ZXZlbnQ7aWYoZXZlbnQuZmxvd1BoYXNlPT09UFJPRFVDRVIpe2lmKCFwcm9jZXNzRmxvd1Byb2R1Y2VyKGZsb3dJZFRvRXZlbnQsZmxvd1N0YXR1cyxldmVudCxzbGljZSkpe2NvbnRpbnVlO30KLWZsb3dTdGF0dXNbZXZlbnQuYmluZF9pZF09dHJ1ZTt9ZWxzZXtpZighcHJvY2Vzc0Zsb3dDb25zdW1lcihmbG93SWRUb0V2ZW50LHNsaWNlR3VpZFRvRXZlbnQsZXZlbnQsc2xpY2UpKXtjb250aW51ZTt9Ci1mbG93U3RhdHVzW2V2ZW50LmJpbmRfaWRdPWZhbHNlO2lmKGV2ZW50LmZsb3dQaGFzZT09PVNURVApe2lmKCFwcm9jZXNzRmxvd1Byb2R1Y2VyKGZsb3dJZFRvRXZlbnQsZmxvd1N0YXR1cyxldmVudCxzbGljZSkpe2NvbnRpbnVlO30KLWZsb3dTdGF0dXNbZXZlbnQuYmluZF9pZF09dHJ1ZTt9fQotY29udGludWU7fQotbGV0IGZsb3dFdmVudDtpZihldmVudC5waD09PSdzJyl7aWYoZmxvd0lkVG9FdmVudFtldmVudC5pZF0pe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2Zsb3dfc2xpY2Vfc3RhcnRfZXJyb3InLG1lc3NhZ2U6J2V2ZW50IGlkICcrZXZlbnQuaWQrJyBhbHJlYWR5IHNlZW4gd2hlbiAnKydlbmNvdW50ZXJpbmcgc3RhcnQgb2YgZmxvdyBldmVudC4nfSk7Y29udGludWU7fQotZmxvd0V2ZW50PWNyZWF0ZUZsb3dFdmVudCh0aHJlYWQsZXZlbnQpO2lmKCFmbG93RXZlbnQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2Zsb3dfc2xpY2Vfc3RhcnRfZXJyb3InLG1lc3NhZ2U6J2V2ZW50IGlkICcrZXZlbnQuaWQrJyBkb2VzIG5vdCBzdGFydCAnKydhdCBhbiBhY3R1YWwgc2xpY2UsIHNvIGNhbm5vdCBiZSBjcmVhdGVkLid9KTtjb250aW51ZTt9Ci1mbG93SWRUb0V2ZW50W2V2ZW50LmlkXT1mbG93RXZlbnQ7fWVsc2UgaWYoZXZlbnQucGg9PT0ndCd8fGV2ZW50LnBoPT09J2YnKXtmbG93RXZlbnQ9Zmxvd0lkVG9FdmVudFtldmVudC5pZF07aWYoZmxvd0V2ZW50PT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidmbG93X3NsaWNlX29yZGVyaW5nX2Vycm9yJyxtZXNzYWdlOidGb3VuZCBmbG93IHBoYXNlICcrZXZlbnQucGgrJyBmb3IgaWQ6ICcrZXZlbnQuaWQrJyBidXQgbm8gZmxvdyBzdGFydCBmb3VuZC4nfSk7Y29udGludWU7fQotbGV0IGJpbmRUb1BhcmVudD1ldmVudC5waD09PSd0JztpZihldmVudC5waD09PSdmJyl7aWYoZXZlbnQuYnA9PT11bmRlZmluZWQpe2lmKGV2ZW50LmNhdC5pbmRleE9mKCdpbnB1dCcpPi0xKXtiaW5kVG9QYXJlbnQ9dHJ1ZTt9ZWxzZSBpZihldmVudC5jYXQuaW5kZXhPZignaXBjLmZsb3cnKT4tMSl7YmluZFRvUGFyZW50PXRydWU7fX1lbHNle2lmKGV2ZW50LmJwIT09J2UnKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidmbG93X3NsaWNlX2JpbmRfcG9pbnRfZXJyb3InLG1lc3NhZ2U6J0Zsb3cgZXZlbnQgd2l0aCBpbnZhbGlkIGJpbmRpbmcgcG9pbnQgKGV2ZW50LmJwKS4nfSk7Y29udGludWU7fQotYmluZFRvUGFyZW50PXRydWU7fX0KLWNvbnN0IG9rPWZpbmlzaEZsb3dFdmVudFdpdGgoZmxvd0V2ZW50LHRocmVhZCxldmVudCxyZWZHdWlkLGJpbmRUb1BhcmVudCk7aWYob2spe3RoaXMubW9kZWxfLmZsb3dFdmVudHMucHVzaChmbG93RXZlbnQpO31lbHNle3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2Zsb3dfc2xpY2VfZW5kX2Vycm9yJyxtZXNzYWdlOidldmVudCBpZCAnK2V2ZW50LmlkKycgZG9lcyBub3QgZW5kICcrJ2F0IGFuIGFjdHVhbCBzbGljZSwgc28gY2Fubm90IGJlIGNyZWF0ZWQuJ30pO30KLWZsb3dJZFRvRXZlbnRbZXZlbnQuaWRdPXVuZGVmaW5lZDtpZihvayYmZXZlbnQucGg9PT0ndCcpe2Zsb3dFdmVudD1jcmVhdGVGbG93RXZlbnQodGhyZWFkLGV2ZW50KTtmbG93SWRUb0V2ZW50W2V2ZW50LmlkXT1mbG93RXZlbnQ7fX19fSxjcmVhdGVFeHBsaWNpdE9iamVjdHNfKCl7aWYodGhpcy5hbGxPYmplY3RFdmVudHNfLmxlbmd0aD09PTApcmV0dXJuO2NvbnN0IHByb2Nlc3NFdmVudD1mdW5jdGlvbihvYmplY3RFdmVudFN0YXRlKXtjb25zdCBldmVudD1vYmplY3RFdmVudFN0YXRlLmV2ZW50O2NvbnN0IHNjb3BlZElkPVRyYWNlRXZlbnRJbXBvcnRlci5zY29wZWRJZEZvckV2ZW50XyhldmVudCk7Y29uc3QgdGhyZWFkPW9iamVjdEV2ZW50U3RhdGUudGhyZWFkO2lmKGV2ZW50Lm5hbWU9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J29iamVjdF9wYXJzZV9lcnJvcicsbWVzc2FnZTonV2hpbGUgcHJvY2Vzc2luZyAnK0pTT04uc3RyaW5naWZ5KGV2ZW50KSsnOiAnKydPYmplY3QgZXZlbnRzIHJlcXVpcmUgYW4gbmFtZSBwYXJhbWV0ZXIuJ30pO30KLWlmKHNjb3BlZElkPT09dW5kZWZpbmVkfHxzY29wZWRJZC5pZD09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonb2JqZWN0X3BhcnNlX2Vycm9yJyxtZXNzYWdlOidXaGlsZSBwcm9jZXNzaW5nICcrSlNPTi5zdHJpbmdpZnkoZXZlbnQpKyc6ICcrJ09iamVjdCBldmVudHMgcmVxdWlyZSBhbiBpZCBwYXJhbWV0ZXIuJ30pO30KLWNvbnN0IHByb2Nlc3M9dGhyZWFkLnBhcmVudDtjb25zdCB0cz10aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cyk7bGV0IGluc3RhbmNlO2lmKGV2ZW50LnBoPT09J04nKXt0cnl7aW5zdGFuY2U9cHJvY2Vzcy5vYmplY3RzLmlkV2FzQ3JlYXRlZChzY29wZWRJZCxldmVudC5jYXQsZXZlbnQubmFtZSx0cyk7fWNhdGNoKGUpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J29iamVjdF9wYXJzZV9lcnJvcicsbWVzc2FnZTonV2hpbGUgcHJvY2Vzc2luZyBjcmVhdGUgb2YgJysKLXNjb3BlZElkKycgYXQgdHM9Jyt0cysnOiAnK2V9KTtyZXR1cm47fX1lbHNlIGlmKGV2ZW50LnBoPT09J08nKXtpZihldmVudC5hcmdzLnNuYXBzaG90PT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidvYmplY3RfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J1doaWxlIHByb2Nlc3NpbmcgJytzY29wZWRJZCsnIGF0IHRzPScrdHMrJzogJysnU25hcHNob3RzIG11c3QgaGF2ZSBhcmdzOiB7c25hcHNob3Q6IC4uLn0nfSk7cmV0dXJuO30KLWxldCBzbmFwc2hvdDt0cnl7Y29uc3QgYXJncz10aGlzLmRlZXBDb3B5SWZOZWVkZWRfKGV2ZW50LmFyZ3Muc25hcHNob3QpO2xldCBjYXQ7aWYoYXJncy5jYXQpe2NhdD1hcmdzLmNhdDtkZWxldGUgYXJncy5jYXQ7fWVsc2V7Y2F0PWV2ZW50LmNhdDt9Ci1sZXQgYmFzZVR5cGVuYW1lO2lmKGFyZ3MuYmFzZV90eXBlKXtiYXNlVHlwZW5hbWU9YXJncy5iYXNlX3R5cGU7ZGVsZXRlIGFyZ3MuYmFzZV90eXBlO31lbHNle2Jhc2VUeXBlbmFtZT11bmRlZmluZWQ7fQotc25hcHNob3Q9cHJvY2Vzcy5vYmplY3RzLmFkZFNuYXBzaG90KHNjb3BlZElkLGNhdCxldmVudC5uYW1lLHRzLGFyZ3MsYmFzZVR5cGVuYW1lKTtzbmFwc2hvdC5zbmFwc2hvdHRlZE9uVGhyZWFkPXRocmVhZDt9Y2F0Y2goZSl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonb2JqZWN0X3BhcnNlX2Vycm9yJyxtZXNzYWdlOidXaGlsZSBwcm9jZXNzaW5nIHNuYXBzaG90IG9mICcrCi1zY29wZWRJZCsnIGF0IHRzPScrdHMrJzogJytlfSk7cmV0dXJuO30KLWluc3RhbmNlPXNuYXBzaG90Lm9iamVjdEluc3RhbmNlO31lbHNlIGlmKGV2ZW50LnBoPT09J0QnKXt0cnl7cHJvY2Vzcy5vYmplY3RzLmlkV2FzRGVsZXRlZChzY29wZWRJZCxldmVudC5jYXQsZXZlbnQubmFtZSx0cyk7Y29uc3QgaW5zdGFuY2VNYXA9cHJvY2Vzcy5vYmplY3RzLmdldE9yQ3JlYXRlSW5zdGFuY2VNYXBfKHNjb3BlZElkKTtpbnN0YW5jZT1pbnN0YW5jZU1hcC5sYXN0SW5zdGFuY2U7fWNhdGNoKGUpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J29iamVjdF9wYXJzZV9lcnJvcicsbWVzc2FnZTonV2hpbGUgcHJvY2Vzc2luZyBkZWxldGUgb2YgJysKLXNjb3BlZElkKycgYXQgdHM9Jyt0cysnOiAnK2V9KTtyZXR1cm47fX0KLWlmKGluc3RhbmNlKXtpbnN0YW5jZS5jb2xvcklkPWdldEV2ZW50Q29sb3IoZXZlbnQsaW5zdGFuY2UudHlwZU5hbWUpO319LmJpbmQodGhpcyk7dGhpcy5hbGxPYmplY3RFdmVudHNfLnNvcnQoZnVuY3Rpb24oeCx5KXtjb25zdCBkPXguZXZlbnQudHMteS5ldmVudC50cztpZihkIT09MClyZXR1cm4gZDtyZXR1cm4geC5zZXF1ZW5jZU51bWJlci15LnNlcXVlbmNlTnVtYmVyO30pO2NvbnN0IGFsbE9iamVjdEV2ZW50cz10aGlzLmFsbE9iamVjdEV2ZW50c187Zm9yKGxldCBpPTA7aTxhbGxPYmplY3RFdmVudHMubGVuZ3RoO2krKyl7Y29uc3Qgb2JqZWN0RXZlbnRTdGF0ZT1hbGxPYmplY3RFdmVudHNbaV07dHJ5e3Byb2Nlc3NFdmVudC5jYWxsKHRoaXMsb2JqZWN0RXZlbnRTdGF0ZSk7fWNhdGNoKGUpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J29iamVjdF9wYXJzZV9lcnJvcicsbWVzc2FnZTplLm1lc3NhZ2V9KTt9fX0sY3JlYXRlSW1wbGljaXRPYmplY3RzXygpe2Zvcihjb25zdCBwcm9jIG9mIE9iamVjdC52YWx1ZXModGhpcy5tb2RlbF8ucHJvY2Vzc2VzKSl7dGhpcy5jcmVhdGVJbXBsaWNpdE9iamVjdHNGb3JQcm9jZXNzXyhwcm9jKTt9fSxjcmVhdGVJbXBsaWNpdE9iamVjdHNGb3JQcm9jZXNzXyhwcm9jZXNzKXtmdW5jdGlvbiBwcm9jZXNzRmllbGQocmVmZXJlbmNpbmdPYmplY3QscmVmZXJlbmNpbmdPYmplY3RGaWVsZE5hbWUscmVmZXJlbmNpbmdPYmplY3RGaWVsZFZhbHVlLGNvbnRhaW5pbmdTbmFwc2hvdCl7aWYoIXJlZmVyZW5jaW5nT2JqZWN0RmllbGRWYWx1ZSlyZXR1cm47aWYocmVmZXJlbmNpbmdPYmplY3RGaWVsZFZhbHVlIGluc3RhbmNlb2YKLXRyLm1vZGVsLk9iamVjdFNuYXBzaG90KXtyZXR1cm4gbnVsbDt9Ci1pZihyZWZlcmVuY2luZ09iamVjdEZpZWxkVmFsdWUuaWQ9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IGltcGxpY2l0U25hcHNob3Q9cmVmZXJlbmNpbmdPYmplY3RGaWVsZFZhbHVlO2NvbnN0IHJhd0lkPWltcGxpY2l0U25hcHNob3QuaWQ7Y29uc3QgbT0vKC4rKVwvKC4rKS8uZXhlYyhyYXdJZCk7aWYoIW0pe3Rocm93IG5ldyBFcnJvcignSW1wbGljaXQgc25hcHNob3RzIG11c3QgaGF2ZSBuYW1lcy4nKTt9Ci1kZWxldGUgaW1wbGljaXRTbmFwc2hvdC5pZDtjb25zdCBuYW1lPW1bMV07Y29uc3QgaWQ9bVsyXTtsZXQgcmVzO2xldCBjYXQ7aWYoaW1wbGljaXRTbmFwc2hvdC5jYXQhPT11bmRlZmluZWQpe2NhdD1pbXBsaWNpdFNuYXBzaG90LmNhdDt9ZWxzZXtjYXQ9Y29udGFpbmluZ1NuYXBzaG90Lm9iamVjdEluc3RhbmNlLmNhdGVnb3J5O30KLWxldCBiYXNlVHlwZW5hbWU7aWYoaW1wbGljaXRTbmFwc2hvdC5iYXNlX3R5cGUpe2Jhc2VUeXBlbmFtZT1pbXBsaWNpdFNuYXBzaG90LmJhc2VfdHlwZTt9ZWxzZXtiYXNlVHlwZW5hbWU9dW5kZWZpbmVkO30KLWNvbnN0IHNjb3BlPWNvbnRhaW5pbmdTbmFwc2hvdC5vYmplY3RJbnN0YW5jZS5zY29wZWRJZC5zY29wZTt0cnl7cmVzPXByb2Nlc3Mub2JqZWN0cy5hZGRTbmFwc2hvdChuZXcgdHIubW9kZWwuU2NvcGVkSWQoc2NvcGUsaWQpLGNhdCxuYW1lLGNvbnRhaW5pbmdTbmFwc2hvdC50cyxpbXBsaWNpdFNuYXBzaG90LGJhc2VUeXBlbmFtZSk7fWNhdGNoKGUpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J29iamVjdF9zbmFwc2hvdF9wYXJzZV9lcnJvcicsbWVzc2FnZTonV2hpbGUgcHJvY2Vzc2luZyBpbXBsaWNpdCBzbmFwc2hvdCBvZiAnKwotcmF3SWQrJyBhdCB0cz0nK2NvbnRhaW5pbmdTbmFwc2hvdC50cysnOiAnK2V9KTtyZXR1cm47fQotcmVzLm9iamVjdEluc3RhbmNlLmhhc0ltcGxpY2l0U25hcHNob3RzPXRydWU7cmVzLmNvbnRhaW5pbmdTbmFwc2hvdD1jb250YWluaW5nU25hcHNob3Q7cmVzLnNuYXBzaG90dGVkT25UaHJlYWQ9Y29udGFpbmluZ1NuYXBzaG90LnNuYXBzaG90dGVkT25UaHJlYWQ7cmVmZXJlbmNpbmdPYmplY3RbcmVmZXJlbmNpbmdPYmplY3RGaWVsZE5hbWVdPXJlcztpZighKHJlcyBpbnN0YW5jZW9mIHRyLm1vZGVsLk9iamVjdFNuYXBzaG90KSl7dGhyb3cgbmV3IEVycm9yKCdDcmVhdGVkIG9iamVjdCBtdXN0IGJlIGluc3RhbmNlb2Ygc25hcHNob3QnKTt9Ci1yZXR1cm4gcmVzLmFyZ3M7fQotZnVuY3Rpb24gaXRlck9iamVjdChvYmplY3QsZnVuYyxjb250YWluaW5nU25hcHNob3QsdGhpc0FyZyl7aWYoIShvYmplY3QgaW5zdGFuY2VvZiBPYmplY3QpKXJldHVybjtpZihvYmplY3QgaW5zdGFuY2VvZiBBcnJheSl7Zm9yKGxldCBpPTA7aTxvYmplY3QubGVuZ3RoO2krKyl7Y29uc3QgcmVzPWZ1bmMuY2FsbCh0aGlzQXJnLG9iamVjdCxpLG9iamVjdFtpXSxjb250YWluaW5nU25hcHNob3QpO2lmKHJlcz09PW51bGwpY29udGludWU7aWYocmVzKXtpdGVyT2JqZWN0KHJlcyxmdW5jLGNvbnRhaW5pbmdTbmFwc2hvdCx0aGlzQXJnKTt9ZWxzZXtpdGVyT2JqZWN0KG9iamVjdFtpXSxmdW5jLGNvbnRhaW5pbmdTbmFwc2hvdCx0aGlzQXJnKTt9fQotcmV0dXJuO30KLWZvcihjb25zdCBrZXkgaW4gb2JqZWN0KXtjb25zdCByZXM9ZnVuYy5jYWxsKHRoaXNBcmcsb2JqZWN0LGtleSxvYmplY3Rba2V5XSxjb250YWluaW5nU25hcHNob3QpO2lmKHJlcz09PW51bGwpY29udGludWU7aWYocmVzKXtpdGVyT2JqZWN0KHJlcyxmdW5jLGNvbnRhaW5pbmdTbmFwc2hvdCx0aGlzQXJnKTt9ZWxzZXtpdGVyT2JqZWN0KG9iamVjdFtrZXldLGZ1bmMsY29udGFpbmluZ1NuYXBzaG90LHRoaXNBcmcpO319fQotcHJvY2Vzcy5vYmplY3RzLml0ZXJPYmplY3RJbnN0YW5jZXMoZnVuY3Rpb24oaW5zdGFuY2Upe2luc3RhbmNlLnNuYXBzaG90cy5mb3JFYWNoKGZ1bmN0aW9uKHNuYXBzaG90KXtpZihzbmFwc2hvdC5hcmdzLmlkIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ2FyZ3MgY2Fubm90IGhhdmUgYW4gaWQgZmllbGQgaW5zaWRlIGl0Jyk7fQotaXRlck9iamVjdChzbmFwc2hvdC5hcmdzLHByb2Nlc3NGaWVsZCxzbmFwc2hvdCx0aGlzKTt9LHRoaXMpO30sdGhpcyk7fSxtaW5pbWFsVGltZXN0YW1wSW5QaWRUb0V2ZW50c18ocGlkVG9FdmVudHMpe2xldCBzbWFsbGVzdFRzPUluZmluaXR5O2Zvcihjb25zdCBldmVudHMgb2YgT2JqZWN0LnZhbHVlcyhwaWRUb0V2ZW50cykpe2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2lmKGV2ZW50LnRzPHNtYWxsZXN0VHMpe3NtYWxsZXN0VHM9ZXZlbnQudHM7fX19Ci1yZXR1cm4gc21hbGxlc3RUczt9LGNyZWF0ZU1lbW9yeUR1bXBzXygpe2NvbnN0IHBhaXJzPU9iamVjdC5lbnRyaWVzKHRoaXMuYWxsTWVtb3J5RHVtcEV2ZW50c18pO2NvbnN0IGtleT14PT50aGlzLm1pbmltYWxUaW1lc3RhbXBJblBpZFRvRXZlbnRzXyh4KTtwYWlycy5zb3J0KCh4LHkpPT5rZXkoeFsxXSkta2V5KHlbMV0pKTtmb3IoY29uc3RbZHVtcElkLHBpZFRvRXZlbnRzXW9mIHBhaXJzKXt0aGlzLmNyZWF0ZUdsb2JhbE1lbW9yeUR1bXBfKHBpZFRvRXZlbnRzLGR1bXBJZCk7fX0sY3JlYXRlR2xvYmFsTWVtb3J5RHVtcF8oZHVtcElkRXZlbnRzLGR1bXBJZCl7Y29uc3QgZ2xvYmFsUmFuZ2U9bmV3IHRyLmIubWF0aC5SYW5nZSgpO2Zvcihjb25zdCBwaWQgaW4gZHVtcElkRXZlbnRzKXtjb25zdCBwcm9jZXNzRXZlbnRzPWR1bXBJZEV2ZW50c1twaWRdO2ZvcihsZXQgaT0wO2k8cHJvY2Vzc0V2ZW50cy5sZW5ndGg7aSsrKXtnbG9iYWxSYW5nZS5hZGRWYWx1ZSh0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhwcm9jZXNzRXZlbnRzW2ldLnRzKSk7fX0KLWlmKGdsb2JhbFJhbmdlLmlzRW1wdHkpe3Rocm93IG5ldyBFcnJvcignSW50ZXJuYWwgZXJyb3I6IEdsb2JhbCBtZW1vcnkgZHVtcCB3aXRob3V0IGV2ZW50cycpO30KLWNvbnN0IGdsb2JhbE1lbW9yeUR1bXA9bmV3IHRyLm1vZGVsLkdsb2JhbE1lbW9yeUR1bXAodGhpcy5tb2RlbF8sZ2xvYmFsUmFuZ2UubWluKTtnbG9iYWxNZW1vcnlEdW1wLmR1cmF0aW9uPWdsb2JhbFJhbmdlLnJhbmdlO3RoaXMubW9kZWxfLmdsb2JhbE1lbW9yeUR1bXBzLnB1c2goZ2xvYmFsTWVtb3J5RHVtcCk7Y29uc3QgZ2xvYmFsTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lPXt9O2NvbnN0IGxldmVsc09mRGV0YWlsPXt9O2NvbnN0IGFsbE1lbW9yeUFsbG9jYXRvckR1bXBzQnlHdWlkPXt9O2Zvcihjb25zdCBwaWQgaW4gZHVtcElkRXZlbnRzKXt0aGlzLmNyZWF0ZVByb2Nlc3NNZW1vcnlEdW1wXyhnbG9iYWxNZW1vcnlEdW1wLGdsb2JhbE1lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZSxsZXZlbHNPZkRldGFpbCxhbGxNZW1vcnlBbGxvY2F0b3JEdW1wc0J5R3VpZCxkdW1wSWRFdmVudHNbcGlkXSxwaWQsZHVtcElkKTt9Ci1nbG9iYWxNZW1vcnlEdW1wLmxldmVsT2ZEZXRhaWw9bGV2ZWxzT2ZEZXRhaWwuZ2xvYmFsO2dsb2JhbE1lbW9yeUR1bXAubWVtb3J5QWxsb2NhdG9yRHVtcHM9dGhpcy5pbmZlck1lbW9yeUFsbG9jYXRvckR1bXBUcmVlXyhnbG9iYWxNZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWUpO3RoaXMucGFyc2VNZW1vcnlEdW1wQWxsb2NhdG9yRWRnZXNfKGFsbE1lbW9yeUFsbG9jYXRvckR1bXBzQnlHdWlkLGR1bXBJZEV2ZW50cyxkdW1wSWQpO30sY3JlYXRlUHJvY2Vzc01lbW9yeUR1bXBfKGdsb2JhbE1lbW9yeUR1bXAsZ2xvYmFsTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lLGxldmVsc09mRGV0YWlsLGFsbE1lbW9yeUFsbG9jYXRvckR1bXBzQnlHdWlkLHByb2Nlc3NFdmVudHMscGlkLGR1bXBJZCl7Y29uc3QgcHJvY2Vzc1JhbmdlPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTtmb3IobGV0IGk9MDtpPHByb2Nlc3NFdmVudHMubGVuZ3RoO2krKyl7cHJvY2Vzc1JhbmdlLmFkZFZhbHVlKHRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKHByb2Nlc3NFdmVudHNbaV0udHMpKTt9Ci1pZihwcm9jZXNzUmFuZ2UuaXNFbXB0eSl7dGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBlcnJvcjogUHJvY2VzcyBtZW1vcnkgZHVtcCB3aXRob3V0IGV2ZW50cycpO30KLWNvbnN0IHByb2Nlc3M9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKHBpZCk7Y29uc3QgcHJvY2Vzc01lbW9yeUR1bXA9bmV3IHRyLm1vZGVsLlByb2Nlc3NNZW1vcnlEdW1wKGdsb2JhbE1lbW9yeUR1bXAscHJvY2Vzcyxwcm9jZXNzUmFuZ2UubWluKTtwcm9jZXNzTWVtb3J5RHVtcC5kdXJhdGlvbj1wcm9jZXNzUmFuZ2UucmFuZ2U7cHJvY2Vzcy5tZW1vcnlEdW1wcy5wdXNoKHByb2Nlc3NNZW1vcnlEdW1wKTtnbG9iYWxNZW1vcnlEdW1wLnByb2Nlc3NNZW1vcnlEdW1wc1twaWRdPXByb2Nlc3NNZW1vcnlEdW1wO2NvbnN0IHByb2Nlc3NNZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWU9e307Zm9yKGxldCBpPTA7aTxwcm9jZXNzRXZlbnRzLmxlbmd0aDtpKyspe2NvbnN0IHByb2Nlc3NFdmVudD1wcm9jZXNzRXZlbnRzW2ldO2NvbnN0IGR1bXBzPXByb2Nlc3NFdmVudC5hcmdzLmR1bXBzO2lmKGR1bXBzPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonXCdkdW1wc1wnIGZpZWxkIG5vdCBmb3VuZCBpbiBhIHByb2Nlc3MgbWVtb3J5IGR1bXAnKycgZXZlbnQgZm9yIFBJRD0nK3BpZCsnIGFuZCBkdW1wIElEPScrZHVtcElkKycuJ30pO2NvbnRpbnVlO30KLXRoaXMucGFyc2VNZW1vcnlEdW1wVG90YWxzXyhwcm9jZXNzTWVtb3J5RHVtcCxkdW1wcyxwaWQsZHVtcElkKTt0aGlzLnBhcnNlTWVtb3J5RHVtcFZtUmVnaW9uc18ocHJvY2Vzc01lbW9yeUR1bXAsZHVtcHMscGlkLGR1bXBJZCk7dGhpcy5wYXJzZU1lbW9yeUR1bXBIZWFwRHVtcHNfKHByb2Nlc3NNZW1vcnlEdW1wLGR1bXBzLHBpZCxkdW1wSWQpO3RoaXMucGFyc2VNZW1vcnlEdW1wTGV2ZWxPZkRldGFpbF8obGV2ZWxzT2ZEZXRhaWwsZHVtcHMscGlkLGR1bXBJZCk7dGhpcy5wYXJzZU1lbW9yeUR1bXBBbGxvY2F0b3JEdW1wc18ocHJvY2Vzc01lbW9yeUR1bXAsZ2xvYmFsTWVtb3J5RHVtcCxwcm9jZXNzTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lLGdsb2JhbE1lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZSxhbGxNZW1vcnlBbGxvY2F0b3JEdW1wc0J5R3VpZCxkdW1wcyxwaWQsZHVtcElkKTt9Ci1pZihsZXZlbHNPZkRldGFpbC5wcm9jZXNzPT09dW5kZWZpbmVkKXtsZXZlbHNPZkRldGFpbC5wcm9jZXNzPXByb2Nlc3NNZW1vcnlEdW1wLnZtUmVnaW9ucz9ERVRBSUxFRDpMSUdIVDt9Ci1pZighdGhpcy51cGRhdGVNZW1vcnlEdW1wTGV2ZWxPZkRldGFpbF8obGV2ZWxzT2ZEZXRhaWwsJ2dsb2JhbCcsbGV2ZWxzT2ZEZXRhaWwucHJvY2Vzcykpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidkaWZmZW50IGxldmVscyBvZiBkZXRhaWwgcHJvdmlkZWQgZm9yIGdsb2JhbCBtZW1vcnknKycgZHVtcCAoZHVtcCBJRD0nK2R1bXBJZCsnKS4nfSk7fQotcHJvY2Vzc01lbW9yeUR1bXAubGV2ZWxPZkRldGFpbD1sZXZlbHNPZkRldGFpbC5wcm9jZXNzO2RlbGV0ZSBsZXZlbHNPZkRldGFpbC5wcm9jZXNzO3Byb2Nlc3NNZW1vcnlEdW1wLm1lbW9yeUFsbG9jYXRvckR1bXBzPXRoaXMuaW5mZXJNZW1vcnlBbGxvY2F0b3JEdW1wVHJlZV8ocHJvY2Vzc01lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZSk7fSxwYXJzZU1lbW9yeUR1bXBUb3RhbHNfKHByb2Nlc3NNZW1vcnlEdW1wLGR1bXBzLHBpZCxkdW1wSWQpe2NvbnN0IHJhd1RvdGFscz1kdW1wcy5wcm9jZXNzX3RvdGFscztpZihyYXdUb3RhbHM9PT11bmRlZmluZWQpcmV0dXJuO2lmKHByb2Nlc3NNZW1vcnlEdW1wLnRvdGFscyE9PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J1Byb2Nlc3MgdG90YWxzIHByb3ZpZGVkIG11bHRpcGxlIHRpbWVzIGZvcicrJyBwcm9jZXNzIG1lbW9yeSBkdW1wIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nK2R1bXBJZCsnLid9KTtyZXR1cm47fQotY29uc3QgdG90YWxzPXt9O2xldCBwbGF0Zm9ybVNwZWNpZmljVG90YWxzPXVuZGVmaW5lZDtmb3IoY29uc3QgcmF3VG90YWxOYW1lIGluIHJhd1RvdGFscyl7Y29uc3QgcmF3VG90YWxWYWx1ZT1yYXdUb3RhbHNbcmF3VG90YWxOYW1lXTtpZihyYXdUb3RhbFZhbHVlPT09dW5kZWZpbmVkKWNvbnRpbnVlO2lmKHJhd1RvdGFsTmFtZT09PSdyZXNpZGVudF9zZXRfYnl0ZXMnKXt0b3RhbHMucmVzaWRlbnRCeXRlcz1wYXJzZUludChyYXdUb3RhbFZhbHVlLDE2KTtjb250aW51ZTt9Ci1pZihyYXdUb3RhbE5hbWU9PT0ncGVha19yZXNpZGVudF9zZXRfYnl0ZXMnKXt0b3RhbHMucGVha1Jlc2lkZW50Qnl0ZXM9cGFyc2VJbnQocmF3VG90YWxWYWx1ZSwxNik7Y29udGludWU7fQotaWYocmF3VG90YWxOYW1lPT09J2lzX3BlYWtfcnNzX3Jlc2V0YWJsZScpe3RvdGFscy5hcmVQZWFrUmVzaWRlbnRCeXRlc1Jlc2V0dGFibGU9ISFyYXdUb3RhbFZhbHVlO2NvbnRpbnVlO30KLWlmKHJhd1RvdGFsTmFtZT09PSdwcml2YXRlX2Zvb3RwcmludF9ieXRlcycpe3RvdGFscy5wcml2YXRlRm9vdHByaW50Qnl0ZXM9cGFyc2VJbnQocmF3VG90YWxWYWx1ZSwxNik7Y29udGludWU7fQotaWYocGxhdGZvcm1TcGVjaWZpY1RvdGFscz09PXVuZGVmaW5lZCl7cGxhdGZvcm1TcGVjaWZpY1RvdGFscz17fTt0b3RhbHMucGxhdGZvcm1TcGVjaWZpYz1wbGF0Zm9ybVNwZWNpZmljVG90YWxzO30KLXBsYXRmb3JtU3BlY2lmaWNUb3RhbHNbcmF3VG90YWxOYW1lXT1wYXJzZUludChyYXdUb3RhbFZhbHVlLDE2KTt9Ci1pZih0b3RhbHMucGVha1Jlc2lkZW50Qnl0ZXM9PT11bmRlZmluZWQmJnRvdGFscy5hcmVQZWFrUmVzaWRlbnRCeXRlc1Jlc2V0dGFibGUhPT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidPcHRpb25hbCBmaWVsZCBwZWFrX3Jlc2lkZW50X3NldF9ieXRlcyBmb3VuZCcrJyBidXQgaXNfcGVha19yc3NfcmVzZXRhYmxlIG5vdCBmb3VuZCBpbicrJyBwcm9jZXNzIG1lbW9yeSBkdW1wIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nK2R1bXBJZCsnLid9KTt9Ci1pZih0b3RhbHMuYXJlUGVha1Jlc2lkZW50Qnl0ZXNSZXNldHRhYmxlIT09dW5kZWZpbmVkJiZ0b3RhbHMucGVha1Jlc2lkZW50Qnl0ZXM9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidPcHRpb25hbCBmaWVsZCBpc19wZWFrX3Jzc19yZXNldGFibGUgZm91bmQnKycgYnV0IHBlYWtfcmVzaWRlbnRfc2V0X2J5dGVzIG5vdCBmb3VuZCBpbicrJyBwcm9jZXNzIG1lbW9yeSBkdW1wIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nK2R1bXBJZCsnLid9KTt9Ci1wcm9jZXNzTWVtb3J5RHVtcC50b3RhbHM9dG90YWxzO30scGFyc2VNZW1vcnlEdW1wVm1SZWdpb25zXyhwcm9jZXNzTWVtb3J5RHVtcCxkdW1wcyxwaWQsZHVtcElkKXtjb25zdCByYXdQcm9jZXNzTW1hcHM9ZHVtcHMucHJvY2Vzc19tbWFwcztpZihyYXdQcm9jZXNzTW1hcHM9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IHJhd1ZtUmVnaW9ucz1yYXdQcm9jZXNzTW1hcHMudm1fcmVnaW9ucztpZihyYXdWbVJlZ2lvbnM9PT11bmRlZmluZWQpcmV0dXJuO2lmKHByb2Nlc3NNZW1vcnlEdW1wLnZtUmVnaW9ucyE9PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J1ZNIHJlZ2lvbnMgcHJvdmlkZWQgbXVsdGlwbGUgdGltZXMgZm9yJysnIHByb2Nlc3MgbWVtb3J5IGR1bXAgZm9yIFBJRD0nK3BpZCsnIGFuZCBkdW1wIElEPScrZHVtcElkKycuJ30pO3JldHVybjt9Ci1jb25zdCB2bVJlZ2lvbnM9bmV3IEFycmF5KHJhd1ZtUmVnaW9ucy5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8cmF3Vm1SZWdpb25zLmxlbmd0aDtpKyspe2NvbnN0IHJhd1ZtUmVnaW9uPXJhd1ZtUmVnaW9uc1tpXTtjb25zdCBieXRlU3RhdHM9e307Y29uc3QgcmF3Qnl0ZVN0YXRzPXJhd1ZtUmVnaW9uLmJzO2Zvcihjb25zdCByYXdCeXRlU3RhdE5hbWUgaW4gcmF3Qnl0ZVN0YXRzKXtjb25zdCByYXdCeXRlU3RhdFZhbHVlPXJhd0J5dGVTdGF0c1tyYXdCeXRlU3RhdE5hbWVdO2lmKHJhd0J5dGVTdGF0VmFsdWU9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidCeXRlIHN0YXQgXCcnK3Jhd0J5dGVTdGF0TmFtZSsnXCcgb2YgVk0gcmVnaW9uICcrCi1pKycgKCcrcmF3Vm1SZWdpb24ubWYrJykgaW4gcHJvY2VzcyBtZW1vcnkgZHVtcCBmb3IgJysnUElEPScrcGlkKycgYW5kIGR1bXAgSUQ9JytkdW1wSWQrJyBkb2VzIG5vdCBoYXZlIGEgdmFsdWUuJ30pO2NvbnRpbnVlO30KLWNvbnN0IGJ5dGVTdGF0TmFtZT1CWVRFX1NUQVRfTkFNRV9NQVBbcmF3Qnl0ZVN0YXROYW1lXTtpZihieXRlU3RhdE5hbWU9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidVbmtub3duIGJ5dGUgc3RhdCBuYW1lIFwnJytyYXdCeXRlU3RhdE5hbWUrJ1wnICgnKwotcmF3Qnl0ZVN0YXRWYWx1ZSsnKSBvZiBWTSByZWdpb24gJytpKycgKCcrCi1yYXdWbVJlZ2lvbi5tZisnKSBpbiBwcm9jZXNzIG1lbW9yeSBkdW1wIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nK2R1bXBJZCsnLid9KTtjb250aW51ZTt9Ci1ieXRlU3RhdHNbYnl0ZVN0YXROYW1lXT1wYXJzZUludChyYXdCeXRlU3RhdFZhbHVlLDE2KTtpZihieXRlU3RhdE5hbWU9PT0ncHJvcG9ydGlvbmFsUmVzaWRlbnQnJiZieXRlU3RhdHNbYnl0ZVN0YXROYW1lXT09PTApe2J5dGVTdGF0c1tieXRlU3RhdE5hbWVdPXVuZGVmaW5lZDt9fQotdm1SZWdpb25zW2ldPW5ldyB0ci5tb2RlbC5WTVJlZ2lvbihwYXJzZUludChyYXdWbVJlZ2lvbi5zYSwxNikscGFyc2VJbnQocmF3Vm1SZWdpb24uc3osMTYpLHJhd1ZtUmVnaW9uLnBmLHJhd1ZtUmVnaW9uLm1mLGJ5dGVTdGF0cyk7fQotcHJvY2Vzc01lbW9yeUR1bXAudm1SZWdpb25zPXRyLm1vZGVsLlZNUmVnaW9uQ2xhc3NpZmljYXRpb25Ob2RlLmZyb21SZWdpb25zKHZtUmVnaW9ucyk7fSxwYXJzZU1lbW9yeUR1bXBIZWFwRHVtcHNfKHByb2Nlc3NNZW1vcnlEdW1wLGR1bXBzLHBpZCxkdW1wSWQpe2NvbnN0IGlkUHJlZml4PSdwJytwaWQrJzonO2xldCBpbXBvcnRlcjtpZihkdW1wcy5oZWFwcyl7Y29uc3QgcHJvY2Vzc1R5cGVNYXA9dGhpcy5vYmplY3RUeXBlTmFtZU1hcF9bcGlkXTtpZihwcm9jZXNzVHlwZU1hcD09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J01pc3NpbmcgbWFwcGluZyBmcm9tIG9iamVjdCB0eXBlIElEcyB0byBuYW1lcy4nfSk7fQotaW1wb3J0ZXI9bmV3IExlZ2FjeUhlYXBEdW1wVHJhY2VFdmVudEltcG9ydGVyKHRoaXMubW9kZWxfLHByb2Nlc3NNZW1vcnlEdW1wLHByb2Nlc3NUeXBlTWFwLGlkUHJlZml4LGR1bXBJZCxkdW1wcy5oZWFwcyk7fWVsc2UgaWYoZHVtcHMuaGVhcHNfdjIpe2NvbnN0IGRhdGE9ZHVtcHMuaGVhcHNfdjI7dGhpcy5oZWFwUHJvZmlsZUV4cGFuZGVyPXRoaXMuaGVhcFByb2ZpbGVFeHBhbmRlci5leHBhbmREYXRhKGRhdGEpO3RoaXMuYWRkTmV3U3RhY2tGcmFtZXNGcm9tRXhwYW5kZXJfKHRoaXMuaGVhcFByb2ZpbGVFeHBhbmRlcixpZFByZWZpeCk7aW1wb3J0ZXI9bmV3IEhlYXBEdW1wVHJhY2VFdmVudEltcG9ydGVyKHRoaXMuaGVhcFByb2ZpbGVFeHBhbmRlcix0aGlzLm1vZGVsXy5zdGFja0ZyYW1lcyxwcm9jZXNzTWVtb3J5RHVtcCxpZFByZWZpeCx0aGlzLm1vZGVsXyk7fQotaWYoIWltcG9ydGVyKXJldHVybjtjb25zdCBoZWFwRHVtcHM9aW1wb3J0ZXIucGFyc2UoKTtpZighaGVhcER1bXBzKXJldHVybjtpZihwcm9jZXNzTWVtb3J5RHVtcC5oZWFwRHVtcHMhPT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidIZWFwIGR1bXBzIHByb3ZpZGVkIG11bHRpcGxlIHRpbWVzIGZvcicrJyBwcm9jZXNzIG1lbW9yeSBkdW1wIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nK2R1bXBJZCsnLid9KTtyZXR1cm47fQotaWYoT2JqZWN0LmtleXMoaGVhcER1bXBzKS5sZW5ndGg+MCl7cHJvY2Vzc01lbW9yeUR1bXAuaGVhcER1bXBzPWhlYXBEdW1wczt9fSxhZGROZXdTdGFja0ZyYW1lc0Zyb21FeHBhbmRlcl8oZXhwYW5kZXIsaWRQcmVmaXgpe2NvbnN0IG5vZGVNYXA9ZXhwYW5kZXIuZ2V0TmV3TWFwKCdub2RlcycpO2NvbnN0IG5ld1N0YWNrRnJhbWVzPXt9O2Zvcihjb25zdFtpZCxzdGFja0ZyYW1lXW9mIG5vZGVNYXAuZW50cmllcygpKXtpZighdGhpcy5tb2RlbF8uc3RhY2tGcmFtZXNbaWRQcmVmaXgraWRdKXtuZXdTdGFja0ZyYW1lc1tpZF09e2lkLG5hbWU6ZXhwYW5kZXIuZ2V0U3RyaW5nKHN0YWNrRnJhbWUubmFtZV9zaWQpLH07aWYoc3RhY2tGcmFtZS5wYXJlbnQpbmV3U3RhY2tGcmFtZXNbaWRdLnBhcmVudD1zdGFja0ZyYW1lLnBhcmVudDt9fQotdGhpcy5pbXBvcnRTdGFja0ZyYW1lc18obmV3U3RhY2tGcmFtZXMsaWRQcmVmaXgpO30scGFyc2VNZW1vcnlEdW1wTGV2ZWxPZkRldGFpbF8obGV2ZWxzT2ZEZXRhaWwsZHVtcHMscGlkLGR1bXBJZCl7Y29uc3QgcmF3TGV2ZWxPZkRldGFpbD1kdW1wcy5sZXZlbF9vZl9kZXRhaWw7bGV0IGxldmVsO3N3aXRjaChyYXdMZXZlbE9mRGV0YWlsKXtjYXNlJ2JhY2tncm91bmQnOmxldmVsPUJBQ0tHUk9VTkQ7YnJlYWs7Y2FzZSdsaWdodCc6bGV2ZWw9TElHSFQ7YnJlYWs7Y2FzZSdkZXRhaWxlZCc6bGV2ZWw9REVUQUlMRUQ7YnJlYWs7Y2FzZSB1bmRlZmluZWQ6bGV2ZWw9dW5kZWZpbmVkO2JyZWFrO2RlZmF1bHQ6dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J3Vua25vd24gcmF3IGxldmVsIG9mIGRldGFpbCBcJycrcmF3TGV2ZWxPZkRldGFpbCsnXCcgb2YgcHJvY2VzcyBtZW1vcnkgZHVtcCBmb3IgUElEPScrcGlkKycgYW5kIGR1bXAgSUQ9JytkdW1wSWQrJy4nfSk7cmV0dXJuO30KLWlmKCF0aGlzLnVwZGF0ZU1lbW9yeUR1bXBMZXZlbE9mRGV0YWlsXyhsZXZlbHNPZkRldGFpbCwncHJvY2VzcycsbGV2ZWwpKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonZGlmZmVudCBsZXZlbHMgb2YgZGV0YWlsIHByb3ZpZGVkIGZvciBwcm9jZXNzIG1lbW9yeScrJyBkdW1wIGZvciBQSUQ9JytwaWQrJyAoZHVtcCBJRD0nK2R1bXBJZCsnKS4nfSk7fX0sdXBkYXRlTWVtb3J5RHVtcExldmVsT2ZEZXRhaWxfKGxldmVsc09mRGV0YWlsLHNjb3BlLGxldmVsKXtpZighKHNjb3BlIGluIGxldmVsc09mRGV0YWlsKXx8bGV2ZWw9PT1sZXZlbHNPZkRldGFpbFtzY29wZV0pe2xldmVsc09mRGV0YWlsW3Njb3BlXT1sZXZlbDtyZXR1cm4gdHJ1ZTt9Ci1pZihNRU1PUllfRFVNUF9MRVZFTF9PRl9ERVRBSUxfT1JERVIuaW5kZXhPZihsZXZlbCk+TUVNT1JZX0RVTVBfTEVWRUxfT0ZfREVUQUlMX09SREVSLmluZGV4T2YobGV2ZWxzT2ZEZXRhaWxbc2NvcGVdKSl7bGV2ZWxzT2ZEZXRhaWxbc2NvcGVdPWxldmVsO30KLXJldHVybiBmYWxzZTt9LHBhcnNlTWVtb3J5RHVtcEFsbG9jYXRvckR1bXBzXyhwcm9jZXNzTWVtb3J5RHVtcCxnbG9iYWxNZW1vcnlEdW1wLHByb2Nlc3NNZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWUsZ2xvYmFsTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lLGFsbE1lbW9yeUFsbG9jYXRvckR1bXBzQnlHdWlkLGR1bXBzLHBpZCxkdW1wSWQpe2NvbnN0IHJhd0FsbG9jYXRvckR1bXBzPWR1bXBzLmFsbG9jYXRvcnM7aWYocmF3QWxsb2NhdG9yRHVtcHM9PT11bmRlZmluZWQpcmV0dXJuO2ZvcihsZXQgZnVsbE5hbWUgaW4gcmF3QWxsb2NhdG9yRHVtcHMpe2NvbnN0IHJhd0FsbG9jYXRvckR1bXA9cmF3QWxsb2NhdG9yRHVtcHNbZnVsbE5hbWVdO2NvbnN0IGd1aWQ9cmF3QWxsb2NhdG9yRHVtcC5ndWlkO2lmKGd1aWQ9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNZW1vcnkgYWxsb2NhdG9yIGR1bXAgJytmdWxsTmFtZSsnIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nK2R1bXBJZCsnIGRvZXMgbm90IGhhdmUgYSBHVUlELid9KTt9Ci1jb25zdCBmbGFncz1yYXdBbGxvY2F0b3JEdW1wLmZsYWdzfHwwO2NvbnN0IGlzV2Vha0R1bXA9ISEoZmxhZ3MmV0VBS19NRU1PUllfQUxMT0NBVE9SX0RVTVBfRkxBRyk7bGV0IGNvbnRhaW5lck1lbW9yeUR1bXA7bGV0IGRzdEluZGV4O2lmKGZ1bGxOYW1lLnN0YXJ0c1dpdGgoR0xPQkFMX01FTU9SWV9BTExPQ0FUT1JfRFVNUF9QUkVGSVgpKXtmdWxsTmFtZT1mdWxsTmFtZS5zdWJzdHJpbmcoR0xPQkFMX01FTU9SWV9BTExPQ0FUT1JfRFVNUF9QUkVGSVgubGVuZ3RoKTtjb250YWluZXJNZW1vcnlEdW1wPWdsb2JhbE1lbW9yeUR1bXA7ZHN0SW5kZXg9Z2xvYmFsTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lO31lbHNle2NvbnRhaW5lck1lbW9yeUR1bXA9cHJvY2Vzc01lbW9yeUR1bXA7ZHN0SW5kZXg9cHJvY2Vzc01lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZTt9Ci1sZXQgYWxsb2NhdG9yRHVtcD1hbGxNZW1vcnlBbGxvY2F0b3JEdW1wc0J5R3VpZFtndWlkXTtpZihhbGxvY2F0b3JEdW1wPT09dW5kZWZpbmVkKXtpZihmdWxsTmFtZSBpbiBkc3RJbmRleCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J011bHRpcGxlIEdVSURzIHByb3ZpZGVkIGZvcicrJyBtZW1vcnkgYWxsb2NhdG9yIGR1bXAgJytmdWxsTmFtZSsnOiAnKwotZHN0SW5kZXhbZnVsbE5hbWVdLmd1aWQrJywgJytndWlkKycgKGlnbm9yZWQpIGZvcicrJyBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nK2R1bXBJZCsnLid9KTtjb250aW51ZTt9Ci1hbGxvY2F0b3JEdW1wPW5ldyB0ci5tb2RlbC5NZW1vcnlBbGxvY2F0b3JEdW1wKGNvbnRhaW5lck1lbW9yeUR1bXAsZnVsbE5hbWUsZ3VpZCk7YWxsb2NhdG9yRHVtcC53ZWFrPWlzV2Vha0R1bXA7ZHN0SW5kZXhbZnVsbE5hbWVdPWFsbG9jYXRvckR1bXA7aWYoZ3VpZCE9PXVuZGVmaW5lZCl7YWxsTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUd1aWRbZ3VpZF09YWxsb2NhdG9yRHVtcDt9fWVsc2V7aWYoYWxsb2NhdG9yRHVtcC5jb250YWluZXJNZW1vcnlEdW1wIT09Y29udGFpbmVyTWVtb3J5RHVtcCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J01lbW9yeSBhbGxvY2F0b3IgZHVtcCAnK2Z1bGxOYW1lKycgKEdVSUQ9JytndWlkKycpIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nKwotZHVtcElkKycgZHVtcGVkIGluIGRpZmZlcmVudCBjb250ZXh0cy4nfSk7Y29udGludWU7fQotaWYoYWxsb2NhdG9yRHVtcC5mdWxsTmFtZSE9PWZ1bGxOYW1lKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonTWVtb3J5IGFsbG9jYXRvciBkdW1wIHdpdGggR1VJRD0nK2d1aWQrJyBmb3IgUElEPScrCi1waWQrJyBhbmQgZHVtcCBJRD0nK2R1bXBJZCsnIGhhcyBtdWx0aXBsZSBuYW1lczogJysKLWFsbG9jYXRvckR1bXAuZnVsbE5hbWUrJywgJytmdWxsTmFtZSsnIChpZ25vcmVkKS4nfSk7Y29udGludWU7fQotaWYoIWlzV2Vha0R1bXApe2FsbG9jYXRvckR1bXAud2Vhaz1mYWxzZTt9fQotbGV0IGF0dHJpYnV0ZXM9cmF3QWxsb2NhdG9yRHVtcC5hdHRycztpZihhdHRyaWJ1dGVzPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonTWVtb3J5IGFsbG9jYXRvciBkdW1wICcrZnVsbE5hbWUrJyAoR1VJRD0nK2d1aWQrJykgZm9yIFBJRD0nK3BpZCsnIGFuZCBkdW1wIElEPScrZHVtcElkKycgZG9lcyBub3QgaGF2ZSBhdHRyaWJ1dGVzLid9KTthdHRyaWJ1dGVzPXt9O30KLWZvcihjb25zdCBhdHRyTmFtZSBpbiBhdHRyaWJ1dGVzKXtjb25zdCBhdHRyQXJncz1hdHRyaWJ1dGVzW2F0dHJOYW1lXTtjb25zdCBhdHRyVHlwZT1hdHRyQXJncy50eXBlO2NvbnN0IGF0dHJWYWx1ZT1hdHRyQXJncy52YWx1ZTtzd2l0Y2goYXR0clR5cGUpe2Nhc2Unc2NhbGFyJzp7aWYoYXR0ck5hbWUgaW4gYWxsb2NhdG9yRHVtcC5udW1lcmljcyl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J011bHRpcGxlIHZhbHVlcyBwcm92aWRlZCBmb3Igc2NhbGFyIGF0dHJpYnV0ZSAnKwotYXR0ck5hbWUrJyBvZiBtZW1vcnkgYWxsb2NhdG9yIGR1bXAgJytmdWxsTmFtZSsnIChHVUlEPScrZ3VpZCsnKSBmb3IgUElEPScrcGlkKycgYW5kIGR1bXAgSUQ9JysKLWR1bXBJZCsnLid9KTticmVhazt9Ci1jb25zdCB1bml0PWF0dHJBcmdzLnVuaXRzPT09J2J5dGVzJz90ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcjp0ci5iLlVuaXQuYnlOYW1lLnVuaXRsZXNzTnVtYmVyX3NtYWxsZXJJc0JldHRlcjtjb25zdCB2YWx1ZT1wYXJzZUludChhdHRyVmFsdWUsMTYpO2FsbG9jYXRvckR1bXAuYWRkTnVtZXJpYyhhdHRyTmFtZSxuZXcgdHIuYi5TY2FsYXIodW5pdCx2YWx1ZSkpO2JyZWFrO30KLWNhc2Unc3RyaW5nJzppZihhdHRyTmFtZSBpbiBhbGxvY2F0b3JEdW1wLmRpYWdub3N0aWNzKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonTXVsdGlwbGUgdmFsdWVzIHByb3ZpZGVkIGZvciBzdHJpbmcgYXR0cmlidXRlICcrCi1hdHRyTmFtZSsnIG9mIG1lbW9yeSBhbGxvY2F0b3IgZHVtcCAnK2Z1bGxOYW1lKycgKEdVSUQ9JytndWlkKycpIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nKwotZHVtcElkKycuJ30pO2JyZWFrO30KLWFsbG9jYXRvckR1bXAuYWRkRGlhZ25vc3RpYyhhdHRyTmFtZSxhdHRyVmFsdWUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J1Vua25vd24gdHlwZSBwcm92aWRlZCBmb3IgYXR0cmlidXRlICcrYXR0ck5hbWUrJyBvZiBtZW1vcnkgYWxsb2NhdG9yIGR1bXAgJytmdWxsTmFtZSsnIChHVUlEPScrZ3VpZCsnKSBmb3IgUElEPScrcGlkKycgYW5kIGR1bXAgSUQ9JytkdW1wSWQrJzogJysKLWF0dHJUeXBlfSk7YnJlYWs7fX19fSxpbmZlck1lbW9yeUFsbG9jYXRvckR1bXBUcmVlXyhtZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWUpe2NvbnN0IHJvb3RBbGxvY2F0b3JEdW1wcz1bXTtjb25zdCBmdWxsTmFtZXM9T2JqZWN0LmtleXMobWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lKTtmdWxsTmFtZXMuc29ydCgpO2ZvcihsZXQgaT0wO2k8ZnVsbE5hbWVzLmxlbmd0aDtpKyspe2xldCBmdWxsTmFtZT1mdWxsTmFtZXNbaV07bGV0IGFsbG9jYXRvckR1bXA9bWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lW2Z1bGxOYW1lXTt3aGlsZSh0cnVlKXtjb25zdCBsYXN0U2xhc2hJbmRleD1mdWxsTmFtZS5sYXN0SW5kZXhPZignLycpO2lmKGxhc3RTbGFzaEluZGV4PT09LTEpe3Jvb3RBbGxvY2F0b3JEdW1wcy5wdXNoKGFsbG9jYXRvckR1bXApO2JyZWFrO30KLWNvbnN0IHBhcmVudEZ1bGxOYW1lPWZ1bGxOYW1lLnN1YnN0cmluZygwLGxhc3RTbGFzaEluZGV4KTtsZXQgcGFyZW50QWxsb2NhdG9yRHVtcD1tZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWVbcGFyZW50RnVsbE5hbWVdO2xldCBwYXJlbnRBbHJlYWR5RXhpc3RlZD10cnVlO2lmKHBhcmVudEFsbG9jYXRvckR1bXA9PT11bmRlZmluZWQpe3BhcmVudEFscmVhZHlFeGlzdGVkPWZhbHNlO3BhcmVudEFsbG9jYXRvckR1bXA9bmV3IHRyLm1vZGVsLk1lbW9yeUFsbG9jYXRvckR1bXAoYWxsb2NhdG9yRHVtcC5jb250YWluZXJNZW1vcnlEdW1wLHBhcmVudEZ1bGxOYW1lKTtpZihhbGxvY2F0b3JEdW1wLndlYWshPT1mYWxzZSl7cGFyZW50QWxsb2NhdG9yRHVtcC53ZWFrPXVuZGVmaW5lZDt9Ci1tZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWVbcGFyZW50RnVsbE5hbWVdPXBhcmVudEFsbG9jYXRvckR1bXA7fQotYWxsb2NhdG9yRHVtcC5wYXJlbnQ9cGFyZW50QWxsb2NhdG9yRHVtcDtwYXJlbnRBbGxvY2F0b3JEdW1wLmNoaWxkcmVuLnB1c2goYWxsb2NhdG9yRHVtcCk7aWYocGFyZW50QWxyZWFkeUV4aXN0ZWQpe2lmKCFhbGxvY2F0b3JEdW1wLndlYWspe3doaWxlKHBhcmVudEFsbG9jYXRvckR1bXAhPT11bmRlZmluZWQmJnBhcmVudEFsbG9jYXRvckR1bXAud2Vhaz09PXVuZGVmaW5lZCl7cGFyZW50QWxsb2NhdG9yRHVtcC53ZWFrPWZhbHNlO3BhcmVudEFsbG9jYXRvckR1bXA9cGFyZW50QWxsb2NhdG9yRHVtcC5wYXJlbnQ7fX0KLWJyZWFrO30KLWZ1bGxOYW1lPXBhcmVudEZ1bGxOYW1lO2FsbG9jYXRvckR1bXA9cGFyZW50QWxsb2NhdG9yRHVtcDt9fQotZm9yKGNvbnN0IGZ1bGxOYW1lIGluIG1lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZSl7Y29uc3QgYWxsb2NhdG9yRHVtcD1tZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWVbZnVsbE5hbWVdO2lmKGFsbG9jYXRvckR1bXAud2Vhaz09PXVuZGVmaW5lZCl7YWxsb2NhdG9yRHVtcC53ZWFrPXRydWU7fX0KLXJldHVybiByb290QWxsb2NhdG9yRHVtcHM7fSxwYXJzZU1lbW9yeUR1bXBBbGxvY2F0b3JFZGdlc18oYWxsTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUd1aWQsZHVtcElkRXZlbnRzLGR1bXBJZCl7Zm9yKGNvbnN0IHBpZCBpbiBkdW1wSWRFdmVudHMpe2NvbnN0IHByb2Nlc3NFdmVudHM9ZHVtcElkRXZlbnRzW3BpZF07Zm9yKGxldCBpPTA7aTxwcm9jZXNzRXZlbnRzLmxlbmd0aDtpKyspe2NvbnN0IHByb2Nlc3NFdmVudD1wcm9jZXNzRXZlbnRzW2ldO2NvbnN0IGR1bXBzPXByb2Nlc3NFdmVudC5hcmdzLmR1bXBzO2lmKGR1bXBzPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IHJhd0VkZ2VzPWR1bXBzLmFsbG9jYXRvcnNfZ3JhcGg7aWYocmF3RWRnZXM9PT11bmRlZmluZWQpY29udGludWU7Zm9yKGxldCBqPTA7ajxyYXdFZGdlcy5sZW5ndGg7aisrKXtjb25zdCByYXdFZGdlPXJhd0VkZ2VzW2pdO2NvbnN0IHNvdXJjZUd1aWQ9cmF3RWRnZS5zb3VyY2U7Y29uc3Qgc291cmNlRHVtcD1hbGxNZW1vcnlBbGxvY2F0b3JEdW1wc0J5R3VpZFtzb3VyY2VHdWlkXTtpZihzb3VyY2VEdW1wPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonRWRnZSBmb3IgUElEPScrcGlkKycgYW5kIGR1bXAgSUQ9JytkdW1wSWQrJyBpcyBtaXNzaW5nIHNvdXJjZSBtZW1vcnkgYWxsb2NhdG9yIGR1bXAgKEdVSUQ9JysKLXNvdXJjZUd1aWQrJykuJ30pO2NvbnRpbnVlO30KLWNvbnN0IHRhcmdldEd1aWQ9cmF3RWRnZS50YXJnZXQ7Y29uc3QgdGFyZ2V0RHVtcD1hbGxNZW1vcnlBbGxvY2F0b3JEdW1wc0J5R3VpZFt0YXJnZXRHdWlkXTtpZih0YXJnZXREdW1wPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonRWRnZSBmb3IgUElEPScrcGlkKycgYW5kIGR1bXAgSUQ9JytkdW1wSWQrJyBpcyBtaXNzaW5nIHRhcmdldCBtZW1vcnkgYWxsb2NhdG9yIGR1bXAgKEdVSUQ9JysKLXRhcmdldEd1aWQrJykuJ30pO2NvbnRpbnVlO30KLWNvbnN0IGltcG9ydGFuY2U9cmF3RWRnZS5pbXBvcnRhbmNlO2NvbnN0IGVkZ2U9bmV3IHRyLm1vZGVsLk1lbW9yeUFsbG9jYXRvckR1bXBMaW5rKHNvdXJjZUR1bXAsdGFyZ2V0RHVtcCxpbXBvcnRhbmNlKTtzd2l0Y2gocmF3RWRnZS50eXBlKXtjYXNlJ293bmVyc2hpcCc6aWYoc291cmNlRHVtcC5vd25zIT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonTWVtb3J5IGFsbG9jYXRvciBkdW1wICcrc291cmNlRHVtcC5mdWxsTmFtZSsnIChHVUlEPScrc291cmNlR3VpZCsnKSBhbHJlYWR5IG93bnMgYSBtZW1vcnknKycgYWxsb2NhdG9yIGR1bXAgKCcrCi1zb3VyY2VEdW1wLm93bnMudGFyZ2V0LmZ1bGxOYW1lKycpLid9KTt9ZWxzZXtzb3VyY2VEdW1wLm93bnM9ZWRnZTt0YXJnZXREdW1wLm93bmVkQnkucHVzaChlZGdlKTt9Ci1icmVhaztjYXNlJ3JldGVudGlvbic6c291cmNlRHVtcC5yZXRhaW5zLnB1c2goZWRnZSk7dGFyZ2V0RHVtcC5yZXRhaW5lZEJ5LnB1c2goZWRnZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonSW52YWxpZCBlZGdlIHR5cGU6ICcrcmF3RWRnZS50eXBlKycgKFBJRD0nK3BpZCsnLCBkdW1wIElEPScrZHVtcElkKycsIHNvdXJjZT0nK3NvdXJjZUd1aWQrJywgdGFyZ2V0PScrdGFyZ2V0R3VpZCsnLCBpbXBvcnRhbmNlPScraW1wb3J0YW5jZSsnKS4nfSk7fX19fX0sdG9Nb2RlbFRpbWVGcm9tVXNfKHRzKXtpZighdGhpcy50b01vZGVsVGltZV8pe3RoaXMudG9Nb2RlbFRpbWVfPXRoaXMubW9kZWxfLmNsb2NrU3luY01hbmFnZXIuZ2V0TW9kZWxUaW1lVHJhbnNmb3JtZXIodGhpcy5jbG9ja0RvbWFpbklkXyk7fQotcmV0dXJuIHRoaXMudG9Nb2RlbFRpbWVfKHRyLmIuVW5pdC50aW1lc3RhbXBGcm9tVXModHMpKTt9LG1heWJlVG9Nb2RlbFRpbWVGcm9tVXNfKHRzKXtpZih0cz09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1yZXR1cm4gdGhpcy50b01vZGVsVGltZUZyb21Vc18odHMpO319O3RyLmltcG9ydGVyLkltcG9ydGVyLnJlZ2lzdGVyKFRyYWNlRXZlbnRJbXBvcnRlcik7cmV0dXJue1RyYWNlRXZlbnRJbXBvcnRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5tZWFzdXJlJyxmdW5jdGlvbigpe2NvbnN0IEFzeW5jU2xpY2U9dHIubW9kZWwuQXN5bmNTbGljZTtmdW5jdGlvbiBNZWFzdXJlQXN5bmNTbGljZSgpe3RoaXMuZ3JvdXBUaXRsZV89J1VuZ3JvdXBlZCBNZWFzdXJlJztjb25zdCBtYXRjaGVkPS8oW15cLzpdKyk6KFteXC86XSspXC8/KC4qKS8uZXhlYyhhcmd1bWVudHNbMV0pO2lmKG1hdGNoZWQhPT1udWxsKXthcmd1bWVudHNbMV09bWF0Y2hlZFsyXTt0aGlzLmdyb3VwVGl0bGVfPW1hdGNoZWRbMV07fQotQXN5bmNTbGljZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQotTWVhc3VyZUFzeW5jU2xpY2UucHJvdG90eXBlPXtfX3Byb3RvX186QXN5bmNTbGljZS5wcm90b3R5cGUsZ2V0IHZpZXdTdWJHcm91cFRpdGxlKCl7cmV0dXJuIHRoaXMuZ3JvdXBUaXRsZV87fSxnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy50aXRsZV87fSxzZXQgdGl0bGUodGl0bGUpe3RoaXMudGl0bGVfPXRpdGxlO319O0FzeW5jU2xpY2Uuc3ViVHlwZXMucmVnaXN0ZXIoTWVhc3VyZUFzeW5jU2xpY2Use2NhdGVnb3J5UGFydHM6WydibGluay51c2VyX3RpbWluZyddfSk7cmV0dXJue01lYXN1cmVBc3luY1NsaWNlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLm5ldCcsZnVuY3Rpb24oKXtjb25zdCBBc3luY1NsaWNlPXRyLm1vZGVsLkFzeW5jU2xpY2U7ZnVuY3Rpb24gTmV0QXN5bmNTbGljZSgpe0FzeW5jU2xpY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudXJsXz11bmRlZmluZWQ7dGhpcy5ieXRlQ291bnRfPXVuZGVmaW5lZDt0aGlzLmlzVGl0bGVDb21wdXRlZF89ZmFsc2U7dGhpcy5pc1VybENvbXB1dGVkXz1mYWxzZTt9Ci1OZXRBc3luY1NsaWNlLnByb3RvdHlwZT17X19wcm90b19fOkFzeW5jU2xpY2UucHJvdG90eXBlLGdldCB2aWV3U3ViR3JvdXBUaXRsZSgpe3JldHVybidOZXRMb2cnO30sZ2V0IHRpdGxlKCl7aWYodGhpcy5pc1RpdGxlQ29tcHV0ZWRffHwhdGhpcy5pc1RvcExldmVsKXtyZXR1cm4gdGhpcy50aXRsZV87fQotaWYodGhpcy51cmwhPT11bmRlZmluZWQmJnRoaXMudXJsLmxlbmd0aD4wKXt0aGlzLnRpdGxlXz10aGlzLnVybDt9ZWxzZSBpZih0aGlzLmFyZ3MhPT11bmRlZmluZWQmJnRoaXMuYXJncy5zb3VyY2VfdHlwZSE9PXVuZGVmaW5lZCl7dGhpcy50aXRsZV89dGhpcy5hcmdzLnNvdXJjZV90eXBlO30KLXRoaXMuaXNUaXRsZUNvbXB1dGVkXz10cnVlO3JldHVybiB0aGlzLnRpdGxlXzt9LHNldCB0aXRsZSh0aXRsZSl7dGhpcy50aXRsZV89dGl0bGU7fSxnZXQgdXJsKCl7aWYodGhpcy5pc1VybENvbXB1dGVkXyl7cmV0dXJuIHRoaXMudXJsXzt9Ci1pZih0aGlzLmFyZ3MhPT11bmRlZmluZWQmJnRoaXMuYXJncy5wYXJhbXMhPT11bmRlZmluZWQmJnRoaXMuYXJncy5wYXJhbXMudXJsIT09dW5kZWZpbmVkKXt0aGlzLnVybF89dGhpcy5hcmdzLnBhcmFtcy51cmw7fWVsc2UgaWYodGhpcy5zdWJTbGljZXMhPT11bmRlZmluZWQmJnRoaXMuc3ViU2xpY2VzLmxlbmd0aD4wKXtmb3IobGV0IGk9MDtpPHRoaXMuc3ViU2xpY2VzLmxlbmd0aCYmIXRoaXMudXJsXztpKyspe2lmKHRoaXMuc3ViU2xpY2VzW2ldLnVybCE9PXVuZGVmaW5lZCl7dGhpcy51cmxfPXRoaXMuc3ViU2xpY2VzW2ldLnVybDt9fX0KLXRoaXMuaXNVcmxDb21wdXRlZF89dHJ1ZTtyZXR1cm4gdGhpcy51cmxfO30sZ2V0IGJ5dGVDb3VudCgpe2lmKHRoaXMuYnl0ZUNvdW50XyE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMuYnl0ZUNvdW50Xzt9Ci10aGlzLmJ5dGVDb3VudF89MDtpZigodGhpcy5vcmlnaW5hbFRpdGxlPT09J1VSTF9SRVFVRVNUX0pPQl9GSUxURVJFRF9CWVRFU19SRUFEJ3x8dGhpcy5vcmlnaW5hbFRpdGxlPT09J1VSTF9SRVFVRVNUX0pPQl9CWVRFU19SRUFEJykmJnRoaXMuYXJncyE9PXVuZGVmaW5lZCYmdGhpcy5hcmdzLnBhcmFtcyE9PXVuZGVmaW5lZCYmdGhpcy5hcmdzLnBhcmFtcy5ieXRlX2NvdW50IT09dW5kZWZpbmVkKXt0aGlzLmJ5dGVDb3VudF89dGhpcy5hcmdzLnBhcmFtcy5ieXRlX2NvdW50O30KLWZvcihsZXQgaT0wO2k8dGhpcy5zdWJTbGljZXMubGVuZ3RoO2krKyl7dGhpcy5ieXRlQ291bnRfKz10aGlzLnN1YlNsaWNlc1tpXS5ieXRlQ291bnQ7fQotcmV0dXJuIHRoaXMuYnl0ZUNvdW50Xzt9fTtBc3luY1NsaWNlLnN1YlR5cGVzLnJlZ2lzdGVyKE5ldEFzeW5jU2xpY2Use2NhdGVnb3J5UGFydHM6WyduZXRsb2cnLCdkaXNhYmxlZC1ieS1kZWZhdWx0LW5ldGxvZyddfSk7cmV0dXJue05ldEFzeW5jU2xpY2UsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtmdW5jdGlvbiBQYXJzZXIoaW1wb3J0ZXIpe3RoaXMuaW1wb3J0ZXI9aW1wb3J0ZXI7dGhpcy5tb2RlbD1pbXBvcnRlci5tb2RlbDt9Ci1QYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZX07Y29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5CQVNJQ19SRUdJU1RSWV9NT0RFKTtvcHRpb25zLm1hbmRhdG9yeUJhc2VDbGFzcz1QYXJzZXI7dHIuYi5kZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KFBhcnNlcixvcHRpb25zKTtyZXR1cm57UGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlcjtmdW5jdGlvbiBBbmRyb2lkUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcigndHJhY2luZ19tYXJrX3dyaXRlOmFuZHJvaWQnLEFuZHJvaWRQYXJzZXIucHJvdG90eXBlLnRyYWNlTWFya1dyaXRlQW5kcm9pZEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCcwOmFuZHJvaWQnLEFuZHJvaWRQYXJzZXIucHJvdG90eXBlLnRyYWNlTWFya1dyaXRlQW5kcm9pZEV2ZW50LmJpbmQodGhpcykpO3RoaXMubW9kZWxfPWltcG9ydGVyLm1vZGVsXzt0aGlzLnBwaWRzXz17fTt9Ci1mdW5jdGlvbiBwYXJzZUFyZ3MoYXJnc1N0cmluZyl7Y29uc3QgYXJncz17fTtpZihhcmdzU3RyaW5nKXtjb25zdCBhcmdzQXJyYXk9YXJnc1N0cmluZy5zcGxpdCgnOycpO2ZvcihsZXQgaT0wO2k8YXJnc0FycmF5Lmxlbmd0aDsrK2kpe2NvbnN0IHBhcnRzPWFyZ3NBcnJheVtpXS5zcGxpdCgnPScpO2lmKHBhcnRzWzBdKXthcmdzW3BhcnRzLnNoaWZ0KCldPXBhcnRzLmpvaW4oJz0nKTt9fX0KLXJldHVybiBhcmdzO30KLUFuZHJvaWRQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxvcGVuQXN5bmNTbGljZSh0aHJlYWQsY2F0ZWdvcnksbmFtZSxjb29raWUsdHMsYXJncyl7Y29uc3QgYXN5bmNTbGljZUNvbnN0cnVjdG9yPXRyLm1vZGVsLkFzeW5jU2xpY2Uuc3ViVHlwZXMuZ2V0Q29uc3RydWN0b3IoY2F0ZWdvcnksbmFtZSk7Y29uc3Qgc2xpY2U9bmV3IGFzeW5jU2xpY2VDb25zdHJ1Y3RvcihjYXRlZ29yeSxuYW1lLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhuYW1lKSx0cyxhcmdzKTtjb25zdCBrZXk9Y2F0ZWdvcnkrJzonK25hbWUrJzonK2Nvb2tpZTtzbGljZS5pZD1jb29raWU7c2xpY2Uuc3RhcnRUaHJlYWQ9dGhyZWFkO2lmKCF0aGlzLm9wZW5Bc3luY1NsaWNlcyl7dGhpcy5vcGVuQXN5bmNTbGljZXM9e307fQotdGhpcy5vcGVuQXN5bmNTbGljZXNba2V5XT1zbGljZTt9LGNsb3NlQXN5bmNTbGljZSh0aHJlYWQsY2F0ZWdvcnksbmFtZSxjb29raWUsdHMsYXJncyl7aWYoIXRoaXMub3BlbkFzeW5jU2xpY2VzKXtyZXR1cm47fQotY29uc3Qga2V5PWNhdGVnb3J5Kyc6JytuYW1lKyc6Jytjb29raWU7Y29uc3Qgc2xpY2U9dGhpcy5vcGVuQXN5bmNTbGljZXNba2V5XTtpZighc2xpY2Upe3JldHVybjt9Ci1mb3IoY29uc3QgYXJnIGluIGFyZ3Mpe2lmKHNsaWNlLmFyZ3NbYXJnXSE9PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J0JvdGggdGhlIFMgYW5kIEYgZXZlbnRzIG9mICcrc2xpY2UudGl0bGUrJyBwcm92aWRlZCB2YWx1ZXMgZm9yIGFyZ3VtZW50ICcrYXJnKycuJysnIFRoZSB2YWx1ZSBvZiB0aGUgRiBldmVudCB3aWxsIGJlIHVzZWQuJ30pO30KLXNsaWNlLmFyZ3NbYXJnXT1hcmdzW2FyZ107fQotc2xpY2UuZW5kVGhyZWFkPXRocmVhZDtzbGljZS5kdXJhdGlvbj10cy1zbGljZS5zdGFydDtzbGljZS5zdGFydFRocmVhZC5hc3luY1NsaWNlR3JvdXAucHVzaChzbGljZSk7ZGVsZXRlIHRoaXMub3BlbkFzeW5jU2xpY2VzW2tleV07fSx0cmFjZU1hcmtXcml0ZUFuZHJvaWRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50RGF0YT1ldmVudEJhc2UuZGV0YWlscy5zcGxpdCgnfCcpO3N3aXRjaChldmVudERhdGFbMF0pe2Nhc2UnQic6e2NvbnN0IHBwaWQ9cGFyc2VJbnQoZXZlbnREYXRhWzFdKTtjb25zdCB0aXRsZT1ldmVudERhdGFbMl07Y29uc3QgYXJncz1wYXJzZUFyZ3MoZXZlbnREYXRhWzNdKTtsZXQgY2F0ZWdvcnk9ZXZlbnREYXRhWzRdO2lmKGNhdGVnb3J5PT09dW5kZWZpbmVkKWNhdGVnb3J5PSdhbmRyb2lkJztjb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKHBwaWQpLmdldE9yQ3JlYXRlVGhyZWFkKHBpZCk7dGhyZWFkLm5hbWU9ZXZlbnRCYXNlLnRocmVhZE5hbWU7aWYoIXRocmVhZC5zbGljZUdyb3VwLmlzVGltZXN0YW1wVmFsaWRGb3JCZWdpbk9yRW5kKHRzKSl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J1RpbWVzdGFtcHMgYXJlIG1vdmluZyBiYWNrd2FyZC4nfSk7cmV0dXJuIGZhbHNlO30KLXRoaXMucHBpZHNfW3BpZF09cHBpZDt0aHJlYWQuc2xpY2VHcm91cC5iZWdpblNsaWNlKGNhdGVnb3J5LHRpdGxlLHRzLGFyZ3MpO2JyZWFrO30KLWNhc2UnRSc6e2NvbnN0IHBwaWQ9dGhpcy5wcGlkc19bcGlkXTtpZihwcGlkPT09dW5kZWZpbmVkKXticmVhazt9Ci1jb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKHBwaWQpLmdldE9yQ3JlYXRlVGhyZWFkKHBpZCk7aWYoIXRocmVhZC5zbGljZUdyb3VwLm9wZW5TbGljZUNvdW50KXticmVhazt9Ci1jb25zdCBzbGljZT10aHJlYWQuc2xpY2VHcm91cC5lbmRTbGljZSh0cyk7Y29uc3QgYXJncz1wYXJzZUFyZ3MoZXZlbnREYXRhWzNdKTtmb3IoY29uc3QgYXJnIGluIGFyZ3Mpe2lmKHNsaWNlLmFyZ3NbYXJnXSE9PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J0JvdGggdGhlIEIgYW5kIEUgZXZlbnRzIG9mICcrc2xpY2UudGl0bGUrJyBwcm92aWRlZCB2YWx1ZXMgZm9yIGFyZ3VtZW50ICcrYXJnKycuJysnIFRoZSB2YWx1ZSBvZiB0aGUgRSBldmVudCB3aWxsIGJlIHVzZWQuJ30pO30KLXNsaWNlLmFyZ3NbYXJnXT1hcmdzW2FyZ107fQotYnJlYWs7fQotY2FzZSdDJzp7Y29uc3QgcHBpZD1wYXJzZUludChldmVudERhdGFbMV0pO2NvbnN0IG5hbWU9ZXZlbnREYXRhWzJdO2NvbnN0IHZhbHVlPXBhcnNlSW50KGV2ZW50RGF0YVszXSk7bGV0IGNhdGVnb3J5PWV2ZW50RGF0YVs0XTtpZihjYXRlZ29yeT09PXVuZGVmaW5lZCljYXRlZ29yeT0nYW5kcm9pZCc7Y29uc3QgY3RyPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhwcGlkKS5nZXRPckNyZWF0ZUNvdW50ZXIoY2F0ZWdvcnksbmFtZSk7aWYoY3RyLm51bVNlcmllcz09PTApe2N0ci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXModmFsdWUsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGN0ci5uYW1lKycuJysndmFsdWUnKSkpO30KLWN0ci5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3Nlcmllcy5hZGRDb3VudGVyU2FtcGxlKHRzLHZhbHVlKTt9KTticmVhazt9Ci1jYXNlJ1MnOntjb25zdCBwcGlkPXBhcnNlSW50KGV2ZW50RGF0YVsxXSk7Y29uc3QgbmFtZT1ldmVudERhdGFbMl07Y29uc3QgY29va2llPXBhcnNlSW50KGV2ZW50RGF0YVszXSk7Y29uc3QgYXJncz1wYXJzZUFyZ3MoZXZlbnREYXRhWzRdKTtsZXQgY2F0ZWdvcnk9ZXZlbnREYXRhWzVdO2lmKGNhdGVnb3J5PT09dW5kZWZpbmVkKWNhdGVnb3J5PSdhbmRyb2lkJztjb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKHBwaWQpLmdldE9yQ3JlYXRlVGhyZWFkKHBpZCk7dGhyZWFkLm5hbWU9ZXZlbnRCYXNlLnRocmVhZE5hbWU7dGhpcy5wcGlkc19bcGlkXT1wcGlkO3RoaXMub3BlbkFzeW5jU2xpY2UodGhyZWFkLGNhdGVnb3J5LG5hbWUsY29va2llLHRzLGFyZ3MpO2JyZWFrO30KLWNhc2UnRic6e2NvbnN0IHBwaWQ9cGFyc2VJbnQoZXZlbnREYXRhWzFdKTtjb25zdCBuYW1lPWV2ZW50RGF0YVsyXTtjb25zdCBjb29raWU9cGFyc2VJbnQoZXZlbnREYXRhWzNdKTtjb25zdCBhcmdzPXBhcnNlQXJncyhldmVudERhdGFbNF0pO2xldCBjYXRlZ29yeT1ldmVudERhdGFbNV07aWYoY2F0ZWdvcnk9PT11bmRlZmluZWQpY2F0ZWdvcnk9J2FuZHJvaWQnO2NvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MocHBpZCkuZ2V0T3JDcmVhdGVUaHJlYWQocGlkKTt0aHJlYWQubmFtZT1ldmVudEJhc2UudGhyZWFkTmFtZTt0aGlzLnBwaWRzX1twaWRdPXBwaWQ7dGhpcy5jbG9zZUFzeW5jU2xpY2UodGhyZWFkLGNhdGVnb3J5LG5hbWUsY29va2llLHRzLGFyZ3MpO2JyZWFrO30KLWRlZmF1bHQ6cmV0dXJuIGZhbHNlO30KLXJldHVybiB0cnVlO319O1BhcnNlci5yZWdpc3RlcihBbmRyb2lkUGFyc2VyKTtyZXR1cm57QW5kcm9pZFBhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5saW51eF9wZXJmJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7Y29uc3QgYmluZGVyVHJhbnNSRT1uZXcgUmVnRXhwKCd0cmFuc2FjdGlvbj0oXFxkKykgZGVzdF9ub2RlPShcXGQrKSAnKydkZXN0X3Byb2M9KFxcZCspIGRlc3RfdGhyZWFkPShcXGQrKSAnKydyZXBseT0oXFxkKykgZmxhZ3M9KDB4WzAtOWEtZkEtRl0rKSAnKydjb2RlPSgweFswLTlhLWZBLUZdKyknKTtjb25zdCBiaW5kZXJUcmFuc1JlY2VpdmVkUkU9L3RyYW5zYWN0aW9uPShcZCspLztmdW5jdGlvbiBpc0JpbmRlclRocmVhZChuYW1lKXtyZXR1cm4obmFtZS5pbmRleE9mKCdCaW5kZXInKT4tMSk7fQotY29uc3QgVEZfT05FX1dBWT0weDAxO2NvbnN0IFRGX1JPT1RfT0JKRUNUPTB4MDQ7Y29uc3QgVEZfU1RBVFVTX0NPREU9MHgwODtjb25zdCBURl9BQ0NFUFRfRkRTPTB4MTA7Y29uc3QgTk9fRkxBR1M9MDtmdW5jdGlvbiBiaW5kZXJGbGFnc1RvSHVtYW4obnVtKXtjb25zdCBmbGFnPXBhcnNlSW50KG51bSwxNik7bGV0IHN0cj0nJztpZihmbGFnJlRGX09ORV9XQVkpe3N0cis9J3RoaXMgaXMgYSBvbmUtd2F5IGNhbGw6IGFzeW5jLCBubyByZXR1cm47ICc7fQotaWYoZmxhZyZURl9ST09UX09CSkVDVCl7c3RyKz0nY29udGVudHMgYXJlIHRoZSBjb21wb25lbnRzIHJvb3Qgb2JqZWN0OyAnO30KLWlmKGZsYWcmVEZfU1RBVFVTX0NPREUpe3N0cis9J2NvbnRlbnRzIGFyZSBhIDMyLWJpdCBzdGF0dXMgY29kZTsgJzt9Ci1pZihmbGFnJlRGX0FDQ0VQVF9GRFMpe3N0cis9J2FsbG93IHJlcGxpZXMgd2l0aCBmaWxlIGRlc2NyaXB0b3JzOyAnO30KLWlmKGZsYWc9PT1OT19GTEFHUyl7c3RyKz0nTm8gRmxhZ3MgU2V0Jzt9Ci1yZXR1cm4gc3RyO30KLWZ1bmN0aW9uIGlzUmVwbHlUb09yaWdpbihjYWxsaW5nLGNhbGxlZCl7cmV0dXJuKGNhbGxlZC5kZXN0X3Byb2M9PT1jYWxsaW5nLmNhbGxpbmdfcGlkfHxjYWxsZWQuZGVzdF90aHJlYWQ9PT1jYWxsaW5nLmNhbGxpbmdfcGlkKTt9Ci1mdW5jdGlvbiBiaW5kZXJDb2RlVG9IdW1hbihjb2RlKXtyZXR1cm4nSmF2YSBMYXllciBEZXBlbmRlbnQnO30KLWZ1bmN0aW9uIGRvSW50ZXJuYWxTbGljZSh0cmFucyxzbGljZSx0cyl7aWYoc2xpY2Uuc3ViU2xpY2VzLmxlbmd0aCE9PTApe3NsaWNlLnN1YlNsaWNlc1swXS5zdGFydD10cztyZXR1cm4gc2xpY2Uuc3ViU2xpY2VzWzBdO30KLWNvbnN0IGt0aHJlYWQ9dHJhbnMuY2FsbGluZ19rdGhyZWFkLnRocmVhZDtjb25zdCBpbnRlcm5hbFNsaWNlPWt0aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnYmluZGVyJyxzbGljZS50aXRsZSx0cywuMDAxLDAsMCxzbGljZS5hcmdzKTtpbnRlcm5hbFNsaWNlLnRpdGxlPXNsaWNlLnRpdGxlO2ludGVybmFsU2xpY2UuaWQ9c2xpY2UuaWQ7aW50ZXJuYWxTbGljZS5jb2xvcklkPXNsaWNlLmNvbG9ySWQ7c2xpY2Uuc3ViU2xpY2VzLnB1c2goaW50ZXJuYWxTbGljZSk7cmV0dXJuIGludGVybmFsU2xpY2U7fQotZnVuY3Rpb24gZ2VuZXJhdGVCaW5kZXJBcmdzRm9yU2xpY2UodHJhbnMsY1RocmVhZE5hbWUpe3JldHVybnsnVHJhbnNhY3Rpb24gSWQnOnRyYW5zLnRyYW5zYWN0aW9uX2tleSwnRGVzdGluYXRpb24gTm9kZSc6dHJhbnMuZGVzdF9ub2RlLCdEZXN0aW5hdGlvbiBQcm9jZXNzJzp0cmFucy5kZXN0X3Byb2MsJ0Rlc3RpbmF0aW9uIFRocmVhZCc6dHJhbnMuZGVzdF90aHJlYWQsJ0Rlc3RpbmF0aW9uIE5hbWUnOmNUaHJlYWROYW1lLCdSZXBseSB0cmFuc2FjdGlvbj8nOnRyYW5zLmlzX3JlcGx5X3RyYW5zYWN0aW9uLCdGbGFncyc6dHJhbnMuZmxhZ3MrJyAnKwotYmluZGVyRmxhZ3NUb0h1bWFuKHRyYW5zLmZsYWdzKSwnQ29kZSc6dHJhbnMuY29kZSsnICcrCi1iaW5kZXJDb2RlVG9IdW1hbih0cmFucy5jb2RlKSwnQ2FsbGluZyBQSUQnOnRyYW5zLmNhbGxpbmdfcGlkLCdDYWxsaW5nIHRnaWQnOnRyYW5zLmNhbGxpbmdfa3RocmVhZC50aHJlYWQucGFyZW50LnBpZH07fQotZnVuY3Rpb24gQmluZGVyVHJhbnNhY3Rpb24oZXZlbnRzLGNhbGxpbmdQaWQsY2FsbGluZ1RzLGNhbGxpbmdLdGhyZWFkKXt0aGlzLnRyYW5zYWN0aW9uX2tleT1wYXJzZUludChldmVudHNbMV0pO3RoaXMuZGVzdF9ub2RlPXBhcnNlSW50KGV2ZW50c1syXSk7dGhpcy5kZXN0X3Byb2M9cGFyc2VJbnQoZXZlbnRzWzNdKTt0aGlzLmRlc3RfdGhyZWFkPXBhcnNlSW50KGV2ZW50c1s0XSk7dGhpcy5pc19yZXBseV90cmFuc2FjdGlvbj1wYXJzZUludChldmVudHNbNV0pPT09MT90cnVlOmZhbHNlO3RoaXMuZXhwZWN0X3JlcGx5PSgodGhpcy5pc19yZXBseV90cmFuc2FjdGlvbj09PWZhbHNlKSYmKHBhcnNlSW50KGV2ZW50c1s2XSwxNikmVEZfT05FX1dBWSk9PT0wKTt0aGlzLmZsYWdzPWV2ZW50c1s2XTt0aGlzLmNvZGU9ZXZlbnRzWzddO3RoaXMuY2FsbGluZ19waWQ9Y2FsbGluZ1BpZDt0aGlzLmNhbGxpbmdfdHM9Y2FsbGluZ1RzO3RoaXMuY2FsbGluZ19rdGhyZWFkPWNhbGxpbmdLdGhyZWFkO30KLWZ1bmN0aW9uIEJpbmRlclBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2JpbmRlcl9sb2NrZWQnLEJpbmRlclBhcnNlci5wcm90b3R5cGUuYmluZGVyTG9ja2VkLmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdiaW5kZXJfdW5sb2NrJyxCaW5kZXJQYXJzZXIucHJvdG90eXBlLmJpbmRlclVubG9jay5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignYmluZGVyX2xvY2snLEJpbmRlclBhcnNlci5wcm90b3R5cGUuYmluZGVyTG9jay5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignYmluZGVyX3RyYW5zYWN0aW9uJyxCaW5kZXJQYXJzZXIucHJvdG90eXBlLmJpbmRlclRyYW5zYWN0aW9uLmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdiaW5kZXJfdHJhbnNhY3Rpb25fcmVjZWl2ZWQnLEJpbmRlclBhcnNlci5wcm90b3R5cGUuYmluZGVyVHJhbnNhY3Rpb25SZWNlaXZlZC5iaW5kKHRoaXMpKTt0aGlzLm1vZGVsXz1pbXBvcnRlci5tb2RlbDt0aGlzLmt0aHJlYWRsb29rdXA9e307dGhpcy5pbXBvcnRlcl89aW1wb3J0ZXI7dGhpcy50cmFuc1dhaXRpbmdSZWN2PXt9O3RoaXMuc3luY1RyYW5zV2FpdGluZ0NvbXBsZXRpb249e307dGhpcy5yZWN1cnNpdmVTeW5jVHJhbnNXYWl0aW5nQ29tcGxldGlvbl9CeVBJRD17fTt0aGlzLnJlY2VpdmVkVHJhbnNXYWl0aW5nQ29udmVyc2lvbj17fTt9Ci1CaW5kZXJQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxiaW5kZXJMb2NrKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgdGdpZD1wYXJzZUludChldmVudEJhc2UudGdpZCk7aWYoaXNOYU4odGdpZCkpcmV0dXJuIGZhbHNlO3RoaXMuZG9OYW1lTWFwcGluZ3MocGlkLHRnaWQsZXZlbnROYW1lLnRocmVhZE5hbWUpO2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlcl8uZ2V0T3JDcmVhdGVCaW5kZXJLZXJuZWxUaHJlYWQoZXZlbnRCYXNlLnRocmVhZE5hbWUsdGdpZCxwaWQpO2t0aHJlYWQuYmluZGVyQXR0ZW1wdExvY2tUUz10cztrdGhyZWFkLmJpbmRlck9wZW5Uc0E9dHM7cmV0dXJuIHRydWU7fSxiaW5kZXJMb2NrZWQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCB0Z2lkPXBhcnNlSW50KGV2ZW50QmFzZS50Z2lkKTtpZihpc05hTih0Z2lkKSlyZXR1cm4gZmFsc2U7Y29uc3QgYmluZGVyVGhyZWFkPWlzQmluZGVyVGhyZWFkKGV2ZW50QmFzZS50aHJlYWROYW1lKTtjb25zdCBuYW1lPWV2ZW50QmFzZS50aHJlYWROYW1lO2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlcl8uZ2V0T3JDcmVhdGVCaW5kZXJLZXJuZWxUaHJlYWQoZXZlbnRCYXNlLnRocmVhZE5hbWUsdGdpZCxwaWQpO3RoaXMuZG9OYW1lTWFwcGluZ3MocGlkLHRnaWQsbmFtZSk7Y29uc3QgcnRocmVhZD1rdGhyZWFkLnRocmVhZDtrdGhyZWFkLmJpbmRlckxvY2tBcXVpcmVkVFM9dHM7aWYoa3RocmVhZC5iaW5kZXJBdHRlbXB0TG9ja1RTPT09dW5kZWZpbmVkKXJldHVybiBmYWxzZTtjb25zdCBhcmdzPXRoaXMuZ2VuZXJhdGVBcmdzRm9yU2xpY2UodGdpZCxwaWQsbmFtZSxrdGhyZWFkKTtydGhyZWFkLnNsaWNlR3JvdXAucHVzaENvbXBsZXRlU2xpY2UoJ2JpbmRlcicsJ2JpbmRlciBsb2NrIHdhaXRpbmcnLGt0aHJlYWQuYmluZGVyQXR0ZW1wdExvY2tUUyx0cy1rdGhyZWFkLmJpbmRlckF0dGVtcHRMb2NrVFMsMCwwLGFyZ3MpO2t0aHJlYWQuYmluZGVyQXR0ZW1wdExvY2tUUz11bmRlZmluZWQ7cmV0dXJuIHRydWU7fSxiaW5kZXJVbmxvY2soZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCB0Z2lkPXBhcnNlSW50KGV2ZW50QmFzZS50Z2lkKTtpZihpc05hTih0Z2lkKSlyZXR1cm4gZmFsc2U7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyXy5nZXRPckNyZWF0ZUJpbmRlcktlcm5lbFRocmVhZChldmVudEJhc2UudGhyZWFkTmFtZSx0Z2lkLHBpZCk7aWYoa3RocmVhZC5iaW5kZXJMb2NrQXF1aXJlZFRTPT09dW5kZWZpbmVkKXJldHVybiBmYWxzZTtjb25zdCBhcmdzPXRoaXMuZ2VuZXJhdGVBcmdzRm9yU2xpY2UodGdpZCxwaWQsZXZlbnRCYXNlLnRocmVhZE5hbWUsa3RocmVhZCk7a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnYmluZGVyJywnYmluZGVyIGxvY2sgaGVsZCcsa3RocmVhZC5iaW5kZXJMb2NrQXF1aXJlZFRTLHRzLWt0aHJlYWQuYmluZGVyTG9ja0FxdWlyZWRUUywwLDAsYXJncyk7a3RocmVhZC5iaW5kZXJMb2NrQXF1aXJlZFRTPXVuZGVmaW5lZDtyZXR1cm4gdHJ1ZTt9LGJpbmRlclRyYW5zYWN0aW9uKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9YmluZGVyVHJhbnNSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZihldmVudD09PXVuZGVmaW5lZClyZXR1cm4gZmFsc2U7Y29uc3QgdGdpZD1wYXJzZUludChldmVudEJhc2UudGdpZCk7aWYoaXNOYU4odGdpZCkpcmV0dXJuIGZhbHNlO3RoaXMuZG9OYW1lTWFwcGluZ3MocGlkLHRnaWQsZXZlbnRCYXNlLnRocmVhZE5hbWUpO2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlcl8uZ2V0T3JDcmVhdGVCaW5kZXJLZXJuZWxUaHJlYWQoZXZlbnRCYXNlLnRocmVhZE5hbWUsdGdpZCxwaWQpO2NvbnN0IHRyYW5zPW5ldyBCaW5kZXJUcmFuc2FjdGlvbihldmVudCxwaWQsdHMsa3RocmVhZCk7Y29uc3QgYXJncz1nZW5lcmF0ZUJpbmRlckFyZ3NGb3JTbGljZSh0cmFucyxldmVudEJhc2UudGhyZWFkTmFtZSk7Y29uc3QgcHJpb3JSZWNlaXZlPXRoaXMuZ2V0UHJpb3JSZWNlaXZlT25QSUQocGlkKTtpZihwcmlvclJlY2VpdmUhPT1mYWxzZSl7cmV0dXJuIHRoaXMubW9kZWxQcmlvclJlY2VpdmUocHJpb3JSZWNlaXZlLHRzLHBpZCx0Z2lkLGt0aHJlYWQsdHJhbnMsYXJncyxldmVudCk7fQotY29uc3QgcmVjdXJzaXZlVHJhbnM9dGhpcy5nZXRSZWN1cnNpdmVUcmFuc2FjdGlvbk5lZWRpbmdDb21wbGV0aW9uKHBpZCk7aWYocmVjdXJzaXZlVHJhbnMhPT1mYWxzZSl7cmV0dXJuIHRoaXMubW9kZWxSZWN1cnNpdmVUcmFuc2FjdGlvbnMocmVjdXJzaXZlVHJhbnMsdHMscGlkLGt0aHJlYWQsdHJhbnMsYXJncyk7fQotY29uc3Qgc2xpY2U9a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnYmluZGVyJywnJyx0cywuMDMsMCwwLGFyZ3MpO3NsaWNlLmNvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHRzLnRvU3RyaW5nKCkpO3RyYW5zLnNsaWNlPXNsaWNlO2lmKHRyYW5zLmV4cGVjdF9yZXBseSl7c2xpY2UudGl0bGU9J2JpbmRlciB0cmFuc2FjdGlvbic7fWVsc2V7c2xpY2UudGl0bGU9J2JpbmRlciB0cmFuc2FjdGlvbiBhc3luYyc7fQotdGhpcy5hZGRUcmFuc2FjdGlvbldhaXRpbmdGb3JSZWN2KHRyYW5zLnRyYW5zYWN0aW9uX2tleSx0cmFucyk7cmV0dXJuIHRydWU7fSxiaW5kZXJUcmFuc2FjdGlvblJlY2VpdmVkKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9YmluZGVyVHJhbnNSZWNlaXZlZFJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKGV2ZW50PT09dW5kZWZpbmVkKXJldHVybiBmYWxzZTtjb25zdCB0Z2lkPXBhcnNlSW50KGV2ZW50QmFzZS50Z2lkKTtpZihpc05hTih0Z2lkKSlyZXR1cm4gZmFsc2U7Y29uc3QgdHJhbnNhY3Rpb25rZXk9cGFyc2VJbnQoZXZlbnRbMV0pO2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlcl8uZ2V0T3JDcmVhdGVCaW5kZXJLZXJuZWxUaHJlYWQoZXZlbnRCYXNlLnRocmVhZE5hbWUsdGdpZCxwaWQpO2NvbnN0IHN5bmNDb21wbGV0ZT10aGlzLmdldFN5bmNUcmFuc05lZWRzQ29tcGxldGlvbih0cmFuc2FjdGlvbmtleSk7aWYoc3luY0NvbXBsZXRlIT09ZmFsc2Upe2NvbnN0IHN5bmNUcmFucz1zeW5jQ29tcGxldGVbMF07Y29uc3Qgc3luY1NsaWNlPXN5bmNUcmFucy5zbGljZTtjb25zdCByZXNwb25zZVRyYW5zPXN5bmNDb21wbGV0ZVsxXTtjb25zdCByZXNwb25zZVNsaWNlPXJlc3BvbnNlVHJhbnMuc2xpY2U7c3luY1NsaWNlLmR1cmF0aW9uPXRzLXN5bmNTbGljZS5zdGFydDtjb25zdCBzeW5jSW50ZXJuYWw9ZG9JbnRlcm5hbFNsaWNlKHN5bmNUcmFucyxzeW5jU2xpY2UsdHMpO2NvbnN0IHJlc3BvbnNlVHM9cmVzcG9uc2VTbGljZS5zdGFydCtyZXNwb25zZVNsaWNlLmR1cmF0aW9uO2NvbnN0IHJlc3BvbnNlSW50ZXJuYWw9ZG9JbnRlcm5hbFNsaWNlKHJlc3BvbnNlVHJhbnMscmVzcG9uc2VTbGljZSxyZXNwb25zZVRzKTtpZihyZXNwb25zZVNsaWNlLm91dEZsb3dFdmVudHMubGVuZ3RoPT09MHx8c3luY1NsaWNlLmluRmxvd0V2ZW50cy5sZW5ndGg9PT0wKXtjb25zdCBmbG93PXRoaXMuZ2VuZXJhdGVGbG93KHJlc3BvbnNlSW50ZXJuYWwsc3luY0ludGVybmFsLHJlc3BvbnNlVHJhbnMsc3luY1RyYW5zKTtzeW5jU2xpY2UuaW5GbG93RXZlbnRzLnB1c2goZmxvdyk7cmVzcG9uc2VTbGljZS5vdXRGbG93RXZlbnRzLnB1c2goZmxvdyk7dGhpcy5tb2RlbF8uZmxvd0V2ZW50cy5wdXNoKGZsb3cpO30KLWZvcihsZXQgaT0xO2k8c3luY1NsaWNlLmluRmxvd0V2ZW50cy5sZW5ndGg7aSsrKXtzeW5jU2xpY2UuaW5GbG93RXZlbnRzW2ldLmR1cmF0aW9uPXRzLXN5bmNTbGljZS5pbkZsb3dFdmVudHNbaV0uc3RhcnQ7fQotcmV0dXJuIHRydWU7fQotY29uc3QgdHJGb3JSZWN2PXRoaXMuZ2V0VHJhbnNhY3Rpb25XYWl0aW5nRm9yUmVjdih0cmFuc2FjdGlvbmtleSk7aWYodHJGb3JSZWN2IT09ZmFsc2Upe2lmKCF0ckZvclJlY3YuZXhwZWN0X3JlcGx5KXtjb25zdCBhcmdzPWdlbmVyYXRlQmluZGVyQXJnc0ZvclNsaWNlKHRyRm9yUmVjdixldmVudEJhc2UudGhyZWFkTmFtZSk7Y29uc3Qgc2xpY2U9a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnYmluZGVyJywnYmluZGVyIEFzeW5jIHJlY3YnLHRzLC4wMywwLDAsYXJncyk7Y29uc3QgZmFrZUV2ZW50PVswLDAsMCwwLDAsMCwwXTtjb25zdCBmYWtlVHJhbnM9bmV3IEJpbmRlclRyYW5zYWN0aW9uKGZha2VFdmVudCxwaWQsdHMsa3RocmVhZCk7Y29uc3QgZmxvdz10aGlzLmdlbmVyYXRlRmxvdyh0ckZvclJlY3Yuc2xpY2Usc2xpY2UsdHJGb3JSZWN2LGZha2VUcmFucyk7dGhpcy5tb2RlbF8uZmxvd0V2ZW50cy5wdXNoKGZsb3cpO3RyRm9yUmVjdi5zbGljZS50aXRsZT0nYmluZGVyIHRyYW5zYWN0aW9uIGFzeW5jJzt0ckZvclJlY3Yuc2xpY2UuZHVyYXRpb249LjAzO3JldHVybiB0cnVlO30KLXRyRm9yUmVjdi5zbGljZS50aXRsZT0nYmluZGVyIHRyYW5zYWN0aW9uJzt0aGlzLnNldEN1cnJlbnRSZWNlaXZlT25QSUQocGlkLFt0cyx0ckZvclJlY3ZdKTtyZXR1cm4gdHJ1ZTt9Ci1yZXR1cm4gZmFsc2U7fSxtb2RlbFJlY3Vyc2l2ZVRyYW5zYWN0aW9ucyhyZWN1cnNpdmVUcmFucyx0cyxwaWQsa3RocmVhZCx0cmFucyxhcmdzKXtjb25zdCByZWN1cnNpdmVTbGljZT1yZWN1cnNpdmVUcmFuc1sxXS5zbGljZTtjb25zdCBvcmlnU2xpY2U9cmVjdXJzaXZlVHJhbnNbMF0uc2xpY2U7cmVjdXJzaXZlU2xpY2UuZHVyYXRpb249dHMtcmVjdXJzaXZlU2xpY2Uuc3RhcnQ7dHJhbnMuc2xpY2U9cmVjdXJzaXZlU2xpY2U7aWYodHJhbnMuaXNfcmVwbHlfdHJhbnNhY3Rpb24pe29yaWdTbGljZS5kdXJhdGlvbj10cy1vcmlnU2xpY2Uuc3RhcnQ7dGhpcy5hZGRTeW5jVHJhbnNOZWVkaW5nQ29tcGxldGlvbih0cmFucy50cmFuc2FjdGlvbl9rZXkscmVjdXJzaXZlVHJhbnMpO2lmKGlzUmVwbHlUb09yaWdpbihyZWN1cnNpdmVUcmFuc1swXSx0cmFucykpe3RoaXMucmVtb3ZlUmVjdXJzaXZlVHJhbnNhY3Rpb24ocGlkKTt9fWVsc2V7Y29uc3Qgc2xpY2U9a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnYmluZGVyJywnJyx0cywuMDMsMCwwLGFyZ3MpO3RyYW5zLnNsaWNlPXNsaWNlO3RoaXMuYWRkVHJhbnNhY3Rpb25XYWl0aW5nRm9yUmVjdih0cmFucy50cmFuc2FjdGlvbl9rZXksdHJhbnMpO30KLXJldHVybiB0cnVlO30sbW9kZWxQcmlvclJlY2VpdmUocHJpb3JSZWNlaXZlLHRzLHBpZCx0Z2lkLGt0aHJlYWQsdHJhbnMsYXJncyxldmVudCl7Y29uc3QgY2FsbGVlU2xpY2U9cHJpb3JSZWNlaXZlWzFdLnNsaWNlO2NvbnN0IGNhbGxlZVRyYW5zPXByaW9yUmVjZWl2ZVsxXTtjb25zdCByZWN2VHM9cHJpb3JSZWNlaXZlWzBdO2xldCBzbGljZT1rdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hDb21wbGV0ZVNsaWNlKCdiaW5kZXInLCcnLHJlY3ZUcyx0cy1yZWN2VHMsMCwwLGFyZ3MpO2NvbnN0IGZsb3c9dGhpcy5nZW5lcmF0ZUZsb3coY2FsbGVlU2xpY2Usc2xpY2UsY2FsbGVlVHJhbnMsdHJhbnMpO3RoaXMubW9kZWxfLmZsb3dFdmVudHMucHVzaChmbG93KTt0cmFucy5zbGljZT1zbGljZTtpZih0cmFucy5pc19yZXBseV90cmFuc2FjdGlvbil7c2xpY2UudGl0bGU9J2JpbmRlciByZXBseSc7dGhpcy5hZGRTeW5jVHJhbnNOZWVkaW5nQ29tcGxldGlvbih0cmFucy50cmFuc2FjdGlvbl9rZXksW2NhbGxlZVRyYW5zLHRyYW5zXSk7fWVsc2V7c2xpY2UudGl0bGU9J2JpbmRlciByZXBseSc7Y29uc3QgdHJhbnMxPW5ldyBCaW5kZXJUcmFuc2FjdGlvbihldmVudCxwaWQsdHMsa3RocmVhZCk7c2xpY2U9a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnYmluZGVyJywnYmluZGVyIHRyYW5zYWN0aW9uJyxyZWN2VHMsKHRzLXJlY3ZUcyksMCwwLGFyZ3MpO2lmKCF0cmFucy5leHBlY3RfcmVwbHkpe3NsaWNlLnRpdGxlPSdiaW5kZXIgdHJhbnNhY3Rpb24gYXN5bmMnO3NsaWNlLmR1cmF0aW9uPS4wMzt9ZWxzZXt9Ci10cmFuczEuc2xpY2U9c2xpY2U7dGhpcy5hZGRSZWN1cnNpdmVTeW5jVHJhbnNOZWVkaW5nQ29tcGxldGlvbihwaWQsW2NhbGxlZVRyYW5zLHRyYW5zXSk7dGhpcy5hZGRUcmFuc2FjdGlvbldhaXRpbmdGb3JSZWN2KHRyYW5zLnRyYW5zYWN0aW9uX2tleSx0cmFuczEpO30KLXJldHVybiB0cnVlO30sZ2V0UmVjdXJzaXZlVHJhbnNhY3Rpb25OZWVkaW5nQ29tcGxldGlvbihwaWQpe2lmKHRoaXMucmVjdXJzaXZlU3luY1RyYW5zV2FpdGluZ0NvbXBsZXRpb25fQnlQSURbcGlkXT09PXVuZGVmaW5lZCl7cmV0dXJuIGZhbHNlO30KLWNvbnN0IGxlbj10aGlzLnJlY3Vyc2l2ZVN5bmNUcmFuc1dhaXRpbmdDb21wbGV0aW9uX0J5UElEW3BpZF0ubGVuZ3RoO2lmKGxlbj09PTApcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLnJlY3Vyc2l2ZVN5bmNUcmFuc1dhaXRpbmdDb21wbGV0aW9uX0J5UElEW3BpZF1bbGVuLTFdO30sYWRkUmVjdXJzaXZlU3luY1RyYW5zTmVlZGluZ0NvbXBsZXRpb24ocGlkLHR1cGxlKXtpZih0aGlzLnJlY3Vyc2l2ZVN5bmNUcmFuc1dhaXRpbmdDb21wbGV0aW9uX0J5UElEW3BpZF09PT11bmRlZmluZWQpe3RoaXMucmVjdXJzaXZlU3luY1RyYW5zV2FpdGluZ0NvbXBsZXRpb25fQnlQSURbcGlkXT1bXTt9Ci10aGlzLnJlY3Vyc2l2ZVN5bmNUcmFuc1dhaXRpbmdDb21wbGV0aW9uX0J5UElEW3BpZF0ucHVzaCh0dXBsZSk7fSxyZW1vdmVSZWN1cnNpdmVUcmFuc2FjdGlvbihwaWQpe2NvbnN0IGxlbj10aGlzLnJlY3Vyc2l2ZVN5bmNUcmFuc1dhaXRpbmdDb21wbGV0aW9uX0J5UElEW3BpZF0ubGVuZ3RoO2lmKGxlbj09PTApe2RlbGV0ZSB0aGlzLnJlY3Vyc2l2ZVN5bmNUcmFuc1dhaXRpbmdDb21wbGV0aW9uX0J5UElEW3BpZF07cmV0dXJuO30KLXRoaXMucmVjdXJzaXZlU3luY1RyYW5zV2FpdGluZ0NvbXBsZXRpb25fQnlQSURbcGlkXS5zcGxpY2UobGVuLTEsMSk7fSxzZXRDdXJyZW50UmVjZWl2ZU9uUElEKHBpZCx0dXBsZSl7aWYodGhpcy5yZWNlaXZlZFRyYW5zV2FpdGluZ0NvbnZlcnNpb25bcGlkXT09PXVuZGVmaW5lZCl7dGhpcy5yZWNlaXZlZFRyYW5zV2FpdGluZ0NvbnZlcnNpb25bcGlkXT1bXTt9Ci10aGlzLnJlY2VpdmVkVHJhbnNXYWl0aW5nQ29udmVyc2lvbltwaWRdLnB1c2godHVwbGUpO30sZ2V0UHJpb3JSZWNlaXZlT25QSUQocGlkKXtpZih0aGlzLnJlY2VpdmVkVHJhbnNXYWl0aW5nQ29udmVyc2lvbltwaWRdPT09dW5kZWZpbmVkKXtyZXR1cm4gZmFsc2U7fQotY29uc3QgbGVuPXRoaXMucmVjZWl2ZWRUcmFuc1dhaXRpbmdDb252ZXJzaW9uW3BpZF0ubGVuZ3RoO2lmKGxlbj09PTApcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLnJlY2VpdmVkVHJhbnNXYWl0aW5nQ29udmVyc2lvbltwaWRdLnNwbGljZShsZW4tMSwxKVswXTt9LGFkZFN5bmNUcmFuc05lZWRpbmdDb21wbGV0aW9uKHRyYW5zYWN0aW9ua2V5LHR1cGxlKXtjb25zdCBkaWN0PXRoaXMuc3luY1RyYW5zV2FpdGluZ0NvbXBsZXRpb247ZGljdFt0cmFuc2FjdGlvbmtleV09dHVwbGU7fSxnZXRTeW5jVHJhbnNOZWVkc0NvbXBsZXRpb24odHJhbnNhY3Rpb25rZXkpe2NvbnN0IHJldD10aGlzLnN5bmNUcmFuc1dhaXRpbmdDb21wbGV0aW9uW3RyYW5zYWN0aW9ua2V5XTtpZihyZXQ9PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO2RlbGV0ZSB0aGlzLnN5bmNUcmFuc1dhaXRpbmdDb21wbGV0aW9uW3RyYW5zYWN0aW9ua2V5XTtyZXR1cm4gcmV0O30sZ2V0VHJhbnNhY3Rpb25XYWl0aW5nRm9yUmVjdih0cmFuc2FjdGlvbmtleSl7Y29uc3QgcmV0PXRoaXMudHJhbnNXYWl0aW5nUmVjdlt0cmFuc2FjdGlvbmtleV07aWYocmV0PT09dW5kZWZpbmVkKXJldHVybiBmYWxzZTtkZWxldGUgdGhpcy50cmFuc1dhaXRpbmdSZWN2W3RyYW5zYWN0aW9ua2V5XTtyZXR1cm4gcmV0O30sYWRkVHJhbnNhY3Rpb25XYWl0aW5nRm9yUmVjdih0cmFuc2FjdGlvbmtleSx0cmFuc2FjdGlvbil7dGhpcy50cmFuc1dhaXRpbmdSZWN2W3RyYW5zYWN0aW9ua2V5XT10cmFuc2FjdGlvbjt9LGdlbmVyYXRlRmxvdyhmcm9tLHRvLGZyb21UcmFucyx0b1RyYW5zKXtjb25zdCB0aXRsZT0nVHJhbnNhY3Rpb24gZnJvbSA6ICcrCi10aGlzLnBpZDJuYW1lKGZyb21UcmFucy5jYWxsaW5nX3BpZCkrJyBGcm9tIFBJRDogJytmcm9tVHJhbnMuY2FsbGluZ19waWQrJyB0byBwaWQ6ICcrCi10b1RyYW5zLmNhbGxpbmdfcGlkKycgVGhyZWFkIE5hbWU6ICcrdGhpcy5waWQybmFtZSh0b1RyYW5zLmNhbGxpbmdfcGlkKTtjb25zdCB0cz1mcm9tLnN0YXJ0O2NvbnN0IGZsb3c9bmV3IHRyLm1vZGVsLkZsb3dFdmVudCgnYmluZGVyJywnYmluZGVyJyx0aXRsZSwxLHRzLFtdKTtmbG93LnN0YXJ0U2xpY2U9ZnJvbTtmbG93LmVuZFNsaWNlPXRvO2Zsb3cuc3RhcnQ9ZnJvbS5zdGFydDtmbG93LmR1cmF0aW9uPXRvLnN0YXJ0LXRzO2Zyb20ub3V0Rmxvd0V2ZW50cy5wdXNoKGZsb3cpO3RvLmluRmxvd0V2ZW50cy5wdXNoKGZsb3cpO3JldHVybiBmbG93O30sZ2VuZXJhdGVBcmdzRm9yU2xpY2UodGdpZCxwaWQsbmFtZSxrdGhyZWFkKXtyZXR1cm57J1RocmVhZCBOYW1lJzpuYW1lLHBpZCwnZ2lkJzp0Z2lkfTt9LHBpZDJuYW1lKHBpZCl7cmV0dXJuIHRoaXMua3RocmVhZGxvb2t1cFtwaWRdO30sZG9OYW1lTWFwcGluZ3MocGlkLHRnaWQsbmFtZSl7dGhpcy5yZWdpc3RlclBpZE5hbWUocGlkLG5hbWUpO3RoaXMucmVnaXN0ZXJQaWROYW1lKHRnaWQsbmFtZSk7fSxyZWdpc3RlclBpZE5hbWUocGlkLG5hbWUpe2lmKHRoaXMucGlkMm5hbWUocGlkKT09PXVuZGVmaW5lZCl7dGhpcy5rdGhyZWFkbG9va3VwW3BpZF09bmFtZTt9fX07UGFyc2VyLnJlZ2lzdGVyKEJpbmRlclBhcnNlcik7cmV0dXJue0JpbmRlclBhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5saW51eF9wZXJmJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gQnVzUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignbWVtb3J5X2J1c191c2FnZScsQnVzUGFyc2VyLnByb3RvdHlwZS50cmFjZU1hcmtXcml0ZUJ1c0V2ZW50LmJpbmQodGhpcykpO3RoaXMubW9kZWxfPWltcG9ydGVyLm1vZGVsXzt0aGlzLnBwaWRzXz17fTt9Ci1CdXNQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSx0cmFjZU1hcmtXcml0ZUJ1c0V2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSx0aHJlYWROYW1lKXtjb25zdCByZT1uZXcgUmVnRXhwKCdidXM9KFxcUyspIHJ3X2J5dGVzPShcXGQrKSByX2J5dGVzPShcXGQrKSAnKyd3X2J5dGVzPShcXGQrKSBjeWNsZXM9KFxcZCspIG5zPShcXGQrKScpO2NvbnN0IGV2ZW50PXJlLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2NvbnN0IG5hbWU9ZXZlbnRbMV07Y29uc3QgcndCeXRlcz1wYXJzZUludChldmVudFsyXSk7Y29uc3QgckJ5dGVzPXBhcnNlSW50KGV2ZW50WzNdKTtjb25zdCB3Qnl0ZXM9cGFyc2VJbnQoZXZlbnRbNF0pO2NvbnN0IGN5Y2xlcz1wYXJzZUludChldmVudFs1XSk7Y29uc3QgbnM9cGFyc2VJbnQoZXZlbnRbNl0pO2NvbnN0IHNlYz10ci5iLmNvbnZlcnRVbml0KG5zLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5OQU5PLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5OT05FKTtjb25zdCByZWFkQmFuZHdpZHRoSW5CcHM9ckJ5dGVzL3NlYztjb25zdCByZWFkQmFuZHdpZHRoSW5NaUJwcz10ci5iLmNvbnZlcnRVbml0KHJlYWRCYW5kd2lkdGhJbkJwcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTk9ORSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTUVCSSk7Y29uc3Qgd3JpdGVCYW5kd2lkdGhJbkJwcz13Qnl0ZXMvc2VjO2NvbnN0IHdyaXRlQmFuZHdpZHRoSW5NaUJwcz10ci5iLmNvbnZlcnRVbml0KHdyaXRlQmFuZHdpZHRoSW5CcHMsdHIuYi5Vbml0UHJlZml4U2NhbGUuQklOQVJZLk5PTkUsdHIuYi5Vbml0UHJlZml4U2NhbGUuQklOQVJZLk1FQkkpO2xldCBjdHI9dGhpcy5tb2RlbF8ua2VybmVsLmdldE9yQ3JlYXRlQ291bnRlcihudWxsLCdidXMgJytuYW1lKycgcmVhZCcpO2lmKGN0ci5udW1TZXJpZXM9PT0wKXtjdHIuYWRkU2VyaWVzKG5ldyB0ci5tb2RlbC5Db3VudGVyU2VyaWVzKCd2YWx1ZScsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGN0ci5uYW1lKycuJysndmFsdWUnKSkpO30KLWN0ci5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3Nlcmllcy5hZGRDb3VudGVyU2FtcGxlKHRzLHJlYWRCYW5kd2lkdGhJbk1pQnBzKTt9KTtjdHI9dGhpcy5tb2RlbF8ua2VybmVsLmdldE9yQ3JlYXRlQ291bnRlcihudWxsLCdidXMgJytuYW1lKycgd3JpdGUnKTtpZihjdHIubnVtU2VyaWVzPT09MCl7Y3RyLmFkZFNlcmllcyhuZXcgdHIubW9kZWwuQ291bnRlclNlcmllcygndmFsdWUnLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhjdHIubmFtZSsnLicrJ3ZhbHVlJykpKTt9Ci1jdHIuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oc2VyaWVzKXtzZXJpZXMuYWRkQ291bnRlclNhbXBsZSh0cyx3cml0ZUJhbmR3aWR0aEluTWlCcHMpO30pO3JldHVybiB0cnVlO319O1BhcnNlci5yZWdpc3RlcihCdXNQYXJzZXIpO3JldHVybntCdXNQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIENsb2NrUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignY2xvY2tfc2V0X3JhdGUnLENsb2NrUGFyc2VyLnByb3RvdHlwZS50cmFjZU1hcmtXcml0ZUNsb2NrRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2Nsa19zZXRfcmF0ZScsQ2xvY2tQYXJzZXIucHJvdG90eXBlLnRyYWNlTWFya1dyaXRlQ2xrRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2Nsb2NrX2VuYWJsZScsQ2xvY2tQYXJzZXIucHJvdG90eXBlLnRyYWNlTWFya1dyaXRlQ2xvY2tPbk9mZkV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdjbG9ja19kaXNhYmxlJyxDbG9ja1BhcnNlci5wcm90b3R5cGUudHJhY2VNYXJrV3JpdGVDbG9ja09uT2ZmRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2Nsa19lbmFibGUnLENsb2NrUGFyc2VyLnByb3RvdHlwZS50cmFjZU1hcmtXcml0ZUNsa09uRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2Nsa19kaXNhYmxlJyxDbG9ja1BhcnNlci5wcm90b3R5cGUudHJhY2VNYXJrV3JpdGVDbGtPZmZFdmVudC5iaW5kKHRoaXMpKTt0aGlzLm1vZGVsXz1pbXBvcnRlci5tb2RlbF87dGhpcy5wcGlkc189e307fQotQ2xvY2tQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxjbG9ja01hcmsobmFtZSxzdWJOYW1lLHZhbHVlLHRzKXtjb25zdCBjdHI9dGhpcy5tb2RlbF8ua2VybmVsLmdldE9yQ3JlYXRlQ291bnRlcihudWxsLG5hbWUrJyAnK3N1Yk5hbWUpO2lmKGN0ci5udW1TZXJpZXM9PT0wKXtjdHIuYWRkU2VyaWVzKG5ldyB0ci5tb2RlbC5Db3VudGVyU2VyaWVzKCd2YWx1ZScsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGN0ci5uYW1lKycuJysndmFsdWUnKSkpO30KLWN0ci5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3Nlcmllcy5hZGRDb3VudGVyU2FtcGxlKHRzLHZhbHVlKTt9KTt9LHRyYWNlTWFya1dyaXRlQ2xvY2tFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2UsdGhyZWFkTmFtZSl7Y29uc3QgZXZlbnQ9LyhcUyspIHN0YXRlPShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtjb25zdCBuYW1lPWV2ZW50WzFdO2NvbnN0IHJhdGU9cGFyc2VJbnQoZXZlbnRbMl0pO3RoaXMuY2xvY2tNYXJrKG5hbWUsJ0ZyZXF1ZW5jeScscmF0ZSx0cyk7cmV0dXJuIHRydWU7fSx0cmFjZU1hcmtXcml0ZUNsa0V2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSx0aHJlYWROYW1lKXtjb25zdCBldmVudD0vKFxTKykgKFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2NvbnN0IG5hbWU9ZXZlbnRbMV07Y29uc3QgcmF0ZT1wYXJzZUludChldmVudFsyXSk7dGhpcy5jbG9ja01hcmsobmFtZSwnRnJlcXVlbmN5JyxyYXRlLHRzKTtyZXR1cm4gdHJ1ZTt9LHRyYWNlTWFya1dyaXRlQ2xvY2tPbk9mZkV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSx0aHJlYWROYW1lKXtjb25zdCBldmVudD0vKFxTKykgc3RhdGU9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2NvbnN0IG5hbWU9ZXZlbnRbMV07Y29uc3Qgc3RhdGU9cGFyc2VJbnQoZXZlbnRbMl0pO3RoaXMuY2xvY2tNYXJrKG5hbWUsJ1N0YXRlJyxzdGF0ZSx0cyk7cmV0dXJuIHRydWU7fSx0cmFjZU1hcmtXcml0ZUNsa09uRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlLHRocmVhZE5hbWUpe2NvbnN0IGV2ZW50PS9cUysvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2NvbnN0IG5hbWU9ZXZlbnRbMF07dGhpcy5jbG9ja01hcmsobmFtZSwnU3RhdGUnLDEsdHMpO3JldHVybiB0cnVlO30sdHJhY2VNYXJrV3JpdGVDbGtPZmZFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2UsdGhyZWFkTmFtZSl7Y29uc3QgZXZlbnQ9L1xTKy8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7Y29uc3QgbmFtZT1ldmVudFswXTt0aGlzLmNsb2NrTWFyayhuYW1lLCdTdGF0ZScsMCx0cyk7cmV0dXJuIHRydWU7fX07UGFyc2VyLnJlZ2lzdGVyKENsb2NrUGFyc2VyKTtyZXR1cm57Q2xvY2tQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIENwdWZyZXFQYXJzZXIoaW1wb3J0ZXIpe1BhcnNlci5jYWxsKHRoaXMsaW1wb3J0ZXIpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdjcHVmcmVxX2ludGVyYWN0aXZlX3VwJyxDcHVmcmVxUGFyc2VyLnByb3RvdHlwZS5jcHVmcmVxVXBEb3duRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2NwdWZyZXFfaW50ZXJhY3RpdmVfZG93bicsQ3B1ZnJlcVBhcnNlci5wcm90b3R5cGUuY3B1ZnJlcVVwRG93bkV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdjcHVmcmVxX2ludGVyYWN0aXZlX2FscmVhZHknLENwdWZyZXFQYXJzZXIucHJvdG90eXBlLmNwdWZyZXFUYXJnZXRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignY3B1ZnJlcV9pbnRlcmFjdGl2ZV9ub3R5ZXQnLENwdWZyZXFQYXJzZXIucHJvdG90eXBlLmNwdWZyZXFUYXJnZXRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignY3B1ZnJlcV9pbnRlcmFjdGl2ZV9zZXRzcGVlZCcsQ3B1ZnJlcVBhcnNlci5wcm90b3R5cGUuY3B1ZnJlcVRhcmdldEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdjcHVmcmVxX2ludGVyYWN0aXZlX3RhcmdldCcsQ3B1ZnJlcVBhcnNlci5wcm90b3R5cGUuY3B1ZnJlcVRhcmdldEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdjcHVmcmVxX2ludGVyYWN0aXZlX2Jvb3N0JyxDcHVmcmVxUGFyc2VyLnByb3RvdHlwZS5jcHVmcmVxQm9vc3RVbmJvb3N0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2NwdWZyZXFfaW50ZXJhY3RpdmVfdW5ib29zdCcsQ3B1ZnJlcVBhcnNlci5wcm90b3R5cGUuY3B1ZnJlcUJvb3N0VW5ib29zdEV2ZW50LmJpbmQodGhpcykpO30KLWZ1bmN0aW9uIHNwbGl0RGF0YShpbnB1dCl7Y29uc3QgZGF0YT17fTtjb25zdCBhcmdzPWlucHV0LnNwbGl0KC9ccysvKTtjb25zdCBsZW49YXJncy5sZW5ndGg7Zm9yKGxldCBpPTA7aTxsZW47aSsrKXtjb25zdCBpdGVtPWFyZ3NbaV0uc3BsaXQoJz0nKTtkYXRhW2l0ZW1bMF1dPXBhcnNlSW50KGl0ZW1bMV0pO30KLXJldHVybiBkYXRhO30KLUNwdWZyZXFQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxjcHVmcmVxU2xpY2UodHMsZXZlbnROYW1lLGNwdSxhcmdzKXtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2NwdWZyZXEnKTtrdGhyZWFkLm9wZW5TbGljZT1ldmVudE5hbWU7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLGt0aHJlYWQub3BlblNsaWNlLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhrdGhyZWFkLm9wZW5TbGljZSksdHMsYXJncywwKTtrdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fSxjcHVmcmVxQm9vc3RTbGljZSh0cyxldmVudE5hbWUsYXJncyl7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdjcHVmcmVxX2Jvb3N0Jyk7a3RocmVhZC5vcGVuU2xpY2U9ZXZlbnROYW1lO2NvbnN0IHNsaWNlPW5ldyB0ci5tb2RlbC5UaHJlYWRTbGljZSgnJyxrdGhyZWFkLm9wZW5TbGljZSxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcoa3RocmVhZC5vcGVuU2xpY2UpLHRzLGFyZ3MsMCk7a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO30sY3B1ZnJlcVVwRG93bkV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZGF0YT1zcGxpdERhdGEoZXZlbnRCYXNlLmRldGFpbHMpO3RoaXMuY3B1ZnJlcVNsaWNlKHRzLGV2ZW50TmFtZSxkYXRhLmNwdSxkYXRhKTtyZXR1cm4gdHJ1ZTt9LGNwdWZyZXFUYXJnZXRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGRhdGE9c3BsaXREYXRhKGV2ZW50QmFzZS5kZXRhaWxzKTt0aGlzLmNwdWZyZXFTbGljZSh0cyxldmVudE5hbWUsZGF0YS5jcHUsZGF0YSk7cmV0dXJuIHRydWU7fSxjcHVmcmVxQm9vc3RVbmJvb3N0RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXt0aGlzLmNwdWZyZXFCb29zdFNsaWNlKHRzLGV2ZW50TmFtZSx7dHlwZTpldmVudEJhc2UuZGV0YWlsc30pO3JldHVybiB0cnVlO319O1BhcnNlci5yZWdpc3RlcihDcHVmcmVxUGFyc2VyKTtyZXR1cm57Q3B1ZnJlcVBhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5saW51eF9wZXJmJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gRGlza1BhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2YyZnNfd3JpdGVfYmVnaW4nLERpc2tQYXJzZXIucHJvdG90eXBlLmYyZnNXcml0ZUJlZ2luRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2YyZnNfd3JpdGVfZW5kJyxEaXNrUGFyc2VyLnByb3RvdHlwZS5mMmZzV3JpdGVFbmRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZjJmc19zeW5jX2ZpbGVfZW50ZXInLERpc2tQYXJzZXIucHJvdG90eXBlLmYyZnNTeW5jRmlsZUVudGVyRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2YyZnNfc3luY19maWxlX2V4aXQnLERpc2tQYXJzZXIucHJvdG90eXBlLmYyZnNTeW5jRmlsZUV4aXRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZXh0NF9zeW5jX2ZpbGVfZW50ZXInLERpc2tQYXJzZXIucHJvdG90eXBlLmV4dDRTeW5jRmlsZUVudGVyRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2V4dDRfc3luY19maWxlX2V4aXQnLERpc2tQYXJzZXIucHJvdG90eXBlLmV4dDRTeW5jRmlsZUV4aXRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZXh0NF9kYV93cml0ZV9iZWdpbicsRGlza1BhcnNlci5wcm90b3R5cGUuZXh0NFdyaXRlQmVnaW5FdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZXh0NF9kYV93cml0ZV9lbmQnLERpc2tQYXJzZXIucHJvdG90eXBlLmV4dDRXcml0ZUVuZEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdibG9ja19ycV9pc3N1ZScsRGlza1BhcnNlci5wcm90b3R5cGUuYmxvY2tScUlzc3VlRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2Jsb2NrX3JxX2NvbXBsZXRlJyxEaXNrUGFyc2VyLnByb3RvdHlwZS5ibG9ja1JxQ29tcGxldGVFdmVudC5iaW5kKHRoaXMpKTt9Ci1EaXNrUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsb3BlbkFzeW5jU2xpY2UodHMsY2F0ZWdvcnksdGhyZWFkTmFtZSxwaWQsa2V5LG5hbWUpe2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZUtlcm5lbFRocmVhZChjYXRlZ29yeSsnOicrdGhyZWFkTmFtZSxwaWQpO2NvbnN0IGFzeW5jU2xpY2VDb25zdHJ1Y3Rvcj10ci5tb2RlbC5Bc3luY1NsaWNlLnN1YlR5cGVzLmdldENvbnN0cnVjdG9yKGNhdGVnb3J5LG5hbWUpO2NvbnN0IHNsaWNlPW5ldyBhc3luY1NsaWNlQ29uc3RydWN0b3IoY2F0ZWdvcnksbmFtZSxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcobmFtZSksdHMpO3NsaWNlLnN0YXJ0VGhyZWFkPWt0aHJlYWQudGhyZWFkO2lmKCFrdGhyZWFkLm9wZW5Bc3luY1NsaWNlcyl7a3RocmVhZC5vcGVuQXN5bmNTbGljZXM9e307fQota3RocmVhZC5vcGVuQXN5bmNTbGljZXNba2V5XT1zbGljZTt9LGNsb3NlQXN5bmNTbGljZSh0cyxjYXRlZ29yeSx0aHJlYWROYW1lLHBpZCxrZXksYXJncyl7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlS2VybmVsVGhyZWFkKGNhdGVnb3J5Kyc6Jyt0aHJlYWROYW1lLHBpZCk7aWYoa3RocmVhZC5vcGVuQXN5bmNTbGljZXMpe2NvbnN0IHNsaWNlPWt0aHJlYWQub3BlbkFzeW5jU2xpY2VzW2tleV07aWYoc2xpY2Upe3NsaWNlLmR1cmF0aW9uPXRzLXNsaWNlLnN0YXJ0O3NsaWNlLmFyZ3M9YXJncztzbGljZS5lbmRUaHJlYWQ9a3RocmVhZC50aHJlYWQ7c2xpY2Uuc3ViU2xpY2VzPVtuZXcgdHIubW9kZWwuQXN5bmNTbGljZShjYXRlZ29yeSxzbGljZS50aXRsZSxzbGljZS5jb2xvcklkLHNsaWNlLnN0YXJ0LHNsaWNlLmFyZ3Msc2xpY2UuZHVyYXRpb24pXTtrdGhyZWFkLnRocmVhZC5hc3luY1NsaWNlR3JvdXAucHVzaChzbGljZSk7ZGVsZXRlIGt0aHJlYWQub3BlbkFzeW5jU2xpY2VzW2tleV07fX19LGYyZnNXcml0ZUJlZ2luRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vZGV2ID0gXCgoXGQrLFxkKylcKSwgaW5vID0gKFxkKyksIHBvcyA9IChcZCspLCBsZW4gPSAoXGQrKSwgZmxhZ3MgPSAoXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBkZXZpY2U9ZXZlbnRbMV07Y29uc3QgaW5vZGU9cGFyc2VJbnQoZXZlbnRbMl0pO2NvbnN0IHBvcz1wYXJzZUludChldmVudFszXSk7Y29uc3QgbGVuPXBhcnNlSW50KGV2ZW50WzRdKTtjb25zdCBrZXk9ZGV2aWNlKyctJytpbm9kZSsnLScrcG9zKyctJytsZW47dGhpcy5vcGVuQXN5bmNTbGljZSh0cywnZjJmcycsZXZlbnRCYXNlLnRocmVhZE5hbWUsZXZlbnRCYXNlLnBpZCxrZXksJ2YyZnNfd3JpdGUnKTtyZXR1cm4gdHJ1ZTt9LGYyZnNXcml0ZUVuZEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L2RldiA9IFwoKFxkKyxcZCspXCksIGlubyA9IChcZCspLCBwb3MgPSAoXGQrKSwgbGVuID0gKFxkKyksIGNvcGllZCA9IChcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGRldmljZT1ldmVudFsxXTtjb25zdCBpbm9kZT1wYXJzZUludChldmVudFsyXSk7Y29uc3QgcG9zPXBhcnNlSW50KGV2ZW50WzNdKTtjb25zdCBsZW49cGFyc2VJbnQoZXZlbnRbNF0pO2NvbnN0IGVycm9yPXBhcnNlSW50KGV2ZW50WzVdKSE9PWxlbjtjb25zdCBrZXk9ZGV2aWNlKyctJytpbm9kZSsnLScrcG9zKyctJytsZW47dGhpcy5jbG9zZUFzeW5jU2xpY2UodHMsJ2YyZnMnLGV2ZW50QmFzZS50aHJlYWROYW1lLGV2ZW50QmFzZS5waWQsa2V5LHtkZXZpY2UsaW5vZGUsZXJyb3J9KTtyZXR1cm4gdHJ1ZTt9LGV4dDRXcml0ZUJlZ2luRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vZGV2IChcZCssXGQrKSBpbm8gKFxkKykgcG9zIChcZCspIGxlbiAoXGQrKSBmbGFncyAoXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBkZXZpY2U9ZXZlbnRbMV07Y29uc3QgaW5vZGU9cGFyc2VJbnQoZXZlbnRbMl0pO2NvbnN0IHBvcz1wYXJzZUludChldmVudFszXSk7Y29uc3QgbGVuPXBhcnNlSW50KGV2ZW50WzRdKTtjb25zdCBrZXk9ZGV2aWNlKyctJytpbm9kZSsnLScrcG9zKyctJytsZW47dGhpcy5vcGVuQXN5bmNTbGljZSh0cywnZXh0NCcsZXZlbnRCYXNlLnRocmVhZE5hbWUsZXZlbnRCYXNlLnBpZCxrZXksJ2V4dDRfd3JpdGUnKTtyZXR1cm4gdHJ1ZTt9LGV4dDRXcml0ZUVuZEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L2RldiAoXGQrLFxkKykgaW5vIChcZCspIHBvcyAoXGQrKSBsZW4gKFxkKykgY29waWVkIChcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGRldmljZT1ldmVudFsxXTtjb25zdCBpbm9kZT1wYXJzZUludChldmVudFsyXSk7Y29uc3QgcG9zPXBhcnNlSW50KGV2ZW50WzNdKTtjb25zdCBsZW49cGFyc2VJbnQoZXZlbnRbNF0pO2NvbnN0IGVycm9yPXBhcnNlSW50KGV2ZW50WzVdKSE9PWxlbjtjb25zdCBrZXk9ZGV2aWNlKyctJytpbm9kZSsnLScrcG9zKyctJytsZW47dGhpcy5jbG9zZUFzeW5jU2xpY2UodHMsJ2V4dDQnLGV2ZW50QmFzZS50aHJlYWROYW1lLGV2ZW50QmFzZS5waWQsa2V5LHtkZXZpY2UsaW5vZGUsZXJyb3J9KTtyZXR1cm4gdHJ1ZTt9LGYyZnNTeW5jRmlsZUVudGVyRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1uZXcgUmVnRXhwKCdkZXYgPSBcXCgoXFxkKyxcXGQrKVxcKSwgaW5vID0gKFxcZCspLCBwaW5vID0gKFxcZCspLCBpX21vZGUgPSAoXFxTKyksICcrJ2lfc2l6ZSA9IChcXGQrKSwgaV9ubGluayA9IChcXGQrKSwgaV9ibG9ja3MgPSAoXFxkKyksIGlfYWR2aXNlID0gKFxcZCspJykuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBkZXZpY2U9ZXZlbnRbMV07Y29uc3QgaW5vZGU9cGFyc2VJbnQoZXZlbnRbMl0pO2NvbnN0IGtleT1kZXZpY2UrJy0nK2lub2RlO3RoaXMub3BlbkFzeW5jU2xpY2UodHMsJ2YyZnMnLGV2ZW50QmFzZS50aHJlYWROYW1lLGV2ZW50QmFzZS5waWQsa2V5LCdmc3luYycpO3JldHVybiB0cnVlO30sZjJmc1N5bmNGaWxlRXhpdEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9bmV3IFJlZ0V4cCgnZGV2ID0gXFwoKFxcZCssXFxkKylcXCksIGlubyA9IChcXGQrKSwgY2hlY2twb2ludCBpcyAoXFxTKyksICcrJ2RhdGFzeW5jID0gKFxcZCspLCByZXQgPSAoXFxkKyknKS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzLnJlcGxhY2UoJ25vdCBuZWVkZWQnLCdub3RfbmVlZGVkJykpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgZGV2aWNlPWV2ZW50WzFdO2NvbnN0IGlub2RlPXBhcnNlSW50KGV2ZW50WzJdKTtjb25zdCBlcnJvcj1wYXJzZUludChldmVudFs1XSk7Y29uc3Qga2V5PWRldmljZSsnLScraW5vZGU7dGhpcy5jbG9zZUFzeW5jU2xpY2UodHMsJ2YyZnMnLGV2ZW50QmFzZS50aHJlYWROYW1lLGV2ZW50QmFzZS5waWQsa2V5LHtkZXZpY2UsaW5vZGUsZXJyb3J9KTtyZXR1cm4gdHJ1ZTt9LGV4dDRTeW5jRmlsZUVudGVyRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vZGV2IChcZCssXGQrKSBpbm8gKFxkKykgcGFyZW50IChcZCspIGRhdGFzeW5jIChcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGRldmljZT1ldmVudFsxXTtjb25zdCBpbm9kZT1wYXJzZUludChldmVudFsyXSk7Y29uc3QgZGF0YXN5bmM9KGV2ZW50WzRdPT09JzEnKXx8KGV2ZW50WzRdPT09MSk7Y29uc3Qga2V5PWRldmljZSsnLScraW5vZGU7Y29uc3QgYWN0aW9uPWRhdGFzeW5jPydmZGF0YXN5bmMnOidmc3luYyc7dGhpcy5vcGVuQXN5bmNTbGljZSh0cywnZXh0NCcsZXZlbnRCYXNlLnRocmVhZE5hbWUsZXZlbnRCYXNlLnBpZCxrZXksYWN0aW9uKTtyZXR1cm4gdHJ1ZTt9LGV4dDRTeW5jRmlsZUV4aXRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9kZXYgKFxkKyxcZCspIGlubyAoXGQrKSByZXQgKFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgZGV2aWNlPWV2ZW50WzFdO2NvbnN0IGlub2RlPXBhcnNlSW50KGV2ZW50WzJdKTtjb25zdCBlcnJvcj1wYXJzZUludChldmVudFszXSk7Y29uc3Qga2V5PWRldmljZSsnLScraW5vZGU7dGhpcy5jbG9zZUFzeW5jU2xpY2UodHMsJ2V4dDQnLGV2ZW50QmFzZS50aHJlYWROYW1lLGV2ZW50QmFzZS5waWQsa2V5LHtkZXZpY2UsaW5vZGUsZXJyb3J9KTtyZXR1cm4gdHJ1ZTt9LGJsb2NrUnFJc3N1ZUV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9bmV3IFJlZ0V4cCgnKFxcZCssXFxkKykgKEYpPyhbRFdSTl0pKEYpPyhBKT8oUyk/KE0pPyAnKydcXGQrIFxcKC4qXFwpIChcXGQrKSBcXCsgKFxcZCspIFxcWy4qXFxdJykuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtsZXQgYWN0aW9uO3N3aXRjaChldmVudFszXSl7Y2FzZSdEJzphY3Rpb249J2Rpc2NhcmQnO2JyZWFrO2Nhc2UnVyc6YWN0aW9uPSd3cml0ZSc7YnJlYWs7Y2FzZSdSJzphY3Rpb249J3JlYWQnO2JyZWFrO2Nhc2UnTic6YWN0aW9uPSdub25lJzticmVhaztkZWZhdWx0OmFjdGlvbj0ndW5rbm93bic7YnJlYWs7fQotaWYoZXZlbnRbMl0pe2FjdGlvbis9JyBmbHVzaCc7fQotaWYoZXZlbnRbNF09PT0nRicpe2FjdGlvbis9JyBmdWEnO30KLWlmKGV2ZW50WzVdPT09J0EnKXthY3Rpb24rPScgYWhlYWQnO30KLWlmKGV2ZW50WzZdPT09J1MnKXthY3Rpb24rPScgc3luYyc7fQotaWYoZXZlbnRbN109PT0nTScpe2FjdGlvbis9JyBtZXRhJzt9Ci1jb25zdCBkZXZpY2U9ZXZlbnRbMV07Y29uc3Qgc2VjdG9yPXBhcnNlSW50KGV2ZW50WzhdKTtjb25zdCBudW1TZWN0b3JzPXBhcnNlSW50KGV2ZW50WzldKTtjb25zdCBrZXk9ZGV2aWNlKyctJytzZWN0b3IrJy0nK251bVNlY3RvcnM7dGhpcy5vcGVuQXN5bmNTbGljZSh0cywnYmxvY2snLGV2ZW50QmFzZS50aHJlYWROYW1lLGV2ZW50QmFzZS5waWQsa2V5LGFjdGlvbik7cmV0dXJuIHRydWU7fSxibG9ja1JxQ29tcGxldGVFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PW5ldyBSZWdFeHAoJyhcXGQrLFxcZCspIChGKT8oW0RXUk5dKShGKT8oQSk/KFMpPyhNKT8gJysnXFwoLipcXCkgKFxcZCspIFxcKyAoXFxkKykgXFxbKC4qKVxcXScpLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgZGV2aWNlPWV2ZW50WzFdO2NvbnN0IHNlY3Rvcj1wYXJzZUludChldmVudFs4XSk7Y29uc3QgbnVtU2VjdG9ycz1wYXJzZUludChldmVudFs5XSk7Y29uc3QgZXJyb3I9cGFyc2VJbnQoZXZlbnRbMTBdKTtjb25zdCBrZXk9ZGV2aWNlKyctJytzZWN0b3IrJy0nK251bVNlY3RvcnM7dGhpcy5jbG9zZUFzeW5jU2xpY2UodHMsJ2Jsb2NrJyxldmVudEJhc2UudGhyZWFkTmFtZSxldmVudEJhc2UucGlkLGtleSx7ZGV2aWNlLHNlY3RvcixudW1TZWN0b3JzLGVycm9yfSk7cmV0dXJuIHRydWU7fX07UGFyc2VyLnJlZ2lzdGVyKERpc2tQYXJzZXIpO3JldHVybntEaXNrUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlcjtmdW5jdGlvbiBEcm1QYXJzZXIoaW1wb3J0ZXIpe1BhcnNlci5jYWxsKHRoaXMsaW1wb3J0ZXIpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdkcm1fdmJsYW5rX2V2ZW50JyxEcm1QYXJzZXIucHJvdG90eXBlLnZibGFua0V2ZW50LmJpbmQodGhpcykpO30KLURybVBhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLGRybVZibGFua1NsaWNlKHRzLGV2ZW50TmFtZSxhcmdzKXtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2RybV92YmxhbmsnKTtrdGhyZWFkLm9wZW5TbGljZT1ldmVudE5hbWU7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLGt0aHJlYWQub3BlblNsaWNlLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhrdGhyZWFkLm9wZW5TbGljZSksdHMsYXJncywwKTtrdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fSx2YmxhbmtFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9jcnRjPShcZCspLCBzZXE9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgY3J0Yz1wYXJzZUludChldmVudFsxXSk7Y29uc3Qgc2VxPXBhcnNlSW50KGV2ZW50WzJdKTt0aGlzLmRybVZibGFua1NsaWNlKHRzLCd2Ymxhbms6JytjcnRjLHtjcnRjLHNlcX0pO3JldHVybiB0cnVlO319O1BhcnNlci5yZWdpc3RlcihEcm1QYXJzZXIpO3JldHVybntEcm1QYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIEV4eW5vc1BhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2V4eW5vc19idXNmcmVxX3RhcmdldF9pbnQnLEV4eW5vc1BhcnNlci5wcm90b3R5cGUuYnVzZnJlcVRhcmdldEludEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdleHlub3NfYnVzZnJlcV90YXJnZXRfbWlmJyxFeHlub3NQYXJzZXIucHJvdG90eXBlLmJ1c2ZyZXFUYXJnZXRNaWZFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZXh5bm9zX3BhZ2VfZmxpcF9zdGF0ZScsRXh5bm9zUGFyc2VyLnByb3RvdHlwZS5wYWdlRmxpcFN0YXRlRXZlbnQuYmluZCh0aGlzKSk7fQotRXh5bm9zUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsZXh5bm9zQnVzZnJlcVNhbXBsZShuYW1lLHRzLGZyZXF1ZW5jeSl7Y29uc3QgdGFyZ2V0Q3B1PXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVDcHUoMCk7Y29uc3QgY291bnRlcj10YXJnZXRDcHUuZ2V0T3JDcmVhdGVDb3VudGVyKCcnLG5hbWUpO2lmKGNvdW50ZXIubnVtU2VyaWVzPT09MCl7Y291bnRlci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXMoJ2ZyZXF1ZW5jeScsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGNvdW50ZXIubmFtZSsnLicrJ2ZyZXF1ZW5jeScpKSk7fQotY291bnRlci5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3Nlcmllcy5hZGRDb3VudGVyU2FtcGxlKHRzLGZyZXF1ZW5jeSk7fSk7fSxidXNmcmVxVGFyZ2V0SW50RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vZnJlcXVlbmN5PShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO3RoaXMuZXh5bm9zQnVzZnJlcVNhbXBsZSgnSU5UIEZyZXF1ZW5jeScsdHMscGFyc2VJbnQoZXZlbnRbMV0pKTtyZXR1cm4gdHJ1ZTt9LGJ1c2ZyZXFUYXJnZXRNaWZFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9mcmVxdWVuY3k9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7dGhpcy5leHlub3NCdXNmcmVxU2FtcGxlKCdNSUYgRnJlcXVlbmN5Jyx0cyxwYXJzZUludChldmVudFsxXSkpO3JldHVybiB0cnVlO30sZXh5bm9zUGFnZUZsaXBTdGF0ZU9wZW5TbGljZSh0cyxwaXBlLGZiLHN0YXRlKXtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2V4eW5vc19mbGlwX3N0YXRlIChwaXBlOicrcGlwZSsnLCBmYjonK2ZiKycpJyk7a3RocmVhZC5vcGVuU2xpY2VUUz10cztrdGhyZWFkLm9wZW5TbGljZT1zdGF0ZTt9LGV4eW5vc1BhZ2VGbGlwU3RhdGVDbG9zZVNsaWNlKHRzLHBpcGUsZmIsYXJncyl7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdleHlub3NfZmxpcF9zdGF0ZSAocGlwZTonK3BpcGUrJywgZmI6JytmYisnKScpO2lmKGt0aHJlYWQub3BlblNsaWNlKXtjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJycsa3RocmVhZC5vcGVuU2xpY2UsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGt0aHJlYWQub3BlblNsaWNlKSxrdGhyZWFkLm9wZW5TbGljZVRTLGFyZ3MsdHMta3RocmVhZC5vcGVuU2xpY2VUUyk7a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO30KLWt0aHJlYWQub3BlblNsaWNlPXVuZGVmaW5lZDt9LHBhZ2VGbGlwU3RhdGVFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9waXBlPShcZCspLCBmYj0oXGQrKSwgc3RhdGU9KC4qKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBwaXBlPXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCBmYj1wYXJzZUludChldmVudFsyXSk7Y29uc3Qgc3RhdGU9ZXZlbnRbM107dGhpcy5leHlub3NQYWdlRmxpcFN0YXRlQ2xvc2VTbGljZSh0cyxwaXBlLGZiLHtwaXBlLGZifSk7aWYoc3RhdGUhPT0nZmxpcHBlZCcpe3RoaXMuZXh5bm9zUGFnZUZsaXBTdGF0ZU9wZW5TbGljZSh0cyxwaXBlLGZiLHN0YXRlKTt9Ci1yZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoRXh5bm9zUGFyc2VyKTtyZXR1cm57RXh5bm9zUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gR2VzdHVyZVBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3RyYWNpbmdfbWFya193cml0ZTpsb2cnLEdlc3R1cmVQYXJzZXIucHJvdG90eXBlLmxvZ0V2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd0cmFjaW5nX21hcmtfd3JpdGU6U3luY0ludGVycHJldCcsR2VzdHVyZVBhcnNlci5wcm90b3R5cGUuc3luY0V2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd0cmFjaW5nX21hcmtfd3JpdGU6SGFuZGxlVGltZXInLEdlc3R1cmVQYXJzZXIucHJvdG90eXBlLnRpbWVyRXZlbnQuYmluZCh0aGlzKSk7fQotR2VzdHVyZVBhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLGdlc3R1cmVPcGVuU2xpY2UodGl0bGUsdHMsb3B0X2FyZ3Mpe2NvbnN0IHRocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdnZXN0dXJlJykudGhyZWFkO3RocmVhZC5zbGljZUdyb3VwLmJlZ2luU2xpY2UoJ3RvdWNocGFkX2dlc3R1cmUnLHRpdGxlLHRzLG9wdF9hcmdzKTt9LGdlc3R1cmVDbG9zZVNsaWNlKHRpdGxlLHRzKXtjb25zdCB0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZVBzZXVkb1RocmVhZCgnZ2VzdHVyZScpLnRocmVhZDtpZih0aHJlYWQuc2xpY2VHcm91cC5vcGVuU2xpY2VDb3VudCl7Y29uc3Qgc2xpY2U9dGhyZWFkLnNsaWNlR3JvdXAubW9zdFJlY2VudGx5T3BlbmVkUGFydGlhbFNsaWNlO2lmKHNsaWNlLnRpdGxlIT09dGl0bGUpe3RoaXMuaW1wb3J0ZXIubW9kZWwuaW1wb3J0V2FybmluZyh7dHlwZTondGl0bGVfbWF0Y2hfZXJyb3InLG1lc3NhZ2U6J1RpdGxlcyBkbyBub3QgbWF0Y2guIFRpdGxlIGlzICcrCi1zbGljZS50aXRsZSsnIGluIG9wZW5TbGljZSwgYW5kIGlzICcrCi10aXRsZSsnIGluIGVuZFNsaWNlJ30pO31lbHNle3RocmVhZC5zbGljZUdyb3VwLmVuZFNsaWNlKHRzKTt9fX0sbG9nRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBpbm5lckV2ZW50PS9eXHMqKFx3Kyk6XHMqKFx3KykkLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtzd2l0Y2goaW5uZXJFdmVudFsxXSl7Y2FzZSdzdGFydCc6dGhpcy5nZXN0dXJlT3BlblNsaWNlKCdHZXN0dXJlTG9nJyx0cyx7bmFtZTppbm5lckV2ZW50WzJdfSk7YnJlYWs7Y2FzZSdlbmQnOnRoaXMuZ2VzdHVyZUNsb3NlU2xpY2UoJ0dlc3R1cmVMb2cnLHRzKTt9Ci1yZXR1cm4gdHJ1ZTt9LHN5bmNFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGlubmVyRXZlbnQ9L15ccyooXHcrKTpccyooXHcrKSQvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO3N3aXRjaChpbm5lckV2ZW50WzFdKXtjYXNlJ3N0YXJ0Jzp0aGlzLmdlc3R1cmVPcGVuU2xpY2UoJ1N5bmNJbnRlcnByZXQnLHRzLHtpbnRlcnByZXRlcjppbm5lckV2ZW50WzJdfSk7YnJlYWs7Y2FzZSdlbmQnOnRoaXMuZ2VzdHVyZUNsb3NlU2xpY2UoJ1N5bmNJbnRlcnByZXQnLHRzKTt9Ci1yZXR1cm4gdHJ1ZTt9LHRpbWVyRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBpbm5lckV2ZW50PS9eXHMqKFx3Kyk6XHMqKFx3KykkLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtzd2l0Y2goaW5uZXJFdmVudFsxXSl7Y2FzZSdzdGFydCc6dGhpcy5nZXN0dXJlT3BlblNsaWNlKCdIYW5kbGVUaW1lcicsdHMse2ludGVycHJldGVyOmlubmVyRXZlbnRbMl19KTticmVhaztjYXNlJ2VuZCc6dGhpcy5nZXN0dXJlQ2xvc2VTbGljZSgnSGFuZGxlVGltZXInLHRzKTt9Ci1yZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoR2VzdHVyZVBhcnNlcik7cmV0dXJue0dlc3R1cmVQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIEkyY1BhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2kyY193cml0ZScsSTJjUGFyc2VyLnByb3RvdHlwZS5pMmNXcml0ZUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpMmNfcmVhZCcsSTJjUGFyc2VyLnByb3RvdHlwZS5pMmNSZWFkRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2kyY19yZXBseScsSTJjUGFyc2VyLnByb3RvdHlwZS5pMmNSZXBseUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpMmNfcmVzdWx0JyxJMmNQYXJzZXIucHJvdG90eXBlLmkyY1Jlc3VsdEV2ZW50LmJpbmQodGhpcykpO30KLWNvbnN0IGkyY1dyaXRlUmVwbHlSRT1uZXcgUmVnRXhwKCdpMmMtKFxcZCspICMoXFxkKykgYT0oW1xcZGEtZkEtRl0rKSBmPShbXFxkYS1mQS1GXSspIGw9KFxcZCspICcrJyhcXFtbXFxkYS1mQS1GXFwtXStcXF0pJyk7Y29uc3QgaTJjUmVhZFJFPS9pMmMtKFxkKykgIyhcZCspIGE9KFtcZGEtZkEtRl0rKSBmPShbXGRhLWZBLUZdKykgbD0oXGQrKS87Y29uc3QgaTJjUmVzdWx0UkU9L2kyYy0oXGQrKSBuPShcZCspIHJldD0oXGQrKS87STJjUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsaTJjV3JpdGVFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PWkyY1dyaXRlUmVwbHlSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGFkYXB0ZXJOdW1iZXI9cGFyc2VJbnQoZXZlbnRbMV0pO2NvbnN0IG1lc3NhZ2VOdW1iZXI9ZXZlbnRbMl07Y29uc3QgYWRkcmVzcz1ldmVudFszXTtjb25zdCBmbGFncz1ldmVudFs0XTtjb25zdCBkYXRhTGVuZ3RoPWV2ZW50WzVdO2NvbnN0IGRhdGE9ZXZlbnRbNl07Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2kyYyBhZGFwdGVyICcrYWRhcHRlck51bWJlcik7cHVzaExhc3RTbGljZUlmTmVlZGVkKHRocmVhZCxldmVudFsxXSx0cyk7dGhyZWFkLmxhc3RFbnRyeVRpdGxlPSdpMmMgd3JpdGUnO3RocmVhZC5sYXN0RW50cnlUcz10czt0aHJlYWQubGFzdEVudHJ5QXJncz17J01lc3NhZ2UgbnVtYmVyJzptZXNzYWdlTnVtYmVyLCdBZGRyZXNzJzphZGRyZXNzLCdGbGFncyc6ZmxhZ3MsJ0RhdGEgTGVuZ3RoJzpkYXRhTGVuZ3RoLCdEYXRhJzpkYXRhfTtyZXR1cm4gdHJ1ZTt9LGkyY1JlYWRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PWkyY1JlYWRSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGFkYXB0ZXJOdW1iZXI9cGFyc2VJbnQoZXZlbnRbMV0pO2NvbnN0IG1lc3NhZ2VOdW1iZXI9ZXZlbnRbMl07Y29uc3QgYWRkcmVzcz1ldmVudFszXTtjb25zdCBmbGFncz1ldmVudFs0XTtjb25zdCBkYXRhTGVuZ3RoPWV2ZW50WzVdO2NvbnN0IHRocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdpMmMgYWRhcHRlciAnK2FkYXB0ZXJOdW1iZXIpO3B1c2hMYXN0U2xpY2VJZk5lZWRlZCh0aHJlYWQsZXZlbnRbMV0sdHMpO3RocmVhZC5sYXN0RW50cnlUaXRsZT0naTJjIHJlYWQnO3RocmVhZC5sYXN0RW50cnlUcz10czt0aHJlYWQubGFzdEVudHJ5QXJncz17J01lc3NhZ2UgbnVtYmVyJzptZXNzYWdlTnVtYmVyLCdBZGRyZXNzJzphZGRyZXNzLCdGbGFncyc6ZmxhZ3MsJ0RhdGEgTGVuZ3RoJzpkYXRhTGVuZ3RofTtyZXR1cm4gdHJ1ZTt9LGkyY1JlcGx5RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1pMmNXcml0ZVJlcGx5UkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBhZGFwdGVyTnVtYmVyPXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCBtZXNzYWdlTnVtYmVyPWV2ZW50WzJdO2NvbnN0IGFkZHJlc3M9ZXZlbnRbM107Y29uc3QgZmxhZ3M9ZXZlbnRbNF07Y29uc3QgZGF0YUxlbmd0aD1ldmVudFs1XTtjb25zdCBkYXRhPWV2ZW50WzZdO2NvbnN0IHRocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdpMmMgYWRhcHRlciAnK2FkYXB0ZXJOdW1iZXIpO3B1c2hMYXN0U2xpY2VJZk5lZWRlZCh0aHJlYWQsZXZlbnRbMV0sdHMpO3RocmVhZC5sYXN0RW50cnlUaXRsZT0naTJjIHJlcGx5Jzt0aHJlYWQubGFzdEVudHJ5VHM9dHM7dGhyZWFkLmxhc3RFbnRyeUFyZ3M9eydNZXNzYWdlIG51bWJlcic6bWVzc2FnZU51bWJlciwnQWRkcmVzcyc6YWRkcmVzcywnRmxhZ3MnOmZsYWdzLCdEYXRhIExlbmd0aCc6ZGF0YUxlbmd0aCwnRGF0YSc6ZGF0YX07cmV0dXJuIHRydWU7fSxpMmNSZXN1bHRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PWkyY1Jlc3VsdFJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgYWRhcHRlck51bWJlcj1wYXJzZUludChldmVudFsxXSk7Y29uc3QgbnVtTWVzc2FnZXM9ZXZlbnRbMl07Y29uc3QgcmV0PWV2ZW50WzNdO2NvbnN0IHRocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdpMmMgYWRhcHRlciAnK2FkYXB0ZXJOdW1iZXIpO2NvbnN0IGFyZ3M9dGhyZWFkLmxhc3RFbnRyeUFyZ3M7aWYoYXJncyE9PXVuZGVmaW5lZCl7YXJnc1snTnVtYmVyIG9mIG1lc3NhZ2VzJ109bnVtTWVzc2FnZXM7YXJncy5SZXR1cm49cmV0O30KLXB1c2hMYXN0U2xpY2VJZk5lZWRlZCh0aHJlYWQsZXZlbnRbMV0sdHMpO3RocmVhZC5sYXN0RW50cnlUaXRsZT11bmRlZmluZWQ7dGhyZWFkLmxhc3RFbnRyeVRzPXVuZGVmaW5lZDt0aHJlYWQubGFzdEVudHJ5QXJncz11bmRlZmluZWQ7cmV0dXJuIHRydWU7fSx9O2Z1bmN0aW9uIHB1c2hMYXN0U2xpY2VJZk5lZWRlZCh0aHJlYWQsaWQsY3VycmVudFRzKXtpZih0aHJlYWQubGFzdEVudHJ5VHMhPT11bmRlZmluZWQpe2NvbnN0IGR1cmF0aW9uPWN1cnJlbnRUcy10aHJlYWQubGFzdEVudHJ5VHM7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLHRocmVhZC5sYXN0RW50cnlUaXRsZSxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcoaWQpLHRocmVhZC5sYXN0RW50cnlUcyx0aHJlYWQubGFzdEVudHJ5QXJncyxkdXJhdGlvbik7dGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fX0KLVBhcnNlci5yZWdpc3RlcihJMmNQYXJzZXIpO3JldHVybntJMmNQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIEk5MTVQYXJzZXIoaW1wb3J0ZXIpe1BhcnNlci5jYWxsKHRoaXMsaW1wb3J0ZXIpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpOTE1X2dlbV9vYmplY3RfY3JlYXRlJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1PYmplY3RDcmVhdGVFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fb2JqZWN0X2JpbmQnLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbU9iamVjdEJpbmRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fb2JqZWN0X3VuYmluZCcsSTkxNVBhcnNlci5wcm90b3R5cGUuZ2VtT2JqZWN0QmluZEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpOTE1X2dlbV9vYmplY3RfY2hhbmdlX2RvbWFpbicsSTkxNVBhcnNlci5wcm90b3R5cGUuZ2VtT2JqZWN0Q2hhbmdlRG9tYWluRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2k5MTVfZ2VtX29iamVjdF9wcmVhZCcsSTkxNVBhcnNlci5wcm90b3R5cGUuZ2VtT2JqZWN0UHJlYWRXcml0ZUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpOTE1X2dlbV9vYmplY3RfcHdyaXRlJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1PYmplY3RQcmVhZFdyaXRlRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2k5MTVfZ2VtX29iamVjdF9mYXVsdCcsSTkxNVBhcnNlci5wcm90b3R5cGUuZ2VtT2JqZWN0RmF1bHRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fb2JqZWN0X2NsZmx1c2gnLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbU9iamVjdERlc3Ryb3lFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fb2JqZWN0X2Rlc3Ryb3knLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbU9iamVjdERlc3Ryb3lFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fcmluZ19kaXNwYXRjaCcsSTkxNVBhcnNlci5wcm90b3R5cGUuZ2VtUmluZ0Rpc3BhdGNoRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2k5MTVfZ2VtX3JpbmdfZmx1c2gnLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbVJpbmdGbHVzaEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpOTE1X2dlbV9yZXF1ZXN0JyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1SZXF1ZXN0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2k5MTVfZ2VtX3JlcXVlc3RfYWRkJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1SZXF1ZXN0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2k5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGUnLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbVJlcXVlc3RFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUnLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbVJlcXVlc3RFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fcmVxdWVzdF93YWl0X2JlZ2luJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1SZXF1ZXN0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2k5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9lbmQnLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbVJlcXVlc3RFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fcmluZ193YWl0X2JlZ2luJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1SaW5nV2FpdEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpOTE1X2dlbV9yaW5nX3dhaXRfZW5kJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1SaW5nV2FpdEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpOTE1X3JlZ19ydycsSTkxNVBhcnNlci5wcm90b3R5cGUucmVnUldFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9mbGlwX3JlcXVlc3QnLEk5MTVQYXJzZXIucHJvdG90eXBlLmZsaXBFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9mbGlwX2NvbXBsZXRlJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5mbGlwRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2ludGVsX2dwdV9mcmVxX2NoYW5nZScsSTkxNVBhcnNlci5wcm90b3R5cGUuZ3B1RnJlcXVlbmN5LmJpbmQodGhpcykpO30KLUk5MTVQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxpOTE1RmxpcE9wZW5TbGljZSh0cyxvYmoscGxhbmUpe2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZVBzZXVkb1RocmVhZCgnaTkxNV9mbGlwJyk7a3RocmVhZC5vcGVuU2xpY2VUUz10cztrdGhyZWFkLm9wZW5TbGljZT0nZmxpcDonK29iaisnLycrcGxhbmU7fSxpOTE1RmxpcENsb3NlU2xpY2UodHMsYXJncyl7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdpOTE1X2ZsaXAnKTtpZihrdGhyZWFkLm9wZW5TbGljZSl7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLGt0aHJlYWQub3BlblNsaWNlLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhrdGhyZWFkLm9wZW5TbGljZSksa3RocmVhZC5vcGVuU2xpY2VUUyxhcmdzLHRzLWt0aHJlYWQub3BlblNsaWNlVFMpO2t0aHJlYWQudGhyZWFkLnNsaWNlR3JvdXAucHVzaFNsaWNlKHNsaWNlKTt9Ci1rdGhyZWFkLm9wZW5TbGljZT11bmRlZmluZWQ7fSxpOTE1R2VtT2JqZWN0U2xpY2UodHMsZXZlbnROYW1lLG9iaixhcmdzKXtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2k5MTVfZ2VtJyk7a3RocmVhZC5vcGVuU2xpY2U9ZXZlbnROYW1lKyc6JytvYmo7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLGt0aHJlYWQub3BlblNsaWNlLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhrdGhyZWFkLm9wZW5TbGljZSksdHMsYXJncywwKTtrdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fSxpOTE1R2VtUmluZ1NsaWNlKHRzLGV2ZW50TmFtZSxkZXYscmluZyxhcmdzKXtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2k5MTVfZ2VtX3JpbmcnKTtrdGhyZWFkLm9wZW5TbGljZT1ldmVudE5hbWUrJzonK2RldisnLicrcmluZztjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJycsa3RocmVhZC5vcGVuU2xpY2UsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGt0aHJlYWQub3BlblNsaWNlKSx0cyxhcmdzLDApO2t0aHJlYWQudGhyZWFkLnNsaWNlR3JvdXAucHVzaFNsaWNlKHNsaWNlKTt9LGk5MTVSZWdTbGljZSh0cyxldmVudE5hbWUscmVnLGFyZ3Mpe2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZVBzZXVkb1RocmVhZCgnaTkxNV9yZWcnKTtrdGhyZWFkLm9wZW5TbGljZT1ldmVudE5hbWUrJzonK3JlZztjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJycsa3RocmVhZC5vcGVuU2xpY2UsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGt0aHJlYWQub3BlblNsaWNlKSx0cyxhcmdzLDApO2t0aHJlYWQudGhyZWFkLnNsaWNlR3JvdXAucHVzaFNsaWNlKHNsaWNlKTt9LGk5MTVGcmVxQ2hhbmdlU2xpY2UodHMsZXZlbnROYW1lLGFyZ3Mpe2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZVBzZXVkb1RocmVhZCgnaTkxNV9ncHVfZnJlcScpO2t0aHJlYWQub3BlblNsaWNlPWV2ZW50TmFtZTtjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJycsa3RocmVhZC5vcGVuU2xpY2UsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGt0aHJlYWQub3BlblNsaWNlKSx0cyxhcmdzLDApO2t0aHJlYWQudGhyZWFkLnNsaWNlR3JvdXAucHVzaFNsaWNlKHNsaWNlKTt9LGdlbU9iamVjdENyZWF0ZUV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L29iaj0oXHcrKSwgc2l6ZT0oXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBvYmo9ZXZlbnRbMV07Y29uc3Qgc2l6ZT1wYXJzZUludChldmVudFsyXSk7dGhpcy5pOTE1R2VtT2JqZWN0U2xpY2UodHMsZXZlbnROYW1lLG9iaix7b2JqLHNpemV9KTtyZXR1cm4gdHJ1ZTt9LGdlbU9iamVjdEJpbmRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9vYmo9KFx3KyksIG9mZnNldD0oXHcrKSwgc2l6ZT0oXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBvYmo9ZXZlbnRbMV07Y29uc3Qgb2Zmc2V0PWV2ZW50WzJdO2NvbnN0IHNpemU9cGFyc2VJbnQoZXZlbnRbM10pO3RoaXMuaTkxNU9iamVjdEdlbVNsaWNlKHRzLGV2ZW50TmFtZSsnOicrb2JqLHtvYmosb2Zmc2V0LHNpemV9KTtyZXR1cm4gdHJ1ZTt9LGdlbU9iamVjdENoYW5nZURvbWFpbkV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L29iaj0oXHcrKSwgcmVhZD0oXHcrPT5cdyspLCB3cml0ZT0oXHcrPT5cdyspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IG9iaj1ldmVudFsxXTtjb25zdCByZWFkPWV2ZW50WzJdO2NvbnN0IHdyaXRlPWV2ZW50WzNdO3RoaXMuaTkxNUdlbU9iamVjdFNsaWNlKHRzLGV2ZW50TmFtZSxvYmose29iaixyZWFkLHdyaXRlfSk7cmV0dXJuIHRydWU7fSxnZW1PYmplY3RQcmVhZFdyaXRlRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vb2JqPShcdyspLCBvZmZzZXQ9KFxkKyksIGxlbj0oXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBvYmo9ZXZlbnRbMV07Y29uc3Qgb2Zmc2V0PXBhcnNlSW50KGV2ZW50WzJdKTtjb25zdCBsZW49cGFyc2VJbnQoZXZlbnRbM10pO3RoaXMuaTkxNUdlbU9iamVjdFNsaWNlKHRzLGV2ZW50TmFtZSxvYmose29iaixvZmZzZXQsbGVufSk7cmV0dXJuIHRydWU7fSxnZW1PYmplY3RGYXVsdEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L29iaj0oXHcrKSwgKFx3KykgaW5kZXg9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3Qgb2JqPWV2ZW50WzFdO2NvbnN0IHR5cGU9ZXZlbnRbMl07Y29uc3QgaW5kZXg9cGFyc2VJbnQoZXZlbnRbM10pO3RoaXMuaTkxNUdlbU9iamVjdFNsaWNlKHRzLGV2ZW50TmFtZSxvYmose29iaix0eXBlLGluZGV4fSk7cmV0dXJuIHRydWU7fSxnZW1PYmplY3REZXN0cm95RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vb2JqPShcdyspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IG9iaj1ldmVudFsxXTt0aGlzLmk5MTVHZW1PYmplY3RTbGljZSh0cyxldmVudE5hbWUsb2JqLHtvYmp9KTtyZXR1cm4gdHJ1ZTt9LGdlbVJpbmdEaXNwYXRjaEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L2Rldj0oXGQrKSwgcmluZz0oXGQrKSwgc2Vxbm89KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgZGV2PXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCByaW5nPXBhcnNlSW50KGV2ZW50WzJdKTtjb25zdCBzZXFubz1wYXJzZUludChldmVudFszXSk7dGhpcy5pOTE1R2VtUmluZ1NsaWNlKHRzLGV2ZW50TmFtZSxkZXYscmluZyx7ZGV2LHJpbmcsc2Vxbm99KTtyZXR1cm4gdHJ1ZTt9LGdlbVJpbmdGbHVzaEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L2Rldj0oXGQrKSwgcmluZz0oXHcrKSwgaW52YWxpZGF0ZT0oXHcrKSwgZmx1c2g9KFx3KykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgZGV2PXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCByaW5nPXBhcnNlSW50KGV2ZW50WzJdKTtjb25zdCBpbnZhbGlkYXRlPWV2ZW50WzNdO2NvbnN0IGZsdXNoPWV2ZW50WzRdO3RoaXMuaTkxNUdlbVJpbmdTbGljZSh0cyxldmVudE5hbWUsZGV2LHJpbmcse2RldixyaW5nLGludmFsaWRhdGUsZmx1c2h9KTtyZXR1cm4gdHJ1ZTt9LGdlbVJlcXVlc3RFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9kZXY9KFxkKyksIHJpbmc9KFxkKyksIHNlcW5vPShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGRldj1wYXJzZUludChldmVudFsxXSk7Y29uc3QgcmluZz1wYXJzZUludChldmVudFsyXSk7Y29uc3Qgc2Vxbm89cGFyc2VJbnQoZXZlbnRbM10pO3RoaXMuaTkxNUdlbVJpbmdTbGljZSh0cyxldmVudE5hbWUsZGV2LHJpbmcse2RldixyaW5nLHNlcW5vfSk7cmV0dXJuIHRydWU7fSxnZW1SaW5nV2FpdEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L2Rldj0oXGQrKSwgcmluZz0oXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBkZXY9cGFyc2VJbnQoZXZlbnRbMV0pO2NvbnN0IHJpbmc9cGFyc2VJbnQoZXZlbnRbMl0pO3RoaXMuaTkxNUdlbVJpbmdTbGljZSh0cyxldmVudE5hbWUsZGV2LHJpbmcse2RldixyaW5nfSk7cmV0dXJuIHRydWU7fSxyZWdSV0V2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9LyhcdyspIHJlZz0oXHcrKSwgbGVuPShcZCspLCB2YWw9KFwoXHcrLCBcdytcKSkvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3Qgcnc9ZXZlbnRbMV07Y29uc3QgcmVnPWV2ZW50WzJdO2NvbnN0IGxlbj1ldmVudFszXTtjb25zdCBkYXRhPWV2ZW50WzNdO3RoaXMuaTkxNVJlZ1NsaWNlKHRzLHJ3LHJlZyx7cncscmVnLGxlbixkYXRhfSk7cmV0dXJuIHRydWU7fSxmbGlwRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vcGxhbmU9KFxkKyksIG9iaj0oXHcrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBwbGFuZT1wYXJzZUludChldmVudFsxXSk7Y29uc3Qgb2JqPWV2ZW50WzJdO2lmKGV2ZW50TmFtZT09PSdpOTE1X2ZsaXBfcmVxdWVzdCcpe3RoaXMuaTkxNUZsaXBPcGVuU2xpY2UodHMsb2JqLHBsYW5lKTt9ZWxzZXt0aGlzLmk5MTVGbGlwQ2xvc2VTbGljZSh0cyx7b2JqLHBsYW5lfSk7fQotcmV0dXJuIHRydWU7fSxncHVGcmVxdWVuY3koZXZlbnROYW1lLGNwdU51bXZlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vbmV3X2ZyZXE9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgZnJlcT1wYXJzZUludChldmVudFsxXSk7dGhpcy5pOTE1RnJlcUNoYW5nZVNsaWNlKHRzLGV2ZW50TmFtZSx7ZnJlcX0pO3JldHVybiB0cnVlO319O1BhcnNlci5yZWdpc3RlcihJOTE1UGFyc2VyKTtyZXR1cm57STkxNVBhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5saW51eF9wZXJmJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gSXJxUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaXJxX2hhbmRsZXJfZW50cnknLElycVBhcnNlci5wcm90b3R5cGUuaXJxSGFuZGxlckVudHJ5RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2lycV9oYW5kbGVyX2V4aXQnLElycVBhcnNlci5wcm90b3R5cGUuaXJxSGFuZGxlckV4aXRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignc29mdGlycV9yYWlzZScsSXJxUGFyc2VyLnByb3RvdHlwZS5zb2Z0aXJxUmFpc2VFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignc29mdGlycV9lbnRyeScsSXJxUGFyc2VyLnByb3RvdHlwZS5zb2Z0aXJxRW50cnlFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignc29mdGlycV9leGl0JyxJcnFQYXJzZXIucHJvdG90eXBlLnNvZnRpcnFFeGl0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2lwaV9lbnRyeScsSXJxUGFyc2VyLnByb3RvdHlwZS5pcGlFbnRyeUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpcGlfZXhpdCcsSXJxUGFyc2VyLnByb3RvdHlwZS5pcGlFeGl0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3ByZWVtcHRfZGlzYWJsZScsSXJxUGFyc2VyLnByb3RvdHlwZS5wcmVlbXB0U3RhcnRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcigncHJlZW1wdF9lbmFibGUnLElycVBhcnNlci5wcm90b3R5cGUucHJlZW1wdEVuZEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpcnFfZGlzYWJsZScsSXJxUGFyc2VyLnByb3RvdHlwZS5pcnFvZmZTdGFydEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpcnFfZW5hYmxlJyxJcnFQYXJzZXIucHJvdG90eXBlLmlycW9mZkVuZEV2ZW50LmJpbmQodGhpcykpO30KLWNvbnN0IGlycUhhbmRsZXJFbnRyeVJFPS9pcnE9KFxkKykgbmFtZT0oLispLztjb25zdCBpcnFIYW5kbGVyRXhpdFJFPS9pcnE9KFxkKykgcmV0PSguKykvO2NvbnN0IHNvZnRpcnFSRT0vdmVjPShcZCspIFxbYWN0aW9uPSguKylcXS87Y29uc3QgaXBpSGFuZGxlckV4aXRSRT0vXCgoLispXCkvO2NvbnN0IHByZWVtcHRpcnFSRT0vY2FsbGVyPSguKykgcGFyZW50PSguKykvO0lycVBhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLGlycUhhbmRsZXJFbnRyeUV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9aXJxSGFuZGxlckVudHJ5UkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBpcnE9cGFyc2VJbnQoZXZlbnRbMV0pO2NvbnN0IG5hbWU9ZXZlbnRbMl07Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2lycXMgY3B1ICcrY3B1TnVtYmVyKTt0aHJlYWQubGFzdEVudHJ5VHM9dHM7dGhyZWFkLmlycU5hbWU9bmFtZTtyZXR1cm4gdHJ1ZTt9LGlycUhhbmRsZXJFeGl0RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1pcnFIYW5kbGVyRXhpdFJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgaXJxPXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCByZXQ9ZXZlbnRbMl07Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2lycXMgY3B1ICcrY3B1TnVtYmVyKTtpZih0aHJlYWQubGFzdEVudHJ5VHMhPT11bmRlZmluZWQpe2NvbnN0IGR1cmF0aW9uPXRzLXRocmVhZC5sYXN0RW50cnlUcztjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJycsJ0lSUSAoJyt0aHJlYWQuaXJxTmFtZSsnKScsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGV2ZW50WzFdKSx0aHJlYWQubGFzdEVudHJ5VHMse3JldH0sZHVyYXRpb24pO3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO30KLXRocmVhZC5sYXN0RW50cnlUcz11bmRlZmluZWQ7dGhyZWFkLmlycU5hbWU9dW5kZWZpbmVkO3JldHVybiB0cnVlO30sc29mdGlycVJhaXNlRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdHJ1ZTt9LHNvZnRpcnFFbnRyeUV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9c29mdGlycVJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgYWN0aW9uPWV2ZW50WzJdO2NvbnN0IHRocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdzb2Z0aXJxIGNwdSAnK2NwdU51bWJlcik7dGhyZWFkLmxhc3RFbnRyeVRzPXRzO3JldHVybiB0cnVlO30sc29mdGlycUV4aXRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PXNvZnRpcnFSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IHZlYz1wYXJzZUludChldmVudFsxXSk7Y29uc3QgYWN0aW9uPWV2ZW50WzJdO2NvbnN0IHRocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdzb2Z0aXJxIGNwdSAnK2NwdU51bWJlcik7aWYodGhyZWFkLmxhc3RFbnRyeVRzIT09dW5kZWZpbmVkKXtjb25zdCBkdXJhdGlvbj10cy10aHJlYWQubGFzdEVudHJ5VHM7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLGFjdGlvbixDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcoZXZlbnRbMV0pLHRocmVhZC5sYXN0RW50cnlUcyx7dmVjfSxkdXJhdGlvbik7dGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fQotdGhyZWFkLmxhc3RFbnRyeVRzPXVuZGVmaW5lZDtyZXR1cm4gdHJ1ZTt9LGlwaUVudHJ5RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCB0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZVBzZXVkb1RocmVhZCgnaXJxcyBjcHUgJytjcHVOdW1iZXIpO3RocmVhZC5sYXN0RW50cnlUcz10cztyZXR1cm4gdHJ1ZTt9LGlwaUV4aXRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PWlwaUhhbmRsZXJFeGl0UkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBpcGlOYW1lPWV2ZW50WzFdO2NvbnN0IHRocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdpcnFzIGNwdSAnK2NwdU51bWJlcik7aWYodGhyZWFkLmxhc3RFbnRyeVRzIT09dW5kZWZpbmVkKXtjb25zdCBkdXJhdGlvbj10cy10aHJlYWQubGFzdEVudHJ5VHM7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLCdJUEkgKCcraXBpTmFtZSsnKScsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGlwaU5hbWUpLHRocmVhZC5sYXN0RW50cnlUcyx7fSxkdXJhdGlvbik7dGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fQotdGhyZWFkLmxhc3RFbnRyeVRzPXVuZGVmaW5lZDtyZXR1cm4gdHJ1ZTt9LHByZWVtcHRTdGFydEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9cHJlZW1wdGlycVJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ3ByZWVtcHQgY3B1ICcrY3B1TnVtYmVyKTt0aHJlYWQubGFzdEVudHJ5VHM9dHM7dGhyZWFkLnByZWVtcHRTdGFydENhbGxlcj1ldmVudFsxXTt0aHJlYWQucHJlZW1wdFN0YXJ0UGFyZW50PWV2ZW50WzJdO3JldHVybiB0cnVlO30scHJlZW1wdEVuZEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9cHJlZW1wdGlycVJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ3ByZWVtcHQgY3B1ICcrY3B1TnVtYmVyKTt0aHJlYWQucHJlZW1wdEVuZENhbGxlcj1ldmVudFsxXTt0aHJlYWQucHJlZW1wdEVuZFBhcmVudD1ldmVudFsyXTtpZih0aHJlYWQubGFzdEVudHJ5VHMhPT11bmRlZmluZWQpe2NvbnN0IGR1cmF0aW9uPXRzLXRocmVhZC5sYXN0RW50cnlUcztjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJycsdGhyZWFkLnByZWVtcHRTdGFydFBhcmVudCsnOiAnK3RocmVhZC5wcmVlbXB0U3RhcnRDYWxsZXIsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHRocmVhZC5wcmVlbXB0RW5kQ2FsbGVyKSx0aHJlYWQubGFzdEVudHJ5VHMse30sZHVyYXRpb24pO3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO30KLXRocmVhZC5sYXN0RW50cnlUcz11bmRlZmluZWQ7cmV0dXJuIHRydWU7fSxpcnFvZmZTdGFydEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9cHJlZW1wdGlycVJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2lycW9mZiBjcHUgJytjcHVOdW1iZXIpO3RocmVhZC5sYXN0RW50cnlUcz10czt0aHJlYWQuaXJxb2ZmU3RhcnRDYWxsZXI9ZXZlbnRbMV07dGhyZWFkLmlycW9mZlN0YXJ0UGFyZW50PWV2ZW50WzJdO3JldHVybiB0cnVlO30saXJxb2ZmRW5kRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1wcmVlbXB0aXJxUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCB0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZVBzZXVkb1RocmVhZCgnaXJxb2ZmIGNwdSAnK2NwdU51bWJlcik7dGhyZWFkLmlycW9mZkVuZENhbGxlcj1ldmVudFsxXTt0aHJlYWQuaXJxb2ZmRW5kUGFyZW50PWV2ZW50WzJdO2lmKHRocmVhZC5sYXN0RW50cnlUcyE9PXVuZGVmaW5lZCl7Y29uc3QgZHVyYXRpb249dHMtdGhyZWFkLmxhc3RFbnRyeVRzO2NvbnN0IHNsaWNlPW5ldyB0ci5tb2RlbC5UaHJlYWRTbGljZSgnJyx0aHJlYWQuaXJxb2ZmU3RhcnRQYXJlbnQrJzogJyt0aHJlYWQuaXJxb2ZmU3RhcnRDYWxsZXIsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHRocmVhZC5pcnFvZmZFbmRDYWxsZXIpLHRocmVhZC5sYXN0RW50cnlUcyx7fSxkdXJhdGlvbik7dGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fQotdGhyZWFkLmxhc3RFbnRyeVRzPXVuZGVmaW5lZDtyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoSXJxUGFyc2VyKTtyZXR1cm57SXJxUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgTGludXhQZXJmUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gS2VybmVsRnVuY1BhcnNlcihpbXBvcnRlcil7TGludXhQZXJmUGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2dyYXBoX2VudCcsS2VybmVsRnVuY1BhcnNlci5wcm90b3R5cGUudHJhY2VLZXJuZWxGdW5jRW50ZXJFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZ3JhcGhfcmV0JyxLZXJuZWxGdW5jUGFyc2VyLnByb3RvdHlwZS50cmFjZUtlcm5lbEZ1bmNSZXR1cm5FdmVudC5iaW5kKHRoaXMpKTt0aGlzLm1vZGVsXz1pbXBvcnRlci5tb2RlbF87dGhpcy5wcGlkc189e307fQotY29uc3QgVGVzdEV4cG9ydHM9e307Y29uc3QgZnVuY0VudGVyUkU9bmV3IFJlZ0V4cCgnZnVuYz0oLispJyk7VGVzdEV4cG9ydHMuZnVuY0VudGVyUkU9ZnVuY0VudGVyUkU7S2VybmVsRnVuY1BhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpMaW51eFBlcmZQYXJzZXIucHJvdG90eXBlLHRyYWNlS2VybmVsRnVuY0VudGVyRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudERhdGE9ZnVuY0VudGVyUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50RGF0YSlyZXR1cm4gZmFsc2U7aWYoZXZlbnRCYXNlLnRnaWQ9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9Ci1jb25zdCB0Z2lkPXBhcnNlSW50KGV2ZW50QmFzZS50Z2lkKTtjb25zdCBuYW1lPWV2ZW50RGF0YVsxXTtjb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKHRnaWQpLmdldE9yQ3JlYXRlVGhyZWFkKHBpZCk7dGhyZWFkLm5hbWU9ZXZlbnRCYXNlLnRocmVhZE5hbWU7Y29uc3Qgc2xpY2VzPXRocmVhZC5rZXJuZWxTbGljZUdyb3VwO2lmKCFzbGljZXMuaXNUaW1lc3RhbXBWYWxpZEZvckJlZ2luT3JFbmQodHMpKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidwYXJzZV9lcnJvcicsbWVzc2FnZTonVGltZXN0YW1wcyBhcmUgbW92aW5nIGJhY2t3YXJkLid9KTtyZXR1cm4gZmFsc2U7fQotY29uc3Qgc2xpY2U9c2xpY2VzLmJlZ2luU2xpY2UobnVsbCxuYW1lLHRzLHt9KTtyZXR1cm4gdHJ1ZTt9LHRyYWNlS2VybmVsRnVuY1JldHVybkV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7aWYoZXZlbnRCYXNlLnRnaWQ9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9Ci1jb25zdCB0Z2lkPXBhcnNlSW50KGV2ZW50QmFzZS50Z2lkKTtjb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKHRnaWQpLmdldE9yQ3JlYXRlVGhyZWFkKHBpZCk7dGhyZWFkLm5hbWU9ZXZlbnRCYXNlLnRocmVhZE5hbWU7Y29uc3Qgc2xpY2VzPXRocmVhZC5rZXJuZWxTbGljZUdyb3VwO2lmKCFzbGljZXMuaXNUaW1lc3RhbXBWYWxpZEZvckJlZ2luT3JFbmQodHMpKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidwYXJzZV9lcnJvcicsbWVzc2FnZTonVGltZXN0YW1wcyBhcmUgbW92aW5nIGJhY2t3YXJkLid9KTtyZXR1cm4gZmFsc2U7fQotaWYoc2xpY2VzLm9wZW5TbGljZUNvdW50PjApe3NsaWNlcy5lbmRTbGljZSh0cyk7fQotcmV0dXJuIHRydWU7fX07TGludXhQZXJmUGFyc2VyLnJlZ2lzdGVyKEtlcm5lbEZ1bmNQYXJzZXIpO3JldHVybntLZXJuZWxGdW5jUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlcjtmdW5jdGlvbiBNYWxpUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignbWFsaV9kdmZzX2V2ZW50JyxNYWxpUGFyc2VyLnByb3RvdHlwZS5kdmZzRXZlbnRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignbWFsaV9kdmZzX3NldF9jbG9jaycsTWFsaVBhcnNlci5wcm90b3R5cGUuZHZmc1NldENsb2NrRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ21hbGlfZHZmc19zZXRfdm9sdGFnZScsTWFsaVBhcnNlci5wcm90b3R5cGUuZHZmc1NldFZvbHRhZ2VFdmVudC5iaW5kKHRoaXMpKTt0aGlzLmFkZEpNQ291bnRlcignbWFsaV9od2NfTUVTU0FHRVNfU0VOVCcsJ01lc3NhZ2VzIFNlbnQnKTt0aGlzLmFkZEpNQ291bnRlcignbWFsaV9od2NfTUVTU0FHRVNfUkVDRUlWRUQnLCdNZXNzYWdlcyBSZWNlaXZlZCcpO3RoaXMuYWRkSk1DeWNsZXMoJ21hbGlfaHdjX0dQVV9BQ1RJVkUnLCdHUFUgQWN0aXZlJyk7dGhpcy5hZGRKTUN5Y2xlcygnbWFsaV9od2NfSVJRX0FDVElWRScsJ0lSUSBBY3RpdmUnKTtmb3IobGV0IGk9MDtpPDc7aSsrKXtjb25zdCBqb2JTdHI9J0pTJytpO2NvbnN0IGpvYkhXQ1N0cj0nbWFsaV9od2NfJytqb2JTdHI7dGhpcy5hZGRKTUNvdW50ZXIoam9iSFdDU3RyKydfSk9CUycsam9iU3RyKycgSm9icycpO3RoaXMuYWRkSk1Db3VudGVyKGpvYkhXQ1N0cisnX1RBU0tTJyxqb2JTdHIrJyBUYXNrcycpO3RoaXMuYWRkSk1DeWNsZXMoam9iSFdDU3RyKydfQUNUSVZFJyxqb2JTdHIrJyBBY3RpdmUnKTt0aGlzLmFkZEpNQ3ljbGVzKGpvYkhXQ1N0cisnX1dBSVRfUkVBRCcsam9iU3RyKycgV2FpdCBSZWFkJyk7dGhpcy5hZGRKTUN5Y2xlcyhqb2JIV0NTdHIrJ19XQUlUX0lTU1VFJyxqb2JTdHIrJyBXYWl0IElzc3VlJyk7dGhpcy5hZGRKTUN5Y2xlcyhqb2JIV0NTdHIrJ19XQUlUX0RFUEVORCcsam9iU3RyKycgV2FpdCBEZXBlbmQnKTt0aGlzLmFkZEpNQ3ljbGVzKGpvYkhXQ1N0cisnX1dBSVRfRklOSVNIJyxqb2JTdHIrJyBXYWl0IEZpbmlzaCcpO30KLXRoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19UUklBTkdMRVMnLCdUcmlhbmdsZXMnKTt0aGlzLmFkZFRpbGVyQ291bnRlcignbWFsaV9od2NfUVVBRFMnLCdRdWFkcycpO3RoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19QT0xZR09OUycsJ1BvbHlnb25zJyk7dGhpcy5hZGRUaWxlckNvdW50ZXIoJ21hbGlfaHdjX1BPSU5UUycsJ1BvaW50cycpO3RoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19MSU5FUycsJ0xpbmVzJyk7dGhpcy5hZGRUaWxlckNvdW50ZXIoJ21hbGlfaHdjX1ZDQUNIRV9ISVQnLCdWQ2FjaGUgSGl0Jyk7dGhpcy5hZGRUaWxlckNvdW50ZXIoJ21hbGlfaHdjX1ZDQUNIRV9NSVNTJywnVkNhY2hlIE1pc3MnKTt0aGlzLmFkZFRpbGVyQ291bnRlcignbWFsaV9od2NfRlJPTlRfRkFDSU5HJywnRnJvbnQgRmFjaW5nJyk7dGhpcy5hZGRUaWxlckNvdW50ZXIoJ21hbGlfaHdjX0JBQ0tfRkFDSU5HJywnQmFjayBGYWNpbmcnKTt0aGlzLmFkZFRpbGVyQ291bnRlcignbWFsaV9od2NfUFJJTV9WSVNJQkxFJywnUHJpbSBWaXNpYmxlJyk7dGhpcy5hZGRUaWxlckNvdW50ZXIoJ21hbGlfaHdjX1BSSU1fQ1VMTEVEJywnUHJpbSBDdWxsZWQnKTt0aGlzLmFkZFRpbGVyQ291bnRlcignbWFsaV9od2NfUFJJTV9DTElQUEVEJywnUHJpbSBDbGlwcGVkJyk7dGhpcy5hZGRUaWxlckNvdW50ZXIoJ21hbGlfaHdjX1dSQlVGX0hJVCcsJ1dyYnVmIEhpdCcpO3RoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19XUkJVRl9NSVNTJywnV3JidWYgTWlzcycpO3RoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19XUkJVRl9MSU5FJywnV3JidWYgTGluZScpO3RoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19XUkJVRl9QQVJUSUFMJywnV3JidWYgUGFydGlhbCcpO3RoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19XUkJVRl9TVEFMTCcsJ1dyYnVmIFN0YWxsJyk7dGhpcy5hZGRUaWxlckN5Y2xlcygnbWFsaV9od2NfQUNUSVZFJywnVGlsZXIgQWN0aXZlJyk7dGhpcy5hZGRUaWxlckN5Y2xlcygnbWFsaV9od2NfSU5ERVhfV0FJVCcsJ0luZGV4IFdhaXQnKTt0aGlzLmFkZFRpbGVyQ3ljbGVzKCdtYWxpX2h3Y19JTkRFWF9SQU5HRV9XQUlUJywnSW5kZXggUmFuZ2UgV2FpdCcpO3RoaXMuYWRkVGlsZXJDeWNsZXMoJ21hbGlfaHdjX1ZFUlRFWF9XQUlUJywnVmVydGV4IFdhaXQnKTt0aGlzLmFkZFRpbGVyQ3ljbGVzKCdtYWxpX2h3Y19QQ0FDSEVfV0FJVCcsJ1BjYWNoZSBXYWl0Jyk7dGhpcy5hZGRUaWxlckN5Y2xlcygnbWFsaV9od2NfV1JCVUZfV0FJVCcsJ1dyYnVmIFdhaXQnKTt0aGlzLmFkZFRpbGVyQ3ljbGVzKCdtYWxpX2h3Y19CVVNfUkVBRCcsJ0J1cyBSZWFkJyk7dGhpcy5hZGRUaWxlckN5Y2xlcygnbWFsaV9od2NfQlVTX1dSSVRFJywnQnVzIFdyaXRlJyk7dGhpcy5hZGRUaWxlckN5Y2xlcygnbWFsaV9od2NfVElMRVJfVVRMQl9TVEFMTCcsJ1RpbGVyIFVUTEIgU3RhbGwnKTt0aGlzLmFkZFRpbGVyQ3ljbGVzKCdtYWxpX2h3Y19USUxFUl9VVExCX0hJVCcsJ1RpbGVyIFVUTEIgSGl0Jyk7dGhpcy5hZGRGcmFnQ3ljbGVzKCdtYWxpX2h3Y19GUkFHX0FDVElWRScsJ0FjdGl2ZScpO3RoaXMuYWRkRnJhZ0NvdW50ZXIoJ21hbGlfaHdjX0ZSQUdfUFJJTUFUSVZFUycsJ1ByaW1pdGl2ZXMnKTt0aGlzLmFkZEZyYWdDb3VudGVyKCdtYWxpX2h3Y19GUkFHX1BSSU1BVElWRVNfRFJPUFBFRCcsJ1ByaW1pdGl2ZXMgRHJvcHBlZCcpO3RoaXMuYWRkRnJhZ0N5Y2xlcygnbWFsaV9od2NfRlJBR19DWUNMRV9ERVNDJywnRGVzY3JpcHRvciBQcm9jZXNzaW5nJyk7dGhpcy5hZGRGcmFnQ3ljbGVzKCdtYWxpX2h3Y19GUkFHX0NZQ0xFU19QTFInLCdQTFIgUHJvY2Vzc2luZz8/Jyk7dGhpcy5hZGRGcmFnQ3ljbGVzKCdtYWxpX2h3Y19GUkFHX0NZQ0xFU19WRVJUJywnVmVydGV4IFByb2Nlc3NpbmcnKTt0aGlzLmFkZEZyYWdDeWNsZXMoJ21hbGlfaHdjX0ZSQUdfQ1lDTEVTX1RSSVNFVFVQJywnVHJpYW5nbGUgU2V0dXAnKTt0aGlzLmFkZEZyYWdDeWNsZXMoJ21hbGlfaHdjX0ZSQUdfQ1lDTEVTX1JBU1QnLCdSYXN0ZXJpemF0aW9uPz8/Jyk7dGhpcy5hZGRGcmFnQ291bnRlcignbWFsaV9od2NfRlJBR19USFJFQURTJywnVGhyZWFkcycpO3RoaXMuYWRkRnJhZ0NvdW50ZXIoJ21hbGlfaHdjX0ZSQUdfRFVNTVlfVEhSRUFEUycsJ0R1bW15IFRocmVhZHMnKTt0aGlzLmFkZEZyYWdDb3VudGVyKCdtYWxpX2h3Y19GUkFHX1FVQURTX1JBU1QnLCdRdWFkcyBSYXN0Jyk7dGhpcy5hZGRGcmFnQ291bnRlcignbWFsaV9od2NfRlJBR19RVUFEU19FWlNfVEVTVCcsJ1F1YWRzIEVaUyBUZXN0Jyk7dGhpcy5hZGRGcmFnQ291bnRlcignbWFsaV9od2NfRlJBR19RVUFEU19FWlNfS0lMTEVEJywnUXVhZHMgRVpTIEtpbGxlZCcpO3RoaXMuYWRkRnJhZ0NvdW50ZXIoJ21hbGlfaHdjX0ZSQUdfUVVBRFNfTFpTX1RFU1QnLCdRdWFkcyBMWlMgVGVzdCcpO3RoaXMuYWRkRnJhZ0NvdW50ZXIoJ21hbGlfaHdjX0ZSQUdfUVVBRFNfTFpTX0tJTExFRCcsJ1F1YWRzIExaUyBLaWxsZWQnKTt0aGlzLmFkZEZyYWdDeWNsZXMoJ21hbGlfaHdjX0ZSQUdfQ1lDTEVfTk9fVElMRScsJ05vIFRpbGVzJyk7dGhpcy5hZGRGcmFnQ291bnRlcignbWFsaV9od2NfRlJBR19OVU1fVElMRVMnLCdUaWxlcycpO3RoaXMuYWRkRnJhZ0NvdW50ZXIoJ21hbGlfaHdjX0ZSQUdfVFJBTlNfRUxJTScsJ1RyYW5zYWN0aW9ucyBFbGltaW5hdGVkJyk7dGhpcy5hZGRDb21wdXRlQ3ljbGVzKCdtYWxpX2h3Y19DT01QVVRFX0FDVElWRScsJ0FjdGl2ZScpO3RoaXMuYWRkQ29tcHV0ZUNvdW50ZXIoJ21hbGlfaHdjX0NPTVBVVEVfVEFTS1MnLCdUYXNrcycpO3RoaXMuYWRkQ29tcHV0ZUNvdW50ZXIoJ21hbGlfaHdjX0NPTVBVVEVfVEhSRUFEUycsJ1RocmVhZHMgU3RhcnRlZCcpO3RoaXMuYWRkQ29tcHV0ZUN5Y2xlcygnbWFsaV9od2NfQ09NUFVURV9DWUNMRVNfREVTQycsJ1dhaXRpbmcgZm9yIERlc2NyaXB0b3JzJyk7dGhpcy5hZGRUcmlwaXBlQ3ljbGVzKCdtYWxpX2h3Y19UUklQSVBFX0FDVElWRScsJ0FjdGl2ZScpO3RoaXMuYWRkQXJpdGhDb3VudGVyKCdtYWxpX2h3Y19BUklUSF9XT1JEUycsJ0luc3RydWN0aW9ucyAoL1BpcGVzKScpO3RoaXMuYWRkQXJpdGhDeWNsZXMoJ21hbGlfaHdjX0FSSVRIX0NZQ0xFU19SRUcnLCdSZWcgc2NoZWR1bGluZyBzdGFsbHMgKC9QaXBlcyknKTt0aGlzLmFkZEFyaXRoQ3ljbGVzKCdtYWxpX2h3Y19BUklUSF9DWUNMRVNfTDAnLCdMMCBjYWNoZSBtaXNzIHN0YWxscyAoL1BpcGVzKScpO3RoaXMuYWRkQXJpdGhDb3VudGVyKCdtYWxpX2h3Y19BUklUSF9GUkFHX0RFUEVORCcsJ0ZyYWcgZGVwIGNoZWNrIGZhaWx1cmVzICgvUGlwZXMpJyk7dGhpcy5hZGRMU0NvdW50ZXIoJ21hbGlfaHdjX0xTX1dPUkRTJywnSW5zdHJ1Y3Rpb24gV29yZHMgQ29tcGxldGVkJyk7dGhpcy5hZGRMU0NvdW50ZXIoJ21hbGlfaHdjX0xTX0lTU1VFUycsJ0Z1bGwgUGlwZWxpbmUgSXNzdWVzJyk7dGhpcy5hZGRMU0NvdW50ZXIoJ21hbGlfaHdjX0xTX1JFU1RBUlRTJywnUmVzdGFydHMgKHVucGFpcmFibGUgaW5zdHMpJyk7dGhpcy5hZGRMU0NvdW50ZXIoJ21hbGlfaHdjX0xTX1JFSVNTVUVTX01JU1MnLCdQaXBlbGluZSByZWlzc3VlIChjYWNoZSBtaXNzL3VUTEIpJyk7dGhpcy5hZGRMU0NvdW50ZXIoJ21hbGlfaHdjX0xTX1JFSVNTVUVTX1ZEJywnUGlwZWxpbmUgcmVpc3N1ZSAodmFyeWluZyBkYXRhKScpO3RoaXMuYWRkTFNDb3VudGVyKCdtYWxpX2h3Y19MU19SRUlTU1VFX0FUVFJJQl9NSVNTJywnUGlwZWxpbmUgcmVpc3N1ZSAoYXR0cmlidXRlIGNhY2hlIG1pc3MpJyk7dGhpcy5hZGRMU0NvdW50ZXIoJ21hbGlfaHdjX0xTX1JFSVNTVUVfTk9fV0InLCdXcml0ZWJhY2sgbm90IHVzZWQnKTt0aGlzLmFkZFRleENvdW50ZXIoJ21hbGlfaHdjX1RFWF9XT1JEUycsJ1dvcmRzJyk7dGhpcy5hZGRUZXhDb3VudGVyKCdtYWxpX2h3Y19URVhfQlVCQkxFUycsJ0J1YmJsZXMnKTt0aGlzLmFkZFRleENvdW50ZXIoJ21hbGlfaHdjX1RFWF9XT1JEU19MMCcsJ1dvcmRzIEwwJyk7dGhpcy5hZGRUZXhDb3VudGVyKCdtYWxpX2h3Y19URVhfV09SRFNfREVTQycsJ1dvcmRzIERlc2MnKTt0aGlzLmFkZFRleENvdW50ZXIoJ21hbGlfaHdjX1RFWF9USFJFQURTJywnVGhyZWFkcycpO3RoaXMuYWRkVGV4Q291bnRlcignbWFsaV9od2NfVEVYX1JFQ0lSQ19GTUlTUycsJ1JlY2lyYyBkdWUgdG8gRnVsbCBNaXNzJyk7dGhpcy5hZGRUZXhDb3VudGVyKCdtYWxpX2h3Y19URVhfUkVDSVJDX0RFU0MnLCdSZWNpcmMgZHVlIHRvIERlc2MgTWlzcycpO3RoaXMuYWRkVGV4Q291bnRlcignbWFsaV9od2NfVEVYX1JFQ0lSQ19NVUxUSScsJ1JlY2lyYyBkdWUgdG8gTXVsdGlwYXNzJyk7dGhpcy5hZGRUZXhDb3VudGVyKCdtYWxpX2h3Y19URVhfUkVDSVJDX1BNSVNTJywnUmVjaXJjIGR1ZSB0byBQYXJ0aWFsIENhY2hlIE1pc3MnKTt0aGlzLmFkZFRleENvdW50ZXIoJ21hbGlfaHdjX1RFWF9SRUNJUkNfQ09ORicsJ1JlY2lyYyBkdWUgdG8gQ2FjaGUgQ29uZmxpY3QnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19SRUFEX0hJVFMnLCdSZWFkIEhpdHMnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19SRUFEX01JU1NFUycsJ1JlYWQgTWlzc2VzJyk7dGhpcy5hZGRMU0NDb3VudGVyKCdtYWxpX2h3Y19MU0NfV1JJVEVfSElUUycsJ1dyaXRlIEhpdHMnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19XUklURV9NSVNTRVMnLCdXcml0ZSBNaXNzZXMnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19BVE9NSUNfSElUUycsJ0F0b21pYyBIaXRzJyk7dGhpcy5hZGRMU0NDb3VudGVyKCdtYWxpX2h3Y19MU0NfQVRPTUlDX01JU1NFUycsJ0F0b21pYyBNaXNzZXMnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19MSU5FX0ZFVENIRVMnLCdMaW5lIEZldGNoZXMnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19ESVJUWV9MSU5FJywnRGlydHkgTGluZXMnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19TTk9PUFMnLCdTbm9vcHMnKTt0aGlzLmFkZEFYSUNvdW50ZXIoJ21hbGlfaHdjX0FYSV9UTEJfU1RBTEwnLCdBZGRyZXNzIGNoYW5uZWwgc3RhbGwnKTt0aGlzLmFkZEFYSUNvdW50ZXIoJ21hbGlfaHdjX0FYSV9UTEJfTUlTUycsJ0NhY2hlIE1pc3MnKTt0aGlzLmFkZEFYSUNvdW50ZXIoJ21hbGlfaHdjX0FYSV9UTEJfVFJBTlNBQ1RJT04nLCdUcmFuc2FjdGlvbnMnKTt0aGlzLmFkZEFYSUNvdW50ZXIoJ21hbGlfaHdjX0xTX1RMQl9NSVNTJywnTFMgQ2FjaGUgTWlzcycpO3RoaXMuYWRkQVhJQ291bnRlcignbWFsaV9od2NfTFNfVExCX0hJVCcsJ0xTIENhY2hlIEhpdCcpO3RoaXMuYWRkQVhJQ291bnRlcignbWFsaV9od2NfQVhJX0JFQVRTX1JFQUQnLCdSZWFkIEJlYXRzJyk7dGhpcy5hZGRBWElDb3VudGVyKCdtYWxpX2h3Y19BWElfQkVBVFNfV1JJVEUnLCdXcml0ZSBCZWF0cycpO3RoaXMuYWRkTU1VQ291bnRlcignbWFsaV9od2NfTU1VX1RBQkxFX1dBTEsnLCdQYWdlIFRhYmxlIFdhbGtzJyk7dGhpcy5hZGRNTVVDb3VudGVyKCdtYWxpX2h3Y19NTVVfUkVQTEFZX01JU1MnLCdDYWNoZSBNaXNzIGZyb20gUmVwbGF5IEJ1ZmZlcicpO3RoaXMuYWRkTU1VQ291bnRlcignbWFsaV9od2NfTU1VX1JFUExBWV9GVUxMJywnUmVwbGF5IEJ1ZmZlciBGdWxsJyk7dGhpcy5hZGRNTVVDb3VudGVyKCdtYWxpX2h3Y19NTVVfTkVXX01JU1MnLCdDYWNoZSBNaXNzIG9uIE5ldyBSZXF1ZXN0Jyk7dGhpcy5hZGRNTVVDb3VudGVyKCdtYWxpX2h3Y19NTVVfSElUJywnQ2FjaGUgSGl0Jyk7dGhpcy5hZGRNTVVDeWNsZXMoJ21hbGlfaHdjX1VUTEJfU1RBTEwnLCdVVExCIFN0YWxsZWQnKTt0aGlzLmFkZE1NVUN5Y2xlcygnbWFsaV9od2NfVVRMQl9SRVBMQVlfTUlTUycsJ1VUTEIgUmVwbGF5IE1pc3MnKTt0aGlzLmFkZE1NVUN5Y2xlcygnbWFsaV9od2NfVVRMQl9SRVBMQVlfRlVMTCcsJ1VUTEIgUmVwbGF5IEZ1bGwnKTt0aGlzLmFkZE1NVUN5Y2xlcygnbWFsaV9od2NfVVRMQl9ORVdfTUlTUycsJ1VUTEIgTmV3IE1pc3MnKTt0aGlzLmFkZE1NVUN5Y2xlcygnbWFsaV9od2NfVVRMQl9ISVQnLCdVVExCIEhpdCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9SRUFEX0JFQVRTJywnUmVhZCBCZWF0cycpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9XUklURV9CRUFUUycsJ1dyaXRlIEJlYXRzJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0FOWV9MT09LVVAnLCdBbnkgTG9va3VwJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX1JFQURfTE9PS1VQJywnUmVhZCBMb29rdXAnKTt0aGlzLmFkZEwyQ291bnRlcignbWFsaV9od2NfTDJfU1JFQURfTE9PS1VQJywnU2hhcmVhYmxlIFJlYWQgTG9va3VwJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX1JFQURfUkVQTEFZJywnUmVhZCBSZXBsYXllZCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9SRUFEX1NOT09QJywnUmVhZCBTbm9vcCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9SRUFEX0hJVCcsJ1JlYWQgQ2FjaGUgSGl0Jyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0NMRUFOX01JU1MnLCdDbGVhblVuaXF1ZSBNaXNzJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX1dSSVRFX0xPT0tVUCcsJ1dyaXRlIExvb2t1cCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9TV1JJVEVfTE9PS1VQJywnU2hhcmVhYmxlIFdyaXRlIExvb2t1cCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9XUklURV9SRVBMQVknLCdXcml0ZSBSZXBsYXllZCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9XUklURV9TTk9PUCcsJ1dyaXRlIFNub29wJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX1dSSVRFX0hJVCcsJ1dyaXRlIENhY2hlIEhpdCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfUkVBRF9GVUxMJywnRXh0UkQgd2l0aCBCSVUgRnVsbCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfUkVBRF9IQUxGJywnRXh0UkQgd2l0aCBCSVUgPjEvMiBGdWxsJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0VYVF9XUklURV9GVUxMJywnRXh0V1Igd2l0aCBCSVUgRnVsbCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfV1JJVEVfSEFMRicsJ0V4dFdSIHdpdGggQklVID4xLzIgRnVsbCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfUkVBRCcsJ0V4dGVybmFsIFJlYWQgKEV4dFJEKScpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfUkVBRF9MSU5FJywnRXh0UkQgKGxpbmVmaWxsKScpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfV1JJVEUnLCdFeHRlcm5hbCBXcml0ZSAoRXh0V1IpJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0VYVF9XUklURV9MSU5FJywnRXh0V1IgKGxpbmVmaWxsKScpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfV1JJVEVfU01BTEwnLCdFeHRXUiAoYnVyc3Qgc2l6ZSA8NjRCKScpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfQkFSUklFUicsJ0V4dGVybmFsIEJhcnJpZXInKTt0aGlzLmFkZEwyQ291bnRlcignbWFsaV9od2NfTDJfRVhUX0FSX1NUQUxMJywnQWRkcmVzcyBSZWFkIHN0YWxscycpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfUl9CVUZfRlVMTCcsJ1Jlc3BvbnNlIEJ1ZmZlciBmdWxsIHN0YWxscycpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfUkRfQlVGX0ZVTEwnLCdSZWFkIERhdGEgQnVmZmVyIGZ1bGwgc3RhbGxzJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0VYVF9SX1JBVycsJ1JBVyBoYXphcmQgc3RhbGxzJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0VYVF9XX1NUQUxMJywnV3JpdGUgRGF0YSBzdGFsbHMnKTt0aGlzLmFkZEwyQ291bnRlcignbWFsaV9od2NfTDJfRVhUX1dfQlVGX0ZVTEwnLCdXcml0ZSBEYXRhIEJ1ZmZlciBmdWxsJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0VYVF9SX1dfSEFaQVJEJywnV0FXIG9yIFdBUiBoYXphcmQgc3RhbGxzJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX1RBR19IQVpBUkQnLCdUYWcgaGF6YXJkIHJlcGxheXMnKTt0aGlzLmFkZEwyQ3ljbGVzKCdtYWxpX2h3Y19MMl9TTk9PUF9GVUxMJywnU25vb3AgYnVmZmVyIGZ1bGwnKTt0aGlzLmFkZEwyQ3ljbGVzKCdtYWxpX2h3Y19MMl9SRVBMQVlfRlVMTCcsJ1JlcGxheSBidWZmZXIgZnVsbCcpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd0cmFjaW5nX21hcmtfd3JpdGU6bWFsaV9kcml2ZXInLE1hbGlQYXJzZXIucHJvdG90eXBlLm1hbGlEREtFdmVudC5iaW5kKHRoaXMpKTt0aGlzLm1vZGVsXz1pbXBvcnRlci5tb2RlbF87fQotTWFsaVBhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLG1hbGlEREtPcGVuU2xpY2UocGlkLHRpZCx0cyxmdW5jLGJsb2NraW5mbyl7Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhwaWQpLmdldE9yQ3JlYXRlVGhyZWFkKHRpZCk7Y29uc3QgZnVuY0FyZ3M9L14oW1x3XGRfXSopKD86XChcKSk/Oj9ccyooLiopJC8uZXhlYyhmdW5jKTt0aHJlYWQuc2xpY2VHcm91cC5iZWdpblNsaWNlKCdncHUtZHJpdmVyJyxmdW5jQXJnc1sxXSx0cyx7J2FyZ3MnOmZ1bmNBcmdzWzJdLGJsb2NraW5mb30pO30sbWFsaURES0Nsb3NlU2xpY2UocGlkLHRpZCx0cyxhcmdzLGJsb2NraW5mbyl7Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhwaWQpLmdldE9yQ3JlYXRlVGhyZWFkKHRpZCk7aWYoIXRocmVhZC5zbGljZUdyb3VwLm9wZW5TbGljZUNvdW50KXtyZXR1cm47fQotdGhyZWFkLnNsaWNlR3JvdXAuZW5kU2xpY2UodHMpO30sYXV0b0RldGVjdExpbmVSRShsaW5lKXtjb25zdCBsaW5lUkVXaXRoVGhyZWFkPS9eXHMqXCgoW1x3XC1dKilcKVxzKihcdyspOlxzKihbXHdcXFwvXC5cLV0qQFxkKik6P1xzKiguKikkLztpZihsaW5lUkVXaXRoVGhyZWFkLnRlc3QobGluZSkpe3JldHVybiBsaW5lUkVXaXRoVGhyZWFkO30KLWNvbnN0IGxpbmVSRU5vVGhyZWFkPS9ecyooKShcdyspOlxzKihbXHdcXFwvLlwtXSopOj9ccyooLiopJC87aWYobGluZVJFTm9UaHJlYWQudGVzdChsaW5lKSl7cmV0dXJuIGxpbmVSRU5vVGhyZWFkO30KLXJldHVybiBudWxsO30sbGluZVJFOm51bGwsbWFsaURES0V2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7aWYodGhpcy5saW5lUkU9PT1udWxsKXt0aGlzLmxpbmVSRT10aGlzLmF1dG9EZXRlY3RMaW5lUkUoZXZlbnRCYXNlLmRldGFpbHMpO2lmKHRoaXMubGluZVJFPT09bnVsbClyZXR1cm4gZmFsc2U7fQotY29uc3QgbWFsaUV2ZW50PXRoaXMubGluZVJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2NvbnN0IHRpZD0obWFsaUV2ZW50WzFdPT09Jyc/J21hbGknOm1hbGlFdmVudFsxXSk7c3dpdGNoKG1hbGlFdmVudFsyXSl7Y2FzZSdjcm9zX3RyYWNlX3ByaW50X2VudGVyJzp0aGlzLm1hbGlEREtPcGVuU2xpY2UocGlkLHRpZCx0cyxtYWxpRXZlbnRbNF0sbWFsaUV2ZW50WzNdKTticmVhaztjYXNlJ2Nyb3NfdHJhY2VfcHJpbnRfZXhpdCc6dGhpcy5tYWxpRERLQ2xvc2VTbGljZShwaWQsdGlkLHRzLFtdLG1hbGlFdmVudFszXSk7fQotcmV0dXJuIHRydWU7fSxkdmZzU2FtcGxlKGNvdW50ZXJOYW1lLHNlcmllc05hbWUsdHMscyl7Y29uc3QgdmFsdWU9cGFyc2VJbnQocyk7Y29uc3QgY291bnRlcj10aGlzLm1vZGVsXy5rZXJuZWwuZ2V0T3JDcmVhdGVDb3VudGVyKCdEVkZTJyxjb3VudGVyTmFtZSk7aWYoY291bnRlci5udW1TZXJpZXM9PT0wKXtjb3VudGVyLmFkZFNlcmllcyhuZXcgdHIubW9kZWwuQ291bnRlclNlcmllcyhzZXJpZXNOYW1lLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhjb3VudGVyLm5hbWUpKSk7fQotY291bnRlci5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3Nlcmllcy5hZGRDb3VudGVyU2FtcGxlKHRzLHZhbHVlKTt9KTt9LGR2ZnNFdmVudEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L3V0aWxpemF0aW9uPShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO3RoaXMuZHZmc1NhbXBsZSgnRFZGUyBVdGlsaXphdGlvbicsJ3V0aWxpemF0aW9uJyx0cyxldmVudFsxXSk7cmV0dXJuIHRydWU7fSxkdmZzU2V0Q2xvY2tFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9mcmVxdWVuY3k9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7dGhpcy5kdmZzU2FtcGxlKCdEVkZTIEZyZXF1ZW5jeScsJ2ZyZXF1ZW5jeScsdHMsZXZlbnRbMV0pO3JldHVybiB0cnVlO30sZHZmc1NldFZvbHRhZ2VFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS92b2x0YWdlPShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO3RoaXMuZHZmc1NhbXBsZSgnRFZGUyBWb2x0YWdlJywndm9sdGFnZScsdHMsZXZlbnRbMV0pO3JldHVybiB0cnVlO30saHdjU2FtcGxlKGNhdCxjb3VudGVyTmFtZSxzZXJpZXNOYW1lLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L3ZhbD0oXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCB2YWx1ZT1wYXJzZUludChldmVudFsxXSk7Y29uc3QgY291bnRlcj10aGlzLm1vZGVsXy5rZXJuZWwuZ2V0T3JDcmVhdGVDb3VudGVyKGNhdCxjb3VudGVyTmFtZSk7aWYoY291bnRlci5udW1TZXJpZXM9PT0wKXtjb3VudGVyLmFkZFNlcmllcyhuZXcgdHIubW9kZWwuQ291bnRlclNlcmllcyhzZXJpZXNOYW1lLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhjb3VudGVyLm5hbWUpKSk7fQotY291bnRlci5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3Nlcmllcy5hZGRDb3VudGVyU2FtcGxlKHRzLHZhbHVlKTt9KTtyZXR1cm4gdHJ1ZTt9LGptU2FtcGxlKGN0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmh3Y1NhbXBsZSgnbWFsaTpqbScsJ0pNOiAnK2N0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2UpO30sYWRkSk1Db3VudGVyKGh3Y0V2ZW50TmFtZSxod2NUaXRsZSl7ZnVuY3Rpb24gaGFuZGxlcihldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmptU2FtcGxlKGh3Y1RpdGxlLCdjb3VudCcsdHMsZXZlbnRCYXNlKTt9Ci10aGlzLmltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGh3Y0V2ZW50TmFtZSxoYW5kbGVyLmJpbmQodGhpcykpO30sYWRkSk1DeWNsZXMoaHdjRXZlbnROYW1lLGh3Y1RpdGxlKXtmdW5jdGlvbiBoYW5kbGVyKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMuam1TYW1wbGUoaHdjVGl0bGUsJ2N5Y2xlcycsdHMsZXZlbnRCYXNlKTt9Ci10aGlzLmltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGh3Y0V2ZW50TmFtZSxoYW5kbGVyLmJpbmQodGhpcykpO30sdGlsZXJTYW1wbGUoY3RyTmFtZSxzZXJpZXNOYW1lLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMuaHdjU2FtcGxlKCdtYWxpOnRpbGVyJywnVGlsZXI6ICcrY3RyTmFtZSxzZXJpZXNOYW1lLHRzLGV2ZW50QmFzZSk7fSxhZGRUaWxlckNvdW50ZXIoaHdjRXZlbnROYW1lLGh3Y1RpdGxlKXtmdW5jdGlvbiBoYW5kbGVyKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMudGlsZXJTYW1wbGUoaHdjVGl0bGUsJ2NvdW50Jyx0cyxldmVudEJhc2UpO30KLXRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxhZGRUaWxlckN5Y2xlcyhod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy50aWxlclNhbXBsZShod2NUaXRsZSwnY3ljbGVzJyx0cyxldmVudEJhc2UpO30KLXRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxmcmFnU2FtcGxlKGN0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmh3Y1NhbXBsZSgnbWFsaTpmcmFnbWVudCcsJ0ZyYWdtZW50OiAnK2N0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2UpO30sYWRkRnJhZ0NvdW50ZXIoaHdjRXZlbnROYW1lLGh3Y1RpdGxlKXtmdW5jdGlvbiBoYW5kbGVyKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMuZnJhZ1NhbXBsZShod2NUaXRsZSwnY291bnQnLHRzLGV2ZW50QmFzZSk7fQotdGhpcy5pbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihod2NFdmVudE5hbWUsaGFuZGxlci5iaW5kKHRoaXMpKTt9LGFkZEZyYWdDeWNsZXMoaHdjRXZlbnROYW1lLGh3Y1RpdGxlKXtmdW5jdGlvbiBoYW5kbGVyKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMuZnJhZ1NhbXBsZShod2NUaXRsZSwnY3ljbGVzJyx0cyxldmVudEJhc2UpO30KLXRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxjb21wdXRlU2FtcGxlKGN0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmh3Y1NhbXBsZSgnbWFsaTpjb21wdXRlJywnQ29tcHV0ZTogJytjdHJOYW1lLHNlcmllc05hbWUsdHMsZXZlbnRCYXNlKTt9LGFkZENvbXB1dGVDb3VudGVyKGh3Y0V2ZW50TmFtZSxod2NUaXRsZSl7ZnVuY3Rpb24gaGFuZGxlcihldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmNvbXB1dGVTYW1wbGUoaHdjVGl0bGUsJ2NvdW50Jyx0cyxldmVudEJhc2UpO30KLXRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxhZGRDb21wdXRlQ3ljbGVzKGh3Y0V2ZW50TmFtZSxod2NUaXRsZSl7ZnVuY3Rpb24gaGFuZGxlcihldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmNvbXB1dGVTYW1wbGUoaHdjVGl0bGUsJ2N5Y2xlcycsdHMsZXZlbnRCYXNlKTt9Ci10aGlzLmltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGh3Y0V2ZW50TmFtZSxoYW5kbGVyLmJpbmQodGhpcykpO30sYWRkVHJpcGlwZUN5Y2xlcyhod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy5od2NTYW1wbGUoJ21hbGk6c2hhZGVyJywnVHJpcGlwZTogJytod2NUaXRsZSwnY3ljbGVzJyx0cyxldmVudEJhc2UpO30KLXRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxhcml0aFNhbXBsZShjdHJOYW1lLHNlcmllc05hbWUsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy5od2NTYW1wbGUoJ21hbGk6YXJpdGgnLCdBcml0aDogJytjdHJOYW1lLHNlcmllc05hbWUsdHMsZXZlbnRCYXNlKTt9LGFkZEFyaXRoQ291bnRlcihod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy5hcml0aFNhbXBsZShod2NUaXRsZSwnY291bnQnLHRzLGV2ZW50QmFzZSk7fQotdGhpcy5pbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihod2NFdmVudE5hbWUsaGFuZGxlci5iaW5kKHRoaXMpKTt9LGFkZEFyaXRoQ3ljbGVzKGh3Y0V2ZW50TmFtZSxod2NUaXRsZSl7ZnVuY3Rpb24gaGFuZGxlcihldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmFyaXRoU2FtcGxlKGh3Y1RpdGxlLCdjeWNsZXMnLHRzLGV2ZW50QmFzZSk7fQotdGhpcy5pbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihod2NFdmVudE5hbWUsaGFuZGxlci5iaW5kKHRoaXMpKTt9LGFkZExTQ291bnRlcihod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy5od2NTYW1wbGUoJ21hbGk6bHMnLCdMUzogJytod2NUaXRsZSwnY291bnQnLHRzLGV2ZW50QmFzZSk7fQotdGhpcy5pbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihod2NFdmVudE5hbWUsaGFuZGxlci5iaW5kKHRoaXMpKTt9LHRleHR1cmVTYW1wbGUoY3RyTmFtZSxzZXJpZXNOYW1lLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMuaHdjU2FtcGxlKCdtYWxpOnRleHR1cmUnLCdUZXh0dXJlOiAnK2N0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2UpO30sYWRkVGV4Q291bnRlcihod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy50ZXh0dXJlU2FtcGxlKGh3Y1RpdGxlLCdjb3VudCcsdHMsZXZlbnRCYXNlKTt9Ci10aGlzLmltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGh3Y0V2ZW50TmFtZSxoYW5kbGVyLmJpbmQodGhpcykpO30sYWRkTFNDQ291bnRlcihod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy5od2NTYW1wbGUoJ21hbGk6bHNjJywnTFNDOiAnK2h3Y1RpdGxlLCdjb3VudCcsdHMsZXZlbnRCYXNlKTt9Ci10aGlzLmltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGh3Y0V2ZW50TmFtZSxoYW5kbGVyLmJpbmQodGhpcykpO30sYWRkQVhJQ291bnRlcihod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy5od2NTYW1wbGUoJ21hbGk6YXhpJywnQVhJOiAnK2h3Y1RpdGxlLCdjb3VudCcsdHMsZXZlbnRCYXNlKTt9Ci10aGlzLmltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGh3Y0V2ZW50TmFtZSxoYW5kbGVyLmJpbmQodGhpcykpO30sbW11U2FtcGxlKGN0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmh3Y1NhbXBsZSgnbWFsaTptbXUnLCdNTVU6ICcrY3RyTmFtZSxzZXJpZXNOYW1lLHRzLGV2ZW50QmFzZSk7fSxhZGRNTVVDb3VudGVyKGh3Y0V2ZW50TmFtZSxod2NUaXRsZSl7ZnVuY3Rpb24gaGFuZGxlcihldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLm1tdVNhbXBsZShod2NUaXRsZSwnY291bnQnLHRzLGV2ZW50QmFzZSk7fQotdGhpcy5pbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihod2NFdmVudE5hbWUsaGFuZGxlci5iaW5kKHRoaXMpKTt9LGFkZE1NVUN5Y2xlcyhod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy5tbXVTYW1wbGUoaHdjVGl0bGUsJ2N5Y2xlcycsdHMsZXZlbnRCYXNlKTt9Ci10aGlzLmltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGh3Y0V2ZW50TmFtZSxoYW5kbGVyLmJpbmQodGhpcykpO30sbDJTYW1wbGUoY3RyTmFtZSxzZXJpZXNOYW1lLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMuaHdjU2FtcGxlKCdtYWxpOmwyJywnTDI6ICcrY3RyTmFtZSxzZXJpZXNOYW1lLHRzLGV2ZW50QmFzZSk7fSxhZGRMMkNvdW50ZXIoaHdjRXZlbnROYW1lLGh3Y1RpdGxlKXtmdW5jdGlvbiBoYW5kbGVyKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMubDJTYW1wbGUoaHdjVGl0bGUsJ2NvdW50Jyx0cyxldmVudEJhc2UpO30KLXRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxhZGRMMkN5Y2xlcyhod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy5sMlNhbXBsZShod2NUaXRsZSwnY3ljbGVzJyx0cyxldmVudEJhc2UpO30KLXRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fX07UGFyc2VyLnJlZ2lzdGVyKE1hbGlQYXJzZXIpO3JldHVybntNYWxpUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gTWVtUmVjbGFpbVBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ21tX3Ztc2Nhbl9rc3dhcGRfd2FrZScsTWVtUmVjbGFpbVBhcnNlci5wcm90b3R5cGUua3N3YXBkV2FrZS5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignbW1fdm1zY2FuX2tzd2FwZF9zbGVlcCcsTWVtUmVjbGFpbVBhcnNlci5wcm90b3R5cGUua3N3YXBkU2xlZXAuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ21tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbicsTWVtUmVjbGFpbVBhcnNlci5wcm90b3R5cGUucmVjbGFpbUJlZ2luLmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kJyxNZW1SZWNsYWltUGFyc2VyLnByb3RvdHlwZS5yZWNsYWltRW5kLmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdsb3dtZW1vcnlfa2lsbCcsTWVtUmVjbGFpbVBhcnNlci5wcm90b3R5cGUubG93bWVtb3J5S2lsbC5iaW5kKHRoaXMpKTt9Ci1jb25zdCBrc3dhcGRXYWtlUkU9L25pZD0oXGQrKSBvcmRlcj0oXGQrKS87Y29uc3Qga3N3YXBkU2xlZXBSRT0vbmlkPShcZCspLztjb25zdCByZWNsYWltQmVnaW5SRT0vb3JkZXI9KFxkKykgbWF5X3dyaXRlcGFnZT1cZCsgZ2ZwX2ZsYWdzPSguKykvO2NvbnN0IHJlY2xhaW1FbmRSRT0vbnJfcmVjbGFpbWVkPShcZCspLztjb25zdCBsb3dtZW1vcnlSRT0vKFteIF0rKSBcKChcZCspXCksIHBhZ2UgY2FjaGUgKFxkKylrQiBcKGxpbWl0IChcZCspa0JcKSwgZnJlZSAoLT9cZCspS2IvO01lbVJlY2xhaW1QYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxrc3dhcGRXYWtlKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9a3N3YXBkV2FrZVJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdGdpZD1wYXJzZUludChldmVudEJhc2UudGdpZCk7Y29uc3QgbmlkPXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCBvcmRlcj1wYXJzZUludChldmVudFsyXSk7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlS2VybmVsVGhyZWFkKGV2ZW50QmFzZS50aHJlYWROYW1lLHRnaWQscGlkKTtpZihrdGhyZWFkLm9wZW5TbGljZVRTKXtpZihvcmRlcj5rdGhyZWFkLm9yZGVyKXtrdGhyZWFkLm9yZGVyPW9yZGVyO319ZWxzZXtrdGhyZWFkLm9wZW5TbGljZVRTPXRzO2t0aHJlYWQub3JkZXI9b3JkZXI7fQotcmV0dXJuIHRydWU7fSxrc3dhcGRTbGVlcChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IHRnaWQ9cGFyc2VJbnQoZXZlbnRCYXNlLnRnaWQpO2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZUtlcm5lbFRocmVhZChldmVudEJhc2UudGhyZWFkTmFtZSx0Z2lkLHBpZCk7aWYoa3RocmVhZC5vcGVuU2xpY2VUUyl7a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnbWVtcmVjbGFpbScsZXZlbnRCYXNlLnRocmVhZE5hbWUsa3RocmVhZC5vcGVuU2xpY2VUUyx0cy1rdGhyZWFkLm9wZW5TbGljZVRTLDAsMCx7b3JkZXI6a3RocmVhZC5vcmRlcn0pO30KLWt0aHJlYWQub3BlblNsaWNlVFM9dW5kZWZpbmVkO2t0aHJlYWQub3JkZXI9dW5kZWZpbmVkO3JldHVybiB0cnVlO30scmVjbGFpbUJlZ2luKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9cmVjbGFpbUJlZ2luUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBvcmRlcj1wYXJzZUludChldmVudFsxXSk7Y29uc3QgZ2ZwPWV2ZW50WzJdO2NvbnN0IHRnaWQ9cGFyc2VJbnQoZXZlbnRCYXNlLnRnaWQpO2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZUtlcm5lbFRocmVhZChldmVudEJhc2UudGhyZWFkTmFtZSx0Z2lkLHBpZCk7a3RocmVhZC5vcGVuU2xpY2VUUz10cztrdGhyZWFkLm9yZGVyPW9yZGVyO2t0aHJlYWQuZ2ZwPWdmcDtyZXR1cm4gdHJ1ZTt9LHJlY2xhaW1FbmQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1yZWNsYWltRW5kUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBuclJlY2xhaW1lZD1wYXJzZUludChldmVudFsxXSk7Y29uc3QgdGdpZD1wYXJzZUludChldmVudEJhc2UudGdpZCk7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlS2VybmVsVGhyZWFkKGV2ZW50QmFzZS50aHJlYWROYW1lLHRnaWQscGlkKTtpZihrdGhyZWFkLm9wZW5TbGljZVRTIT09dW5kZWZpbmVkKXtrdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hDb21wbGV0ZVNsaWNlKCdtZW1yZWNsYWltJywnZGlyZWN0IHJlY2xhaW0nLGt0aHJlYWQub3BlblNsaWNlVFMsdHMta3RocmVhZC5vcGVuU2xpY2VUUywwLDAse29yZGVyOmt0aHJlYWQub3JkZXIsZ2ZwOmt0aHJlYWQuZ2ZwLG5yX3JlY2xhaW1lZDpuclJlY2xhaW1lZH0pO30KLWt0aHJlYWQub3BlblNsaWNlVFM9dW5kZWZpbmVkO2t0aHJlYWQub3JkZXI9dW5kZWZpbmVkO2t0aHJlYWQuZ2ZwPXVuZGVmaW5lZDtyZXR1cm4gdHJ1ZTt9LGxvd21lbW9yeUtpbGwoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1sb3dtZW1vcnlSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IHRnaWQ9cGFyc2VJbnQoZXZlbnRCYXNlLnRnaWQpO2NvbnN0IGtpbGxlZE5hbWU9ZXZlbnRbMV07Y29uc3Qga2lsbGVkUGlkPXBhcnNlSW50KGV2ZW50WzJdKTtjb25zdCBjYWNoZT1wYXJzZUludChldmVudFszXSk7Y29uc3QgZnJlZT1wYXJzZUludChldmVudFs1XSk7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlS2VybmVsVGhyZWFkKGV2ZW50QmFzZS50aHJlYWROYW1lLHRnaWQscGlkKTtrdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hDb21wbGV0ZVNsaWNlKCdsb3dtZW1vcnknLCdsb3cgbWVtb3J5IGtpbGwnLHRzLDAsMCwwLHtraWxsZWRfbmFtZTpraWxsZWROYW1lLGtpbGxlZF9waWQ6a2lsbGVkUGlkLGNhY2hlLGZyZWV9KTtyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoTWVtUmVjbGFpbVBhcnNlcik7cmV0dXJue01lbVJlY2xhaW1QYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIFBvd2VyUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcigncG93ZXJfc3RhcnQnLFBvd2VyUGFyc2VyLnByb3RvdHlwZS5wb3dlclN0YXJ0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3Bvd2VyX2ZyZXF1ZW5jeScsUG93ZXJQYXJzZXIucHJvdG90eXBlLnBvd2VyRnJlcXVlbmN5RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2NwdV9mcmVxdWVuY3knLFBvd2VyUGFyc2VyLnByb3RvdHlwZS5jcHVGcmVxdWVuY3lFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignY3B1X2ZyZXF1ZW5jeV9saW1pdHMnLFBvd2VyUGFyc2VyLnByb3RvdHlwZS5jcHVGcmVxdWVuY3lMaW1pdHNFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignY3B1X2lkbGUnLFBvd2VyUGFyc2VyLnByb3RvdHlwZS5jcHVJZGxlRXZlbnQuYmluZCh0aGlzKSk7fQotUG93ZXJQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxjcHVTdGF0ZVNsaWNlKHRzLHRhcmdldENwdU51bWJlcixldmVudFR5cGUsY3B1U3RhdGUpe2NvbnN0IHRhcmdldENwdT10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlQ3B1KHRhcmdldENwdU51bWJlcik7aWYoZXZlbnRUeXBlIT09JzEnKXt0aGlzLmltcG9ydGVyLm1vZGVsLmltcG9ydFdhcm5pbmcoe3R5cGU6J3BhcnNlX2Vycm9yJyxtZXNzYWdlOidEb25cJ3QgdW5kZXJzdGFuZCBwb3dlcl9zdGFydCBldmVudHMgb2YgJysndHlwZSAnK2V2ZW50VHlwZX0pO3JldHVybjt9Ci1jb25zdCBwb3dlckNvdW50ZXI9dGFyZ2V0Q3B1LmdldE9yQ3JlYXRlQ291bnRlcignJywnQy1TdGF0ZScpO2lmKHBvd2VyQ291bnRlci5udW1TZXJpZXM9PT0wKXtwb3dlckNvdW50ZXIuYWRkU2VyaWVzKG5ldyB0ci5tb2RlbC5Db3VudGVyU2VyaWVzKCdzdGF0ZScsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHBvd2VyQ291bnRlci5uYW1lKycuJysnc3RhdGUnKSkpO30KLXBvd2VyQ291bnRlci5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3Nlcmllcy5hZGRDb3VudGVyU2FtcGxlKHRzLGNwdVN0YXRlKTt9KTt9LGNwdUlkbGVTbGljZSh0cyx0YXJnZXRDcHVOdW1iZXIsY3B1U3RhdGUpe2NvbnN0IHRhcmdldENwdT10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlQ3B1KHRhcmdldENwdU51bWJlcik7Y29uc3QgcG93ZXJDb3VudGVyPXRhcmdldENwdS5nZXRPckNyZWF0ZUNvdW50ZXIoJycsJ0MtU3RhdGUnKTtpZihwb3dlckNvdW50ZXIubnVtU2VyaWVzPT09MCl7cG93ZXJDb3VudGVyLmFkZFNlcmllcyhuZXcgdHIubW9kZWwuQ291bnRlclNlcmllcygnc3RhdGUnLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhwb3dlckNvdW50ZXIubmFtZSkpKTt9Ci1jb25zdCB2YWw9KGNwdVN0YXRlIT09NDI5NDk2NzI5NT9jcHVTdGF0ZSsxOjApO3Bvd2VyQ291bnRlci5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3Nlcmllcy5hZGRDb3VudGVyU2FtcGxlKHRzLHZhbCk7fSk7fSxjcHVGcmVxdWVuY3lTbGljZSh0cyx0YXJnZXRDcHVOdW1iZXIscG93ZXJTdGF0ZSl7Y29uc3QgdGFyZ2V0Q3B1PXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVDcHUodGFyZ2V0Q3B1TnVtYmVyKTtjb25zdCBwb3dlckNvdW50ZXI9dGFyZ2V0Q3B1LmdldE9yQ3JlYXRlQ291bnRlcignJywnQ2xvY2sgRnJlcXVlbmN5Jyk7aWYocG93ZXJDb3VudGVyLm51bVNlcmllcz09PTApe3Bvd2VyQ291bnRlci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXMoJ3N0YXRlJyxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcocG93ZXJDb3VudGVyLm5hbWUrJy4nKydzdGF0ZScpKSk7fQotcG93ZXJDb3VudGVyLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7c2VyaWVzLmFkZENvdW50ZXJTYW1wbGUodHMscG93ZXJTdGF0ZSk7fSk7fSxjcHVGcmVxdWVuY3lMaW1pdHNTbGljZSh0cyx0YXJnZXRDcHVOdW1iZXIsbWluRnJlcSxtYXhGcmVxKXtjb25zdCB0YXJnZXRDcHU9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZUNwdSh0YXJnZXRDcHVOdW1iZXIpO2NvbnN0IHBvd2VyQ291bnRlcj10YXJnZXRDcHUuZ2V0T3JDcmVhdGVDb3VudGVyKCcnLCdDbG9jayBGcmVxdWVuY3kgTGltaXRzJyk7aWYocG93ZXJDb3VudGVyLm51bVNlcmllcz09PTApe3Bvd2VyQ291bnRlci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXMoJ01pbiBGcmVxdWVuY3knLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhwb3dlckNvdW50ZXIubmFtZSsnLicrJ01pbiBGcmVxdWVuY3knKSkpO3Bvd2VyQ291bnRlci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXMoJ01heCBGcmVxdWVuY3knLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhwb3dlckNvdW50ZXIubmFtZSsnLicrJ01heCBGcmVxdWVuY3knKSkpO30KLXBvd2VyQ291bnRlci5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe2lmKHNlcmllcy5uYW1lPT09J01pbiBGcmVxdWVuY3knKXtzZXJpZXMuYWRkQ291bnRlclNhbXBsZSh0cyxtaW5GcmVxKTt9Ci1pZihzZXJpZXMubmFtZT09PSdNYXggRnJlcXVlbmN5Jyl7c2VyaWVzLmFkZENvdW50ZXJTYW1wbGUodHMsbWF4RnJlcSk7fX0pO30scG93ZXJTdGFydEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L3R5cGU9KFxkKykgc3RhdGU9KFxkKSBjcHVfaWQ9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdGFyZ2V0Q3B1TnVtYmVyPXBhcnNlSW50KGV2ZW50WzNdKTtjb25zdCBjcHVTdGF0ZT1wYXJzZUludChldmVudFsyXSk7dGhpcy5jcHVTdGF0ZVNsaWNlKHRzLHRhcmdldENwdU51bWJlcixldmVudFsxXSxjcHVTdGF0ZSk7cmV0dXJuIHRydWU7fSxwb3dlckZyZXF1ZW5jeUV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L3R5cGU9KFxkKykgc3RhdGU9KFxkKykgY3B1X2lkPShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IHRhcmdldENwdU51bWJlcj1wYXJzZUludChldmVudFszXSk7Y29uc3QgcG93ZXJTdGF0ZT1wYXJzZUludChldmVudFsyXSk7dGhpcy5jcHVGcmVxdWVuY3lTbGljZSh0cyx0YXJnZXRDcHVOdW1iZXIscG93ZXJTdGF0ZSk7cmV0dXJuIHRydWU7fSxjcHVGcmVxdWVuY3lFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9zdGF0ZT0oXGQrKSBjcHVfaWQ9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdGFyZ2V0Q3B1TnVtYmVyPXBhcnNlSW50KGV2ZW50WzJdKTtjb25zdCBwb3dlclN0YXRlPXBhcnNlSW50KGV2ZW50WzFdKTt0aGlzLmNwdUZyZXF1ZW5jeVNsaWNlKHRzLHRhcmdldENwdU51bWJlcixwb3dlclN0YXRlKTtyZXR1cm4gdHJ1ZTt9LGNwdUZyZXF1ZW5jeUxpbWl0c0V2ZW50KGV2ZW50TmFtZSxjcHUscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L21pbj0oXGQrKSBtYXg9KFxkKykgY3B1X2lkPShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IHRhcmdldENwdU51bWJlcj1wYXJzZUludChldmVudFszXSk7Y29uc3QgbWluRnJlcT1wYXJzZUludChldmVudFsxXSk7Y29uc3QgbWF4RnJlcT1wYXJzZUludChldmVudFsyXSk7dGhpcy5jcHVGcmVxdWVuY3lMaW1pdHNTbGljZSh0cyx0YXJnZXRDcHVOdW1iZXIsbWluRnJlcSxtYXhGcmVxKTtyZXR1cm4gdHJ1ZTt9LGNwdUlkbGVFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9zdGF0ZT0oXGQrKSBjcHVfaWQ9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdGFyZ2V0Q3B1TnVtYmVyPXBhcnNlSW50KGV2ZW50WzJdKTtjb25zdCBjcHVTdGF0ZT1wYXJzZUludChldmVudFsxXSk7dGhpcy5jcHVJZGxlU2xpY2UodHMsdGFyZ2V0Q3B1TnVtYmVyLGNwdVN0YXRlKTtyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoUG93ZXJQYXJzZXIpO3JldHVybntQb3dlclBhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5saW51eF9wZXJmJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gUmVndWxhdG9yUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcigncmVndWxhdG9yX2VuYWJsZScsUmVndWxhdG9yUGFyc2VyLnByb3RvdHlwZS5yZWd1bGF0b3JFbmFibGVFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcigncmVndWxhdG9yX2VuYWJsZV9kZWxheScsUmVndWxhdG9yUGFyc2VyLnByb3RvdHlwZS5yZWd1bGF0b3JFbmFibGVEZWxheUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdyZWd1bGF0b3JfZW5hYmxlX2NvbXBsZXRlJyxSZWd1bGF0b3JQYXJzZXIucHJvdG90eXBlLnJlZ3VsYXRvckVuYWJsZUNvbXBsZXRlRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3JlZ3VsYXRvcl9kaXNhYmxlJyxSZWd1bGF0b3JQYXJzZXIucHJvdG90eXBlLnJlZ3VsYXRvckRpc2FibGVFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcigncmVndWxhdG9yX2Rpc2FibGVfY29tcGxldGUnLFJlZ3VsYXRvclBhcnNlci5wcm90b3R5cGUucmVndWxhdG9yRGlzYWJsZUNvbXBsZXRlRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3JlZ3VsYXRvcl9zZXRfdm9sdGFnZScsUmVndWxhdG9yUGFyc2VyLnByb3RvdHlwZS5yZWd1bGF0b3JTZXRWb2x0YWdlRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3JlZ3VsYXRvcl9zZXRfdm9sdGFnZV9jb21wbGV0ZScsUmVndWxhdG9yUGFyc2VyLnByb3RvdHlwZS5yZWd1bGF0b3JTZXRWb2x0YWdlQ29tcGxldGVFdmVudC5iaW5kKHRoaXMpKTt0aGlzLm1vZGVsXz1pbXBvcnRlci5tb2RlbF87fQotY29uc3QgcmVndWxhdG9yRW5hYmxlUkU9L25hbWU9KC4rKS87Y29uc3QgcmVndWxhdG9yRGlzYWJsZVJFPS9uYW1lPSguKykvO2NvbnN0IHJlZ3VsYXRvclNldFZvbHRhZ2VDb21wbGV0ZVJFPS9uYW1lPShcUyspLCB2YWw9KFxkKykvO1JlZ3VsYXRvclBhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLGdldEN0cl8oY3RyTmFtZSx2YWx1ZU5hbWUpe2NvbnN0IGN0cj10aGlzLm1vZGVsXy5rZXJuZWwuZ2V0T3JDcmVhdGVDb3VudGVyKG51bGwsJ3ZyZWcgJytjdHJOYW1lKycgJyt2YWx1ZU5hbWUpO2lmKGN0ci5zZXJpZXNbMF09PT11bmRlZmluZWQpe2N0ci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXModmFsdWVOYW1lLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhjdHJOYW1lKycuJyt2YWx1ZU5hbWUpKSk7fQotcmV0dXJuIGN0cjt9LHJlZ3VsYXRvckVuYWJsZUV2ZW50KGV2ZW50TmFtZSxjcHVOdW0scGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9cmVndWxhdG9yRW5hYmxlUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBuYW1lPWV2ZW50WzFdO2NvbnN0IGN0cj10aGlzLmdldEN0cl8obmFtZSwnZW5hYmxlZCcpO2N0ci5zZXJpZXNbMF0uYWRkQ291bnRlclNhbXBsZSh0cywxKTtyZXR1cm4gdHJ1ZTt9LHJlZ3VsYXRvckVuYWJsZURlbGF5RXZlbnQoZXZlbnROYW1lLGNwdU51bSxwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdHJ1ZTt9LHJlZ3VsYXRvckVuYWJsZUNvbXBsZXRlRXZlbnQoZXZlbnROYW1lLGNwdU51bSxwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdHJ1ZTt9LHJlZ3VsYXRvckRpc2FibGVFdmVudChldmVudE5hbWUsY3B1TnVtLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PXJlZ3VsYXRvckRpc2FibGVSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IG5hbWU9ZXZlbnRbMV07Y29uc3QgY3RyPXRoaXMuZ2V0Q3RyXyhuYW1lLCdlbmFibGVkJyk7Y3RyLnNlcmllc1swXS5hZGRDb3VudGVyU2FtcGxlKHRzLDApO3JldHVybiB0cnVlO30scmVndWxhdG9yRGlzYWJsZUNvbXBsZXRlRXZlbnQoZXZlbnROYW1lLGNwdU51bSxwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdHJ1ZTt9LHJlZ3VsYXRvclNldFZvbHRhZ2VFdmVudChldmVudE5hbWUsY3B1TnVtLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0cnVlO30scmVndWxhdG9yU2V0Vm9sdGFnZUNvbXBsZXRlRXZlbnQoZXZlbnROYW1lLGNwdU51bSxwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1yZWd1bGF0b3JTZXRWb2x0YWdlQ29tcGxldGVSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IG5hbWU9ZXZlbnRbMV07Y29uc3Qgdm9sdGFnZT1wYXJzZUludChldmVudFsyXSk7Y29uc3QgY3RyPXRoaXMuZ2V0Q3RyXyhuYW1lLCd2b2x0YWdlJyk7Y3RyLnNlcmllc1swXS5hZGRDb3VudGVyU2FtcGxlKHRzLHZvbHRhZ2UpO3JldHVybiB0cnVlO319O1BhcnNlci5yZWdpc3RlcihSZWd1bGF0b3JQYXJzZXIpO3JldHVybntSZWd1bGF0b3JQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlcjtmdW5jdGlvbiBTY2hlZFBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3NjaGVkX3N3aXRjaCcsU2NoZWRQYXJzZXIucHJvdG90eXBlLnNjaGVkU3dpdGNoRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3NjaGVkX3dha2V1cCcsU2NoZWRQYXJzZXIucHJvdG90eXBlLnNjaGVkV2FrZXVwRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3NjaGVkX2Jsb2NrZWRfcmVhc29uJyxTY2hlZFBhcnNlci5wcm90b3R5cGUuc2NoZWRCbG9ja2VkRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3NjaGVkX2NwdV9ob3RwbHVnJyxTY2hlZFBhcnNlci5wcm90b3R5cGUuc2NoZWRDcHVIb3RwbHVnRXZlbnQuYmluZCh0aGlzKSk7fQotY29uc3QgVGVzdEV4cG9ydHM9e307Y29uc3Qgc2NoZWRTd2l0Y2hSRT1uZXcgUmVnRXhwKCdwcmV2X2NvbW09KC4rKSBwcmV2X3BpZD0oXFxkKykgcHJldl9wcmlvPShcXGQrKSAnKydwcmV2X3N0YXRlPShcXFNcXCs/fFxcU1xcfFxcUykgPT0+ICcrJ25leHRfY29tbT0oLispIG5leHRfcGlkPShcXGQrKSBuZXh0X3ByaW89KFxcZCspJyk7Y29uc3Qgc2NoZWRCbG9ja2VkUkU9bmV3IFJlZ0V4cCgncGlkPShcXGQrKSBpb3dhaXQ9KFxcZCkgY2FsbGVyPSguKyknKTtUZXN0RXhwb3J0cy5zY2hlZFN3aXRjaFJFPXNjaGVkU3dpdGNoUkU7Y29uc3Qgc2NoZWRXYWtldXBSRT0vY29tbT0oLispIHBpZD0oXGQrKSBwcmlvPShcZCspKD86IHN1Y2Nlc3M9XGQrKT8gdGFyZ2V0X2NwdT0oXGQrKS87VGVzdEV4cG9ydHMuc2NoZWRXYWtldXBSRT1zY2hlZFdha2V1cFJFO1NjaGVkUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsc2NoZWRTd2l0Y2hFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PXNjaGVkU3dpdGNoUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBwcmV2U3RhdGU9ZXZlbnRbNF07Y29uc3QgbmV4dENvbW09ZXZlbnRbNV07Y29uc3QgbmV4dFBpZD1wYXJzZUludChldmVudFs2XSk7Y29uc3QgbmV4dFByaW89cGFyc2VJbnQoZXZlbnRbN10pO2lmKGV2ZW50QmFzZS50Z2lkIT09dW5kZWZpbmVkKXtjb25zdCB0Z2lkPXBhcnNlSW50KGV2ZW50QmFzZS50Z2lkKTtjb25zdCBwcm9jZXNzPXRoaXMuaW1wb3J0ZXIubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2Vzcyh0Z2lkKTtpZighcHJvY2Vzcy5nZXRUaHJlYWQocGlkKSl7Y29uc3QgdGhyZWFkPXByb2Nlc3MuZ2V0T3JDcmVhdGVUaHJlYWQocGlkKTt0aHJlYWQubmFtZT1ldmVudEJhc2UudGhyZWFkTmFtZTt9fQotY29uc3QgbmV4dFRocmVhZD10aGlzLmltcG9ydGVyLnRocmVhZHNCeUxpbnV4UGlkW25leHRQaWRdO2xldCBuZXh0TmFtZTtpZihuZXh0VGhyZWFkKXtuZXh0TmFtZT1uZXh0VGhyZWFkLnVzZXJGcmllbmRseU5hbWU7fWVsc2V7bmV4dE5hbWU9bmV4dENvbW07fQotY29uc3QgY3B1PXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVDcHUoY3B1TnVtYmVyKTtjcHUuc3dpdGNoQWN0aXZlVGhyZWFkKHRzLHtzdGF0ZVdoZW5EZXNjaGVkdWxlZDpwcmV2U3RhdGV9LG5leHRQaWQsbmV4dE5hbWUse2NvbW06bmV4dENvbW0sdGlkOm5leHRQaWQscHJpbzpuZXh0UHJpb30pO3JldHVybiB0cnVlO30sc2NoZWRXYWtldXBFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PXNjaGVkV2FrZXVwUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBmcm9tUGlkPXBpZDtjb25zdCBjb21tPWV2ZW50WzFdO3BpZD1wYXJzZUludChldmVudFsyXSk7Y29uc3QgcHJpbz1wYXJzZUludChldmVudFszXSk7dGhpcy5pbXBvcnRlci5tYXJrUGlkUnVubmFibGUodHMscGlkLGNvbW0scHJpbyxmcm9tUGlkKTtyZXR1cm4gdHJ1ZTt9LHNjaGVkQ3B1SG90cGx1Z0V2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L2NwdSAoXGQrKSAoLispIGVycm9yPShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NwdU51bWJlcj1ldmVudFsxXTtjb25zdCBzdGF0ZT1ldmVudFsyXTtjb25zdCB0YXJnZXRDcHU9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZUNwdShjcHVOdW1iZXIpO2NvbnN0IHBvd2VyQ291bnRlcj10YXJnZXRDcHUuZ2V0T3JDcmVhdGVDb3VudGVyKCcnLCdDcHUgSG90cGx1ZycpO2lmKHBvd2VyQ291bnRlci5udW1TZXJpZXM9PT0wKXtwb3dlckNvdW50ZXIuYWRkU2VyaWVzKG5ldyB0ci5tb2RlbC5Db3VudGVyU2VyaWVzKCdTdGF0ZScsdHIuYi5Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcocG93ZXJDb3VudGVyLm5hbWUrJy4nKydTdGF0ZScpKSk7fQotcG93ZXJDb3VudGVyLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7aWYoc2VyaWVzLm5hbWU9PT0nU3RhdGUnKXtzZXJpZXMuYWRkQ291bnRlclNhbXBsZSh0cyxzdGF0ZS5sb2NhbGVDb21wYXJlKCdvZmZsaW5lJyk/MDoxKTt9fSk7cmV0dXJuIHRydWU7fSxzY2hlZEJsb2NrZWRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PXNjaGVkQmxvY2tlZFJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7cGlkPXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCBpb3dhaXQ9cGFyc2VJbnQoZXZlbnRbMl0pO2NvbnN0IGNhbGxlcj1ldmVudFszXTt0aGlzLmltcG9ydGVyLmFkZFBpZEJsb2NrZWRSZWFzb24odHMscGlkLGlvd2FpdCxjYWxsZXIpO3JldHVybiB0cnVlO319O1BhcnNlci5yZWdpc3RlcihTY2hlZFBhcnNlcik7cmV0dXJue1NjaGVkUGFyc2VyLF9TY2hlZFBhcnNlclRlc3RFeHBvcnRzOlRlc3RFeHBvcnRzfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIFN5bmNQYXJzZXIoaW1wb3J0ZXIpe1BhcnNlci5jYWxsKHRoaXMsaW1wb3J0ZXIpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdzeW5jX3RpbWVsaW5lJyxTeW5jUGFyc2VyLnByb3RvdHlwZS50aW1lbGluZUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdzeW5jX3dhaXQnLFN5bmNQYXJzZXIucHJvdG90eXBlLnN5bmNXYWl0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3N5bmNfcHQnLFN5bmNQYXJzZXIucHJvdG90eXBlLnN5bmNQdEV2ZW50LmJpbmQodGhpcykpO3RoaXMubW9kZWxfPWltcG9ydGVyLm1vZGVsXzt9Ci1jb25zdCBzeW5jVGltZWxpbmVSRT0vbmFtZT0oXFMrKSB2YWx1ZT0oXFMqKS87Y29uc3Qgc3luY1dhaXRSRT0vKFxTKykgbmFtZT0oXFMrKSBzdGF0ZT0oXGQrKS87Y29uc3Qgc3luY1B0UkU9L25hbWU9KFxTKykgdmFsdWU9KFxTKikvO1N5bmNQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSx0aW1lbGluZUV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9c3luY1RpbWVsaW5lUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCB0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZVBzZXVkb1RocmVhZChldmVudFsxXSk7aWYodGhyZWFkLmxhc3RBY3RpdmVUcyE9PXVuZGVmaW5lZCl7Y29uc3QgZHVyYXRpb249dHMtdGhyZWFkLmxhc3RBY3RpdmVUcztsZXQgdmFsdWU9dGhyZWFkLmxhc3RBY3RpdmVWYWx1ZTtpZih2YWx1ZT09PXVuZGVmaW5lZCl2YWx1ZT0nICc7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLHZhbHVlLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyh2YWx1ZSksdGhyZWFkLmxhc3RBY3RpdmVUcyx7fSxkdXJhdGlvbik7dGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fQotdGhyZWFkLmxhc3RBY3RpdmVUcz10czt0aHJlYWQubGFzdEFjdGl2ZVZhbHVlPWV2ZW50WzJdO3JldHVybiB0cnVlO30sc3luY1dhaXRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PXN5bmNXYWl0UkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtpZihldmVudEJhc2UudGdpZD09PXVuZGVmaW5lZCl7cmV0dXJuIGZhbHNlO30KLWNvbnN0IHRnaWQ9cGFyc2VJbnQoZXZlbnRCYXNlLnRnaWQpO2NvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3ModGdpZCkuZ2V0T3JDcmVhdGVUaHJlYWQocGlkKTt0aHJlYWQubmFtZT1ldmVudEJhc2UudGhyZWFkTmFtZTtjb25zdCBzbGljZXM9dGhyZWFkLmtlcm5lbFNsaWNlR3JvdXA7aWYoIXNsaWNlcy5pc1RpbWVzdGFtcFZhbGlkRm9yQmVnaW5PckVuZCh0cykpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J3BhcnNlX2Vycm9yJyxtZXNzYWdlOidUaW1lc3RhbXBzIGFyZSBtb3ZpbmcgYmFja3dhcmQuJ30pO3JldHVybiBmYWxzZTt9Ci1jb25zdCBuYW1lPSdmZW5jZV93YWl0KCInK2V2ZW50WzJdKyciKSc7aWYoZXZlbnRbMV09PT0nYmVnaW4nKXtjb25zdCBzbGljZT1zbGljZXMuYmVnaW5TbGljZShudWxsLG5hbWUsdHMseydTdGFydCBzdGF0ZSc6ZXZlbnRbM119KTt9ZWxzZSBpZihldmVudFsxXT09PSdlbmQnKXtpZihzbGljZXMub3BlblNsaWNlQ291bnQ+MCl7c2xpY2VzLmVuZFNsaWNlKHRzKTt9fWVsc2V7cmV0dXJuIGZhbHNlO30KLXJldHVybiB0cnVlO30sc3luY1B0RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4hIXN5bmNQdFJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO319O1BhcnNlci5yZWdpc3RlcihTeW5jUGFyc2VyKTtyZXR1cm57U3luY1BhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5saW51eF9wZXJmJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gV29ya3F1ZXVlUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignd29ya3F1ZXVlX2V4ZWN1dGVfc3RhcnQnLFdvcmtxdWV1ZVBhcnNlci5wcm90b3R5cGUuZXhlY3V0ZVN0YXJ0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3dvcmtxdWV1ZV9leGVjdXRlX2VuZCcsV29ya3F1ZXVlUGFyc2VyLnByb3RvdHlwZS5leGVjdXRlRW5kRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3dvcmtxdWV1ZV9xdWV1ZV93b3JrJyxXb3JrcXVldWVQYXJzZXIucHJvdG90eXBlLmV4ZWN1dGVRdWV1ZVdvcmsuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3dvcmtxdWV1ZV9hY3RpdmF0ZV93b3JrJyxXb3JrcXVldWVQYXJzZXIucHJvdG90eXBlLmV4ZWN1dGVBY3RpdmF0ZVdvcmsuYmluZCh0aGlzKSk7fQotY29uc3Qgd29ya3F1ZXVlRXhlY3V0ZVN0YXJ0UkU9L3dvcmsgc3RydWN0ICguKyk6IGZ1bmN0aW9uIChcUyspLztjb25zdCB3b3JrcXVldWVFeGVjdXRlRW5kUkU9L3dvcmsgc3RydWN0ICguKykvO1dvcmtxdWV1ZVBhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLGV4ZWN1dGVTdGFydEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9d29ya3F1ZXVlRXhlY3V0ZVN0YXJ0UkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVLZXJuZWxUaHJlYWQoZXZlbnRCYXNlLnRocmVhZE5hbWUscGlkLHBpZCk7a3RocmVhZC5vcGVuU2xpY2VUUz10cztrdGhyZWFkLm9wZW5TbGljZT1ldmVudFsyXTtyZXR1cm4gdHJ1ZTt9LGV4ZWN1dGVFbmRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PXdvcmtxdWV1ZUV4ZWN1dGVFbmRSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZUtlcm5lbFRocmVhZChldmVudEJhc2UudGhyZWFkTmFtZSxwaWQscGlkKTtpZihrdGhyZWFkLm9wZW5TbGljZSl7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLGt0aHJlYWQub3BlblNsaWNlLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhrdGhyZWFkLm9wZW5TbGljZSksa3RocmVhZC5vcGVuU2xpY2VUUyx7fSx0cy1rdGhyZWFkLm9wZW5TbGljZVRTKTtrdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fQota3RocmVhZC5vcGVuU2xpY2U9dW5kZWZpbmVkO3JldHVybiB0cnVlO30sZXhlY3V0ZVF1ZXVlV29yayhldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0cnVlO30sZXhlY3V0ZUFjdGl2YXRlV29yayhldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0cnVlO319O1BhcnNlci5yZWdpc3RlcihXb3JrcXVldWVQYXJzZXIpO3JldHVybntXb3JrcXVldWVQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBNT05PVE9OSUNfVE9fRlRSQUNFX0dMT0JBTF9TWU5DX0lEPSdsaW51eF9jbG9ja19tb25vdG9uaWNfdG9fZnRyYWNlX2dsb2JhbCc7Y29uc3QgSU1QT1JUX1BSSU9SSVRZPTI7ZnVuY3Rpb24gRlRyYWNlSW1wb3J0ZXIobW9kZWwsZXZlbnRzKXt0aGlzLmltcG9ydFByaW9yaXR5PUlNUE9SVF9QUklPUklUWTt0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLmV2ZW50c189ZXZlbnRzO3RoaXMud2FrZXVwc189W107dGhpcy5ibG9ja2VkUmVhc29uc189W107dGhpcy5rZXJuZWxUaHJlYWRTdGF0ZXNfPXt9O3RoaXMuYnVpbGRNYXBGcm9tTGludXhQaWRzVG9UaHJlYWRzXygpO3RoaXMubGluZXNfPVtdO3RoaXMucHNldWRvVGhyZWFkQ291bnRlcj0xO3RoaXMucGFyc2Vyc189W107dGhpcy5ldmVudEhhbmRsZXJzXz17fTt0aGlzLmhhdmVDbG9ja1N5bmNlZE1vbm90b25pY1RvR2xvYmFsXz1mYWxzZTt0aGlzLmNsb2NrRG9tYWluSWRfPXRyLm1vZGVsLkNsb2NrRG9tYWluSWQuTElOVVhfRlRSQUNFX0dMT0JBTDt9Ci1jb25zdCBUZXN0RXhwb3J0cz17fTtjb25zdCBsaW5lUkVXaXRoVEdJRD1uZXcgUmVnRXhwKCdeXFxzKiguKyktKFxcZCspXFxzK1xcKFxccyooXFxkK3wtKylcXClcXHNcXFsoXFxkKylcXF0nKydcXHMrW2RYLl1bTm5wLl1bSGhzLl1bMC05YS1mLl0nKydcXHMrKFxcZCtcXC5cXGQrKTpcXHMrKFxcUyspOlxccyguKikkJyk7Y29uc3QgbGluZVBhcnNlcldpdGhUR0lEPWZ1bmN0aW9uKGxpbmUpe2NvbnN0IGdyb3Vwcz1saW5lUkVXaXRoVEdJRC5leGVjKGxpbmUpO2lmKCFncm91cHMpcmV0dXJuIGdyb3VwcztsZXQgdGdpZD1ncm91cHNbM107aWYodGdpZFswXT09PSctJyl0Z2lkPXVuZGVmaW5lZDtyZXR1cm57dGhyZWFkTmFtZTpncm91cHNbMV0scGlkOmdyb3Vwc1syXSx0Z2lkLGNwdU51bWJlcjpncm91cHNbNF0sdGltZXN0YW1wOmdyb3Vwc1s1XSxldmVudE5hbWU6Z3JvdXBzWzZdLGRldGFpbHM6Z3JvdXBzWzddfTt9O1Rlc3RFeHBvcnRzLmxpbmVQYXJzZXJXaXRoVEdJRD1saW5lUGFyc2VyV2l0aFRHSUQ7Y29uc3QgbGluZVJFV2l0aElSUUluZm89bmV3IFJlZ0V4cCgnXlxccyooLispLShcXGQrKVxccytcXFsoXFxkKylcXF0nKydcXHMrW2RYLl1bTm5wLl1bSGhzLl1bMC05YS1mLl0nKydcXHMrKFxcZCtcXC5cXGQrKTpcXHMrKFxcUyspOlxccyguKikkJyk7Y29uc3QgbGluZVBhcnNlcldpdGhJUlFJbmZvPWZ1bmN0aW9uKGxpbmUpe2NvbnN0IGdyb3Vwcz1saW5lUkVXaXRoSVJRSW5mby5leGVjKGxpbmUpO2lmKCFncm91cHMpcmV0dXJuIGdyb3VwcztyZXR1cm57dGhyZWFkTmFtZTpncm91cHNbMV0scGlkOmdyb3Vwc1syXSxjcHVOdW1iZXI6Z3JvdXBzWzNdLHRpbWVzdGFtcDpncm91cHNbNF0sZXZlbnROYW1lOmdyb3Vwc1s1XSxkZXRhaWxzOmdyb3Vwc1s2XX07fTtUZXN0RXhwb3J0cy5saW5lUGFyc2VyV2l0aElSUUluZm89bGluZVBhcnNlcldpdGhJUlFJbmZvO2NvbnN0IGxpbmVSRVdpdGhMZWdhY3lGbXQ9L15ccyooLispLShcZCspXHMrXFsoXGQrKVxdXHMqKFxkK1wuXGQrKTpccysoXFMrKTpccyguKikkLztjb25zdCBsaW5lUGFyc2VyV2l0aExlZ2FjeUZtdD1mdW5jdGlvbihsaW5lKXtjb25zdCBncm91cHM9bGluZVJFV2l0aExlZ2FjeUZtdC5leGVjKGxpbmUpO2lmKCFncm91cHMpe3JldHVybiBncm91cHM7fQotcmV0dXJue3RocmVhZE5hbWU6Z3JvdXBzWzFdLHBpZDpncm91cHNbMl0sY3B1TnVtYmVyOmdyb3Vwc1szXSx0aW1lc3RhbXA6Z3JvdXBzWzRdLGV2ZW50TmFtZTpncm91cHNbNV0sZGV0YWlsczpncm91cHNbNl19O307VGVzdEV4cG9ydHMubGluZVBhcnNlcldpdGhMZWdhY3lGbXQ9bGluZVBhcnNlcldpdGhMZWdhY3lGbXQ7Y29uc3QgdHJhY2VFdmVudENsb2NrU3luY1JFPS90cmFjZV9ldmVudF9jbG9ja19zeW5jOiBwYXJlbnRfdHM9KFxkK1wuP1xkKikvO1Rlc3RFeHBvcnRzLnRyYWNlRXZlbnRDbG9ja1N5bmNSRT10cmFjZUV2ZW50Q2xvY2tTeW5jUkU7Y29uc3QgcmVhbFRpbWVDbG9ja1N5bmNSRT0vdHJhY2VfZXZlbnRfY2xvY2tfc3luYzogcmVhbHRpbWVfdHM9KFxkKykvO2NvbnN0IGdlbmVyaWNDbG9ja1N5bmNSRT0vdHJhY2VfZXZlbnRfY2xvY2tfc3luYzogbmFtZT0oW1x3XC1dKykvO2NvbnN0IHBzZXVkb0tlcm5lbFBJRD0wO2Z1bmN0aW9uIGF1dG9EZXRlY3RMaW5lUGFyc2VyKGxpbmUpe2lmKGxpbmVbMF09PT0neycpcmV0dXJuIGZhbHNlO2lmKGxpbmVSRVdpdGhUR0lELnRlc3QobGluZSkpcmV0dXJuIGxpbmVQYXJzZXJXaXRoVEdJRDtpZihsaW5lUkVXaXRoSVJRSW5mby50ZXN0KGxpbmUpKXJldHVybiBsaW5lUGFyc2VyV2l0aElSUUluZm87aWYobGluZVJFV2l0aExlZ2FjeUZtdC50ZXN0KGxpbmUpKXJldHVybiBsaW5lUGFyc2VyV2l0aExlZ2FjeUZtdDtyZXR1cm4gdW5kZWZpbmVkO30KLVRlc3RFeHBvcnRzLmF1dG9EZXRlY3RMaW5lUGFyc2VyPWF1dG9EZXRlY3RMaW5lUGFyc2VyO0ZUcmFjZUltcG9ydGVyLmNhbkltcG9ydD1mdW5jdGlvbihldmVudHMpe2lmKGV2ZW50cyBpbnN0YW5jZW9mIHRyLmIuVHJhY2VTdHJlYW0pZXZlbnRzPWV2ZW50cy5oZWFkZXI7aWYoISh0eXBlb2YoZXZlbnRzKT09PSdzdHJpbmcnfHxldmVudHMgaW5zdGFuY2VvZiBTdHJpbmcpKXtyZXR1cm4gZmFsc2U7fQotaWYoRlRyYWNlSW1wb3J0ZXIuX2V4dHJhY3RFdmVudHNGcm9tU3lzdHJhY2VIVE1MKGV2ZW50cyxmYWxzZSkub2spe3JldHVybiB0cnVlO30KLWlmKEZUcmFjZUltcG9ydGVyLl9leHRyYWN0RXZlbnRzRnJvbVN5c3RyYWNlTXVsdGlIVE1MKGV2ZW50cyxmYWxzZSkub2spe3JldHVybiB0cnVlO30KLWlmKC9eIyB0cmFjZXI6Ly50ZXN0KGV2ZW50cykpcmV0dXJuIHRydWU7Y29uc3QgbGluZUJyZWFrSW5kZXg9ZXZlbnRzLmluZGV4T2YoJ1xuJyk7aWYobGluZUJyZWFrSW5kZXg+LTEpZXZlbnRzPWV2ZW50cy5zdWJzdHJpbmcoMCxsaW5lQnJlYWtJbmRleCk7aWYoYXV0b0RldGVjdExpbmVQYXJzZXIoZXZlbnRzKSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2U7fTtGVHJhY2VJbXBvcnRlci5fZXh0cmFjdEV2ZW50c0Zyb21TeXN0cmFjZUhUTUw9ZnVuY3Rpb24oaW5jb21pbmdFdmVudHMscHJvZHVjZVJlc3VsdCl7Y29uc3QgZmFpbHVyZT17b2s6ZmFsc2V9O2lmKHByb2R1Y2VSZXN1bHQ9PT11bmRlZmluZWQpcHJvZHVjZVJlc3VsdD10cnVlO2NvbnN0IGhlYWRlcj1pbmNvbWluZ0V2ZW50cyBpbnN0YW5jZW9mIHRyLmIuVHJhY2VTdHJlYW0/aW5jb21pbmdFdmVudHMuaGVhZGVyOmluY29taW5nRXZlbnRzO2lmKCEvXjwhRE9DVFlQRSBodG1sPi8udGVzdChoZWFkZXIpKXJldHVybiBmYWlsdXJlO2NvbnN0IHI9bmV3IHRyLmltcG9ydGVyLlNpbXBsZUxpbmVSZWFkZXIoaW5jb21pbmdFdmVudHMpO2lmKCFyLmFkdmFuY2VUb0xpbmVNYXRjaGluZygvXiAgPHNjcmlwdD4kLykpcmV0dXJuIGZhaWx1cmU7aWYoIXIuYWR2YW5jZVRvTGluZU1hdGNoaW5nKC9eICB2YXIgbGludXhQZXJmRGF0YSA9ICJcXCQvKSlyZXR1cm4gZmFpbHVyZTtjb25zdCBldmVudHNCZWdpbkF0TGluZT1yLmN1ckxpbmVOdW1iZXIrMTtyLmJlZ2luU2F2aW5nTGluZXMoKTtpZighci5hZHZhbmNlVG9MaW5lTWF0Y2hpbmcoL14gIDxcL3NjcmlwdD4kLykpcmV0dXJuIGZhaWx1cmU7bGV0IHJhd0V2ZW50cz1yLmVuZFNhdmluZ0xpbmVzQW5kR2V0UmVzdWx0KCk7cmF3RXZlbnRzPXJhd0V2ZW50cy5zbGljZSgxLHJhd0V2ZW50cy5sZW5ndGgtMSk7aWYoIXIuYWR2YW5jZVRvTGluZU1hdGNoaW5nKC9ePFwvYm9keT4kLykpcmV0dXJuIGZhaWx1cmU7aWYoIXIuYWR2YW5jZVRvTGluZU1hdGNoaW5nKC9ePFwvaHRtbD4kLykpcmV0dXJuIGZhaWx1cmU7ZnVuY3Rpb24gZW5kc1dpdGgoc3RyLHN1ZmZpeCl7cmV0dXJuIHN0ci5pbmRleE9mKHN1ZmZpeCxzdHIubGVuZ3RoLXN1ZmZpeC5sZW5ndGgpIT09LTE7fQotZnVuY3Rpb24gc3RyaXBTdWZmaXgoc3RyLHN1ZmZpeCl7aWYoIWVuZHNXaXRoKHN0cixzdWZmaXgpKXJldHVybiBzdHI7cmV0dXJuIHN0ci5zdWJzdHJpbmcoc3RyLHN0ci5sZW5ndGgtc3VmZml4Lmxlbmd0aCk7fQotbGV0IGV2ZW50cz1bXTtpZihwcm9kdWNlUmVzdWx0KXtmb3IobGV0IGk9MDtpPHJhd0V2ZW50cy5sZW5ndGg7aSsrKXtsZXQgZXZlbnQ9cmF3RXZlbnRzW2ldO2V2ZW50PXN0cmlwU3VmZml4KGV2ZW50LCdcXG5cXCcpO2V2ZW50cy5wdXNoKGV2ZW50KTt9fWVsc2V7ZXZlbnRzPVtyYXdFdmVudHNbcmF3RXZlbnRzLmxlbmd0aC0xXV07fQotY29uc3Qgb2xkTGFzdEV2ZW50PWV2ZW50c1tldmVudHMubGVuZ3RoLTFdO2NvbnN0IG5ld0xhc3RFdmVudD1zdHJpcFN1ZmZpeChvbGRMYXN0RXZlbnQsJ1xcbiI7Jyk7aWYobmV3TGFzdEV2ZW50PT09b2xkTGFzdEV2ZW50KXJldHVybiBmYWlsdXJlO2V2ZW50c1tldmVudHMubGVuZ3RoLTFdPW5ld0xhc3RFdmVudDtyZXR1cm57b2s6dHJ1ZSxsaW5lczpwcm9kdWNlUmVzdWx0P2V2ZW50czp1bmRlZmluZWQsZXZlbnRzQmVnaW5BdExpbmV9O307RlRyYWNlSW1wb3J0ZXIuX2V4dHJhY3RFdmVudHNGcm9tU3lzdHJhY2VNdWx0aUhUTUw9ZnVuY3Rpb24oaW5jb21pbmdFdmVudHMscHJvZHVjZVJlc3VsdCl7Y29uc3QgZmFpbHVyZT17b2s6ZmFsc2V9O2lmKHByb2R1Y2VSZXN1bHQ9PT11bmRlZmluZWQpcHJvZHVjZVJlc3VsdD10cnVlO2NvbnN0IGhlYWRlcj1pbmNvbWluZ0V2ZW50cyBpbnN0YW5jZW9mIHRyLmIuVHJhY2VTdHJlYW0/aW5jb21pbmdFdmVudHMuaGVhZGVyOmluY29taW5nRXZlbnRzO2lmKCEobmV3IFJlZ0V4cCgnXjwhRE9DVFlQRSBIVE1MPicsJ2knKS50ZXN0KGhlYWRlcikpKXJldHVybiBmYWlsdXJlO2NvbnN0IHI9bmV3IHRyLmltcG9ydGVyLlNpbXBsZUxpbmVSZWFkZXIoaW5jb21pbmdFdmVudHMpO2xldCBldmVudHM9W107bGV0IGV2ZW50c0JlZ2luQXRMaW5lO3doaWxlKCEvXiMgdHJhY2VyOi8udGVzdChldmVudHMpKXtpZighci5hZHZhbmNlVG9MaW5lTWF0Y2hpbmcoL14gIDxzY3JpcHQgY2xhc3M9InRyYWNlLWRhdGEiIHR5cGU9ImFwcGxpY2F0aW9uXC90ZXh0Ij4kLykpe3JldHVybiBmYWlsdXJlO30KLWV2ZW50c0JlZ2luQXRMaW5lPXIuY3VyTGluZU51bWJlcisxO3IuYmVnaW5TYXZpbmdMaW5lcygpO2lmKCFyLmFkdmFuY2VUb0xpbmVNYXRjaGluZygvXiAgPFwvc2NyaXB0PiQvKSlyZXR1cm4gZmFpbHVyZTtldmVudHM9ci5lbmRTYXZpbmdMaW5lc0FuZEdldFJlc3VsdCgpO2V2ZW50cz1ldmVudHMuc2xpY2UoMSxldmVudHMubGVuZ3RoLTEpO30KLWlmKCFyLmFkdmFuY2VUb0xpbmVNYXRjaGluZygvXjxcL2JvZHk+JC8pKXJldHVybiBmYWlsdXJlO2lmKCFyLmFkdmFuY2VUb0xpbmVNYXRjaGluZygvXjxcL2h0bWw+JC8pKXJldHVybiBmYWlsdXJlO3JldHVybntvazp0cnVlLGxpbmVzOnByb2R1Y2VSZXN1bHQ/ZXZlbnRzOnVuZGVmaW5lZCxldmVudHNCZWdpbkF0TGluZSx9O307RlRyYWNlSW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucHJvdG90eXBlLGdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nRlRyYWNlSW1wb3J0ZXInO30sZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30saW1wb3J0Q2xvY2tTeW5jTWFya2Vycygpe3RoaXMubGF6eUluaXRfKCk7dGhpcy5mb3JFYWNoTGluZV8oZnVuY3Rpb24odGV4dCxldmVudEJhc2UsY3B1TnVtYmVyLHBpZCx0cyl7Y29uc3QgZXZlbnROYW1lPWV2ZW50QmFzZS5ldmVudE5hbWU7aWYoZXZlbnROYW1lIT09J3RyYWNpbmdfbWFya193cml0ZScmJmV2ZW50TmFtZSE9PScwJylyZXR1cm47aWYodHJhY2VFdmVudENsb2NrU3luY1JFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpfHxnZW5lcmljQ2xvY2tTeW5jUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscykpe3RoaXMudHJhY2VDbG9ja1N5bmNFdmVudF8oZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKTt9ZWxzZSBpZihyZWFsVGltZUNsb2NrU3luY1JFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpKXtjb25zdCBtYXRjaD1yZWFsVGltZUNsb2NrU3luY1JFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO3RoaXMubW9kZWxfLnJlYWx0aW1lX3RvX21vbm90b25pY19vZmZzZXRfbXM9dHMtbWF0Y2hbMV07fX0uYmluZCh0aGlzKSk7fSxpbXBvcnRFdmVudHMoKXtjb25zdCBtb2RlbFRpbWVUcmFuc2Zvcm1lcj10aGlzLm1vZGVsXy5jbG9ja1N5bmNNYW5hZ2VyLmdldE1vZGVsVGltZVRyYW5zZm9ybWVyKHRoaXMuY2xvY2tEb21haW5JZF8pO3RoaXMuaW1wb3J0Q3B1RGF0YV8obW9kZWxUaW1lVHJhbnNmb3JtZXIpO3RoaXMuYnVpbGRNYXBGcm9tTGludXhQaWRzVG9UaHJlYWRzXygpO3RoaXMuYnVpbGRQZXJUaHJlYWRDcHVTbGljZXNGcm9tQ3B1U3RhdGVfKCk7fSxyZWdpc3RlckV2ZW50SGFuZGxlcihldmVudE5hbWUsaGFuZGxlcil7dGhpcy5ldmVudEhhbmRsZXJzX1tldmVudE5hbWVdPWhhbmRsZXI7fSxnZXRPckNyZWF0ZUNwdShjcHVOdW1iZXIpe3JldHVybiB0aGlzLm1vZGVsXy5rZXJuZWwuZ2V0T3JDcmVhdGVDcHUoY3B1TnVtYmVyKTt9LGdldE9yQ3JlYXRlS2VybmVsVGhyZWFkKGtlcm5lbFRocmVhZE5hbWUscGlkLHRpZCl7aWYoIXRoaXMua2VybmVsVGhyZWFkU3RhdGVzX1trZXJuZWxUaHJlYWROYW1lXSl7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhwaWQpLmdldE9yQ3JlYXRlVGhyZWFkKHRpZCk7dGhyZWFkLm5hbWU9a2VybmVsVGhyZWFkTmFtZTt0aGlzLmtlcm5lbFRocmVhZFN0YXRlc19ba2VybmVsVGhyZWFkTmFtZV09e3BpZCx0aHJlYWQsb3BlblNsaWNlOnVuZGVmaW5lZCxvcGVuU2xpY2VUUzp1bmRlZmluZWR9O3RoaXMudGhyZWFkc0J5TGludXhQaWRbcGlkXT10aHJlYWQ7fQotcmV0dXJuIHRoaXMua2VybmVsVGhyZWFkU3RhdGVzX1trZXJuZWxUaHJlYWROYW1lXTt9LGdldE9yQ3JlYXRlQmluZGVyS2VybmVsVGhyZWFkKGtlcm5lbFRocmVhZE5hbWUscGlkLHRpZCl7Y29uc3Qga2V5PWtlcm5lbFRocmVhZE5hbWUrcGlkK3RpZDtpZighdGhpcy5rZXJuZWxUaHJlYWRTdGF0ZXNfW2tleV0pe2NvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MocGlkKS5nZXRPckNyZWF0ZVRocmVhZCh0aWQpO3RocmVhZC5uYW1lPWtlcm5lbFRocmVhZE5hbWU7dGhpcy5rZXJuZWxUaHJlYWRTdGF0ZXNfW2tleV09e3BpZCx0aHJlYWQsb3BlblNsaWNlOnVuZGVmaW5lZCxvcGVuU2xpY2VUUzp1bmRlZmluZWR9O3RoaXMudGhyZWFkc0J5TGludXhQaWRbcGlkXT10aHJlYWQ7fQotcmV0dXJuIHRoaXMua2VybmVsVGhyZWFkU3RhdGVzX1trZXldO30sZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQodGhyZWFkTmFtZSl7bGV0IHRocmVhZD10aGlzLmtlcm5lbFRocmVhZFN0YXRlc19bdGhyZWFkTmFtZV07aWYoIXRocmVhZCl7dGhyZWFkPXRoaXMuZ2V0T3JDcmVhdGVLZXJuZWxUaHJlYWQodGhyZWFkTmFtZSxwc2V1ZG9LZXJuZWxQSUQsdGhpcy5wc2V1ZG9UaHJlYWRDb3VudGVyKTt0aGlzLnBzZXVkb1RocmVhZENvdW50ZXIrKzt9Ci1yZXR1cm4gdGhyZWFkO30sbWFya1BpZFJ1bm5hYmxlKHRzLHBpZCxjb21tLHByaW8sZnJvbVBpZCl7dGhpcy53YWtldXBzXy5wdXNoKHt0cyx0aWQ6cGlkLGZyb21UaWQ6ZnJvbVBpZH0pO30sYWRkUGlkQmxvY2tlZFJlYXNvbih0cyxwaWQsaW93YWl0LGNhbGxlcil7dGhpcy5ibG9ja2VkUmVhc29uc18ucHVzaCh7dHMsdGlkOnBpZCxpb3dhaXQsY2FsbGVyfSk7fSxidWlsZE1hcEZyb21MaW51eFBpZHNUb1RocmVhZHNfKCl7dGhpcy50aHJlYWRzQnlMaW51eFBpZD17fTt0aGlzLm1vZGVsXy5nZXRBbGxUaHJlYWRzKCkuZm9yRWFjaChmdW5jdGlvbih0aHJlYWQpe3RoaXMudGhyZWFkc0J5TGludXhQaWRbdGhyZWFkLnRpZF09dGhyZWFkO30uYmluZCh0aGlzKSk7fSxidWlsZFBlclRocmVhZENwdVNsaWNlc0Zyb21DcHVTdGF0ZV8oKXtjb25zdCBTQ0hFRFVMSU5HX1NUQVRFPXRyLm1vZGVsLlNDSEVEVUxJTkdfU1RBVEU7Zm9yKGNvbnN0IGNwdU51bWJlciBpbiB0aGlzLm1vZGVsXy5rZXJuZWwuY3B1cyl7Y29uc3QgY3B1PXRoaXMubW9kZWxfLmtlcm5lbC5jcHVzW2NwdU51bWJlcl07Zm9yKGxldCBpPTA7aTxjcHUuc2xpY2VzLmxlbmd0aDtpKyspe2NvbnN0IGNwdVNsaWNlPWNwdS5zbGljZXNbaV07Y29uc3QgdGhyZWFkPXRoaXMudGhyZWFkc0J5TGludXhQaWRbY3B1U2xpY2UuYXJncy50aWRdO2lmKCF0aHJlYWQpY29udGludWU7Y3B1U2xpY2UudGhyZWFkVGhhdFdhc1J1bm5pbmc9dGhyZWFkO2lmKCF0aHJlYWQudGVtcENwdVNsaWNlcyl7dGhyZWFkLnRlbXBDcHVTbGljZXM9W107fQotdGhyZWFkLnRlbXBDcHVTbGljZXMucHVzaChjcHVTbGljZSk7fX0KLWZvcihjb25zdCBpIGluIHRoaXMud2FrZXVwc18pe2NvbnN0IHdha2V1cD10aGlzLndha2V1cHNfW2ldO2NvbnN0IHRocmVhZD10aGlzLnRocmVhZHNCeUxpbnV4UGlkW3dha2V1cC50aWRdO2lmKCF0aHJlYWQpY29udGludWU7dGhyZWFkLnRlbXBXYWtldXBzPXRocmVhZC50ZW1wV2FrZXVwc3x8W107dGhyZWFkLnRlbXBXYWtldXBzLnB1c2god2FrZXVwKTt9Ci1mb3IoY29uc3QgaSBpbiB0aGlzLmJsb2NrZWRSZWFzb25zXyl7Y29uc3QgcmVhc29uPXRoaXMuYmxvY2tlZFJlYXNvbnNfW2ldO2NvbnN0IHRocmVhZD10aGlzLnRocmVhZHNCeUxpbnV4UGlkW3JlYXNvbi50aWRdO2lmKCF0aHJlYWQpY29udGludWU7dGhyZWFkLnRlbXBCbG9ja2VkUmVhc29ucz10aHJlYWQudGVtcEJsb2NrZWRSZWFzb25zfHxbXTt0aHJlYWQudGVtcEJsb2NrZWRSZWFzb25zLnB1c2gocmVhc29uKTt9Ci10aGlzLm1vZGVsXy5nZXRBbGxUaHJlYWRzKCkuZm9yRWFjaChmdW5jdGlvbih0aHJlYWQpe2lmKHRocmVhZC50ZW1wQ3B1U2xpY2VzPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBvcmlnU2xpY2VzPXRocmVhZC50ZW1wQ3B1U2xpY2VzO2RlbGV0ZSB0aHJlYWQudGVtcENwdVNsaWNlcztvcmlnU2xpY2VzLnNvcnQoZnVuY3Rpb24oeCx5KXtyZXR1cm4geC5zdGFydC15LnN0YXJ0O30pO2NvbnN0IHdha2V1cHM9dGhyZWFkLnRlbXBXYWtldXBzfHxbXTtkZWxldGUgdGhyZWFkLnRlbXBXYWtldXBzO3dha2V1cHMuc29ydChmdW5jdGlvbih4LHkpe3JldHVybiB4LnRzLXkudHM7fSk7Y29uc3QgcmVhc29ucz10aHJlYWQudGVtcEJsb2NrZWRSZWFzb25zfHxbXTtkZWxldGUgdGhyZWFkLnRlbXBCbG9ja2VkUmVhc29ucztyZWFzb25zLnNvcnQoZnVuY3Rpb24oeCx5KXtyZXR1cm4geC50cy15LnRzO30pO2NvbnN0IHNsaWNlcz1bXTtpZihvcmlnU2xpY2VzLmxlbmd0aCl7Y29uc3Qgc2xpY2U9b3JpZ1NsaWNlc1swXTtpZih3YWtldXBzLmxlbmd0aCYmd2FrZXVwc1swXS50czxzbGljZS5zdGFydCl7Y29uc3Qgd2FrZXVwPXdha2V1cHMuc2hpZnQoKTtjb25zdCB3YWtldXBEdXJhdGlvbj1zbGljZS5zdGFydC13YWtldXAudHM7Y29uc3QgYXJncz17J3dha2V1cCBmcm9tIHRpZCc6d2FrZXVwLmZyb21UaWR9O3NsaWNlcy5wdXNoKG5ldyB0ci5tb2RlbC5UaHJlYWRUaW1lU2xpY2UodGhyZWFkLFNDSEVEVUxJTkdfU1RBVEUuUlVOTkFCTEUsJycsd2FrZXVwLnRzLGFyZ3Msd2FrZXVwRHVyYXRpb24pKTt9Ci1jb25zdCBydW5uaW5nU2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsU0NIRURVTElOR19TVEFURS5SVU5OSU5HLCcnLHNsaWNlLnN0YXJ0LHt9LHNsaWNlLmR1cmF0aW9uKTtydW5uaW5nU2xpY2UuY3B1T25XaGljaFRocmVhZFdhc1J1bm5pbmc9c2xpY2UuY3B1O3NsaWNlcy5wdXNoKHJ1bm5pbmdTbGljZSk7fQotZm9yKGxldCBpPTE7aTxvcmlnU2xpY2VzLmxlbmd0aDtpKyspe2xldCB3YWtldXA9dW5kZWZpbmVkO2NvbnN0IHByZXZTbGljZT1vcmlnU2xpY2VzW2ktMV07Y29uc3QgbmV4dFNsaWNlPW9yaWdTbGljZXNbaV07bGV0IG1pZER1cmF0aW9uPW5leHRTbGljZS5zdGFydC1wcmV2U2xpY2UuZW5kO3doaWxlKHdha2V1cHMubGVuZ3RoJiZ3YWtldXBzWzBdLnRzPG5leHRTbGljZS5zdGFydCl7Y29uc3Qgdz13YWtldXBzLnNoaWZ0KCk7aWYod2FrZXVwPT09dW5kZWZpbmVkJiZ3LnRzPnByZXZTbGljZS5lbmQpe3dha2V1cD13O319Ci1sZXQgYmxvY2tlZFJlYXNvbj11bmRlZmluZWQ7d2hpbGUocmVhc29ucy5sZW5ndGgmJnJlYXNvbnNbMF0udHM8cHJldlNsaWNlLmVuZCl7Y29uc3Qgcj1yZWFzb25zLnNoaWZ0KCk7fQotaWYod2FrZXVwIT09dW5kZWZpbmVkJiZyZWFzb25zLmxlbmd0aCYmcmVhc29uc1swXS50czx3YWtldXAudHMpe2Jsb2NrZWRSZWFzb249cmVhc29ucy5zaGlmdCgpO30KLWNvbnN0IHB1c2hTbGVlcD1mdW5jdGlvbihzdGF0ZSl7aWYod2FrZXVwIT09dW5kZWZpbmVkKXttaWREdXJhdGlvbj13YWtldXAudHMtcHJldlNsaWNlLmVuZDt9Ci1pZihibG9ja2VkUmVhc29uIT09dW5kZWZpbmVkKXtjb25zdCBhcmdzPXsna2VybmVsIGNhbGxzaXRlIHdoZW4gYmxvY2tlZDonOmJsb2NrZWRSZWFzb24uY2FsbGVyfTtpZihibG9ja2VkUmVhc29uLmlvd2FpdCl7c3dpdGNoKHN0YXRlKXtjYXNlIFNDSEVEVUxJTkdfU1RBVEUuVU5JTlRSX1NMRUVQOnN0YXRlPVNDSEVEVUxJTkdfU1RBVEUuVU5JTlRSX1NMRUVQX0lPO2JyZWFrO2Nhc2UgU0NIRURVTElOR19TVEFURS5VTklOVFJfU0xFRVBfV0FLRV9LSUxMOnN0YXRlPVNDSEVEVUxJTkdfU1RBVEUuVU5JTlRSX1NMRUVQX1dBS0VfS0lMTF9JTzticmVhaztjYXNlIFNDSEVEVUxJTkdfU1RBVEUuVU5JTlRSX1NMRUVQX1dBS0lORzpzdGF0ZT1TQ0hFRFVMSU5HX1NUQVRFLlVOSU5UUl9TTEVFUF9XQUtFX0tJTExfSU87YnJlYWs7ZGVmYXVsdDp9fQotc2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsc3RhdGUsJycscHJldlNsaWNlLmVuZCxhcmdzLG1pZER1cmF0aW9uKSk7fWVsc2V7c2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsc3RhdGUsJycscHJldlNsaWNlLmVuZCx7fSxtaWREdXJhdGlvbikpO30KLWlmKHdha2V1cCE9PXVuZGVmaW5lZCl7Y29uc3Qgd2FrZXVwRHVyYXRpb249bmV4dFNsaWNlLnN0YXJ0LXdha2V1cC50cztjb25zdCBhcmdzPXsnd2FrZXVwIGZyb20gdGlkJzp3YWtldXAuZnJvbVRpZH07c2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsU0NIRURVTElOR19TVEFURS5SVU5OQUJMRSwnJyx3YWtldXAudHMsYXJncyx3YWtldXBEdXJhdGlvbikpO3dha2V1cD11bmRlZmluZWQ7fX07aWYocHJldlNsaWNlLmFyZ3Muc3RhdGVXaGVuRGVzY2hlZHVsZWQ9PT0nUycpe3B1c2hTbGVlcChTQ0hFRFVMSU5HX1NUQVRFLlNMRUVQSU5HKTt9ZWxzZSBpZihwcmV2U2xpY2UuYXJncy5zdGF0ZVdoZW5EZXNjaGVkdWxlZD09PSdSJ3x8cHJldlNsaWNlLmFyZ3Muc3RhdGVXaGVuRGVzY2hlZHVsZWQ9PT0nUisnKXtzbGljZXMucHVzaChuZXcgdHIubW9kZWwuVGhyZWFkVGltZVNsaWNlKHRocmVhZCxTQ0hFRFVMSU5HX1NUQVRFLlJVTk5BQkxFLCcnLHByZXZTbGljZS5lbmQse30sbWlkRHVyYXRpb24pKTt9ZWxzZSBpZihwcmV2U2xpY2UuYXJncy5zdGF0ZVdoZW5EZXNjaGVkdWxlZD09PSdEJyl7cHVzaFNsZWVwKFNDSEVEVUxJTkdfU1RBVEUuVU5JTlRSX1NMRUVQKTt9ZWxzZSBpZihwcmV2U2xpY2UuYXJncy5zdGF0ZVdoZW5EZXNjaGVkdWxlZD09PSdUJyl7c2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsU0NIRURVTElOR19TVEFURS5TVE9QUEVELCcnLHByZXZTbGljZS5lbmQse30sbWlkRHVyYXRpb24pKTt9ZWxzZSBpZihwcmV2U2xpY2UuYXJncy5zdGF0ZVdoZW5EZXNjaGVkdWxlZD09PSd0Jyl7c2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsU0NIRURVTElOR19TVEFURS5ERUJVRywnJyxwcmV2U2xpY2UuZW5kLHt9LG1pZER1cmF0aW9uKSk7fWVsc2UgaWYocHJldlNsaWNlLmFyZ3Muc3RhdGVXaGVuRGVzY2hlZHVsZWQ9PT0nWicpe3NsaWNlcy5wdXNoKG5ldyB0ci5tb2RlbC5UaHJlYWRUaW1lU2xpY2UodGhyZWFkLFNDSEVEVUxJTkdfU1RBVEUuWk9NQklFLCcnLHByZXZTbGljZS5lbmQse30sbWlkRHVyYXRpb24pKTt9ZWxzZSBpZihwcmV2U2xpY2UuYXJncy5zdGF0ZVdoZW5EZXNjaGVkdWxlZD09PSdYJyl7c2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsU0NIRURVTElOR19TVEFURS5FWElUX0RFQUQsJycscHJldlNsaWNlLmVuZCx7fSxtaWREdXJhdGlvbikpO31lbHNlIGlmKHByZXZTbGljZS5hcmdzLnN0YXRlV2hlbkRlc2NoZWR1bGVkPT09J3gnKXtzbGljZXMucHVzaChuZXcgdHIubW9kZWwuVGhyZWFkVGltZVNsaWNlKHRocmVhZCxTQ0hFRFVMSU5HX1NUQVRFLlRBU0tfREVBRCwnJyxwcmV2U2xpY2UuZW5kLHt9LG1pZER1cmF0aW9uKSk7fWVsc2UgaWYocHJldlNsaWNlLmFyZ3Muc3RhdGVXaGVuRGVzY2hlZHVsZWQ9PT0nSycpe3NsaWNlcy5wdXNoKG5ldyB0ci5tb2RlbC5UaHJlYWRUaW1lU2xpY2UodGhyZWFkLFNDSEVEVUxJTkdfU1RBVEUuV0FLRV9LSUxMLCcnLHByZXZTbGljZS5lbmQse30sbWlkRHVyYXRpb24pKTt9ZWxzZSBpZihwcmV2U2xpY2UuYXJncy5zdGF0ZVdoZW5EZXNjaGVkdWxlZD09PSdXJyl7c2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsU0NIRURVTElOR19TVEFURS5XQUtJTkcsJycscHJldlNsaWNlLmVuZCx7fSxtaWREdXJhdGlvbikpO31lbHNlIGlmKHByZXZTbGljZS5hcmdzLnN0YXRlV2hlbkRlc2NoZWR1bGVkPT09J0R8Sycpe3B1c2hTbGVlcChTQ0hFRFVMSU5HX1NUQVRFLlVOSU5UUl9TTEVFUF9XQUtFX0tJTEwpO31lbHNlIGlmKHByZXZTbGljZS5hcmdzLnN0YXRlV2hlbkRlc2NoZWR1bGVkPT09J0R8Vycpe3B1c2hTbGVlcChTQ0hFRFVMSU5HX1NUQVRFLlVOSU5UUl9TTEVFUF9XQUtJTkcpO31lbHNle3NsaWNlcy5wdXNoKG5ldyB0ci5tb2RlbC5UaHJlYWRUaW1lU2xpY2UodGhyZWFkLFNDSEVEVUxJTkdfU1RBVEUuVU5LTk9XTiwnJyxwcmV2U2xpY2UuZW5kLHt9LG1pZER1cmF0aW9uKSk7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J1VucmVjb2duaXplZCBzbGVlcCBzdGF0ZTogJysKLXByZXZTbGljZS5hcmdzLnN0YXRlV2hlbkRlc2NoZWR1bGVkfSk7fQotY29uc3QgcnVubmluZ1NsaWNlPW5ldyB0ci5tb2RlbC5UaHJlYWRUaW1lU2xpY2UodGhyZWFkLFNDSEVEVUxJTkdfU1RBVEUuUlVOTklORywnJyxuZXh0U2xpY2Uuc3RhcnQse30sbmV4dFNsaWNlLmR1cmF0aW9uKTtydW5uaW5nU2xpY2UuY3B1T25XaGljaFRocmVhZFdhc1J1bm5pbmc9cHJldlNsaWNlLmNwdTtzbGljZXMucHVzaChydW5uaW5nU2xpY2UpO30KLXRocmVhZC50aW1lU2xpY2VzPXNsaWNlczt9LHRoaXMpO30sY3JlYXRlUGFyc2Vyc18oKXtjb25zdCBhbGxUeXBlSW5mb3M9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlci5nZXRBbGxSZWdpc3RlcmVkVHlwZUluZm9zKCk7Y29uc3QgcGFyc2Vycz1hbGxUeXBlSW5mb3MubWFwKGZ1bmN0aW9uKHR5cGVJbmZvKXtyZXR1cm4gbmV3IHR5cGVJbmZvLmNvbnN0cnVjdG9yKHRoaXMpO30sdGhpcyk7cmV0dXJuIHBhcnNlcnM7fSxyZWdpc3RlckRlZmF1bHRIYW5kbGVyc18oKXt0aGlzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd0cmFjaW5nX21hcmtfd3JpdGUnLEZUcmFjZUltcG9ydGVyLnByb3RvdHlwZS50cmFjZU1hcmtpbmdXcml0ZUV2ZW50Xy5iaW5kKHRoaXMpKTt0aGlzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCcwJyxGVHJhY2VJbXBvcnRlci5wcm90b3R5cGUudHJhY2VNYXJraW5nV3JpdGVFdmVudF8uYmluZCh0aGlzKSk7dGhpcy5yZWdpc3RlckV2ZW50SGFuZGxlcigndHJhY2luZ19tYXJrX3dyaXRlOnRyYWNlX2V2ZW50X2Nsb2NrX3N5bmMnLGZ1bmN0aW9uKCl7cmV0dXJuIHRydWU7fSk7dGhpcy5yZWdpc3RlckV2ZW50SGFuZGxlcignMDp0cmFjZV9ldmVudF9jbG9ja19zeW5jJyxmdW5jdGlvbigpe3JldHVybiB0cnVlO30pO30sdHJhY2VDbG9ja1N5bmNFdmVudF8oZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtsZXQgZXZlbnQ9L25hbWU9KFx3Kz8pXHMoLispLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZihldmVudCl7Y29uc3QgbmFtZT1ldmVudFsxXTtjb25zdCBwaWVjZXM9ZXZlbnRbMl0uc3BsaXQoJyAnKTtjb25zdCBhcmdzPXtwZXJmVHM6dHN9O2ZvcihsZXQgaT0wO2k8cGllY2VzLmxlbmd0aDtpKyspe2NvbnN0IHBhcnRzPXBpZWNlc1tpXS5zcGxpdCgnPScpO2lmKHBhcnRzLmxlbmd0aCE9PTIpe3Rocm93IG5ldyBFcnJvcignb21nYmJxJyk7fQotYXJnc1twYXJ0c1swXV09cGFydHNbMV07fQotdGhpcy5tb2RlbF8uY2xvY2tTeW5jTWFuYWdlci5hZGRDbG9ja1N5bmNNYXJrZXIodGhpcy5jbG9ja0RvbWFpbklkXyxuYW1lLHRzKTtyZXR1cm4gdHJ1ZTt9Ci1ldmVudD0vbmFtZT0oW1x3XC1dKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKGV2ZW50KXt0aGlzLm1vZGVsXy5jbG9ja1N5bmNNYW5hZ2VyLmFkZENsb2NrU3luY01hcmtlcih0aGlzLmNsb2NrRG9tYWluSWRfLGV2ZW50WzFdLHRzKTtyZXR1cm4gdHJ1ZTt9Ci1ldmVudD0vcGFyZW50X3RzPShcZCtcLj9cZCopLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2xldCBtb25vdG9uaWNUcz1ldmVudFsxXSoxMDAwO2lmKG1vbm90b25pY1RzPT09MCltb25vdG9uaWNUcz10cztpZih0aGlzLmhhdmVDbG9ja1N5bmNlZE1vbm90b25pY1RvR2xvYmFsXyl7cmV0dXJuIHRydWU7fQotdGhpcy5tb2RlbF8uY2xvY2tTeW5jTWFuYWdlci5hZGRDbG9ja1N5bmNNYXJrZXIodGhpcy5jbG9ja0RvbWFpbklkXyxNT05PVE9OSUNfVE9fRlRSQUNFX0dMT0JBTF9TWU5DX0lELHRzKTt0aGlzLm1vZGVsXy5jbG9ja1N5bmNNYW5hZ2VyLmFkZENsb2NrU3luY01hcmtlcih0ci5tb2RlbC5DbG9ja0RvbWFpbklkLkxJTlVYX0NMT0NLX01PTk9UT05JQyxNT05PVE9OSUNfVE9fRlRSQUNFX0dMT0JBTF9TWU5DX0lELG1vbm90b25pY1RzKTt0aGlzLmhhdmVDbG9ja1N5bmNlZE1vbm90b25pY1RvR2xvYmFsXz10cnVlO3JldHVybiB0cnVlO30sdHJhY2VNYXJraW5nV3JpdGVFdmVudF8oZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlLHRocmVhZE5hbWUpe2V2ZW50QmFzZS5kZXRhaWxzPWV2ZW50QmFzZS5kZXRhaWxzLnJlcGxhY2UoL1xcbi4qJC8sJycpO2NvbnN0IGV2ZW50PS9eXHMqKFx3Kyk6XHMqKC4qKSQvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudCl7Y29uc3QgdGFnPWV2ZW50QmFzZS5kZXRhaWxzLnN1YnN0cmluZygwLDIpO2lmKHRhZz09PSdCfCd8fHRhZz09PSdFJ3x8dGFnPT09J0V8J3x8dGFnPT09J1h8J3x8dGFnPT09J0N8J3x8dGFnPT09J1N8J3x8dGFnPT09J0Z8Jyl7ZXZlbnRCYXNlLnN1YkV2ZW50TmFtZT0nYW5kcm9pZCc7fWVsc2V7cmV0dXJuIGZhbHNlO319ZWxzZXtldmVudEJhc2Uuc3ViRXZlbnROYW1lPWV2ZW50WzFdO2V2ZW50QmFzZS5kZXRhaWxzPWV2ZW50WzJdO30KLWNvbnN0IHdyaXRlRXZlbnROYW1lPWV2ZW50TmFtZSsnOicrZXZlbnRCYXNlLnN1YkV2ZW50TmFtZTtjb25zdCBoYW5kbGVyPXRoaXMuZXZlbnRIYW5kbGVyc19bd3JpdGVFdmVudE5hbWVdO2lmKCFoYW5kbGVyKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidwYXJzZV9lcnJvcicsbWVzc2FnZTonVW5rbm93biB0cmFjZV9tYXJraW5nX3dyaXRlIGV2ZW50ICcrd3JpdGVFdmVudE5hbWV9KTtyZXR1cm4gdHJ1ZTt9Ci1yZXR1cm4gaGFuZGxlcih3cml0ZUV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSx0aHJlYWROYW1lKTt9LGltcG9ydENwdURhdGFfKG1vZGVsVGltZVRyYW5zZm9ybWVyKXt0aGlzLmZvckVhY2hMaW5lXyhmdW5jdGlvbih0ZXh0LGV2ZW50QmFzZSxjcHVOdW1iZXIscGlkLHRzKXtjb25zdCBldmVudE5hbWU9ZXZlbnRCYXNlLmV2ZW50TmFtZTtjb25zdCBoYW5kbGVyPXRoaXMuZXZlbnRIYW5kbGVyc19bZXZlbnROYW1lXTtpZighaGFuZGxlcil7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J1Vua25vd24gZXZlbnQgJytldmVudE5hbWUrJyAoJyt0ZXh0KycpJ30pO3JldHVybjt9Ci10cz1tb2RlbFRpbWVUcmFuc2Zvcm1lcih0cyk7aWYoIWhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKSl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J01hbGZvcm1lZCAnK2V2ZW50TmFtZSsnIGV2ZW50ICgnK3RleHQrJyknfSk7fX0uYmluZCh0aGlzKSk7fSxwYXJzZUxpbmVzXygpe2xldCBleHRyYWN0UmVzdWx0PUZUcmFjZUltcG9ydGVyLl9leHRyYWN0RXZlbnRzRnJvbVN5c3RyYWNlSFRNTCh0aGlzLmV2ZW50c18sdHJ1ZSk7aWYoIWV4dHJhY3RSZXN1bHQub2spe2V4dHJhY3RSZXN1bHQ9RlRyYWNlSW1wb3J0ZXIuX2V4dHJhY3RFdmVudHNGcm9tU3lzdHJhY2VNdWx0aUhUTUwodGhpcy5ldmVudHNfLHRydWUpO30KLWxldCBsaW5lUGFyc2VyPXVuZGVmaW5lZDtpZihleHRyYWN0UmVzdWx0Lm9rKXtmb3IoY29uc3QgbGluZSBvZiBleHRyYWN0UmVzdWx0LmxpbmVzKXtsaW5lUGFyc2VyPXRoaXMucGFyc2VMaW5lXyhsaW5lLGxpbmVQYXJzZXIpO319ZWxzZXtjb25zdCByPW5ldyB0ci5pbXBvcnRlci5TaW1wbGVMaW5lUmVhZGVyKHRoaXMuZXZlbnRzXyk7Zm9yKGNvbnN0IGxpbmUgb2Ygcil7bGluZVBhcnNlcj10aGlzLnBhcnNlTGluZV8obGluZSxsaW5lUGFyc2VyKTt9fX0scGFyc2VMaW5lXyhsaW5lLGxpbmVQYXJzZXIpe2xpbmU9bGluZS50cmltKCk7aWYobGluZS5sZW5ndGg9PT0wKXJldHVybiBsaW5lUGFyc2VyO2lmKC9eIy8udGVzdChsaW5lKSl7Y29uc3QgY2xvY2tUeXBlPS9eIyBjbG9ja190eXBlPShbQS1aX10rKSQvLmV4ZWMobGluZSk7aWYoY2xvY2tUeXBlKXt0aGlzLmNsb2NrRG9tYWluSWRfPWNsb2NrVHlwZVsxXTt9Ci1yZXR1cm4gbGluZVBhcnNlcjt9Ci1pZighbGluZVBhcnNlcil7bGluZVBhcnNlcj1hdXRvRGV0ZWN0TGluZVBhcnNlcihsaW5lKTtpZighbGluZVBhcnNlcil7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J0Nhbm5vdCBwYXJzZSBsaW5lOiAnK2xpbmV9KTtyZXR1cm4gbGluZVBhcnNlcjt9fQotY29uc3QgZXZlbnRCYXNlPWxpbmVQYXJzZXIobGluZSk7aWYoIWV2ZW50QmFzZSl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J1VucmVjb2duaXplZCBsaW5lOiAnK2xpbmV9KTtyZXR1cm4gbGluZVBhcnNlcjt9Ci10aGlzLmxpbmVzXy5wdXNoKFtsaW5lLGV2ZW50QmFzZSxwYXJzZUludChldmVudEJhc2UuY3B1TnVtYmVyKSxwYXJzZUludChldmVudEJhc2UucGlkKSxwYXJzZUZsb2F0KGV2ZW50QmFzZS50aW1lc3RhbXApKjEwMDBdKTtyZXR1cm4gbGluZVBhcnNlcjt9LGZvckVhY2hMaW5lXyhoYW5kbGVyKXtmb3IobGV0IGk9MDtpPHRoaXMubGluZXNfLmxlbmd0aDsrK2kpe2NvbnN0IGxpbmU9dGhpcy5saW5lc19baV07aGFuZGxlci5hcHBseSh0aGlzLGxpbmUpO319LGxhenlJbml0Xygpe3RoaXMucGFyc2Vyc189dGhpcy5jcmVhdGVQYXJzZXJzXygpO3RoaXMucmVnaXN0ZXJEZWZhdWx0SGFuZGxlcnNfKCk7dGhpcy5wYXJzZUxpbmVzXygpO319O3RyLmltcG9ydGVyLkltcG9ydGVyLnJlZ2lzdGVyKEZUcmFjZUltcG9ydGVyKTtyZXR1cm57RlRyYWNlSW1wb3J0ZXIsX0ZUcmFjZUltcG9ydGVyVGVzdEV4cG9ydHM6VGVzdEV4cG9ydHMsSU1QT1JUX1BSSU9SSVRZLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmFuZHJvaWQuYXRyYWNlX3Byb2Nlc3NfZHVtcCcsZnVuY3Rpb24oKXtjb25zdCBJTVBPUlRfUFJJT1JJVFk9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLklNUE9SVF9QUklPUklUWSsxO2NvbnN0IEhFQURFUj0nQVRSQUNFX1BST0NFU1NfRFVNUCc7Y29uc3QgUFJPVEVDVElPTl9GTEFHX0xFVFRFUlM9eyctJzowLCdyJzp0ci5tb2RlbC5WTVJlZ2lvbi5QUk9URUNUSU9OX0ZMQUdfUkVBRCwndyc6dHIubW9kZWwuVk1SZWdpb24uUFJPVEVDVElPTl9GTEFHX1dSSVRFLCd4Jzp0ci5tb2RlbC5WTVJlZ2lvbi5QUk9URUNUSU9OX0ZMQUdfRVhFQ1VURSwncyc6dHIubW9kZWwuVk1SZWdpb24uUFJPVEVDVElPTl9GTEFHX01BWVNIQVJFLH07Y2xhc3MgQXRyYWNlUHJvY2Vzc0R1bXBJbXBvcnRlciBleHRlbmRzIHRyLmltcG9ydGVyLkltcG9ydGVye2NvbnN0cnVjdG9yKG1vZGVsLGRhdGEpe3N1cGVyKG1vZGVsLGRhdGEpO3RoaXMuaW1wb3J0UHJpb3JpdHk9SU1QT1JUX1BSSU9SSVRZO3RoaXMubW9kZWxfPW1vZGVsO3RoaXMucmF3X2RhdGFfPWRhdGE7dGhpcy5jbG9ja19zeW5jX21hcmtlcnNfPXt9O3RoaXMuc25hcHNob3RzXz1bXTt0aGlzLnByb2Nlc3Nlc189e307fQotc3RhdGljIGNhbkltcG9ydChldmVudHMpe2lmKCEodHlwZW9mKGV2ZW50cyk9PT0nc3RyaW5nJ3x8ZXZlbnRzIGluc3RhbmNlb2YgU3RyaW5nKSl7cmV0dXJuIGZhbHNlO30KLXJldHVybiBldmVudHMuc3RhcnRzV2l0aChIRUFERVIpO30KLWdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nQXRyYWNlUHJvY2Vzc0R1bXBJbXBvcnRlcic7fQotZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30KLWxhenlQYXJzZURhdGEoKXtpZih0aGlzLnJhd19kYXRhXz09PXVuZGVmaW5lZCl7cmV0dXJuO30KLWNvbnN0IGR1bXA9SlNPTi5wYXJzZSh0aGlzLnJhd19kYXRhXy5zbGljZShIRUFERVIubGVuZ3RoKzEpKTt0aGlzLmNsb2NrX3N5bmNfbWFya2Vyc189ZHVtcC5jbG9ja19zeW5jX21hcmtlcnM7dGhpcy5zbmFwc2hvdHNfPWR1bXAuZHVtcC5zbmFwc2hvdHM7dGhpcy5wcm9jZXNzZXNfPWR1bXAuZHVtcC5wcm9jZXNzZXM7dGhpcy5yYXdfZGF0YV89dW5kZWZpbmVkO30KLWltcG9ydENsb2NrU3luY01hcmtlcnMoKXt0aGlzLmxhenlQYXJzZURhdGEoKTtmb3IoY29uc3Qgc3luY0lkIGluIHRoaXMuY2xvY2tfc3luY19tYXJrZXJzXyl7Y29uc3QgdHM9cGFyc2VJbnQodGhpcy5jbG9ja19zeW5jX21hcmtlcnNfW3N5bmNJZF0pO3RoaXMubW9kZWxfLmNsb2NrU3luY01hbmFnZXIuYWRkQ2xvY2tTeW5jTWFya2VyKHRyLm1vZGVsLkNsb2NrRG9tYWluSWQuTElOVVhfQ0xPQ0tfTU9OT1RPTklDLHN5bmNJZCx0cyk7fX0KLXNldFByb2Nlc3NNZW1vcnlEdW1wVG90YWxzXyhwbWQscHJvY2Vzc0luZm8pe3BtZC50b3RhbHM9eydyZXNpZGVudEJ5dGVzJzpwcm9jZXNzSW5mby5yc3MqMTAyNCwncGxhdGZvcm1TcGVjaWZpYyc6eyd2bSc6cHJvY2Vzc0luZm8udm0qMTAyNH19O2NvbnN0IHRvdGFscz1wbWQudG90YWxzLnBsYXRmb3JtU3BlY2lmaWM7ZnVuY3Rpb24gaW1wb3J0R3B1TWV0cmljKG5hbWUpe2lmKHByb2Nlc3NJbmZvW25hbWVdIT09dW5kZWZpbmVkJiZwcm9jZXNzSW5mb1tuYW1lXT4wKXt0b3RhbHNbbmFtZV09cHJvY2Vzc0luZm9bbmFtZV0qMTAyNDt0b3RhbHNbbmFtZSsnX3BzcyddPXByb2Nlc3NJbmZvW25hbWUrJ19wc3MnXSoxMDI0O319Ci1pbXBvcnRHcHVNZXRyaWMoJ2dwdV9lZ2wnKTtpbXBvcnRHcHVNZXRyaWMoJ2dwdV9nbCcpO2ltcG9ydEdwdU1ldHJpYygnZ3B1X2V0YycpO2lmKHByb2Nlc3NJbmZvLnBzcyE9PXVuZGVmaW5lZCl7dG90YWxzLnBzcz1wcm9jZXNzSW5mby5wc3MqMTAyNDt0b3RhbHMuc3dwPXByb2Nlc3NJbmZvLnN3cCoxMDI0O3RvdGFscy5wYz1wcm9jZXNzSW5mby5wYyoxMDI0O3RvdGFscy5wZD1wcm9jZXNzSW5mby5wZCoxMDI0O3RvdGFscy5zYz1wcm9jZXNzSW5mby5zYyoxMDI0O3RvdGFscy5zZD1wcm9jZXNzSW5mby5zZCoxMDI0O319Ci1zZXRQcm9jZXNzTWVtb3J5RHVtcFZtUmVnaW9uc18ocG1kLHByb2Nlc3NJbmZvKXtpZihwcm9jZXNzSW5mby5tbWFwcz09PXVuZGVmaW5lZCl7cmV0dXJuO30KLWNvbnN0IHZtUmVnaW9ucz1bXTtmb3IoY29uc3QgbWVtb3J5TWFwIG9mIHByb2Nlc3NJbmZvLm1tYXBzKXtjb25zdCBhZGRyPW1lbW9yeU1hcC52bS5zcGxpdCgnLScpLm1hcCh4PT5wYXJzZUludCh4LDE2KSk7bGV0IGZsYWdzPTA7Zm9yKGNvbnN0IGxldHRlciBvZiBtZW1vcnlNYXAuZmxhZ3Mpe2ZsYWdzfD1QUk9URUNUSU9OX0ZMQUdfTEVUVEVSU1tsZXR0ZXJdO30KLWNvbnN0IHRvdGFscz17J3Byb3BvcnRpb25hbFJlc2lkZW50JzptZW1vcnlNYXAucHNzKjEwMjQsJ3ByaXZhdGVDbGVhblJlc2lkZW50JzptZW1vcnlNYXAucGMqMTAyNCwncHJpdmF0ZURpcnR5UmVzaWRlbnQnOm1lbW9yeU1hcC5wZCoxMDI0LCdzaGFyZWRDbGVhblJlc2lkZW50JzptZW1vcnlNYXAuc2MqMTAyNCwnc2hhcmVkRGlydHlSZXNpZGVudCc6bWVtb3J5TWFwLnNkKjEwMjQsJ3N3YXBwZWQnOm1lbW9yeU1hcC5zd3AqMTAyNCx9O3ZtUmVnaW9ucy5wdXNoKG5ldyB0ci5tb2RlbC5WTVJlZ2lvbihhZGRyWzBdLGFkZHJbMV0tYWRkclswXSxmbGFncyxtZW1vcnlNYXAuZmlsZSx0b3RhbHMpKTt9Ci1wbWQudm1SZWdpb25zPXRyLm1vZGVsLlZNUmVnaW9uQ2xhc3NpZmljYXRpb25Ob2RlLmZyb21SZWdpb25zKHZtUmVnaW9ucyk7fQotaW1wb3J0RXZlbnRzKCl7dGhpcy5sYXp5UGFyc2VEYXRhKCk7Zm9yKGNvbnN0W3BpZCxwcm9jZXNzXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMucHJvY2Vzc2VzXykpe2NvbnN0IG1vZGVsUHJvY2Vzcz10aGlzLm1vZGVsXy5nZXRQcm9jZXNzKHBpZCk7aWYobW9kZWxQcm9jZXNzPT09dW5kZWZpbmVkKXtjb250aW51ZTt9Ci1tb2RlbFByb2Nlc3MubmFtZT1wcm9jZXNzLm5hbWU7Y29uc3QgdGhyZWFkcz1wcm9jZXNzLnRocmVhZHM7aWYodGhyZWFkcz09PXVuZGVmaW5lZCl7Y29udGludWU7fQotZm9yKGNvbnN0W3RpZCx0aHJlYWRdb2YgT2JqZWN0LmVudHJpZXModGhyZWFkcykpe2NvbnN0IG1vZGVsVGhyZWFkPW1vZGVsUHJvY2Vzcy50aHJlYWRzW3RpZF07aWYobW9kZWxUaHJlYWQ9PT11bmRlZmluZWQpe2NvbnRpbnVlO30KLW1vZGVsVGhyZWFkLm5hbWU9dGhyZWFkLm5hbWU7fX0KLWNvbnN0IG1lbUNvdW50ZXI9dGhpcy5tb2RlbF8ua2VybmVsLmdldE9yQ3JlYXRlQ291bnRlcignZ2xvYmFsJywnU3lzdGVtTWVtb3J5Jyk7Y29uc3QgbWVtVXNlZFNlcmllcz1uZXcgdHIubW9kZWwuQ291bnRlclNlcmllcygnVXNlZCAoS0IpJywwKTtjb25zdCBtZW1Td2FwcGVkU2VyaWVzPW5ldyB0ci5tb2RlbC5Db3VudGVyU2VyaWVzKCdTd2FwcGVkIChLQiknLDApO21lbUNvdW50ZXIuYWRkU2VyaWVzKG1lbVVzZWRTZXJpZXMpO21lbUNvdW50ZXIuYWRkU2VyaWVzKG1lbVN3YXBwZWRTZXJpZXMpO2Zvcihjb25zdCBzbmFwc2hvdCBvZiB0aGlzLnNuYXBzaG90c18pe2NvbnN0IHRzPXBhcnNlSW50KHNuYXBzaG90LnRzKTtjb25zdCBtZW1vcnlEdW1wPXNuYXBzaG90Lm1lbWR1bXA7aWYobWVtb3J5RHVtcD09PXVuZGVmaW5lZCl7Y29uc3QgbWVtSW5mbz1zbmFwc2hvdC5tZW1pbmZvO2lmKG1lbUluZm89PT11bmRlZmluZWQpe2NvbnRpbnVlO30KLWNvbnN0IG1lbUNhY2hlcz1tZW1JbmZvLkJ1ZmZlcnMrbWVtSW5mby5DYWNoZWQtbWVtSW5mby5NYXBwZWQ7Y29uc3QgbWVtVXNlZD1tZW1JbmZvLk1lbVRvdGFsLW1lbUluZm8uTWVtRnJlZS1tZW1DYWNoZXM7Y29uc3QgbWVtU3dhcHBlZD1tZW1JbmZvLlN3YXBUb3RhbC1tZW1JbmZvLlN3YXBGcmVlO21lbVVzZWRTZXJpZXMuYWRkQ291bnRlclNhbXBsZSh0cyxtZW1Vc2VkKTttZW1Td2FwcGVkU2VyaWVzLmFkZENvdW50ZXJTYW1wbGUodHMsbWVtU3dhcHBlZCk7Y29udGludWU7fQotY29uc3QgZ21kPW5ldyB0ci5tb2RlbC5HbG9iYWxNZW1vcnlEdW1wKHRoaXMubW9kZWxfLHRzKTt0aGlzLm1vZGVsXy5nbG9iYWxNZW1vcnlEdW1wcy5wdXNoKGdtZCk7Zm9yKGNvbnN0W3BpZCxwcm9jZXNzSW5mb11vZiBPYmplY3QuZW50cmllcyhtZW1vcnlEdW1wKSl7aWYocHJvY2Vzc0luZm8ucnNzPT09dW5kZWZpbmVkKXtjb250aW51ZTt9Ci1jb25zdCBtb2RlbFByb2Nlc3M9dGhpcy5tb2RlbF8uZ2V0UHJvY2VzcyhwaWQpO2lmKG1vZGVsUHJvY2Vzcz09PXVuZGVmaW5lZCl7Y29udGludWU7fQotY29uc3QgcG1kPW5ldyB0ci5tb2RlbC5Qcm9jZXNzTWVtb3J5RHVtcChnbWQsbW9kZWxQcm9jZXNzLHRzKTtnbWQucHJvY2Vzc01lbW9yeUR1bXBzW3BpZF09cG1kO21vZGVsUHJvY2Vzcy5tZW1vcnlEdW1wcy5wdXNoKHBtZCk7dGhpcy5zZXRQcm9jZXNzTWVtb3J5RHVtcFRvdGFsc18ocG1kLHByb2Nlc3NJbmZvKTt0aGlzLnNldFByb2Nlc3NNZW1vcnlEdW1wVm1SZWdpb25zXyhwbWQscHJvY2Vzc0luZm8pO319fX0KLXRyLmltcG9ydGVyLkltcG9ydGVyLnJlZ2lzdGVyKEF0cmFjZVByb2Nlc3NEdW1wSW1wb3J0ZXIpO3JldHVybntBdHJhY2VQcm9jZXNzRHVtcEltcG9ydGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2Z1bmN0aW9uIEFjdGl2aXR5KG5hbWUsY2F0ZWdvcnkscmFuZ2UsYXJncyl7dHIubW9kZWwuVGltZWRFdmVudC5jYWxsKHRoaXMscmFuZ2UubWluKTt0aGlzLnRpdGxlPW5hbWU7dGhpcy5jYXRlZ29yeT1jYXRlZ29yeTt0aGlzLmNvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKG5hbWUpO3RoaXMuZHVyYXRpb249cmFuZ2UuZHVyYXRpb247dGhpcy5hcmdzPWFyZ3M7dGhpcy5uYW1lPW5hbWU7fQotQWN0aXZpdHkucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuVGltZWRFdmVudC5wcm90b3R5cGUsc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpe3RoaXMuc3RhcnQrPWFtb3VudDt9LGFkZEJvdW5kc1RvUmFuZ2UocmFuZ2Upe3JhbmdlLmFkZFZhbHVlKHRoaXMuc3RhcnQpO3JhbmdlLmFkZFZhbHVlKHRoaXMuZW5kKTt9fTtyZXR1cm57QWN0aXZpdHksfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIuYW5kcm9pZCcsZnVuY3Rpb24oKXtjb25zdCBJbXBvcnRlcj10ci5pbXBvcnRlci5JbXBvcnRlcjtjb25zdCBBQ1RJVklUWV9TVEFURT17Tk9ORTonbm9uZScsQ1JFQVRFRDonY3JlYXRlZCcsU1RBUlRFRDonc3RhcnRlZCcsUkVTVU1FRDoncmVzdW1lZCcsUEFVU0VEOidwYXVzZWQnLFNUT1BQRUQ6J3N0b3BwZWQnLERFU1RST1lFRDonZGVzdHJveWVkJ307Y29uc3QgYWN0aXZpdHlNYXA9e307ZnVuY3Rpb24gRXZlbnRMb2dJbXBvcnRlcihtb2RlbCxldmVudHMpe3RoaXMubW9kZWxfPW1vZGVsO3RoaXMuZXZlbnRzXz1ldmVudHM7dGhpcy5pbXBvcnRQcmlvcml0eT0zO30KLWNvbnN0IGV2ZW50TG9nQWN0aXZpdHlSRT1uZXcgUmVnRXhwKCcoXFxkezJ9LVxcZHsyfSBcXGR7Mn06XFxkezJ9OlxcZHsyfS5cXGQrKScrJ1xccysoXFxkKylcXHMrKFxcZCspXFxzKyhbQS1aXSlcXHMqJysnKGFtX1xcdyspXFxzKjooLiopJyk7Y29uc3QgYW1DcmVhdGVSRT1uZXcgUmVnRXhwKCdccypcXFsuKiwuKiwuKiwoLiopLC4qLC4qLC4qLC4qXFxdJyk7Y29uc3QgYW1Gb2N1c2VkUkU9bmV3IFJlZ0V4cCgnXHMqXFxbXFxkKywoLiopXFxdJyk7Y29uc3QgYW1Qcm9jU3RhcnRSRT1uZXcgUmVnRXhwKCdccypcXFtcXGQrLFxcZCssXFxkKywuKixhY3Rpdml0eSwoLiopXFxdJyk7Y29uc3QgYW1PblJlc3VtZVJFPW5ldyBSZWdFeHAoJ1xzKlxcW1xcZCssKC4qKVxcXScpO2NvbnN0IGFtT25QYXVzZVJFPW5ldyBSZWdFeHAoJ1xzKlxcW1xcZCssKC4qKVxcXScpO2NvbnN0IGFtTGF1bmNoVGltZVJFPW5ldyBSZWdFeHAoJ1xzKlxcW1xcZCssXFxkKywoLiopLChcXGQrKSwoXFxkKyknKTtjb25zdCBhbURlc3Ryb3lSRT1uZXcgUmVnRXhwKCdccypcXFtcXGQrLFxcZCssXFxkKywoLiopXFxdJyk7RXZlbnRMb2dJbXBvcnRlci5jYW5JbXBvcnQ9ZnVuY3Rpb24oZXZlbnRzKXtpZighKHR5cGVvZihldmVudHMpPT09J3N0cmluZyd8fGV2ZW50cyBpbnN0YW5jZW9mIFN0cmluZykpe3JldHVybiBmYWxzZTt9Ci1pZigvXjwhRE9DVFlQRSBodG1sPi8udGVzdChldmVudHMpKXJldHVybiBmYWxzZTtyZXR1cm4gZXZlbnRMb2dBY3Rpdml0eVJFLnRlc3QoZXZlbnRzKTt9O0V2ZW50TG9nSW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186SW1wb3J0ZXIucHJvdG90eXBlLGdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nRXZlbnRMb2dJbXBvcnRlcic7fSxnZXQgbW9kZWwoKXtyZXR1cm4gdGhpcy5tb2RlbF87fSxnZXRGdWxsQWN0aXZpdHlOYW1lKGNvbXBvbmVudCl7Y29uc3QgY29tcG9uZW50U3BsaXQ9Y29tcG9uZW50LnNwbGl0KCcvJyk7aWYoY29tcG9uZW50U3BsaXRbMV0uc3RhcnRzV2l0aCgnLicpKXtyZXR1cm4gY29tcG9uZW50U3BsaXRbMF0rY29tcG9uZW50U3BsaXRbMV07fQotcmV0dXJuIGNvbXBvbmVudFNwbGl0WzFdO30sZ2V0UHJvY05hbWUoY29tcG9uZW50KXtjb25zdCBjb21wb25lbnRTcGxpdD1jb21wb25lbnQuc3BsaXQoJy8nKTtyZXR1cm4gY29tcG9uZW50U3BsaXRbMF07fSxmaW5kT3JDcmVhdGVBY3Rpdml0eShhY3Rpdml0eU5hbWUpe2lmKGFjdGl2aXR5TmFtZSBpbiBhY3Rpdml0eU1hcCl7cmV0dXJuIGFjdGl2aXR5TWFwW2FjdGl2aXR5TmFtZV07fQotY29uc3QgYWN0aXZpdHk9e3N0YXRlOkFDVElWSVRZX1NUQVRFLk5PTkUsbmFtZTphY3Rpdml0eU5hbWV9O2FjdGl2aXR5TWFwW2FjdGl2aXR5TmFtZV09YWN0aXZpdHk7cmV0dXJuIGFjdGl2aXR5O30sZGVsZXRlQWN0aXZpdHkoYWN0aXZpdHlOYW1lKXtkZWxldGUgYWN0aXZpdHlNYXBbYWN0aXZpdHlOYW1lXTt9LGhhbmRsZUNyZWF0ZUFjdGl2aXR5KHRzLGFjdGl2aXR5TmFtZSl7Y29uc3QgYWN0aXZpdHk9dGhpcy5maW5kT3JDcmVhdGVBY3Rpdml0eShhY3Rpdml0eU5hbWUpO2FjdGl2aXR5LnN0YXRlPUFDVElWSVRZX1NUQVRFLkNSRUFURUQ7YWN0aXZpdHkuY3JlYXRlZFRzPXRzO30saGFuZGxlRm9jdXNBY3Rpdml0eSh0cyxwcm9jTmFtZSxhY3Rpdml0eU5hbWUpe2NvbnN0IGFjdGl2aXR5PXRoaXMuZmluZE9yQ3JlYXRlQWN0aXZpdHkoYWN0aXZpdHlOYW1lKTthY3Rpdml0eS5sYXN0Rm9jdXNlZFRzPXRzO30saGFuZGxlUHJvY1N0YXJ0Rm9yQWN0aXZpdHkodHMsYWN0aXZpdHlOYW1lKXtjb25zdCBhY3Rpdml0eT10aGlzLmZpbmRPckNyZWF0ZUFjdGl2aXR5KGFjdGl2aXR5TmFtZSk7YWN0aXZpdHkucHJvY1N0YXJ0VHM9dHM7fSxoYW5kbGVPblJlc3VtZUNhbGxlZCh0cyxwaWQsYWN0aXZpdHlOYW1lKXtjb25zdCBhY3Rpdml0eT10aGlzLmZpbmRPckNyZWF0ZUFjdGl2aXR5KGFjdGl2aXR5TmFtZSk7YWN0aXZpdHkuc3RhdGU9QUNUSVZJVFlfU1RBVEUuUkVTVU1FRDthY3Rpdml0eS5sYXN0UmVzdW1lVHM9dHM7YWN0aXZpdHkucGlkPXBpZDt9LGhhbmRsZU9uUGF1c2VDYWxsZWQodHMsYWN0aXZpdHlOYW1lKXtjb25zdCBhY3Rpdml0eT10aGlzLmZpbmRPckNyZWF0ZUFjdGl2aXR5KGFjdGl2aXR5TmFtZSk7YWN0aXZpdHkuc3RhdGU9QUNUSVZJVFlfU1RBVEUuUEFVU0VEO2FjdGl2aXR5Lmxhc3RQYXVzZVRzPXRzO2lmKHRzPnRoaXMubW9kZWxfLmJvdW5kcy5taW4mJnRzPHRoaXMubW9kZWxfLmJvdW5kcy5tYXgpe3RoaXMuYWRkQWN0aXZpdHlUb1Byb2Nlc3MoYWN0aXZpdHkpO319LGhhbmRsZUxhdW5jaFRpbWUodHMsYWN0aXZpdHlOYW1lLGxhdW5jaFRpbWUpe2NvbnN0IGFjdGl2aXR5PXRoaXMuZmluZE9yQ3JlYXRlQWN0aXZpdHkoYWN0aXZpdHlOYW1lKTthY3Rpdml0eS5sYXVuY2hUaW1lPWxhdW5jaFRpbWU7fSxoYW5kbGVEZXN0cm95QWN0aXZpdHkodHMsYWN0aXZpdHlOYW1lKXt0aGlzLmRlbGV0ZUFjdGl2aXR5KGFjdGl2aXR5TmFtZSk7fSxhZGRBY3Rpdml0eVRvUHJvY2VzcyhhY3Rpdml0eSl7aWYoYWN0aXZpdHkucGlkPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBwcm9jZXNzPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhhY3Rpdml0eS5waWQpO2NvbnN0IHJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShNYXRoLm1heCh0aGlzLm1vZGVsXy5ib3VuZHMubWluLGFjdGl2aXR5Lmxhc3RSZXN1bWVUcyksYWN0aXZpdHkubGFzdFBhdXNlVHMpO2NvbnN0IG5ld0FjdGl2aXR5PW5ldyB0ci5tb2RlbC5BY3Rpdml0eShhY3Rpdml0eS5uYW1lLCdBbmRyb2lkIEFjdGl2aXR5JyxyYW5nZSx7Y3JlYXRlZDphY3Rpdml0eS5jcmVhdGVkVHMscHJvY3N0YXJ0OmFjdGl2aXR5LnByb2NTdGFydFRzLGxhc3Rmb2N1czphY3Rpdml0eS5sYXN0Rm9jdXNlZFRzfSk7cHJvY2Vzcy5hY3Rpdml0aWVzLnB1c2gobmV3QWN0aXZpdHkpO30scGFyc2VBbUxpbmVfKGxpbmUpe2xldCBtYXRjaD1ldmVudExvZ0FjdGl2aXR5UkUuZXhlYyhsaW5lKTtpZighbWF0Y2gpcmV0dXJuO2NvbnN0IGZpcnN0UmVhbHRpbWVUcz10aGlzLm1vZGVsXy5ib3VuZHMubWluLQotdGhpcy5tb2RlbF8ucmVhbHRpbWVfdG9fbW9ub3RvbmljX29mZnNldF9tcztjb25zdCB5ZWFyPW5ldyBEYXRlKGZpcnN0UmVhbHRpbWVUcykuZ2V0RnVsbFllYXIoKTtjb25zdCB0cz1tYXRjaFsxXS5zdWJzdHJpbmcoMCw1KSsnLScreWVhcisnICcrCi1tYXRjaFsxXS5zdWJzdHJpbmcoNSxtYXRjaFsxXS5sZW5ndGgpO2NvbnN0IG1vbm90b25pY1RzPURhdGUucGFyc2UodHMpKwotdGhpcy5tb2RlbF8ucmVhbHRpbWVfdG9fbW9ub3RvbmljX29mZnNldF9tcztjb25zdCBwaWQ9bWF0Y2hbMl07Y29uc3QgYWN0aW9uPW1hdGNoWzVdO2NvbnN0IGRhdGE9bWF0Y2hbNl07aWYoYWN0aW9uPT09J2FtX2NyZWF0ZV9hY3Rpdml0eScpe21hdGNoPWFtQ3JlYXRlUkUuZXhlYyhkYXRhKTtpZihtYXRjaCYmbWF0Y2gubGVuZ3RoPj0yKXt0aGlzLmhhbmRsZUNyZWF0ZUFjdGl2aXR5KG1vbm90b25pY1RzLHRoaXMuZ2V0RnVsbEFjdGl2aXR5TmFtZShtYXRjaFsxXSkpO319ZWxzZSBpZihhY3Rpb249PT0nYW1fZm9jdXNlZF9hY3Rpdml0eScpe21hdGNoPWFtRm9jdXNlZFJFLmV4ZWMoZGF0YSk7aWYobWF0Y2gmJm1hdGNoLmxlbmd0aD49Mil7dGhpcy5oYW5kbGVGb2N1c0FjdGl2aXR5KG1vbm90b25pY1RzLHRoaXMuZ2V0UHJvY05hbWUobWF0Y2hbMV0pLHRoaXMuZ2V0RnVsbEFjdGl2aXR5TmFtZShtYXRjaFsxXSkpO319ZWxzZSBpZihhY3Rpb249PT0nYW1fcHJvY19zdGFydCcpe21hdGNoPWFtUHJvY1N0YXJ0UkUuZXhlYyhkYXRhKTtpZihtYXRjaCYmbWF0Y2gubGVuZ3RoPj0yKXt0aGlzLmhhbmRsZVByb2NTdGFydEZvckFjdGl2aXR5KG1vbm90b25pY1RzLHRoaXMuZ2V0RnVsbEFjdGl2aXR5TmFtZShtYXRjaFsxXSkpO319ZWxzZSBpZihhY3Rpb249PT0nYW1fb25fcmVzdW1lX2NhbGxlZCcpe21hdGNoPWFtT25SZXN1bWVSRS5leGVjKGRhdGEpO2lmKG1hdGNoJiZtYXRjaC5sZW5ndGg+PTIpe3RoaXMuaGFuZGxlT25SZXN1bWVDYWxsZWQobW9ub3RvbmljVHMscGlkLG1hdGNoWzFdKTt9fWVsc2UgaWYoYWN0aW9uPT09J2FtX29uX3BhdXNlZF9jYWxsZWQnKXttYXRjaD1hbU9uUGF1c2VSRS5leGVjKGRhdGEpO2lmKG1hdGNoJiZtYXRjaC5sZW5ndGg+PTIpe3RoaXMuaGFuZGxlT25QYXVzZUNhbGxlZChtb25vdG9uaWNUcyxtYXRjaFsxXSk7fX1lbHNlIGlmKGFjdGlvbj09PSdhbV9hY3Rpdml0eV9sYXVuY2hfdGltZScpe21hdGNoPWFtTGF1bmNoVGltZVJFLmV4ZWMoZGF0YSk7dGhpcy5oYW5kbGVMYXVuY2hUaW1lKG1vbm90b25pY1RzLHRoaXMuZ2V0RnVsbEFjdGl2aXR5TmFtZShtYXRjaFsxXSksbWF0Y2hbMl0pO31lbHNlIGlmKGFjdGlvbj09PSdhbV9kZXN0cm95X2FjdGl2aXR5Jyl7bWF0Y2g9YW1EZXN0cm95UkUuZXhlYyhkYXRhKTtpZihtYXRjaCYmbWF0Y2gubGVuZ3RoPT09Mil7dGhpcy5oYW5kbGVEZXN0cm95QWN0aXZpdHkobW9ub3RvbmljVHMsdGhpcy5nZXRGdWxsQWN0aXZpdHlOYW1lKG1hdGNoWzFdKSk7fX19LGltcG9ydEV2ZW50cygpe2lmKGlzTmFOKHRoaXMubW9kZWxfLnJlYWx0aW1lX3RvX21vbm90b25pY19vZmZzZXRfbXMpKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidldmVuZ19sb2dfY2xvY2tfc3luYycsbWVzc2FnZTonTmVlZCBhIHRyYWNlX2V2ZW50X2Nsb2NrX3N5bmMgdG8gbWFwIHJlYWx0aW1lIHRvIGltcG9ydC4nfSk7cmV0dXJuO30KLXRoaXMubW9kZWxfLnVwZGF0ZUJvdW5kcygpO2NvbnN0IGxpbmVzPXRoaXMuZXZlbnRzXy5zcGxpdCgnXG4nKTtsaW5lcy5mb3JFYWNoKHRoaXMucGFyc2VBbUxpbmVfLHRoaXMpO2Zvcihjb25zdCBhY3Rpdml0eU5hbWUgaW4gYWN0aXZpdHlNYXApe2NvbnN0IGFjdGl2aXR5PWFjdGl2aXR5TWFwW2FjdGl2aXR5TmFtZV07aWYoYWN0aXZpdHkuc3RhdGU9PT1BQ1RJVklUWV9TVEFURS5SRVNVTUVEKXthY3Rpdml0eS5sYXN0UGF1c2VUcz10aGlzLm1vZGVsXy5ib3VuZHMubWF4O3RoaXMuYWRkQWN0aXZpdHlUb1Byb2Nlc3MoYWN0aXZpdHkpO319fX07SW1wb3J0ZXIucmVnaXN0ZXIoRXZlbnRMb2dJbXBvcnRlcik7cmV0dXJue0V2ZW50TG9nSW1wb3J0ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIuYW5kcm9pZC5wcm9jZXNzX2RhdGEnLGZ1bmN0aW9uKCl7Y29uc3QgSW1wb3J0ZXI9dHIuaW1wb3J0ZXIuSW1wb3J0ZXI7Y29uc3QgUFJPQ0VTU19EVU1QX0hFQURFUj0nUFJPQ0VTUyBEVU1QJztmdW5jdGlvbiBQcm9jZXNzRGF0YUltcG9ydGVyKG1vZGVsLHByb2Nlc3NEYXRhKXt0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLnByb2Nlc3NEYXRhTGluZXM9cHJvY2Vzc0RhdGEuc3BsaXQoJ1xuJyk7dGhpcy5pbXBvcnRQcmlvcml0eT0zO30KLVByb2Nlc3NEYXRhSW1wb3J0ZXIuY2FuSW1wb3J0PWZ1bmN0aW9uKGV2ZW50cyl7aWYoISh0eXBlb2YoZXZlbnRzKT09PSdzdHJpbmcnfHxldmVudHMgaW5zdGFuY2VvZiBTdHJpbmcpKXtyZXR1cm4gZmFsc2U7fQotaWYoZXZlbnRzLnNwbGl0KCdcbicpWzBdPT09UFJPQ0VTU19EVU1QX0hFQURFUil7cmV0dXJuIHRydWU7fQotcmV0dXJuIGZhbHNlO307UHJvY2Vzc0RhdGFJbXBvcnRlci5wcm90b3R5cGU9e19fcHJvdG9fXzpJbXBvcnRlci5wcm90b3R5cGUsZ2V0IGltcG9ydGVyTmFtZSgpe3JldHVybidQcm9jZXNzRGF0YUltcG9ydGVyJzt9LGdldCBtb2RlbCgpe3JldHVybiB0aGlzLm1vZGVsXzt9LHBhcnNlRXZlbnREYXRhKGRhdGEpe2NvbnN0IGFsbER1bXBlZFByb2Nlc3Nlcz17fTtsZXQgcGFyc2VQcm9jZXNzZXM9ZmFsc2U7bGV0IHBhcnNlVGhyZWFkcz1mYWxzZTtsZXQgbGVnYWN5PWZhbHNlO2ZvcihsZXQgaT0xO2k8ZGF0YS5sZW5ndGg7aSsrKXtjb25zdCBjb2xzPWRhdGFbaV0uc3BsaXQoL1xzKy8pO2lmKGNvbHNbMF0uc3RhcnRzV2l0aCgnVVNFUicpKXtpZihwYXJzZVByb2Nlc3Nlcyl7cGFyc2VQcm9jZXNzZXM9ZmFsc2U7cGFyc2VUaHJlYWRzPXRydWU7fWVsc2V7cGFyc2VUaHJlYWRzPWZhbHNlO3BhcnNlUHJvY2Vzc2VzPXRydWU7fQotY29uc3QgY29sQ291bnQ9Y29scy5sZW5ndGg7aWYocGFyc2VQcm9jZXNzZXMmJmNvbENvdW50PT09OSl7bGVnYWN5PWZhbHNlO31lbHNlIGlmKHBhcnNlUHJvY2Vzc2VzJiZjb2xDb3VudD09PTgpe2xlZ2FjeT10cnVlO30KLWNvbnRpbnVlO30KLWlmKHBhcnNlUHJvY2Vzc2VzKXtjb25zdCBwaWQ9TnVtYmVyKGNvbHNbMV0pO2lmKGFsbER1bXBlZFByb2Nlc3Nlc1twaWRdPT09dW5kZWZpbmVkKXthbGxEdW1wZWRQcm9jZXNzZXNbcGlkXT17fTt9Ci1hbGxEdW1wZWRQcm9jZXNzZXNbcGlkXT17J25hbWUnOmNvbHNbOF0scGlkLCdjb21tJzpjb2xzWzldfTtjb250aW51ZTt9Ci1pZihwYXJzZVRocmVhZHMpe2xldCBwaWQ7bGV0IHRpZDtsZXQgbmFtZTtpZihsZWdhY3kpe3BpZD1OdW1iZXIoY29sc1sxXSk7aWYoYWxsRHVtcGVkUHJvY2Vzc2VzW3BpZF0hPT11bmRlZmluZWQpe3RpZD1waWQ7fWVsc2V7dGlkPXBpZDtwaWQ9TnVtYmVyKGNvbHNbMl0pO30KLW5hbWU9Y29scy5zbGljZSg4KS5qb2luKCcgJyk7fWVsc2V7cGlkPU51bWJlcihjb2xzWzFdKTt0aWQ9TnVtYmVyKGNvbHNbMl0pO25hbWU9Y29scy5zbGljZSgzKS5qb2luKCcgJyk7fQotaWYoYWxsRHVtcGVkUHJvY2Vzc2VzW3BpZF09PT11bmRlZmluZWQpY29udGludWU7aWYoYWxsRHVtcGVkUHJvY2Vzc2VzW3BpZF0udGhyZWFkcz09PXVuZGVmaW5lZCl7YWxsRHVtcGVkUHJvY2Vzc2VzW3BpZF0udGhyZWFkcz17fTt9Ci1hbGxEdW1wZWRQcm9jZXNzZXNbcGlkXS50aHJlYWRzW3RpZF09e3RpZCxuYW1lfTtjb250aW51ZTt9fQotcmV0dXJuIGFsbER1bXBlZFByb2Nlc3Nlczt9LGltcG9ydEV2ZW50cygpe2NvbnN0IGFsbER1bXBlZFByb2Nlc3Nlcz10aGlzLnBhcnNlRXZlbnREYXRhKHRoaXMucHJvY2Vzc0RhdGFMaW5lcyk7Y29uc3QgbW9kZWxQcm9jZXNzZXM9dGhpcy5tb2RlbF8uZ2V0QWxsUHJvY2Vzc2VzKCk7Zm9yKGxldCBpPTA7aTxtb2RlbFByb2Nlc3Nlcy5sZW5ndGg7aSsrKXtjb25zdCBtb2RlbFByb2Nlc3M9bW9kZWxQcm9jZXNzZXNbaV07Y29uc3QgcGlkPW1vZGVsUHJvY2Vzcy5waWQ7Y29uc3QgZHVtcGVkUHJvY2Vzcz1hbGxEdW1wZWRQcm9jZXNzZXNbcGlkXTtpZihkdW1wZWRQcm9jZXNzPT09dW5kZWZpbmVkKXtjb250aW51ZTt9Ci1tb2RlbFByb2Nlc3MubmFtZT1kdW1wZWRQcm9jZXNzLm5hbWU7Y29uc3QgcHJvY2Vzc0R1bXBUaHJlYWRzPWR1bXBlZFByb2Nlc3MudGhyZWFkcztpZihwcm9jZXNzRHVtcFRocmVhZHMhPT11bmRlZmluZWQpe2Zvcihjb25zdCB0aWQgaW4gbW9kZWxQcm9jZXNzLnRocmVhZHMpe2NvbnN0IG1vZGVsVGhyZWFkPW1vZGVsUHJvY2Vzcy50aHJlYWRzW3RpZF07aWYoTnVtYmVyKHBpZCk9PT1OdW1iZXIodGlkKSl7bW9kZWxUaHJlYWQubmFtZT0nVUkgdGhyZWFkJzt9ZWxzZSBpZihtb2RlbFRocmVhZC5uYW1lPT09JzwuLi4+Jyl7aWYocHJvY2Vzc0R1bXBUaHJlYWRzW3RpZF0hPT11bmRlZmluZWQpe21vZGVsVGhyZWFkLm5hbWU9cHJvY2Vzc0R1bXBUaHJlYWRzW3RpZF0ubmFtZTt9fX19fX19O0ltcG9ydGVyLnJlZ2lzdGVyKFByb2Nlc3NEYXRhSW1wb3J0ZXIpO3JldHVybntQcm9jZXNzRGF0YUltcG9ydGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmJhdHRvcicsZnVuY3Rpb24oKXtmdW5jdGlvbiBCYXR0b3JJbXBvcnRlcihtb2RlbCxldmVudHMpe3RoaXMuaW1wb3J0UHJpb3JpdHk9Mzt0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLnNhbXBsZXNfPVtdO3RoaXMuc3luY1RpbWVzdGFtcHNCeUlkXz1uZXcgTWFwKCk7dGhpcy5wYXJzZVRyYWNlXyhldmVudHMpO30KLWNvbnN0IGJhdHRvckRhdGFMaW5lUkU9bmV3IFJlZ0V4cCgnXigtP1xcZCtcXC5cXGQrKVxccysoLT9cXGQrXFwuXFxkKylcXHMrKC0/XFxkK1xcLlxcZCspJysnKD86XFxzKzwoXFxTKyk+KT8kJyk7Y29uc3QgYmF0dG9ySGVhZGVyTGluZVJFPS9eIyBCYXR0T3IvO0JhdHRvckltcG9ydGVyLmNhbkltcG9ydD1mdW5jdGlvbihldmVudHMpe2lmKCEodHlwZW9mKGV2ZW50cyk9PT0nc3RyaW5nJ3x8ZXZlbnRzIGluc3RhbmNlb2YgU3RyaW5nKSl7cmV0dXJuIGZhbHNlO30KLXJldHVybiBiYXR0b3JIZWFkZXJMaW5lUkUudGVzdChldmVudHMpO307QmF0dG9ySW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucHJvdG90eXBlLGdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nQmF0dG9ySW1wb3J0ZXInO30sZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30saW1wb3J0Q2xvY2tTeW5jTWFya2Vycygpe2Zvcihjb25zdFtzeW5jSWQsdHNdb2YgdGhpcy5zeW5jVGltZXN0YW1wc0J5SWRfKXt0aGlzLm1vZGVsXy5jbG9ja1N5bmNNYW5hZ2VyLmFkZENsb2NrU3luY01hcmtlcih0ci5tb2RlbC5DbG9ja0RvbWFpbklkLkJBVFRPUixzeW5jSWQsdHMpO319LGltcG9ydEV2ZW50cygpe2lmKHRoaXMubW9kZWxfLmRldmljZS5wb3dlclNlcmllcyl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonaW1wb3J0X2Vycm9yJyxtZXNzYWdlOidQb3dlciBjb3VudGVyIGV4aXN0cywgY2FuIG5vdCBpbXBvcnQgQmF0dE9yIHBvd2VyIHRyYWNlLid9KTtyZXR1cm47fQotY29uc3QgbW9kZWxUaW1lVHJhbnNmb3JtZXI9dGhpcy5tb2RlbF8uY2xvY2tTeW5jTWFuYWdlci5nZXRNb2RlbFRpbWVUcmFuc2Zvcm1lcih0ci5tb2RlbC5DbG9ja0RvbWFpbklkLkJBVFRPUik7Y29uc3QgcG93ZXJTZXJpZXM9dGhpcy5tb2RlbF8uZGV2aWNlLnBvd2VyU2VyaWVzPW5ldyB0ci5tb2RlbC5Qb3dlclNlcmllcyh0aGlzLm1vZGVsXy5kZXZpY2UpO2ZvcihsZXQgaT0wO2k8dGhpcy5zYW1wbGVzXy5sZW5ndGg7aSsrKXtjb25zdCBzYW1wbGU9dGhpcy5zYW1wbGVzX1tpXTtwb3dlclNlcmllcy5hZGRQb3dlclNhbXBsZShtb2RlbFRpbWVUcmFuc2Zvcm1lcihzYW1wbGUudHMpLHNhbXBsZS5wb3dlckluVyk7fX0scGFyc2VUcmFjZV8odHJhY2Upe2NvbnN0IGxpbmVzPXRyYWNlLnNwbGl0KCdcbicpO2ZvcihsZXQgbGluZSBvZiBsaW5lcyl7bGluZT1saW5lLnRyaW0oKTtpZihsaW5lLmxlbmd0aD09PTApY29udGludWU7aWYobGluZS5zdGFydHNXaXRoKCcjJykpY29udGludWU7Y29uc3QgZ3JvdXBzPWJhdHRvckRhdGFMaW5lUkUuZXhlYyhsaW5lKTtpZighZ3JvdXBzKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidwYXJzZV9lcnJvcicsbWVzc2FnZTonVW5yZWNvZ25pemVkIGxpbmUgaW4gQmF0dE9yIHRyYWNlOiAnK2xpbmV9KTtjb250aW51ZTt9Ci1jb25zdCB0cz1wYXJzZUZsb2F0KGdyb3Vwc1sxXSk7Y29uc3Qgdm9sdGFnZUluVj10ci5iLmNvbnZlcnRVbml0KHBhcnNlRmxvYXQoZ3JvdXBzWzJdKSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEksdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk5PTkUpO2NvbnN0IGN1cnJlbnRJbkE9dHIuYi5jb252ZXJ0VW5pdChwYXJzZUZsb2F0KGdyb3Vwc1szXSksdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk1JTExJLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5OT05FKTtjb25zdCBzeW5jSWQ9Z3JvdXBzWzRdO2lmKHN5bmNJZCl7dGhpcy5zeW5jVGltZXN0YW1wc0J5SWRfLnNldChzeW5jSWQsdHMpO30KLWlmKHZvbHRhZ2VJblY8MHx8Y3VycmVudEluQTwwKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidwYXJzZV9lcnJvcicsbWVzc2FnZTonVGhlIGZvbGxvd2luZyBsaW5lIGluIHRoZSBCYXR0T3IgdHJhY2UgaGFzIGEgbmVnYXRpdmUgJysndm9sdGFnZSBvciBjdXJyZW50LCBuZWl0aGVyIG9mIHdoaWNoIGFyZSBhbGxvd2VkOiAnK2xpbmUrJy4gQSBjb21tb24gY2F1c2Ugb2YgdGhpcyBpcyB0aGF0IHRoZSBkZXZpY2UgaXMgY2hhcmdpbmcgJysnd2hpbGUgdGhlIHRyYWNlIGlzIGJlaW5nIHJlY29yZGVkLid9KTtjb250aW51ZTt9Ci10aGlzLnNhbXBsZXNfLnB1c2gobmV3IFNhbXBsZSh0cyx2b2x0YWdlSW5WLGN1cnJlbnRJbkEpKTt9fX07ZnVuY3Rpb24gU2FtcGxlKHRzLHZvbHRhZ2VJblYsY3VycmVudEluQSl7dGhpcy50cz10czt0aGlzLnZvbHRhZ2VJblY9dm9sdGFnZUluVjt0aGlzLmN1cnJlbnRJbkE9Y3VycmVudEluQTt9Ci1TYW1wbGUucHJvdG90eXBlPXtnZXQgcG93ZXJJblcoKXtyZXR1cm4gdGhpcy52b2x0YWdlSW5WKnRoaXMuY3VycmVudEluQTt9fTt0ci5pbXBvcnRlci5JbXBvcnRlci5yZWdpc3RlcihCYXR0b3JJbXBvcnRlcik7cmV0dXJue0JhdHRvckltcG9ydGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmRkbXMnLGZ1bmN0aW9uKCl7Y29uc3Qga1BpZD0wO2NvbnN0IGtDYXRlZ29yeT0namF2YSc7Y29uc3Qga01ldGhvZEx1dEVuZE1hcmtlcj0nXG4qZW5kXG4nO2NvbnN0IGtUaHJlYWRzU3RhcnQ9J1xuKnRocmVhZHNcbic7Y29uc3Qga01ldGhvZHNTdGFydD0nXG4qbWV0aG9kc1xuJztjb25zdCBrVHJhY2VNZXRob2RFbnRlcj0weDAwO2NvbnN0IGtUcmFjZU1ldGhvZEV4aXQ9MHgwMTtjb25zdCBrVHJhY2VVbnJvbGw9MHgwMjtjb25zdCBrVHJhY2VNZXRob2RBY3Rpb25NYXNrPTB4MDM7Y29uc3Qga1RyYWNlSGVhZGVyTGVuZ3RoPTMyO2NvbnN0IGtUcmFjZU1hZ2ljVmFsdWU9MHg1NzRmNGM1Mztjb25zdCBrVHJhY2VWZXJzaW9uU2luZ2xlQ2xvY2s9Mjtjb25zdCBrVHJhY2VWZXJzaW9uRHVhbENsb2NrPTM7Y29uc3Qga1RyYWNlUmVjb3JkU2l6ZVNpbmdsZUNsb2NrPTEwO2NvbnN0IGtUcmFjZVJlY29yZFNpemVEdWFsQ2xvY2s9MTQ7ZnVuY3Rpb24gUmVhZGVyKHN0cmluZ1BheWxvYWQpe3RoaXMucG9zaXRpb25fPTA7dGhpcy5kYXRhXz1uZXcgVWludDhBcnJheShzdHJpbmdQYXlsb2FkLmxlbmd0aCk7Zm9yKGxldCBpPTA7aTxzdHJpbmdQYXlsb2FkLmxlbmd0aDsrK2kpe3RoaXMuZGF0YV9baV09c3RyaW5nUGF5bG9hZC5jaGFyQ29kZUF0KGkpO319Ci1SZWFkZXIucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZSx1aW50OCgpe2NvbnN0IHJlc3VsdD10aGlzLmRhdGFfW3RoaXMucG9zaXRpb25fXTt0aGlzLnBvc2l0aW9uXys9MTtyZXR1cm4gcmVzdWx0O30sdWludDE2KCl7bGV0IHJlc3VsdD0wO3Jlc3VsdCs9dGhpcy51aW50OCgpO3Jlc3VsdCs9dGhpcy51aW50OCgpPDw4O3JldHVybiByZXN1bHQ7fSx1aW50MzIoKXtsZXQgcmVzdWx0PTA7cmVzdWx0Kz10aGlzLnVpbnQ4KCk7cmVzdWx0Kz10aGlzLnVpbnQ4KCk8PDg7cmVzdWx0Kz10aGlzLnVpbnQ4KCk8PDE2O3Jlc3VsdCs9dGhpcy51aW50OCgpPDwyNDtyZXR1cm4gcmVzdWx0O30sdWludDY0KCl7Y29uc3QgbG93PXRoaXMudWludDMyKCk7Y29uc3QgaGlnaD10aGlzLnVpbnQzMigpO2NvbnN0IGxvd1N0cj0oJzAwMDAwMDAnK2xvdy50b1N0cmluZygxNikpLnN1YnN0cigtOCk7Y29uc3QgaGlnaFN0cj0oJzAwMDAwMDAnK2hpZ2gudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTgpO2NvbnN0IHJlc3VsdD1oaWdoU3RyK2xvd1N0cjtyZXR1cm4gcmVzdWx0O30sc2Vla1RvKHBvc2l0aW9uKXt0aGlzLnBvc2l0aW9uXz1wb3NpdGlvbjt9LGhhc01vcmUoKXtyZXR1cm4gdGhpcy5wb3NpdGlvbl88dGhpcy5kYXRhXy5sZW5ndGg7fX07ZnVuY3Rpb24gRGRtc0ltcG9ydGVyKG1vZGVsLGRhdGEpe3RoaXMuaW1wb3J0UHJpb3JpdHk9Mzt0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLmRhdGFfPWRhdGE7fQotRGRtc0ltcG9ydGVyLmNhbkltcG9ydD1mdW5jdGlvbihkYXRhKXtpZih0eXBlb2YoZGF0YSk9PT0nc3RyaW5nJ3x8ZGF0YSBpbnN0YW5jZW9mIFN0cmluZyl7Y29uc3QgaGVhZGVyPWRhdGEuc2xpY2UoMCwxMDAwKTtyZXR1cm4gaGVhZGVyLnN0YXJ0c1dpdGgoJyp2ZXJzaW9uXG4nKSYmaGVhZGVyLmluZGV4T2YoJ1xudm09Jyk+PTAmJmhlYWRlci5pbmRleE9mKGtUaHJlYWRzU3RhcnQpPj0wO30KLXJldHVybiBmYWxzZTt9O0RkbXNJbXBvcnRlci5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5pbXBvcnRlci5JbXBvcnRlci5wcm90b3R5cGUsZ2V0IGltcG9ydGVyTmFtZSgpe3JldHVybidEZG1zSW1wb3J0ZXInO30sZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30saW1wb3J0RXZlbnRzKCl7Y29uc3QgZGl2aWRlcj10aGlzLmRhdGFfLmluZGV4T2Yoa01ldGhvZEx1dEVuZE1hcmtlcikrCi1rTWV0aG9kTHV0RW5kTWFya2VyLmxlbmd0aDt0aGlzLm1ldGFkYXRhXz10aGlzLmRhdGFfLnNsaWNlKDAsZGl2aWRlcik7dGhpcy5tZXRob2RzXz17fTt0aGlzLnBhcnNlVGhyZWFkcygpO3RoaXMucGFyc2VNZXRob2RzKCk7Y29uc3QgdHJhY2VSZWFkZXI9bmV3IFJlYWRlcih0aGlzLmRhdGFfLnNsaWNlKGRpdmlkZXIpKTtjb25zdCBtYWdpYz10cmFjZVJlYWRlci51aW50MzIoKTtpZihtYWdpYyE9PWtUcmFjZU1hZ2ljVmFsdWUpe3Rocm93IEVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggbWFnaWMgdmFsdWUnKTt9Ci10aGlzLnZlcnNpb25fPXRyYWNlUmVhZGVyLnVpbnQxNigpO2lmKHRoaXMudmVyc2lvbl8hPT1rVHJhY2VWZXJzaW9uRHVhbENsb2NrKXt0aHJvdyBFcnJvcignVW5rbm93biB2ZXJzaW9uJyk7fQotY29uc3QgZGF0YU9mZmVzdD10cmFjZVJlYWRlci51aW50MTYoKTtjb25zdCBzdGFydERhdGVUaW1lPXRyYWNlUmVhZGVyLnVpbnQ2NCgpO2NvbnN0IHJlY29yZFNpemU9dHJhY2VSZWFkZXIudWludDE2KCk7dHJhY2VSZWFkZXIuc2Vla1RvKGRhdGFPZmZlc3QpO3doaWxlKHRyYWNlUmVhZGVyLmhhc01vcmUoKSl7dGhpcy5wYXJzZVRyYWNlRW50cnkodHJhY2VSZWFkZXIpO319LHBhcnNlVHJhY2VFbnRyeShyZWFkZXIpe2NvbnN0IHRpZD1yZWFkZXIudWludDE2KCk7Y29uc3QgbWV0aG9kUGFja2VkPXJlYWRlci51aW50MzIoKTtjb25zdCBjcHVTaW5jZVN0YXJ0PXJlYWRlci51aW50MzIoKTtjb25zdCB3YWxsQ2xvY2tTaW5jZVN0YXJ0PXJlYWRlci51aW50MzIoKTtsZXQgbWV0aG9kPW1ldGhvZFBhY2tlZCZ+a1RyYWNlTWV0aG9kQWN0aW9uTWFzaztjb25zdCBhY3Rpb249bWV0aG9kUGFja2VkJmtUcmFjZU1ldGhvZEFjdGlvbk1hc2s7Y29uc3QgdGhyZWFkPXRoaXMuZ2V0VGlkKHRpZCk7bWV0aG9kPXRoaXMuZ2V0TWV0aG9kTmFtZShtZXRob2QpO2lmKGFjdGlvbj09PWtUcmFjZU1ldGhvZEVudGVyKXt0aHJlYWQuc2xpY2VHcm91cC5iZWdpblNsaWNlKGtDYXRlZ29yeSxtZXRob2Qsd2FsbENsb2NrU2luY2VTdGFydCx1bmRlZmluZWQsY3B1U2luY2VTdGFydCk7fWVsc2UgaWYodGhyZWFkLnNsaWNlR3JvdXAub3BlblNsaWNlQ291bnQpe3RocmVhZC5zbGljZUdyb3VwLmVuZFNsaWNlKHdhbGxDbG9ja1NpbmNlU3RhcnQsY3B1U2luY2VTdGFydCk7fX0scGFyc2VUaHJlYWRzKCl7bGV0IHRocmVhZHM9dGhpcy5tZXRhZGF0YV8uc2xpY2UodGhpcy5tZXRhZGF0YV8uaW5kZXhPZihrVGhyZWFkc1N0YXJ0KSsKLWtUaHJlYWRzU3RhcnQubGVuZ3RoKTt0aHJlYWRzPXRocmVhZHMuc2xpY2UoMCx0aHJlYWRzLmluZGV4T2YoJ1xuKicpKTt0aHJlYWRzPXRocmVhZHMuc3BsaXQoJ1xuJyk7dGhyZWFkcy5mb3JFYWNoKHRoaXMucGFyc2VUaHJlYWQuYmluZCh0aGlzKSk7fSxwYXJzZVRocmVhZCh0aHJlYWRMaW5lKXtjb25zdCB0aWQ9dGhyZWFkTGluZS5zbGljZSgwLHRocmVhZExpbmUuaW5kZXhPZignXHQnKSk7Y29uc3QgdGhyZWFkPXRoaXMuZ2V0VGlkKHBhcnNlSW50KHRpZCkpO3RocmVhZC5uYW1lPXRocmVhZExpbmUuc2xpY2UodGhyZWFkTGluZS5pbmRleE9mKCdcdCcpKzEpO30sZ2V0VGlkKHRpZCl7cmV0dXJuIHRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhrUGlkKS5nZXRPckNyZWF0ZVRocmVhZCh0aWQpO30scGFyc2VNZXRob2RzKCl7bGV0IG1ldGhvZHM9dGhpcy5tZXRhZGF0YV8uc2xpY2UodGhpcy5tZXRhZGF0YV8uaW5kZXhPZihrTWV0aG9kc1N0YXJ0KSsKLWtNZXRob2RzU3RhcnQubGVuZ3RoKTttZXRob2RzPW1ldGhvZHMuc2xpY2UoMCxtZXRob2RzLmluZGV4T2YoJ1xuKicpKTttZXRob2RzPW1ldGhvZHMuc3BsaXQoJ1xuJyk7bWV0aG9kcy5mb3JFYWNoKHRoaXMucGFyc2VNZXRob2QuYmluZCh0aGlzKSk7fSxwYXJzZU1ldGhvZChtZXRob2RMaW5lKXtjb25zdCBkYXRhPW1ldGhvZExpbmUuc3BsaXQoJ1x0Jyk7Y29uc3QgbWV0aG9kSWQ9cGFyc2VJbnQoZGF0YVswXSk7Y29uc3QgbWV0aG9kTmFtZT1kYXRhWzFdKycuJytkYXRhWzJdK2RhdGFbM107dGhpcy5hZGRNZXRob2QobWV0aG9kSWQsbWV0aG9kTmFtZSk7fSxhZGRNZXRob2QobWV0aG9kSWQsbWV0aG9kTmFtZSl7dGhpcy5tZXRob2RzX1ttZXRob2RJZF09bWV0aG9kTmFtZTt9LGdldE1ldGhvZE5hbWUobWV0aG9kSWQpe3JldHVybiB0aGlzLm1ldGhvZHNfW21ldGhvZElkXTt9fTt0ci5pbXBvcnRlci5JbXBvcnRlci5yZWdpc3RlcihEZG1zSW1wb3J0ZXIpO3JldHVybntEZG1zSW1wb3J0ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuYXVkaXRzJyxmdW5jdGlvbigpe2NsYXNzIExvd01lbW9yeUF1ZGl0b3IgZXh0ZW5kcyB0ci5jLkF1ZGl0b3J7Y29uc3RydWN0b3IobW9kZWwpe3N1cGVyKCk7dGhpcy5tb2RlbF89bW9kZWw7fQotcnVuQW5ub3RhdGUoKXt0aGlzLm1vZGVsXy5kZXZpY2UubG93TWVtb3J5RXZlbnRzPXRoaXMuZ2V0TG93TWVtb3J5RXZlbnRzXygpO30KLWdldExvd01lbW9yeUV2ZW50c18oKXtjb25zdCBtb2RlbD10aGlzLm1vZGVsXztjb25zdCByZXN1bHQ9W107Zm9yKGNvbnN0IHByb2Nlc3Mgb2YgbW9kZWwuZ2V0QWxsUHJvY2Vzc2VzKCkpe2Zvcihjb25zdCBlIG9mIHByb2Nlc3MuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZighKGUgaW5zdGFuY2VvZiB0ci5tb2RlbC5UaHJlYWRTbGljZSl8fGUuZHVyYXRpb24hPT0wKXtjb250aW51ZTt9Ci1pZihlLmNhdGVnb3J5IT09J2xvd21lbW9yeScpe2NvbnRpbnVlO30KLXJlc3VsdC5wdXNoKGUpO319Ci1yZXR1cm4gcmVzdWx0O319Ci10ci5jLkF1ZGl0b3IucmVnaXN0ZXIoTG93TWVtb3J5QXVkaXRvcik7cmV0dXJue0xvd01lbW9yeUF1ZGl0b3J9O30pOyd1c2Ugc3RyaWN0JztmdW5jdGlvbiBmaWx0ZXJEdXBsaWNhdGVUaW1lc3RhbXBzKHRpbWVzdGFtcHMpe2NvbnN0IGRlZHVwZWRUaW1lc3RhbXBzPVtdO2xldCBsYXN0VHM9MDtmb3IoY29uc3QgdHMgb2YgdGltZXN0YW1wcyl7aWYodHMtbGFzdFRzPj0xKXtkZWR1cGVkVGltZXN0YW1wcy5wdXNoKHRzKTtsYXN0VHM9dHM7fX0KLXJldHVybiBkZWR1cGVkVGltZXN0YW1wczt9Ci10ci5leHBvcnRUbygndHIuZS5hdWRpdHMnLGZ1bmN0aW9uKCl7Y29uc3QgVlNZTkNfQ09VTlRFUl9QUkVDSVNJT05TPXsnYW5kcm9pZC5WU1lOQy1hcHAnOjE1LCdhbmRyb2lkLlZTWU5DJzoxNX07Y29uc3QgVlNZTkNfU0xJQ0VfUFJFQ0lTSU9OUz17J1JlbmRlcldpZGdldEhvc3RWaWV3QW5kcm9pZDo6T25WU3luYyc6NSwnVlNZTkMnOjEwLCd2YmxhbmsnOjEwLCdEaXNwbGF5TGlua01hYzo6R2V0VlN5bmNQYXJhbWV0ZXJzJzo1fTtjb25zdCBCRUdJTl9GUkFNRV9TTElDRV9QUkVDSVNJT049eydEaXNwbGF5U2NoZWR1bGVyOjpCZWdpbkZyYW1lJzoxMH07ZnVuY3Rpb24gVlN5bmNBdWRpdG9yKG1vZGVsKXt0ci5jLkF1ZGl0b3IuY2FsbCh0aGlzLG1vZGVsKTt9Ci1WU3luY0F1ZGl0b3IucHJvdG90eXBlPXtfX3Byb3RvX186dHIuYy5BdWRpdG9yLnByb3RvdHlwZSxydW5Bbm5vdGF0ZSgpe3RoaXMubW9kZWwuZGV2aWNlLnZTeW5jVGltZXN0YW1wcz10aGlzLmZpbmRWU3luY1RpbWVzdGFtcHModGhpcy5tb2RlbCk7fSxmaW5kVlN5bmNUaW1lc3RhbXBzKG1vZGVsKXtsZXQgdGltZXM9W107bGV0IG1heFByZWNpc2lvbj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7bGV0IG1heFRpdGxlPXVuZGVmaW5lZDtmdW5jdGlvbiB1c2VJbnN0ZWFkKHRpdGxlLHByZWNpc2lvbnMpe2NvbnN0IHByZWNpc2lvbj1wcmVjaXNpb25zW3RpdGxlXTtpZihwcmVjaXNpb249PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO2lmKHRpdGxlPT09bWF4VGl0bGUpcmV0dXJuIHRydWU7aWYocHJlY2lzaW9uPD1tYXhQcmVjaXNpb24pe2lmKHByZWNpc2lvbj09PW1heFByZWNpc2lvbil7bW9kZWwuaW1wb3J0V2FybmluZyh7dHlwZTonVlN5bmNBdWRpdG9yJyxtZXNzYWdlOidFbmNvdW50ZXJlZCB0d28gZGlmZmVyZW50IFZTeW5jIGV2ZW50cyAoJysKLW1heFRpdGxlKycsICcrdGl0bGUrJykgd2l0aCB0aGUgc2FtZSBwcmVjaXNpb24sICcrJ2lnbm9yaW5nIHRoZSBuZXdlciBvbmUgKCcrdGl0bGUrJyknLHNob3dUb1VzZXI6ZmFsc2UsfSk7fQotcmV0dXJuIGZhbHNlO30KLW1heFByZWNpc2lvbj1wcmVjaXNpb247bWF4VGl0bGU9dGl0bGU7dGltZXM9W107cmV0dXJuIHRydWU7fQotZm9yKGNvbnN0IHBpZCBpbiBtb2RlbC5wcm9jZXNzZXMpe2NvbnN0IHByb2Nlc3M9bW9kZWwucHJvY2Vzc2VzW3BpZF07Zm9yKGNvbnN0IGNpZCBpbiBwcm9jZXNzLmNvdW50ZXJzKXtpZih1c2VJbnN0ZWFkKGNpZCxWU1lOQ19DT1VOVEVSX1BSRUNJU0lPTlMpKXtjb25zdCBjb3VudGVyPXByb2Nlc3MuY291bnRlcnNbY2lkXTtmb3IobGV0IGk9MDtpPGNvdW50ZXIuc2VyaWVzLmxlbmd0aDtpKyspe2NvbnN0IHNlcmllcz1jb3VudGVyLnNlcmllc1tpXTtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aW1lcyxzZXJpZXMudGltZXN0YW1wcyk7fX19Ci1mb3IoY29uc3QgdGlkIGluIHByb2Nlc3MudGhyZWFkcyl7Y29uc3QgdGhyZWFkPXByb2Nlc3MudGhyZWFkc1t0aWRdO2ZvcihsZXQgaT0wO2k8dGhyZWFkLnNsaWNlR3JvdXAuc2xpY2VzLmxlbmd0aDtpKyspe2NvbnN0IHNsaWNlPXRocmVhZC5zbGljZUdyb3VwLnNsaWNlc1tpXTtpZih1c2VJbnN0ZWFkKHNsaWNlLnRpdGxlLFZTWU5DX1NMSUNFX1BSRUNJU0lPTlMpKXt0aW1lcy5wdXNoKHNsaWNlLnN0YXJ0KTt9ZWxzZSBpZih1c2VJbnN0ZWFkKHNsaWNlLnRpdGxlLEJFR0lOX0ZSQU1FX1NMSUNFX1BSRUNJU0lPTikmJnNsaWNlLmFyZ3MuYXJncyYmc2xpY2UuYXJncy5hcmdzLmZyYW1lX3RpbWVfdXMpe3RpbWVzLnB1c2goc2xpY2UuYXJncy5hcmdzLmZyYW1lX3RpbWVfdXMvMTAwMC4wKTt9fX19Ci10aW1lcy5zb3J0KGZ1bmN0aW9uKHgseSl7cmV0dXJuIHgteTt9KTtyZXR1cm4gZmlsdGVyRHVwbGljYXRlVGltZXN0YW1wcyh0aW1lcyk7fX07dHIuYy5BdWRpdG9yLnJlZ2lzdGVyKFZTeW5jQXVkaXRvcik7cmV0dXJue1ZTeW5jQXVkaXRvcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRW1wdHlJbXBvcnRlcihldmVudHMpe3RoaXMuaW1wb3J0UHJpb3JpdHk9MDt9Ci1FbXB0eUltcG9ydGVyLmNhbkltcG9ydD1mdW5jdGlvbihldmVudERhdGEpe2lmKGV2ZW50RGF0YSBpbnN0YW5jZW9mIEFycmF5JiZldmVudERhdGEubGVuZ3RoPT09MCl7cmV0dXJuIHRydWU7fQotaWYodHlwZW9mKGV2ZW50RGF0YSk9PT0nc3RyaW5nJ3x8ZXZlbnREYXRhIGluc3RhbmNlb2YgU3RyaW5nKXtyZXR1cm4gZXZlbnREYXRhLmxlbmd0aD09PTA7fQotcmV0dXJuIGZhbHNlO307RW1wdHlJbXBvcnRlci5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5pbXBvcnRlci5JbXBvcnRlci5wcm90b3R5cGUsZ2V0IGltcG9ydGVyTmFtZSgpe3JldHVybidFbXB0eUltcG9ydGVyJzt9fTt0ci5pbXBvcnRlci5JbXBvcnRlci5yZWdpc3RlcihFbXB0eUltcG9ydGVyKTtyZXR1cm57RW1wdHlJbXBvcnRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwudW0nLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQW5pbWF0aW9uRXhwZWN0YXRpb24ocGFyZW50TW9kZWwsaW5pdGlhdG9yVGl0bGUsc3RhcnQsZHVyYXRpb24pe3RyLm1vZGVsLnVtLlVzZXJFeHBlY3RhdGlvbi5jYWxsKHRoaXMscGFyZW50TW9kZWwsaW5pdGlhdG9yVGl0bGUsc3RhcnQsZHVyYXRpb24pO3RoaXMuZnJhbWVFdmVudHNfPXVuZGVmaW5lZDt9Ci1BbmltYXRpb25FeHBlY3RhdGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC51bS5Vc2VyRXhwZWN0YXRpb24ucHJvdG90eXBlLGNvbnN0cnVjdG9yOkFuaW1hdGlvbkV4cGVjdGF0aW9uLGdldCBmcmFtZUV2ZW50cygpe2lmKHRoaXMuZnJhbWVFdmVudHNfKXtyZXR1cm4gdGhpcy5mcmFtZUV2ZW50c187fQotdGhpcy5mcmFtZUV2ZW50c189bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7dGhpcy5hc3NvY2lhdGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2lmKGV2ZW50LnRpdGxlPT09dHIubW9kZWwuaGVscGVycy5JTVBMX1JFTkRFUklOR19TVEFUUyl7dGhpcy5mcmFtZUV2ZW50c18ucHVzaChldmVudCk7fX0sdGhpcyk7cmV0dXJuIHRoaXMuZnJhbWVFdmVudHNfO319O3RyLm1vZGVsLnVtLlVzZXJFeHBlY3RhdGlvbi5zdWJUeXBlcy5yZWdpc3RlcihBbmltYXRpb25FeHBlY3RhdGlvbix7c3RhZ2VUaXRsZTonQW5pbWF0aW9uJyxjb2xvcklkOnRyLmIuQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZSgncmFpbF9hbmltYXRpb24nKX0pO3JldHVybntBbmltYXRpb25FeHBlY3RhdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUHJvdG9FeHBlY3RhdGlvbih0eXBlLGluaXRpYXRvclR5cGUpe3RoaXMudHlwZT10eXBlO3RoaXMuaW5pdGlhdG9yVHlwZT1pbml0aWF0b3JUeXBlO3RoaXMuc3RhcnQ9SW5maW5pdHk7dGhpcy5lbmQ9LUluZmluaXR5O3RoaXMuYXNzb2NpYXRlZEV2ZW50cz1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTt0aGlzLmlzQW5pbWF0aW9uQmVnaW49ZmFsc2U7fQotUHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFPSdyJztQcm90b0V4cGVjdGF0aW9uLkFOSU1BVElPTl9UWVBFPSdhJztQcm90b0V4cGVjdGF0aW9uLklHTk9SRURfVFlQRT0naWdub3JlZCc7Y29uc3QgSU5JVElBVE9SX0hJRVJBUkNIWT1bdHIubW9kZWwudW0uSU5JVElBVE9SX1RZUEUuUElOQ0gsdHIubW9kZWwudW0uSU5JVElBVE9SX1RZUEUuRkxJTkcsdHIubW9kZWwudW0uSU5JVElBVE9SX1RZUEUuTU9VU0VfV0hFRUwsdHIubW9kZWwudW0uSU5JVElBVE9SX1RZUEUuU0NST0xMLHRyLm1vZGVsLnVtLklOSVRJQVRPUl9UWVBFLlZSLHRyLm1vZGVsLnVtLklOSVRJQVRPUl9UWVBFLlZJREVPLHRyLm1vZGVsLnVtLklOSVRJQVRPUl9UWVBFLldFQkdMLHRyLm1vZGVsLnVtLklOSVRJQVRPUl9UWVBFLkNTUyx0ci5tb2RlbC51bS5JTklUSUFUT1JfVFlQRS5NT1VTRSx0ci5tb2RlbC51bS5JTklUSUFUT1JfVFlQRS5LRVlCT0FSRCx0ci5tb2RlbC51bS5JTklUSUFUT1JfVFlQRS5UQVAsdHIubW9kZWwudW0uSU5JVElBVE9SX1RZUEUuVE9VQ0hdO2Z1bmN0aW9uIGNvbWJpbmVJbml0aWF0b3JUeXBlcyh0aXRsZTEsdGl0bGUyKXtmb3IoY29uc3QgaXRlbSBvZiBJTklUSUFUT1JfSElFUkFSQ0hZKXtpZih0aXRsZTE9PT1pdGVtfHx0aXRsZTI9PT1pdGVtKXJldHVybiBpdGVtO30KLXRocm93IG5ldyBFcnJvcignSW52YWxpZCB0aXRsZXMgaW4gY29tYmluZUluaXRpYXRvclR5cGVzJyk7fQotUHJvdG9FeHBlY3RhdGlvbi5wcm90b3R5cGU9e2dldCBpc1ZhbGlkKCl7cmV0dXJuIHRoaXMuZW5kPnRoaXMuc3RhcnQ7fSxjb250YWluc1R5cGVOYW1lcyh0eXBlTmFtZXMpe3JldHVybiB0aGlzLmFzc29jaWF0ZWRFdmVudHMuc29tZSh4PT50eXBlTmFtZXMuaW5kZXhPZih4LnR5cGVOYW1lKT49MCk7fSxjb250YWluc1NsaWNlVGl0bGUodGl0bGUpe3JldHVybiB0aGlzLmFzc29jaWF0ZWRFdmVudHMuc29tZSh4PT50aXRsZT09PXgudGl0bGUpO30sY3JlYXRlSW50ZXJhY3Rpb25SZWNvcmQobW9kZWwpe2lmKHRoaXMudHlwZSE9PVByb3RvRXhwZWN0YXRpb24uSUdOT1JFRF9UWVBFJiYhdGhpcy5pc1ZhbGlkKXttb2RlbC5pbXBvcnRXYXJuaW5nKHt0eXBlOidQcm90b0V4cGVjdGF0aW9uJyxtZXNzYWdlOidQbGVhc2UgZmlsZSBhIGJ1ZyB3aXRoIHRoaXMgdHJhY2UuICcrdGhpcy5kZWJ1ZygpLHNob3dUb1VzZXI6dHJ1ZX0pO3JldHVybiB1bmRlZmluZWQ7fQotY29uc3QgZHVyYXRpb249dGhpcy5lbmQtdGhpcy5zdGFydDtsZXQgaXI9dW5kZWZpbmVkO3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2UgUHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFOmlyPW5ldyB0ci5tb2RlbC51bS5SZXNwb25zZUV4cGVjdGF0aW9uKG1vZGVsLHRoaXMuaW5pdGlhdG9yVHlwZSx0aGlzLnN0YXJ0LGR1cmF0aW9uLHRoaXMuaXNBbmltYXRpb25CZWdpbik7YnJlYWs7Y2FzZSBQcm90b0V4cGVjdGF0aW9uLkFOSU1BVElPTl9UWVBFOmlyPW5ldyB0ci5tb2RlbC51bS5BbmltYXRpb25FeHBlY3RhdGlvbihtb2RlbCx0aGlzLmluaXRpYXRvclR5cGUsdGhpcy5zdGFydCxkdXJhdGlvbik7YnJlYWs7fQotaWYoIWlyKXJldHVybiB1bmRlZmluZWQ7aXIuc291cmNlRXZlbnRzLmFkZEV2ZW50U2V0KHRoaXMuYXNzb2NpYXRlZEV2ZW50cyk7ZnVuY3Rpb24gcHVzaEFzc29jaWF0ZWRFdmVudHMoZXZlbnQpe2lyLmFzc29jaWF0ZWRFdmVudHMucHVzaChldmVudCk7aWYoZXZlbnQuYXNzb2NpYXRlZEV2ZW50cyl7aXIuYXNzb2NpYXRlZEV2ZW50cy5hZGRFdmVudFNldChldmVudC5hc3NvY2lhdGVkRXZlbnRzKTt9fQotdGhpcy5hc3NvY2lhdGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe3B1c2hBc3NvY2lhdGVkRXZlbnRzKGV2ZW50KTtpZihldmVudC5zdWJTbGljZXMpe2V2ZW50LnN1YlNsaWNlcy5mb3JFYWNoKHB1c2hBc3NvY2lhdGVkRXZlbnRzKTt9fSk7cmV0dXJuIGlyO30sbWVyZ2Uob3RoZXIpe3RoaXMuaW5pdGlhdG9yVHlwZT1jb21iaW5lSW5pdGlhdG9yVHlwZXModGhpcy5pbml0aWF0b3JUeXBlLG90aGVyLmluaXRpYXRvclR5cGUpO3RoaXMuYXNzb2NpYXRlZEV2ZW50cy5hZGRFdmVudFNldChvdGhlci5hc3NvY2lhdGVkRXZlbnRzKTt0aGlzLnN0YXJ0PU1hdGgubWluKHRoaXMuc3RhcnQsb3RoZXIuc3RhcnQpO3RoaXMuZW5kPU1hdGgubWF4KHRoaXMuZW5kLG90aGVyLmVuZCk7aWYob3RoZXIuaXNBbmltYXRpb25CZWdpbil7dGhpcy5pc0FuaW1hdGlvbkJlZ2luPXRydWU7fX0scHVzaEV2ZW50KGV2ZW50KXt0aGlzLnN0YXJ0PU1hdGgubWluKHRoaXMuc3RhcnQsZXZlbnQuc3RhcnQpO3RoaXMuZW5kPU1hdGgubWF4KHRoaXMuZW5kLGV2ZW50LmVuZCk7dGhpcy5hc3NvY2lhdGVkRXZlbnRzLnB1c2goZXZlbnQpO30scHVzaFNhbXBsZShzYW1wbGUpe3RoaXMuc3RhcnQ9TWF0aC5taW4odGhpcy5zdGFydCxzYW1wbGUudGltZXN0YW1wKTt0aGlzLmVuZD1NYXRoLm1heCh0aGlzLmVuZCxzYW1wbGUudGltZXN0YW1wKTt0aGlzLmFzc29jaWF0ZWRFdmVudHMucHVzaChzYW1wbGUpO30sY29udGFpbnNUaW1lc3RhbXBJbmNsdXNpdmUodGltZXN0YW1wKXtyZXR1cm4odGhpcy5zdGFydDw9dGltZXN0YW1wKSYmKHRpbWVzdGFtcDw9dGhpcy5lbmQpO30saW50ZXJzZWN0cyhvdGhlcil7cmV0dXJuKG90aGVyLnN0YXJ0PHRoaXMuZW5kKSYmKG90aGVyLmVuZD50aGlzLnN0YXJ0KTt9LGlzTmVhcihldmVudCx0aHJlc2hvbGQpe3JldHVybih0aGlzLmVuZCt0aHJlc2hvbGQpPmV2ZW50LnN0YXJ0O30sZGVidWcoKXtsZXQgZGVidWdTdHJpbmc9dGhpcy50eXBlKycoJztkZWJ1Z1N0cmluZys9cGFyc2VJbnQodGhpcy5zdGFydCkrJyAnO2RlYnVnU3RyaW5nKz1wYXJzZUludCh0aGlzLmVuZCk7dGhpcy5hc3NvY2lhdGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2RlYnVnU3RyaW5nKz0nICcrZXZlbnQudHlwZU5hbWU7fSk7cmV0dXJuIGRlYnVnU3RyaW5nKycpJzt9fTtyZXR1cm57UHJvdG9FeHBlY3RhdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7Y29uc3QgUHJvdG9FeHBlY3RhdGlvbj10ci5pbXBvcnRlci5Qcm90b0V4cGVjdGF0aW9uO2NvbnN0IElOSVRJQVRPUl9UWVBFPXRyLm1vZGVsLnVtLklOSVRJQVRPUl9UWVBFO2NvbnN0IElOUFVUX1RZUEU9dHIuZS5jYy5JTlBVVF9FVkVOVF9UWVBFX05BTUVTO2NvbnN0IEtFWUJPQVJEX1RZUEVfTkFNRVM9W0lOUFVUX1RZUEUuQ0hBUixJTlBVVF9UWVBFLktFWV9ET1dOX1JBVyxJTlBVVF9UWVBFLktFWV9ET1dOLElOUFVUX1RZUEUuS0VZX1VQXTtjb25zdCBNT1VTRV9SRVNQT05TRV9UWVBFX05BTUVTPVtJTlBVVF9UWVBFLkNMSUNLLElOUFVUX1RZUEUuQ09OVEVYVF9NRU5VXTtjb25zdCBNT1VTRV9XSEVFTF9UWVBFX05BTUVTPVtJTlBVVF9UWVBFLk1PVVNFX1dIRUVMXTtjb25zdCBNT1VTRV9EUkFHX1RZUEVfTkFNRVM9W0lOUFVUX1RZUEUuTU9VU0VfRE9XTixJTlBVVF9UWVBFLk1PVVNFX01PVkUsSU5QVVRfVFlQRS5NT1VTRV9VUF07Y29uc3QgVEFQX1RZUEVfTkFNRVM9W0lOUFVUX1RZUEUuVEFQLElOUFVUX1RZUEUuVEFQX0NBTkNFTCxJTlBVVF9UWVBFLlRBUF9ET1dOXTtjb25zdCBQSU5DSF9UWVBFX05BTUVTPVtJTlBVVF9UWVBFLlBJTkNIX0JFR0lOLElOUFVUX1RZUEUuUElOQ0hfRU5ELElOUFVUX1RZUEUuUElOQ0hfVVBEQVRFXTtjb25zdCBGTElOR19UWVBFX05BTUVTPVtJTlBVVF9UWVBFLkZMSU5HX0NBTkNFTCxJTlBVVF9UWVBFLkZMSU5HX1NUQVJUXTtjb25zdCBUT1VDSF9UWVBFX05BTUVTPVtJTlBVVF9UWVBFLlRPVUNIX0VORCxJTlBVVF9UWVBFLlRPVUNIX01PVkUsSU5QVVRfVFlQRS5UT1VDSF9TVEFSVF07Y29uc3QgU0NST0xMX1RZUEVfTkFNRVM9W0lOUFVUX1RZUEUuU0NST0xMX0JFR0lOLElOUFVUX1RZUEUuU0NST0xMX0VORCxJTlBVVF9UWVBFLlNDUk9MTF9VUERBVEVdO2NvbnN0IEFMTF9IQU5ETEVEX1RZUEVfTkFNRVM9W10uY29uY2F0KEtFWUJPQVJEX1RZUEVfTkFNRVMsTU9VU0VfUkVTUE9OU0VfVFlQRV9OQU1FUyxNT1VTRV9XSEVFTF9UWVBFX05BTUVTLE1PVVNFX0RSQUdfVFlQRV9OQU1FUyxQSU5DSF9UWVBFX05BTUVTLFRBUF9UWVBFX05BTUVTLEZMSU5HX1RZUEVfTkFNRVMsVE9VQ0hfVFlQRV9OQU1FUyxTQ1JPTExfVFlQRV9OQU1FUyk7Y29uc3QgUkVOREVSRVJfRkxJTkdfVElUTEU9J0lucHV0SGFuZGxlclByb3h5OjpIYW5kbGVHZXN0dXJlRmxpbmc6OnN0YXJ0ZWQnO2NvbnN0IFBMQVlCQUNLX0VWRU5UX1RJVExFPSdWaWRlb1BsYXliYWNrJztjb25zdCBDU1NfQU5JTUFUSU9OX1RJVExFPSdBbmltYXRpb24nO2NvbnN0IFZSX0NPVU5URVJfTkFNRVM9WydncHUuV2ViVlIgRlBTJywnZ3B1LldlYlZSIGZyYW1lIHRpbWUgKG1zKScsJ2dwdS5XZWJWUiBwb3NlIHByZWRpY3Rpb24gKG1zKScsXTtjb25zdCBWUl9FVkVOVF9OQU1FUz1bJ1ZyU2hlbGxHbDo6QWNxdWlyZUZyYW1lJywnVnJTaGVsbEdsOjpEcmF3RnJhbWUnLCdWclNoZWxsR2w6OkRyYXdTdWJtaXRGcmFtZVdoZW5SZWFkeScsJ1ZyU2hlbGxHbDo6RHJhd1VpVmlldycsJ1ZyU2hlbGxHbDo6VXBkYXRlQ29udHJvbGxlcicsXTtjb25zdCBWUl9SRVNQT05TRV9NUz01MDA7Y29uc3QgSU5QVVRfTUVSR0VfVEhSRVNIT0xEX01TPTIwMDtjb25zdCBBTklNQVRJT05fTUVSR0VfVEhSRVNIT0xEX01TPTMyO2NvbnN0IE1PVVNFX1dIRUVMX1RIUkVTSE9MRF9NUz00MDtjb25zdCBNT1VTRV9NT1ZFX1RIUkVTSE9MRF9NUz00MDtmdW5jdGlvbiBjb21wYXJlRXZlbnRzKHgseSl7aWYoeC5zdGFydCE9PXkuc3RhcnQpe3JldHVybiB4LnN0YXJ0LXkuc3RhcnQ7fQotaWYoeC5lbmQhPT15LmVuZCl7cmV0dXJuIHguZW5kLXkuZW5kO30KLWlmKHguZ3VpZCYmeS5ndWlkKXtyZXR1cm4geC5ndWlkLXkuZ3VpZDt9Ci1yZXR1cm4gMDt9Ci1mdW5jdGlvbiBmb3JFdmVudFR5cGVzSW4oZXZlbnRzLHR5cGVOYW1lcyxjYixvcHRfdGhpcyl7ZXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2lmKHR5cGVOYW1lcy5pbmRleE9mKGV2ZW50LnR5cGVOYW1lKT49MCl7Y2IuY2FsbChvcHRfdGhpcyxldmVudCk7fX0pO30KLWZ1bmN0aW9uIGNhdXNlZEZyYW1lKGV2ZW50KXtyZXR1cm4gZXZlbnQuYXNzb2NpYXRlZEV2ZW50cy5zb21lKHg9PngudGl0bGU9PT10ci5tb2RlbC5oZWxwZXJzLklNUExfUkVOREVSSU5HX1NUQVRTKTt9Ci1mdW5jdGlvbiBnZXRTb3J0ZWRGcmFtZUV2ZW50c0J5UHJvY2Vzcyhtb2RlbEhlbHBlcil7Y29uc3QgZnJhbWVFdmVudHNCeVBpZD17fTtmb3IoY29uc3RbcGlkLHJlbmRlcmVySGVscGVyXW9mCi1PYmplY3QuZW50cmllcyhtb2RlbEhlbHBlci5yZW5kZXJlckhlbHBlcnMpKXtmcmFtZUV2ZW50c0J5UGlkW3BpZF09cmVuZGVyZXJIZWxwZXIuZ2V0RnJhbWVFdmVudHNJblJhbmdlKHRyLm1vZGVsLmhlbHBlcnMuSU1QTF9GUkFNRVRJTUVfVFlQRSxtb2RlbEhlbHBlci5tb2RlbC5ib3VuZHMpO30KLXJldHVybiBmcmFtZUV2ZW50c0J5UGlkO30KLWZ1bmN0aW9uIGdldFNvcnRlZElucHV0RXZlbnRzKG1vZGVsSGVscGVyKXtjb25zdCBpbnB1dEV2ZW50cz1bXTtjb25zdCBicm93c2VyUHJvY2Vzcz1tb2RlbEhlbHBlci5icm93c2VySGVscGVyLnByb2Nlc3M7Y29uc3QgbWFpblRocmVhZD1icm93c2VyUHJvY2Vzcy5maW5kQXRNb3N0T25lVGhyZWFkTmFtZWQoJ0NyQnJvd3Nlck1haW4nKTtmb3IoY29uc3Qgc2xpY2Ugb2YgbWFpblRocmVhZC5hc3luY1NsaWNlR3JvdXAuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZighc2xpY2UuaXNUb3BMZXZlbCljb250aW51ZTtpZighKHNsaWNlIGluc3RhbmNlb2YgdHIuZS5jYy5JbnB1dExhdGVuY3lBc3luY1NsaWNlKSljb250aW51ZTtpZihpc05hTihzbGljZS5zdGFydCl8fGlzTmFOKHNsaWNlLmR1cmF0aW9uKXx8aXNOYU4oc2xpY2UuZW5kKSl7Y29udGludWU7fQotaW5wdXRFdmVudHMucHVzaChzbGljZSk7fQotcmV0dXJuIGlucHV0RXZlbnRzLnNvcnQoY29tcGFyZUV2ZW50cyk7fQotZnVuY3Rpb24gZmluZFByb3RvRXhwZWN0YXRpb25zKG1vZGVsSGVscGVyLHNvcnRlZElucHV0RXZlbnRzLHdhcm4pe2NvbnN0IHByb3RvRXhwZWN0YXRpb25zPVtdO2NvbnN0IGhhbmRsZXJzPVtoYW5kbGVLZXlib2FyZEV2ZW50cyxoYW5kbGVNb3VzZVJlc3BvbnNlRXZlbnRzLGhhbmRsZU1vdXNlV2hlZWxFdmVudHMsaGFuZGxlTW91c2VEcmFnRXZlbnRzLGhhbmRsZVRhcFJlc3BvbnNlRXZlbnRzLGhhbmRsZVBpbmNoRXZlbnRzLGhhbmRsZUZsaW5nRXZlbnRzLGhhbmRsZVRvdWNoRXZlbnRzLGhhbmRsZVNjcm9sbEV2ZW50cyxoYW5kbGVDU1NBbmltYXRpb25zLGhhbmRsZVdlYkdMQW5pbWF0aW9ucyxoYW5kbGVWaWRlb0FuaW1hdGlvbnMsaGFuZGxlVnJBbmltYXRpb25zLF07aGFuZGxlcnMuZm9yRWFjaChmdW5jdGlvbihoYW5kbGVyKXtwcm90b0V4cGVjdGF0aW9ucy5wdXNoLmFwcGx5KHByb3RvRXhwZWN0YXRpb25zLGhhbmRsZXIobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2FybikpO30pO3Byb3RvRXhwZWN0YXRpb25zLnNvcnQoY29tcGFyZUV2ZW50cyk7cmV0dXJuIHByb3RvRXhwZWN0YXRpb25zO30KLWZ1bmN0aW9uIGhhbmRsZUtleWJvYXJkRXZlbnRzKG1vZGVsSGVscGVyLHNvcnRlZElucHV0RXZlbnRzLHdhcm4pe2NvbnN0IHByb3RvRXhwZWN0YXRpb25zPVtdO2ZvckV2ZW50VHlwZXNJbihzb3J0ZWRJbnB1dEV2ZW50cyxLRVlCT0FSRF9UWVBFX05BTUVTLGZ1bmN0aW9uKGV2ZW50KXtjb25zdCBwZT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEUsSU5JVElBVE9SX1RZUEUuS0VZQk9BUkQpO3BlLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChwZSk7fSk7cmV0dXJuIHByb3RvRXhwZWN0YXRpb25zO30KLWZ1bmN0aW9uIGhhbmRsZU1vdXNlUmVzcG9uc2VFdmVudHMobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2Fybil7Y29uc3QgcHJvdG9FeHBlY3RhdGlvbnM9W107Zm9yRXZlbnRUeXBlc0luKHNvcnRlZElucHV0RXZlbnRzLE1PVVNFX1JFU1BPTlNFX1RZUEVfTkFNRVMsZnVuY3Rpb24oZXZlbnQpe2NvbnN0IHBlPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uUkVTUE9OU0VfVFlQRSxJTklUSUFUT1JfVFlQRS5NT1VTRSk7cGUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKHBlKTt9KTtyZXR1cm4gcHJvdG9FeHBlY3RhdGlvbnM7fQotZnVuY3Rpb24gaGFuZGxlTW91c2VXaGVlbEV2ZW50cyhtb2RlbEhlbHBlcixzb3J0ZWRJbnB1dEV2ZW50cyx3YXJuKXtjb25zdCBwcm90b0V4cGVjdGF0aW9ucz1bXTtsZXQgY3VycmVudFBFPXVuZGVmaW5lZDtsZXQgcHJldkV2ZW50Xz11bmRlZmluZWQ7Zm9yRXZlbnRUeXBlc0luKHNvcnRlZElucHV0RXZlbnRzLE1PVVNFX1dIRUVMX1RZUEVfTkFNRVMsZnVuY3Rpb24oZXZlbnQpe2NvbnN0IHByZXZFdmVudD1wcmV2RXZlbnRfO3ByZXZFdmVudF89ZXZlbnQ7aWYoY3VycmVudFBFJiYocHJldkV2ZW50LnN0YXJ0K01PVVNFX1dIRUVMX1RIUkVTSE9MRF9NUyk+PWV2ZW50LnN0YXJ0KXtpZihjdXJyZW50UEUudHlwZT09PVByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUpe2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO31lbHNle2N1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLkFOSU1BVElPTl9UWVBFLElOSVRJQVRPUl9UWVBFLk1PVVNFX1dIRUVMKTtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKGN1cnJlbnRQRSk7fQotcmV0dXJuO30KLWN1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEUsSU5JVElBVE9SX1RZUEUuTU9VU0VfV0hFRUwpO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTt9KTtyZXR1cm4gcHJvdG9FeHBlY3RhdGlvbnM7fQotZnVuY3Rpb24gaGFuZGxlTW91c2VEcmFnRXZlbnRzKG1vZGVsSGVscGVyLHNvcnRlZElucHV0RXZlbnRzLHdhcm4pe2NvbnN0IHByb3RvRXhwZWN0YXRpb25zPVtdO2xldCBjdXJyZW50UEU9dW5kZWZpbmVkO2xldCBtb3VzZURvd25FdmVudD11bmRlZmluZWQ7Zm9yRXZlbnRUeXBlc0luKHNvcnRlZElucHV0RXZlbnRzLE1PVVNFX0RSQUdfVFlQRV9OQU1FUyxmdW5jdGlvbihldmVudCl7c3dpdGNoKGV2ZW50LnR5cGVOYW1lKXtjYXNlIElOUFVUX1RZUEUuTU9VU0VfRE9XTjppZihjYXVzZWRGcmFtZShldmVudCkpe2NvbnN0IHBlPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uUkVTUE9OU0VfVFlQRSxJTklUSUFUT1JfVFlQRS5NT1VTRSk7cGUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKHBlKTt9ZWxzZXttb3VzZURvd25FdmVudD1ldmVudDt9Ci1icmVhaztjYXNlIElOUFVUX1RZUEUuTU9VU0VfTU9WRTppZighY2F1c2VkRnJhbWUoZXZlbnQpKXtjb25zdCBwZT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLklHTk9SRURfVFlQRSk7cGUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKHBlKTt9ZWxzZSBpZighY3VycmVudFBFfHwhY3VycmVudFBFLmlzTmVhcihldmVudCxNT1VTRV9NT1ZFX1RIUkVTSE9MRF9NUykpe2N1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEUsSU5JVElBVE9SX1RZUEUuTU9VU0UpO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO2lmKG1vdXNlRG93bkV2ZW50KXtjdXJyZW50UEUuYXNzb2NpYXRlZEV2ZW50cy5wdXNoKG1vdXNlRG93bkV2ZW50KTttb3VzZURvd25FdmVudD11bmRlZmluZWQ7fQotcHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO31lbHNle2lmKGN1cnJlbnRQRS50eXBlPT09UHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSl7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7fWVsc2V7Y3VycmVudFBFPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUsSU5JVElBVE9SX1RZUEUuTU9VU0UpO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTt9fQotYnJlYWs7Y2FzZSBJTlBVVF9UWVBFLk1PVVNFX1VQOmlmKCFtb3VzZURvd25FdmVudCl7Y29uc3QgcGU9bmV3IFByb3RvRXhwZWN0YXRpb24oY2F1c2VkRnJhbWUoZXZlbnQpP1Byb3RvRXhwZWN0YXRpb24uUkVTUE9OU0VfVFlQRTpQcm90b0V4cGVjdGF0aW9uLklHTk9SRURfVFlQRSxJTklUSUFUT1JfVFlQRS5NT1VTRSk7cGUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKHBlKTticmVhazt9Ci1pZihjdXJyZW50UEUpe2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO31lbHNle2N1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEUsSU5JVElBVE9SX1RZUEUuTU9VU0UpO2lmKG1vdXNlRG93bkV2ZW50KXtjdXJyZW50UEUuYXNzb2NpYXRlZEV2ZW50cy5wdXNoKG1vdXNlRG93bkV2ZW50KTt9Ci1jdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKGN1cnJlbnRQRSk7fQotbW91c2VEb3duRXZlbnQ9dW5kZWZpbmVkO2N1cnJlbnRQRT11bmRlZmluZWQ7YnJlYWs7fX0pO2lmKG1vdXNlRG93bkV2ZW50KXtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5JR05PUkVEX1RZUEUpO2N1cnJlbnRQRS5wdXNoRXZlbnQobW91c2VEb3duRXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTt9Ci1yZXR1cm4gcHJvdG9FeHBlY3RhdGlvbnM7fQotZnVuY3Rpb24gaGFuZGxlVGFwUmVzcG9uc2VFdmVudHMobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2Fybil7Y29uc3QgcHJvdG9FeHBlY3RhdGlvbnM9W107bGV0IGN1cnJlbnRQRT11bmRlZmluZWQ7Zm9yRXZlbnRUeXBlc0luKHNvcnRlZElucHV0RXZlbnRzLFRBUF9UWVBFX05BTUVTLGZ1bmN0aW9uKGV2ZW50KXtzd2l0Y2goZXZlbnQudHlwZU5hbWUpe2Nhc2UgSU5QVVRfVFlQRS5UQVBfRE9XTjpjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFLElOSVRJQVRPUl9UWVBFLlRBUCk7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO2JyZWFrO2Nhc2UgSU5QVVRfVFlQRS5UQVA6aWYoY3VycmVudFBFKXtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTt9ZWxzZXtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFLElOSVRJQVRPUl9UWVBFLlRBUCk7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO30KLWN1cnJlbnRQRT11bmRlZmluZWQ7YnJlYWs7Y2FzZSBJTlBVVF9UWVBFLlRBUF9DQU5DRUw6aWYoIWN1cnJlbnRQRSl7Y29uc3QgcGU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5JR05PUkVEX1RZUEUpO3BlLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChwZSk7YnJlYWs7fQotaWYoY3VycmVudFBFLmlzTmVhcihldmVudCxJTlBVVF9NRVJHRV9USFJFU0hPTERfTVMpKXtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTt9ZWxzZXtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFLElOSVRJQVRPUl9UWVBFLlRBUCk7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO30KLWN1cnJlbnRQRT11bmRlZmluZWQ7YnJlYWs7fX0pO3JldHVybiBwcm90b0V4cGVjdGF0aW9uczt9Ci1mdW5jdGlvbiBoYW5kbGVQaW5jaEV2ZW50cyhtb2RlbEhlbHBlcixzb3J0ZWRJbnB1dEV2ZW50cyx3YXJuKXtjb25zdCBwcm90b0V4cGVjdGF0aW9ucz1bXTtsZXQgY3VycmVudFBFPXVuZGVmaW5lZDtsZXQgc2F3Rmlyc3RVcGRhdGU9ZmFsc2U7Y29uc3QgbW9kZWxCb3VuZHM9bW9kZWxIZWxwZXIubW9kZWwuYm91bmRzO2ZvckV2ZW50VHlwZXNJbihzb3J0ZWRJbnB1dEV2ZW50cyxQSU5DSF9UWVBFX05BTUVTLGZ1bmN0aW9uKGV2ZW50KXtzd2l0Y2goZXZlbnQudHlwZU5hbWUpe2Nhc2UgSU5QVVRfVFlQRS5QSU5DSF9CRUdJTjppZihjdXJyZW50UEUmJmN1cnJlbnRQRS5pc05lYXIoZXZlbnQsSU5QVVRfTUVSR0VfVEhSRVNIT0xEX01TKSl7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7YnJlYWs7fQotY3VycmVudFBFPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uUkVTUE9OU0VfVFlQRSxJTklUSUFUT1JfVFlQRS5QSU5DSCk7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7Y3VycmVudFBFLmlzQW5pbWF0aW9uQmVnaW49dHJ1ZTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKGN1cnJlbnRQRSk7c2F3Rmlyc3RVcGRhdGU9ZmFsc2U7YnJlYWs7Y2FzZSBJTlBVVF9UWVBFLlBJTkNIX1VQREFURTppZighY3VycmVudFBFfHwoKGN1cnJlbnRQRS50eXBlPT09UHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFKSYmc2F3Rmlyc3RVcGRhdGUpfHwhY3VycmVudFBFLmlzTmVhcihldmVudCxJTlBVVF9NRVJHRV9USFJFU0hPTERfTVMpKXtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSxJTklUSUFUT1JfVFlQRS5QSU5DSCk7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO31lbHNle2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Nhd0ZpcnN0VXBkYXRlPXRydWU7fQotYnJlYWs7Y2FzZSBJTlBVVF9UWVBFLlBJTkNIX0VORDppZihjdXJyZW50UEUpe2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO31lbHNle2NvbnN0IHBlPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uSUdOT1JFRF9UWVBFKTtwZS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2gocGUpO30KLWN1cnJlbnRQRT11bmRlZmluZWQ7YnJlYWs7fX0pO3JldHVybiBwcm90b0V4cGVjdGF0aW9uczt9Ci1mdW5jdGlvbiBoYW5kbGVGbGluZ0V2ZW50cyhtb2RlbEhlbHBlcixzb3J0ZWRJbnB1dEV2ZW50cyx3YXJuKXtjb25zdCBwcm90b0V4cGVjdGF0aW9ucz1bXTtsZXQgY3VycmVudFBFPXVuZGVmaW5lZDtmdW5jdGlvbiBpc1JlbmRlcmVyRmxpbmcoZXZlbnQpe3JldHVybiBldmVudC50aXRsZT09PVJFTkRFUkVSX0ZMSU5HX1RJVExFO30KLWNvbnN0IGJyb3dzZXJIZWxwZXI9bW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlcjtjb25zdCBmbGluZ0V2ZW50cz1icm93c2VySGVscGVyLmdldEFsbEFzeW5jU2xpY2VzTWF0Y2hpbmcoaXNSZW5kZXJlckZsaW5nKTtmb3JFdmVudFR5cGVzSW4oc29ydGVkSW5wdXRFdmVudHMsRkxJTkdfVFlQRV9OQU1FUyxmdW5jdGlvbihldmVudCl7ZmxpbmdFdmVudHMucHVzaChldmVudCk7fSk7ZmxpbmdFdmVudHMuc29ydChjb21wYXJlRXZlbnRzKTtmbGluZ0V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtpZihldmVudC50aXRsZT09PVJFTkRFUkVSX0ZMSU5HX1RJVExFKXtpZihjdXJyZW50UEUpe2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO31lbHNle2N1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLkFOSU1BVElPTl9UWVBFLElOSVRJQVRPUl9UWVBFLkZMSU5HKTtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKGN1cnJlbnRQRSk7fQotcmV0dXJuO30KLXN3aXRjaChldmVudC50eXBlTmFtZSl7Y2FzZSBJTlBVVF9UWVBFLkZMSU5HX1NUQVJUOmlmKGN1cnJlbnRQRSl7d2Fybih7dHlwZTonVXNlck1vZGVsQnVpbGRlcicsbWVzc2FnZTonVW5leHBlY3RlZCBGbGluZ1N0YXJ0JyxzaG93VG9Vc2VyOmZhbHNlLH0pO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO31lbHNle2N1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLkFOSU1BVElPTl9UWVBFLElOSVRJQVRPUl9UWVBFLkZMSU5HKTtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtjdXJyZW50UEUuZW5kPTA7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO30KLWJyZWFrO2Nhc2UgSU5QVVRfVFlQRS5GTElOR19DQU5DRUw6aWYoY3VycmVudFBFKXtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtjdXJyZW50UEUuZW5kPWV2ZW50LnN0YXJ0O2N1cnJlbnRQRT11bmRlZmluZWQ7fWVsc2V7Y29uc3QgcGU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5JR05PUkVEX1RZUEUpO3BlLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChwZSk7fQotYnJlYWs7fX0pO2lmKGN1cnJlbnRQRSYmIWN1cnJlbnRQRS5lbmQpe2N1cnJlbnRQRS5lbmQ9bW9kZWxIZWxwZXIubW9kZWwuYm91bmRzLm1heDt9Ci1yZXR1cm4gcHJvdG9FeHBlY3RhdGlvbnM7fQotZnVuY3Rpb24gaGFuZGxlVG91Y2hFdmVudHMobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2Fybil7Y29uc3QgcHJvdG9FeHBlY3RhdGlvbnM9W107bGV0IGN1cnJlbnRQRT11bmRlZmluZWQ7bGV0IHNhd0ZpcnN0TW92ZT1mYWxzZTtmb3JFdmVudFR5cGVzSW4oc29ydGVkSW5wdXRFdmVudHMsVE9VQ0hfVFlQRV9OQU1FUyxmdW5jdGlvbihldmVudCl7c3dpdGNoKGV2ZW50LnR5cGVOYW1lKXtjYXNlIElOUFVUX1RZUEUuVE9VQ0hfU1RBUlQ6aWYoY3VycmVudFBFKXtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTt9ZWxzZXtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFLElOSVRJQVRPUl9UWVBFLlRPVUNIKTtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtjdXJyZW50UEUuaXNBbmltYXRpb25CZWdpbj10cnVlO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTtzYXdGaXJzdE1vdmU9ZmFsc2U7fQotYnJlYWs7Y2FzZSBJTlBVVF9UWVBFLlRPVUNIX01PVkU6aWYoIWN1cnJlbnRQRSl7Y3VycmVudFBFPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUsSU5JVElBVE9SX1RZUEUuVE9VQ0gpO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTticmVhazt9Ci1pZigoc2F3Rmlyc3RNb3ZlJiYoY3VycmVudFBFLnR5cGU9PT1Qcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEUpKXx8IWN1cnJlbnRQRS5pc05lYXIoZXZlbnQsSU5QVVRfTUVSR0VfVEhSRVNIT0xEX01TKSl7Y29uc3QgcHJldkVuZD1jdXJyZW50UEUuZW5kO2N1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLkFOSU1BVElPTl9UWVBFLElOSVRJQVRPUl9UWVBFLlRPVUNIKTtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtjdXJyZW50UEUuc3RhcnQ9cHJldkVuZDtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKGN1cnJlbnRQRSk7fWVsc2V7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7c2F3Rmlyc3RNb3ZlPXRydWU7fQotYnJlYWs7Y2FzZSBJTlBVVF9UWVBFLlRPVUNIX0VORDppZighY3VycmVudFBFKXtjb25zdCBwZT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLklHTk9SRURfVFlQRSk7cGUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKHBlKTticmVhazt9Ci1pZihjdXJyZW50UEUuaXNOZWFyKGV2ZW50LElOUFVUX01FUkdFX1RIUkVTSE9MRF9NUykpe2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO31lbHNle2NvbnN0IHBlPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uSUdOT1JFRF9UWVBFKTtwZS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2gocGUpO30KLWN1cnJlbnRQRT11bmRlZmluZWQ7YnJlYWs7fX0pO3JldHVybiBwcm90b0V4cGVjdGF0aW9uczt9Ci1mdW5jdGlvbiBoYW5kbGVTY3JvbGxFdmVudHMobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2Fybil7Y29uc3QgcHJvdG9FeHBlY3RhdGlvbnM9W107bGV0IGN1cnJlbnRQRT11bmRlZmluZWQ7bGV0IHNhd0ZpcnN0VXBkYXRlPWZhbHNlO2ZvckV2ZW50VHlwZXNJbihzb3J0ZWRJbnB1dEV2ZW50cyxTQ1JPTExfVFlQRV9OQU1FUyxmdW5jdGlvbihldmVudCl7c3dpdGNoKGV2ZW50LnR5cGVOYW1lKXtjYXNlIElOUFVUX1RZUEUuU0NST0xMX0JFR0lOOmN1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEUsSU5JVElBVE9SX1RZUEUuU0NST0xMKTtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtjdXJyZW50UEUuaXNBbmltYXRpb25CZWdpbj10cnVlO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTtzYXdGaXJzdFVwZGF0ZT1mYWxzZTticmVhaztjYXNlIElOUFVUX1RZUEUuU0NST0xMX1VQREFURTppZihjdXJyZW50UEUpe2lmKGN1cnJlbnRQRS5pc05lYXIoZXZlbnQsSU5QVVRfTUVSR0VfVEhSRVNIT0xEX01TKSYmKChjdXJyZW50UEUudHlwZT09PVByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUpfHwhc2F3Rmlyc3RVcGRhdGUpKXtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtzYXdGaXJzdFVwZGF0ZT10cnVlO31lbHNle2N1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLkFOSU1BVElPTl9UWVBFLElOSVRJQVRPUl9UWVBFLlNDUk9MTCk7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO319ZWxzZXtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSxJTklUSUFUT1JfVFlQRS5TQ1JPTEwpO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTt9Ci1icmVhaztjYXNlIElOUFVUX1RZUEUuU0NST0xMX0VORDppZighY3VycmVudFBFKXt3YXJuKHt0eXBlOidVc2VyTW9kZWxCdWlsZGVyJyxtZXNzYWdlOidVbmV4cGVjdGVkIFNjcm9sbEVuZCcsc2hvd1RvVXNlcjpmYWxzZSx9KTtjb25zdCBwZT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLklHTk9SRURfVFlQRSk7cGUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKHBlKTticmVhazt9Ci1jdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTticmVhazt9fSk7cmV0dXJuIHByb3RvRXhwZWN0YXRpb25zO30KLWZ1bmN0aW9uIGhhbmRsZVZpZGVvQW5pbWF0aW9ucyhtb2RlbEhlbHBlcixzb3J0ZWRJbnB1dEV2ZW50cyx3YXJuKXtjb25zdCBldmVudHM9W107Zm9yKGNvbnN0IHBpZCBpbiBtb2RlbEhlbHBlci5yZW5kZXJlckhlbHBlcnMpe2Zvcihjb25zdCB0aWQgaW4gbW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzW3BpZF0ucHJvY2Vzcy50aHJlYWRzKXtmb3IoY29uc3QgYXN5bmNTbGljZSBvZgotbW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzW3BpZF0ucHJvY2Vzcy50aHJlYWRzW3RpZF0uYXN5bmNTbGljZUdyb3VwLnNsaWNlcyl7aWYoYXN5bmNTbGljZS50aXRsZT09PVBMQVlCQUNLX0VWRU5UX1RJVExFKXtldmVudHMucHVzaChhc3luY1NsaWNlKTt9fX19Ci1ldmVudHMuc29ydCh0ci5pbXBvcnRlci5jb21wYXJlRXZlbnRzKTtjb25zdCBwcm90b0V4cGVjdGF0aW9ucz1bXTtmb3IoY29uc3QgZXZlbnQgb2YgZXZlbnRzKXtjb25zdCBjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSxJTklUSUFUT1JfVFlQRS5WSURFTyk7Y3VycmVudFBFLnN0YXJ0PWV2ZW50LnN0YXJ0O2N1cnJlbnRQRS5lbmQ9ZXZlbnQuZW5kO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTt9Ci1yZXR1cm4gcHJvdG9FeHBlY3RhdGlvbnM7fQotZnVuY3Rpb24gaGFuZGxlVnJBbmltYXRpb25zKG1vZGVsSGVscGVyLHNvcnRlZElucHV0RXZlbnRzLHdhcm4pe2NvbnN0IGV2ZW50cz1bXTtjb25zdCBwcm9jZXNzZXM9W107aWYodHlwZW9mIG1vZGVsSGVscGVyLmdwdUhlbHBlciE9PSd1bmRlZmluZWQnKXtwcm9jZXNzZXMucHVzaChtb2RlbEhlbHBlci5ncHVIZWxwZXIucHJvY2Vzcyk7fQotZm9yKGNvbnN0IGhlbHBlciBvZiBPYmplY3QudmFsdWVzKG1vZGVsSGVscGVyLnJlbmRlcmVySGVscGVycykpe3Byb2Nlc3Nlcy5wdXNoKGhlbHBlci5wcm9jZXNzKTt9Ci1mb3IoY29uc3QgaGVscGVyIG9mIE9iamVjdC52YWx1ZXMobW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlcnMpKXtwcm9jZXNzZXMucHVzaChoZWxwZXIucHJvY2Vzcyk7fQotbGV0IHZyQ291bnRlclN0YXJ0PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSO2xldCB2ckV2ZW50U3RhcnQ9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7Zm9yKGNvbnN0IHByb2Mgb2YgcHJvY2Vzc2VzKXtmb3IoY29uc3RbY291bnRlck5hbWUsY291bnRlclNlcmllc11vZgotT2JqZWN0LmVudHJpZXMocHJvYy5jb3VudGVycykpe2lmKFZSX0NPVU5URVJfTkFNRVMuaW5jbHVkZXMoY291bnRlck5hbWUpKXtmb3IoY29uc3Qgc2VyaWVzIG9mIGNvdW50ZXJTZXJpZXMuc2VyaWVzKXtmb3IoY29uc3Qgc2FtcGxlIG9mIHNlcmllcy5zYW1wbGVzKXtldmVudHMucHVzaChzYW1wbGUpO3ZyQ291bnRlclN0YXJ0PU1hdGgubWluKHZyQ291bnRlclN0YXJ0LHNhbXBsZS50aW1lc3RhbXApO319fX0KLWZvcihjb25zdCB0aHJlYWQgb2YgT2JqZWN0LnZhbHVlcyhwcm9jLnRocmVhZHMpKXtmb3IoY29uc3QgY29udGFpbmVyIG9mIHRocmVhZC5jaGlsZEV2ZW50Q29udGFpbmVycygpKXtmb3IoY29uc3Qgc2xpY2Ugb2YgY29udGFpbmVyLnNsaWNlcyl7aWYoVlJfRVZFTlRfTkFNRVMuaW5jbHVkZXMoc2xpY2UudGl0bGUpKXtldmVudHMucHVzaChzbGljZSk7dnJFdmVudFN0YXJ0PU1hdGgubWluKHZyRXZlbnRTdGFydCxzbGljZS5zdGFydCk7fX19fX0KLWlmKGV2ZW50cy5sZW5ndGg9PT0wKXtyZXR1cm5bXTt9Ci1ldmVudHMuc29ydChmdW5jdGlvbih4LHkpe2lmKHgucmFuZ2UubWluIT09eS5yYW5nZS5taW4pe3JldHVybiB4LnJhbmdlLm1pbi15LnJhbmdlLm1pbjt9Ci1yZXR1cm4geC5ndWlkLXkuZ3VpZDt9KTt2ckNvdW50ZXJTdGFydD0odnJDb3VudGVyU3RhcnQ9PT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUik/MDp2ckNvdW50ZXJTdGFydDt2ckV2ZW50U3RhcnQ9KHZyRXZlbnRTdGFydD09PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSKT8wOnZyRXZlbnRTdGFydDtjb25zdCB2ckFuaW1hdGlvblN0YXJ0PU1hdGgubWF4KHZyQ291bnRlclN0YXJ0LHZyRXZlbnRTdGFydCkrCi1WUl9SRVNQT05TRV9NUztjb25zdCByZXNwb25zZVBFPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uUkVTUE9OU0VfVFlQRSxJTklUSUFUT1JfVFlQRS5WUik7Y29uc3QgYW5pbWF0aW9uUEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSxJTklUSUFUT1JfVFlQRS5WUik7bGV0IGxhc3RSZXNwb25zZUV2ZW50O2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2lmKGV2ZW50LnJhbmdlLm1pbjx2ckFuaW1hdGlvblN0YXJ0KXtpZihldmVudCBpbnN0YW5jZW9mIHRyLm1vZGVsLkNvdW50ZXJTYW1wbGUpe3Jlc3BvbnNlUEUucHVzaFNhbXBsZShldmVudCk7fWVsc2V7cmVzcG9uc2VQRS5wdXNoRXZlbnQoZXZlbnQpO30KLWxhc3RSZXNwb25zZUV2ZW50PWV2ZW50O31lbHNle2lmKGV2ZW50IGluc3RhbmNlb2YgdHIubW9kZWwuQ291bnRlclNhbXBsZSl7YW5pbWF0aW9uUEUucHVzaFNhbXBsZShldmVudCk7fWVsc2V7YW5pbWF0aW9uUEUucHVzaEV2ZW50KGV2ZW50KTt9fX0KLWlmKGxhc3RSZXNwb25zZUV2ZW50IGluc3RhbmNlb2YgdHIubW9kZWwuQ291bnRlclNhbXBsZSl7YW5pbWF0aW9uUEUucHVzaFNhbXBsZShsYXN0UmVzcG9uc2VFdmVudCk7fWVsc2V7YW5pbWF0aW9uUEUucHVzaEV2ZW50KGxhc3RSZXNwb25zZUV2ZW50KTt9Ci1yZXR1cm5bcmVzcG9uc2VQRSxhbmltYXRpb25QRV07fQotZnVuY3Rpb24gaGFuZGxlQ1NTQW5pbWF0aW9ucyhtb2RlbEhlbHBlcixzb3J0ZWRJbnB1dEV2ZW50cyx3YXJuKXtjb25zdCBhbmltYXRpb25FdmVudHM9bW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlci5nZXRBbGxBc3luY1NsaWNlc01hdGNoaW5nKGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4oKGV2ZW50LnRpdGxlPT09Q1NTX0FOSU1BVElPTl9USVRMRSkmJmV2ZW50LmlzVG9wTGV2ZWwmJihldmVudC5kdXJhdGlvbj4wKSk7fSk7Y29uc3QgYW5pbWF0aW9uUmFuZ2VzPVtdO2Z1bmN0aW9uIHB1c2hBbmltYXRpb25SYW5nZShzdGFydCxlbmQsYW5pbWF0aW9uKXtjb25zdCByYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2Uoc3RhcnQsZW5kKTtyYW5nZS5hbmltYXRpb249YW5pbWF0aW9uO2FuaW1hdGlvblJhbmdlcy5wdXNoKHJhbmdlKTt9Ci1hbmltYXRpb25FdmVudHMuZm9yRWFjaChmdW5jdGlvbihhbmltYXRpb24pe2lmKGFuaW1hdGlvbi5zdWJTbGljZXMubGVuZ3RoPT09MCl7cHVzaEFuaW1hdGlvblJhbmdlKGFuaW1hdGlvbi5zdGFydCxhbmltYXRpb24uZW5kLGFuaW1hdGlvbik7fWVsc2V7bGV0IHN0YXJ0PXVuZGVmaW5lZDthbmltYXRpb24uc3ViU2xpY2VzLmZvckVhY2goZnVuY3Rpb24oc3ViKXtpZigoc3ViLmFyZ3MuZGF0YS5zdGF0ZT09PSdydW5uaW5nJykmJihzdGFydD09PXVuZGVmaW5lZCkpe3N0YXJ0PXN1Yi5zdGFydDt9ZWxzZSBpZigoc3ViLmFyZ3MuZGF0YS5zdGF0ZT09PSdwYXVzZWQnKXx8KHN1Yi5hcmdzLmRhdGEuc3RhdGU9PT0naWRsZScpfHwoc3ViLmFyZ3MuZGF0YS5zdGF0ZT09PSdmaW5pc2hlZCcpKXtpZihzdGFydD09PXVuZGVmaW5lZCl7c3RhcnQ9bW9kZWxIZWxwZXIubW9kZWwuYm91bmRzLm1pbjt9Ci1wdXNoQW5pbWF0aW9uUmFuZ2Uoc3RhcnQsc3ViLnN0YXJ0LGFuaW1hdGlvbik7c3RhcnQ9dW5kZWZpbmVkO319KTtpZihzdGFydCE9PXVuZGVmaW5lZCl7cHVzaEFuaW1hdGlvblJhbmdlKHN0YXJ0LGFuaW1hdGlvbi5lbmQsYW5pbWF0aW9uKTt9fX0pO3JldHVybiBhbmltYXRpb25SYW5nZXMubWFwKGZ1bmN0aW9uKHJhbmdlKXtjb25zdCBwcm90b0V4cGVjdGF0aW9uPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUsSU5JVElBVE9SX1RZUEUuQ1NTKTtwcm90b0V4cGVjdGF0aW9uLnN0YXJ0PXJhbmdlLm1pbjtwcm90b0V4cGVjdGF0aW9uLmVuZD1yYW5nZS5tYXg7cHJvdG9FeHBlY3RhdGlvbi5hc3NvY2lhdGVkRXZlbnRzLnB1c2gocmFuZ2UuYW5pbWF0aW9uKTtyZXR1cm4gcHJvdG9FeHBlY3RhdGlvbjt9KTt9Ci1mdW5jdGlvbiBmaW5kV2ViR0xFdmVudHMobW9kZWxIZWxwZXIsbWFpbGJveEV2ZW50cyxhbmltYXRpb25FdmVudHMpe2Zvcihjb25zdCBldmVudCBvZiBtb2RlbEhlbHBlci5tb2RlbC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKGV2ZW50LnRpdGxlPT09J0RyYXdpbmdCdWZmZXI6OnByZXBhcmVNYWlsYm94Jyl7bWFpbGJveEV2ZW50cy5wdXNoKGV2ZW50KTt9ZWxzZSBpZihldmVudC50aXRsZT09PSdQYWdlQW5pbWF0b3I6OnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMnKXthbmltYXRpb25FdmVudHMucHVzaChldmVudCk7fX19Ci1mdW5jdGlvbiBmaW5kTWFpbGJveEV2ZW50c05lYXJBbmltYXRpb25FdmVudHMobWFpbGJveEV2ZW50cyxhbmltYXRpb25FdmVudHMpe2lmKGFuaW1hdGlvbkV2ZW50cy5sZW5ndGg9PT0wKXJldHVybltdO21haWxib3hFdmVudHMuc29ydChjb21wYXJlRXZlbnRzKTthbmltYXRpb25FdmVudHMuc29ydChjb21wYXJlRXZlbnRzKTtjb25zdCBhbmltYXRpb25JdGVyYXRvcj1hbmltYXRpb25FdmVudHNbU3ltYm9sLml0ZXJhdG9yXSgpO2xldCBhbmltYXRpb25FdmVudD1hbmltYXRpb25JdGVyYXRvci5uZXh0KCkudmFsdWU7Y29uc3QgZmlsdGVyZWRFdmVudHM9W107Zm9yKGNvbnN0IGV2ZW50IG9mIG1haWxib3hFdmVudHMpe3doaWxlKGFuaW1hdGlvbkV2ZW50JiYoYW5pbWF0aW9uRXZlbnQuc3RhcnQ8KGV2ZW50LnN0YXJ0LUFOSU1BVElPTl9NRVJHRV9USFJFU0hPTERfTVMpKSl7YW5pbWF0aW9uRXZlbnQ9YW5pbWF0aW9uSXRlcmF0b3IubmV4dCgpLnZhbHVlO30KLWlmKCFhbmltYXRpb25FdmVudClicmVhaztpZihhbmltYXRpb25FdmVudC5zdGFydDwoZXZlbnQuc3RhcnQrQU5JTUFUSU9OX01FUkdFX1RIUkVTSE9MRF9NUykpe2ZpbHRlcmVkRXZlbnRzLnB1c2goZXZlbnQpO319Ci1yZXR1cm4gZmlsdGVyZWRFdmVudHM7fQotZnVuY3Rpb24gY3JlYXRlUHJvdG9FeHBlY3RhdGlvbnNGcm9tTWFpbGJveEV2ZW50cyhtYWlsYm94RXZlbnRzKXtjb25zdCBwcm90b0V4cGVjdGF0aW9ucz1bXTtsZXQgY3VycmVudFBFPXVuZGVmaW5lZDtmb3IoY29uc3QgZXZlbnQgb2YgbWFpbGJveEV2ZW50cyl7aWYoY3VycmVudFBFPT09dW5kZWZpbmVkfHwhY3VycmVudFBFLmlzTmVhcihldmVudCxBTklNQVRJT05fTUVSR0VfVEhSRVNIT0xEX01TKSl7Y3VycmVudFBFPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUsSU5JVElBVE9SX1RZUEUuV0VCR0wpO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTt9ZWxzZXtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTt9fQotcmV0dXJuIHByb3RvRXhwZWN0YXRpb25zO30KLWZ1bmN0aW9uIGhhbmRsZVdlYkdMQW5pbWF0aW9ucyhtb2RlbEhlbHBlcixzb3J0ZWRJbnB1dEV2ZW50cyx3YXJuKXtjb25zdCBwcmVwYXJlTWFpbGJveEV2ZW50cz1bXTtjb25zdCBzY3JpcHRlZEFuaW1hdGlvbkV2ZW50cz1bXTtmaW5kV2ViR0xFdmVudHMobW9kZWxIZWxwZXIscHJlcGFyZU1haWxib3hFdmVudHMsc2NyaXB0ZWRBbmltYXRpb25FdmVudHMpO2NvbnN0IHdlYkdMTWFpbGJveEV2ZW50cz1maW5kTWFpbGJveEV2ZW50c05lYXJBbmltYXRpb25FdmVudHMocHJlcGFyZU1haWxib3hFdmVudHMsc2NyaXB0ZWRBbmltYXRpb25FdmVudHMpO3JldHVybiBjcmVhdGVQcm90b0V4cGVjdGF0aW9uc0Zyb21NYWlsYm94RXZlbnRzKHdlYkdMTWFpbGJveEV2ZW50cyk7fQotZnVuY3Rpb24gcG9zdFByb2Nlc3NQcm90b0V4cGVjdGF0aW9ucyhtb2RlbEhlbHBlcixwcm90b0V4cGVjdGF0aW9ucyl7cHJvdG9FeHBlY3RhdGlvbnM9ZmluZEZyYW1lRXZlbnRzRm9yQW5pbWF0aW9ucyhtb2RlbEhlbHBlcixwcm90b0V4cGVjdGF0aW9ucyk7cHJvdG9FeHBlY3RhdGlvbnM9bWVyZ2VJbnRlcnNlY3RpbmdSZXNwb25zZXMocHJvdG9FeHBlY3RhdGlvbnMpO3Byb3RvRXhwZWN0YXRpb25zPW1lcmdlSW50ZXJzZWN0aW5nQW5pbWF0aW9ucyhwcm90b0V4cGVjdGF0aW9ucyk7cHJvdG9FeHBlY3RhdGlvbnM9Zml4UmVzcG9uc2VBbmltYXRpb25TdGFydHMocHJvdG9FeHBlY3RhdGlvbnMpO3Byb3RvRXhwZWN0YXRpb25zPWZpeFRhcFJlc3BvbnNlVG91Y2hBbmltYXRpb25zKHByb3RvRXhwZWN0YXRpb25zKTtyZXR1cm4gcHJvdG9FeHBlY3RhdGlvbnM7fQotZnVuY3Rpb24gbWVyZ2VJbnRlcnNlY3RpbmdSZXNwb25zZXMocHJvdG9FeHBlY3RhdGlvbnMpe2NvbnN0IG5ld1BFcz1bXTt3aGlsZShwcm90b0V4cGVjdGF0aW9ucy5sZW5ndGgpe2NvbnN0IHBlPXByb3RvRXhwZWN0YXRpb25zLnNoaWZ0KCk7bmV3UEVzLnB1c2gocGUpO2lmKHBlLnR5cGUhPT1Qcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEUpY29udGludWU7Zm9yKGxldCBpPTA7aTxwcm90b0V4cGVjdGF0aW9ucy5sZW5ndGg7KytpKXtjb25zdCBvdGhlclBFPXByb3RvRXhwZWN0YXRpb25zW2ldO2lmKG90aGVyUEUudHlwZSE9PXBlLnR5cGUpY29udGludWU7aWYoIW90aGVyUEUuaW50ZXJzZWN0cyhwZSkpY29udGludWU7Y29uc3QgdHlwZU5hbWVzPXBlLmFzc29jaWF0ZWRFdmVudHMubWFwKGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZlbnQudHlwZU5hbWU7fSk7aWYob3RoZXJQRS5jb250YWluc1R5cGVOYW1lcyh0eXBlTmFtZXMpKWNvbnRpbnVlO3BlLm1lcmdlKG90aGVyUEUpO3Byb3RvRXhwZWN0YXRpb25zLnNwbGljZShpLDEpOy0taTt9fQotcmV0dXJuIG5ld1BFczt9Ci1mdW5jdGlvbiBtZXJnZUludGVyc2VjdGluZ0FuaW1hdGlvbnMocHJvdG9FeHBlY3RhdGlvbnMpe2NvbnN0IG5ld1BFcz1bXTt3aGlsZShwcm90b0V4cGVjdGF0aW9ucy5sZW5ndGgpe2NvbnN0IHBlPXByb3RvRXhwZWN0YXRpb25zLnNoaWZ0KCk7bmV3UEVzLnB1c2gocGUpO2lmKHBlLnR5cGUhPT1Qcm90b0V4cGVjdGF0aW9uLkFOSU1BVElPTl9UWVBFKWNvbnRpbnVlO2NvbnN0IGlzQ1NTPXBlLmluaXRpYXRvclR5cGU9PT1JTklUSUFUT1JfVFlQRS5DU1M7Y29uc3QgaXNGbGluZz1wZS5jb250YWluc1R5cGVOYW1lcyhbSU5QVVRfVFlQRS5GTElOR19TVEFSVF0pO2NvbnN0IGlzVmlkZW89cGUuaW5pdGlhdG9yVHlwZT09PUlOSVRJQVRPUl9UWVBFLlZJREVPO2ZvcihsZXQgaT0wO2k8cHJvdG9FeHBlY3RhdGlvbnMubGVuZ3RoOysraSl7Y29uc3Qgb3RoZXJQRT1wcm90b0V4cGVjdGF0aW9uc1tpXTtpZihvdGhlclBFLnR5cGUhPT1wZS50eXBlKWNvbnRpbnVlO2lmKChpc0NTUyYmb3RoZXJQRS5pbml0aWF0b3JUeXBlIT09SU5JVElBVE9SX1RZUEUuQ1NTKXx8aXNGbGluZyE9PW90aGVyUEUuY29udGFpbnNUeXBlTmFtZXMoW0lOUFVUX1RZUEUuRkxJTkdfU1RBUlRdKXx8aXNWaWRlbyYmb3RoZXJQRS5pbml0aWF0b3JUeXBlIT09SU5JVElBVE9SX1RZUEUuVklERU98fG90aGVyUEUuaW5pdGlhdG9yVHlwZT09PUlOSVRJQVRPUl9UWVBFLlZSKXtjb250aW51ZTt9Ci1pZihpc0NTUyl7aWYoIXBlLmlzTmVhcihvdGhlclBFLEFOSU1BVElPTl9NRVJHRV9USFJFU0hPTERfTVMpKXtjb250aW51ZTt9fWVsc2UgaWYoIW90aGVyUEUuaW50ZXJzZWN0cyhwZSkpe2NvbnRpbnVlO30KLXBlLm1lcmdlKG90aGVyUEUpO3Byb3RvRXhwZWN0YXRpb25zLnNwbGljZShpLDEpOy0taTt9fQotcmV0dXJuIG5ld1BFczt9Ci1mdW5jdGlvbiBmaXhSZXNwb25zZUFuaW1hdGlvblN0YXJ0cyhwcm90b0V4cGVjdGF0aW9ucyl7cHJvdG9FeHBlY3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihhcGUpe2lmKGFwZS50eXBlIT09UHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSl7cmV0dXJuO30KLXByb3RvRXhwZWN0YXRpb25zLmZvckVhY2goZnVuY3Rpb24ocnBlKXtpZihycGUudHlwZSE9PVByb3RvRXhwZWN0YXRpb24uUkVTUE9OU0VfVFlQRSl7cmV0dXJuO30KLWlmKCFhcGUuY29udGFpbnNUaW1lc3RhbXBJbmNsdXNpdmUocnBlLmVuZCkpe3JldHVybjt9Ci1pZihhcGUuY29udGFpbnNUaW1lc3RhbXBJbmNsdXNpdmUocnBlLnN0YXJ0KSl7cmV0dXJuO30KLWFwZS5zdGFydD1ycGUuZW5kO30pO30pO3JldHVybiBwcm90b0V4cGVjdGF0aW9uczt9Ci1mdW5jdGlvbiBmaXhUYXBSZXNwb25zZVRvdWNoQW5pbWF0aW9ucyhwcm90b0V4cGVjdGF0aW9ucyl7ZnVuY3Rpb24gaXNUYXBSZXNwb25zZShwZSl7cmV0dXJuKHBlLnR5cGU9PT1Qcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEUpJiZwZS5jb250YWluc1R5cGVOYW1lcyhbSU5QVVRfVFlQRS5UQVBdKTt9Ci1mdW5jdGlvbiBpc1RvdWNoQW5pbWF0aW9uKHBlKXtyZXR1cm4ocGUudHlwZT09PVByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUpJiZwZS5jb250YWluc1R5cGVOYW1lcyhbSU5QVVRfVFlQRS5UT1VDSF9NT1ZFXSkmJiFwZS5jb250YWluc1R5cGVOYW1lcyhbSU5QVVRfVFlQRS5TQ1JPTExfVVBEQVRFLElOUFVUX1RZUEUuUElOQ0hfVVBEQVRFXSk7fQotY29uc3QgbmV3UEVzPVtdO3doaWxlKHByb3RvRXhwZWN0YXRpb25zLmxlbmd0aCl7Y29uc3QgcGU9cHJvdG9FeHBlY3RhdGlvbnMuc2hpZnQoKTtuZXdQRXMucHVzaChwZSk7Y29uc3QgcGVJc1RhcFJlc3BvbnNlPWlzVGFwUmVzcG9uc2UocGUpO2NvbnN0IHBlSXNUb3VjaEFuaW1hdGlvbj1pc1RvdWNoQW5pbWF0aW9uKHBlKTtpZighcGVJc1RhcFJlc3BvbnNlJiYhcGVJc1RvdWNoQW5pbWF0aW9uKXtjb250aW51ZTt9Ci1mb3IobGV0IGk9MDtpPHByb3RvRXhwZWN0YXRpb25zLmxlbmd0aDsrK2kpe2NvbnN0IG90aGVyUEU9cHJvdG9FeHBlY3RhdGlvbnNbaV07aWYoIW90aGVyUEUuaW50ZXJzZWN0cyhwZSkpY29udGludWU7aWYocGVJc1RhcFJlc3BvbnNlJiYhaXNUb3VjaEFuaW1hdGlvbihvdGhlclBFKSljb250aW51ZTtpZihwZUlzVG91Y2hBbmltYXRpb24mJiFpc1RhcFJlc3BvbnNlKG90aGVyUEUpKWNvbnRpbnVlO3BlLnR5cGU9UHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFO3BlLm1lcmdlKG90aGVyUEUpO3Byb3RvRXhwZWN0YXRpb25zLnNwbGljZShpLDEpOy0taTt9fQotcmV0dXJuIG5ld1BFczt9Ci1mdW5jdGlvbiBmaW5kRnJhbWVFdmVudHNGb3JBbmltYXRpb25zKG1vZGVsSGVscGVyLHByb3RvRXhwZWN0YXRpb25zKXtjb25zdCBuZXdQRXM9W107Y29uc3QgZnJhbWVFdmVudHNCeVBpZD1nZXRTb3J0ZWRGcmFtZUV2ZW50c0J5UHJvY2Vzcyhtb2RlbEhlbHBlcik7Zm9yKGNvbnN0IHBlIG9mIHByb3RvRXhwZWN0YXRpb25zKXtpZihwZS50eXBlIT09UHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSl7bmV3UEVzLnB1c2gocGUpO2NvbnRpbnVlO30KLWNvbnN0IGZyYW1lRXZlbnRzPVtdO2Zvcihjb25zdCBwaWQgb2YgT2JqZWN0LmtleXMobW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzKSl7Y29uc3QgcmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHBlLnN0YXJ0LHBlLmVuZCk7ZnJhbWVFdmVudHMucHVzaC5hcHBseShmcmFtZUV2ZW50cyxyYW5nZS5maWx0ZXJBcnJheShmcmFtZUV2ZW50c0J5UGlkW3BpZF0sZT0+ZS5zdGFydCkpO30KLWlmKGZyYW1lRXZlbnRzLmxlbmd0aD09PTAmJiEocGUuaW5pdGlhdG9yVHlwZT09PUlOSVRJQVRPUl9UWVBFLldFQkdMfHxwZS5pbml0aWF0b3JUeXBlPT09SU5JVElBVE9SX1RZUEUuVlIpKXtwZS50eXBlPVByb3RvRXhwZWN0YXRpb24uSUdOT1JFRF9UWVBFO25ld1BFcy5wdXNoKHBlKTtjb250aW51ZTt9Ci1wZS5hc3NvY2lhdGVkRXZlbnRzLmFkZEV2ZW50U2V0KGZyYW1lRXZlbnRzKTtuZXdQRXMucHVzaChwZSk7fQotcmV0dXJuIG5ld1BFczt9Ci1mdW5jdGlvbiBjaGVja0FsbElucHV0RXZlbnRzSGFuZGxlZChtb2RlbEhlbHBlcixzb3J0ZWRJbnB1dEV2ZW50cyxwcm90b0V4cGVjdGF0aW9ucyx3YXJuKXtjb25zdCBoYW5kbGVkRXZlbnRzPVtdO3Byb3RvRXhwZWN0YXRpb25zLmZvckVhY2goZnVuY3Rpb24ocHJvdG9FeHBlY3RhdGlvbil7cHJvdG9FeHBlY3RhdGlvbi5hc3NvY2lhdGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2lmKChldmVudC50aXRsZT09PUNTU19BTklNQVRJT05fVElUTEUpJiYoZXZlbnQuc3ViU2xpY2VzLmxlbmd0aD4wKSl7cmV0dXJuO30KLWlmKChoYW5kbGVkRXZlbnRzLmluZGV4T2YoZXZlbnQpPj0wKSYmKGV2ZW50LnRpdGxlIT09dHIubW9kZWwuaGVscGVycy5JTVBMX1JFTkRFUklOR19TVEFUUykpe3dhcm4oe3R5cGU6J1VzZXJNb2RlbEJ1aWxkZXInLG1lc3NhZ2U6YGRvdWJsZS1oYW5kbGVkIGV2ZW50OiAke2V2ZW50LnR5cGVOYW1lfSBAICR7ZXZlbnQuc3RhcnR9YCxzaG93VG9Vc2VyOmZhbHNlLH0pO3JldHVybjt9Ci1oYW5kbGVkRXZlbnRzLnB1c2goZXZlbnQpO30pO30pO3NvcnRlZElucHV0RXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2lmKGhhbmRsZWRFdmVudHMuaW5kZXhPZihldmVudCk8MCl7d2Fybih7dHlwZTonVXNlck1vZGVsQnVpbGRlcicsbWVzc2FnZTpgZG91YmxlLWhhbmRsZWQgZXZlbnQ6ICR7ZXZlbnQudHlwZU5hbWV9IEAgJHtldmVudC5zdGFydH1gLHNob3dUb1VzZXI6ZmFsc2UsfSk7fX0pO30KLWZ1bmN0aW9uIGZpbmRJbnB1dEV4cGVjdGF0aW9ucyhtb2RlbEhlbHBlcil7bGV0IHdhcm5pbmc7ZnVuY3Rpb24gd2Fybih3KXtpZih3YXJuaW5nKXJldHVybjt3YXJuaW5nPXc7fQotY29uc3Qgc29ydGVkSW5wdXRFdmVudHM9Z2V0U29ydGVkSW5wdXRFdmVudHMobW9kZWxIZWxwZXIpO2xldCBwcm90b0V4cGVjdGF0aW9ucz1maW5kUHJvdG9FeHBlY3RhdGlvbnMobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2Fybik7cHJvdG9FeHBlY3RhdGlvbnM9cG9zdFByb2Nlc3NQcm90b0V4cGVjdGF0aW9ucyhtb2RlbEhlbHBlcixwcm90b0V4cGVjdGF0aW9ucyk7Y2hlY2tBbGxJbnB1dEV2ZW50c0hhbmRsZWQobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMscHJvdG9FeHBlY3RhdGlvbnMsd2Fybik7aWYod2FybmluZyltb2RlbEhlbHBlci5tb2RlbC5pbXBvcnRXYXJuaW5nKHdhcm5pbmcpO2NvbnN0IGV4cGVjdGF0aW9ucz1bXTtwcm90b0V4cGVjdGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHByb3RvRXhwZWN0YXRpb24pe2NvbnN0IGlyPXByb3RvRXhwZWN0YXRpb24uY3JlYXRlSW50ZXJhY3Rpb25SZWNvcmQobW9kZWxIZWxwZXIubW9kZWwpO2lmKGlyKXtleHBlY3RhdGlvbnMucHVzaChpcik7fX0pO3JldHVybiBleHBlY3RhdGlvbnM7fQotcmV0dXJue2ZpbmRJbnB1dEV4cGVjdGF0aW9ucyxjb21wYXJlRXZlbnRzLENTU19BTklNQVRJT05fVElUTEUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y2xhc3MgRml4ZWRDb2xvclNjaGVtZXtjb25zdHJ1Y3RvcihuYW1lc1RvQ29sb3JzKXt0aGlzLm5hbWVzVG9Db2xvcnNfPW5hbWVzVG9Db2xvcnM7fQotc3RhdGljIGZyb21OYW1lcyhuYW1lcyl7Y29uc3QgbmFtZXNUb0NvbG9ycz1uZXcgTWFwKCk7Y29uc3QgZ2VuZXJhdG9yPW5ldyB0ci5iLlNpbmVib3dDb2xvckdlbmVyYXRvcigpO2Zvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtuYW1lc1RvQ29sb3JzLnNldChuYW1lLGdlbmVyYXRvci5jb2xvckZvcktleShuYW1lKSk7fQotcmV0dXJuIG5ldyBGaXhlZENvbG9yU2NoZW1lKG5hbWVzVG9Db2xvcnMpO30KLWdldENvbG9yKG5hbWUpe2NvbnN0IGNvbG9yPXRoaXMubmFtZXNUb0NvbG9yc18uZ2V0KG5hbWUpO2lmKGNvbG9yPT09dW5kZWZpbmVkKXRocm93IG5ldyBFcnJvcignVW5rbm93biBjb2xvcjogJytuYW1lKTtyZXR1cm4gY29sb3I7fX0KLWNvbnN0IE1lbW9yeUNvbHVtbkNvbG9yU2NoZW1lPW5ldyBGaXhlZENvbG9yU2NoZW1lKG5ldyBNYXAoW1sndXNlZF9tZW1vcnlfY29sdW1uJyxuZXcgdHIuYi5Db2xvcigwLDAsMjU1KV0sWydvbGRlcl91c2VkX21lbW9yeV9jb2x1bW4nLG5ldyB0ci5iLkNvbG9yKDE1MywyMDQsMjU1KV0sWyd0cmFjaW5nX21lbW9yeV9jb2x1bW4nLG5ldyB0ci5iLkNvbG9yKDE1MywxNTMsMTUzKV1dKSk7ZnVuY3Rpb24gRml4ZWRDb2xvclNjaGVtZVJlZ2lzdHJ5KCl7fQotRml4ZWRDb2xvclNjaGVtZVJlZ2lzdHJ5Lmxvb2tVcD1mdW5jdGlvbihuYW1lKXtjb25zdCBpbmZvPXRoaXMuZmluZFR5cGVJbmZvTWF0Y2hpbmcoaW5mbz0+aW5mby5tZXRhZGF0YS5uYW1lPT09bmFtZSk7aWYoIWluZm8pcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gaW5mby5jb25zdHJ1Y3RvcigpO307Y29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5CQVNJQ19SRUdJU1RSWV9NT0RFKTt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoRml4ZWRDb2xvclNjaGVtZVJlZ2lzdHJ5LG9wdGlvbnMpO3JldHVybntNZW1vcnlDb2x1bW5Db2xvclNjaGVtZSxGaXhlZENvbG9yU2NoZW1lLEZpeGVkQ29sb3JTY2hlbWVSZWdpc3RyeSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUuY2hyb21lX3Byb2Nlc3NlcycsZnVuY3Rpb24oKXtjb25zdCBDSFJPTUVfUFJPQ0VTU19OQU1FUz17QlJPV1NFUjonYnJvd3Nlcl9wcm9jZXNzJyxSRU5ERVJFUjoncmVuZGVyZXJfcHJvY2Vzc2VzJyxBTEw6J2FsbF9wcm9jZXNzZXMnLEdQVTonZ3B1X3Byb2Nlc3MnLFBQQVBJOidwcGFwaV9wcm9jZXNzJyxVTktOT1dOOid1bmtub3duX3Byb2Nlc3NlcycsfTtjb25zdCBQUk9DRVNTX0NPTE9SX1NDSEVNRV9OQU1FPSdDaHJvbWVQcm9jZXNzTmFtZXMnO2NvbnN0IFBST0NFU1NfQ09MT1JfU0NIRU1FPXRyLmIuRml4ZWRDb2xvclNjaGVtZS5mcm9tTmFtZXMoT2JqZWN0LnZhbHVlcyhDSFJPTUVfUFJPQ0VTU19OQU1FUykpO3RyLmIuRml4ZWRDb2xvclNjaGVtZVJlZ2lzdHJ5LnJlZ2lzdGVyKCgpPT5QUk9DRVNTX0NPTE9SX1NDSEVNRSx7bmFtZTpQUk9DRVNTX0NPTE9SX1NDSEVNRV9OQU1FLH0pO2Z1bmN0aW9uIGNhbm9uaWNhbGl6ZU5hbWUobmFtZSl7cmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcgJywnXycpO30KLWZ1bmN0aW9uIGNhbm9uaWNhbGl6ZVByb2Nlc3NOYW1lKHJhd1Byb2Nlc3NOYW1lKXtpZighcmF3UHJvY2Vzc05hbWUpcmV0dXJuIENIUk9NRV9QUk9DRVNTX05BTUVTLlVOS05PV047Y29uc3QgYmFzZUNhbm9uaWNhbE5hbWU9Y2Fub25pY2FsaXplTmFtZShyYXdQcm9jZXNzTmFtZSk7c3dpdGNoKGJhc2VDYW5vbmljYWxOYW1lKXtjYXNlJ3JlbmRlcmVyJzpyZXR1cm4gQ0hST01FX1BST0NFU1NfTkFNRVMuUkVOREVSRVI7Y2FzZSdicm93c2VyJzpyZXR1cm4gQ0hST01FX1BST0NFU1NfTkFNRVMuQlJPV1NFUjt9Ci1pZihPYmplY3QudmFsdWVzKENIUk9NRV9QUk9DRVNTX05BTUVTKS5pbmNsdWRlcyhiYXNlQ2Fub25pY2FsTmFtZSkpe3JldHVybiBiYXNlQ2Fub25pY2FsTmFtZTt9Ci1yZXR1cm4gQ0hST01FX1BST0NFU1NfTkFNRVMuVU5LTk9XTjt9Ci1yZXR1cm57Q0hST01FX1BST0NFU1NfTkFNRVMsUFJPQ0VTU19DT0xPUl9TQ0hFTUUsUFJPQ0VTU19DT0xPUl9TQ0hFTUVfTkFNRSxjYW5vbmljYWxpemVOYW1lLGNhbm9uaWNhbGl6ZVByb2Nlc3NOYW1lLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnNoJyxmdW5jdGlvbigpe2Z1bmN0aW9uIHBlcmNlcHR1YWxCbGVuZChpcixpbmRleCxzY29yZSl7cmV0dXJuIE1hdGguZXhwKDEtc2NvcmUpO30KLWZ1bmN0aW9uIGZpbHRlckV4cGVjdGF0aW9uc0J5UmFuZ2UoaXJzLG9wdF9yYW5nZSl7Y29uc3QgZmlsdGVyZWRFeHBlY3RhdGlvbnM9W107aXJzLmZvckVhY2goZnVuY3Rpb24oaXIpe2lmKCEoaXIgaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5Vc2VyRXhwZWN0YXRpb24pKXJldHVybjtpZighb3B0X3JhbmdlfHxvcHRfcmFuZ2UuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUoaXIuc3RhcnQsaXIuZW5kKSl7ZmlsdGVyZWRFeHBlY3RhdGlvbnMucHVzaChpcik7fX0pO3JldHVybiBmaWx0ZXJlZEV4cGVjdGF0aW9uczt9Ci1mdW5jdGlvbiBzcGxpdEdsb2JhbER1bXBzQnlCcm93c2VyTmFtZShtb2RlbCxvcHRfcmFuZ2VPZkludGVyZXN0KXtjb25zdCBjaHJvbWVNb2RlbEhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtjb25zdCBicm93c2VyTmFtZVRvR2xvYmFsRHVtcHM9bmV3IE1hcCgpO2NvbnN0IGdsb2JhbER1bXBUb0Jyb3dzZXJIZWxwZXI9bmV3IFdlYWtNYXAoKTtpZihjaHJvbWVNb2RlbEhlbHBlcil7Y2hyb21lTW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlcnMuZm9yRWFjaChmdW5jdGlvbihoZWxwZXIpe2NvbnN0IGdsb2JhbER1bXBzPXNraXBEdW1wc1RoYXREb05vdEludGVyc2VjdFJhbmdlKGhlbHBlci5wcm9jZXNzLm1lbW9yeUR1bXBzLm1hcChkPT5kLmdsb2JhbE1lbW9yeUR1bXApLG9wdF9yYW5nZU9mSW50ZXJlc3QpO2dsb2JhbER1bXBzLmZvckVhY2goZnVuY3Rpb24oZ2xvYmFsRHVtcCl7Y29uc3QgZXhpc3RpbmdIZWxwZXI9Z2xvYmFsRHVtcFRvQnJvd3NlckhlbHBlci5nZXQoZ2xvYmFsRHVtcCk7aWYoZXhpc3RpbmdIZWxwZXIhPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTWVtb3J5IGR1bXAgSUQgY2xhc2ggYWNyb3NzIG11bHRpcGxlIGJyb3dzZXJzICcrJ3dpdGggUElEczogJytleGlzdGluZ0hlbHBlci5waWQrJyBhbmQgJytoZWxwZXIucGlkKTt9Ci1nbG9iYWxEdW1wVG9Ccm93c2VySGVscGVyLnNldChnbG9iYWxEdW1wLGhlbHBlcik7fSk7bWFrZUtleVVuaXF1ZUFuZFNldChicm93c2VyTmFtZVRvR2xvYmFsRHVtcHMsdHIuZS5jaHJvbWUuY2hyb21lX3Byb2Nlc3Nlcy5jYW5vbmljYWxpemVOYW1lKGhlbHBlci5icm93c2VyTmFtZSksZ2xvYmFsRHVtcHMpO30pO30KLWNvbnN0IHVuY2xhc3NpZmllZEdsb2JhbER1bXBzPXNraXBEdW1wc1RoYXREb05vdEludGVyc2VjdFJhbmdlKG1vZGVsLmdsb2JhbE1lbW9yeUR1bXBzLmZpbHRlcihnPT4hZ2xvYmFsRHVtcFRvQnJvd3NlckhlbHBlci5oYXMoZykpLG9wdF9yYW5nZU9mSW50ZXJlc3QpO2lmKHVuY2xhc3NpZmllZEdsb2JhbER1bXBzLmxlbmd0aD4wKXttYWtlS2V5VW5pcXVlQW5kU2V0KGJyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcywndW5rbm93bl9icm93c2VyJyx1bmNsYXNzaWZpZWRHbG9iYWxEdW1wcyk7fQotcmV0dXJuIGJyb3dzZXJOYW1lVG9HbG9iYWxEdW1wczt9Ci1mdW5jdGlvbiBtYWtlS2V5VW5pcXVlQW5kU2V0KG1hcCxrZXksdmFsdWUpe2xldCB1bmlxdWVLZXk9a2V5O2xldCBuZXh0SW5kZXg9Mjt3aGlsZShtYXAuaGFzKHVuaXF1ZUtleSkpe3VuaXF1ZUtleT1rZXkrbmV4dEluZGV4O25leHRJbmRleCsrO30KLW1hcC5zZXQodW5pcXVlS2V5LHZhbHVlKTt9Ci1mdW5jdGlvbiBza2lwRHVtcHNUaGF0RG9Ob3RJbnRlcnNlY3RSYW5nZShkdW1wcyxvcHRfcmFuZ2Upe2lmKCFvcHRfcmFuZ2UpcmV0dXJuIGR1bXBzO3JldHVybiBkdW1wcy5maWx0ZXIoZD0+b3B0X3JhbmdlLmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKGQuc3RhcnQsZC5lbmQpKTt9Ci1mdW5jdGlvbiBoYXNDYXRlZ29yeUFuZE5hbWUoZXZlbnQsY2F0ZWdvcnksdGl0bGUpe3JldHVybiBldmVudC50aXRsZT09PXRpdGxlJiZldmVudC5jYXRlZ29yeSYmdHIuYi5nZXRDYXRlZ29yeVBhcnRzKGV2ZW50LmNhdGVnb3J5KS5pbmNsdWRlcyhjYXRlZ29yeSk7fQotcmV0dXJue2hhc0NhdGVnb3J5QW5kTmFtZSxmaWx0ZXJFeHBlY3RhdGlvbnNCeVJhbmdlLHBlcmNlcHR1YWxCbGVuZCxzcGxpdEdsb2JhbER1bXBzQnlCcm93c2VyTmFtZX07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmNocm9tZScsZnVuY3Rpb24oKXtjbGFzcyBFdmVudEZpbmRlclV0aWxze3N0YXRpYyBoYXNDYXRlZ29yeUFuZE5hbWUoZXZlbnQsY2F0ZWdvcnksdGl0bGUpe3JldHVybiBldmVudC50aXRsZT09PXRpdGxlJiZldmVudC5jYXRlZ29yeSYmdHIuYi5nZXRDYXRlZ29yeVBhcnRzKGV2ZW50LmNhdGVnb3J5KS5pbmNsdWRlcyhjYXRlZ29yeSk7fQotc3RhdGljIGdldFNvcnRlZE1haW5UaHJlYWRFdmVudHNCeUZyYW1lKHJlbmRlcmVySGVscGVyLGV2ZW50VGl0bGUsZXZlbnRDYXRlZ29yeSl7Y29uc3QgZXZlbnRzQnlGcmFtZT1uZXcgTWFwKCk7Zm9yKGNvbnN0IGV2IG9mIHJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQuc2xpY2VHcm91cC5jaGlsZEV2ZW50cygpKXtpZihyZW5kZXJlckhlbHBlci5pc1RlbGVtZXRyeUludGVybmFsRXZlbnQoZXYpKWNvbnRpbnVlO2lmKCF0aGlzLmhhc0NhdGVnb3J5QW5kTmFtZShldixldmVudENhdGVnb3J5LGV2ZW50VGl0bGUpKXtjb250aW51ZTt9Ci1jb25zdCBmcmFtZUlkUmVmPWV2LmFyZ3MuZnJhbWU7aWYoZnJhbWVJZFJlZj09PXVuZGVmaW5lZCljb250aW51ZTtpZighZXZlbnRzQnlGcmFtZS5oYXMoZnJhbWVJZFJlZikpe2V2ZW50c0J5RnJhbWUuc2V0KGZyYW1lSWRSZWYsW10pO30KLWV2ZW50c0J5RnJhbWUuZ2V0KGZyYW1lSWRSZWYpLnB1c2goZXYpO30KLXJldHVybiBldmVudHNCeUZyYW1lO30KLXN0YXRpYyBmaW5kTGFzdEV2ZW50U3RhcnRpbmdPbk9yQmVmb3JlVGltZXN0YW1wKHNvcnRlZEV2ZW50cyx0aW1lc3RhbXApe2NvbnN0IGZpcnN0SW5kZXhBZnRlclRpbWVzdGFtcD10ci5iLmZpbmRGaXJzdFRydWVJbmRleEluU29ydGVkQXJyYXkoc29ydGVkRXZlbnRzLGU9PmUuc3RhcnQ+dGltZXN0YW1wKTtpZihmaXJzdEluZGV4QWZ0ZXJUaW1lc3RhbXA9PT0wKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHNvcnRlZEV2ZW50c1tmaXJzdEluZGV4QWZ0ZXJUaW1lc3RhbXAtMV07fQotc3RhdGljIGZpbmRMYXN0RXZlbnRTdGFydGluZ0JlZm9yZVRpbWVzdGFtcChzb3J0ZWRFdmVudHMsdGltZXN0YW1wKXtjb25zdCBmaXJzdEluZGV4QWZ0ZXJUaW1lc3RhbXA9dHIuYi5maW5kRmlyc3RUcnVlSW5kZXhJblNvcnRlZEFycmF5KHNvcnRlZEV2ZW50cyxlPT5lLnN0YXJ0Pj10aW1lc3RhbXApO2lmKGZpcnN0SW5kZXhBZnRlclRpbWVzdGFtcD09PTApcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gc29ydGVkRXZlbnRzW2ZpcnN0SW5kZXhBZnRlclRpbWVzdGFtcC0xXTt9Ci1zdGF0aWMgZmluZE5leHRFdmVudFN0YXJ0aW5nT25PckFmdGVyVGltZXN0YW1wKHNvcnRlZEV2ZW50cyx0aW1lc3RhbXApe2NvbnN0IGZpcnN0SW5kZXhPbk9yQWZ0ZXJUaW1lc3RhbXA9dHIuYi5maW5kRmlyc3RUcnVlSW5kZXhJblNvcnRlZEFycmF5KHNvcnRlZEV2ZW50cyxlPT5lLnN0YXJ0Pj10aW1lc3RhbXApO2lmKGZpcnN0SW5kZXhPbk9yQWZ0ZXJUaW1lc3RhbXA9PT1zb3J0ZWRFdmVudHMubGVuZ3RoKXtyZXR1cm4gdW5kZWZpbmVkO30KLXJldHVybiBzb3J0ZWRFdmVudHNbZmlyc3RJbmRleE9uT3JBZnRlclRpbWVzdGFtcF07fQotc3RhdGljIGZpbmROZXh0RXZlbnRTdGFydGluZ0FmdGVyVGltZXN0YW1wKHNvcnRlZEV2ZW50cyx0aW1lc3RhbXApe2NvbnN0IGZpcnN0SW5kZXhPbk9yQWZ0ZXJUaW1lc3RhbXA9dHIuYi5maW5kRmlyc3RUcnVlSW5kZXhJblNvcnRlZEFycmF5KHNvcnRlZEV2ZW50cyxlPT5lLnN0YXJ0PnRpbWVzdGFtcCk7aWYoZmlyc3RJbmRleE9uT3JBZnRlclRpbWVzdGFtcD09PXNvcnRlZEV2ZW50cy5sZW5ndGgpe3JldHVybiB1bmRlZmluZWQ7fQotcmV0dXJuIHNvcnRlZEV2ZW50c1tmaXJzdEluZGV4T25PckFmdGVyVGltZXN0YW1wXTt9fQotcmV0dXJue0V2ZW50RmluZGVyVXRpbHMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2hyb21lJyxmdW5jdGlvbigpe2NvbnN0IFRJTUVfVE9fSU5URVJBQ1RJVkVfV0lORE9XX1NJWkVfTVM9NTAwMDtjb25zdCBBQ1RJVkVfUkVRVUVTVF9UT0xFUkFOQ0U9Mjtjb25zdCBGQ0lfTUlOX0NMVVNURVJfU0VQQVJBVElPTl9NUz0xMDAwO2NvbnN0IFRBU0tfQ0xVU1RFUl9IRUFWSU5FU1NfVEhSRVNIT0xEX01TPTI1MDtjb25zdCBFTkRQT0lOVF9UWVBFUz17TE9OR19UQVNLX1NUQVJUOidMT05HX1RBU0tfU1RBUlQnLExPTkdfVEFTS19FTkQ6J0xPTkdfVEFTS19FTkQnLFJFUVVFU1RfU1RBUlQ6J1JFUVVFU1RfU1RBUlQnLFJFUVVFU1RfRU5EOidSRVFVRVNUX0VORCd9O2Z1bmN0aW9uIGdldEVuZHBvaW50c18oZXZlbnRzLHN0YXJ0VHlwZSxlbmRUeXBlKXtjb25zdCBlbmRwb2ludHM9W107Zm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50cyl7ZW5kcG9pbnRzLnB1c2goe3RpbWU6ZXZlbnQuc3RhcnQsdHlwZTpzdGFydFR5cGV9KTtlbmRwb2ludHMucHVzaCh7dGltZTpldmVudC5lbmQsdHlwZTplbmRUeXBlfSk7fQotcmV0dXJuIGVuZHBvaW50czt9Ci1mdW5jdGlvbiByZWFjaGVkVFRJUXVpc2NlbmNlXyh0aW1lc3RhbXAsbmV0d29ya1F1aWV0V2luZG93U3RhcnQsbWFpblRocmVhZFF1aWV0V2luZG93U3RhcnQpe2lmKG5ldHdvcmtRdWlldFdpbmRvd1N0YXJ0PT09dW5kZWZpbmVkfHxtYWluVGhyZWFkUXVpZXRXaW5kb3dTdGFydD09PXVuZGVmaW5lZCl7cmV0dXJuIGZhbHNlO30KLWNvbnN0IG1haW5UaHJlYWRRdWlldEZvckxvbmdFbm91Z2g9dGltZXN0YW1wLW1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0Pj1USU1FX1RPX0lOVEVSQUNUSVZFX1dJTkRPV19TSVpFX01TO2NvbnN0IG5ldHdvcmtRdWlldEZvckxvbmdFbm91Z2g9dGltZXN0YW1wLW5ldHdvcmtRdWlldFdpbmRvd1N0YXJ0Pj1USU1FX1RPX0lOVEVSQUNUSVZFX1dJTkRPV19TSVpFX01TO3JldHVybiBtYWluVGhyZWFkUXVpZXRGb3JMb25nRW5vdWdoJiZuZXR3b3JrUXVpZXRGb3JMb25nRW5vdWdoO30KLWZ1bmN0aW9uIGZpbmRJbnRlcmFjdGl2ZVRpbWUoc2VhcmNoQmVnaW4sc2VhcmNoRW5kLGRvbUNvbnRlbnRMb2FkZWRFbmQsbG9uZ1Rhc2tzSW5XaW5kb3csbmV0d29ya1JlcXVlc3RzKXtjb25zdCBsb25nVGFza0VuZHBvaW50cz1nZXRFbmRwb2ludHNfKGxvbmdUYXNrc0luV2luZG93LEVORFBPSU5UX1RZUEVTLkxPTkdfVEFTS19TVEFSVCxFTkRQT0lOVF9UWVBFUy5MT05HX1RBU0tfRU5EKTtjb25zdCBuZXR3b3JrUmVxdWVzdEVuZHBvaW50cz1nZXRFbmRwb2ludHNfKG5ldHdvcmtSZXF1ZXN0cyxFTkRQT0lOVF9UWVBFUy5SRVFVRVNUX1NUQVJULEVORFBPSU5UX1RZUEVTLlJFUVVFU1RfRU5EKTtjb25zdCBlbmRwb2ludHM9bG9uZ1Rhc2tFbmRwb2ludHMuY29uY2F0KG5ldHdvcmtSZXF1ZXN0RW5kcG9pbnRzKTtlbmRwb2ludHMuc29ydCgoYSxiKT0+YS50aW1lLWIudGltZSk7bGV0IG5ldHdvcmtRdWlldFdpbmRvd1N0YXJ0PXNlYXJjaEJlZ2luO2xldCBtYWluVGhyZWFkUXVpZXRXaW5kb3dTdGFydD1zZWFyY2hCZWdpbjtsZXQgaW50ZXJhY3RpdmVDYW5kaWRhdGU9dW5kZWZpbmVkO2xldCBhY3RpdmVSZXF1ZXN0cz0wO2Zvcihjb25zdCBlbmRwb2ludCBvZiBlbmRwb2ludHMpe2lmKHJlYWNoZWRUVElRdWlzY2VuY2VfKGVuZHBvaW50LnRpbWUsbmV0d29ya1F1aWV0V2luZG93U3RhcnQsbWFpblRocmVhZFF1aWV0V2luZG93U3RhcnQpKXtpbnRlcmFjdGl2ZUNhbmRpZGF0ZT1tYWluVGhyZWFkUXVpZXRXaW5kb3dTdGFydDticmVhazt9Ci1zd2l0Y2goZW5kcG9pbnQudHlwZSl7Y2FzZSBFTkRQT0lOVF9UWVBFUy5MT05HX1RBU0tfU1RBUlQ6bWFpblRocmVhZFF1aWV0V2luZG93U3RhcnQ9dW5kZWZpbmVkO2JyZWFrO2Nhc2UgRU5EUE9JTlRfVFlQRVMuTE9OR19UQVNLX0VORDptYWluVGhyZWFkUXVpZXRXaW5kb3dTdGFydD1lbmRwb2ludC50aW1lO2JyZWFrO2Nhc2UgRU5EUE9JTlRfVFlQRVMuUkVRVUVTVF9TVEFSVDphY3RpdmVSZXF1ZXN0cysrO2lmKGFjdGl2ZVJlcXVlc3RzPkFDVElWRV9SRVFVRVNUX1RPTEVSQU5DRSl7bmV0d29ya1F1aWV0V2luZG93U3RhcnQ9dW5kZWZpbmVkO30KLWJyZWFrO2Nhc2UgRU5EUE9JTlRfVFlQRVMuUkVRVUVTVF9FTkQ6YWN0aXZlUmVxdWVzdHMtLTtpZihhY3RpdmVSZXF1ZXN0cz09PUFDVElWRV9SRVFVRVNUX1RPTEVSQU5DRSl7bmV0d29ya1F1aWV0V2luZG93U3RhcnQ9ZW5kcG9pbnQudGltZTt9Ci1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgRXJyb3I6IFVuaGFuZGxlZCBlbmRwb2ludCB0eXBlLicpO319Ci1pZihpbnRlcmFjdGl2ZUNhbmRpZGF0ZT09PXVuZGVmaW5lZCYmcmVhY2hlZFRUSVF1aXNjZW5jZV8oc2VhcmNoRW5kLG5ldHdvcmtRdWlldFdpbmRvd1N0YXJ0LG1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0KSl7aW50ZXJhY3RpdmVDYW5kaWRhdGU9bWFpblRocmVhZFF1aWV0V2luZG93U3RhcnQ7fQotaWYoaW50ZXJhY3RpdmVDYW5kaWRhdGU9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gTWF0aC5tYXgoaW50ZXJhY3RpdmVDYW5kaWRhdGUsZG9tQ29udGVudExvYWRlZEVuZCk7fQotZnVuY3Rpb24gcmVxdWlyZWRGQ0lXaW5kb3dTaXplTXModGltZVNpbmNlU2VhcmNoQmVnaW5Ncyl7Y29uc3QgdGltZUNvZWZmaWNpZW50PTEvMTUqTWF0aC5sb2coMik7Y29uc3QgdGltZVNpbmNlU2VhcmNoQmVnaW5TZWNvbmRzPXRyLmIuY29udmVydFVuaXQodGltZVNpbmNlU2VhcmNoQmVnaW5Ncyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEksdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk5PTkUpO2NvbnN0IHdpbmRvd1NpemVTZWNvbmRzPTQqTWF0aC5leHAoLXRpbWVDb2VmZmljaWVudCp0aW1lU2luY2VTZWFyY2hCZWdpblNlY29uZHMpKzE7cmV0dXJuIHRyLmIuY29udmVydFVuaXQod2luZG93U2l6ZVNlY29uZHMsdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk5PTkUsdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk1JTExJKTt9Ci1jbGFzcyBUYXNrQ2x1c3Rlcntjb25zdHJ1Y3Rvcih0YXNrc0luQ2x1c3RlclNvcnRlZCl7aWYodGFza3NJbkNsdXN0ZXJTb3J0ZWQubGVuZ3RoPT09MCl7dGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBFcnJvcjogVGFza0NsdXN0ZXIgbXVzdCBoYXZlIG5vbiB6ZXJvIHRhc2tzJyk7fQotZm9yKGxldCBpPTA7aTx0YXNrc0luQ2x1c3RlclNvcnRlZC5sZW5ndGgtMTtpKyspe2NvbnN0IGR1cmF0aW9uQmV0d2VlblRhc2tzPXRhc2tzSW5DbHVzdGVyU29ydGVkW2krMV0uc3RhcnQtCi10YXNrc0luQ2x1c3RlclNvcnRlZFtpXS5lbmQ7aWYoZHVyYXRpb25CZXR3ZWVuVGFza3M+PUZDSV9NSU5fQ0xVU1RFUl9TRVBBUkFUSU9OX01TKXt0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIEVycm9yOiBUYXNrcyBpbiBhIFRhc2tDbHVzdGVyIGNhbm5vdCBiZSAnKydtb3JlIHRoYW4gJytGQ0lfTUlOX0NMVVNURVJfU0VQQVJBVElPTl9NUysnIG1pbGlzZWNvbmRzIGFwYXJ0Jyk7fQotaWYoZHVyYXRpb25CZXR3ZWVuVGFza3M8LTFlNyl7dGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBFcnJvcjogTGlzdCBvZiB0YXNrcyB1c2VkIHRvIGNvbnN0cnVjdCAnKydUYXNrQ2x1c3RlciBtdXN0IGJlIHNvcnRlZC4nKTt9fQotdGhpcy5fY2x1c3RlclRhc2tzPXRhc2tzSW5DbHVzdGVyU29ydGVkO30KLWdldCBzdGFydCgpe3JldHVybiB0aGlzLl9jbHVzdGVyVGFza3NbMF0uc3RhcnQ7fQotZ2V0IGVuZCgpe3JldHVybiB0aGlzLl9jbHVzdGVyVGFza3NbdGhpcy5fY2x1c3RlclRhc2tzLmxlbmd0aC0xXS5lbmQ7fQotaXNIZWF2eSgpe3JldHVybiB0aGlzLmVuZC10aGlzLnN0YXJ0PlRBU0tfQ0xVU1RFUl9IRUFWSU5FU1NfVEhSRVNIT0xEX01TO319Ci1mdW5jdGlvbiBmaW5kRkNJVGFza0NsdXN0ZXJzKHNvcnRlZExvbmdUYXNrcyl7Y29uc3QgY2x1c3RlcnM9W107aWYoc29ydGVkTG9uZ1Rhc2tzLmxlbmd0aD09PTApcmV0dXJuIGNsdXN0ZXJzO2NvbnN0IGZpcnN0VGFzaz1zb3J0ZWRMb25nVGFza3NbMF07Y29uc3QgcmVzdE9mVGFza3M9c29ydGVkTG9uZ1Rhc2tzLnNsaWNlKDEpO2xldCBjdXJyZW50Q2x1c3RlclRhc2tzPVtmaXJzdFRhc2tdO2Zvcihjb25zdCBjdXJyVGFzayBvZiByZXN0T2ZUYXNrcyl7Y29uc3QgcHJldlRhc2s9Y3VycmVudENsdXN0ZXJUYXNrc1tjdXJyZW50Q2x1c3RlclRhc2tzLmxlbmd0aC0xXTtpZihjdXJyVGFzay5zdGFydC1wcmV2VGFzay5lbmQ8RkNJX01JTl9DTFVTVEVSX1NFUEFSQVRJT05fTVMpe2N1cnJlbnRDbHVzdGVyVGFza3MucHVzaChjdXJyVGFzayk7fWVsc2V7Y2x1c3RlcnMucHVzaChuZXcgVGFza0NsdXN0ZXIoY3VycmVudENsdXN0ZXJUYXNrcykpO2N1cnJlbnRDbHVzdGVyVGFza3M9W2N1cnJUYXNrXTt9fQotY2x1c3RlcnMucHVzaChuZXcgVGFza0NsdXN0ZXIoY3VycmVudENsdXN0ZXJUYXNrcykpO3JldHVybiBjbHVzdGVyczt9Ci1mdW5jdGlvbiByZWFjaGVkRkNJUXVpZXNjZW5jZV8odGltZXN0YW1wLG1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0LHNlYXJjaEJlZ2luKXtjb25zdCBxdWlldFdpbmRvd1NpemU9dGltZXN0YW1wLW1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0O2NvbnN0IHRpbWVTaW5jZVNlYXJjaEJlZ2luPW1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0LXNlYXJjaEJlZ2luO2NvbnN0IHJlcXVpcmVkV2luZG93U2l6ZT1yZXF1aXJlZEZDSVdpbmRvd1NpemVNcyh0aW1lU2luY2VTZWFyY2hCZWdpbik7cmV0dXJuIHF1aWV0V2luZG93U2l6ZT5yZXF1aXJlZFdpbmRvd1NpemU7fQotZnVuY3Rpb24gZmluZEZpcnN0Q3B1SWRsZVRpbWUoc2VhcmNoQmVnaW4sc2VhcmNoRW5kLGRvbUNvbnRlbnRMb2FkZWRFbmQsbG9uZ1Rhc2tzSW5XaW5kb3cpe2NvbnN0IHNvcnRlZExvbmdUYXNrcz1sb25nVGFza3NJbldpbmRvdy5zb3J0KChhLGIpPT5hLnN0YXJ0LWIuc3RhcnQpO2NvbnN0IHRhc2tDbHVzdGVycz1maW5kRkNJVGFza0NsdXN0ZXJzKHNvcnRlZExvbmdUYXNrcyk7Y29uc3QgaGVhdnlUYXNrQ2x1c3RlcnM9dGFza0NsdXN0ZXJzLmZpbHRlcihjbHVzdGVyPT5jbHVzdGVyLmlzSGVhdnkoKSk7bGV0IHF1aWV0V2luZG93QmVnaW49c2VhcmNoQmVnaW47bGV0IGZpQ2FuZGlkYXRlPXVuZGVmaW5lZDtmb3IoY29uc3QgY2x1c3RlciBvZiBoZWF2eVRhc2tDbHVzdGVycyl7aWYocmVhY2hlZEZDSVF1aWVzY2VuY2VfKGNsdXN0ZXIuc3RhcnQscXVpZXRXaW5kb3dCZWdpbixzZWFyY2hCZWdpbikpe2ZpQ2FuZGlkYXRlPXF1aWV0V2luZG93QmVnaW47YnJlYWs7fQotcXVpZXRXaW5kb3dCZWdpbj1jbHVzdGVyLmVuZDt9Ci1pZihmaUNhbmRpZGF0ZT09PXVuZGVmaW5lZCl7aWYocmVhY2hlZEZDSVF1aWVzY2VuY2VfKHNlYXJjaEVuZCxxdWlldFdpbmRvd0JlZ2luLHNlYXJjaEJlZ2luKSl7ZmlDYW5kaWRhdGU9cXVpZXRXaW5kb3dCZWdpbjt9ZWxzZXtyZXR1cm4gdW5kZWZpbmVkO319Ci1yZXR1cm4gTWF0aC5tYXgoZmlDYW5kaWRhdGUsZG9tQ29udGVudExvYWRlZEVuZCk7fQotcmV0dXJue2ZpbmRJbnRlcmFjdGl2ZVRpbWUsZmluZEZpcnN0Q3B1SWRsZVRpbWUscmVxdWlyZWRGQ0lXaW5kb3dTaXplTXMsZmluZEZDSVRhc2tDbHVzdGVycyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwudW0nLGZ1bmN0aW9uKCl7Y29uc3QgTE9BRF9TVUJUWVBFX05BTUVTPXtTVUNDRVNTRlVMOidTdWNjZXNzZnVsJyxGQUlMRUQ6J0ZhaWxlZCcsfTtjb25zdCBET0VTX0xPQURfU1VCVFlQRV9OQU1FX0VYSVNUPXt9O2Zvcihjb25zdCBrZXkgaW4gTE9BRF9TVUJUWVBFX05BTUVTKXtET0VTX0xPQURfU1VCVFlQRV9OQU1FX0VYSVNUW0xPQURfU1VCVFlQRV9OQU1FU1trZXldXT10cnVlO30KLWZ1bmN0aW9uIExvYWRFeHBlY3RhdGlvbihwYXJlbnRNb2RlbCxpbml0aWF0b3JUaXRsZSxzdGFydCxkdXJhdGlvbixyZW5kZXJlcixuYXZpZ2F0aW9uU3RhcnQsZm1wRXZlbnQsZGNsRW5kRXZlbnQsY3B1SWRsZVRpbWUsdGltZVRvSW50ZXJhY3RpdmUsdXJsLGZyYW1lSWQpe2lmKCFET0VTX0xPQURfU1VCVFlQRV9OQU1FX0VYSVNUW2luaXRpYXRvclRpdGxlXSl7dGhyb3cgbmV3IEVycm9yKGluaXRpYXRvclRpdGxlKycgaXMgbm90IGluIExPQURfU1VCVFlQRV9OQU1FUycpO30KLXRyLm1vZGVsLnVtLlVzZXJFeHBlY3RhdGlvbi5jYWxsKHRoaXMscGFyZW50TW9kZWwsaW5pdGlhdG9yVGl0bGUsc3RhcnQsZHVyYXRpb24pO3RoaXMucmVuZGVyUHJvY2Vzcz1yZW5kZXJlcjt0aGlzLnJlbmRlck1haW5UaHJlYWQ9dW5kZWZpbmVkO3RoaXMucm91dGluZ0lkPXVuZGVmaW5lZDt0aGlzLnBhcmVudFJvdXRpbmdJZD11bmRlZmluZWQ7dGhpcy5sb2FkRmluaXNoZWRFdmVudD11bmRlZmluZWQ7dGhpcy5uYXZpZ2F0aW9uU3RhcnQ9bmF2aWdhdGlvblN0YXJ0O3RoaXMuZm1wRXZlbnQ9Zm1wRXZlbnQ7dGhpcy5kb21Db250ZW50TG9hZGVkRW5kRXZlbnQ9ZGNsRW5kRXZlbnQ7dGhpcy5maXJzdENwdUlkbGVUaW1lPWNwdUlkbGVUaW1lO3RoaXMudGltZVRvSW50ZXJhY3RpdmU9dGltZVRvSW50ZXJhY3RpdmU7dGhpcy51cmw9dXJsO3RoaXMuZnJhbWVJZD1mcmFtZUlkO30KLUxvYWRFeHBlY3RhdGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC51bS5Vc2VyRXhwZWN0YXRpb24ucHJvdG90eXBlLGNvbnN0cnVjdG9yOkxvYWRFeHBlY3RhdGlvbn07dHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLnN1YlR5cGVzLnJlZ2lzdGVyKExvYWRFeHBlY3RhdGlvbix7c3RhZ2VUaXRsZTonTG9hZCcsY29sb3JJZDp0ci5iLkNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWUoJ3JhaWxfbG9hZCcpfSk7cmV0dXJue0xPQURfU1VCVFlQRV9OQU1FUyxMb2FkRXhwZWN0YXRpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmltcG9ydGVyJyxmdW5jdGlvbigpe2NvbnN0IExPTkdfVEFTS19USFJFU0hPTERfTVM9NTA7Y29uc3QgVE9QX0xFVkVMX1RBU0tfVElUTEVTPVsnVGFza1F1ZXVlTWFuYWdlcjo6UHJvY2Vzc1Rhc2tGcm9tV29ya1F1ZXVlJywnVGhyZWFkQ29udHJvbGxlckltcGw6OkRvV29yaycsXTtmdW5jdGlvbiBnZXROZXR3b3JrRXZlbnRzSW5SYW5nZShwcm9jZXNzLHJhbmdlKXtjb25zdCBuZXR3b3JrRXZlbnRzPVtdO2Zvcihjb25zdCB0aHJlYWQgb2YgT2JqZWN0LnZhbHVlcyhwcm9jZXNzLnRocmVhZHMpKXtjb25zdCB0aHJlYWRIZWxwZXI9bmV3IHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lVGhyZWFkSGVscGVyKHRocmVhZCk7Y29uc3QgZXZlbnRzPXRocmVhZEhlbHBlci5nZXROZXR3b3JrRXZlbnRzKCk7Zm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50cyl7aWYocmFuZ2UuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUoZXZlbnQuc3RhcnQsZXZlbnQuZW5kKSl7bmV0d29ya0V2ZW50cy5wdXNoKGV2ZW50KTt9fX0KLXJldHVybiBuZXR3b3JrRXZlbnRzO30KLWZ1bmN0aW9uIGZpbmRGcmFtZUxvYWRlclNuYXBzaG90QXQocmVuZGVyZXJIZWxwZXIsZnJhbWVJZFJlZix0cyl7Y29uc3Qgb2JqZWN0cz1yZW5kZXJlckhlbHBlci5wcm9jZXNzLm9iamVjdHM7Y29uc3QgZnJhbWVMb2FkZXJJbnN0YW5jZXM9b2JqZWN0cy5pbnN0YW5jZXNCeVR5cGVOYW1lXy5GcmFtZUxvYWRlcjtpZihmcmFtZUxvYWRlckluc3RhbmNlcz09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2xldCBzbmFwc2hvdDtmb3IoY29uc3QgaW5zdGFuY2Ugb2YgZnJhbWVMb2FkZXJJbnN0YW5jZXMpe2lmKCFpbnN0YW5jZS5pc0FsaXZlQXQodHMpKWNvbnRpbnVlO2NvbnN0IG1heWJlU25hcHNob3Q9aW5zdGFuY2UuZ2V0U25hcHNob3RBdCh0cyk7aWYoZnJhbWVJZFJlZiE9PW1heWJlU25hcHNob3QuYXJncy5mcmFtZS5pZF9yZWYpY29udGludWU7c25hcHNob3Q9bWF5YmVTbmFwc2hvdDt9Ci1yZXR1cm4gc25hcHNob3Q7fQotZnVuY3Rpb24gZmluZEZpcnN0TWVhbmluZ2Z1bFBhaW50Q2FuZGlkYXRlcyhyZW5kZXJlckhlbHBlcil7Y29uc3QgY2FuZGlkYXRlc0ZvckZyYW1lSWQ9e307Zm9yKGNvbnN0IGV2IG9mIHJlbmRlcmVySGVscGVyLnByb2Nlc3MuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZighdHIuZS5jaHJvbWUuRXZlbnRGaW5kZXJVdGlscy5oYXNDYXRlZ29yeUFuZE5hbWUoZXYsJ2xvYWRpbmcnLCdmaXJzdE1lYW5pbmdmdWxQYWludENhbmRpZGF0ZScpKXtjb250aW51ZTt9Ci1pZihyZW5kZXJlckhlbHBlci5pc1RlbGVtZXRyeUludGVybmFsRXZlbnQoZXYpKWNvbnRpbnVlO2NvbnN0IGZyYW1lSWRSZWY9ZXYuYXJncy5mcmFtZTtpZihmcmFtZUlkUmVmPT09dW5kZWZpbmVkKWNvbnRpbnVlO2xldCBsaXN0PWNhbmRpZGF0ZXNGb3JGcmFtZUlkW2ZyYW1lSWRSZWZdO2lmKGxpc3Q9PT11bmRlZmluZWQpe2NhbmRpZGF0ZXNGb3JGcmFtZUlkW2ZyYW1lSWRSZWZdPWxpc3Q9W107fQotbGlzdC5wdXNoKGV2KTt9Ci1yZXR1cm4gY2FuZGlkYXRlc0ZvckZyYW1lSWQ7fQotZnVuY3Rpb24gY29tcHV0ZUludGVyYWN0aXZpdHlNZXRyaWNTYW1wbGVfKHJlbmRlcmVySGVscGVyLG5hdmlnYXRpb25TdGFydCxmbXBFdmVudCxkb21Db250ZW50TG9hZGVkRW5kRXZlbnQsc2VhcmNoV2luZG93RW5kKXtpZihkb21Db250ZW50TG9hZGVkRW5kRXZlbnQ9PT11bmRlZmluZWR8fGZtcEV2ZW50PT09dW5kZWZpbmVkKXtyZXR1cm57aW50ZXJhY3RpdmVUaW1lOnVuZGVmaW5lZCxmaXJzdENwdUlkbGVUaW1lOnVuZGVmaW5lZH07fQotY29uc3QgZmlyc3RNZWFuaW5nZnVsUGFpbnRUaW1lPWZtcEV2ZW50LnN0YXJ0O2NvbnN0IG1haW5UaHJlYWRUYXNrcz1bXTtmb3IoY29uc3QgdGl0bGUgb2YgVE9QX0xFVkVMX1RBU0tfVElUTEVTKXttYWluVGhyZWFkVGFza3MucHVzaCguLi5yZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLmZpbmRUb3Btb3N0U2xpY2VzTmFtZWQodGl0bGUpKTt9Ci1jb25zdCBsb25nVGFza3M9bWFpblRocmVhZFRhc2tzLmZpbHRlcih0YXNrPT50YXNrLmR1cmF0aW9uPj1MT05HX1RBU0tfVEhSRVNIT0xEX01TKTtjb25zdCBsb25nVGFza3NJbldpbmRvdz1sb25nVGFza3MuZmlsdGVyKHRhc2s9PnRhc2sucmFuZ2UuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUoZmlyc3RNZWFuaW5nZnVsUGFpbnRUaW1lLHNlYXJjaFdpbmRvd0VuZCkpO2NvbnN0IHJlc291cmNlTG9hZEV2ZW50cz1nZXROZXR3b3JrRXZlbnRzSW5SYW5nZShyZW5kZXJlckhlbHBlci5wcm9jZXNzLHRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShuYXZpZ2F0aW9uU3RhcnQuc3RhcnQsc2VhcmNoV2luZG93RW5kKSk7Y29uc3QgZmlyc3RDcHVJZGxlVGltZT10ci5lLmNocm9tZS5maW5kRmlyc3RDcHVJZGxlVGltZShmaXJzdE1lYW5pbmdmdWxQYWludFRpbWUsc2VhcmNoV2luZG93RW5kLGRvbUNvbnRlbnRMb2FkZWRFbmRFdmVudC5zdGFydCxsb25nVGFza3NJbldpbmRvdyk7Y29uc3QgaW50ZXJhY3RpdmVUaW1lPXRyLmUuY2hyb21lLmZpbmRJbnRlcmFjdGl2ZVRpbWUoZmlyc3RNZWFuaW5nZnVsUGFpbnRUaW1lLHNlYXJjaFdpbmRvd0VuZCxkb21Db250ZW50TG9hZGVkRW5kRXZlbnQuc3RhcnQsbG9uZ1Rhc2tzSW5XaW5kb3cscmVzb3VyY2VMb2FkRXZlbnRzKTtyZXR1cm57aW50ZXJhY3RpdmVUaW1lLGZpcnN0Q3B1SWRsZVRpbWV9O30KLWZ1bmN0aW9uIGNvbnN0cnVjdExvYWRpbmdFeHBlY3RhdGlvbl8ocmVuZGVyZXJIZWxwZXIsZnJhbWVUb0RvbUNvbnRlbnRMb2FkZWRFbmRFdmVudHMsbmF2aWdhdGlvblN0YXJ0LGZtcEV2ZW50LG5leHROYXZpZ2F0aW9uU3RhcnQsdXJsLGZyYW1lSWQpe2NvbnN0IHNlYXJjaFdpbmRvd0VuZD1uZXh0TmF2aWdhdGlvblN0YXJ0IT09dW5kZWZpbmVkP25leHROYXZpZ2F0aW9uU3RhcnQuc3RhcnQ6cmVuZGVyZXJIZWxwZXIubW9kZWxIZWxwZXIuY2hyb21lQm91bmRzLm1heDtjb25zdCBkY2xUaW1lc0ZvckZyYW1lPWZyYW1lVG9Eb21Db250ZW50TG9hZGVkRW5kRXZlbnRzLmdldChmcmFtZUlkKXx8W107Y29uc3QgZGNsU2VhcmNoUmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKG5hdmlnYXRpb25TdGFydC5zdGFydCxzZWFyY2hXaW5kb3dFbmQpO2NvbnN0IGRjbFRpbWVzSW5XaW5kb3c9ZGNsU2VhcmNoUmFuZ2UuZmlsdGVyQXJyYXkoZGNsVGltZXNGb3JGcmFtZSxldmVudD0+ZXZlbnQuc3RhcnQpO2xldCBkb21Db250ZW50TG9hZGVkRW5kRXZlbnQ9dW5kZWZpbmVkO2lmKGRjbFRpbWVzSW5XaW5kb3cubGVuZ3RoIT09MCl7ZG9tQ29udGVudExvYWRlZEVuZEV2ZW50PWRjbFRpbWVzSW5XaW5kb3dbZGNsVGltZXNJbldpbmRvdy5sZW5ndGgtMV07fQotY29uc3R7aW50ZXJhY3RpdmVUaW1lLGZpcnN0Q3B1SWRsZVRpbWV9PWNvbXB1dGVJbnRlcmFjdGl2aXR5TWV0cmljU2FtcGxlXyhyZW5kZXJlckhlbHBlcixuYXZpZ2F0aW9uU3RhcnQsZm1wRXZlbnQsZG9tQ29udGVudExvYWRlZEVuZEV2ZW50LHNlYXJjaFdpbmRvd0VuZCk7Y29uc3QgZHVyYXRpb249KGludGVyYWN0aXZlVGltZT09PXVuZGVmaW5lZCk/c2VhcmNoV2luZG93RW5kLW5hdmlnYXRpb25TdGFydC5zdGFydDppbnRlcmFjdGl2ZVRpbWUtbmF2aWdhdGlvblN0YXJ0LnN0YXJ0O3JldHVybiBuZXcgdHIubW9kZWwudW0uTG9hZEV4cGVjdGF0aW9uKHJlbmRlcmVySGVscGVyLm1vZGVsSGVscGVyLm1vZGVsLHRyLm1vZGVsLnVtLkxPQURfU1VCVFlQRV9OQU1FUy5TVUNDRVNTRlVMLG5hdmlnYXRpb25TdGFydC5zdGFydCxkdXJhdGlvbixyZW5kZXJlckhlbHBlci5wcm9jZXNzLG5hdmlnYXRpb25TdGFydCxmbXBFdmVudCxkb21Db250ZW50TG9hZGVkRW5kRXZlbnQsZmlyc3RDcHVJZGxlVGltZSxpbnRlcmFjdGl2ZVRpbWUsdXJsLGZyYW1lSWQpO30KLWZ1bmN0aW9uIGNvbGxlY3RMb2FkRXhwZWN0YXRpb25zRm9yUmVuZGVyZXIocmVuZGVyZXJIZWxwZXIpe2NvbnN0IHNhbXBsZXM9W107Y29uc3QgZnJhbWVUb05hdlN0YXJ0RXZlbnRzPXRyLmUuY2hyb21lLkV2ZW50RmluZGVyVXRpbHMuZ2V0U29ydGVkTWFpblRocmVhZEV2ZW50c0J5RnJhbWUocmVuZGVyZXJIZWxwZXIsJ25hdmlnYXRpb25TdGFydCcsJ2JsaW5rLnVzZXJfdGltaW5nJyk7Y29uc3QgZnJhbWVUb0RvbUNvbnRlbnRMb2FkZWRFbmRFdmVudHM9dHIuZS5jaHJvbWUuRXZlbnRGaW5kZXJVdGlscy5nZXRTb3J0ZWRNYWluVGhyZWFkRXZlbnRzQnlGcmFtZShyZW5kZXJlckhlbHBlciwnZG9tQ29udGVudExvYWRlZEV2ZW50RW5kJywnYmxpbmsudXNlcl90aW1pbmcnKTtmdW5jdGlvbiBhZGRTYW1wbGVzKGZyYW1lSWRSZWYsbmF2aWdhdGlvblN0YXJ0LGZtcE1hcmtlckV2ZW50LG5leHROYXZpZ2F0aW9uU3RhcnQpe2NvbnN0IHRpbWVzdGFtcD1mbXBNYXJrZXJFdmVudD09PXVuZGVmaW5lZD9uYXZpZ2F0aW9uU3RhcnQuc3RhcnQ6Zm1wTWFya2VyRXZlbnQuc3RhcnQ7Y29uc3Qgc25hcHNob3Q9ZmluZEZyYW1lTG9hZGVyU25hcHNob3RBdChyZW5kZXJlckhlbHBlcixmcmFtZUlkUmVmLHRpbWVzdGFtcCk7aWYoIXNuYXBzaG90fHwhc25hcHNob3QuYXJncy5pc0xvYWRpbmdNYWluRnJhbWUpcmV0dXJuO2NvbnN0IHVybD1zbmFwc2hvdC5hcmdzLmRvY3VtZW50TG9hZGVyVVJMO3NhbXBsZXMucHVzaChjb25zdHJ1Y3RMb2FkaW5nRXhwZWN0YXRpb25fKHJlbmRlcmVySGVscGVyLGZyYW1lVG9Eb21Db250ZW50TG9hZGVkRW5kRXZlbnRzLG5hdmlnYXRpb25TdGFydCxmbXBNYXJrZXJFdmVudCxuZXh0TmF2aWdhdGlvblN0YXJ0LHVybCxmcmFtZUlkUmVmKSk7fQotY29uc3QgY2FuZGlkYXRlc0ZvckZyYW1lSWQ9ZmluZEZpcnN0TWVhbmluZ2Z1bFBhaW50Q2FuZGlkYXRlcyhyZW5kZXJlckhlbHBlcik7Zm9yKGNvbnN0W2ZyYW1lSWRSZWYsbmF2U3RhcnRFdmVudHNdb2YgZnJhbWVUb05hdlN0YXJ0RXZlbnRzKXtjb25zdCBmbXBDYW5kaWRhdGVMaXN0PWNhbmRpZGF0ZXNGb3JGcmFtZUlkW2ZyYW1lSWRSZWZdfHxbXTtmb3IobGV0IGluZGV4PTA7aW5kZXg8bmF2U3RhcnRFdmVudHMubGVuZ3RoLTE7aW5kZXgrKyl7Y29uc3QgY3Vyck5hdmlnYXRpb249bmF2U3RhcnRFdmVudHNbaW5kZXhdO2NvbnN0IG5leHROYXZpZ2F0aW9uPW5hdlN0YXJ0RXZlbnRzW2luZGV4KzFdO2NvbnN0IGZtcENhbmRpZGF0ZT10ci5lLmNocm9tZS5FdmVudEZpbmRlclV0aWxzLmZpbmRMYXN0RXZlbnRTdGFydGluZ0JlZm9yZVRpbWVzdGFtcChmbXBDYW5kaWRhdGVMaXN0LG5leHROYXZpZ2F0aW9uLnN0YXJ0KTtpZihmbXBDYW5kaWRhdGUhPT11bmRlZmluZWQmJmN1cnJOYXZpZ2F0aW9uLnN0YXJ0PD1mbXBDYW5kaWRhdGUuc3RhcnQpe2FkZFNhbXBsZXMoZnJhbWVJZFJlZixjdXJyTmF2aWdhdGlvbixmbXBDYW5kaWRhdGUsbmV4dE5hdmlnYXRpb24pO31lbHNle2FkZFNhbXBsZXMoZnJhbWVJZFJlZixjdXJyTmF2aWdhdGlvbix1bmRlZmluZWQsbmV4dE5hdmlnYXRpb24pO319Ci1hZGRTYW1wbGVzKGZyYW1lSWRSZWYsbmF2U3RhcnRFdmVudHNbbmF2U3RhcnRFdmVudHMubGVuZ3RoLTFdLGZtcENhbmRpZGF0ZUxpc3RbZm1wQ2FuZGlkYXRlTGlzdC5sZW5ndGgtMV0sdW5kZWZpbmVkKTt9Ci1yZXR1cm4gc2FtcGxlczt9Ci1mdW5jdGlvbiBmaW5kTG9hZEV4cGVjdGF0aW9ucyhtb2RlbEhlbHBlcil7Y29uc3QgbG9hZHM9W107Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsSGVscGVyLm1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2Zvcihjb25zdCBwaWQgaW4gY2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVycyl7Y29uc3QgcmVuZGVyZXJIZWxwZXI9Y2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVyc1twaWRdO2lmKHJlbmRlcmVySGVscGVyLmlzQ2hyb21lVHJhY2luZ1VJKWNvbnRpbnVlO2xvYWRzLnB1c2guYXBwbHkobG9hZHMsY29sbGVjdExvYWRFeHBlY3RhdGlvbnNGb3JSZW5kZXJlcihyZW5kZXJlckhlbHBlcikpO30KLXJldHVybiBsb2Fkczt9Ci1yZXR1cm57ZmluZExvYWRFeHBlY3RhdGlvbnMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLnVtJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFN0YXJ0dXBFeHBlY3RhdGlvbihwYXJlbnRNb2RlbCxzdGFydCxkdXJhdGlvbil7dHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLmNhbGwodGhpcyxwYXJlbnRNb2RlbCwnJyxzdGFydCxkdXJhdGlvbik7fQotU3RhcnR1cEV4cGVjdGF0aW9uLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLnVtLlVzZXJFeHBlY3RhdGlvbi5wcm90b3R5cGUsY29uc3RydWN0b3I6U3RhcnR1cEV4cGVjdGF0aW9ufTt0ci5tb2RlbC51bS5Vc2VyRXhwZWN0YXRpb24uc3ViVHlwZXMucmVnaXN0ZXIoU3RhcnR1cEV4cGVjdGF0aW9uLHtzdGFnZVRpdGxlOidTdGFydHVwJyxjb2xvcklkOnRyLmIuQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZSgnc3RhcnR1cCcpfSk7cmV0dXJue1N0YXJ0dXBFeHBlY3RhdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZ2V0QWxsRnJhbWVFdmVudHMobW9kZWxIZWxwZXIpe2NvbnN0IGZyYW1lRXZlbnRzPVtdO2ZyYW1lRXZlbnRzLnB1c2guYXBwbHkoZnJhbWVFdmVudHMsbW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlci5nZXRGcmFtZUV2ZW50c0luUmFuZ2UodHIubW9kZWwuaGVscGVycy5JTVBMX0ZSQU1FVElNRV9UWVBFLG1vZGVsSGVscGVyLm1vZGVsLmJvdW5kcykpO2Zvcihjb25zdCByZW5kZXJlciBvZiBPYmplY3QudmFsdWVzKG1vZGVsSGVscGVyLnJlbmRlcmVySGVscGVycykpe2ZyYW1lRXZlbnRzLnB1c2guYXBwbHkoZnJhbWVFdmVudHMscmVuZGVyZXIuZ2V0RnJhbWVFdmVudHNJblJhbmdlKHRyLm1vZGVsLmhlbHBlcnMuSU1QTF9GUkFNRVRJTUVfVFlQRSxtb2RlbEhlbHBlci5tb2RlbC5ib3VuZHMpKTt9Ci1yZXR1cm4gZnJhbWVFdmVudHMuc29ydCh0ci5pbXBvcnRlci5jb21wYXJlRXZlbnRzKTt9Ci1mdW5jdGlvbiBnZXRTdGFydHVwRXZlbnRzKG1vZGVsSGVscGVyKXtmdW5jdGlvbiBpc1N0YXJ0dXBTbGljZShzbGljZSl7cmV0dXJuIHNsaWNlLnRpdGxlPT09J0Jyb3dzZXJNYWluTG9vcDo6Q3JlYXRlVGhyZWFkcyc7fQotY29uc3QgZXZlbnRzPW1vZGVsSGVscGVyLmJyb3dzZXJIZWxwZXIuZ2V0QWxsQXN5bmNTbGljZXNNYXRjaGluZyhpc1N0YXJ0dXBTbGljZSk7Y29uc3QgZGVkdXBlcj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtldmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7Y29uc3Qgc2xpY2VHcm91cD1ldmVudC5wYXJlbnRDb250YWluZXIuc2xpY2VHcm91cDtjb25zdCBzbGljZT1zbGljZUdyb3VwJiZzbGljZUdyb3VwLmZpbmRGaXJzdFNsaWNlKCk7aWYoc2xpY2Upe2RlZHVwZXIucHVzaChzbGljZSk7fX0pO3JldHVybiBkZWR1cGVyLnRvQXJyYXkoKTt9Ci1mdW5jdGlvbiBmaW5kU3RhcnR1cEV4cGVjdGF0aW9ucyhtb2RlbEhlbHBlcil7Y29uc3Qgb3BlbmluZ0V2ZW50cz1nZXRTdGFydHVwRXZlbnRzKG1vZGVsSGVscGVyKTtjb25zdCBjbG9zaW5nRXZlbnRzPWdldEFsbEZyYW1lRXZlbnRzKG1vZGVsSGVscGVyKTtjb25zdCBzdGFydHVwcz1bXTtvcGVuaW5nRXZlbnRzLmZvckVhY2goZnVuY3Rpb24ob3BlbmluZ0V2ZW50KXtjbG9zaW5nRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oY2xvc2luZ0V2ZW50KXtpZihvcGVuaW5nRXZlbnQuY2xvc2luZ0V2ZW50KXJldHVybjtpZihjbG9zaW5nRXZlbnQub3BlbmluZ0V2ZW50KXJldHVybjtpZihjbG9zaW5nRXZlbnQuc3RhcnQ8PW9wZW5pbmdFdmVudC5zdGFydClyZXR1cm47aWYob3BlbmluZ0V2ZW50LnBhcmVudENvbnRhaW5lci5wYXJlbnQucGlkIT09Y2xvc2luZ0V2ZW50LnBhcmVudENvbnRhaW5lci5wYXJlbnQucGlkKXtyZXR1cm47fQotb3BlbmluZ0V2ZW50LmNsb3NpbmdFdmVudD1jbG9zaW5nRXZlbnQ7Y2xvc2luZ0V2ZW50Lm9wZW5pbmdFdmVudD1vcGVuaW5nRXZlbnQ7Y29uc3Qgc2U9bmV3IHRyLm1vZGVsLnVtLlN0YXJ0dXBFeHBlY3RhdGlvbihtb2RlbEhlbHBlci5tb2RlbCxvcGVuaW5nRXZlbnQuc3RhcnQsY2xvc2luZ0V2ZW50LmVuZC1vcGVuaW5nRXZlbnQuc3RhcnQpO3NlLmFzc29jaWF0ZWRFdmVudHMucHVzaChvcGVuaW5nRXZlbnQpO3NlLmFzc29jaWF0ZWRFdmVudHMucHVzaChjbG9zaW5nRXZlbnQpO3N0YXJ0dXBzLnB1c2goc2UpO30pO30pO3JldHVybiBzdGFydHVwczt9Ci1yZXR1cm57ZmluZFN0YXJ0dXBFeHBlY3RhdGlvbnMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGdldEFzc29jaWF0ZWRFdmVudHMoaXJzKXtjb25zdCBhbGxBc3NvY2lhdGVkRXZlbnRzPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2lycy5mb3JFYWNoKGZ1bmN0aW9uKGlyKXtpci5hc3NvY2lhdGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2lmKGV2ZW50IGluc3RhbmNlb2YgdHIubW9kZWwuRmxvd0V2ZW50KXJldHVybjthbGxBc3NvY2lhdGVkRXZlbnRzLnB1c2goZXZlbnQpO30pO30pO3JldHVybiBhbGxBc3NvY2lhdGVkRXZlbnRzO30KLWZ1bmN0aW9uIGdldFVuYXNzb2NpYXRlZEV2ZW50cyhtb2RlbCxhc3NvY2lhdGVkRXZlbnRzKXtjb25zdCB1bmFzc29jaWF0ZWRFdmVudHM9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7Zm9yKGNvbnN0IHByb2Mgb2YgbW9kZWwuZ2V0QWxsUHJvY2Vzc2VzKCkpe2Zvcihjb25zdCB0aHJlYWQgb2YgT2JqZWN0LnZhbHVlcyhwcm9jLnRocmVhZHMpKXtmb3IoY29uc3QgZXZlbnQgb2YgdGhyZWFkLnNsaWNlR3JvdXAuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZighYXNzb2NpYXRlZEV2ZW50cy5jb250YWlucyhldmVudCkpe3VuYXNzb2NpYXRlZEV2ZW50cy5wdXNoKGV2ZW50KTt9fX19Ci1yZXR1cm4gdW5hc3NvY2lhdGVkRXZlbnRzO30KLWZ1bmN0aW9uIGdldFRvdGFsQ3B1RHVyYXRpb24oZXZlbnRzKXtsZXQgY3B1TXM9MDtldmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7aWYoZXZlbnQuY3B1U2VsZlRpbWUpe2NwdU1zKz1ldmVudC5jcHVTZWxmVGltZTt9fSk7cmV0dXJuIGNwdU1zO30KLWZ1bmN0aW9uIGdldElSQ292ZXJhZ2VGcm9tTW9kZWwobW9kZWwpe2NvbnN0IGFzc29jaWF0ZWRFdmVudHM9Z2V0QXNzb2NpYXRlZEV2ZW50cyhtb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zKTtpZighYXNzb2NpYXRlZEV2ZW50cy5sZW5ndGgpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCB1bmFzc29jaWF0ZWRFdmVudHM9Z2V0VW5hc3NvY2lhdGVkRXZlbnRzKG1vZGVsLGFzc29jaWF0ZWRFdmVudHMpO2NvbnN0IGFzc29jaWF0ZWRDcHVNcz1nZXRUb3RhbENwdUR1cmF0aW9uKGFzc29jaWF0ZWRFdmVudHMpO2NvbnN0IHVuYXNzb2NpYXRlZENwdU1zPWdldFRvdGFsQ3B1RHVyYXRpb24odW5hc3NvY2lhdGVkRXZlbnRzKTtjb25zdCB0b3RhbEV2ZW50Q291bnQ9YXNzb2NpYXRlZEV2ZW50cy5sZW5ndGgrdW5hc3NvY2lhdGVkRXZlbnRzLmxlbmd0aDtjb25zdCB0b3RhbENwdU1zPWFzc29jaWF0ZWRDcHVNcyt1bmFzc29jaWF0ZWRDcHVNcztsZXQgY292ZXJlZEV2ZW50c0NwdVRpbWVSYXRpbz11bmRlZmluZWQ7aWYodG90YWxDcHVNcyE9PTApe2NvdmVyZWRFdmVudHNDcHVUaW1lUmF0aW89YXNzb2NpYXRlZENwdU1zL3RvdGFsQ3B1TXM7fQotcmV0dXJue2Fzc29jaWF0ZWRFdmVudHNDb3VudDphc3NvY2lhdGVkRXZlbnRzLmxlbmd0aCx1bmFzc29jaWF0ZWRFdmVudHNDb3VudDp1bmFzc29jaWF0ZWRFdmVudHMubGVuZ3RoLGFzc29jaWF0ZWRFdmVudHNDcHVUaW1lTXM6YXNzb2NpYXRlZENwdU1zLHVuYXNzb2NpYXRlZEV2ZW50c0NwdVRpbWVNczp1bmFzc29jaWF0ZWRDcHVNcyxjb3ZlcmVkRXZlbnRzQ291bnRSYXRpbzphc3NvY2lhdGVkRXZlbnRzLmxlbmd0aC90b3RhbEV2ZW50Q291bnQsY292ZXJlZEV2ZW50c0NwdVRpbWVSYXRpb307fQotcmV0dXJue2dldElSQ292ZXJhZ2VGcm9tTW9kZWwsZ2V0QXNzb2NpYXRlZEV2ZW50cyxnZXRVbmFzc29jaWF0ZWRFdmVudHMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLnVtJyxmdW5jdGlvbigpe2Z1bmN0aW9uIElkbGVFeHBlY3RhdGlvbihwYXJlbnRNb2RlbCxzdGFydCxkdXJhdGlvbil7Y29uc3QgaW5pdGlhdG9yVGl0bGU9Jyc7dHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLmNhbGwodGhpcyxwYXJlbnRNb2RlbCxpbml0aWF0b3JUaXRsZSxzdGFydCxkdXJhdGlvbik7fQotSWRsZUV4cGVjdGF0aW9uLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLnVtLlVzZXJFeHBlY3RhdGlvbi5wcm90b3R5cGUsY29uc3RydWN0b3I6SWRsZUV4cGVjdGF0aW9ufTt0ci5tb2RlbC51bS5Vc2VyRXhwZWN0YXRpb24uc3ViVHlwZXMucmVnaXN0ZXIoSWRsZUV4cGVjdGF0aW9uLHtzdGFnZVRpdGxlOidJZGxlJyxjb2xvcklkOnRyLmIuQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZSgncmFpbF9pZGxlJyl9KTtyZXR1cm57SWRsZUV4cGVjdGF0aW9uLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5pbXBvcnRlcicsZnVuY3Rpb24oKXtjb25zdCBJTlNJR05JRklDQU5UX01TPTE7Y2xhc3MgVXNlck1vZGVsQnVpbGRlcntjb25zdHJ1Y3Rvcihtb2RlbCl7dGhpcy5tb2RlbD1tb2RlbDt0aGlzLm1vZGVsSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO30KLXN0YXRpYyBzdXBwb3J0c01vZGVsSGVscGVyKG1vZGVsSGVscGVyKXtyZXR1cm4gbW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlciE9PXVuZGVmaW5lZDt9Ci1idWlsZFVzZXJNb2RlbCgpe2lmKCF0aGlzLm1vZGVsSGVscGVyfHwhdGhpcy5tb2RlbEhlbHBlci5icm93c2VySGVscGVyKXJldHVybjt0cnl7Zm9yKGNvbnN0IHVlIG9mIHRoaXMuZmluZFVzZXJFeHBlY3RhdGlvbnMoKSl7dGhpcy5tb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zLnB1c2godWUpO30KLXRoaXMubW9kZWwudXNlck1vZGVsLnNlZ21lbnRzLnB1c2goLi4udGhpcy5maW5kU2VnbWVudHMoKSk7fWNhdGNoKGVycm9yKXt0aGlzLm1vZGVsLmltcG9ydFdhcm5pbmcoe3R5cGU6J1VzZXJNb2RlbEJ1aWxkZXInLG1lc3NhZ2U6ZXJyb3Isc2hvd1RvVXNlcjp0cnVlfSk7fX0KLWZpbmRTZWdtZW50cygpe2xldCB0aW1lc3RhbXBzPW5ldyBTZXQoKTtmb3IoY29uc3QgZXhwZWN0YXRpb24gb2YgdGhpcy5tb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zKXt0aW1lc3RhbXBzLmFkZChleHBlY3RhdGlvbi5zdGFydCk7dGltZXN0YW1wcy5hZGQoZXhwZWN0YXRpb24uZW5kKTt9Ci10aW1lc3RhbXBzPVsuLi50aW1lc3RhbXBzXTt0aW1lc3RhbXBzLnNvcnQoKHgseSk9PngteSk7Y29uc3Qgc2VnbWVudHM9W107Zm9yKGxldCBpPTA7aTx0aW1lc3RhbXBzLmxlbmd0aC0xOysraSl7Y29uc3Qgc2VnbWVudD1uZXcgdHIubW9kZWwudW0uU2VnbWVudCh0aW1lc3RhbXBzW2ldLHRpbWVzdGFtcHNbaSsxXS10aW1lc3RhbXBzW2ldKTtzZWdtZW50cy5wdXNoKHNlZ21lbnQpO2NvbnN0IHNlZ21lbnRSYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2Uoc2VnbWVudC5zdGFydCxzZWdtZW50LmVuZCk7Zm9yKGNvbnN0IGV4cGVjdGF0aW9uIG9mIHRoaXMubW9kZWwudXNlck1vZGVsLmV4cGVjdGF0aW9ucyl7Y29uc3QgZXhwZWN0YXRpb25SYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoZXhwZWN0YXRpb24uc3RhcnQsZXhwZWN0YXRpb24uZW5kKTtpZihzZWdtZW50UmFuZ2UuaW50ZXJzZWN0c1JhbmdlRXhjbHVzaXZlKGV4cGVjdGF0aW9uUmFuZ2UpKXtzZWdtZW50LmV4cGVjdGF0aW9ucy5wdXNoKGV4cGVjdGF0aW9uKTt9fX0KLXJldHVybiBzZWdtZW50czt9Ci1maW5kVXNlckV4cGVjdGF0aW9ucygpe2NvbnN0IGV4cGVjdGF0aW9ucz1bXTtleHBlY3RhdGlvbnMucHVzaC5hcHBseShleHBlY3RhdGlvbnMsdHIuaW1wb3J0ZXIuZmluZFN0YXJ0dXBFeHBlY3RhdGlvbnModGhpcy5tb2RlbEhlbHBlcikpO2V4cGVjdGF0aW9ucy5wdXNoLmFwcGx5KGV4cGVjdGF0aW9ucyx0ci5pbXBvcnRlci5maW5kTG9hZEV4cGVjdGF0aW9ucyh0aGlzLm1vZGVsSGVscGVyKSk7ZXhwZWN0YXRpb25zLnB1c2guYXBwbHkoZXhwZWN0YXRpb25zLHRyLmltcG9ydGVyLmZpbmRJbnB1dEV4cGVjdGF0aW9ucyh0aGlzLm1vZGVsSGVscGVyKSk7ZXhwZWN0YXRpb25zLnB1c2guYXBwbHkoZXhwZWN0YXRpb25zLHRoaXMuZmluZElkbGVFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zKSk7dGhpcy5jb2xsZWN0VW5hc3NvY2lhdGVkRXZlbnRzXyhleHBlY3RhdGlvbnMpO3JldHVybiBleHBlY3RhdGlvbnM7fQotY29sbGVjdFVuYXNzb2NpYXRlZEV2ZW50c18oZXhwZWN0YXRpb25zKXtjb25zdCB2YWN1dW1VRXM9W107Zm9yKGNvbnN0IGV4cGVjdGF0aW9uIG9mIGV4cGVjdGF0aW9ucyl7aWYoZXhwZWN0YXRpb24gaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5JZGxlRXhwZWN0YXRpb258fGV4cGVjdGF0aW9uIGluc3RhbmNlb2YgdHIubW9kZWwudW0uTG9hZEV4cGVjdGF0aW9ufHxleHBlY3RhdGlvbiBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLlN0YXJ0dXBFeHBlY3RhdGlvbil7dmFjdXVtVUVzLnB1c2goZXhwZWN0YXRpb24pO319Ci1pZih2YWN1dW1VRXMubGVuZ3RoPT09MClyZXR1cm47Y29uc3QgYWxsQXNzb2NpYXRlZEV2ZW50cz10ci5tb2RlbC5nZXRBc3NvY2lhdGVkRXZlbnRzKGV4cGVjdGF0aW9ucyk7Y29uc3QgdW5hc3NvY2lhdGVkRXZlbnRzPXRyLm1vZGVsLmdldFVuYXNzb2NpYXRlZEV2ZW50cyh0aGlzLm1vZGVsLGFsbEFzc29jaWF0ZWRFdmVudHMpO2Zvcihjb25zdCBldmVudCBvZiB1bmFzc29jaWF0ZWRFdmVudHMpe2lmKCEoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5UaHJlYWRTbGljZSkpY29udGludWU7aWYoIWV2ZW50LmlzVG9wTGV2ZWwpY29udGludWU7Zm9yKGxldCBpbmRleD0wO2luZGV4PHZhY3V1bVVFcy5sZW5ndGg7KytpbmRleCl7Y29uc3QgZXhwZWN0YXRpb249dmFjdXVtVUVzW2luZGV4XTtpZigoZXZlbnQuc3RhcnQ+PWV4cGVjdGF0aW9uLnN0YXJ0KSYmKGV2ZW50LnN0YXJ0PGV4cGVjdGF0aW9uLmVuZCkpe2V4cGVjdGF0aW9uLmFzc29jaWF0ZWRFdmVudHMuYWRkRXZlbnRTZXQoZXZlbnQuZW50aXJlSGllcmFyY2h5KTticmVhazt9fX19Ci1maW5kSWRsZUV4cGVjdGF0aW9ucyhvdGhlclVFcyl7aWYodGhpcy5tb2RlbC5ib3VuZHMuaXNFbXB0eSlyZXR1cm47Y29uc3QgZW1wdHlSYW5nZXM9dHIuYi5tYXRoLmZpbmRFbXB0eVJhbmdlc0JldHdlZW5SYW5nZXModHIuYi5tYXRoLmNvbnZlcnRFdmVudHNUb1JhbmdlcyhvdGhlclVFcyksdGhpcy5tb2RlbC5ib3VuZHMpO2NvbnN0IGV4cGVjdGF0aW9ucz1bXTtjb25zdCBtb2RlbD10aGlzLm1vZGVsO2Zvcihjb25zdCByYW5nZSBvZiBlbXB0eVJhbmdlcyl7aWYocmFuZ2UubWF4PChyYW5nZS5taW4rSU5TSUdOSUZJQ0FOVF9NUykpY29udGludWU7ZXhwZWN0YXRpb25zLnB1c2gobmV3IHRyLm1vZGVsLnVtLklkbGVFeHBlY3RhdGlvbihtb2RlbCxyYW5nZS5taW4scmFuZ2UubWF4LXJhbmdlLm1pbikpO30KLXJldHVybiBleHBlY3RhdGlvbnM7fX0KLWZ1bmN0aW9uIGNyZWF0ZUN1c3RvbWl6ZU1vZGVsTGluZXNGcm9tTW9kZWwobW9kZWwpe2NvbnN0IG1vZGVsTGluZXM9W107bW9kZWxMaW5lcy5wdXNoKCcgICAgICBhdWRpdHMuYWRkRXZlbnQobW9kZWwuYnJvd3Nlck1haW4sJyk7bW9kZWxMaW5lcy5wdXNoKCcgICAgICAgICAge3RpdGxlOiBcJ21vZGVsIHN0YXJ0XCcsIHN0YXJ0OiAwLCBlbmQ6IDF9KTsnKTtjb25zdCB0eXBlTmFtZXM9e307Zm9yKGNvbnN0IHR5cGVOYW1lIGluIHRyLmUuY2MuSU5QVVRfRVZFTlRfVFlQRV9OQU1FUyl7dHlwZU5hbWVzW3RyLmUuY2MuSU5QVVRfRVZFTlRfVFlQRV9OQU1FU1t0eXBlTmFtZV1dPXR5cGVOYW1lO30KLWxldCBtb2RlbEV2ZW50cz1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtmb3IoY29uc3QgdWUgb2YgbW9kZWwudXNlck1vZGVsLmV4cGVjdGF0aW9ucyl7bW9kZWxFdmVudHMuYWRkRXZlbnRTZXQodWUuc291cmNlRXZlbnRzKTt9Ci1tb2RlbEV2ZW50cz1tb2RlbEV2ZW50cy50b0FycmF5KCk7bW9kZWxFdmVudHMuc29ydCh0ci5pbXBvcnRlci5jb21wYXJlRXZlbnRzKTtmb3IoY29uc3QgZXZlbnQgb2YgbW9kZWxFdmVudHMpe2NvbnN0IHN0YXJ0QW5kRW5kPSdzdGFydDogJytwYXJzZUludChldmVudC5zdGFydCkrJywgJysnZW5kOiAnK3BhcnNlSW50KGV2ZW50LmVuZCkrJ30pOyc7aWYoZXZlbnQgaW5zdGFuY2VvZiB0ci5lLmNjLklucHV0TGF0ZW5jeUFzeW5jU2xpY2Upe21vZGVsTGluZXMucHVzaCgnICAgICAgYXVkaXRzLmFkZElucHV0RXZlbnQobW9kZWwsIElOUFVUX1RZUEUuJysKLXR5cGVOYW1lc1tldmVudC50eXBlTmFtZV0rJywnKTt9ZWxzZSBpZihldmVudC50aXRsZT09PSdSZW5kZXJGcmFtZUltcGw6OmRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZCcpe21vZGVsTGluZXMucHVzaCgnICAgICAgYXVkaXRzLmFkZENvbW1pdExvYWRFdmVudChtb2RlbCwnKTt9ZWxzZSBpZihldmVudC50aXRsZT09PSdJbnB1dEhhbmRsZXJQcm94eTo6SGFuZGxlR2VzdHVyZUZsaW5nOjpzdGFydGVkJyl7bW9kZWxMaW5lcy5wdXNoKCcgICAgICBhdWRpdHMuYWRkRmxpbmdBbmltYXRpb25FdmVudChtb2RlbCwnKTt9ZWxzZSBpZihldmVudC50aXRsZT09PXRyLm1vZGVsLmhlbHBlcnMuSU1QTF9SRU5ERVJJTkdfU1RBVFMpe21vZGVsTGluZXMucHVzaCgnICAgICAgYXVkaXRzLmFkZEZyYW1lRXZlbnQobW9kZWwsJyk7fWVsc2UgaWYoZXZlbnQudGl0bGU9PT10ci5pbXBvcnRlci5DU1NfQU5JTUFUSU9OX1RJVExFKXttb2RlbExpbmVzLnB1c2goJyAgICAgIGF1ZGl0cy5hZGRFdmVudChtb2RlbC5yZW5kZXJlck1haW4sIHsnKTttb2RlbExpbmVzLnB1c2goJyAgICAgICAgdGl0bGU6IFwnQW5pbWF0aW9uXCcsICcrc3RhcnRBbmRFbmQpO3JldHVybjt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGV4dGVuZCBjcmVhdGVDdXN0b21pemVNb2RlbExpbmVzRnJvbU1vZGVsKCknKyd0byBzdXBwb3J0IHRoaXMgZXZlbnQ6XG4nK2V2ZW50LnRpdGxlKydcbicpO30KLW1vZGVsTGluZXMucHVzaCgnICAgICAgICAgIHsnK3N0YXJ0QW5kRW5kKTt9Ci1tb2RlbExpbmVzLnB1c2goJyAgICAgIGF1ZGl0cy5hZGRFdmVudChtb2RlbC5icm93c2VyTWFpbiwnKTttb2RlbExpbmVzLnB1c2goJyAgICAgICAgICB7JysndGl0bGU6IFwnbW9kZWwgZW5kXCcsICcrJ3N0YXJ0OiAnKyhwYXJzZUludChtb2RlbC5ib3VuZHMubWF4KS0xKSsnLCAnKydlbmQ6ICcrcGFyc2VJbnQobW9kZWwuYm91bmRzLm1heCkrJ30pOycpO3JldHVybiBtb2RlbExpbmVzO30KLWZ1bmN0aW9uIGNyZWF0ZUV4cGVjdGVkVUVMaW5lc0Zyb21Nb2RlbChtb2RlbCl7Y29uc3QgZXhwZWN0ZWRMaW5lcz1bXTtjb25zdCB1ZUNvdW50PW1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnMubGVuZ3RoO2ZvcihsZXQgaW5kZXg9MDtpbmRleDx1ZUNvdW50OysraW5kZXgpe2NvbnN0IGV4cGVjdGF0aW9uPW1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnNbaW5kZXhdO2xldCB1ZVN0cmluZz0nICAgICAgeyc7dWVTdHJpbmcrPSd0aXRsZTogXCcnK2V4cGVjdGF0aW9uLnRpdGxlKydcJywgJzt1ZVN0cmluZys9J3N0YXJ0OiAnK3BhcnNlSW50KGV4cGVjdGF0aW9uLnN0YXJ0KSsnLCAnO3VlU3RyaW5nKz0nZW5kOiAnK3BhcnNlSW50KGV4cGVjdGF0aW9uLmVuZCkrJywgJzt1ZVN0cmluZys9J2V2ZW50Q291bnQ6ICcrZXhwZWN0YXRpb24uc291cmNlRXZlbnRzLmxlbmd0aDt1ZVN0cmluZys9J30nO2lmKGluZGV4PCh1ZUNvdW50LTEpKXVlU3RyaW5nKz0nLCc7ZXhwZWN0ZWRMaW5lcy5wdXNoKHVlU3RyaW5nKTt9Ci1yZXR1cm4gZXhwZWN0ZWRMaW5lczt9Ci1mdW5jdGlvbiBjcmVhdGVVRUZpbmRlclRlc3RDYXNlU3RyaW5nRnJvbU1vZGVsKG1vZGVsKXtjb25zdCBmaWxlbmFtZT13aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHIoMSk7bGV0IHRlc3ROYW1lPWZpbGVuYW1lLnN1YnN0cihmaWxlbmFtZS5sYXN0SW5kZXhPZignLycpKzEpO3Rlc3ROYW1lPXRlc3ROYW1lLnN1YnN0cigwLHRlc3ROYW1lLmluZGV4T2YoJy4nKSk7dHJ5e2NvbnN0IHRlc3RMaW5lcz1bXTt0ZXN0TGluZXMucHVzaCgnICAvKicpO3Rlc3RMaW5lcy5wdXNoKCcgICAgVGhpcyB0ZXN0IHdhcyBnZW5lcmF0ZWQgZnJvbScpO3Rlc3RMaW5lcy5wdXNoKCcgICAgJytmaWxlbmFtZSsnJyk7dGVzdExpbmVzLnB1c2goJyAgICovJyk7dGVzdExpbmVzLnB1c2goJyAgdGVzdChcJycrdGVzdE5hbWUrJ1wnLCBmdW5jdGlvbigpIHsnKTt0ZXN0TGluZXMucHVzaCgnICAgIGNvbnN0IHZlcmlmaWVyID0gbmV3IFVzZXJFeHBlY3RhdGlvblZlcmlmaWVyKCk7Jyk7dGVzdExpbmVzLnB1c2goJyAgICB2ZXJpZmllci5jdXN0b21pemVNb2RlbENhbGxiYWNrID0gZnVuY3Rpb24obW9kZWwpIHsnKTt0ZXN0TGluZXMucHVzaC5hcHBseSh0ZXN0TGluZXMsY3JlYXRlQ3VzdG9taXplTW9kZWxMaW5lc0Zyb21Nb2RlbChtb2RlbCkpO3Rlc3RMaW5lcy5wdXNoKCcgICAgfTsnKTt0ZXN0TGluZXMucHVzaCgnICAgIHZlcmlmaWVyLmV4cGVjdGVkVUVzID0gWycpO3Rlc3RMaW5lcy5wdXNoLmFwcGx5KHRlc3RMaW5lcyxjcmVhdGVFeHBlY3RlZFVFTGluZXNGcm9tTW9kZWwobW9kZWwpKTt0ZXN0TGluZXMucHVzaCgnICAgIF07Jyk7dGVzdExpbmVzLnB1c2goJyAgICB2ZXJpZmllci52ZXJpZnkoKTsnKTt0ZXN0TGluZXMucHVzaCgnICB9KTsnKTtyZXR1cm4gdGVzdExpbmVzLmpvaW4oJ1xuJyk7fWNhdGNoKGVycm9yKXtyZXR1cm4gZXJyb3I7fX0KLXJldHVybntVc2VyTW9kZWxCdWlsZGVyLGNyZWF0ZVVFRmluZGVyVGVzdENhc2VTdHJpbmdGcm9tTW9kZWwsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZGVjb3JhdGUoc291cmNlLGNvbnN0cil7bGV0IGVsZW1lbnRzO2lmKHR5cGVvZiBzb3VyY2U9PT0nc3RyaW5nJyl7ZWxlbWVudHM9UG9seW1lci5kb20odHIuZG9jKS5xdWVyeVNlbGVjdG9yQWxsKHNvdXJjZSk7fWVsc2V7ZWxlbWVudHM9W3NvdXJjZV07fQotZm9yKGxldCBpPTAsZWw7ZWw9ZWxlbWVudHNbaV07aSsrKXtpZighKGVsIGluc3RhbmNlb2YgY29uc3RyKSl7Y29uc3RyLmRlY29yYXRlKGVsKTt9fX0KLWZ1bmN0aW9uIGRlZmluZShjbGFzc05hbWUsb3B0X3BhcmVudENvbnN0cnVjdG9yLG9wdF90YWdOUyl7aWYodHlwZW9mIGNsYXNzTmFtZT09PSdmdW5jdGlvbicpe3Rocm93IG5ldyBFcnJvcignUGFzc2luZyBmdW5jdGlvbnMgYXMgY2xhc3NOYW1lIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSAnKyd1c2UgKGNsYXNzTmFtZSwgb3B0X3BhcmVudENvbnN0cnVjdG9yKSB0byBzdWJjbGFzcycpO30KLWNsYXNzTmFtZT1jbGFzc05hbWUudG9Mb3dlckNhc2UoKTtpZihvcHRfcGFyZW50Q29uc3RydWN0b3ImJiFvcHRfcGFyZW50Q29uc3RydWN0b3IudGFnTmFtZSl7dGhyb3cgbmV3IEVycm9yKCdvcHRfcGFyZW50Q29uc3RydWN0b3Igd2FzIG5vdCAnKydjcmVhdGVkIGJ5IHRyLnVpLmIuZGVmaW5lJyk7fQotbGV0IHRhZ05hbWU9Y2xhc3NOYW1lO2xldCB0YWdOUz11bmRlZmluZWQ7aWYob3B0X3BhcmVudENvbnN0cnVjdG9yKXtpZihvcHRfdGFnTlMpe3Rocm93IG5ldyBFcnJvcignTXVzdCBub3Qgc3BlY2lmeSB0YWdOUyBpZiBwYXJlbnRDb25zdHJ1Y3RvciBpcyBnaXZlbicpO30KLWxldCBwYXJlbnQ9b3B0X3BhcmVudENvbnN0cnVjdG9yO3doaWxlKHBhcmVudCYmcGFyZW50LnRhZ05hbWUpe3RhZ05hbWU9cGFyZW50LnRhZ05hbWU7dGFnTlM9cGFyZW50LnRhZ05TO3BhcmVudD1wYXJlbnQucGFyZW50Q29uc3RydWN0b3I7fX1lbHNle3RhZ05TPW9wdF90YWdOUzt9Ci1mdW5jdGlvbiBmKCl7aWYob3B0X3BhcmVudENvbnN0cnVjdG9yJiZmLnByb3RvdHlwZS5fX3Byb3RvX18hPT1vcHRfcGFyZW50Q29uc3RydWN0b3IucHJvdG90eXBlKXt0aHJvdyBuZXcgRXJyb3IoY2xhc3NOYW1lKycgcHJvdG90eWVcJ3MgX19wcm90b19fIGZpZWxkIGlzIG1lc3NlZCB1cC4gJysnSXQgTVVTVCBiZSB0aGUgcHJvdG90eXBlIG9mICcrb3B0X3BhcmVudENvbnN0cnVjdG9yLnRhZ05hbWUpO30KLWxldCBlbDtpZih0YWdOUz09PXVuZGVmaW5lZCl7ZWw9dHIuZG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7fWVsc2V7ZWw9dHIuZG9jLmNyZWF0ZUVsZW1lbnROUyh0YWdOUyx0YWdOYW1lKTt9Ci1mLmRlY29yYXRlLmNhbGwodGhpcyxlbCxhcmd1bWVudHMpO3JldHVybiBlbDt9Ci1mLmRlY29yYXRlPWZ1bmN0aW9uKGVsKXtlbC5fX3Byb3RvX189Zi5wcm90b3R5cGU7ZWwuZGVjb3JhdGUuYXBwbHkoZWwsYXJndW1lbnRzWzFdKTtlbC5jb25zdHJ1Y3Rvcj1mO307Zi5jbGFzc05hbWU9Y2xhc3NOYW1lO2YudGFnTmFtZT10YWdOYW1lO2YudGFnTlM9dGFnTlM7Zi5wYXJlbnRDb25zdHJ1Y3Rvcj0ob3B0X3BhcmVudENvbnN0cnVjdG9yP29wdF9wYXJlbnRDb25zdHJ1Y3Rvcjp1bmRlZmluZWQpO2YudG9TdHJpbmc9ZnVuY3Rpb24oKXtpZighZi5wYXJlbnRDb25zdHJ1Y3Rvcil7cmV0dXJuIGYudGFnTmFtZTt9Ci1yZXR1cm4gZi5wYXJlbnRDb25zdHJ1Y3Rvci50b1N0cmluZygpKyc6OicrZi5jbGFzc05hbWU7fTtyZXR1cm4gZjt9Ci1mdW5jdGlvbiBlbGVtZW50SXNDaGlsZE9mKGVsLHBvdGVudGlhbFBhcmVudCl7aWYoZWw9PT1wb3RlbnRpYWxQYXJlbnQpcmV0dXJuIGZhbHNlO2xldCBjdXI9ZWw7d2hpbGUoUG9seW1lci5kb20oY3VyKS5wYXJlbnROb2RlKXtpZihjdXI9PT1wb3RlbnRpYWxQYXJlbnQpcmV0dXJuIHRydWU7Y3VyPVBvbHltZXIuZG9tKGN1cikucGFyZW50Tm9kZTt9Ci1yZXR1cm4gZmFsc2U7fQotcmV0dXJue2RlY29yYXRlLGRlZmluZSxlbGVtZW50SXNDaGlsZE9mLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iLm1hdGgnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUmVjdCgpe3RoaXMueD0wO3RoaXMueT0wO3RoaXMud2lkdGg9MDt0aGlzLmhlaWdodD0wO30KLVJlY3QuZnJvbVhZV0g9ZnVuY3Rpb24oeCx5LHcsaCl7Y29uc3QgcmVjdD1uZXcgUmVjdCgpO3JlY3QueD14O3JlY3QueT15O3JlY3Qud2lkdGg9dztyZWN0LmhlaWdodD1oO3JldHVybiByZWN0O307UmVjdC5mcm9tQXJyYXk9ZnVuY3Rpb24oYXJ5KXtpZihhcnkubGVuZ3RoIT09NCl7dGhyb3cgbmV3IEVycm9yKCdhcnkubGVuZ3RoIG11c3QgYmUgNCcpO30KLWNvbnN0IHJlY3Q9bmV3IFJlY3QoKTtyZWN0Lng9YXJ5WzBdO3JlY3QueT1hcnlbMV07cmVjdC53aWR0aD1hcnlbMl07cmVjdC5oZWlnaHQ9YXJ5WzNdO3JldHVybiByZWN0O307UmVjdC5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3QucHJvdG90eXBlLGdldCBsZWZ0KCl7cmV0dXJuIHRoaXMueDt9LGdldCB0b3AoKXtyZXR1cm4gdGhpcy55O30sZ2V0IHJpZ2h0KCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRoO30sZ2V0IGJvdHRvbSgpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHQ7fSx0b1N0cmluZygpe3JldHVybidSZWN0KCcrdGhpcy54KycsICcrdGhpcy55KycsICcrCi10aGlzLndpZHRoKycsICcrdGhpcy5oZWlnaHQrJyknO30sdG9BcnJheSgpe3JldHVyblt0aGlzLngsdGhpcy55LHRoaXMud2lkdGgsdGhpcy5oZWlnaHRdO30sY2xvbmUoKXtjb25zdCByZWN0PW5ldyBSZWN0KCk7cmVjdC54PXRoaXMueDtyZWN0Lnk9dGhpcy55O3JlY3Qud2lkdGg9dGhpcy53aWR0aDtyZWN0LmhlaWdodD10aGlzLmhlaWdodDtyZXR1cm4gcmVjdDt9LGVubGFyZ2UocGFkKXtjb25zdCByZWN0PW5ldyBSZWN0KCk7dGhpcy5lbmxhcmdlRmFzdChyZWN0LHBhZCk7cmV0dXJuIHJlY3Q7fSxlbmxhcmdlRmFzdChvdXQscGFkKXtvdXQueD10aGlzLngtcGFkO291dC55PXRoaXMueS1wYWQ7b3V0LndpZHRoPXRoaXMud2lkdGgrMipwYWQ7b3V0LmhlaWdodD10aGlzLmhlaWdodCsyKnBhZDtyZXR1cm4gb3V0O30sc2l6ZSgpe3JldHVybnt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH07fSxzY2FsZShzKXtjb25zdCByZWN0PW5ldyBSZWN0KCk7dGhpcy5zY2FsZUZhc3QocmVjdCxzKTtyZXR1cm4gcmVjdDt9LHNjYWxlU2l6ZShzKXtyZXR1cm4gUmVjdC5mcm9tWFlXSCh0aGlzLngsdGhpcy55LHRoaXMud2lkdGgqcyx0aGlzLmhlaWdodCpzKTt9LHNjYWxlRmFzdChvdXQscyl7b3V0Lng9dGhpcy54KnM7b3V0Lnk9dGhpcy55KnM7b3V0LndpZHRoPXRoaXMud2lkdGgqcztvdXQuaGVpZ2h0PXRoaXMuaGVpZ2h0KnM7cmV0dXJuIG91dDt9LHRyYW5zbGF0ZSh2KXtjb25zdCByZWN0PW5ldyBSZWN0KCk7dGhpcy50cmFuc2xhdGVGYXN0KHJlY3Qsdik7cmV0dXJuIHJlY3Q7fSx0cmFuc2xhdGVGYXN0KG91dCx2KXtvdXQueD10aGlzLngrdlswXTtvdXQueT10aGlzLngrdlsxXTtvdXQud2lkdGg9dGhpcy53aWR0aDtvdXQuaGVpZ2h0PXRoaXMuaGVpZ2h0O3JldHVybiBvdXQ7fSxhc1VWUmVjdEluc2lkZShjb250YWluaW5nUmVjdCl7Y29uc3QgcmVjdD1uZXcgUmVjdCgpO3JlY3QueD0odGhpcy54LWNvbnRhaW5pbmdSZWN0LngpL2NvbnRhaW5pbmdSZWN0LndpZHRoO3JlY3QueT0odGhpcy55LWNvbnRhaW5pbmdSZWN0LnkpL2NvbnRhaW5pbmdSZWN0LmhlaWdodDtyZWN0LndpZHRoPXRoaXMud2lkdGgvY29udGFpbmluZ1JlY3Qud2lkdGg7cmVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQvY29udGFpbmluZ1JlY3QuaGVpZ2h0O3JldHVybiByZWN0O30saW50ZXJzZWN0cyh0aGF0KXtsZXQgb2s9dHJ1ZTtvayY9dGhpcy54PHRoYXQucmlnaHQ7b2smPXRoaXMucmlnaHQ+dGhhdC54O29rJj10aGlzLnk8dGhhdC5ib3R0b207b2smPXRoaXMuYm90dG9tPnRoYXQueTtyZXR1cm4gb2s7fSxlcXVhbFRvKHJlY3Qpe3JldHVybiByZWN0JiYodGhpcy54PT09cmVjdC54KSYmKHRoaXMueT09PXJlY3QueSkmJih0aGlzLndpZHRoPT09cmVjdC53aWR0aCkmJih0aGlzLmhlaWdodD09PXJlY3QuaGVpZ2h0KTt9fTtyZXR1cm57UmVjdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBpbnN0YW50aWF0ZVRlbXBsYXRlKHNlbGVjdG9yLGRvYyl7ZG9jPWRvY3x8ZG9jdW1lbnQ7Y29uc3QgZWw9UG9seW1lci5kb20oZG9jKS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtpZighZWwpe3Rocm93IG5ldyBFcnJvcignRWxlbWVudCBub3QgZm91bmQnKTt9Ci1yZXR1cm4gZG9jLmltcG9ydE5vZGUoZWwuY29udGVudCx0cnVlKTt9Ci1mdW5jdGlvbiB3aW5kb3dSZWN0Rm9yRWxlbWVudChlbGVtZW50KXtjb25zdCBwb3NpdGlvbj1bZWxlbWVudC5vZmZzZXRMZWZ0LGVsZW1lbnQub2Zmc2V0VG9wXTtjb25zdCBzaXplPVtlbGVtZW50Lm9mZnNldFdpZHRoLGVsZW1lbnQub2Zmc2V0SGVpZ2h0XTtsZXQgbm9kZT1lbGVtZW50Lm9mZnNldFBhcmVudDt3aGlsZShub2RlKXtwb3NpdGlvblswXSs9bm9kZS5vZmZzZXRMZWZ0O3Bvc2l0aW9uWzFdKz1ub2RlLm9mZnNldFRvcDtub2RlPW5vZGUub2Zmc2V0UGFyZW50O30KLXJldHVybiB0ci5iLm1hdGguUmVjdC5mcm9tWFlXSChwb3NpdGlvblswXSxwb3NpdGlvblsxXSxzaXplWzBdLHNpemVbMV0pO30KLWZ1bmN0aW9uIHNjcm9sbEludG9WaWV3SWZOZWVkZWQoZWwpe2NvbnN0IHByPWVsLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgY3I9ZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoY3IudG9wPHByLnRvcCl7ZWwuc2Nyb2xsSW50b1ZpZXcodHJ1ZSk7fWVsc2UgaWYoY3IuYm90dG9tPnByLmJvdHRvbSl7ZWwuc2Nyb2xsSW50b1ZpZXcoZmFsc2UpO319Ci1mdW5jdGlvbiBleHRyYWN0VXJsU3RyaW5nKHVybCl7bGV0IGV4dHJhY3RlZD11cmwucmVwbGFjZSgvdXJsXCgoLiopXCkvLCckMScpO2V4dHJhY3RlZD1leHRyYWN0ZWQucmVwbGFjZSgvXCIoLiopXCIvLCckMScpO3JldHVybiBleHRyYWN0ZWQ7fQotZnVuY3Rpb24gdG9UaHJlZURpZ2l0TG9jYWxlU3RyaW5nKHZhbHVlKXtyZXR1cm4gdmFsdWUudG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLHttaW5pbXVtRnJhY3Rpb25EaWdpdHM6MyxtYXhpbXVtRnJhY3Rpb25EaWdpdHM6M30pO30KLWZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnROYW1lKG5hbWUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpaW5zdGFuY2VvZiBIVE1MVW5rbm93bkVsZW1lbnQ7fQotcmV0dXJue2lzVW5rbm93bkVsZW1lbnROYW1lLHRvVGhyZWVEaWdpdExvY2FsZVN0cmluZyxpbnN0YW50aWF0ZVRlbXBsYXRlLHdpbmRvd1JlY3RGb3JFbGVtZW50LHNjcm9sbEludG9WaWV3SWZOZWVkZWQsZXh0cmFjdFVybFN0cmluZyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtpZih0ci5pc0hlYWRsZXNzKXJldHVybnt9O2NvbnN0IFRISVNfRE9DPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQub3duZXJEb2N1bWVudDtjb25zdCBPdmVybGF5PXRyLnVpLmIuZGVmaW5lKCdvdmVybGF5Jyk7T3ZlcmxheS5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoKXtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdvdmVybGF5Jyk7dGhpcy5wYXJlbnRFbF89dGhpcy5vd25lckRvY3VtZW50LmJvZHk7dGhpcy52aXNpYmxlXz1mYWxzZTt0aGlzLnVzZXJDYW5DbG9zZV89dHJ1ZTt0aGlzLm9uS2V5RG93bl89dGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7dGhpcy5vbkNsaWNrXz10aGlzLm9uQ2xpY2tfLmJpbmQodGhpcyk7dGhpcy5vbkZvY3VzSW5fPXRoaXMub25Gb2N1c0luXy5iaW5kKHRoaXMpO3RoaXMub25Eb2N1bWVudENsaWNrXz10aGlzLm9uRG9jdW1lbnRDbGlja18uYmluZCh0aGlzKTt0aGlzLm9uQ2xvc2VfPXRoaXMub25DbG9zZV8uYmluZCh0aGlzKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2libGUtY2hhbmdlJyx0ci51aS5iLk92ZXJsYXkucHJvdG90eXBlLm9uVmlzaWJsZUNoYW5nZV8uYmluZCh0aGlzKSx0cnVlKTtjb25zdCBjcmVhdGVTaGFkb3dSb290PXRoaXMuY3JlYXRlU2hhZG93Um9vdHx8dGhpcy53ZWJraXRDcmVhdGVTaGFkb3dSb290O3RoaXMuc2hhZG93Xz1jcmVhdGVTaGFkb3dSb290LmNhbGwodGhpcyk7UG9seW1lci5kb20odGhpcy5zaGFkb3dfKS5hcHBlbmRDaGlsZCh0ci51aS5iLmluc3RhbnRpYXRlVGVtcGxhdGUoJyNvdmVybGF5LXRlbXBsYXRlJyxUSElTX0RPQykpO3RoaXMuY2xvc2VCdG5fPVBvbHltZXIuZG9tKHRoaXMuc2hhZG93XykucXVlcnlTZWxlY3RvcignY2xvc2UtYnV0dG9uJyk7dGhpcy5jbG9zZUJ0bl8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMub25DbG9zZV8pO1BvbHltZXIuZG9tKHRoaXMuc2hhZG93XykucXVlcnlTZWxlY3Rvcignb3ZlcmxheS1mcmFtZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uQ2xpY2tfKTt0aGlzLm9ic2VydmVyXz1uZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcih0aGlzLmRpZEJ1dHRvbkJhck11dGF0ZV8uYmluZCh0aGlzKSk7dGhpcy5vYnNlcnZlcl8ub2JzZXJ2ZShQb2x5bWVyLmRvbSh0aGlzLnNoYWRvd18pLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi1iYXInKSx7Y2hpbGRMaXN0OnRydWV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywndGl0bGUnLHtnZXQoKXtyZXR1cm4gUG9seW1lci5kb20oUG9seW1lci5kb20odGhpcy5zaGFkb3dfKS5xdWVyeVNlbGVjdG9yKCd0aXRsZScpKS50ZXh0Q29udGVudDt9LHNldCh0aXRsZSl7UG9seW1lci5kb20oUG9seW1lci5kb20odGhpcy5zaGFkb3dfKS5xdWVyeVNlbGVjdG9yKCd0aXRsZScpKS50ZXh0Q29udGVudD10aXRsZTt9fSk7fSxzZXQgdXNlckNhbkNsb3NlKHVzZXJDYW5DbG9zZSl7dGhpcy51c2VyQ2FuQ2xvc2VfPXVzZXJDYW5DbG9zZTt0aGlzLmNsb3NlQnRuXy5zdHlsZS5kaXNwbGF5PXVzZXJDYW5DbG9zZT8nYmxvY2snOidub25lJzt9LGdldCBidXR0b25zKCl7cmV0dXJuIFBvbHltZXIuZG9tKHRoaXMuc2hhZG93XykucXVlcnlTZWxlY3RvcignYnV0dG9uLWJhcicpO30sZ2V0IHZpc2libGUoKXtyZXR1cm4gdGhpcy52aXNpYmxlXzt9LHNldCB2aXNpYmxlKG5ld1ZhbHVlKXtpZih0aGlzLnZpc2libGVfPT09bmV3VmFsdWUpcmV0dXJuO3RoaXMudmlzaWJsZV89bmV3VmFsdWU7Y29uc3QgZT1uZXcgdHIuYi5FdmVudCgndmlzaWJsZS1jaGFuZ2UnKTt0aGlzLmRpc3BhdGNoRXZlbnQoZSk7fSxvblZpc2libGVDaGFuZ2VfKCl7dGhpcy52aXNpYmxlXz90aGlzLnNob3dfKCk6dGhpcy5oaWRlXygpO30sc2hvd18oKXtQb2x5bWVyLmRvbSh0aGlzLnBhcmVudEVsXykuYXBwZW5kQ2hpbGQodGhpcyk7aWYodGhpcy51c2VyQ2FuQ2xvc2VfKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uRG9jdW1lbnRDbGlja18uYmluZCh0aGlzKSk7dGhpcy5jbG9zZUJ0bl8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMub25DbG9zZV8pO30KLXRoaXMucGFyZW50RWxfLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLHRoaXMub25Gb2N1c0luXyk7dGhpcy50YWJJbmRleD0wO2NvbnN0IGVsTGlzdD1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24sIGlucHV0LCBsaXN0LCBzZWxlY3QsIGEnKTtpZihlbExpc3QubGVuZ3RoPjApe2lmKGVsTGlzdFswXT09PXRoaXMuY2xvc2VCdG5fKXtpZihlbExpc3QubGVuZ3RoPjEpcmV0dXJuIGVsTGlzdFsxXS5mb2N1cygpO31lbHNle3JldHVybiBlbExpc3RbMF0uZm9jdXMoKTt9fQotdGhpcy5mb2N1cygpO30saGlkZV8oKXtQb2x5bWVyLmRvbSh0aGlzLnBhcmVudEVsXykucmVtb3ZlQ2hpbGQodGhpcyk7dGhpcy5wYXJlbnRFbF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsdGhpcy5vbkZvY3VzSW5fKTtpZih0aGlzLmNsb3NlQnRuXyl7dGhpcy5jbG9zZUJ0bl8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMub25DbG9zZV8pO30KLWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLHRoaXMub25LZXlEb3duXyk7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMub25Eb2N1bWVudENsaWNrXyk7fSxvbkNsb3NlXyhlKXt0aGlzLnZpc2libGU9ZmFsc2U7aWYoKGUudHlwZSE9PSdrZXlkb3duJyl8fChlLnR5cGU9PT0na2V5ZG93bicmJmUua2V5Q29kZT09PTI3KSl7ZS5zdG9wUHJvcGFnYXRpb24oKTt9Ci1lLnByZXZlbnREZWZhdWx0KCk7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ2Nsb3NlY2xpY2snKTt9LG9uRm9jdXNJbl8oZSl7bGV0IG5vZGU9ZS50YXJnZXQ7d2hpbGUobm9kZSl7aWYobm9kZT09PXRoaXMpe3JldHVybjt9Ci1ub2RlPW5vZGUucGFyZW50Tm9kZTt9Ci10ci5iLnRpbWVvdXQoMCkudGhlbigoKT0+dGhpcy5mb2N1cygpKTtlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9LGRpZEJ1dHRvbkJhck11dGF0ZV8oZSl7Y29uc3QgaGFzQnV0dG9ucz10aGlzLmJ1dHRvbnMuY2hpbGRyZW4ubGVuZ3RoPjA7aWYoaGFzQnV0dG9ucyl7UG9seW1lci5kb20odGhpcy5zaGFkb3dfKS5xdWVyeVNlbGVjdG9yKCdidXR0b24tYmFyJykuc3R5bGUuZGlzcGxheT11bmRlZmluZWQ7fWVsc2V7UG9seW1lci5kb20odGhpcy5zaGFkb3dfKS5xdWVyeVNlbGVjdG9yKCdidXR0b24tYmFyJykuc3R5bGUuZGlzcGxheT0nbm9uZSc7fX0sb25LZXlEb3duXyhlKXtpZihlLmtleUNvZGU9PT05JiZlLnNoaWZ0S2V5JiZlLnRhcmdldD09PXRoaXMpe2UucHJldmVudERlZmF1bHQoKTtyZXR1cm47fQotaWYoZS5rZXlDb2RlIT09MjcpcmV0dXJuO3RoaXMub25DbG9zZV8oZSk7fSxvbkNsaWNrXyhlKXtlLnN0b3BQcm9wYWdhdGlvbigpO30sb25Eb2N1bWVudENsaWNrXyhlKXtpZighdGhpcy51c2VyQ2FuQ2xvc2VfKXJldHVybjt0aGlzLm9uQ2xvc2VfKGUpO319O092ZXJsYXkuc2hvd0Vycm9yPWZ1bmN0aW9uKG1zZyxvcHRfZXJyKXtjb25zdCBvPW5ldyBPdmVybGF5KCk7by50aXRsZT0nRXJyb3InO1BvbHltZXIuZG9tKG8pLnRleHRDb250ZW50PW1zZztpZihvcHRfZXJyKXtjb25zdCBlPXRyLmIubm9ybWFsaXplRXhjZXB0aW9uKG9wdF9lcnIpO2NvbnN0IHN0YWNrRGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1BvbHltZXIuZG9tKHN0YWNrRGl2KS50ZXh0Q29udGVudD1lLnN0YWNrO3N0YWNrRGl2LnN0eWxlLnBhZGRpbmdMZWZ0PSc4cHgnO3N0YWNrRGl2LnN0eWxlLm1hcmdpbj0wO1BvbHltZXIuZG9tKG8pLmFwcGVuZENoaWxkKHN0YWNrRGl2KTt9Ci1jb25zdCBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1BvbHltZXIuZG9tKGIpLnRleHRDb250ZW50PSdPSyc7Yi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXtvLnZpc2libGU9ZmFsc2U7fSk7UG9seW1lci5kb20oby5idXR0b25zKS5hcHBlbmRDaGlsZChiKTtvLnZpc2libGU9dHJ1ZTtyZXR1cm4gbzt9O3JldHVybntPdmVybGF5LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5pbXBvcnRlcicsZnVuY3Rpb24oKXtjb25zdCBUaW1pbmc9dHIuYi5UaW1pbmc7ZnVuY3Rpb24gSW1wb3J0T3B0aW9ucygpe3RoaXMuc2hpZnRXb3JsZFRvWmVybz10cnVlO3RoaXMucHJ1bmVFbXB0eUNvbnRhaW5lcnM9dHJ1ZTt0aGlzLnNob3dJbXBvcnRXYXJuaW5ncz10cnVlO3RoaXMudHJhY2tEZXRhaWxlZE1vZGVsU3RhdHM9ZmFsc2U7dGhpcy5jdXN0b21pemVNb2RlbENhbGxiYWNrPXVuZGVmaW5lZDtjb25zdCBhdWRpdG9yVHlwZXM9dHIuYy5BdWRpdG9yLmdldEFsbFJlZ2lzdGVyZWRUeXBlSW5mb3MoKTt0aGlzLmF1ZGl0b3JDb25zdHJ1Y3RvcnM9YXVkaXRvclR5cGVzLm1hcChmdW5jdGlvbih0eXBlSW5mbyl7cmV0dXJuIHR5cGVJbmZvLmNvbnN0cnVjdG9yO30pO30KLWZ1bmN0aW9uIEltcG9ydChtb2RlbCxvcHRfb3B0aW9ucyl7aWYobW9kZWw9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIG1vZGVsIHRvIGltcG9ydCBpbnRvLicpO30KLXRoaXMuaW1wb3J0aW5nXz1mYWxzZTt0aGlzLmltcG9ydE9wdGlvbnNfPW9wdF9vcHRpb25zfHxuZXcgSW1wb3J0T3B0aW9ucygpO3RoaXMubW9kZWxfPW1vZGVsO3RoaXMubW9kZWxfLmltcG9ydE9wdGlvbnM9dGhpcy5pbXBvcnRPcHRpb25zXzt9Ci1JbXBvcnQucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZSxpbXBvcnRUcmFjZXModHJhY2VzKXtjb25zdCBwcm9ncmVzc01ldGVyPXt1cGRhdGUobXNnKXt9fTt0ci5iLlRhc2suUnVuU3luY2hyb25vdXNseSh0aGlzLmNyZWF0ZUltcG9ydFRyYWNlc1Rhc2socHJvZ3Jlc3NNZXRlcix0cmFjZXMpKTt9LGltcG9ydFRyYWNlc1dpdGhQcm9ncmVzc0RpYWxvZyh0cmFjZXMpe2lmKHRyLmlzSGVhZGxlc3Mpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSB0aGlzIG1ldGhvZCBpbiBoZWFkbGVzcyBtb2RlLicpO30KLWNvbnN0IG92ZXJsYXk9dHIudWkuYi5PdmVybGF5KCk7b3ZlcmxheS50aXRsZT0nSW1wb3J0aW5nLi4uJztvdmVybGF5LnVzZXJDYW5DbG9zZT1mYWxzZTtvdmVybGF5Lm1zZ0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1BvbHltZXIuZG9tKG92ZXJsYXkpLmFwcGVuZENoaWxkKG92ZXJsYXkubXNnRWwpO292ZXJsYXkubXNnRWwuc3R5bGUubWFyZ2luPScyMHB4JztvdmVybGF5LnVwZGF0ZT1mdW5jdGlvbihtc2cpe1BvbHltZXIuZG9tKHRoaXMubXNnRWwpLnRleHRDb250ZW50PW1zZzt9O292ZXJsYXkudmlzaWJsZT10cnVlO2NvbnN0IHByb21pc2U9dHIuYi5UYXNrLlJ1bldoZW5JZGxlKHRoaXMuY3JlYXRlSW1wb3J0VHJhY2VzVGFzayhvdmVybGF5LHRyYWNlcykpO3Byb21pc2UudGhlbihmdW5jdGlvbigpe292ZXJsYXkudmlzaWJsZT1mYWxzZTt9LGZ1bmN0aW9uKGVycil7b3ZlcmxheS52aXNpYmxlPWZhbHNlO30pO3JldHVybiBwcm9taXNlO30sY3JlYXRlSW1wb3J0VHJhY2VzVGFzayhwcm9ncmVzc01ldGVyLHRyYWNlcyl7Y29uc3QgaW1wb3J0U3RhcnRUaW1lTXM9dHIuYi5UaW1pbmcuZ2V0Q3VycmVudFRpbWVNcygpO2lmKHRoaXMuaW1wb3J0aW5nXyl7dGhyb3cgbmV3IEVycm9yKCdBbHJlYWR5IGltcG9ydGluZy4nKTt9Ci10aGlzLmltcG9ydGluZ189dHJ1ZTtjb25zdCBpbXBvcnRUYXNrPW5ldyB0ci5iLlRhc2soZnVuY3Rpb24gcHJlcGFyZUltcG9ydCgpe3Byb2dyZXNzTWV0ZXIudXBkYXRlKCdJIHdpbGwgbm93IGltcG9ydCB5b3VyIHRyYWNlcyBmb3IgeW91Li4uJyk7fSx0aGlzKTtsZXQgbGFzdFRhc2s9aW1wb3J0VGFzaztjb25zdCBpbXBvcnRlcnM9W107ZnVuY3Rpb24gYWRkSW1wb3J0U3RhZ2UodGl0bGUsY2FsbGJhY2spe2xhc3RUYXNrPWxhc3RUYXNrLmFmdGVyKCgpPT5wcm9ncmVzc01ldGVyLnVwZGF0ZSh0aXRsZSkpO2xhc3RUYXNrLnVwZGF0ZXNVaT10cnVlO2xhc3RUYXNrPWxhc3RUYXNrLmFmdGVyKGNhbGxiYWNrKTt9Ci1mdW5jdGlvbiBhZGRTdGFnZUZvckVhY2hJbXBvcnRlcih0aXRsZSxjYWxsYmFjayl7bGFzdFRhc2s9bGFzdFRhc2suYWZ0ZXIoKHRhc2spPT57aW1wb3J0ZXJzLmZvckVhY2goKGltcG9ydGVyLGluZGV4KT0+e2NvbnN0IHVpU3ViVGFzaz10YXNrLnN1YlRhc2soKCk9Pntwcm9ncmVzc01ldGVyLnVwZGF0ZShgJHt0aXRsZX0gJHtpbmRleCArIDF9IG9mICR7aW1wb3J0ZXJzLmxlbmd0aH1gKTt9KTt1aVN1YlRhc2sudXBkYXRlc1VpPXRydWU7dGFzay5zdWJUYXNrKCgpPT5jYWxsYmFjayhpbXBvcnRlcikpO30pO30pO30KLWFkZEltcG9ydFN0YWdlKCdDcmVhdGluZyBpbXBvcnRlcnMuLi4nLCgpPT57dHJhY2VzPXRyYWNlcy5zbGljZSgwKTtwcm9ncmVzc01ldGVyLnVwZGF0ZSgnQ3JlYXRpbmcgaW1wb3J0ZXJzLi4uJyk7Zm9yKGxldCBpPTA7aTx0cmFjZXMubGVuZ3RoOysraSl7aW1wb3J0ZXJzLnB1c2godGhpcy5jcmVhdGVJbXBvcnRlcl8odHJhY2VzW2ldKSk7fQotZm9yKGxldCBpPTA7aTxpbXBvcnRlcnMubGVuZ3RoO2krKyl7Y29uc3Qgc3VidHJhY2VzPWltcG9ydGVyc1tpXS5leHRyYWN0U3VidHJhY2VzKCk7Zm9yKGxldCBqPTA7ajxzdWJ0cmFjZXMubGVuZ3RoO2orKyl7dHJ5e3RyYWNlcy5wdXNoKHN1YnRyYWNlc1tqXSk7aW1wb3J0ZXJzLnB1c2godGhpcy5jcmVhdGVJbXBvcnRlcl8oc3VidHJhY2VzW2pdKSk7fWNhdGNoKGVycm9yKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOmVycm9yLm5hbWUsbWVzc2FnZTplcnJvci5tZXNzYWdlLHNob3dUb1VzZXI6dHJ1ZSx9KTtjb250aW51ZTt9fX0KLWlmKHRyYWNlcy5sZW5ndGgmJiF0aGlzLmhhc0V2ZW50RGF0YURlY29kZXJfKGltcG9ydGVycykpe3Rocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgYW4gaW1wb3J0ZXIgZm9yIHRoZSBwcm92aWRlZCBldmVudERhdGEuJyk7fQotaW1wb3J0ZXJzLnNvcnQoZnVuY3Rpb24oeCx5KXtyZXR1cm4geC5pbXBvcnRQcmlvcml0eS15LmltcG9ydFByaW9yaXR5O30pO30pO2FkZFN0YWdlRm9yRWFjaEltcG9ydGVyKCdJbXBvcnRpbmcgY2xvY2sgc3luYyBtYXJrZXJzJyxpbXBvcnRlcj0+aW1wb3J0ZXIuaW1wb3J0Q2xvY2tTeW5jTWFya2VycygpKTthZGRTdGFnZUZvckVhY2hJbXBvcnRlcignSW1wb3J0aW5nJyxpbXBvcnRlcj0+aW1wb3J0ZXIuaW1wb3J0RXZlbnRzKCkpO2lmKHRoaXMuaW1wb3J0T3B0aW9uc18uY3VzdG9taXplTW9kZWxDYWxsYmFjayl7YWRkSW1wb3J0U3RhZ2UoJ0N1c3RvbWl6aW5nJywoKT0+e3RoaXMuaW1wb3J0T3B0aW9uc18uY3VzdG9taXplTW9kZWxDYWxsYmFjayh0aGlzLm1vZGVsXyk7fSk7fQotYWRkU3RhZ2VGb3JFYWNoSW1wb3J0ZXIoJ0ltcG9ydGluZyBzYW1wbGUgZGF0YScsaW1wb3J0ZXI9PmltcG9ydGVyLmltcG9ydFNhbXBsZURhdGEoKSk7YWRkSW1wb3J0U3RhZ2UoJ0F1dG9jbG9zaW5nIG9wZW4gc2xpY2VzLi4uJywoKT0+e3RoaXMubW9kZWxfLmF1dG9DbG9zZU9wZW5TbGljZXMoKTt0aGlzLm1vZGVsXy5jcmVhdGVTdWJTbGljZXMoKTt9KTthZGRTdGFnZUZvckVhY2hJbXBvcnRlcignRmluYWxpemluZyBpbXBvcnQnLGltcG9ydGVyPT5pbXBvcnRlci5maW5hbGl6ZUltcG9ydCgpKTthZGRJbXBvcnRTdGFnZSgnSW5pdGlhbGl6aW5nIG9iamVjdHMgKHN0ZXAgMS8yKS4uLicsKCk9PnRoaXMubW9kZWxfLnByZUluaXRpYWxpemVPYmplY3RzKCkpO2lmKHRoaXMuaW1wb3J0T3B0aW9uc18ucHJ1bmVFbXB0eUNvbnRhaW5lcnMpe2FkZEltcG9ydFN0YWdlKCdQcnVuaW5nIGVtcHR5IGNvbnRhaW5lcnMuLi4nLCgpPT50aGlzLm1vZGVsXy5wcnVuZUVtcHR5Q29udGFpbmVycygpKTt9Ci1hZGRJbXBvcnRTdGFnZSgnTWVyZ2luZyBrZXJuZWwgd2l0aCB1c2VybGFuZC4uLicsKCk9PnRoaXMubW9kZWxfLm1lcmdlS2VybmVsV2l0aFVzZXJsYW5kKCkpO2xldCBhdWRpdG9ycz1bXTthZGRJbXBvcnRTdGFnZSgnQWRkaW5nIGFyYml0cmFyeSBkYXRhIHRvIG1vZGVsLi4uJywoKT0+e2F1ZGl0b3JzPXRoaXMuaW1wb3J0T3B0aW9uc18uYXVkaXRvckNvbnN0cnVjdG9ycy5tYXAoYXVkaXRvckNvbnN0cnVjdG9yPT5uZXcgYXVkaXRvckNvbnN0cnVjdG9yKHRoaXMubW9kZWxfKSk7YXVkaXRvcnMuZm9yRWFjaCgoYXVkaXRvcik9PnthdWRpdG9yLnJ1bkFubm90YXRlKCk7YXVkaXRvci5pbnN0YWxsVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXJJZk5lZWRlZCgpO30pO30pO2FkZEltcG9ydFN0YWdlKCdDb21wdXRpbmcgZmluYWwgd29ybGQgYm91bmRzLi4uJywoKT0+e3RoaXMubW9kZWxfLmNvbXB1dGVXb3JsZEJvdW5kcyh0aGlzLmltcG9ydE9wdGlvbnNfLnNoaWZ0V29ybGRUb1plcm8pO30pO2FkZEltcG9ydFN0YWdlKCdCdWlsZGluZyBmbG93IGV2ZW50IG1hcC4uLicsKCk9PnRoaXMubW9kZWxfLmJ1aWxkRmxvd0V2ZW50SW50ZXJ2YWxUcmVlKCkpO2FkZEltcG9ydFN0YWdlKCdKb2luaW5nIG9iamVjdCByZWZzLi4uJywoKT0+dGhpcy5tb2RlbF8uam9pblJlZnMoKSk7YWRkSW1wb3J0U3RhZ2UoJ0NsZWFuaW5nIHVwIHVuZGVsZXRlZCBvYmplY3RzLi4uJywoKT0+dGhpcy5tb2RlbF8uY2xlYW51cFVuZGVsZXRlZE9iamVjdHMoKSk7YWRkSW1wb3J0U3RhZ2UoJ1NvcnRpbmcgbWVtb3J5IGR1bXBzLi4uJywoKT0+dGhpcy5tb2RlbF8uc29ydE1lbW9yeUR1bXBzKCkpO2FkZEltcG9ydFN0YWdlKCdGaW5hbGl6aW5nIG1lbW9yeSBkdW1wIGdyYXBocy4uLicsKCk9PnRoaXMubW9kZWxfLmZpbmFsaXplTWVtb3J5R3JhcGhzKCkpO2FkZEltcG9ydFN0YWdlKCdJbml0aWFsaXppbmcgb2JqZWN0cyAoc3RlcCAyLzIpLi4uJywoKT0+dGhpcy5tb2RlbF8uaW5pdGlhbGl6ZU9iamVjdHMoKSk7YWRkSW1wb3J0U3RhZ2UoJ0J1aWxkaW5nIGV2ZW50IGluZGljZXMuLi4nLCgpPT50aGlzLm1vZGVsXy5idWlsZEV2ZW50SW5kaWNlcygpKTthZGRJbXBvcnRTdGFnZSgnQnVpbGRpbmcgVXNlck1vZGVsLi4uJywoKT0+e2NvbnN0IHVzZXJNb2RlbEJ1aWxkZXI9bmV3IHRyLmltcG9ydGVyLlVzZXJNb2RlbEJ1aWxkZXIodGhpcy5tb2RlbF8pO3VzZXJNb2RlbEJ1aWxkZXIuYnVpbGRVc2VyTW9kZWwoKTt9KTthZGRJbXBvcnRTdGFnZSgnU29ydGluZyB1c2VyIGV4cGVjdGF0aW9ucy4uLicsKCk9PnRoaXMubW9kZWxfLnVzZXJNb2RlbC5zb3J0RXhwZWN0YXRpb25zKCkpO2FkZEltcG9ydFN0YWdlKCdSdW5uaW5nIGF1ZGl0b3JzLi4uJywoKT0+e2F1ZGl0b3JzLmZvckVhY2goYXVkaXRvcj0+YXVkaXRvci5ydW5BdWRpdCgpKTt9KTthZGRJbXBvcnRTdGFnZSgnVXBkYXRpbmcgYWxlcnRzLi4uJywoKT0+dGhpcy5tb2RlbF8uc29ydEFsZXJ0cygpKTthZGRJbXBvcnRTdGFnZSgnVXBkYXRlIGJvdW5kcy4uLicsKCk9PnRoaXMubW9kZWxfLnVwZGF0ZUJvdW5kcygpKTthZGRJbXBvcnRTdGFnZSgnTG9va2luZyBmb3Igd2FybmluZ3MuLi4nLCgpPT57aWYoIXRoaXMubW9kZWxfLmlzVGltZUhpZ2hSZXNvbHV0aW9uKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidsb3dfcmVzb2x1dGlvbl90aW1lcicsbWVzc2FnZTonVHJhY2UgdGltZSBpcyBsb3cgcmVzb2x1dGlvbiwgdHJhY2UgbWF5IGJlIHVudXNhYmxlLicsc2hvd1RvVXNlcjp0cnVlfSk7fX0pO2xhc3RUYXNrLmFmdGVyKCgpPT57dGhpcy5pbXBvcnRpbmdfPWZhbHNlO3RoaXMubW9kZWxfLnN0YXRzLnRyYWNlSW1wb3J0RHVyYXRpb25Ncz10ci5iLlRpbWluZy5nZXRDdXJyZW50VGltZU1zKCktaW1wb3J0U3RhcnRUaW1lTXM7fSk7cmV0dXJuIGltcG9ydFRhc2s7fSxjcmVhdGVJbXBvcnRlcl8oZXZlbnREYXRhKXtjb25zdCBpbXBvcnRlckNvbnN0cnVjdG9yPXRyLmltcG9ydGVyLkltcG9ydGVyLmZpbmRJbXBvcnRlckZvcihldmVudERhdGEpO2lmKCFpbXBvcnRlckNvbnN0cnVjdG9yKXt0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkblwndCBjcmVhdGUgYW4gaW1wb3J0ZXIgZm9yIHRoZSBwcm92aWRlZCAnKydldmVudERhdGEuJyk7fQotcmV0dXJuIG5ldyBpbXBvcnRlckNvbnN0cnVjdG9yKHRoaXMubW9kZWxfLGV2ZW50RGF0YSk7fSxoYXNFdmVudERhdGFEZWNvZGVyXyhpbXBvcnRlcnMpe2ZvcihsZXQgaT0wO2k8aW1wb3J0ZXJzLmxlbmd0aDsrK2kpe2lmKCFpbXBvcnRlcnNbaV0uaXNUcmFjZURhdGFDb250YWluZXIoKSlyZXR1cm4gdHJ1ZTt9Ci1yZXR1cm4gZmFsc2U7fX07cmV0dXJue0ltcG9ydE9wdGlvbnMsSW1wb3J0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnY4JyxmdW5jdGlvbigpe2NvbnN0IFRocmVhZFNsaWNlPXRyLm1vZGVsLlRocmVhZFNsaWNlO2Z1bmN0aW9uIFY4R0NTdGF0c1RocmVhZFNsaWNlKCl7VGhyZWFkU2xpY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMubGl2ZU9iamVjdHNfPUpTT04ucGFyc2UodGhpcy5hcmdzLmxpdmUpO2RlbGV0ZSB0aGlzLmFyZ3MubGl2ZTt0aGlzLmRlYWRPYmplY3RzXz1KU09OLnBhcnNlKHRoaXMuYXJncy5kZWFkKTtkZWxldGUgdGhpcy5hcmdzLmRlYWQ7fQotVjhHQ1N0YXRzVGhyZWFkU2xpY2UucHJvdG90eXBlPXtfX3Byb3RvX186VGhyZWFkU2xpY2UucHJvdG90eXBlLGdldCBsaXZlT2JqZWN0cygpe3JldHVybiB0aGlzLmxpdmVPYmplY3RzXzt9LGdldCBkZWFkT2JqZWN0cygpe3JldHVybiB0aGlzLmRlYWRPYmplY3RzXzt9fTtUaHJlYWRTbGljZS5zdWJUeXBlcy5yZWdpc3RlcihWOEdDU3RhdHNUaHJlYWRTbGljZSx7Y2F0ZWdvcnlQYXJ0czpbJ2Rpc2FibGVkLWJ5LWRlZmF1bHQtdjguZ2Nfc3RhdHMnXSxuYW1lOid2OCBnYyBzdGF0cyBzbGljZScscGx1cmFsTmFtZTondjggZ2Mgc3RhdHMgc2xpY2VzJ30pO3JldHVybntWOEdDU3RhdHNUaHJlYWRTbGljZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS52OCcsZnVuY3Rpb24oKXtjb25zdCBUaHJlYWRTbGljZT10ci5tb2RlbC5UaHJlYWRTbGljZTtmdW5jdGlvbiBWOElDU3RhdHNUaHJlYWRTbGljZSgpe1RocmVhZFNsaWNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmljU3RhdHNfPXVuZGVmaW5lZDtpZih0aGlzLmFyZ3NbJ2ljLXN0YXRzJ10pe3RoaXMuaWNTdGF0c189dGhpcy5hcmdzWydpYy1zdGF0cyddLmRhdGE7ZGVsZXRlIHRoaXMuYXJnc1snaWMtc3RhdHMnXTt9fQotVjhJQ1N0YXRzVGhyZWFkU2xpY2UucHJvdG90eXBlPXtfX3Byb3RvX186VGhyZWFkU2xpY2UucHJvdG90eXBlLGdldCBpY1N0YXRzKCl7cmV0dXJuIHRoaXMuaWNTdGF0c187fX07VGhyZWFkU2xpY2Uuc3ViVHlwZXMucmVnaXN0ZXIoVjhJQ1N0YXRzVGhyZWFkU2xpY2Use2NhdGVnb3J5UGFydHM6WydkaXNhYmxlZC1ieS1kZWZhdWx0LXY4LmljX3N0YXRzJ10sbmFtZTondjggaWMgc3RhdHMgc2xpY2UnLHBsdXJhbE5hbWU6J3Y4IGljIHN0YXRzIHNsaWNlcyd9KTtyZXR1cm57VjhJQ1N0YXRzVGhyZWFkU2xpY2UsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUudjgnLGZ1bmN0aW9uKCl7Y29uc3QgVGhyZWFkU2xpY2U9dHIubW9kZWwuVGhyZWFkU2xpY2U7ZnVuY3Rpb24gVjhUaHJlYWRTbGljZSgpe1RocmVhZFNsaWNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnJ1bnRpbWVDYWxsU3RhdHNfPXVuZGVmaW5lZDt9Ci1WOFRocmVhZFNsaWNlLnByb3RvdHlwZT17X19wcm90b19fOlRocmVhZFNsaWNlLnByb3RvdHlwZSxnZXQgcnVudGltZUNhbGxTdGF0cygpe2lmKCdydW50aW1lLWNhbGwtc3RhdHMnaW4gdGhpcy5hcmdzKXt0aGlzLnJ1bnRpbWVDYWxsU3RhdHNfPXRoaXMuYXJnc1sncnVudGltZS1jYWxsLXN0YXRzJ107ZGVsZXRlIHRoaXMuYXJnc1sncnVudGltZS1jYWxsLXN0YXRzJ107fQotcmV0dXJuIHRoaXMucnVudGltZUNhbGxTdGF0c187fX07VGhyZWFkU2xpY2Uuc3ViVHlwZXMucmVnaXN0ZXIoVjhUaHJlYWRTbGljZSx7Y2F0ZWdvcnlQYXJ0czpbJ3Y4JywnZGlzYWJsZWQtYnktZGVmYXVsdC12OC5ydW50aW1lX3N0YXRzJ10sbmFtZTondjggc2xpY2UnLHBsdXJhbE5hbWU6J3Y4IHNsaWNlcyd9KTtyZXR1cm57VjhUaHJlYWRTbGljZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jYycsZnVuY3Rpb24oKXtmdW5jdGlvbiBQaWN0dXJlQXNJbWFnZURhdGEocGljdHVyZSxlcnJvck9ySW1hZ2VEYXRhKXt0aGlzLnBpY3R1cmVfPXBpY3R1cmU7aWYoZXJyb3JPckltYWdlRGF0YSBpbnN0YW5jZW9mIEltYWdlRGF0YSl7dGhpcy5lcnJvcl89dW5kZWZpbmVkO3RoaXMuaW1hZ2VEYXRhXz1lcnJvck9ySW1hZ2VEYXRhO31lbHNle3RoaXMuZXJyb3JfPWVycm9yT3JJbWFnZURhdGE7dGhpcy5pbWFnZURhdGFfPXVuZGVmaW5lZDt9fQotUGljdHVyZUFzSW1hZ2VEYXRhLlBlbmRpbmc9ZnVuY3Rpb24ocGljdHVyZSl7cmV0dXJuIG5ldyBQaWN0dXJlQXNJbWFnZURhdGEocGljdHVyZSx1bmRlZmluZWQpO307UGljdHVyZUFzSW1hZ2VEYXRhLnByb3RvdHlwZT17Z2V0IHBpY3R1cmUoKXtyZXR1cm4gdGhpcy5waWN0dXJlXzt9LGdldCBlcnJvcigpe3JldHVybiB0aGlzLmVycm9yXzt9LGdldCBpbWFnZURhdGEoKXtyZXR1cm4gdGhpcy5pbWFnZURhdGFfO30saXNQZW5kaW5nKCl7cmV0dXJuIHRoaXMuZXJyb3JfPT09dW5kZWZpbmVkJiZ0aGlzLmltYWdlRGF0YV89PT11bmRlZmluZWQ7fSxhc0NhbnZhcygpe2lmKCF0aGlzLmltYWdlRGF0YV8pcmV0dXJuO2NvbnN0IGNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtjb25zdCBjdHg9Y2FudmFzLmdldENvbnRleHQoJzJkJyk7Y2FudmFzLndpZHRoPXRoaXMuaW1hZ2VEYXRhXy53aWR0aDtjYW52YXMuaGVpZ2h0PXRoaXMuaW1hZ2VEYXRhXy5oZWlnaHQ7Y3R4LnB1dEltYWdlRGF0YSh0aGlzLmltYWdlRGF0YV8sMCwwKTtyZXR1cm4gY2FudmFzO319O3JldHVybntQaWN0dXJlQXNJbWFnZURhdGEsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2MnLGZ1bmN0aW9uKCl7Y29uc3QgY29udmVydGVkTmFtZUNhY2hlPXt9O2Z1bmN0aW9uIGNvbnZlcnROYW1lVG9KU0NvbnZlbnRpb24obmFtZSl7aWYobmFtZSBpbiBjb252ZXJ0ZWROYW1lQ2FjaGUpe3JldHVybiBjb252ZXJ0ZWROYW1lQ2FjaGVbbmFtZV07fQotaWYobmFtZVswXT09PSdfJ3x8bmFtZVtuYW1lLmxlbmd0aC0xXT09PSdfJyl7Y29udmVydGVkTmFtZUNhY2hlW25hbWVdPW5hbWU7cmV0dXJuIG5hbWU7fQotY29uc3Qgd29yZHM9bmFtZS5zcGxpdCgnXycpO2lmKHdvcmRzLmxlbmd0aD09PTEpe2NvbnZlcnRlZE5hbWVDYWNoZVtuYW1lXT13b3Jkc1swXTtyZXR1cm4gd29yZHNbMF07fQotZm9yKGxldCBpPTE7aTx3b3Jkcy5sZW5ndGg7aSsrKXt3b3Jkc1tpXT13b3Jkc1tpXVswXS50b1VwcGVyQ2FzZSgpK3dvcmRzW2ldLnN1YnN0cmluZygxKTt9Ci1jb252ZXJ0ZWROYW1lQ2FjaGVbbmFtZV09d29yZHMuam9pbignJyk7cmV0dXJuIGNvbnZlcnRlZE5hbWVDYWNoZVtuYW1lXTt9Ci1mdW5jdGlvbiBtb3ZlUmVxdWlyZWRGaWVsZHNGcm9tQXJnc1RvVG9wbGV2ZWwob2JqZWN0LGZpZWxkcyl7Zm9yKGxldCBpPTA7aTxmaWVsZHMubGVuZ3RoO2krKyl7Y29uc3Qga2V5PWZpZWxkc1tpXTtpZihvYmplY3QuYXJnc1trZXldPT09dW5kZWZpbmVkKXt0aHJvdyBFcnJvcignRXhwZWN0ZWQgZmllbGQgJytrZXkrJyBub3QgZm91bmQgaW4gYXJncycpO30KLWlmKG9iamVjdFtrZXldIT09dW5kZWZpbmVkKXt0aHJvdyBFcnJvcignRmllbGQgJytrZXkrJyBhbHJlYWR5IGluIG9iamVjdCcpO30KLW9iamVjdFtrZXldPW9iamVjdC5hcmdzW2tleV07ZGVsZXRlIG9iamVjdC5hcmdzW2tleV07fX0KLWZ1bmN0aW9uIG1vdmVPcHRpb25hbEZpZWxkc0Zyb21BcmdzVG9Ub3BsZXZlbChvYmplY3QsZmllbGRzKXtmb3IobGV0IGk9MDtpPGZpZWxkcy5sZW5ndGg7aSsrKXtjb25zdCBrZXk9ZmllbGRzW2ldO2lmKG9iamVjdC5hcmdzW2tleV09PT11bmRlZmluZWQpY29udGludWU7aWYob2JqZWN0W2tleV0hPT11bmRlZmluZWQpe3Rocm93IEVycm9yKCdGaWVsZCAnK2tleSsnIGFscmVhZHkgaW4gb2JqZWN0Jyk7fQotb2JqZWN0W2tleV09b2JqZWN0LmFyZ3Nba2V5XTtkZWxldGUgb2JqZWN0LmFyZ3Nba2V5XTt9fQotZnVuY3Rpb24gcHJlSW5pdGlhbGl6ZU9iamVjdChvYmplY3Qpe3ByZUluaXRpYWxpemVPYmplY3RJbm5lcihvYmplY3QuYXJncyxmYWxzZSk7fQotZnVuY3Rpb24gcHJlSW5pdGlhbGl6ZU9iamVjdElubmVyKG9iamVjdCxoYXNSZWN1cnNlZCl7aWYoIShvYmplY3QgaW5zdGFuY2VvZiBPYmplY3QpKXJldHVybjtpZihvYmplY3QgaW5zdGFuY2VvZiBBcnJheSl7Zm9yKGxldCBpPTA7aTxvYmplY3QubGVuZ3RoO2krKyl7cHJlSW5pdGlhbGl6ZU9iamVjdElubmVyKG9iamVjdFtpXSx0cnVlKTt9Ci1yZXR1cm47fQotaWYoaGFzUmVjdXJzZWQmJihvYmplY3QgaW5zdGFuY2VvZiB0ci5tb2RlbC5PYmplY3RTbmFwc2hvdHx8b2JqZWN0IGluc3RhbmNlb2YgdHIubW9kZWwuT2JqZWN0SW5zdGFuY2UpKXtyZXR1cm47fQotZm9yKGxldCBrZXkgaW4gb2JqZWN0KXtjb25zdCBuZXdLZXk9Y29udmVydE5hbWVUb0pTQ29udmVudGlvbihrZXkpO2lmKG5ld0tleSE9PWtleSl7Y29uc3QgdmFsdWU9b2JqZWN0W2tleV07ZGVsZXRlIG9iamVjdFtrZXldO29iamVjdFtuZXdLZXldPXZhbHVlO2tleT1uZXdLZXk7fQotaWYoL1F1YWQkLy50ZXN0KGtleSkmJiEob2JqZWN0W2tleV1pbnN0YW5jZW9mIHRyLmIubWF0aC5RdWFkKSl7bGV0IHE7dHJ5e3E9dHIuYi5tYXRoLlF1YWQuZnJvbThBcnJheShvYmplY3Rba2V5XSk7fWNhdGNoKGUpe30KLW9iamVjdFtrZXldPXE7Y29udGludWU7fQotaWYoL1JlY3QkLy50ZXN0KGtleSkmJiEob2JqZWN0W2tleV1pbnN0YW5jZW9mIHRyLmIubWF0aC5SZWN0KSl7bGV0IHI7dHJ5e3I9dHIuYi5tYXRoLlJlY3QuZnJvbUFycmF5KG9iamVjdFtrZXldKTt9Y2F0Y2goZSl7fQotb2JqZWN0W2tleV09cjt9Ci1wcmVJbml0aWFsaXplT2JqZWN0SW5uZXIob2JqZWN0W2tleV0sdHJ1ZSk7fX0KLXJldHVybntwcmVJbml0aWFsaXplT2JqZWN0LGNvbnZlcnROYW1lVG9KU0NvbnZlbnRpb24sbW92ZVJlcXVpcmVkRmllbGRzRnJvbUFyZ3NUb1RvcGxldmVsLG1vdmVPcHRpb25hbEZpZWxkc0Zyb21BcmdzVG9Ub3BsZXZlbCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jYycsZnVuY3Rpb24oKXtjb25zdCBPYmplY3RTbmFwc2hvdD10ci5tb2RlbC5PYmplY3RTbmFwc2hvdDtjb25zdCBQaWN0dXJlQ291bnQ9MDtjb25zdCBPUFNfVElNSU5HX0lURVJBVElPTlM9MztmdW5jdGlvbiBQaWN0dXJlKHNrcDY0LGxheWVyUmVjdCl7dGhpcy5za3A2NF89c2twNjQ7dGhpcy5sYXllclJlY3RfPWxheWVyUmVjdDt0aGlzLmd1aWRfPXRyLmIuR1VJRC5hbGxvY2F0ZVNpbXBsZSgpO30KLVBpY3R1cmUucHJvdG90eXBlPXtnZXQgY2FuU2F2ZSgpe3JldHVybiB0cnVlO30sZ2V0IGxheWVyUmVjdCgpe3JldHVybiB0aGlzLmxheWVyUmVjdF87fSxnZXQgZ3VpZCgpe3JldHVybiB0aGlzLmd1aWRfO30sZ2V0QmFzZTY0U2twRGF0YSgpe3JldHVybiB0aGlzLnNrcDY0Xzt9LGdldE9wcygpe2lmKCFQaWN0dXJlU25hcHNob3QuQ2FuR2V0T3BzKCkpe2NvbnNvbGUuZXJyb3IoUGljdHVyZVNuYXBzaG90Lkhvd1RvRW5hYmxlUGljdHVyZURlYnVnZ2luZygpKTtyZXR1cm4gdW5kZWZpbmVkO30KLWNvbnN0IG9wcz13aW5kb3cuY2hyb21lLnNraWFCZW5jaG1hcmtpbmcuZ2V0T3BzKHtza3A2NDp0aGlzLnNrcDY0XyxwYXJhbXM6e2xheWVyX3JlY3Q6dGhpcy5sYXllclJlY3RfLnRvQXJyYXkoKX19KTtpZighb3BzKXtjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IHBpY3R1cmUgb3BzLicpO30KLXJldHVybiBvcHM7fSxnZXRPcFRpbWluZ3MoKXtpZighUGljdHVyZVNuYXBzaG90LkNhbkdldE9wVGltaW5ncygpKXtjb25zb2xlLmVycm9yKFBpY3R1cmVTbmFwc2hvdC5Ib3dUb0VuYWJsZVBpY3R1cmVEZWJ1Z2dpbmcoKSk7cmV0dXJuIHVuZGVmaW5lZDt9Ci1jb25zdCBvcFRpbWluZ3M9d2luZG93LmNocm9tZS5za2lhQmVuY2htYXJraW5nLmdldE9wVGltaW5ncyh7c2twNjQ6dGhpcy5za3A2NF8scGFyYW1zOntsYXllcl9yZWN0OnRoaXMubGF5ZXJSZWN0Xy50b0FycmF5KCl9fSk7aWYoIW9wVGltaW5ncyl7Y29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdldCBwaWN0dXJlIG9wIHRpbWluZ3MuJyk7fQotcmV0dXJuIG9wVGltaW5nczt9LHRhZ09wc1dpdGhUaW1pbmdzKG9wcyl7Y29uc3Qgb3BUaW1pbmdzPVtdO2ZvcihsZXQgaXRlcmF0aW9uPTA7aXRlcmF0aW9uPE9QU19USU1JTkdfSVRFUkFUSU9OUztpdGVyYXRpb24rKyl7b3BUaW1pbmdzW2l0ZXJhdGlvbl09dGhpcy5nZXRPcFRpbWluZ3MoKTtpZighb3BUaW1pbmdzW2l0ZXJhdGlvbl18fCFvcFRpbWluZ3NbaXRlcmF0aW9uXS5jbWRfdGltZXMpe3JldHVybiBvcHM7fQotaWYob3BUaW1pbmdzW2l0ZXJhdGlvbl0uY21kX3RpbWVzLmxlbmd0aCE9PW9wcy5sZW5ndGgpe3JldHVybiBvcHM7fX0KLWZvcihsZXQgb3BJbmRleD0wO29wSW5kZXg8b3BzLmxlbmd0aDtvcEluZGV4Kyspe2xldCBtaW49TnVtYmVyLk1BWF9WQUxVRTtmb3IobGV0IGk9MDtpPE9QU19USU1JTkdfSVRFUkFUSU9OUztpKyspe21pbj1NYXRoLm1pbihtaW4sb3BUaW1pbmdzW2ldLmNtZF90aW1lc1tvcEluZGV4XSk7fQotb3BzW29wSW5kZXhdLmNtZF90aW1lPW1pbjt9Ci1yZXR1cm4gb3BzO30scmFzdGVyaXplKHBhcmFtcyxyYXN0ZXJDb21wbGV0ZUNhbGxiYWNrKXtpZighUGljdHVyZVNuYXBzaG90LkNhblJhc3Rlcml6ZSgpfHwhUGljdHVyZVNuYXBzaG90LkNhbkdldE9wcygpKXtyYXN0ZXJDb21wbGV0ZUNhbGxiYWNrKG5ldyB0ci5lLmNjLlBpY3R1cmVBc0ltYWdlRGF0YSh0aGlzLHRyLmUuY2MuUGljdHVyZVNuYXBzaG90Lkhvd1RvRW5hYmxlUGljdHVyZURlYnVnZ2luZygpKSk7cmV0dXJuO30KLWNvbnN0IHJhc3Rlcj13aW5kb3cuY2hyb21lLnNraWFCZW5jaG1hcmtpbmcucmFzdGVyaXplKHtza3A2NDp0aGlzLnNrcDY0XyxwYXJhbXM6e2xheWVyX3JlY3Q6dGhpcy5sYXllclJlY3RfLnRvQXJyYXkoKX19LHtzdG9wOnBhcmFtcy5zdG9wSW5kZXg9PT11bmRlZmluZWQ/LTE6cGFyYW1zLnN0b3BJbmRleCxvdmVyZHJhdzohIXBhcmFtcy5zaG93T3ZlcmRyYXcscGFyYW1zOnt9fSk7aWYocmFzdGVyKXtjb25zdCBjYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7Y29uc3QgY3R4PWNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO2NhbnZhcy53aWR0aD1yYXN0ZXIud2lkdGg7Y2FudmFzLmhlaWdodD1yYXN0ZXIuaGVpZ2h0O2NvbnN0IGltYWdlRGF0YT1jdHguY3JlYXRlSW1hZ2VEYXRhKHJhc3Rlci53aWR0aCxyYXN0ZXIuaGVpZ2h0KTtpbWFnZURhdGEuZGF0YS5zZXQobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHJhc3Rlci5kYXRhKSk7cmFzdGVyQ29tcGxldGVDYWxsYmFjayhuZXcgdHIuZS5jYy5QaWN0dXJlQXNJbWFnZURhdGEodGhpcyxpbWFnZURhdGEpKTt9ZWxzZXtjb25zdCBlcnJvcj0nRmFpbGVkIHRvIHJhc3Rlcml6ZSBwaWN0dXJlLiAnKydZb3VyIHJlY29yZGluZyBtYXkgYmUgZnJvbSBhbiBvbGQgQ2hyb21lIHZlcnNpb24uICcrJ1RoZSBTa1BpY3R1cmUgZm9ybWF0IGlzIG5vdCBiYWNrd2FyZCBjb21wYXRpYmxlLic7cmFzdGVyQ29tcGxldGVDYWxsYmFjayhuZXcgdHIuZS5jYy5QaWN0dXJlQXNJbWFnZURhdGEodGhpcyxlcnJvcikpO319fTtmdW5jdGlvbiBMYXllcmVkUGljdHVyZShwaWN0dXJlcyl7dGhpcy5ndWlkXz10ci5iLkdVSUQuYWxsb2NhdGVTaW1wbGUoKTt0aGlzLnBpY3R1cmVzXz1waWN0dXJlczt0aGlzLmxheWVyUmVjdF89dW5kZWZpbmVkO30KLUxheWVyZWRQaWN0dXJlLnByb3RvdHlwZT17X19wcm90b19fOlBpY3R1cmUucHJvdG90eXBlLGdldCBjYW5TYXZlKCl7cmV0dXJuIGZhbHNlO30sZ2V0IHR5cGVOYW1lKCl7cmV0dXJuJ2NjOjpMYXllcmVkUGljdHVyZSc7fSxnZXQgbGF5ZXJSZWN0KCl7aWYodGhpcy5sYXllclJlY3RfIT09dW5kZWZpbmVkKXtyZXR1cm4gdGhpcy5sYXllclJlY3RfO30KLXRoaXMubGF5ZXJSZWN0Xz17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfTtmb3IobGV0IGk9MDtpPHRoaXMucGljdHVyZXNfLmxlbmd0aDsrK2kpe2NvbnN0IHJlY3Q9dGhpcy5waWN0dXJlc19baV0ubGF5ZXJSZWN0O3RoaXMubGF5ZXJSZWN0Xy54PU1hdGgubWluKHRoaXMubGF5ZXJSZWN0Xy54LHJlY3QueCk7dGhpcy5sYXllclJlY3RfLnk9TWF0aC5taW4odGhpcy5sYXllclJlY3RfLnkscmVjdC55KTt0aGlzLmxheWVyUmVjdF8ud2lkdGg9TWF0aC5tYXgodGhpcy5sYXllclJlY3RfLndpZHRoLHJlY3QueCtyZWN0LndpZHRoKTt0aGlzLmxheWVyUmVjdF8uaGVpZ2h0PU1hdGgubWF4KHRoaXMubGF5ZXJSZWN0Xy5oZWlnaHQscmVjdC55K3JlY3QuaGVpZ2h0KTt9Ci1yZXR1cm4gdGhpcy5sYXllclJlY3RfO30sZ2V0IGd1aWQoKXtyZXR1cm4gdGhpcy5ndWlkXzt9LGdldEJhc2U2NFNrcERhdGEoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBhdmFpbGFibGUgd2l0aCBhIExheWVyZWRQaWN0dXJlLicpO30sZ2V0T3BzKCl7bGV0IG9wcz1bXTtmb3IobGV0IGk9MDtpPHRoaXMucGljdHVyZXNfLmxlbmd0aDsrK2kpe29wcz1vcHMuY29uY2F0KHRoaXMucGljdHVyZXNfW2ldLmdldE9wcygpKTt9Ci1yZXR1cm4gb3BzO30sZ2V0T3BUaW1pbmdzKCl7Y29uc3Qgb3BUaW1pbmdzPXRoaXMucGljdHVyZXNfWzBdLmdldE9wVGltaW5ncygpO2ZvcihsZXQgaT0xO2k8dGhpcy5waWN0dXJlc18ubGVuZ3RoOysraSl7Y29uc3QgdGltaW5ncz10aGlzLnBpY3R1cmVzX1tpXS5nZXRPcFRpbWluZ3MoKTtvcFRpbWluZ3MuY21kX3RpbWVzPW9wVGltaW5ncy5jbWRfdGltZXMuY29uY2F0KHRpbWluZ3MuY21kX3RpbWVzKTtvcFRpbWluZ3MudG90YWxfdGltZSs9dGltaW5ncy50b3RhbF90aW1lO30KLXJldHVybiBvcFRpbWluZ3M7fSx0YWdPcHNXaXRoVGltaW5ncyhvcHMpe2NvbnN0IG9wVGltaW5ncz1bXTtmb3IobGV0IGl0ZXJhdGlvbj0wO2l0ZXJhdGlvbjxPUFNfVElNSU5HX0lURVJBVElPTlM7aXRlcmF0aW9uKyspe29wVGltaW5nc1tpdGVyYXRpb25dPXRoaXMuZ2V0T3BUaW1pbmdzKCk7aWYoIW9wVGltaW5nc1tpdGVyYXRpb25dfHwhb3BUaW1pbmdzW2l0ZXJhdGlvbl0uY21kX3RpbWVzKXtyZXR1cm4gb3BzO319Ci1mb3IobGV0IG9wSW5kZXg9MDtvcEluZGV4PG9wcy5sZW5ndGg7b3BJbmRleCsrKXtsZXQgbWluPU51bWJlci5NQVhfVkFMVUU7Zm9yKGxldCBpPTA7aTxPUFNfVElNSU5HX0lURVJBVElPTlM7aSsrKXttaW49TWF0aC5taW4obWluLG9wVGltaW5nc1tpXS5jbWRfdGltZXNbb3BJbmRleF0pO30KLW9wc1tvcEluZGV4XS5jbWRfdGltZT1taW47fQotcmV0dXJuIG9wczt9LHJhc3Rlcml6ZShwYXJhbXMscmFzdGVyQ29tcGxldGVDYWxsYmFjayl7dGhpcy5waWN0dXJlc0FzSW1hZ2VEYXRhXz1bXTtjb25zdCByYXN0ZXJDYWxsYmFjaz1mdW5jdGlvbihwaWN0dXJlQXNJbWFnZURhdGEpe3RoaXMucGljdHVyZXNBc0ltYWdlRGF0YV8ucHVzaChwaWN0dXJlQXNJbWFnZURhdGEpO2lmKHRoaXMucGljdHVyZXNBc0ltYWdlRGF0YV8ubGVuZ3RoIT09dGhpcy5waWN0dXJlc18ubGVuZ3RoKXtyZXR1cm47fQotY29uc3QgY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO2NvbnN0IGN0eD1jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtjYW52YXMud2lkdGg9dGhpcy5sYXllclJlY3Qud2lkdGg7Y2FudmFzLmhlaWdodD10aGlzLmxheWVyUmVjdC5oZWlnaHQ7Zm9yKGxldCBpPTA7aTx0aGlzLnBpY3R1cmVzQXNJbWFnZURhdGFfLmxlbmd0aDsrK2kpe2N0eC5wdXRJbWFnZURhdGEodGhpcy5waWN0dXJlc0FzSW1hZ2VEYXRhX1tpXS5pbWFnZURhdGEsdGhpcy5waWN0dXJlc19baV0ubGF5ZXJSZWN0LngsdGhpcy5waWN0dXJlc19baV0ubGF5ZXJSZWN0LnkpO30KLXRoaXMucGljdHVyZXNBc0ltYWdlRGF0YV89W107cmFzdGVyQ29tcGxldGVDYWxsYmFjayhuZXcgdHIuZS5jYy5QaWN0dXJlQXNJbWFnZURhdGEodGhpcyxjdHguZ2V0SW1hZ2VEYXRhKHRoaXMubGF5ZXJSZWN0LngsdGhpcy5sYXllclJlY3QueSx0aGlzLmxheWVyUmVjdC53aWR0aCx0aGlzLmxheWVyUmVjdC5oZWlnaHQpKSk7fS5iaW5kKHRoaXMpO2ZvcihsZXQgaT0wO2k8dGhpcy5waWN0dXJlc18ubGVuZ3RoOysraSl7dGhpcy5waWN0dXJlc19baV0ucmFzdGVyaXplKHBhcmFtcyxyYXN0ZXJDYWxsYmFjayk7fX19O2Z1bmN0aW9uIFBpY3R1cmVTbmFwc2hvdCgpe09iamVjdFNuYXBzaG90LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9Ci1QaWN0dXJlU25hcHNob3QuSGFzU2tpYUJlbmNobWFya2luZz1mdW5jdGlvbigpe3JldHVybiB0ci5pc0V4cG9ydGVkKCdjaHJvbWUuc2tpYUJlbmNobWFya2luZycpO307UGljdHVyZVNuYXBzaG90LkNhblJhc3Rlcml6ZT1mdW5jdGlvbigpe2lmKCFQaWN0dXJlU25hcHNob3QuSGFzU2tpYUJlbmNobWFya2luZygpKXtyZXR1cm4gZmFsc2U7fQotaWYoIXdpbmRvdy5jaHJvbWUuc2tpYUJlbmNobWFya2luZy5yYXN0ZXJpemUpe3JldHVybiBmYWxzZTt9Ci1yZXR1cm4gdHJ1ZTt9O1BpY3R1cmVTbmFwc2hvdC5DYW5HZXRPcHM9ZnVuY3Rpb24oKXtpZighUGljdHVyZVNuYXBzaG90Lkhhc1NraWFCZW5jaG1hcmtpbmcoKSl7cmV0dXJuIGZhbHNlO30KLWlmKCF3aW5kb3cuY2hyb21lLnNraWFCZW5jaG1hcmtpbmcuZ2V0T3BzKXtyZXR1cm4gZmFsc2U7fQotcmV0dXJuIHRydWU7fTtQaWN0dXJlU25hcHNob3QuQ2FuR2V0T3BUaW1pbmdzPWZ1bmN0aW9uKCl7aWYoIVBpY3R1cmVTbmFwc2hvdC5IYXNTa2lhQmVuY2htYXJraW5nKCkpe3JldHVybiBmYWxzZTt9Ci1pZighd2luZG93LmNocm9tZS5za2lhQmVuY2htYXJraW5nLmdldE9wVGltaW5ncyl7cmV0dXJuIGZhbHNlO30KLXJldHVybiB0cnVlO307UGljdHVyZVNuYXBzaG90LkNhbkdldEluZm89ZnVuY3Rpb24oKXtpZighUGljdHVyZVNuYXBzaG90Lkhhc1NraWFCZW5jaG1hcmtpbmcoKSl7cmV0dXJuIGZhbHNlO30KLWlmKCF3aW5kb3cuY2hyb21lLnNraWFCZW5jaG1hcmtpbmcuZ2V0SW5mbyl7cmV0dXJuIGZhbHNlO30KLXJldHVybiB0cnVlO307UGljdHVyZVNuYXBzaG90Lkhvd1RvRW5hYmxlUGljdHVyZURlYnVnZ2luZz1mdW5jdGlvbigpe2lmKHRyLmlzSGVhZGxlc3Mpe3JldHVybidQaWN0dXJlcyBvbmx5IHdvcmsgaW4gY2hyb21lJzt9Ci1jb25zdCB1c3VhbFJlYXNvbj1bJ0ZvciBwaWN0dXJlcyB0byBzaG93IHVwLCB5b3UgbmVlZCB0byBoYXZlIENocm9tZSBydW5uaW5nIHdpdGggJywnLS1lbmFibGUtc2tpYS1iZW5jaG1hcmtpbmcuIFBsZWFzZSByZXN0YXJ0IGNocm9tZSB3aXRoIHRoaXMgZmxhZyAnLCdhbmQgdHJ5IGFnYWluLiddLmpvaW4oJycpO2lmKCF0ci5pc0V4cG9ydGVkKCdnbG9iYWwuY2hyb21lLnNraWFCZW5jaG1hcmtpbmcnKSl7cmV0dXJuIHVzdWFsUmVhc29uO30KLWlmKCFnbG9iYWwuY2hyb21lLnNraWFCZW5jaG1hcmtpbmcucmFzdGVyaXplKXtyZXR1cm4nWW91ciBjaHJvbWUgaXMgb2xkJzt9Ci1pZighZ2xvYmFsLmNocm9tZS5za2lhQmVuY2htYXJraW5nLmdldE9wcyl7cmV0dXJuJ1lvdXIgY2hyb21lIGlzIG9sZDogc2tpYUJlbmNobWFya2luZy5nZXRPcHMgbm90IGZvdW5kJzt9Ci1pZighZ2xvYmFsLmNocm9tZS5za2lhQmVuY2htYXJraW5nLmdldE9wVGltaW5ncyl7cmV0dXJuJ1lvdXIgY2hyb21lIGlzIG9sZDogc2tpYUJlbmNobWFya2luZy5nZXRPcFRpbWluZ3Mgbm90IGZvdW5kJzt9Ci1pZighZ2xvYmFsLmNocm9tZS5za2lhQmVuY2htYXJraW5nLmdldEluZm8pe3JldHVybidZb3VyIGNocm9tZSBpcyBvbGQ6IHNraWFCZW5jaG1hcmtpbmcuZ2V0SW5mbyBub3QgZm91bmQnO30KLXJldHVybidSYXN0ZXJpemluZyBpcyBvbic7fTtQaWN0dXJlU25hcHNob3QucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0U25hcHNob3QucHJvdG90eXBlLHByZUluaXRpYWxpemUoKXt0ci5lLmNjLnByZUluaXRpYWxpemVPYmplY3QodGhpcyk7dGhpcy5yYXN0ZXJSZXN1bHRfPXVuZGVmaW5lZDt9LGluaXRpYWxpemUoKXtpZih0aGlzLmFyZ3MuYWxpYXMpe3RoaXMuYXJncz10aGlzLmFyZ3MuYWxpYXMuYXJnczt9Ci1pZighdGhpcy5hcmdzLnBhcmFtcy5sYXllclJlY3Qpe3Rocm93IG5ldyBFcnJvcignTWlzc2luZyBsYXllciByZWN0Jyk7fQotdGhpcy5sYXllclJlY3RfPXRoaXMuYXJncy5wYXJhbXMubGF5ZXJSZWN0O3RoaXMucGljdHVyZV89bmV3IFBpY3R1cmUodGhpcy5hcmdzLnNrcDY0LHRoaXMuYXJncy5wYXJhbXMubGF5ZXJSZWN0KTt9LHNldCBwaWN0dXJlKHBpY3R1cmUpe3RoaXMucGljdHVyZV89cGljdHVyZTt9LGdldCBjYW5TYXZlKCl7cmV0dXJuIHRoaXMucGljdHVyZV8uY2FuU2F2ZTt9LGdldCBsYXllclJlY3QoKXtyZXR1cm4gdGhpcy5sYXllclJlY3RfP3RoaXMubGF5ZXJSZWN0Xzp0aGlzLnBpY3R1cmVfLmxheWVyUmVjdDt9LGdldCBndWlkKCl7cmV0dXJuIHRoaXMucGljdHVyZV8uZ3VpZDt9LGdldEJhc2U2NFNrcERhdGEoKXtyZXR1cm4gdGhpcy5waWN0dXJlXy5nZXRCYXNlNjRTa3BEYXRhKCk7fSxnZXRPcHMoKXtyZXR1cm4gdGhpcy5waWN0dXJlXy5nZXRPcHMoKTt9LGdldE9wVGltaW5ncygpe3JldHVybiB0aGlzLnBpY3R1cmVfLmdldE9wVGltaW5ncygpO30sdGFnT3BzV2l0aFRpbWluZ3Mob3BzKXtyZXR1cm4gdGhpcy5waWN0dXJlXy50YWdPcHNXaXRoVGltaW5ncyhvcHMpO30scmFzdGVyaXplKHBhcmFtcyxyYXN0ZXJDb21wbGV0ZUNhbGxiYWNrKXt0aGlzLnBpY3R1cmVfLnJhc3Rlcml6ZShwYXJhbXMscmFzdGVyQ29tcGxldGVDYWxsYmFjayk7fX07T2JqZWN0U25hcHNob3Quc3ViVHlwZXMucmVnaXN0ZXIoUGljdHVyZVNuYXBzaG90LHt0eXBlTmFtZXM6WydjYzo6UGljdHVyZSddfSk7cmV0dXJue1BpY3R1cmVTbmFwc2hvdCxQaWN0dXJlLExheWVyZWRQaWN0dXJlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmNjJyxmdW5jdGlvbigpe2NvbnN0IE9iamVjdFNuYXBzaG90PXRyLm1vZGVsLk9iamVjdFNuYXBzaG90O2Z1bmN0aW9uIERpc3BsYXlJdGVtTGlzdChza3A2NCxsYXllclJlY3Qpe3RyLmUuY2MuUGljdHVyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQotRGlzcGxheUl0ZW1MaXN0LnByb3RvdHlwZT17X19wcm90b19fOnRyLmUuY2MuUGljdHVyZS5wcm90b3R5cGV9O2Z1bmN0aW9uIERpc3BsYXlJdGVtTGlzdFNuYXBzaG90KCl7dHIuZS5jYy5QaWN0dXJlU25hcHNob3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO30KLURpc3BsYXlJdGVtTGlzdFNuYXBzaG90LnByb3RvdHlwZT17X19wcm90b19fOnRyLmUuY2MuUGljdHVyZVNuYXBzaG90LnByb3RvdHlwZSxpbml0aWFsaXplKCl7dHIuZS5jYy5QaWN0dXJlU25hcHNob3QucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzKTt0aGlzLmRpc3BsYXlJdGVtc189dGhpcy5hcmdzLnBhcmFtcy5pdGVtczt9LGdldCBpdGVtcygpe3JldHVybiB0aGlzLmRpc3BsYXlJdGVtc187fX07T2JqZWN0U25hcHNob3Quc3ViVHlwZXMucmVnaXN0ZXIoRGlzcGxheUl0ZW1MaXN0U25hcHNob3Qse3R5cGVOYW1lczpbJ2NjOjpEaXNwbGF5SXRlbUxpc3QnXX0pO3JldHVybntEaXNwbGF5SXRlbUxpc3RTbmFwc2hvdCxEaXNwbGF5SXRlbUxpc3QsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmIubWF0aCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBCQm94Migpe3RoaXMuaXNFbXB0eV89dHJ1ZTt0aGlzLm1pbl89dW5kZWZpbmVkO3RoaXMubWF4Xz11bmRlZmluZWQ7fQotQkJveDIucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZSxyZXNldCgpe3RoaXMuaXNFbXB0eV89dHJ1ZTt0aGlzLm1pbl89dW5kZWZpbmVkO3RoaXMubWF4Xz11bmRlZmluZWQ7fSxnZXQgaXNFbXB0eSgpe3JldHVybiB0aGlzLmlzRW1wdHlfO30sYWRkQkJveDIoYmJveDIpe2lmKGJib3gyLmlzRW1wdHkpcmV0dXJuO3RoaXMuYWRkVmVjMihiYm94Mi5taW5fKTt0aGlzLmFkZFZlYzIoYmJveDIubWF4Xyk7fSxjbG9uZSgpe2NvbnN0IGJib3g9bmV3IEJCb3gyKCk7YmJveC5hZGRCQm94Mih0aGlzKTtyZXR1cm4gYmJveDt9LGFkZFhZKHgseSl7aWYodGhpcy5pc0VtcHR5Xyl7dGhpcy5tYXhfPXZlYzIuY3JlYXRlKCk7dGhpcy5taW5fPXZlYzIuY3JlYXRlKCk7dmVjMi5zZXQodGhpcy5tYXhfLHgseSk7dmVjMi5zZXQodGhpcy5taW5fLHgseSk7dGhpcy5pc0VtcHR5Xz1mYWxzZTtyZXR1cm47fQotdGhpcy5tYXhfWzBdPU1hdGgubWF4KHRoaXMubWF4X1swXSx4KTt0aGlzLm1heF9bMV09TWF0aC5tYXgodGhpcy5tYXhfWzFdLHkpO3RoaXMubWluX1swXT1NYXRoLm1pbih0aGlzLm1pbl9bMF0seCk7dGhpcy5taW5fWzFdPU1hdGgubWluKHRoaXMubWluX1sxXSx5KTt9LGFkZFZlYzIodmFsdWUpe2lmKHRoaXMuaXNFbXB0eV8pe3RoaXMubWF4Xz12ZWMyLmNyZWF0ZSgpO3RoaXMubWluXz12ZWMyLmNyZWF0ZSgpO3ZlYzIuc2V0KHRoaXMubWF4Xyx2YWx1ZVswXSx2YWx1ZVsxXSk7dmVjMi5zZXQodGhpcy5taW5fLHZhbHVlWzBdLHZhbHVlWzFdKTt0aGlzLmlzRW1wdHlfPWZhbHNlO3JldHVybjt9Ci10aGlzLm1heF9bMF09TWF0aC5tYXgodGhpcy5tYXhfWzBdLHZhbHVlWzBdKTt0aGlzLm1heF9bMV09TWF0aC5tYXgodGhpcy5tYXhfWzFdLHZhbHVlWzFdKTt0aGlzLm1pbl9bMF09TWF0aC5taW4odGhpcy5taW5fWzBdLHZhbHVlWzBdKTt0aGlzLm1pbl9bMV09TWF0aC5taW4odGhpcy5taW5fWzFdLHZhbHVlWzFdKTt9LGFkZFF1YWQocXVhZCl7dGhpcy5hZGRWZWMyKHF1YWQucDEpO3RoaXMuYWRkVmVjMihxdWFkLnAyKTt0aGlzLmFkZFZlYzIocXVhZC5wMyk7dGhpcy5hZGRWZWMyKHF1YWQucDQpO30sZ2V0IG1pblZlYzIoKXtpZih0aGlzLmlzRW1wdHlfKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMubWluXzt9LGdldCBtYXhWZWMyKCl7aWYodGhpcy5pc0VtcHR5XylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLm1heF87fSxnZXQgc2l6ZUFzVmVjMigpe2lmKHRoaXMuaXNFbXB0eV8pe3Rocm93IG5ldyBFcnJvcignRW1wdHkgQkJveDIgaGFzIG5vIHNpemUnKTt9Ci1jb25zdCBzaXplPXZlYzIuY3JlYXRlKCk7dmVjMi5zdWJ0cmFjdChzaXplLHRoaXMubWF4Xyx0aGlzLm1pbl8pO3JldHVybiBzaXplO30sZ2V0IHNpemUoKXtpZih0aGlzLmlzRW1wdHlfKXt0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IEJCb3gyIGhhcyBubyBzaXplJyk7fQotcmV0dXJue3dpZHRoOnRoaXMubWF4X1swXS10aGlzLm1pbl9bMF0saGVpZ2h0OnRoaXMubWF4X1sxXS10aGlzLm1pbl9bMV19O30sZ2V0IHdpZHRoKCl7aWYodGhpcy5pc0VtcHR5Xyl7dGhyb3cgbmV3IEVycm9yKCdFbXB0eSBCQm94MiBoYXMgbm8gd2lkdGgnKTt9Ci1yZXR1cm4gdGhpcy5tYXhfWzBdLXRoaXMubWluX1swXTt9LGdldCBoZWlnaHQoKXtpZih0aGlzLmlzRW1wdHlfKXt0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IEJCb3gyIGhhcyBubyB3aWR0aCcpO30KLXJldHVybiB0aGlzLm1heF9bMV0tdGhpcy5taW5fWzFdO30sdG9TdHJpbmcoKXtpZih0aGlzLmlzRW1wdHlfKXJldHVybidlbXB0eSc7cmV0dXJuJ21pbj0oJyt0aGlzLm1pbl9bMF0rJywnK3RoaXMubWluX1sxXSsnKSAnKydtYXg9KCcrdGhpcy5tYXhfWzBdKycsJyt0aGlzLm1heF9bMV0rJyknO30sYXNSZWN0KCl7cmV0dXJuIHRyLmIubWF0aC5SZWN0LmZyb21YWVdIKHRoaXMubWluX1swXSx0aGlzLm1pbl9bMV0sdGhpcy5tYXhfWzBdLXRoaXMubWluX1swXSx0aGlzLm1heF9bMV0tdGhpcy5taW5fWzFdKTt9fTtyZXR1cm57QkJveDIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2MnLGZ1bmN0aW9uKCl7Y29uc3QgY29uc3RhbnRzPXt9O2NvbnN0YW50cy5BQ1RJVkVfVFJFRT0wO2NvbnN0YW50cy5QRU5ESU5HX1RSRUU9MTtjb25zdGFudHMuSElHSF9QUklPUklUWV9CSU49MDtjb25zdGFudHMuTE9XX1BSSU9SSVRZX0JJTj0xO2NvbnN0YW50cy5TRU5EX0JFR0lOX0ZSQU1FX0VWRU5UPSdUaHJlYWRQcm94eTo6U2NoZWR1bGVkQWN0aW9uU2VuZEJlZ2luTWFpbkZyYW1lJztjb25zdGFudHMuQkVHSU5fTUFJTl9GUkFNRV9FVkVOVD0nVGhyZWFkUHJveHk6OkJlZ2luTWFpbkZyYW1lJztyZXR1cm57Y29uc3RhbnRzfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2MnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUmVnaW9uKCl7dGhpcy5yZWN0cz1bXTt9Ci1SZWdpb24uZnJvbUFycmF5PWZ1bmN0aW9uKGFycmF5KXtpZihhcnJheS5sZW5ndGglNCE9PTApe3Rocm93IG5ldyBFcnJvcignQXJyYXkgbXVzdCBjb25zaXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBpbiBsZW5ndGgnKTt9Ci1jb25zdCByPW5ldyBSZWdpb24oKTtmb3IobGV0IGk9MDtpPGFycmF5Lmxlbmd0aDtpKz00KXtyLnJlY3RzLnB1c2godHIuYi5tYXRoLlJlY3QuZnJvbVhZV0goYXJyYXlbaV0sYXJyYXlbaSsxXSxhcnJheVtpKzJdLGFycmF5W2krM10pKTt9Ci1yZXR1cm4gcjt9O1JlZ2lvbi5mcm9tQXJyYXlPclVuZGVmaW5lZD1mdW5jdGlvbihhcnJheSl7aWYoYXJyYXk9PT11bmRlZmluZWQpcmV0dXJuIG5ldyBSZWdpb24oKTtyZXR1cm4gUmVnaW9uLmZyb21BcnJheShhcnJheSk7fTtSZWdpb24ucHJvdG90eXBlPXtfX3Byb3RvX186UmVnaW9uLnByb3RvdHlwZSxyZWN0SW50ZXJzZWN0cyhyKXtmb3IobGV0IGk9MDtpPHRoaXMucmVjdHMubGVuZ3RoO2krKyl7aWYodGhpcy5yZWN0c1tpXS5pbnRlcnNlY3RzKHIpKXJldHVybiB0cnVlO30KLXJldHVybiBmYWxzZTt9LGFkZFJlY3Qocil7dGhpcy5yZWN0cy5wdXNoKHIpO319O3JldHVybntSZWdpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2MnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gVGlsZUNvdmVyYWdlUmVjdChyZWN0LHRpbGUpe3RoaXMuZ2VvbWV0cnlSZWN0PXJlY3Q7dGhpcy50aWxlPXRpbGU7fQotcmV0dXJue1RpbGVDb3ZlcmFnZVJlY3QsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2MnLGZ1bmN0aW9uKCl7Y29uc3QgY29uc3RhbnRzPXRyLmUuY2MuY29uc3RhbnRzO2NvbnN0IE9iamVjdFNuYXBzaG90PXRyLm1vZGVsLk9iamVjdFNuYXBzaG90O2Z1bmN0aW9uIExheWVySW1wbFNuYXBzaG90KCl7T2JqZWN0U25hcHNob3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO30KLUxheWVySW1wbFNuYXBzaG90LnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdFNuYXBzaG90LnByb3RvdHlwZSxwcmVJbml0aWFsaXplKCl7dHIuZS5jYy5wcmVJbml0aWFsaXplT2JqZWN0KHRoaXMpO3RoaXMubGF5ZXJUcmVlSW1wbF89dW5kZWZpbmVkO3RoaXMucGFyZW50TGF5ZXI9dW5kZWZpbmVkO30saW5pdGlhbGl6ZSgpe3RoaXMuaW52YWxpZGF0aW9uPW5ldyB0ci5lLmNjLlJlZ2lvbigpO3RoaXMuYW5ub3RhdGVkSW52YWxpZGF0aW9uPW5ldyB0ci5lLmNjLlJlZ2lvbigpO3RoaXMudW5yZWNvcmRlZFJlZ2lvbj1uZXcgdHIuZS5jYy5SZWdpb24oKTt0aGlzLnBpY3R1cmVzPVtdO3RyLmUuY2MubW92ZVJlcXVpcmVkRmllbGRzRnJvbUFyZ3NUb1RvcGxldmVsKHRoaXMsWydsYXllcklkJywnbGF5ZXJRdWFkJ10pO3RyLmUuY2MubW92ZU9wdGlvbmFsRmllbGRzRnJvbUFyZ3NUb1RvcGxldmVsKHRoaXMsWydjaGlsZHJlbicsJ21hc2tMYXllcicsJ3JlcGxpY2FMYXllcicsJ2lkZWFsQ29udGVudHNTY2FsZScsJ2dlb21ldHJ5Q29udGVudHNTY2FsZScsJ2xheW91dFJlY3RzJywndXNpbmdHcHVSYXN0ZXJpemF0aW9uJ10pO3RoaXMuZ3B1TWVtb3J5VXNhZ2VJbkJ5dGVzPXRoaXMuYXJncy5ncHVNZW1vcnlVc2FnZTt0aGlzLmJvdW5kcz10ci5iLm1hdGguUmVjdC5mcm9tWFlXSCgwLDAsdGhpcy5hcmdzLmJvdW5kcy53aWR0aCx0aGlzLmFyZ3MuYm91bmRzLmhlaWdodCk7aWYodGhpcy5hcmdzLmFuaW1hdGlvbkJvdW5kcyl7dGhpcy5hbmltYXRpb25Cb3VuZHNSZWN0PXRyLmIubWF0aC5SZWN0LmZyb21YWVdIKHRoaXMuYXJncy5hbmltYXRpb25Cb3VuZHNbMF0sdGhpcy5hcmdzLmFuaW1hdGlvbkJvdW5kc1sxXSx0aGlzLmFyZ3MuYW5pbWF0aW9uQm91bmRzWzNdLHRoaXMuYXJncy5hbmltYXRpb25Cb3VuZHNbNF0pO30KLWlmKHRoaXMuY2hpbGRyZW4pe2ZvcihsZXQgaT0wO2k8dGhpcy5jaGlsZHJlbi5sZW5ndGg7aSsrKXt0aGlzLmNoaWxkcmVuW2ldLnBhcmVudExheWVyPXRoaXM7fX0KLWlmKHRoaXMubWFza0xheWVyKXt0aGlzLm1hc2tMYXllci5wYXJlbnRMYXllcj10aGlzO30KLWlmKHRoaXMucmVwbGljYUxheWVyKXt0aGlzLnJlcGxpY2FMYXllci5wYXJlbnRMYXllcj10aGlzO30KLWlmKCF0aGlzLmdlb21ldHJ5Q29udGVudHNTY2FsZSl7dGhpcy5nZW9tZXRyeUNvbnRlbnRzU2NhbGU9MS4wO30KLWlmKCF0aGlzLmlkZWFsQ29udGVudHNTY2FsZSl7dGhpcy5pZGVhbENvbnRlbnRzU2NhbGU9MS4wO30KLXRoaXMudG91Y2hFdmVudEhhbmRsZXJSZWdpb249dHIuZS5jYy5SZWdpb24uZnJvbUFycmF5T3JVbmRlZmluZWQodGhpcy5hcmdzLnRvdWNoRXZlbnRIYW5kbGVyUmVnaW9uKTt0aGlzLndoZWVsRXZlbnRIYW5kbGVyUmVnaW9uPXRyLmUuY2MuUmVnaW9uLmZyb21BcnJheU9yVW5kZWZpbmVkKHRoaXMuYXJncy53aGVlbEV2ZW50SGFuZGxlclJlZ2lvbik7dGhpcy5ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbj10ci5lLmNjLlJlZ2lvbi5mcm9tQXJyYXlPclVuZGVmaW5lZCh0aGlzLmFyZ3Mubm9uRmFzdFNjcm9sbGFibGVSZWdpb24pO30sZ2V0IGxheWVyVHJlZUltcGwoKXtpZih0aGlzLmxheWVyVHJlZUltcGxfKXtyZXR1cm4gdGhpcy5sYXllclRyZWVJbXBsXzt9Ci1pZih0aGlzLnBhcmVudExheWVyKXtyZXR1cm4gdGhpcy5wYXJlbnRMYXllci5sYXllclRyZWVJbXBsO30KLXJldHVybiB1bmRlZmluZWQ7fSxzZXQgbGF5ZXJUcmVlSW1wbChsYXllclRyZWVJbXBsKXt0aGlzLmxheWVyVHJlZUltcGxfPWxheWVyVHJlZUltcGw7fSxnZXQgYWN0aXZlTGF5ZXIoKXtpZih0aGlzLmxheWVyVHJlZUltcGwud2hpY2hUcmVlPT09Y29uc3RhbnRzLkFDVElWRV9UUkVFKXtyZXR1cm4gdGhpczt9Ci1jb25zdCBhY3RpdmVUcmVlPXRoaXMubGF5ZXJUcmVlSW1wbC5sYXllclRyZWVIb3N0SW1wbC5hY3RpdmVUcmVlO3JldHVybiBhY3RpdmVUcmVlLmZpbmRMYXllcldpdGhJZCh0aGlzLmxheWVySWQpO30sZ2V0IHBlbmRpbmdMYXllcigpe2lmKHRoaXMubGF5ZXJUcmVlSW1wbC53aGljaFRyZWU9PT1jb25zdGFudHMuUEVORElOR19UUkVFKXtyZXR1cm4gdGhpczt9Ci1jb25zdCBwZW5kaW5nVHJlZT10aGlzLmxheWVyVHJlZUltcGwubGF5ZXJUcmVlSG9zdEltcGwucGVuZGluZ1RyZWU7cmV0dXJuIHBlbmRpbmdUcmVlLmZpbmRMYXllcldpdGhJZCh0aGlzLmxheWVySWQpO319O2Z1bmN0aW9uIFBpY3R1cmVMYXllckltcGxTbmFwc2hvdCgpe0xheWVySW1wbFNuYXBzaG90LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9Ci1QaWN0dXJlTGF5ZXJJbXBsU25hcHNob3QucHJvdG90eXBlPXtfX3Byb3RvX186TGF5ZXJJbXBsU25hcHNob3QucHJvdG90eXBlLGluaXRpYWxpemUoKXtMYXllckltcGxTbmFwc2hvdC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMpO2lmKHRoaXMuYXJncy5pbnZhbGlkYXRpb24pe3RoaXMuaW52YWxpZGF0aW9uPXRyLmUuY2MuUmVnaW9uLmZyb21BcnJheSh0aGlzLmFyZ3MuaW52YWxpZGF0aW9uKTtkZWxldGUgdGhpcy5hcmdzLmludmFsaWRhdGlvbjt9Ci1pZih0aGlzLmFyZ3MuYW5ub3RhdGVkSW52YWxpZGF0aW9uUmVjdHMpe3RoaXMuYW5ub3RhdGVkSW52YWxpZGF0aW9uPW5ldyB0ci5lLmNjLlJlZ2lvbigpO2ZvcihsZXQgaT0wO2k8dGhpcy5hcmdzLmFubm90YXRlZEludmFsaWRhdGlvblJlY3RzLmxlbmd0aDsrK2kpe2NvbnN0IGFubm90YXRlZFJlY3Q9dGhpcy5hcmdzLmFubm90YXRlZEludmFsaWRhdGlvblJlY3RzW2ldO2NvbnN0IHJlY3Q9YW5ub3RhdGVkUmVjdC5nZW9tZXRyeVJlY3Q7cmVjdC5yZWFzb249YW5ub3RhdGVkUmVjdC5yZWFzb247dGhpcy5hbm5vdGF0ZWRJbnZhbGlkYXRpb24uYWRkUmVjdChyZWN0KTt9Ci1kZWxldGUgdGhpcy5hcmdzLmFubm90YXRlZEludmFsaWRhdGlvblJlY3RzO30KLWlmKHRoaXMuYXJncy51bnJlY29yZGVkUmVnaW9uKXt0aGlzLnVucmVjb3JkZWRSZWdpb249dHIuZS5jYy5SZWdpb24uZnJvbUFycmF5KHRoaXMuYXJncy51bnJlY29yZGVkUmVnaW9uKTtkZWxldGUgdGhpcy5hcmdzLnVucmVjb3JkZWRSZWdpb247fQotaWYodGhpcy5hcmdzLnBpY3R1cmVzKXt0aGlzLnBpY3R1cmVzPXRoaXMuYXJncy5waWN0dXJlczt0aGlzLnBpY3R1cmVzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS50cy1iLnRzO30pO30KLXRoaXMudGlsZUNvdmVyYWdlUmVjdHM9W107aWYodGhpcy5hcmdzLmNvdmVyYWdlVGlsZXMpe2ZvcihsZXQgaT0wO2k8dGhpcy5hcmdzLmNvdmVyYWdlVGlsZXMubGVuZ3RoOysraSl7Y29uc3QgcmVjdD10aGlzLmFyZ3MuY292ZXJhZ2VUaWxlc1tpXS5nZW9tZXRyeVJlY3Quc2NhbGUodGhpcy5pZGVhbENvbnRlbnRzU2NhbGUpO2NvbnN0IHRpbGU9dGhpcy5hcmdzLmNvdmVyYWdlVGlsZXNbaV0udGlsZTt0aGlzLnRpbGVDb3ZlcmFnZVJlY3RzLnB1c2gobmV3IHRyLmUuY2MuVGlsZUNvdmVyYWdlUmVjdChyZWN0LHRpbGUpKTt9Ci1kZWxldGUgdGhpcy5hcmdzLmNvdmVyYWdlVGlsZXM7fX19O09iamVjdFNuYXBzaG90LnN1YlR5cGVzLnJlZ2lzdGVyKFBpY3R1cmVMYXllckltcGxTbmFwc2hvdCx7dHlwZU5hbWU6J2NjOjpQaWN0dXJlTGF5ZXJJbXBsJ30pO09iamVjdFNuYXBzaG90LnN1YlR5cGVzLnJlZ2lzdGVyKExheWVySW1wbFNuYXBzaG90LHt0eXBlTmFtZXM6WydjYzo6TGF5ZXJJbXBsJywnY2M6OkRlbGVnYXRlZFJlbmRlcmVyTGF5ZXJJbXBsJywnY2M6OkhlYWRzVXBEaXNwbGF5TGF5ZXJJbXBsJywnY2M6OklPU3VyZmFjZUxheWVySW1wbCcsJ2NjOjpOaW5lUGF0Y2hMYXllckltcGwnLCdjYzo6UGljdHVyZUltYWdlTGF5ZXJJbXBsJywnY2M6OlNjcm9sbGJhckxheWVySW1wbCcsJ2NjOjpTb2xpZENvbG9yTGF5ZXJJbXBsJywnY2M6OlNvbGlkQ29sb3JTY3JvbGxiYXJMYXllckltcGwnLCdjYzo6U3VyZmFjZUxheWVySW1wbCcsJ2NjOjpUZXh0dXJlTGF5ZXJJbXBsJywnY2M6OlRpbGVkTGF5ZXJJbXBsJywnY2M6OlZpZGVvTGF5ZXJJbXBsJywnY2M6OlBhaW50ZWRTY3JvbGxiYXJMYXllckltcGwnLCdDbGFua1BhdGNoTGF5ZXInLCdUYWJCb3JkZXJMYXllcicsJ0NvdW50ZXJMYXllciddfSk7cmV0dXJue0xheWVySW1wbFNuYXBzaG90LFBpY3R1cmVMYXllckltcGxTbmFwc2hvdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jYycsZnVuY3Rpb24oKXtjb25zdCBjb25zdGFudHM9dHIuZS5jYy5jb25zdGFudHM7Y29uc3QgT2JqZWN0U25hcHNob3Q9dHIubW9kZWwuT2JqZWN0U25hcHNob3Q7ZnVuY3Rpb24gTGF5ZXJUcmVlSW1wbFNuYXBzaG90KCl7T2JqZWN0U25hcHNob3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO30KLUxheWVyVHJlZUltcGxTbmFwc2hvdC5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3RTbmFwc2hvdC5wcm90b3R5cGUscHJlSW5pdGlhbGl6ZSgpe3RyLmUuY2MucHJlSW5pdGlhbGl6ZU9iamVjdCh0aGlzKTt0aGlzLmxheWVyVHJlZUhvc3RJbXBsPXVuZGVmaW5lZDt0aGlzLndoaWNoVHJlZT11bmRlZmluZWQ7dGhpcy5zb3VyY2VGcmFtZU51bWJlcj11bmRlZmluZWQ7fSxpbml0aWFsaXplKCl7dHIuZS5jYy5tb3ZlUmVxdWlyZWRGaWVsZHNGcm9tQXJnc1RvVG9wbGV2ZWwodGhpcyxbJ3JlbmRlclN1cmZhY2VMYXllckxpc3QnXSk7dHIuZS5jYy5tb3ZlT3B0aW9uYWxGaWVsZHNGcm9tQXJnc1RvVG9wbGV2ZWwodGhpcyxbJ3Jvb3RMYXllcicsJ2xheWVycyddKTtpZih0aGlzLmFyZ3Muc291cmNlRnJhbWVOdW1iZXIpe3RoaXMuc291cmNlRnJhbWVOdW1iZXI9dGhpcy5hcmdzLnNvdXJjZUZyYW1lTnVtYmVyO30KLWlmKHRoaXMucm9vdExheWVyKXt0aGlzLnJvb3RMYXllci5sYXllclRyZWVJbXBsPXRoaXM7fWVsc2V7Zm9yKGxldCBpPTA7aTx0aGlzLmxheWVycy5sZW5ndGg7aSsrKXt0aGlzLmxheWVyc1tpXS5sYXllclRyZWVJbXBsPXRoaXM7fX0KLWlmKHRoaXMuYXJncy5zd2FwUHJvbWlzZVRyYWNlSWRzJiZ0aGlzLmFyZ3Muc3dhcFByb21pc2VUcmFjZUlkcy5sZW5ndGgpe3RoaXMudHJhY2VkSW5wdXRMYXRlbmNpZXM9W107Y29uc3Qgb3duUHJvY2Vzcz10aGlzLm9iamVjdEluc3RhbmNlLnBhcmVudDtjb25zdCBtb2RlbEhlbHBlcj1vd25Qcm9jZXNzLm1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2lmKG1vZGVsSGVscGVyKXt0aGlzLl9pbml0aWFsaXplVHJhY2VkSW5wdXRMYXRlbmNpZXMobW9kZWxIZWxwZXIpO319fSxfaW5pdGlhbGl6ZVRyYWNlZElucHV0TGF0ZW5jaWVzKG1vZGVsSGVscGVyKXtjb25zdCBsYXRlbmN5RXZlbnRzPW1vZGVsSGVscGVyLmJyb3dzZXJIZWxwZXIuZ2V0TGF0ZW5jeUV2ZW50c0luUmFuZ2UobW9kZWxIZWxwZXIubW9kZWwuYm91bmRzKTtsYXRlbmN5RXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2ZvcihsZXQgaT0wO2k8dGhpcy5hcmdzLnN3YXBQcm9taXNlVHJhY2VJZHMubGVuZ3RoO2krKyl7aWYoIWV2ZW50LmFyZ3MuZGF0YXx8IWV2ZW50LmFyZ3MuZGF0YS50cmFjZV9pZCl7Y29udGludWU7fQotaWYocGFyc2VJbnQoZXZlbnQuYXJncy5kYXRhLnRyYWNlX2lkKT09PXRoaXMuYXJncy5zd2FwUHJvbWlzZVRyYWNlSWRzW2ldKXt0aGlzLnRyYWNlZElucHV0TGF0ZW5jaWVzLnB1c2goZXZlbnQpO319fSx0aGlzKTt9LGdldCBoYXNTb3VyY2VGcmFtZUJlZW5EcmF3bkJlZm9yZSgpe2lmKHRoaXMud2hpY2hUcmVlPT09dHIuZS5jYy5jb25zdGFudHMuUEVORElOR19UUkVFKXtyZXR1cm4gZmFsc2U7fQotaWYodGhpcy5zb3VyY2VGcmFtZU51bWJlcj09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgdGhpc0xUSEk9dGhpcy5sYXllclRyZWVIb3N0SW1wbDtjb25zdCB0aGlzTFRISUluZGV4PXRoaXNMVEhJLm9iamVjdEluc3RhbmNlLnNuYXBzaG90cy5pbmRleE9mKHRoaXNMVEhJKTtjb25zdCBwcmV2TFRISUluZGV4PXRoaXNMVEhJSW5kZXgtMTtpZihwcmV2TFRISUluZGV4PDB8fHByZXZMVEhJSW5kZXg+PXRoaXNMVEhJLm9iamVjdEluc3RhbmNlLnNuYXBzaG90cy5sZW5ndGgpe3JldHVybiBmYWxzZTt9Ci1jb25zdCBwcmV2TFRIST10aGlzTFRISS5vYmplY3RJbnN0YW5jZS5zbmFwc2hvdHNbcHJldkxUSElJbmRleF07aWYoIXByZXZMVEhJLmFjdGl2ZVRyZWUpcmV0dXJuIGZhbHNlO2lmKHByZXZMVEhJLmFjdGl2ZVRyZWUuc291cmNlRnJhbWVOdW1iZXI9PT11bmRlZmluZWQpcmV0dXJuO3JldHVybiBwcmV2TFRISS5hY3RpdmVUcmVlLnNvdXJjZUZyYW1lTnVtYmVyPT09dGhpcy5zb3VyY2VGcmFtZU51bWJlcjt9LGdldCBvdGhlclRyZWUoKXtjb25zdCBvdGhlcj10aGlzLndoaWNoVHJlZT09PWNvbnN0YW50cy5BQ1RJVkVfVFJFRT9jb25zdGFudHMuUEVORElOR19UUkVFOmNvbnN0YW50cy5BQ1RJVkVfVFJFRTtyZXR1cm4gdGhpcy5sYXllclRyZWVIb3N0SW1wbC5nZXRUcmVlKG90aGVyKTt9LGdldCBncHVNZW1vcnlVc2FnZUluQnl0ZXMoKXtsZXQgdG90YWxCeXRlcz0wO3RoaXMuaXRlckxheWVycyhmdW5jdGlvbihsYXllcil7aWYobGF5ZXIuZ3B1TWVtb3J5VXNhZ2VJbkJ5dGVzIT09dW5kZWZpbmVkKXt0b3RhbEJ5dGVzKz1sYXllci5ncHVNZW1vcnlVc2FnZUluQnl0ZXM7fX0pO3JldHVybiB0b3RhbEJ5dGVzO30saXRlckxheWVycyhmdW5jLHRoaXNBcmcpe2NvbnN0IHZpc2l0ZWRMYXllcnM9e307ZnVuY3Rpb24gdmlzaXRMYXllcihsYXllcixkZXB0aCxpc01hc2ssaXNSZXBsaWNhKXtpZih2aXNpdGVkTGF5ZXJzW2xheWVyLmxheWVySWRdKXJldHVybjt2aXNpdGVkTGF5ZXJzW2xheWVyLmxheWVySWRdPXRydWU7ZnVuYy5jYWxsKHRoaXNBcmcsbGF5ZXIsZGVwdGgsaXNNYXNrLGlzUmVwbGljYSk7aWYobGF5ZXIuY2hpbGRyZW4pe2ZvcihsZXQgaT0wO2k8bGF5ZXIuY2hpbGRyZW4ubGVuZ3RoO2krKyl7dmlzaXRMYXllcihsYXllci5jaGlsZHJlbltpXSxkZXB0aCsxKTt9fQotaWYobGF5ZXIubWFza0xheWVyKXt2aXNpdExheWVyKGxheWVyLm1hc2tMYXllcixkZXB0aCsxLHRydWUsZmFsc2UpO30KLWlmKGxheWVyLnJlcGxpY2FMYXllcil7dmlzaXRMYXllcihsYXllci5yZXBsaWNhTGF5ZXIsZGVwdGgrMSxmYWxzZSx0cnVlKTt9fQotaWYodGhpcy5yb290TGF5ZXIpe3Zpc2l0TGF5ZXIodGhpcy5yb290TGF5ZXIsMCxmYWxzZSxmYWxzZSk7fWVsc2V7Zm9yKGxldCBpPTA7aTx0aGlzLmxheWVycy5sZW5ndGg7aSsrKXt2aXNpdExheWVyKHRoaXMubGF5ZXJzW2ldLDAsZmFsc2UsZmFsc2UpO319fSxmaW5kTGF5ZXJXaXRoSWQoaWQpe2xldCBmb3VuZExheWVyPXVuZGVmaW5lZDtmdW5jdGlvbiB2aXNpdExheWVyKGxheWVyKXtpZihsYXllci5sYXllcklkPT09aWQpe2ZvdW5kTGF5ZXI9bGF5ZXI7fX0KLXRoaXMuaXRlckxheWVycyh2aXNpdExheWVyKTtyZXR1cm4gZm91bmRMYXllcjt9fTtPYmplY3RTbmFwc2hvdC5zdWJUeXBlcy5yZWdpc3RlcihMYXllclRyZWVJbXBsU25hcHNob3Qse3R5cGVOYW1lOidjYzo6TGF5ZXJUcmVlSW1wbCd9KTtyZXR1cm57TGF5ZXJUcmVlSW1wbFNuYXBzaG90LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmNjJyxmdW5jdGlvbigpe2NvbnN0IGNvbnN0YW50cz10ci5lLmNjLmNvbnN0YW50cztjb25zdCBPYmplY3RTbmFwc2hvdD10ci5tb2RlbC5PYmplY3RTbmFwc2hvdDtjb25zdCBPYmplY3RJbnN0YW5jZT10ci5tb2RlbC5PYmplY3RJbnN0YW5jZTtmdW5jdGlvbiBMYXllclRyZWVIb3N0SW1wbFNuYXBzaG90KCl7T2JqZWN0U25hcHNob3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO30KLUxheWVyVHJlZUhvc3RJbXBsU25hcHNob3QucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0U25hcHNob3QucHJvdG90eXBlLHByZUluaXRpYWxpemUoKXt0ci5lLmNjLnByZUluaXRpYWxpemVPYmplY3QodGhpcyk7fSxpbml0aWFsaXplKCl7dHIuZS5jYy5tb3ZlUmVxdWlyZWRGaWVsZHNGcm9tQXJnc1RvVG9wbGV2ZWwodGhpcyxbJ2RldmljZVZpZXdwb3J0U2l6ZScsJ2FjdGl2ZVRyZWUnXSk7dHIuZS5jYy5tb3ZlT3B0aW9uYWxGaWVsZHNGcm9tQXJnc1RvVG9wbGV2ZWwodGhpcyxbJ3BlbmRpbmdUcmVlJ10pO2lmKHRoaXMuYXJncy5hY3RpdmVUaWxlcyE9PXVuZGVmaW5lZCl7dGhpcy5hY3RpdmVUaWxlcz10aGlzLmFyZ3MuYWN0aXZlVGlsZXM7ZGVsZXRlIHRoaXMuYXJncy5hY3RpdmVUaWxlczt9ZWxzZSBpZih0aGlzLmFyZ3MudGlsZXMhPT11bmRlZmluZWQpe3RoaXMuYWN0aXZlVGlsZXM9dGhpcy5hcmdzLnRpbGVzO2RlbGV0ZSB0aGlzLmFyZ3MudGlsZXM7fQotaWYoIXRoaXMuYWN0aXZlVGlsZXMpe3RoaXMuYWN0aXZlVGlsZXM9W107fQotdGhpcy5hY3RpdmVUcmVlLmxheWVyVHJlZUhvc3RJbXBsPXRoaXM7dGhpcy5hY3RpdmVUcmVlLndoaWNoVHJlZT1jb25zdGFudHMuQUNUSVZFX1RSRUU7aWYodGhpcy5wZW5kaW5nVHJlZSl7dGhpcy5wZW5kaW5nVHJlZS5sYXllclRyZWVIb3N0SW1wbD10aGlzO3RoaXMucGVuZGluZ1RyZWUud2hpY2hUcmVlPWNvbnN0YW50cy5QRU5ESU5HX1RSRUU7fX0sZ2V0Q29udGVudHNTY2FsZU5hbWVzKCl7Y29uc3Qgc2NhbGVzPXt9O2ZvcihsZXQgaT0wO2k8dGhpcy5hY3RpdmVUaWxlcy5sZW5ndGg7KytpKXtjb25zdCB0aWxlPXRoaXMuYWN0aXZlVGlsZXNbaV07c2NhbGVzW3RpbGUuY29udGVudHNTY2FsZV09dGlsZS5yZXNvbHV0aW9uO30KLXJldHVybiBzY2FsZXM7fSxnZXRUcmVlKHdoaWNoVHJlZSl7aWYod2hpY2hUcmVlPT09Y29uc3RhbnRzLkFDVElWRV9UUkVFKXtyZXR1cm4gdGhpcy5hY3RpdmVUcmVlO30KLWlmKHdoaWNoVHJlZT09PWNvbnN0YW50cy5QRU5ESU5HX1RSRUUpe3JldHVybiB0aGlzLnBlbmRpbmdUcmVlO30KLXRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdHJlZSB0eXBlICsgJyt3aGljaFRyZWUpO30sZ2V0IHRpbGVzSGF2ZUdwdU1lbW9yeVVzYWdlSW5mbygpe2lmKHRoaXMudGlsZXNIYXZlR3B1TWVtb3J5VXNhZ2VJbmZvXyE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMudGlsZXNIYXZlR3B1TWVtb3J5VXNhZ2VJbmZvXzt9Ci1mb3IobGV0IGk9MDtpPHRoaXMuYWN0aXZlVGlsZXMubGVuZ3RoO2krKyl7aWYodGhpcy5hY3RpdmVUaWxlc1tpXS5ncHVNZW1vcnlVc2FnZUluQnl0ZXM9PT11bmRlZmluZWQpe2NvbnRpbnVlO30KLXRoaXMudGlsZXNIYXZlR3B1TWVtb3J5VXNhZ2VJbmZvXz10cnVlO3JldHVybiB0cnVlO30KLXRoaXMudGlsZXNIYXZlR3B1TWVtb3J5VXNhZ2VJbmZvXz1mYWxzZTtyZXR1cm4gZmFsc2U7fSxnZXQgZ3B1TWVtb3J5VXNhZ2VJbkJ5dGVzKCl7aWYoIXRoaXMudGlsZXNIYXZlR3B1TWVtb3J5VXNhZ2VJbmZvKXJldHVybjtsZXQgdXNhZ2U9MDtmb3IobGV0IGk9MDtpPHRoaXMuYWN0aXZlVGlsZXMubGVuZ3RoO2krKyl7Y29uc3QgdT10aGlzLmFjdGl2ZVRpbGVzW2ldLmdwdU1lbW9yeVVzYWdlSW5CeXRlcztpZih1IT09dW5kZWZpbmVkKXVzYWdlKz11O30KLXJldHVybiB1c2FnZTt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7bGV0IGZyYW1lTnVtYmVyO2lmKCF0aGlzLmFjdGl2ZVRyZWUpe2ZyYW1lTnVtYmVyPXRoaXMub2JqZWN0SW5zdGFuY2Uuc25hcHNob3RzLmluZGV4T2YodGhpcyk7fWVsc2V7aWYodGhpcy5hY3RpdmVUcmVlLnNvdXJjZUZyYW1lTnVtYmVyPT09dW5kZWZpbmVkKXtmcmFtZU51bWJlcj10aGlzLm9iamVjdEluc3RhbmNlLnNuYXBzaG90cy5pbmRleE9mKHRoaXMpO31lbHNle2ZyYW1lTnVtYmVyPXRoaXMuYWN0aXZlVHJlZS5zb3VyY2VGcmFtZU51bWJlcjt9fQotcmV0dXJuJ2NjOjpMYXllclRyZWVIb3N0SW1wbCBmcmFtZSAnK2ZyYW1lTnVtYmVyO319O09iamVjdFNuYXBzaG90LnN1YlR5cGVzLnJlZ2lzdGVyKExheWVyVHJlZUhvc3RJbXBsU25hcHNob3Qse3R5cGVOYW1lOidjYzo6TGF5ZXJUcmVlSG9zdEltcGwnfSk7ZnVuY3Rpb24gTGF5ZXJUcmVlSG9zdEltcGxJbnN0YW5jZSgpe09iamVjdEluc3RhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmFsbExheWVyc0JCb3hfPXVuZGVmaW5lZDt9Ci1MYXllclRyZWVIb3N0SW1wbEluc3RhbmNlLnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdEluc3RhbmNlLnByb3RvdHlwZSxnZXQgYWxsQ29udGVudHNTY2FsZXMoKXtpZih0aGlzLmFsbENvbnRlbnRzU2NhbGVzXyl7cmV0dXJuIHRoaXMuYWxsQ29udGVudHNTY2FsZXNfO30KLWNvbnN0IHNjYWxlcz17fTtmb3IoY29uc3QgdGlsZUlEIGluIHRoaXMuYWxsVGlsZUhpc3Rvcmllc18pe2NvbnN0IHRpbGVIaXN0b3J5PXRoaXMuYWxsVGlsZUhpc3Rvcmllc19bdGlsZUlEXTtzY2FsZXNbdGlsZUhpc3RvcnkuY29udGVudHNTY2FsZV09dHJ1ZTt9Ci10aGlzLmFsbENvbnRlbnRzU2NhbGVzXz1PYmplY3Qua2V5cyhzY2FsZXMpO3JldHVybiB0aGlzLmFsbENvbnRlbnRzU2NhbGVzXzt9LGdldCBhbGxMYXllcnNCQm94KCl7aWYodGhpcy5hbGxMYXllcnNCQm94Xyl7cmV0dXJuIHRoaXMuYWxsTGF5ZXJzQkJveF87fQotY29uc3QgYmJveD1uZXcgdHIuYi5tYXRoLkJCb3gyKCk7ZnVuY3Rpb24gaGFuZGxlVHJlZSh0cmVlKXt0cmVlLnJlbmRlclN1cmZhY2VMYXllckxpc3QuZm9yRWFjaChmdW5jdGlvbihsYXllcil7YmJveC5hZGRRdWFkKGxheWVyLmxheWVyUXVhZCk7fSk7fQotdGhpcy5zbmFwc2hvdHMuZm9yRWFjaChmdW5jdGlvbihsdGhpKXtoYW5kbGVUcmVlKGx0aGkuYWN0aXZlVHJlZSk7aWYobHRoaS5wZW5kaW5nVHJlZSl7aGFuZGxlVHJlZShsdGhpLnBlbmRpbmdUcmVlKTt9fSk7dGhpcy5hbGxMYXllcnNCQm94Xz1iYm94O3JldHVybiB0aGlzLmFsbExheWVyc0JCb3hfO319O09iamVjdEluc3RhbmNlLnN1YlR5cGVzLnJlZ2lzdGVyKExheWVyVHJlZUhvc3RJbXBsSW5zdGFuY2Use3R5cGVOYW1lOidjYzo6TGF5ZXJUcmVlSG9zdEltcGwnfSk7cmV0dXJue0xheWVyVHJlZUhvc3RJbXBsU25hcHNob3QsTGF5ZXJUcmVlSG9zdEltcGxJbnN0YW5jZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jYycsZnVuY3Rpb24oKXtjb25zdCB0aWxlVHlwZXM9e2hpZ2hSZXM6J2hpZ2hSZXMnLGxvd1JlczonbG93UmVzJyxleHRyYUhpZ2hSZXM6J2V4dHJhSGlnaFJlcycsZXh0cmFMb3dSZXM6J2V4dHJhTG93UmVzJyxtaXNzaW5nOidtaXNzaW5nJyxjdWxsZWQ6J2N1bGxlZCcsc29saWRDb2xvcjonc29saWRDb2xvcicscGljdHVyZToncGljdHVyZScsZGlyZWN0UGljdHVyZTonZGlyZWN0UGljdHVyZScsdW5rbm93bjondW5rbm93bid9O2NvbnN0IHRpbGVCb3JkZXI9e2hpZ2hSZXM6e2NvbG9yOidyZ2JhKDgwLCAyMDAsIDIwMCwgMC43KScsd2lkdGg6MX0sbG93UmVzOntjb2xvcjoncmdiYSgyMTIsIDgzLCAxOTIsIDAuNyknLHdpZHRoOjJ9LGV4dHJhSGlnaFJlczp7Y29sb3I6J3JnYmEoMjM5LCAyMzEsIDIwLCAwLjcpJyx3aWR0aDoyfSxleHRyYUxvd1Jlczp7Y29sb3I6J3JnYmEoOTMsIDE4NiwgMTgsIDAuNyknLHdpZHRoOjJ9LG1pc3Npbmc6e2NvbG9yOidyZ2JhKDI1NSwgMCwgMCwgMC43KScsd2lkdGg6MX0sY3VsbGVkOntjb2xvcjoncmdiYSgxNjAsIDEwMCwgMCwgMC44KScsd2lkdGg6MX0sc29saWRDb2xvcjp7Y29sb3I6J3JnYmEoMTI4LCAxMjgsIDEyOCwgMC43KScsd2lkdGg6MX0scGljdHVyZTp7Y29sb3I6J3JnYmEoNjQsIDY0LCA2NCwgMC43KScsd2lkdGg6MX0sZGlyZWN0UGljdHVyZTp7Y29sb3I6J3JnYmEoMTI3LCAyNTUsIDAsIDEuMCknLHdpZHRoOjF9LHVua25vd246e2NvbG9yOidyZ2JhKDAsIDAsIDAsIDEuMCknLHdpZHRoOjJ9fTtyZXR1cm57dGlsZVR5cGVzLHRpbGVCb3JkZXJ9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jYycsZnVuY3Rpb24oKXtjb25zdCBPYmplY3RTbmFwc2hvdD10ci5tb2RlbC5PYmplY3RTbmFwc2hvdDtmdW5jdGlvbiBUaWxlU25hcHNob3QoKXtPYmplY3RTbmFwc2hvdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQotVGlsZVNuYXBzaG90LnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdFNuYXBzaG90LnByb3RvdHlwZSxwcmVJbml0aWFsaXplKCl7dHIuZS5jYy5wcmVJbml0aWFsaXplT2JqZWN0KHRoaXMpO30saW5pdGlhbGl6ZSgpe3RyLmUuY2MubW92ZU9wdGlvbmFsRmllbGRzRnJvbUFyZ3NUb1RvcGxldmVsKHRoaXMsWydsYXllcklkJywnY29udGVudHNTY2FsZScsJ2NvbnRlbnRSZWN0J10pO2lmKHRoaXMuYXJncy5tYW5hZ2VkU3RhdGUpe3RoaXMucmVzb2x1dGlvbj10aGlzLmFyZ3MubWFuYWdlZFN0YXRlLnJlc29sdXRpb247dGhpcy5pc1NvbGlkQ29sb3I9dGhpcy5hcmdzLm1hbmFnZWRTdGF0ZS5pc1NvbGlkQ29sb3I7dGhpcy5pc1VzaW5nR3B1TWVtb3J5PXRoaXMuYXJncy5tYW5hZ2VkU3RhdGUuaXNVc2luZ0dwdU1lbW9yeTt0aGlzLmhhc1Jlc291cmNlPXRoaXMuYXJncy5tYW5hZ2VkU3RhdGUuaGFzUmVzb3VyY2U7dGhpcy5zY2hlZHVsZWRQcmlvcml0eT10aGlzLmFyZ3Muc2NoZWR1bGVkUHJpb3JpdHk7dGhpcy5ncHVNZW1vcnlVc2FnZUluQnl0ZXM9dGhpcy5hcmdzLmdwdU1lbW9yeVVzYWdlO31lbHNle3RoaXMucmVzb2x1dGlvbj10aGlzLmFyZ3MucmVzb2x1dGlvbjt0aGlzLmlzU29saWRDb2xvcj10aGlzLmFyZ3MuZHJhd0luZm8uaXNTb2xpZENvbG9yO3RoaXMuaXNVc2luZ0dwdU1lbW9yeT10aGlzLmFyZ3MuaXNVc2luZ0dwdU1lbW9yeTt0aGlzLmhhc1Jlc291cmNlPXRoaXMuYXJncy5oYXNSZXNvdXJjZTt0aGlzLnNjaGVkdWxlZFByaW9yaXR5PXRoaXMuYXJncy5zY2hlZHVsZWRQcmlvcml0eTt0aGlzLmdwdU1lbW9yeVVzYWdlSW5CeXRlcz10aGlzLmFyZ3MuZ3B1TWVtb3J5VXNhZ2U7fQotaWYodGhpcy5jb250ZW50UmVjdCl7dGhpcy5sYXllclJlY3Q9dGhpcy5jb250ZW50UmVjdC5zY2FsZSgxLjAvdGhpcy5jb250ZW50c1NjYWxlKTt9Ci1pZih0aGlzLmlzU29saWRDb2xvcil7dGhpcy50eXBlXz10ci5lLmNjLnRpbGVUeXBlcy5zb2xpZENvbG9yO31lbHNlIGlmKCF0aGlzLmhhc1Jlc291cmNlKXt0aGlzLnR5cGVfPXRyLmUuY2MudGlsZVR5cGVzLm1pc3Npbmc7fWVsc2UgaWYodGhpcy5yZXNvbHV0aW9uPT09J0hJR0hfUkVTT0xVVElPTicpe3RoaXMudHlwZV89dHIuZS5jYy50aWxlVHlwZXMuaGlnaFJlczt9ZWxzZSBpZih0aGlzLnJlc29sdXRpb249PT0nTE9XX1JFU09MVVRJT04nKXt0aGlzLnR5cGVfPXRyLmUuY2MudGlsZVR5cGVzLmxvd1Jlczt9ZWxzZXt0aGlzLnR5cGVfPXRyLmUuY2MudGlsZVR5cGVzLnVua25vd247fX0sZ2V0VHlwZUZvckxheWVyKGxheWVyKXtsZXQgdHlwZT10aGlzLnR5cGVfO2lmKHR5cGU9PT10ci5lLmNjLnRpbGVUeXBlcy51bmtub3duKXtpZih0aGlzLmNvbnRlbnRzU2NhbGU8bGF5ZXIuaWRlYWxDb250ZW50c1NjYWxlKXt0eXBlPXRyLmUuY2MudGlsZVR5cGVzLmV4dHJhTG93UmVzO31lbHNlIGlmKHRoaXMuY29udGVudHNTY2FsZT5sYXllci5pZGVhbENvbnRlbnRzU2NhbGUpe3R5cGU9dHIuZS5jYy50aWxlVHlwZXMuZXh0cmFIaWdoUmVzO319Ci1yZXR1cm4gdHlwZTt9fTtPYmplY3RTbmFwc2hvdC5zdWJUeXBlcy5yZWdpc3RlcihUaWxlU25hcHNob3Qse3R5cGVOYW1lOidjYzo6VGlsZSd9KTtyZXR1cm57VGlsZVNuYXBzaG90LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2NvbnN0IExvY2F0aW9uPXRyLm1vZGVsLkxvY2F0aW9uO2Z1bmN0aW9uIFVJU3RhdGUobG9jYXRpb24sc2NhbGVYKXt0aGlzLmxvY2F0aW9uXz1sb2NhdGlvbjt0aGlzLnNjYWxlWF89c2NhbGVYO30KLVVJU3RhdGUuZnJvbVVzZXJGcmllbmRseVN0cmluZz1mdW5jdGlvbihtb2RlbCx2aWV3cG9ydCxzdGF0ZVN0cmluZyl7Y29uc3QgbmF2QnlGaW5kZXJQYXR0ZXJuPS9eKC0/XGQrKFwuXGQrKT8pQCguKyl4KFxkKyhcLlxkKyk/KSQvZztjb25zdCBtYXRjaD1uYXZCeUZpbmRlclBhdHRlcm4uZXhlYyhzdGF0ZVN0cmluZyk7aWYoIW1hdGNoKXJldHVybjtjb25zdCB0aW1lc3RhbXA9cGFyc2VGbG9hdChtYXRjaFsxXSk7Y29uc3Qgc3RhYmxlSWQ9bWF0Y2hbM107Y29uc3Qgc2NhbGVYPXBhcnNlRmxvYXQobWF0Y2hbNF0pO2lmKHNjYWxlWDw9MCl7dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFNjYWxlWCB2YWx1ZSBpbiBVSSBTdGF0ZSBzdHJpbmcuJyk7fQotaWYoIXZpZXdwb3J0LmNvbnRhaW5lclRvVHJhY2tNYXAuZ2V0VHJhY2tCeVN0YWJsZUlkKHN0YWJsZUlkKSl7dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFN0YWJsZUlEIGdpdmVuIGluIFVJIFN0YXRlIFN0cmluZy4nKTt9Ci1jb25zdCBsb2M9dHIubW9kZWwuTG9jYXRpb24uZnJvbVN0YWJsZUlkQW5kVGltZXN0YW1wKHZpZXdwb3J0LHN0YWJsZUlkLHRpbWVzdGFtcCk7cmV0dXJuIG5ldyBVSVN0YXRlKGxvYyxzY2FsZVgpO307VUlTdGF0ZS5wcm90b3R5cGU9e2dldCBsb2NhdGlvbigpe3JldHVybiB0aGlzLmxvY2F0aW9uXzt9LGdldCBzY2FsZVgoKXtyZXR1cm4gdGhpcy5zY2FsZVhfO30sdG9Vc2VyRnJpZW5kbHlTdHJpbmcodmlld3BvcnQpe2NvbnN0IHRpbWVzdGFtcD10aGlzLmxvY2F0aW9uXy54V29ybGQ7Y29uc3Qgc3RhYmxlSWQ9dGhpcy5sb2NhdGlvbl8uZ2V0Q29udGFpbmluZ1RyYWNrKHZpZXdwb3J0KS5ldmVudENvbnRhaW5lci5zdGFibGVJZDtjb25zdCBzY2FsZVg9dGhpcy5zY2FsZVhfO3JldHVybiB0aW1lc3RhbXAudG9GaXhlZCg1KSsnQCcrc3RhYmxlSWQrJ3gnK3NjYWxlWC50b0ZpeGVkKDUpO30sdG9EaWN0KCl7cmV0dXJue2xvY2F0aW9uOnRoaXMubG9jYXRpb25fLnRvRGljdCgpLHNjYWxlWDp0aGlzLnNjYWxlWF99O319O3JldHVybntVSVN0YXRlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2NvbnN0IEV2ZW50U2V0PXRyLm1vZGVsLkV2ZW50U2V0O2NvbnN0IFNlbGVjdGlvblN0YXRlPXRyLm1vZGVsLlNlbGVjdGlvblN0YXRlO2Z1bmN0aW9uIEJydXNoaW5nU3RhdGUoKXt0aGlzLmd1aWRfPXRyLmIuR1VJRC5hbGxvY2F0ZVNpbXBsZSgpO3RoaXMuc2VsZWN0aW9uXz1uZXcgRXZlbnRTZXQoKTt0aGlzLmZpbmRNYXRjaGVzXz1uZXcgRXZlbnRTZXQoKTt0aGlzLmFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHNfPW5ldyBFdmVudFNldCgpO3RoaXMuYW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50c189bmV3IEV2ZW50U2V0KCk7dGhpcy5hcHBsaWVkVG9Nb2RlbF89dW5kZWZpbmVkO3RoaXMudmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZXNfPXt9O30KLUJydXNoaW5nU3RhdGUucHJvdG90eXBlPXtnZXQgZ3VpZCgpe3JldHVybiB0aGlzLmd1aWRfO30sY2xvbmUoKXtjb25zdCB0aGF0PW5ldyBCcnVzaGluZ1N0YXRlKCk7dGhhdC5zZWxlY3Rpb25fPXRoaXMuc2VsZWN0aW9uXzt0aGF0LmZpbmRNYXRjaGVzXz10aGlzLmZpbmRNYXRjaGVzXzt0aGF0LmFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHNfPXRoaXMuYW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50c187dGhhdC5hbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzXz10aGlzLmFuYWx5c2lzTGlua0hvdmVyZWRFdmVudHNfO3RoYXQudmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZXNfPXRoaXMudmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZXNfO3JldHVybiB0aGF0O30sZXF1YWxzKHRoYXQpe2lmKCF0aGlzLnNlbGVjdGlvbl8uZXF1YWxzKHRoYXQuc2VsZWN0aW9uXykpe3JldHVybiBmYWxzZTt9Ci1pZighdGhpcy5maW5kTWF0Y2hlc18uZXF1YWxzKHRoYXQuZmluZE1hdGNoZXNfKSl7cmV0dXJuIGZhbHNlO30KLWlmKCF0aGlzLmFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHNfLmVxdWFscyh0aGF0LmFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHNfKSl7cmV0dXJuIGZhbHNlO30KLWlmKCF0aGlzLmFuYWx5c2lzTGlua0hvdmVyZWRFdmVudHNfLmVxdWFscyh0aGF0LmFuYWx5c2lzTGlua0hvdmVyZWRFdmVudHNfKSl7cmV0dXJuIGZhbHNlO30KLXJldHVybiB0cnVlO30sZ2V0IHNlbGVjdGlvbk9mSW50ZXJlc3QoKXtpZih0aGlzLnNlbGVjdGlvbl8ubGVuZ3RoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25fO30KLWlmKHRoaXMuaGlnaGxpZ2h0Xy5sZW5ndGgpe3JldHVybiB0aGlzLmhpZ2hsaWdodF87fQotaWYodGhpcy5hbmFseXNpc1ZpZXdSZWxhdGVkRXZlbnRzXy5sZW5ndGgpe3JldHVybiB0aGlzLmFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHNfO30KLWlmKHRoaXMuYW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50c18ubGVuZ3RoKXtyZXR1cm4gdGhpcy5hbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzXzt9Ci1yZXR1cm4gdGhpcy5zZWxlY3Rpb25fO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbl87fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7aWYodGhpcy5hcHBsaWVkVG9Nb2RlbF8pe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IG11dGF0ZSB0aGlzIHN0YXRlIHJpZ2h0IG5vdycpO30KLWlmKHNlbGVjdGlvbj09PXVuZGVmaW5lZCl7c2VsZWN0aW9uPW5ldyBFdmVudFNldCgpO30KLXRoaXMuc2VsZWN0aW9uXz1zZWxlY3Rpb247fSxnZXQgZmluZE1hdGNoZXMoKXtyZXR1cm4gdGhpcy5maW5kTWF0Y2hlc187fSxzZXQgZmluZE1hdGNoZXMoZmluZE1hdGNoZXMpe2lmKHRoaXMuYXBwbGllZFRvTW9kZWxfKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtdXRhdGUgdGhpcyBzdGF0ZSByaWdodCBub3cnKTt9Ci1pZihmaW5kTWF0Y2hlcz09PXVuZGVmaW5lZCl7ZmluZE1hdGNoZXM9bmV3IEV2ZW50U2V0KCk7fQotdGhpcy5maW5kTWF0Y2hlc189ZmluZE1hdGNoZXM7fSxnZXQgYW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50cygpe3JldHVybiB0aGlzLmFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHNfO30sc2V0IGFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHMoYW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50cyl7aWYodGhpcy5hcHBsaWVkVG9Nb2RlbF8pe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IG11dGF0ZSB0aGlzIHN0YXRlIHJpZ2h0IG5vdycpO30KLWlmKGFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHM9PT11bmRlZmluZWQpe2FuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHM9bmV3IEV2ZW50U2V0KCk7fQotdGhpcy5hbmFseXNpc1ZpZXdSZWxhdGVkRXZlbnRzXz1hbmFseXNpc1ZpZXdSZWxhdGVkRXZlbnRzO30sZ2V0IGFuYWx5c2lzTGlua0hvdmVyZWRFdmVudHMoKXtyZXR1cm4gdGhpcy5hbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzXzt9LHNldCBhbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzKGFuYWx5c2lzTGlua0hvdmVyZWRFdmVudHMpe2lmKHRoaXMuYXBwbGllZFRvTW9kZWxfKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtdXRhdGUgdGhpcyBzdGF0ZSByaWdodCBub3cnKTt9Ci1pZihhbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzPT09dW5kZWZpbmVkKXthbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzPW5ldyBFdmVudFNldCgpO30KLXRoaXMuYW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50c189YW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50czt9LGdldCBpc0FwcGxpZWRUb01vZGVsKCl7cmV0dXJuIHRoaXMuYXBwbGllZFRvTW9kZWxfIT09dW5kZWZpbmVkO30sZ2V0IHZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGVzKCl7cmV0dXJuIHRoaXMudmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZXNfO30sc2V0IHZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGVzKHZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGVzKXt0aGlzLnZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGVzXz12aWV3U3BlY2lmaWNCcnVzaGluZ1N0YXRlczt9LGdldCBkaW1tZWRFdmVudHNfKCl7Y29uc3QgZGltbWVkRXZlbnRzPW5ldyBFdmVudFNldCgpO2RpbW1lZEV2ZW50cy5hZGRFdmVudFNldCh0aGlzLmZpbmRNYXRjaGVzKTtkaW1tZWRFdmVudHMuYWRkRXZlbnRTZXQodGhpcy5hbmFseXNpc1ZpZXdSZWxhdGVkRXZlbnRzXyk7cmV0dXJuIGRpbW1lZEV2ZW50czt9LGdldCBicmlnaHRlbmVkRXZlbnRzXygpe2NvbnN0IGJyaWdodGVuZWRFdmVudHM9bmV3IEV2ZW50U2V0KCk7YnJpZ2h0ZW5lZEV2ZW50cy5hZGRFdmVudFNldCh0aGlzLnNlbGVjdGlvbl8pO2JyaWdodGVuZWRFdmVudHMuYWRkRXZlbnRTZXQodGhpcy5hbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzXyk7cmV0dXJuIGJyaWdodGVuZWRFdmVudHM7fSxhcHBseVRvRXZlbnRTZWxlY3Rpb25TdGF0ZXMobW9kZWwpe3RoaXMuYXBwbGllZFRvTW9kZWxfPW1vZGVsO2NvbnN0IGRpbW1lZEV2ZW50cz10aGlzLmRpbW1lZEV2ZW50c187aWYobW9kZWwpe2NvbnN0IG5ld0RlZmF1bHRTdGF0ZT0oZGltbWVkRXZlbnRzLmxlbmd0aD9TZWxlY3Rpb25TdGF0ZS5ESU1NRUQwOlNlbGVjdGlvblN0YXRlLk5PTkUpO2NvbnN0IGN1cnJlbnREZWZhdWx0U3RhdGU9dHIuYi5nZXRGaXJzdEVsZW1lbnQobW9kZWwuZ2V0RGVzY2VuZGFudEV2ZW50cygpKS5zZWxlY3Rpb25TdGF0ZTtpZihjdXJyZW50RGVmYXVsdFN0YXRlIT09bmV3RGVmYXVsdFN0YXRlKXtmb3IoY29uc3QgZSBvZiBtb2RlbC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2Uuc2VsZWN0aW9uU3RhdGU9bmV3RGVmYXVsdFN0YXRlO319fQotbGV0IHNjb3JlO2Zvcihjb25zdCBlIG9mIGRpbW1lZEV2ZW50cyl7c2NvcmU9MDtpZih0aGlzLmZpbmRNYXRjaGVzXy5jb250YWlucyhlKSl7c2NvcmUrKzt9Ci1pZih0aGlzLmFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHNfLmNvbnRhaW5zKGUpKXtzY29yZSsrO30KLWUuc2VsZWN0aW9uU3RhdGU9U2VsZWN0aW9uU3RhdGUuZ2V0RnJvbURpbW1pbmdMZXZlbChzY29yZSk7fQotZm9yKGNvbnN0IGUgb2YgdGhpcy5icmlnaHRlbmVkRXZlbnRzXyl7c2NvcmU9MDtpZih0aGlzLnNlbGVjdGlvbl8uY29udGFpbnMoZSkpe3Njb3JlKys7fQotaWYodGhpcy5hbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzXy5jb250YWlucyhlKSl7c2NvcmUrKzt9Ci1lLnNlbGVjdGlvblN0YXRlPVNlbGVjdGlvblN0YXRlLmdldEZyb21CcmlnaHRlbmluZ0xldmVsKHNjb3JlKTt9fSx0cmFuc2Zlck1vZGVsT3duZXJzaGlwVG9DbG9uZSh0aGF0KXtpZighdGhpcy5hcHBsaWVkVG9Nb2RlbF8pe3Rocm93IG5ldyBFcnJvcignTm90IGFwcGxpZWQnKTt9Ci10aGF0LmFwcGxpZWRUb01vZGVsXz10aGlzLmFwcGxpZWRUb01vZGVsXzt0aGlzLmFwcGxpZWRUb01vZGVsXz11bmRlZmluZWQ7fSx1bmFwcGx5RnJvbUV2ZW50U2VsZWN0aW9uU3RhdGVzKCl7aWYoIXRoaXMuYXBwbGllZFRvTW9kZWxfKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBhcHBsaWVkJyk7fQotY29uc3QgbW9kZWw9dGhpcy5hcHBsaWVkVG9Nb2RlbF87dGhpcy5hcHBsaWVkVG9Nb2RlbF89dW5kZWZpbmVkO2NvbnN0IGRpbW1lZEV2ZW50cz10aGlzLmRpbW1lZEV2ZW50c187Y29uc3QgZGVmYXVsdFN0YXRlPShkaW1tZWRFdmVudHMubGVuZ3RoP1NlbGVjdGlvblN0YXRlLkRJTU1FRDA6U2VsZWN0aW9uU3RhdGUuTk9ORSk7Zm9yKGNvbnN0IGUgb2YgdGhpcy5icmlnaHRlbmVkRXZlbnRzXyl7ZS5zZWxlY3Rpb25TdGF0ZT1kZWZhdWx0U3RhdGU7fQotZm9yKGNvbnN0IGUgb2YgZGltbWVkRXZlbnRzKXtlLnNlbGVjdGlvblN0YXRlPWRlZmF1bHRTdGF0ZTt9Ci1yZXR1cm4gZGVmYXVsdFN0YXRlO319O3JldHVybntCcnVzaGluZ1N0YXRlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEFuaW1hdGlvbigpe30KLUFuaW1hdGlvbi5wcm90b3R5cGU9e2NhblRha2VPdmVyRm9yKGV4aXN0aW5nQW5pbWF0aW9uKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sdGFrZU92ZXJGb3IoZXhpc3RpbmdBbmltYXRpb24sbmV3U3RhcnRUaW1lc3RhbXAsdGFyZ2V0KXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sc3RhcnQodGltZXN0YW1wLHRhcmdldCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGRpZFN0b3BFYXJseSh0aW1lc3RhbXAsdGFyZ2V0LHdpbGxCZVRha2VuT3ZlckJ5QW5vdGhlckFuaW1hdGlvbil7fSx0aWNrKHRpbWVzdGFtcCx0YXJnZXQpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fX07cmV0dXJue0FuaW1hdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBBbmltYXRpb25Db250cm9sbGVyKCl7dHIuYi5FdmVudFRhcmdldC5jYWxsKHRoaXMpO3RoaXMudGFyZ2V0Xz11bmRlZmluZWQ7dGhpcy5hY3RpdmVBbmltYXRpb25fPXVuZGVmaW5lZDt0aGlzLnRpY2tTY2hlZHVsZWRfPWZhbHNlO30KLUFuaW1hdGlvbkNvbnRyb2xsZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuYi5FdmVudFRhcmdldC5wcm90b3R5cGUsZ2V0IHRhcmdldCgpe3JldHVybiB0aGlzLnRhcmdldF87fSxzZXQgdGFyZ2V0KHRhcmdldCl7aWYodGhpcy5hY3RpdmVBbmltYXRpb25fKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjaGFuZ2UgdGFyZ2V0IHdoaWxlIGFuaW1hdGlvbiBpcyBydW5uaW5nLicpO30KLWlmKHRhcmdldC5jbG9uZUFuaW1hdGlvblN0YXRlPT09dW5kZWZpbmVkfHx0eXBlb2YgdGFyZ2V0LmNsb25lQW5pbWF0aW9uU3RhdGUhPT0nZnVuY3Rpb24nKXt0aHJvdyBuZXcgRXJyb3IoJ3RhcmdldCBtdXN0IGhhdmUgYSBjbG9uZUFuaW1hdGlvblN0YXRlIGZ1bmN0aW9uJyk7fQotdGhpcy50YXJnZXRfPXRhcmdldDt9LGdldCBhY3RpdmVBbmltYXRpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmVBbmltYXRpb25fO30sZ2V0IGhhc0FjdGl2ZUFuaW1hdGlvbigpe3JldHVybiEhdGhpcy5hY3RpdmVBbmltYXRpb25fO30scXVldWVBbmltYXRpb24oYW5pbWF0aW9uLG9wdF9ub3cpe2lmKHRoaXMudGFyZ2V0Xz09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcXVldWUgYW5pbWF0aW9ucyB3aXRob3V0IGEgdGFyZ2V0Jyk7fQotbGV0IG5vdztpZihvcHRfbm93IT09dW5kZWZpbmVkKXtub3c9b3B0X25vdzt9ZWxzZXtub3c9d2luZG93LnBlcmZvcm1hbmNlLm5vdygpO30KLWlmKHRoaXMuYWN0aXZlQW5pbWF0aW9uXyl7Y29uc3QgZG9uZT10aGlzLmFjdGl2ZUFuaW1hdGlvbl8udGljayhub3csdGhpcy50YXJnZXRfKTtpZihkb25lKXt0aGlzLmFjdGl2ZUFuaW1hdGlvbl89dW5kZWZpbmVkO319Ci1pZih0aGlzLmFjdGl2ZUFuaW1hdGlvbl8pe2lmKGFuaW1hdGlvbi5jYW5UYWtlT3ZlckZvcih0aGlzLmFjdGl2ZUFuaW1hdGlvbl8pKXt0aGlzLmFjdGl2ZUFuaW1hdGlvbl8uZGlkU3RvcEVhcmx5KG5vdyx0aGlzLnRhcmdldF8sdHJ1ZSk7YW5pbWF0aW9uLnRha2VPdmVyRm9yKHRoaXMuYWN0aXZlQW5pbWF0aW9uXyxub3csdGhpcy50YXJnZXRfKTt9ZWxzZXt0aGlzLmFjdGl2ZUFuaW1hdGlvbl8uZGlkU3RvcEVhcmx5KG5vdyx0aGlzLnRhcmdldF8sZmFsc2UpO319Ci10aGlzLmFjdGl2ZUFuaW1hdGlvbl89YW5pbWF0aW9uO3RoaXMuYWN0aXZlQW5pbWF0aW9uXy5zdGFydChub3csdGhpcy50YXJnZXRfKTtpZih0aGlzLnRpY2tTY2hlZHVsZWRfKXJldHVybjt0aGlzLnRpY2tTY2hlZHVsZWRfPXRydWU7dHIuYi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy50aWNrQWN0aXZlQW5pbWF0aW9uXyx0aGlzKTt9LGNhbmNlbEFjdGl2ZUFuaW1hdGlvbihvcHRfbm93KXtpZighdGhpcy5hY3RpdmVBbmltYXRpb25fKXJldHVybjtsZXQgbm93O2lmKG9wdF9ub3chPT11bmRlZmluZWQpe25vdz1vcHRfbm93O31lbHNle25vdz13aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7fQotdGhpcy5hY3RpdmVBbmltYXRpb25fLmRpZFN0b3BFYXJseShub3csdGhpcy50YXJnZXRfLGZhbHNlKTt0aGlzLmFjdGl2ZUFuaW1hdGlvbl89dW5kZWZpbmVkO30sdGlja0FjdGl2ZUFuaW1hdGlvbl8oZnJhbWVCZWdpblRpbWUpe3RoaXMudGlja1NjaGVkdWxlZF89ZmFsc2U7aWYoIXRoaXMuYWN0aXZlQW5pbWF0aW9uXylyZXR1cm47aWYodGhpcy50YXJnZXRfPT09dW5kZWZpbmVkKXt0aGlzLmFjdGl2ZUFuaW1hdGlvbl8uZGlkU3RvcEVhcmx5KGZyYW1lQmVnaW5UaW1lLHRoaXMudGFyZ2V0XyxmYWxzZSk7cmV0dXJuO30KLWNvbnN0IG9sZFRhcmdldFN0YXRlPXRoaXMudGFyZ2V0Xy5jbG9uZUFuaW1hdGlvblN0YXRlKCk7Y29uc3QgZG9uZT10aGlzLmFjdGl2ZUFuaW1hdGlvbl8udGljayhmcmFtZUJlZ2luVGltZSx0aGlzLnRhcmdldF8pO2lmKGRvbmUpe3RoaXMuYWN0aXZlQW5pbWF0aW9uXz11bmRlZmluZWQ7fQotaWYodGhpcy5hY3RpdmVBbmltYXRpb25fKXt0aGlzLnRpY2tTY2hlZHVsZWRfPXRydWU7dHIuYi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy50aWNrQWN0aXZlQW5pbWF0aW9uXyx0aGlzKTt9Ci1pZihvbGRUYXJnZXRTdGF0ZSl7Y29uc3QgZT1uZXcgdHIuYi5FdmVudCgnZGlkdGljaycpO2Uub2xkVGFyZ2V0U3RhdGU9b2xkVGFyZ2V0U3RhdGU7dGhpcy5kaXNwYXRjaEV2ZW50KGUsZmFsc2UsZmFsc2UpO319fTtyZXR1cm57QW5pbWF0aW9uQ29udHJvbGxlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBTZXR0aW5ncygpe3JldHVybiBTZXR0aW5nczt9Ci1pZih0ci5iLnVuaXR0ZXN0JiZ0ci5iLnVuaXR0ZXN0LlRlc3RSdW5uZXIpe3RyLmIudW5pdHRlc3QuVGVzdFJ1bm5lci5hZGRFdmVudExpc3RlbmVyKCd0ci11bml0dGVzdC13aWxsLXJ1bicsZnVuY3Rpb24oKXtpZih0ci5pc0hlYWRsZXNzKXtTZXR0aW5ncy5zZXRBbHRlcm5hdGl2ZVN0b3JhZ2VJbnN0YW5jZShuZXcgSGVhZGxlc3NTdG9yYWdlKCkpO31lbHNle1NldHRpbmdzLnNldEFsdGVybmF0aXZlU3RvcmFnZUluc3RhbmNlKGdsb2JhbC5zZXNzaW9uU3RvcmFnZSk7Z2xvYmFsLnNlc3Npb25TdG9yYWdlLmNsZWFyKCk7fX0pO30KLWZ1bmN0aW9uIFNlc3Npb25TZXR0aW5ncygpe3JldHVybiBTZXNzaW9uU2V0dGluZ3M7fQotZnVuY3Rpb24gQWRkU3RhdGljU3RvcmFnZUZ1bmN0aW9uc1RvQ2xhc3NfKGlucHV0Q2xhc3Msc3RvcmFnZSl7aW5wdXRDbGFzcy5zdG9yYWdlXz1zdG9yYWdlO2lucHV0Q2xhc3MuZ2V0PWZ1bmN0aW9uKGtleSxvcHRfZGVmYXVsdCxvcHRfbmFtZXNwYWNlKXtrZXk9aW5wdXRDbGFzcy5uYW1lc3BhY2VfKGtleSxvcHRfbmFtZXNwYWNlKTtjb25zdCByYXdWYWw9aW5wdXRDbGFzcy5zdG9yYWdlXy5nZXRJdGVtKGtleSk7aWYocmF3VmFsPT09bnVsbHx8cmF3VmFsPT09dW5kZWZpbmVkKXtyZXR1cm4gb3B0X2RlZmF1bHQ7fQotdHJ5e3JldHVybiBKU09OLnBhcnNlKHJhd1ZhbCkudmFsdWU7fWNhdGNoKGUpe2lucHV0Q2xhc3Muc3RvcmFnZV8ucmVtb3ZlSXRlbShrZXkpO3JldHVybiBvcHRfZGVmYXVsdDt9fTtpbnB1dENsYXNzLnNldD1mdW5jdGlvbihrZXksdmFsdWUsb3B0X25hbWVzcGFjZSl7aWYodmFsdWU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignU2V0dGluZ3Muc2V0OiB2YWx1ZSBtdXN0IG5vdCBiZSB1bmRlZmluZWQnKTt9Ci1jb25zdCB2PUpTT04uc3RyaW5naWZ5KHt2YWx1ZX0pO2lucHV0Q2xhc3Muc3RvcmFnZV8uc2V0SXRlbShpbnB1dENsYXNzLm5hbWVzcGFjZV8oa2V5LG9wdF9uYW1lc3BhY2UpLHYpO307aW5wdXRDbGFzcy5rZXlzPWZ1bmN0aW9uKG9wdF9uYW1lc3BhY2Upe2NvbnN0IHJlc3VsdD1bXTtvcHRfbmFtZXNwYWNlPW9wdF9uYW1lc3BhY2V8fCcnO2ZvcihsZXQgaT0wO2k8aW5wdXRDbGFzcy5zdG9yYWdlXy5sZW5ndGg7aSsrKXtjb25zdCBrZXk9aW5wdXRDbGFzcy5zdG9yYWdlXy5rZXkoaSk7aWYoaW5wdXRDbGFzcy5pc25hbWVzcGFjZWRfKGtleSxvcHRfbmFtZXNwYWNlKSl7cmVzdWx0LnB1c2goaW5wdXRDbGFzcy51bm5hbWVzcGFjZV8oa2V5LG9wdF9uYW1lc3BhY2UpKTt9fQotcmV0dXJuIHJlc3VsdDt9O2lucHV0Q2xhc3MuaXNuYW1lc3BhY2VkXz1mdW5jdGlvbihrZXksb3B0X25hbWVzcGFjZSl7cmV0dXJuIGtleS5pbmRleE9mKGlucHV0Q2xhc3Mubm9ybWFsaXplXyhvcHRfbmFtZXNwYWNlKSk9PT0wO307aW5wdXRDbGFzcy5uYW1lc3BhY2VfPWZ1bmN0aW9uKGtleSxvcHRfbmFtZXNwYWNlKXtyZXR1cm4gaW5wdXRDbGFzcy5ub3JtYWxpemVfKG9wdF9uYW1lc3BhY2UpK2tleTt9O2lucHV0Q2xhc3MudW5uYW1lc3BhY2VfPWZ1bmN0aW9uKGtleSxvcHRfbmFtZXNwYWNlKXtyZXR1cm4ga2V5LnJlcGxhY2UoaW5wdXRDbGFzcy5ub3JtYWxpemVfKG9wdF9uYW1lc3BhY2UpLCcnKTt9O2lucHV0Q2xhc3Mubm9ybWFsaXplXz1mdW5jdGlvbihvcHRfbmFtZXNwYWNlKXtyZXR1cm4gaW5wdXRDbGFzcy5OQU1FU1BBQ0UrKG9wdF9uYW1lc3BhY2U/b3B0X25hbWVzcGFjZSsnLic6JycpO307aW5wdXRDbGFzcy5zZXRBbHRlcm5hdGl2ZVN0b3JhZ2VJbnN0YW5jZT1mdW5jdGlvbihpbnN0YW5jZSl7aW5wdXRDbGFzcy5zdG9yYWdlXz1pbnN0YW5jZTt9O2lucHV0Q2xhc3MuZ2V0QWx0ZXJuYXRpdmVTdG9yYWdlSW5zdGFuY2U9ZnVuY3Rpb24oKXtpZighdHIuaXNIZWFkbGVzcyYmaW5wdXRDbGFzcy5zdG9yYWdlXz09PWxvY2FsU3RvcmFnZSl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1yZXR1cm4gaW5wdXRDbGFzcy5zdG9yYWdlXzt9O2lucHV0Q2xhc3MuTkFNRVNQQUNFPSd0cmFjZS12aWV3ZXInO30KLWZ1bmN0aW9uIEhlYWRsZXNzU3RvcmFnZSgpe3RoaXMubGVuZ3RoPTA7dGhpcy5oYXNJdGVtXz17fTt0aGlzLml0ZW1zXz17fTt0aGlzLml0ZW1zQXNBcnJheV89dW5kZWZpbmVkO30KLUhlYWRsZXNzU3RvcmFnZS5wcm90b3R5cGU9e2tleShpbmRleCl7cmV0dXJuIHRoaXMuaXRlbXNBc0FycmF5W2luZGV4XTt9LGdldCBpdGVtc0FzQXJyYXkoKXtpZih0aGlzLml0ZW1zQXNBcnJheV8hPT11bmRlZmluZWQpe3JldHVybiB0aGlzLml0ZW1zQXNBcnJheV87fQotY29uc3QgaXRlbXNBc0FycmF5PVtdO2Zvcihjb25zdCBrIGluIHRoaXMuaXRlbXNfKXtpdGVtc0FzQXJyYXkucHVzaChrKTt9Ci10aGlzLml0ZW1zQXNBcnJheV89aXRlbXNBc0FycmF5O3JldHVybiB0aGlzLml0ZW1zQXNBcnJheV87fSxnZXRJdGVtKGtleSl7aWYoIXRoaXMuaGFzSXRlbV9ba2V5XSl7cmV0dXJuIG51bGw7fQotcmV0dXJuIHRoaXMuaXRlbXNfW2tleV07fSxyZW1vdmVJdGVtKGtleSl7aWYoIXRoaXMuaGFzSXRlbV9ba2V5XSl7cmV0dXJuO30KLWNvbnN0IHZhbHVlPXRoaXMuaXRlbXNfW2tleV07ZGVsZXRlIHRoaXMuaGFzSXRlbV9ba2V5XTtkZWxldGUgdGhpcy5pdGVtc19ba2V5XTt0aGlzLmxlbmd0aC0tO3RoaXMuaXRlbXNBc0FycmF5Xz11bmRlZmluZWQ7cmV0dXJuIHZhbHVlO30sc2V0SXRlbShrZXksdmFsdWUpe2lmKHRoaXMuaGFzSXRlbV9ba2V5XSl7dGhpcy5pdGVtc19ba2V5XT12YWx1ZTtyZXR1cm47fQotdGhpcy5pdGVtc19ba2V5XT12YWx1ZTt0aGlzLmhhc0l0ZW1fW2tleV09dHJ1ZTt0aGlzLmxlbmd0aCsrO3RoaXMuaXRlbXNBc0FycmF5Xz11bmRlZmluZWQ7cmV0dXJuIHZhbHVlO319O2lmKHRyLmlzSGVhZGxlc3Mpe0FkZFN0YXRpY1N0b3JhZ2VGdW5jdGlvbnNUb0NsYXNzXyhTZXR0aW5ncyxuZXcgSGVhZGxlc3NTdG9yYWdlKCkpO0FkZFN0YXRpY1N0b3JhZ2VGdW5jdGlvbnNUb0NsYXNzXyhTZXNzaW9uU2V0dGluZ3MsbmV3IEhlYWRsZXNzU3RvcmFnZSgpKTt9ZWxzZXtBZGRTdGF0aWNTdG9yYWdlRnVuY3Rpb25zVG9DbGFzc18oU2V0dGluZ3MsbG9jYWxTdG9yYWdlKTtBZGRTdGF0aWNTdG9yYWdlRnVuY3Rpb25zVG9DbGFzc18oU2Vzc2lvblNldHRpbmdzLHNlc3Npb25TdG9yYWdlKTt9Ci1yZXR1cm57U2V0dGluZ3MsU2Vzc2lvblNldHRpbmdzLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGNyZWF0ZVNwYW4ob3B0X2RpY3Rpb25hcnkpe2xldCBvd25lckRvY3VtZW50PWRvY3VtZW50O2lmKG9wdF9kaWN0aW9uYXJ5JiZvcHRfZGljdGlvbmFyeS5vd25lckRvY3VtZW50KXtvd25lckRvY3VtZW50PW9wdF9kaWN0aW9uYXJ5Lm93bmVyRG9jdW1lbnQ7fQotY29uc3Qgc3BhbkVsPW93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO2lmKG9wdF9kaWN0aW9uYXJ5KXtpZihvcHRfZGljdGlvbmFyeS5jbGFzc05hbWUpe3NwYW5FbC5jbGFzc05hbWU9b3B0X2RpY3Rpb25hcnkuY2xhc3NOYW1lO30KLWlmKG9wdF9kaWN0aW9uYXJ5LnRleHRDb250ZW50KXtQb2x5bWVyLmRvbShzcGFuRWwpLnRleHRDb250ZW50PW9wdF9kaWN0aW9uYXJ5LnRleHRDb250ZW50O30KLWlmKG9wdF9kaWN0aW9uYXJ5LnRvb2x0aXApe3NwYW5FbC50aXRsZT1vcHRfZGljdGlvbmFyeS50b29sdGlwO30KLWlmKG9wdF9kaWN0aW9uYXJ5LnBhcmVudCl7UG9seW1lci5kb20ob3B0X2RpY3Rpb25hcnkucGFyZW50KS5hcHBlbmRDaGlsZChzcGFuRWwpO30KLWlmKG9wdF9kaWN0aW9uYXJ5LmJvbGQpe3NwYW5FbC5zdHlsZS5mb250V2VpZ2h0PSdib2xkJzt9Ci1pZihvcHRfZGljdGlvbmFyeS5pdGFsaWMpe3NwYW5FbC5zdHlsZS5mb250U3R5bGU9J2l0YWxpYyc7fQotaWYob3B0X2RpY3Rpb25hcnkubWFyZ2luTGVmdCl7c3BhbkVsLnN0eWxlLm1hcmdpbkxlZnQ9b3B0X2RpY3Rpb25hcnkubWFyZ2luTGVmdDt9Ci1pZihvcHRfZGljdGlvbmFyeS5tYXJnaW5SaWdodCl7c3BhbkVsLnN0eWxlLm1hcmdpblJpZ2h0PW9wdF9kaWN0aW9uYXJ5Lm1hcmdpblJpZ2h0O30KLWlmKG9wdF9kaWN0aW9uYXJ5LmJhY2tncm91bmRDb2xvcil7c3BhbkVsLnN0eWxlLmJhY2tncm91bmRDb2xvcj1vcHRfZGljdGlvbmFyeS5iYWNrZ3JvdW5kQ29sb3I7fQotaWYob3B0X2RpY3Rpb25hcnkuY29sb3Ipe3NwYW5FbC5zdHlsZS5jb2xvcj1vcHRfZGljdGlvbmFyeS5jb2xvcjt9fQotcmV0dXJuIHNwYW5FbDt9Ci1mdW5jdGlvbiBjcmVhdGVMaW5rKG9wdF9hcmdzKXtsZXQgb3duZXJEb2N1bWVudD1kb2N1bWVudDtpZihvcHRfYXJncyYmb3B0X2FyZ3Mub3duZXJEb2N1bWVudCl7b3duZXJEb2N1bWVudD1vcHRfYXJncy5vd25lckRvY3VtZW50O30KLWNvbnN0IGxpbmtFbD1vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtpZihvcHRfYXJncyl7aWYob3B0X2FyZ3MuaHJlZilsaW5rRWwuaHJlZj1vcHRfYXJncy5ocmVmO2lmKG9wdF9hcmdzLnRvb2x0aXApbGlua0VsLnRpdGxlPW9wdF9hcmdzLnRvb2x0aXA7aWYob3B0X2FyZ3MuY29sb3IpbGlua0VsLnN0eWxlLmNvbG9yPW9wdF9hcmdzLmNvbG9yO2lmKG9wdF9hcmdzLmJvbGQpbGlua0VsLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnO2lmKG9wdF9hcmdzLml0YWxpYylsaW5rRWwuc3R5bGUuZm9udFN0eWxlPSdpdGFsaWMnO2lmKG9wdF9hcmdzLmNsYXNzTmFtZSlsaW5rRWwuY2xhc3NOYW1lPW9wdF9hcmdzLmNsYXNzTmFtZTtpZihvcHRfYXJncy5wYXJlbnQpUG9seW1lci5kb20ob3B0X2FyZ3MucGFyZW50KS5hcHBlbmRDaGlsZChsaW5rRWwpO2lmKG9wdF9hcmdzLm1hcmdpbkxlZnQpbGlua0VsLnN0eWxlLm1hcmdpbkxlZnQ9b3B0X2FyZ3MubWFyZ2luTGVmdDtpZihvcHRfYXJncy5tYXJnaW5SaWdodClsaW5rRWwuc3R5bGUubWFyZ2luUmlnaHQ9b3B0X2FyZ3MubWFyZ2luUmlnaHQ7aWYob3B0X2FyZ3MuYmFja2dyb3VuZENvbG9yKXtsaW5rRWwuc3R5bGUuYmFja2dyb3VuZENvbG9yPW9wdF9hcmdzLmJhY2tncm91bmRDb2xvcjt9Ci1pZihvcHRfYXJncy50ZXh0Q29udGVudCl7UG9seW1lci5kb20obGlua0VsKS50ZXh0Q29udGVudD1vcHRfYXJncy50ZXh0Q29udGVudDt9fQotcmV0dXJuIGxpbmtFbDt9Ci1mdW5jdGlvbiBjcmVhdGVEaXYob3B0X2RpY3Rpb25hcnkpe2NvbnN0IGRpdkVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2lmKG9wdF9kaWN0aW9uYXJ5KXtpZihvcHRfZGljdGlvbmFyeS5jbGFzc05hbWUpe2RpdkVsLmNsYXNzTmFtZT1vcHRfZGljdGlvbmFyeS5jbGFzc05hbWU7fQotaWYob3B0X2RpY3Rpb25hcnkucGFyZW50KXtQb2x5bWVyLmRvbShvcHRfZGljdGlvbmFyeS5wYXJlbnQpLmFwcGVuZENoaWxkKGRpdkVsKTt9Ci1pZihvcHRfZGljdGlvbmFyeS50ZXh0Q29udGVudCl7UG9seW1lci5kb20oZGl2RWwpLnRleHRDb250ZW50PW9wdF9kaWN0aW9uYXJ5LnRleHRDb250ZW50O30KLWlmKG9wdF9kaWN0aW9uYXJ5Lm1heFdpZHRoKXtkaXZFbC5zdHlsZS5tYXhXaWR0aD1vcHRfZGljdGlvbmFyeS5tYXhXaWR0aDt9fQotcmV0dXJuIGRpdkVsO30KLWZ1bmN0aW9uIGNyZWF0ZVNjb3BlZFN0eWxlKHN0eWxlQ29udGVudCl7Y29uc3Qgc3R5bGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO3N0eWxlRWwuc2NvcGVkPXRydWU7UG9seW1lci5kb20oc3R5bGVFbCkuaW5uZXJIVE1MPXN0eWxlQ29udGVudDtyZXR1cm4gc3R5bGVFbDt9Ci1mdW5jdGlvbiB2YWx1ZXNFcXVhbChhLGIpe2lmKGEgaW5zdGFuY2VvZiBBcnJheSYmYiBpbnN0YW5jZW9mIEFycmF5KXtyZXR1cm4gYS5sZW5ndGg9PT1iLmxlbmd0aCYmSlNPTi5zdHJpbmdpZnkoYSk9PT1KU09OLnN0cmluZ2lmeShiKTt9Ci1yZXR1cm4gYT09PWI7fQotZnVuY3Rpb24gY3JlYXRlU2VsZWN0b3IodGFyZ2V0RWwsdGFyZ2V0RWxQcm9wZXJ0eSxzZXR0aW5nc0tleSxkZWZhdWx0VmFsdWUsaXRlbXMsb3B0X25hbWVzcGFjZSl7bGV0IGRlZmF1bHRWYWx1ZUluZGV4O2ZvcihsZXQgaT0wO2k8aXRlbXMubGVuZ3RoO2krKyl7Y29uc3QgaXRlbT1pdGVtc1tpXTtpZih2YWx1ZXNFcXVhbChpdGVtLnZhbHVlLGRlZmF1bHRWYWx1ZSkpe2RlZmF1bHRWYWx1ZUluZGV4PWk7YnJlYWs7fX0KLWlmKGRlZmF1bHRWYWx1ZUluZGV4PT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ2RlZmF1bHRWYWx1ZSBtdXN0IGJlIGluIHRoZSBpdGVtcyBsaXN0Jyk7fQotY29uc3Qgc2VsZWN0b3JFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtzZWxlY3RvckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsb25DaGFuZ2UpO2ZvcihsZXQgaT0wO2k8aXRlbXMubGVuZ3RoO2krKyl7Y29uc3QgaXRlbT1pdGVtc1tpXTtjb25zdCBvcHRpb25FbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtQb2x5bWVyLmRvbShvcHRpb25FbCkudGV4dENvbnRlbnQ9aXRlbS5sYWJlbDtvcHRpb25FbC50YXJnZXRQcm9wZXJ0eVZhbHVlPWl0ZW0udmFsdWU7b3B0aW9uRWwuaXRlbT1pdGVtO1BvbHltZXIuZG9tKHNlbGVjdG9yRWwpLmFwcGVuZENoaWxkKG9wdGlvbkVsKTt9Ci1mdW5jdGlvbiBvbkNoYW5nZShlKXtjb25zdCB2YWx1ZT1zZWxlY3RvckVsLnNlbGVjdGVkT3B0aW9uc1swXS50YXJnZXRQcm9wZXJ0eVZhbHVlO3RyLmIuU2V0dGluZ3Muc2V0KHNldHRpbmdzS2V5LHZhbHVlLG9wdF9uYW1lc3BhY2UpO3RhcmdldEVsW3RhcmdldEVsUHJvcGVydHldPXZhbHVlO30KLWNvbnN0IG9sZFNldHRlcj10YXJnZXRFbC5fX2xvb2t1cFNldHRlcl9fKCdzZWxlY3RlZEluZGV4Jyk7c2VsZWN0b3JFbC5fX2RlZmluZUdldHRlcl9fKCdzZWxlY3RlZFZhbHVlJyxmdW5jdGlvbih2KXtyZXR1cm4gc2VsZWN0b3JFbC5jaGlsZHJlbltzZWxlY3RvckVsLnNlbGVjdGVkSW5kZXhdLnRhcmdldFByb3BlcnR5VmFsdWU7fSk7c2VsZWN0b3JFbC5fX2RlZmluZUdldHRlcl9fKCdzZWxlY3RlZEl0ZW0nLGZ1bmN0aW9uKHYpe3JldHVybiBzZWxlY3RvckVsLmNoaWxkcmVuW3NlbGVjdG9yRWwuc2VsZWN0ZWRJbmRleF0uaXRlbTt9KTtzZWxlY3RvckVsLl9fZGVmaW5lU2V0dGVyX18oJ3NlbGVjdGVkVmFsdWUnLGZ1bmN0aW9uKHYpe2ZvcihsZXQgaT0wO2k8c2VsZWN0b3JFbC5jaGlsZHJlbi5sZW5ndGg7aSsrKXtjb25zdCB2YWx1ZT1zZWxlY3RvckVsLmNoaWxkcmVuW2ldLnRhcmdldFByb3BlcnR5VmFsdWU7aWYodmFsdWVzRXF1YWwodmFsdWUsdikpe2NvbnN0IGNoYW5nZWQ9c2VsZWN0b3JFbC5zZWxlY3RlZEluZGV4IT09aTtpZihjaGFuZ2VkKXtzZWxlY3RvckVsLnNlbGVjdGVkSW5kZXg9aTtvbkNoYW5nZSgpO30KLXJldHVybjt9fQotdGhyb3cgbmV3IEVycm9yKCdOb3QgYSB2YWxpZCB2YWx1ZScpO30pO2NvbnN0IGluaXRpYWxWYWx1ZT10ci5iLlNldHRpbmdzLmdldChzZXR0aW5nc0tleSxkZWZhdWx0VmFsdWUsb3B0X25hbWVzcGFjZSk7bGV0IGRpZFNldD1mYWxzZTtmb3IobGV0IGk9MDtpPHNlbGVjdG9yRWwuY2hpbGRyZW4ubGVuZ3RoO2krKyl7aWYodmFsdWVzRXF1YWwoc2VsZWN0b3JFbC5jaGlsZHJlbltpXS50YXJnZXRQcm9wZXJ0eVZhbHVlLGluaXRpYWxWYWx1ZSkpe2RpZFNldD10cnVlO3RhcmdldEVsW3RhcmdldEVsUHJvcGVydHldPWluaXRpYWxWYWx1ZTtzZWxlY3RvckVsLnNlbGVjdGVkSW5kZXg9aTticmVhazt9fQotaWYoIWRpZFNldCl7c2VsZWN0b3JFbC5zZWxlY3RlZEluZGV4PWRlZmF1bHRWYWx1ZUluZGV4O3RhcmdldEVsW3RhcmdldEVsUHJvcGVydHldPWRlZmF1bHRWYWx1ZTt9Ci1yZXR1cm4gc2VsZWN0b3JFbDt9Ci1mdW5jdGlvbiBjcmVhdGVFZGl0Q2F0ZWdvcnlTcGFuKG9wdGlvbkdyb3VwRWwsdGFyZ2V0RWwpe2NvbnN0IHNwYW5FbD1jcmVhdGVTcGFuKHtjbGFzc05hbWU6J2VkaXQtY2F0ZWdvcmllcyd9KTtQb2x5bWVyLmRvbShzcGFuRWwpLnRleHRDb250ZW50PSdFZGl0IGNhdGVnb3JpZXMnO1BvbHltZXIuZG9tKHNwYW5FbCkuY2xhc3NMaXN0LmFkZCgnbGFiZWxlZC1vcHRpb24nKTtzcGFuRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7dGFyZ2V0RWwub25DbGlja0VkaXRDYXRlZ29yaWVzKCk7fSk7cmV0dXJuIHNwYW5FbDt9Ci1mdW5jdGlvbiBjcmVhdGVPcHRpb25Hcm91cCh0YXJnZXRFbCx0YXJnZXRFbFByb3BlcnR5LHNldHRpbmdzS2V5LGRlZmF1bHRWYWx1ZSxpdGVtcyl7ZnVuY3Rpb24gb25DaGFuZ2UoKXtsZXQgdmFsdWU9W107aWYodGhpcy52YWx1ZS5sZW5ndGgpe3ZhbHVlPXRoaXMudmFsdWUuc3BsaXQoJywnKTt9Ci10ci5iLlNldHRpbmdzLnNldChzZXR0aW5nc0tleSx2YWx1ZSk7dGFyZ2V0RWxbdGFyZ2V0RWxQcm9wZXJ0eV09dmFsdWU7fQotY29uc3Qgb3B0aW9uR3JvdXBFbD1jcmVhdGVTcGFuKHtjbGFzc05hbWU6J2xhYmVsZWQtb3B0aW9uLWdyb3VwJ30pO2NvbnN0IGluaXRpYWxWYWx1ZT10ci5iLlNldHRpbmdzLmdldChzZXR0aW5nc0tleSxkZWZhdWx0VmFsdWUpO2ZvcihsZXQgaT0wO2k8aXRlbXMubGVuZ3RoOysraSl7Y29uc3QgaXRlbT1pdGVtc1tpXTtjb25zdCBpZD0nY2F0ZWdvcnktcHJlc2V0LScraXRlbS5sYWJlbC5yZXBsYWNlKC8gL2csJy0nKTtjb25zdCByYWRpb0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7cmFkaW9FbC50eXBlPSdyYWRpbyc7UG9seW1lci5kb20ocmFkaW9FbCkuc2V0QXR0cmlidXRlKCdpZCcsaWQpO1BvbHltZXIuZG9tKHJhZGlvRWwpLnNldEF0dHJpYnV0ZSgnbmFtZScsJ2NhdGVnb3J5LXByZXNldHMtZ3JvdXAnKTtQb2x5bWVyLmRvbShyYWRpb0VsKS5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJyxpdGVtLnZhbHVlKTtyYWRpb0VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsb25DaGFuZ2UuYmluZChyYWRpb0VsLHRhcmdldEVsLHRhcmdldEVsUHJvcGVydHksc2V0dGluZ3NLZXkpKTtpZih2YWx1ZXNFcXVhbChpbml0aWFsVmFsdWUsaXRlbS52YWx1ZSkpe3JhZGlvRWwuY2hlY2tlZD10cnVlO30KLWNvbnN0IGxhYmVsRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtQb2x5bWVyLmRvbShsYWJlbEVsKS50ZXh0Q29udGVudD1pdGVtLmxhYmVsO1BvbHltZXIuZG9tKGxhYmVsRWwpLnNldEF0dHJpYnV0ZSgnZm9yJyxpZCk7Y29uc3Qgc3BhbkVsPWNyZWF0ZVNwYW4oe2NsYXNzTmFtZTonbGFiZWxlZC1vcHRpb24nfSk7UG9seW1lci5kb20oc3BhbkVsKS5hcHBlbmRDaGlsZChyYWRpb0VsKTtQb2x5bWVyLmRvbShzcGFuRWwpLmFwcGVuZENoaWxkKGxhYmVsRWwpO3NwYW5FbC5fX2RlZmluZVNldHRlcl9fKCdjaGVja2VkJyxmdW5jdGlvbihvcHRfYm9vbCl7Y29uc3QgY2hhbmdlZD1yYWRpb0VsLmNoZWNrZWQhPT0oISFvcHRfYm9vbCk7aWYoIWNoYW5nZWQpcmV0dXJuO3JhZGlvRWwuY2hlY2tlZD0hIW9wdF9ib29sO29uQ2hhbmdlKCk7fSk7c3BhbkVsLl9fZGVmaW5lR2V0dGVyX18oJ2NoZWNrZWQnLGZ1bmN0aW9uKCl7cmV0dXJuIHJhZGlvRWwuY2hlY2tlZDt9KTtQb2x5bWVyLmRvbShvcHRpb25Hcm91cEVsKS5hcHBlbmRDaGlsZChzcGFuRWwpO30KLVBvbHltZXIuZG9tKG9wdGlvbkdyb3VwRWwpLmFwcGVuZENoaWxkKGNyZWF0ZUVkaXRDYXRlZ29yeVNwYW4ob3B0aW9uR3JvdXBFbCx0YXJnZXRFbCkpO2lmKCFpbml0aWFsVmFsdWUubGVuZ3RoKXtQb2x5bWVyLmRvbShvcHRpb25Hcm91cEVsKS5jbGFzc0xpc3QuYWRkKCdjYXRlZ29yaWVzLWV4cGFuZGVkJyk7fQotdGFyZ2V0RWxbdGFyZ2V0RWxQcm9wZXJ0eV09aW5pdGlhbFZhbHVlO3JldHVybiBvcHRpb25Hcm91cEVsO30KLWxldCBuZXh0Q2hlY2tib3hJZD0xO2Z1bmN0aW9uIGNyZWF0ZUNoZWNrQm94KHRhcmdldEVsLHRhcmdldEVsUHJvcGVydHksc2V0dGluZ3NLZXksZGVmYXVsdFZhbHVlLGxhYmVsLG9wdF9jaGFuZ2VDYil7Y29uc3QgYnV0dG9uRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtidXR0b25FbC50eXBlPSdjaGVja2JveCc7bGV0IGluaXRpYWxWYWx1ZT1kZWZhdWx0VmFsdWU7aWYoc2V0dGluZ3NLZXkhPT11bmRlZmluZWQpe2luaXRpYWxWYWx1ZT10ci5iLlNldHRpbmdzLmdldChzZXR0aW5nc0tleSxkZWZhdWx0VmFsdWUpO2J1dHRvbkVsLmNoZWNrZWQ9ISFpbml0aWFsVmFsdWU7fQotaWYodGFyZ2V0RWwpe3RhcmdldEVsW3RhcmdldEVsUHJvcGVydHldPWluaXRpYWxWYWx1ZTt9Ci1mdW5jdGlvbiBvbkNoYW5nZSgpe2lmKHNldHRpbmdzS2V5IT09dW5kZWZpbmVkKXt0ci5iLlNldHRpbmdzLnNldChzZXR0aW5nc0tleSxidXR0b25FbC5jaGVja2VkKTt9Ci1pZih0YXJnZXRFbCl7dGFyZ2V0RWxbdGFyZ2V0RWxQcm9wZXJ0eV09YnV0dG9uRWwuY2hlY2tlZDt9Ci1pZihvcHRfY2hhbmdlQ2Ipe29wdF9jaGFuZ2VDYi5jYWxsKCk7fX0KLWJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsb25DaGFuZ2UpO2NvbnN0IGlkPScjY2hlY2tib3gtJytuZXh0Q2hlY2tib3hJZCsrO2NvbnN0IHNwYW5FbD1jcmVhdGVTcGFuKCk7c3BhbkVsLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3NwYW5FbC5zdHlsZS53aGl0ZVNwYWNlPSdub3dyYXAnO1BvbHltZXIuZG9tKGJ1dHRvbkVsKS5zZXRBdHRyaWJ1dGUoJ2lkJyxpZCk7Y29uc3QgbGFiZWxFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1BvbHltZXIuZG9tKGxhYmVsRWwpLnRleHRDb250ZW50PWxhYmVsO1BvbHltZXIuZG9tKGxhYmVsRWwpLnNldEF0dHJpYnV0ZSgnZm9yJyxpZCk7UG9seW1lci5kb20oc3BhbkVsKS5hcHBlbmRDaGlsZChidXR0b25FbCk7UG9seW1lci5kb20oc3BhbkVsKS5hcHBlbmRDaGlsZChsYWJlbEVsKTtzcGFuRWwuX19kZWZpbmVTZXR0ZXJfXygnY2hlY2tlZCcsZnVuY3Rpb24ob3B0X2Jvb2wpe2NvbnN0IGNoYW5nZWQ9YnV0dG9uRWwuY2hlY2tlZCE9PSghIW9wdF9ib29sKTtpZighY2hhbmdlZClyZXR1cm47YnV0dG9uRWwuY2hlY2tlZD0hIW9wdF9ib29sO29uQ2hhbmdlKCk7fSk7c3BhbkVsLl9fZGVmaW5lR2V0dGVyX18oJ2NoZWNrZWQnLGZ1bmN0aW9uKCl7cmV0dXJuIGJ1dHRvbkVsLmNoZWNrZWQ7fSk7cmV0dXJuIHNwYW5FbDt9Ci1mdW5jdGlvbiBjcmVhdGVCdXR0b24obGFiZWwsb3B0X2NhbGxiYWNrLG9wdF90aGlzKXtjb25zdCBidXR0b25FbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO2J1dHRvbkVsLnR5cGU9J2J1dHRvbic7YnV0dG9uRWwudmFsdWU9bGFiZWw7ZnVuY3Rpb24gb25DbGljaygpe29wdF9jYWxsYmFjay5jYWxsKG9wdF90aGlzfHxidXR0b25FbCk7fQotaWYob3B0X2NhbGxiYWNrKXtidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsb25DbGljayk7fQotcmV0dXJuIGJ1dHRvbkVsO30KLWZ1bmN0aW9uIGNyZWF0ZVRleHRJbnB1dCh0YXJnZXRFbCx0YXJnZXRFbFByb3BlcnR5LHNldHRpbmdzS2V5LGRlZmF1bHRWYWx1ZSl7Y29uc3QgaW5pdGlhbFZhbHVlPXRyLmIuU2V0dGluZ3MuZ2V0KHNldHRpbmdzS2V5LGRlZmF1bHRWYWx1ZSk7Y29uc3QgZWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtlbC50eXBlPSd0ZXh0JztmdW5jdGlvbiBvbkNoYW5nZShlKXt0ci5iLlNldHRpbmdzLnNldChzZXR0aW5nc0tleSxlbC52YWx1ZSk7dGFyZ2V0RWxbdGFyZ2V0RWxQcm9wZXJ0eV09ZWwudmFsdWU7fQotZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLG9uQ2hhbmdlKTtlbC52YWx1ZT1pbml0aWFsVmFsdWU7dGFyZ2V0RWxbdGFyZ2V0RWxQcm9wZXJ0eV09aW5pdGlhbFZhbHVlO3JldHVybiBlbDt9Ci1mdW5jdGlvbiBpc0VsZW1lbnRBdHRhY2hlZFRvRG9jdW1lbnQoZWwpe2xldCBjdXI9ZWw7d2hpbGUoUG9seW1lci5kb20oY3VyKS5wYXJlbnROb2RlKXtjdXI9UG9seW1lci5kb20oY3VyKS5wYXJlbnROb2RlO30KLXJldHVybihjdXI9PT1lbC5vd25lckRvY3VtZW50fHxjdXIubm9kZU5hbWU9PT0nI2RvY3VtZW50LWZyYWdtZW50Jyk7fQotZnVuY3Rpb24gYXNIVE1MT3JUZXh0Tm9kZSh2YWx1ZSxvcHRfb3duZXJEb2N1bWVudCl7aWYodmFsdWUgaW5zdGFuY2VvZiBOb2RlKXtyZXR1cm4gdmFsdWU7fQotY29uc3Qgb3duZXJEb2N1bWVudD1vcHRfb3duZXJEb2N1bWVudHx8ZG9jdW1lbnQ7cmV0dXJuIG93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWUpO30KLXJldHVybntjcmVhdGVTcGFuLGNyZWF0ZUxpbmssY3JlYXRlRGl2LGNyZWF0ZVNjb3BlZFN0eWxlLGNyZWF0ZVNlbGVjdG9yLGNyZWF0ZU9wdGlvbkdyb3VwLGNyZWF0ZUNoZWNrQm94LGNyZWF0ZUJ1dHRvbixjcmVhdGVUZXh0SW5wdXQsaXNFbGVtZW50QXR0YWNoZWRUb0RvY3VtZW50LGFzSFRNTE9yVGV4dE5vZGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgZWxpZGVkVGl0bGVDYWNoZURpY3Q9bmV3IE1hcCgpO2NvbnN0IGVsaWRlZFRpdGxlQ2FjaGU9bmV3IEVsaWRlZFRpdGxlQ2FjaGUoKTtmdW5jdGlvbiBFbGlkZWRUaXRsZUNhY2hlKCl7dGhpcy50ZXh0V2lkdGhNYXA9bmV3IE1hcCgpO30KLUVsaWRlZFRpdGxlQ2FjaGUucHJvdG90eXBlPXtnZXQoY3R4LHBpeFdpZHRoLHRpdGxlLHdpZHRoLHNsaWNlRHVyYXRpb24pe2xldCBlbGlkZWREaWN0PWVsaWRlZFRpdGxlQ2FjaGVEaWN0LmdldCh0aXRsZSk7aWYoIWVsaWRlZERpY3Qpe2VsaWRlZERpY3Q9bmV3IE1hcCgpO2VsaWRlZFRpdGxlQ2FjaGVEaWN0LnNldCh0aXRsZSxlbGlkZWREaWN0KTt9Ci1sZXQgZWxpZGVkRGljdEZvclBpeFdpZHRoPWVsaWRlZERpY3QuZ2V0KHBpeFdpZHRoKTtpZighZWxpZGVkRGljdEZvclBpeFdpZHRoKXtlbGlkZWREaWN0LnNldChwaXhXaWR0aCxuZXcgTWFwKCkpO2VsaWRlZERpY3RGb3JQaXhXaWR0aD1lbGlkZWREaWN0LmdldChwaXhXaWR0aCk7fQotbGV0IHN0cmluZ1dpZHRoUGFpcj1lbGlkZWREaWN0Rm9yUGl4V2lkdGguZ2V0KHNsaWNlRHVyYXRpb24pO2lmKHN0cmluZ1dpZHRoUGFpcj09PXVuZGVmaW5lZCl7bGV0IG5ld3RpdGxlPXRpdGxlO2xldCBlbGlkZWQ9ZmFsc2U7d2hpbGUodGhpcy5sYWJlbFdpZHRoV29ybGQoY3R4LG5ld3RpdGxlLHBpeFdpZHRoKT5zbGljZUR1cmF0aW9uKXtpZihuZXd0aXRsZS5sZW5ndGgqMC43NTwxKWJyZWFrO25ld3RpdGxlPW5ld3RpdGxlLnN1YnN0cmluZygwLG5ld3RpdGxlLmxlbmd0aCowLjc1KTtlbGlkZWQ9dHJ1ZTt9Ci1pZihlbGlkZWQmJm5ld3RpdGxlLmxlbmd0aD4zKXtuZXd0aXRsZT1uZXd0aXRsZS5zdWJzdHJpbmcoMCxuZXd0aXRsZS5sZW5ndGgtMykrJy4uLic7fQotc3RyaW5nV2lkdGhQYWlyPW5ldyBFbGlkZWRTdHJpbmdXaWR0aFBhaXIobmV3dGl0bGUsdGhpcy5sYWJlbFdpZHRoKGN0eCxuZXd0aXRsZSkpO2VsaWRlZERpY3RGb3JQaXhXaWR0aC5zZXQoc2xpY2VEdXJhdGlvbixzdHJpbmdXaWR0aFBhaXIpO30KLXJldHVybiBzdHJpbmdXaWR0aFBhaXI7fSxxdWlja01lYXN1cmVUZXh0XyhjdHgsdGV4dCl7bGV0IHc9dGhpcy50ZXh0V2lkdGhNYXAuZ2V0KHRleHQpO2lmKCF3KXt3PWN0eC5tZWFzdXJlVGV4dCh0ZXh0KS53aWR0aDt0aGlzLnRleHRXaWR0aE1hcC5zZXQodGV4dCx3KTt9Ci1yZXR1cm4gdzt9LGxhYmVsV2lkdGgoY3R4LHRpdGxlKXtyZXR1cm4gdGhpcy5xdWlja01lYXN1cmVUZXh0XyhjdHgsdGl0bGUpKzI7fSxsYWJlbFdpZHRoV29ybGQoY3R4LHRpdGxlLHBpeFdpZHRoKXtyZXR1cm4gdGhpcy5sYWJlbFdpZHRoKGN0eCx0aXRsZSkqcGl4V2lkdGg7fX07ZnVuY3Rpb24gRWxpZGVkU3RyaW5nV2lkdGhQYWlyKHN0cmluZyx3aWR0aCl7dGhpcy5zdHJpbmc9c3RyaW5nO3RoaXMud2lkdGg9d2lkdGg7fQotcmV0dXJue0VsaWRlZFRpdGxlQ2FjaGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBjb2xvcnM9Q29sb3JTY2hlbWUuY29sb3JzO2NvbnN0IGNvbG9yc0FzU3RyaW5ncz1Db2xvclNjaGVtZS5jb2xvcnNBc1N0cmluZ3M7Y29uc3QgU2VsZWN0aW9uU3RhdGU9dHIubW9kZWwuU2VsZWN0aW9uU3RhdGU7Y29uc3QgRXZlbnRQcmVzZW50ZXI9e2dldFNlbGVjdGFibGVJdGVtQ29sb3JBc1N0cmluZyhpdGVtKXtjb25zdCBvZmZzZXQ9dGhpcy5nZXRDb2xvcklkT2Zmc2V0XyhpdGVtKTtjb25zdCBjb2xvcklkPUNvbG9yU2NoZW1lLmdldFZhcmlhbnRDb2xvcklkKGl0ZW0uY29sb3JJZCxvZmZzZXQpO3JldHVybiBjb2xvcnNBc1N0cmluZ3NbY29sb3JJZF07fSxnZXRDb2xvcklkT2Zmc2V0XyhldmVudCl7cmV0dXJuIGV2ZW50LnNlbGVjdGlvblN0YXRlO30sZ2V0VGV4dENvbG9yKGV2ZW50KXtpZihldmVudC5zZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLkRJTU1FRCl7cmV0dXJuJ3JnYig2MCw2MCw2MCknO30KLXJldHVybidyZ2IoMCwwLDApJzt9LGdldFNsaWNlQ29sb3JJZChzbGljZSl7Y29uc3Qgb2Zmc2V0PXRoaXMuZ2V0Q29sb3JJZE9mZnNldF8oc2xpY2UpO3JldHVybiBDb2xvclNjaGVtZS5nZXRWYXJpYW50Q29sb3JJZChzbGljZS5jb2xvcklkLG9mZnNldCk7fSxnZXRTbGljZUFscGhhKHNsaWNlLGFzeW5jKXtsZXQgYWxwaGE9MTtpZihhc3luYyl7YWxwaGEqPTAuMzt9Ci1yZXR1cm4gYWxwaGE7fSxnZXRJbnN0YW50U2xpY2VDb2xvcihpbnN0YW50KXtjb25zdCBvZmZzZXQ9dGhpcy5nZXRDb2xvcklkT2Zmc2V0XyhpbnN0YW50KTtjb25zdCBjb2xvcklkPUNvbG9yU2NoZW1lLmdldFZhcmlhbnRDb2xvcklkKGluc3RhbnQuY29sb3JJZCxvZmZzZXQpO3JldHVybiBjb2xvcnNbY29sb3JJZF0udG9TdHJpbmdXaXRoQWxwaGFPdmVycmlkZSgxLjApO30sZ2V0T2JqZWN0SW5zdGFuY2VDb2xvcihpbnN0YW5jZSl7Y29uc3Qgb2Zmc2V0PXRoaXMuZ2V0Q29sb3JJZE9mZnNldF8oaW5zdGFuY2UpO2NvbnN0IGNvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0VmFyaWFudENvbG9ySWQoaW5zdGFuY2UuY29sb3JJZCxvZmZzZXQpO3JldHVybiBjb2xvcnNbY29sb3JJZF0udG9TdHJpbmdXaXRoQWxwaGFPdmVycmlkZSgwLjI1KTt9LGdldE9iamVjdFNuYXBzaG90Q29sb3Ioc25hcHNob3Qpe2NvbnN0IG9mZnNldD10aGlzLmdldENvbG9ySWRPZmZzZXRfKHNuYXBzaG90KTtsZXQgY29sb3JJZD1zbmFwc2hvdC5vYmplY3RJbnN0YW5jZS5jb2xvcklkO2NvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0VmFyaWFudENvbG9ySWQoY29sb3JJZCxvZmZzZXQpO3JldHVybiBjb2xvcnNbY29sb3JJZF07fSxnZXRDb3VudGVyU2VyaWVzQ29sb3IoY29sb3JJZCxzZWxlY3Rpb25TdGF0ZSxvcHRfYWxwaGFNdWx0aXBsaWVyKXtjb25zdCBldmVudD17c2VsZWN0aW9uU3RhdGV9O2NvbnN0IG9mZnNldD10aGlzLmdldENvbG9ySWRPZmZzZXRfKGV2ZW50KTtjb25zdCBjPWNvbG9yc1tDb2xvclNjaGVtZS5nZXRWYXJpYW50Q29sb3JJZChjb2xvcklkLG9mZnNldCldO3JldHVybiBjLnRvU3RyaW5nV2l0aEFscGhhT3ZlcnJpZGUob3B0X2FscGhhTXVsdGlwbGllciE9PXVuZGVmaW5lZD9vcHRfYWxwaGFNdWx0aXBsaWVyOjEuMCk7fSxnZXRCYXJTbmFwc2hvdENvbG9yKHNuYXBzaG90LG9mZnNldCl7Y29uc3Qgc25hcHNob3RPZmZzZXQ9dGhpcy5nZXRDb2xvcklkT2Zmc2V0XyhzbmFwc2hvdCk7bGV0IGNvbG9ySWQ9c25hcHNob3Qub2JqZWN0SW5zdGFuY2UuY29sb3JJZDtjb2xvcklkPUNvbG9yU2NoZW1lLmdldEFub3RoZXJDb2xvcklkKGNvbG9ySWQsb2Zmc2V0KTtjb2xvcklkPUNvbG9yU2NoZW1lLmdldFZhcmlhbnRDb2xvcklkKGNvbG9ySWQsc25hcHNob3RPZmZzZXQpO3JldHVybiBjb2xvcnNbY29sb3JJZF0udG9TdHJpbmdXaXRoQWxwaGFPdmVycmlkZSgxLjApO319O3JldHVybntFdmVudFByZXNlbnRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBlbGlkZWRUaXRsZUNhY2hlPW5ldyB0ci51aS5iLkVsaWRlZFRpdGxlQ2FjaGUoKTtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IGNvbG9yc0FzU3RyaW5ncz1Db2xvclNjaGVtZS5jb2xvcnNBc1N0cmluZ3M7Y29uc3QgRXZlbnRQcmVzZW50ZXI9dHIudWkuYi5FdmVudFByZXNlbnRlcjtjb25zdCBibGFja0NvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZSgnYmxhY2snKTtjb25zdCBUSElOX1NMSUNFX0hFSUdIVD00O2NvbnN0IFNMSUNFX1dBSVRJTkdfV0lEVEhfRFJBV19USFJFU0hPTEQ9Mztjb25zdCBTTElDRV9BQ1RJVkVfV0lEVEhfRFJBV19USFJFU0hPTEQ9MTtjb25zdCBTSE9VTERfRUxJREVfVEVYVD10cnVlO2Z1bmN0aW9uIGRyYXdMaW5lKGN0eCx4MSx5MSx4Mix5Mil7Y3R4Lm1vdmVUbyh4MSx5MSk7Y3R4LmxpbmVUbyh4Mix5Mik7fQotZnVuY3Rpb24gZHJhd1RyaWFuZ2xlKGN0eCx4MSx5MSx4Mix5Mix4Myx5Myl7Y3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8oeDEseTEpO2N0eC5saW5lVG8oeDIseTIpO2N0eC5saW5lVG8oeDMseTMpO2N0eC5jbG9zZVBhdGgoKTt9Ci1mdW5jdGlvbiBkcmF3QXJyb3coY3R4LHgxLHkxLHgyLHkyLGFycm93TGVuZ3RoLGFycm93V2lkdGgpe2NvbnN0IGR4PXgyLXgxO2NvbnN0IGR5PXkyLXkxO2NvbnN0IGxlbj1NYXRoLnNxcnQoZHgqZHgrZHkqZHkpO2NvbnN0IHBlcmM9KGxlbi1hcnJvd0xlbmd0aCkvbGVuO2NvbnN0IGJ4PXgxK3BlcmMqZHg7Y29uc3QgYnk9eTErcGVyYypkeTtjb25zdCB1eD1keC9sZW47Y29uc3QgdXk9ZHkvbGVuO2NvbnN0IGF4PXV5KmFycm93V2lkdGg7Y29uc3QgYXk9LXV4KmFycm93V2lkdGg7Y3R4LmJlZ2luUGF0aCgpO2RyYXdMaW5lKGN0eCx4MSx5MSx4Mix5Mik7Y3R4LnN0cm9rZSgpO2RyYXdUcmlhbmdsZShjdHgsYngrYXgsYnkrYXkseDIseTIsYngtYXgsYnktYXkpO2N0eC5maWxsKCk7fQotZnVuY3Rpb24gZHJhd1NsaWNlcyhjdHgsZHQsdmlld0xXb3JsZCx2aWV3UldvcmxkLHZpZXdIZWlnaHQsc2xpY2VzLGFzeW5jKXtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IGhlaWdodD12aWV3SGVpZ2h0KnBpeGVsUmF0aW87Y29uc3Qgdmlld0w9ZHQueFdvcmxkVG9WaWV3KHZpZXdMV29ybGQpO2NvbnN0IHZpZXdSPWR0LnhXb3JsZFRvVmlldyh2aWV3UldvcmxkKTtsZXQgZGFya1JlY3RIZWlnaHQ9VEhJTl9TTElDRV9IRUlHSFQqcGl4ZWxSYXRpbztpZihoZWlnaHQ8ZGFya1JlY3RIZWlnaHQpe2RhcmtSZWN0SGVpZ2h0PTA7fQotY29uc3QgbGlnaHRSZWN0SGVpZ2h0PWhlaWdodC1kYXJrUmVjdEhlaWdodDtjdHguc2F2ZSgpO2NvbnN0IHJlY3Q9bmV3IHRyLnVpLmIuRmFzdFJlY3RSZW5kZXJlcihjdHgsdmlld0wsdmlld1IsMiwyLGNvbG9yc0FzU3RyaW5ncyk7cmVjdC5zZXRZYW5kSCgwLGhlaWdodCk7Y29uc3QgbG93U2xpY2U9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHNsaWNlcyxmdW5jdGlvbihzbGljZSl7cmV0dXJuIHNsaWNlLnN0YXJ0K3NsaWNlLmR1cmF0aW9uO30sdmlld0xXb3JsZCk7bGV0IGhhZFRvcExldmVsPWZhbHNlO2ZvcihsZXQgaT1sb3dTbGljZTtpPHNsaWNlcy5sZW5ndGg7KytpKXtjb25zdCBzbGljZT1zbGljZXNbaV07Y29uc3QgeD1zbGljZS5zdGFydDtpZih4PnZpZXdSV29ybGQpYnJlYWs7Y29uc3QgeFZpZXc9ZHQueFdvcmxkVG9WaWV3KHgpO2xldCB3Vmlldz0xO2lmKHNsaWNlLmR1cmF0aW9uPjApe2NvbnN0IHc9TWF0aC5tYXgoc2xpY2UuZHVyYXRpb24sMC4wMDAwMDEpO3dWaWV3PU1hdGgubWF4KGR0LnhXb3JsZFZlY3RvclRvVmlldyh3KSwxKTt9Ci1jb25zdCBjb2xvcklkPUV2ZW50UHJlc2VudGVyLmdldFNsaWNlQ29sb3JJZChzbGljZSk7Y29uc3QgYWxwaGE9RXZlbnRQcmVzZW50ZXIuZ2V0U2xpY2VBbHBoYShzbGljZSxhc3luYyk7Y29uc3QgbGlnaHRBbHBoYT1hbHBoYSowLjcwO2lmKGFzeW5jJiZzbGljZS5pc1RvcExldmVsKXtyZWN0LnNldFlhbmRIKDMsaGVpZ2h0LTMpO2hhZFRvcExldmVsPXRydWU7fWVsc2V7cmVjdC5zZXRZYW5kSCgwLGhlaWdodCk7fQotaWYoIXNsaWNlLmNwdUR1cmF0aW9uKXtyZWN0LmZpbGxSZWN0KHhWaWV3LHdWaWV3LGNvbG9ySWQsYWxwaGEpO2NvbnRpbnVlO30KLWxldCBhY3RpdmVXaWR0aD13Vmlldyooc2xpY2UuY3B1RHVyYXRpb24vc2xpY2UuZHVyYXRpb24pO2xldCB3YWl0aW5nV2lkdGg9d1ZpZXctYWN0aXZlV2lkdGg7aWYoYWN0aXZlV2lkdGg8U0xJQ0VfQUNUSVZFX1dJRFRIX0RSQVdfVEhSRVNIT0xEKXthY3RpdmVXaWR0aD0wO3dhaXRpbmdXaWR0aD13Vmlldzt9Ci1pZih3YWl0aW5nV2lkdGg8U0xJQ0VfV0FJVElOR19XSURUSF9EUkFXX1RIUkVTSE9MRCl7YWN0aXZlV2lkdGg9d1ZpZXc7d2FpdGluZ1dpZHRoPTA7fQotaWYoYWN0aXZlV2lkdGg+MCl7cmVjdC5maWxsUmVjdCh4VmlldyxhY3RpdmVXaWR0aCxjb2xvcklkLGFscGhhKTt9Ci1pZih3YWl0aW5nV2lkdGg+MCl7cmVjdC5zZXRZYW5kSCgwLGxpZ2h0UmVjdEhlaWdodCk7cmVjdC5maWxsUmVjdCh4VmlldythY3RpdmVXaWR0aC0xLHdhaXRpbmdXaWR0aCsxLGNvbG9ySWQsbGlnaHRBbHBoYSk7cmVjdC5zZXRZYW5kSChsaWdodFJlY3RIZWlnaHQsZGFya1JlY3RIZWlnaHQpO3JlY3QuZmlsbFJlY3QoeFZpZXcrYWN0aXZlV2lkdGgtMSx3YWl0aW5nV2lkdGgrMSxjb2xvcklkLGFscGhhKTtyZWN0LnNldFlhbmRIKDAsaGVpZ2h0KTt9fQotcmVjdC5mbHVzaCgpO2lmKGFzeW5jJiZoYWRUb3BMZXZlbCl7cmVjdC5zZXRZYW5kSCgyLDEpO2ZvcihsZXQgaT1sb3dTbGljZTtpPHNsaWNlcy5sZW5ndGg7KytpKXtjb25zdCBzbGljZT1zbGljZXNbaV07Y29uc3QgeD1zbGljZS5zdGFydDtpZih4PnZpZXdSV29ybGQpYnJlYWs7aWYoIXNsaWNlLmlzVG9wTGV2ZWwpY29udGludWU7Y29uc3QgeFZpZXc9ZHQueFdvcmxkVG9WaWV3KHgpO2xldCB3Vmlldz0xO2lmKHNsaWNlLmR1cmF0aW9uPjApe2NvbnN0IHc9TWF0aC5tYXgoc2xpY2UuZHVyYXRpb24sMC4wMDAwMDEpO3dWaWV3PU1hdGgubWF4KGR0LnhXb3JsZFZlY3RvclRvVmlldyh3KSwxKTt9Ci1yZWN0LmZpbGxSZWN0KHhWaWV3LHdWaWV3LGJsYWNrQ29sb3JJZCwwLjcpO30KLXJlY3QuZmx1c2goKTt9Ci1jdHgucmVzdG9yZSgpO30KLWZ1bmN0aW9uIGRyYXdJbnN0YW50U2xpY2VzQXNMaW5lcyhjdHgsZHQsdmlld0xXb3JsZCx2aWV3UldvcmxkLHZpZXdIZWlnaHQsc2xpY2VzLGxpbmVXaWR0aEluUGl4ZWxzKXtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IGhlaWdodD12aWV3SGVpZ2h0KnBpeGVsUmF0aW87Y3R4LnNhdmUoKTtjdHgubGluZVdpZHRoPWxpbmVXaWR0aEluUGl4ZWxzKnBpeGVsUmF0aW87Y29uc3QgbG93U2xpY2U9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHNsaWNlcyxmdW5jdGlvbihzbGljZSl7cmV0dXJuIHNsaWNlLnN0YXJ0O30sdmlld0xXb3JsZCk7Zm9yKGxldCBpPWxvd1NsaWNlO2k8c2xpY2VzLmxlbmd0aDsrK2kpe2NvbnN0IHNsaWNlPXNsaWNlc1tpXTtjb25zdCB4PXNsaWNlLnN0YXJ0O2lmKHg+dmlld1JXb3JsZClicmVhaztjdHguc3Ryb2tlU3R5bGU9RXZlbnRQcmVzZW50ZXIuZ2V0SW5zdGFudFNsaWNlQ29sb3Ioc2xpY2UpO2NvbnN0IHhWaWV3PWR0LnhXb3JsZFRvVmlldyh4KTtjdHguYmVnaW5QYXRoKCk7Y3R4Lm1vdmVUbyh4VmlldywwKTtjdHgubGluZVRvKHhWaWV3LGhlaWdodCk7Y3R4LnN0cm9rZSgpO30KLWN0eC5yZXN0b3JlKCk7fQotZnVuY3Rpb24gZHJhd0xhYmVscyhjdHgsZHQsdmlld0xXb3JsZCx2aWV3UldvcmxkLHNsaWNlcyxhc3luYyxmb250U2l6ZSx5T2Zmc2V0KXtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IHBpeFdpZHRoPWR0LnhWaWV3VmVjdG9yVG9Xb3JsZCgxKTtjdHguc2F2ZSgpO2N0eC50ZXh0QWxpZ249J2NlbnRlcic7Y3R4LnRleHRCYXNlbGluZT0ndG9wJztjdHguZm9udD0oZm9udFNpemUqcGl4ZWxSYXRpbykrJ3B4IHNhbnMtc2VyaWYnO2lmKGFzeW5jKXtjdHguZm9udD0naXRhbGljICcrY3R4LmZvbnQ7fQotY29uc3QgY1k9eU9mZnNldCpwaXhlbFJhdGlvO2NvbnN0IGxvd1NsaWNlPXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheShzbGljZXMsZnVuY3Rpb24oc2xpY2Upe3JldHVybiBzbGljZS5zdGFydCtzbGljZS5kdXJhdGlvbjt9LHZpZXdMV29ybGQpO2NvbnN0IHF1aWNrRGlzY2FyZFRocmVzaG9sZD1waXhXaWR0aCoyMDtmb3IobGV0IGk9bG93U2xpY2U7aTxzbGljZXMubGVuZ3RoOysraSl7Y29uc3Qgc2xpY2U9c2xpY2VzW2ldO2lmKHNsaWNlLnN0YXJ0PnZpZXdSV29ybGQpYnJlYWs7aWYoc2xpY2UuZHVyYXRpb248PXF1aWNrRGlzY2FyZFRocmVzaG9sZCljb250aW51ZTtjb25zdCB4TGVmdENsaXBwZWQ9TWF0aC5tYXgoc2xpY2Uuc3RhcnQsdmlld0xXb3JsZCk7Y29uc3QgeFJpZ2h0Q2xpcHBlZD1NYXRoLm1pbihzbGljZS5zdGFydCtzbGljZS5kdXJhdGlvbix2aWV3UldvcmxkKTtjb25zdCB2aXNpYmxlV2lkdGg9eFJpZ2h0Q2xpcHBlZC14TGVmdENsaXBwZWQ7Y29uc3QgdGl0bGU9c2xpY2UudGl0bGUrCi0oc2xpY2UuZGlkTm90RmluaXNoPycgKERpZCBOb3QgRmluaXNoKSc6JycpO2xldCBkcmF3blRpdGxlPXRpdGxlO2xldCBkcmF3bldpZHRoPWVsaWRlZFRpdGxlQ2FjaGUubGFiZWxXaWR0aChjdHgsZHJhd25UaXRsZSk7Y29uc3QgZnVsbExhYmVsV2lkdGg9ZWxpZGVkVGl0bGVDYWNoZS5sYWJlbFdpZHRoV29ybGQoY3R4LGRyYXduVGl0bGUscGl4V2lkdGgpO2lmKFNIT1VMRF9FTElERV9URVhUJiZmdWxsTGFiZWxXaWR0aD52aXNpYmxlV2lkdGgpe2NvbnN0IGVsaWRlZFZhbHVlcz1lbGlkZWRUaXRsZUNhY2hlLmdldChjdHgscGl4V2lkdGgsZHJhd25UaXRsZSxkcmF3bldpZHRoLHZpc2libGVXaWR0aCk7ZHJhd25UaXRsZT1lbGlkZWRWYWx1ZXMuc3RyaW5nO2RyYXduV2lkdGg9ZWxpZGVkVmFsdWVzLndpZHRoO30KLWlmKGRyYXduV2lkdGgqcGl4V2lkdGg8dmlzaWJsZVdpZHRoKXtjdHguZmlsbFN0eWxlPUV2ZW50UHJlc2VudGVyLmdldFRleHRDb2xvcihzbGljZSk7Y29uc3QgY1g9ZHQueFdvcmxkVG9WaWV3KCh4TGVmdENsaXBwZWQreFJpZ2h0Q2xpcHBlZCkvMik7Y3R4LmZpbGxUZXh0KGRyYXduVGl0bGUsY1gsY1ksZHJhd25XaWR0aCk7fX0KLWN0eC5yZXN0b3JlKCk7fQotcmV0dXJue2RyYXdTbGljZXMsZHJhd0luc3RhbnRTbGljZXNBc0xpbmVzLGRyYXdMYWJlbHMsZHJhd0xpbmUsZHJhd1RyaWFuZ2xlLGRyYXdBcnJvdyxlbGlkZWRUaXRsZUNhY2hlXzplbGlkZWRUaXRsZUNhY2hlLFRISU5fU0xJQ0VfSEVJR0hULH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aScsZnVuY3Rpb24oKXtmdW5jdGlvbiBUaW1lbGluZURpc3BsYXlUcmFuc2Zvcm0ob3B0X3RoYXQpe2lmKG9wdF90aGF0KXt0aGlzLnNldChvcHRfdGhhdCk7cmV0dXJuO30KLXRoaXMuc2NhbGVYPTE7dGhpcy5wYW5YPTA7dGhpcy5wYW5ZPTA7fQotVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtLnByb3RvdHlwZT17c2V0KHRoYXQpe3RoaXMuc2NhbGVYPXRoYXQuc2NhbGVYO3RoaXMucGFuWD10aGF0LnBhblg7dGhpcy5wYW5ZPXRoYXQucGFuWTt9LGNsb25lKCl7cmV0dXJuIG5ldyBUaW1lbGluZURpc3BsYXlUcmFuc2Zvcm0odGhpcyk7fSxlcXVhbHModGhhdCl7bGV0IGVxPXRydWU7aWYodGhhdD09PXVuZGVmaW5lZHx8dGhhdD09PW51bGwpe3JldHVybiBmYWxzZTt9Ci1lcSY9dGhpcy5wYW5YPT09dGhhdC5wYW5YO2VxJj10aGlzLnBhblk9PT10aGF0LnBhblk7ZXEmPXRoaXMuc2NhbGVYPT09dGhhdC5zY2FsZVg7cmV0dXJuISFlcTt9LGFsbW9zdEVxdWFscyh0aGF0KXtsZXQgZXE9dHJ1ZTtpZih0aGF0PT09dW5kZWZpbmVkfHx0aGF0PT09bnVsbCl7cmV0dXJuIGZhbHNlO30KLWVxJj1NYXRoLmFicyh0aGlzLnBhblgtdGhhdC5wYW5YKTwwLjAwMTtlcSY9TWF0aC5hYnModGhpcy5wYW5ZLXRoYXQucGFuWSk8MC4wMDE7ZXEmPU1hdGguYWJzKHRoaXMuc2NhbGVYLXRoYXQuc2NhbGVYKTwwLjAwMTtyZXR1cm4hIWVxO30saW5jcmVtZW50UGFuWEluVmlld1VuaXRzKHhEZWx0YVZpZXcpe3RoaXMucGFuWCs9dGhpcy54Vmlld1ZlY3RvclRvV29ybGQoeERlbHRhVmlldyk7fSx4UGFuV29ybGRQb3NUb1ZpZXdQb3Mod29ybGRYLHZpZXdYLHZpZXdXaWR0aCl7aWYodHlwZW9mIHZpZXdYPT09J3N0cmluZycpe2lmKHZpZXdYPT09J2xlZnQnKXt2aWV3WD0wO31lbHNlIGlmKHZpZXdYPT09J2NlbnRlcicpe3ZpZXdYPXZpZXdXaWR0aC8yO31lbHNlIGlmKHZpZXdYPT09J3JpZ2h0Jyl7dmlld1g9dmlld1dpZHRoLTE7fWVsc2V7dGhyb3cgbmV3IEVycm9yKCd2aWV3WCBtdXN0IGJlIGxlZnR8Y2VudGVyfHJpZ2h0IG9yIG51bWJlci4nKTt9fQotdGhpcy5wYW5YPSh2aWV3WC90aGlzLnNjYWxlWCktd29ybGRYO30seFBhbldvcmxkQm91bmRzSW50b1ZpZXcod29ybGRNaW4sd29ybGRNYXgsdmlld1dpZHRoKXtpZih0aGlzLnhXb3JsZFRvVmlldyh3b3JsZE1pbik8MCl7dGhpcy54UGFuV29ybGRQb3NUb1ZpZXdQb3Mod29ybGRNaW4sJ2xlZnQnLHZpZXdXaWR0aCk7fWVsc2UgaWYodGhpcy54V29ybGRUb1ZpZXcod29ybGRNYXgpPnZpZXdXaWR0aCl7dGhpcy54UGFuV29ybGRQb3NUb1ZpZXdQb3Mod29ybGRNYXgsJ3JpZ2h0Jyx2aWV3V2lkdGgpO319LHhTZXRXb3JsZEJvdW5kcyh3b3JsZE1pbix3b3JsZE1heCx2aWV3V2lkdGgpe2NvbnN0IHdvcmxkV2lkdGg9d29ybGRNYXgtd29ybGRNaW47Y29uc3Qgc2NhbGVYPXZpZXdXaWR0aC93b3JsZFdpZHRoO2NvbnN0IHBhblg9LXdvcmxkTWluO3RoaXMuc2V0UGFuQW5kU2NhbGUocGFuWCxzY2FsZVgpO30sc2V0UGFuQW5kU2NhbGUocCxzKXt0aGlzLnNjYWxlWD1zO3RoaXMucGFuWD1wO30seFdvcmxkVG9WaWV3KHgpe3JldHVybih4K3RoaXMucGFuWCkqdGhpcy5zY2FsZVg7fSx4V29ybGRWZWN0b3JUb1ZpZXcoeCl7cmV0dXJuIHgqdGhpcy5zY2FsZVg7fSx4Vmlld1RvV29ybGQoeCl7cmV0dXJuKHgvdGhpcy5zY2FsZVgpLXRoaXMucGFuWDt9LHhWaWV3VmVjdG9yVG9Xb3JsZCh4KXtyZXR1cm4geC90aGlzLnNjYWxlWDt9fTtyZXR1cm57VGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aScsZnVuY3Rpb24oKXtmdW5jdGlvbiBTbmFwSW5kaWNhdG9yKHksaGVpZ2h0KXt0aGlzLnk9eTt0aGlzLmhlaWdodD1oZWlnaHQ7fQotZnVuY3Rpb24gVGltZWxpbmVJbnRlcmVzdFJhbmdlKHZwKXt0aGlzLnZpZXdwb3J0Xz12cDt0aGlzLnJhbmdlXz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7dGhpcy5sZWZ0U2VsZWN0ZWRfPWZhbHNlO3RoaXMucmlnaHRTZWxlY3RlZF89ZmFsc2U7dGhpcy5sZWZ0U25hcEluZGljYXRvcl89dW5kZWZpbmVkO3RoaXMucmlnaHRTbmFwSW5kaWNhdG9yXz11bmRlZmluZWQ7fQotVGltZWxpbmVJbnRlcmVzdFJhbmdlLnByb3RvdHlwZT17Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYW5nZV8uaXNFbXB0eTt9LHJlc2V0KCl7dGhpcy5yYW5nZV8ucmVzZXQoKTt0aGlzLmxlZnRTZWxlY3RlZF89ZmFsc2U7dGhpcy5yaWdodFNlbGVjdGVkXz1mYWxzZTt0aGlzLmxlZnRTbmFwSW5kaWNhdG9yXz11bmRlZmluZWQ7dGhpcy5yaWdodFNuYXBJbmRpY2F0b3JfPXVuZGVmaW5lZDt0aGlzLnZpZXdwb3J0Xy5kaXNwYXRjaENoYW5nZUV2ZW50KCk7fSxnZXQgbWluKCl7cmV0dXJuIHRoaXMucmFuZ2VfLm1pbjt9LHNldCBtaW4obWluKXt0aGlzLnJhbmdlXy5taW49bWluO3RoaXMudmlld3BvcnRfLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LGdldCBtYXgoKXtyZXR1cm4gdGhpcy5yYW5nZV8ubWF4O30sc2V0IG1heChtYXgpe3RoaXMucmFuZ2VfLm1heD1tYXg7dGhpcy52aWV3cG9ydF8uZGlzcGF0Y2hDaGFuZ2VFdmVudCgpO30sc2V0KHJhbmdlKXt0aGlzLnJhbmdlXy5yZXNldCgpO3RoaXMucmFuZ2VfLmFkZFJhbmdlKHJhbmdlKTt0aGlzLnZpZXdwb3J0Xy5kaXNwYXRjaENoYW5nZUV2ZW50KCk7fSxzZXRNaW5BbmRNYXgobWluLG1heCl7dGhpcy5yYW5nZV8ubWluPW1pbjt0aGlzLnJhbmdlXy5tYXg9bWF4O3RoaXMudmlld3BvcnRfLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LGdldCByYW5nZSgpe3JldHVybiB0aGlzLnJhbmdlXy5yYW5nZTt9LGFzUmFuZ2VPYmplY3QoKXtjb25zdCByYW5nZT1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7cmFuZ2UuYWRkUmFuZ2UodGhpcy5yYW5nZV8pO3JldHVybiByYW5nZTt9LGdldCBsZWZ0U2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5sZWZ0U2VsZWN0ZWRfO30sc2V0IGxlZnRTZWxlY3RlZChsZWZ0U2VsZWN0ZWQpe2lmKHRoaXMubGVmdFNlbGVjdGVkXz09PWxlZnRTZWxlY3RlZClyZXR1cm47dGhpcy5sZWZ0U2VsZWN0ZWRfPWxlZnRTZWxlY3RlZDt0aGlzLnZpZXdwb3J0Xy5kaXNwYXRjaENoYW5nZUV2ZW50KCk7fSxnZXQgcmlnaHRTZWxlY3RlZCgpe3JldHVybiB0aGlzLnJpZ2h0U2VsZWN0ZWRfO30sc2V0IHJpZ2h0U2VsZWN0ZWQocmlnaHRTZWxlY3RlZCl7aWYodGhpcy5yaWdodFNlbGVjdGVkXz09PXJpZ2h0U2VsZWN0ZWQpcmV0dXJuO3RoaXMucmlnaHRTZWxlY3RlZF89cmlnaHRTZWxlY3RlZDt0aGlzLnZpZXdwb3J0Xy5kaXNwYXRjaENoYW5nZUV2ZW50KCk7fSxnZXQgbGVmdFNuYXBJbmRpY2F0b3IoKXtyZXR1cm4gdGhpcy5sZWZ0U25hcEluZGljYXRvcl87fSxzZXQgbGVmdFNuYXBJbmRpY2F0b3IobGVmdFNuYXBJbmRpY2F0b3Ipe3RoaXMubGVmdFNuYXBJbmRpY2F0b3JfPWxlZnRTbmFwSW5kaWNhdG9yO3RoaXMudmlld3BvcnRfLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LGdldCByaWdodFNuYXBJbmRpY2F0b3IoKXtyZXR1cm4gdGhpcy5yaWdodFNuYXBJbmRpY2F0b3JfO30sc2V0IHJpZ2h0U25hcEluZGljYXRvcihyaWdodFNuYXBJbmRpY2F0b3Ipe3RoaXMucmlnaHRTbmFwSW5kaWNhdG9yXz1yaWdodFNuYXBJbmRpY2F0b3I7dGhpcy52aWV3cG9ydF8uZGlzcGF0Y2hDaGFuZ2VFdmVudCgpO30sZHJhdyhjdHgsdmlld0xXb3JsZCx2aWV3UldvcmxkLHZpZXdIZWlnaHQpe2lmKHRoaXMucmFuZ2VfLmlzRW1wdHkpcmV0dXJuO2NvbnN0IGR0PXRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IG1hcmtlckxXb3JsZD10aGlzLm1pbjtjb25zdCBtYXJrZXJSV29ybGQ9dGhpcy5tYXg7Y29uc3QgbWFya2VyTFZpZXc9TWF0aC5yb3VuZChkdC54V29ybGRUb1ZpZXcobWFya2VyTFdvcmxkKSk7Y29uc3QgbWFya2VyUlZpZXc9TWF0aC5yb3VuZChkdC54V29ybGRUb1ZpZXcobWFya2VyUldvcmxkKSk7Y3R4LmZpbGxTdHlsZT0ncmdiYSgwLCAwLCAwLCAwLjIpJztpZihtYXJrZXJMV29ybGQ+dmlld0xXb3JsZCl7Y3R4LmZpbGxSZWN0KGR0LnhXb3JsZFRvVmlldyh2aWV3TFdvcmxkKSwwLG1hcmtlckxWaWV3LHZpZXdIZWlnaHQpO30KLWlmKG1hcmtlclJXb3JsZDx2aWV3UldvcmxkKXtjdHguZmlsbFJlY3QobWFya2VyUlZpZXcsMCxkdC54V29ybGRUb1ZpZXcodmlld1JXb3JsZCksdmlld0hlaWdodCk7fQotY29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjdHgubGluZVdpZHRoPU1hdGgucm91bmQocGl4ZWxSYXRpbyk7aWYodGhpcy5yYW5nZV8ucmFuZ2U+MCl7dGhpcy5kcmF3TGluZV8oY3R4LHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0LHRoaXMubWluLHRoaXMubGVmdFNlbGVjdGVkXyk7dGhpcy5kcmF3TGluZV8oY3R4LHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0LHRoaXMubWF4LHRoaXMucmlnaHRTZWxlY3RlZF8pO31lbHNle3RoaXMuZHJhd0xpbmVfKGN0eCx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdmlld0hlaWdodCx0aGlzLm1pbix0aGlzLmxlZnRTZWxlY3RlZF98fHRoaXMucmlnaHRTZWxlY3RlZF8pO30KLWN0eC5saW5lV2lkdGg9MTt9LGRyYXdMaW5lXyhjdHgsdmlld0xXb3JsZCx2aWV3UldvcmxkLGhlaWdodCx0cyxzZWxlY3RlZCl7aWYodHM8dmlld0xXb3JsZHx8dHM+PXZpZXdSV29ybGQpcmV0dXJuO2NvbnN0IGR0PXRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IHZpZXdYPU1hdGgucm91bmQoZHQueFdvcmxkVG9WaWV3KHRzKSk7Y3R4LnNhdmUoKTtjdHgudHJhbnNsYXRlKChNYXRoLnJvdW5kKGN0eC5saW5lV2lkdGgpJTIpLzIsMCk7Y3R4LmJlZ2luUGF0aCgpO3RyLnVpLmIuZHJhd0xpbmUoY3R4LHZpZXdYLDAsdmlld1gsaGVpZ2h0KTtpZihzZWxlY3RlZCl7Y3R4LnN0cm9rZVN0eWxlPSdyZ2IoMjU1LCAwLCAwKSc7fWVsc2V7Y3R4LnN0cm9rZVN0eWxlPSdyZ2IoMCwgMCwgMCknO30KLWN0eC5zdHJva2UoKTtjdHgucmVzdG9yZSgpO30sZHJhd0luZGljYXRvcnMoY3R4LHZpZXdMV29ybGQsdmlld1JXb3JsZCl7aWYodGhpcy5sZWZ0U25hcEluZGljYXRvcl8pe3RoaXMuZHJhd0luZGljYXRvcl8oY3R4LHZpZXdMV29ybGQsdmlld1JXb3JsZCx0aGlzLnJhbmdlXy5taW4sdGhpcy5sZWZ0U25hcEluZGljYXRvcl8sdGhpcy5sZWZ0U2VsZWN0ZWRfKTt9Ci1pZih0aGlzLnJpZ2h0U25hcEluZGljYXRvcl8pe3RoaXMuZHJhd0luZGljYXRvcl8oY3R4LHZpZXdMV29ybGQsdmlld1JXb3JsZCx0aGlzLnJhbmdlXy5tYXgsdGhpcy5yaWdodFNuYXBJbmRpY2F0b3JfLHRoaXMucmlnaHRTZWxlY3RlZF8pO319LGRyYXdJbmRpY2F0b3JfKGN0eCx2aWV3TFdvcmxkLHZpZXdSV29ybGQseFdvcmxkLHNpLHNlbGVjdGVkKXtjb25zdCBkdD10aGlzLnZpZXdwb3J0Xy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCB2aWV3WD1NYXRoLnJvdW5kKGR0LnhXb3JsZFRvVmlldyh4V29ybGQpKTtjdHguc2F2ZSgpO2N0eC50cmFuc2xhdGUoKE1hdGgucm91bmQoY3R4LmxpbmVXaWR0aCklMikvMiwwKTtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IHZpZXdZPXNpLnkqZGV2aWNlUGl4ZWxSYXRpbztjb25zdCB2aWV3SGVpZ2h0PXNpLmhlaWdodCpkZXZpY2VQaXhlbFJhdGlvO2NvbnN0IGFycm93U2l6ZT00KnBpeGVsUmF0aW87aWYoc2VsZWN0ZWQpe2N0eC5maWxsU3R5bGU9J3JnYigyNTUsIDAsIDApJzt9ZWxzZXtjdHguZmlsbFN0eWxlPSdyZ2IoMCwgMCwgMCknO30KLXRyLnVpLmIuZHJhd1RyaWFuZ2xlKGN0eCx2aWV3WC1hcnJvd1NpemUqMC43NSx2aWV3WSx2aWV3WCthcnJvd1NpemUqMC43NSx2aWV3WSx2aWV3WCx2aWV3WSthcnJvd1NpemUpO2N0eC5maWxsKCk7dHIudWkuYi5kcmF3VHJpYW5nbGUoY3R4LHZpZXdYLWFycm93U2l6ZSowLjc1LHZpZXdZK3ZpZXdIZWlnaHQsdmlld1grYXJyb3dTaXplKjAuNzUsdmlld1krdmlld0hlaWdodCx2aWV3WCx2aWV3WSt2aWV3SGVpZ2h0LWFycm93U2l6ZSk7Y3R4LmZpbGwoKTtjdHgucmVzdG9yZSgpO319O3JldHVybntTbmFwSW5kaWNhdG9yLFRpbWVsaW5lSW50ZXJlc3RSYW5nZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2Z1bmN0aW9uIENvbnRhaW5lclRvVHJhY2tNYXAoKXt0aGlzLnN0YWJsZUlkVG9UcmFja01hcF89e307fQotQ29udGFpbmVyVG9UcmFja01hcC5wcm90b3R5cGU9e2FkZENvbnRhaW5lcihjb250YWluZXIsdHJhY2spe2lmKCF0cmFjayl7dGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgYSB0cmFjay4nKTt9Ci10aGlzLnN0YWJsZUlkVG9UcmFja01hcF9bY29udGFpbmVyLnN0YWJsZUlkXT10cmFjazt9LGNsZWFyKCl7dGhpcy5zdGFibGVJZFRvVHJhY2tNYXBfPXt9O30sZ2V0VHJhY2tCeVN0YWJsZUlkKHN0YWJsZUlkKXtyZXR1cm4gdGhpcy5zdGFibGVJZFRvVHJhY2tNYXBfW3N0YWJsZUlkXTt9fTtyZXR1cm57Q29udGFpbmVyVG9UcmFja01hcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEV2ZW50VG9UcmFja01hcCgpe30KLUV2ZW50VG9UcmFja01hcC5wcm90b3R5cGU9e2FkZEV2ZW50KGV2ZW50LHRyYWNrKXtpZighdHJhY2spe3Rocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGEgdHJhY2suJyk7fQotdGhpc1tldmVudC5ndWlkXT10cmFjazt9fTtyZXR1cm57RXZlbnRUb1RyYWNrTWFwLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aScsZnVuY3Rpb24oKXtjb25zdCBUaW1lbGluZURpc3BsYXlUcmFuc2Zvcm09dHIudWkuVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtO2NvbnN0IFRpbWVsaW5lSW50ZXJlc3RSYW5nZT10ci51aS5UaW1lbGluZUludGVyZXN0UmFuZ2U7Y29uc3QgSURFQUxfTUFKT1JfTUFSS19ESVNUQU5DRV9QWD0xNTA7Y29uc3QgTUFKT1JfTUFSS19ST1VORElOR19GQUNUT1I9MTAwMDAwO2NsYXNzIEFuaW1hdGlvbkNvbnRyb2xsZXJQcm94eXtjb25zdHJ1Y3Rvcih0YXJnZXQpe3RoaXMudGFyZ2V0Xz10YXJnZXQ7fQotZ2V0IHBhblgoKXtyZXR1cm4gdGhpcy50YXJnZXRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtXy5wYW5YO30KLXNldCBwYW5YKHBhblgpe3RoaXMudGFyZ2V0Xy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybV8ucGFuWD1wYW5YO30KLWdldCBwYW5ZKCl7cmV0dXJuIHRoaXMudGFyZ2V0Xy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybV8ucGFuWTt9Ci1zZXQgcGFuWShwYW5ZKXt0aGlzLnRhcmdldF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm1fLnBhblk9cGFuWTt9Ci1nZXQgc2NhbGVYKCl7cmV0dXJuIHRoaXMudGFyZ2V0Xy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybV8uc2NhbGVYO30KLXNldCBzY2FsZVgoc2NhbGVYKXt0aGlzLnRhcmdldF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm1fLnNjYWxlWD1zY2FsZVg7fQotY2xvbmVBbmltYXRpb25TdGF0ZSgpe3JldHVybiB0aGlzLnRhcmdldF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm1fLmNsb25lKCk7fQoteFBhbldvcmxkUG9zVG9WaWV3UG9zKHhXb3JsZCx4Vmlldyl7dGhpcy50YXJnZXRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtXy54UGFuV29ybGRQb3NUb1ZpZXdQb3MoeFdvcmxkLHhWaWV3LHRoaXMudGFyZ2V0Xy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jYW52YXMuY2xpZW50V2lkdGgpO319Ci1mdW5jdGlvbiBUaW1lbGluZVZpZXdwb3J0KHBhcmVudEVsKXt0aGlzLnBhcmVudEVsXz1wYXJlbnRFbDt0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfPXVuZGVmaW5lZDt0aGlzLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtXz1uZXcgVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtKCk7dGhpcy5pbml0QW5pbWF0aW9uQ29udHJvbGxlcl8oKTt0aGlzLnNob3dGbG93RXZlbnRzXz1mYWxzZTt0aGlzLmhpZ2hsaWdodFZTeW5jXz1mYWxzZTt0aGlzLmhpZ2hEZXRhaWxzXz1mYWxzZTt0aGlzLmdyaWRUaW1lYmFzZV89MDt0aGlzLmdyaWRTdGVwXz0xMDAwLzYwO3RoaXMuZ3JpZEVuYWJsZWRfPWZhbHNlO3RoaXMuaGFzQ2FsbGVkU2V0dXBGdW5jdGlvbl89ZmFsc2U7dGhpcy5vblJlc2l6ZV89dGhpcy5vblJlc2l6ZV8uYmluZCh0aGlzKTt0aGlzLm9uTW9kZWxUcmFja0NvbnRyb2xsZXJTY3JvbGxfPXRoaXMub25Nb2RlbFRyYWNrQ29udHJvbGxlclNjcm9sbF8uYmluZCh0aGlzKTt0aGlzLnRpbWVNb2RlXz1UaW1lbGluZVZpZXdwb3J0LlRpbWVNb2RlLlRJTUVfSU5fTVM7dGhpcy5tYWpvck1hcmtXb3JsZFBvc2l0aW9uc189W107dGhpcy5tYWpvck1hcmtVbml0Xz11bmRlZmluZWQ7dGhpcy5pbnRlcmVzdFJhbmdlXz1uZXcgVGltZWxpbmVJbnRlcmVzdFJhbmdlKHRoaXMpO3RoaXMuZXZlbnRUb1RyYWNrTWFwXz1uZXcgdHIudWkudHJhY2tzLkV2ZW50VG9UcmFja01hcCgpO3RoaXMuY29udGFpbmVyVG9UcmFja01hcD1uZXcgdHIudWkudHJhY2tzLkNvbnRhaW5lclRvVHJhY2tNYXAoKTt0aGlzLmRpc3BhdGNoQ2hhbmdlRXZlbnQ9dGhpcy5kaXNwYXRjaENoYW5nZUV2ZW50LmJpbmQodGhpcyk7fQotVGltZWxpbmVWaWV3cG9ydC5UaW1lTW9kZT17VElNRV9JTl9NUzowLFJFVklTSU9OUzoxfTtUaW1lbGluZVZpZXdwb3J0LnByb3RvdHlwZT17X19wcm90b19fOnRyLmIuRXZlbnRUYXJnZXQucHJvdG90eXBlLGdldCBpc0F0dGFjaGVkVG9Eb2N1bWVudE9ySW5UZXN0TW9kZSgpe2lmKHRoaXMucGFyZW50RWxfPT09dW5kZWZpbmVkKXJldHVybjtyZXR1cm4gdHIudWkuYi5pc0VsZW1lbnRBdHRhY2hlZFRvRG9jdW1lbnQodGhpcy5wYXJlbnRFbF8pO30sb25SZXNpemVfKCl7dGhpcy5kaXNwYXRjaENoYW5nZUV2ZW50KCk7fSxkaXNwYXRjaENoYW5nZUV2ZW50KCl7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ2NoYW5nZScpO30sZGV0YWNoKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsdGhpcy5kaXNwYXRjaENoYW5nZUV2ZW50KTt9LGluaXRBbmltYXRpb25Db250cm9sbGVyXygpe3RoaXMuZHRBbmltYXRpb25Db250cm9sbGVyXz1uZXcgdHIudWkuYi5BbmltYXRpb25Db250cm9sbGVyKCk7dGhpcy5kdEFuaW1hdGlvbkNvbnRyb2xsZXJfLmFkZEV2ZW50TGlzdGVuZXIoJ2RpZHRpY2snLGZ1bmN0aW9uKGUpe3RoaXMub25DdXJlbnREaXNwbGF5VHJhbnNmb3JtQ2hhbmdlXyhlLm9sZFRhcmdldFN0YXRlKTt9LmJpbmQodGhpcykpO3RoaXMuZHRBbmltYXRpb25Db250cm9sbGVyXy50YXJnZXQ9bmV3IEFuaW1hdGlvbkNvbnRyb2xsZXJQcm94eSh0aGlzKTt9LGdldCBjdXJyZW50RGlzcGxheVRyYW5zZm9ybSgpe3JldHVybiB0aGlzLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtXzt9LHNldERpc3BsYXlUcmFuc2Zvcm1JbW1lZGlhdGVseShkaXNwbGF5VHJhbnNmb3JtKXt0aGlzLmR0QW5pbWF0aW9uQ29udHJvbGxlcl8uY2FuY2VsQWN0aXZlQW5pbWF0aW9uKCk7Y29uc3Qgb2xkRGlzcGxheVRyYW5zZm9ybT10aGlzLmR0QW5pbWF0aW9uQ29udHJvbGxlcl8udGFyZ2V0LmNsb25lQW5pbWF0aW9uU3RhdGUoKTt0aGlzLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtXy5zZXQoZGlzcGxheVRyYW5zZm9ybSk7dGhpcy5vbkN1cmVudERpc3BsYXlUcmFuc2Zvcm1DaGFuZ2VfKG9sZERpc3BsYXlUcmFuc2Zvcm0pO30scXVldWVEaXNwbGF5VHJhbnNmb3JtQW5pbWF0aW9uKGFuaW1hdGlvbil7aWYoIShhbmltYXRpb24gaW5zdGFuY2VvZiB0ci51aS5iLkFuaW1hdGlvbikpe3Rocm93IG5ldyBFcnJvcignYW5pbWF0aW9uIG11c3QgYmUgaW5zdGFuY2VvZiB0ci51aS5iLkFuaW1hdGlvbicpO30KLXRoaXMuZHRBbmltYXRpb25Db250cm9sbGVyXy5xdWV1ZUFuaW1hdGlvbihhbmltYXRpb24pO30sb25DdXJlbnREaXNwbGF5VHJhbnNmb3JtQ2hhbmdlXyhvbGREaXNwbGF5VHJhbnNmb3JtKXtpZih0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfKXt0aGlzLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLnBhblk9dHIuYi5tYXRoLmNsYW1wKHRoaXMuY3VycmVudERpc3BsYXlUcmFuc2Zvcm0ucGFuWSwwLHRoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uc2Nyb2xsSGVpZ2h0LQotdGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jbGllbnRIZWlnaHQpO30KLWNvbnN0IGNoYW5nZWQ9IXRoaXMuY3VycmVudERpc3BsYXlUcmFuc2Zvcm0uZXF1YWxzKG9sZERpc3BsYXlUcmFuc2Zvcm0pO2NvbnN0IHlDaGFuZ2VkPXRoaXMuY3VycmVudERpc3BsYXlUcmFuc2Zvcm0ucGFuWSE9PW9sZERpc3BsYXlUcmFuc2Zvcm0ucGFuWTtpZih5Q2hhbmdlZCl7dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5zY3JvbGxUb3A9dGhpcy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybS5wYW5ZO30KLWlmKGNoYW5nZWQpe3RoaXMuZGlzcGF0Y2hDaGFuZ2VFdmVudCgpO319LG9uTW9kZWxUcmFja0NvbnRyb2xsZXJTY3JvbGxfKGUpe2lmKHRoaXMuZHRBbmltYXRpb25Db250cm9sbGVyXy5hY3RpdmVBbmltYXRpb24mJnRoaXMuZHRBbmltYXRpb25Db250cm9sbGVyXy5hY3RpdmVBbmltYXRpb24uYWZmZWN0c1Bhblkpe3RoaXMuZHRBbmltYXRpb25Db250cm9sbGVyXy5jYW5jZWxBY3RpdmVBbmltYXRpb24oKTt9Ci1jb25zdCBwYW5ZPXRoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uc2Nyb2xsVG9wO3RoaXMuY3VycmVudERpc3BsYXlUcmFuc2Zvcm1fLnBhblk9cGFuWTt9LGdldCBtb2RlbFRyYWNrQ29udGFpbmVyKCl7cmV0dXJuIHRoaXMubW9kZWxUcmFja0NvbnRhaW5lcl87fSxzZXQgbW9kZWxUcmFja0NvbnRhaW5lcihtKXtpZih0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfKXt0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsdGhpcy5vbk1vZGVsVHJhY2tDb250cm9sbGVyU2Nyb2xsXyk7fQotdGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXz1tO3RoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJyx0aGlzLm9uTW9kZWxUcmFja0NvbnRyb2xsZXJTY3JvbGxfKTt9LGdldCBzaG93Rmxvd0V2ZW50cygpe3JldHVybiB0aGlzLnNob3dGbG93RXZlbnRzXzt9LHNldCBzaG93Rmxvd0V2ZW50cyhzaG93Rmxvd0V2ZW50cyl7dGhpcy5zaG93Rmxvd0V2ZW50c189c2hvd0Zsb3dFdmVudHM7dGhpcy5kaXNwYXRjaENoYW5nZUV2ZW50KCk7fSxnZXQgaGlnaGxpZ2h0VlN5bmMoKXtyZXR1cm4gdGhpcy5oaWdobGlnaHRWU3luY187fSxzZXQgaGlnaGxpZ2h0VlN5bmMoaGlnaGxpZ2h0VlN5bmMpe3RoaXMuaGlnaGxpZ2h0VlN5bmNfPWhpZ2hsaWdodFZTeW5jO3RoaXMuZGlzcGF0Y2hDaGFuZ2VFdmVudCgpO30sZ2V0IGhpZ2hEZXRhaWxzKCl7cmV0dXJuIHRoaXMuaGlnaERldGFpbHNfO30sc2V0IGhpZ2hEZXRhaWxzKGhpZ2hEZXRhaWxzKXt0aGlzLmhpZ2hEZXRhaWxzXz1oaWdoRGV0YWlsczt0aGlzLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LGdldCBncmlkRW5hYmxlZCgpe3JldHVybiB0aGlzLmdyaWRFbmFibGVkXzt9LHNldCBncmlkRW5hYmxlZChlbmFibGVkKXtpZih0aGlzLmdyaWRFbmFibGVkXz09PWVuYWJsZWQpcmV0dXJuO3RoaXMuZ3JpZEVuYWJsZWRfPWVuYWJsZWQmJnRydWU7dGhpcy5kaXNwYXRjaENoYW5nZUV2ZW50KCk7fSxnZXQgZ3JpZFRpbWViYXNlKCl7cmV0dXJuIHRoaXMuZ3JpZFRpbWViYXNlXzt9LHNldCBncmlkVGltZWJhc2UodGltZWJhc2Upe2lmKHRoaXMuZ3JpZFRpbWViYXNlXz09PXRpbWViYXNlKXJldHVybjt0aGlzLmdyaWRUaW1lYmFzZV89dGltZWJhc2U7dGhpcy5kaXNwYXRjaENoYW5nZUV2ZW50KCk7fSxnZXQgZ3JpZFN0ZXAoKXtyZXR1cm4gdGhpcy5ncmlkU3RlcF87fSxnZXQgaW50ZXJlc3RSYW5nZSgpe3JldHVybiB0aGlzLmludGVyZXN0UmFuZ2VfO30sZ2V0IG1ham9yTWFya1dvcmxkUG9zaXRpb25zKCl7cmV0dXJuIHRoaXMubWFqb3JNYXJrV29ybGRQb3NpdGlvbnNfO30sZ2V0IG1ham9yTWFya1VuaXQoKXtzd2l0Y2godGhpcy50aW1lTW9kZV8pe2Nhc2UgVGltZWxpbmVWaWV3cG9ydC5UaW1lTW9kZS5USU1FX0lOX01TOnJldHVybiB0ci5iLlVuaXQuYnlOYW1lLnRpbWVJbk1zQXV0b0Zvcm1hdDtjYXNlIFRpbWVsaW5lVmlld3BvcnQuVGltZU1vZGUuUkVWSVNJT05TOnJldHVybiB0ci5iLlVuaXQuYnlOYW1lLmNvdW50O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IFVuaXQgZm9yIHVuc3VwcG9ydGVkIHRpbWUgbW9kZSAnK3RoaXMudGltZU1vZGVfKTt9fSxnZXQgdGltZU1vZGUoKXtyZXR1cm4gdGhpcy50aW1lTW9kZV87fSxzZXQgdGltZU1vZGUobW9kZSl7dGhpcy50aW1lTW9kZV89bW9kZTt0aGlzLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LHVwZGF0ZU1ham9yTWFya0RhdGEodmlld0xXb3JsZCx2aWV3UldvcmxkKXtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IGR0PXRoaXMuY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3QgaWRlYWxNYWpvck1hcmtEaXN0YW5jZVBpeD1JREVBTF9NQUpPUl9NQVJLX0RJU1RBTkNFX1BYKnBpeGVsUmF0aW87Y29uc3QgaWRlYWxNYWpvck1hcmtEaXN0YW5jZVdvcmxkPWR0LnhWaWV3VmVjdG9yVG9Xb3JsZChpZGVhbE1ham9yTWFya0Rpc3RhbmNlUGl4KTtjb25zdCBtYWpvck1hcmtEaXN0YW5jZVdvcmxkPXRyLmIubWF0aC5wcmVmZXJyZWROdW1iZXJMYXJnZXJUaGFuTWluKGlkZWFsTWFqb3JNYXJrRGlzdGFuY2VXb3JsZCk7Y29uc3QgZmlyc3RNYWpvck1hcms9TWF0aC5mbG9vcih2aWV3TFdvcmxkL21ham9yTWFya0Rpc3RhbmNlV29ybGQpKm1ham9yTWFya0Rpc3RhbmNlV29ybGQ7dGhpcy5tYWpvck1hcmtXb3JsZFBvc2l0aW9uc189W107Zm9yKGxldCBjdXJYPWZpcnN0TWFqb3JNYXJrO2N1clg8dmlld1JXb3JsZDtjdXJYKz1tYWpvck1hcmtEaXN0YW5jZVdvcmxkKXt0aGlzLm1ham9yTWFya1dvcmxkUG9zaXRpb25zXy5wdXNoKE1hdGguZmxvb3IoTUFKT1JfTUFSS19ST1VORElOR19GQUNUT1IqY3VyWCkvTUFKT1JfTUFSS19ST1VORElOR19GQUNUT1IpO319LGRyYXdNYWpvck1hcmtMaW5lcyhjdHgsdmlld0hlaWdodCl7Y3R4LnNhdmUoKTtjdHgudHJhbnNsYXRlKChNYXRoLnJvdW5kKGN0eC5saW5lV2lkdGgpJTIpLzIsMCk7Y3R4LmJlZ2luUGF0aCgpO2Zvcihjb25zdCBtYWpvck1hcmsgb2YgdGhpcy5tYWpvck1hcmtXb3JsZFBvc2l0aW9uc18pe2NvbnN0IHg9dGhpcy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybS54V29ybGRUb1ZpZXcobWFqb3JNYXJrKTt0ci51aS5iLmRyYXdMaW5lKGN0eCx4LDAseCx2aWV3SGVpZ2h0KTt9Ci1jdHguc3Ryb2tlU3R5bGU9JyNkZGQnO2N0eC5zdHJva2UoKTtjdHgucmVzdG9yZSgpO30sZHJhd0dyaWRMaW5lcyhjdHgsdmlld0xXb3JsZCx2aWV3UldvcmxkLHZpZXdIZWlnaHQpe2lmKCF0aGlzLmdyaWRFbmFibGVkKXJldHVybjtjb25zdCBkdD10aGlzLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2xldCB4PXRoaXMuZ3JpZFRpbWViYXNlO2N0eC5zYXZlKCk7Y3R4LnRyYW5zbGF0ZSgoTWF0aC5yb3VuZChjdHgubGluZVdpZHRoKSUyKS8yLDApO2N0eC5iZWdpblBhdGgoKTt3aGlsZSh4PHZpZXdSV29ybGQpe2lmKHg+PXZpZXdMV29ybGQpe2NvbnN0IHZ4PU1hdGguZmxvb3IoZHQueFdvcmxkVG9WaWV3KHgpKTt0ci51aS5iLmRyYXdMaW5lKGN0eCx2eCwwLHZ4LHZpZXdIZWlnaHQpO30KLXgrPXRoaXMuZ3JpZFN0ZXA7fQotY3R4LnN0cm9rZVN0eWxlPSdyZ2JhKDI1NSwgMCwgMCwgMC4yNSknO2N0eC5zdHJva2UoKTtjdHgucmVzdG9yZSgpO30sZ2V0U2hpZnRlZFNlbGVjdGlvbihzZWxlY3Rpb24sb2Zmc2V0KXtjb25zdCBuZXdTZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7Zm9yKGNvbnN0IGV2ZW50IG9mIHNlbGVjdGlvbil7aWYoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5GbG93RXZlbnQpe2lmKG9mZnNldD4wKXtuZXdTZWxlY3Rpb24ucHVzaChldmVudC5lbmRTbGljZSk7fWVsc2UgaWYob2Zmc2V0PDApe25ld1NlbGVjdGlvbi5wdXNoKGV2ZW50LnN0YXJ0U2xpY2UpO31lbHNle30KLWNvbnRpbnVlO30KLWNvbnN0IHRyYWNrPXRoaXMudHJhY2tGb3JFdmVudChldmVudCk7dHJhY2suYWRkRXZlbnROZWFyVG9Qcm92aWRlZEV2ZW50VG9TZWxlY3Rpb24oZXZlbnQsb2Zmc2V0LG5ld1NlbGVjdGlvbik7fQotaWYobmV3U2VsZWN0aW9uLmxlbmd0aD09PTApcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gbmV3U2VsZWN0aW9uO30scmVidWlsZEV2ZW50VG9UcmFja01hcCgpe3RoaXMuZXZlbnRUb1RyYWNrTWFwXz1uZXcgdHIudWkudHJhY2tzLkV2ZW50VG9UcmFja01hcCgpO3RoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uYWRkRXZlbnRzVG9UcmFja01hcCh0aGlzLmV2ZW50VG9UcmFja01hcF8pO30scmVidWlsZENvbnRhaW5lclRvVHJhY2tNYXAoKXt0aGlzLmNvbnRhaW5lclRvVHJhY2tNYXAuY2xlYXIoKTt0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfLmFkZENvbnRhaW5lcnNUb1RyYWNrTWFwKHRoaXMuY29udGFpbmVyVG9UcmFja01hcCk7fSx0cmFja0ZvckV2ZW50KGV2ZW50KXtyZXR1cm4gdGhpcy5ldmVudFRvVHJhY2tNYXBfW2V2ZW50Lmd1aWRdO319O3JldHVybntUaW1lbGluZVZpZXdwb3J0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5jJyxmdW5jdGlvbigpe2NvbnN0IEJydXNoaW5nU3RhdGU9dHIudWkuYi5CcnVzaGluZ1N0YXRlO2NvbnN0IEV2ZW50U2V0PXRyLm1vZGVsLkV2ZW50U2V0O2NvbnN0IFNlbGVjdGlvblN0YXRlPXRyLm1vZGVsLlNlbGVjdGlvblN0YXRlO2NvbnN0IFZpZXdwb3J0PXRyLnVpLlRpbWVsaW5lVmlld3BvcnQ7ZnVuY3Rpb24gQnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIodGltZWxpbmVWaWV3KXt0ci5iLkV2ZW50VGFyZ2V0LmNhbGwodGhpcyk7dGhpcy50aW1lbGluZVZpZXdfPXRpbWVsaW5lVmlldzt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXz1uZXcgQnJ1c2hpbmdTdGF0ZSgpO3RoaXMub25Qb3BTdGF0ZV89dGhpcy5vblBvcFN0YXRlXy5iaW5kKHRoaXMpO3RoaXMuaGlzdG9yeUVuYWJsZWRfPWZhbHNlO3RoaXMuc2VsZWN0aW9uc189e307fQotQnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuYi5FdmVudFRhcmdldC5wcm90b3R5cGUsZGlzcGF0Y2hDaGFuZ2VFdmVudF8oKXtjb25zdCBlPW5ldyB0ci5iLkV2ZW50KCdjaGFuZ2UnLGZhbHNlLGZhbHNlKTt0aGlzLmRpc3BhdGNoRXZlbnQoZSk7fSxnZXQgbW9kZWwoKXtpZighdGhpcy50aW1lbGluZVZpZXdfKXtyZXR1cm4gdW5kZWZpbmVkO30KLXJldHVybiB0aGlzLnRpbWVsaW5lVmlld18ubW9kZWw7fSxnZXQgdHJhY2tWaWV3KCl7aWYoIXRoaXMudGltZWxpbmVWaWV3Xyl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1yZXR1cm4gdGhpcy50aW1lbGluZVZpZXdfLnRyYWNrVmlldzt9LGdldCB2aWV3cG9ydCgpe2lmKCF0aGlzLnRpbWVsaW5lVmlld18pe3JldHVybiB1bmRlZmluZWQ7fQotaWYoIXRoaXMudGltZWxpbmVWaWV3Xy50cmFja1ZpZXcpe3JldHVybiB1bmRlZmluZWQ7fQotcmV0dXJuIHRoaXMudGltZWxpbmVWaWV3Xy50cmFja1ZpZXcudmlld3BvcnQ7fSxnZXQgaGlzdG9yeUVuYWJsZWQoKXtyZXR1cm4gdGhpcy5oaXN0b3J5RW5hYmxlZF87fSxzZXQgaGlzdG9yeUVuYWJsZWQoaGlzdG9yeUVuYWJsZWQpe3RoaXMuaGlzdG9yeUVuYWJsZWRfPSEhaGlzdG9yeUVuYWJsZWQ7aWYoaGlzdG9yeUVuYWJsZWQpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsdGhpcy5vblBvcFN0YXRlXyk7fWVsc2V7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJyx0aGlzLm9uUG9wU3RhdGVfKTt9fSxtb2RlbFdpbGxDaGFuZ2UoKXtpZih0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5pc0FwcGxpZWRUb01vZGVsKXt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy51bmFwcGx5RnJvbUV2ZW50U2VsZWN0aW9uU3RhdGVzKCk7fX0sbW9kZWxEaWRDaGFuZ2UoKXt0aGlzLnNlbGVjdGlvbnNfPXt9O3RoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfPW5ldyBCcnVzaGluZ1N0YXRlKCk7dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8uYXBwbHlUb0V2ZW50U2VsZWN0aW9uU3RhdGVzKHRoaXMubW9kZWwpO2NvbnN0IGU9bmV3IHRyLmIuRXZlbnQoJ21vZGVsLWNoYW5nZWQnLGZhbHNlLGZhbHNlKTt0aGlzLmRpc3BhdGNoRXZlbnQoZSk7dGhpcy5kaXNwYXRjaENoYW5nZUV2ZW50XygpO30sb25Vc2VySW5pdGlhdGVkU2VsZWN0aW9uQ2hhbmdlXygpe2NvbnN0IHNlbGVjdGlvbj10aGlzLnNlbGVjdGlvbjtpZih0aGlzLmhpc3RvcnlFbmFibGVkKXt0aGlzLnNlbGVjdGlvbnNfW3NlbGVjdGlvbi5ndWlkXT1zZWxlY3Rpb247Y29uc3Qgc3RhdGU9e3NlbGVjdGlvbl9ndWlkOnNlbGVjdGlvbi5ndWlkfTt3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoc3RhdGUsZG9jdW1lbnQudGl0bGUpO319LG9uUG9wU3RhdGVfKGUpe2lmKGUuc3RhdGU9PT1udWxsKXJldHVybjtjb25zdCBzZWxlY3Rpb249dGhpcy5zZWxlY3Rpb25zX1tlLnN0YXRlLnNlbGVjdGlvbl9ndWlkXTtpZihzZWxlY3Rpb24pe2NvbnN0IG5ld1N0YXRlPXRoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfLmNsb25lKCk7bmV3U3RhdGUuc2VsZWN0aW9uPXNlbGVjdGlvbjt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlPW5ld1N0YXRlO30KLWUuc3RvcFByb3BhZ2F0aW9uKCk7fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfLnNlbGVjdGlvbjt9LGdldCBmaW5kTWF0Y2hlcygpe3JldHVybiB0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5maW5kTWF0Y2hlczt9LGdldCBzZWxlY3Rpb25PZkludGVyZXN0KCl7cmV0dXJuIHRoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfLnNlbGVjdGlvbk9mSW50ZXJlc3Q7fSxnZXQgY3VycmVudEJydXNoaW5nU3RhdGUoKXtyZXR1cm4gdGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV87fSxzZXQgY3VycmVudEJydXNoaW5nU3RhdGUobmV3QnJ1c2hpbmdTdGF0ZSl7aWYobmV3QnJ1c2hpbmdTdGF0ZS5pc0FwcGxpZWRUb01vZGVsKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhcHBseSB0aGlzIHN0YXRlLCBpdCBpcyBhcHBsaWVkJyk7fQotY29uc3QgaGFzVmFsdWVDaGFuZ2VkPSF0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5lcXVhbHMobmV3QnJ1c2hpbmdTdGF0ZSk7aWYobmV3QnJ1c2hpbmdTdGF0ZSE9PXRoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfJiYhaGFzVmFsdWVDaGFuZ2VkKXtpZih0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5pc0FwcGxpZWRUb01vZGVsKXt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy50cmFuc2Zlck1vZGVsT3duZXJzaGlwVG9DbG9uZShuZXdCcnVzaGluZ1N0YXRlKTt9Ci10aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXz1uZXdCcnVzaGluZ1N0YXRlO3JldHVybjt9Ci1pZih0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5pc0FwcGxpZWRUb01vZGVsKXt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy51bmFwcGx5RnJvbUV2ZW50U2VsZWN0aW9uU3RhdGVzKCk7fQotdGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV89bmV3QnJ1c2hpbmdTdGF0ZTt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5hcHBseVRvRXZlbnRTZWxlY3Rpb25TdGF0ZXModGhpcy5tb2RlbCk7dGhpcy5kaXNwYXRjaENoYW5nZUV2ZW50XygpO30sYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbkFzVGFzayhmaWx0ZXIsc2VsZWN0aW9uKXtjb25zdCB0aW1lbGluZVZpZXc9dGhpcy50aW1lbGluZVZpZXdfLnRyYWNrVmlldztpZighdGltZWxpbmVWaWV3KXtyZXR1cm4gbmV3IHRyLmIuVGFzaygpO30KLXJldHVybiB0aW1lbGluZVZpZXcuYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbkFzVGFzayhmaWx0ZXIsc2VsZWN0aW9uKTt9LGZpbmRUZXh0Q2hhbmdlZFRvKGFsbFBvc3NpYmxlTWF0Y2hlcyl7Y29uc3QgbmV3QnJ1c2hpbmdTdGF0ZT10aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5jbG9uZSgpO25ld0JydXNoaW5nU3RhdGUuZmluZE1hdGNoZXM9YWxsUG9zc2libGVNYXRjaGVzO3RoaXMuY3VycmVudEJydXNoaW5nU3RhdGU9bmV3QnJ1c2hpbmdTdGF0ZTt9LGZpbmRGb2N1c0NoYW5nZWRUbyhjdXJyZW50Rm9jdXMpe2NvbnN0IG5ld0JydXNoaW5nU3RhdGU9dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8uY2xvbmUoKTtuZXdCcnVzaGluZ1N0YXRlLnNlbGVjdGlvbj1jdXJyZW50Rm9jdXM7dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZT1uZXdCcnVzaGluZ1N0YXRlO3RoaXMub25Vc2VySW5pdGlhdGVkU2VsZWN0aW9uQ2hhbmdlXygpO30sZmluZFRleHRDbGVhcmVkKCl7aWYodGhpcy54TmF2U3RyaW5nTWFya2VyXyE9PXVuZGVmaW5lZCl7dGhpcy5tb2RlbC5yZW1vdmVBbm5vdGF0aW9uKHRoaXMueE5hdlN0cmluZ01hcmtlcl8pO3RoaXMueE5hdlN0cmluZ01hcmtlcl89dW5kZWZpbmVkO30KLWlmKHRoaXMuZ3VpZGVMaW5lQW5ub3RhdGlvbl8hPT11bmRlZmluZWQpe3RoaXMubW9kZWwucmVtb3ZlQW5ub3RhdGlvbih0aGlzLmd1aWRlTGluZUFubm90YXRpb25fKTt0aGlzLmd1aWRlTGluZUFubm90YXRpb25fPXVuZGVmaW5lZDt9Ci1jb25zdCBuZXdCcnVzaGluZ1N0YXRlPXRoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfLmNsb25lKCk7bmV3QnJ1c2hpbmdTdGF0ZS5zZWxlY3Rpb249bmV3IEV2ZW50U2V0KCk7bmV3QnJ1c2hpbmdTdGF0ZS5maW5kTWF0Y2hlcz1uZXcgRXZlbnRTZXQoKTt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlPW5ld0JydXNoaW5nU3RhdGU7dGhpcy5vblVzZXJJbml0aWF0ZWRTZWxlY3Rpb25DaGFuZ2VfKCk7fSx1aVN0YXRlRnJvbVN0cmluZyhzdHJpbmcpe3JldHVybiB0ci51aS5iLlVJU3RhdGUuZnJvbVVzZXJGcmllbmRseVN0cmluZyh0aGlzLm1vZGVsLHRoaXMudmlld3BvcnQsc3RyaW5nKTt9LG5hdlRvUG9zaXRpb24odWlTdGF0ZSxzaG93TmF2TGluZSl7dGhpcy50cmFja1ZpZXcubmF2VG9Qb3NpdGlvbih1aVN0YXRlLHNob3dOYXZMaW5lKTt9LGNoYW5nZVNlbGVjdGlvbkZyb21UaW1lbGluZShzZWxlY3Rpb24pe2NvbnN0IG5ld0JydXNoaW5nU3RhdGU9dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8uY2xvbmUoKTtuZXdCcnVzaGluZ1N0YXRlLnNlbGVjdGlvbj1zZWxlY3Rpb247bmV3QnJ1c2hpbmdTdGF0ZS5maW5kTWF0Y2hlcz1uZXcgRXZlbnRTZXQoKTt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlPW5ld0JydXNoaW5nU3RhdGU7dGhpcy5vblVzZXJJbml0aWF0ZWRTZWxlY3Rpb25DaGFuZ2VfKCk7fSxzaG93U2NyaXB0Q29udHJvbFNlbGVjdGlvbihzZWxlY3Rpb24pe2NvbnN0IG5ld0JydXNoaW5nU3RhdGU9dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8uY2xvbmUoKTtuZXdCcnVzaGluZ1N0YXRlLnNlbGVjdGlvbj1zZWxlY3Rpb247bmV3QnJ1c2hpbmdTdGF0ZS5maW5kTWF0Y2hlcz1uZXcgRXZlbnRTZXQoKTt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlPW5ld0JydXNoaW5nU3RhdGU7fSxjaGFuZ2VTZWxlY3Rpb25Gcm9tUmVxdWVzdFNlbGVjdGlvbkNoYW5nZUV2ZW50KHNlbGVjdGlvbil7Y29uc3QgbmV3QnJ1c2hpbmdTdGF0ZT10aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5jbG9uZSgpO25ld0JydXNoaW5nU3RhdGUuc2VsZWN0aW9uPXNlbGVjdGlvbjtuZXdCcnVzaGluZ1N0YXRlLmZpbmRNYXRjaGVzPW5ldyBFdmVudFNldCgpO3RoaXMuY3VycmVudEJydXNoaW5nU3RhdGU9bmV3QnJ1c2hpbmdTdGF0ZTt0aGlzLm9uVXNlckluaXRpYXRlZFNlbGVjdGlvbkNoYW5nZV8oKTt9LGNoYW5nZUFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHMoZXZlbnRTZXQpe2NvbnN0IG5ld0JydXNoaW5nU3RhdGU9dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8uY2xvbmUoKTtuZXdCcnVzaGluZ1N0YXRlLmFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHM9ZXZlbnRTZXQ7dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZT1uZXdCcnVzaGluZ1N0YXRlO30sY2hhbmdlQW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50cyhldmVudFNldCl7Y29uc3QgbmV3QnJ1c2hpbmdTdGF0ZT10aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5jbG9uZSgpO25ld0JydXNoaW5nU3RhdGUuYW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50cz1ldmVudFNldDt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlPW5ld0JydXNoaW5nU3RhdGU7fSxnZXRWaWV3U3BlY2lmaWNCcnVzaGluZ1N0YXRlKHZpZXdJZCl7cmV0dXJuIHRoaXMuY3VycmVudEJydXNoaW5nU3RhdGUudmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZXNbdmlld0lkXTt9LGNoYW5nZVZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGUodmlld0lkLG5ld1N0YXRlKXtjb25zdCBvbGRTdGF0ZXM9dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8udmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZXM7Y29uc3QgbmV3U3RhdGVzPXt9O2Zvcihjb25zdCBpZCBpbiBvbGRTdGF0ZXMpe25ld1N0YXRlc1tpZF09b2xkU3RhdGVzW2lkXTt9Ci1pZihuZXdTdGF0ZT09PXVuZGVmaW5lZCl7ZGVsZXRlIG5ld1N0YXRlc1t2aWV3SWRdO31lbHNle25ld1N0YXRlc1t2aWV3SWRdPW5ld1N0YXRlO30KLWNvbnN0IG5ld0JydXNoaW5nU3RhdGU9dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8uY2xvbmUoKTtuZXdCcnVzaGluZ1N0YXRlLnZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGVzPW5ld1N0YXRlczt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlPW5ld0JydXNoaW5nU3RhdGU7fX07QnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuZ2V0Q29udHJvbGxlckZvckVsZW1lbnQ9ZnVuY3Rpb24oZWxlbWVudCl7aWYodHIuaXNIZWFkbGVzcyl7dGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCcpO30KLWxldCBjdXJyZW50RWxlbWVudD1lbGVtZW50O3doaWxlKGN1cnJlbnRFbGVtZW50KXtpZihjdXJyZW50RWxlbWVudC5icnVzaGluZ1N0YXRlQ29udHJvbGxlcil7cmV0dXJuIGN1cnJlbnRFbGVtZW50LmJydXNoaW5nU3RhdGVDb250cm9sbGVyO30KLWlmKGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQpe2N1cnJlbnRFbGVtZW50PWN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7Y29udGludWU7fQotbGV0IGN1cnJlbnROb2RlPWN1cnJlbnRFbGVtZW50O3doaWxlKFBvbHltZXIuZG9tKGN1cnJlbnROb2RlKS5wYXJlbnROb2RlKXtjdXJyZW50Tm9kZT1Qb2x5bWVyLmRvbShjdXJyZW50Tm9kZSkucGFyZW50Tm9kZTt9Ci1jdXJyZW50RWxlbWVudD1jdXJyZW50Tm9kZS5ob3N0O30KLXJldHVybiB1bmRlZmluZWQ7fTtyZXR1cm57QnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIsfTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtYW5hbHlzaXMtbGluaycscHJvcGVydGllczp7aHJlZjp7dHlwZTpTdHJpbmd9fSxsaXN0ZW5lcnM6eydjbGljayc6J29uQ2xpY2tlZF8nLCdtb3VzZWVudGVyJzonb25Nb3VzZUVudGVyXycsJ21vdXNlbGVhdmUnOidvbk1vdXNlTGVhdmVfJ30scmVhZHkoKXt0aGlzLnNlbGVjdGlvbl89dW5kZWZpbmVkO30sYXR0YWNoZWQoKXt0aGlzLmNvbnRyb2xsZXJfPXRyLmMuQnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuZ2V0Q29udHJvbGxlckZvckVsZW1lbnQodGhpcyk7fSxkZXRhY2hlZCgpe3RoaXMuY2xlYXJIaWdobGlnaHRfKCk7dGhpcy5jb250cm9sbGVyXz11bmRlZmluZWQ7fSxzZXQgY29sb3IoYyl7dGhpcy5zdHlsZS5jb2xvcj1jO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbl87fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhpcy5zZWxlY3Rpb25fPXNlbGVjdGlvbjtQb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudD1zZWxlY3Rpb24udXNlckZyaWVuZGx5TmFtZTt9LHNldFNlbGVjdGlvbkFuZENvbnRlbnQoc2VsZWN0aW9uLG9wdF90ZXh0Q29udGVudCl7dGhpcy5zZWxlY3Rpb25fPXNlbGVjdGlvbjtpZihvcHRfdGV4dENvbnRlbnQpe1BvbHltZXIuZG9tKHRoaXMpLnRleHRDb250ZW50PW9wdF90ZXh0Q29udGVudDt9fSxnZXRDdXJyZW50U2VsZWN0aW9uXygpe2lmKHR5cGVvZiB0aGlzLnNlbGVjdGlvbl89PT0nZnVuY3Rpb24nKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25fKCk7fQotcmV0dXJuIHRoaXMuc2VsZWN0aW9uXzt9LHNldEhpZ2hsaWdodF8ob3B0X2V2ZW50U2V0KXtpZih0aGlzLmNvbnRyb2xsZXJfKXt0aGlzLmNvbnRyb2xsZXJfLmNoYW5nZUFuYWx5c2lzTGlua0hvdmVyZWRFdmVudHMob3B0X2V2ZW50U2V0KTt9fSxjbGVhckhpZ2hsaWdodF8ob3B0X2V2ZW50U2V0KXt0aGlzLnNldEhpZ2hsaWdodF8oKTt9LG9uQ2xpY2tlZF8oY2xpY2tFdmVudCl7aWYoIXRoaXMuc2VsZWN0aW9uXylyZXR1cm47Y2xpY2tFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBldmVudD1uZXcgdHIubW9kZWwuUmVxdWVzdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCk7ZXZlbnQuc2VsZWN0aW9uPXRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbl8oKTt0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO30sb25Nb3VzZUVudGVyXygpe3RoaXMuc2V0SGlnaGxpZ2h0Xyh0aGlzLmdldEN1cnJlbnRTZWxlY3Rpb25fKCkpO30sb25Nb3VzZUxlYXZlXygpe3RoaXMuY2xlYXJIaWdobGlnaHRfKCk7fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBUYWJsZUZvcm1hdD17fTtUYWJsZUZvcm1hdC5TZWxlY3Rpb25Nb2RlPXtOT05FOjAsUk9XOjEsQ0VMTDoyfTtUYWJsZUZvcm1hdC5IaWdobGlnaHRTdHlsZT17REVGQVVMVDowLE5PTkU6MSxMSUdIVDoyLERBUks6M307VGFibGVGb3JtYXQuQ29sdW1uQWxpZ25tZW50PXtMRUZUOjAsUklHSFQ6MX07cmV0dXJue1RhYmxlRm9ybWF0LH07fSk7J3VzZSBzdHJpY3QnOyhmdW5jdGlvbigpe2NvbnN0IFJJR0hUX0FSUk9XPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyNWI2KTtjb25zdCBVTlNPUlRFRF9BUlJPVz1TdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjVCRik7Y29uc3QgQVNDRU5ESU5HX0FSUk9XPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyNUI0KTtjb25zdCBERVNDRU5ESU5HX0FSUk9XPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyNUJFKTtjb25zdCBTZWxlY3Rpb25Nb2RlPXRyLnVpLmIuVGFibGVGb3JtYXQuU2VsZWN0aW9uTW9kZTtjb25zdCBTZWxlY3Rpb25Nb2RlVmFsdWVzPW5ldyBTZXQoT2JqZWN0LnZhbHVlcyhTZWxlY3Rpb25Nb2RlKSk7Y29uc3QgSGlnaGxpZ2h0U3R5bGU9dHIudWkuYi5UYWJsZUZvcm1hdC5IaWdobGlnaHRTdHlsZTtjb25zdCBIaWdobGlnaHRTdHlsZVZhbHVlcz1uZXcgU2V0KE9iamVjdC52YWx1ZXMoSGlnaGxpZ2h0U3R5bGUpKTtjb25zdCBDb2x1bW5BbGlnbm1lbnQ9dHIudWkuYi5UYWJsZUZvcm1hdC5Db2x1bW5BbGlnbm1lbnQ7Y29uc3QgQ29sdW1uQWxpZ25tZW50VmFsdWVzPW5ldyBTZXQoT2JqZWN0LnZhbHVlcyhDb2x1bW5BbGlnbm1lbnQpKTtQb2x5bWVyKHtpczondHItdWktYi10YWJsZScsY3JlYXRlZCgpe3RoaXMuc2VsZWN0aW9uTW9kZV89U2VsZWN0aW9uTW9kZS5OT05FO3RoaXMucm93SGlnaGxpZ2h0U3R5bGVfPUhpZ2hsaWdodFN0eWxlLkRFRkFVTFQ7dGhpcy5jZWxsSGlnaGxpZ2h0U3R5bGVfPUhpZ2hsaWdodFN0eWxlLkRFRkFVTFQ7dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb189dW5kZWZpbmVkO3RoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF89dW5kZWZpbmVkO3RoaXMudGFibGVDb2x1bW5zXz1bXTt0aGlzLnRhYmxlUm93c189W107dGhpcy50YWJsZVJvd3NJbmZvXz1uZXcgV2Vha01hcCgpO3RoaXMudGFibGVGb290ZXJSb3dzXz1bXTt0aGlzLnRhYmxlRm9vdGVyUm93c0luZm9fPW5ldyBXZWFrTWFwKCk7dGhpcy5zb3J0Q29sdW1uSW5kZXhfPXVuZGVmaW5lZDt0aGlzLnNvcnREZXNjZW5kaW5nXz1mYWxzZTt0aGlzLmNvbHVtbnNXaXRoRXhwYW5kQnV0dG9uc189W107dGhpcy5oZWFkZXJDZWxsc189W107dGhpcy5zaG93SGVhZGVyXz10cnVlO3RoaXMuZW1wdHlWYWx1ZV89dW5kZWZpbmVkO3RoaXMuc3ViUm93c1Byb3BlcnR5TmFtZV89J3N1YlJvd3MnO3RoaXMuY3VzdG9taXplVGFibGVSb3dDYWxsYmFja189dW5kZWZpbmVkO3RoaXMuZGVmYXVsdEV4cGFuc2lvblN0YXRlQ2FsbGJhY2tfPXVuZGVmaW5lZDt0aGlzLnVzZXJDYW5Nb2RpZnlTb3J0T3JkZXJfPXRydWU7dGhpcy5jb21wdXRlZEZvbnRTaXplUHhfPXVuZGVmaW5lZDt9LHJlYWR5KCl7dGhpcy4kLmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsdGhpcy5vbktleURvd25fLmJpbmQodGhpcyksdHJ1ZSk7dGhpcy4kLmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLHRoaXMub25Gb2N1c18uYmluZCh0aGlzKSx0cnVlKTt9LGNsZWFyKCl7dGhpcy5zZWxlY3Rpb25Nb2RlXz1TZWxlY3Rpb25Nb2RlLk5PTkU7dGhpcy5yb3dIaWdobGlnaHRTdHlsZV89SGlnaGxpZ2h0U3R5bGUuREVGQVVMVDt0aGlzLmNlbGxIaWdobGlnaHRTdHlsZV89SGlnaGxpZ2h0U3R5bGUuREVGQVVMVDt0aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXz11bmRlZmluZWQ7dGhpcy5zZWxlY3RlZENvbHVtbkluZGV4Xz11bmRlZmluZWQ7UG9seW1lci5kb20odGhpcykudGV4dENvbnRlbnQ9Jyc7dGhpcy50YWJsZUNvbHVtbnNfPVtdO3RoaXMudGFibGVSb3dzXz1bXTt0aGlzLnRhYmxlUm93c0luZm9fPW5ldyBXZWFrTWFwKCk7dGhpcy50YWJsZUZvb3RlclJvd3NfPVtdO3RoaXMudGFibGVGb290ZXJSb3dzSW5mb189bmV3IFdlYWtNYXAoKTt0aGlzLnNvcnRDb2x1bW5JbmRleF89dW5kZWZpbmVkO3RoaXMuc29ydERlc2NlbmRpbmdfPWZhbHNlO3RoaXMuY29sdW1uc1dpdGhFeHBhbmRCdXR0b25zXz1bXTt0aGlzLmhlYWRlckNlbGxzXz1bXTt0aGlzLnNob3dIZWFkZXJfPXRydWU7dGhpcy5lbXB0eVZhbHVlXz11bmRlZmluZWQ7dGhpcy5zdWJSb3dzUHJvcGVydHlOYW1lXz0nc3ViUm93cyc7dGhpcy5kZWZhdWx0RXhwYW5zaW9uU3RhdGVDYWxsYmFja189dW5kZWZpbmVkO3RoaXMudXNlckNhbk1vZGlmeVNvcnRPcmRlcl89dHJ1ZTt9LHNldCB6ZWJyYSh6ZWJyYSl7aWYoemVicmEpe3RoaXMuc2V0QXR0cmlidXRlKCd6ZWJyYScsdHJ1ZSk7fWVsc2V7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoJ3plYnJhJyk7fX0sZ2V0IHplYnJhKCl7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCd6ZWJyYScpO30sZ2V0IHNob3dIZWFkZXIoKXtyZXR1cm4gdGhpcy5zaG93SGVhZGVyXzt9LHNldCBzaG93SGVhZGVyKHNob3dIZWFkZXIpe3RoaXMuc2hvd0hlYWRlcl89c2hvd0hlYWRlcjt0aGlzLnNjaGVkdWxlUmVidWlsZEhlYWRlcnNfKCk7fSxzZXQgc3ViUm93c1Byb3BlcnR5TmFtZShuYW1lKXt0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfPW5hbWU7fSxzZXQgZGVmYXVsdEV4cGFuc2lvblN0YXRlQ2FsbGJhY2soY2Ipe3RoaXMuZGVmYXVsdEV4cGFuc2lvblN0YXRlQ2FsbGJhY2tfPWNiO3RoaXMuc2NoZWR1bGVSZWJ1aWxkQm9keV8oKTt9LHNldCBjdXN0b21pemVUYWJsZVJvd0NhbGxiYWNrKGNiKXt0aGlzLmN1c3RvbWl6ZVRhYmxlUm93Q2FsbGJhY2tfPWNiO3RoaXMuc2NoZWR1bGVSZWJ1aWxkQm9keV8oKTt9LGdldCBlbXB0eVZhbHVlKCl7cmV0dXJuIHRoaXMuZW1wdHlWYWx1ZV87fSxzZXQgZW1wdHlWYWx1ZShlbXB0eVZhbHVlKXtjb25zdCBwcmV2aW91c0VtcHR5VmFsdWU9dGhpcy5lbXB0eVZhbHVlXzt0aGlzLmVtcHR5VmFsdWVfPWVtcHR5VmFsdWU7aWYodGhpcy50YWJsZVJvd3NfLmxlbmd0aD09PTAmJmVtcHR5VmFsdWUhPT1wcmV2aW91c0VtcHR5VmFsdWUpe3RoaXMuc2NoZWR1bGVSZWJ1aWxkQm9keV8oKTt9fSxzZXQgdGFibGVDb2x1bW5zKGNvbHVtbnMpe2xldCBjb2x1bW5zV2l0aEV4cGFuZEJ1dHRvbnM9W107Zm9yKGxldCBpPTA7aTxjb2x1bW5zLmxlbmd0aDtpKyspe2lmKGNvbHVtbnNbaV0uc2hvd0V4cGFuZEJ1dHRvbnMpe2NvbHVtbnNXaXRoRXhwYW5kQnV0dG9ucy5wdXNoKGkpO319Ci1pZihjb2x1bW5zV2l0aEV4cGFuZEJ1dHRvbnMubGVuZ3RoPT09MCl7Y29sdW1uc1dpdGhFeHBhbmRCdXR0b25zPVswXTt9Ci1mb3IobGV0IGk9MDtpPGNvbHVtbnMubGVuZ3RoO2krKyl7Y29uc3QgY29sSW5mbz1jb2x1bW5zW2ldO2lmKGNvbEluZm8ud2lkdGg9PT11bmRlZmluZWQpY29udGludWU7Y29uc3QgaGFzRXhwYW5kQnV0dG9uPWNvbHVtbnNXaXRoRXhwYW5kQnV0dG9ucy5pbmNsdWRlcyhpKTtjb25zdCB3PWNvbEluZm8ud2lkdGg7aWYodyl7aWYoL1xkK3B4Ly50ZXN0KHcpKXtjb250aW51ZTt9ZWxzZSBpZigvXGQrJS8udGVzdCh3KSl7aWYoaGFzRXhwYW5kQnV0dG9uKXt0aHJvdyBuZXcgRXJyb3IoJ0NvbHVtbnMgY2Fubm90IGJlICUtc2l6ZWQgYW5kIGhvc3QgJysnIGFuIGV4cGFuZCBidXR0b24nKTt9fWVsc2V7dGhyb3cgbmV3IEVycm9yKCdVbnJlY29nbml6ZWQgd2lkdGggc3RyaW5nJyk7fX19Ci1sZXQgc29ydEluZGV4PXVuZGVmaW5lZDtjb25zdCBjdXJyZW50U29ydENvbHVtbj10aGlzLnRhYmxlQ29sdW1uc1t0aGlzLnNvcnRDb2x1bW5JbmRleF9dO2lmKGN1cnJlbnRTb3J0Q29sdW1uKXtmb3IoY29uc3RbaSxjb2x1bW5db2YgY29sdW1ucy5lbnRyaWVzKCkpe2lmKGN1cnJlbnRTb3J0Q29sdW1uLnRpdGxlPT09Y29sdW1uLnRpdGxlKXtzb3J0SW5kZXg9aTticmVhazt9fX0KLXRoaXMudGFibGVDb2x1bW5zXz1jb2x1bW5zO3RoaXMuaGVhZGVyQ2VsbHNfPVtdO3RoaXMuY29sdW1uc1dpdGhFeHBhbmRCdXR0b25zXz1jb2x1bW5zV2l0aEV4cGFuZEJ1dHRvbnM7dGhpcy5zY2hlZHVsZVJlYnVpbGRIZWFkZXJzXygpO3RoaXMuc29ydENvbHVtbkluZGV4PXNvcnRJbmRleDt0aGlzLnRhYmxlUm93cz10aGlzLnRhYmxlUm93c187fSxnZXQgdGFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMudGFibGVDb2x1bW5zXzt9LHNldCB0YWJsZVJvd3Mocm93cyl7dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb189dW5kZWZpbmVkO3RoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF89dW5kZWZpbmVkO3RoaXMudGFibGVSb3dzXz1yb3dzO3RoaXMudGFibGVSb3dzSW5mb189bmV3IFdlYWtNYXAoKTt0aGlzLnNjaGVkdWxlUmVidWlsZEJvZHlfKCk7fSxnZXQgdGFibGVSb3dzKCl7cmV0dXJuIHRoaXMudGFibGVSb3dzXzt9LHNldCBmb290ZXJSb3dzKHJvd3Mpe3RoaXMudGFibGVGb290ZXJSb3dzXz1yb3dzO3RoaXMudGFibGVGb290ZXJSb3dzSW5mb189bmV3IFdlYWtNYXAoKTt0aGlzLnNjaGVkdWxlUmVidWlsZEZvb3Rlcl8oKTt9LGdldCBmb290ZXJSb3dzKCl7cmV0dXJuIHRoaXMudGFibGVGb290ZXJSb3dzXzt9LGdldCB1c2VyQ2FuTW9kaWZ5U29ydE9yZGVyKCl7cmV0dXJuIHRoaXMudXNlckNhbk1vZGlmeVNvcnRPcmRlcl87fSxzZXQgdXNlckNhbk1vZGlmeVNvcnRPcmRlcih1c2VyQ2FuTW9kaWZ5U29ydE9yZGVyKXtjb25zdCBuZXdVc2VyQ2FuTW9kaWZ5U29ydE9yZGVyPSEhdXNlckNhbk1vZGlmeVNvcnRPcmRlcjtpZihuZXdVc2VyQ2FuTW9kaWZ5U29ydE9yZGVyPT09dGhpcy51c2VyQ2FuTW9kaWZ5U29ydE9yZGVyXyl7cmV0dXJuO30KLXRoaXMudXNlckNhbk1vZGlmeVNvcnRPcmRlcl89bmV3VXNlckNhbk1vZGlmeVNvcnRPcmRlcjt0aGlzLnNjaGVkdWxlUmVidWlsZEhlYWRlcnNfKCk7fSxzZXQgc29ydENvbHVtbkluZGV4KG51bWJlcil7aWYobnVtYmVyPT09dGhpcy5zb3J0Q29sdW1uSW5kZXhfKXJldHVybjtpZihudW1iZXIhPT11bmRlZmluZWQpe2lmKHRoaXMudGFibGVDb2x1bW5zXy5sZW5ndGg8PW51bWJlcil7dGhyb3cgbmV3IEVycm9yKCdDb2x1bW4gbnVtYmVyICcrbnVtYmVyKycgaXMgb3V0IG9mIGJvdW5kcy4nKTt9Ci1pZighdGhpcy50YWJsZUNvbHVtbnNfW251bWJlcl0uY21wKXt0aHJvdyBuZXcgRXJyb3IoJ0NvbHVtbiAnK251bWJlcisnIGRvZXMgbm90IGhhdmUgYSBjb21wYXJhdG9yLicpO319Ci10aGlzLnNvcnRDb2x1bW5JbmRleF89bnVtYmVyO3RoaXMudXBkYXRlSGVhZGVyQXJyb3dzXygpO3RoaXMuc2NoZWR1bGVSZWJ1aWxkQm9keV8oKTt0aGlzLmRpc3BhdGNoU29ydGluZ0NoYW5nZWRFdmVudF8oKTt9LGdldCBzb3J0Q29sdW1uSW5kZXgoKXtyZXR1cm4gdGhpcy5zb3J0Q29sdW1uSW5kZXhfO30sc2V0IHNvcnREZXNjZW5kaW5nKHZhbHVlKXtjb25zdCBuZXdWYWx1ZT0hIXZhbHVlO2lmKG5ld1ZhbHVlIT09dGhpcy5zb3J0RGVzY2VuZGluZ18pe3RoaXMuc29ydERlc2NlbmRpbmdfPW5ld1ZhbHVlO3RoaXMudXBkYXRlSGVhZGVyQXJyb3dzXygpO3RoaXMuc2NoZWR1bGVSZWJ1aWxkQm9keV8oKTt0aGlzLmRpc3BhdGNoU29ydGluZ0NoYW5nZWRFdmVudF8oKTt9fSxnZXQgc29ydERlc2NlbmRpbmcoKXtyZXR1cm4gdGhpcy5zb3J0RGVzY2VuZGluZ187fSx1cGRhdGVIZWFkZXJBcnJvd3NfKCl7Zm9yKGxldCBpPTA7aTx0aGlzLmhlYWRlckNlbGxzXy5sZW5ndGg7aSsrKXtjb25zdCBoZWFkZXJDZWxsPXRoaXMuaGVhZGVyQ2VsbHNfW2ldO2NvbnN0IGlzQ29sdW1uQ3VycmVudGx5U29ydGVkPWk9PT10aGlzLnNvcnRDb2x1bW5JbmRleF87aWYoIXRoaXMudGFibGVDb2x1bW5zX1tpXS5jbXB8fCghdGhpcy51c2VyQ2FuTW9kaWZ5U29ydE9yZGVyXyYmIWlzQ29sdW1uQ3VycmVudGx5U29ydGVkKSl7aGVhZGVyQ2VsbC5zaWRlQ29udGVudD0nJztjb250aW51ZTt9Ci1pZighaXNDb2x1bW5DdXJyZW50bHlTb3J0ZWQpe2hlYWRlckNlbGwuc2lkZUNvbnRlbnQ9VU5TT1JURURfQVJST1c7aGVhZGVyQ2VsbC5zaWRlQ29udGVudERpc2FibGVkPWZhbHNlO2NvbnRpbnVlO30KLWhlYWRlckNlbGwuc2lkZUNvbnRlbnQ9dGhpcy5zb3J0RGVzY2VuZGluZ18/REVTQ0VORElOR19BUlJPVzpBU0NFTkRJTkdfQVJST1c7aGVhZGVyQ2VsbC5zaWRlQ29udGVudERpc2FibGVkPSF0aGlzLnVzZXJDYW5Nb2RpZnlTb3J0T3JkZXJfO319LGdlbmVyYXRlSGVhZGVyQ29sdW1uc18oKXtjb25zdCBzZWxlY3RlZFRhYmxlQ29sdW1uSW5kZXg9dGhpcy5zZWxlY3RlZFRhYmxlQ29sdW1uSW5kZXg7UG9seW1lci5kb20odGhpcy4kLmNvbHMpLnRleHRDb250ZW50PScnO2ZvcihsZXQgaT0wO2k8dGhpcy50YWJsZUNvbHVtbnNfLmxlbmd0aDsrK2kpe2NvbnN0IGNvbEVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY29sJyk7aWYoaT09PXNlbGVjdGVkVGFibGVDb2x1bW5JbmRleCl7Y29sRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJyx0cnVlKTt9Ci1Qb2x5bWVyLmRvbSh0aGlzLiQuY29scykuYXBwZW5kQ2hpbGQoY29sRWxlbWVudCk7fQotdGhpcy5oZWFkZXJDZWxsc189W107UG9seW1lci5kb20odGhpcy4kLmhlYWQpLnRleHRDb250ZW50PScnO2lmKCF0aGlzLnNob3dIZWFkZXJfKXJldHVybjtjb25zdCB0cj10aGlzLmFwcGVuZE5ld0VsZW1lbnRfKHRoaXMuJC5oZWFkLCd0cicpO2ZvcihsZXQgaT0wO2k8dGhpcy50YWJsZUNvbHVtbnNfLmxlbmd0aDtpKyspe2NvbnN0IHRkPXRoaXMuYXBwZW5kTmV3RWxlbWVudF8odHIsJ3RkJyk7Y29uc3QgaGVhZGVyQ2VsbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLXRhYmxlLWhlYWRlci1jZWxsJyk7aGVhZGVyQ2VsbC5jb2x1bW49dGhpcy50YWJsZUNvbHVtbnNfW2ldO2lmKHRoaXMudGFibGVDb2x1bW5zX1tpXS5jbXApe2NvbnN0IGlzQ29sdW1uQ3VycmVudGx5U29ydGVkPWk9PT10aGlzLnNvcnRDb2x1bW5JbmRleF87aWYoaXNDb2x1bW5DdXJyZW50bHlTb3J0ZWQpe2hlYWRlckNlbGwuc2lkZUNvbnRlbnQ9dGhpcy5zb3J0RGVzY2VuZGluZ18/REVTQ0VORElOR19BUlJPVzpBU0NFTkRJTkdfQVJST1c7aWYoIXRoaXMudXNlckNhbk1vZGlmeVNvcnRPcmRlcl8pe2hlYWRlckNlbGwuc2lkZUNvbnRlbnREaXNhYmxlZD10cnVlO319Ci1pZih0aGlzLnVzZXJDYW5Nb2RpZnlTb3J0T3JkZXJfKXtQb2x5bWVyLmRvbSh0ZCkuY2xhc3NMaXN0LmFkZCgnc2Vuc2l0aXZlJyk7aWYoIWlzQ29sdW1uQ3VycmVudGx5U29ydGVkKXtoZWFkZXJDZWxsLnNpZGVDb250ZW50PVVOU09SVEVEX0FSUk9XO30KLWhlYWRlckNlbGwudGFwQ2FsbGJhY2s9dGhpcy5jcmVhdGVTb3J0Q2FsbGJhY2tfKGkpO319Ci1Qb2x5bWVyLmRvbSh0ZCkuYXBwZW5kQ2hpbGQoaGVhZGVyQ2VsbCk7dGhpcy5oZWFkZXJDZWxsc18ucHVzaChoZWFkZXJDZWxsKTt9fSxhcHBseVNpemVzXygpe2lmKHRoaXMudGFibGVSb3dzXy5sZW5ndGg9PT0wJiYhdGhpcy5zaG93SGVhZGVyKXJldHVybjtsZXQgcm93VG9SZW1vdmVTaXppbmc7bGV0IHJvd1RvU2l6ZTtpZih0aGlzLnNob3dIZWFkZXIpe3Jvd1RvU2l6ZT1Qb2x5bWVyLmRvbSh0aGlzLiQuaGVhZCkuY2hpbGRyZW5bMF07cm93VG9SZW1vdmVTaXppbmc9UG9seW1lci5kb20odGhpcy4kLmJvZHkpLmNoaWxkcmVuWzBdO31lbHNle3Jvd1RvU2l6ZT1Qb2x5bWVyLmRvbSh0aGlzLiQuYm9keSkuY2hpbGRyZW5bMF07cm93VG9SZW1vdmVTaXppbmc9UG9seW1lci5kb20odGhpcy4kLmhlYWQpLmNoaWxkcmVuWzBdO30KLWZvcihsZXQgaT0wO2k8dGhpcy50YWJsZUNvbHVtbnNfLmxlbmd0aDtpKyspe2lmKHJvd1RvUmVtb3ZlU2l6aW5nJiZQb2x5bWVyLmRvbShyb3dUb1JlbW92ZVNpemluZykuY2hpbGRyZW5baV0pe2NvbnN0IHRkVG9SZW1vdmVTaXppbmc9UG9seW1lci5kb20ocm93VG9SZW1vdmVTaXppbmcpLmNoaWxkcmVuW2ldO3RkVG9SZW1vdmVTaXppbmcuc3R5bGUubWluV2lkdGg9Jyc7dGRUb1JlbW92ZVNpemluZy5zdHlsZS53aWR0aD0nJzt9Ci1jb25zdCB0ZD1Qb2x5bWVyLmRvbShyb3dUb1NpemUpLmNoaWxkcmVuW2ldO2xldCBkZWx0YTtpZih0aGlzLmNvbHVtbnNXaXRoRXhwYW5kQnV0dG9uc18uaW5jbHVkZXMoaSkpe3RkLnN0eWxlLnBhZGRpbmdMZWZ0PXRoaXMuYmFzaWNJbmRlbnRhdGlvbl8rJ3B4JztkZWx0YT10aGlzLmJhc2ljSW5kZW50YXRpb25fKydweCc7fWVsc2V7ZGVsdGE9dW5kZWZpbmVkO30KLWZ1bmN0aW9uIGNhbGMoYmFzZSxkZWx0YSl7aWYoZGVsdGEpe3JldHVybidjYWxjKCcrYmFzZSsnIC0gJytkZWx0YSsnKSc7fQotcmV0dXJuIGJhc2U7fQotY29uc3Qgdz10aGlzLnRhYmxlQ29sdW1uc19baV0ud2lkdGg7aWYodyl7aWYoL1xkK3B4Ly50ZXN0KHcpKXt0ZC5zdHlsZS5taW5XaWR0aD1jYWxjKHcsZGVsdGEpO31lbHNlIGlmKC9cZCslLy50ZXN0KHcpKXt0ZC5zdHlsZS53aWR0aD13O31lbHNle3Rocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIHdpZHRoIHN0cmluZzogJyt3KTt9fX19LGNyZWF0ZVNvcnRDYWxsYmFja18oY29sdW1uTnVtYmVyKXtyZXR1cm4gZnVuY3Rpb24oKXtpZighdGhpcy51c2VyQ2FuTW9kaWZ5U29ydE9yZGVyXylyZXR1cm47Y29uc3QgcHJldmlvdXNJbmRleD10aGlzLnNvcnRDb2x1bW5JbmRleDt0aGlzLnNvcnRDb2x1bW5JbmRleD1jb2x1bW5OdW1iZXI7aWYocHJldmlvdXNJbmRleCE9PWNvbHVtbk51bWJlcil7dGhpcy5zb3J0RGVzY2VuZGluZz1mYWxzZTt9ZWxzZXt0aGlzLnNvcnREZXNjZW5kaW5nPSF0aGlzLnNvcnREZXNjZW5kaW5nO319LmJpbmQodGhpcyk7fSxnZW5lcmF0ZVRhYmxlUm93Tm9kZXNfKHRhYmxlU2VjdGlvbix1c2VyUm93cyxyb3dJbmZvTWFwLGluZGVudGF0aW9uLGxhc3RBZGRlZFJvdyxwYXJlbnRSb3dJbmZvKXtpZih0aGlzLnNvcnRDb2x1bW5JbmRleF8hPT11bmRlZmluZWQmJnRhYmxlU2VjdGlvbj09PXRoaXMuJC5ib2R5KXt1c2VyUm93cz11c2VyUm93cy5zbGljZSgpO3VzZXJSb3dzLnNvcnQoZnVuY3Rpb24ocm93QSxyb3dCKXtsZXQgYz10aGlzLnRhYmxlQ29sdW1uc19bdGhpcy5zb3J0Q29sdW1uSW5kZXhfXS5jbXAocm93QSxyb3dCKTtpZih0aGlzLnNvcnREZXNjZW5kaW5nXyl7Yz0tYzt9Ci1yZXR1cm4gYzt9LmJpbmQodGhpcykpO30KLWZvcihsZXQgaT0wO2k8dXNlclJvd3MubGVuZ3RoO2krKyl7Y29uc3QgdXNlclJvdz11c2VyUm93c1tpXTtjb25zdCByb3dJbmZvPXRoaXMuZ2V0T3JDcmVhdGVSb3dJbmZvRm9yXyhyb3dJbmZvTWFwLHVzZXJSb3cscGFyZW50Um93SW5mbyk7Y29uc3QgaHRtbE5vZGU9dGhpcy5nZXRIVE1MTm9kZUZvclJvd0luZm9fKHRhYmxlU2VjdGlvbixyb3dJbmZvLHJvd0luZm9NYXAsaW5kZW50YXRpb24pO2lmKGxhc3RBZGRlZFJvdz09PXVuZGVmaW5lZCl7UG9seW1lci5kb20odGFibGVTZWN0aW9uKS5pbnNlcnRCZWZvcmUoaHRtbE5vZGUsUG9seW1lci5kb20odGFibGVTZWN0aW9uKS5maXJzdENoaWxkKTt9ZWxzZXtjb25zdCBuZXh0U2libGluZ09mTGFzdEFkZGVkPVBvbHltZXIuZG9tKGxhc3RBZGRlZFJvdykubmV4dFNpYmxpbmc7UG9seW1lci5kb20odGFibGVTZWN0aW9uKS5pbnNlcnRCZWZvcmUoaHRtbE5vZGUsbmV4dFNpYmxpbmdPZkxhc3RBZGRlZCk7fQotbGFzdEFkZGVkUm93PWh0bWxOb2RlO2lmKCFyb3dJbmZvLmlzRXhwYW5kZWQpY29udGludWU7bGFzdEFkZGVkUm93PXRoaXMuZ2VuZXJhdGVUYWJsZVJvd05vZGVzXyh0YWJsZVNlY3Rpb24sdXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXSxyb3dJbmZvTWFwLGluZGVudGF0aW9uKzEsbGFzdEFkZGVkUm93LHJvd0luZm8pO30KLXJldHVybiBsYXN0QWRkZWRSb3c7fSxnZXRPckNyZWF0ZVJvd0luZm9Gb3JfKHJvd0luZm9NYXAsdXNlclJvdyxwYXJlbnRSb3dJbmZvKXtsZXQgcm93SW5mbz11bmRlZmluZWQ7aWYocm93SW5mb01hcC5oYXModXNlclJvdykpe3Jvd0luZm89cm93SW5mb01hcC5nZXQodXNlclJvdyk7fWVsc2V7cm93SW5mbz17dXNlclJvdyxodG1sTm9kZTp1bmRlZmluZWQscGFyZW50Um93SW5mb307cm93SW5mb01hcC5zZXQodXNlclJvdyxyb3dJbmZvKTt9Ci1yb3dJbmZvLmlzRXhwYW5kZWQ9dGhpcy5nZXRFeHBhbmRlZEZvclVzZXJSb3dfKHVzZXJSb3cpO3JldHVybiByb3dJbmZvO30sY3VzdG9taXplVGFibGVSb3dfKHVzZXJSb3csdHJFbGVtZW50KXtpZighdGhpcy5jdXN0b21pemVUYWJsZVJvd0NhbGxiYWNrXylyZXR1cm47dGhpcy5jdXN0b21pemVUYWJsZVJvd0NhbGxiYWNrXyh1c2VyUm93LHRyRWxlbWVudCk7fSxnZXQgYmFzaWNJbmRlbnRhdGlvbl8oKXtpZih0aGlzLmNvbXB1dGVkRm9udFNpemVQeF89PT11bmRlZmluZWQpe3RoaXMuY29tcHV0ZWRGb250U2l6ZVB4Xz1wYXJzZUludChnZXRDb21wdXRlZFN0eWxlKHRoaXMpLmZvbnRTaXplKXx8MTY7fQotcmV0dXJuIHRoaXMuY29tcHV0ZWRGb250U2l6ZVB4Xy0yO30sZ2V0SFRNTE5vZGVGb3JSb3dJbmZvXyh0YWJsZVNlY3Rpb24scm93SW5mbyxyb3dJbmZvTWFwLGluZGVudGF0aW9uKXtpZihyb3dJbmZvLmh0bWxOb2RlKXt0aGlzLmN1c3RvbWl6ZVRhYmxlUm93Xyhyb3dJbmZvLnVzZXJSb3cscm93SW5mby5odG1sTm9kZSk7cmV0dXJuIHJvd0luZm8uaHRtbE5vZGU7fQotY29uc3QgSU5ERU5UX1NQQUNFPWluZGVudGF0aW9uKjE2O2NvbnN0IElOREVOVF9TUEFDRV9OT19CVVRUT049aW5kZW50YXRpb24qMTYrdGhpcy5iYXNpY0luZGVudGF0aW9uXztjb25zdCB0ckVsZW1lbnQ9dGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7cm93SW5mby5odG1sTm9kZT10ckVsZW1lbnQ7cm93SW5mby5pbmRlbnRhdGlvbj1pbmRlbnRhdGlvbjt0ckVsZW1lbnQucm93SW5mbz1yb3dJbmZvO3RoaXMuY3VzdG9taXplVGFibGVSb3dfKHJvd0luZm8udXNlclJvdyx0ckVsZW1lbnQpO2NvbnN0IGlzQm9keVJvdz10YWJsZVNlY3Rpb249PT10aGlzLiQuYm9keTtjb25zdCBpc0V4cGFuZGFibGVSb3c9cm93SW5mby51c2VyUm93W3RoaXMuc3ViUm93c1Byb3BlcnR5TmFtZV9dJiZyb3dJbmZvLnVzZXJSb3dbdGhpcy5zdWJSb3dzUHJvcGVydHlOYW1lX10ubGVuZ3RoO2ZvcihsZXQgaT0wO2k8dGhpcy50YWJsZUNvbHVtbnNfLmxlbmd0aDspe2NvbnN0IHRkPXRoaXMuYXBwZW5kTmV3RWxlbWVudF8odHJFbGVtZW50LCd0ZCcpO3RkLmNvbHVtbkluZGV4PWk7Y29uc3QgY29sdW1uPXRoaXMudGFibGVDb2x1bW5zX1tpXTtjb25zdCB2YWx1ZT1jb2x1bW4udmFsdWUocm93SW5mby51c2VyUm93KTtjb25zdCBjb2xTcGFuPWNvbHVtbi5jb2xTcGFuP2NvbHVtbi5jb2xTcGFuOjE7dGQuc3R5bGUuY29sU3Bhbj1jb2xTcGFuO3N3aXRjaChjb2x1bW4uYWxpZ24pe2Nhc2UgdW5kZWZpbmVkOmNhc2UgQ29sdW1uQWxpZ25tZW50LkxFRlQ6YnJlYWs7Y2FzZSBDb2x1bW5BbGlnbm1lbnQuUklHSFQ6dGQuc3R5bGUudGV4dEFsaWduPSdyaWdodCc7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYWxpZ25tZW50IG9mIGNvbHVtbiBhdCBpbmRleD0nK2krJzogJytjb2x1bW4uYWxpZ24pO30KLWlmKHRoaXMuZG9lc0NvbHVtbkluZGV4U3VwcG9ydFNlbGVjdGlvbihpKSl7UG9seW1lci5kb20odGQpLmNsYXNzTGlzdC5hZGQoJ3N1cHBvcnRzLXNlbGVjdGlvbicpO30KLWlmKHRoaXMuY29sdW1uc1dpdGhFeHBhbmRCdXR0b25zXy5pbmNsdWRlcyhpKSl7aWYocm93SW5mby51c2VyUm93W3RoaXMuc3ViUm93c1Byb3BlcnR5TmFtZV9dJiZyb3dJbmZvLnVzZXJSb3dbdGhpcy5zdWJSb3dzUHJvcGVydHlOYW1lX10ubGVuZ3RoPjApe3RkLnN0eWxlLnBhZGRpbmdMZWZ0PUlOREVOVF9TUEFDRSsncHgnO3RkLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO2NvbnN0IGV4cGFuZEJ1dHRvbj10aGlzLmFwcGVuZE5ld0VsZW1lbnRfKHRkLCdleHBhbmQtYnV0dG9uJyk7UG9seW1lci5kb20oZXhwYW5kQnV0dG9uKS50ZXh0Q29udGVudD1SSUdIVF9BUlJPVztpZihyb3dJbmZvLmlzRXhwYW5kZWQpe1BvbHltZXIuZG9tKGV4cGFuZEJ1dHRvbikuY2xhc3NMaXN0LmFkZCgnYnV0dG9uLWV4cGFuZGVkJyk7fX1lbHNle3RkLnN0eWxlLnBhZGRpbmdMZWZ0PUlOREVOVF9TUEFDRV9OT19CVVRUT04rJ3B4Jzt9fQotaWYodmFsdWUhPT11bmRlZmluZWQpe1BvbHltZXIuZG9tKHRkKS5hcHBlbmRDaGlsZCh0ci51aS5iLmFzSFRNTE9yVGV4dE5vZGUodmFsdWUsdGhpcy5vd25lckRvY3VtZW50KSk7fQotdGQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGksY2xpY2tFdmVudCl7Y2xpY2tFdmVudC5wcmV2ZW50RGVmYXVsdCgpO2lmKCFpc0JvZHlSb3cmJiFpc0V4cGFuZGFibGVSb3cpcmV0dXJuO2NsaWNrRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7aWYoY2xpY2tFdmVudC50YXJnZXQudGFnTmFtZT09PSdFWFBBTkQtQlVUVE9OJyl7dGhpcy5zZXRFeHBhbmRlZEZvclVzZXJSb3dfKHRhYmxlU2VjdGlvbixyb3dJbmZvTWFwLHJvd0luZm8udXNlclJvdywhcm93SW5mby5pc0V4cGFuZGVkKTtyZXR1cm47fQotaWYoaXNCb2R5Um93JiZ0aGlzLnNlbGVjdGlvbk1vZGVfIT09U2VsZWN0aW9uTW9kZS5OT05FKXtsZXQgc2hvdWxkU2VsZWN0PWZhbHNlO2xldCBzaG91bGRGb2N1cz1mYWxzZTtzd2l0Y2godGhpcy5zZWxlY3Rpb25Nb2RlXyl7Y2FzZSBTZWxlY3Rpb25Nb2RlLlJPVzpzaG91bGRTZWxlY3Q9dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18hPT1yb3dJbmZvO3Nob3VsZEZvY3VzPXRydWU7YnJlYWs7Y2FzZSBTZWxlY3Rpb25Nb2RlLkNFTEw6aWYodGhpcy5kb2VzQ29sdW1uSW5kZXhTdXBwb3J0U2VsZWN0aW9uKGkpKXtzaG91bGRTZWxlY3Q9dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18hPT1yb3dJbmZvfHx0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfIT09aTtzaG91bGRGb2N1cz10cnVlO30KLWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlbGVjdGlvbiBtb2RlICcrCi10aGlzLnNlbGVjdGlvbk1vZGVfKTt9Ci1pZihzaG91bGRGb2N1cyl7dGhpcy5mb2N1cygpO30KLWlmKHNob3VsZFNlbGVjdCl7dGhpcy5kaWRUYWJsZVJvd0luZm9HZXRDbGlja2VkXyhyb3dJbmZvLGkpO3JldHVybjt9fQotaWYoaXNFeHBhbmRhYmxlUm93KXt0aGlzLnNldEV4cGFuZGVkRm9yVXNlclJvd18odGFibGVTZWN0aW9uLHJvd0luZm9NYXAscm93SW5mby51c2VyUm93LCFyb3dJbmZvLmlzRXhwYW5kZWQpO319LmJpbmQodGhpcyxpKSk7aWYoaXNCb2R5Um93KXt0ZC5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsZnVuY3Rpb24oaSxlKXtlLnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuZGlzcGF0Y2hTdGVwSW50b0V2ZW50Xyhyb3dJbmZvLGkpO30uYmluZCh0aGlzLGkpKTt9Ci1pKz1jb2xTcGFuO30KLXJldHVybiByb3dJbmZvLmh0bWxOb2RlO30scmVtb3ZlU3ViTm9kZXNfKHRhYmxlU2VjdGlvbixyb3dJbmZvLHJvd0luZm9NYXApe2lmKHJvd0luZm8udXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXT09PXVuZGVmaW5lZClyZXR1cm47Zm9yKGxldCBpPTA7aTxyb3dJbmZvLnVzZXJSb3dbdGhpcy5zdWJSb3dzUHJvcGVydHlOYW1lX10ubGVuZ3RoO2krKyl7Y29uc3Qgc3ViUm93PXJvd0luZm8udXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXVtpXTtjb25zdCBzdWJSb3dJbmZvPXJvd0luZm9NYXAuZ2V0KHN1YlJvdyk7aWYoIXN1YlJvd0luZm8pY29udGludWU7Y29uc3Qgc3ViTm9kZT1zdWJSb3dJbmZvLmh0bWxOb2RlO2lmKHN1Yk5vZGUmJlBvbHltZXIuZG9tKHN1Yk5vZGUpLnBhcmVudE5vZGU9PT10YWJsZVNlY3Rpb24pe1BvbHltZXIuZG9tKHRhYmxlU2VjdGlvbikucmVtb3ZlQ2hpbGQoc3ViTm9kZSk7dGhpcy5yZW1vdmVTdWJOb2Rlc18odGFibGVTZWN0aW9uLHN1YlJvd0luZm8scm93SW5mb01hcCk7fX19LHNjaGVkdWxlUmVidWlsZEhlYWRlcnNfKCl7dGhpcy5oZWFkZXJEaXJ0eV89dHJ1ZTt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LHNjaGVkdWxlUmVidWlsZEJvZHlfKCl7dGhpcy5ib2R5RGlydHlfPXRydWU7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxzY2hlZHVsZVJlYnVpbGRGb290ZXJfKCl7dGhpcy5mb290ZXJEaXJ0eV89dHJ1ZTt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LHNjaGVkdWxlUmVidWlsZF8oKXtpZih0aGlzLnJlYnVpbGRQZW5kaW5nXylyZXR1cm47dGhpcy5yZWJ1aWxkUGVuZGluZ189dHJ1ZTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5yZWJ1aWxkUGVuZGluZ189ZmFsc2U7dGhpcy5yZWJ1aWxkKCk7fS5iaW5kKHRoaXMpLDApO30scmVidWlsZElmTmVlZGVkXygpe3RoaXMucmVidWlsZCgpO30scmVidWlsZCgpe2NvbnN0IHdhc0JvZHlPckhlYWRlckRpcnR5PXRoaXMuaGVhZGVyRGlydHlffHx0aGlzLmJvZHlEaXJ0eV87aWYodGhpcy5oZWFkZXJEaXJ0eV8pe3RoaXMuZ2VuZXJhdGVIZWFkZXJDb2x1bW5zXygpO3RoaXMuaGVhZGVyRGlydHlfPWZhbHNlO30KLWlmKHRoaXMuYm9keURpcnR5Xyl7UG9seW1lci5kb20odGhpcy4kLmJvZHkpLnRleHRDb250ZW50PScnO3RoaXMuZ2VuZXJhdGVUYWJsZVJvd05vZGVzXyh0aGlzLiQuYm9keSx0aGlzLnRhYmxlUm93c18sdGhpcy50YWJsZVJvd3NJbmZvXywwLHVuZGVmaW5lZCx1bmRlZmluZWQpO2lmKHRoaXMudGFibGVSb3dzXy5sZW5ndGg9PT0wJiZ0aGlzLmVtcHR5VmFsdWVfIT09dW5kZWZpbmVkKXtjb25zdCB0ckVsZW1lbnQ9dGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7UG9seW1lci5kb20odGhpcy4kLmJvZHkpLmFwcGVuZENoaWxkKHRyRWxlbWVudCk7UG9seW1lci5kb20odHJFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdlbXB0eS1yb3cnKTtjb25zdCB0ZD10aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtQb2x5bWVyLmRvbSh0ckVsZW1lbnQpLmFwcGVuZENoaWxkKHRkKTt0ZC5jb2xTcGFuPXRoaXMudGFibGVDb2x1bW5zXy5sZW5ndGg7Y29uc3QgZW1wdHlWYWx1ZT10aGlzLmVtcHR5VmFsdWVfO1BvbHltZXIuZG9tKHRkKS5hcHBlbmRDaGlsZCh0ci51aS5iLmFzSFRNTE9yVGV4dE5vZGUoZW1wdHlWYWx1ZSx0aGlzLm93bmVyRG9jdW1lbnQpKTt9Ci10aGlzLmJvZHlEaXJ0eV89ZmFsc2U7fQotaWYod2FzQm9keU9ySGVhZGVyRGlydHkpdGhpcy5hcHBseVNpemVzXygpO2lmKHRoaXMuZm9vdGVyRGlydHlfKXtQb2x5bWVyLmRvbSh0aGlzLiQuZm9vdCkudGV4dENvbnRlbnQ9Jyc7dGhpcy5nZW5lcmF0ZVRhYmxlUm93Tm9kZXNfKHRoaXMuJC5mb290LHRoaXMudGFibGVGb290ZXJSb3dzXyx0aGlzLnRhYmxlRm9vdGVyUm93c0luZm9fLDAsdW5kZWZpbmVkLHVuZGVmaW5lZCk7aWYodGhpcy50YWJsZUZvb3RlclJvd3NJbmZvXy5sZW5ndGgpe1BvbHltZXIuZG9tKHRoaXMuJC5ib2R5KS5jbGFzc0xpc3QuYWRkKCdoYXMtZm9vdGVyJyk7fWVsc2V7UG9seW1lci5kb20odGhpcy4kLmJvZHkpLmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1mb290ZXInKTt9Ci10aGlzLmZvb3RlckRpcnR5Xz1mYWxzZTt9fSxhcHBlbmROZXdFbGVtZW50XyhwYXJlbnQsdGFnTmFtZSl7Y29uc3QgZWxlbWVudD1wYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1BvbHltZXIuZG9tKHBhcmVudCkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7cmV0dXJuIGVsZW1lbnQ7fSxnZXRFeHBhbmRlZEZvclRhYmxlUm93KHVzZXJSb3cpe3RoaXMucmVidWlsZElmTmVlZGVkXygpO2NvbnN0IHJvd0luZm89dGhpcy50YWJsZVJvd3NJbmZvXy5nZXQodXNlclJvdyk7aWYocm93SW5mbz09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdSb3cgaGFzIG5vdCBiZWVuIHNlZW4sIG11c3QgZXhwYW5kIGl0cyBwYXJlbnRzJyk7fQotcmV0dXJuIHJvd0luZm8uaXNFeHBhbmRlZDt9LGdldEV4cGFuZGVkRm9yVXNlclJvd18odXNlclJvdyl7aWYodXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXT09PXVuZGVmaW5lZCl7cmV0dXJuIGZhbHNlO30KLWlmKHVzZXJSb3dbdGhpcy5zdWJSb3dzUHJvcGVydHlOYW1lX10ubGVuZ3RoPT09MCl7cmV0dXJuIGZhbHNlO30KLWlmKHVzZXJSb3cuaXNFeHBhbmRlZCl7cmV0dXJuIHRydWU7fQotaWYoKHVzZXJSb3cuaXNFeHBhbmRlZCE9PXVuZGVmaW5lZCkmJih1c2VyUm93LmlzRXhwYW5kZWQ9PT1mYWxzZSkpe3JldHVybiBmYWxzZTt9Ci1jb25zdCByb3dJbmZvPXRoaXMudGFibGVSb3dzSW5mb18uZ2V0KHVzZXJSb3cpO2lmKHJvd0luZm8mJnJvd0luZm8uaXNFeHBhbmRlZCl7cmV0dXJuIHRydWU7fQotaWYodGhpcy5kZWZhdWx0RXhwYW5zaW9uU3RhdGVDYWxsYmFja189PT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9Ci1sZXQgcGFyZW50VXNlclJvdz11bmRlZmluZWQ7aWYocm93SW5mbyYmcm93SW5mby5wYXJlbnRSb3dJbmZvKXtwYXJlbnRVc2VyUm93PXJvd0luZm8ucGFyZW50Um93SW5mby51c2VyUm93O30KLXJldHVybiB0aGlzLmRlZmF1bHRFeHBhbnNpb25TdGF0ZUNhbGxiYWNrXyh1c2VyUm93LHBhcmVudFVzZXJSb3cpO30sc2V0RXhwYW5kZWRGb3JUYWJsZVJvdyh1c2VyUm93LGV4cGFuZGVkKXt0aGlzLnJlYnVpbGRJZk5lZWRlZF8oKTtjb25zdCByb3dJbmZvPXRoaXMudGFibGVSb3dzSW5mb18uZ2V0KHVzZXJSb3cpO2lmKHJvd0luZm89PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignUm93IGhhcyBub3QgYmVlbiBzZWVuLCBtdXN0IGV4cGFuZCBpdHMgcGFyZW50cycpO30KLXJldHVybiB0aGlzLnNldEV4cGFuZGVkRm9yVXNlclJvd18odGhpcy4kLmJvZHksdGhpcy50YWJsZVJvd3NJbmZvXyx1c2VyUm93LGV4cGFuZGVkKTt9LHNldEV4cGFuZGVkRm9yVXNlclJvd18odGFibGVTZWN0aW9uLHJvd0luZm9NYXAsdXNlclJvdyxleHBhbmRlZCl7dGhpcy5yZWJ1aWxkSWZOZWVkZWRfKCk7Y29uc3Qgcm93SW5mbz1yb3dJbmZvTWFwLmdldCh1c2VyUm93KTtpZihyb3dJbmZvPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1JvdyBoYXMgbm90IGJlZW4gc2VlbiwgbXVzdCBleHBhbmQgaXRzIHBhcmVudHMnKTt9Ci1jb25zdCB3YXNFeHBhbmRlZD1yb3dJbmZvLmlzRXhwYW5kZWQ7cm93SW5mby5pc0V4cGFuZGVkPSEhZXhwYW5kZWQ7aWYocm93SW5mby5odG1sTm9kZT09PXVuZGVmaW5lZClyZXR1cm47aWYocm93SW5mby5odG1sTm9kZS5wYXJlbnRFbGVtZW50IT09dGFibGVTZWN0aW9uKXtyZXR1cm47fQotY29uc3QgZXhwYW5kQnV0dG9uPVBvbHltZXIuZG9tKHJvd0luZm8uaHRtbE5vZGUpLnF1ZXJ5U2VsZWN0b3IoJ2V4cGFuZC1idXR0b24nKTtpZihyb3dJbmZvLmlzRXhwYW5kZWQpe1BvbHltZXIuZG9tKGV4cGFuZEJ1dHRvbikuY2xhc3NMaXN0LmFkZCgnYnV0dG9uLWV4cGFuZGVkJyk7Y29uc3QgbGFzdEFkZGVkUm93PXJvd0luZm8uaHRtbE5vZGU7aWYocm93SW5mby51c2VyUm93W3RoaXMuc3ViUm93c1Byb3BlcnR5TmFtZV9dKXt0aGlzLmdlbmVyYXRlVGFibGVSb3dOb2Rlc18odGFibGVTZWN0aW9uLHJvd0luZm8udXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXSxyb3dJbmZvTWFwLHJvd0luZm8uaW5kZW50YXRpb24rMSxsYXN0QWRkZWRSb3cscm93SW5mbyk7fX1lbHNle1BvbHltZXIuZG9tKGV4cGFuZEJ1dHRvbikuY2xhc3NMaXN0LnJlbW92ZSgnYnV0dG9uLWV4cGFuZGVkJyk7dGhpcy5yZW1vdmVTdWJOb2Rlc18odGFibGVTZWN0aW9uLHJvd0luZm8scm93SW5mb01hcCk7fQotaWYod2FzRXhwYW5kZWQhPT1yb3dJbmZvLmlzRXhwYW5kZWQpe2NvbnN0IGU9bmV3IHRyLmIuRXZlbnQoJ3Jvdy1leHBhbmRlZC1jaGFuZ2VkJyk7ZS5yb3c9cm93SW5mby51c2VyUm93O3RoaXMuZGlzcGF0Y2hFdmVudChlKTt9Ci10aGlzLm1heWJlVXBkYXRlU2VsZWN0ZWRSb3dfKCk7fSxnZXQgc2VsZWN0aW9uTW9kZSgpe3JldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVfO30sc2V0IHNlbGVjdGlvbk1vZGUoc2VsZWN0aW9uTW9kZSl7aWYoIVNlbGVjdGlvbk1vZGVWYWx1ZXMuaGFzKHNlbGVjdGlvbk1vZGUpKXt0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2VsZWN0aW9uIG1vZGUgJytzZWxlY3Rpb25Nb2RlKTt9Ci10aGlzLnJlYnVpbGRJZk5lZWRlZF8oKTt0aGlzLnNlbGVjdGlvbk1vZGVfPXNlbGVjdGlvbk1vZGU7dGhpcy5kaWRTZWxlY3Rpb25TdGF0ZUNoYW5nZV8oKTt9LGdldCByb3dIaWdobGlnaHRTdHlsZSgpe3JldHVybiB0aGlzLnJvd0hpZ2hsaWdodFN0eWxlXzt9LHNldCByb3dIaWdobGlnaHRTdHlsZShyb3dIaWdobGlnaHRTdHlsZSl7aWYoIUhpZ2hsaWdodFN0eWxlVmFsdWVzLmhhcyhyb3dIaWdobGlnaHRTdHlsZSkpe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCByb3cgaGlnaGxpZ2h0IHN0eWxlICcrcm93SGlnaGxpZ2h0U3R5bGUpO30KLXRoaXMucmVidWlsZElmTmVlZGVkXygpO3RoaXMucm93SGlnaGxpZ2h0U3R5bGVfPXJvd0hpZ2hsaWdodFN0eWxlO3RoaXMuZGlkU2VsZWN0aW9uU3RhdGVDaGFuZ2VfKCk7fSxnZXQgcmVzb2x2ZWRSb3dIaWdobGlnaHRTdHlsZSgpe2lmKHRoaXMucm93SGlnaGxpZ2h0U3R5bGVfIT09SGlnaGxpZ2h0U3R5bGUuREVGQVVMVCl7cmV0dXJuIHRoaXMucm93SGlnaGxpZ2h0U3R5bGVfO30KLXN3aXRjaCh0aGlzLnNlbGVjdGlvbk1vZGVfKXtjYXNlIFNlbGVjdGlvbk1vZGUuTk9ORTpyZXR1cm4gSGlnaGxpZ2h0U3R5bGUuTk9ORTtjYXNlIFNlbGVjdGlvbk1vZGUuUk9XOnJldHVybiBIaWdobGlnaHRTdHlsZS5EQVJLO2Nhc2UgU2VsZWN0aW9uTW9kZS5DRUxMOnJldHVybiBIaWdobGlnaHRTdHlsZS5MSUdIVDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW52YWxpZCBzZWxlY3Rpb24gbW9kZSAnK3NlbGVjdGlvbk1vZGUpO319LGdldCBjZWxsSGlnaGxpZ2h0U3R5bGUoKXtyZXR1cm4gdGhpcy5jZWxsSGlnaGxpZ2h0U3R5bGVfO30sc2V0IGNlbGxIaWdobGlnaHRTdHlsZShjZWxsSGlnaGxpZ2h0U3R5bGUpe2lmKCFIaWdobGlnaHRTdHlsZVZhbHVlcy5oYXMoY2VsbEhpZ2hsaWdodFN0eWxlKSl7dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNlbGwgaGlnaGxpZ2h0IHN0eWxlICcrY2VsbEhpZ2hsaWdodFN0eWxlKTt9Ci10aGlzLnJlYnVpbGRJZk5lZWRlZF8oKTt0aGlzLmNlbGxIaWdobGlnaHRTdHlsZV89Y2VsbEhpZ2hsaWdodFN0eWxlO3RoaXMuZGlkU2VsZWN0aW9uU3RhdGVDaGFuZ2VfKCk7fSxnZXQgcmVzb2x2ZWRDZWxsSGlnaGxpZ2h0U3R5bGUoKXtpZih0aGlzLmNlbGxIaWdobGlnaHRTdHlsZV8hPT1IaWdobGlnaHRTdHlsZS5ERUZBVUxUKXtyZXR1cm4gdGhpcy5jZWxsSGlnaGxpZ2h0U3R5bGVfO30KLXN3aXRjaCh0aGlzLnNlbGVjdGlvbk1vZGVfKXtjYXNlIFNlbGVjdGlvbk1vZGUuTk9ORTpjYXNlIFNlbGVjdGlvbk1vZGUuUk9XOnJldHVybiBIaWdobGlnaHRTdHlsZS5OT05FO2Nhc2UgU2VsZWN0aW9uTW9kZS5DRUxMOnJldHVybiBIaWdobGlnaHRTdHlsZS5EQVJLO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlbGVjdGlvbiBtb2RlICcrc2VsZWN0aW9uTW9kZSk7fX0sc2V0SGlnaGxpZ2h0U3R5bGVfKGhpZ2hsaWdodEF0dHJpYnV0ZSxyZXNvbHZlZEhpZ2hsaWdodFN0eWxlKXtzd2l0Y2gocmVzb2x2ZWRIaWdobGlnaHRTdHlsZSl7Y2FzZSBIaWdobGlnaHRTdHlsZS5OT05FOlBvbHltZXIuZG9tKHRoaXMuJC5ib2R5KS5yZW1vdmVBdHRyaWJ1dGUoaGlnaGxpZ2h0QXR0cmlidXRlKTticmVhaztjYXNlIEhpZ2hsaWdodFN0eWxlLkxJR0hUOlBvbHltZXIuZG9tKHRoaXMuJC5ib2R5KS5zZXRBdHRyaWJ1dGUoaGlnaGxpZ2h0QXR0cmlidXRlLCdsaWdodCcpO2JyZWFrO2Nhc2UgSGlnaGxpZ2h0U3R5bGUuREFSSzpQb2x5bWVyLmRvbSh0aGlzLiQuYm9keSkuc2V0QXR0cmlidXRlKGhpZ2hsaWdodEF0dHJpYnV0ZSwnZGFyaycpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlc29sdmVkIGhpZ2hsaWdodCBzdHlsZSAnKwotcmVzb2x2ZWRIaWdobGlnaHRTdHlsZSk7fX0sZGlkU2VsZWN0aW9uU3RhdGVDaGFuZ2VfKCl7dGhpcy5zZXRIaWdobGlnaHRTdHlsZV8oJ3Jvdy1oaWdobGlnaHQtc3R5bGUnLHRoaXMucmVzb2x2ZWRSb3dIaWdobGlnaHRTdHlsZSk7dGhpcy5zZXRIaWdobGlnaHRTdHlsZV8oJ2NlbGwtaGlnaGxpZ2h0LXN0eWxlJyx0aGlzLnJlc29sdmVkQ2VsbEhpZ2hsaWdodFN0eWxlKTt0aGlzLnJlbW92ZVNlbGVjdGVkU3RhdGVfKCk7c3dpdGNoKHRoaXMuc2VsZWN0aW9uTW9kZV8pe2Nhc2UgU2VsZWN0aW9uTW9kZS5ST1c6UG9seW1lci5kb20odGhpcy4kLmJvZHkpLnNldEF0dHJpYnV0ZSgnc2VsZWN0aW9uLW1vZGUnLCdyb3cnKTtQb2x5bWVyLmRvbSh0aGlzLiQuYm9keSkuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsMCk7dGhpcy5zZWxlY3RlZENvbHVtbkluZGV4Xz11bmRlZmluZWQ7YnJlYWs7Y2FzZSBTZWxlY3Rpb25Nb2RlLkNFTEw6UG9seW1lci5kb20odGhpcy4kLmJvZHkpLnNldEF0dHJpYnV0ZSgnc2VsZWN0aW9uLW1vZGUnLCdjZWxsJyk7UG9seW1lci5kb20odGhpcy4kLmJvZHkpLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLDApO2lmKHRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fJiZ0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfPT09dW5kZWZpbmVkKXtjb25zdCBpPXRoaXMuZ2V0Rmlyc3RTZWxlY3RhYmxlQ29sdW1uSW5kZXhfKCk7aWYoaT09PS0xKXt0aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXz11bmRlZmluZWQ7fWVsc2V7dGhpcy5zZWxlY3RlZENvbHVtbkluZGV4Xz1pO319Ci1icmVhaztjYXNlIFNlbGVjdGlvbk1vZGUuTk9ORTpQb2x5bWVyLmRvbSh0aGlzLiQuYm9keSkucmVtb3ZlQXR0cmlidXRlKCdzZWxlY3Rpb24tbW9kZScpO1BvbHltZXIuZG9tKHRoaXMuJC5ib2R5KS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7dGhpcy4kLmJvZHkuYmx1cigpO3RoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fPXVuZGVmaW5lZDt0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfPXVuZGVmaW5lZDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW52YWxpZCBzZWxlY3Rpb24gbW9kZSAnK3RoaXMuc2VsZWN0aW9uTW9kZV8pO30KLXRoaXMubWF5YmVVcGRhdGVTZWxlY3RlZFJvd18oKTt9LG1heWJlVXBkYXRlU2VsZWN0ZWRSb3dfKCl7aWYodGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb189PT11bmRlZmluZWQpcmV0dXJuO2Z1bmN0aW9uIGlzVmlzaWJsZShyb3dJbmZvKXtpZighcm93SW5mby5odG1sTm9kZSlyZXR1cm4gZmFsc2U7cmV0dXJuISFyb3dJbmZvLmh0bWxOb2RlLnBhcmVudEVsZW1lbnQ7fQotaWYoaXNWaXNpYmxlKHRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fKSl7dGhpcy51cGRhdGVTZWxlY3RlZFN0YXRlXygpO3JldHVybjt9Ci10aGlzLnJlbW92ZVNlbGVjdGVkU3RhdGVfKCk7bGV0IGN1clJvd0luZm89dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb187d2hpbGUoY3VyUm93SW5mbyYmIWlzVmlzaWJsZShjdXJSb3dJbmZvKSl7Y3VyUm93SW5mbz1jdXJSb3dJbmZvLnBhcmVudFJvd0luZm87fQotdGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb189Y3VyUm93SW5mbztpZih0aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXyl7dGhpcy51cGRhdGVTZWxlY3RlZFN0YXRlXygpO31lbHNle3RoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF89dW5kZWZpbmVkO319LGRpZFRhYmxlUm93SW5mb0dldENsaWNrZWRfKHJvd0luZm8sY29sdW1uSW5kZXgpe3N3aXRjaCh0aGlzLnNlbGVjdGlvbk1vZGVfKXtjYXNlIFNlbGVjdGlvbk1vZGUuTk9ORTpyZXR1cm47Y2FzZSBTZWxlY3Rpb25Nb2RlLkNFTEw6aWYoIXRoaXMuZG9lc0NvbHVtbkluZGV4U3VwcG9ydFNlbGVjdGlvbihjb2x1bW5JbmRleCkpe3JldHVybjt9Ci1pZih0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXghPT1jb2x1bW5JbmRleCl7dGhpcy5zZWxlY3RlZENvbHVtbkluZGV4PWNvbHVtbkluZGV4O30KLWNhc2UgU2VsZWN0aW9uTW9kZS5ST1c6aWYodGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18hPT1yb3dJbmZvKXt0aGlzLnNlbGVjdGVkVGFibGVSb3c9cm93SW5mby51c2VyUm93O319fSxkaXNwYXRjaFN0ZXBJbnRvRXZlbnRfKHJvd0luZm8sY29sdW1uSW5kZXgpe2NvbnN0IGU9bmV3IHRyLmIuRXZlbnQoJ3N0ZXAtaW50bycpO2UudGFibGVSb3c9cm93SW5mby51c2VyUm93O2UudGFibGVDb2x1bW49dGhpcy50YWJsZUNvbHVtbnNfW2NvbHVtbkluZGV4XTtlLmNvbHVtbkluZGV4PWNvbHVtbkluZGV4O3RoaXMuZGlzcGF0Y2hFdmVudChlKTt9LGdldCBzZWxlY3RlZENlbGwoKXtjb25zdCByb3c9dGhpcy5zZWxlY3RlZFRhYmxlUm93O2NvbnN0IGNvbHVtbkluZGV4PXRoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleDtpZihyb3c9PT11bmRlZmluZWR8fGNvbHVtbkluZGV4PT09dW5kZWZpbmVkfHx0aGlzLnRhYmxlQ29sdW1uc18ubGVuZ3RoPD1jb2x1bW5JbmRleCl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1jb25zdCBjb2x1bW49dGhpcy50YWJsZUNvbHVtbnNfW2NvbHVtbkluZGV4XTtyZXR1cm57cm93LGNvbHVtbix2YWx1ZTpjb2x1bW4udmFsdWUocm93KX07fSxnZXQgc2VsZWN0ZWRUYWJsZUNvbHVtbkluZGV4KCl7Y29uc3QgY29scz1Qb2x5bWVyLmRvbSh0aGlzLiQuY29scykuY2hpbGRyZW47Zm9yKGxldCBpPTA7aTxjb2xzLmxlbmd0aDsrK2kpe2lmKGNvbHNbaV0uZ2V0QXR0cmlidXRlKCdzZWxlY3RlZCcpKXtyZXR1cm4gaTt9fQotcmV0dXJuIHVuZGVmaW5lZDt9LHNldCBzZWxlY3RlZFRhYmxlQ29sdW1uSW5kZXgoc2VsZWN0ZWRJbmRleCl7Y29uc3QgY29scz1Qb2x5bWVyLmRvbSh0aGlzLiQuY29scykuY2hpbGRyZW47Zm9yKGxldCBpPTA7aTxjb2xzLmxlbmd0aDsrK2kpe2lmKGk9PT1zZWxlY3RlZEluZGV4KXtjb2xzW2ldLnNldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnLHRydWUpO31lbHNle2NvbHNbaV0ucmVtb3ZlQXR0cmlidXRlKCdzZWxlY3RlZCcpO319fSxnZXQgc2VsZWN0ZWRUYWJsZVJvdygpe2lmKCF0aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXy51c2VyUm93O30sc2V0IHNlbGVjdGVkVGFibGVSb3codXNlclJvdyl7dGhpcy5yZWJ1aWxkSWZOZWVkZWRfKCk7aWYodGhpcy5zZWxlY3Rpb25Nb2RlXz09PVNlbGVjdGlvbk1vZGUuTk9ORSl7dGhyb3cgbmV3IEVycm9yKCdTZWxlY3Rpb24gaXMgb2ZmLicpO30KLWxldCByb3dJbmZvO2lmKHVzZXJSb3c9PT11bmRlZmluZWQpe3Jvd0luZm89dW5kZWZpbmVkO31lbHNle3Jvd0luZm89dGhpcy50YWJsZVJvd3NJbmZvXy5nZXQodXNlclJvdyk7aWYoIXJvd0luZm8pe3Rocm93IG5ldyBFcnJvcignUm93IGhhcyBub3QgYmVlbiBzZWVuLCBtdXN0IGV4cGFuZCBpdHMgcGFyZW50cy4nKTt9fQotY29uc3QgZT10aGlzLnByZXBhcmVUb0NoYW5nZVNlbGVjdGlvbl8oKTtpZighcm93SW5mbyl7dGhpcy5zZWxlY3RlZENvbHVtbkluZGV4Xz11bmRlZmluZWQ7fWVsc2V7c3dpdGNoKHRoaXMuc2VsZWN0aW9uTW9kZV8pe2Nhc2UgU2VsZWN0aW9uTW9kZS5ST1c6dGhpcy5zZWxlY3RlZENvbHVtbkluZGV4Xz11bmRlZmluZWQ7YnJlYWs7Y2FzZSBTZWxlY3Rpb25Nb2RlLkNFTEw6aWYodGhpcy5zZWxlY3RlZENvbHVtbkluZGV4Xz09PXVuZGVmaW5lZCl7Y29uc3QgaT10aGlzLmdldEZpcnN0U2VsZWN0YWJsZUNvbHVtbkluZGV4XygpO2lmKGk9PT0tMSl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCBhIHNlbGVjdGFibGUgY29sdW1uLicpO30KLXRoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF89aTt9Ci1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW52YWxpZCBzZWxlY3Rpb24gbW9kZSAnK3RoaXMuc2VsZWN0aW9uTW9kZV8pO319Ci10aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXz1yb3dJbmZvO3RoaXMudXBkYXRlU2VsZWN0ZWRTdGF0ZV8oKTt0aGlzLmRpc3BhdGNoRXZlbnQoZSk7fSxwcmVwYXJlVG9DaGFuZ2VTZWxlY3Rpb25fKCl7Y29uc3QgZT1uZXcgdHIuYi5FdmVudCgnc2VsZWN0aW9uLWNoYW5nZWQnKTtjb25zdCBwcmV2aW91c1NlbGVjdGVkUm93SW5mbz10aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXztpZihwcmV2aW91c1NlbGVjdGVkUm93SW5mbyl7ZS5wcmV2aW91c1NlbGVjdGVkVGFibGVSb3c9cHJldmlvdXNTZWxlY3RlZFJvd0luZm8udXNlclJvdzt9ZWxzZXtlLnByZXZpb3VzU2VsZWN0ZWRUYWJsZVJvdz11bmRlZmluZWQ7fQotdGhpcy5yZW1vdmVTZWxlY3RlZFN0YXRlXygpO3JldHVybiBlO30scmVtb3ZlU2VsZWN0ZWRTdGF0ZV8oKXt0aGlzLnNldFNlbGVjdGVkU3RhdGVfKGZhbHNlKTt9LHVwZGF0ZVNlbGVjdGVkU3RhdGVfKCl7dGhpcy5zZXRTZWxlY3RlZFN0YXRlXyh0cnVlKTt9LHNldFNlbGVjdGVkU3RhdGVfKHNlbGVjdCl7aWYodGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb189PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IHJvd05vZGU9dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18uaHRtbE5vZGU7aWYoc2VsZWN0KXtQb2x5bWVyLmRvbShyb3dOb2RlKS5zZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJyx0cnVlKTt9ZWxzZXtQb2x5bWVyLmRvbShyb3dOb2RlKS5yZW1vdmVBdHRyaWJ1dGUoJ3NlbGVjdGVkJyk7fQotY29uc3QgY2VsbE5vZGU9UG9seW1lci5kb20ocm93Tm9kZSkuY2hpbGRyZW5bdGhpcy5zZWxlY3RlZENvbHVtbkluZGV4X107aWYoIWNlbGxOb2RlKXJldHVybjtpZihzZWxlY3Qpe1BvbHltZXIuZG9tKGNlbGxOb2RlKS5zZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJyx0cnVlKTt9ZWxzZXtQb2x5bWVyLmRvbShjZWxsTm9kZSkucmVtb3ZlQXR0cmlidXRlKCdzZWxlY3RlZCcpO319LGRvZXNDb2x1bW5JbmRleFN1cHBvcnRTZWxlY3Rpb24oY29sdW1uSW5kZXgpe2NvbnN0IGNvbHVtbkluZm89dGhpcy50YWJsZUNvbHVtbnNfW2NvbHVtbkluZGV4XTtjb25zdCBzY3M9Y29sdW1uSW5mby5zdXBwb3J0c0NlbGxTZWxlY3Rpb247aWYoc2NzPT09ZmFsc2UpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlO30sZ2V0Rmlyc3RTZWxlY3RhYmxlQ29sdW1uSW5kZXhfKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnRhYmxlQ29sdW1uc18ubGVuZ3RoO2krKyl7aWYodGhpcy5kb2VzQ29sdW1uSW5kZXhTdXBwb3J0U2VsZWN0aW9uKGkpKXtyZXR1cm4gaTt9fQotcmV0dXJuLTE7fSxnZXRTZWxlY3RhYmxlTm9kZUdpdmVuVGFibGVSb3dOb2RlXyhodG1sTm9kZSl7c3dpdGNoKHRoaXMuc2VsZWN0aW9uTW9kZV8pe2Nhc2UgU2VsZWN0aW9uTW9kZS5ST1c6cmV0dXJuIGh0bWxOb2RlO2Nhc2UgU2VsZWN0aW9uTW9kZS5DRUxMOnJldHVybiBQb2x5bWVyLmRvbShodG1sTm9kZSkuY2hpbGRyZW5bdGhpcy5zZWxlY3RlZENvbHVtbkluZGV4X107ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2VsZWN0aW9uIG1vZGUgJyt0aGlzLnNlbGVjdGlvbk1vZGVfKTt9fSxnZXQgc2VsZWN0ZWRDb2x1bW5JbmRleCgpe2lmKHRoaXMuc2VsZWN0aW9uTW9kZV8hPT1TZWxlY3Rpb25Nb2RlLkNFTEwpe3JldHVybiB1bmRlZmluZWQ7fQotcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF87fSxzZXQgc2VsZWN0ZWRDb2x1bW5JbmRleChzZWxlY3RlZENvbHVtbkluZGV4KXt0aGlzLnJlYnVpbGRJZk5lZWRlZF8oKTtpZih0aGlzLnNlbGVjdGlvbk1vZGVfPT09U2VsZWN0aW9uTW9kZS5OT05FKXt0aHJvdyBuZXcgRXJyb3IoJ1NlbGVjdGlvbiBpcyBvZmYuJyk7fQotaWYoc2VsZWN0ZWRDb2x1bW5JbmRleDwwfHxzZWxlY3RlZENvbHVtbkluZGV4Pj10aGlzLnRhYmxlQ29sdW1uc18ubGVuZ3RoKXt0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTt9Ci1pZighdGhpcy5kb2VzQ29sdW1uSW5kZXhTdXBwb3J0U2VsZWN0aW9uKHNlbGVjdGVkQ29sdW1uSW5kZXgpKXt0aHJvdyBuZXcgRXJyb3IoJ1NlbGVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgY29sdW1uJyk7fQotY29uc3QgZT10aGlzLnByZXBhcmVUb0NoYW5nZVNlbGVjdGlvbl8oKTtpZih0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfPT09dW5kZWZpbmVkKXt0aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXz11bmRlZmluZWQ7fWVsc2UgaWYoIXRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fKXtpZih0aGlzLnRhYmxlUm93c18ubGVuZ3RoPT09MCl7dGhyb3cgbmV3IEVycm9yKCdObyBhdmFpbGFibGUgcm93IHRvIGJlIHNlbGVjdGVkJyk7fQotdGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb189dGhpcy50YWJsZVJvd3NJbmZvXy5nZXQodGhpcy50YWJsZVJvd3NfWzBdKTt9Ci10aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfPXNlbGVjdGVkQ29sdW1uSW5kZXg7dGhpcy51cGRhdGVTZWxlY3RlZFN0YXRlXygpO3RoaXMuZGlzcGF0Y2hFdmVudChlKTt9LG9uS2V5RG93bl8oZSl7aWYodGhpcy5zZWxlY3Rpb25Nb2RlXz09PVNlbGVjdGlvbk1vZGUuTk9ORSlyZXR1cm47Y29uc3QgQ09ERV9UT19DT01NQU5EX05BTUVTPXsxMzonRU5URVInLDMyOidTUEFDRScsMzc6J0FSUk9XX0xFRlQnLDM4OidBUlJPV19VUCcsMzk6J0FSUk9XX1JJR0hUJyw0MDonQVJST1dfRE9XTid9O2NvbnN0IGNtZE5hbWU9Q09ERV9UT19DT01NQU5EX05BTUVTW2Uua2V5Q29kZV07aWYoY21kTmFtZT09PXVuZGVmaW5lZClyZXR1cm47ZS5zdG9wUHJvcGFnYXRpb24oKTtlLnByZXZlbnREZWZhdWx0KCk7dGhpcy5wZXJmb3JtS2V5Q29tbWFuZF8oY21kTmFtZSk7fSxvbkZvY3VzXyhlKXtpZih0aGlzLnNlbGVjdGlvbk1vZGVfPT09U2VsZWN0aW9uTW9kZS5OT05FfHx0aGlzLnNlbGVjdGVkVGFibGVSb3d8fHRoaXMudGFibGVSb3dzXy5sZW5ndGg9PT0wKXtyZXR1cm47fQotaWYodGhpcy5zZWxlY3Rpb25Nb2RlXz09PVNlbGVjdGlvbk1vZGUuQ0VMTCYmdGhpcy5nZXRGaXJzdFNlbGVjdGFibGVDb2x1bW5JbmRleF8oKT09PS0xKXtyZXR1cm47fQotdGhpcy5zZWxlY3RlZFRhYmxlUm93PXRoaXMudGFibGVSb3dzX1swXTt9LGZvY3VzKCl7dGhpcy4kLmJvZHkuZm9jdXMoKTt0aGlzLm9uRm9jdXNfKCk7fSxibHVyKCl7dGhpcy4kLmJvZHkuYmx1cigpO30sZ2V0IGlzRm9jdXNlZCgpe3JldHVybiB0aGlzLnJvb3QuYWN0aXZlRWxlbWVudD09PXRoaXMuJC5ib2R5O30scGVyZm9ybUtleUNvbW1hbmRfKGNtZE5hbWUpe3RoaXMucmVidWlsZElmTmVlZGVkXygpO3N3aXRjaChjbWROYW1lKXtjYXNlJ0FSUk9XX1VQJzp0aGlzLnNlbGVjdFByZXZpb3VzT3JGaXJzdFJvd0lmUG9zc2libGVfKCk7cmV0dXJuO2Nhc2UnQVJST1dfRE9XTic6dGhpcy5zZWxlY3ROZXh0T3JGaXJzdFJvd0lmUG9zc2libGVfKCk7cmV0dXJuO2Nhc2UnQVJST1dfUklHSFQnOnN3aXRjaCh0aGlzLnNlbGVjdGlvbk1vZGVfKXtjYXNlIFNlbGVjdGlvbk1vZGUuTk9ORTpyZXR1cm47Y2FzZSBTZWxlY3Rpb25Nb2RlLlJPVzp0aGlzLmV4cGFuZFJvd0FuZFNlbGVjdENoaWxkUm93SWZQb3NzaWJsZV8oKTtyZXR1cm47Y2FzZSBTZWxlY3Rpb25Nb2RlLkNFTEw6dGhpcy5zZWxlY3ROZXh0U2VsZWN0YWJsZUNlbGxUb1RoZVJpZ2h0SWZQb3NzaWJsZV8oKTtyZXR1cm47ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2VsZWN0aW9uIG1vZGUgJyt0aGlzLnNlbGVjdGlvbk1vZGVfKTt9Ci1jYXNlJ0FSUk9XX0xFRlQnOnN3aXRjaCh0aGlzLnNlbGVjdGlvbk1vZGVfKXtjYXNlIFNlbGVjdGlvbk1vZGUuTk9ORTpyZXR1cm47Y2FzZSBTZWxlY3Rpb25Nb2RlLlJPVzp0aGlzLmNvbGxhcHNlUm93T3JTZWxlY3RQYXJlbnRSb3dJZlBvc3NpYmxlXygpO3JldHVybjtjYXNlIFNlbGVjdGlvbk1vZGUuQ0VMTDp0aGlzLnNlbGVjdE5leHRTZWxlY3RhYmxlQ2VsbFRvVGhlTGVmdElmUG9zc2libGVfKCk7cmV0dXJuO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlbGVjdGlvbiBtb2RlICcrdGhpcy5zZWxlY3Rpb25Nb2RlXyk7fQotY2FzZSdTUEFDRSc6dGhpcy50b2dnbGVSb3dFeHBhbnNpb25TdGF0ZUlmUG9zc2libGVfKCk7cmV0dXJuO2Nhc2UnRU5URVInOnRoaXMuc3RlcEludG9TZWxlY3Rpb25JZlBvc3NpYmxlXygpO3JldHVybjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIGNvbW1hbmQgJytjbWROYW1lKTt9fSxzZWxlY3RQcmV2aW91c09yRmlyc3RSb3dJZlBvc3NpYmxlXygpe2NvbnN0IHByZXY9dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18/dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18uaHRtbE5vZGUucHJldmlvdXNFbGVtZW50U2libGluZzp0aGlzLiQuYm9keS5maXJzdENoaWxkO2lmKCFwcmV2KXJldHVybjtpZih0aGlzLnNlbGVjdGlvbk1vZGVfPT09U2VsZWN0aW9uTW9kZS5DRUxMJiZ0aGlzLmdldEZpcnN0U2VsZWN0YWJsZUNvbHVtbkluZGV4XygpPT09LTEpe3JldHVybjt9Ci10ci51aS5iLnNjcm9sbEludG9WaWV3SWZOZWVkZWQocHJldik7dGhpcy5zZWxlY3RlZFRhYmxlUm93PXByZXYucm93SW5mby51c2VyUm93O30sc2VsZWN0TmV4dE9yRmlyc3RSb3dJZlBvc3NpYmxlXygpe3RoaXMuZ2V0Rmlyc3RTZWxlY3RhYmxlQ29sdW1uSW5kZXhfO2NvbnN0IG5leHQ9dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18/dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18uaHRtbE5vZGUubmV4dEVsZW1lbnRTaWJsaW5nOnRoaXMuJC5ib2R5LmZpcnN0Q2hpbGQ7aWYoIW5leHQpcmV0dXJuO2lmKHRoaXMuc2VsZWN0aW9uTW9kZV89PT1TZWxlY3Rpb25Nb2RlLkNFTEwmJnRoaXMuZ2V0Rmlyc3RTZWxlY3RhYmxlQ29sdW1uSW5kZXhfKCk9PT0tMSl7cmV0dXJuO30KLXRyLnVpLmIuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChuZXh0KTt0aGlzLnNlbGVjdGVkVGFibGVSb3c9bmV4dC5yb3dJbmZvLnVzZXJSb3c7fSxleHBhbmRSb3dBbmRTZWxlY3RDaGlsZFJvd0lmUG9zc2libGVfKCl7Y29uc3Qgc2VsZWN0ZWRSb3dJbmZvPXRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fO2lmKCFzZWxlY3RlZFJvd0luZm98fHNlbGVjdGVkUm93SW5mby51c2VyUm93W3RoaXMuc3ViUm93c1Byb3BlcnR5TmFtZV9dPT09dW5kZWZpbmVkfHxzZWxlY3RlZFJvd0luZm8udXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXS5sZW5ndGg9PT0wKXtyZXR1cm47fQotaWYoIXNlbGVjdGVkUm93SW5mby5pc0V4cGFuZGVkKXt0aGlzLnNldEV4cGFuZGVkRm9yVGFibGVSb3coc2VsZWN0ZWRSb3dJbmZvLnVzZXJSb3csdHJ1ZSk7fQotdGhpcy5zZWxlY3RlZFRhYmxlUm93PXNlbGVjdGVkUm93SW5mby5odG1sTm9kZS5uZXh0RWxlbWVudFNpYmxpbmcucm93SW5mby51c2VyUm93O30sY29sbGFwc2VSb3dPclNlbGVjdFBhcmVudFJvd0lmUG9zc2libGVfKCl7Y29uc3Qgc2VsZWN0ZWRSb3dJbmZvPXRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fO2lmKCFzZWxlY3RlZFJvd0luZm8pcmV0dXJuO2lmKHNlbGVjdGVkUm93SW5mby5pc0V4cGFuZGVkKXt0aGlzLnNldEV4cGFuZGVkRm9yVGFibGVSb3coc2VsZWN0ZWRSb3dJbmZvLnVzZXJSb3csZmFsc2UpO31lbHNle2NvbnN0IHBhcmVudFJvd0luZm89c2VsZWN0ZWRSb3dJbmZvLnBhcmVudFJvd0luZm87aWYocGFyZW50Um93SW5mbyl7dGhpcy5zZWxlY3RlZFRhYmxlUm93PXBhcmVudFJvd0luZm8udXNlclJvdzt9fX0sc2VsZWN0TmV4dFNlbGVjdGFibGVDZWxsVG9UaGVSaWdodElmUG9zc2libGVfKCl7aWYoIXRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9ffHx0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfPT09dW5kZWZpbmVkKXtyZXR1cm47fQotZm9yKGxldCBpPXRoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF8rMTtpPHRoaXMudGFibGVDb2x1bW5zXy5sZW5ndGg7aSsrKXtpZih0aGlzLmRvZXNDb2x1bW5JbmRleFN1cHBvcnRTZWxlY3Rpb24oaSkpe3RoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleD1pO3JldHVybjt9fX0sc2VsZWN0TmV4dFNlbGVjdGFibGVDZWxsVG9UaGVMZWZ0SWZQb3NzaWJsZV8oKXtpZighdGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb198fHRoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF89PT11bmRlZmluZWQpe3JldHVybjt9Ci1mb3IobGV0IGk9dGhpcy5zZWxlY3RlZENvbHVtbkluZGV4Xy0xO2k+PTA7aS0tKXtpZih0aGlzLmRvZXNDb2x1bW5JbmRleFN1cHBvcnRTZWxlY3Rpb24oaSkpe3RoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleD1pO3JldHVybjt9fX0sdG9nZ2xlUm93RXhwYW5zaW9uU3RhdGVJZlBvc3NpYmxlXygpe2NvbnN0IHNlbGVjdGVkUm93SW5mbz10aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXztpZighc2VsZWN0ZWRSb3dJbmZvfHxzZWxlY3RlZFJvd0luZm8udXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXT09PXVuZGVmaW5lZHx8c2VsZWN0ZWRSb3dJbmZvLnVzZXJSb3dbdGhpcy5zdWJSb3dzUHJvcGVydHlOYW1lX10ubGVuZ3RoPT09MCl7cmV0dXJuO30KLXRoaXMuc2V0RXhwYW5kZWRGb3JUYWJsZVJvdyhzZWxlY3RlZFJvd0luZm8udXNlclJvdywhc2VsZWN0ZWRSb3dJbmZvLmlzRXhwYW5kZWQpO30sc3RlcEludG9TZWxlY3Rpb25JZlBvc3NpYmxlXygpe2lmKCF0aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXylyZXR1cm47dGhpcy5kaXNwYXRjaFN0ZXBJbnRvRXZlbnRfKHRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fLHRoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF8pO30sZGlzcGF0Y2hTb3J0aW5nQ2hhbmdlZEV2ZW50Xygpe2NvbnN0IGU9bmV3IHRyLmIuRXZlbnQoJ3NvcnQtY29sdW1uLWNoYW5nZWQnKTtlLnNvcnRDb2x1bW5JbmRleD10aGlzLnNvcnRDb2x1bW5JbmRleF87ZS5zb3J0RGVzY2VuZGluZz10aGlzLnNvcnREZXNjZW5kaW5nXzt0aGlzLmRpc3BhdGNoRXZlbnQoZSk7fX0pO30pKCk7J3VzZSBzdHJpY3QnO2NvbnN0IENvbHVtbkFsaWdubWVudD10ci51aS5iLlRhYmxlRm9ybWF0LkNvbHVtbkFsaWdubWVudDtQb2x5bWVyKHtpczondHItdWktYi10YWJsZS1oZWFkZXItY2VsbCcsY3JlYXRlZCgpe3RoaXMudGFwQ2FsbGJhY2tfPXVuZGVmaW5lZDt0aGlzLmNlbGxUaXRsZV89Jyc7dGhpcy5hbGlnbl89dW5kZWZpbmVkO3RoaXMuc2VsZWN0YWJsZV89ZmFsc2U7dGhpcy5jb2x1bW5fPXVuZGVmaW5lZDt9LHJlYWR5KCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsdGhpcy5vblRhcF8uYmluZCh0aGlzKSk7fSxzZXQgY29sdW1uKGNvbHVtbil7dGhpcy5jb2x1bW5fPWNvbHVtbjt0aGlzLmFsaWduPWNvbHVtbi5hbGlnbjt0aGlzLmNlbGxUaXRsZT1jb2x1bW4udGl0bGU7fSxnZXQgY29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uXzt9LHNldCBjZWxsVGl0bGUodmFsdWUpe3RoaXMuY2VsbFRpdGxlXz12YWx1ZTtjb25zdCB0aXRsZU5vZGU9dHIudWkuYi5hc0hUTUxPclRleHROb2RlKHRoaXMuY2VsbFRpdGxlXyx0aGlzLm93bmVyRG9jdW1lbnQpO3RoaXMuJC50aXRsZS5pbm5lclRleHQ9Jyc7UG9seW1lci5kb20odGhpcy4kLnRpdGxlKS5hcHBlbmRDaGlsZCh0aXRsZU5vZGUpO30sZ2V0IGNlbGxUaXRsZSgpe3JldHVybiB0aGlzLmNlbGxUaXRsZV87fSxzZXQgYWxpZ24oYWxpZ24pe3N3aXRjaChhbGlnbil7Y2FzZSB1bmRlZmluZWQ6Y2FzZSBDb2x1bW5BbGlnbm1lbnQuTEVGVDp0aGlzLnN0eWxlLmp1c3RpZnlDb250ZW50PScnO2JyZWFrO2Nhc2UgQ29sdW1uQWxpZ25tZW50LlJJR0hUOnRoaXMuc3R5bGUuanVzdGlmeUNvbnRlbnQ9J2ZsZXgtZW5kJzticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW52YWxpZCBhbGlnbm1lbnQgb2YgY29sdW1uICh0aXRsZT1cJycrCi10aGlzLmNlbGxUaXRsZV8rJ1wnKTogJythbGlnbik7fQotdGhpcy5hbGlnbl89YWxpZ247fSxnZXQgYWxpZ24oKXtyZXR1cm4gdGhpcy5hbGlnbl87fSxjbGVhclNpZGVDb250ZW50KCl7UG9seW1lci5kb20odGhpcy4kLnNpZGUpLnRleHRDb250ZW50PScnO30sc2V0IHNpZGVDb250ZW50KGNvbnRlbnQpe1BvbHltZXIuZG9tKHRoaXMuJC5zaWRlKS50ZXh0Q29udGVudD1jb250ZW50O3RoaXMuJC5zaWRlLnN0eWxlLmRpc3BsYXk9Y29udGVudD8naW5saW5lJzonbm9uZSc7fSxnZXQgc2lkZUNvbnRlbnQoKXtyZXR1cm4gUG9seW1lci5kb20odGhpcy4kLnNpZGUpLnRleHRDb250ZW50O30sc2V0IHNpZGVDb250ZW50RGlzYWJsZWQoc2lkZUNvbnRlbnREaXNhYmxlZCl7dGhpcy4kLnNpZGUuY2xhc3NMaXN0LnRvZ2dsZSgnZGlzYWJsZWQnLHNpZGVDb250ZW50RGlzYWJsZWQpO30sZ2V0IHNpZGVDb250ZW50RGlzYWJsZWQoKXtyZXR1cm4gdGhpcy4kLnNpZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpO30sc2V0IHRhcENhbGxiYWNrKGNhbGxiYWNrKXt0aGlzLnN0eWxlLmN1cnNvcj0ncG9pbnRlcic7dGhpcy50YXBDYWxsYmFja189Y2FsbGJhY2s7fSxnZXQgdGFwQ2FsbGJhY2soKXtyZXR1cm4gdGhpcy50YXBDYWxsYmFja187fSxvblRhcF8oKXtpZih0aGlzLnRhcENhbGxiYWNrXyl7dGhpcy50YXBDYWxsYmFja18oKTt9fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYi5tYXRoJyxmdW5jdGlvbigpe2NsYXNzIFJ1bm5pbmdTdGF0aXN0aWNze2NvbnN0cnVjdG9yKCl7dGhpcy5tZWFuXz0wO3RoaXMuY291bnRfPTA7dGhpcy5tYXhfPS1JbmZpbml0eTt0aGlzLm1pbl89SW5maW5pdHk7dGhpcy5zdW1fPTA7dGhpcy52YXJpYW5jZV89MDt0aGlzLm1lYW5sb2dzXz0wO30KLWdldCBjb3VudCgpe3JldHVybiB0aGlzLmNvdW50Xzt9Ci1nZXQgZ2VvbWV0cmljTWVhbigpe2lmKHRoaXMubWVhbmxvZ3NfPT09dW5kZWZpbmVkKXJldHVybiAwO3JldHVybiBNYXRoLmV4cCh0aGlzLm1lYW5sb2dzXyk7fQotZ2V0IG1lYW4oKXtpZih0aGlzLmNvdW50Xz09PTApcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdGhpcy5tZWFuXzt9Ci1nZXQgbWF4KCl7cmV0dXJuIHRoaXMubWF4Xzt9Ci1nZXQgbWluKCl7cmV0dXJuIHRoaXMubWluXzt9Ci1nZXQgc3VtKCl7cmV0dXJuIHRoaXMuc3VtXzt9Ci1nZXQgdmFyaWFuY2UoKXtpZih0aGlzLmNvdW50Xz09PTApcmV0dXJuIHVuZGVmaW5lZDtpZih0aGlzLmNvdW50Xz09PTEpcmV0dXJuIDA7cmV0dXJuIHRoaXMudmFyaWFuY2VfLyh0aGlzLmNvdW50Xy0xKTt9Ci1nZXQgc3RkZGV2KCl7aWYodGhpcy5jb3VudF89PT0wKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIE1hdGguc3FydCh0aGlzLnZhcmlhbmNlKTt9Ci1hZGQoeCl7dGhpcy5jb3VudF8rKzt0aGlzLm1heF89TWF0aC5tYXgodGhpcy5tYXhfLHgpO3RoaXMubWluXz1NYXRoLm1pbih0aGlzLm1pbl8seCk7dGhpcy5zdW1fKz14O2lmKHg8PTApe3RoaXMubWVhbmxvZ3NfPXVuZGVmaW5lZDt9ZWxzZSBpZih0aGlzLm1lYW5sb2dzXyE9PXVuZGVmaW5lZCl7dGhpcy5tZWFubG9nc18rPShNYXRoLmxvZyhNYXRoLmFicyh4KSktdGhpcy5tZWFubG9nc18pL3RoaXMuY291bnQ7fQotaWYodGhpcy5jb3VudF89PT0xKXt0aGlzLm1lYW5fPXg7dGhpcy52YXJpYW5jZV89MDt9ZWxzZXtjb25zdCBvbGRNZWFuPXRoaXMubWVhbl87Y29uc3Qgb2xkVmFyaWFuY2U9dGhpcy52YXJpYW5jZV87aWYob2xkTWVhbj09PUluZmluaXR5fHxvbGRNZWFuPT09LUluZmluaXR5KXt0aGlzLm1lYW5fPXRoaXMuc3VtXy90aGlzLmNvdW50Xzt9ZWxzZXt0aGlzLm1lYW5fPW9sZE1lYW4rKHgtb2xkTWVhbikvdGhpcy5jb3VudF87fQotdGhpcy52YXJpYW5jZV89b2xkVmFyaWFuY2UrKHgtb2xkTWVhbikqKHgtdGhpcy5tZWFuXyk7fX0KLW1lcmdlKG90aGVyKXtjb25zdCByZXN1bHQ9bmV3IFJ1bm5pbmdTdGF0aXN0aWNzKCk7cmVzdWx0LmNvdW50Xz10aGlzLmNvdW50XytvdGhlci5jb3VudF87cmVzdWx0LnN1bV89dGhpcy5zdW1fK290aGVyLnN1bV87cmVzdWx0Lm1pbl89TWF0aC5taW4odGhpcy5taW5fLG90aGVyLm1pbl8pO3Jlc3VsdC5tYXhfPU1hdGgubWF4KHRoaXMubWF4XyxvdGhlci5tYXhfKTtpZihyZXN1bHQuY291bnQ9PT0wKXtyZXN1bHQubWVhbl89MDtyZXN1bHQudmFyaWFuY2VfPTA7cmVzdWx0Lm1lYW5sb2dzXz0wO31lbHNle3Jlc3VsdC5tZWFuXz1yZXN1bHQuc3VtL3Jlc3VsdC5jb3VudDtjb25zdCBkZWx0YU1lYW49KHRoaXMubWVhbnx8MCktKG90aGVyLm1lYW58fDApO3Jlc3VsdC52YXJpYW5jZV89dGhpcy52YXJpYW5jZV8rb3RoZXIudmFyaWFuY2VfKwotKHRoaXMuY291bnQqb3RoZXIuY291bnQqZGVsdGFNZWFuKmRlbHRhTWVhbi9yZXN1bHQuY291bnQpO2lmKHRoaXMubWVhbmxvZ3NfPT09dW5kZWZpbmVkfHxvdGhlci5tZWFubG9nc189PT11bmRlZmluZWQpe3Jlc3VsdC5tZWFubG9nc189dW5kZWZpbmVkO31lbHNle3Jlc3VsdC5tZWFubG9nc189KHRoaXMuY291bnQqdGhpcy5tZWFubG9nc18rCi1vdGhlci5jb3VudCpvdGhlci5tZWFubG9nc18pL3Jlc3VsdC5jb3VudDt9fQotcmV0dXJuIHJlc3VsdDt9Ci1hc0RpY3QoKXtpZighdGhpcy5jb3VudCl7cmV0dXJuW107fQotcmV0dXJuW3RoaXMuY291bnRfLHRoaXMubWF4Xyx0aGlzLm1lYW5sb2dzXyx0aGlzLm1lYW5fLHRoaXMubWluXyx0aGlzLnN1bV8sdGhpcy52YXJpYW5jZV8sXTt9Ci1zdGF0aWMgZnJvbURpY3QoZGljdCl7Y29uc3QgcmVzdWx0PW5ldyBSdW5uaW5nU3RhdGlzdGljcygpO2lmKGRpY3QubGVuZ3RoIT09Nyl7cmV0dXJuIHJlc3VsdDt9Ci1bcmVzdWx0LmNvdW50XyxyZXN1bHQubWF4XyxyZXN1bHQubWVhbmxvZ3NfLHJlc3VsdC5tZWFuXyxyZXN1bHQubWluXyxyZXN1bHQuc3VtXyxyZXN1bHQudmFyaWFuY2VfLF09ZGljdDtyZXR1cm4gcmVzdWx0O319Ci1yZXR1cm57UnVubmluZ1N0YXRpc3RpY3MsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYuZCcsZnVuY3Rpb24oKXtjbGFzcyBEaWFnbm9zdGlje2NvbnN0cnVjdG9yKCl7dGhpcy5ndWlkXz11bmRlZmluZWQ7fQotY2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKTt9Ci1jYW5BZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYyl7cmV0dXJuIGZhbHNlO30KLWFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXt0aHJvdyBuZXcgRXJyb3IoJ0Fic3RyYWN0IHZpcnR1YWwgbWV0aG9kOiBzdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgJysndGhpcyBtZXRob2QgaWYgdGhleSBvdmVycmlkZSBjYW5BZGREaWFnbm9zdGljJyk7fQotZ2V0IGd1aWQoKXtpZih0aGlzLmd1aWRfPT09dW5kZWZpbmVkKXt0aGlzLmd1aWRfPXRyLmIuR1VJRC5hbGxvY2F0ZVVVSUQ0KCk7fQotcmV0dXJuIHRoaXMuZ3VpZF87fQotc2V0IGd1aWQoZ3VpZCl7aWYodGhpcy5ndWlkXyE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcmVzZXQgZ3VpZCcpO30KLXRoaXMuZ3VpZF89Z3VpZDt9Ci1nZXQgaGFzR3VpZCgpe3JldHVybiB0aGlzLmd1aWRfIT09dW5kZWZpbmVkO30KLWFzRGljdE9yUmVmZXJlbmNlKCl7aWYodGhpcy5ndWlkXyE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMuZ3VpZF87fQotcmV0dXJuIHRoaXMuYXNEaWN0KCk7fQotYXNEaWN0KCl7Y29uc3QgcmVzdWx0PXt0eXBlOnRoaXMuY29uc3RydWN0b3IubmFtZX07aWYodGhpcy5ndWlkXyE9PXVuZGVmaW5lZCl7cmVzdWx0Lmd1aWQ9dGhpcy5ndWlkXzt9Ci10aGlzLmFzRGljdEludG9fKHJlc3VsdCk7cmV0dXJuIHJlc3VsdDt9Ci1hc0RpY3RJbnRvXyhkKXt0aHJvdyBuZXcgRXJyb3IoJ0Fic3RyYWN0IHZpcnR1YWwgbWV0aG9kOiBzdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgJysndGhpcyBtZXRob2QgaWYgdGhleSBvdmVycmlkZSBjYW5BZGREaWFnbm9zdGljJyk7fQotc3RhdGljIGZyb21EaWN0KGQpe2NvbnN0IHR5cGVJbmZvPURpYWdub3N0aWMuZmluZFR5cGVJbmZvV2l0aE5hbWUoZC50eXBlKTtpZighdHlwZUluZm8pe3Rocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIGRpYWdub3N0aWMgdHlwZTogJytkLnR5cGUpO30KLWNvbnN0IGRpYWdub3N0aWM9dHlwZUluZm8uY29uc3RydWN0b3IuZnJvbURpY3QoZCk7aWYoZC5ndWlkIT09dW5kZWZpbmVkKWRpYWdub3N0aWMuZ3VpZD1kLmd1aWQ7cmV0dXJuIGRpYWdub3N0aWM7fX0KLWNvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuQkFTSUNfUkVHSVNUUllfTU9ERSk7b3B0aW9ucy5kZWZhdWx0TWV0YWRhdGE9e307b3B0aW9ucy5tYW5kYXRvcnlCYXNlQ2xhc3M9RGlhZ25vc3RpYzt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoRGlhZ25vc3RpYyxvcHRpb25zKTtEaWFnbm9zdGljLmFkZEV2ZW50TGlzdGVuZXIoJ3dpbGwtcmVnaXN0ZXInLGZ1bmN0aW9uKGUpe2NvbnN0IGNvbnN0cnVjdG9yPWUudHlwZUluZm8uY29uc3RydWN0b3I7aWYoIShjb25zdHJ1Y3Rvci5mcm9tRGljdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKXx8KGNvbnN0cnVjdG9yLmZyb21EaWN0PT09RGlhZ25vc3RpYy5mcm9tRGljdCl8fChjb25zdHJ1Y3Rvci5mcm9tRGljdC5sZW5ndGghPT0xKSl7dGhyb3cgbmV3IEVycm9yKCdEaWFnbm9zdGljcyBtdXN0IGRlZmluZSBmcm9tRGljdChkKScpO319KTtyZXR1cm57RGlhZ25vc3RpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi5kJyxmdW5jdGlvbigpe2NsYXNzIEJyZWFrZG93biBleHRlbmRzIHRyLnYuZC5EaWFnbm9zdGlje2NvbnN0cnVjdG9yKCl7c3VwZXIoKTt0aGlzLnZhbHVlc189bmV3IE1hcCgpO3RoaXMuY29sb3JTY2hlbWU9dW5kZWZpbmVkO30KLWNsb25lKCl7Y29uc3QgY2xvbmU9bmV3IEJyZWFrZG93bigpO2Nsb25lLmNvbG9yU2NoZW1lPXRoaXMuY29sb3JTY2hlbWU7Y2xvbmUuYWRkRGlhZ25vc3RpYyh0aGlzKTtyZXR1cm4gY2xvbmU7fQotY2FuQWRkRGlhZ25vc3RpYyhvdGhlckRpYWdub3N0aWMpe3JldHVybigob3RoZXJEaWFnbm9zdGljIGluc3RhbmNlb2YgQnJlYWtkb3duKSYmKG90aGVyRGlhZ25vc3RpYy5jb2xvclNjaGVtZT09PXRoaXMuY29sb3JTY2hlbWUpKTt9Ci1hZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYyl7Zm9yKGNvbnN0W25hbWUsdmFsdWVdb2Ygb3RoZXJEaWFnbm9zdGljKXt0aGlzLnNldChuYW1lLHRoaXMuZ2V0KG5hbWUpK3ZhbHVlKTt9Ci1yZXR1cm4gdGhpczt9Ci1zZXQobmFtZSx2YWx1ZSl7aWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJ3x8dHlwZW9mIHZhbHVlIT09J251bWJlcicpe3Rocm93IG5ldyBFcnJvcignQnJlYWtkb3duIG1hcHMgZnJvbSBzdHJpbmdzIHRvIG51bWJlcnMnKTt9Ci10aGlzLnZhbHVlc18uc2V0KG5hbWUsdmFsdWUpO30KLWdldChuYW1lKXtyZXR1cm4gdGhpcy52YWx1ZXNfLmdldChuYW1lKXx8MDt9KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKGNvbnN0IHBhaXIgb2YgdGhpcy52YWx1ZXNfKXt5aWVsZCBwYWlyO319Ci1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlc18uc2l6ZTt9Ci1hc0RpY3RJbnRvXyhkKXtkLnZhbHVlcz17fTtmb3IoY29uc3RbbmFtZSx2YWx1ZV1vZiB0aGlzKXtkLnZhbHVlc1tuYW1lXT10ci5iLm51bWJlclRvSnNvbih2YWx1ZSk7fQotaWYodGhpcy5jb2xvclNjaGVtZSl7ZC5jb2xvclNjaGVtZT10aGlzLmNvbG9yU2NoZW1lO319Ci1zdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcyl7Y29uc3QgYnJlYWtkb3duPW5ldyBCcmVha2Rvd24oKTtmb3IoY29uc3RbbmFtZSx2YWx1ZV1vZiBlbnRyaWVzKXticmVha2Rvd24uc2V0KG5hbWUsdmFsdWUpO30KLXJldHVybiBicmVha2Rvd247fQotc3RhdGljIGZyb21EaWN0KGQpe2NvbnN0IGJyZWFrZG93bj1uZXcgQnJlYWtkb3duKCk7Zm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMoZC52YWx1ZXMpKXticmVha2Rvd24uc2V0KG5hbWUsdHIuYi5udW1iZXJGcm9tSnNvbih2YWx1ZSkpO30KLWlmKGQuY29sb3JTY2hlbWUpe2JyZWFrZG93bi5jb2xvclNjaGVtZT1kLmNvbG9yU2NoZW1lO30KLXJldHVybiBicmVha2Rvd247fX0KLXRyLnYuZC5EaWFnbm9zdGljLnJlZ2lzdGVyKEJyZWFrZG93bix7ZWxlbWVudE5hbWU6J3RyLXYtdWktYnJlYWtkb3duLXNwYW4nfSk7cmV0dXJue0JyZWFrZG93bix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi5kJyxmdW5jdGlvbigpe2NsYXNzIENvbGxlY3RlZFJlbGF0ZWRFdmVudFNldCBleHRlbmRzIHRyLnYuZC5EaWFnbm9zdGlje2NvbnN0cnVjdG9yKCl7c3VwZXIoKTt0aGlzLmV2ZW50U2V0c0J5Q2Fub25pY2FsVXJsXz1uZXcgTWFwKCk7fQotYXNEaWN0SW50b18oZCl7ZC5ldmVudHM9e307Zm9yKGNvbnN0W2Nhbm9uaWNhbFVybCxldmVudFNldF1vZiB0aGlzKXtkLmV2ZW50c1tjYW5vbmljYWxVcmxdPVtdO2Zvcihjb25zdCBldmVudCBvZiBldmVudFNldCl7ZC5ldmVudHNbY2Fub25pY2FsVXJsXS5wdXNoKHtzdGFibGVJZDpldmVudC5zdGFibGVJZCx0aXRsZTpldmVudC50aXRsZSxzdGFydDpldmVudC5zdGFydCxkdXJhdGlvbjpldmVudC5kdXJhdGlvbn0pO319fQotc3RhdGljIGZyb21EaWN0KGQpe2NvbnN0IHJlc3VsdD1uZXcgQ29sbGVjdGVkUmVsYXRlZEV2ZW50U2V0KCk7Zm9yKGNvbnN0W2Nhbm9uaWNhbFVybCxldmVudHNdb2YgT2JqZWN0LmVudHJpZXMoZC5ldmVudHMpKXtyZXN1bHQuZXZlbnRTZXRzQnlDYW5vbmljYWxVcmxfLnNldChjYW5vbmljYWxVcmwsZXZlbnRzLm1hcChlPT5uZXcgdHIudi5kLkV2ZW50UmVmKGUpKSk7fQotcmV0dXJuIHJlc3VsdDt9Ci1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLmV2ZW50U2V0c0J5Q2Fub25pY2FsVXJsXy5zaXplO30KLWdldChjYW5vbmljYWxVcmwpe3JldHVybiB0aGlzLmV2ZW50U2V0c0J5Q2Fub25pY2FsVXJsXy5nZXQoY2Fub25pY2FsVXJsKTt9KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKGNvbnN0W2Nhbm9uaWNhbFVybCxldmVudFNldF1vZiB0aGlzLmV2ZW50U2V0c0J5Q2Fub25pY2FsVXJsXyl7eWllbGRbY2Fub25pY2FsVXJsLGV2ZW50U2V0XTt9fQotY2FuQWRkRGlhZ25vc3RpYyhvdGhlckRpYWdub3N0aWMpe3JldHVybiBvdGhlckRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuUmVsYXRlZEV2ZW50U2V0fHxvdGhlckRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuQ29sbGVjdGVkUmVsYXRlZEV2ZW50U2V0O30KLWFkZEV2ZW50U2V0Rm9yQ2Fub25pY2FsVXJsKGNhbm9uaWNhbFVybCxldmVudHMpe2xldCBteUV2ZW50U2V0PXRoaXMuZXZlbnRTZXRzQnlDYW5vbmljYWxVcmxfLmdldChjYW5vbmljYWxVcmwpO2lmKG15RXZlbnRTZXQ9PT11bmRlZmluZWQpe215RXZlbnRTZXQ9bmV3IFNldCgpO3RoaXMuZXZlbnRTZXRzQnlDYW5vbmljYWxVcmxfLnNldChjYW5vbmljYWxVcmwsbXlFdmVudFNldCk7fQotZm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50cyl7bXlFdmVudFNldC5hZGQoZXZlbnQpO319Ci1hZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYyl7aWYob3RoZXJEaWFnbm9zdGljIGluc3RhbmNlb2YgdHIudi5kLkNvbGxlY3RlZFJlbGF0ZWRFdmVudFNldCl7Zm9yKGNvbnN0W2Nhbm9uaWNhbFVybCxvdGhlckV2ZW50U2V0XW9mIG90aGVyRGlhZ25vc3RpYyl7dGhpcy5hZGRFdmVudFNldEZvckNhbm9uaWNhbFVybChjYW5vbmljYWxVcmwsb3RoZXJFdmVudFNldCk7fQotcmV0dXJuO30KLWlmKCFvdGhlckRpYWdub3N0aWMuY2Fub25pY2FsVXJsKXJldHVybjt0aGlzLmFkZEV2ZW50U2V0Rm9yQ2Fub25pY2FsVXJsKG90aGVyRGlhZ25vc3RpYy5jYW5vbmljYWxVcmwsb3RoZXJEaWFnbm9zdGljKTt9fQotdHIudi5kLkRpYWdub3N0aWMucmVnaXN0ZXIoQ29sbGVjdGVkUmVsYXRlZEV2ZW50U2V0LHtlbGVtZW50TmFtZTondHItdi11aS1jb2xsZWN0ZWQtcmVsYXRlZC1ldmVudC1zZXQtc3Bhbid9KTtyZXR1cm57Q29sbGVjdGVkUmVsYXRlZEV2ZW50U2V0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LmQnLGZ1bmN0aW9uKCl7Y2xhc3MgRGF0ZVJhbmdlIGV4dGVuZHMgdHIudi5kLkRpYWdub3N0aWN7Y29uc3RydWN0b3IobXMpe3N1cGVyKCk7dGhpcy5yYW5nZV89bmV3IHRyLmIubWF0aC5SYW5nZSgpO3RoaXMucmFuZ2VfLmFkZFZhbHVlKG1zKTt9Ci1nZXQgbWluRGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnJhbmdlXy5taW4pO30KLWdldCBtYXhEYXRlKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMucmFuZ2VfLm1heCk7fQotZ2V0IGR1cmF0aW9uTXMoKXtyZXR1cm4gdGhpcy5yYW5nZV8uZHVyYXRpb247fQotY2xvbmUoKXtjb25zdCBjbG9uZT1uZXcgdHIudi5kLkRhdGVSYW5nZSh0aGlzLnJhbmdlXy5taW4pO2Nsb25lLmFkZERpYWdub3N0aWModGhpcyk7cmV0dXJuIGNsb25lO30KLWVxdWFscyhvdGhlcil7aWYoIShvdGhlciBpbnN0YW5jZW9mIERhdGVSYW5nZSkpcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLnJhbmdlXy5lcXVhbHMob3RoZXIucmFuZ2VfKTt9Ci1jYW5BZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYyl7cmV0dXJuIG90aGVyRGlhZ25vc3RpYyBpbnN0YW5jZW9mIERhdGVSYW5nZTt9Ci1hZGREaWFnbm9zdGljKG90aGVyKXt0aGlzLnJhbmdlXy5hZGRSYW5nZShvdGhlci5yYW5nZV8pO30KLXRvU3RyaW5nKCl7Y29uc3QgbWluRGF0ZT10ci5iLmZvcm1hdERhdGUodGhpcy5taW5EYXRlKTtpZih0aGlzLmR1cmF0aW9uTXM9PT0wKXJldHVybiBtaW5EYXRlO2NvbnN0IG1heERhdGU9dHIuYi5mb3JtYXREYXRlKHRoaXMubWF4RGF0ZSk7cmV0dXJuYCR7bWluRGF0ZX0gLSAke21heERhdGV9YDt9Ci1hc0RpY3RJbnRvXyhkKXtkLm1pbj10aGlzLnJhbmdlXy5taW47aWYodGhpcy5kdXJhdGlvbk1zPT09MClyZXR1cm47ZC5tYXg9dGhpcy5yYW5nZV8ubWF4O30KLXN0YXRpYyBmcm9tRGljdChkKXtjb25zdCBkYXRlUmFuZ2U9bmV3IERhdGVSYW5nZShkLm1pbik7aWYoZC5tYXghPT11bmRlZmluZWQpZGF0ZVJhbmdlLnJhbmdlXy5hZGRWYWx1ZShkLm1heCk7cmV0dXJuIGRhdGVSYW5nZTt9fQotdHIudi5kLkRpYWdub3N0aWMucmVnaXN0ZXIoRGF0ZVJhbmdlLHtlbGVtZW50TmFtZTondHItdi11aS1kYXRlLXJhbmdlLXNwYW4nfSk7cmV0dXJue0RhdGVSYW5nZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi5kJyxmdW5jdGlvbigpe2NsYXNzIERpYWdub3N0aWNSZWZ7Y29uc3RydWN0b3IoZ3VpZCl7dGhpcy5ndWlkPWd1aWQ7fQotYXNEaWN0KCl7cmV0dXJuIHRoaXMuZ3VpZDt9Ci1hc0RpY3RPclJlZmVyZW5jZSgpe3JldHVybiB0aGlzLmFzRGljdCgpO319Ci1yZXR1cm57RGlhZ25vc3RpY1JlZix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi5kJyxmdW5jdGlvbigpe2Z1bmN0aW9uIHN0YWJsZVN0cmluZ2lmeShvYmope2xldCByZXBsYWNlcjtpZighKG9iaiBpbnN0YW5jZW9mIEFycmF5KSlyZXBsYWNlcj1PYmplY3Qua2V5cyhvYmopLnNvcnQoKTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLHJlcGxhY2VyKTt9Ci1jbGFzcyBHZW5lcmljU2V0IGV4dGVuZHMgdHIudi5kLkRpYWdub3N0aWN7Y29uc3RydWN0b3IodmFsdWVzKXtzdXBlcigpO3RoaXMudmFsdWVzXz1uZXcgU2V0KHZhbHVlcyk7fQotZ2V0IHNpemUoKXtyZXR1cm4gdGhpcy52YWx1ZXNfLnNpemU7fQotZ2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnZhbHVlc18uc2l6ZTt9KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKGNvbnN0IHZhbHVlIG9mIHRoaXMudmFsdWVzXyl7eWllbGQgdmFsdWU7fX0KLWhhcyh2YWx1ZSl7aWYodHlwZW9mIHZhbHVlIT09J29iamVjdCcpcmV0dXJuIHRoaXMudmFsdWVzXy5oYXModmFsdWUpO2NvbnN0IGpzb249SlNPTi5zdHJpbmdpZnkodmFsdWUpO2Zvcihjb25zdCB4IG9mIHRoaXMpe2lmKHR5cGVvZiB4IT09J29iamVjdCcpY29udGludWU7aWYoanNvbj09PUpTT04uc3RyaW5naWZ5KHgpKXJldHVybiB0cnVlO30KLXJldHVybiBmYWxzZTt9Ci1lcXVhbHMob3RoZXIpe2lmKCEob3RoZXIgaW5zdGFuY2VvZiBHZW5lcmljU2V0KSlyZXR1cm4gZmFsc2U7aWYodGhpcy5zaXplIT09b3RoZXIuc2l6ZSlyZXR1cm4gZmFsc2U7Zm9yKGNvbnN0IHZhbHVlIG9mIHRoaXMpe2lmKCFvdGhlci5oYXModmFsdWUpKXJldHVybiBmYWxzZTt9Ci1yZXR1cm4gdHJ1ZTt9Ci1hc0RpY3RJbnRvXyhkKXtkLnZhbHVlcz1BcnJheS5mcm9tKHRoaXMpO30KLXN0YXRpYyBmcm9tRGljdChkKXtyZXR1cm4gbmV3IEdlbmVyaWNTZXQoZC52YWx1ZXMpO30KLWNsb25lKCl7cmV0dXJuIG5ldyBHZW5lcmljU2V0KHRoaXMudmFsdWVzXyk7fQotY2FuQWRkRGlhZ25vc3RpYyhvdGhlckRpYWdub3N0aWMpe3JldHVybiBvdGhlckRpYWdub3N0aWMgaW5zdGFuY2VvZiBHZW5lcmljU2V0O30KLWFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXtjb25zdCBqc29ucz1uZXcgU2V0KCk7Zm9yKGNvbnN0IHZhbHVlIG9mIHRoaXMpe2lmKHR5cGVvZiB2YWx1ZSE9PSdvYmplY3QnKWNvbnRpbnVlO2pzb25zLmFkZChzdGFibGVTdHJpbmdpZnkodmFsdWUpKTt9Ci1mb3IoY29uc3QgdmFsdWUgb2Ygb3RoZXJEaWFnbm9zdGljKXtpZih0eXBlb2YgdmFsdWU9PT0nb2JqZWN0JyYmanNvbnMuaGFzKHN0YWJsZVN0cmluZ2lmeSh2YWx1ZSkpKXtjb250aW51ZTt9Ci10aGlzLnZhbHVlc18uYWRkKHZhbHVlKTt9fX0KLXRyLnYuZC5EaWFnbm9zdGljLnJlZ2lzdGVyKEdlbmVyaWNTZXQse2VsZW1lbnROYW1lOid0ci12LXVpLWdlbmVyaWMtc2V0LXNwYW4nfSk7cmV0dXJue0dlbmVyaWNTZXQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYuZCcsZnVuY3Rpb24oKXtjbGFzcyBHcm91cGluZ1BhdGggZXh0ZW5kcyB0ci52LmQuRGlhZ25vc3RpY3tjb25zdHJ1Y3Rvcihncm91cGluZ1BhdGgpe3N1cGVyKCk7dGhpcy5ncm91cGluZ1BhdGhfPWdyb3VwaW5nUGF0aDt9Ci1jbG9uZSgpe3JldHVybiBuZXcgR3JvdXBpbmdQYXRoKEFycmF5LmZyb20odGhpcy5ncm91cGluZ1BhdGhfKSk7fQotYWRkVG9IaXN0b2dyYW0oaGlzdCl7aGlzdC5kaWFnbm9zdGljcy5zZXQodHIudi5kLlJFU0VSVkVEX05BTUVTLkdST1VQSU5HX1BBVEgsdGhpcyk7fQotc3RhdGljIGdldEZyb21IaXN0b2dyYW0oaGlzdCl7cmV0dXJuIGhpc3QuZGlhZ25vc3RpY3MuZ2V0KHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5HUk9VUElOR19QQVRIKTt9Ci1lcXVhbHMob3RoZXIpe3JldHVybiAwPT09dHIuYi5jb21wYXJlQXJyYXlzKHRoaXMuZ3JvdXBpbmdQYXRoXyxvdGhlci5ncm91cGluZ1BhdGhfLCh4LHkpPT54LmxvY2FsZUNvbXBhcmUoeSkpO30KLWFzRGljdEludG9fKGQpe2QuZ3JvdXBpbmdQYXRoPXRoaXMuZ3JvdXBpbmdQYXRoXzt9Ci1zdGF0aWMgZnJvbURpY3QoZCl7cmV0dXJuIG5ldyBHcm91cGluZ1BhdGgoZC5ncm91cGluZ1BhdGgpO319Ci10ci52LmQuRGlhZ25vc3RpYy5yZWdpc3RlcihHcm91cGluZ1BhdGgpO3JldHVybntHcm91cGluZ1BhdGgsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYuZCcsZnVuY3Rpb24oKXtjbGFzcyBFdmVudFJlZntjb25zdHJ1Y3RvcihldmVudCl7dGhpcy5zdGFibGVJZD1ldmVudC5zdGFibGVJZDt0aGlzLnRpdGxlPWV2ZW50LnRpdGxlO3RoaXMuc3RhcnQ9ZXZlbnQuc3RhcnQ7dGhpcy5kdXJhdGlvbj1ldmVudC5kdXJhdGlvbjt0aGlzLmVuZD10aGlzLnN0YXJ0K3RoaXMuZHVyYXRpb247dGhpcy5ndWlkPXRyLmIuR1VJRC5hbGxvY2F0ZVNpbXBsZSgpO319Ci1yZXR1cm57RXZlbnRSZWYsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYuZCcsZnVuY3Rpb24oKXtjbGFzcyBSZWxhdGVkRXZlbnRTZXQgZXh0ZW5kcyB0ci52LmQuRGlhZ25vc3RpY3tjb25zdHJ1Y3RvcihvcHRfZXZlbnRzKXtzdXBlcigpO3RoaXMuZXZlbnRzQnlTdGFibGVJZF89bmV3IE1hcCgpO3RoaXMuY2Fub25pY2FsVXJsXz11bmRlZmluZWQ7aWYob3B0X2V2ZW50cyl7aWYob3B0X2V2ZW50cyBpbnN0YW5jZW9mIHRyLm1vZGVsLkV2ZW50U2V0fHxvcHRfZXZlbnRzIGluc3RhbmNlb2YgQXJyYXkpe2Zvcihjb25zdCBldmVudCBvZiBvcHRfZXZlbnRzKXt0aGlzLmFkZChldmVudCk7fX1lbHNle3RoaXMuYWRkKG9wdF9ldmVudHMpO319fQotY2xvbmUoKXtjb25zdCBjbG9uZT1uZXcgdHIudi5kLkNvbGxlY3RlZFJlbGF0ZWRFdmVudFNldCgpO2Nsb25lLmFkZERpYWdub3N0aWModGhpcyk7cmV0dXJuIGNsb25lO30KLWFkZChldmVudCl7dGhpcy5ldmVudHNCeVN0YWJsZUlkXy5zZXQoZXZlbnQuc3RhYmxlSWQsZXZlbnQpO30KLWhhcyhldmVudCl7cmV0dXJuIHRoaXMuZXZlbnRzQnlTdGFibGVJZF8uaGFzKGV2ZW50LnN0YWJsZUlkKTt9Ci1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZXZlbnRzQnlTdGFibGVJZF8uc2l6ZTt9KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKGNvbnN0IGV2ZW50IG9mIHRoaXMuZXZlbnRzQnlTdGFibGVJZF8udmFsdWVzKCkpe3lpZWxkIGV2ZW50O319Ci1nZXQgY2Fub25pY2FsVXJsKCl7cmV0dXJuIHRoaXMuY2Fub25pY2FsVXJsXzt9Ci1yZXNvbHZlKG1vZGVsLG9wdF9yZXF1aXJlZCl7Zm9yKGNvbnN0W3N0YWJsZUlkLHZhbHVlXW9mIHRoaXMuZXZlbnRzQnlTdGFibGVJZF8pe2lmKCEodmFsdWUgaW5zdGFuY2VvZiB0ci52LmQuRXZlbnRSZWYpKWNvbnRpbnVlO2NvbnN0IGV2ZW50PW1vZGVsLmdldEV2ZW50QnlTdGFibGVJZChzdGFibGVJZCk7aWYoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5FdmVudCl7dGhpcy5ldmVudHNCeVN0YWJsZUlkXy5zZXQoc3RhYmxlSWQsZXZlbnQpO31lbHNlIGlmKG9wdF9yZXF1aXJlZCl7dGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBFdmVudCAnK3N0YWJsZUlkKTt9fX0KLWFzRGljdEludG9fKGQpe2QuZXZlbnRzPVtdO2Zvcihjb25zdCBldmVudCBvZiB0aGlzKXtkLmV2ZW50cy5wdXNoKHtzdGFibGVJZDpldmVudC5zdGFibGVJZCx0aXRsZTpldmVudC50aXRsZSxzdGFydDpldmVudC5zdGFydCxkdXJhdGlvbjpldmVudC5kdXJhdGlvbn0pO319Ci1zdGF0aWMgZnJvbURpY3QoZCl7cmV0dXJuIG5ldyBSZWxhdGVkRXZlbnRTZXQoZC5ldmVudHMubWFwKGV2ZW50PT5uZXcgdHIudi5kLkV2ZW50UmVmKGV2ZW50KSkpO319Ci10ci52LmQuRGlhZ25vc3RpYy5yZWdpc3RlcihSZWxhdGVkRXZlbnRTZXQse2VsZW1lbnROYW1lOid0ci12LXVpLXJlbGF0ZWQtZXZlbnQtc2V0LXNwYW4nfSk7cmV0dXJue1JlbGF0ZWRFdmVudFNldCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi5kJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEhpc3RvZ3JhbVJlZihndWlkKXt0aGlzLmd1aWQ9Z3VpZDt9Ci1yZXR1cm57SGlzdG9ncmFtUmVmfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYuZCcsZnVuY3Rpb24oKXtjbGFzcyBSZWxhdGVkSGlzdG9ncmFtTWFwIGV4dGVuZHMgdHIudi5kLkRpYWdub3N0aWN7Y29uc3RydWN0b3IoKXtzdXBlcigpO3RoaXMuaGlzdG9ncmFtc0J5TmFtZV89bmV3IE1hcCgpO30KLWNhbkFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXtyZXR1cm4gb3RoZXJEaWFnbm9zdGljIGluc3RhbmNlb2YgUmVsYXRlZEhpc3RvZ3JhbU1hcDt9Ci1hZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYyl7fQotbWVyZ2VSZWxhdGlvbnNoaXBzKG90aGVyRGlhZ25vc3RpYyxwYXJlbnRIaXN0LG90aGVyUGFyZW50SGlzdCl7Y29uc3QgcGFyZW50R3JvdXBpbmdQYXRoPXRyLnYuZC5Hcm91cGluZ1BhdGguZ2V0RnJvbUhpc3RvZ3JhbShwYXJlbnRIaXN0KTtmb3IoY29uc3RbbmFtZSxvdGhlclJlbGF0ZWRIaXN0XW9mIG90aGVyRGlhZ25vc3RpYyl7Y29uc3QgbWVyZ2VkVG89b3RoZXJSZWxhdGVkSGlzdC5kaWFnbm9zdGljcy5nZXQodHIudi5kLlJFU0VSVkVEX05BTUVTLk1FUkdFRF9UTyk7aWYobWVyZ2VkVG89PT11bmRlZmluZWQpY29udGludWU7Zm9yKGNvbnN0IHJlbGF0ZWRIaXN0IG9mIG1lcmdlZFRvLmhpc3RvZ3JhbXNCeU5hbWVfLnZhbHVlcygpKXtjb25zdCByZWxhdGVkR3JvdXBpbmdQYXRoPXRyLnYuZC5Hcm91cGluZ1BhdGguZ2V0RnJvbUhpc3RvZ3JhbShyZWxhdGVkSGlzdCk7aWYocmVsYXRlZEdyb3VwaW5nUGF0aD09PXVuZGVmaW5lZCljb250aW51ZTtpZighcGFyZW50R3JvdXBpbmdQYXRoLmVxdWFscyhyZWxhdGVkR3JvdXBpbmdQYXRoKSljb250aW51ZTt0aGlzLnNldChuYW1lLHJlbGF0ZWRIaXN0KTt9fX0KLWdldChuYW1lKXtyZXR1cm4gdGhpcy5oaXN0b2dyYW1zQnlOYW1lXy5nZXQobmFtZSk7fQotc2V0KG5hbWUsaGlzdCl7aWYoIShoaXN0IGluc3RhbmNlb2YgdHIudi5IaXN0b2dyYW0pJiYhKGhpc3QgaW5zdGFuY2VvZiB0ci52LmQuSGlzdG9ncmFtUmVmKSl7dGhyb3cgbmV3IEVycm9yKCdNdXN0IGJlIGluc3RhbmNlb2YgSGlzdG9ncmFtIG9yIEhpc3RvZ3JhbVJlZjogJysKLWhpc3QpO30KLXRoaXMuaGlzdG9ncmFtc0J5TmFtZV8uc2V0KG5hbWUsaGlzdCk7fQotYWRkKGhpc3Qpe3RoaXMuc2V0KGhpc3QubmFtZSxoaXN0KTt9Ci1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuaGlzdG9ncmFtc0J5TmFtZV8uc2l6ZTt9KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKGNvbnN0IHBhaXIgb2YgdGhpcy5oaXN0b2dyYW1zQnlOYW1lXyl7eWllbGQgcGFpcjt9fQotcmVzb2x2ZShoaXN0b2dyYW1zLG9wdF9yZXF1aXJlZCl7Zm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgdGhpcyl7aWYoISh2YWx1ZSBpbnN0YW5jZW9mIHRyLnYuZC5IaXN0b2dyYW1SZWYpKWNvbnRpbnVlO2NvbnN0IGd1aWQ9dmFsdWUuZ3VpZDtjb25zdCBoaXN0PWhpc3RvZ3JhbXMubG9va3VwSGlzdG9ncmFtKGd1aWQpO2lmKGhpc3QgaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbSl7dGhpcy5oaXN0b2dyYW1zQnlOYW1lXy5zZXQobmFtZSxoaXN0KTt9ZWxzZSBpZihvcHRfcmVxdWlyZWQpe3Rocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgSGlzdG9ncmFtICcrZ3VpZCk7fX19Ci1hc0RpY3RJbnRvXyhkKXtkLnZhbHVlcz17fTtmb3IoY29uc3RbbmFtZSxoaXN0XW9mIHRoaXMpe2QudmFsdWVzW25hbWVdPWhpc3QuZ3VpZDt9fQotc3RhdGljIGZyb21EaWN0KGQpe2NvbnN0IG1hcD1uZXcgUmVsYXRlZEhpc3RvZ3JhbU1hcCgpO2Zvcihjb25zdFtuYW1lLGd1aWRdb2YgT2JqZWN0LmVudHJpZXMoZC52YWx1ZXMpKXttYXAuc2V0KG5hbWUsbmV3IHRyLnYuZC5IaXN0b2dyYW1SZWYoZ3VpZCkpO30KLXJldHVybiBtYXA7fX0KLXRyLnYuZC5EaWFnbm9zdGljLnJlZ2lzdGVyKFJlbGF0ZWRIaXN0b2dyYW1NYXAse2VsZW1lbnROYW1lOid0ci12LXVpLXJlbGF0ZWQtaGlzdG9ncmFtLW1hcC1zcGFuJ30pO3JldHVybntSZWxhdGVkSGlzdG9ncmFtTWFwLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LmQnLGZ1bmN0aW9uKCl7Y29uc3QgQ09MT1JfU0NIRU1FX0NIUk9NRV9VU0VSX0ZSSUVORExZX0NBVEVHT1JZX0RSSVZFUj0nQ2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnknO2NsYXNzIFJlbGF0ZWRIaXN0b2dyYW1CcmVha2Rvd24gZXh0ZW5kcyB0ci52LmQuUmVsYXRlZEhpc3RvZ3JhbU1hcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7dGhpcy5jb2xvclNjaGVtZT11bmRlZmluZWQ7fQotY2xvbmUoKXtjb25zdCBjbG9uZT1uZXcgUmVsYXRlZEhpc3RvZ3JhbUJyZWFrZG93bigpO2Nsb25lLmNvbG9yU2NoZW1lPXRoaXMuY29sb3JTY2hlbWU7cmV0dXJuIGNsb25lO30KLWNhbkFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXtyZXR1cm4gb3RoZXJEaWFnbm9zdGljIGluc3RhbmNlb2YgUmVsYXRlZEhpc3RvZ3JhbUJyZWFrZG93biYmb3RoZXJEaWFnbm9zdGljLmNvbG9yU2NoZW1lPT09dGhpcy5jb2xvclNjaGVtZTt9Ci1zZXQobmFtZSxoaXN0KXtpZighKGhpc3QgaW5zdGFuY2VvZiB0ci52LmQuSGlzdG9ncmFtUmVmKSl7aWYoIShoaXN0IGluc3RhbmNlb2YgdHIudi5IaXN0b2dyYW0pKXt0aHJvdyBuZXcgRXJyb3IoJ1JlbGF0ZWRIaXN0b2dyYW1CcmVha2Rvd24gY2FuIG9ubHkgY29udGFpbiBIaXN0b2dyYW1zJyk7fQotaWYoKHRoaXMubGVuZ3RoPjApJiYoaGlzdC51bml0IT09dHIuYi5nZXRGaXJzdEVsZW1lbnQodGhpcylbMV0udW5pdCkpe3Rocm93IG5ldyBFcnJvcignVW5pdHMgbWlzbWF0Y2gnLHRyLmIuZ2V0Rmlyc3RFbGVtZW50KHRoaXMpWzFdLnVuaXQsaGlzdC51bml0KTt9fQotdHIudi5kLlJlbGF0ZWRIaXN0b2dyYW1NYXAucHJvdG90eXBlLnNldC5jYWxsKHRoaXMsbmFtZSxoaXN0KTt9Ci1hc0RpY3RJbnRvXyhkKXt0ci52LmQuUmVsYXRlZEhpc3RvZ3JhbU1hcC5wcm90b3R5cGUuYXNEaWN0SW50b18uY2FsbCh0aGlzLGQpO2lmKHRoaXMuY29sb3JTY2hlbWUpZC5jb2xvclNjaGVtZT10aGlzLmNvbG9yU2NoZW1lO30KLXN0YXRpYyBmcm9tRGljdChkKXtjb25zdCBkaWFnbm9zdGljPW5ldyBSZWxhdGVkSGlzdG9ncmFtQnJlYWtkb3duKCk7Zm9yKGNvbnN0W25hbWUsZ3VpZF1vZiBPYmplY3QuZW50cmllcyhkLnZhbHVlcykpe2RpYWdub3N0aWMuc2V0KG5hbWUsbmV3IHRyLnYuZC5IaXN0b2dyYW1SZWYoZ3VpZCkpO30KLWlmKGQuY29sb3JTY2hlbWUpZGlhZ25vc3RpYy5jb2xvclNjaGVtZT1kLmNvbG9yU2NoZW1lO3JldHVybiBkaWFnbm9zdGljO30KLXN0YXRpYyBidWlsZEZyb21FdmVudHMoaGlzdG9ncmFtcyxuYW1lUHJlZml4LGV2ZW50cyxjYXRlZ29yeUZvckV2ZW50LHVuaXQsb3B0X3NhbXBsZUZvckV2ZW50LG9wdF9iaW5Cb3VuZGFyaWVzLG9wdF90aGlzKXtjb25zdCBzYW1wbGVGb3JFdmVudD1vcHRfc2FtcGxlRm9yRXZlbnR8fCgoZXZlbnQpPT5ldmVudC5jcHVTZWxmVGltZSk7Y29uc3QgZGlhZ25vc3RpYz1uZXcgUmVsYXRlZEhpc3RvZ3JhbUJyZWFrZG93bigpO2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2NvbnN0IHNhbXBsZT1zYW1wbGVGb3JFdmVudC5jYWxsKG9wdF90aGlzLGV2ZW50KTtpZihzYW1wbGU9PT11bmRlZmluZWQpY29udGludWU7Y29uc3QgZXZlbnRDYXRlZ29yeT1jYXRlZ29yeUZvckV2ZW50LmNhbGwob3B0X3RoaXMsZXZlbnQpO2xldCBoaXN0PWRpYWdub3N0aWMuZ2V0KGV2ZW50Q2F0ZWdvcnkpO2lmKGhpc3Q9PT11bmRlZmluZWQpe2hpc3Q9bmV3IHRyLnYuSGlzdG9ncmFtKG5hbWVQcmVmaXgrZXZlbnRDYXRlZ29yeSx1bml0LG9wdF9iaW5Cb3VuZGFyaWVzKTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShoaXN0KTtkaWFnbm9zdGljLnNldChldmVudENhdGVnb3J5LGhpc3QpO30KLWhpc3QuYWRkU2FtcGxlKHNhbXBsZSx7cmVsYXRlZEV2ZW50czpuZXcgdHIudi5kLlJlbGF0ZWRFdmVudFNldChbZXZlbnRdKX0pO30KLXJldHVybiBkaWFnbm9zdGljO319Ci10ci52LmQuRGlhZ25vc3RpYy5yZWdpc3RlcihSZWxhdGVkSGlzdG9ncmFtQnJlYWtkb3duLHtlbGVtZW50TmFtZTondHItdi11aS1icmVha2Rvd24tc3Bhbid9KTtyZXR1cm57Q09MT1JfU0NIRU1FX0NIUk9NRV9VU0VSX0ZSSUVORExZX0NBVEVHT1JZX0RSSVZFUixSZWxhdGVkSGlzdG9ncmFtQnJlYWtkb3duLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LmQnLGZ1bmN0aW9uKCl7Y2xhc3MgUmVsYXRlZE5hbWVNYXAgZXh0ZW5kcyB0ci52LmQuRGlhZ25vc3RpY3tjb25zdHJ1Y3RvcihvcHRfaW5mbyl7c3VwZXIoKTt0aGlzLm1hcF89bmV3IE1hcCgpO30KLWNsb25lKCl7Y29uc3QgY2xvbmU9bmV3IFJlbGF0ZWROYW1lTWFwKCk7Y2xvbmUuYWRkRGlhZ25vc3RpYyh0aGlzKTtyZXR1cm4gY2xvbmU7fQotZXF1YWxzKG90aGVyKXtpZighKG90aGVyIGluc3RhbmNlb2YgUmVsYXRlZE5hbWVNYXApKXJldHVybiBmYWxzZTtjb25zdCBrZXlzMT1uZXcgU2V0KHRoaXMubWFwXy5rZXlzKCkpO2NvbnN0IGtleXMyPW5ldyBTZXQob3RoZXIubWFwXy5rZXlzKCkpO2lmKCF0ci5iLnNldHNFcXVhbChrZXlzMSxrZXlzMikpcmV0dXJuIGZhbHNlO2Zvcihjb25zdFtrZXksbmFtZV1vZiB0aGlzKXtpZihuYW1lIT09b3RoZXIuZ2V0KGtleSkpcmV0dXJuIGZhbHNlO30KLXJldHVybiB0cnVlO30KLWNhbkFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXtyZXR1cm4gb3RoZXJEaWFnbm9zdGljIGluc3RhbmNlb2YgUmVsYXRlZE5hbWVNYXA7fQotYWRkRGlhZ25vc3RpYyhvdGhlckRpYWdub3N0aWMpe2Zvcihjb25zdFtrZXksbmFtZV1vZiBvdGhlckRpYWdub3N0aWMpe2NvbnN0IGV4aXN0aW5nPXRoaXMuZ2V0KGtleSk7aWYoZXhpc3Rpbmc9PT11bmRlZmluZWQpe3RoaXMuc2V0KGtleSxuYW1lKTt9ZWxzZSBpZihleGlzdGluZyE9PW5hbWUpe3Rocm93IG5ldyBFcnJvcignSGlzdG9ncmFtIG5hbWVzIGRpZmZlcjogJytgIiR7ZXhpc3Rpbmd9IiAhPSAiJHtuYW1lfSJgKTt9fX0KLWFzRGljdEludG9fKGQpe2QubmFtZXM9e307Zm9yKGNvbnN0W2tleSxuYW1lXW9mIHRoaXMpZC5uYW1lc1trZXldPW5hbWU7fQotc2V0KGtleSxuYW1lKXt0aGlzLm1hcF8uc2V0KGtleSxuYW1lKTt9Ci1nZXQoa2V5KXtyZXR1cm4gdGhpcy5tYXBfLmdldChrZXkpO30qW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IoY29uc3QgcGFpciBvZiB0aGlzLm1hcF8peWllbGQgcGFpcjt9KnZhbHVlcygpe2Zvcihjb25zdCB2YWx1ZSBvZiB0aGlzLm1hcF8udmFsdWVzKCkpeWllbGQgdmFsdWU7fQotc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpe2NvbnN0IG5hbWVzPW5ldyBSZWxhdGVkTmFtZU1hcCgpO2Zvcihjb25zdFtrZXksbmFtZV1vZiBlbnRyaWVzKXtuYW1lcy5zZXQoa2V5LG5hbWUpO30KLXJldHVybiBuYW1lczt9Ci1zdGF0aWMgZnJvbURpY3QoZCl7cmV0dXJuIFJlbGF0ZWROYW1lTWFwLmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGQubmFtZXN8fHt9KSk7fX0KLXRyLnYuZC5EaWFnbm9zdGljLnJlZ2lzdGVyKFJlbGF0ZWROYW1lTWFwLHtlbGVtZW50TmFtZTondHItdi11aS1yZWxhdGVkLW5hbWUtbWFwLXNwYW4nLH0pO3JldHVybntSZWxhdGVkTmFtZU1hcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi5kJyxmdW5jdGlvbigpe2NsYXNzIFNjYWxhciBleHRlbmRzIHRyLnYuZC5EaWFnbm9zdGlje2NvbnN0cnVjdG9yKHZhbHVlKXtzdXBlcigpO2lmKCEodmFsdWUgaW5zdGFuY2VvZiB0ci5iLlNjYWxhcikpe3Rocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgU2NhbGFyJyk7fQotdGhpcy52YWx1ZT12YWx1ZTt9Ci1jbG9uZSgpe3JldHVybiBuZXcgU2NhbGFyKHRoaXMudmFsdWUpO30KLWFzRGljdEludG9fKGQpe2QudmFsdWU9dGhpcy52YWx1ZS5hc0RpY3QoKTt9Ci1zdGF0aWMgZnJvbURpY3QoZCl7cmV0dXJuIG5ldyBTY2FsYXIodHIuYi5TY2FsYXIuZnJvbURpY3QoZC52YWx1ZSkpO319Ci10ci52LmQuRGlhZ25vc3RpYy5yZWdpc3RlcihTY2FsYXIse2VsZW1lbnROYW1lOid0ci12LXVpLXNjYWxhci1kaWFnbm9zdGljLXNwYW4nfSk7cmV0dXJue1NjYWxhcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi5kJyxmdW5jdGlvbigpe2NsYXNzIFRhZ01hcCBleHRlbmRzIHRyLnYuZC5EaWFnbm9zdGlje2NvbnN0cnVjdG9yKG9wdF9pbmZvKXtzdXBlcigpO3RoaXMudGFnc1RvU3RvcnlOYW1lc189bmV3IE1hcCgpO2lmKG9wdF9pbmZvKXtmb3IoY29uc3RbdGFnLHN0b3J5RGlzcGxheU5hbWVzXW9mIE9iamVjdC5lbnRyaWVzKG9wdF9pbmZvLnRhZ3NUb1N0b3J5TmFtZXN8fHt9KSl7dGhpcy50YWdzVG9TdG9yeU5hbWVzLnNldCh0YWcsbmV3IFNldChzdG9yeURpc3BsYXlOYW1lcykpO319fQotY2xvbmUoKXtjb25zdCBjbG9uZT1uZXcgVGFnTWFwKCk7Y2xvbmUuYWRkRGlhZ25vc3RpYyh0aGlzKTtyZXR1cm4gY2xvbmU7fQotYWRkVG9IaXN0b2dyYW0oaGlzdCl7aGlzdC5kaWFnbm9zdGljcy5zZXQodHIudi5kLlJFU0VSVkVEX05BTUVTLlRBR19NQVAsdGhpcyk7fQotZXF1YWxzKG90aGVyKXtpZighKG90aGVyIGluc3RhbmNlb2YgVGFnTWFwKSlyZXR1cm4gZmFsc2U7Y29uc3Qga2V5czE9bmV3IFNldCh0aGlzLnRhZ3NUb1N0b3J5TmFtZXMua2V5cygpKTtjb25zdCBrZXlzMj1uZXcgU2V0KG90aGVyLnRhZ3NUb1N0b3J5TmFtZXMua2V5cygpKTtpZighdHIuYi5zZXRzRXF1YWwoa2V5czEsa2V5czIpKXtyZXR1cm4gZmFsc2U7fQotZm9yKGNvbnN0IGtleSBvZiBrZXlzMSl7aWYoIXRyLmIuc2V0c0VxdWFsKHRoaXMudGFnc1RvU3RvcnlOYW1lcy5nZXQoa2V5KSxvdGhlci50YWdzVG9TdG9yeU5hbWVzLmdldChrZXkpKSl7cmV0dXJuIGZhbHNlO319Ci1yZXR1cm4gdHJ1ZTt9Ci1jYW5BZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYyl7cmV0dXJuIG90aGVyRGlhZ25vc3RpYyBpbnN0YW5jZW9mIFRhZ01hcDt9Ci1hZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYyl7Zm9yKGNvbnN0W25hbWUsc3RvcnlEaXNwbGF5TmFtZXNdb2YKLW90aGVyRGlhZ25vc3RpYy50YWdzVG9TdG9yeU5hbWVzKXtpZighdGhpcy50YWdzVG9TdG9yeU5hbWVzLmhhcyhuYW1lKSl7dGhpcy50YWdzVG9TdG9yeU5hbWVzLnNldChuYW1lLG5ldyBTZXQoKSk7fQotZm9yKGNvbnN0IHQgb2Ygc3RvcnlEaXNwbGF5TmFtZXMpe3RoaXMudGFnc1RvU3RvcnlOYW1lcy5nZXQobmFtZSkuYWRkKHQpO319Ci1yZXR1cm4gdGhpczt9Ci1hc0RpY3RJbnRvXyhkKXtkLnRhZ3NUb1N0b3J5TmFtZXM9e307Zm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgdGhpcy50YWdzVG9TdG9yeU5hbWVzKXtkLnRhZ3NUb1N0b3J5TmFtZXNbbmFtZV09QXJyYXkuZnJvbSh2YWx1ZSk7fX0KLWdldCB0YWdzVG9TdG9yeU5hbWVzKCl7cmV0dXJuIHRoaXMudGFnc1RvU3RvcnlOYW1lc187fQotc3RhdGljIGZyb21EaWN0KGQpe2NvbnN0IGluZm89bmV3IFRhZ01hcCgpO2Zvcihjb25zdFtuYW1lLHZhbHVlc11vZgotT2JqZWN0LmVudHJpZXMoZC50YWdzVG9TdG9yeU5hbWVzfHx7fSkpe2luZm8udGFnc1RvU3RvcnlOYW1lcy5zZXQobmFtZSxuZXcgU2V0KHZhbHVlcykpO30KLXJldHVybiBpbmZvO319Ci10ci52LmQuRGlhZ25vc3RpYy5yZWdpc3RlcihUYWdNYXAse2VsZW1lbnROYW1lOid0ci12LXVpLXRhZy1tYXAtc3Bhbid9KTtyZXR1cm57VGFnTWFwLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LmQnLGZ1bmN0aW9uKCl7Y2xhc3MgVW5tZXJnZWFibGVEaWFnbm9zdGljU2V0IGV4dGVuZHMgdHIudi5kLkRpYWdub3N0aWN7Y29uc3RydWN0b3IoZGlhZ25vc3RpY3Mpe3N1cGVyKCk7dGhpcy5fZGlhZ25vc3RpY3M9ZGlhZ25vc3RpY3M7fQotY2xvbmUoKXtjb25zdCBjbG9uZT1uZXcgdHIudi5kLlVubWVyZ2VhYmxlRGlhZ25vc3RpY1NldCgpO2Nsb25lLmFkZERpYWdub3N0aWModGhpcyk7cmV0dXJuIGNsb25lO30KLWNhbkFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXtyZXR1cm4gdHJ1ZTt9Ci1hZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYyl7aWYob3RoZXJEaWFnbm9zdGljIGluc3RhbmNlb2YgVW5tZXJnZWFibGVEaWFnbm9zdGljU2V0KXtmb3IoY29uc3Qgc3ViT3RoZXJEaWFnbm9zdGljIG9mIG90aGVyRGlhZ25vc3RpYyl7Y29uc3QgY2xvbmU9c3ViT3RoZXJEaWFnbm9zdGljLmNsb25lKCk7dGhpcy5hZGREaWFnbm9zdGljKGNsb25lKTt9Ci1yZXR1cm47fQotZm9yKGxldCBpPTA7aTx0aGlzLl9kaWFnbm9zdGljcy5sZW5ndGg7KytpKXtpZih0aGlzLl9kaWFnbm9zdGljc1tpXS5jYW5BZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYykpe3RoaXMuX2RpYWdub3N0aWNzW2ldLmFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKTtyZXR1cm47fX0KLWNvbnN0IGNsb25lPW90aGVyRGlhZ25vc3RpYy5jbG9uZSgpO3RoaXMuX2RpYWdub3N0aWNzLnB1c2goY2xvbmUpO30KLW1lcmdlUmVsYXRpb25zaGlwcyhvdGhlckRpYWdub3N0aWMscGFyZW50SGlzdCxvdGhlclBhcmVudEhpc3Qpe2lmKG90aGVyRGlhZ25vc3RpYyBpbnN0YW5jZW9mIFVubWVyZ2VhYmxlRGlhZ25vc3RpY1NldCl7Zm9yKGNvbnN0IHN1YkRpYWdub3N0aWMgb2Ygb3RoZXJEaWFnbm9zdGljKXt0aGlzLm1lcmdlUmVsYXRpb25zaGlwcyhzdWJEaWFnbm9zdGljLHBhcmVudEhpc3Qsb3RoZXJQYXJlbnRIaXN0KTt9Ci1yZXR1cm47fQotZm9yKGNvbnN0IHN1YkRpYWdub3N0aWMgb2YgdGhpcyl7aWYoIShzdWJEaWFnbm9zdGljIGluc3RhbmNlb2YgdHIudi5kLlJlbGF0ZWRIaXN0b2dyYW1NYXApJiYhKHN1YkRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuUmVsYXRlZEhpc3RvZ3JhbUJyZWFrZG93bikpe2NvbnRpbnVlO30KLXN1YkRpYWdub3N0aWMubWVyZ2VSZWxhdGlvbnNoaXBzKG90aGVyRGlhZ25vc3RpYyxwYXJlbnRIaXN0LG90aGVyUGFyZW50SGlzdCk7fX0KLWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fZGlhZ25vc3RpY3MubGVuZ3RoO30qW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IoY29uc3QgZGlhZ25vc3RpYyBvZiB0aGlzLl9kaWFnbm9zdGljcyl5aWVsZCBkaWFnbm9zdGljO30KLWFzRGljdEludG9fKGQpe2QuZGlhZ25vc3RpY3M9dGhpcy5fZGlhZ25vc3RpY3MubWFwKGQ9PmQuYXNEaWN0T3JSZWZlcmVuY2UoKSk7fQotc3RhdGljIGZyb21EaWN0KGQpe3JldHVybiBuZXcgVW5tZXJnZWFibGVEaWFnbm9zdGljU2V0KGQuZGlhZ25vc3RpY3MubWFwKGQ9PigodHlwZW9mIGQ9PT0nc3RyaW5nJyk/bmV3IHRyLnYuZC5EaWFnbm9zdGljUmVmKGQpOnRyLnYuZC5EaWFnbm9zdGljLmZyb21EaWN0KGQpKSkpO319Ci10ci52LmQuRGlhZ25vc3RpYy5yZWdpc3RlcihVbm1lcmdlYWJsZURpYWdub3N0aWNTZXQse2VsZW1lbnROYW1lOid0ci12LXVpLXVubWVyZ2VhYmxlLWRpYWdub3N0aWMtc2V0LXNwYW4nfSk7cmV0dXJue1VubWVyZ2VhYmxlRGlhZ25vc3RpY1NldCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi5kJyxmdW5jdGlvbigpe2NvbnN0IFJFU0VSVkVEX0lORk9TPXtBTkdMRV9SRVZJU0lPTlM6e25hbWU6J2FuZ2xlUmV2aXNpb25zJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxBUkNISVRFQ1RVUkVTOntuYW1lOidhcmNoaXRlY3R1cmVzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxCRU5DSE1BUktTOntuYW1lOidiZW5jaG1hcmtzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxCRU5DSE1BUktfU1RBUlQ6e25hbWU6J2JlbmNobWFya1N0YXJ0Jyx0eXBlOnRyLnYuZC5EYXRlUmFuZ2V9LEJFTkNITUFSS19ERVNDUklQVElPTlM6e25hbWU6J2JlbmNobWFya0Rlc2NyaXB0aW9ucycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sQk9UUzp7bmFtZTonYm90cycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sQlVHX0NPTVBPTkVOVFM6e25hbWU6J2J1Z0NvbXBvbmVudHMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LEJVSUxEUzp7bmFtZTonYnVpbGRzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxDQVRBUFVMVF9SRVZJU0lPTlM6e25hbWU6J2NhdGFwdWx0UmV2aXNpb25zJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxDSFJPTUlVTV9DT01NSVRfUE9TSVRJT05TOntuYW1lOidjaHJvbWl1bUNvbW1pdFBvc2l0aW9ucycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sQ0hST01JVU1fUkVWSVNJT05TOntuYW1lOidjaHJvbWl1bVJldmlzaW9ucycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sREVWSUNFX0lEUzp7bmFtZTonZGV2aWNlSWRzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxHUFVTOntuYW1lOidncHVzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxHUk9VUElOR19QQVRIOntuYW1lOidncm91cGluZ1BhdGgnLHR5cGU6dHIudi5kLkdyb3VwaW5nUGF0aH0sSVNfUkVGRVJFTkNFX0JVSUxEOntuYW1lOidpc1JlZmVyZW5jZUJ1aWxkJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxMQUJFTFM6e25hbWU6J2xhYmVscycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sTE9HX1VSTFM6e25hbWU6J2xvZ1VybHMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LE1BU1RFUlM6e25hbWU6J21hc3RlcnMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LE1FTU9SWV9BTU9VTlRTOntuYW1lOidtZW1vcnlBbW91bnRzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxNRVJHRURfRlJPTTp7bmFtZTonbWVyZ2VkRnJvbScsdHlwZTp0ci52LmQuUmVsYXRlZEhpc3RvZ3JhbU1hcH0sTUVSR0VEX1RPOntuYW1lOidtZXJnZWRUbycsdHlwZTp0ci52LmQuUmVsYXRlZEhpc3RvZ3JhbU1hcH0sT1NfTkFNRVM6e25hbWU6J29zTmFtZXMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LE9TX1ZFUlNJT05TOntuYW1lOidvc1ZlcnNpb25zJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxPV05FUlM6e25hbWU6J293bmVycycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sUFJPRFVDVF9WRVJTSU9OUzp7bmFtZToncHJvZHVjdFZlcnNpb25zJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxSRUxBVEVEX05BTUVTOntuYW1lOidyZWxhdGVkTmFtZXMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LFNLSUFfUkVWSVNJT05TOntuYW1lOidza2lhUmV2aXNpb25zJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxTVE9SSUVTOntuYW1lOidzdG9yaWVzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxTVE9SWVNFVF9SRVBFQVRTOntuYW1lOidzdG9yeXNldFJlcGVhdHMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LFNUT1JZX1RBR1M6e25hbWU6J3N0b3J5VGFncycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sVEFHX01BUDp7bmFtZTondGFnbWFwJyx0eXBlOnRyLnYuZC5UYWdNYXB9LFRSQUNFX1NUQVJUOntuYW1lOid0cmFjZVN0YXJ0Jyx0eXBlOnRyLnYuZC5EYXRlUmFuZ2V9LFRSQUNFX1VSTFM6e25hbWU6J3RyYWNlVXJscycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sVjhfQ09NTUlUX1BPU0lUSU9OUzp7bmFtZTondjhDb21taXRQb3NpdGlvbnMnLHR5cGU6dHIudi5kLkRhdGVSYW5nZX0sVjhfUkVWSVNJT05TOntuYW1lOid2OFJldmlzaW9ucycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sV0VCUlRDX1JFVklTSU9OUzp7bmFtZTond2VicnRjUmV2aXNpb25zJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSx9O2NvbnN0IFJFU0VSVkVEX05BTUVTPXt9O2NvbnN0IFJFU0VSVkVEX05BTUVTX1RPX1RZUEVTPW5ldyBNYXAoKTtmb3IoY29uc3RbY29kZW5hbWUsaW5mb11vZiBPYmplY3QuZW50cmllcyhSRVNFUlZFRF9JTkZPUykpe1JFU0VSVkVEX05BTUVTW2NvZGVuYW1lXT1pbmZvLm5hbWU7aWYoUkVTRVJWRURfTkFNRVNfVE9fVFlQRVMuaGFzKGluZm8ubmFtZSkpe3Rocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIHJlc2VydmVkIG5hbWUgIiR7aW5mby5uYW1lfSJgKTt9Ci1SRVNFUlZFRF9OQU1FU19UT19UWVBFUy5zZXQoaW5mby5uYW1lLGluZm8udHlwZSk7fQotY29uc3QgUkVTRVJWRURfTkFNRVNfU0VUPW5ldyBTZXQoT2JqZWN0LnZhbHVlcyhSRVNFUlZFRF9OQU1FUykpO3JldHVybntSRVNFUlZFRF9JTkZPUyxSRVNFUlZFRF9OQU1FUyxSRVNFUlZFRF9OQU1FU19TRVQsUkVTRVJWRURfTkFNRVNfVE9fVFlQRVMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYuZCcsZnVuY3Rpb24oKXtjbGFzcyBEaWFnbm9zdGljTWFwIGV4dGVuZHMgTWFwe2NvbnN0cnVjdG9yKG9wdF9hbGxvd1Jlc2VydmVkTmFtZXMpe3N1cGVyKCk7aWYob3B0X2FsbG93UmVzZXJ2ZWROYW1lcz09PXVuZGVmaW5lZCl7b3B0X2FsbG93UmVzZXJ2ZWROYW1lcz10cnVlO30KLXRoaXMuYWxsb3dSZXNlcnZlZE5hbWVzXz1vcHRfYWxsb3dSZXNlcnZlZE5hbWVzO30KLXNldChuYW1lLGRpYWdub3N0aWMpe2lmKHR5cGVvZihuYW1lKSE9PSdzdHJpbmcnKXt0aHJvdyBuZXcgRXJyb3IoYG5hbWUgbXVzdCBiZSBzdHJpbmcsIG5vdCAke25hbWV9YCk7fQotaWYoIShkaWFnbm9zdGljIGluc3RhbmNlb2YgdHIudi5kLkRpYWdub3N0aWMpJiYhKGRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuRGlhZ25vc3RpY1JlZikpe3Rocm93IG5ldyBFcnJvcihgTXVzdCBiZSBpbnN0YW5jZW9mIERpYWdub3N0aWM6ICR7ZGlhZ25vc3RpY31gKTt9Ci1pZighdGhpcy5hbGxvd1Jlc2VydmVkTmFtZXNfJiZ0ci52LmQuUkVTRVJWRURfTkFNRVNfU0VULmhhcyhuYW1lKSYmIShkaWFnbm9zdGljIGluc3RhbmNlb2YgdHIudi5kLlVubWVyZ2VhYmxlRGlhZ25vc3RpY1NldCkmJiEoZGlhZ25vc3RpYyBpbnN0YW5jZW9mIHRyLnYuZC5EaWFnbm9zdGljUmVmKSl7Y29uc3QgdHlwZT10ci52LmQuUkVTRVJWRURfTkFNRVNfVE9fVFlQRVMuZ2V0KG5hbWUpO2lmKHR5cGUmJiEoZGlhZ25vc3RpYyBpbnN0YW5jZW9mIHR5cGUpKXt0aHJvdyBuZXcgRXJyb3IoYERpYWdub3N0aWNzIG5hbWVkICIke25hbWV9IiBtdXN0IGJlICR7dHlwZS5uYW1lfSwgYCtgbm90ICR7ZGlhZ25vc3RpYy5jb25zdHJ1Y3Rvci5uYW1lfWApO319Ci1NYXAucHJvdG90eXBlLnNldC5jYWxsKHRoaXMsbmFtZSxkaWFnbm9zdGljKTt9Ci1kZWxldGUobmFtZSl7aWYobmFtZT09PXVuZGVmaW5lZCl0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgbmFtZScpO01hcC5wcm90b3R5cGUuZGVsZXRlLmNhbGwodGhpcyxuYW1lKTt9Ci1hZGREaWN0cyhkaWN0KXtmb3IoY29uc3RbbmFtZSxkaWFnbm9zdGljRGljdF1vZiBPYmplY3QuZW50cmllcyhkaWN0KSl7aWYodHlwZW9mIGRpYWdub3N0aWNEaWN0PT09J3N0cmluZycpe3RoaXMuc2V0KG5hbWUsbmV3IHRyLnYuZC5EaWFnbm9zdGljUmVmKGRpYWdub3N0aWNEaWN0KSk7fWVsc2V7dGhpcy5zZXQobmFtZSx0ci52LmQuRGlhZ25vc3RpYy5mcm9tRGljdChkaWFnbm9zdGljRGljdCkpO319fQotcmVzb2x2ZVNoYXJlZERpYWdub3N0aWNzKGhpc3RvZ3JhbXMsb3B0X3JlcXVpcmVkKXtmb3IoY29uc3RbbmFtZSx2YWx1ZV1vZiB0aGlzKXtpZighKHZhbHVlIGluc3RhbmNlb2YgdHIudi5kLkRpYWdub3N0aWNSZWYpKXtjb250aW51ZTt9Ci1jb25zdCBndWlkPXZhbHVlLmd1aWQ7Y29uc3QgZGlhZ25vc3RpYz1oaXN0b2dyYW1zLmxvb2t1cERpYWdub3N0aWMoZ3VpZCk7aWYoZGlhZ25vc3RpYyBpbnN0YW5jZW9mIHRyLnYuZC5EaWFnbm9zdGljKXt0aGlzLnNldChuYW1lLGRpYWdub3N0aWMpO31lbHNlIGlmKG9wdF9yZXF1aXJlZCl7dGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBzaGFyZWQgRGlhZ25vc3RpYyAnK2d1aWQpO319fQotYXNEaWN0KCl7Y29uc3QgZGljdD17fTtmb3IoY29uc3RbbmFtZSxkaWFnbm9zdGljXW9mIHRoaXMpe2RpY3RbbmFtZV09ZGlhZ25vc3RpYy5hc0RpY3RPclJlZmVyZW5jZSgpO30KLXJldHVybiBkaWN0O30KLXN0YXRpYyBmcm9tRGljdChkKXtjb25zdCBkaWFnbm9zdGljcz1uZXcgRGlhZ25vc3RpY01hcCgpO2RpYWdub3N0aWNzLmFkZERpY3RzKGQpO3JldHVybiBkaWFnbm9zdGljczt9Ci1zdGF0aWMgZnJvbU9iamVjdChvYmope2NvbnN0IGRpYWdub3N0aWNzPW5ldyBEaWFnbm9zdGljTWFwKCk7aWYoIShvYmogaW5zdGFuY2VvZiBNYXApKW9iaj1PYmplY3QuZW50cmllcyhvYmopO2Zvcihjb25zdFtuYW1lLGRpYWdub3N0aWNdb2Ygb2JqKXtkaWFnbm9zdGljcy5zZXQobmFtZSxkaWFnbm9zdGljKTt9Ci1yZXR1cm4gZGlhZ25vc3RpY3M7fQotYWRkRGlhZ25vc3RpY3Mob3RoZXIpe2Zvcihjb25zdFtuYW1lLG90aGVyRGlhZ25vc3RpY11vZiBvdGhlcil7aWYobmFtZT09PXRyLnYuZC5SRVNFUlZFRF9OQU1FUy5NRVJHRURfRlJPTXx8bmFtZT09PXRyLnYuZC5SRVNFUlZFRF9OQU1FUy5NRVJHRURfVE98fG5hbWU9PT10ci52LmQuUkVTRVJWRURfTkFNRVMuR1JPVVBJTkdfUEFUSCl7Y29udGludWU7fQotY29uc3QgbXlEaWFnbm9zdGljPXRoaXMuZ2V0KG5hbWUpO2lmKG15RGlhZ25vc3RpYyE9PXVuZGVmaW5lZCYmbXlEaWFnbm9zdGljLmNhbkFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKSl7bXlEaWFnbm9zdGljLmFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKTtjb250aW51ZTt9Ci1jb25zdCBjbG9uZT1vdGhlckRpYWdub3N0aWMuY2xvbmUoKTtpZihteURpYWdub3N0aWM9PT11bmRlZmluZWQpe3RoaXMuc2V0KG5hbWUsY2xvbmUpO2NvbnRpbnVlO30KLXRoaXMuc2V0KG5hbWUsbmV3IHRyLnYuZC5Vbm1lcmdlYWJsZURpYWdub3N0aWNTZXQoW215RGlhZ25vc3RpYyxjbG9uZV0pKTt9fQotbWVyZ2VSZWxhdGlvbnNoaXBzKHBhcmVudEhpc3Qpe2Zvcihjb25zdFtuYW1lLGRpYWdub3N0aWNdb2YgdGhpcyl7aWYoIShkaWFnbm9zdGljIGluc3RhbmNlb2YgdHIudi5kLlJlbGF0ZWRIaXN0b2dyYW1NYXApJiYhKGRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuUmVsYXRlZEhpc3RvZ3JhbUJyZWFrZG93bikmJiEoZGlhZ25vc3RpYyBpbnN0YW5jZW9mIHRyLnYuZC5Vbm1lcmdlYWJsZURpYWdub3N0aWNTZXQpKXtjb250aW51ZTt9Ci1mb3IoY29uc3RbdW51c2VkTmFtZSxvdGhlckhpc3Rdb2YKLXRoaXMuZ2V0KHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5NRVJHRURfRlJPTSkpe2NvbnN0IG90aGVyRGlhZ25vc3RpYz1vdGhlckhpc3QuZGlhZ25vc3RpY3MuZ2V0KG5hbWUpO2lmKCEob3RoZXJEaWFnbm9zdGljIGluc3RhbmNlb2YgdHIudi5kLlJlbGF0ZWRIaXN0b2dyYW1NYXApJiYhKG90aGVyRGlhZ25vc3RpYyBpbnN0YW5jZW9mIHRyLnYuZC5SZWxhdGVkSGlzdG9ncmFtQnJlYWtkb3duKSYmIShvdGhlckRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuVW5tZXJnZWFibGVEaWFnbm9zdGljU2V0KSl7Y29udGludWU7fQotZGlhZ25vc3RpYy5tZXJnZVJlbGF0aW9uc2hpcHMob3RoZXJEaWFnbm9zdGljLHBhcmVudEhpc3Qsb3RoZXJIaXN0KTt9fX19Ci1yZXR1cm57RGlhZ25vc3RpY01hcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudicsZnVuY3Rpb24oKXtjb25zdCBNQVhfRElBR05PU1RJQ19NQVBTPTE2O2NvbnN0IERFRkFVTFRfU0FNUExFX1ZBTFVFU19QRVJfQklOPTEwO2NvbnN0IERFRkFVTFRfUkVCSU5ORURfQ09VTlQ9NDA7Y29uc3QgREVGQVVMVF9CT1VOREFSSUVTX0ZPUl9VTklUPW5ldyBNYXAoKTtjb25zdCBERUxUQT1TdHJpbmcuZnJvbUNoYXJDb2RlKDkxNik7Y29uc3QgWl9TQ09SRV9OQU1FPSd6LXNjb3JlJztjb25zdCBQX1ZBTFVFX05BTUU9J3AtdmFsdWUnO2NvbnN0IFVfU1RBVElTVElDX05BTUU9J1UnO2Z1bmN0aW9uIHBlcmNlbnRUb1N0cmluZyhwZXJjZW50LG9wdF9mb3JjZTMpe2lmKHBlcmNlbnQ8MHx8cGVyY2VudD4xKXt0aHJvdyBuZXcgRXJyb3IoJ3BlcmNlbnQgbXVzdCBiZSBpbiBbMCwxXScpO30KLWlmKHBlcmNlbnQ9PT0wKXJldHVybicwMDAnO2lmKHBlcmNlbnQ9PT0xKXJldHVybicxMDAnO2xldCBzdHI9cGVyY2VudC50b1N0cmluZygpO2lmKHN0clsxXSE9PScuJyl7dGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHBlcmNlbnQnKTt9Ci1zdHI9c3RyKycwJy5yZXBlYXQoTWF0aC5tYXgoNC1zdHIubGVuZ3RoLDApKTtpZihzdHIubGVuZ3RoPjQpe2lmKG9wdF9mb3JjZTMpe3N0cj1zdHIuc2xpY2UoMCw0KTt9ZWxzZXtzdHI9c3RyLnNsaWNlKDAsNCkrJ18nK3N0ci5zbGljZSg0KTt9fQotcmV0dXJuJzAnK3N0ci5zbGljZSgyKTt9Ci1mdW5jdGlvbiBwZXJjZW50RnJvbVN0cmluZyhzKXtyZXR1cm4gcGFyc2VGbG9hdChzWzBdKycuJytzLnN1YnN0cigxKS5yZXBsYWNlKC9fL2csJycpKTt9Ci1jbGFzcyBIaXN0b2dyYW1CaW57Y29uc3RydWN0b3IocmFuZ2Upe3RoaXMucmFuZ2U9cmFuZ2U7dGhpcy5jb3VudD0wO3RoaXMuZGlhZ25vc3RpY01hcHM9W107fQotYWRkU2FtcGxlKHZhbHVlKXt0aGlzLmNvdW50Kz0xO30KLWFkZERpYWdub3N0aWNNYXAoZGlhZ25vc3RpY3Mpe3RyLmIubWF0aC5TdGF0aXN0aWNzLnVuaWZvcm1seVNhbXBsZVN0cmVhbSh0aGlzLmRpYWdub3N0aWNNYXBzLHRoaXMuY291bnQsZGlhZ25vc3RpY3MsTUFYX0RJQUdOT1NUSUNfTUFQUyk7fQotYWRkQmluKG90aGVyKXtpZighdGhpcy5yYW5nZS5lcXVhbHMob3RoZXIucmFuZ2UpKXt0aHJvdyBuZXcgRXJyb3IoJ01lcmdpbmcgaW5jb21wYXRpYmxlIEhpc3RvZ3JhbSBiaW5zLicpO30KLXRyLmIubWF0aC5TdGF0aXN0aWNzLm1lcmdlU2FtcGxlZFN0cmVhbXModGhpcy5kaWFnbm9zdGljTWFwcyx0aGlzLmNvdW50LG90aGVyLmRpYWdub3N0aWNNYXBzLG90aGVyLmNvdW50LE1BWF9ESUFHTk9TVElDX01BUFMpO3RoaXMuY291bnQrPW90aGVyLmNvdW50O30KLWZyb21EaWN0KGRpY3Qpe3RoaXMuY291bnQ9ZGljdFswXTtpZihkaWN0Lmxlbmd0aD4xKXtmb3IoY29uc3QgbWFwIG9mIGRpY3RbMV0pe3RoaXMuZGlhZ25vc3RpY01hcHMucHVzaCh0ci52LmQuRGlhZ25vc3RpY01hcC5mcm9tRGljdChtYXApKTt9fX0KLWFzRGljdCgpe2lmKCF0aGlzLmRpYWdub3N0aWNNYXBzLmxlbmd0aCl7cmV0dXJuW3RoaXMuY291bnRdO30KLXJldHVyblt0aGlzLmNvdW50LHRoaXMuZGlhZ25vc3RpY01hcHMubWFwKGQ9PmQuYXNEaWN0KCkpXTt9fQotY29uc3QgREVGQVVMVF9TVU1NQVJZX09QVElPTlM9bmV3IE1hcChbWydhdmcnLHRydWVdLFsnY291bnQnLHRydWVdLFsnZ2VvbWV0cmljTWVhbicsZmFsc2VdLFsnbWF4Jyx0cnVlXSxbJ21pbicsdHJ1ZV0sWyduYW5zJyxmYWxzZV0sWydzdGQnLHRydWVdLFsnc3VtJyx0cnVlXSxdKTtjbGFzcyBIaXN0b2dyYW17Y29uc3RydWN0b3IobmFtZSx1bml0LG9wdF9iaW5Cb3VuZGFyaWVzKXtsZXQgYmluQm91bmRhcmllcz1vcHRfYmluQm91bmRhcmllcztpZighYmluQm91bmRhcmllcyl7Y29uc3QgYmFzZVVuaXQ9dW5pdC5iYXNlVW5pdD91bml0LmJhc2VVbml0OnVuaXQ7YmluQm91bmRhcmllcz1ERUZBVUxUX0JPVU5EQVJJRVNfRk9SX1VOSVQuZ2V0KGJhc2VVbml0LnVuaXROYW1lKTt9Ci10aGlzLmd1aWRfPXVuZGVmaW5lZDt0aGlzLmJpbkJvdW5kYXJpZXNEaWN0Xz1iaW5Cb3VuZGFyaWVzLmFzRGljdCgpO3RoaXMuYWxsQmlucz1iaW5Cb3VuZGFyaWVzLmJpbnMuc2xpY2UoKTt0aGlzLmRlc2NyaXB0aW9uPScnO2NvbnN0IGFsbG93UmVzZXJ2ZWROYW1lcz1mYWxzZTt0aGlzLmRpYWdub3N0aWNzXz1uZXcgdHIudi5kLkRpYWdub3N0aWNNYXAoYWxsb3dSZXNlcnZlZE5hbWVzKTt0aGlzLm1heE51bVNhbXBsZVZhbHVlc189dGhpcy5kZWZhdWx0TWF4TnVtU2FtcGxlVmFsdWVzXzt0aGlzLm5hbWVfPW5hbWU7dGhpcy5uYW5EaWFnbm9zdGljTWFwcz1bXTt0aGlzLm51bU5hbnM9MDt0aGlzLnJ1bm5pbmdfPXVuZGVmaW5lZDt0aGlzLnNhbXBsZVZhbHVlc189W107dGhpcy5zaG9ydE5hbWU9dW5kZWZpbmVkO3RoaXMuc3VtbWFyeU9wdGlvbnM9bmV3IE1hcChERUZBVUxUX1NVTU1BUllfT1BUSU9OUyk7dGhpcy5zdW1tYXJ5T3B0aW9ucy5zZXQoJ3BlcmNlbnRpbGUnLFtdKTt0aGlzLnN1bW1hcnlPcHRpb25zLnNldCgnaXBycycsW10pO3RoaXMudW5pdD11bml0O30KLXN0YXRpYyBjcmVhdGUobmFtZSx1bml0LHNhbXBsZXMsb3B0X29wdGlvbnMpe2NvbnN0IG9wdGlvbnM9b3B0X29wdGlvbnN8fHt9O2NvbnN0IGhpc3Q9bmV3IEhpc3RvZ3JhbShuYW1lLHVuaXQsb3B0aW9ucy5iaW5Cb3VuZGFyaWVzKTtpZihvcHRpb25zLmRlc2NyaXB0aW9uKWhpc3QuZGVzY3JpcHRpb249b3B0aW9ucy5kZXNjcmlwdGlvbjtpZihvcHRpb25zLnNob3J0TmFtZSloaXN0LnNob3J0TmFtZT1vcHRpb25zLnNob3J0TmFtZTtpZihvcHRpb25zLnN1bW1hcnlPcHRpb25zKXtsZXQgc3VtbWFyeU9wdGlvbnM9b3B0aW9ucy5zdW1tYXJ5T3B0aW9ucztpZighKHN1bW1hcnlPcHRpb25zIGluc3RhbmNlb2YgTWFwKSl7c3VtbWFyeU9wdGlvbnM9T2JqZWN0LmVudHJpZXMoc3VtbWFyeU9wdGlvbnMpO30KLWZvcihjb25zdFtuYW1lLHZhbHVlXW9mIHN1bW1hcnlPcHRpb25zKXtoaXN0LnN1bW1hcnlPcHRpb25zLnNldChuYW1lLHZhbHVlKTt9fQotaWYob3B0aW9ucy5kaWFnbm9zdGljcyE9PXVuZGVmaW5lZCl7bGV0IGRpYWdub3N0aWNzPW9wdGlvbnMuZGlhZ25vc3RpY3M7aWYoIShkaWFnbm9zdGljcyBpbnN0YW5jZW9mIE1hcCkpe2RpYWdub3N0aWNzPU9iamVjdC5lbnRyaWVzKGRpYWdub3N0aWNzKTt9Ci1mb3IoY29uc3RbbmFtZSxkaWFnbm9zdGljXW9mIGRpYWdub3N0aWNzKXtoaXN0LmRpYWdub3N0aWNzLnNldChuYW1lLGRpYWdub3N0aWMpO319Ci1pZighKHNhbXBsZXMgaW5zdGFuY2VvZiBBcnJheSkpc2FtcGxlcz1bc2FtcGxlc107Zm9yKGNvbnN0IHNhbXBsZSBvZiBzYW1wbGVzKXtpZih0eXBlb2Ygc2FtcGxlPT09J29iamVjdCcpe2hpc3QuYWRkU2FtcGxlKHNhbXBsZS52YWx1ZSxzYW1wbGUuZGlhZ25vc3RpY3MpO31lbHNle2hpc3QuYWRkU2FtcGxlKHNhbXBsZSk7fX0KLXJldHVybiBoaXN0O30KLWdldCBkaWFnbm9zdGljcygpe3JldHVybiB0aGlzLmRpYWdub3N0aWNzXzt9Ci1nZXQgcnVubmluZygpe3JldHVybiB0aGlzLnJ1bm5pbmdfO30KLWdldCBtYXhOdW1TYW1wbGVWYWx1ZXMoKXtyZXR1cm4gdGhpcy5tYXhOdW1TYW1wbGVWYWx1ZXNfO30KLXNldCBtYXhOdW1TYW1wbGVWYWx1ZXMobil7dGhpcy5tYXhOdW1TYW1wbGVWYWx1ZXNfPW47dHIuYi5tYXRoLlN0YXRpc3RpY3MudW5pZm9ybWx5U2FtcGxlQXJyYXkodGhpcy5zYW1wbGVWYWx1ZXNfLHRoaXMubWF4TnVtU2FtcGxlVmFsdWVzXyk7fQotZ2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5uYW1lXzt9Ci1nZXQgZ3VpZCgpe2lmKHRoaXMuZ3VpZF89PT11bmRlZmluZWQpe3RoaXMuZ3VpZF89dHIuYi5HVUlELmFsbG9jYXRlVVVJRDQoKTt9Ci1yZXR1cm4gdGhpcy5ndWlkXzt9Ci1zZXQgZ3VpZChndWlkKXtpZih0aGlzLmd1aWRfIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXNldCBndWlkJyk7fQotdGhpcy5ndWlkXz1ndWlkO30KLXN0YXRpYyBmcm9tRGljdChkaWN0KXtjb25zdCBoaXN0PW5ldyBIaXN0b2dyYW0oZGljdC5uYW1lLHRyLmIuVW5pdC5mcm9tSlNPTihkaWN0LnVuaXQpLEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuZnJvbURpY3QoZGljdC5iaW5Cb3VuZGFyaWVzKSk7aGlzdC5ndWlkPWRpY3QuZ3VpZDtpZihkaWN0LnNob3J0TmFtZSl7aGlzdC5zaG9ydE5hbWU9ZGljdC5zaG9ydE5hbWU7fQotaWYoZGljdC5kZXNjcmlwdGlvbil7aGlzdC5kZXNjcmlwdGlvbj1kaWN0LmRlc2NyaXB0aW9uO30KLWlmKGRpY3QuZGlhZ25vc3RpY3Mpe2hpc3QuZGlhZ25vc3RpY3MuYWRkRGljdHMoZGljdC5kaWFnbm9zdGljcyk7fQotaWYoZGljdC5hbGxCaW5zKXtpZihkaWN0LmFsbEJpbnMubGVuZ3RoIT09dW5kZWZpbmVkKXtmb3IobGV0IGk9MDtpPGRpY3QuYWxsQmlucy5sZW5ndGg7KytpKXtoaXN0LmFsbEJpbnNbaV09bmV3IEhpc3RvZ3JhbUJpbihoaXN0LmFsbEJpbnNbaV0ucmFuZ2UpO2hpc3QuYWxsQmluc1tpXS5mcm9tRGljdChkaWN0LmFsbEJpbnNbaV0pO319ZWxzZXtmb3IoY29uc3RbaSxiaW5EaWN0XW9mIE9iamVjdC5lbnRyaWVzKGRpY3QuYWxsQmlucykpe2hpc3QuYWxsQmluc1tpXT1uZXcgSGlzdG9ncmFtQmluKGhpc3QuYWxsQmluc1tpXS5yYW5nZSk7aGlzdC5hbGxCaW5zW2ldLmZyb21EaWN0KGJpbkRpY3QpO319fQotaWYoZGljdC5ydW5uaW5nKXtoaXN0LnJ1bm5pbmdfPXRyLmIubWF0aC5SdW5uaW5nU3RhdGlzdGljcy5mcm9tRGljdChkaWN0LnJ1bm5pbmcpO30KLWlmKGRpY3Quc3VtbWFyeU9wdGlvbnMpe2lmKGRpY3Quc3VtbWFyeU9wdGlvbnMuaXBycyl7ZGljdC5zdW1tYXJ5T3B0aW9ucy5pcHJzPWRpY3Quc3VtbWFyeU9wdGlvbnMuaXBycy5tYXAocj0+dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHJbMF0sclsxXSkpO30KLWhpc3QuY3VzdG9taXplU3VtbWFyeU9wdGlvbnMoZGljdC5zdW1tYXJ5T3B0aW9ucyk7fQotaWYoZGljdC5tYXhOdW1TYW1wbGVWYWx1ZXMhPT11bmRlZmluZWQpe2hpc3QubWF4TnVtU2FtcGxlVmFsdWVzPWRpY3QubWF4TnVtU2FtcGxlVmFsdWVzO30KLWlmKGRpY3Quc2FtcGxlVmFsdWVzKXtoaXN0LnNhbXBsZVZhbHVlc189ZGljdC5zYW1wbGVWYWx1ZXM7fQotaWYoZGljdC5udW1OYW5zKXtoaXN0Lm51bU5hbnM9ZGljdC5udW1OYW5zO30KLWlmKGRpY3QubmFuRGlhZ25vc3RpY3Mpe2Zvcihjb25zdCBtYXAgb2YgZGljdC5uYW5EaWFnbm9zdGljcyl7aGlzdC5uYW5EaWFnbm9zdGljTWFwcy5wdXNoKHRyLnYuZC5EaWFnbm9zdGljTWFwLmZyb21EaWN0KG1hcCkpO319Ci1yZXR1cm4gaGlzdDt9Ci1nZXQgbnVtVmFsdWVzKCl7cmV0dXJuIHRoaXMucnVubmluZ18/dGhpcy5ydW5uaW5nXy5jb3VudDowO30KLWdldCBhdmVyYWdlKCl7cmV0dXJuIHRoaXMucnVubmluZ18/dGhpcy5ydW5uaW5nXy5tZWFuOnVuZGVmaW5lZDt9Ci1nZXQgc3RhbmRhcmREZXZpYXRpb24oKXtyZXR1cm4gdGhpcy5ydW5uaW5nXz90aGlzLnJ1bm5pbmdfLnN0ZGRldjp1bmRlZmluZWQ7fQotZ2V0IGdlb21ldHJpY01lYW4oKXtyZXR1cm4gdGhpcy5ydW5uaW5nXz90aGlzLnJ1bm5pbmdfLmdlb21ldHJpY01lYW46MDt9Ci1nZXQgc3VtKCl7cmV0dXJuIHRoaXMucnVubmluZ18/dGhpcy5ydW5uaW5nXy5zdW06MDt9Ci1nZXQgbWluKCl7cmV0dXJuIHRoaXMucnVubmluZ18/dGhpcy5ydW5uaW5nXy5taW46SW5maW5pdHk7fQotZ2V0IG1heCgpe3JldHVybiB0aGlzLnJ1bm5pbmdfP3RoaXMucnVubmluZ18ubWF4Oi1JbmZpbml0eTt9Ci1nZXREaWZmZXJlbmNlU2lnbmlmaWNhbmNlKG90aGVyLG9wdF9hbHBoYSl7aWYodGhpcy51bml0IT09b3RoZXIudW5pdCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcGFyZSBIaXN0b2dyYW1zIHdpdGggZGlmZmVyZW50IHVuaXRzJyk7fQotaWYodGhpcy51bml0LmltcHJvdmVtZW50RGlyZWN0aW9uPT09dHIuYi5JbXByb3ZlbWVudERpcmVjdGlvbi5ET05UX0NBUkUpe3JldHVybiB0ci5iLm1hdGguU3RhdGlzdGljcy5TaWduaWZpY2FuY2UuRE9OVF9DQVJFO30KLWlmKCEob3RoZXIgaW5zdGFuY2VvZiBIaXN0b2dyYW0pKXt0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjb21wdXRlIGEgcC12YWx1ZScpO30KLWNvbnN0IHRlc3RSZXN1bHQ9dHIuYi5tYXRoLlN0YXRpc3RpY3MubXd1KHRoaXMuc2FtcGxlVmFsdWVzLG90aGVyLnNhbXBsZVZhbHVlcyxvcHRfYWxwaGEpO3JldHVybiB0ZXN0UmVzdWx0LnNpZ25pZmljYW5jZTt9Ci1nZXRBcHByb3hpbWF0ZVBlcmNlbnRpbGUocGVyY2VudCl7aWYocGVyY2VudDwwfHxwZXJjZW50PjEpe3Rocm93IG5ldyBFcnJvcigncGVyY2VudCBtdXN0IGJlIGluIFswLDFdJyk7fQotaWYodGhpcy5udW1WYWx1ZXM9PT0wKXJldHVybiB1bmRlZmluZWQ7aWYodGhpcy5hbGxCaW5zLmxlbmd0aD09PTEpe2NvbnN0IHNvcnRlZFNhbXBsZVZhbHVlcz10aGlzLnNhbXBsZVZhbHVlcy5zbGljZSgpLnNvcnQoKHgseSk9PngteSk7cmV0dXJuIHNvcnRlZFNhbXBsZVZhbHVlc1tNYXRoLmZsb29yKChzb3J0ZWRTYW1wbGVWYWx1ZXMubGVuZ3RoLTEpKnBlcmNlbnQpXTt9Ci1sZXQgdmFsdWVzVG9Ta2lwPU1hdGguZmxvb3IoKHRoaXMubnVtVmFsdWVzLTEpKnBlcmNlbnQpO2Zvcihjb25zdCBiaW4gb2YgdGhpcy5hbGxCaW5zKXt2YWx1ZXNUb1NraXAtPWJpbi5jb3VudDtpZih2YWx1ZXNUb1NraXA+PTApY29udGludWU7aWYoYmluLnJhbmdlLm1pbj09PS1OdW1iZXIuTUFYX1ZBTFVFKXtyZXR1cm4gYmluLnJhbmdlLm1heDt9Ci1pZihiaW4ucmFuZ2UubWF4PT09TnVtYmVyLk1BWF9WQUxVRSl7cmV0dXJuIGJpbi5yYW5nZS5taW47fQotcmV0dXJuIGJpbi5yYW5nZS5jZW50ZXI7fQotcmV0dXJuIHRoaXMuYWxsQmluc1t0aGlzLmFsbEJpbnMubGVuZ3RoLTFdLnJhbmdlLm1pbjt9Ci1nZXRCaW5JbmRleEZvclZhbHVlKHZhbHVlKXtjb25zdCBpPXRyLmIuZmluZEZpcnN0VHJ1ZUluZGV4SW5Tb3J0ZWRBcnJheSh0aGlzLmFsbEJpbnMsYj0+dmFsdWU8Yi5yYW5nZS5tYXgpO2lmKDA8PWkmJmk8dGhpcy5hbGxCaW5zLmxlbmd0aClyZXR1cm4gaTtyZXR1cm4gdGhpcy5hbGxCaW5zLmxlbmd0aC0xO30KLWdldEJpbkZvclZhbHVlKHZhbHVlKXtyZXR1cm4gdGhpcy5hbGxCaW5zW3RoaXMuZ2V0QmluSW5kZXhGb3JWYWx1ZSh2YWx1ZSldO30KLWFkZFNhbXBsZSh2YWx1ZSxvcHRfZGlhZ25vc3RpY3Mpe2lmKG9wdF9kaWFnbm9zdGljcyYmIShvcHRfZGlhZ25vc3RpY3MgaW5zdGFuY2VvZiB0ci52LmQuRGlhZ25vc3RpY01hcCkpe29wdF9kaWFnbm9zdGljcz10ci52LmQuRGlhZ25vc3RpY01hcC5mcm9tT2JqZWN0KG9wdF9kaWFnbm9zdGljcyk7fQotaWYodHlwZW9mKHZhbHVlKSE9PSdudW1iZXInfHxpc05hTih2YWx1ZSkpe3RoaXMubnVtTmFucysrO2lmKG9wdF9kaWFnbm9zdGljcyl7dHIuYi5tYXRoLlN0YXRpc3RpY3MudW5pZm9ybWx5U2FtcGxlU3RyZWFtKHRoaXMubmFuRGlhZ25vc3RpY01hcHMsdGhpcy5udW1OYW5zLG9wdF9kaWFnbm9zdGljcyxNQVhfRElBR05PU1RJQ19NQVBTKTt9fWVsc2V7aWYodGhpcy5ydW5uaW5nXz09PXVuZGVmaW5lZCl7dGhpcy5ydW5uaW5nXz1uZXcgdHIuYi5tYXRoLlJ1bm5pbmdTdGF0aXN0aWNzKCk7fQotdGhpcy5ydW5uaW5nXy5hZGQodmFsdWUpO2NvbnN0IGJpbkluZGV4PXRoaXMuZ2V0QmluSW5kZXhGb3JWYWx1ZSh2YWx1ZSk7bGV0IGJpbj10aGlzLmFsbEJpbnNbYmluSW5kZXhdO2lmKGJpbi5jb3VudD09PTApe2Jpbj1uZXcgSGlzdG9ncmFtQmluKGJpbi5yYW5nZSk7dGhpcy5hbGxCaW5zW2JpbkluZGV4XT1iaW47fQotYmluLmFkZFNhbXBsZSh2YWx1ZSk7aWYob3B0X2RpYWdub3N0aWNzKXtiaW4uYWRkRGlhZ25vc3RpY01hcChvcHRfZGlhZ25vc3RpY3MpO319Ci10ci5iLm1hdGguU3RhdGlzdGljcy51bmlmb3JtbHlTYW1wbGVTdHJlYW0odGhpcy5zYW1wbGVWYWx1ZXNfLHRoaXMubnVtVmFsdWVzK3RoaXMubnVtTmFucyx2YWx1ZSx0aGlzLm1heE51bVNhbXBsZVZhbHVlcyk7fQotc2FtcGxlVmFsdWVzSW50byhzYW1wbGVzKXtmb3IoY29uc3Qgc2FtcGxlVmFsdWUgb2YgdGhpcy5zYW1wbGVWYWx1ZXMpe3NhbXBsZXMucHVzaChzYW1wbGVWYWx1ZSk7fX0KLWNhbkFkZEhpc3RvZ3JhbShvdGhlcil7aWYodGhpcy51bml0IT09b3RoZXIudW5pdCl7cmV0dXJuIGZhbHNlO30KLWlmKHRoaXMuYmluQm91bmRhcmllc0RpY3RfPT09b3RoZXIuYmluQm91bmRhcmllc0RpY3RfKXtyZXR1cm4gdHJ1ZTt9Ci1pZih0aGlzLmJpbkJvdW5kYXJpZXNEaWN0Xy5sZW5ndGghPT1vdGhlci5iaW5Cb3VuZGFyaWVzRGljdF8ubGVuZ3RoKXtyZXR1cm4gZmFsc2U7fQotZm9yKGxldCBpPTA7aTx0aGlzLmJpbkJvdW5kYXJpZXNEaWN0Xy5sZW5ndGg7KytpKXtjb25zdCBzbGljZT10aGlzLmJpbkJvdW5kYXJpZXNEaWN0X1tpXTtjb25zdCBvdGhlclNsaWNlPW90aGVyLmJpbkJvdW5kYXJpZXNEaWN0X1tpXTtpZihzbGljZSBpbnN0YW5jZW9mIEFycmF5KXtpZighKG90aGVyU2xpY2UgaW5zdGFuY2VvZiBBcnJheSkpe3JldHVybiBmYWxzZTt9Ci1pZihzbGljZVswXSE9PW90aGVyU2xpY2VbMF18fCF0ci5iLm1hdGguYXBwcm94aW1hdGVseShzbGljZVsxXSxvdGhlclNsaWNlWzFdKXx8c2xpY2VbMl0hPT1vdGhlclNsaWNlWzJdKXtyZXR1cm4gZmFsc2U7fX1lbHNle2lmKG90aGVyU2xpY2UgaW5zdGFuY2VvZiBBcnJheSl7cmV0dXJuIGZhbHNlO30KLWlmKCF0ci5iLm1hdGguYXBwcm94aW1hdGVseShzbGljZSxvdGhlclNsaWNlKSl7cmV0dXJuIGZhbHNlO319fQotcmV0dXJuIHRydWU7fQotYWRkSGlzdG9ncmFtKG90aGVyKXtpZighdGhpcy5jYW5BZGRIaXN0b2dyYW0ob3RoZXIpKXt0aHJvdyBuZXcgRXJyb3IoJ01lcmdpbmcgaW5jb21wYXRpYmxlIEhpc3RvZ3JhbXMnKTt9Ci10ci5iLm1hdGguU3RhdGlzdGljcy5tZXJnZVNhbXBsZWRTdHJlYW1zKHRoaXMubmFuRGlhZ25vc3RpY01hcHMsdGhpcy5udW1OYW5zLG90aGVyLm5hbkRpYWdub3N0aWNNYXBzLG90aGVyLm51bU5hbnMsTUFYX0RJQUdOT1NUSUNfTUFQUyk7dHIuYi5tYXRoLlN0YXRpc3RpY3MubWVyZ2VTYW1wbGVkU3RyZWFtcyh0aGlzLnNhbXBsZVZhbHVlcyx0aGlzLm51bVZhbHVlcyt0aGlzLm51bU5hbnMsb3RoZXIuc2FtcGxlVmFsdWVzLG90aGVyLm51bVZhbHVlcytvdGhlci5udW1OYW5zLCh0aGlzLm1heE51bVNhbXBsZVZhbHVlcytvdGhlci5tYXhOdW1TYW1wbGVWYWx1ZXMpLzIpO3RoaXMubnVtTmFucys9b3RoZXIubnVtTmFucztpZihvdGhlci5ydW5uaW5nXyE9PXVuZGVmaW5lZCl7aWYodGhpcy5ydW5uaW5nXz09PXVuZGVmaW5lZCl7dGhpcy5ydW5uaW5nXz1uZXcgdHIuYi5tYXRoLlJ1bm5pbmdTdGF0aXN0aWNzKCk7fQotdGhpcy5ydW5uaW5nXz10aGlzLnJ1bm5pbmdfLm1lcmdlKG90aGVyLnJ1bm5pbmdfKTt9Ci1mb3IobGV0IGk9MDtpPHRoaXMuYWxsQmlucy5sZW5ndGg7KytpKXtsZXQgYmluPXRoaXMuYWxsQmluc1tpXTtpZihiaW4uY291bnQ9PT0wKXtiaW49bmV3IEhpc3RvZ3JhbUJpbihiaW4ucmFuZ2UpO3RoaXMuYWxsQmluc1tpXT1iaW47fQotYmluLmFkZEJpbihvdGhlci5hbGxCaW5zW2ldKTt9Ci1sZXQgbWVyZ2VkRnJvbT10aGlzLmRpYWdub3N0aWNzLmdldCh0ci52LmQuUkVTRVJWRURfTkFNRVMuTUVSR0VEX0ZST00pO2lmKCFtZXJnZWRGcm9tKXttZXJnZWRGcm9tPW5ldyB0ci52LmQuUmVsYXRlZEhpc3RvZ3JhbU1hcCgpO3RoaXMuZGlhZ25vc3RpY3Muc2V0KHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5NRVJHRURfRlJPTSxtZXJnZWRGcm9tKTt9Ci1tZXJnZWRGcm9tLnNldChtZXJnZWRGcm9tLmxlbmd0aCxvdGhlcik7bGV0IG1lcmdlZFRvPW90aGVyLmRpYWdub3N0aWNzLmdldCh0ci52LmQuUkVTRVJWRURfTkFNRVMuTUVSR0VEX1RPKTtpZighbWVyZ2VkVG8pe21lcmdlZFRvPW5ldyB0ci52LmQuUmVsYXRlZEhpc3RvZ3JhbU1hcCgpO290aGVyLmRpYWdub3N0aWNzLnNldCh0ci52LmQuUkVTRVJWRURfTkFNRVMuTUVSR0VEX1RPLG1lcmdlZFRvKTt9Ci1tZXJnZWRUby5zZXQobWVyZ2VkVG8ubGVuZ3RoLHRoaXMpO3RoaXMuZGlhZ25vc3RpY3MuYWRkRGlhZ25vc3RpY3Mob3RoZXIuZGlhZ25vc3RpY3MpO2Zvcihjb25zdFtzdGF0LG9wdGlvbl1vZiBvdGhlci5zdW1tYXJ5T3B0aW9ucyl7aWYoc3RhdD09PSdwZXJjZW50aWxlJyl7Y29uc3QgcGVyY2VudGlsZXM9dGhpcy5zdW1tYXJ5T3B0aW9ucy5nZXQoc3RhdCk7Zm9yKGNvbnN0IHBlcmNlbnQgb2Ygb3B0aW9uKXtpZighcGVyY2VudGlsZXMuaW5jbHVkZXMocGVyY2VudCkpcGVyY2VudGlsZXMucHVzaChwZXJjZW50KTt9fWVsc2UgaWYoc3RhdD09PSdpcHJzJyl7Y29uc3QgdGhpc0lwcnM9dGhpcy5zdW1tYXJ5T3B0aW9ucy5nZXQoc3RhdCk7Zm9yKGNvbnN0IGlwciBvZiBvcHRpb24pe2xldCBmb3VuZD1mYWxzZTtmb3IoY29uc3QgdGhpc0lwciBvZiB0aGlzSXBycyl7Zm91bmQ9aXByLmVxdWFscyh0aGlzSXByKTtpZihmb3VuZClicmVhazt9Ci1pZighZm91bmQpdGhpc0lwcnMucHVzaChpcHIpO319ZWxzZSBpZihvcHRpb24mJiF0aGlzLnN1bW1hcnlPcHRpb25zLmdldChzdGF0KSl7dGhpcy5zdW1tYXJ5T3B0aW9ucy5zZXQoc3RhdCx0cnVlKTt9fX0KLWN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHN1bW1hcnlPcHRpb25zKXtmb3IoY29uc3Rba2V5LHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKHN1bW1hcnlPcHRpb25zKSl7dGhpcy5zdW1tYXJ5T3B0aW9ucy5zZXQoa2V5LHZhbHVlKTt9fQotZ2V0U3RhdGlzdGljU2NhbGFyKHN0YXROYW1lLG9wdF9yZWZlcmVuY2VIaXN0b2dyYW0sb3B0X213dSl7aWYoc3RhdE5hbWU9PT0nYXZnJyl7aWYodHlwZW9mKHRoaXMuYXZlcmFnZSkhPT0nbnVtYmVyJylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBuZXcgdHIuYi5TY2FsYXIodGhpcy51bml0LHRoaXMuYXZlcmFnZSk7fQotaWYoc3RhdE5hbWU9PT0nc3RkJyl7aWYodHlwZW9mKHRoaXMuc3RhbmRhcmREZXZpYXRpb24pIT09J251bWJlcicpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gbmV3IHRyLmIuU2NhbGFyKHRoaXMudW5pdCx0aGlzLnN0YW5kYXJkRGV2aWF0aW9uKTt9Ci1pZihzdGF0TmFtZT09PSdnZW9tZXRyaWNNZWFuJyl7aWYodHlwZW9mKHRoaXMuZ2VvbWV0cmljTWVhbikhPT0nbnVtYmVyJylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBuZXcgdHIuYi5TY2FsYXIodGhpcy51bml0LHRoaXMuZ2VvbWV0cmljTWVhbik7fQotaWYoc3RhdE5hbWU9PT0nbWluJ3x8c3RhdE5hbWU9PT0nbWF4J3x8c3RhdE5hbWU9PT0nc3VtJyl7aWYodGhpcy5ydW5uaW5nXz09PXVuZGVmaW5lZCl7dGhpcy5ydW5uaW5nXz1uZXcgdHIuYi5tYXRoLlJ1bm5pbmdTdGF0aXN0aWNzKCk7fQotaWYodHlwZW9mKHRoaXMucnVubmluZ19bc3RhdE5hbWVdKSE9PSdudW1iZXInKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIG5ldyB0ci5iLlNjYWxhcih0aGlzLnVuaXQsdGhpcy5ydW5uaW5nX1tzdGF0TmFtZV0pO30KLWlmKHN0YXROYW1lPT09J25hbnMnKXtyZXR1cm4gbmV3IHRyLmIuU2NhbGFyKHRyLmIuVW5pdC5ieU5hbWUuY291bnRfc21hbGxlcklzQmV0dGVyLHRoaXMubnVtTmFucyk7fQotaWYoc3RhdE5hbWU9PT0nY291bnQnKXtyZXR1cm4gbmV3IHRyLmIuU2NhbGFyKHRyLmIuVW5pdC5ieU5hbWUuY291bnRfc21hbGxlcklzQmV0dGVyLHRoaXMubnVtVmFsdWVzKTt9Ci1pZihzdGF0TmFtZS5zdWJzdHIoMCw0KT09PSdwY3RfJyl7Y29uc3QgcGVyY2VudD1wZXJjZW50RnJvbVN0cmluZyhzdGF0TmFtZS5zdWJzdHIoNCkpO2lmKHRoaXMubnVtVmFsdWVzPT09MClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHBlcmNlbnRpbGU9dGhpcy5nZXRBcHByb3hpbWF0ZVBlcmNlbnRpbGUocGVyY2VudCk7aWYodHlwZW9mKHBlcmNlbnRpbGUpIT09J251bWJlcicpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gbmV3IHRyLmIuU2NhbGFyKHRoaXMudW5pdCxwZXJjZW50aWxlKTt9Ci1pZihzdGF0TmFtZS5zdWJzdHIoMCw0KT09PSdpcHJfJyl7bGV0IGxvd2VyPXBlcmNlbnRGcm9tU3RyaW5nKHN0YXROYW1lLnN1YnN0cig0LDMpKTtsZXQgdXBwZXI9cGVyY2VudEZyb21TdHJpbmcoc3RhdE5hbWUuc3Vic3RyKDgpKTtpZihsb3dlcj49dXBwZXIpe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnRlci1wZXJjZW50aWxlIHJhbmdlOiAnK3N0YXROYW1lKTt9Ci1sb3dlcj10aGlzLmdldEFwcHJveGltYXRlUGVyY2VudGlsZShsb3dlcik7dXBwZXI9dGhpcy5nZXRBcHByb3hpbWF0ZVBlcmNlbnRpbGUodXBwZXIpO2NvbnN0IGlwcj11cHBlci1sb3dlcjtpZih0eXBlb2YoaXByKSE9PSdudW1iZXInKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIG5ldyB0ci5iLlNjYWxhcih0aGlzLnVuaXQsaXByKTt9Ci1pZighdGhpcy5jYW5Db21wYXJlKG9wdF9yZWZlcmVuY2VIaXN0b2dyYW0pKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wdXRlICcrc3RhdE5hbWUrJyB3aGVuIGhpc3RvZ3JhbXMgYXJlIG5vdCBjb21wYXJhYmxlJyk7fQotY29uc3Qgc3VmZml4PXRyLmIuVW5pdC5uYW1lU3VmZml4Rm9ySW1wcm92ZW1lbnREaXJlY3Rpb24odGhpcy51bml0LmltcHJvdmVtZW50RGlyZWN0aW9uKTtjb25zdCBkZWx0YUluZGV4PXN0YXROYW1lLmluZGV4T2YoREVMVEEpO2lmKGRlbHRhSW5kZXg+PTApe2NvbnN0IGJhc2VTdGF0TmFtZT1zdGF0TmFtZS5zdWJzdHIoZGVsdGFJbmRleCsxKTtjb25zdCB0aGlzU3RhdD10aGlzLmdldFN0YXRpc3RpY1NjYWxhcihiYXNlU3RhdE5hbWUpO2NvbnN0IG90aGVyU3RhdD1vcHRfcmVmZXJlbmNlSGlzdG9ncmFtLmdldFN0YXRpc3RpY1NjYWxhcihiYXNlU3RhdE5hbWUpO2NvbnN0IGRlbHRhVmFsdWU9dGhpc1N0YXQudmFsdWUtb3RoZXJTdGF0LnZhbHVlO2lmKHN0YXROYW1lWzBdPT09JyUnKXtyZXR1cm4gbmV3IHRyLmIuU2NhbGFyKHRyLmIuVW5pdC5ieU5hbWVbJ25vcm1hbGl6ZWRQZXJjZW50YWdlRGVsdGEnK3N1ZmZpeF0sZGVsdGFWYWx1ZS9vdGhlclN0YXQudmFsdWUpO30KLXJldHVybiBuZXcgdHIuYi5TY2FsYXIodGhpc1N0YXQudW5pdC5jb3JyZXNwb25kaW5nRGVsdGFVbml0LGRlbHRhVmFsdWUpO30KLWlmKHN0YXROYW1lPT09Wl9TQ09SRV9OQU1FKXtyZXR1cm4gbmV3IHRyLmIuU2NhbGFyKHRyLmIuVW5pdC5ieU5hbWVbJ3NpZ21hRGVsdGEnK3N1ZmZpeF0sKHRoaXMuYXZlcmFnZS1vcHRfcmVmZXJlbmNlSGlzdG9ncmFtLmF2ZXJhZ2UpL29wdF9yZWZlcmVuY2VIaXN0b2dyYW0uc3RhbmRhcmREZXZpYXRpb24pO30KLWNvbnN0IG13dT1vcHRfbXd1fHx0ci5iLm1hdGguU3RhdGlzdGljcy5td3UodGhpcy5zYW1wbGVWYWx1ZXMsb3B0X3JlZmVyZW5jZUhpc3RvZ3JhbS5zYW1wbGVWYWx1ZXMpO2lmKHN0YXROYW1lPT09UF9WQUxVRV9OQU1FKXtyZXR1cm4gbmV3IHRyLmIuU2NhbGFyKHRyLmIuVW5pdC5ieU5hbWUudW5pdGxlc3NOdW1iZXIsbXd1LnApO30KLWlmKHN0YXROYW1lPT09VV9TVEFUSVNUSUNfTkFNRSl7cmV0dXJuIG5ldyB0ci5iLlNjYWxhcih0ci5iLlVuaXQuYnlOYW1lLnVuaXRsZXNzTnVtYmVyLG13dS5VKTt9Ci10aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBzdGF0aXN0aWMgbmFtZTogJytzdGF0TmFtZSk7fQotZ2V0IHN0YXRpc3RpY3NOYW1lcygpe2NvbnN0IHN0YXRpc3RpY3NOYW1lcz1uZXcgU2V0KCk7Zm9yKGNvbnN0W3N0YXROYW1lLG9wdGlvbl1vZiB0aGlzLnN1bW1hcnlPcHRpb25zKXtpZihzdGF0TmFtZT09PSdwZXJjZW50aWxlJyl7Zm9yKGNvbnN0IHBjdGlsZSBvZiBvcHRpb24pe3N0YXRpc3RpY3NOYW1lcy5hZGQoJ3BjdF8nK3RyLnYucGVyY2VudFRvU3RyaW5nKHBjdGlsZSkpO319ZWxzZSBpZihzdGF0TmFtZT09PSdpcHJzJyl7Zm9yKGNvbnN0IHJhbmdlIG9mIG9wdGlvbil7c3RhdGlzdGljc05hbWVzLmFkZCgnaXByXycrdHIudi5wZXJjZW50VG9TdHJpbmcocmFuZ2UubWluLHRydWUpKydfJyt0ci52LnBlcmNlbnRUb1N0cmluZyhyYW5nZS5tYXgsdHJ1ZSkpO319ZWxzZSBpZihvcHRpb24pe3N0YXRpc3RpY3NOYW1lcy5hZGQoc3RhdE5hbWUpO319Ci1yZXR1cm4gc3RhdGlzdGljc05hbWVzO30KLWNhbkNvbXBhcmUob3RoZXIpe3JldHVybiBvdGhlciBpbnN0YW5jZW9mIEhpc3RvZ3JhbSYmdGhpcy51bml0PT09b3RoZXIudW5pdCYmdGhpcy5udW1WYWx1ZXM+MCYmb3RoZXIubnVtVmFsdWVzPjA7fQotZ2V0QXZhaWxhYmxlU3RhdGlzdGljTmFtZShzdGF0TmFtZSxvcHRfcmVmZXJlbmNlSGlzdCl7aWYodGhpcy5jYW5Db21wYXJlKG9wdF9yZWZlcmVuY2VIaXN0KSlyZXR1cm4gc3RhdE5hbWU7aWYoc3RhdE5hbWU9PT1aX1NDT1JFX05BTUV8fHN0YXROYW1lPT09UF9WQUxVRV9OQU1FfHxzdGF0TmFtZT09PVVfU1RBVElTVElDX05BTUUpe3JldHVybidhdmcnO30KLWNvbnN0IGRlbHRhSW5kZXg9c3RhdE5hbWUuaW5kZXhPZihERUxUQSk7aWYoZGVsdGFJbmRleDwwKXJldHVybiBzdGF0TmFtZTtyZXR1cm4gc3RhdE5hbWUuc3Vic3RyKGRlbHRhSW5kZXgrMSk7fQotc3RhdGljIGdldERlbHRhU3RhdGlzdGljc05hbWVzKHN0YXROYW1lcyl7Y29uc3QgZGVsdGFOYW1lcz1bXTtmb3IoY29uc3Qgc3RhdE5hbWUgb2Ygc3RhdE5hbWVzKXtkZWx0YU5hbWVzLnB1c2goYCR7REVMVEF9JHtzdGF0TmFtZX1gKTtkZWx0YU5hbWVzLnB1c2goYCUke0RFTFRBfSR7c3RhdE5hbWV9YCk7fQotcmV0dXJuIGRlbHRhTmFtZXMuY29uY2F0KFtaX1NDT1JFX05BTUUsUF9WQUxVRV9OQU1FLFVfU1RBVElTVElDX05BTUVdKTt9Ci1nZXQgc3RhdGlzdGljc1NjYWxhcnMoKXtjb25zdCByZXN1bHRzPW5ldyBNYXAoKTtmb3IoY29uc3Qgc3RhdE5hbWUgb2YgdGhpcy5zdGF0aXN0aWNzTmFtZXMpe2NvbnN0IHNjYWxhcj10aGlzLmdldFN0YXRpc3RpY1NjYWxhcihzdGF0TmFtZSk7aWYoc2NhbGFyPT09dW5kZWZpbmVkKWNvbnRpbnVlO3Jlc3VsdHMuc2V0KHN0YXROYW1lLHNjYWxhcik7fQotcmV0dXJuIHJlc3VsdHM7fQotZ2V0IHNhbXBsZVZhbHVlcygpe3JldHVybiB0aGlzLnNhbXBsZVZhbHVlc187fQotY2xvbmUoKXtjb25zdCBiaW5Cb3VuZGFyaWVzPUhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuZnJvbURpY3QodGhpcy5iaW5Cb3VuZGFyaWVzRGljdF8pO2NvbnN0IGhpc3Q9bmV3IEhpc3RvZ3JhbSh0aGlzLm5hbWUsdGhpcy51bml0LGJpbkJvdW5kYXJpZXMpO2Zvcihjb25zdFtzdGF0LG9wdGlvbl1vZiB0aGlzLnN1bW1hcnlPcHRpb25zKXtpZihzdGF0PT09J3BlcmNlbnRpbGUnfHxzdGF0PT09J2lwcnMnKXtoaXN0LnN1bW1hcnlPcHRpb25zLnNldChzdGF0LEFycmF5LmZyb20ob3B0aW9uKSk7fWVsc2V7aGlzdC5zdW1tYXJ5T3B0aW9ucy5zZXQoc3RhdCxvcHRpb24pO319Ci1oaXN0LmFkZEhpc3RvZ3JhbSh0aGlzKTtyZXR1cm4gaGlzdDt9Ci1yZWJpbihuZXdCb3VuZGFyaWVzKXtjb25zdCByZWJpbm5lZD1uZXcgdHIudi5IaXN0b2dyYW0odGhpcy5uYW1lLHRoaXMudW5pdCxuZXdCb3VuZGFyaWVzKTtyZWJpbm5lZC5kZXNjcmlwdGlvbj10aGlzLmRlc2NyaXB0aW9uO2Zvcihjb25zdCBzYW1wbGUgb2YgdGhpcy5zYW1wbGVWYWx1ZXMpe3JlYmlubmVkLmFkZFNhbXBsZShzYW1wbGUpO30KLXJlYmlubmVkLnJ1bm5pbmdfPXRoaXMucnVubmluZ187Zm9yKGNvbnN0W25hbWUsZGlhZ25vc3RpY11vZiB0aGlzLmRpYWdub3N0aWNzKXtyZWJpbm5lZC5kaWFnbm9zdGljcy5zZXQobmFtZSxkaWFnbm9zdGljKTt9Ci1mb3IoY29uc3Rbc3RhdCxvcHRpb25db2YgdGhpcy5zdW1tYXJ5T3B0aW9ucyl7aWYoc3RhdD09PSdwZXJjZW50aWxlJyl7cmViaW5uZWQuc3VtbWFyeU9wdGlvbnMuc2V0KHN0YXQsQXJyYXkuZnJvbShvcHRpb24pKTt9ZWxzZXtyZWJpbm5lZC5zdW1tYXJ5T3B0aW9ucy5zZXQoc3RhdCxvcHRpb24pO319Ci1yZXR1cm4gcmViaW5uZWQ7fQotYXNEaWN0KCl7Y29uc3QgZGljdD17fTtkaWN0Lm5hbWU9dGhpcy5uYW1lO2RpY3QudW5pdD10aGlzLnVuaXQuYXNKU09OKCk7ZGljdC5ndWlkPXRoaXMuZ3VpZDtpZih0aGlzLmJpbkJvdW5kYXJpZXNEaWN0XyE9PXVuZGVmaW5lZCl7ZGljdC5iaW5Cb3VuZGFyaWVzPXRoaXMuYmluQm91bmRhcmllc0RpY3RfO30KLWlmKHRoaXMuc2hvcnROYW1lKXtkaWN0LnNob3J0TmFtZT10aGlzLnNob3J0TmFtZTt9Ci1pZih0aGlzLmRlc2NyaXB0aW9uKXtkaWN0LmRlc2NyaXB0aW9uPXRoaXMuZGVzY3JpcHRpb247fQotaWYodGhpcy5kaWFnbm9zdGljcy5zaXplKXtkaWN0LmRpYWdub3N0aWNzPXRoaXMuZGlhZ25vc3RpY3MuYXNEaWN0KCk7fQotaWYodGhpcy5tYXhOdW1TYW1wbGVWYWx1ZXMhPT10aGlzLmRlZmF1bHRNYXhOdW1TYW1wbGVWYWx1ZXNfKXtkaWN0Lm1heE51bVNhbXBsZVZhbHVlcz10aGlzLm1heE51bVNhbXBsZVZhbHVlczt9Ci1pZih0aGlzLm51bU5hbnMpe2RpY3QubnVtTmFucz10aGlzLm51bU5hbnM7fQotaWYodGhpcy5uYW5EaWFnbm9zdGljTWFwcy5sZW5ndGgpe2RpY3QubmFuRGlhZ25vc3RpY3M9dGhpcy5uYW5EaWFnbm9zdGljTWFwcy5tYXAoZG09PmRtLmFzRGljdCgpKTt9Ci1pZih0aGlzLm51bVZhbHVlcyl7ZGljdC5zYW1wbGVWYWx1ZXM9dGhpcy5zYW1wbGVWYWx1ZXMuc2xpY2UoKTtkaWN0LnJ1bm5pbmc9dGhpcy5ydW5uaW5nXy5hc0RpY3QoKTtkaWN0LmFsbEJpbnM9dGhpcy5hbGxCaW5zQXNEaWN0XygpO30KLWNvbnN0IHN1bW1hcnlPcHRpb25zPXt9O2xldCBhbnlPdmVycmlkZGVuU3VtbWFyeU9wdGlvbnM9ZmFsc2U7Zm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgdGhpcy5zdW1tYXJ5T3B0aW9ucyl7bGV0IG9wdGlvbjtpZihuYW1lPT09J3BlcmNlbnRpbGUnKXtpZih2YWx1ZS5sZW5ndGg9PT0wKWNvbnRpbnVlO29wdGlvbj1BcnJheS5mcm9tKHZhbHVlKTt9ZWxzZSBpZihuYW1lPT09J2lwcnMnKXtpZih2YWx1ZS5sZW5ndGg9PT0wKWNvbnRpbnVlO29wdGlvbj12YWx1ZS5tYXAocj0+W3IubWluLHIubWF4XSk7fWVsc2UgaWYodmFsdWU9PT1ERUZBVUxUX1NVTU1BUllfT1BUSU9OUy5nZXQobmFtZSkpe2NvbnRpbnVlO31lbHNle29wdGlvbj12YWx1ZTt9Ci1zdW1tYXJ5T3B0aW9uc1tuYW1lXT1vcHRpb247YW55T3ZlcnJpZGRlblN1bW1hcnlPcHRpb25zPXRydWU7fQotaWYoYW55T3ZlcnJpZGRlblN1bW1hcnlPcHRpb25zKXtkaWN0LnN1bW1hcnlPcHRpb25zPXN1bW1hcnlPcHRpb25zO30KLXJldHVybiBkaWN0O30KLWFsbEJpbnNBc0RpY3RfKCl7Y29uc3QgbnVtQmlucz10aGlzLmFsbEJpbnMubGVuZ3RoO2xldCBlbXB0eUJpbnM9MDtmb3IobGV0IGk9MDtpPG51bUJpbnM7KytpKXtpZih0aGlzLmFsbEJpbnNbaV0uY291bnQ9PT0wKXsrK2VtcHR5Qmluczt9fQotaWYoZW1wdHlCaW5zPT09bnVtQmlucyl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1pZihlbXB0eUJpbnM+KG51bUJpbnMvMikpe2NvbnN0IGFsbEJpbnNEaWN0PXt9O2ZvcihsZXQgaT0wO2k8bnVtQmluczsrK2kpe2NvbnN0IGJpbj10aGlzLmFsbEJpbnNbaV07aWYoYmluLmNvdW50PjApe2FsbEJpbnNEaWN0W2ldPWJpbi5hc0RpY3QoKTt9fQotcmV0dXJuIGFsbEJpbnNEaWN0O30KLWNvbnN0IGFsbEJpbnNBcnJheT1bXTtmb3IobGV0IGk9MDtpPG51bUJpbnM7KytpKXthbGxCaW5zQXJyYXkucHVzaCh0aGlzLmFsbEJpbnNbaV0uYXNEaWN0KCkpO30KLXJldHVybiBhbGxCaW5zQXJyYXk7fQotZ2V0IGRlZmF1bHRNYXhOdW1TYW1wbGVWYWx1ZXNfKCl7cmV0dXJuIERFRkFVTFRfU0FNUExFX1ZBTFVFU19QRVJfQklOKk1hdGgubWF4KHRoaXMuYWxsQmlucy5sZW5ndGgsREVGQVVMVF9SRUJJTk5FRF9DT1VOVCk7fX0KLUhpc3RvZ3JhbS5BVkVSQUdFX09OTFlfU1VNTUFSWV9PUFRJT05TPXtjb3VudDpmYWxzZSxtYXg6ZmFsc2UsbWluOmZhbHNlLHN0ZDpmYWxzZSxzdW06ZmFsc2UsfTtjb25zdCBISVNUT0dSQU1fQklOX0JPVU5EQVJJRVNfQ0FDSEU9bmV3IE1hcCgpO2NsYXNzIEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXN7c3RhdGljIGNyZWF0ZUxpbmVhcihtaW4sbWF4LG51bUJpbnMpe3JldHVybiBuZXcgSGlzdG9ncmFtQmluQm91bmRhcmllcyhtaW4pLmFkZExpbmVhckJpbnMobWF4LG51bUJpbnMpO30KLXN0YXRpYyBjcmVhdGVFeHBvbmVudGlhbChtaW4sbWF4LG51bUJpbnMpe3JldHVybiBuZXcgSGlzdG9ncmFtQmluQm91bmRhcmllcyhtaW4pLmFkZEV4cG9uZW50aWFsQmlucyhtYXgsbnVtQmlucyk7fQotc3RhdGljIGNyZWF0ZVdpdGhCb3VuZGFyaWVzKGJpbkJvdW5kYXJpZXMpe2NvbnN0IGJ1aWxkZXI9bmV3IEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMoYmluQm91bmRhcmllc1swXSk7Zm9yKGNvbnN0IGJvdW5kYXJ5IG9mIGJpbkJvdW5kYXJpZXMuc2xpY2UoMSkpe2J1aWxkZXIuYWRkQmluQm91bmRhcnkoYm91bmRhcnkpO30KLXJldHVybiBidWlsZGVyO30KLWNvbnN0cnVjdG9yKG1pbkJpbkJvdW5kYXJ5KXt0aGlzLmJ1aWxkZXJfPVttaW5CaW5Cb3VuZGFyeV07dGhpcy5yYW5nZV89bmV3IHRyLmIubWF0aC5SYW5nZSgpO3RoaXMucmFuZ2VfLmFkZFZhbHVlKG1pbkJpbkJvdW5kYXJ5KTt0aGlzLmJpblJhbmdlc189dW5kZWZpbmVkO3RoaXMuYmluc189dW5kZWZpbmVkO30KLWdldCByYW5nZSgpe3JldHVybiB0aGlzLnJhbmdlXzt9Ci1hc0RpY3QoKXtpZih0aGlzLmJ1aWxkZXJfLmxlbmd0aD09PTEmJnRoaXMuYnVpbGRlcl9bMF09PT1OdW1iZXIuTUFYX1ZBTFVFKXtyZXR1cm4gdW5kZWZpbmVkO30KLXJldHVybiB0aGlzLmJ1aWxkZXJfO30KLXB1c2hCdWlsZGVyU2xpY2VfKHNsaWNlKXt0aGlzLmJ1aWxkZXJfLnB1c2goc2xpY2UpO3RoaXMuYnVpbGRlcl89dGhpcy5idWlsZGVyXy5zbGljZSgpO30KLXN0YXRpYyBmcm9tRGljdChkaWN0KXtpZihkaWN0PT09dW5kZWZpbmVkKXtyZXR1cm4gSGlzdG9ncmFtQmluQm91bmRhcmllcy5TSU5HVUxBUjt9Ci1jb25zdCBjYWNoZUtleT1KU09OLnN0cmluZ2lmeShkaWN0KTtpZihISVNUT0dSQU1fQklOX0JPVU5EQVJJRVNfQ0FDSEUuaGFzKGNhY2hlS2V5KSl7cmV0dXJuIEhJU1RPR1JBTV9CSU5fQk9VTkRBUklFU19DQUNIRS5nZXQoY2FjaGVLZXkpO30KLWNvbnN0IGJpbkJvdW5kYXJpZXM9bmV3IEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMoZGljdFswXSk7Zm9yKGNvbnN0IHNsaWNlIG9mIGRpY3Quc2xpY2UoMSkpe2lmKCEoc2xpY2UgaW5zdGFuY2VvZiBBcnJheSkpe2JpbkJvdW5kYXJpZXMuYWRkQmluQm91bmRhcnkoc2xpY2UpO2NvbnRpbnVlO30KLXN3aXRjaChzbGljZVswXSl7Y2FzZSBIaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLlNMSUNFX1RZUEUuTElORUFSOmJpbkJvdW5kYXJpZXMuYWRkTGluZWFyQmlucyhzbGljZVsxXSxzbGljZVsyXSk7YnJlYWs7Y2FzZSBIaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLlNMSUNFX1RZUEUuRVhQT05FTlRJQUw6YmluQm91bmRhcmllcy5hZGRFeHBvbmVudGlhbEJpbnMoc2xpY2VbMV0sc2xpY2VbMl0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdVbnJlY29nbml6ZWQgSGlzdG9ncmFtQmluQm91bmRhcmllcyBzbGljZSB0eXBlJyk7fX0KLUhJU1RPR1JBTV9CSU5fQk9VTkRBUklFU19DQUNIRS5zZXQoY2FjaGVLZXksYmluQm91bmRhcmllcyk7cmV0dXJuIGJpbkJvdW5kYXJpZXM7fQotZ2V0IGJpbnMoKXtpZih0aGlzLmJpbnNfPT09dW5kZWZpbmVkKXt0aGlzLmJ1aWxkQmluc18oKTt9Ci1yZXR1cm4gdGhpcy5iaW5zXzt9Ci1idWlsZEJpbnNfKCl7dGhpcy5iaW5zXz10aGlzLmJpblJhbmdlcy5tYXAocj0+bmV3IEhpc3RvZ3JhbUJpbihyKSk7fQotZ2V0IGJpblJhbmdlcygpe2lmKHRoaXMuYmluUmFuZ2VzXz09PXVuZGVmaW5lZCl7dGhpcy5idWlsZEJpblJhbmdlc18oKTt9Ci1yZXR1cm4gdGhpcy5iaW5SYW5nZXNfO30KLWJ1aWxkQmluUmFuZ2VzXygpe2lmKHR5cGVvZiB0aGlzLmJ1aWxkZXJfWzBdIT09J251bWJlcicpe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBzdGFydCBvZiBidWlsZGVyXycpO30KLXRoaXMuYmluUmFuZ2VzXz1bXTtsZXQgcHJldkJvdW5kYXJ5PXRoaXMuYnVpbGRlcl9bMF07aWYocHJldkJvdW5kYXJ5Pi1OdW1iZXIuTUFYX1ZBTFVFKXt0aGlzLmJpblJhbmdlc18ucHVzaCh0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoLU51bWJlci5NQVhfVkFMVUUscHJldkJvdW5kYXJ5KSk7fQotZm9yKGNvbnN0IHNsaWNlIG9mIHRoaXMuYnVpbGRlcl8uc2xpY2UoMSkpe2lmKCEoc2xpY2UgaW5zdGFuY2VvZiBBcnJheSkpe3RoaXMuYmluUmFuZ2VzXy5wdXNoKHRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShwcmV2Qm91bmRhcnksc2xpY2UpKTtwcmV2Qm91bmRhcnk9c2xpY2U7Y29udGludWU7fQotY29uc3QgbmV4dE1heEJpbkJvdW5kYXJ5PXNsaWNlWzFdO2NvbnN0IGJpbkNvdW50PXNsaWNlWzJdO2NvbnN0IHNsaWNlTWluQmluQm91bmRhcnk9cHJldkJvdW5kYXJ5O3N3aXRjaChzbGljZVswXSl7Y2FzZSBIaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLlNMSUNFX1RZUEUuTElORUFSOntjb25zdCBiaW5XaWR0aD0obmV4dE1heEJpbkJvdW5kYXJ5LXByZXZCb3VuZGFyeSkvYmluQ291bnQ7Zm9yKGxldCBpPTE7aTxiaW5Db3VudDtpKyspe2NvbnN0IGJvdW5kYXJ5PXNsaWNlTWluQmluQm91bmRhcnkraSpiaW5XaWR0aDt0aGlzLmJpblJhbmdlc18ucHVzaCh0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UocHJldkJvdW5kYXJ5LGJvdW5kYXJ5KSk7cHJldkJvdW5kYXJ5PWJvdW5kYXJ5O30KLWJyZWFrO30KLWNhc2UgSGlzdG9ncmFtQmluQm91bmRhcmllcy5TTElDRV9UWVBFLkVYUE9ORU5USUFMOntjb25zdCBiaW5FeHBvbmVudFdpZHRoPU1hdGgubG9nKG5leHRNYXhCaW5Cb3VuZGFyeS9wcmV2Qm91bmRhcnkpL2JpbkNvdW50O2ZvcihsZXQgaT0xO2k8YmluQ291bnQ7aSsrKXtjb25zdCBib3VuZGFyeT1zbGljZU1pbkJpbkJvdW5kYXJ5Kk1hdGguZXhwKGkqYmluRXhwb25lbnRXaWR0aCk7dGhpcy5iaW5SYW5nZXNfLnB1c2godHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHByZXZCb3VuZGFyeSxib3VuZGFyeSkpO3ByZXZCb3VuZGFyeT1ib3VuZGFyeTt9Ci1icmVhazt9Ci1kZWZhdWx0OnRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMgc2xpY2UgdHlwZScpO30KLXRoaXMuYmluUmFuZ2VzXy5wdXNoKHRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShwcmV2Qm91bmRhcnksbmV4dE1heEJpbkJvdW5kYXJ5KSk7cHJldkJvdW5kYXJ5PW5leHRNYXhCaW5Cb3VuZGFyeTt9Ci1pZihwcmV2Qm91bmRhcnk8TnVtYmVyLk1BWF9WQUxVRSl7dGhpcy5iaW5SYW5nZXNfLnB1c2godHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHByZXZCb3VuZGFyeSxOdW1iZXIuTUFYX1ZBTFVFKSk7fX0KLWFkZEJpbkJvdW5kYXJ5KG5leHRNYXhCaW5Cb3VuZGFyeSl7aWYobmV4dE1heEJpbkJvdW5kYXJ5PD10aGlzLnJhbmdlLm1heCl7dGhyb3cgbmV3IEVycm9yKCdUaGUgYWRkZWQgbWF4IGJpbiBib3VuZGFyeSBtdXN0IGJlIGxhcmdlciB0aGFuICcrJ3RoZSBjdXJyZW50IG1heCBib3VuZGFyeScpO30KLXRoaXMuYmluUmFuZ2VzXz11bmRlZmluZWQ7dGhpcy5iaW5zXz11bmRlZmluZWQ7dGhpcy5wdXNoQnVpbGRlclNsaWNlXyhuZXh0TWF4QmluQm91bmRhcnkpO3RoaXMucmFuZ2UuYWRkVmFsdWUobmV4dE1heEJpbkJvdW5kYXJ5KTtyZXR1cm4gdGhpczt9Ci1hZGRMaW5lYXJCaW5zKG5leHRNYXhCaW5Cb3VuZGFyeSxiaW5Db3VudCl7aWYoYmluQ291bnQ8PTApe3Rocm93IG5ldyBFcnJvcignQmluIGNvdW50IG11c3QgYmUgcG9zaXRpdmUnKTt9Ci1pZihuZXh0TWF4QmluQm91bmRhcnk8PXRoaXMucmFuZ2UubWF4KXt0aHJvdyBuZXcgRXJyb3IoJ1RoZSBuZXcgbWF4IGJpbiBib3VuZGFyeSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAnKyd0aGUgcHJldmlvdXMgbWF4IGJpbiBib3VuZGFyeScpO30KLXRoaXMuYmluUmFuZ2VzXz11bmRlZmluZWQ7dGhpcy5iaW5zXz11bmRlZmluZWQ7dGhpcy5wdXNoQnVpbGRlclNsaWNlXyhbSGlzdG9ncmFtQmluQm91bmRhcmllcy5TTElDRV9UWVBFLkxJTkVBUixuZXh0TWF4QmluQm91bmRhcnksYmluQ291bnRdKTt0aGlzLnJhbmdlLmFkZFZhbHVlKG5leHRNYXhCaW5Cb3VuZGFyeSk7cmV0dXJuIHRoaXM7fQotYWRkRXhwb25lbnRpYWxCaW5zKG5leHRNYXhCaW5Cb3VuZGFyeSxiaW5Db3VudCl7aWYoYmluQ291bnQ8PTApe3Rocm93IG5ldyBFcnJvcignQmluIGNvdW50IG11c3QgYmUgcG9zaXRpdmUnKTt9Ci1pZih0aGlzLnJhbmdlLm1heDw9MCl7dGhyb3cgbmV3IEVycm9yKCdDdXJyZW50IG1heCBiaW4gYm91bmRhcnkgbXVzdCBiZSBwb3NpdGl2ZScpO30KLWlmKHRoaXMucmFuZ2UubWF4Pj1uZXh0TWF4QmluQm91bmRhcnkpe3Rocm93IG5ldyBFcnJvcignVGhlIGxhc3QgYWRkZWQgbWF4IGJvdW5kYXJ5IG11c3QgYmUgZ3JlYXRlciB0aGFuICcrJ3RoZSBjdXJyZW50IG1heCBib3VuZGFyeSBib3VuZGFyeScpO30KLXRoaXMuYmluUmFuZ2VzXz11bmRlZmluZWQ7dGhpcy5iaW5zXz11bmRlZmluZWQ7dGhpcy5wdXNoQnVpbGRlclNsaWNlXyhbSGlzdG9ncmFtQmluQm91bmRhcmllcy5TTElDRV9UWVBFLkVYUE9ORU5USUFMLG5leHRNYXhCaW5Cb3VuZGFyeSxiaW5Db3VudF0pO3RoaXMucmFuZ2UuYWRkVmFsdWUobmV4dE1heEJpbkJvdW5kYXJ5KTtyZXR1cm4gdGhpczt9fQotSGlzdG9ncmFtQmluQm91bmRhcmllcy5TTElDRV9UWVBFPXtMSU5FQVI6MCxFWFBPTkVOVElBTDoxLH07SGlzdG9ncmFtQmluQm91bmRhcmllcy5TSU5HVUxBUj1uZXcgSGlzdG9ncmFtQmluQm91bmRhcmllcyhOdW1iZXIuTUFYX1ZBTFVFKTtERUZBVUxUX0JPVU5EQVJJRVNfRk9SX1VOSVQuc2V0KHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Ncy51bml0TmFtZSxIaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUV4cG9uZW50aWFsKDFlLTMsMWU2LDFlMikpO0RFRkFVTFRfQk9VTkRBUklFU19GT1JfVU5JVC5zZXQodHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLnVuaXROYW1lLEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDAsMWUxMCwxZTMpKTtERUZBVUxUX0JPVU5EQVJJRVNfRk9SX1VOSVQuc2V0KHRyLmIuVW5pdC5ieU5hbWUubm9ybWFsaXplZFBlcmNlbnRhZ2UudW5pdE5hbWUsSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoMCwxLjAsMjApKTtERUZBVUxUX0JPVU5EQVJJRVNfRk9SX1VOSVQuc2V0KHRyLmIuVW5pdC5ieU5hbWUuc2l6ZUluQnl0ZXMudW5pdE5hbWUsSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVFeHBvbmVudGlhbCgxLDFlMTIsMWUyKSk7REVGQVVMVF9CT1VOREFSSUVTX0ZPUl9VTklULnNldCh0ci5iLlVuaXQuYnlOYW1lLmVuZXJneUluSm91bGVzLnVuaXROYW1lLEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlRXhwb25lbnRpYWwoMWUtMywxZTMsNTApKTtERUZBVUxUX0JPVU5EQVJJRVNfRk9SX1VOSVQuc2V0KHRyLmIuVW5pdC5ieU5hbWUucG93ZXJJbldhdHRzLnVuaXROYW1lLEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlRXhwb25lbnRpYWwoMWUtMywxLDUwKSk7REVGQVVMVF9CT1VOREFSSUVTX0ZPUl9VTklULnNldCh0ci5iLlVuaXQuYnlOYW1lLnVuaXRsZXNzTnVtYmVyLnVuaXROYW1lLEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlRXhwb25lbnRpYWwoMWUtMywxZTMsNTApKTtERUZBVUxUX0JPVU5EQVJJRVNfRk9SX1VOSVQuc2V0KHRyLmIuVW5pdC5ieU5hbWUuY291bnQudW5pdE5hbWUsSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVFeHBvbmVudGlhbCgxLDFlMywyMCkpO0RFRkFVTFRfQk9VTkRBUklFU19GT1JfVU5JVC5zZXQodHIuYi5Vbml0LmJ5TmFtZS5zaWdtYS51bml0TmFtZSxIaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigtNSw1LDUwKSk7cmV0dXJue0RFRkFVTFRfUkVCSU5ORURfQ09VTlQsREVMVEEsSGlzdG9ncmFtLEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMsUF9WQUxVRV9OQU1FLFVfU1RBVElTVElDX05BTUUsWl9TQ09SRV9OQU1FLHBlcmNlbnRGcm9tU3RyaW5nLHBlcmNlbnRUb1N0cmluZyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi51aScsZnVuY3Rpb24oKXtQb2x5bWVyKHtpczondHItdi11aS1zY2FsYXItY29udGV4dC1jb250cm9sbGVyJyxjcmVhdGVkKCl7dGhpcy5ob3N0Xz11bmRlZmluZWQ7dGhpcy5ncm91cFRvQ29udGV4dF89bmV3IE1hcCgpO3RoaXMuZGlydHlHcm91cHNfPW5ldyBTZXQoKTt9LGF0dGFjaGVkKCl7aWYodGhpcy5ob3N0Xyl7dGhyb3cgbmV3IEVycm9yKCdTY2FsYXIgY29udGV4dCBjb250cm9sbGVyIGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBob3N0Jyk7fQotY29uc3QgaG9zdD1maW5kUGFyZW50T3JIb3N0KHRoaXMpO2lmKGhvc3QuX19zY2FsYXJDb250ZXh0Q29udHJvbGxlcil7dGhyb3cgbmV3IEVycm9yKCdNdWx0aXBsZSBzY2FsYXIgY29udGV4dCBjb250cm9sbGVycyBhdHRhY2hlZCB0byB0aGlzIGhvc3QnKTt9Ci1ob3N0Ll9fc2NhbGFyQ29udGV4dENvbnRyb2xsZXI9dGhpczt0aGlzLmhvc3RfPWhvc3Q7fSxkZXRhY2hlZCgpe2lmKCF0aGlzLmhvc3RfKXt0aHJvdyBuZXcgRXJyb3IoJ1NjYWxhciBjb250ZXh0IGNvbnRyb2xsZXIgaXMgbm90IGF0dGFjaGVkIHRvIGEgaG9zdCcpO30KLWlmKHRoaXMuaG9zdF8uX19zY2FsYXJDb250ZXh0Q29udHJvbGxlciE9PXRoaXMpe3Rocm93IG5ldyBFcnJvcignU2NhbGFyIGNvbnRleHQgY29udHJvbGxlciBpcyBub3QgYXR0YWNoZWQgdG8gaXRzIGhvc3QnKTt9Ci1kZWxldGUgdGhpcy5ob3N0Xy5fX3NjYWxhckNvbnRleHRDb250cm9sbGVyO3RoaXMuaG9zdF89dW5kZWZpbmVkO30sZ2V0Q29udGV4dChncm91cCl7cmV0dXJuIHRoaXMuZ3JvdXBUb0NvbnRleHRfLmdldChncm91cCk7fSxvblNjYWxhclNwYW5BZGRlZChncm91cCxzcGFuKXtsZXQgY29udGV4dD10aGlzLmdyb3VwVG9Db250ZXh0Xy5nZXQoZ3JvdXApO2lmKGNvbnRleHQ9PT11bmRlZmluZWQpe2NvbnRleHQ9e3NwYW5zOm5ldyBTZXQoKSxyYW5nZTpuZXcgdHIuYi5tYXRoLlJhbmdlKCl9O3RoaXMuZ3JvdXBUb0NvbnRleHRfLnNldChncm91cCxjb250ZXh0KTt9Ci1pZihjb250ZXh0LnNwYW5zLmhhcyhzcGFuKSl7dGhyb3cgbmV3IEVycm9yKCdTY2FsYXIgc3BhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBncm91cDogJytncm91cCk7fQotY29udGV4dC5zcGFucy5hZGQoc3Bhbik7dGhpcy5tYXJrR3JvdXBEaXJ0eUFuZFNjaGVkdWxlVXBkYXRlXyhncm91cCk7fSxvblNjYWxhclNwYW5SZW1vdmVkKGdyb3VwLHNwYW4pe2NvbnN0IGNvbnRleHQ9dGhpcy5ncm91cFRvQ29udGV4dF8uZ2V0KGdyb3VwKTtpZighY29udGV4dC5zcGFucy5oYXMoc3Bhbikpe3Rocm93IG5ldyBFcnJvcignU2NhbGFyIHNwYW4gbm90IHJlZ2lzdGVyZWQgd2l0aCBncm91cDogJytncm91cCk7fQotY29udGV4dC5zcGFucy5kZWxldGUoc3Bhbik7dGhpcy5tYXJrR3JvdXBEaXJ0eUFuZFNjaGVkdWxlVXBkYXRlXyhncm91cCk7fSxvblNjYWxhclNwYW5VcGRhdGVkKGdyb3VwLHNwYW4pe2NvbnN0IGNvbnRleHQ9dGhpcy5ncm91cFRvQ29udGV4dF8uZ2V0KGdyb3VwKTtpZighY29udGV4dC5zcGFucy5oYXMoc3Bhbikpe3Rocm93IG5ldyBFcnJvcignU2NhbGFyIHNwYW4gbm90IHJlZ2lzdGVyZWQgd2l0aCBncm91cDogJytncm91cCk7fQotdGhpcy5tYXJrR3JvdXBEaXJ0eUFuZFNjaGVkdWxlVXBkYXRlXyhncm91cCk7fSxtYXJrR3JvdXBEaXJ0eUFuZFNjaGVkdWxlVXBkYXRlXyhncm91cCl7Y29uc3QgYWxyZWFkeURpcnR5PXRoaXMuZGlydHlHcm91cHNfLnNpemU+MDt0aGlzLmRpcnR5R3JvdXBzXy5hZGQoZ3JvdXApO2lmKCFhbHJlYWR5RGlydHkpe3RyLmIucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW5UaGlzRnJhbWVJZlBvc3NpYmxlKHRoaXMudXBkYXRlQ29udGV4dCx0aGlzKTt9fSx1cGRhdGVDb250ZXh0KCl7Y29uc3QgZ3JvdXBzPXRoaXMuZGlydHlHcm91cHNfO2lmKGdyb3Vwcy5zaXplPT09MClyZXR1cm47dGhpcy5kaXJ0eUdyb3Vwc189bmV3IFNldCgpO2Zvcihjb25zdCBncm91cCBvZiBncm91cHMpe3RoaXMudXBkYXRlR3JvdXBfKGdyb3VwKTt9Ci1jb25zdCBldmVudD1uZXcgdHIuYi5FdmVudCgnY29udGV4dC11cGRhdGVkJyk7ZXZlbnQuZ3JvdXBzPWdyb3Vwczt0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO30sdXBkYXRlR3JvdXBfKGdyb3VwKXtjb25zdCBjb250ZXh0PXRoaXMuZ3JvdXBUb0NvbnRleHRfLmdldChncm91cCk7aWYoY29udGV4dC5zcGFucy5zaXplPT09MCl7dGhpcy5ncm91cFRvQ29udGV4dF8uZGVsZXRlKGdyb3VwKTtyZXR1cm47fQotY29udGV4dC5yYW5nZS5yZXNldCgpO2Zvcihjb25zdCBzcGFuIG9mIGNvbnRleHQuc3BhbnMpe2NvbnRleHQucmFuZ2UuYWRkVmFsdWUoc3Bhbi52YWx1ZSk7fX19KTtmdW5jdGlvbiBnZXRTY2FsYXJDb250ZXh0Q29udHJvbGxlckZvckVsZW1lbnQoZWxlbWVudCl7d2hpbGUoZWxlbWVudCl7aWYoZWxlbWVudC5fX3NjYWxhckNvbnRleHRDb250cm9sbGVyKXtyZXR1cm4gZWxlbWVudC5fX3NjYWxhckNvbnRleHRDb250cm9sbGVyO30KLWVsZW1lbnQ9ZmluZFBhcmVudE9ySG9zdChlbGVtZW50KTt9Ci1yZXR1cm4gdW5kZWZpbmVkO30KLWZ1bmN0aW9uIGZpbmRQYXJlbnRPckhvc3Qobm9kZSl7aWYobm9kZS5wYXJlbnRFbGVtZW50KXtyZXR1cm4gbm9kZS5wYXJlbnRFbGVtZW50O30KLXdoaWxlKFBvbHltZXIuZG9tKG5vZGUpLnBhcmVudE5vZGUpe25vZGU9UG9seW1lci5kb20obm9kZSkucGFyZW50Tm9kZTt9Ci1yZXR1cm4gbm9kZS5ob3N0O30KLXJldHVybntnZXRTY2FsYXJDb250ZXh0Q29udHJvbGxlckZvckVsZW1lbnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gY3JlYXRlU2NhbGFyU3Bhbih2YWx1ZSxvcHRfY29uZmlnKXtpZih2YWx1ZT09PXVuZGVmaW5lZClyZXR1cm4nJztjb25zdCBjb25maWc9b3B0X2NvbmZpZ3x8e307Y29uc3Qgb3duZXJEb2N1bWVudD1jb25maWcub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQ7Y29uc3Qgc3Bhbj1vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXYtdWktc2NhbGFyLXNwYW4nKTtsZXQgbnVtZXJpY1ZhbHVlO2lmKHZhbHVlIGluc3RhbmNlb2YgdHIuYi5TY2FsYXIpe3NwYW4udmFsdWU9dmFsdWU7bnVtZXJpY1ZhbHVlPXZhbHVlLnZhbHVlO31lbHNlIGlmKHZhbHVlIGluc3RhbmNlb2YgdHIudi5IaXN0b2dyYW0pe251bWVyaWNWYWx1ZT12YWx1ZS5hdmVyYWdlO2lmKG51bWVyaWNWYWx1ZT09PXVuZGVmaW5lZClyZXR1cm4nJztzcGFuLnNldFZhbHVlQW5kVW5pdChudW1lcmljVmFsdWUsdmFsdWUudW5pdCk7fWVsc2V7Y29uc3QgdW5pdD1jb25maWcudW5pdDtpZih1bml0PT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1VuaXQgbXVzdCBiZSBwcm92aWRlZCBpbiBjb25maWcgd2hlbiB2YWx1ZSBpcyBhIG51bWJlcicpO30KLXNwYW4uc2V0VmFsdWVBbmRVbml0KHZhbHVlLHVuaXQpO251bWVyaWNWYWx1ZT12YWx1ZTt9Ci1pZihjb25maWcuY29udGV4dCl7c3Bhbi5jb250ZXh0PWNvbmZpZy5jb250ZXh0O30KLWlmKGNvbmZpZy5jdXN0b21Db250ZXh0UmFuZ2Upe3NwYW4uY3VzdG9tQ29udGV4dFJhbmdlPWNvbmZpZy5jdXN0b21Db250ZXh0UmFuZ2U7fQotaWYoY29uZmlnLmxlZnRBbGlnbil7c3Bhbi5sZWZ0QWxpZ249dHJ1ZTt9Ci1pZihjb25maWcuaW5saW5lKXtzcGFuLmlubGluZT10cnVlO30KLWlmKGNvbmZpZy5zaWduaWZpY2FuY2UhPT11bmRlZmluZWQpe3NwYW4uc2lnbmlmaWNhbmNlPWNvbmZpZy5zaWduaWZpY2FuY2U7fQotaWYoY29uZmlnLmNvbnRleHRHcm91cCE9PXVuZGVmaW5lZCl7c3Bhbi5jb250ZXh0R3JvdXA9Y29uZmlnLmNvbnRleHRHcm91cDt9Ci1yZXR1cm4gc3Bhbjt9Ci1yZXR1cm57Y3JlYXRlU2NhbGFyU3Bhbix9O30pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdi11aS1zY2FsYXItc3BhbicscHJvcGVydGllczp7Y29udGV4dEdyb3VwOnt0eXBlOlN0cmluZyxyZWZsZWN0VG9BdHRyaWJ1dGU6dHJ1ZSxvYnNlcnZlcjonY29udGV4dEdyb3VwQ2hhbmdlZF8nfX0sY3JlYXRlZCgpe3RoaXMudmFsdWVfPXVuZGVmaW5lZDt0aGlzLnVuaXRfPXVuZGVmaW5lZDt0aGlzLmNvbnRleHRfPXVuZGVmaW5lZDt0aGlzLndhcm5pbmdfPXVuZGVmaW5lZDt0aGlzLnNpZ25pZmljYW5jZV89dHIuYi5tYXRoLlN0YXRpc3RpY3MuU2lnbmlmaWNhbmNlLkRPTlRfQ0FSRTt0aGlzLnNob3VsZFNlYXJjaEZvckNvbnRleHRDb250cm9sbGVyXz1mYWxzZTt0aGlzLmxhenlDb250ZXh0Q29udHJvbGxlcl89dW5kZWZpbmVkO3RoaXMub25Db250ZXh0VXBkYXRlZF89dGhpcy5vbkNvbnRleHRVcGRhdGVkXy5iaW5kKHRoaXMpO3RoaXMudXBkYXRlQ29udGVudHNfPXRoaXMudXBkYXRlQ29udGVudHNfLmJpbmQodGhpcyk7dGhpcy5jdXN0b21Db250ZXh0UmFuZ2VfPXVuZGVmaW5lZDt9LGdldCBzaWduaWZpY2FuY2UoKXtyZXR1cm4gdGhpcy5zaWduaWZpY2FuY2VfO30sc2V0IHNpZ25pZmljYW5jZShzKXt0aGlzLnNpZ25pZmljYW5jZV89czt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sc2V0IGNvbnRlbnRUZXh0RGVjb3JhdGlvbihkZWNvKXt0aGlzLiQuY29udGVudC5zdHlsZS50ZXh0RGVjb3JhdGlvbj1kZWNvO30sZ2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWVfO30sc2V0IHZhbHVlKHZhbHVlKXtpZih2YWx1ZSBpbnN0YW5jZW9mIHRyLmIuU2NhbGFyKXt0aGlzLnZhbHVlXz12YWx1ZS52YWx1ZTt0aGlzLnVuaXRfPXZhbHVlLnVuaXQ7fWVsc2V7dGhpcy52YWx1ZV89dmFsdWU7fQotdGhpcy51cGRhdGVDb250ZW50c18oKTtpZih0aGlzLmhhc0NvbnRleHRfKHRoaXMuY29udGV4dEdyb3VwKSl7dGhpcy5jb250ZXh0Q29udHJvbGxlcl8ub25TY2FsYXJTcGFuVXBkYXRlZCh0aGlzLmNvbnRleHRHcm91cCx0aGlzKTt9ZWxzZXt0aGlzLnVwZGF0ZVNwYXJrbGluZV8oKTt9fSxnZXQgY29udGV4dENvbnRyb2xsZXJfKCl7aWYodGhpcy5zaG91bGRTZWFyY2hGb3JDb250ZXh0Q29udHJvbGxlcl8pe3RoaXMubGF6eUNvbnRleHRDb250cm9sbGVyXz10ci52LnVpLmdldFNjYWxhckNvbnRleHRDb250cm9sbGVyRm9yRWxlbWVudCh0aGlzKTt0aGlzLnNob3VsZFNlYXJjaEZvckNvbnRleHRDb250cm9sbGVyXz1mYWxzZTt9Ci1yZXR1cm4gdGhpcy5sYXp5Q29udGV4dENvbnRyb2xsZXJfO30saGFzQ29udGV4dF8oY29udGV4dEdyb3VwKXtyZXR1cm4hIShjb250ZXh0R3JvdXAmJnRoaXMuY29udGV4dENvbnRyb2xsZXJfKTt9LGNvbnRleHRHcm91cENoYW5nZWRfKG5ld0NvbnRleHRHcm91cCxvbGRDb250ZXh0R3JvdXApe3RoaXMuZGV0YWNoRnJvbUNvbnRleHRDb250cm9sbGVySWZQb3NzaWJsZV8ob2xkQ29udGV4dEdyb3VwKTtpZighdGhpcy5hdHRhY2hUb0NvbnRleHRDb250cm9sbGVySWZQb3NzaWJsZV8obmV3Q29udGV4dEdyb3VwKSl7dGhpcy5vbkNvbnRleHRVcGRhdGVkXygpO319LGF0dGFjaFRvQ29udGV4dENvbnRyb2xsZXJJZlBvc3NpYmxlXyhjb250ZXh0R3JvdXApe2lmKCF0aGlzLmhhc0NvbnRleHRfKGNvbnRleHRHcm91cCkpcmV0dXJuIGZhbHNlO3RoaXMuY29udGV4dENvbnRyb2xsZXJfLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHQtdXBkYXRlZCcsdGhpcy5vbkNvbnRleHRVcGRhdGVkXyk7dGhpcy5jb250ZXh0Q29udHJvbGxlcl8ub25TY2FsYXJTcGFuQWRkZWQoY29udGV4dEdyb3VwLHRoaXMpO3JldHVybiB0cnVlO30sZGV0YWNoRnJvbUNvbnRleHRDb250cm9sbGVySWZQb3NzaWJsZV8oY29udGV4dEdyb3VwKXtpZighdGhpcy5oYXNDb250ZXh0Xyhjb250ZXh0R3JvdXApKXJldHVybjt0aGlzLmNvbnRleHRDb250cm9sbGVyXy5yZW1vdmVFdmVudExpc3RlbmVyKCdjb250ZXh0LXVwZGF0ZWQnLHRoaXMub25Db250ZXh0VXBkYXRlZF8pO3RoaXMuY29udGV4dENvbnRyb2xsZXJfLm9uU2NhbGFyU3BhblJlbW92ZWQoY29udGV4dEdyb3VwLHRoaXMpO30sYXR0YWNoZWQoKXt0ci5iLlVuaXQuYWRkRXZlbnRMaXN0ZW5lcignZGlzcGxheS1tb2RlLWNoYW5nZWQnLHRoaXMudXBkYXRlQ29udGVudHNfKTt0aGlzLnNob3VsZFNlYXJjaEZvckNvbnRleHRDb250cm9sbGVyXz10cnVlO3RoaXMuYXR0YWNoVG9Db250ZXh0Q29udHJvbGxlcklmUG9zc2libGVfKHRoaXMuY29udGV4dEdyb3VwKTt9LGRldGFjaGVkKCl7dHIuYi5Vbml0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Rpc3BsYXktbW9kZS1jaGFuZ2VkJyx0aGlzLnVwZGF0ZUNvbnRlbnRzXyk7dGhpcy5kZXRhY2hGcm9tQ29udGV4dENvbnRyb2xsZXJJZlBvc3NpYmxlXyh0aGlzLmNvbnRleHRHcm91cCk7dGhpcy5zaG91bGRTZWFyY2hGb3JDb250ZXh0Q29udHJvbGxlcl89ZmFsc2U7dGhpcy5sYXp5Q29udGV4dENvbnRyb2xsZXJfPXVuZGVmaW5lZDt9LG9uQ29udGV4dFVwZGF0ZWRfKCl7dGhpcy51cGRhdGVTcGFya2xpbmVfKCk7fSxnZXQgY29udGV4dCgpe3JldHVybiB0aGlzLmNvbnRleHRfO30sc2V0IGNvbnRleHQoY29udGV4dCl7dGhpcy5jb250ZXh0Xz1jb250ZXh0O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgdW5pdCgpe3JldHVybiB0aGlzLnVuaXRfO30sc2V0IHVuaXQodW5pdCl7dGhpcy51bml0Xz11bml0O3RoaXMudXBkYXRlQ29udGVudHNfKCk7dGhpcy51cGRhdGVTcGFya2xpbmVfKCk7fSxzZXRWYWx1ZUFuZFVuaXQodmFsdWUsdW5pdCl7dGhpcy52YWx1ZV89dmFsdWU7dGhpcy51bml0Xz11bml0O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgY3VzdG9tQ29udGV4dFJhbmdlKCl7cmV0dXJuIHRoaXMuY3VzdG9tQ29udGV4dFJhbmdlXzt9LHNldCBjdXN0b21Db250ZXh0UmFuZ2UoY3VzdG9tQ29udGV4dFJhbmdlKXt0aGlzLmN1c3RvbUNvbnRleHRSYW5nZV89Y3VzdG9tQ29udGV4dFJhbmdlO3RoaXMudXBkYXRlU3BhcmtsaW5lXygpO30sZ2V0IGlubGluZSgpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuY29udGFpbnMoJ2lubGluZScpO30sc2V0IGlubGluZShpbmxpbmUpe2lmKGlubGluZSl7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgnaW5saW5lJyk7fWVsc2V7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LnJlbW92ZSgnaW5saW5lJyk7fX0sZ2V0IGxlZnRBbGlnbigpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuY29udGFpbnMoJ2xlZnQtYWxpZ24nKTt9LHNldCBsZWZ0QWxpZ24obGVmdEFsaWduKXtpZihsZWZ0QWxpZ24pe1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2xlZnQtYWxpZ24nKTt9ZWxzZXtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QucmVtb3ZlKCdsZWZ0LWFsaWduJyk7fX0sdXBkYXRlU3BhcmtsaW5lXygpe1BvbHltZXIuZG9tKHRoaXMuJC5zcGFya2xpbmUpLmNsYXNzTGlzdC5yZW1vdmUoJ3Bvc2l0aXZlJyk7UG9seW1lci5kb20odGhpcy4kLnNwYXJrbGluZSkuY2xhc3NMaXN0LnJlbW92ZSgnYmV0dGVyJyk7UG9seW1lci5kb20odGhpcy4kLnNwYXJrbGluZSkuY2xhc3NMaXN0LnJlbW92ZSgnd29yc2UnKTtQb2x5bWVyLmRvbSh0aGlzLiQuc3BhcmtsaW5lKS5jbGFzc0xpc3QucmVtb3ZlKCdzYW1lJyk7dGhpcy4kLnNwYXJrbGluZS5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQuc3BhcmtsaW5lLnN0eWxlLmxlZnQ9JzAnO3RoaXMuJC5zcGFya2xpbmUuc3R5bGUud2lkdGg9JzAnO2xldCByYW5nZT10aGlzLmN1c3RvbUNvbnRleHRSYW5nZV87aWYoIXJhbmdlJiZ0aGlzLmhhc0NvbnRleHRfKHRoaXMuY29udGV4dEdyb3VwKSl7Y29uc3QgY29udGV4dD10aGlzLmNvbnRleHRDb250cm9sbGVyXy5nZXRDb250ZXh0KHRoaXMuY29udGV4dEdyb3VwKTtpZihjb250ZXh0KXtyYW5nZT1jb250ZXh0LnJhbmdlO319Ci1pZighcmFuZ2V8fHJhbmdlLmlzRW1wdHkpcmV0dXJuO2NvbnN0IGxlZnRQb2ludD1NYXRoLm1pbihyYW5nZS5taW4sMCk7Y29uc3QgcmlnaHRQb2ludD1NYXRoLm1heChyYW5nZS5tYXgsMCk7Y29uc3QgcG9pbnREaXN0YW5jZT1yaWdodFBvaW50LWxlZnRQb2ludDtpZihwb2ludERpc3RhbmNlPT09MCl7cmV0dXJuO30KLXRoaXMuJC5zcGFya2xpbmUuc3R5bGUuZGlzcGxheT0nYmxvY2snO2xldCBsZWZ0O2xldCB3aWR0aDtpZih0aGlzLnZhbHVlPjApe3dpZHRoPU1hdGgubWluKHRoaXMudmFsdWUscmlnaHRQb2ludCk7bGVmdD0tbGVmdFBvaW50O1BvbHltZXIuZG9tKHRoaXMuJC5zcGFya2xpbmUpLmNsYXNzTGlzdC5hZGQoJ3Bvc2l0aXZlJyk7fWVsc2UgaWYodGhpcy52YWx1ZTw9MCl7d2lkdGg9LU1hdGgubWF4KHRoaXMudmFsdWUsbGVmdFBvaW50KTtsZWZ0PSgtbGVmdFBvaW50KS13aWR0aDt9Ci10aGlzLiQuc3BhcmtsaW5lLnN0eWxlLmxlZnQ9dGhpcy5idWlsZFNwYXJrbGluZVN0eWxlXyhsZWZ0L3BvaW50RGlzdGFuY2UsZmFsc2UpO3RoaXMuJC5zcGFya2xpbmUuc3R5bGUud2lkdGg9dGhpcy5idWlsZFNwYXJrbGluZVN0eWxlXyh3aWR0aC9wb2ludERpc3RhbmNlLHRydWUpO2NvbnN0IGNoYW5nZUNsYXNzPXRoaXMuY2hhbmdlQ2xhc3NOYW1lXztpZihjaGFuZ2VDbGFzcyl7UG9seW1lci5kb20odGhpcy4kLnNwYXJrbGluZSkuY2xhc3NMaXN0LmFkZChjaGFuZ2VDbGFzcyk7fX0sYnVpbGRTcGFya2xpbmVTdHlsZV8ocmF0aW8saXNXaWR0aCl7bGV0IHBvc2l0aW9uPSdjYWxjKCcrcmF0aW8rJyAqICgxMDAlIC0gMXB4KSc7aWYoaXNXaWR0aCl7cG9zaXRpb24rPScgKyAxcHgnO30KLXBvc2l0aW9uKz0nKSc7cmV0dXJuIHBvc2l0aW9uO30sdXBkYXRlQ29udGVudHNfKCl7UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLnRleHRDb250ZW50PScnO1BvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdiZXR0ZXInKTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuY2xhc3NMaXN0LnJlbW92ZSgnd29yc2UnKTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuY2xhc3NMaXN0LnJlbW92ZSgnc2FtZScpO3RoaXMuJC5pbnNpZ25pZmljYW50LnN0eWxlLmRpc3BsYXk9Jyc7dGhpcy4kLnNpZ25pZmljYW50bHlfYmV0dGVyLnN0eWxlLmRpc3BsYXk9Jyc7dGhpcy4kLnNpZ25pZmljYW50bHlfd29yc2Uuc3R5bGUuZGlzcGxheT0nJztpZih0aGlzLnVuaXRfPT09dW5kZWZpbmVkKXJldHVybjt0aGlzLiQuY29udGVudC50aXRsZT0nJztQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkudGV4dENvbnRlbnQ9dGhpcy51bml0Xy5mb3JtYXQodGhpcy52YWx1ZSx0aGlzLmNvbnRleHQpO3RoaXMudXBkYXRlRGVsdGFfKCk7fSx1cGRhdGVEZWx0YV8oKXtsZXQgY2hhbmdlQ2xhc3M9dGhpcy5jaGFuZ2VDbGFzc05hbWVfO2lmKCFjaGFuZ2VDbGFzcyl7dGhpcy4kLnNpZ25pZmljYW5jZS5zdHlsZS5kaXNwbGF5PSdub25lJztyZXR1cm47fQotdGhpcy4kLnNpZ25pZmljYW5jZS5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnO2xldCB0aXRsZTtzd2l0Y2goY2hhbmdlQ2xhc3Mpe2Nhc2UnYmV0dGVyJzp0aXRsZT0naW1wcm92ZW1lbnQnO2JyZWFrO2Nhc2Und29yc2UnOnRpdGxlPSdyZWdyZXNzaW9uJzticmVhaztjYXNlJ3NhbWUnOnRpdGxlPSdubyBjaGFuZ2UnO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGNoYW5nZSBjbGFzczogJytjaGFuZ2VDbGFzcyk7fQotUG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLmNsYXNzTGlzdC5hZGQoY2hhbmdlQ2xhc3MpO3N3aXRjaCh0aGlzLnNpZ25pZmljYW5jZSl7Y2FzZSB0ci5iLm1hdGguU3RhdGlzdGljcy5TaWduaWZpY2FuY2UuRE9OVF9DQVJFOmJyZWFrO2Nhc2UgdHIuYi5tYXRoLlN0YXRpc3RpY3MuU2lnbmlmaWNhbmNlLklOU0lHTklGSUNBTlQ6aWYoY2hhbmdlQ2xhc3MhPT0nc2FtZScpdGl0bGU9J2luc2lnbmlmaWNhbnQgJyt0aXRsZTt0aGlzLiQuaW5zaWduaWZpY2FudC5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnO2NoYW5nZUNsYXNzPSdzYW1lJzticmVhaztjYXNlIHRyLmIubWF0aC5TdGF0aXN0aWNzLlNpZ25pZmljYW5jZS5TSUdOSUZJQ0FOVDppZihjaGFuZ2VDbGFzcz09PSdzYW1lJyl7dGhyb3cgbmV3IEVycm9yKCdIb3cgY2FuIG5vIGNoYW5nZSBiZSBzaWduaWZpY2FudD8nKTt9Ci10aGlzLiRbJ3NpZ25pZmljYW50bHlfJytjaGFuZ2VDbGFzc10uc3R5bGUuZGlzcGxheT0naW5saW5lJzt0aXRsZT0nc2lnbmlmaWNhbnQgJyt0aXRsZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignVW5rbm93biBzaWduaWZpY2FuY2UgJyt0aGlzLnNpZ25pZmljYW5jZSk7fQotdGhpcy4kLnNpZ25pZmljYW5jZS50aXRsZT10aXRsZTt0aGlzLiQuY29udGVudC50aXRsZT10aXRsZTt9LGdldCBjaGFuZ2VDbGFzc05hbWVfKCl7aWYoIXRoaXMudW5pdF98fCF0aGlzLnVuaXRfLmlzRGVsdGEpcmV0dXJuIHVuZGVmaW5lZDtzd2l0Y2godGhpcy51bml0Xy5pbXByb3ZlbWVudERpcmVjdGlvbil7Y2FzZSB0ci5iLkltcHJvdmVtZW50RGlyZWN0aW9uLkRPTlRfQ0FSRTpyZXR1cm4gdW5kZWZpbmVkO2Nhc2UgdHIuYi5JbXByb3ZlbWVudERpcmVjdGlvbi5CSUdHRVJfSVNfQkVUVEVSOmlmKHRoaXMudmFsdWU9PT0wKXJldHVybidzYW1lJztyZXR1cm4gdGhpcy52YWx1ZT4wPydiZXR0ZXInOid3b3JzZSc7Y2FzZSB0ci5iLkltcHJvdmVtZW50RGlyZWN0aW9uLlNNQUxMRVJfSVNfQkVUVEVSOmlmKHRoaXMudmFsdWU9PT0wKXJldHVybidzYW1lJztyZXR1cm4gdGhpcy52YWx1ZTwwPydiZXR0ZXInOid3b3JzZSc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gaW1wcm92ZW1lbnQgZGlyZWN0aW9uOiAnKwotdGhpcy51bml0Xy5pbXByb3ZlbWVudERpcmVjdGlvbik7fX0sZ2V0IHdhcm5pbmcoKXtyZXR1cm4gdGhpcy53YXJuaW5nXzt9LHNldCB3YXJuaW5nKHdhcm5pbmcpe3RoaXMud2FybmluZ189d2FybmluZztjb25zdCB3YXJuaW5nRWw9dGhpcy4kLndhcm5pbmc7aWYodGhpcy53YXJuaW5nXyl7d2FybmluZ0VsLnRpdGxlPXdhcm5pbmc7d2FybmluZ0VsLnN0eWxlLmRpc3BsYXk9J2lubGluZSc7fWVsc2V7d2FybmluZ0VsLnRpdGxlPScnO3dhcm5pbmdFbC5zdHlsZS5kaXNwbGF5PScnO319LGdldCB0aW1lc3RhbXAoKXtyZXR1cm4gdGhpcy52YWx1ZTt9LHNldCB0aW1lc3RhbXAodGltZXN0YW1wKXtpZih0aW1lc3RhbXAgaW5zdGFuY2VvZiB0ci5iLnUuVGltZVN0YW1wKXt0aGlzLnZhbHVlPXRpbWVzdGFtcDtyZXR1cm47fQotdGhpcy5zZXRWYWx1ZUFuZFVuaXQodGltZXN0YW1wLHRyLmIudS5Vbml0cy50aW1lU3RhbXBJbk1zKTt9LGdldCBkdXJhdGlvbigpe3JldHVybiB0aGlzLnZhbHVlO30sc2V0IGR1cmF0aW9uKGR1cmF0aW9uKXtpZihkdXJhdGlvbiBpbnN0YW5jZW9mIHRyLmIudS5UaW1lRHVyYXRpb24pe3RoaXMudmFsdWU9ZHVyYXRpb247cmV0dXJuO30KLXRoaXMuc2V0VmFsdWVBbmRVbml0KGR1cmF0aW9uLHRyLmIudS5Vbml0cy50aW1lRHVyYXRpb25Jbk1zKTt9fSk7J3VzZSBzdHJpY3QnO2Z1bmN0aW9uIGlzVGFibGUob2JqZWN0KXtpZighKG9iamVjdCBpbnN0YW5jZW9mIEFycmF5KXx8KG9iamVjdC5sZW5ndGg8MikpcmV0dXJuIGZhbHNlO2Zvcihjb25zdCBjb2xOYW1lIGluIG9iamVjdFswXSl7aWYodHlwZW9mIGNvbE5hbWUhPT0nc3RyaW5nJylyZXR1cm4gZmFsc2U7fQotZm9yKGxldCBpPTA7aTxvYmplY3QubGVuZ3RoOysraSl7aWYoIShvYmplY3RbaV1pbnN0YW5jZW9mIE9iamVjdCkpcmV0dXJuIGZhbHNlO2Zvcihjb25zdCBjb2xOYW1lIGluIG9iamVjdFtpXSl7aWYoaSYmKG9iamVjdFswXVtjb2xOYW1lXT09PXVuZGVmaW5lZCkpcmV0dXJuIGZhbHNlO2NvbnN0IGNlbGxUeXBlPXR5cGVvZiBvYmplY3RbaV1bY29sTmFtZV07aWYoY2VsbFR5cGUhPT0nc3RyaW5nJyYmY2VsbFR5cGUhPT0nbnVtYmVyJylyZXR1cm4gZmFsc2U7fQotaWYoaSl7Zm9yKGNvbnN0IGNvbE5hbWUgaW4gb2JqZWN0WzBdKXtpZihvYmplY3RbaV1bY29sTmFtZV09PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO319fQotcmV0dXJuIHRydWU7fQotUG9seW1lcih7aXM6J3RyLXVpLWEtZ2VuZXJpYy1vYmplY3QtdmlldycscmVhZHkoKXt0aGlzLm9iamVjdF89dW5kZWZpbmVkO30sZ2V0IG9iamVjdCgpe3JldHVybiB0aGlzLm9iamVjdF87fSxzZXQgb2JqZWN0KG9iamVjdCl7dGhpcy5vYmplY3RfPW9iamVjdDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlQ29udGVudHNfKCl7UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLnRleHRDb250ZW50PScnO3RoaXMuYXBwZW5kRWxlbWVudHNGb3JUeXBlXygnJyx0aGlzLm9iamVjdF8sMCwwLDUsJycpO30sYXBwZW5kRWxlbWVudHNGb3JUeXBlXyhsYWJlbCxvYmplY3QsaW5kZW50LGRlcHRoLG1heERlcHRoLHN1ZmZpeCl7aWYoZGVwdGg+bWF4RGVwdGgpe3RoaXMuYXBwZW5kU2ltcGxlVGV4dF8obGFiZWwsaW5kZW50LCc8cmVjdXJzaW9uIGxpbWl0IHJlYWNoZWQ+JyxzdWZmaXgpO3JldHVybjt9Ci1pZihvYmplY3Q9PT11bmRlZmluZWQpe3RoaXMuYXBwZW5kU2ltcGxlVGV4dF8obGFiZWwsaW5kZW50LCd1bmRlZmluZWQnLHN1ZmZpeCk7cmV0dXJuO30KLWlmKG9iamVjdD09PW51bGwpe3RoaXMuYXBwZW5kU2ltcGxlVGV4dF8obGFiZWwsaW5kZW50LCdudWxsJyxzdWZmaXgpO3JldHVybjt9Ci1pZighKG9iamVjdCBpbnN0YW5jZW9mIE9iamVjdCkpe2NvbnN0IHR5cGU9dHlwZW9mIG9iamVjdDtpZih0eXBlIT09J3N0cmluZycpe3JldHVybiB0aGlzLmFwcGVuZFNpbXBsZVRleHRfKGxhYmVsLGluZGVudCxvYmplY3Qsc3VmZml4KTt9Ci1sZXQgb2JqZWN0UmVwbGFjZWQ9ZmFsc2U7aWYoKG9iamVjdFswXT09PSd7JyYmb2JqZWN0W29iamVjdC5sZW5ndGgtMV09PT0nfScpfHwob2JqZWN0WzBdPT09J1snJiZvYmplY3Rbb2JqZWN0Lmxlbmd0aC0xXT09PSddJykpe3RyeXtvYmplY3Q9SlNPTi5wYXJzZShvYmplY3QpO29iamVjdFJlcGxhY2VkPXRydWU7fWNhdGNoKGUpe319Ci1pZighb2JqZWN0UmVwbGFjZWQpe2lmKG9iamVjdC5pbmNsdWRlcygnXG4nKSl7Y29uc3QgbGluZXM9b2JqZWN0LnNwbGl0KCdcbicpO2xpbmVzLmZvckVhY2goZnVuY3Rpb24obGluZSxpKXtsZXQgdGV4dDtsZXQgaW9mZjtsZXQgbGw7bGV0IHNzO2lmKGk9PT0wKXt0ZXh0PSciJytsaW5lO2lvZmY9MDtsbD1sYWJlbDtzcz0nJzt9ZWxzZSBpZihpPGxpbmVzLmxlbmd0aC0xKXt0ZXh0PWxpbmU7aW9mZj0xO2xsPScnO3NzPScnO31lbHNle3RleHQ9bGluZSsnIic7aW9mZj0xO2xsPScnO3NzPXN1ZmZpeDt9Ci1jb25zdCBlbD10aGlzLmFwcGVuZFNpbXBsZVRleHRfKGxsLGluZGVudCtpb2ZmKmxhYmVsLmxlbmd0aCtpb2ZmLHRleHQsc3MpO2VsLnN0eWxlLndoaXRlU3BhY2U9J3ByZSc7cmV0dXJuIGVsO30sdGhpcyk7cmV0dXJuO30KLWlmKHRyLmIuaXNVcmwob2JqZWN0KSl7Y29uc3QgbGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7bGluay5ocmVmPW9iamVjdDtsaW5rLnRleHRDb250ZW50PW9iamVjdDt0aGlzLmFwcGVuZEVsZW1lbnRXaXRoTGFiZWxfKGxhYmVsLGluZGVudCxsaW5rLHN1ZmZpeCk7cmV0dXJuO30KLXRoaXMuYXBwZW5kU2ltcGxlVGV4dF8obGFiZWwsaW5kZW50LCciJytvYmplY3QrJyInLHN1ZmZpeCk7cmV0dXJuO319Ci1pZihvYmplY3QgaW5zdGFuY2VvZiB0ci5tb2RlbC5PYmplY3RTbmFwc2hvdCl7Y29uc3QgbGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWFuYWx5c2lzLWxpbmsnKTtsaW5rLnNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQob2JqZWN0KTt0aGlzLmFwcGVuZEVsZW1lbnRXaXRoTGFiZWxfKGxhYmVsLGluZGVudCxsaW5rLHN1ZmZpeCk7cmV0dXJuO30KLWlmKG9iamVjdCBpbnN0YW5jZW9mIHRyLm1vZGVsLk9iamVjdEluc3RhbmNlKXtjb25zdCBsaW5rPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2xpbmsuc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldChvYmplY3QpO3RoaXMuYXBwZW5kRWxlbWVudFdpdGhMYWJlbF8obGFiZWwsaW5kZW50LGxpbmssc3VmZml4KTtyZXR1cm47fQotaWYob2JqZWN0IGluc3RhbmNlb2YgdHIuYi5tYXRoLlJlY3Qpe3RoaXMuYXBwZW5kU2ltcGxlVGV4dF8obGFiZWwsaW5kZW50LG9iamVjdC50b1N0cmluZygpLHN1ZmZpeCk7cmV0dXJuO30KLWlmKG9iamVjdCBpbnN0YW5jZW9mIHRyLmIuU2NhbGFyKXtjb25zdCBlbD10aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdi11aS1zY2FsYXItc3BhbicpO2VsLnZhbHVlPW9iamVjdDtlbC5pbmxpbmU9dHJ1ZTt0aGlzLmFwcGVuZEVsZW1lbnRXaXRoTGFiZWxfKGxhYmVsLGluZGVudCxlbCxzdWZmaXgpO3JldHVybjt9Ci1pZihvYmplY3QgaW5zdGFuY2VvZiBBcnJheSl7dGhpcy5hcHBlbmRFbGVtZW50c0ZvckFycmF5XyhsYWJlbCxvYmplY3QsaW5kZW50LGRlcHRoLG1heERlcHRoLHN1ZmZpeCk7cmV0dXJuO30KLXRoaXMuYXBwZW5kRWxlbWVudHNGb3JPYmplY3RfKGxhYmVsLG9iamVjdCxpbmRlbnQsZGVwdGgsbWF4RGVwdGgsc3VmZml4KTt9LGFwcGVuZEVsZW1lbnRzRm9yQXJyYXlfKGxhYmVsLG9iamVjdCxpbmRlbnQsZGVwdGgsbWF4RGVwdGgsc3VmZml4KXtpZihvYmplY3QubGVuZ3RoPT09MCl7dGhpcy5hcHBlbmRTaW1wbGVUZXh0XyhsYWJlbCxpbmRlbnQsJ1tdJyxzdWZmaXgpO3JldHVybjt9Ci1pZihpc1RhYmxlKG9iamVjdCkpe2NvbnN0IHRhYmxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItdGFibGUnKTtjb25zdCBjb2x1bW5zPVtdO2Zvcihjb25zdCBjb2xOYW1lIG9mIE9iamVjdC5rZXlzKG9iamVjdFswXSkpe2xldCBhbGxTdHJpbmdzPXRydWU7bGV0IGFsbE51bWJlcnM9dHJ1ZTtmb3IobGV0IGk9MDtpPG9iamVjdC5sZW5ndGg7KytpKXtpZih0eXBlb2Yob2JqZWN0W2ldW2NvbE5hbWVdKSE9PSdzdHJpbmcnKXthbGxTdHJpbmdzPWZhbHNlO30KLWlmKHR5cGVvZihvYmplY3RbaV1bY29sTmFtZV0pIT09J251bWJlcicpe2FsbE51bWJlcnM9ZmFsc2U7fQotaWYoIWFsbFN0cmluZ3MmJiFhbGxOdW1iZXJzKWJyZWFrO30KLWNvbnN0IGNvbHVtbj17dGl0bGU6Y29sTmFtZX07Y29sdW1uLnZhbHVlPWZ1bmN0aW9uKHJvdyl7cmV0dXJuIHJvd1tjb2xOYW1lXTt9O2lmKGFsbFN0cmluZ3Mpe2NvbHVtbi5jbXA9ZnVuY3Rpb24oeCx5KXtyZXR1cm4geFtjb2xOYW1lXS5sb2NhbGVDb21wYXJlKHlbY29sTmFtZV0pO307fWVsc2UgaWYoYWxsTnVtYmVycyl7Y29sdW1uLmNtcD1mdW5jdGlvbih4LHkpe3JldHVybiB4W2NvbE5hbWVdLXlbY29sTmFtZV07fTt9Ci1jb2x1bW5zLnB1c2goY29sdW1uKTt9Ci10YWJsZS50YWJsZUNvbHVtbnM9Y29sdW1uczt0YWJsZS50YWJsZVJvd3M9b2JqZWN0O3RoaXMuYXBwZW5kRWxlbWVudFdpdGhMYWJlbF8obGFiZWwsaW5kZW50LHRhYmxlLHN1ZmZpeCk7dGFibGUucmVidWlsZCgpO3JldHVybjt9Ci10aGlzLmFwcGVuZEVsZW1lbnRzRm9yVHlwZV8obGFiZWwrJ1snLG9iamVjdFswXSxpbmRlbnQsZGVwdGgrMSxtYXhEZXB0aCxvYmplY3QubGVuZ3RoPjE/JywnOiddJytzdWZmaXgpO2ZvcihsZXQgaT0xO2k8b2JqZWN0Lmxlbmd0aDtpKyspe3RoaXMuYXBwZW5kRWxlbWVudHNGb3JUeXBlXygnJyxvYmplY3RbaV0saW5kZW50K2xhYmVsLmxlbmd0aCsxLGRlcHRoKzEsbWF4RGVwdGgsaTxvYmplY3QubGVuZ3RoLTE/JywnOiddJytzdWZmaXgpO30KLXJldHVybjt9LGFwcGVuZEVsZW1lbnRzRm9yT2JqZWN0XyhsYWJlbCxvYmplY3QsaW5kZW50LGRlcHRoLG1heERlcHRoLHN1ZmZpeCl7Y29uc3Qga2V5cz1PYmplY3Qua2V5cyhvYmplY3QpO2lmKGtleXMubGVuZ3RoPT09MCl7dGhpcy5hcHBlbmRTaW1wbGVUZXh0XyhsYWJlbCxpbmRlbnQsJ3t9JyxzdWZmaXgpO3JldHVybjt9Ci10aGlzLmFwcGVuZEVsZW1lbnRzRm9yVHlwZV8obGFiZWwrJ3snK2tleXNbMF0rJzogJyxvYmplY3Rba2V5c1swXV0saW5kZW50LGRlcHRoLG1heERlcHRoLGtleXMubGVuZ3RoPjE/JywnOid9JytzdWZmaXgpO2ZvcihsZXQgaT0xO2k8a2V5cy5sZW5ndGg7aSsrKXt0aGlzLmFwcGVuZEVsZW1lbnRzRm9yVHlwZV8oa2V5c1tpXSsnOiAnLG9iamVjdFtrZXlzW2ldXSxpbmRlbnQrbGFiZWwubGVuZ3RoKzEsZGVwdGgrMSxtYXhEZXB0aCxpPGtleXMubGVuZ3RoLTE/JywnOid9JytzdWZmaXgpO319LGFwcGVuZEVsZW1lbnRXaXRoTGFiZWxfKGxhYmVsLGluZGVudCxkYXRhRWxlbWVudCxzdWZmaXgpe2NvbnN0IHJvdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtjb25zdCBpbmRlbnRTcGFuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtpbmRlbnRTcGFuLnN0eWxlLndoaXRlU3BhY2U9J3ByZSc7Zm9yKGxldCBpPTA7aTxpbmRlbnQ7aSsrKXtQb2x5bWVyLmRvbShpbmRlbnRTcGFuKS50ZXh0Q29udGVudCs9JyAnO30KLVBvbHltZXIuZG9tKHJvdykuYXBwZW5kQ2hpbGQoaW5kZW50U3Bhbik7Y29uc3QgbGFiZWxTcGFuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtQb2x5bWVyLmRvbShsYWJlbFNwYW4pLnRleHRDb250ZW50PWxhYmVsO1BvbHltZXIuZG9tKHJvdykuYXBwZW5kQ2hpbGQobGFiZWxTcGFuKTtQb2x5bWVyLmRvbShyb3cpLmFwcGVuZENoaWxkKGRhdGFFbGVtZW50KTtjb25zdCBzdWZmaXhTcGFuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtQb2x5bWVyLmRvbShzdWZmaXhTcGFuKS50ZXh0Q29udGVudD1zdWZmaXg7UG9seW1lci5kb20ocm93KS5hcHBlbmRDaGlsZChzdWZmaXhTcGFuKTtyb3cuZGF0YUVsZW1lbnQ9ZGF0YUVsZW1lbnQ7UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLmFwcGVuZENoaWxkKHJvdyk7fSxhcHBlbmRTaW1wbGVUZXh0XyhsYWJlbCxpbmRlbnQsdGV4dCxzdWZmaXgpe2NvbnN0IGVsPXRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7UG9seW1lci5kb20oZWwpLnRleHRDb250ZW50PXRleHQ7dGhpcy5hcHBlbmRFbGVtZW50V2l0aExhYmVsXyhsYWJlbCxpbmRlbnQsZWwsc3VmZml4KTtyZXR1cm4gZWw7fX0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1nZW5lcmljLW9iamVjdC12aWV3LXdpdGgtbGFiZWwnLHJlYWR5KCl7dGhpcy5sYWJlbEVsXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTt0aGlzLmdlbmVyaWNPYmplY3RWaWV3Xz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXcnKTtQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLmFwcGVuZENoaWxkKHRoaXMubGFiZWxFbF8pO1BvbHltZXIuZG9tKHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQodGhpcy5nZW5lcmljT2JqZWN0Vmlld18pO30sZ2V0IGxhYmVsKCl7cmV0dXJuIFBvbHltZXIuZG9tKHRoaXMubGFiZWxFbF8pLnRleHRDb250ZW50O30sc2V0IGxhYmVsKGxhYmVsKXtQb2x5bWVyLmRvbSh0aGlzLmxhYmVsRWxfKS50ZXh0Q29udGVudD1sYWJlbDt9LGdldCBvYmplY3QoKXtyZXR1cm4gdGhpcy5nZW5lcmljT2JqZWN0Vmlld18ub2JqZWN0O30sc2V0IG9iamVjdChvYmplY3Qpe3RoaXMuZ2VuZXJpY09iamVjdFZpZXdfLm9iamVjdD1vYmplY3Q7fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5hbHlzaXMnLGZ1bmN0aW9uKCl7Y29uc3QgT2JqZWN0U25hcHNob3RWaWV3PXRyLnVpLmIuZGVmaW5lKCdvYmplY3Qtc25hcHNob3QtdmlldycpO09iamVjdFNuYXBzaG90Vmlldy5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoKXt0aGlzLm9iamVjdFNuYXBzaG90Xz11bmRlZmluZWQ7fSxnZXQgcmVxdWlyZXNUYWxsVmlldygpe3JldHVybiB0cnVlO30sc2V0IG1vZGVsRXZlbnQob2JqKXt0aGlzLm9iamVjdFNuYXBzaG90PW9iajt9LGdldCBtb2RlbEV2ZW50KCl7cmV0dXJuIHRoaXMub2JqZWN0U25hcHNob3Q7fSxnZXQgb2JqZWN0U25hcHNob3QoKXtyZXR1cm4gdGhpcy5vYmplY3RTbmFwc2hvdF87fSxzZXQgb2JqZWN0U25hcHNob3QoaSl7dGhpcy5vYmplY3RTbmFwc2hvdF89aTt0aGlzLnVwZGF0ZUNvbnRlbnRzKCk7fSx1cGRhdGVDb250ZW50cygpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fX07Y29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5UWVBFX0JBU0VEX1JFR0lTVFJZX01PREUpO29wdGlvbnMubWFuZGF0b3J5QmFzZUNsYXNzPU9iamVjdFNuYXBzaG90VmlldztvcHRpb25zLmRlZmF1bHRNZXRhZGF0YT17c2hvd0luc3RhbmNlczp0cnVlLHNob3dJblRyYWNrVmlldzp0cnVlfTt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoT2JqZWN0U25hcHNob3RWaWV3LG9wdGlvbnMpO3JldHVybntPYmplY3RTbmFwc2hvdFZpZXcsfTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWItZHJhZy1oYW5kbGUnLGNyZWF0ZWQoKXt0aGlzLmxhc3RNb3VzZVBvc189MDt0aGlzLm9uTW91c2VNb3ZlXz10aGlzLm9uTW91c2VNb3ZlXy5iaW5kKHRoaXMpO3RoaXMub25Nb3VzZVVwXz10aGlzLm9uTW91c2VVcF8uYmluZCh0aGlzKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsdGhpcy5vbk1vdXNlRG93bl8pO3RoaXMudGFyZ2V0Xz11bmRlZmluZWQ7dGhpcy5ob3Jpem9udGFsPXRydWU7dGhpcy5vYnNlcnZlcl89bmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5kaWRUYXJnZXRNdXRhdGVfLmJpbmQodGhpcykpO3RoaXMudGFyZ2V0U2l6ZXNCeU1vZGVLZXlfPXt9O30sZ2V0IG1vZGVLZXlfKCl7cmV0dXJuIHRoaXMudGFyZ2V0Xy5jbGFzc05hbWU9PT0nJz8nLic6dGhpcy50YXJnZXRfLmNsYXNzTmFtZTt9LGdldCB0YXJnZXQoKXtyZXR1cm4gdGhpcy50YXJnZXRfO30sc2V0IHRhcmdldCh0YXJnZXQpe3RoaXMub2JzZXJ2ZXJfLmRpc2Nvbm5lY3QoKTt0aGlzLnRhcmdldF89dGFyZ2V0O2lmKCF0aGlzLnRhcmdldF8pcmV0dXJuO3RoaXMub2JzZXJ2ZXJfLm9ic2VydmUodGhpcy50YXJnZXRfLHthdHRyaWJ1dGVzOnRydWUsYXR0cmlidXRlRmlsdGVyOlsnY2xhc3MnXX0pO30sZ2V0IGhvcml6b250YWwoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsXzt9LHNldCBob3Jpem9udGFsKGgpe3RoaXMuaG9yaXpvbnRhbF89aDtpZih0aGlzLmhvcml6b250YWxfKXt0aGlzLmNsYXNzTmFtZT0naG9yaXpvbnRhbC1kcmFnLWhhbmRsZSc7fWVsc2V7dGhpcy5jbGFzc05hbWU9J3ZlcnRpY2FsLWRyYWctaGFuZGxlJzt9fSxnZXQgdmVydGljYWwoKXtyZXR1cm4hdGhpcy5ob3Jpem9udGFsXzt9LHNldCB2ZXJ0aWNhbCh2KXt0aGlzLmhvcml6b250YWw9IXY7fSxmb3JjZU11dGF0aW9uT2JzZXJ2ZXJGbHVzaF8oKXtjb25zdCByZWNvcmRzPXRoaXMub2JzZXJ2ZXJfLnRha2VSZWNvcmRzKCk7aWYocmVjb3Jkcy5sZW5ndGgpe3RoaXMuZGlkVGFyZ2V0TXV0YXRlXyhyZWNvcmRzKTt9fSxkaWRUYXJnZXRNdXRhdGVfKGUpe2NvbnN0IG1vZGVTaXplPXRoaXMudGFyZ2V0U2l6ZXNCeU1vZGVLZXlfW3RoaXMubW9kZUtleV9dO2lmKG1vZGVTaXplIT09dW5kZWZpbmVkKXt0aGlzLnNldFRhcmdldFNpemVfKG1vZGVTaXplKTtyZXR1cm47fQotdGhpcy50YXJnZXRfLnN0eWxlW3RoaXMudGFyZ2V0U3R5bGVLZXlfXT0nJzt9LGdldCB0YXJnZXRTdHlsZUtleV8oKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsXz8naGVpZ2h0Jzond2lkdGgnO30sZ2V0VGFyZ2V0U2l6ZV8oKXtjb25zdCB0YXJnZXRTdHlsZUtleT10aGlzLnRhcmdldFN0eWxlS2V5XztpZighdGhpcy50YXJnZXRfLnN0eWxlW3RhcmdldFN0eWxlS2V5XSl7dGhpcy50YXJnZXRfLnN0eWxlW3RhcmdldFN0eWxlS2V5XT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnRhcmdldF8pW3RhcmdldFN0eWxlS2V5XTt9Ci1jb25zdCBzaXplPXBhcnNlSW50KHRoaXMudGFyZ2V0Xy5zdHlsZVt0YXJnZXRTdHlsZUtleV0pO3RoaXMudGFyZ2V0U2l6ZXNCeU1vZGVLZXlfW3RoaXMubW9kZUtleV9dPXNpemU7cmV0dXJuIHNpemU7fSxzZXRUYXJnZXRTaXplXyhzKXt0aGlzLnRhcmdldF8uc3R5bGVbdGhpcy50YXJnZXRTdHlsZUtleV9dPXMrJ3B4Jzt0aGlzLnRhcmdldFNpemVzQnlNb2RlS2V5X1t0aGlzLm1vZGVLZXlfXT1zO3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdkcmFnLWhhbmRsZS1yZXNpemUnLHRydWUsZmFsc2UpO30sYXBwbHlEZWx0YV8oZGVsdGEpe2NvbnN0IGN1clNpemU9dGhpcy5nZXRUYXJnZXRTaXplXygpO2xldCBuZXdTaXplO2lmKHRoaXMudGFyZ2V0Xz09PXRoaXMubmV4dEVsZW1lbnRTaWJsaW5nKXtuZXdTaXplPWN1clNpemUrZGVsdGE7fWVsc2V7bmV3U2l6ZT1jdXJTaXplLWRlbHRhO30KLXRoaXMuc2V0VGFyZ2V0U2l6ZV8obmV3U2l6ZSk7fSxvbk1vdXNlTW92ZV8oZSl7Y29uc3QgY3VyTW91c2VQb3M9dGhpcy5ob3Jpem9udGFsXz9lLmNsaWVudFk6ZS5jbGllbnRYO2NvbnN0IGRlbHRhPXRoaXMubGFzdE1vdXNlUG9zXy1jdXJNb3VzZVBvczt0aGlzLmFwcGx5RGVsdGFfKGRlbHRhKTt0aGlzLmxhc3RNb3VzZVBvc189Y3VyTW91c2VQb3M7ZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiB0cnVlO30sb25Nb3VzZURvd25fKGUpe2lmKCF0aGlzLnRhcmdldF8pcmV0dXJuO3RoaXMuZm9yY2VNdXRhdGlvbk9ic2VydmVyRmx1c2hfKCk7dGhpcy5sYXN0TW91c2VQb3NfPXRoaXMuaG9yaXpvbnRhbF8/ZS5jbGllbnRZOmUuY2xpZW50WDtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLHRoaXMub25Nb3VzZU1vdmVfKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJyx0aGlzLm9uTW91c2VVcF8pO2UucHJldmVudERlZmF1bHQoKTtyZXR1cm4gdHJ1ZTt9LG9uTW91c2VVcF8oZSl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyx0aGlzLm9uTW91c2VNb3ZlXyk7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsdGhpcy5vbk1vdXNlVXBfKTtlLnByZXZlbnREZWZhdWx0KCk7fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBIb3RLZXkoZGljdCl7aWYoZGljdC5ldmVudFR5cGU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignZXZlbnRUeXBlIG11c3QgYmUgZ2l2ZW4nKTt9Ci1pZihkaWN0LmtleUNvZGU9PT11bmRlZmluZWQmJmRpY3Qua2V5Q29kZXM9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcigna2V5Q29kZSBvciBrZXlDb2RlcyBtdXN0IGJlIGdpdmVuJyk7fQotaWYoZGljdC5rZXlDb2RlIT09dW5kZWZpbmVkJiZkaWN0LmtleUNvZGVzIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ09ubHkga2V5Q29kZSBvciBrZXlDb2RlcyBjYW4gYmUgZ2l2ZW4nKTt9Ci1pZihkaWN0LmNhbGxiYWNrPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ2NhbGxiYWNrIG11c3QgYmUgZ2l2ZW4nKTt9Ci10aGlzLmV2ZW50VHlwZV89ZGljdC5ldmVudFR5cGU7dGhpcy5rZXlDb2Rlc189W107aWYoZGljdC5rZXlDb2RlKXt0aGlzLnB1c2hLZXlDb2RlXyhkaWN0LmtleUNvZGUpO31lbHNlIGlmKGRpY3Qua2V5Q29kZXMpe2RpY3Qua2V5Q29kZXMuZm9yRWFjaCh0aGlzLnB1c2hLZXlDb2RlXyx0aGlzKTt9Ci10aGlzLnVzZUNhcHR1cmVfPSEhZGljdC51c2VDYXB0dXJlO3RoaXMuY2FsbGJhY2tfPWRpY3QuY2FsbGJhY2s7dGhpcy50aGlzQXJnXz1kaWN0LnRoaXNBcmchPT11bmRlZmluZWQ/ZGljdC50aGlzQXJnOnVuZGVmaW5lZDt0aGlzLmhlbHBUZXh0Xz1kaWN0LmhlbHBUZXh0IT09dW5kZWZpbmVkP2RpY3QuaGVscFRleHQ6dW5kZWZpbmVkO30KLUhvdEtleS5wcm90b3R5cGU9e2dldCBldmVudFR5cGUoKXtyZXR1cm4gdGhpcy5ldmVudFR5cGVfO30sZ2V0IGtleUNvZGVzKCl7cmV0dXJuIHRoaXMua2V5Q29kZXNfO30sZ2V0IGhlbHBUZXh0KCl7cmV0dXJuIHRoaXMuaGVscFRleHRfO30sY2FsbChlKXt0aGlzLmNhbGxiYWNrXy5jYWxsKHRoaXMudGhpc0FyZ18sZSk7fSxwdXNoS2V5Q29kZV8oa2V5Q29kZSl7dGhpcy5rZXlDb2Rlc18ucHVzaChrZXlDb2RlKTt9fTtyZXR1cm57SG90S2V5LH07fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0di11aS1iLWhvdGtleS1jb250cm9sbGVyJyxjcmVhdGVkKCl7dGhpcy5pc0F0dGFjaGVkXz1mYWxzZTt0aGlzLmdsb2JhbE1vZGVfPWZhbHNlO3RoaXMuc2xhdmVkVG9QYXJlbnRDb250cm9sbGVyXz11bmRlZmluZWQ7dGhpcy5jdXJIb3N0Xz11bmRlZmluZWQ7dGhpcy5jaGlsZENvbnRyb2xsZXJzXz1bXTt0aGlzLmJ1YmJsaW5nS2V5RG93bkhvdEtleXNfPXt9O3RoaXMuY2FwdHVyaW5nS2V5RG93bkhvdEtleXNfPXt9O3RoaXMuYnViYmxpbmdLZXlQcmVzc0hvdEtleXNfPXt9O3RoaXMuY2FwdHVyaW5nS2V5UHJlc3NIb3RLZXlzXz17fTt0aGlzLm9uQnViYmxpbmdLZXlEb3duXz10aGlzLm9uS2V5Xy5iaW5kKHRoaXMsZmFsc2UpO3RoaXMub25DYXB0dXJpbmdLZXlEb3duXz10aGlzLm9uS2V5Xy5iaW5kKHRoaXMsdHJ1ZSk7dGhpcy5vbkJ1YmJsaW5nS2V5UHJlc3NfPXRoaXMub25LZXlfLmJpbmQodGhpcyxmYWxzZSk7dGhpcy5vbkNhcHR1cmluZ0tleVByZXNzXz10aGlzLm9uS2V5Xy5iaW5kKHRoaXMsdHJ1ZSk7fSxhdHRhY2hlZCgpe3RoaXMuaXNBdHRhY2hlZF89dHJ1ZTtjb25zdCBob3N0PXRoaXMuZmluZEhvc3RfKCk7aWYoaG9zdC5fX2hvdGtleUNvbnRyb2xsZXIpe3Rocm93IG5ldyBFcnJvcignTXVsdGlwbGUgaG90a2V5IGNvbnRyb2xsZXJzIGF0dGFjaGVkIHRvIHRoaXMgaG9zdCcpO30KLWhvc3QuX19ob3RrZXlDb250cm9sbGVyPXRoaXM7dGhpcy5jdXJIb3N0Xz1ob3N0O2xldCBwYXJlbnRFbGVtZW50O2lmKGhvc3QucGFyZW50RWxlbWVudCl7cGFyZW50RWxlbWVudD1ob3N0LnBhcmVudEVsZW1lbnQ7fWVsc2V7cGFyZW50RWxlbWVudD1Qb2x5bWVyLmRvbShob3N0KS5wYXJlbnROb2RlLmhvc3Q7fQotY29uc3QgcGFyZW50Q29udHJvbGxlcj10ci5iLmdldEhvdGtleUNvbnRyb2xsZXJGb3JFbGVtZW50KHBhcmVudEVsZW1lbnQpO2lmKHBhcmVudENvbnRyb2xsZXIpe3RoaXMuc2xhdmVkVG9QYXJlbnRDb250cm9sbGVyXz1wYXJlbnRDb250cm9sbGVyO3BhcmVudENvbnRyb2xsZXIuYWRkQ2hpbGRDb250cm9sbGVyXyh0aGlzKTtyZXR1cm47fQotaG9zdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLm9uQnViYmxpbmdLZXlEb3duXyxmYWxzZSk7aG9zdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLm9uQ2FwdHVyaW5nS2V5RG93bl8sdHJ1ZSk7aG9zdC5hZGRFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsdGhpcy5vbkJ1YmJsaW5nS2V5UHJlc3NfLGZhbHNlKTtob3N0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJyx0aGlzLm9uQ2FwdHVyaW5nS2V5UHJlc3NfLHRydWUpO30sZGV0YWNoZWQoKXt0aGlzLmlzQXR0YWNoZWRfPWZhbHNlO2NvbnN0IGhvc3Q9dGhpcy5jdXJIb3N0XztpZighaG9zdClyZXR1cm47ZGVsZXRlIGhvc3QuX19ob3RrZXlDb250cm9sbGVyO3RoaXMuY3VySG9zdF89dW5kZWZpbmVkO2lmKHRoaXMuc2xhdmVkVG9QYXJlbnRDb250cm9sbGVyXyl7dGhpcy5zbGF2ZWRUb1BhcmVudENvbnRyb2xsZXJfLnJlbW92ZUNoaWxkQ29udHJvbGxlcl8odGhpcyk7dGhpcy5zbGF2ZWRUb1BhcmVudENvbnRyb2xsZXJfPXVuZGVmaW5lZDtyZXR1cm47fQotaG9zdC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLm9uQnViYmxpbmdLZXlEb3duXyxmYWxzZSk7aG9zdC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLm9uQ2FwdHVyaW5nS2V5RG93bl8sdHJ1ZSk7aG9zdC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsdGhpcy5vbkJ1YmJsaW5nS2V5UHJlc3NfLGZhbHNlKTtob3N0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJyx0aGlzLm9uQ2FwdHVyaW5nS2V5UHJlc3NfLHRydWUpO30sYWRkQ2hpbGRDb250cm9sbGVyXyhjb250cm9sbGVyKXtjb25zdCBpPXRoaXMuY2hpbGRDb250cm9sbGVyc18uaW5kZXhPZihjb250cm9sbGVyKTtpZihpIT09LTEpe3Rocm93IG5ldyBFcnJvcignQ29udHJvbGxlciBhbHJlYWR5IHJlZ2lzdGVyZWQnKTt9Ci10aGlzLmNoaWxkQ29udHJvbGxlcnNfLnB1c2goY29udHJvbGxlcik7fSxyZW1vdmVDaGlsZENvbnRyb2xsZXJfKGNvbnRyb2xsZXIpe2NvbnN0IGk9dGhpcy5jaGlsZENvbnRyb2xsZXJzXy5pbmRleE9mKGNvbnRyb2xsZXIpO2lmKGk9PT0tMSl7dGhyb3cgbmV3IEVycm9yKCdDb250cm9sbGVyIG5vdCByZWdpc3RlcmVkJyk7fQotdGhpcy5jaGlsZENvbnRyb2xsZXJzXy5zcGxpY2UoaSwxKTtyZXR1cm4gY29udHJvbGxlcjt9LGdldEtleU1hcEZvckV2ZW50VHlwZV8oZXZlbnRUeXBlLHVzZUNhcHR1cmUpe2lmKGV2ZW50VHlwZT09PSdrZXlkb3duJyl7aWYoIXVzZUNhcHR1cmUpe3JldHVybiB0aGlzLmJ1YmJsaW5nS2V5RG93bkhvdEtleXNfO30KLXJldHVybiB0aGlzLmNhcHR1cmluZ0tleURvd25Ib3RLZXlzXzt9Ci1pZihldmVudFR5cGU9PT0na2V5cHJlc3MnKXtpZighdXNlQ2FwdHVyZSl7cmV0dXJuIHRoaXMuYnViYmxpbmdLZXlQcmVzc0hvdEtleXNfO30KLXJldHVybiB0aGlzLmNhcHR1cmluZ0tleVByZXNzSG90S2V5c187fQotdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBrZXkgZXZlbnQnKTt9LGFkZEhvdEtleShob3RLZXkpe2lmKCEoaG90S2V5IGluc3RhbmNlb2YgdHIudWkuYi5Ib3RLZXkpKXt0aHJvdyBuZXcgRXJyb3IoJ2hvdEtleSBtdXN0IGJlIGEgdHIudWkuYi5Ib3RLZXknKTt9Ci1jb25zdCBrZXlNYXA9dGhpcy5nZXRLZXlNYXBGb3JFdmVudFR5cGVfKGhvdEtleS5ldmVudFR5cGUsaG90S2V5LnVzZUNhcHR1cmUpO2ZvcihsZXQgaT0wO2k8aG90S2V5LmtleUNvZGVzLmxlbmd0aDtpKyspe2NvbnN0IGtleUNvZGU9aG90S2V5LmtleUNvZGVzW2ldO2lmKGtleU1hcFtrZXlDb2RlXSl7dGhyb3cgbmV3IEVycm9yKCdLZXkgaXMgYWxyZWFkeSBib3VuZCBmb3Iga2V5Q29kZT0nK2tleUNvZGUpO319Ci1mb3IobGV0IGk9MDtpPGhvdEtleS5rZXlDb2Rlcy5sZW5ndGg7aSsrKXtjb25zdCBrZXlDb2RlPWhvdEtleS5rZXlDb2Rlc1tpXTtrZXlNYXBba2V5Q29kZV09aG90S2V5O30KLXJldHVybiBob3RLZXk7fSxyZW1vdmVIb3RLZXkoaG90S2V5KXtpZighKGhvdEtleSBpbnN0YW5jZW9mIHRyLnVpLmIuSG90S2V5KSl7dGhyb3cgbmV3IEVycm9yKCdob3RLZXkgbXVzdCBiZSBhIHRyLnVpLmIuSG90S2V5Jyk7fQotY29uc3Qga2V5TWFwPXRoaXMuZ2V0S2V5TWFwRm9yRXZlbnRUeXBlXyhob3RLZXkuZXZlbnRUeXBlLGhvdEtleS51c2VDYXB0dXJlKTtmb3IobGV0IGk9MDtpPGhvdEtleS5rZXlDb2Rlcy5sZW5ndGg7aSsrKXtjb25zdCBrZXlDb2RlPWhvdEtleS5rZXlDb2Rlc1tpXTtpZigha2V5TWFwW2tleUNvZGVdKXt0aHJvdyBuZXcgRXJyb3IoJ0tleSBpcyBub3QgYm91bmQgZm9yIGtleUNvZGU9JytrZXlDb2RlKTt9Ci1rZXlNYXBba2V5Q29kZV09aG90S2V5O30KLWZvcihsZXQgaT0wO2k8aG90S2V5LmtleUNvZGVzLmxlbmd0aDtpKyspe2NvbnN0IGtleUNvZGU9aG90S2V5LmtleUNvZGVzW2ldO2RlbGV0ZSBrZXlNYXBba2V5Q29kZV07fQotcmV0dXJuIGhvdEtleTt9LGdldCBnbG9iYWxNb2RlKCl7cmV0dXJuIHRoaXMuZ2xvYmFsTW9kZV87fSxzZXQgZ2xvYmFsTW9kZShnbG9iYWxNb2RlKXtjb25zdCB3YXNBdHRhY2hlZD10aGlzLmlzQXR0YWNoZWRfO2lmKHdhc0F0dGFjaGVkKXt0aGlzLmRldGFjaGVkKCk7fQotdGhpcy5nbG9iYWxNb2RlXz0hIWdsb2JhbE1vZGU7aWYod2FzQXR0YWNoZWQpe3RoaXMuYXR0YWNoZWQoKTt9fSxnZXQgdG9wbW9zdENvbnJvbGxlcl8oKXtpZih0aGlzLnNsYXZlZFRvUGFyZW50Q29udHJvbGxlcl8pe3JldHVybiB0aGlzLnNsYXZlZFRvUGFyZW50Q29udHJvbGxlcl8udG9wbW9zdENvbnJvbGxlcl87fQotcmV0dXJuIHRoaXM7fSxjaGlsZFJlcXVlc3RzR2VuZXJhbEZvY3VzKGNoaWxkKXtjb25zdCB0b3Btb3N0PXRoaXMudG9wbW9zdENvbnJvbGxlcl87aWYodG9wbW9zdC5jdXJIb3N0Xyl7aWYodG9wbW9zdC5jdXJIb3N0Xy5oYXNBdHRyaWJ1dGUoJ3RhYkluZGV4Jykpe3RvcG1vc3QuY3VySG9zdF8uZm9jdXMoKTt9ZWxzZXtpZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KXtkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTt9fX1lbHNle2lmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO319fSxjaGlsZFJlcXVlc3RzQmx1cihjaGlsZCl7Y2hpbGQuYmx1cigpO2NvbnN0IHRvcG1vc3Q9dGhpcy50b3Btb3N0Q29ucm9sbGVyXztpZih0b3Btb3N0LmN1ckhvc3RfKXt0b3Btb3N0LmN1ckhvc3RfLmZvY3VzKCk7fX0sZmluZEhvc3RfKCl7aWYodGhpcy5nbG9iYWxNb2RlXylyZXR1cm4gZG9jdW1lbnQuYm9keTtpZih0aGlzLnBhcmVudEVsZW1lbnQpcmV0dXJuIHRoaXMucGFyZW50RWxlbWVudDtpZighUG9seW1lci5kb20odGhpcykucGFyZW50Tm9kZSlyZXR1cm4gdGhpcy5ob3N0O2xldCBub2RlPXRoaXMucGFyZW50Tm9kZTt3aGlsZShQb2x5bWVyLmRvbShub2RlKS5wYXJlbnROb2RlKW5vZGU9UG9seW1lci5kb20obm9kZSkucGFyZW50Tm9kZTtyZXR1cm4gbm9kZS5ob3N0O30sYXBwZW5kTWF0Y2hpbmdIb3RLZXlzVG9fKG1hdGNoZWRIb3RLZXlzLHVzZUNhcHR1cmUsZSl7Y29uc3QgbG9jYWxLZXlNYXA9dGhpcy5nZXRLZXlNYXBGb3JFdmVudFR5cGVfKGUudHlwZSx1c2VDYXB0dXJlKTtjb25zdCBsb2NhbEhvdEtleT1sb2NhbEtleU1hcFtlLmtleUNvZGVdO2lmKGxvY2FsSG90S2V5KXttYXRjaGVkSG90S2V5cy5wdXNoKGxvY2FsSG90S2V5KTt9Ci1mb3IobGV0IGk9MDtpPHRoaXMuY2hpbGRDb250cm9sbGVyc18ubGVuZ3RoO2krKyl7Y29uc3QgY29udHJvbGxlcj10aGlzLmNoaWxkQ29udHJvbGxlcnNfW2ldO2NvbnRyb2xsZXIuYXBwZW5kTWF0Y2hpbmdIb3RLZXlzVG9fKG1hdGNoZWRIb3RLZXlzLHVzZUNhcHR1cmUsZSk7fX0sb25LZXlfKHVzZUNhcHR1cmUsZSl7aWYoIXVzZUNhcHR1cmUmJmUucGF0aFswXS50YWdOYW1lPT09J0lOUFVUJylyZXR1cm47bGV0IHNvcnRlZENvbnRyb2xsZXJzO2NvbnN0IG1hdGNoZWRIb3RLZXlzPVtdO3RoaXMuYXBwZW5kTWF0Y2hpbmdIb3RLZXlzVG9fKG1hdGNoZWRIb3RLZXlzLHVzZUNhcHR1cmUsZSk7aWYobWF0Y2hlZEhvdEtleXMubGVuZ3RoPT09MClyZXR1cm4gZmFsc2U7aWYobWF0Y2hlZEhvdEtleXMubGVuZ3RoPjEpe3Rocm93IG5ldyBFcnJvcignTW9yZSB0aGFuIG9uZSBob3RLZXkgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkJyk7fQotY29uc3QgaG90S2V5PW1hdGNoZWRIb3RLZXlzWzBdO2xldCBwcmV2ZW50ZWQ9MDtwcmV2ZW50ZWR8PWhvdEtleS5jYWxsKGUpO3JldHVybiFwcmV2ZW50ZWQmJmUuZGVmYXVsdFByZXZlbnRlZDt9fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGdldEhvdGtleUNvbnRyb2xsZXJGb3JFbGVtZW50KHJlZkVsZW1lbnQpe2xldCBjdXJFbGVtZW50PXJlZkVsZW1lbnQ7d2hpbGUoY3VyRWxlbWVudCl7aWYoY3VyRWxlbWVudC50YWdOYW1lPT09J3R2LXVpLWItaG90a2V5LWNvbnRyb2xsZXInKXtyZXR1cm4gY3VyRWxlbWVudDt9Ci1pZihjdXJFbGVtZW50Ll9faG90a2V5Q29udHJvbGxlcil7cmV0dXJuIGN1ckVsZW1lbnQuX19ob3RrZXlDb250cm9sbGVyO30KLWlmKGN1ckVsZW1lbnQucGFyZW50RWxlbWVudCl7Y3VyRWxlbWVudD1jdXJFbGVtZW50LnBhcmVudEVsZW1lbnQ7Y29udGludWU7fQotY3VyRWxlbWVudD1maW5kSG9zdChjdXJFbGVtZW50KTt9Ci1yZXR1cm4gdW5kZWZpbmVkO30KLWZ1bmN0aW9uIGZpbmRIb3N0KGluaXRpYWxOb2RlKXtsZXQgbm9kZT1pbml0aWFsTm9kZTt3aGlsZShQb2x5bWVyLmRvbShub2RlKS5wYXJlbnROb2RlKXtub2RlPVBvbHltZXIuZG9tKG5vZGUpLnBhcmVudE5vZGU7fQotcmV0dXJuIG5vZGUuaG9zdDt9Ci1yZXR1cm57Z2V0SG90a2V5Q29udHJvbGxlckZvckVsZW1lbnQsfTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWItaW5mby1iYXInLHJlYWR5KCl7dGhpcy5tZXNzYWdlRWxfPXRoaXMuJC5tZXNzYWdlO3RoaXMuYnV0dG9uc0VsXz10aGlzLiQuYnV0dG9uczt0aGlzLm1lc3NhZ2U9Jyc7fSxnZXQgbWVzc2FnZSgpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzLm1lc3NhZ2VFbF8pLnRleHRDb250ZW50O30sc2V0IG1lc3NhZ2UobWVzc2FnZSl7UG9seW1lci5kb20odGhpcy5tZXNzYWdlRWxfKS50ZXh0Q29udGVudD1tZXNzYWdlO30sZ2V0IHZpc2libGUoKXtyZXR1cm4hdGhpcy5oaWRkZW47fSxzZXQgdmlzaWJsZSh2aXNpYmxlKXt0aGlzLmhpZGRlbj0hdmlzaWJsZTt9LHJlbW92ZUFsbEJ1dHRvbnMoKXtQb2x5bWVyLmRvbSh0aGlzLmJ1dHRvbnNFbF8pLnRleHRDb250ZW50PScnO30sYWRkQnV0dG9uKHRleHQsY2xpY2tDYWxsYmFjayl7Y29uc3QgYnV0dG9uPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1BvbHltZXIuZG9tKGJ1dHRvbikudGV4dENvbnRlbnQ9dGV4dDtidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGV2ZW50PT5jbGlja0NhbGxiYWNrKGV2ZW50LHRoaXMpKTtQb2x5bWVyLmRvbSh0aGlzLmJ1dHRvbnNFbF8pLmFwcGVuZENoaWxkKGJ1dHRvbik7cmV0dXJuIGJ1dHRvbjt9fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2NvbnN0IENvbnRhaW5lclRoYXREZWNvcmF0ZXNJdHNDaGlsZHJlbj10ci51aS5iLmRlZmluZSgnZGl2Jyk7Q29udGFpbmVyVGhhdERlY29yYXRlc0l0c0NoaWxkcmVuLnByb3RvdHlwZT17X19wcm90b19fOkhUTUxEaXZFbGVtZW50LnByb3RvdHlwZSxkZWNvcmF0ZSgpe3RoaXMub2JzZXJ2ZXJfPW5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKHRoaXMuZGlkTXV0YXRlXy5iaW5kKHRoaXMpKTt0aGlzLm9ic2VydmVyXy5vYnNlcnZlKHRoaXMse2NoaWxkTGlzdDp0cnVlfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJ3RleHRDb250ZW50Jyx7Z2V0OnVuZGVmaW5lZCxzZXQ6dGhpcy5vblNldFRleHRDb250ZW50X30pO30sYXBwZW5kQ2hpbGQoeCl7SFRNTERpdkVsZW1lbnQucHJvdG90eXBlLmFwcGVuZENoaWxkLmNhbGwodGhpcyx4KTt0aGlzLmRpZE11dGF0ZV8odGhpcy5vYnNlcnZlcl8udGFrZVJlY29yZHMoKSk7fSxpbnNlcnRCZWZvcmUoeCx5KXtIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlLmNhbGwodGhpcyx4LHkpO3RoaXMuZGlkTXV0YXRlXyh0aGlzLm9ic2VydmVyXy50YWtlUmVjb3JkcygpKTt9LHJlbW92ZUNoaWxkKHgpe0hUTUxEaXZFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZC5jYWxsKHRoaXMseCk7dGhpcy5kaWRNdXRhdGVfKHRoaXMub2JzZXJ2ZXJfLnRha2VSZWNvcmRzKCkpO30scmVwbGFjZUNoaWxkKHgseSl7SFRNTERpdkVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZC5jYWxsKHRoaXMseCx5KTt0aGlzLmRpZE11dGF0ZV8odGhpcy5vYnNlcnZlcl8udGFrZVJlY29yZHMoKSk7fSxvblNldFRleHRDb250ZW50Xyh0ZXh0Q29udGVudCl7aWYodGV4dENvbnRlbnQhPT0nJyl7dGhyb3cgbmV3IEVycm9yKCd0ZXh0Q29udGVudCBjYW4gb25seSBiZSBzZXQgdG8gXCdcJy4nKTt9Ci10aGlzLmNsZWFyKCk7fSxjbGVhcigpe3doaWxlKFBvbHltZXIuZG9tKHRoaXMpLmxhc3RDaGlsZCl7SFRNTERpdkVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUNoaWxkLmNhbGwodGhpcyxQb2x5bWVyLmRvbSh0aGlzKS5sYXN0Q2hpbGQpO30KLXRoaXMuZGlkTXV0YXRlXyh0aGlzLm9ic2VydmVyXy50YWtlUmVjb3JkcygpKTt9LGRpZE11dGF0ZV8ocmVjb3Jkcyl7dGhpcy5iZWdpbkRlY29yYXRpbmdfKCk7Zm9yKGxldCBpPTA7aTxyZWNvcmRzLmxlbmd0aDtpKyspe2NvbnN0IGFkZGVkTm9kZXM9cmVjb3Jkc1tpXS5hZGRlZE5vZGVzO2lmKGFkZGVkTm9kZXMpe2ZvcihsZXQgaj0wO2o8YWRkZWROb2Rlcy5sZW5ndGg7aisrKXt0aGlzLmRlY29yYXRlQ2hpbGRfKGFkZGVkTm9kZXNbal0pO319Ci1jb25zdCByZW1vdmVkTm9kZXM9cmVjb3Jkc1tpXS5yZW1vdmVkTm9kZXM7aWYocmVtb3ZlZE5vZGVzKXtmb3IobGV0IGo9MDtqPHJlbW92ZWROb2Rlcy5sZW5ndGg7aisrKXt0aGlzLnVuZGVjb3JhdGVDaGlsZF8ocmVtb3ZlZE5vZGVzW2pdKTt9fX0KLXRoaXMuZG9uZURlY29yYXRpbmdGb3JOb3dfKCk7fSxkZWNvcmF0ZUNoaWxkXyhjaGlsZCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LHVuZGVjb3JhdGVDaGlsZF8oY2hpbGQpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxiZWdpbkRlY29yYXRpbmdfKCl7fSxkb25lRGVjb3JhdGluZ0Zvck5vd18oKXt9fTtyZXR1cm57Q29udGFpbmVyVGhhdERlY29yYXRlc0l0c0NoaWxkcmVuLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2NvbnN0IExpc3RWaWV3PXRyLnVpLmIuZGVmaW5lKCd4LWxpc3QtdmlldycsdHIudWkuYi5Db250YWluZXJUaGF0RGVjb3JhdGVzSXRzQ2hpbGRyZW4pO0xpc3RWaWV3LnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmIuQ29udGFpbmVyVGhhdERlY29yYXRlc0l0c0NoaWxkcmVuLnByb3RvdHlwZSxkZWNvcmF0ZSgpe3RyLnVpLmIuQ29udGFpbmVyVGhhdERlY29yYXRlc0l0c0NoaWxkcmVuLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ3gtbGlzdC12aWV3Jyk7dGhpcy5zdHlsZS5kaXNwbGF5PSdibG9jayc7dGhpcy5zdHlsZS51c2VyU2VsZWN0PSdub25lJzt0aGlzLnN0eWxlLm91dGxpbmU9J25vbmUnO3RoaXMub25JdGVtQ2xpY2tlZF89dGhpcy5vbkl0ZW1DbGlja2VkXy5iaW5kKHRoaXMpO3RoaXMub25LZXlEb3duXz10aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKTt0aGlzLnRhYkluZGV4PTA7dGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLm9uS2V5RG93bl8pO3RoaXMuc2VsZWN0aW9uQ2hhbmdlZF89ZmFsc2U7fSxkZWNvcmF0ZUNoaWxkXyhpdGVtKXtQb2x5bWVyLmRvbShpdGVtKS5jbGFzc0xpc3QuYWRkKCdsaXN0LWl0ZW0nKTtpdGVtLnN0eWxlLnBhZGRpbmdUb3A9JzJweCc7aXRlbS5zdHlsZS5wYWRkaW5nUmlnaHQ9JzRweCc7aXRlbS5zdHlsZS5wYWRkaW5nQm90dG9tPScycHgnO2l0ZW0uc3R5bGUucGFkZGluZ0xlZnQ9JzRweCc7aXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsdGhpcy5vbkl0ZW1DbGlja2VkXyx0cnVlKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXRlbSwnc2VsZWN0ZWQnLHtjb25maWd1cmFibGU6dHJ1ZSxnZXQ6KCk9Pml0ZW0uaGFzQXR0cmlidXRlKCdzZWxlY3RlZCcpLHNldDp2YWx1ZT0+e2NvbnN0IG9sZFNlbGVjdGlvbj10aGlzLnNlbGVjdGVkRWxlbWVudDtpZihvbGRTZWxlY3Rpb24mJm9sZFNlbGVjdGlvbiE9PWl0ZW0mJnZhbHVlKXtQb2x5bWVyLmRvbSh0aGlzLnNlbGVjdGVkRWxlbWVudCkucmVtb3ZlQXR0cmlidXRlKCdzZWxlY3RlZCcpO30KLWlmKHZhbHVlKXtQb2x5bWVyLmRvbShpdGVtKS5zZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJywnc2VsZWN0ZWQnKTtpdGVtLnN0eWxlLmJhY2tncm91bmRDb2xvcj0ncmdiKDE3MSwgMjE3LCAyMDIpJztpdGVtLnN0eWxlLm91dGxpbmU9JzFweCBkb3R0ZWQgcmdiYSgwLDAsMCwwLjEpJztpdGVtLnN0eWxlLm91dGxpbmVPZmZzZXQ9MDt9ZWxzZXtQb2x5bWVyLmRvbShpdGVtKS5yZW1vdmVBdHRyaWJ1dGUoJ3NlbGVjdGVkJyk7aXRlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9Jyc7fQotY29uc3QgbmV3U2VsZWN0aW9uPXRoaXMuc2VsZWN0ZWRFbGVtZW50O2lmKG5ld1NlbGVjdGlvbiE9PW9sZFNlbGVjdGlvbil7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ3NlbGVjdGlvbi1jaGFuZ2VkJyxmYWxzZSk7fX0sfSk7fSx1bmRlY29yYXRlQ2hpbGRfKGl0ZW0pe3RoaXMuc2VsZWN0aW9uQ2hhbmdlZF98PWl0ZW0uc2VsZWN0ZWQ7UG9seW1lci5kb20oaXRlbSkuY2xhc3NMaXN0LnJlbW92ZSgnbGlzdC1pdGVtJyk7aXRlbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsdGhpcy5vbkl0ZW1DbGlja2VkXyk7ZGVsZXRlIGl0ZW0uc2VsZWN0ZWQ7fSxiZWdpbkRlY29yYXRpbmdfKCl7dGhpcy5zZWxlY3Rpb25DaGFuZ2VkXz1mYWxzZTt9LGRvbmVEZWNvcmF0aW5nRm9yTm93Xygpe2lmKHRoaXMuc2VsZWN0aW9uQ2hhbmdlZF8pe3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdzZWxlY3Rpb24tY2hhbmdlZCcsZmFsc2UpO319LGdldCBzZWxlY3RlZEVsZW1lbnQoKXtjb25zdCBlbD1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcubGlzdC1pdGVtW3NlbGVjdGVkXScpO2lmKCFlbClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBlbDt9LHNldCBzZWxlY3RlZEVsZW1lbnQoZWwpe2lmKCFlbCl7aWYodGhpcy5zZWxlY3RlZEVsZW1lbnQpe3RoaXMuc2VsZWN0ZWRFbGVtZW50LnNlbGVjdGVkPWZhbHNlO30KLXJldHVybjt9Ci1pZihlbC5wYXJlbnRFbGVtZW50IT09dGhpcyl7dGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBzZWxlY3QgZWxlbWVudHMgdGhhdCBhcmUgY2hpbGRyZW4gb2YgdGhpcyBsaXN0IHZpZXcnKTt9Ci1lbC5zZWxlY3RlZD10cnVlO30sZ2V0RWxlbWVudEJ5SW5kZXgoaW5kZXgpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcubGlzdC1pdGVtOm50aC1jaGlsZCgnK2luZGV4KycpJyk7fSxjbGVhcigpe2NvbnN0IGNoYW5nZWQ9dGhpcy5zZWxlY3RlZEVsZW1lbnQhPT11bmRlZmluZWQ7dHIudWkuYi5Db250YWluZXJUaGF0RGVjb3JhdGVzSXRzQ2hpbGRyZW4ucHJvdG90eXBlLmNsZWFyLmNhbGwodGhpcyk7aWYoY2hhbmdlZCl7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ3NlbGVjdGlvbi1jaGFuZ2VkJyxmYWxzZSk7fX0sb25JdGVtQ2xpY2tlZF8oZSl7Y29uc3QgY3VycmVudFNlbGVjdGVkRWxlbWVudD10aGlzLnNlbGVjdGVkRWxlbWVudDtpZihjdXJyZW50U2VsZWN0ZWRFbGVtZW50KXtQb2x5bWVyLmRvbShjdXJyZW50U2VsZWN0ZWRFbGVtZW50KS5yZW1vdmVBdHRyaWJ1dGUoJ3NlbGVjdGVkJyk7fQotbGV0IGVsZW1lbnQ9ZS50YXJnZXQ7d2hpbGUoZWxlbWVudC5wYXJlbnRFbGVtZW50IT09dGhpcyl7ZWxlbWVudD1lbGVtZW50LnBhcmVudEVsZW1lbnQ7fQotaWYoZWxlbWVudCE9PWN1cnJlbnRTZWxlY3RlZEVsZW1lbnQpe1BvbHltZXIuZG9tKGVsZW1lbnQpLnNldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnLCdzZWxlY3RlZCcpO30KLXRyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdzZWxlY3Rpb24tY2hhbmdlZCcsZmFsc2UpO30sb25LZXlEb3duXyhlKXtpZih0aGlzLnNlbGVjdGVkRWxlbWVudD09PXVuZGVmaW5lZClyZXR1cm47aWYoZS5rZXlDb2RlPT09Mzgpe2NvbnN0IHByZXY9UG9seW1lci5kb20odGhpcy5zZWxlY3RlZEVsZW1lbnQpLnByZXZpb3VzU2libGluZztpZihwcmV2KXtwcmV2LnNlbGVjdGVkPXRydWU7dHIudWkuYi5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKHByZXYpO2UucHJldmVudERlZmF1bHQoKTtyZXR1cm4gdHJ1ZTt9fWVsc2UgaWYoZS5rZXlDb2RlPT09NDApe2NvbnN0IG5leHQ9UG9seW1lci5kb20odGhpcy5zZWxlY3RlZEVsZW1lbnQpLm5leHRTaWJsaW5nO2lmKG5leHQpe25leHQuc2VsZWN0ZWQ9dHJ1ZTt0ci51aS5iLnNjcm9sbEludG9WaWV3SWZOZWVkZWQobmV4dCk7ZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiB0cnVlO319fSxhZGRJdGVtKHRleHRDb250ZW50KXtjb25zdCBpdGVtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1BvbHltZXIuZG9tKGl0ZW0pLnRleHRDb250ZW50PXRleHRDb250ZW50O1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGl0ZW0pO2l0ZW0uc3R5bGUudXNlclNlbGVjdD0nbm9uZSc7cmV0dXJuIGl0ZW07fX07cmV0dXJue0xpc3RWaWV3LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2NvbnN0IE1PVVNFX1NFTEVDVE9SX01PREU9e307TU9VU0VfU0VMRUNUT1JfTU9ERS5TRUxFQ1RJT049MHgxO01PVVNFX1NFTEVDVE9SX01PREUuUEFOU0NBTj0weDI7TU9VU0VfU0VMRUNUT1JfTU9ERS5aT09NPTB4NDtNT1VTRV9TRUxFQ1RPUl9NT0RFLlRJTUlORz0weDg7TU9VU0VfU0VMRUNUT1JfTU9ERS5ST1RBVEU9MHgxMDtNT1VTRV9TRUxFQ1RPUl9NT0RFLkFMTF9NT0RFUz0weDFGO2NvbnN0IE1PVVNFX1NFTEVDVE9SX01PREVfSU5GT1M9e307TU9VU0VfU0VMRUNUT1JfTU9ERV9JTkZPU1tNT1VTRV9TRUxFQ1RPUl9NT0RFLlBBTlNDQU5dPXtuYW1lOidQQU5TQ0FOJyxtb2RlOk1PVVNFX1NFTEVDVE9SX01PREUuUEFOU0NBTix0aXRsZToncGFuJyxldmVudE5hbWVzOntlbnRlcjonZW50ZXJwYW4nLGJlZ2luOidiZWdpbnBhbicsdXBkYXRlOid1cGRhdGVwYW4nLGVuZDonZW5kcGFuJyxleGl0OidleGl0cGFuJ30sYWN0aXZlQmFja2dyb3VuZFBvc2l0aW9uOictMzBweCAtMTBweCcsZGVmYXVsdEJhY2tncm91bmRQb3NpdGlvbjonMCAtMTBweCd9O01PVVNFX1NFTEVDVE9SX01PREVfSU5GT1NbTU9VU0VfU0VMRUNUT1JfTU9ERS5TRUxFQ1RJT05dPXtuYW1lOidTRUxFQ1RJT04nLG1vZGU6TU9VU0VfU0VMRUNUT1JfTU9ERS5TRUxFQ1RJT04sdGl0bGU6J3NlbGVjdGlvbicsZXZlbnROYW1lczp7ZW50ZXI6J2VudGVyc2VsZWN0aW9uJyxiZWdpbjonYmVnaW5zZWxlY3Rpb24nLHVwZGF0ZTondXBkYXRlc2VsZWN0aW9uJyxlbmQ6J2VuZHNlbGVjdGlvbicsZXhpdDonZXhpdHNlbGVjdGlvbid9LGFjdGl2ZUJhY2tncm91bmRQb3NpdGlvbjonLTMwcHggLTQwcHgnLGRlZmF1bHRCYWNrZ3JvdW5kUG9zaXRpb246JzAgLTQwcHgnfTtNT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW01PVVNFX1NFTEVDVE9SX01PREUuWk9PTV09e25hbWU6J1pPT00nLG1vZGU6TU9VU0VfU0VMRUNUT1JfTU9ERS5aT09NLHRpdGxlOid6b29tJyxldmVudE5hbWVzOntlbnRlcjonZW50ZXJ6b29tJyxiZWdpbjonYmVnaW56b29tJyx1cGRhdGU6J3VwZGF0ZXpvb20nLGVuZDonZW5kem9vbScsZXhpdDonZXhpdHpvb20nfSxhY3RpdmVCYWNrZ3JvdW5kUG9zaXRpb246Jy0zMHB4IC03MHB4JyxkZWZhdWx0QmFja2dyb3VuZFBvc2l0aW9uOicwIC03MHB4J307TU9VU0VfU0VMRUNUT1JfTU9ERV9JTkZPU1tNT1VTRV9TRUxFQ1RPUl9NT0RFLlRJTUlOR109e25hbWU6J1RJTUlORycsbW9kZTpNT1VTRV9TRUxFQ1RPUl9NT0RFLlRJTUlORyx0aXRsZTondGltaW5nJyxldmVudE5hbWVzOntlbnRlcjonZW50ZXJ0aW1pbmcnLGJlZ2luOidiZWdpbnRpbWluZycsdXBkYXRlOid1cGRhdGV0aW1pbmcnLGVuZDonZW5kdGltaW5nJyxleGl0OidleGl0dGltaW5nJ30sYWN0aXZlQmFja2dyb3VuZFBvc2l0aW9uOictMzBweCAtMTAwcHgnLGRlZmF1bHRCYWNrZ3JvdW5kUG9zaXRpb246JzAgLTEwMHB4J307TU9VU0VfU0VMRUNUT1JfTU9ERV9JTkZPU1tNT1VTRV9TRUxFQ1RPUl9NT0RFLlJPVEFURV09e25hbWU6J1JPVEFURScsbW9kZTpNT1VTRV9TRUxFQ1RPUl9NT0RFLlJPVEFURSx0aXRsZToncm90YXRlJyxldmVudE5hbWVzOntlbnRlcjonZW50ZXJyb3RhdGUnLGJlZ2luOidiZWdpbnJvdGF0ZScsdXBkYXRlOid1cGRhdGVyb3RhdGUnLGVuZDonZW5kcm90YXRlJyxleGl0OidleGl0cm90YXRlJ30sYWN0aXZlQmFja2dyb3VuZFBvc2l0aW9uOictMzBweCAtMTMwcHgnLGRlZmF1bHRCYWNrZ3JvdW5kUG9zaXRpb246JzAgLTEzMHB4J307cmV0dXJue01PVVNFX1NFTEVDVE9SX01PREVfSU5GT1MsTU9VU0VfU0VMRUNUT1JfTU9ERSx9O30pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYi1tb3VzZS1tb2RlLWljb24nLHByb3BlcnRpZXM6e21vZGVOYW1lOnt0eXBlOlN0cmluZyxyZWZsZWN0VG9BdHRyaWJ1dGU6dHJ1ZSxvYnNlcnZlcjonbW9kZU5hbWVDaGFuZ2VkJ30sfSxjcmVhdGVkKCl7dGhpcy5hY3RpdmVfPWZhbHNlO3RoaXMuYWNjZWxlcmF0b3JLZXlfPXVuZGVmaW5lZDt9LHJlYWR5KCl7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBtb2RlKCl7cmV0dXJuIHRyLnVpLmIuTU9VU0VfU0VMRUNUT1JfTU9ERVt0aGlzLm1vZGVOYW1lXTt9LHNldCBtb2RlKG1vZGUpe2NvbnN0IG1vZGVJbmZvPXRyLnVpLmIuTU9VU0VfU0VMRUNUT1JfTU9ERV9JTkZPU1ttb2RlXTtpZihtb2RlSW5mbz09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG1vZGUnKTt9Ci10aGlzLm1vZGVOYW1lPW1vZGVJbmZvLm5hbWU7fSxtb2RlTmFtZUNoYW5nZWQoKXt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmFjdGl2ZV87fSxzZXQgYWN0aXZlKGFjdGl2ZSl7dGhpcy5hY3RpdmVfPSEhYWN0aXZlO2lmKHRoaXMuYWN0aXZlXyl7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7fWVsc2V7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7fQotdGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBhY2NlbGVyYXRvcktleSgpe3JldHVybiB0aGlzLmFjY2VsZXJhdG9yS2V5Xzt9LHNldCBhY2NlbGVyYXRvcktleShhY2NlbGVyYXRvcktleSl7dGhpcy5hY2NlbGVyYXRvcktleV89YWNjZWxlcmF0b3JLZXk7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe2lmKHRoaXMubW9kZU5hbWU9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IG1vZGU9dGhpcy5tb2RlO2lmKG1vZGU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBtb2RlJyk7fQotY29uc3QgbW9kZUluZm89dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW21vZGVdO2lmKCFtb2RlSW5mbyl7dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1vZGUnKTt9Ci1sZXQgdGl0bGU9bW9kZUluZm8udGl0bGU7aWYodGhpcy5hY2NlbGVyYXRvcktleV8pe3RpdGxlPXRpdGxlKycgKCcrdGhpcy5hY2NlbGVyYXRvcktleV8rJyknO30KLXRoaXMudGl0bGU9dGl0bGU7bGV0IGJwO2lmKHRoaXMuYWN0aXZlXyl7YnA9bW9kZUluZm8uYWN0aXZlQmFja2dyb3VuZFBvc2l0aW9uO31lbHNle2JwPW1vZGVJbmZvLmRlZmF1bHRCYWNrZ3JvdW5kUG9zaXRpb247fQotdGhpcy5zdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb249YnA7fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBNb3VzZVRyYWNrZXIob3B0X3RhcmdldEVsZW1lbnQpe3RoaXMub25Nb3VzZURvd25fPXRoaXMub25Nb3VzZURvd25fLmJpbmQodGhpcyk7dGhpcy5vbk1vdXNlTW92ZV89dGhpcy5vbk1vdXNlTW92ZV8uYmluZCh0aGlzKTt0aGlzLm9uTW91c2VVcF89dGhpcy5vbk1vdXNlVXBfLmJpbmQodGhpcyk7dGhpcy50YXJnZXRFbGVtZW50PW9wdF90YXJnZXRFbGVtZW50O30KLU1vdXNlVHJhY2tlci5wcm90b3R5cGU9e2dldCB0YXJnZXRFbGVtZW50KCl7cmV0dXJuIHRoaXMudGFyZ2V0RWxlbWVudF87fSxzZXQgdGFyZ2V0RWxlbWVudCh0YXJnZXRFbGVtZW50KXtpZih0aGlzLnRhcmdldEVsZW1lbnRfKXt0aGlzLnRhcmdldEVsZW1lbnRfLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsdGhpcy5vbk1vdXNlRG93bl8pO30KLXRoaXMudGFyZ2V0RWxlbWVudF89dGFyZ2V0RWxlbWVudDtpZih0aGlzLnRhcmdldEVsZW1lbnRfKXt0aGlzLnRhcmdldEVsZW1lbnRfLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsdGhpcy5vbk1vdXNlRG93bl8pO319LG9uTW91c2VEb3duXyhlKXtpZihlLmJ1dHRvbiE9PTApcmV0dXJuIHRydWU7ZT10aGlzLnJlbWFrZUV2ZW50XyhlLCdtb3VzZS10cmFja2VyLXN0YXJ0Jyk7dGhpcy50YXJnZXRFbGVtZW50Xy5kaXNwYXRjaEV2ZW50KGUpO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsdGhpcy5vbk1vdXNlTW92ZV8pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLHRoaXMub25Nb3VzZVVwXyk7dGhpcy50YXJnZXRFbGVtZW50Xy5hZGRFdmVudExpc3RlbmVyKCdibHVyJyx0aGlzLm9uTW91c2VVcF8pO3RoaXMuc2F2ZVByZXZpb3VzVXNlclNlbGVjdF89ZG9jdW1lbnQuYm9keS5zdHlsZVsnLXdlYmtpdC11c2VyLXNlbGVjdCddO2RvY3VtZW50LmJvZHkuc3R5bGVbJy13ZWJraXQtdXNlci1zZWxlY3QnXT0nbm9uZSc7ZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiB0cnVlO30sb25Nb3VzZU1vdmVfKGUpe2U9dGhpcy5yZW1ha2VFdmVudF8oZSwnbW91c2UtdHJhY2tlci1tb3ZlJyk7dGhpcy50YXJnZXRFbGVtZW50Xy5kaXNwYXRjaEV2ZW50KGUpO30sb25Nb3VzZVVwXyhlKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLHRoaXMub25Nb3VzZU1vdmVfKTtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJyx0aGlzLm9uTW91c2VVcF8pO3RoaXMudGFyZ2V0RWxlbWVudF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsdGhpcy5vbk1vdXNlVXBfKTtkb2N1bWVudC5ib2R5LnN0eWxlWyctd2Via2l0LXVzZXItc2VsZWN0J109dGhpcy5zYXZlUHJldmlvdXNVc2VyU2VsZWN0XztlPXRoaXMucmVtYWtlRXZlbnRfKGUsJ21vdXNlLXRyYWNrZXItZW5kJyk7dGhpcy50YXJnZXRFbGVtZW50Xy5kaXNwYXRjaEV2ZW50KGUpO30scmVtYWtlRXZlbnRfKGUsbmV3VHlwZSl7Y29uc3QgcmVtYWRlPW5ldyB0ci5iLkV2ZW50KG5ld1R5cGUsdHJ1ZSx0cnVlKTtyZW1hZGUueD1lLng7cmVtYWRlLnk9ZS55O3JlbWFkZS5vZmZzZXRYPWUub2Zmc2V0WDtyZW1hZGUub2Zmc2V0WT1lLm9mZnNldFk7cmVtYWRlLmNsaWVudFg9ZS5jbGllbnRYO3JlbWFkZS5jbGllbnRZPWUuY2xpZW50WTtyZXR1cm4gcmVtYWRlO319O2Z1bmN0aW9uIHRyYWNrTW91c2VNb3Zlc1VudGlsTW91c2VVcChtb3VzZU1vdmVIYW5kbGVyLG9wdF9tb3VzZVVwSGFuZGxlcixvcHRfa2V5VXBIYW5kbGVyKXtmdW5jdGlvbiBjbGVhbnVwQW5kRGlzcGF0Y2hUb01vdXNlVXAoZSl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyxtb3VzZU1vdmVIYW5kbGVyKTtpZihvcHRfa2V5VXBIYW5kbGVyKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsb3B0X2tleVVwSGFuZGxlcik7fQotZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsY2xlYW51cEFuZERpc3BhdGNoVG9Nb3VzZVVwKTtpZihvcHRfbW91c2VVcEhhbmRsZXIpe29wdF9tb3VzZVVwSGFuZGxlcihlKTt9fQotZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyxtb3VzZU1vdmVIYW5kbGVyKTtpZihvcHRfa2V5VXBIYW5kbGVyKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsb3B0X2tleVVwSGFuZGxlcik7fQotZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsY2xlYW51cEFuZERpc3BhdGNoVG9Nb3VzZVVwKTt9Ci1yZXR1cm57TW91c2VUcmFja2VyLHRyYWNrTW91c2VNb3Zlc1VudGlsTW91c2VVcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBNT1VTRV9TRUxFQ1RPUl9NT0RFPXRyLnVpLmIuTU9VU0VfU0VMRUNUT1JfTU9ERTtjb25zdCBNT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TPXRyLnVpLmIuTU9VU0VfU0VMRUNUT1JfTU9ERV9JTkZPUztjb25zdCBNSU5fTU9VU0VfU0VMRUNUSU9OX0RJU1RBTkNFPTQ7Y29uc3QgTU9ESUZJRVI9e1NISUZUOjB4MSxTUEFDRToweDIsQ01EX09SX0NUUkw6MHg0fTtmdW5jdGlvbiBpc0NtZE9yQ3RybFByZXNzZWQoZXZlbnQpe2lmKHRyLmlzTWFjKXJldHVybiBldmVudC5tZXRhS2V5O3JldHVybiBldmVudC5jdHJsS2V5O30KLVBvbHltZXIoe2lzOid0ci11aS1iLW1vdXNlLW1vZGUtc2VsZWN0b3InLGNyZWF0ZWQoKXt0aGlzLnN1cHBvcnRlZE1vZGVNYXNrXz1NT1VTRV9TRUxFQ1RPUl9NT0RFLkFMTF9NT0RFUzt0aGlzLmluaXRpYWxSZWxhdGl2ZU1vdXNlRG93blBvc189e3g6MCx5OjB9O3RoaXMuZGVmYXVsdE1vZGVfPU1PVVNFX1NFTEVDVE9SX01PREUuUEFOU0NBTjt0aGlzLnNldHRpbmdzS2V5Xz11bmRlZmluZWQ7dGhpcy5tb3VzZVBvc189e3g6MCx5OjB9O3RoaXMubW91c2VEb3duUG9zXz17eDowLHk6MH07dGhpcy5vbk1vdXNlRG93bl89dGhpcy5vbk1vdXNlRG93bl8uYmluZCh0aGlzKTt0aGlzLm9uTW91c2VNb3ZlXz10aGlzLm9uTW91c2VNb3ZlXy5iaW5kKHRoaXMpO3RoaXMub25Nb3VzZVVwXz10aGlzLm9uTW91c2VVcF8uYmluZCh0aGlzKTt0aGlzLm9uS2V5RG93bl89dGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7dGhpcy5vbktleVVwXz10aGlzLm9uS2V5VXBfLmJpbmQodGhpcyk7dGhpcy5tb2RlXz11bmRlZmluZWQ7dGhpcy5tb2RlVG9LZXlDb2RlTWFwXz17fTt0aGlzLm1vZGlmaWVyVG9Nb2RlTWFwXz17fTt0aGlzLnRhcmdldEVsZW1lbnRfPXVuZGVmaW5lZDt0aGlzLm1vZGVCZWZvcmVBbHRlcm5hdGl2ZU1vZGVBY3RpdmF0ZWRfPW51bGw7dGhpcy5pc0ludGVyYWN0aW5nXz1mYWxzZTt0aGlzLmlzQ2xpY2tfPWZhbHNlO30scmVhZHkoKXt0aGlzLmJ1dHRvbnNFbF89UG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCcuYnV0dG9ucycpO3RoaXMuZHJhZ0hhbmRsZUVsXz1Qb2x5bWVyLmRvbSh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3IoJy5kcmFnLWhhbmRsZScpO3RoaXMuc3VwcG9ydGVkTW9kZU1hc2s9TU9VU0VfU0VMRUNUT1JfTU9ERS5BTExfTU9ERVM7dGhpcy5kcmFnSGFuZGxlRWxfLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsdGhpcy5vbkRyYWdIYW5kbGVNb3VzZURvd25fLmJpbmQodGhpcykpO3RoaXMuYnV0dG9uc0VsXy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJyx0aGlzLm9uQnV0dG9uTW91c2VVcF8pO3RoaXMuYnV0dG9uc0VsXy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLHRoaXMub25CdXR0b25Nb3VzZURvd25fKTt0aGlzLmJ1dHRvbnNFbF8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMub25CdXR0b25QcmVzc18uYmluZCh0aGlzKSk7fSxhdHRhY2hlZCgpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLHRoaXMub25LZXlEb3duXyk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLHRoaXMub25LZXlVcF8pO30sZGV0YWNoZWQoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLm9uS2V5RG93bl8pO2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJyx0aGlzLm9uS2V5VXBfKTt9LGdldCB0YXJnZXRFbGVtZW50KCl7cmV0dXJuIHRoaXMudGFyZ2V0RWxlbWVudF87fSxzZXQgdGFyZ2V0RWxlbWVudCh0YXJnZXQpe2lmKHRoaXMudGFyZ2V0RWxlbWVudF8pe3RoaXMudGFyZ2V0RWxlbWVudF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJyx0aGlzLm9uTW91c2VEb3duXyk7fQotdGhpcy50YXJnZXRFbGVtZW50Xz10YXJnZXQ7aWYodGhpcy50YXJnZXRFbGVtZW50Xyl7dGhpcy50YXJnZXRFbGVtZW50Xy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLHRoaXMub25Nb3VzZURvd25fKTt9fSxnZXQgZGVmYXVsdE1vZGUoKXtyZXR1cm4gdGhpcy5kZWZhdWx0TW9kZV87fSxzZXQgZGVmYXVsdE1vZGUoZGVmYXVsdE1vZGUpe3RoaXMuZGVmYXVsdE1vZGVfPWRlZmF1bHRNb2RlO30sZ2V0IHNldHRpbmdzS2V5KCl7cmV0dXJuIHRoaXMuc2V0dGluZ3NLZXlfO30sc2V0IHNldHRpbmdzS2V5KHNldHRpbmdzS2V5KXt0aGlzLnNldHRpbmdzS2V5Xz1zZXR0aW5nc0tleTtpZighdGhpcy5zZXR0aW5nc0tleV8pcmV0dXJuO2xldCBtb2RlPXRyLmIuU2V0dGluZ3MuZ2V0KHRoaXMuc2V0dGluZ3NLZXlfKycubW9kZScsdW5kZWZpbmVkKTtpZihNT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW21vZGVdPT09dW5kZWZpbmVkKXttb2RlPXVuZGVmaW5lZDt9Ci1pZigobW9kZSZ0aGlzLnN1cHBvcnRlZE1vZGVNYXNrXyk9PT0wKXttb2RlPXVuZGVmaW5lZDt9Ci1pZighbW9kZSltb2RlPXRoaXMuZGVmYXVsdE1vZGVfO3RoaXMubW9kZT1tb2RlO2NvbnN0IHBvcz10ci5iLlNldHRpbmdzLmdldCh0aGlzLnNldHRpbmdzS2V5XysnLnBvcycsdW5kZWZpbmVkKTtpZihwb3MpdGhpcy5wb3M9cG9zO30sZ2V0IHN1cHBvcnRlZE1vZGVNYXNrKCl7cmV0dXJuIHRoaXMuc3VwcG9ydGVkTW9kZU1hc2tfO30sc2V0IHN1cHBvcnRlZE1vZGVNYXNrKHN1cHBvcnRlZE1vZGVNYXNrKXtpZih0aGlzLm1vZGUmJihzdXBwb3J0ZWRNb2RlTWFzayZ0aGlzLm1vZGUpPT09MCl7dGhyb3cgbmV3IEVycm9yKCdzdXBwb3J0ZWRNb2RlTWFzayBtdXN0IGluY2x1ZGUgY3VycmVudCBtb2RlLicpO30KLWZ1bmN0aW9uIGNyZWF0ZUJ1dHRvbkZvck1vZGUobW9kZSl7cmV0dXJuIGJ1dHRvbjt9Ci10aGlzLnN1cHBvcnRlZE1vZGVNYXNrXz1zdXBwb3J0ZWRNb2RlTWFzaztQb2x5bWVyLmRvbSh0aGlzLmJ1dHRvbnNFbF8pLnRleHRDb250ZW50PScnO2Zvcihjb25zdCBtb2RlTmFtZSBpbiBNT1VTRV9TRUxFQ1RPUl9NT0RFKXtpZihtb2RlTmFtZT09PSdBTExfTU9ERVMnKWNvbnRpbnVlO2NvbnN0IG1vZGU9TU9VU0VfU0VMRUNUT1JfTU9ERVttb2RlTmFtZV07aWYoKHRoaXMuc3VwcG9ydGVkTW9kZU1hc2tfJm1vZGUpPT09MCljb250aW51ZTtjb25zdCBidXR0b249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1tb3VzZS1tb2RlLWljb24nKTtidXR0b24ubW9kZT1tb2RlO1BvbHltZXIuZG9tKGJ1dHRvbikuY2xhc3NMaXN0LmFkZCgndG9vbC1idXR0b24nKTtQb2x5bWVyLmRvbSh0aGlzLmJ1dHRvbnNFbF8pLmFwcGVuZENoaWxkKGJ1dHRvbik7fX0sZ2V0QnV0dG9uRm9yTW9kZV8obW9kZSl7Zm9yKGxldCBpPTA7aTx0aGlzLmJ1dHRvbnNFbF8uY2hpbGRyZW4ubGVuZ3RoO2krKyl7Y29uc3QgYnV0dG9uRWw9dGhpcy5idXR0b25zRWxfLmNoaWxkcmVuW2ldO2lmKGJ1dHRvbkVsLm1vZGU9PT1tb2RlKXtyZXR1cm4gYnV0dG9uRWw7fX0KLXJldHVybiB1bmRlZmluZWQ7fSxnZXQgbW9kZSgpe3JldHVybiB0aGlzLmN1cnJlbnRNb2RlXzt9LHNldCBtb2RlKG5ld01vZGUpe2lmKG5ld01vZGUhPT11bmRlZmluZWQpe2lmKHR5cGVvZiBuZXdNb2RlIT09J251bWJlcicpe3Rocm93IG5ldyBFcnJvcignTW9kZSBtdXN0IGJlIGEgbnVtYmVyJyk7fQotaWYoKG5ld01vZGUmdGhpcy5zdXBwb3J0ZWRNb2RlTWFza18pPT09MCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3dpdGNoIHRvIHRoaXMgbW9kZSwgaXQgaXMgbm90IHN1cHBvcnRlZCcpO30KLWlmKE1PVVNFX1NFTEVDVE9SX01PREVfSU5GT1NbbmV3TW9kZV09PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIG1vZGUnKTt9fQotbGV0IG1vZGVJbmZvO2lmKHRoaXMuY3VycmVudE1vZGVfPT09bmV3TW9kZSlyZXR1cm47aWYodGhpcy5jdXJyZW50TW9kZV8pe2NvbnN0IGJ1dHRvbkVsPXRoaXMuZ2V0QnV0dG9uRm9yTW9kZV8odGhpcy5jdXJyZW50TW9kZV8pO2lmKGJ1dHRvbkVsKWJ1dHRvbkVsLmFjdGl2ZT1mYWxzZTtpZih0aGlzLmlzSW50ZXJhY3RpbmdfKXtjb25zdCBtb3VzZUV2ZW50PXRoaXMuY3JlYXRlRXZlbnRfKE1PVVNFX1NFTEVDVE9SX01PREVfSU5GT1NbdGhpcy5tb2RlXS5ldmVudE5hbWVzLmVuZCk7dGhpcy5kaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQpO30KLW1vZGVJbmZvPU1PVVNFX1NFTEVDVE9SX01PREVfSU5GT1NbdGhpcy5jdXJyZW50TW9kZV9dO3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLG1vZGVJbmZvLmV2ZW50TmFtZXMuZXhpdCx0cnVlKTt9Ci10aGlzLmN1cnJlbnRNb2RlXz1uZXdNb2RlO2lmKHRoaXMuY3VycmVudE1vZGVfKXtjb25zdCBidXR0b25FbD10aGlzLmdldEJ1dHRvbkZvck1vZGVfKHRoaXMuY3VycmVudE1vZGVfKTtpZihidXR0b25FbClidXR0b25FbC5hY3RpdmU9dHJ1ZTt0aGlzLm1vdXNlRG93blBvc18ueD10aGlzLm1vdXNlUG9zXy54O3RoaXMubW91c2VEb3duUG9zXy55PXRoaXMubW91c2VQb3NfLnk7bW9kZUluZm89TU9VU0VfU0VMRUNUT1JfTU9ERV9JTkZPU1t0aGlzLmN1cnJlbnRNb2RlX107aWYoIXRoaXMuaXNJbkFsdGVybmF0aXZlTW9kZV8pe3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLG1vZGVJbmZvLmV2ZW50TmFtZXMuZW50ZXIsdHJ1ZSk7fQotaWYodGhpcy5pc0ludGVyYWN0aW5nXyl7Y29uc3QgbW91c2VFdmVudD10aGlzLmNyZWF0ZUV2ZW50XyhNT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW3RoaXMubW9kZV0uZXZlbnROYW1lcy5iZWdpbik7dGhpcy5kaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQpO319Ci1pZih0aGlzLnNldHRpbmdzS2V5XyYmIXRoaXMuaXNJbkFsdGVybmF0aXZlTW9kZV8pe3RyLmIuU2V0dGluZ3Muc2V0KHRoaXMuc2V0dGluZ3NLZXlfKycubW9kZScsdGhpcy5tb2RlKTt9fSxzZXRLZXlDb2RlRm9yTW9kZShtb2RlLGtleUNvZGUpe2lmKChtb2RlJnRoaXMuc3VwcG9ydGVkTW9kZU1hc2tfKT09PTApe3Rocm93IG5ldyBFcnJvcignTW9kZSBub3Qgc3VwcG9ydGVkJyk7fQotdGhpcy5tb2RlVG9LZXlDb2RlTWFwX1ttb2RlXT1rZXlDb2RlO2lmKCF0aGlzLmJ1dHRvbnNFbF8pcmV0dXJuO2NvbnN0IGJ1dHRvbkVsPXRoaXMuZ2V0QnV0dG9uRm9yTW9kZV8obW9kZSk7aWYoYnV0dG9uRWwpe2J1dHRvbkVsLmFjY2VsZXJhdG9yS2V5PVN0cmluZy5mcm9tQ2hhckNvZGUoa2V5Q29kZSk7fX0sc2V0Q3VycmVudE1vdXNlUG9zRnJvbUV2ZW50XyhlKXt0aGlzLm1vdXNlUG9zXy54PWUuY2xpZW50WDt0aGlzLm1vdXNlUG9zXy55PWUuY2xpZW50WTt9LGNyZWF0ZUV2ZW50XyhldmVudE5hbWUsc291cmNlRXZlbnQpe2NvbnN0IGV2ZW50PW5ldyB0ci5iLkV2ZW50KGV2ZW50TmFtZSx0cnVlKTtldmVudC5jbGllbnRYPXRoaXMubW91c2VQb3NfLng7ZXZlbnQuY2xpZW50WT10aGlzLm1vdXNlUG9zXy55O2V2ZW50LmRlbHRhWD10aGlzLm1vdXNlUG9zXy54LXRoaXMubW91c2VEb3duUG9zXy54O2V2ZW50LmRlbHRhWT10aGlzLm1vdXNlUG9zXy55LXRoaXMubW91c2VEb3duUG9zXy55O2V2ZW50Lm1vdXNlRG93blg9dGhpcy5tb3VzZURvd25Qb3NfLng7ZXZlbnQubW91c2VEb3duWT10aGlzLm1vdXNlRG93blBvc18ueTtldmVudC5kaWRQcmV2ZW50RGVmYXVsdD1mYWxzZTtldmVudC5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe2V2ZW50LmRpZFByZXZlbnREZWZhdWx0PXRydWU7aWYoc291cmNlRXZlbnQpe3NvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7fX07ZXZlbnQuc3RvcFByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7c291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7fTtldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO307cmV0dXJuIGV2ZW50O30sb25Nb3VzZURvd25fKGUpe2lmKGUuYnV0dG9uIT09MClyZXR1cm47dGhpcy5zZXRDdXJyZW50TW91c2VQb3NGcm9tRXZlbnRfKGUpO2NvbnN0IG1vdXNlRXZlbnQ9dGhpcy5jcmVhdGVFdmVudF8oTU9VU0VfU0VMRUNUT1JfTU9ERV9JTkZPU1t0aGlzLm1vZGVdLmV2ZW50TmFtZXMuYmVnaW4sZSk7aWYodGhpcy5tb2RlPT09TU9VU0VfU0VMRUNUT1JfTU9ERS5TRUxFQ1RJT04pe21vdXNlRXZlbnQuYXBwZW5kU2VsZWN0aW9uPWlzQ21kT3JDdHJsUHJlc3NlZChlKTt9Ci10aGlzLmRpc3BhdGNoRXZlbnQobW91c2VFdmVudCk7dGhpcy5pc0ludGVyYWN0aW5nXz10cnVlO3RoaXMuaXNDbGlja189dHJ1ZTt0ci51aS5iLnRyYWNrTW91c2VNb3Zlc1VudGlsTW91c2VVcCh0aGlzLm9uTW91c2VNb3ZlXyx0aGlzLm9uTW91c2VVcF8pO30sb25Nb3VzZU1vdmVfKGUpe3RoaXMuc2V0Q3VycmVudE1vdXNlUG9zRnJvbUV2ZW50XyhlKTtjb25zdCBtb3VzZUV2ZW50PXRoaXMuY3JlYXRlRXZlbnRfKE1PVVNFX1NFTEVDVE9SX01PREVfSU5GT1NbdGhpcy5tb2RlXS5ldmVudE5hbWVzLnVwZGF0ZSxlKTt0aGlzLmRpc3BhdGNoRXZlbnQobW91c2VFdmVudCk7aWYodGhpcy5pc0ludGVyYWN0aW5nXyl7dGhpcy5jaGVja0lzQ2xpY2tfKGUpO319LG9uTW91c2VVcF8oZSl7aWYoZS5idXR0b24hPT0wKXJldHVybjtjb25zdCBtb3VzZUV2ZW50PXRoaXMuY3JlYXRlRXZlbnRfKE1PVVNFX1NFTEVDVE9SX01PREVfSU5GT1NbdGhpcy5tb2RlXS5ldmVudE5hbWVzLmVuZCxlKTttb3VzZUV2ZW50LmlzQ2xpY2s9dGhpcy5pc0NsaWNrXzt0aGlzLmRpc3BhdGNoRXZlbnQobW91c2VFdmVudCk7aWYodGhpcy5pc0NsaWNrXyYmIW1vdXNlRXZlbnQuZGlkUHJldmVudERlZmF1bHQpe3RoaXMuZGlzcGF0Y2hDbGlja0V2ZW50c18oZSk7fQotdGhpcy5pc0ludGVyYWN0aW5nXz1mYWxzZTt0aGlzLnVwZGF0ZUFsdGVybmF0aXZlTW9kZVN0YXRlXyhlKTt9LG9uQnV0dG9uTW91c2VEb3duXyhlKXtlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTt9LG9uQnV0dG9uTW91c2VVcF8oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7fSxvbkJ1dHRvblByZXNzXyhlKXt0aGlzLm1vZGVCZWZvcmVBbHRlcm5hdGl2ZU1vZGVBY3RpdmF0ZWRfPXVuZGVmaW5lZDt0aGlzLm1vZGU9ZS50YXJnZXQubW9kZTtlLnByZXZlbnREZWZhdWx0KCk7fSxvbktleURvd25fKGUpe2lmKGUucGF0aFswXS50YWdOYW1lPT09J0lOUFVUJylyZXR1cm47aWYoZS5rZXlDb2RlPT09JyAnLmNoYXJDb2RlQXQoMCkpe3RoaXMuc3BhY2VQcmVzc2VkXz10cnVlO30KLXRoaXMudXBkYXRlQWx0ZXJuYXRpdmVNb2RlU3RhdGVfKGUpO30sb25LZXlVcF8oZSl7aWYoZS5wYXRoWzBdLnRhZ05hbWU9PT0nSU5QVVQnKXJldHVybjtpZihlLmtleUNvZGU9PT0nICcuY2hhckNvZGVBdCgwKSl7dGhpcy5zcGFjZVByZXNzZWRfPWZhbHNlO30KLWxldCBkaWRIYW5kbGVLZXk9ZmFsc2U7Zm9yKGNvbnN0W21vZGVTdHIsa2V5Q29kZV1vZiBPYmplY3QuZW50cmllcyh0aGlzLm1vZGVUb0tleUNvZGVNYXBfKSl7aWYoZS5rZXlDb2RlPT09a2V5Q29kZSl7dGhpcy5tb2RlQmVmb3JlQWx0ZXJuYXRpdmVNb2RlQWN0aXZhdGVkXz11bmRlZmluZWQ7Y29uc3QgbW9kZT1wYXJzZUludChtb2RlU3RyKTt0aGlzLm1vZGU9bW9kZTtkaWRIYW5kbGVLZXk9dHJ1ZTt9fQotaWYoZGlkSGFuZGxlS2V5KXtlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm47fQotdGhpcy51cGRhdGVBbHRlcm5hdGl2ZU1vZGVTdGF0ZV8oZSk7fSx1cGRhdGVBbHRlcm5hdGl2ZU1vZGVTdGF0ZV8oZSl7Y29uc3Qgc2hpZnRQcmVzc2VkPWUuc2hpZnRLZXk7Y29uc3Qgc3BhY2VQcmVzc2VkPXRoaXMuc3BhY2VQcmVzc2VkXztjb25zdCBjbWRPckN0cmxQcmVzc2VkPWlzQ21kT3JDdHJsUHJlc3NlZChlKTtjb25zdCBzbW09dGhpcy5zdXBwb3J0ZWRNb2RlTWFza187bGV0IG5ld01vZGU7bGV0IGlzTmV3TW9kZUFuQWx0ZXJuYXRpdmVNb2RlPWZhbHNlO2lmKHNoaWZ0UHJlc3NlZCYmKHRoaXMubW9kaWZpZXJUb01vZGVNYXBfW01PRElGSUVSLlNISUZUXSZzbW0pIT09MCl7bmV3TW9kZT10aGlzLm1vZGlmaWVyVG9Nb2RlTWFwX1tNT0RJRklFUi5TSElGVF07aXNOZXdNb2RlQW5BbHRlcm5hdGl2ZU1vZGU9dHJ1ZTt9ZWxzZSBpZihzcGFjZVByZXNzZWQmJih0aGlzLm1vZGlmaWVyVG9Nb2RlTWFwX1tNT0RJRklFUi5TUEFDRV0mc21tKSE9PTApe25ld01vZGU9dGhpcy5tb2RpZmllclRvTW9kZU1hcF9bTU9ESUZJRVIuU1BBQ0VdO2lzTmV3TW9kZUFuQWx0ZXJuYXRpdmVNb2RlPXRydWU7fWVsc2UgaWYoY21kT3JDdHJsUHJlc3NlZCYmKHRoaXMubW9kaWZpZXJUb01vZGVNYXBfW01PRElGSUVSLkNNRF9PUl9DVFJMXSZzbW0pIT09MCl7bmV3TW9kZT10aGlzLm1vZGlmaWVyVG9Nb2RlTWFwX1tNT0RJRklFUi5DTURfT1JfQ1RSTF07aXNOZXdNb2RlQW5BbHRlcm5hdGl2ZU1vZGU9dHJ1ZTt9ZWxzZXtpZih0aGlzLmlzSW5BbHRlcm5hdGl2ZU1vZGVfKXtuZXdNb2RlPXRoaXMubW9kZUJlZm9yZUFsdGVybmF0aXZlTW9kZUFjdGl2YXRlZF87aXNOZXdNb2RlQW5BbHRlcm5hdGl2ZU1vZGU9ZmFsc2U7fWVsc2V7bmV3TW9kZT11bmRlZmluZWQ7fX0KLWlmKHRoaXMubW9kZT09PW5ld01vZGV8fG5ld01vZGU9PT11bmRlZmluZWQpcmV0dXJuO2lmKGlzTmV3TW9kZUFuQWx0ZXJuYXRpdmVNb2RlKXt0aGlzLm1vZGVCZWZvcmVBbHRlcm5hdGl2ZU1vZGVBY3RpdmF0ZWRfPXRoaXMubW9kZTt9Ci10aGlzLm1vZGU9bmV3TW9kZTt9LGdldCBpc0luQWx0ZXJuYXRpdmVNb2RlXygpe3JldHVybiEhdGhpcy5tb2RlQmVmb3JlQWx0ZXJuYXRpdmVNb2RlQWN0aXZhdGVkXzt9LHNldE1vZGlmaWVyRm9yQWx0ZXJuYXRlTW9kZShtb2RlLG1vZGlmaWVyKXt0aGlzLm1vZGlmaWVyVG9Nb2RlTWFwX1ttb2RpZmllcl09bW9kZTt9LGdldCBwb3MoKXtyZXR1cm57eDpwYXJzZUludCh0aGlzLnN0eWxlLmxlZnQpLHk6cGFyc2VJbnQodGhpcy5zdHlsZS50b3ApfTt9LHNldCBwb3MocG9zKXtwb3M9dGhpcy5jb25zdHJhaW5Qb3NpdGlvblRvQm91bmRzXyhwb3MpO3RoaXMuc3R5bGUubGVmdD1wb3MueCsncHgnO3RoaXMuc3R5bGUudG9wPXBvcy55KydweCc7aWYodGhpcy5zZXR0aW5nc0tleV8pe3RyLmIuU2V0dGluZ3Muc2V0KHRoaXMuc2V0dGluZ3NLZXlfKycucG9zJyx0aGlzLnBvcyk7fX0sY29uc3RyYWluUG9zaXRpb25Ub0JvdW5kc18ocG9zKXtjb25zdCBwYXJlbnQ9dGhpcy5vZmZzZXRQYXJlbnR8fGRvY3VtZW50LmJvZHk7Y29uc3QgcGFyZW50UmVjdD10ci51aS5iLndpbmRvd1JlY3RGb3JFbGVtZW50KHBhcmVudCk7Y29uc3QgdG9wPTA7Y29uc3QgYm90dG9tPXBhcmVudFJlY3QuaGVpZ2h0LXRoaXMub2Zmc2V0SGVpZ2h0O2NvbnN0IGxlZnQ9MDtjb25zdCByaWdodD1wYXJlbnRSZWN0LndpZHRoLXRoaXMub2Zmc2V0V2lkdGg7Y29uc3QgcmVzPXt9O3Jlcy54PU1hdGgubWF4KHBvcy54LGxlZnQpO3Jlcy54PU1hdGgubWluKHJlcy54LHJpZ2h0KTtyZXMueT1NYXRoLm1heChwb3MueSx0b3ApO3Jlcy55PU1hdGgubWluKHJlcy55LGJvdHRvbSk7cmV0dXJuIHJlczt9LG9uRHJhZ0hhbmRsZU1vdXNlRG93bl8oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7Y29uc3QgbW91c2VEb3duUG9zPXt4OmUuY2xpZW50WC10aGlzLm9mZnNldExlZnQseTplLmNsaWVudFktdGhpcy5vZmZzZXRUb3B9O3RyLnVpLmIudHJhY2tNb3VzZU1vdmVzVW50aWxNb3VzZVVwKGZ1bmN0aW9uKGUpe2NvbnN0IHBvcz17fTtwb3MueD1lLmNsaWVudFgtbW91c2VEb3duUG9zLng7cG9zLnk9ZS5jbGllbnRZLW1vdXNlRG93blBvcy55O3RoaXMucG9zPXBvczt9LmJpbmQodGhpcykpO30sY2hlY2tJc0NsaWNrXyhlKXtpZighdGhpcy5pc0ludGVyYWN0aW5nX3x8IXRoaXMuaXNDbGlja18pcmV0dXJuO2NvbnN0IGRlbHRhWD10aGlzLm1vdXNlUG9zXy54LXRoaXMubW91c2VEb3duUG9zXy54O2NvbnN0IGRlbHRhWT10aGlzLm1vdXNlUG9zXy55LXRoaXMubW91c2VEb3duUG9zXy55O2NvbnN0IG1pbkRpc3Q9TUlOX01PVVNFX1NFTEVDVElPTl9ESVNUQU5DRTtpZihkZWx0YVgqZGVsdGFYK2RlbHRhWSpkZWx0YVk+bWluRGlzdCptaW5EaXN0KXt0aGlzLmlzQ2xpY2tfPWZhbHNlO319LGRpc3BhdGNoQ2xpY2tFdmVudHNfKGUpe2lmKCF0aGlzLmlzQ2xpY2tfKXJldHVybjtjb25zdCBtb2RlSW5mbz1NT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW01PVVNFX1NFTEVDVE9SX01PREUuU0VMRUNUSU9OXTtjb25zdCBldmVudE5hbWVzPW1vZGVJbmZvLmV2ZW50TmFtZXM7bGV0IG1vdXNlRXZlbnQ9dGhpcy5jcmVhdGVFdmVudF8oZXZlbnROYW1lcy5iZWdpbik7bW91c2VFdmVudC5hcHBlbmRTZWxlY3Rpb249aXNDbWRPckN0cmxQcmVzc2VkKGUpO3RoaXMuZGlzcGF0Y2hFdmVudChtb3VzZUV2ZW50KTttb3VzZUV2ZW50PXRoaXMuY3JlYXRlRXZlbnRfKGV2ZW50TmFtZXMuZW5kKTt0aGlzLmRpc3BhdGNoRXZlbnQobW91c2VFdmVudCk7fX0pO3JldHVybntNSU5fTU9VU0VfU0VMRUNUSU9OX0RJU1RBTkNFLE1PRElGSUVSLH07fSk7J3VzZSBzdHJpY3QnOyhmdW5jdGlvbigpe2NvbnN0IERFVEFJTFNfU1BMSVRfUkVHRVg9L14oXFMqKVxzKihbXFNcc10qKSQvO1BvbHltZXIoe2lzOid0ci11aS1lLWNocm9tZS1jYy1kaXNwbGF5LWl0ZW0tbGlzdC1pdGVtJyxjcmVhdGVkKCl7UG9seW1lci5kb20odGhpcykuc2V0QXR0cmlidXRlKCduYW1lJywnJyk7UG9seW1lci5kb20odGhpcykuc2V0QXR0cmlidXRlKCdyYXdEZXRhaWxzJywnJyk7UG9seW1lci5kb20odGhpcykuc2V0QXR0cmlidXRlKCdyaWNoRGV0YWlscycsdW5kZWZpbmVkKTtQb2x5bWVyLmRvbSh0aGlzKS5zZXRBdHRyaWJ1dGUoJ2RhdGFfJyx1bmRlZmluZWQpO30sZ2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5kYXRhXzt9LHNldCBkYXRhKGRhdGEpe3RoaXMuZGF0YV89ZGF0YTtpZighZGF0YSl7dGhpcy5uYW1lPSdEQVRBIE1JU1NJTkcnO3RoaXMucmF3RGV0YWlscz0nJzt0aGlzLnJpY2hEZXRhaWxzPXVuZGVmaW5lZDt9ZWxzZSBpZih0eXBlb2YgZGF0YT09PSdzdHJpbmcnKXtjb25zdCBtYXRjaD1kYXRhLm1hdGNoKERFVEFJTFNfU1BMSVRfUkVHRVgpO3RoaXMubmFtZT1tYXRjaFsxXTt0aGlzLnJhd0RldGFpbHM9bWF0Y2hbMl07dGhpcy5yaWNoRGV0YWlscz11bmRlZmluZWQ7fWVsc2V7dGhpcy5uYW1lPWRhdGEubmFtZTt0aGlzLnJhd0RldGFpbHM9Jyc7dGhpcy5yaWNoRGV0YWlscz1kYXRhO319LHN0b3BQcm9wYWdhdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpO30sX2NvbXB1dGVJZihyaWNoRGV0YWlscyl7cmV0dXJuIHJpY2hEZXRhaWxzJiZyaWNoRGV0YWlscy5za3A2NDt9LF9jb21wdXRlSHJlZihyaWNoRGV0YWlscyl7cmV0dXJuJ2RhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwnK3JpY2hEZXRhaWxzLnNrcDY0O319KTt9KSgpOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5jaHJvbWUuY2MnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gU2VsZWN0aW9uKCl7dGhpcy5zZWxlY3Rpb25Ub1NldElmQ2xpY2tlZD11bmRlZmluZWQ7fQotU2VsZWN0aW9uLnByb3RvdHlwZT17Z2V0IHNwZWNpY2lmaXR5KCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGdldCBhc3NvY2lhdGVkTGF5ZXJJZCgpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxnZXQgYXNzb2NpYXRlZFJlbmRlclBhc3NJZCgpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxnZXQgaGlnaGxpZ2h0c0J5TGF5ZXJJZCgpe3JldHVybnt9O30sY3JlYXRlQW5hbHlzaXMoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sZmluZEVxdWl2YWxlbnQobHRoaSl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9fTtmdW5jdGlvbiBSZW5kZXJQYXNzU2VsZWN0aW9uKHJlbmRlclBhc3MscmVuZGVyUGFzc0lkKXtpZighcmVuZGVyUGFzc3x8KHJlbmRlclBhc3NJZD09PXVuZGVmaW5lZCkpe3Rocm93IG5ldyBFcnJvcignUmVuZGVyIHBhc3MgKHdpdGggaWQpIGlzIHJlcXVpcmVkJyk7fQotdGhpcy5yZW5kZXJQYXNzXz1yZW5kZXJQYXNzO3RoaXMucmVuZGVyUGFzc0lkXz1yZW5kZXJQYXNzSWQ7fQotUmVuZGVyUGFzc1NlbGVjdGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzpTZWxlY3Rpb24ucHJvdG90eXBlLGdldCBzcGVjaWNpZml0eSgpe3JldHVybiAxO30sZ2V0IGFzc29jaWF0ZWRMYXllcklkKCl7cmV0dXJuIHVuZGVmaW5lZDt9LGdldCBhc3NvY2lhdGVkUmVuZGVyUGFzc0lkKCl7cmV0dXJuIHRoaXMucmVuZGVyUGFzc0lkXzt9LGdldCByZW5kZXJQYXNzKCl7cmV0dXJuIHRoaXMucmVuZGVyUGFzc187fSxjcmVhdGVBbmFseXNpcygpe2NvbnN0IGRhdGFWaWV3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtZ2VuZXJpYy1vYmplY3Qtdmlldy13aXRoLWxhYmVsJyk7ZGF0YVZpZXcubGFiZWw9J1JlbmRlclBhc3MgJyt0aGlzLnJlbmRlclBhc3NJZF87ZGF0YVZpZXcub2JqZWN0PXRoaXMucmVuZGVyUGFzc18uYXJncztyZXR1cm4gZGF0YVZpZXc7fSxnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5yZW5kZXJQYXNzXy5vYmplY3RJbnN0YW5jZS50eXBlTmFtZTt9fTtmdW5jdGlvbiBMYXllclNlbGVjdGlvbihsYXllcil7aWYoIWxheWVyKXt0aHJvdyBuZXcgRXJyb3IoJ0xheWVyIGlzIHJlcXVpcmVkJyk7fQotdGhpcy5sYXllcl89bGF5ZXI7fQotTGF5ZXJTZWxlY3Rpb24ucHJvdG90eXBlPXtfX3Byb3RvX186U2VsZWN0aW9uLnByb3RvdHlwZSxnZXQgc3BlY2ljaWZpdHkoKXtyZXR1cm4gMTt9LGdldCBhc3NvY2lhdGVkTGF5ZXJJZCgpe3JldHVybiB0aGlzLmxheWVyXy5sYXllcklkO30sZ2V0IGFzc29jaWF0ZWRSZW5kZXJQYXNzSWQoKXtyZXR1cm4gdW5kZWZpbmVkO30sZ2V0IGxheWVyKCl7cmV0dXJuIHRoaXMubGF5ZXJfO30sY3JlYXRlQW5hbHlzaXMoKXtjb25zdCBkYXRhVmlldz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXctd2l0aC1sYWJlbCcpO2RhdGFWaWV3LmxhYmVsPSdMYXllciAnK3RoaXMubGF5ZXJfLmxheWVySWQ7aWYodGhpcy5sYXllcl8udXNpbmdHcHVSYXN0ZXJpemF0aW9uKXtkYXRhVmlldy5sYWJlbCs9JyAoR1BVLXJhc3Rlcml6ZWQpJzt9Ci1kYXRhVmlldy5vYmplY3Q9dGhpcy5sYXllcl8uYXJncztyZXR1cm4gZGF0YVZpZXc7fSxnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5sYXllcl8ub2JqZWN0SW5zdGFuY2UudHlwZU5hbWU7fSxmaW5kRXF1aXZhbGVudChsdGhpKXtjb25zdCBsYXllcj1sdGhpLmFjdGl2ZVRyZWUuZmluZExheWVyV2l0aElkKHRoaXMubGF5ZXJfLmxheWVySWQpfHxsdGhpLnBlbmRpbmdUcmVlLmZpbmRMYXllcldpdGhJZCh0aGlzLmxheWVyXy5sYXllcklkKTtpZighbGF5ZXIpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gbmV3IExheWVyU2VsZWN0aW9uKGxheWVyKTt9fTtmdW5jdGlvbiBUaWxlU2VsZWN0aW9uKHRpbGUsb3B0X2RhdGEpe3RoaXMudGlsZV89dGlsZTt0aGlzLmRhdGFfPW9wdF9kYXRhfHx7fTt9Ci1UaWxlU2VsZWN0aW9uLnByb3RvdHlwZT17X19wcm90b19fOlNlbGVjdGlvbi5wcm90b3R5cGUsZ2V0IHNwZWNpY2lmaXR5KCl7cmV0dXJuIDI7fSxnZXQgYXNzb2NpYXRlZExheWVySWQoKXtyZXR1cm4gdGhpcy50aWxlXy5sYXllcklkO30sZ2V0IGhpZ2hsaWdodHNCeUxheWVySWQoKXtjb25zdCBoaWdobGlnaHRzPXt9O2hpZ2hsaWdodHNbdGhpcy50aWxlXy5sYXllcklkXT1be2NvbG9yS2V5OnRoaXMudGlsZV8ub2JqZWN0SW5zdGFuY2UudHlwZU5hbWUscmVjdDp0aGlzLnRpbGVfLmxheWVyUmVjdH1dO3JldHVybiBoaWdobGlnaHRzO30sY3JlYXRlQW5hbHlzaXMoKXtjb25zdCBhbmFseXNpcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXctd2l0aC1sYWJlbCcpO2FuYWx5c2lzLmxhYmVsPSdUaWxlICcrdGhpcy50aWxlXy5vYmplY3RJbnN0YW5jZS5pZCsnIG9uIGxheWVyICcrCi10aGlzLnRpbGVfLmxheWVySWQ7aWYodGhpcy5kYXRhXyl7YW5hbHlzaXMub2JqZWN0PXttb3JlSW5mbzp0aGlzLmRhdGFfLHRpbGVBcmdzOnRoaXMudGlsZV8uYXJnc307fWVsc2V7YW5hbHlzaXMub2JqZWN0PXRoaXMudGlsZV8uYXJnczt9Ci1yZXR1cm4gYW5hbHlzaXM7fSxmaW5kRXF1aXZhbGVudChsdGhpKXtjb25zdCB0aWxlSW5zdGFuY2U9dGhpcy50aWxlXy50aWxlSW5zdGFuY2U7aWYobHRoaS50czx0aWxlSW5zdGFuY2UuY3JlYXRpb25Uc3x8bHRoaS50cz49dGlsZUluc3RhbmNlLmRlbGV0aW9uVHMpe3JldHVybiB1bmRlZmluZWQ7fQotY29uc3QgdGlsZVNuYXBzaG90PXRpbGVJbnN0YW5jZS5nZXRTbmFwc2hvdEF0KGx0aGkudHMpO2lmKCF0aWxlU25hcHNob3QpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gbmV3IFRpbGVTZWxlY3Rpb24odGlsZVNuYXBzaG90KTt9fTtmdW5jdGlvbiBMYXllclJlY3RTZWxlY3Rpb24obGF5ZXIscmVjdFR5cGUscmVjdCxvcHRfZGF0YSl7dGhpcy5sYXllcl89bGF5ZXI7dGhpcy5yZWN0VHlwZV89cmVjdFR5cGU7dGhpcy5yZWN0Xz1yZWN0O3RoaXMuZGF0YV89b3B0X2RhdGEhPT11bmRlZmluZWQ/b3B0X2RhdGE6cmVjdDt9Ci1MYXllclJlY3RTZWxlY3Rpb24ucHJvdG90eXBlPXtfX3Byb3RvX186U2VsZWN0aW9uLnByb3RvdHlwZSxnZXQgc3BlY2ljaWZpdHkoKXtyZXR1cm4gMjt9LGdldCBhc3NvY2lhdGVkTGF5ZXJJZCgpe3JldHVybiB0aGlzLmxheWVyXy5sYXllcklkO30sZ2V0IGhpZ2hsaWdodHNCeUxheWVySWQoKXtjb25zdCBoaWdobGlnaHRzPXt9O2hpZ2hsaWdodHNbdGhpcy5sYXllcl8ubGF5ZXJJZF09W3tjb2xvcktleTp0aGlzLnJlY3RUeXBlXyxyZWN0OnRoaXMucmVjdF99XTtyZXR1cm4gaGlnaGxpZ2h0czt9LGNyZWF0ZUFuYWx5c2lzKCl7Y29uc3QgYW5hbHlzaXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1nZW5lcmljLW9iamVjdC12aWV3LXdpdGgtbGFiZWwnKTthbmFseXNpcy5sYWJlbD10aGlzLnJlY3RUeXBlXysnIG9uIGxheWVyICcrdGhpcy5sYXllcl8ubGF5ZXJJZDthbmFseXNpcy5vYmplY3Q9dGhpcy5kYXRhXztyZXR1cm4gYW5hbHlzaXM7fSxmaW5kRXF1aXZhbGVudChsdGhpKXtyZXR1cm4gdW5kZWZpbmVkO319O2Z1bmN0aW9uIEFuaW1hdGlvblJlY3RTZWxlY3Rpb24obGF5ZXIscmVjdCl7dGhpcy5sYXllcl89bGF5ZXI7dGhpcy5yZWN0Xz1yZWN0O30KLUFuaW1hdGlvblJlY3RTZWxlY3Rpb24ucHJvdG90eXBlPXtfX3Byb3RvX186U2VsZWN0aW9uLnByb3RvdHlwZSxnZXQgc3BlY2ljaWZpdHkoKXtyZXR1cm4gMDt9LGdldCBhc3NvY2lhdGVkTGF5ZXJJZCgpe3JldHVybiB0aGlzLmxheWVyXy5sYXllcklkO30sY3JlYXRlQW5hbHlzaXMoKXtjb25zdCBhbmFseXNpcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXctd2l0aC1sYWJlbCcpO2FuYWx5c2lzLmxhYmVsPSdBbmltYXRpb24gQm91bmRzIG9mIGxheWVyICcrdGhpcy5sYXllcl8ubGF5ZXJJZDthbmFseXNpcy5vYmplY3Q9dGhpcy5yZWN0XztyZXR1cm4gYW5hbHlzaXM7fX07cmV0dXJue1NlbGVjdGlvbixSZW5kZXJQYXNzU2VsZWN0aW9uLExheWVyU2VsZWN0aW9uLFRpbGVTZWxlY3Rpb24sTGF5ZXJSZWN0U2VsZWN0aW9uLEFuaW1hdGlvblJlY3RTZWxlY3Rpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuY2hyb21lLmNjJyxmdW5jdGlvbigpe2NvbnN0IE9QU19USU1JTkdfSVRFUkFUSU9OUz0zO2NvbnN0IEFOTk9UQVRJT049J0NvbW1lbnQnO2NvbnN0IEJFR0lOX0FOTk9UQVRJT049J0JlZ2luQ29tbWVudEdyb3VwJztjb25zdCBFTkRfQU5OT1RBVElPTj0nRW5kQ29tbWVudEdyb3VwJztjb25zdCBBTk5PVEFUSU9OX0lEPSdJRDogJztjb25zdCBBTk5PVEFUSU9OX0NMQVNTPSdDTEFTUzogJztjb25zdCBBTk5PVEFUSU9OX1RBRz0nVEFHOiAnO2NvbnN0IGNvbnN0YW50cz10ci5lLmNjLmNvbnN0YW50cztjb25zdCBQaWN0dXJlT3BzTGlzdFZpZXc9dHIudWkuYi5kZWZpbmUoJ3RyLXVpLWUtY2hyb21lLWNjLXBpY3R1cmUtb3BzLWxpc3QtdmlldycpO1BpY3R1cmVPcHNMaXN0Vmlldy5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoKXt0aGlzLnN0eWxlLmZsZXhEaXJlY3Rpb249J2NvbHVtbic7dGhpcy5zdHlsZS5ib3JkZXJUb3A9JzFweCBzb2xpZCBncmV5Jzt0aGlzLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3RoaXMub3BzTGlzdF89bmV3IHRyLnVpLmIuTGlzdFZpZXcoKTt0aGlzLm9wc0xpc3RfLnN0eWxlLmZsZXhHcm93PTE7dGhpcy5vcHNMaXN0Xy5zdHlsZS5mbGV4U2hyaW5rPTE7dGhpcy5vcHNMaXN0Xy5zdHlsZS5mbGV4QmFzaXM9J2F1dG8nO3RoaXMub3BzTGlzdF8uc3R5bGUub3ZlcmZsb3c9J2F1dG8nO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMub3BzTGlzdF8pO3RoaXMuc2VsZWN0ZWRPcF89dW5kZWZpbmVkO3RoaXMuc2VsZWN0ZWRPcEluZGV4Xz11bmRlZmluZWQ7dGhpcy5vcHNMaXN0Xy5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb24tY2hhbmdlZCcsdGhpcy5vblNlbGVjdGlvbkNoYW5nZWRfLmJpbmQodGhpcykpO3RoaXMucGljdHVyZV89dW5kZWZpbmVkO30sZ2V0IHBpY3R1cmUoKXtyZXR1cm4gdGhpcy5waWN0dXJlXzt9LHNldCBwaWN0dXJlKHBpY3R1cmUpe3RoaXMucGljdHVyZV89cGljdHVyZTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlQ29udGVudHNfKCl7dGhpcy5vcHNMaXN0Xy5jbGVhcigpO2lmKCF0aGlzLnBpY3R1cmVfKXJldHVybjtsZXQgb3BzPXRoaXMucGljdHVyZV8uZ2V0T3BzKCk7aWYoIW9wcylyZXR1cm47b3BzPXRoaXMucGljdHVyZV8udGFnT3BzV2l0aFRpbWluZ3Mob3BzKTtvcHM9dGhpcy5vcHNUYWdnZWRXaXRoQW5ub3RhdGlvbnNfKG9wcyk7Zm9yKGxldCBpPTA7aTxvcHMubGVuZ3RoO2krKyl7Y29uc3Qgb3A9b3BzW2ldO2NvbnN0IGl0ZW09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7aXRlbS5vcEluZGV4PW9wLm9wSW5kZXg7UG9seW1lci5kb20oaXRlbSkudGV4dENvbnRlbnQ9aSsnKSAnK29wLmNtZF9zdHJpbmc7aWYob3AuZWxlbWVudEluZm8udGFnfHxvcC5lbGVtZW50SW5mby5pZHx8b3AuZWxlbWVudEluZm8uY2xhc3Mpe2NvbnN0IGVsZW1lbnRJbmZvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtQb2x5bWVyLmRvbShlbGVtZW50SW5mbykuY2xhc3NMaXN0LmFkZCgnZWxlbWVudEluZm8nKTtlbGVtZW50SW5mby5zdHlsZS5jb2xvcj0ncHVycGxlJztlbGVtZW50SW5mby5zdHlsZS5mb250U2l6ZT0nc21hbGwnO2VsZW1lbnRJbmZvLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnO2VsZW1lbnRJbmZvLnN0eWxlLmNvbG9yPScjNzc3Jztjb25zdCB0YWc9b3AuZWxlbWVudEluZm8udGFnP29wLmVsZW1lbnRJbmZvLnRhZzondW5rbm93bic7Y29uc3QgaWQ9b3AuZWxlbWVudEluZm8uaWQ/J2lkPScrb3AuZWxlbWVudEluZm8uaWQ6dW5kZWZpbmVkO2NvbnN0IGNsYXNzTmFtZT1vcC5lbGVtZW50SW5mby5jbGFzcz8nY2xhc3M9JysKLW9wLmVsZW1lbnRJbmZvLmNsYXNzOnVuZGVmaW5lZDtQb2x5bWVyLmRvbShlbGVtZW50SW5mbykudGV4dENvbnRlbnQ9JzwnK3RhZysoaWQ/JyAnOicnKSsKLShpZD9pZDonJykrKGNsYXNzTmFtZT8nICc6JycpKwotKGNsYXNzTmFtZT9jbGFzc05hbWU6JycpKyc+JztQb2x5bWVyLmRvbShpdGVtKS5hcHBlbmRDaGlsZChlbGVtZW50SW5mbyk7fQotaWYob3AuaW5mby5sZW5ndGg+MCl7Y29uc3QgaW5mb0l0ZW09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7UG9seW1lci5kb20oaW5mb0l0ZW0pLnRleHRDb250ZW50PUpTT04uc3RyaW5naWZ5KG9wLmluZm8pO2luZm9JdGVtLnN0eWxlLmZvbnRTaXplPSd4LXNtYWxsJztpbmZvSXRlbS5zdHlsZS5jb2xvcj0nIzc3Nyc7UG9seW1lci5kb20oaXRlbSkuYXBwZW5kQ2hpbGQoaW5mb0l0ZW0pO30KLWlmKG9wLmNtZF90aW1lJiZvcC5jbWRfdGltZT49MC4wMDAxKXtjb25zdCB0aW1lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtQb2x5bWVyLmRvbSh0aW1lKS5jbGFzc0xpc3QuYWRkKCd0aW1lJyk7Y29uc3Qgcm91bmRlZD1vcC5jbWRfdGltZS50b0ZpeGVkKDQpO1BvbHltZXIuZG9tKHRpbWUpLnRleHRDb250ZW50PScoJytyb3VuZGVkKydtcyknO3RpbWUuc3R5bGUuZm9udFNpemU9J3gtc21hbGwnO3RpbWUuc3R5bGUuY29sb3I9J3JnYigxMzYsIDAsIDApJztQb2x5bWVyLmRvbShpdGVtKS5hcHBlbmRDaGlsZCh0aW1lKTt9Ci1pdGVtLnN0eWxlLmJvcmRlckJvdHRvbT0nMXB4IHNvbGlkICM1NTUnO2l0ZW0uc3R5bGUuZm9udFNpemU9J3NtYWxsJztpdGVtLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnO2l0ZW0uc3R5bGUucGFkZGluZ0JvdHRvbT0nNXB4JztpdGVtLnN0eWxlLnBhZGRpbmdMZWZ0PSc1cHgnO2l0ZW0uc3R5bGUuY3Vyc29yPSdwb2ludGVyJztmb3IoY29uc3QgY2hpbGQgb2YgaXRlbS5jaGlsZHJlbil7Y2hpbGQuc3R5bGUuZm9udFdlaWdodD0nbm9ybWFsJztjaGlsZC5zdHlsZS5tYXJnaW5MZWZ0PScxZW0nO2NoaWxkLnN0eWxlLm1heFdpZHRoPSczMDBweCc7fQotUG9seW1lci5kb20odGhpcy5vcHNMaXN0XykuYXBwZW5kQ2hpbGQoaXRlbSk7fX0sb25TZWxlY3Rpb25DaGFuZ2VkXyhlKXtsZXQgYmVmb3JlU2VsZWN0ZWRPcD10cnVlO2lmKHRoaXMub3BzTGlzdF8uc2VsZWN0ZWRFbGVtZW50PT09dGhpcy5zZWxlY3RlZE9wXyl7dGhpcy5vcHNMaXN0Xy5zZWxlY3RlZEVsZW1lbnQ9dW5kZWZpbmVkO2JlZm9yZVNlbGVjdGVkT3A9ZmFsc2U7dGhpcy5zZWxlY3RlZE9wSW5kZXhfPXVuZGVmaW5lZDt9Ci10aGlzLnNlbGVjdGVkT3BfPXRoaXMub3BzTGlzdF8uc2VsZWN0ZWRFbGVtZW50O2NvbnN0IG9wcz10aGlzLm9wc0xpc3RfLmNoaWxkcmVuO2ZvcihsZXQgaT0wO2k8b3BzLmxlbmd0aDtpKyspe2NvbnN0IG9wPW9wc1tpXTtpZihvcD09PXRoaXMuc2VsZWN0ZWRPcF8pe2JlZm9yZVNlbGVjdGVkT3A9ZmFsc2U7dGhpcy5zZWxlY3RlZE9wSW5kZXhfPW9wLm9wSW5kZXg7fWVsc2UgaWYoYmVmb3JlU2VsZWN0ZWRPcCl7UG9seW1lci5kb20ob3ApLnNldEF0dHJpYnV0ZSgnYmVmb3JlU2VsZWN0aW9uJywnYmVmb3JlU2VsZWN0aW9uJyk7b3Auc3R5bGUuYmFja2dyb3VuZENvbG9yPSdyZ2IoMTAzLCAxOTksIDE2NSknO31lbHNle1BvbHltZXIuZG9tKG9wKS5yZW1vdmVBdHRyaWJ1dGUoJ2JlZm9yZVNlbGVjdGlvbicpO29wLnN0eWxlLmJhY2tncm91bmRDb2xvcj0nJzt9fQotdHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ3NlbGVjdGlvbi1jaGFuZ2VkJyxmYWxzZSk7fSxnZXQgbnVtT3BzKCl7cmV0dXJuIHRoaXMub3BzTGlzdF8uY2hpbGRyZW4ubGVuZ3RoO30sZ2V0IHNlbGVjdGVkT3BJbmRleCgpe3JldHVybiB0aGlzLnNlbGVjdGVkT3BJbmRleF87fSxzZXQgc2VsZWN0ZWRPcEluZGV4KHMpe3RoaXMuc2VsZWN0ZWRPcEluZGV4Xz1zO2lmKHM9PT11bmRlZmluZWQpe3RoaXMub3BzTGlzdF8uc2VsZWN0ZWRFbGVtZW50PXRoaXMuc2VsZWN0ZWRPcF87dGhpcy5vblNlbGVjdGlvbkNoYW5nZWRfKCk7fWVsc2V7aWYoczwwKXRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleCcpO2lmKHM+PXRoaXMubnVtT3BzKXRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleCcpO3RoaXMub3BzTGlzdF8uc2VsZWN0ZWRFbGVtZW50PXRoaXMub3BzTGlzdF8uZ2V0RWxlbWVudEJ5SW5kZXgocysxKTt0ci51aS5iLnNjcm9sbEludG9WaWV3SWZOZWVkZWQodGhpcy5vcHNMaXN0Xy5zZWxlY3RlZEVsZW1lbnQpO319LG9wc1RhZ2dlZFdpdGhBbm5vdGF0aW9uc18ob3BzKXtjb25zdCBhbm5vdGF0aW9uR3JvdXBzPVtdO2NvbnN0IG9wc1dpdGhvdXRBbm5vdGF0aW9ucz1bXTtmb3IobGV0IG9wSW5kZXg9MDtvcEluZGV4PG9wcy5sZW5ndGg7b3BJbmRleCsrKXtjb25zdCBvcD1vcHNbb3BJbmRleF07b3Aub3BJbmRleD1vcEluZGV4O3N3aXRjaChvcC5jbWRfc3RyaW5nKXtjYXNlIEJFR0lOX0FOTk9UQVRJT046YW5ub3RhdGlvbkdyb3Vwcy5wdXNoKFtdKTticmVhaztjYXNlIEVORF9BTk5PVEFUSU9OOmFubm90YXRpb25Hcm91cHMucG9wKCk7YnJlYWs7Y2FzZSBBTk5PVEFUSU9OOmFubm90YXRpb25Hcm91cHNbYW5ub3RhdGlvbkdyb3Vwcy5sZW5ndGgtMV0ucHVzaChvcCk7YnJlYWs7ZGVmYXVsdDp7Y29uc3QgYW5ub3RhdGlvbnM9W107bGV0IGVsZW1lbnRJbmZvPXt9O2Fubm90YXRpb25Hcm91cHMuZm9yRWFjaChmdW5jdGlvbihhbm5vdGF0aW9uR3JvdXApe2VsZW1lbnRJbmZvPXt9O2Fubm90YXRpb25Hcm91cC5mb3JFYWNoKGZ1bmN0aW9uKGFubm90YXRpb24pe2Fubm90YXRpb24uaW5mby5mb3JFYWNoKGZ1bmN0aW9uKGluZm8pe2lmKGluZm8uaW5jbHVkZXMoQU5OT1RBVElPTl9UQUcpKXtlbGVtZW50SW5mby50YWc9aW5mby5zdWJzdHJpbmcoaW5mby5pbmRleE9mKEFOTk9UQVRJT05fVEFHKSsKLUFOTk9UQVRJT05fVEFHLmxlbmd0aCkudG9Mb3dlckNhc2UoKTt9ZWxzZSBpZihpbmZvLmluY2x1ZGVzKEFOTk9UQVRJT05fSUQpKXtlbGVtZW50SW5mby5pZD1pbmZvLnN1YnN0cmluZyhpbmZvLmluZGV4T2YoQU5OT1RBVElPTl9JRCkrCi1BTk5PVEFUSU9OX0lELmxlbmd0aCk7fWVsc2UgaWYoaW5mby5pbmNsdWRlcyhBTk5PVEFUSU9OX0NMQVNTKSl7ZWxlbWVudEluZm8uY2xhc3M9aW5mby5zdWJzdHJpbmcoaW5mby5pbmRleE9mKEFOTk9UQVRJT05fQ0xBU1MpKwotQU5OT1RBVElPTl9DTEFTUy5sZW5ndGgpO30KLWFubm90YXRpb25zLnB1c2goaW5mbyk7fSk7fSk7fSk7b3AuYW5ub3RhdGlvbnM9YW5ub3RhdGlvbnM7b3AuZWxlbWVudEluZm89ZWxlbWVudEluZm87b3BzV2l0aG91dEFubm90YXRpb25zLnB1c2gob3ApO319fQotcmV0dXJuIG9wc1dpdGhvdXRBbm5vdGF0aW9uczt9fTtyZXR1cm57UGljdHVyZU9wc0xpc3RWaWV3LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5lLmNocm9tZS5jYycsZnVuY3Rpb24oKXtjb25zdCBUSElTX0RPQz1kb2N1bWVudC5jdXJyZW50U2NyaXB0Lm93bmVyRG9jdW1lbnQ7Y29uc3QgRGlzcGxheUl0ZW1EZWJ1Z2dlcj10ci51aS5iLmRlZmluZSgndHItdWktZS1jaHJvbWUtY2MtZGlzcGxheS1pdGVtLWRlYnVnZ2VyJyk7RGlzcGxheUl0ZW1EZWJ1Z2dlci5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoKXtjb25zdCBub2RlPXRyLnVpLmIuaW5zdGFudGlhdGVUZW1wbGF0ZSgnI3RyLXVpLWUtY2hyb21lLWNjLWRpc3BsYXktaXRlbS1kZWJ1Z2dlci10ZW1wbGF0ZScsVEhJU19ET0MpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKG5vZGUpO3RoaXMuc3R5bGUuZmxleEdyb3c9MTt0aGlzLnN0eWxlLmZsZXhTaHJpbms9MTt0aGlzLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5zdHlsZS5kaXNwbGF5PSdmbGV4Jzt0aGlzLnBpY3R1cmVBc0ltYWdlRGF0YV89dW5kZWZpbmVkO3RoaXMuem9vbVNjYWxlVmFsdWVfPTE7dGhpcy5zaXplSW5mb189UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcignLnNpemUnKTt0aGlzLnJhc3RlckFyZWFfPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJ3Jhc3Rlci1hcmVhJyk7dGhpcy5yYXN0ZXJBcmVhXy5zdHlsZS5mbGV4R3Jvdz0xO3RoaXMucmFzdGVyQXJlYV8uc3R5bGUuZmxleFNocmluaz0xO3RoaXMucmFzdGVyQXJlYV8uc3R5bGUuZmxleEJhc2lzPSdhdXRvJzt0aGlzLnJhc3RlckFyZWFfLnN0eWxlLmJhY2tncm91bmRDb2xvcj0nI2RkZCc7dGhpcy5yYXN0ZXJBcmVhXy5zdHlsZS5taW5IZWlnaHQ9JzIwMHB4Jzt0aGlzLnJhc3RlckFyZWFfLnN0eWxlLm1pbldpZHRoPScyMDBweCc7dGhpcy5yYXN0ZXJBcmVhXy5zdHlsZS5vdmVyZmxvd1k9J2F1dG8nO3RoaXMucmFzdGVyQXJlYV8uc3R5bGUucGFkZGluZ0xlZnQ9JzVweCc7dGhpcy5yYXN0ZXJDYW52YXNfPVBvbHltZXIuZG9tKHRoaXMucmFzdGVyQXJlYV8pLnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpO3RoaXMucmFzdGVyQ3R4Xz10aGlzLnJhc3RlckNhbnZhc18uZ2V0Q29udGV4dCgnMmQnKTt0aGlzLnRyYWNrTW91c2VfKCk7dGhpcy5kaXNwbGF5SXRlbUluZm9fPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJ2Rpc3BsYXktaXRlbS1pbmZvJyk7dGhpcy5kaXNwbGF5SXRlbUluZm9fLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uRGlzcGxheUl0ZW1JbmZvQ2xpY2tfLmJpbmQodGhpcyksZmFsc2UpO3RoaXMuZGlzcGxheUl0ZW1MaXN0Vmlld189bmV3IHRyLnVpLmIuTGlzdFZpZXcoKTt0aGlzLmRpc3BsYXlJdGVtTGlzdFZpZXdfLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbi1jaGFuZ2VkJyx0aGlzLm9uRGlzcGxheUl0ZW1MaXN0U2VsZWN0aW9uXy5iaW5kKHRoaXMpKTtQb2x5bWVyLmRvbSh0aGlzLmRpc3BsYXlJdGVtSW5mb18pLmFwcGVuZENoaWxkKHRoaXMuZGlzcGxheUl0ZW1MaXN0Vmlld18pO3RoaXMuZGlzcGxheUxpc3RGaWxlbmFtZV89UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcignLmRsZmlsZW5hbWUnKTt0aGlzLmRpc3BsYXlMaXN0RXhwb3J0QnV0dG9uXz1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcuZGxleHBvcnQnKTt0aGlzLmRpc3BsYXlMaXN0RXhwb3J0QnV0dG9uXy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsdGhpcy5vbkV4cG9ydERpc3BsYXlMaXN0Q2xpY2tlZF8uYmluZCh0aGlzKSk7dGhpcy5za3BGaWxlbmFtZV89UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcignLnNrcGZpbGVuYW1lJyk7dGhpcy5za3BFeHBvcnRCdXR0b25fPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJy5za3BleHBvcnQnKTt0aGlzLnNrcEV4cG9ydEJ1dHRvbl8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMub25FeHBvcnRTa1BpY3R1cmVDbGlja2VkXy5iaW5kKHRoaXMpKTtjb25zdCBsZWZ0UGFuZWw9UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcignbGVmdC1wYW5lbCcpO2xlZnRQYW5lbC5zdHlsZS5kaXNwbGF5PSdmbGV4JztsZWZ0UGFuZWwuc3R5bGUuZmxleERpcmVjdGlvbj0nY29sdW1uJztsZWZ0UGFuZWwuc3R5bGUubWluV2lkdGg9JzMwMHB4JztsZWZ0UGFuZWwuc3R5bGUub3ZlcmZsb3dZPSdhdXRvJztsZWZ0UGFuZWwuY2hpbGRyZW5bMF0ucGFkZGluZ1RvcD0nMnB4JztsZWZ0UGFuZWwuY2hpbGRyZW5bMF0uZmxleEdyb3c9MTtsZWZ0UGFuZWwuY2hpbGRyZW5bMF0uZmxleFNocmluaz0xO2xlZnRQYW5lbC5jaGlsZHJlblswXS5mbGV4QmFzaXM9J2F1dG8nO2xlZnRQYW5lbC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5zdHlsZS5ib3JkZXJCb3R0b209JzFweCBzb2xpZCAjNTU1Jztjb25zdCBsZWZ0UGFuZWxUaXRsZT1sZWZ0UGFuZWwucXVlcnlTZWxlY3RvcignLnRpdGxlJyk7bGVmdFBhbmVsVGl0bGUuc3R5bGUuZm9udFdlaWdodD0nYm9sZCc7bGVmdFBhbmVsVGl0bGUuc3R5bGUubWFyZ2luTGVmdD0nNXB4JztsZWZ0UGFuZWxUaXRsZS5zdHlsZS5tYXJnaW5yaWdodD0nNXB4Jztmb3IoY29uc3QgZGl2IG9mIGxlZnRQYW5lbC5xdWVyeVNlbGVjdG9yQWxsKCcuZXhwb3J0Jykpe2Rpdi5zdHlsZS5tYXJnaW49JzVweCc7fQotY29uc3QgbWlkZGxlRHJhZ0hhbmRsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLWRyYWctaGFuZGxlJyk7bWlkZGxlRHJhZ0hhbmRsZS5zdHlsZS5mbGV4R3Jvdz0wO21pZGRsZURyYWdIYW5kbGUuc3R5bGUuZmxleFNocmluaz0wO21pZGRsZURyYWdIYW5kbGUuc3R5bGUuZmxleEJhc2lzPSdhdXRvJzttaWRkbGVEcmFnSGFuZGxlLmhvcml6b250YWw9ZmFsc2U7bWlkZGxlRHJhZ0hhbmRsZS50YXJnZXQ9bGVmdFBhbmVsO2NvbnN0IHJpZ2h0UGFuZWw9UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcigncmlnaHQtcGFuZWwnKTtyaWdodFBhbmVsLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3JpZ2h0UGFuZWwuc3R5bGUuZmxleEdyb3c9MTtyaWdodFBhbmVsLnN0eWxlLmZsZXhTaHJpbms9MTtyaWdodFBhbmVsLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5pbmZvQmFyXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLWluZm8tYmFyJyk7UG9seW1lci5kb20odGhpcy5yYXN0ZXJBcmVhXykuaW5zZXJ0QmVmb3JlKHRoaXMuaW5mb0Jhcl8sdGhpcy5yYXN0ZXJDYW52YXNfKTtQb2x5bWVyLmRvbSh0aGlzKS5pbnNlcnRCZWZvcmUobWlkZGxlRHJhZ0hhbmRsZSxyaWdodFBhbmVsKTt0aGlzLnBpY3R1cmVfPXVuZGVmaW5lZDt0aGlzLnBpY3R1cmVPcHNMaXN0Vmlld189bmV3IHRyLnVpLmUuY2hyb21lLmNjLlBpY3R1cmVPcHNMaXN0VmlldygpO3RoaXMucGljdHVyZU9wc0xpc3RWaWV3Xy5zdHlsZS5vdmVyZmxvd1k9J2F1dG8nO1BvbHltZXIuZG9tKHJpZ2h0UGFuZWwpLmluc2VydEJlZm9yZSh0aGlzLnBpY3R1cmVPcHNMaXN0Vmlld18sdGhpcy5yYXN0ZXJBcmVhXyk7dGhpcy5waWN0dXJlT3BzTGlzdERyYWdIYW5kbGVfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItZHJhZy1oYW5kbGUnKTt0aGlzLnBpY3R1cmVPcHNMaXN0RHJhZ0hhbmRsZV8uaG9yaXpvbnRhbD1mYWxzZTt0aGlzLnBpY3R1cmVPcHNMaXN0RHJhZ0hhbmRsZV8udGFyZ2V0PXRoaXMucGljdHVyZU9wc0xpc3RWaWV3XztQb2x5bWVyLmRvbShyaWdodFBhbmVsKS5pbnNlcnRCZWZvcmUodGhpcy5waWN0dXJlT3BzTGlzdERyYWdIYW5kbGVfLHRoaXMucmFzdGVyQXJlYV8pO30sZ2V0IHBpY3R1cmUoKXtyZXR1cm4gdGhpcy5waWN0dXJlXzt9LHNldCBkaXNwbGF5SXRlbUxpc3QoZGlzcGxheUl0ZW1MaXN0KXt0aGlzLmRpc3BsYXlJdGVtTGlzdF89ZGlzcGxheUl0ZW1MaXN0O3RoaXMucGljdHVyZT10aGlzLmRpc3BsYXlJdGVtTGlzdF87dGhpcy5kaXNwbGF5SXRlbUxpc3RWaWV3Xy5jbGVhcigpO3RoaXMuZGlzcGxheUl0ZW1MaXN0Xy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe2NvbnN0IGxpc3RJdGVtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWUtY2hyb21lLWNjLWRpc3BsYXktaXRlbS1saXN0LWl0ZW0nKTtsaXN0SXRlbS5kYXRhPWl0ZW07UG9seW1lci5kb20odGhpcy5kaXNwbGF5SXRlbUxpc3RWaWV3XykuYXBwZW5kQ2hpbGQobGlzdEl0ZW0pO30uYmluZCh0aGlzKSk7fSxzZXQgcGljdHVyZShwaWN0dXJlKXt0aGlzLnBpY3R1cmVfPXBpY3R1cmU7Y29uc3Qgc2hvd09wc0xpc3Q9cGljdHVyZSYmcGljdHVyZSE9PXRoaXMuZGlzcGxheUl0ZW1MaXN0Xzt0aGlzLnVwZGF0ZURyYXdPcHNMaXN0XyhzaG93T3BzTGlzdCk7aWYocGljdHVyZSl7Y29uc3Qgc2l6ZT10aGlzLmdldFJhc3RlckNhbnZhc1NpemVfKCk7dGhpcy5yYXN0ZXJDYW52YXNfLndpZHRoPXNpemUud2lkdGg7dGhpcy5yYXN0ZXJDYW52YXNfLmhlaWdodD1zaXplLmhlaWdodDt9Ci1jb25zdCBib3VuZHM9dGhpcy5yYXN0ZXJBcmVhXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBzZWxlY3RvckJvdW5kcz10aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5wb3M9e3g6KGJvdW5kcy5yaWdodC1zZWxlY3RvckJvdW5kcy53aWR0aC0xMCkseTpib3VuZHMudG9wfTt0aGlzLnJhc3Rlcml6ZV8oKTt0aGlzLnNjaGVkdWxlVXBkYXRlQ29udGVudHNfKCk7fSxnZXRSYXN0ZXJDYW52YXNTaXplXygpe2NvbnN0IHN0eWxlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMucmFzdGVyQXJlYV8pO2xldCB3aWR0aD1wYXJzZUludChzdHlsZS53aWR0aCk7bGV0IGhlaWdodD1wYXJzZUludChzdHlsZS5oZWlnaHQpO2lmKHRoaXMucGljdHVyZV8pe3dpZHRoPU1hdGgubWF4KHdpZHRoLHRoaXMucGljdHVyZV8ubGF5ZXJSZWN0LndpZHRoKTtoZWlnaHQ9TWF0aC5tYXgoaGVpZ2h0LHRoaXMucGljdHVyZV8ubGF5ZXJSZWN0LmhlaWdodCk7fQotcmV0dXJue3dpZHRoLGhlaWdodH07fSxzY2hlZHVsZVVwZGF0ZUNvbnRlbnRzXygpe2lmKHRoaXMudXBkYXRlQ29udGVudHNQZW5kaW5nXylyZXR1cm47dGhpcy51cGRhdGVDb250ZW50c1BlbmRpbmdfPXRydWU7dHIuYi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJblRoaXNGcmFtZUlmUG9zc2libGUodGhpcy51cGRhdGVDb250ZW50c18uYmluZCh0aGlzKSk7fSx1cGRhdGVDb250ZW50c18oKXt0aGlzLnVwZGF0ZUNvbnRlbnRzUGVuZGluZ189ZmFsc2U7aWYodGhpcy5waWN0dXJlXyl7UG9seW1lci5kb20odGhpcy5zaXplSW5mb18pLnRleHRDb250ZW50PScoJysKLXRoaXMucGljdHVyZV8ubGF5ZXJSZWN0LndpZHRoKycgeCAnKwotdGhpcy5waWN0dXJlXy5sYXllclJlY3QuaGVpZ2h0KycpJzt9Ci1pZighdGhpcy5waWN0dXJlQXNJbWFnZURhdGFfKXJldHVybjt0aGlzLmluZm9CYXJfLnZpc2libGU9ZmFsc2U7dGhpcy5pbmZvQmFyXy5yZW1vdmVBbGxCdXR0b25zKCk7aWYodGhpcy5waWN0dXJlQXNJbWFnZURhdGFfLmVycm9yKXt0aGlzLmluZm9CYXJfLm1lc3NhZ2U9J0Nhbm5vdCByYXN0ZXJpemUuLi4nO3RoaXMuaW5mb0Jhcl8uYWRkQnV0dG9uKCdNb3JlIGluZm8uLi4nLGZ1bmN0aW9uKGUpe2NvbnN0IG92ZXJsYXk9bmV3IHRyLnVpLmIuT3ZlcmxheSgpO1BvbHltZXIuZG9tKG92ZXJsYXkpLnRleHRDb250ZW50PXRoaXMucGljdHVyZUFzSW1hZ2VEYXRhXy5lcnJvcjtvdmVybGF5LnZpc2libGU9dHJ1ZTtlLnN0b3BQcm9wYWdhdGlvbigpO3JldHVybiBmYWxzZTt9LmJpbmQodGhpcykpO3RoaXMuaW5mb0Jhcl8udmlzaWJsZT10cnVlO30KLXRoaXMuZHJhd1BpY3R1cmVfKCk7fSxkcmF3UGljdHVyZV8oKXtjb25zdCBzaXplPXRoaXMuZ2V0UmFzdGVyQ2FudmFzU2l6ZV8oKTtpZihzaXplLndpZHRoIT09dGhpcy5yYXN0ZXJDYW52YXNfLndpZHRoKXt0aGlzLnJhc3RlckNhbnZhc18ud2lkdGg9c2l6ZS53aWR0aDt9Ci1pZihzaXplLmhlaWdodCE9PXRoaXMucmFzdGVyQ2FudmFzXy5oZWlnaHQpe3RoaXMucmFzdGVyQ2FudmFzXy5oZWlnaHQ9c2l6ZS5oZWlnaHQ7fQotdGhpcy5yYXN0ZXJDdHhfLmNsZWFyUmVjdCgwLDAsc2l6ZS53aWR0aCxzaXplLmhlaWdodCk7aWYoIXRoaXMucGljdHVyZV98fCF0aGlzLnBpY3R1cmVBc0ltYWdlRGF0YV8uaW1hZ2VEYXRhKXJldHVybjtjb25zdCBpbWdDYW52YXM9dGhpcy5waWN0dXJlQXNJbWFnZURhdGFfLmFzQ2FudmFzKCk7Y29uc3Qgdz1pbWdDYW52YXMud2lkdGg7Y29uc3QgaD1pbWdDYW52YXMuaGVpZ2h0O3RoaXMucmFzdGVyQ3R4Xy5kcmF3SW1hZ2UoaW1nQ2FudmFzLDAsMCx3LGgsMCwwLHcqdGhpcy56b29tU2NhbGVWYWx1ZV8saCp0aGlzLnpvb21TY2FsZVZhbHVlXyk7fSxyYXN0ZXJpemVfKCl7aWYodGhpcy5waWN0dXJlXyl7dGhpcy5waWN0dXJlXy5yYXN0ZXJpemUoe3Nob3dPdmVyZHJhdzpmYWxzZX0sdGhpcy5vblJhc3RlckNvbXBsZXRlXy5iaW5kKHRoaXMpKTt9fSxvblJhc3RlckNvbXBsZXRlXyhwaWN0dXJlQXNJbWFnZURhdGEpe3RoaXMucGljdHVyZUFzSW1hZ2VEYXRhXz1waWN0dXJlQXNJbWFnZURhdGE7dGhpcy5zY2hlZHVsZVVwZGF0ZUNvbnRlbnRzXygpO30sb25EaXNwbGF5SXRlbUxpc3RTZWxlY3Rpb25fKGUpe2NvbnN0IHNlbGVjdGVkPXRoaXMuZGlzcGxheUl0ZW1MaXN0Vmlld18uc2VsZWN0ZWRFbGVtZW50O2lmKCFzZWxlY3RlZCl7dGhpcy5waWN0dXJlPXRoaXMuZGlzcGxheUl0ZW1MaXN0XztyZXR1cm47fQotY29uc3QgaW5kZXg9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLmRpc3BsYXlJdGVtTGlzdFZpZXdfLmNoaWxkcmVuLHNlbGVjdGVkKTtjb25zdCBkaXNwbGF5SXRlbT10aGlzLmRpc3BsYXlJdGVtTGlzdF8uaXRlbXNbaW5kZXhdO2lmKGRpc3BsYXlJdGVtJiZkaXNwbGF5SXRlbS5za3A2NCl7dGhpcy5waWN0dXJlPW5ldyB0ci5lLmNjLlBpY3R1cmUoZGlzcGxheUl0ZW0uc2twNjQsdGhpcy5kaXNwbGF5SXRlbUxpc3RfLmxheWVyUmVjdCk7fWVsc2V7dGhpcy5waWN0dXJlPXVuZGVmaW5lZDt9fSxvbkRpc3BsYXlJdGVtSW5mb0NsaWNrXyhlKXtpZihlJiZlLnRhcmdldD09PXRoaXMuZGlzcGxheUl0ZW1JbmZvXyl7dGhpcy5kaXNwbGF5SXRlbUxpc3RWaWV3Xy5zZWxlY3RlZEVsZW1lbnQ9dW5kZWZpbmVkO319LHVwZGF0ZURyYXdPcHNMaXN0XyhzaG93T3BzTGlzdCl7aWYoc2hvd09wc0xpc3Qpe3RoaXMucGljdHVyZU9wc0xpc3RWaWV3Xy5waWN0dXJlPXRoaXMucGljdHVyZV87aWYodGhpcy5waWN0dXJlT3BzTGlzdFZpZXdfLm51bU9wcz4wKXt0aGlzLnBpY3R1cmVPcHNMaXN0Vmlld18uc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMucGljdHVyZU9wc0xpc3REcmFnSGFuZGxlXy5zdHlsZS5kaXNwbGF5PSdibG9jayc7fX1lbHNle3RoaXMucGljdHVyZU9wc0xpc3RWaWV3Xy5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLnBpY3R1cmVPcHNMaXN0RHJhZ0hhbmRsZV8uc3R5bGUuZGlzcGxheT0nbm9uZSc7fX0sdHJhY2tNb3VzZV8oKXt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLW1vdXNlLW1vZGUtc2VsZWN0b3InKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy50YXJnZXRFbGVtZW50PXRoaXMucmFzdGVyQXJlYV87UG9seW1lci5kb20odGhpcy5yYXN0ZXJBcmVhXykuYXBwZW5kQ2hpbGQodGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8pO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnN1cHBvcnRlZE1vZGVNYXNrPXRyLnVpLmIuTU9VU0VfU0VMRUNUT1JfTU9ERS5aT09NO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLm1vZGU9dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFLlpPT007dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uZGVmYXVsdE1vZGU9dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFLlpPT007dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc2V0dGluZ3NLZXk9J3BpY3R1cmVEZWJ1Z2dlci5tb3VzZU1vZGVTZWxlY3Rvcic7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcignYmVnaW56b29tJyx0aGlzLm9uQmVnaW5ab29tXy5iaW5kKHRoaXMpKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCd1cGRhdGV6b29tJyx0aGlzLm9uVXBkYXRlWm9vbV8uYmluZCh0aGlzKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcignZW5kem9vbScsdGhpcy5vbkVuZFpvb21fLmJpbmQodGhpcykpO30sb25CZWdpblpvb21fKGUpe3RoaXMuaXNab29taW5nXz10cnVlO3RoaXMubGFzdE1vdXNlVmlld1Bvc189dGhpcy5leHRyYWN0UmVsYXRpdmVNb3VzZVBvc2l0aW9uXyhlKTtlLnByZXZlbnREZWZhdWx0KCk7fSxvblVwZGF0ZVpvb21fKGUpe2lmKCF0aGlzLmlzWm9vbWluZ18pcmV0dXJuO2NvbnN0IGN1cnJlbnRNb3VzZVZpZXdQb3M9dGhpcy5leHRyYWN0UmVsYXRpdmVNb3VzZVBvc2l0aW9uXyhlKTt0aGlzLnpvb21TY2FsZVZhbHVlXys9KCh0aGlzLmxhc3RNb3VzZVZpZXdQb3NfLnktY3VycmVudE1vdXNlVmlld1Bvcy55KSowLjAwMSk7dGhpcy56b29tU2NhbGVWYWx1ZV89TWF0aC5tYXgodGhpcy56b29tU2NhbGVWYWx1ZV8sMC4xKTt0aGlzLmRyYXdQaWN0dXJlXygpO3RoaXMubGFzdE1vdXNlVmlld1Bvc189Y3VycmVudE1vdXNlVmlld1Bvczt9LG9uRW5kWm9vbV8oZSl7dGhpcy5sYXN0TW91c2VWaWV3UG9zXz11bmRlZmluZWQ7dGhpcy5pc1pvb21pbmdfPWZhbHNlO2UucHJldmVudERlZmF1bHQoKTt9LGV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpe3JldHVybnt4OmUuY2xpZW50WC10aGlzLnJhc3RlckFyZWFfLm9mZnNldExlZnQseTplLmNsaWVudFktdGhpcy5yYXN0ZXJBcmVhXy5vZmZzZXRUb3B9O30sc2F2ZUZpbGVfKGZpbGVuYW1lLHJhd0RhdGEpe2lmKCFyYXdEYXRhKXJldHVybjtjb25zdCBsZW5ndGg9cmF3RGF0YS5sZW5ndGg7Y29uc3QgYXJyYXlCdWZmZXI9bmV3IEFycmF5QnVmZmVyKGxlbmd0aCk7Y29uc3QgdWludDhBcnJheT1uZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7Zm9yKGxldCBjPTA7YzxsZW5ndGg7YysrKXt1aW50OEFycmF5W2NdPXJhd0RhdGEuY2hhckNvZGVBdChjKTt9Ci1jb25zdCBibG9iPW5ldyBCbG9iKFt1aW50OEFycmF5XSx7dHlwZTonYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5J30pO2NvbnN0IGJsb2JVcmw9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7Y29uc3QgbGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLCdhJyk7bGluay5ocmVmPWJsb2JVcmw7bGluay5kb3dubG9hZD1maWxlbmFtZTtjb25zdCBldmVudD1kb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTtldmVudC5pbml0TW91c2VFdmVudCgnY2xpY2snLHRydWUsZmFsc2Usd2luZG93LDAsMCwwLDAsMCxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSwwLG51bGwpO2xpbmsuZGlzcGF0Y2hFdmVudChldmVudCk7fSxvbkV4cG9ydERpc3BsYXlMaXN0Q2xpY2tlZF8oKXtjb25zdCByYXdEYXRhPUpTT04uc3RyaW5naWZ5KHRoaXMuZGlzcGxheUl0ZW1MaXN0Xy5pdGVtcyk7dGhpcy5zYXZlRmlsZV8odGhpcy5kaXNwbGF5TGlzdEZpbGVuYW1lXy52YWx1ZSxyYXdEYXRhKTt9LG9uRXhwb3J0U2tQaWN0dXJlQ2xpY2tlZF8oKXtjb25zdCByYXdEYXRhPXRyLmIuQmFzZTY0LmF0b2IodGhpcy5waWN0dXJlXy5nZXRCYXNlNjRTa3BEYXRhKCkpO3RoaXMuc2F2ZUZpbGVfKHRoaXMuc2twRmlsZW5hbWVfLnZhbHVlLHJhd0RhdGEpO319O3JldHVybntEaXNwbGF5SXRlbURlYnVnZ2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5lLmNocm9tZS5jYycsZnVuY3Rpb24oKXtjb25zdCBEaXNwbGF5SXRlbVNuYXBzaG90Vmlldz10ci51aS5iLmRlZmluZSgndHItdWktZS1jaHJvbWUtY2MtZGlzcGxheS1pdGVtLWxpc3QtdmlldycsdHIudWkuYW5hbHlzaXMuT2JqZWN0U25hcHNob3RWaWV3KTtEaXNwbGF5SXRlbVNuYXBzaG90Vmlldy5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcucHJvdG90eXBlLGRlY29yYXRlKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSdmbGV4Jzt0aGlzLnN0eWxlLmZsZXhHcm93PTE7dGhpcy5zdHlsZS5mbGV4U2hyaW5rPTE7dGhpcy5zdHlsZS5mbGV4QmFzaXM9J2F1dG8nO3RoaXMuZGlzcGxheUl0ZW1EZWJ1Z2dlcl89bmV3IHRyLnVpLmUuY2hyb21lLmNjLkRpc3BsYXlJdGVtRGVidWdnZXIoKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmRpc3BsYXlJdGVtRGVidWdnZXJfKTt9LHVwZGF0ZUNvbnRlbnRzKCl7aWYodGhpcy5vYmplY3RTbmFwc2hvdF8mJnRoaXMuZGlzcGxheUl0ZW1EZWJ1Z2dlcl8pe3RoaXMuZGlzcGxheUl0ZW1EZWJ1Z2dlcl8uZGlzcGxheUl0ZW1MaXN0PXRoaXMub2JqZWN0U25hcHNob3RfO319fTt0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcucmVnaXN0ZXIoRGlzcGxheUl0ZW1TbmFwc2hvdFZpZXcse3R5cGVOYW1lczpbJ2NjOjpEaXNwbGF5SXRlbUxpc3QnXSxzaG93SW5zdGFuY2VzOmZhbHNlfSk7cmV0dXJue0Rpc3BsYXlJdGVtU25hcHNob3RWaWV3LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5lLmNocm9tZS5jYycsZnVuY3Rpb24oKXtjb25zdCBjb25zdGFudHM9dHIuZS5jYy5jb25zdGFudHM7Y29uc3QgUkVOREVSX1BBU1NfUVVBRFM9TWF0aC5tYXgoY29uc3RhbnRzLkFDVElWRV9UUkVFLGNvbnN0YW50cy5QRU5ESU5HX1RSRUUpKzE7Y29uc3QgTGF5ZXJQaWNrZXI9dHIudWkuYi5kZWZpbmUoJ3RyLXVpLWUtY2hyb21lLWNjLWxheWVyLXBpY2tlcicpO0xheWVyUGlja2VyLnByb3RvdHlwZT17X19wcm90b19fOkhUTUxVbmtub3duRWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoKXt0aGlzLmx0aGlfPXVuZGVmaW5lZDt0aGlzLmNvbnRyb2xzXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0b3AtY29udHJvbHMnKTt0aGlzLnJlbmRlclBhc3NRdWFkc189ZmFsc2U7dGhpcy5zdHlsZS5kaXNwbGF5PSdmbGV4Jzt0aGlzLnN0eWxlLmZsZXhEaXJlY3Rpb249J2NvbHVtbic7dGhpcy5jb250cm9sc18uc3R5bGUuZmxleEdyb3c9MDt0aGlzLmNvbnRyb2xzXy5zdHlsZS5mbGV4U2hyaW5rPTA7dGhpcy5jb250cm9sc18uc3R5bGUuZmxleEJhc2lzPSdhdXRvJzt0aGlzLmNvbnRyb2xzXy5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2U9Jy13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDAsIDEwMCUgMCwgZnJvbSgjRTVFNUU1KSwgdG8oI0QxRDFEMSkpJzt0aGlzLmNvbnRyb2xzXy5zdHlsZS5ib3JkZXJCb3R0b209JzFweCBzb2xpZCAjOGU4ZThlJzt0aGlzLmNvbnRyb2xzXy5zdHlsZS5ib3JkZXJUb3A9JzFweCBzb2xpZCB3aGl0ZSc7dGhpcy5jb250cm9sc18uc3R5bGUuZGlzcGxheT0naW5saW5lJzt0aGlzLmNvbnRyb2xzXy5zdHlsZS5mb250U2l6ZT0nMTRweCc7dGhpcy5jb250cm9sc18uc3R5bGUucGFkZGluZ0xlZnQ9JzJweCc7dGhpcy5pdGVtTGlzdF89bmV3IHRyLnVpLmIuTGlzdFZpZXcoKTt0aGlzLml0ZW1MaXN0Xy5zdHlsZS5mbGV4R3Jvdz0xO3RoaXMuaXRlbUxpc3RfLnN0eWxlLmZsZXhTaHJpbms9MTt0aGlzLml0ZW1MaXN0Xy5zdHlsZS5mbGV4QmFzaXM9J2F1dG8nO3RoaXMuaXRlbUxpc3RfLnN0eWxlLmZvbnRGYW1pbHk9J21vbm9zcGFjZSc7dGhpcy5pdGVtTGlzdF8uc3R5bGUub3ZlcmZsb3c9J2F1dG8nO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuY29udHJvbHNfKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLml0ZW1MaXN0Xyk7dGhpcy5pdGVtTGlzdF8uYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uLWNoYW5nZWQnLHRoaXMub25JdGVtU2VsZWN0aW9uQ2hhbmdlZF8uYmluZCh0aGlzKSk7UG9seW1lci5kb20odGhpcy5jb250cm9sc18pLmFwcGVuZENoaWxkKHRyLnVpLmIuY3JlYXRlU2VsZWN0b3IodGhpcywnd2hpY2hUcmVlJywnbGF5ZXJQaWNrZXIud2hpY2hUcmVlJyxjb25zdGFudHMuQUNUSVZFX1RSRUUsW3tsYWJlbDonQWN0aXZlIHRyZWUnLHZhbHVlOmNvbnN0YW50cy5BQ1RJVkVfVFJFRX0se2xhYmVsOidQZW5kaW5nIHRyZWUnLHZhbHVlOmNvbnN0YW50cy5QRU5ESU5HX1RSRUV9LHtsYWJlbDonUmVuZGVyIHBhc3MgcXVhZHMnLHZhbHVlOlJFTkRFUl9QQVNTX1FVQURTfV0pKTt0aGlzLnNob3dQdXJlVHJhbnNmb3JtTGF5ZXJzXz1mYWxzZTtjb25zdCBzaG93UHVyZVRyYW5zZm9ybUxheWVycz10ci51aS5iLmNyZWF0ZUNoZWNrQm94KHRoaXMsJ3Nob3dQdXJlVHJhbnNmb3JtTGF5ZXJzJywnbGF5ZXJQaWNrZXIuc2hvd1B1cmVUcmFuc2Zvcm1MYXllcnMnLGZhbHNlLCdUcmFuc2Zvcm0gbGF5ZXJzJyk7UG9seW1lci5kb20oc2hvd1B1cmVUcmFuc2Zvcm1MYXllcnMpLmNsYXNzTGlzdC5hZGQoJ3Nob3ctdHJhbnNmb3JtLWxheWVycycpO3Nob3dQdXJlVHJhbnNmb3JtTGF5ZXJzLnRpdGxlPSdXaGVuIGNoZWNrZWQsIHB1cmUgdHJhbnNmb3JtIGxheWVycyBhcmUgc2hvd24nO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZChzaG93UHVyZVRyYW5zZm9ybUxheWVycyk7fSxnZXQgbHRoaVNuYXBzaG90KCl7cmV0dXJuIHRoaXMubHRoaVNuYXBzaG90Xzt9LHNldCBsdGhpU25hcHNob3QobHRoaVNuYXBzaG90KXt0aGlzLmx0aGlTbmFwc2hvdF89bHRoaVNuYXBzaG90O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgd2hpY2hUcmVlKCl7cmV0dXJuIHRoaXMucmVuZGVyUGFzc1F1YWRzXz9jb25zdGFudHMuQUNUSVZFX1RSRUU6dGhpcy53aGljaFRyZWVfO30sc2V0IHdoaWNoVHJlZSh3aGljaFRyZWUpe3RoaXMud2hpY2hUcmVlXz13aGljaFRyZWU7dGhpcy5yZW5kZXJQYXNzUXVhZHNfPSh3aGljaFRyZWU9PT1SRU5ERVJfUEFTU19RVUFEUyk7dGhpcy51cGRhdGVDb250ZW50c18oKTt0ci5iLmRpc3BhdGNoU2ltcGxlRXZlbnQodGhpcywnc2VsZWN0aW9uLWNoYW5nZScsZmFsc2UpO30sZ2V0IGxheWVyVHJlZUltcGwoKXtpZih0aGlzLmx0aGlTbmFwc2hvdD09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLmx0aGlTbmFwc2hvdC5nZXRUcmVlKHRoaXMud2hpY2hUcmVlKTt9LGdldCBpc1JlbmRlclBhc3NRdWFkcygpe3JldHVybiB0aGlzLnJlbmRlclBhc3NRdWFkc187fSxnZXQgc2hvd1B1cmVUcmFuc2Zvcm1MYXllcnMoKXtyZXR1cm4gdGhpcy5zaG93UHVyZVRyYW5zZm9ybUxheWVyc187fSxzZXQgc2hvd1B1cmVUcmFuc2Zvcm1MYXllcnMoc2hvdyl7aWYodGhpcy5zaG93UHVyZVRyYW5zZm9ybUxheWVyc189PT1zaG93KXJldHVybjt0aGlzLnNob3dQdXJlVHJhbnNmb3JtTGF5ZXJzXz1zaG93O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXRSZW5kZXJQYXNzSW5mb3NfKCl7aWYoIXRoaXMubHRoaVNuYXBzaG90XylyZXR1cm5bXTtjb25zdCByZW5kZXJQYXNzSW5mbz1bXTtpZighdGhpcy5sdGhpU25hcHNob3RfLmFyZ3MuZnJhbWV8fCF0aGlzLmx0aGlTbmFwc2hvdF8uYXJncy5mcmFtZS5yZW5kZXJQYXNzZXMpe3JldHVybiByZW5kZXJQYXNzSW5mbzt9Ci1jb25zdCByZW5kZXJQYXNzZXM9dGhpcy5sdGhpU25hcHNob3RfLmFyZ3MuZnJhbWUucmVuZGVyUGFzc2VzO2ZvcihsZXQgaT0wO2k8cmVuZGVyUGFzc2VzLmxlbmd0aDsrK2kpe2NvbnN0IGluZm89e3JlbmRlclBhc3M6cmVuZGVyUGFzc2VzW2ldLGRlcHRoOjAsaWQ6aSxuYW1lOidjYzo6UmVuZGVyUGFzcyd9O3JlbmRlclBhc3NJbmZvLnB1c2goaW5mbyk7fQotcmV0dXJuIHJlbmRlclBhc3NJbmZvO30sZ2V0TGF5ZXJJbmZvc18oKXtpZighdGhpcy5sdGhpU25hcHNob3RfKXJldHVybltdO2NvbnN0IHRyZWU9dGhpcy5sdGhpU25hcHNob3RfLmdldFRyZWUodGhpcy53aGljaFRyZWVfKTtpZighdHJlZSlyZXR1cm5bXTtjb25zdCBsYXllckluZm9zPVtdO2NvbnN0IHNob3dQdXJlVHJhbnNmb3JtTGF5ZXJzPXRoaXMuc2hvd1B1cmVUcmFuc2Zvcm1MYXllcnNfO2Z1bmN0aW9uIGlzUHVyZVRyYW5zZm9ybUxheWVyKGxheWVyKXtpZihsYXllci5hcmdzLmNvbXBvc2l0aW5nUmVhc29ucyYmbGF5ZXIuYXJncy5jb21wb3NpdGluZ1JlYXNvbnMubGVuZ3RoIT09MSYmbGF5ZXIuYXJncy5jb21wb3NpdGluZ1JlYXNvbnNbMF0hPT0nTm8gcmVhc29ucyBnaXZlbicpe3JldHVybiBmYWxzZTt9Ci1pZihsYXllci5hcmdzLmRyYXdzQ29udGVudClyZXR1cm4gZmFsc2U7cmV0dXJuIHRydWU7fQotY29uc3QgdmlzaXRlZExheWVycz17fTtmdW5jdGlvbiB2aXNpdExheWVyKGxheWVyLGRlcHRoLGlzTWFzayxpc1JlcGxpY2Epe2lmKHZpc2l0ZWRMYXllcnNbbGF5ZXIubGF5ZXJJZF0pcmV0dXJuO3Zpc2l0ZWRMYXllcnNbbGF5ZXIubGF5ZXJJZF09dHJ1ZTtjb25zdCBpbmZvPXtsYXllcixkZXB0aH07aWYobGF5ZXIuYXJncy5kcmF3c0NvbnRlbnQpe2luZm8ubmFtZT1sYXllci5vYmplY3RJbnN0YW5jZS5uYW1lO31lbHNle2luZm8ubmFtZT0nY2M6OkxheWVySW1wbCc7fQotaWYobGF5ZXIudXNpbmdHcHVSYXN0ZXJpemF0aW9uKXtpbmZvLm5hbWUrPScgKEcpJzt9Ci1pbmZvLmlzTWFza0xheWVyPWlzTWFzaztpbmZvLnJlcGxpY2FMYXllcj1pc1JlcGxpY2E7aWYoc2hvd1B1cmVUcmFuc2Zvcm1MYXllcnN8fCFpc1B1cmVUcmFuc2Zvcm1MYXllcihsYXllcikpe2xheWVySW5mb3MucHVzaChpbmZvKTt9fQotdHJlZS5pdGVyTGF5ZXJzKHZpc2l0TGF5ZXIpO3JldHVybiBsYXllckluZm9zO30sdXBkYXRlQ29udGVudHNfKCl7aWYodGhpcy5yZW5kZXJQYXNzUXVhZHNfKXt0aGlzLnVwZGF0ZVJlbmRlclBhc3NDb250ZW50c18oKTt9ZWxzZXt0aGlzLnVwZGF0ZUxheWVyQ29udGVudHNfKCk7fX0sdXBkYXRlUmVuZGVyUGFzc0NvbnRlbnRzXygpe3RoaXMuaXRlbUxpc3RfLmNsZWFyKCk7bGV0IHNlbGVjdGVkUmVuZGVyUGFzc0lkO2lmKHRoaXMuc2VsZWN0aW9uXyYmdGhpcy5zZWxlY3Rpb25fLmFzc29jaWF0ZWRSZW5kZXJQYXNzSWQpe3NlbGVjdGVkUmVuZGVyUGFzc0lkPXRoaXMuc2VsZWN0aW9uXy5hc3NvY2lhdGVkUmVuZGVyUGFzc0lkO30KLWNvbnN0IHJlbmRlclBhc3NJbmZvcz10aGlzLmdldFJlbmRlclBhc3NJbmZvc18oKTtyZW5kZXJQYXNzSW5mb3MuZm9yRWFjaChmdW5jdGlvbihyZW5kZXJQYXNzSW5mbyl7Y29uc3QgcmVuZGVyUGFzcz1yZW5kZXJQYXNzSW5mby5yZW5kZXJQYXNzO2NvbnN0IGlkPXJlbmRlclBhc3NJbmZvLmlkO2NvbnN0IGl0ZW09dGhpcy5jcmVhdGVFbGVtZW50V2l0aERlcHRoXyhyZW5kZXJQYXNzSW5mby5kZXB0aCk7Y29uc3QgbGFiZWxFbD1Qb2x5bWVyLmRvbShpdGVtKS5hcHBlbmRDaGlsZCh0ci51aS5iLmNyZWF0ZVNwYW4oKSk7UG9seW1lci5kb20obGFiZWxFbCkudGV4dENvbnRlbnQ9cmVuZGVyUGFzc0luZm8ubmFtZSsnICcraWQ7aXRlbS5yZW5kZXJQYXNzPXJlbmRlclBhc3M7aXRlbS5yZW5kZXJQYXNzSWQ9aWQ7UG9seW1lci5kb20odGhpcy5pdGVtTGlzdF8pLmFwcGVuZENoaWxkKGl0ZW0pO2lmKGlkPT09c2VsZWN0ZWRSZW5kZXJQYXNzSWQpe3JlbmRlclBhc3Muc2VsZWN0aW9uU3RhdGU9dHIubW9kZWwuU2VsZWN0aW9uU3RhdGUuU0VMRUNURUQ7fX0sdGhpcyk7fSx1cGRhdGVMYXllckNvbnRlbnRzXygpe3RoaXMuY2hhbmdpbmdJdGVtU2VsZWN0aW9uXz10cnVlO3RyeXt0aGlzLml0ZW1MaXN0Xy5jbGVhcigpO2xldCBzZWxlY3RlZExheWVySWQ7aWYodGhpcy5zZWxlY3Rpb25fJiZ0aGlzLnNlbGVjdGlvbl8uYXNzb2NpYXRlZExheWVySWQpe3NlbGVjdGVkTGF5ZXJJZD10aGlzLnNlbGVjdGlvbl8uYXNzb2NpYXRlZExheWVySWQ7fQotY29uc3QgbGF5ZXJJbmZvcz10aGlzLmdldExheWVySW5mb3NfKCk7bGF5ZXJJbmZvcy5mb3JFYWNoKGZ1bmN0aW9uKGxheWVySW5mbyl7Y29uc3QgbGF5ZXI9bGF5ZXJJbmZvLmxheWVyO2NvbnN0IGlkPWxheWVyLmxheWVySWQ7Y29uc3QgaXRlbT10aGlzLmNyZWF0ZUVsZW1lbnRXaXRoRGVwdGhfKGxheWVySW5mby5kZXB0aCk7Y29uc3QgbGFiZWxFbD1Qb2x5bWVyLmRvbShpdGVtKS5hcHBlbmRDaGlsZCh0ci51aS5iLmNyZWF0ZVNwYW4oKSk7UG9seW1lci5kb20obGFiZWxFbCkudGV4dENvbnRlbnQ9bGF5ZXJJbmZvLm5hbWUrJyAnK2lkO2NvbnN0IG5vdGVzRWw9UG9seW1lci5kb20oaXRlbSkuYXBwZW5kQ2hpbGQodHIudWkuYi5jcmVhdGVTcGFuKCkpO2lmKGxheWVySW5mby5pc01hc2tMYXllcil7UG9seW1lci5kb20obm90ZXNFbCkudGV4dENvbnRlbnQrPScobWFzayknO30KLWlmKGxheWVySW5mby5pc1JlcGxpY2FMYXllcil7UG9seW1lci5kb20obm90ZXNFbCkudGV4dENvbnRlbnQrPScocmVwbGljYSknO30KLWlmKChsYXllci5ncHVNZW1vcnlVc2FnZUluQnl0ZXMhPT11bmRlZmluZWQpJiYobGF5ZXIuZ3B1TWVtb3J5VXNhZ2VJbkJ5dGVzPjApKXtjb25zdCBncHVVc2FnZVN0cj10ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzLmZvcm1hdChsYXllci5ncHVNZW1vcnlVc2FnZUluQnl0ZXMpO1BvbHltZXIuZG9tKG5vdGVzRWwpLnRleHRDb250ZW50Kz0nICgnK2dwdVVzYWdlU3RyKycgTWlCKSc7fQotaXRlbS5sYXllcj1sYXllcjtQb2x5bWVyLmRvbSh0aGlzLml0ZW1MaXN0XykuYXBwZW5kQ2hpbGQoaXRlbSk7aWYobGF5ZXIubGF5ZXJJZD09PXNlbGVjdGVkTGF5ZXJJZCl7bGF5ZXIuc2VsZWN0aW9uU3RhdGU9dHIubW9kZWwuU2VsZWN0aW9uU3RhdGUuU0VMRUNURUQ7aXRlbS5zZWxlY3RlZD10cnVlO319LHRoaXMpO31maW5hbGx5e3RoaXMuY2hhbmdpbmdJdGVtU2VsZWN0aW9uXz1mYWxzZTt9fSxjcmVhdGVFbGVtZW50V2l0aERlcHRoXyhkZXB0aCl7Y29uc3QgaXRlbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtjb25zdCBpbmRlbnRFbD1Qb2x5bWVyLmRvbShpdGVtKS5hcHBlbmRDaGlsZCh0ci51aS5iLmNyZWF0ZVNwYW4oKSk7aW5kZW50RWwuc3R5bGUud2hpdGVTcGFjZT0ncHJlJztmb3IobGV0IGk9MDtpPGRlcHRoO2krKyl7UG9seW1lci5kb20oaW5kZW50RWwpLnRleHRDb250ZW50PVBvbHltZXIuZG9tKGluZGVudEVsKS50ZXh0Q29udGVudCsnICc7fQotcmV0dXJuIGl0ZW07fSxvbkl0ZW1TZWxlY3Rpb25DaGFuZ2VkXyhlKXtpZih0aGlzLmNoYW5naW5nSXRlbVNlbGVjdGlvbl8pcmV0dXJuO2lmKHRoaXMucmVuZGVyUGFzc1F1YWRzXyl7dGhpcy5vblJlbmRlclBhc3NTZWxlY3RlZF8oZSk7fWVsc2V7dGhpcy5vbkxheWVyU2VsZWN0ZWRfKGUpO30KLXRyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdzZWxlY3Rpb24tY2hhbmdlJyxmYWxzZSk7fSxvblJlbmRlclBhc3NTZWxlY3RlZF8oZSl7bGV0IHNlbGVjdGVkUmVuZGVyUGFzcztsZXQgc2VsZWN0ZWRSZW5kZXJQYXNzSWQ7aWYodGhpcy5pdGVtTGlzdF8uc2VsZWN0ZWRFbGVtZW50KXtzZWxlY3RlZFJlbmRlclBhc3M9dGhpcy5pdGVtTGlzdF8uc2VsZWN0ZWRFbGVtZW50LnJlbmRlclBhc3M7c2VsZWN0ZWRSZW5kZXJQYXNzSWQ9dGhpcy5pdGVtTGlzdF8uc2VsZWN0ZWRFbGVtZW50LnJlbmRlclBhc3NJZDt9Ci1pZihzZWxlY3RlZFJlbmRlclBhc3Mpe3RoaXMuc2VsZWN0aW9uXz1uZXcgdHIudWkuZS5jaHJvbWUuY2MuUmVuZGVyUGFzc1NlbGVjdGlvbihzZWxlY3RlZFJlbmRlclBhc3Msc2VsZWN0ZWRSZW5kZXJQYXNzSWQpO31lbHNle3RoaXMuc2VsZWN0aW9uXz11bmRlZmluZWQ7fX0sb25MYXllclNlbGVjdGVkXyhlKXtsZXQgc2VsZWN0ZWRMYXllcjtpZih0aGlzLml0ZW1MaXN0Xy5zZWxlY3RlZEVsZW1lbnQpe3NlbGVjdGVkTGF5ZXI9dGhpcy5pdGVtTGlzdF8uc2VsZWN0ZWRFbGVtZW50LmxheWVyO30KLWlmKHNlbGVjdGVkTGF5ZXIpe3RoaXMuc2VsZWN0aW9uXz1uZXcgdHIudWkuZS5jaHJvbWUuY2MuTGF5ZXJTZWxlY3Rpb24oc2VsZWN0ZWRMYXllcik7fWVsc2V7dGhpcy5zZWxlY3Rpb25fPXVuZGVmaW5lZDt9fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXtpZih0aGlzLnNlbGVjdGlvbl89PT1zZWxlY3Rpb24pcmV0dXJuO3RoaXMuc2VsZWN0aW9uXz1zZWxlY3Rpb247dGhpcy51cGRhdGVDb250ZW50c18oKTt9fTtyZXR1cm57TGF5ZXJQaWNrZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2MnLGZ1bmN0aW9uKCl7Y29uc3QgT2JqZWN0U25hcHNob3Q9dHIubW9kZWwuT2JqZWN0U25hcHNob3Q7ZnVuY3Rpb24gUmVuZGVyUGFzc1NuYXBzaG90KCl7T2JqZWN0U25hcHNob3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO30KLVJlbmRlclBhc3NTbmFwc2hvdC5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3RTbmFwc2hvdC5wcm90b3R5cGUscHJlSW5pdGlhbGl6ZSgpe3RyLmUuY2MucHJlSW5pdGlhbGl6ZU9iamVjdCh0aGlzKTt9LGluaXRpYWxpemUoKXt0ci5lLmNjLm1vdmVSZXF1aXJlZEZpZWxkc0Zyb21BcmdzVG9Ub3BsZXZlbCh0aGlzLFsncXVhZExpc3QnXSk7fX07T2JqZWN0U25hcHNob3Quc3ViVHlwZXMucmVnaXN0ZXIoUmVuZGVyUGFzc1NuYXBzaG90LHt0eXBlTmFtZTonY2M6OlJlbmRlclBhc3MnfSk7cmV0dXJue1JlbmRlclBhc3NTbmFwc2hvdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBkZWcycmFkPXRyLmIubWF0aC5kZWcycmFkO2NvbnN0IGNvbnN0YW50cz17REVGQVVMVF9TQ0FMRTowLjUsREVGQVVMVF9FWUVfRElTVEFOQ0U6MTAwMDAsTUlOSU1VTV9ESVNUQU5DRToxMDAwLE1BWElNVU1fRElTVEFOQ0U6MTAwMDAwLEZPVjoxNSxSRVNDQUxFX1RJTUVPVVRfTVM6MjAwLE1BWElNVU1fVElMVDo4MCxTRVRUSU5HU19OQU1FU1BBQ0U6J3RyLnVpX2NhbWVyYSd9O2NvbnN0IENhbWVyYT10ci51aS5iLmRlZmluZSgnY2FtZXJhJyk7Q2FtZXJhLnByb3RvdHlwZT17X19wcm90b19fOkhUTUxVbmtub3duRWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoZXZlbnRTb3VyY2Upe3RoaXMuZXZlbnRTb3VyY2VfPWV2ZW50U291cmNlO3RoaXMuZXZlbnRTb3VyY2VfLmFkZEV2ZW50TGlzdGVuZXIoJ2JlZ2lucGFuJyx0aGlzLm9uUGFuQmVnaW5fLmJpbmQodGhpcykpO3RoaXMuZXZlbnRTb3VyY2VfLmFkZEV2ZW50TGlzdGVuZXIoJ3VwZGF0ZXBhbicsdGhpcy5vblBhblVwZGF0ZV8uYmluZCh0aGlzKSk7dGhpcy5ldmVudFNvdXJjZV8uYWRkRXZlbnRMaXN0ZW5lcignZW5kcGFuJyx0aGlzLm9uUGFuRW5kXy5iaW5kKHRoaXMpKTt0aGlzLmV2ZW50U291cmNlXy5hZGRFdmVudExpc3RlbmVyKCdiZWdpbnpvb20nLHRoaXMub25ab29tQmVnaW5fLmJpbmQodGhpcykpO3RoaXMuZXZlbnRTb3VyY2VfLmFkZEV2ZW50TGlzdGVuZXIoJ3VwZGF0ZXpvb20nLHRoaXMub25ab29tVXBkYXRlXy5iaW5kKHRoaXMpKTt0aGlzLmV2ZW50U291cmNlXy5hZGRFdmVudExpc3RlbmVyKCdlbmR6b29tJyx0aGlzLm9uWm9vbUVuZF8uYmluZCh0aGlzKSk7dGhpcy5ldmVudFNvdXJjZV8uYWRkRXZlbnRMaXN0ZW5lcignYmVnaW5yb3RhdGUnLHRoaXMub25Sb3RhdGVCZWdpbl8uYmluZCh0aGlzKSk7dGhpcy5ldmVudFNvdXJjZV8uYWRkRXZlbnRMaXN0ZW5lcigndXBkYXRlcm90YXRlJyx0aGlzLm9uUm90YXRlVXBkYXRlXy5iaW5kKHRoaXMpKTt0aGlzLmV2ZW50U291cmNlXy5hZGRFdmVudExpc3RlbmVyKCdlbmRyb3RhdGUnLHRoaXMub25Sb3RhdGVFbmRfLmJpbmQodGhpcykpO3RoaXMuZXllXz1bMCwwLGNvbnN0YW50cy5ERUZBVUxUX0VZRV9ESVNUQU5DRV07dGhpcy5nYXplVGFyZ2V0Xz1bMCwwLDBdO3RoaXMucm90YXRpb25fPVswLDBdO3RoaXMucGl4ZWxSYXRpb189d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7fSxnZXQgbW9kZWxWaWV3TWF0cml4KCl7Y29uc3QgbXZNYXRyaXg9bWF0NC5jcmVhdGUoKTttYXQ0Lmxvb2tBdChtdk1hdHJpeCx0aGlzLmV5ZV8sdGhpcy5nYXplVGFyZ2V0XyxbMCwxLDBdKTtyZXR1cm4gbXZNYXRyaXg7fSxnZXQgcHJvamVjdGlvbk1hdHJpeCgpe2NvbnN0IHJlY3Q9dHIudWkuYi53aW5kb3dSZWN0Rm9yRWxlbWVudCh0aGlzLmNhbnZhc18pLnNjYWxlU2l6ZSh0aGlzLnBpeGVsUmF0aW9fKTtjb25zdCBhc3BlY3RSYXRpbz1yZWN0LndpZHRoL3JlY3QuaGVpZ2h0O2NvbnN0IG1hdHJpeD1tYXQ0LmNyZWF0ZSgpO21hdDQucGVyc3BlY3RpdmUobWF0cml4LGRlZzJyYWQoY29uc3RhbnRzLkZPViksYXNwZWN0UmF0aW8sMSwxMDAwMDApO3JldHVybiBtYXRyaXg7fSxzZXQgY2FudmFzKGMpe3RoaXMuY2FudmFzXz1jO30sc2V0IGRldmljZVJlY3QocmVjdCl7dGhpcy5kZXZpY2VSZWN0Xz1yZWN0O30sZ2V0IHN0YWNraW5nRGlzdGFuY2VEYW1wZW5pbmcoKXtjb25zdCBnYXplVmVjdG9yPVt0aGlzLmdhemVUYXJnZXRfWzBdLXRoaXMuZXllX1swXSx0aGlzLmdhemVUYXJnZXRfWzFdLXRoaXMuZXllX1sxXSx0aGlzLmdhemVUYXJnZXRfWzJdLXRoaXMuZXllX1syXV07dmVjMy5ub3JtYWxpemUoZ2F6ZVZlY3RvcixnYXplVmVjdG9yKTtyZXR1cm4gMStnYXplVmVjdG9yWzJdO30sbG9hZENhbWVyYUZyb21TZXR0aW5ncyhzZXR0aW5ncyl7dGhpcy5leWVfPXNldHRpbmdzLmdldCgnZXllJyx0aGlzLmV5ZV8sY29uc3RhbnRzLlNFVFRJTkdTX05BTUVTUEFDRSk7dGhpcy5nYXplVGFyZ2V0Xz1zZXR0aW5ncy5nZXQoJ2dhemVfdGFyZ2V0Jyx0aGlzLmdhemVUYXJnZXRfLGNvbnN0YW50cy5TRVRUSU5HU19OQU1FU1BBQ0UpO3RoaXMucm90YXRpb25fPXNldHRpbmdzLmdldCgncm90YXRpb24nLHRoaXMucm90YXRpb25fLGNvbnN0YW50cy5TRVRUSU5HU19OQU1FU1BBQ0UpO3RoaXMuZGlzcGF0Y2hSZW5kZXJFdmVudF8oKTt9LHNhdmVDYW1lcmFUb1NldHRpbmdzKHNldHRpbmdzKXtzZXR0aW5ncy5zZXQoJ2V5ZScsdGhpcy5leWVfLGNvbnN0YW50cy5TRVRUSU5HU19OQU1FU1BBQ0UpO3NldHRpbmdzLnNldCgnZ2F6ZV90YXJnZXQnLHRoaXMuZ2F6ZVRhcmdldF8sY29uc3RhbnRzLlNFVFRJTkdTX05BTUVTUEFDRSk7c2V0dGluZ3Muc2V0KCdyb3RhdGlvbicsdGhpcy5yb3RhdGlvbl8sY29uc3RhbnRzLlNFVFRJTkdTX05BTUVTUEFDRSk7fSxyZXNldENhbWVyYSgpe3RoaXMuZXllXz1bMCwwLGNvbnN0YW50cy5ERUZBVUxUX0VZRV9ESVNUQU5DRV07dGhpcy5nYXplVGFyZ2V0Xz1bMCwwLDBdO3RoaXMucm90YXRpb25fPVswLDBdO2NvbnN0IHNldHRpbmdzPXRyLmIuU2Vzc2lvblNldHRpbmdzKCk7Y29uc3Qga2V5cz1zZXR0aW5ncy5rZXlzKGNvbnN0YW50cy5TRVRUSU5HU19OQU1FU1BBQ0UpO2lmKGtleXMubGVuZ3RoIT09MCl7dGhpcy5sb2FkQ2FtZXJhRnJvbVNldHRpbmdzKHNldHRpbmdzKTtyZXR1cm47fQotaWYodGhpcy5kZXZpY2VSZWN0Xyl7Y29uc3QgcmVjdD10ci51aS5iLndpbmRvd1JlY3RGb3JFbGVtZW50KHRoaXMuY2FudmFzXykuc2NhbGVTaXplKHRoaXMucGl4ZWxSYXRpb18pO3RoaXMuZXllX1swXT10aGlzLmRldmljZVJlY3RfLndpZHRoLzI7dGhpcy5leWVfWzFdPXRoaXMuZGV2aWNlUmVjdF8uaGVpZ2h0LzI7dGhpcy5nYXplVGFyZ2V0X1swXT10aGlzLmRldmljZVJlY3RfLndpZHRoLzI7dGhpcy5nYXplVGFyZ2V0X1sxXT10aGlzLmRldmljZVJlY3RfLmhlaWdodC8yO30KLXRoaXMuc2F2ZUNhbWVyYVRvU2V0dGluZ3Moc2V0dGluZ3MpO3RoaXMuZGlzcGF0Y2hSZW5kZXJFdmVudF8oKTt9LHVwZGF0ZVBhbkJ5RGVsdGEoZGVsdGEpe2NvbnN0IHJlY3Q9dHIudWkuYi53aW5kb3dSZWN0Rm9yRWxlbWVudCh0aGlzLmNhbnZhc18pLnNjYWxlU2l6ZSh0aGlzLnBpeGVsUmF0aW9fKTtjb25zdCBleWVWZWN0b3I9W3RoaXMuZXllX1swXS10aGlzLmdhemVUYXJnZXRfWzBdLHRoaXMuZXllX1sxXS10aGlzLmdhemVUYXJnZXRfWzFdLHRoaXMuZXllX1syXS10aGlzLmdhemVUYXJnZXRfWzJdXTtjb25zdCBsZW5ndGg9dmVjMy5sZW5ndGgoZXllVmVjdG9yKTt2ZWMzLm5vcm1hbGl6ZShleWVWZWN0b3IsZXllVmVjdG9yKTtjb25zdCBoYWxmRm92PWNvbnN0YW50cy5GT1YvMjtjb25zdCBtdWx0aXBsaWVyPTIuMCpsZW5ndGgqTWF0aC50YW4oZGVnMnJhZChoYWxmRm92KSkvcmVjdC5oZWlnaHQ7Y29uc3QgdXA9WzAsMSwwXTtjb25zdCByb3RNYXRyaXg9bWF0NC5jcmVhdGUoKTttYXQ0LnJvdGF0ZShyb3RNYXRyaXgscm90TWF0cml4LGRlZzJyYWQodGhpcy5yb3RhdGlvbl9bMV0pLFswLDEsMF0pO21hdDQucm90YXRlKHJvdE1hdHJpeCxyb3RNYXRyaXgsZGVnMnJhZCh0aGlzLnJvdGF0aW9uX1swXSksWzEsMCwwXSk7dmVjMy50cmFuc2Zvcm1NYXQ0KHVwLHVwLHJvdE1hdHJpeCk7Y29uc3QgcmlnaHQ9WzAsMCwwXTt2ZWMzLmNyb3NzKHJpZ2h0LGV5ZVZlY3Rvcix1cCk7dmVjMy5ub3JtYWxpemUocmlnaHQscmlnaHQpO2ZvcihsZXQgaT0wO2k8MzsrK2kpe3RoaXMuZ2F6ZVRhcmdldF9baV0rPWRlbHRhWzBdKm11bHRpcGxpZXIqcmlnaHRbaV0tZGVsdGFbMV0qbXVsdGlwbGllcip1cFtpXTt0aGlzLmV5ZV9baV09dGhpcy5nYXplVGFyZ2V0X1tpXStsZW5ndGgqZXllVmVjdG9yW2ldO30KLWlmKE1hdGguYWJzKHRoaXMuZ2F6ZVRhcmdldF9bMl0pPjFlLTYpe2NvbnN0IGdhemVWZWN0b3I9Wy1leWVWZWN0b3JbMF0sLWV5ZVZlY3RvclsxXSwtZXllVmVjdG9yWzJdXTtjb25zdCBuZXdMZW5ndGg9dHIuYi5tYXRoLmNsYW1wKC10aGlzLmV5ZV9bMl0vZ2F6ZVZlY3RvclsyXSxjb25zdGFudHMuTUlOSU1VTV9ESVNUQU5DRSxjb25zdGFudHMuTUFYSU1VTV9ESVNUQU5DRSk7Zm9yKGxldCBpPTA7aTwzOysraSl7dGhpcy5nYXplVGFyZ2V0X1tpXT10aGlzLmV5ZV9baV0rbmV3TGVuZ3RoKmdhemVWZWN0b3JbaV07fX0KLXRoaXMuc2F2ZUNhbWVyYVRvU2V0dGluZ3ModHIuYi5TZXNzaW9uU2V0dGluZ3MoKSk7dGhpcy5kaXNwYXRjaFJlbmRlckV2ZW50XygpO30sdXBkYXRlWm9vbUJ5RGVsdGEoZGVsdGEpe2xldCBkZWx0YVk9ZGVsdGFbMV07ZGVsdGFZPXRyLmIubWF0aC5jbGFtcChkZWx0YVksLTUwLDUwKTtsZXQgc2NhbGU9MS4wLWRlbHRhWS8xMDAuMDtjb25zdCBleWVWZWN0b3I9WzAsMCwwXTt2ZWMzLnN1YnRyYWN0KGV5ZVZlY3Rvcix0aGlzLmV5ZV8sdGhpcy5nYXplVGFyZ2V0Xyk7Y29uc3QgbGVuZ3RoPXZlYzMubGVuZ3RoKGV5ZVZlY3Rvcik7aWYobGVuZ3RoKnNjYWxlPGNvbnN0YW50cy5NSU5JTVVNX0RJU1RBTkNFKXtzY2FsZT1jb25zdGFudHMuTUlOSU1VTV9ESVNUQU5DRS9sZW5ndGg7fWVsc2UgaWYobGVuZ3RoKnNjYWxlPmNvbnN0YW50cy5NQVhJTVVNX0RJU1RBTkNFKXtzY2FsZT1jb25zdGFudHMuTUFYSU1VTV9ESVNUQU5DRS9sZW5ndGg7fQotdmVjMy5zY2FsZShleWVWZWN0b3IsZXllVmVjdG9yLHNjYWxlKTt2ZWMzLmFkZCh0aGlzLmV5ZV8sdGhpcy5nYXplVGFyZ2V0XyxleWVWZWN0b3IpO3RoaXMuc2F2ZUNhbWVyYVRvU2V0dGluZ3ModHIuYi5TZXNzaW9uU2V0dGluZ3MoKSk7dGhpcy5kaXNwYXRjaFJlbmRlckV2ZW50XygpO30sdXBkYXRlUm90YXRlQnlEZWx0YShkZWx0YSl7ZGVsdGFbMF0qPTAuNTtkZWx0YVsxXSo9MC41O2lmKE1hdGguYWJzKHRoaXMucm90YXRpb25fWzBdK2RlbHRhWzFdKT5jb25zdGFudHMuTUFYSU1VTV9USUxUKXtyZXR1cm47fQotaWYoTWF0aC5hYnModGhpcy5yb3RhdGlvbl9bMV0tZGVsdGFbMF0pPmNvbnN0YW50cy5NQVhJTVVNX1RJTFQpe3JldHVybjt9Ci1jb25zdCBleWVWZWN0b3I9WzAsMCwwLDBdO3ZlYzMuc3VidHJhY3QoZXllVmVjdG9yLHRoaXMuZXllXyx0aGlzLmdhemVUYXJnZXRfKTtjb25zdCByb3RNYXRyaXg9bWF0NC5jcmVhdGUoKTttYXQ0LnJvdGF0ZShyb3RNYXRyaXgscm90TWF0cml4LC1kZWcycmFkKHRoaXMucm90YXRpb25fWzBdKSxbMSwwLDBdKTttYXQ0LnJvdGF0ZShyb3RNYXRyaXgscm90TWF0cml4LC1kZWcycmFkKHRoaXMucm90YXRpb25fWzFdKSxbMCwxLDBdKTt2ZWM0LnRyYW5zZm9ybU1hdDQoZXllVmVjdG9yLGV5ZVZlY3Rvcixyb3RNYXRyaXgpO3RoaXMucm90YXRpb25fWzBdKz1kZWx0YVsxXTt0aGlzLnJvdGF0aW9uX1sxXS09ZGVsdGFbMF07bWF0NC5pZGVudGl0eShyb3RNYXRyaXgpO21hdDQucm90YXRlKHJvdE1hdHJpeCxyb3RNYXRyaXgsZGVnMnJhZCh0aGlzLnJvdGF0aW9uX1sxXSksWzAsMSwwXSk7bWF0NC5yb3RhdGUocm90TWF0cml4LHJvdE1hdHJpeCxkZWcycmFkKHRoaXMucm90YXRpb25fWzBdKSxbMSwwLDBdKTt2ZWM0LnRyYW5zZm9ybU1hdDQoZXllVmVjdG9yLGV5ZVZlY3Rvcixyb3RNYXRyaXgpO3ZlYzMuYWRkKHRoaXMuZXllXyx0aGlzLmdhemVUYXJnZXRfLGV5ZVZlY3Rvcik7dGhpcy5zYXZlQ2FtZXJhVG9TZXR0aW5ncyh0ci5iLlNlc3Npb25TZXR0aW5ncygpKTt0aGlzLmRpc3BhdGNoUmVuZGVyRXZlbnRfKCk7fSxvblBhbkJlZ2luXyhlKXt0aGlzLnBhbm5pbmdfPXRydWU7dGhpcy5sYXN0TW91c2VQb3NpdGlvbl89dGhpcy5nZXRNb3VzZVBvc2l0aW9uXyhlKTt9LG9uUGFuVXBkYXRlXyhlKXtpZighdGhpcy5wYW5uaW5nXylyZXR1cm47Y29uc3QgZGVsdGE9dGhpcy5nZXRNb3VzZURlbHRhXyhlLHRoaXMubGFzdE1vdXNlUG9zaXRpb25fKTt0aGlzLmxhc3RNb3VzZVBvc2l0aW9uXz10aGlzLmdldE1vdXNlUG9zaXRpb25fKGUpO3RoaXMudXBkYXRlUGFuQnlEZWx0YShkZWx0YSk7fSxvblBhbkVuZF8oZSl7dGhpcy5wYW5uaW5nXz1mYWxzZTt9LG9uWm9vbUJlZ2luXyhlKXt0aGlzLnpvb21pbmdfPXRydWU7Y29uc3QgcD10aGlzLmdldE1vdXNlUG9zaXRpb25fKGUpO3RoaXMubGFzdE1vdXNlUG9zaXRpb25fPXA7dGhpcy56b29tUG9pbnRfPXA7fSxvblpvb21VcGRhdGVfKGUpe2lmKCF0aGlzLnpvb21pbmdfKXJldHVybjtjb25zdCBkZWx0YT10aGlzLmdldE1vdXNlRGVsdGFfKGUsdGhpcy5sYXN0TW91c2VQb3NpdGlvbl8pO3RoaXMubGFzdE1vdXNlUG9zaXRpb25fPXRoaXMuZ2V0TW91c2VQb3NpdGlvbl8oZSk7dGhpcy51cGRhdGVab29tQnlEZWx0YShkZWx0YSk7fSxvblpvb21FbmRfKGUpe3RoaXMuem9vbWluZ189ZmFsc2U7dGhpcy56b29tUG9pbnRfPXVuZGVmaW5lZDt9LG9uUm90YXRlQmVnaW5fKGUpe3RoaXMucm90YXRpbmdfPXRydWU7dGhpcy5sYXN0TW91c2VQb3NpdGlvbl89dGhpcy5nZXRNb3VzZVBvc2l0aW9uXyhlKTt9LG9uUm90YXRlVXBkYXRlXyhlKXtpZighdGhpcy5yb3RhdGluZ18pcmV0dXJuO2NvbnN0IGRlbHRhPXRoaXMuZ2V0TW91c2VEZWx0YV8oZSx0aGlzLmxhc3RNb3VzZVBvc2l0aW9uXyk7dGhpcy5sYXN0TW91c2VQb3NpdGlvbl89dGhpcy5nZXRNb3VzZVBvc2l0aW9uXyhlKTt0aGlzLnVwZGF0ZVJvdGF0ZUJ5RGVsdGEoZGVsdGEpO30sb25Sb3RhdGVFbmRfKGUpe3RoaXMucm90YXRpbmdfPWZhbHNlO30sZ2V0TW91c2VQb3NpdGlvbl8oZSl7Y29uc3QgcmVjdD10ci51aS5iLndpbmRvd1JlY3RGb3JFbGVtZW50KHRoaXMuY2FudmFzXyk7cmV0dXJuWyhlLmNsaWVudFgtcmVjdC54KSp0aGlzLnBpeGVsUmF0aW9fLChlLmNsaWVudFktcmVjdC55KSp0aGlzLnBpeGVsUmF0aW9fXTt9LGdldE1vdXNlRGVsdGFfKGUscCl7Y29uc3QgbmV3UD10aGlzLmdldE1vdXNlUG9zaXRpb25fKGUpO3JldHVybltuZXdQWzBdLXBbMF0sbmV3UFsxXS1wWzFdXTt9LGRpc3BhdGNoUmVuZGVyRXZlbnRfKCl7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ3JlbmRlcnJlcXVpcmVkJyxmYWxzZSxmYWxzZSk7fX07cmV0dXJue0NhbWVyYSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBUSElTX0RPQz1kb2N1bWVudC5jdXJyZW50U2NyaXB0Lm93bmVyRG9jdW1lbnQ7Y29uc3QgY29uc3RhbnRzPXt9O2NvbnN0YW50cy5JTUFHRV9MT0FEX1JFVFJZX1RJTUVfTVM9NTAwO2NvbnN0YW50cy5TVUJESVZJU0lPTl9NSU5JTVVNPTE7Y29uc3RhbnRzLlNVQkRJVklTSU9OX1JFQ1VSU0lPTl9ERVBUSD0zO2NvbnN0YW50cy5TVUJESVZJU0lPTl9ERVBUSF9USFJFU0hPTEQ9MTAwO2NvbnN0YW50cy5GQVJfUExBTkVfRElTVEFOQ0U9MTAwMDA7ZnVuY3Rpb24gZHJhd1RleHR1cmVkVHJpYW5nbGUoY3R4LGltZyxwMCxwMSxwMix0MCx0MSx0Mil7Y29uc3QgdG1wUDA9W3AwWzBdLHAwWzFdXTtjb25zdCB0bXBQMT1bcDFbMF0scDFbMV1dO2NvbnN0IHRtcFAyPVtwMlswXSxwMlsxXV07Y29uc3QgdG1wVDA9W3QwWzBdLHQwWzFdXTtjb25zdCB0bXBUMT1bdDFbMF0sdDFbMV1dO2NvbnN0IHRtcFQyPVt0MlswXSx0MlsxXV07Y3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8odG1wUDBbMF0sdG1wUDBbMV0pO2N0eC5saW5lVG8odG1wUDFbMF0sdG1wUDFbMV0pO2N0eC5saW5lVG8odG1wUDJbMF0sdG1wUDJbMV0pO2N0eC5jbG9zZVBhdGgoKTt0bXBQMVswXS09dG1wUDBbMF07dG1wUDFbMV0tPXRtcFAwWzFdO3RtcFAyWzBdLT10bXBQMFswXTt0bXBQMlsxXS09dG1wUDBbMV07dG1wVDFbMF0tPXRtcFQwWzBdO3RtcFQxWzFdLT10bXBUMFsxXTt0bXBUMlswXS09dG1wVDBbMF07dG1wVDJbMV0tPXRtcFQwWzFdO2NvbnN0IGRldD0xLyh0bXBUMVswXSp0bXBUMlsxXS10bXBUMlswXSp0bXBUMVsxXSk7Y29uc3QgYT0odG1wVDJbMV0qdG1wUDFbMF0tdG1wVDFbMV0qdG1wUDJbMF0pKmRldDtjb25zdCBiPSh0bXBUMlsxXSp0bXBQMVsxXS10bXBUMVsxXSp0bXBQMlsxXSkqZGV0O2NvbnN0IGM9KHRtcFQxWzBdKnRtcFAyWzBdLXRtcFQyWzBdKnRtcFAxWzBdKSpkZXQ7Y29uc3QgZD0odG1wVDFbMF0qdG1wUDJbMV0tdG1wVDJbMF0qdG1wUDFbMV0pKmRldDtjb25zdCBlPXRtcFAwWzBdLWEqdG1wVDBbMF0tYyp0bXBUMFsxXTtjb25zdCBmPXRtcFAwWzFdLWIqdG1wVDBbMF0tZCp0bXBUMFsxXTtjdHguc2F2ZSgpO2N0eC50cmFuc2Zvcm0oYSxiLGMsZCxlLGYpO2N0eC5jbGlwKCk7Y3R4LmRyYXdJbWFnZShpbWcsMCwwKTtjdHgucmVzdG9yZSgpO30KLWZ1bmN0aW9uIGRyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwLHAxLHAyLHQwLHQxLHQyLG9wdF9yZWN1cnNpb25EZXB0aCl7Y29uc3QgZGVwdGg9b3B0X3JlY3Vyc2lvbkRlcHRofHwwO2xldCBzdWJkaXZpc2lvbkluZGV4PTA7aWYoZGVwdGg8Y29uc3RhbnRzLlNVQkRJVklTSU9OX01JTklNVU0pe3N1YmRpdmlzaW9uSW5kZXg9Nzt9ZWxzZSBpZihkZXB0aDxjb25zdGFudHMuU1VCRElWSVNJT05fUkVDVVJTSU9OX0RFUFRIKXtpZihNYXRoLmFicyhwMFsyXS1wMVsyXSk+Y29uc3RhbnRzLlNVQkRJVklTSU9OX0RFUFRIX1RIUkVTSE9MRCl7c3ViZGl2aXNpb25JbmRleCs9MTt9Ci1pZihNYXRoLmFicyhwMFsyXS1wMlsyXSk+Y29uc3RhbnRzLlNVQkRJVklTSU9OX0RFUFRIX1RIUkVTSE9MRCl7c3ViZGl2aXNpb25JbmRleCs9Mjt9Ci1pZihNYXRoLmFicyhwMVsyXS1wMlsyXSk+Y29uc3RhbnRzLlNVQkRJVklTSU9OX0RFUFRIX1RIUkVTSE9MRCl7c3ViZGl2aXNpb25JbmRleCs9NDt9fQotY29uc3QgcDAxPXZlYzQuY3JlYXRlKCk7Y29uc3QgcDAyPXZlYzQuY3JlYXRlKCk7Y29uc3QgcDEyPXZlYzQuY3JlYXRlKCk7Y29uc3QgdDAxPXZlYzIuY3JlYXRlKCk7Y29uc3QgdDAyPXZlYzIuY3JlYXRlKCk7Y29uc3QgdDEyPXZlYzIuY3JlYXRlKCk7Zm9yKGxldCBpPTA7aTwyOysraSl7cDBbaV0qPXAwWzJdO3AxW2ldKj1wMVsyXTtwMltpXSo9cDJbMl07fQotZm9yKGxldCBpPTA7aTw0OysraSl7cDAxW2ldPShwMFtpXStwMVtpXSkvMjtwMDJbaV09KHAwW2ldK3AyW2ldKS8yO3AxMltpXT0ocDFbaV0rcDJbaV0pLzI7fQotZm9yKGxldCBpPTA7aTwyOysraSl7cDBbaV0vPXAwWzJdO3AxW2ldLz1wMVsyXTtwMltpXS89cDJbMl07cDAxW2ldLz1wMDFbMl07cDAyW2ldLz1wMDJbMl07cDEyW2ldLz1wMTJbMl07fQotZm9yKGxldCBpPTA7aTwyOysraSl7dDAxW2ldPSh0MFtpXSt0MVtpXSkvMjt0MDJbaV09KHQwW2ldK3QyW2ldKS8yO3QxMltpXT0odDFbaV0rdDJbaV0pLzI7fQotc3dpdGNoKHN1YmRpdmlzaW9uSW5kZXgpe2Nhc2UgMTpkcmF3VHJpYW5nbGVTdWIoY3R4LGltZyxwMCxwMDEscDIsdDAsdDAxLHQyLGRlcHRoKzEpO2RyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwMSxwMSxwMix0MDEsdDEsdDIsZGVwdGgrMSk7YnJlYWs7Y2FzZSAyOmRyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwLHAxLHAwMix0MCx0MSx0MDIsZGVwdGgrMSk7ZHJhd1RyaWFuZ2xlU3ViKGN0eCxpbWcscDEscDAyLHAyLHQxLHQwMix0MixkZXB0aCsxKTticmVhaztjYXNlIDM6ZHJhd1RyaWFuZ2xlU3ViKGN0eCxpbWcscDAscDAxLHAwMix0MCx0MDEsdDAyLGRlcHRoKzEpO2RyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwMixwMDEscDIsdDAyLHQwMSx0MixkZXB0aCsxKTtkcmF3VHJpYW5nbGVTdWIoY3R4LGltZyxwMDEscDEscDIsdDAxLHQxLHQyLGRlcHRoKzEpO2JyZWFrO2Nhc2UgNDpkcmF3VHJpYW5nbGVTdWIoY3R4LGltZyxwMCxwMTIscDIsdDAsdDEyLHQyLGRlcHRoKzEpO2RyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwLHAxLHAxMix0MCx0MSx0MTIsZGVwdGgrMSk7YnJlYWs7Y2FzZSA1OmRyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwLHAwMSxwMix0MCx0MDEsdDIsZGVwdGgrMSk7ZHJhd1RyaWFuZ2xlU3ViKGN0eCxpbWcscDIscDAxLHAxMix0Mix0MDEsdDEyLGRlcHRoKzEpO2RyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwMSxwMSxwMTIsdDAxLHQxLHQxMixkZXB0aCsxKTticmVhaztjYXNlIDY6ZHJhd1RyaWFuZ2xlU3ViKGN0eCxpbWcscDAscDEyLHAwMix0MCx0MTIsdDAyLGRlcHRoKzEpO2RyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwLHAxLHAxMix0MCx0MSx0MTIsZGVwdGgrMSk7ZHJhd1RyaWFuZ2xlU3ViKGN0eCxpbWcscDAyLHAxMixwMix0MDIsdDEyLHQyLGRlcHRoKzEpO2JyZWFrO2Nhc2UgNzpkcmF3VHJpYW5nbGVTdWIoY3R4LGltZyxwMCxwMDEscDAyLHQwLHQwMSx0MDIsZGVwdGgrMSk7ZHJhd1RyaWFuZ2xlU3ViKGN0eCxpbWcscDAxLHAxMixwMDIsdDAxLHQxMix0MDIsZGVwdGgrMSk7ZHJhd1RyaWFuZ2xlU3ViKGN0eCxpbWcscDAxLHAxLHAxMix0MDEsdDEsdDEyLGRlcHRoKzEpO2RyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwMixwMTIscDIsdDAyLHQxMix0MixkZXB0aCsxKTticmVhaztkZWZhdWx0OmRyYXdUZXh0dXJlZFRyaWFuZ2xlKGN0eCxpbWcscDAscDEscDIsdDAsdDEsdDIpO2JyZWFrO319Ci1jb25zdCB0bXBWZWM0PXZlYzQuY3JlYXRlKCk7ZnVuY3Rpb24gdHJhbnNmb3JtKHRyYW5zZm9ybWVkLHBvaW50LG1hdHJpeCx2aWV3cG9ydCl7dmVjNC5zZXQodG1wVmVjNCxwb2ludFswXSxwb2ludFsxXSwwLDEpO3ZlYzQudHJhbnNmb3JtTWF0NCh0bXBWZWM0LHRtcFZlYzQsbWF0cml4KTtsZXQgdz10bXBWZWM0WzNdO2lmKHc8MWUtNil3PTFlLTY7dHJhbnNmb3JtZWRbMF09KCh0bXBWZWM0WzBdL3cpKzEpKnZpZXdwb3J0LndpZHRoLzI7dHJhbnNmb3JtZWRbMV09KCh0bXBWZWM0WzFdL3cpKzEpKnZpZXdwb3J0LmhlaWdodC8yO3RyYW5zZm9ybWVkWzJdPXc7fQotZnVuY3Rpb24gZHJhd1Byb2plY3RlZFF1YWRCYWNrZ3JvdW5kVG9Db250ZXh0KHF1YWQscDEscDIscDMscDQsY3R4LHF1YWRDYW52YXMpe2lmKHF1YWQuaW1hZ2VEYXRhKXtxdWFkQ2FudmFzLndpZHRoPXF1YWQuaW1hZ2VEYXRhLndpZHRoO3F1YWRDYW52YXMuaGVpZ2h0PXF1YWQuaW1hZ2VEYXRhLmhlaWdodDtxdWFkQ2FudmFzLmdldENvbnRleHQoJzJkJykucHV0SW1hZ2VEYXRhKHF1YWQuaW1hZ2VEYXRhLDAsMCk7Y29uc3QgcXVhZEJCb3g9bmV3IHRyLmIubWF0aC5CQm94MigpO3F1YWRCQm94LmFkZFF1YWQocXVhZCk7Y29uc3QgaXc9cXVhZENhbnZhcy53aWR0aDtjb25zdCBpaD1xdWFkQ2FudmFzLmhlaWdodDtkcmF3VHJpYW5nbGVTdWIoY3R4LHF1YWRDYW52YXMscDEscDIscDQsWzAsMF0sW2l3LDBdLFswLGloXSk7ZHJhd1RyaWFuZ2xlU3ViKGN0eCxxdWFkQ2FudmFzLHAyLHAzLHA0LFtpdywwXSxbaXcsaWhdLFswLGloXSk7fQotaWYocXVhZC5iYWNrZ3JvdW5kQ29sb3Ipe2N0eC5maWxsU3R5bGU9cXVhZC5iYWNrZ3JvdW5kQ29sb3I7Y3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8ocDFbMF0scDFbMV0pO2N0eC5saW5lVG8ocDJbMF0scDJbMV0pO2N0eC5saW5lVG8ocDNbMF0scDNbMV0pO2N0eC5saW5lVG8ocDRbMF0scDRbMV0pO2N0eC5jbG9zZVBhdGgoKTtjdHguZmlsbCgpO319Ci1mdW5jdGlvbiBkcmF3UHJvamVjdGVkUXVhZE91dGxpbmVUb0NvbnRleHQocXVhZCxwMSxwMixwMyxwNCxjdHgscXVhZENhbnZhcyl7Y3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8ocDFbMF0scDFbMV0pO2N0eC5saW5lVG8ocDJbMF0scDJbMV0pO2N0eC5saW5lVG8ocDNbMF0scDNbMV0pO2N0eC5saW5lVG8ocDRbMF0scDRbMV0pO2N0eC5jbG9zZVBhdGgoKTtjdHguc2F2ZSgpO2lmKHF1YWQuYm9yZGVyQ29sb3Ipe2N0eC5zdHJva2VTdHlsZT1xdWFkLmJvcmRlckNvbG9yO31lbHNle2N0eC5zdHJva2VTdHlsZT0ncmdiKDEyOCwxMjgsMTI4KSc7fQotaWYocXVhZC5zaGFkb3dPZmZzZXQpe2N0eC5zaGFkb3dDb2xvcj0ncmdiKDAsIDAsIDApJztjdHguc2hhZG93T2Zmc2V0WD1xdWFkLnNoYWRvd09mZnNldFswXTtjdHguc2hhZG93T2Zmc2V0WT1xdWFkLnNoYWRvd09mZnNldFsxXTtpZihxdWFkLnNoYWRvd0JsdXIpe2N0eC5zaGFkb3dCbHVyPXF1YWQuc2hhZG93Qmx1cjt9fQotaWYocXVhZC5ib3JkZXJXaWR0aCl7Y3R4LmxpbmVXaWR0aD1xdWFkLmJvcmRlcldpZHRoO31lbHNle2N0eC5saW5lV2lkdGg9MTt9Ci1jdHguc3Ryb2tlKCk7Y3R4LnJlc3RvcmUoKTt9Ci1mdW5jdGlvbiBkcmF3UHJvamVjdGVkUXVhZFNlbGVjdGlvbk91dGxpbmVUb0NvbnRleHQocXVhZCxwMSxwMixwMyxwNCxjdHgscXVhZENhbnZhcyl7aWYoIXF1YWQudXBwZXJCb3JkZXJDb2xvcilyZXR1cm47Y3R4LmxpbmVXaWR0aD04O2N0eC5zdHJva2VTdHlsZT1xdWFkLnVwcGVyQm9yZGVyQ29sb3I7Y3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8ocDFbMF0scDFbMV0pO2N0eC5saW5lVG8ocDJbMF0scDJbMV0pO2N0eC5saW5lVG8ocDNbMF0scDNbMV0pO2N0eC5saW5lVG8ocDRbMF0scDRbMV0pO2N0eC5jbG9zZVBhdGgoKTtjdHguc3Ryb2tlKCk7fQotZnVuY3Rpb24gZHJhd1Byb2plY3RlZFF1YWRUb0NvbnRleHQocGFzc051bWJlcixxdWFkLHAxLHAyLHAzLHA0LGN0eCxxdWFkQ2FudmFzKXtpZihwYXNzTnVtYmVyPT09MCl7ZHJhd1Byb2plY3RlZFF1YWRCYWNrZ3JvdW5kVG9Db250ZXh0KHF1YWQscDEscDIscDMscDQsY3R4LHF1YWRDYW52YXMpO31lbHNlIGlmKHBhc3NOdW1iZXI9PT0xKXtkcmF3UHJvamVjdGVkUXVhZE91dGxpbmVUb0NvbnRleHQocXVhZCxwMSxwMixwMyxwNCxjdHgscXVhZENhbnZhcyk7fWVsc2UgaWYocGFzc051bWJlcj09PTIpe2RyYXdQcm9qZWN0ZWRRdWFkU2VsZWN0aW9uT3V0bGluZVRvQ29udGV4dChxdWFkLHAxLHAyLHAzLHA0LGN0eCxxdWFkQ2FudmFzKTt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGFzcyBudW1iZXInKTt9fQotY29uc3QgdG1wUDE9dmVjMy5jcmVhdGUoKTtjb25zdCB0bXBQMj12ZWMzLmNyZWF0ZSgpO2NvbnN0IHRtcFAzPXZlYzMuY3JlYXRlKCk7Y29uc3QgdG1wUDQ9dmVjMy5jcmVhdGUoKTtmdW5jdGlvbiB0cmFuc2Zvcm1BbmRQcm9jZXNzUXVhZHMobWF0cml4LHZpZXdwb3J0LHF1YWRzLG51bVBhc3NlcyxoYW5kbGVRdWFkRnVuYyxvcHRfYXJnMSxvcHRfYXJnMil7Zm9yKGxldCBwYXNzTnVtYmVyPTA7cGFzc051bWJlcjxudW1QYXNzZXM7cGFzc051bWJlcisrKXtmb3IobGV0IGk9MDtpPHF1YWRzLmxlbmd0aDtpKyspe2NvbnN0IHF1YWQ9cXVhZHNbaV07dHJhbnNmb3JtKHRtcFAxLHF1YWQucDEsbWF0cml4LHZpZXdwb3J0KTt0cmFuc2Zvcm0odG1wUDIscXVhZC5wMixtYXRyaXgsdmlld3BvcnQpO3RyYW5zZm9ybSh0bXBQMyxxdWFkLnAzLG1hdHJpeCx2aWV3cG9ydCk7dHJhbnNmb3JtKHRtcFA0LHF1YWQucDQsbWF0cml4LHZpZXdwb3J0KTtoYW5kbGVRdWFkRnVuYyhwYXNzTnVtYmVyLHF1YWQsdG1wUDEsdG1wUDIsdG1wUDMsdG1wUDQsb3B0X2FyZzEsb3B0X2FyZzIpO319fQotY29uc3QgUXVhZFN0YWNrVmlldz10ci51aS5iLmRlZmluZSgncXVhZC1zdGFjay12aWV3Jyk7UXVhZFN0YWNrVmlldy5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoKXt0aGlzLmNsYXNzTmFtZT0ncXVhZC1zdGFjay12aWV3Jzt0aGlzLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLnN0eWxlLmZsb2F0PSdsZWZ0Jzt0aGlzLnN0eWxlLmhlaWdodD0nMTAwJSc7dGhpcy5zdHlsZS5vdmVyZmxvdz0naGlkZGVuJzt0aGlzLnN0eWxlLnBvc2l0aW9uPSdyZWxhdGl2ZSc7dGhpcy5zdHlsZS53aWR0aD0nMTAwJSc7Y29uc3Qgbm9kZT10ci51aS5iLmluc3RhbnRpYXRlVGVtcGxhdGUoJyNxdWFkLXN0YWNrLXZpZXctdGVtcGxhdGUnLFRISVNfRE9DKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChub2RlKTt0aGlzLnVwZGF0ZUhlYWRlclZpc2liaWxpdHlfKCk7Y29uc3QgaGVhZGVyPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJyNoZWFkZXInKTtoZWFkZXIuc3R5bGUucG9zaXRpb249J2Fic29sdXRlJztoZWFkZXIuc3R5bGUuZm9udFNpemU9JzcwJSc7aGVhZGVyLnN0eWxlLnRvcD0nMTBweCc7aGVhZGVyLnN0eWxlLmxlZnQ9JzEwcHgnO2hlYWRlci5zdHlsZS53aWR0aD0nODAwcHgnO3RoaXMuY2FudmFzXz1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcjY2FudmFzJyk7dGhpcy5jaHJvbWVJbWFnZXNfPXtsZWZ0OlBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJyNjaHJvbWUtbGVmdCcpLG1pZDpQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcjY2hyb21lLW1pZCcpLHJpZ2h0OlBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJyNjaHJvbWUtcmlnaHQnKX07Y29uc3Qgc3RhY2tpbmdEaXN0YW5jZVNsaWRlcj1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcjc3RhY2tpbmctZGlzdGFuY2Utc2xpZGVyJyk7c3RhY2tpbmdEaXN0YW5jZVNsaWRlci5zdHlsZS5wb3NpdGlvbj0nYWJzb2x1dGUnO3N0YWNraW5nRGlzdGFuY2VTbGlkZXIuc3R5bGUuZm9udFNpemU9JzcwJSc7c3RhY2tpbmdEaXN0YW5jZVNsaWRlci5zdHlsZS50b3A9JzEwcHgnO3N0YWNraW5nRGlzdGFuY2VTbGlkZXIuc3R5bGUucmlnaHQ9JzEwcHgnO3N0YWNraW5nRGlzdGFuY2VTbGlkZXIudmFsdWU9dHIuYi5TZXR0aW5ncy5nZXQoJ3F1YWRTdGFja1ZpZXcuc3RhY2tpbmdEaXN0YW5jZScsNDUpO3N0YWNraW5nRGlzdGFuY2VTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyx0aGlzLm9uU3RhY2tpbmdEaXN0YW5jZUNoYW5nZV8uYmluZCh0aGlzKSk7c3RhY2tpbmdEaXN0YW5jZVNsaWRlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsdGhpcy5vblN0YWNraW5nRGlzdGFuY2VDaGFuZ2VfLmJpbmQodGhpcykpO3RoaXMudHJhY2tNb3VzZV8oKTt0aGlzLmNhbWVyYV89bmV3IHRyLnVpLmIuQ2FtZXJhKHRoaXMubW91c2VNb2RlU2VsZWN0b3JfKTt0aGlzLmNhbWVyYV8uYWRkRXZlbnRMaXN0ZW5lcigncmVuZGVycmVxdWlyZWQnLHRoaXMub25SZW5kZXJSZXF1aXJlZF8uYmluZCh0aGlzKSk7dGhpcy5jYW1lcmFXYXNSZXNldF89ZmFsc2U7dGhpcy5jYW1lcmFfLmNhbnZhcz10aGlzLmNhbnZhc187dGhpcy52aWV3cG9ydFJlY3RfPXRyLmIubWF0aC5SZWN0LmZyb21YWVdIKDAsMCwwLDApO3RoaXMucGl4ZWxSYXRpb189d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7fSx1cGRhdGVIZWFkZXJWaXNpYmlsaXR5Xygpe2lmKHRoaXMuaGVhZGVyVGV4dCl7UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcignI2hlYWRlcicpLnN0eWxlLmRpc3BsYXk9Jyc7fWVsc2V7UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcignI2hlYWRlcicpLnN0eWxlLmRpc3BsYXk9J25vbmUnO319LGdldCBoZWFkZXJUZXh0KCl7cmV0dXJuIFBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJyNoZWFkZXInKS50ZXh0Q29udGVudDt9LHNldCBoZWFkZXJUZXh0KGhlYWRlclRleHQpe1BvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJyNoZWFkZXInKS50ZXh0Q29udGVudD1oZWFkZXJUZXh0O3RoaXMudXBkYXRlSGVhZGVyVmlzaWJpbGl0eV8oKTt9LG9uU3RhY2tpbmdEaXN0YW5jZUNoYW5nZV8oZSl7dHIuYi5TZXR0aW5ncy5zZXQoJ3F1YWRTdGFja1ZpZXcuc3RhY2tpbmdEaXN0YW5jZScsdGhpcy5zdGFja2luZ0Rpc3RhbmNlKTt0aGlzLnNjaGVkdWxlUmVuZGVyKCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9LGdldCBzdGFja2luZ0Rpc3RhbmNlKCl7cmV0dXJuIFBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJyNzdGFja2luZy1kaXN0YW5jZS1zbGlkZXInKS52YWx1ZTt9LGdldCBtb3VzZU1vZGVTZWxlY3Rvcigpe3JldHVybiB0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXzt9LGdldCBjYW1lcmEoKXtyZXR1cm4gdGhpcy5jYW1lcmFfO30sc2V0IHF1YWRzKHEpe3RoaXMucXVhZHNfPXE7dGhpcy5zY2hlZHVsZVJlbmRlcigpO30sc2V0IGRldmljZVJlY3QocmVjdCl7aWYoIXJlY3R8fHJlY3QuZXF1YWxUbyh0aGlzLmRldmljZVJlY3RfKSlyZXR1cm47dGhpcy5kZXZpY2VSZWN0Xz1yZWN0O3RoaXMuY2FtZXJhXy5kZXZpY2VSZWN0PXJlY3Q7dGhpcy5jaHJvbWVRdWFkXz11bmRlZmluZWQ7fSxyZXNpemUoKXtpZighdGhpcy5vZmZzZXRQYXJlbnQpcmV0dXJuIHRydWU7Y29uc3Qgd2lkdGg9cGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5vZmZzZXRQYXJlbnQpLndpZHRoKTtjb25zdCBoZWlnaHQ9cGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5vZmZzZXRQYXJlbnQpLmhlaWdodCk7Y29uc3QgcmVjdD10ci5iLm1hdGguUmVjdC5mcm9tWFlXSCgwLDAsd2lkdGgsaGVpZ2h0KTtpZihyZWN0LmVxdWFsVG8odGhpcy52aWV3cG9ydFJlY3RfKSlyZXR1cm4gZmFsc2U7dGhpcy52aWV3cG9ydFJlY3RfPXJlY3Q7dGhpcy5zdHlsZS53aWR0aD13aWR0aCsncHgnO3RoaXMuc3R5bGUuaGVpZ2h0PWhlaWdodCsncHgnO3RoaXMuY2FudmFzXy5zdHlsZS53aWR0aD13aWR0aCsncHgnO3RoaXMuY2FudmFzXy5zdHlsZS5oZWlnaHQ9aGVpZ2h0KydweCc7dGhpcy5jYW52YXNfLndpZHRoPXRoaXMucGl4ZWxSYXRpb18qd2lkdGg7dGhpcy5jYW52YXNfLmhlaWdodD10aGlzLnBpeGVsUmF0aW9fKmhlaWdodDtpZighdGhpcy5jYW1lcmFXYXNSZXNldF8pe3RoaXMuY2FtZXJhXy5yZXNldENhbWVyYSgpO3RoaXMuY2FtZXJhV2FzUmVzZXRfPXRydWU7fQotcmV0dXJuIHRydWU7fSxyZWFkeVRvRHJhdygpe2lmKCF0aGlzLmNocm9tZUltYWdlc18ubGVmdC5zcmMpe2xldCBsZWZ0Q29udGVudD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNocm9tZUltYWdlc18ubGVmdCkuYmFja2dyb3VuZEltYWdlO2xlZnRDb250ZW50PXRyLnVpLmIuZXh0cmFjdFVybFN0cmluZyhsZWZ0Q29udGVudCk7bGV0IG1pZENvbnRlbnQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5jaHJvbWVJbWFnZXNfLm1pZCkuYmFja2dyb3VuZEltYWdlO21pZENvbnRlbnQ9dHIudWkuYi5leHRyYWN0VXJsU3RyaW5nKG1pZENvbnRlbnQpO2xldCByaWdodENvbnRlbnQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5jaHJvbWVJbWFnZXNfLnJpZ2h0KS5iYWNrZ3JvdW5kSW1hZ2U7cmlnaHRDb250ZW50PXRyLnVpLmIuZXh0cmFjdFVybFN0cmluZyhyaWdodENvbnRlbnQpO3RoaXMuY2hyb21lSW1hZ2VzXy5sZWZ0LnNyYz1sZWZ0Q29udGVudDt0aGlzLmNocm9tZUltYWdlc18ubWlkLnNyYz1taWRDb250ZW50O3RoaXMuY2hyb21lSW1hZ2VzXy5yaWdodC5zcmM9cmlnaHRDb250ZW50O30KLXJldHVybih0aGlzLmNocm9tZUltYWdlc18ubGVmdC5oZWlnaHQ+MCkmJih0aGlzLmNocm9tZUltYWdlc18ubWlkLmhlaWdodD4wKSYmKHRoaXMuY2hyb21lSW1hZ2VzXy5yaWdodC5oZWlnaHQ+MCk7fSxnZXQgY2hyb21lUXVhZCgpe2lmKHRoaXMuY2hyb21lUXVhZF8pcmV0dXJuIHRoaXMuY2hyb21lUXVhZF87Y29uc3QgY2hyb21lQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO2NvbnN0IG9mZnNldFk9dGhpcy5jaHJvbWVJbWFnZXNfLmxlZnQuaGVpZ2h0O2Nocm9tZUNhbnZhcy53aWR0aD10aGlzLmRldmljZVJlY3RfLndpZHRoO2Nocm9tZUNhbnZhcy5oZWlnaHQ9dGhpcy5kZXZpY2VSZWN0Xy5oZWlnaHQrb2Zmc2V0WTtjb25zdCBsZWZ0V2lkdGg9dGhpcy5jaHJvbWVJbWFnZXNfLmxlZnQud2lkdGg7Y29uc3QgbWlkV2lkdGg9dGhpcy5jaHJvbWVJbWFnZXNfLm1pZC53aWR0aDtjb25zdCByaWdodFdpZHRoPXRoaXMuY2hyb21lSW1hZ2VzXy5yaWdodC53aWR0aDtjb25zdCBjaHJvbWVDdHg9Y2hyb21lQ2FudmFzLmdldENvbnRleHQoJzJkJyk7Y2hyb21lQ3R4LmRyYXdJbWFnZSh0aGlzLmNocm9tZUltYWdlc18ubGVmdCwwLDApO2Nocm9tZUN0eC5zYXZlKCk7Y2hyb21lQ3R4LnRyYW5zbGF0ZShsZWZ0V2lkdGgsMCk7Y29uc3Qgcz0odGhpcy5kZXZpY2VSZWN0Xy53aWR0aC1sZWZ0V2lkdGgtcmlnaHRXaWR0aCkvbWlkV2lkdGg7Y2hyb21lQ3R4LnNjYWxlKHMsMSk7Y2hyb21lQ3R4LmRyYXdJbWFnZSh0aGlzLmNocm9tZUltYWdlc18ubWlkLDAsMCk7Y2hyb21lQ3R4LnJlc3RvcmUoKTtjaHJvbWVDdHguZHJhd0ltYWdlKHRoaXMuY2hyb21lSW1hZ2VzXy5yaWdodCxsZWZ0V2lkdGgrcyptaWRXaWR0aCwwKTtjb25zdCBjaHJvbWVSZWN0PXRyLmIubWF0aC5SZWN0LmZyb21YWVdIKHRoaXMuZGV2aWNlUmVjdF8ueCx0aGlzLmRldmljZVJlY3RfLnktb2Zmc2V0WSx0aGlzLmRldmljZVJlY3RfLndpZHRoLHRoaXMuZGV2aWNlUmVjdF8uaGVpZ2h0K29mZnNldFkpO2NvbnN0IGNocm9tZVF1YWQ9dHIuYi5tYXRoLlF1YWQuZnJvbVJlY3QoY2hyb21lUmVjdCk7Y2hyb21lUXVhZC5zdGFja2luZ0dyb3VwSWQ9dGhpcy5tYXhTdGFja2luZ0dyb3VwSWRfKzE7Y2hyb21lUXVhZC5pbWFnZURhdGE9Y2hyb21lQ3R4LmdldEltYWdlRGF0YSgwLDAsY2hyb21lQ2FudmFzLndpZHRoLGNocm9tZUNhbnZhcy5oZWlnaHQpO2Nocm9tZVF1YWQuc2hhZG93T2Zmc2V0PVswLDBdO2Nocm9tZVF1YWQuc2hhZG93Qmx1cj01O2Nocm9tZVF1YWQuYm9yZGVyV2lkdGg9Mzt0aGlzLmNocm9tZVF1YWRfPWNocm9tZVF1YWQ7cmV0dXJuIHRoaXMuY2hyb21lUXVhZF87fSxzY2hlZHVsZVJlbmRlcigpe2lmKHRoaXMucmVkcmF3U2NoZWR1bGVkXylyZXR1cm4gZmFsc2U7dGhpcy5yZWRyYXdTY2hlZHVsZWRfPXRydWU7dHIuYi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXIsdGhpcyk7fSxvblJlbmRlclJlcXVpcmVkXyhlKXt0aGlzLnNjaGVkdWxlUmVuZGVyKCk7fSxzdGFja1RyYW5zZm9ybUFuZFByb2Nlc3NRdWFkc18obnVtUGFzc2VzLGhhbmRsZVF1YWRGdW5jLGluY2x1ZGVDaHJvbWVRdWFkLG9wdF9hcmcxLG9wdF9hcmcyKXtjb25zdCBtdj10aGlzLmNhbWVyYV8ubW9kZWxWaWV3TWF0cml4O2NvbnN0IHA9dGhpcy5jYW1lcmFfLnByb2plY3Rpb25NYXRyaXg7Y29uc3Qgdmlld3BvcnQ9dHIuYi5tYXRoLlJlY3QuZnJvbVhZV0goMCwwLHRoaXMuY2FudmFzXy53aWR0aCx0aGlzLmNhbnZhc18uaGVpZ2h0KTtjb25zdCBxdWFkU3RhY2tzPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5xdWFkc18ubGVuZ3RoOysraSl7Y29uc3QgcXVhZD10aGlzLnF1YWRzX1tpXTtjb25zdCBzdGFja2luZ0lkPXF1YWQuc3RhY2tpbmdHcm91cElkfHwwO3doaWxlKHN0YWNraW5nSWQ+PXF1YWRTdGFja3MubGVuZ3RoKXtxdWFkU3RhY2tzLnB1c2goW10pO30KLXF1YWRTdGFja3Nbc3RhY2tpbmdJZF0ucHVzaChxdWFkKTt9Ci1jb25zdCBtdnA9bWF0NC5jcmVhdGUoKTt0aGlzLm1heFN0YWNraW5nR3JvdXBJZF89cXVhZFN0YWNrcy5sZW5ndGg7Y29uc3QgZWZmZWN0aXZlU3RhY2tpbmdEaXN0YW5jZT10aGlzLnN0YWNraW5nRGlzdGFuY2UqdGhpcy5jYW1lcmFfLnN0YWNraW5nRGlzdGFuY2VEYW1wZW5pbmc7bWF0NC5tdWx0aXBseShtdnAscCxtdik7Zm9yKGxldCBpPTA7aTxxdWFkU3RhY2tzLmxlbmd0aDsrK2kpe3RyYW5zZm9ybUFuZFByb2Nlc3NRdWFkcyhtdnAsdmlld3BvcnQscXVhZFN0YWNrc1tpXSxudW1QYXNzZXMsaGFuZGxlUXVhZEZ1bmMsb3B0X2FyZzEsb3B0X2FyZzIpO21hdDQudHJhbnNsYXRlKG12LG12LFswLDAsZWZmZWN0aXZlU3RhY2tpbmdEaXN0YW5jZV0pO21hdDQubXVsdGlwbHkobXZwLHAsbXYpO30KLWlmKGluY2x1ZGVDaHJvbWVRdWFkJiZ0aGlzLmRldmljZVJlY3RfKXt0cmFuc2Zvcm1BbmRQcm9jZXNzUXVhZHMobXZwLHZpZXdwb3J0LFt0aGlzLmNocm9tZVF1YWRdLG51bVBhc3NlcyxkcmF3UHJvamVjdGVkUXVhZFRvQ29udGV4dCxvcHRfYXJnMSxvcHRfYXJnMik7fX0scmVuZGVyKCl7dGhpcy5yZWRyYXdTY2hlZHVsZWRfPWZhbHNlO2lmKCF0aGlzLnJlYWR5VG9EcmF3KCkpe3NldFRpbWVvdXQodGhpcy5zY2hlZHVsZVJlbmRlci5iaW5kKHRoaXMpLGNvbnN0YW50cy5JTUFHRV9MT0FEX1JFVFJZX1RJTUVfTVMpO3JldHVybjt9Ci1pZighdGhpcy5xdWFkc18pcmV0dXJuO2NvbnN0IGNhbnZhc0N0eD10aGlzLmNhbnZhc18uZ2V0Q29udGV4dCgnMmQnKTtpZighdGhpcy5yZXNpemUoKSl7Y2FudmFzQ3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNfLndpZHRoLHRoaXMuY2FudmFzXy5oZWlnaHQpO30KLWNvbnN0IHF1YWRDYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7dGhpcy5zdGFja1RyYW5zZm9ybUFuZFByb2Nlc3NRdWFkc18oMyxkcmF3UHJvamVjdGVkUXVhZFRvQ29udGV4dCx0cnVlLGNhbnZhc0N0eCxxdWFkQ2FudmFzKTtxdWFkQ2FudmFzLndpZHRoPTA7fSx0cmFja01vdXNlXygpe3RoaXMubW91c2VNb2RlU2VsZWN0b3JfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItbW91c2UtbW9kZS1zZWxlY3RvcicpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnRhcmdldEVsZW1lbnQ9dGhpcy5jYW52YXNfO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnN1cHBvcnRlZE1vZGVNYXNrPXRyLnVpLmIuTU9VU0VfU0VMRUNUT1JfTU9ERS5TRUxFQ1RJT058dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFLlBBTlNDQU58dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFLlpPT018dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFLlJPVEFURTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5tb2RlPXRyLnVpLmIuTU9VU0VfU0VMRUNUT1JfTU9ERS5QQU5TQ0FOO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnBvcz17eDowLHk6MTAwfTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXyk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc2V0dGluZ3NLZXk9J3F1YWRTdGFja1ZpZXcubW91c2VNb2RlU2VsZWN0b3InO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnNldE1vZGlmaWVyRm9yQWx0ZXJuYXRlTW9kZSh0ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuUk9UQVRFLHRyLnVpLmIuTU9ESUZJRVIuU0hJRlQpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnNldE1vZGlmaWVyRm9yQWx0ZXJuYXRlTW9kZSh0ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuUEFOU0NBTix0ci51aS5iLk1PRElGSUVSLlNQQUNFKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5zZXRNb2RpZmllckZvckFsdGVybmF0ZU1vZGUodHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFLlpPT00sdHIudWkuYi5NT0RJRklFUi5DTURfT1JfQ1RSTCk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcigndXBkYXRlc2VsZWN0aW9uJyx0aGlzLm9uU2VsZWN0aW9uVXBkYXRlXy5iaW5kKHRoaXMpKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdlbmRzZWxlY3Rpb24nLHRoaXMub25TZWxlY3Rpb25VcGRhdGVfLmJpbmQodGhpcykpO30sZXh0cmFjdFJlbGF0aXZlTW91c2VQb3NpdGlvbl8oZSl7Y29uc3QgYnI9dGhpcy5jYW52YXNfLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0aGlzLnBpeGVsUmF0aW9fKihlLmNsaWVudFgtdGhpcy5jYW52YXNfLm9mZnNldExlZnQtYnIubGVmdCksdGhpcy5waXhlbFJhdGlvXyooZS5jbGllbnRZLXRoaXMuY2FudmFzXy5vZmZzZXRUb3AtYnIudG9wKV07fSxvblNlbGVjdGlvblVwZGF0ZV8oZSl7Y29uc3QgbW91c2VQb3M9dGhpcy5leHRyYWN0UmVsYXRpdmVNb3VzZVBvc2l0aW9uXyhlKTtjb25zdCByZXM9W107ZnVuY3Rpb24gaGFuZGxlUXVhZChwYXNzTnVtYmVyLHF1YWQscDEscDIscDMscDQpe2lmKHRyLmIubWF0aC5wb2ludEluSW1wbGljaXRRdWFkKG1vdXNlUG9zLHAxLHAyLHAzLHA0KSl7cmVzLnB1c2gocXVhZCk7fX0KLXRoaXMuc3RhY2tUcmFuc2Zvcm1BbmRQcm9jZXNzUXVhZHNfKDEsaGFuZGxlUXVhZCxmYWxzZSk7ZT1uZXcgdHIuYi5FdmVudCgnc2VsZWN0aW9uY2hhbmdlJyk7ZS5xdWFkcz1yZXM7dGhpcy5kaXNwYXRjaEV2ZW50KGUpO319O3JldHVybntRdWFkU3RhY2tWaWV3LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5lLmNocm9tZS5jYycsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFRISVNfRE9DPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQub3duZXJEb2N1bWVudDtjb25zdCBUSUxFX0hFQVRNQVBfVFlQRT17fTtUSUxFX0hFQVRNQVBfVFlQRS5OT05FPSdub25lJztUSUxFX0hFQVRNQVBfVFlQRS5TQ0hFRFVMRURfUFJJT1JJVFk9J3NjaGVkdWxlZFByaW9yaXR5JztUSUxFX0hFQVRNQVBfVFlQRS5VU0lOR19HUFVfTUVNT1JZPSd1c2luZ0dwdU1lbW9yeSc7Y29uc3QgY2M9dHIudWkuZS5jaHJvbWUuY2M7ZnVuY3Rpb24gY3JlYXRlVGlsZVJlY3RzU2VsZWN0b3JCYXNlT3B0aW9ucygpe3JldHVyblt7bGFiZWw6J05vbmUnLHZhbHVlOidub25lJ30se2xhYmVsOidDb3ZlcmFnZSBSZWN0cycsdmFsdWU6J2NvdmVyYWdlJ31dO30KLWNvbnN0IExheWVyVHJlZVF1YWRTdGFja1ZpZXc9dHIudWkuYi5kZWZpbmUoJ3RyLXVpLWUtY2hyb21lLWNjLWxheWVyLXRyZWUtcXVhZC1zdGFjay12aWV3Jyk7TGF5ZXJUcmVlUXVhZFN0YWNrVmlldy5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoKXt0aGlzLnN0eWxlLmZsZXhHcm93PTE7dGhpcy5zdHlsZS5mbGV4U2hyaW5rPTE7dGhpcy5zdHlsZS5mbGV4QmFzaXM9JzEwMCUnO3RoaXMuc3R5bGUuZmxleERpcmVjdGlvbj0nY29sdW1uJzt0aGlzLnN0eWxlLm1pbkhlaWdodD0wO3RoaXMuc3R5bGUuZGlzcGxheT0nZmxleCc7dGhpcy5zdHlsZS53aWR0aD0nMTAwJSc7dGhpcy5pc1JlbmRlclBhc3NRdWFkc189ZmFsc2U7dGhpcy5waWN0dXJlQXNJbWFnZURhdGFfPXt9O3RoaXMubWVzc2FnZXNfPVtdO3RoaXMuY29udHJvbHNfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RvcC1jb250cm9scycpO3RoaXMuY29udHJvbHNfLnN0eWxlLmZsZXhHcm93PTA7dGhpcy5jb250cm9sc18uc3R5bGUuZmxleFNocmluaz0wO3RoaXMuY29udHJvbHNfLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5jb250cm9sc18uc3R5bGUuYmFja2dyb3VuZEltYWdlPSctd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAxMDAlIDAsIGZyb20oI0U1RTVFNSksIHRvKCNEMUQxRDEpKSc7dGhpcy5jb250cm9sc18uc3R5bGUuYm9yZGVyQm90dG9tPScxcHggc29saWQgIzhlOGU4ZSc7dGhpcy5jb250cm9sc18uc3R5bGUuYm9yZGVyVG9wPScxcHggc29saWQgd2hpdGUnO3RoaXMuY29udHJvbHNfLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3RoaXMuY29udHJvbHNfLnN0eWxlLmZsZXhEaXJlY3Rpb249J3Jvdyc7dGhpcy5jb250cm9sc18uc3R5bGUuZmxleFdyYXA9J3dyYXAnO3RoaXMuY29udHJvbHNfLnN0eWxlLmZvbnRTaXplPScxNHB4Jzt0aGlzLmNvbnRyb2xzXy5zdHlsZS5wYWRkaW5nTGVmdD0nMnB4Jzt0aGlzLmNvbnRyb2xzXy5zdHlsZS5vdmVyZmxvdz0naGlkZGVuJzt0aGlzLmluZm9CYXJfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItaW5mby1iYXInKTt0aGlzLnF1YWRTdGFja1ZpZXdfPW5ldyB0ci51aS5iLlF1YWRTdGFja1ZpZXcoKTt0aGlzLnF1YWRTdGFja1ZpZXdfLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsdGhpcy5vblF1YWRTdGFja1ZpZXdTZWxlY3Rpb25DaGFuZ2VfLmJpbmQodGhpcykpO3RoaXMuZXh0cmFIaWdobGlnaHRzQnlMYXllcklkXz11bmRlZmluZWQ7dGhpcy5pbnB1dEV2ZW50SW1hZ2VEYXRhXz11bmRlZmluZWQ7Y29uc3QgbT10ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREU7Y29uc3QgbW1zPXRoaXMucXVhZFN0YWNrVmlld18ubW91c2VNb2RlU2VsZWN0b3I7bW1zLnNldHRpbmdzS2V5PSd0ci5lLmNjLmxheWVyVHJlZVF1YWRTdGFja1ZpZXcubW91c2VNb2RlU2VsZWN0b3InO21tcy5zZXRLZXlDb2RlRm9yTW9kZShtLlNFTEVDVElPTiwnWicuY2hhckNvZGVBdCgwKSk7bW1zLnNldEtleUNvZGVGb3JNb2RlKG0uUEFOU0NBTiwnWCcuY2hhckNvZGVBdCgwKSk7bW1zLnNldEtleUNvZGVGb3JNb2RlKG0uWk9PTSwnQycuY2hhckNvZGVBdCgwKSk7bW1zLnNldEtleUNvZGVGb3JNb2RlKG0uUk9UQVRFLCdWJy5jaGFyQ29kZUF0KDApKTtjb25zdCBub2RlPXRyLnVpLmIuaW5zdGFudGlhdGVUZW1wbGF0ZSgnI3RyLXVpLWUtY2hyb21lLWNjLWxheWVyLXRyZWUtcXVhZC1zdGFjay12aWV3LXRlbXBsYXRlJyxUSElTX0RPQyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQobm9kZSk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5jb250cm9sc18pO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuaW5mb0Jhcl8pO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMucXVhZFN0YWNrVmlld18pO3RoaXMudGlsZVJlY3RzU2VsZWN0b3JfPXRyLnVpLmIuY3JlYXRlU2VsZWN0b3IodGhpcywnaG93VG9TaG93VGlsZXMnLCdsYXllclZpZXcuaG93VG9TaG93VGlsZXMnLCdub25lJyxjcmVhdGVUaWxlUmVjdHNTZWxlY3RvckJhc2VPcHRpb25zKCkpO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZCh0aGlzLnRpbGVSZWN0c1NlbGVjdG9yXyk7Y29uc3QgdGlsZUhlYXRtYXBUZXh0PXRyLnVpLmIuY3JlYXRlU3Bhbih7dGV4dENvbnRlbnQ6J1RpbGUgaGVhdG1hcDonfSk7UG9seW1lci5kb20odGhpcy5jb250cm9sc18pLmFwcGVuZENoaWxkKHRpbGVIZWF0bWFwVGV4dCk7Y29uc3QgdGlsZUhlYXRtYXBTZWxlY3Rvcj10ci51aS5iLmNyZWF0ZVNlbGVjdG9yKHRoaXMsJ3RpbGVIZWF0bWFwVHlwZScsJ2xheWVyVmlldy50aWxlSGVhdG1hcFR5cGUnLFRJTEVfSEVBVE1BUF9UWVBFLk5PTkUsW3tsYWJlbDonTm9uZScsdmFsdWU6VElMRV9IRUFUTUFQX1RZUEUuTk9ORX0se2xhYmVsOidTY2hlZHVsZWQgUHJpb3JpdHknLHZhbHVlOlRJTEVfSEVBVE1BUF9UWVBFLlNDSEVEVUxFRF9QUklPUklUWX0se2xhYmVsOidJcyB1c2luZyBHUFUgbWVtb3J5Jyx2YWx1ZTpUSUxFX0hFQVRNQVBfVFlQRS5VU0lOR19HUFVfTUVNT1JZfV0pO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZCh0aWxlSGVhdG1hcFNlbGVjdG9yKTtjb25zdCBzaG93T3RoZXJMYXllcnNDaGVja2JveD10ci51aS5iLmNyZWF0ZUNoZWNrQm94KHRoaXMsJ3Nob3dPdGhlckxheWVycycsJ2xheWVyVmlldy5zaG93T3RoZXJMYXllcnMnLHRydWUsJ090aGVyIGxheWVycy9wYXNzZXMnKTtzaG93T3RoZXJMYXllcnNDaGVja2JveC50aXRsZT0nV2hlbiBjaGVja2VkLCBzaG93IGFsbCBsYXllcnMsIHNlbGVjdGVkIG9yIG5vdC4nO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZChzaG93T3RoZXJMYXllcnNDaGVja2JveCk7Y29uc3Qgc2hvd0ludmFsaWRhdGlvbnNDaGVja2JveD10ci51aS5iLmNyZWF0ZUNoZWNrQm94KHRoaXMsJ3Nob3dJbnZhbGlkYXRpb25zJywnbGF5ZXJWaWV3LnNob3dJbnZhbGlkYXRpb25zJyx0cnVlLCdJbnZhbGlkYXRpb25zJyk7c2hvd0ludmFsaWRhdGlvbnNDaGVja2JveC50aXRsZT0nV2hlbiBjaGVja2VkLCBjb21wb3NpdGluZyBpbnZhbGlkYXRpb25zIGFyZSBoaWdobGlnaHRlZCBpbiByZWQnO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZChzaG93SW52YWxpZGF0aW9uc0NoZWNrYm94KTtjb25zdCBzaG93VW5yZWNvcmRlZFJlZ2lvbkNoZWNrYm94PXRyLnVpLmIuY3JlYXRlQ2hlY2tCb3godGhpcywnc2hvd1VucmVjb3JkZWRSZWdpb24nLCdsYXllclZpZXcuc2hvd1VucmVjb3JkZWRSZWdpb24nLHRydWUsJ1VucmVjb3JkZWQgYXJlYScpO3Nob3dVbnJlY29yZGVkUmVnaW9uQ2hlY2tib3gudGl0bGU9J1doZW4gY2hlY2tlZCwgdW5yZWNvcmRlZCBhcmVhcyBhcmUgaGlnaGxpZ2h0ZWQgaW4geWVsbG93JztQb2x5bWVyLmRvbSh0aGlzLmNvbnRyb2xzXykuYXBwZW5kQ2hpbGQoc2hvd1VucmVjb3JkZWRSZWdpb25DaGVja2JveCk7Y29uc3Qgc2hvd0JvdHRsZW5lY2tzQ2hlY2tib3g9dHIudWkuYi5jcmVhdGVDaGVja0JveCh0aGlzLCdzaG93Qm90dGxlbmVja3MnLCdsYXllclZpZXcuc2hvd0JvdHRsZW5lY2tzJyx0cnVlLCdCb3R0bGVuZWNrcycpO3Nob3dCb3R0bGVuZWNrc0NoZWNrYm94LnRpdGxlPSdXaGVuIGNoZWNrZWQsIHNjcm9sbCBib3R0bGVuZWNrcyBhcmUgaGlnaGxpZ2h0ZWQnO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZChzaG93Qm90dGxlbmVja3NDaGVja2JveCk7Y29uc3Qgc2hvd0xheW91dFJlY3RzQ2hlY2tib3g9dHIudWkuYi5jcmVhdGVDaGVja0JveCh0aGlzLCdzaG93TGF5b3V0UmVjdHMnLCdsYXllclZpZXcuc2hvd0xheW91dFJlY3RzJyxmYWxzZSwnTGF5b3V0IHJlY3RzJyk7c2hvd0xheW91dFJlY3RzQ2hlY2tib3gudGl0bGU9J1doZW4gY2hlY2tlZCwgc2hvd3MgcmVjdHMgZm9yIHJlZ2lvbnMgd2hlcmUgbGF5b3V0IGhhcHBlbmVkJztQb2x5bWVyLmRvbSh0aGlzLmNvbnRyb2xzXykuYXBwZW5kQ2hpbGQoc2hvd0xheW91dFJlY3RzQ2hlY2tib3gpO2NvbnN0IHNob3dDb250ZW50c0NoZWNrYm94PXRyLnVpLmIuY3JlYXRlQ2hlY2tCb3godGhpcywnc2hvd0NvbnRlbnRzJywnbGF5ZXJWaWV3LnNob3dDb250ZW50cycsdHJ1ZSwnQ29udGVudHMnKTtzaG93Q29udGVudHNDaGVja2JveC50aXRsZT0nV2hlbiBjaGVja2VkLCBzaG93IHRoZSByZW5kZXJlZCBjb250ZW50cyBpbnNpZGUgdGhlIGxheWVyIG91dGxpbmVzJztQb2x5bWVyLmRvbSh0aGlzLmNvbnRyb2xzXykuYXBwZW5kQ2hpbGQoc2hvd0NvbnRlbnRzQ2hlY2tib3gpO2NvbnN0IHNob3dBbmltYXRpb25Cb3VuZHNDaGVja2JveD10ci51aS5iLmNyZWF0ZUNoZWNrQm94KHRoaXMsJ3Nob3dBbmltYXRpb25Cb3VuZHMnLCdsYXllclZpZXcuc2hvd0FuaW1hdGlvbkJvdW5kcycsZmFsc2UsJ0FuaW1hdGlvbiBCb3VuZHMnKTtzaG93QW5pbWF0aW9uQm91bmRzQ2hlY2tib3gudGl0bGU9J1doZW4gY2hlY2tlZCwgc2hvdyBhIGJvcmRlciBhcm91bmQnKycgYSBsYXllciBzaG93aW5nIHRoZSBleHRlbnQgb2YgaXRzIGFuaW1hdGlvbi4nO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZChzaG93QW5pbWF0aW9uQm91bmRzQ2hlY2tib3gpO2NvbnN0IHNob3dJbnB1dEV2ZW50c0NoZWNrYm94PXRyLnVpLmIuY3JlYXRlQ2hlY2tCb3godGhpcywnc2hvd0lucHV0RXZlbnRzJywnbGF5ZXJWaWV3LnNob3dJbnB1dEV2ZW50cycsdHJ1ZSwnSW5wdXQgZXZlbnRzJyk7c2hvd0lucHV0RXZlbnRzQ2hlY2tib3gudGl0bGU9J1doZW4gY2hlY2tlZCwgaW5wdXQgZXZlbnRzIGFyZSAnKydkaXNwbGF5ZWQgYXMgY2lyY2xlcy4nO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZChzaG93SW5wdXRFdmVudHNDaGVja2JveCk7dGhpcy53aGF0UmFzdGVyaXplZExpbmtfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtQb2x5bWVyLmRvbSh0aGlzLndoYXRSYXN0ZXJpemVkTGlua18pLmNsYXNzTGlzdC5hZGQoJ3doYXQtcmFzdGVyaXplZCcpO1BvbHltZXIuZG9tKHRoaXMud2hhdFJhc3Rlcml6ZWRMaW5rXykudGV4dENvbnRlbnQ9J1doYXQgcmFzdGVyaXplZD8nO3RoaXMud2hhdFJhc3Rlcml6ZWRMaW5rXy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsdGhpcy5vbldoYXRSYXN0ZXJpemVkTGlua0NsaWNrZWRfLmJpbmQodGhpcykpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMud2hhdFJhc3Rlcml6ZWRMaW5rXyk7fSxnZXQgbGF5ZXJUcmVlSW1wbCgpe3JldHVybiB0aGlzLmxheWVyVHJlZUltcGxfO30sc2V0IGlzUmVuZGVyUGFzc1F1YWRzKG5ld1ZhbHVlKXt0aGlzLmlzUmVuZGVyUGFzc1F1YWRzXz1uZXdWYWx1ZTt9LHNldCBsYXllclRyZWVJbXBsKGxheWVyVHJlZUltcGwpe2lmKHRoaXMubGF5ZXJUcmVlSW1wbF89PT1sYXllclRyZWVJbXBsKXJldHVybjt0aGlzLmxheWVyVHJlZUltcGxfPWxheWVyVHJlZUltcGw7dGhpcy5zZWxlY3Rpb249dW5kZWZpbmVkO30sZ2V0IGV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZCgpe3JldHVybiB0aGlzLmV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZF87fSxzZXQgZXh0cmFIaWdobGlnaHRzQnlMYXllcklkKGV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZCl7dGhpcy5leHRyYUhpZ2hsaWdodHNCeUxheWVySWRfPWV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZDt0aGlzLnNjaGVkdWxlVXBkYXRlQ29udGVudHNfKCk7fSxnZXQgc2hvd090aGVyTGF5ZXJzKCl7cmV0dXJuIHRoaXMuc2hvd090aGVyTGF5ZXJzXzt9LHNldCBzaG93T3RoZXJMYXllcnMoc2hvdyl7dGhpcy5zaG93T3RoZXJMYXllcnNfPXNob3c7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBzaG93QW5pbWF0aW9uQm91bmRzKCl7cmV0dXJuIHRoaXMuc2hvd0FuaW1hdGlvbkJvdW5kc187fSxzZXQgc2hvd0FuaW1hdGlvbkJvdW5kcyhzaG93KXt0aGlzLnNob3dBbmltYXRpb25Cb3VuZHNfPXNob3c7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBzaG93SW5wdXRFdmVudHMoKXtyZXR1cm4gdGhpcy5zaG93SW5wdXRFdmVudHNfO30sc2V0IHNob3dJbnB1dEV2ZW50cyhzaG93KXt0aGlzLnNob3dJbnB1dEV2ZW50c189c2hvdzt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHNob3dDb250ZW50cygpe3JldHVybiB0aGlzLnNob3dDb250ZW50c187fSxzZXQgc2hvd0NvbnRlbnRzKHNob3cpe3RoaXMuc2hvd0NvbnRlbnRzXz1zaG93O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgc2hvd0ludmFsaWRhdGlvbnMoKXtyZXR1cm4gdGhpcy5zaG93SW52YWxpZGF0aW9uc187fSxzZXQgc2hvd0ludmFsaWRhdGlvbnMoc2hvdyl7dGhpcy5zaG93SW52YWxpZGF0aW9uc189c2hvdzt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHNob3dVbnJlY29yZGVkUmVnaW9uKCl7cmV0dXJuIHRoaXMuc2hvd1VucmVjb3JkZWRSZWdpb25fO30sc2V0IHNob3dVbnJlY29yZGVkUmVnaW9uKHNob3cpe3RoaXMuc2hvd1VucmVjb3JkZWRSZWdpb25fPXNob3c7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBzaG93Qm90dGxlbmVja3MoKXtyZXR1cm4gdGhpcy5zaG93Qm90dGxlbmVja3NfO30sc2V0IHNob3dCb3R0bGVuZWNrcyhzaG93KXt0aGlzLnNob3dCb3R0bGVuZWNrc189c2hvdzt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHNob3dMYXlvdXRSZWN0cygpe3JldHVybiB0aGlzLnNob3dMYXlvdXRSZWN0c187fSxzZXQgc2hvd0xheW91dFJlY3RzKHNob3cpe3RoaXMuc2hvd0xheW91dFJlY3RzXz1zaG93O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgaG93VG9TaG93VGlsZXMoKXtyZXR1cm4gdGhpcy5ob3dUb1Nob3dUaWxlc187fSxzZXQgaG93VG9TaG93VGlsZXModmFsKXtpZih2YWwhPT0nbm9uZScmJnZhbCE9PSdjb3ZlcmFnZScmJmlzTmFOKHBhcnNlRmxvYXQodmFsKSkpe3Rocm93IG5ldyBFcnJvcignaG93VG9TaG93VGlsZXMgcmVxdWlyZXMgIm5vbmUiIG9yICJjb3ZlcmFnZSIgb3IgYSBudW1iZXInKTt9Ci10aGlzLmhvd1RvU2hvd1RpbGVzXz12YWw7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCB0aWxlSGVhdG1hcFR5cGUoKXtyZXR1cm4gdGhpcy50aWxlSGVhdG1hcFR5cGVfO30sc2V0IHRpbGVIZWF0bWFwVHlwZSh2YWwpe3RoaXMudGlsZUhlYXRtYXBUeXBlXz12YWw7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe2lmKHRoaXMuc2VsZWN0aW9uPT09c2VsZWN0aW9uKXJldHVybjt0aGlzLnNlbGVjdGlvbl89c2VsZWN0aW9uO3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdzZWxlY3Rpb24tY2hhbmdlJyk7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHJlZ2VuZXJhdGVDb250ZW50KCl7dGhpcy51cGRhdGVUaWxlc1NlbGVjdG9yXygpO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxsb2FkRGF0YUZvckltYWdlRWxlbWVudF8oaW1hZ2UsY2FsbGJhY2spe2NvbnN0IGltYWdlQ29udGVudD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbWFnZSkuYmFja2dyb3VuZEltYWdlO2ltYWdlLnNyYz10ci51aS5iLmV4dHJhY3RVcmxTdHJpbmcoaW1hZ2VDb250ZW50KTtpbWFnZS5vbmxvYWQ9ZnVuY3Rpb24oKXtjb25zdCBjYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7Y29uc3QgY3R4PWNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO2NhbnZhcy53aWR0aD1pbWFnZS53aWR0aDtjYW52YXMuaGVpZ2h0PWltYWdlLmhlaWdodDtjdHguZHJhd0ltYWdlKGltYWdlLDAsMCk7Y29uc3QgaW1hZ2VEYXRhPWN0eC5nZXRJbWFnZURhdGEoMCwwLGNhbnZhcy53aWR0aCxjYW52YXMuaGVpZ2h0KTtjYWxsYmFjayhpbWFnZURhdGEpO307fSxvblF1YWRTdGFja1ZpZXdTZWxlY3Rpb25DaGFuZ2VfKGUpe2NvbnN0IHNlbGVjdGFibGVRdWFkcz1lLnF1YWRzLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4gcS5zZWxlY3Rpb25Ub1NldElmQ2xpY2tlZCE9PXVuZGVmaW5lZDt9KTtpZihzZWxlY3RhYmxlUXVhZHMubGVuZ3RoPT09MCl7dGhpcy5zZWxlY3Rpb249dW5kZWZpbmVkO3JldHVybjt9Ci1zZWxlY3RhYmxlUXVhZHMuc29ydChmdW5jdGlvbih4LHkpe2NvbnN0IHo9eC5zdGFja2luZ0dyb3VwSWQteS5zdGFja2luZ0dyb3VwSWQ7aWYoeiE9PTApcmV0dXJuIHo7cmV0dXJuIHguc2VsZWN0aW9uVG9TZXRJZkNsaWNrZWQuc3BlY2ljaWZpdHktCi15LnNlbGVjdGlvblRvU2V0SWZDbGlja2VkLnNwZWNpY2lmaXR5O30pO2NvbnN0IHF1YWRUb1NlbGVjdD1zZWxlY3RhYmxlUXVhZHNbc2VsZWN0YWJsZVF1YWRzLmxlbmd0aC0xXTt0aGlzLnNlbGVjdGlvbj1xdWFkVG9TZWxlY3Quc2VsZWN0aW9uVG9TZXRJZkNsaWNrZWQ7fSxzY2hlZHVsZVVwZGF0ZUNvbnRlbnRzXygpe2lmKHRoaXMudXBkYXRlQ29udGVudHNQZW5kaW5nXylyZXR1cm47dGhpcy51cGRhdGVDb250ZW50c1BlbmRpbmdfPXRydWU7dHIuYi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJblRoaXNGcmFtZUlmUG9zc2libGUodGhpcy51cGRhdGVDb250ZW50c18sdGhpcyk7fSx1cGRhdGVDb250ZW50c18oKXtpZighdGhpcy5sYXllclRyZWVJbXBsXyl7dGhpcy5xdWFkU3RhY2tWaWV3Xy5oZWFkZXJUZXh0PSdObyB0cmVlJzt0aGlzLnF1YWRTdGFja1ZpZXdfLnF1YWRzPVtdO3JldHVybjt9Ci1jb25zdCBzdGF0dXM9dGhpcy5jb21wdXRlUGljdHVyZUxvYWRpbmdTdGF0dXNfKCk7aWYoIXN0YXR1cy5waWN0dXJlc0NvbXBsZXRlKXJldHVybjtjb25zdCBsdGhpPXRoaXMubGF5ZXJUcmVlSW1wbF8ubGF5ZXJUcmVlSG9zdEltcGw7Y29uc3QgbHRoaUluc3RhbmNlPWx0aGkub2JqZWN0SW5zdGFuY2U7Y29uc3Qgd29ybGRWaWV3cG9ydFJlY3Q9dHIuYi5tYXRoLlJlY3QuZnJvbVhZV0goMCwwLGx0aGkuZGV2aWNlVmlld3BvcnRTaXplLndpZHRoLGx0aGkuZGV2aWNlVmlld3BvcnRTaXplLmhlaWdodCk7dGhpcy5xdWFkU3RhY2tWaWV3Xy5kZXZpY2VSZWN0PXdvcmxkVmlld3BvcnRSZWN0O2lmKHRoaXMuaXNSZW5kZXJQYXNzUXVhZHNfKXt0aGlzLnF1YWRTdGFja1ZpZXdfLnF1YWRzPXRoaXMuZ2VuZXJhdGVSZW5kZXJQYXNzUXVhZHMoKTt9ZWxzZXt0aGlzLnF1YWRTdGFja1ZpZXdfLnF1YWRzPXRoaXMuZ2VuZXJhdGVMYXllclF1YWRzKCk7fQotdGhpcy51cGRhdGVXaGF0UmFzdGVyaXplZExpbmtTdGF0ZV8oKTtsZXQgbWVzc2FnZT0nJztpZihsdGhpLnRpbGVzSGF2ZUdwdU1lbW9yeVVzYWdlSW5mbyl7Y29uc3QgdGhpc1RyZWVVc2FnZUluQnl0ZXM9dGhpcy5sYXllclRyZWVJbXBsXy5ncHVNZW1vcnlVc2FnZUluQnl0ZXM7Y29uc3Qgb3RoZXJUcmVlVXNhZ2VJbkJ5dGVzPWx0aGkuZ3B1TWVtb3J5VXNhZ2VJbkJ5dGVzLQotdGhpc1RyZWVVc2FnZUluQnl0ZXM7bWVzc2FnZSs9dHIuYi5jb252ZXJ0VW5pdCh0aGlzVHJlZVVzYWdlSW5CeXRlcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTk9ORSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTUVCSSkudG9GaXhlZCgxKSsnIE1pQiBvbiB0aGlzIHRyZWUnO2lmKG90aGVyVHJlZVVzYWdlSW5CeXRlcyl7bWVzc2FnZSs9JywgJysKLXRyLmIuY29udmVydFVuaXQob3RoZXJUcmVlVXNhZ2VJbkJ5dGVzLHRyLmIuVW5pdFByZWZpeFNjYWxlLkJJTkFSWS5OT05FLHRyLmIuVW5pdFByZWZpeFNjYWxlLkJJTkFSWS5NRUJJKS50b0ZpeGVkKDEpKycgTWlCIG9uIHRoZSBvdGhlciB0cmVlJzt9fWVsc2V7aWYodGhpcy5sYXllclRyZWVJbXBsXyl7Y29uc3QgdGhpc1RyZWVVc2FnZUluQnl0ZXM9dGhpcy5sYXllclRyZWVJbXBsXy5ncHVNZW1vcnlVc2FnZUluQnl0ZXM7bWVzc2FnZSs9dHIuYi5jb252ZXJ0VW5pdCh0aGlzVHJlZVVzYWdlSW5CeXRlcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTk9ORSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTUVCSSkudG9GaXhlZCgxKSsnIE1pQiBvbiB0aGlzIHRyZWUnO2lmKHRoaXMubGF5ZXJUcmVlSW1wbF8ub3RoZXJUcmVlKXttZXNzYWdlKz0nLCA/Pz8gTWlCIG9uIG90aGVyIHRyZWUuICc7fX19Ci1pZihsdGhpLmFyZ3MudGlsZU1hbmFnZXJCYXNpY1N0YXRlKXtjb25zdCB0bWdzPWx0aGkuYXJncy50aWxlTWFuYWdlckJhc2ljU3RhdGUuZ2xvYmFsU3RhdGU7bWVzc2FnZSs9JyAoc29mdE1heD0nKwotdHIuYi5jb252ZXJ0VW5pdCh0bWdzLnNvZnRNZW1vcnlMaW1pdEluQnl0ZXMsdHIuYi5Vbml0UHJlZml4U2NhbGUuQklOQVJZLk5PTkUsdHIuYi5Vbml0UHJlZml4U2NhbGUuQklOQVJZLk1FQkkpLnRvRml4ZWQoMSkrJyBNaUIsIGhhcmRNYXg9JysKLXRyLmIuY29udmVydFVuaXQodG1ncy5oYXJkTWVtb3J5TGltaXRJbkJ5dGVzLHRyLmIuVW5pdFByZWZpeFNjYWxlLkJJTkFSWS5OT05FLHRyLmIuVW5pdFByZWZpeFNjYWxlLkJJTkFSWS5NRUJJKS50b0ZpeGVkKDEpKycgTWlCLCAnKwotdG1ncy5tZW1vcnlMaW1pdFBvbGljeSsnKSc7fWVsc2V7Y29uc3QgdGhyZWFkPWx0aGkuc25hcHNob3R0ZWRPblRocmVhZDtjb25zdCBkaWRNYW5hZ2VUaWxlc1NsaWNlcz10aHJlYWQuc2xpY2VHcm91cC5zbGljZXMuZmlsdGVyKHM9PntpZihzLmNhdGVnb3J5IT09J3RyLmUuY2MnKXJldHVybiBmYWxzZTtpZihzLnRpdGxlIT09J0RpZE1hbmFnZScpcmV0dXJuIGZhbHNlO2lmKHMuZW5kPmx0aGkudHMpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlO30pO2RpZE1hbmFnZVRpbGVzU2xpY2VzLnNvcnQoZnVuY3Rpb24oeCx5KXtyZXR1cm4geC5lbmQteS5lbmQ7fSk7aWYoZGlkTWFuYWdlVGlsZXNTbGljZXMubGVuZ3RoPjApe2NvbnN0IG5ld2VzdD1kaWRNYW5hZ2VUaWxlc1NsaWNlc1tkaWRNYW5hZ2VUaWxlc1NsaWNlcy5sZW5ndGgtMV07Y29uc3QgdG1ncz1uZXdlc3QuYXJncy5zdGF0ZS5nbG9iYWxfc3RhdGU7bWVzc2FnZSs9JyAoc29mdE1heD0nKwotdHIuYi5jb252ZXJ0VW5pdCh0bWdzLnNvZnRNZW1vcnlMaW1pdEluQnl0ZXMsdHIuYi5Vbml0UHJlZml4U2NhbGUuQklOQVJZLk5PTkUsdHIuYi5Vbml0UHJlZml4U2NhbGUuQklOQVJZLk1FQkkpLnRvRml4ZWQoMSkrJyBNaUIsIGhhcmRNYXg9JysKLXRyLmIuY29udmVydFVuaXQodG1ncy5oYXJkTWVtb3J5TGltaXRJbkJ5dGVzLHRyLmIuVW5pdFByZWZpeFNjYWxlLkJJTkFSWS5OT05FLHRyLmIuVW5pdFByZWZpeFNjYWxlLkJJTkFSWS5NRUJJKS50b0ZpeGVkKDEpKycgTWlCLCAnKwotdG1ncy5tZW1vcnlMaW1pdFBvbGljeSsnKSc7fX0KLWlmKHRoaXMubGF5ZXJUcmVlSW1wbF8ub3RoZXJUcmVlKXttZXNzYWdlKz0nIChBbm90aGVyIHRyZWUgZXhpc3RzKSc7fQotaWYobWVzc2FnZS5sZW5ndGgpe3RoaXMucXVhZFN0YWNrVmlld18uaGVhZGVyVGV4dD1tZXNzYWdlO31lbHNle3RoaXMucXVhZFN0YWNrVmlld18uaGVhZGVyVGV4dD11bmRlZmluZWQ7fQotdGhpcy51cGRhdGVJbmZvQmFyXyhzdGF0dXMubWVzc2FnZXMpO30sdXBkYXRlVGlsZXNTZWxlY3Rvcl8oKXtjb25zdCBkYXRhPWNyZWF0ZVRpbGVSZWN0c1NlbGVjdG9yQmFzZU9wdGlvbnMoKTtpZih0aGlzLmxheWVyVHJlZUltcGxfKXtjb25zdCBsdGhpPXRoaXMubGF5ZXJUcmVlSW1wbF8ubGF5ZXJUcmVlSG9zdEltcGw7Y29uc3Qgc2NhbGVOYW1lcz1sdGhpLmdldENvbnRlbnRzU2NhbGVOYW1lcygpO2Zvcihjb25zdCBzY2FsZSBpbiBzY2FsZU5hbWVzKXtkYXRhLnB1c2goe2xhYmVsOidTY2FsZSAnK3NjYWxlKycgKCcrc2NhbGVOYW1lc1tzY2FsZV0rJyknLHZhbHVlOnNjYWxlfSk7fX0KLWNvbnN0IG5ld1NlbGVjdG9yPXRyLnVpLmIuY3JlYXRlU2VsZWN0b3IodGhpcywnaG93VG9TaG93VGlsZXMnLCdsYXllclZpZXcuaG93VG9TaG93VGlsZXMnLCdub25lJyxkYXRhKTt0aGlzLmNvbnRyb2xzXy5yZXBsYWNlQ2hpbGQobmV3U2VsZWN0b3IsdGhpcy50aWxlUmVjdHNTZWxlY3Rvcl8pO3RoaXMudGlsZVJlY3RzU2VsZWN0b3JfPW5ld1NlbGVjdG9yO30sY29tcHV0ZVBpY3R1cmVMb2FkaW5nU3RhdHVzXygpe2NvbnN0IGxheWVycz10aGlzLmxheWVycztjb25zdCBzdGF0dXM9e21lc3NhZ2VzOltdLHBpY3R1cmVzQ29tcGxldGU6dHJ1ZX07aWYodGhpcy5zaG93Q29udGVudHMpe2xldCBoYXNQZW5kaW5nUmFzdGVyaXplSW1hZ2U9ZmFsc2U7bGV0IGZpcnN0UGljdHVyZUVycm9yPXVuZGVmaW5lZDtsZXQgaGFzTWlzc2luZ0xheWVyUmVjdD1mYWxzZTtsZXQgaGFzVW5yZXNvbHZlZFBpY3R1cmVSZWY9ZmFsc2U7Zm9yKGxldCBpPTA7aTxsYXllcnMubGVuZ3RoO2krKyl7Y29uc3QgbGF5ZXI9bGF5ZXJzW2ldO2ZvcihsZXQgaXI9MDtpcjxsYXllci5waWN0dXJlcy5sZW5ndGg7Kytpcil7Y29uc3QgcGljdHVyZT1sYXllci5waWN0dXJlc1tpcl07aWYocGljdHVyZS5pZFJlZil7aGFzVW5yZXNvbHZlZFBpY3R1cmVSZWY9dHJ1ZTtjb250aW51ZTt9Ci1pZighcGljdHVyZS5sYXllclJlY3Qpe2hhc01pc3NpbmdMYXllclJlY3Q9dHJ1ZTtjb250aW51ZTt9Ci1jb25zdCBwaWN0dXJlQXNJbWFnZURhdGE9dGhpcy5waWN0dXJlQXNJbWFnZURhdGFfW3BpY3R1cmUuZ3VpZF07aWYoIXBpY3R1cmVBc0ltYWdlRGF0YSl7aGFzUGVuZGluZ1Jhc3Rlcml6ZUltYWdlPXRydWU7dGhpcy5waWN0dXJlQXNJbWFnZURhdGFfW3BpY3R1cmUuZ3VpZF09dHIuZS5jYy5QaWN0dXJlQXNJbWFnZURhdGEuUGVuZGluZyh0aGlzKTtwaWN0dXJlLnJhc3Rlcml6ZSh7c3RvcEluZGV4OnVuZGVmaW5lZH0sZnVuY3Rpb24ocGljdHVyZUltYWdlRGF0YSl7Y29uc3QgcGljdHVyZV89cGljdHVyZUltYWdlRGF0YS5waWN0dXJlO3RoaXMucGljdHVyZUFzSW1hZ2VEYXRhX1twaWN0dXJlXy5ndWlkXT1waWN0dXJlSW1hZ2VEYXRhO3RoaXMuc2NoZWR1bGVVcGRhdGVDb250ZW50c18oKTt9LmJpbmQodGhpcykpO2NvbnRpbnVlO30KLWlmKHBpY3R1cmVBc0ltYWdlRGF0YS5pc1BlbmRpbmcoKSl7aGFzUGVuZGluZ1Jhc3Rlcml6ZUltYWdlPXRydWU7Y29udGludWU7fQotaWYocGljdHVyZUFzSW1hZ2VEYXRhLmVycm9yKXtpZighZmlyc3RQaWN0dXJlRXJyb3Ipe2ZpcnN0UGljdHVyZUVycm9yPXBpY3R1cmVBc0ltYWdlRGF0YS5lcnJvcjt9Ci1icmVhazt9fX0KLWlmKGhhc1BlbmRpbmdSYXN0ZXJpemVJbWFnZSl7c3RhdHVzLnBpY3R1cmVzQ29tcGxldGU9ZmFsc2U7fWVsc2V7aWYoaGFzVW5yZXNvbHZlZFBpY3R1cmVSZWYpe3N0YXR1cy5tZXNzYWdlcy5wdXNoKHtoZWFkZXI6J01pc3NpbmcgcGljdHVyZScsZGV0YWlsczonWW91ciB0cmFjZSBkaWRuXCd0IGhhdmUgcGljdHVyZXMgZm9yIGV2ZXJ5IGxheWVyLiAnKydPbGQgY2hyb21lIHZlcnNpb25zIGhhZCB0aGlzIHByb2JsZW0nfSk7fQotaWYoaGFzTWlzc2luZ0xheWVyUmVjdCl7c3RhdHVzLm1lc3NhZ2VzLnB1c2goe2hlYWRlcjonTWlzc2luZyBsYXllciByZWN0JyxkZXRhaWxzOidZb3VyIHRyYWNlIG1heSBiZSBjb3JydXB0IG9yIGZyb20gYSB2ZXJ5IG9sZCAnKydDaHJvbWUgcmV2aXNpb24uJ30pO30KLWlmKGZpcnN0UGljdHVyZUVycm9yKXtzdGF0dXMubWVzc2FnZXMucHVzaCh7aGVhZGVyOidDYW5ub3QgcmFzdGVyaXplJyxkZXRhaWxzOmZpcnN0UGljdHVyZUVycm9yfSk7fX19Ci1pZih0aGlzLnNob3dJbnB1dEV2ZW50cyYmdGhpcy5sYXllclRyZWVJbXBsLnRyYWNlZElucHV0TGF0ZW5jaWVzJiZ0aGlzLmlucHV0RXZlbnRJbWFnZURhdGFfPT09dW5kZWZpbmVkKXtjb25zdCBpbWFnZT1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcjaW5wdXQtZXZlbnQnKTtpZighaW1hZ2Uuc3JjKXt0aGlzLmxvYWREYXRhRm9ySW1hZ2VFbGVtZW50XyhpbWFnZSxmdW5jdGlvbihpbWFnZURhdGEpe3RoaXMuaW5wdXRFdmVudEltYWdlRGF0YV89aW1hZ2VEYXRhO3RoaXMudXBkYXRlQ29udGVudHNQZW5kaW5nXz1mYWxzZTt0aGlzLnNjaGVkdWxlVXBkYXRlQ29udGVudHNfKCk7fS5iaW5kKHRoaXMpKTt9Ci1zdGF0dXMucGljdHVyZXNDb21wbGV0ZT1mYWxzZTt9Ci1yZXR1cm4gc3RhdHVzO30sZ2V0IHNlbGVjdGVkUmVuZGVyUGFzcygpe2lmKHRoaXMuc2VsZWN0aW9uKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24ucmVuZGVyUGFzc187fX0sZ2V0IHNlbGVjdGVkTGF5ZXIoKXtpZih0aGlzLnNlbGVjdGlvbil7Y29uc3Qgc2VsZWN0ZWRMYXllcklkPXRoaXMuc2VsZWN0aW9uLmFzc29jaWF0ZWRMYXllcklkO3JldHVybiB0aGlzLmxheWVyVHJlZUltcGxfLmZpbmRMYXllcldpdGhJZChzZWxlY3RlZExheWVySWQpO319LGdldCByZW5kZXJQYXNzZXMoKXtsZXQgcmVuZGVyUGFzc2VzPXRoaXMubGF5ZXJUcmVlSW1wbC5sYXllclRyZWVIb3N0SW1wbC5hcmdzLmZyYW1lLnJlbmRlclBhc3NlcztpZighdGhpcy5zaG93T3RoZXJMYXllcnMpe2NvbnN0IHNlbGVjdGVkUmVuZGVyUGFzcz10aGlzLnNlbGVjdGVkUmVuZGVyUGFzcztpZihzZWxlY3RlZFJlbmRlclBhc3Mpe3JlbmRlclBhc3Nlcz1bc2VsZWN0ZWRSZW5kZXJQYXNzXTt9fQotcmV0dXJuIHJlbmRlclBhc3Nlczt9LGdldCBsYXllcnMoKXtsZXQgbGF5ZXJzPXRoaXMubGF5ZXJUcmVlSW1wbC5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0O2lmKCF0aGlzLnNob3dPdGhlckxheWVycyl7Y29uc3Qgc2VsZWN0ZWRMYXllcj10aGlzLnNlbGVjdGVkTGF5ZXI7aWYoc2VsZWN0ZWRMYXllcil7bGF5ZXJzPVtzZWxlY3RlZExheWVyXTt9fQotcmV0dXJuIGxheWVyczt9LGFwcGVuZEltYWdlUXVhZHNfKHF1YWRzLGxheWVyLGxheWVyUXVhZCl7Zm9yKGxldCBpcj0wO2lyPGxheWVyLnBpY3R1cmVzLmxlbmd0aDsrK2lyKXtjb25zdCBwaWN0dXJlPWxheWVyLnBpY3R1cmVzW2lyXTtpZighcGljdHVyZS5sYXllclJlY3QpY29udGludWU7Y29uc3QgdW5pdFJlY3Q9cGljdHVyZS5sYXllclJlY3QuYXNVVlJlY3RJbnNpZGUobGF5ZXIuYm91bmRzKTtjb25zdCBpcT1sYXllclF1YWQucHJvamVjdFVuaXRSZWN0KHVuaXRSZWN0KTtjb25zdCBwaWN0dXJlRGF0YT10aGlzLnBpY3R1cmVBc0ltYWdlRGF0YV9bcGljdHVyZS5ndWlkXTtpZih0aGlzLnNob3dDb250ZW50cyYmcGljdHVyZURhdGEmJnBpY3R1cmVEYXRhLmltYWdlRGF0YSl7aXEuaW1hZ2VEYXRhPXBpY3R1cmVEYXRhLmltYWdlRGF0YTtpcS5ib3JkZXJDb2xvcj0ncmdiYSgwLDAsMCwwKSc7fWVsc2V7aXEuaW1hZ2VEYXRhPXVuZGVmaW5lZDt9Ci1pcS5zdGFja2luZ0dyb3VwSWQ9bGF5ZXJRdWFkLnN0YWNraW5nR3JvdXBJZDtxdWFkcy5wdXNoKGlxKTt9fSxhcHBlbmRBbmltYXRpb25RdWFkc18ocXVhZHMsbGF5ZXIsbGF5ZXJRdWFkKXtpZighbGF5ZXIuYW5pbWF0aW9uQm91bmRzUmVjdClyZXR1cm47Y29uc3QgcmVjdD1sYXllci5hbmltYXRpb25Cb3VuZHNSZWN0O2NvbnN0IGFicT10ci5iLm1hdGguUXVhZC5mcm9tUmVjdChyZWN0KTthYnEuYmFja2dyb3VuZENvbG9yPSdyZ2JhKDE2NCwxOTEsNDgsMC41KSc7YWJxLmJvcmRlckNvbG9yPSdyZ2JhKDIwNSwyNTUsMCwwLjc1KSc7YWJxLmJvcmRlcldpZHRoPTMuMDthYnEuc3RhY2tpbmdHcm91cElkPWxheWVyUXVhZC5zdGFja2luZ0dyb3VwSWQ7YWJxLnNlbGVjdGlvblRvU2V0SWZDbGlja2VkPW5ldyBjYy5BbmltYXRpb25SZWN0U2VsZWN0aW9uKGxheWVyLHJlY3QpO3F1YWRzLnB1c2goYWJxKTt9LGFwcGVuZEludmFsaWRhdGlvblF1YWRzXyhxdWFkcyxsYXllcixsYXllclF1YWQpe2lmKGxheWVyLmxheWVyVHJlZUltcGwuaGFzU291cmNlRnJhbWVCZWVuRHJhd25CZWZvcmUpcmV0dXJuO2ZvcihsZXQgaXI9MDtpcjxsYXllci5hbm5vdGF0ZWRJbnZhbGlkYXRpb24ucmVjdHMubGVuZ3RoO2lyKyspe2NvbnN0IHJlY3Q9bGF5ZXIuYW5ub3RhdGVkSW52YWxpZGF0aW9uLnJlY3RzW2lyXTtjb25zdCB1bml0UmVjdD1yZWN0LmFzVVZSZWN0SW5zaWRlKGxheWVyLmJvdW5kcyk7Y29uc3QgaXE9bGF5ZXJRdWFkLnByb2plY3RVbml0UmVjdCh1bml0UmVjdCk7aXEuYmFja2dyb3VuZENvbG9yPSdyZ2JhKDAsIDI1NSwgMCwgMC4xKSc7aWYocmVjdC5yZWFzb249PT0ncmVuZGVyZXIgaW5zZXJ0aW9uJyl7aXEuYmFja2dyb3VuZENvbG9yPSdyZ2JhKDAsIDI1NSwgMTI4LCAwLjEpJzt9Ci1pcS5ib3JkZXJDb2xvcj0ncmdiYSgwLCAyNTUsIDAsIDEpJztpcS5zdGFja2luZ0dyb3VwSWQ9bGF5ZXJRdWFkLnN0YWNraW5nR3JvdXBJZDtpcS5zZWxlY3Rpb25Ub1NldElmQ2xpY2tlZD1uZXcgY2MuTGF5ZXJSZWN0U2VsZWN0aW9uKGxheWVyLCdJbnZhbGlkYXRpb24gcmVjdCAoJytyZWN0LnJlYXNvbisnKScscmVjdCxyZWN0KTtxdWFkcy5wdXNoKGlxKTt9Ci1pZihsYXllci5hbm5vdGF0ZWRJbnZhbGlkYXRpb24ucmVjdHMubGVuZ3RoPT09MCl7Zm9yKGxldCBpcj0wO2lyPGxheWVyLmludmFsaWRhdGlvbi5yZWN0cy5sZW5ndGg7aXIrKyl7Y29uc3QgcmVjdD1sYXllci5pbnZhbGlkYXRpb24ucmVjdHNbaXJdO2NvbnN0IHVuaXRSZWN0PXJlY3QuYXNVVlJlY3RJbnNpZGUobGF5ZXIuYm91bmRzKTtjb25zdCBpcT1sYXllclF1YWQucHJvamVjdFVuaXRSZWN0KHVuaXRSZWN0KTtpcS5iYWNrZ3JvdW5kQ29sb3I9J3JnYmEoMCwgMjU1LCAwLCAwLjEpJztpcS5ib3JkZXJDb2xvcj0ncmdiYSgwLCAyNTUsIDAsIDEpJztpcS5zdGFja2luZ0dyb3VwSWQ9bGF5ZXJRdWFkLnN0YWNraW5nR3JvdXBJZDtpcS5zZWxlY3Rpb25Ub1NldElmQ2xpY2tlZD1uZXcgY2MuTGF5ZXJSZWN0U2VsZWN0aW9uKGxheWVyLCdJbnZhbGlkYXRpb24gcmVjdCcscmVjdCxyZWN0KTtxdWFkcy5wdXNoKGlxKTt9fX0sYXBwZW5kVW5yZWNvcmRlZFJlZ2lvblF1YWRzXyhxdWFkcyxsYXllcixsYXllclF1YWQpe2ZvcihsZXQgaXI9MDtpcjxsYXllci51bnJlY29yZGVkUmVnaW9uLnJlY3RzLmxlbmd0aDtpcisrKXtjb25zdCByZWN0PWxheWVyLnVucmVjb3JkZWRSZWdpb24ucmVjdHNbaXJdO2NvbnN0IHVuaXRSZWN0PXJlY3QuYXNVVlJlY3RJbnNpZGUobGF5ZXIuYm91bmRzKTtjb25zdCBpcT1sYXllclF1YWQucHJvamVjdFVuaXRSZWN0KHVuaXRSZWN0KTtpcS5iYWNrZ3JvdW5kQ29sb3I9J3JnYmEoMjQwLCAyMzAsIDE0MCwgMC4zKSc7aXEuYm9yZGVyQ29sb3I9J3JnYmEoMjQwLCAyMzAsIDE0MCwgMSknO2lxLnN0YWNraW5nR3JvdXBJZD1sYXllclF1YWQuc3RhY2tpbmdHcm91cElkO2lxLnNlbGVjdGlvblRvU2V0SWZDbGlja2VkPW5ldyBjYy5MYXllclJlY3RTZWxlY3Rpb24obGF5ZXIsJ1VucmVjb3JkZWQgYXJlYScscmVjdCxyZWN0KTtxdWFkcy5wdXNoKGlxKTt9fSxhcHBlbmRCb3R0bGVuZWNrUXVhZHNfKHF1YWRzLGxheWVyLGxheWVyUXVhZCxzdGFja2luZ0dyb3VwSWQpe2Z1bmN0aW9uIHByb2Nlc3NSZWdpb24ocmVnaW9uLGxhYmVsLGJvcmRlckNvbG9yKXtjb25zdCBiYWNrZ3JvdW5kQ29sb3I9Ym9yZGVyQ29sb3IuY2xvbmUoKTtiYWNrZ3JvdW5kQ29sb3IuYT0wLjQqKGJvcmRlckNvbG9yLmF8fDEuMCk7aWYoIXJlZ2lvbnx8IXJlZ2lvbi5yZWN0cylyZXR1cm47Zm9yKGxldCBpcj0wO2lyPHJlZ2lvbi5yZWN0cy5sZW5ndGg7aXIrKyl7Y29uc3QgcmVjdD1yZWdpb24ucmVjdHNbaXJdO2NvbnN0IHVuaXRSZWN0PXJlY3QuYXNVVlJlY3RJbnNpZGUobGF5ZXIuYm91bmRzKTtjb25zdCBpcT1sYXllclF1YWQucHJvamVjdFVuaXRSZWN0KHVuaXRSZWN0KTtpcS5iYWNrZ3JvdW5kQ29sb3I9YmFja2dyb3VuZENvbG9yLnRvU3RyaW5nKCk7aXEuYm9yZGVyQ29sb3I9Ym9yZGVyQ29sb3IudG9TdHJpbmcoKTtpcS5ib3JkZXJXaWR0aD00LjA7aXEuc3RhY2tpbmdHcm91cElkPXN0YWNraW5nR3JvdXBJZDtpcS5zZWxlY3Rpb25Ub1NldElmQ2xpY2tlZD1uZXcgY2MuTGF5ZXJSZWN0U2VsZWN0aW9uKGxheWVyLGxhYmVsLHJlY3QscmVjdCk7cXVhZHMucHVzaChpcSk7fX0KLXByb2Nlc3NSZWdpb24obGF5ZXIudG91Y2hFdmVudEhhbmRsZXJSZWdpb24sJ1RvdWNoIGxpc3RlbmVyJyx0ci5iLkNvbG9yLmZyb21TdHJpbmcoJ3JnYigyMjgsIDIyNiwgMjcpJykpO3Byb2Nlc3NSZWdpb24obGF5ZXIud2hlZWxFdmVudEhhbmRsZXJSZWdpb24sJ1doZWVsIGxpc3RlbmVyJyx0ci5iLkNvbG9yLmZyb21TdHJpbmcoJ3JnYigxNzYsIDIwNSwgMjkpJykpO3Byb2Nlc3NSZWdpb24obGF5ZXIubm9uRmFzdFNjcm9sbGFibGVSZWdpb24sJ1JlcGFpbnRzIG9uIHNjcm9sbCcsdHIuYi5Db2xvci5mcm9tU3RyaW5nKCdyZ2IoMjEzLCAxMzQsIDMyKScpKTt9LGFwcGVuZFRpbGVDb3ZlcmFnZVJlY3RRdWFkc18ocXVhZHMsbGF5ZXIsbGF5ZXJRdWFkLGhlYXRtYXBUeXBlKXtpZighbGF5ZXIudGlsZUNvdmVyYWdlUmVjdHMpcmV0dXJuO2NvbnN0IHRpbGVzPVtdO2ZvcihsZXQgY3Q9MDtjdDxsYXllci50aWxlQ292ZXJhZ2VSZWN0cy5sZW5ndGg7KytjdCl7Y29uc3QgdGlsZT1sYXllci50aWxlQ292ZXJhZ2VSZWN0c1tjdF0udGlsZTtpZih0aWxlIT09dW5kZWZpbmVkKXRpbGVzLnB1c2godGlsZSk7fQotY29uc3QgbHRoaT10aGlzLmxheWVyVHJlZUltcGxfLmxheWVyVHJlZUhvc3RJbXBsO2NvbnN0IG1pbk1heD10aGlzLmdldE1pbk1heEZvckhlYXRtYXBfKGx0aGkuYWN0aXZlVGlsZXMsaGVhdG1hcFR5cGUpO2NvbnN0IGhlYXRtYXBSZXN1bHQ9dGhpcy5jb21wdXRlSGVhdG1hcENvbG9yc18odGlsZXMsbWluTWF4LGhlYXRtYXBUeXBlKTtsZXQgaGVhdEluZGV4PTA7Zm9yKGxldCBjdD0wO2N0PGxheWVyLnRpbGVDb3ZlcmFnZVJlY3RzLmxlbmd0aDsrK2N0KXtsZXQgcmVjdD1sYXllci50aWxlQ292ZXJhZ2VSZWN0c1tjdF0uZ2VvbWV0cnlSZWN0O3JlY3Q9cmVjdC5zY2FsZSgxLjAvbGF5ZXIuZ2VvbWV0cnlDb250ZW50c1NjYWxlKTtjb25zdCB0aWxlPWxheWVyLnRpbGVDb3ZlcmFnZVJlY3RzW2N0XS50aWxlO2NvbnN0IHVuaXRSZWN0PXJlY3QuYXNVVlJlY3RJbnNpZGUobGF5ZXIuYm91bmRzKTtjb25zdCBxdWFkPWxheWVyUXVhZC5wcm9qZWN0VW5pdFJlY3QodW5pdFJlY3QpO3F1YWQuYmFja2dyb3VuZENvbG9yPSdyZ2JhKDAsIDAsIDAsIDApJztxdWFkLnN0YWNraW5nR3JvdXBJZD1sYXllclF1YWQuc3RhY2tpbmdHcm91cElkO2xldCB0eXBlPXRyLmUuY2MudGlsZVR5cGVzLm1pc3Npbmc7aWYodGlsZSl7dHlwZT10aWxlLmdldFR5cGVGb3JMYXllcihsYXllcik7cXVhZC5iYWNrZ3JvdW5kQ29sb3I9aGVhdG1hcFJlc3VsdFtoZWF0SW5kZXhdLmNvbG9yOysraGVhdEluZGV4O30KLXF1YWQuYm9yZGVyQ29sb3I9dHIuZS5jYy50aWxlQm9yZGVyW3R5cGVdLmNvbG9yO3F1YWQuYm9yZGVyV2lkdGg9dHIuZS5jYy50aWxlQm9yZGVyW3R5cGVdLndpZHRoO2xldCBsYWJlbDtpZih0aWxlKXtsYWJlbD0nY292ZXJhZ2VSZWN0Jzt9ZWxzZXtsYWJlbD0nY2hlY2tlcmJvYXJkIGNvdmVyYWdlUmVjdCc7fQotcXVhZC5zZWxlY3Rpb25Ub1NldElmQ2xpY2tlZD1uZXcgY2MuTGF5ZXJSZWN0U2VsZWN0aW9uKGxheWVyLGxhYmVsLHJlY3QsbGF5ZXIudGlsZUNvdmVyYWdlUmVjdHNbY3RdKTtxdWFkcy5wdXNoKHF1YWQpO319LGFwcGVuZExheW91dFJlY3RRdWFkc18ocXVhZHMsbGF5ZXIsbGF5ZXJRdWFkKXtpZighbGF5ZXIubGF5b3V0UmVjdHMpe3JldHVybjt9Ci1mb3IobGV0IGN0PTA7Y3Q8bGF5ZXIubGF5b3V0UmVjdHMubGVuZ3RoOysrY3Qpe2xldCByZWN0PWxheWVyLmxheW91dFJlY3RzW2N0XS5nZW9tZXRyeVJlY3Q7cmVjdD1yZWN0LnNjYWxlKDEuMC9sYXllci5nZW9tZXRyeUNvbnRlbnRzU2NhbGUpO2NvbnN0IHVuaXRSZWN0PXJlY3QuYXNVVlJlY3RJbnNpZGUobGF5ZXIuYm91bmRzKTtjb25zdCBxdWFkPWxheWVyUXVhZC5wcm9qZWN0VW5pdFJlY3QodW5pdFJlY3QpO3F1YWQuYmFja2dyb3VuZENvbG9yPSdyZ2JhKDAsIDAsIDAsIDApJztxdWFkLnN0YWNraW5nR3JvdXBJZD1sYXllclF1YWQuc3RhY2tpbmdHcm91cElkO3F1YWQuYm9yZGVyQ29sb3I9J3JnYmEoMCwgMCwgMjAwLCAwLjcpJztxdWFkLmJvcmRlcldpZHRoPTI7Y29uc3QgbGFiZWw9J0xheW91dCByZWN0JztxdWFkLnNlbGVjdGlvblRvU2V0SWZDbGlja2VkPW5ldyBjYy5MYXllclJlY3RTZWxlY3Rpb24obGF5ZXIsbGFiZWwscmVjdCk7cXVhZHMucHVzaChxdWFkKTt9fSxnZXRWYWx1ZUZvckhlYXRtYXBfKHRpbGUsaGVhdG1hcFR5cGUpe2lmKGhlYXRtYXBUeXBlPT09VElMRV9IRUFUTUFQX1RZUEUuU0NIRURVTEVEX1BSSU9SSVRZKXtyZXR1cm4gdGlsZS5zY2hlZHVsZWRQcmlvcml0eT09PTA/dW5kZWZpbmVkOnRpbGUuc2NoZWR1bGVkUHJpb3JpdHk7fWVsc2UgaWYoaGVhdG1hcFR5cGU9PT1USUxFX0hFQVRNQVBfVFlQRS5VU0lOR19HUFVfTUVNT1JZKXtpZih0aWxlLmlzU29saWRDb2xvcilyZXR1cm4gMC41O3JldHVybiB0aWxlLmlzVXNpbmdHcHVNZW1vcnk/MDoxO319LGdldE1pbk1heEZvckhlYXRtYXBfKHRpbGVzLGhlYXRtYXBUeXBlKXtjb25zdCByYW5nZT1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7aWYoaGVhdG1hcFR5cGU9PT1USUxFX0hFQVRNQVBfVFlQRS5VU0lOR19HUFVfTUVNT1JZKXtyYW5nZS5hZGRWYWx1ZSgwKTtyYW5nZS5hZGRWYWx1ZSgxKTtyZXR1cm4gcmFuZ2U7fQotZm9yKGxldCBpPTA7aTx0aWxlcy5sZW5ndGg7KytpKXtjb25zdCB2YWx1ZT10aGlzLmdldFZhbHVlRm9ySGVhdG1hcF8odGlsZXNbaV0saGVhdG1hcFR5cGUpO2lmKHZhbHVlPT09dW5kZWZpbmVkKWNvbnRpbnVlO3JhbmdlLmFkZFZhbHVlKHZhbHVlKTt9Ci1pZihyYW5nZS5yYW5nZT09PTApe3JhbmdlLmFkZFZhbHVlKDEpO30KLXJldHVybiByYW5nZTt9LGNvbXB1dGVIZWF0bWFwQ29sb3JzXyh0aWxlcyxtaW5NYXgsaGVhdG1hcFR5cGUpe2NvbnN0IG1pbj1taW5NYXgubWluO2NvbnN0IG1heD1taW5NYXgubWF4O2NvbnN0IGNvbG9yPWZ1bmN0aW9uKHZhbHVlKXtsZXQgaHVlPTEyMCooMS0odmFsdWUtbWluKS8obWF4LW1pbikpO2lmKGh1ZTwwKWh1ZT0wO3JldHVybidoc2xhKCcraHVlKycsIDEwMCUsIDUwJSwgMC41KSc7fTtjb25zdCB2YWx1ZXM9W107Zm9yKGxldCBpPTA7aTx0aWxlcy5sZW5ndGg7KytpKXtjb25zdCB0aWxlPXRpbGVzW2ldO2NvbnN0IHZhbHVlPXRoaXMuZ2V0VmFsdWVGb3JIZWF0bWFwXyh0aWxlLGhlYXRtYXBUeXBlKTtjb25zdCByZXM9e3ZhbHVlLGNvbG9yOnZhbHVlIT09dW5kZWZpbmVkP2NvbG9yKHZhbHVlKTp1bmRlZmluZWR9O3ZhbHVlcy5wdXNoKHJlcyk7fQotcmV0dXJuIHZhbHVlczt9LGFwcGVuZFRpbGVzV2l0aFNjYWxlUXVhZHNfKHF1YWRzLGxheWVyLGxheWVyUXVhZCxzY2FsZSxoZWF0bWFwVHlwZSl7Y29uc3QgbHRoaT10aGlzLmxheWVyVHJlZUltcGxfLmxheWVyVHJlZUhvc3RJbXBsO2NvbnN0IHRpbGVzPVtdO2ZvcihsZXQgaT0wO2k8bHRoaS5hY3RpdmVUaWxlcy5sZW5ndGg7KytpKXtjb25zdCB0aWxlPWx0aGkuYWN0aXZlVGlsZXNbaV07aWYoTWF0aC5hYnModGlsZS5jb250ZW50c1NjYWxlLXNjYWxlKT4xZS02KXtjb250aW51ZTt9Ci1pZihsYXllci5sYXllcklkIT09dGlsZS5sYXllcklkKWNvbnRpbnVlO3RpbGVzLnB1c2godGlsZSk7fQotY29uc3QgbWluTWF4PXRoaXMuZ2V0TWluTWF4Rm9ySGVhdG1hcF8obHRoaS5hY3RpdmVUaWxlcyxoZWF0bWFwVHlwZSk7Y29uc3QgaGVhdG1hcFJlc3VsdD10aGlzLmNvbXB1dGVIZWF0bWFwQ29sb3JzXyh0aWxlcyxtaW5NYXgsaGVhdG1hcFR5cGUpO2ZvcihsZXQgaT0wO2k8dGlsZXMubGVuZ3RoOysraSl7Y29uc3QgdGlsZT10aWxlc1tpXTtjb25zdCByZWN0PXRpbGUubGF5ZXJSZWN0O2lmKCF0aWxlLmxheWVyUmVjdCljb250aW51ZTtjb25zdCB1bml0UmVjdD1yZWN0LmFzVVZSZWN0SW5zaWRlKGxheWVyLmJvdW5kcyk7Y29uc3QgcXVhZD1sYXllclF1YWQucHJvamVjdFVuaXRSZWN0KHVuaXRSZWN0KTtxdWFkLmJhY2tncm91bmRDb2xvcj0ncmdiYSgwLCAwLCAwLCAwKSc7cXVhZC5zdGFja2luZ0dyb3VwSWQ9bGF5ZXJRdWFkLnN0YWNraW5nR3JvdXBJZDtjb25zdCB0eXBlPXRpbGUuZ2V0VHlwZUZvckxheWVyKGxheWVyKTtxdWFkLmJvcmRlckNvbG9yPXRyLmUuY2MudGlsZUJvcmRlclt0eXBlXS5jb2xvcjtxdWFkLmJvcmRlcldpZHRoPXRyLmUuY2MudGlsZUJvcmRlclt0eXBlXS53aWR0aDtxdWFkLmJhY2tncm91bmRDb2xvcj1oZWF0bWFwUmVzdWx0W2ldLmNvbG9yO2NvbnN0IGRhdGE9e3RpbGVUeXBlOnR5cGV9O2lmKGhlYXRtYXBUeXBlIT09VElMRV9IRUFUTUFQX1RZUEUuTk9ORSl7ZGF0YVtoZWF0bWFwVHlwZV09aGVhdG1hcFJlc3VsdFtpXS52YWx1ZTt9Ci1xdWFkLnNlbGVjdGlvblRvU2V0SWZDbGlja2VkPW5ldyBjYy5UaWxlU2VsZWN0aW9uKHRpbGUsZGF0YSk7cXVhZHMucHVzaChxdWFkKTt9fSxhcHBlbmRIaWdobGlnaHRRdWFkc0ZvckxheWVyXyhxdWFkcyxsYXllcixsYXllclF1YWQsaGlnaGxpZ2h0cyl7aGlnaGxpZ2h0cy5mb3JFYWNoKGZ1bmN0aW9uKGhpZ2hsaWdodCl7Y29uc3QgcmVjdD1oaWdobGlnaHQucmVjdDtjb25zdCB1bml0UmVjdD1yZWN0LmFzVVZSZWN0SW5zaWRlKGxheWVyLmJvdW5kcyk7Y29uc3QgcXVhZD1sYXllclF1YWQucHJvamVjdFVuaXRSZWN0KHVuaXRSZWN0KTtsZXQgY29sb3JJZD1Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcoaGlnaGxpZ2h0LmNvbG9yS2V5KTtjb25zdCBvZmZzZXQ9Q29sb3JTY2hlbWUucHJvcGVydGllcy5icmlnaHRlbmVkT2Zmc2V0c1swXTtjb2xvcklkPUNvbG9yU2NoZW1lLmdldFZhcmlhbnRDb2xvcklkKGNvbG9ySWQsb2Zmc2V0KTtjb25zdCBjb2xvcj1Db2xvclNjaGVtZS5jb2xvcnNbY29sb3JJZF07Y29uc3QgcXVhZEZvckRyYXdpbmc9cXVhZC5jbG9uZSgpO3F1YWRGb3JEcmF3aW5nLmJhY2tncm91bmRDb2xvcj1jb2xvci53aXRoQWxwaGEoMC41KS50b1N0cmluZygpO3F1YWRGb3JEcmF3aW5nLmJvcmRlckNvbG9yPWNvbG9yLndpdGhBbHBoYSgxLjApLmRhcmtlbigpLnRvU3RyaW5nKCk7cXVhZEZvckRyYXdpbmcuc3RhY2tpbmdHcm91cElkPWxheWVyUXVhZC5zdGFja2luZ0dyb3VwSWQ7cXVhZHMucHVzaChxdWFkRm9yRHJhd2luZyk7fSx0aGlzKTt9LGdlbmVyYXRlUmVuZGVyUGFzc1F1YWRzKCl7aWYoIXRoaXMubGF5ZXJUcmVlSW1wbC5sYXllclRyZWVIb3N0SW1wbC5hcmdzLmZyYW1lKXJldHVybltdO2NvbnN0IHJlbmRlclBhc3Nlcz10aGlzLnJlbmRlclBhc3NlcztpZighcmVuZGVyUGFzc2VzKXJldHVybltdO2NvbnN0IHF1YWRzPVtdO2ZvcihsZXQgaT0wO2k8cmVuZGVyUGFzc2VzLmxlbmd0aDsrK2kpe2NvbnN0IHF1YWRMaXN0PXJlbmRlclBhc3Nlc1tpXS5xdWFkTGlzdDtmb3IobGV0IGo9MDtqPHF1YWRMaXN0Lmxlbmd0aDsrK2ope2NvbnN0IGRyYXdRdWFkPXF1YWRMaXN0W2pdO2NvbnN0IHF1YWQ9ZHJhd1F1YWQucmVjdEFzVGFyZ2V0U3BhY2VRdWFkLmNsb25lKCk7cXVhZC5ib3JkZXJDb2xvcj0ncmdiKDE3MCwgMjA0LCAyMzgpJztxdWFkLmJvcmRlcldpZHRoPTI7cXVhZC5zdGFja2luZ0dyb3VwSWQ9aTtxdWFkcy5wdXNoKHF1YWQpO319Ci1yZXR1cm4gcXVhZHM7fSxnZW5lcmF0ZUxheWVyUXVhZHMoKXt0aGlzLnVwZGF0ZUNvbnRlbnRzUGVuZGluZ189ZmFsc2U7Y29uc3QgbGF5ZXJzPXRoaXMubGF5ZXJzO2NvbnN0IHF1YWRzPVtdO2xldCBuZXh0U3RhY2tpbmdHcm91cElkPTA7Y29uc3QgYWxyZWFkeVZpc2l0ZWRMYXllcklkcz17fTtsZXQgc2VsZWN0aW9uSGlnaGxpZ2h0c0J5TGF5ZXJJZDtpZih0aGlzLnNlbGVjdGlvbil7c2VsZWN0aW9uSGlnaGxpZ2h0c0J5TGF5ZXJJZD10aGlzLnNlbGVjdGlvbi5oaWdobGlnaHRzQnlMYXllcklkO31lbHNle3NlbGVjdGlvbkhpZ2hsaWdodHNCeUxheWVySWQ9e307fQotY29uc3QgZXh0cmFIaWdobGlnaHRzQnlMYXllcklkPXRoaXMuZXh0cmFIaWdobGlnaHRzQnlMYXllcklkfHx7fTtmb3IobGV0IGk9MTtpPD1sYXllcnMubGVuZ3RoO2krKyl7Y29uc3QgbGF5ZXI9bGF5ZXJzW2xheWVycy5sZW5ndGgtaV07YWxyZWFkeVZpc2l0ZWRMYXllcklkc1tsYXllci5sYXllcklkXT10cnVlO2lmKGxheWVyLm9iamVjdEluc3RhbmNlLm5hbWU9PT0nY2M6Ok5pbmVQYXRjaExheWVySW1wbCcpe2NvbnRpbnVlO30KLWNvbnN0IGxheWVyUXVhZD1sYXllci5sYXllclF1YWQuY2xvbmUoKTtpZihsYXllci51c2luZ0dwdVJhc3Rlcml6YXRpb24pe2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7bGF5ZXJRdWFkLmJvcmRlcldpZHRoPTIuMCpwaXhlbFJhdGlvO2xheWVyUXVhZC5ib3JkZXJDb2xvcj0ncmdiYSgxNTQsMjA1LDUwLDAuNzUpJzt9ZWxzZXtsYXllclF1YWQuYm9yZGVyQ29sb3I9J3JnYmEoMCwwLDAsMC43NSknO30KLWxheWVyUXVhZC5zdGFja2luZ0dyb3VwSWQ9bmV4dFN0YWNraW5nR3JvdXBJZCsrO2xheWVyUXVhZC5zZWxlY3Rpb25Ub1NldElmQ2xpY2tlZD1uZXcgY2MuTGF5ZXJTZWxlY3Rpb24obGF5ZXIpO2xheWVyUXVhZC5sYXllcj1sYXllcjtpZih0aGlzLnNob3dPdGhlckxheWVycyYmdGhpcy5zZWxlY3RlZExheWVyPT09bGF5ZXIpe2xheWVyUXVhZC51cHBlckJvcmRlckNvbG9yPSdyZ2IoMTU2LDE4OSw0NSknO30KLWlmKHRoaXMuc2hvd0FuaW1hdGlvbkJvdW5kcyl7dGhpcy5hcHBlbmRBbmltYXRpb25RdWFkc18ocXVhZHMsbGF5ZXIsbGF5ZXJRdWFkKTt9Ci10aGlzLmFwcGVuZEltYWdlUXVhZHNfKHF1YWRzLGxheWVyLGxheWVyUXVhZCk7cXVhZHMucHVzaChsYXllclF1YWQpO2lmKHRoaXMuc2hvd0ludmFsaWRhdGlvbnMpe3RoaXMuYXBwZW5kSW52YWxpZGF0aW9uUXVhZHNfKHF1YWRzLGxheWVyLGxheWVyUXVhZCk7fQotaWYodGhpcy5zaG93VW5yZWNvcmRlZFJlZ2lvbil7dGhpcy5hcHBlbmRVbnJlY29yZGVkUmVnaW9uUXVhZHNfKHF1YWRzLGxheWVyLGxheWVyUXVhZCk7fQotaWYodGhpcy5zaG93Qm90dGxlbmVja3Mpe3RoaXMuYXBwZW5kQm90dGxlbmVja1F1YWRzXyhxdWFkcyxsYXllcixsYXllclF1YWQsbGF5ZXJRdWFkLnN0YWNraW5nR3JvdXBJZCk7fQotaWYodGhpcy5zaG93TGF5b3V0UmVjdHMpe3RoaXMuYXBwZW5kTGF5b3V0UmVjdFF1YWRzXyhxdWFkcyxsYXllcixsYXllclF1YWQpO30KLWlmKHRoaXMuaG93VG9TaG93VGlsZXM9PT0nY292ZXJhZ2UnKXt0aGlzLmFwcGVuZFRpbGVDb3ZlcmFnZVJlY3RRdWFkc18ocXVhZHMsbGF5ZXIsbGF5ZXJRdWFkLHRoaXMudGlsZUhlYXRtYXBUeXBlKTt9ZWxzZSBpZih0aGlzLmhvd1RvU2hvd1RpbGVzIT09J25vbmUnKXt0aGlzLmFwcGVuZFRpbGVzV2l0aFNjYWxlUXVhZHNfKHF1YWRzLGxheWVyLGxheWVyUXVhZCx0aGlzLmhvd1RvU2hvd1RpbGVzLHRoaXMudGlsZUhlYXRtYXBUeXBlKTt9Ci1sZXQgaGlnaGxpZ2h0cztoaWdobGlnaHRzPWV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZFtsYXllci5sYXllcklkXTtpZihoaWdobGlnaHRzKXt0aGlzLmFwcGVuZEhpZ2hsaWdodFF1YWRzRm9yTGF5ZXJfKHF1YWRzLGxheWVyLGxheWVyUXVhZCxoaWdobGlnaHRzKTt9Ci1oaWdobGlnaHRzPXNlbGVjdGlvbkhpZ2hsaWdodHNCeUxheWVySWRbbGF5ZXIubGF5ZXJJZF07aWYoaGlnaGxpZ2h0cyl7dGhpcy5hcHBlbmRIaWdobGlnaHRRdWFkc0ZvckxheWVyXyhxdWFkcyxsYXllcixsYXllclF1YWQsaGlnaGxpZ2h0cyk7fX0KLXRoaXMubGF5ZXJUcmVlSW1wbC5pdGVyTGF5ZXJzKGZ1bmN0aW9uKGxheWVyLGRlcHRoLGlzTWFzayxpc1JlcGxpY2Epe2lmKCF0aGlzLnNob3dPdGhlckxheWVycyYmdGhpcy5zZWxlY3RlZExheWVyIT09bGF5ZXIpcmV0dXJuO2lmKGFscmVhZHlWaXNpdGVkTGF5ZXJJZHNbbGF5ZXIubGF5ZXJJZF0pcmV0dXJuO2NvbnN0IGxheWVyUXVhZD1sYXllci5sYXllclF1YWQ7Y29uc3Qgc3RhY2tpbmdHcm91cElkPW5leHRTdGFja2luZ0dyb3VwSWQrKztpZih0aGlzLnNob3dCb3R0bGVuZWNrcyl7dGhpcy5hcHBlbmRCb3R0bGVuZWNrUXVhZHNfKHF1YWRzLGxheWVyLGxheWVyUXVhZCxzdGFja2luZ0dyb3VwSWQpO319LHRoaXMpO2NvbnN0IHRyYWNlZElucHV0TGF0ZW5jaWVzPXRoaXMubGF5ZXJUcmVlSW1wbC50cmFjZWRJbnB1dExhdGVuY2llcztpZih0aGlzLnNob3dJbnB1dEV2ZW50cyYmdHJhY2VkSW5wdXRMYXRlbmNpZXMpe2ZvcihsZXQgaT0wO2k8dHJhY2VkSW5wdXRMYXRlbmNpZXMubGVuZ3RoO2krKyl7Y29uc3QgY29vcmRpbmF0ZXNBcnJheT10cmFjZWRJbnB1dExhdGVuY2llc1tpXS5hcmdzLmRhdGEuY29vcmRpbmF0ZXM7Zm9yKGxldCBqPTA7ajxjb29yZGluYXRlc0FycmF5Lmxlbmd0aDtqKyspe2NvbnN0IGlucHV0UXVhZD10ci5iLm1hdGguUXVhZC5mcm9tWFlXSChjb29yZGluYXRlc0FycmF5W2pdLngtMjUsY29vcmRpbmF0ZXNBcnJheVtqXS55LTI1LDUwLDUwKTtpbnB1dFF1YWQuYm9yZGVyQ29sb3I9J3JnYmEoMCwgMCwgMCwgMCknO2lucHV0UXVhZC5pbWFnZURhdGE9dGhpcy5pbnB1dEV2ZW50SW1hZ2VEYXRhXztxdWFkcy5wdXNoKGlucHV0UXVhZCk7fX19Ci1yZXR1cm4gcXVhZHM7fSx1cGRhdGVJbmZvQmFyXyhpbmZvQmFyTWVzc2FnZXMpe2lmKGluZm9CYXJNZXNzYWdlcy5sZW5ndGgpe3RoaXMuaW5mb0Jhcl8ucmVtb3ZlQWxsQnV0dG9ucygpO3RoaXMuaW5mb0Jhcl8ubWVzc2FnZT0nU29tZSBwcm9ibGVtcyB3ZXJlIGVuY291bnRlcmVkLi4uJzt0aGlzLmluZm9CYXJfLmFkZEJ1dHRvbignTW9yZSBpbmZvLi4uJyxmdW5jdGlvbihlKXtjb25zdCBvdmVybGF5PW5ldyB0ci51aS5iLk92ZXJsYXkoKTtQb2x5bWVyLmRvbShvdmVybGF5KS50ZXh0Q29udGVudD0nJztpbmZvQmFyTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbihtZXNzYWdlKXtjb25zdCB0aXRsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMycpO1BvbHltZXIuZG9tKHRpdGxlKS50ZXh0Q29udGVudD1tZXNzYWdlLmhlYWRlcjtjb25zdCBkZXRhaWxzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1BvbHltZXIuZG9tKGRldGFpbHMpLnRleHRDb250ZW50PW1lc3NhZ2UuZGV0YWlscztQb2x5bWVyLmRvbShvdmVybGF5KS5hcHBlbmRDaGlsZCh0aXRsZSk7UG9seW1lci5kb20ob3ZlcmxheSkuYXBwZW5kQ2hpbGQoZGV0YWlscyk7fSk7b3ZlcmxheS52aXNpYmxlPXRydWU7ZS5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm4gZmFsc2U7fSk7dGhpcy5pbmZvQmFyXy52aXNpYmxlPXRydWU7fWVsc2V7dGhpcy5pbmZvQmFyXy5yZW1vdmVBbGxCdXR0b25zKCk7dGhpcy5pbmZvQmFyXy5tZXNzYWdlPScnO3RoaXMuaW5mb0Jhcl8udmlzaWJsZT1mYWxzZTt9fSxnZXRXaGF0UmFzdGVyaXplZF8oKXtjb25zdCBsdGhpPXRoaXMubGF5ZXJUcmVlSW1wbF8ubGF5ZXJUcmVlSG9zdEltcGw7Y29uc3QgcmVuZGVyUHJvY2Vzcz1sdGhpLm9iamVjdEluc3RhbmNlLnBhcmVudDtjb25zdCB0YXNrcz1bXTtmb3IoY29uc3QgZXZlbnQgb2YgcmVuZGVyUHJvY2Vzcy5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKCEoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5TbGljZSkpY29udGludWU7Y29uc3QgdGlsZT10ci5lLmNjLmdldFRpbGVGcm9tUmFzdGVyVGFza1NsaWNlKGV2ZW50KTtpZih0aWxlPT09dW5kZWZpbmVkKWNvbnRpbnVlO2lmKHRpbGUuY29udGFpbmluZ1NuYXBzaG90PT09bHRoaSl7dGFza3MucHVzaChldmVudCk7fX0KLXJldHVybiB0YXNrczt9LHVwZGF0ZVdoYXRSYXN0ZXJpemVkTGlua1N0YXRlXygpe2NvbnN0IHRhc2tzPXRoaXMuZ2V0V2hhdFJhc3Rlcml6ZWRfKCk7aWYodGFza3MubGVuZ3RoKXtQb2x5bWVyLmRvbSh0aGlzLndoYXRSYXN0ZXJpemVkTGlua18pLnRleHRDb250ZW50PXRhc2tzLmxlbmd0aCsnIHJhc3RlciB0YXNrcyc7dGhpcy53aGF0UmFzdGVyaXplZExpbmtfLnN0eWxlLmRpc3BsYXk9Jyc7fWVsc2V7UG9seW1lci5kb20odGhpcy53aGF0UmFzdGVyaXplZExpbmtfKS50ZXh0Q29udGVudD0nJzt0aGlzLndoYXRSYXN0ZXJpemVkTGlua18uc3R5bGUuZGlzcGxheT0nbm9uZSc7fX0sb25XaGF0UmFzdGVyaXplZExpbmtDbGlja2VkXygpe2NvbnN0IHRhc2tzPXRoaXMuZ2V0V2hhdFJhc3Rlcml6ZWRfKCk7Y29uc3QgZXZlbnQ9bmV3IHRyLm1vZGVsLlJlcXVlc3RTZWxlY3Rpb25DaGFuZ2VFdmVudCgpO2V2ZW50LnNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQodGFza3MpO3RoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7fX07cmV0dXJue0xheWVyVHJlZVF1YWRTdGFja1ZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuY2hyb21lLmNjJyxmdW5jdGlvbigpe2NvbnN0IGNvbnN0YW50cz10ci5lLmNjLmNvbnN0YW50cztjb25zdCBMYXllclZpZXc9dHIudWkuYi5kZWZpbmUoJ3RyLXVpLWUtY2hyb21lLWNjLWxheWVyLXZpZXcnKTtMYXllclZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186SFRNTERpdkVsZW1lbnQucHJvdG90eXBlLGRlY29yYXRlKCl7dGhpcy5zdHlsZS5mbGV4RGlyZWN0aW9uPSdjb2x1bW4nO3RoaXMuc3R5bGUuZGlzcGxheT0nZmxleCc7dGhpcy5zdHlsZS5sZWZ0PTA7dGhpcy5zdHlsZS5wb3NpdGlvbj0ncmVsYXRpdmUnO3RoaXMuc3R5bGUudG9wPTA7dGhpcy5sYXllclRyZWVRdWFkU3RhY2tWaWV3Xz1uZXcgdHIudWkuZS5jaHJvbWUuY2MuTGF5ZXJUcmVlUXVhZFN0YWNrVmlldygpO3RoaXMuZHJhZ0Jhcl89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1kcmFnLWhhbmRsZScpO3RoaXMuYW5hbHlzaXNFbF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktZS1jaHJvbWUtY2MtbGF5ZXItdmlldy1hbmFseXNpcycpO3RoaXMuYW5hbHlzaXNFbF8uc3R5bGUuaGVpZ2h0PScxNTBweCc7dGhpcy5hbmFseXNpc0VsXy5zdHlsZS5vdmVyZmxvd1k9J2F1dG8nO3RoaXMuYW5hbHlzaXNFbF8uYWRkRXZlbnRMaXN0ZW5lcigncmVxdWVzdFNlbGVjdGlvbkNoYW5nZScsdGhpcy5vblJlcXVlc3RTZWxlY3Rpb25DaGFuZ2VGcm9tQW5hbHlzaXNFbF8uYmluZCh0aGlzKSk7dGhpcy5kcmFnQmFyXy50YXJnZXQ9dGhpcy5hbmFseXNpc0VsXztQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmxheWVyVHJlZVF1YWRTdGFja1ZpZXdfKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmRyYWdCYXJfKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmFuYWx5c2lzRWxfKTt0aGlzLmxheWVyVHJlZVF1YWRTdGFja1ZpZXdfLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbi1jaGFuZ2UnLGZ1bmN0aW9uKCl7dGhpcy5sYXllclRyZWVRdWFkU3RhY2tWaWV3U2VsZWN0aW9uQ2hhbmdlZF8oKTt9LmJpbmQodGhpcykpO3RoaXMubGF5ZXJUcmVlUXVhZFN0YWNrVmlld1NlbGVjdGlvbkNoYW5nZWRfKCk7fSxnZXQgbGF5ZXJUcmVlSW1wbCgpe3JldHVybiB0aGlzLmxheWVyVHJlZVF1YWRTdGFja1ZpZXdfLmxheWVyVHJlZUltcGw7fSxzZXQgbGF5ZXJUcmVlSW1wbChuZXdWYWx1ZSl7cmV0dXJuIHRoaXMubGF5ZXJUcmVlUXVhZFN0YWNrVmlld18ubGF5ZXJUcmVlSW1wbD1uZXdWYWx1ZTt9LHNldCBpc1JlbmRlclBhc3NRdWFkcyhuZXdWYWx1ZSl7cmV0dXJuIHRoaXMubGF5ZXJUcmVlUXVhZFN0YWNrVmlld18uaXNSZW5kZXJQYXNzUXVhZHM9bmV3VmFsdWU7fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMubGF5ZXJUcmVlUXVhZFN0YWNrVmlld18uc2VsZWN0aW9uO30sc2V0IHNlbGVjdGlvbihuZXdWYWx1ZSl7dGhpcy5sYXllclRyZWVRdWFkU3RhY2tWaWV3Xy5zZWxlY3Rpb249bmV3VmFsdWU7fSxyZWdlbmVyYXRlQ29udGVudCgpe3RoaXMubGF5ZXJUcmVlUXVhZFN0YWNrVmlld18ucmVnZW5lcmF0ZUNvbnRlbnQoKTt9LGxheWVyVHJlZVF1YWRTdGFja1ZpZXdTZWxlY3Rpb25DaGFuZ2VkXygpe2NvbnN0IHNlbGVjdGlvbj10aGlzLmxheWVyVHJlZVF1YWRTdGFja1ZpZXdfLnNlbGVjdGlvbjtpZihzZWxlY3Rpb24pe3RoaXMuZHJhZ0Jhcl8uc3R5bGUuZGlzcGxheT0nJzt0aGlzLmFuYWx5c2lzRWxfLnN0eWxlLmRpc3BsYXk9Jyc7UG9seW1lci5kb20odGhpcy5hbmFseXNpc0VsXykudGV4dENvbnRlbnQ9Jyc7Y29uc3QgbGF5ZXI9c2VsZWN0aW9uLmxheWVyO2lmKGxheWVyJiZsYXllci5hcmdzJiZsYXllci5hcmdzLnBpY3R1cmVzKXtQb2x5bWVyLmRvbSh0aGlzLmFuYWx5c2lzRWxfKS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVBpY3R1cmVCdG5fKGxheWVyLmFyZ3MucGljdHVyZXMpKTt9Ci1jb25zdCBhbmFseXNpcz1zZWxlY3Rpb24uY3JlYXRlQW5hbHlzaXMoKTtQb2x5bWVyLmRvbSh0aGlzLmFuYWx5c2lzRWxfKS5hcHBlbmRDaGlsZChhbmFseXNpcyk7Zm9yKGNvbnN0IGNoaWxkIG9mIHRoaXMuYW5hbHlzaXNFbF8uY2hpbGRyZW4pe2NoaWxkLnN0eWxlLnVzZXJTZWxlY3Q9J3RleHQnO319ZWxzZXt0aGlzLmRyYWdCYXJfLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuYW5hbHlzaXNFbF8uc3R5bGUuZGlzcGxheT0nbm9uZSc7Y29uc3QgYW5hbHlzaXM9UG9seW1lci5kb20odGhpcy5hbmFseXNpc0VsXykuZmlyc3RDaGlsZDtpZihhbmFseXNpcyl7UG9seW1lci5kb20odGhpcy5hbmFseXNpc0VsXykucmVtb3ZlQ2hpbGQoYW5hbHlzaXMpO30KLXRoaXMubGF5ZXJUcmVlUXVhZFN0YWNrVmlld18uc3R5bGUuaGVpZ2h0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmhlaWdodDt9Ci10ci5iLmRpc3BhdGNoU2ltcGxlRXZlbnQodGhpcywnc2VsZWN0aW9uLWNoYW5nZScpO30sY3JlYXRlUGljdHVyZUJ0bl8ocGljdHVyZXMpe2lmKCEocGljdHVyZXMgaW5zdGFuY2VvZiBBcnJheSkpe3BpY3R1cmVzPVtwaWN0dXJlc107fQotY29uc3QgbGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWFuYWx5c2lzLWxpbmsnKTtsaW5rLnNlbGVjdGlvbj1mdW5jdGlvbigpe2NvbnN0IGxheWVyZWRQaWN0dXJlPW5ldyB0ci5lLmNjLkxheWVyZWRQaWN0dXJlKHBpY3R1cmVzKTtjb25zdCBzbmFwc2hvdD1uZXcgdHIuZS5jYy5QaWN0dXJlU25hcHNob3QobGF5ZXJlZFBpY3R1cmUpO3NuYXBzaG90LnBpY3R1cmU9bGF5ZXJlZFBpY3R1cmU7Y29uc3Qgc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO3NlbGVjdGlvbi5wdXNoKHNuYXBzaG90KTtyZXR1cm4gc2VsZWN0aW9uO307UG9seW1lci5kb20obGluaykudGV4dENvbnRlbnQ9J1ZpZXcgaW4gUGljdHVyZSBEZWJ1Z2dlcic7cmV0dXJuIGxpbms7fSxvblJlcXVlc3RTZWxlY3Rpb25DaGFuZ2VGcm9tQW5hbHlzaXNFbF8oZSl7aWYoIShlLnNlbGVjdGlvbiBpbnN0YW5jZW9mIHRyLnVpLmUuY2hyb21lLmNjLlNlbGVjdGlvbikpe3JldHVybjt9Ci1lLnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuc2VsZWN0aW9uPWUuc2VsZWN0aW9uO30sZ2V0IGV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZCgpe3JldHVybiB0aGlzLmxheWVyVHJlZVF1YWRTdGFja1ZpZXdfLmV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZDt9LHNldCBleHRyYUhpZ2hsaWdodHNCeUxheWVySWQoZXh0cmFIaWdobGlnaHRzQnlMYXllcklkKXt0aGlzLmxheWVyVHJlZVF1YWRTdGFja1ZpZXdfLmV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZD1leHRyYUhpZ2hsaWdodHNCeUxheWVySWQ7fX07cmV0dXJue0xheWVyVmlldyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5jaHJvbWUuY2MnLGZ1bmN0aW9uKCl7Y29uc3QgTGF5ZXJUcmVlSG9zdEltcGxTbmFwc2hvdFZpZXc9dHIudWkuYi5kZWZpbmUoJ3RyLXVpLWUtY2hyb21lLWNjLWxheWVyLXRyZWUtaG9zdC1pbXBsLXNuYXBzaG90LXZpZXcnLHRyLnVpLmFuYWx5c2lzLk9iamVjdFNuYXBzaG90Vmlldyk7TGF5ZXJUcmVlSG9zdEltcGxTbmFwc2hvdFZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5hbHlzaXMuT2JqZWN0U25hcHNob3RWaWV3LnByb3RvdHlwZSxkZWNvcmF0ZSgpe1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ3RyLXVpLWUtY2hyb21lLWNjLWx0aGktcy12aWV3Jyk7dGhpcy5zdHlsZS5kaXNwbGF5PSdmbGV4Jzt0aGlzLnN0eWxlLmZsZXhEaXJlY3Rpb249J3Jvdyc7dGhpcy5zdHlsZS5mbGV4R3Jvdz0xO3RoaXMuc3R5bGUuZmxleFNocmluaz0xO3RoaXMuc3R5bGUuZmxleEJhc2lzPSdhdXRvJzt0aGlzLnNlbGVjdGlvbl89dW5kZWZpbmVkO3RoaXMubGF5ZXJQaWNrZXJfPW5ldyB0ci51aS5lLmNocm9tZS5jYy5MYXllclBpY2tlcigpO3RoaXMubGF5ZXJQaWNrZXJfLnN0eWxlLmZsZXhHcm93PTE7dGhpcy5sYXllclBpY2tlcl8uc3R5bGUuZmxleFNocmluaz0xO3RoaXMubGF5ZXJQaWNrZXJfLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5sYXllclBpY2tlcl8uYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uLWNoYW5nZScsdGhpcy5vbkxheWVyUGlja2VyU2VsZWN0aW9uQ2hhbmdlZF8uYmluZCh0aGlzKSk7dGhpcy5sYXllclZpZXdfPW5ldyB0ci51aS5lLmNocm9tZS5jYy5MYXllclZpZXcoKTt0aGlzLmxheWVyVmlld18uYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uLWNoYW5nZScsdGhpcy5vbkxheWVyVmlld1NlbGVjdGlvbkNoYW5nZWRfLmJpbmQodGhpcykpO3RoaXMuZHJhZ0hhbmRsZV89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1kcmFnLWhhbmRsZScpO3RoaXMuZHJhZ0hhbmRsZV8uc3R5bGUuZmxleEdyb3c9MDt0aGlzLmRyYWdIYW5kbGVfLnN0eWxlLmZsZXhTaHJpbms9MDt0aGlzLmRyYWdIYW5kbGVfLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5kcmFnSGFuZGxlXy5ob3Jpem9udGFsPWZhbHNlO3RoaXMuZHJhZ0hhbmRsZV8udGFyZ2V0PXRoaXMubGF5ZXJWaWV3XztQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmxheWVyUGlja2VyXyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5kcmFnSGFuZGxlXyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5sYXllclZpZXdfKTt0aGlzLm9uTGF5ZXJWaWV3U2VsZWN0aW9uQ2hhbmdlZF8oKTt0aGlzLm9uTGF5ZXJQaWNrZXJTZWxlY3Rpb25DaGFuZ2VkXygpO30sZ2V0IG9iamVjdFNuYXBzaG90KCl7cmV0dXJuIHRoaXMub2JqZWN0U25hcHNob3RfO30sc2V0IG9iamVjdFNuYXBzaG90KG9iamVjdFNuYXBzaG90KXt0aGlzLm9iamVjdFNuYXBzaG90Xz1vYmplY3RTbmFwc2hvdDtjb25zdCBsdGhpPXRoaXMub2JqZWN0U25hcHNob3Q7bGV0IGxheWVyVHJlZUltcGw7aWYobHRoaSl7bGF5ZXJUcmVlSW1wbD1sdGhpLmdldFRyZWUodGhpcy5sYXllclBpY2tlcl8ud2hpY2hUcmVlKTt9Ci10aGlzLmxheWVyUGlja2VyXy5sdGhpU25hcHNob3Q9bHRoaTt0aGlzLmxheWVyVmlld18ubGF5ZXJUcmVlSW1wbD1sYXllclRyZWVJbXBsO3RoaXMubGF5ZXJWaWV3Xy5yZWdlbmVyYXRlQ29udGVudCgpO2lmKCF0aGlzLnNlbGVjdGlvbl8pcmV0dXJuO3RoaXMuc2VsZWN0aW9uPXRoaXMuc2VsZWN0aW9uXy5maW5kRXF1aXZhbGVudChsdGhpKTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe2lmKHRoaXMuc2VsZWN0aW9uXz09PXNlbGVjdGlvbilyZXR1cm47dGhpcy5zZWxlY3Rpb25fPXNlbGVjdGlvbjt0aGlzLmxheWVyUGlja2VyXy5zZWxlY3Rpb249c2VsZWN0aW9uO3RoaXMubGF5ZXJWaWV3Xy5zZWxlY3Rpb249c2VsZWN0aW9uO3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdjYy1zZWxlY3Rpb24tY2hhbmdlJyk7fSxvbkxheWVyUGlja2VyU2VsZWN0aW9uQ2hhbmdlZF8oKXt0aGlzLnNlbGVjdGlvbl89dGhpcy5sYXllclBpY2tlcl8uc2VsZWN0aW9uO3RoaXMubGF5ZXJWaWV3Xy5zZWxlY3Rpb249dGhpcy5zZWxlY3Rpb247dGhpcy5sYXllclZpZXdfLmxheWVyVHJlZUltcGw9dGhpcy5sYXllclBpY2tlcl8ubGF5ZXJUcmVlSW1wbDt0aGlzLmxheWVyVmlld18uaXNSZW5kZXJQYXNzUXVhZHM9dGhpcy5sYXllclBpY2tlcl8uaXNSZW5kZXJQYXNzUXVhZHM7dGhpcy5sYXllclZpZXdfLnJlZ2VuZXJhdGVDb250ZW50KCk7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ2NjLXNlbGVjdGlvbi1jaGFuZ2UnKTt9LG9uTGF5ZXJWaWV3U2VsZWN0aW9uQ2hhbmdlZF8oKXt0aGlzLnNlbGVjdGlvbl89dGhpcy5sYXllclZpZXdfLnNlbGVjdGlvbjt0aGlzLmxheWVyUGlja2VyXy5zZWxlY3Rpb249dGhpcy5zZWxlY3Rpb247dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ2NjLXNlbGVjdGlvbi1jaGFuZ2UnKTt9LGdldCBleHRyYUhpZ2hsaWdodHNCeUxheWVySWQoKXtyZXR1cm4gdGhpcy5sYXllclZpZXdfLmV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZDt9LHNldCBleHRyYUhpZ2hsaWdodHNCeUxheWVySWQoZXh0cmFIaWdobGlnaHRzQnlMYXllcklkKXt0aGlzLmxheWVyVmlld18uZXh0cmFIaWdobGlnaHRzQnlMYXllcklkPWV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZDt9fTt0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcucmVnaXN0ZXIoTGF5ZXJUcmVlSG9zdEltcGxTbmFwc2hvdFZpZXcse3R5cGVOYW1lOidjYzo6TGF5ZXJUcmVlSG9zdEltcGwnfSk7cmV0dXJue0xheWVyVHJlZUhvc3RJbXBsU25hcHNob3RWaWV3LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5lLmNocm9tZS5jYycsZnVuY3Rpb24oKXtjb25zdCBPUFNfVElNSU5HX0lURVJBVElPTlM9Mztjb25zdCBDSEFSVF9QQURESU5HX0xFRlQ9NjU7Y29uc3QgQ0hBUlRfUEFERElOR19SSUdIVD00MDtjb25zdCBBWElTX1BBRERJTkdfTEVGVD02MDtjb25zdCBBWElTX1BBRERJTkdfUklHSFQ9MzU7Y29uc3QgQVhJU19QQURESU5HX1RPUD0yNTtjb25zdCBBWElTX1BBRERJTkdfQk9UVE9NPTQ1O2NvbnN0IEFYSVNfTEFCRUxfUEFERElORz01O2NvbnN0IEFYSVNfVElDS19TSVpFPTEwO2NvbnN0IExBQkVMX1BBRERJTkc9NTtjb25zdCBMQUJFTF9JTlRFUkxFQVZFX09GRlNFVD0xNTtjb25zdCBCQVJfUEFERElORz01O2NvbnN0IFZFUlRJQ0FMX1RJQ0tTPTU7Y29uc3QgSFVFX0NIQVJfQ09ERV9BREpVU1RNRU5UPTUuNztjb25zdCBQaWN0dXJlT3BzQ2hhcnRTdW1tYXJ5Vmlldz10ci51aS5iLmRlZmluZSgndHItdWktZS1jaHJvbWUtY2MtcGljdHVyZS1vcHMtY2hhcnQtc3VtbWFyeS12aWV3Jyk7UGljdHVyZU9wc0NoYXJ0U3VtbWFyeVZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186SFRNTERpdkVsZW1lbnQucHJvdG90eXBlLGRlY29yYXRlKCl7dGhpcy5zdHlsZS5mbGV4R3Jvdz0wO3RoaXMuc3R5bGUuZmxleFNocmluaz0wO3RoaXMuc3R5bGUuZmxleEJhc2lzPSdhdXRvJzt0aGlzLnN0eWxlLmZvbnRTaXplPTA7dGhpcy5zdHlsZS5tYXJnaW49MDt0aGlzLnN0eWxlLm1pbkhlaWdodD0nMjAwcHgnO3RoaXMuc3R5bGUubWluV2lkdGg9JzIwMHB4Jzt0aGlzLnN0eWxlLm92ZXJmbG93PSdoaWRkZW4nO3RoaXMuc3R5bGUucGFkZGluZz0wO3RoaXMucGljdHVyZV89dW5kZWZpbmVkO3RoaXMucGljdHVyZURhdGFQcm9jZXNzZWRfPWZhbHNlO3RoaXMuY2hhcnRTY2FsZV89d2luZG93LmRldmljZVBpeGVsUmF0aW87dGhpcy5jaGFydF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7dGhpcy5jaGFydEN0eF89dGhpcy5jaGFydF8uZ2V0Q29udGV4dCgnMmQnKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmNoYXJ0Xyk7dGhpcy5vcHNUaW1pbmdEYXRhXz1bXTt0aGlzLmNoYXJ0V2lkdGhfPTA7dGhpcy5jaGFydEhlaWdodF89MDt0aGlzLnJlcXVpcmVzUmVkcmF3Xz10cnVlO3RoaXMuY3VycmVudEJhck1vdXNlT3ZlclRhcmdldF89bnVsbDt0aGlzLmNoYXJ0Xy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLHRoaXMub25Nb3VzZU1vdmVfLmJpbmQodGhpcykpO30sZ2V0IHJlcXVpcmVzUmVkcmF3KCl7cmV0dXJuIHRoaXMucmVxdWlyZXNSZWRyYXdfO30sc2V0IHJlcXVpcmVzUmVkcmF3KHJlcXVpcmVzUmVkcmF3KXt0aGlzLnJlcXVpcmVzUmVkcmF3Xz1yZXF1aXJlc1JlZHJhdzt9LGdldCBwaWN0dXJlKCl7cmV0dXJuIHRoaXMucGljdHVyZV87fSxzZXQgcGljdHVyZShwaWN0dXJlKXt0aGlzLnBpY3R1cmVfPXBpY3R1cmU7dGhpcy5waWN0dXJlRGF0YVByb2Nlc3NlZF89ZmFsc2U7aWYoUG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmNvbnRhaW5zKCdoaWRkZW4nKSlyZXR1cm47dGhpcy5wcm9jZXNzUGljdHVyZURhdGFfKCk7dGhpcy5yZXF1aXJlc1JlZHJhdz10cnVlO3RoaXMudXBkYXRlQ2hhcnRDb250ZW50cygpO30saGlkZSgpe1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO3RoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSc7fSxzaG93KCl7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7dGhpcy5zdHlsZS5kaXNwbGF5PScnO2lmKHRoaXMucGljdHVyZURhdGFQcm9jZXNzZWRfKXJldHVybjt0aGlzLnByb2Nlc3NQaWN0dXJlRGF0YV8oKTt0aGlzLnJlcXVpcmVzUmVkcmF3PXRydWU7dGhpcy51cGRhdGVDaGFydENvbnRlbnRzKCk7fSxvbk1vdXNlTW92ZV8oZSl7Y29uc3QgbGFzdEJhck1vdXNlT3ZlclRhcmdldD10aGlzLmN1cnJlbnRCYXJNb3VzZU92ZXJUYXJnZXRfO3RoaXMuY3VycmVudEJhck1vdXNlT3ZlclRhcmdldF89bnVsbDtjb25zdCB4PWUub2Zmc2V0WDtjb25zdCB5PWUub2Zmc2V0WTtjb25zdCBjaGFydExlZnQ9Q0hBUlRfUEFERElOR19MRUZUO2NvbnN0IGNoYXJ0UmlnaHQ9dGhpcy5jaGFydFdpZHRoXy1DSEFSVF9QQURESU5HX1JJR0hUO2NvbnN0IGNoYXJ0VG9wPUFYSVNfUEFERElOR19UT1A7Y29uc3QgY2hhcnRCb3R0b209dGhpcy5jaGFydEhlaWdodF8tQVhJU19QQURESU5HX0JPVFRPTTtjb25zdCBjaGFydElubmVyV2lkdGg9Y2hhcnRSaWdodC1jaGFydExlZnQ7aWYoeD5jaGFydExlZnQmJng8Y2hhcnRSaWdodCYmeT5jaGFydFRvcCYmeTxjaGFydEJvdHRvbSl7dGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0Xz1NYXRoLmZsb29yKCh4LWNoYXJ0TGVmdCkvY2hhcnRJbm5lcldpZHRoKnRoaXMub3BzVGltaW5nRGF0YV8ubGVuZ3RoKTt0aGlzLmN1cnJlbnRCYXJNb3VzZU92ZXJUYXJnZXRfPXRyLmIubWF0aC5jbGFtcCh0aGlzLmN1cnJlbnRCYXJNb3VzZU92ZXJUYXJnZXRfLDAsdGhpcy5vcHNUaW1pbmdEYXRhXy5sZW5ndGgtMSk7fQotaWYodGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0Xz09PWxhc3RCYXJNb3VzZU92ZXJUYXJnZXQpcmV0dXJuO3RoaXMuZHJhd0NoYXJ0Q29udGVudHNfKCk7fSx1cGRhdGVDaGFydENvbnRlbnRzKCl7aWYodGhpcy5yZXF1aXJlc1JlZHJhdyl7dGhpcy51cGRhdGVDaGFydERpbWVuc2lvbnNfKCk7fQotdGhpcy5kcmF3Q2hhcnRDb250ZW50c18oKTt9LHVwZGF0ZUNoYXJ0RGltZW5zaW9uc18oKXt0aGlzLmNoYXJ0V2lkdGhfPXRoaXMub2Zmc2V0V2lkdGg7dGhpcy5jaGFydEhlaWdodF89dGhpcy5vZmZzZXRIZWlnaHQ7dGhpcy5jaGFydF8ud2lkdGg9dGhpcy5jaGFydFdpZHRoXyp0aGlzLmNoYXJ0U2NhbGVfO3RoaXMuY2hhcnRfLmhlaWdodD10aGlzLmNoYXJ0SGVpZ2h0Xyp0aGlzLmNoYXJ0U2NhbGVfO3RoaXMuY2hhcnRfLnN0eWxlLndpZHRoPXRoaXMuY2hhcnRXaWR0aF8rJ3B4Jzt0aGlzLmNoYXJ0Xy5zdHlsZS5oZWlnaHQ9dGhpcy5jaGFydEhlaWdodF8rJ3B4Jzt0aGlzLmNoYXJ0Q3R4Xy5zY2FsZSh0aGlzLmNoYXJ0U2NhbGVfLHRoaXMuY2hhcnRTY2FsZV8pO30scHJvY2Vzc1BpY3R1cmVEYXRhXygpe3RoaXMucmVzZXRPcHNUaW1pbmdEYXRhXygpO3RoaXMucGljdHVyZURhdGFQcm9jZXNzZWRfPXRydWU7aWYoIXRoaXMucGljdHVyZV8pcmV0dXJuO2xldCBvcHM9dGhpcy5waWN0dXJlXy5nZXRPcHMoKTtpZighb3BzKXJldHVybjtvcHM9dGhpcy5waWN0dXJlXy50YWdPcHNXaXRoVGltaW5ncyhvcHMpO2lmKG9wc1swXS5jbWRfdGltZT09PXVuZGVmaW5lZClyZXR1cm47dGhpcy5jb2xsYXBzZU9wc1RvVGltaW5nQnVja2V0c18ob3BzKTt9LGRyYXdDaGFydENvbnRlbnRzXygpe3RoaXMuY2xlYXJDaGFydENvbnRlbnRzXygpO2lmKHRoaXMub3BzVGltaW5nRGF0YV8ubGVuZ3RoPT09MCl7dGhpcy5zaG93Tm9UaW1pbmdEYXRhTWVzc2FnZV8oKTtyZXR1cm47fQotdGhpcy5kcmF3Q2hhcnRBeGVzXygpO3RoaXMuZHJhd0JhcnNfKCk7dGhpcy5kcmF3TGluZUF0Qm90dG9tT2ZDaGFydF8oKTtpZih0aGlzLmN1cnJlbnRCYXJNb3VzZU92ZXJUYXJnZXRfPT09bnVsbClyZXR1cm47dGhpcy5kcmF3VG9vbHRpcF8oKTt9LGRyYXdMaW5lQXRCb3R0b21PZkNoYXJ0Xygpe3RoaXMuY2hhcnRDdHhfLnN0cm9rZVN0eWxlPScjQUFBJzt0aGlzLmNoYXJ0Q3R4Xy5tb3ZlVG8oMCx0aGlzLmNoYXJ0SGVpZ2h0Xy0wLjUpO3RoaXMuY2hhcnRDdHhfLmxpbmVUbyh0aGlzLmNoYXJ0V2lkdGhfLHRoaXMuY2hhcnRIZWlnaHRfLTAuNSk7dGhpcy5jaGFydEN0eF8uc3Ryb2tlKCk7fSxkcmF3VG9vbHRpcF8oKXtjb25zdCB0b29sdGlwRGF0YT10aGlzLm9wc1RpbWluZ0RhdGFfW3RoaXMuY3VycmVudEJhck1vdXNlT3ZlclRhcmdldF9dO2NvbnN0IHRvb2x0aXBUaXRsZT10b29sdGlwRGF0YS5jbWRfc3RyaW5nO2NvbnN0IHRvb2x0aXBUaW1lPXRvb2x0aXBEYXRhLmNtZF90aW1lLnRvRml4ZWQoNCk7Y29uc3QgdG9vbHRpcFdpZHRoPTExMDtjb25zdCB0b29sdGlwSGVpZ2h0PTQwO2NvbnN0IGNoYXJ0SW5uZXJXaWR0aD10aGlzLmNoYXJ0V2lkdGhfLUNIQVJUX1BBRERJTkdfUklHSFQtCi1DSEFSVF9QQURESU5HX0xFRlQ7Y29uc3QgYmFyV2lkdGg9Y2hhcnRJbm5lcldpZHRoL3RoaXMub3BzVGltaW5nRGF0YV8ubGVuZ3RoO2NvbnN0IHRvb2x0aXBPZmZzZXQ9TWF0aC5yb3VuZCgodG9vbHRpcFdpZHRoLWJhcldpZHRoKSowLjUpO2NvbnN0IGxlZnQ9Q0hBUlRfUEFERElOR19MRUZUK3RoaXMuY3VycmVudEJhck1vdXNlT3ZlclRhcmdldF8qYmFyV2lkdGgtdG9vbHRpcE9mZnNldDtjb25zdCB0b3A9TWF0aC5yb3VuZCgodGhpcy5jaGFydEhlaWdodF8tdG9vbHRpcEhlaWdodCkqMC41KTt0aGlzLmNoYXJ0Q3R4Xy5zYXZlKCk7dGhpcy5jaGFydEN0eF8uc2hhZG93T2Zmc2V0WD0wO3RoaXMuY2hhcnRDdHhfLnNoYWRvd09mZnNldFk9NTt0aGlzLmNoYXJ0Q3R4Xy5zaGFkb3dCbHVyPTQ7dGhpcy5jaGFydEN0eF8uc2hhZG93Q29sb3I9J3JnYmEoMCwwLDAsMC40KSc7dGhpcy5jaGFydEN0eF8uc3Ryb2tlU3R5bGU9JyM4ODgnO3RoaXMuY2hhcnRDdHhfLmZpbGxTdHlsZT0nI0VFRSc7dGhpcy5jaGFydEN0eF8uZmlsbFJlY3QobGVmdCx0b3AsdG9vbHRpcFdpZHRoLHRvb2x0aXBIZWlnaHQpO3RoaXMuY2hhcnRDdHhfLnNoYWRvd0NvbG9yPSd0cmFuc3BhcmVudCc7dGhpcy5jaGFydEN0eF8udHJhbnNsYXRlKDAuNSwwLjUpO3RoaXMuY2hhcnRDdHhfLnN0cm9rZVJlY3QobGVmdCx0b3AsdG9vbHRpcFdpZHRoLHRvb2x0aXBIZWlnaHQpO3RoaXMuY2hhcnRDdHhfLnJlc3RvcmUoKTt0aGlzLmNoYXJ0Q3R4Xy5maWxsU3R5bGU9JyMyMjInO3RoaXMuY2hhcnRDdHhfLnRleHRCYXNlbGluZT0ndG9wJzt0aGlzLmNoYXJ0Q3R4Xy5mb250PSc4MDAgMTJweCBBcmlhbCc7dGhpcy5jaGFydEN0eF8uZmlsbFRleHQodG9vbHRpcFRpdGxlLGxlZnQrOCx0b3ArOCk7dGhpcy5jaGFydEN0eF8uZmlsbFN0eWxlPScjNTU1Jzt0aGlzLmNoYXJ0Q3R4Xy50ZXh0QmFzZWxpbmU9J3RvcCc7dGhpcy5jaGFydEN0eF8uZm9udD0nNDAwIGl0YWxpYyAxMHB4IEFyaWFsJzt0aGlzLmNoYXJ0Q3R4Xy5maWxsVGV4dCgnVG90YWw6ICcrdG9vbHRpcFRpbWUrJ21zJyxsZWZ0KzgsdG9wKzIyKTt9LGRyYXdCYXJzXygpe2NvbnN0IGxlbj10aGlzLm9wc1RpbWluZ0RhdGFfLmxlbmd0aDtjb25zdCBtYXg9dGhpcy5vcHNUaW1pbmdEYXRhX1swXS5jbWRfdGltZTtjb25zdCBtaW49dGhpcy5vcHNUaW1pbmdEYXRhX1tsZW4tMV0uY21kX3RpbWU7Y29uc3Qgd2lkdGg9dGhpcy5jaGFydFdpZHRoXy1DSEFSVF9QQURESU5HX0xFRlQtQ0hBUlRfUEFERElOR19SSUdIVDtjb25zdCBoZWlnaHQ9dGhpcy5jaGFydEhlaWdodF8tQVhJU19QQURESU5HX1RPUC1BWElTX1BBRERJTkdfQk9UVE9NO2NvbnN0IGJhcldpZHRoPU1hdGguZmxvb3Iod2lkdGgvbGVuKTtsZXQgb3BEYXRhO2xldCBvcFRpbWluZztsZXQgb3BIZWlnaHQ7bGV0IG9wTGFiZWw7bGV0IGJhckxlZnQ7Zm9yKGxldCBiPTA7YjxsZW47YisrKXtvcERhdGE9dGhpcy5vcHNUaW1pbmdEYXRhX1tiXTtvcFRpbWluZz1vcERhdGEuY21kX3RpbWUvbWF4O29wSGVpZ2h0PU1hdGgucm91bmQoTWF0aC5tYXgoMSxvcFRpbWluZypoZWlnaHQpKTtvcExhYmVsPW9wRGF0YS5jbWRfc3RyaW5nO2JhckxlZnQ9Q0hBUlRfUEFERElOR19MRUZUK2IqYmFyV2lkdGg7dGhpcy5jaGFydEN0eF8uZmlsbFN0eWxlPXRoaXMuZ2V0T3BDb2xvcl8ob3BMYWJlbCk7dGhpcy5jaGFydEN0eF8uZmlsbFJlY3QoYmFyTGVmdCtCQVJfUEFERElORyxBWElTX1BBRERJTkdfVE9QKwotaGVpZ2h0LW9wSGVpZ2h0LGJhcldpZHRoLTIqQkFSX1BBRERJTkcsb3BIZWlnaHQpO319LGdldE9wQ29sb3JfKG9wTmFtZSl7Y29uc3QgY2hhcmFjdGVycz1vcE5hbWUuc3BsaXQoJycpO2NvbnN0IGh1ZT1jaGFyYWN0ZXJzLnJlZHVjZSh0aGlzLnJlZHVjZU5hbWVUb0h1ZSwwKSUzNjA7cmV0dXJuJ2hzbCgnK2h1ZSsnLCAzMCUsIDUwJSknO30scmVkdWNlTmFtZVRvSHVlKHByZXZpb3VzVmFsdWUsY3VycmVudFZhbHVlLGluZGV4LGFycmF5KXtyZXR1cm4gTWF0aC5yb3VuZChwcmV2aW91c1ZhbHVlK2N1cnJlbnRWYWx1ZS5jaGFyQ29kZUF0KDApKkhVRV9DSEFSX0NPREVfQURKVVNUTUVOVCk7fSxkcmF3Q2hhcnRBeGVzXygpe2NvbnN0IGxlbj10aGlzLm9wc1RpbWluZ0RhdGFfLmxlbmd0aDtjb25zdCBtYXg9dGhpcy5vcHNUaW1pbmdEYXRhX1swXS5jbWRfdGltZTtjb25zdCBtaW49dGhpcy5vcHNUaW1pbmdEYXRhX1tsZW4tMV0uY21kX3RpbWU7Y29uc3Qgd2lkdGg9dGhpcy5jaGFydFdpZHRoXy1BWElTX1BBRERJTkdfTEVGVC1BWElTX1BBRERJTkdfUklHSFQ7Y29uc3QgaGVpZ2h0PXRoaXMuY2hhcnRIZWlnaHRfLUFYSVNfUEFERElOR19UT1AtQVhJU19QQURESU5HX0JPVFRPTTtjb25zdCB0b3RhbEJhcldpZHRoPXRoaXMuY2hhcnRXaWR0aF8tQ0hBUlRfUEFERElOR19MRUZULQotQ0hBUlRfUEFERElOR19SSUdIVDtjb25zdCBiYXJXaWR0aD1NYXRoLmZsb29yKHRvdGFsQmFyV2lkdGgvbGVuKTtjb25zdCB0aWNrWUludGVydmFsPWhlaWdodC8oVkVSVElDQUxfVElDS1MtMSk7bGV0IHRpY2tZUG9zaXRpb249MDtjb25zdCB0aWNrVmFsSW50ZXJ2YWw9KG1heC1taW4pLyhWRVJUSUNBTF9USUNLUy0xKTtsZXQgdGlja1ZhbD0wO3RoaXMuY2hhcnRDdHhfLmZpbGxTdHlsZT0nIzMzMyc7dGhpcy5jaGFydEN0eF8uc3Ryb2tlU3R5bGU9JyM3NzcnO3RoaXMuY2hhcnRDdHhfLnNhdmUoKTt0aGlzLmNoYXJ0Q3R4Xy50cmFuc2xhdGUoMC41LDAuNSk7dGhpcy5jaGFydEN0eF8uc2F2ZSgpO3RoaXMuY2hhcnRDdHhfLnRyYW5zbGF0ZShBWElTX1BBRERJTkdfTEVGVCxBWElTX1BBRERJTkdfVE9QKTt0aGlzLmNoYXJ0Q3R4Xy5tb3ZlVG8oMCwwKTt0aGlzLmNoYXJ0Q3R4Xy5saW5lVG8oMCxoZWlnaHQpO3RoaXMuY2hhcnRDdHhfLmxpbmVUbyh3aWR0aCxoZWlnaHQpO3RoaXMuY2hhcnRDdHhfLmZvbnQ9JzEwcHggQXJpYWwnO3RoaXMuY2hhcnRDdHhfLnRleHRBbGlnbj0ncmlnaHQnO3RoaXMuY2hhcnRDdHhfLnRleHRCYXNlbGluZT0nbWlkZGxlJztmb3IobGV0IHQ9MDt0PFZFUlRJQ0FMX1RJQ0tTO3QrKyl7dGlja1lQb3NpdGlvbj1NYXRoLnJvdW5kKHQqdGlja1lJbnRlcnZhbCk7dGlja1ZhbD0obWF4LXQqdGlja1ZhbEludGVydmFsKS50b0ZpeGVkKDQpO3RoaXMuY2hhcnRDdHhfLm1vdmVUbygwLHRpY2tZUG9zaXRpb24pO3RoaXMuY2hhcnRDdHhfLmxpbmVUbygtQVhJU19USUNLX1NJWkUsdGlja1lQb3NpdGlvbik7dGhpcy5jaGFydEN0eF8uZmlsbFRleHQodGlja1ZhbCwtQVhJU19USUNLX1NJWkUtQVhJU19MQUJFTF9QQURESU5HLHRpY2tZUG9zaXRpb24pO30KLXRoaXMuY2hhcnRDdHhfLnN0cm9rZSgpO3RoaXMuY2hhcnRDdHhfLnJlc3RvcmUoKTt0aGlzLmNoYXJ0Q3R4Xy5zYXZlKCk7dGhpcy5jaGFydEN0eF8udHJhbnNsYXRlKENIQVJUX1BBRERJTkdfTEVGVCtNYXRoLnJvdW5kKGJhcldpZHRoKjAuNSksQVhJU19QQURESU5HX1RPUCtoZWlnaHQrTEFCRUxfUEFERElORyk7dGhpcy5jaGFydEN0eF8uZm9udD0nMTBweCBBcmlhbCc7dGhpcy5jaGFydEN0eF8udGV4dEFsaWduPSdjZW50ZXInO3RoaXMuY2hhcnRDdHhfLnRleHRCYXNlbGluZT0ndG9wJztsZXQgbGFiZWxUaWNrTGVmdDtsZXQgbGFiZWxUaWNrQm90dG9tO2ZvcihsZXQgbD0wO2w8bGVuO2wrKyl7bGFiZWxUaWNrTGVmdD1NYXRoLnJvdW5kKGwqYmFyV2lkdGgpO2xhYmVsVGlja0JvdHRvbT1sJTIqTEFCRUxfSU5URVJMRUFWRV9PRkZTRVQ7dGhpcy5jaGFydEN0eF8uc2F2ZSgpO3RoaXMuY2hhcnRDdHhfLm1vdmVUbyhsYWJlbFRpY2tMZWZ0LC1MQUJFTF9QQURESU5HKTt0aGlzLmNoYXJ0Q3R4Xy5saW5lVG8obGFiZWxUaWNrTGVmdCxsYWJlbFRpY2tCb3R0b20pO3RoaXMuY2hhcnRDdHhfLnN0cm9rZSgpO3RoaXMuY2hhcnRDdHhfLnJlc3RvcmUoKTt0aGlzLmNoYXJ0Q3R4Xy5maWxsVGV4dCh0aGlzLm9wc1RpbWluZ0RhdGFfW2xdLmNtZF9zdHJpbmcsbGFiZWxUaWNrTGVmdCxsYWJlbFRpY2tCb3R0b20pO30KLXRoaXMuY2hhcnRDdHhfLnJlc3RvcmUoKTt0aGlzLmNoYXJ0Q3R4Xy5yZXN0b3JlKCk7fSxjbGVhckNoYXJ0Q29udGVudHNfKCl7dGhpcy5jaGFydEN0eF8uY2xlYXJSZWN0KDAsMCx0aGlzLmNoYXJ0V2lkdGhfLHRoaXMuY2hhcnRIZWlnaHRfKTt9LHNob3dOb1RpbWluZ0RhdGFNZXNzYWdlXygpe3RoaXMuY2hhcnRDdHhfLmZvbnQ9JzgwMCBpdGFsaWMgMTRweCBBcmlhbCc7dGhpcy5jaGFydEN0eF8uZmlsbFN0eWxlPScjMzMzJzt0aGlzLmNoYXJ0Q3R4Xy50ZXh0QWxpZ249J2NlbnRlcic7dGhpcy5jaGFydEN0eF8udGV4dEJhc2VsaW5lPSdtaWRkbGUnO3RoaXMuY2hhcnRDdHhfLmZpbGxUZXh0KCdObyB0aW1pbmcgZGF0YSBhdmFpbGFibGUuJyx0aGlzLmNoYXJ0V2lkdGhfKjAuNSx0aGlzLmNoYXJ0SGVpZ2h0XyowLjUpO30sY29sbGFwc2VPcHNUb1RpbWluZ0J1Y2tldHNfKG9wcyl7Y29uc3Qgb3BzVGltaW5nRGF0YUluZGV4SGFzaF89e307Y29uc3QgdGltaW5nRGF0YT10aGlzLm9wc1RpbWluZ0RhdGFfO2xldCBvcDtsZXQgb3BJbmRleDtmb3IobGV0IGk9MDtpPG9wcy5sZW5ndGg7aSsrKXtvcD1vcHNbaV07aWYob3AuY21kX3RpbWU9PT11bmRlZmluZWQpY29udGludWU7b3BJbmRleD1vcHNUaW1pbmdEYXRhSW5kZXhIYXNoX1tvcC5jbWRfc3RyaW5nXXx8bnVsbDtpZihvcEluZGV4PT09bnVsbCl7dGltaW5nRGF0YS5wdXNoKHtjbWRfdGltZTowLGNtZF9zdHJpbmc6b3AuY21kX3N0cmluZ30pO29wSW5kZXg9dGltaW5nRGF0YS5sZW5ndGgtMTtvcHNUaW1pbmdEYXRhSW5kZXhIYXNoX1tvcC5jbWRfc3RyaW5nXT1vcEluZGV4O30KLXRpbWluZ0RhdGFbb3BJbmRleF0uY21kX3RpbWUrPW9wLmNtZF90aW1lO30KLXRpbWluZ0RhdGEuc29ydCh0aGlzLnNvcnRUaW1pbmdCdWNrZXRzQnlPcFRpbWVEZXNjZW5kaW5nXyk7dGhpcy5jb2xsYXBzZVRpbWluZ0J1Y2tldHNUb090aGVyXyg0KTt9LGNvbGxhcHNlVGltaW5nQnVja2V0c1RvT3RoZXJfKGNvdW50KXtjb25zdCB0aW1pbmdEYXRhPXRoaXMub3BzVGltaW5nRGF0YV87Y29uc3Qgb3RoZXJTb3VyY2U9dGltaW5nRGF0YS5zcGxpY2UoY291bnQsdGltaW5nRGF0YS5sZW5ndGgtY291bnQpO2xldCBvdGhlckRlc3RpbmF0aW9uPW51bGw7aWYoIW90aGVyU291cmNlLmxlbmd0aClyZXR1cm47dGltaW5nRGF0YS5wdXNoKHtjbWRfdGltZTowLGNtZF9zdHJpbmc6J090aGVyJ30pO290aGVyRGVzdGluYXRpb249dGltaW5nRGF0YVt0aW1pbmdEYXRhLmxlbmd0aC0xXTtmb3IobGV0IGk9MDtpPG90aGVyU291cmNlLmxlbmd0aDtpKyspe290aGVyRGVzdGluYXRpb24uY21kX3RpbWUrPW90aGVyU291cmNlW2ldLmNtZF90aW1lO319LHNvcnRUaW1pbmdCdWNrZXRzQnlPcFRpbWVEZXNjZW5kaW5nXyhhLGIpe3JldHVybiBiLmNtZF90aW1lLWEuY21kX3RpbWU7fSxyZXNldE9wc1RpbWluZ0RhdGFfKCl7dGhpcy5vcHNUaW1pbmdEYXRhXy5sZW5ndGg9MDt9fTtyZXR1cm57UGljdHVyZU9wc0NoYXJ0U3VtbWFyeVZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuY2hyb21lLmNjJyxmdW5jdGlvbigpe2NvbnN0IEJBUl9QQURESU5HPTE7Y29uc3QgQkFSX1dJRFRIPTU7Y29uc3QgQ0hBUlRfUEFERElOR19MRUZUPTY1O2NvbnN0IENIQVJUX1BBRERJTkdfUklHSFQ9MzA7Y29uc3QgQ0hBUlRfUEFERElOR19CT1RUT009MzU7Y29uc3QgQ0hBUlRfUEFERElOR19UT1A9MjA7Y29uc3QgQVhJU19QQURESU5HX0xFRlQ9NTU7Y29uc3QgQVhJU19QQURESU5HX1JJR0hUPTMwO2NvbnN0IEFYSVNfUEFERElOR19CT1RUT009MzU7Y29uc3QgQVhJU19QQURESU5HX1RPUD0yMDtjb25zdCBBWElTX1RJQ0tfU0laRT01O2NvbnN0IEFYSVNfTEFCRUxfUEFERElORz01O2NvbnN0IFZFUlRJQ0FMX1RJQ0tTPTU7Y29uc3QgSFVFX0NIQVJfQ09ERV9BREpVU1RNRU5UPTUuNztjb25zdCBQaWN0dXJlT3BzQ2hhcnRWaWV3PXRyLnVpLmIuZGVmaW5lKCd0ci11aS1lLWNocm9tZS1jYy1waWN0dXJlLW9wcy1jaGFydC12aWV3Jyk7UGljdHVyZU9wc0NoYXJ0Vmlldy5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoKXt0aGlzLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLnN0eWxlLmhlaWdodD0nMTgwcHgnO3RoaXMuc3R5bGUubWFyZ2luPTA7dGhpcy5zdHlsZS5wYWRkaW5nPTA7dGhpcy5zdHlsZS5wb3NpdGlvbj0ncmVsYXRpdmUnO3RoaXMucGljdHVyZV89dW5kZWZpbmVkO3RoaXMucGljdHVyZU9wc189dW5kZWZpbmVkO3RoaXMub3BDb3N0c189dW5kZWZpbmVkO3RoaXMuY2hhcnRTY2FsZV89d2luZG93LmRldmljZVBpeGVsUmF0aW87dGhpcy5jaGFydF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7dGhpcy5jaGFydEN0eF89dGhpcy5jaGFydF8uZ2V0Q29udGV4dCgnMmQnKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmNoYXJ0Xyk7dGhpcy5zZWxlY3RlZE9wSW5kZXhfPXVuZGVmaW5lZDt0aGlzLmNoYXJ0V2lkdGhfPTA7dGhpcy5jaGFydEhlaWdodF89MDt0aGlzLmRpbWVuc2lvbnNIYXZlQ2hhbmdlZF89dHJ1ZTt0aGlzLmN1cnJlbnRCYXJNb3VzZU92ZXJUYXJnZXRfPXVuZGVmaW5lZDt0aGlzLm5pbmV0eUZpZnRoUGVyY2VudGlsZUNvc3RfPTA7dGhpcy50b3RhbE9wQ29zdF89MDt0aGlzLmNoYXJ0Xy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsdGhpcy5vbkNsaWNrXy5iaW5kKHRoaXMpKTt0aGlzLmNoYXJ0Xy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLHRoaXMub25Nb3VzZU1vdmVfLmJpbmQodGhpcykpO3RoaXMudXNlUGVyY2VudGlsZVNjYWxlXz1mYWxzZTt0aGlzLnVzZVBlcmNlbnRpbGVTY2FsZUNoZWNrYm94Xz10ci51aS5iLmNyZWF0ZUNoZWNrQm94KHRoaXMsJ3VzZVBlcmNlbnRpbGVTY2FsZScsJ1BpY3R1cmVPcHNDaGFydFZpZXcudXNlUGVyY2VudGlsZVNjYWxlJyxmYWxzZSwnTGltaXQgdG8gOTUlLWlsZScpO1BvbHltZXIuZG9tKHRoaXMudXNlUGVyY2VudGlsZVNjYWxlQ2hlY2tib3hfKS5jbGFzc0xpc3QuYWRkKCd1c2UtcGVyY2VudGlsZS1zY2FsZScpO3RoaXMudXNlUGVyY2VudGlsZVNjYWxlQ2hlY2tib3hfLnN0eWxlLnBvc2l0aW9uPSdhYnNvbHV0ZSc7dGhpcy51c2VQZXJjZW50aWxlU2NhbGVDaGVja2JveF8uc3R5bGUubGVmdD0wO3RoaXMudXNlUGVyY2VudGlsZVNjYWxlQ2hlY2tib3hfLnN0eWxlLnRvcD0wO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMudXNlUGVyY2VudGlsZVNjYWxlQ2hlY2tib3hfKTt9LGdldCBkaW1lbnNpb25zSGF2ZUNoYW5nZWQoKXtyZXR1cm4gdGhpcy5kaW1lbnNpb25zSGF2ZUNoYW5nZWRfO30sc2V0IGRpbWVuc2lvbnNIYXZlQ2hhbmdlZChkaW1lbnNpb25zSGF2ZUNoYW5nZWQpe3RoaXMuZGltZW5zaW9uc0hhdmVDaGFuZ2VkXz1kaW1lbnNpb25zSGF2ZUNoYW5nZWQ7fSxnZXQgdXNlUGVyY2VudGlsZVNjYWxlKCl7cmV0dXJuIHRoaXMudXNlUGVyY2VudGlsZVNjYWxlXzt9LHNldCB1c2VQZXJjZW50aWxlU2NhbGUodXNlUGVyY2VudGlsZVNjYWxlKXt0aGlzLnVzZVBlcmNlbnRpbGVTY2FsZV89dXNlUGVyY2VudGlsZVNjYWxlO3RoaXMuZHJhd0NoYXJ0Q29udGVudHNfKCk7fSxnZXQgbnVtT3BzKCl7cmV0dXJuIHRoaXMub3BDb3N0c18ubGVuZ3RoO30sZ2V0IHNlbGVjdGVkT3BJbmRleCgpe3JldHVybiB0aGlzLnNlbGVjdGVkT3BJbmRleF87fSxzZXQgc2VsZWN0ZWRPcEluZGV4KHNlbGVjdGVkT3BJbmRleCl7aWYoc2VsZWN0ZWRPcEluZGV4PDApdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4Jyk7aWYoc2VsZWN0ZWRPcEluZGV4Pj10aGlzLm51bU9wcyl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTt0aGlzLnNlbGVjdGVkT3BJbmRleF89c2VsZWN0ZWRPcEluZGV4O30sZ2V0IHBpY3R1cmUoKXtyZXR1cm4gdGhpcy5waWN0dXJlXzt9LHNldCBwaWN0dXJlKHBpY3R1cmUpe3RoaXMucGljdHVyZV89cGljdHVyZTt0aGlzLnBpY3R1cmVPcHNfPXBpY3R1cmUudGFnT3BzV2l0aFRpbWluZ3MocGljdHVyZS5nZXRPcHMoKSk7dGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0Xz11bmRlZmluZWQ7dGhpcy5wcm9jZXNzUGljdHVyZURhdGFfKCk7dGhpcy5kaW1lbnNpb25zSGF2ZUNoYW5nZWQ9dHJ1ZTt9LHByb2Nlc3NQaWN0dXJlRGF0YV8oKXtpZih0aGlzLnBpY3R1cmVPcHNfPT09dW5kZWZpbmVkKXJldHVybjtsZXQgdG90YWxPcENvc3Q9MDt0aGlzLm9wQ29zdHNfPXRoaXMucGljdHVyZU9wc18ubWFwKGZ1bmN0aW9uKG9wKXt0b3RhbE9wQ29zdCs9b3AuY21kX3RpbWU7cmV0dXJuIG9wLmNtZF90aW1lO30pO3RoaXMub3BDb3N0c18uc29ydCgpO2NvbnN0IG5pbmV0eUZpZnRoUGVyY2VudGlsZUNvc3RJbmRleD1NYXRoLmZsb29yKHRoaXMub3BDb3N0c18ubGVuZ3RoKjAuOTUpO3RoaXMubmluZXR5RmlmdGhQZXJjZW50aWxlQ29zdF89dGhpcy5vcENvc3RzX1tuaW5ldHlGaWZ0aFBlcmNlbnRpbGVDb3N0SW5kZXhdO3RoaXMubWF4Q29zdF89dGhpcy5vcENvc3RzX1t0aGlzLm9wQ29zdHNfLmxlbmd0aC0xXTt0aGlzLnRvdGFsT3BDb3N0Xz10b3RhbE9wQ29zdDt9LGV4dHJhY3RCYXJJbmRleF8oZSl7bGV0IGluZGV4PXVuZGVmaW5lZDtpZih0aGlzLnBpY3R1cmVPcHNfPT09dW5kZWZpbmVkfHx0aGlzLnBpY3R1cmVPcHNfLmxlbmd0aD09PTApe3JldHVybiBpbmRleDt9Ci1jb25zdCB4PWUub2Zmc2V0WDtjb25zdCB5PWUub2Zmc2V0WTtjb25zdCB0b3RhbEJhcldpZHRoPShCQVJfV0lEVEgrQkFSX1BBRERJTkcpKnRoaXMucGljdHVyZU9wc18ubGVuZ3RoO2NvbnN0IGNoYXJ0TGVmdD1DSEFSVF9QQURESU5HX0xFRlQ7Y29uc3QgY2hhcnRUb3A9MDtjb25zdCBjaGFydEJvdHRvbT10aGlzLmNoYXJ0SGVpZ2h0Xy1DSEFSVF9QQURESU5HX0JPVFRPTTtjb25zdCBjaGFydFJpZ2h0PWNoYXJ0TGVmdCt0b3RhbEJhcldpZHRoO2lmKHg8Y2hhcnRMZWZ0fHx4PmNoYXJ0UmlnaHR8fHk8Y2hhcnRUb3B8fHk+Y2hhcnRCb3R0b20pe3JldHVybiBpbmRleDt9Ci1pbmRleD1NYXRoLmZsb29yKCh4LWNoYXJ0TGVmdCkvdG90YWxCYXJXaWR0aCp0aGlzLnBpY3R1cmVPcHNfLmxlbmd0aCk7aW5kZXg9dHIuYi5tYXRoLmNsYW1wKGluZGV4LDAsdGhpcy5waWN0dXJlT3BzXy5sZW5ndGgtMSk7cmV0dXJuIGluZGV4O30sb25DbGlja18oZSl7Y29uc3QgYmFyQ2xpY2tlZD10aGlzLmV4dHJhY3RCYXJJbmRleF8oZSk7aWYoYmFyQ2xpY2tlZD09PXVuZGVmaW5lZClyZXR1cm47aWYoYmFyQ2xpY2tlZD09PXRoaXMuc2VsZWN0ZWRPcEluZGV4KXt0aGlzLnNlbGVjdGVkT3BJbmRleD11bmRlZmluZWQ7fWVsc2V7dGhpcy5zZWxlY3RlZE9wSW5kZXg9YmFyQ2xpY2tlZDt9Ci1lLnByZXZlbnREZWZhdWx0KCk7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ3NlbGVjdGlvbi1jaGFuZ2VkJyxmYWxzZSk7fSxvbk1vdXNlTW92ZV8oZSl7Y29uc3QgbGFzdEJhck1vdXNlT3ZlclRhcmdldD10aGlzLmN1cnJlbnRCYXJNb3VzZU92ZXJUYXJnZXRfO3RoaXMuY3VycmVudEJhck1vdXNlT3ZlclRhcmdldF89dGhpcy5leHRyYWN0QmFySW5kZXhfKGUpO2lmKHRoaXMuY3VycmVudEJhck1vdXNlT3ZlclRhcmdldF89PT1sYXN0QmFyTW91c2VPdmVyVGFyZ2V0KXtyZXR1cm47fQotdGhpcy5kcmF3Q2hhcnRDb250ZW50c18oKTt9LHNjcm9sbFNlbGVjdGVkSXRlbUludG9WaWV3SWZOZWNlc3NhcnkoKXtpZih0aGlzLnNlbGVjdGVkT3BJbmRleD09PXVuZGVmaW5lZCl7cmV0dXJuO30KLWNvbnN0IHdpZHRoPXRoaXMub2Zmc2V0V2lkdGg7Y29uc3QgbGVmdD10aGlzLnNjcm9sbExlZnQ7Y29uc3QgcmlnaHQ9bGVmdCt3aWR0aDtjb25zdCB0YXJnZXRMZWZ0PUNIQVJUX1BBRERJTkdfTEVGVCsKLShCQVJfV0lEVEgrQkFSX1BBRERJTkcpKnRoaXMuc2VsZWN0ZWRPcEluZGV4O2lmKHRhcmdldExlZnQ+bGVmdCYmdGFyZ2V0TGVmdDxyaWdodCl7cmV0dXJuO30KLXRoaXMuc2Nyb2xsTGVmdD0odGFyZ2V0TGVmdC13aWR0aCowLjUpO30sdXBkYXRlQ2hhcnRDb250ZW50cygpe2lmKHRoaXMuZGltZW5zaW9uc0hhdmVDaGFuZ2VkKXt0aGlzLnVwZGF0ZUNoYXJ0RGltZW5zaW9uc18oKTt9Ci10aGlzLmRyYXdDaGFydENvbnRlbnRzXygpO30sdXBkYXRlQ2hhcnREaW1lbnNpb25zXygpe2lmKCF0aGlzLnBpY3R1cmVPcHNfKXJldHVybjtsZXQgd2lkdGg9Q0hBUlRfUEFERElOR19MRUZUK0NIQVJUX1BBRERJTkdfUklHSFQrCi0oKEJBUl9XSURUSCtCQVJfUEFERElORykqdGhpcy5waWN0dXJlT3BzXy5sZW5ndGgpO2lmKHdpZHRoPHRoaXMub2Zmc2V0V2lkdGgpe3dpZHRoPXRoaXMub2Zmc2V0V2lkdGg7fQotdGhpcy5jaGFydFdpZHRoXz13aWR0aDt0aGlzLmNoYXJ0SGVpZ2h0Xz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDt0aGlzLmNoYXJ0Xy53aWR0aD10aGlzLmNoYXJ0V2lkdGhfKnRoaXMuY2hhcnRTY2FsZV87dGhpcy5jaGFydF8uaGVpZ2h0PXRoaXMuY2hhcnRIZWlnaHRfKnRoaXMuY2hhcnRTY2FsZV87dGhpcy5jaGFydF8uc3R5bGUud2lkdGg9dGhpcy5jaGFydFdpZHRoXysncHgnO3RoaXMuY2hhcnRfLnN0eWxlLmhlaWdodD10aGlzLmNoYXJ0SGVpZ2h0XysncHgnO3RoaXMuY2hhcnRDdHhfLnNjYWxlKHRoaXMuY2hhcnRTY2FsZV8sdGhpcy5jaGFydFNjYWxlXyk7dGhpcy5kaW1lbnNpb25zSGF2ZUNoYW5nZWQ9ZmFsc2U7fSxkcmF3Q2hhcnRDb250ZW50c18oKXt0aGlzLmNsZWFyQ2hhcnRDb250ZW50c18oKTtpZih0aGlzLnBpY3R1cmVPcHNfPT09dW5kZWZpbmVkfHx0aGlzLnBpY3R1cmVPcHNfLmxlbmd0aD09PTB8fHRoaXMucGljdHVyZU9wc19bMF0uY21kX3RpbWU9PT11bmRlZmluZWQpe3RoaXMuc2hvd05vVGltaW5nRGF0YU1lc3NhZ2VfKCk7cmV0dXJuO30KLXRoaXMuZHJhd1NlbGVjdGlvbl8oKTt0aGlzLmRyYXdCYXJzXygpO3RoaXMuZHJhd0NoYXJ0QXhlc18oKTt0aGlzLmRyYXdMaW5lc0F0VGlja01hcmtzXygpO3RoaXMuZHJhd0xpbmVBdEJvdHRvbU9mQ2hhcnRfKCk7aWYodGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0Xz09PXVuZGVmaW5lZCl7cmV0dXJuO30KLXRoaXMuZHJhd1Rvb2x0aXBfKCk7fSxkcmF3U2VsZWN0aW9uXygpe2lmKHRoaXMuc2VsZWN0ZWRPcEluZGV4PT09dW5kZWZpbmVkKXtyZXR1cm47fQotY29uc3Qgd2lkdGg9KEJBUl9XSURUSCtCQVJfUEFERElORykqdGhpcy5zZWxlY3RlZE9wSW5kZXg7dGhpcy5jaGFydEN0eF8uZmlsbFN0eWxlPSdyZ2IoMjIzLCAyMzUsIDIzMCknO3RoaXMuY2hhcnRDdHhfLmZpbGxSZWN0KENIQVJUX1BBRERJTkdfTEVGVCxDSEFSVF9QQURESU5HX1RPUCx3aWR0aCx0aGlzLmNoYXJ0SGVpZ2h0Xy1DSEFSVF9QQURESU5HX1RPUC1DSEFSVF9QQURESU5HX0JPVFRPTSk7fSxkcmF3Q2hhcnRBeGVzXygpe2NvbnN0IG1pbj10aGlzLm9wQ29zdHNfWzBdO2NvbnN0IG1heD10aGlzLm9wQ29zdHNfW3RoaXMub3BDb3N0c18ubGVuZ3RoLTFdO2NvbnN0IGhlaWdodD10aGlzLmNoYXJ0SGVpZ2h0Xy1BWElTX1BBRERJTkdfVE9QLUFYSVNfUEFERElOR19CT1RUT007Y29uc3QgdGlja1lJbnRlcnZhbD1oZWlnaHQvKFZFUlRJQ0FMX1RJQ0tTLTEpO2xldCB0aWNrWVBvc2l0aW9uPTA7Y29uc3QgdGlja1ZhbEludGVydmFsPShtYXgtbWluKS8oVkVSVElDQUxfVElDS1MtMSk7bGV0IHRpY2tWYWw9MDt0aGlzLmNoYXJ0Q3R4Xy5maWxsU3R5bGU9JyMzMzMnO3RoaXMuY2hhcnRDdHhfLnN0cm9rZVN0eWxlPScjNzc3Jzt0aGlzLmNoYXJ0Q3R4Xy5zYXZlKCk7dGhpcy5jaGFydEN0eF8udHJhbnNsYXRlKDAuNSwwLjUpO3RoaXMuY2hhcnRDdHhfLmJlZ2luUGF0aCgpO3RoaXMuY2hhcnRDdHhfLm1vdmVUbyhBWElTX1BBRERJTkdfTEVGVCxBWElTX1BBRERJTkdfVE9QKTt0aGlzLmNoYXJ0Q3R4Xy5saW5lVG8oQVhJU19QQURESU5HX0xFRlQsdGhpcy5jaGFydEhlaWdodF8tCi1BWElTX1BBRERJTkdfQk9UVE9NKTt0aGlzLmNoYXJ0Q3R4Xy5saW5lVG8odGhpcy5jaGFydFdpZHRoXy1BWElTX1BBRERJTkdfUklHSFQsdGhpcy5jaGFydEhlaWdodF8tQVhJU19QQURESU5HX0JPVFRPTSk7dGhpcy5jaGFydEN0eF8uc3Ryb2tlKCk7dGhpcy5jaGFydEN0eF8uY2xvc2VQYXRoKCk7dGhpcy5jaGFydEN0eF8udHJhbnNsYXRlKEFYSVNfUEFERElOR19MRUZULEFYSVNfUEFERElOR19UT1ApO3RoaXMuY2hhcnRDdHhfLmZvbnQ9JzEwcHggQXJpYWwnO3RoaXMuY2hhcnRDdHhfLnRleHRBbGlnbj0ncmlnaHQnO3RoaXMuY2hhcnRDdHhfLnRleHRCYXNlbGluZT0nbWlkZGxlJzt0aGlzLmNoYXJ0Q3R4Xy5iZWdpblBhdGgoKTtmb3IobGV0IHQ9MDt0PFZFUlRJQ0FMX1RJQ0tTO3QrKyl7dGlja1lQb3NpdGlvbj1NYXRoLnJvdW5kKHQqdGlja1lJbnRlcnZhbCk7dGlja1ZhbD0obWF4LXQqdGlja1ZhbEludGVydmFsKS50b0ZpeGVkKDQpO3RoaXMuY2hhcnRDdHhfLm1vdmVUbygwLHRpY2tZUG9zaXRpb24pO3RoaXMuY2hhcnRDdHhfLmxpbmVUbygtQVhJU19USUNLX1NJWkUsdGlja1lQb3NpdGlvbik7dGhpcy5jaGFydEN0eF8uZmlsbFRleHQodGlja1ZhbCwtQVhJU19USUNLX1NJWkUtQVhJU19MQUJFTF9QQURESU5HLHRpY2tZUG9zaXRpb24pO30KLXRoaXMuY2hhcnRDdHhfLnN0cm9rZSgpO3RoaXMuY2hhcnRDdHhfLmNsb3NlUGF0aCgpO3RoaXMuY2hhcnRDdHhfLnJlc3RvcmUoKTt9LGRyYXdMaW5lc0F0VGlja01hcmtzXygpe2NvbnN0IGhlaWdodD10aGlzLmNoYXJ0SGVpZ2h0Xy1BWElTX1BBRERJTkdfVE9QLUFYSVNfUEFERElOR19CT1RUT007Y29uc3Qgd2lkdGg9dGhpcy5jaGFydFdpZHRoXy1BWElTX1BBRERJTkdfTEVGVC1BWElTX1BBRERJTkdfUklHSFQ7Y29uc3QgdGlja1lJbnRlcnZhbD1oZWlnaHQvKFZFUlRJQ0FMX1RJQ0tTLTEpO2xldCB0aWNrWVBvc2l0aW9uPTA7dGhpcy5jaGFydEN0eF8uc2F2ZSgpO3RoaXMuY2hhcnRDdHhfLnRyYW5zbGF0ZShBWElTX1BBRERJTkdfTEVGVCswLjUsQVhJU19QQURESU5HX1RPUCswLjUpO3RoaXMuY2hhcnRDdHhfLmJlZ2luUGF0aCgpO3RoaXMuY2hhcnRDdHhfLnN0cm9rZVN0eWxlPSdyZ2JhKDAsMCwwLDAuMDUpJztmb3IobGV0IHQ9MDt0PFZFUlRJQ0FMX1RJQ0tTO3QrKyl7dGlja1lQb3NpdGlvbj1NYXRoLnJvdW5kKHQqdGlja1lJbnRlcnZhbCk7dGhpcy5jaGFydEN0eF8ubW92ZVRvKDAsdGlja1lQb3NpdGlvbik7dGhpcy5jaGFydEN0eF8ubGluZVRvKHdpZHRoLHRpY2tZUG9zaXRpb24pO3RoaXMuY2hhcnRDdHhfLnN0cm9rZSgpO30KLXRoaXMuY2hhcnRDdHhfLnJlc3RvcmUoKTt0aGlzLmNoYXJ0Q3R4Xy5jbG9zZVBhdGgoKTt9LGRyYXdMaW5lQXRCb3R0b21PZkNoYXJ0Xygpe3RoaXMuY2hhcnRDdHhfLnN0cm9rZVN0eWxlPScjQUFBJzt0aGlzLmNoYXJ0Q3R4Xy5iZWdpblBhdGgoKTt0aGlzLmNoYXJ0Q3R4Xy5tb3ZlVG8oMCx0aGlzLmNoYXJ0SGVpZ2h0Xy0wLjUpO3RoaXMuY2hhcnRDdHhfLmxpbmVUbyh0aGlzLmNoYXJ0V2lkdGhfLHRoaXMuY2hhcnRIZWlnaHRfLTAuNSk7dGhpcy5jaGFydEN0eF8uc3Ryb2tlKCk7dGhpcy5jaGFydEN0eF8uY2xvc2VQYXRoKCk7fSxkcmF3VG9vbHRpcF8oKXtjb25zdCB0b29sdGlwRGF0YT10aGlzLnBpY3R1cmVPcHNfW3RoaXMuY3VycmVudEJhck1vdXNlT3ZlclRhcmdldF9dO2NvbnN0IHRvb2x0aXBUaXRsZT10b29sdGlwRGF0YS5jbWRfc3RyaW5nO2NvbnN0IHRvb2x0aXBUaW1lPXRvb2x0aXBEYXRhLmNtZF90aW1lLnRvRml4ZWQoNCk7Y29uc3QgdG9vbFRpcFRpbWVQZXJjZW50YWdlPSgodG9vbHRpcERhdGEuY21kX3RpbWUvdGhpcy50b3RhbE9wQ29zdF8pKjEwMCkudG9GaXhlZCgyKTtjb25zdCB0b29sdGlwV2lkdGg9MTIwO2NvbnN0IHRvb2x0aXBIZWlnaHQ9NDA7Y29uc3QgY2hhcnRJbm5lcldpZHRoPXRoaXMuY2hhcnRXaWR0aF8tQ0hBUlRfUEFERElOR19SSUdIVC0KLUNIQVJUX1BBRERJTkdfTEVGVDtjb25zdCBiYXJXaWR0aD1CQVJfV0lEVEgrQkFSX1BBRERJTkc7Y29uc3QgdG9vbHRpcE9mZnNldD1NYXRoLnJvdW5kKCh0b29sdGlwV2lkdGgtYmFyV2lkdGgpKjAuNSk7Y29uc3QgbGVmdD1DSEFSVF9QQURESU5HX0xFRlQrdGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0XypiYXJXaWR0aC10b29sdGlwT2Zmc2V0O2NvbnN0IHRvcD1NYXRoLnJvdW5kKCh0aGlzLmNoYXJ0SGVpZ2h0Xy10b29sdGlwSGVpZ2h0KSowLjUpO3RoaXMuY2hhcnRDdHhfLnNhdmUoKTt0aGlzLmNoYXJ0Q3R4Xy5zaGFkb3dPZmZzZXRYPTA7dGhpcy5jaGFydEN0eF8uc2hhZG93T2Zmc2V0WT01O3RoaXMuY2hhcnRDdHhfLnNoYWRvd0JsdXI9NDt0aGlzLmNoYXJ0Q3R4Xy5zaGFkb3dDb2xvcj0ncmdiYSgwLDAsMCwwLjQpJzt0aGlzLmNoYXJ0Q3R4Xy5zdHJva2VTdHlsZT0nIzg4OCc7dGhpcy5jaGFydEN0eF8uZmlsbFN0eWxlPScjRUVFJzt0aGlzLmNoYXJ0Q3R4Xy5maWxsUmVjdChsZWZ0LHRvcCx0b29sdGlwV2lkdGgsdG9vbHRpcEhlaWdodCk7dGhpcy5jaGFydEN0eF8uc2hhZG93Q29sb3I9J3RyYW5zcGFyZW50Jzt0aGlzLmNoYXJ0Q3R4Xy50cmFuc2xhdGUoMC41LDAuNSk7dGhpcy5jaGFydEN0eF8uc3Ryb2tlUmVjdChsZWZ0LHRvcCx0b29sdGlwV2lkdGgsdG9vbHRpcEhlaWdodCk7dGhpcy5jaGFydEN0eF8ucmVzdG9yZSgpO3RoaXMuY2hhcnRDdHhfLmZpbGxTdHlsZT0nIzIyMic7dGhpcy5jaGFydEN0eF8udGV4dEFsaWduPSdsZWZ0Jzt0aGlzLmNoYXJ0Q3R4Xy50ZXh0QmFzZWxpbmU9J3RvcCc7dGhpcy5jaGFydEN0eF8uZm9udD0nODAwIDEycHggQXJpYWwnO3RoaXMuY2hhcnRDdHhfLmZpbGxUZXh0KHRvb2x0aXBUaXRsZSxsZWZ0KzgsdG9wKzgpO3RoaXMuY2hhcnRDdHhfLmZpbGxTdHlsZT0nIzU1NSc7dGhpcy5jaGFydEN0eF8uZm9udD0nNDAwIGl0YWxpYyAxMHB4IEFyaWFsJzt0aGlzLmNoYXJ0Q3R4Xy5maWxsVGV4dCh0b29sdGlwVGltZSsnbXMgKCcrCi10b29sVGlwVGltZVBlcmNlbnRhZ2UrJyUpJyxsZWZ0KzgsdG9wKzIyKTt9LGRyYXdCYXJzXygpe2xldCBvcDtsZXQgb3BDb2xvcj0wO2xldCBvcEhlaWdodD0wO2NvbnN0IG9wV2lkdGg9QkFSX1dJRFRIK0JBUl9QQURESU5HO2xldCBvcEhvdmVyPWZhbHNlO2NvbnN0IGJvdHRvbT10aGlzLmNoYXJ0SGVpZ2h0Xy1DSEFSVF9QQURESU5HX0JPVFRPTTtjb25zdCBtYXhIZWlnaHQ9dGhpcy5jaGFydEhlaWdodF8tQ0hBUlRfUEFERElOR19CT1RUT00tCi1DSEFSVF9QQURESU5HX1RPUDtsZXQgbWF4VmFsdWU7aWYodGhpcy51c2VQZXJjZW50aWxlU2NhbGUpe21heFZhbHVlPXRoaXMubmluZXR5RmlmdGhQZXJjZW50aWxlQ29zdF87fWVsc2V7bWF4VmFsdWU9dGhpcy5tYXhDb3N0Xzt9Ci1mb3IobGV0IGI9MDtiPHRoaXMucGljdHVyZU9wc18ubGVuZ3RoO2IrKyl7b3A9dGhpcy5waWN0dXJlT3BzX1tiXTtvcEhlaWdodD1NYXRoLnJvdW5kKChvcC5jbWRfdGltZS9tYXhWYWx1ZSkqbWF4SGVpZ2h0KTtvcEhlaWdodD1NYXRoLm1heChvcEhlaWdodCwxKTtvcEhvdmVyPShiPT09dGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0Xyk7b3BDb2xvcj10aGlzLmdldE9wQ29sb3JfKG9wLmNtZF9zdHJpbmcsb3BIb3Zlcik7aWYoYj09PXRoaXMuc2VsZWN0ZWRPcEluZGV4KXt0aGlzLmNoYXJ0Q3R4Xy5maWxsU3R5bGU9JyNGRkZGMDAnO31lbHNle3RoaXMuY2hhcnRDdHhfLmZpbGxTdHlsZT1vcENvbG9yO30KLXRoaXMuY2hhcnRDdHhfLmZpbGxSZWN0KENIQVJUX1BBRERJTkdfTEVGVCtiKm9wV2lkdGgsYm90dG9tLW9wSGVpZ2h0LEJBUl9XSURUSCxvcEhlaWdodCk7fX0sZ2V0T3BDb2xvcl8ob3BOYW1lLGhvdmVyKXtjb25zdCBjaGFyYWN0ZXJzPW9wTmFtZS5zcGxpdCgnJyk7Y29uc3QgaHVlPWNoYXJhY3RlcnMucmVkdWNlKHRoaXMucmVkdWNlTmFtZVRvSHVlLDApJTM2MDtjb25zdCBzYXR1cmF0aW9uPTMwO2NvbnN0IGxpZ2h0bmVzcz1ob3Zlcj8nNzUlJzonNTAlJztyZXR1cm4naHNsKCcraHVlKycsICcrc2F0dXJhdGlvbisnJSwgJytsaWdodG5lc3MrJyUpJzt9LHJlZHVjZU5hbWVUb0h1ZShwcmV2aW91c1ZhbHVlLGN1cnJlbnRWYWx1ZSxpbmRleCxhcnJheSl7cmV0dXJuIE1hdGgucm91bmQocHJldmlvdXNWYWx1ZStjdXJyZW50VmFsdWUuY2hhckNvZGVBdCgwKSpIVUVfQ0hBUl9DT0RFX0FESlVTVE1FTlQpO30sY2xlYXJDaGFydENvbnRlbnRzXygpe3RoaXMuY2hhcnRDdHhfLmNsZWFyUmVjdCgwLDAsdGhpcy5jaGFydFdpZHRoXyx0aGlzLmNoYXJ0SGVpZ2h0Xyk7fSxzaG93Tm9UaW1pbmdEYXRhTWVzc2FnZV8oKXt0aGlzLmNoYXJ0Q3R4Xy5mb250PSc4MDAgaXRhbGljIDE0cHggQXJpYWwnO3RoaXMuY2hhcnRDdHhfLmZpbGxTdHlsZT0nIzMzMyc7dGhpcy5jaGFydEN0eF8udGV4dEFsaWduPSdjZW50ZXInO3RoaXMuY2hhcnRDdHhfLnRleHRCYXNlbGluZT0nbWlkZGxlJzt0aGlzLmNoYXJ0Q3R4Xy5maWxsVGV4dCgnTm8gdGltaW5nIGRhdGEgYXZhaWxhYmxlLicsdGhpcy5jaGFydFdpZHRoXyowLjUsdGhpcy5jaGFydEhlaWdodF8qMC41KTt9fTtyZXR1cm57UGljdHVyZU9wc0NoYXJ0Vmlldyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5jaHJvbWUuY2MnLGZ1bmN0aW9uKCl7Y29uc3QgVEhJU19ET0M9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5vd25lckRvY3VtZW50O2NvbnN0IFBpY3R1cmVEZWJ1Z2dlcj10ci51aS5iLmRlZmluZSgndHItdWktZS1jaHJvbWUtY2MtcGljdHVyZS1kZWJ1Z2dlcicpO1BpY3R1cmVEZWJ1Z2dlci5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoKXtjb25zdCBub2RlPXRyLnVpLmIuaW5zdGFudGlhdGVUZW1wbGF0ZSgnI3RyLXVpLWUtY2hyb21lLWNjLXBpY3R1cmUtZGVidWdnZXItdGVtcGxhdGUnLFRISVNfRE9DKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChub2RlKTt0aGlzLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3RoaXMuc3R5bGUuZmxleEdyb3c9MTt0aGlzLnN0eWxlLmZsZXhTaHJpbms9MTt0aGlzLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5zdHlsZS5mbGV4RGlyZWN0aW9uPSdyb3cnO2NvbnN0IHRpdGxlPXRoaXMucXVlcnlTZWxlY3RvcignLnRpdGxlJyk7dGl0bGUuc3R5bGUuZm9udFdlaWdodD0nYm9sZCc7dGl0bGUuc3R5bGUubWFyZ2luTGVmdD0nNXB4Jzt0aXRsZS5zdHlsZS5tYXJnaW5SaWdodD0nNXB4Jzt0aGlzLnBpY3R1cmVBc0ltYWdlRGF0YV89dW5kZWZpbmVkO3RoaXMuc2hvd092ZXJkcmF3Xz1mYWxzZTt0aGlzLnpvb21TY2FsZVZhbHVlXz0xO3RoaXMuc2l6ZUluZm9fPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJy5zaXplJyk7dGhpcy5yYXN0ZXJBcmVhXz1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCdyYXN0ZXItYXJlYScpO3RoaXMucmFzdGVyQXJlYV8uc3R5bGUuYmFja2dyb3VuZENvbG9yPScjZGRkJzt0aGlzLnJhc3RlckFyZWFfLnN0eWxlLm1pbkhlaWdodD0nMjAwcHgnO3RoaXMucmFzdGVyQXJlYV8uc3R5bGUubWluV2lkdGg9JzIwMHB4Jzt0aGlzLnJhc3RlckFyZWFfLnN0eWxlLm92ZXJmbG93WT0nYXV0byc7dGhpcy5yYXN0ZXJBcmVhXy5zdHlsZS5wYWRkaW5nTGVmdD0nNXB4Jzt0aGlzLnJhc3RlckNhbnZhc189UG9seW1lci5kb20odGhpcy5yYXN0ZXJBcmVhXykucXVlcnlTZWxlY3RvcignY2FudmFzJyk7dGhpcy5yYXN0ZXJDdHhfPXRoaXMucmFzdGVyQ2FudmFzXy5nZXRDb250ZXh0KCcyZCcpO3RoaXMuZmlsZW5hbWVfPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJy5maWxlbmFtZScpO3RoaXMuZmlsZW5hbWVfLnN0eWxlLnVzZXJTZWxlY3Q9J3RleHQnO3RoaXMuZmlsZW5hbWVfLnN0eWxlLm1hcmdpbkxlZnQ9JzVweCc7dGhpcy5kcmF3T3BzQ2hhcnRTdW1tYXJ5Vmlld189bmV3IHRyLnVpLmUuY2hyb21lLmNjLlBpY3R1cmVPcHNDaGFydFN1bW1hcnlWaWV3KCk7dGhpcy5kcmF3T3BzQ2hhcnRWaWV3Xz1uZXcgdHIudWkuZS5jaHJvbWUuY2MuUGljdHVyZU9wc0NoYXJ0VmlldygpO3RoaXMuZHJhd09wc0NoYXJ0Vmlld18uYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uLWNoYW5nZWQnLHRoaXMub25DaGFydEJhckNsaWNrZWRfLmJpbmQodGhpcykpO3RoaXMuZXhwb3J0QnV0dG9uXz1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcuZXhwb3J0Jyk7dGhpcy5leHBvcnRCdXR0b25fLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uU2F2ZUFzU2tQaWN0dXJlQ2xpY2tlZF8uYmluZCh0aGlzKSk7dGhpcy50cmFja01vdXNlXygpO2NvbnN0IG92ZXJkcmF3Q2hlY2tib3g9dHIudWkuYi5jcmVhdGVDaGVja0JveCh0aGlzLCdzaG93T3ZlcmRyYXcnLCdwaWN0dXJlVmlldy5zaG93T3ZlcmRyYXcnLGZhbHNlLCdTaG93IG92ZXJkcmF3Jyk7Y29uc3QgY2hhcnRDaGVja2JveD10ci51aS5iLmNyZWF0ZUNoZWNrQm94KHRoaXMsJ3Nob3dTdW1tYXJ5Q2hhcnQnLCdwaWN0dXJlVmlldy5zaG93U3VtbWFyeUNoYXJ0JyxmYWxzZSwnU2hvdyB0aW1pbmcgc3VtbWFyeScpO2NvbnN0IHBpY3R1cmVJbmZvPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJ3BpY3R1cmUtaW5mbycpO3BpY3R1cmVJbmZvLnN0eWxlLmZsZXhHcm93PTA7cGljdHVyZUluZm8uc3R5bGUuZmxleFNocmluaz0wO3BpY3R1cmVJbmZvLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7cGljdHVyZUluZm8uc3R5bGUucGFkZGluZ1RvcD0nMnB4JztQb2x5bWVyLmRvbShwaWN0dXJlSW5mbykuYXBwZW5kQ2hpbGQob3ZlcmRyYXdDaGVja2JveCk7UG9seW1lci5kb20ocGljdHVyZUluZm8pLmFwcGVuZENoaWxkKGNoYXJ0Q2hlY2tib3gpO3RoaXMuZHJhd09wc1ZpZXdfPW5ldyB0ci51aS5lLmNocm9tZS5jYy5QaWN0dXJlT3BzTGlzdFZpZXcoKTt0aGlzLmRyYXdPcHNWaWV3Xy5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb24tY2hhbmdlZCcsdGhpcy5vbkNoYW5nZURyYXdPcHNfLmJpbmQodGhpcykpO2NvbnN0IGxlZnRQYW5lbD1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCdsZWZ0LXBhbmVsJyk7bGVmdFBhbmVsLnN0eWxlLmZsZXhEaXJlY3Rpb249J2NvbHVtbic7bGVmdFBhbmVsLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO2xlZnRQYW5lbC5zdHlsZS5taW5XaWR0aD0nMzAwcHgnO1BvbHltZXIuZG9tKGxlZnRQYW5lbCkuYXBwZW5kQ2hpbGQodGhpcy5kcmF3T3BzQ2hhcnRTdW1tYXJ5Vmlld18pO1BvbHltZXIuZG9tKGxlZnRQYW5lbCkuYXBwZW5kQ2hpbGQodGhpcy5kcmF3T3BzVmlld18pO2NvbnN0IG1pZGRsZURyYWdIYW5kbGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1kcmFnLWhhbmRsZScpO21pZGRsZURyYWdIYW5kbGUuc3R5bGUuZmxleEdyb3c9MDttaWRkbGVEcmFnSGFuZGxlLnN0eWxlLmZsZXhTaHJpbms9MDttaWRkbGVEcmFnSGFuZGxlLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7bWlkZGxlRHJhZ0hhbmRsZS5ob3Jpem9udGFsPWZhbHNlO21pZGRsZURyYWdIYW5kbGUudGFyZ2V0PWxlZnRQYW5lbDtjb25zdCByaWdodFBhbmVsPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJ3JpZ2h0LXBhbmVsJyk7cmlnaHRQYW5lbC5zdHlsZS5mbGV4R3Jvdz0xO3JpZ2h0UGFuZWwuc3R5bGUuZmxleFNocmluaz0xO3JpZ2h0UGFuZWwuc3R5bGUuZmxleEJhc2lzPSdhdXRvJztyaWdodFBhbmVsLnN0eWxlLmZsZXhEaXJlY3Rpb249J2NvbHVtbic7cmlnaHRQYW5lbC5zdHlsZS5kaXNwbGF5PSdmbGV4Jztjb25zdCBjaGFydFZpZXc9UG9seW1lci5kb20ocmlnaHRQYW5lbCkucXVlcnlTZWxlY3RvcigndHItdWktZS1jaHJvbWUtY2MtcGljdHVyZS1vcHMtY2hhcnQtdmlldycpO2NoYXJ0Vmlldy5zdHlsZS5taW5IZWlnaHQ9JzE1MHB4JztjaGFydFZpZXcuc3R5bGUubWluV2lkdGg9MDtjaGFydFZpZXcuc3R5bGUub3ZlcmZsb3dYPSdhdXRvJztjaGFydFZpZXcuc3R5bGUub3ZlcmZsb3dZPSdoaWRkZW4nO3JpZ2h0UGFuZWwucmVwbGFjZUNoaWxkKHRoaXMuZHJhd09wc0NoYXJ0Vmlld18sY2hhcnRWaWV3KTt0aGlzLmluZm9CYXJfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItaW5mby1iYXInKTtQb2x5bWVyLmRvbSh0aGlzLnJhc3RlckFyZWFfKS5hcHBlbmRDaGlsZCh0aGlzLmluZm9CYXJfKTtQb2x5bWVyLmRvbSh0aGlzKS5pbnNlcnRCZWZvcmUobWlkZGxlRHJhZ0hhbmRsZSxyaWdodFBhbmVsKTt0aGlzLnBpY3R1cmVfPXVuZGVmaW5lZDtjb25zdCBoa2M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHYtdWktYi1ob3RrZXktY29udHJvbGxlcicpO2hrYy5hZGRIb3RLZXkobmV3IHRyLnVpLmIuSG90S2V5KHtldmVudFR5cGU6J2tleXByZXNzJyx0aGlzQXJnOnRoaXMsa2V5Q29kZTonaCcuY2hhckNvZGVBdCgwKSxjYWxsYmFjayhlKXt0aGlzLm1vdmVTZWxlY3RlZE9wQnkoLTEpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pKTtoa2MuYWRkSG90S2V5KG5ldyB0ci51aS5iLkhvdEtleSh7ZXZlbnRUeXBlOidrZXlwcmVzcycsdGhpc0FyZzp0aGlzLGtleUNvZGU6J2wnLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5tb3ZlU2VsZWN0ZWRPcEJ5KDEpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChoa2MpO3RoaXMubXV0YXRpb25PYnNlcnZlcl89bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5vbk11dGF0aW9uXy5iaW5kKHRoaXMpKTt0aGlzLm11dGF0aW9uT2JzZXJ2ZXJfLm9ic2VydmUobGVmdFBhbmVsLHthdHRyaWJ1dGVzOnRydWV9KTt9LG9uTXV0YXRpb25fKG11dGF0aW9ucyl7Zm9yKGxldCBtPTA7bTxtdXRhdGlvbnMubGVuZ3RoO20rKyl7aWYobXV0YXRpb25zW21dLmF0dHJpYnV0ZU5hbWU9PT0nc3R5bGUnKXt0aGlzLmRyYXdPcHNDaGFydFN1bW1hcnlWaWV3Xy5yZXF1aXJlc1JlZHJhdz10cnVlO3RoaXMuZHJhd09wc0NoYXJ0U3VtbWFyeVZpZXdfLnVwZGF0ZUNoYXJ0Q29udGVudHMoKTt0aGlzLmRyYXdPcHNDaGFydFZpZXdfLmRpbWVuc2lvbnNIYXZlQ2hhbmdlZD10cnVlO3RoaXMuZHJhd09wc0NoYXJ0Vmlld18udXBkYXRlQ2hhcnRDb250ZW50cygpO2JyZWFrO319fSxvblNhdmVBc1NrUGljdHVyZUNsaWNrZWRfKCl7Y29uc3QgcmF3RGF0YT10ci5iLkJhc2U2NC5hdG9iKHRoaXMucGljdHVyZV8uZ2V0QmFzZTY0U2twRGF0YSgpKTtjb25zdCBsZW5ndGg9cmF3RGF0YS5sZW5ndGg7Y29uc3QgYXJyYXlCdWZmZXI9bmV3IEFycmF5QnVmZmVyKGxlbmd0aCk7Y29uc3QgdWludDhBcnJheT1uZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7Zm9yKGxldCBjPTA7YzxsZW5ndGg7YysrKXt1aW50OEFycmF5W2NdPXJhd0RhdGEuY2hhckNvZGVBdChjKTt9Ci1jb25zdCBibG9iPW5ldyBCbG9iKFt1aW50OEFycmF5XSx7dHlwZTonYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5J30pO2NvbnN0IGJsb2JVcmw9d2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7Y29uc3QgbGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLCdhJyk7bGluay5ocmVmPWJsb2JVcmw7bGluay5kb3dubG9hZD10aGlzLmZpbGVuYW1lXy52YWx1ZTtjb25zdCBldmVudD1kb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTtldmVudC5pbml0TW91c2VFdmVudCgnY2xpY2snLHRydWUsZmFsc2Usd2luZG93LDAsMCwwLDAsMCxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSwwLG51bGwpO2xpbmsuZGlzcGF0Y2hFdmVudChldmVudCk7fSxnZXQgcGljdHVyZSgpe3JldHVybiB0aGlzLnBpY3R1cmVfO30sc2V0IHBpY3R1cmUocGljdHVyZSl7dGhpcy5kcmF3T3BzVmlld18ucGljdHVyZT1waWN0dXJlO3RoaXMuZHJhd09wc0NoYXJ0Vmlld18ucGljdHVyZT1waWN0dXJlO3RoaXMuZHJhd09wc0NoYXJ0U3VtbWFyeVZpZXdfLnBpY3R1cmU9cGljdHVyZTt0aGlzLnBpY3R1cmVfPXBpY3R1cmU7dGhpcy5leHBvcnRCdXR0b25fLmRpc2FibGVkPSF0aGlzLnBpY3R1cmVfLmNhblNhdmU7aWYocGljdHVyZSl7Y29uc3Qgc2l6ZT10aGlzLmdldFJhc3RlckNhbnZhc1NpemVfKCk7dGhpcy5yYXN0ZXJDYW52YXNfLndpZHRoPXNpemUud2lkdGg7dGhpcy5yYXN0ZXJDYW52YXNfLmhlaWdodD1zaXplLmhlaWdodDt9Ci1jb25zdCBib3VuZHM9dGhpcy5yYXN0ZXJBcmVhXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBzZWxlY3RvckJvdW5kcz10aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5wb3M9e3g6KGJvdW5kcy5yaWdodC1zZWxlY3RvckJvdW5kcy53aWR0aC0xMCkseTpib3VuZHMudG9wfTt0aGlzLnJhc3Rlcml6ZV8oKTt0aGlzLnNjaGVkdWxlVXBkYXRlQ29udGVudHNfKCk7fSxnZXRSYXN0ZXJDYW52YXNTaXplXygpe2NvbnN0IHN0eWxlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMucmFzdGVyQXJlYV8pO2NvbnN0IHdpZHRoPU1hdGgubWF4KHBhcnNlSW50KHN0eWxlLndpZHRoKSx0aGlzLnBpY3R1cmVfLmxheWVyUmVjdC53aWR0aCk7Y29uc3QgaGVpZ2h0PU1hdGgubWF4KHBhcnNlSW50KHN0eWxlLmhlaWdodCksdGhpcy5waWN0dXJlXy5sYXllclJlY3QuaGVpZ2h0KTtyZXR1cm57d2lkdGgsaGVpZ2h0fTt9LHNjaGVkdWxlVXBkYXRlQ29udGVudHNfKCl7aWYodGhpcy51cGRhdGVDb250ZW50c1BlbmRpbmdfKXJldHVybjt0aGlzLnVwZGF0ZUNvbnRlbnRzUGVuZGluZ189dHJ1ZTt0ci5iLnJlcXVlc3RBbmltYXRpb25GcmFtZUluVGhpc0ZyYW1lSWZQb3NzaWJsZSh0aGlzLnVwZGF0ZUNvbnRlbnRzXy5iaW5kKHRoaXMpKTt9LHVwZGF0ZUNvbnRlbnRzXygpe3RoaXMudXBkYXRlQ29udGVudHNQZW5kaW5nXz1mYWxzZTtpZih0aGlzLnBpY3R1cmVfKXtQb2x5bWVyLmRvbSh0aGlzLnNpemVJbmZvXykudGV4dENvbnRlbnQ9JygnKwotdGhpcy5waWN0dXJlXy5sYXllclJlY3Qud2lkdGgrJyB4ICcrCi10aGlzLnBpY3R1cmVfLmxheWVyUmVjdC5oZWlnaHQrJyknO30KLXRoaXMuZHJhd09wc0NoYXJ0Vmlld18udXBkYXRlQ2hhcnRDb250ZW50cygpO3RoaXMuZHJhd09wc0NoYXJ0Vmlld18uc2Nyb2xsU2VsZWN0ZWRJdGVtSW50b1ZpZXdJZk5lY2Vzc2FyeSgpO2lmKCF0aGlzLnBpY3R1cmVBc0ltYWdlRGF0YV8pcmV0dXJuO3RoaXMuaW5mb0Jhcl8udmlzaWJsZT1mYWxzZTt0aGlzLmluZm9CYXJfLnJlbW92ZUFsbEJ1dHRvbnMoKTtpZih0aGlzLnBpY3R1cmVBc0ltYWdlRGF0YV8uZXJyb3Ipe3RoaXMuaW5mb0Jhcl8ubWVzc2FnZT0nQ2Fubm90IHJhc3Rlcml6ZS4uLic7dGhpcy5pbmZvQmFyXy5hZGRCdXR0b24oJ01vcmUgaW5mby4uLicsZnVuY3Rpb24oZSl7Y29uc3Qgb3ZlcmxheT1uZXcgdHIudWkuYi5PdmVybGF5KCk7UG9seW1lci5kb20ob3ZlcmxheSkudGV4dENvbnRlbnQ9dGhpcy5waWN0dXJlQXNJbWFnZURhdGFfLmVycm9yO292ZXJsYXkudmlzaWJsZT10cnVlO2Uuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIGZhbHNlO30uYmluZCh0aGlzKSk7dGhpcy5pbmZvQmFyXy52aXNpYmxlPXRydWU7fQotdGhpcy5kcmF3UGljdHVyZV8oKTt9LGRyYXdQaWN0dXJlXygpe2NvbnN0IHNpemU9dGhpcy5nZXRSYXN0ZXJDYW52YXNTaXplXygpO2lmKHNpemUud2lkdGghPT10aGlzLnJhc3RlckNhbnZhc18ud2lkdGgpe3RoaXMucmFzdGVyQ2FudmFzXy53aWR0aD1zaXplLndpZHRoO30KLWlmKHNpemUuaGVpZ2h0IT09dGhpcy5yYXN0ZXJDYW52YXNfLmhlaWdodCl7dGhpcy5yYXN0ZXJDYW52YXNfLmhlaWdodD1zaXplLmhlaWdodDt9Ci10aGlzLnJhc3RlckN0eF8uY2xlYXJSZWN0KDAsMCxzaXplLndpZHRoLHNpemUuaGVpZ2h0KTtpZighdGhpcy5waWN0dXJlQXNJbWFnZURhdGFfLmltYWdlRGF0YSlyZXR1cm47Y29uc3QgaW1nQ2FudmFzPXRoaXMucGljdHVyZUFzSW1hZ2VEYXRhXy5hc0NhbnZhcygpO2NvbnN0IHc9aW1nQ2FudmFzLndpZHRoO2NvbnN0IGg9aW1nQ2FudmFzLmhlaWdodDt0aGlzLnJhc3RlckN0eF8uZHJhd0ltYWdlKGltZ0NhbnZhcywwLDAsdyxoLDAsMCx3KnRoaXMuem9vbVNjYWxlVmFsdWVfLGgqdGhpcy56b29tU2NhbGVWYWx1ZV8pO30scmFzdGVyaXplXygpe2lmKHRoaXMucGljdHVyZV8pe3RoaXMucGljdHVyZV8ucmFzdGVyaXplKHtzdG9wSW5kZXg6dGhpcy5kcmF3T3BzVmlld18uc2VsZWN0ZWRPcEluZGV4LHNob3dPdmVyZHJhdzp0aGlzLnNob3dPdmVyZHJhd199LHRoaXMub25SYXN0ZXJDb21wbGV0ZV8uYmluZCh0aGlzKSk7fX0sb25SYXN0ZXJDb21wbGV0ZV8ocGljdHVyZUFzSW1hZ2VEYXRhKXt0aGlzLnBpY3R1cmVBc0ltYWdlRGF0YV89cGljdHVyZUFzSW1hZ2VEYXRhO3RoaXMuc2NoZWR1bGVVcGRhdGVDb250ZW50c18oKTt9LG1vdmVTZWxlY3RlZE9wQnkoaW5jcmVtZW50KXtpZih0aGlzLnNlbGVjdGVkT3BJbmRleD09PXVuZGVmaW5lZCl7dGhpcy5zZWxlY3RlZE9wSW5kZXg9MDtyZXR1cm47fQotdGhpcy5zZWxlY3RlZE9wSW5kZXg9dHIuYi5tYXRoLmNsYW1wKHRoaXMuc2VsZWN0ZWRPcEluZGV4K2luY3JlbWVudCwwLHRoaXMubnVtT3BzKTt9LGdldCBudW1PcHMoKXtyZXR1cm4gdGhpcy5kcmF3T3BzVmlld18ubnVtT3BzO30sZ2V0IHNlbGVjdGVkT3BJbmRleCgpe3JldHVybiB0aGlzLmRyYXdPcHNWaWV3Xy5zZWxlY3RlZE9wSW5kZXg7fSxzZXQgc2VsZWN0ZWRPcEluZGV4KGluZGV4KXt0aGlzLmRyYXdPcHNWaWV3Xy5zZWxlY3RlZE9wSW5kZXg9aW5kZXg7dGhpcy5kcmF3T3BzQ2hhcnRWaWV3Xy5zZWxlY3RlZE9wSW5kZXg9aW5kZXg7fSxvbkNoYXJ0QmFyQ2xpY2tlZF8oZSl7dGhpcy5kcmF3T3BzVmlld18uc2VsZWN0ZWRPcEluZGV4PXRoaXMuZHJhd09wc0NoYXJ0Vmlld18uc2VsZWN0ZWRPcEluZGV4O30sb25DaGFuZ2VEcmF3T3BzXyhlKXt0aGlzLnJhc3Rlcml6ZV8oKTt0aGlzLnNjaGVkdWxlVXBkYXRlQ29udGVudHNfKCk7dGhpcy5kcmF3T3BzQ2hhcnRWaWV3Xy5zZWxlY3RlZE9wSW5kZXg9dGhpcy5kcmF3T3BzVmlld18uc2VsZWN0ZWRPcEluZGV4O30sc2V0IHNob3dPdmVyZHJhdyh2KXt0aGlzLnNob3dPdmVyZHJhd189djt0aGlzLnJhc3Rlcml6ZV8oKTt9LHNldCBzaG93U3VtbWFyeUNoYXJ0KGNoYXJ0U2hvdWxkQmVWaXNpYmxlKXtpZihjaGFydFNob3VsZEJlVmlzaWJsZSl7dGhpcy5kcmF3T3BzQ2hhcnRTdW1tYXJ5Vmlld18uc2hvdygpO31lbHNle3RoaXMuZHJhd09wc0NoYXJ0U3VtbWFyeVZpZXdfLmhpZGUoKTt9fSx0cmFja01vdXNlXygpe3RoaXMubW91c2VNb2RlU2VsZWN0b3JfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItbW91c2UtbW9kZS1zZWxlY3RvcicpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnRhcmdldEVsZW1lbnQ9dGhpcy5yYXN0ZXJBcmVhXztQb2x5bWVyLmRvbSh0aGlzLnJhc3RlckFyZWFfKS5hcHBlbmRDaGlsZCh0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXyk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc3VwcG9ydGVkTW9kZU1hc2s9dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFLlpPT007dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8ubW9kZT10ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuWk9PTTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5kZWZhdWx0TW9kZT10ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuWk9PTTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5zZXR0aW5nc0tleT0ncGljdHVyZURlYnVnZ2VyLm1vdXNlTW9kZVNlbGVjdG9yJzt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdiZWdpbnpvb20nLHRoaXMub25CZWdpblpvb21fLmJpbmQodGhpcykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ3VwZGF0ZXpvb20nLHRoaXMub25VcGRhdGVab29tXy5iaW5kKHRoaXMpKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdlbmR6b29tJyx0aGlzLm9uRW5kWm9vbV8uYmluZCh0aGlzKSk7fSxvbkJlZ2luWm9vbV8oZSl7dGhpcy5pc1pvb21pbmdfPXRydWU7dGhpcy5sYXN0TW91c2VWaWV3UG9zXz10aGlzLmV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpO2UucHJldmVudERlZmF1bHQoKTt9LG9uVXBkYXRlWm9vbV8oZSl7aWYoIXRoaXMuaXNab29taW5nXylyZXR1cm47Y29uc3QgY3VycmVudE1vdXNlVmlld1Bvcz10aGlzLmV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpO3RoaXMuem9vbVNjYWxlVmFsdWVfKz0oKHRoaXMubGFzdE1vdXNlVmlld1Bvc18ueS1jdXJyZW50TW91c2VWaWV3UG9zLnkpKjAuMDAxKTt0aGlzLnpvb21TY2FsZVZhbHVlXz1NYXRoLm1heCh0aGlzLnpvb21TY2FsZVZhbHVlXywwLjEpO3RoaXMuZHJhd1BpY3R1cmVfKCk7dGhpcy5sYXN0TW91c2VWaWV3UG9zXz1jdXJyZW50TW91c2VWaWV3UG9zO30sb25FbmRab29tXyhlKXt0aGlzLmxhc3RNb3VzZVZpZXdQb3NfPXVuZGVmaW5lZDt0aGlzLmlzWm9vbWluZ189ZmFsc2U7ZS5wcmV2ZW50RGVmYXVsdCgpO30sZXh0cmFjdFJlbGF0aXZlTW91c2VQb3NpdGlvbl8oZSl7cmV0dXJue3g6ZS5jbGllbnRYLXRoaXMucmFzdGVyQXJlYV8ub2Zmc2V0TGVmdCx5OmUuY2xpZW50WS10aGlzLnJhc3RlckFyZWFfLm9mZnNldFRvcH07fX07cmV0dXJue1BpY3R1cmVEZWJ1Z2dlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5jaHJvbWUuY2MnLGZ1bmN0aW9uKCl7Y29uc3QgUGljdHVyZVNuYXBzaG90Vmlldz10ci51aS5iLmRlZmluZSgndHItdWktZS1jaHJvbWUtY2MtcGljdHVyZS1zbmFwc2hvdC12aWV3Jyx0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcpO1BpY3R1cmVTbmFwc2hvdFZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5hbHlzaXMuT2JqZWN0U25hcHNob3RWaWV3LnByb3RvdHlwZSxkZWNvcmF0ZSgpe1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ3RyLXVpLWUtY2hyb21lLWNjLXBpY3R1cmUtc25hcHNob3QtdmlldycpO3RoaXMuc3R5bGUuZGlzcGxheT0nZmxleCc7dGhpcy5zdHlsZS5mbGV4R3Jvdz0wO3RoaXMuc3R5bGUuZmxleFNocmluaz0xO3RoaXMuc3R5bGUuZmxleEJhc2lzPSdhdXRvJzt0aGlzLnBpY3R1cmVEZWJ1Z2dlcl89bmV3IHRyLnVpLmUuY2hyb21lLmNjLlBpY3R1cmVEZWJ1Z2dlcigpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMucGljdHVyZURlYnVnZ2VyXyk7fSx1cGRhdGVDb250ZW50cygpe2lmKHRoaXMub2JqZWN0U25hcHNob3RfJiZ0aGlzLnBpY3R1cmVEZWJ1Z2dlcl8pe3RoaXMucGljdHVyZURlYnVnZ2VyXy5waWN0dXJlPXRoaXMub2JqZWN0U25hcHNob3RfO319fTt0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcucmVnaXN0ZXIoUGljdHVyZVNuYXBzaG90Vmlldyx7dHlwZU5hbWVzOlsnY2M6OlBpY3R1cmUnLCdjYzo6TGF5ZXJlZFBpY3R1cmUnXSxzaG93SW5zdGFuY2VzOmZhbHNlfSk7cmV0dXJue1BpY3R1cmVTbmFwc2hvdFZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2MnLGZ1bmN0aW9uKCl7Y29uc3Qga25vd25SYXN0ZXJUYXNrTmFtZXM9WydUaWxlTWFuYWdlcjo6UnVuUmFzdGVyVGFzaycsJ1Jhc3RlcldvcmtlclBvb2xUYXNrSW1wbDo6UnVuUmFzdGVyT25UaHJlYWQnLCdSYXN0ZXJXb3JrZXJQb29sVGFza0ltcGw6OlJhc3RlcicsJ1Jhc3RlclRhc2tJbXBsOjpSYXN0ZXInLCdjYzo6UmFzdGVyVGFzaycsJ1Jhc3RlclRhc2snXTtjb25zdCBrbm93bkFuYWx5c2lzVGFza05hbWVzPVsnVGlsZU1hbmFnZXI6OlJ1bkFuYWx5emVUYXNrJywnUmFzdGVyV29ya2VyUG9vbFRhc2tJbXBsOjpSdW5BbmFseXNpc09uVGhyZWFkJywnUmFzdGVyV29ya2VyUG9vbFRhc2tJbXBsOjpBbmFseXplJywnUmFzdGVyVGFza0ltcGw6OkFuYWx5emUnLCdjYzo6QW5hbHl6ZVRhc2snLCdBbmFseXplVGFzayddO2Z1bmN0aW9uIGdldFRpbGVGcm9tUmFzdGVyVGFza1NsaWNlKHNsaWNlKXtpZighKGlzU2xpY2VEb2luZ1Jhc3Rlcml6YXRpb24oc2xpY2UpfHxpc1NsaWNlRG9pbmdBbmFseXNpcyhzbGljZSkpKXtyZXR1cm4gdW5kZWZpbmVkO30KLWxldCB0aWxlRGF0YTtpZihzbGljZS5hcmdzLmRhdGEpe3RpbGVEYXRhPXNsaWNlLmFyZ3MuZGF0YTt9ZWxzZXt0aWxlRGF0YT1zbGljZS5hcmdzLnRpbGVEYXRhO30KLWlmKHRpbGVEYXRhPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7aWYodGlsZURhdGEudGlsZV9pZClyZXR1cm4gdGlsZURhdGEudGlsZV9pZDtjb25zdCB0aWxlPXRpbGVEYXRhLnRpbGVJZDtpZighKHRpbGUgaW5zdGFuY2VvZiB0ci5lLmNjLlRpbGVTbmFwc2hvdCkpe3JldHVybiB1bmRlZmluZWQ7fQotcmV0dXJuIHRpbGVEYXRhLnRpbGVJZDt9Ci1mdW5jdGlvbiBpc1NsaWNlRG9pbmdSYXN0ZXJpemF0aW9uKHNsaWNlKXtyZXR1cm4ga25vd25SYXN0ZXJUYXNrTmFtZXMuaW5jbHVkZXMoc2xpY2UudGl0bGUpO30KLWZ1bmN0aW9uIGlzU2xpY2VEb2luZ0FuYWx5c2lzKHNsaWNlKXtyZXR1cm4ga25vd25BbmFseXNpc1Rhc2tOYW1lcy5pbmNsdWRlcyhzbGljZS50aXRsZSk7fQotcmV0dXJue2dldFRpbGVGcm9tUmFzdGVyVGFza1NsaWNlLGlzU2xpY2VEb2luZ1Jhc3Rlcml6YXRpb24saXNTbGljZURvaW5nQW5hbHlzaXN9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5hbHlzaXMnLGZ1bmN0aW9uKCl7Y29uc3QgQW5hbHlzaXNTdWJWaWV3PXtzZXQgdGFiTGFiZWwobGFiZWwpe1BvbHltZXIuZG9tKHRoaXMpLnNldEF0dHJpYnV0ZSgndGFiLWxhYmVsJyxsYWJlbCk7fSxnZXQgdGFiTGFiZWwoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3RhYi1sYWJlbCcpO30sZ2V0IHJlcXVpcmVzVGFsbFZpZXcoKXtyZXR1cm4gZmFsc2U7fSxnZXQgcmVsYXRlZEV2ZW50c1RvSGlnaGxpZ2h0KCl7cmV0dXJuIHVuZGVmaW5lZDt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCEnKTt9LGdldCBzZWxlY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCEnKTt9fTtjb25zdCBhbGxUeXBlSW5mb3NCeUV2ZW50UHJvdG89bmV3IE1hcCgpO2xldCBvbmx5Um9vdFR5cGVJbmZvc0J5RXZlbnRQcm90bz11bmRlZmluZWQ7bGV0IGV2ZW50UHJvdG9Ub1Jvb3RUeXBlSW5mb01hcD11bmRlZmluZWQ7ZnVuY3Rpb24gQW5hbHlzaXNTdWJWaWV3VHlwZUluZm8oZXZlbnRDb25zdHJ1Y3RvcixvcHRpb25zKXtpZihvcHRpb25zLm11bHRpPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgZmllbGQ6IG11bHRpJyk7fQotaWYob3B0aW9ucy50aXRsZT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGZpZWxkOiB0aXRsZScpO30KLXRoaXMuZXZlbnRDb25zdHJ1Y3Rvcj1ldmVudENvbnN0cnVjdG9yO3RoaXMuc2luZ2xlVGFnTmFtZT11bmRlZmluZWQ7dGhpcy5zaW5nbGVUaXRsZT11bmRlZmluZWQ7dGhpcy5tdWx0aVRhZ05hbWU9dW5kZWZpbmVkO3RoaXMubXVsdGlUaXRsZT11bmRlZmluZWQ7dGhpcy5jaGlsZHJlblR5cGVJbmZvc189dW5kZWZpbmVkO30KLUFuYWx5c2lzU3ViVmlld1R5cGVJbmZvLnByb3RvdHlwZT17Z2V0IGNoaWxkcmVuVHlwZUluZm9zKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW5UeXBlSW5mb3NfO30scmVzZXRjaGlsZHJlblR5cGVJbmZvcygpe3RoaXMuY2hpbGRyZW5UeXBlSW5mb3NfPVtdO319O0FuYWx5c2lzU3ViVmlldy5yZWdpc3Rlcj1mdW5jdGlvbih0YWdOYW1lLGV2ZW50Q29uc3RydWN0b3Isb3B0aW9ucyl7bGV0IHR5cGVJbmZvPWFsbFR5cGVJbmZvc0J5RXZlbnRQcm90by5nZXQoZXZlbnRDb25zdHJ1Y3Rvci5wcm90b3R5cGUpO2lmKHR5cGVJbmZvPT09dW5kZWZpbmVkKXt0eXBlSW5mbz1uZXcgQW5hbHlzaXNTdWJWaWV3VHlwZUluZm8oZXZlbnRDb25zdHJ1Y3RvcixvcHRpb25zKTthbGxUeXBlSW5mb3NCeUV2ZW50UHJvdG8uc2V0KHR5cGVJbmZvLmV2ZW50Q29uc3RydWN0b3IucHJvdG90eXBlLHR5cGVJbmZvKTtvbmx5Um9vdFR5cGVJbmZvc0J5RXZlbnRQcm90bz11bmRlZmluZWQ7fQotaWYoIW9wdGlvbnMubXVsdGkpe2lmKHR5cGVJbmZvLnNpbmdsZVRhZ05hbWUhPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignU2luZ2xlVGFnTmFtZSBhbHJlYWR5IHNldCcpO30KLXR5cGVJbmZvLnNpbmdsZVRhZ05hbWU9dGFnTmFtZTt0eXBlSW5mby5zaW5nbGVUaXRsZT1vcHRpb25zLnRpdGxlO31lbHNle2lmKHR5cGVJbmZvLm11bHRpVGFnTmFtZSE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdNdWx0aVRhZ05hbWUgYWxyZWFkeSBzZXQnKTt9Ci10eXBlSW5mby5tdWx0aVRhZ05hbWU9dGFnTmFtZTt0eXBlSW5mby5tdWx0aVRpdGxlPW9wdGlvbnMudGl0bGU7fQotcmV0dXJuIHR5cGVJbmZvO307ZnVuY3Rpb24gcmVidWlsZFJvb3RTdWJWaWV3VHlwZUluZm9zKCl7b25seVJvb3RUeXBlSW5mb3NCeUV2ZW50UHJvdG89bmV3IE1hcCgpO2FsbFR5cGVJbmZvc0J5RXZlbnRQcm90by5mb3JFYWNoKGZ1bmN0aW9uKHR5cGVJbmZvKXt0eXBlSW5mby5yZXNldGNoaWxkcmVuVHlwZUluZm9zKCk7fSk7YWxsVHlwZUluZm9zQnlFdmVudFByb3RvLmZvckVhY2goZnVuY3Rpb24odHlwZUluZm8sZXZlbnRQcm90byl7Y29uc3QgZXZlbnRQcm90b3R5cGU9dHlwZUluZm8uZXZlbnRDb25zdHJ1Y3Rvci5wcm90b3R5cGU7bGV0IGxhc3RFdmVudFByb3RvPWV2ZW50UHJvdG90eXBlO2xldCBjdXJFdmVudFByb3RvPWV2ZW50UHJvdG90eXBlLl9fcHJvdG9fXzt3aGlsZSh0cnVlKXtpZighYWxsVHlwZUluZm9zQnlFdmVudFByb3RvLmhhcyhjdXJFdmVudFByb3RvKSl7Y29uc3Qgcm9vdFR5cGVJbmZvPWFsbFR5cGVJbmZvc0J5RXZlbnRQcm90by5nZXQobGFzdEV2ZW50UHJvdG8pO2NvbnN0IHJvb3RFdmVudFByb3RvPWxhc3RFdmVudFByb3RvO2NvbnN0IGlzTmV3PW9ubHlSb290VHlwZUluZm9zQnlFdmVudFByb3RvLmhhcyhyb290RXZlbnRQcm90byk7b25seVJvb3RUeXBlSW5mb3NCeUV2ZW50UHJvdG8uc2V0KHJvb3RFdmVudFByb3RvLHJvb3RUeXBlSW5mbyk7YnJlYWs7fQotbGFzdEV2ZW50UHJvdG89Y3VyRXZlbnRQcm90bztjdXJFdmVudFByb3RvPWN1ckV2ZW50UHJvdG8uX19wcm90b19fO319KTthbGxUeXBlSW5mb3NCeUV2ZW50UHJvdG8uZm9yRWFjaChmdW5jdGlvbih0eXBlSW5mbyxldmVudFByb3RvKXtjb25zdCBldmVudFByb3RvdHlwZT10eXBlSW5mby5ldmVudENvbnN0cnVjdG9yLnByb3RvdHlwZTtjb25zdCBwYXJlbnRFdmVudFByb3RvPWV2ZW50UHJvdG90eXBlLl9fcHJvdG9fXztjb25zdCBwYXJlbnRUeXBlSW5mbz1hbGxUeXBlSW5mb3NCeUV2ZW50UHJvdG8uZ2V0KHBhcmVudEV2ZW50UHJvdG8pO2lmKCFwYXJlbnRUeXBlSW5mbylyZXR1cm47cGFyZW50VHlwZUluZm8uY2hpbGRyZW5UeXBlSW5mb3MucHVzaCh0eXBlSW5mbyk7fSk7ZXZlbnRQcm90b1RvUm9vdFR5cGVJbmZvTWFwPW5ldyBNYXAoKTthbGxUeXBlSW5mb3NCeUV2ZW50UHJvdG8uZm9yRWFjaChmdW5jdGlvbih0eXBlSW5mbyxldmVudFByb3RvKXtjb25zdCBldmVudFByb3RvdHlwZT10eXBlSW5mby5ldmVudENvbnN0cnVjdG9yLnByb3RvdHlwZTtsZXQgY3VyRXZlbnRQcm90bz1ldmVudFByb3RvdHlwZTt3aGlsZSh0cnVlKXtpZihvbmx5Um9vdFR5cGVJbmZvc0J5RXZlbnRQcm90by5oYXMoY3VyRXZlbnRQcm90bykpe2NvbnN0IHJvb3RUeXBlSW5mbz1vbmx5Um9vdFR5cGVJbmZvc0J5RXZlbnRQcm90by5nZXQoY3VyRXZlbnRQcm90byk7ZXZlbnRQcm90b1RvUm9vdFR5cGVJbmZvTWFwLnNldChldmVudFByb3RvdHlwZSxyb290VHlwZUluZm8pO2JyZWFrO30KLWN1ckV2ZW50UHJvdG89Y3VyRXZlbnRQcm90by5fX3Byb3RvX187fX0pO30KLWZ1bmN0aW9uIGZpbmRMb3dlc3RUeXBlSW5mb0ZvckV2ZW50cyh0aGlzVHlwZUluZm8sZXZlbnRzKXtpZihldmVudHMubGVuZ3RoPT09MClyZXR1cm4gdGhpc1R5cGVJbmZvO2NvbnN0IGV2ZW50MD10ci5iLmdldEZpcnN0RWxlbWVudChldmVudHMpO2xldCBjYW5kaWRhdGVTdWJUeXBlSW5mbztmb3IobGV0IGk9MDtpPHRoaXNUeXBlSW5mby5jaGlsZHJlblR5cGVJbmZvcy5sZW5ndGg7aSsrKXtjb25zdCBjaGlsZFR5cGVJbmZvPXRoaXNUeXBlSW5mby5jaGlsZHJlblR5cGVJbmZvc1tpXTtpZihldmVudDAgaW5zdGFuY2VvZiBjaGlsZFR5cGVJbmZvLmV2ZW50Q29uc3RydWN0b3Ipe2NhbmRpZGF0ZVN1YlR5cGVJbmZvPWNoaWxkVHlwZUluZm87YnJlYWs7fX0KLWlmKCFjYW5kaWRhdGVTdWJUeXBlSW5mbylyZXR1cm4gdGhpc1R5cGVJbmZvO2xldCBhbGxNYXRjaD10cnVlO2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2lmKGV2ZW50IGluc3RhbmNlb2YgY2FuZGlkYXRlU3ViVHlwZUluZm8uZXZlbnRDb25zdHJ1Y3Rvciljb250aW51ZTthbGxNYXRjaD1mYWxzZTticmVhazt9Ci1pZighYWxsTWF0Y2gpe3JldHVybiB0aGlzVHlwZUluZm87fQotcmV0dXJuIGZpbmRMb3dlc3RUeXBlSW5mb0ZvckV2ZW50cyhjYW5kaWRhdGVTdWJUeXBlSW5mbyxldmVudHMpO30KLWNvbnN0IHByaW1hcnlFdmVudFByb3RvVG9UeXBlSW5mb01hcD1uZXcgTWFwKCk7ZnVuY3Rpb24gZ2V0Um9vdFR5cGVJbmZvRm9yRXZlbnQoZXZlbnQpe2NvbnN0IGN1clByb3RvPWV2ZW50Ll9fcHJvdG9fXztjb25zdCB0eXBlSW5mbz1wcmltYXJ5RXZlbnRQcm90b1RvVHlwZUluZm9NYXAuZ2V0KGN1clByb3RvKTtpZih0eXBlSW5mbylyZXR1cm4gdHlwZUluZm87cmV0dXJuIGdldFJvb3RUeXBlSW5mb0ZvckV2ZW50U2xvdyhldmVudCk7fQotZnVuY3Rpb24gZ2V0Um9vdFR5cGVJbmZvRm9yRXZlbnRTbG93KGV2ZW50KXtsZXQgdHlwZUluZm87bGV0IGN1clByb3RvPWV2ZW50Ll9fcHJvdG9fXzt3aGlsZSh0cnVlKXtpZihjdXJQcm90bz09PU9iamVjdC5wcm90b3R5cGUpe3Rocm93IG5ldyBFcnJvcignTm8gdmlldyByZWdpc3RlcmVkIGZvciAnK2V2ZW50LnRvU3RyaW5nKCkpO30KLXR5cGVJbmZvPW9ubHlSb290VHlwZUluZm9zQnlFdmVudFByb3RvLmdldChjdXJQcm90byk7aWYodHlwZUluZm8pe3ByaW1hcnlFdmVudFByb3RvVG9UeXBlSW5mb01hcC5zZXQoZXZlbnQuX19wcm90b19fLHR5cGVJbmZvKTtyZXR1cm4gdHlwZUluZm87fQotY3VyUHJvdG89Y3VyUHJvdG8uX19wcm90b19fO319Ci1BbmFseXNpc1N1YlZpZXcuZ2V0RXZlbnRzT3JnYW5pemVkQnlUeXBlSW5mbz1mdW5jdGlvbihzZWxlY3Rpb24pe2lmKG9ubHlSb290VHlwZUluZm9zQnlFdmVudFByb3RvPT09dW5kZWZpbmVkKXtyZWJ1aWxkUm9vdFN1YlZpZXdUeXBlSW5mb3MoKTt9Ci1jb25zdCBldmVudHNCeVJvb3RUeXBlSW5mbz10ci5iLmdyb3VwSW50b01hcChzZWxlY3Rpb24sZnVuY3Rpb24oZXZlbnQpe3JldHVybiBnZXRSb290VHlwZUluZm9Gb3JFdmVudChldmVudCk7fSx0aGlzLHRyLm1vZGVsLkV2ZW50U2V0KTtjb25zdCBldmVudHNCeUxvd2VzdFR5cGVJbmZvPW5ldyBNYXAoKTtldmVudHNCeVJvb3RUeXBlSW5mby5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50cyx0eXBlSW5mbyl7Y29uc3QgbG93ZXN0VHlwZUluZm89ZmluZExvd2VzdFR5cGVJbmZvRm9yRXZlbnRzKHR5cGVJbmZvLGV2ZW50cyk7ZXZlbnRzQnlMb3dlc3RUeXBlSW5mby5zZXQobG93ZXN0VHlwZUluZm8sZXZlbnRzKTt9KTtyZXR1cm4gZXZlbnRzQnlMb3dlc3RUeXBlSW5mbzt9O3JldHVybntBbmFseXNpc1N1YlZpZXcsQW5hbHlzaXNTdWJWaWV3VHlwZUluZm8sfTt9KTtQb2x5bWVyKHtpczondHItdWktYS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLXN0YWNrLWZyYW1lJyxyZWFkeSgpe3RoaXMuc3RhY2tGcmFtZV89dW5kZWZpbmVkO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W107dGhpcy4kLnRhYmxlLnNob3dIZWFkZXI9dHJ1ZTt9LGdldCBzdGFja0ZyYW1lKCl7cmV0dXJuIHRoaXMuc3RhY2tGcmFtZV87fSxzZXQgc3RhY2tGcmFtZShzdGFja0ZyYW1lKXtjb25zdCB0YWJsZT10aGlzLiQudGFibGU7dGhpcy5zdGFja0ZyYW1lXz1zdGFja0ZyYW1lO2lmKHN0YWNrRnJhbWU9PT11bmRlZmluZWQpe3RhYmxlLnRhYmxlQ29sdW1ucz1bXTt0YWJsZS50YWJsZVJvd3M9W107dGFibGUucmVidWlsZCgpO3JldHVybjt9Ci1sZXQgaGFzTmFtZT1mYWxzZTtsZXQgaGFzVGl0bGU9ZmFsc2U7dGFibGUudGFibGVSb3dzPXN0YWNrRnJhbWUuc3RhY2tUcmFjZTt0YWJsZS50YWJsZVJvd3MuZm9yRWFjaChmdW5jdGlvbihyb3cpe2hhc05hbWV8PXJvdy5uYW1lIT09dW5kZWZpbmVkO2hhc1RpdGxlfD1yb3cudGl0bGUhPT11bmRlZmluZWQ7fSk7Y29uc3QgY29scz1bXTtpZihoYXNOYW1lKXtjb2xzLnB1c2goe3RpdGxlOidOYW1lJyx2YWx1ZShyb3cpe3JldHVybiByb3cubmFtZTt9fSk7fQotaWYoaGFzVGl0bGUpe2NvbHMucHVzaCh7dGl0bGU6J1RpdGxlJyx2YWx1ZShyb3cpe3JldHVybiByb3cudGl0bGU7fX0pO30KLXRhYmxlLnRhYmxlQ29sdW1ucz1jb2xzO3RhYmxlLnJlYnVpbGQoKTt9LHRhYmxlRm9yVGVzdGluZygpe3JldHVybiB0aGlzLiQudGFibGU7fX0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1zaW5nbGUtZXZlbnQtc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxwcm9wZXJ0aWVzOntpc0Zsb3c6e3R5cGU6Qm9vbGVhbix2YWx1ZTpmYWxzZX19LHJlYWR5KCl7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz11bmRlZmluZWQ7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1be3RpdGxlOidMYWJlbCcsdmFsdWUocm93KXtyZXR1cm4gcm93Lm5hbWU7fSx3aWR0aDonMTUwcHgnfSx7dGl0bGU6J1ZhbHVlJyx3aWR0aDonMTAwJScsdmFsdWUocm93KXtyZXR1cm4gcm93LnZhbHVlO319XTt0aGlzLiQudGFibGUuc2hvd0hlYWRlcj1mYWxzZTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXtpZihzZWxlY3Rpb24ubGVuZ3RoIT09MSl7dGhyb3cgbmV3IEVycm9yKCdPbmx5IHN1cHBvcnRzIHNpbmdsZSBzbGljZXMnKTt9Ci10aGlzLnNldFNlbGVjdGlvbldpdGhvdXRFcnJvckNoZWNrcyhzZWxlY3Rpb24pO30sc2V0U2VsZWN0aW9uV2l0aG91dEVycm9yQ2hlY2tzKHNlbGVjdGlvbil7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz1zZWxlY3Rpb247dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldEZsb3dFdmVudFJvd3NfKGV2ZW50KXtjb25zdCByb3dzPXRoaXMuZ2V0RXZlbnRSb3dzSGVscGVyXyhldmVudCk7cm93cy5zcGxpY2UoMCwwLHtuYW1lOidJRCcsdmFsdWU6ZXZlbnQuaWR9KTtmdW5jdGlvbiBjcmVhdGVMaW5rVG8oc2xpY2Upe2NvbnN0IGxpbmtFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWFuYWx5c2lzLWxpbmsnKTtsaW5rRWwuc2V0U2VsZWN0aW9uQW5kQ29udGVudChmdW5jdGlvbigpe3JldHVybiBuZXcgdHIubW9kZWwuRXZlbnRTZXQoc2xpY2UpO30pO1BvbHltZXIuZG9tKGxpbmtFbCkudGV4dENvbnRlbnQ9c2xpY2UudXNlckZyaWVuZGx5TmFtZTtyZXR1cm4gbGlua0VsO30KLXJvd3MucHVzaCh7bmFtZTonRnJvbScsdmFsdWU6Y3JlYXRlTGlua1RvKGV2ZW50LnN0YXJ0U2xpY2UpfSk7cm93cy5wdXNoKHtuYW1lOidUbycsdmFsdWU6Y3JlYXRlTGlua1RvKGV2ZW50LmVuZFNsaWNlKX0pO3JldHVybiByb3dzO30sZ2V0RXZlbnRSb3dzSGVscGVyXyhldmVudCl7Y29uc3Qgcm93cz1bXTtpZihldmVudC5lcnJvcil7cm93cy5wdXNoKHtuYW1lOidFcnJvcicsdmFsdWU6ZXZlbnQuZXJyb3J9KTt9Ci1pZihldmVudC50aXRsZSl7cm93cy5wdXNoKHtuYW1lOidUaXRsZScsdmFsdWU6ZXZlbnQudGl0bGV9KTt9Ci1pZihldmVudC5jYXRlZ29yeSl7cm93cy5wdXNoKHtuYW1lOidDYXRlZ29yeScsdmFsdWU6ZXZlbnQuY2F0ZWdvcnl9KTt9Ci1pZihldmVudC5tb2RlbCE9PXVuZGVmaW5lZCl7Y29uc3QgdWZjPWV2ZW50Lm1vZGVsLmdldFVzZXJGcmllbmRseUNhdGVnb3J5RnJvbUV2ZW50KGV2ZW50KTtpZih1ZmMhPT11bmRlZmluZWQpe3Jvd3MucHVzaCh7bmFtZTonVXNlciBGcmllbmRseSBDYXRlZ29yeScsdmFsdWU6dWZjfSk7fX0KLWlmKGV2ZW50Lm5hbWUpe3Jvd3MucHVzaCh7bmFtZTonTmFtZScsdmFsdWU6ZXZlbnQubmFtZX0pO30KLXJvd3MucHVzaCh7bmFtZTonU3RhcnQnLHZhbHVlOnRyLnYudWkuY3JlYXRlU2NhbGFyU3BhbihldmVudC5zdGFydCx7dW5pdDp0ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXN9KX0pO2lmKGV2ZW50LmR1cmF0aW9uKXtyb3dzLnB1c2goe25hbWU6J1dhbGwgRHVyYXRpb24nLHZhbHVlOnRyLnYudWkuY3JlYXRlU2NhbGFyU3BhbihldmVudC5kdXJhdGlvbix7dW5pdDp0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXN9KX0pO30KLWlmKGV2ZW50LmNwdUR1cmF0aW9uKXtyb3dzLnB1c2goe25hbWU6J0NQVSBEdXJhdGlvbicsdmFsdWU6dHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKGV2ZW50LmNwdUR1cmF0aW9uLHt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc30pfSk7fQotaWYoZXZlbnQuc3ViU2xpY2VzIT09dW5kZWZpbmVkJiZldmVudC5zdWJTbGljZXMubGVuZ3RoIT09MCl7aWYoZXZlbnQuc2VsZlRpbWUpe3Jvd3MucHVzaCh7bmFtZTonU2VsZiBUaW1lJyx2YWx1ZTp0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4oZXZlbnQuc2VsZlRpbWUse3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zfSl9KTt9Ci1pZihldmVudC5jcHVTZWxmVGltZSl7Y29uc3QgY3B1U2VsZlRpbWVFbD10ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4oZXZlbnQuY3B1U2VsZlRpbWUse3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zfSk7aWYoZXZlbnQuY3B1U2VsZlRpbWU+ZXZlbnQuc2VsZlRpbWUpe2NwdVNlbGZUaW1lRWwud2FybmluZz0nIE5vdGUgdGhhdCBDUFUgU2VsZiBUaW1lIGlzIGxhcmdlciB0aGFuIFNlbGYgVGltZS4gJysnVGhpcyBpcyBhIGtub3duIGxpbWl0YXRpb24gb2YgdGhpcyBzeXN0ZW0sIHdoaWNoIG9jY3VycyAnKydkdWUgdG8gc2V2ZXJhbCBzdWJzbGljZXMsIHJvdW5kaW5nIGlzc3VlcywgYW5kIGltcHJlY2lzZSAnKyd0aW1lIGF0IHdoaWNoIHdlIGdldCBjcHUtIGFuZCByZWFsLXRpbWUuJzt9Ci1yb3dzLnB1c2goe25hbWU6J0NQVSBTZWxmIFRpbWUnLHZhbHVlOmNwdVNlbGZUaW1lRWx9KTt9fQotaWYoZXZlbnQuZHVyYXRpb25JblVzZXJUaW1lKXtyb3dzLnB1c2goe25hbWU6J0R1cmF0aW9uIChVKScsdmFsdWU6dHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKGV2ZW50LmR1cmF0aW9uSW5Vc2VyVGltZSx7dW5pdDp0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXN9KX0pO30KLWZ1bmN0aW9uIGNyZWF0ZVN0YWNrRnJhbWVFbChzZil7Y29uc3Qgc2ZFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLXN0YWNrLWZyYW1lJyk7c2ZFbC5zdGFja0ZyYW1lPXNmO3JldHVybiBzZkVsO30KLWlmKGV2ZW50LnN0YXJ0U3RhY2tGcmFtZSYmZXZlbnQuZW5kU3RhY2tGcmFtZSl7aWYoZXZlbnQuc3RhcnRTdGFja0ZyYW1lPT09ZXZlbnQuZW5kU3RhY2tGcmFtZSl7cm93cy5wdXNoKHtuYW1lOidTdGFydCtFbmQgU3RhY2sgVHJhY2UnLHZhbHVlOmNyZWF0ZVN0YWNrRnJhbWVFbChldmVudC5zdGFydFN0YWNrRnJhbWUpfSk7fWVsc2V7cm93cy5wdXNoKHtuYW1lOidTdGFydCBTdGFjayBUcmFjZScsdmFsdWU6Y3JlYXRlU3RhY2tGcmFtZUVsKGV2ZW50LnN0YXJ0U3RhY2tGcmFtZSl9KTtyb3dzLnB1c2goe25hbWU6J0VuZCBTdGFjayBUcmFjZScsdmFsdWU6Y3JlYXRlU3RhY2tGcmFtZUVsKGV2ZW50LmVuZFN0YWNrRnJhbWUpfSk7fX1lbHNlIGlmKGV2ZW50LnN0YXJ0U3RhY2tGcmFtZSl7cm93cy5wdXNoKHtuYW1lOidTdGFydCBTdGFjayBUcmFjZScsdmFsdWU6Y3JlYXRlU3RhY2tGcmFtZUVsKGV2ZW50LnN0YXJ0U3RhY2tGcmFtZSl9KTt9ZWxzZSBpZihldmVudC5lbmRTdGFja0ZyYW1lKXtyb3dzLnB1c2goe25hbWU6J0VuZCBTdGFjayBUcmFjZScsdmFsdWU6Y3JlYXRlU3RhY2tGcmFtZUVsKGV2ZW50LmVuZFN0YWNrRnJhbWUpfSk7fQotaWYoZXZlbnQuaW5mbyl7Y29uc3QgZGVzY3JpcHRpb25FbD10ci51aS5iLmNyZWF0ZURpdih7dGV4dENvbnRlbnQ6ZXZlbnQuaW5mby5kZXNjcmlwdGlvbixtYXhXaWR0aDonMzAwcHgnfSk7cm93cy5wdXNoKHtuYW1lOidEZXNjcmlwdGlvbicsdmFsdWU6ZGVzY3JpcHRpb25FbH0pO2lmKGV2ZW50LmluZm8uZG9jTGlua3Mpe2V2ZW50LmluZm8uZG9jTGlua3MuZm9yRWFjaChmdW5jdGlvbihsaW5rT2JqZWN0KXtjb25zdCBsaW5rRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2xpbmtFbC50YXJnZXQ9J19ibGFuayc7bGlua0VsLmhyZWY9bGlua09iamVjdC5ocmVmO1BvbHltZXIuZG9tKGxpbmtFbCkudGV4dENvbnRlbnQ9UG9seW1lci5kb20obGlua09iamVjdCkudGV4dENvbnRlbnQ7cm93cy5wdXNoKHtuYW1lOmxpbmtPYmplY3QubGFiZWwsdmFsdWU6bGlua0VsfSk7fSk7fX0KLWlmKGV2ZW50LmFzc29jaWF0ZWRBbGVydHMubGVuZ3RoKXtjb25zdCBhbGVydFN1YlJvd3M9W107ZXZlbnQuYXNzb2NpYXRlZEFsZXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKGFsZXJ0KXtjb25zdCBsaW5rRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7bGlua0VsLnNldFNlbGVjdGlvbkFuZENvbnRlbnQoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRyLm1vZGVsLkV2ZW50U2V0KGFsZXJ0KTt9LGFsZXJ0LmluZm8uZGVzY3JpcHRpb24pO2FsZXJ0U3ViUm93cy5wdXNoKHtuYW1lOmFsZXJ0LnRpdGxlLHZhbHVlOmxpbmtFbH0pO30pO3Jvd3MucHVzaCh7bmFtZTonQWxlcnRzJyx2YWx1ZTonJyxpc0V4cGFuZGVkOnRydWUsc3ViUm93czphbGVydFN1YlJvd3N9KTt9Ci1yZXR1cm4gcm93czt9LGdldEV2ZW50Um93c18oZXZlbnQpe2lmKHRoaXMuaXNGbG93KXtyZXR1cm4gdGhpcy5nZXRGbG93RXZlbnRSb3dzXyhldmVudCk7fQotcmV0dXJuIHRoaXMuZ2V0RXZlbnRSb3dzSGVscGVyXyhldmVudCk7fSxhZGRBcmdzVG9Sb3dzXyhyb3dzLGFyZ3Mpe2xldCBuPTA7Zm9yKGNvbnN0IGFyZ05hbWUgaW4gYXJncyl7bis9MTt9Ci1pZihuPjApe2NvbnN0IHN1YlJvd3M9W107Zm9yKGNvbnN0IGFyZ05hbWUgaW4gYXJncyl7bis9MTt9Ci1pZihuPjApe2NvbnN0IHN1YlJvd3M9W107Zm9yKGNvbnN0IGFyZ05hbWUgaW4gYXJncyl7Y29uc3QgYXJnVmlldz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXcnKTthcmdWaWV3Lm9iamVjdD1hcmdzW2FyZ05hbWVdO3N1YlJvd3MucHVzaCh7bmFtZTphcmdOYW1lLHZhbHVlOmFyZ1ZpZXd9KTt9Ci1yb3dzLnB1c2goe25hbWU6J0FyZ3MnLHZhbHVlOicnLGlzRXhwYW5kZWQ6dHJ1ZSxzdWJSb3dzfSk7fX19LGFkZENvbnRleHRzVG9Sb3dzXyhyb3dzLGNvbnRleHRzKXtpZihjb250ZXh0cy5sZW5ndGgpe2NvbnN0IHN1YlJvd3M9Y29udGV4dHMubWFwKGZ1bmN0aW9uKGNvbnRleHQpe2NvbnN0IGNvbnRleHRWaWV3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtZ2VuZXJpYy1vYmplY3QtdmlldycpO2NvbnRleHRWaWV3Lm9iamVjdD1jb250ZXh0O3JldHVybntuYW1lOidDb250ZXh0Jyx2YWx1ZTpjb250ZXh0Vmlld307fSk7cm93cy5wdXNoKHtuYW1lOidDb250ZXh0cycsdmFsdWU6JycsaXNFeHBhbmRlZDp0cnVlLHN1YlJvd3N9KTt9fSx1cGRhdGVDb250ZW50c18oKXtpZih0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPT09dW5kZWZpbmVkKXt0aGlzLiQudGFibGUucm93cz1bXTt0aGlzLiQudGFibGUucmVidWlsZCgpO3JldHVybjt9Ci1jb25zdCBldmVudD10ci5iLmdldE9ubHlFbGVtZW50KHRoaXMuY3VycmVudFNlbGVjdGlvbl8pO2NvbnN0IHJvd3M9dGhpcy5nZXRFdmVudFJvd3NfKGV2ZW50KTtpZihldmVudC5hcmdzU3RyaXBwZWQpe3Jvd3MucHVzaCh7bmFtZTonQXJncycsdmFsdWU6J1N0cmlwcGVkJ30pO31lbHNle3RoaXMuYWRkQXJnc1RvUm93c18ocm93cyxldmVudC5hcmdzKTt9Ci10aGlzLmFkZENvbnRleHRzVG9Sb3dzXyhyb3dzLGV2ZW50LmNvbnRleHRzKTtjb25zdCBjdXN0b21pemVSb3dzRXZlbnQ9bmV3IHRyLmIuRXZlbnQoJ2N1c3RvbWl6ZS1yb3dzJyk7Y3VzdG9taXplUm93c0V2ZW50LnJvd3M9cm93czt0aGlzLmRpc3BhdGNoRXZlbnQoY3VzdG9taXplUm93c0V2ZW50KTt0aGlzLiQudGFibGUudGFibGVSb3dzPXJvd3M7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1lLWNocm9tZS1jYy1yYXN0ZXItdGFzay12aWV3JyxjcmVhdGVkKCl7dGhpcy5zZWxlY3Rpb25fPXVuZGVmaW5lZDt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLnNlbGVjdGlvbl89c2VsZWN0aW9uO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSx1cGRhdGVDb2x1bW5zXyhoYWRDcHVEdXJhdGlvbnMpe2NvbnN0IHRpbWVTcGFuQ29uZmlnPXt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Ncyxvd25lckRvY3VtZW50OnRoaXMub3duZXJEb2N1bWVudH07Y29uc3QgY29sdW1ucz1be3RpdGxlOidMYXllcicsdmFsdWUocm93KXtpZihyb3cuaXNUb3RhbHMpcmV0dXJuJ1RvdGFscyc7aWYocm93LmxheWVyKXtjb25zdCBsaW5rRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7bGlua0VsLnNldFNlbGVjdGlvbkFuZENvbnRlbnQoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRyLnVpLmUuY2hyb21lLmNjLkxheWVyU2VsZWN0aW9uKGNvc3RzLmxheWVyKTt9LCdMYXllciAnK3Jvdy5sYXllcklkKTtyZXR1cm4gbGlua0VsO30KLXJldHVybidMYXllciAnK3Jvdy5sYXllcklkO30sd2lkdGg6JzI1MHB4J30se3RpdGxlOidOdW0gVGlsZXMnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5udW1UaWxlczt9LGNtcChhLGIpe3JldHVybiBhLm51bVRpbGVzLWIubnVtVGlsZXM7fX0se3RpdGxlOidOdW0gQW5hbHlzaXMgVGFza3MnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5udW1BbmFseXNpc1Rhc2tzO30sY21wKGEsYil7cmV0dXJuIGEubnVtQW5hbHlzaXNUYXNrcy1iLm51bUFuYWx5c2lzVGFza3M7fX0se3RpdGxlOidOdW0gUmFzdGVyIFRhc2tzJyx2YWx1ZShyb3cpe3JldHVybiByb3cubnVtUmFzdGVyVGFza3M7fSxjbXAoYSxiKXtyZXR1cm4gYS5udW1SYXN0ZXJUYXNrcy1iLm51bVJhc3RlclRhc2tzO319LHt0aXRsZTonV2FsbCBEdXJhdGlvbiAobXMpJyx2YWx1ZShyb3cpe3JldHVybiB0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4ocm93LmR1cmF0aW9uLHRpbWVTcGFuQ29uZmlnKTt9LGNtcChhLGIpe3JldHVybiBhLmR1cmF0aW9uLWIuZHVyYXRpb247fX1dO2lmKGhhZENwdUR1cmF0aW9ucyl7Y29sdW1ucy5wdXNoKHt0aXRsZTonQ1BVIER1cmF0aW9uIChtcyknLHZhbHVlKHJvdyl7cmV0dXJuIHRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbihyb3cuY3B1RHVyYXRpb24sdGltZVNwYW5Db25maWcpO30sY21wKGEsYil7cmV0dXJuIGEuY3B1RHVyYXRpb24tYi5jcHVEdXJhdGlvbjt9fSk7fQotbGV0IGNvbFdpZHRoUGVyY2VudGFnZTtpZihjb2x1bW5zLmxlbmd0aD09PTEpe2NvbFdpZHRoUGVyY2VudGFnZT0nMTAwJSc7fWVsc2V7Y29sV2lkdGhQZXJjZW50YWdlPSgxMDAvKGNvbHVtbnMubGVuZ3RoLTEpKS50b0ZpeGVkKDMpKyclJzt9Ci1mb3IobGV0IGk9MTtpPGNvbHVtbnMubGVuZ3RoO2krKyl7Y29sdW1uc1tpXS53aWR0aD1jb2xXaWR0aFBlcmNlbnRhZ2U7fQotdGhpcy4kLmNvbnRlbnQudGFibGVDb2x1bW5zPWNvbHVtbnM7dGhpcy4kLmNvbnRlbnQuc29ydENvbHVtbkluZGV4PWNvbHVtbnMubGVuZ3RoLTE7fSx1cGRhdGVDb250ZW50c18oKXtjb25zdCB0YWJsZT10aGlzLiQuY29udGVudDtpZih0aGlzLnNlbGVjdGlvbl8ubGVuZ3RoPT09MCl7dGhpcy4kLmxpbmsuc2V0U2VsZWN0aW9uQW5kQ29udGVudCh1bmRlZmluZWQsJycpO3RhYmxlLnRhYmxlUm93cz1bXTt0YWJsZS5mb290ZXJSb3dzPVtdO3RhYmxlLnJlYnVpbGQoKTtyZXR1cm47fQotY29uc3QgbHRoaT10ci5lLmNjLmdldFRpbGVGcm9tUmFzdGVyVGFza1NsaWNlKHRyLmIuZ2V0Rmlyc3RFbGVtZW50KHRoaXMuc2VsZWN0aW9uXykpLmNvbnRhaW5pbmdTbmFwc2hvdDt0aGlzLiQubGluay5zZXRTZWxlY3Rpb25BbmRDb250ZW50KGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0ci5tb2RlbC5FdmVudFNldChsdGhpKTt9LGx0aGkudXNlckZyaWVuZGx5TmFtZSk7Y29uc3QgY29zdHNCeUxheWVySWQ9e307ZnVuY3Rpb24gZ2V0Q3VycmVudENvc3RzRm9yTGF5ZXJJZCh0aWxlKXtjb25zdCBsYXllcklkPXRpbGUubGF5ZXJJZDtjb25zdCBsdGhpPXRpbGUuY29udGFpbmluZ1NuYXBzaG90O2xldCBsYXllcjtpZihsdGhpLmFjdGl2ZVRyZWUpe2xheWVyPWx0aGkuYWN0aXZlVHJlZS5maW5kTGF5ZXJXaXRoSWQobGF5ZXJJZCk7fQotaWYobGF5ZXI9PT11bmRlZmluZWQmJmx0aGkucGVuZGluZ1RyZWUpe2xheWVyPWx0aGkucGVuZGluZ1RyZWUuZmluZExheWVyV2l0aElkKGxheWVySWQpO30KLWlmKGNvc3RzQnlMYXllcklkW2xheWVySWRdPT09dW5kZWZpbmVkKXtjb3N0c0J5TGF5ZXJJZFtsYXllcklkXT17bGF5ZXJJZCxsYXllcixudW1UaWxlczowLG51bUFuYWx5c2lzVGFza3M6MCxudW1SYXN0ZXJUYXNrczowLGR1cmF0aW9uOjAsY3B1RHVyYXRpb246MH07fQotcmV0dXJuIGNvc3RzQnlMYXllcklkW2xheWVySWRdO30KLWxldCB0b3RhbER1cmF0aW9uPTA7bGV0IHRvdGFsQ3B1RHVyYXRpb249MDtsZXQgdG90YWxOdW1BbmFseXplVGFza3M9MDtsZXQgdG90YWxOdW1SYXN0ZXJpemVUYXNrcz0wO2xldCBoYWRDcHVEdXJhdGlvbnM9ZmFsc2U7Y29uc3QgdGlsZXNUaGF0V2VIYXZlU2Vlbj17fTt0aGlzLnNlbGVjdGlvbl8uZm9yRWFjaChmdW5jdGlvbihzbGljZSl7Y29uc3QgdGlsZT10ci5lLmNjLmdldFRpbGVGcm9tUmFzdGVyVGFza1NsaWNlKHNsaWNlKTtjb25zdCBjdXJDb3N0cz1nZXRDdXJyZW50Q29zdHNGb3JMYXllcklkKHRpbGUpO2lmKCF0aWxlc1RoYXRXZUhhdmVTZWVuW3RpbGUub2JqZWN0SW5zdGFuY2UuaWRdKXt0aWxlc1RoYXRXZUhhdmVTZWVuW3RpbGUub2JqZWN0SW5zdGFuY2UuaWRdPXRydWU7Y3VyQ29zdHMubnVtVGlsZXMrPTE7fQotaWYodHIuZS5jYy5pc1NsaWNlRG9pbmdBbmFseXNpcyhzbGljZSkpe2N1ckNvc3RzLm51bUFuYWx5c2lzVGFza3MrPTE7dG90YWxOdW1BbmFseXplVGFza3MrPTE7fWVsc2V7Y3VyQ29zdHMubnVtUmFzdGVyVGFza3MrPTE7dG90YWxOdW1SYXN0ZXJpemVUYXNrcys9MTt9Ci1jdXJDb3N0cy5kdXJhdGlvbis9c2xpY2UuZHVyYXRpb247dG90YWxEdXJhdGlvbis9c2xpY2UuZHVyYXRpb247aWYoc2xpY2UuY3B1RHVyYXRpb24hPT11bmRlZmluZWQpe2N1ckNvc3RzLmNwdUR1cmF0aW9uKz1zbGljZS5jcHVEdXJhdGlvbjt0b3RhbENwdUR1cmF0aW9uKz1zbGljZS5jcHVEdXJhdGlvbjtoYWRDcHVEdXJhdGlvbnM9dHJ1ZTt9fSk7dGhpcy51cGRhdGVDb2x1bW5zXyhoYWRDcHVEdXJhdGlvbnMpO3RhYmxlLnRhYmxlUm93cz1PYmplY3QudmFsdWVzKGNvc3RzQnlMYXllcklkKTt0YWJsZS5yZWJ1aWxkKCk7dGFibGUuZm9vdGVyUm93cz1be2lzVG90YWxzOnRydWUsbnVtVGlsZXM6T2JqZWN0LmtleXModGlsZXNUaGF0V2VIYXZlU2VlbikubGVuZ3RoLG51bUFuYWx5c2lzVGFza3M6dG90YWxOdW1BbmFseXplVGFza3MsbnVtUmFzdGVyVGFza3M6dG90YWxOdW1SYXN0ZXJpemVUYXNrcyxkdXJhdGlvbjp0b3RhbER1cmF0aW9uLGNwdUR1cmF0aW9uOnRvdGFsQ3B1RHVyYXRpb259XTt9fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5lLmNocm9tZS5jYycsZnVuY3Rpb24oKXtmdW5jdGlvbiBSYXN0ZXJUYXNrU2VsZWN0aW9uKHNlbGVjdGlvbil7dHIudWkuZS5jaHJvbWUuY2MuU2VsZWN0aW9uLmNhbGwodGhpcyk7Y29uc3Qgd2h5U3VwcG9ydGVkPVJhc3RlclRhc2tTZWxlY3Rpb24ud2h5U3Vwb3J0ZWQoc2VsZWN0aW9uKTtpZighd2h5U3VwcG9ydGVkLm9rKXt0aHJvdyBuZXcgRXJyb3IoJ0ZhaWw6ICcrd2h5U3VwcG9ydGVkLndoeSk7fQotdGhpcy5zbGljZXNfPUFycmF5LmZyb20oc2VsZWN0aW9uKTt0aGlzLnRpbGVzXz10aGlzLnNsaWNlc18ubWFwKGZ1bmN0aW9uKHNsaWNlKXtjb25zdCB0aWxlPXRyLmUuY2MuZ2V0VGlsZUZyb21SYXN0ZXJUYXNrU2xpY2Uoc2xpY2UpO2lmKHRpbGU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGR1ZSB0byAuc3VwcG9ydHMgY2hlY2suJyk7fQotcmV0dXJuIHRpbGU7fSk7fQotUmFzdGVyVGFza1NlbGVjdGlvbi53aHlTdXBvcnRlZD1mdW5jdGlvbihzZWxlY3Rpb24pe2lmKCEoc2VsZWN0aW9uIGluc3RhbmNlb2YgdHIubW9kZWwuRXZlbnRTZXQpKXtyZXR1cm57b2s6ZmFsc2Usd2h5OidNdXN0IGJlIHNlbGVjdGlvbid9O30KLWlmKHNlbGVjdGlvbi5sZW5ndGg9PT0wKXtyZXR1cm57b2s6ZmFsc2Usd2h5OidTZWxlY3Rpb24gbXVzdCBiZSBub24gZW1wdHknfTt9Ci1sZXQgcmVmZXJlbmNlU25hcHNob3Q9dW5kZWZpbmVkO2Zvcihjb25zdCBldmVudCBvZiBzZWxlY3Rpb24pe2lmKCEoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5TbGljZSkpe3JldHVybntvazpmYWxzZSx3aHk6J05vdCBhIHNsaWNlJ307fQotY29uc3QgdGlsZT10ci5lLmNjLmdldFRpbGVGcm9tUmFzdGVyVGFza1NsaWNlKGV2ZW50KTtpZih0aWxlPT09dW5kZWZpbmVkKXtyZXR1cm57b2s6ZmFsc2Usd2h5OidObyB0aWxlIGZvdW5kJ307fQotaWYoIXJlZmVyZW5jZVNuYXBzaG90KXtyZWZlcmVuY2VTbmFwc2hvdD10aWxlLmNvbnRhaW5pbmdTbmFwc2hvdDt9ZWxzZXtpZih0aWxlLmNvbnRhaW5pbmdTbmFwc2hvdCE9PXJlZmVyZW5jZVNuYXBzaG90KXtyZXR1cm57b2s6ZmFsc2Usd2h5OidSYXN0ZXIgdGFza3MgYXJlIGZyb20gZGlmZmVyZW50IGNvbXBvc2l0b3IgaW5zdGFuY2VzJ307fX19Ci1yZXR1cm57b2s6dHJ1ZX07fTtSYXN0ZXJUYXNrU2VsZWN0aW9uLnN1cHBvcnRzPWZ1bmN0aW9uKHNlbGVjdGlvbil7cmV0dXJuIFJhc3RlclRhc2tTZWxlY3Rpb24ud2h5U3Vwb3J0ZWQoc2VsZWN0aW9uKS5vazt9O1Jhc3RlclRhc2tTZWxlY3Rpb24ucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuZS5jaHJvbWUuY2MuU2VsZWN0aW9uLnByb3RvdHlwZSxnZXQgc3BlY2ljaWZpdHkoKXtyZXR1cm4gMzt9LGdldCBhc3NvY2lhdGVkTGF5ZXJJZCgpe2NvbnN0IHRpbGUwPXRoaXMudGlsZXNfWzBdO2NvbnN0IGFsbFNhbWVMYXllcj10aGlzLnRpbGVzXy5ldmVyeShmdW5jdGlvbih0aWxlKXt0aWxlLmxheWVySWQ9PT10aWxlMC5sYXllcklkO30pO2lmKGFsbFNhbWVMYXllcil7cmV0dXJuIHRpbGUwLmxheWVySWQ7fQotcmV0dXJuIHVuZGVmaW5lZDt9LGdldCBleHRyYUhpZ2hsaWdodHNCeUxheWVySWQoKXtjb25zdCBoaWdobGlnaHRzPXt9O3RoaXMudGlsZXNfLmZvckVhY2goZnVuY3Rpb24odGlsZSxpKXtpZihoaWdobGlnaHRzW3RpbGUubGF5ZXJJZF09PT11bmRlZmluZWQpe2hpZ2hsaWdodHNbdGlsZS5sYXllcklkXT1bXTt9Ci1jb25zdCBzbGljZT10aGlzLnNsaWNlc19baV07aGlnaGxpZ2h0c1t0aWxlLmxheWVySWRdLnB1c2goe2NvbG9yS2V5OnNsaWNlLnRpdGxlLHJlY3Q6dGlsZS5sYXllclJlY3R9KTt9LHRoaXMpO3JldHVybiBoaWdobGlnaHRzO30sY3JlYXRlQW5hbHlzaXMoKXtjb25zdCBzZWw9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7dGhpcy5zbGljZXNfLmZvckVhY2goZnVuY3Rpb24oc2xpY2Upe3NlbC5wdXNoKHNsaWNlKTt9KTtsZXQgYW5hbHlzaXM7aWYoc2VsLmxlbmd0aD09PTEpe2FuYWx5c2lzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtc2luZ2xlLWV2ZW50LXN1Yi12aWV3Jyk7fWVsc2V7YW5hbHlzaXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktZS1jaHJvbWUtY2MtcmFzdGVyLXRhc2stdmlldycpO30KLWFuYWx5c2lzLnNlbGVjdGlvbj1zZWw7cmV0dXJuIGFuYWx5c2lzO30sZmluZEVxdWl2YWxlbnQobHRoaSl7cmV0dXJuIHVuZGVmaW5lZDt9LGdldCBjb250YWluaW5nU25hcHNob3QoKXtyZXR1cm4gdGhpcy50aWxlc19bMF0uY29udGFpbmluZ1NuYXBzaG90O319O3JldHVybntSYXN0ZXJUYXNrU2VsZWN0aW9uLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5lLmNocm9tZS5jYycsZnVuY3Rpb24oKXtjb25zdCBUaWxlU25hcHNob3RWaWV3PXRyLnVpLmIuZGVmaW5lKCd0ci11aS1lLWNocm9tZS1jYy10aWxlLXNuYXBzaG90LXZpZXcnLHRyLnVpLmFuYWx5c2lzLk9iamVjdFNuYXBzaG90Vmlldyk7VGlsZVNuYXBzaG90Vmlldy5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcucHJvdG90eXBlLGRlY29yYXRlKCl7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgndHItdWktZS1jaHJvbWUtY2MtdGlsZS1zbmFwc2hvdC12aWV3Jyk7dGhpcy5sYXllclRyZWVWaWV3Xz1uZXcgdHIudWkuZS5jaHJvbWUuY2MuTGF5ZXJUcmVlSG9zdEltcGxTbmFwc2hvdFZpZXcoKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmxheWVyVHJlZVZpZXdfKTt9LHVwZGF0ZUNvbnRlbnRzKCl7Y29uc3QgdGlsZT10aGlzLm9iamVjdFNuYXBzaG90Xztjb25zdCBsYXllclRyZWVIb3N0SW1wbD10aWxlLmNvbnRhaW5pbmdTbmFwc2hvdDtpZighbGF5ZXJUcmVlSG9zdEltcGwpcmV0dXJuO3RoaXMubGF5ZXJUcmVlVmlld18ub2JqZWN0U25hcHNob3Q9bGF5ZXJUcmVlSG9zdEltcGw7dGhpcy5sYXllclRyZWVWaWV3Xy5zZWxlY3Rpb249bmV3IHRyLnVpLmUuY2hyb21lLmNjLlRpbGVTZWxlY3Rpb24odGlsZSk7fX07dHIudWkuYW5hbHlzaXMuT2JqZWN0U25hcHNob3RWaWV3LnJlZ2lzdGVyKFRpbGVTbmFwc2hvdFZpZXcse3R5cGVOYW1lOidjYzo6VGlsZScsc2hvd0luVHJhY2tWaWV3OmZhbHNlfSk7cmV0dXJue1RpbGVTbmFwc2hvdFZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuZ3B1JyxmdW5jdGlvbigpe2NvbnN0IEFzeW5jU2xpY2U9dHIubW9kZWwuQXN5bmNTbGljZTtmdW5jdGlvbiBHcHVBc3luY1NsaWNlKCl7QXN5bmNTbGljZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQotR3B1QXN5bmNTbGljZS5wcm90b3R5cGU9e19fcHJvdG9fXzpBc3luY1NsaWNlLnByb3RvdHlwZSxnZXQgdmlld1N1Ykdyb3VwVGl0bGUoKXtpZih0aGlzLmFyZ3MuY2hhbm5lbCl7aWYodGhpcy5jYXRlZ29yeT09PSdkaXNhYmxlZC1ieS1kZWZhdWx0LWdwdS5kZXZpY2UnKXtyZXR1cm4nRGV2aWNlLicrdGhpcy5hcmdzLmNoYW5uZWw7fQotcmV0dXJuJ1NlcnZpY2UuJyt0aGlzLmFyZ3MuY2hhbm5lbDt9Ci1yZXR1cm4gdGhpcy50aXRsZTt9fTtBc3luY1NsaWNlLnN1YlR5cGVzLnJlZ2lzdGVyKEdwdUFzeW5jU2xpY2Use2NhdGVnb3J5UGFydHM6WydkaXNhYmxlZC1ieS1kZWZhdWx0LWdwdS5kZXZpY2UnLCdkaXNhYmxlZC1ieS1kZWZhdWx0LWdwdS5zZXJ2aWNlJ119KTtyZXR1cm57R3B1QXN5bmNTbGljZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5ncHUnLGZ1bmN0aW9uKCl7Y29uc3QgT2JqZWN0U25hcHNob3Q9dHIubW9kZWwuT2JqZWN0U25hcHNob3Q7ZnVuY3Rpb24gU3RhdGVTbmFwc2hvdCgpe09iamVjdFNuYXBzaG90LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9Ci1TdGF0ZVNuYXBzaG90LnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdFNuYXBzaG90LnByb3RvdHlwZSxwcmVJbml0aWFsaXplKCl7dGhpcy5zY3JlZW5zaG90Xz11bmRlZmluZWQ7fSxpbml0aWFsaXplKCl7aWYodGhpcy5hcmdzLnNjcmVlbnNob3Qpe3RoaXMuc2NyZWVuc2hvdF89dGhpcy5hcmdzLnNjcmVlbnNob3Q7fX0sZ2V0IHNjcmVlbnNob3QoKXtyZXR1cm4gdGhpcy5zY3JlZW5zaG90Xzt9fTtPYmplY3RTbmFwc2hvdC5zdWJUeXBlcy5yZWdpc3RlcihTdGF0ZVNuYXBzaG90LHt0eXBlTmFtZTonZ3B1OjpTdGF0ZSd9KTtyZXR1cm57U3RhdGVTbmFwc2hvdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5jaHJvbWUuZ3B1JyxmdW5jdGlvbigpe2NvbnN0IFN0YXRlU25hcHNob3RWaWV3PXRyLnVpLmIuZGVmaW5lKCd0ci11aS1lLWNocm9tZS1ncHUtc3RhdGUtc25hcHNob3QtdmlldycsdHIudWkuYW5hbHlzaXMuT2JqZWN0U25hcHNob3RWaWV3KTtTdGF0ZVNuYXBzaG90Vmlldy5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcucHJvdG90eXBlLGRlY29yYXRlKCl7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgndHItdWktZS1jaHJvbWUtZ3B1LXN0YXRlLXNuYXBzaG90LXZpZXcnKTt0aGlzLnNjcmVlbnNob3RJbWFnZV89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5zY3JlZW5zaG90SW1hZ2VfKTt9LHVwZGF0ZUNvbnRlbnRzKCl7aWYodGhpcy5vYmplY3RTbmFwc2hvdF8mJnRoaXMub2JqZWN0U25hcHNob3RfLnNjcmVlbnNob3Qpe3RoaXMuc2NyZWVuc2hvdEltYWdlXy5zcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnKwotdGhpcy5vYmplY3RTbmFwc2hvdF8uc2NyZWVuc2hvdDt9fX07dHIudWkuYW5hbHlzaXMuT2JqZWN0U25hcHNob3RWaWV3LnJlZ2lzdGVyKFN0YXRlU25hcHNob3RWaWV3LHt0eXBlTmFtZTonZ3B1OjpTdGF0ZSd9KTtyZXR1cm57U3RhdGVTbmFwc2hvdFZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe1BvbHltZXIoe2lzOid0ci11aS1hLWxheW91dC10cmVlLXN1Yi12aWV3JyxiZWhhdmlvcnM6Wyd0ci11aS1hLXN1Yi12aWV3J10sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGlvbl87fSx1cGRhdGVDb250ZW50c18oKXt0aGlzLnNldCgnJC5jb250ZW50LnRleHRDb250ZW50JywnJyk7aWYoIXRoaXMuY3VycmVudFNlbGVjdGlvbl8pcmV0dXJuO2NvbnN0IGNvbHVtbnM9W3t0aXRsZTonVGFnL05hbWUnLHZhbHVlKGxheW91dE9iamVjdCl7cmV0dXJuIGxheW91dE9iamVjdC50YWd8fCc6JytsYXlvdXRPYmplY3QubmFtZTt9fSx7dGl0bGU6J2h0bWxJZCcsdmFsdWUobGF5b3V0T2JqZWN0KXtyZXR1cm4gbGF5b3V0T2JqZWN0Lmh0bWxJZHx8Jyc7fX0se3RpdGxlOidjbGFzc05hbWVzJyx2YWx1ZShsYXlvdXRPYmplY3Qpe3JldHVybiBsYXlvdXRPYmplY3QuY2xhc3NOYW1lc3x8Jyc7fX0se3RpdGxlOidyZWFzb25zJyx2YWx1ZShsYXlvdXRPYmplY3Qpe3JldHVybiBsYXlvdXRPYmplY3QubmVlZHNMYXlvdXRSZWFzb25zLmpvaW4oJywgJyk7fX0se3RpdGxlOid3aWR0aCcsdmFsdWUobGF5b3V0T2JqZWN0KXtyZXR1cm4gbGF5b3V0T2JqZWN0LmFic29sdXRlUmVjdC53aWR0aDt9fSx7dGl0bGU6J2hlaWdodCcsdmFsdWUobGF5b3V0T2JqZWN0KXtyZXR1cm4gbGF5b3V0T2JqZWN0LmFic29sdXRlUmVjdC5oZWlnaHQ7fX0se3RpdGxlOidhYnNYJyx2YWx1ZShsYXlvdXRPYmplY3Qpe3JldHVybiBsYXlvdXRPYmplY3QuYWJzb2x1dGVSZWN0LmxlZnQ7fX0se3RpdGxlOidhYnNZJyx2YWx1ZShsYXlvdXRPYmplY3Qpe3JldHVybiBsYXlvdXRPYmplY3QuYWJzb2x1dGVSZWN0LnRvcDt9fSx7dGl0bGU6J3JlbFgnLHZhbHVlKGxheW91dE9iamVjdCl7cmV0dXJuIGxheW91dE9iamVjdC5yZWxhdGl2ZVJlY3QubGVmdDt9fSx7dGl0bGU6J3JlbFknLHZhbHVlKGxheW91dE9iamVjdCl7cmV0dXJuIGxheW91dE9iamVjdC5yZWxhdGl2ZVJlY3QudG9wO319LHt0aXRsZTonZmxvYXQnLHZhbHVlKGxheW91dE9iamVjdCl7cmV0dXJuIGxheW91dE9iamVjdC5pc0Zsb2F0PydmbG9hdCc6Jyc7fX0se3RpdGxlOidwb3NpdGlvbmVkJyx2YWx1ZShsYXlvdXRPYmplY3Qpe3JldHVybiBsYXlvdXRPYmplY3QuaXNQb3NpdGlvbmVkPydwb3NpdGlvbmVkJzonJzt9fSx7dGl0bGU6J3JlbGF0aXZlJyx2YWx1ZShsYXlvdXRPYmplY3Qpe3JldHVybiBsYXlvdXRPYmplY3QuaXNSZWxhdGl2ZVBvc2l0aW9uZWQ/J3JlbGF0aXZlJzonJzt9fSx7dGl0bGU6J3N0aWNreScsdmFsdWUobGF5b3V0T2JqZWN0KXtyZXR1cm4gbGF5b3V0T2JqZWN0LmlzU3RpY2t5UG9zaXRpb25lZD8nc3RpY2t5JzonJzt9fSx7dGl0bGU6J2Fub255bW91cycsdmFsdWUobGF5b3V0T2JqZWN0KXtyZXR1cm4gbGF5b3V0T2JqZWN0LmlzQW5vbnltb3VzPydhbm9ueW1vdXMnOicnO319LHt0aXRsZToncm93Jyx2YWx1ZShsYXlvdXRPYmplY3Qpe2lmKGxheW91dE9iamVjdC50YWJsZVJvdz09PXVuZGVmaW5lZCl7cmV0dXJuJyc7fQotcmV0dXJuIGxheW91dE9iamVjdC50YWJsZVJvdzt9fSx7dGl0bGU6J2NvbCcsdmFsdWUobGF5b3V0T2JqZWN0KXtpZihsYXlvdXRPYmplY3QudGFibGVDb2w9PT11bmRlZmluZWQpe3JldHVybicnO30KLXJldHVybiBsYXlvdXRPYmplY3QudGFibGVDb2w7fX0se3RpdGxlOidyb3dTcGFuJyx2YWx1ZShsYXlvdXRPYmplY3Qpe2lmKGxheW91dE9iamVjdC50YWJsZVJvd1NwYW49PT11bmRlZmluZWQpe3JldHVybicnO30KLXJldHVybiBsYXlvdXRPYmplY3QudGFibGVSb3dTcGFuO319LHt0aXRsZTonY29sU3BhbicsdmFsdWUobGF5b3V0T2JqZWN0KXtpZihsYXlvdXRPYmplY3QudGFibGVDb2xTcGFuPT09dW5kZWZpbmVkKXtyZXR1cm4nJzt9Ci1yZXR1cm4gbGF5b3V0T2JqZWN0LnRhYmxlQ29sU3Bhbjt9fSx7dGl0bGU6J2FkZHJlc3MnLHZhbHVlKGxheW91dE9iamVjdCl7cmV0dXJuIGxheW91dE9iamVjdC5pZC50b1N0cmluZygxNik7fX1dO2NvbnN0IHRhYmxlPXRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLXRhYmxlJyk7dGFibGUuZGVmYXVsdEV4cGFuc2lvblN0YXRlQ2FsbGJhY2s9ZnVuY3Rpb24obGF5b3V0T2JqZWN0LHBhcmVudExheW91dE9iamVjdCl7cmV0dXJuIHRydWU7fTt0YWJsZS5zdWJSb3dzUHJvcGVydHlOYW1lPSdjaGlsZExheW91dE9iamVjdHMnO3RhYmxlLnRhYmxlQ29sdW1ucz1jb2x1bW5zO3RhYmxlLnRhYmxlUm93cz10aGlzLmN1cnJlbnRTZWxlY3Rpb25fLm1hcChmdW5jdGlvbihzbmFwc2hvdCl7cmV0dXJuIHNuYXBzaG90LnJvb3RMYXlvdXRPYmplY3Q7fSk7dGFibGUucmVidWlsZCgpO1BvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5hcHBlbmRDaGlsZCh0YWJsZSk7fSx9KTtyZXR1cm57fTt9KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtbGF5b3V0LXRyZWUtc3ViLXZpZXcnLHRyLmUuY2hyb21lLkxheW91dFRyZWVTbmFwc2hvdCx7bXVsdGk6ZmFsc2UsdGl0bGU6J0xheW91dCBUcmVlJyx9KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtbGF5b3V0LXRyZWUtc3ViLXZpZXcnLHRyLmUuY2hyb21lLkxheW91dFRyZWVTbmFwc2hvdCx7bXVsdGk6dHJ1ZSx0aXRsZTonTGF5b3V0IFRyZWVzJyx9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmJlaGF2aW9ycycsZnVuY3Rpb24oKXtjb25zdCBTaWRlUGFuZWw9e2dldCByYW5nZU9mSW50ZXJlc3QoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sc2V0IHJhbmdlT2ZJbnRlcmVzdChyYW5nZU9mSW50ZXJlc3Qpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxnZXQgc2VsZWN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sZ2V0IG1vZGVsKCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LHNldCBtb2RlbChtb2RlbCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LHN1cHBvcnRzTW9kZWwobSl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9fTtyZXR1cm57U2lkZVBhbmVsLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5zaWRlX3BhbmVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFNpZGVQYW5lbFJlZ2lzdHJ5KCl7fQotY29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5CQVNJQ19SRUdJU1RSWV9NT0RFKTt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoU2lkZVBhbmVsUmVnaXN0cnksb3B0aW9ucyk7cmV0dXJue1NpZGVQYW5lbFJlZ2lzdHJ5LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5lLnMnLGZ1bmN0aW9uKCl7Y29uc3QgQmxhbWVDb250ZXh0U25hcHNob3Q9dHIuZS5jaHJvbWUuQmxhbWVDb250ZXh0U25hcHNob3Q7Y29uc3QgRnJhbWVUcmVlTm9kZVNuYXBzaG90PXRyLmUuY2hyb21lLkZyYW1lVHJlZU5vZGVTbmFwc2hvdDtjb25zdCBSZW5kZXJGcmFtZVNuYXBzaG90PXRyLmUuY2hyb21lLlJlbmRlckZyYW1lU25hcHNob3Q7Y29uc3QgVG9wTGV2ZWxTbmFwc2hvdD10ci5lLmNocm9tZS5Ub3BMZXZlbFNuYXBzaG90O2NvbnN0IEJsYW1lQ29udGV4dEluc3RhbmNlPXRyLmUuY2hyb21lLkJsYW1lQ29udGV4dEluc3RhbmNlO2NvbnN0IEZyYW1lVHJlZU5vZGVJbnN0YW5jZT10ci5lLmNocm9tZS5GcmFtZVRyZWVOb2RlSW5zdGFuY2U7Y29uc3QgUmVuZGVyRnJhbWVJbnN0YW5jZT10ci5lLmNocm9tZS5SZW5kZXJGcmFtZUluc3RhbmNlO2NvbnN0IFRvcExldmVsSW5zdGFuY2U9dHIuZS5jaHJvbWUuVG9wTGV2ZWxJbnN0YW5jZTtmdW5jdGlvbiBSb3coY29udGV4dCl7dGhpcy5zdWJSb3dzPXVuZGVmaW5lZDt0aGlzLmNvbnRleHRzPVtdO3RoaXMudHlwZT11bmRlZmluZWQ7dGhpcy5yZW5kZXJlcj0nTi9BJzt0aGlzLnVybD11bmRlZmluZWQ7dGhpcy50aW1lPTA7dGhpcy5ldmVudHNPZkludGVyZXN0PW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2lmKGNvbnRleHQ9PT11bmRlZmluZWQpcmV0dXJuO3RoaXMudHlwZT1jb250ZXh0Lm9iamVjdEluc3RhbmNlLmJsYW1lQ29udGV4dFR5cGU7dGhpcy5jb250ZXh0cy5wdXNoKGNvbnRleHQpO2lmKGNvbnRleHQgaW5zdGFuY2VvZiBGcmFtZVRyZWVOb2RlU25hcHNob3Qpe2lmKGNvbnRleHQucmVuZGVyRnJhbWUpe3RoaXMuY29udGV4dHMucHVzaChjb250ZXh0LnJlbmRlckZyYW1lKTt0aGlzLnJlbmRlcmVyPWNvbnRleHQucmVuZGVyRnJhbWUub2JqZWN0SW5zdGFuY2UucGFyZW50LnBpZDt9fWVsc2UgaWYoY29udGV4dCBpbnN0YW5jZW9mIFJlbmRlckZyYW1lU25hcHNob3Qpe2lmKGNvbnRleHQuZnJhbWVUcmVlTm9kZSl7dGhpcy5jb250ZXh0cy5wdXNoKGNvbnRleHQuZnJhbWVUcmVlTm9kZSk7fQotdGhpcy5yZW5kZXJlcj1jb250ZXh0Lm9iamVjdEluc3RhbmNlLnBhcmVudC5waWQ7fWVsc2UgaWYoY29udGV4dCBpbnN0YW5jZW9mIFRvcExldmVsU25hcHNob3Qpe3RoaXMucmVuZGVyZXI9Y29udGV4dC5vYmplY3RJbnN0YW5jZS5wYXJlbnQucGlkO31lbHNle3Rocm93IG5ldyBFcnJvcignVW5rbm93biBjb250ZXh0IHR5cGUnKTt9Ci10aGlzLmV2ZW50c09mSW50ZXJlc3QuYWRkRXZlbnRTZXQodGhpcy5jb250ZXh0cyk7dGhpcy51cmw9Y29udGV4dC51cmw7fQotY29uc3QgZ3JvdXBGdW5jdGlvbnM9e25vbmU6cm93cz0+cm93cyx0cmVlKHJvd3Mscm93TWFwKXtjb25zdCBnZXRQYXJlbnRSb3c9ZnVuY3Rpb24ocm93KXtsZXQgcGl2b3Q7cm93LmNvbnRleHRzLmZvckVhY2goZnVuY3Rpb24oY29udGV4dCl7aWYoY29udGV4dCBpbnN0YW5jZW9mIHRyLmUuY2hyb21lLkZyYW1lVHJlZU5vZGVTbmFwc2hvdCl7cGl2b3Q9Y29udGV4dDt9fSk7aWYocGl2b3QmJnBpdm90LnBhcmVudENvbnRleHQpe3JldHVybiByb3dNYXBbcGl2b3QucGFyZW50Q29udGV4dC5ndWlkXTt9Ci1yZXR1cm4gdW5kZWZpbmVkO307Y29uc3Qgcm9vdFJvd3M9W107cm93cy5mb3JFYWNoKGZ1bmN0aW9uKHJvdyl7Y29uc3QgcGFyZW50Um93PWdldFBhcmVudFJvdyhyb3cpO2lmKHBhcmVudFJvdz09PXVuZGVmaW5lZCl7cm9vdFJvd3MucHVzaChyb3cpO3JldHVybjt9Ci1pZihwYXJlbnRSb3cuc3ViUm93cz09PXVuZGVmaW5lZCl7cGFyZW50Um93LnN1YlJvd3M9W107fQotcGFyZW50Um93LnN1YlJvd3MucHVzaChyb3cpO30pO2NvbnN0IGFnZ3JlZ2F0ZUFsbERlc2NlbmRhbnRzPWZ1bmN0aW9uKHJvdyl7aWYoIXJvdy5zdWJSb3dzKXtpZihnZXRQYXJlbnRSb3cocm93KSl7cm93LnR5cGU9J1N1YmZyYW1lJzt9Ci1yZXR1cm4gcm93O30KLWNvbnN0IHJlc3VsdD1uZXcgUm93KCk7cmVzdWx0LnR5cGU9J0ZyYW1lIFRyZWUnO3Jlc3VsdC5yZW5kZXJlcj1yb3cucmVuZGVyZXI7cmVzdWx0LnVybD1yb3cudXJsO3Jlc3VsdC5zdWJSb3dzPVtyb3ddO3Jvdy5zdWJSb3dzLmZvckVhY2goc3ViUm93PT5yZXN1bHQuc3ViUm93cy5wdXNoKGFnZ3JlZ2F0ZUFsbERlc2NlbmRhbnRzKHN1YlJvdykpKTtyZXN1bHQuc3ViUm93cy5mb3JFYWNoKGZ1bmN0aW9uKHN1YlJvdyl7cmVzdWx0LnRpbWUrPXN1YlJvdy50aW1lO3Jlc3VsdC5ldmVudHNPZkludGVyZXN0LmFkZEV2ZW50U2V0KHN1YlJvdy5ldmVudHNPZkludGVyZXN0KTt9KTtyb3cuc3ViUm93cz11bmRlZmluZWQ7cmV0dXJuIHJlc3VsdDt9O3JldHVybiByb290Um93cy5tYXAocm9vdFJvdz0+YWdncmVnYXRlQWxsRGVzY2VuZGFudHMocm9vdFJvdykpO319O1BvbHltZXIoe2lzOid0ci11aS1lLXMtZnJhbWUtZGF0YS1zaWRlLXBhbmVsJyxiZWhhdmlvcnM6W3RyLnVpLmJlaGF2aW9ycy5TaWRlUGFuZWxdLHJlYWR5KCl7dGhpcy5tb2RlbF89dW5kZWZpbmVkO3RoaXMucmFuZ2VPZkludGVyZXN0Xz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7dGhpcy4kLnRhYmxlLnNob3dIZWFkZXI9dHJ1ZTt0aGlzLiQudGFibGUuc2VsZWN0aW9uTW9kZT10ci51aS5iLlRhYmxlRm9ybWF0LlNlbGVjdGlvbk1vZGUuUk9XO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9dGhpcy5jcmVhdGVGcmFtZURhdGFUYWJsZUNvbHVtbnNfKCk7dGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbi1jaGFuZ2VkJyxmdW5jdGlvbihlKXt0aGlzLnNlbGVjdEV2ZW50U2V0Xyh0aGlzLiQudGFibGUuc2VsZWN0ZWRUYWJsZVJvdy5ldmVudHNPZkludGVyZXN0KTt9LmJpbmQodGhpcykpO3RoaXMuJC5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyxmdW5jdGlvbihlKXt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30uYmluZCh0aGlzKSk7fSxzZWxlY3RFdmVudFNldF8oZXZlbnRTZXQpe2NvbnN0IGV2ZW50PW5ldyB0ci5tb2RlbC5SZXF1ZXN0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoKTtldmVudC5zZWxlY3Rpb249ZXZlbnRTZXQ7dGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTt9LGNyZWF0ZUZyYW1lRGF0YVRhYmxlQ29sdW1uc18oKXtyZXR1cm5be3RpdGxlOidSZW5kZXJlcicsdmFsdWU6cm93PT5yb3cucmVuZGVyZXIsY21wOihhLGIpPT5hLnJlbmRlcmVyLWIucmVuZGVyZXJ9LHt0aXRsZTonVHlwZScsdmFsdWU6cm93PT5yb3cudHlwZX0se3RpdGxlOidUaW1lJyx2YWx1ZTpyb3c9PnRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbihyb3cudGltZSx7dW5pdDp0ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMsb3duZXJEb2N1bWVudDp0aGlzLm93bmVyRG9jdW1lbnR9KSxjbXA6KGEsYik9PmEudGltZS1iLnRpbWV9LHt0aXRsZTonVVJMJyx2YWx1ZTpyb3c9PnJvdy51cmwsY21wOihhLGIpPT4oYS51cmx8fCcnKS5sb2NhbGVDb21wYXJlKGIudXJsfHwnJyl9XTt9LGNyZWF0ZUZyYW1lRGF0YVRhYmxlUm93c18oKXtpZighdGhpcy5tb2RlbF8pcmV0dXJuW107Y29uc3Qgcm93cz1bXTtjb25zdCByb3dNYXA9e307Zm9yKGNvbnN0IHByb2Mgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLm1vZGVsXy5wcm9jZXNzZXMpKXtwcm9jLm9iamVjdHMuaXRlck9iamVjdEluc3RhbmNlcyhmdW5jdGlvbihvYmplY3RJbnN0YW5jZSl7aWYoIShvYmplY3RJbnN0YW5jZSBpbnN0YW5jZW9mIEJsYW1lQ29udGV4dEluc3RhbmNlKSl7cmV0dXJuO30KLW9iamVjdEluc3RhbmNlLnNuYXBzaG90cy5mb3JFYWNoKGZ1bmN0aW9uKHNuYXBzaG90KXtpZihyb3dNYXBbc25hcHNob3QuZ3VpZF0pcmV0dXJuO2NvbnN0IHJvdz1uZXcgUm93KHNuYXBzaG90KTtyb3cuY29udGV4dHMuZm9yRWFjaChjb250ZXh0PT5yb3dNYXBbY29udGV4dC5ndWlkXT1yb3cpO3Jvd3MucHVzaChyb3cpO30sdGhpcyk7fSx0aGlzKTt9Ci1mb3IoY29uc3QgcHJvYyBvZiBPYmplY3QudmFsdWVzKHRoaXMubW9kZWxfLnByb2Nlc3Nlcykpe2Zvcihjb25zdCB0aHJlYWQgb2YgT2JqZWN0LnZhbHVlcyhwcm9jLnRocmVhZHMpKXt0aHJlYWQuc2xpY2VHcm91cC5pdGVyU2xpY2VzSW5UaW1lUmFuZ2UoZnVuY3Rpb24odG9wTGV2ZWxTbGljZSl7dG9wTGV2ZWxTbGljZS5jb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uKGNvbnRleHQpe2lmKCFjb250ZXh0LnNuYXBzaG90Lmd1aWR8fCFyb3dNYXBbY29udGV4dC5zbmFwc2hvdC5ndWlkXSl7cmV0dXJuO30KLWNvbnN0IHJvdz1yb3dNYXBbY29udGV4dC5zbmFwc2hvdC5ndWlkXTtyb3cuZXZlbnRzT2ZJbnRlcmVzdC5wdXNoKHRvcExldmVsU2xpY2UpO3Jvdy50aW1lKz10b3BMZXZlbFNsaWNlLnNlbGZUaW1lfHwwO30pO30sdGhpcy5jdXJyZW50UmFuZ2VPZkludGVyZXN0Lm1pbix0aGlzLmN1cnJlbnRSYW5nZU9mSW50ZXJlc3QubWF4KTt9fQotY29uc3Qgc2VsZWN0PXRoaXMuJC5zZWxlY3Q7Y29uc3QgZ3JvdXBPcHRpb249c2VsZWN0Lm9wdGlvbnNbc2VsZWN0LnNlbGVjdGVkSW5kZXhdLnZhbHVlO2NvbnN0IGdyb3VwRnVuY3Rpb249Z3JvdXBGdW5jdGlvbnNbZ3JvdXBPcHRpb25dO3JldHVybiBncm91cEZ1bmN0aW9uKHJvd3Mscm93TWFwKTt9LHVwZGF0ZUNvbnRlbnRzXygpe3RoaXMuJC50YWJsZS50YWJsZVJvd3M9dGhpcy5jcmVhdGVGcmFtZURhdGFUYWJsZVJvd3NfKCk7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9LHN1cHBvcnRzTW9kZWwobSl7aWYoIW0pe3JldHVybntzdXBwb3J0ZWQ6ZmFsc2UscmVhc29uOidObyBtb2RlbCBhdmFpbGFibGUuJ307fQotY29uc3QgYW5zPXtzdXBwb3J0ZWQ6ZmFsc2V9O2Zvcihjb25zdCBwcm9jIG9mIE9iamVjdC52YWx1ZXMobS5wcm9jZXNzZXMpKXtwcm9jLm9iamVjdHMuaXRlck9iamVjdEluc3RhbmNlcyhmdW5jdGlvbihpbnN0YW5jZSl7aWYoaW5zdGFuY2UgaW5zdGFuY2VvZiBCbGFtZUNvbnRleHRJbnN0YW5jZSl7YW5zLnN1cHBvcnRlZD10cnVlO319KTt9Ci1pZighYW5zLnN1cHBvcnRlZCl7YW5zLnJlYXNvbj0nTm8gZnJhbWUgZGF0YSBhdmFpbGFibGUnO30KLXJldHVybiBhbnM7fSxnZXQgY3VycmVudFJhbmdlT2ZJbnRlcmVzdCgpe2lmKHRoaXMucmFuZ2VPZkludGVyZXN0Xy5pc0VtcHR5KXtyZXR1cm4gdGhpcy5tb2RlbF8uYm91bmRzO30KLXJldHVybiB0aGlzLnJhbmdlT2ZJbnRlcmVzdF87fSxnZXQgcmFuZ2VPZkludGVyZXN0KCl7cmV0dXJuIHRoaXMucmFuZ2VPZkludGVyZXN0Xzt9LHNldCByYW5nZU9mSW50ZXJlc3QocmFuZ2VPZkludGVyZXN0KXt0aGlzLnJhbmdlT2ZJbnRlcmVzdF89cmFuZ2VPZkludGVyZXN0O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgc2VsZWN0aW9uKCl7fSxzZXQgc2VsZWN0aW9uKF8pe30sZ2V0IHRleHRMYWJlbCgpe3JldHVybidGcmFtZSBEYXRhJzt9LGdldCBtb2RlbCgpe3JldHVybiB0aGlzLm1vZGVsXzt9LHNldCBtb2RlbChtb2RlbCl7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy51cGRhdGVDb250ZW50c18oKTt9fSk7dHIudWkuc2lkZV9wYW5lbC5TaWRlUGFuZWxSZWdpc3RyeS5yZWdpc3RlcihmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1lLXMtZnJhbWUtZGF0YS1zaWRlLXBhbmVsJyk7fSk7fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1iLWNoYXJ0LWxlZ2VuZC1rZXknLHJlYWR5KCl7dGhpcy4kLmNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsdGhpcy5vbkNoZWNrYm94Q2hhbmdlXy5iaW5kKHRoaXMpKTt9LG9uQ2hlY2tib3hDaGFuZ2VfKCl7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsdHIudWkuYi5EYXRhU2VyaWVzRW5hYmxlQ2hhbmdlRXZlbnRUeXBlLHRydWUsZmFsc2Use2tleTpQb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudCxlbmFibGVkOnRoaXMuZW5hYmxlZH0pO30sc2V0IHRleHRDb250ZW50KHQpe1BvbHltZXIuZG9tKHRoaXMuJC5sYWJlbCkudGV4dENvbnRlbnQ9dDtQb2x5bWVyLmRvbSh0aGlzLiQubGluaykudGV4dENvbnRlbnQ9dDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sc2V0IHdpZHRoKHcpe3ctPTIwO3RoaXMuJC5saW5rLnN0eWxlLndpZHRoPXcrJ3B4Jzt0aGlzLiQubGFiZWwuc3R5bGUud2lkdGg9dysncHgnO30sZ2V0IHRleHRDb250ZW50KCl7cmV0dXJuIFBvbHltZXIuZG9tKHRoaXMuJC5sYWJlbCkudGV4dENvbnRlbnQ7fSxzZXQgb3B0aW9uYWwob3B0aW9uYWwpe3RoaXMuJC5jaGVja2JveC5zdHlsZS52aXNpYmlsaXR5PW9wdGlvbmFsPyd2aXNpYmxlJzonaGlkZGVuJzt9LGdldCBvcHRpb25hbCgpe3JldHVybiB0aGlzLiQuY2hlY2tib3guc3R5bGUudmlzaWJpbGl0eT09PSd2aXNpYmxlJzt9LHNldCBlbmFibGVkKGVuYWJsZWQpe3RoaXMuJC5jaGVja2JveC5jaGVja2VkPWVuYWJsZWQ/J2NoZWNrZWQnOicnO30sZ2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy4kLmNoZWNrYm94LmNoZWNrZWQ7fSxzZXQgY29sb3IoYyl7dGhpcy4kLmxhYmVsLnN0eWxlLmNvbG9yPWM7dGhpcy4kLmxpbmsuY29sb3I9Yzt9LHNldCB0YXJnZXQodGFyZ2V0KXt0aGlzLiQubGluay5zZXRTZWxlY3Rpb25BbmRDb250ZW50KHRhcmdldCxQb2x5bWVyLmRvbSh0aGlzLiQubGFiZWwpLnRleHRDb250ZW50KTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHRhcmdldCgpe3JldHVybiB0aGlzLiQubGluay5zZWxlY3Rpb247fSxzZXQgdGl0bGUodGl0bGUpe3RoaXMuJC5saW5rLnRpdGxlPXRpdGxlO30sdXBkYXRlQ29udGVudHNfKCl7dGhpcy4kLmxpbmsuc3R5bGUuZGlzcGxheT10aGlzLnRhcmdldD8nJzonbm9uZSc7dGhpcy4kLmxhYmVsLnN0eWxlLmRpc3BsYXk9dGhpcy50YXJnZXQ/J25vbmUnOicnO3RoaXMuJC5sYWJlbC5odG1sRm9yPXRoaXMub3B0aW9uYWw/J2NoZWNrYm94JzonJzt9fSk7J3VzZSBzdHJpY3QnOyhmdW5jdGlvbih3aW5kb3cpe3dpbmRvdy5kZWZpbmU9ZnVuY3Rpb24oeCl7d2luZG93LmQzPXg7fTt3aW5kb3cuZGVmaW5lLmFtZD10cnVlO30pKHRoaXMpOyFmdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7cmV0dXJuIG51bGwhPW4mJiFpc05hTihuKX1mdW5jdGlvbiB0KG4pe3JldHVybiBuLmxlbmd0aH1mdW5jdGlvbiBlKG4pe2Zvcih2YXIgdD0xO24qdCUxOyl0Kj0xMDtyZXR1cm4gdH1mdW5jdGlvbiByKG4sdCl7dHJ5e2Zvcih2YXIgZSBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHt2YWx1ZTp0W2VdLGVudW1lcmFibGU6ITF9KX1jYXRjaChyKXtuLnByb3RvdHlwZT10fX1mdW5jdGlvbiB1KCl7fWZ1bmN0aW9uIGkobil7cmV0dXJuIGFhK24gaW4gdGhpc31mdW5jdGlvbiBvKG4pe3JldHVybiBuPWFhK24sbiBpbiB0aGlzJiZkZWxldGUgdGhpc1tuXX1mdW5jdGlvbiBhKCl7dmFyIG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0KXtuLnB1c2godCl9KSxufWZ1bmN0aW9uIGMoKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXQuY2hhckNvZGVBdCgwKT09PWNhJiYrK247cmV0dXJuIG59ZnVuY3Rpb24gcygpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG4uY2hhckNvZGVBdCgwKT09PWNhKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGwoKXt9ZnVuY3Rpb24gZihuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0LGFyZ3VtZW50cyk7cmV0dXJuIHI9PT10P246cn19ZnVuY3Rpb24gaChuLHQpe2lmKHQgaW4gbilyZXR1cm4gdDt0PXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHJpbmcoMSk7Zm9yKHZhciBlPTAscj1zYS5sZW5ndGg7cj5lOysrZSl7dmFyIHU9c2FbZV0rdDtpZih1IGluIG4pcmV0dXJuIHV9fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KG4pe2Z1bmN0aW9uIHQoKXtmb3IodmFyIHQscj1lLHU9LTEsaT1yLmxlbmd0aDsrK3U8aTspKHQ9clt1XS5vbikmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBufXZhciBlPVtdLHI9bmV3IHU7cmV0dXJuIHQub249ZnVuY3Rpb24odCx1KXt2YXIgaSxvPXIuZ2V0KHQpO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/byYmby5vbjoobyYmKG8ub249bnVsbCxlPWUuc2xpY2UoMCxpPWUuaW5kZXhPZihvKSkuY29uY2F0KGUuc2xpY2UoaSsxKSksci5yZW1vdmUodCkpLHUmJmUucHVzaChyLnNldCh0LHtvbjp1fSkpLG4pfSx0fWZ1bmN0aW9uIGQoKXtYby5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIG0oKXtmb3IodmFyIG4sdD1Yby5ldmVudDtuPXQuc291cmNlRXZlbnQ7KXQ9bjtyZXR1cm4gdH1mdW5jdGlvbiB5KG4pe2Zvcih2YXIgdD1uZXcgcCxlPTAscj1hcmd1bWVudHMubGVuZ3RoOysrZTxyOyl0W2FyZ3VtZW50c1tlXV09dih0KTtyZXR1cm4gdC5vZj1mdW5jdGlvbihlLHIpe3JldHVybiBmdW5jdGlvbih1KXt0cnl7dmFyIGk9dS5zb3VyY2VFdmVudD1Yby5ldmVudDt1LnRhcmdldD1uLFhvLmV2ZW50PXUsdFt1LnR5cGVdLmFwcGx5KGUscil9ZmluYWxseXtYby5ldmVudD1pfX19LHR9ZnVuY3Rpb24geChuKXtyZXR1cm4gZmEobixkYSksbn1mdW5jdGlvbiBNKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4gaGEobix0aGlzKX19ZnVuY3Rpb24gXyhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmZ1bmN0aW9uKCl7cmV0dXJuIGdhKG4sdGhpcyl9fWZ1bmN0aW9uIGIobix0KXtmdW5jdGlvbiBlKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9ZnVuY3Rpb24gcigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX1mdW5jdGlvbiB1KCl7dGhpcy5zZXRBdHRyaWJ1dGUobix0KX1mdW5jdGlvbiBpKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsdCl9ZnVuY3Rpb24gbygpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6dGhpcy5zZXRBdHRyaWJ1dGUobixlKX1mdW5jdGlvbiBhKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsZSl9cmV0dXJuIG49WG8ubnMucXVhbGlmeShuKSxudWxsPT10P24ubG9jYWw/cjplOiJmdW5jdGlvbiI9PXR5cGVvZiB0P24ubG9jYWw/YTpvOm4ubG9jYWw/aTp1fWZ1bmN0aW9uIHcobil7cmV0dXJuIG4udHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIil9ZnVuY3Rpb24gUyhuKXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86XnxcXHMrKSIrWG8ucmVxdW90ZShuKSsiKD86XFxzK3wkKSIsImciKX1mdW5jdGlvbiBrKG4pe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBFKG4sdCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT0tMTsrK2U8dTspbltlXSh0aGlzLHQpfWZ1bmN0aW9uIHIoKXtmb3IodmFyIGU9LTEscj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTsrK2U8dTspbltlXSh0aGlzLHIpfW49ayhuKS5tYXAoQSk7dmFyIHU9bi5sZW5ndGg7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/cjplfWZ1bmN0aW9uIEEobil7dmFyIHQ9UyhuKTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtpZih1PWUuY2xhc3NMaXN0KXJldHVybiByP3UuYWRkKG4pOnUucmVtb3ZlKG4pO3ZhciB1PWUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIjtyPyh0Lmxhc3RJbmRleD0wLHQudGVzdCh1KXx8ZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix3KHUrIiAiK24pKSk6ZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix3KHUucmVwbGFjZSh0LCIgIikpKX19ZnVuY3Rpb24gQyhuLHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9ZnVuY3Rpb24gdSgpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfWZ1bmN0aW9uIGkoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobik6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHIsZSl9cmV0dXJuIG51bGw9PXQ/cjoiZnVuY3Rpb24iPT10eXBlb2YgdD9pOnV9ZnVuY3Rpb24gTihuLHQpe2Z1bmN0aW9uIGUoKXtkZWxldGUgdGhpc1tuXX1mdW5jdGlvbiByKCl7dGhpc1tuXT10fWZ1bmN0aW9uIHUoKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX1yZXR1cm4gbnVsbD09dD9lOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3U6cn1mdW5jdGlvbiBMKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246KG49WG8ubnMucXVhbGlmeShuKSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLnNwYWNlLG4ubG9jYWwpfTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHRoaXMubmFtZXNwYWNlVVJJLG4pfX1mdW5jdGlvbiBUKG4pe3JldHVybntfX2RhdGFfXzpufX1mdW5jdGlvbiBxKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2YSh0aGlzLG4pfX1mdW5jdGlvbiB6KG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RofHwobj1Yby5hc2NlbmRpbmcpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmU/bih0Ll9fZGF0YV9fLGUuX19kYXRhX18pOiF0LSFlfX1mdW5jdGlvbiBSKG4sdCl7Zm9yKHZhciBlPTAscj1uLmxlbmd0aDtyPmU7ZSsrKWZvcih2YXIgdSxpPW5bZV0sbz0wLGE9aS5sZW5ndGg7YT5vO28rKykodT1pW29dKSYmdCh1LG8sZSk7cmV0dXJuIG59ZnVuY3Rpb24gRChuKXtyZXR1cm4gZmEobix5YSksbn1mdW5jdGlvbiBQKG4pe3ZhciB0LGU7cmV0dXJuIGZ1bmN0aW9uKHIsdSxpKXt2YXIgbyxhPW5baV0udXBkYXRlLGM9YS5sZW5ndGg7Zm9yKGkhPWUmJihlPWksdD0wKSx1Pj10JiYodD11KzEpOyEobz1hW3RdKSYmKyt0PGM7KTtyZXR1cm4gb319ZnVuY3Rpb24gVSgpe3ZhciBuPXRoaXMuX190cmFuc2l0aW9uX187biYmKytuLmFjdGl2ZX1mdW5jdGlvbiBqKG4sdCxlKXtmdW5jdGlvbiByKCl7dmFyIHQ9dGhpc1tvXTt0JiYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG4sdCx0LiQpLGRlbGV0ZSB0aGlzW29dKX1mdW5jdGlvbiB1KCl7dmFyIHU9Yyh0LEJvKGFyZ3VtZW50cykpO3IuY2FsbCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobix0aGlzW29dPXUsdS4kPWUpLHUuXz10fWZ1bmN0aW9uIGkoKXt2YXIgdCxlPW5ldyBSZWdFeHAoIl5fX29uKFteLl0rKSIrWG8ucmVxdW90ZShuKSsiJCIpO2Zvcih2YXIgciBpbiB0aGlzKWlmKHQ9ci5tYXRjaChlKSl7dmFyIHU9dGhpc1tyXTt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodFsxXSx1LHUuJCksZGVsZXRlIHRoaXNbcl19fXZhciBvPSJfX29uIituLGE9bi5pbmRleE9mKCIuIiksYz1IO2E+MCYmKG49bi5zdWJzdHJpbmcoMCxhKSk7dmFyIHM9TWEuZ2V0KG4pO3JldHVybiBzJiYobj1zLGM9RiksYT90P3U6cjp0P2c6aX1mdW5jdGlvbiBIKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPVhvLmV2ZW50O1hvLmV2ZW50PWUsdFswXT10aGlzLl9fZGF0YV9fO3RyeXtuLmFwcGx5KHRoaXMsdCl9ZmluYWxseXtYby5ldmVudD1yfX19ZnVuY3Rpb24gRihuLHQpe3ZhciBlPUgobix0KTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxyPW4ucmVsYXRlZFRhcmdldDtyJiYocj09PXR8fDgmci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSl8fGUuY2FsbCh0LG4pfX1mdW5jdGlvbiBPKCl7dmFyIG49Ii5kcmFnc3VwcHJlc3MtIisgKytiYSx0PSJjbGljayIrbixlPVhvLnNlbGVjdChHbykub24oInRvdWNobW92ZSIrbixkKS5vbigiZHJhZ3N0YXJ0IituLGQpLm9uKCJzZWxlY3RzdGFydCIrbixkKTtpZihfYSl7dmFyIHI9Sm8uc3R5bGUsdT1yW19hXTtyW19hXT0ibm9uZSJ9cmV0dXJuIGZ1bmN0aW9uKGkpe2Z1bmN0aW9uIG8oKXtlLm9uKHQsbnVsbCl9ZS5vbihuLG51bGwpLF9hJiYocltfYV09dSksaSYmKGUub24odCxmdW5jdGlvbigpe2QoKSxvKCl9LCEwKSxzZXRUaW1lb3V0KG8sMCkpfX1mdW5jdGlvbiBZKG4sdCl7dC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIGU9bi5vd25lclNWR0VsZW1lbnR8fG47aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIHI9ZS5jcmVhdGVTVkdQb2ludCgpO2lmKDA+d2EmJihHby5zY3JvbGxYfHxHby5zY3JvbGxZKSl7ZT1Yby5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpO3ZhciB1PWVbMF1bMF0uZ2V0U2NyZWVuQ1RNKCk7d2E9ISh1LmZ8fHUuZSksZS5yZW1vdmUoKX1yZXR1cm4gd2E/KHIueD10LnBhZ2VYLHIueT10LnBhZ2VZKTooci54PXQuY2xpZW50WCxyLnk9dC5jbGllbnRZKSxyPXIubWF0cml4VHJhbnNmb3JtKG4uZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSxbci54LHIueV19dmFyIGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bdC5jbGllbnRYLWkubGVmdC1uLmNsaWVudExlZnQsdC5jbGllbnRZLWkudG9wLW4uY2xpZW50VG9wXX1mdW5jdGlvbiBJKG4pe3JldHVybiBuPjA/MTowPm4/LTE6MH1mdW5jdGlvbiBaKG4sdCxlKXtyZXR1cm4odFswXS1uWzBdKSooZVsxXS1uWzFdKS0odFsxXS1uWzFdKSooZVswXS1uWzBdKX1mdW5jdGlvbiBWKG4pe3JldHVybiBuPjE/MDotMT5uP1NhOk1hdGguYWNvcyhuKX1mdW5jdGlvbiBYKG4pe3JldHVybiBuPjE/RWE6LTE+bj8tRWE6TWF0aC5hc2luKG4pfWZ1bmN0aW9uICQobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKS0xL24pLzJ9ZnVuY3Rpb24gQihuKXtyZXR1cm4oKG49TWF0aC5leHAobikpKzEvbikvMn1mdW5jdGlvbiBXKG4pe3JldHVybigobj1NYXRoLmV4cCgyKm4pKS0xKS8obisxKX1mdW5jdGlvbiBKKG4pe3JldHVybihuPU1hdGguc2luKG4vMikpKm59ZnVuY3Rpb24gRygpe31mdW5jdGlvbiBLKG4sdCxlKXtyZXR1cm4gbmV3IFEobix0LGUpfWZ1bmN0aW9uIFEobix0LGUpe3RoaXMuaD1uLHRoaXMucz10LHRoaXMubD1lfWZ1bmN0aW9uIG50KG4sdCxlKXtmdW5jdGlvbiByKG4pe3JldHVybiBuPjM2MD9uLT0zNjA6MD5uJiYobis9MzYwKSw2MD5uP2krKG8taSkqbi82MDoxODA+bj9vOjI0MD5uP2krKG8taSkqKDI0MC1uKS82MDppfWZ1bmN0aW9uIHUobil7cmV0dXJuIE1hdGgucm91bmQoMjU1KnIobikpfXZhciBpLG87cmV0dXJuIG49aXNOYU4obik/MDoobiU9MzYwKTwwP24rMzYwOm4sdD1pc05hTih0KT8wOjA+dD8wOnQ+MT8xOnQsZT0wPmU/MDplPjE/MTplLG89LjU+PWU/ZSooMSt0KTplK3QtZSp0LGk9MiplLW8sZ3QodShuKzEyMCksdShuKSx1KG4tMTIwKSl9ZnVuY3Rpb24gdHQobix0LGUpe3JldHVybiBuZXcgZXQobix0LGUpfWZ1bmN0aW9uIGV0KG4sdCxlKXt0aGlzLmg9bix0aGlzLmM9dCx0aGlzLmw9ZX1mdW5jdGlvbiBydChuLHQsZSl7cmV0dXJuIGlzTmFOKG4pJiYobj0wKSxpc05hTih0KSYmKHQ9MCksdXQoZSxNYXRoLmNvcyhuKj1OYSkqdCxNYXRoLnNpbihuKSp0KX1mdW5jdGlvbiB1dChuLHQsZSl7cmV0dXJuIG5ldyBpdChuLHQsZSl9ZnVuY3Rpb24gaXQobix0LGUpe3RoaXMubD1uLHRoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIG90KG4sdCxlKXt2YXIgcj0obisxNikvMTE2LHU9cit0LzUwMCxpPXItZS8yMDA7cmV0dXJuIHU9Y3QodSkqRmEscj1jdChyKSpPYSxpPWN0KGkpKllhLGd0KGx0KDMuMjQwNDU0Mip1LTEuNTM3MTM4NSpyLS40OTg1MzE0KmkpLGx0KC0uOTY5MjY2KnUrMS44NzYwMTA4KnIrLjA0MTU1NippKSxsdCguMDU1NjQzNCp1LS4yMDQwMjU5KnIrMS4wNTcyMjUyKmkpKX1mdW5jdGlvbiBhdChuLHQsZSl7cmV0dXJuIG4+MD90dChNYXRoLmF0YW4yKGUsdCkqTGEsTWF0aC5zcXJ0KHQqdCtlKmUpLG4pOnR0KDAvMCwwLzAsbil9ZnVuY3Rpb24gY3Qobil7cmV0dXJuIG4+LjIwNjg5MzAzND9uKm4qbjoobi00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiBzdChuKXtyZXR1cm4gbj4uMDA4ODU2P01hdGgucG93KG4sMS8zKTo3Ljc4NzAzNypuKzQvMjl9ZnVuY3Rpb24gbHQobil7cmV0dXJuIE1hdGgucm91bmQoMjU1KiguMDAzMDQ+PW4/MTIuOTIqbjoxLjA1NSpNYXRoLnBvdyhuLDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gZnQobil7cmV0dXJuIGd0KG4+PjE2LDI1NSZuPj44LDI1NSZuKX1mdW5jdGlvbiBodChuKXtyZXR1cm4gZnQobikrIiJ9ZnVuY3Rpb24gZ3Qobix0LGUpe3JldHVybiBuZXcgcHQobix0LGUpfWZ1bmN0aW9uIHB0KG4sdCxlKXt0aGlzLnI9bix0aGlzLmc9dCx0aGlzLmI9ZX1mdW5jdGlvbiB2dChuKXtyZXR1cm4gMTY+bj8iMCIrTWF0aC5tYXgoMCxuKS50b1N0cmluZygxNik6TWF0aC5taW4oMjU1LG4pLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBkdChuLHQsZSl7dmFyIHIsdSxpLG8sYT0wLGM9MCxzPTA7aWYodT0vKFthLXpdKylcKCguKilcKS9pLmV4ZWMobikpc3dpdGNoKGk9dVsyXS5zcGxpdCgiLCIpLHVbMV0pe2Nhc2UiaHNsIjpyZXR1cm4gZShwYXJzZUZsb2F0KGlbMF0pLHBhcnNlRmxvYXQoaVsxXSkvMTAwLHBhcnNlRmxvYXQoaVsyXSkvMTAwKTtjYXNlInJnYiI6cmV0dXJuIHQoTXQoaVswXSksTXQoaVsxXSksTXQoaVsyXSkpfXJldHVybihvPVZhLmdldChuKSk/dChvLnIsby5nLG8uYik6KG51bGwhPW4mJiIjIj09PW4uY2hhckF0KDApJiYocj1wYXJzZUludChuLnN1YnN0cmluZygxKSwxNiksaXNOYU4ocil8fCg0PT09bi5sZW5ndGg/KGE9KDM4NDAmcik+PjQsYT1hPj40fGEsYz0yNDAmcixjPWM+PjR8YyxzPTE1JnIscz1zPDw0fHMpOjc9PT1uLmxlbmd0aCYmKGE9KDE2NzExNjgwJnIpPj4xNixjPSg2NTI4MCZyKT4+OCxzPTI1NSZyKSkpLHQoYSxjLHMpKX1mdW5jdGlvbiBtdChuLHQsZSl7dmFyIHIsdSxpPU1hdGgubWluKG4vPTI1NSx0Lz0yNTUsZS89MjU1KSxvPU1hdGgubWF4KG4sdCxlKSxhPW8taSxjPShvK2kpLzI7cmV0dXJuIGE/KHU9LjU+Yz9hLyhvK2kpOmEvKDItby1pKSxyPW49PW8/KHQtZSkvYSsoZT50PzY6MCk6dD09bz8oZS1uKS9hKzI6KG4tdCkvYSs0LHIqPTYwKToocj0wLzAsdT1jPjAmJjE+Yz8wOnIpLEsocix1LGMpfWZ1bmN0aW9uIHl0KG4sdCxlKXtuPXh0KG4pLHQ9eHQodCksZT14dChlKTt2YXIgcj1zdCgoLjQxMjQ1NjQqbisuMzU3NTc2MSp0Ky4xODA0Mzc1KmUpL0ZhKSx1PXN0KCguMjEyNjcyOSpuKy43MTUxNTIyKnQrLjA3MjE3NSplKS9PYSksaT1zdCgoLjAxOTMzMzkqbisuMTE5MTkyKnQrLjk1MDMwNDEqZSkvWWEpO3JldHVybiB1dCgxMTYqdS0xNiw1MDAqKHItdSksMjAwKih1LWkpKX1mdW5jdGlvbiB4dChuKXtyZXR1cm4obi89MjU1KTw9LjA0MDQ1P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBNdChuKXt2YXIgdD1wYXJzZUZsb2F0KG4pO3JldHVybiIlIj09PW4uY2hhckF0KG4ubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSp0KTp0fWZ1bmN0aW9uIF90KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gYnQobil7cmV0dXJuIG59ZnVuY3Rpb24gd3Qobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksU3QodCxlLG4scil9fWZ1bmN0aW9uIFN0KG4sdCxlLHIpe2Z1bmN0aW9uIHUoKXt2YXIgbix0PWMuc3RhdHVzO2lmKCF0JiZjLnJlc3BvbnNlVGV4dHx8dD49MjAwJiYzMDA+dHx8MzA0PT09dCl7dHJ5e249ZS5jYWxsKGksYyl9Y2F0Y2gocil7cmV0dXJuIG8uZXJyb3IuY2FsbChpLHIpLHZvaWQgMH1vLmxvYWQuY2FsbChpLG4pfWVsc2Ugby5lcnJvci5jYWxsKGksYyl9dmFyIGk9e30sbz1Yby5kaXNwYXRjaCgiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIsImVycm9yIiksYT17fSxjPW5ldyBYTUxIdHRwUmVxdWVzdCxzPW51bGw7cmV0dXJuIUdvLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3Qobil8fChjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj11OmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJnUoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKG4pe3ZhciB0PVhvLmV2ZW50O1hvLmV2ZW50PW47dHJ5e28ucHJvZ3Jlc3MuY2FsbChpLGMpfWZpbmFsbHl7WG8uZXZlbnQ9dH19LGkuaGVhZGVyPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49KG4rIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2Fbbl06KG51bGw9PXQ/ZGVsZXRlIGFbbl06YVtuXT10KyIiLGkpfSxpLm1pbWVUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PW4/bnVsbDpuKyIiLGkpOnR9LGkucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW4saSk6c30saS5yZXNwb25zZT1mdW5jdGlvbihuKXtyZXR1cm4gZT1uLGl9LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goZnVuY3Rpb24obil7aVtuXT1mdW5jdGlvbigpe3JldHVybiBpLnNlbmQuYXBwbHkoaSxbbl0uY29uY2F0KEJvKGFyZ3VtZW50cykpKX19KSxpLnNlbmQ9ZnVuY3Rpb24oZSxyLHUpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKHU9cixyPW51bGwpLGMub3BlbihlLG4sITApLG51bGw9PXR8fCJhY2NlcHQiaW4gYXx8KGEuYWNjZXB0PXQrIiwqLyoiKSxjLnNldFJlcXVlc3RIZWFkZXIpZm9yKHZhciBsIGluIGEpYy5zZXRSZXF1ZXN0SGVhZGVyKGwsYVtsXSk7cmV0dXJuIG51bGwhPXQmJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVycmlkZU1pbWVUeXBlKHQpLG51bGwhPXMmJihjLnJlc3BvbnNlVHlwZT1zKSxudWxsIT11JiZpLm9uKCJlcnJvciIsdSkub24oImxvYWQiLGZ1bmN0aW9uKG4pe3UobnVsbCxuKX0pLG8uYmVmb3Jlc2VuZC5jYWxsKGksYyksYy5zZW5kKG51bGw9PXI/bnVsbDpyKSxpfSxpLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGMuYWJvcnQoKSxpfSxYby5yZWJpbmQoaSxvLCJvbiIpLG51bGw9PXI/aTppLmdldChrdChyKSl9ZnVuY3Rpb24ga3Qobil7cmV0dXJuIDE9PT1uLmxlbmd0aD9mdW5jdGlvbih0LGUpe24obnVsbD09dD9lOm51bGwpfTpufWZ1bmN0aW9uIEV0KCl7dmFyIG49QXQoKSx0PUN0KCktbjt0PjI0Pyhpc0Zpbml0ZSh0KSYmKGNsZWFyVGltZW91dChXYSksV2E9c2V0VGltZW91dChFdCx0KSksQmE9MCk6KEJhPTEsR2EoRXQpKX1mdW5jdGlvbiBBdCgpe3ZhciBuPURhdGUubm93KCk7Zm9yKEphPVhhO0phOyluPj1KYS50JiYoSmEuZj1KYS5jKG4tSmEudCkpLEphPUphLm47cmV0dXJuIG59ZnVuY3Rpb24gQ3QoKXtmb3IodmFyIG4sdD1YYSxlPTEvMDt0Oyl0LmY/dD1uP24ubj10Lm46WGE9dC5uOih0LnQ8ZSYmKGU9dC50KSx0PShuPXQpLm4pO3JldHVybiAkYT1uLGV9ZnVuY3Rpb24gTnQobix0KXtyZXR1cm4gdC0obj9NYXRoLmNlaWwoTWF0aC5sb2cobikvTWF0aC5MTjEwKToxKX1mdW5jdGlvbiBMdChuLHQpe3ZhciBlPU1hdGgucG93KDEwLDMqb2EoOC10KSk7cmV0dXJue3NjYWxlOnQ+OD9mdW5jdGlvbihuKXtyZXR1cm4gbi9lfTpmdW5jdGlvbihuKXtyZXR1cm4gbiplfSxzeW1ib2w6bn19ZnVuY3Rpb24gVHQobil7dmFyIHQ9bi5kZWNpbWFsLGU9bi50aG91c2FuZHMscj1uLmdyb3VwaW5nLHU9bi5jdXJyZW5jeSxpPXI/ZnVuY3Rpb24obil7Zm9yKHZhciB0PW4ubGVuZ3RoLHU9W10saT0wLG89clswXTt0PjAmJm8+MDspdS5wdXNoKG4uc3Vic3RyaW5nKHQtPW8sdCtvKSksbz1yW2k9KGkrMSklci5sZW5ndGhdO3JldHVybiB1LnJldmVyc2UoKS5qb2luKGUpfTpidDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9UWEuZXhlYyhuKSxyPWVbMV18fCIgIixvPWVbMl18fCI+IixhPWVbM118fCIiLGM9ZVs0XXx8IiIscz1lWzVdLGw9K2VbNl0sZj1lWzddLGg9ZVs4XSxnPWVbOV0scD0xLHY9IiIsZD0iIixtPSExO3N3aXRjaChoJiYoaD0raC5zdWJzdHJpbmcoMSkpLChzfHwiMCI9PT1yJiYiPSI9PT1vKSYmKHM9cj0iMCIsbz0iPSIsZiYmKGwtPU1hdGguZmxvb3IoKGwtMSkvNCkpKSxnKXtjYXNlIm4iOmY9ITAsZz0iZyI7YnJlYWs7Y2FzZSIlIjpwPTEwMCxkPSIlIixnPSJmIjticmVhaztjYXNlInAiOnA9MTAwLGQ9IiUiLGc9InIiO2JyZWFrO2Nhc2UiYiI6Y2FzZSJvIjpjYXNlIngiOmNhc2UiWCI6IiMiPT09YyYmKHY9IjAiK2cudG9Mb3dlckNhc2UoKSk7Y2FzZSJjIjpjYXNlImQiOm09ITAsaD0wO2JyZWFrO2Nhc2UicyI6cD0tMSxnPSJyIn0iJCI9PT1jJiYodj11WzBdLGQ9dVsxXSksInIiIT1nfHxofHwoZz0iZyIpLG51bGwhPWgmJigiZyI9PWc/aD1NYXRoLm1heCgxLE1hdGgubWluKDIxLGgpKTooImUiPT1nfHwiZiI9PWcpJiYoaD1NYXRoLm1heCgwLE1hdGgubWluKDIwLGgpKSkpLGc9bmMuZ2V0KGcpfHxxdDt2YXIgeT1zJiZmO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1kO2lmKG0mJm4lMSlyZXR1cm4iIjt2YXIgdT0wPm58fDA9PT1uJiYwPjEvbj8obj0tbiwiLSIpOmE7aWYoMD5wKXt2YXIgYz1Yby5mb3JtYXRQcmVmaXgobixoKTtuPWMuc2NhbGUobiksZT1jLnN5bWJvbCtkfWVsc2Ugbio9cDtuPWcobixoKTt2YXIgeD1uLmxhc3RJbmRleE9mKCIuIiksTT0wPng/bjpuLnN1YnN0cmluZygwLHgpLF89MD54PyIiOnQrbi5zdWJzdHJpbmcoeCsxKTshcyYmZiYmKE09aShNKSk7dmFyIGI9di5sZW5ndGgrTS5sZW5ndGgrXy5sZW5ndGgrKHk/MDp1Lmxlbmd0aCksdz1sPmI/bmV3IEFycmF5KGI9bC1iKzEpLmpvaW4ocik6IiI7cmV0dXJuIHkmJihNPWkodytNKSksdSs9dixuPU0rXywoIjwiPT09bz91K24rdzoiPiI9PT1vP3crdStuOiJeIj09PW8/dy5zdWJzdHJpbmcoMCxiPj49MSkrdStuK3cuc3Vic3RyaW5nKGIpOnUrKHk/bjp3K24pKStlfX19ZnVuY3Rpb24gcXQobil7cmV0dXJuIG4rIiJ9ZnVuY3Rpb24genQoKXt0aGlzLl89bmV3IERhdGUoYXJndW1lbnRzLmxlbmd0aD4xP0RhdGUuVVRDLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphcmd1bWVudHNbMF0pfWZ1bmN0aW9uIFJ0KG4sdCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPW4odCkscj1pKGUsMSk7cmV0dXJuIHItdD50LWU/ZTpyfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHQoZT1uKG5ldyBlYyhlLTEpKSwxKSxlfWZ1bmN0aW9uIGkobixlKXtyZXR1cm4gdChuPW5ldyBlYygrbiksZSksbn1mdW5jdGlvbiBvKG4scixpKXt2YXIgbz11KG4pLGE9W107aWYoaT4xKWZvcig7cj5vOyllKG8pJWl8fGEucHVzaChuZXcgRGF0ZSgrbykpLHQobywxKTtlbHNlIGZvcig7cj5vOylhLnB1c2gobmV3IERhdGUoK28pKSx0KG8sMSk7cmV0dXJuIGF9ZnVuY3Rpb24gYShuLHQsZSl7dHJ5e2VjPXp0O3ZhciByPW5ldyB6dDtyZXR1cm4gci5fPW4sbyhyLHQsZSl9ZmluYWxseXtlYz1EYXRlfX1uLmZsb29yPW4sbi5yb3VuZD1yLG4uY2VpbD11LG4ub2Zmc2V0PWksbi5yYW5nZT1vO3ZhciBjPW4udXRjPUR0KG4pO3JldHVybiBjLmZsb29yPWMsYy5yb3VuZD1EdChyKSxjLmNlaWw9RHQodSksYy5vZmZzZXQ9RHQoaSksYy5yYW5nZT1hLG59ZnVuY3Rpb24gRHQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dHJ5e2VjPXp0O3ZhciByPW5ldyB6dDtyZXR1cm4gci5fPXQsbihyLGUpLl99ZmluYWxseXtlYz1EYXRlfX19ZnVuY3Rpb24gUHQobil7ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiB0KHQpe2Zvcih2YXIgZSx1LGksbz1bXSxhPS0xLGM9MDsrK2E8cjspMzc9PT1uLmNoYXJDb2RlQXQoYSkmJihvLnB1c2gobi5zdWJzdHJpbmcoYyxhKSksbnVsbCE9KHU9dWNbZT1uLmNoYXJBdCgrK2EpXSkmJihlPW4uY2hhckF0KCsrYSkpLChpPUNbZV0pJiYoZT1pKHQsbnVsbD09dT8iZSI9PT1lPyIgIjoiMCI6dSkpLG8ucHVzaChlKSxjPWErMSk7cmV0dXJuIG8ucHVzaChuLnN1YnN0cmluZyhjLGEpKSxvLmpvaW4oIiIpfXZhciByPW4ubGVuZ3RoO3JldHVybiB0LnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciByPXt5OjE5MDAsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjAsWjpudWxsfSx1PWUocixuLHQsMCk7aWYodSE9dC5sZW5ndGgpcmV0dXJuIG51bGw7InAiaW4gciYmKHIuSD1yLkglMTIrMTIqci5wKTt2YXIgaT1udWxsIT1yLlomJmVjIT09enQsbz1uZXcoaT96dDplYyk7cmV0dXJuImoiaW4gcj9vLnNldEZ1bGxZZWFyKHIueSwwLHIuaik6InciaW4gciYmKCJXImluIHJ8fCJVImluIHIpPyhvLnNldEZ1bGxZZWFyKHIueSwwLDEpLG8uc2V0RnVsbFllYXIoci55LDAsIlciaW4gcj8oci53KzYpJTcrNypyLlctKG8uZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKG8uZ2V0RGF5KCkrNiklNykpOm8uc2V0RnVsbFllYXIoci55LHIubSxyLmQpLG8uc2V0SG91cnMoci5IK01hdGguZmxvb3Ioci5aLzEwMCksci5NK3IuWiUxMDAsci5TLHIuTCksaT9vLl86b30sdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBufSx0fWZ1bmN0aW9uIGUobix0LGUscil7Zm9yKHZhciB1LGksbyxhPTAsYz10Lmxlbmd0aCxzPWUubGVuZ3RoO2M+YTspe2lmKHI+PXMpcmV0dXJuLTE7aWYodT10LmNoYXJDb2RlQXQoYSsrKSwzNz09PXUpe2lmKG89dC5jaGFyQXQoYSsrKSxpPU5bbyBpbiB1Yz90LmNoYXJBdChhKyspOm9dLCFpfHwocj1pKG4sZSxyKSk8MClyZXR1cm4tMX1lbHNlIGlmKHUhPWUuY2hhckNvZGVBdChyKyspKXJldHVybi0xfXJldHVybiByfWZ1bmN0aW9uIHIobix0LGUpe2IubGFzdEluZGV4PTA7dmFyIHI9Yi5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi53PXcuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdShuLHQsZSl7TS5sYXN0SW5kZXg9MDt2YXIgcj1NLmV4ZWModC5zdWJzdHJpbmcoZSkpO3JldHVybiByPyhuLnc9Xy5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpKG4sdCxlKXtFLmxhc3RJbmRleD0wO3ZhciByPUUuZXhlYyh0LnN1YnN0cmluZyhlKSk7cmV0dXJuIHI/KG4ubT1BLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG8obix0LGUpe1MubGFzdEluZGV4PTA7dmFyIHI9Uy5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi5tPWsuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYShuLHQscil7cmV0dXJuIGUobixDLmMudG9TdHJpbmcoKSx0LHIpfWZ1bmN0aW9uIGMobix0LHIpe3JldHVybiBlKG4sQy54LnRvU3RyaW5nKCksdCxyKX1mdW5jdGlvbiBzKG4sdCxyKXtyZXR1cm4gZShuLEMuWC50b1N0cmluZygpLHQscil9ZnVuY3Rpb24gbChuLHQsZSl7dmFyIHI9eC5nZXQodC5zdWJzdHJpbmcoZSxlKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09cj8tMToobi5wPXIsZSl9dmFyIGY9bi5kYXRlVGltZSxoPW4uZGF0ZSxnPW4udGltZSxwPW4ucGVyaW9kcyx2PW4uZGF5cyxkPW4uc2hvcnREYXlzLG09bi5tb250aHMseT1uLnNob3J0TW9udGhzO3QudXRjPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGUobil7dHJ5e2VjPXp0O3ZhciB0PW5ldyBlYztyZXR1cm4gdC5fPW4scih0KX1maW5hbGx5e2VjPURhdGV9fXZhciByPXQobik7cmV0dXJuIGUucGFyc2U9ZnVuY3Rpb24obil7dHJ5e2VjPXp0O3ZhciB0PXIucGFyc2Uobik7cmV0dXJuIHQmJnQuX31maW5hbGx5e2VjPURhdGV9fSxlLnRvU3RyaW5nPXIudG9TdHJpbmcsZX0sdC5tdWx0aT10LnV0Yy5tdWx0aT1lZTt2YXIgeD1Yby5tYXAoKSxNPWp0KHYpLF89SHQodiksYj1qdChkKSx3PUh0KGQpLFM9anQobSksaz1IdChtKSxFPWp0KHkpLEE9SHQoeSk7cC5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7eC5zZXQobi50b0xvd2VyQ2FzZSgpLHQpfSk7dmFyIEM9e2E6ZnVuY3Rpb24obil7cmV0dXJuIGRbbi5nZXREYXkoKV19LEE6ZnVuY3Rpb24obil7cmV0dXJuIHZbbi5nZXREYXkoKV19LGI6ZnVuY3Rpb24obil7cmV0dXJuIHlbbi5nZXRNb250aCgpXX0sQjpmdW5jdGlvbihuKXtyZXR1cm4gbVtuLmdldE1vbnRoKCldfSxjOnQoZiksZDpmdW5jdGlvbihuLHQpe3JldHVybiBVdChuLmdldERhdGUoKSx0LDIpfSxlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFV0KG4uZ2V0RGF0ZSgpLHQsMil9LEg6ZnVuY3Rpb24obix0KXtyZXR1cm4gVXQobi5nZXRIb3VycygpLHQsMil9LEk6ZnVuY3Rpb24obix0KXtyZXR1cm4gVXQobi5nZXRIb3VycygpJTEyfHwxMix0LDIpfSxqOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFV0KDErdGMuZGF5T2ZZZWFyKG4pLHQsMyl9LEw6ZnVuY3Rpb24obix0KXtyZXR1cm4gVXQobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfSxtOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFV0KG4uZ2V0TW9udGgoKSsxLHQsMil9LE06ZnVuY3Rpb24obix0KXtyZXR1cm4gVXQobi5nZXRNaW51dGVzKCksdCwyKX0scDpmdW5jdGlvbihuKXtyZXR1cm4gcFsrKG4uZ2V0SG91cnMoKT49MTIpXX0sUzpmdW5jdGlvbihuLHQpe3JldHVybiBVdChuLmdldFNlY29uZHMoKSx0LDIpfSxVOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFV0KHRjLnN1bmRheU9mWWVhcihuKSx0LDIpfSx3OmZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgpfSxXOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFV0KHRjLm1vbmRheU9mWWVhcihuKSx0LDIpfSx4OnQoaCksWDp0KGcpLHk6ZnVuY3Rpb24obix0KXtyZXR1cm4gVXQobi5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfSxZOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFV0KG4uZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX0sWjpuZSwiJSI6ZnVuY3Rpb24oKXtyZXR1cm4iJSJ9fSxOPXthOnIsQTp1LGI6aSxCOm8sYzphLGQ6QnQsZTpCdCxIOkp0LEk6SnQsajpXdCxMOlF0LG06JHQsTTpHdCxwOmwsUzpLdCxVOk90LHc6RnQsVzpZdCx4OmMsWDpzLHk6WnQsWTpJdCxaOlZ0LCIlIjp0ZX07cmV0dXJuIHR9ZnVuY3Rpb24gVXQobix0LGUpe3ZhciByPTA+bj8iLSI6IiIsdT0ocj8tbjpuKSsiIixpPXUubGVuZ3RoO3JldHVybiByKyhlPmk/bmV3IEFycmF5KGUtaSsxKS5qb2luKHQpK3U6dSl9ZnVuY3Rpb24ganQobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKFhvLnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBIdChuKXtmb3IodmFyIHQ9bmV3IHUsZT0tMSxyPW4ubGVuZ3RoOysrZTxyOyl0LnNldChuW2VdLnRvTG93ZXJDYXNlKCksZSk7cmV0dXJuIHR9ZnVuY3Rpb24gRnQobix0LGUpe2ljLmxhc3RJbmRleD0wO3ZhciByPWljLmV4ZWModC5zdWJzdHJpbmcoZSxlKzEpKTtyZXR1cm4gcj8obi53PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE90KG4sdCxlKXtpYy5sYXN0SW5kZXg9MDt2YXIgcj1pYy5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi5VPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFl0KG4sdCxlKXtpYy5sYXN0SW5kZXg9MDt2YXIgcj1pYy5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi5XPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEl0KG4sdCxlKXtpYy5sYXN0SW5kZXg9MDt2YXIgcj1pYy5leGVjKHQuc3Vic3RyaW5nKGUsZSs0KSk7cmV0dXJuIHI/KG4ueT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBadChuLHQsZSl7aWMubGFzdEluZGV4PTA7dmFyIHI9aWMuZXhlYyh0LnN1YnN0cmluZyhlLGUrMikpO3JldHVybiByPyhuLnk9WHQoK3JbMF0pLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZ0KG4sdCxlKXtyZXR1cm4vXlsrLV1cZHs0fSQvLnRlc3QodD10LnN1YnN0cmluZyhlLGUrNSkpPyhuLlo9K3QsZSs1KTotMX1mdW5jdGlvbiBYdChuKXtyZXR1cm4gbisobj42OD8xOTAwOjJlMyl9ZnVuY3Rpb24gJHQobix0LGUpe2ljLmxhc3RJbmRleD0wO3ZhciByPWljLmV4ZWModC5zdWJzdHJpbmcoZSxlKzIpKTtyZXR1cm4gcj8obi5tPXJbMF0tMSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCdChuLHQsZSl7aWMubGFzdEluZGV4PTA7dmFyIHI9aWMuZXhlYyh0LnN1YnN0cmluZyhlLGUrMikpO3JldHVybiByPyhuLmQ9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gV3Qobix0LGUpe2ljLmxhc3RJbmRleD0wO3ZhciByPWljLmV4ZWModC5zdWJzdHJpbmcoZSxlKzMpKTtyZXR1cm4gcj8obi5qPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEp0KG4sdCxlKXtpYy5sYXN0SW5kZXg9MDt2YXIgcj1pYy5leGVjKHQuc3Vic3RyaW5nKGUsZSsyKSk7cmV0dXJuIHI/KG4uSD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHdChuLHQsZSl7aWMubGFzdEluZGV4PTA7dmFyIHI9aWMuZXhlYyh0LnN1YnN0cmluZyhlLGUrMikpO3JldHVybiByPyhuLk09K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS3Qobix0LGUpe2ljLmxhc3RJbmRleD0wO3ZhciByPWljLmV4ZWModC5zdWJzdHJpbmcoZSxlKzIpKTtyZXR1cm4gcj8obi5TPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFF0KG4sdCxlKXtpYy5sYXN0SW5kZXg9MDt2YXIgcj1pYy5leGVjKHQuc3Vic3RyaW5nKGUsZSszKSk7cmV0dXJuIHI/KG4uTD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuZShuKXt2YXIgdD1uLmdldFRpbWV6b25lT2Zmc2V0KCksZT10PjA/Ii0iOiIrIixyPX5+KG9hKHQpLzYwKSx1PW9hKHQpJTYwO3JldHVybiBlK1V0KHIsIjAiLDIpK1V0KHUsIjAiLDIpfWZ1bmN0aW9uIHRlKG4sdCxlKXtvYy5sYXN0SW5kZXg9MDt2YXIgcj1vYy5leGVjKHQuc3Vic3RyaW5nKGUsZSsxKSk7cmV0dXJuIHI/ZStyWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBlZShuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT0tMTsrK2U8dDspbltlXVswXT10aGlzKG5bZV1bMF0pO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPW5bZV07IXJbMV0odCk7KXI9blsrK2VdO3JldHVybiByWzBdKHQpfX1mdW5jdGlvbiByZSgpe31mdW5jdGlvbiB1ZShuLHQsZSl7dmFyIHI9ZS5zPW4rdCx1PXItbixpPXItdTtlLnQ9bi1pKyh0LXUpfWZ1bmN0aW9uIGllKG4sdCl7biYmbGMuaGFzT3duUHJvcGVydHkobi50eXBlKSYmbGNbbi50eXBlXShuLHQpfWZ1bmN0aW9uIG9lKG4sdCxlKXt2YXIgcix1PS0xLGk9bi5sZW5ndGgtZTtmb3IodC5saW5lU3RhcnQoKTsrK3U8aTspcj1uW3VdLHQucG9pbnQoclswXSxyWzFdLHJbMl0pO3QubGluZUVuZCgpfWZ1bmN0aW9uIGFlKG4sdCl7dmFyIGU9LTEscj1uLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK2U8cjspb2UobltlXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIGNlKCl7ZnVuY3Rpb24gbihuLHQpe24qPU5hLHQ9dCpOYS8yK1NhLzQ7dmFyIGU9bi1yLG89ZT49MD8xOi0xLGE9byplLGM9TWF0aC5jb3ModCkscz1NYXRoLnNpbih0KSxsPWkqcyxmPXUqYytsKk1hdGguY29zKGEpLGg9bCpvKk1hdGguc2luKGEpO2hjLmFkZChNYXRoLmF0YW4yKGgsZikpLHI9bix1PWMsaT1zfXZhciB0LGUscix1LGk7Z2MucG9pbnQ9ZnVuY3Rpb24obyxhKXtnYy5wb2ludD1uLHI9KHQ9bykqTmEsdT1NYXRoLmNvcyhhPShlPWEpKk5hLzIrU2EvNCksaT1NYXRoLnNpbihhKX0sZ2MubGluZUVuZD1mdW5jdGlvbigpe24odCxlKX19ZnVuY3Rpb24gc2Uobil7dmFyIHQ9blswXSxlPW5bMV0scj1NYXRoLmNvcyhlKTtyZXR1cm5bcipNYXRoLmNvcyh0KSxyKk1hdGguc2luKHQpLE1hdGguc2luKGUpXX1mdW5jdGlvbiBsZShuLHQpe3JldHVybiBuWzBdKnRbMF0rblsxXSp0WzFdK25bMl0qdFsyXX1mdW5jdGlvbiBmZShuLHQpe3JldHVybltuWzFdKnRbMl0tblsyXSp0WzFdLG5bMl0qdFswXS1uWzBdKnRbMl0sblswXSp0WzFdLW5bMV0qdFswXV19ZnVuY3Rpb24gaGUobix0KXtuWzBdKz10WzBdLG5bMV0rPXRbMV0sblsyXSs9dFsyXX1mdW5jdGlvbiBnZShuLHQpe3JldHVybltuWzBdKnQsblsxXSp0LG5bMl0qdF19ZnVuY3Rpb24gcGUobil7dmFyIHQ9TWF0aC5zcXJ0KG5bMF0qblswXStuWzFdKm5bMV0rblsyXSpuWzJdKTtuWzBdLz10LG5bMV0vPXQsblsyXS89dH1mdW5jdGlvbiB2ZShuKXtyZXR1cm5bTWF0aC5hdGFuMihuWzFdLG5bMF0pLFgoblsyXSldfWZ1bmN0aW9uIGRlKG4sdCl7cmV0dXJuIG9hKG5bMF0tdFswXSk8QWEmJm9hKG5bMV0tdFsxXSk8QWF9ZnVuY3Rpb24gbWUobix0KXtuKj1OYTt2YXIgZT1NYXRoLmNvcyh0Kj1OYSk7eWUoZSpNYXRoLmNvcyhuKSxlKk1hdGguc2luKG4pLE1hdGguc2luKHQpKX1mdW5jdGlvbiB5ZShuLHQsZSl7KytwYyxkYys9KG4tZGMpL3BjLG1jKz0odC1tYykvcGMseWMrPShlLXljKS9wY31mdW5jdGlvbiB4ZSgpe2Z1bmN0aW9uIG4obix1KXtuKj1OYTt2YXIgaT1NYXRoLmNvcyh1Kj1OYSksbz1pKk1hdGguY29zKG4pLGE9aSpNYXRoLnNpbihuKSxjPU1hdGguc2luKHUpLHM9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHM9ZSpjLXIqYSkqcysocz1yKm8tdCpjKSpzKyhzPXQqYS1lKm8pKnMpLHQqbytlKmErcipjKTt2Yys9cyx4Yys9cyoodCsodD1vKSksTWMrPXMqKGUrKGU9YSkpLF9jKz1zKihyKyhyPWMpKSx5ZSh0LGUscil9dmFyIHQsZSxyO2tjLnBvaW50PWZ1bmN0aW9uKHUsaSl7dSo9TmE7dmFyIG89TWF0aC5jb3MoaSo9TmEpO3Q9bypNYXRoLmNvcyh1KSxlPW8qTWF0aC5zaW4odSkscj1NYXRoLnNpbihpKSxrYy5wb2ludD1uLHllKHQsZSxyKX19ZnVuY3Rpb24gTWUoKXtrYy5wb2ludD1tZX1mdW5jdGlvbiBfZSgpe2Z1bmN0aW9uIG4obix0KXtuKj1OYTt2YXIgZT1NYXRoLmNvcyh0Kj1OYSksbz1lKk1hdGguY29zKG4pLGE9ZSpNYXRoLnNpbihuKSxjPU1hdGguc2luKHQpLHM9dSpjLWkqYSxsPWkqby1yKmMsZj1yKmEtdSpvLGg9TWF0aC5zcXJ0KHMqcytsKmwrZipmKSxnPXIqbyt1KmEraSpjLHA9aCYmLVYoZykvaCx2PU1hdGguYXRhbjIoaCxnKTtiYys9cCpzLHdjKz1wKmwsU2MrPXAqZix2Yys9dix4Yys9dioocisocj1vKSksTWMrPXYqKHUrKHU9YSkpLF9jKz12KihpKyhpPWMpKSx5ZShyLHUsaSl9dmFyIHQsZSxyLHUsaTtrYy5wb2ludD1mdW5jdGlvbihvLGEpe3Q9byxlPWEsa2MucG9pbnQ9bixvKj1OYTt2YXIgYz1NYXRoLmNvcyhhKj1OYSk7cj1jKk1hdGguY29zKG8pLHU9YypNYXRoLnNpbihvKSxpPU1hdGguc2luKGEpLHllKHIsdSxpKX0sa2MubGluZUVuZD1mdW5jdGlvbigpe24odCxlKSxrYy5saW5lRW5kPU1lLGtjLnBvaW50PW1lfX1mdW5jdGlvbiBiZSgpe3JldHVybiEwfWZ1bmN0aW9uIHdlKG4sdCxlLHIsdSl7dmFyIGk9W10sbz1bXTtpZihuLmZvckVhY2goZnVuY3Rpb24obil7aWYoISgodD1uLmxlbmd0aC0xKTw9MCkpe3ZhciB0LGU9blswXSxyPW5bdF07aWYoZGUoZSxyKSl7dS5saW5lU3RhcnQoKTtmb3IodmFyIGE9MDt0PmE7KythKXUucG9pbnQoKGU9blthXSlbMF0sZVsxXSk7cmV0dXJuIHUubGluZUVuZCgpLHZvaWQgMH12YXIgYz1uZXcga2UoZSxuLG51bGwsITApLHM9bmV3IGtlKGUsbnVsbCxjLCExKTtjLm89cyxpLnB1c2goYyksby5wdXNoKHMpLGM9bmV3IGtlKHIsbixudWxsLCExKSxzPW5ldyBrZShyLG51bGwsYywhMCksYy5vPXMsaS5wdXNoKGMpLG8ucHVzaChzKX19KSxvLnNvcnQodCksU2UoaSksU2UobyksaS5sZW5ndGgpe2Zvcih2YXIgYT0wLGM9ZSxzPW8ubGVuZ3RoO3M+YTsrK2Epb1thXS5lPWM9IWM7Zm9yKHZhciBsLGYsaD1pWzBdOzspe2Zvcih2YXIgZz1oLHA9ITA7Zy52OylpZigoZz1nLm4pPT09aClyZXR1cm47bD1nLnosdS5saW5lU3RhcnQoKTtkb3tpZihnLnY9Zy5vLnY9ITAsZy5lKXtpZihwKWZvcih2YXIgYT0wLHM9bC5sZW5ndGg7cz5hOysrYSl1LnBvaW50KChmPWxbYV0pWzBdLGZbMV0pO2Vsc2UgcihnLngsZy5uLngsMSx1KTtnPWcubn1lbHNle2lmKHApe2w9Zy5wLno7Zm9yKHZhciBhPWwubGVuZ3RoLTE7YT49MDstLWEpdS5wb2ludCgoZj1sW2FdKVswXSxmWzFdKX1lbHNlIHIoZy54LGcucC54LC0xLHUpO2c9Zy5wfWc9Zy5vLGw9Zy56LHA9IXB9d2hpbGUoIWcudik7dS5saW5lRW5kKCl9fX1mdW5jdGlvbiBTZShuKXtpZih0PW4ubGVuZ3RoKXtmb3IodmFyIHQsZSxyPTAsdT1uWzBdOysrcjx0Oyl1Lm49ZT1uW3JdLGUucD11LHU9ZTt1Lm49ZT1uWzBdLGUucD11fX1mdW5jdGlvbiBrZShuLHQsZSxyKXt0aGlzLng9bix0aGlzLno9dCx0aGlzLm89ZSx0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIEVlKG4sdCxlLHIpe3JldHVybiBmdW5jdGlvbih1LGkpe2Z1bmN0aW9uIG8odCxlKXt2YXIgcj11KHQsZSk7bih0PXJbMF0sZT1yWzFdKSYmaS5wb2ludCh0LGUpfWZ1bmN0aW9uIGEobix0KXt2YXIgZT11KG4sdCk7ZC5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIGMoKXt5LnBvaW50PWEsZC5saW5lU3RhcnQoKX1mdW5jdGlvbiBzKCl7eS5wb2ludD1vLGQubGluZUVuZCgpfWZ1bmN0aW9uIGwobix0KXt2LnB1c2goW24sdF0pO3ZhciBlPXUobix0KTtNLnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gZigpe00ubGluZVN0YXJ0KCksdj1bXX1mdW5jdGlvbiBoKCl7bCh2WzBdWzBdLHZbMF1bMV0pLE0ubGluZUVuZCgpO3ZhciBuLHQ9TS5jbGVhbigpLGU9eC5idWZmZXIoKSxyPWUubGVuZ3RoO2lmKHYucG9wKCkscC5wdXNoKHYpLHY9bnVsbCxyKXtpZigxJnQpe249ZVswXTt2YXIgdSxyPW4ubGVuZ3RoLTEsbz0tMTtmb3IoaS5saW5lU3RhcnQoKTsrK288cjspaS5wb2ludCgodT1uW29dKVswXSx1WzFdKTtyZXR1cm4gaS5saW5lRW5kKCksdm9pZCAwfXI+MSYmMiZ0JiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSksZy5wdXNoKGUuZmlsdGVyKEFlKSl9fXZhciBnLHAsdixkPXQoaSksbT11LmludmVydChyWzBdLHJbMV0pLHk9e3BvaW50Om8sbGluZVN0YXJ0OmMsbGluZUVuZDpzLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3kucG9pbnQ9bCx5LmxpbmVTdGFydD1mLHkubGluZUVuZD1oLGc9W10scD1bXSxpLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7eS5wb2ludD1vLHkubGluZVN0YXJ0PWMseS5saW5lRW5kPXMsZz1Yby5tZXJnZShnKTt2YXIgbj1MZShtLHApO2cubGVuZ3RoP3dlKGcsTmUsbixlLGkpOm4mJihpLmxpbmVTdGFydCgpLGUobnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGkucG9seWdvbkVuZCgpLGc9cD1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19LHg9Q2UoKSxNPXQoeCk7cmV0dXJuIHl9fWZ1bmN0aW9uIEFlKG4pe3JldHVybiBuLmxlbmd0aD4xfWZ1bmN0aW9uIENlKCl7dmFyIG4sdD1bXTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5wdXNoKG49W10pfSxwb2ludDpmdW5jdGlvbih0LGUpe24ucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZyxidWZmZXI6ZnVuY3Rpb24oKXt2YXIgZT10O3JldHVybiB0PVtdLG49bnVsbCxlfSxyZWpvaW46ZnVuY3Rpb24oKXt0Lmxlbmd0aD4xJiZ0LnB1c2godC5wb3AoKS5jb25jYXQodC5zaGlmdCgpKSl9fX1mdW5jdGlvbiBOZShuLHQpe3JldHVybigobj1uLngpWzBdPDA/blsxXS1FYS1BYTpFYS1uWzFdKS0oKHQ9dC54KVswXTwwP3RbMV0tRWEtQWE6RWEtdFsxXSl9ZnVuY3Rpb24gTGUobix0KXt2YXIgZT1uWzBdLHI9blsxXSx1PVtNYXRoLnNpbihlKSwtTWF0aC5jb3MoZSksMF0saT0wLG89MDtoYy5yZXNldCgpO2Zvcih2YXIgYT0wLGM9dC5sZW5ndGg7Yz5hOysrYSl7dmFyIHM9dFthXSxsPXMubGVuZ3RoO2lmKGwpZm9yKHZhciBmPXNbMF0saD1mWzBdLGc9ZlsxXS8yK1NhLzQscD1NYXRoLnNpbihnKSx2PU1hdGguY29zKGcpLGQ9MTs7KXtkPT09bCYmKGQ9MCksbj1zW2RdO3ZhciBtPW5bMF0seT1uWzFdLzIrU2EvNCx4PU1hdGguc2luKHkpLE09TWF0aC5jb3MoeSksXz1tLWgsYj1fPj0wPzE6LTEsdz1iKl8sUz13PlNhLGs9cCp4O2lmKGhjLmFkZChNYXRoLmF0YW4yKGsqYipNYXRoLnNpbih3KSx2Kk0raypNYXRoLmNvcyh3KSkpLGkrPVM/XytiKmthOl8sU15oPj1lXm0+PWUpe3ZhciBFPWZlKHNlKGYpLHNlKG4pKTtwZShFKTt2YXIgQT1mZSh1LEUpO3BlKEEpO3ZhciBDPShTXl8+PTA/LTE6MSkqWChBWzJdKTsocj5DfHxyPT09QyYmKEVbMF18fEVbMV0pKSYmKG8rPVNeXz49MD8xOi0xKX1pZighZCsrKWJyZWFrO2g9bSxwPXgsdj1NLGY9bn19cmV0dXJuKC1BYT5pfHxBYT5pJiYwPmhjKV4xJm99ZnVuY3Rpb24gVGUobil7dmFyIHQsZT0wLzAscj0wLzAsdT0wLzA7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe24ubGluZVN0YXJ0KCksdD0xfSxwb2ludDpmdW5jdGlvbihpLG8pe3ZhciBhPWk+MD9TYTotU2EsYz1vYShpLWUpO29hKGMtU2EpPEFhPyhuLnBvaW50KGUscj0ocitvKS8yPjA/RWE6LUVhKSxuLnBvaW50KHUsciksbi5saW5lRW5kKCksbi5saW5lU3RhcnQoKSxuLnBvaW50KGEsciksbi5wb2ludChpLHIpLHQ9MCk6dSE9PWEmJmM+PVNhJiYob2EoZS11KTxBYSYmKGUtPXUqQWEpLG9hKGktYSk8QWEmJihpLT1hKkFhKSxyPXFlKGUscixpLG8pLG4ucG9pbnQodSxyKSxuLmxpbmVFbmQoKSxuLmxpbmVTdGFydCgpLG4ucG9pbnQoYSxyKSx0PTApLG4ucG9pbnQoZT1pLHI9byksdT1hfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bi5saW5lRW5kKCksZT1yPTAvMH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi10fX19ZnVuY3Rpb24gcWUobix0LGUscil7dmFyIHUsaSxvPU1hdGguc2luKG4tZSk7cmV0dXJuIG9hKG8pPkFhP01hdGguYXRhbigoTWF0aC5zaW4odCkqKGk9TWF0aC5jb3MocikpKk1hdGguc2luKGUpLU1hdGguc2luKHIpKih1PU1hdGguY29zKHQpKSpNYXRoLnNpbihuKSkvKHUqaSpvKSk6KHQrcikvMn1mdW5jdGlvbiB6ZShuLHQsZSxyKXt2YXIgdTtpZihudWxsPT1uKXU9ZSpFYSxyLnBvaW50KC1TYSx1KSxyLnBvaW50KDAsdSksci5wb2ludChTYSx1KSxyLnBvaW50KFNhLDApLHIucG9pbnQoU2EsLXUpLHIucG9pbnQoMCwtdSksci5wb2ludCgtU2EsLXUpLHIucG9pbnQoLVNhLDApLHIucG9pbnQoLVNhLHUpO2Vsc2UgaWYob2EoblswXS10WzBdKT5BYSl7dmFyIGk9blswXTx0WzBdP1NhOi1TYTt1PWUqaS8yLHIucG9pbnQoLWksdSksci5wb2ludCgwLHUpLHIucG9pbnQoaSx1KX1lbHNlIHIucG9pbnQodFswXSx0WzFdKX1mdW5jdGlvbiBSZShuKXtmdW5jdGlvbiB0KG4sdCl7cmV0dXJuIE1hdGguY29zKG4pKk1hdGguY29zKHQpPml9ZnVuY3Rpb24gZShuKXt2YXIgZSxpLGMscyxsO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtzPWM9ITEsbD0xfSxwb2ludDpmdW5jdGlvbihmLGgpe3ZhciBnLHA9W2YsaF0sdj10KGYsaCksZD1vP3Y/MDp1KGYsaCk6dj91KGYrKDA+Zj9TYTotU2EpLGgpOjA7aWYoIWUmJihzPWM9dikmJm4ubGluZVN0YXJ0KCksdiE9PWMmJihnPXIoZSxwKSwoZGUoZSxnKXx8ZGUocCxnKSkmJihwWzBdKz1BYSxwWzFdKz1BYSx2PXQocFswXSxwWzFdKSkpLHYhPT1jKWw9MCx2PyhuLmxpbmVTdGFydCgpLGc9cihwLGUpLG4ucG9pbnQoZ1swXSxnWzFdKSk6KGc9cihlLHApLG4ucG9pbnQoZ1swXSxnWzFdKSxuLmxpbmVFbmQoKSksZT1nO2Vsc2UgaWYoYSYmZSYmb152KXt2YXIgbTtkJml8fCEobT1yKHAsZSwhMCkpfHwobD0wLG8/KG4ubGluZVN0YXJ0KCksbi5wb2ludChtWzBdWzBdLG1bMF1bMV0pLG4ucG9pbnQobVsxXVswXSxtWzFdWzFdKSxuLmxpbmVFbmQoKSk6KG4ucG9pbnQobVsxXVswXSxtWzFdWzFdKSxuLmxpbmVFbmQoKSxuLmxpbmVTdGFydCgpLG4ucG9pbnQobVswXVswXSxtWzBdWzFdKSkpfSF2fHxlJiZkZShlLHApfHxuLnBvaW50KHBbMF0scFsxXSksZT1wLGM9dixpPWR9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtjJiZuLmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIGx8KHMmJmMpPDwxfX19ZnVuY3Rpb24gcihuLHQsZSl7dmFyIHI9c2UobiksdT1zZSh0KSxvPVsxLDAsMF0sYT1mZShyLHUpLGM9bGUoYSxhKSxzPWFbMF0sbD1jLXMqcztpZighbClyZXR1cm4hZSYmbjt2YXIgZj1pKmMvbCxoPS1pKnMvbCxnPWZlKG8sYSkscD1nZShvLGYpLHY9Z2UoYSxoKTtoZShwLHYpO3ZhciBkPWcsbT1sZShwLGQpLHk9bGUoZCxkKSx4PW0qbS15KihsZShwLHApLTEpO2lmKCEoMD54KSl7dmFyIE09TWF0aC5zcXJ0KHgpLF89Z2UoZCwoLW0tTSkveSk7aWYoaGUoXyxwKSxfPXZlKF8pLCFlKXJldHVybiBfO3ZhciBiLHc9blswXSxTPXRbMF0saz1uWzFdLEU9dFsxXTt3PlMmJihiPXcsdz1TLFM9Yik7dmFyIEE9Uy13LEM9b2EoQS1TYSk8QWEsTj1DfHxBYT5BO2lmKCFDJiZrPkUmJihiPWssaz1FLEU9YiksTj9DP2srRT4wXl9bMV08KG9hKF9bMF0tdyk8QWE/azpFKTprPD1fWzFdJiZfWzFdPD1FOkE+U2FeKHc8PV9bMF0mJl9bMF08PVMpKXt2YXIgTD1nZShkLCgtbStNKS95KTtyZXR1cm4gaGUoTCxwKSxbXyx2ZShMKV19fX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9bz9uOlNhLW4sdT0wO3JldHVybi1yPnQ/dXw9MTp0PnImJih1fD0yKSwtcj5lP3V8PTQ6ZT5yJiYodXw9OCksdX12YXIgaT1NYXRoLmNvcyhuKSxvPWk+MCxhPW9hKGkpPkFhLGM9Y3Iobiw2Kk5hKTtyZXR1cm4gRWUodCxlLGMsbz9bMCwtbl06Wy1TYSxuLVNhXSl9ZnVuY3Rpb24gRGUobix0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBpLG89dS5hLGE9dS5iLGM9by54LHM9by55LGw9YS54LGY9YS55LGg9MCxnPTEscD1sLWMsdj1mLXM7aWYoaT1uLWMscHx8IShpPjApKXtpZihpLz1wLDA+cCl7aWYoaD5pKXJldHVybjtnPmkmJihnPWkpfWVsc2UgaWYocD4wKXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9aSl9aWYoaT1lLWMscHx8ISgwPmkpKXtpZihpLz1wLDA+cCl7aWYoaT5nKXJldHVybjtpPmgmJihoPWkpfWVsc2UgaWYocD4wKXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9aSl9aWYoaT10LXMsdnx8IShpPjApKXtpZihpLz12LDA+dil7aWYoaD5pKXJldHVybjtnPmkmJihnPWkpfWVsc2UgaWYodj4wKXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9aSl9aWYoaT1yLXMsdnx8ISgwPmkpKXtpZihpLz12LDA+dil7aWYoaT5nKXJldHVybjtpPmgmJihoPWkpfWVsc2UgaWYodj4wKXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9aSl9cmV0dXJuIGg+MCYmKHUuYT17eDpjK2gqcCx5OnMraCp2fSksMT5nJiYodS5iPXt4OmMrZypwLHk6cytnKnZ9KSx1fX19fX19ZnVuY3Rpb24gUGUobix0LGUscil7ZnVuY3Rpb24gdShyLHUpe3JldHVybiBvYShyWzBdLW4pPEFhP3U+MD8wOjM6b2EoclswXS1lKTxBYT91PjA/MjoxOm9hKHJbMV0tdCk8QWE/dT4wPzE6MDp1PjA/MzoyfWZ1bmN0aW9uIGkobix0KXtyZXR1cm4gbyhuLngsdC54KX1mdW5jdGlvbiBvKG4sdCl7dmFyIGU9dShuLDEpLHI9dSh0LDEpO3JldHVybiBlIT09cj9lLXI6MD09PWU/dFsxXS1uWzFdOjE9PT1lP25bMF0tdFswXToyPT09ZT9uWzFdLXRbMV06dFswXS1uWzBdfXJldHVybiBmdW5jdGlvbihhKXtmdW5jdGlvbiBjKG4pe2Zvcih2YXIgdD0wLGU9ZC5sZW5ndGgscj1uWzFdLHU9MDtlPnU7Kyt1KWZvcih2YXIgaSxvPTEsYT1kW3VdLGM9YS5sZW5ndGgscz1hWzBdO2M+bzsrK28paT1hW29dLHNbMV08PXI/aVsxXT5yJiZaKHMsaSxuKT4wJiYrK3Q6aVsxXTw9ciYmWihzLGksbik8MCYmLS10LHM9aTtyZXR1cm4gMCE9PXR9ZnVuY3Rpb24gcyhpLGEsYyxzKXt2YXIgbD0wLGY9MDtpZihudWxsPT1pfHwobD11KGksYykpIT09KGY9dShhLGMpKXx8byhpLGEpPDBeYz4wKXtkbyBzLnBvaW50KDA9PT1sfHwzPT09bD9uOmUsbD4xP3I6dCk7d2hpbGUoKGw9KGwrYys0KSU0KSE9PWYpfWVsc2Ugcy5wb2ludChhWzBdLGFbMV0pfWZ1bmN0aW9uIGwodSxpKXtyZXR1cm4gdT49biYmZT49dSYmaT49dCYmcj49aX1mdW5jdGlvbiBmKG4sdCl7bChuLHQpJiZhLnBvaW50KG4sdCl9ZnVuY3Rpb24gaCgpe04ucG9pbnQ9cCxkJiZkLnB1c2gobT1bXSksUz0hMCx3PSExLF89Yj0wLzB9ZnVuY3Rpb24gZygpe3YmJihwKHkseCksTSYmdyYmQS5yZWpvaW4oKSx2LnB1c2goQS5idWZmZXIoKSkpLE4ucG9pbnQ9Zix3JiZhLmxpbmVFbmQoKX1mdW5jdGlvbiBwKG4sdCl7bj1NYXRoLm1heCgtQWMsTWF0aC5taW4oQWMsbikpLHQ9TWF0aC5tYXgoLUFjLE1hdGgubWluKEFjLHQpKTt2YXIgZT1sKG4sdCk7aWYoZCYmbS5wdXNoKFtuLHRdKSxTKXk9bix4PXQsTT1lLFM9ITEsZSYmKGEubGluZVN0YXJ0KCksYS5wb2ludChuLHQpKTtlbHNlIGlmKGUmJncpYS5wb2ludChuLHQpO2Vsc2V7dmFyIHI9e2E6e3g6Xyx5OmJ9LGI6e3g6bix5OnR9fTtDKHIpPyh3fHwoYS5saW5lU3RhcnQoKSxhLnBvaW50KHIuYS54LHIuYS55KSksYS5wb2ludChyLmIueCxyLmIueSksZXx8YS5saW5lRW5kKCksaz0hMSk6ZSYmKGEubGluZVN0YXJ0KCksYS5wb2ludChuLHQpLGs9ITEpfV89bixiPXQsdz1lfXZhciB2LGQsbSx5LHgsTSxfLGIsdyxTLGssRT1hLEE9Q2UoKSxDPURlKG4sdCxlLHIpLE49e3BvaW50OmYsbGluZVN0YXJ0OmgsbGluZUVuZDpnLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2E9QSx2PVtdLGQ9W10saz0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe2E9RSx2PVhvLm1lcmdlKHYpO3ZhciB0PWMoW24scl0pLGU9ayYmdCx1PXYubGVuZ3RoOyhlfHx1KSYmKGEucG9seWdvblN0YXJ0KCksZSYmKGEubGluZVN0YXJ0KCkscyhudWxsLG51bGwsMSxhKSxhLmxpbmVFbmQoKSksdSYmd2UodixpLHQscyxhKSxhLnBvbHlnb25FbmQoKSksdj1kPW09bnVsbH19O3JldHVybiBOfX1mdW5jdGlvbiBVZShuLHQpe2Z1bmN0aW9uIGUoZSxyKXtyZXR1cm4gZT1uKGUsciksdChlWzBdLGVbMV0pfXJldHVybiBuLmludmVydCYmdC5pbnZlcnQmJihlLmludmVydD1mdW5jdGlvbihlLHIpe3JldHVybiBlPXQuaW52ZXJ0KGUsciksZSYmbi5pbnZlcnQoZVswXSxlWzFdKX0pLGV9ZnVuY3Rpb24gamUobil7dmFyIHQ9MCxlPVNhLzMscj1ucihuKSx1PXIodCxlKTtyZXR1cm4gdS5wYXJhbGxlbHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PW5bMF0qU2EvMTgwLGU9blsxXSpTYS8xODApOlsxODAqKHQvU2EpLDE4MCooZS9TYSldfSx1fWZ1bmN0aW9uIEhlKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguc3FydChpLTIqdSpNYXRoLnNpbih0KSkvdTtyZXR1cm5bZSpNYXRoLnNpbihuKj11KSxvLWUqTWF0aC5jb3MobildfXZhciByPU1hdGguc2luKG4pLHU9KHIrTWF0aC5zaW4odCkpLzIsaT0xK3IqKDIqdS1yKSxvPU1hdGguc3FydChpKS91O3JldHVybiBlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPW8tdDtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL3UsWCgoaS0obipuK2UqZSkqdSp1KS8oMip1KSldfSxlfWZ1bmN0aW9uIEZlKCl7ZnVuY3Rpb24gbihuLHQpe05jKz11Km4tcip0LHI9bix1PXR9dmFyIHQsZSxyLHU7UmMucG9pbnQ9ZnVuY3Rpb24oaSxvKXtSYy5wb2ludD1uLHQ9cj1pLGU9dT1vfSxSYy5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiBPZShuLHQpe0xjPm4mJihMYz1uKSxuPnFjJiYocWM9biksVGM+dCYmKFRjPXQpLHQ+emMmJih6Yz10KX1mdW5jdGlvbiBZZSgpe2Z1bmN0aW9uIG4obix0KXtvLnB1c2goIk0iLG4sIiwiLHQsaSl9ZnVuY3Rpb24gdChuLHQpe28ucHVzaCgiTSIsbiwiLCIsdCksYS5wb2ludD1lfWZ1bmN0aW9uIGUobix0KXtvLnB1c2goIkwiLG4sIiwiLHQpfWZ1bmN0aW9uIHIoKXthLnBvaW50PW59ZnVuY3Rpb24gdSgpe28ucHVzaCgiWiIpfXZhciBpPUllKDQuNSksbz1bXSxhPXtwb2ludDpuLGxpbmVTdGFydDpmdW5jdGlvbigpe2EucG9pbnQ9dH0sbGluZUVuZDpyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2EubGluZUVuZD11fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7YS5saW5lRW5kPXIsYS5wb2ludD1ufSxwb2ludFJhZGl1czpmdW5jdGlvbihuKXtyZXR1cm4gaT1JZShuKSxhfSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZihvLmxlbmd0aCl7dmFyIG49by5qb2luKCIiKTtyZXR1cm4gbz1bXSxufX19O3JldHVybiBhfWZ1bmN0aW9uIEllKG4pe3JldHVybiJtMCwiK24rImEiK24rIiwiK24rIiAwIDEsMSAwLCIrLTIqbisiYSIrbisiLCIrbisiIDAgMSwxIDAsIisyKm4rInoifWZ1bmN0aW9uIFplKG4sdCl7ZGMrPW4sbWMrPXQsKyt5Y31mdW5jdGlvbiBWZSgpe2Z1bmN0aW9uIG4obixyKXt2YXIgdT1uLXQsaT1yLWUsbz1NYXRoLnNxcnQodSp1K2kqaSk7eGMrPW8qKHQrbikvMixNYys9byooZStyKS8yLF9jKz1vLFplKHQ9bixlPXIpfXZhciB0LGU7UGMucG9pbnQ9ZnVuY3Rpb24ocix1KXtQYy5wb2ludD1uLFplKHQ9cixlPXUpfX1mdW5jdGlvbiBYZSgpe1BjLnBvaW50PVplfWZ1bmN0aW9uICRlKCl7ZnVuY3Rpb24gbihuLHQpe3ZhciBlPW4tcixpPXQtdSxvPU1hdGguc3FydChlKmUraSppKTt4Yys9byoocituKS8yLE1jKz1vKih1K3QpLzIsX2MrPW8sbz11Km4tcip0LGJjKz1vKihyK24pLHdjKz1vKih1K3QpLFNjKz0zKm8sWmUocj1uLHU9dCl9dmFyIHQsZSxyLHU7UGMucG9pbnQ9ZnVuY3Rpb24oaSxvKXtQYy5wb2ludD1uLFplKHQ9cj1pLGU9dT1vKX0sUGMubGluZUVuZD1mdW5jdGlvbigpe24odCxlKX19ZnVuY3Rpb24gQmUobil7ZnVuY3Rpb24gdCh0LGUpe24ubW92ZVRvKHQsZSksbi5hcmModCxlLG8sMCxrYSl9ZnVuY3Rpb24gZSh0LGUpe24ubW92ZVRvKHQsZSksYS5wb2ludD1yfWZ1bmN0aW9uIHIodCxlKXtuLmxpbmVUbyh0LGUpfWZ1bmN0aW9uIHUoKXthLnBvaW50PXR9ZnVuY3Rpb24gaSgpe24uY2xvc2VQYXRoKCl9dmFyIG89NC41LGE9e3BvaW50OnQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7YS5wb2ludD1lfSxsaW5lRW5kOnUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7YS5saW5lRW5kPWl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9dSxhLnBvaW50PXR9LHBvaW50UmFkaXVzOmZ1bmN0aW9uKG4pe3JldHVybiBvPW4sYX0scmVzdWx0Omd9O3JldHVybiBhfWZ1bmN0aW9uIFdlKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuKGE/cjplKShuKX1mdW5jdGlvbiBlKHQpe3JldHVybiBLZSh0LGZ1bmN0aW9uKGUscil7ZT1uKGUsciksdC5wb2ludChlWzBdLGVbMV0pfSl9ZnVuY3Rpb24gcih0KXtmdW5jdGlvbiBlKGUscil7ZT1uKGUsciksdC5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIHIoKXt4PTAvMCxTLnBvaW50PWksdC5saW5lU3RhcnQoKX1mdW5jdGlvbiBpKGUscil7dmFyIGk9c2UoW2Uscl0pLG89bihlLHIpO3UoeCxNLHksXyxiLHcseD1vWzBdLE09b1sxXSx5PWUsXz1pWzBdLGI9aVsxXSx3PWlbMl0sYSx0KSx0LnBvaW50KHgsTSl9ZnVuY3Rpb24gbygpe1MucG9pbnQ9ZSx0LmxpbmVFbmQoKX1mdW5jdGlvbiBjKCl7cigpLFMucG9pbnQ9cyxTLmxpbmVFbmQ9bH1mdW5jdGlvbiBzKG4sdCl7aShmPW4saD10KSxnPXgscD1NLHY9XyxkPWIsbT13LFMucG9pbnQ9aX1mdW5jdGlvbiBsKCl7dSh4LE0seSxfLGIsdyxnLHAsZix2LGQsbSxhLHQpLFMubGluZUVuZD1vLG8oKX12YXIgZixoLGcscCx2LGQsbSx5LHgsTSxfLGIsdyxTPXtwb2ludDplLGxpbmVTdGFydDpyLGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpLFMubGluZVN0YXJ0PWN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25FbmQoKSxTLmxpbmVTdGFydD1yfX07cmV0dXJuIFN9ZnVuY3Rpb24gdSh0LGUscixhLGMscyxsLGYsaCxnLHAsdixkLG0pe3ZhciB5PWwtdCx4PWYtZSxNPXkqeSt4Kng7aWYoTT40KmkmJmQtLSl7dmFyIF89YStnLGI9YytwLHc9cyt2LFM9TWF0aC5zcXJ0KF8qXytiKmIrdyp3KSxrPU1hdGguYXNpbih3Lz1TKSxFPW9hKG9hKHcpLTEpPEFhfHxvYShyLWgpPEFhPyhyK2gpLzI6TWF0aC5hdGFuMihiLF8pLEE9bihFLGspLEM9QVswXSxOPUFbMV0sTD1DLXQsVD1OLWUscT14KkwteSpUOyhxKnEvTT5pfHxvYSgoeSpMK3gqVCkvTS0uNSk+LjN8fG8+YSpnK2MqcCtzKnYpJiYodSh0LGUscixhLGMscyxDLE4sRSxfLz1TLGIvPVMsdyxkLG0pLG0ucG9pbnQoQyxOKSx1KEMsTixFLF8sYix3LGwsZixoLGcscCx2LGQsbSkpfX12YXIgaT0uNSxvPU1hdGguY29zKDMwKk5hKSxhPTE2O3JldHVybiB0LnByZWNpc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0oaT1uKm4pPjAmJjE2LHQpOk1hdGguc3FydChpKX0sdH1mdW5jdGlvbiBKZShuKXt2YXIgdD1XZShmdW5jdGlvbih0LGUpe3JldHVybiBuKFt0KkxhLGUqTGFdKX0pO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdHIodChuKSl9fWZ1bmN0aW9uIEdlKG4pe3RoaXMuc3RyZWFtPW59ZnVuY3Rpb24gS2Uobix0KXtyZXR1cm57cG9pbnQ6dCxzcGhlcmU6ZnVuY3Rpb24oKXtuLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKX19fWZ1bmN0aW9uIFFlKG4pe3JldHVybiBucihmdW5jdGlvbigpe3JldHVybiBufSkoKX1mdW5jdGlvbiBucihuKXtmdW5jdGlvbiB0KG4pe3JldHVybiBuPWEoblswXSpOYSxuWzFdKk5hKSxbblswXSpoK2Mscy1uWzFdKmhdfWZ1bmN0aW9uIGUobil7cmV0dXJuIG49YS5pbnZlcnQoKG5bMF0tYykvaCwocy1uWzFdKS9oKSxuJiZbblswXSpMYSxuWzFdKkxhXX1mdW5jdGlvbiByKCl7YT1VZShvPXVyKG0seSx4KSxpKTt2YXIgbj1pKHYsZCk7cmV0dXJuIGM9Zy1uWzBdKmgscz1wK25bMV0qaCx1KCl9ZnVuY3Rpb24gdSgpe3JldHVybiBsJiYobC52YWxpZD0hMSxsPW51bGwpLHR9dmFyIGksbyxhLGMscyxsLGY9V2UoZnVuY3Rpb24obix0KXtyZXR1cm4gbj1pKG4sdCksW25bMF0qaCtjLHMtblsxXSpoXX0pLGg9MTUwLGc9NDgwLHA9MjUwLHY9MCxkPTAsbT0wLHk9MCx4PTAsTT1FYyxfPWJ0LGI9bnVsbCx3PW51bGw7cmV0dXJuIHQuc3RyZWFtPWZ1bmN0aW9uKG4pe3JldHVybiBsJiYobC52YWxpZD0hMSksbD10cihNKG8sZihfKG4pKSkpLGwudmFsaWQ9ITAsbH0sdC5jbGlwQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09bnVsbD09bj8oYj1uLEVjKTpSZSgoYj0rbikqTmEpLHUoKSk6Yn0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PW4sXz1uP1BlKG5bMF1bMF0sblswXVsxXSxuWzFdWzBdLG5bMV1bMV0pOmJ0LHUoKSk6d30sdC5zY2FsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rbixyKCkpOmh9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStuWzBdLHA9K25bMV0scigpKTpbZyxwXX0sdC5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9blswXSUzNjAqTmEsZD1uWzFdJTM2MCpOYSxyKCkpOlt2KkxhLGQqTGFdfSx0LnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1uWzBdJTM2MCpOYSx5PW5bMV0lMzYwKk5hLHg9bi5sZW5ndGg+Mj9uWzJdJTM2MCpOYTowLHIoKSk6W20qTGEseSpMYSx4KkxhXX0sWG8ucmViaW5kKHQsZiwicHJlY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4gaT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmludmVydD1pLmludmVydCYmZSxyKCl9fWZ1bmN0aW9uIHRyKG4pe3JldHVybiBLZShuLGZ1bmN0aW9uKHQsZSl7bi5wb2ludCh0Kk5hLGUqTmEpfSl9ZnVuY3Rpb24gZXIobix0KXtyZXR1cm5bbix0XX1mdW5jdGlvbiBycihuLHQpe3JldHVybltuPlNhP24ta2E6LVNhPm4/bitrYTpuLHRdfWZ1bmN0aW9uIHVyKG4sdCxlKXtyZXR1cm4gbj90fHxlP1VlKG9yKG4pLGFyKHQsZSkpOm9yKG4pOnR8fGU/YXIodCxlKTpycn1mdW5jdGlvbiBpcihuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gdCs9bixbdD5TYT90LWthOi1TYT50P3Qra2E6dCxlXX19ZnVuY3Rpb24gb3Iobil7dmFyIHQ9aXIobik7cmV0dXJuIHQuaW52ZXJ0PWlyKC1uKSx0fWZ1bmN0aW9uIGFyKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguY29zKHQpLGE9TWF0aC5jb3MobikqZSxjPU1hdGguc2luKG4pKmUscz1NYXRoLnNpbih0KSxsPXMqcithKnU7cmV0dXJuW01hdGguYXRhbjIoYyppLWwqbyxhKnItcyp1KSxYKGwqaStjKm8pXX12YXIgcj1NYXRoLmNvcyhuKSx1PU1hdGguc2luKG4pLGk9TWF0aC5jb3ModCksbz1NYXRoLnNpbih0KTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1NYXRoLmNvcyh0KSxhPU1hdGguY29zKG4pKmUsYz1NYXRoLnNpbihuKSplLHM9TWF0aC5zaW4odCksbD1zKmktYypvO3JldHVybltNYXRoLmF0YW4yKGMqaStzKm8sYSpyK2wqdSksWChsKnItYSp1KV19LGV9ZnVuY3Rpb24gY3Iobix0KXt2YXIgZT1NYXRoLmNvcyhuKSxyPU1hdGguc2luKG4pO3JldHVybiBmdW5jdGlvbih1LGksbyxhKXt2YXIgYz1vKnQ7bnVsbCE9dT8odT1zcihlLHUpLGk9c3IoZSxpKSwobz4wP2k+dTp1PmkpJiYodSs9byprYSkpOih1PW4rbyprYSxpPW4tLjUqYyk7Zm9yKHZhciBzLGw9dTtvPjA/bD5pOmk+bDtsLT1jKWEucG9pbnQoKHM9dmUoW2UsLXIqTWF0aC5jb3MobCksLXIqTWF0aC5zaW4obCldKSlbMF0sc1sxXSl9fWZ1bmN0aW9uIHNyKG4sdCl7dmFyIGU9c2UodCk7ZVswXS09bixwZShlKTt2YXIgcj1WKC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LXI6cikrMipNYXRoLlBJLUFhKSUoMipNYXRoLlBJKX1mdW5jdGlvbiBscihuLHQsZSl7dmFyIHI9WG8ucmFuZ2Uobix0LUFhLGUpLmNvbmNhdCh0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVybltuLHRdfSl9fWZ1bmN0aW9uIGZyKG4sdCxlKXt2YXIgcj1Yby5yYW5nZShuLHQtQWEsZSkuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gaHIobil7cmV0dXJuIG4uc291cmNlfWZ1bmN0aW9uIGdyKG4pe3JldHVybiBuLnRhcmdldH1mdW5jdGlvbiBwcihuLHQsZSxyKXt2YXIgdT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLG89TWF0aC5jb3MociksYT1NYXRoLnNpbihyKSxjPXUqTWF0aC5jb3Mobikscz11Kk1hdGguc2luKG4pLGw9bypNYXRoLmNvcyhlKSxmPW8qTWF0aC5zaW4oZSksaD0yKk1hdGguYXNpbihNYXRoLnNxcnQoSihyLXQpK3UqbypKKGUtbikpKSxnPTEvTWF0aC5zaW4oaCkscD1oP2Z1bmN0aW9uKG4pe3ZhciB0PU1hdGguc2luKG4qPWgpKmcsZT1NYXRoLnNpbihoLW4pKmcscj1lKmMrdCpsLHU9ZSpzK3QqZixvPWUqaSt0KmE7cmV0dXJuW01hdGguYXRhbjIodSxyKSpMYSxNYXRoLmF0YW4yKG8sTWF0aC5zcXJ0KHIqcit1KnUpKSpMYV19OmZ1bmN0aW9uKCl7cmV0dXJuW24qTGEsdCpMYV19O3JldHVybiBwLmRpc3RhbmNlPWgscH1mdW5jdGlvbiB2cigpe2Z1bmN0aW9uIG4obix1KXt2YXIgaT1NYXRoLnNpbih1Kj1OYSksbz1NYXRoLmNvcyh1KSxhPW9hKChuKj1OYSktdCksYz1NYXRoLmNvcyhhKTtVYys9TWF0aC5hdGFuMihNYXRoLnNxcnQoKGE9bypNYXRoLnNpbihhKSkqYSsoYT1yKmktZSpvKmMpKmEpLGUqaStyKm8qYyksdD1uLGU9aSxyPW99dmFyIHQsZSxyO2pjLnBvaW50PWZ1bmN0aW9uKHUsaSl7dD11Kk5hLGU9TWF0aC5zaW4oaSo9TmEpLHI9TWF0aC5jb3MoaSksamMucG9pbnQ9bn0samMubGluZUVuZD1mdW5jdGlvbigpe2pjLnBvaW50PWpjLmxpbmVFbmQ9Z319ZnVuY3Rpb24gZHIobix0KXtmdW5jdGlvbiBlKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksdT1NYXRoLmNvcyhlKSxpPW4ocip1KTtyZXR1cm5baSp1Kk1hdGguc2luKHQpLGkqTWF0aC5zaW4oZSldfXJldHVybiBlLmludmVydD1mdW5jdGlvbihuLGUpe3ZhciByPU1hdGguc3FydChuKm4rZSplKSx1PXQociksaT1NYXRoLnNpbih1KSxvPU1hdGguY29zKHUpO3JldHVybltNYXRoLmF0YW4yKG4qaSxyKm8pLE1hdGguYXNpbihyJiZlKmkvcildfSxlfWZ1bmN0aW9uIG1yKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPW9hKG9hKHQpLUVhKTxBYT8wOm8vTWF0aC5wb3codSh0KSxpKTtyZXR1cm5bZSpNYXRoLnNpbihpKm4pLG8tZSpNYXRoLmNvcyhpKm4pXX12YXIgcj1NYXRoLmNvcyhuKSx1PWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnRhbihTYS80K24vMil9LGk9bj09PXQ/TWF0aC5zaW4obik6TWF0aC5sb2coci9NYXRoLmNvcyh0KSkvTWF0aC5sb2codSh0KS91KG4pKSxvPXIqTWF0aC5wb3codShuKSxpKS9pO3JldHVybiBpPyhlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPW8tdCxyPUkoaSkqTWF0aC5zcXJ0KG4qbitlKmUpO3JldHVybltNYXRoLmF0YW4yKG4sZSkvaSwyKk1hdGguYXRhbihNYXRoLnBvdyhvL3IsMS9pKSktRWFdfSxlKTp4cn1mdW5jdGlvbiB5cihuLHQpe2Z1bmN0aW9uIGUobix0KXt2YXIgZT1pLXQ7cmV0dXJuW2UqTWF0aC5zaW4odSpuKSxpLWUqTWF0aC5jb3ModSpuKV19dmFyIHI9TWF0aC5jb3MobiksdT1uPT09dD9NYXRoLnNpbihuKTooci1NYXRoLmNvcyh0KSkvKHQtbiksaT1yL3UrbjtyZXR1cm4gb2EodSk8QWE/ZXI6KGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9aS10O3JldHVybltNYXRoLmF0YW4yKG4sZSkvdSxpLUkodSkqTWF0aC5zcXJ0KG4qbitlKmUpXX0sZSl9ZnVuY3Rpb24geHIobix0KXtyZXR1cm5bbixNYXRoLmxvZyhNYXRoLnRhbihTYS80K3QvMikpXX1mdW5jdGlvbiBNcihuKXt2YXIgdCxlPVFlKG4pLHI9ZS5zY2FsZSx1PWUudHJhbnNsYXRlLGk9ZS5jbGlwRXh0ZW50O3JldHVybiBlLnNjYWxlPWZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q/ZS5jbGlwRXh0ZW50KG51bGwpOmU6bn0sZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXt2YXIgbj11LmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gbj09PWU/dD9lLmNsaXBFeHRlbnQobnVsbCk6ZTpufSxlLmNsaXBFeHRlbnQ9ZnVuY3Rpb24obil7dmFyIG89aS5hcHBseShlLGFyZ3VtZW50cyk7aWYobz09PWUpe2lmKHQ9bnVsbD09bil7dmFyIGE9U2EqcigpLGM9dSgpO2koW1tjWzBdLWEsY1sxXS1hXSxbY1swXSthLGNbMV0rYV1dKX19ZWxzZSB0JiYobz1udWxsKTtyZXR1cm4gb30sZS5jbGlwRXh0ZW50KG51bGwpfWZ1bmN0aW9uIF9yKG4sdCl7cmV0dXJuW01hdGgubG9nKE1hdGgudGFuKFNhLzQrdC8yKSksLW5dfWZ1bmN0aW9uIGJyKG4pe3JldHVybiBuWzBdfWZ1bmN0aW9uIHdyKG4pe3JldHVybiBuWzFdfWZ1bmN0aW9uIFNyKG4pe2Zvcih2YXIgdD1uLmxlbmd0aCxlPVswLDFdLHI9Mix1PTI7dD51O3UrKyl7Zm9yKDtyPjEmJloobltlW3ItMl1dLG5bZVtyLTFdXSxuW3VdKTw9MDspLS1yO2VbcisrXT11fXJldHVybiBlLnNsaWNlKDAscil9ZnVuY3Rpb24ga3Iobix0KXtyZXR1cm4gblswXS10WzBdfHxuWzFdLXRbMV19ZnVuY3Rpb24gRXIobix0LGUpe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pPChlWzFdLXRbMV0pKihuWzBdLXRbMF0pfWZ1bmN0aW9uIEFyKG4sdCxlLHIpe3ZhciB1PW5bMF0saT1lWzBdLG89dFswXS11LGE9clswXS1pLGM9blsxXSxzPWVbMV0sbD10WzFdLWMsZj1yWzFdLXMsaD0oYSooYy1zKS1mKih1LWkpKS8oZipvLWEqbCk7cmV0dXJuW3UraCpvLGMraCpsXX1mdW5jdGlvbiBDcihuKXt2YXIgdD1uWzBdLGU9bltuLmxlbmd0aC0xXTtyZXR1cm4hKHRbMF0tZVswXXx8dFsxXS1lWzFdKX1mdW5jdGlvbiBOcigpe0pyKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBMcihuKXt2YXIgdD1KYy5wb3AoKXx8bmV3IE5yO3JldHVybiB0LnNpdGU9bix0fWZ1bmN0aW9uIFRyKG4pe09yKG4pLCRjLnJlbW92ZShuKSxKYy5wdXNoKG4pLEpyKG4pfWZ1bmN0aW9uIHFyKG4pe3ZhciB0PW4uY2lyY2xlLGU9dC54LHI9dC5jeSx1PXt4OmUseTpyfSxpPW4uUCxvPW4uTixhPVtuXTtUcihuKTtmb3IodmFyIGM9aTtjLmNpcmNsZSYmb2EoZS1jLmNpcmNsZS54KTxBYSYmb2Eoci1jLmNpcmNsZS5jeSk8QWE7KWk9Yy5QLGEudW5zaGlmdChjKSxUcihjKSxjPWk7YS51bnNoaWZ0KGMpLE9yKGMpO2Zvcih2YXIgcz1vO3MuY2lyY2xlJiZvYShlLXMuY2lyY2xlLngpPEFhJiZvYShyLXMuY2lyY2xlLmN5KTxBYTspbz1zLk4sYS5wdXNoKHMpLFRyKHMpLHM9bzthLnB1c2gocyksT3Iocyk7dmFyIGwsZj1hLmxlbmd0aDtmb3IobD0xO2Y+bDsrK2wpcz1hW2xdLGM9YVtsLTFdLCRyKHMuZWRnZSxjLnNpdGUscy5zaXRlLHUpO2M9YVswXSxzPWFbZi0xXSxzLmVkZ2U9VnIoYy5zaXRlLHMuc2l0ZSxudWxsLHUpLEZyKGMpLEZyKHMpfWZ1bmN0aW9uIHpyKG4pe2Zvcih2YXIgdCxlLHIsdSxpPW4ueCxvPW4ueSxhPSRjLl87YTspaWYocj1ScihhLG8pLWkscj5BYSlhPWEuTDtlbHNle2lmKHU9aS1EcihhLG8pLCEodT5BYSkpe3I+LUFhPyh0PWEuUCxlPWEpOnU+LUFhPyh0PWEsZT1hLk4pOnQ9ZT1hO2JyZWFrfWlmKCFhLlIpe3Q9YTticmVha31hPWEuUn12YXIgYz1McihuKTtpZigkYy5pbnNlcnQodCxjKSx0fHxlKXtpZih0PT09ZSlyZXR1cm4gT3IodCksZT1Mcih0LnNpdGUpLCRjLmluc2VydChjLGUpLGMuZWRnZT1lLmVkZ2U9VnIodC5zaXRlLGMuc2l0ZSksRnIodCksRnIoZSksdm9pZCAwO2lmKCFlKXJldHVybiBjLmVkZ2U9VnIodC5zaXRlLGMuc2l0ZSksdm9pZCAwO09yKHQpLE9yKGUpO3ZhciBzPXQuc2l0ZSxsPXMueCxmPXMueSxoPW4ueC1sLGc9bi55LWYscD1lLnNpdGUsdj1wLngtbCxkPXAueS1mLG09MiooaCpkLWcqdikseT1oKmgrZypnLHg9dip2K2QqZCxNPXt4OihkKnktZyp4KS9tK2wseTooaCp4LXYqeSkvbStmfTskcihlLmVkZ2UscyxwLE0pLGMuZWRnZT1WcihzLG4sbnVsbCxNKSxlLmVkZ2U9VnIobixwLG51bGwsTSksRnIodCksRnIoZSl9fWZ1bmN0aW9uIFJyKG4sdCl7dmFyIGU9bi5zaXRlLHI9ZS54LHU9ZS55LGk9dS10O2lmKCFpKXJldHVybiByO3ZhciBvPW4uUDtpZighbylyZXR1cm4tMS8wO2U9by5zaXRlO3ZhciBhPWUueCxjPWUueSxzPWMtdDtpZighcylyZXR1cm4gYTt2YXIgbD1hLXIsZj0xL2ktMS9zLGg9bC9zO3JldHVybiBmPygtaCtNYXRoLnNxcnQoaCpoLTIqZioobCpsLygtMipzKS1jK3MvMit1LWkvMikpKS9mK3I6KHIrYSkvMn1mdW5jdGlvbiBEcihuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiBScihlLHQpO3ZhciByPW4uc2l0ZTtyZXR1cm4gci55PT09dD9yLng6MS8wfWZ1bmN0aW9uIFByKG4pe3RoaXMuc2l0ZT1uLHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gVXIobil7Zm9yKHZhciB0LGUscix1LGksbyxhLGMscyxsLGY9blswXVswXSxoPW5bMV1bMF0sZz1uWzBdWzFdLHA9blsxXVsxXSx2PVhjLGQ9di5sZW5ndGg7ZC0tOylpZihpPXZbZF0saSYmaS5wcmVwYXJlKCkpZm9yKGE9aS5lZGdlcyxjPWEubGVuZ3RoLG89MDtjPm87KWw9YVtvXS5lbmQoKSxyPWwueCx1PWwueSxzPWFbKytvJWNdLnN0YXJ0KCksdD1zLngsZT1zLnksKG9hKHItdCk+QWF8fG9hKHUtZSk+QWEpJiYoYS5zcGxpY2UobywwLG5ldyBCcihYcihpLnNpdGUsbCxvYShyLWYpPEFhJiZwLXU+QWE/e3g6Zix5Om9hKHQtZik8QWE/ZTpwfTpvYSh1LXApPEFhJiZoLXI+QWE/e3g6b2EoZS1wKTxBYT90OmgseTpwfTpvYShyLWgpPEFhJiZ1LWc+QWE/e3g6aCx5Om9hKHQtaCk8QWE/ZTpnfTpvYSh1LWcpPEFhJiZyLWY+QWE/e3g6b2EoZS1nKTxBYT90OmYseTpnfTpudWxsKSxpLnNpdGUsbnVsbCkpLCsrYyl9ZnVuY3Rpb24ganIobix0KXtyZXR1cm4gdC5hbmdsZS1uLmFuZ2xlfWZ1bmN0aW9uIEhyKCl7SnIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIEZyKG4pe3ZhciB0PW4uUCxlPW4uTjtpZih0JiZlKXt2YXIgcj10LnNpdGUsdT1uLnNpdGUsaT1lLnNpdGU7aWYociE9PWkpe3ZhciBvPXUueCxhPXUueSxjPXIueC1vLHM9ci55LWEsbD1pLngtbyxmPWkueS1hLGg9MiooYypmLXMqbCk7aWYoIShoPj0tQ2EpKXt2YXIgZz1jKmMrcypzLHA9bCpsK2YqZix2PShmKmctcypwKS9oLGQ9KGMqcC1sKmcpL2gsZj1kK2EsbT1HYy5wb3AoKXx8bmV3IEhyO20uYXJjPW4sbS5zaXRlPXUsbS54PXYrbyxtLnk9ZitNYXRoLnNxcnQodip2K2QqZCksbS5jeT1mLG4uY2lyY2xlPW07Zm9yKHZhciB5PW51bGwseD1XYy5fO3g7KWlmKG0ueTx4Lnl8fG0ueT09PXgueSYmbS54PD14Lngpe2lmKCF4Lkwpe3k9eC5QO2JyZWFrfXg9eC5MfWVsc2V7aWYoIXguUil7eT14O2JyZWFrfXg9eC5SfVdjLmluc2VydCh5LG0pLHl8fChCYz1tKX19fX1mdW5jdGlvbiBPcihuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwoQmM9dC5OKSxXYy5yZW1vdmUodCksR2MucHVzaCh0KSxKcih0KSxuLmNpcmNsZT1udWxsKX1mdW5jdGlvbiBZcihuKXtmb3IodmFyIHQsZT1WYyxyPURlKG5bMF1bMF0sblswXVsxXSxuWzFdWzBdLG5bMV1bMV0pLHU9ZS5sZW5ndGg7dS0tOyl0PWVbdV0sKCFJcih0LG4pfHwhcih0KXx8b2EodC5hLngtdC5iLngpPEFhJiZvYSh0LmEueS10LmIueSk8QWEpJiYodC5hPXQuYj1udWxsLGUuc3BsaWNlKHUsMSkpfWZ1bmN0aW9uIElyKG4sdCl7dmFyIGU9bi5iO2lmKGUpcmV0dXJuITA7dmFyIHIsdSxpPW4uYSxvPXRbMF1bMF0sYT10WzFdWzBdLGM9dFswXVsxXSxzPXRbMV1bMV0sbD1uLmwsZj1uLnIsaD1sLngsZz1sLnkscD1mLngsdj1mLnksZD0oaCtwKS8yLG09KGcrdikvMjtpZih2PT09Zyl7aWYobz5kfHxkPj1hKXJldHVybjtpZihoPnApe2lmKGkpe2lmKGkueT49cylyZXR1cm59ZWxzZSBpPXt4OmQseTpjfTtlPXt4OmQseTpzfX1lbHNle2lmKGkpe2lmKGkueTxjKXJldHVybn1lbHNlIGk9e3g6ZCx5OnN9O2U9e3g6ZCx5OmN9fX1lbHNlIGlmKHI9KGgtcCkvKHYtZyksdT1tLXIqZCwtMT5yfHxyPjEpaWYoaD5wKXtpZihpKXtpZihpLnk+PXMpcmV0dXJufWVsc2UgaT17eDooYy11KS9yLHk6Y307ZT17eDoocy11KS9yLHk6c319ZWxzZXtpZihpKXtpZihpLnk8YylyZXR1cm59ZWxzZSBpPXt4OihzLXUpL3IseTpzfTtlPXt4OihjLXUpL3IseTpjfX1lbHNlIGlmKHY+Zyl7aWYoaSl7aWYoaS54Pj1hKXJldHVybn1lbHNlIGk9e3g6byx5OnIqbyt1fTtlPXt4OmEseTpyKmErdX19ZWxzZXtpZihpKXtpZihpLng8bylyZXR1cm59ZWxzZSBpPXt4OmEseTpyKmErdX07ZT17eDpvLHk6cipvK3V9fXJldHVybiBuLmE9aSxuLmI9ZSwhMH1mdW5jdGlvbiBacihuLHQpe3RoaXMubD1uLHRoaXMucj10LHRoaXMuYT10aGlzLmI9bnVsbH1mdW5jdGlvbiBWcihuLHQsZSxyKXt2YXIgdT1uZXcgWnIobix0KTtyZXR1cm4gVmMucHVzaCh1KSxlJiYkcih1LG4sdCxlKSxyJiYkcih1LHQsbixyKSxYY1tuLmldLmVkZ2VzLnB1c2gobmV3IEJyKHUsbix0KSksWGNbdC5pXS5lZGdlcy5wdXNoKG5ldyBCcih1LHQsbikpLHV9ZnVuY3Rpb24gWHIobix0LGUpe3ZhciByPW5ldyBacihuLG51bGwpO3JldHVybiByLmE9dCxyLmI9ZSxWYy5wdXNoKHIpLHJ9ZnVuY3Rpb24gJHIobix0LGUscil7bi5hfHxuLmI/bi5sPT09ZT9uLmI9cjpuLmE9cjoobi5hPXIsbi5sPXQsbi5yPWUpfWZ1bmN0aW9uIEJyKG4sdCxlKXt2YXIgcj1uLmEsdT1uLmI7dGhpcy5lZGdlPW4sdGhpcy5zaXRlPXQsdGhpcy5hbmdsZT1lP01hdGguYXRhbjIoZS55LXQueSxlLngtdC54KTpuLmw9PT10P01hdGguYXRhbjIodS54LXIueCxyLnktdS55KTpNYXRoLmF0YW4yKHIueC11LngsdS55LXIueSl9ZnVuY3Rpb24gV3IoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBKcihuKXtuLlU9bi5DPW4uTD1uLlI9bi5QPW4uTj1udWxsfWZ1bmN0aW9uIEdyKG4sdCl7dmFyIGU9dCxyPXQuUix1PWUuVTt1P3UuTD09PWU/dS5MPXI6dS5SPXI6bi5fPXIsci5VPXUsZS5VPXIsZS5SPXIuTCxlLlImJihlLlIuVT1lKSxyLkw9ZX1mdW5jdGlvbiBLcihuLHQpe3ZhciBlPXQscj10LkwsdT1lLlU7dT91Lkw9PT1lP3UuTD1yOnUuUj1yOm4uXz1yLHIuVT11LGUuVT1yLGUuTD1yLlIsZS5MJiYoZS5MLlU9ZSksci5SPWV9ZnVuY3Rpb24gUXIobil7Zm9yKDtuLkw7KW49bi5MO3JldHVybiBufWZ1bmN0aW9uIG51KG4sdCl7dmFyIGUscix1LGk9bi5zb3J0KHR1KS5wb3AoKTtmb3IoVmM9W10sWGM9bmV3IEFycmF5KG4ubGVuZ3RoKSwkYz1uZXcgV3IsV2M9bmV3IFdyOzspaWYodT1CYyxpJiYoIXV8fGkueTx1Lnl8fGkueT09PXUueSYmaS54PHUueCkpKGkueCE9PWV8fGkueSE9PXIpJiYoWGNbaS5pXT1uZXcgUHIoaSksenIoaSksZT1pLngscj1pLnkpLGk9bi5wb3AoKTtlbHNle2lmKCF1KWJyZWFrO3FyKHUuYXJjKX10JiYoWXIodCksVXIodCkpO3ZhciBvPXtjZWxsczpYYyxlZGdlczpWY307cmV0dXJuICRjPVdjPVZjPVhjPW51bGwsb31mdW5jdGlvbiB0dShuLHQpe3JldHVybiB0Lnktbi55fHx0Lngtbi54fWZ1bmN0aW9uIGV1KG4sdCxlKXtyZXR1cm4obi54LWUueCkqKHQueS1uLnkpLShuLngtdC54KSooZS55LW4ueSl9ZnVuY3Rpb24gcnUobil7cmV0dXJuIG4ueH1mdW5jdGlvbiB1dShuKXtyZXR1cm4gbi55fWZ1bmN0aW9uIGl1KCl7cmV0dXJue2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsfX1mdW5jdGlvbiBvdShuLHQsZSxyLHUsaSl7aWYoIW4odCxlLHIsdSxpKSl7dmFyIG89LjUqKGUrdSksYT0uNSoocitpKSxjPXQubm9kZXM7Y1swXSYmb3UobixjWzBdLGUscixvLGEpLGNbMV0mJm91KG4sY1sxXSxvLHIsdSxhKSxjWzJdJiZvdShuLGNbMl0sZSxhLG8saSksY1szXSYmb3UobixjWzNdLG8sYSx1LGkpfX1mdW5jdGlvbiBhdShuLHQpe249WG8ucmdiKG4pLHQ9WG8ucmdiKHQpO3ZhciBlPW4ucixyPW4uZyx1PW4uYixpPXQuci1lLG89dC5nLXIsYT10LmItdTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIiMiK3Z0KE1hdGgucm91bmQoZStpKm4pKSt2dChNYXRoLnJvdW5kKHIrbypuKSkrdnQoTWF0aC5yb3VuZCh1K2EqbikpfX1mdW5jdGlvbiBjdShuLHQpe3ZhciBlLHI9e30sdT17fTtmb3IoZSBpbiBuKWUgaW4gdD9yW2VdPWZ1KG5bZV0sdFtlXSk6dVtlXT1uW2VdO2ZvcihlIGluIHQpZSBpbiBufHwodVtlXT10W2VdKTtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKGUgaW4gcil1W2VdPXJbZV0obik7cmV0dXJuIHV9fWZ1bmN0aW9uIHN1KG4sdCl7cmV0dXJuIHQtPW49K24sZnVuY3Rpb24oZSl7cmV0dXJuIG4rdCplfX1mdW5jdGlvbiBsdShuLHQpe3ZhciBlLHIsdSxpLG8sYT0wLGM9MCxzPVtdLGw9W107Zm9yKG4rPSIiLHQrPSIiLFFjLmxhc3RJbmRleD0wLHI9MDtlPVFjLmV4ZWModCk7KytyKWUuaW5kZXgmJnMucHVzaCh0LnN1YnN0cmluZyhhLGM9ZS5pbmRleCkpLGwucHVzaCh7aTpzLmxlbmd0aCx4OmVbMF19KSxzLnB1c2gobnVsbCksYT1RYy5sYXN0SW5kZXg7Zm9yKGE8dC5sZW5ndGgmJnMucHVzaCh0LnN1YnN0cmluZyhhKSkscj0wLGk9bC5sZW5ndGg7KGU9UWMuZXhlYyhuKSkmJmk+cjsrK3IpaWYobz1sW3JdLG8ueD09ZVswXSl7aWYoby5pKWlmKG51bGw9PXNbby5pKzFdKWZvcihzW28uaS0xXSs9by54LHMuc3BsaWNlKG8uaSwxKSx1PXIrMTtpPnU7Kyt1KWxbdV0uaS0tO2Vsc2UgZm9yKHNbby5pLTFdKz1vLngrc1tvLmkrMV0scy5zcGxpY2Uoby5pLDIpLHU9cisxO2k+dTsrK3UpbFt1XS5pLT0yO2Vsc2UgaWYobnVsbD09c1tvLmkrMV0pc1tvLmldPW8ueDtlbHNlIGZvcihzW28uaV09by54K3Nbby5pKzFdLHMuc3BsaWNlKG8uaSsxLDEpLHU9cisxO2k+dTsrK3UpbFt1XS5pLS07bC5zcGxpY2UociwxKSxpLS0sci0tfWVsc2Ugby54PXN1KHBhcnNlRmxvYXQoZVswXSkscGFyc2VGbG9hdChvLngpKTtmb3IoO2k+cjspbz1sLnBvcCgpLG51bGw9PXNbby5pKzFdP3Nbby5pXT1vLng6KHNbby5pXT1vLngrc1tvLmkrMV0scy5zcGxpY2Uoby5pKzEsMSkpLGktLTtyZXR1cm4gMT09PXMubGVuZ3RoP251bGw9PXNbMF0/KG89bFswXS54LGZ1bmN0aW9uKG4pe3JldHVybiBvKG4pKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gdH06ZnVuY3Rpb24obil7Zm9yKHI9MDtpPnI7KytyKXNbKG89bFtyXSkuaV09by54KG4pO3JldHVybiBzLmpvaW4oIiIpfX1mdW5jdGlvbiBmdShuLHQpe2Zvcih2YXIgZSxyPVhvLmludGVycG9sYXRvcnMubGVuZ3RoOy0tcj49MCYmIShlPVhvLmludGVycG9sYXRvcnNbcl0obix0KSk7KTtyZXR1cm4gZX1mdW5jdGlvbiBodShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPW4ubGVuZ3RoLG89dC5sZW5ndGgsYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKGU9MDthPmU7KytlKXIucHVzaChmdShuW2VdLHRbZV0pKTtmb3IoO2k+ZTsrK2UpdVtlXT1uW2VdO2Zvcig7bz5lOysrZSl1W2VdPXRbZV07cmV0dXJuIGZ1bmN0aW9uKG4pe2ZvcihlPTA7YT5lOysrZSl1W2VdPXJbZV0obik7cmV0dXJuIHV9fWZ1bmN0aW9uIGd1KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMD49dD8wOnQ+PTE/MTpuKHQpfX1mdW5jdGlvbiBwdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtbigxLXQpfX1mdW5jdGlvbiB2dShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLjUqKC41PnQ/bigyKnQpOjItbigyLTIqdCkpfX1mdW5jdGlvbiBkdShuKXtyZXR1cm4gbipufWZ1bmN0aW9uIG11KG4pe3JldHVybiBuKm4qbn1mdW5jdGlvbiB5dShuKXtpZigwPj1uKXJldHVybiAwO2lmKG4+PTEpcmV0dXJuIDE7dmFyIHQ9bipuLGU9dCpuO3JldHVybiA0KiguNT5uP2U6Myoobi10KStlLS43NSl9ZnVuY3Rpb24geHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LG4pfX1mdW5jdGlvbiBNdShuKXtyZXR1cm4gMS1NYXRoLmNvcyhuKkVhKX1mdW5jdGlvbiBfdShuKXtyZXR1cm4gTWF0aC5wb3coMiwxMCoobi0xKSl9ZnVuY3Rpb24gYnUobil7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtbipuKX1mdW5jdGlvbiB3dShuLHQpe3ZhciBlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PS40NSksYXJndW1lbnRzLmxlbmd0aD9lPXQva2EqTWF0aC5hc2luKDEvbik6KG49MSxlPXQvNCksZnVuY3Rpb24ocil7cmV0dXJuIDErbipNYXRoLnBvdygyLC0xMCpyKSpNYXRoLnNpbigoci1lKSprYS90KX19ZnVuY3Rpb24gU3Uobil7cmV0dXJuIG58fChuPTEuNzAxNTgpLGZ1bmN0aW9uKHQpe3JldHVybiB0KnQqKChuKzEpKnQtbil9fWZ1bmN0aW9uIGt1KG4pe3JldHVybiAxLzIuNzU+bj83LjU2MjUqbipuOjIvMi43NT5uPzcuNTYyNSoobi09MS41LzIuNzUpKm4rLjc1OjIuNS8yLjc1Pm4/Ny41NjI1KihuLT0yLjI1LzIuNzUpKm4rLjkzNzU6Ny41NjI1KihuLT0yLjYyNS8yLjc1KSpuKy45ODQzNzV9ZnVuY3Rpb24gRXUobix0KXtuPVhvLmhjbChuKSx0PVhvLmhjbCh0KTt2YXIgZT1uLmgscj1uLmMsdT1uLmwsaT10LmgtZSxvPXQuYy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNOYU4ocik/dC5jOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4xODA/aS09MzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIHJ0KGUraSpuLHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24gQXUobix0KXtuPVhvLmhzbChuKSx0PVhvLmhzbCh0KTt2YXIgZT1uLmgscj1uLnMsdT1uLmwsaT10LmgtZSxvPXQucy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNOYU4ocik/dC5zOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4xODA/aS09MzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIG50KGUraSpuLHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24gQ3Uobix0KXtuPVhvLmxhYihuKSx0PVhvLmxhYih0KTt2YXIgZT1uLmwscj1uLmEsdT1uLmIsaT10LmwtZSxvPXQuYS1yLGE9dC5iLXU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBvdChlK2kqbixyK28qbix1K2EqbikrIiJ9fWZ1bmN0aW9uIE51KG4sdCl7cmV0dXJuIHQtPW4sZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQobit0KmUpfX1mdW5jdGlvbiBMdShuKXt2YXIgdD1bbi5hLG4uYl0sZT1bbi5jLG4uZF0scj1xdSh0KSx1PVR1KHQsZSksaT1xdSh6dShlLHQsLXUpKXx8MDt0WzBdKmVbMV08ZVswXSp0WzFdJiYodFswXSo9LTEsdFsxXSo9LTEscio9LTEsdSo9LTEpLHRoaXMucm90YXRlPShyP01hdGguYXRhbjIodFsxXSx0WzBdKTpNYXRoLmF0YW4yKC1lWzBdLGVbMV0pKSpMYSx0aGlzLnRyYW5zbGF0ZT1bbi5lLG4uZl0sdGhpcy5zY2FsZT1bcixpXSx0aGlzLnNrZXc9aT9NYXRoLmF0YW4yKHUsaSkqTGE6MH1mdW5jdGlvbiBUdShuLHQpe3JldHVybiBuWzBdKnRbMF0rblsxXSp0WzFdfWZ1bmN0aW9uIHF1KG4pe3ZhciB0PU1hdGguc3FydChUdShuLG4pKTtyZXR1cm4gdCYmKG5bMF0vPXQsblsxXS89dCksdH1mdW5jdGlvbiB6dShuLHQsZSl7cmV0dXJuIG5bMF0rPWUqdFswXSxuWzFdKz1lKnRbMV0sbn1mdW5jdGlvbiBSdShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPVhvLnRyYW5zZm9ybShuKSxvPVhvLnRyYW5zZm9ybSh0KSxhPWkudHJhbnNsYXRlLGM9by50cmFuc2xhdGUscz1pLnJvdGF0ZSxsPW8ucm90YXRlLGY9aS5za2V3LGg9by5za2V3LGc9aS5zY2FsZSxwPW8uc2NhbGU7cmV0dXJuIGFbMF0hPWNbMF18fGFbMV0hPWNbMV0/KHIucHVzaCgidHJhbnNsYXRlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUucHVzaCh7aToxLHg6c3UoYVswXSxjWzBdKX0se2k6Myx4OnN1KGFbMV0sY1sxXSl9KSk6Y1swXXx8Y1sxXT9yLnB1c2goInRyYW5zbGF0ZSgiK2MrIikiKTpyLnB1c2goIiIpLHMhPWw/KHMtbD4xODA/bCs9MzYwOmwtcz4xODAmJihzKz0zNjApLHUucHVzaCh7aTpyLnB1c2goci5wb3AoKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpzdShzLGwpfSkpOmwmJnIucHVzaChyLnBvcCgpKyJyb3RhdGUoIitsKyIpIiksZiE9aD91LnB1c2goe2k6ci5wdXNoKHIucG9wKCkrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpzdShmLGgpfSk6aCYmci5wdXNoKHIucG9wKCkrInNrZXdYKCIraCsiKSIpLGdbMF0hPXBbMF18fGdbMV0hPXBbMV0/KGU9ci5wdXNoKHIucG9wKCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUucHVzaCh7aTplLTQseDpzdShnWzBdLHBbMF0pfSx7aTplLTIseDpzdShnWzFdLHBbMV0pfSkpOigxIT1wWzBdfHwxIT1wWzFdKSYmci5wdXNoKHIucG9wKCkrInNjYWxlKCIrcCsiKSIpLGU9dS5sZW5ndGgsZnVuY3Rpb24obil7Zm9yKHZhciB0LGk9LTE7KytpPGU7KXJbKHQ9dVtpXSkuaV09dC54KG4pO3JldHVybiByLmpvaW4oIiIpfX1mdW5jdGlvbiBEdShuLHQpe3JldHVybiB0PXQtKG49K24pPzEvKHQtbik6MCxmdW5jdGlvbihlKXtyZXR1cm4oZS1uKSp0fX1mdW5jdGlvbiBQdShuLHQpe3JldHVybiB0PXQtKG49K24pPzEvKHQtbik6MCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChlLW4pKnQpKX19ZnVuY3Rpb24gVXUobil7Zm9yKHZhciB0PW4uc291cmNlLGU9bi50YXJnZXQscj1IdSh0LGUpLHU9W3RdO3QhPT1yOyl0PXQucGFyZW50LHUucHVzaCh0KTtmb3IodmFyIGk9dS5sZW5ndGg7ZSE9PXI7KXUuc3BsaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiB1fWZ1bmN0aW9uIGp1KG4pe2Zvcih2YXIgdD1bXSxlPW4ucGFyZW50O251bGwhPWU7KXQucHVzaChuKSxuPWUsZT1lLnBhcmVudDtyZXR1cm4gdC5wdXNoKG4pLHR9ZnVuY3Rpb24gSHUobix0KXtpZihuPT09dClyZXR1cm4gbjtmb3IodmFyIGU9anUobikscj1qdSh0KSx1PWUucG9wKCksaT1yLnBvcCgpLG89bnVsbDt1PT09aTspbz11LHU9ZS5wb3AoKSxpPXIucG9wKCk7cmV0dXJuIG99ZnVuY3Rpb24gRnUobil7bi5maXhlZHw9Mn1mdW5jdGlvbiBPdShuKXtuLmZpeGVkJj0tN31mdW5jdGlvbiBZdShuKXtuLmZpeGVkfD00LG4ucHg9bi54LG4ucHk9bi55fWZ1bmN0aW9uIEl1KG4pe24uZml4ZWQmPS01fWZ1bmN0aW9uIFp1KG4sdCxlKXt2YXIgcj0wLHU9MDtpZihuLmNoYXJnZT0wLCFuLmxlYWYpZm9yKHZhciBpLG89bi5ub2RlcyxhPW8ubGVuZ3RoLGM9LTE7KytjPGE7KWk9b1tjXSxudWxsIT1pJiYoWnUoaSx0LGUpLG4uY2hhcmdlKz1pLmNoYXJnZSxyKz1pLmNoYXJnZSppLmN4LHUrPWkuY2hhcmdlKmkuY3kpO2lmKG4ucG9pbnQpe24ubGVhZnx8KG4ucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSxuLnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciBzPXQqZVtuLnBvaW50LmluZGV4XTtuLmNoYXJnZSs9bi5wb2ludENoYXJnZT1zLHIrPXMqbi5wb2ludC54LHUrPXMqbi5wb2ludC55fW4uY3g9ci9uLmNoYXJnZSxuLmN5PXUvbi5jaGFyZ2V9ZnVuY3Rpb24gVnUobix0KXtyZXR1cm4gWG8ucmViaW5kKG4sdCwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSxuLm5vZGVzPW4sbi5saW5rcz1XdSxufWZ1bmN0aW9uIFh1KG4pe3JldHVybiBuLmNoaWxkcmVufWZ1bmN0aW9uICR1KG4pe3JldHVybiBuLnZhbHVlfWZ1bmN0aW9uIEJ1KG4sdCl7cmV0dXJuIHQudmFsdWUtbi52YWx1ZX1mdW5jdGlvbiBXdShuKXtyZXR1cm4gWG8ubWVyZ2Uobi5tYXAoZnVuY3Rpb24obil7cmV0dXJuKG4uY2hpbGRyZW58fFtdKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3NvdXJjZTpuLHRhcmdldDp0fX0pfSkpfWZ1bmN0aW9uIEp1KG4pe3JldHVybiBuLnh9ZnVuY3Rpb24gR3Uobil7cmV0dXJuIG4ueX1mdW5jdGlvbiBLdShuLHQsZSl7bi55MD10LG4ueT1lfWZ1bmN0aW9uIFF1KG4pe3JldHVybiBYby5yYW5nZShuLmxlbmd0aCl9ZnVuY3Rpb24gbmkobil7Zm9yKHZhciB0PS0xLGU9blswXS5sZW5ndGgscj1bXTsrK3Q8ZTspclt0XT0wO3JldHVybiByfWZ1bmN0aW9uIHRpKG4pe2Zvcih2YXIgdCxlPTEscj0wLHU9blswXVsxXSxpPW4ubGVuZ3RoO2k+ZTsrK2UpKHQ9bltlXVsxXSk+dSYmKHI9ZSx1PXQpO3JldHVybiByfWZ1bmN0aW9uIGVpKG4pe3JldHVybiBuLnJlZHVjZShyaSwwKX1mdW5jdGlvbiByaShuLHQpe3JldHVybiBuK3RbMV19ZnVuY3Rpb24gdWkobix0KXtyZXR1cm4gaWkobixNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKzEpKX1mdW5jdGlvbiBpaShuLHQpe2Zvcih2YXIgZT0tMSxyPStuWzBdLHU9KG5bMV0tcikvdCxpPVtdOysrZTw9dDspaVtlXT11KmUrcjtyZXR1cm4gaX1mdW5jdGlvbiBvaShuKXtyZXR1cm5bWG8ubWluKG4pLFhvLm1heChuKV19ZnVuY3Rpb24gYWkobix0KXtyZXR1cm4gbi5wYXJlbnQ9PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBjaShuKXt2YXIgdD1uLmNoaWxkcmVuO3JldHVybiB0JiZ0Lmxlbmd0aD90WzBdOm4uX3RyZWUudGhyZWFkfWZ1bmN0aW9uIHNpKG4pe3ZhciB0LGU9bi5jaGlsZHJlbjtyZXR1cm4gZSYmKHQ9ZS5sZW5ndGgpP2VbdC0xXTpuLl90cmVlLnRocmVhZH1mdW5jdGlvbiBsaShuLHQpe3ZhciBlPW4uY2hpbGRyZW47aWYoZSYmKHU9ZS5sZW5ndGgpKWZvcih2YXIgcix1LGk9LTE7KytpPHU7KXQocj1saShlW2ldLHQpLG4pPjAmJihuPXIpO3JldHVybiBufWZ1bmN0aW9uIGZpKG4sdCl7cmV0dXJuIG4ueC10Lnh9ZnVuY3Rpb24gaGkobix0KXtyZXR1cm4gdC54LW4ueH1mdW5jdGlvbiBnaShuLHQpe3JldHVybiBuLmRlcHRoLXQuZGVwdGh9ZnVuY3Rpb24gcGkobix0KXtmdW5jdGlvbiBlKG4scil7dmFyIHU9bi5jaGlsZHJlbjtpZih1JiYobz11Lmxlbmd0aCkpZm9yKHZhciBpLG8sYT1udWxsLGM9LTE7KytjPG87KWk9dVtjXSxlKGksYSksYT1pO3QobixyKX1lKG4sbnVsbCl9ZnVuY3Rpb24gdmkobil7Zm9yKHZhciB0LGU9MCxyPTAsdT1uLmNoaWxkcmVuLGk9dS5sZW5ndGg7LS1pPj0wOyl0PXVbaV0uX3RyZWUsdC5wcmVsaW0rPWUsdC5tb2QrPWUsZSs9dC5zaGlmdCsocis9dC5jaGFuZ2UpfWZ1bmN0aW9uIGRpKG4sdCxlKXtuPW4uX3RyZWUsdD10Ll90cmVlO3ZhciByPWUvKHQubnVtYmVyLW4ubnVtYmVyKTtuLmNoYW5nZSs9cix0LmNoYW5nZS09cix0LnNoaWZ0Kz1lLHQucHJlbGltKz1lLHQubW9kKz1lfWZ1bmN0aW9uIG1pKG4sdCxlKXtyZXR1cm4gbi5fdHJlZS5hbmNlc3Rvci5wYXJlbnQ9PXQucGFyZW50P24uX3RyZWUuYW5jZXN0b3I6ZX1mdW5jdGlvbiB5aShuLHQpe3JldHVybiBuLnZhbHVlLXQudmFsdWV9ZnVuY3Rpb24geGkobix0KXt2YXIgZT1uLl9wYWNrX25leHQ7bi5fcGFja19uZXh0PXQsdC5fcGFja19wcmV2PW4sdC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXR9ZnVuY3Rpb24gTWkobix0KXtuLl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9bn1mdW5jdGlvbiBfaShuLHQpe3ZhciBlPXQueC1uLngscj10Lnktbi55LHU9bi5yK3QucjtyZXR1cm4uOTk5KnUqdT5lKmUrcipyfWZ1bmN0aW9uIGJpKG4pe2Z1bmN0aW9uIHQobil7bD1NYXRoLm1pbihuLngtbi5yLGwpLGY9TWF0aC5tYXgobi54K24ucixmKSxoPU1hdGgubWluKG4ueS1uLnIsaCksZz1NYXRoLm1heChuLnkrbi5yLGcpfWlmKChlPW4uY2hpbGRyZW4pJiYocz1lLmxlbmd0aCkpe3ZhciBlLHIsdSxpLG8sYSxjLHMsbD0xLzAsZj0tMS8wLGg9MS8wLGc9LTEvMDtpZihlLmZvckVhY2god2kpLHI9ZVswXSxyLng9LXIucixyLnk9MCx0KHIpLHM+MSYmKHU9ZVsxXSx1Lng9dS5yLHUueT0wLHQodSkscz4yKSlmb3IoaT1lWzJdLEVpKHIsdSxpKSx0KGkpLHhpKHIsaSksci5fcGFja19wcmV2PWkseGkoaSx1KSx1PXIuX3BhY2tfbmV4dCxvPTM7cz5vO28rKyl7RWkocix1LGk9ZVtvXSk7dmFyIHA9MCx2PTEsZD0xO2ZvcihhPXUuX3BhY2tfbmV4dDthIT09dTthPWEuX3BhY2tfbmV4dCx2KyspaWYoX2koYSxpKSl7cD0xO2JyZWFrfWlmKDE9PXApZm9yKGM9ci5fcGFja19wcmV2O2MhPT1hLl9wYWNrX3ByZXYmJiFfaShjLGkpO2M9Yy5fcGFja19wcmV2LGQrKyk7cD8oZD52fHx2PT1kJiZ1LnI8ci5yP01pKHIsdT1hKTpNaShyPWMsdSksby0tKTooeGkocixpKSx1PWksdChpKSl9dmFyIG09KGwrZikvMix5PShoK2cpLzIseD0wO2ZvcihvPTA7cz5vO28rKylpPWVbb10saS54LT1tLGkueS09eSx4PU1hdGgubWF4KHgsaS5yK01hdGguc3FydChpLngqaS54K2kueSppLnkpKTtuLnI9eCxlLmZvckVhY2goU2kpfX1mdW5jdGlvbiB3aShuKXtuLl9wYWNrX25leHQ9bi5fcGFja19wcmV2PW59ZnVuY3Rpb24gU2kobil7ZGVsZXRlIG4uX3BhY2tfbmV4dCxkZWxldGUgbi5fcGFja19wcmV2fWZ1bmN0aW9uIGtpKG4sdCxlLHIpe3ZhciB1PW4uY2hpbGRyZW47aWYobi54PXQrPXIqbi54LG4ueT1lKz1yKm4ueSxuLnIqPXIsdSlmb3IodmFyIGk9LTEsbz11Lmxlbmd0aDsrK2k8bzspa2kodVtpXSx0LGUscil9ZnVuY3Rpb24gRWkobix0LGUpe3ZhciByPW4ucitlLnIsdT10Lngtbi54LGk9dC55LW4ueTtpZihyJiYodXx8aSkpe3ZhciBvPXQucitlLnIsYT11KnUraSppO28qPW8scio9cjt2YXIgYz0uNSsoci1vKS8oMiphKSxzPU1hdGguc3FydChNYXRoLm1heCgwLDIqbyoocithKS0oci09YSkqci1vKm8pKS8oMiphKTtlLng9bi54K2MqdStzKmksZS55PW4ueStjKmktcyp1fWVsc2UgZS54PW4ueCtyLGUueT1uLnl9ZnVuY3Rpb24gQWkobil7cmV0dXJuIDErWG8ubWF4KG4sZnVuY3Rpb24obil7cmV0dXJuIG4ueX0pfWZ1bmN0aW9uIENpKG4pe3JldHVybiBuLnJlZHVjZShmdW5jdGlvbihuLHQpe3JldHVybiBuK3QueH0sMCkvbi5sZW5ndGh9ZnVuY3Rpb24gTmkobil7dmFyIHQ9bi5jaGlsZHJlbjtyZXR1cm4gdCYmdC5sZW5ndGg/TmkodFswXSk6bn1mdW5jdGlvbiBMaShuKXt2YXIgdCxlPW4uY2hpbGRyZW47cmV0dXJuIGUmJih0PWUubGVuZ3RoKT9MaShlW3QtMV0pOm59ZnVuY3Rpb24gVGkobil7cmV0dXJue3g6bi54LHk6bi55LGR4Om4uZHgsZHk6bi5keX19ZnVuY3Rpb24gcWkobix0KXt2YXIgZT1uLngrdFszXSxyPW4ueSt0WzBdLHU9bi5keC10WzFdLXRbM10saT1uLmR5LXRbMF0tdFsyXTtyZXR1cm4gMD51JiYoZSs9dS8yLHU9MCksMD5pJiYocis9aS8yLGk9MCkse3g6ZSx5OnIsZHg6dSxkeTppfX1mdW5jdGlvbiB6aShuKXt2YXIgdD1uWzBdLGU9bltuLmxlbmd0aC0xXTtyZXR1cm4gZT50P1t0LGVdOltlLHRdfWZ1bmN0aW9uIFJpKG4pe3JldHVybiBuLnJhbmdlRXh0ZW50P24ucmFuZ2VFeHRlbnQoKTp6aShuLnJhbmdlKCkpfWZ1bmN0aW9uIERpKG4sdCxlLHIpe3ZhciB1PWUoblswXSxuWzFdKSxpPXIodFswXSx0WzFdKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGkodShuKSl9fWZ1bmN0aW9uIFBpKG4sdCl7dmFyIGUscj0wLHU9bi5sZW5ndGgtMSxpPW5bcl0sbz1uW3VdO3JldHVybiBpPm8mJihlPXIscj11LHU9ZSxlPWksaT1vLG89ZSksbltyXT10LmZsb29yKGkpLG5bdV09dC5jZWlsKG8pLG59ZnVuY3Rpb24gVWkobil7cmV0dXJuIG4/e2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmZsb29yKHQvbikqbn0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKHQvbikqbn19OmxzfWZ1bmN0aW9uIGppKG4sdCxlLHIpe3ZhciB1PVtdLGk9W10sbz0wLGE9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpLTE7Zm9yKG5bYV08blswXSYmKG49bi5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrbzw9YTspdS5wdXNoKGUobltvLTFdLG5bb10pKSxpLnB1c2gocih0W28tMV0sdFtvXSkpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1Yby5iaXNlY3Qobix0LDEsYSktMTtyZXR1cm4gaVtlXSh1W2VdKHQpKX19ZnVuY3Rpb24gSGkobix0LGUscil7ZnVuY3Rpb24gdSgpe3ZhciB1PU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP2ppOkRpLGM9cj9QdTpEdTtyZXR1cm4gbz11KG4sdCxjLGUpLGE9dSh0LG4sYyxmdSksaX1mdW5jdGlvbiBpKG4pe3JldHVybiBvKG4pfXZhciBvLGE7cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKG4pe3JldHVybiBhKG4pfSxpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10Lm1hcChOdW1iZXIpLHUoKSk6bn0saS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLHUoKSk6dH0saS5yYW5nZVJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBpLnJhbmdlKG4pLmludGVycG9sYXRlKE51KX0saS5jbGFtcD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHUoKSk6cn0saS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHUoKSk6ZX0saS50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gSWkobix0KX0saS50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFppKG4sdCxlKX0saS5uaWNlPWZ1bmN0aW9uKHQpe3JldHVybiBPaShuLHQpLHUoKX0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEhpKG4sdCxlLHIpfSx1KCl9ZnVuY3Rpb24gRmkobix0KXtyZXR1cm4gWG8ucmViaW5kKG4sdCwicmFuZ2UiLCJyYW5nZVJvdW5kIiwiaW50ZXJwb2xhdGUiLCJjbGFtcCIpfWZ1bmN0aW9uIE9pKG4sdCl7cmV0dXJuIFBpKG4sVWkoWWkobix0KVsyXSkpfWZ1bmN0aW9uIFlpKG4sdCl7bnVsbD09dCYmKHQ9MTApO3ZhciBlPXppKG4pLHI9ZVsxXS1lWzBdLHU9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhyL3QpL01hdGguTE4xMCkpLGk9dC9yKnU7cmV0dXJuLjE1Pj1pP3UqPTEwOi4zNT49aT91Kj01Oi43NT49aSYmKHUqPTIpLGVbMF09TWF0aC5jZWlsKGVbMF0vdSkqdSxlWzFdPU1hdGguZmxvb3IoZVsxXS91KSp1Ky41KnUsZVsyXT11LGV9ZnVuY3Rpb24gSWkobix0KXtyZXR1cm4gWG8ucmFuZ2UuYXBwbHkoWG8sWWkobix0KSl9ZnVuY3Rpb24gWmkobix0LGUpe3ZhciByPVlpKG4sdCk7cmV0dXJuIFhvLmZvcm1hdChlP2UucmVwbGFjZShRYSxmdW5jdGlvbihuLHQsZSx1LGksbyxhLGMscyxsKXtyZXR1cm5bdCxlLHUsaSxvLGEsYyxzfHwiLiIrWGkobCxyKSxsXS5qb2luKCIiKX0pOiIsLiIrVmkoclsyXSkrImYiKX1mdW5jdGlvbiBWaShuKXtyZXR1cm4tTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTArLjAxKX1mdW5jdGlvbiBYaShuLHQpe3ZhciBlPVZpKHRbMl0pO3JldHVybiBuIGluIGZzP01hdGguYWJzKGUtVmkoTWF0aC5tYXgoTWF0aC5hYnModFswXSksTWF0aC5hYnModFsxXSkpKSkrICsoImUiIT09bik6ZS0yKigiJSI9PT1uKX1mdW5jdGlvbiAkaShuLHQsZSxyKXtmdW5jdGlvbiB1KG4pe3JldHVybihlP01hdGgubG9nKDA+bj8wOm4pOi1NYXRoLmxvZyhuPjA/MDotbikpL01hdGgubG9nKHQpfWZ1bmN0aW9uIGkobil7cmV0dXJuIGU/TWF0aC5wb3codCxuKTotTWF0aC5wb3codCwtbil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbih1KHQpKX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10WzBdPj0wLG4uZG9tYWluKChyPXQubWFwKE51bWJlcikpLm1hcCh1KSksbyk6cn0sby5iYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLG4uZG9tYWluKHIubWFwKHUpKSxvKTp0fSxvLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1QaShyLm1hcCh1KSxlP01hdGg6Z3MpO3JldHVybiBuLmRvbWFpbih0KSxyPXQubWFwKGkpLG99LG8udGlja3M9ZnVuY3Rpb24oKXt2YXIgbj16aShyKSxvPVtdLGE9blswXSxjPW5bMV0scz1NYXRoLmZsb29yKHUoYSkpLGw9TWF0aC5jZWlsKHUoYykpLGY9dCUxPzI6dDtpZihpc0Zpbml0ZShsLXMpKXtpZihlKXtmb3IoO2w+cztzKyspZm9yKHZhciBoPTE7Zj5oO2grKylvLnB1c2goaShzKSpoKTtvLnB1c2goaShzKSl9ZWxzZSBmb3Ioby5wdXNoKGkocykpO3MrKzxsOylmb3IodmFyIGg9Zi0xO2g+MDtoLS0pby5wdXNoKGkocykqaCk7Zm9yKHM9MDtvW3NdPGE7cysrKTtmb3IobD1vLmxlbmd0aDtvW2wtMV0+YztsLS0pO289by5zbGljZShzLGwpfXJldHVybiBvfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gaHM7YXJndW1lbnRzLmxlbmd0aDwyP3Q9aHM6ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVhvLmZvcm1hdCh0KSk7dmFyIHIsYT1NYXRoLm1heCguMSxuL28udGlja3MoKS5sZW5ndGgpLGM9ZT8ocj0xZS0xMixNYXRoLmNlaWwpOihyPS0xZS0xMixNYXRoLmZsb29yKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4vaShjKHUobikrcikpPD1hP3Qobik6IiJ9fSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJGkobi5jb3B5KCksdCxlLHIpfSxGaShvLG4pfWZ1bmN0aW9uIEJpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuKHUodCkpfXZhciB1PVdpKHQpLGk9V2koMS90KTtyZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxyLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi5kb21haW4oKGU9dC5tYXAoTnVtYmVyKSkubWFwKHUpKSxyKTplfSxyLnRpY2tzPWZ1bmN0aW9uKG4pe3JldHVybiBJaShlLG4pfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gWmkoZSxuLHQpfSxyLm5pY2U9ZnVuY3Rpb24obil7cmV0dXJuIHIuZG9tYWluKE9pKGUsbikpfSxyLmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PVdpKHQ9byksaT1XaSgxL3QpLG4uZG9tYWluKGUubWFwKHUpKSxyKTp0fSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQmkobi5jb3B5KCksdCxlKX0sRmkocixuKX1mdW5jdGlvbiBXaShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDA+dD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX19ZnVuY3Rpb24gSmkobix0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBvWygoaS5nZXQoZSl8fCJyYW5nZSI9PT10LnQmJmkuc2V0KGUsbi5wdXNoKGUpKSktMSklby5sZW5ndGhdfWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gWG8ucmFuZ2Uobi5sZW5ndGgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdCtlKm59KX12YXIgaSxvLGE7cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKHIpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuO249W10saT1uZXcgdTtmb3IodmFyIG8sYT0tMSxjPXIubGVuZ3RoOysrYTxjOylpLmhhcyhvPXJbYV0pfHxpLnNldChvLG4ucHVzaChvKSk7cmV0dXJuIGVbdC50XS5hcHBseShlLHQuYSl9LGUucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bixhPTAsdD17dDoicmFuZ2UiLGE6YXJndW1lbnRzfSxlKTpvfSxlLnJhbmdlUG9pbnRzPWZ1bmN0aW9uKHUsaSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoaT0wKTt2YXIgYz11WzBdLHM9dVsxXSxsPShzLWMpLyhNYXRoLm1heCgxLG4ubGVuZ3RoLTEpK2kpO3JldHVybiBvPXIobi5sZW5ndGg8Mj8oYytzKS8yOmMrbCppLzIsbCksYT0wLHQ9e3Q6InJhbmdlUG9pbnRzIixhOmFyZ3VtZW50c30sZX0sZS5yYW5nZUJhbmRzPWZ1bmN0aW9uKHUsaSxjKXthcmd1bWVudHMubGVuZ3RoPDImJihpPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGM9aSk7dmFyIHM9dVsxXTx1WzBdLGw9dVtzLTBdLGY9dVsxLXNdLGg9KGYtbCkvKG4ubGVuZ3RoLWkrMipjKTtyZXR1cm4gbz1yKGwraCpjLGgpLHMmJm8ucmV2ZXJzZSgpLGE9aCooMS1pKSx0PXt0OiJyYW5nZUJhbmRzIixhOmFyZ3VtZW50c30sZX0sZS5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24odSxpLGMpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGk9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoYz1pKTt2YXIgcz11WzFdPHVbMF0sbD11W3MtMF0sZj11WzEtc10saD1NYXRoLmZsb29yKChmLWwpLyhuLmxlbmd0aC1pKzIqYykpLGc9Zi1sLShuLmxlbmd0aC1pKSpoO3JldHVybiBvPXIobCtNYXRoLnJvdW5kKGcvMiksaCkscyYmby5yZXZlcnNlKCksYT1NYXRoLnJvdW5kKGgqKDEtaSkpLHQ9e3Q6InJhbmdlUm91bmRCYW5kcyIsYTphcmd1bWVudHN9LGV9LGUucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGUucmFuZ2VFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gemkodC5hWzBdKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEppKG4sdCl9LGUuZG9tYWluKG4pfWZ1bmN0aW9uIEdpKG4sdCl7ZnVuY3Rpb24gZSgpe3ZhciBlPTAsaT10Lmxlbmd0aDtmb3IodT1bXTsrK2U8aTspdVtlLTFdPVhvLnF1YW50aWxlKG4sZS9pKTtyZXR1cm4gcn1mdW5jdGlvbiByKG4pe3JldHVybiBpc05hTihuPStuKT92b2lkIDA6dFtYby5iaXNlY3QodSxuKV19dmFyIHU7cmV0dXJuIHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiFpc05hTihuKX0pLnNvcnQoWG8uYXNjZW5kaW5nKSxlKCkpOm59LHIucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixlKCkpOnR9LHIucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHV9LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlPXQuaW5kZXhPZihlKSwwPmU/WzAvMCwwLzBdOltlPjA/dVtlLTFdOm5bMF0sZTx1Lmxlbmd0aD91W2VdOm5bbi5sZW5ndGgtMV1dfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gR2kobix0KX0sZSgpfWZ1bmN0aW9uIEtpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4obyxNYXRoLmZsb29yKGkqKHQtbikpKSldfWZ1bmN0aW9uIHUoKXtyZXR1cm4gaT1lLmxlbmd0aC8odC1uKSxvPWUubGVuZ3RoLTEscn12YXIgaSxvO3JldHVybiByLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZVswXSx0PStlW2UubGVuZ3RoLTFdLHUoKSk6W24sdF19LHIucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix1KCkpOmV9LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0PWUuaW5kZXhPZih0KSx0PTA+dD8wLzA6dC9pK24sW3QsdCsxL2ldfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS2kobix0LGUpfSx1KCl9ZnVuY3Rpb24gUWkobix0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPj1lP3RbWG8uYmlzZWN0KG4sZSldOnZvaWQgMH1yZXR1cm4gZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlKTpufSxlLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sZSk6dH0sZS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dC5pbmRleE9mKGUpLFtuW2UtMV0sbltlXV19LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBRaShuLHQpfSxlfWZ1bmN0aW9uIG5vKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuK259cmV0dXJuIHQuaW52ZXJ0PXQsdC5kb21haW49dC5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLm1hcCh0KSx0KTpufSx0LnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBJaShuLHQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gWmkobix0LGUpfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbm8obil9LHR9ZnVuY3Rpb24gdG8obil7cmV0dXJuIG4uaW5uZXJSYWRpdXN9ZnVuY3Rpb24gZW8obil7cmV0dXJuIG4ub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gcm8obil7cmV0dXJuIG4uc3RhcnRBbmdsZX1mdW5jdGlvbiB1byhuKXtyZXR1cm4gbi5lbmRBbmdsZX1mdW5jdGlvbiBpbyhuKXtmdW5jdGlvbiB0KHQpe2Z1bmN0aW9uIG8oKXtzLnB1c2goIk0iLGkobihsKSxhKSl9Zm9yKHZhciBjLHM9W10sbD1bXSxmPS0xLGg9dC5sZW5ndGgsZz1fdChlKSxwPV90KHIpOysrZjxoOyl1LmNhbGwodGhpcyxjPXRbZl0sZik/bC5wdXNoKFsrZy5jYWxsKHRoaXMsYyxmKSwrcC5jYWxsKHRoaXMsYyxmKV0pOmwubGVuZ3RoJiYobygpLGw9W10pO3JldHVybiBsLmxlbmd0aCYmbygpLHMubGVuZ3RoP3Muam9pbigiIik6bnVsbH12YXIgZT1icixyPXdyLHU9YmUsaT1vbyxvPWkua2V5LGE9Ljc7cmV0dXJuIHQueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9LHQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/aT1uOihpPU1zLmdldChuKXx8b28pLmtleSx0KTpvfSx0LnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bix0KTphfSx0fWZ1bmN0aW9uIG9vKG4pe3JldHVybiBuLmpvaW4oIkwiKX1mdW5jdGlvbiBhbyhuKXtyZXR1cm4gb28obikrIloifWZ1bmN0aW9uIGNvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1LnB1c2goIkgiLChyWzBdKyhyPW5bdF0pWzBdKS8yLCJWIixyWzFdKTtyZXR1cm4gZT4xJiZ1LnB1c2goIkgiLHJbMF0pLHUuam9pbigiIil9ZnVuY3Rpb24gc28obil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aCxyPW5bMF0sdT1bclswXSwiLCIsclsxXV07Kyt0PGU7KXUucHVzaCgiViIsKHI9blt0XSlbMV0sIkgiLHJbMF0pO3JldHVybiB1LmpvaW4oIiIpfWZ1bmN0aW9uIGxvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1LnB1c2goIkgiLChyPW5bdF0pWzBdLCJWIixyWzFdKTtyZXR1cm4gdS5qb2luKCIiKX1mdW5jdGlvbiBmbyhuLHQpe3JldHVybiBuLmxlbmd0aDw0P29vKG4pOm5bMV0rcG8obi5zbGljZSgxLG4ubGVuZ3RoLTEpLHZvKG4sdCkpfWZ1bmN0aW9uIGhvKG4sdCl7cmV0dXJuIG4ubGVuZ3RoPDM/b28obik6blswXStwbygobi5wdXNoKG5bMF0pLG4pLHZvKFtuW24ubGVuZ3RoLTJdXS5jb25jYXQobixbblsxXV0pLHQpKX1mdW5jdGlvbiBnbyhuLHQpe3JldHVybiBuLmxlbmd0aDwzP29vKG4pOm5bMF0rcG8obix2byhuLHQpKX1mdW5jdGlvbiBwbyhuLHQpe2lmKHQubGVuZ3RoPDF8fG4ubGVuZ3RoIT10Lmxlbmd0aCYmbi5sZW5ndGghPXQubGVuZ3RoKzIpcmV0dXJuIG9vKG4pO3ZhciBlPW4ubGVuZ3RoIT10Lmxlbmd0aCxyPSIiLHU9blswXSxpPW5bMV0sbz10WzBdLGE9byxjPTE7aWYoZSYmKHIrPSJRIisoaVswXS0yKm9bMF0vMykrIiwiKyhpWzFdLTIqb1sxXS8zKSsiLCIraVswXSsiLCIraVsxXSx1PW5bMV0sYz0yKSx0Lmxlbmd0aD4xKXthPXRbMV0saT1uW2NdLGMrKyxyKz0iQyIrKHVbMF0rb1swXSkrIiwiKyh1WzFdK29bMV0pKyIsIisoaVswXS1hWzBdKSsiLCIrKGlbMV0tYVsxXSkrIiwiK2lbMF0rIiwiK2lbMV07Zm9yKHZhciBzPTI7czx0Lmxlbmd0aDtzKyssYysrKWk9bltjXSxhPXRbc10scis9IlMiKyhpWzBdLWFbMF0pKyIsIisoaVsxXS1hWzFdKSsiLCIraVswXSsiLCIraVsxXX1pZihlKXt2YXIgbD1uW2NdO3IrPSJRIisoaVswXSsyKmFbMF0vMykrIiwiKyhpWzFdKzIqYVsxXS8zKSsiLCIrbFswXSsiLCIrbFsxXX1yZXR1cm4gcn1mdW5jdGlvbiB2byhuLHQpe2Zvcih2YXIgZSxyPVtdLHU9KDEtdCkvMixpPW5bMF0sbz1uWzFdLGE9MSxjPW4ubGVuZ3RoOysrYTxjOyllPWksaT1vLG89blthXSxyLnB1c2goW3UqKG9bMF0tZVswXSksdSoob1sxXS1lWzFdKV0pO3JldHVybiByfWZ1bmN0aW9uIG1vKG4pe2lmKG4ubGVuZ3RoPDMpcmV0dXJuIG9vKG4pO3ZhciB0PTEsZT1uLmxlbmd0aCxyPW5bMF0sdT1yWzBdLGk9clsxXSxvPVt1LHUsdSwocj1uWzFdKVswXV0sYT1baSxpLGksclsxXV0sYz1bdSwiLCIsaSwiTCIsX28od3MsbyksIiwiLF9vKHdzLGEpXTtmb3Iobi5wdXNoKG5bZS0xXSk7Kyt0PD1lOylyPW5bdF0sby5zaGlmdCgpLG8ucHVzaChyWzBdKSxhLnNoaWZ0KCksYS5wdXNoKHJbMV0pLGJvKGMsbyxhKTtyZXR1cm4gbi5wb3AoKSxjLnB1c2goIkwiLHIpLGMuam9pbigiIil9ZnVuY3Rpb24geW8obil7aWYobi5sZW5ndGg8NClyZXR1cm4gb28obik7Zm9yKHZhciB0LGU9W10scj0tMSx1PW4ubGVuZ3RoLGk9WzBdLG89WzBdOysrcjwzOyl0PW5bcl0saS5wdXNoKHRbMF0pLG8ucHVzaCh0WzFdKTtmb3IoZS5wdXNoKF9vKHdzLGkpKyIsIitfbyh3cyxvKSksLS1yOysrcjx1Oyl0PW5bcl0saS5zaGlmdCgpLGkucHVzaCh0WzBdKSxvLnNoaWZ0KCksby5wdXNoKHRbMV0pLGJvKGUsaSxvKTtyZXR1cm4gZS5qb2luKCIiKX1mdW5jdGlvbiB4byhuKXtmb3IodmFyIHQsZSxyPS0xLHU9bi5sZW5ndGgsaT11KzQsbz1bXSxhPVtdOysrcjw0OyllPW5bciV1XSxvLnB1c2goZVswXSksYS5wdXNoKGVbMV0pO2Zvcih0PVtfbyh3cyxvKSwiLCIsX28od3MsYSldLC0tcjsrK3I8aTspZT1uW3IldV0sby5zaGlmdCgpLG8ucHVzaChlWzBdKSxhLnNoaWZ0KCksYS5wdXNoKGVbMV0pLGJvKHQsbyxhKTtyZXR1cm4gdC5qb2luKCIiKX1mdW5jdGlvbiBNbyhuLHQpe3ZhciBlPW4ubGVuZ3RoLTE7aWYoZSlmb3IodmFyIHIsdSxpPW5bMF1bMF0sbz1uWzBdWzFdLGE9bltlXVswXS1pLGM9bltlXVsxXS1vLHM9LTE7KytzPD1lOylyPW5bc10sdT1zL2UsclswXT10KnJbMF0rKDEtdCkqKGkrdSphKSxyWzFdPXQqclsxXSsoMS10KSoobyt1KmMpO3JldHVybiBtbyhuKX1mdW5jdGlvbiBfbyhuLHQpe3JldHVybiBuWzBdKnRbMF0rblsxXSp0WzFdK25bMl0qdFsyXStuWzNdKnRbM119ZnVuY3Rpb24gYm8obix0LGUpe24ucHVzaCgiQyIsX28oX3MsdCksIiwiLF9vKF9zLGUpLCIsIixfbyhicyx0KSwiLCIsX28oYnMsZSksIiwiLF9vKHdzLHQpLCIsIixfbyh3cyxlKSl9ZnVuY3Rpb24gd28obix0KXtyZXR1cm4odFsxXS1uWzFdKS8odFswXS1uWzBdKX1mdW5jdGlvbiBTbyhuKXtmb3IodmFyIHQ9MCxlPW4ubGVuZ3RoLTEscj1bXSx1PW5bMF0saT1uWzFdLG89clswXT13byh1LGkpOysrdDxlOylyW3RdPShvKyhvPXdvKHU9aSxpPW5bdCsxXSkpKS8yO3JldHVybiByW3RdPW8scn1mdW5jdGlvbiBrbyhuKXtmb3IodmFyIHQsZSxyLHUsaT1bXSxvPVNvKG4pLGE9LTEsYz1uLmxlbmd0aC0xOysrYTxjOyl0PXdvKG5bYV0sblthKzFdKSxvYSh0KTxBYT9vW2FdPW9bYSsxXT0wOihlPW9bYV0vdCxyPW9bYSsxXS90LHU9ZSplK3Iqcix1PjkmJih1PTMqdC9NYXRoLnNxcnQodSksb1thXT11KmUsb1thKzFdPXUqcikpO2ZvcihhPS0xOysrYTw9YzspdT0obltNYXRoLm1pbihjLGErMSldWzBdLW5bTWF0aC5tYXgoMCxhLTEpXVswXSkvKDYqKDErb1thXSpvW2FdKSksaS5wdXNoKFt1fHwwLG9bYV0qdXx8MF0pO3JldHVybiBpfWZ1bmN0aW9uIEVvKG4pe3JldHVybiBuLmxlbmd0aDwzP29vKG4pOm5bMF0rcG8obixrbyhuKSl9ZnVuY3Rpb24gQW8obil7Zm9yKHZhciB0LGUscix1PS0xLGk9bi5sZW5ndGg7Kyt1PGk7KXQ9blt1XSxlPXRbMF0scj10WzFdK3lzLHRbMF09ZSpNYXRoLmNvcyhyKSx0WzFdPWUqTWF0aC5zaW4ocik7cmV0dXJuIG59ZnVuY3Rpb24gQ28obil7ZnVuY3Rpb24gdCh0KXtmdW5jdGlvbiBjKCl7di5wdXNoKCJNIixhKG4obSksZiksbCxzKG4oZC5yZXZlcnNlKCkpLGYpLCJaIil9Zm9yKHZhciBoLGcscCx2PVtdLGQ9W10sbT1bXSx5PS0xLHg9dC5sZW5ndGgsTT1fdChlKSxfPV90KHUpLGI9ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gZ306X3Qociksdz11PT09aT9mdW5jdGlvbigpe3JldHVybiBwfTpfdChpKTsrK3k8eDspby5jYWxsKHRoaXMsaD10W3ldLHkpPyhkLnB1c2goW2c9K00uY2FsbCh0aGlzLGgseSkscD0rXy5jYWxsKHRoaXMsaCx5KV0pLG0ucHVzaChbK2IuY2FsbCh0aGlzLGgseSksK3cuY2FsbCh0aGlzLGgseSldKSk6ZC5sZW5ndGgmJihjKCksZD1bXSxtPVtdKTtyZXR1cm4gZC5sZW5ndGgmJmMoKSx2Lmxlbmd0aD92LmpvaW4oIiIpOm51bGx9dmFyIGU9YnIscj1icix1PTAsaT13cixvPWJlLGE9b28sYz1hLmtleSxzPWEsbD0iTCIsZj0uNztyZXR1cm4gdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXI9bix0KTpyfSx0LngwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC54MT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1pPW4sdCk6aX0sdC55MD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9LHQueTE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bix0KTppfSx0LmRlZmluZWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bix0KTpvfSx0LmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiBuP2E9bjooYT1Ncy5nZXQobil8fG9vKS5rZXkscz1hLnJldmVyc2V8fGEsbD1hLmNsb3NlZD8iTSI6IkwiLHQpOmN9LHQudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1uLHQpOmZ9LHR9ZnVuY3Rpb24gTm8obil7cmV0dXJuIG4ucmFkaXVzfWZ1bmN0aW9uIExvKG4pe3JldHVybltuLngsbi55XX1mdW5jdGlvbiBUbyhuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlPXRbMF0scj10WzFdK3lzO3JldHVybltlKk1hdGguY29zKHIpLGUqTWF0aC5zaW4ocildfX1mdW5jdGlvbiBxbygpe3JldHVybiA2NH1mdW5jdGlvbiB6bygpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9uIFJvKG4pe3ZhciB0PU1hdGguc3FydChuL1NhKTtyZXR1cm4iTTAsIit0KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiK3QrIloifWZ1bmN0aW9uIERvKG4sdCl7cmV0dXJuIGZhKG4sTnMpLG4uaWQ9dCxufWZ1bmN0aW9uIFBvKG4sdCxlLHIpe3ZhciB1PW4uaWQ7cmV0dXJuIFIobiwiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbihuLGksbyl7bi5fX3RyYW5zaXRpb25fX1t1XS50d2Vlbi5zZXQodCxyKGUuY2FsbChuLG4uX19kYXRhX18saSxvKSkpfTooZT1yKGUpLGZ1bmN0aW9uKG4pe24uX190cmFuc2l0aW9uX19bdV0udHdlZW4uc2V0KHQsZSl9KSl9ZnVuY3Rpb24gVW8obil7cmV0dXJuIG51bGw9PW4mJihuPSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gam8obix0LGUscil7dmFyIGk9bi5fX3RyYW5zaXRpb25fX3x8KG4uX190cmFuc2l0aW9uX189e2FjdGl2ZTowLGNvdW50OjB9KSxvPWlbZV07aWYoIW8pe3ZhciBhPXIudGltZTtvPWlbZV09e3R3ZWVuOm5ldyB1LHRpbWU6YSxlYXNlOnIuZWFzZSxkZWxheTpyLmRlbGF5LGR1cmF0aW9uOnIuZHVyYXRpb259LCsraS5jb3VudCxYby50aW1lcihmdW5jdGlvbihyKXtmdW5jdGlvbiB1KHIpe3JldHVybiBpLmFjdGl2ZT5lP3MoKTooaS5hY3RpdmU9ZSxvLmV2ZW50JiZvLmV2ZW50LnN0YXJ0LmNhbGwobixsLHQpLG8udHdlZW4uZm9yRWFjaChmdW5jdGlvbihlLHIpeyhyPXIuY2FsbChuLGwsdCkpJiZ2LnB1c2gocil9KSxYby50aW1lcihmdW5jdGlvbigpe3JldHVybiBwLmM9YyhyfHwxKT9iZTpjLDF9LDAsYSksdm9pZCAwKX1mdW5jdGlvbiBjKHIpe2lmKGkuYWN0aXZlIT09ZSlyZXR1cm4gcygpO2Zvcih2YXIgdT1yL2csYT1mKHUpLGM9di5sZW5ndGg7Yz4wOyl2Wy0tY10uY2FsbChuLGEpO3JldHVybiB1Pj0xPyhvLmV2ZW50JiZvLmV2ZW50LmVuZC5jYWxsKG4sbCx0KSxzKCkpOnZvaWQgMH1mdW5jdGlvbiBzKCl7cmV0dXJuLS1pLmNvdW50P2RlbGV0ZSBpW2VdOmRlbGV0ZSBuLl9fdHJhbnNpdGlvbl9fLDF9dmFyIGw9bi5fX2RhdGFfXyxmPW8uZWFzZSxoPW8uZGVsYXksZz1vLmR1cmF0aW9uLHA9SmEsdj1bXTtyZXR1cm4gcC50PWgrYSxyPj1oP3Uoci1oKToocC5jPXUsdm9pZCAwKX0sMCxhKX19ZnVuY3Rpb24gSG8obix0KXtuLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24obil7cmV0dXJuInRyYW5zbGF0ZSgiK3QobikrIiwwKSJ9KX1mdW5jdGlvbiBGbyhuLHQpe24uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXtyZXR1cm4idHJhbnNsYXRlKDAsIit0KG4pKyIpIn0pfWZ1bmN0aW9uIE9vKG4pe3JldHVybiBuLnRvSVNPU3RyaW5nKCl9ZnVuY3Rpb24gWW8obix0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG4odCl9ZnVuY3Rpb24gdShuLGUpe3ZhciByPW5bMV0tblswXSx1PXIvZSxpPVhvLmJpc2VjdChqcyx1KTtyZXR1cm4gaT09anMubGVuZ3RoP1t0LnllYXIsWWkobi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4vMzE1MzZlNn0pLGUpWzJdXTppP3RbdS9qc1tpLTFdPGpzW2ldL3U/aS0xOmldOltPcyxZaShuLGUpWzJdXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIElvKG4uaW52ZXJ0KHQpKX0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4uZG9tYWluKHQpLHIpOm4uZG9tYWluKCkubWFwKElvKX0sci5uaWNlPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4haXNOYU4oZSkmJiFuLnJhbmdlKGUsSW8oK2UrMSksdCkubGVuZ3RofXZhciBpPXIuZG9tYWluKCksbz16aShpKSxhPW51bGw9PW4/dShvLDEwKToibnVtYmVyIj09dHlwZW9mIG4mJnUobyxuKTtyZXR1cm4gYSYmKG49YVswXSx0PWFbMV0pLHIuZG9tYWluKFBpKGksdD4xP3tmbG9vcjpmdW5jdGlvbih0KXtmb3IoO2UodD1uLmZsb29yKHQpKTspdD1Jbyh0LTEpO3JldHVybiB0fSxjZWlsOmZ1bmN0aW9uKHQpe2Zvcig7ZSh0PW4uY2VpbCh0KSk7KXQ9SW8oK3QrMSk7cmV0dXJuIHR9fTpuKSl9LHIudGlja3M9ZnVuY3Rpb24obix0KXt2YXIgZT16aShyLmRvbWFpbigpKSxpPW51bGw9PW4/dShlLDEwKToibnVtYmVyIj09dHlwZW9mIG4/dShlLG4pOiFuLnJhbmdlJiZbe3JhbmdlOm59LHRdO3JldHVybiBpJiYobj1pWzBdLHQ9aVsxXSksbi5yYW5nZShlWzBdLElvKCtlWzFdKzEpLDE+dD8xOnQpfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFlvKG4uY29weSgpLHQsZSl9LEZpKHIsbil9ZnVuY3Rpb24gSW8obil7cmV0dXJuIG5ldyBEYXRlKG4pfWZ1bmN0aW9uIFpvKG4pe3JldHVybiBKU09OLnBhcnNlKG4ucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBWbyhuKXt2YXIgdD1Xby5jcmVhdGVSYW5nZSgpO3JldHVybiB0LnNlbGVjdE5vZGUoV28uYm9keSksdC5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobi5yZXNwb25zZVRleHQpfXZhciBYbz17dmVyc2lvbjoiMy40LjMifTtEYXRlLm5vd3x8KERhdGUubm93PWZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSk7dmFyICRvPVtdLnNsaWNlLEJvPWZ1bmN0aW9uKG4pe3JldHVybiAkby5jYWxsKG4pfSxXbz1kb2N1bWVudCxKbz1Xby5kb2N1bWVudEVsZW1lbnQsR289d2luZG93O3RyeXtCbyhKby5jaGlsZE5vZGVzKVswXS5ub2RlVHlwZX1jYXRjaChLbyl7Qm89ZnVuY3Rpb24obil7Zm9yKHZhciB0PW4ubGVuZ3RoLGU9bmV3IEFycmF5KHQpO3QtLTspZVt0XT1uW3RdO3JldHVybiBlfX10cnl7V28uY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUuc2V0UHJvcGVydHkoIm9wYWNpdHkiLDAsIiIpfWNhdGNoKFFvKXt2YXIgbmE9R28uRWxlbWVudC5wcm90b3R5cGUsdGE9bmEuc2V0QXR0cmlidXRlLGVhPW5hLnNldEF0dHJpYnV0ZU5TLHJhPUdvLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLHVhPXJhLnNldFByb3BlcnR5O25hLnNldEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3RhLmNhbGwodGhpcyxuLHQrIiIpfSxuYS5zZXRBdHRyaWJ1dGVOUz1mdW5jdGlvbihuLHQsZSl7ZWEuY2FsbCh0aGlzLG4sdCxlKyIiKX0scmEuc2V0UHJvcGVydHk9ZnVuY3Rpb24obix0LGUpe3VhLmNhbGwodGhpcyxuLHQrIiIsZSl9fVhvLmFzY2VuZGluZz1mdW5jdGlvbihuLHQpe3JldHVybiB0Pm4/LTE6bj50PzE6bj49dD8wOjAvMH0sWG8uZGVzY2VuZGluZz1mdW5jdGlvbihuLHQpe3JldHVybiBuPnQ/LTE6dD5uPzE6dD49bj8wOjAvMH0sWG8ubWluPWZ1bmN0aW9uKG4sdCl7dmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9blt1XSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmZT5yJiYoZT1yKX1lbHNle2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4sblt1XSx1KSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3VdLHUpKSYmZT5yJiYoZT1yKX1yZXR1cm4gZX0sWG8ubWF4PWZ1bmN0aW9uKG4sdCl7dmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9blt1XSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmcj5lJiYoZT1yKX1lbHNle2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4sblt1XSx1KSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3VdLHUpKSYmcj5lJiYoZT1yKX1yZXR1cm4gZX0sWG8uZXh0ZW50PWZ1bmN0aW9uKG4sdCl7dmFyIGUscix1LGk9LTEsbz1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8byYmIShudWxsIT0oZT11PW5baV0pJiZlPj1lKTspZT11PXZvaWQgMDtmb3IoOysraTxvOyludWxsIT0ocj1uW2ldKSYmKGU+ciYmKGU9cikscj51JiYodT1yKSl9ZWxzZXtmb3IoOysraTxvJiYhKG51bGwhPShlPXU9dC5jYWxsKG4sbltpXSxpKSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysraTxvOyludWxsIT0ocj10LmNhbGwobixuW2ldLGkpKSYmKGU+ciYmKGU9cikscj51JiYodT1yKSl9cmV0dXJuW2UsdV19LFhvLnN1bT1mdW5jdGlvbihuLHQpe3ZhciBlLHI9MCx1PW4ubGVuZ3RoLGk9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2k8dTspaXNOYU4oZT0rbltpXSl8fChyKz1lKTtlbHNlIGZvcig7KytpPHU7KWlzTmFOKGU9K3QuY2FsbChuLG5baV0saSkpfHwocis9ZSk7cmV0dXJuIHJ9LFhvLm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcix1PXQubGVuZ3RoLGk9MCxvPS0xLGE9MDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbzx1OyluKHI9dFtvXSkmJihpKz0oci1pKS8rK2EpO2Vsc2UgZm9yKDsrK288dTspbihyPWUuY2FsbCh0LHRbb10sbykpJiYoaSs9KHItaSkvKythKTtyZXR1cm4gYT9pOnZvaWQgMH0sWG8ucXVhbnRpbGU9ZnVuY3Rpb24obix0KXt2YXIgZT0obi5sZW5ndGgtMSkqdCsxLHI9TWF0aC5mbG9vcihlKSx1PStuW3ItMV0saT1lLXI7cmV0dXJuIGk/dStpKihuW3JdLXUpOnV9LFhvLm1lZGlhbj1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJih0PXQubWFwKGUpKSx0PXQuZmlsdGVyKG4pLHQubGVuZ3RoP1hvLnF1YW50aWxlKHQuc29ydChYby5hc2NlbmRpbmcpLC41KTp2b2lkIDB9LFhvLmJpc2VjdG9yPWZ1bmN0aW9uKG4pe3JldHVybntsZWZ0OmZ1bmN0aW9uKHQsZSxyLHUpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKHU9dC5sZW5ndGgpO3U+cjspe3ZhciBpPXIrdT4+PjE7bi5jYWxsKHQsdFtpXSxpKTxlP3I9aSsxOnU9aX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24odCxlLHIsdSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MCksYXJndW1lbnRzLmxlbmd0aDw0JiYodT10Lmxlbmd0aCk7dT5yOyl7dmFyIGk9cit1Pj4+MTtlPG4uY2FsbCh0LHRbaV0saSk/dT1pOnI9aSsxfXJldHVybiByfX19O3ZhciBpYT1Yby5iaXNlY3RvcihmdW5jdGlvbihuKXtyZXR1cm4gbn0pO1hvLmJpc2VjdExlZnQ9aWEubGVmdCxYby5iaXNlY3Q9WG8uYmlzZWN0UmlnaHQ9aWEucmlnaHQsWG8uc2h1ZmZsZT1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyPW4ubGVuZ3RoO3I7KWU9MHxNYXRoLnJhbmRvbSgpKnItLSx0PW5bcl0sbltyXT1uW2VdLG5bZV09dDtyZXR1cm4gbn0sWG8ucGVybXV0ZT1mdW5jdGlvbihuLHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKTtlLS07KXJbZV09blt0W2VdXTtyZXR1cm4gcn0sWG8ucGFpcnM9ZnVuY3Rpb24obil7Zm9yKHZhciB0LGU9MCxyPW4ubGVuZ3RoLTEsdT1uWzBdLGk9bmV3IEFycmF5KDA+cj8wOnIpO3I+ZTspaVtlXT1bdD11LHU9blsrK2VdXTtyZXR1cm4gaX0sWG8uemlwPWZ1bmN0aW9uKCl7aWYoISh1PWFyZ3VtZW50cy5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgbj0tMSxlPVhvLm1pbihhcmd1bWVudHMsdCkscj1uZXcgQXJyYXkoZSk7KytuPGU7KWZvcih2YXIgdSxpPS0xLG89cltuXT1uZXcgQXJyYXkodSk7KytpPHU7KW9baV09YXJndW1lbnRzW2ldW25dO3JldHVybiByfSxYby50cmFuc3Bvc2U9ZnVuY3Rpb24obil7cmV0dXJuIFhvLnppcC5hcHBseShYbyxuKX0sWG8ua2V5cz1mdW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0LnB1c2goZSk7cmV0dXJuIHR9LFhvLnZhbHVlcz1mdW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0LnB1c2gobltlXSk7cmV0dXJuIHR9LFhvLmVudHJpZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107Zm9yKHZhciBlIGluIG4pdC5wdXNoKHtrZXk6ZSx2YWx1ZTpuW2VdfSk7cmV0dXJuIHR9LFhvLm1lcmdlPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlLHIsdT1uLmxlbmd0aCxpPS0xLG89MDsrK2k8dTspbys9bltpXS5sZW5ndGg7Zm9yKGU9bmV3IEFycmF5KG8pOy0tdT49MDspZm9yKHI9blt1XSx0PXIubGVuZ3RoOy0tdD49MDspZVstLW9dPXJbdF07cmV0dXJuIGV9O3ZhciBvYT1NYXRoLmFicztYby5yYW5nZT1mdW5jdGlvbihuLHQscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0xLGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9bixuPTApKSwxLzA9PT0odC1uKS9yKXRocm93IG5ldyBFcnJvcigiaW5maW5pdGUgcmFuZ2UiKTt2YXIgdSxpPVtdLG89ZShvYShyKSksYT0tMTtpZihuKj1vLHQqPW8scio9bywwPnIpZm9yKDsodT1uK3IqKythKT50OylpLnB1c2godS9vKTtlbHNlIGZvcig7KHU9bityKisrYSk8dDspaS5wdXNoKHUvbyk7cmV0dXJuIGl9LFhvLm1hcD1mdW5jdGlvbihuKXt2YXIgdD1uZXcgdTtpZihuIGluc3RhbmNlb2YgdSluLmZvckVhY2goZnVuY3Rpb24obixlKXt0LnNldChuLGUpfSk7ZWxzZSBmb3IodmFyIGUgaW4gbil0LnNldChlLG5bZV0pO3JldHVybiB0fSxyKHUse2hhczppLGdldDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpc1thYStuXX0sc2V0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXNbYWErbl09dH0scmVtb3ZlOm8sa2V5czphLHZhbHVlczpmdW5jdGlvbigpe3ZhciBuPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24odCxlKXtuLnB1c2goZSl9KSxufSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe24ucHVzaCh7a2V5OnQsdmFsdWU6ZX0pfSksbn0sc2l6ZTpjLGVtcHR5OnMsZm9yRWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0LmNoYXJDb2RlQXQoMCk9PT1jYSYmbi5jYWxsKHRoaXMsdC5zdWJzdHJpbmcoMSksdGhpc1t0XSl9fSk7dmFyIGFhPSJceDAwIixjYT1hYS5jaGFyQ29kZUF0KDApO1hvLm5lc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQsYSxjKXtpZihjPj1vLmxlbmd0aClyZXR1cm4gcj9yLmNhbGwoaSxhKTplP2Euc29ydChlKTphO2Zvcih2YXIgcyxsLGYsaCxnPS0xLHA9YS5sZW5ndGgsdj1vW2MrK10sZD1uZXcgdTsrK2c8cDspKGg9ZC5nZXQocz12KGw9YVtnXSkpKT9oLnB1c2gobCk6ZC5zZXQocyxbbF0pO3JldHVybiB0PyhsPXQoKSxmPWZ1bmN0aW9uKGUscil7bC5zZXQoZSxuKHQscixjKSl9KToobD17fSxmPWZ1bmN0aW9uKGUscil7bFtlXT1uKHQscixjKX0pLGQuZm9yRWFjaChmKSxsfWZ1bmN0aW9uIHQobixlKXtpZihlPj1vLmxlbmd0aClyZXR1cm4gbjt2YXIgcj1bXSx1PWFbZSsrXTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKG4sdSl7ci5wdXNoKHtrZXk6bix2YWx1ZXM6dCh1LGUpfSl9KSx1P3Iuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiB1KG4ua2V5LHQua2V5KX0pOnJ9dmFyIGUscixpPXt9LG89W10sYT1bXTtyZXR1cm4gaS5tYXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlLHQsMCl9LGkuZW50cmllcz1mdW5jdGlvbihlKXtyZXR1cm4gdChuKFhvLm1hcCxlLDApLDApfSxpLmtleT1mdW5jdGlvbihuKXtyZXR1cm4gby5wdXNoKG4pLGl9LGkuc29ydEtleXM9ZnVuY3Rpb24obil7cmV0dXJuIGFbby5sZW5ndGgtMV09bixpfSxpLnNvcnRWYWx1ZXM9ZnVuY3Rpb24obil7cmV0dXJuIGU9bixpfSxpLnJvbGx1cD1mdW5jdGlvbihuKXtyZXR1cm4gcj1uLGl9LGl9LFhvLnNldD1mdW5jdGlvbihuKXt2YXIgdD1uZXcgbDtpZihuKWZvcih2YXIgZT0wLHI9bi5sZW5ndGg7cj5lOysrZSl0LmFkZChuW2VdKTtyZXR1cm4gdH0scihsLHtoYXM6aSxhZGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbYWErbl09ITAsbn0scmVtb3ZlOmZ1bmN0aW9uKG4pe3JldHVybiBuPWFhK24sbiBpbiB0aGlzJiZkZWxldGUgdGhpc1tuXX0sdmFsdWVzOmEsc2l6ZTpjLGVtcHR5OnMsZm9yRWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0LmNoYXJDb2RlQXQoMCk9PT1jYSYmbi5jYWxsKHRoaXMsdC5zdWJzdHJpbmcoMSkpfX0pLFhvLmJlaGF2aW9yPXt9LFhvLnJlYmluZD1mdW5jdGlvbihuLHQpe2Zvcih2YXIgZSxyPTEsdT1hcmd1bWVudHMubGVuZ3RoOysrcjx1OyluW2U9YXJndW1lbnRzW3JdXT1mKG4sdCx0W2VdKTtyZXR1cm4gbn07dmFyIHNhPVsid2Via2l0IiwibXMiLCJtb3oiLCJNb3oiLCJvIiwiTyJdO1hvLmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPW5ldyBwLHQ9LTEsZT1hcmd1bWVudHMubGVuZ3RoOysrdDxlOyluW2FyZ3VtZW50c1t0XV09dihuKTtyZXR1cm4gbn0scC5wcm90b3R5cGUub249ZnVuY3Rpb24obix0KXt2YXIgZT1uLmluZGV4T2YoIi4iKSxyPSIiO2lmKGU+PTAmJihyPW4uc3Vic3RyaW5nKGUrMSksbj1uLnN1YnN0cmluZygwLGUpKSxuKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpc1tuXS5vbihyKTp0aGlzW25dLm9uKHIsdCk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKG51bGw9PXQpZm9yKG4gaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KG4pJiZ0aGlzW25dLm9uKHIsbnVsbCk7cmV0dXJuIHRoaXN9fSxYby5ldmVudD1udWxsLFhvLnJlcXVvdGU9ZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShsYSwiXFwkJiIpfTt2YXIgbGE9L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLGZhPXt9Ll9fcHJvdG9fXz9mdW5jdGlvbihuLHQpe24uX19wcm90b19fPXR9OmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlIGluIHQpbltlXT10W2VdfSxoYT1mdW5jdGlvbihuLHQpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3Iobil9LGdhPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQucXVlcnlTZWxlY3RvckFsbChuKX0scGE9Sm9baChKbywibWF0Y2hlc1NlbGVjdG9yIildLHZhPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHBhLmNhbGwobix0KX07ImZ1bmN0aW9uIj09dHlwZW9mIFNpenpsZSYmKGhhPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIFNpenpsZShuLHQpWzBdfHxudWxsfSxnYT1TaXp6bGUsdmE9U2l6emxlLm1hdGNoZXNTZWxlY3RvciksWG8uc2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHhhfTt2YXIgZGE9WG8uc2VsZWN0aW9uLnByb3RvdHlwZT1bXTtkYS5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIHQsZSxyLHUsaT1bXTtuPU0obik7Zm9yKHZhciBvPS0xLGE9dGhpcy5sZW5ndGg7KytvPGE7KXtpLnB1c2godD1bXSksdC5wYXJlbnROb2RlPShyPXRoaXNbb10pLnBhcmVudE5vZGU7Zm9yKHZhciBjPS0xLHM9ci5sZW5ndGg7KytjPHM7KSh1PXJbY10pPyh0LnB1c2goZT1uLmNhbGwodSx1Ll9fZGF0YV9fLGMsbykpLGUmJiJfX2RhdGFfXyJpbiB1JiYoZS5fX2RhdGFfXz11Ll9fZGF0YV9fKSk6dC5wdXNoKG51bGwpfXJldHVybiB4KGkpfSxkYS5zZWxlY3RBbGw9ZnVuY3Rpb24obil7dmFyIHQsZSxyPVtdO249XyhuKTtmb3IodmFyIHU9LTEsaT10aGlzLmxlbmd0aDsrK3U8aTspZm9yKHZhciBvPXRoaXNbdV0sYT0tMSxjPW8ubGVuZ3RoOysrYTxjOykoZT1vW2FdKSYmKHIucHVzaCh0PUJvKG4uY2FsbChlLGUuX19kYXRhX18sYSx1KSkpLHQucGFyZW50Tm9kZT1lKTtyZXR1cm4geChyKX07dmFyIG1hPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtYby5ucz17cHJlZml4Om1hLHF1YWxpZnk6ZnVuY3Rpb24obil7dmFyIHQ9bi5pbmRleE9mKCI6IiksZT1uO3JldHVybiB0Pj0wJiYoZT1uLnN1YnN0cmluZygwLHQpLG49bi5zdWJzdHJpbmcodCsxKSksbWEuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOm1hW2VdLGxvY2FsOm59Om59fSxkYS5hdHRyPWZ1bmN0aW9uKG4sdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIG4pe3ZhciBlPXRoaXMubm9kZSgpO3JldHVybiBuPVhvLm5zLnF1YWxpZnkobiksbi5sb2NhbD9lLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6ZS5nZXRBdHRyaWJ1dGUobil9Zm9yKHQgaW4gbil0aGlzLmVhY2goYih0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKGIobix0KSl9LGRhLmNsYXNzZWQ9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGU9dGhpcy5ub2RlKCkscj0obj1rKG4pKS5sZW5ndGgsdT0tMTtpZih0PWUuY2xhc3NMaXN0KXtmb3IoOysrdTxyOylpZighdC5jb250YWlucyhuW3VdKSlyZXR1cm4hMX1lbHNlIGZvcih0PWUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysrdTxyOylpZighUyhuW3VdKS50ZXN0KHQpKXJldHVybiExO3JldHVybiEwfWZvcih0IGluIG4pdGhpcy5lYWNoKEUodCxuW3RdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChFKG4sdCkpfSxkYS5zdHlsZT1mdW5jdGlvbihuLHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtpZigzPnIpe2lmKCJzdHJpbmciIT10eXBlb2Ygbil7Mj5yJiYodD0iIik7Zm9yKGUgaW4gbil0aGlzLmVhY2goQyhlLG5bZV0sdCkpO3JldHVybiB0aGlzfWlmKDI+cilyZXR1cm4gR28uZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLm5vZGUoKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pO2U9IiJ9cmV0dXJuIHRoaXMuZWFjaChDKG4sdCxlKSl9LGRhLnByb3BlcnR5PWZ1bmN0aW9uKG4sdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIHRoaXMubm9kZSgpW25dO2Zvcih0IGluIG4pdGhpcy5lYWNoKE4odCxuW3RdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChOKG4sdCkpfSxkYS50ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09dD8iIjp0fTpudWxsPT1uP2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD0iIn06ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59KTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0sZGEuaHRtbD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT10PyIiOnR9Om51bGw9PW4/ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD0iIn06ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1ufSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxkYS5hcHBlbmQ9ZnVuY3Rpb24obil7cmV0dXJuIG49TChuKSx0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxkYS5pbnNlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gbj1MKG4pLHQ9TSh0KSx0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0sZGEucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTtuJiZuLnJlbW92ZUNoaWxkKHRoaXMpfSl9LGRhLmRhdGE9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4sZSl7dmFyIHIsaSxvLGE9bi5sZW5ndGgsZj1lLmxlbmd0aCxoPU1hdGgubWluKGEsZiksZz1uZXcgQXJyYXkoZikscD1uZXcgQXJyYXkoZiksdj1uZXcgQXJyYXkoYSk7aWYodCl7dmFyIGQsbT1uZXcgdSx5PW5ldyB1LHg9W107Zm9yKHI9LTE7KytyPGE7KWQ9dC5jYWxsKGk9bltyXSxpLl9fZGF0YV9fLHIpLG0uaGFzKGQpP3Zbcl09aTptLnNldChkLGkpLHgucHVzaChkKTtmb3Iocj0tMTsrK3I8ZjspZD10LmNhbGwoZSxvPWVbcl0sciksKGk9bS5nZXQoZCkpPyhnW3JdPWksaS5fX2RhdGFfXz1vKTp5LmhhcyhkKXx8KHBbcl09VChvKSkseS5zZXQoZCxvKSxtLnJlbW92ZShkKTtmb3Iocj0tMTsrK3I8YTspbS5oYXMoeFtyXSkmJih2W3JdPW5bcl0pfWVsc2V7Zm9yKHI9LTE7KytyPGg7KWk9bltyXSxvPWVbcl0saT8oaS5fX2RhdGFfXz1vLGdbcl09aSk6cFtyXT1UKG8pO2Zvcig7Zj5yOysrcilwW3JdPVQoZVtyXSk7Zm9yKDthPnI7KytyKXZbcl09bltyXX1wLnVwZGF0ZT1nLHAucGFyZW50Tm9kZT1nLnBhcmVudE5vZGU9di5wYXJlbnROb2RlPW4ucGFyZW50Tm9kZSxjLnB1c2gocCkscy5wdXNoKGcpLGwucHVzaCh2KX12YXIgcixpLG89LTEsYT10aGlzLmxlbmd0aDtpZighYXJndW1lbnRzLmxlbmd0aCl7Zm9yKG49bmV3IEFycmF5KGE9KHI9dGhpc1swXSkubGVuZ3RoKTsrK288YTspKGk9cltvXSkmJihuW29dPWkuX19kYXRhX18pO3JldHVybiBufXZhciBjPUQoW10pLHM9eChbXSksbD14KFtdKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbilmb3IoOysrbzxhOyllKHI9dGhpc1tvXSxuLmNhbGwocixyLnBhcmVudE5vZGUuX19kYXRhX18sbykpO2Vsc2UgZm9yKDsrK288YTspZShyPXRoaXNbb10sbik7cmV0dXJuIHMuZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gY30scy5leGl0PWZ1bmN0aW9uKCl7cmV0dXJuIGx9LHN9LGRhLmRhdHVtPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixuKTp0aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIpfSxkYS5maWx0ZXI9ZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9W107ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPXEobikpO2Zvcih2YXIgaT0wLG89dGhpcy5sZW5ndGg7bz5pO2krKyl7dS5wdXNoKHQ9W10pLHQucGFyZW50Tm9kZT0oZT10aGlzW2ldKS5wYXJlbnROb2RlO2Zvcih2YXIgYT0wLGM9ZS5sZW5ndGg7Yz5hO2ErKykocj1lW2FdKSYmbi5jYWxsKHIsci5fX2RhdGFfXyxhLGkpJiZ0LnB1c2gocil9cmV0dXJuIHgodSl9LGRhLm9yZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xLHQ9dGhpcy5sZW5ndGg7KytuPHQ7KWZvcih2YXIgZSxyPXRoaXNbbl0sdT1yLmxlbmd0aC0xLGk9clt1XTstLXU+PTA7KShlPXJbdV0pJiYoaSYmaSE9PWUubmV4dFNpYmxpbmcmJmkucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSxpKSxpPWUpO3JldHVybiB0aGlzfSxkYS5zb3J0PWZ1bmN0aW9uKG4pe249ei5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zm9yKHZhciB0PS0xLGU9dGhpcy5sZW5ndGg7Kyt0PGU7KXRoaXNbdF0uc29ydChuKTtyZXR1cm4gdGhpcy5vcmRlcigpfSxkYS5lYWNoPWZ1bmN0aW9uKG4pe3JldHVybiBSKHRoaXMsZnVuY3Rpb24odCxlLHIpe24uY2FsbCh0LHQuX19kYXRhX18sZSxyKX0pfSxkYS5jYWxsPWZ1bmN0aW9uKG4pe3ZhciB0PUJvKGFyZ3VtZW50cyk7cmV0dXJuIG4uYXBwbHkodFswXT10aGlzLHQpLHRoaXN9LGRhLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxkYS5ub2RlPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsdD10aGlzLmxlbmd0aDt0Pm47bisrKWZvcih2YXIgZT10aGlzW25dLHI9MCx1PWUubGVuZ3RoO3U+cjtyKyspe3ZhciBpPWVbcl07aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH0sZGEuc2l6ZT1mdW5jdGlvbigpe3ZhciBuPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrbn0pLG59O3ZhciB5YT1bXTtYby5zZWxlY3Rpb24uZW50ZXI9RCxYby5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPXlhLHlhLmFwcGVuZD1kYS5hcHBlbmQseWEuZW1wdHk9ZGEuZW1wdHkseWEubm9kZT1kYS5ub2RlLHlhLmNhbGw9ZGEuY2FsbCx5YS5zaXplPWRhLnNpemUseWEuc2VsZWN0PWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlLHIsdSxpLG89W10sYT0tMSxjPXRoaXMubGVuZ3RoOysrYTxjOyl7cj0odT10aGlzW2FdKS51cGRhdGUsby5wdXNoKHQ9W10pLHQucGFyZW50Tm9kZT11LnBhcmVudE5vZGU7Zm9yKHZhciBzPS0xLGw9dS5sZW5ndGg7KytzPGw7KShpPXVbc10pPyh0LnB1c2gocltzXT1lPW4uY2FsbCh1LnBhcmVudE5vZGUsaS5fX2RhdGFfXyxzLGEpKSxlLl9fZGF0YV9fPWkuX19kYXRhX18pOnQucHVzaChudWxsKX1yZXR1cm4geChvKX0seWEuaW5zZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9UCh0aGlzKSksZGEuaW5zZXJ0LmNhbGwodGhpcyxuLHQpfSxkYS50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciBuLHQsZT1rc3x8KytMcyxyPVtdLHU9RXN8fHt0aW1lOkRhdGUubm93KCksZWFzZTp5dSxkZWxheTowLGR1cmF0aW9uOjI1MH0saT0tMSxvPXRoaXMubGVuZ3RoOysraTxvOyl7ci5wdXNoKG49W10pO2Zvcih2YXIgYT10aGlzW2ldLGM9LTEscz1hLmxlbmd0aDsrK2M8czspKHQ9YVtjXSkmJmpvKHQsYyxlLHUpLG4ucHVzaCh0KX1yZXR1cm4gRG8ocixlKX0sZGEuaW50ZXJydXB0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChVKX0sWG8uc2VsZWN0PWZ1bmN0aW9uKG4pe3ZhciB0PVsic3RyaW5nIj09dHlwZW9mIG4/aGEobixXbyk6bl07cmV0dXJuIHQucGFyZW50Tm9kZT1Kbyx4KFt0XSl9LFhvLnNlbGVjdEFsbD1mdW5jdGlvbihuKXt2YXIgdD1Cbygic3RyaW5nIj09dHlwZW9mIG4/Z2EobixXbyk6bik7cmV0dXJuIHQucGFyZW50Tm9kZT1Kbyx4KFt0XSl9O3ZhciB4YT1Yby5zZWxlY3QoSm8pO2RhLm9uPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO2lmKDM+cil7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPnImJih0PSExKTtmb3IoZSBpbiBuKXRoaXMuZWFjaChqKGUsbltlXSx0KSk7cmV0dXJuIHRoaXN9aWYoMj5yKXJldHVybihyPXRoaXMubm9kZSgpWyJfX29uIituXSkmJnIuXztlPSExfXJldHVybiB0aGlzLmVhY2goaihuLHQsZSkpfTt2YXIgTWE9WG8ubWFwKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pO01hLmZvckVhY2goZnVuY3Rpb24obil7Im9uIituIGluIFdvJiZNYS5yZW1vdmUobil9KTt2YXIgX2E9Im9uc2VsZWN0c3RhcnQiaW4gV28/bnVsbDpoKEpvLnN0eWxlLCJ1c2VyU2VsZWN0IiksYmE9MDtYby5tb3VzZT1mdW5jdGlvbihuKXtyZXR1cm4gWShuLG0oKSl9O3ZhciB3YT0vV2ViS2l0Ly50ZXN0KEdvLm5hdmlnYXRvci51c2VyQWdlbnQpPy0xOjA7WG8udG91Y2hlcz1mdW5jdGlvbihuLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PW0oKS50b3VjaGVzKSx0P0JvKHQpLm1hcChmdW5jdGlvbih0KXt2YXIgZT1ZKG4sdCk7cmV0dXJuIGUuaWRlbnRpZmllcj10LmlkZW50aWZpZXIsZX0pOltdfSxYby5iZWhhdmlvci5kcmFnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3RoaXMub24oIm1vdXNlZG93bi5kcmFnIixvKS5vbigidG91Y2hzdGFydC5kcmFnIixhKX1mdW5jdGlvbiB0KCl7cmV0dXJuIFhvLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9ZnVuY3Rpb24gZShuLHQpe3JldHVybiBYby50b3VjaGVzKG4pLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5pZGVudGlmaWVyPT09dH0pWzBdfWZ1bmN0aW9uIHIobix0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbygpe3ZhciBuPXQobCxnKSxlPW5bMF0tdlswXSxyPW5bMV0tdlsxXTtkfD1lfHIsdj1uLGYoe3R5cGU6ImRyYWciLHg6blswXStjWzBdLHk6blsxXStjWzFdLGR4OmUsZHk6cn0pfWZ1bmN0aW9uIGEoKXttLm9uKGUrIi4iK3AsbnVsbCkub24ocisiLiIrcCxudWxsKSx5KGQmJlhvLmV2ZW50LnRhcmdldD09PWgpLGYoe3R5cGU6ImRyYWdlbmQifSl9dmFyIGMscz10aGlzLGw9cy5wYXJlbnROb2RlLGY9dS5vZihzLGFyZ3VtZW50cyksaD1Yby5ldmVudC50YXJnZXQsZz1uKCkscD1udWxsPT1nPyJkcmFnIjoiZHJhZy0iK2csdj10KGwsZyksZD0wLG09WG8uc2VsZWN0KEdvKS5vbihlKyIuIitwLG8pLm9uKHIrIi4iK3AsYSkseT1PKCk7aT8oYz1pLmFwcGx5KHMsYXJndW1lbnRzKSxjPVtjLngtdlswXSxjLnktdlsxXV0pOmM9WzAsMF0sZih7dHlwZToiZHJhZ3N0YXJ0In0pfX12YXIgdT15KG4sImRyYWciLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiksaT1udWxsLG89cihnLFhvLm1vdXNlLCJtb3VzZW1vdmUiLCJtb3VzZXVwIiksYT1yKHQsZSwidG91Y2htb3ZlIiwidG91Y2hlbmQiKTtyZXR1cm4gbi5vcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxuKTppfSxYby5yZWJpbmQobix1LCJvbiIpfTt2YXIgU2E9TWF0aC5QSSxrYT0yKlNhLEVhPVNhLzIsQWE9MWUtNixDYT1BYSpBYSxOYT1TYS8xODAsTGE9MTgwL1NhLFRhPU1hdGguU1FSVDIscWE9Mix6YT00O1hvLmludGVycG9sYXRlWm9vbT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobil7dmFyIHQ9bip5O2lmKG0pe3ZhciBlPUIodiksbz1pLyhxYSpoKSooZSpXKFRhKnQrdiktJCh2KSk7cmV0dXJuW3IrbypzLHUrbypsLGkqZS9CKFRhKnQrdildfXJldHVybltyK24qcyx1K24qbCxpKk1hdGguZXhwKFRhKnQpXX12YXIgcj1uWzBdLHU9blsxXSxpPW5bMl0sbz10WzBdLGE9dFsxXSxjPXRbMl0scz1vLXIsbD1hLXUsZj1zKnMrbCpsLGg9TWF0aC5zcXJ0KGYpLGc9KGMqYy1pKmkremEqZikvKDIqaSpxYSpoKSxwPShjKmMtaSppLXphKmYpLygyKmMqcWEqaCksdj1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpLGQ9TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKSxtPWQtdix5PShtfHxNYXRoLmxvZyhjL2kpKS9UYTtyZXR1cm4gZS5kdXJhdGlvbj0xZTMqeSxlfSxYby5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtuLm9uKEEscykub24oUGErIi56b29tIixmKS5vbihDLGgpLm9uKCJkYmxjbGljay56b29tIixnKS5vbihMLGwpfWZ1bmN0aW9uIHQobil7cmV0dXJuWyhuWzBdLVMueCkvUy5rLChuWzFdLVMueSkvUy5rXX1mdW5jdGlvbiBlKG4pe3JldHVybltuWzBdKlMuaytTLngsblsxXSpTLmsrUy55XX1mdW5jdGlvbiByKG4pe1Muaz1NYXRoLm1heChFWzBdLE1hdGgubWluKEVbMV0sbikpfWZ1bmN0aW9uIHUobix0KXt0PWUodCksUy54Kz1uWzBdLXRbMF0sUy55Kz1uWzFdLXRbMV19ZnVuY3Rpb24gaSgpe18mJl8uZG9tYWluKE0ucmFuZ2UoKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuKG4tUy54KS9TLmt9KS5tYXAoTS5pbnZlcnQpKSx3JiZ3LmRvbWFpbihiLnJhbmdlKCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybihuLVMueSkvUy5rfSkubWFwKGIuaW52ZXJ0KSl9ZnVuY3Rpb24gbyhuKXtuKHt0eXBlOiJ6b29tc3RhcnQifSl9ZnVuY3Rpb24gYShuKXtpKCksbih7dHlwZToiem9vbSIsc2NhbGU6Uy5rLHRyYW5zbGF0ZTpbUy54LFMueV19KX1mdW5jdGlvbiBjKG4pe24oe3R5cGU6Inpvb21lbmQifSl9ZnVuY3Rpb24gcygpe2Z1bmN0aW9uIG4oKXtsPTEsdShYby5tb3VzZShyKSxnKSxhKGkpfWZ1bmN0aW9uIGUoKXtmLm9uKEMsR289PT1yP2g6bnVsbCkub24oTixudWxsKSxwKGwmJlhvLmV2ZW50LnRhcmdldD09PXMpLGMoaSl9dmFyIHI9dGhpcyxpPVQub2Yocixhcmd1bWVudHMpLHM9WG8uZXZlbnQudGFyZ2V0LGw9MCxmPVhvLnNlbGVjdChHbykub24oQyxuKS5vbihOLGUpLGc9dChYby5tb3VzZShyKSkscD1PKCk7VS5jYWxsKHIpLG8oaSl9ZnVuY3Rpb24gbCgpe2Z1bmN0aW9uIG4oKXt2YXIgbj1Yby50b3VjaGVzKGcpO3JldHVybiBoPVMuayxuLmZvckVhY2goZnVuY3Rpb24obil7bi5pZGVudGlmaWVyIGluIHYmJih2W24uaWRlbnRpZmllcl09dChuKSl9KSxufWZ1bmN0aW9uIGUoKXtmb3IodmFyIHQ9WG8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsZT0wLGk9dC5sZW5ndGg7aT5lOysrZSl2W3RbZV0uaWRlbnRpZmllcl09bnVsbDt2YXIgbz1uKCksYz1EYXRlLm5vdygpO2lmKDE9PT1vLmxlbmd0aCl7aWYoNTAwPmMteCl7dmFyIHM9b1swXSxsPXZbcy5pZGVudGlmaWVyXTtyKDIqUy5rKSx1KHMsbCksZCgpLGEocCl9eD1jfWVsc2UgaWYoby5sZW5ndGg+MSl7dmFyIHM9b1swXSxmPW9bMV0saD1zWzBdLWZbMF0sZz1zWzFdLWZbMV07bT1oKmgrZypnfX1mdW5jdGlvbiBpKCl7Zm9yKHZhciBuLHQsZSxpLG89WG8udG91Y2hlcyhnKSxjPTAscz1vLmxlbmd0aDtzPmM7KytjLGk9bnVsbClpZihlPW9bY10saT12W2UuaWRlbnRpZmllcl0pe2lmKHQpYnJlYWs7bj1lLHQ9aX1pZihpKXt2YXIgbD0obD1lWzBdLW5bMF0pKmwrKGw9ZVsxXS1uWzFdKSpsLGY9bSYmTWF0aC5zcXJ0KGwvbSk7bj1bKG5bMF0rZVswXSkvMiwoblsxXStlWzFdKS8yXSx0PVsodFswXStpWzBdKS8yLCh0WzFdK2lbMV0pLzJdLHIoZipoKX14PW51bGwsdShuLHQpLGEocCl9ZnVuY3Rpb24gZigpe2lmKFhvLmV2ZW50LnRvdWNoZXMubGVuZ3RoKXtmb3IodmFyIHQ9WG8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsZT0wLHI9dC5sZW5ndGg7cj5lOysrZSlkZWxldGUgdlt0W2VdLmlkZW50aWZpZXJdO2Zvcih2YXIgdSBpbiB2KXJldHVybiB2b2lkIG4oKX1iLm9uKE0sbnVsbCkub24oXyxudWxsKSx3Lm9uKEEscykub24oTCxsKSxrKCksYyhwKX12YXIgaCxnPXRoaXMscD1ULm9mKGcsYXJndW1lbnRzKSx2PXt9LG09MCx5PVhvLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIsTT0idG91Y2htb3ZlLnpvb20tIit5LF89InRvdWNoZW5kLnpvb20tIit5LGI9WG8uc2VsZWN0KEdvKS5vbihNLGkpLm9uKF8sZiksdz1Yby5zZWxlY3QoZykub24oQSxudWxsKS5vbihMLGUpLGs9TygpO1UuY2FsbChnKSxlKCksbyhwKX1mdW5jdGlvbiBmKCl7dmFyIG49VC5vZih0aGlzLGFyZ3VtZW50cyk7bT9jbGVhclRpbWVvdXQobSk6KFUuY2FsbCh0aGlzKSxvKG4pKSxtPXNldFRpbWVvdXQoZnVuY3Rpb24oKXttPW51bGwsYyhuKX0sNTApLGQoKTt2YXIgZT12fHxYby5tb3VzZSh0aGlzKTtwfHwocD10KGUpKSxyKE1hdGgucG93KDIsLjAwMipSYSgpKSpTLmspLHUoZSxwKSxhKG4pfWZ1bmN0aW9uIGgoKXtwPW51bGx9ZnVuY3Rpb24gZygpe3ZhciBuPVQub2YodGhpcyxhcmd1bWVudHMpLGU9WG8ubW91c2UodGhpcyksaT10KGUpLHM9TWF0aC5sb2coUy5rKS9NYXRoLkxOMjtvKG4pLHIoTWF0aC5wb3coMixYby5ldmVudC5zaGlmdEtleT9NYXRoLmNlaWwocyktMTpNYXRoLmZsb29yKHMpKzEpKSx1KGUsaSksYShuKSxjKG4pfXZhciBwLHYsbSx4LE0sXyxiLHcsUz17eDowLHk6MCxrOjF9LGs9Wzk2MCw1MDBdLEU9RGEsQT0ibW91c2Vkb3duLnpvb20iLEM9Im1vdXNlbW92ZS56b29tIixOPSJtb3VzZXVwLnpvb20iLEw9InRvdWNoc3RhcnQuem9vbSIsVD15KG4sInpvb21zdGFydCIsInpvb20iLCJ6b29tZW5kIik7cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rpb24obil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49VC5vZih0aGlzLGFyZ3VtZW50cyksdD1TO2tzP1hvLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtTPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LG8obil9KS50d2Vlbigiem9vbTp6b29tIixmdW5jdGlvbigpe3ZhciBlPWtbMF0scj1rWzFdLHU9ZS8yLGk9ci8yLG89WG8uaW50ZXJwb2xhdGVab29tKFsodS1TLngpL1MuaywoaS1TLnkpL1MuayxlL1Mua10sWyh1LXQueCkvdC5rLChpLXQueSkvdC5rLGUvdC5rXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPW8odCksYz1lL3JbMl07dGhpcy5fX2NoYXJ0X189Uz17eDp1LXJbMF0qYyx5OmktclsxXSpjLGs6Y30sYShuKX19KS5lYWNoKCJlbmQuem9vbSIsZnVuY3Rpb24oKXtjKG4pfSk6KHRoaXMuX19jaGFydF9fPVMsbyhuKSxhKG4pLGMobikpfSl9LG4udHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPXt4Oit0WzBdLHk6K3RbMV0sazpTLmt9LGkoKSxuKTpbUy54LFMueV19LG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9e3g6Uy54LHk6Uy55LGs6K3R9LGkoKSxuKTpTLmt9LG4uc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9bnVsbD09dD9EYTpbK3RbMF0sK3RbMV1dLG4pOkV9LG4uY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQmJlsrdFswXSwrdFsxXV0sbik6dn0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPXQmJlsrdFswXSwrdFsxXV0sbik6a30sbi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPXQsTT10LmNvcHkoKSxTPXt4OjAseTowLGs6MX0sbik6X30sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PXQsYj10LmNvcHkoKSxTPXt4OjAseTowLGs6MX0sbik6d30sWG8ucmViaW5kKG4sVCwib24iKX07dmFyIFJhLERhPVswLDEvMF0sUGE9Im9ud2hlZWwiaW4gV28/KFJhPWZ1bmN0aW9uKCl7cmV0dXJuLVhvLmV2ZW50LmRlbHRhWSooWG8uZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBXbz8oUmE9ZnVuY3Rpb24oKXtyZXR1cm4gWG8uZXZlbnQud2hlZWxEZWx0YX0sIm1vdXNld2hlZWwiKTooUmE9ZnVuY3Rpb24oKXtyZXR1cm4tWG8uZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpO0cucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LFhvLmhzbD1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP24gaW5zdGFuY2VvZiBRP0sobi5oLG4ucyxuLmwpOmR0KCIiK24sbXQsSyk6SygrbiwrdCwrZSl9O3ZhciBVYT1RLnByb3RvdHlwZT1uZXcgRztVYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSksSyh0aGlzLmgsdGhpcy5zLHRoaXMubC9uKX0sVWEuZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/bjoxKSxLKHRoaXMuaCx0aGlzLnMsbip0aGlzLmwpfSxVYS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gbnQodGhpcy5oLHRoaXMucyx0aGlzLmwpfSxYby5oY2w9ZnVuY3Rpb24obix0LGUpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9uIGluc3RhbmNlb2YgZXQ/dHQobi5oLG4uYyxuLmwpOm4gaW5zdGFuY2VvZiBpdD9hdChuLmwsbi5hLG4uYik6YXQoKG49eXQoKG49WG8ucmdiKG4pKS5yLG4uZyxuLmIpKS5sLG4uYSxuLmIpOnR0KCtuLCt0LCtlKX07dmFyIGphPWV0LnByb3RvdHlwZT1uZXcgRztqYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gdHQodGhpcy5oLHRoaXMuYyxNYXRoLm1pbigxMDAsdGhpcy5sK0hhKihhcmd1bWVudHMubGVuZ3RoP246MSkpKX0samEuZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiB0dCh0aGlzLmgsdGhpcy5jLE1hdGgubWF4KDAsdGhpcy5sLUhhKihhcmd1bWVudHMubGVuZ3RoP246MSkpKX0samEucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIHJ0KHRoaXMuaCx0aGlzLmMsdGhpcy5sKS5yZ2IoKX0sWG8ubGFiPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/biBpbnN0YW5jZW9mIGl0P3V0KG4ubCxuLmEsbi5iKTpuIGluc3RhbmNlb2YgZXQ/cnQobi5sLG4uYyxuLmgpOnl0KChuPVhvLnJnYihuKSkucixuLmcsbi5iKTp1dCgrbiwrdCwrZSl9O3ZhciBIYT0xOCxGYT0uOTUwNDcsT2E9MSxZYT0xLjA4ODgzLElhPWl0LnByb3RvdHlwZT1uZXcgRztJYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gdXQoTWF0aC5taW4oMTAwLHRoaXMubCtIYSooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSx0aGlzLmEsdGhpcy5iKX0sSWEuZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiB1dChNYXRoLm1heCgwLHRoaXMubC1IYSooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSx0aGlzLmEsdGhpcy5iKX0sSWEucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMubCx0aGlzLmEsdGhpcy5iKX0sWG8ucmdiPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/biBpbnN0YW5jZW9mIHB0P2d0KG4ucixuLmcsbi5iKTpkdCgiIituLGd0LG50KTpndCh+fm4sfn50LH5+ZSl9O3ZhciBaYT1wdC5wcm90b3R5cGU9bmV3IEc7WmEuYnJpZ2h0ZXI9ZnVuY3Rpb24obil7bj1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSk7dmFyIHQ9dGhpcy5yLGU9dGhpcy5nLHI9dGhpcy5iLHU9MzA7cmV0dXJuIHR8fGV8fHI/KHQmJnU+dCYmKHQ9dSksZSYmdT5lJiYoZT11KSxyJiZ1PnImJihyPXUpLGd0KE1hdGgubWluKDI1NSx+fih0L24pKSxNYXRoLm1pbigyNTUsfn4oZS9uKSksTWF0aC5taW4oMjU1LH5+KHIvbikpKSk6Z3QodSx1LHUpfSxaYS5kYXJrZXI9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9uOjEpLGd0KH5+KG4qdGhpcy5yKSx+fihuKnRoaXMuZyksfn4obip0aGlzLmIpKX0sWmEuaHNsPWZ1bmN0aW9uKCl7cmV0dXJuIG10KHRoaXMucix0aGlzLmcsdGhpcy5iKX0sWmEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIyIrdnQodGhpcy5yKSt2dCh0aGlzLmcpK3Z0KHRoaXMuYil9O3ZhciBWYT1Yby5tYXAoe2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7VmEuZm9yRWFjaChmdW5jdGlvbihuLHQpe1ZhLnNldChuLGZ0KHQpKX0pLFhvLmZ1bmN0b3I9X3QsWG8ueGhyPXd0KGJ0KSxYby5kc3Y9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4sZSxpKXthcmd1bWVudHMubGVuZ3RoPDMmJihpPWUsZT1udWxsKTt2YXIgbz1TdChuLHQsbnVsbD09ZT9yOnUoZSksaSk7cmV0dXJuIG8ucm93PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28ucmVzcG9uc2UobnVsbD09KGU9bik/cjp1KG4pKTplfSxvfWZ1bmN0aW9uIHIobil7cmV0dXJuIGUucGFyc2Uobi5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLnBhcnNlKHQucmVzcG9uc2VUZXh0LG4pfX1mdW5jdGlvbiBpKHQpe3JldHVybiB0Lm1hcChvKS5qb2luKG4pfWZ1bmN0aW9uIG8obil7cmV0dXJuIGEudGVzdChuKT8nIicrbi5yZXBsYWNlKC9cIi9nLCciIicpKyciJzpufXZhciBhPW5ldyBSZWdFeHAoJ1siJytuKyJcbl0iKSxjPW4uY2hhckNvZGVBdCgwKTtyZXR1cm4gZS5wYXJzZT1mdW5jdGlvbihuLHQpe3ZhciByO3JldHVybiBlLnBhcnNlUm93cyhuLGZ1bmN0aW9uKG4sZSl7aWYocilyZXR1cm4gcihuLGUtMSk7dmFyIHU9bmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK24ubWFwKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG4pKyI6IGRbIit0KyJdIn0pLmpvaW4oIiwiKSsifSIpO3I9dD9mdW5jdGlvbihuLGUpe3JldHVybiB0KHUobiksZSl9OnV9KX0sZS5wYXJzZVJvd3M9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKCl7aWYobD49cylyZXR1cm4gbztpZih1KXJldHVybiB1PSExLGk7dmFyIHQ9bDtpZigzND09PW4uY2hhckNvZGVBdCh0KSl7Zm9yKHZhciBlPXQ7ZSsrPHM7KWlmKDM0PT09bi5jaGFyQ29kZUF0KGUpKXtpZigzNCE9PW4uY2hhckNvZGVBdChlKzEpKWJyZWFrOysrZX1sPWUrMjt2YXIgcj1uLmNoYXJDb2RlQXQoZSsxKTtyZXR1cm4gMTM9PT1yPyh1PSEwLDEwPT09bi5jaGFyQ29kZUF0KGUrMikmJisrbCk6MTA9PT1yJiYodT0hMCksbi5zdWJzdHJpbmcodCsxLGUpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO3M+bDspe3ZhciByPW4uY2hhckNvZGVBdChsKyspLGE9MTtpZigxMD09PXIpdT0hMDtlbHNlIGlmKDEzPT09cil1PSEwLDEwPT09bi5jaGFyQ29kZUF0KGwpJiYoKytsLCsrYSk7ZWxzZSBpZihyIT09Yyljb250aW51ZTtyZXR1cm4gbi5zdWJzdHJpbmcodCxsLWEpfXJldHVybiBuLnN1YnN0cmluZyh0KX1mb3IodmFyIHIsdSxpPXt9LG89e30sYT1bXSxzPW4ubGVuZ3RoLGw9MCxmPTA7KHI9ZSgpKSE9PW87KXtmb3IodmFyIGg9W107ciE9PWkmJnIhPT1vOyloLnB1c2gocikscj1lKCk7KCF0fHwoaD10KGgsZisrKSkpJiZhLnB1c2goaCl9cmV0dXJuIGF9LGUuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodFswXSkpcmV0dXJuIGUuZm9ybWF0Um93cyh0KTt2YXIgcj1uZXcgbCx1PVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIG4pci5oYXModCl8fHUucHVzaChyLmFkZCh0KSl9KSxbdS5tYXAobykuam9pbihuKV0uY29uY2F0KHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1Lm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbyh0W25dKX0pLmpvaW4obil9KSkuam9pbigiXG4iKX0sZS5mb3JtYXRSb3dzPWZ1bmN0aW9uKG4pe3JldHVybiBuLm1hcChpKS5qb2luKCJcbiIpfSxlfSxYby5jc3Y9WG8uZHN2KCIsIiwidGV4dC9jc3YiKSxYby50c3Y9WG8uZHN2KCIJIiwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIpO3ZhciBYYSwkYSxCYSxXYSxKYSxHYT1Hb1toKEdvLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKV18fGZ1bmN0aW9uKG4pe3NldFRpbWVvdXQobiwxNyl9O1hvLnRpbWVyPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoOzI+ciYmKHQ9MCksMz5yJiYoZT1EYXRlLm5vdygpKTt2YXIgdT1lK3QsaT17YzpuLHQ6dSxmOiExLG46bnVsbH07JGE/JGEubj1pOlhhPWksJGE9aSxCYXx8KFdhPWNsZWFyVGltZW91dChXYSksQmE9MSxHYShFdCkpfSxYby50aW1lci5mbHVzaD1mdW5jdGlvbigpe0F0KCksQ3QoKX0sWG8ucm91bmQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gdD9NYXRoLnJvdW5kKG4qKHQ9TWF0aC5wb3coMTAsdCkpKS90Ok1hdGgucm91bmQobil9O3ZhciBLYT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXS5tYXAoTHQpO1hvLmZvcm1hdFByZWZpeD1mdW5jdGlvbihuLHQpe3ZhciBlPTA7cmV0dXJuIG4mJigwPm4mJihuKj0tMSksdCYmKG49WG8ucm91bmQobixOdChuLHQpKSksZT0xK01hdGguZmxvb3IoMWUtMTIrTWF0aC5sb2cobikvTWF0aC5MTjEwKSxlPU1hdGgubWF4KC0yNCxNYXRoLm1pbigyNCwzKk1hdGguZmxvb3IoKDA+PWU/ZSsxOmUtMSkvMykpKSksS2FbOCtlLzNdfTt2YXIgUWE9Lyg/OihbXntdKT8oWzw+PV5dKSk/KFsrXC0gXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuLT9cZCspPyhbYS16JV0pPy9pLG5jPVhvLm1hcCh7YjpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZygyKX0sYzpmdW5jdGlvbihuKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuKX0sbzpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZyg4KX0seDpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZygxNil9LFg6ZnVuY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LGc6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b1ByZWNpc2lvbih0KX0sZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxyOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKG49WG8ucm91bmQobixOdChuLHQpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWluKDIwLE50KG4qKDErMWUtMTUpLHQpKSkpfX0pLHRjPVhvLnRpbWU9e30sZWM9RGF0ZTt6dC5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdldFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGltZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7cmMuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1bmN0aW9uKCl7cmMuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRGdWxsWWVhcjpmdW5jdGlvbigpe3JjLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe3JjLnNldFVUQ0hvdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtyYy5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtyYy5zZXRVVENNaW51dGVzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe3JjLnNldFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cmMuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0VGltZTpmdW5jdGlvbigpe3JjLnNldFRpbWUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9fTt2YXIgcmM9RGF0ZS5wcm90b3R5cGU7dGMueWVhcj1SdChmdW5jdGlvbihuKXtyZXR1cm4gbj10Yy5kYXkobiksbi5zZXRNb250aCgwLDEpLG59LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KSx0Yy55ZWFycz10Yy55ZWFyLnJhbmdlLHRjLnllYXJzLnV0Yz10Yy55ZWFyLnV0Yy5yYW5nZSx0Yy5kYXk9UnQoZnVuY3Rpb24obil7dmFyIHQ9bmV3IGVjKDJlMywwKTtyZXR1cm4gdC5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKSx0fSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF0ZSgpLTF9KSx0Yy5kYXlzPXRjLmRheS5yYW5nZSx0Yy5kYXlzLnV0Yz10Yy5kYXkudXRjLnJhbmdlLHRjLmRheU9mWWVhcj1mdW5jdGlvbihuKXt2YXIgdD10Yy55ZWFyKG4pO3JldHVybiBNYXRoLmZsb29yKChuLXQtNmU0KihuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvODY0ZTUpfSxbInN1bmRheSIsIm1vbmRheSIsInR1ZXNkYXkiLCJ3ZWRuZXNkYXkiLCJ0aHVyc2RheSIsImZyaWRheSIsInNhdHVyZGF5Il0uZm9yRWFjaChmdW5jdGlvbihuLHQpe3Q9Ny10O3ZhciBlPXRjW25dPVJ0KGZ1bmN0aW9uKG4pe3JldHVybihuPXRjLmRheShuKSkuc2V0RGF0ZShuLmdldERhdGUoKS0obi5nZXREYXkoKSt0KSU3KSxufSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSs3Kk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXt2YXIgZT10Yy55ZWFyKG4pLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKCh0Yy5kYXlPZlllYXIobikrKGUrdCklNykvNyktKGUhPT10KX0pO3RjW24rInMiXT1lLnJhbmdlLHRjW24rInMiXS51dGM9ZS51dGMucmFuZ2UsdGNbbisiT2ZZZWFyIl09ZnVuY3Rpb24obil7dmFyIGU9dGMueWVhcihuKS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigodGMuZGF5T2ZZZWFyKG4pKyhlK3QpJTcpLzcpfX0pLHRjLndlZWs9dGMuc3VuZGF5LHRjLndlZWtzPXRjLnN1bmRheS5yYW5nZSx0Yy53ZWVrcy51dGM9dGMuc3VuZGF5LnV0Yy5yYW5nZSx0Yy53ZWVrT2ZZZWFyPXRjLnN1bmRheU9mWWVhcjt2YXIgdWM9eyItIjoiIixfOiIgIiwwOiIwIn0saWM9L15ccypcZCsvLG9jPS9eJS87WG8ubG9jYWxlPWZ1bmN0aW9uKG4pe3JldHVybntudW1iZXJGb3JtYXQ6VHQobiksdGltZUZvcm1hdDpQdChuKX19O3ZhciBhYz1Yby5sb2NhbGUoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLGRhdGVUaW1lOiIlYSAlYiAlZSAlWCAlWSIsZGF0ZToiJW0vJWQvJVkiLHRpbWU6IiVIOiVNOiVTIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO1hvLmZvcm1hdD1hYy5udW1iZXJGb3JtYXQsWG8uZ2VvPXt9LHJlLnByb3RvdHlwZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24obil7dWUobix0aGlzLnQsY2MpLHVlKGNjLnMsdGhpcy5zLHRoaXMpLHRoaXMucz90aGlzLnQrPWNjLnQ6dGhpcy5zPWNjLnR9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBjYz1uZXcgcmU7WG8uZ2VvLnN0cmVhbT1mdW5jdGlvbihuLHQpe24mJnNjLmhhc093blByb3BlcnR5KG4udHlwZSk/c2Nbbi50eXBlXShuLHQpOmllKG4sdCl9O3ZhciBzYz17RmVhdHVyZTpmdW5jdGlvbihuLHQpe2llKG4uZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uZmVhdHVyZXMscj0tMSx1PWUubGVuZ3RoOysrcjx1OylpZShlW3JdLmdlb21ldHJ5LHQpfX0sbGM9e1NwaGVyZTpmdW5jdGlvbihuLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKG4sdCl7bj1uLmNvb3JkaW5hdGVzLHQucG9pbnQoblswXSxuWzFdLG5bMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUubGVuZ3RoOysrcjx1OyluPWVbcl0sdC5wb2ludChuWzBdLG5bMV0sblsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24obix0KXtvZShuLmNvb3JkaW5hdGVzLHQsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZT1uLmNvb3JkaW5hdGVzLHI9LTEsdT1lLmxlbmd0aDsrK3I8dTspb2UoZVtyXSx0LDApfSxQb2x5Z29uOmZ1bmN0aW9uKG4sdCl7YWUobi5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUubGVuZ3RoOysrcjx1OylhZShlW3JdLHQpfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9bi5nZW9tZXRyaWVzLHI9LTEsdT1lLmxlbmd0aDsrK3I8dTspaWUoZVtyXSx0KX19O1hvLmdlby5hcmVhPWZ1bmN0aW9uKG4pe3JldHVybiBmYz0wLFhvLmdlby5zdHJlYW0obixnYyksZmN9O3ZhciBmYyxoYz1uZXcgcmUsZ2M9e3NwaGVyZTpmdW5jdGlvbigpe2ZjKz00KlNhfSxwb2ludDpnLGxpbmVTdGFydDpnLGxpbmVFbmQ6Zyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtoYy5yZXNldCgpLGdjLmxpbmVTdGFydD1jZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBuPTIqaGM7ZmMrPTA+bj80KlNhK246bixnYy5saW5lU3RhcnQ9Z2MubGluZUVuZD1nYy5wb2ludD1nfX07WG8uZ2VvLmJvdW5kcz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix0KXt4LnB1c2goTT1bbD1uLGg9bl0pLGY+dCYmKGY9dCksdD5nJiYoZz10KX1mdW5jdGlvbiB0KHQsZSl7dmFyIHI9c2UoW3QqTmEsZSpOYV0pO2lmKG0pe3ZhciB1PWZlKG0sciksaT1bdVsxXSwtdVswXSwwXSxvPWZlKGksdSk7cGUobyksbz12ZShvKTt2YXIgYz10LXAscz1jPjA/MTotMSx2PW9bMF0qTGEqcyxkPW9hKGMpPjE4MDtpZihkXih2PnMqcCYmcyp0PnYpKXt2YXIgeT1vWzFdKkxhO3k+ZyYmKGc9eSl9ZWxzZSBpZih2PSh2KzM2MCklMzYwLTE4MCxkXih2PnMqcCYmcyp0PnYpKXt2YXIgeT0tb1sxXSpMYTtmPnkmJihmPXkpfWVsc2UgZj5lJiYoZj1lKSxlPmcmJihnPWUpO2Q/cD50P2EobCx0KT5hKGwsaCkmJihoPXQpOmEodCxoKT5hKGwsaCkmJihsPXQpOmg+PWw/KGw+dCYmKGw9dCksdD5oJiYoaD10KSk6dD5wP2EobCx0KT5hKGwsaCkmJihoPXQpOmEodCxoKT5hKGwsaCkmJihsPXQpfWVsc2Ugbih0LGUpO209cixwPXR9ZnVuY3Rpb24gZSgpe18ucG9pbnQ9dH1mdW5jdGlvbiByKCl7TVswXT1sLE1bMV09aCxfLnBvaW50PW4sbT1udWxsfWZ1bmN0aW9uIHUobixlKXtpZihtKXt2YXIgcj1uLXA7eSs9b2Eocik+MTgwP3IrKHI+MD8zNjA6LTM2MCk6cn1lbHNlIHY9bixkPWU7Z2MucG9pbnQobixlKSx0KG4sZSl9ZnVuY3Rpb24gaSgpe2djLmxpbmVTdGFydCgpfWZ1bmN0aW9uIG8oKXt1KHYsZCksZ2MubGluZUVuZCgpLG9hKHkpPkFhJiYobD0tKGg9MTgwKSksTVswXT1sLE1bMV09aCxtPW51bGx9ZnVuY3Rpb24gYShuLHQpe3JldHVybih0LT1uKTwwP3QrMzYwOnR9ZnVuY3Rpb24gYyhuLHQpe3JldHVybiBuWzBdLXRbMF19ZnVuY3Rpb24gcyhuLHQpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PW4mJm48PXRbMV06bjx0WzBdfHx0WzFdPG59dmFyIGwsZixoLGcscCx2LGQsbSx5LHgsTSxfPXtwb2ludDpuLGxpbmVTdGFydDplLGxpbmVFbmQ6cixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtfLnBvaW50PXUsXy5saW5lU3RhcnQ9aSxfLmxpbmVFbmQ9byx5PTAsZ2MucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtnYy5wb2x5Z29uRW5kKCksXy5wb2ludD1uLF8ubGluZVN0YXJ0PWUsXy5saW5lRW5kPXIsMD5oYz8obD0tKGg9MTgwKSxmPS0oZz05MCkpOnk+QWE/Zz05MDotQWE+eSYmKGY9LTkwKSxNWzBdPWwsTVsxXT1ofX07cmV0dXJuIGZ1bmN0aW9uKG4pe2c9aD0tKGw9Zj0xLzApLHg9W10sWG8uZ2VvLnN0cmVhbShuLF8pO3ZhciB0PXgubGVuZ3RoO2lmKHQpe3guc29ydChjKTtmb3IodmFyIGUscj0xLHU9eFswXSxpPVt1XTt0PnI7KytyKWU9eFtyXSxzKGVbMF0sdSl8fHMoZVsxXSx1KT8oYSh1WzBdLGVbMV0pPmEodVswXSx1WzFdKSYmKHVbMV09ZVsxXSksYShlWzBdLHVbMV0pPmEodVswXSx1WzFdKSYmKHVbMF09ZVswXSkpOmkucHVzaCh1PWUpO2Zvcih2YXIgbyxlLHA9LTEvMCx0PWkubGVuZ3RoLTEscj0wLHU9aVt0XTt0Pj1yO3U9ZSwrK3IpZT1pW3JdLChvPWEodVsxXSxlWzBdKSk+cCYmKHA9byxsPWVbMF0saD11WzFdKX1yZXR1cm4geD1NPW51bGwsMS8wPT09bHx8MS8wPT09Zj9bWzAvMCwwLzBdLFswLzAsMC8wXV06W1tsLGZdLFtoLGddXX19KCksWG8uZ2VvLmNlbnRyb2lkPWZ1bmN0aW9uKG4pe3BjPXZjPWRjPW1jPXljPXhjPU1jPV9jPWJjPXdjPVNjPTAsWG8uZ2VvLnN0cmVhbShuLGtjKTt2YXIgdD1iYyxlPXdjLHI9U2MsdT10KnQrZSplK3IqcjtyZXR1cm4gQ2E+dSYmKHQ9eGMsZT1NYyxyPV9jLEFhPnZjJiYodD1kYyxlPW1jLHI9eWMpLHU9dCp0K2UqZStyKnIsQ2E+dSk/WzAvMCwwLzBdOltNYXRoLmF0YW4yKGUsdCkqTGEsWChyL01hdGguc3FydCh1KSkqTGFdfTt2YXIgcGMsdmMsZGMsbWMseWMseGMsTWMsX2MsYmMsd2MsU2Msa2M9e3NwaGVyZTpnLHBvaW50Om1lLGxpbmVTdGFydDp4ZSxsaW5lRW5kOk1lLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2tjLmxpbmVTdGFydD1fZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2tjLmxpbmVTdGFydD14ZX19LEVjPUVlKGJlLFRlLHplLFstU2EsLVNhLzJdKSxBYz0xZTk7WG8uZ2VvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgbix0LGUscix1LGksbz17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB1JiYodS52YWxpZD0hMSksdT1pKG4pLHUudmFsaWQ9ITAsdX0sZXh0ZW50OmZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVBlKG49K2FbMF1bMF0sdD0rYVswXVsxXSxlPSthWzFdWzBdLHI9K2FbMV1bMV0pLHUmJih1LnZhbGlkPSExLHU9bnVsbCksbyk6W1tuLHRdLFtlLHJdXX19O3JldHVybiBvLmV4dGVudChbWzAsMF0sWzk2MCw1MDBdXSl9LChYby5nZW8uY29uaWNFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gamUoSGUpfSkucmF3PUhlLFhvLmdlby5hbGJlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gWG8uZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCl9LFhvLmdlby5hbGJlcnNVc2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3ZhciBpPW5bMF0sbz1uWzFdO3JldHVybiB0PW51bGwsZShpLG8pLHR8fChyKGksbyksdCl8fHUoaSxvKSx0fXZhciB0LGUscix1LGk9WG8uZ2VvLmFsYmVycygpLG89WG8uZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxhPVhvLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxjPXtwb2ludDpmdW5jdGlvbihuLGUpe3Q9W24sZV19fTtyZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24obil7dmFyIHQ9aS5zY2FsZSgpLGU9aS50cmFuc2xhdGUoKSxyPShuWzBdLWVbMF0pL3QsdT0oblsxXS1lWzFdKS90O3JldHVybih1Pj0uMTImJi4yMzQ+dSYmcj49LS40MjUmJi0uMjE0PnI/bzp1Pj0uMTY2JiYuMjM0PnUmJnI+PS0uMjE0JiYtLjExNT5yP2E6aSkuaW52ZXJ0KG4pfSxuLnN0cmVhbT1mdW5jdGlvbihuKXt2YXIgdD1pLnN0cmVhbShuKSxlPW8uc3RyZWFtKG4pLHI9YS5zdHJlYW0obik7cmV0dXJue3BvaW50OmZ1bmN0aW9uKG4sdSl7dC5wb2ludChuLHUpLGUucG9pbnQobix1KSxyLnBvaW50KG4sdSl9LHNwaGVyZTpmdW5jdGlvbigpe3Quc3BoZXJlKCksZS5zcGhlcmUoKSxyLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGUubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLGUubGluZUVuZCgpLHIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpLGUucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLGUucG9seWdvbkVuZCgpLHIucG9seWdvbkVuZCgpfX19LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLnByZWNpc2lvbih0KSxvLnByZWNpc2lvbih0KSxhLnByZWNpc2lvbih0KSxuKTppLnByZWNpc2lvbigpfSxuLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLnNjYWxlKHQpLG8uc2NhbGUoLjM1KnQpLGEuc2NhbGUodCksbi50cmFuc2xhdGUoaS50cmFuc2xhdGUoKSkpOmkuc2NhbGUoKX0sbi50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGkudHJhbnNsYXRlKCk7dmFyIHM9aS5zY2FsZSgpLGw9K3RbMF0sZj0rdFsxXTtyZXR1cm4gZT1pLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbbC0uNDU1KnMsZi0uMjM4KnNdLFtsKy40NTUqcyxmKy4yMzgqc11dKS5zdHJlYW0oYykucG9pbnQscj1vLnRyYW5zbGF0ZShbbC0uMzA3KnMsZisuMjAxKnNdKS5jbGlwRXh0ZW50KFtbbC0uNDI1KnMrQWEsZisuMTIqcytBYV0sW2wtLjIxNCpzLUFhLGYrLjIzNCpzLUFhXV0pLnN0cmVhbShjKS5wb2ludCx1PWEudHJhbnNsYXRlKFtsLS4yMDUqcyxmKy4yMTIqc10pLmNsaXBFeHRlbnQoW1tsLS4yMTQqcytBYSxmKy4xNjYqcytBYV0sW2wtLjExNSpzLUFhLGYrLjIzNCpzLUFhXV0pLnN0cmVhbShjKS5wb2ludCxufSxuLnNjYWxlKDEwNzApfTt2YXIgQ2MsTmMsTGMsVGMscWMsemMsUmM9e3BvaW50OmcsbGluZVN0YXJ0OmcsbGluZUVuZDpnLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe05jPTAsUmMubGluZVN0YXJ0PUZlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7UmMubGluZVN0YXJ0PVJjLmxpbmVFbmQ9UmMucG9pbnQ9ZyxDYys9b2EoTmMvMil9fSxEYz17cG9pbnQ6T2UsbGluZVN0YXJ0OmcsbGluZUVuZDpnLHBvbHlnb25TdGFydDpnLHBvbHlnb25FbmQ6Z30sUGM9e3BvaW50OlplLGxpbmVTdGFydDpWZSxsaW5lRW5kOlhlLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1BjLmxpbmVTdGFydD0kZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1BjLnBvaW50PVplLFBjLmxpbmVTdGFydD1WZSxQYy5saW5lRW5kPVhlfX07WG8uZ2VvLnBhdGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3JldHVybiBuJiYoImZ1bmN0aW9uIj09dHlwZW9mIGEmJmkucG9pbnRSYWRpdXMoK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxvJiZvLnZhbGlkfHwobz11KGkpKSxYby5nZW8uc3RyZWFtKG4sbykpLGkucmVzdWx0KCl9ZnVuY3Rpb24gdCgpe3JldHVybiBvPW51bGwsbn12YXIgZSxyLHUsaSxvLGE9NC41O3JldHVybiBuLmFyZWE9ZnVuY3Rpb24obil7cmV0dXJuIENjPTAsWG8uZ2VvLnN0cmVhbShuLHUoUmMpKSxDY30sbi5jZW50cm9pZD1mdW5jdGlvbihuKXtyZXR1cm4gZGM9bWM9eWM9eGM9TWM9X2M9YmM9d2M9U2M9MCxYby5nZW8uc3RyZWFtKG4sdShQYykpLFNjP1tiYy9TYyx3Yy9TY106X2M/W3hjL19jLE1jL19jXTp5Yz9bZGMveWMsbWMveWNdOlswLzAsMC8wXX0sbi5ib3VuZHM9ZnVuY3Rpb24obil7cmV0dXJuIHFjPXpjPS0oTGM9VGM9MS8wKSxYby5nZW8uc3RyZWFtKG4sdShEYykpLFtbTGMsVGNdLFtxYyx6Y11dfSxuLnByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9KGU9bik/bi5zdHJlYW18fEplKG4pOmJ0LHQoKSk6ZX0sbi5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShyPW4pP25ldyBZZTpuZXcgQmUobiksImZ1bmN0aW9uIiE9dHlwZW9mIGEmJmkucG9pbnRSYWRpdXMoYSksdCgpKTpyfSxuLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KGkucG9pbnRSYWRpdXMoK3QpLCt0KSxuKTphfSxuLnByb2plY3Rpb24oWG8uZ2VvLmFsYmVyc1VzYSgpKS5jb250ZXh0KG51bGwpfSxYby5nZW8udHJhbnNmb3JtPWZ1bmN0aW9uKG4pe3JldHVybntzdHJlYW06ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEdlKHQpO2Zvcih2YXIgciBpbiBuKWVbcl09bltyXTtyZXR1cm4gZX19fSxHZS5wcm90b3R5cGU9e3BvaW50OmZ1bmN0aW9uKG4sdCl7dGhpcy5zdHJlYW0ucG9pbnQobix0KX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19LFhvLmdlby5wcm9qZWN0aW9uPVFlLFhvLmdlby5wcm9qZWN0aW9uTXV0YXRvcj1uciwoWG8uZ2VvLmVxdWlyZWN0YW5ndWxhcj1mdW5jdGlvbigpe3JldHVybiBRZShlcil9KS5yYXc9ZXIuaW52ZXJ0PWVyLFhvLmdlby5yb3RhdGlvbj1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KHQpe3JldHVybiB0PW4odFswXSpOYSx0WzFdKk5hKSx0WzBdKj1MYSx0WzFdKj1MYSx0fXJldHVybiBuPXVyKG5bMF0lMzYwKk5hLG5bMV0qTmEsbi5sZW5ndGg+Mj9uWzJdKk5hOjApLHQuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0PW4uaW52ZXJ0KHRbMF0qTmEsdFsxXSpOYSksdFswXSo9TGEsdFsxXSo9TGEsdH0sdH0scnIuaW52ZXJ0PWVyLFhvLmdlby5jaXJjbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cix0PXVyKC1uWzBdKk5hLC1uWzFdKk5hLDApLmludmVydCx1PVtdO3JldHVybiBlKG51bGwsbnVsbCwxLHtwb2ludDpmdW5jdGlvbihuLGUpe3UucHVzaChuPXQobixlKSksblswXSo9TGEsblsxXSo9TGF9fSkse3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt1XX19dmFyIHQsZSxyPVswLDBdLHU9NjtyZXR1cm4gbi5vcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLmFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWNyKCh0PStyKSpOYSx1Kk5hKSxuKTp0fSxuLnByZWNpc2lvbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1jcih0Kk5hLCh1PStyKSpOYSksbik6dX0sbi5hbmdsZSg5MCl9LFhvLmdlby5kaXN0YW5jZT1mdW5jdGlvbihuLHQpe3ZhciBlLHI9KHRbMF0tblswXSkqTmEsdT1uWzFdKk5hLGk9dFsxXSpOYSxvPU1hdGguc2luKHIpLGE9TWF0aC5jb3MociksYz1NYXRoLnNpbih1KSxzPU1hdGguY29zKHUpLGw9TWF0aC5zaW4oaSksZj1NYXRoLmNvcyhpKTtyZXR1cm4gTWF0aC5hdGFuMihNYXRoLnNxcnQoKGU9ZipvKSplKyhlPXMqbC1jKmYqYSkqZSksYypsK3MqZiphKX0sWG8uZ2VvLmdyYXRpY3VsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp0KCl9fWZ1bmN0aW9uIHQoKXtyZXR1cm4gWG8ucmFuZ2UoTWF0aC5jZWlsKGkvZCkqZCx1LGQpLm1hcChoKS5jb25jYXQoWG8ucmFuZ2UoTWF0aC5jZWlsKHMvbSkqbSxjLG0pLm1hcChnKSkuY29uY2F0KFhvLnJhbmdlKE1hdGguY2VpbChyL3ApKnAsZSxwKS5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG9hKG4lZCk+QWF9KS5tYXAobCkpLmNvbmNhdChYby5yYW5nZShNYXRoLmNlaWwoYS92KSp2LG8sdikuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBvYShuJW0pPkFhfSkubWFwKGYpKX12YXIgZSxyLHUsaSxvLGEsYyxzLGwsZixoLGcscD0xMCx2PXAsZD05MCxtPTM2MCx5PTIuNTtyZXR1cm4gbi5saW5lcz1mdW5jdGlvbigpe3JldHVybiB0KCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpufX0pfSxuLm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2goaSkuY29uY2F0KGcoYykuc2xpY2UoMSksaCh1KS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LG4uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24ubWFqb3JFeHRlbnQodCkubWlub3JFeHRlbnQodCk6bi5taW5vckV4dGVudCgpfSxuLm1ham9yRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0WzBdWzBdLHU9K3RbMV1bMF0scz0rdFswXVsxXSxjPSt0WzFdWzFdLGk+dSYmKHQ9aSxpPXUsdT10KSxzPmMmJih0PXMscz1jLGM9dCksbi5wcmVjaXNpb24oeSkpOltbaSxzXSxbdSxjXV19LG4ubWlub3JFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF1bMF0sZT0rdFsxXVswXSxhPSt0WzBdWzFdLG89K3RbMV1bMV0scj5lJiYodD1yLHI9ZSxlPXQpLGE+byYmKHQ9YSxhPW8sbz10KSxuLnByZWNpc2lvbih5KSk6W1tyLGFdLFtlLG9dXX0sbi5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24ubWFqb3JTdGVwKHQpLm1pbm9yU3RlcCh0KTpuLm1pbm9yU3RlcCgpfSxuLm1ham9yU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdFswXSxtPSt0WzFdLG4pOltkLG1dfSxuLm1pbm9yU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdFswXSx2PSt0WzFdLG4pOltwLHZdfSxuLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0rdCxsPWxyKGEsbyw5MCksZj1mcihyLGUseSksaD1scihzLGMsOTApLGc9ZnIoaSx1LHkpLG4pOnl9LG4ubWFqb3JFeHRlbnQoW1stMTgwLC05MCtBYV0sWzE4MCw5MC1BYV1dKS5taW5vckV4dGVudChbWy0xODAsLTgwLUFhXSxbMTgwLDgwK0FhXV0pfSxYby5nZW8uZ3JlYXRBcmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOlt0fHxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlfHx1LmFwcGx5KHRoaXMsYXJndW1lbnRzKV19fXZhciB0LGUscj1ocix1PWdyO3JldHVybiBuLmRpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIFhvLmdlby5kaXN0YW5jZSh0fHxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlfHx1LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsdD0iZnVuY3Rpb24iPT10eXBlb2YgZT9udWxsOmUsbik6cn0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P251bGw6dCxuKTp1fSxuLnByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP246MH0sbn0sWG8uZ2VvLmludGVycG9sYXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHByKG5bMF0qTmEsblsxXSpOYSx0WzBdKk5hLHRbMV0qTmEpfSxYby5nZW8ubGVuZ3RoPWZ1bmN0aW9uKG4pe3JldHVybiBVYz0wLFhvLmdlby5zdHJlYW0obixqYyksVWN9O3ZhciBVYyxqYz17c3BoZXJlOmcscG9pbnQ6ZyxsaW5lU3RhcnQ6dnIsbGluZUVuZDpnLHBvbHlnb25TdGFydDpnLHBvbHlnb25FbmQ6Z30sSGM9ZHIoZnVuY3Rpb24obil7cmV0dXJuIE1hdGguc3FydCgyLygxK24pKX0sZnVuY3Rpb24obil7cmV0dXJuIDIqTWF0aC5hc2luKG4vMil9KTsoWG8uZ2VvLmF6aW11dGhhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBRZShIYyl9KS5yYXc9SGM7dmFyIEZjPWRyKGZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguYWNvcyhuKTtyZXR1cm4gdCYmdC9NYXRoLnNpbih0KX0sYnQpOyhYby5nZW8uYXppbXV0aGFsRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gUWUoRmMpfSkucmF3PUZjLChYby5nZW8uY29uaWNDb25mb3JtYWw9ZnVuY3Rpb24oKXtyZXR1cm4gamUobXIpfSkucmF3PW1yLChYby5nZW8uY29uaWNFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBqZSh5cil9KS5yYXc9eXI7dmFyIE9jPWRyKGZ1bmN0aW9uKG4pe3JldHVybiAxL259LE1hdGguYXRhbik7KFhvLmdlby5nbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBRZShPYyl9KS5yYXc9T2MseHIuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuW24sMipNYXRoLmF0YW4oTWF0aC5leHAodCkpLUVhXX0sKFhvLmdlby5tZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiBNcih4cil9KS5yYXc9eHI7dmFyIFljPWRyKGZ1bmN0aW9uKCl7cmV0dXJuIDF9LE1hdGguYXNpbik7KFhvLmdlby5vcnRob2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gUWUoWWMpfSkucmF3PVljO3ZhciBJYz1kcihmdW5jdGlvbihuKXtyZXR1cm4gMS8oMStuKX0sZnVuY3Rpb24obil7cmV0dXJuIDIqTWF0aC5hdGFuKG4pfSk7KFhvLmdlby5zdGVyZW9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIFFlKEljKX0pLnJhdz1JYyxfci5pbnZlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm5bLXQsMipNYXRoLmF0YW4oTWF0aC5leHAobikpLUVhXX0sKFhvLmdlby50cmFuc3ZlcnNlTWVyY2F0b3I9ZnVuY3Rpb24oKXt2YXIgbj1NcihfciksdD1uLmNlbnRlcixlPW4ucm90YXRlO3JldHVybiBuLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj90KFstblsxXSxuWzBdXSk6KG49dCgpLFstblsxXSxuWzBdXSl9LG4ucm90YXRlPWZ1bmN0aW9uKG4pe3JldHVybiBuP2UoW25bMF0sblsxXSxuLmxlbmd0aD4yP25bMl0rOTA6OTBdKToobj1lKCksW25bMF0sblsxXSxuWzJdLTkwXSl9LG4ucm90YXRlKFswLDBdKX0pLnJhdz1fcixYby5nZW9tPXt9LFhvLmdlb20uaHVsbD1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KG4pe2lmKG4ubGVuZ3RoPDMpcmV0dXJuW107dmFyIHQsdT1fdChlKSxpPV90KHIpLG89bi5sZW5ndGgsYT1bXSxjPVtdO2Zvcih0PTA7bz50O3QrKylhLnB1c2goWyt1LmNhbGwodGhpcyxuW3RdLHQpLCtpLmNhbGwodGhpcyxuW3RdLHQpLHRdKTtmb3IoYS5zb3J0KGtyKSx0PTA7bz50O3QrKyljLnB1c2goW2FbdF1bMF0sLWFbdF1bMV1dKTt2YXIgcz1TcihhKSxsPVNyKGMpLGY9bFswXT09PXNbMF0saD1sW2wubGVuZ3RoLTFdPT09c1tzLmxlbmd0aC0xXSxnPVtdO2Zvcih0PXMubGVuZ3RoLTE7dD49MDstLXQpZy5wdXNoKG5bYVtzW3RdXVsyXV0pO2Zvcih0PStmO3Q8bC5sZW5ndGgtaDsrK3QpZy5wdXNoKG5bYVtsW3RdXVsyXV0pO3JldHVybiBnfXZhciBlPWJyLHI9d3I7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChuKToodC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdCl9LFhvLmdlb20ucG9seWdvbj1mdW5jdGlvbihuKXtyZXR1cm4gZmEobixaYyksbn07dmFyIFpjPVhvLmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107WmMuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PS0xLGU9dGhpcy5sZW5ndGgscj10aGlzW2UtMV0sdT0wOysrdDxlOyluPXIscj10aGlzW3RdLHUrPW5bMV0qclswXS1uWzBdKnJbMV07cmV0dXJuLjUqdX0sWmMuY2VudHJvaWQ9ZnVuY3Rpb24obil7dmFyIHQsZSxyPS0xLHU9dGhpcy5sZW5ndGgsaT0wLG89MCxhPXRoaXNbdS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KG49LTEvKDYqdGhpcy5hcmVhKCkpKTsrK3I8dTspdD1hLGE9dGhpc1tyXSxlPXRbMF0qYVsxXS1hWzBdKnRbMV0saSs9KHRbMF0rYVswXSkqZSxvKz0odFsxXSthWzFdKSplO3JldHVybltpKm4sbypuXX0sWmMuY2xpcD1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyLHUsaSxvLGE9Q3IobiksYz0tMSxzPXRoaXMubGVuZ3RoLUNyKHRoaXMpLGw9dGhpc1tzLTFdOysrYzxzOyl7Zm9yKHQ9bi5zbGljZSgpLG4ubGVuZ3RoPTAsdT10aGlzW2NdLGk9dFsocj10Lmxlbmd0aC1hKS0xXSxlPS0xOysrZTxyOylvPXRbZV0sRXIobyxsLHUpPyhFcihpLGwsdSl8fG4ucHVzaChBcihpLG8sbCx1KSksbi5wdXNoKG8pKTpFcihpLGwsdSkmJm4ucHVzaChBcihpLG8sbCx1KSksaT1vO2EmJm4ucHVzaChuWzBdKSxsPXV9cmV0dXJuIG59O3ZhciBWYyxYYywkYyxCYyxXYyxKYz1bXSxHYz1bXTtQci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXRoaXMuZWRnZXMsZT10Lmxlbmd0aDtlLS07KW49dFtlXS5lZGdlLG4uYiYmbi5hfHx0LnNwbGljZShlLDEpO3JldHVybiB0LnNvcnQoanIpLHQubGVuZ3RofSxCci5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9fSxXci5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLHIsdTtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49UXIodGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspcj1lLlUsZT09PXIuTD8odT1yLlIsdSYmdS5DPyhlLkM9dS5DPSExLHIuQz0hMCxuPXIpOihuPT09ZS5SJiYoR3IodGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxyLkM9ITAsS3IodGhpcyxyKSkpOih1PXIuTCx1JiZ1LkM/KGUuQz11LkM9ITEsci5DPSEwLG49cik6KG49PT1lLkwmJihLcih0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLHIuQz0hMCxHcih0aGlzLHIpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0LGUscix1PW4uVSxpPW4uTCxvPW4uUjtpZihlPWk/bz9RcihvKTppOm8sdT91Lkw9PT1uP3UuTD1lOnUuUj1lOnRoaXMuXz1lLGkmJm8/KHI9ZS5DLGUuQz1uLkMsZS5MPWksaS5VPWUsZSE9PW8/KHU9ZS5VLGUuVT1uLlUsbj1lLlIsdS5MPW4sZS5SPW8sby5VPWUpOihlLlU9dSx1PWUsbj1lLlIpKToocj1uLkMsbj1lKSxuJiYobi5VPXUpLCFyKXtpZihuJiZuLkMpcmV0dXJuIG4uQz0hMSx2b2lkIDA7ZG97aWYobj09PXRoaXMuXylicmVhaztpZihuPT09dS5MKXtpZih0PXUuUix0LkMmJih0LkM9ITEsdS5DPSEwLEdyKHRoaXMsdSksdD11LlIpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuUiYmdC5SLkN8fCh0LkwuQz0hMSx0LkM9ITAsS3IodGhpcyx0KSx0PXUuUiksdC5DPXUuQyx1LkM9dC5SLkM9ITEsR3IodGhpcyx1KSxuPXRoaXMuXzticmVha319ZWxzZSBpZih0PXUuTCx0LkMmJih0LkM9ITEsdS5DPSEwLEtyKHRoaXMsdSksdD11LkwpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuTCYmdC5MLkN8fCh0LlIuQz0hMSx0LkM9ITAsR3IodGhpcyx0KSx0PXUuTCksdC5DPXUuQyx1LkM9dC5MLkM9ITEsS3IodGhpcyx1KSxuPXRoaXMuXzticmVha310LkM9ITAsbj11LHU9dS5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19LFhvLmdlb20udm9yb25vaT1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KG4pe3ZhciB0PW5ldyBBcnJheShuLmxlbmd0aCkscj1hWzBdWzBdLHU9YVswXVsxXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiBudShlKG4pLGEpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oZSxhKXt2YXIgYz1lLmVkZ2VzLHM9ZS5zaXRlLGw9dFthXT1jLmxlbmd0aD9jLm1hcChmdW5jdGlvbihuKXt2YXIgdD1uLnN0YXJ0KCk7cmV0dXJuW3QueCx0LnldfSk6cy54Pj1yJiZzLng8PWkmJnMueT49dSYmcy55PD1vP1tbcixvXSxbaSxvXSxbaSx1XSxbcix1XV06W107bC5wb2ludD1uW2FdfSksdH1mdW5jdGlvbiBlKG4pe3JldHVybiBuLm1hcChmdW5jdGlvbihuLHQpe3JldHVybnt4Ok1hdGgucm91bmQoaShuLHQpL0FhKSpBYSx5Ok1hdGgucm91bmQobyhuLHQpL0FhKSpBYSxpOnR9fSl9dmFyIHI9YnIsdT13cixpPXIsbz11LGE9S2M7cmV0dXJuIG4/dChuKToodC5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gbnUoZShuKSkuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLmwmJm4ucn0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOm5bdC5sLmldLHRhcmdldDpuW3Quci5pXX19KX0sdC50cmlhbmdsZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107cmV0dXJuIG51KGUobikpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oZSxyKXtmb3IodmFyIHUsaSxvPWUuc2l0ZSxhPWUuZWRnZXMuc29ydChqciksYz0tMSxzPWEubGVuZ3RoLGw9YVtzLTFdLmVkZ2UsZj1sLmw9PT1vP2wucjpsLmw7KytjPHM7KXU9bCxpPWYsbD1hW2NdLmVkZ2UsZj1sLmw9PT1vP2wucjpsLmwscjxpLmkmJnI8Zi5pJiZldShvLGksZik8MCYmdC5wdXNoKFtuW3JdLG5baS5pXSxuW2YuaV1dKX0pLHR9LHQueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1fdChyPW4pLHQpOnJ9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1fdCh1PW4pLHQpOnV9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT1uP0tjOm4sdCk6YT09PUtjP251bGw6YX0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuY2xpcEV4dGVudChuJiZbWzAsMF0sbl0pOmE9PT1LYz9udWxsOmEmJmFbMV19LHQpfTt2YXIgS2M9W1stMWU2LC0xZTZdLFsxZTYsMWU2XV07WG8uZ2VvbS5kZWxhdW5heT1mdW5jdGlvbihuKXtyZXR1cm4gWG8uZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKG4pfSxYby5nZW9tLnF1YWR0cmVlPWZ1bmN0aW9uKG4sdCxlLHIsdSl7ZnVuY3Rpb24gaShuKXtmdW5jdGlvbiBpKG4sdCxlLHIsdSxpLG8sYSl7aWYoIWlzTmFOKGUpJiYhaXNOYU4ocikpaWYobi5sZWFmKXt2YXIgYz1uLngsbD1uLnk7aWYobnVsbCE9YylpZihvYShjLWUpK29hKGwtcik8LjAxKXMobix0LGUscix1LGksbyxhKTtlbHNle3ZhciBmPW4ucG9pbnQ7bi54PW4ueT1uLnBvaW50PW51bGwscyhuLGYsYyxsLHUsaSxvLGEpLHMobix0LGUscix1LGksbyxhKX1lbHNlIG4ueD1lLG4ueT1yLG4ucG9pbnQ9dH1lbHNlIHMobix0LGUscix1LGksbyxhKX1mdW5jdGlvbiBzKG4sdCxlLHIsdSxvLGEsYyl7dmFyIHM9LjUqKHUrYSksbD0uNSoobytjKSxmPWU+PXMsaD1yPj1sLGc9KGg8PDEpK2Y7bi5sZWFmPSExLG49bi5ub2Rlc1tnXXx8KG4ubm9kZXNbZ109aXUoKSksZj91PXM6YT1zLGg/bz1sOmM9bCxpKG4sdCxlLHIsdSxvLGEsYyl9dmFyIGwsZixoLGcscCx2LGQsbSx5LHg9X3QoYSksTT1fdChjKTtpZihudWxsIT10KXY9dCxkPWUsbT1yLHk9dTtlbHNlIGlmKG09eT0tKHY9ZD0xLzApLGY9W10saD1bXSxwPW4ubGVuZ3RoLG8pZm9yKGc9MDtwPmc7KytnKWw9bltnXSxsLng8diYmKHY9bC54KSxsLnk8ZCYmKGQ9bC55KSxsLng+bSYmKG09bC54KSxsLnk+eSYmKHk9bC55KSxmLnB1c2gobC54KSxoLnB1c2gobC55KTtlbHNlIGZvcihnPTA7cD5nOysrZyl7dmFyIF89K3gobD1uW2ddLGcpLGI9K00obCxnKTt2Pl8mJih2PV8pLGQ+YiYmKGQ9YiksXz5tJiYobT1fKSxiPnkmJih5PWIpLGYucHVzaChfKSxoLnB1c2goYil9dmFyIHc9bS12LFM9eS1kO3c+Uz95PWQrdzptPXYrUzt2YXIgaz1pdSgpO2lmKGsuYWRkPWZ1bmN0aW9uKG4pe2koayxuLCt4KG4sKytnKSwrTShuLGcpLHYsZCxtLHkpfSxrLnZpc2l0PWZ1bmN0aW9uKG4pe291KG4sayx2LGQsbSx5KX0sZz0tMSxudWxsPT10KXtmb3IoOysrZzxwOylpKGssbltnXSxmW2ddLGhbZ10sdixkLG0seSk7LS1nfWVsc2Ugbi5mb3JFYWNoKGsuYWRkKTtyZXR1cm4gZj1oPW49bD1udWxsLGt9dmFyIG8sYT1icixjPXdyO3JldHVybihvPWFyZ3VtZW50cy5sZW5ndGgpPyhhPXJ1LGM9dXUsMz09PW8mJih1PWUscj10LGU9dD0wKSxpKG4pKTooaS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW4saSk6YX0saS55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW4saSk6Y30saS5leHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PW4/dD1lPXI9dT1udWxsOih0PStuWzBdWzBdLGU9K25bMF1bMV0scj0rblsxXVswXSx1PStuWzFdWzFdKSxpKTpudWxsPT10P251bGw6W1t0LGVdLFtyLHVdXX0saS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP3Q9ZT1yPXU9bnVsbDoodD1lPTAscj0rblswXSx1PStuWzFdKSxpKTpudWxsPT10P251bGw6W3ItdCx1LWVdfSxpKX0sWG8uaW50ZXJwb2xhdGVSZ2I9YXUsWG8uaW50ZXJwb2xhdGVPYmplY3Q9Y3UsWG8uaW50ZXJwb2xhdGVOdW1iZXI9c3UsWG8uaW50ZXJwb2xhdGVTdHJpbmc9bHU7dmFyIFFjPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZztYby5pbnRlcnBvbGF0ZT1mdSxYby5pbnRlcnBvbGF0b3JzPVtmdW5jdGlvbihuLHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybigic3RyaW5nIj09PWU/VmEuaGFzKHQpfHwvXigjfHJnYlwofGhzbFwoKS8udGVzdCh0KT9hdTpsdTp0IGluc3RhbmNlb2YgRz9hdToib2JqZWN0Ij09PWU/QXJyYXkuaXNBcnJheSh0KT9odTpjdTpzdSkobix0KX1dLFhvLmludGVycG9sYXRlQXJyYXk9aHU7dmFyIG5zPWZ1bmN0aW9uKCl7cmV0dXJuIGJ0fSx0cz1Yby5tYXAoe2xpbmVhcjpucyxwb2x5Onh1LHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZHV9LGN1YmljOmZ1bmN0aW9uKCl7cmV0dXJuIG11fSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gTXV9LGV4cDpmdW5jdGlvbigpe3JldHVybiBfdX0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIGJ1fSxlbGFzdGljOnd1LGJhY2s6U3UsYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIGt1fX0pLGVzPVhvLm1hcCh7ImluIjpidCxvdXQ6cHUsImluLW91dCI6dnUsIm91dC1pbiI6ZnVuY3Rpb24obil7cmV0dXJuIHZ1KHB1KG4pKX19KTtYby5lYXNlPWZ1bmN0aW9uKG4pe3ZhciB0PW4uaW5kZXhPZigiLSIpLGU9dD49MD9uLnN1YnN0cmluZygwLHQpOm4scj10Pj0wP24uc3Vic3RyaW5nKHQrMSk6ImluIjtyZXR1cm4gZT10cy5nZXQoZSl8fG5zLHI9ZXMuZ2V0KHIpfHxidCxndShyKGUuYXBwbHkobnVsbCwkby5jYWxsKGFyZ3VtZW50cywxKSkpKX0sWG8uaW50ZXJwb2xhdGVIY2w9RXUsWG8uaW50ZXJwb2xhdGVIc2w9QXUsWG8uaW50ZXJwb2xhdGVMYWI9Q3UsWG8uaW50ZXJwb2xhdGVSb3VuZD1OdSxYby50cmFuc2Zvcm09ZnVuY3Rpb24obil7dmFyIHQ9V28uY3JlYXRlRWxlbWVudE5TKFhvLm5zLnByZWZpeC5zdmcsImciKTtyZXR1cm4oWG8udHJhbnNmb3JtPWZ1bmN0aW9uKG4pe2lmKG51bGwhPW4pe3Quc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLG4pO3ZhciBlPXQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKX1yZXR1cm4gbmV3IEx1KGU/ZS5tYXRyaXg6cnMpfSkobil9LEx1LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLnRyYW5zbGF0ZSsiKXJvdGF0ZSgiK3RoaXMucm90YXRlKyIpc2tld1goIit0aGlzLnNrZXcrIilzY2FsZSgiK3RoaXMuc2NhbGUrIikifTt2YXIgcnM9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTtYby5pbnRlcnBvbGF0ZVRyYW5zZm9ybT1SdSxYby5sYXlvdXQ9e30sWG8ubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXtmb3IodmFyIHQ9W10sZT0tMSxyPW4ubGVuZ3RoOysrZTxyOyl0LnB1c2goVXUobltlXSkpO3JldHVybiB0fX0sWG8ubGF5b3V0LmNob3JkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuLHMsZixoLGcscD17fSx2PVtdLGQ9WG8ucmFuZ2UoaSksbT1bXTtmb3IoZT1bXSxyPVtdLG49MCxoPS0xOysraDxpOyl7Zm9yKHM9MCxnPS0xOysrZzxpOylzKz11W2hdW2ddO3YucHVzaChzKSxtLnB1c2goWG8ucmFuZ2UoaSkpLG4rPXN9Zm9yKG8mJmQuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiBvKHZbbl0sdlt0XSl9KSxhJiZtLmZvckVhY2goZnVuY3Rpb24obix0KXtuLnNvcnQoZnVuY3Rpb24obixlKXtyZXR1cm4gYSh1W3RdW25dLHVbdF1bZV0pfSl9KSxuPShrYS1sKmkpL24scz0wLGg9LTE7KytoPGk7KXtmb3IoZj1zLGc9LTE7KytnPGk7KXt2YXIgeT1kW2hdLHg9bVt5XVtnXSxNPXVbeV1beF0sXz1zLGI9cys9TSpuO3BbeSsiLSIreF09e2luZGV4Onksc3ViaW5kZXg6eCxzdGFydEFuZ2xlOl8sZW5kQW5nbGU6Yix2YWx1ZTpNfX1yW3ldPXtpbmRleDp5LHN0YXJ0QW5nbGU6ZixlbmRBbmdsZTpzLHZhbHVlOihzLWYpL259LHMrPWx9Zm9yKGg9LTE7KytoPGk7KWZvcihnPWgtMTsrK2c8aTspe3ZhciB3PXBbaCsiLSIrZ10sUz1wW2crIi0iK2hdOyh3LnZhbHVlfHxTLnZhbHVlKSYmZS5wdXNoKHcudmFsdWU8Uy52YWx1ZT97c291cmNlOlMsdGFyZ2V0Ond9Ontzb3VyY2U6dyx0YXJnZXQ6U30pfWMmJnQoKX1mdW5jdGlvbiB0KCl7ZS5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGMoKG4uc291cmNlLnZhbHVlK24udGFyZ2V0LnZhbHVlKS8yLCh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSkvMil9KX12YXIgZSxyLHUsaSxvLGEsYyxzPXt9LGw9MDtyZXR1cm4gcy5tYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9KHU9bikmJnUubGVuZ3RoLGU9cj1udWxsLHMpOnV9LHMucGFkZGluZz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1uLGU9cj1udWxsLHMpOmx9LHMuc29ydEdyb3Vwcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1uLGU9cj1udWxsLHMpOm99LHMuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1uLGU9bnVsbCxzKTphfSxzLnNvcnRDaG9yZHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9bixlJiZ0KCkscyk6Y30scy5jaG9yZHM9ZnVuY3Rpb24oKXtyZXR1cm4gZXx8bigpLGV9LHMuZ3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIHJ8fG4oKSxyfSxzfSxYby5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3JldHVybiBmdW5jdGlvbih0LGUscix1KXtpZih0LnBvaW50IT09bil7dmFyIGk9dC5jeC1uLngsbz10LmN5LW4ueSxhPXUtZSxjPWkqaStvKm87aWYoYz5hKmEvZCl7aWYocD5jKXt2YXIgcz10LmNoYXJnZS9jO24ucHgtPWkqcyxuLnB5LT1vKnN9cmV0dXJuITB9aWYodC5wb2ludCYmYyYmcD5jKXt2YXIgcz10LnBvaW50Q2hhcmdlL2M7bi5weC09aSpzLG4ucHktPW8qc319cmV0dXJuIXQuY2hhcmdlfX1mdW5jdGlvbiB0KG4pe24ucHg9WG8uZXZlbnQueCxuLnB5PVhvLmV2ZW50LnksYS5yZXN1bWUoKX12YXIgZSxyLHUsaSxvLGE9e30sYz1Yby5kaXNwYXRjaCgic3RhcnQiLCJ0aWNrIiwiZW5kIikscz1bMSwxXSxsPS45LGY9dXMsaD1pcyxnPS0zMCxwPW9zLHY9LjEsZD0uNjQsbT1bXSx5PVtdO3JldHVybiBhLnRpY2s9ZnVuY3Rpb24oKXtpZigocio9Ljk5KTwuMDA1KXJldHVybiBjLmVuZCh7dHlwZToiZW5kIixhbHBoYTpyPTB9KSwhMDt2YXIgdCxlLGEsZixoLHAsZCx4LE0sXz1tLmxlbmd0aCxiPXkubGVuZ3RoO2ZvcihlPTA7Yj5lOysrZSlhPXlbZV0sZj1hLnNvdXJjZSxoPWEudGFyZ2V0LHg9aC54LWYueCxNPWgueS1mLnksKHA9eCp4K00qTSkmJihwPXIqaVtlXSooKHA9TWF0aC5zcXJ0KHApKS11W2VdKS9wLHgqPXAsTSo9cCxoLngtPXgqKGQ9Zi53ZWlnaHQvKGgud2VpZ2h0K2Yud2VpZ2h0KSksaC55LT1NKmQsZi54Kz14KihkPTEtZCksZi55Kz1NKmQpO2lmKChkPXIqdikmJih4PXNbMF0vMixNPXNbMV0vMixlPS0xLGQpKWZvcig7KytlPF87KWE9bVtlXSxhLngrPSh4LWEueCkqZCxhLnkrPShNLWEueSkqZDtpZihnKWZvcihadSh0PVhvLmdlb20ucXVhZHRyZWUobSkscixvKSxlPS0xOysrZTxfOykoYT1tW2VdKS5maXhlZHx8dC52aXNpdChuKGEpKTtmb3IoZT0tMTsrK2U8XzspYT1tW2VdLGEuZml4ZWQ/KGEueD1hLnB4LGEueT1hLnB5KTooYS54LT0oYS5weC0oYS5weD1hLngpKSpsLGEueS09KGEucHktKGEucHk9YS55KSkqbCk7Yy50aWNrKHt0eXBlOiJ0aWNrIixhbHBoYTpyfSl9LGEubm9kZXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09bixhKTptfSxhLmxpbmtzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PW4sYSk6eX0sYS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW4sYSk6c30sYS5saW5rRGlzdGFuY2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjorbixhKTpmfSxhLmRpc3RhbmNlPWEubGlua0Rpc3RhbmNlLGEubGlua1N0cmVuZ3RoPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246K24sYSk6aH0sYS5mcmljdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rbixhKTpsfSxhLmNoYXJnZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOituLGEpOmd9LGEuY2hhcmdlRGlzdGFuY2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9bipuLGEpOk1hdGguc3FydChwKX0sYS5ncmF2aXR5PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PStuLGEpOnZ9LGEudGhldGE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bipuLGEpOk1hdGguc3FydChkKX0sYS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rbixyP3I9bj4wP246MDpuPjAmJihjLnN0YXJ0KHt0eXBlOiJzdGFydCIsYWxwaGE6cj1ufSksWG8udGltZXIoYS50aWNrKSksYSk6cn0sYS5zdGFydD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixyKXtpZighZSl7Zm9yKGU9bmV3IEFycmF5KGMpLGE9MDtjPmE7KythKWVbYV09W107Zm9yKGE9MDtzPmE7KythKXt2YXIgdT15W2FdO2VbdS5zb3VyY2UuaW5kZXhdLnB1c2godS50YXJnZXQpLGVbdS50YXJnZXQuaW5kZXhdLnB1c2godS5zb3VyY2UpfX1mb3IodmFyIGksbz1lW3RdLGE9LTEscz1vLmxlbmd0aDsrK2E8czspaWYoIWlzTmFOKGk9b1thXVtuXSkpcmV0dXJuIGk7cmV0dXJuIE1hdGgucmFuZG9tKCkqcn12YXIgdCxlLHIsYz1tLmxlbmd0aCxsPXkubGVuZ3RoLHA9c1swXSx2PXNbMV07Zm9yKHQ9MDtjPnQ7Kyt0KShyPW1bdF0pLmluZGV4PXQsci53ZWlnaHQ9MDtmb3IodD0wO2w+dDsrK3Qpcj15W3RdLCJudW1iZXIiPT10eXBlb2Ygci5zb3VyY2UmJihyLnNvdXJjZT1tW3Iuc291cmNlXSksIm51bWJlciI9PXR5cGVvZiByLnRhcmdldCYmKHIudGFyZ2V0PW1bci50YXJnZXRdKSwrK3Iuc291cmNlLndlaWdodCwrK3IudGFyZ2V0LndlaWdodDtmb3IodD0wO2M+dDsrK3Qpcj1tW3RdLGlzTmFOKHIueCkmJihyLng9bigieCIscCkpLGlzTmFOKHIueSkmJihyLnk9bigieSIsdikpLGlzTmFOKHIucHgpJiYoci5weD1yLngpLGlzTmFOKHIucHkpJiYoci5weT1yLnkpO2lmKHU9W10sImZ1bmN0aW9uIj09dHlwZW9mIGYpZm9yKHQ9MDtsPnQ7Kyt0KXVbdF09K2YuY2FsbCh0aGlzLHlbdF0sdCk7ZWxzZSBmb3IodD0wO2w+dDsrK3QpdVt0XT1mO2lmKGk9W10sImZ1bmN0aW9uIj09dHlwZW9mIGgpZm9yKHQ9MDtsPnQ7Kyt0KWlbdF09K2guY2FsbCh0aGlzLHlbdF0sdCk7ZWxzZSBmb3IodD0wO2w+dDsrK3QpaVt0XT1oO2lmKG89W10sImZ1bmN0aW9uIj09dHlwZW9mIGcpZm9yKHQ9MDtjPnQ7Kyt0KW9bdF09K2cuY2FsbCh0aGlzLG1bdF0sdCk7ZWxzZSBmb3IodD0wO2M+dDsrK3Qpb1t0XT1nO3JldHVybiBhLnJlc3VtZSgpfSxhLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiBhLmFscGhhKC4xKX0sYS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWxwaGEoMCl9LGEuZHJhZz1mdW5jdGlvbigpe3JldHVybiBlfHwoZT1Yby5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGJ0KS5vbigiZHJhZ3N0YXJ0LmZvcmNlIixGdSkub24oImRyYWcuZm9yY2UiLHQpLm9uKCJkcmFnZW5kLmZvcmNlIixPdSkpLGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMub24oIm1vdXNlb3Zlci5mb3JjZSIsWXUpLm9uKCJtb3VzZW91dC5mb3JjZSIsSXUpLmNhbGwoZSksdm9pZCAwKTplfSxYby5yZWJpbmQoYSxjLCJvbiIpfTt2YXIgdXM9MjAsaXM9MSxvcz0xLzA7WG8ubGF5b3V0LmhpZXJhcmNoeT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCxvLGEpe3ZhciBjPXUuY2FsbChlLHQsbyk7aWYodC5kZXB0aD1vLGEucHVzaCh0KSxjJiYocz1jLmxlbmd0aCkpe2Zvcih2YXIgcyxsLGY9LTEsaD10LmNoaWxkcmVuPW5ldyBBcnJheShzKSxnPTAscD1vKzE7KytmPHM7KWw9aFtmXT1uKGNbZl0scCxhKSxsLnBhcmVudD10LGcrPWwudmFsdWU7ciYmaC5zb3J0KHIpLGkmJih0LnZhbHVlPWcpfWVsc2UgZGVsZXRlIHQuY2hpbGRyZW4saSYmKHQudmFsdWU9K2kuY2FsbChlLHQsbyl8fDApO3JldHVybiB0fWZ1bmN0aW9uIHQobixyKXt2YXIgdT1uLmNoaWxkcmVuLG89MDtpZih1JiYoYT11Lmxlbmd0aCkpZm9yKHZhciBhLGM9LTEscz1yKzE7KytjPGE7KW8rPXQodVtjXSxzKTtlbHNlIGkmJihvPStpLmNhbGwoZSxuLHIpfHwwKTtyZXR1cm4gaSYmKG4udmFsdWU9byksb31mdW5jdGlvbiBlKHQpe3ZhciBlPVtdO3JldHVybiBuKHQsMCxlKSxlfXZhciByPUJ1LHU9WHUsaT0kdTtyZXR1cm4gZS5zb3J0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sZSk6cn0sZS5jaGlsZHJlbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLGUpOnV9LGUudmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bixlKTppfSxlLnJldmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIHQobiwwKSxufSxlfSxYby5sYXlvdXQucGFydGl0aW9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGUscix1KXt2YXIgaT10LmNoaWxkcmVuO2lmKHQueD1lLHQueT10LmRlcHRoKnUsdC5keD1yLHQuZHk9dSxpJiYobz1pLmxlbmd0aCkpe3ZhciBvLGEsYyxzPS0xO2ZvcihyPXQudmFsdWU/ci90LnZhbHVlOjA7KytzPG87KW4oYT1pW3NdLGUsYz1hLnZhbHVlKnIsdSksZSs9Y319ZnVuY3Rpb24gdChuKXt2YXIgZT1uLmNoaWxkcmVuLHI9MDtpZihlJiYodT1lLmxlbmd0aCkpZm9yKHZhciB1LGk9LTE7KytpPHU7KXI9TWF0aC5tYXgocix0KGVbaV0pKTtyZXR1cm4gMStyfWZ1bmN0aW9uIGUoZSxpKXt2YXIgbz1yLmNhbGwodGhpcyxlLGkpO3JldHVybiBuKG9bMF0sMCx1WzBdLHVbMV0vdChvWzBdKSksb312YXIgcj1Yby5sYXlvdXQuaGllcmFyY2h5KCksdT1bMSwxXTtyZXR1cm4gZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW4sZSk6dX0sVnUoZSxyKX0sWG8ubGF5b3V0LnBpZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oaSl7dmFyIG89aS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm4rdC5jYWxsKG4sZSxyKX0pLGE9KygiZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyKSxjPSgoImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dSktYSkvWG8uc3VtKG8pLHM9WG8ucmFuZ2UoaS5sZW5ndGgpO251bGwhPWUmJnMuc29ydChlPT09YXM/ZnVuY3Rpb24obix0KXtyZXR1cm4gb1t0XS1vW25dfTpmdW5jdGlvbihuLHQpe3JldHVybiBlKGlbbl0saVt0XSl9KTt2YXIgbD1bXTtyZXR1cm4gcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciB0O2xbbl09e2RhdGE6aVtuXSx2YWx1ZTp0PW9bbl0sc3RhcnRBbmdsZTphLGVuZEFuZ2xlOmErPXQqY319KSxsfXZhciB0PU51bWJlcixlPWFzLHI9MCx1PWthO3JldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG4pOnV9LG59O3ZhciBhcz17fTtYby5sYXlvdXQuc3RhY2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGEsYyl7dmFyIHM9YS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5jYWxsKG4sZSxyKX0pLGw9cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW2kuY2FsbChuLHQsZSksby5jYWxsKG4sdCxlKV19KX0pLGY9ZS5jYWxsKG4sbCxjKTtzPVhvLnBlcm11dGUocyxmKSxsPVhvLnBlcm11dGUobCxmKTt2YXIgaCxnLHAsdj1yLmNhbGwobixsLGMpLGQ9cy5sZW5ndGgsbT1zWzBdLmxlbmd0aDtmb3IoZz0wO20+ZzsrK2cpZm9yKHUuY2FsbChuLHNbMF1bZ10scD12W2ddLGxbMF1bZ11bMV0pLGg9MTtkPmg7KytoKXUuY2FsbChuLHNbaF1bZ10scCs9bFtoLTFdW2ddWzFdLGxbaF1bZ11bMV0pO3JldHVybiBhfXZhciB0PWJ0LGU9UXUscj1uaSx1PUt1LGk9SnUsbz1HdTtyZXR1cm4gbi52YWx1ZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Y3MuZ2V0KHQpfHxRdSxuKTplfSxuLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnNzLmdldCh0KXx8bmksbik6cn0sbi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbik6aX0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbik6b30sbi5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1fSxufTt2YXIgY3M9WG8ubWFwKHsiaW5zaWRlLW91dCI6ZnVuY3Rpb24obil7dmFyIHQsZSxyPW4ubGVuZ3RoLHU9bi5tYXAodGkpLGk9bi5tYXAoZWkpLG89WG8ucmFuZ2Uocikuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiB1W25dLXVbdF19KSxhPTAsYz0wLHM9W10sbD1bXTtmb3IodD0wO3I+dDsrK3QpZT1vW3RdLGM+YT8oYSs9aVtlXSxzLnB1c2goZSkpOihjKz1pW2VdLGwucHVzaChlKSk7cmV0dXJuIGwucmV2ZXJzZSgpLmNvbmNhdChzKX0scmV2ZXJzZTpmdW5jdGlvbihuKXtyZXR1cm4gWG8ucmFuZ2Uobi5sZW5ndGgpLnJldmVyc2UoKX0sImRlZmF1bHQiOlF1fSksc3M9WG8ubWFwKHtzaWxob3VldHRlOmZ1bmN0aW9uKG4pe3ZhciB0LGUscix1PW4ubGVuZ3RoLGk9blswXS5sZW5ndGgsbz1bXSxhPTAsYz1bXTtmb3IoZT0wO2k+ZTsrK2Upe2Zvcih0PTAscj0wO3U+dDt0Kyspcis9blt0XVtlXVsxXTtyPmEmJihhPXIpLG8ucHVzaChyKX1mb3IoZT0wO2k+ZTsrK2UpY1tlXT0oYS1vW2VdKS8yO3JldHVybiBjfSx3aWdnbGU6ZnVuY3Rpb24obil7dmFyIHQsZSxyLHUsaSxvLGEsYyxzLGw9bi5sZW5ndGgsZj1uWzBdLGg9Zi5sZW5ndGgsZz1bXTtmb3IoZ1swXT1jPXM9MCxlPTE7aD5lOysrZSl7Zm9yKHQ9MCx1PTA7bD50OysrdCl1Kz1uW3RdW2VdWzFdO2Zvcih0PTAsaT0wLGE9ZltlXVswXS1mW2UtMV1bMF07bD50OysrdCl7Zm9yKHI9MCxvPShuW3RdW2VdWzFdLW5bdF1bZS0xXVsxXSkvKDIqYSk7dD5yOysrcilvKz0obltyXVtlXVsxXS1uW3JdW2UtMV1bMV0pL2E7aSs9bypuW3RdW2VdWzFdfWdbZV09Yy09dT9pL3UqYTowLHM+YyYmKHM9Yyl9Zm9yKGU9MDtoPmU7KytlKWdbZV0tPXM7cmV0dXJuIGd9LGV4cGFuZDpmdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1uLmxlbmd0aCxpPW5bMF0ubGVuZ3RoLG89MS91LGE9W107Zm9yKGU9MDtpPmU7KytlKXtmb3IodD0wLHI9MDt1PnQ7dCsrKXIrPW5bdF1bZV1bMV07aWYocilmb3IodD0wO3U+dDt0Kyspblt0XVtlXVsxXS89cjtlbHNlIGZvcih0PTA7dT50O3QrKyluW3RdW2VdWzFdPW99Zm9yKGU9MDtpPmU7KytlKWFbZV09MDtyZXR1cm4gYX0semVybzpuaX0pO1hvLmxheW91dC5oaXN0b2dyYW09ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4saSl7Zm9yKHZhciBvLGEsYz1bXSxzPW4ubWFwKGUsdGhpcyksbD1yLmNhbGwodGhpcyxzLGkpLGY9dS5jYWxsKHRoaXMsbCxzLGkpLGk9LTEsaD1zLmxlbmd0aCxnPWYubGVuZ3RoLTEscD10PzE6MS9oOysraTxnOylvPWNbaV09W10sby5keD1mW2krMV0tKG8ueD1mW2ldKSxvLnk9MDtpZihnPjApZm9yKGk9LTE7KytpPGg7KWE9c1tpXSxhPj1sWzBdJiZhPD1sWzFdJiYobz1jW1hvLmJpc2VjdChmLGEsMSxnKS0xXSxvLnkrPXAsby5wdXNoKG5baV0pKTtyZXR1cm4gY312YXIgdD0hMCxlPU51bWJlcixyPW9pLHU9dWk7cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPV90KHQpLG4pOnJ9LG4uYmlucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0ibnVtYmVyIj09dHlwZW9mIHQ/ZnVuY3Rpb24obil7cmV0dXJuIGlpKG4sdCl9Ol90KHQpLG4pOnV9LG4uZnJlcXVlbmN5PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZSxuKTp0fSxufSxYby5sYXlvdXQudHJlZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixpKXtmdW5jdGlvbiBvKG4sdCl7dmFyIHI9bi5jaGlsZHJlbix1PW4uX3RyZWU7aWYociYmKGk9ci5sZW5ndGgpKXtmb3IodmFyIGksYSxzLGw9clswXSxmPWwsaD0tMTsrK2g8aTspcz1yW2hdLG8ocyxhKSxmPWMocyxhLGYpLGE9czt2aShuKTt2YXIgZz0uNSoobC5fdHJlZS5wcmVsaW0rcy5fdHJlZS5wcmVsaW0pO3Q/KHUucHJlbGltPXQuX3RyZWUucHJlbGltK2Uobix0KSx1Lm1vZD11LnByZWxpbS1nKTp1LnByZWxpbT1nfWVsc2UgdCYmKHUucHJlbGltPXQuX3RyZWUucHJlbGltK2Uobix0KSl9ZnVuY3Rpb24gYShuLHQpe24ueD1uLl90cmVlLnByZWxpbSt0O3ZhciBlPW4uY2hpbGRyZW47aWYoZSYmKHI9ZS5sZW5ndGgpKXt2YXIgcix1PS0xO2Zvcih0Kz1uLl90cmVlLm1vZDsrK3U8cjspYShlW3VdLHQpfX1mdW5jdGlvbiBjKG4sdCxyKXtpZih0KXtmb3IodmFyIHUsaT1uLG89bixhPXQsYz1uLnBhcmVudC5jaGlsZHJlblswXSxzPWkuX3RyZWUubW9kLGw9by5fdHJlZS5tb2QsZj1hLl90cmVlLm1vZCxoPWMuX3RyZWUubW9kO2E9c2koYSksaT1jaShpKSxhJiZpOyljPWNpKGMpLG89c2kobyksby5fdHJlZS5hbmNlc3Rvcj1uLHU9YS5fdHJlZS5wcmVsaW0rZi1pLl90cmVlLnByZWxpbS1zK2UoYSxpKSx1PjAmJihkaShtaShhLG4sciksbix1KSxzKz11LGwrPXUpLGYrPWEuX3RyZWUubW9kLHMrPWkuX3RyZWUubW9kLGgrPWMuX3RyZWUubW9kLGwrPW8uX3RyZWUubW9kO2EmJiFzaShvKSYmKG8uX3RyZWUudGhyZWFkPWEsby5fdHJlZS5tb2QrPWYtbCksaSYmIWNpKGMpJiYoYy5fdHJlZS50aHJlYWQ9aSxjLl90cmVlLm1vZCs9cy1oLHI9bil9cmV0dXJuIHJ9dmFyIHM9dC5jYWxsKHRoaXMsbixpKSxsPXNbMF07cGkobCxmdW5jdGlvbihuLHQpe24uX3RyZWU9e2FuY2VzdG9yOm4scHJlbGltOjAsbW9kOjAsY2hhbmdlOjAsc2hpZnQ6MCxudW1iZXI6dD90Ll90cmVlLm51bWJlcisxOjB9fSksbyhsKSxhKGwsLWwuX3RyZWUucHJlbGltKTt2YXIgZj1saShsLGhpKSxoPWxpKGwsZmkpLGc9bGkobCxnaSkscD1mLngtZShmLGgpLzIsdj1oLngrZShoLGYpLzIsZD1nLmRlcHRofHwxO3JldHVybiBwaShsLHU/ZnVuY3Rpb24obil7bi54Kj1yWzBdLG4ueT1uLmRlcHRoKnJbMV0sZGVsZXRlIG4uX3RyZWV9OmZ1bmN0aW9uKG4pe24ueD0obi54LXApLyh2LXApKnJbMF0sbi55PW4uZGVwdGgvZCpyWzFdLGRlbGV0ZSBuLl90cmVlfSksc312YXIgdD1Yby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxlPWFpLHI9WzEsMV0sdT0hMTtyZXR1cm4gbi5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PShyPXQpLG4pOnU/bnVsbDpyfSxuLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGwhPShyPXQpLG4pOnU/cjpudWxsfSxWdShuLHQpfSxYby5sYXlvdXQucGFjaz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixpKXt2YXIgbz1lLmNhbGwodGhpcyxuLGkpLGE9b1swXSxjPXVbMF0scz11WzFdLGw9bnVsbD09dD9NYXRoLnNxcnQ6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiB0fTtpZihhLng9YS55PTAscGkoYSxmdW5jdGlvbihuKXtuLnI9K2wobi52YWx1ZSl9KSxwaShhLGJpKSxyKXt2YXIgZj1yKih0PzE6TWF0aC5tYXgoMiphLnIvYywyKmEuci9zKSkvMjtwaShhLGZ1bmN0aW9uKG4pe24ucis9Zn0pLHBpKGEsYmkpLHBpKGEsZnVuY3Rpb24obil7bi5yLT1mfSl9cmV0dXJuIGtpKGEsYy8yLHMvMix0PzE6MS9NYXRoLm1heCgyKmEuci9jLDIqYS5yL3MpKSxvfXZhciB0LGU9WG8ubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQoeWkpLHI9MCx1PVsxLDFdO3JldHVybiBuLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1fSxuLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1udWxsPT1lfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9lOitlLG4pOnR9LG4ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxuKTpyfSxWdShuLGUpfSxYby5sYXlvdXQuY2x1c3Rlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixpKXt2YXIgbyxhPXQuY2FsbCh0aGlzLG4saSksYz1hWzBdLHM9MDtwaShjLGZ1bmN0aW9uKG4pe3ZhciB0PW4uY2hpbGRyZW47dCYmdC5sZW5ndGg/KG4ueD1DaSh0KSxuLnk9QWkodCkpOihuLng9bz9zKz1lKG4sbyk6MCxuLnk9MCxvPW4pfSk7dmFyIGw9TmkoYyksZj1MaShjKSxoPWwueC1lKGwsZikvMixnPWYueCtlKGYsbCkvMjtyZXR1cm4gcGkoYyx1P2Z1bmN0aW9uKG4pe24ueD0obi54LWMueCkqclswXSxuLnk9KGMueS1uLnkpKnJbMV19OmZ1bmN0aW9uKG4pe24ueD0obi54LWgpLyhnLWgpKnJbMF0sbi55PSgxLShjLnk/bi55L2MueToxKSkqclsxXX0pLGF9dmFyIHQ9WG8ubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCksZT1haSxyPVsxLDFdLHU9ITE7cmV0dXJuIG4uc2VwYXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1udWxsPT0ocj10KSxuKTp1P251bGw6cn0sbi5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1udWxsIT0ocj10KSxuKTp1P3I6bnVsbH0sVnUobix0KX0sWG8ubGF5b3V0LnRyZWVtYXA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sdCl7Zm9yKHZhciBlLHIsdT0tMSxpPW4ubGVuZ3RoOysrdTxpOylyPShlPW5bdV0pLnZhbHVlKigwPnQ/MDp0KSxlLmFyZWE9aXNOYU4ocil8fDA+PXI/MDpyfWZ1bmN0aW9uIHQoZSl7dmFyIGk9ZS5jaGlsZHJlbjtpZihpJiZpLmxlbmd0aCl7dmFyIG8sYSxjLHM9ZihlKSxsPVtdLGg9aS5zbGljZSgpLHA9MS8wLHY9InNsaWNlIj09PWc/cy5keDoiZGljZSI9PT1nP3MuZHk6InNsaWNlLWRpY2UiPT09Zz8xJmUuZGVwdGg/cy5keTpzLmR4Ok1hdGgubWluKHMuZHgscy5keSk7Zm9yKG4oaCxzLmR4KnMuZHkvZS52YWx1ZSksbC5hcmVhPTA7KGM9aC5sZW5ndGgpPjA7KWwucHVzaChvPWhbYy0xXSksbC5hcmVhKz1vLmFyZWEsInNxdWFyaWZ5IiE9PWd8fChhPXIobCx2KSk8PXA/KGgucG9wKCkscD1hKToobC5hcmVhLT1sLnBvcCgpLmFyZWEsdShsLHYscywhMSksdj1NYXRoLm1pbihzLmR4LHMuZHkpLGwubGVuZ3RoPWwuYXJlYT0wLHA9MS8wKTtsLmxlbmd0aCYmKHUobCx2LHMsITApLGwubGVuZ3RoPWwuYXJlYT0wKSxpLmZvckVhY2godCl9fWZ1bmN0aW9uIGUodCl7dmFyIHI9dC5jaGlsZHJlbjtpZihyJiZyLmxlbmd0aCl7dmFyIGksbz1mKHQpLGE9ci5zbGljZSgpLGM9W107Zm9yKG4oYSxvLmR4Km8uZHkvdC52YWx1ZSksYy5hcmVhPTA7aT1hLnBvcCgpOyljLnB1c2goaSksYy5hcmVhKz1pLmFyZWEsbnVsbCE9aS56JiYodShjLGkuej9vLmR4Om8uZHksbywhYS5sZW5ndGgpLGMubGVuZ3RoPWMuYXJlYT0wKTtyLmZvckVhY2goZSl9fWZ1bmN0aW9uIHIobix0KXtmb3IodmFyIGUscj1uLmFyZWEsdT0wLGk9MS8wLG89LTEsYT1uLmxlbmd0aDsrK288YTspKGU9bltvXS5hcmVhKSYmKGk+ZSYmKGk9ZSksZT51JiYodT1lKSk7cmV0dXJuIHIqPXIsdCo9dCxyP01hdGgubWF4KHQqdSpwL3Isci8odCppKnApKToxLzB9ZnVuY3Rpb24gdShuLHQsZSxyKXt2YXIgdSxpPS0xLG89bi5sZW5ndGgsYT1lLngscz1lLnksbD10P2Mobi5hcmVhL3QpOjA7aWYodD09ZS5keCl7Zm9yKChyfHxsPmUuZHkpJiYobD1lLmR5KTsrK2k8bzspdT1uW2ldLHUueD1hLHUueT1zLHUuZHk9bCxhKz11LmR4PU1hdGgubWluKGUueCtlLmR4LWEsbD9jKHUuYXJlYS9sKTowKTt1Lno9ITAsdS5keCs9ZS54K2UuZHgtYSxlLnkrPWwsZS5keS09bH1lbHNle2Zvcigocnx8bD5lLmR4KSYmKGw9ZS5keCk7KytpPG87KXU9bltpXSx1Lng9YSx1Lnk9cyx1LmR4PWwscys9dS5keT1NYXRoLm1pbihlLnkrZS5keS1zLGw/Yyh1LmFyZWEvbCk6MCk7dS56PSExLHUuZHkrPWUueStlLmR5LXMsZS54Kz1sLGUuZHgtPWx9fWZ1bmN0aW9uIGkocil7dmFyIHU9b3x8YShyKSxpPXVbMF07cmV0dXJuIGkueD0wLGkueT0wLGkuZHg9c1swXSxpLmR5PXNbMV0sbyYmYS5yZXZhbHVlKGkpLG4oW2ldLGkuZHgqaS5keS9pLnZhbHVlKSwobz9lOnQpKGkpLGgmJihvPXUpLHV9dmFyIG8sYT1Yby5sYXlvdXQuaGllcmFyY2h5KCksYz1NYXRoLnJvdW5kLHM9WzEsMV0sbD1udWxsLGY9VGksaD0hMSxnPSJzcXVhcmlmeSIscD0uNSooMStNYXRoLnNxcnQoNSkpO3JldHVybiBpLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bixpKTpzfSxpLnBhZGRpbmc9ZnVuY3Rpb24obil7ZnVuY3Rpb24gdCh0KXt2YXIgZT1uLmNhbGwoaSx0LHQuZGVwdGgpO3JldHVybiBudWxsPT1lP1RpKHQpOnFpKHQsIm51bWJlciI9PXR5cGVvZiBlP1tlLGUsZSxlXTplKX1mdW5jdGlvbiBlKHQpe3JldHVybiBxaSh0LG4pfWlmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBsO3ZhciByO3JldHVybiBmPW51bGw9PShsPW4pP1RpOiJmdW5jdGlvbiI9PShyPXR5cGVvZiBuKT90OiJudW1iZXIiPT09cj8obj1bbixuLG4sbl0sZSk6ZSxpfSxpLnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW4/TWF0aC5yb3VuZDpOdW1iZXIsaSk6YyE9TnVtYmVyfSxpLnN0aWNreT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1uLG89bnVsbCxpKTpofSxpLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPW4saSk6cH0saS5tb2RlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPW4rIiIsaSk6Z30sVnUoaSxhKX0sWG8ucmFuZG9tPXtub3JtYWw6ZnVuY3Rpb24obix0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO3JldHVybiAyPmUmJih0PTEpLDE+ZSYmKG49MCksZnVuY3Rpb24oKXt2YXIgZSxyLHU7ZG8gZT0yKk1hdGgucmFuZG9tKCktMSxyPTIqTWF0aC5yYW5kb20oKS0xLHU9ZSplK3Iqcjt3aGlsZSghdXx8dT4xKTtyZXR1cm4gbit0KmUqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKHUpL3UpfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIG49WG8ucmFuZG9tLm5vcm1hbC5hcHBseShYbyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChuKCkpfX0sYmF0ZXM6ZnVuY3Rpb24obil7dmFyIHQ9WG8ucmFuZG9tLmlyd2luSGFsbChuKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCgpL259fSxpcndpbkhhbGw6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT0wO24+ZTtlKyspdCs9TWF0aC5yYW5kb20oKTtyZXR1cm4gdH19fSxYby5zY2FsZT17fTt2YXIgbHM9e2Zsb29yOmJ0LGNlaWw6YnR9O1hvLnNjYWxlLmxpbmVhcj1mdW5jdGlvbigpe3JldHVybiBIaShbMCwxXSxbMCwxXSxmdSwhMSl9O3ZhciBmcz17czoxLGc6MSxwOjEscjoxLGU6MX07WG8uc2NhbGUubG9nPWZ1bmN0aW9uKCl7cmV0dXJuICRpKFhvLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCwxXSksMTAsITAsWzEsMTBdKX07dmFyIGhzPVhvLmZvcm1hdCgiLjBlIiksZ3M9e2Zsb29yOmZ1bmN0aW9uKG4pe3JldHVybi1NYXRoLmNlaWwoLW4pfSxjZWlsOmZ1bmN0aW9uKG4pe3JldHVybi1NYXRoLmZsb29yKC1uKX19O1hvLnNjYWxlLnBvdz1mdW5jdGlvbigpe3JldHVybiBCaShYby5zY2FsZS5saW5lYXIoKSwxLFswLDFdKX0sWG8uc2NhbGUuc3FydD1mdW5jdGlvbigpe3JldHVybiBYby5zY2FsZS5wb3coKS5leHBvbmVudCguNSl9LFhvLnNjYWxlLm9yZGluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gSmkoW10se3Q6InJhbmdlIixhOltbXV19KX0sWG8uc2NhbGUuY2F0ZWdvcnkxMD1mdW5jdGlvbigpe3JldHVybiBYby5zY2FsZS5vcmRpbmFsKCkucmFuZ2UocHMpfSxYby5zY2FsZS5jYXRlZ29yeTIwPWZ1bmN0aW9uKCl7cmV0dXJuIFhvLnNjYWxlLm9yZGluYWwoKS5yYW5nZSh2cyl9LFhvLnNjYWxlLmNhdGVnb3J5MjBiPWZ1bmN0aW9uKCl7cmV0dXJuIFhvLnNjYWxlLm9yZGluYWwoKS5yYW5nZShkcyl9LFhvLnNjYWxlLmNhdGVnb3J5MjBjPWZ1bmN0aW9uKCl7cmV0dXJuIFhvLnNjYWxlLm9yZGluYWwoKS5yYW5nZShtcyl9O3ZhciBwcz1bMjA2MjI2MCwxNjc0NDIwNiwyOTI0NTg4LDE0MDM0NzI4LDk3MjU4ODUsOTE5NzEzMSwxNDkwNzMzMCw4MzU1NzExLDEyMzY5MTg2LDE1NTYxNzVdLm1hcChodCksdnM9WzIwNjIyNjAsMTE0NTQ0NDAsMTY3NDQyMDYsMTY3NTk2NzIsMjkyNDU4OCwxMDAxODY5OCwxNDAzNDcyOCwxNjc1MDc0Miw5NzI1ODg1LDEyOTU1ODYxLDkxOTcxMzEsMTI4ODUxNDAsMTQ5MDczMzAsMTYyMzQxOTQsODM1NTcxMSwxMzA5MjgwNywxMjM2OTE4NiwxNDQwODU4OSwxNTU2MTc1LDEwNDEwNzI1XS5tYXAoaHQpLGRzPVszNzUwNzc3LDUzOTU2MTksNzA0MDcxOSwxMDI2NDI4Niw2NTE5MDk3LDkyMTY1OTQsMTE5MTUxMTUsMTM1NTY2MzYsOTIwMjk5MywxMjQyNjgwOSwxNTE4NjUxNCwxNTE5MDkzMiw4NjY2MTY5LDExMzU2NDkwLDE0MDQ5NjQzLDE1MTc3MzcyLDgwNzc2ODMsMTA4MzQzMjQsMTM1Mjg1MDksMTQ1ODk2NTRdLm1hcChodCksbXM9WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMsMTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcChodCk7WG8uc2NhbGUucXVhbnRpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gR2koW10sW10pfSxYby5zY2FsZS5xdWFudGl6ZT1mdW5jdGlvbigpe3JldHVybiBLaSgwLDEsWzAsMV0pfSxYby5zY2FsZS50aHJlc2hvbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gUWkoWy41XSxbMCwxXSl9LFhvLnNjYWxlLmlkZW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIG5vKFswLDFdKX0sWG8uc3ZnPXt9LFhvLnN2Zy5hcmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpK3lzLGE9dS5hcHBseSh0aGlzLGFyZ3VtZW50cykreXMsYz0obz5hJiYoYz1vLG89YSxhPWMpLGEtbykscz1TYT5jPyIwIjoiMSIsbD1NYXRoLmNvcyhvKSxmPU1hdGguc2luKG8pLGg9TWF0aC5jb3MoYSksZz1NYXRoLnNpbihhKTtyZXR1cm4gYz49eHM/bj8iTTAsIitpKyJBIitpKyIsIitpKyIgMCAxLDEgMCwiKy1pKyJBIitpKyIsIitpKyIgMCAxLDEgMCwiK2krIk0wLCIrbisiQSIrbisiLCIrbisiIDAgMSwwIDAsIistbisiQSIrbisiLCIrbisiIDAgMSwwIDAsIituKyJaIjoiTTAsIitpKyJBIitpKyIsIitpKyIgMCAxLDEgMCwiKy1pKyJBIitpKyIsIitpKyIgMCAxLDEgMCwiK2krIloiOm4/Ik0iK2kqbCsiLCIraSpmKyJBIitpKyIsIitpKyIgMCAiK3MrIiwxICIraSpoKyIsIitpKmcrIkwiK24qaCsiLCIrbipnKyJBIituKyIsIituKyIgMCAiK3MrIiwwICIrbipsKyIsIituKmYrIloiOiJNIitpKmwrIiwiK2kqZisiQSIraSsiLCIraSsiIDAgIitzKyIsMSAiK2kqaCsiLCIraSpnKyJMMCwwIisiWiJ9dmFyIHQ9dG8sZT1lbyxyPXJvLHU9dW87cmV0dXJuIG4uaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9X3QoZSksbik6dH0sbi5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1fdCh0KSxuKTplfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9X3QodCksbik6cn0sbi5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1fdCh0KSxuKTp1fSxuLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIG49KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLGk9KHIuYXBwbHkodGhpcyxhcmd1bWVudHMpK3UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yK3lzO3JldHVybltNYXRoLmNvcyhpKSpuLE1hdGguc2luKGkpKm5dfSxufTt2YXIgeXM9LUVhLHhzPWthLUFhO1hvLnN2Zy5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGlvKGJ0KX07dmFyIE1zPVhvLm1hcCh7bGluZWFyOm9vLCJsaW5lYXItY2xvc2VkIjphbyxzdGVwOmNvLCJzdGVwLWJlZm9yZSI6c28sInN0ZXAtYWZ0ZXIiOmxvLGJhc2lzOm1vLCJiYXNpcy1vcGVuIjp5bywiYmFzaXMtY2xvc2VkIjp4byxidW5kbGU6TW8sY2FyZGluYWw6Z28sImNhcmRpbmFsLW9wZW4iOmZvLCJjYXJkaW5hbC1jbG9zZWQiOmhvLG1vbm90b25lOkVvfSk7TXMuZm9yRWFjaChmdW5jdGlvbihuLHQpe3Qua2V5PW4sdC5jbG9zZWQ9Ly1jbG9zZWQkLy50ZXN0KG4pfSk7dmFyIF9zPVswLDIvMywxLzMsMF0sYnM9WzAsMS8zLDIvMywwXSx3cz1bMCwxLzYsMi8zLDEvNl07WG8uc3ZnLmxpbmUucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIG49aW8oQW8pO3JldHVybiBuLnJhZGl1cz1uLngsZGVsZXRlIG4ueCxuLmFuZ2xlPW4ueSxkZWxldGUgbi55LG59LHNvLnJldmVyc2U9bG8sbG8ucmV2ZXJzZT1zbyxYby5zdmcuYXJlYT1mdW5jdGlvbigpe3JldHVybiBDbyhidCl9LFhvLnN2Zy5hcmVhLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBuPUNvKEFvKTtyZXR1cm4gbi5yYWRpdXM9bi54LGRlbGV0ZSBuLngsbi5pbm5lclJhZGl1cz1uLngwLGRlbGV0ZSBuLngwLG4ub3V0ZXJSYWRpdXM9bi54MSxkZWxldGUgbi54MSxuLmFuZ2xlPW4ueSxkZWxldGUgbi55LG4uc3RhcnRBbmdsZT1uLnkwLGRlbGV0ZSBuLnkwLG4uZW5kQW5nbGU9bi55MSxkZWxldGUgbi55MSxufSxYby5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sYSl7dmFyIGM9dCh0aGlzLGksbixhKSxzPXQodGhpcyxvLG4sYSk7cmV0dXJuIk0iK2MucDArcihjLnIsYy5wMSxjLmExLWMuYTApKyhlKGMscyk/dShjLnIsYy5wMSxjLnIsYy5wMCk6dShjLnIsYy5wMSxzLnIscy5wMCkrcihzLnIscy5wMSxzLmExLXMuYTApK3Uocy5yLHMucDEsYy5yLGMucDApKSsiWiJ9ZnVuY3Rpb24gdChuLHQsZSxyKXt2YXIgdT10LmNhbGwobixlLHIpLGk9YS5jYWxsKG4sdSxyKSxvPWMuY2FsbChuLHUscikreXMsbD1zLmNhbGwobix1LHIpK3lzO3JldHVybntyOmksYTA6byxhMTpsLHAwOltpKk1hdGguY29zKG8pLGkqTWF0aC5zaW4obyldLHAxOltpKk1hdGguY29zKGwpLGkqTWF0aC5zaW4obCldfX1mdW5jdGlvbiBlKG4sdCl7cmV0dXJuIG4uYTA9PXQuYTAmJm4uYTE9PXQuYTF9ZnVuY3Rpb24gcihuLHQsZSl7cmV0dXJuIkEiK24rIiwiK24rIiAwICIrICsoZT5TYSkrIiwxICIrdH1mdW5jdGlvbiB1KG4sdCxlLHIpe3JldHVybiJRIDAsMCAiK3J9dmFyIGk9aHIsbz1ncixhPU5vLGM9cm8scz11bztyZXR1cm4gbi5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9X3QodCksbik6YX0sbi5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9X3QodCksbik6aX0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89X3QodCksbik6b30sbi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPV90KHQpLG4pOmN9LG4uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9X3QodCksbik6c30sbn0sWG8uc3ZnLmRpYWdvbmFsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBpPXQuY2FsbCh0aGlzLG4sdSksbz1lLmNhbGwodGhpcyxuLHUpLGE9KGkueStvLnkpLzIsYz1baSx7eDppLngseTphfSx7eDpvLngseTphfSxvXTtyZXR1cm4gYz1jLm1hcChyKSwiTSIrY1swXSsiQyIrY1sxXSsiICIrY1syXSsiICIrY1szXX12YXIgdD1ocixlPWdyLHI9TG87cmV0dXJuIG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PV90KGUpLG4pOnR9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPV90KHQpLG4pOmV9LG4ucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LFhvLnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgbj1Yby5zdmcuZGlhZ29uYWwoKSx0PUxvLGU9bi5wcm9qZWN0aW9uO3JldHVybiBuLnByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShUbyh0PW4pKTp0fSxufSxYby5zdmcuc3ltYm9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHIpe3JldHVybihTcy5nZXQodC5jYWxsKHRoaXMsbixyKSl8fFJvKShlLmNhbGwodGhpcyxuLHIpKX12YXIgdD16byxlPXFvO3JldHVybiBuLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9X3QoZSksbik6dH0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPV90KHQpLG4pOmV9LG59O3ZhciBTcz1Yby5tYXAoe2NpcmNsZTpSbyxjcm9zczpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobi81KS8yO3JldHVybiJNIistMyp0KyIsIistdCsiSCIrLXQrIlYiKy0zKnQrIkgiK3QrIlYiKy10KyJIIiszKnQrIlYiK3QrIkgiK3QrIlYiKzMqdCsiSCIrLXQrIlYiK3QrIkgiKy0zKnQrIloifSxkaWFtb25kOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuLygyKkNzKSksZT10KkNzO3JldHVybiJNMCwiKy10KyJMIitlKyIsMCIrIiAwLCIrdCsiICIrLWUrIiwwIisiWiJ9LHNxdWFyZTpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobikvMjtyZXR1cm4iTSIrLXQrIiwiKy10KyJMIit0KyIsIistdCsiICIrdCsiLCIrdCsiICIrLXQrIiwiK3QrIloifSwidHJpYW5nbGUtZG93biI6ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4vQXMpLGU9dCpBcy8yO3JldHVybiJNMCwiK2UrIkwiK3QrIiwiKy1lKyIgIistdCsiLCIrLWUrIloifSwidHJpYW5nbGUtdXAiOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuL0FzKSxlPXQqQXMvMjtyZXR1cm4iTTAsIistZSsiTCIrdCsiLCIrZSsiICIrLXQrIiwiK2UrIloifX0pO1hvLnN2Zy5zeW1ib2xUeXBlcz1Tcy5rZXlzKCk7dmFyIGtzLEVzLEFzPU1hdGguc3FydCgzKSxDcz1NYXRoLnRhbigzMCpOYSksTnM9W10sTHM9MDtOcy5jYWxsPWRhLmNhbGwsTnMuZW1wdHk9ZGEuZW1wdHksTnMubm9kZT1kYS5ub2RlLE5zLnNpemU9ZGEuc2l6ZSxYby50cmFuc2l0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2tzP24udHJhbnNpdGlvbigpOm46eGEudHJhbnNpdGlvbigpfSxYby50cmFuc2l0aW9uLnByb3RvdHlwZT1OcyxOcy5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9dGhpcy5pZCxpPVtdO249TShuKTtmb3IodmFyIG89LTEsYT10aGlzLmxlbmd0aDsrK288YTspe2kucHVzaCh0PVtdKTtmb3IodmFyIGM9dGhpc1tvXSxzPS0xLGw9Yy5sZW5ndGg7KytzPGw7KShyPWNbc10pJiYoZT1uLmNhbGwocixyLl9fZGF0YV9fLHMsbykpPygiX19kYXRhX18iaW4gciYmKGUuX19kYXRhX189ci5fX2RhdGFfXyksam8oZSxzLHUsci5fX3RyYW5zaXRpb25fX1t1XSksdC5wdXNoKGUpKTp0LnB1c2gobnVsbCl9cmV0dXJuIERvKGksdSl9LE5zLnNlbGVjdEFsbD1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdSxpLG89dGhpcy5pZCxhPVtdO249XyhuKTtmb3IodmFyIGM9LTEscz10aGlzLmxlbmd0aDsrK2M8czspZm9yKHZhciBsPXRoaXNbY10sZj0tMSxoPWwubGVuZ3RoOysrZjxoOylpZihyPWxbZl0pe2k9ci5fX3RyYW5zaXRpb25fX1tvXSxlPW4uY2FsbChyLHIuX19kYXRhX18sZixjKSxhLnB1c2godD1bXSk7Zm9yKHZhciBnPS0xLHA9ZS5sZW5ndGg7KytnPHA7KSh1PWVbZ10pJiZqbyh1LGcsbyxpKSx0LnB1c2godSl9cmV0dXJuIERvKGEsbyl9LE5zLmZpbHRlcj1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49cShuKSk7Zm9yKHZhciBpPTAsbz10aGlzLmxlbmd0aDtvPmk7aSsrKXt1LnB1c2godD1bXSk7Zm9yKHZhciBlPXRoaXNbaV0sYT0wLGM9ZS5sZW5ndGg7Yz5hO2ErKykocj1lW2FdKSYmbi5jYWxsKHIsci5fX2RhdGFfXyxhLGkpJiZ0LnB1c2gocil9cmV0dXJuIERvKHUsdGhpcy5pZCl9LE5zLnR3ZWVuPWZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXMubm9kZSgpLl9fdHJhbnNpdGlvbl9fW2VdLnR3ZWVuLmdldChuKTpSKHRoaXMsbnVsbD09dD9mdW5jdGlvbih0KXt0Ll9fdHJhbnNpdGlvbl9fW2VdLnR3ZWVuLnJlbW92ZShuKX06ZnVuY3Rpb24ocil7ci5fX3RyYW5zaXRpb25fX1tlXS50d2Vlbi5zZXQobix0KX0pfSxOcy5hdHRyPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGEpfWZ1bmN0aW9uIHIoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCl9ZnVuY3Rpb24gdShuKXtyZXR1cm4gbnVsbD09bj9lOihuKz0iIixmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5nZXRBdHRyaWJ1dGUoYSk7cmV0dXJuIGUhPT1uJiYodD1vKGUsbiksZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUoYSx0KG4pKX0pfSl9ZnVuY3Rpb24gaShuKXtyZXR1cm4gbnVsbD09bj9yOihuKz0iIixmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5nZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEubG9jYWwpO3JldHVybiBlIT09biYmKHQ9byhlLG4pLGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsLHQobikpfSl9KX1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih0IGluIG4pdGhpcy5hdHRyKHQsblt0XSk7cmV0dXJuIHRoaXN9dmFyIG89InRyYW5zZm9ybSI9PW4/UnU6ZnUsYT1Yby5ucy5xdWFsaWZ5KG4pO3JldHVybiBQbyh0aGlzLCJhdHRyLiIrbix0LGEubG9jYWw/aTp1KX0sTnMuYXR0clR3ZWVuPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZShuLGUpe3ZhciByPXQuY2FsbCh0aGlzLG4sZSx0aGlzLmdldEF0dHJpYnV0ZSh1KSk7cmV0dXJuIHImJmZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHUscihuKSl9fWZ1bmN0aW9uIHIobixlKXt2YXIgcj10LmNhbGwodGhpcyxuLGUsdGhpcy5nZXRBdHRyaWJ1dGVOUyh1LnNwYWNlLHUubG9jYWwpKTtyZXR1cm4gciYmZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyh1LnNwYWNlLHUubG9jYWwscihuKSl9fXZhciB1PVhvLm5zLnF1YWxpZnkobik7cmV0dXJuIHRoaXMudHdlZW4oImF0dHIuIituLHUubG9jYWw/cjplKX0sTnMuc3R5bGU9ZnVuY3Rpb24obix0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG51bGw9PXQ/cjoodCs9IiIsZnVuY3Rpb24oKXt2YXIgcix1PUdvLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pO3JldHVybiB1IT09dCYmKHI9ZnUodSx0KSxmdW5jdGlvbih0KXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4scih0KSxlKX0pfSl9dmFyIGk9YXJndW1lbnRzLmxlbmd0aDtpZigzPmkpe2lmKCJzdHJpbmciIT10eXBlb2Ygbil7Mj5pJiYodD0iIik7Zm9yKGUgaW4gbil0aGlzLnN0eWxlKGUsbltlXSx0KTtyZXR1cm4gdGhpc31lPSIifXJldHVybiBQbyh0aGlzLCJzdHlsZS4iK24sdCx1KX0sTnMuc3R5bGVUd2Vlbj1mdW5jdGlvbihuLHQsZSl7ZnVuY3Rpb24gcihyLHUpe3ZhciBpPXQuY2FsbCh0aGlzLHIsdSxHby5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuKSk7cmV0dXJuIGkmJmZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpKHQpLGUpfX1yZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYoZT0iIiksdGhpcy50d2Vlbigic3R5bGUuIituLHIpfSxOcy50ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBQbyh0aGlzLCJ0ZXh0IixuLFVvKX0sTnMucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCgiZW5kLnRyYW5zaXRpb24iLGZ1bmN0aW9uKCl7dmFyIG47dGhpcy5fX3RyYW5zaXRpb25fXy5jb3VudDwyJiYobj10aGlzLnBhcmVudE5vZGUpJiZuLnJlbW92ZUNoaWxkKHRoaXMpfSl9LE5zLmVhc2U9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpLl9fdHJhbnNpdGlvbl9fW3RdLmVhc2U6KCJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1Yby5lYXNlLmFwcGx5KFhvLGFyZ3VtZW50cykpLFIodGhpcyxmdW5jdGlvbihlKXtlLl9fdHJhbnNpdGlvbl9fW3RdLmVhc2U9bn0pKX0sTnMuZGVsYXk9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZDtyZXR1cm4gUih0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKGUscix1KXtlLl9fdHJhbnNpdGlvbl9fW3RdLmRlbGF5PStuLmNhbGwoZSxlLl9fZGF0YV9fLHIsdSl9OihuPStuLGZ1bmN0aW9uKGUpe2UuX190cmFuc2l0aW9uX19bdF0uZGVsYXk9bn0pKX0sTnMuZHVyYXRpb249ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZDtyZXR1cm4gUih0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKGUscix1KXtlLl9fdHJhbnNpdGlvbl9fW3RdLmR1cmF0aW9uPU1hdGgubWF4KDEsbi5jYWxsKGUsZS5fX2RhdGFfXyxyLHUpKX06KG49TWF0aC5tYXgoMSxuKSxmdW5jdGlvbihlKXtlLl9fdHJhbnNpdGlvbl9fW3RdLmR1cmF0aW9uPW59KSl9LE5zLmVhY2g9ZnVuY3Rpb24obix0KXt2YXIgZT10aGlzLmlkO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHI9RXMsdT1rcztrcz1lLFIodGhpcyxmdW5jdGlvbih0LHIsdSl7RXM9dC5fX3RyYW5zaXRpb25fX1tlXSxuLmNhbGwodCx0Ll9fZGF0YV9fLHIsdSl9KSxFcz1yLGtzPXV9ZWxzZSBSKHRoaXMsZnVuY3Rpb24ocil7dmFyIHU9ci5fX3RyYW5zaXRpb25fX1tlXTsodS5ldmVudHx8KHUuZXZlbnQ9WG8uZGlzcGF0Y2goInN0YXJ0IiwiZW5kIikpKS5vbihuLHQpfSk7cmV0dXJuIHRoaXN9LE5zLnRyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIG4sdCxlLHIsdT10aGlzLmlkLGk9KytMcyxvPVtdLGE9MCxjPXRoaXMubGVuZ3RoO2M+YTthKyspe28ucHVzaChuPVtdKTtmb3IodmFyIHQ9dGhpc1thXSxzPTAsbD10Lmxlbmd0aDtsPnM7cysrKShlPXRbc10pJiYocj1PYmplY3QuY3JlYXRlKGUuX190cmFuc2l0aW9uX19bdV0pLHIuZGVsYXkrPXIuZHVyYXRpb24sam8oZSxzLGkscikpLG4ucHVzaChlKX1yZXR1cm4gRG8obyxpKX0sWG8uc3ZnLmF4aXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe24uZWFjaChmdW5jdGlvbigpe3ZhciBuLHM9WG8uc2VsZWN0KHRoaXMpLGw9dGhpcy5fX2NoYXJ0X198fGUsZj10aGlzLl9fY2hhcnRfXz1lLmNvcHkoKSxoPW51bGw9PWM/Zi50aWNrcz9mLnRpY2tzLmFwcGx5KGYsYSk6Zi5kb21haW4oKTpjLGc9bnVsbD09dD9mLnRpY2tGb3JtYXQ/Zi50aWNrRm9ybWF0LmFwcGx5KGYsYSk6YnQ6dCxwPXMuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoaCxmKSx2PXAuZW50ZXIoKS5pbnNlcnQoImciLCIuZG9tYWluIikuYXR0cigiY2xhc3MiLCJ0aWNrIikuc3R5bGUoIm9wYWNpdHkiLEFhKSxkPVhvLnRyYW5zaXRpb24ocC5leGl0KCkpLnN0eWxlKCJvcGFjaXR5IixBYSkucmVtb3ZlKCksbT1Yby50cmFuc2l0aW9uKHApLnN0eWxlKCJvcGFjaXR5IiwxKSx5PVJpKGYpLHg9cy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksTT0oeC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiksWG8udHJhbnNpdGlvbih4KSk7di5hcHBlbmQoImxpbmUiKSx2LmFwcGVuZCgidGV4dCIpO3ZhciBfPXYuc2VsZWN0KCJsaW5lIiksYj1tLnNlbGVjdCgibGluZSIpLHc9cC5zZWxlY3QoInRleHQiKS50ZXh0KGcpLFM9di5zZWxlY3QoInRleHQiKSxrPW0uc2VsZWN0KCJ0ZXh0Iik7c3dpdGNoKHIpe2Nhc2UiYm90dG9tIjpuPUhvLF8uYXR0cigieTIiLHUpLFMuYXR0cigieSIsTWF0aC5tYXgodSwwKStvKSxiLmF0dHIoIngyIiwwKS5hdHRyKCJ5MiIsdSksay5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixNYXRoLm1heCh1LDApK28pLHcuYXR0cigiZHkiLCIuNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLE0uYXR0cigiZCIsIk0iK3lbMF0rIiwiK2krIlYwSCIreVsxXSsiViIraSk7YnJlYWs7Y2FzZSJ0b3AiOm49SG8sXy5hdHRyKCJ5MiIsLXUpLFMuYXR0cigieSIsLShNYXRoLm1heCh1LDApK28pKSxiLmF0dHIoIngyIiwwKS5hdHRyKCJ5MiIsLXUpLGsuYXR0cigieCIsMCkuYXR0cigieSIsLShNYXRoLm1heCh1LDApK28pKSx3LmF0dHIoImR5IiwiMGVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksTS5hdHRyKCJkIiwiTSIreVswXSsiLCIrLWkrIlYwSCIreVsxXSsiViIrLWkpO2JyZWFrO2Nhc2UibGVmdCI6bj1GbyxfLmF0dHIoIngyIiwtdSksUy5hdHRyKCJ4IiwtKE1hdGgubWF4KHUsMCkrbykpLGIuYXR0cigieDIiLC11KS5hdHRyKCJ5MiIsMCksay5hdHRyKCJ4IiwtKE1hdGgubWF4KHUsMCkrbykpLmF0dHIoInkiLDApLHcuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImVuZCIpLE0uYXR0cigiZCIsIk0iKy1pKyIsIit5WzBdKyJIMFYiK3lbMV0rIkgiKy1pKTticmVhaztjYXNlInJpZ2h0IjpuPUZvLF8uYXR0cigieDIiLHUpLFMuYXR0cigieCIsTWF0aC5tYXgodSwwKStvKSxiLmF0dHIoIngyIix1KS5hdHRyKCJ5MiIsMCksay5hdHRyKCJ4IixNYXRoLm1heCh1LDApK28pLmF0dHIoInkiLDApLHcuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksTS5hdHRyKCJkIiwiTSIraSsiLCIreVswXSsiSDBWIit5WzFdKyJIIitpKX1pZihmLnJhbmdlQmFuZCl7dmFyIEU9ZixBPUUucmFuZ2VCYW5kKCkvMjtsPWY9ZnVuY3Rpb24obil7cmV0dXJuIEUobikrQX19ZWxzZSBsLnJhbmdlQmFuZD9sPWY6ZC5jYWxsKG4sZik7di5jYWxsKG4sbCksbS5jYWxsKG4sZil9KX12YXIgdCxlPVhvLnNjYWxlLmxpbmVhcigpLHI9VHMsdT02LGk9NixvPTMsYT1bMTBdLGM9bnVsbDtyZXR1cm4gbi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ub3JpZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQgaW4gcXM/dCsiIjpUcyxuKTpyfSxuLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9YXJndW1lbnRzLG4pOmF9LG4udGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LG4pOmN9LG4udGlja0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4udGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gZT8odT0rdCxpPSthcmd1bWVudHNbZS0xXSxuKTp1fSxuLmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3Qsbik6dX0sbi5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG4pOml9LG4udGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3Qsbik6b30sbi50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJm59LG59O3ZhciBUcz0iYm90dG9tIixxcz17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O1hvLnN2Zy5icnVzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oaSl7aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9WG8uc2VsZWN0KHRoaXMpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIsdSkub24oInRvdWNoc3RhcnQuYnJ1c2giLHUpLG89aS5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhY2tncm91bmQiKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLnN0eWxlKCJjdXJzb3IiLCJjcm9zc2hhaXIiKSxpLnNlbGVjdEFsbCgiLmV4dGVudCIpLmRhdGEoWzBdKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiZXh0ZW50Iikuc3R5bGUoImN1cnNvciIsIm1vdmUiKTt2YXIgYT1pLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmRhdGEocCxidCk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihuKXtyZXR1cm4icmVzaXplICIrbn0pLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKG4pe3JldHVybiB6c1tuXX0pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGZ1bmN0aW9uKG4pe3JldHVybi9bZXddJC8udGVzdChuKT8tMzpudWxsfSkuYXR0cigieSIsZnVuY3Rpb24obil7cmV0dXJuL15bbnNdLy50ZXN0KG4pPy0zOm51bGx9KS5hdHRyKCJ3aWR0aCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLGEuc3R5bGUoImRpc3BsYXkiLG4uZW1wdHkoKT8ibm9uZSI6bnVsbCk7dmFyIGwsZj1Yby50cmFuc2l0aW9uKGkpLGg9WG8udHJhbnNpdGlvbihvKTtjJiYobD1SaShjKSxoLmF0dHIoIngiLGxbMF0pLmF0dHIoIndpZHRoIixsWzFdLWxbMF0pLGUoZikpLHMmJihsPVJpKHMpLGguYXR0cigieSIsbFswXSkuYXR0cigiaGVpZ2h0IixsWzFdLWxbMF0pLHIoZikpLHQoZil9KX1mdW5jdGlvbiB0KG4pe24uc2VsZWN0QWxsKCIucmVzaXplIikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXtyZXR1cm4idHJhbnNsYXRlKCIrbFsrL2UkLy50ZXN0KG4pXSsiLCIrZlsrL15zLy50ZXN0KG4pXSsiKSJ9KX1mdW5jdGlvbiBlKG4pe24uc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieCIsbFswXSksbi5zZWxlY3RBbGwoIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0IikuYXR0cigid2lkdGgiLGxbMV0tbFswXSl9ZnVuY3Rpb24gcihuKXtuLnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoInkiLGZbMF0pLG4uc2VsZWN0QWxsKCIuZXh0ZW50LC5lPnJlY3QsLnc+cmVjdCIpLmF0dHIoImhlaWdodCIsZlsxXS1mWzBdKX1mdW5jdGlvbiB1KCl7ZnVuY3Rpb24gdSgpezMyPT1Yby5ldmVudC5rZXlDb2RlJiYoQ3x8KHg9bnVsbCxMWzBdLT1sWzFdLExbMV0tPWZbMV0sQz0yKSxkKCkpfWZ1bmN0aW9uIHAoKXszMj09WG8uZXZlbnQua2V5Q29kZSYmMj09QyYmKExbMF0rPWxbMV0sTFsxXSs9ZlsxXSxDPTAsZCgpKX1mdW5jdGlvbiB2KCl7dmFyIG49WG8ubW91c2UoXyksdT0hMTtNJiYoblswXSs9TVswXSxuWzFdKz1NWzFdKSxDfHwoWG8uZXZlbnQuYWx0S2V5Pyh4fHwoeD1bKGxbMF0rbFsxXSkvMiwoZlswXStmWzFdKS8yXSksTFswXT1sWysoblswXTx4WzBdKV0sTFsxXT1mWysoblsxXTx4WzFdKV0pOng9bnVsbCksRSYmbShuLGMsMCkmJihlKFMpLHU9ITApLEEmJm0obixzLDEpJiYocihTKSx1PSEwKSx1JiYodChTKSx3KHt0eXBlOiJicnVzaCIsbW9kZTpDPyJtb3ZlIjoicmVzaXplIn0pKX1mdW5jdGlvbiBtKG4sdCxlKXt2YXIgcix1LGE9UmkodCksYz1hWzBdLHM9YVsxXSxwPUxbZV0sdj1lP2Y6bCxkPXZbMV0tdlswXTtyZXR1cm4gQyYmKGMtPXAscy09ZCtwKSxyPShlP2c6aCk/TWF0aC5tYXgoYyxNYXRoLm1pbihzLG5bZV0pKTpuW2VdLEM/dT0ocis9cCkrZDooeCYmKHA9TWF0aC5tYXgoYyxNYXRoLm1pbihzLDIqeFtlXS1yKSkpLHI+cD8odT1yLHI9cCk6dT1wKSx2WzBdIT1yfHx2WzFdIT11PyhlP289bnVsbDppPW51bGwsdlswXT1yLHZbMV09dSwhMCk6dm9pZCAwfWZ1bmN0aW9uIHkoKXt2KCksUy5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbi5lbXB0eSgpPyJub25lIjpudWxsKSxYby5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxULm9uKCJtb3VzZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigidG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwpLm9uKCJrZXlkb3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwpLE4oKSx3KHt0eXBlOiJicnVzaGVuZCJ9KX12YXIgeCxNLF89dGhpcyxiPVhvLnNlbGVjdChYby5ldmVudC50YXJnZXQpLHc9YS5vZihfLGFyZ3VtZW50cyksUz1Yby5zZWxlY3QoXyksaz1iLmRhdHVtKCksRT0hL14obnxzKSQvLnRlc3QoaykmJmMsQT0hL14oZXx3KSQvLnRlc3QoaykmJnMsQz1iLmNsYXNzZWQoImV4dGVudCIpLE49TygpLEw9WG8ubW91c2UoXyksVD1Yby5zZWxlY3QoR28pLm9uKCJrZXlkb3duLmJydXNoIix1KS5vbigia2V5dXAuYnJ1c2giLHApO2lmKFhvLmV2ZW50LmNoYW5nZWRUb3VjaGVzP1Qub24oInRvdWNobW92ZS5icnVzaCIsdikub24oInRvdWNoZW5kLmJydXNoIix5KTpULm9uKCJtb3VzZW1vdmUuYnJ1c2giLHYpLm9uKCJtb3VzZXVwLmJydXNoIix5KSxTLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpLEMpTFswXT1sWzBdLUxbMF0sTFsxXT1mWzBdLUxbMV07ZWxzZSBpZihrKXt2YXIgcT0rL3ckLy50ZXN0KGspLHo9Ky9ebi8udGVzdChrKTtNPVtsWzEtcV0tTFswXSxmWzEtel0tTFsxXV0sTFswXT1sW3FdLExbMV09Zlt6XX1lbHNlIFhvLmV2ZW50LmFsdEtleSYmKHg9TC5zbGljZSgpKTtTLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksWG8uc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsYi5zdHlsZSgiY3Vyc29yIikpLHcoe3R5cGU6ImJydXNoc3RhcnQifSksdigpfXZhciBpLG8sYT15KG4sImJydXNoc3RhcnQiLCJicnVzaCIsImJydXNoZW5kIiksYz1udWxsLHM9bnVsbCxsPVswLDBdLGY9WzAsMF0saD0hMCxnPSEwLHA9UnNbMF07cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rpb24obil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49YS5vZih0aGlzLGFyZ3VtZW50cyksdD17eDpsLHk6ZixpOmksajpvfSxlPXRoaXMuX19jaGFydF9ffHx0O3RoaXMuX19jaGFydF9fPXQsa3M/WG8uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXtpPWUuaSxvPWUuaixsPWUueCxmPWUueSxuKHt0eXBlOiJicnVzaHN0YXJ0In0pfSkudHdlZW4oImJydXNoOmJydXNoIixmdW5jdGlvbigpe3ZhciBlPWh1KGwsdC54KSxyPWh1KGYsdC55KTtyZXR1cm4gaT1vPW51bGwsZnVuY3Rpb24odSl7bD10Lng9ZSh1KSxmPXQueT1yKHUpLG4oe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSl9fSkuZWFjaCgiZW5kLmJydXNoIixmdW5jdGlvbigpe2k9dC5pLG89dC5qLG4oe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksbih7dHlwZToiYnJ1c2hlbmQifSl9KToobih7dHlwZToiYnJ1c2hzdGFydCJ9KSxuKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLG4oe3R5cGU6ImJydXNoZW5kIn0pKX0pfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxwPVJzWyFjPDwxfCFzXSxuKTpjfSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxwPVJzWyFjPDwxfCFzXSxuKTpzfSxuLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiZzPyhoPSEhdFswXSxnPSEhdFsxXSk6Yz9oPSEhdDpzJiYoZz0hIXQpLG4pOmMmJnM/W2gsZ106Yz9oOnM/ZzpudWxsfSxuLmV4dGVudD1mdW5jdGlvbih0KXt2YXIgZSxyLHUsYSxoO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiYoZT10WzBdLHI9dFsxXSxzJiYoZT1lWzBdLHI9clswXSksaT1bZSxyXSxjLmludmVydCYmKGU9YyhlKSxyPWMocikpLGU+ciYmKGg9ZSxlPXIscj1oKSwoZSE9bFswXXx8ciE9bFsxXSkmJihsPVtlLHJdKSkscyYmKHU9dFswXSxhPXRbMV0sYyYmKHU9dVsxXSxhPWFbMV0pLG89W3UsYV0scy5pbnZlcnQmJih1PXModSksYT1zKGEpKSx1PmEmJihoPXUsdT1hLGE9aCksKHUhPWZbMF18fGEhPWZbMV0pJiYoZj1bdSxhXSkpLG4pOihjJiYoaT8oZT1pWzBdLHI9aVsxXSk6KGU9bFswXSxyPWxbMV0sYy5pbnZlcnQmJihlPWMuaW52ZXJ0KGUpLHI9Yy5pbnZlcnQocikpLGU+ciYmKGg9ZSxlPXIscj1oKSkpLHMmJihvPyh1PW9bMF0sYT1vWzFdKToodT1mWzBdLGE9ZlsxXSxzLmludmVydCYmKHU9cy5pbnZlcnQodSksYT1zLmludmVydChhKSksdT5hJiYoaD11LHU9YSxhPWgpKSksYyYmcz9bW2UsdV0sW3IsYV1dOmM/W2Uscl06cyYmW3UsYV0pfSxuLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZW1wdHkoKXx8KGw9WzAsMF0sZj1bMCwwXSxpPW89bnVsbCksbn0sbi5lbXB0eT1mdW5jdGlvbigpe3JldHVybiEhYyYmbFswXT09bFsxXXx8ISFzJiZmWzBdPT1mWzFdfSxYby5yZWJpbmQobixhLCJvbiIpfTt2YXIgenM9e246Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sUnM9W1sibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV0sRHM9dGMuZm9ybWF0PWFjLnRpbWVGb3JtYXQsUHM9RHMudXRjLFVzPVBzKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTtEcy5pc289RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcmJituZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/T286VXMsT28ucGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9bmV3IERhdGUobik7cmV0dXJuIGlzTmFOKHQpP251bGw6dH0sT28udG9TdHJpbmc9VXMudG9TdHJpbmcsdGMuc2Vjb25kPVJ0KGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgZWMoMWUzKk1hdGguZmxvb3Iobi8xZTMpKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMWUzKk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRTZWNvbmRzKCl9KSx0Yy5zZWNvbmRzPXRjLnNlY29uZC5yYW5nZSx0Yy5zZWNvbmRzLnV0Yz10Yy5zZWNvbmQudXRjLnJhbmdlLHRjLm1pbnV0ZT1SdChmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGVjKDZlNCpNYXRoLmZsb29yKG4vNmU0KSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKG4uZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksdGMubWludXRlcz10Yy5taW51dGUucmFuZ2UsdGMubWludXRlcy51dGM9dGMubWludXRlLnV0Yy5yYW5nZSx0Yy5ob3VyPVJ0KGZ1bmN0aW9uKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1cm4gbmV3IGVjKDM2ZTUqKE1hdGguZmxvb3Iobi8zNmU1LXQpK3QpKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLHRjLmhvdXJzPXRjLmhvdXIucmFuZ2UsdGMuaG91cnMudXRjPXRjLmhvdXIudXRjLnJhbmdlLHRjLm1vbnRoPVJ0KGZ1bmN0aW9uKG4pe3JldHVybiBuPXRjLmRheShuKSxuLnNldERhdGUoMSksbn0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pLHRjLm1vbnRocz10Yy5tb250aC5yYW5nZSx0Yy5tb250aHMudXRjPXRjLm1vbnRoLnV0Yy5yYW5nZTt2YXIganM9WzFlMyw1ZTMsMTVlMywzZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1LDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2MDQ4ZTUsMjU5MmU2LDc3NzZlNiwzMTUzNmU2XSxIcz1bW3RjLnNlY29uZCwxXSxbdGMuc2Vjb25kLDVdLFt0Yy5zZWNvbmQsMTVdLFt0Yy5zZWNvbmQsMzBdLFt0Yy5taW51dGUsMV0sW3RjLm1pbnV0ZSw1XSxbdGMubWludXRlLDE1XSxbdGMubWludXRlLDMwXSxbdGMuaG91ciwxXSxbdGMuaG91ciwzXSxbdGMuaG91ciw2XSxbdGMuaG91ciwxMl0sW3RjLmRheSwxXSxbdGMuZGF5LDJdLFt0Yy53ZWVrLDFdLFt0Yy5tb250aCwxXSxbdGMubW9udGgsM10sW3RjLnllYXIsMV1dLEZzPURzLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0U2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgpJiYxIT1uLmdldERhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiAxIT1uLmdldERhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9XSxbIiVZIixiZV1dKSxPcz17cmFuZ2U6ZnVuY3Rpb24obix0LGUpe3JldHVybiBYby5yYW5nZShNYXRoLmNlaWwobi9lKSplLCt0LGUpLm1hcChJbyl9LGZsb29yOmJ0LGNlaWw6YnR9O0hzLnllYXI9dGMueWVhcix0Yy5zY2FsZT1mdW5jdGlvbigpe3JldHVybiBZbyhYby5zY2FsZS5saW5lYXIoKSxIcyxGcyl9O3ZhciBZcz1Icy5tYXAoZnVuY3Rpb24obil7cmV0dXJuW25bMF0udXRjLG5bMV1dfSksSXM9UHMubXVsdGkoW1siLiVMIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaWxsaXNlY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENTZWNvbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaW51dGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENIb3VycygpfV0sWyIlYSAlZCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDRGF5KCkmJjEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24obil7cmV0dXJuIDEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDTW9udGgoKX1dLFsiJVkiLGJlXV0pO1lzLnllYXI9dGMueWVhci51dGMsdGMuc2NhbGUudXRjPWZ1bmN0aW9uKCl7cmV0dXJuIFlvKFhvLnNjYWxlLmxpbmVhcigpLFlzLElzKX0sWG8udGV4dD13dChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXNwb25zZVRleHR9KSxYby5qc29uPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIFN0KG4sImFwcGxpY2F0aW9uL2pzb24iLFpvLHQpfSxYby5odG1sPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIFN0KG4sInRleHQvaHRtbCIsVm8sdCl9LFhvLnhtbD13dChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXNwb25zZVhNTH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFhvKToib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9WG86dGhpcy5kMz1Yb30oKTsndXNlIHN0cmljdCc7KGZ1bmN0aW9uKHdpbmRvdyl7d2luZG93LmRlZmluZT11bmRlZmluZWQ7fSkuY2FsbCh0aGlzLHRoaXMpOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBEYXRhU2VyaWVzRW5hYmxlQ2hhbmdlRXZlbnRUeXBlPSdkYXRhLXNlcmllcy1lbmFibGVkLWNoYW5nZSc7Y29uc3QgVEhJU19ET0M9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5vd25lckRvY3VtZW50O2NvbnN0IHN2Z05TPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtmdW5jdGlvbiBnZXRDb2xvck9mS2V5KGtleSxzZWxlY3RlZCl7bGV0IGlkPUNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhrZXkpO2lmKHNlbGVjdGVkKXtpZCs9Q29sb3JTY2hlbWUucHJvcGVydGllcy5icmlnaHRlbmVkT2Zmc2V0c1swXTt9Ci1yZXR1cm4gQ29sb3JTY2hlbWUuY29sb3JzQXNTdHJpbmdzW2lkXTt9Ci1mdW5jdGlvbiBnZXRTVkdUZXh0U2l6ZShwYXJlbnROb2RlLHRleHQsb3B0X2NhbGxiYWNrLG9wdF90aGlzKXtjb25zdCB0ZXh0Tm9kZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpO3RleHROb2RlLnNldEF0dHJpYnV0ZU5TKG51bGwsJ3gnLDApO3RleHROb2RlLnNldEF0dHJpYnV0ZU5TKG51bGwsJ3knLDApO3RleHROb2RlLnNldEF0dHJpYnV0ZU5TKG51bGwsJ2ZpbGwnLCdibGFjaycpO3RleHROb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTtwYXJlbnROb2RlLmFwcGVuZENoaWxkKHRleHROb2RlKTtpZihvcHRfY2FsbGJhY2spe29wdF9jYWxsYmFjay5jYWxsKG9wdF90aGlzfHxwYXJlbnROb2RlLHRleHROb2RlKTt9Ci1jb25zdCB3aWR0aD10ZXh0Tm9kZS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtjb25zdCBoZWlnaHQ9dGV4dE5vZGUuZ2V0QkJveCgpLmhlaWdodDtwYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHROb2RlKTtyZXR1cm57d2lkdGgsaGVpZ2h0fTt9Ci1mdW5jdGlvbiBEYXRhU2VyaWVzKGtleSl7dGhpcy5rZXlfPWtleTt0aGlzLnRhcmdldF89dW5kZWZpbmVkO3RoaXMudGl0bGVfPScnO3RoaXMub3B0aW9uYWxfPWZhbHNlO3RoaXMuZW5hYmxlZF89dHJ1ZTt0aGlzLmNvbG9yXz1nZXRDb2xvck9mS2V5KGtleSxmYWxzZSk7dGhpcy5oaWdobGlnaHRlZENvbG9yXz1nZXRDb2xvck9mS2V5KGtleSx0cnVlKTt9Ci1EYXRhU2VyaWVzLnByb3RvdHlwZT17Z2V0IGtleSgpe3JldHVybiB0aGlzLmtleV87fSxnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy50aXRsZV87fSxzZXQgdGl0bGUodCl7dGhpcy50aXRsZV89dDt9LGdldCBjb2xvcigpe3JldHVybiB0aGlzLmNvbG9yXzt9LHNldCBjb2xvcihjKXt0aGlzLmNvbG9yXz1jO30sZ2V0IGhpZ2hsaWdodGVkQ29sb3IoKXtyZXR1cm4gdGhpcy5oaWdobGlnaHRlZENvbG9yXzt9LHNldCBoaWdobGlnaHRlZENvbG9yKGMpe3RoaXMuaGlnaGxpZ2h0ZWRDb2xvcl89Yzt9LGdldCBvcHRpb25hbCgpe3JldHVybiB0aGlzLm9wdGlvbmFsXzt9LHNldCBvcHRpb25hbChvcHRpb25hbCl7dGhpcy5vcHRpb25hbF89b3B0aW9uYWw7fSxnZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmVuYWJsZWRfO30sc2V0IGVuYWJsZWQoZW5hYmxlZCl7aWYoIXRoaXMub3B0aW9uYWwmJiFlbmFibGVkKXt0aGlzLm9wdGlvbmFsPXRydWU7fQotdGhpcy5lbmFibGVkXz1lbmFibGVkO30sZ2V0IHRhcmdldCgpe3JldHVybiB0aGlzLnRhcmdldF87fSxzZXQgdGFyZ2V0KHQpe3RoaXMudGFyZ2V0Xz10O319O2NvbnN0IENoYXJ0QmFzZT10ci51aS5iLmRlZmluZSgnc3ZnJyx1bmRlZmluZWQsc3ZnTlMpO0NoYXJ0QmFzZS5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MVW5rbm93bkVsZW1lbnQucHJvdG90eXBlLGdldERhdGFTZXJpZXMoa2V5KXtpZighdGhpcy5zZXJpZXNCeUtleV8uaGFzKGtleSkpe3RoaXMuc2VyaWVzQnlLZXlfLnNldChrZXksbmV3IERhdGFTZXJpZXMoa2V5KSk7fQotcmV0dXJuIHRoaXMuc2VyaWVzQnlLZXlfLmdldChrZXkpO30sZGVjb3JhdGUoKXtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdjaGFydC1iYXNlJyk7dGhpcy5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywnY3Vyc29yOiBkZWZhdWx0OyB1c2VyLXNlbGVjdDogbm9uZTsnKTt0aGlzLmNoYXJ0VGl0bGVfPXVuZGVmaW5lZDt0aGlzLnNlcmllc0J5S2V5Xz1uZXcgTWFwKCk7dGhpcy5ncmFwaFdpZHRoXz11bmRlZmluZWQ7dGhpcy5ncmFwaEhlaWdodF89dW5kZWZpbmVkO3RoaXMubWFyZ2luPXt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MCx9O3RoaXMuaGlkZUxlZ2VuZF89ZmFsc2U7Y29uc3QgdGVtcGxhdGU9UG9seW1lci5kb20oVEhJU19ET0MpLnF1ZXJ5U2VsZWN0b3IoJyNjaGFydC1iYXNlLXRlbXBsYXRlJyk7Y29uc3Qgc3ZnRWw9UG9seW1lci5kb20odGVtcGxhdGUuY29udGVudCkucXVlcnlTZWxlY3Rvcignc3ZnJyk7Zm9yKGxldCBpPTA7aTxQb2x5bWVyLmRvbShzdmdFbCkuY2hpbGRyZW4ubGVuZ3RoO2krKyl7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQoUG9seW1lci5kb20oc3ZnRWwuY2hpbGRyZW5baV0pLmNsb25lTm9kZSh0cnVlKSk7fQotdGhpcy5hZGRFdmVudExpc3RlbmVyKERhdGFTZXJpZXNFbmFibGVDaGFuZ2VFdmVudFR5cGUsdGhpcy5vbkRhdGFTZXJpZXNFbmFibGVDaGFuZ2VfLmJpbmQodGhpcykpO30sZ2V0IGhpZGVMZWdlbmQoKXtyZXR1cm4gdGhpcy5oaWRlTGVnZW5kXzt9LHNldCBoaWRlTGVnZW5kKGgpe3RoaXMuaGlkZUxlZ2VuZF89aDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30saXNTZXJpZXNFbmFibGVkKGtleSl7cmV0dXJuIHRoaXMuZ2V0RGF0YVNlcmllcyhrZXkpLmVuYWJsZWQ7fSxvbkRhdGFTZXJpZXNFbmFibGVDaGFuZ2VfKGV2ZW50KXt0aGlzLmdldERhdGFTZXJpZXMoZXZlbnQua2V5KS5lbmFibGVkPWV2ZW50LmVuYWJsZWQ7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBjaGFydFRpdGxlKCl7cmV0dXJuIHRoaXMuY2hhcnRUaXRsZV87fSxzZXQgY2hhcnRUaXRsZShjaGFydFRpdGxlKXt0aGlzLmNoYXJ0VGl0bGVfPWNoYXJ0VGl0bGU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBjaGFydEFyZWFFbGVtZW50KCl7cmV0dXJuIFBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJyNjaGFydC1hcmVhJyk7fSxnZXQgZ3JhcGhXaWR0aCgpe2lmKHRoaXMuZ3JhcGhXaWR0aF89PT11bmRlZmluZWQpcmV0dXJuIHRoaXMuZGVmYXVsdEdyYXBoV2lkdGg7cmV0dXJuIHRoaXMuZ3JhcGhXaWR0aF87fSxzZXQgZ3JhcGhXaWR0aCh3aWR0aCl7dGhpcy5ncmFwaFdpZHRoXz13aWR0aDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGRlZmF1bHRHcmFwaFdpZHRoKCl7cmV0dXJuIDA7fSxnZXQgZ3JhcGhIZWlnaHQoKXtpZih0aGlzLmdyYXBoSGVpZ2h0Xz09PXVuZGVmaW5lZClyZXR1cm4gdGhpcy5kZWZhdWx0R3JhcGhIZWlnaHQ7cmV0dXJuIHRoaXMuZ3JhcGhIZWlnaHRfO30sc2V0IGdyYXBoSGVpZ2h0KGhlaWdodCl7dGhpcy5ncmFwaEhlaWdodF89aGVpZ2h0O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgZGVmYXVsdEdyYXBoSGVpZ2h0KCl7cmV0dXJuIDA7fSxnZXQgdG90YWxXaWR0aCgpe3JldHVybiB0aGlzLm1hcmdpbi5sZWZ0K3RoaXMuZ3JhcGhXaWR0aCt0aGlzLm1hcmdpbi5yaWdodDt9LGdldCB0b3RhbEhlaWdodCgpe3JldHVybiB0aGlzLm1hcmdpbi50b3ArdGhpcy5ncmFwaEhlaWdodCt0aGlzLm1hcmdpbi5ib3R0b207fSx1cGRhdGVNYXJnaW5zXygpe2NvbnN0IGxlZ2VuZFNpemU9dGhpcy5jb21wdXRlTGVnZW5kU2l6ZV8oKTt0aGlzLm1hcmdpbi5yaWdodD1NYXRoLm1heCh0aGlzLm1hcmdpbi5yaWdodCxsZWdlbmRTaXplLndpZHRoKTt0aGlzLm1hcmdpbi5ib3R0b209TWF0aC5tYXgodGhpcy5tYXJnaW4uYm90dG9tLGxlZ2VuZFNpemUuaGVpZ2h0LXRoaXMuZ3JhcGhIZWlnaHQpO2lmKHRoaXMuY2hhcnRUaXRsZV8pe2NvbnN0IHRpdGxlU2l6ZT1nZXRTVkdUZXh0U2l6ZSh0aGlzLHRoaXMuY2hhcnRUaXRsZV8sdGV4dE5vZGU9Pnt0ZXh0Tm9kZS5zdHlsZS5mb250U2l6ZT0nMTZwdCc7fSk7dGhpcy5tYXJnaW4udG9wPU1hdGgubWF4KHRoaXMubWFyZ2luLnRvcCx0aXRsZVNpemUuaGVpZ2h0KzE1KTtjb25zdCBob3Jpem9udGFsT3ZlcmhhbmdQeD0odGl0bGVTaXplLndpZHRoLXRoaXMuZ3JhcGhXaWR0aCkvMjt0aGlzLm1hcmdpbi5sZWZ0PU1hdGgubWF4KHRoaXMubWFyZ2luLmxlZnQsaG9yaXpvbnRhbE92ZXJoYW5nUHgpO3RoaXMubWFyZ2luLnJpZ2h0PU1hdGgubWF4KHRoaXMubWFyZ2luLnJpZ2h0LGhvcml6b250YWxPdmVyaGFuZ1B4KTt9fSxjb21wdXRlTGVnZW5kU2l6ZV8oKXtsZXQgd2lkdGg9MDtsZXQgaGVpZ2h0PTA7aWYodGhpcy5oaWRlTGVnZW5kKXJldHVybnt3aWR0aCxoZWlnaHR9O2Zvcihjb25zdCBzZXJpZXMgb2YgdGhpcy5zZXJpZXNCeUtleV8udmFsdWVzKCkpe2NvbnN0IHRleHRTaXplPWdldFNWR1RleHRTaXplKHRoaXMsc2VyaWVzLmtleSk7d2lkdGg9TWF0aC5tYXgod2lkdGgsdGV4dFNpemUud2lkdGgrMjApO2hlaWdodCs9dGV4dFNpemUuaGVpZ2h0O30KLXJldHVybnt3aWR0aCxoZWlnaHR9O30sdXBkYXRlRGltZW5zaW9uc18oKXtjb25zdCB0aGlzU2VsPWQzLnNlbGVjdCh0aGlzKTt0aGlzU2VsLmF0dHIoJ3dpZHRoJyx0aGlzLnRvdGFsV2lkdGgpO3RoaXNTZWwuYXR0cignaGVpZ2h0Jyx0aGlzLnRvdGFsSGVpZ2h0KTtkMy5zZWxlY3QodGhpcy5jaGFydEFyZWFFbGVtZW50KS5hdHRyKCd0cmFuc2Zvcm0nLCd0cmFuc2xhdGUoJyt0aGlzLm1hcmdpbi5sZWZ0KycsICcrdGhpcy5tYXJnaW4udG9wKycpJyk7fSx1cGRhdGVDb250ZW50c18oKXt0aGlzLnVwZGF0ZU1hcmdpbnNfKCk7dGhpcy51cGRhdGVEaW1lbnNpb25zXygpO3RoaXMudXBkYXRlVGl0bGVfKCk7dGhpcy51cGRhdGVMZWdlbmRfKCk7fSx1cGRhdGVUaXRsZV8oKXtjb25zdCB0aXRsZVNlbD1kMy5zZWxlY3QodGhpcy5jaGFydEFyZWFFbGVtZW50KS5zZWxlY3QoJyN0aXRsZScpO2lmKCF0aGlzLmNoYXJ0VGl0bGVfKXt0aXRsZVNlbC5zdHlsZSgnZGlzcGxheScsJ25vbmUnKTtyZXR1cm47fQotdGl0bGVTZWwuYXR0cigndHJhbnNmb3JtJywndHJhbnNsYXRlKCcrdGhpcy5ncmFwaFdpZHRoKjAuNSsnLC0xNSknKS5zdHlsZSgnZGlzcGxheScsdW5kZWZpbmVkKS5zdHlsZSgndGV4dC1hbmNob3InLCdtaWRkbGUnKS5zdHlsZSgnZm9udC1zaXplJywnMTZwdCcpLmF0dHIoJ2NsYXNzJywndGl0bGUnKS5hdHRyKCd3aWR0aCcsdGhpcy5ncmFwaFdpZHRoKS50ZXh0KHRoaXMuY2hhcnRUaXRsZV8pO30sdXBkYXRlTGVnZW5kXygpe2NvbnN0IGNoYXJ0QXJlYVNlbD1kMy5zZWxlY3QodGhpcy5jaGFydEFyZWFFbGVtZW50KTtjaGFydEFyZWFTZWwuc2VsZWN0QWxsKCcubGVnZW5kJykucmVtb3ZlKCk7aWYodGhpcy5oaWRlTGVnZW5kKXJldHVybjtjb25zdCBzZXJpZXM9Wy4uLnRoaXMuc2VyaWVzQnlLZXlfLnZhbHVlcygpXS5yZXZlcnNlKCk7Y29uc3QgbGVnZW5kRW50cmllc1NlbD1jaGFydEFyZWFTZWwuc2VsZWN0QWxsKCcubGVnZW5kJykuZGF0YShzZXJpZXMpO2xlZ2VuZEVudHJpZXNTZWwuZW50ZXIoKS5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKS5hdHRyKCdjbGFzcycsJ2xlZ2VuZCcpLmF0dHIoJ3gnLHRoaXMuZ3JhcGhXaWR0aCsyKS5hdHRyKCd3aWR0aCcsdGhpcy5tYXJnaW4ucmlnaHQpLmF0dHIoJ2hlaWdodCcsMTgpLmF0dHIoJ3RyYW5zZm9ybScsKHNlcmllcyxpKT0+J3RyYW5zbGF0ZSgwLCcraSoxOCsnKScpLmFwcGVuZCgneGh0bWw6Ym9keScpLnN0eWxlKCdtYXJnaW4nLDApLmFwcGVuZCgndHItdWktYi1jaGFydC1sZWdlbmQta2V5JykucHJvcGVydHkoJ2NvbG9yJyxzZXJpZXM9PigodGhpcy5jdXJyZW50SGlnaGxpZ2h0ZWRMZWdlbmRLZXk9PT1zZXJpZXMua2V5KT9zZXJpZXMuaGlnaGxpZ2h0ZWRDb2xvcjpzZXJpZXMuY29sb3IpKS5wcm9wZXJ0eSgnd2lkdGgnLHRoaXMubWFyZ2luLnJpZ2h0KS5wcm9wZXJ0eSgndGFyZ2V0JyxzZXJpZXM9PnNlcmllcy50YXJnZXQpLnByb3BlcnR5KCd0aXRsZScsc2VyaWVzPT5zZXJpZXMudGl0bGUpLnByb3BlcnR5KCdvcHRpb25hbCcsc2VyaWVzPT5zZXJpZXMub3B0aW9uYWwpLnByb3BlcnR5KCdlbmFibGVkJyxzZXJpZXM9PnNlcmllcy5lbmFibGVkKS50ZXh0KHNlcmllcz0+c2VyaWVzLmtleSk7bGVnZW5kRW50cmllc1NlbC5leGl0KCkucmVtb3ZlKCk7fSxnZXQgaGlnaGxpZ2h0ZWRMZWdlbmRLZXkoKXtyZXR1cm4gdGhpcy5oaWdobGlnaHRlZExlZ2VuZEtleV87fSxzZXQgaGlnaGxpZ2h0ZWRMZWdlbmRLZXkoaGlnaGxpZ2h0ZWRMZWdlbmRLZXkpe3RoaXMuaGlnaGxpZ2h0ZWRMZWdlbmRLZXlfPWhpZ2hsaWdodGVkTGVnZW5kS2V5O3RoaXMudXBkYXRlSGlnaGxpZ2h0XygpO30sZ2V0IGN1cnJlbnRIaWdobGlnaHRlZExlZ2VuZEtleSgpe2lmKHRoaXMudGVtcEhpZ2hsaWdodGVkTGVnZW5kS2V5Xyl7cmV0dXJuIHRoaXMudGVtcEhpZ2hsaWdodGVkTGVnZW5kS2V5Xzt9Ci1yZXR1cm4gdGhpcy5oaWdobGlnaHRlZExlZ2VuZEtleV87fSxwdXNoVGVtcEhpZ2hsaWdodGVkTGVnZW5kS2V5KGtleSl7aWYodGhpcy50ZW1wSGlnaGxpZ2h0ZWRMZWdlbmRLZXlfKXt0aHJvdyBuZXcgRXJyb3IoJ3B1c2ggY2Fubm90IG5lc3QnKTt9Ci10aGlzLnRlbXBIaWdobGlnaHRlZExlZ2VuZEtleV89a2V5O3RoaXMudXBkYXRlSGlnaGxpZ2h0XygpO30scG9wVGVtcEhpZ2hsaWdodGVkTGVnZW5kS2V5KGtleSl7aWYodGhpcy50ZW1wSGlnaGxpZ2h0ZWRMZWdlbmRLZXlfIT09a2V5KXt0aHJvdyBuZXcgRXJyb3IoJ3BvcCBjYW5ub3QgaGFwcGVuJyk7fQotdGhpcy50ZW1wSGlnaGxpZ2h0ZWRMZWdlbmRLZXlfPXVuZGVmaW5lZDt0aGlzLnVwZGF0ZUhpZ2hsaWdodF8oKTt9LHVwZGF0ZUhpZ2hsaWdodF8oKXtjb25zdCBjaGFydEFyZWFTZWw9ZDMuc2VsZWN0KHRoaXMuY2hhcnRBcmVhRWxlbWVudCk7Y29uc3QgbGVnZW5kRW50cmllc1NlbD1jaGFydEFyZWFTZWwuc2VsZWN0QWxsKCcubGVnZW5kJyk7Y29uc3QgZ2V0RGF0YVNlcmllcz1jaGFydC5nZXREYXRhU2VyaWVzLmJpbmQoY2hhcnQpO2NvbnN0IGN1cnJlbnRIaWdobGlnaHRlZExlZ2VuZEtleT1jaGFydC5jdXJyZW50SGlnaGxpZ2h0ZWRMZWdlbmRLZXk7bGVnZW5kRW50cmllc1NlbC5lYWNoKGZ1bmN0aW9uKGtleSl7Y29uc3QgZGF0YVNlcmllcz1nZXREYXRhU2VyaWVzKGtleSk7aWYoa2V5PT09Y3VycmVudEhpZ2hsaWdodGVkTGVnZW5kS2V5KXt0aGlzLnN0eWxlLmZpbGw9ZGF0YVNlcmllcy5oaWdobGlnaHRlZENvbG9yO3RoaXMuc3R5bGUuZm9udFdlaWdodD0nYm9sZCc7fWVsc2V7dGhpcy5zdHlsZS5maWxsPWRhdGFTZXJpZXMuY29sb3I7dGhpcy5zdHlsZS5mb250V2VpZ2h0PScnO319KTt9fTtyZXR1cm57Q2hhcnRCYXNlLERhdGFTZXJpZXNFbmFibGVDaGFuZ2VFdmVudFR5cGUsZ2V0Q29sb3JPZktleSxnZXRTVkdUZXh0U2l6ZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBEM19ZX0FYSVNfV0lEVEhfUFg9OTtjb25zdCBEM19YX0FYSVNfSEVJR0hUX1BYPTIzO2Z1bmN0aW9uIHNhbml0aXplUG93ZXIoeCxkZWZhdWx0VmFsdWUpe2lmKCFpc05hTih4KSYmaXNGaW5pdGUoeCkmJih4IT09MCkpcmV0dXJuIHg7cmV0dXJuIGRlZmF1bHRWYWx1ZTt9Ci1jb25zdCBDaGFydEJhc2UyRD10ci51aS5iLmRlZmluZSgnY2hhcnQtYmFzZS0yZCcsdHIudWkuYi5DaGFydEJhc2UpO0NoYXJ0QmFzZTJELnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmIuQ2hhcnRCYXNlLnByb3RvdHlwZSxkZWNvcmF0ZSgpe3N1cGVyLmRlY29yYXRlKCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgnY2hhcnQtYmFzZS0yZCcpO3RoaXMueFNjYWxlXz1kMy5zY2FsZS5saW5lYXIoKTt0aGlzLnlTY2FsZV89ZDMuc2NhbGUubGluZWFyKCk7dGhpcy5pc1lMb2dTY2FsZV89ZmFsc2U7dGhpcy55TG9nU2NhbGVCYXNlXz0xMDt0aGlzLnlMb2dTY2FsZU1pbl89dW5kZWZpbmVkO3RoaXMuYXV0b0RhdGFSYW5nZV89bmV3IHRyLmIubWF0aC5SYW5nZSgpO3RoaXMub3ZlcnJpZGVEYXRhUmFuZ2VfPXVuZGVmaW5lZDt0aGlzLmhpZGVYQXhpc189ZmFsc2U7dGhpcy5oaWRlWUF4aXNfPWZhbHNlO3RoaXMuZGF0YV89W107dGhpcy54QXhpc0xhYmVsXz0nJzt0aGlzLnlBeGlzTGFiZWxfPScnO3RoaXMudGV4dEhlaWdodFB4Xz0wO3RoaXMudW5pdF89dW5kZWZpbmVkO2QzLnNlbGVjdCh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQpLmFwcGVuZCgnZycpLmF0dHIoJ2lkJywnYnJ1c2hlcycpO2QzLnNlbGVjdCh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQpLmFwcGVuZCgnZycpLmF0dHIoJ2lkJywnc2VyaWVzJyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLHRoaXMub25Nb3VzZURvd25fLmJpbmQodGhpcykpO30sZ2V0IHlMb2dTY2FsZUJhc2UoKXtyZXR1cm4gdGhpcy55TG9nU2NhbGVCYXNlXzt9LHNldCB5TG9nU2NhbGVCYXNlKGIpe3RoaXMueUxvZ1NjYWxlQmFzZV89Yjt9LGdldCB1bml0KCl7cmV0dXJuIHRoaXMudW5pdF87fSxzZXQgdW5pdCh1bml0KXt0aGlzLnVuaXRfPXVuaXQ7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCB4QXhpc0xhYmVsKCl7cmV0dXJuIHRoaXMueEF4aXNMYWJlbF87fSxzZXQgeEF4aXNMYWJlbChsYWJlbCl7dGhpcy54QXhpc0xhYmVsXz1sYWJlbDt9LGdldCB5QXhpc0xhYmVsKCl7cmV0dXJuIHRoaXMueUF4aXNMYWJlbF87fSxzZXQgeUF4aXNMYWJlbChsYWJlbCl7dGhpcy55QXhpc0xhYmVsXz1sYWJlbDt9LGdldCBoaWRlWEF4aXMoKXtyZXR1cm4gdGhpcy5oaWRlWEF4aXNfO30sc2V0IGhpZGVYQXhpcyhoKXt0aGlzLmhpZGVYQXhpc189aDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGhpZGVZQXhpcygpe3JldHVybiB0aGlzLmhpZGVZQXhpc187fSxzZXQgaGlkZVlBeGlzKGgpe3RoaXMuaGlkZVlBeGlzXz1oO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgZGF0YSgpe3JldHVybiB0aGlzLmRhdGFfO30sc2V0IGRhdGEoZGF0YSl7aWYoZGF0YT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdkYXRhIG11c3QgYmUgYW4gQXJyYXknKTt9Ci10aGlzLmRhdGFfPWRhdGE7dGhpcy51cGRhdGVTZXJpZXNLZXlzXygpO3RoaXMudXBkYXRlRGF0YVJhbmdlXygpO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxzZXQgaXNZTG9nU2NhbGUobG9nU2NhbGUpe2lmKGxvZ1NjYWxlKXt0aGlzLnlTY2FsZV89ZDMuc2NhbGUubG9nKCkuYmFzZSh0aGlzLnlMb2dTY2FsZUJhc2UpO31lbHNle3RoaXMueVNjYWxlXz1kMy5zY2FsZS5saW5lYXIoKTt9Ci10aGlzLmlzWUxvZ1NjYWxlXz1sb2dTY2FsZTt9LGdldFlTY2FsZU1pbl8oKXtyZXR1cm4gdGhpcy5pc1lMb2dTY2FsZV8/dGhpcy55TG9nU2NhbGVNaW5fOjA7fSxnZXRZU2NhbGVEb21haW5fKG1pblZhbHVlLG1heFZhbHVlKXtpZih0aGlzLm92ZXJyaWRlRGF0YVJhbmdlXyE9PXVuZGVmaW5lZCl7cmV0dXJuW3RoaXMuZGF0YVJhbmdlLm1pbix0aGlzLmRhdGFSYW5nZS5tYXhdO30KLWlmKHRoaXMuaXNZTG9nU2NhbGVfKXtyZXR1cm5bdGhpcy5nZXRZU2NhbGVNaW5fKCksbWF4VmFsdWVdO30KLXJldHVybltNYXRoLm1pbihtaW5WYWx1ZSx0aGlzLmdldFlTY2FsZU1pbl8oKSksbWF4VmFsdWVdO30sZ2V0U2FtcGxlV2lkdGhfKGRhdGEsaW5kZXgsbGVmdFNpZGUpe2xldCBsZWZ0SW5kZXg7bGV0IHJpZ2h0SW5kZXg7aWYobGVmdFNpZGUpe2xlZnRJbmRleD1NYXRoLm1heChpbmRleC0xLDApO3JpZ2h0SW5kZXg9aW5kZXg7fWVsc2V7bGVmdEluZGV4PWluZGV4O3JpZ2h0SW5kZXg9TWF0aC5taW4oaW5kZXgrMSxkYXRhLmxlbmd0aC0xKTt9Ci1jb25zdCBsZWZ0V2lkdGg9dGhpcy5nZXRYRm9yRGF0dW1fKGRhdGFbaW5kZXhdLGluZGV4KS0KLXRoaXMuZ2V0WEZvckRhdHVtXyhkYXRhW2xlZnRJbmRleF0sbGVmdEluZGV4KTtjb25zdCByaWdodFdpZHRoPXRoaXMuZ2V0WEZvckRhdHVtXyhkYXRhW3JpZ2h0SW5kZXhdLHJpZ2h0SW5kZXgpLQotdGhpcy5nZXRYRm9yRGF0dW1fKGRhdGFbaW5kZXhdLGluZGV4KTtyZXR1cm4gdHIuYi5tYXRoLlN0YXRpc3RpY3MubWVhbihbbGVmdFdpZHRoLHJpZ2h0V2lkdGhdKTt9LHVwZGF0ZVNlcmllc0tleXNfKCl7dGhpcy5kYXRhXy5mb3JFYWNoKGZ1bmN0aW9uKGRhdHVtKXtPYmplY3Qua2V5cyhkYXR1bSkuZm9yRWFjaChmdW5jdGlvbihrZXkpe2lmKHRoaXMuaXNEYXR1bUZpZWxkU2VyaWVzXyhrZXkpKXt0aGlzLmdldERhdGFTZXJpZXMoa2V5KTt9fSx0aGlzKTt9LHRoaXMpO30saXNEYXR1bUZpZWxkU2VyaWVzXyhmaWVsZE5hbWUpe3JldHVybiBmaWVsZE5hbWUhPT0neCc7fSxnZXRYRm9yRGF0dW1fKGRhdHVtLGluZGV4KXtyZXR1cm4gZGF0dW0ueDt9LHVwZGF0ZU1hcmdpbnNfKCl7dGhpcy5tYXJnaW4ubGVmdD10aGlzLmhpZGVZQXhpcz8wOnRoaXMueUF4aXNXaWR0aDt0aGlzLm1hcmdpbi5ib3R0b209dGhpcy5oaWRlWEF4aXM/MDp0aGlzLnhBeGlzSGVpZ2h0O2lmKHRoaXMuaGlkZVhBeGlzJiYhdGhpcy5oaWRlWUF4aXMpe3RoaXMubWFyZ2luLmJvdHRvbT0xMDt9Ci1pZih0aGlzLmhpZGVZQXhpcyYmIXRoaXMuaGlkZVhBeGlzKXt0aGlzLm1hcmdpbi5sZWZ0PTEwO30KLXRoaXMubWFyZ2luLnRvcD10aGlzLmhpZGVZQXhpcz8wOjEwO2lmKHRoaXMueUF4aXNMYWJlbCl7dGhpcy5tYXJnaW4udG9wKz10aGlzLnRleHRIZWlnaHRQeF87fQotaWYodGhpcy54QXhpc0xhYmVsKXt0aGlzLm1hcmdpbi5yaWdodD1NYXRoLm1heCh0aGlzLm1hcmdpbi5yaWdodCwxNit0ci51aS5iLmdldFNWR1RleHRTaXplKHRoaXMsdGhpcy54QXhpc0xhYmVsKS53aWR0aCk7fQotc3VwZXIudXBkYXRlTWFyZ2luc18oKTt9LGdldCB4QXhpc0hlaWdodCgpe3JldHVybiBEM19YX0FYSVNfSEVJR0hUX1BYO30sY29tcHV0ZVNjYWxlVGlja1dpZHRoXyhzY2FsZSl7aWYodGhpcy5kYXRhLmxlbmd0aD09PTApcmV0dXJuIDA7bGV0IHRpY2tWYWx1ZXM9c2NhbGUudGlja3MoKTtsZXQgdGlja0Zvcm1hdD1zY2FsZS50aWNrRm9ybWF0KCk7aWYodGhpcy5pc1lMb2dTY2FsZV8pe2NvbnN0IGVuY2xvc2luZ1Bvd2Vycz10aGlzLmRhdGFSYW5nZS5lbmNsb3NpbmdQb3dlcnMoKTt0aWNrVmFsdWVzPVtdO2NvbnN0IG1heFBvd2VyPXNhbml0aXplUG93ZXIoZW5jbG9zaW5nUG93ZXJzLm1heCx0aGlzLnlMb2dTY2FsZUJhc2UpO2ZvcihsZXQgcG93ZXI9c2FuaXRpemVQb3dlcihlbmNsb3NpbmdQb3dlcnMubWluLDEpO3Bvd2VyPD1tYXhQb3dlcjtwb3dlcio9dGhpcy55TG9nU2NhbGVCYXNlKXt0aWNrVmFsdWVzLnB1c2gocG93ZXIpO30KLXRpY2tGb3JtYXQ9dj0+di50b1N0cmluZygpO30KLWlmKHRoaXMudW5pdCl7dGlja0Zvcm1hdD12PT50aGlzLnVuaXQuZm9ybWF0KHYpO30KLWxldCBtYXhUaWNrV2lkdGg9MDtmb3IoY29uc3QgdGlja1ZhbHVlIG9mIHRpY2tWYWx1ZXMpe21heFRpY2tXaWR0aD1NYXRoLm1heChtYXhUaWNrV2lkdGgsdHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLHRpY2tGb3JtYXQodGlja1ZhbHVlKSkud2lkdGgpO30KLXJldHVybiBEM19ZX0FYSVNfV0lEVEhfUFgrbWF4VGlja1dpZHRoO30sZ2V0IHlBeGlzV2lkdGgoKXtyZXR1cm4gdGhpcy5jb21wdXRlU2NhbGVUaWNrV2lkdGhfKHRoaXMueVNjYWxlXyk7fSx1cGRhdGVTY2FsZXNfKCl7aWYodGhpcy5kYXRhXy5sZW5ndGg9PT0wKXJldHVybjt0aGlzLnhTY2FsZV8ucmFuZ2UoWzAsdGhpcy5ncmFwaFdpZHRoXSk7dGhpcy54U2NhbGVfLmRvbWFpbihkMy5leHRlbnQodGhpcy5kYXRhXyx0aGlzLmdldFhGb3JEYXR1bV8uYmluZCh0aGlzKSkpO3RoaXMueVNjYWxlXy5yYW5nZShbdGhpcy5ncmFwaEhlaWdodCwwXSk7dGhpcy55U2NhbGVfLmRvbWFpbihbdGhpcy5kYXRhUmFuZ2UubWluLHRoaXMuZGF0YVJhbmdlLm1heF0pO30sdXBkYXRlQnJ1c2hDb250ZW50c18oYnJ1c2hTZWwpe2JydXNoU2VsLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpO30sdXBkYXRlWEF4aXNfKHhBeGlzKXt4QXhpcy5zZWxlY3RBbGwoJyonKS5yZW1vdmUoKTt4QXhpc1swXVswXS5zdHlsZS5vcGFjaXR5PTA7aWYodGhpcy5oaWRlWEF4aXMpcmV0dXJuO3RoaXMuZHJhd1hBeGlzXyh4QXhpcyk7Y29uc3QgbGFiZWw9eEF4aXMuYXBwZW5kKCd0ZXh0JykuYXR0cignY2xhc3MnLCdsYWJlbCcpO3RoaXMuZHJhd1hBeGlzVGlja3NfKHhBeGlzKTt0aGlzLmRyYXdYQXhpc0xhYmVsXyhsYWJlbCk7eEF4aXNbMF1bMF0uc3R5bGUub3BhY2l0eT0xO30sZHJhd1hBeGlzXyh4QXhpcyl7eEF4aXMuYXR0cigndHJhbnNmb3JtJywndHJhbnNsYXRlKDAsJyt0aGlzLmdyYXBoSGVpZ2h0KycpJykuY2FsbChkMy5zdmcuYXhpcygpLnNjYWxlKHRoaXMueFNjYWxlXykub3JpZW50KCdib3R0b20nKSk7fSxkcmF3WEF4aXNMYWJlbF8obGFiZWwpe2xhYmVsLmF0dHIoJ3gnLHRoaXMuZ3JhcGhXaWR0aCsxNikuYXR0cigneScsOCkudGV4dCh0aGlzLnhBeGlzTGFiZWwpO30sZHJhd1hBeGlzVGlja3NfKHhBeGlzKXtsZXQgcHJldmlvdXNSaWdodD11bmRlZmluZWQ7eEF4aXMuc2VsZWN0QWxsKCcudGljaycpWzBdLmZvckVhY2goZnVuY3Rpb24odGljayl7Y29uc3QgY3VycmVudExlZnQ9dGljay50cmFuc2Zvcm0uYmFzZVZhbFswXS5tYXRyaXguZTtpZigocHJldmlvdXNSaWdodD09PXVuZGVmaW5lZCl8fChjdXJyZW50TGVmdD4ocHJldmlvdXNSaWdodCszKSkpe2NvbnN0IGN1cnJlbnRXaWR0aD10aWNrLmdldEJCb3goKS53aWR0aDtwcmV2aW91c1JpZ2h0PWN1cnJlbnRMZWZ0K2N1cnJlbnRXaWR0aDt9ZWxzZXt0aWNrLnN0eWxlLm9wYWNpdHk9MDt9fSk7fSxzZXQgb3ZlcnJpZGVEYXRhUmFuZ2UocmFuZ2Upe3RoaXMub3ZlcnJpZGVEYXRhUmFuZ2VfPXJhbmdlO30sZ2V0IGRhdGFSYW5nZSgpe2lmKHRoaXMub3ZlcnJpZGVEYXRhUmFuZ2VfIT09dW5kZWZpbmVkKXtyZXR1cm4gdGhpcy5vdmVycmlkZURhdGFSYW5nZV87fQotcmV0dXJuIHRoaXMuYXV0b0RhdGFSYW5nZV87fSx1cGRhdGVEYXRhUmFuZ2VfKCl7aWYodGhpcy5vdmVycmlkZURhdGFSYW5nZV8hPT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IGRhdGFCeVNlcmllc0tleT10aGlzLmdldERhdGFCeVNlcmllc0tleV8oKTt0aGlzLmF1dG9EYXRhUmFuZ2VfLnJlc2V0KCk7Zm9yKGNvbnN0W3Nlcmllcyx2YWx1ZXNdb2YgT2JqZWN0LmVudHJpZXMoZGF0YUJ5U2VyaWVzS2V5KSl7Zm9yKGxldCBpPTA7aTx2YWx1ZXMubGVuZ3RoO2krKyl7dGhpcy5hdXRvRGF0YVJhbmdlXy5hZGRWYWx1ZSh2YWx1ZXNbaV1bc2VyaWVzXSk7fX0KLXRoaXMueUxvZ1NjYWxlTWluXz11bmRlZmluZWQ7aWYodGhpcy5hdXRvRGF0YVJhbmdlXy5taW4hPT11bmRlZmluZWQpe2xldCBtaW5WYWx1ZT10aGlzLmF1dG9EYXRhUmFuZ2VfLm1pbjtpZihtaW5WYWx1ZT09PTApe21pblZhbHVlPTE7fQotY29uc3Qgb25lUG93ZXJMZXNzPXRyLmIubWF0aC5sZXNzZXJQb3dlcihtaW5WYWx1ZS90aGlzLnlMb2dTY2FsZUJhc2UpO3RoaXMueUxvZ1NjYWxlTWluXz1vbmVQb3dlckxlc3M7fX0sdXBkYXRlWUF4aXNfKHlBeGlzKXt5QXhpcy5zZWxlY3RBbGwoJyonKS5yZW1vdmUoKTt5QXhpc1swXVswXS5zdHlsZS5vcGFjaXR5PTA7aWYodGhpcy5oaWRlWUF4aXMpcmV0dXJuO3RoaXMuZHJhd1lBeGlzXyh5QXhpcyk7dGhpcy5kcmF3WUF4aXNUaWNrc18oeUF4aXMpO2NvbnN0IGxhYmVsPXlBeGlzLmFwcGVuZCgndGV4dCcpLmF0dHIoJ2NsYXNzJywnbGFiZWwnKTt0aGlzLmRyYXdZQXhpc0xhYmVsXyhsYWJlbCk7fSxkcmF3WUF4aXNfKHlBeGlzKXtsZXQgYXhpc01vZGlmaWVyPWQzLnN2Zy5heGlzKCkuc2NhbGUodGhpcy55U2NhbGVfKS5vcmllbnQoJ2xlZnQnKTtsZXQgdGlja0Zvcm1hdDtpZih0aGlzLmlzWUxvZ1NjYWxlXyl7aWYodGhpcy55TG9nU2NhbGVNaW5fPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCB0aWNrVmFsdWVzPVtdO2NvbnN0IGVuY2xvc2luZ1Bvd2Vycz10aGlzLmRhdGFSYW5nZS5lbmNsb3NpbmdQb3dlcnMoKTtjb25zdCBtYXhQb3dlcj1zYW5pdGl6ZVBvd2VyKGVuY2xvc2luZ1Bvd2Vycy5tYXgsdGhpcy55TG9nU2NhbGVCYXNlKTtmb3IobGV0IHBvd2VyPXNhbml0aXplUG93ZXIoZW5jbG9zaW5nUG93ZXJzLm1pbiwxKTtwb3dlcjw9bWF4UG93ZXI7cG93ZXIqPXRoaXMueUxvZ1NjYWxlQmFzZSl7dGlja1ZhbHVlcy5wdXNoKHBvd2VyKTt9Ci1heGlzTW9kaWZpZXI9YXhpc01vZGlmaWVyLnRpY2tWYWx1ZXModGlja1ZhbHVlcyk7dGlja0Zvcm1hdD12PT52LnRvU3RyaW5nKCk7fQotaWYodGhpcy51bml0KXt0aWNrRm9ybWF0PXY9PnRoaXMudW5pdC5mb3JtYXQodik7fQotaWYodGlja0Zvcm1hdCl7YXhpc01vZGlmaWVyPWF4aXNNb2RpZmllci50aWNrRm9ybWF0KHRpY2tGb3JtYXQpO30KLXlBeGlzLmNhbGwoYXhpc01vZGlmaWVyKTt9LGRyYXdZQXhpc0xhYmVsXyhsYWJlbCl7Y29uc3QgbGFiZWxXaWR0aFB4PU1hdGguY2VpbCh0ci51aS5iLmdldFNWR1RleHRTaXplKHRoaXMuY2hhcnRBcmVhRWxlbWVudCx0aGlzLnlBeGlzTGFiZWwpLndpZHRoKTtsYWJlbC5hdHRyKCd4JywtbGFiZWxXaWR0aFB4KS5hdHRyKCd5JywtOCkudGV4dCh0aGlzLnlBeGlzTGFiZWwpO30sZHJhd1lBeGlzVGlja3NfKHlBeGlzKXtsZXQgcHJldmlvdXNUb3A9dW5kZWZpbmVkO3lBeGlzLnNlbGVjdEFsbCgnLnRpY2snKVswXS5mb3JFYWNoKGZ1bmN0aW9uKHRpY2spe2NvbnN0IGJib3g9dGljay5nZXRCQm94KCk7Y29uc3QgY3VycmVudFRvcD10aWNrLnRyYW5zZm9ybS5iYXNlVmFsWzBdLm1hdHJpeC5mO2NvbnN0IGN1cnJlbnRCb3R0b209Y3VycmVudFRvcCtiYm94LmhlaWdodDtpZigocHJldmlvdXNUb3A9PT11bmRlZmluZWQpfHwocHJldmlvdXNUb3A+KGN1cnJlbnRCb3R0b20rMykpKXtwcmV2aW91c1RvcD1jdXJyZW50VG9wO31lbHNle3RpY2suc3R5bGUub3BhY2l0eT0wO319KTt5QXhpc1swXVswXS5zdHlsZS5vcGFjaXR5PTE7fSx1cGRhdGVDb250ZW50c18oKXtpZih0aGlzLnRleHRIZWlnaHRQeF89PT0wKXt0aGlzLnRleHRIZWlnaHRQeF89dHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLCdBeScpLmhlaWdodDt9Ci10aGlzLnVwZGF0ZVNjYWxlc18oKTtzdXBlci51cGRhdGVDb250ZW50c18oKTtjb25zdCBjaGFydEFyZWFTZWw9ZDMuc2VsZWN0KHRoaXMuY2hhcnRBcmVhRWxlbWVudCk7dGhpcy51cGRhdGVYQXhpc18oY2hhcnRBcmVhU2VsLnNlbGVjdCgnLnguYXhpcycpKTt0aGlzLnVwZGF0ZVlBeGlzXyhjaGFydEFyZWFTZWwuc2VsZWN0KCcueS5heGlzJykpO2Zvcihjb25zdCBjaGlsZCBvZiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJy5heGlzIHBhdGgsIC5heGlzIGxpbmUnKSl7Y2hpbGQuc3R5bGUuZmlsbD0nbm9uZSc7Y2hpbGQuc3R5bGUuc2hhcGVSZW5kZXJpbmc9J2NyaXNwRWRnZXMnO2NoaWxkLnN0eWxlLnN0cm9rZT0nYmxhY2snO30KLXRoaXMudXBkYXRlQnJ1c2hDb250ZW50c18oY2hhcnRBcmVhU2VsLnNlbGVjdCgnI2JydXNoZXMnKSk7dGhpcy51cGRhdGVEYXRhQ29udGVudHNfKGNoYXJ0QXJlYVNlbC5zZWxlY3QoJyNzZXJpZXMnKSk7fSx1cGRhdGVEYXRhQ29udGVudHNfKHNlcmllc1NlbCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGdldERhdGFCeVNlcmllc0tleV8oKXtjb25zdCBkYXRhQnlTZXJpZXNLZXk9e307Zm9yKGNvbnN0W2tleSxzZXJpZXNdb2YgdGhpcy5zZXJpZXNCeUtleV8pe2RhdGFCeVNlcmllc0tleVtrZXldPVtdO30KLXRoaXMuZGF0YV8uZm9yRWFjaChmdW5jdGlvbihtdWx0aVNlcmllc0RhdHVtLGluZGV4KXtjb25zdCB4PXRoaXMuZ2V0WEZvckRhdHVtXyhtdWx0aVNlcmllc0RhdHVtLGluZGV4KTtkMy5rZXlzKG11bHRpU2VyaWVzRGF0dW0pLmZvckVhY2goZnVuY3Rpb24oc2VyaWVzS2V5KXtpZihzZXJpZXNLZXk9PT0neCcpcmV0dXJuO2lmKG11bHRpU2VyaWVzRGF0dW1bc2VyaWVzS2V5XT09PXVuZGVmaW5lZClyZXR1cm47aWYoIXRoaXMuaXNEYXR1bUZpZWxkU2VyaWVzXyhzZXJpZXNLZXkpKXJldHVybjtjb25zdCBzaW5nbGVTZXJpZXNEYXR1bT17eH07c2luZ2xlU2VyaWVzRGF0dW1bc2VyaWVzS2V5XT1tdWx0aVNlcmllc0RhdHVtW3Nlcmllc0tleV07ZGF0YUJ5U2VyaWVzS2V5W3Nlcmllc0tleV0ucHVzaChzaW5nbGVTZXJpZXNEYXR1bSk7fSx0aGlzKTt9LHRoaXMpO3JldHVybiBkYXRhQnlTZXJpZXNLZXk7fSxnZXRDaGFydFBvaW50QXRDbGllbnRQb2ludF8oY2xpZW50UG9pbnQpe2NvbnN0IHJlY3Q9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDpjbGllbnRQb2ludC54LXJlY3QubGVmdC10aGlzLm1hcmdpbi5sZWZ0LHk6Y2xpZW50UG9pbnQueS1yZWN0LnRvcC10aGlzLm1hcmdpbi50b3B9O30sZ2V0RGF0YVBvaW50QXRDaGFydFBvaW50XyhjaGFydFBvaW50KXtyZXR1cm57eDp0ci5iLm1hdGguY2xhbXAodGhpcy54U2NhbGVfLmludmVydChjaGFydFBvaW50LngpLHRoaXMueFNjYWxlXy5kb21haW4oKVswXSx0aGlzLnhTY2FsZV8uZG9tYWluKClbMV0pLHk6dHIuYi5tYXRoLmNsYW1wKHRoaXMueVNjYWxlXy5pbnZlcnQoY2hhcnRQb2ludC55KSx0aGlzLnlTY2FsZV8uZG9tYWluKClbMF0sdGhpcy55U2NhbGVfLmRvbWFpbigpWzFdKX07fSxnZXREYXRhUG9pbnRBdENsaWVudFBvaW50XyhjbGllbnRYLGNsaWVudFkpe2NvbnN0IGNoYXJ0UG9pbnQ9dGhpcy5nZXRDaGFydFBvaW50QXRDbGllbnRQb2ludF8oe3g6Y2xpZW50WCx5OmNsaWVudFl9KTtyZXR1cm4gdGhpcy5nZXREYXRhUG9pbnRBdENoYXJ0UG9pbnRfKGNoYXJ0UG9pbnQpO30scHJlcGFyZURhdGFFdmVudF8obW91c2VFdmVudCxkYXRhRXZlbnQpe2NvbnN0IGRhdGFQb2ludD10aGlzLmdldERhdGFQb2ludEF0Q2xpZW50UG9pbnRfKG1vdXNlRXZlbnQuY2xpZW50WCxtb3VzZUV2ZW50LmNsaWVudFkpO2RhdGFFdmVudC54PWRhdGFQb2ludC54O2RhdGFFdmVudC55PWRhdGFQb2ludC55O30sb25Nb3VzZURvd25fKG1vdXNlRXZlbnQpe3RyLnVpLmIudHJhY2tNb3VzZU1vdmVzVW50aWxNb3VzZVVwKHRoaXMub25Nb3VzZU1vdmVfLmJpbmQodGhpcyxtb3VzZUV2ZW50LmJ1dHRvbiksdGhpcy5vbk1vdXNlVXBfLmJpbmQodGhpcyxtb3VzZUV2ZW50LmJ1dHRvbikpO21vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTttb3VzZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IGRhdGFFdmVudD1uZXcgdHIuYi5FdmVudCgnaXRlbS1tb3VzZWRvd24nKTtkYXRhRXZlbnQuYnV0dG9uPW1vdXNlRXZlbnQuYnV0dG9uO3RoaXMucHJlcGFyZURhdGFFdmVudF8obW91c2VFdmVudCxkYXRhRXZlbnQpO3RoaXMuZGlzcGF0Y2hFdmVudChkYXRhRXZlbnQpO2Zvcihjb25zdCBjaGlsZCBvZiB0aGlzLnF1ZXJ5U2VsZWN0b3IoJyNicnVzaGVzJykuY2hpbGRyZW4pe2NoaWxkLnNldEF0dHJpYnV0ZSgnZmlsbCcsJ3JnYigxMDMsIDE5OSwgMTY1KScpO319LG9uTW91c2VNb3ZlXyhidXR0b24sbW91c2VFdmVudCl7aWYobW91c2VFdmVudC5idXR0b25zIT09dW5kZWZpbmVkKXttb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7bW91c2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt9Ci1jb25zdCBkYXRhRXZlbnQ9bmV3IHRyLmIuRXZlbnQoJ2l0ZW0tbW91c2Vtb3ZlJyk7ZGF0YUV2ZW50LmJ1dHRvbj1idXR0b247dGhpcy5wcmVwYXJlRGF0YUV2ZW50Xyhtb3VzZUV2ZW50LGRhdGFFdmVudCk7dGhpcy5kaXNwYXRjaEV2ZW50KGRhdGFFdmVudCk7Zm9yKGNvbnN0IGNoaWxkIG9mIHRoaXMucXVlcnlTZWxlY3RvcignI2JydXNoZXMnKS5jaGlsZHJlbil7Y2hpbGQuc2V0QXR0cmlidXRlKCdmaWxsJywncmdiKDEwMywgMTk5LCAxNjUpJyk7fX0sb25Nb3VzZVVwXyhidXR0b24sbW91c2VFdmVudCl7bW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO21vdXNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3QgZGF0YUV2ZW50PW5ldyB0ci5iLkV2ZW50KCdpdGVtLW1vdXNldXAnKTtkYXRhRXZlbnQuYnV0dG9uPWJ1dHRvbjt0aGlzLnByZXBhcmVEYXRhRXZlbnRfKG1vdXNlRXZlbnQsZGF0YUV2ZW50KTt0aGlzLmRpc3BhdGNoRXZlbnQoZGF0YUV2ZW50KTtmb3IoY29uc3QgY2hpbGQgb2YgdGhpcy5xdWVyeVNlbGVjdG9yKCcjYnJ1c2hlcycpLmNoaWxkcmVuKXtjaGlsZC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCdyZ2IoMjEzLCAyMzYsIDIyOSknKTt9fX07cmV0dXJue0NoYXJ0QmFzZTJELH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2NvbnN0IENoYXJ0QmFzZTJEPXRyLnVpLmIuQ2hhcnRCYXNlMkQ7Y29uc3QgQ2hhcnRCYXNlMkRCcnVzaFg9dHIudWkuYi5kZWZpbmUoJ2NoYXJ0LWJhc2UtMmQtYnJ1c2gtMWQnLENoYXJ0QmFzZTJEKTtDaGFydEJhc2UyREJydXNoWC5wcm90b3R5cGU9e19fcHJvdG9fXzpDaGFydEJhc2UyRC5wcm90b3R5cGUsZGVjb3JhdGUoKXtzdXBlci5kZWNvcmF0ZSgpO3RoaXMuYnJ1c2hlZFJhbmdlXz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7fSxzZXQgYnJ1c2hlZFJhbmdlKHJhbmdlKXt0aGlzLmJydXNoZWRSYW5nZV8ucmVzZXQoKTt0aGlzLmJydXNoZWRSYW5nZV8uYWRkUmFuZ2UocmFuZ2UpO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgYnJ1c2hlZFJhbmdlKCl7cmV0dXJuIHRyLmIubWF0aC5SYW5nZS5mcm9tRGljdCh0aGlzLmJydXNoZWRSYW5nZV8udG9KU09OKCkpO30sY29tcHV0ZUJydXNoUmFuZ2VGcm9tSW5kaWNlcyhpbmRleEEsaW5kZXhCKXtpbmRleEE9dHIuYi5tYXRoLmNsYW1wKGluZGV4QSwwLHRoaXMuZGF0YV8ubGVuZ3RoLTEpO2luZGV4Qj10ci5iLm1hdGguY2xhbXAoaW5kZXhCLDAsdGhpcy5kYXRhXy5sZW5ndGgtMSk7Y29uc3QgbGVmdEluZGV4PU1hdGgubWluKGluZGV4QSxpbmRleEIpO2NvbnN0IHJpZ2h0SW5kZXg9TWF0aC5tYXgoaW5kZXhBLGluZGV4Qik7Y29uc3QgYnJ1c2hSYW5nZT1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7YnJ1c2hSYW5nZS5hZGRWYWx1ZSh0aGlzLmdldFhGb3JEYXR1bV8odGhpcy5kYXRhX1tsZWZ0SW5kZXhdLGxlZnRJbmRleCktCi10aGlzLmdldFNhbXBsZVdpZHRoXyh0aGlzLmRhdGFfLGxlZnRJbmRleCx0cnVlKSk7YnJ1c2hSYW5nZS5hZGRWYWx1ZSh0aGlzLmdldFhGb3JEYXR1bV8odGhpcy5kYXRhX1tyaWdodEluZGV4XSxyaWdodEluZGV4KSsKLXRoaXMuZ2V0U2FtcGxlV2lkdGhfKHRoaXMuZGF0YV8scmlnaHRJbmRleCxmYWxzZSkpO3JldHVybiBicnVzaFJhbmdlO30sZ2V0RGF0YUluZGV4XyhkYXRhWCl7aWYodGhpcy5kYXRhLmxlbmd0aD09PTApcmV0dXJuIHVuZGVmaW5lZDtjb25zdCBiaXNlY3Q9ZDMuYmlzZWN0b3IodGhpcy5nZXRYRm9yRGF0dW1fLmJpbmQodGhpcykpLnJpZ2h0O3JldHVybiBiaXNlY3QodGhpcy5kYXRhXyxkYXRhWCktMTt9LHByZXBhcmVEYXRhRXZlbnRfKG1vdXNlRXZlbnQsZGF0YUV2ZW50KXtDaGFydEJhc2UyRC5wcm90b3R5cGUucHJlcGFyZURhdGFFdmVudF8uY2FsbCh0aGlzLG1vdXNlRXZlbnQsZGF0YUV2ZW50KTtkYXRhRXZlbnQuaW5kZXg9dGhpcy5nZXREYXRhSW5kZXhfKGRhdGFFdmVudC54KTtpZihkYXRhRXZlbnQuaW5kZXghPT11bmRlZmluZWQpe2RhdGFFdmVudC5kYXRhPXRoaXMuZGF0YV9bZGF0YUV2ZW50LmluZGV4XTt9fSx1cGRhdGVCcnVzaENvbnRlbnRzXyhicnVzaFNlbCl7YnJ1c2hTZWwuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7Y29uc3QgYnJ1c2hlcz10aGlzLmJydXNoZWRSYW5nZV8uaXNFbXB0eT9bXTpbdGhpcy5icnVzaGVkUmFuZ2VfXTtjb25zdCBicnVzaFJlY3RzU2VsPWJydXNoU2VsLnNlbGVjdEFsbCgncmVjdCcpLmRhdGEoYnJ1c2hlcyk7YnJ1c2hSZWN0c1NlbC5lbnRlcigpLmFwcGVuZCgncmVjdCcpO2JydXNoUmVjdHNTZWwuZXhpdCgpLnJlbW92ZSgpO3RoaXMuZHJhd0JydXNoXyhicnVzaFJlY3RzU2VsKTt9LGRyYXdCcnVzaF8oYnJ1c2hSZWN0c1NlbCl7YnJ1c2hSZWN0c1NlbC5hdHRyKCd4JyxkPT50aGlzLnhTY2FsZV8oZC5taW4pKS5hdHRyKCd5JywwKS5hdHRyKCd3aWR0aCcsZD0+dGhpcy54U2NhbGVfKGQubWF4KS10aGlzLnhTY2FsZV8oZC5taW4pKS5hdHRyKCdoZWlnaHQnLHRoaXMuZ3JhcGhIZWlnaHQpLmF0dHIoJ2ZpbGwnLCdyZ2IoMjEzLCAyMzYsIDIyOSknKTt9fTtyZXR1cm57Q2hhcnRCYXNlMkRCcnVzaFgsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgQ29sdW1uQ2hhcnQ9dHIudWkuYi5kZWZpbmUoJ2NvbHVtbi1jaGFydCcsdHIudWkuYi5DaGFydEJhc2UyREJydXNoWCk7Q29sdW1uQ2hhcnQucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYi5DaGFydEJhc2UyREJydXNoWC5wcm90b3R5cGUsZGVjb3JhdGUoKXtzdXBlci5kZWNvcmF0ZSgpO3RoaXMueEN1c2hpb25fPTE7dGhpcy5pc1N0YWNrZWRfPWZhbHNlO3RoaXMuZW5hYmxlSG92ZXJCb3g9dHJ1ZTt0aGlzLmRpc3BsYXlYSW5Ib3Zlcj1mYWxzZTt9LHNldCBpc1N0YWNrZWQoc3RhY2tlZCl7dGhpcy5pc1N0YWNrZWRfPXRydWU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBpc1N0YWNrZWQoKXtyZXR1cm4gdGhpcy5pc1N0YWNrZWRfO30sZ2V0IGRlZmF1bHRHcmFwaEhlaWdodCgpe3JldHVybiAxMDA7fSxnZXQgZGVmYXVsdEdyYXBoV2lkdGgoKXtyZXR1cm4gMTAqdGhpcy5kYXRhXy5sZW5ndGg7fSx1cGRhdGVTY2FsZXNfKCl7aWYodGhpcy5kYXRhXy5sZW5ndGg9PT0wKXJldHVybjtsZXQgeERpZmZlcmVuY2VzPTA7bGV0IGN1cnJlbnRYPXVuZGVmaW5lZDtsZXQgcHJldmlvdXNYPXVuZGVmaW5lZDt0aGlzLmRhdGFfLmZvckVhY2goZnVuY3Rpb24oZGF0dW0saW5kZXgpe3ByZXZpb3VzWD1jdXJyZW50WDtjdXJyZW50WD10aGlzLmdldFhGb3JEYXR1bV8oZGF0dW0saW5kZXgpO2lmKHByZXZpb3VzWCE9PXVuZGVmaW5lZCl7eERpZmZlcmVuY2VzKz1jdXJyZW50WC1wcmV2aW91c1g7fX0sdGhpcyk7dGhpcy54U2NhbGVfLnJhbmdlKFswLHRoaXMuZ3JhcGhXaWR0aF0pO2NvbnN0IGRvbWFpbj1kMy5leHRlbnQodGhpcy5kYXRhXyx0aGlzLmdldFhGb3JEYXR1bV8uYmluZCh0aGlzKSk7aWYodGhpcy5kYXRhXy5sZW5ndGg+MSl7dGhpcy54Q3VzaGlvbl89eERpZmZlcmVuY2VzLyh0aGlzLmRhdGFfLmxlbmd0aC0xKTt9Ci10aGlzLnhTY2FsZV8uZG9tYWluKFtkb21haW5bMF0sZG9tYWluWzFdK3RoaXMueEN1c2hpb25fXSk7dGhpcy55U2NhbGVfLnJhbmdlKFt0aGlzLmdyYXBoSGVpZ2h0LDBdKTt0aGlzLnlTY2FsZV8uZG9tYWluKHRoaXMuZ2V0WVNjYWxlRG9tYWluXyh0aGlzLmRhdGFSYW5nZS5taW4sdGhpcy5kYXRhUmFuZ2UubWF4KSk7fSx1cGRhdGVEYXRhUmFuZ2VfKCl7aWYoIXRoaXMuaXNTdGFja2VkKXtzdXBlci51cGRhdGVEYXRhUmFuZ2VfKCk7cmV0dXJuO30KLXRoaXMuYXV0b0RhdGFSYW5nZV8ucmVzZXQoKTt0aGlzLmF1dG9EYXRhUmFuZ2VfLmFkZFZhbHVlKDApO2Zvcihjb25zdCBkYXR1bSBvZiB0aGlzLmRhdGFfKXtsZXQgc3VtPTA7Zm9yKGNvbnN0W2tleSxzZXJpZXNdb2YgdGhpcy5zZXJpZXNCeUtleV8pe2lmKGRhdHVtW2tleV09PT11bmRlZmluZWQpe2NvbnRpbnVlO30KLXN1bSs9ZGF0dW1ba2V5XTt9Ci10aGlzLmF1dG9EYXRhUmFuZ2VfLmFkZFZhbHVlKHN1bSk7fX0sZ2V0U3RhY2tlZFJlY3RzRm9yRGF0dW1fKGRhdHVtLGluZGV4KXtjb25zdCBzdGFja3M9W107bGV0IGJvdHRvbT10aGlzLnlTY2FsZV8ucmFuZ2UoKVswXTtsZXQgc3VtPTA7Zm9yKGNvbnN0W2tleSxzZXJpZXNdb2YgdGhpcy5zZXJpZXNCeUtleV8pe2lmKGRhdHVtW2tleV09PT11bmRlZmluZWR8fCF0aGlzLmlzU2VyaWVzRW5hYmxlZChrZXkpKXtjb250aW51ZTt9Ci1zdW0rPXRoaXMuZGF0YVJhbmdlLmNsYW1wKGRhdHVtW2tleV0pO2NvbnN0IGhlaWdodFB4PWJvdHRvbS10aGlzLnlTY2FsZV8oc3VtKTtib3R0b20tPWhlaWdodFB4O3N0YWNrcy5wdXNoKHtrZXksdmFsdWU6ZGF0dW1ba2V5XSxjb2xvcjp0aGlzLmdldERhdGFTZXJpZXMoa2V5KS5jb2xvcixoZWlnaHRQeCx0b3BQeDpib3R0b20sdW5kZXJmbG93OnN1bTx0aGlzLmRhdGFSYW5nZS5taW4sb3ZlcmZsb3c6c3VtPnRoaXMuZGF0YVJhbmdlLm1heCx9KTt9Ci1yZXR1cm4gc3RhY2tzO30sZ2V0UmVjdHNGb3JEYXR1bV8oZGF0dW0saW5kZXgpe2lmKHRoaXMuaXNTdGFja2VkKXtyZXR1cm4gdGhpcy5nZXRTdGFja2VkUmVjdHNGb3JEYXR1bV8oZGF0dW0saW5kZXgpO30KLWNvbnN0IHN0YWNrcz1bXTtmb3IoY29uc3Rba2V5LHNlcmllc11vZiB0aGlzLnNlcmllc0J5S2V5Xyl7aWYoZGF0dW1ba2V5XT09PXVuZGVmaW5lZHx8IXRoaXMuaXNTZXJpZXNFbmFibGVkKGtleSkpe2NvbnRpbnVlO30KLWNvbnN0IGNsYW1wZWRWYWx1ZT10aGlzLmRhdGFSYW5nZS5jbGFtcChkYXR1bVtrZXldKTtjb25zdCB0b3BQeD10aGlzLnlTY2FsZV8oTWF0aC5tYXgoY2xhbXBlZFZhbHVlLHRoaXMuZ2V0WVNjYWxlTWluXygpKSk7c3RhY2tzLnB1c2goe2tleSx2YWx1ZTpkYXR1bVtrZXldLHRvcFB4LGhlaWdodFB4OnRoaXMueVNjYWxlXy5yYW5nZSgpWzBdLXRvcFB4LGNvbG9yOnRoaXMuZ2V0RGF0YVNlcmllcyhrZXkpLmNvbG9yLHVuZGVyZmxvdzpkYXR1bVtrZXldPHRoaXMuZGF0YVJhbmdlLm1pbixvdmVyZmxvdzpkYXR1bVtrZXldPnRoaXMuZGF0YVJhbmdlLm1heCx9KTt9Ci1zdGFja3Muc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvcFB4LWEudG9wUHg7fSk7cmV0dXJuIHN0YWNrczt9LGRyYXdIb3ZlclZhbHVlQm94XyhyZWN0KXtjb25zdCByZWN0SG92ZXJFdmVudD1uZXcgdHIuYi5FdmVudCgncmVjdC1tb3VzZWVudGVyJyk7cmVjdEhvdmVyRXZlbnQucmVjdD1yZWN0O3RoaXMuZGlzcGF0Y2hFdmVudChyZWN0SG92ZXJFdmVudCk7aWYoIXRoaXMuZW5hYmxlSG92ZXJCb3gpcmV0dXJuO2NvbnN0IHNlcmllc0tleXM9Wy4uLnRoaXMuc2VyaWVzQnlLZXlfLmtleXMoKV07Y29uc3QgY2hhcnRBcmVhU2VsPWQzLnNlbGVjdCh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQpO2NoYXJ0QXJlYVNlbC5zZWxlY3RBbGwoJy5ob3ZlcicpLnJlbW92ZSgpO2xldCBrZXlXaWR0aFB4PTA7bGV0IGtleUhlaWdodFB4PTA7aWYoc2VyaWVzS2V5cy5sZW5ndGg+MSl7a2V5V2lkdGhQeD10ci51aS5iLmdldFNWR1RleHRTaXplKHRoaXMuY2hhcnRBcmVhRWxlbWVudCxyZWN0LmtleSkud2lkdGgrNTtrZXlIZWlnaHRQeD10aGlzLnRleHRIZWlnaHRQeF87fQotbGV0IHhMYWJlbFdpZHRoUHg9MDtsZXQgeExhYmVsSGVpZ2h0UHg9MDtpZih0aGlzLmRpc3BsYXlYSW5Ib3Zlcil7eExhYmVsV2lkdGhQeD10ci51aS5iLmdldFNWR1RleHRTaXplKHRoaXMuY2hhcnRBcmVhRWxlbWVudCxyZWN0LmRhdHVtLngpLndpZHRoKzU7eExhYmVsSGVpZ2h0UHg9dGhpcy50ZXh0SGVpZ2h0UHhfO30KLWxldCB2YWx1ZT1yZWN0LnZhbHVlO2lmKHRoaXMudW5pdCl2YWx1ZT10aGlzLnVuaXQuZm9ybWF0KHZhbHVlKTtjb25zdCB2YWx1ZVdpZHRoUHg9dHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQsdmFsdWUpLndpZHRoKzU7Y29uc3QgdmFsdWVIZWlnaHRQeD10aGlzLnRleHRIZWlnaHRQeF87Y29uc3QgaG92ZXJXaWR0aFB4PU1hdGgubWF4KGtleVdpZHRoUHgsdmFsdWVXaWR0aFB4LHhMYWJlbFdpZHRoUHgpO2xldCBob3ZlckxlZnRQeD1yZWN0LmxlZnRQeCsocmVjdC53aWR0aFB4LzIpO2hvdmVyTGVmdFB4PU1hdGgubWF4KGhvdmVyTGVmdFB4LWhvdmVyV2lkdGhQeCwtdGhpcy5tYXJnaW4ubGVmdCk7Y29uc3QgaG92ZXJIZWlnaHRQeD1rZXlIZWlnaHRQeCt2YWx1ZUhlaWdodFB4K3hMYWJlbEhlaWdodFB4KzI7bGV0IGhvdmVyVG9wUHg9cmVjdC50b3BQeDtob3ZlclRvcFB4PU1hdGgubWluKGhvdmVyVG9wUHgsdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQtaG92ZXJIZWlnaHRQeC0xMik7Y2hhcnRBcmVhU2VsLmFwcGVuZCgncmVjdCcpLmF0dHIoJ2NsYXNzJywnaG92ZXInKS5vbignbW91c2VsZWF2ZScsKCk9PnRoaXMuY2xlYXJIb3ZlclZhbHVlQm94XyhyZWN0KSkuYXR0cignZmlsbCcsJ3doaXRlJykuYXR0cignc3Ryb2tlJywnYmxhY2snKS5hdHRyKCd4Jyxob3ZlckxlZnRQeCkuYXR0cigneScsaG92ZXJUb3BQeCkuYXR0cignd2lkdGgnLGhvdmVyV2lkdGhQeCkuYXR0cignaGVpZ2h0Jyxob3ZlckhlaWdodFB4KTtpZihzZXJpZXNLZXlzLmxlbmd0aD4xKXtjaGFydEFyZWFTZWwuYXBwZW5kKCd0ZXh0JykuYXR0cignY2xhc3MnLCdob3ZlcicpLm9uKCdtb3VzZWxlYXZlJywoKT0+dGhpcy5jbGVhckhvdmVyVmFsdWVCb3hfKHJlY3QpKS5hdHRyKCdmaWxsJyxyZWN0LmNvbG9yKS5hdHRyKCd4Jyxob3ZlckxlZnRQeCsyKS5hdHRyKCd5Jyxob3ZlclRvcFB4K2tleUhlaWdodFB4LTIpLnRleHQocmVjdC5rZXkpO30KLWlmKHRoaXMuZGlzcGxheVhJbkhvdmVyKXtjaGFydEFyZWFTZWwuYXBwZW5kKCd0ZXh0JykuYXR0cignY2xhc3MnLCdob3ZlcicpLm9uKCdtb3VzZWxlYXZlJywoKT0+dGhpcy5jbGVhckhvdmVyVmFsdWVCb3hfKHJlY3QpKS5hdHRyKCdmaWxsJyxyZWN0LmNvbG9yKS5hdHRyKCd4Jyxob3ZlckxlZnRQeCsyKS5hdHRyKCd5Jyxob3ZlclRvcFB4K2tleUhlaWdodFB4K3hMYWJlbEhlaWdodFB4LTIpLnRleHQocmVjdC5kYXR1bS54KTt9Ci1jaGFydEFyZWFTZWwuYXBwZW5kKCd0ZXh0JykuYXR0cignY2xhc3MnLCdob3ZlcicpLm9uKCdtb3VzZWxlYXZlJywoKT0+dGhpcy5jbGVhckhvdmVyVmFsdWVCb3hfKHJlY3QpKS5hdHRyKCdmaWxsJyxyZWN0LmNvbG9yKS5hdHRyKCd4Jyxob3ZlckxlZnRQeCsyKS5hdHRyKCd5Jyxob3ZlclRvcFB4K2hvdmVySGVpZ2h0UHgtMikudGV4dCh2YWx1ZSk7fSxjbGVhckhvdmVyVmFsdWVCb3hfKHJlY3Qpe2NvbnN0IGV2ZW50PXdpbmRvdy5ldmVudDtpZihldmVudC5yZWxhdGVkVGFyZ2V0JiZBcnJheS5mcm9tKGV2ZW50LnJlbGF0ZWRUYXJnZXQuY2xhc3NMaXN0KS5pbmNsdWRlcygnaG92ZXInKSl7cmV0dXJuO30KLWNvbnN0IHJlY3RIb3ZlckV2ZW50PW5ldyB0ci5iLkV2ZW50KCdyZWN0LW1vdXNlbGVhdmUnKTtyZWN0SG92ZXJFdmVudC5yZWN0PXJlY3Q7dGhpcy5kaXNwYXRjaEV2ZW50KHJlY3RIb3ZlckV2ZW50KTtkMy5zZWxlY3QodGhpcy5jaGFydEFyZWFFbGVtZW50KS5zZWxlY3RBbGwoJy5ob3ZlcicpLnJlbW92ZSgpO30sZHJhd1JlY3RfKHJlY3Qsc2VsKXtzZWw9c2VsLmRhdGEoW3JlY3RdKTtzZWwuZW50ZXIoKS5hcHBlbmQoJ3JlY3QnKS5hdHRyKCdmaWxsJyxyZWN0LmNvbG9yKS5hdHRyKCd4JyxyZWN0LmxlZnRQeCkuYXR0cigneScscmVjdC50b3BQeCkuYXR0cignd2lkdGgnLHJlY3Qud2lkdGhQeCkuYXR0cignaGVpZ2h0JyxyZWN0LmhlaWdodFB4KS5vbignbW91c2VlbnRlcicsdGhpcy5kcmF3SG92ZXJWYWx1ZUJveF8uYmluZCh0aGlzLHJlY3QpKS5vbignbW91c2VsZWF2ZScsdGhpcy5jbGVhckhvdmVyVmFsdWVCb3hfLmJpbmQodGhpcyxyZWN0KSk7c2VsLmV4aXQoKS5yZW1vdmUoKTt9LGRyYXdVbmRlcmZsb3dfKHJlY3Qsc2VsKXtzZWw9c2VsLmRhdGEoW3JlY3RdKTtzZWwuZW50ZXIoKS5hcHBlbmQoJ3RleHQnKS50ZXh0KCcqJykuYXR0cignZmlsbCcscmVjdC5jb2xvcikuYXR0cigneCcscmVjdC5sZWZ0UHgrKHJlY3Qud2lkdGhQeC8yKSkuYXR0cigneScsdGhpcy5ncmFwaEhlaWdodCkub24oJ21vdXNlZW50ZXInLHRoaXMuZHJhd0hvdmVyVmFsdWVCb3hfLmJpbmQodGhpcyxyZWN0KSkub24oJ21vdXNlbGVhdmUnLHRoaXMuY2xlYXJIb3ZlclZhbHVlQm94Xy5iaW5kKHRoaXMscmVjdCkpO3NlbC5leGl0KCkucmVtb3ZlKCk7fSxkcmF3T3ZlcmZsb3dfKHJlY3Qsc2VsKXtzZWw9c2VsLmRhdGEoW3JlY3RdKTtzZWwuZW50ZXIoKS5hcHBlbmQoJ3RleHQnKS50ZXh0KCcqJykuYXR0cignZmlsbCcscmVjdC5jb2xvcikuYXR0cigneCcscmVjdC5sZWZ0UHgrKHJlY3Qud2lkdGhQeC8yKSkuYXR0cigneScsMCk7c2VsLmV4aXQoKS5yZW1vdmUoKTt9LHVwZGF0ZURhdGFDb250ZW50c18oZGF0YVNlbCl7ZGF0YVNlbC5zZWxlY3RBbGwoJyonKS5yZW1vdmUoKTtjb25zdCBjaGFydEFyZWFTZWw9ZDMuc2VsZWN0KHRoaXMuY2hhcnRBcmVhRWxlbWVudCk7Y29uc3Qgc2VyaWVzS2V5cz1bLi4udGhpcy5zZXJpZXNCeUtleV8ua2V5cygpXTtjb25zdCByZWN0c1NlbD1kYXRhU2VsLnNlbGVjdEFsbCgncGF0aCcpO3RoaXMuZGF0YV8uZm9yRWFjaChmdW5jdGlvbihkYXR1bSxpbmRleCl7Y29uc3QgY3VycmVudFg9dGhpcy5nZXRYRm9yRGF0dW1fKGRhdHVtLGluZGV4KTtsZXQgd2lkdGg9dW5kZWZpbmVkO2lmKGluZGV4PCh0aGlzLmRhdGFfLmxlbmd0aC0xKSl7Y29uc3QgbmV4dFg9dGhpcy5nZXRYRm9yRGF0dW1fKHRoaXMuZGF0YV9baW5kZXgrMV0saW5kZXgrMSk7d2lkdGg9bmV4dFgtY3VycmVudFg7fWVsc2V7d2lkdGg9dGhpcy54Q3VzaGlvbl87fQotZm9yKGNvbnN0IHJlY3Qgb2YgdGhpcy5nZXRSZWN0c0ZvckRhdHVtXyhkYXR1bSxpbmRleCkpe3JlY3QuZGF0dW09ZGF0dW07cmVjdC5pbmRleD1pbmRleDtyZWN0LmxlZnRQeD10aGlzLnhTY2FsZV8oY3VycmVudFgpO3JlY3QucmlnaHRQeD10aGlzLnhTY2FsZV8oY3VycmVudFgrd2lkdGgpO3JlY3Qud2lkdGhQeD1yZWN0LnJpZ2h0UHgtcmVjdC5sZWZ0UHg7dGhpcy5kcmF3UmVjdF8ocmVjdCxyZWN0c1NlbCk7aWYocmVjdC51bmRlcmZsb3cpe3RoaXMuZHJhd1VuZGVyZmxvd18ocmVjdCxyZWN0c1NlbCk7fQotaWYocmVjdC5vdmVyZmxvdyl7dGhpcy5kcmF3T3ZlcmZsb3dfKHJlY3QscmVjdHNTZWwpO319fSx0aGlzKTt9fTtyZXR1cm57Q29sdW1uQ2hhcnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgTGluZUNoYXJ0PXRyLnVpLmIuZGVmaW5lKCdsaW5lLWNoYXJ0Jyx0ci51aS5iLkNoYXJ0QmFzZTJEQnJ1c2hYKTtMaW5lQ2hhcnQucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYi5DaGFydEJhc2UyREJydXNoWC5wcm90b3R5cGUsZGVjb3JhdGUoKXtzdXBlci5kZWNvcmF0ZSgpO3RoaXMuZW5hYmxlSG92ZXJCb3g9dHJ1ZTt0aGlzLmRpc3BsYXlYSW5Ib3Zlcj1mYWxzZTt9LGdldCBkZWZhdWx0R3JhcGhXaWR0aCgpe3JldHVybiAyMCp0aGlzLmRhdGFfLmxlbmd0aDt9LGdldCBkZWZhdWx0R3JhcGhIZWlnaHQoKXtyZXR1cm4gMTAwO30sZHJhd0hvdmVyVmFsdWVCb3hfKGNpcmNsZSl7dHIudWkuYi5Db2x1bW5DaGFydC5wcm90b3R5cGUuZHJhd0hvdmVyVmFsdWVCb3hfLmNhbGwodGhpcyxjaXJjbGUpO30sY2xlYXJIb3ZlclZhbHVlQm94XyhjaXJjbGUpe3RyLnVpLmIuQ29sdW1uQ2hhcnQucHJvdG90eXBlLmNsZWFySG92ZXJWYWx1ZUJveF8uY2FsbCh0aGlzLGNpcmNsZSk7fSx1cGRhdGVEYXRhQ29udGVudHNfKGRhdGFTZWwpe2RhdGFTZWwuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7Y29uc3QgZGF0YUJ5U2VyaWVzS2V5PXRoaXMuZ2V0RGF0YUJ5U2VyaWVzS2V5XygpO2NvbnN0IHNlcmllc0tleXM9Wy4uLnRoaXMuc2VyaWVzQnlLZXlfLmtleXMoKV07Y29uc3QgcGF0aHNTZWw9ZGF0YVNlbC5zZWxlY3RBbGwoJ3BhdGgnKS5kYXRhKHNlcmllc0tleXMpO3BhdGhzU2VsLmVudGVyKCkuYXBwZW5kKCdwYXRoJykuc3R5bGUoJ2ZpbGwnLCdub25lJykuc3R5bGUoJ3N0cm9rZS13aWR0aCcsJzEuNXB4Jykuc3R5bGUoJ3N0cm9rZScsa2V5PT50aGlzLmdldERhdGFTZXJpZXMoa2V5KS5jb2xvcikuYXR0cignZCcsa2V5PT57Y29uc3QgbGluZT1kMy5zdmcubGluZSgpLngoZD0+dGhpcy54U2NhbGVfKGQueCkpLnkoZD0+dGhpcy55U2NhbGVfKHRoaXMuZGF0YVJhbmdlLmNsYW1wKGRba2V5XSkpKTtyZXR1cm4gbGluZShkYXRhQnlTZXJpZXNLZXlba2V5XSk7fSk7cGF0aHNTZWwuZXhpdCgpLnJlbW92ZSgpO2lmKHRoaXMuZW5hYmxlSG92ZXJCb3gpe2ZvcihsZXQgaW5kZXg9MDtpbmRleDx0aGlzLmRhdGFfLmxlbmd0aDsrK2luZGV4KXtjb25zdCBkYXR1bT10aGlzLmRhdGFfW2luZGV4XTtjb25zdCB4PXRoaXMuZ2V0WEZvckRhdHVtXyhkYXR1bSxpbmRleCk7Zm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBPYmplY3QuZW50cmllcyhkYXR1bSkpe2lmKGtleT09PSd4Jyljb250aW51ZTtpZih2YWx1ZT09PXVuZGVmaW5lZCljb250aW51ZTtjb25zdCBjb2xvcj10aGlzLmdldERhdGFTZXJpZXMoa2V5KS5jb2xvcjtjb25zdCBjaXJjbGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ2NpcmNsZScpO2NpcmNsZS5zZXRBdHRyaWJ1dGUoJ2N4Jyx0aGlzLnhTY2FsZV8oeCkpO2NpcmNsZS5zZXRBdHRyaWJ1dGUoJ2N5Jyx0aGlzLnlTY2FsZV8odGhpcy5kYXRhUmFuZ2UuY2xhbXAodmFsdWUpKSk7Y2lyY2xlLnNldEF0dHJpYnV0ZSgncicsNSk7Y2lyY2xlLnN0eWxlLmZpbGw9Y29sb3I7Y2lyY2xlLmRhdHVtPWRhdHVtO2NpcmNsZS5rZXk9a2V5O2NpcmNsZS52YWx1ZT1kYXR1bVtrZXldO2NpcmNsZS5sZWZ0UHg9dGhpcy54U2NhbGVfKHgpO2NpcmNsZS53aWR0aFB4PTA7Y2lyY2xlLmNvbG9yPWNvbG9yO2NpcmNsZS50b3BQeD10aGlzLnlTY2FsZV8odGhpcy5kYXRhUmFuZ2UuY2xhbXAodmFsdWUpKTtjaXJjbGUuaGVpZ2h0UHg9MDtjaXJjbGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsKCk9PnRoaXMuZHJhd0hvdmVyVmFsdWVCb3hfKGNpcmNsZSkpO2NpcmNsZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywoKT0+dGhpcy5jbGVhckhvdmVyVmFsdWVCb3hfKGNpcmNsZSkpO2RhdGFTZWxbMF1bMF0uYXBwZW5kQ2hpbGQoY2lyY2xlKTt9fX19fTtyZXR1cm57TGluZUNoYXJ0LH07fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1lLXMtaW5wdXQtbGF0ZW5jeS1zaWRlLXBhbmVsJyxiZWhhdmlvcnM6W3RyLnVpLmJlaGF2aW9ycy5TaWRlUGFuZWxdLHJlYWR5KCl7dGhpcy5yYW5nZU9mSW50ZXJlc3RfPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTt0aGlzLmZyYW1ldGltZVR5cGVfPXRyLm1vZGVsLmhlbHBlcnMuSU1QTF9GUkFNRVRJTUVfVFlQRTt0aGlzLmxhdGVuY3lDaGFydF89dW5kZWZpbmVkO3RoaXMuZnJhbWV0aW1lQ2hhcnRfPXVuZGVmaW5lZDt0aGlzLnNlbGVjdGVkUHJvY2Vzc0lkXz11bmRlZmluZWQ7dGhpcy5tb3VzZURvd25JbmRleF89dW5kZWZpbmVkO3RoaXMuY3VyTW91c2VJbmRleF89dW5kZWZpbmVkO30sZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30sc2V0IG1vZGVsKG1vZGVsKXt0aGlzLm1vZGVsXz1tb2RlbDtpZih0aGlzLm1vZGVsXyl7dGhpcy5tb2RlbEhlbHBlcl89dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7fWVsc2V7dGhpcy5tb2RlbEhlbHBlcl89dW5kZWZpbmVkO30KLXRoaXMudXBkYXRlVG9vbGJhcl8oKTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGZyYW1ldGltZVR5cGUoKXtyZXR1cm4gdGhpcy5mcmFtZXRpbWVUeXBlXzt9LHNldCBmcmFtZXRpbWVUeXBlKHR5cGUpe2lmKHRoaXMuZnJhbWV0aW1lVHlwZV89PT10eXBlKXJldHVybjt0aGlzLmZyYW1ldGltZVR5cGVfPXR5cGU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBzZWxlY3RlZFByb2Nlc3NJZCgpe3JldHVybiB0aGlzLnNlbGVjdGVkUHJvY2Vzc0lkXzt9LHNldCBzZWxlY3RlZFByb2Nlc3NJZChwcm9jZXNzKXtpZih0aGlzLnNlbGVjdGVkUHJvY2Vzc0lkXz09PXByb2Nlc3MpcmV0dXJuO3RoaXMuc2VsZWN0ZWRQcm9jZXNzSWRfPXByb2Nlc3M7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXtpZih0aGlzLmxhdGVuY3lDaGFydF89PT11bmRlZmluZWQpcmV0dXJuO3RoaXMubGF0ZW5jeUNoYXJ0Xy5icnVzaGVkUmFuZ2U9c2VsZWN0aW9uLmJvdW5kczt9LHNldEJydXNoZWRJbmRpY2VzKG1vdXNlRG93bkluZGV4LGN1ckluZGV4KXt0aGlzLm1vdXNlRG93bkluZGV4Xz1tb3VzZURvd25JbmRleDt0aGlzLmN1ck1vdXNlSW5kZXhfPWN1ckluZGV4O3RoaXMudXBkYXRlQnJ1c2hlZFJhbmdlXygpO30sdXBkYXRlQnJ1c2hlZFJhbmdlXygpe2lmKHRoaXMubGF0ZW5jeUNoYXJ0Xz09PXVuZGVmaW5lZClyZXR1cm47bGV0IHI9bmV3IHRyLmIubWF0aC5SYW5nZSgpO2lmKHRoaXMubW91c2VEb3duSW5kZXhfPT09dW5kZWZpbmVkKXt0aGlzLmxhdGVuY3lDaGFydF8uYnJ1c2hlZFJhbmdlPXI7cmV0dXJuO30KLXI9dGhpcy5sYXRlbmN5Q2hhcnRfLmNvbXB1dGVCcnVzaFJhbmdlRnJvbUluZGljZXModGhpcy5tb3VzZURvd25JbmRleF8sdGhpcy5jdXJNb3VzZUluZGV4Xyk7dGhpcy5sYXRlbmN5Q2hhcnRfLmJydXNoZWRSYW5nZT1yO2xldCBsYXRlbmN5U2xpY2VzPVtdO2Zvcihjb25zdCB0aHJlYWQgb2YgdGhpcy5tb2RlbF8uZ2V0QWxsVGhyZWFkcygpKXtmb3IoY29uc3QgZXZlbnQgb2YgdGhyZWFkLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoZXZlbnQudGl0bGUuaW5kZXhPZignSW5wdXRMYXRlbmN5OicpPT09MCl7bGF0ZW5jeVNsaWNlcy5wdXNoKGV2ZW50KTt9fX0KLWxhdGVuY3lTbGljZXM9dHIubW9kZWwuaGVscGVycy5nZXRTbGljZXNJbnRlcnNlY3RpbmdSYW5nZShyLGxhdGVuY3lTbGljZXMpO2NvbnN0IGV2ZW50PW5ldyB0ci5tb2RlbC5SZXF1ZXN0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoKTtldmVudC5zZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KGxhdGVuY3lTbGljZXMpO3RoaXMubGF0ZW5jeUNoYXJ0Xy5kaXNwYXRjaEV2ZW50KGV2ZW50KTt9LHJlZ2lzdGVyTW91c2VFdmVudEZvckxhdGVuY3lDaGFydF8oKXt0aGlzLmxhdGVuY3lDaGFydF8uYWRkRXZlbnRMaXN0ZW5lcignaXRlbS1tb3VzZWRvd24nLGZ1bmN0aW9uKGUpe3RoaXMubW91c2VEb3duSW5kZXhfPWUuaW5kZXg7dGhpcy5jdXJNb3VzZUluZGV4Xz1lLmluZGV4O3RoaXMudXBkYXRlQnJ1c2hlZFJhbmdlXygpO30uYmluZCh0aGlzKSk7dGhpcy5sYXRlbmN5Q2hhcnRfLmFkZEV2ZW50TGlzdGVuZXIoJ2l0ZW0tbW91c2Vtb3ZlJyxmdW5jdGlvbihlKXtpZihlLmJ1dHRvbj09PXVuZGVmaW5lZClyZXR1cm47dGhpcy5jdXJNb3VzZUluZGV4Xz1lLmluZGV4O3RoaXMudXBkYXRlQnJ1c2hlZFJhbmdlXygpO30uYmluZCh0aGlzKSk7dGhpcy5sYXRlbmN5Q2hhcnRfLmFkZEV2ZW50TGlzdGVuZXIoJ2l0ZW0tbW91c2V1cCcsZnVuY3Rpb24oZSl7dGhpcy5jdXJNb3VzZUluZGV4PWUuaW5kZXg7dGhpcy51cGRhdGVCcnVzaGVkUmFuZ2VfKCk7fS5iaW5kKHRoaXMpKTt9LHVwZGF0ZVRvb2xiYXJfKCl7Y29uc3QgYnJvd3NlclByb2Nlc3M9dGhpcy5tb2RlbEhlbHBlcl8uYnJvd3NlclByb2Nlc3M7Y29uc3QgbGFiZWxzPVtdO2lmKGJyb3dzZXJQcm9jZXNzIT09dW5kZWZpbmVkKXtjb25zdCBsYWJlbFN0cj0nQnJvd3NlcjogJyticm93c2VyUHJvY2Vzcy5waWQ7bGFiZWxzLnB1c2goe2xhYmVsOmxhYmVsU3RyLHZhbHVlOmJyb3dzZXJQcm9jZXNzLnBpZH0pO30KLWZvcihjb25zdCByZW5kZXJlckhlbHBlciBvZgotT2JqZWN0LnZhbHVlcyh0aGlzLm1vZGVsSGVscGVyXy5yZW5kZXJlckhlbHBlcnMpKXtjb25zdCByZW5kZXJlclByb2Nlc3M9cmVuZGVyZXJIZWxwZXIucHJvY2Vzcztjb25zdCBsYWJlbFN0cj0nUmVuZGVyZXI6ICcrcmVuZGVyZXJQcm9jZXNzLnVzZXJGcmllbmRseU5hbWU7bGFiZWxzLnB1c2goe2xhYmVsOmxhYmVsU3RyLHZhbHVlOnJlbmRlcmVyUHJvY2Vzcy51c2VyRnJpZW5kbHlOYW1lfSk7fQotaWYobGFiZWxzLmxlbmd0aD09PTApcmV0dXJuO3RoaXMuc2VsZWN0ZWRQcm9jZXNzSWRfPWxhYmVsc1swXS52YWx1ZTtjb25zdCB0b29sYmFyRWw9dGhpcy4kLnRvb2xiYXI7UG9seW1lci5kb20odG9vbGJhckVsKS5hcHBlbmRDaGlsZCh0ci51aS5iLmNyZWF0ZVNlbGVjdG9yKHRoaXMsJ2ZyYW1ldGltZVR5cGUnLCdpbnB1dExhdGVuY3lTaWRlUGFuZWwuZnJhbWV0aW1lVHlwZScsdGhpcy5mcmFtZXRpbWVUeXBlXyxbe2xhYmVsOidNYWluIFRocmVhZCBGcmFtZSBUaW1lcycsdmFsdWU6dHIubW9kZWwuaGVscGVycy5NQUlOX0ZSQU1FVElNRV9UWVBFfSx7bGFiZWw6J0ltcGwgVGhyZWFkIEZyYW1lIFRpbWVzJyx2YWx1ZTp0ci5tb2RlbC5oZWxwZXJzLklNUExfRlJBTUVUSU1FX1RZUEV9XSkpO1BvbHltZXIuZG9tKHRvb2xiYXJFbCkuYXBwZW5kQ2hpbGQodHIudWkuYi5jcmVhdGVTZWxlY3Rvcih0aGlzLCdzZWxlY3RlZFByb2Nlc3NJZCcsJ2lucHV0TGF0ZW5jeVNpZGVQYW5lbC5zZWxlY3RlZFByb2Nlc3NJZCcsdGhpcy5zZWxlY3RlZFByb2Nlc3NJZF8sbGFiZWxzKSk7fSxnZXQgY3VycmVudFJhbmdlT2ZJbnRlcmVzdCgpe2lmKHRoaXMucmFuZ2VPZkludGVyZXN0Xy5pc0VtcHR5KXtyZXR1cm4gdGhpcy5tb2RlbF8uYm91bmRzO30KLXJldHVybiB0aGlzLnJhbmdlT2ZJbnRlcmVzdF87fSxjcmVhdGVMYXRlbmN5TGluZUNoYXJ0KGRhdGEsdGl0bGUscGFyZW50Tm9kZSl7Y29uc3QgY2hhcnQ9bmV3IHRyLnVpLmIuTGluZUNoYXJ0KCk7UG9seW1lci5kb20ocGFyZW50Tm9kZSkuYXBwZW5kQ2hpbGQoY2hhcnQpO2xldCB3aWR0aD02MDA7aWYoZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCE9PXVuZGVmaW5lZCl7d2lkdGg9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCowLjU7fQotY2hhcnQuZ3JhcGhXaWR0aD13aWR0aDtjaGFydC5jaGFydFRpdGxlPXRpdGxlO2NoYXJ0LmRhdGE9ZGF0YTtyZXR1cm4gY2hhcnQ7fSx1cGRhdGVDb250ZW50c18oKXtjb25zdCByZXN1bHRBcmVhPXRoaXMuJC5yZXN1bHRfYXJlYTt0aGlzLmxhdGVuY3lDaGFydF89dW5kZWZpbmVkO3RoaXMuZnJhbWV0aW1lQ2hhcnRfPXVuZGVmaW5lZDtQb2x5bWVyLmRvbShyZXN1bHRBcmVhKS50ZXh0Q29udGVudD0nJztpZih0aGlzLm1vZGVsSGVscGVyXz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgcmFuZ2VPZkludGVyZXN0PXRoaXMuY3VycmVudFJhbmdlT2ZJbnRlcmVzdDtsZXQgY2hyb21lUHJvY2VzcztpZih0aGlzLm1vZGVsSGVscGVyXy5yZW5kZXJlckhlbHBlcnNbdGhpcy5zZWxlY3RlZFByb2Nlc3NJZF9dKXtjaHJvbWVQcm9jZXNzPXRoaXMubW9kZWxIZWxwZXJfLnJlbmRlcmVySGVscGVyc1t0aGlzLnNlbGVjdGVkUHJvY2Vzc0lkX107fWVsc2V7Y2hyb21lUHJvY2Vzcz10aGlzLm1vZGVsSGVscGVyXy5icm93c2VySGVscGVyO30KLWNvbnN0IGZyYW1lRXZlbnRzPWNocm9tZVByb2Nlc3MuZ2V0RnJhbWVFdmVudHNJblJhbmdlKHRoaXMuZnJhbWV0aW1lVHlwZSxyYW5nZU9mSW50ZXJlc3QpO2NvbnN0IGZyYW1ldGltZURhdGE9dHIubW9kZWwuaGVscGVycy5nZXRGcmFtZXRpbWVEYXRhRnJvbUV2ZW50cyhmcmFtZUV2ZW50cyk7Y29uc3QgYXZlcmFnZUZyYW1ldGltZT10ci5iLm1hdGguU3RhdGlzdGljcy5tZWFuKGZyYW1ldGltZURhdGEsZD0+ZC5mcmFtZXRpbWUpO2NvbnN0IGxhdGVuY3lFdmVudHM9dGhpcy5tb2RlbEhlbHBlcl8uYnJvd3NlckhlbHBlci5nZXRMYXRlbmN5RXZlbnRzSW5SYW5nZShyYW5nZU9mSW50ZXJlc3QpO2NvbnN0IGxhdGVuY3lEYXRhPVtdO2xhdGVuY3lFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7aWYoZXZlbnQuaW5wdXRMYXRlbmN5PT09dW5kZWZpbmVkKXJldHVybjtsYXRlbmN5RGF0YS5wdXNoKHt4OmV2ZW50LnN0YXJ0LGxhdGVuY3k6ZXZlbnQuaW5wdXRMYXRlbmN5LzEwMDB9KTt9KTtjb25zdCBhdmVyYWdlTGF0ZW5jeT10ci5iLm1hdGguU3RhdGlzdGljcy5tZWFuKGxhdGVuY3lEYXRhLGZ1bmN0aW9uKGQpe3JldHVybiBkLmxhdGVuY3k7fSk7Y29uc3QgbGF0ZW5jeVN1bW1hcnlUZXh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1BvbHltZXIuZG9tKGxhdGVuY3lTdW1tYXJ5VGV4dCkuYXBwZW5kQ2hpbGQodHIudWkuYi5jcmVhdGVTcGFuKHt0ZXh0Q29udGVudDonQXZlcmFnZSBMYXRlbmN5ICcrYXZlcmFnZUxhdGVuY3krJyBtcycsYm9sZDp0cnVlfSkpO1BvbHltZXIuZG9tKHJlc3VsdEFyZWEpLmFwcGVuZENoaWxkKGxhdGVuY3lTdW1tYXJ5VGV4dCk7Y29uc3QgZnJhbWV0aW1lU3VtbWFyeVRleHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7UG9seW1lci5kb20oZnJhbWV0aW1lU3VtbWFyeVRleHQpLmFwcGVuZENoaWxkKHRyLnVpLmIuY3JlYXRlU3Bhbih7dGV4dENvbnRlbnQ6J0F2ZXJhZ2UgRnJhbWUgVGltZSAnK2F2ZXJhZ2VGcmFtZXRpbWUrJyBtcycsYm9sZDp0cnVlfSkpO1BvbHltZXIuZG9tKHJlc3VsdEFyZWEpLmFwcGVuZENoaWxkKGZyYW1ldGltZVN1bW1hcnlUZXh0KTtpZihsYXRlbmN5RGF0YS5sZW5ndGghPT0wKXt0aGlzLmxhdGVuY3lDaGFydF89dGhpcy5jcmVhdGVMYXRlbmN5TGluZUNoYXJ0KGxhdGVuY3lEYXRhLCdMYXRlbmN5IE92ZXIgVGltZScscmVzdWx0QXJlYSk7dGhpcy5yZWdpc3Rlck1vdXNlRXZlbnRGb3JMYXRlbmN5Q2hhcnRfKCk7fQotaWYoZnJhbWV0aW1lRGF0YS5sZW5ndGghPT0wKXt0aGlzLmZyYW1ldGltZUNoYXJ0Xz10aGlzLmNyZWF0ZUxhdGVuY3lMaW5lQ2hhcnQoZnJhbWV0aW1lRGF0YSwnRnJhbWUgVGltZXMnLHJlc3VsdEFyZWEpO319LGdldCByYW5nZU9mSW50ZXJlc3QoKXtyZXR1cm4gdGhpcy5yYW5nZU9mSW50ZXJlc3RfO30sc2V0IHJhbmdlT2ZJbnRlcmVzdChyYW5nZU9mSW50ZXJlc3Qpe3RoaXMucmFuZ2VPZkludGVyZXN0Xz1yYW5nZU9mSW50ZXJlc3Q7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHN1cHBvcnRzTW9kZWwobSl7aWYobT09PXVuZGVmaW5lZCl7cmV0dXJue3N1cHBvcnRlZDpmYWxzZSxyZWFzb246J1Vua25vd24gdHJhY2luZyBtb2RlbCd9O30KLWlmKCF0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyLnN1cHBvcnRzTW9kZWwobSkpe3JldHVybntzdXBwb3J0ZWQ6ZmFsc2UscmVhc29uOidObyBDaHJvbWUgYnJvd3NlciBvciByZW5kZXJlciBwcm9jZXNzIGZvdW5kJ307fQotY29uc3QgbW9kZWxIZWxwZXI9bS5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtpZihtb2RlbEhlbHBlci5icm93c2VySGVscGVyJiZtb2RlbEhlbHBlci5icm93c2VySGVscGVyLmhhc0xhdGVuY3lFdmVudHMpe3JldHVybntzdXBwb3J0ZWQ6dHJ1ZX07fQotcmV0dXJue3N1cHBvcnRlZDpmYWxzZSxyZWFzb246J05vIElucHV0TGF0ZW5jeSBldmVudHMgdHJhY2UuIENvbnNpZGVyIGVuYWJsaW5nICcrJ2JlbmNobWFyayIgYW5kICJpbnB1dCIgY2F0ZWdvcnkgd2hlbiByZWNvcmRpbmcgdGhlIHRyYWNlJ307fSxnZXQgdGV4dExhYmVsKCl7cmV0dXJuJ0lucHV0IExhdGVuY3knO319KTt0ci51aS5zaWRlX3BhbmVsLlNpZGVQYW5lbFJlZ2lzdHJ5LnJlZ2lzdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWUtcy1pbnB1dC1sYXRlbmN5LXNpZGUtcGFuZWwnKTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuc3lzdGVtX3N0YXRzJyxmdW5jdGlvbigpe2NvbnN0IE9iamVjdFNuYXBzaG90PXRyLm1vZGVsLk9iamVjdFNuYXBzaG90O2Z1bmN0aW9uIFN5c3RlbVN0YXRzU25hcHNob3Qob2JqZWN0SW5zdGFuY2UsdHMsYXJncyl7T2JqZWN0U25hcHNob3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMub2JqZWN0SW5zdGFuY2U9b2JqZWN0SW5zdGFuY2U7dGhpcy50cz10czt0aGlzLmFyZ3M9YXJnczt0aGlzLnN0YXRzPWFyZ3M7fQotU3lzdGVtU3RhdHNTbmFwc2hvdC5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3RTbmFwc2hvdC5wcm90b3R5cGUsaW5pdGlhbGl6ZSgpe2lmKHRoaXMuYXJncy5sZW5ndGg9PT0wKXt0aHJvdyBuZXcgRXJyb3IoJ05vIHN5c3RlbSBzdGF0cyBzbmFwc2hvdCBkYXRhLicpO30KLXRoaXMuc3RhdHNfPXRoaXMuYXJnczt9LGdldFN0YXRzKCl7cmV0dXJuIHRoaXMuc3RhdHNfO30sc2V0U3RhdHMoc3RhdHMpe3RoaXMuc3RhdHNfPXN0YXRzO319O09iamVjdFNuYXBzaG90LnN1YlR5cGVzLnJlZ2lzdGVyKFN5c3RlbVN0YXRzU25hcHNob3Qse3R5cGVOYW1lOidiYXNlOjpUcmFjZUV2ZW50U3lzdGVtU3RhdHNNb25pdG9yOjpTeXN0ZW1TdGF0cyd9KTtyZXR1cm57U3lzdGVtU3RhdHNTbmFwc2hvdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBjb25zdGFudHM9e0hFQURJTkdfV0lEVEg6MjUwfTtyZXR1cm57Y29uc3RhbnRzLH07fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1iLWhlYWRpbmcnLERPV05fQVJST1c6U3RyaW5nLmZyb21DaGFyQ29kZSgweDI1QkUpLFJJR0hUX0FSUk9XOlN0cmluZy5mcm9tQ2hhckNvZGUoMHgyNUI4KSxyZWFkeSh2aWV3cG9ydCl7dGhpcy5zdHlsZS53aWR0aD0odHIudWkuYi5jb25zdGFudHMuSEVBRElOR19XSURUSC02KSsncHgnO3RoaXMuaGVhZGluZ189Jyc7dGhpcy5leHBhbmRlZF89dHJ1ZTt0aGlzLmFycm93VmlzaWJsZV89ZmFsc2U7dGhpcy5zZWxlY3Rpb25HZW5lcmF0b3JfPXVuZGVmaW5lZDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGhlYWRpbmcoKXtyZXR1cm4gdGhpcy5oZWFkaW5nXzt9LHNldCBoZWFkaW5nKHRleHQpe2lmKHRoaXMuaGVhZGluZ189PT10ZXh0KXJldHVybjt0aGlzLmhlYWRpbmdfPXRleHQ7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHNldCBhcnJvd1Zpc2libGUodmFsKXtpZih0aGlzLmFycm93VmlzaWJsZV89PT12YWwpcmV0dXJuO3RoaXMuYXJyb3dWaXNpYmxlXz0hIXZhbDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sc2V0IHRvb2x0aXAodGV4dCl7dGhpcy4kLmhlYWRpbmcudGl0bGU9dGV4dDt9LHNldCBzZWxlY3Rpb25HZW5lcmF0b3IoZ2VuZXJhdG9yKXtpZih0aGlzLnNlbGVjdGlvbkdlbmVyYXRvcl89PT1nZW5lcmF0b3IpcmV0dXJuO3RoaXMuc2VsZWN0aW9uR2VuZXJhdG9yXz1nZW5lcmF0b3I7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkXzt9LHNldCBleHBhbmRlZChleHBhbmRlZCl7aWYodGhpcy5leHBhbmRlZF89PT1leHBhbmRlZClyZXR1cm47dGhpcy5leHBhbmRlZF89ISFleHBhbmRlZDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sb25IZWFkaW5nRGl2Q2xpY2tlZF8oKXt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IHRyLmIuRXZlbnQoJ2hlYWRpbmctY2xpY2tlZCcsdHJ1ZSkpO30sdXBkYXRlQ29udGVudHNfKCl7aWYodGhpcy5hcnJvd1Zpc2libGVfKXt0aGlzLiQuYXJyb3cuc3R5bGUuZGlzcGxheT0nJzt9ZWxzZXt0aGlzLiQuYXJyb3cuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLmhlYWRpbmcuc3R5bGUuZGlzcGxheT10aGlzLmV4cGFuZGVkXz8nJzonbm9uZSc7fQotaWYodGhpcy5hcnJvd1Zpc2libGVfKXtQb2x5bWVyLmRvbSh0aGlzLiQuYXJyb3cpLnRleHRDb250ZW50PXRoaXMuZXhwYW5kZWRfP3RoaXMuRE9XTl9BUlJPVzp0aGlzLlJJR0hUX0FSUk9XO30KLXRoaXMuJC5saW5rLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC5oZWFkaW5nX2NvbnRlbnQuc3R5bGUuZGlzcGxheT0nbm9uZSc7aWYodGhpcy5zZWxlY3Rpb25HZW5lcmF0b3JfKXt0aGlzLiQubGluay5zdHlsZS5kaXNwbGF5PSdpbmxpbmUtYmxvY2snO3RoaXMuJC5saW5rLnNlbGVjdGlvbj10aGlzLnNlbGVjdGlvbkdlbmVyYXRvcl87UG9seW1lci5kb20odGhpcy4kLmxpbmspLnRleHRDb250ZW50PXRoaXMuaGVhZGluZ187fWVsc2V7dGhpcy4kLmhlYWRpbmdfY29udGVudC5zdHlsZS5kaXNwbGF5PSdpbmxpbmUtYmxvY2snO1BvbHltZXIuZG9tKHRoaXMuJC5oZWFkaW5nX2NvbnRlbnQpLnRleHRDb250ZW50PXRoaXMuaGVhZGluZ187fX19KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBUcmFjaz10ci51aS5iLmRlZmluZSgndHJhY2snLHRyLnVpLmIuQ29udGFpbmVyVGhhdERlY29yYXRlc0l0c0NoaWxkcmVuKTtUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5iLkNvbnRhaW5lclRoYXREZWNvcmF0ZXNJdHNDaGlsZHJlbi5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLmIuQ29udGFpbmVyVGhhdERlY29yYXRlc0l0c0NoaWxkcmVuLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMpO2lmKHZpZXdwb3J0PT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ3ZpZXdwb3J0IGlzIHJlcXVpcmVkIHdoZW4gY3JlYXRpbmcgYSBUcmFjay4nKTt9Ci10aGlzLnZpZXdwb3J0Xz12aWV3cG9ydDtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCd0cmFjaycpO30sZ2V0IHZpZXdwb3J0KCl7cmV0dXJuIHRoaXMudmlld3BvcnRfO30sZ2V0IGRyYXdpbmdDb250YWluZXIoKXtpZih0aGlzIGluc3RhbmNlb2YgdHIudWkudHJhY2tzLkRyYXdpbmdDb250YWluZXIpcmV0dXJuIHRoaXM7bGV0IGN1cj10aGlzLnBhcmVudEVsZW1lbnQ7d2hpbGUoY3VyKXtpZihjdXIgaW5zdGFuY2VvZiB0ci51aS50cmFja3MuRHJhd2luZ0NvbnRhaW5lcilyZXR1cm4gY3VyO2N1cj1jdXIucGFyZW50RWxlbWVudDt9Ci1yZXR1cm4gdW5kZWZpbmVkO30sZ2V0IGV2ZW50Q29udGFpbmVyKCl7fSxpbnZhbGlkYXRlRHJhd2luZ0NvbnRhaW5lcigpe2NvbnN0IGRjPXRoaXMuZHJhd2luZ0NvbnRhaW5lcjtpZihkYylkYy5pbnZhbGlkYXRlKCk7fSxjb250ZXh0KCl7aWYoIVBvbHltZXIuZG9tKHRoaXMpLnBhcmVudE5vZGUpcmV0dXJuIHVuZGVmaW5lZDtpZighUG9seW1lci5kb20odGhpcykucGFyZW50Tm9kZS5jb250ZXh0KXt0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBjb250YWluZXIgZG9lcyBub3Qgc3VwcG9ydCBjb250ZXh0KCkgbWV0aG9kLicpO30KLXJldHVybiBQb2x5bWVyLmRvbSh0aGlzKS5wYXJlbnROb2RlLmNvbnRleHQoKTt9LGRlY29yYXRlQ2hpbGRfKGNoaWxkVHJhY2spe30sdW5kZWNvcmF0ZUNoaWxkXyhjaGlsZFRyYWNrKXtpZihjaGlsZFRyYWNrLmRldGFjaCl7Y2hpbGRUcmFjay5kZXRhY2goKTt9fSx1cGRhdGVDb250ZW50c18oKXt9LGRyYXdUcmFjayh0eXBlKXtjb25zdCBjdHg9dGhpcy5jb250ZXh0KCk7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCBib3VuZHM9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBjYW52YXNCb3VuZHM9Y3R4LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjdHguc2F2ZSgpO2N0eC50cmFuc2xhdGUoMCxwaXhlbFJhdGlvKihib3VuZHMudG9wLWNhbnZhc0JvdW5kcy50b3ApKTtjb25zdCBkdD10aGlzLnZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IHZpZXdMV29ybGQ9ZHQueFZpZXdUb1dvcmxkKDApO2NvbnN0IHZpZXdSV29ybGQ9ZHQueFZpZXdUb1dvcmxkKGNhbnZhc0JvdW5kcy53aWR0aCpwaXhlbFJhdGlvKTtjb25zdCB2aWV3SGVpZ2h0PWJvdW5kcy5oZWlnaHQqcGl4ZWxSYXRpbzt0aGlzLmRyYXcodHlwZSx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdmlld0hlaWdodCk7Y3R4LnJlc3RvcmUoKTt9LGRyYXcodHlwZSx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdmlld0hlaWdodCl7fSxhZGRFdmVudHNUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCl7fSxhZGRDb250YWluZXJzVG9UcmFja01hcChjb250YWluZXJUb1RyYWNrTWFwKXt9LGFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbihsb1ZYLGhpVlgsbG9WWSxoaVZZLHNlbGVjdGlvbil7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCBkdD10aGlzLnZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IHZpZXdQaXhXaWR0aFdvcmxkPWR0LnhWaWV3VmVjdG9yVG9Xb3JsZCgxKTtjb25zdCBsb1dYPWR0LnhWaWV3VG9Xb3JsZChsb1ZYKnBpeGVsUmF0aW8pO2NvbnN0IGhpV1g9ZHQueFZpZXdUb1dvcmxkKGhpVlgqcGl4ZWxSYXRpbyk7Y29uc3QgY2xpZW50UmVjdD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGE9TWF0aC5tYXgobG9WWSxjbGllbnRSZWN0LnRvcCk7Y29uc3QgYj1NYXRoLm1pbihoaVZZLGNsaWVudFJlY3QuYm90dG9tKTtpZihhPmIpcmV0dXJuO3RoaXMuYWRkSW50ZXJzZWN0aW5nRXZlbnRzSW5SYW5nZVRvU2VsZWN0aW9uSW5Xb3JsZFNwYWNlKGxvV1gsaGlXWCx2aWV3UGl4V2lkdGhXb3JsZCxzZWxlY3Rpb24pO30sYWRkSW50ZXJzZWN0aW5nRXZlbnRzSW5SYW5nZVRvU2VsZWN0aW9uSW5Xb3JsZFNwYWNlKGxvV1gsaGlXWCx2aWV3UGl4V2lkdGhXb3JsZCxzZWxlY3Rpb24pe30sYWRkQ2xvc2VzdEV2ZW50VG9TZWxlY3Rpb24od29ybGRYLHdvcmxkTWF4RGlzdCxsb1ksaGlZLHNlbGVjdGlvbil7fSxhZGRDbG9zZXN0SW5zdGFudEV2ZW50VG9TZWxlY3Rpb24oaW5zdGFudEV2ZW50cyx3b3JsZFgsd29ybGRNYXhEaXN0LHNlbGVjdGlvbil7Y29uc3QgaW5zdGFudEV2ZW50PXRyLmIuZmluZENsb3Nlc3RFbGVtZW50SW5Tb3J0ZWRBcnJheShpbnN0YW50RXZlbnRzLGZ1bmN0aW9uKHgpe3JldHVybiB4LnN0YXJ0O30sd29ybGRYLHdvcmxkTWF4RGlzdCk7aWYoIWluc3RhbnRFdmVudClyZXR1cm47c2VsZWN0aW9uLnB1c2goaW5zdGFudEV2ZW50KTt9fTtyZXR1cm57VHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBTZWxlY3Rpb25TdGF0ZT10ci5tb2RlbC5TZWxlY3Rpb25TdGF0ZTtjb25zdCBFdmVudFByZXNlbnRlcj10ci51aS5iLkV2ZW50UHJlc2VudGVyO2NvbnN0IE9iamVjdEluc3RhbmNlVHJhY2s9dHIudWkuYi5kZWZpbmUoJ29iamVjdC1pbnN0YW5jZS10cmFjaycsdHIudWkudHJhY2tzLlRyYWNrKTtPYmplY3RJbnN0YW5jZVRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdvYmplY3QtaW5zdGFuY2UtdHJhY2snKTt0aGlzLm9iamVjdEluc3RhbmNlc189W107dGhpcy5vYmplY3RTbmFwc2hvdHNfPVtdO3RoaXMuaGVhZGluZ189ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1oZWFkaW5nJyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5oZWFkaW5nXyk7fSxzZXQgaGVhZGluZyhoZWFkaW5nKXt0aGlzLmhlYWRpbmdfLmhlYWRpbmc9aGVhZGluZzt9LGdldCBoZWFkaW5nKCl7cmV0dXJuIHRoaXMuaGVhZGluZ18uaGVhZGluZzt9LHNldCB0b29sdGlwKHRvb2x0aXApe3RoaXMuaGVhZGluZ18udG9vbHRpcD10b29sdGlwO30sZ2V0IG9iamVjdEluc3RhbmNlcygpe3JldHVybiB0aGlzLm9iamVjdEluc3RhbmNlc187fSxzZXQgb2JqZWN0SW5zdGFuY2VzKG9iamVjdEluc3RhbmNlcyl7aWYoIW9iamVjdEluc3RhbmNlc3x8b2JqZWN0SW5zdGFuY2VzLmxlbmd0aD09PTApe3RoaXMuaGVhZGluZz0nJzt0aGlzLm9iamVjdEluc3RhbmNlc189W107dGhpcy5vYmplY3RTbmFwc2hvdHNfPVtdO3JldHVybjt9Ci10aGlzLmhlYWRpbmc9b2JqZWN0SW5zdGFuY2VzWzBdLmJhc2VUeXBlTmFtZTt0aGlzLm9iamVjdEluc3RhbmNlc189b2JqZWN0SW5zdGFuY2VzO3RoaXMub2JqZWN0U25hcHNob3RzXz1bXTt0aGlzLm9iamVjdEluc3RhbmNlc18uZm9yRWFjaChmdW5jdGlvbihpbnN0YW5jZSl7dGhpcy5vYmplY3RTbmFwc2hvdHNfLnB1c2guYXBwbHkodGhpcy5vYmplY3RTbmFwc2hvdHNfLGluc3RhbmNlLnNuYXBzaG90cyk7fSx0aGlzKTt0aGlzLm9iamVjdFNuYXBzaG90c18uc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnRzLWIudHM7fSk7fSxnZXQgaGVpZ2h0KCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmhlaWdodDt9LHNldCBoZWlnaHQoaGVpZ2h0KXt0aGlzLnN0eWxlLmhlaWdodD1oZWlnaHQ7fSxnZXQgc25hcHNob3RSYWRpdXNWaWV3KCl7cmV0dXJuIDcqKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKTt9LGRyYXcodHlwZSx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdmlld0hlaWdodCl7c3dpdGNoKHR5cGUpe2Nhc2UgdHIudWkudHJhY2tzLkRyYXdUeXBlLkdFTkVSQUxfRVZFTlQ6dGhpcy5kcmF3T2JqZWN0SW5zdGFuY2VzXyh2aWV3TFdvcmxkLHZpZXdSV29ybGQpO2JyZWFrO319LGRyYXdPYmplY3RJbnN0YW5jZXNfKHZpZXdMV29ybGQsdmlld1JXb3JsZCl7Y29uc3QgY3R4PXRoaXMuY29udGV4dCgpO2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgYm91bmRzPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgaGVpZ2h0PWJvdW5kcy5oZWlnaHQqcGl4ZWxSYXRpbztjb25zdCBoYWxmSGVpZ2h0PWhlaWdodCowLjU7Y29uc3QgdHdvUGk9TWF0aC5QSSoyO2NvbnN0IGR0PXRoaXMudmlld3BvcnQuY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3Qgc25hcHNob3RSYWRpdXNWaWV3PXRoaXMuc25hcHNob3RSYWRpdXNWaWV3O2NvbnN0IHNuYXBzaG90UmFkaXVzV29ybGQ9ZHQueFZpZXdWZWN0b3JUb1dvcmxkKGhlaWdodCk7Y29uc3Qgb2JqZWN0SW5zdGFuY2VzPXRoaXMub2JqZWN0SW5zdGFuY2VzXztsZXQgbG9JPXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheShvYmplY3RJbnN0YW5jZXMsZnVuY3Rpb24oaW5zdGFuY2Upe3JldHVybiBpbnN0YW5jZS5kZWxldGlvblRzO30sdmlld0xXb3JsZCk7Y3R4LnNhdmUoKTtjdHguc3Ryb2tlU3R5bGU9J3JnYigwLDAsMCknO2ZvcihsZXQgaT1sb0k7aTxvYmplY3RJbnN0YW5jZXMubGVuZ3RoOysraSl7Y29uc3QgaW5zdGFuY2U9b2JqZWN0SW5zdGFuY2VzW2ldO2NvbnN0IHg9aW5zdGFuY2UuY3JlYXRpb25UcztpZih4PnZpZXdSV29ybGQpYnJlYWs7Y29uc3QgcmlnaHQ9aW5zdGFuY2UuZGVsZXRpb25Ucz09PU51bWJlci5NQVhfVkFMVUU/dmlld1JXb3JsZDppbnN0YW5jZS5kZWxldGlvblRzO2NvbnN0IHhWaWV3PWR0LnhXb3JsZFRvVmlldyh4KTtjb25zdCB3aWR0aFZpZXc9ZHQueFdvcmxkVmVjdG9yVG9WaWV3KHJpZ2h0LXgpO2N0eC5maWxsU3R5bGU9RXZlbnRQcmVzZW50ZXIuZ2V0T2JqZWN0SW5zdGFuY2VDb2xvcihpbnN0YW5jZSk7Y3R4LmZpbGxSZWN0KHhWaWV3LHBpeGVsUmF0aW8sd2lkdGhWaWV3LGhlaWdodC0yKnBpeGVsUmF0aW8pO30KLWN0eC5yZXN0b3JlKCk7Y29uc3Qgb2JqZWN0U25hcHNob3RzPXRoaXMub2JqZWN0U25hcHNob3RzXztsb0k9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KG9iamVjdFNuYXBzaG90cyxmdW5jdGlvbihzbmFwc2hvdCl7cmV0dXJuIHNuYXBzaG90LnRzK3NuYXBzaG90UmFkaXVzV29ybGQ7fSx2aWV3TFdvcmxkKTtmb3IobGV0IGk9bG9JO2k8b2JqZWN0U25hcHNob3RzLmxlbmd0aDsrK2kpe2NvbnN0IHNuYXBzaG90PW9iamVjdFNuYXBzaG90c1tpXTtjb25zdCB4PXNuYXBzaG90LnRzO2lmKHgtc25hcHNob3RSYWRpdXNXb3JsZD52aWV3UldvcmxkKWJyZWFrO2NvbnN0IHhWaWV3PWR0LnhXb3JsZFRvVmlldyh4KTtjdHguZmlsbFN0eWxlPUV2ZW50UHJlc2VudGVyLmdldE9iamVjdFNuYXBzaG90Q29sb3Ioc25hcHNob3QpO2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKHhWaWV3LGhhbGZIZWlnaHQsc25hcHNob3RSYWRpdXNWaWV3LDAsdHdvUGkpO2N0eC5maWxsKCk7aWYoc25hcHNob3Quc2VsZWN0ZWQpe2N0eC5saW5lV2lkdGg9NTtjdHguc3Ryb2tlU3R5bGU9J3JnYigxMDAsMTAwLDApJztjdHguc3Ryb2tlKCk7Y3R4LmJlZ2luUGF0aCgpO2N0eC5hcmMoeFZpZXcsaGFsZkhlaWdodCxzbmFwc2hvdFJhZGl1c1ZpZXctMSwwLHR3b1BpKTtjdHgubGluZVdpZHRoPTI7Y3R4LnN0cm9rZVN0eWxlPSdyZ2IoMjU1LDI1NSwwKSc7Y3R4LnN0cm9rZSgpO31lbHNle2N0eC5saW5lV2lkdGg9MTtjdHguc3Ryb2tlU3R5bGU9J3JnYigwLDAsMCknO2N0eC5zdHJva2UoKTt9fQotY3R4LmxpbmVXaWR0aD0xO2xldCBzZWxlY3Rpb25TdGF0ZT1TZWxlY3Rpb25TdGF0ZS5OT05FO2lmKG9iamVjdEluc3RhbmNlcy5sZW5ndGgmJm9iamVjdEluc3RhbmNlc1swXS5zZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLkRJTU1FRCl7c2VsZWN0aW9uU3RhdGU9U2VsZWN0aW9uU3RhdGUuRElNTUVEO30KLWlmKHNlbGVjdGlvblN0YXRlPT09U2VsZWN0aW9uU3RhdGUuRElNTUVEKXtjb25zdCB3aWR0aD1ib3VuZHMud2lkdGgqcGl4ZWxSYXRpbztjdHguZmlsbFN0eWxlPSdyZ2JhKDI1NSwyNTUsMjU1LDAuNSknO2N0eC5maWxsUmVjdCgwLDAsd2lkdGgsaGVpZ2h0KTtjdHgucmVzdG9yZSgpO319LGFkZEV2ZW50c1RvVHJhY2tNYXAoZXZlbnRUb1RyYWNrTWFwKXtpZih0aGlzLm9iamVjdEluc3RhbmNlXyE9PXVuZGVmaW5lZCl7dGhpcy5vYmplY3RJbnN0YW5jZV8uZm9yRWFjaChmdW5jdGlvbihvYmope2V2ZW50VG9UcmFja01hcC5hZGRFdmVudChvYmosdGhpcyk7fSx0aGlzKTt9Ci1pZih0aGlzLm9iamVjdFNuYXBzaG90c18hPT11bmRlZmluZWQpe3RoaXMub2JqZWN0U25hcHNob3RzXy5mb3JFYWNoKGZ1bmN0aW9uKG9iail7ZXZlbnRUb1RyYWNrTWFwLmFkZEV2ZW50KG9iaix0aGlzKTt9LHRoaXMpO319LGFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbkluV29ybGRTcGFjZShsb1dYLGhpV1gsdmlld1BpeFdpZHRoV29ybGQsc2VsZWN0aW9uKXtsZXQgZm91bmRTbmFwc2hvdD1mYWxzZTtmdW5jdGlvbiBvblNuYXBzaG90KHNuYXBzaG90KXtzZWxlY3Rpb24ucHVzaChzbmFwc2hvdCk7Zm91bmRTbmFwc2hvdD10cnVlO30KLWNvbnN0IHNuYXBzaG90UmFkaXVzVmlldz10aGlzLnNuYXBzaG90UmFkaXVzVmlldztjb25zdCBzbmFwc2hvdFJhZGl1c1dvcmxkPXZpZXdQaXhXaWR0aFdvcmxkKnNuYXBzaG90UmFkaXVzVmlldzt0ci5iLml0ZXJhdGVPdmVySW50ZXJzZWN0aW5nSW50ZXJ2YWxzKHRoaXMub2JqZWN0U25hcHNob3RzXyxmdW5jdGlvbih4KXtyZXR1cm4geC50cy1zbmFwc2hvdFJhZGl1c1dvcmxkO30sZnVuY3Rpb24oeCl7cmV0dXJuIDIqc25hcHNob3RSYWRpdXNXb3JsZDt9LGxvV1gsaGlXWCxvblNuYXBzaG90KTtpZihmb3VuZFNuYXBzaG90KXJldHVybjt0ci5iLml0ZXJhdGVPdmVySW50ZXJzZWN0aW5nSW50ZXJ2YWxzKHRoaXMub2JqZWN0SW5zdGFuY2VzXyxmdW5jdGlvbih4KXtyZXR1cm4geC5jcmVhdGlvblRzO30sZnVuY3Rpb24oeCl7cmV0dXJuIHguZGVsZXRpb25Ucy14LmNyZWF0aW9uVHM7fSxsb1dYLGhpV1gsKHZhbHVlKT0+e3NlbGVjdGlvbi5wdXNoKHZhbHVlKTt9KTt9LGFkZEV2ZW50TmVhclRvUHJvdmlkZWRFdmVudFRvU2VsZWN0aW9uKGV2ZW50LG9mZnNldCxzZWxlY3Rpb24pe2xldCBldmVudHM7aWYoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5PYmplY3RTbmFwc2hvdCl7ZXZlbnRzPXRoaXMub2JqZWN0U25hcHNob3RzXzt9ZWxzZSBpZihldmVudCBpbnN0YW5jZW9mIHRyLm1vZGVsLk9iamVjdEluc3RhbmNlKXtldmVudHM9dGhpcy5vYmplY3RJbnN0YW5jZXNfO31lbHNle3Rocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIGV2ZW50Jyk7fQotY29uc3QgaW5kZXg9ZXZlbnRzLmluZGV4T2YoZXZlbnQpO2NvbnN0IG5ld0luZGV4PWluZGV4K29mZnNldDtpZihuZXdJbmRleD49MCYmbmV3SW5kZXg8ZXZlbnRzLmxlbmd0aCl7c2VsZWN0aW9uLnB1c2goZXZlbnRzW25ld0luZGV4XSk7cmV0dXJuIHRydWU7fQotcmV0dXJuIGZhbHNlO30sYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbihmaWx0ZXIsc2VsZWN0aW9uKXt9LGFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uKHdvcmxkWCx3b3JsZE1heERpc3QsbG9ZLGhpWSxzZWxlY3Rpb24pe2NvbnN0IHNuYXBzaG90PXRyLmIuZmluZENsb3Nlc3RFbGVtZW50SW5Tb3J0ZWRBcnJheSh0aGlzLm9iamVjdFNuYXBzaG90c18sZnVuY3Rpb24oeCl7cmV0dXJuIHgudHM7fSx3b3JsZFgsd29ybGRNYXhEaXN0KTtpZighc25hcHNob3QpcmV0dXJuO3NlbGVjdGlvbi5wdXNoKHNuYXBzaG90KTt9fTtjb25zdCBvcHRpb25zPW5ldyB0ci5iLkV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucyh0ci5iLlRZUEVfQkFTRURfUkVHSVNUUllfTU9ERSk7dHIuYi5kZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KE9iamVjdEluc3RhbmNlVHJhY2ssb3B0aW9ucyk7cmV0dXJue09iamVjdEluc3RhbmNlVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBTdGFja2VkQmFyc1RyYWNrPXRyLnVpLmIuZGVmaW5lKCdzdGFja2VkLWJhcnMtdHJhY2snLHRyLnVpLnRyYWNrcy5UcmFjayk7U3RhY2tlZEJhcnNUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuVHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgnc3RhY2tlZC1iYXJzLXRyYWNrJyk7dGhpcy5vYmplY3RJbnN0YW5jZV89bnVsbDt0aGlzLmhlYWRpbmdfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItaGVhZGluZycpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuaGVhZGluZ18pO30sc2V0IGhlYWRpbmcoaGVhZGluZyl7dGhpcy5oZWFkaW5nXy5oZWFkaW5nPWhlYWRpbmc7fSxnZXQgaGVhZGluZygpe3JldHVybiB0aGlzLmhlYWRpbmdfLmhlYWRpbmc7fSxzZXQgdG9vbHRpcCh0b29sdGlwKXt0aGlzLmhlYWRpbmdfLnRvb2x0aXA9dG9vbHRpcDt9LGFkZEV2ZW50c1RvVHJhY2tNYXAoZXZlbnRUb1RyYWNrTWFwKXtjb25zdCBvYmplY3RTbmFwc2hvdHM9dGhpcy5vYmplY3RJbnN0YW5jZV8uc25hcHNob3RzO29iamVjdFNuYXBzaG90cy5mb3JFYWNoKGZ1bmN0aW9uKG9iail7ZXZlbnRUb1RyYWNrTWFwLmFkZEV2ZW50KG9iaix0aGlzKTt9LHRoaXMpO30sYWRkSW50ZXJzZWN0aW5nRXZlbnRzSW5SYW5nZVRvU2VsZWN0aW9uSW5Xb3JsZFNwYWNlKGxvV1gsaGlXWCx2aWV3UGl4V2lkdGhXb3JsZCxzZWxlY3Rpb24pe2Z1bmN0aW9uIG9uU25hcHNob3Qoc25hcHNob3Qpe3NlbGVjdGlvbi5wdXNoKHNuYXBzaG90KTt9Ci1jb25zdCBzbmFwc2hvdHM9dGhpcy5vYmplY3RJbnN0YW5jZV8uc25hcHNob3RzO2NvbnN0IG1heEJvdW5kcz10aGlzLm9iamVjdEluc3RhbmNlXy5wYXJlbnQubW9kZWwuYm91bmRzLm1heDt0ci5iLml0ZXJhdGVPdmVySW50ZXJzZWN0aW5nSW50ZXJ2YWxzKHNuYXBzaG90cyxmdW5jdGlvbih4KXtyZXR1cm4geC50czt9LGZ1bmN0aW9uKHgsaSl7aWYoaT09PXNuYXBzaG90cy5sZW5ndGgtMSl7aWYoc25hcHNob3RzLmxlbmd0aD09PTEpe3JldHVybiBtYXhCb3VuZHM7fQotcmV0dXJuIHNuYXBzaG90c1tpXS50cy1zbmFwc2hvdHNbaS0xXS50czt9Ci1yZXR1cm4gc25hcHNob3RzW2krMV0udHMtc25hcHNob3RzW2ldLnRzO30sbG9XWCxoaVdYLG9uU25hcHNob3QpO30sYWRkRXZlbnROZWFyVG9Qcm92aWRlZEV2ZW50VG9TZWxlY3Rpb24oZXZlbnQsb2Zmc2V0LHNlbGVjdGlvbil7aWYoIShldmVudCBpbnN0YW5jZW9mIHRyLm1vZGVsLk9iamVjdFNuYXBzaG90KSl7dGhyb3cgbmV3IEVycm9yKCdVbnJlY29nbml6ZWQgZXZlbnQnKTt9Ci1jb25zdCBvYmplY3RTbmFwc2hvdHM9dGhpcy5vYmplY3RJbnN0YW5jZV8uc25hcHNob3RzO2NvbnN0IGluZGV4PW9iamVjdFNuYXBzaG90cy5pbmRleE9mKGV2ZW50KTtjb25zdCBuZXdJbmRleD1pbmRleCtvZmZzZXQ7aWYobmV3SW5kZXg+PTAmJm5ld0luZGV4PG9iamVjdFNuYXBzaG90cy5sZW5ndGgpe3NlbGVjdGlvbi5wdXNoKG9iamVjdFNuYXBzaG90c1tuZXdJbmRleF0pO3JldHVybiB0cnVlO30KLXJldHVybiBmYWxzZTt9LGFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb24oZmlsdGVyLHNlbGVjdGlvbil7fSxhZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKXtjb25zdCBzbmFwc2hvdD10ci5iLmZpbmRDbG9zZXN0RWxlbWVudEluU29ydGVkQXJyYXkodGhpcy5vYmplY3RJbnN0YW5jZV8uc25hcHNob3RzLGZ1bmN0aW9uKHgpe3JldHVybiB4LnRzO30sd29ybGRYLHdvcmxkTWF4RGlzdCk7aWYoIXNuYXBzaG90KXJldHVybjtzZWxlY3Rpb24ucHVzaChzbmFwc2hvdCk7fX07cmV0dXJue1N0YWNrZWRCYXJzVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuc3lzdGVtX3N0YXRzJyxmdW5jdGlvbigpe2NvbnN0IEV2ZW50UHJlc2VudGVyPXRyLnVpLmIuRXZlbnRQcmVzZW50ZXI7bGV0IHN0YXRDb3VudDtjb25zdCBleGNsdWRlZFN0YXRzPXsnbWVtaW5mbyc6eydwc3dwaW4nOjAsJ3Bzd3BvdXQnOjAsJ3BnbWFqZmF1bHQnOjB9LCdkaXNraW5mbyc6eydpbyc6MCwnaW9fdGltZSc6MCwncmVhZF90aW1lJzowLCdyZWFkcyc6MCwncmVhZHNfbWVyZ2VkJzowLCdzZWN0b3JzX3JlYWQnOjAsJ3NlY3RvcnNfd3JpdHRlbic6MCwnd2VpZ2h0ZWRfaW9fdGltZSc6MCwnd3JpdGVfdGltZSc6MCwnd3JpdGVzJzowLCd3cml0ZXNfbWVyZ2VkJzowfSwnc3dhcGluZm8nOnt9fTtjb25zdCBTeXN0ZW1TdGF0c0luc3RhbmNlVHJhY2s9dHIudWkuYi5kZWZpbmUoJ3RyLXVpLWUtc3lzdGVtLXN0YXRzLWluc3RhbmNlLXRyYWNrJyx0ci51aS50cmFja3MuU3RhY2tlZEJhcnNUcmFjayk7U3lzdGVtU3RhdHNJbnN0YW5jZVRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5TdGFja2VkQmFyc1RyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLlN0YWNrZWRCYXJzVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgndHItdWktZS1zeXN0ZW0tc3RhdHMtaW5zdGFuY2UtdHJhY2snKTt0aGlzLm9iamVjdEluc3RhbmNlXz1udWxsO30sc2V0IG9iamVjdEluc3RhbmNlcyhvYmplY3RJbnN0YW5jZXMpe2lmKCFvYmplY3RJbnN0YW5jZXMpe3RoaXMub2JqZWN0SW5zdGFuY2VfPVtdO3JldHVybjt9Ci1pZihvYmplY3RJbnN0YW5jZXMubGVuZ3RoIT09MSl7dGhyb3cgbmV3IEVycm9yKCdCYWQgb2JqZWN0IGluc3RhbmNlIGNvdW50LicpO30KLXRoaXMub2JqZWN0SW5zdGFuY2VfPW9iamVjdEluc3RhbmNlc1swXTtpZih0aGlzLm9iamVjdEluc3RhbmNlXyE9PW51bGwpe3RoaXMuY29tcHV0ZVJhdGVzXyh0aGlzLm9iamVjdEluc3RhbmNlXy5zbmFwc2hvdHMpO3RoaXMubWF4U3RhdHNfPXRoaXMuY29tcHV0ZU1heFN0YXRzXyh0aGlzLm9iamVjdEluc3RhbmNlXy5zbmFwc2hvdHMpO319LGNvbXB1dGVSYXRlc18oc25hcHNob3RzKXtmb3IobGV0IGk9MDtpPHNuYXBzaG90cy5sZW5ndGg7aSsrKXtjb25zdCBzbmFwc2hvdD1zbmFwc2hvdHNbaV07Y29uc3Qgc3RhdHM9c25hcHNob3QuZ2V0U3RhdHMoKTtsZXQgcHJldlNuYXBzaG90O2lmKGk9PT0wKXtwcmV2U25hcHNob3Q9c25hcHNob3RzWzBdO31lbHNle3ByZXZTbmFwc2hvdD1zbmFwc2hvdHNbaS0xXTt9Ci1jb25zdCBwcmV2U3RhdHM9cHJldlNuYXBzaG90LmdldFN0YXRzKCk7bGV0IHRpbWVJbnRlcnZhbFNlY29uZHM9KHNuYXBzaG90LnRzLXByZXZTbmFwc2hvdC50cykvMTAwMDtpZih0aW1lSW50ZXJ2YWxTZWNvbmRzPT09MCl7dGltZUludGVydmFsU2Vjb25kcz0xO30KLXRoaXMuY29tcHV0ZVJhdGVzUmVjdXJzaXZlXyhwcmV2U3RhdHMsc3RhdHMsdGltZUludGVydmFsU2Vjb25kcyk7fX0sY29tcHV0ZVJhdGVzUmVjdXJzaXZlXyhwcmV2U3RhdHMsc3RhdHMsdGltZUludGVydmFsU2Vjb25kcyl7Zm9yKGNvbnN0IHN0YXROYW1lIGluIHN0YXRzKXtpZihzdGF0c1tzdGF0TmFtZV1pbnN0YW5jZW9mIE9iamVjdCl7dGhpcy5jb21wdXRlUmF0ZXNSZWN1cnNpdmVfKHByZXZTdGF0c1tzdGF0TmFtZV0sc3RhdHNbc3RhdE5hbWVdLHRpbWVJbnRlcnZhbFNlY29uZHMpO31lbHNle2lmKHN0YXROYW1lPT09J3NlY3RvcnNfcmVhZCcpe3N0YXRzLmJ5dGVzX3JlYWRfcGVyX3NlYz0oc3RhdHMuc2VjdG9yc19yZWFkLQotcHJldlN0YXRzLnNlY3RvcnNfcmVhZCkqNTEyL3RpbWVJbnRlcnZhbFNlY29uZHM7fQotaWYoc3RhdE5hbWU9PT0nc2VjdG9yc193cml0dGVuJyl7c3RhdHMuYnl0ZXNfd3JpdHRlbl9wZXJfc2VjPShzdGF0cy5zZWN0b3JzX3dyaXR0ZW4tCi1wcmV2U3RhdHMuc2VjdG9yc193cml0dGVuKSo1MTIvdGltZUludGVydmFsU2Vjb25kczt9Ci1pZihzdGF0TmFtZT09PSdwZ21hamZhdWx0Jyl7c3RhdHMucGdtYWpmYXVsdF9wZXJfc2VjPShzdGF0cy5wZ21hamZhdWx0LQotcHJldlN0YXRzLnBnbWFqZmF1bHQpL3RpbWVJbnRlcnZhbFNlY29uZHM7fQotaWYoc3RhdE5hbWU9PT0ncHN3cGluJyl7c3RhdHMuYnl0ZXNfc3dwaW5fcGVyX3NlYz0oc3RhdHMucHN3cGluLQotcHJldlN0YXRzLnBzd3BpbikqMTAwMC90aW1lSW50ZXJ2YWxTZWNvbmRzO30KLWlmKHN0YXROYW1lPT09J3Bzd3BvdXQnKXtzdGF0cy5ieXRlc19zd3BvdXRfcGVyX3NlYz0oc3RhdHMucHN3cG91dC0KLXByZXZTdGF0cy5wc3dwb3V0KSoxMDAwL3RpbWVJbnRlcnZhbFNlY29uZHM7fX19fSxjb21wdXRlTWF4U3RhdHNfKHNuYXBzaG90cyl7Y29uc3QgbWF4U3RhdHM9e307c3RhdENvdW50PTA7Zm9yKGxldCBpPTA7aTxzbmFwc2hvdHMubGVuZ3RoO2krKyl7Y29uc3Qgc25hcHNob3Q9c25hcHNob3RzW2ldO2NvbnN0IHN0YXRzPXNuYXBzaG90LmdldFN0YXRzKCk7dGhpcy5jb21wdXRlTWF4U3RhdHNSZWN1cnNpdmVfKHN0YXRzLG1heFN0YXRzLGV4Y2x1ZGVkU3RhdHMpO30KLXJldHVybiBtYXhTdGF0czt9LGNvbXB1dGVNYXhTdGF0c1JlY3Vyc2l2ZV8oc3RhdHMsbWF4U3RhdHMsZXhjbHVkZWRTdGF0cyl7Zm9yKGNvbnN0IHN0YXROYW1lIGluIHN0YXRzKXtpZihzdGF0c1tzdGF0TmFtZV1pbnN0YW5jZW9mIE9iamVjdCl7aWYoIShzdGF0TmFtZSBpbiBtYXhTdGF0cykpe21heFN0YXRzW3N0YXROYW1lXT17fTt9Ci1sZXQgZXhjbHVkZWROZXN0ZWQ7aWYoZXhjbHVkZWRTdGF0cyYmc3RhdE5hbWUgaW4gZXhjbHVkZWRTdGF0cyl7ZXhjbHVkZWROZXN0ZWQ9ZXhjbHVkZWRTdGF0c1tzdGF0TmFtZV07fWVsc2V7ZXhjbHVkZWROZXN0ZWQ9bnVsbDt9Ci10aGlzLmNvbXB1dGVNYXhTdGF0c1JlY3Vyc2l2ZV8oc3RhdHNbc3RhdE5hbWVdLG1heFN0YXRzW3N0YXROYW1lXSxleGNsdWRlZE5lc3RlZCk7fWVsc2V7aWYoZXhjbHVkZWRTdGF0cyYmc3RhdE5hbWUgaW4gZXhjbHVkZWRTdGF0cyl7Y29udGludWU7fQotaWYoIShzdGF0TmFtZSBpbiBtYXhTdGF0cykpe21heFN0YXRzW3N0YXROYW1lXT0wO3N0YXRDb3VudCsrO30KLWlmKHN0YXRzW3N0YXROYW1lXT5tYXhTdGF0c1tzdGF0TmFtZV0pe21heFN0YXRzW3N0YXROYW1lXT1zdGF0c1tzdGF0TmFtZV07fX19fSxnZXQgaGVpZ2h0KCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmhlaWdodDt9LHNldCBoZWlnaHQoaGVpZ2h0KXt0aGlzLnN0eWxlLmhlaWdodD1oZWlnaHQ7fSxkcmF3KHR5cGUsdmlld0xXb3JsZCx2aWV3UldvcmxkLHZpZXdIZWlnaHQpe3N3aXRjaCh0eXBlKXtjYXNlIHRyLnVpLnRyYWNrcy5EcmF3VHlwZS5HRU5FUkFMX0VWRU5UOnRoaXMuZHJhd1N0YXRCYXJzXyh2aWV3TFdvcmxkLHZpZXdSV29ybGQpO2JyZWFrO319LGRyYXdTdGF0QmFyc18odmlld0xXb3JsZCx2aWV3UldvcmxkKXtjb25zdCBjdHg9dGhpcy5jb250ZXh0KCk7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCBib3VuZHM9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCB3aWR0aD1ib3VuZHMud2lkdGgqcGl4ZWxSYXRpbztjb25zdCBoZWlnaHQ9KGJvdW5kcy5oZWlnaHQqcGl4ZWxSYXRpbykvc3RhdENvdW50O2NvbnN0IHZwPXRoaXMudmlld3BvcnQuY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3QgbWF4U3RhdHM9dGhpcy5tYXhTdGF0c187Y29uc3Qgb2JqZWN0U25hcHNob3RzPXRoaXMub2JqZWN0SW5zdGFuY2VfLnNuYXBzaG90cztsZXQgbG93SW5kZXg9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KG9iamVjdFNuYXBzaG90cyxmdW5jdGlvbihzbmFwc2hvdCl7cmV0dXJuIHNuYXBzaG90LnRzO30sdmlld0xXb3JsZCk7aWYobG93SW5kZXg+MClsb3dJbmRleC09MTtmb3IobGV0IGk9bG93SW5kZXg7aTxvYmplY3RTbmFwc2hvdHMubGVuZ3RoOysraSl7Y29uc3Qgc25hcHNob3Q9b2JqZWN0U25hcHNob3RzW2ldO2NvbnN0IHRyYWNlPXNuYXBzaG90LmdldFN0YXRzKCk7Y29uc3QgY3VycmVudFk9aGVpZ2h0O2NvbnN0IGxlZnQ9c25hcHNob3QudHM7aWYobGVmdD52aWV3UldvcmxkKWJyZWFrO2xldCBsZWZ0Vmlldz12cC54V29ybGRUb1ZpZXcobGVmdCk7aWYobGVmdFZpZXc8MClsZWZ0Vmlldz0wO2xldCByaWdodDtpZihpIT09b2JqZWN0U25hcHNob3RzLmxlbmd0aC0xKXtyaWdodD1vYmplY3RTbmFwc2hvdHNbaSsxXS50czt9ZWxzZXtpZihvYmplY3RTbmFwc2hvdHMubGVuZ3RoPjEpe3JpZ2h0PW9iamVjdFNuYXBzaG90c1tpXS50cysob2JqZWN0U25hcHNob3RzW2ldLnRzLQotb2JqZWN0U25hcHNob3RzW2ktMV0udHMpO31lbHNle3JpZ2h0PXRoaXMub2JqZWN0SW5zdGFuY2VfLnBhcmVudC5tb2RlbC5ib3VuZHMubWF4O319Ci1sZXQgcmlnaHRWaWV3PXZwLnhXb3JsZFRvVmlldyhyaWdodCk7aWYocmlnaHRWaWV3PndpZHRoKXtyaWdodFZpZXc9d2lkdGg7fQotbGVmdFZpZXc9TWF0aC5mbG9vcihsZWZ0Vmlldyk7cmlnaHRWaWV3PU1hdGguZmxvb3IocmlnaHRWaWV3KTt0aGlzLmRyYXdTdGF0QmFyc1JlY3Vyc2l2ZV8oc25hcHNob3QsbGVmdFZpZXcscmlnaHRWaWV3LGhlaWdodCx0cmFjZSxtYXhTdGF0cyxjdXJyZW50WSk7aWYoaT09PWxvd0luZGV4KXt0aGlzLmRyYXdTdGF0TmFtZXNfKGxlZnRWaWV3LGhlaWdodCxjdXJyZW50WSwnJyxtYXhTdGF0cyk7fX0KLWN0eC5saW5lV2lkdGg9MTt9LGRyYXdTdGF0QmFyc1JlY3Vyc2l2ZV8oc25hcHNob3QsbGVmdFZpZXcscmlnaHRWaWV3LGhlaWdodCxzdGF0cyxtYXhTdGF0cyxjdXJyZW50WSl7Y29uc3QgY3R4PXRoaXMuY29udGV4dCgpO2Zvcihjb25zdCBzdGF0TmFtZSBpbiBtYXhTdGF0cyl7aWYoc3RhdHNbc3RhdE5hbWVdaW5zdGFuY2VvZiBPYmplY3Qpe2N1cnJlbnRZPXRoaXMuZHJhd1N0YXRCYXJzUmVjdXJzaXZlXyhzbmFwc2hvdCxsZWZ0VmlldyxyaWdodFZpZXcsaGVpZ2h0LHN0YXRzW3N0YXROYW1lXSxtYXhTdGF0c1tzdGF0TmFtZV0sY3VycmVudFkpO31lbHNle2NvbnN0IG1heFN0YXQ9bWF4U3RhdHNbc3RhdE5hbWVdO2N0eC5maWxsU3R5bGU9RXZlbnRQcmVzZW50ZXIuZ2V0QmFyU25hcHNob3RDb2xvcihzbmFwc2hvdCxNYXRoLnJvdW5kKGN1cnJlbnRZL2hlaWdodCkpO2xldCBiYXJIZWlnaHQ7aWYobWF4U3RhdD4wKXtiYXJIZWlnaHQ9aGVpZ2h0Kk1hdGgubWF4KHN0YXRzW3N0YXROYW1lXSwwKS9tYXhTdGF0O31lbHNle2JhckhlaWdodD0wO30KLWN0eC5maWxsUmVjdChsZWZ0VmlldyxjdXJyZW50WS1iYXJIZWlnaHQsTWF0aC5tYXgocmlnaHRWaWV3LWxlZnRWaWV3LDEpLGJhckhlaWdodCk7Y3VycmVudFkrPWhlaWdodDt9fQotcmV0dXJuIGN1cnJlbnRZO30sZHJhd1N0YXROYW1lc18obGVmdFZpZXcsaGVpZ2h0LGN1cnJlbnRZLHByZWZpeCxtYXhTdGF0cyl7Y29uc3QgY3R4PXRoaXMuY29udGV4dCgpO2N0eC50ZXh0QWxpZ249J2VuZCc7Y3R4LmZvbnQ9JzEycHggQXJpYWwnO2N0eC5maWxsU3R5bGU9JyMwMDAwMDAnO2Zvcihjb25zdCBzdGF0TmFtZSBpbiBtYXhTdGF0cyl7aWYobWF4U3RhdHNbc3RhdE5hbWVdaW5zdGFuY2VvZiBPYmplY3Qpe2N1cnJlbnRZPXRoaXMuZHJhd1N0YXROYW1lc18obGVmdFZpZXcsaGVpZ2h0LGN1cnJlbnRZLHN0YXROYW1lLG1heFN0YXRzW3N0YXROYW1lXSk7fWVsc2V7bGV0IGZ1bGxuYW1lPXN0YXROYW1lO2lmKHByZWZpeCE9PScnKXtmdWxsbmFtZT1wcmVmaXgrJyA6OiAnK3N0YXROYW1lO30KLWN0eC5maWxsVGV4dChmdWxsbmFtZSxsZWZ0Vmlldy0xMCxjdXJyZW50WS1oZWlnaHQvNCk7Y3VycmVudFkrPWhlaWdodDt9fQotcmV0dXJuIGN1cnJlbnRZO319O3RyLnVpLnRyYWNrcy5PYmplY3RJbnN0YW5jZVRyYWNrLnJlZ2lzdGVyKFN5c3RlbVN0YXRzSW5zdGFuY2VUcmFjayx7dHlwZU5hbWU6J2Jhc2U6OlRyYWNlRXZlbnRTeXN0ZW1TdGF0c01vbml0b3I6OlN5c3RlbVN0YXRzJ30pO3JldHVybntTeXN0ZW1TdGF0c0luc3RhbmNlVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuc3lzdGVtX3N0YXRzJyxmdW5jdGlvbigpe2NvbnN0IFN5c3RlbVN0YXRzU25hcHNob3RWaWV3PXRyLnVpLmIuZGVmaW5lKCd0ci11aS1lLXN5c3RlbS1zdGF0cy1zbmFwc2hvdC12aWV3Jyx0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcpO1N5c3RlbVN0YXRzU25hcHNob3RWaWV3LnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmFuYWx5c2lzLk9iamVjdFNuYXBzaG90Vmlldy5wcm90b3R5cGUsZGVjb3JhdGUoKXtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCd0ci11aS1lLXN5c3RlbS1zdGF0cy1zbmFwc2hvdC12aWV3Jyk7fSx1cGRhdGVDb250ZW50cygpe2NvbnN0IHNuYXBzaG90PXRoaXMub2JqZWN0U25hcHNob3RfO2lmKCFzbmFwc2hvdHx8IXNuYXBzaG90LmdldFN0YXRzKCkpe1BvbHltZXIuZG9tKHRoaXMpLnRleHRDb250ZW50PSdObyBzeXN0ZW0gc3RhdHMgc25hcHNob3QgZm91bmQuJztyZXR1cm47fQotUG9seW1lci5kb20odGhpcykudGV4dENvbnRlbnQ9Jyc7Y29uc3Qgc3RhdHM9c25hcHNob3QuZ2V0U3RhdHMoKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkTGlzdF8oc3RhdHMpKTt9LGlzRmxvYXQobil7cmV0dXJuIHR5cGVvZiBuPT09J251bWJlcicmJm4lMSE9PTA7fSxidWlsZExpc3RfKHN0YXRzKXtjb25zdCBzdGF0TGlzdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO2Zvcihjb25zdCBzdGF0TmFtZSBpbiBzdGF0cyl7Y29uc3Qgc3RhdFRleHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtQb2x5bWVyLmRvbShzdGF0VGV4dCkudGV4dENvbnRlbnQ9Jycrc3RhdE5hbWUrJzogJztQb2x5bWVyLmRvbShzdGF0TGlzdCkuYXBwZW5kQ2hpbGQoc3RhdFRleHQpO2lmKHN0YXRzW3N0YXROYW1lXWluc3RhbmNlb2YgT2JqZWN0KXtQb2x5bWVyLmRvbShzdGF0TGlzdCkuYXBwZW5kQ2hpbGQodGhpcy5idWlsZExpc3RfKHN0YXRzW3N0YXROYW1lXSkpO31lbHNle2lmKHRoaXMuaXNGbG9hdChzdGF0c1tzdGF0TmFtZV0pKXtQb2x5bWVyLmRvbShzdGF0VGV4dCkudGV4dENvbnRlbnQrPXN0YXRzW3N0YXROYW1lXS50b0ZpeGVkKDIpO31lbHNle1BvbHltZXIuZG9tKHN0YXRUZXh0KS50ZXh0Q29udGVudCs9c3RhdHNbc3RhdE5hbWVdO319fQotcmV0dXJuIHN0YXRMaXN0O319O3RyLnVpLmFuYWx5c2lzLk9iamVjdFNuYXBzaG90Vmlldy5yZWdpc3RlcihTeXN0ZW1TdGF0c1NuYXBzaG90Vmlldyx7dHlwZU5hbWU6J2Jhc2U6OlRyYWNlRXZlbnRTeXN0ZW1TdGF0c01vbml0b3I6OlN5c3RlbVN0YXRzJ30pO3JldHVybntTeXN0ZW1TdGF0c1NuYXBzaG90Vmlldyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS52OCcsZnVuY3Rpb24oKXtjb25zdCBJR05PUkVEX0VOVFJJRVM9e21hdGNoOmZ1bGw9PmZ1bGwuc3RhcnRzV2l0aCgnKkNPREVfQUdFXycpfTtjb25zdCBJTlNUQU5DRV9UWVBFX0dST1VQUz17RklYRURfQVJSQVlfVFlQRTp7bWF0Y2g6ZnVsbD0+ZnVsbC5zdGFydHNXaXRoKCcqRklYRURfQVJSQVlfJykscmVhbEVudHJ5OidGSVhFRF9BUlJBWV9UWVBFJyxrZXlUb05hbWU6a2V5PT5rZXkuc2xpY2UoJypGSVhFRF9BUlJBWV8nLmxlbmd0aCkuc2xpY2UoMCwtKCdfU1VCX1RZUEUnLmxlbmd0aCkpLG5hbWVUb0tleTpuYW1lPT4nKkZJWEVEX0FSUkFZXycrbmFtZSsnX1NVQl9UWVBFJ30sQ09ERV9UWVBFOnttYXRjaDpmdWxsPT5mdWxsLnN0YXJ0c1dpdGgoJypDT0RFXycpLHJlYWxFbnRyeTonQ09ERV9UWVBFJyxrZXlUb05hbWU6a2V5PT5rZXkuc2xpY2UoJypDT0RFXycubGVuZ3RoKSxuYW1lVG9LZXk6bmFtZT0+JypDT0RFXycrbmFtZX0sSlNfT0JKRUNUUzp7bWF0Y2g6ZnVsbD0+ZnVsbC5zdGFydHNXaXRoKCdKU18nKSxrZXlUb05hbWU6a2V5PT5rZXksbmFtZVRvS2V5Om5hbWU9Pm5hbWV9LFN0cmluZ3M6e21hdGNoOmZ1bGw9PmZ1bGwuZW5kc1dpdGgoJ1NUUklOR19UWVBFJyksa2V5VG9OYW1lOmtleT0+a2V5LG5hbWVUb0tleTpuYW1lPT5uYW1lfX07Y29uc3QgRElGRl9DT0xPUj17R1JFRU46JyM2NEREMTcnLFJFRDonI0Q1MDAwMCd9O2Z1bmN0aW9uIGNvbXB1dGVQZXJjZW50YWdlKHZhbHVlQSx2YWx1ZUIpe2lmKHZhbHVlQT09PTApcmV0dXJuIDA7cmV0dXJuIHZhbHVlQS92YWx1ZUIqMTAwO30KLWNsYXNzIERpZmZFbnRyeXtjb25zdHJ1Y3RvcihvcmlnaW5hbEVudHJ5LGRpZmZFbnRyeSl7dGhpcy5vcmlnaW5hbEVudHJ5Xz1vcmlnaW5hbEVudHJ5O3RoaXMuZGlmZkVudHJ5Xz1kaWZmRW50cnk7fQotZ2V0IHRpdGxlKCl7cmV0dXJuIHRoaXMuZGlmZkVudHJ5Xy50aXRsZTt9Ci1nZXQgb3ZlcmFsbCgpe3JldHVybiB0aGlzLmRpZmZFbnRyeV8ub3ZlcmFsbDt9Ci1nZXQgb3ZlckFsbG9jYXRlZCgpe3JldHVybiB0aGlzLmRpZmZFbnRyeV8ub3ZlckFsbG9jYXRlZDt9Ci1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5kaWZmRW50cnlfLmNvdW50O30KLWdldCBvdmVyYWxsUGVyY2VudCgpe3JldHVybiB0aGlzLmRpZmZFbnRyeV8ub3ZlcmFsbFBlcmNlbnQ7fQotZ2V0IG92ZXJBbGxvY2F0ZWRQZXJjZW50KCl7cmV0dXJuIHRoaXMuZGlmZkVudHJ5Xy5vdmVyQWxsb2NhdGVkUGVyY2VudDt9Ci1nZXQgb3JpZ2luKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxFbnRyeV87fQotZ2V0IGRpZmYoKXtyZXR1cm4gdGhpcy5kaWZmRW50cnlfO30KLWdldCBzdWJSb3dzKCl7cmV0dXJuIHRoaXMuZGlmZkVudHJ5Xy5zdWJSb3dzO319Ci1jbGFzcyBFbnRyeXtjb25zdHJ1Y3Rvcih0aXRsZSxjb3VudCxvdmVyYWxsLG92ZXJBbGxvY2F0ZWQsaGlzdG9ncmFtLG92ZXJBbGxvY2F0ZWRIaXN0b2dyYW0pe3RoaXMudGl0bGVfPXRpdGxlO3RoaXMub3ZlcmFsbF89b3ZlcmFsbDt0aGlzLmNvdW50Xz1jb3VudDt0aGlzLm92ZXJBbGxvY2F0ZWRfPW92ZXJBbGxvY2F0ZWQ7dGhpcy5oaXN0b2dyYW1fPWhpc3RvZ3JhbTt0aGlzLm92ZXJBbGxvY2F0ZWRIaXN0b2dyYW1fPW92ZXJBbGxvY2F0ZWRIaXN0b2dyYW07dGhpcy5idWNrZXRTaXplXz10aGlzLmhpc3RvZ3JhbV8ubGVuZ3RoO3RoaXMub3ZlcmFsbFBlcmNlbnRfPTEwMDt0aGlzLm92ZXJBbGxvY2F0ZWRQZXJjZW50Xz0xMDA7fQotZ2V0IHRpdGxlKCl7cmV0dXJuIHRoaXMudGl0bGVfO30KLWdldCBvdmVyYWxsKCl7cmV0dXJuIHRoaXMub3ZlcmFsbF87fQotZ2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuY291bnRfO30KLWdldCBvdmVyQWxsb2NhdGVkKCl7cmV0dXJuIHRoaXMub3ZlckFsbG9jYXRlZF87fQotZ2V0IGhpc3RvZ3JhbSgpe3JldHVybiB0aGlzLmhpc3RvZ3JhbV87fQotZ2V0IG92ZXJBbGxvY2F0ZWRIaXN0b2dyYW0oKXtyZXR1cm4gdGhpcy5vdmVyQWxsb2NhdGVkSGlzdG9ncmFtXzt9Ci1nZXQgYnVja2V0U2l6ZSgpe3JldHVybiB0aGlzLmJ1Y2tldFNpemVfO30KLWdldCBvdmVyYWxsUGVyY2VudCgpe3JldHVybiB0aGlzLm92ZXJhbGxQZXJjZW50Xzt9Ci1zZXQgb3ZlcmFsbFBlcmNlbnQodmFsdWUpe3RoaXMub3ZlcmFsbFBlcmNlbnRfPXZhbHVlO30KLWdldCBvdmVyQWxsb2NhdGVkUGVyY2VudCgpe3JldHVybiB0aGlzLm92ZXJBbGxvY2F0ZWRQZXJjZW50Xzt9Ci1zZXQgb3ZlckFsbG9jYXRlZFBlcmNlbnQodmFsdWUpe3RoaXMub3ZlckFsbG9jYXRlZFBlcmNlbnRfPXZhbHVlO30KLXNldEZyb21PYmplY3Qob2JqKXt0aGlzLmNvdW50Xz1vYmouY291bnQ7dGhpcy5vdmVyYWxsXz1vYmoub3ZlcmFsbC8xMDI0O3RoaXMub3ZlckFsbG9jYXRlZF89b2JqLm92ZXJfYWxsb2NhdGVkLzEwMjQ7dGhpcy5oaXN0b2dyYW1fPW9iai5oaXN0b2dyYW07dGhpcy5vdmVyQWxsb2NhdGVkSGlzdG9ncmFtXz1vYmoub3Zlcl9hbGxvY2F0ZWRfaGlzdG9ncmFtO30KLWRpZmYob3RoZXIpe2NvbnN0IGVudHJ5PW5ldyBFbnRyeSh0aGlzLnRpdGxlXyxvdGhlci5jb3VudF8tdGhpcy5jb3VudCxvdGhlci5vdmVyYWxsXy10aGlzLm92ZXJhbGwsb3RoZXIub3ZlckFsbG9jYXRlZF8tdGhpcy5vdmVyQWxsb2NhdGVkLFtdLFtdKTtlbnRyeS5vdmVyYWxsUGVyY2VudD1jb21wdXRlUGVyY2VudGFnZShlbnRyeS5vdmVyYWxsLHRoaXMub3ZlcmFsbCk7ZW50cnkub3ZlckFsbG9jYXRlZFBlcmNlbnQ9Y29tcHV0ZVBlcmNlbnRhZ2UoZW50cnkub3ZlckFsbG9jYXRlZCx0aGlzLm92ZXJBbGxvY2F0ZWQpO3JldHVybiBuZXcgRGlmZkVudHJ5KHRoaXMsZW50cnkpO319Ci1jbGFzcyBHcm91cGVkRW50cnkgZXh0ZW5kcyBFbnRyeXtjb25zdHJ1Y3Rvcih0aXRsZSxjb3VudCxvdmVyYWxsLG92ZXJBbGxvY2F0ZWQsaGlzdG9ncmFtLG92ZXJBbGxvY2F0ZWRIaXN0b2dyYW0pe3N1cGVyKHRpdGxlLGNvdW50LG92ZXJhbGwsb3ZlckFsbG9jYXRlZCxoaXN0b2dyYW0sb3ZlckFsbG9jYXRlZEhpc3RvZ3JhbSk7dGhpcy5oaXN0b2dyYW1fLmZpbGwoMCk7dGhpcy5vdmVyQWxsb2NhdGVkSGlzdG9ncmFtXy5maWxsKDApO3RoaXMuZW50cmllc189bmV3IE1hcCgpO30KLWdldCB0aXRsZSgpe3JldHVybiB0aGlzLnRpdGxlXzt9Ci1zZXQgdGl0bGUodmFsdWUpe3RoaXMudGl0bGVfPXZhbHVlO30KLWdldCBzdWJSb3dzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzXy52YWx1ZXMoKSk7fQotZ2V0RW50cnlGcm9tVGl0bGUodGl0bGUpe3JldHVybiB0aGlzLmVudHJpZXNfLmdldCh0aXRsZSk7fQotYWRkKGVudHJ5KXt0aGlzLmNvdW50Xys9ZW50cnkuY291bnQ7dGhpcy5vdmVyYWxsXys9ZW50cnkub3ZlcmFsbDt0aGlzLm92ZXJBbGxvY2F0ZWRfKz1lbnRyeS5vdmVyQWxsb2NhdGVkO2lmKHRoaXMuYnVja2V0U2l6ZV89PT1lbnRyeS5idWNrZXRTaXplKXtmb3IobGV0IGk9MDtpPHRoaXMuYnVja2V0U2l6ZV87KytpKXt0aGlzLmhpc3RvZ3JhbV9baV0rPWVudHJ5Lmhpc3RvZ3JhbVtpXTt0aGlzLm92ZXJBbGxvY2F0ZWRIaXN0b2dyYW1fW2ldKz1lbnRyeS5vdmVyQWxsb2NhdGVkSGlzdG9ncmFtW2ldO319Ci10aGlzLmVudHJpZXNfLnNldChlbnRyeS50aXRsZSxlbnRyeSk7fQotYWNjdW11bGF0ZVVua25vd24odGl0bGUpe2xldCB1bmtub3duQ291bnQ9dGhpcy5jb3VudF87bGV0IHVua25vd25PdmVyYWxsPXRoaXMub3ZlcmFsbF87bGV0IHVua25vd25PdmVyQWxsb2NhdGVkPXRoaXMub3ZlckFsbG9jYXRlZF87Y29uc3QgdW5rbm93bkhpc3RvZ3JhbT10ci5iLmRlZXBDb3B5KHRoaXMuaGlzdG9ncmFtXyk7Y29uc3QgdW5rbm93bk92ZXJBbGxvY2F0ZWRIaXN0b2dyYW09dHIuYi5kZWVwQ29weSh0aGlzLm92ZXJBbGxvY2F0ZWRIaXN0b2dyYW1fKTtmb3IoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzXy52YWx1ZXMoKSl7dW5rbm93bkNvdW50LT1lbnRyeS5jb3VudDt1bmtub3duT3ZlcmFsbC09ZW50cnkub3ZlcmFsbDt1bmtub3duT3ZlckFsbG9jYXRlZC09ZW50cnkub3ZlckFsbG9jYXRlZDtmb3IobGV0IGk9MDtpPHRoaXMuYnVja2V0U2l6ZV87KytpKXt1bmtub3duSGlzdG9ncmFtW2ldLT1lbnRyeS5oaXN0b2dyYW1baV07dW5rbm93bk92ZXJBbGxvY2F0ZWRIaXN0b2dyYW1baV0tPWVudHJ5Lm92ZXJBbGxvY2F0ZWRIaXN0b2dyYW1baV07fX0KLXVua25vd25PdmVyQWxsb2NhdGVkPXVua25vd25PdmVyQWxsb2NhdGVkPDA/MDp1bmtub3duT3ZlckFsbG9jYXRlZDt0aGlzLmVudHJpZXNfLnNldCh0aXRsZSxuZXcgRW50cnkodGl0bGUsdW5rbm93bkNvdW50LHVua25vd25PdmVyYWxsLHVua25vd25PdmVyQWxsb2NhdGVkLHVua25vd25IaXN0b2dyYW0sdW5rbm93bk92ZXJBbGxvY2F0ZWRIaXN0b2dyYW0pKTt9Ci1jYWxjdWxhdGVQZXJjZW50YWdlKCl7Zm9yKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc18udmFsdWVzKCkpe2VudHJ5Lm92ZXJhbGxQZXJjZW50PWNvbXB1dGVQZXJjZW50YWdlKGVudHJ5Lm92ZXJhbGwsdGhpcy5vdmVyYWxsXyk7ZW50cnkub3ZlckFsbG9jYXRlZFBlcmNlbnQ9Y29tcHV0ZVBlcmNlbnRhZ2UoZW50cnkub3ZlckFsbG9jYXRlZCx0aGlzLm92ZXJBbGxvY2F0ZWRfKTtpZihlbnRyeSBpbnN0YW5jZW9mIEdyb3VwZWRFbnRyeSllbnRyeS5jYWxjdWxhdGVQZXJjZW50YWdlKCk7fX0KLWRpZmYob3RoZXIpe2xldCBuZXdUaXRsZT0nJztpZih0aGlzLnRpdGxlXy5zdGFydHNXaXRoKCdJc29sYXRlJykpe25ld1RpdGxlPSdUb3RhbCc7fWVsc2V7bmV3VGl0bGU9dGhpcy50aXRsZV87fQotY29uc3QgcmVzdWx0PW5ldyBHcm91cGVkRW50cnkobmV3VGl0bGUsMCwwLDAsW10sW10pO2Zvcihjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNfKXtjb25zdCBvdGhlckVudHJ5PW90aGVyLmdldEVudHJ5RnJvbVRpdGxlKGVudHJ5WzBdKTtpZihvdGhlckVudHJ5PT09dW5kZWZpbmVkKWNvbnRpbnVlO3Jlc3VsdC5hZGQoZW50cnlbMV0uZGlmZihvdGhlckVudHJ5KSk7fQotcmVzdWx0Lm92ZXJhbGxQZXJjZW50PWNvbXB1dGVQZXJjZW50YWdlKHJlc3VsdC5vdmVyYWxsLHRoaXMub3ZlcmFsbCk7cmVzdWx0Lm92ZXJBbGxvY2F0ZWRQZXJjZW50PWNvbXB1dGVQZXJjZW50YWdlKHJlc3VsdC5vdmVyQWxsb2NhdGVkLHRoaXMub3ZlckFsbG9jYXRlZCk7cmV0dXJuIG5ldyBEaWZmRW50cnkodGhpcyxyZXN1bHQpO319Ci1mdW5jdGlvbiBjcmVhdGVTZWxlY3Rvcih0YXJnZXRFbCxkZWZhdWx0VmFsdWUsaXRlbXMsY2FsbGJhY2spe2NvbnN0IHNlbGVjdG9yRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7c2VsZWN0b3JFbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLGNhbGxiYWNrLmJpbmQodGFyZ2V0RWwpKTtjb25zdCBkZWZhdWx0T3B0aW9uRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7Zm9yKGxldCBpPTA7aTxpdGVtcy5sZW5ndGg7aSsrKXtjb25zdCBpdGVtPWl0ZW1zW2ldO2NvbnN0IG9wdGlvbkVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1BvbHltZXIuZG9tKG9wdGlvbkVsKS50ZXh0Q29udGVudD1pdGVtLmxhYmVsO29wdGlvbkVsLnRhcmdldFByb3BlcnR5VmFsdWU9aXRlbS52YWx1ZTtvcHRpb25FbC5pdGVtPWl0ZW07UG9seW1lci5kb20oc2VsZWN0b3JFbCkuYXBwZW5kQ2hpbGQob3B0aW9uRWwpO30KLXNlbGVjdG9yRWwuX19kZWZpbmVHZXR0ZXJfXygnc2VsZWN0ZWRWYWx1ZScsZnVuY3Rpb24odil7aWYoc2VsZWN0b3JFbC5jaGlsZHJlbltzZWxlY3RvckVsLnNlbGVjdGVkSW5kZXhdPT09dW5kZWZpbmVkKXtyZXR1cm4gdW5kZWZpbmVkO30KLXJldHVybiBzZWxlY3RvckVsLmNoaWxkcmVuW3NlbGVjdG9yRWwuc2VsZWN0ZWRJbmRleF0udGFyZ2V0UHJvcGVydHlWYWx1ZTt9KTtzZWxlY3RvckVsLl9fZGVmaW5lR2V0dGVyX18oJ3NlbGVjdGVkSXRlbScsZnVuY3Rpb24odil7aWYoc2VsZWN0b3JFbC5jaGlsZHJlbltzZWxlY3RvckVsLnNlbGVjdGVkSW5kZXhdPT09dW5kZWZpbmVkKXtyZXR1cm4gdW5kZWZpbmVkO30KLXJldHVybiBzZWxlY3RvckVsLmNoaWxkcmVuW3NlbGVjdG9yRWwuc2VsZWN0ZWRJbmRleF0uaXRlbTt9KTtzZWxlY3RvckVsLl9fZGVmaW5lU2V0dGVyX18oJ3NlbGVjdGVkVmFsdWUnLGZ1bmN0aW9uKHYpe2ZvcihsZXQgaT0wO2k8c2VsZWN0b3JFbC5jaGlsZHJlbi5sZW5ndGg7aSsrKXtjb25zdCB2YWx1ZT1zZWxlY3RvckVsLmNoaWxkcmVuW2ldLnRhcmdldFByb3BlcnR5VmFsdWU7aWYodmFsdWU9PT12KXtjb25zdCBjaGFuZ2VkPXNlbGVjdG9yRWwuc2VsZWN0ZWRJbmRleCE9PWk7aWYoY2hhbmdlZCl7c2VsZWN0b3JFbC5zZWxlY3RlZEluZGV4PWk7Y2FsbGJhY2soKTt9Ci1yZXR1cm47fX0KLXRocm93IG5ldyBFcnJvcignTm90IGEgdmFsaWQgdmFsdWUnKTt9KTtzZWxlY3RvckVsLnNlbGVjdGVkSW5kZXg9LTE7cmV0dXJuIHNlbGVjdG9yRWw7fQotZnVuY3Rpb24gcGx1c01pbnVzKHZhbHVlLHRvRml4ZWQ9Myl7cmV0dXJuKHZhbHVlPjA/JysnOicnKSt2YWx1ZS50b0ZpeGVkKHRvRml4ZWQpO30KLWZ1bmN0aW9uIGFkZEFycm93KHZhbHVlKXtpZih2YWx1ZT09PTApcmV0dXJuIHZhbHVlO2lmKHZhbHVlPT09TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKXJldHVybidcdTIxOTNcdTIyMUUnO2lmKHZhbHVlPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKXJldHVybidcdTIxOTFcdTIyMUUnO3JldHVybih2YWx1ZT4wPydcdTIxOTEnOidcdTIxOTMnKStNYXRoLmFicyh2YWx1ZS50b0ZpeGVkKDMpKTt9Ci1Qb2x5bWVyKHtpczondHItdWktZS12OC1nYy1vYmplY3RzLXN0YXRzLXRhYmxlJyxyZWFkeSgpe3RoaXMuJC5kaWZmT3B0aW9uLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuaXNvbGF0ZUVudHJpZXNfPVtdO3RoaXMuc2VsZWN0b3IxXz11bmRlZmluZWQ7dGhpcy5zZWxlY3RvcjJfPXVuZGVmaW5lZDt9LGNvbnN0cnVjdERpZmZUYWJsZV8odGFibGUpe3RoaXMuJC5kaWZmVGFibGUuc2VsZWN0aW9uTW9kZT10ci51aS5iLlRhYmxlRm9ybWF0LlNlbGVjdGlvbk1vZGUuUk9XO3RoaXMuJC5kaWZmVGFibGUudGFibGVDb2x1bW5zPVt7dGl0bGU6J0NvbXBvbmVudCcsdmFsdWUocm93KXtjb25zdCB0eXBlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO3R5cGVFbC5pbm5lclRleHQ9cm93LnRpdGxlO3JldHVybiB0eXBlRWw7fSxzaG93RXhwYW5kQnV0dG9uczp0cnVlfSx7dGl0bGU6J092ZXJhbGwgTWVtb3J5KEtCKScsdmFsdWUocm93KXtjb25zdCBzcGFuRWw9dHIudWkuYi5jcmVhdGVTcGFuKCk7c3BhbkVsLmlubmVyVGV4dD1yb3cub3JpZ2luLm92ZXJhbGwudG9GaXhlZCgzKTtyZXR1cm4gc3BhbkVsO30sY21wKGEsYil7cmV0dXJuIGEub3JpZ2luLm92ZXJhbGwtYi5vcmlnaW4ub3ZlcmFsbDt9fSx7dGl0bGU6J2RpZmYoS0IpJyx2YWx1ZShyb3cpe2NvbnN0IHNwYW5FbD10ci51aS5iLmNyZWF0ZVNwYW4oKTtzcGFuRWwuaW5uZXJUZXh0PXBsdXNNaW51cyhyb3cub3ZlcmFsbCk7aWYocm93Lm92ZXJhbGw+MCl7c3BhbkVsLnN0eWxlLmNvbG9yPURJRkZfQ09MT1IuUkVEO31lbHNlIGlmKHJvdy5vdmVyYWxsPDApe3NwYW5FbC5zdHlsZS5jb2xvcj1ESUZGX0NPTE9SLkdSRUVOO30KLXJldHVybiBzcGFuRWw7fSxjbXAoYSxiKXtyZXR1cm4gYS5vdmVyYWxsLWIub3ZlcmFsbDt9fSx7dGl0bGU6J2RpZmYoJSknLHZhbHVlKHJvdyl7Y29uc3Qgc3BhbkVsPXRyLnVpLmIuY3JlYXRlU3BhbigpO3NwYW5FbC5pbm5lclRleHQ9YWRkQXJyb3cocm93Lm92ZXJhbGxQZXJjZW50KTtpZihyb3cub3ZlcmFsbD4wKXtzcGFuRWwuc3R5bGUuY29sb3I9RElGRl9DT0xPUi5SRUQ7fWVsc2UgaWYocm93Lm92ZXJhbGw8MCl7c3BhbkVsLnN0eWxlLmNvbG9yPURJRkZfQ09MT1IuR1JFRU47fQotcmV0dXJuIHNwYW5FbDt9LGNtcChhLGIpe3JldHVybiBhLm92ZXJhbGwtYi5vdmVyYWxsO319LHt0aXRsZTonT3ZlciBBbGxvY2F0ZWQgTWVtb3J5KEtCKScsdmFsdWUocm93KXtjb25zdCBzcGFuRWw9dHIudWkuYi5jcmVhdGVTcGFuKCk7c3BhbkVsLmlubmVyVGV4dD1yb3cub3JpZ2luLm92ZXJBbGxvY2F0ZWQudG9GaXhlZCgzKTtyZXR1cm4gc3BhbkVsO30sY21wKGEsYil7cmV0dXJuIGEub3JpZ2luLm92ZXJBbGxvY2F0ZWQtYi5vcmlnaW4ub3ZlckFsbG9jYXRlZDt9fSx7dGl0bGU6J2RpZmYoS0IpJyx2YWx1ZShyb3cpe2NvbnN0IHNwYW5FbD10ci51aS5iLmNyZWF0ZVNwYW4oKTtzcGFuRWwuaW5uZXJUZXh0PXBsdXNNaW51cyhyb3cub3ZlckFsbG9jYXRlZCk7aWYocm93Lm92ZXJBbGxvY2F0ZWQ+MCl7c3BhbkVsLnN0eWxlLmNvbG9yPURJRkZfQ09MT1IuUkVEO31lbHNlIGlmKHJvdy5vdmVyQWxsb2NhdGVkPDApe3NwYW5FbC5zdHlsZS5jb2xvcj1ESUZGX0NPTE9SLkdSRUVOO30KLXJldHVybiBzcGFuRWw7fSxjbXAoYSxiKXtyZXR1cm4gYS5vdmVyQWxsb2NhdGVkLWIub3ZlckFsbG9jYXRlZDt9fSx7dGl0bGU6J2RpZmYoJSknLHZhbHVlKHJvdyl7Y29uc3Qgc3BhbkVsPXRyLnVpLmIuY3JlYXRlU3BhbigpO3NwYW5FbC5pbm5lclRleHQ9YWRkQXJyb3cocm93Lm92ZXJBbGxvY2F0ZWRQZXJjZW50KTtpZihyb3cub3ZlckFsbG9jYXRlZD4wKXtzcGFuRWwuc3R5bGUuY29sb3I9RElGRl9DT0xPUi5SRUQ7fWVsc2UgaWYocm93Lm92ZXJBbGxvY2F0ZWQ8MCl7c3BhbkVsLnN0eWxlLmNvbG9yPURJRkZfQ09MT1IuR1JFRU47fQotcmV0dXJuIHNwYW5FbDt9LGNtcChhLGIpe3JldHVybiBhLm92ZXJBbGxvY2F0ZWQtYi5vdmVyQWxsb2NhdGVkO319LHt0aXRsZTonQ291bnQnLHZhbHVlKHJvdyl7Y29uc3Qgc3BhbkVsPXRyLnVpLmIuY3JlYXRlU3BhbigpO3NwYW5FbC5pbm5lclRleHQ9cm93Lm9yaWdpbi5jb3VudDtyZXR1cm4gc3BhbkVsO30sY21wKGEsYil7cmV0dXJuIGEub3JpZ2luLmNvdW50LWIub3JpZ2luLmNvdW50O319LHt0aXRsZTonZGlmZicsdmFsdWUocm93KXtjb25zdCBzcGFuRWw9dHIudWkuYi5jcmVhdGVTcGFuKCk7c3BhbkVsLmlubmVyVGV4dD1wbHVzTWludXMocm93LmNvdW50LDApO2lmKHJvdy5jb3VudD4wKXtzcGFuRWwuc3R5bGUuY29sb3I9RElGRl9DT0xPUi5SRUQ7fWVsc2UgaWYocm93LmNvdW50PDApe3NwYW5FbC5zdHlsZS5jb2xvcj1ESUZGX0NPTE9SLkdSRUVOO30KLXJldHVybiBzcGFuRWw7fSxjbXAoYSxiKXtyZXR1cm4gYS5jb3VudC1iLmNvdW50O319LF07fSxidWlsZE9wdGlvbnNfKCl7Y29uc3QgaXRlbXM9W107Zm9yKGNvbnN0IGlzb2xhdGVFbnRyeSBvZiB0aGlzLmlzb2xhdGVFbnRyaWVzXyl7aXRlbXMucHVzaCh7bGFiZWw6aXNvbGF0ZUVudHJ5LnRpdGxlLHZhbHVlOmlzb2xhdGVFbnRyeX0pO30KLXRoaXMuJC5kaWZmT3B0aW9uLnN0eWxlLmRpc3BsYXk9J2lubGluZS1ibG9jayc7dGhpcy5zZWxlY3RvcjFfPWNyZWF0ZVNlbGVjdG9yKHRoaXMsJycsaXRlbXMsdGhpcy5kaWZmT3B0aW9uQ2hhbmdlZF8pO1BvbHltZXIuZG9tKHRoaXMuJC5kaWZmT3B0aW9uKS5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdG9yMV8pO2NvbnN0IHNwYW5FbD10ci51aS5iLmNyZWF0ZVNwYW4oKTtzcGFuRWwuaW5uZXJUZXh0PScgVlMgJztQb2x5bWVyLmRvbSh0aGlzLiQuZGlmZk9wdGlvbikuYXBwZW5kQ2hpbGQoc3BhbkVsKTt0aGlzLnNlbGVjdG9yMl89Y3JlYXRlU2VsZWN0b3IodGhpcywnJyxpdGVtcyx0aGlzLmRpZmZPcHRpb25DaGFuZ2VkXyk7UG9seW1lci5kb20odGhpcy4kLmRpZmZPcHRpb24pLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0b3IyXyk7fSxkaWZmT3B0aW9uQ2hhbmdlZF8oKXtjb25zdCBpc29sYXRlRW50cnkxPXRoaXMuc2VsZWN0b3IxXy5zZWxlY3RlZFZhbHVlO2NvbnN0IGlzb2xhdGVFbnRyeTI9dGhpcy5zZWxlY3RvcjJfLnNlbGVjdGVkVmFsdWU7aWYoaXNvbGF0ZUVudHJ5MT09PXVuZGVmaW5lZHx8aXNvbGF0ZUVudHJ5Mj09PXVuZGVmaW5lZCl7cmV0dXJuO30KLWlmKGlzb2xhdGVFbnRyeTE9PT1pc29sYXRlRW50cnkyKXt0aGlzLiQuZGlmZlRhYmxlLnRhYmxlUm93cz1bXTt0aGlzLiQuZGlmZlRhYmxlLnJlYnVpbGQoKTtyZXR1cm47fQotdGhpcy4kLmRpZmZUYWJsZS50YWJsZVJvd3M9W2lzb2xhdGVFbnRyeTEuZGlmZihpc29sYXRlRW50cnkyKV07dGhpcy4kLmRpZmZUYWJsZS5yZWJ1aWxkKCk7fSxjb25zdHJ1Y3RUYWJsZV8oKXt0aGlzLiQudGFibGUuc2VsZWN0aW9uTW9kZT10ci51aS5iLlRhYmxlRm9ybWF0LlNlbGVjdGlvbk1vZGUuUk9XO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t0aXRsZTonQ29tcG9uZW50Jyx2YWx1ZShyb3cpe2NvbnN0IHR5cGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7dHlwZUVsLmlubmVyVGV4dD1yb3cudGl0bGU7cmV0dXJuIHR5cGVFbDt9LHNob3dFeHBhbmRCdXR0b25zOnRydWV9LHt0aXRsZTonT3ZlcmFsbCBNZW1vcnkgKEtCKScsdmFsdWUocm93KXtjb25zdCB0eXBlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO3R5cGVFbC5pbm5lclRleHQ9cm93Lm92ZXJhbGwudG9GaXhlZCgzKTtyZXR1cm4gdHlwZUVsO30sY21wKGEsYil7cmV0dXJuIGEub3ZlcmFsbC1iLm92ZXJhbGw7fX0se3RpdGxlOidPdmVyIEFsbG9jYXRlZCBNZW1vcnkgKEtCKScsdmFsdWUocm93KXtjb25zdCB0eXBlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO3R5cGVFbC5pbm5lclRleHQ9cm93Lm92ZXJBbGxvY2F0ZWQudG9GaXhlZCgzKTtyZXR1cm4gdHlwZUVsO30sY21wKGEsYil7cmV0dXJuIGEub3ZlckFsbG9jYXRlZC1iLm92ZXJBbGxvY2F0ZWQ7fX0se3RpdGxlOidPdmVyYWxsIENvdW50Jyx2YWx1ZShyb3cpe2NvbnN0IHR5cGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7dHlwZUVsLmlubmVyVGV4dD1yb3cuY291bnQ7cmV0dXJuIHR5cGVFbDt9LGNtcChhLGIpe3JldHVybiBhLmNvdW50LWIuY291bnQ7fX0se3RpdGxlOidPdmVyYWxsIE1lbW9yeSBQZXJjZW50Jyx2YWx1ZShyb3cpe2NvbnN0IHR5cGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7dHlwZUVsLmlubmVyVGV4dD1yb3cub3ZlcmFsbFBlcmNlbnQudG9GaXhlZCgzKSsnJSc7cmV0dXJuIHR5cGVFbDt9LGNtcChhLGIpe3JldHVybiBhLm92ZXJhbGwtYi5vdmVyYWxsO319LHt0aXRsZTonT3ZlcmFsbCBBbGxvY2F0ZWQgTWVtb3J5IFBlcmNlbnQnLHZhbHVlKHJvdyl7Y29uc3QgdHlwZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTt0eXBlRWwuaW5uZXJUZXh0PXJvdy5vdmVyQWxsb2NhdGVkUGVyY2VudC50b0ZpeGVkKDMpKyclJztyZXR1cm4gdHlwZUVsO30sY21wKGEsYil7cmV0dXJuIGEub3ZlckFsbG9jYXRlZC1iLm92ZXJBbGxvY2F0ZWQ7fX1dO3RoaXMuJC50YWJsZS5zb3J0Q29sdW1uSW5kZXg9MTt0aGlzLiQudGFibGUuc29ydERlc2NlbmRpbmc9dHJ1ZTt9LGJ1aWxkU3ViRW50cnlfKG9iamVjdHMsZ3JvdXBFbnRyeSxrZXlUb05hbWUpe2NvbnN0IHR5cGVHcm91cD1JTlNUQU5DRV9UWVBFX0dST1VQU1tncm91cEVudHJ5LnRpdGxlXTtmb3IoY29uc3QgaW5zdGFuY2VUeXBlIG9mIHR5cGVHcm91cCl7Y29uc3QgZT1vYmplY3RzW2luc3RhbmNlVHlwZV07aWYoZT09PXVuZGVmaW5lZCljb250aW51ZTtkZWxldGUgb2JqZWN0c1tpbnN0YW5jZVR5cGVdO2xldCB0aXRsZT1pbnN0YW5jZVR5cGU7aWYoa2V5VG9OYW1lIT09dW5kZWZpbmVkKXRpdGxlPWtleVRvTmFtZSh0aXRsZSk7Z3JvdXBFbnRyeS5hZGQobmV3IEVudHJ5KHRpdGxlLGUuY291bnQsZS5vdmVyYWxsLzEwMjQsZS5vdmVyX2FsbG9jYXRlZC8xMDI0LGUuaGlzdG9ncmFtLGUub3Zlcl9hbGxvY2F0ZWRfaGlzdG9ncmFtKSk7fX0sYnVpbGRVbkdyb3VwZWRFbnRyaWVzXyhvYmplY3RzLG9iamVjdEVudHJ5LGJ1Y2tldFNpemUpe2Zvcihjb25zdCB0aXRsZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3RzKSl7Y29uc3Qgb2JqPW9iamVjdHNbdGl0bGVdO2NvbnN0IGdyb3VwZWRFbnRyeT1uZXcgR3JvdXBlZEVudHJ5KHRpdGxlLDAsMCwwLG5ldyBBcnJheShidWNrZXRTaXplKSxuZXcgQXJyYXkoYnVja2V0U2l6ZSkpO2dyb3VwZWRFbnRyeS5zZXRGcm9tT2JqZWN0KG9iaik7b2JqZWN0RW50cnkuYWRkKGdyb3VwZWRFbnRyeSk7fX0sY3JlYXRlR3JvdXBFbnRyaWVzXyhncm91cEVudHJpZXMsb2JqZWN0cyxidWNrZXRTaXplKXtmb3IoY29uc3QgZ3JvdXBOYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKElOU1RBTkNFX1RZUEVfR1JPVVBTKSl7Y29uc3QgZ3JvdXBFbnRyeT1uZXcgR3JvdXBlZEVudHJ5KGdyb3VwTmFtZSwwLDAsMCxuZXcgQXJyYXkoYnVja2V0U2l6ZSksbmV3IEFycmF5KGJ1Y2tldFNpemUpKTtpZihJTlNUQU5DRV9UWVBFX0dST1VQU1tncm91cE5hbWVdLnJlYWxFbnRyeSE9PXVuZGVmaW5lZCl7Z3JvdXBFbnRyeS5zYXZlZFJlYWxFbnRyeT1vYmplY3RzW0lOU1RBTkNFX1RZUEVfR1JPVVBTW2dyb3VwTmFtZV0ucmVhbEVudHJ5XTtkZWxldGUgb2JqZWN0c1tJTlNUQU5DRV9UWVBFX0dST1VQU1tncm91cE5hbWVdLnJlYWxFbnRyeV07fQotZ3JvdXBFbnRyaWVzW2dyb3VwTmFtZV09Z3JvdXBFbnRyeTt9fSxidWlsZEdyb3VwRW50cmllc18oZ3JvdXBFbnRyaWVzLG9iamVjdEVudHJ5KXtmb3IoY29uc3QgZ3JvdXBOYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGdyb3VwRW50cmllcykpe2NvbnN0IGdyb3VwRW50cnk9Z3JvdXBFbnRyaWVzW2dyb3VwTmFtZV07aWYoZ3JvdXBFbnRyeS5zYXZlZFJlYWxFbnRyeSE9PXVuZGVmaW5lZCl7Z3JvdXBFbnRyeS5zZXRGcm9tT2JqZWN0KGdyb3VwRW50cnkuc2F2ZWRSZWFsRW50cnkpO2dyb3VwRW50cnkuYWNjdW11bGF0ZVVua25vd24oJ1VOS05PV04nKTtkZWxldGUgZ3JvdXBFbnRyeS5zYXZlZFJlYWxFbnRyeTt9Ci1vYmplY3RFbnRyeS5hZGQoZ3JvdXBFbnRyeSk7fX0sYnVpbGRTdWJFbnRyaWVzRm9yR3JvdXBzXyhncm91cEVudHJpZXMsb2JqZWN0cyl7Zm9yKGNvbnN0IGluc3RhbmNlVHlwZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3RzKSl7aWYoSUdOT1JFRF9FTlRSSUVTLm1hdGNoKGluc3RhbmNlVHlwZSkpe2RlbGV0ZSBvYmplY3RzW2luc3RhbmNlVHlwZV07Y29udGludWU7fQotY29uc3QgZT1vYmplY3RzW2luc3RhbmNlVHlwZV07Zm9yKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoSU5TVEFOQ0VfVFlQRV9HUk9VUFMpKXtjb25zdCBncm91cD1JTlNUQU5DRV9UWVBFX0dST1VQU1tuYW1lXTtpZihncm91cC5tYXRjaChpbnN0YW5jZVR5cGUpKXtncm91cEVudHJpZXNbbmFtZV0uYWRkKG5ldyBFbnRyeShncm91cC5rZXlUb05hbWUoaW5zdGFuY2VUeXBlKSxlLmNvdW50LGUub3ZlcmFsbC8xMDI0LGUub3Zlcl9hbGxvY2F0ZWQvMTAyNCxlLmhpc3RvZ3JhbSxlLm92ZXJfYWxsb2NhdGVkX2hpc3RvZ3JhbSkpO2RlbGV0ZSBvYmplY3RzW2luc3RhbmNlVHlwZV07fX19fSxidWlsZF8ob2JqZWN0cyxvYmplY3RFbnRyeSxidWNrZXRTaXplKXtkZWxldGUgb2JqZWN0cy5FTkQ7Y29uc3QgZ3JvdXBFbnRyaWVzPXt9O3RoaXMuY3JlYXRlR3JvdXBFbnRyaWVzXyhncm91cEVudHJpZXMsb2JqZWN0cyxidWNrZXRTaXplKTt0aGlzLmJ1aWxkU3ViRW50cmllc0Zvckdyb3Vwc18oZ3JvdXBFbnRyaWVzLG9iamVjdHMpO3RoaXMuYnVpbGRHcm91cEVudHJpZXNfKGdyb3VwRW50cmllcyxvYmplY3RFbnRyeSk7dGhpcy5idWlsZFVuR3JvdXBlZEVudHJpZXNfKG9iamVjdHMsb2JqZWN0RW50cnksYnVja2V0U2l6ZSk7fSxzZXQgc2VsZWN0aW9uKHNsaWNlcyl7c2xpY2VzLnNvcnRFdmVudHMoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5zdGFydC1hLnN0YXJ0O30pO2NvbnN0IHByZXZpb3VzPXVuZGVmaW5lZDtmb3IoY29uc3Qgc2xpY2Ugb2Ygc2xpY2VzKXtpZighc2xpY2UgaW5zdGFuY2VvZiB0ci5lLnY4LlY4R0NTdGF0c1RocmVhZFNsaWNlKWNvbnRpbnVlO2NvbnN0IGxpdmVPYmplY3RzPXNsaWNlLmxpdmVPYmplY3RzO2NvbnN0IGRlYWRPYmplY3RzPXNsaWNlLmRlYWRPYmplY3RzO2NvbnN0IGlzb2xhdGU9bGl2ZU9iamVjdHMuaXNvbGF0ZTtjb25zdCBpc29sYXRlRW50cnk9bmV3IEdyb3VwZWRFbnRyeSgnSXNvbGF0ZV8nK2lzb2xhdGUrJyBhdCAnK3NsaWNlLnN0YXJ0LnRvRml4ZWQoMykrJyBtcycsMCwwLDAsW10sW10pO2NvbnN0IGxpdmVFbnRyeT1uZXcgR3JvdXBlZEVudHJ5KCdsaXZlIG9iamVjdHMnLDAsMCwwLFtdLFtdKTtjb25zdCBkZWFkRW50cnk9bmV3IEdyb3VwZWRFbnRyeSgnZGVhZCBvYmplY3RzJywwLDAsMCxbXSxbXSk7Y29uc3QgbGl2ZUJ1Y2tldFNpemU9bGl2ZU9iamVjdHMuYnVja2V0X3NpemVzLmxlbmd0aDtjb25zdCBkZWFkQnVja2V0U2l6ZT1kZWFkT2JqZWN0cy5idWNrZXRfc2l6ZXMubGVuZ3RoO3RoaXMuYnVpbGRfKHRyLmIuZGVlcENvcHkobGl2ZU9iamVjdHMudHlwZV9kYXRhKSxsaXZlRW50cnksbGl2ZUJ1Y2tldFNpemUpO2lzb2xhdGVFbnRyeS5hZGQobGl2ZUVudHJ5KTt0aGlzLmJ1aWxkXyh0ci5iLmRlZXBDb3B5KGRlYWRPYmplY3RzLnR5cGVfZGF0YSksZGVhZEVudHJ5LGRlYWRCdWNrZXRTaXplKTtpc29sYXRlRW50cnkuYWRkKGRlYWRFbnRyeSk7aXNvbGF0ZUVudHJ5LmNhbGN1bGF0ZVBlcmNlbnRhZ2UoKTt0aGlzLmlzb2xhdGVFbnRyaWVzXy5wdXNoKGlzb2xhdGVFbnRyeSk7fQotdGhpcy51cGRhdGVUYWJsZV8oKTtpZihzbGljZXMubGVuZ3RoPjEpe3RoaXMuYnVpbGRPcHRpb25zXygpO3RoaXMuY29uc3RydWN0RGlmZlRhYmxlXygpO319LHVwZGF0ZVRhYmxlXygpe3RoaXMuY29uc3RydWN0VGFibGVfKCk7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz10aGlzLmlzb2xhdGVFbnRyaWVzXzt0aGlzLiQudGFibGUucmVidWlsZCgpO30sfSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1lLW11bHRpLXY4LWdjLXN0YXRzLXRocmVhZC1zbGljZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuJC5nY09iamVjdHNTdGF0cy5zZWxlY3Rpb249c2VsZWN0aW9uO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWUtbXVsdGktdjgtZ2Mtc3RhdHMtdGhyZWFkLXNsaWNlLXN1Yi12aWV3Jyx0ci5lLnY4LlY4R0NTdGF0c1RocmVhZFNsaWNlLHttdWx0aTp0cnVlLHRpdGxlOidWOCBHQyBTdGF0cyBzbGljZXMnfSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnY4JyxmdW5jdGlvbigpe2NvbnN0IElDX1NUQVRTX1BST1BFUlRJRVM9Wyd0eXBlJywnY2F0ZWdvcnknLCdzY3JpcHROYW1lJywnZmlsZVBvc2l0aW9uJywnc3RhdGUnLCdpc05hdGl2ZScsJ21hcCcsJ3Byb3BlcnRpZXNNb2RlJywnbnVtYmVyT2ZPd25Qcm9wZXJ0aWVzJywnaW5zdGFuY2VUeXBlJ107Y2xhc3MgSUNTdGF0c0VudHJ5e2NvbnN0cnVjdG9yKG9iail7dGhpcy50eXBlXz1vYmoudHlwZTtpZih0aGlzLnR5cGVfLmluY2x1ZGVzKCdTdG9yZScpKXt0aGlzLmNhdGVnb3J5Xz0nU3RvcmUnO31lbHNlIGlmKHRoaXMudHlwZV8uaW5jbHVkZXMoJ0xvYWQnKSl7dGhpcy5jYXRlZ29yeV89J0xvYWQnO30KLXRoaXMuc3RhdGVfPW9iai5zdGF0ZTtpZihvYmouZnVuY3Rpb25OYW1lKXt0aGlzLmZ1bmN0aW9uTmFtZV89b2JqLm9wdGltaXplZD8nKic6J34nO3RoaXMuZnVuY3Rpb25OYW1lXys9b2JqLmZ1bmN0aW9uTmFtZS5sZW5ndGg9PT0wPycoYW5vbnltb3VzIGZ1bmN0aW9uKSc6b2JqLmZ1bmN0aW9uTmFtZTt9Ci10aGlzLm9mZnNldF89b2JqLm9mZnNldDt0aGlzLnNjcmlwdE5hbWVfPW9iai5zY3JpcHROYW1lP29iai5zY3JpcHROYW1lOid1bmtub3duJzt0aGlzLmlzTmF0aXZlXz1vYmouc2NyaXB0TmFtZSYmb2JqLnNjcmlwdE5hbWUuaW5jbHVkZXMoJ25hdGl2ZScpO3RoaXMubGluZU51bV89b2JqLmxpbmVOdW0/b2JqLmxpbmVOdW06J3Vua25vd24nO3RoaXMuZmlsZVBvc2l0aW9uXz10aGlzLnNjcmlwdE5hbWVfKyc6Jyt0aGlzLmxpbmVOdW1fO2lmKHRoaXMuZnVuY3Rpb25OYW1lXyl7dGhpcy5maWxlUG9zaXRpb25fKz0nICcrdGhpcy5mdW5jdGlvbk5hbWVfKycrJyt0aGlzLm9mZnNldF87fQotdGhpcy5jb25zdHJ1Y3Rvcl89b2JqLmNvbnN0cnVjdG9yP2ZhbHNlOnRydWU7dGhpcy5tYXBfPW9iai5tYXA7aWYodGhpcy5tYXBfKXt0aGlzLnByb3BlcnRpZXNNb2RlXz1vYmouZGljdD09PTA/J3Nsb3cnOidmYXN0Jzt9ZWxzZXt0aGlzLnByb3BlcnRpZXNNb2RlXz0ndW5rbm93bic7fQotdGhpcy5udW1iZXJPZk93blByb3BlcnRpZXNfPW9iai5vd247dGhpcy5pbnN0YW5jZVR5cGVfPW9iai5pbnN0YW5jZVR5cGU7dGhpcy5rZXlfPW9iai5rZXk7fQotZ2V0IHR5cGUoKXtyZXR1cm4gdGhpcy50eXBlXzt9Ci1nZXQgY2F0ZWdvcnkoKXtyZXR1cm4gdGhpcy5jYXRlZ29yeV87fQotZ2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuc3RhdGVfO30KLWdldCBmdW5jdGlvbk5hbWUoKXtyZXR1cm4gdGhpcy5mdW5jdGlvbk5hbWVfO30KLWdldCBvZmZzZXQoKXtyZXR1cm4gdGhpcy5vZmZzZXRfO30KLWdldCBzY3JpcHROYW1lKCl7cmV0dXJuIHRoaXMuc2NyaXB0TmFtZV87fQotZ2V0IGlzTmF0aXZlKCl7cmV0dXJuIHRoaXMuaXNOYXRpdmVfO30KLWdldCBsaW5lTnVtYmVyKCl7cmV0dXJuIHRoaXMubGluZU51bV87fQotZ2V0IGlzQ29uc3RydWN0b3IoKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvcl87fQotZ2V0IG1hcCgpe3JldHVybiB0aGlzLm1hcF87fQotZ2V0IHByb3BlcnRpZXNNb2RlKCl7cmV0dXJuIHRoaXMucHJvcGVydGllc01vZGVfO30KLWdldCBudW1iZXJPZk93blByb3BlcnRpZXMoKXtyZXR1cm4gdGhpcy5udW1iZXJPZk93blByb3BlcnRpZXNfO30KLWdldCBpbnN0YW5jZVR5cGUoKXtyZXR1cm4gdGhpcy5pbnN0YW5jZVR5cGVfO30KLWdldCBmaWxlUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5maWxlUG9zaXRpb25fO319Ci1jbGFzcyBJQ1N0YXRzRW50cnlHcm91cHtjb25zdHJ1Y3Rvcihwcm9wZXJ0eSxrZXkpe3RoaXMucHJvcGVydHlfPXByb3BlcnR5O3RoaXMua2V5Xz1rZXk7dGhpcy5wZXJjZW50YWdlXz0wO3RoaXMuZW50cmllc189W107dGhpcy5zdWJHcm91cF89dW5kZWZpbmVkO30KLXN0YXRpYyBncm91cEJ5KGdyb3VwcyxlbnRyaWVzLHByb3BlcnR5KXtmb3IoY29uc3QgZW50cnkgb2YgZW50cmllcyl7Y29uc3Qga2V5PWVudHJ5W3Byb3BlcnR5XTtsZXQgZ3JvdXA9Z3JvdXBzLmdldChrZXkpO2lmKCFncm91cCl7Z3JvdXA9bmV3IElDU3RhdHNFbnRyeUdyb3VwKHByb3BlcnR5LGtleSk7Z3JvdXBzLnNldChrZXksZ3JvdXApO30KLWdyb3VwLmFkZChlbnRyeSk7fQotZm9yKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcy52YWx1ZXMoKSl7Z3JvdXAucGVyY2VudGFnZT1ncm91cC5sZW5ndGgvZW50cmllcy5sZW5ndGg7fX0KLWFkZChlbnRyeSl7dGhpcy5lbnRyaWVzXy5wdXNoKGVudHJ5KTt9Ci1jcmVhdGVTdWJHcm91cCgpe2lmKHRoaXMuc3ViR3JvdXBfKXJldHVybiB0aGlzLnN1Ykdyb3VwXzt0aGlzLnN1Ykdyb3VwXz1uZXcgTWFwKCk7Zm9yKGNvbnN0IHByb3BlcnR5IG9mIElDX1NUQVRTX1BST1BFUlRJRVMpe2lmKHByb3BlcnR5PT09dGhpcy5wcm9wZXJ0eV8pY29udGludWU7Y29uc3QgZ3JvdXBzPW5ldyBNYXAoKTt0aGlzLnN1Ykdyb3VwXy5zZXQocHJvcGVydHksZ3JvdXBzKTtJQ1N0YXRzRW50cnlHcm91cC5ncm91cEJ5KGdyb3Vwcyx0aGlzLmVudHJpZXNfLHByb3BlcnR5KTt9Ci1yZXR1cm4gdGhpcy5zdWJHcm91cF87fQotZ2V0IGVudHJpZXMoKXtyZXR1cm4gdGhpcy5lbnRyaWVzXzt9Ci1nZXQga2V5KCl7cmV0dXJuIHRoaXMua2V5Xzt9Ci1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW50cmllc18ubGVuZ3RoO30KLWdldCBwZXJjZW50YWdlKCl7cmV0dXJuIHRoaXMucGVyY2VudGFnZV87fQotc2V0IHBlcmNlbnRhZ2UodmFsdWUpe3RoaXMucGVyY2VudGFnZV89dmFsdWU7fX0KLWNsYXNzIElDU3RhdHNDb2xsZWN0aW9ue2NvbnN0cnVjdG9yKCl7dGhpcy5lbnRyaWVzXz1bXTt0aGlzLmdyb3VwZWRFbnRyaWVzXz1uZXcgTWFwKCk7fQotYWRkKGVudHJ5KXt0aGlzLmVudHJpZXNfLnB1c2goZW50cnkpO30KLWdyb3VwQnkocHJvcGVydHkpe2lmKHRoaXMuZ3JvdXBlZEVudHJpZXNfLmhhcyhwcm9wZXJ0eSkpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuZ3JvdXBlZEVudHJpZXNfLmdldChwcm9wZXJ0eSkudmFsdWVzKCkpO30KLWNvbnN0IGdyb3Vwcz1uZXcgTWFwKCk7dGhpcy5ncm91cGVkRW50cmllc18uc2V0KHByb3BlcnR5LGdyb3Vwcyk7SUNTdGF0c0VudHJ5R3JvdXAuZ3JvdXBCeShncm91cHMsdGhpcy5lbnRyaWVzXyxwcm9wZXJ0eSk7cmV0dXJuIEFycmF5LmZyb20oZ3JvdXBzLnZhbHVlcygpKTt9Ci1nZXQgZW50cmllcygpe3JldHVybiB0aGlzLmVudHJpZXNfO30KLWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbnRyaWVzXy5sZW5ndGg7fX0KLXJldHVybntJQ19TVEFUU19QUk9QRVJUSUVTLElDU3RhdHNFbnRyeSxJQ1N0YXRzRW50cnlHcm91cCxJQ1N0YXRzQ29sbGVjdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS52OCcsZnVuY3Rpb24oKXtjb25zdCBQUk9QRVJUSUVTPXRyLmUudjguSUNfU1RBVFNfUFJPUEVSVElFUy5tYXAoeD0+e3JldHVybntsYWJlbDp4LHZhbHVlOnh9O30pO2NvbnN0IElDU3RhdHNFbnRyeT10ci5lLnY4LklDU3RhdHNFbnRyeTtjb25zdCBJQ1N0YXRzRW50cnlHcm91cD10ci5lLnY4LklDU3RhdHNFbnRyeUdyb3VwO2NvbnN0IElDU3RhdHNDb2xsZWN0aW9uPXRyLmUudjguSUNTdGF0c0NvbGxlY3Rpb247UG9seW1lcih7aXM6J3RyLXVpLWUtdjgtaWMtc3RhdHMtdGFibGUnLHJlYWR5KCl7dGhpcy5pY1N0YXRzQ29sbGVjdGlvbl89bmV3IElDU3RhdHNDb2xsZWN0aW9uKCk7dGhpcy5ncm91cEtleV89UFJPUEVSVElFU1swXS52YWx1ZTt0aGlzLnNlbGVjdG9yXz10ci51aS5iLmNyZWF0ZVNlbGVjdG9yKHRoaXMsJ2dyb3VwS2V5JywndjhJQ1N0YXRzR3JvdXBLZXknLHRoaXMuZ3JvdXBLZXlfLFBST1BFUlRJRVMpO1BvbHltZXIuZG9tKHRoaXMuJC5ncm91cE9wdGlvbikuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rvcl8pO30sZ2V0IGdyb3VwS2V5KCl7cmV0dXJuIHRoaXMuZ3JvdXBLZXlfO30sc2V0IGdyb3VwS2V5KGtleSl7dGhpcy5ncm91cEtleV89a2V5O2lmKHRoaXMuaWNTdGF0c0NvbGxlY3Rpb25fLmxlbmd0aD09PTApcmV0dXJuO3RoaXMudXBkYXRlVGFibGVfKHRoaXMuZ3JvdXBLZXlfKTt9LGNvbnN0cnVjdFRhYmxlXyh0YWJsZSxncm91cEtleSl7dGFibGUudGFibGVDb2x1bW5zPVt7dGl0bGU6JycsdmFsdWU6cm93PT57bGV0IGV4cGFuZGVkPWZhbHNlO2NvbnN0IGJ1dHRvbkVsPXRyLnVpLmIuY3JlYXRlQnV0dG9uKCdkZXRhaWxzJyxmdW5jdGlvbigpe2NvbnN0IHByZXZpb3VzU2libGluZz1Qb2x5bWVyLmRvbSh0aGlzKS5wYXJlbnROb2RlLnBhcmVudE5vZGU7Y29uc3QgcGFyZW50Tm9kZT1wcmV2aW91c1NpYmxpbmcucGFyZW50Tm9kZTtpZihleHBhbmRlZCl7Y29uc3QgdHJFbHM9cGFyZW50Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzdWJUYWJsZScpO0FycmF5LmZyb20odHJFbHMpLm1hcCh4PT54LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoeCkpO2V4cGFuZGVkPWZhbHNlO3JldHVybjt9Ci1leHBhbmRlZD10cnVlO2NvbnN0IHN1Ykdyb3Vwcz1yb3cuY3JlYXRlU3ViR3JvdXAoKTtjb25zdCB0cj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpO3RyLmNsYXNzTGlzdC5hZGQoJ3N1YlRhYmxlJyk7dHIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSk7Y29uc3QgdGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTt0ZC5jb2xTcGFuPTM7Zm9yKGNvbnN0IHN1Ykdyb3VwIG9mIHN1Ykdyb3Vwcyl7Y29uc3QgcHJvcGVydHk9c3ViR3JvdXBbMF07Y29uc3QgYWxsPUFycmF5LmZyb20oc3ViR3JvdXBbMV0udmFsdWVzKCkpO2NvbnN0IGdyb3VwPWFsbC5zbGljZSgwLDIwKTtjb25zdCBkaXZFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtjb25zdCBzcGFuRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO2NvbnN0IHN1YlRhYmxlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi10YWJsZScpO3NwYW5FbC5pbm5lclRleHQ9YFRvcCAyMCBvdXQgb2YgJHthbGwubGVuZ3RofWA7c3BhbkVsLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnO3NwYW5FbC5zdHlsZS5mb250U2l6ZT0nMTRweCc7ZGl2RWwuYXBwZW5kQ2hpbGQoc3BhbkVsKTt0aGlzLmNvbnN0cnVjdFRhYmxlXyhzdWJUYWJsZUVsLHByb3BlcnR5KTtzdWJUYWJsZUVsLnRhYmxlUm93cz1ncm91cDtzdWJUYWJsZUVsLnJlYnVpbGQoKTtkaXZFbC5hcHBlbmRDaGlsZChzdWJUYWJsZUVsKTt0ZC5hcHBlbmRDaGlsZChkaXZFbCk7fQotdHIuYXBwZW5kQ2hpbGQodGQpO3BhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRyLHByZXZpb3VzU2libGluZy5uZXh0U2libGluZyk7fSk7cmV0dXJuIGJ1dHRvbkVsO319LHt0aXRsZTonUGVyY2VudGFnZScsdmFsdWUocm93KXtjb25zdCBzcGFuRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO3NwYW5FbC5pbm5lclRleHQ9KHJvdy5wZXJjZW50YWdlKjEwMCkudG9GaXhlZCgzKSsnJSc7cmV0dXJuIHNwYW5FbDt9LGNtcDooYSxiKT0+YS5wZXJjZW50YWdlLWIucGVyY2VudGFnZX0se3RpdGxlOidDb3VudCcsdmFsdWUocm93KXtjb25zdCBzcGFuRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO3NwYW5FbC5pbm5lclRleHQ9cm93Lmxlbmd0aDtyZXR1cm4gc3BhbkVsO30sY21wOihhLGIpPT5hLmxlbmd0aC1iLmxlbmd0aH0se3RpdGxlOmdyb3VwS2V5LHZhbHVlKHJvdyl7Y29uc3Qgc3BhbkVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtzcGFuRWwuaW5uZXJUZXh0PXJvdy5rZXk/cm93LmtleTonJztyZXR1cm4gc3BhbkVsO319XTt0YWJsZS5zb3J0Q29sdW1uSW5kZXg9MTt0YWJsZS5zb3J0RGVzY2VuZGluZz10cnVlO30sdXBkYXRlVGFibGVfKGdyb3VwS2V5KXt0aGlzLmNvbnN0cnVjdFRhYmxlXyh0aGlzLiQudGFibGUsZ3JvdXBLZXkpO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9dGhpcy5pY1N0YXRzQ29sbGVjdGlvbl8uZ3JvdXBCeShncm91cEtleSk7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9LHNldCBzZWxlY3Rpb24oc2xpY2VzKXtmb3IoY29uc3Qgc2xpY2Ugb2Ygc2xpY2VzKXtmb3IoY29uc3QgaWNTdGF0c09iaiBvZiBzbGljZS5pY1N0YXRzKXtjb25zdCBlbnRyeT1uZXcgSUNTdGF0c0VudHJ5KGljU3RhdHNPYmopO3RoaXMuaWNTdGF0c0NvbGxlY3Rpb25fLmFkZChlbnRyeSk7fX0KLXRoaXMuJC50b3RhbC5pbm5lclRleHQ9J1RvdGFsIGl0ZW1zOiAnK3RoaXMuaWNTdGF0c0NvbGxlY3Rpb25fLmxlbmd0aDt0aGlzLnVwZGF0ZVRhYmxlXyh0aGlzLnNlbGVjdG9yXy5zZWxlY3RlZFZhbHVlKTt9fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1lLW11bHRpLXY4LWljLXN0YXRzLXRocmVhZC1zbGljZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuJC50YWJsZS5zZWxlY3Rpb249c2VsZWN0aW9uO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWUtbXVsdGktdjgtaWMtc3RhdHMtdGhyZWFkLXNsaWNlLXN1Yi12aWV3Jyx0ci5lLnY4LlY4SUNTdGF0c1RocmVhZFNsaWNlLHttdWx0aTp0cnVlLHRpdGxlOidWOCBJQyBzdGF0cyBzbGljZXMnfSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnY4JyxmdW5jdGlvbigpe2NsYXNzIFJ1bnRpbWVTdGF0c0VudHJ5e2NvbnN0cnVjdG9yKG5hbWUsY291bnQsdGltZSl7dGhpcy5uYW1lXz1uYW1lO3RoaXMuY291bnRfPWNvdW50O3RoaXMudGltZV89dGltZTt9Ci1nZXQgbmFtZSgpe3JldHVybiB0aGlzLm5hbWVfO30KLWdldCBjb3VudCgpe3JldHVybiB0aGlzLmNvdW50Xzt9Ci1nZXQgdGltZSgpe3JldHVybiB0aGlzLnRpbWVfO30KLWFkZFNhbXBsZShjb3VudCx0aW1lKXt0aGlzLmNvdW50Xys9Y291bnQ7dGhpcy50aW1lXys9dGltZTt9fQotY2xhc3MgUnVudGltZVN0YXRzR3JvdXAgZXh0ZW5kcyBSdW50aW1lU3RhdHNFbnRyeXtjb25zdHJ1Y3RvcihuYW1lLG1hdGNoUmVnZXgpe3N1cGVyKG5hbWUsMCwwKTt0aGlzLnJlZ2V4Xz1tYXRjaFJlZ2V4O3RoaXMuZW50cmllc189bmV3IE1hcCgpO30KLW1hdGNoKG5hbWUpe3JldHVybiB0aGlzLnJlZ2V4XyYmbmFtZS5tYXRjaCh0aGlzLnJlZ2V4Xyk7fQotYWRkKGVudHJ5KXtjb25zdCB2YWx1ZT10aGlzLmVudHJpZXNfLmdldChlbnRyeS5uYW1lKTtpZih2YWx1ZSE9PXVuZGVmaW5lZCl7dmFsdWUuYWRkU2FtcGxlKGVudHJ5LmNvdW50LGVudHJ5LnRpbWUpO31lbHNle3RoaXMuZW50cmllc18uc2V0KGVudHJ5Lm5hbWUsZW50cnkpO30KLXRoaXMuY291bnRfKz1lbnRyeS5jb3VudDt0aGlzLnRpbWVfKz1lbnRyeS50aW1lO30KLWdldCB2YWx1ZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXNfLnZhbHVlcygpKTt9fQotY2xhc3MgUnVudGltZVN0YXRzR3JvdXBDb2xsZWN0aW9ue2NvbnN0cnVjdG9yKCl7dGhpcy5ibGlua19jcHBfZ3JvdXBfPW5ldyBSdW50aW1lU3RhdHNHcm91cCgnQmxpbmsgQysrJywvLipDYWxsYmFjay4qLyk7dGhpcy5hcGlfZ3JvdXBfPW5ldyBSdW50aW1lU3RhdHNHcm91cCgnQVBJJywvLipBUEkuKi8pO3RoaXMuZ3JvdXBzXz1bbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdUb3RhbCcpLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnSUMnLC8uKklDXy4qLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdPcHRpbWl6ZScsL1N0YWNrR3VhcmR8LipPcHRpbWl6ZS4qfC4qRGVvcHRpbWl6ZS4qfFJlY29tcGlsZS4qLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdDb21waWxlLUJhY2tncm91bmQnLC8oLipDb21waWxlQmFja2dyb3VuZC4qKS8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnQ29tcGlsZScsLyheQ29tcGlsZS4qKXwoLipfQ29tcGlsZS4qKS8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnUGFyc2UtQmFja2dyb3VuZCcsLy4qUGFyc2VCYWNrZ3JvdW5kLiovKSxuZXcgUnVudGltZVN0YXRzR3JvdXAoJ1BhcnNlJywvLipQYXJzZS4qLyksdGhpcy5ibGlua19jcHBfZ3JvdXBfLHRoaXMuYXBpX2dyb3VwXyxuZXcgUnVudGltZVN0YXRzR3JvdXAoJ0dDLUJhY2tncm91bmQtTWFya2luZycsLy4qR0MuTUMuQkFDS0dST1VORC4qTUFSS0lORy4qLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdHQy1CYWNrZ3JvdW5kLVN3ZWVwaW5nJywvLipHQy5NQy5CQUNLR1JPVU5ELipTV0VFUElORy4qLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdHQy1CYWNrZ3JvdW5kLVNjYXZlbmdlcicsLy4qR0MuU0NBVkVOR0VSLkJBQ0tHUk9VTkQuKi8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnR0MtQmFja2dyb3VuZC1NaW5vck1DJywvLipHQy5NSU5PUl9NQy5CQUNLR1JPVU5ELiovKSxuZXcgUnVudGltZVN0YXRzR3JvdXAoJ0dDLUJhY2tncm91bmQtTWFqb3JNQycsLy4qR0MuTUMuQkFDS0dST1VORC4qLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdHQy1CYWNrZ3JvdW5kLU90aGVyJywvLipHQy4qQkFDS0dST1VORC4qLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdHQycsL0dDfEFsbG9jYXRlSW5UYXJnZXRTcGFjZS8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnSmF2YVNjcmlwdCcsL0pTX0V4ZWN1dGlvbi8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnVjggQysrJywvLiovKV07dGhpcy5ibGlua19ncm91cF9jb2xsZWN0aW9uXz1udWxsO30KLWFkZFNsaWNlcyhzbGljZXMpe2NvbnN0IGJsaW5rRW50cmllcz1bXTtmb3IoY29uc3Qgc2xpY2Ugb2Ygc2xpY2VzKXtpZighKHNsaWNlIGluc3RhbmNlb2YgdHIuZS52OC5WOFRocmVhZFNsaWNlKSlyZXR1cm47bGV0IHJ1bnRpbWVDYWxsU3RhdHM7dHJ5e3J1bnRpbWVDYWxsU3RhdHM9SlNPTi5wYXJzZShzbGljZS5ydW50aW1lQ2FsbFN0YXRzKTt9Y2F0Y2goZSl7cnVudGltZUNhbGxTdGF0cz1zbGljZS5ydW50aW1lQ2FsbFN0YXRzO30KLWlmKHJ1bnRpbWVDYWxsU3RhdHM9PT11bmRlZmluZWQpY29udGludWU7Zm9yKGNvbnN0W25hbWUsc3RhdF1vZiBPYmplY3QuZW50cmllcyhydW50aW1lQ2FsbFN0YXRzKSl7aWYobmFtZS5tYXRjaCgvQmxpbmtfLiovKSl7aWYobmFtZT09PSdCbGlua19WOCcpY29udGludWU7Y29uc3QgZW50cnk9bmV3IFJ1bnRpbWVTdGF0c0VudHJ5KG5hbWUsc3RhdFswXSxzdGF0WzFdKTtibGlua0VudHJpZXMucHVzaChlbnRyeSk7Y29udGludWU7fQotZm9yKGxldCBpPTE7aTx0aGlzLmdyb3Vwc18ubGVuZ3RoOysraSl7aWYodGhpcy5ncm91cHNfW2ldLm1hdGNoKG5hbWUpKXtpZihzdGF0Lmxlbmd0aCE9PTIpYnJlYWs7Y29uc3QgZW50cnk9bmV3IFJ1bnRpbWVTdGF0c0VudHJ5KG5hbWUsc3RhdFswXSxzdGF0WzFdKTt0aGlzLmdyb3Vwc19bMF0uYWRkU2FtcGxlKHN0YXRbMF0sc3RhdFsxXSk7dGhpcy5ncm91cHNfW2ldLmFkZChlbnRyeSk7YnJlYWs7fX19fQotdGhpcy5ibGlua19ncm91cF9jb2xsZWN0aW9uXz1uZXcgQmxpbmtSdW50aW1lU3RhdHNHcm91cENvbGxlY3Rpb24oYmxpbmtFbnRyaWVzKTt9Ci1nZXQgdG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuZ3JvdXBzX1swXS50aW1lO30KLWdldCB0b3RhbENvdW50KCl7cmV0dXJuIHRoaXMuZ3JvdXBzX1swXS5jb3VudDt9Ci1nZXQgcnVudGltZUdyb3Vwcygpe3JldHVybiB0aGlzLmdyb3Vwc187fQotZ2V0IGJsaW5rUkNTR3JvdXBDb2xsZWN0aW9uKCl7cmV0dXJuIHRoaXMuYmxpbmtfZ3JvdXBfY29sbGVjdGlvbl87fQotZ2V0IGJsaW5rQ3BwVG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuYmxpbmtfY3BwX2dyb3VwXy50aW1lK3RoaXMuYXBpX2dyb3VwXy50aW1lO319Ci1jbGFzcyBCbGlua1J1bnRpbWVTdGF0c0dyb3VwQ29sbGVjdGlvbntjb25zdHJ1Y3RvcihlbnRyaWVzKXt0aGlzLmdyb3Vwc189W25ldyBSdW50aW1lU3RhdHNHcm91cCgnQmxpbmtfQmluZGluZ3MnLC9eQmxpbmtfQmluZGluZ3NfKC4qKS8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnQmxpbmtfR0MnLC9eQmxpbmtfR0NfKC4qKS8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnQmxpbmtfTGF5b3V0JywvXkJsaW5rX0xheW91dF8oLiopLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdCbGlua19QYXJzaW5nJywvXkJsaW5rX1BhcnNpbmdfKC4qKS8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnQmxpbmtfU3R5bGUnLC9eQmxpbmtfU3R5bGVfKC4qKS8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnQmxpbmtfQ2FsbGJhY2tzJywvXkJsaW5rXyguKikvKV07dGhpcy50b3RhbF9ncm91cF89bmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdCbGlua19Ub3RhbCcsLy4qLyk7Zm9yKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpe2Zvcihjb25zdCBncm91cCBvZiB0aGlzLmdyb3Vwc18pe2lmKGdyb3VwLm1hdGNoKGVudHJ5Lm5hbWUpKXtjb25zdCBuZXdFbnRyeT1uZXcgUnVudGltZVN0YXRzRW50cnkoJ0JsaW5rXycrZ3JvdXAubWF0Y2goZW50cnkubmFtZSlbMV0sZW50cnkuY291bnQsZW50cnkudGltZSk7Z3JvdXAuYWRkKG5ld0VudHJ5KTt0aGlzLnRvdGFsX2dyb3VwXy5hZGRTYW1wbGUoZW50cnkuY291bnQsZW50cnkudGltZSk7YnJlYWs7fX19fQotZ2V0IHJ1bnRpbWVHcm91cHMoKXtyZXR1cm4gdGhpcy5ncm91cHNfLmNvbmNhdCh0aGlzLnRvdGFsX2dyb3VwXyk7fQotZ2V0IHZhbHVlcygpe3JldHVybiB0aGlzLmdyb3Vwc18ucmVkdWNlKCh2YWx1ZXMsZ3JvdXApPT52YWx1ZXMuY29uY2F0KGdyb3VwLnZhbHVlcyksW10pO30KLWdldCB0b3RhbFRpbWUoKXtyZXR1cm4gdGhpcy50b3RhbF9ncm91cF8udGltZTt9Ci1nZXQgdG90YWxDb3VudCgpe3JldHVybiB0aGlzLnRvdGFsX2dyb3VwXy5jb3VudDt9fQotcmV0dXJue0JsaW5rUnVudGltZVN0YXRzR3JvdXBDb2xsZWN0aW9uLFJ1bnRpbWVTdGF0c0VudHJ5LFJ1bnRpbWVTdGF0c0dyb3VwLFJ1bnRpbWVTdGF0c0dyb3VwQ29sbGVjdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS52OCcsZnVuY3Rpb24oKXtjb25zdCBjb2RlU2VhcmNoVVJMXz0naHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvc2VhcmNoLz9zcT1wYWNrYWdlOmNocm9taXVtJnR5cGU9Y3MmcT0nO2Z1bmN0aW9uIHJlbW92ZUJsaW5rUHJlZml4XyhuYW1lKXtpZihuYW1lLnN0YXJ0c1dpdGgoJ0JsaW5rXycpKW5hbWU9bmFtZS5zdWJzdHJpbmcoNik7cmV0dXJuIG5hbWU7fQotZnVuY3Rpb24gaGFuZGxlQ29kZVNlYXJjaEZvclY4XyhldmVudCl7aWYoZXZlbnQudGFyZ2V0LnBhcmVudE5vZGU9PT11bmRlZmluZWQpcmV0dXJuO2xldCBuYW1lPWV2ZW50LnRhcmdldC5wYXJlbnROb2RlLmVudHJ5TmFtZTtpZihuYW1lLnN0YXJ0c1dpdGgoJ0FQSV8nKSluYW1lPW5hbWUuc3Vic3RyaW5nKDQpO2NvbnN0IHVybD1jb2RlU2VhcmNoVVJMXytlbmNvZGVVUklDb21wb25lbnQobmFtZSkrJytmaWxlOnNyYy92OC9zcmMnO3dpbmRvdy5vcGVuKHVybCwnX2JsYW5rJyk7fQotZnVuY3Rpb24gaGFuZGxlQ29kZVNlYXJjaEZvckJsaW5rXyhldmVudCl7aWYoZXZlbnQudGFyZ2V0LnBhcmVudE5vZGU9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IG5hbWU9ZXZlbnQudGFyZ2V0LnBhcmVudE5vZGUuZW50cnlOYW1lO2NvbnN0IHVybD1jb2RlU2VhcmNoVVJMXysKLWVuY29kZVVSSUNvbXBvbmVudCgnUnVudGltZUNhbGxTdGF0czo6Q291bnRlcklkOjprJytuYW1lKSsnK2ZpbGU6c3JjL3RoaXJkX3BhcnR5L1dlYktpdC98c3JjL291dC9EZWJ1Zy8nO3dpbmRvdy5vcGVuKHVybCwnX2JsYW5rJyk7fQotZnVuY3Rpb24gY3JlYXRlQ29kZVNlYXJjaEVsXyhoYW5kbGVDb2RlU2VhcmNoKXtjb25zdCBjb2RlU2VhcmNoRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO2NvZGVTZWFyY2hFbC5pbm5lclRleHQ9Jz8nO2NvZGVTZWFyY2hFbC5zdHlsZS5mbG9hdD0ncmlnaHQnO2NvZGVTZWFyY2hFbC5zdHlsZS5ib3JkZXJSYWRpdXM9JzVweCc7Y29kZVNlYXJjaEVsLnN0eWxlLmJhY2tncm91bmRDb2xvcj0nI0VFRSc7Y29kZVNlYXJjaEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxoYW5kbGVDb2RlU2VhcmNoLmJpbmQodGhpcykpO3JldHVybiBjb2RlU2VhcmNoRWw7fQotY29uc3QgdGltZUNvbHVtbl89e3RpdGxlOidUaW1lJyx2YWx1ZShyb3cpe2NvbnN0IHR5cGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7dHlwZUVsLmlubmVyVGV4dD0ocm93LnRpbWUvMTAwMC4wKS50b0ZpeGVkKDMpKycgbXMnO3JldHVybiB0eXBlRWw7fSx3aWR0aDonMTAwcHgnLGNtcChhLGIpe3JldHVybiBhLnRpbWUtYi50aW1lO319O2NvbnN0IGNvdW50Q29sdW1uXz17dGl0bGU6J0NvdW50Jyx2YWx1ZShyb3cpe2NvbnN0IHR5cGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7dHlwZUVsLmlubmVyVGV4dD1yb3cuY291bnQ7cmV0dXJuIHR5cGVFbDt9LHdpZHRoOicxMDBweCcsY21wKGEsYil7cmV0dXJuIGEuY291bnQtYi5jb3VudDt9fTtmdW5jdGlvbiBwZXJjZW50Q29sdW1uXyh0aXRsZSx0b3RhbFRpbWUpe3JldHVybnt0aXRsZSx2YWx1ZShyb3cpe2NvbnN0IHR5cGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7dHlwZUVsLmlubmVyVGV4dD0ocm93LnRpbWUvdG90YWxUaW1lKjEwMCkudG9GaXhlZCgzKSsnJSc7cmV0dXJuIHR5cGVFbDt9LHdpZHRoOicxMDBweCcsY21wKGEsYil7cmV0dXJuIGEudGltZS1iLnRpbWU7fX07fQotZnVuY3Rpb24gbmFtZUNvbHVtbl8oaGFuZGxlQ29kZVNlYXJjaCxtb2RpZnlOYW1lKXtyZXR1cm57dGl0bGU6J05hbWUnLHZhbHVlKHJvdyl7Y29uc3QgdHlwZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtsZXQgbmFtZT1yb3cubmFtZTtpZihtb2RpZnlOYW1lKW5hbWU9bW9kaWZ5TmFtZShuYW1lKTt0eXBlRWwuaW5uZXJUZXh0PW5hbWU7aWYoIShyb3cgaW5zdGFuY2VvZiB0ci5lLnY4LlJ1bnRpbWVTdGF0c0dyb3VwKSl7dHlwZUVsLnRpdGxlPSdjbGljayA/IGZvciBjb2RlIHNlYXJjaCc7dHlwZUVsLmVudHJ5TmFtZT1uYW1lO2NvbnN0IGNvZGVTZWFyY2hFbD1jcmVhdGVDb2RlU2VhcmNoRWxfKGhhbmRsZUNvZGVTZWFyY2gpO3R5cGVFbC5hcHBlbmRDaGlsZChjb2RlU2VhcmNoRWwpO30KLXJldHVybiB0eXBlRWw7fSx3aWR0aDonMjAwcHgnLHNob3dFeHBhbmRCdXR0b25zOnRydWV9O30KLWZ1bmN0aW9uIGluaXRpYWxpemVDb21tb25PcHRpb25zXyh0YWJsZSl7dGFibGUuc2VsZWN0aW9uTW9kZT10ci51aS5iLlRhYmxlRm9ybWF0LlNlbGVjdGlvbk1vZGUuUk9XO3RhYmxlLnNvcnRDb2x1bW5JbmRleD0xO3RhYmxlLnNvcnREZXNjZW5kaW5nPXRydWU7dGFibGUuc3ViUm93c1Byb3BlcnR5TmFtZT0ndmFsdWVzJzt9Ci1Qb2x5bWVyKHtpczondHItdWktZS12OC1ydW50aW1lLWNhbGwtc3RhdHMtdGFibGUnLHJlYWR5KCl7dGhpcy50YWJsZV89dGhpcy4kLnRhYmxlO3RoaXMuYmxpbmtfcmNzX3RhYmxlXz10aGlzLiQuYmxpbmtfcmNzX3RhYmxlO3RoaXMudG90YWxUaW1lXz0wO30sY29uc3RydWN0VjhSQ1NUYWJsZV8odG90YWxUaW1lKXt0aGlzLnRhYmxlXy50YWJsZUNvbHVtbnM9W25hbWVDb2x1bW5fKGhhbmRsZUNvZGVTZWFyY2hGb3JWOF8pLHRpbWVDb2x1bW5fLGNvdW50Q29sdW1uXyxwZXJjZW50Q29sdW1uXygnUGVyY2VudCcsdG90YWxUaW1lKV07aW5pdGlhbGl6ZUNvbW1vbk9wdGlvbnNfKHRoaXMudGFibGVfKTt9LGNvbnN0cnVjdEJsaW5rUkNTVGFibGVfKGJsaW5rQ3BwVG90YWxUaW1lKXt0aGlzLmJsaW5rX3Jjc190YWJsZV8udGFibGVDb2x1bW5zPVtuYW1lQ29sdW1uXyhoYW5kbGVDb2RlU2VhcmNoRm9yQmxpbmtfLHJlbW92ZUJsaW5rUHJlZml4XyksdGltZUNvbHVtbl8sY291bnRDb2x1bW5fLHBlcmNlbnRDb2x1bW5fKCdQZXJjZW50IChvZiBcJ0JsaW5rIEMrK1wnICsgXCdBUElcJyknLGJsaW5rQ3BwVG90YWxUaW1lKV07aW5pdGlhbGl6ZUNvbW1vbk9wdGlvbnNfKHRoaXMuYmxpbmtfcmNzX3RhYmxlXyk7fSxzZXQgc2xpY2VzKHNsaWNlcyl7Y29uc3QgcnVudGltZUdyb3VwQ29sbGVjdGlvbj1uZXcgdHIuZS52OC5SdW50aW1lU3RhdHNHcm91cENvbGxlY3Rpb24oKTtydW50aW1lR3JvdXBDb2xsZWN0aW9uLmFkZFNsaWNlcyhzbGljZXMpO2lmKHJ1bnRpbWVHcm91cENvbGxlY3Rpb24udG90YWxUaW1lPjApe3RoaXMuJC52OF9yY3NfaGVhZGluZy50ZXh0Q29udGVudD0nVjggUnVudGltZSBDYWxsIFN0YXRzJzt0aGlzLmNvbnN0cnVjdFY4UkNTVGFibGVfKHJ1bnRpbWVHcm91cENvbGxlY3Rpb24udG90YWxUaW1lKTt0aGlzLnRhYmxlXy50YWJsZVJvd3M9cnVudGltZUdyb3VwQ29sbGVjdGlvbi5ydW50aW1lR3JvdXBzO3RoaXMudGFibGVfLnJlYnVpbGQoKTt9Ci1jb25zdCBibGlua1JDU0dyb3VwQ29sbGVjdGlvbj1ydW50aW1lR3JvdXBDb2xsZWN0aW9uLmJsaW5rUkNTR3JvdXBDb2xsZWN0aW9uO2lmKHJ1bnRpbWVHcm91cENvbGxlY3Rpb24uYmxpbmtDcHBUb3RhbFRpbWU+MCYmYmxpbmtSQ1NHcm91cENvbGxlY3Rpb24udG90YWxUaW1lPjApe3RoaXMuJC5ibGlua19yY3NfaGVhZGluZy50ZXh0Q29udGVudD0nQmxpbmsgUnVudGltZSBDYWxsIFN0YXRzJzt0aGlzLmNvbnN0cnVjdEJsaW5rUkNTVGFibGVfKHJ1bnRpbWVHcm91cENvbGxlY3Rpb24uYmxpbmtDcHBUb3RhbFRpbWUpO3RoaXMuYmxpbmtfcmNzX3RhYmxlXy50YWJsZVJvd3M9YmxpbmtSQ1NHcm91cENvbGxlY3Rpb24ucnVudGltZUdyb3Vwczt0aGlzLmJsaW5rX3Jjc190YWJsZV8ucmVidWlsZCgpO319fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1lLW11bHRpLXY4LXRocmVhZC1zbGljZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuJC5ydW50aW1lQ2FsbFN0YXRzLnNsaWNlcz1zZWxlY3Rpb247dGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uPXNlbGVjdGlvbjt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1lLW11bHRpLXY4LXRocmVhZC1zbGljZS1zdWItdmlldycsdHIuZS52OC5WOFRocmVhZFNsaWNlLHttdWx0aTp0cnVlLHRpdGxlOidWOCBzbGljZXMnfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1lLXNpbmdsZS12OC1nYy1zdGF0cy10aHJlYWQtc2xpY2Utc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuJC5jb250ZW50LnNlbGVjdGlvbjt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLiQuY29udGVudC5zZWxlY3Rpb249c2VsZWN0aW9uO3RoaXMuJC5nY09iamVjdHNTdGF0cy5zZWxlY3Rpb249c2VsZWN0aW9uO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWUtc2luZ2xlLXY4LWdjLXN0YXRzLXRocmVhZC1zbGljZS1zdWItdmlldycsdHIuZS52OC5WOEdDU3RhdHNUaHJlYWRTbGljZSx7bXVsdGk6ZmFsc2UsdGl0bGU6J1Y4IEdDIHN0YXRzIHNsaWNlJ30pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktZS1zaW5nbGUtdjgtaWMtc3RhdHMtdGhyZWFkLXNsaWNlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLiQuY29udGVudC5zZWxlY3Rpb247fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhpcy4kLnRhYmxlLnNlbGVjdGlvbj1zZWxlY3Rpb247fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktZS1zaW5nbGUtdjgtaWMtc3RhdHMtdGhyZWFkLXNsaWNlLXN1Yi12aWV3Jyx0ci5lLnY4LlY4SUNTdGF0c1RocmVhZFNsaWNlLHttdWx0aTpmYWxzZSx0aXRsZTonVjggSUMgc3RhdHMgc2xpY2UnfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1lLXNpbmdsZS12OC10aHJlYWQtc2xpY2Utc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuJC5jb250ZW50LnNlbGVjdGlvbjt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLiQucnVudGltZUNhbGxTdGF0cy5zbGljZXM9c2VsZWN0aW9uO3RoaXMuJC5jb250ZW50LnNlbGVjdGlvbj1zZWxlY3Rpb247fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktZS1zaW5nbGUtdjgtdGhyZWFkLXNsaWNlLXN1Yi12aWV3Jyx0ci5lLnY4LlY4VGhyZWFkU2xpY2Use211bHRpOmZhbHNlLHRpdGxlOidWOCBzbGljZSd9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmMnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gU2NyaXB0aW5nT2JqZWN0KCl7fQotU2NyaXB0aW5nT2JqZWN0LnByb3RvdHlwZT17b25Nb2RlbENoYW5nZWQobW9kZWwpe319O3JldHVybntTY3JpcHRpbmdPYmplY3QsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmMnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gU2NyaXB0aW5nQ29udHJvbGxlcihicnVzaGluZ1N0YXRlQ29udHJvbGxlcil7dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl89YnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXI7dGhpcy5zY3JpcHRPYmplY3ROYW1lc189W107dGhpcy5zY3JpcHRPYmplY3RWYWx1ZXNfPVtdO3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcignbW9kZWwtY2hhbmdlZCcsdGhpcy5vbk1vZGVsQ2hhbmdlZF8uYmluZCh0aGlzKSk7Y29uc3QgdHlwZUluZm9zPVNjcmlwdGluZ09iamVjdFJlZ2lzdHJ5LmdldEFsbFJlZ2lzdGVyZWRUeXBlSW5mb3MoKTt0eXBlSW5mb3MuZm9yRWFjaChmdW5jdGlvbih0eXBlSW5mbyl7dGhpcy5hZGRTY3JpcHRPYmplY3QodHlwZUluZm8ubWV0YWRhdGEubmFtZSx0eXBlSW5mby5jb25zdHJ1Y3Rvcik7Z2xvYmFsW3R5cGVJbmZvLm1ldGFkYXRhLm5hbWVdPXR5cGVJbmZvLmNvbnN0cnVjdG9yO30sdGhpcyk7fQotZnVuY3Rpb24gU2NyaXB0aW5nT2JqZWN0UmVnaXN0cnkoKXt9Ci1jb25zdCBvcHRpb25zPW5ldyB0ci5iLkV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucyh0ci5iLkJBU0lDX1JFR0lTVFJZX01PREUpO3RyLmIuZGVjb3JhdGVFeHRlbnNpb25SZWdpc3RyeShTY3JpcHRpbmdPYmplY3RSZWdpc3RyeSxvcHRpb25zKTtTY3JpcHRpbmdDb250cm9sbGVyLnByb3RvdHlwZT17Z2V0IGJydXNoaW5nU3RhdGVDb250cm9sbGVyKCl7cmV0dXJuIHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfO30sb25Nb2RlbENoYW5nZWRfKCl7dGhpcy5zY3JpcHRPYmplY3RWYWx1ZXNfLmZvckVhY2goZnVuY3Rpb24odil7aWYodi5vbk1vZGVsQ2hhbmdlZCl7di5vbk1vZGVsQ2hhbmdlZCh0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyLm1vZGVsKTt9fSx0aGlzKTt9LGFkZFNjcmlwdE9iamVjdChuYW1lLHZhbHVlKXt0aGlzLnNjcmlwdE9iamVjdE5hbWVzXy5wdXNoKG5hbWUpO3RoaXMuc2NyaXB0T2JqZWN0VmFsdWVzXy5wdXNoKHZhbHVlKTt9LGV4ZWN1dGVDb21tYW5kKGNvbW1hbmQpe2NvbnN0IGY9bmV3IEZ1bmN0aW9uKHRoaXMuc2NyaXB0T2JqZWN0TmFtZXNfLCdyZXR1cm4gZXZhbCgnK2NvbW1hbmQrJyknKTtyZXR1cm4gZi5hcHBseShudWxsLHRoaXMuc2NyaXB0T2JqZWN0VmFsdWVzXyk7fX07cmV0dXJue1NjcmlwdGluZ0NvbnRyb2xsZXIsU2NyaXB0aW5nT2JqZWN0UmVnaXN0cnksfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gTWV0cmljUmVnaXN0cnkoKXt9Ci1jb25zdCBvcHRpb25zPW5ldyB0ci5iLkV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucyh0ci5iLkJBU0lDX1JFR0lTVFJZX01PREUpO29wdGlvbnMuZGVmYXVsdE1ldGFkYXRhPXt9O3RyLmIuZGVjb3JhdGVFeHRlbnNpb25SZWdpc3RyeShNZXRyaWNSZWdpc3RyeSxvcHRpb25zKTtmdW5jdGlvbiBjYW1lbENhc2VUb0hhY2tlclN0cmluZyhjYW1lbENhc2Upe2xldCBoYWNrZXJTdHJpbmc9Jyc7Zm9yKGNvbnN0IGMgb2YgY2FtZWxDYXNlKXtjb25zdCBsb3dlcmVkPWMudG9Mb2NhbGVMb3dlckNhc2UoKTtpZihsb3dlcmVkPT09Yyl7aGFja2VyU3RyaW5nKz1jO31lbHNle2hhY2tlclN0cmluZys9J18nK2xvd2VyZWQ7fX0KLXJldHVybiBoYWNrZXJTdHJpbmc7fQotZnVuY3Rpb24gZ2V0Q2FsbFN0YWNrKCl7dHJ5e3Rocm93IG5ldyBFcnJvcigpO31jYXRjaChlcnJvcil7cmV0dXJuIGVycm9yLnN0YWNrO319Ci1mdW5jdGlvbiBnZXRQYXRoc0Zyb21TdGFjayhzdGFjayl7cmV0dXJuIHN0YWNrLnNwbGl0KCdcbicpLm1hcChsaW5lPT57bGluZT1saW5lLnJlcGxhY2UoL14gKi8sJycpLnNwbGl0KCc6Jyk7aWYobGluZS5sZW5ndGg8NClyZXR1cm4nJztyZXR1cm4gbGluZVtsaW5lLmxlbmd0aC0zXS5zcGxpdCgnLycpO30pLmZpbHRlcih4PT54KTt9Ci1NZXRyaWNSZWdpc3RyeS5jaGVja0ZpbGVuYW1lPWZ1bmN0aW9uKG1ldHJpY05hbWUsb3B0X21ldHJpY1BhdGhGb3JUZXN0KXtpZihtZXRyaWNOYW1lPT09J3J1bnRpbWVTdGF0c1RvdGFsTWV0cmljJ3x8bWV0cmljTmFtZT09PSd2OEFuZE1lbW9yeU1ldHJpY3MnKXtyZXR1cm47fQotY29uc3QgZXhwZWN0ZWRGaWxlbmFtZT1jYW1lbENhc2VUb0hhY2tlclN0cmluZyhtZXRyaWNOYW1lKSsnLmh0bWwnO2NvbnN0IHN0YWNrPWdldENhbGxTdGFjaygpO2xldCBtZXRyaWNQYXRoPW9wdF9tZXRyaWNQYXRoRm9yVGVzdDtpZihtZXRyaWNQYXRoPT09dW5kZWZpbmVkKXtjb25zdCBwYXRocz1nZXRQYXRoc0Zyb21TdGFjayhzdGFjayk7Y29uc3QgTUVUUklDX1NUQUNLX0lOREVYPTU7aWYocGF0aHMubGVuZ3RoPD1NRVRSSUNfU1RBQ0tfSU5ERVh8fHBhdGhzW01FVFJJQ19TVEFDS19JTkRFWF0uam9pbignLycpPT09cGF0aHNbMF0uam9pbignLycpKXtyZXR1cm47fQotbWV0cmljUGF0aD1wYXRoc1tNRVRSSUNfU1RBQ0tfSU5ERVhdLnNsaWNlKHBhdGhzW01FVFJJQ19TVEFDS19JTkRFWF0ubGVuZ3RoLTIpO30KLWlmKCFtZXRyaWNQYXRoWzFdLmVuZHNXaXRoKCdfdGVzdC5odG1sJykmJm1ldHJpY1BhdGhbMV0hPT1leHBlY3RlZEZpbGVuYW1lJiZtZXRyaWNQYXRoLmpvaW4oJ18nKSE9PWV4cGVjdGVkRmlsZW5hbWUpe3Rocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgJyttZXRyaWNOYW1lKycgdG8gYmUgaW4gYSBmaWxlIG5hbWVkICcrCi1leHBlY3RlZEZpbGVuYW1lKyc7IGFjdHVhbDogJyttZXRyaWNQYXRoLmpvaW4oJy8nKSsnOyBzdGFjazogJytzdGFjay5yZXBsYWNlKC9cbi9nLCdcbiAgJykpO319O01ldHJpY1JlZ2lzdHJ5LmFkZEV2ZW50TGlzdGVuZXIoJ3dpbGwtcmVnaXN0ZXInLGZ1bmN0aW9uKGUpe2NvbnN0IG1ldHJpYz1lLnR5cGVJbmZvLmNvbnN0cnVjdG9yO2lmKCEobWV0cmljIGluc3RhbmNlb2YgRnVuY3Rpb24pKXt0aHJvdyBuZXcgRXJyb3IoJ01ldHJpY3MgbXVzdCBiZSBmdW5jdGlvbnMuJyk7fQotaWYoIW1ldHJpYy5uYW1lLmVuZHNXaXRoKCdNZXRyaWMnKSYmIW1ldHJpYy5uYW1lLmVuZHNXaXRoKCdNZXRyaWNzJykpe3Rocm93IG5ldyBFcnJvcignTWV0cmljIG5hbWVzIG11c3QgZW5kIHdpdGggIk1ldHJpYyIgb3IgIk1ldHJpY3MiLicpO30KLWlmKG1ldHJpYy5sZW5ndGg8Mil7dGhyb3cgbmV3IEVycm9yKCdNZXRyaWNzIHRha2UgYSBIaXN0b2dyYW1TZXQgYW5kIGEgTW9kZWwgYW5kICcrJ29wdGlvbmFsbHkgYW4gb3B0aW9ucyBkaWN0aW9uYXJ5LicpO30KLU1ldHJpY1JlZ2lzdHJ5LmNoZWNrRmlsZW5hbWUobWV0cmljLm5hbWUpO30pO3JldHVybntNZXRyaWNSZWdpc3RyeSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcycsZnVuY3Rpb24oKXtmdW5jdGlvbiBhY2Nlc3NpYmlsaXR5TWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IGJyb3dzZXJBY2Nlc3NpYmlsaXR5RXZlbnRzSGlzdD1uZXcgdHIudi5IaXN0b2dyYW0oJ2Jyb3dzZXJfYWNjZXNzaWJpbGl0eV9ldmVudHMnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIpO2Jyb3dzZXJBY2Nlc3NpYmlsaXR5RXZlbnRzSGlzdC5kZXNjcmlwdGlvbj0nQnJvd3NlciBhY2Nlc3NpYmlsaXR5IGV2ZW50cyB0aW1lJztjb25zdCByZW5kZXJBY2Nlc3NpYmlsaXR5RXZlbnRzSGlzdD1uZXcgdHIudi5IaXN0b2dyYW0oJ3JlbmRlcl9hY2Nlc3NpYmlsaXR5X2V2ZW50cycsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcik7cmVuZGVyQWNjZXNzaWJpbGl0eUV2ZW50c0hpc3QuZGVzY3JpcHRpb249J1JlbmRlciBhY2Nlc3NpYmlsaXR5IGV2ZW50cyB0aW1lJztjb25zdCByZW5kZXJBY2Nlc3NpYmlsaXR5TG9jYXRpb25zSGlzdD1uZXcgdHIudi5IaXN0b2dyYW0oJ3JlbmRlcl9hY2Nlc3NpYmlsaXR5X2xvY2F0aW9ucycsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcik7cmVuZGVyQWNjZXNzaWJpbGl0eUxvY2F0aW9uc0hpc3QuZGVzY3JpcHRpb249J1JlbmRlciBhY2Nlc3NpYmlsaXR5IGxvY2F0aW9ucyB0aW1lJztjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYoY2hyb21lSGVscGVyPT09dW5kZWZpbmVkKXJldHVybjtmb3IoY29uc3QgcmVuZGVyZXJIZWxwZXIgb2YgT2JqZWN0LnZhbHVlcyhjaHJvbWVIZWxwZXIucmVuZGVyZXJIZWxwZXJzKSl7Y29uc3QgbWFpblRocmVhZD1yZW5kZXJlckhlbHBlci5tYWluVGhyZWFkO2lmKG1haW5UaHJlYWQ9PT11bmRlZmluZWQpY29udGludWU7Zm9yKGNvbnN0IHNsaWNlIG9mIG1haW5UaHJlYWQuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZighKHNsaWNlIGluc3RhbmNlb2YgdHIubW9kZWwuVGhyZWFkU2xpY2UpKWNvbnRpbnVlO2lmKHNsaWNlLnRpdGxlPT09J1JlbmRlckFjY2Vzc2liaWxpdHlJbXBsOjpTZW5kUGVuZGluZ0FjY2Vzc2liaWxpdHlFdmVudHMnKXtyZW5kZXJBY2Nlc3NpYmlsaXR5RXZlbnRzSGlzdC5hZGRTYW1wbGUoc2xpY2UuZHVyYXRpb24se2V2ZW50Om5ldyB0ci52LmQuUmVsYXRlZEV2ZW50U2V0KHNsaWNlKX0pO30KLWlmKHNsaWNlLnRpdGxlPT09J1JlbmRlckFjY2Vzc2liaWxpdHlJbXBsOjpTZW5kTG9jYXRpb25DaGFuZ2VzJyl7cmVuZGVyQWNjZXNzaWJpbGl0eUxvY2F0aW9uc0hpc3QuYWRkU2FtcGxlKHNsaWNlLmR1cmF0aW9uLHtldmVudDpuZXcgdHIudi5kLlJlbGF0ZWRFdmVudFNldChzbGljZSl9KTt9fX0KLWZvcihjb25zdCBicm93c2VySGVscGVyIG9mIE9iamVjdC52YWx1ZXMoY2hyb21lSGVscGVyLmJyb3dzZXJIZWxwZXJzKSl7Y29uc3QgbWFpblRocmVhZD1icm93c2VySGVscGVyLm1haW5UaHJlYWQ7aWYobWFpblRocmVhZD09PXVuZGVmaW5lZCljb250aW51ZTtmb3IoY29uc3Qgc2xpY2Ugb2YgbWFpblRocmVhZC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKHNsaWNlLnRpdGxlPT09J0Jyb3dzZXJBY2Nlc3NpYmlsaXR5TWFuYWdlcjo6T25BY2Nlc3NpYmlsaXR5RXZlbnRzJyl7YnJvd3NlckFjY2Vzc2liaWxpdHlFdmVudHNIaXN0LmFkZFNhbXBsZShzbGljZS5kdXJhdGlvbix7ZXZlbnQ6bmV3IHRyLnYuZC5SZWxhdGVkRXZlbnRTZXQoc2xpY2UpfSk7fX19Ci1oaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShicm93c2VyQWNjZXNzaWJpbGl0eUV2ZW50c0hpc3QpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHJlbmRlckFjY2Vzc2liaWxpdHlFdmVudHNIaXN0KTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShyZW5kZXJBY2Nlc3NpYmlsaXR5TG9jYXRpb25zSGlzdCk7fQotdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihhY2Nlc3NpYmlsaXR5TWV0cmljKTtyZXR1cm57YWNjZXNzaWJpbGl0eU1ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBhbmRyb2lkU3RhcnR1cE1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBtZXNzYWdlTG9vcFN0YXJ0SGlzdG9ncmFtPWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdtZXNzYWdlbG9vcF9zdGFydF90aW1lJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdKTtjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYoIWNocm9tZUhlbHBlcilyZXR1cm47Zm9yKGNvbnN0IGhlbHBlciBvZiBjaHJvbWVIZWxwZXIuYnJvd3NlckhlbHBlcnMpe2Zvcihjb25zdCBldiBvZiBoZWxwZXIubWFpblRocmVhZC5hc3luY1NsaWNlR3JvdXAuY2hpbGRFdmVudHMoKSl7aWYoZXYudGl0bGU9PT0nU3RhcnR1cC5Ccm93c2VyTWVzc2FnZUxvb3BTdGFydFRpbWVGcm9tTWFpbkVudHJ5Mycpe21lc3NhZ2VMb29wU3RhcnRIaXN0b2dyYW0uYWRkU2FtcGxlKGV2LmR1cmF0aW9uLHtldmVudHM6bmV3IHRyLnYuZC5SZWxhdGVkRXZlbnRTZXQoW2V2XSl9KTt9fX19Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKGFuZHJvaWRTdGFydHVwTWV0cmljKTtyZXR1cm57YW5kcm9pZFN0YXJ0dXBNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3Muc2gnLGZ1bmN0aW9uKCl7Y29uc3QgTUFYX0lOUFVUX0VWRU5UX1RPX1NUQVJUVVBfREVMQVlfSU5fTVM9MjAwMDtjb25zdCBNSU5fRFJBV19ERUxBWV9JTl9NUz04MDtjb25zdCBNQVhfRFJBV19ERUxBWV9JTl9NUz0yMDAwO2Z1bmN0aW9uIGZpbmRQcm9jZXNzKHByb2Nlc3NOYW1lLG1vZGVsKXtmb3IoY29uc3QgcGlkIGluIG1vZGVsLnByb2Nlc3Nlcyl7Y29uc3QgcHJvY2Vzcz1tb2RlbC5wcm9jZXNzZXNbcGlkXTtpZihwcm9jZXNzLm5hbWU9PT1wcm9jZXNzTmFtZSl7cmV0dXJuIHByb2Nlc3M7fX0KLXJldHVybiB1bmRlZmluZWQ7fQotZnVuY3Rpb24gZmluZFRocmVhZHMocHJvY2Vzcyx0aHJlYWRQcmVmaXgpe2lmKHByb2Nlc3M9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCB0aHJlYWRzPVtdO2Zvcihjb25zdCB0aWQgaW4gcHJvY2Vzcy50aHJlYWRzKXtjb25zdCB0aHJlYWQ9cHJvY2Vzcy50aHJlYWRzW3RpZF07aWYodGhyZWFkLm5hbWUuc3RhcnRzV2l0aCh0aHJlYWRQcmVmaXgpKXt0aHJlYWRzLnB1c2godGhyZWFkKTt9fQotcmV0dXJuIHRocmVhZHM7fQotZnVuY3Rpb24gZmluZFVJVGhyZWFkKHByb2Nlc3Mpe2lmKHByb2Nlc3M9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCB0aHJlYWRzPWZpbmRUaHJlYWRzKHByb2Nlc3MsJ1VJIFRocmVhZCcpO2lmKHRocmVhZHMhPT11bmRlZmluZWQmJnRocmVhZHMubGVuZ3RoPT09MSl7cmV0dXJuIHRocmVhZHNbMF07fQotcmV0dXJuIHByb2Nlc3MudGhyZWFkc1twcm9jZXNzLnBpZF07fQotZnVuY3Rpb24gZmluZExhdW5jaFNsaWNlcyhtb2RlbCl7Y29uc3QgbGF1bmNoZXM9W107Y29uc3QgYmluZGVycz1maW5kVGhyZWFkcyhmaW5kUHJvY2Vzcygnc3lzdGVtX3NlcnZlcicsbW9kZWwpLCdCaW5kZXInKTtmb3IoY29uc3QgYmluZGVySWQgaW4gYmluZGVycyl7Y29uc3QgYmluZGVyPWJpbmRlcnNbYmluZGVySWRdO2Zvcihjb25zdCBzbGljZUlkIGluIGJpbmRlci5hc3luY1NsaWNlR3JvdXAuc2xpY2VzKXtjb25zdCBzbGljZT1iaW5kZXIuYXN5bmNTbGljZUdyb3VwLnNsaWNlc1tzbGljZUlkXTtpZihzbGljZS50aXRsZS5zdGFydHNXaXRoKCdsYXVuY2hpbmc6Jykpe2xhdW5jaGVzLnB1c2goc2xpY2UpO319fQotcmV0dXJuIGxhdW5jaGVzO30KLWZ1bmN0aW9uIGZpbmREcmF3U2xpY2UoYXBwTmFtZSxzdGFydE5vdEJlZm9yZSxtb2RlbCl7bGV0IGRyYXdTbGljZT11bmRlZmluZWQ7Y29uc3QgdGhyZWFkPWZpbmRVSVRocmVhZChmaW5kUHJvY2VzcyhhcHBOYW1lLG1vZGVsKSk7aWYodGhyZWFkPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7Zm9yKGNvbnN0IHNsaWNlSWQgaW4gdGhyZWFkLnNsaWNlR3JvdXAuc2xpY2VzKXtjb25zdCBzbGljZT10aHJlYWQuc2xpY2VHcm91cC5zbGljZXNbc2xpY2VJZF07aWYoc2xpY2Uuc3RhcnQ8c3RhcnROb3RCZWZvcmUrTUlOX0RSQVdfREVMQVlfSU5fTVN8fHNsaWNlLnN0YXJ0PnN0YXJ0Tm90QmVmb3JlK01BWF9EUkFXX0RFTEFZX0lOX01TKWNvbnRpbnVlO2lmKHNsaWNlLnRpdGxlIT09J2RyYXcnKWNvbnRpbnVlO2lmKGRyYXdTbGljZT09PXVuZGVmaW5lZHx8c2xpY2Uuc3RhcnQ8ZHJhd1NsaWNlLnN0YXJ0KXtkcmF3U2xpY2U9c2xpY2U7fX0KLXJldHVybiBkcmF3U2xpY2U7fQotZnVuY3Rpb24gZmluZElucHV0RXZlbnRTbGljZShlbmROb3RBZnRlcixtb2RlbCl7Y29uc3QgZW5kTm90QmVmb3JlPWVuZE5vdEFmdGVyLU1BWF9JTlBVVF9FVkVOVF9UT19TVEFSVFVQX0RFTEFZX0lOX01TO2xldCBpbnB1dFNsaWNlPXVuZGVmaW5lZDtjb25zdCBzeXN0ZW1VaT1maW5kVUlUaHJlYWQoZmluZFByb2Nlc3MoJ2NvbS5hbmRyb2lkLnN5c3RlbXVpJyxtb2RlbCkpO2lmKHN5c3RlbVVpPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7Zm9yKGNvbnN0IHNsaWNlSWQgaW4gc3lzdGVtVWkuYXN5bmNTbGljZUdyb3VwLnNsaWNlcyl7Y29uc3Qgc2xpY2U9c3lzdGVtVWkuYXN5bmNTbGljZUdyb3VwLnNsaWNlc1tzbGljZUlkXTtpZihzbGljZS5lbmQ+ZW5kTm90QWZ0ZXJ8fHNsaWNlLmVuZDxlbmROb3RCZWZvcmUpY29udGludWU7aWYoc2xpY2UudGl0bGUhPT0nZGVsaXZlcklucHV0RXZlbnQnKWNvbnRpbnVlO2lmKGlucHV0U2xpY2U9PT11bmRlZmluZWR8fHNsaWNlLmVuZD5pbnB1dFNsaWNlLmVuZCl7aW5wdXRTbGljZT1zbGljZTt9fQotcmV0dXJuIGlucHV0U2xpY2U7fQotZnVuY3Rpb24gY29tcHV0ZVN0YXJ0dXBUaW1lSW5NcyhhcHBOYW1lLGxhdW5jaFNsaWNlLG1vZGVsKXtsZXQgc3RhcnR1cFN0YXJ0PWxhdW5jaFNsaWNlLnN0YXJ0O2xldCBzdGFydHVwRW5kPWxhdW5jaFNsaWNlLmVuZDtjb25zdCBkcmF3U2xpY2U9ZmluZERyYXdTbGljZShhcHBOYW1lLGxhdW5jaFNsaWNlLmVuZCxtb2RlbCk7aWYoZHJhd1NsaWNlIT09dW5kZWZpbmVkKXtzdGFydHVwRW5kPWRyYXdTbGljZS5lbmQ7fQotY29uc3QgaW5wdXRTbGljZT1maW5kSW5wdXRFdmVudFNsaWNlKGxhdW5jaFNsaWNlLnN0YXJ0LG1vZGVsKTtpZihpbnB1dFNsaWNlIT09dW5kZWZpbmVkKXtzdGFydHVwU3RhcnQ9aW5wdXRTbGljZS5zdGFydDt9Ci1yZXR1cm4gc3RhcnR1cEVuZC1zdGFydHVwU3RhcnQ7fQotZnVuY3Rpb24gbWVhc3VyZVN0YXJ0dXAoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgbGF1bmNoZXM9ZmluZExhdW5jaFNsaWNlcyhtb2RlbCk7Zm9yKGNvbnN0IHNsaWNlSWQgaW4gbGF1bmNoZXMpe2NvbnN0IGxhdW5jaFNsaWNlPWxhdW5jaGVzW3NsaWNlSWRdO2NvbnN0IGFwcE5hbWU9bGF1bmNoU2xpY2UudGl0bGUuc3BsaXQoJzogJylbMV07Y29uc3Qgc3RhcnR1cE1zPWNvbXB1dGVTdGFydHVwVGltZUluTXMoYXBwTmFtZSxsYXVuY2hTbGljZSxtb2RlbCk7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oYGFuZHJvaWQ6c3lzdHJhY2U6c3RhcnR1cDoke2FwcE5hbWV9YCx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLHN0YXJ0dXBNcyk7fX0KLWZ1bmN0aW9uIG1lYXN1cmVUaHJlYWRTdGF0ZXMoaGlzdG9ncmFtcyxtb2RlbCxyYW5nZU9mSW50ZXJlc3Qpe2Zvcihjb25zdCBwaWQgaW4gbW9kZWwucHJvY2Vzc2VzKXtjb25zdCBwcm9jZXNzPW1vZGVsLnByb2Nlc3Nlc1twaWRdO2lmKHByb2Nlc3MubmFtZT09PXVuZGVmaW5lZCljb250aW51ZTtsZXQgaGFzU2xpY2VzPWZhbHNlO2xldCB0aW1lUnVubmluZz0wO2xldCB0aW1lUnVubmFibGU9MDtsZXQgdGltZVNsZWVwaW5nPTA7bGV0IHRpbWVVbmludGVycnVwdGlibGU9MDtsZXQgdGltZUJsb2NrSU89MDtsZXQgdGltZVVua25vd249MDtmb3IoY29uc3QgdGlkIGluIHByb2Nlc3MudGhyZWFkcyl7Y29uc3QgdGhyZWFkPXByb2Nlc3MudGhyZWFkc1t0aWRdO2lmKHRocmVhZC50aW1lU2xpY2VzPT09dW5kZWZpbmVkKWNvbnRpbnVlO2Zvcihjb25zdCBzbGljZUlkIGluIHRocmVhZC50aW1lU2xpY2VzKXtjb25zdCBzbGljZT10aHJlYWQudGltZVNsaWNlc1tzbGljZUlkXTtjb25zdCBzbGljZVJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShzbGljZS5zdGFydCxzbGljZS5lbmQpO2NvbnN0IGludGVyc2VjdGlvbj1yYW5nZU9mSW50ZXJlc3QuZmluZEludGVyc2VjdGlvbihzbGljZVJhbmdlKTtjb25zdCBkdXJhdGlvbj1pbnRlcnNlY3Rpb24uZHVyYXRpb247aWYoZHVyYXRpb249PT0wKWNvbnRpbnVlO2hhc1NsaWNlcz10cnVlO2lmKHNsaWNlLnRpdGxlPT09J1J1bm5pbmcnKXt0aW1lUnVubmluZys9ZHVyYXRpb247fWVsc2UgaWYoc2xpY2UudGl0bGU9PT0nUnVubmFibGUnKXt0aW1lUnVubmFibGUrPWR1cmF0aW9uO31lbHNlIGlmKHNsaWNlLnRpdGxlPT09J1NsZWVwaW5nJyl7dGltZVNsZWVwaW5nKz1kdXJhdGlvbjt9ZWxzZSBpZihzbGljZS50aXRsZS5zdGFydHNXaXRoKCdVbmludGVycnVwdGlibGUnKSl7dGltZVVuaW50ZXJydXB0aWJsZSs9ZHVyYXRpb247aWYoc2xpY2UudGl0bGUuaW5jbHVkZXMoJ0Jsb2NrIEkvTycpKXRpbWVCbG9ja0lPKz1kdXJhdGlvbjt9ZWxzZXt0aW1lVW5rbm93bis9ZHVyYXRpb247fX19Ci1pZihoYXNTbGljZXMpe2NvbnN0IHdhbGw9cmFuZ2VPZkludGVyZXN0Lm1heC1yYW5nZU9mSW50ZXJlc3QubWluO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGBhbmRyb2lkOnN5c3RyYWNlOnRocmVhZHRpbWU6JHtwcm9jZXNzLm5hbWV9OnJ1bm5pbmdgLHRyLmIuVW5pdC5ieU5hbWUubm9ybWFsaXplZFBlcmNlbnRhZ2UsdGltZVJ1bm5pbmcvd2FsbCk7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oYGFuZHJvaWQ6c3lzdHJhY2U6dGhyZWFkdGltZToke3Byb2Nlc3MubmFtZX06cnVubmFibGVgLHRyLmIuVW5pdC5ieU5hbWUubm9ybWFsaXplZFBlcmNlbnRhZ2UsdGltZVJ1bm5hYmxlL3dhbGwpO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGBhbmRyb2lkOnN5c3RyYWNlOnRocmVhZHRpbWU6JHtwcm9jZXNzLm5hbWV9OnNsZWVwaW5nYCx0ci5iLlVuaXQuYnlOYW1lLm5vcm1hbGl6ZWRQZXJjZW50YWdlLHRpbWVTbGVlcGluZy93YWxsKTtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShgYW5kcm9pZDpzeXN0cmFjZTp0aHJlYWR0aW1lOiR7cHJvY2Vzcy5uYW1lfTpibG9ja2lvYCx0ci5iLlVuaXQuYnlOYW1lLm5vcm1hbGl6ZWRQZXJjZW50YWdlLHRpbWVCbG9ja0lPL3dhbGwpO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGBhbmRyb2lkOnN5c3RyYWNlOnRocmVhZHRpbWU6JHtwcm9jZXNzLm5hbWV9OnVuaW50ZXJydXB0aWJsZWAsdHIuYi5Vbml0LmJ5TmFtZS5ub3JtYWxpemVkUGVyY2VudGFnZSx0aW1lVW5pbnRlcnJ1cHRpYmxlL3dhbGwpO2lmKHRpbWVVbmtub3duPjApe2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGBhbmRyb2lkOnN5c3RyYWNlOnRocmVhZHRpbWU6JHtwcm9jZXNzLm5hbWV9OnVua25vd25gLHRyLmIuVW5pdC5ieU5hbWUubm9ybWFsaXplZFBlcmNlbnRhZ2UsdGltZVVua25vd24vd2FsbCk7fX19fQotZnVuY3Rpb24gYW5kcm9pZFN5c3RyYWNlTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwsb3B0aW9ucyl7bGV0IHJhbmdlT2ZJbnRlcmVzdD1tb2RlbC5ib3VuZHM7aWYob3B0aW9ucyE9PXVuZGVmaW5lZCYmb3B0aW9ucy5yYW5nZU9mSW50ZXJlc3QhPT11bmRlZmluZWQpe3JhbmdlT2ZJbnRlcmVzdD1vcHRpb25zLnJhbmdlT2ZJbnRlcmVzdDt9Ci1tZWFzdXJlU3RhcnR1cChoaXN0b2dyYW1zLG1vZGVsKTttZWFzdXJlVGhyZWFkU3RhdGVzKGhpc3RvZ3JhbXMsbW9kZWwscmFuZ2VPZkludGVyZXN0KTt9Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKGFuZHJvaWRTeXN0cmFjZU1ldHJpYyx7c3VwcG9ydHNSYW5nZU9mSW50ZXJlc3Q6dHJ1ZX0pO3JldHVybnthbmRyb2lkU3lzdHJhY2VNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmIubWF0aCcsZnVuY3Rpb24oKXtjb25zdCBQRVJDRU5USUxFX1BSRUNJU0lPTj0xZS03O2Z1bmN0aW9uIFBpZWNld2lzZUxpbmVhckZ1bmN0aW9uKCl7dGhpcy5waWVjZXM9W107fQotUGllY2V3aXNlTGluZWFyRnVuY3Rpb24ucHJvdG90eXBlPXtwdXNoKHgxLHkxLHgyLHkyKXtpZih4MT49eDIpe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBzZWdtZW50Jyk7fQotaWYodGhpcy5waWVjZXMubGVuZ3RoPjAmJnRoaXMucGllY2VzW3RoaXMucGllY2VzLmxlbmd0aC0xXS54Mj54MSl7dGhyb3cgbmV3IEVycm9yKCdQb3RlbnRpYWxseSBvdmVybGFwcGluZyBzZWdtZW50cycpO30KLWlmKHgxPHgyKXt0aGlzLnBpZWNlcy5wdXNoKG5ldyBQaWVjZSh4MSx5MSx4Mix5MikpO319LHBhcnRCZWxvdyh5KXtyZXR1cm4gdGhpcy5waWVjZXMucmVkdWNlKChhY2MscCk9PihhY2MrcC5wYXJ0QmVsb3coeSkpLDApO30sZ2V0IG1pbigpe3JldHVybiB0aGlzLnBpZWNlcy5yZWR1Y2UoKGFjYyxwKT0+TWF0aC5taW4oYWNjLHAubWluKSxJbmZpbml0eSk7fSxnZXQgbWF4KCl7cmV0dXJuIHRoaXMucGllY2VzLnJlZHVjZSgoYWNjLHApPT5NYXRoLm1heChhY2MscC5tYXgpLC1JbmZpbml0eSk7fSxnZXQgYXZlcmFnZSgpe2xldCB3ZWlnaHRlZFN1bT0wO2xldCB0b3RhbFdlaWdodD0wO3RoaXMucGllY2VzLmZvckVhY2goZnVuY3Rpb24ocGllY2Upe3dlaWdodGVkU3VtKz1waWVjZS53aWR0aCpwaWVjZS5hdmVyYWdlO3RvdGFsV2VpZ2h0Kz1waWVjZS53aWR0aDt9KTtpZih0b3RhbFdlaWdodD09PTApcmV0dXJuIDA7cmV0dXJuIHdlaWdodGVkU3VtL3RvdGFsV2VpZ2h0O30scGVyY2VudGlsZShwZXJjZW50KXtpZighKHBlcmNlbnQ+PTAmJnBlcmNlbnQ8PTEpKXt0aHJvdyBuZXcgRXJyb3IoJ3BlcmNlbnQgbXVzdCBiZSBbMCwxXScpO30KLWxldCBsb3dlcj10aGlzLm1pbjtsZXQgdXBwZXI9dGhpcy5tYXg7Y29uc3QgdG90YWw9dGhpcy5wYXJ0QmVsb3codXBwZXIpO2lmKHRvdGFsPT09MClyZXR1cm4gMDt3aGlsZSh1cHBlci1sb3dlcj5QRVJDRU5USUxFX1BSRUNJU0lPTil7Y29uc3QgbWlkZGxlPShsb3dlcit1cHBlcikvMjtjb25zdCBiZWxvdz10aGlzLnBhcnRCZWxvdyhtaWRkbGUpO2lmKGJlbG93L3RvdGFsPHBlcmNlbnQpe2xvd2VyPW1pZGRsZTt9ZWxzZXt1cHBlcj1taWRkbGU7fX0KLXJldHVybihsb3dlcit1cHBlcikvMjt9fTtmdW5jdGlvbiBQaWVjZSh4MSx5MSx4Mix5Mil7dGhpcy54MT14MTt0aGlzLnkxPXkxO3RoaXMueDI9eDI7dGhpcy55Mj15Mjt9Ci1QaWVjZS5wcm90b3R5cGU9e3BhcnRCZWxvdyh5KXtjb25zdCB3aWR0aD10aGlzLndpZHRoO2lmKHdpZHRoPT09MClyZXR1cm4gMDtjb25zdCBtaW5ZPXRoaXMubWluO2NvbnN0IG1heFk9dGhpcy5tYXg7aWYoeT49bWF4WSlyZXR1cm4gd2lkdGg7aWYoeTxtaW5ZKXJldHVybiAwO3JldHVybih5LW1pblkpLyhtYXhZLW1pblkpKndpZHRoO30sZ2V0IG1pbigpe3JldHVybiBNYXRoLm1pbih0aGlzLnkxLHRoaXMueTIpO30sZ2V0IG1heCgpe3JldHVybiBNYXRoLm1heCh0aGlzLnkxLHRoaXMueTIpO30sZ2V0IGF2ZXJhZ2UoKXtyZXR1cm4odGhpcy55MSt0aGlzLnkyKS8yO30sZ2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMueDItdGhpcy54MTt9fTtyZXR1cm57UGllY2V3aXNlTGluZWFyRnVuY3Rpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MudjgudXRpbHMnLGZ1bmN0aW9uKCl7Y29uc3QgSURMRV9UQVNLX0VWRU5UPSdTaW5nbGVUaHJlYWRJZGxlVGFza1J1bm5lcjo6UnVuVGFzayc7Y29uc3QgVjhfRVhFQ1VURT0nVjguRXhlY3V0ZSc7Y29uc3QgR0NfRVZFTlRfUFJFRklYPSdWOC5HQyc7Y29uc3QgRlVMTF9HQ19FVkVOVD0nVjguR0NDb21wYWN0b3InO2NvbnN0IExPV19NRU1PUllfRVZFTlQ9J1Y4LkdDTG93TWVtb3J5Tm90aWZpY2F0aW9uJztjb25zdCBNQUpPUl9HQ19FVkVOVD0nTWFqb3JHQyc7Y29uc3QgTUlOT1JfR0NfRVZFTlQ9J01pbm9yR0MnO2NvbnN0IFRPUF9HQ19FVkVOVFM9eydWOC5HQ0NvbXBhY3Rvcic6J3Y4LWdjLWZ1bGwtbWFyay1jb21wYWN0b3InLCdWOC5HQ0ZpbmFsaXplTUMnOid2OC1nYy1sYXRlbmN5LW1hcmstY29tcGFjdG9yJywnVjguR0NGaW5hbGl6ZU1DUmVkdWNlTWVtb3J5JzondjgtZ2MtbWVtb3J5LW1hcmstY29tcGFjdG9yJywnVjguR0NJbmNyZW1lbnRhbE1hcmtpbmcnOid2OC1nYy1pbmNyZW1lbnRhbC1zdGVwJywnVjguR0NJbmNyZW1lbnRhbE1hcmtpbmdGaW5hbGl6ZSc6J3Y4LWdjLWluY3JlbWVudGFsLWZpbmFsaXplJywnVjguR0NJbmNyZW1lbnRhbE1hcmtpbmdTdGFydCc6J3Y4LWdjLWluY3JlbWVudGFsLXN0YXJ0JywnVjguR0NQaGFudG9tSGFuZGxlUHJvY2Vzc2luZ0NhbGxiYWNrJzondjgtZ2MtcGhhbnRvbS1oYW5kbGUtY2FsbGJhY2snLCdWOC5HQ1NjYXZlbmdlcic6J3Y4LWdjLXNjYXZlbmdlcid9O2NvbnN0IExPV19NRU1PUllfTUFSS19DT01QQUNUT1I9J3Y4LWdjLWxvdy1tZW1vcnktbWFyay1jb21wYWN0b3InO2Z1bmN0aW9uIGZpbmRQYXJlbnQoZXZlbnQscHJlZGljYXRlKXtsZXQgcGFyZW50PWV2ZW50LnBhcmVudFNsaWNlO3doaWxlKHBhcmVudCl7aWYocHJlZGljYXRlKHBhcmVudCkpe3JldHVybiBwYXJlbnQ7fQotcGFyZW50PXBhcmVudC5wYXJlbnRTbGljZTt9Ci1yZXR1cm4gbnVsbDt9Ci1mdW5jdGlvbiBpc0lkbGVUYXNrKGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGU9PT1JRExFX1RBU0tfRVZFTlQ7fQotZnVuY3Rpb24gaXNMb3dNZW1vcnlFdmVudChldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlPT09TE9XX01FTU9SWV9FVkVOVDt9Ci1mdW5jdGlvbiBpc1Y4RXZlbnQoZXZlbnQpe3JldHVybiBldmVudC50aXRsZS5zdGFydHNXaXRoKCdWOC4nKTt9Ci1mdW5jdGlvbiBpc1Y4RXhlY3V0ZUV2ZW50KGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGU9PT1WOF9FWEVDVVRFO30KLWZ1bmN0aW9uIGlzVG9wVjhFeGVjdXRlRXZlbnQoZXZlbnQpe3JldHVybiBpc1Y4RXhlY3V0ZUV2ZW50KGV2ZW50KSYmZmluZFBhcmVudChpc1Y4RXhlY3V0ZUV2ZW50KT09PW51bGw7fQotZnVuY3Rpb24gaXNHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGUmJmV2ZW50LnRpdGxlLnN0YXJ0c1dpdGgoR0NfRVZFTlRfUFJFRklYKSYmZXZlbnQudGl0bGUhPT1MT1dfTUVNT1JZX0VWRU5UO30KLWZ1bmN0aW9uIGlzVG9wR2FyYmFnZUNvbGxlY3Rpb25FdmVudChldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlIGluIFRPUF9HQ19FVkVOVFM7fQotZnVuY3Rpb24gaXNGb3JjZWRHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KXtyZXR1cm4gZmluZFBhcmVudChldmVudCxpc0xvd01lbW9yeUV2ZW50KSE9PW51bGw7fQotZnVuY3Rpb24gaXNTdWJHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KXtyZXR1cm4gaXNHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KSYmZXZlbnQucGFyZW50U2xpY2UmJihpc1RvcEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQoZXZlbnQucGFyZW50U2xpY2UpfHxldmVudC5wYXJlbnRTbGljZS50aXRsZT09PU1BSk9SX0dDX0VWRU5UfHxldmVudC5wYXJlbnRTbGljZS50aXRsZT09PU1JTk9SX0dDX0VWRU5UKTt9Ci1mdW5jdGlvbiBpc0Z1bGxNYXJrQ29tcGFjdG9yRXZlbnQoZXZlbnQpe3JldHVybiBldmVudC50aXRsZT09PSdWOC5HQ0NvbXBhY3Rvcic7fQotZnVuY3Rpb24gaXNJbmNyZW1lbnRhbE1hcmtpbmdFdmVudChldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlLnN0YXJ0c1dpdGgoJ1Y4LkdDSW5jcmVtZW50YWxNYXJraW5nJyk7fQotZnVuY3Rpb24gaXNMYXRlbmN5TWFya0NvbXBhY3RvckV2ZW50KGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGU9PT0nVjguR0NGaW5hbGl6ZU1DJzt9Ci1mdW5jdGlvbiBpc01lbW9yeU1hcmtDb21wYWN0b3JFdmVudChldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlPT09J1Y4LkdDRmluYWxpemVNQ1JlZHVjZU1lbW9yeSc7fQotZnVuY3Rpb24gaXNTY2F2ZW5nZXJFdmVudChldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlPT09J1Y4LkdDU2NhdmVuZ2VyJzt9Ci1mdW5jdGlvbiBpc0NvbXBpbGVPcHRpbWl6ZVJDU0NhdGVnb3J5KG5hbWUpe3JldHVybiBuYW1lPT09J09wdGltaXplJzt9Ci1mdW5jdGlvbiBpc0NvbXBpbGVVbm9wdGltaXplUkNTQ2F0ZWdvcnkobmFtZSl7cmV0dXJuIG5hbWU9PT0nQ29tcGlsZSc7fQotZnVuY3Rpb24gaXNDb21waWxlUGFyc2VSQ1NDYXRlZ29yeShuYW1lKXtyZXR1cm4gbmFtZT09PSdQYXJzZSc7fQotZnVuY3Rpb24gaXNDb21waWxlUkNTQ2F0ZWdvcnkobmFtZSl7cmV0dXJuIG5hbWU9PT0nQ29tcGlsZSd8fG5hbWU9PT0nT3B0aW1pemUnfHxuYW1lPT09J1BhcnNlJzt9Ci1mdW5jdGlvbiBpc1Y4UkNTRXZlbnQoZXZlbnQpe3JldHVybiBldmVudCBpbnN0YW5jZW9mIHRyLmUudjguVjhUaHJlYWRTbGljZTt9Ci1mdW5jdGlvbiB0b3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZShldmVudCl7aWYoZXZlbnQudGl0bGU9PT1GVUxMX0dDX0VWRU5UKXtpZihmaW5kUGFyZW50KGV2ZW50LGlzTG93TWVtb3J5RXZlbnQpKXtyZXR1cm4gTE9XX01FTU9SWV9NQVJLX0NPTVBBQ1RPUjt9fQotcmV0dXJuIFRPUF9HQ19FVkVOVFNbZXZlbnQudGl0bGVdO30KLWZ1bmN0aW9uIHN1YkdhcmJhZ2VDb2xsZWN0aW9uRXZlbnROYW1lKGV2ZW50KXtjb25zdCB0b3BFdmVudD1maW5kUGFyZW50KGV2ZW50LGlzVG9wR2FyYmFnZUNvbGxlY3Rpb25FdmVudCk7Y29uc3QgcHJlZml4PXRvcEV2ZW50P3RvcEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnROYW1lKHRvcEV2ZW50KTondW5rbm93bic7Y29uc3QgbmFtZT1ldmVudC50aXRsZS5yZXBsYWNlKCdWOC5HQ19NQ18nLCcnKS5yZXBsYWNlKCdWOC5HQ19TQ0FWRU5HRVJfJywnJykucmVwbGFjZSgnVjguR0NfJywnJykucmVwbGFjZSgvXy9nLCctJykudG9Mb3dlckNhc2UoKTtyZXR1cm4gcHJlZml4KyctJytuYW1lO30KLWZ1bmN0aW9uIGdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCxmaWx0ZXJDYWxsYmFjayxuYW1lQ2FsbGJhY2sscHJvY2Vzc0NhbGxiYWNrKXtjb25zdCBuYW1lVG9FdmVudHM9e307Zm9yKGNvbnN0IGV2ZW50IG9mIG1vZGVsLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoIWZpbHRlckNhbGxiYWNrKGV2ZW50KSljb250aW51ZTtjb25zdCBuYW1lPW5hbWVDYWxsYmFjayhldmVudCk7bmFtZVRvRXZlbnRzW25hbWVdPW5hbWVUb0V2ZW50c1tuYW1lXXx8W107bmFtZVRvRXZlbnRzW25hbWVdLnB1c2goZXZlbnQpO30KLWZvcihjb25zdFtuYW1lLGV2ZW50c11vZiBPYmplY3QuZW50cmllcyhuYW1lVG9FdmVudHMpKXtwcm9jZXNzQ2FsbGJhY2sobmFtZSxldmVudHMpO319Ci1mdW5jdGlvbiB1bmlvbk9mSW50ZXJ2YWxzKGludGVydmFscyl7aWYoaW50ZXJ2YWxzLmxlbmd0aD09PTApcmV0dXJuW107cmV0dXJuIHRyLmIubWF0aC5tZXJnZVJhbmdlcyhpbnRlcnZhbHMubWFwKHg9PntyZXR1cm57bWluOnguc3RhcnQsbWF4OnguZW5kfTt9KSwxZS02LGZ1bmN0aW9uKHJhbmdlcyl7cmV0dXJue3N0YXJ0OnJhbmdlcy5yZWR1Y2UoKGFjYyx4KT0+TWF0aC5taW4oYWNjLHgubWluKSxyYW5nZXNbMF0ubWluKSxlbmQ6cmFuZ2VzLnJlZHVjZSgoYWNjLHgpPT5NYXRoLm1heChhY2MseC5tYXgpLHJhbmdlc1swXS5tYXgpfTt9KTt9Ci1mdW5jdGlvbiBoYXNWOFN0YXRzKGdsb2JhbE1lbW9yeUR1bXApe2xldCB2OHN0YXRzPXVuZGVmaW5lZDtnbG9iYWxNZW1vcnlEdW1wLml0ZXJhdGVDb250YWluZXJEdW1wcyhmdW5jdGlvbihkdW1wKXt2OHN0YXRzPXY4c3RhdHN8fGR1bXAuZ2V0TWVtb3J5QWxsb2NhdG9yRHVtcEJ5RnVsbE5hbWUoJ3Y4Jyk7fSk7cmV0dXJuISF2OHN0YXRzO30KLWZ1bmN0aW9uIHJhbmdlRm9yTWVtb3J5RHVtcHMobW9kZWwpe2NvbnN0IHN0YXJ0T2ZGaXJzdER1bXBXaXRoVjg9bW9kZWwuZ2xvYmFsTWVtb3J5RHVtcHMuZmlsdGVyKGhhc1Y4U3RhdHMpLnJlZHVjZSgoc3RhcnQsZHVtcCk9Pk1hdGgubWluKHN0YXJ0LGR1bXAuc3RhcnQpLEluZmluaXR5KTtpZihzdGFydE9mRmlyc3REdW1wV2l0aFY4PT09SW5maW5pdHkpcmV0dXJuIG5ldyB0ci5iLm1hdGguUmFuZ2UoKTtyZXR1cm4gdHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHN0YXJ0T2ZGaXJzdER1bXBXaXRoVjgsSW5maW5pdHkpO30KLXJldHVybntmaW5kUGFyZW50LGdyb3VwQW5kUHJvY2Vzc0V2ZW50cyxpc0ZvcmNlZEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQsaXNGdWxsTWFya0NvbXBhY3RvckV2ZW50LGlzR2FyYmFnZUNvbGxlY3Rpb25FdmVudCxpc0lkbGVUYXNrLGlzSW5jcmVtZW50YWxNYXJraW5nRXZlbnQsaXNMYXRlbmN5TWFya0NvbXBhY3RvckV2ZW50LGlzTG93TWVtb3J5RXZlbnQsaXNNZW1vcnlNYXJrQ29tcGFjdG9yRXZlbnQsaXNTY2F2ZW5nZXJFdmVudCxpc1N1YkdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQsaXNUb3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50LGlzVG9wVjhFeGVjdXRlRXZlbnQsaXNWOEV2ZW50LGlzVjhFeGVjdXRlRXZlbnQsaXNWOFJDU0V2ZW50LGlzQ29tcGlsZVJDU0NhdGVnb3J5LGlzQ29tcGlsZU9wdGltaXplUkNTQ2F0ZWdvcnksaXNDb21waWxlVW5vcHRpbWl6ZVJDU0NhdGVnb3J5LGlzQ29tcGlsZVBhcnNlUkNTQ2F0ZWdvcnkscmFuZ2VGb3JNZW1vcnlEdW1wcyxzdWJHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZSx0b3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZSx1bmlvbk9mSW50ZXJ2YWxzLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLmJsaW5rJyxmdW5jdGlvbigpe2NvbnN0IEJMSU5LX0dDX0VWRU5UUz17J0JsaW5rR0NNYXJraW5nJzonYmxpbmstZ2MtbWFya2luZycsJ1RocmVhZFN0YXRlOjpjb21wbGV0ZVN3ZWVwJzonYmxpbmstZ2MtY29tcGxldGUtc3dlZXAnLCdUaHJlYWRTdGF0ZTo6cGVyZm9ybUlkbGVMYXp5U3dlZXAnOidibGluay1nYy1pZGxlLWxhenktc3dlZXAnfTtmdW5jdGlvbiBpc0JsaW5rR2FyYmFnZUNvbGxlY3Rpb25FdmVudChldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlIGluIEJMSU5LX0dDX0VWRU5UUzt9Ci1mdW5jdGlvbiBibGlua0dhcmJhZ2VDb2xsZWN0aW9uRXZlbnROYW1lKGV2ZW50KXtyZXR1cm4gQkxJTktfR0NfRVZFTlRTW2V2ZW50LnRpdGxlXTt9Ci1mdW5jdGlvbiBibGlua0djTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2FkZER1cmF0aW9uT2ZUb3BFdmVudHMoaGlzdG9ncmFtcyxtb2RlbCk7YWRkVG90YWxEdXJhdGlvbk9mVG9wRXZlbnRzKGhpc3RvZ3JhbXMsbW9kZWwpO2FkZElkbGVUaW1lc09mVG9wRXZlbnRzKGhpc3RvZ3JhbXMsbW9kZWwpO2FkZFRvdGFsSWRsZVRpbWVzT2ZUb3BFdmVudHMoaGlzdG9ncmFtcyxtb2RlbCk7fQotdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihibGlua0djTWV0cmljKTtjb25zdCB0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyO2NvbnN0IHBlcmNlbnRhZ2VfYmlnZ2VySXNCZXR0ZXI9dHIuYi5Vbml0LmJ5TmFtZS5ub3JtYWxpemVkUGVyY2VudGFnZV9iaWdnZXJJc0JldHRlcjtjb25zdCBDVVNUT01fQk9VTkRBUklFUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDAsMjAsMjAwKS5hZGRFeHBvbmVudGlhbEJpbnMoMjAwLDEwMCk7ZnVuY3Rpb24gY3JlYXRlTnVtZXJpY0ZvclRvcEV2ZW50VGltZShuYW1lKXtjb25zdCBuPW5ldyB0ci52Lkhpc3RvZ3JhbShuYW1lLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtuLmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHthdmc6dHJ1ZSxjb3VudDp0cnVlLG1heDp0cnVlLG1pbjpmYWxzZSxzdGQ6dHJ1ZSxzdW06dHJ1ZSxwZXJjZW50aWxlOlswLjkwXX0pO3JldHVybiBuO30KLWZ1bmN0aW9uIGNyZWF0ZU51bWVyaWNGb3JJZGxlVGltZShuYW1lKXtjb25zdCBuPW5ldyB0ci52Lkhpc3RvZ3JhbShuYW1lLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtuLmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHthdmc6dHJ1ZSxjb3VudDpmYWxzZSxtYXg6dHJ1ZSxtaW46ZmFsc2Usc3RkOmZhbHNlLHN1bTp0cnVlLHBlcmNlbnRpbGU6W119KTtyZXR1cm4gbjt9Ci1mdW5jdGlvbiBjcmVhdGVQZXJjZW50YWdlKG5hbWUsbnVtZXJhdG9yLGRlbm9taW5hdG9yKXtjb25zdCBoaXN0b2dyYW09bmV3IHRyLnYuSGlzdG9ncmFtKG5hbWUscGVyY2VudGFnZV9iaWdnZXJJc0JldHRlcik7aWYoZGVub21pbmF0b3I9PT0wKXtoaXN0b2dyYW0uYWRkU2FtcGxlKDApO31lbHNle2hpc3RvZ3JhbS5hZGRTYW1wbGUobnVtZXJhdG9yL2Rlbm9taW5hdG9yKTt9Ci1yZXR1cm4gaGlzdG9ncmFtO30KLWZ1bmN0aW9uIGFkZER1cmF0aW9uT2ZUb3BFdmVudHMoaGlzdG9ncmFtcyxtb2RlbCl7dHIubWV0cmljcy52OC51dGlscy5ncm91cEFuZFByb2Nlc3NFdmVudHMobW9kZWwsaXNCbGlua0dhcmJhZ2VDb2xsZWN0aW9uRXZlbnQsYmxpbmtHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZSxmdW5jdGlvbihuYW1lLGV2ZW50cyl7Y29uc3QgY3B1RHVyYXRpb249Y3JlYXRlTnVtZXJpY0ZvclRvcEV2ZW50VGltZShuYW1lKTtldmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7Y3B1RHVyYXRpb24uYWRkU2FtcGxlKGV2ZW50LmNwdUR1cmF0aW9uKTt9KTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShjcHVEdXJhdGlvbik7fSk7fQotZnVuY3Rpb24gYWRkVG90YWxEdXJhdGlvbk9mVG9wRXZlbnRzKGhpc3RvZ3JhbXMsbW9kZWwpe3RyLm1ldHJpY3MudjgudXRpbHMuZ3JvdXBBbmRQcm9jZXNzRXZlbnRzKG1vZGVsLGlzQmxpbmtHYXJiYWdlQ29sbGVjdGlvbkV2ZW50LGV2ZW50PT4nYmxpbmstZ2MtdG90YWwnLGZ1bmN0aW9uKG5hbWUsZXZlbnRzKXtjb25zdCBjcHVEdXJhdGlvbj1jcmVhdGVOdW1lcmljRm9yVG9wRXZlbnRUaW1lKG5hbWUpO2V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtjcHVEdXJhdGlvbi5hZGRTYW1wbGUoZXZlbnQuY3B1RHVyYXRpb24pO30pO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGNwdUR1cmF0aW9uKTt9KTt9Ci1mdW5jdGlvbiBhZGRJZGxlVGltZXNPZlRvcEV2ZW50cyhoaXN0b2dyYW1zLG1vZGVsKXt0ci5tZXRyaWNzLnY4LnV0aWxzLmdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCxpc0JsaW5rR2FyYmFnZUNvbGxlY3Rpb25FdmVudCxibGlua0dhcmJhZ2VDb2xsZWN0aW9uRXZlbnROYW1lLGZ1bmN0aW9uKG5hbWUsZXZlbnRzKXthZGRJZGxlVGltZXMoaGlzdG9ncmFtcyxtb2RlbCxuYW1lLGV2ZW50cyk7fSk7fQotZnVuY3Rpb24gYWRkVG90YWxJZGxlVGltZXNPZlRvcEV2ZW50cyhoaXN0b2dyYW1zLG1vZGVsKXt0ci5tZXRyaWNzLnY4LnV0aWxzLmdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCxpc0JsaW5rR2FyYmFnZUNvbGxlY3Rpb25FdmVudCxldmVudD0+J2JsaW5rLWdjLXRvdGFsJyxmdW5jdGlvbihuYW1lLGV2ZW50cyl7YWRkSWRsZVRpbWVzKGhpc3RvZ3JhbXMsbW9kZWwsbmFtZSxldmVudHMpO30pO30KLWZ1bmN0aW9uIGFkZElkbGVUaW1lcyhoaXN0b2dyYW1zLG1vZGVsLG5hbWUsZXZlbnRzKXtjb25zdCBjcHVEdXJhdGlvbj1jcmVhdGVOdW1lcmljRm9ySWRsZVRpbWUobmFtZSsnX2NwdScpO2NvbnN0IGluc2lkZUlkbGU9Y3JlYXRlTnVtZXJpY0ZvcklkbGVUaW1lKG5hbWUrJ19pbnNpZGVfaWRsZScpO2NvbnN0IG91dHNpZGVJZGxlPWNyZWF0ZU51bWVyaWNGb3JJZGxlVGltZShuYW1lKydfb3V0c2lkZV9pZGxlJyk7Y29uc3QgaWRsZURlYWRsaW5lT3ZlcnJ1bj1jcmVhdGVOdW1lcmljRm9ySWRsZVRpbWUobmFtZSsnX2lkbGVfZGVhZGxpbmVfb3ZlcnJ1bicpO2V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtjb25zdCBpZGxlVGFzaz10ci5tZXRyaWNzLnY4LnV0aWxzLmZpbmRQYXJlbnQoZXZlbnQsdHIubWV0cmljcy52OC51dGlscy5pc0lkbGVUYXNrKTtsZXQgaW5zaWRlPTA7bGV0IG92ZXJydW49MDtpZihpZGxlVGFzayl7Y29uc3QgYWxsb3R0ZWRUaW1lPWlkbGVUYXNrLmFyZ3MuYWxsb3R0ZWRfdGltZV9tcztpZihldmVudC5kdXJhdGlvbj5hbGxvdHRlZFRpbWUpe292ZXJydW49ZXZlbnQuZHVyYXRpb24tYWxsb3R0ZWRUaW1lO2luc2lkZT1ldmVudC5jcHVEdXJhdGlvbiphbGxvdHRlZFRpbWUvZXZlbnQuZHVyYXRpb247fWVsc2V7aW5zaWRlPWV2ZW50LmNwdUR1cmF0aW9uO319Ci1jcHVEdXJhdGlvbi5hZGRTYW1wbGUoZXZlbnQuY3B1RHVyYXRpb24pO2luc2lkZUlkbGUuYWRkU2FtcGxlKGluc2lkZSk7b3V0c2lkZUlkbGUuYWRkU2FtcGxlKGV2ZW50LmNwdUR1cmF0aW9uLWluc2lkZSk7aWRsZURlYWRsaW5lT3ZlcnJ1bi5hZGRTYW1wbGUob3ZlcnJ1bik7fSk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oaWRsZURlYWRsaW5lT3ZlcnJ1bik7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0ob3V0c2lkZUlkbGUpO2NvbnN0IHBlcmNlbnRhZ2U9Y3JlYXRlUGVyY2VudGFnZShuYW1lKydfcGVyY2VudGFnZV9pZGxlJyxpbnNpZGVJZGxlLnN1bSxjcHVEdXJhdGlvbi5zdW0pO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHBlcmNlbnRhZ2UpO30KLXJldHVybntibGlua0djTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLmJsaW5rJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGxlYWtEZXRlY3Rpb25NZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgbW9kZWxIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYobW9kZWxIZWxwZXI9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignQ2hyb21lIGlzIG5vdCBwcmVzZW50LicpO30KLWNvbnN0IHJlbmRlcmVySGVscGVycz1tb2RlbEhlbHBlci5yZW5kZXJlckhlbHBlcnM7aWYoT2JqZWN0LmtleXMocmVuZGVyZXJIZWxwZXJzKS5sZW5ndGg9PT0wKXt0aHJvdyBuZXcgRXJyb3IoJ1JlbmRlcmVyIHByb2Nlc3MgaXMgbm90IHByZXNlbnQuJyk7fQotY29uc3QgcGlkcz1PYmplY3Qua2V5cyhyZW5kZXJlckhlbHBlcnMpO2NvbnN0IGNocm9tZUR1bXBzPXRyLm1ldHJpY3Muc2guc3BsaXRHbG9iYWxEdW1wc0J5QnJvd3Nlck5hbWUobW9kZWwsdW5kZWZpbmVkKS5nZXQoJ2Nocm9tZScpO2NvbnN0IHN1bUNvdW50ZXI9bmV3IE1hcCgpO2Zvcihjb25zdCBwaWQgb2YgcGlkcyl7Zm9yKGNvbnN0W2tleSxjb3VudF1vZiBjb3VudExlYWtlZEJsaW5rT2JqZWN0cyhjaHJvbWVEdW1wcyxwaWQpKXtzdW1Db3VudGVyLnNldChrZXksKHN1bUNvdW50ZXIuZ2V0KGtleSl8fDApK2NvdW50KTt9fQotZm9yKGNvbnN0W2tleSxjb3VudF1vZiBzdW1Db3VudGVyKXtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnTGVha2VkICcra2V5LHRyLmIuVW5pdC5ieU5hbWUuY291bnRfc21hbGxlcklzQmV0dGVyLGNvdW50KTt9Ci1mb3IoY29uc3Rba2V5LGNvdW50XW9mIHN1bUNvdW50ZXIpe2lmKGNvdW50PjApe3Rocm93IG5ldyBFcnJvcignTWVtb3J5IGxlYWsgaXMgZm91bmQuJyk7fX19Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKGxlYWtEZXRlY3Rpb25NZXRyaWMpO2Z1bmN0aW9uIGNvdW50TGVha2VkQmxpbmtPYmplY3RzKGR1bXBzLHBpZCl7aWYoZHVtcHM9PT11bmRlZmluZWR8fGR1bXBzLmxlbmd0aDwyKXt0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGF0IGxlYXN0IHR3byBtZW1vcnkgZHVtcHMuJyk7fQotY29uc3QgZmlyc3RDb3VudGVyPWNvdW50QmxpbmtPYmplY3RzKGR1bXBzWzBdLHBpZCk7Y29uc3QgbGFzdENvdW50ZXI9Y291bnRCbGlua09iamVjdHMoZHVtcHNbZHVtcHMubGVuZ3RoLTFdLHBpZCk7Y29uc3QgZGlmZkNvdW50ZXI9bmV3IE1hcCgpO2Zvcihjb25zdFtrZXksbGFzdENvdW50XW9mIGxhc3RDb3VudGVyKXtkaWZmQ291bnRlci5zZXQoa2V5LGxhc3RDb3VudC1maXJzdENvdW50ZXIuZ2V0KGtleSkpO30KLXJldHVybiBkaWZmQ291bnRlcjt9Ci1mdW5jdGlvbiBjb3VudEJsaW5rT2JqZWN0cyhkdW1wLHBpZCl7Y29uc3QgY291bnRlcj1uZXcgTWFwKCk7Y29uc3QgcHJvY2Vzc2VzTWVtb3J5RHVtcHM9ZHVtcC5wcm9jZXNzTWVtb3J5RHVtcHM7aWYocHJvY2Vzc2VzTWVtb3J5RHVtcHNbcGlkXT09PXVuZGVmaW5lZClyZXR1cm4gY291bnRlcjtjb25zdCBibGlua09iamVjdHNEdW1wPXByb2Nlc3Nlc01lbW9yeUR1bXBzW3BpZF0ubWVtb3J5QWxsb2NhdG9yRHVtcHMuZmluZChkdW1wPT5kdW1wLmZ1bGxOYW1lPT09J2JsaW5rX29iamVjdHMnKTtmb3IoY29uc3QgdiBvZiBibGlua09iamVjdHNEdW1wLmNoaWxkcmVuKXtjb3VudGVyLnNldCh2Lm5hbWUsdi5udW1lcmljcy5vYmplY3RfY291bnQudmFsdWUpO30KLXJldHVybiBjb3VudGVyO30KLXJldHVybntsZWFrRGV0ZWN0aW9uTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnNoJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGdldENwdVNuYXBzaG90c0Zyb21Nb2RlbChtb2RlbCl7Y29uc3Qgc25hcHNob3RzPVtdO2Zvcihjb25zdCBwaWQgaW4gbW9kZWwucHJvY2Vzc2VzKXtjb25zdCBzbmFwc2hvdEluc3RhbmNlcz1tb2RlbC5wcm9jZXNzZXNbcGlkXS5vYmplY3RzLmdldEFsbEluc3RhbmNlc05hbWVkKCdDUFVTbmFwc2hvdHMnKTtpZighc25hcHNob3RJbnN0YW5jZXMpY29udGludWU7Zm9yKGNvbnN0IG9iamVjdCBvZiBzbmFwc2hvdEluc3RhbmNlc1swXS5zbmFwc2hvdHMpe3NuYXBzaG90cy5wdXNoKG9iamVjdC5hcmdzLnByb2Nlc3Nlcyk7fX0KLXJldHVybiBzbmFwc2hvdHM7fQotZnVuY3Rpb24gZ2V0UHJvY2Vzc1N1bXNGcm9tU25hcHNob3Qoc25hcHNob3Qpe2NvbnN0IHByb2Nlc3NTdW1zPW5ldyBNYXAoKTtmb3IoY29uc3QgcHJvY2Vzc0RhdGEgb2Ygc25hcHNob3Qpe2NvbnN0IHByb2Nlc3NOYW1lPXByb2Nlc3NEYXRhLm5hbWU7aWYoIShwcm9jZXNzU3Vtcy5oYXMocHJvY2Vzc05hbWUpKSl7cHJvY2Vzc1N1bXMuc2V0KHByb2Nlc3NOYW1lLHtzdW06MC4wLHBhdGhzOm5ldyBTZXQoKX0pO30KLXByb2Nlc3NTdW1zLmdldChwcm9jZXNzTmFtZSkuc3VtKz1wYXJzZUZsb2F0KHByb2Nlc3NEYXRhLnBDcHUpO2lmKHByb2Nlc3NEYXRhLnBhdGgpe3Byb2Nlc3NTdW1zLmdldChwcm9jZXNzTmFtZSkucGF0aHMuYWRkKHByb2Nlc3NEYXRhLnBhdGgpO319Ci1yZXR1cm4gcHJvY2Vzc1N1bXM7fQotZnVuY3Rpb24gYnVpbGROdW1lcmljc0Zyb21TbmFwc2hvdHMoc25hcHNob3RzKXtjb25zdCBwcm9jZXNzTnVtZXJpY3M9bmV3IE1hcCgpO2Zvcihjb25zdCBzbmFwc2hvdCBvZiBzbmFwc2hvdHMpe2NvbnN0IHByb2Nlc3NTdW1zPWdldFByb2Nlc3NTdW1zRnJvbVNuYXBzaG90KHNuYXBzaG90KTtmb3IoY29uc3RbcHJvY2Vzc05hbWUscHJvY2Vzc0RhdGFdb2YgcHJvY2Vzc1N1bXMuZW50cmllcygpKXtpZighKHByb2Nlc3NOdW1lcmljcy5oYXMocHJvY2Vzc05hbWUpKSl7cHJvY2Vzc051bWVyaWNzLnNldChwcm9jZXNzTmFtZSx7bnVtZXJpYzpuZXcgdHIudi5IaXN0b2dyYW0oJ2NwdTpwZXJjZW50OicrcHJvY2Vzc05hbWUsdHIuYi5Vbml0LmJ5TmFtZS5ub3JtYWxpemVkUGVyY2VudGFnZV9zbWFsbGVySXNCZXR0ZXIpLHBhdGhzOm5ldyBTZXQoKX0pO30KLXByb2Nlc3NOdW1lcmljcy5nZXQocHJvY2Vzc05hbWUpLm51bWVyaWMuYWRkU2FtcGxlKHByb2Nlc3NEYXRhLnN1bS8xMDAuMCk7Zm9yKGNvbnN0IHBhdGggb2YgcHJvY2Vzc0RhdGEucGF0aHMpe3Byb2Nlc3NOdW1lcmljcy5nZXQocHJvY2Vzc05hbWUpLnBhdGhzLmFkZChwYXRoKTt9fX0KLXJldHVybiBwcm9jZXNzTnVtZXJpY3M7fQotZnVuY3Rpb24gY3B1UHJvY2Vzc01ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBzbmFwc2hvdHM9Z2V0Q3B1U25hcHNob3RzRnJvbU1vZGVsKG1vZGVsKTtjb25zdCBwcm9jZXNzTnVtZXJpY3M9YnVpbGROdW1lcmljc0Zyb21TbmFwc2hvdHMoc25hcHNob3RzKTtmb3IoY29uc3RbcHJvY2Vzc05hbWUscHJvY2Vzc0RhdGFdb2YgcHJvY2Vzc051bWVyaWNzKXtjb25zdCBudW1lcmljPXByb2Nlc3NEYXRhLm51bWVyaWM7Y29uc3QgbWlzc2luZ1NuYXBzaG90Q291bnQ9c25hcHNob3RzLmxlbmd0aC1udW1lcmljLm51bVZhbHVlcztmb3IobGV0IGk9MDtpPG1pc3NpbmdTbmFwc2hvdENvdW50O2krKyl7bnVtZXJpYy5hZGRTYW1wbGUoMCk7fQotbnVtZXJpYy5kaWFnbm9zdGljcy5zZXQoJ3BhdGhzJyxuZXcKLXRyLnYuZC5HZW5lcmljU2V0KFsuLi5wcm9jZXNzRGF0YS5wYXRoc10pKTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShudW1lcmljKTt9fQotdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihjcHVQcm9jZXNzTWV0cmljKTtyZXR1cm57Y3B1UHJvY2Vzc01ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcycsZnVuY3Rpb24oKXtmdW5jdGlvbiBtZWRpYU1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYoY2hyb21lSGVscGVyPT09dW5kZWZpbmVkKXJldHVybjtmb3IoY29uc3QgcmVuZGVyZXJIZWxwZXIgb2YgT2JqZWN0LnZhbHVlcyhjaHJvbWVIZWxwZXIucmVuZGVyZXJIZWxwZXJzKSl7Y29uc3QgbWFpblRocmVhZD1yZW5kZXJlckhlbHBlci5tYWluVGhyZWFkO2lmKG1haW5UaHJlYWQ9PT11bmRlZmluZWQpY29udGludWU7Y29uc3QgY29tcG9zaXRvclRocmVhZD1yZW5kZXJlckhlbHBlci5jb21wb3NpdG9yVGhyZWFkO2NvbnN0IGF1ZGlvVGhyZWFkcz1yZW5kZXJlckhlbHBlci5wcm9jZXNzLmZpbmRBbGxUaHJlYWRzTmFtZWQoJ0F1ZGlvT3V0cHV0RGV2aWNlJyk7aWYoY29tcG9zaXRvclRocmVhZD09PXVuZGVmaW5lZCYmYXVkaW9UaHJlYWRzLmxlbmd0aD09PTApY29udGludWU7Y29uc3QgcHJvY2Vzc0RhdGE9bmV3IFBlclByb2Nlc3NEYXRhKCk7cHJvY2Vzc0RhdGEucmVjb3JkUGxheVN0YXJ0cyhtYWluVGhyZWFkKTtpZighcHJvY2Vzc0RhdGEuaGFzUGxheWJhY2tzKWNvbnRpbnVlO2lmKGNvbXBvc2l0b3JUaHJlYWQhPT11bmRlZmluZWQpe3Byb2Nlc3NEYXRhLmNhbGN1bGF0ZVRpbWVUb1ZpZGVvUGxheXMoY29tcG9zaXRvclRocmVhZCk7cHJvY2Vzc0RhdGEuY2FsY3VsYXRlRHJvcHBlZEZyYW1lQ291bnRzKGNvbXBvc2l0b3JUaHJlYWQpO30KLWlmKGF1ZGlvVGhyZWFkcy5sZW5ndGghPT0wKXtwcm9jZXNzRGF0YS5jYWxjdWxhdGVUaW1lVG9BdWRpb1BsYXlzKGF1ZGlvVGhyZWFkcyk7fQotcHJvY2Vzc0RhdGEuY2FsY3VsYXRlU2Vla1RpbWVzKG1haW5UaHJlYWQpO3Byb2Nlc3NEYXRhLmNhbGN1bGF0ZUJ1ZmZlcmluZ1RpbWVzKG1haW5UaHJlYWQpO3Byb2Nlc3NEYXRhLmFkZE1ldHJpY1RvSGlzdG9ncmFtcyhoaXN0b2dyYW1zKTt9fQotY2xhc3MgUGVyUHJvY2Vzc0RhdGF7Y29uc3RydWN0b3IoKXt0aGlzLnBsYXliYWNrSWRUb0RhdGFNYXBfPW5ldyBNYXAoKTt9Ci1yZWNvcmRQbGF5U3RhcnRzKG1haW5UaHJlYWQpe2Zvcihjb25zdCBldmVudCBvZiBtYWluVGhyZWFkLnNsaWNlR3JvdXAuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZihldmVudC50aXRsZT09PSdXZWJNZWRpYVBsYXllckltcGw6OkRvTG9hZCcpe2NvbnN0IGlkPWV2ZW50LmFyZ3MuaWQ7aWYodGhpcy5wbGF5YmFja0lkVG9EYXRhTWFwXy5oYXMoaWQpKXt0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgbXVsdGlwbGUgaW5pdGlhbGl6YXRpb24gb2YgYSBtZWRpYSBwbGF5YmFjaycpO30KLXRoaXMucGxheWJhY2tJZFRvRGF0YU1hcF8uc2V0KGlkLG5ldyBQZXJQbGF5YmFja0RhdGEoZXZlbnQuc3RhcnQpKTt9fX0KLWdldCBoYXNQbGF5YmFja3MoKXtyZXR1cm4gdGhpcy5wbGF5YmFja0lkVG9EYXRhTWFwXy5zaXplPjA7fQotY2FsY3VsYXRlVGltZVRvVmlkZW9QbGF5cyhjb21wb3NpdG9yVGhyZWFkKXtmb3IoY29uc3QgZXZlbnQgb2YgY29tcG9zaXRvclRocmVhZC5zbGljZUdyb3VwLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoZXZlbnQudGl0bGU9PT0nVmlkZW9SZW5kZXJlckltcGw6OlJlbmRlcicpe3RoaXMuZ2V0UGVyUGxheWJhY2tPYmplY3RfKGV2ZW50LmFyZ3MuaWQpLnByb2Nlc3NWaWRlb1JlbmRlclRpbWUoZXZlbnQuc3RhcnQpO319fQotY2FsY3VsYXRlVGltZVRvQXVkaW9QbGF5cyhhdWRpb1RocmVhZHMpe2Zvcihjb25zdCBhdWRpb1RocmVhZCBvZiBhdWRpb1RocmVhZHMpe2Zvcihjb25zdCBldmVudCBvZiBhdWRpb1RocmVhZC5zbGljZUdyb3VwLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoZXZlbnQudGl0bGU9PT0nQXVkaW9SZW5kZXJlckltcGw6OlJlbmRlcicpe3RoaXMuZ2V0UGVyUGxheWJhY2tPYmplY3RfKGV2ZW50LmFyZ3MuaWQpLnByb2Nlc3NBdWRpb1JlbmRlclRpbWUoZXZlbnQuc3RhcnQpO319fX0KLWNhbGN1bGF0ZVNlZWtUaW1lcyhtYWluVGhyZWFkKXtmb3IoY29uc3QgZXZlbnQgb2YgbWFpblRocmVhZC5zbGljZUdyb3VwLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoZXZlbnQudGl0bGU9PT0nV2ViTWVkaWFQbGF5ZXJJbXBsOjpEb1NlZWsnKXt0aGlzLmdldFBlclBsYXliYWNrT2JqZWN0XyhldmVudC5hcmdzLmlkKS5wcm9jZXNzRG9TZWVrKGV2ZW50LmFyZ3MudGFyZ2V0LGV2ZW50LnN0YXJ0KTt9ZWxzZSBpZihldmVudC50aXRsZT09PSdXZWJNZWRpYVBsYXllckltcGw6Ok9uUGlwZWxpbmVTZWVrZWQnKXt0aGlzLmdldFBlclBsYXliYWNrT2JqZWN0XyhldmVudC5hcmdzLmlkKS5wcm9jZXNzT25QaXBlbGluZVNlZWtlZChldmVudC5hcmdzLnRhcmdldCxldmVudC5zdGFydCk7fWVsc2UgaWYoZXZlbnQudGl0bGU9PT0nV2ViTWVkaWFQbGF5ZXJJbXBsOjpCdWZmZXJpbmdIYXZlRW5vdWdoJyl7dGhpcy5nZXRQZXJQbGF5YmFja09iamVjdF8oZXZlbnQuYXJncy5pZCkucHJvY2Vzc0J1ZmZlcmluZ0hhdmVFbm91Z2goZXZlbnQuc3RhcnQpO319fQotY2FsY3VsYXRlQnVmZmVyaW5nVGltZXMobWFpblRocmVhZCl7Zm9yKGNvbnN0IGV2ZW50IG9mIG1haW5UaHJlYWQuc2xpY2VHcm91cC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKGV2ZW50LnRpdGxlPT09J1dlYk1lZGlhUGxheWVySW1wbDo6T25FbmRlZCcpe3RoaXMuZ2V0UGVyUGxheWJhY2tPYmplY3RfKGV2ZW50LmFyZ3MuaWQpLnByb2Nlc3NPbkVuZGVkKGV2ZW50LnN0YXJ0LGV2ZW50LmFyZ3MuZHVyYXRpb24pO319fQotY2FsY3VsYXRlRHJvcHBlZEZyYW1lQ291bnRzKGNvbXBvc2l0b3JUaHJlYWQpe2Zvcihjb25zdCBldmVudCBvZiBjb21wb3NpdG9yVGhyZWFkLnNsaWNlR3JvdXAuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZihldmVudC50aXRsZT09PSdWaWRlb0ZyYW1lc0Ryb3BwZWQnKXt0aGlzLmdldFBlclBsYXliYWNrT2JqZWN0XyhldmVudC5hcmdzLmlkKS5wcm9jZXNzVmlkZW9GcmFtZXNEcm9wcGVkKGV2ZW50LmFyZ3MuY291bnQpO319fQotYWRkTWV0cmljVG9IaXN0b2dyYW1zKGhpc3RvZ3JhbXMpe2Zvcihjb25zdFtpZCxwbGF5YmFja0RhdGFdb2YgdGhpcy5wbGF5YmFja0lkVG9EYXRhTWFwXyl7cGxheWJhY2tEYXRhLmFkZE1ldHJpY1RvSGlzdG9ncmFtcyhoaXN0b2dyYW1zKTt9fQotZ2V0UGVyUGxheWJhY2tPYmplY3RfKHBsYXliYWNrSWQpe2xldCBwZXJQbGF5YmFja09iamVjdD10aGlzLnBsYXliYWNrSWRUb0RhdGFNYXBfLmdldChwbGF5YmFja0lkKTtpZihwZXJQbGF5YmFja09iamVjdD09PXVuZGVmaW5lZCl7cGVyUGxheWJhY2tPYmplY3Q9bmV3IFBlclBsYXliYWNrRGF0YSh1bmRlZmluZWQpO3RoaXMucGxheWJhY2tJZFRvRGF0YU1hcF8uc2V0KHBsYXliYWNrSWQscGVyUGxheWJhY2tPYmplY3QpO30KLXJldHVybiBwZXJQbGF5YmFja09iamVjdDt9fQotY2xhc3MgUGVyUGxheWJhY2tEYXRhe2NvbnN0cnVjdG9yKHBsYXlTdGFydFRpbWUpe3RoaXMucGxheVN0YXJ0Xz1wbGF5U3RhcnRUaW1lO3RoaXMudGltZVRvVmlkZW9QbGF5Xz11bmRlZmluZWQ7dGhpcy50aW1lVG9BdWRpb1BsYXlfPXVuZGVmaW5lZDt0aGlzLmJ1ZmZlcmluZ1RpbWVfPXVuZGVmaW5lZDt0aGlzLmRyb3BwZWRGcmFtZUNvdW50Xz0wO3RoaXMuc2Vla0Vycm9yXz1mYWxzZTt0aGlzLnNlZWtUaW1lc189bmV3IE1hcCgpO3RoaXMuY3VycmVudFNlZWtfPXVuZGVmaW5lZDt9Ci1nZXQgdGltZVRvVmlkZW9QbGF5KCl7cmV0dXJuIHRoaXMudGltZVRvVmlkZW9QbGF5Xzt9Ci1nZXQgdGltZVRvQXVkaW9QbGF5KCl7cmV0dXJuIHRoaXMudGltZVRvQXVkaW9QbGF5Xzt9Ci1nZXQgYnVmZmVyaW5nVGltZSgpe3JldHVybiB0aGlzLmJ1ZmZlcmluZ1RpbWVfO30KLWdldCBkcm9wcGVkRnJhbWVDb3VudCgpe3JldHVybih0aGlzLnRpbWVUb1ZpZGVvUGxheV8hPT11bmRlZmluZWQpP3RoaXMuZHJvcHBlZEZyYW1lQ291bnRfOnVuZGVmaW5lZDt9Ci1nZXQgc2Vla1RpbWVzKCl7aWYodGhpcy5zZWVrRXJyb3JffHx0aGlzLmN1cnJlbnRTZWVrXyE9PXVuZGVmaW5lZClyZXR1cm4gbmV3IE1hcCgpO3JldHVybiB0aGlzLnNlZWtUaW1lc187fQotcHJvY2Vzc1ZpZGVvUmVuZGVyVGltZSh2aWRlb1JlbmRlclRpbWUpe2lmKHRoaXMucGxheVN0YXJ0XyE9PXVuZGVmaW5lZCYmdGhpcy50aW1lVG9WaWRlb1BsYXlfPT09dW5kZWZpbmVkKXt0aGlzLnRpbWVUb1ZpZGVvUGxheV89dmlkZW9SZW5kZXJUaW1lLXRoaXMucGxheVN0YXJ0Xzt9fQotcHJvY2Vzc0F1ZGlvUmVuZGVyVGltZShhdWRpb1JlbmRlclRpbWUpe2lmKHRoaXMucGxheVN0YXJ0XyE9PXVuZGVmaW5lZCYmdGhpcy50aW1lVG9BdWRpb1BsYXlfPT09dW5kZWZpbmVkKXt0aGlzLnRpbWVUb0F1ZGlvUGxheV89YXVkaW9SZW5kZXJUaW1lLXRoaXMucGxheVN0YXJ0Xzt9fQotcHJvY2Vzc1ZpZGVvRnJhbWVzRHJvcHBlZChjb3VudCl7dGhpcy5kcm9wcGVkRnJhbWVDb3VudF8rPWNvdW50O30KLXByb2Nlc3NEb1NlZWsodGFyZ2V0LHN0YXJ0VGltZSl7aWYodGhpcy5jdXJyZW50U2Vla18hPT11bmRlZmluZWQpe3RoaXMuc2Vla0Vycm9yXz10cnVlO3JldHVybjt9Ci10aGlzLmN1cnJlbnRTZWVrXz17dGFyZ2V0LHN0YXJ0VGltZX07dGhpcy5zZWVrVGltZXNfLnNldCh0YXJnZXQsdGhpcy5jdXJyZW50U2Vla18pO30KLXByb2Nlc3NPblBpcGVsaW5lU2Vla2VkKHRhcmdldCx0aW1lKXtpZih0aGlzLnNlZWtFcnJvcl8pcmV0dXJuO2NvbnN0IGN1cnJlbnRTZWVrPXRoaXMuY3VycmVudFNlZWtfO2lmKGN1cnJlbnRTZWVrPT09dW5kZWZpbmVkKXtyZXR1cm47fQotaWYoY3VycmVudFNlZWsudGFyZ2V0IT09dGFyZ2V0KXt0aGlzLnNlZWtFcnJvcl89dHJ1ZTtyZXR1cm47fQotaWYoY3VycmVudFNlZWsucGlwZWxpbmVTZWVrVGltZSE9PXVuZGVmaW5lZCl7dGhpcy5zZWVrRXJyb3JfPXRydWU7cmV0dXJuO30KLWN1cnJlbnRTZWVrLnBpcGVsaW5lU2Vla1RpbWU9dGltZS1jdXJyZW50U2Vlay5zdGFydFRpbWU7fQotcHJvY2Vzc0J1ZmZlcmluZ0hhdmVFbm91Z2godGltZSl7aWYodGhpcy5zZWVrRXJyb3JfKXJldHVybjtjb25zdCBjdXJyZW50U2Vlaz10aGlzLmN1cnJlbnRTZWVrXztpZihjdXJyZW50U2Vlaz09PXVuZGVmaW5lZCl7cmV0dXJuO30KLWlmKGN1cnJlbnRTZWVrLnBpcGVsaW5lU2Vla1RpbWU9PT11bmRlZmluZWQpe3JldHVybjt9Ci1jdXJyZW50U2Vlay5zZWVrVGltZT10aW1lLWN1cnJlbnRTZWVrLnN0YXJ0VGltZTt0aGlzLmN1cnJlbnRTZWVrXz11bmRlZmluZWQ7fQotcHJvY2Vzc09uRW5kZWQocGxheUVuZFRpbWUsZHVyYXRpb24pe2lmKHRoaXMucGxheVN0YXJ0Xz09PXVuZGVmaW5lZClyZXR1cm47aWYodGhpcy5zZWVrVGltZXNfLnNpemUhPT0wfHx0aGlzLnNlZWtFcnJvcl8pcmV0dXJuO2lmKHRoaXMuYnVmZmVyaW5nVGltZV8hPT11bmRlZmluZWQpcmV0dXJuO2R1cmF0aW9uPXRyLmIuY29udmVydFVuaXQoZHVyYXRpb24sdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk5PTkUsdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk1JTExJKTtjb25zdCBwbGF5VGltZT1wbGF5RW5kVGltZS10aGlzLnBsYXlTdGFydF87aWYodGhpcy50aW1lVG9WaWRlb1BsYXlfIT09dW5kZWZpbmVkKXt0aGlzLmJ1ZmZlcmluZ1RpbWVfPXBsYXlUaW1lLWR1cmF0aW9uLXRoaXMudGltZVRvVmlkZW9QbGF5Xzt9ZWxzZSBpZih0aGlzLnRpbWVUb0F1ZGlvUGxheSE9PXVuZGVmaW5lZCl7dGhpcy5idWZmZXJpbmdUaW1lXz1wbGF5VGltZS1kdXJhdGlvbi10aGlzLnRpbWVUb0F1ZGlvUGxheV87fX0KLWFkZE1ldHJpY1RvSGlzdG9ncmFtcyhoaXN0b2dyYW1zKXt0aGlzLmFkZFNhbXBsZV8oaGlzdG9ncmFtcywndGltZV90b192aWRlb19wbGF5Jyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLHRoaXMudGltZVRvVmlkZW9QbGF5KTt0aGlzLmFkZFNhbXBsZV8oaGlzdG9ncmFtcywndGltZV90b19hdWRpb19wbGF5Jyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLHRoaXMudGltZVRvQXVkaW9QbGF5KTt0aGlzLmFkZFNhbXBsZV8oaGlzdG9ncmFtcywnZHJvcHBlZF9mcmFtZV9jb3VudCcsdHIuYi5Vbml0LmJ5TmFtZS5jb3VudF9zbWFsbGVySXNCZXR0ZXIsdGhpcy5kcm9wcGVkRnJhbWVDb3VudCk7Zm9yKGNvbnN0W2tleSx2YWx1ZV1vZiB0aGlzLnNlZWtUaW1lcy5lbnRyaWVzKCkpe2NvbnN0IGtleVN0cmluZz1rZXkudG9TdHJpbmcoKS5yZXBsYWNlKCcuJywnXycpO3RoaXMuYWRkU2FtcGxlXyhoaXN0b2dyYW1zLCdwaXBlbGluZV9zZWVrX3RpbWVfJytrZXlTdHJpbmcsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcix2YWx1ZS5waXBlbGluZVNlZWtUaW1lKTt0aGlzLmFkZFNhbXBsZV8oaGlzdG9ncmFtcywnc2Vla190aW1lXycra2V5U3RyaW5nLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsdmFsdWUuc2Vla1RpbWUpO30KLXRoaXMuYWRkU2FtcGxlXyhoaXN0b2dyYW1zLCdidWZmZXJpbmdfdGltZScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcix0aGlzLmJ1ZmZlcmluZ1RpbWUpO30KLWFkZFNhbXBsZV8oaGlzdG9ncmFtcyxuYW1lLHVuaXQsc2FtcGxlKXtpZihzYW1wbGU9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IGhpc3RvZ3JhbT1oaXN0b2dyYW1zLmdldEhpc3RvZ3JhbU5hbWVkKG5hbWUpO2lmKGhpc3RvZ3JhbT09PXVuZGVmaW5lZCl7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0obmFtZSx1bml0LHNhbXBsZSk7fWVsc2V7aGlzdG9ncmFtLmFkZFNhbXBsZShzYW1wbGUpO319fQotdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihtZWRpYU1ldHJpYyk7cmV0dXJue21lZGlhTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzJyxmdW5jdGlvbigpe2Z1bmN0aW9uIHNhbXBsZUV4Y2VwdGlvbk1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBoaXN0PW5ldyB0ci52Lkhpc3RvZ3JhbSgnZm9vJyx0ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcik7aGlzdC5hZGRTYW1wbGUoOSk7aGlzdC5hZGRTYW1wbGUoOTEse2JhcjpuZXcgdHIudi5kLkdlbmVyaWNTZXQoW3toZWxsbzo0Mn1dKX0pO2Zvcihjb25zdCBleHBlY3RhdGlvbiBvZiBtb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zKXtpZihleHBlY3RhdGlvbiBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLlJlc3BvbnNlRXhwZWN0YXRpb24pe31lbHNlIGlmKGV4cGVjdGF0aW9uIGluc3RhbmNlb2YgdHIubW9kZWwudW0uQW5pbWF0aW9uRXhwZWN0YXRpb24pe31lbHNlIGlmKGV4cGVjdGF0aW9uIGluc3RhbmNlb2YgdHIubW9kZWwudW0uSWRsZUV4cGVjdGF0aW9uKXt9ZWxzZSBpZihleHBlY3RhdGlvbiBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLkxvYWRFeHBlY3RhdGlvbil7fX0KLWNvbnN0IGNocm9tZUhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtmb3IoY29uc3RbcGlkLHByb2Nlc3Ndb2YgT2JqZWN0LmVudHJpZXMobW9kZWwucHJvY2Vzc2VzKSl7fQotaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oaGlzdCk7dGhyb3cgbmV3IEVycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3InKTt9Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHNhbXBsZUV4Y2VwdGlvbk1ldHJpYyk7cmV0dXJue3NhbXBsZUV4Y2VwdGlvbk1ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcycsZnVuY3Rpb24oKXtmdW5jdGlvbiBzYW1wbGVNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgaGlzdD1uZXcgdHIudi5IaXN0b2dyYW0oJ2ZvbycsdHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIpO2hpc3QuYWRkU2FtcGxlKDkpO2hpc3QuYWRkU2FtcGxlKDkxLHtiYXI6bmV3IHRyLnYuZC5HZW5lcmljU2V0KFt7aGVsbG86NDJ9XSl9KTtmb3IoY29uc3QgZXhwZWN0YXRpb24gb2YgbW9kZWwudXNlck1vZGVsLmV4cGVjdGF0aW9ucyl7aWYoZXhwZWN0YXRpb24gaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5SZXNwb25zZUV4cGVjdGF0aW9uKXt9ZWxzZSBpZihleHBlY3RhdGlvbiBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLkFuaW1hdGlvbkV4cGVjdGF0aW9uKXt9ZWxzZSBpZihleHBlY3RhdGlvbiBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLklkbGVFeHBlY3RhdGlvbil7fWVsc2UgaWYoZXhwZWN0YXRpb24gaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5Mb2FkRXhwZWN0YXRpb24pe319Ci1jb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7Zm9yKGNvbnN0W3BpZCxwcm9jZXNzXW9mIE9iamVjdC5lbnRyaWVzKG1vZGVsLnByb2Nlc3Nlcykpe30KLWhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGhpc3QpO30KLXRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIoc2FtcGxlTWV0cmljKTtyZXR1cm57c2FtcGxlTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzJyxmdW5jdGlvbigpe2NvbnN0IEhBTkRMRV9JTlBVVF9FVkVOVF9USVRMRT0nV2ViVmlld0ltcGw6OmhhbmRsZUlucHV0RXZlbnQnO2Z1bmN0aW9uIGZpbmRQcmVjZWRpbmdFdmVudHNfKGV2ZW50c0EsZXZlbnRzQil7Y29uc3QgZXZlbnRzPW5ldyBNYXAoKTtsZXQgZXZlbnRzQkluZGV4PTA7Zm9yKGNvbnN0IGV2ZW50QSBvZiBldmVudHNBKXtmb3IoO2V2ZW50c0JJbmRleDxldmVudHNCLmxlbmd0aDtldmVudHNCSW5kZXgrKyl7aWYoZXZlbnRzQltldmVudHNCSW5kZXhdLnN0YXJ0PmV2ZW50QS5zdGFydClicmVhazt9Ci1pZihldmVudHNCSW5kZXg+MCl7ZXZlbnRzLnNldChldmVudEEsZXZlbnRzQltldmVudHNCSW5kZXgtMV0pO319Ci1yZXR1cm4gZXZlbnRzO30KLWZ1bmN0aW9uIGZpbmRGb2xsb3dpbmdFdmVudHNfKGV2ZW50c0EsZXZlbnRzQil7Y29uc3QgZXZlbnRzPW5ldyBNYXAoKTtsZXQgZXZlbnRzQkluZGV4PTA7Zm9yKGNvbnN0IGV2ZW50QSBvZiBldmVudHNBKXtmb3IoO2V2ZW50c0JJbmRleDxldmVudHNCLmxlbmd0aDtldmVudHNCSW5kZXgrKyl7aWYoZXZlbnRzQltldmVudHNCSW5kZXhdLnN0YXJ0Pj1ldmVudEEuc3RhcnQpYnJlYWs7fQotaWYoZXZlbnRzQkluZGV4Pj0wJiZldmVudHNCSW5kZXg8ZXZlbnRzQi5sZW5ndGgpe2V2ZW50cy5zZXQoZXZlbnRBLGV2ZW50c0JbZXZlbnRzQkluZGV4XSk7fX0KLXJldHVybiBldmVudHM7fQotZnVuY3Rpb24gZ2V0U3BhTmF2aWdhdGlvblN0YXJ0Q2FuZGlkYXRlc18ocmVuZGVyZXJIZWxwZXIsYnJvd3NlckhlbHBlcil7Y29uc3QgaXNOYXZTdGFydEV2ZW50PWU9PntpZihlLnRpdGxlPT09SEFORExFX0lOUFVUX0VWRU5UX1RJVExFJiZlLmFyZ3MudHlwZT09PSdNb3VzZVVwJyl7cmV0dXJuIHRydWU7fQotcmV0dXJuIGUudGl0bGU9PT0nTmF2aWdhdGlvbkNvbnRyb2xsZXJJbXBsOjpHb1RvSW5kZXgnO307cmV0dXJuWy4uLnJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQuc2xpY2VHcm91cC5nZXREZXNjZW5kYW50RXZlbnRzKCksLi4uYnJvd3NlckhlbHBlci5tYWluVGhyZWFkLnNsaWNlR3JvdXAuZ2V0RGVzY2VuZGFudEV2ZW50cygpXS5maWx0ZXIoaXNOYXZTdGFydEV2ZW50KTt9Ci1mdW5jdGlvbiBnZXRTcGFOYXZpZ2F0aW9uRXZlbnRzXyhyZW5kZXJlckhlbHBlcil7Y29uc3QgaXNOYXZFdmVudD1lPT5lLmNhdGVnb3J5PT09J2JsaW5rJyYmZS50aXRsZT09PSdGcmFtZUxvYWRlcjo6dXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbic7cmV0dXJuWy4uLnJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQuc2xpY2VHcm91cC5nZXREZXNjZW5kYW50RXZlbnRzKCldLmZpbHRlcihpc05hdkV2ZW50KTt9Ci1mdW5jdGlvbiBnZXRJbnB1dExhdGVuY3lFdmVudHNfKGJyb3dzZXJIZWxwZXIpe2NvbnN0IGlzSW5wdXRMYXRlbmN5RXZlbnQ9ZT0+ZS50aXRsZT09PSdJbnB1dExhdGVuY3k6Ok1vdXNlVXAnO3JldHVybiBicm93c2VySGVscGVyLmdldEFsbEFzeW5jU2xpY2VzTWF0Y2hpbmcoaXNJbnB1dExhdGVuY3lFdmVudCk7fQotZnVuY3Rpb24gZ2V0SW5wdXRMYXRlbmN5RXZlbnRCeUJpbmRJZE1hcF8oYnJvd3NlckhlbHBlcil7Y29uc3QgaW5wdXRMYXRlbmN5RXZlbnRCeUJpbmRJZE1hcD1uZXcgTWFwKCk7Zm9yKGNvbnN0IGV2ZW50IG9mIGdldElucHV0TGF0ZW5jeUV2ZW50c18oYnJvd3NlckhlbHBlcikpe2lucHV0TGF0ZW5jeUV2ZW50QnlCaW5kSWRNYXAuc2V0KGV2ZW50LmFyZ3MuZGF0YS50cmFjZV9pZCxldmVudCk7fQotcmV0dXJuIGlucHV0TGF0ZW5jeUV2ZW50QnlCaW5kSWRNYXA7fQotZnVuY3Rpb24gZ2V0U3BhTmF2aWdhdGlvbkV2ZW50VG9OYXZpZ2F0aW9uU3RhcnRNYXBfKHJlbmRlcmVySGVscGVyLGJyb3dzZXJIZWxwZXIpe2NvbnN0IG1haW5UaHJlYWQ9cmVuZGVyZXJIZWxwZXIubWFpblRocmVhZDtjb25zdCBzcGFOYXZFdmVudHM9Z2V0U3BhTmF2aWdhdGlvbkV2ZW50c18ocmVuZGVyZXJIZWxwZXIpO2NvbnN0IG5hdlN0YXJ0Q2FuZGlkYXRlcz1nZXRTcGFOYXZpZ2F0aW9uU3RhcnRDYW5kaWRhdGVzXyhyZW5kZXJlckhlbHBlcixicm93c2VySGVscGVyKS5zb3J0KHRyLmltcG9ydGVyLmNvbXBhcmVFdmVudHMpO2NvbnN0IHNwYU5hdkV2ZW50VG9OYXZTdGFydENhbmRpZGF0ZU1hcD1maW5kUHJlY2VkaW5nRXZlbnRzXyhzcGFOYXZFdmVudHMsbmF2U3RhcnRDYW5kaWRhdGVzKTtjb25zdCBpbnB1dExhdGVuY3lFdmVudEJ5QmluZElkTWFwPWdldElucHV0TGF0ZW5jeUV2ZW50QnlCaW5kSWRNYXBfKGJyb3dzZXJIZWxwZXIpO2NvbnN0IHNwYU5hdkV2ZW50VG9OYXZTdGFydEV2ZW50TWFwPW5ldyBNYXAoKTtmb3IoY29uc3Rbc3BhTmF2RXZlbnQsbmF2U3RhcnRDYW5kaWRhdGVdb2YKLXNwYU5hdkV2ZW50VG9OYXZTdGFydENhbmRpZGF0ZU1hcCl7aWYobmF2U3RhcnRDYW5kaWRhdGUudGl0bGU9PT1IQU5ETEVfSU5QVVRfRVZFTlRfVElUTEUpe2NvbnN0IGlucHV0TGF0ZW5jeVNsaWNlPWlucHV0TGF0ZW5jeUV2ZW50QnlCaW5kSWRNYXAuZ2V0KE51bWJlcihuYXZTdGFydENhbmRpZGF0ZS5wYXJlbnRTbGljZS5iaW5kSWQpKTtpZihpbnB1dExhdGVuY3lTbGljZSl7c3BhTmF2RXZlbnRUb05hdlN0YXJ0RXZlbnRNYXAuc2V0KHNwYU5hdkV2ZW50LGlucHV0TGF0ZW5jeVNsaWNlKTt9fWVsc2V7c3BhTmF2RXZlbnRUb05hdlN0YXJ0RXZlbnRNYXAuc2V0KHNwYU5hdkV2ZW50LG5hdlN0YXJ0Q2FuZGlkYXRlKTt9fQotcmV0dXJuIHNwYU5hdkV2ZW50VG9OYXZTdGFydEV2ZW50TWFwO30KLWZ1bmN0aW9uIGdldEZpcnN0UGFpbnRFdmVudHNfKHJlbmRlcmVySGVscGVyKXtjb25zdCBpc0ZpcnN0UGFpbnRFdmVudD1lPT5lLmNhdGVnb3J5PT09J2JsaW5rJyYmZS50aXRsZT09PSdQYWludExheWVyQ29tcG9zaXRvcjo6dXBkYXRlSWZOZWVkZWRSZWN1cnNpdmUnO3JldHVyblsuLi5yZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLnNsaWNlR3JvdXAuZ2V0RGVzY2VuZGFudEV2ZW50cygpXS5maWx0ZXIoaXNGaXJzdFBhaW50RXZlbnQpO30KLWZ1bmN0aW9uIGdldFNwYU5hdmlnYXRpb25FdmVudFRvRmlyc3RQYWludEV2ZW50TWFwXyhyZW5kZXJlckhlbHBlcil7Y29uc3Qgc3BhTmF2RXZlbnRzPWdldFNwYU5hdmlnYXRpb25FdmVudHNfKHJlbmRlcmVySGVscGVyKS5zb3J0KHRyLmltcG9ydGVyLmNvbXBhcmVFdmVudHMpO2NvbnN0IGZpcnN0UGFpbnRFdmVudHM9Z2V0Rmlyc3RQYWludEV2ZW50c18ocmVuZGVyZXJIZWxwZXIpLnNvcnQodHIuaW1wb3J0ZXIuY29tcGFyZUV2ZW50cyk7cmV0dXJuIGZpbmRGb2xsb3dpbmdFdmVudHNfKHNwYU5hdkV2ZW50cyxmaXJzdFBhaW50RXZlbnRzKTt9Ci1mdW5jdGlvbiBmaW5kU3BhTmF2aWdhdGlvbnNPblJlbmRlcmVyKHJlbmRlcmVySGVscGVyLGJyb3dzZXJIZWxwZXIpe2NvbnN0IHNwYU5hdkV2ZW50VG9OYXZTdGFydE1hcD1nZXRTcGFOYXZpZ2F0aW9uRXZlbnRUb05hdmlnYXRpb25TdGFydE1hcF8ocmVuZGVyZXJIZWxwZXIsYnJvd3NlckhlbHBlcik7Y29uc3Qgc3BhTmF2RXZlbnRUb0ZpcnN0UGFpbnRFdmVudE1hcD1nZXRTcGFOYXZpZ2F0aW9uRXZlbnRUb0ZpcnN0UGFpbnRFdmVudE1hcF8ocmVuZGVyZXJIZWxwZXIpO2NvbnN0IHNwYU5hdmlnYXRpb25zPVtdO2Zvcihjb25zdFtzcGFOYXZFdmVudCxuYXZTdGFydEV2ZW50XW9mCi1zcGFOYXZFdmVudFRvTmF2U3RhcnRNYXApe2lmKHNwYU5hdkV2ZW50VG9GaXJzdFBhaW50RXZlbnRNYXAuaGFzKHNwYU5hdkV2ZW50KSl7Y29uc3QgZmlyc3RQYWludEV2ZW50PXNwYU5hdkV2ZW50VG9GaXJzdFBhaW50RXZlbnRNYXAuZ2V0KHNwYU5hdkV2ZW50KTtjb25zdCBpc05hdlN0YXJ0QXN5bmNTbGljZT1uYXZTdGFydEV2ZW50IGluc3RhbmNlb2YgdHIubW9kZWwuQXN5bmNTbGljZTtzcGFOYXZpZ2F0aW9ucy5wdXNoKHtuYXZTdGFydENhbmRpZGF0ZXM6e2lucHV0TGF0ZW5jeUFzeW5jU2xpY2U6aXNOYXZTdGFydEFzeW5jU2xpY2U/bmF2U3RhcnRFdmVudDp1bmRlZmluZWQsZ29Ub0luZGV4U2xpY2U6aXNOYXZTdGFydEFzeW5jU2xpY2U/dW5kZWZpbmVkOm5hdlN0YXJ0RXZlbnR9LGZpcnN0UGFpbnRFdmVudCx1cmw6c3BhTmF2RXZlbnQuYXJncy51cmx9KTt9fQotcmV0dXJuIHNwYU5hdmlnYXRpb25zO30KLXJldHVybntmaW5kU3BhTmF2aWdhdGlvbnNPblJlbmRlcmVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnNoJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGdlbmVyYXRlVGltZUJyZWFrZG93blRyZWUobWFpblRocmVhZCxyYW5nZU9mSW50ZXJlc3QsZ2V0RXZlbnRTdGFydCxnZXRFdmVudER1cmF0aW9uLGdldEV2ZW50U2VsZlRpbWUpe2lmKG1haW5UaHJlYWQ9PT1udWxsKXJldHVybjtjb25zdCBicmVha2Rvd25UcmVlPXt9O2Zvcihjb25zdCB0aXRsZSBvZgotdHIuZS5jaHJvbWUuQ2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIuQUxMX1RJVExFUyl7YnJlYWtkb3duVHJlZVt0aXRsZV09e3RvdGFsOjAsZXZlbnRzOnt9fTt9Ci1mb3IoY29uc3QgZXZlbnQgb2YgbWFpblRocmVhZC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2NvbnN0IGV2ZW50U3RhcnQ9Z2V0RXZlbnRTdGFydChldmVudCk7Y29uc3QgZXZlbnREdXJhdGlvbj1nZXRFdmVudER1cmF0aW9uKGV2ZW50KTtjb25zdCBldmVudFNlbGZUaW1lPWdldEV2ZW50U2VsZlRpbWUoZXZlbnQpO2NvbnN0IGV2ZW50RW5kPWV2ZW50U3RhcnQrZXZlbnREdXJhdGlvbjtpZighcmFuZ2VPZkludGVyZXN0LmludGVyc2VjdHNFeHBsaWNpdFJhbmdlRXhjbHVzaXZlKGV2ZW50U3RhcnQsZXZlbnRFbmQpKXtjb250aW51ZTt9Ci1pZihldmVudFNlbGZUaW1lPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IHRpdGxlPXRyLmUuY2hyb21lLkNocm9tZVVzZXJGcmllbmRseUNhdGVnb3J5RHJpdmVyLmZyb21FdmVudChldmVudCk7bGV0IHRpbWVJbnRlcnNlY3Rpb25SYXRpbz0wO2lmKGV2ZW50RHVyYXRpb24+MCl7dGltZUludGVyc2VjdGlvblJhdGlvPXJhbmdlT2ZJbnRlcmVzdC5maW5kRXhwbGljaXRJbnRlcnNlY3Rpb25EdXJhdGlvbihldmVudFN0YXJ0LGV2ZW50RW5kKS9ldmVudER1cmF0aW9uO30KLWNvbnN0IHY4UnVudGltZT1ldmVudC5hcmdzWydydW50aW1lLWNhbGwtc3RhdCddO2lmKHY4UnVudGltZSE9PXVuZGVmaW5lZCl7Y29uc3QgdjhSdW50aW1lT2JqZWN0PUpTT04ucGFyc2UodjhSdW50aW1lKTtmb3IoY29uc3QgcnVudGltZUNhbGwgaW4gdjhSdW50aW1lT2JqZWN0KXtpZih2OFJ1bnRpbWVPYmplY3RbcnVudGltZUNhbGxdLmxlbmd0aD09PTIpe2lmKGJyZWFrZG93blRyZWUudjhfcnVudGltZS5ldmVudHNbcnVudGltZUNhbGxdPT09dW5kZWZpbmVkKXticmVha2Rvd25UcmVlLnY4X3J1bnRpbWUuZXZlbnRzW3J1bnRpbWVDYWxsXT0wO30KLWNvbnN0IHJ1bnRpbWVUaW1lPXRyLmIuVW5pdC50aW1lc3RhbXBGcm9tVXModjhSdW50aW1lT2JqZWN0W3J1bnRpbWVDYWxsXVsxXSp0aW1lSW50ZXJzZWN0aW9uUmF0aW8pO2JyZWFrZG93blRyZWUudjhfcnVudGltZS50b3RhbCs9cnVudGltZVRpbWU7YnJlYWtkb3duVHJlZS52OF9ydW50aW1lLmV2ZW50c1tydW50aW1lQ2FsbF0rPXJ1bnRpbWVUaW1lO319fQotY29uc3QgYXBwcm94aW1hdGVkU2VsZlRpbWVDb250cmlidXRpb249ZXZlbnRTZWxmVGltZSp0aW1lSW50ZXJzZWN0aW9uUmF0aW87YnJlYWtkb3duVHJlZVt0aXRsZV0udG90YWwrPWFwcHJveGltYXRlZFNlbGZUaW1lQ29udHJpYnV0aW9uO2lmKGJyZWFrZG93blRyZWVbdGl0bGVdLmV2ZW50c1tldmVudC50aXRsZV09PT11bmRlZmluZWQpe2JyZWFrZG93blRyZWVbdGl0bGVdLmV2ZW50c1tldmVudC50aXRsZV09MDt9Ci1icmVha2Rvd25UcmVlW3RpdGxlXS5ldmVudHNbZXZlbnQudGl0bGVdKz1hcHByb3hpbWF0ZWRTZWxmVGltZUNvbnRyaWJ1dGlvbjt9Ci1yZXR1cm4gYnJlYWtkb3duVHJlZTt9Ci1mdW5jdGlvbiBhZGRJZGxlQW5kQmxvY2tCeU5ldHdvcmtCcmVha2Rvd25fKGJyZWFrZG93blRyZWUsbWFpblRocmVhZEV2ZW50cyxuZXR3b3JrRXZlbnRzLHJhbmdlT2ZJbnRlcmVzdCl7bGV0IGlkbGVSYW5nZXM9W3JhbmdlT2ZJbnRlcmVzdF07Y29uc3QgbWFpblRocmVhZEV2ZW50UmFuZ2VzPXRyLmIubWF0aC5jb252ZXJ0RXZlbnRzVG9SYW5nZXMobWFpblRocmVhZEV2ZW50cyk7Y29uc3QgbmV0d29ya0V2ZW50UmFuZ2VzPXRyLmIubWF0aC5jb252ZXJ0RXZlbnRzVG9SYW5nZXMobmV0d29ya0V2ZW50cyk7Y29uc3QgZXZlbnRSYW5nZXM9bWFpblRocmVhZEV2ZW50UmFuZ2VzLmNvbmNhdChuZXR3b3JrRXZlbnRSYW5nZXMpO2V2ZW50UmFuZ2VzLnNvcnQoKGEsYik9PmEubWluLWIubWluKTtmb3IoY29uc3QgZXZlbnRSYW5nZSBvZiBldmVudFJhbmdlcyl7aWYoIWV2ZW50UmFuZ2V8fGV2ZW50UmFuZ2UuaXNFbXB0eXx8ZXZlbnRSYW5nZS5kdXJhdGlvbjwwKXt0aHJvdyBuZXcgRXJyb3IoJ1JhbmdlIGlzIGludmFsaWQnKTt9Ci1jb25zdCBuZXdMYXN0SWRsZVJhbmdlcz10ci5iLm1hdGguUmFuZ2UuZmluZERpZmZlcmVuY2UoaWRsZVJhbmdlc1tpZGxlUmFuZ2VzLmxlbmd0aC0xXSxldmVudFJhbmdlKTtpZGxlUmFuZ2VzLnBvcCgpO2lkbGVSYW5nZXM9aWRsZVJhbmdlcy5jb25jYXQobmV3TGFzdElkbGVSYW5nZXMpO2lmKGlkbGVSYW5nZXMubGVuZ3RoPT09MClicmVhazt9Ci1jb25zdCB0b3RhbEZyZWVEdXJhdGlvbj10ci5iLm1hdGguU3RhdGlzdGljcy5zdW0oaWRsZVJhbmdlcyxyYW5nZT0+cmFuZ2UuZHVyYXRpb24pO2JyZWFrZG93blRyZWUuaWRsZT17dG90YWw6dG90YWxGcmVlRHVyYXRpb24sZXZlbnRzOnt9fTtsZXQgdG90YWxCbG9ja2VkRHVyYXRpb249cmFuZ2VPZkludGVyZXN0LmR1cmF0aW9uO2Zvcihjb25zdCBjb21wb25lbnQgb2YgT2JqZWN0LnZhbHVlcyhicmVha2Rvd25UcmVlKSl7dG90YWxCbG9ja2VkRHVyYXRpb24tPWNvbXBvbmVudC50b3RhbDt9Ci1icmVha2Rvd25UcmVlLmJsb2NrZWRfb25fbmV0d29yaz17dG90YWw6dG90YWxCbG9ja2VkRHVyYXRpb24sZXZlbnRzOnt9fTt9Ci1mdW5jdGlvbiBnZW5lcmF0ZVdhbGxDbG9ja1RpbWVCcmVha2Rvd25UcmVlKG1haW5UaHJlYWQsbmV0d29ya0V2ZW50cyxyYW5nZU9mSW50ZXJlc3Qpe2Z1bmN0aW9uIGdldEV2ZW50U3RhcnQoZSl7cmV0dXJuIGUuc3RhcnQ7fQotZnVuY3Rpb24gZ2V0RXZlbnREdXJhdGlvbihlKXtyZXR1cm4gZS5kdXJhdGlvbjt9Ci1mdW5jdGlvbiBnZXRFdmVudFNlbGZUaW1lKGUpe3JldHVybiBlLnNlbGZUaW1lO30KLWNvbnN0IGJyZWFrZG93blRyZWU9Z2VuZXJhdGVUaW1lQnJlYWtkb3duVHJlZShtYWluVGhyZWFkLHJhbmdlT2ZJbnRlcmVzdCxnZXRFdmVudFN0YXJ0LGdldEV2ZW50RHVyYXRpb24sZ2V0RXZlbnRTZWxmVGltZSk7Y29uc3QgbWFpblRocmVhZEV2ZW50c0luUmFuZ2U9dHIubW9kZWwuaGVscGVycy5nZXRTbGljZXNJbnRlcnNlY3RpbmdSYW5nZShyYW5nZU9mSW50ZXJlc3QsbWFpblRocmVhZC5zbGljZUdyb3VwLnRvcExldmVsU2xpY2VzKTthZGRJZGxlQW5kQmxvY2tCeU5ldHdvcmtCcmVha2Rvd25fKGJyZWFrZG93blRyZWUsbWFpblRocmVhZEV2ZW50c0luUmFuZ2UsbmV0d29ya0V2ZW50cyxyYW5nZU9mSW50ZXJlc3QpO3JldHVybiBicmVha2Rvd25UcmVlO30KLWZ1bmN0aW9uIGdlbmVyYXRlQ3B1VGltZUJyZWFrZG93blRyZWUobWFpblRocmVhZCxyYW5nZU9mSW50ZXJlc3RDcHVUaW1lKXtmdW5jdGlvbiBnZXRFdmVudFN0YXJ0KGUpe3JldHVybiBlLmNwdVN0YXJ0O30KLWZ1bmN0aW9uIGdldEV2ZW50RHVyYXRpb24oZSl7cmV0dXJuIGUuY3B1RHVyYXRpb247fQotZnVuY3Rpb24gZ2V0RXZlbnRTZWxmVGltZShlKXtyZXR1cm4gZS5jcHVTZWxmVGltZTt9Ci1yZXR1cm4gZ2VuZXJhdGVUaW1lQnJlYWtkb3duVHJlZShtYWluVGhyZWFkLHJhbmdlT2ZJbnRlcmVzdENwdVRpbWUsZ2V0RXZlbnRTdGFydCxnZXRFdmVudER1cmF0aW9uLGdldEV2ZW50U2VsZlRpbWUpO30KLXJldHVybntnZW5lcmF0ZVRpbWVCcmVha2Rvd25UcmVlLGdlbmVyYXRlV2FsbENsb2NrVGltZUJyZWFrZG93blRyZWUsZ2VuZXJhdGVDcHVUaW1lQnJlYWtkb3duVHJlZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtjb25zdCBMT05HX1RBU0tfVEhSRVNIT0xEX01TPTUwO2NvbnN0IHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyPXRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXI7Y29uc3QgUmVsYXRlZEV2ZW50U2V0PXRyLnYuZC5SZWxhdGVkRXZlbnRTZXQ7Y29uc3QgaGFzQ2F0ZWdvcnlBbmROYW1lPXRyLm1ldHJpY3Muc2guaGFzQ2F0ZWdvcnlBbmROYW1lO2NvbnN0IEV2ZW50RmluZGVyVXRpbHM9dHIuZS5jaHJvbWUuRXZlbnRGaW5kZXJVdGlscztmdW5jdGlvbiBnZXROZXR3b3JrRXZlbnRzSW5SYW5nZShwcm9jZXNzLHJhbmdlKXtjb25zdCBuZXR3b3JrRXZlbnRzPVtdO2Zvcihjb25zdCB0aHJlYWQgb2YgT2JqZWN0LnZhbHVlcyhwcm9jZXNzLnRocmVhZHMpKXtjb25zdCB0aHJlYWRIZWxwZXI9bmV3IHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lVGhyZWFkSGVscGVyKHRocmVhZCk7Y29uc3QgZXZlbnRzPXRocmVhZEhlbHBlci5nZXROZXR3b3JrRXZlbnRzKCk7Zm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50cyl7aWYocmFuZ2UuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUoZXZlbnQuc3RhcnQsZXZlbnQuZW5kKSl7bmV0d29ya0V2ZW50cy5wdXNoKGV2ZW50KTt9fX0KLXJldHVybiBuZXR3b3JrRXZlbnRzO30KLWZ1bmN0aW9uIGNyZWF0ZUJyZWFrZG93bkRpYWdub3N0aWMoYnJlYWtkb3duVHJlZSl7Y29uc3QgYnJlYWtkb3duRGlhZ25vc3RpYz1uZXcgdHIudi5kLkJyZWFrZG93bigpO2JyZWFrZG93bkRpYWdub3N0aWMuY29sb3JTY2hlbWU9dHIudi5kLkNPTE9SX1NDSEVNRV9DSFJPTUVfVVNFUl9GUklFTkRMWV9DQVRFR09SWV9EUklWRVI7Zm9yKGNvbnN0IGxhYmVsIGluIGJyZWFrZG93blRyZWUpe2JyZWFrZG93bkRpYWdub3N0aWMuc2V0KGxhYmVsLGJyZWFrZG93blRyZWVbbGFiZWxdLnRvdGFsKTt9Ci1yZXR1cm4gYnJlYWtkb3duRGlhZ25vc3RpYzt9Ci1jb25zdCBMT0FESU5HX01FVFJJQ19CT1VOREFSSUVTPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoMCwxZTMsMjApLmFkZExpbmVhckJpbnMoM2UzLDIwKS5hZGRFeHBvbmVudGlhbEJpbnMoMjBlMywyMCk7Y29uc3QgVElNRV9UT19JTlRFUkFDVElWRV9CT1VOREFSSUVTPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVFeHBvbmVudGlhbCgxLDQwZTMsMzUpLmFkZEV4cG9uZW50aWFsQmlucyg4MGUzLDE1KTtjb25zdCBTVU1NQVJZX09QVElPTlM9e2F2Zzp0cnVlLGNvdW50OmZhbHNlLG1heDp0cnVlLG1pbjp0cnVlLHN0ZDp0cnVlLHN1bTpmYWxzZSx9O2Z1bmN0aW9uIGZpbmRGcmFtZUxvYWRlclNuYXBzaG90QXQocmVuZGVyZXJIZWxwZXIsZnJhbWVJZFJlZix0cyl7Y29uc3Qgb2JqZWN0cz1yZW5kZXJlckhlbHBlci5wcm9jZXNzLm9iamVjdHM7Y29uc3QgZnJhbWVMb2FkZXJJbnN0YW5jZXM9b2JqZWN0cy5pbnN0YW5jZXNCeVR5cGVOYW1lXy5GcmFtZUxvYWRlcjtpZihmcmFtZUxvYWRlckluc3RhbmNlcz09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2xldCBzbmFwc2hvdDtmb3IoY29uc3QgaW5zdGFuY2Ugb2YgZnJhbWVMb2FkZXJJbnN0YW5jZXMpe2lmKCFpbnN0YW5jZS5pc0FsaXZlQXQodHMpKWNvbnRpbnVlO2NvbnN0IG1heWJlU25hcHNob3Q9aW5zdGFuY2UuZ2V0U25hcHNob3RBdCh0cyk7aWYoZnJhbWVJZFJlZiE9PW1heWJlU25hcHNob3QuYXJncy5mcmFtZS5pZF9yZWYpY29udGludWU7c25hcHNob3Q9bWF5YmVTbmFwc2hvdDt9Ci1yZXR1cm4gc25hcHNob3Q7fQotZnVuY3Rpb24gZmluZEFsbEV2ZW50cyhyZW5kZXJlckhlbHBlcixjYXRlZ29yeSx0aXRsZSl7Y29uc3QgdGFyZ2V0RXZlbnRzPVtdO2Zvcihjb25zdCBldiBvZiByZW5kZXJlckhlbHBlci5wcm9jZXNzLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoIWhhc0NhdGVnb3J5QW5kTmFtZShldixjYXRlZ29yeSx0aXRsZSkpY29udGludWU7dGFyZ2V0RXZlbnRzLnB1c2goZXYpO30KLXJldHVybiB0YXJnZXRFdmVudHM7fQotY29uc3QgVVJMX0JMQUNLTElTVD1bJycsJ2Fib3V0OmJsYW5rJywnZGF0YTp0ZXh0L2h0bWwscGx1Z2lucGxhY2Vob2xkZXJkYXRhJywnY2hyb21lLWVycm9yOi8vY2hyb21ld2ViZGF0YS8nXTtmdW5jdGlvbiBzaG91bGRJZ25vcmVVUkwodXJsKXtyZXR1cm4gVVJMX0JMQUNLTElTVC5pbmNsdWRlcyh1cmwpO30KLWZ1bmN0aW9uIGNvbGxlY3RUaW1lVG9FdmVudChjYXRlZ29yeSxldmVudE5hbWUscmVuZGVyZXJIZWxwZXIsZnJhbWVUb05hdlN0YXJ0RXZlbnRzKXtjb25zdCB0YXJnZXRFdmVudHM9ZmluZEFsbEV2ZW50cyhyZW5kZXJlckhlbHBlcixjYXRlZ29yeSxldmVudE5hbWUpO2NvbnN0IHNhbXBsZXM9W107Zm9yKGNvbnN0IGV2IG9mIHRhcmdldEV2ZW50cyl7aWYocmVuZGVyZXJIZWxwZXIuaXNUZWxlbWV0cnlJbnRlcm5hbEV2ZW50KGV2KSljb250aW51ZTtjb25zdCBmcmFtZUlkUmVmPWV2LmFyZ3MuZnJhbWU7Y29uc3Qgc25hcHNob3Q9ZmluZEZyYW1lTG9hZGVyU25hcHNob3RBdChyZW5kZXJlckhlbHBlcixmcmFtZUlkUmVmLGV2LnN0YXJ0KTtpZihzbmFwc2hvdD09PXVuZGVmaW5lZHx8IXNuYXBzaG90LmFyZ3MuaXNMb2FkaW5nTWFpbkZyYW1lKWNvbnRpbnVlO2NvbnN0IHVybD1zbmFwc2hvdC5hcmdzLmRvY3VtZW50TG9hZGVyVVJMO2lmKHNob3VsZElnbm9yZVVSTCh1cmwpKWNvbnRpbnVlO2NvbnN0IG5hdmlnYXRpb25TdGFydEV2ZW50PUV2ZW50RmluZGVyVXRpbHMuZmluZExhc3RFdmVudFN0YXJ0aW5nT25PckJlZm9yZVRpbWVzdGFtcChmcmFtZVRvTmF2U3RhcnRFdmVudHMuZ2V0KGZyYW1lSWRSZWYpfHxbXSxldi5zdGFydCk7aWYobmF2aWdhdGlvblN0YXJ0RXZlbnQ9PT11bmRlZmluZWQpY29udGludWU7Y29uc3QgbmF2U3RhcnRUb0V2ZW50UmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKG5hdmlnYXRpb25TdGFydEV2ZW50LnN0YXJ0LGV2LnN0YXJ0KTtjb25zdCBuZXR3b3JrRXZlbnRzPWdldE5ldHdvcmtFdmVudHNJblJhbmdlKHJlbmRlcmVySGVscGVyLnByb2Nlc3MsbmF2U3RhcnRUb0V2ZW50UmFuZ2UpO2NvbnN0IGJyZWFrZG93blRyZWU9dHIubWV0cmljcy5zaC5nZW5lcmF0ZVdhbGxDbG9ja1RpbWVCcmVha2Rvd25UcmVlKHJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQsbmV0d29ya0V2ZW50cyxuYXZTdGFydFRvRXZlbnRSYW5nZSk7c2FtcGxlcy5wdXNoKHt2YWx1ZTpuYXZTdGFydFRvRXZlbnRSYW5nZS5kdXJhdGlvbixicmVha2Rvd25UcmVlLGRpYWdub3N0aWNzOnticmVha2Rvd246Y3JlYXRlQnJlYWtkb3duRGlhZ25vc3RpYyhicmVha2Rvd25UcmVlKSx1cmw6bmV3IHRyLnYuZC5HZW5lcmljU2V0KFt1cmxdKSxTdGFydDpuZXcgUmVsYXRlZEV2ZW50U2V0KG5hdmlnYXRpb25TdGFydEV2ZW50KSxFbmQ6bmV3IFJlbGF0ZWRFdmVudFNldChldil9fSk7fQotcmV0dXJuIHNhbXBsZXM7fQotZnVuY3Rpb24gYWRkRmlyc3RNZWFuaW5nZnVsUGFpbnRTYW1wbGUoc2FtcGxlcyxyZW5kZXJlckhlbHBlcixuYXZpZ2F0aW9uU3RhcnQsZm1wTWFya2VyRXZlbnQsdXJsKXtjb25zdCBuYXZTdGFydFRvRk1QUmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKG5hdmlnYXRpb25TdGFydC5zdGFydCxmbXBNYXJrZXJFdmVudC5zdGFydCk7Y29uc3QgbmV0d29ya0V2ZW50cz1nZXROZXR3b3JrRXZlbnRzSW5SYW5nZShyZW5kZXJlckhlbHBlci5wcm9jZXNzLG5hdlN0YXJ0VG9GTVBSYW5nZSk7Y29uc3QgdGltZVRvRmlyc3RNZWFuaW5nZnVsUGFpbnQ9bmF2U3RhcnRUb0ZNUFJhbmdlLmR1cmF0aW9uO2NvbnN0IGJyZWFrZG93blRyZWU9dHIubWV0cmljcy5zaC5nZW5lcmF0ZVdhbGxDbG9ja1RpbWVCcmVha2Rvd25UcmVlKHJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQsbmV0d29ya0V2ZW50cyxuYXZTdGFydFRvRk1QUmFuZ2UpO3NhbXBsZXMucHVzaCh7dmFsdWU6dGltZVRvRmlyc3RNZWFuaW5nZnVsUGFpbnQsYnJlYWtkb3duVHJlZSxkaWFnbm9zdGljczp7YnJlYWtkb3duOmNyZWF0ZUJyZWFrZG93bkRpYWdub3N0aWMoYnJlYWtkb3duVHJlZSksc3RhcnQ6bmV3IFJlbGF0ZWRFdmVudFNldChuYXZpZ2F0aW9uU3RhcnQpLGVuZDpuZXcgUmVsYXRlZEV2ZW50U2V0KGZtcE1hcmtlckV2ZW50KSxpbmZvczpuZXcgdHIudi5kLkdlbmVyaWNTZXQoW3t1cmwscGlkOnJlbmRlcmVySGVscGVyLnBpZCxzdGFydDpuYXZpZ2F0aW9uU3RhcnQuc3RhcnQsZm1wOmZtcE1hcmtlckV2ZW50LnN0YXJ0LH1dKSx9fSk7fQotZnVuY3Rpb24gYWRkRmlyc3RNZWFuaW5nZnVsUGFpbnRDcHVUaW1lU2FtcGxlKHNhbXBsZXMscmVuZGVyZXJIZWxwZXIsbmF2aWdhdGlvblN0YXJ0LGZtcE1hcmtlckV2ZW50LHVybCl7Y29uc3QgbmF2U3RhcnRUb0ZNUENwdVJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShuYXZpZ2F0aW9uU3RhcnQuY3B1U3RhcnQsZm1wTWFya2VyRXZlbnQuY3B1U3RhcnQpO2NvbnN0IG1haW5UaHJlYWRDcHVUaW1lPWdldE1haW5UaHJlYWRDcHVUaW1lKHJlbmRlcmVySGVscGVyLG5hdlN0YXJ0VG9GTVBDcHVSYW5nZSk7Y29uc3QgYnJlYWtkb3duVHJlZT10ci5tZXRyaWNzLnNoLmdlbmVyYXRlQ3B1VGltZUJyZWFrZG93blRyZWUocmVuZGVyZXJIZWxwZXIubWFpblRocmVhZCxuYXZTdGFydFRvRk1QQ3B1UmFuZ2UpO3NhbXBsZXMucHVzaCh7dmFsdWU6bWFpblRocmVhZENwdVRpbWUsYnJlYWtkb3duVHJlZSxkaWFnbm9zdGljczp7YnJlYWtkb3duOmNyZWF0ZUJyZWFrZG93bkRpYWdub3N0aWMoYnJlYWtkb3duVHJlZSksc3RhcnQ6bmV3IFJlbGF0ZWRFdmVudFNldChuYXZpZ2F0aW9uU3RhcnQpLGVuZDpuZXcgUmVsYXRlZEV2ZW50U2V0KGZtcE1hcmtlckV2ZW50KSxpbmZvczpuZXcgdHIudi5kLkdlbmVyaWNTZXQoW3t1cmwscGlkOnJlbmRlcmVySGVscGVyLnBpZCxzdGFydDpuYXZpZ2F0aW9uU3RhcnQuc3RhcnQsZm1wOmZtcE1hcmtlckV2ZW50LnN0YXJ0LH1dKSx9fSk7fQotZnVuY3Rpb24gZ2V0TWFpblRocmVhZENwdVRpbWUocmVuZGVyZXJIZWxwZXIscmFuZ2VPZkludGVyZXN0KXtsZXQgbWFpblRocmVhZENwdVRpbWU9MDtmb3IoY29uc3Qgc2xpY2Ugb2YgcmVuZGVyZXJIZWxwZXIubWFpblRocmVhZC5zbGljZUdyb3VwLnRvcExldmVsU2xpY2VzKXtpZighc2xpY2UuY3B1RHVyYXRpb24pY29udGludWU7Y29uc3Qgc2xpY2VSYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2Uoc2xpY2UuY3B1U3RhcnQsc2xpY2UuY3B1U3RhcnQrc2xpY2UuY3B1RHVyYXRpb24pO2NvbnN0IGludGVyc2VjdGlvbj1yYW5nZU9mSW50ZXJlc3QuZmluZEludGVyc2VjdGlvbihzbGljZVJhbmdlKTttYWluVGhyZWFkQ3B1VGltZSs9aW50ZXJzZWN0aW9uLmR1cmF0aW9uO30KLXJldHVybiBtYWluVGhyZWFkQ3B1VGltZTt9Ci1mdW5jdGlvbiBkZWNvcmF0ZUludGVyYWN0aXZpdHlTYW1wbGVXaXRoRGlhZ25vc3RpY3NfKHJlbmRlcmVySGVscGVyLGV2ZW50VGltZXN0YW1wLG5hdmlnYXRpb25TdGFydEV2ZW50LGZpcnN0TWVhbmluZ2Z1bFBhaW50VGltZSxkb21Db250ZW50TG9hZGVkRW5kVGltZSx1cmwpe2lmKGV2ZW50VGltZXN0YW1wPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7Y29uc3QgbmF2aWdhdGlvblN0YXJ0VGltZT1uYXZpZ2F0aW9uU3RhcnRFdmVudC5zdGFydDtjb25zdCBuYXZTdGFydFRvRXZlbnRUaW1lUmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKG5hdmlnYXRpb25TdGFydFRpbWUsZXZlbnRUaW1lc3RhbXApO2NvbnN0IG5ldHdvcmtFdmVudHM9Z2V0TmV0d29ya0V2ZW50c0luUmFuZ2UocmVuZGVyZXJIZWxwZXIucHJvY2VzcyxuYXZTdGFydFRvRXZlbnRUaW1lUmFuZ2UpO2NvbnN0IGJyZWFrZG93blRyZWU9dHIubWV0cmljcy5zaC5nZW5lcmF0ZVdhbGxDbG9ja1RpbWVCcmVha2Rvd25UcmVlKHJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQsbmV0d29ya0V2ZW50cyxuYXZTdGFydFRvRXZlbnRUaW1lUmFuZ2UpO2NvbnN0IGJyZWFrZG93bkRpYWdub3N0aWM9Y3JlYXRlQnJlYWtkb3duRGlhZ25vc3RpYyhicmVha2Rvd25UcmVlKTtyZXR1cm57dmFsdWU6bmF2U3RhcnRUb0V2ZW50VGltZVJhbmdlLmR1cmF0aW9uLGRpYWdub3N0aWNzOnRyLnYuZC5EaWFnbm9zdGljTWFwLmZyb21PYmplY3QoeydTdGFydCc6bmV3IFJlbGF0ZWRFdmVudFNldChuYXZpZ2F0aW9uU3RhcnRFdmVudCksJ05hdmlnYXRpb24gaW5mb3MnOm5ldyB0ci52LmQuR2VuZXJpY1NldChbe3VybCxwaWQ6cmVuZGVyZXJIZWxwZXIucGlkLG5hdmlnYXRpb25TdGFydFRpbWUsZmlyc3RNZWFuaW5nZnVsUGFpbnRUaW1lLGRvbUNvbnRlbnRMb2FkZWRFbmRUaW1lLGV2ZW50VGltZXN0YW1wLH1dKSwnQnJlYWtkb3duIG9mIFtuYXZTdGFydCwgZXZlbnRUaW1lc3RhbXBdJzpicmVha2Rvd25EaWFnbm9zdGljLH0pLH07fQotZnVuY3Rpb24gY29sbGVjdExvYWRpbmdNZXRyaWNzRm9yUmVuZGVyZXIocmVuZGVyZXJIZWxwZXIpe2NvbnN0IG1vZGVsPXJlbmRlcmVySGVscGVyLm1vZGVsSGVscGVyLm1vZGVsO2NvbnN0IGZyYW1lVG9OYXZTdGFydEV2ZW50cz1FdmVudEZpbmRlclV0aWxzLmdldFNvcnRlZE1haW5UaHJlYWRFdmVudHNCeUZyYW1lKHJlbmRlcmVySGVscGVyLCduYXZpZ2F0aW9uU3RhcnQnLCdibGluay51c2VyX3RpbWluZycpO2NvbnN0IGZpcnN0UGFpbnRTYW1wbGVzPWNvbGxlY3RUaW1lVG9FdmVudCgnbG9hZGluZycsJ2ZpcnN0UGFpbnQnLHJlbmRlcmVySGVscGVyLGZyYW1lVG9OYXZTdGFydEV2ZW50cyk7Y29uc3QgZmlyc3RDb250ZW50ZnVsUGFpbnRTYW1wbGVzPWNvbGxlY3RUaW1lVG9FdmVudCgnbG9hZGluZycsJ2ZpcnN0Q29udGVudGZ1bFBhaW50JyxyZW5kZXJlckhlbHBlcixmcmFtZVRvTmF2U3RhcnRFdmVudHMpO2NvbnN0IG9uTG9hZFNhbXBsZXM9Y29sbGVjdFRpbWVUb0V2ZW50KCdibGluay51c2VyX3RpbWluZycsJ2xvYWRFdmVudFN0YXJ0JyxyZW5kZXJlckhlbHBlcixmcmFtZVRvTmF2U3RhcnRFdmVudHMpO2NvbnN0IGludGVyYWN0aXZlU2FtcGxlcz1bXTtjb25zdCBmaXJzdENwdUlkbGVTYW1wbGVzPVtdO2NvbnN0IGZpcnN0TWVhbmluZ2Z1bFBhaW50U2FtcGxlcz1bXTtjb25zdCBmaXJzdE1lYW5pbmdmdWxQYWludENwdVRpbWVTYW1wbGVzPVtdO2Zvcihjb25zdCBleHBlY3RhdGlvbiBvZiBtb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zKXtpZighKGV4cGVjdGF0aW9uIGluc3RhbmNlb2YgdHIubW9kZWwudW0uTG9hZEV4cGVjdGF0aW9uKSljb250aW51ZTtpZihzaG91bGRJZ25vcmVVUkwoZXhwZWN0YXRpb24udXJsKSljb250aW51ZTtpZihleHBlY3RhdGlvbi5yZW5kZXJQcm9jZXNzLnBpZCE9PXJlbmRlcmVySGVscGVyLnBpZCljb250aW51ZTtpZihleHBlY3RhdGlvbi5mbXBFdmVudCE9PXVuZGVmaW5lZCl7YWRkRmlyc3RNZWFuaW5nZnVsUGFpbnRTYW1wbGUoZmlyc3RNZWFuaW5nZnVsUGFpbnRTYW1wbGVzLHJlbmRlcmVySGVscGVyLGV4cGVjdGF0aW9uLm5hdmlnYXRpb25TdGFydCxleHBlY3RhdGlvbi5mbXBFdmVudCxleHBlY3RhdGlvbi51cmwpO2FkZEZpcnN0TWVhbmluZ2Z1bFBhaW50Q3B1VGltZVNhbXBsZShmaXJzdE1lYW5pbmdmdWxQYWludENwdVRpbWVTYW1wbGVzLHJlbmRlcmVySGVscGVyLGV4cGVjdGF0aW9uLm5hdmlnYXRpb25TdGFydCxleHBlY3RhdGlvbi5mbXBFdmVudCxleHBlY3RhdGlvbi51cmwpO30KLWlmKGV4cGVjdGF0aW9uLmZpcnN0Q3B1SWRsZVRpbWUhPT11bmRlZmluZWQpe2ZpcnN0Q3B1SWRsZVNhbXBsZXMucHVzaChkZWNvcmF0ZUludGVyYWN0aXZpdHlTYW1wbGVXaXRoRGlhZ25vc3RpY3NfKHJlbmRlcmVySGVscGVyLGV4cGVjdGF0aW9uLmZpcnN0Q3B1SWRsZVRpbWUsZXhwZWN0YXRpb24ubmF2aWdhdGlvblN0YXJ0LGV4cGVjdGF0aW9uLmZtcEV2ZW50LnN0YXJ0LGV4cGVjdGF0aW9uLmRvbUNvbnRlbnRMb2FkZWRFbmRFdmVudC5zdGFydCxleHBlY3RhdGlvbi51cmwpKTt9Ci1pZihleHBlY3RhdGlvbi50aW1lVG9JbnRlcmFjdGl2ZSE9PXVuZGVmaW5lZCl7aW50ZXJhY3RpdmVTYW1wbGVzLnB1c2goZGVjb3JhdGVJbnRlcmFjdGl2aXR5U2FtcGxlV2l0aERpYWdub3N0aWNzXyhyZW5kZXJlckhlbHBlcixleHBlY3RhdGlvbi50aW1lVG9JbnRlcmFjdGl2ZSxleHBlY3RhdGlvbi5uYXZpZ2F0aW9uU3RhcnQsZXhwZWN0YXRpb24uZm1wRXZlbnQuc3RhcnQsZXhwZWN0YXRpb24uZG9tQ29udGVudExvYWRlZEVuZEV2ZW50LnN0YXJ0LGV4cGVjdGF0aW9uLnVybCkpO319Ci1yZXR1cm57Zmlyc3RQYWludFNhbXBsZXMsZmlyc3RDb250ZW50ZnVsUGFpbnRTYW1wbGVzLG9uTG9hZFNhbXBsZXMsZmlyc3RNZWFuaW5nZnVsUGFpbnRTYW1wbGVzLGZpcnN0TWVhbmluZ2Z1bFBhaW50Q3B1VGltZVNhbXBsZXMsZmlyc3RDcHVJZGxlU2FtcGxlcyxpbnRlcmFjdGl2ZVNhbXBsZXMsfTt9Ci1mdW5jdGlvbiBhZGRTYW1wbGVzVG9IaXN0b2dyYW0oc2FtcGxlcyxoaXN0b2dyYW0saGlzdG9ncmFtcyl7Zm9yKGNvbnN0IHNhbXBsZSBvZiBzYW1wbGVzKXtoaXN0b2dyYW0uYWRkU2FtcGxlKHNhbXBsZS52YWx1ZSxzYW1wbGUuZGlhZ25vc3RpY3MpO2lmKGhpc3RvZ3JhbS5uYW1lIT09J3RpbWVUb0ZpcnN0Q29udGVudGZ1bFBhaW50Jyljb250aW51ZTtpZighc2FtcGxlLmJyZWFrZG93blRyZWUpY29udGludWU7Zm9yKGNvbnN0W2NhdGVnb3J5LGJyZWFrZG93bl1vZiBPYmplY3QuZW50cmllcyhzYW1wbGUuYnJlYWtkb3duVHJlZSkpe2NvbnN0IHJlbGF0ZWROYW1lPWAke2hpc3RvZ3JhbS5uYW1lfToke2NhdGVnb3J5fWA7bGV0IHJlbGF0ZWRIaXN0PWhpc3RvZ3JhbXMuZ2V0SGlzdG9ncmFtc05hbWVkKHJlbGF0ZWROYW1lKVswXTtpZighcmVsYXRlZEhpc3Qpe3JlbGF0ZWRIaXN0PWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKHJlbGF0ZWROYW1lLGhpc3RvZ3JhbS51bml0LFtdLHtiaW5Cb3VuZGFyaWVzOkxPQURJTkdfTUVUUklDX0JPVU5EQVJJRVMsc3VtbWFyeU9wdGlvbnM6e2NvdW50OmZhbHNlLG1heDpmYWxzZSxtaW46ZmFsc2Usc3VtOmZhbHNlLH0sfSk7bGV0IHJlbGF0ZWROYW1lcz1oaXN0b2dyYW0uZGlhZ25vc3RpY3MuZ2V0KCdicmVha2Rvd24nKTtpZighcmVsYXRlZE5hbWVzKXtyZWxhdGVkTmFtZXM9bmV3IHRyLnYuZC5SZWxhdGVkTmFtZU1hcCgpO2hpc3RvZ3JhbS5kaWFnbm9zdGljcy5zZXQoJ2JyZWFrZG93bicscmVsYXRlZE5hbWVzKTt9Ci1yZWxhdGVkTmFtZXMuc2V0KGNhdGVnb3J5LHJlbGF0ZWROYW1lKTt9Ci1yZWxhdGVkSGlzdC5hZGRTYW1wbGUoYnJlYWtkb3duLnRvdGFsLHticmVha2Rvd246dHIudi5kLkJyZWFrZG93bi5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhicmVha2Rvd24uZXZlbnRzKSksfSk7fX19Ci1mdW5jdGlvbiBsb2FkaW5nTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IGZpcnN0UGFpbnRIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ3RpbWVUb0ZpcnN0UGFpbnQnLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLHtiaW5Cb3VuZGFyaWVzOkxPQURJTkdfTUVUUklDX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J3RpbWUgdG8gZmlyc3QgcGFpbnQnLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtjb25zdCBmaXJzdENvbnRlbnRmdWxQYWludEhpc3RvZ3JhbT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgndGltZVRvRmlyc3RDb250ZW50ZnVsUGFpbnQnLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLHtiaW5Cb3VuZGFyaWVzOkxPQURJTkdfTUVUUklDX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J3RpbWUgdG8gZmlyc3QgY29udGVudGZ1bCBwYWludCcsc3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO2NvbnN0IG9uTG9hZEhpc3RvZ3JhbT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgndGltZVRvT25sb2FkJyx0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSx7YmluQm91bmRhcmllczpMT0FESU5HX01FVFJJQ19CT1VOREFSSUVTLGRlc2NyaXB0aW9uOid0aW1lIHRvIG9ubG9hZC4gJysnVGhpcyBpcyB0ZW1wb3JhcnkgbWV0cmljIHVzZWQgZm9yIFBDdjEvdjIgc2FuaXR5IGNoZWNraW5nJyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7Y29uc3QgZmlyc3RNZWFuaW5nZnVsUGFpbnRIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ3RpbWVUb0ZpcnN0TWVhbmluZ2Z1bFBhaW50Jyx0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSx7YmluQm91bmRhcmllczpMT0FESU5HX01FVFJJQ19CT1VOREFSSUVTLGRlc2NyaXB0aW9uOid0aW1lIHRvIGZpcnN0IG1lYW5pbmdmdWwgcGFpbnQnLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtjb25zdCBmaXJzdE1lYW5pbmdmdWxQYWludENwdVRpbWVIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ2NwdVRpbWVUb0ZpcnN0TWVhbmluZ2Z1bFBhaW50Jyx0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSx7YmluQm91bmRhcmllczpMT0FESU5HX01FVFJJQ19CT1VOREFSSUVTLGRlc2NyaXB0aW9uOidDUFUgdGltZSB0byBmaXJzdCBtZWFuaW5nZnVsIHBhaW50JyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7Y29uc3QgdGltZVRvSW50ZXJhY3RpdmVIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ3RpbWVUb0ludGVyYWN0aXZlJyx0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSx7YmluQm91bmRhcmllczpUSU1FX1RPX0lOVEVSQUNUSVZFX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J1RpbWUgdG8gSW50ZXJhY3RpdmUnLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtjb25zdCB0aW1lVG9GaXJzdENwdUlkbGVIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ3RpbWVUb0ZpcnN0Q3B1SWRsZScsdGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2JpbkJvdW5kYXJpZXM6VElNRV9UT19JTlRFUkFDVElWRV9CT1VOREFSSUVTLGRlc2NyaXB0aW9uOidUaW1lIHRvIEZpcnN0IENQVSBJZGxlJyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2Zvcihjb25zdCBwaWQgaW4gY2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVycyl7Y29uc3QgcmVuZGVyZXJIZWxwZXI9Y2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVyc1twaWRdO2lmKHJlbmRlcmVySGVscGVyLmlzQ2hyb21lVHJhY2luZ1VJKWNvbnRpbnVlO2NvbnN0IHNhbXBsZXNTZXQ9Y29sbGVjdExvYWRpbmdNZXRyaWNzRm9yUmVuZGVyZXIocmVuZGVyZXJIZWxwZXIpO2FkZFNhbXBsZXNUb0hpc3RvZ3JhbShzYW1wbGVzU2V0LmZpcnN0UGFpbnRTYW1wbGVzLGZpcnN0UGFpbnRIaXN0b2dyYW0saGlzdG9ncmFtcyk7YWRkU2FtcGxlc1RvSGlzdG9ncmFtKHNhbXBsZXNTZXQuZmlyc3RDb250ZW50ZnVsUGFpbnRTYW1wbGVzLGZpcnN0Q29udGVudGZ1bFBhaW50SGlzdG9ncmFtLGhpc3RvZ3JhbXMpO2FkZFNhbXBsZXNUb0hpc3RvZ3JhbShzYW1wbGVzU2V0Lm9uTG9hZFNhbXBsZXMsb25Mb2FkSGlzdG9ncmFtLGhpc3RvZ3JhbXMpO2FkZFNhbXBsZXNUb0hpc3RvZ3JhbShzYW1wbGVzU2V0LmZpcnN0TWVhbmluZ2Z1bFBhaW50U2FtcGxlcyxmaXJzdE1lYW5pbmdmdWxQYWludEhpc3RvZ3JhbSxoaXN0b2dyYW1zKTthZGRTYW1wbGVzVG9IaXN0b2dyYW0oc2FtcGxlc1NldC5maXJzdE1lYW5pbmdmdWxQYWludENwdVRpbWVTYW1wbGVzLGZpcnN0TWVhbmluZ2Z1bFBhaW50Q3B1VGltZUhpc3RvZ3JhbSxoaXN0b2dyYW1zKTthZGRTYW1wbGVzVG9IaXN0b2dyYW0oc2FtcGxlc1NldC5pbnRlcmFjdGl2ZVNhbXBsZXMsdGltZVRvSW50ZXJhY3RpdmVIaXN0b2dyYW0saGlzdG9ncmFtcyk7YWRkU2FtcGxlc1RvSGlzdG9ncmFtKHNhbXBsZXNTZXQuZmlyc3RDcHVJZGxlU2FtcGxlcyx0aW1lVG9GaXJzdENwdUlkbGVIaXN0b2dyYW0saGlzdG9ncmFtcyk7fX0KLXRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIobG9hZGluZ01ldHJpYyk7cmV0dXJue2xvYWRpbmdNZXRyaWMsZ2V0TmV0d29ya0V2ZW50c0luUmFuZ2UsY29sbGVjdExvYWRpbmdNZXRyaWNzRm9yUmVuZGVyZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MnLGZ1bmN0aW9uKCl7Y29uc3QgU1BBX05BVklHQVRJT05fU1RBUlRfVE9fRklSU1RfUEFJTlRfRFVSQVRJT05fQklOX0JPVU5EQVJZPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVFeHBvbmVudGlhbCgxLDEwMDAsNTApO2Z1bmN0aW9uIHNwYU5hdmlnYXRpb25NZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgaGlzdG9ncmFtPW5ldyB0ci52Lkhpc3RvZ3JhbSgnc3BhTmF2aWdhdGlvblN0YXJ0VG9GcER1cmF0aW9uJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFNQQV9OQVZJR0FUSU9OX1NUQVJUX1RPX0ZJUlNUX1BBSU5UX0RVUkFUSU9OX0JJTl9CT1VOREFSWSk7aGlzdG9ncmFtLmRlc2NyaXB0aW9uPSdMYXRlbmN5IGJldHdlZW4gdGhlIGlucHV0IGV2ZW50IGNhdXNpbmcnKycgYSBTUEEgbmF2aWdhdGlvbiBhbmQgdGhlIGZpcnN0IHBhaW50IGV2ZW50IGFmdGVyIGl0JztoaXN0b2dyYW0uY3VzdG9taXplU3VtbWFyeU9wdGlvbnMoe2NvdW50OmZhbHNlLHN1bTpmYWxzZSx9KTtjb25zdCBtb2RlbEhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtpZighbW9kZWxIZWxwZXIpe3JldHVybjt9Ci1jb25zdCByZW5kZXJlckhlbHBlcnM9bW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzO2lmKCFyZW5kZXJlckhlbHBlcnMpe3JldHVybjt9Ci1jb25zdCBicm93c2VySGVscGVyPW1vZGVsSGVscGVyLmJyb3dzZXJIZWxwZXI7Zm9yKGNvbnN0IHJlbmRlcmVySGVscGVyIG9mIE9iamVjdC52YWx1ZXMocmVuZGVyZXJIZWxwZXJzKSl7Y29uc3Qgc3BhTmF2aWdhdGlvbnM9dHIubWV0cmljcy5maW5kU3BhTmF2aWdhdGlvbnNPblJlbmRlcmVyKHJlbmRlcmVySGVscGVyLGJyb3dzZXJIZWxwZXIpO2Zvcihjb25zdCBzcGFOYXYgb2Ygc3BhTmF2aWdhdGlvbnMpe2xldCBiZWdpblRzPTA7aWYoc3BhTmF2Lm5hdlN0YXJ0Q2FuZGlkYXRlcy5pbnB1dExhdGVuY3lBc3luY1NsaWNlKXtjb25zdCBiZWdpbkRhdGE9c3BhTmF2Lm5hdlN0YXJ0Q2FuZGlkYXRlcy5pbnB1dExhdGVuY3lBc3luY1NsaWNlLmFyZ3MuZGF0YTtiZWdpblRzPW1vZGVsLmNvbnZlcnRUaW1lc3RhbXBUb01vZGVsVGltZSgndHJhY2VFdmVudENsb2NrJyxiZWdpbkRhdGEuSU5QVVRfRVZFTlRfTEFURU5DWV9CRUdJTl9SV0hfQ09NUE9ORU5ULnRpbWUpO31lbHNle2JlZ2luVHM9c3BhTmF2Lm5hdlN0YXJ0Q2FuZGlkYXRlcy5nb1RvSW5kZXhTbGljZS5zdGFydDt9Ci1jb25zdCByYW5nZU9mSW50ZXJlc3Q9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKGJlZ2luVHMsc3BhTmF2LmZpcnN0UGFpbnRFdmVudC5zdGFydCk7Y29uc3QgbmV0d29ya0V2ZW50cz10ci5tZXRyaWNzLnNoLmdldE5ldHdvcmtFdmVudHNJblJhbmdlKHJlbmRlcmVySGVscGVyLnByb2Nlc3MscmFuZ2VPZkludGVyZXN0KTtjb25zdCBicmVha2Rvd25EaWN0PXRyLm1ldHJpY3Muc2guZ2VuZXJhdGVXYWxsQ2xvY2tUaW1lQnJlYWtkb3duVHJlZShyZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLG5ldHdvcmtFdmVudHMscmFuZ2VPZkludGVyZXN0KTtjb25zdCBicmVha2Rvd25EaWFnbm9zdGljPW5ldyB0ci52LmQuQnJlYWtkb3duKCk7YnJlYWtkb3duRGlhZ25vc3RpYy5jb2xvclNjaGVtZT10ci52LmQuQ09MT1JfU0NIRU1FX0NIUk9NRV9VU0VSX0ZSSUVORExZX0NBVEVHT1JZX0RSSVZFUjtmb3IoY29uc3QgbGFiZWwgaW4gYnJlYWtkb3duRGljdCl7YnJlYWtkb3duRGlhZ25vc3RpYy5zZXQobGFiZWwscGFyc2VJbnQoYnJlYWtkb3duRGljdFtsYWJlbF0udG90YWwqMWUzKS8xZTMpO30KLWhpc3RvZ3JhbS5hZGRTYW1wbGUocmFuZ2VPZkludGVyZXN0LmR1cmF0aW9uLHsnQnJlYWtkb3duIG9mIFtuYXZTdGFydCwgZmlyc3RQYWludF0nOmJyZWFrZG93bkRpYWdub3N0aWMsJ1N0YXJ0JzpuZXcgdHIudi5kLlJlbGF0ZWRFdmVudFNldChzcGFOYXYubmF2aWdhdGlvblN0YXJ0KSwnRW5kJzpuZXcgdHIudi5kLlJlbGF0ZWRFdmVudFNldChzcGFOYXYuZmlyc3RQYWludEV2ZW50KSwnTmF2aWdhdGlvbiBpbmZvcyc6bmV3IHRyLnYuZC5HZW5lcmljU2V0KFt7dXJsOnNwYU5hdi51cmwscGlkOnJlbmRlcmVySGVscGVyLnBpZCxuYXZTdGFydDpiZWdpblRzLGZpcnN0UGFpbnQ6c3BhTmF2LmZpcnN0UGFpbnRFdmVudC5zdGFydH1dKSx9KTt9fQotaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oaGlzdG9ncmFtKTt9Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHNwYU5hdmlnYXRpb25NZXRyaWMpO3JldHVybntzcGFOYXZpZ2F0aW9uTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnNoJyxmdW5jdGlvbigpe2NvbnN0IExBVEVOQ1lfQk9VTkRTPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoMCwyMCwxMDApO2Z1bmN0aW9uIGNsb2NrU3luY0xhdGVuY3lNZXRyaWModmFsdWVzLG1vZGVsKXtjb25zdCBkb21haW5zPUFycmF5LmZyb20obW9kZWwuY2xvY2tTeW5jTWFuYWdlci5kb21haW5zU2Vlbikuc29ydCgpO2ZvcihsZXQgaT0wO2k8ZG9tYWlucy5sZW5ndGg7aSsrKXtmb3IobGV0IGo9aSsxO2o8ZG9tYWlucy5sZW5ndGg7aisrKXtjb25zdCBsYXRlbmN5PW1vZGVsLmNsb2NrU3luY01hbmFnZXIuZ2V0VGltZVRyYW5zZm9ybWVyRXJyb3IoZG9tYWluc1tpXSxkb21haW5zW2pdKTtjb25zdCBoaXN0PW5ldyB0ci52Lkhpc3RvZ3JhbSgnY2xvY2tfc3luY19sYXRlbmN5XycrCi1kb21haW5zW2ldLnRvTG93ZXJDYXNlKCkrJ190b18nK2RvbWFpbnNbal0udG9Mb3dlckNhc2UoKSx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLExBVEVOQ1lfQk9VTkRTKTtoaXN0LmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHthdmc6dHJ1ZSxjb3VudDpmYWxzZSxtYXg6ZmFsc2UsbWluOmZhbHNlLHN0ZDpmYWxzZSxzdW06ZmFsc2UsfSk7aGlzdC5kZXNjcmlwdGlvbj0nQ2xvY2sgc3luYyBsYXRlbmN5IGZvciBkb21haW4gJytkb21haW5zW2ldKycgdG8gZG9tYWluICcrZG9tYWluc1tqXTtoaXN0LmFkZFNhbXBsZShsYXRlbmN5KTt2YWx1ZXMuYWRkSGlzdG9ncmFtKGhpc3QpO319fQotdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihjbG9ja1N5bmNMYXRlbmN5TWV0cmljKTtyZXR1cm57Y2xvY2tTeW5jTGF0ZW5jeU1ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtjb25zdCBDUFVfVElNRV9QRVJDRU5UQUdFX0JPVU5EQVJJRVM9dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUV4cG9uZW50aWFsKDAuMDEsNTAsMjAwKTtmdW5jdGlvbiBjcHVUaW1lTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwsb3B0X29wdGlvbnMpe2xldCByYW5nZU9mSW50ZXJlc3Q9bW9kZWwuYm91bmRzO2lmKG9wdF9vcHRpb25zJiZvcHRfb3B0aW9ucy5yYW5nZU9mSW50ZXJlc3Qpe3JhbmdlT2ZJbnRlcmVzdD1vcHRfb3B0aW9ucy5yYW5nZU9mSW50ZXJlc3Q7fWVsc2V7Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2lmKGNocm9tZUhlbHBlcil7Y29uc3QgY2hyb21lQm91bmRzPWNocm9tZUhlbHBlci5jaHJvbWVCb3VuZHM7aWYoY2hyb21lQm91bmRzKXtyYW5nZU9mSW50ZXJlc3Q9Y2hyb21lQm91bmRzO319fQotbGV0IGFsbFByb2Nlc3NDcHVUaW1lPTA7Zm9yKGNvbnN0IHBpZCBpbiBtb2RlbC5wcm9jZXNzZXMpe2NvbnN0IHByb2Nlc3M9bW9kZWwucHJvY2Vzc2VzW3BpZF07aWYodHIubW9kZWwuaGVscGVycy5DaHJvbWVSZW5kZXJlckhlbHBlci5pc1RyYWNpbmdQcm9jZXNzKHByb2Nlc3MpKXtjb250aW51ZTt9Ci1sZXQgcHJvY2Vzc0NwdVRpbWU9MDtmb3IoY29uc3QgdGlkIGluIHByb2Nlc3MudGhyZWFkcyl7Y29uc3QgdGhyZWFkPXByb2Nlc3MudGhyZWFkc1t0aWRdO2xldCB0aHJlYWRDcHVUaW1lPTA7dGhyZWFkLnNsaWNlR3JvdXAudG9wTGV2ZWxTbGljZXMuZm9yRWFjaChmdW5jdGlvbihzbGljZSl7aWYoc2xpY2UuZHVyYXRpb249PT0wKXJldHVybjtpZighc2xpY2UuY3B1RHVyYXRpb24pcmV0dXJuO2NvbnN0IHNsaWNlUmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHNsaWNlLnN0YXJ0LHNsaWNlLmVuZCk7Y29uc3QgaW50ZXJzZWN0aW9uPXJhbmdlT2ZJbnRlcmVzdC5maW5kSW50ZXJzZWN0aW9uKHNsaWNlUmFuZ2UpO2NvbnN0IGZyYWN0aW9uT2ZTbGljZUluc2lkZVJhbmdlT2ZJbnRlcmVzdD1pbnRlcnNlY3Rpb24uZHVyYXRpb24vc2xpY2UuZHVyYXRpb247dGhyZWFkQ3B1VGltZSs9c2xpY2UuY3B1RHVyYXRpb24qZnJhY3Rpb25PZlNsaWNlSW5zaWRlUmFuZ2VPZkludGVyZXN0O30pO3Byb2Nlc3NDcHVUaW1lKz10aHJlYWRDcHVUaW1lO30KLWFsbFByb2Nlc3NDcHVUaW1lKz1wcm9jZXNzQ3B1VGltZTt9Ci1sZXQgbm9ybWFsaXplZEFsbFByb2Nlc3NDcHVUaW1lPTA7aWYocmFuZ2VPZkludGVyZXN0LmR1cmF0aW9uPjApe25vcm1hbGl6ZWRBbGxQcm9jZXNzQ3B1VGltZT1hbGxQcm9jZXNzQ3B1VGltZS9yYW5nZU9mSW50ZXJlc3QuZHVyYXRpb247fQotY29uc3QgdW5pdD10ci5iLlVuaXQuYnlOYW1lLm5vcm1hbGl6ZWRQZXJjZW50YWdlX3NtYWxsZXJJc0JldHRlcjtjb25zdCBjcHVUaW1lSGlzdD1uZXcgdHIudi5IaXN0b2dyYW0oJ2NwdV90aW1lX3BlcmNlbnRhZ2UnLHVuaXQsQ1BVX1RJTUVfUEVSQ0VOVEFHRV9CT1VOREFSSUVTKTtjcHVUaW1lSGlzdC5kZXNjcmlwdGlvbj0nUGVyY2VudCBDUFUgdXRpbGl6YXRpb24sIG5vcm1hbGl6ZWQgYWdhaW5zdCBhIHNpbmdsZSBjb3JlLiBDYW4gYmUgJysnZ3JlYXRlciB0aGFuIDEwMCUgaWYgbWFjaGluZSBoYXMgbXVsdGlwbGUgY29yZXMuJztjcHVUaW1lSGlzdC5jdXN0b21pemVTdW1tYXJ5T3B0aW9ucyh7YXZnOnRydWUsY291bnQ6ZmFsc2UsbWF4OmZhbHNlLG1pbjpmYWxzZSxzdGQ6ZmFsc2Usc3VtOmZhbHNlfSk7Y3B1VGltZUhpc3QuYWRkU2FtcGxlKG5vcm1hbGl6ZWRBbGxQcm9jZXNzQ3B1VGltZSk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1VGltZUhpc3QpO30KLXRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIoY3B1VGltZU1ldHJpYyx7c3VwcG9ydHNSYW5nZU9mSW50ZXJlc3Q6dHJ1ZX0pO3JldHVybntjcHVUaW1lTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LmQnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYWRkUmVsYXRlZE5hbWVzKGhpc3RvZ3JhbXMpe2Zvcihjb25zdCBoaXN0IG9mIGhpc3RvZ3JhbXMpe2NvbnN0IHJlbGF0ZWROYW1lcz1uZXcgU2V0KCk7Zm9yKGNvbnN0W25hbWUsZGlhZ25vc3RpY11vZiBoaXN0LmRpYWdub3N0aWNzKXtpZihkaWFnbm9zdGljIGluc3RhbmNlb2YgdHIudi5kLlJlbGF0ZWRIaXN0b2dyYW1NYXApe2Zvcihjb25zdFtyZWxhdGlvbnNoaXBOYW1lLHJlbGF0ZWRIaXN0XW9mIGRpYWdub3N0aWMpe3JlbGF0ZWROYW1lcy5hZGQocmVsYXRlZEhpc3QubmFtZSk7fX19Ci1pZihyZWxhdGVkTmFtZXMuc2l6ZSl7aGlzdC5kaWFnbm9zdGljcy5zZXQodHIudi5kLlJFU0VSVkVEX05BTUVTLlJFTEFURURfTkFNRVMsbmV3IHRyLnYuZC5HZW5lcmljU2V0KHJlbGF0ZWROYW1lcykpO319fQotcmV0dXJue2FkZFJlbGF0ZWROYW1lcyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudicsZnVuY3Rpb24oKXtjbGFzcyBIaXN0b2dyYW1Hcm91cGluZ3tjb25zdHJ1Y3RvcihrZXksY2FsbGJhY2spe3RoaXMua2V5Xz1rZXk7dGhpcy5jYWxsYmFja189Y2FsbGJhY2s7SGlzdG9ncmFtR3JvdXBpbmcuQllfS0VZLnNldChrZXksdGhpcyk7fQotZ2V0IGtleSgpe3JldHVybiB0aGlzLmtleV87fQotZ2V0IGNhbGxiYWNrKCl7cmV0dXJuIHRoaXMuY2FsbGJhY2tfO30KLWdldCBsYWJlbCgpe3JldHVybiB0aGlzLmtleTt9Ci1zdGF0aWMgYnVpbGRGcm9tVGFncyh0YWdzLGRpYWdub3N0aWNOYW1lKXtjb25zdCBib29sZWFuVGFncz1uZXcgU2V0KCk7Y29uc3Qga2V5VmFsdWVUYWdzPW5ldyBTZXQoKTtmb3IoY29uc3QgdGFnIG9mIHRhZ3Mpe2lmKHRhZy5pbmNsdWRlcygnOicpKXtjb25zdCBrZXk9dGFnLnNwbGl0KCc6JylbMF07aWYoYm9vbGVhblRhZ3MuaGFzKGtleSkpe3Rocm93IG5ldyBFcnJvcihgVGFnICIke2tleX0iIGNhbm5vdCBiZSBib3RoIGJvb2xlYW4gYW5kIGtleS12YWx1ZWApO30KLWtleVZhbHVlVGFncy5hZGQoa2V5KTt9ZWxzZXtpZihrZXlWYWx1ZVRhZ3MuaGFzKHRhZykpe3Rocm93IG5ldyBFcnJvcihgVGFnICIke3RhZ30iIGNhbm5vdCBiZSBib3RoIGJvb2xlYW4gYW5kIGtleS12YWx1ZWApO30KLWJvb2xlYW5UYWdzLmFkZCh0YWcpO319Ci1jb25zdCBncm91cGluZ3M9W107Zm9yKGNvbnN0IHRhZyBvZiBib29sZWFuVGFncyl7Z3JvdXBpbmdzLnB1c2goSGlzdG9ncmFtR3JvdXBpbmcuYnVpbGRCb29sZWFuVGFnR3JvdXBpbmdfKHRhZyxkaWFnbm9zdGljTmFtZSkpO30KLWZvcihjb25zdCB0YWcgb2Yga2V5VmFsdWVUYWdzKXtncm91cGluZ3MucHVzaChIaXN0b2dyYW1Hcm91cGluZy5idWlsZEtleVZhbHVlVGFnR3JvdXBpbmdfKHRhZyxkaWFnbm9zdGljTmFtZSkpO30KLXJldHVybiBncm91cGluZ3M7fQotc3RhdGljIGJ1aWxkQm9vbGVhblRhZ0dyb3VwaW5nXyh0YWcsZGlhZ25vc3RpY05hbWUpe3JldHVybiBuZXcgSGlzdG9ncmFtR3JvdXBpbmcoYCR7dGFnfVRhZ2AsaD0+e2NvbnN0IHRhZ3M9aC5kaWFnbm9zdGljcy5nZXQoZGlhZ25vc3RpY05hbWUpO2lmKHRhZ3M9PT11bmRlZmluZWR8fCF0YWdzLmhhcyh0YWcpKXJldHVybmB+JHt0YWd9YDtyZXR1cm4gdGFnO30pO30KLXN0YXRpYyBidWlsZEtleVZhbHVlVGFnR3JvdXBpbmdfKHRhZyxkaWFnbm9zdGljTmFtZSl7cmV0dXJuIG5ldyBIaXN0b2dyYW1Hcm91cGluZyhgJHt0YWd9VGFnYCxoPT57Y29uc3QgdGFncz1oLmRpYWdub3N0aWNzLmdldChkaWFnbm9zdGljTmFtZSk7aWYodGFncz09PXVuZGVmaW5lZClyZXR1cm5gfiR7dGFnfWA7Y29uc3QgdmFsdWVzPW5ldyBTZXQoKTtmb3IoY29uc3QgdmFsdWUgb2YgdGFncyl7Y29uc3Qga3ZwPXZhbHVlLnNwbGl0KCc6Jyk7aWYoa3ZwLmxlbmd0aDwyfHxrdnBbMF0hPT10YWcpY29udGludWU7dmFsdWVzLmFkZChrdnBbMV0pO30KLWlmKHZhbHVlcy5zaXplPT09MClyZXR1cm5gfiR7dGFnfWA7Y29uc3Qgc29ydGVkVmFsdWVzPUFycmF5LmZyb20odmFsdWVzKTtzb3J0ZWRWYWx1ZXMuc29ydCgpO3JldHVybiBzb3J0ZWRWYWx1ZXMuam9pbignLCcpO30sYCR7dGFnfSB0YWdgKTt9fQotSGlzdG9ncmFtR3JvdXBpbmcuQllfS0VZPW5ldyBNYXAoKTtIaXN0b2dyYW1Hcm91cGluZy5ISVNUT0dSQU1fTkFNRT1uZXcgSGlzdG9ncmFtR3JvdXBpbmcoJ25hbWUnLGg9PmgubmFtZSk7SGlzdG9ncmFtR3JvdXBpbmcuRElTUExBWV9MQUJFTD1uZXcgSGlzdG9ncmFtR3JvdXBpbmcoJ2Rpc3BsYXlMYWJlbCcsaGlzdD0+e2NvbnN0IGxhYmVscz1oaXN0LmRpYWdub3N0aWNzLmdldCh0ci52LmQuUkVTRVJWRURfTkFNRVMuTEFCRUxTKTtpZihsYWJlbHMhPT11bmRlZmluZWQmJmxhYmVscy5zaXplPjApe3JldHVybiBBcnJheS5mcm9tKGxhYmVscykuam9pbignLCcpO30KLWNvbnN0IGJlbmNobWFya3M9aGlzdC5kaWFnbm9zdGljcy5nZXQodHIudi5kLlJFU0VSVkVEX05BTUVTLkJFTkNITUFSS1MpO2NvbnN0IHN0YXJ0PWhpc3QuZGlhZ25vc3RpY3MuZ2V0KHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5CRU5DSE1BUktfU1RBUlQpO2lmKGJlbmNobWFya3M9PT11bmRlZmluZWQpe2lmKHN0YXJ0PT09dW5kZWZpbmVkKXJldHVybidWYWx1ZSc7cmV0dXJuIHN0YXJ0LnRvU3RyaW5nKCk7fQotY29uc3QgYmVuY2htYXJrc1N0cj1BcnJheS5mcm9tKGJlbmNobWFya3MpLmpvaW4oJ1xuJyk7aWYoc3RhcnQ9PT11bmRlZmluZWQpcmV0dXJuIGJlbmNobWFya3NTdHI7cmV0dXJuIGJlbmNobWFya3NTdHIrJ1xuJytzdGFydC50b1N0cmluZygpO30pO2NsYXNzIEdlbmVyaWNTZXRHcm91cGluZyBleHRlbmRzIEhpc3RvZ3JhbUdyb3VwaW5ne2NvbnN0cnVjdG9yKG5hbWUpe3N1cGVyKG5hbWUsdW5kZWZpbmVkKTt0aGlzLmNhbGxiYWNrXz10aGlzLmNvbXB1dGVfLmJpbmQodGhpcyk7fQotY29tcHV0ZV8oaGlzdCl7Y29uc3QgZGlhZz1oaXN0LmRpYWdub3N0aWNzLmdldCh0aGlzLmtleSk7aWYoZGlhZz09PXVuZGVmaW5lZClyZXR1cm4nJztjb25zdCBwYXJ0cz1BcnJheS5mcm9tKGRpYWcpO3BhcnRzLnNvcnQoKTtyZXR1cm4gcGFydHMuam9pbignLCcpO319Ci1HZW5lcmljU2V0R3JvdXBpbmcuTkFNRVM9W3RyLnYuZC5SRVNFUlZFRF9OQU1FUy5BUkNISVRFQ1RVUkVTLHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5CRU5DSE1BUktTLHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5CT1RTLHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5CVUlMRFMsdHIudi5kLlJFU0VSVkVEX05BTUVTLkRFVklDRV9JRFMsdHIudi5kLlJFU0VSVkVEX05BTUVTLk1BU1RFUlMsdHIudi5kLlJFU0VSVkVEX05BTUVTLk1FTU9SWV9BTU9VTlRTLHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5PU19OQU1FUyx0ci52LmQuUkVTRVJWRURfTkFNRVMuT1NfVkVSU0lPTlMsdHIudi5kLlJFU0VSVkVEX05BTUVTLlBST0RVQ1RfVkVSU0lPTlMsdHIudi5kLlJFU0VSVkVEX05BTUVTLlNUT1JJRVMsdHIudi5kLlJFU0VSVkVEX05BTUVTLlNUT1JZU0VUX1JFUEVBVFMsdHIudi5kLlJFU0VSVkVEX05BTUVTLlNUT1JZX1RBR1MsXTtmb3IoY29uc3QgbmFtZSBvZiBHZW5lcmljU2V0R3JvdXBpbmcuTkFNRVMpe25ldyBHZW5lcmljU2V0R3JvdXBpbmcobmFtZSk7fQotY2xhc3MgRGF0ZVJhbmdlR3JvdXBpbmcgZXh0ZW5kcyBIaXN0b2dyYW1Hcm91cGluZ3tjb25zdHJ1Y3RvcihuYW1lKXtzdXBlcihuYW1lLHVuZGVmaW5lZCk7dGhpcy5jYWxsYmFja189dGhpcy5jb21wdXRlXy5iaW5kKHRoaXMpO30KLWNvbXB1dGVfKGhpc3Qpe2NvbnN0IGRpYWc9aGlzdC5kaWFnbm9zdGljcy5nZXQodGhpcy5rZXkpO2lmKGRpYWc9PT11bmRlZmluZWQpcmV0dXJuJyc7cmV0dXJuIGRpYWcudG9TdHJpbmcoKTt9fQotRGF0ZVJhbmdlR3JvdXBpbmcuTkFNRVM9W3RyLnYuZC5SRVNFUlZFRF9OQU1FUy5CRU5DSE1BUktfU1RBUlQsdHIudi5kLlJFU0VSVkVEX05BTUVTLlRSQUNFX1NUQVJULF07Zm9yKGNvbnN0IG5hbWUgb2YgRGF0ZVJhbmdlR3JvdXBpbmcuTkFNRVMpe25ldyBEYXRlUmFuZ2VHcm91cGluZyhuYW1lKTt9Ci1yZXR1cm57SGlzdG9ncmFtR3JvdXBpbmcsR2VuZXJpY1NldEdyb3VwaW5nLERhdGVSYW5nZUdyb3VwaW5nLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52JyxmdW5jdGlvbigpe2NsYXNzIEhpc3RvZ3JhbVNldHtjb25zdHJ1Y3RvcihvcHRfaGlzdG9ncmFtcyl7dGhpcy5oaXN0b2dyYW1zQnlHdWlkXz1uZXcgTWFwKCk7dGhpcy5zaGFyZWREaWFnbm9zdGljc0J5R3VpZF89bmV3IE1hcCgpO2lmKG9wdF9oaXN0b2dyYW1zIT09dW5kZWZpbmVkKXtmb3IoY29uc3QgaGlzdCBvZiBvcHRfaGlzdG9ncmFtcyl7dGhpcy5hZGRIaXN0b2dyYW0oaGlzdCk7fX19Ci1jcmVhdGVIaXN0b2dyYW0obmFtZSx1bml0LHNhbXBsZXMsb3B0X29wdGlvbnMpe2NvbnN0IGhpc3Q9dHIudi5IaXN0b2dyYW0uY3JlYXRlKG5hbWUsdW5pdCxzYW1wbGVzLG9wdF9vcHRpb25zKTt0aGlzLmFkZEhpc3RvZ3JhbShoaXN0KTtyZXR1cm4gaGlzdDt9Ci1hZGRIaXN0b2dyYW0oaGlzdCxvcHRfZGlhZ25vc3RpY3Mpe2lmKHRoaXMuaGlzdG9ncmFtc0J5R3VpZF8uaGFzKGhpc3QuZ3VpZCkpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IGFkZCBzYW1lIEhpc3RvZ3JhbSB0d2ljZScpO30KLWlmKG9wdF9kaWFnbm9zdGljcyE9PXVuZGVmaW5lZCl7aWYoIShvcHRfZGlhZ25vc3RpY3MgaW5zdGFuY2VvZiBNYXApKXtvcHRfZGlhZ25vc3RpY3M9T2JqZWN0LmVudHJpZXMob3B0X2RpYWdub3N0aWNzKTt9Ci1mb3IoY29uc3RbbmFtZSxkaWFnbm9zdGljXW9mIG9wdF9kaWFnbm9zdGljcyl7aGlzdC5kaWFnbm9zdGljcy5zZXQobmFtZSxkaWFnbm9zdGljKTt9fQotdGhpcy5oaXN0b2dyYW1zQnlHdWlkXy5zZXQoaGlzdC5ndWlkLGhpc3QpO30KLWFkZFNoYXJlZERpYWdub3N0aWNUb0FsbEhpc3RvZ3JhbXMobmFtZSxkaWFnbm9zdGljKXt0aGlzLmFkZFNoYXJlZERpYWdub3N0aWMoZGlhZ25vc3RpYyk7Zm9yKGNvbnN0IGhpc3Qgb2YgdGhpcyl7aGlzdC5kaWFnbm9zdGljcy5zZXQobmFtZSxkaWFnbm9zdGljKTt9fQotYWRkU2hhcmVkRGlhZ25vc3RpYyhkaWFnbm9zdGljKXt0aGlzLnNoYXJlZERpYWdub3N0aWNzQnlHdWlkXy5zZXQoZGlhZ25vc3RpYy5ndWlkLGRpYWdub3N0aWMpO30KLWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5oaXN0b2dyYW1zQnlHdWlkXy5zaXplO30qW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IoY29uc3QgaGlzdCBvZiB0aGlzLmhpc3RvZ3JhbXNCeUd1aWRfLnZhbHVlcygpKXt5aWVsZCBoaXN0O319Ci1nZXRIaXN0b2dyYW1zTmFtZWQobmFtZSl7cmV0dXJuWy4uLnRoaXNdLmZpbHRlcihoPT5oLm5hbWU9PT1uYW1lKTt9Ci1nZXRIaXN0b2dyYW1OYW1lZChuYW1lKXtjb25zdCBoaXN0b2dyYW1zPXRoaXMuZ2V0SGlzdG9ncmFtc05hbWVkKG5hbWUpO2lmKGhpc3RvZ3JhbXMubGVuZ3RoPT09MClyZXR1cm4gdW5kZWZpbmVkO2lmKGhpc3RvZ3JhbXMubGVuZ3RoPjEpe3Rocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZGx5IGZvdW5kIG11bHRpcGxlIGhpc3RvZ3JhbXMgbmFtZWQgIiR7bmFtZX0iYCk7fQotcmV0dXJuIGhpc3RvZ3JhbXNbMF07fQotbG9va3VwSGlzdG9ncmFtKGd1aWQpe3JldHVybiB0aGlzLmhpc3RvZ3JhbXNCeUd1aWRfLmdldChndWlkKTt9Ci1sb29rdXBEaWFnbm9zdGljKGd1aWQpe3JldHVybiB0aGlzLnNoYXJlZERpYWdub3N0aWNzQnlHdWlkXy5nZXQoZ3VpZCk7fQotcmVzb2x2ZVJlbGF0ZWRIaXN0b2dyYW1zKCl7Y29uc3QgaGFuZGxlRGlhZ25vc3RpY01hcD1kbT0+e2Zvcihjb25zdFtuYW1lLGRpYWdub3N0aWNdb2YgZG0pe2lmKGRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuUmVsYXRlZEhpc3RvZ3JhbU1hcCl7ZGlhZ25vc3RpYy5yZXNvbHZlKHRoaXMpO319fTtmb3IoY29uc3QgaGlzdCBvZiB0aGlzKXtoYW5kbGVEaWFnbm9zdGljTWFwKGhpc3QuZGlhZ25vc3RpY3MpO2Zvcihjb25zdCBkbSBvZiBoaXN0Lm5hbkRpYWdub3N0aWNNYXBzKXtoYW5kbGVEaWFnbm9zdGljTWFwKGRtKTt9Ci1mb3IoY29uc3QgYmluIG9mIGhpc3QuYWxsQmlucyl7Zm9yKGNvbnN0IGRtIG9mIGJpbi5kaWFnbm9zdGljTWFwcyl7aGFuZGxlRGlhZ25vc3RpY01hcChkbSk7fX19fQotaW1wb3J0RGljdHMoZGljdHMpe2Zvcihjb25zdCBkaWN0IG9mIGRpY3RzKXtpZihkaWN0LnR5cGUmJnRyLnYuZC5EaWFnbm9zdGljLmZpbmRUeXBlSW5mb1dpdGhOYW1lKGRpY3QudHlwZSkpe3RoaXMuc2hhcmVkRGlhZ25vc3RpY3NCeUd1aWRfLnNldChkaWN0Lmd1aWQsdHIudi5kLkRpYWdub3N0aWMuZnJvbURpY3QoZGljdCkpO31lbHNle2NvbnN0IGhpc3Q9dHIudi5IaXN0b2dyYW0uZnJvbURpY3QoZGljdCk7dGhpcy5hZGRIaXN0b2dyYW0oaGlzdCk7aGlzdC5kaWFnbm9zdGljcy5yZXNvbHZlU2hhcmVkRGlhZ25vc3RpY3ModGhpcyx0cnVlKTt9fX0KLWFzRGljdHMoKXtjb25zdCBkaWN0cz1bXTtmb3IoY29uc3QgZGlhZ25vc3RpYyBvZiB0aGlzLnNoYXJlZERpYWdub3N0aWNzQnlHdWlkXy52YWx1ZXMoKSl7ZGljdHMucHVzaChkaWFnbm9zdGljLmFzRGljdCgpKTt9Ci1mb3IoY29uc3QgaGlzdCBvZiB0aGlzKXtkaWN0cy5wdXNoKGhpc3QuYXNEaWN0KCkpO30KLXJldHVybiBkaWN0czt9Ci1nZXQgc291cmNlSGlzdG9ncmFtcygpe2NvbnN0IGRpYWdub3N0aWNOYW1lcz1uZXcgU2V0KCk7Zm9yKGNvbnN0IGhpc3Qgb2YgdGhpcyl7Zm9yKGNvbnN0IGRpYWdub3N0aWMgb2YgaGlzdC5kaWFnbm9zdGljcy52YWx1ZXMoKSl7aWYoIShkaWFnbm9zdGljIGluc3RhbmNlb2YgdHIudi5kLlJlbGF0ZWROYW1lTWFwKSljb250aW51ZTtmb3IoY29uc3QgbmFtZSBvZiBkaWFnbm9zdGljLnZhbHVlcygpKXtkaWFnbm9zdGljTmFtZXMuYWRkKG5hbWUpO319fQotY29uc3Qgc291cmNlSGlzdG9ncmFtcz1uZXcgTWFwKCk7Zm9yKGNvbnN0IGhpc3Qgb2YgdGhpcyl7aWYoIWRpYWdub3N0aWNOYW1lcy5oYXMoaGlzdC5uYW1lKSl7c291cmNlSGlzdG9ncmFtcy5zZXQoaGlzdC5ndWlkLGhpc3QpO319Ci1mdW5jdGlvbiBkZWxldGVTb3VyY2VIaXN0b2dyYW1zKGRpYWdub3N0aWNNYXApe2Zvcihjb25zdFtuYW1lLGRpYWdub3N0aWNdb2YgZGlhZ25vc3RpY01hcCl7aWYoZGlhZ25vc3RpYyBpbnN0YW5jZW9mIHRyLnYuZC5SZWxhdGVkSGlzdG9ncmFtTWFwKXtmb3IoY29uc3RbbmFtZSxyZWxhdGVkSGlzdF1vZiBkaWFnbm9zdGljKXtzb3VyY2VIaXN0b2dyYW1zLmRlbGV0ZShyZWxhdGVkSGlzdC5ndWlkKTt9fX19Ci1mb3IoY29uc3QgaGlzdCBvZiB0aGlzKXtkZWxldGVTb3VyY2VIaXN0b2dyYW1zKGhpc3QuZGlhZ25vc3RpY3MpO2Zvcihjb25zdCBkbSBvZiBoaXN0Lm5hbkRpYWdub3N0aWNNYXBzKXtkZWxldGVTb3VyY2VIaXN0b2dyYW1zKGRtKTt9Ci1mb3IoY29uc3QgYiBvZiBoaXN0LmFsbEJpbnMpe2Zvcihjb25zdCBkbSBvZiBiLmRpYWdub3N0aWNNYXBzKXtkZWxldGVTb3VyY2VIaXN0b2dyYW1zKGRtKTt9fX0KLXJldHVybiBuZXcgSGlzdG9ncmFtU2V0KFsuLi5zb3VyY2VIaXN0b2dyYW1zLnZhbHVlcygpXSk7fQotZ3JvdXBIaXN0b2dyYW1zUmVjdXJzaXZlbHkoZ3JvdXBpbmdzLG9wdF9za2lwR3JvdXBpbmdDYWxsYmFjayl7ZnVuY3Rpb24gcmVjdXJzZShoaXN0b2dyYW1zLGxldmVsKXtpZihsZXZlbD09PWdyb3VwaW5ncy5sZW5ndGgpe3JldHVybiBoaXN0b2dyYW1zO30KLWNvbnN0IGdyb3VwaW5nPWdyb3VwaW5nc1tsZXZlbF07Y29uc3QgZ3JvdXBlZEhpc3RvZ3JhbXM9dHIuYi5ncm91cEludG9NYXAoaGlzdG9ncmFtcyxncm91cGluZy5jYWxsYmFjayk7aWYob3B0X3NraXBHcm91cGluZ0NhbGxiYWNrJiZvcHRfc2tpcEdyb3VwaW5nQ2FsbGJhY2soZ3JvdXBpbmcsZ3JvdXBlZEhpc3RvZ3JhbXMpKXtyZXR1cm4gcmVjdXJzZShoaXN0b2dyYW1zLGxldmVsKzEpO30KLWZvcihjb25zdFtrZXksZ3JvdXBdb2YgZ3JvdXBlZEhpc3RvZ3JhbXMpe2dyb3VwZWRIaXN0b2dyYW1zLnNldChrZXkscmVjdXJzZShncm91cCxsZXZlbCsxKSk7fQotcmV0dXJuIGdyb3VwZWRIaXN0b2dyYW1zO30KLXJldHVybiByZWN1cnNlKFsuLi50aGlzXSwwKTt9Ci1kZWR1cGxpY2F0ZURpYWdub3N0aWNzKCl7Y29uc3QgbmFtZXNUb0NhbmRpZGF0ZXM9bmV3IE1hcCgpO2NvbnN0IGRpYWdub3N0aWNzVG9IaXN0b2dyYW1zPW5ldyBNYXAoKTtmb3IoY29uc3QgaGlzdCBvZiB0aGlzKXtmb3IoY29uc3RbbmFtZSxjYW5kaWRhdGVdb2YgaGlzdC5kaWFnbm9zdGljcyl7aWYoY2FuZGlkYXRlLmVxdWFscz09PXVuZGVmaW5lZCl7dGhpcy5zaGFyZWREaWFnbm9zdGljc0J5R3VpZF8uc2V0KGNhbmRpZGF0ZS5ndWlkLGNhbmRpZGF0ZSk7Y29udGludWU7fQotaWYoZGlhZ25vc3RpY3NUb0hpc3RvZ3JhbXMuZ2V0KGNhbmRpZGF0ZSk9PT11bmRlZmluZWQpe2RpYWdub3N0aWNzVG9IaXN0b2dyYW1zLnNldChjYW5kaWRhdGUsW2hpc3RdKTt9ZWxzZXtkaWFnbm9zdGljc1RvSGlzdG9ncmFtcy5nZXQoY2FuZGlkYXRlKS5wdXNoKGhpc3QpO30KLWlmKCFuYW1lc1RvQ2FuZGlkYXRlcy5oYXMobmFtZSkpe25hbWVzVG9DYW5kaWRhdGVzLnNldChuYW1lLG5ldyBTZXQoKSk7fQotbmFtZXNUb0NhbmRpZGF0ZXMuZ2V0KG5hbWUpLmFkZChjYW5kaWRhdGUpO319Ci1mb3IoY29uc3RbbmFtZSxjYW5kaWRhdGVzXW9mIG5hbWVzVG9DYW5kaWRhdGVzKXtjb25zdCBkZWR1cGxpY2F0ZWREaWFnbm9zdGljcz1uZXcgU2V0KCk7Zm9yKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKXtsZXQgZm91bmQ9ZmFsc2U7Zm9yKGNvbnN0IHRlc3Qgb2YgZGVkdXBsaWNhdGVkRGlhZ25vc3RpY3Mpe2lmKGNhbmRpZGF0ZS5lcXVhbHModGVzdCkpe2NvbnN0IGhpc3RzPWRpYWdub3N0aWNzVG9IaXN0b2dyYW1zLmdldChjYW5kaWRhdGUpO2Zvcihjb25zdCBoaXN0IG9mIGhpc3RzKXtoaXN0LmRpYWdub3N0aWNzLnNldChuYW1lLHRlc3QpO30KLWZvdW5kPXRydWU7YnJlYWs7fX0KLWlmKCFmb3VuZCl7ZGVkdXBsaWNhdGVkRGlhZ25vc3RpY3MuYWRkKGNhbmRpZGF0ZSk7fQotZm9yKGNvbnN0IGRpYWdub3N0aWMgb2YgZGVkdXBsaWNhdGVkRGlhZ25vc3RpY3Mpe3RoaXMuc2hhcmVkRGlhZ25vc3RpY3NCeUd1aWRfLnNldChkaWFnbm9zdGljLmd1aWQsZGlhZ25vc3RpYyk7fX19fQotYnVpbGRHcm91cGluZ3NGcm9tVGFncyhuYW1lcyl7Y29uc3QgdGFncz1uZXcgTWFwKCk7Zm9yKGNvbnN0IGhpc3Qgb2YgdGhpcyl7Zm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe2lmKCFoaXN0LmRpYWdub3N0aWNzLmhhcyhuYW1lKSljb250aW51ZTtpZighdGFncy5oYXMobmFtZSkpdGFncy5zZXQobmFtZSxuZXcgU2V0KCkpO2Zvcihjb25zdCB0YWcgb2YgaGlzdC5kaWFnbm9zdGljcy5nZXQobmFtZSkpe3RhZ3MuZ2V0KG5hbWUpLmFkZCh0YWcpO319fQotY29uc3QgZ3JvdXBpbmdzPVtdO2Zvcihjb25zdFtuYW1lLHZhbHVlc11vZiB0YWdzKXtjb25zdCBidWlsdD10ci52Lkhpc3RvZ3JhbUdyb3VwaW5nLmJ1aWxkRnJvbVRhZ3ModmFsdWVzLG5hbWUpO2Zvcihjb25zdCBncm91cGluZyBvZiBidWlsdCl7Z3JvdXBpbmdzLnB1c2goZ3JvdXBpbmcpO319Ci1yZXR1cm4gZ3JvdXBpbmdzO30KLW1lcmdlUmVsYXRpb25zaGlwcygpe2Zvcihjb25zdCBoaXN0IG9mIHRoaXMpe2hpc3QuZGlhZ25vc3RpY3MubWVyZ2VSZWxhdGlvbnNoaXBzKGhpc3QpO319fQotcmV0dXJue0hpc3RvZ3JhbVNldCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaGFzVGl0bGVBbmRDYXRlZ29yeShldmVudCx0aXRsZSxjYXRlZ29yeSl7cmV0dXJuIGV2ZW50LnRpdGxlPT09dGl0bGUmJmV2ZW50LmNhdGVnb3J5JiZ0ci5iLmdldENhdGVnb3J5UGFydHMoZXZlbnQuY2F0ZWdvcnkpLmluY2x1ZGVzKGNhdGVnb3J5KTt9Ci1mdW5jdGlvbiBnZXROYXZTdGFydFRpbWVzdGFtcHMocmVuZGVyZXJIZWxwZXIpe2NvbnN0IG5hdlN0YXJ0VGltZXN0YW1wcz1bXTtmb3IoY29uc3QgZSBvZiByZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLnNsaWNlR3JvdXAuY2hpbGRFdmVudHMoKSl7aWYoaGFzVGl0bGVBbmRDYXRlZ29yeShlLCduYXZpZ2F0aW9uU3RhcnQnLCdibGluay51c2VyX3RpbWluZycpKXtuYXZTdGFydFRpbWVzdGFtcHMucHVzaChlLnN0YXJ0KTt9fQotcmV0dXJuIG5hdlN0YXJ0VGltZXN0YW1wczt9Ci1mdW5jdGlvbiBnZXRJbnRlcmFjdGl2ZVRpbWVzdGFtcHMobW9kZWwpe2NvbnN0IGludGVyYWN0aXZlVGltZXN0YW1wc01hcD1uZXcgTWFwKCk7Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2Zvcihjb25zdCByZW5kZXJlckhlbHBlciBvZiBPYmplY3QudmFsdWVzKGNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnMpKXtjb25zdCB0aW1lc3RhbXBzPVtdO2ludGVyYWN0aXZlVGltZXN0YW1wc01hcC5zZXQocmVuZGVyZXJIZWxwZXIucGlkLHRpbWVzdGFtcHMpO2NvbnN0IHNhbXBsZXM9dHIubWV0cmljcy5zaC5jb2xsZWN0TG9hZGluZ01ldHJpY3NGb3JSZW5kZXJlcihyZW5kZXJlckhlbHBlcikuaW50ZXJhY3RpdmVTYW1wbGVzO2Zvcihjb25zdCBzYW1wbGUgb2Ygc2FtcGxlcyl7dGltZXN0YW1wcy5wdXNoKHRyLmIuZ2V0T25seUVsZW1lbnQoc2FtcGxlLmRpYWdub3N0aWNzLmdldCgnTmF2aWdhdGlvbiBpbmZvcycpKS5ldmVudFRpbWVzdGFtcCk7fX0KLXJldHVybiBpbnRlcmFjdGl2ZVRpbWVzdGFtcHNNYXA7fQotZnVuY3Rpb24gZ2V0UG9zdEludGVyYWN0aXZlVGFza1dpbmRvd3MoaW50ZXJhY3RpdmVUaW1lc3RhbXBzLG5hdlN0YXJ0VGltZXN0YW1wcyx0cmFjZUVuZFRpbWVzdGFtcCl7bGV0IG5hdlN0YXJ0VHNJbmRleD0wO2xldCBsYXN0VGFza1dpbmRvd0VuZFRzPXVuZGVmaW5lZDtjb25zdCB0YXNrV2luZG93cz1bXTtmb3IoY29uc3QgY3VyclRUSSBvZiBpbnRlcmFjdGl2ZVRpbWVzdGFtcHMpe3doaWxlKG5hdlN0YXJ0VHNJbmRleDxuYXZTdGFydFRpbWVzdGFtcHMubGVuZ3RoJiZuYXZTdGFydFRpbWVzdGFtcHNbbmF2U3RhcnRUc0luZGV4XTxjdXJyVFRJKXtuYXZTdGFydFRzSW5kZXgrKzt9Ci1jb25zdCB0YXNrV2luZG93RW5kVHM9bmF2U3RhcnRUc0luZGV4PG5hdlN0YXJ0VGltZXN0YW1wcy5sZW5ndGg/bmF2U3RhcnRUaW1lc3RhbXBzW25hdlN0YXJ0VHNJbmRleF06dHJhY2VFbmRUaW1lc3RhbXA7aWYodGFza1dpbmRvd0VuZFRzPT09bGFzdFRhc2tXaW5kb3dFbmRUcyl7dGhyb3cgRXJyb3IoJ0VuY291bnRlcmVkIHR3byBjb25zZWN1dGl2ZSBpbnRlcmFjdGl2ZSB0aW1lc3RhbXBzICcrJ3dpdGggbm8gbmF2aWdhdGlvblN0YXJ0IGJldHdlZW4gdGhlbS4gJysnUG9zdEludGVyYWN0aXZlVGFza1dpbmRvdyBpcyBub3Qgd2VsbCBkZWZpbmVkIGluIHRoaXMgY2FzZS4nKTt9Ci10YXNrV2luZG93cy5wdXNoKHRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShjdXJyVFRJLHRhc2tXaW5kb3dFbmRUcykpO2xhc3RUYXNrV2luZG93RW5kVHM9dGFza1dpbmRvd0VuZFRzO30KLXJldHVybiB0YXNrV2luZG93czt9Ci1mdW5jdGlvbiBjb250cmlidXRpb25Ub0VRVCh3aW5kb3csdGFzayl7Y29uc3Qgc3RhcnRJbldpbmRvdz1NYXRoLm1heCh3aW5kb3cubWluLHRhc2suc3RhcnQpO2NvbnN0IGVuZEluV2luZG93PU1hdGgubWluKHdpbmRvdy5tYXgsdGFzay5lbmQpO2NvbnN0IGR1cmF0aW9uSW5XaW5kb3c9ZW5kSW5XaW5kb3ctc3RhcnRJbldpbmRvdztpZihkdXJhdGlvbkluV2luZG93PD0wKXJldHVybiAwO2NvbnN0IHByb2JhYmlsaXR5T2ZUYXNrPWR1cmF0aW9uSW5XaW5kb3cvKHdpbmRvdy5tYXgtd2luZG93Lm1pbik7Y29uc3QgbWluUXVldWVpbmdUaW1lPXRhc2suZW5kLWVuZEluV2luZG93O2NvbnN0IG1heFF1ZXVlaW5nVGltZT10YXNrLmVuZC1zdGFydEluV2luZG93O2NvbnN0IGV4cGVjdGVkUXVldWVpbmdUaW1lRHVlVG9UYXNrPShtYXhRdWV1ZWluZ1RpbWUrbWluUXVldWVpbmdUaW1lKS8yO3JldHVybiBwcm9iYWJpbGl0eU9mVGFzaypleHBlY3RlZFF1ZXVlaW5nVGltZUR1ZVRvVGFzazt9Ci1mdW5jdGlvbiB3ZWlnaHRlZEV4cGVjdGVkUXVldWVpbmdUaW1lKHdpbmRvdyx3ZWlnaHRlZFRhc2tzKXtsZXQgcmVzdWx0PTA7Zm9yKGNvbnN0IHRhc2sgb2Ygd2VpZ2h0ZWRUYXNrcyl7cmVzdWx0Kz1jb250cmlidXRpb25Ub0VRVCh3aW5kb3csdGFzaykqdGFzay53ZWlnaHQ7fQotcmV0dXJuIHJlc3VsdDt9Ci1mdW5jdGlvbiBleHBlY3RlZFF1ZXVlaW5nVGltZSh3aW5kb3csdGFza3Mpe3JldHVybiB3ZWlnaHRlZEV4cGVjdGVkUXVldWVpbmdUaW1lKHdpbmRvdyx0YXNrcy5tYXAoZnVuY3Rpb24odGFzayl7cmV0dXJue3N0YXJ0OnRhc2suc3RhcnQsZW5kOnRhc2suZW5kLHdlaWdodDoxfTt9KSk7fQotY2xhc3MgU2xpZGluZ1dpbmRvd3tjb25zdHJ1Y3RvcihzdGFydFRpbWUsd2luZG93U2l6ZSxzb3J0ZWRUYXNrcyl7dGhpcy53aW5kb3dTaXplXz13aW5kb3dTaXplO3RoaXMuc29ydGVkVGFza3NfPXNvcnRlZFRhc2tzO3RoaXMucmFuZ2VfPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShzdGFydFRpbWUsc3RhcnRUaW1lK3dpbmRvd1NpemUpO3RoaXMuZmlyc3RUYXNrSW5kZXhfPXNvcnRlZFRhc2tzLmZpbmRJbmRleCh0YXNrPT5zdGFydFRpbWU8dGFzay5lbmQpO2lmKHRoaXMuZmlyc3RUYXNrSW5kZXhfPT09LTEpe3RoaXMuZmlyc3RUYXNrSW5kZXhfPXNvcnRlZFRhc2tzLmxlbmd0aDt9Ci10aGlzLmxhc3RUYXNrSW5kZXhfPS0xO3doaWxlKHRoaXMubGFzdFRhc2tJbmRleF8rMTxzb3J0ZWRUYXNrcy5sZW5ndGgmJnNvcnRlZFRhc2tzW3RoaXMubGFzdFRhc2tJbmRleF8rMV0uc3RhcnQ8c3RhcnRUaW1lK3dpbmRvd1NpemUpe3RoaXMubGFzdFRhc2tJbmRleF8rKzt9Ci10aGlzLmlubmVyRVFUXz0wO2ZvcihsZXQgaT10aGlzLmZpcnN0VGFza0luZGV4XysxO2k8dGhpcy5sYXN0VGFza0luZGV4XztpKyspe3RoaXMuaW5uZXJFUVRfKz1jb250cmlidXRpb25Ub0VRVCh0aGlzLnJhbmdlXyxzb3J0ZWRUYXNrc1tpXSk7fX0KLWdldCBnZXRFUVQoKXtsZXQgZmlyc3RUYXNrRVFUPTA7aWYodGhpcy5maXJzdFRhc2tJbmRleF88dGhpcy5zb3J0ZWRUYXNrc18ubGVuZ3RoKXtmaXJzdFRhc2tFUVQ9Y29udHJpYnV0aW9uVG9FUVQodGhpcy5yYW5nZV8sdGhpcy5zb3J0ZWRUYXNrc19bdGhpcy5maXJzdFRhc2tJbmRleF9dKTt9Ci1sZXQgbGFzdFRhc2tFUVQ9MDtpZih0aGlzLmZpcnN0VGFza0luZGV4Xzx0aGlzLmxhc3RUYXNrSW5kZXhfKXtsYXN0VGFza0VRVD1jb250cmlidXRpb25Ub0VRVCh0aGlzLnJhbmdlXyx0aGlzLnNvcnRlZFRhc2tzX1t0aGlzLmxhc3RUYXNrSW5kZXhfXSk7fQotcmV0dXJuIGZpcnN0VGFza0VRVCt0aGlzLmlubmVyRVFUXytsYXN0VGFza0VRVDt9Ci1zbGlkZSh0KXt0aGlzLnJhbmdlXz10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UodCx0K3RoaXMud2luZG93U2l6ZV8pO2lmKHRoaXMuZmlyc3RUYXNrSW5kZXhfPHRoaXMuc29ydGVkVGFza3NfLmxlbmd0aCYmdGhpcy5zb3J0ZWRUYXNrc19bdGhpcy5maXJzdFRhc2tJbmRleF9dLmVuZDw9dCl7dGhpcy5maXJzdFRhc2tJbmRleF8rKztpZih0aGlzLmZpcnN0VGFza0luZGV4Xzx0aGlzLmxhc3RUYXNrSW5kZXhfKXt0aGlzLmlubmVyRVFUXy09Y29udHJpYnV0aW9uVG9FUVQodGhpcy5yYW5nZV8sdGhpcy5zb3J0ZWRUYXNrc19bdGhpcy5maXJzdFRhc2tJbmRleF9dKTt9fQotaWYodGhpcy5sYXN0VGFza0luZGV4XysxPHRoaXMuc29ydGVkVGFza3NfLmxlbmd0aCYmdGhpcy5zb3J0ZWRUYXNrc19bdGhpcy5sYXN0VGFza0luZGV4XysxXS5zdGFydDx0K3RoaXMud2luZG93U2l6ZV8pe2lmKHRoaXMuZmlyc3RUYXNrSW5kZXhfPHRoaXMubGFzdFRhc2tJbmRleF8pe3RoaXMuaW5uZXJFUVRfKz1jb250cmlidXRpb25Ub0VRVCh0aGlzLnJhbmdlXyx0aGlzLnNvcnRlZFRhc2tzX1t0aGlzLmxhc3RUYXNrSW5kZXhfXSk7fQotdGhpcy5sYXN0VGFza0luZGV4XysrO319fQotZnVuY3Rpb24gbWF4RXhwZWN0ZWRRdWV1ZWluZ1RpbWVJblNsaWRpbmdXaW5kb3coc3RhcnRUaW1lLGVuZFRpbWUsd2luZG93U2l6ZSx0YXNrcyl7aWYod2luZG93U2l6ZTw9MCl7dGhyb3cgRXJyb3IoJ1RoZSB3aW5kb3cgc2l6ZSBtdXN0IGJlIHBvc2l0aXZlIG51bWJlcicpO30KLWlmKHN0YXJ0VGltZSt3aW5kb3dTaXplPmVuZFRpbWUpe3Rocm93IEVycm9yKCdUaGUgc2xpZGluZyB3aW5kb3cgbXVzdCBmaXQgaW4gdGhlIHNwZWNpZmllZCB0aW1lIHJhbmdlJyk7fQotY29uc3Qgc29ydGVkVGFza3M9dGFza3Muc2xpY2UoKS5zb3J0KChhLGIpPT5hLnN0YXJ0LWIuc3RhcnQpO2ZvcihsZXQgaT0xO2k8c29ydGVkVGFza3MubGVuZ3RoO2krKyl7Y29uc3QgUFJFQ0lTSU9OX01TPTAuMTtpZihzb3J0ZWRUYXNrc1tpLTFdLmVuZD5zb3J0ZWRUYXNrc1tpXS5zdGFydCtQUkVDSVNJT05fTVMpe3Rocm93IEVycm9yKCdUYXNrcyBtdXN0IG5vdCBvdmVybGFwJyk7fQotaWYoc29ydGVkVGFza3NbaS0xXS5lbmQ+c29ydGVkVGFza3NbaV0uc3RhcnQpe2NvbnN0IG1pZHBvaW50PShzb3J0ZWRUYXNrc1tpLTFdLmVuZCtzb3J0ZWRUYXNrc1tpXS5zdGFydCkvMjtzb3J0ZWRUYXNrc1tpLTFdLmVuZD1taWRwb2ludDtzb3J0ZWRUYXNrc1tpXS5zdGFydD1taWRwb2ludDt9fQotbGV0IGVuZHBvaW50cz1bXTtlbmRwb2ludHMucHVzaChzdGFydFRpbWUpO2VuZHBvaW50cy5wdXNoKGVuZFRpbWUtd2luZG93U2l6ZSk7Zm9yKGNvbnN0IHRhc2sgb2YgdGFza3Mpe2VuZHBvaW50cy5wdXNoKHRhc2suc3RhcnQtd2luZG93U2l6ZSk7ZW5kcG9pbnRzLnB1c2godGFzay5zdGFydCk7ZW5kcG9pbnRzLnB1c2godGFzay5lbmQtd2luZG93U2l6ZSk7ZW5kcG9pbnRzLnB1c2godGFzay5lbmQpO30KLWVuZHBvaW50cz1lbmRwb2ludHMuZmlsdGVyKHg9PihzdGFydFRpbWU8PXgmJngrd2luZG93U2l6ZTw9ZW5kVGltZSkpO2VuZHBvaW50cy5zb3J0KChhLGIpPT5hLWIpO2NvbnN0IHNsaWRpbmdXaW5kb3c9bmV3IFNsaWRpbmdXaW5kb3coZW5kcG9pbnRzWzBdLHdpbmRvd1NpemUsc29ydGVkVGFza3MpO2xldCBtYXhFUVQ9MDtmb3IoY29uc3QgdCBvZiBlbmRwb2ludHMpe3NsaWRpbmdXaW5kb3cuc2xpZGUodCk7bWF4RVFUPU1hdGgubWF4KG1heEVRVCxzbGlkaW5nV2luZG93LmdldEVRVCk7fQotcmV0dXJuIG1heEVRVDt9Ci1yZXR1cm57Z2V0UG9zdEludGVyYWN0aXZlVGFza1dpbmRvd3MsZ2V0TmF2U3RhcnRUaW1lc3RhbXBzLGdldEludGVyYWN0aXZlVGltZXN0YW1wcyxleHBlY3RlZFF1ZXVlaW5nVGltZSxtYXhFeHBlY3RlZFF1ZXVlaW5nVGltZUluU2xpZGluZ1dpbmRvdyx3ZWlnaHRlZEV4cGVjdGVkUXVldWVpbmdUaW1lfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3Muc2gnLGZ1bmN0aW9uKCl7Y29uc3QgV0lORE9XX1NJWkVfTVM9NTAwO2NvbnN0IEVRVF9CT1VOREFSSUVTPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVFeHBvbmVudGlhbCgwLjAxLFdJTkRPV19TSVpFX01TLDUwKTtmdW5jdGlvbiBjb250YWluc0ZvcmNlZEdDXyhzbGljZSl7cmV0dXJuIHNsaWNlLmZpbmRUb3Btb3N0U2xpY2VzUmVsYXRpdmVUb1RoaXNTbGljZSh0ci5tZXRyaWNzLnY4LnV0aWxzLmlzRm9yY2VkR2FyYmFnZUNvbGxlY3Rpb25FdmVudCkubGVuZ3RoPjA7fQotZnVuY3Rpb24gY3JlYXRlSGlzdG9ncmFtRm9yRVFUXyhuYW1lLGRlc2NyaXB0aW9uKXtjb25zdCBoaXN0b2dyYW09bmV3IHRyLnYuSGlzdG9ncmFtKG5hbWUsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixFUVRfQk9VTkRBUklFUyk7aGlzdG9ncmFtLmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHthdmc6ZmFsc2UsY291bnQ6ZmFsc2UsbWF4OnRydWUsbWluOmZhbHNlLHN0ZDpmYWxzZSxzdW06ZmFsc2UsfSk7aGlzdG9ncmFtLmRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uO3JldHVybiBoaXN0b2dyYW07fQotZnVuY3Rpb24gZXhwZWN0ZWRRdWV1ZWluZ1RpbWVNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2NvbnN0IHJlbmRlcmVySGVscGVycz1PYmplY3QudmFsdWVzKGNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnMpO2NvbnN0IHJlbmRlcmVyVG9JbnRlcmFjdGl2ZVRpbWVzdGFtcHM9dHIuZS5jaHJvbWUuZ2V0SW50ZXJhY3RpdmVUaW1lc3RhbXBzKG1vZGVsKTthZGRFeHBlY3RlZFF1ZXVlaW5nVGltZU1ldHJpY18oJ3JlbmRlcmVyX2VxdCcsZXZlbnQ9PntyZXR1cm57c3RhcnQ6ZXZlbnQuc3RhcnQsZHVyYXRpb246ZXZlbnQuZHVyYXRpb259O30sZmFsc2UscmVuZGVyZXJIZWxwZXJzLHJlbmRlcmVyVG9JbnRlcmFjdGl2ZVRpbWVzdGFtcHMsaGlzdG9ncmFtcyxtb2RlbCk7YWRkRXhwZWN0ZWRRdWV1ZWluZ1RpbWVNZXRyaWNfKCdyZW5kZXJlcl9lcXRfY3B1JyxldmVudD0+e3JldHVybntzdGFydDpldmVudC5jcHVTdGFydCxkdXJhdGlvbjpldmVudC5jcHVEdXJhdGlvbn07fSx0cnVlLHJlbmRlcmVySGVscGVycyxyZW5kZXJlclRvSW50ZXJhY3RpdmVUaW1lc3RhbXBzLGhpc3RvZ3JhbXMsbW9kZWwpO30KLWZ1bmN0aW9uIGFkZEV4cGVjdGVkUXVldWVpbmdUaW1lTWV0cmljXyhlcXROYW1lLGdldEV2ZW50VGltZXMsaXNDcHVUaW1lLHJlbmRlcmVySGVscGVycyxyZW5kZXJlclRvSW50ZXJhY3RpdmVUaW1lc3RhbXBzLGhpc3RvZ3JhbXMsbW9kZWwpe2Z1bmN0aW9uIGdldFRhc2tzKHJlbmRlcmVySGVscGVyKXtjb25zdCB0YXNrcz1bXTtmb3IoY29uc3Qgc2xpY2Ugb2YgcmVuZGVyZXJIZWxwZXIubWFpblRocmVhZC5zbGljZUdyb3VwLnRvcExldmVsU2xpY2VzKXtjb25zdCB0aW1lcz1nZXRFdmVudFRpbWVzKHNsaWNlKTtpZih0aW1lcy5kdXJhdGlvbj4wJiYhY29udGFpbnNGb3JjZWRHQ18oc2xpY2UpKXt0YXNrcy5wdXNoKHtzdGFydDp0aW1lcy5zdGFydCxlbmQ6dGltZXMuc3RhcnQrdGltZXMuZHVyYXRpb259KTt9fQotcmV0dXJuIHRhc2tzO30KLWNvbnN0IHRvdGFsSGlzdG9ncmFtPWNyZWF0ZUhpc3RvZ3JhbUZvckVRVF8oYHRvdGFsOiR7V0lORE9XX1NJWkVfTVN9bXNfd2luZG93OiR7ZXF0TmFtZX1gLGBUaGUgbWF4aW11bSBFUVQgaW4gYSAke1dJTkRPV19TSVpFX01TfW1zIHNsaWRpbmcgd2luZG93YCsnIGZvciBhIGdpdmVuIHJlbmRlcmVyJyk7Y29uc3QgaW50ZXJhY3RpdmVIaXN0b2dyYW09Y3JlYXRlSGlzdG9ncmFtRm9yRVFUXyhgaW50ZXJhY3RpdmU6JHtXSU5ET1dfU0laRV9NU31tc193aW5kb3c6JHtlcXROYW1lfWAsYFRoZSBtYXhpbXVtIEVRVCBpbiBhICR7V0lORE9XX1NJWkVfTVN9bXMgc2xpZGluZyB3aW5kb3dgKycgZm9yIGEgZ2l2ZW4gcmVuZGVyZXIgd2hpbGUgdGhlIHBhZ2UgaXMgaW50ZXJhY3RpdmUnKTtmb3IoY29uc3QgcmVuZGVyZXJIZWxwZXIgb2YgcmVuZGVyZXJIZWxwZXJzKXtpZihyZW5kZXJlckhlbHBlci5pc0Nocm9tZVRyYWNpbmdVSSljb250aW51ZTtpZihyZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLmJvdW5kcy5kdXJhdGlvbjxXSU5ET1dfU0laRV9NUyljb250aW51ZTtjb25zdCB0YXNrcz1nZXRUYXNrcyhyZW5kZXJlckhlbHBlcik7dG90YWxIaXN0b2dyYW0uYWRkU2FtcGxlKHRyLmUuY2hyb21lLm1heEV4cGVjdGVkUXVldWVpbmdUaW1lSW5TbGlkaW5nV2luZG93KHJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQuYm91bmRzLm1pbixyZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLmJvdW5kcy5tYXgsV0lORE9XX1NJWkVfTVMsdGFza3MpKTtjb25zdCBpbnRlcmFjdGl2ZVRpbWVzdGFtcHM9cmVuZGVyZXJUb0ludGVyYWN0aXZlVGltZXN0YW1wcy5nZXQocmVuZGVyZXJIZWxwZXIucGlkKTtpZihpbnRlcmFjdGl2ZVRpbWVzdGFtcHMubGVuZ3RoPT09MCljb250aW51ZTtpZihpbnRlcmFjdGl2ZVRpbWVzdGFtcHMubGVuZ3RoPjEpe2NvbnRpbnVlO30KLWNvbnN0IGludGVyYWN0aXZlV2luZG93PXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShpbnRlcmFjdGl2ZVRpbWVzdGFtcHNbMF0sSW5maW5pdHkpLmZpbmRJbnRlcnNlY3Rpb24ocmVuZGVyZXJIZWxwZXIubWFpblRocmVhZC5ib3VuZHMpO2ludGVyYWN0aXZlSGlzdG9ncmFtLmFkZFNhbXBsZSh0ci5lLmNocm9tZS5tYXhFeHBlY3RlZFF1ZXVlaW5nVGltZUluU2xpZGluZ1dpbmRvdyhpbnRlcmFjdGl2ZVdpbmRvdy5taW4saW50ZXJhY3RpdmVXaW5kb3cubWF4LFdJTkRPV19TSVpFX01TLHRhc2tzKSk7fQotYWRkVjhDb250cmlidXRpb25Ub0V4cGVjdGVkUXVldWVpbmdUaW1lXyhlcXROYW1lLGdldEV2ZW50VGltZXMsaXNDcHVUaW1lLHRvdGFsSGlzdG9ncmFtLGludGVyYWN0aXZlSGlzdG9ncmFtLHJlbmRlcmVyVG9JbnRlcmFjdGl2ZVRpbWVzdGFtcHMsaGlzdG9ncmFtcyxtb2RlbCk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0odG90YWxIaXN0b2dyYW0pO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGludGVyYWN0aXZlSGlzdG9ncmFtKTt9Ci1mdW5jdGlvbiBhZGRWOENvbnRyaWJ1dGlvblRvRXhwZWN0ZWRRdWV1ZWluZ1RpbWVfKGVxdE5hbWUsZ2V0RXZlbnRUaW1lcyxpc0NwdVRpbWUsdG90YWxFcXRIaXN0b2dyYW0saW50ZXJhY3RpdmVFcXRIaXN0b2dyYW0scmVuZGVyZXJUb0ludGVyYWN0aXZlVGltZXN0YW1wcyxoaXN0b2dyYW1zLG1vZGVsKXtpZighbW9kZWwuY2F0ZWdvcmllcy5pbmNsdWRlcygndjgnKSlyZXR1cm47Y29uc3QgYnJlYWtkb3duRm9yVG90YWw9bmV3IHRyLnYuZC5SZWxhdGVkSGlzdG9ncmFtTWFwKCk7Y29uc3QgYnJlYWtkb3duRm9ySW50ZXJhY3RpdmU9bmV3IHRyLnYuZC5SZWxhdGVkSGlzdG9ncmFtTWFwKCk7Y29uc3QgZXZlbnROYW1lc1dpdGhUYXNrRXh0cmFjdG9ycz1nZXRWOEV2ZW50TmFtZXNXaXRoVGFza0V4dHJhY3RvcnNfKGdldEV2ZW50VGltZXMpO2lmKCFpc0NwdVRpbWUpe2NvbnN0IHRhc2tFeHRyYWN0b3JzVXNpbmdSQ1M9Z2V0VjhFdmVudE5hbWVzV2l0aFRhc2tFeHRyYWN0b3JzVXNpbmdSQ1NfKGdldEV2ZW50VGltZXMpO2Zvcihjb25zdFtldmVudE5hbWUsZ2V0VGFza3Ndb2YgdGFza0V4dHJhY3RvcnNVc2luZ1JDUyl7ZXZlbnROYW1lc1dpdGhUYXNrRXh0cmFjdG9ycy5zZXQoZXZlbnROYW1lLGdldFRhc2tzKTt9fQotZm9yKGNvbnN0W2V2ZW50TmFtZSxnZXRUYXNrc11vZiBldmVudE5hbWVzV2l0aFRhc2tFeHRyYWN0b3JzKXtjb25zdCBjb250cmlidXRpb249Y29udHJpYnV0aW9uVG9FeHBlY3RlZFF1ZXVlaW5nVGltZV8oZXF0TmFtZSxldmVudE5hbWUsZ2V0VGFza3MscmVuZGVyZXJUb0ludGVyYWN0aXZlVGltZXN0YW1wcyxoaXN0b2dyYW1zLG1vZGVsKTticmVha2Rvd25Gb3JUb3RhbC5zZXQoZXZlbnROYW1lLGNvbnRyaWJ1dGlvbi50b3RhbCk7YnJlYWtkb3duRm9ySW50ZXJhY3RpdmUuc2V0KGV2ZW50TmFtZSxjb250cmlidXRpb24uaW50ZXJhY3RpdmUpO30KLXRvdGFsRXF0SGlzdG9ncmFtLmRpYWdub3N0aWNzLnNldCgndjgnLGJyZWFrZG93bkZvclRvdGFsKTtpbnRlcmFjdGl2ZUVxdEhpc3RvZ3JhbS5kaWFnbm9zdGljcy5zZXQoJ3Y4JyxicmVha2Rvd25Gb3JJbnRlcmFjdGl2ZSk7fQotZnVuY3Rpb24gZ2V0VjhFdmVudE5hbWVzV2l0aFRhc2tFeHRyYWN0b3JzXyhnZXRFdmVudFRpbWVzLGNwdU1ldHJpY3Mpe2Z1bmN0aW9uIGR1cmF0aW9uT2ZUb3Btb3N0U3ViU2xpY2VzKHNsaWNlLHByZWRpY2F0ZSxleGNsdWRlUHJlZGljYXRlKXtsZXQgZHVyYXRpb249MDtmb3IoY29uc3Qgc3ViIG9mIHNsaWNlLmZpbmRUb3Btb3N0U2xpY2VzUmVsYXRpdmVUb1RoaXNTbGljZShwcmVkaWNhdGUpKXtkdXJhdGlvbis9Z2V0RXZlbnRUaW1lcyhzdWIpLmR1cmF0aW9uO2lmKGV4Y2x1ZGVQcmVkaWNhdGUhPT1udWxsJiZleGNsdWRlUHJlZGljYXRlIT09dW5kZWZpbmVkKXtkdXJhdGlvbi09ZHVyYXRpb25PZlRvcG1vc3RTdWJTbGljZXMoc3ViLGV4Y2x1ZGVQcmVkaWNhdGUpO319Ci1yZXR1cm4gZHVyYXRpb247fQotZnVuY3Rpb24gdGFza0V4dHJhY3RvcihwcmVkaWNhdGUsZXhjbHVkZVByZWRpY2F0ZSl7cmV0dXJuIGZ1bmN0aW9uKHJlbmRlcmVySGVscGVyKXtjb25zdCBzbGljZXM9cmVuZGVyZXJIZWxwZXIubWFpblRocmVhZC5zbGljZUdyb3VwLnRvcExldmVsU2xpY2VzO2NvbnN0IHJlc3VsdD1bXTtmb3IoY29uc3Qgc2xpY2Ugb2Ygc2xpY2VzKXtjb25zdCB0aW1lcz1nZXRFdmVudFRpbWVzKHNsaWNlKTtpZih0aW1lcy5kdXJhdGlvbj4wJiYhY29udGFpbnNGb3JjZWRHQ18oc2xpY2UpKXtjb25zdCBkdXJhdGlvbj1kdXJhdGlvbk9mVG9wbW9zdFN1YlNsaWNlcyhzbGljZSxwcmVkaWNhdGUsZXhjbHVkZVByZWRpY2F0ZSk7cmVzdWx0LnB1c2goe3N0YXJ0OnRpbWVzLnN0YXJ0LGVuZDp0aW1lcy5zdGFydCtkdXJhdGlvbn0pO319Ci1yZXR1cm4gcmVzdWx0O307fQotcmV0dXJuIG5ldyBNYXAoW1sndjgnLHRhc2tFeHRyYWN0b3IodHIubWV0cmljcy52OC51dGlscy5pc1Y4RXZlbnQpXSxbJ3Y4OmV4ZWN1dGUnLHRhc2tFeHRyYWN0b3IodHIubWV0cmljcy52OC51dGlscy5pc1Y4RXhlY3V0ZUV2ZW50KV0sWyd2ODpnYycsdGFza0V4dHJhY3Rvcih0ci5tZXRyaWNzLnY4LnV0aWxzLmlzR2FyYmFnZUNvbGxlY3Rpb25FdmVudCldLFsndjg6Z2M6ZnVsbC1tYXJrLWNvbXBhY3RvcicsdGFza0V4dHJhY3Rvcih0ci5tZXRyaWNzLnY4LnV0aWxzLmlzRnVsbE1hcmtDb21wYWN0b3JFdmVudCldLFsndjg6Z2M6aW5jcmVtZW50YWwtbWFya2luZycsdGFza0V4dHJhY3Rvcih0ci5tZXRyaWNzLnY4LnV0aWxzLmlzSW5jcmVtZW50YWxNYXJraW5nRXZlbnQpXSxbJ3Y4OmdjOmxhdGVuY3ktbWFyay1jb21wYWN0b3InLHRhc2tFeHRyYWN0b3IodHIubWV0cmljcy52OC51dGlscy5pc0xhdGVuY3lNYXJrQ29tcGFjdG9yRXZlbnQpXSxbJ3Y4OmdjOm1lbW9yeS1tYXJrLWNvbXBhY3RvcicsdGFza0V4dHJhY3Rvcih0ci5tZXRyaWNzLnY4LnV0aWxzLmlzTWVtb3J5TWFya0NvbXBhY3RvckV2ZW50KV0sWyd2ODpnYzpzY2F2ZW5nZXInLHRhc2tFeHRyYWN0b3IodHIubWV0cmljcy52OC51dGlscy5pc1NjYXZlbmdlckV2ZW50KV1dKTt9Ci1mdW5jdGlvbiBleHRyYWN0VGFza1JDUyhnZXRFdmVudFRpbWVzLHByZWRpY2F0ZSxyZW5kZXJlckhlbHBlcil7Y29uc3QgcmVzdWx0PVtdO2Zvcihjb25zdCB0b3BTbGljZSBvZgotcmVuZGVyZXJIZWxwZXIubWFpblRocmVhZC5zbGljZUdyb3VwLnRvcExldmVsU2xpY2VzKXtjb25zdCB0aW1lcz1nZXRFdmVudFRpbWVzKHRvcFNsaWNlKTtpZih0aW1lcy5kdXJhdGlvbjw9MHx8Y29udGFpbnNGb3JjZWRHQ18odG9wU2xpY2UpKXtjb250aW51ZTt9Ci1jb25zdCB2OFRocmVhZFNsaWNlcz1bXTtmb3IoY29uc3Qgc2xpY2Ugb2YgdG9wU2xpY2UuZGVzY2VuZGVudFNsaWNlcyl7aWYodHIubWV0cmljcy52OC51dGlscy5pc1Y4UkNTRXZlbnQoc2xpY2UpKXt2OFRocmVhZFNsaWNlcy5wdXNoKHNsaWNlKTt9fQotY29uc3QgcnVudGltZUdyb3VwQ29sbGVjdGlvbj1uZXcgdHIuZS52OC5SdW50aW1lU3RhdHNHcm91cENvbGxlY3Rpb24oKTtydW50aW1lR3JvdXBDb2xsZWN0aW9uLmFkZFNsaWNlcyh2OFRocmVhZFNsaWNlcyk7bGV0IGR1cmF0aW9uPTA7Zm9yKGNvbnN0IHJ1bnRpbWVHcm91cCBvZiBydW50aW1lR3JvdXBDb2xsZWN0aW9uLnJ1bnRpbWVHcm91cHMpe2lmKHByZWRpY2F0ZShydW50aW1lR3JvdXAubmFtZSkpe2R1cmF0aW9uKz1ydW50aW1lR3JvdXAudGltZTt9fQotZHVyYXRpb249dHIuYi5jb252ZXJ0VW5pdChkdXJhdGlvbix0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlDUk8sdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk1JTExJKTtyZXN1bHQucHVzaCh7c3RhcnQ6dGltZXMuc3RhcnQsZW5kOnRpbWVzLnN0YXJ0K2R1cmF0aW9ufSk7fQotcmV0dXJuIHJlc3VsdDt9Ci1mdW5jdGlvbiBnZXRWOEV2ZW50TmFtZXNXaXRoVGFza0V4dHJhY3RvcnNVc2luZ1JDU18oZ2V0RXZlbnRUaW1lcyl7Y29uc3QgZXh0cmFjdG9ycz1uZXcgTWFwKCk7ZXh0cmFjdG9ycy5zZXQoJ3Y4OmNvbXBpbGVfcmNzJyxyZW5kZXJlckhlbHBlcj0+ZXh0cmFjdFRhc2tSQ1MoZ2V0RXZlbnRUaW1lcyx0ci5tZXRyaWNzLnY4LnV0aWxzLmlzQ29tcGlsZVJDU0NhdGVnb3J5LHJlbmRlcmVySGVscGVyKSk7ZXh0cmFjdG9ycy5zZXQoJ3Y4OmNvbXBpbGU6b3B0aW1pemVfcmNzJyxyZW5kZXJlckhlbHBlcj0+ZXh0cmFjdFRhc2tSQ1MoZ2V0RXZlbnRUaW1lcyx0ci5tZXRyaWNzLnY4LnV0aWxzLmlzQ29tcGlsZU9wdGltaXplUkNTQ2F0ZWdvcnkscmVuZGVyZXJIZWxwZXIpKTtleHRyYWN0b3JzLnNldCgndjg6Y29tcGlsZTpwYXJzZV9yY3MnLHJlbmRlcmVySGVscGVyPT5leHRyYWN0VGFza1JDUyhnZXRFdmVudFRpbWVzLHRyLm1ldHJpY3MudjgudXRpbHMuaXNDb21waWxlUGFyc2VSQ1NDYXRlZ29yeSxyZW5kZXJlckhlbHBlcikpO2V4dHJhY3RvcnMuc2V0KCd2ODpjb21waWxlOmNvbXBpbGUtdW5vcHRpbWl6ZV9yY3MnLHJlbmRlcmVySGVscGVyPT5leHRyYWN0VGFza1JDUyhnZXRFdmVudFRpbWVzLHRyLm1ldHJpY3MudjgudXRpbHMuaXNDb21waWxlVW5vcHRpbWl6ZVJDU0NhdGVnb3J5LHJlbmRlcmVySGVscGVyKSk7cmV0dXJuIGV4dHJhY3RvcnM7fQotZnVuY3Rpb24gY29udHJpYnV0aW9uVG9FeHBlY3RlZFF1ZXVlaW5nVGltZV8oZXF0TmFtZSxldmVudE5hbWUsZ2V0VGFza3MscmVuZGVyZXJUb0ludGVyYWN0aXZlVGltZXN0YW1wcyxoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7Y29uc3QgdG90YWxIaXN0b2dyYW09Y3JlYXRlSGlzdG9ncmFtRm9yRVFUXyhgdG90YWw6JHtXSU5ET1dfU0laRV9NU31tc193aW5kb3c6JHtlcXROYW1lfToke2V2ZW50TmFtZX1gLGBDb250cmlidXRpb24gdG8gdGhlIGV4cGVjdGVkIHF1ZXVlaW5nIHRpbWUgYnkgJHtldmVudE5hbWV9YCsnIGZvciBhIGdpdmVuIHJlbmRlcmVyLiBJdCBpcyBjb21wdXRlZCBhcyB0aGUgbWF4aW11bSBFUVQgaW4nK2AgYSAke1dJTkRPV19TSVpFX01TfW1zIHNsaWRpbmcgd2luZG93IGFmdGVyIHNocmlua2luZyB0b3AtbGV2ZWxgK2AgdGFza3MgdG8gY29udGFpbiBvbmx5ICR7ZXZlbnROYW1lfSBzdWJldmVudHNgKTtjb25zdCBpbnRlcmFjdGl2ZUhpc3RvZ3JhbT1jcmVhdGVIaXN0b2dyYW1Gb3JFUVRfKGBpbnRlcmFjdGl2ZToke1dJTkRPV19TSVpFX01TfW1zX3dpbmRvdzoke2VxdE5hbWV9OiR7ZXZlbnROYW1lfWAsYENvbnRyaWJ1dGlvbiB0byB0aGUgZXhwZWN0ZWQgcXVldWVpbmcgdGltZSBieSAke2V2ZW50TmFtZX1gKycgZm9yIGEgZ2l2ZW4gcmVuZGVyZXIgd2hpbGUgdGhlIHBhZ2UgaXMgaW50ZXJhY3RpdmUuIEl0IGlzIGNvbXB1dGVkJytgIGFzIHRoZSBtYXhpbXVtIEVRVCBpbiBhICR7V0lORE9XX1NJWkVfTVN9bXMgc2xpZGluZyB3aW5kb3cgYWZ0ZXJgK2Agc2hyaW5raW5nIHRvcC1sZXZlbCB0YXNrcyB0byBjb250YWluIG9ubHkgJHtldmVudE5hbWV9IHN1YmV2ZW50c2ApO2NvbnN0IHJlbmRlcmVySGVscGVycz1PYmplY3QudmFsdWVzKGNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnMpO2Zvcihjb25zdCByZW5kZXJlckhlbHBlciBvZiByZW5kZXJlckhlbHBlcnMpe2lmKHJlbmRlcmVySGVscGVyLmlzQ2hyb21lVHJhY2luZ1VJKWNvbnRpbnVlO2NvbnN0IHRhc2tzPWdldFRhc2tzKHJlbmRlcmVySGVscGVyKTt0b3RhbEhpc3RvZ3JhbS5hZGRTYW1wbGUodHIuZS5jaHJvbWUubWF4RXhwZWN0ZWRRdWV1ZWluZ1RpbWVJblNsaWRpbmdXaW5kb3cocmVuZGVyZXJIZWxwZXIubWFpblRocmVhZC5ib3VuZHMubWluLHJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQuYm91bmRzLm1heCxXSU5ET1dfU0laRV9NUyx0YXNrcykpO2NvbnN0IGludGVyYWN0aXZlVGltZXN0YW1wcz1yZW5kZXJlclRvSW50ZXJhY3RpdmVUaW1lc3RhbXBzLmdldChyZW5kZXJlckhlbHBlci5waWQpO2lmKGludGVyYWN0aXZlVGltZXN0YW1wcy5sZW5ndGg9PT0wKWNvbnRpbnVlO2lmKGludGVyYWN0aXZlVGltZXN0YW1wcy5sZW5ndGg+MSl7Y29udGludWU7fQotY29uc3QgaW50ZXJhY3RpdmVXaW5kb3c9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKGludGVyYWN0aXZlVGltZXN0YW1wc1swXSxJbmZpbml0eSkuZmluZEludGVyc2VjdGlvbihyZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLmJvdW5kcyk7aW50ZXJhY3RpdmVIaXN0b2dyYW0uYWRkU2FtcGxlKHRyLmUuY2hyb21lLm1heEV4cGVjdGVkUXVldWVpbmdUaW1lSW5TbGlkaW5nV2luZG93KGludGVyYWN0aXZlV2luZG93Lm1pbixpbnRlcmFjdGl2ZVdpbmRvdy5tYXgsV0lORE9XX1NJWkVfTVMsdGFza3MpKTt9Ci1oaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbSh0b3RhbEhpc3RvZ3JhbSk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oaW50ZXJhY3RpdmVIaXN0b2dyYW0pO3JldHVybnt0b3RhbDp0b3RhbEhpc3RvZ3JhbSxpbnRlcmFjdGl2ZTppbnRlcmFjdGl2ZUhpc3RvZ3JhbX07fQotdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihleHBlY3RlZFF1ZXVlaW5nVGltZU1ldHJpYyk7cmV0dXJue2V4cGVjdGVkUXVldWVpbmdUaW1lTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIE11bHRpRGltZW5zaW9uYWxWaWV3Tm9kZSh0aXRsZSx2YWx1ZUNvdW50KXt0aGlzLnRpdGxlPXRpdGxlO2NvbnN0IGRpbWVuc2lvbnM9dGl0bGUubGVuZ3RoO3RoaXMuY2hpbGRyZW49bmV3IEFycmF5KGRpbWVuc2lvbnMpO2ZvcihsZXQgaT0wO2k8ZGltZW5zaW9ucztpKyspe3RoaXMuY2hpbGRyZW5baV09bmV3IE1hcCgpO30KLXRoaXMudmFsdWVzPW5ldyBBcnJheSh2YWx1ZUNvdW50KTtmb3IobGV0IHY9MDt2PHZhbHVlQ291bnQ7disrKXt0aGlzLnZhbHVlc1t2XT17c2VsZjowLHRvdGFsOjAsdG90YWxTdGF0ZTpOT1RfUFJPVklERUR9O319Ci1NdWx0aURpbWVuc2lvbmFsVmlld05vZGUuVG90YWxTdGF0ZT17Tk9UX1BST1ZJREVEOjAsTE9XRVJfQk9VTkQ6MSxFWEFDVDoyfTtjb25zdCBOT1RfUFJPVklERUQ9TXVsdGlEaW1lbnNpb25hbFZpZXdOb2RlLlRvdGFsU3RhdGUuTk9UX1BST1ZJREVEO2NvbnN0IExPV0VSX0JPVU5EPU11bHRpRGltZW5zaW9uYWxWaWV3Tm9kZS5Ub3RhbFN0YXRlLkxPV0VSX0JPVU5EO2NvbnN0IEVYQUNUPU11bHRpRGltZW5zaW9uYWxWaWV3Tm9kZS5Ub3RhbFN0YXRlLkVYQUNUO011bHRpRGltZW5zaW9uYWxWaWV3Tm9kZS5wcm90b3R5cGU9e2dldCBzdWJSb3dzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlblswXS52YWx1ZXMoKSk7fX07ZnVuY3Rpb24gTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyKGRpbWVuc2lvbnMsdmFsdWVDb3VudCl7aWYodHlwZW9mKGRpbWVuc2lvbnMpIT09J251bWJlcid8fGRpbWVuc2lvbnM8MCl7dGhyb3cgbmV3IEVycm9yKCdEaW1lbnNpb25zIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyJyk7fQotdGhpcy5kaW1lbnNpb25zXz1kaW1lbnNpb25zO2lmKHR5cGVvZih2YWx1ZUNvdW50KSE9PSdudW1iZXInfHx2YWx1ZUNvdW50PDApe3Rocm93IG5ldyBFcnJvcignTnVtYmVyIG9mIHZhbHVlcyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcicpO30KLXRoaXMudmFsdWVDb3VudF89dmFsdWVDb3VudDt0aGlzLmJ1aWxkUm9vdF89dGhpcy5jcmVhdGVSb290Tm9kZV8oKTt0aGlzLnRvcERvd25UcmVlVmlld1Jvb3RfPXVuZGVmaW5lZDt0aGlzLnRvcERvd25IZWF2eVZpZXdSb290Xz11bmRlZmluZWQ7dGhpcy5ib3R0b21VcEhlYXZ5Vmlld05vZGVfPXVuZGVmaW5lZDt0aGlzLmNvbXBsZXRlXz1mYWxzZTt0aGlzLm1heERpbWVuc2lvbkRlcHRoc189bmV3IEFycmF5KGRpbWVuc2lvbnMpO2ZvcihsZXQgZD0wO2Q8ZGltZW5zaW9ucztkKyspe3RoaXMubWF4RGltZW5zaW9uRGVwdGhzX1tkXT0wO319Ci1NdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmFsdWVLaW5kPXtTRUxGOjAsVE9UQUw6MX07TXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZpZXdUeXBlPXtUT1BfRE9XTl9UUkVFX1ZJRVc6MCxUT1BfRE9XTl9IRUFWWV9WSUVXOjEsQk9UVE9NX1VQX0hFQVZZX1ZJRVc6Mn07TXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLnByb3RvdHlwZT17YWRkUGF0aChwYXRoLHZhbHVlcyx2YWx1ZUtpbmQpe2lmKHRoaXMuYnVpbGRSb290Xz09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdQYXRocyBjYW5ub3QgYmUgYWRkZWQgYWZ0ZXIgZWl0aGVyIHZpZXcgaGFzIGJlZW4gYnVpbHQnKTt9Ci1pZihwYXRoLmxlbmd0aCE9PXRoaXMuZGltZW5zaW9uc18pe3Rocm93IG5ldyBFcnJvcignUGF0aCBtdXN0IGJlICcrdGhpcy5kaW1lbnNpb25zXysnLWRpbWVuc2lvbmFsJyk7fQotaWYodmFsdWVzLmxlbmd0aCE9PXRoaXMudmFsdWVDb3VudF8pe3Rocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlICcrdGhpcy52YWx1ZUNvdW50XysnIHZhbHVlcycpO30KLWxldCBpc1RvdGFsO3N3aXRjaCh2YWx1ZUtpbmQpe2Nhc2UgTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZhbHVlS2luZC5TRUxGOmlzVG90YWw9ZmFsc2U7YnJlYWs7Y2FzZSBNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmFsdWVLaW5kLlRPVEFMOmlzVG90YWw9dHJ1ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZSBraW5kOiAnK3ZhbHVlS2luZCk7fQotbGV0IG5vZGU9dGhpcy5idWlsZFJvb3RfO2ZvcihsZXQgZD0wO2Q8cGF0aC5sZW5ndGg7ZCsrKXtjb25zdCBzaW5nbGVEaW1lbnNpb25QYXRoPXBhdGhbZF07Y29uc3Qgc2luZ2xlRGltZW5zaW9uUGF0aExlbmd0aD1zaW5nbGVEaW1lbnNpb25QYXRoLmxlbmd0aDt0aGlzLm1heERpbWVuc2lvbkRlcHRoc19bZF09TWF0aC5tYXgodGhpcy5tYXhEaW1lbnNpb25EZXB0aHNfW2RdLHNpbmdsZURpbWVuc2lvblBhdGhMZW5ndGgpO2ZvcihsZXQgaT0wO2k8c2luZ2xlRGltZW5zaW9uUGF0aExlbmd0aDtpKyspe25vZGU9dGhpcy5nZXRPckNyZWF0ZUNoaWxkTm9kZV8obm9kZSxkLHNpbmdsZURpbWVuc2lvblBhdGhbaV0pO319Ci1mb3IobGV0IHY9MDt2PHRoaXMudmFsdWVDb3VudF87disrKXtjb25zdCBhZGRlZFZhbHVlPXZhbHVlc1t2XTtpZihhZGRlZFZhbHVlPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IG5vZGVWYWx1ZT1ub2RlLnZhbHVlc1t2XTtpZihpc1RvdGFsKXtub2RlVmFsdWUudG90YWwrPWFkZGVkVmFsdWU7bm9kZVZhbHVlLnRvdGFsU3RhdGU9RVhBQ1Q7fWVsc2V7bm9kZVZhbHVlLnNlbGYrPWFkZGVkVmFsdWU7bm9kZVZhbHVlLnRvdGFsU3RhdGU9TWF0aC5tYXgobm9kZVZhbHVlLnRvdGFsU3RhdGUsTE9XRVJfQk9VTkQpO319fSxnZXQgY29tcGxldGUoKXtyZXR1cm4gdGhpcy5jb21wbGV0ZV87fSxzZXQgY29tcGxldGUoaXNDb21wbGV0ZSl7aWYodGhpcy5idWlsZFJvb3RfPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0NhblwndCBzZXQgY29tcGxldGUgYWZ0ZXIgYW55IHZpZXcgaGFzIGJlZW4gYnVpbHQuJyk7fQotdGhpcy5jb21wbGV0ZV89aXNDb21wbGV0ZTt9LGJ1aWxkVmlldyh2aWV3VHlwZSl7c3dpdGNoKHZpZXdUeXBlKXtjYXNlIE11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WaWV3VHlwZS5UT1BfRE9XTl9UUkVFX1ZJRVc6cmV0dXJuIHRoaXMuYnVpbGRUb3BEb3duVHJlZVZpZXcoKTtjYXNlIE11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WaWV3VHlwZS5UT1BfRE9XTl9IRUFWWV9WSUVXOnJldHVybiB0aGlzLmJ1aWxkVG9wRG93bkhlYXZ5VmlldygpO2Nhc2UgTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZpZXdUeXBlLkJPVFRPTV9VUF9IRUFWWV9WSUVXOnJldHVybiB0aGlzLmJ1aWxkQm90dG9tVXBIZWF2eVZpZXcoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcignVW5rbm93biBtdWx0aS1kaW1lbnNpb25hbCB2aWV3IHR5cGU6ICcrdmlld1R5cGUpO319LGJ1aWxkVG9wRG93blRyZWVWaWV3KCl7aWYodGhpcy50b3BEb3duVHJlZVZpZXdSb290Xz09PXVuZGVmaW5lZCl7Y29uc3QgdHJlZVZpZXdSb290PXRoaXMuYnVpbGRSb290Xzt0aGlzLmJ1aWxkUm9vdF89dW5kZWZpbmVkO3RoaXMuc2V0VXBNaXNzaW5nQ2hpbGRSZWxhdGlvbnNoaXBzXyh0cmVlVmlld1Jvb3QsMCk7dGhpcy5maW5hbGl6ZVRvdGFsVmFsdWVzXyh0cmVlVmlld1Jvb3QsMCxuZXcgV2Vha01hcCgpKTt0aGlzLnRvcERvd25UcmVlVmlld1Jvb3RfPXRyZWVWaWV3Um9vdDt9Ci1yZXR1cm4gdGhpcy50b3BEb3duVHJlZVZpZXdSb290Xzt9LGJ1aWxkVG9wRG93bkhlYXZ5Vmlldygpe2lmKHRoaXMudG9wRG93bkhlYXZ5Vmlld1Jvb3RfPT09dW5kZWZpbmVkKXt0aGlzLnRvcERvd25IZWF2eVZpZXdSb290Xz10aGlzLmJ1aWxkR2VuZXJpY0hlYXZ5Vmlld18odGhpcy5hZGREaW1lbnNpb25Ub1RvcERvd25IZWF2eVZpZXdOb2RlXy5iaW5kKHRoaXMpKTt9Ci1yZXR1cm4gdGhpcy50b3BEb3duSGVhdnlWaWV3Um9vdF87fSxidWlsZEJvdHRvbVVwSGVhdnlWaWV3KCl7aWYodGhpcy5ib3R0b21VcEhlYXZ5Vmlld05vZGVfPT09dW5kZWZpbmVkKXt0aGlzLmJvdHRvbVVwSGVhdnlWaWV3Tm9kZV89dGhpcy5idWlsZEdlbmVyaWNIZWF2eVZpZXdfKHRoaXMuYWRkRGltZW5zaW9uVG9Cb3R0b21VcEhlYXZ5Vmlld05vZGVfLmJpbmQodGhpcykpO30KLXJldHVybiB0aGlzLmJvdHRvbVVwSGVhdnlWaWV3Tm9kZV87fSxjcmVhdGVSb290Tm9kZV8oKXtyZXR1cm4gbmV3IE11bHRpRGltZW5zaW9uYWxWaWV3Tm9kZShuZXcgQXJyYXkodGhpcy5kaW1lbnNpb25zXyksdGhpcy52YWx1ZUNvdW50Xyk7fSxnZXRPckNyZWF0ZUNoaWxkTm9kZV8ocGFyZW50Tm9kZSxkaW1lbnNpb24sY2hpbGREaW1lbnNpb25UaXRsZSl7aWYoZGltZW5zaW9uPDB8fGRpbWVuc2lvbj49dGhpcy5kaW1lbnNpb25zXyl7dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRpbWVuc2lvbicpO30KLWNvbnN0IGRpbWVuc2lvbkNoaWxkcmVuPXBhcmVudE5vZGUuY2hpbGRyZW5bZGltZW5zaW9uXTtsZXQgY2hpbGROb2RlPWRpbWVuc2lvbkNoaWxkcmVuLmdldChjaGlsZERpbWVuc2lvblRpdGxlKTtpZihjaGlsZE5vZGUhPT11bmRlZmluZWQpe3JldHVybiBjaGlsZE5vZGU7fQotY29uc3QgY2hpbGRUaXRsZT1wYXJlbnROb2RlLnRpdGxlLnNsaWNlKCk7Y2hpbGRUaXRsZVtkaW1lbnNpb25dPWNoaWxkRGltZW5zaW9uVGl0bGU7Y2hpbGROb2RlPW5ldyBNdWx0aURpbWVuc2lvbmFsVmlld05vZGUoY2hpbGRUaXRsZSx0aGlzLnZhbHVlQ291bnRfKTtkaW1lbnNpb25DaGlsZHJlbi5zZXQoY2hpbGREaW1lbnNpb25UaXRsZSxjaGlsZE5vZGUpO3JldHVybiBjaGlsZE5vZGU7fSxzZXRVcE1pc3NpbmdDaGlsZFJlbGF0aW9uc2hpcHNfKG5vZGUsZmlyc3REaW1lbnNpb25Ub1NldFVwKXtmb3IobGV0IGQ9Zmlyc3REaW1lbnNpb25Ub1NldFVwO2Q8dGhpcy5kaW1lbnNpb25zXztkKyspe2NvbnN0IGN1cnJlbnREaW1lbnNpb25DaGlsZFRpdGxlcz1uZXcgU2V0KG5vZGUuY2hpbGRyZW5bZF0ua2V5cygpKTtmb3IobGV0IGk9MDtpPGQ7aSsrKXtmb3IoY29uc3QgcHJldmlvdXNEaW1lbnNpb25DaGlsZE5vZGUgb2Ygbm9kZS5jaGlsZHJlbltpXS52YWx1ZXMoKSl7Zm9yKGNvbnN0IHByZXZpb3VzRGltZW5zaW9uR3JhbmRDaGlsZFRpdGxlIG9mCi1wcmV2aW91c0RpbWVuc2lvbkNoaWxkTm9kZS5jaGlsZHJlbltkXS5rZXlzKCkpe2N1cnJlbnREaW1lbnNpb25DaGlsZFRpdGxlcy5hZGQocHJldmlvdXNEaW1lbnNpb25HcmFuZENoaWxkVGl0bGUpO319fQotZm9yKGNvbnN0IGN1cnJlbnREaW1lbnNpb25DaGlsZFRpdGxlIG9mIGN1cnJlbnREaW1lbnNpb25DaGlsZFRpdGxlcyl7Y29uc3QgY3VycmVudERpbWVuc2lvbkNoaWxkTm9kZT10aGlzLmdldE9yQ3JlYXRlQ2hpbGROb2RlXyhub2RlLGQsY3VycmVudERpbWVuc2lvbkNoaWxkVGl0bGUpO2ZvcihsZXQgaT0wO2k8ZDtpKyspe2Zvcihjb25zdCBwcmV2aW91c0RpbWVuc2lvbkNoaWxkTm9kZSBvZgotbm9kZS5jaGlsZHJlbltpXS52YWx1ZXMoKSl7Y29uc3QgcHJldmlvdXNEaW1lbnNpb25HcmFuZENoaWxkTm9kZT1wcmV2aW91c0RpbWVuc2lvbkNoaWxkTm9kZS5jaGlsZHJlbltkXS5nZXQoY3VycmVudERpbWVuc2lvbkNoaWxkVGl0bGUpO2lmKHByZXZpb3VzRGltZW5zaW9uR3JhbmRDaGlsZE5vZGUhPT11bmRlZmluZWQpe2N1cnJlbnREaW1lbnNpb25DaGlsZE5vZGUuY2hpbGRyZW5baV0uc2V0KHByZXZpb3VzRGltZW5zaW9uQ2hpbGROb2RlLnRpdGxlW2ldLHByZXZpb3VzRGltZW5zaW9uR3JhbmRDaGlsZE5vZGUpO319fQotdGhpcy5zZXRVcE1pc3NpbmdDaGlsZFJlbGF0aW9uc2hpcHNfKGN1cnJlbnREaW1lbnNpb25DaGlsZE5vZGUsZCk7fX19LGZpbmFsaXplVG90YWxWYWx1ZXNfKG5vZGUsZmlyc3REaW1lbnNpb25Ub0ZpbmFsaXplLGRpbWVuc2lvbmFsU2VsZlN1bXNNYXApe2NvbnN0IGRpbWVuc2lvbmFsU2VsZlN1bXM9bmV3IEFycmF5KHRoaXMuZGltZW5zaW9uc18pO2NvbnN0IG1pblJlc2lkdWFsPW5ldyBBcnJheSh0aGlzLnZhbHVlQ291bnRfKTtmb3IobGV0IHY9MDt2PHRoaXMudmFsdWVDb3VudF87disrKW1pblJlc2lkdWFsW3ZdPTA7Y29uc3Qgbm9kZVZhbHVlcz1ub2RlLnZhbHVlcztjb25zdCBub2RlU2VsZlN1bXM9bmV3IEFycmF5KHRoaXMudmFsdWVDb3VudF8pO2ZvcihsZXQgdj0wO3Y8dGhpcy52YWx1ZUNvdW50Xzt2Kyspe25vZGVTZWxmU3Vtc1t2XT1ub2RlVmFsdWVzW3ZdLnNlbGY7fQotZm9yKGxldCBkPTA7ZDx0aGlzLmRpbWVuc2lvbnNfO2QrKyl7Y29uc3QgY2hpbGRSZXNpZHVhbFN1bXM9bmV3IEFycmF5KHRoaXMudmFsdWVDb3VudF8pO2ZvcihsZXQgdj0wO3Y8dGhpcy52YWx1ZUNvdW50Xzt2Kyspe2NoaWxkUmVzaWR1YWxTdW1zW3ZdPTA7fQotZm9yKGNvbnN0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkcmVuW2RdLnZhbHVlcygpKXtpZihkPj1maXJzdERpbWVuc2lvblRvRmluYWxpemUpe3RoaXMuZmluYWxpemVUb3RhbFZhbHVlc18oY2hpbGROb2RlLGQsZGltZW5zaW9uYWxTZWxmU3Vtc01hcCk7fQotY29uc3QgY2hpbGROb2RlU2VsZlN1bXM9ZGltZW5zaW9uYWxTZWxmU3Vtc01hcC5nZXQoY2hpbGROb2RlKTtjb25zdCBjaGlsZE5vZGVWYWx1ZXM9Y2hpbGROb2RlLnZhbHVlcztmb3IobGV0IHY9MDt2PHRoaXMudmFsdWVDb3VudF87disrKXtub2RlU2VsZlN1bXNbdl0rPWNoaWxkTm9kZVNlbGZTdW1zW2RdW3ZdO2NvbnN0IHJlc2lkdWFsPWNoaWxkTm9kZVZhbHVlc1t2XS50b3RhbC0KLWNoaWxkTm9kZVNlbGZTdW1zW3RoaXMuZGltZW5zaW9uc18tMV1bdl07Y2hpbGRSZXNpZHVhbFN1bXNbdl0rPXJlc2lkdWFsO2lmKHRoaXMuY29tcGxldGUpe25vZGVWYWx1ZXNbdl0udG90YWxTdGF0ZT1FWEFDVDt9ZWxzZSBpZihjaGlsZE5vZGVWYWx1ZXNbdl0udG90YWxTdGF0ZT5OT1RfUFJPVklERUQpe25vZGVWYWx1ZXNbdl0udG90YWxTdGF0ZT1NYXRoLm1heChub2RlVmFsdWVzW3ZdLnRvdGFsU3RhdGUsTE9XRVJfQk9VTkQpO319fQotZGltZW5zaW9uYWxTZWxmU3Vtc1tkXT1ub2RlU2VsZlN1bXMuc2xpY2UoKTtmb3IobGV0IHY9MDt2PHRoaXMudmFsdWVDb3VudF87disrKXttaW5SZXNpZHVhbFt2XT1NYXRoLm1heChtaW5SZXNpZHVhbFt2XSxjaGlsZFJlc2lkdWFsU3Vtc1t2XSk7fX0KLWZvcihsZXQgdj0wO3Y8dGhpcy52YWx1ZUNvdW50Xzt2Kyspe25vZGVWYWx1ZXNbdl0udG90YWw9TWF0aC5tYXgobm9kZVZhbHVlc1t2XS50b3RhbCxub2RlU2VsZlN1bXNbdl0rbWluUmVzaWR1YWxbdl0pO30KLWlmKGRpbWVuc2lvbmFsU2VsZlN1bXNNYXAuaGFzKG5vZGUpKXt0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGVycm9yOiBOb2RlIGZpbmFsaXplZCBtb3JlIHRoYW4gb25jZScpO30KLWRpbWVuc2lvbmFsU2VsZlN1bXNNYXAuc2V0KG5vZGUsZGltZW5zaW9uYWxTZWxmU3Vtcyk7fSxidWlsZEdlbmVyaWNIZWF2eVZpZXdfKHRyZWVWaWV3Tm9kZUhhbmRsZXIpe2NvbnN0IHRyZWVWaWV3Um9vdD10aGlzLmJ1aWxkVG9wRG93blRyZWVWaWV3KCk7Y29uc3QgaGVhdnlWaWV3Um9vdD10aGlzLmNyZWF0ZVJvb3ROb2RlXygpO2hlYXZ5Vmlld1Jvb3QudmFsdWVzPXRyZWVWaWV3Um9vdC52YWx1ZXM7Y29uc3QgcmVjdXJzaW9uRGVwdGhUcmFja2Vycz1uZXcgQXJyYXkodGhpcy5kaW1lbnNpb25zXyk7Zm9yKGxldCBkPTA7ZDx0aGlzLmRpbWVuc2lvbnNfO2QrKyl7cmVjdXJzaW9uRGVwdGhUcmFja2Vyc1tkXT1uZXcgUmVjdXJzaW9uRGVwdGhUcmFja2VyKHRoaXMubWF4RGltZW5zaW9uRGVwdGhzX1tkXSxkKTt9Ci10aGlzLmFkZERpbWVuc2lvbnNUb0dlbmVyaWNIZWF2eVZpZXdOb2RlXyh0cmVlVmlld1Jvb3QsaGVhdnlWaWV3Um9vdCwwLHJlY3Vyc2lvbkRlcHRoVHJhY2tlcnMsZmFsc2UsdHJlZVZpZXdOb2RlSGFuZGxlcik7dGhpcy5zZXRVcE1pc3NpbmdDaGlsZFJlbGF0aW9uc2hpcHNfKGhlYXZ5Vmlld1Jvb3QsMCk7cmV0dXJuIGhlYXZ5Vmlld1Jvb3Q7fSxhZGREaW1lbnNpb25zVG9HZW5lcmljSGVhdnlWaWV3Tm9kZV8odHJlZVZpZXdQYXJlbnROb2RlLGhlYXZ5Vmlld1BhcmVudE5vZGUsc3RhcnREaW1lbnNpb24scmVjdXJzaW9uRGVwdGhUcmFja2VycyxwcmV2aW91c0RpbWVuc2lvbnNSZWN1cnNpdmUsdHJlZVZpZXdOb2RlSGFuZGxlcil7Zm9yKGxldCBkPXN0YXJ0RGltZW5zaW9uO2Q8dGhpcy5kaW1lbnNpb25zXztkKyspe3RoaXMuYWRkRGltZW5zaW9uRGVzY2VuZGFudHNUb0dlbmVyaWNIZWF2eVZpZXdOb2RlXyh0cmVlVmlld1BhcmVudE5vZGUsaGVhdnlWaWV3UGFyZW50Tm9kZSxkLHJlY3Vyc2lvbkRlcHRoVHJhY2tlcnMscHJldmlvdXNEaW1lbnNpb25zUmVjdXJzaXZlLHRyZWVWaWV3Tm9kZUhhbmRsZXIpO319LGFkZERpbWVuc2lvbkRlc2NlbmRhbnRzVG9HZW5lcmljSGVhdnlWaWV3Tm9kZV8odHJlZVZpZXdQYXJlbnROb2RlLGhlYXZ5Vmlld1BhcmVudE5vZGUsY3VycmVudERpbWVuc2lvbixyZWN1cnNpb25EZXB0aFRyYWNrZXJzLHByZXZpb3VzRGltZW5zaW9uc1JlY3Vyc2l2ZSx0cmVlVmlld05vZGVIYW5kbGVyKXtjb25zdCB0cmVlVmlld0NoaWxkcmVuPXRyZWVWaWV3UGFyZW50Tm9kZS5jaGlsZHJlbltjdXJyZW50RGltZW5zaW9uXTtjb25zdCByZWN1cnNpb25EZXB0aFRyYWNrZXI9cmVjdXJzaW9uRGVwdGhUcmFja2Vyc1tjdXJyZW50RGltZW5zaW9uXTtmb3IoY29uc3QgdHJlZVZpZXdDaGlsZE5vZGUgb2YgdHJlZVZpZXdDaGlsZHJlbi52YWx1ZXMoKSl7cmVjdXJzaW9uRGVwdGhUcmFja2VyLnB1c2godHJlZVZpZXdDaGlsZE5vZGUpO3RyZWVWaWV3Tm9kZUhhbmRsZXIodHJlZVZpZXdDaGlsZE5vZGUsaGVhdnlWaWV3UGFyZW50Tm9kZSxjdXJyZW50RGltZW5zaW9uLHJlY3Vyc2lvbkRlcHRoVHJhY2tlcnMscHJldmlvdXNEaW1lbnNpb25zUmVjdXJzaXZlKTt0aGlzLmFkZERpbWVuc2lvbkRlc2NlbmRhbnRzVG9HZW5lcmljSGVhdnlWaWV3Tm9kZV8odHJlZVZpZXdDaGlsZE5vZGUsaGVhdnlWaWV3UGFyZW50Tm9kZSxjdXJyZW50RGltZW5zaW9uLHJlY3Vyc2lvbkRlcHRoVHJhY2tlcnMscHJldmlvdXNEaW1lbnNpb25zUmVjdXJzaXZlLHRyZWVWaWV3Tm9kZUhhbmRsZXIpO3JlY3Vyc2lvbkRlcHRoVHJhY2tlci5wb3AoKTt9fSxhZGREaW1lbnNpb25Ub1RvcERvd25IZWF2eVZpZXdOb2RlXyh0cmVlVmlld0NoaWxkTm9kZSxoZWF2eVZpZXdQYXJlbnROb2RlLGN1cnJlbnREaW1lbnNpb24scmVjdXJzaW9uRGVwdGhUcmFja2VycyxwcmV2aW91c0RpbWVuc2lvbnNSZWN1cnNpdmUpe3RoaXMuYWRkRGltZW5zaW9uVG9Ub3BEb3duSGVhdnlWaWV3Tm9kZVJlY3Vyc2l2ZWx5Xyh0cmVlVmlld0NoaWxkTm9kZSxoZWF2eVZpZXdQYXJlbnROb2RlLGN1cnJlbnREaW1lbnNpb24scmVjdXJzaW9uRGVwdGhUcmFja2VycyxwcmV2aW91c0RpbWVuc2lvbnNSZWN1cnNpdmUsMSk7fSxhZGREaW1lbnNpb25Ub1RvcERvd25IZWF2eVZpZXdOb2RlUmVjdXJzaXZlbHlfKHRyZWVWaWV3Q2hpbGROb2RlLGhlYXZ5Vmlld1BhcmVudE5vZGUsY3VycmVudERpbWVuc2lvbixyZWN1cnNpb25EZXB0aFRyYWNrZXJzLHByZXZpb3VzRGltZW5zaW9uc1JlY3Vyc2l2ZSxzdWJUcmVlRGVwdGgpe2NvbnN0IHJlY3Vyc2lvbkRlcHRoVHJhY2tlcj1yZWN1cnNpb25EZXB0aFRyYWNrZXJzW2N1cnJlbnREaW1lbnNpb25dO2NvbnN0IGN1cnJlbnREaW1lbnNpb25SZWN1cnNpdmU9c3ViVHJlZURlcHRoPD1yZWN1cnNpb25EZXB0aFRyYWNrZXIucmVjdXJzaW9uRGVwdGg7Y29uc3QgY3VycmVudE9yUHJldmlvdXNEaW1lbnNpb25zUmVjdXJzaXZlPWN1cnJlbnREaW1lbnNpb25SZWN1cnNpdmV8fHByZXZpb3VzRGltZW5zaW9uc1JlY3Vyc2l2ZTtjb25zdCBkaW1lbnNpb25UaXRsZT10cmVlVmlld0NoaWxkTm9kZS50aXRsZVtjdXJyZW50RGltZW5zaW9uXTtjb25zdCBoZWF2eVZpZXdDaGlsZE5vZGU9dGhpcy5nZXRPckNyZWF0ZUNoaWxkTm9kZV8oaGVhdnlWaWV3UGFyZW50Tm9kZSxjdXJyZW50RGltZW5zaW9uLGRpbWVuc2lvblRpdGxlKTt0aGlzLmFkZE5vZGVWYWx1ZXNfKHRyZWVWaWV3Q2hpbGROb2RlLGhlYXZ5Vmlld0NoaWxkTm9kZSwhY3VycmVudE9yUHJldmlvdXNEaW1lbnNpb25zUmVjdXJzaXZlKTt0aGlzLmFkZERpbWVuc2lvbnNUb0dlbmVyaWNIZWF2eVZpZXdOb2RlXyh0cmVlVmlld0NoaWxkTm9kZSxoZWF2eVZpZXdDaGlsZE5vZGUsY3VycmVudERpbWVuc2lvbisxLHJlY3Vyc2lvbkRlcHRoVHJhY2tlcnMsY3VycmVudE9yUHJldmlvdXNEaW1lbnNpb25zUmVjdXJzaXZlLHRoaXMuYWRkRGltZW5zaW9uVG9Ub3BEb3duSGVhdnlWaWV3Tm9kZV8uYmluZCh0aGlzKSk7Zm9yKGNvbnN0IHRyZWVWaWV3R3JhbmRDaGlsZE5vZGUgb2YKLXRyZWVWaWV3Q2hpbGROb2RlLmNoaWxkcmVuW2N1cnJlbnREaW1lbnNpb25dLnZhbHVlcygpKXtyZWN1cnNpb25EZXB0aFRyYWNrZXIucHVzaCh0cmVlVmlld0dyYW5kQ2hpbGROb2RlKTt0aGlzLmFkZERpbWVuc2lvblRvVG9wRG93bkhlYXZ5Vmlld05vZGVSZWN1cnNpdmVseV8odHJlZVZpZXdHcmFuZENoaWxkTm9kZSxoZWF2eVZpZXdDaGlsZE5vZGUsY3VycmVudERpbWVuc2lvbixyZWN1cnNpb25EZXB0aFRyYWNrZXJzLHByZXZpb3VzRGltZW5zaW9uc1JlY3Vyc2l2ZSxzdWJUcmVlRGVwdGgrMSk7cmVjdXJzaW9uRGVwdGhUcmFja2VyLnBvcCgpO319LGFkZERpbWVuc2lvblRvQm90dG9tVXBIZWF2eVZpZXdOb2RlXyh0cmVlVmlld0NoaWxkTm9kZSxoZWF2eVZpZXdQYXJlbnROb2RlLGN1cnJlbnREaW1lbnNpb24scmVjdXJzaW9uRGVwdGhUcmFja2VycyxwcmV2aW91c0RpbWVuc2lvbnNSZWN1cnNpdmUpe2NvbnN0IHJlY3Vyc2lvbkRlcHRoVHJhY2tlcj1yZWN1cnNpb25EZXB0aFRyYWNrZXJzW2N1cnJlbnREaW1lbnNpb25dO2NvbnN0IGJvdHRvbUluZGV4PXJlY3Vyc2lvbkRlcHRoVHJhY2tlci5ib3R0b21JbmRleDtjb25zdCB0b3BJbmRleD1yZWN1cnNpb25EZXB0aFRyYWNrZXIudG9wSW5kZXg7Y29uc3QgZmlyc3ROb25SZWN1cnNpdmVJbmRleD1ib3R0b21JbmRleCtyZWN1cnNpb25EZXB0aFRyYWNrZXIucmVjdXJzaW9uRGVwdGg7Y29uc3Qgdmlld05vZGVQYXRoPXJlY3Vyc2lvbkRlcHRoVHJhY2tlci52aWV3Tm9kZVBhdGg7Y29uc3QgdHJhY2tlckFuY2VzdG9yTm9kZT1yZWN1cnNpb25EZXB0aFRyYWNrZXIudHJhY2tlckFuY2VzdG9yTm9kZTtsZXQgaGVhdnlWaWV3RGVzY2VuZGFudE5vZGU9aGVhdnlWaWV3UGFyZW50Tm9kZTtmb3IobGV0IGk9Ym90dG9tSW5kZXg7aTx0b3BJbmRleDtpKyspe2NvbnN0IHRyZWVWaWV3QW5jZXN0b3JOb2RlPXZpZXdOb2RlUGF0aFtpXTtjb25zdCBkaW1lbnNpb25UaXRsZT10cmVlVmlld0FuY2VzdG9yTm9kZS50aXRsZVtjdXJyZW50RGltZW5zaW9uXTtoZWF2eVZpZXdEZXNjZW5kYW50Tm9kZT10aGlzLmdldE9yQ3JlYXRlQ2hpbGROb2RlXyhoZWF2eVZpZXdEZXNjZW5kYW50Tm9kZSxjdXJyZW50RGltZW5zaW9uLGRpbWVuc2lvblRpdGxlKTtjb25zdCBjdXJyZW50RGltZW5zaW9uUmVjdXJzaXZlPWk8Zmlyc3ROb25SZWN1cnNpdmVJbmRleDtjb25zdCBjdXJyZW50T3JQcmV2aW91c0RpbWVuc2lvbnNSZWN1cnNpdmU9Y3VycmVudERpbWVuc2lvblJlY3Vyc2l2ZXx8cHJldmlvdXNEaW1lbnNpb25zUmVjdXJzaXZlO3RoaXMuYWRkTm9kZVZhbHVlc18odHJlZVZpZXdDaGlsZE5vZGUsaGVhdnlWaWV3RGVzY2VuZGFudE5vZGUsIWN1cnJlbnRPclByZXZpb3VzRGltZW5zaW9uc1JlY3Vyc2l2ZSk7dGhpcy5hZGREaW1lbnNpb25zVG9HZW5lcmljSGVhdnlWaWV3Tm9kZV8odHJlZVZpZXdDaGlsZE5vZGUsaGVhdnlWaWV3RGVzY2VuZGFudE5vZGUsY3VycmVudERpbWVuc2lvbisxLHJlY3Vyc2lvbkRlcHRoVHJhY2tlcnMsY3VycmVudE9yUHJldmlvdXNEaW1lbnNpb25zUmVjdXJzaXZlLHRoaXMuYWRkRGltZW5zaW9uVG9Cb3R0b21VcEhlYXZ5Vmlld05vZGVfLmJpbmQodGhpcykpO319LGFkZE5vZGVWYWx1ZXNfKHNvdXJjZU5vZGUsdGFyZ2V0Tm9kZSxhZGRUb3RhbCl7Y29uc3QgdGFyZ2V0Tm9kZVZhbHVlcz10YXJnZXROb2RlLnZhbHVlcztjb25zdCBzb3VyY2VOb2RlVmFsdWVzPXNvdXJjZU5vZGUudmFsdWVzO2ZvcihsZXQgdj0wO3Y8dGhpcy52YWx1ZUNvdW50Xzt2Kyspe2NvbnN0IHRhcmdldE5vZGVWYWx1ZT10YXJnZXROb2RlVmFsdWVzW3ZdO2NvbnN0IHNvdXJjZU5vZGVWYWx1ZT1zb3VyY2VOb2RlVmFsdWVzW3ZdO3RhcmdldE5vZGVWYWx1ZS5zZWxmKz1zb3VyY2VOb2RlVmFsdWUuc2VsZjtpZihhZGRUb3RhbCl7dGFyZ2V0Tm9kZVZhbHVlLnRvdGFsKz1zb3VyY2VOb2RlVmFsdWUudG90YWw7aWYodGhpcy5jb21wbGV0ZSl7dGFyZ2V0Tm9kZVZhbHVlLnRvdGFsU3RhdGU9RVhBQ1Q7fWVsc2UgaWYoc291cmNlTm9kZVZhbHVlLnRvdGFsU3RhdGU+Tk9UX1BST1ZJREVEKXt0YXJnZXROb2RlVmFsdWUudG90YWxTdGF0ZT1NYXRoLm1heCh0YXJnZXROb2RlVmFsdWUudG90YWxTdGF0ZSxMT1dFUl9CT1VORCk7fX19fX07ZnVuY3Rpb24gUmVjdXJzaW9uRGVwdGhUcmFja2VyKG1heERlcHRoLGRpbWVuc2lvbil7dGhpcy50aXRsZVBhdGg9bmV3IEFycmF5KG1heERlcHRoKTt0aGlzLnZpZXdOb2RlUGF0aD1uZXcgQXJyYXkobWF4RGVwdGgpO3RoaXMuYm90dG9tSW5kZXg9dGhpcy50b3BJbmRleD1tYXhEZXB0aDt0aGlzLmRpbWVuc2lvbl89ZGltZW5zaW9uO3RoaXMuY3VycmVudFRyYWNrZXJOb2RlXz10aGlzLmNyZWF0ZU5vZGVfKDAsdW5kZWZpbmVkKTt9Ci1SZWN1cnNpb25EZXB0aFRyYWNrZXIucHJvdG90eXBlPXtwdXNoKHZpZXdOb2RlKXtpZih0aGlzLmJvdHRvbUluZGV4PT09MCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcHVzaCB0byBhIGZ1bGwgdHJhY2tlcicpO30KLWNvbnN0IHRpdGxlPXZpZXdOb2RlLnRpdGxlW3RoaXMuZGltZW5zaW9uX107dGhpcy5ib3R0b21JbmRleC0tO3RoaXMudGl0bGVQYXRoW3RoaXMuYm90dG9tSW5kZXhdPXRpdGxlO3RoaXMudmlld05vZGVQYXRoW3RoaXMuYm90dG9tSW5kZXhdPXZpZXdOb2RlO2xldCBjaGlsZFRyYWNrZXJOb2RlPXRoaXMuY3VycmVudFRyYWNrZXJOb2RlXy5jaGlsZHJlbi5nZXQodGl0bGUpO2lmKGNoaWxkVHJhY2tlck5vZGUhPT11bmRlZmluZWQpe3RoaXMuY3VycmVudFRyYWNrZXJOb2RlXz1jaGlsZFRyYWNrZXJOb2RlO3JldHVybjt9Ci1jb25zdCBtYXhMZW5ndGhzPXpGdW5jdGlvbih0aGlzLnRpdGxlUGF0aCx0aGlzLmJvdHRvbUluZGV4KTtsZXQgcmVjdXJzaW9uRGVwdGg9MDtmb3IobGV0IGk9MDtpPG1heExlbmd0aHMubGVuZ3RoO2krKyl7cmVjdXJzaW9uRGVwdGg9TWF0aC5tYXgocmVjdXJzaW9uRGVwdGgsbWF4TGVuZ3Roc1tpXSk7fQotY2hpbGRUcmFja2VyTm9kZT10aGlzLmNyZWF0ZU5vZGVfKHJlY3Vyc2lvbkRlcHRoLHRoaXMuY3VycmVudFRyYWNrZXJOb2RlXyk7dGhpcy5jdXJyZW50VHJhY2tlck5vZGVfLmNoaWxkcmVuLnNldCh0aXRsZSxjaGlsZFRyYWNrZXJOb2RlKTt0aGlzLmN1cnJlbnRUcmFja2VyTm9kZV89Y2hpbGRUcmFja2VyTm9kZTt9LHBvcCgpe2lmKHRoaXMuYm90dG9tSW5kZXg9PT10aGlzLnRvcEluZGV4KXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwb3AgZnJvbSBhbiBlbXB0eSB0cmFja2VyJyk7fQotdGhpcy50aXRsZVBhdGhbdGhpcy5ib3R0b21JbmRleF09dW5kZWZpbmVkO3RoaXMudmlld05vZGVQYXRoW3RoaXMuYm90dG9tSW5kZXhdPXVuZGVmaW5lZDt0aGlzLmJvdHRvbUluZGV4Kys7dGhpcy5jdXJyZW50VHJhY2tlck5vZGVfPXRoaXMuY3VycmVudFRyYWNrZXJOb2RlXy5wYXJlbnQ7fSxnZXQgcmVjdXJzaW9uRGVwdGgoKXtyZXR1cm4gdGhpcy5jdXJyZW50VHJhY2tlck5vZGVfLnJlY3Vyc2lvbkRlcHRoO30sY3JlYXRlTm9kZV8ocmVjdXJzaW9uRGVwdGgscGFyZW50KXtyZXR1cm57cmVjdXJzaW9uRGVwdGgscGFyZW50LGNoaWxkcmVuOm5ldyBNYXAoKX07fX07ZnVuY3Rpb24gekZ1bmN0aW9uKGxpc3Qsc3RhcnRJbmRleCl7Y29uc3Qgbj1saXN0Lmxlbmd0aC1zdGFydEluZGV4O2lmKG49PT0wKXJldHVybltdO2NvbnN0IHo9bmV3IEFycmF5KG4pO3pbMF09MDtmb3IobGV0IGk9MSxsZWZ0PTAscmlnaHQ9MDtpPG47KytpKXtsZXQgbWF4TGVuZ3RoO2lmKGk8PXJpZ2h0KXttYXhMZW5ndGg9TWF0aC5taW4ocmlnaHQtaSsxLHpbaS1sZWZ0XSk7fWVsc2V7bWF4TGVuZ3RoPTA7fQotd2hpbGUoaSttYXhMZW5ndGg8biYmbGlzdFtzdGFydEluZGV4K21heExlbmd0aF09PT1saXN0W3N0YXJ0SW5kZXgraSttYXhMZW5ndGhdKXsrK21heExlbmd0aDt9Ci1pZihpK21heExlbmd0aC0xPnJpZ2h0KXtsZWZ0PWk7cmlnaHQ9aSttYXhMZW5ndGgtMTt9Ci16W2ldPW1heExlbmd0aDt9Ci1yZXR1cm4gejt9Ci1yZXR1cm57TXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLE11bHRpRGltZW5zaW9uYWxWaWV3Tm9kZSxSZWN1cnNpb25EZXB0aFRyYWNrZXIsekZ1bmN0aW9uLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmNocm9tZScsZnVuY3Rpb24oKXtjbGFzcyBDcHVUaW1le3N0YXRpYyBnZXRDcHVUaW1lRm9yVGhyZWFkKHRocmVhZCxyYW5nZSl7bGV0IHRvdGFsQ3B1VGltZT0wO3RyLmIuaXRlcmF0ZU92ZXJJbnRlcnNlY3RpbmdJbnRlcnZhbHModGhyZWFkLnNsaWNlR3JvdXAudG9wTGV2ZWxTbGljZXMsc2xpY2U9PnNsaWNlLnN0YXJ0LHNsaWNlPT5zbGljZS5lbmQscmFuZ2UubWluLHJhbmdlLm1heCxzbGljZT0+e2lmKHNsaWNlLmR1cmF0aW9uPT09MClyZXR1cm47aWYoIXNsaWNlLmNwdUR1cmF0aW9uKXJldHVybjtjb25zdCBpbnRlcnNlY3Rpb249cmFuZ2UuZmluZEludGVyc2VjdGlvbihzbGljZS5yYW5nZSk7Y29uc3QgZnJhY3Rpb25PZlNsaWNlSW5zaWRlUmFuZ2VPZkludGVyZXN0PWludGVyc2VjdGlvbi5kdXJhdGlvbi9zbGljZS5kdXJhdGlvbjt0b3RhbENwdVRpbWUrPXNsaWNlLmNwdUR1cmF0aW9uKmZyYWN0aW9uT2ZTbGljZUluc2lkZVJhbmdlT2ZJbnRlcmVzdDt9KTtyZXR1cm4gdG90YWxDcHVUaW1lO30KLXN0YXRpYyBnZXRTdGFnZVRvSW5pdGlhdG9yVG9TZWdtZW50Qm91bmRzKHNlZ21lbnRzLHJhbmdlT2ZJbnRlcmVzdCl7Y29uc3Qgc3RhZ2VUb0luaXRpYXRvclRvUmFuZ2VzPW5ldyBNYXAoKTtzdGFnZVRvSW5pdGlhdG9yVG9SYW5nZXMuc2V0KCdhbGxfc3RhZ2VzJyxuZXcgTWFwKFtbJ2FsbF9pbml0aWF0b3JzJyxuZXcgU2V0KCldXSkpO2NvbnN0IGFsbFJhbmdlcz1zdGFnZVRvSW5pdGlhdG9yVG9SYW5nZXMuZ2V0KCdhbGxfc3RhZ2VzJykuZ2V0KCdhbGxfaW5pdGlhdG9ycycpO2Zvcihjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKXtpZighcmFuZ2VPZkludGVyZXN0LmludGVyc2VjdHNSYW5nZUluY2x1c2l2ZShzZWdtZW50LnJhbmdlKSljb250aW51ZTtjb25zdCBpbnRlcnNlY3RpbmdSYW5nZT1yYW5nZU9mSW50ZXJlc3QuZmluZEludGVyc2VjdGlvbihzZWdtZW50LnJhbmdlKTthbGxSYW5nZXMuYWRkKGludGVyc2VjdGluZ1JhbmdlKTtmb3IoY29uc3QgZXhwZWN0YXRpb24gb2Ygc2VnbWVudC5leHBlY3RhdGlvbnMpe2NvbnN0IHN0YWdlVGl0bGU9ZXhwZWN0YXRpb24uc3RhZ2VUaXRsZTtpZighc3RhZ2VUb0luaXRpYXRvclRvUmFuZ2VzLmhhcyhzdGFnZVRpdGxlKSl7c3RhZ2VUb0luaXRpYXRvclRvUmFuZ2VzLnNldChzdGFnZVRpdGxlLG5ldyBNYXAoW1snYWxsX2luaXRpYXRvcnMnLG5ldyBTZXQoKV1dKSk7fQotY29uc3QgaW5pdGlhdG9yVG9SYW5nZXM9c3RhZ2VUb0luaXRpYXRvclRvUmFuZ2VzLmdldChzdGFnZVRpdGxlKTtpbml0aWF0b3JUb1Jhbmdlcy5nZXQoJ2FsbF9pbml0aWF0b3JzJykuYWRkKGludGVyc2VjdGluZ1JhbmdlKTtjb25zdCBpbml0aWF0b3JUeXBlPWV4cGVjdGF0aW9uLmluaXRpYXRvclR5cGU7aWYoaW5pdGlhdG9yVHlwZSl7aWYoIWluaXRpYXRvclRvUmFuZ2VzLmhhcyhpbml0aWF0b3JUeXBlKSl7aW5pdGlhdG9yVG9SYW5nZXMuc2V0KGluaXRpYXRvclR5cGUsbmV3IFNldCgpKTt9Ci1pbml0aWF0b3JUb1Jhbmdlcy5nZXQoaW5pdGlhdG9yVHlwZSkuYWRkKGludGVyc2VjdGluZ1JhbmdlKTt9fX0KLXJldHVybiBzdGFnZVRvSW5pdGlhdG9yVG9SYW5nZXM7fQotc3RhdGljIGNvbXB1dGVDcHVUaW1lc0ZvclJhbmdlc18ocmFuZ2VzLHRocmVhZCl7Y29uc3QgcmFuZ2VUb0NwdVRpbWU9bmV3IE1hcCgpO2Zvcihjb25zdCByYW5nZSBvZiByYW5nZXMpe3JhbmdlVG9DcHVUaW1lLnNldChyYW5nZSxDcHVUaW1lLmdldENwdVRpbWVGb3JUaHJlYWQodGhyZWFkLHJhbmdlKSk7fQotcmV0dXJuIHJhbmdlVG9DcHVUaW1lO30KLXN0YXRpYyBjb25zdHJ1Y3RNdWx0aURpbWVuc2lvbmFsVmlldyhtb2RlbCxyYW5nZU9mSW50ZXJlc3Qpe2NvbnN0IG1kdkJ1aWxkZXI9bmV3IHRyLmIuTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyKDMsMik7Y29uc3Qgc3RhZ2VUb0luaXRpYXRvclRvUmFuZ2VzPUNwdVRpbWUuZ2V0U3RhZ2VUb0luaXRpYXRvclRvU2VnbWVudEJvdW5kcyhtb2RlbC51c2VyTW9kZWwuc2VnbWVudHMscmFuZ2VPZkludGVyZXN0KTtjb25zdCBhbGxTZWdtZW50Qm91bmRzSW5SYW5nZT1zdGFnZVRvSW5pdGlhdG9yVG9SYW5nZXMuZ2V0KCdhbGxfc3RhZ2VzJykuZ2V0KCdhbGxfaW5pdGlhdG9ycycpO2Zvcihjb25zdFtwaWQscHJvY2Vzc11vZiBPYmplY3QuZW50cmllcyhtb2RlbC5wcm9jZXNzZXMpKXtjb25zdCBwcm9jZXNzVHlwZT10ci5lLmNocm9tZS5jaHJvbWVfcHJvY2Vzc2VzLmNhbm9uaWNhbGl6ZVByb2Nlc3NOYW1lKHByb2Nlc3MubmFtZSk7Zm9yKGNvbnN0W3RpZCx0aHJlYWRdb2YgT2JqZWN0LmVudHJpZXMocHJvY2Vzcy50aHJlYWRzKSl7Y29uc3QgcmFuZ2VUb0NwdVRpbWU9Q3B1VGltZS5jb21wdXRlQ3B1VGltZXNGb3JSYW5nZXNfKGFsbFNlZ21lbnRCb3VuZHNJblJhbmdlLHRocmVhZCk7Zm9yKGNvbnN0W3N0YWdlLGluaXRpYXRvclRvUmFuZ2VzXW9mIHN0YWdlVG9Jbml0aWF0b3JUb1Jhbmdlcyl7Zm9yKGNvbnN0W2luaXRpYXRvcixyYW5nZXNdb2YgaW5pdGlhdG9yVG9SYW5nZXMpe2NvbnN0IGNwdVRpbWU9dHIuYi5tYXRoLlN0YXRpc3RpY3Muc3VtKHJhbmdlcyxyYW5nZT0+cmFuZ2VUb0NwdVRpbWUuZ2V0KHJhbmdlKSk7Y29uc3QgZHVyYXRpb249dHIuYi5tYXRoLlN0YXRpc3RpY3Muc3VtKHJhbmdlcyxyYW5nZT0+cmFuZ2UuZHVyYXRpb24pO2NvbnN0IGNwdVRpbWVQZXJTZWNvbmQ9Y3B1VGltZS9kdXJhdGlvbjttZHZCdWlsZGVyLmFkZFBhdGgoW1twcm9jZXNzVHlwZV0sW3RocmVhZC50eXBlXSxbc3RhZ2UsaW5pdGlhdG9yXV0sW2NwdVRpbWVQZXJTZWNvbmQsY3B1VGltZV0sdHIuYi5NdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmFsdWVLaW5kLlRPVEFMKTt9fX19Ci1yZXR1cm4gbWR2QnVpbGRlci5idWlsZFRvcERvd25UcmVlVmlldygpO319Ci1yZXR1cm57Q3B1VGltZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtjb25zdCBDUFVfUEVSQ0VOVEFHRV9VTklUPXRyLmIuVW5pdC5ieU5hbWUubm9ybWFsaXplZFBlcmNlbnRhZ2Vfc21hbGxlcklzQmV0dGVyO2NvbnN0IENQVV9USU1FX1VOSVQ9dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcjtmdW5jdGlvbiBjbG9uZVBhdGhfKHByZXZpb3VzUGF0aCl7cmV0dXJuIHByZXZpb3VzUGF0aC5tYXAoc3ViUGF0aD0+c3ViUGF0aC5tYXAoeD0+eCkpO30KLWZ1bmN0aW9uIGRlY29kZVBhdGhfKHBhdGgpe3JldHVybntwcm9jZXNzVHlwZTpwYXRoWzBdWzBdLHRocmVhZFR5cGU6cGF0aFsxXVswXSxyYWlsU3RhZ2U6cGF0aFsyXVswXSxpbml0aWF0b3JUeXBlOnBhdGhbMl1bMV19O30KLWZ1bmN0aW9uIHN0cmluZ2lmeVBhdGhOYW1lXyhwYXRoKXtjb25zdCBkZWNvZGVkUGF0aD1kZWNvZGVQYXRoXyhwYXRoKTtyZXR1cm5bZGVjb2RlZFBhdGgucHJvY2Vzc1R5cGUsZGVjb2RlZFBhdGgudGhyZWFkVHlwZSxkZWNvZGVkUGF0aC5yYWlsU3RhZ2UsZGVjb2RlZFBhdGguaW5pdGlhdG9yVHlwZV0uam9pbignOicpO30KLWNsYXNzIENwdVRpbWVUcmVlRGF0YVJlcG9ydGVye2NvbnN0cnVjdG9yKCl7dGhpcy52aXNpdGVkU2V0Xz1uZXcgU2V0KCk7fQotcmVwb3J0VmFsdWVzRnJvbU5vZGVfKG5vZGUscGF0aCl7Y29uc3QgZGVjb2RlZFBhdGg9ZGVjb2RlUGF0aF8ocGF0aCk7Y29uc3QgcHJvY2Vzc1R5cGU9ZGVjb2RlZFBhdGgucHJvY2Vzc1R5cGV8fCdhbGxfcHJvY2Vzc2VzJztjb25zdCB0aHJlYWRUeXBlPWRlY29kZWRQYXRoLnRocmVhZFR5cGV8fCdhbGxfdGhyZWFkcyc7aWYoIWRlY29kZWRQYXRoLnJhaWxTdGFnZXx8IWRlY29kZWRQYXRoLmluaXRpYXRvclR5cGUpcmV0dXJuO2NvbnN0e3JhaWxTdGFnZSxpbml0aWF0b3JUeXBlfT1kZWNvZGVkUGF0aDtjb25zdCBzZXJpYWxpemVkUGF0aE5hbWU9W3Byb2Nlc3NUeXBlLHRocmVhZFR5cGUscmFpbFN0YWdlLGluaXRpYXRvclR5cGVdLmpvaW4oJzonKTtjb25zdCBjcHVQZXJjZW50YWdlVmFsdWU9bm9kZS52YWx1ZXNbMF0udG90YWw7Y29uc3QgY3B1VGltZVZhbHVlPW5vZGUudmFsdWVzWzFdLnRvdGFsO3RoaXMuaGlzdG9ncmFtU2V0Xy5jcmVhdGVIaXN0b2dyYW0oYGNwdVBlcmNlbnRhZ2U6JHtzZXJpYWxpemVkUGF0aE5hbWV9YCxDUFVfUEVSQ0VOVEFHRV9VTklULGNwdVBlcmNlbnRhZ2VWYWx1ZSk7dGhpcy5oaXN0b2dyYW1TZXRfLmNyZWF0ZUhpc3RvZ3JhbShgY3B1VGltZToke3NlcmlhbGl6ZWRQYXRoTmFtZX1gLENQVV9USU1FX1VOSVQsY3B1VGltZVZhbHVlKTt9Ci1yZXBvcnREYXRhRnJvbVRyZWVfKHJvb3Qscm9vdFBhdGgpe2NvbnN0IHJvb3RQYXRoU3RyaW5nPXN0cmluZ2lmeVBhdGhOYW1lXyhyb290UGF0aCk7aWYodGhpcy52aXNpdGVkU2V0Xy5oYXMocm9vdFBhdGhTdHJpbmcpKXJldHVybjt0aGlzLnZpc2l0ZWRTZXRfLmFkZChyb290UGF0aFN0cmluZyk7dGhpcy5yZXBvcnRWYWx1ZXNGcm9tTm9kZV8ocm9vdCxyb290UGF0aCk7Zm9yKGxldCBkaW1lbnNpb249MDtkaW1lbnNpb248cm9vdC5jaGlsZHJlbi5sZW5ndGg7ZGltZW5zaW9uKyspe2NvbnN0IGNoaWxkcmVuPXJvb3QuY2hpbGRyZW5bZGltZW5zaW9uXTtmb3IoY29uc3RbbmFtZSxub2RlXW9mIGNoaWxkcmVuKXtjb25zdCBjaGlsZFBhdGg9Y2xvbmVQYXRoXyhyb290UGF0aCk7Y2hpbGRQYXRoW2RpbWVuc2lvbl0ucHVzaChuYW1lKTt0aGlzLnJlcG9ydERhdGFGcm9tVHJlZV8obm9kZSxjaGlsZFBhdGgpO319fQotYWRkVHJlZVZhbHVlc1RvSGlzdG9ncmFtU2V0KHJvb3ROb2RlLGhpc3RvZ3JhbVNldCl7Y29uc3Qgcm9vdFBhdGg9W1tdLFtdLFtdXTt0aGlzLnJvb3ROb2RlXz1yb290Tm9kZTt0aGlzLmhpc3RvZ3JhbVNldF89aGlzdG9ncmFtU2V0O3RoaXMucmVwb3J0RGF0YUZyb21UcmVlXyh0aGlzLnJvb3ROb2RlXyxyb290UGF0aCk7fQotc3RhdGljIHJlcG9ydFRvSGlzdG9ncmFtU2V0KHJvb3ROb2RlLGhpc3RvZ3JhbVNldCl7Y29uc3QgcmVwb3J0ZXI9bmV3IENwdVRpbWVUcmVlRGF0YVJlcG9ydGVyKCk7cmVwb3J0ZXIuYWRkVHJlZVZhbHVlc1RvSGlzdG9ncmFtU2V0KHJvb3ROb2RlLGhpc3RvZ3JhbVNldCk7fX0KLXJldHVybntDcHVUaW1lVHJlZURhdGFSZXBvcnRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBuZXdDcHVUaW1lTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwsb3B0X29wdGlvbnMpe2NvbnN0IHJhbmdlT2ZJbnRlcmVzdD1vcHRfb3B0aW9ucyYmb3B0X29wdGlvbnMucmFuZ2VPZkludGVyZXN0P29wdF9vcHRpb25zLnJhbmdlT2ZJbnRlcmVzdDptb2RlbC5ib3VuZHM7Y29uc3Qgcm9vdE5vZGU9dHIuZS5jaHJvbWUuQ3B1VGltZS5jb25zdHJ1Y3RNdWx0aURpbWVuc2lvbmFsVmlldyhtb2RlbCxyYW5nZU9mSW50ZXJlc3QpO3RyLm1ldHJpY3Muc2guQ3B1VGltZVRyZWVEYXRhUmVwb3J0ZXIucmVwb3J0VG9IaXN0b2dyYW1TZXQocm9vdE5vZGUsaGlzdG9ncmFtcyk7fQotdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihuZXdDcHVUaW1lTWV0cmljLHtzdXBwb3J0c1JhbmdlT2ZJbnRlcmVzdDp0cnVlfSk7cmV0dXJue25ld0NwdVRpbWVNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3Muc2gnLGZ1bmN0aW9uKCl7Y29uc3QgaW5jbHVkZUhpc3RvZ3JhbU5hbWVzPVsnY3B1VGltZTphbGxfcHJvY2Vzc2VzOmFsbF90aHJlYWRzOmFsbF9zdGFnZXM6YWxsX2luaXRpYXRvcnMnLCdjcHVQZXJjZW50YWdlOmFsbF9wcm9jZXNzZXM6YWxsX3RocmVhZHM6YWxsX3N0YWdlczphbGxfaW5pdGlhdG9ycycsJ2NwdVRpbWU6YnJvd3Nlcl9wcm9jZXNzOmFsbF90aHJlYWRzOmFsbF9zdGFnZXM6YWxsX2luaXRpYXRvcnMnLCdjcHVQZXJjZW50YWdlOmJyb3dzZXJfcHJvY2VzczphbGxfdGhyZWFkczphbGxfc3RhZ2VzOmFsbF9pbml0aWF0b3JzJywnY3B1VGltZTpyZW5kZXJlcl9wcm9jZXNzZXM6YWxsX3RocmVhZHM6YWxsX3N0YWdlczphbGxfaW5pdGlhdG9ycycsJ2NwdVBlcmNlbnRhZ2U6cmVuZGVyZXJfcHJvY2Vzc2VzOmFsbF90aHJlYWRzOmFsbF9zdGFnZXM6YWxsX2luaXRpYXRvcnMnLCdjcHVUaW1lOmdwdV9wcm9jZXNzOmFsbF90aHJlYWRzOmFsbF9zdGFnZXM6YWxsX2luaXRpYXRvcnMnLCdjcHVQZXJjZW50YWdlOmdwdV9wcm9jZXNzOmFsbF90aHJlYWRzOmFsbF9zdGFnZXM6YWxsX2luaXRpYXRvcnMnLCdjcHVUaW1lOnJlbmRlcmVyX3Byb2Nlc3NlczpDclJlbmRlcmVyTWFpbjphbGxfc3RhZ2VzOmFsbF9pbml0aWF0b3JzJywnY3B1UGVyY2VudGFnZTpyZW5kZXJlcl9wcm9jZXNzZXM6Q3JSZW5kZXJlck1haW46YWxsX3N0YWdlczphbGxfaW5pdGlhdG9ycycsJ2NwdVRpbWU6YnJvd3Nlcl9wcm9jZXNzOkNyQnJvd3Nlck1haW46YWxsX3N0YWdlczphbGxfaW5pdGlhdG9ycycsJ2NwdVBlcmNlbnRhZ2U6YnJvd3Nlcl9wcm9jZXNzOkNyQnJvd3Nlck1haW46YWxsX3N0YWdlczphbGxfaW5pdGlhdG9ycycsJ2NwdVRpbWU6YWxsX3Byb2Nlc3NlczphbGxfdGhyZWFkczpMb2FkOlN1Y2Nlc3NmdWwnLCdjcHVQZXJjZW50YWdlOmFsbF9wcm9jZXNzZXM6YWxsX3RocmVhZHM6TG9hZDpTdWNjZXNzZnVsJyxdO2Z1bmN0aW9uIGxpbWl0ZWRDcHVUaW1lTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwsb3B0X29wdGlvbnMpe2NvbnN0IGFsbENwdUhpc3RvZ3JhbXM9bmV3IHRyLnYuSGlzdG9ncmFtU2V0KCk7dHIubWV0cmljcy5zaC5uZXdDcHVUaW1lTWV0cmljKGFsbENwdUhpc3RvZ3JhbXMsbW9kZWwsb3B0X29wdGlvbnMpO2Zvcihjb25zdCBoaXN0b2dyYW1OYW1lIG9mIGluY2x1ZGVIaXN0b2dyYW1OYW1lcyl7Y29uc3QgaGlzdG9ncmFtPWFsbENwdUhpc3RvZ3JhbXMuZ2V0SGlzdG9ncmFtTmFtZWQoaGlzdG9ncmFtTmFtZSk7aWYoaGlzdG9ncmFtKWhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGhpc3RvZ3JhbSk7fX0KLXRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIobGltaXRlZENwdVRpbWVNZXRyaWMse3N1cHBvcnRzUmFuZ2VPZkludGVyZXN0OnRydWV9KTtyZXR1cm57bGltaXRlZENwdVRpbWVNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3Muc2gnLGZ1bmN0aW9uKCl7Y29uc3QgTE9OR19UQVNLX01TPTUwO2NvbnN0IExPTkdFU1RfVEFTS19NUz0xMDAwO2Z1bmN0aW9uIGl0ZXJhdGVMb25nVG9wTGV2ZWxUYXNrc09uVGhyZWFkSW5SYW5nZSh0aHJlYWQsb3B0X3JhbmdlLGNiLG9wdF90aGlzKXt0aHJlYWQuc2xpY2VHcm91cC50b3BMZXZlbFNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHNsaWNlKXtpZihvcHRfcmFuZ2UmJiFvcHRfcmFuZ2UuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUoc2xpY2Uuc3RhcnQsc2xpY2UuZW5kKSl7cmV0dXJuO30KLWlmKHNsaWNlLmR1cmF0aW9uPExPTkdfVEFTS19NUylyZXR1cm47Y2IuY2FsbChvcHRfdGhpcyxzbGljZSk7fSk7fQotZnVuY3Rpb24gaXRlcmF0ZVJlbmRlcmVyTWFpblRocmVhZHMobW9kZWwsY2Isb3B0X3RoaXMpe2NvbnN0IG1vZGVsSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2lmKG1vZGVsSGVscGVyIT09dW5kZWZpbmVkKXtPYmplY3QudmFsdWVzKG1vZGVsSGVscGVyLnJlbmRlcmVySGVscGVycykuZm9yRWFjaChmdW5jdGlvbihyZW5kZXJlckhlbHBlcil7aWYoIXJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQpcmV0dXJuO2NiLmNhbGwob3B0X3RoaXMscmVuZGVyZXJIZWxwZXIubWFpblRocmVhZCk7fSk7fX0KLWNvbnN0IEJJTl9CT1VOREFSSUVTPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoTE9OR19UQVNLX01TLExPTkdFU1RfVEFTS19NUyw0MCk7ZnVuY3Rpb24gbG9uZ1Rhc2tzTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwsb3B0X29wdGlvbnMpe2NvbnN0IHJhbmdlT2ZJbnRlcmVzdD1vcHRfb3B0aW9ucz9vcHRfb3B0aW9ucy5yYW5nZU9mSW50ZXJlc3Q6dW5kZWZpbmVkO2NvbnN0IGxvbmdUYXNrSGlzdD1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnbG9uZ1Rhc2tzJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLHtiaW5Cb3VuZGFyaWVzOkJJTl9CT1VOREFSSUVTLGRlc2NyaXB0aW9uOidkdXJhdGlvbnMgb2YgbG9uZyB0YXNrcycsfSk7Y29uc3QgcmVsYXRlZE5hbWVzPW5ldyB0ci52LmQuUmVsYXRlZE5hbWVNYXAoKTtsb25nVGFza0hpc3QuZGlhZ25vc3RpY3Muc2V0KCdjYXRlZ29yaWVzJyxyZWxhdGVkTmFtZXMpO2l0ZXJhdGVSZW5kZXJlck1haW5UaHJlYWRzKG1vZGVsLGZ1bmN0aW9uKHRocmVhZCl7aXRlcmF0ZUxvbmdUb3BMZXZlbFRhc2tzT25UaHJlYWRJblJhbmdlKHRocmVhZCxyYW5nZU9mSW50ZXJlc3QsZnVuY3Rpb24odGFzayl7Y29uc3QgYnJlYWtkb3duPW5ldyB0ci52LmQuQnJlYWtkb3duKCk7YnJlYWtkb3duLmNvbG9yU2NoZW1lPXRyLnYuZC5DT0xPUl9TQ0hFTUVfQ0hST01FX1VTRVJfRlJJRU5ETFlfQ0FURUdPUllfRFJJVkVSO2Zvcihjb25zdCBzbGljZSBvZiB0YXNrLmRlc2NlbmRlbnRTbGljZXMpe2NvbnN0IHNhbXBsZT1zbGljZS5jcHVTZWxmVGltZTtpZihzYW1wbGU9PT11bmRlZmluZWQpY29udGludWU7Y29uc3QgY2F0ZWdvcnk9bW9kZWwuZ2V0VXNlckZyaWVuZGx5Q2F0ZWdvcnlGcm9tRXZlbnQoc2xpY2UpO2NvbnN0IGhpc3ROYW1lPSdsb25nVGFza3M6JytjYXRlZ29yeTtsZXQgaGlzdD1oaXN0b2dyYW1zLmdldEhpc3RvZ3JhbU5hbWVkKGhpc3ROYW1lKTtpZihoaXN0PT09dW5kZWZpbmVkKXtoaXN0PWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGhpc3ROYW1lLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2JpbkJvdW5kYXJpZXM6QklOX0JPVU5EQVJJRVMsfSk7cmVsYXRlZE5hbWVzLnNldChjYXRlZ29yeSxoaXN0Lm5hbWUpO30KLWhpc3QuYWRkU2FtcGxlKHNhbXBsZSx7ZXZlbnRzOm5ldyB0ci52LmQuUmVsYXRlZEV2ZW50U2V0KFtzbGljZV0pLH0pO2JyZWFrZG93bi5zZXQoY2F0ZWdvcnksc2FtcGxlK2JyZWFrZG93bi5nZXQoY2F0ZWdvcnkpKTt9Ci1sb25nVGFza0hpc3QuYWRkU2FtcGxlKHRhc2suZHVyYXRpb24se2V2ZW50czpuZXcgdHIudi5kLlJlbGF0ZWRFdmVudFNldChbdGFza10pLGNhdGVnb3JpZXM6YnJlYWtkb3duLH0pO30pO30pO30KLXRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIobG9uZ1Rhc2tzTWV0cmljLHtzdXBwb3J0c1JhbmdlT2ZJbnRlcmVzdDp0cnVlLHJlcXVpcmVkQ2F0ZWdvcmllczpbJ3RvcGxldmVsJ10sfSk7cmV0dXJue2xvbmdUYXNrc01ldHJpYyxpdGVyYXRlTG9uZ1RvcExldmVsVGFza3NPblRocmVhZEluUmFuZ2UsaXRlcmF0ZVJlbmRlcmVyTWFpblRocmVhZHMsTE9OR19UQVNLX01TLExPTkdFU1RfVEFTS19NUyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtjb25zdCBCQUNLR1JPVU5EPXRyLm1vZGVsLkNvbnRhaW5lck1lbW9yeUR1bXAuTGV2ZWxPZkRldGFpbC5CQUNLR1JPVU5EO2NvbnN0IExJR0hUPXRyLm1vZGVsLkNvbnRhaW5lck1lbW9yeUR1bXAuTGV2ZWxPZkRldGFpbC5MSUdIVDtjb25zdCBERVRBSUxFRD10ci5tb2RlbC5Db250YWluZXJNZW1vcnlEdW1wLkxldmVsT2ZEZXRhaWwuREVUQUlMRUQ7Y29uc3Qgc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyPXRyLmIuVW5pdC5ieU5hbWUuc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyO2NvbnN0IGNvdW50X3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLmNvdW50X3NtYWxsZXJJc0JldHRlcjtjb25zdCBESVNQTEFZRURfU0laRV9OVU1FUklDX05BTUU9dHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcC5ESVNQTEFZRURfU0laRV9OVU1FUklDX05BTUU7Y29uc3QgTEVWRUxfT0ZfREVUQUlMX05BTUVTPW5ldyBNYXAoKTtMRVZFTF9PRl9ERVRBSUxfTkFNRVMuc2V0KEJBQ0tHUk9VTkQsJ2JhY2tncm91bmQnKTtMRVZFTF9PRl9ERVRBSUxfTkFNRVMuc2V0KExJR0hULCdsaWdodCcpO0xFVkVMX09GX0RFVEFJTF9OQU1FUy5zZXQoREVUQUlMRUQsJ2RldGFpbGVkJyk7Y29uc3QgSEVBUF9QUk9GSUxFUl9ERVRBSUxfTkFNRT0naGVhcF9wcm9maWxlcic7Y29uc3QgQk9VTkRBUklFU19GT1JfVU5JVF9NQVA9bmV3IFdlYWtNYXAoKTtCT1VOREFSSUVTX0ZPUl9VTklUX01BUC5zZXQoY291bnRfc21hbGxlcklzQmV0dGVyLHRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoMCwyMCwyMCkpO0JPVU5EQVJJRVNfRk9SX1VOSVRfTUFQLnNldChzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsbmV3IHRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcygwKS5hZGRCaW5Cb3VuZGFyeSgxMDI0KS5hZGRFeHBvbmVudGlhbEJpbnMoMTYqMTAyNCoxMDI0KjEwMjQsNCoyNCkpO2NvbnN0IENIUk9NRV9QUk9DRVNTX05BTUVTPXRyLmUuY2hyb21lLmNocm9tZV9wcm9jZXNzZXMuQ0hST01FX1BST0NFU1NfTkFNRVM7ZnVuY3Rpb24gbWVtb3J5TWV0cmljKHZhbHVlcyxtb2RlbCxvcHRfb3B0aW9ucyl7Y29uc3QgcmFuZ2VPZkludGVyZXN0PW9wdF9vcHRpb25zP29wdF9vcHRpb25zLnJhbmdlT2ZJbnRlcmVzdDp1bmRlZmluZWQ7Y29uc3QgYnJvd3Nlck5hbWVUb0dsb2JhbER1bXBzPXRyLm1ldHJpY3Muc2guc3BsaXRHbG9iYWxEdW1wc0J5QnJvd3Nlck5hbWUobW9kZWwscmFuZ2VPZkludGVyZXN0KTthZGRHZW5lcmFsTWVtb3J5RHVtcFZhbHVlcyhicm93c2VyTmFtZVRvR2xvYmFsRHVtcHMsdmFsdWVzKTthZGREZXRhaWxlZE1lbW9yeUR1bXBWYWx1ZXMoYnJvd3Nlck5hbWVUb0dsb2JhbER1bXBzLHZhbHVlcyk7YWRkTWVtb3J5RHVtcENvdW50VmFsdWVzKGJyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcyx2YWx1ZXMpO30KLWNvbnN0IFVTRVJfRlJJRU5ETFlfQlJPV1NFUl9OQU1FUz17J2Nocm9tZSc6J0Nocm9tZScsJ3dlYnZpZXcnOidXZWJWaWV3JywndW5rbm93bl9icm93c2VyJzonYW4gdW5rbm93biBicm93c2VyJ307ZnVuY3Rpb24gY29udmVydEJyb3dzZXJOYW1lVG9Vc2VyRnJpZW5kbHlOYW1lKGJyb3dzZXJOYW1lKXtmb3IoY29uc3QgYmFzZU5hbWUgaW4gVVNFUl9GUklFTkRMWV9CUk9XU0VSX05BTUVTKXtpZighYnJvd3Nlck5hbWUuc3RhcnRzV2l0aChiYXNlTmFtZSkpY29udGludWU7Y29uc3QgdXNlckZyaWVuZGx5QmFzZU5hbWU9VVNFUl9GUklFTkRMWV9CUk9XU0VSX05BTUVTW2Jhc2VOYW1lXTtjb25zdCBzdWZmaXg9YnJvd3Nlck5hbWUuc3Vic3RyaW5nKGJhc2VOYW1lLmxlbmd0aCk7aWYoc3VmZml4Lmxlbmd0aD09PTApe3JldHVybiB1c2VyRnJpZW5kbHlCYXNlTmFtZTt9ZWxzZSBpZigvXlxkKyQvLnRlc3Qoc3VmZml4KSl7cmV0dXJuIHVzZXJGcmllbmRseUJhc2VOYW1lKycoJytzdWZmaXgrJyknO319Ci1yZXR1cm4nXCcnK2Jyb3dzZXJOYW1lKydcJyBicm93c2VyJzt9Ci1mdW5jdGlvbiBjb252ZXJ0UHJvY2Vzc05hbWVUb1VzZXJGcmllbmRseU5hbWUocHJvY2Vzc05hbWUsb3B0X3JlcXVpcmVQbHVyYWwpe3N3aXRjaChwcm9jZXNzTmFtZSl7Y2FzZSBDSFJPTUVfUFJPQ0VTU19OQU1FUy5CUk9XU0VSOnJldHVybiBvcHRfcmVxdWlyZVBsdXJhbD8nYnJvd3NlciBwcm9jZXNzZXMnOid0aGUgYnJvd3NlciBwcm9jZXNzJztjYXNlIENIUk9NRV9QUk9DRVNTX05BTUVTLlJFTkRFUkVSOnJldHVybidyZW5kZXJlciBwcm9jZXNzZXMnO2Nhc2UgQ0hST01FX1BST0NFU1NfTkFNRVMuR1BVOnJldHVybiBvcHRfcmVxdWlyZVBsdXJhbD8nR1BVIHByb2Nlc3Nlcyc6J3RoZSBHUFUgcHJvY2Vzcyc7Y2FzZSBDSFJPTUVfUFJPQ0VTU19OQU1FUy5QUEFQSTpyZXR1cm4gb3B0X3JlcXVpcmVQbHVyYWw/J1BQQVBJIHByb2Nlc3Nlcyc6J3RoZSBQUEFQSSBwcm9jZXNzJztjYXNlIENIUk9NRV9QUk9DRVNTX05BTUVTLkFMTDpyZXR1cm4nYWxsIHByb2Nlc3Nlcyc7Y2FzZSBDSFJPTUVfUFJPQ0VTU19OQU1FUy5VTktOT1dOOnJldHVybid1bmtub3duIHByb2Nlc3Nlcyc7ZGVmYXVsdDpyZXR1cm4nXCcnK3Byb2Nlc3NOYW1lKydcJyBwcm9jZXNzZXMnO319Ci1mdW5jdGlvbiBhZGRHZW5lcmFsTWVtb3J5RHVtcFZhbHVlcyhicm93c2VyTmFtZVRvR2xvYmFsRHVtcHMsdmFsdWVzKXthZGRNZW1vcnlEdW1wVmFsdWVzKGJyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcyxnbWQ9PnRydWUsZnVuY3Rpb24ocHJvY2Vzc0R1bXAsYWRkUHJvY2Vzc1NjYWxhcil7YWRkUHJvY2Vzc1NjYWxhcih7c291cmNlOidwcm9jZXNzX2NvdW50Jyxwcm9wZXJ0eTpQUk9DRVNTX0NPVU5ULHZhbHVlOjF9KTtpZihwcm9jZXNzRHVtcC50b3RhbHMhPT11bmRlZmluZWQpe2FkZFByb2Nlc3NTY2FsYXIoe3NvdXJjZToncmVwb3J0ZWRfYnlfb3MnLHByb3BlcnR5OlJFU0lERU5UX1NJWkUsY29tcG9uZW50Olsnc3lzdGVtX21lbW9yeSddLHZhbHVlOnByb2Nlc3NEdW1wLnRvdGFscy5yZXNpZGVudEJ5dGVzfSk7YWRkUHJvY2Vzc1NjYWxhcih7c291cmNlOidyZXBvcnRlZF9ieV9vcycscHJvcGVydHk6UEVBS19SRVNJREVOVF9TSVpFLGNvbXBvbmVudDpbJ3N5c3RlbV9tZW1vcnknXSx2YWx1ZTpwcm9jZXNzRHVtcC50b3RhbHMucGVha1Jlc2lkZW50Qnl0ZXN9KTthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X29zJyxwcm9wZXJ0eTpQUklWQVRFX0ZPT1RQUklOVF9TSVpFLGNvbXBvbmVudDpbJ3N5c3RlbV9tZW1vcnknXSx2YWx1ZTpwcm9jZXNzRHVtcC50b3RhbHMucHJpdmF0ZUZvb3RwcmludEJ5dGVzLH0pO30KLWlmKHByb2Nlc3NEdW1wLm1lbW9yeUFsbG9jYXRvckR1bXBzPT09dW5kZWZpbmVkKXJldHVybjtwcm9jZXNzRHVtcC5tZW1vcnlBbGxvY2F0b3JEdW1wcy5mb3JFYWNoKGZ1bmN0aW9uKHJvb3RBbGxvY2F0b3JEdW1wKXtDSFJPTUVfVkFMVUVfUFJPUEVSVElFUy5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KXthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X2Nocm9tZScsY29tcG9uZW50Oltyb290QWxsb2NhdG9yRHVtcC5uYW1lXSxwcm9wZXJ0eSx2YWx1ZTpyb290QWxsb2NhdG9yRHVtcC5udW1lcmljc1twcm9wZXJ0eS5uYW1lXX0pO30pO2lmKHJvb3RBbGxvY2F0b3JEdW1wLm51bWVyaWNzLmFsbG9jYXRlZF9vYmplY3RzX3NpemU9PT11bmRlZmluZWQpe2NvbnN0IGFsbG9jYXRlZE9iamVjdHNEdW1wPXJvb3RBbGxvY2F0b3JEdW1wLmdldERlc2NlbmRhbnREdW1wQnlGdWxsTmFtZSgnYWxsb2NhdGVkX29iamVjdHMnKTtpZihhbGxvY2F0ZWRPYmplY3RzRHVtcCE9PXVuZGVmaW5lZCl7YWRkUHJvY2Vzc1NjYWxhcih7c291cmNlOidyZXBvcnRlZF9ieV9jaHJvbWUnLGNvbXBvbmVudDpbcm9vdEFsbG9jYXRvckR1bXAubmFtZV0scHJvcGVydHk6QUxMT0NBVEVEX09CSkVDVFNfU0laRSx2YWx1ZTphbGxvY2F0ZWRPYmplY3RzRHVtcC5udW1lcmljcy5zaXplfSk7fX19KTthZGRUb3BIZWFwRHVtcENhdGVnb3J5VmFsdWUocHJvY2Vzc0R1bXAsYWRkUHJvY2Vzc1NjYWxhcik7YWRkVjhNZW1vcnlEdW1wVmFsdWVzKHByb2Nlc3NEdW1wLGFkZFByb2Nlc3NTY2FsYXIpO30sZnVuY3Rpb24oY29tcG9uZW50VHJlZSl7Y29uc3QgdHJhY2luZ05vZGU9Y29tcG9uZW50VHJlZS5jaGlsZHJlblsxXS5nZXQoJ3RyYWNpbmcnKTtpZih0cmFjaW5nTm9kZT09PXVuZGVmaW5lZClyZXR1cm47Zm9yKGxldCBpPTA7aTxjb21wb25lbnRUcmVlLnZhbHVlcy5sZW5ndGg7aSsrKXtjb21wb25lbnRUcmVlLnZhbHVlc1tpXS50b3RhbC09dHJhY2luZ05vZGUudmFsdWVzW2ldLnRvdGFsO319LHZhbHVlcyk7fQotZnVuY3Rpb24gYWRkVG9wSGVhcER1bXBDYXRlZ29yeVZhbHVlKHByb2Nlc3NEdW1wLGFkZFByb2Nlc3NTY2FsYXIpe2lmKCFwcm9jZXNzRHVtcC5oZWFwRHVtcHMpe3JldHVybjt9Ci1mb3IoY29uc3QgYWxsb2NhdG9yTmFtZSBpbiBwcm9jZXNzRHVtcC5oZWFwRHVtcHMpe2NvbnN0IGhlYXBEdW1wPXByb2Nlc3NEdW1wLmhlYXBEdW1wc1thbGxvY2F0b3JOYW1lXTtpZihoZWFwRHVtcC5lbnRyaWVzPT09dW5kZWZpbmVkfHxoZWFwRHVtcC5lbnRyaWVzLmxlbmd0aD09PTApe3JldHVybjt9Ci1jb25zdCB0eXBlVG9TaXplPXt9O2ZvcihsZXQgaT0wO2k8aGVhcER1bXAuZW50cmllcy5sZW5ndGg7aSs9MSl7Y29uc3QgZW50cnk9aGVhcER1bXAuZW50cmllc1tpXTtpZighZW50cnkub2JqZWN0VHlwZU5hbWV8fGVudHJ5LmxlYWZTdGFja0ZyYW1lKXtjb250aW51ZTt9Ci1pZighdHlwZVRvU2l6ZVtlbnRyeS5vYmplY3RUeXBlTmFtZV0pe3R5cGVUb1NpemVbZW50cnkub2JqZWN0VHlwZU5hbWVdPTA7fQotdHlwZVRvU2l6ZVtlbnRyeS5vYmplY3RUeXBlTmFtZV0rPWVudHJ5LnNpemU7fQotbGV0IGxhcmdlc3RWYWx1ZT0wO2xldCBsYXJnZXN0VHlwZT0nJztmb3IoY29uc3Qga2V5IGluIHR5cGVUb1NpemUpe2lmKGxhcmdlc3RWYWx1ZTx0eXBlVG9TaXplW2tleV0pe2xhcmdlc3RWYWx1ZT10eXBlVG9TaXplW2tleV07bGFyZ2VzdFR5cGU9a2V5O319Ci1hZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X2Nocm9tZScsY29tcG9uZW50OlthbGxvY2F0b3JOYW1lLGxhcmdlc3RUeXBlXSxwcm9wZXJ0eTpIRUFQX0NBVEVHT1JZX1NJWkUsdmFsdWU6bGFyZ2VzdFZhbHVlfSk7fX0KLWZ1bmN0aW9uIGFkZFY4TWVtb3J5RHVtcFZhbHVlcyhwcm9jZXNzRHVtcCxhZGRQcm9jZXNzU2NhbGFyKXtjb25zdCB2OER1bXA9cHJvY2Vzc0R1bXAuZ2V0TWVtb3J5QWxsb2NhdG9yRHVtcEJ5RnVsbE5hbWUoJ3Y4Jyk7aWYodjhEdW1wPT09dW5kZWZpbmVkKXJldHVybjt2OER1bXAuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihpc29sYXRlRHVtcCl7Y29uc3QgbWFsbG9jRHVtcD1pc29sYXRlRHVtcC5nZXREZXNjZW5kYW50RHVtcEJ5RnVsbE5hbWUoJ21hbGxvYycpO2lmKG1hbGxvY0R1bXAhPT11bmRlZmluZWQpe2FkZFY4Q29tcG9uZW50VmFsdWVzKG1hbGxvY0R1bXAsWyd2OCcsJ2FsbG9jYXRlZF9ieV9tYWxsb2MnXSxhZGRQcm9jZXNzU2NhbGFyKTt9Ci1jb25zdCBoZWFwRHVtcD1pc29sYXRlRHVtcC5nZXREZXNjZW5kYW50RHVtcEJ5RnVsbE5hbWUoJ2hlYXBfc3BhY2VzJyk7aWYoaGVhcER1bXAhPT11bmRlZmluZWQpe2FkZFY4Q29tcG9uZW50VmFsdWVzKGhlYXBEdW1wLFsndjgnLCdoZWFwJ10sYWRkUHJvY2Vzc1NjYWxhcik7aGVhcER1bXAuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihzcGFjZUR1bXApe2lmKHNwYWNlRHVtcC5uYW1lPT09J290aGVyX3NwYWNlcycpcmV0dXJuO2FkZFY4Q29tcG9uZW50VmFsdWVzKHNwYWNlRHVtcCxbJ3Y4JywnaGVhcCcsc3BhY2VEdW1wLm5hbWVdLGFkZFByb2Nlc3NTY2FsYXIpO30pO319KTthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X2Nocm9tZScsY29tcG9uZW50OlsndjgnXSxwcm9wZXJ0eTpDT0RFX0FORF9NRVRBREFUQV9TSVpFLHZhbHVlOnY4RHVtcC5udW1lcmljcy5jb2RlX2FuZF9tZXRhZGF0YV9zaXplfSk7YWRkUHJvY2Vzc1NjYWxhcih7c291cmNlOidyZXBvcnRlZF9ieV9jaHJvbWUnLGNvbXBvbmVudDpbJ3Y4J10scHJvcGVydHk6Q09ERV9BTkRfTUVUQURBVEFfU0laRSx2YWx1ZTp2OER1bXAubnVtZXJpY3MuYnl0ZWNvZGVfYW5kX21ldGFkYXRhX3NpemV9KTt9Ci1mdW5jdGlvbiBhZGRWOENvbXBvbmVudFZhbHVlcyhjb21wb25lbnREdW1wLGNvbXBvbmVudFBhdGgsYWRkUHJvY2Vzc1NjYWxhcil7Q0hST01FX1ZBTFVFX1BST1BFUlRJRVMuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSl7YWRkUHJvY2Vzc1NjYWxhcih7c291cmNlOidyZXBvcnRlZF9ieV9jaHJvbWUnLGNvbXBvbmVudDpjb21wb25lbnRQYXRoLHByb3BlcnR5LHZhbHVlOmNvbXBvbmVudER1bXAubnVtZXJpY3NbcHJvcGVydHkubmFtZV19KTt9KTt9Ci1jb25zdCBQUk9DRVNTX0NPVU5UPXt1bml0OmNvdW50X3NtYWxsZXJJc0JldHRlcixidWlsZERlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUpe2lmKGNvbXBvbmVudFBhdGgubGVuZ3RoPjApe3Rocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBwcm9jZXNzIGNvdW50IG5vbi1lbXB0eSBjb21wb25lbnQgcGF0aDogJysKLWNvbXBvbmVudFBhdGguam9pbignOicpKTt9Ci1yZXR1cm4ndG90YWwgbnVtYmVyIG9mICcrY29udmVydFByb2Nlc3NOYW1lVG9Vc2VyRnJpZW5kbHlOYW1lKHByb2Nlc3NOYW1lLHRydWUpO319O2NvbnN0IEVGRkVDVElWRV9TSVpFPXtuYW1lOidlZmZlY3RpdmVfc2l6ZScsdW5pdDpzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtyZXR1cm4gYnVpbGRDaHJvbWVWYWx1ZURlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUse3VzZXJGcmllbmRseVByb3BlcnR5TmFtZTonZWZmZWN0aXZlIHNpemUnLGNvbXBvbmVudFByZXBvc2l0aW9uOidvZid9KTt9fTtjb25zdCBBTExPQ0FURURfT0JKRUNUU19TSVpFPXtuYW1lOidhbGxvY2F0ZWRfb2JqZWN0c19zaXplJyx1bml0OnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixidWlsZERlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUpe3JldHVybiBidWlsZENocm9tZVZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSx7dXNlckZyaWVuZGx5UHJvcGVydHlOYW1lOidzaXplIG9mIGFsbCBvYmplY3RzIGFsbG9jYXRlZCcsdG90YWxVc2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWU6J3NpemUgb2YgYWxsIGFsbG9jYXRlZCBvYmplY3RzJyxjb21wb25lbnRQcmVwb3NpdGlvbjonYnknfSk7fX07Y29uc3QgU0hJTV9BTExPQ0FURURfT0JKRUNUU19TSVpFPXtuYW1lOidzaGltX2FsbG9jYXRlZF9vYmplY3RzX3NpemUnLHVuaXQ6c2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLGJ1aWxkRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSl7cmV0dXJuIGJ1aWxkQ2hyb21lVmFsdWVEZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lLHt1c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWU6J3NpemUgb2YgYWxsIG9iamVjdHMgYWxsb2NhdGVkIHRocm91Z2ggc2hpbScsdG90YWxVc2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWU6J3NpemUgb2YgYWxsIGFsbG9jYXRlZCBvYmplY3RzIHRocm91Z2ggc2hpbScsY29tcG9uZW50UHJlcG9zaXRpb246J2J5J30pO319O2NvbnN0IExPQ0tFRF9TSVpFPXtuYW1lOidsb2NrZWRfc2l6ZScsdW5pdDpzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtyZXR1cm4gYnVpbGRDaHJvbWVWYWx1ZURlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUse3VzZXJGcmllbmRseVByb3BlcnR5TmFtZTonbG9ja2VkIChwaW5uZWQpIHNpemUnLGNvbXBvbmVudFByZXBvc2l0aW9uOidvZid9KTt9fTtjb25zdCBQRUFLX1NJWkU9e25hbWU6J3BlYWtfc2l6ZScsdW5pdDpzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtyZXR1cm4gYnVpbGRDaHJvbWVWYWx1ZURlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUse3VzZXJGcmllbmRseVByb3BlcnR5TmFtZToncGVhayBzaXplJyxjb21wb25lbnRQcmVwb3NpdGlvbjonb2YnfSk7fX07Y29uc3QgSEVBUF9DQVRFR09SWV9TSVpFPXtuYW1lOidoZWFwX2NhdGVnb3J5X3NpemUnLHVuaXQ6c2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLGJ1aWxkRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSl7cmV0dXJuIGJ1aWxkQ2hyb21lVmFsdWVEZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lLHt1c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWU6J2hlYXAgcHJvZmlsZXIgY2F0ZWdvcnkgc2l6ZScsY29tcG9uZW50UHJlcG9zaXRpb246J2Zvcid9KTt9fTtjb25zdCBDT0RFX0FORF9NRVRBREFUQV9TSVpFPXtuYW1lOidjb2RlX2FuZF9tZXRhZGF0YV9zaXplJyx1bml0OnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixidWlsZERlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUpe3JldHVybiBidWlsZENocm9tZVZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSx7dXNlckZyaWVuZGx5UHJvcGVydHlOYW1lUHJlZml4OidzaXplIG9mJyx1c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWU6J2NvZGUgYW5kIG1ldGFkYXRhJ30pO319O2NvbnN0IENIUk9NRV9WQUxVRV9QUk9QRVJUSUVTPVtFRkZFQ1RJVkVfU0laRSxBTExPQ0FURURfT0JKRUNUU19TSVpFLFNISU1fQUxMT0NBVEVEX09CSkVDVFNfU0laRSxMT0NLRURfU0laRSxQRUFLX1NJWkVdO2Z1bmN0aW9uIGJ1aWxkQ2hyb21lVmFsdWVEZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lLGZvcm1hdFNwZWMpe2NvbnN0IG5hbWVQYXJ0cz1bXTtpZihjb21wb25lbnRQYXRoLmxlbmd0aD09PTApe25hbWVQYXJ0cy5wdXNoKCd0b3RhbCcpO2lmKGZvcm1hdFNwZWMudG90YWxVc2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWUpe25hbWVQYXJ0cy5wdXNoKGZvcm1hdFNwZWMudG90YWxVc2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWUpO31lbHNle2lmKGZvcm1hdFNwZWMudXNlckZyaWVuZGx5UHJvcGVydHlOYW1lUHJlZml4KXtuYW1lUGFydHMucHVzaChmb3JtYXRTcGVjLnVzZXJGcmllbmRseVByb3BlcnR5TmFtZVByZWZpeCk7fQotbmFtZVBhcnRzLnB1c2goZm9ybWF0U3BlYy51c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWUpO30KLW5hbWVQYXJ0cy5wdXNoKCdyZXBvcnRlZCBieSBDaHJvbWUgZm9yJyk7fWVsc2V7aWYoZm9ybWF0U3BlYy5jb21wb25lbnRQcmVwb3NpdGlvbj09PXVuZGVmaW5lZCl7aWYoZm9ybWF0U3BlYy51c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWVQcmVmaXgpe25hbWVQYXJ0cy5wdXNoKGZvcm1hdFNwZWMudXNlckZyaWVuZGx5UHJvcGVydHlOYW1lUHJlZml4KTt9Ci1uYW1lUGFydHMucHVzaChjb21wb25lbnRQYXRoLmpvaW4oJzonKSk7bmFtZVBhcnRzLnB1c2goZm9ybWF0U3BlYy51c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWUpO31lbHNle2lmKGZvcm1hdFNwZWMudXNlckZyaWVuZGx5UHJvcGVydHlOYW1lUHJlZml4KXtuYW1lUGFydHMucHVzaChmb3JtYXRTcGVjLnVzZXJGcmllbmRseVByb3BlcnR5TmFtZVByZWZpeCk7fQotbmFtZVBhcnRzLnB1c2goZm9ybWF0U3BlYy51c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWUpO25hbWVQYXJ0cy5wdXNoKGZvcm1hdFNwZWMuY29tcG9uZW50UHJlcG9zaXRpb24pO2lmKGNvbXBvbmVudFBhdGhbY29tcG9uZW50UGF0aC5sZW5ndGgtMV09PT0nYWxsb2NhdGVkX2J5X21hbGxvYycpe25hbWVQYXJ0cy5wdXNoKCdvYmplY3RzIGFsbG9jYXRlZCBieSBtYWxsb2MgZm9yJyk7bmFtZVBhcnRzLnB1c2goY29tcG9uZW50UGF0aC5zbGljZSgwLGNvbXBvbmVudFBhdGgubGVuZ3RoLTEpLmpvaW4oJzonKSk7fWVsc2V7bmFtZVBhcnRzLnB1c2goY29tcG9uZW50UGF0aC5qb2luKCc6JykpO319Ci1uYW1lUGFydHMucHVzaCgnaW4nKTt9Ci1uYW1lUGFydHMucHVzaChjb252ZXJ0UHJvY2Vzc05hbWVUb1VzZXJGcmllbmRseU5hbWUocHJvY2Vzc05hbWUpKTtyZXR1cm4gbmFtZVBhcnRzLmpvaW4oJyAnKTt9Ci1jb25zdCBSRVNJREVOVF9TSVpFPXtuYW1lOidyZXNpZGVudF9zaXplJyx1bml0OnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixidWlsZERlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUpe3JldHVybiBidWlsZE9zVmFsdWVEZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lLCdyZXNpZGVudCBzZXQgc2l6ZSAoUlNTKScpO319O2NvbnN0IFBFQUtfUkVTSURFTlRfU0laRT17bmFtZToncGVha19yZXNpZGVudF9zaXplJyx1bml0OnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixidWlsZERlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUpe3JldHVybiBidWlsZE9zVmFsdWVEZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lLCdwZWFrIHJlc2lkZW50IHNldCBzaXplJyk7fX07Y29uc3QgUFJPUE9SVElPTkFMX1JFU0lERU5UX1NJWkU9e25hbWU6J3Byb3BvcnRpb25hbF9yZXNpZGVudF9zaXplJyx1bml0OnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixidWlsZERlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUpe3JldHVybiBidWlsZE9zVmFsdWVEZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lLCdwcm9wb3J0aW9uYWwgcmVzaWRlbnQgc2l6ZSAoUFNTKScpO319O2NvbnN0IFBSSVZBVEVfRElSVFlfU0laRT17bmFtZToncHJpdmF0ZV9kaXJ0eV9zaXplJyx1bml0OnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixidWlsZERlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUpe3JldHVybiBidWlsZE9zVmFsdWVEZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lLCdwcml2YXRlIGRpcnR5IHNpemUnKTt9fTtjb25zdCBQUklWQVRFX0ZPT1RQUklOVF9TSVpFPXtuYW1lOidwcml2YXRlX2Zvb3RwcmludF9zaXplJyx1bml0OnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixidWlsZERlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUpe3JldHVybiBidWlsZE9zVmFsdWVEZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lLCdwcml2YXRlIGZvb3RwcmludCBzaXplJyk7fX07ZnVuY3Rpb24gYnVpbGRPc1ZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSx1c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWUpe2lmKGNvbXBvbmVudFBhdGgubGVuZ3RoPjIpe3Rocm93IG5ldyBFcnJvcignT1MgdmFsdWUgY29tcG9uZW50IHBhdGggZm9yIFwnJysKLXVzZXJGcmllbmRseVByb3BlcnR5TmFtZSsnXCcgdG9vIGxvbmc6ICcrY29tcG9uZW50UGF0aC5qb2luKCc6JykpO30KLWNvbnN0IG5hbWVQYXJ0cz1bXTtpZihjb21wb25lbnRQYXRoLmxlbmd0aDwyKXtuYW1lUGFydHMucHVzaCgndG90YWwnKTt9Ci1uYW1lUGFydHMucHVzaCh1c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWUpO2lmKGNvbXBvbmVudFBhdGgubGVuZ3RoPjApe3N3aXRjaChjb21wb25lbnRQYXRoWzBdKXtjYXNlJ3N5c3RlbV9tZW1vcnknOmlmKGNvbXBvbmVudFBhdGgubGVuZ3RoPjEpe2NvbnN0IHVzZXJGcmllbmRseUNvbXBvbmVudE5hbWU9U1lTVEVNX1ZBTFVFX0NPTVBPTkVOVFNbY29tcG9uZW50UGF0aFsxXV0udXNlckZyaWVuZGx5TmFtZTtpZih1c2VyRnJpZW5kbHlDb21wb25lbnROYW1lPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbSB2YWx1ZSBzdWItY29tcG9uZW50IGZvciBcJycrCi11c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWUrJ1wnIHVua25vd246ICcrCi1jb21wb25lbnRQYXRoLmpvaW4oJzonKSk7fQotbmFtZVBhcnRzLnB1c2goJ29mJyx1c2VyRnJpZW5kbHlDb21wb25lbnROYW1lLCdpbicpO31lbHNle25hbWVQYXJ0cy5wdXNoKCdvZiBzeXN0ZW0gbWVtb3J5IChSQU0pIHVzZWQgYnknKTt9Ci1icmVhaztjYXNlJ2dwdV9tZW1vcnknOmlmKGNvbXBvbmVudFBhdGgubGVuZ3RoPjEpe25hbWVQYXJ0cy5wdXNoKCdvZiB0aGUnLGNvbXBvbmVudFBhdGhbMV0pO25hbWVQYXJ0cy5wdXNoKCdBbmRyb2lkIG1lbXRyYWNrIGNvbXBvbmVudCBpbicpO31lbHNle25hbWVQYXJ0cy5wdXNoKCdvZiBHUFUgbWVtb3J5IChBbmRyb2lkIG1lbXRyYWNrKSB1c2VkIGJ5Jyk7fQotYnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ09TIHZhbHVlIGNvbXBvbmVudCBmb3IgXCcnKwotdXNlckZyaWVuZGx5UHJvcGVydHlOYW1lKydcJyB1bmtub3duOiAnKwotY29tcG9uZW50UGF0aC5qb2luKCc6JykpO319ZWxzZXtuYW1lUGFydHMucHVzaCgncmVwb3J0ZWQgYnkgdGhlIE9TIGZvcicpO30KLW5hbWVQYXJ0cy5wdXNoKGNvbnZlcnRQcm9jZXNzTmFtZVRvVXNlckZyaWVuZGx5TmFtZShwcm9jZXNzTmFtZSkpO3JldHVybiBuYW1lUGFydHMuam9pbignICcpO30KLWZ1bmN0aW9uIGFkZERldGFpbGVkTWVtb3J5RHVtcFZhbHVlcyhicm93c2VyTmFtZVRvR2xvYmFsRHVtcHMsdmFsdWVzKXthZGRNZW1vcnlEdW1wVmFsdWVzKGJyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcyxnPT5nLmxldmVsT2ZEZXRhaWw9PT1ERVRBSUxFRCxmdW5jdGlvbihwcm9jZXNzRHVtcCxhZGRQcm9jZXNzU2NhbGFyKXtmb3IoY29uc3RbY29tcG9uZW50TmFtZSxjb21wb25lbnRTcGVjXW9mCi1PYmplY3QuZW50cmllcyhTWVNURU1fVkFMVUVfQ09NUE9ORU5UUykpe2NvbnN0IG5vZGU9Z2V0RGVzY2VuZGFudFZtUmVnaW9uQ2xhc3NpZmljYXRpb25Ob2RlKHByb2Nlc3NEdW1wLnZtUmVnaW9ucyxjb21wb25lbnRTcGVjLmNsYXNzaWZpY2F0aW9uUGF0aCk7Y29uc3QgY29tcG9uZW50UGF0aD1bJ3N5c3RlbV9tZW1vcnknXTtpZihjb21wb25lbnROYW1lKWNvbXBvbmVudFBhdGgucHVzaChjb21wb25lbnROYW1lKTthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X29zJyxjb21wb25lbnQ6Y29tcG9uZW50UGF0aCxwcm9wZXJ0eTpQUk9QT1JUSU9OQUxfUkVTSURFTlRfU0laRSx2YWx1ZTpub2RlPT09dW5kZWZpbmVkPzA6KG5vZGUuYnl0ZVN0YXRzLnByb3BvcnRpb25hbFJlc2lkZW50fHwwKX0pO2FkZFByb2Nlc3NTY2FsYXIoe3NvdXJjZToncmVwb3J0ZWRfYnlfb3MnLGNvbXBvbmVudDpjb21wb25lbnRQYXRoLHByb3BlcnR5OlBSSVZBVEVfRElSVFlfU0laRSx2YWx1ZTpub2RlPT09dW5kZWZpbmVkPzA6KG5vZGUuYnl0ZVN0YXRzLnByaXZhdGVEaXJ0eVJlc2lkZW50fHwwKX0pO30KLWNvbnN0IG1lbXRyYWNrRHVtcD1wcm9jZXNzRHVtcC5nZXRNZW1vcnlBbGxvY2F0b3JEdW1wQnlGdWxsTmFtZSgnZ3B1L2FuZHJvaWRfbWVtdHJhY2snKTtpZihtZW10cmFja0R1bXAhPT11bmRlZmluZWQpe21lbXRyYWNrRHVtcC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKG1lbXRyYWNrQ2hpbGREdW1wKXthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X29zJyxjb21wb25lbnQ6WydncHVfbWVtb3J5JyxtZW10cmFja0NoaWxkRHVtcC5uYW1lXSxwcm9wZXJ0eTpQUk9QT1JUSU9OQUxfUkVTSURFTlRfU0laRSx2YWx1ZTptZW10cmFja0NoaWxkRHVtcC5udW1lcmljcy5tZW10cmFja19wc3N9KTt9KTt9fSxmdW5jdGlvbihjb21wb25lbnRUcmVlKXt9LHZhbHVlcyk7fQotY29uc3QgU1lTVEVNX1ZBTFVFX0NPTVBPTkVOVFM9eycnOntjbGFzc2lmaWNhdGlvblBhdGg6W10sfSwnamF2YV9oZWFwJzp7Y2xhc3NpZmljYXRpb25QYXRoOlsnQW5kcm9pZCcsJ0phdmEgcnVudGltZScsJ1NwYWNlcyddLHVzZXJGcmllbmRseU5hbWU6J3RoZSBKYXZhIGhlYXAnfSwnYXNobWVtJzp7Y2xhc3NpZmljYXRpb25QYXRoOlsnQW5kcm9pZCcsJ0FzaG1lbSddLHVzZXJGcmllbmRseU5hbWU6J2FzaG1lbSd9LCduYXRpdmVfaGVhcCc6e2NsYXNzaWZpY2F0aW9uUGF0aDpbJ05hdGl2ZSBoZWFwJ10sdXNlckZyaWVuZGx5TmFtZTondGhlIG5hdGl2ZSBoZWFwJ30sJ3N0YWNrJzp7Y2xhc3NpZmljYXRpb25QYXRoOlsnU3RhY2snXSx1c2VyRnJpZW5kbHlOYW1lOid0aGUgdGhyZWFkIHN0YWNrcyd9fTtmdW5jdGlvbiBnZXREZXNjZW5kYW50Vm1SZWdpb25DbGFzc2lmaWNhdGlvbk5vZGUobm9kZSxwYXRoKXtmb3IobGV0IGk9MDtpPHBhdGgubGVuZ3RoO2krKyl7aWYobm9kZT09PXVuZGVmaW5lZClicmVhaztub2RlPW5vZGUuY2hpbGRyZW4uZmluZChjPT5jLnRpdGxlPT09cGF0aFtpXSk7fQotcmV0dXJuIG5vZGU7fQotZnVuY3Rpb24gYWRkTWVtb3J5RHVtcENvdW50VmFsdWVzKGJyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcyx2YWx1ZXMpe2Jyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcy5mb3JFYWNoKGZ1bmN0aW9uKGdsb2JhbER1bXBzLGJyb3dzZXJOYW1lKXtsZXQgdG90YWxEdW1wQ291bnQ9MDtjb25zdCBsZXZlbE9mRGV0YWlsTmFtZVRvRHVtcENvdW50PXt9O0xFVkVMX09GX0RFVEFJTF9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uKGxldmVsT2ZEZXRhaWxOYW1lKXtsZXZlbE9mRGV0YWlsTmFtZVRvRHVtcENvdW50W2xldmVsT2ZEZXRhaWxOYW1lXT0wO30pO2xldmVsT2ZEZXRhaWxOYW1lVG9EdW1wQ291bnRbSEVBUF9QUk9GSUxFUl9ERVRBSUxfTkFNRV09MDtnbG9iYWxEdW1wcy5mb3JFYWNoKGZ1bmN0aW9uKGdsb2JhbER1bXApe3RvdGFsRHVtcENvdW50Kys7Y29uc3QgbGV2ZWxPZkRldGFpbE5hbWU9TEVWRUxfT0ZfREVUQUlMX05BTUVTLmdldChnbG9iYWxEdW1wLmxldmVsT2ZEZXRhaWwpO2lmKGxldmVsT2ZEZXRhaWxOYW1lPT09dW5kZWZpbmVkKXtyZXR1cm47fQotbGV2ZWxPZkRldGFpbE5hbWVUb0R1bXBDb3VudFtsZXZlbE9mRGV0YWlsTmFtZV0rKztpZihnbG9iYWxEdW1wLmxldmVsT2ZEZXRhaWw9PT1ERVRBSUxFRCl7aWYoZGV0ZWN0SGVhcFByb2ZpbGVySW5NZW1vcnlEdW1wKGdsb2JhbER1bXApKXtsZXZlbE9mRGV0YWlsTmFtZVRvRHVtcENvdW50W0hFQVBfUFJPRklMRVJfREVUQUlMX05BTUVdKys7fX19KTtyZXBvcnRNZW1vcnlEdW1wQ291bnRBc1ZhbHVlKGJyb3dzZXJOYW1lLHVuZGVmaW5lZCx0b3RhbER1bXBDb3VudCx2YWx1ZXMpO2Zvcihjb25zdFtsZXZlbE9mRGV0YWlsTmFtZSxsZXZlbE9mRGV0YWlsRHVtcENvdW50XW9mCi1PYmplY3QuZW50cmllcyhsZXZlbE9mRGV0YWlsTmFtZVRvRHVtcENvdW50KSl7cmVwb3J0TWVtb3J5RHVtcENvdW50QXNWYWx1ZShicm93c2VyTmFtZSxsZXZlbE9mRGV0YWlsTmFtZSxsZXZlbE9mRGV0YWlsRHVtcENvdW50LHZhbHVlcyk7fX0pO30KLWZ1bmN0aW9uIGRldGVjdEhlYXBQcm9maWxlckluTWVtb3J5RHVtcChnbG9iYWxEdW1wKXtmb3IoY29uc3QgcHJvY2Vzc0R1bXAgb2YgT2JqZWN0LnZhbHVlcyhnbG9iYWxEdW1wLnByb2Nlc3NNZW1vcnlEdW1wcykpe2lmKHByb2Nlc3NEdW1wLmhlYXBEdW1wcyYmcHJvY2Vzc0R1bXAuaGVhcER1bXBzLm1hbGxvYyl7Y29uc3QgbWFsbG9jRHVtcD1wcm9jZXNzRHVtcC5oZWFwRHVtcHMubWFsbG9jO2lmKG1hbGxvY0R1bXAuZW50cmllcyYmbWFsbG9jRHVtcC5lbnRyaWVzLmxlbmd0aD4wKXtyZXR1cm4gdHJ1ZTt9fX0KLXJldHVybiBmYWxzZTt9Ci1mdW5jdGlvbiByZXBvcnRNZW1vcnlEdW1wQ291bnRBc1ZhbHVlKGJyb3dzZXJOYW1lLGxldmVsT2ZEZXRhaWxOYW1lLGxldmVsT2ZEZXRhaWxEdW1wQ291bnQsdmFsdWVzKXtjb25zdCBuYW1lUGFydHM9WydtZW1vcnknLGJyb3dzZXJOYW1lLCdhbGxfcHJvY2Vzc2VzJywnZHVtcF9jb3VudCddO2lmKGxldmVsT2ZEZXRhaWxOYW1lIT09dW5kZWZpbmVkKXtuYW1lUGFydHMucHVzaChsZXZlbE9mRGV0YWlsTmFtZSk7fQotY29uc3QgbmFtZT1uYW1lUGFydHMuam9pbignOicpO2NvbnN0IGhpc3RvZ3JhbT1uZXcgdHIudi5IaXN0b2dyYW0obmFtZSxjb3VudF9zbWFsbGVySXNCZXR0ZXIsQk9VTkRBUklFU19GT1JfVU5JVF9NQVAuZ2V0KGNvdW50X3NtYWxsZXJJc0JldHRlcikpO2hpc3RvZ3JhbS5hZGRTYW1wbGUobGV2ZWxPZkRldGFpbER1bXBDb3VudCk7Y29uc3QgdXNlckZyaWVuZGx5TGV2ZWxPZkRldGFpbD0obGV2ZWxPZkRldGFpbE5hbWV8fCdhbGwnKS5yZXBsYWNlKCdfJywnICcpO2hpc3RvZ3JhbS5kZXNjcmlwdGlvbj1bJ3RvdGFsIG51bWJlciBvZicsdXNlckZyaWVuZGx5TGV2ZWxPZkRldGFpbCwnbWVtb3J5IGR1bXBzIGFkZGVkIGJ5Jyxjb252ZXJ0QnJvd3Nlck5hbWVUb1VzZXJGcmllbmRseU5hbWUoYnJvd3Nlck5hbWUpLCd0byB0aGUgdHJhY2UnXS5qb2luKCcgJyk7dmFsdWVzLmFkZEhpc3RvZ3JhbShoaXN0b2dyYW0pO30KLWZ1bmN0aW9uIGFkZE1lbW9yeUR1bXBWYWx1ZXMoYnJvd3Nlck5hbWVUb0dsb2JhbER1bXBzLGN1c3RvbUdsb2JhbER1bXBGaWx0ZXIsY3VzdG9tUHJvY2Vzc0R1bXBWYWx1ZUV4dHJhY3RvcixjdXN0b21Db21wb25lbnRUcmVlTW9kaWZpZXIsdmFsdWVzKXticm93c2VyTmFtZVRvR2xvYmFsRHVtcHMuZm9yRWFjaChmdW5jdGlvbihnbG9iYWxEdW1wcyxicm93c2VyTmFtZSl7Y29uc3QgZmlsdGVyZWRHbG9iYWxEdW1wcz1nbG9iYWxEdW1wcy5maWx0ZXIoY3VzdG9tR2xvYmFsRHVtcEZpbHRlcik7Y29uc3Qgc291cmNlVG9Qcm9wZXJ0eVRvQnVpbGRlcj1leHRyYWN0RGF0YUZyb21HbG9iYWxEdW1wcyhmaWx0ZXJlZEdsb2JhbER1bXBzLGN1c3RvbVByb2Nlc3NEdW1wVmFsdWVFeHRyYWN0b3IpO3JlcG9ydERhdGFBc1ZhbHVlcyhzb3VyY2VUb1Byb3BlcnR5VG9CdWlsZGVyLGJyb3dzZXJOYW1lLGN1c3RvbUNvbXBvbmVudFRyZWVNb2RpZmllcix2YWx1ZXMpO30pO30KLWZ1bmN0aW9uIGV4dHJhY3REYXRhRnJvbUdsb2JhbER1bXBzKGdsb2JhbER1bXBzLGN1c3RvbVByb2Nlc3NEdW1wVmFsdWVFeHRyYWN0b3Ipe2NvbnN0IHNvdXJjZVRvUHJvcGVydHlUb0J1aWxkZXI9bmV3IE1hcCgpO2NvbnN0IGR1bXBDb3VudD1nbG9iYWxEdW1wcy5sZW5ndGg7Z2xvYmFsRHVtcHMuZm9yRWFjaChmdW5jdGlvbihnbG9iYWxEdW1wLGR1bXBJbmRleCl7Zm9yKGNvbnN0IHByb2Nlc3NEdW1wIG9mIE9iamVjdC52YWx1ZXMoZ2xvYmFsRHVtcC5wcm9jZXNzTWVtb3J5RHVtcHMpKXtleHRyYWN0RGF0YUZyb21Qcm9jZXNzRHVtcChwcm9jZXNzRHVtcCxzb3VyY2VUb1Byb3BlcnR5VG9CdWlsZGVyLGR1bXBJbmRleCxkdW1wQ291bnQsY3VzdG9tUHJvY2Vzc0R1bXBWYWx1ZUV4dHJhY3Rvcik7fX0pO3JldHVybiBzb3VyY2VUb1Byb3BlcnR5VG9CdWlsZGVyO30KLWZ1bmN0aW9uIGV4dHJhY3REYXRhRnJvbVByb2Nlc3NEdW1wKHByb2Nlc3NEdW1wLHNvdXJjZVRvUHJvcGVydHlUb0J1aWxkZXIsZHVtcEluZGV4LGR1bXBDb3VudCxjdXN0b21Qcm9jZXNzRHVtcFZhbHVlRXh0cmFjdG9yKXtjb25zdCByYXdQcm9jZXNzTmFtZT1wcm9jZXNzRHVtcC5wcm9jZXNzLm5hbWU7Y29uc3QgcHJvY2Vzc05hbWVQYXRoPVt0ci5lLmNocm9tZS5jaHJvbWVfcHJvY2Vzc2VzLmNhbm9uaWNhbGl6ZVByb2Nlc3NOYW1lKHJhd1Byb2Nlc3NOYW1lKV07Y3VzdG9tUHJvY2Vzc0R1bXBWYWx1ZUV4dHJhY3Rvcihwcm9jZXNzRHVtcCxmdW5jdGlvbiBhZGRQcm9jZXNzU2NhbGFyKHNwZWMpe2lmKHNwZWMudmFsdWU9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IGNvbXBvbmVudD1zcGVjLmNvbXBvbmVudHx8W107ZnVuY3Rpb24gY3JlYXRlRGV0YWlsc0ZvckVycm9yTWVzc2FnZSgpe3JldHVyblsnc291cmNlPScsc3BlYy5zb3VyY2UsJywgcHJvcGVydHk9JyxzcGVjLnByb3BlcnR5Lm5hbWV8fCcodW5kZWZpbmVkKScsJywgY29tcG9uZW50PScsY29tcG9uZW50Lmxlbmd0aD09PTA/JyhlbXB0eSknOmNvbXBvbmVudC5qb2luKCc6JyksJyBpbiAnLHByb2Nlc3NEdW1wLnByb2Nlc3MudXNlckZyaWVuZGx5TmFtZV0uam9pbignJyk7fQotbGV0IHZhbHVlO2lmKHNwZWMudmFsdWUgaW5zdGFuY2VvZiB0ci5iLlNjYWxhcil7dmFsdWU9c3BlYy52YWx1ZS52YWx1ZTtpZihzcGVjLnZhbHVlLnVuaXQhPT1zcGVjLnByb3BlcnR5LnVuaXQpe3Rocm93IG5ldyBFcnJvcignU2NhbGFyIHVuaXQgZm9yICcrCi1jcmVhdGVEZXRhaWxzRm9yRXJyb3JNZXNzYWdlKCkrJyAoJysKLXNwZWMudmFsdWUudW5pdC51bml0TmFtZSsnKSBkb2VzblwndCBtYXRjaCB0aGUgdW5pdCBvZiB0aGUgcHJvcGVydHkgKCcrCi1zcGVjLnByb3BlcnR5LnVuaXQudW5pdE5hbWUrJyknKTt9fWVsc2V7dmFsdWU9c3BlYy52YWx1ZTt9Ci1sZXQgcHJvcGVydHlUb0J1aWxkZXI9c291cmNlVG9Qcm9wZXJ0eVRvQnVpbGRlci5nZXQoc3BlYy5zb3VyY2UpO2lmKHByb3BlcnR5VG9CdWlsZGVyPT09dW5kZWZpbmVkKXtwcm9wZXJ0eVRvQnVpbGRlcj1uZXcgTWFwKCk7c291cmNlVG9Qcm9wZXJ0eVRvQnVpbGRlci5zZXQoc3BlYy5zb3VyY2UscHJvcGVydHlUb0J1aWxkZXIpO30KLWxldCBidWlsZGVyPXByb3BlcnR5VG9CdWlsZGVyLmdldChzcGVjLnByb3BlcnR5KTtpZihidWlsZGVyPT09dW5kZWZpbmVkKXtidWlsZGVyPW5ldyB0ci5iLk11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlcigyLGR1bXBDb3VudCkscHJvcGVydHlUb0J1aWxkZXIuc2V0KHNwZWMucHJvcGVydHksYnVpbGRlcik7fQotY29uc3QgdmFsdWVzPW5ldyBBcnJheShkdW1wQ291bnQpO3ZhbHVlc1tkdW1wSW5kZXhdPXZhbHVlO2J1aWxkZXIuYWRkUGF0aChbcHJvY2Vzc05hbWVQYXRoLGNvbXBvbmVudF0sdmFsdWVzLHRyLmIuTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZhbHVlS2luZC5UT1RBTCk7fSk7fQotZnVuY3Rpb24gcmVwb3J0RGF0YUFzVmFsdWVzKHNvdXJjZVRvUHJvcGVydHlUb0J1aWxkZXIsYnJvd3Nlck5hbWUsY3VzdG9tQ29tcG9uZW50VHJlZU1vZGlmaWVyLHZhbHVlcyl7c291cmNlVG9Qcm9wZXJ0eVRvQnVpbGRlci5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5VG9CdWlsZGVyLHNvdXJjZU5hbWUpe3Byb3BlcnR5VG9CdWlsZGVyLmZvckVhY2goZnVuY3Rpb24oYnVpbGRlcnMscHJvcGVydHkpe2NvbnN0IHRyZWU9YnVpbGRlcnMuYnVpbGRUb3BEb3duVHJlZVZpZXcoKTtyZXBvcnRDb21wb25lbnREYXRhQXNWYWx1ZXMoYnJvd3Nlck5hbWUsc291cmNlTmFtZSxwcm9wZXJ0eSxbXSxbXSx0cmVlLHZhbHVlcyxjdXN0b21Db21wb25lbnRUcmVlTW9kaWZpZXIpO30pO30pO30KLWZ1bmN0aW9uIHJlcG9ydENvbXBvbmVudERhdGFBc1ZhbHVlcyhicm93c2VyTmFtZSxzb3VyY2VOYW1lLHByb3BlcnR5LHByb2Nlc3NQYXRoLGNvbXBvbmVudFBhdGgsdHJlZSx2YWx1ZXMsY3VzdG9tQ29tcG9uZW50VHJlZU1vZGlmaWVyLG9wdF9jYWNoZWRIaXN0b2dyYW1zKXtjb25zdCBjYWNoZWRIaXN0b2dyYW1zPW9wdF9jYWNoZWRIaXN0b2dyYW1zfHxuZXcgTWFwKCk7ZnVuY3Rpb24gcmVjdXJzZShwcm9jZXNzUGF0aCxjb21wb25lbnRQYXRoLG5vZGUpe3JldHVybiByZXBvcnRDb21wb25lbnREYXRhQXNWYWx1ZXMoYnJvd3Nlck5hbWUsc291cmNlTmFtZSxwcm9wZXJ0eSxwcm9jZXNzUGF0aCxjb21wb25lbnRQYXRoLG5vZGUsdmFsdWVzLGN1c3RvbUNvbXBvbmVudFRyZWVNb2RpZmllcixjYWNoZWRIaXN0b2dyYW1zKTt9Ci1mdW5jdGlvbiBidWlsZEhpc3RvZ3JhbShwcm9jZXNzUGF0aCxjb21wb25lbnRQYXRoLG5vZGUpe3JldHVybiBidWlsZE5hbWVkTWVtb3J5TnVtZXJpY0Zyb21Ob2RlKGJyb3dzZXJOYW1lLHNvdXJjZU5hbWUscHJvcGVydHkscHJvY2Vzc1BhdGgubGVuZ3RoPT09MD8nYWxsX3Byb2Nlc3Nlcyc6cHJvY2Vzc1BhdGhbMF0sY29tcG9uZW50UGF0aCxub2RlKTt9Ci1jdXN0b21Db21wb25lbnRUcmVlTW9kaWZpZXIodHJlZSk7Y29uc3QgaGlzdG9ncmFtPWJ1aWxkSGlzdG9ncmFtKHByb2Nlc3NQYXRoLGNvbXBvbmVudFBhdGgsdHJlZSk7aWYoY2FjaGVkSGlzdG9ncmFtcy5oYXMoaGlzdG9ncmFtLm5hbWUpKXtyZXR1cm4gY2FjaGVkSGlzdG9ncmFtcy5nZXQoaGlzdG9ncmFtLm5hbWUpO30KLWNhY2hlZEhpc3RvZ3JhbXMuc2V0KGhpc3RvZ3JhbS5uYW1lLGhpc3RvZ3JhbSk7Y29uc3QgcHJvY2Vzc05hbWVzPW5ldyB0ci52LmQuUmVsYXRlZE5hbWVNYXAoKTtmb3IoY29uc3RbY2hpbGRQcm9jZXNzTmFtZSxjaGlsZFByb2Nlc3NOb2RlXW9mIHRyZWUuY2hpbGRyZW5bMF0pe3Byb2Nlc3NQYXRoLnB1c2goY2hpbGRQcm9jZXNzTmFtZSk7Y29uc3QgY2hpbGRQcm9jZXNzSGlzdG9ncmFtPXJlY3Vyc2UocHJvY2Vzc1BhdGgsY29tcG9uZW50UGF0aCxjaGlsZFByb2Nlc3NOb2RlKTtwcm9jZXNzTmFtZXMuc2V0KGNoaWxkUHJvY2Vzc05hbWUsY2hpbGRQcm9jZXNzSGlzdG9ncmFtLm5hbWUpO3Byb2Nlc3NQYXRoLnBvcCgpO30KLWNvbnN0IGNvbXBvbmVudE5hbWVzPW5ldyB0ci52LmQuUmVsYXRlZE5hbWVNYXAoKTtmb3IoY29uc3RbY2hpbGRDb21wb25lbnROYW1lLGNoaWxkQ29tcG9uZW50Tm9kZV1vZiB0cmVlLmNoaWxkcmVuWzFdKXtjb21wb25lbnRQYXRoLnB1c2goY2hpbGRDb21wb25lbnROYW1lKTtjb25zdCBjaGlsZENvbXBvbmVudEhpc3RvZ3JhbT1yZWN1cnNlKHByb2Nlc3NQYXRoLGNvbXBvbmVudFBhdGgsY2hpbGRDb21wb25lbnROb2RlKTtjb21wb25lbnROYW1lcy5zZXQoY2hpbGRDb21wb25lbnROYW1lLGNoaWxkQ29tcG9uZW50SGlzdG9ncmFtLm5hbWUpO2NvbXBvbmVudFBhdGgucG9wKCk7fQotdmFsdWVzLmFkZEhpc3RvZ3JhbShoaXN0b2dyYW0pO2lmKHRyZWUuY2hpbGRyZW5bMF0uc2l6ZT4wKXtoaXN0b2dyYW0uZGlhZ25vc3RpY3Muc2V0KCdwcm9jZXNzZXMnLHByb2Nlc3NOYW1lcyk7fQotaWYodHJlZS5jaGlsZHJlblsxXS5zaXplPjApe2hpc3RvZ3JhbS5kaWFnbm9zdGljcy5zZXQoJ2NvbXBvbmVudHMnLGNvbXBvbmVudE5hbWVzKTt9Ci1yZXR1cm4gaGlzdG9ncmFtO30KLWZ1bmN0aW9uIGdldE51bWVyaWNOYW1lKGJyb3dzZXJOYW1lLHNvdXJjZU5hbWUscHJvcGVydHlOYW1lLHByb2Nlc3NOYW1lLGNvbXBvbmVudFBhdGgpe2NvbnN0IG5hbWVQYXJ0cz1bJ21lbW9yeScsYnJvd3Nlck5hbWUscHJvY2Vzc05hbWUsc291cmNlTmFtZV0uY29uY2F0KGNvbXBvbmVudFBhdGgpO2lmKHByb3BlcnR5TmFtZSE9PXVuZGVmaW5lZCluYW1lUGFydHMucHVzaChwcm9wZXJ0eU5hbWUpO3JldHVybiBuYW1lUGFydHMuam9pbignOicpO30KLWZ1bmN0aW9uIGdldE51bWVyaWNEZXNjcmlwdGlvbihwcm9wZXJ0eSxicm93c2VyTmFtZSxwcm9jZXNzTmFtZSxjb21wb25lbnRQYXRoKXtyZXR1cm5bcHJvcGVydHkuYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKSwnaW4nLGNvbnZlcnRCcm93c2VyTmFtZVRvVXNlckZyaWVuZGx5TmFtZShicm93c2VyTmFtZSldLmpvaW4oJyAnKTt9Ci1mdW5jdGlvbiBidWlsZE5hbWVkTWVtb3J5TnVtZXJpY0Zyb21Ob2RlKGJyb3dzZXJOYW1lLHNvdXJjZU5hbWUscHJvcGVydHkscHJvY2Vzc05hbWUsY29tcG9uZW50UGF0aCxub2RlKXtjb25zdCBuYW1lPWdldE51bWVyaWNOYW1lKGJyb3dzZXJOYW1lLHNvdXJjZU5hbWUscHJvcGVydHkubmFtZSxwcm9jZXNzTmFtZSxjb21wb25lbnRQYXRoKTtjb25zdCBkZXNjcmlwdGlvbj1nZXROdW1lcmljRGVzY3JpcHRpb24ocHJvcGVydHksYnJvd3Nlck5hbWUscHJvY2Vzc05hbWUsY29tcG9uZW50UGF0aCk7Y29uc3QgbnVtZXJpYz1idWlsZE1lbW9yeU51bWVyaWNGcm9tTm9kZShuYW1lLG5vZGUscHJvcGVydHkudW5pdCk7bnVtZXJpYy5kZXNjcmlwdGlvbj1kZXNjcmlwdGlvbjtyZXR1cm4gbnVtZXJpYzt9Ci1mdW5jdGlvbiBidWlsZFNhbXBsZURpYWdub3N0aWNzKHZhbHVlLG5vZGUpe2lmKG5vZGUuY2hpbGRyZW4ubGVuZ3RoPDIpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCBkaWFnbm9zdGljcz1uZXcgTWFwKCk7Y29uc3QgaT1ub2RlLnZhbHVlcy5pbmRleE9mKHZhbHVlKTtjb25zdCBwcm9jZXNzQnJlYWtkb3duPW5ldyB0ci52LmQuQnJlYWtkb3duKCk7cHJvY2Vzc0JyZWFrZG93bi5jb2xvclNjaGVtZT10ci5lLmNocm9tZS5jaHJvbWVfcHJvY2Vzc2VzLlBST0NFU1NfQ09MT1JfU0NIRU1FX05BTUU7Zm9yKGNvbnN0W25hbWUsc3ViTm9kZV1vZiBub2RlLmNoaWxkcmVuWzBdKXtwcm9jZXNzQnJlYWtkb3duLnNldChuYW1lLHN1Yk5vZGUudmFsdWVzW2ldLnRvdGFsKTt9Ci1pZihwcm9jZXNzQnJlYWtkb3duLnNpemU+MCl7ZGlhZ25vc3RpY3Muc2V0KCdwcm9jZXNzZXMnLHByb2Nlc3NCcmVha2Rvd24pO30KLWNvbnN0IGNvbXBvbmVudEJyZWFrZG93bj1uZXcgdHIudi5kLkJyZWFrZG93bigpO2Zvcihjb25zdFtuYW1lLHN1Yk5vZGVdb2Ygbm9kZS5jaGlsZHJlblsxXSl7Y29tcG9uZW50QnJlYWtkb3duLnNldChuYW1lLHN1Yk5vZGUudmFsdWVzW2ldLnRvdGFsKTt9Ci1pZihjb21wb25lbnRCcmVha2Rvd24uc2l6ZT4wKXtkaWFnbm9zdGljcy5zZXQoJ2NvbXBvbmVudHMnLGNvbXBvbmVudEJyZWFrZG93bik7fQotaWYoZGlhZ25vc3RpY3Muc2l6ZT09PTApcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gZGlhZ25vc3RpY3M7fQotZnVuY3Rpb24gYnVpbGRNZW1vcnlOdW1lcmljRnJvbU5vZGUobmFtZSxub2RlLHVuaXQpe2NvbnN0IGhpc3RvZ3JhbT1uZXcgdHIudi5IaXN0b2dyYW0obmFtZSx1bml0LEJPVU5EQVJJRVNfRk9SX1VOSVRfTUFQLmdldCh1bml0KSk7bm9kZS52YWx1ZXMuZm9yRWFjaCh2PT5oaXN0b2dyYW0uYWRkU2FtcGxlKHYudG90YWwsYnVpbGRTYW1wbGVEaWFnbm9zdGljcyh2LG5vZGUpKSk7cmV0dXJuIGhpc3RvZ3JhbTt9Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKG1lbW9yeU1ldHJpYyx7c3VwcG9ydHNSYW5nZU9mSW50ZXJlc3Q6dHJ1ZX0pO3JldHVybnttZW1vcnlNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3Muc2gnLGZ1bmN0aW9uKCl7Y29uc3QgQ0hST01FX1BPV0VSX0dSQUNFX1BFUklPRF9NUz0xO2Z1bmN0aW9uIGNyZWF0ZUVtcHR5SGlzdG9ncmFtXyhpbnRlcnZhbCxoaXN0b2dyYW1zKXtpZihpbnRlcnZhbC5wZXJTZWNvbmQpe3JldHVybntwZXJTZWNvbmQ6dHJ1ZSxlbmVyZ3k6aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oYCR7aW50ZXJ2YWwubmFtZX06cG93ZXJgLHRyLmIuVW5pdC5ieU5hbWUucG93ZXJJbldhdHRzX3NtYWxsZXJJc0JldHRlcixbXSx7ZGVzY3JpcHRpb246YEVuZXJneSBjb25zdW1wdGlvbiByYXRlIGZvciAke2ludGVydmFsLmRlc2NyaXB0aW9ufWAsc3VtbWFyeU9wdGlvbnM6e2F2Zzp0cnVlLGNvdW50OmZhbHNlLG1heDp0cnVlLG1pbjp0cnVlLHN0ZDpmYWxzZSxzdW06ZmFsc2UsfSx9KSx9O30KLXJldHVybntwZXJTZWNvbmQ6ZmFsc2UsZW5lcmd5Omhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGAke2ludGVydmFsLm5hbWV9OmVuZXJneWAsdHIuYi5Vbml0LmJ5TmFtZS5lbmVyZ3lJbkpvdWxlc19zbWFsbGVySXNCZXR0ZXIsW10se2Rlc2NyaXB0aW9uOmBFbmVyZ3kgY29uc3VtZWQgaW4gJHtpbnRlcnZhbC5kZXNjcmlwdGlvbn1gLHN1bW1hcnlPcHRpb25zOnthdmc6ZmFsc2UsY291bnQ6ZmFsc2UsbWF4OnRydWUsbWluOnRydWUsc3RkOmZhbHNlLHN1bTp0cnVlLH0sfSksfTt9Ci1mdW5jdGlvbiBjcmVhdGVIaXN0b2dyYW1zXyhkYXRhLGludGVydmFsLGhpc3RvZ3JhbXMpe2lmKGRhdGEuaGlzdG9ncmFtc1tpbnRlcnZhbC5uYW1lXT09PXVuZGVmaW5lZCl7ZGF0YS5oaXN0b2dyYW1zW2ludGVydmFsLm5hbWVdPWNyZWF0ZUVtcHR5SGlzdG9ncmFtXyhpbnRlcnZhbCxoaXN0b2dyYW1zKTt9Ci1pZihkYXRhLmhpc3RvZ3JhbXNbaW50ZXJ2YWwubmFtZV0ucGVyU2Vjb25kKXtmb3IoY29uc3Qgc2FtcGxlIG9mIGRhdGEubW9kZWwuZGV2aWNlLnBvd2VyU2VyaWVzLmdldFNhbXBsZXNXaXRoaW5SYW5nZShpbnRlcnZhbC5ib3VuZHMubWluLGludGVydmFsLmJvdW5kcy5tYXgpKXtkYXRhLmhpc3RvZ3JhbXNbaW50ZXJ2YWwubmFtZV0uZW5lcmd5LmFkZFNhbXBsZShzYW1wbGUucG93ZXJJblcpO319ZWxzZXtjb25zdCBlbmVyZ3lJbko9ZGF0YS5tb2RlbC5kZXZpY2UucG93ZXJTZXJpZXMuZ2V0RW5lcmd5Q29uc3VtZWRJbkooaW50ZXJ2YWwuYm91bmRzLm1pbixpbnRlcnZhbC5ib3VuZHMubWF4KTtkYXRhLmhpc3RvZ3JhbXNbaW50ZXJ2YWwubmFtZV0uZW5lcmd5LmFkZFNhbXBsZShlbmVyZ3lJbkopO319Ci1mdW5jdGlvbiBnZXROYXZpZ2F0aW9uVFRJSW50ZXJ2YWxzXyhtb2RlbCl7Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2NvbnN0IGludGVydmFscz1bXTtmb3IoY29uc3QgcmVuZGVyZXJIZWxwZXIgb2YgT2JqZWN0LnZhbHVlcyhjaHJvbWVIZWxwZXIucmVuZGVyZXJIZWxwZXJzKSl7Y29uc3Qgc2FtcGxlcz10ci5tZXRyaWNzLnNoLmNvbGxlY3RMb2FkaW5nTWV0cmljc0ZvclJlbmRlcmVyKHJlbmRlcmVySGVscGVyKS5pbnRlcmFjdGl2ZVNhbXBsZXM7Zm9yKGNvbnN0IHNhbXBsZSBvZiBzYW1wbGVzKXtjb25zdCBpbmZvPXRyLmIuZ2V0T25seUVsZW1lbnQoc2FtcGxlLmRpYWdub3N0aWNzLmdldCgnTmF2aWdhdGlvbiBpbmZvcycpKTtpbnRlcnZhbHMucHVzaCh0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoaW5mby5uYXZpZ2F0aW9uU3RhcnRUaW1lLGluZm8uZXZlbnRUaW1lc3RhbXApKTt9fQotcmV0dXJuIGludGVydmFscy5zb3J0KCh4LHkpPT54Lm1pbi15Lm1pbik7fQotZnVuY3Rpb24qY29tcHV0ZVRpbWVJbnRlcnZhbHNfKG1vZGVsKXtjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7Y29uc3QgcG93ZXJTZXJpZXM9bW9kZWwuZGV2aWNlLnBvd2VyU2VyaWVzO2lmKHBvd2VyU2VyaWVzPT09dW5kZWZpbmVkfHxwb3dlclNlcmllcy5zYW1wbGVzLmxlbmd0aD09PTApe3JldHVybjt9Ci15aWVsZHtib3VuZHM6bW9kZWwuYm91bmRzLG5hbWU6J3N0b3J5JyxkZXNjcmlwdGlvbjondXNlciBzdG9yeScscGVyU2Vjb25kOnRydWV9O2NvbnN0IGNocm9tZUJvdW5kcz1jb21wdXRlQ2hyb21lQm91bmRzXyhtb2RlbCk7aWYoY2hyb21lQm91bmRzLmlzRW1wdHkpcmV0dXJuO2NvbnN0IHBvd2VyU2VyaWVzQm91bmRzV2l0aEdyYWNlUGVyaW9kPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShwb3dlclNlcmllcy5ib3VuZHMubWluLUNIUk9NRV9QT1dFUl9HUkFDRV9QRVJJT0RfTVMscG93ZXJTZXJpZXMuYm91bmRzLm1heCtDSFJPTUVfUE9XRVJfR1JBQ0VfUEVSSU9EX01TKTtpZighcG93ZXJTZXJpZXNCb3VuZHNXaXRoR3JhY2VQZXJpb2QuY29udGFpbnNSYW5nZUV4Y2x1c2l2ZShjaHJvbWVCb3VuZHMpKXtyZXR1cm47fQotZm9yKGNvbnN0IGludGVydmFsIG9mIGdldFJhaWxTdGFnZUludGVydmFsc18obW9kZWwpKXt5aWVsZHtib3VuZHM6aW50ZXJ2YWwuYm91bmRzLmZpbmRJbnRlcnNlY3Rpb24oY2hyb21lQm91bmRzKSxuYW1lOmludGVydmFsLm5hbWUsZGVzY3JpcHRpb246aW50ZXJ2YWwuZGVzY3JpcHRpb24scGVyU2Vjb25kOmludGVydmFsLnBlclNlY29uZH07fQotZm9yKGNvbnN0IGludGVydmFsIG9mIGdldExvYWRpbmdJbnRlcnZhbHNfKG1vZGVsLGNocm9tZUJvdW5kcykpe3lpZWxke2JvdW5kczppbnRlcnZhbC5ib3VuZHMuZmluZEludGVyc2VjdGlvbihjaHJvbWVCb3VuZHMpLG5hbWU6aW50ZXJ2YWwubmFtZSxkZXNjcmlwdGlvbjppbnRlcnZhbC5kZXNjcmlwdGlvbixwZXJTZWNvbmQ6aW50ZXJ2YWwucGVyU2Vjb25kfTt9fQotZnVuY3Rpb24qZ2V0UmFpbFN0YWdlSW50ZXJ2YWxzXyhtb2RlbCl7Zm9yKGNvbnN0IGV4cCBvZiBtb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zKXtjb25zdCBoaXN0b2dyYW1OYW1lPWV4cC50aXRsZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJyAnLCdfJyk7Y29uc3QgZW5lcmd5SGlzdD11bmRlZmluZWQ7aWYoaGlzdG9ncmFtTmFtZS5pbmNsdWRlcygncmVzcG9uc2UnKSl7eWllbGR7Ym91bmRzOnRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShleHAuc3RhcnQsZXhwLmVuZCksbmFtZTpoaXN0b2dyYW1OYW1lLGRlc2NyaXB0aW9uOidSQUlMIHN0YWdlICcraGlzdG9ncmFtTmFtZSxwZXJTZWNvbmQ6ZmFsc2V9O31lbHNlIGlmKGhpc3RvZ3JhbU5hbWUuaW5jbHVkZXMoJ2FuaW1hdGlvbicpfHxoaXN0b2dyYW1OYW1lLmluY2x1ZGVzKCdpZGxlJykpe3lpZWxke2JvdW5kczp0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoZXhwLnN0YXJ0LGV4cC5lbmQpLG5hbWU6aGlzdG9ncmFtTmFtZSxkZXNjcmlwdGlvbjonUkFJTCBzdGFnZSAnK2hpc3RvZ3JhbU5hbWUscGVyU2Vjb25kOnRydWV9O319fQotZnVuY3Rpb24qZ2V0TG9hZGluZ0ludGVydmFsc18obW9kZWwsY2hyb21lQm91bmRzKXtjb25zdCB0dGlJbnRlcnZhbHM9Z2V0TmF2aWdhdGlvblRUSUludGVydmFsc18obW9kZWwpO2Zvcihjb25zdCB0dGlJbnRlcnZhbCBvZiB0dGlJbnRlcnZhbHMpe3lpZWxke2JvdW5kczp0dGlJbnRlcnZhbCxuYW1lOidsb2FkJyxkZXNjcmlwdGlvbjoncGFnZSBsb2FkcycscGVyU2Vjb25kOmZhbHNlfTt9fQotZnVuY3Rpb24gY29tcHV0ZUNocm9tZUJvdW5kc18obW9kZWwpe2NvbnN0IGNocm9tZUJvdW5kcz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2lmKGNocm9tZUhlbHBlcj09PXVuZGVmaW5lZClyZXR1cm4gY2hyb21lQm91bmRzO2Zvcihjb25zdCBoZWxwZXIgb2YgY2hyb21lSGVscGVyLmJyb3dzZXJIZWxwZXJzKXtpZihoZWxwZXIubWFpblRocmVhZCl7Y2hyb21lQm91bmRzLmFkZFJhbmdlKGhlbHBlci5tYWluVGhyZWFkLmJvdW5kcyk7fX0KLWZvcihjb25zdCBwaWQgaW4gY2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVycyl7aWYoY2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVyc1twaWRdLm1haW5UaHJlYWQpe2Nocm9tZUJvdW5kcy5hZGRSYW5nZShjaHJvbWVIZWxwZXIucmVuZGVyZXJIZWxwZXJzW3BpZF0ubWFpblRocmVhZC5ib3VuZHMpO319Ci1yZXR1cm4gY2hyb21lQm91bmRzO30KLWZ1bmN0aW9uIHBvd2VyTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IGRhdGE9e21vZGVsLGhpc3RvZ3JhbXM6e319O2Zvcihjb25zdCBpbnRlcnZhbCBvZiBjb21wdXRlVGltZUludGVydmFsc18obW9kZWwpKXtjcmVhdGVIaXN0b2dyYW1zXyhkYXRhLGludGVydmFsLGhpc3RvZ3JhbXMpO319Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHBvd2VyTWV0cmljKTtyZXR1cm57cG93ZXJNZXRyaWN9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBjb21wdXRlQW5pbWF0aW9uVGhyb3VnaHB1dChhbmltYXRpb25FeHBlY3RhdGlvbil7aWYoYW5pbWF0aW9uRXhwZWN0YXRpb24uZnJhbWVFdmVudHM9PT11bmRlZmluZWR8fGFuaW1hdGlvbkV4cGVjdGF0aW9uLmZyYW1lRXZlbnRzLmxlbmd0aD09PTApe3Rocm93IG5ldyBFcnJvcignQW5pbWF0aW9uIG1pc3NpbmcgZnJhbWVFdmVudHMgJysKLWFuaW1hdGlvbkV4cGVjdGF0aW9uLnN0YWJsZUlkKTt9Ci1jb25zdCBkdXJhdGlvbkluUz10ci5iLmNvbnZlcnRVbml0KGFuaW1hdGlvbkV4cGVjdGF0aW9uLmR1cmF0aW9uLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUxMSSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTk9ORSk7cmV0dXJuIGFuaW1hdGlvbkV4cGVjdGF0aW9uLmZyYW1lRXZlbnRzLmxlbmd0aC9kdXJhdGlvbkluUzt9Ci1mdW5jdGlvbiBjb21wdXRlQW5pbWF0aW9uZnJhbWVUaW1lRGlzY3JlcGFuY3koYW5pbWF0aW9uRXhwZWN0YXRpb24pe2lmKGFuaW1hdGlvbkV4cGVjdGF0aW9uLmZyYW1lRXZlbnRzPT09dW5kZWZpbmVkfHxhbmltYXRpb25FeHBlY3RhdGlvbi5mcmFtZUV2ZW50cy5sZW5ndGg9PT0wKXt0aHJvdyBuZXcgRXJyb3IoJ0FuaW1hdGlvbiBtaXNzaW5nIGZyYW1lRXZlbnRzICcrCi1hbmltYXRpb25FeHBlY3RhdGlvbi5zdGFibGVJZCk7fQotbGV0IGZyYW1lVGltZXN0YW1wcz1hbmltYXRpb25FeHBlY3RhdGlvbi5mcmFtZUV2ZW50cztmcmFtZVRpbWVzdGFtcHM9ZnJhbWVUaW1lc3RhbXBzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24oZXZlbnQpe3JldHVybiBldmVudC5zdGFydDt9KTtjb25zdCBhYnNvbHV0ZT10cnVlO3JldHVybiB0ci5iLm1hdGguU3RhdGlzdGljcy50aW1lc3RhbXBzRGlzY3JlcGFuY3koZnJhbWVUaW1lc3RhbXBzLGFic29sdXRlKTt9Ci1mdW5jdGlvbiByZXNwb25zaXZlbmVzc01ldHJpYyhoaXN0b2dyYW1zLG1vZGVsLG9wdF9vcHRpb25zKXtjb25zdCByZXNwb25zZU51bWVyaWM9bmV3IHRyLnYuSGlzdG9ncmFtKCdyZXNwb25zZSBsYXRlbmN5Jyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLHRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoMTAwLDFlMyw1MCkpO2NvbnN0IHRocm91Z2hwdXROdW1lcmljPW5ldyB0ci52Lkhpc3RvZ3JhbSgnYW5pbWF0aW9uIHRocm91Z2hwdXQnLHRyLmIuVW5pdC5ieU5hbWUudW5pdGxlc3NOdW1iZXJfYmlnZ2VySXNCZXR0ZXIsdHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigxMCw2MCwxMCkpO2NvbnN0IGZyYW1lVGltZURpc2NyZXBhbmN5TnVtZXJpYz1uZXcgdHIudi5IaXN0b2dyYW0oJ2FuaW1hdGlvbiBmcmFtZVRpbWVEaXNjcmVwYW5jeScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcix0ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDAsMWUzLDUwKS5hZGRFeHBvbmVudGlhbEJpbnMoMWU0LDEwKSk7Y29uc3QgbGF0ZW5jeU51bWVyaWM9bmV3IHRyLnYuSGlzdG9ncmFtKCdhbmltYXRpb24gbGF0ZW5jeScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcix0ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDAsMzAwLDYwKSk7bW9kZWwudXNlck1vZGVsLmV4cGVjdGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHVlKXtpZihvcHRfb3B0aW9ucyYmb3B0X29wdGlvbnMucmFuZ2VPZkludGVyZXN0JiYhb3B0X29wdGlvbnMucmFuZ2VPZkludGVyZXN0LmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHVlLnN0YXJ0LHVlLmVuZCkpe3JldHVybjt9Ci1jb25zdCBzYW1wbGVEaWFnbm9zdGljTWFwPXRyLnYuZC5EaWFnbm9zdGljTWFwLmZyb21PYmplY3Qoe3JlbGF0ZWRFdmVudHM6bmV3IHRyLnYuZC5SZWxhdGVkRXZlbnRTZXQoW3VlXSl9KTtpZih1ZSBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLklkbGVFeHBlY3RhdGlvbil7cmV0dXJuO31lbHNlIGlmKHVlIGluc3RhbmNlb2YgdHIubW9kZWwudW0uU3RhcnR1cEV4cGVjdGF0aW9uKXtyZXR1cm47fWVsc2UgaWYodWUgaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5Mb2FkRXhwZWN0YXRpb24pe31lbHNlIGlmKHVlIGluc3RhbmNlb2YgdHIubW9kZWwudW0uUmVzcG9uc2VFeHBlY3RhdGlvbil7cmVzcG9uc2VOdW1lcmljLmFkZFNhbXBsZSh1ZS5kdXJhdGlvbixzYW1wbGVEaWFnbm9zdGljTWFwKTt9ZWxzZSBpZih1ZSBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLkFuaW1hdGlvbkV4cGVjdGF0aW9uKXtpZih1ZS5mcmFtZUV2ZW50cz09PXVuZGVmaW5lZHx8dWUuZnJhbWVFdmVudHMubGVuZ3RoPT09MCl7cmV0dXJuO30KLWNvbnN0IHRocm91Z2hwdXQ9Y29tcHV0ZUFuaW1hdGlvblRocm91Z2hwdXQodWUpO2lmKHRocm91Z2hwdXQ9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTWlzc2luZyB0aHJvdWdocHV0IGZvciAnKwotdWUuc3RhYmxlSWQpO30KLXRocm91Z2hwdXROdW1lcmljLmFkZFNhbXBsZSh0aHJvdWdocHV0LHNhbXBsZURpYWdub3N0aWNNYXApO2NvbnN0IGZyYW1lVGltZURpc2NyZXBhbmN5PWNvbXB1dGVBbmltYXRpb25mcmFtZVRpbWVEaXNjcmVwYW5jeSh1ZSk7aWYoZnJhbWVUaW1lRGlzY3JlcGFuY3k9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTWlzc2luZyBmcmFtZVRpbWVEaXNjcmVwYW5jeSBmb3IgJysKLXVlLnN0YWJsZUlkKTt9Ci1mcmFtZVRpbWVEaXNjcmVwYW5jeU51bWVyaWMuYWRkU2FtcGxlKGZyYW1lVGltZURpc2NyZXBhbmN5LHNhbXBsZURpYWdub3N0aWNNYXApO3VlLmFzc29jaWF0ZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7aWYoIShldmVudCBpbnN0YW5jZW9mIHRyLmUuY2MuSW5wdXRMYXRlbmN5QXN5bmNTbGljZSkpe3JldHVybjt9Ci1sYXRlbmN5TnVtZXJpYy5hZGRTYW1wbGUoZXZlbnQuZHVyYXRpb24sc2FtcGxlRGlhZ25vc3RpY01hcCk7fSk7fWVsc2V7dGhyb3cgbmV3IEVycm9yKCdVbnJlY29nbml6ZWQgc3RhZ2UgZm9yICcrdWUuc3RhYmxlSWQpO319KTtbcmVzcG9uc2VOdW1lcmljLHRocm91Z2hwdXROdW1lcmljLGZyYW1lVGltZURpc2NyZXBhbmN5TnVtZXJpYyxsYXRlbmN5TnVtZXJpY10uZm9yRWFjaChmdW5jdGlvbihudW1lcmljKXtudW1lcmljLmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHthdmc6dHJ1ZSxtYXg6dHJ1ZSxtaW46dHJ1ZSxzdGQ6dHJ1ZX0pO30pO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHJlc3BvbnNlTnVtZXJpYyk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0odGhyb3VnaHB1dE51bWVyaWMpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGZyYW1lVGltZURpc2NyZXBhbmN5TnVtZXJpYyk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0obGF0ZW5jeU51bWVyaWMpO30KLXRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIocmVzcG9uc2l2ZW5lc3NNZXRyaWMse3N1cHBvcnRzUmFuZ2VPZkludGVyZXN0OnRydWUscmVxdWlyZWRDYXRlZ29yaWVzOlsncmFpbCddLH0pO3JldHVybntyZXNwb25zaXZlbmVzc01ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtmdW5jdGlvbiB3ZWJ2aWV3U3RhcnR1cE1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBzdGFydHVwV2FsbEhpc3Q9bmV3IHRyLnYuSGlzdG9ncmFtKCd3ZWJ2aWV3X3N0YXJ0dXBfd2FsbF90aW1lJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyKTtzdGFydHVwV2FsbEhpc3QuZGVzY3JpcHRpb249J1dlYlZpZXcgc3RhcnR1cCB3YWxsIHRpbWUnO2NvbnN0IHN0YXJ0dXBDUFVIaXN0PW5ldyB0ci52Lkhpc3RvZ3JhbSgnd2Vidmlld19zdGFydHVwX2NwdV90aW1lJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyKTtzdGFydHVwQ1BVSGlzdC5kZXNjcmlwdGlvbj0nV2ViVmlldyBzdGFydHVwIENQVSB0aW1lJztjb25zdCBsb2FkV2FsbEhpc3Q9bmV3IHRyLnYuSGlzdG9ncmFtKCd3ZWJ2aWV3X3VybF9sb2FkX3dhbGxfdGltZScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcik7bG9hZFdhbGxIaXN0LmRlc2NyaXB0aW9uPSdXZWJWaWV3IGJsYW5rIFVSTCBsb2FkIHdhbGwgdGltZSc7Y29uc3QgbG9hZENQVUhpc3Q9bmV3IHRyLnYuSGlzdG9ncmFtKCd3ZWJ2aWV3X3VybF9sb2FkX2NwdV90aW1lJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyKTtsb2FkQ1BVSGlzdC5kZXNjcmlwdGlvbj0nV2ViVmlldyBibGFuayBVUkwgbG9hZCBDUFUgdGltZSc7Zm9yKGNvbnN0IHNsaWNlIG9mIG1vZGVsLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoIShzbGljZSBpbnN0YW5jZW9mIHRyLm1vZGVsLlRocmVhZFNsaWNlKSljb250aW51ZTtpZihzbGljZS50aXRsZT09PSdXZWJWaWV3U3RhcnR1cEludGVydmFsJyl7c3RhcnR1cFdhbGxIaXN0LmFkZFNhbXBsZShzbGljZS5kdXJhdGlvbik7c3RhcnR1cENQVUhpc3QuYWRkU2FtcGxlKHNsaWNlLmNwdUR1cmF0aW9uKTt9Ci1pZihzbGljZS50aXRsZT09PSdXZWJWaWV3QmxhbmtVcmxMb2FkSW50ZXJ2YWwnKXtsb2FkV2FsbEhpc3QuYWRkU2FtcGxlKHNsaWNlLmR1cmF0aW9uKTtsb2FkQ1BVSGlzdC5hZGRTYW1wbGUoc2xpY2UuY3B1RHVyYXRpb24pO319Ci1oaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShzdGFydHVwV2FsbEhpc3QpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHN0YXJ0dXBDUFVIaXN0KTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShsb2FkV2FsbEhpc3QpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGxvYWRDUFVIaXN0KTt9Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHdlYnZpZXdTdGFydHVwTWV0cmljKTtyZXR1cm57d2Vidmlld1N0YXJ0dXBNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MudGFicycsZnVuY3Rpb24oKXtmdW5jdGlvbiB0YWJzTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwsb3B0X29wdGlvbnMpe2NvbnN0IHRocmVhZD1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKS5icm93c2VySGVscGVyLm1haW5UaHJlYWQ7Y29uc3QgdGFiU3dpdGNoTGF0ZW5jaWVzPVtdO2lmKHRocmVhZCl7Zm9yKGNvbnN0IHNsaWNlIG9mIHRocmVhZC5hc3luY1NsaWNlR3JvdXAuc2xpY2VzKXtpZihzbGljZS50aXRsZT09PSdUYWJTd2l0Y2hpbmc6OkxhdGVuY3knKXt0YWJTd2l0Y2hMYXRlbmNpZXMucHVzaChzbGljZS5kdXJhdGlvbik7fX19Ci1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgndGFiX3N3aXRjaGluZ19sYXRlbmN5Jyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLHRhYlN3aXRjaExhdGVuY2llcyx7ZGVzY3JpcHRpb246J1RhYiBzd2l0Y2hpbmcgdGltZSBpbiBtcycsc3VtbWFyeU9wdGlvbnM6e3N1bTpmYWxzZX19KTt9Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHRhYnNNZXRyaWMse3N1cHBvcnRzUmFuZ2VPZkludGVyZXN0OmZhbHNlLH0pO3JldHVybnt0YWJzTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzJyxmdW5jdGlvbigpe2NvbnN0IE1FTU9SWV9JTkZSQV9UUkFDSU5HX0NBVEVHT1JZPSdkaXNhYmxlZC1ieS1kZWZhdWx0LW1lbW9yeS1pbmZyYSc7Y29uc3QgVElNRV9CT1VOREFSSUVTPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVFeHBvbmVudGlhbCgxZS0zLDFlNSwzMCk7Y29uc3QgQllURV9CT1VOREFSSUVTPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVFeHBvbmVudGlhbCgxLDFlOSwzMCk7Y29uc3QgQ09VTlRfQk9VTkRBUklFUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlRXhwb25lbnRpYWwoMSwxZTUsMzApO2NvbnN0IFNVTU1BUllfT1BUSU9OUz10ci52Lkhpc3RvZ3JhbS5BVkVSQUdFX09OTFlfU1VNTUFSWV9PUFRJT05TO2Z1bmN0aW9uIGFkZE1lbW9yeUluZnJhSGlzdG9ncmFtcyhoaXN0b2dyYW1zLG1vZGVsLGNhdGVnb3J5TmFtZXNUb1RvdGFsRXZlbnRTaXplcyl7Y29uc3QgbWVtb3J5RHVtcENvdW50PW1vZGVsLmdsb2JhbE1lbW9yeUR1bXBzLmxlbmd0aDtpZihtZW1vcnlEdW1wQ291bnQ9PT0wKXJldHVybjtsZXQgdG90YWxPdmVyaGVhZD0wO2xldCBub25NZW1vcnlJbmZyYVRocmVhZE92ZXJoZWFkPTA7Y29uc3Qgb3ZlcmhlYWRCeVByb3ZpZGVyPXt9O2Zvcihjb25zdCBwcm9jZXNzIG9mIE9iamVjdC52YWx1ZXMobW9kZWwucHJvY2Vzc2VzKSl7Zm9yKGNvbnN0IHRocmVhZCBvZiBPYmplY3QudmFsdWVzKHByb2Nlc3MudGhyZWFkcykpe2Zvcihjb25zdCBzbGljZSBvZiBPYmplY3QudmFsdWVzKHRocmVhZC5zbGljZUdyb3VwLnNsaWNlcykpe2lmKHNsaWNlLmNhdGVnb3J5IT09TUVNT1JZX0lORlJBX1RSQUNJTkdfQ0FURUdPUlkpY29udGludWU7dG90YWxPdmVyaGVhZCs9c2xpY2UuZHVyYXRpb247aWYodGhyZWFkLm5hbWUhPT0nTWVtb3J5SW5mcmEnKXtub25NZW1vcnlJbmZyYVRocmVhZE92ZXJoZWFkKz1zbGljZS5kdXJhdGlvbjt9Ci1pZihzbGljZS5hcmdzJiZzbGljZS5hcmdzWydkdW1wX3Byb3ZpZGVyLm5hbWUnXSl7Y29uc3QgcHJvdmlkZXJOYW1lPXNsaWNlLmFyZ3NbJ2R1bXBfcHJvdmlkZXIubmFtZSddO2xldCBkdXJhdGlvbkFuZENvdW50PW92ZXJoZWFkQnlQcm92aWRlcltwcm92aWRlck5hbWVdO2lmKGR1cmF0aW9uQW5kQ291bnQ9PT11bmRlZmluZWQpe292ZXJoZWFkQnlQcm92aWRlcltwcm92aWRlck5hbWVdPWR1cmF0aW9uQW5kQ291bnQ9e2R1cmF0aW9uOjAsY291bnQ6MH07fQotZHVyYXRpb25BbmRDb3VudC5kdXJhdGlvbis9c2xpY2UuZHVyYXRpb247ZHVyYXRpb25BbmRDb3VudC5jb3VudCsrO319fX0KLWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdtZW1vcnlfZHVtcF9jcHVfb3ZlcmhlYWQnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsdG90YWxPdmVyaGVhZC9tZW1vcnlEdW1wQ291bnQse2JpbkJvdW5kYXJpZXM6VElNRV9CT1VOREFSSUVTLGRlc2NyaXB0aW9uOidBdmVyYWdlIENQVSBvdmVyaGVhZCBvbiBhbGwgdGhyZWFkcyBwZXIgbWVtb3J5LWluZnJhIGR1bXAnLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnbm9ubWVtb3J5X3RocmVhZF9tZW1vcnlfZHVtcF9jcHVfb3ZlcmhlYWQnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsbm9uTWVtb3J5SW5mcmFUaHJlYWRPdmVyaGVhZC9tZW1vcnlEdW1wQ291bnQse2JpbkJvdW5kYXJpZXM6VElNRV9CT1VOREFSSUVTLGRlc2NyaXB0aW9uOidBdmVyYWdlIENQVSBvdmVyaGVhZCBvbiBub24tbWVtb3J5LWluZnJhIHRocmVhZHMgJysncGVyIG1lbW9yeS1pbmZyYSBkdW1wJyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7Zm9yKGNvbnN0W3Byb3ZpZGVyTmFtZSxvdmVyaGVhZF1vZiBPYmplY3QuZW50cmllcyhvdmVyaGVhZEJ5UHJvdmlkZXIpKXtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShgJHtwcm92aWRlck5hbWV9X21lbW9yeV9kdW1wX2NwdV9vdmVyaGVhZGAsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixvdmVyaGVhZC5kdXJhdGlvbi9vdmVyaGVhZC5jb3VudCx7YmluQm91bmRhcmllczpUSU1FX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246YEF2ZXJhZ2UgQ1BVIG92ZXJoZWFkIG9mICR7cHJvdmlkZXJOYW1lfSBwZXIgT25NZW1vcnlEdW1wIGNhbGxgLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTt9Ci1jb25zdCBtZW1vcnlJbmZyYUV2ZW50c1NpemU9Y2F0ZWdvcnlOYW1lc1RvVG90YWxFdmVudFNpemVzLmdldChNRU1PUllfSU5GUkFfVFJBQ0lOR19DQVRFR09SWSk7Y29uc3QgbWVtb3J5SW5mcmFUcmFjZUJ5dGVzVmFsdWU9bmV3IHRyLnYuSGlzdG9ncmFtKCd0b3RhbF9tZW1vcnlfZHVtcF9zaXplJyx0ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixCWVRFX0JPVU5EQVJJRVMpO21lbW9yeUluZnJhVHJhY2VCeXRlc1ZhbHVlLmRlc2NyaXB0aW9uPSdUb3RhbCB0cmFjZSBzaXplIG9mIG1lbW9yeS1pbmZyYSBkdW1wcyBpbiBieXRlcyc7bWVtb3J5SW5mcmFUcmFjZUJ5dGVzVmFsdWUuY3VzdG9taXplU3VtbWFyeU9wdGlvbnMoU1VNTUFSWV9PUFRJT05TKTttZW1vcnlJbmZyYVRyYWNlQnl0ZXNWYWx1ZS5hZGRTYW1wbGUobWVtb3J5SW5mcmFFdmVudHNTaXplKTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShtZW1vcnlJbmZyYVRyYWNlQnl0ZXNWYWx1ZSk7Y29uc3QgdHJhY2VCeXRlc1BlckR1bXBWYWx1ZT1uZXcgdHIudi5IaXN0b2dyYW0oJ21lbW9yeV9kdW1wX3NpemUnLHRyLmIuVW5pdC5ieU5hbWUuc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLEJZVEVfQk9VTkRBUklFUyk7dHJhY2VCeXRlc1BlckR1bXBWYWx1ZS5kZXNjcmlwdGlvbj0nQXZlcmFnZSB0cmFjZSBzaXplIG9mIG1lbW9yeS1pbmZyYSBkdW1wcyBpbiBieXRlcyc7dHJhY2VCeXRlc1BlckR1bXBWYWx1ZS5jdXN0b21pemVTdW1tYXJ5T3B0aW9ucyhTVU1NQVJZX09QVElPTlMpO3RyYWNlQnl0ZXNQZXJEdW1wVmFsdWUuYWRkU2FtcGxlKG1lbW9yeUluZnJhRXZlbnRzU2l6ZS9tZW1vcnlEdW1wQ291bnQpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHRyYWNlQnl0ZXNQZXJEdW1wVmFsdWUpO30KLWZ1bmN0aW9uIHRyYWNpbmdNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ3RyYWNlX2ltcG9ydF9kdXJhdGlvbicsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixtb2RlbC5zdGF0cy50cmFjZUltcG9ydER1cmF0aW9uTXMse2JpbkJvdW5kYXJpZXM6VElNRV9CT1VOREFSSUVTLGRlc2NyaXB0aW9uOidEdXJhdGlvbiB0aGF0IHRyYWNlIHZpZXdlciByZXF1aXJlZCB0byBpbXBvcnQgdGhlIHRyYWNlJyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7aWYoIW1vZGVsLnN0YXRzLmhhc0V2ZW50U2l6ZXNpbkJ5dGVzKXJldHVybjtjb25zdCBldmVudFN0YXRzPW1vZGVsLnN0YXRzLmFsbFRyYWNlRXZlbnRTdGF0c0luVGltZUludGVydmFscztldmVudFN0YXRzLnNvcnQoKGEsYik9PmEudGltZUludGVydmFsLWIudGltZUludGVydmFsKTtjb25zdCB0b3RhbFRyYWNlQnl0ZXM9ZXZlbnRTdGF0cy5yZWR1Y2UoKGEsYik9PmErYi50b3RhbEV2ZW50U2l6ZWluQnl0ZXMsMCk7bGV0IG1heEV2ZW50Q291bnRQZXJTZWM9MDtsZXQgbWF4RXZlbnRCeXRlc1BlclNlYz0wO2NvbnN0IElOVEVSVkFMU19QRVJfU0VDPU1hdGguZmxvb3IoMTAwMC9tb2RlbC5zdGF0cy5USU1FX0lOVEVSVkFMX1NJWkVfSU5fTVMpO2xldCBydW5uaW5nRXZlbnROdW1QZXJTZWM9MDtsZXQgcnVubmluZ0V2ZW50Qnl0ZXNQZXJTZWM9MDtsZXQgc3RhcnQ9MDtsZXQgZW5kPTA7d2hpbGUoZW5kPGV2ZW50U3RhdHMubGVuZ3RoKXtydW5uaW5nRXZlbnROdW1QZXJTZWMrPWV2ZW50U3RhdHNbZW5kXS5udW1FdmVudHM7cnVubmluZ0V2ZW50Qnl0ZXNQZXJTZWMrPWV2ZW50U3RhdHNbZW5kXS50b3RhbEV2ZW50U2l6ZWluQnl0ZXM7ZW5kKys7d2hpbGUoKGV2ZW50U3RhdHNbZW5kLTFdLnRpbWVJbnRlcnZhbC0KLWV2ZW50U3RhdHNbc3RhcnRdLnRpbWVJbnRlcnZhbCk+PUlOVEVSVkFMU19QRVJfU0VDKXtydW5uaW5nRXZlbnROdW1QZXJTZWMtPWV2ZW50U3RhdHNbc3RhcnRdLm51bUV2ZW50cztydW5uaW5nRXZlbnRCeXRlc1BlclNlYy09ZXZlbnRTdGF0c1tzdGFydF0udG90YWxFdmVudFNpemVpbkJ5dGVzO3N0YXJ0Kys7fQotbWF4RXZlbnRDb3VudFBlclNlYz1NYXRoLm1heChtYXhFdmVudENvdW50UGVyU2VjLHJ1bm5pbmdFdmVudE51bVBlclNlYyk7bWF4RXZlbnRCeXRlc1BlclNlYz1NYXRoLm1heChtYXhFdmVudEJ5dGVzUGVyU2VjLHJ1bm5pbmdFdmVudEJ5dGVzUGVyU2VjKTt9Ci1jb25zdCBzdGF0cz1tb2RlbC5zdGF0cy5hbGxUcmFjZUV2ZW50U3RhdHM7Y29uc3QgY2F0ZWdvcnlOYW1lc1RvVG90YWxFdmVudFNpemVzPShzdGF0cy5yZWR1Y2UoKG1hcCxzdGF0KT0+KG1hcC5zZXQoc3RhdC5jYXRlZ29yeSwoKG1hcC5nZXQoc3RhdC5jYXRlZ29yeSl8fDApKwotc3RhdC50b3RhbEV2ZW50U2l6ZWluQnl0ZXMpKSksbmV3IE1hcCgpKSk7Y29uc3QgbWF4Q2F0TmFtZUFuZEJ5dGVzPUFycmF5LmZyb20oY2F0ZWdvcnlOYW1lc1RvVG90YWxFdmVudFNpemVzLmVudHJpZXMoKSkucmVkdWNlKChhLGIpPT4oKGJbMV0+PWFbMV0pP2I6YSkpO2NvbnN0IG1heEV2ZW50Qnl0ZXNQZXJDYXRlZ29yeT1tYXhDYXROYW1lQW5kQnl0ZXNbMV07Y29uc3QgY2F0ZWdvcnlXaXRoTWF4RXZlbnRCeXRlcz1tYXhDYXROYW1lQW5kQnl0ZXNbMF07Y29uc3QgbWF4RXZlbnRDb3VudFBlclNlY1ZhbHVlPW5ldyB0ci52Lkhpc3RvZ3JhbSgncGVha19ldmVudF9yYXRlJyx0ci5iLlVuaXQuYnlOYW1lLmNvdW50X3NtYWxsZXJJc0JldHRlcixDT1VOVF9CT1VOREFSSUVTKTttYXhFdmVudENvdW50UGVyU2VjVmFsdWUuZGVzY3JpcHRpb249J01heCBudW1iZXIgb2YgZXZlbnRzIHBlciBzZWNvbmQnO21heEV2ZW50Q291bnRQZXJTZWNWYWx1ZS5jdXN0b21pemVTdW1tYXJ5T3B0aW9ucyhTVU1NQVJZX09QVElPTlMpO21heEV2ZW50Q291bnRQZXJTZWNWYWx1ZS5hZGRTYW1wbGUobWF4RXZlbnRDb3VudFBlclNlYyk7Y29uc3QgbWF4RXZlbnRCeXRlc1BlclNlY1ZhbHVlPW5ldyB0ci52Lkhpc3RvZ3JhbSgncGVha19ldmVudF9zaXplX3JhdGUnLHRyLmIuVW5pdC5ieU5hbWUuc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLEJZVEVfQk9VTkRBUklFUyk7bWF4RXZlbnRCeXRlc1BlclNlY1ZhbHVlLmRlc2NyaXB0aW9uPSdNYXggZXZlbnQgc2l6ZSBpbiBieXRlcyBwZXIgc2Vjb25kJzttYXhFdmVudEJ5dGVzUGVyU2VjVmFsdWUuY3VzdG9taXplU3VtbWFyeU9wdGlvbnMoU1VNTUFSWV9PUFRJT05TKTttYXhFdmVudEJ5dGVzUGVyU2VjVmFsdWUuYWRkU2FtcGxlKG1heEV2ZW50Qnl0ZXNQZXJTZWMpO2NvbnN0IHRvdGFsVHJhY2VCeXRlc1ZhbHVlPW5ldyB0ci52Lkhpc3RvZ3JhbSgndHJhY2Vfc2l6ZScsdHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsQllURV9CT1VOREFSSUVTKTt0b3RhbFRyYWNlQnl0ZXNWYWx1ZS5jdXN0b21pemVTdW1tYXJ5T3B0aW9ucyhTVU1NQVJZX09QVElPTlMpO3RvdGFsVHJhY2VCeXRlc1ZhbHVlLmFkZFNhbXBsZSh0b3RhbFRyYWNlQnl0ZXMpO2NvbnN0IGJpZ2dlc3RDYXRlZ29yeT17bmFtZTpjYXRlZ29yeVdpdGhNYXhFdmVudEJ5dGVzLHNpemVfaW5fYnl0ZXM6bWF4RXZlbnRCeXRlc1BlckNhdGVnb3J5fTt0b3RhbFRyYWNlQnl0ZXNWYWx1ZS5kaWFnbm9zdGljcy5zZXQoJ2NhdGVnb3J5X3dpdGhfbWF4X2V2ZW50X3NpemUnLG5ldyB0ci52LmQuR2VuZXJpY1NldChbYmlnZ2VzdENhdGVnb3J5XSkpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHRvdGFsVHJhY2VCeXRlc1ZhbHVlKTttYXhFdmVudENvdW50UGVyU2VjVmFsdWUuZGlhZ25vc3RpY3Muc2V0KCdjYXRlZ29yeV93aXRoX21heF9ldmVudF9zaXplJyxuZXcgdHIudi5kLkdlbmVyaWNTZXQoW2JpZ2dlc3RDYXRlZ29yeV0pKTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShtYXhFdmVudENvdW50UGVyU2VjVmFsdWUpO21heEV2ZW50Qnl0ZXNQZXJTZWNWYWx1ZS5kaWFnbm9zdGljcy5zZXQoJ2NhdGVnb3J5X3dpdGhfbWF4X2V2ZW50X3NpemUnLG5ldyB0ci52LmQuR2VuZXJpY1NldChbYmlnZ2VzdENhdGVnb3J5XSkpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKG1heEV2ZW50Qnl0ZXNQZXJTZWNWYWx1ZSk7YWRkTWVtb3J5SW5mcmFIaXN0b2dyYW1zKGhpc3RvZ3JhbXMsbW9kZWwsY2F0ZWdvcnlOYW1lc1RvVG90YWxFdmVudFNpemVzKTt9Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHRyYWNpbmdNZXRyaWMpO3JldHVybnt0cmFjaW5nTWV0cmljLE1FTU9SWV9JTkZSQV9UUkFDSU5HX0NBVEVHT1JZLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnY4JyxmdW5jdGlvbigpe2NvbnN0IENVU1RPTV9CT1VOREFSSUVTPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoNCwyMDAsMTAwKTtmdW5jdGlvbiBjb21wdXRlRXhlY3V0ZU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgY3B1VG90YWxFeGVjdXRpb249bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9leGVjdXRpb25fY3B1X3RvdGFsJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtjcHVUb3RhbEV4ZWN1dGlvbi5kZXNjcmlwdGlvbj0nY3B1IHRvdGFsIHRpbWUgc3BlbnQgaW4gc2NyaXB0IGV4ZWN1dGlvbic7Y29uc3Qgd2FsbFRvdGFsRXhlY3V0aW9uPW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfZXhlY3V0aW9uX3dhbGxfdG90YWwnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO3dhbGxUb3RhbEV4ZWN1dGlvbi5kZXNjcmlwdGlvbj0nd2FsbCB0b3RhbCB0aW1lIHNwZW50IGluIHNjcmlwdCBleGVjdXRpb24nO2NvbnN0IGNwdVNlbGZFeGVjdXRpb249bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9leGVjdXRpb25fY3B1X3NlbGYnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO2NwdVNlbGZFeGVjdXRpb24uZGVzY3JpcHRpb249J2NwdSBzZWxmIHRpbWUgc3BlbnQgaW4gc2NyaXB0IGV4ZWN1dGlvbic7Y29uc3Qgd2FsbFNlbGZFeGVjdXRpb249bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9leGVjdXRpb25fd2FsbF9zZWxmJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTt3YWxsU2VsZkV4ZWN1dGlvbi5kZXNjcmlwdGlvbj0nd2FsbCBzZWxmIHRpbWUgc3BlbnQgaW4gc2NyaXB0IGV4ZWN1dGlvbic7Zm9yKGNvbnN0IGUgb2YgbW9kZWwuZmluZFRvcG1vc3RTbGljZXNOYW1lZCgnVjguRXhlY3V0ZScpKXtjcHVUb3RhbEV4ZWN1dGlvbi5hZGRTYW1wbGUoZS5jcHVEdXJhdGlvbik7d2FsbFRvdGFsRXhlY3V0aW9uLmFkZFNhbXBsZShlLmR1cmF0aW9uKTtjcHVTZWxmRXhlY3V0aW9uLmFkZFNhbXBsZShlLmNwdVNlbGZUaW1lKTt3YWxsU2VsZkV4ZWN1dGlvbi5hZGRTYW1wbGUoZS5zZWxmVGltZSk7fQotaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1VG90YWxFeGVjdXRpb24pO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHdhbGxUb3RhbEV4ZWN1dGlvbik7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1U2VsZkV4ZWN1dGlvbik7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0od2FsbFNlbGZFeGVjdXRpb24pO30KLWZ1bmN0aW9uIGNvbXB1dGVQYXJzZUxhenlNZXRyaWNzKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IGNwdVNlbGZQYXJzZUxhenk9bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9wYXJzZV9sYXp5X2NwdV9zZWxmJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtjcHVTZWxmUGFyc2VMYXp5LmRlc2NyaXB0aW9uPSdjcHUgc2VsZiB0aW1lIHNwZW50IHBlcmZvcm1pbmcgbGF6eSBwYXJzaW5nJztjb25zdCB3YWxsU2VsZlBhcnNlTGF6eT1uZXcgdHIudi5IaXN0b2dyYW0oJ3Y4X3BhcnNlX2xhenlfd2FsbF9zZWxmJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTt3YWxsU2VsZlBhcnNlTGF6eS5kZXNjcmlwdGlvbj0nd2FsbCBzZWxmIHRpbWUgc3BlbnQgcGVyZm9ybWluZyBsYXp5IHBhcnNpbmcnO2Zvcihjb25zdCBlIG9mIG1vZGVsLmZpbmRUb3Btb3N0U2xpY2VzTmFtZWQoJ1Y4LlBhcnNlTGF6eU1pY3JvU2Vjb25kcycpKXtjcHVTZWxmUGFyc2VMYXp5LmFkZFNhbXBsZShlLmNwdVNlbGZUaW1lKTt3YWxsU2VsZlBhcnNlTGF6eS5hZGRTYW1wbGUoZS5zZWxmVGltZSk7fQotZm9yKGNvbnN0IGUgb2YgbW9kZWwuZmluZFRvcG1vc3RTbGljZXNOYW1lZCgnVjguUGFyc2VMYXp5Jykpe2NwdVNlbGZQYXJzZUxhenkuYWRkU2FtcGxlKGUuY3B1U2VsZlRpbWUpO3dhbGxTZWxmUGFyc2VMYXp5LmFkZFNhbXBsZShlLnNlbGZUaW1lKTt9Ci1oaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShjcHVTZWxmUGFyc2VMYXp5KTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbSh3YWxsU2VsZlBhcnNlTGF6eSk7fQotZnVuY3Rpb24gY29tcHV0ZUNvbXBpbGVGdWxsQ29kZU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgY3B1U2VsZkNvbXBpbGVGdWxsQ29kZT1uZXcgdHIudi5IaXN0b2dyYW0oJ3Y4X2NvbXBpbGVfZnVsbF9jb2RlX2NwdV9zZWxmJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtjcHVTZWxmQ29tcGlsZUZ1bGxDb2RlLmRlc2NyaXB0aW9uPSdjcHUgc2VsZiB0aW1lIHNwZW50IHBlcmZvcm1pbmcgY29tcGlsaW5nIGZ1bGwgY29kZSc7Y29uc3Qgd2FsbFNlbGZDb21waWxlRnVsbENvZGU9bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9jb21waWxlX2Z1bGxfY29kZV93YWxsX3NlbGYnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO3dhbGxTZWxmQ29tcGlsZUZ1bGxDb2RlLmRlc2NyaXB0aW9uPSd3YWxsIHNlbGYgdGltZSBzcGVudCBwZXJmb3JtaW5nIGNvbXBpbGluZyBmdWxsIGNvZGUnO2Zvcihjb25zdCBlIG9mIG1vZGVsLmZpbmRUb3Btb3N0U2xpY2VzTmFtZWQoJ1Y4LkNvbXBpbGVGdWxsQ29kZScpKXtjcHVTZWxmQ29tcGlsZUZ1bGxDb2RlLmFkZFNhbXBsZShlLmNwdVNlbGZUaW1lKTt3YWxsU2VsZkNvbXBpbGVGdWxsQ29kZS5hZGRTYW1wbGUoZS5zZWxmVGltZSk7fQotaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1U2VsZkNvbXBpbGVGdWxsQ29kZSk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0od2FsbFNlbGZDb21waWxlRnVsbENvZGUpO30KLWZ1bmN0aW9uIGNvbXB1dGVDb21waWxlSWduaXRpb25NZXRyaWNzKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IGNwdVNlbGZDb21waWxlSWduaXRpb249bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9jb21waWxlX2lnbml0aW9uX2NwdV9zZWxmJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtjcHVTZWxmQ29tcGlsZUlnbml0aW9uLmRlc2NyaXB0aW9uPSdjcHUgc2VsZiB0aW1lIHNwZW50IGluIGNvbXBpbGUgaWduaXRpb24nO2NvbnN0IHdhbGxTZWxmQ29tcGlsZUlnbml0aW9uPW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfY29tcGlsZV9pZ25pdGlvbl93YWxsX3NlbGYnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO3dhbGxTZWxmQ29tcGlsZUlnbml0aW9uLmRlc2NyaXB0aW9uPSd3YWxsIHNlbGYgdGltZSBzcGVudCBpbiBjb21waWxlIGlnbml0aW9uJztmb3IoY29uc3QgZSBvZiBtb2RlbC5maW5kVG9wbW9zdFNsaWNlc05hbWVkKCdWOC5Db21waWxlSWduaXRpb24nKSl7Y3B1U2VsZkNvbXBpbGVJZ25pdGlvbi5hZGRTYW1wbGUoZS5jcHVTZWxmVGltZSk7d2FsbFNlbGZDb21waWxlSWduaXRpb24uYWRkU2FtcGxlKGUuc2VsZlRpbWUpO30KLWhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGNwdVNlbGZDb21waWxlSWduaXRpb24pO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHdhbGxTZWxmQ29tcGlsZUlnbml0aW9uKTt9Ci1mdW5jdGlvbiBjb21wdXRlUmVjb21waWxlTWV0cmljcyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBjcHVUb3RhbFJlY29tcGlsZVN5bmNocm9ub3VzPW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfcmVjb21waWxlX3N5bmNocm9ub3VzX2NwdV90b3RhbCcsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixDVVNUT01fQk9VTkRBUklFUyk7Y3B1VG90YWxSZWNvbXBpbGVTeW5jaHJvbm91cy5kZXNjcmlwdGlvbj0nY3B1IHRvdGFsIHRpbWUgc3BlbnQgaW4gc3luY2hyb25vdXMgcmVjb21waWxhdGlvbic7Y29uc3Qgd2FsbFRvdGFsUmVjb21waWxlU3luY2hyb25vdXM9bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9yZWNvbXBpbGVfc3luY2hyb25vdXNfd2FsbF90b3RhbCcsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixDVVNUT01fQk9VTkRBUklFUyk7d2FsbFRvdGFsUmVjb21waWxlU3luY2hyb25vdXMuZGVzY3JpcHRpb249J3dhbGwgdG90YWwgdGltZSBzcGVudCBpbiBzeW5jaHJvbm91cyByZWNvbXBpbGF0aW9uJztjb25zdCBjcHVUb3RhbFJlY29tcGlsZUNvbmN1cnJlbnQ9bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9yZWNvbXBpbGVfY29uY3VycmVudF9jcHVfdG90YWwnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO2NwdVRvdGFsUmVjb21waWxlQ29uY3VycmVudC5kZXNjcmlwdGlvbj0nY3B1IHRvdGFsIHRpbWUgc3BlbnQgaW4gY29uY3VycmVudCByZWNvbXBpbGF0aW9uJztjb25zdCB3YWxsVG90YWxSZWNvbXBpbGVDb25jdXJyZW50PW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfcmVjb21waWxlX2NvbmN1cnJlbnRfd2FsbF90b3RhbCcsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixDVVNUT01fQk9VTkRBUklFUyk7d2FsbFRvdGFsUmVjb21waWxlQ29uY3VycmVudC5kZXNjcmlwdGlvbj0nd2FsbCB0b3RhbCB0aW1lIHNwZW50IGluIGNvbmN1cnJlbnQgcmVjb21waWxhdGlvbic7Y29uc3QgY3B1VG90YWxSZWNvbXBpbGVPdmVyYWxsPW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfcmVjb21waWxlX292ZXJhbGxfY3B1X3RvdGFsJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtjcHVUb3RhbFJlY29tcGlsZU92ZXJhbGwuZGVzY3JpcHRpb249J2NwdSB0b3RhbCB0aW1lIHNwZW50IGluIHN5bmNocm9ub3VzIG9yIGNvbmN1cnJlbnQgcmVjb21waWxhdGlvbic7Y29uc3Qgd2FsbFRvdGFsUmVjb21waWxlT3ZlcmFsbD1uZXcgdHIudi5IaXN0b2dyYW0oJ3Y4X3JlY29tcGlsZV9vdmVyYWxsX3dhbGxfdG90YWwnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO3dhbGxUb3RhbFJlY29tcGlsZU92ZXJhbGwuZGVzY3JpcHRpb249J3dhbGwgdG90YWwgdGltZSBzcGVudCBpbiBzeW5jaHJvbm91cyBvciBjb25jdXJyZW50IHJlY29tcGlsYXRpb24nO2Zvcihjb25zdCBlIG9mIG1vZGVsLmZpbmRUb3Btb3N0U2xpY2VzTmFtZWQoJ1Y4LlJlY29tcGlsZVN5bmNocm9ub3VzJykpe2NwdVRvdGFsUmVjb21waWxlU3luY2hyb25vdXMuYWRkU2FtcGxlKGUuY3B1RHVyYXRpb24pO3dhbGxUb3RhbFJlY29tcGlsZVN5bmNocm9ub3VzLmFkZFNhbXBsZShlLmR1cmF0aW9uKTtjcHVUb3RhbFJlY29tcGlsZU92ZXJhbGwuYWRkU2FtcGxlKGUuY3B1RHVyYXRpb24pO3dhbGxUb3RhbFJlY29tcGlsZU92ZXJhbGwuYWRkU2FtcGxlKGUuZHVyYXRpb24pO30KLWhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGNwdVRvdGFsUmVjb21waWxlU3luY2hyb25vdXMpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHdhbGxUb3RhbFJlY29tcGlsZVN5bmNocm9ub3VzKTtmb3IoY29uc3QgZSBvZiBtb2RlbC5maW5kVG9wbW9zdFNsaWNlc05hbWVkKCdWOC5SZWNvbXBpbGVDb25jdXJyZW50Jykpe2NwdVRvdGFsUmVjb21waWxlQ29uY3VycmVudC5hZGRTYW1wbGUoZS5jcHVEdXJhdGlvbik7d2FsbFRvdGFsUmVjb21waWxlQ29uY3VycmVudC5hZGRTYW1wbGUoZS5kdXJhdGlvbik7Y3B1VG90YWxSZWNvbXBpbGVPdmVyYWxsLmFkZFNhbXBsZShlLmNwdUR1cmF0aW9uKTt3YWxsVG90YWxSZWNvbXBpbGVPdmVyYWxsLmFkZFNhbXBsZShlLmR1cmF0aW9uKTt9Ci1oaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShjcHVUb3RhbFJlY29tcGlsZUNvbmN1cnJlbnQpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHdhbGxUb3RhbFJlY29tcGlsZUNvbmN1cnJlbnQpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGNwdVRvdGFsUmVjb21waWxlT3ZlcmFsbCk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0od2FsbFRvdGFsUmVjb21waWxlT3ZlcmFsbCk7fQotZnVuY3Rpb24gY29tcHV0ZU9wdGltaXplQ29kZU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgY3B1VG90YWxPcHRpbWl6ZUNvZGU9bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9vcHRpbWl6ZV9jb2RlX2NwdV90b3RhbCcsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixDVVNUT01fQk9VTkRBUklFUyk7Y3B1VG90YWxPcHRpbWl6ZUNvZGUuZGVzY3JpcHRpb249J2NwdSB0b3RhbCB0aW1lIHNwZW50IGluIGNvZGUgb3B0aW1pemF0aW9uJztjb25zdCB3YWxsVG90YWxPcHRpbWl6ZUNvZGU9bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9vcHRpbWl6ZV9jb2RlX3dhbGxfdG90YWwnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO3dhbGxUb3RhbE9wdGltaXplQ29kZS5kZXNjcmlwdGlvbj0nd2FsbCB0b3RhbCB0aW1lIHNwZW50IGluIGNvZGUgb3B0aW1pemF0aW9uJztmb3IoY29uc3QgZSBvZiBtb2RlbC5maW5kVG9wbW9zdFNsaWNlc05hbWVkKCdWOC5PcHRpbWl6ZUNvZGUnKSl7Y3B1VG90YWxPcHRpbWl6ZUNvZGUuYWRkU2FtcGxlKGUuY3B1RHVyYXRpb24pO3dhbGxUb3RhbE9wdGltaXplQ29kZS5hZGRTYW1wbGUoZS5kdXJhdGlvbik7fQotaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1VG90YWxPcHRpbWl6ZUNvZGUpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHdhbGxUb3RhbE9wdGltaXplQ29kZSk7fQotZnVuY3Rpb24gY29tcHV0ZURlb3B0aW1pemVDb2RlTWV0cmljcyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBjcHVUb3RhbERlb3B0aW1pemVDb2RlPW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfZGVvcHRpbWl6ZV9jb2RlX2NwdV90b3RhbCcsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixDVVNUT01fQk9VTkRBUklFUyk7Y3B1VG90YWxEZW9wdGltaXplQ29kZS5kZXNjcmlwdGlvbj0nY3B1IHRvdGFsIHRpbWUgc3BlbnQgaW4gY29kZSBkZW9wdGltaXphdGlvbic7Y29uc3Qgd2FsbFRvdGFsRGVvcHRpbWl6ZUNvZGU9bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9kZW9wdGltaXplX2NvZGVfd2FsbF90b3RhbCcsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixDVVNUT01fQk9VTkRBUklFUyk7d2FsbFRvdGFsRGVvcHRpbWl6ZUNvZGUuZGVzY3JpcHRpb249J3dhbGwgdG90YWwgdGltZSBzcGVudCBpbiBjb2RlIGRlb3B0aW1pemF0aW9uJztmb3IoY29uc3QgZSBvZiBtb2RlbC5maW5kVG9wbW9zdFNsaWNlc05hbWVkKCdWOC5EZW9wdGltaXplQ29kZScpKXtjcHVUb3RhbERlb3B0aW1pemVDb2RlLmFkZFNhbXBsZShlLmNwdUR1cmF0aW9uKTt3YWxsVG90YWxEZW9wdGltaXplQ29kZS5hZGRTYW1wbGUoZS5kdXJhdGlvbik7fQotaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1VG90YWxEZW9wdGltaXplQ29kZSk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0od2FsbFRvdGFsRGVvcHRpbWl6ZUNvZGUpO30KLWZ1bmN0aW9uIGV4ZWN1dGlvbk1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb21wdXRlRXhlY3V0ZU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCk7Y29tcHV0ZVBhcnNlTGF6eU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCk7Y29tcHV0ZUNvbXBpbGVJZ25pdGlvbk1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCk7Y29tcHV0ZUNvbXBpbGVGdWxsQ29kZU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCk7Y29tcHV0ZVJlY29tcGlsZU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCk7Y29tcHV0ZU9wdGltaXplQ29kZU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCk7Y29tcHV0ZURlb3B0aW1pemVDb2RlTWV0cmljcyhoaXN0b2dyYW1zLG1vZGVsKTt9Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKGV4ZWN1dGlvbk1ldHJpYyk7cmV0dXJue2V4ZWN1dGlvbk1ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy52OCcsZnVuY3Rpb24oKXtjb25zdCBUQVJHRVRfRlBTPTYwO2NvbnN0IE1TX1BFUl9TRUNPTkQ9MTAwMDtjb25zdCBXSU5ET1dfU0laRV9NUz1NU19QRVJfU0VDT05EL1RBUkdFVF9GUFM7ZnVuY3Rpb24gZ2NNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7YWRkRHVyYXRpb25PZlRvcEV2ZW50cyhoaXN0b2dyYW1zLG1vZGVsKTthZGRUb3RhbER1cmF0aW9uT2ZUb3BFdmVudHMoaGlzdG9ncmFtcyxtb2RlbCk7YWRkRHVyYXRpb25PZlN1YkV2ZW50cyhoaXN0b2dyYW1zLG1vZGVsKTthZGRQZXJjZW50YWdlSW5WOEV4ZWN1dGVPZlRvcEV2ZW50cyhoaXN0b2dyYW1zLG1vZGVsKTthZGRUb3RhbFBlcmNlbnRhZ2VJblY4RXhlY3V0ZShoaXN0b2dyYW1zLG1vZGVsKTt9Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKGdjTWV0cmljKTtjb25zdCB0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyO2NvbnN0IHBlcmNlbnRhZ2VfYmlnZ2VySXNCZXR0ZXI9dHIuYi5Vbml0LmJ5TmFtZS5ub3JtYWxpemVkUGVyY2VudGFnZV9iaWdnZXJJc0JldHRlcjtjb25zdCBwZXJjZW50YWdlX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLm5vcm1hbGl6ZWRQZXJjZW50YWdlX3NtYWxsZXJJc0JldHRlcjtjb25zdCBDVVNUT01fQk9VTkRBUklFUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDAsMjAsMjAwKS5hZGRFeHBvbmVudGlhbEJpbnMoMjAwLDEwMCk7ZnVuY3Rpb24gY3JlYXRlTnVtZXJpY0ZvclRvcEV2ZW50VGltZShuYW1lKXtjb25zdCBuPW5ldyB0ci52Lkhpc3RvZ3JhbShuYW1lLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtuLmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHthdmc6dHJ1ZSxjb3VudDp0cnVlLG1heDp0cnVlLG1pbjpmYWxzZSxzdGQ6dHJ1ZSxzdW06dHJ1ZSxwZXJjZW50aWxlOlswLjkwXX0pO3JldHVybiBuO30KLWZ1bmN0aW9uIGNyZWF0ZU51bWVyaWNGb3JTdWJFdmVudFRpbWUobmFtZSl7Y29uc3Qgbj1uZXcgdHIudi5IaXN0b2dyYW0obmFtZSx0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixDVVNUT01fQk9VTkRBUklFUyk7bi5jdXN0b21pemVTdW1tYXJ5T3B0aW9ucyh7YXZnOnRydWUsY291bnQ6ZmFsc2UsbWF4OnRydWUsbWluOmZhbHNlLHN0ZDpmYWxzZSxzdW06ZmFsc2UscGVyY2VudGlsZTpbMC45MF19KTtyZXR1cm4gbjt9Ci1mdW5jdGlvbiBjcmVhdGVOdW1lcmljRm9ySWRsZVRpbWUobmFtZSl7Y29uc3Qgbj1uZXcgdHIudi5IaXN0b2dyYW0obmFtZSx0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixDVVNUT01fQk9VTkRBUklFUyk7bi5jdXN0b21pemVTdW1tYXJ5T3B0aW9ucyh7YXZnOnRydWUsY291bnQ6ZmFsc2UsbWF4OnRydWUsbWluOmZhbHNlLHN0ZDpmYWxzZSxzdW06dHJ1ZSxwZXJjZW50aWxlOltdfSk7cmV0dXJuIG47fQotZnVuY3Rpb24gY3JlYXRlUGVyY2VudGFnZShuYW1lLG51bWVyYXRvcixkZW5vbWluYXRvcix1bml0KXtjb25zdCBoaXN0PW5ldyB0ci52Lkhpc3RvZ3JhbShuYW1lLHVuaXQpO2lmKGRlbm9taW5hdG9yPT09MCl7aGlzdC5hZGRTYW1wbGUoMCk7fWVsc2V7aGlzdC5hZGRTYW1wbGUobnVtZXJhdG9yL2Rlbm9taW5hdG9yKTt9Ci1oaXN0LmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHthdmc6dHJ1ZSxjb3VudDpmYWxzZSxtYXg6ZmFsc2UsbWluOmZhbHNlLHN0ZDpmYWxzZSxzdW06ZmFsc2UscGVyY2VudGlsZTpbXX0pO3JldHVybiBoaXN0O30KLWZ1bmN0aW9uIGlzTm90Rm9yY2VkVG9wR2FyYmFnZUNvbGxlY3Rpb25FdmVudChldmVudCl7cmV0dXJuIHRyLm1ldHJpY3MudjgudXRpbHMuaXNUb3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KSYmIXRyLm1ldHJpY3MudjgudXRpbHMuaXNGb3JjZWRHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KTt9Ci1mdW5jdGlvbiBpc05vdEZvcmNlZFN1YkdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQoZXZlbnQpe3JldHVybiB0ci5tZXRyaWNzLnY4LnV0aWxzLmlzU3ViR2FyYmFnZUNvbGxlY3Rpb25FdmVudChldmVudCkmJiF0ci5tZXRyaWNzLnY4LnV0aWxzLmlzRm9yY2VkR2FyYmFnZUNvbGxlY3Rpb25FdmVudChldmVudCk7fQotZnVuY3Rpb24gYWRkRHVyYXRpb25PZlRvcEV2ZW50cyhoaXN0b2dyYW1zLG1vZGVsKXt0ci5tZXRyaWNzLnY4LnV0aWxzLmdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCxpc05vdEZvcmNlZFRvcEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQsdHIubWV0cmljcy52OC51dGlscy50b3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZSxmdW5jdGlvbihuYW1lLGV2ZW50cyl7Y29uc3QgY3B1RHVyYXRpb249Y3JlYXRlTnVtZXJpY0ZvclRvcEV2ZW50VGltZShuYW1lKTtldmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7Y3B1RHVyYXRpb24uYWRkU2FtcGxlKGV2ZW50LmNwdUR1cmF0aW9uKTt9KTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShjcHVEdXJhdGlvbik7fSk7fQotZnVuY3Rpb24gYWRkVG90YWxEdXJhdGlvbk9mVG9wRXZlbnRzKGhpc3RvZ3JhbXMsbW9kZWwpe3RyLm1ldHJpY3MudjgudXRpbHMuZ3JvdXBBbmRQcm9jZXNzRXZlbnRzKG1vZGVsLGlzTm90Rm9yY2VkVG9wR2FyYmFnZUNvbGxlY3Rpb25FdmVudCxldmVudD0+J3Y4LWdjLXRvdGFsJyxmdW5jdGlvbihuYW1lLGV2ZW50cyl7Y29uc3QgY3B1RHVyYXRpb249Y3JlYXRlTnVtZXJpY0ZvclRvcEV2ZW50VGltZShuYW1lKTtldmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7Y3B1RHVyYXRpb24uYWRkU2FtcGxlKGV2ZW50LmNwdUR1cmF0aW9uKTt9KTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShjcHVEdXJhdGlvbik7fSk7fQotZnVuY3Rpb24gYWRkRHVyYXRpb25PZlN1YkV2ZW50cyhoaXN0b2dyYW1zLG1vZGVsKXt0ci5tZXRyaWNzLnY4LnV0aWxzLmdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCxpc05vdEZvcmNlZFN1YkdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQsdHIubWV0cmljcy52OC51dGlscy5zdWJHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZSxmdW5jdGlvbihuYW1lLGV2ZW50cyl7Y29uc3QgY3B1RHVyYXRpb249Y3JlYXRlTnVtZXJpY0ZvclN1YkV2ZW50VGltZShuYW1lKTtldmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7Y3B1RHVyYXRpb24uYWRkU2FtcGxlKGV2ZW50LmNwdUR1cmF0aW9uKTt9KTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShjcHVEdXJhdGlvbik7fSk7fQotZnVuY3Rpb24gYWRkUGVyY2VudGFnZUluVjhFeGVjdXRlT2ZUb3BFdmVudHMoaGlzdG9ncmFtcyxtb2RlbCl7dHIubWV0cmljcy52OC51dGlscy5ncm91cEFuZFByb2Nlc3NFdmVudHMobW9kZWwsaXNOb3RGb3JjZWRUb3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50LHRyLm1ldHJpY3MudjgudXRpbHMudG9wR2FyYmFnZUNvbGxlY3Rpb25FdmVudE5hbWUsZnVuY3Rpb24obmFtZSxldmVudHMpe2FkZFBlcmNlbnRhZ2VJblY4RXhlY3V0ZShoaXN0b2dyYW1zLG1vZGVsLG5hbWUsZXZlbnRzKTt9KTt9Ci1mdW5jdGlvbiBhZGRUb3RhbFBlcmNlbnRhZ2VJblY4RXhlY3V0ZShoaXN0b2dyYW1zLG1vZGVsKXt0ci5tZXRyaWNzLnY4LnV0aWxzLmdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCxpc05vdEZvcmNlZFRvcEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQsZXZlbnQ9Pid2OC1nYy10b3RhbCcsZnVuY3Rpb24obmFtZSxldmVudHMpe2FkZFBlcmNlbnRhZ2VJblY4RXhlY3V0ZShoaXN0b2dyYW1zLG1vZGVsLG5hbWUsZXZlbnRzKTt9KTt9Ci1mdW5jdGlvbiBhZGRQZXJjZW50YWdlSW5WOEV4ZWN1dGUoaGlzdG9ncmFtcyxtb2RlbCxuYW1lLGV2ZW50cyl7bGV0IGNwdUR1cmF0aW9uSW5WOEV4ZWN1dGU9MDtsZXQgY3B1RHVyYXRpb25Ub3RhbD0wO2V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtjb25zdCB2OEV4ZWN1dGU9dHIubWV0cmljcy52OC51dGlscy5maW5kUGFyZW50KGV2ZW50LHRyLm1ldHJpY3MudjgudXRpbHMuaXNWOEV4ZWN1dGVFdmVudCk7aWYodjhFeGVjdXRlKXtjcHVEdXJhdGlvbkluVjhFeGVjdXRlKz1ldmVudC5jcHVEdXJhdGlvbjt9Ci1jcHVEdXJhdGlvblRvdGFsKz1ldmVudC5jcHVEdXJhdGlvbjt9KTtjb25zdCBwZXJjZW50YWdlPWNyZWF0ZVBlcmNlbnRhZ2UobmFtZSsnX3BlcmNlbnRhZ2VfaW5fdjhfZXhlY3V0ZScsY3B1RHVyYXRpb25JblY4RXhlY3V0ZSxjcHVEdXJhdGlvblRvdGFsLHBlcmNlbnRhZ2Vfc21hbGxlcklzQmV0dGVyKTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShwZXJjZW50YWdlKTt9Ci1yZXR1cm57Z2NNZXRyaWMsV0lORE9XX1NJWkVfTVMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MudjgnLGZ1bmN0aW9uKCl7Y29uc3QgQ09VTlRfQ1VTVE9NX0JPVU5EQVJJRVM9dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUV4cG9uZW50aWFsKDEsMTAwMDAwMCw1MCk7Y29uc3QgRFVSQVRJT05fQ1VTVE9NX0JPVU5EQVJJRVM9dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUV4cG9uZW50aWFsKDAuMSwxMDAwMCw1MCk7Y29uc3QgU1VNTUFSWV9PUFRJT05TPXtzdGQ6ZmFsc2UsY291bnQ6ZmFsc2Usc3VtOmZhbHNlLG1pbjpmYWxzZSxtYXg6ZmFsc2UsfTtmdW5jdGlvbiBjb21wdXRlRG9tQ29udGVudExvYWRlZFRpbWVfKG1vZGVsKXtjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7bGV0IGRvbUNvbnRlbnRMb2FkZWRUaW1lPTA7Zm9yKGNvbnN0IHJlbmRlcmVySGVscGVyIG9mIE9iamVjdC52YWx1ZXMoY2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVycykpe2Zvcihjb25zdCBldiBvZiByZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLnNsaWNlR3JvdXAuY2hpbGRFdmVudHMoKSl7aWYoZXYudGl0bGU9PT0nZG9tQ29udGVudExvYWRlZEV2ZW50RW5kJyYmZXYuc3RhcnQ+ZG9tQ29udGVudExvYWRlZFRpbWUpe2RvbUNvbnRlbnRMb2FkZWRUaW1lPWV2LnN0YXJ0O319fQotcmV0dXJuIGRvbUNvbnRlbnRMb2FkZWRUaW1lO30KLWZ1bmN0aW9uIGNvbXB1dGVJbnRlcmFjdGl2ZVRpbWVfKG1vZGVsKXtjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7bGV0IGludGVyYWN0aXZlVGltZT0wO2Zvcihjb25zdCByZW5kZXJlckhlbHBlciBvZiBPYmplY3QudmFsdWVzKGNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnMpKXtjb25zdCBzYW1wbGVzPXRyLm1ldHJpY3Muc2guY29sbGVjdExvYWRpbmdNZXRyaWNzRm9yUmVuZGVyZXIocmVuZGVyZXJIZWxwZXIpLmludGVyYWN0aXZlU2FtcGxlcztpZihzYW1wbGVzLmxlbmd0aD09PTApY29udGludWU7aWYoaW50ZXJhY3RpdmVUaW1lIT09MCl0aHJvdyBuZXcgRXJyb3IoJ1RvbyBtYW55IG5hdmlnYXRpb25zJyk7Y29uc3QgZGlhZ25vc3RpY3M9dHIuYi5nZXRPbmx5RWxlbWVudChzYW1wbGVzKS5kaWFnbm9zdGljcztpbnRlcmFjdGl2ZVRpbWU9dHIuYi5nZXRPbmx5RWxlbWVudChkaWFnbm9zdGljcy5nZXQoJ05hdmlnYXRpb24gaW5mb3MnKSkuZXZlbnRUaW1lc3RhbXA7fQotcmV0dXJuIGludGVyYWN0aXZlVGltZTt9Ci1mdW5jdGlvbiBjb252ZXJ0TWljcm9Ub01pbGxpXyh0aW1lKXtyZXR1cm4gdHIuYi5jb252ZXJ0VW5pdCh0aW1lLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUNSTyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEkpO30KLWZ1bmN0aW9uIGNvbXB1dGVSdW50aW1lU3RhdHMoaGlzdG9ncmFtcyxzbGljZXMpe2NvbnN0IHJ1bnRpbWVHcm91cENvbGxlY3Rpb249bmV3IHRyLmUudjguUnVudGltZVN0YXRzR3JvdXBDb2xsZWN0aW9uKCk7cnVudGltZUdyb3VwQ29sbGVjdGlvbi5hZGRTbGljZXMoc2xpY2VzKTtmdW5jdGlvbiBhZGRIaXN0b2dyYW1zRm9yUnVudGltZUdyb3VwKHJ1bnRpbWVHcm91cCxvcHRSZWxhdGVkTmFtZU1hcHMpe2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGAke3J1bnRpbWVHcm91cC5uYW1lfTpkdXJhdGlvbmAsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcix7dmFsdWU6Y29udmVydE1pY3JvVG9NaWxsaV8ocnVudGltZUdyb3VwLnRpbWUpLGRpYWdub3N0aWNzOm9wdFJlbGF0ZWROYW1lTWFwcz97c2FtcGxlczpvcHRSZWxhdGVkTmFtZU1hcHMuZHVyYXRpb25CcmVha2Rvd259Ont9fSx7YmluQm91bmRhcmllczpEVVJBVElPTl9DVVNUT01fQk9VTkRBUklFUyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsZGlhZ25vc3RpY3M6b3B0UmVsYXRlZE5hbWVNYXBzP3tzYW1wbGVzOm9wdFJlbGF0ZWROYW1lTWFwcy5kdXJhdGlvbk5hbWVzfTp7fX0pO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGAke3J1bnRpbWVHcm91cC5uYW1lfTpjb3VudGAsdHIuYi5Vbml0LmJ5TmFtZS5jb3VudF9zbWFsbGVySXNCZXR0ZXIse3ZhbHVlOnJ1bnRpbWVHcm91cC5jb3VudCxkaWFnbm9zdGljczpvcHRSZWxhdGVkTmFtZU1hcHM/e3NhbXBsZXM6b3B0UmVsYXRlZE5hbWVNYXBzLmNvdW50QnJlYWtkb3dufTp7fX0se2JpbkJvdW5kYXJpZXM6Q09VTlRfQ1VTVE9NX0JPVU5EQVJJRVMsc3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLGRpYWdub3N0aWNzOm9wdFJlbGF0ZWROYW1lTWFwcz97c2FtcGxlczpvcHRSZWxhdGVkTmFtZU1hcHMuY291bnROYW1lc306e319KTt9Ci1mdW5jdGlvbiBhZGREZXRhaWxlZEhpc3RvZ3JhbXNGb3JSdW50aW1lR3JvdXAocnVudGltZUdyb3VwKXtjb25zdCBkdXJhdGlvbk5hbWVzPW5ldyB0ci52LmQuUmVsYXRlZE5hbWVNYXAoKTtjb25zdCBkdXJhdGlvbkJyZWFrZG93bj1uZXcgdHIudi5kLkJyZWFrZG93bigpO2NvbnN0IGNvdW50TmFtZXM9bmV3IHRyLnYuZC5SZWxhdGVkTmFtZU1hcCgpO2NvbnN0IGNvdW50QnJlYWtkb3duPW5ldyB0ci52LmQuQnJlYWtkb3duKCk7Zm9yKGNvbnN0IGVudHJ5IG9mIHJ1bnRpbWVHcm91cC52YWx1ZXMpe2NvbnN0IGR1cmF0aW9uU2FtcGxlSGlzdG9ncmFtPWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGAke2VudHJ5Lm5hbWV9OmR1cmF0aW9uYCx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLGNvbnZlcnRNaWNyb1RvTWlsbGlfKGVudHJ5LnRpbWUpLHtiaW5Cb3VuZGFyaWVzOkRVUkFUSU9OX0NVU1RPTV9CT1VOREFSSUVTLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtkdXJhdGlvbk5hbWVzLnNldChlbnRyeS5uYW1lLGR1cmF0aW9uU2FtcGxlSGlzdG9ncmFtLm5hbWUpO2R1cmF0aW9uQnJlYWtkb3duLnNldChlbnRyeS5uYW1lLGNvbnZlcnRNaWNyb1RvTWlsbGlfKGVudHJ5LnRpbWUpKTtjb25zdCBjb3VudFNhbXBsZUhpc3RvZ3JhbT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShgJHtlbnRyeS5uYW1lfTpjb3VudGAsdHIuYi5Vbml0LmJ5TmFtZS5jb3VudF9zbWFsbGVySXNCZXR0ZXIsZW50cnkuY291bnQse2JpbkJvdW5kYXJpZXM6Q09VTlRfQ1VTVE9NX0JPVU5EQVJJRVMsc3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO2NvdW50TmFtZXMuc2V0KGVudHJ5Lm5hbWUsY291bnRTYW1wbGVIaXN0b2dyYW0ubmFtZSk7Y291bnRCcmVha2Rvd24uc2V0KGVudHJ5Lm5hbWUsZW50cnkuY291bnQpO30KLWFkZEhpc3RvZ3JhbXNGb3JSdW50aW1lR3JvdXAocnVudGltZUdyb3VwLHtkdXJhdGlvbk5hbWVzLGR1cmF0aW9uQnJlYWtkb3duLGNvdW50TmFtZXMsY291bnRCcmVha2Rvd259KTt9Ci1mb3IoY29uc3QgcnVudGltZUdyb3VwIG9mIHJ1bnRpbWVHcm91cENvbGxlY3Rpb24ucnVudGltZUdyb3Vwcyl7YWRkSGlzdG9ncmFtc0ZvclJ1bnRpbWVHcm91cChydW50aW1lR3JvdXApO30KLWNvbnN0IGJsaW5rR3JvdXBDb2xsZWN0aW9uPXJ1bnRpbWVHcm91cENvbGxlY3Rpb24uYmxpbmtSQ1NHcm91cENvbGxlY3Rpb247aWYoYmxpbmtHcm91cENvbGxlY3Rpb24udG90YWxUaW1lPjApe2JsaW5rR3JvdXBDb2xsZWN0aW9uLnJ1bnRpbWVHcm91cHMuZm9yRWFjaChhZGREZXRhaWxlZEhpc3RvZ3JhbXNGb3JSdW50aW1lR3JvdXApO319Ci1mdW5jdGlvbiBydW50aW1lU3RhdHNNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgaW50ZXJhY3RpdmVUaW1lPWNvbXB1dGVJbnRlcmFjdGl2ZVRpbWVfKG1vZGVsKTtjb25zdCBkb21Db250ZW50TG9hZGVkVGltZT1jb21wdXRlRG9tQ29udGVudExvYWRlZFRpbWVfKG1vZGVsKTtjb25zdCBlbmRUaW1lPU1hdGgubWF4KGludGVyYWN0aXZlVGltZSxkb21Db250ZW50TG9hZGVkVGltZSk7Y29uc3Qgc2xpY2VzPVsuLi5tb2RlbC5nZXREZXNjZW5kYW50RXZlbnRzKCldLmZpbHRlcihldmVudD0+ZXZlbnQgaW5zdGFuY2VvZiB0ci5lLnY4LlY4VGhyZWFkU2xpY2UmJmV2ZW50LnN0YXJ0PD1lbmRUaW1lKTtjb21wdXRlUnVudGltZVN0YXRzKGhpc3RvZ3JhbXMsc2xpY2VzKTt9Ci1mdW5jdGlvbiBhZGREdXJhdGlvbkhpc3RvZ3JhbShyYWlsU3RhZ2VOYW1lLHJ1bnRpbWVHcm91cE5hbWUsc2FtcGxlVmFsdWUsaGlzdG9ncmFtcyxkdXJhdGlvblJlbGF0ZWRIaXN0c0J5R3JvdXBOYW1lKXtjb25zdCBkdXJhdGlvbkhpc3RvZ3JhbT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShgJHtyYWlsU3RhZ2VOYW1lfV8ke3J1bnRpbWVHcm91cE5hbWV9OmR1cmF0aW9uYCx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLGNvbnZlcnRNaWNyb1RvTWlsbGlfKHNhbXBsZVZhbHVlKSx7YmluQm91bmRhcmllczpEVVJBVElPTl9DVVNUT01fQk9VTkRBUklFUyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7aWYoZHVyYXRpb25SZWxhdGVkSGlzdHNCeUdyb3VwTmFtZS5nZXQocnVudGltZUdyb3VwTmFtZSk9PT11bmRlZmluZWQpe2NvbnN0IGR1cmF0aW9uSGlzdG9ncmFtTWFwPW5ldyB0ci52LmQuUmVsYXRlZEhpc3RvZ3JhbU1hcCgpO2R1cmF0aW9uSGlzdG9ncmFtTWFwLnNldChyYWlsU3RhZ2VOYW1lLGR1cmF0aW9uSGlzdG9ncmFtKTtkdXJhdGlvblJlbGF0ZWRIaXN0c0J5R3JvdXBOYW1lLnNldChydW50aW1lR3JvdXBOYW1lLGR1cmF0aW9uSGlzdG9ncmFtTWFwKTt9ZWxzZXtkdXJhdGlvblJlbGF0ZWRIaXN0c0J5R3JvdXBOYW1lLmdldChydW50aW1lR3JvdXBOYW1lKS5zZXQocmFpbFN0YWdlTmFtZSxkdXJhdGlvbkhpc3RvZ3JhbSk7fX0KLWZ1bmN0aW9uIGFkZENvdW50SGlzdG9ncmFtKHJhaWxTdGFnZU5hbWUscnVudGltZUdyb3VwTmFtZSxzYW1wbGVWYWx1ZSxoaXN0b2dyYW1zLGNvdW50UmVsYXRlZEhpc3RzQnlHcm91cE5hbWUpe2NvbnN0IGNvdW50SGlzdG9ncmFtPWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGAke3JhaWxTdGFnZU5hbWV9XyR7cnVudGltZUdyb3VwTmFtZX06Y291bnRgLHRyLmIuVW5pdC5ieU5hbWUuY291bnRfc21hbGxlcklzQmV0dGVyLHNhbXBsZVZhbHVlLHtiaW5Cb3VuZGFyaWVzOkNPVU5UX0NVU1RPTV9CT1VOREFSSUVTLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtpZihjb3VudFJlbGF0ZWRIaXN0c0J5R3JvdXBOYW1lLmdldChydW50aW1lR3JvdXBOYW1lKT09PXVuZGVmaW5lZCl7Y29uc3QgY291bnRIaXN0b2dyYW1NYXA9bmV3IHRyLnYuZC5SZWxhdGVkSGlzdG9ncmFtTWFwKCk7Y291bnRIaXN0b2dyYW1NYXAuc2V0KHJhaWxTdGFnZU5hbWUsY291bnRIaXN0b2dyYW0pO2NvdW50UmVsYXRlZEhpc3RzQnlHcm91cE5hbWUuc2V0KHJ1bnRpbWVHcm91cE5hbWUsY291bnRIaXN0b2dyYW1NYXApO31lbHNle2NvdW50UmVsYXRlZEhpc3RzQnlHcm91cE5hbWUuZ2V0KHJ1bnRpbWVHcm91cE5hbWUpLnNldChyYWlsU3RhZ2VOYW1lLGNvdW50SGlzdG9ncmFtKTt9fQotZnVuY3Rpb24gYWRkVG90YWxEdXJhdGlvbkhpc3RvZ3JhbShoaXN0b2dyYW1OYW1lLHRpbWUsaGlzdG9ncmFtcyxkdXJhdGlvblJlbGF0ZWRIaXN0c0J5R3JvdXBOYW1lKXtjb25zdCBkdXJhdGlvbkhpc3RvZ3JhbT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShgJHtoaXN0b2dyYW1OYW1lfTpkdXJhdGlvbmAsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixjb252ZXJ0TWljcm9Ub01pbGxpXyh0aW1lKSx7YmluQm91bmRhcmllczpEVVJBVElPTl9DVVNUT01fQk9VTkRBUklFUyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7Y29uc3QgZHVyYXRpb25SZWxhdGVkSGlzdG9ncmFtPWR1cmF0aW9uUmVsYXRlZEhpc3RzQnlHcm91cE5hbWUuZ2V0KGhpc3RvZ3JhbU5hbWUpO2lmKGR1cmF0aW9uUmVsYXRlZEhpc3RvZ3JhbSE9PXVuZGVmaW5lZCl7ZHVyYXRpb25IaXN0b2dyYW0uZGlhZ25vc3RpY3Muc2V0KCdSQUlMIHN0YWdlcycsZHVyYXRpb25SZWxhdGVkSGlzdG9ncmFtKTt9fQotZnVuY3Rpb24gYWRkVG90YWxDb3VudEhpc3RvZ3JhbShoaXN0b2dyYW1OYW1lLGNvdW50LGhpc3RvZ3JhbXMsY291bnRSZWxhdGVkSGlzdHNCeUdyb3VwTmFtZSl7Y29uc3QgY291bnRIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oYCR7aGlzdG9ncmFtTmFtZX06Y291bnRgLHRyLmIuVW5pdC5ieU5hbWUuY291bnRfc21hbGxlcklzQmV0dGVyLGNvdW50LHtiaW5Cb3VuZGFyaWVzOkNPVU5UX0NVU1RPTV9CT1VOREFSSUVTLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtjb25zdCBjb3VudFJlbGF0ZWRIaXN0b2dyYW09Y291bnRSZWxhdGVkSGlzdHNCeUdyb3VwTmFtZS5nZXQoaGlzdG9ncmFtTmFtZSk7aWYoY291bnRSZWxhdGVkSGlzdG9ncmFtIT09dW5kZWZpbmVkKXtjb3VudEhpc3RvZ3JhbS5kaWFnbm9zdGljcy5zZXQoJ1JBSUwgc3RhZ2VzJyxjb3VudFJlbGF0ZWRIaXN0b2dyYW0pO319Ci1mdW5jdGlvbiBjb21wdXRlUnVudGltZVN0YXRzQnVja2V0T25VRShoaXN0b2dyYW1zLHNsaWNlcyx2OFNsaWNlc0J1Y2tldE9uVUVNYXApe2NvbnN0IGR1cmF0aW9uUmVsYXRlZEhpc3RzQnlHcm91cE5hbWU9bmV3IE1hcCgpO2NvbnN0IGNvdW50UmVsYXRlZEhpc3RzQnlHcm91cE5hbWU9bmV3IE1hcCgpO2Zvcihjb25zdFtuYW1lLHNsaWNlc1VFXW9mIHY4U2xpY2VzQnVja2V0T25VRU1hcCl7Y29uc3QgcnVudGltZUdyb3VwQ29sbGVjdGlvbj1uZXcgdHIuZS52OC5SdW50aW1lU3RhdHNHcm91cENvbGxlY3Rpb24oKTtydW50aW1lR3JvdXBDb2xsZWN0aW9uLmFkZFNsaWNlcyhzbGljZXNVRSk7bGV0IG92ZXJhbGxWOFRpbWU9cnVudGltZUdyb3VwQ29sbGVjdGlvbi50b3RhbFRpbWU7bGV0IG92ZXJhbGxWOENvdW50PXJ1bnRpbWVHcm91cENvbGxlY3Rpb24udG90YWxDb3VudDtmb3IoY29uc3QgcnVudGltZUdyb3VwIG9mIHJ1bnRpbWVHcm91cENvbGxlY3Rpb24ucnVudGltZUdyb3Vwcyl7YWRkRHVyYXRpb25IaXN0b2dyYW0obmFtZSxydW50aW1lR3JvdXAubmFtZSxydW50aW1lR3JvdXAudGltZSxoaXN0b2dyYW1zLGR1cmF0aW9uUmVsYXRlZEhpc3RzQnlHcm91cE5hbWUpO2lmKHJ1bnRpbWVHcm91cC5uYW1lPT09J0JsaW5rIEMrKycpe292ZXJhbGxWOFRpbWUtPXJ1bnRpbWVHcm91cC50aW1lO30KLWFkZENvdW50SGlzdG9ncmFtKG5hbWUscnVudGltZUdyb3VwLm5hbWUscnVudGltZUdyb3VwLmNvdW50LGhpc3RvZ3JhbXMsY291bnRSZWxhdGVkSGlzdHNCeUdyb3VwTmFtZSk7aWYocnVudGltZUdyb3VwLm5hbWU9PT0nQmxpbmsgQysrJyl7b3ZlcmFsbFY4Q291bnQtPXJ1bnRpbWVHcm91cC5jb3VudDt9fQotaWYocnVudGltZUdyb3VwQ29sbGVjdGlvbi5ibGlua1JDU0dyb3VwQ29sbGVjdGlvbi50b3RhbFRpbWU+MCl7Y29uc3QgYmxpbmtSQ1NHcm91cENvbGxlY3Rpb249cnVudGltZUdyb3VwQ29sbGVjdGlvbi5ibGlua1JDU0dyb3VwQ29sbGVjdGlvbjtmb3IoY29uc3QgZ3JvdXAgb2YgYmxpbmtSQ1NHcm91cENvbGxlY3Rpb24ucnVudGltZUdyb3Vwcyl7YWRkRHVyYXRpb25IaXN0b2dyYW0obmFtZSxncm91cC5uYW1lLGdyb3VwLnRpbWUsaGlzdG9ncmFtcyxkdXJhdGlvblJlbGF0ZWRIaXN0c0J5R3JvdXBOYW1lKTthZGRDb3VudEhpc3RvZ3JhbShuYW1lLGdyb3VwLm5hbWUsZ3JvdXAuY291bnQsaGlzdG9ncmFtcyxjb3VudFJlbGF0ZWRIaXN0c0J5R3JvdXBOYW1lKTt9fQotYWRkRHVyYXRpb25IaXN0b2dyYW0obmFtZSwnVjgtT25seScsb3ZlcmFsbFY4VGltZSxoaXN0b2dyYW1zLGR1cmF0aW9uUmVsYXRlZEhpc3RzQnlHcm91cE5hbWUpO2FkZENvdW50SGlzdG9ncmFtKG5hbWUsJ1Y4LU9ubHknLG92ZXJhbGxWOENvdW50LGhpc3RvZ3JhbXMsY291bnRSZWxhdGVkSGlzdHNCeUdyb3VwTmFtZSk7fQotY29uc3QgcnVudGltZUdyb3VwQ29sbGVjdGlvbj1uZXcgdHIuZS52OC5SdW50aW1lU3RhdHNHcm91cENvbGxlY3Rpb24oKTtydW50aW1lR3JvdXBDb2xsZWN0aW9uLmFkZFNsaWNlcyhzbGljZXMpO2xldCBvdmVyYWxsVjhUaW1lPXJ1bnRpbWVHcm91cENvbGxlY3Rpb24udG90YWxUaW1lO2xldCBvdmVyYWxsVjhDb3VudD1ydW50aW1lR3JvdXBDb2xsZWN0aW9uLnRvdGFsQ291bnQ7Zm9yKGNvbnN0IHJ1bnRpbWVHcm91cCBvZiBydW50aW1lR3JvdXBDb2xsZWN0aW9uLnJ1bnRpbWVHcm91cHMpe2FkZFRvdGFsRHVyYXRpb25IaXN0b2dyYW0ocnVudGltZUdyb3VwLm5hbWUscnVudGltZUdyb3VwLnRpbWUsaGlzdG9ncmFtcyxkdXJhdGlvblJlbGF0ZWRIaXN0c0J5R3JvdXBOYW1lKTtpZihydW50aW1lR3JvdXAubmFtZT09PSdCbGluayBDKysnKXtvdmVyYWxsVjhUaW1lLT1ydW50aW1lR3JvdXAudGltZTt9Ci1hZGRUb3RhbENvdW50SGlzdG9ncmFtKHJ1bnRpbWVHcm91cC5uYW1lLHJ1bnRpbWVHcm91cC5jb3VudCxoaXN0b2dyYW1zLGNvdW50UmVsYXRlZEhpc3RzQnlHcm91cE5hbWUpO2lmKHJ1bnRpbWVHcm91cC5uYW1lPT09J0JsaW5rIEMrKycpe292ZXJhbGxWOENvdW50LT1ydW50aW1lR3JvdXAuY291bnQ7fX0KLWlmKHJ1bnRpbWVHcm91cENvbGxlY3Rpb24uYmxpbmtSQ1NHcm91cENvbGxlY3Rpb24udG90YWxUaW1lPjApe2NvbnN0IGJsaW5rUkNTR3JvdXBDb2xsZWN0aW9uPXJ1bnRpbWVHcm91cENvbGxlY3Rpb24uYmxpbmtSQ1NHcm91cENvbGxlY3Rpb247Zm9yKGNvbnN0IGdyb3VwIG9mIGJsaW5rUkNTR3JvdXBDb2xsZWN0aW9uLnJ1bnRpbWVHcm91cHMpe2FkZFRvdGFsRHVyYXRpb25IaXN0b2dyYW0oZ3JvdXAubmFtZSxncm91cC50aW1lLGhpc3RvZ3JhbXMsZHVyYXRpb25SZWxhdGVkSGlzdHNCeUdyb3VwTmFtZSk7YWRkVG90YWxDb3VudEhpc3RvZ3JhbShncm91cC5uYW1lLGdyb3VwLmNvdW50LGhpc3RvZ3JhbXMsY291bnRSZWxhdGVkSGlzdHNCeUdyb3VwTmFtZSk7fX0KLWFkZFRvdGFsRHVyYXRpb25IaXN0b2dyYW0oJ1Y4LU9ubHknLG92ZXJhbGxWOFRpbWUsaGlzdG9ncmFtcyxkdXJhdGlvblJlbGF0ZWRIaXN0c0J5R3JvdXBOYW1lKTthZGRUb3RhbENvdW50SGlzdG9ncmFtKCdWOC1Pbmx5JyxvdmVyYWxsVjhDb3VudCxoaXN0b2dyYW1zLGNvdW50UmVsYXRlZEhpc3RzQnlHcm91cE5hbWUpO30KLWZ1bmN0aW9uIHJ1bnRpbWVTdGF0c1RvdGFsTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IHY4VGhyZWFkU2xpY2VzPVsuLi5tb2RlbC5nZXREZXNjZW5kYW50RXZlbnRzKCldLmZpbHRlcihldmVudD0+ZXZlbnQgaW5zdGFuY2VvZiB0ci5lLnY4LlY4VGhyZWFkU2xpY2UpLnNvcnQoKGUxLGUyKT0+ZTEuc3RhcnQtZTIuc3RhcnQpO2NvbnN0IHY4U2xpY2VzQnVja2V0T25VRU1hcD1uZXcgTWFwKCk7Zm9yKGNvbnN0IGV4cGVjdGF0aW9uIG9mIG1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnMpe2NvbnN0IHNsaWNlcz1leHBlY3RhdGlvbi5yYW5nZS5maWx0ZXJBcnJheSh2OFRocmVhZFNsaWNlcyxldmVudD0+ZXZlbnQuc3RhcnQpO2lmKHNsaWNlcy5sZW5ndGg9PT0wKWNvbnRpbnVlO2NvbnN0IGxhc3RTbGljZT1zbGljZXNbc2xpY2VzLmxlbmd0aC0xXTtpZighZXhwZWN0YXRpb24ucmFuZ2UuaW50ZXJzZWN0c1JhbmdlRXhjbHVzaXZlKGxhc3RTbGljZS5yYW5nZSkpe3NsaWNlcy5wb3AoKTt9Ci1pZih2OFNsaWNlc0J1Y2tldE9uVUVNYXAuZ2V0KGV4cGVjdGF0aW9uLnN0YWdlVGl0bGUpPT09dW5kZWZpbmVkKXt2OFNsaWNlc0J1Y2tldE9uVUVNYXAuc2V0KGV4cGVjdGF0aW9uLnN0YWdlVGl0bGUsc2xpY2VzKTt9ZWxzZXtjb25zdCB0b3RhbFNsaWNlcz12OFNsaWNlc0J1Y2tldE9uVUVNYXAuZ2V0KGV4cGVjdGF0aW9uLnN0YWdlVGl0bGUpLmNvbmNhdChzbGljZXMpO3Y4U2xpY2VzQnVja2V0T25VRU1hcC5zZXQoZXhwZWN0YXRpb24uc3RhZ2VUaXRsZSx0b3RhbFNsaWNlcyk7fX0KLWNvbXB1dGVSdW50aW1lU3RhdHNCdWNrZXRPblVFKGhpc3RvZ3JhbXMsdjhUaHJlYWRTbGljZXMsdjhTbGljZXNCdWNrZXRPblVFTWFwKTt9Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHJ1bnRpbWVTdGF0c1RvdGFsTWV0cmljKTt0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHJ1bnRpbWVTdGF0c01ldHJpYyk7cmV0dXJue3J1bnRpbWVTdGF0c01ldHJpYyxydW50aW1lU3RhdHNUb3RhbE1ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy52OCcsZnVuY3Rpb24oKXtmdW5jdGlvbiB2OEFuZE1lbW9yeU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCl7dHIubWV0cmljcy52OC5leGVjdXRpb25NZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCk7dHIubWV0cmljcy52OC5nY01ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKTt0ci5tZXRyaWNzLnNoLm1lbW9yeU1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsLHtyYW5nZU9mSW50ZXJlc3Q6dHIubWV0cmljcy52OC51dGlscy5yYW5nZUZvck1lbW9yeUR1bXBzKG1vZGVsKX0pO30KLXRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIodjhBbmRNZW1vcnlNZXRyaWNzKTtyZXR1cm57djhBbmRNZW1vcnlNZXRyaWNzLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnZyJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGNyZWF0ZUhpc3RvZ3JhbXMoaGlzdG9ncmFtcyxuYW1lLG9wdGlvbnMpe3JldHVybnt3YWxsOmhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKG5hbWUrJ193YWxsJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLG9wdGlvbnMpLGNwdTpoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShuYW1lKydfY3B1Jyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLG9wdGlvbnMpLH07fQotZnVuY3Rpb24gZnJhbWVDeWNsZUR1cmF0aW9uTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwsb3B0X29wdGlvbnMpe2NvbnN0IGhpc3RvZ3JhbXNCeUV2ZW50VGl0bGU9bmV3IE1hcCgpO2hpc3RvZ3JhbXNCeUV2ZW50VGl0bGUuc2V0KCdWclNoZWxsR2w6OkRyYXdGcmFtZScsY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLCdkcmF3X2ZyYW1lJyx7ZGVzY3JpcHRpb246J0R1cmF0aW9uIHRvIHJlbmRlciBvbmUgZnJhbWUnfSkpO2hpc3RvZ3JhbXNCeUV2ZW50VGl0bGUuc2V0KCdWclNoZWxsR2w6OkFjcXVpcmVGcmFtZScsY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLCdhY3F1aXJlX2ZyYW1lJyx7ZGVzY3JpcHRpb246J0R1cmF0aW9uIGFjcXVpcmUgYSBmcmFtZSBmcm9tIEdWUid9KSk7aGlzdG9ncmFtc0J5RXZlbnRUaXRsZS5zZXQoJ1ZyU2hlbGxHbDo6VXBkYXRlQ29udHJvbGxlcicsY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLCd1cGRhdGVfY29udHJvbGxlcicse2Rlc2NyaXB0aW9uOidEdXJhdGlvbiB0byBxdWVyeSBpbnB1dCBmcm9tIHRoZSBjb250cm9sbGVyJ30pKTtoaXN0b2dyYW1zQnlFdmVudFRpdGxlLnNldCgnVnJTaGVsbEdsOjpEcmF3RnJhbWVTdWJtaXRXaGVuUmVhZHknLGNyZWF0ZUhpc3RvZ3JhbXMoaGlzdG9ncmFtcywnc3VibWl0X2ZyYW1lJyx7ZGVzY3JpcHRpb246J0R1cmF0aW9uIHRvIHN1Ym1pdCBhIGZyYW1lIHRvIEdWUid9KSk7aGlzdG9ncmFtc0J5RXZlbnRUaXRsZS5zZXQoJ1VpU2NlbmU6Ok9uQmVnaW5GcmFtZS5VcGRhdGVBbmltYXRpb25zQW5kT3BhY2l0eScsY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLCd1cGRhdGVfYW5pbWF0aW9uc19hbmRfb3BhY2l0eScse2Rlc2NyaXB0aW9uOidEdXJhdGlvbiB0byBhcHBseSBhbmltYXRpb24gYW5kIG9wYWNpdHkgY2hhbmdlcyd9KSk7aGlzdG9ncmFtc0J5RXZlbnRUaXRsZS5zZXQoJ1VpU2NlbmU6Ok9uQmVnaW5GcmFtZS5VcGRhdGVCaW5kaW5ncycsY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLCd1cGRhdGVfYmluZGluZ3MnLHtkZXNjcmlwdGlvbjonRHVyYXRpb24gdG8gcHVzaCBiaW5kaW5nIHZhbHVlcyd9KSk7aGlzdG9ncmFtc0J5RXZlbnRUaXRsZS5zZXQoJ1VpU2NlbmU6Ok9uQmVnaW5GcmFtZS5VcGRhdGVUZXh0dXJlc0FuZFNpemVzJyxjcmVhdGVIaXN0b2dyYW1zKGhpc3RvZ3JhbXMsJ3VwZGF0ZV90ZXh0dXJlc19hbmRfc2l6ZXMnLHtkZXNjcmlwdGlvbjonRHVyYXRpb24gdG8gcmVkcmF3IHRleHR1cmVzIGFuZCB1cGRhdGUgZWxlbWVudCBzaXplcyd9KSk7aGlzdG9ncmFtc0J5RXZlbnRUaXRsZS5zZXQoJ1VpU2NlbmU6Ok9uQmVnaW5GcmFtZS5VcGRhdGVMYXlvdXQnLGNyZWF0ZUhpc3RvZ3JhbXMoaGlzdG9ncmFtcywndXBkYXRlX2xheW91dCcse2Rlc2NyaXB0aW9uOidEdXJhdGlvbiB0byByZXBvc2l0aW9uIGVsZW1lbnRzIGFjY29yZGluZyB0byB0aGVpciBsYXlvdXQnfSkpO2hpc3RvZ3JhbXNCeUV2ZW50VGl0bGUuc2V0KCdVaVNjZW5lOjpPbkJlZ2luRnJhbWUuVXBkYXRlV29ybGRTcGFjZVRyYW5zZm9ybScsY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLCd1cGRhdGVfd29ybGRfc3BhY2VfdHJhbnNmb3Jtcycse2Rlc2NyaXB0aW9uOidEdXJhdGlvbiB0byBjYWxjdWxhdGUgZWxlbWVudCB0cmFuc2Zvcm1zIGluIHdvcmxkIHNwYWNlJ30pKTtjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7bGV0IHJhbmdlT2ZJbnRlcmVzdD1tb2RlbC5ib3VuZHM7Y29uc3QgdXNlckV4cGVjdGF0aW9uc09mSW50ZXJlc3Q9W3RyLm1vZGVsLnVtLkFuaW1hdGlvbkV4cGVjdGF0aW9uXTtpZihvcHRfb3B0aW9ucyYmb3B0X29wdGlvbnMucmFuZ2VPZkludGVyZXN0KXtyYW5nZU9mSW50ZXJlc3Q9b3B0X29wdGlvbnMucmFuZ2VPZkludGVyZXN0O3VzZXJFeHBlY3RhdGlvbnNPZkludGVyZXN0LnB1c2godHIubW9kZWwudW0uUmVzcG9uc2VFeHBlY3RhdGlvbik7fQotZm9yKGNvbnN0IHVlIG9mIG1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnMpe2lmKHVlLmluaXRpYXRvclR5cGUhPT10ci5tb2RlbC51bS5JTklUSUFUT1JfVFlQRS5WUil7Y29udGludWU7fQotaWYoIXVzZXJFeHBlY3RhdGlvbnNPZkludGVyZXN0LnNvbWUoZnVuY3Rpb24odWVPZkludGVyZXN0KXtyZXR1cm4gdWUgaW5zdGFuY2VvZiB1ZU9mSW50ZXJlc3Q7fSkpe2NvbnRpbnVlO30KLWlmKCFyYW5nZU9mSW50ZXJlc3QuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUodWUuc3RhcnQsdWUuZW5kKSl7Y29udGludWU7fQotZm9yKGNvbnN0IGhlbHBlciBvZiBjaHJvbWVIZWxwZXIuYnJvd3NlckhlbHBlcnMpe2NvbnN0IGdsVGhyZWFkcz1oZWxwZXIucHJvY2Vzcy5maW5kQWxsVGhyZWFkc01hdGNoaW5nKHRocmVhZD0+IXRocmVhZC5uYW1lKTtmb3IoY29uc3QgZ2xUaHJlYWQgb2YgZ2xUaHJlYWRzKXtmb3IoY29uc3QgZXZlbnQgb2YgZ2xUaHJlYWQuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZighKGhpc3RvZ3JhbXNCeUV2ZW50VGl0bGUuaGFzKGV2ZW50LnRpdGxlKSkpe2NvbnRpbnVlO30KLWlmKGV2ZW50LnN0YXJ0PHVlLnN0YXJ0fHxldmVudC5lbmQ+dWUuZW5kKXtjb250aW51ZTt9Ci1pZihldmVudC5zdGFydDxyYW5nZU9mSW50ZXJlc3QubWlufHxldmVudC5lbmQ+cmFuZ2VPZkludGVyZXN0Lm1heCl7Y29udGludWU7fQotY29uc3R7d2FsbDp3YWxsSGlzdCxjcHU6Y3B1SGlzdH09aGlzdG9ncmFtc0J5RXZlbnRUaXRsZS5nZXQoZXZlbnQudGl0bGUpO3dhbGxIaXN0LmFkZFNhbXBsZShldmVudC5kdXJhdGlvbik7Y3B1SGlzdC5hZGRTYW1wbGUoZXZlbnQuY3B1RHVyYXRpb24pO319fX19Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKGZyYW1lQ3ljbGVEdXJhdGlvbk1ldHJpYyx7c3VwcG9ydHNSYW5nZU9mSW50ZXJlc3Q6dHJ1ZSx9KTtyZXR1cm57ZnJhbWVDeWNsZUR1cmF0aW9uTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnZyJyxmdW5jdGlvbigpe2Z1bmN0aW9uIHdlYnZyTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwsb3B0X29wdGlvbnMpe2NvbnN0IFdFQlZSX0NPVU5URVJTPW5ldyBNYXAoW1snZ3B1LldlYlZSIEZQUycse25hbWU6J3dlYnZyX2ZwcycsdW5pdDp0ci5iLlVuaXQuYnlOYW1lLmNvdW50X2JpZ2dlcklzQmV0dGVyLHNhbXBsZXM6e30sb3B0aW9uczp7ZGVzY3JpcHRpb246J1dlYlZSIGZyYW1lIHBlciBzZWNvbmQnLGJpbkJvdW5kYXJpZXM6dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigyMCwxMjAsMjUpLH0sfV0sWydncHUuV2ViVlIgZnJhbWUgdGltZSAobXMpJyx7bmFtZTond2VidnJfZnJhbWVfdGltZScsdW5pdDp0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLHNhbXBsZXM6e30sb3B0aW9uczp7ZGVzY3JpcHRpb246J1dlYlZSIGZyYW1lIHRpbWUgaW4gbXMnLGJpbkJvdW5kYXJpZXM6dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigyMCwxMjAsMjUpLH0sfV0sWydncHUuV2ViVlIgcG9zZSBwcmVkaWN0aW9uIChtcyknLHtuYW1lOid3ZWJ2cl9wb3NlX3ByZWRpY3Rpb24nLHVuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixzYW1wbGVzOnt9LG9wdGlvbnM6e2Rlc2NyaXB0aW9uOidXZWJWUiBwb3NlIHByZWRpY3Rpb24gaW4gbXMnLGJpbkJvdW5kYXJpZXM6dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigyMCwxMjAsMjUpLH0sfV0sXSk7Zm9yKGNvbnN0IHVlIG9mIG1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnMpe2NvbnN0IHJhbmdlT2ZJbnRlcmVzdEVuYWJsZWQ9b3B0X29wdGlvbnMmJm9wdF9vcHRpb25zLnJhbmdlT2ZJbnRlcmVzdDtpZihyYW5nZU9mSW50ZXJlc3RFbmFibGVkJiYhb3B0X29wdGlvbnMucmFuZ2VPZkludGVyZXN0LmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHVlLnN0YXJ0LHVlLmVuZCkpe2NvbnRpbnVlO30KLWlmKHVlLmluaXRpYXRvclR5cGUhPT10ci5tb2RlbC51bS5JTklUSUFUT1JfVFlQRS5WUiljb250aW51ZTtpZighcmFuZ2VPZkludGVyZXN0RW5hYmxlZCl7aWYoISh1ZSBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLkFuaW1hdGlvbkV4cGVjdGF0aW9uKSljb250aW51ZTt9ZWxzZXtpZighKHVlIGluc3RhbmNlb2YgdHIubW9kZWwudW0uQW5pbWF0aW9uRXhwZWN0YXRpb258fHVlIGluc3RhbmNlb2YgdHIubW9kZWwudW0uUmVzcG9uc2VFeHBlY3RhdGlvbikpY29udGludWU7fQotZm9yKGNvbnN0IGNvdW50ZXIgb2YgbW9kZWwuZ2V0QWxsQ291bnRlcnMoKSl7aWYoIShXRUJWUl9DT1VOVEVSUy5oYXMoY291bnRlci5pZCkpKWNvbnRpbnVlO2Zvcihjb25zdCBzZXJpZXMgb2YgY291bnRlci5zZXJpZXMpe2lmKCEoc2VyaWVzLm5hbWUgaW4gV0VCVlJfQ09VTlRFUlMuZ2V0KGNvdW50ZXIuaWQpLnNhbXBsZXMpKXtXRUJWUl9DT1VOVEVSUy5nZXQoY291bnRlci5pZCkuc2FtcGxlc1tzZXJpZXMubmFtZV09W107fQotZm9yKGNvbnN0IHNhbXBsZSBvZiBzZXJpZXMuc2FtcGxlcyl7aWYoc2FtcGxlLnRpbWVzdGFtcDx1ZS5zdGFydHx8c2FtcGxlLnRpbWVzdGFtcD49dWUuZW5kKXtjb250aW51ZTt9Ci1pZihyYW5nZU9mSW50ZXJlc3RFbmFibGVkJiYhb3B0X29wdGlvbnMucmFuZ2VPZkludGVyZXN0LmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHNhbXBsZS50aW1lc3RhbXAsc2FtcGxlLnRpbWVzdGFtcCkpe2NvbnRpbnVlO30KLVdFQlZSX0NPVU5URVJTLmdldChjb3VudGVyLmlkKS5zYW1wbGVzW3Nlcmllcy5uYW1lXS5wdXNoKHNhbXBsZS52YWx1ZSk7fX19fQotaWYoISgndmFsdWUnaW4gV0VCVlJfQ09VTlRFUlMuZ2V0KCdncHUuV2ViVlIgRlBTJykuc2FtcGxlcykpe1dFQlZSX0NPVU5URVJTLmdldCgnZ3B1LldlYlZSIEZQUycpLnNhbXBsZXMudmFsdWU9WzBdO30KLWZvcihjb25zdFtrZXksdmFsdWVdb2YgV0VCVlJfQ09VTlRFUlMpe2Zvcihjb25zdFtzZXJpZXNOYW1lLHNhbXBsZXNdb2YgT2JqZWN0LmVudHJpZXModmFsdWUuc2FtcGxlcykpe2xldCBoaXN0b2dyYW1OYW1lPXZhbHVlLm5hbWU7aWYoc2VyaWVzTmFtZSE9PSd2YWx1ZScpe2hpc3RvZ3JhbU5hbWU9YCR7aGlzdG9ncmFtTmFtZX1fJHtzZXJpZXNOYW1lfWA7fQotaGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oaGlzdG9ncmFtTmFtZSx2YWx1ZS51bml0LHNhbXBsZXMsdmFsdWUub3B0aW9ucyk7fX19Ci10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHdlYnZyTWV0cmljLHtzdXBwb3J0c1JhbmdlT2ZJbnRlcmVzdDp0cnVlLH0pO3JldHVybnt3ZWJ2ck1ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy53ZWJydGMnLGZ1bmN0aW9uKCl7Y29uc3QgRElTUExBWV9IRVJUWj02MC4wO2NvbnN0IFZTWU5DX0RVUkFUSU9OX1VTPTFlNi9ESVNQTEFZX0hFUlRaO2NvbnN0IFNFVkVSSVRZPTM7Y29uc3QgRlJPWkVOX0ZSQU1FX1ZTWU5DX0NPVU5UX1RIUkVTSE9MRD02O2NvbnN0IFdFQl9NRURJQV9QTEFZRVJfVVBEQVRFX1RJVExFPSdVcGRhdGVDdXJyZW50RnJhbWUnO2NvbnN0IElERUFMX1JFTkRFUl9JTlNUQU5UX05BTUU9J0lkZWFsIFJlbmRlciBJbnN0YW50Jztjb25zdCBBQ1RVQUxfUkVOREVSX0JFR0lOX05BTUU9J0FjdHVhbCBSZW5kZXIgQmVnaW4nO2NvbnN0IEFDVFVBTF9SRU5ERVJfRU5EX05BTUU9J0FjdHVhbCBSZW5kZXIgRW5kJztjb25zdCBTVFJFQU1fSURfTkFNRT0nU2VyaWFsJztjb25zdCBSRVFVSVJFRF9FVkVOVF9BUkdTX05BTUVTPVtJREVBTF9SRU5ERVJfSU5TVEFOVF9OQU1FLEFDVFVBTF9SRU5ERVJfQkVHSU5fTkFNRSxBQ1RVQUxfUkVOREVSX0VORF9OQU1FLFNUUkVBTV9JRF9OQU1FXTtjb25zdCBTVU1NQVJZX09QVElPTlM9dHIudi5IaXN0b2dyYW0uQVZFUkFHRV9PTkxZX1NVTU1BUllfT1BUSU9OUztjb25zdCBjb3VudF9zbWFsbGVySXNCZXR0ZXI9dHIuYi5Vbml0LmJ5TmFtZS5jb3VudF9zbWFsbGVySXNCZXR0ZXI7Y29uc3QgcGVyY2VudGFnZV9iaWdnZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLm5vcm1hbGl6ZWRQZXJjZW50YWdlX2JpZ2dlcklzQmV0dGVyO2NvbnN0IHBlcmNlbnRhZ2Vfc21hbGxlcklzQmV0dGVyPXRyLmIuVW5pdC5ieU5hbWUubm9ybWFsaXplZFBlcmNlbnRhZ2Vfc21hbGxlcklzQmV0dGVyO2NvbnN0IHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyPXRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXI7Y29uc3QgdW5pdGxlc3NOdW1iZXJfYmlnZ2VySXNCZXR0ZXI9dHIuYi5Vbml0LmJ5TmFtZS51bml0bGVzc051bWJlcl9iaWdnZXJJc0JldHRlcjtmdW5jdGlvbiBpc1ZhbGlkRXZlbnQoZXZlbnQpe2lmKGV2ZW50LnRpdGxlIT09V0VCX01FRElBX1BMQVlFUl9VUERBVEVfVElUTEV8fCFldmVudC5hcmdzKXtyZXR1cm4gZmFsc2U7fQotZm9yKGNvbnN0IHBhcmFtZXRlciBvZiBSRVFVSVJFRF9FVkVOVF9BUkdTX05BTUVTKXtpZighKHBhcmFtZXRlciBpbiBldmVudC5hcmdzKSl7cmV0dXJuIGZhbHNlO319Ci1yZXR1cm4gdHJ1ZTt9Ci1mdW5jdGlvbiB3ZWJydGNSZW5kZXJpbmdNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgbW9kZWxIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7bGV0IHdlYk1lZGlhUGxheWVyTVNFdmVudHM9W107Zm9yKGNvbnN0IHJlbmRlcmVyUGlkIGluIG1vZGVsSGVscGVyLnJlbmRlcmVySGVscGVycyl7Y29uc3QgcmVuZGVyZXJIZWxwZXI9bW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzW3JlbmRlcmVyUGlkXTtjb25zdCBjb21wb3NpdG9yVGhyZWFkPXJlbmRlcmVySGVscGVyLmNvbXBvc2l0b3JUaHJlYWQ7aWYoY29tcG9zaXRvclRocmVhZCE9PXVuZGVmaW5lZCl7d2ViTWVkaWFQbGF5ZXJNU0V2ZW50cz13ZWJNZWRpYVBsYXllck1TRXZlbnRzLmNvbmNhdChjb21wb3NpdG9yVGhyZWFkLnNsaWNlR3JvdXAuc2xpY2VzLmZpbHRlcihpc1ZhbGlkRXZlbnQpKTt9fQotY29uc3QgZXZlbnRzQnlTdHJlYW1OYW1lPXRyLmIuZ3JvdXBJbnRvTWFwKHdlYk1lZGlhUGxheWVyTVNFdmVudHMsZXZlbnQ9PmV2ZW50LmFyZ3NbU1RSRUFNX0lEX05BTUVdKTtmb3IoY29uc3Rbc3RyZWFtTmFtZSxldmVudHNdb2YgZXZlbnRzQnlTdHJlYW1OYW1lKXtnZXRUaW1lU3RhdHMoaGlzdG9ncmFtcyxzdHJlYW1OYW1lLGV2ZW50cyk7fX0KLXRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIod2VicnRjUmVuZGVyaW5nTWV0cmljKTtmdW5jdGlvbiBnZXRUaW1lU3RhdHMoaGlzdG9ncmFtcyxzdHJlYW1OYW1lLGV2ZW50cyl7Y29uc3QgZnJhbWVIaXN0PWdldEZyYW1lRGlzdHJpYnV0aW9uKGhpc3RvZ3JhbXMsZXZlbnRzKTthZGRGcHNGcm9tRnJhbWVEaXN0cmlidXRpb24oaGlzdG9ncmFtcyxmcmFtZUhpc3QpO2FkZEZyZWV6aW5nU2NvcmUoaGlzdG9ncmFtcyxmcmFtZUhpc3QpO2NvbnN0IGRyaWZ0VGltZVN0YXRzPWdldERyaWZ0U3RhdHMoZXZlbnRzKTtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnV2ViUlRDUmVuZGVyaW5nX2RyaWZ0X3RpbWUnLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLGRyaWZ0VGltZVN0YXRzLmRyaWZ0VGltZSx7c3VtbWFyeU9wdGlvbnM6e2NvdW50OmZhbHNlLG1pbjpmYWxzZSxwZXJjZW50aWxlOlswLjc1LDAuOV0sfSx9KTtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnV2ViUlRDUmVuZGVyaW5nX3JlbmRlcmluZ19sZW5ndGhfZXJyb3InLHBlcmNlbnRhZ2Vfc21hbGxlcklzQmV0dGVyLGRyaWZ0VGltZVN0YXRzLnJlbmRlcmluZ0xlbmd0aEVycm9yLHtzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7Y29uc3Qgc21vb3RobmVzc1N0YXRzPWdldFNtb290aG5lc3NTdGF0cyhkcmlmdFRpbWVTdGF0cy5kcmlmdFRpbWUpO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdXZWJSVENSZW5kZXJpbmdfcGVyY2VudF9iYWRseV9vdXRfb2Zfc3luYycscGVyY2VudGFnZV9zbWFsbGVySXNCZXR0ZXIsc21vb3RobmVzc1N0YXRzLnBlcmNlbnRCYWRseU91dE9mU3luYyx7c3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdXZWJSVENSZW5kZXJpbmdfcGVyY2VudF9vdXRfb2Zfc3luYycscGVyY2VudGFnZV9zbWFsbGVySXNCZXR0ZXIsc21vb3RobmVzc1N0YXRzLnBlcmNlbnRPdXRPZlN5bmMse3N1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnV2ViUlRDUmVuZGVyaW5nX3Ntb290aG5lc3Nfc2NvcmUnLHBlcmNlbnRhZ2VfYmlnZ2VySXNCZXR0ZXIsc21vb3RobmVzc1N0YXRzLnNtb290aG5lc3NTY29yZSx7c3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdXZWJSVENSZW5kZXJpbmdfZnJhbWVzX291dF9vZl9zeW5jJyxjb3VudF9zbWFsbGVySXNCZXR0ZXIsc21vb3RobmVzc1N0YXRzLmZyYW1lc091dE9mU3luYyx7c3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdXZWJSVENSZW5kZXJpbmdfZnJhbWVzX2JhZGx5X291dF9vZl9zeW5jJyxjb3VudF9zbWFsbGVySXNCZXR0ZXIsc21vb3RobmVzc1N0YXRzLmZyYW1lc1NldmVyZWx5T3V0T2ZTeW5jLHtzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7fQotY29uc3QgRlJBTUVfRElTVFJJQlVUSU9OX0JJTl9CT1VOREFSSUVTPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoMSw1MCw0OSk7ZnVuY3Rpb24gZ2V0RnJhbWVEaXN0cmlidXRpb24oaGlzdG9ncmFtcyxldmVudHMpe2NvbnN0IGNhZGVuY2U9dHIuYi5ydW5MZW5ndGhFbmNvZGluZyhldmVudHMubWFwKGU9PmUuYXJnc1tJREVBTF9SRU5ERVJfSU5TVEFOVF9OQU1FXSkpO3JldHVybiBoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnV2ViUlRDUmVuZGVyaW5nX2ZyYW1lX2Rpc3RyaWJ1dGlvbicsY291bnRfc21hbGxlcklzQmV0dGVyLGNhZGVuY2UubWFwKHRpY2tzPT50aWNrcy5jb3VudCkse2JpbkJvdW5kYXJpZXM6RlJBTUVfRElTVFJJQlVUSU9OX0JJTl9CT1VOREFSSUVTLHN1bW1hcnlPcHRpb25zOntwZXJjZW50aWxlOlswLjc1LDAuOV0sfSx9KTt9Ci1mdW5jdGlvbiBhZGRGcHNGcm9tRnJhbWVEaXN0cmlidXRpb24oaGlzdG9ncmFtcyxmcmFtZUhpc3Qpe2xldCBudW1iZXJGcmFtZXM9MDtsZXQgbnVtYmVyVnN5bmNzPTA7Zm9yKGxldCB0aWNrcz0xO3RpY2tzPGZyYW1lSGlzdC5hbGxCaW5zLmxlbmd0aDsrK3RpY2tzKXtjb25zdCBjb3VudD1mcmFtZUhpc3QuYWxsQmluc1t0aWNrc10uY291bnQ7bnVtYmVyRnJhbWVzKz1jb3VudDtudW1iZXJWc3luY3MrPXRpY2tzKmNvdW50O30KLWNvbnN0IG1lYW5SYXRpbz1udW1iZXJWc3luY3MvbnVtYmVyRnJhbWVzO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdXZWJSVENSZW5kZXJpbmdfZnBzJyx1bml0bGVzc051bWJlcl9iaWdnZXJJc0JldHRlcixESVNQTEFZX0hFUlRaL21lYW5SYXRpbyx7c3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO30KLWZ1bmN0aW9uIGZyb3plblBlbmFsdHlXZWlnaHQobnVtYmVyRnJvemVuRnJhbWVzKXtjb25zdCBwZW5hbHR5PXs1OjEsNjo1LDc6MTUsODoyNX07cmV0dXJuIHBlbmFsdHlbbnVtYmVyRnJvemVuRnJhbWVzXXx8KDgqKG51bWJlckZyb3plbkZyYW1lcy00KSk7fQotZnVuY3Rpb24gYWRkRnJlZXppbmdTY29yZShoaXN0b2dyYW1zLGZyYW1lSGlzdCl7bGV0IG51bWJlclZzeW5jcz0wO2xldCBmcmVlemluZ1Njb3JlPTA7bGV0IGZyb3plbkZyYW1lc0NvdW50PTA7Zm9yKGxldCB0aWNrcz0xO3RpY2tzPGZyYW1lSGlzdC5hbGxCaW5zLmxlbmd0aDsrK3RpY2tzKXtjb25zdCBjb3VudD1mcmFtZUhpc3QuYWxsQmluc1t0aWNrc10uY291bnQ7bnVtYmVyVnN5bmNzKz10aWNrcypjb3VudDtpZih0aWNrcz49RlJPWkVOX0ZSQU1FX1ZTWU5DX0NPVU5UX1RIUkVTSE9MRCl7ZnJvemVuRnJhbWVzQ291bnQrPWNvdW50Kih0aWNrcy0xKTtmcmVlemluZ1Njb3JlKz1jb3VudCpmcm96ZW5QZW5hbHR5V2VpZ2h0KHRpY2tzLTEpO319Ci1mcmVlemluZ1Njb3JlPTEtZnJlZXppbmdTY29yZS9udW1iZXJWc3luY3M7aWYoZnJlZXppbmdTY29yZTwwKXtmcmVlemluZ1Njb3JlPTA7fQotaGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ1dlYlJUQ1JlbmRlcmluZ19mcm96ZW5fZnJhbWVzX2NvdW50Jyxjb3VudF9zbWFsbGVySXNCZXR0ZXIsZnJvemVuRnJhbWVzQ291bnQse3N1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnV2ViUlRDUmVuZGVyaW5nX2ZyZWV6aW5nX3Njb3JlJyxwZXJjZW50YWdlX2JpZ2dlcklzQmV0dGVyLGZyZWV6aW5nU2NvcmUse3N1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTt9Ci1mdW5jdGlvbiBnZXREcmlmdFN0YXRzKGV2ZW50cyl7Y29uc3QgZHJpZnRUaW1lPVtdO2NvbnN0IGRpc2NyZXBhbmN5PVtdO2xldCBvbGRJZGVhbFJlbmRlcj0wO2xldCBleHBlY3RlZElkZWFsUmVuZGVyPTA7Zm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50cyl7Y29uc3QgY3VycmVudElkZWFsUmVuZGVyPWV2ZW50LmFyZ3NbSURFQUxfUkVOREVSX0lOU1RBTlRfTkFNRV07ZXhwZWN0ZWRJZGVhbFJlbmRlcis9VlNZTkNfRFVSQVRJT05fVVM7aWYoY3VycmVudElkZWFsUmVuZGVyPT09b2xkSWRlYWxSZW5kZXIpe2NvbnRpbnVlO30KLWNvbnN0IGFjdHVhbFJlbmRlckJlZ2luPWV2ZW50LmFyZ3NbQUNUVUFMX1JFTkRFUl9CRUdJTl9OQU1FXTtkcmlmdFRpbWUucHVzaChhY3R1YWxSZW5kZXJCZWdpbi1jdXJyZW50SWRlYWxSZW5kZXIpO2Rpc2NyZXBhbmN5LnB1c2goTWF0aC5hYnMoY3VycmVudElkZWFsUmVuZGVyLWV4cGVjdGVkSWRlYWxSZW5kZXIpKTtleHBlY3RlZElkZWFsUmVuZGVyPWN1cnJlbnRJZGVhbFJlbmRlcjtvbGRJZGVhbFJlbmRlcj1jdXJyZW50SWRlYWxSZW5kZXI7fQotY29uc3QgZGlzY3JlcGFuY3lTdW09dHIuYi5tYXRoLlN0YXRpc3RpY3Muc3VtKGRpc2NyZXBhbmN5KS0KLWRpc2NyZXBhbmN5WzBdO2NvbnN0IGxhc3RJZGVhbFJlbmRlcj1ldmVudHNbZXZlbnRzLmxlbmd0aC0xXS5hcmdzW0lERUFMX1JFTkRFUl9JTlNUQU5UX05BTUVdO2NvbnN0IGZpcnN0SWRlYWxSZW5kZXI9ZXZlbnRzWzBdLmFyZ3NbSURFQUxfUkVOREVSX0lOU1RBTlRfTkFNRV07Y29uc3QgaWRlYWxSZW5kZXJTcGFuPWxhc3RJZGVhbFJlbmRlci1maXJzdElkZWFsUmVuZGVyO2NvbnN0IHJlbmRlcmluZ0xlbmd0aEVycm9yPWRpc2NyZXBhbmN5U3VtL2lkZWFsUmVuZGVyU3BhbjtyZXR1cm57ZHJpZnRUaW1lLHJlbmRlcmluZ0xlbmd0aEVycm9yfTt9Ci1mdW5jdGlvbiBnZXRTbW9vdGhuZXNzU3RhdHMoZHJpZnRUaW1lcyl7Y29uc3QgbWVhbkRyaWZ0VGltZT10ci5iLm1hdGguU3RhdGlzdGljcy5tZWFuKGRyaWZ0VGltZXMpO2NvbnN0IG5vcm1EcmlmdFRpbWVzPWRyaWZ0VGltZXMubWFwKGRyaWZ0VGltZT0+TWF0aC5hYnMoZHJpZnRUaW1lLW1lYW5EcmlmdFRpbWUpKTtjb25zdCBmcmFtZXNTZXZlcmVseU91dE9mU3luYz1ub3JtRHJpZnRUaW1lcy5maWx0ZXIoZHJpZnRUaW1lPT5kcmlmdFRpbWU+MipWU1lOQ19EVVJBVElPTl9VUykubGVuZ3RoO2NvbnN0IGZyYW1lc091dE9mU3luYz1ub3JtRHJpZnRUaW1lcy5maWx0ZXIoZHJpZnRUaW1lPT5kcmlmdFRpbWU+VlNZTkNfRFVSQVRJT05fVVMpLmxlbmd0aDtjb25zdCBwZXJjZW50QmFkbHlPdXRPZlN5bmM9ZnJhbWVzU2V2ZXJlbHlPdXRPZlN5bmMvZHJpZnRUaW1lcy5sZW5ndGg7Y29uc3QgcGVyY2VudE91dE9mU3luYz1mcmFtZXNPdXRPZlN5bmMvZHJpZnRUaW1lcy5sZW5ndGg7Y29uc3QgZnJhbWVzT3V0T2ZTeW5jT25seU9uY2U9ZnJhbWVzT3V0T2ZTeW5jLWZyYW1lc1NldmVyZWx5T3V0T2ZTeW5jO2xldCBzbW9vdGhuZXNzU2NvcmU9MS0oZnJhbWVzT3V0T2ZTeW5jT25seU9uY2UrCi1TRVZFUklUWSpmcmFtZXNTZXZlcmVseU91dE9mU3luYykvZHJpZnRUaW1lcy5sZW5ndGg7aWYoc21vb3RobmVzc1Njb3JlPDApe3Ntb290aG5lc3NTY29yZT0wO30KLXJldHVybntmcmFtZXNPdXRPZlN5bmMsZnJhbWVzU2V2ZXJlbHlPdXRPZlN5bmMscGVyY2VudEJhZGx5T3V0T2ZTeW5jLHBlcmNlbnRPdXRPZlN5bmMsc21vb3RobmVzc1Njb3JlfTt9Ci1yZXR1cm57d2VicnRjUmVuZGVyaW5nTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLWFsZXJ0LXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10scmVhZHkoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt0aGlzLiQudGFibGUudGFibGVDb2x1bW5zPVt7dGl0bGU6J0xhYmVsJyx2YWx1ZShyb3cpe3JldHVybiByb3cubmFtZTt9LHdpZHRoOicxNTBweCd9LHt0aXRsZTonVmFsdWUnLHdpZHRoOicxMDAlJyx2YWx1ZShyb3cpe3JldHVybiByb3cudmFsdWU7fX1dO3RoaXMuJC50YWJsZS5zaG93SGVhZGVyPWZhbHNlO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXRSb3dzRm9yU2luZ2xlQWxlcnRfKGFsZXJ0KXtjb25zdCByb3dzPVtdO2Zvcihjb25zdCBhcmdOYW1lIGluIGFsZXJ0LmFyZ3Mpe2NvbnN0IGFyZ1ZpZXc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1nZW5lcmljLW9iamVjdC12aWV3Jyk7YXJnVmlldy5vYmplY3Q9YWxlcnQuYXJnc1thcmdOYW1lXTtyb3dzLnB1c2goe25hbWU6YXJnTmFtZSx2YWx1ZTphcmdWaWV3fSk7fQotaWYoYWxlcnQuYXNzb2NpYXRlZEV2ZW50cy5sZW5ndGgpe2FsZXJ0LmFzc29jaWF0ZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCxpKXtjb25zdCBsaW5rRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7bGlua0VsLnNldFNlbGVjdGlvbkFuZENvbnRlbnQobmV3IHRyLm1vZGVsLkV2ZW50U2V0KGV2ZW50KSxldmVudC50aXRsZSk7bGV0IHZhbHVlU3RyaW5nPScnO2lmKGV2ZW50IGluc3RhbmNlb2YgdHIubW9kZWwuVGltZWRFdmVudCl7dmFsdWVTdHJpbmc9J3Rvb2sgJytldmVudC5kdXJhdGlvbi50b0ZpeGVkKDIpKydtcyc7fQotcm93cy5wdXNoKHtuYW1lOmxpbmtFbCx2YWx1ZTp2YWx1ZVN0cmluZ30pO30pO30KLWNvbnN0IGRlc2NyaXB0aW9uRWw9dHIudWkuYi5jcmVhdGVEaXYoe3RleHRDb250ZW50OmFsZXJ0LmluZm8uZGVzY3JpcHRpb24sbWF4V2lkdGg6JzMwMHB4J30pO3Jvd3MucHVzaCh7bmFtZTonRGVzY3JpcHRpb24nLHZhbHVlOmRlc2NyaXB0aW9uRWx9KTtpZihhbGVydC5pbmZvLmRvY0xpbmtzKXthbGVydC5pbmZvLmRvY0xpbmtzLmZvckVhY2goZnVuY3Rpb24obGlua09iamVjdCl7Y29uc3QgbGlua0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtsaW5rRWwudGFyZ2V0PSdfYmxhbmsnO2xpbmtFbC5ocmVmPWxpbmtPYmplY3QuaHJlZjtQb2x5bWVyLmRvbShsaW5rRWwpLnRleHRDb250ZW50PVBvbHltZXIuZG9tKGxpbmtPYmplY3QpLnRleHRDb250ZW50O3Jvd3MucHVzaCh7bmFtZTpsaW5rT2JqZWN0LmxhYmVsLHZhbHVlOmxpbmtFbH0pO30pO30KLXJldHVybiByb3dzO30sZ2V0Um93c0ZvckFsZXJ0c18oYWxlcnRzKXtpZihhbGVydHMubGVuZ3RoPT09MSl7Y29uc3Qgcm93cz1be25hbWU6J0FsZXJ0Jyx2YWx1ZTp0ci5iLmdldE9ubHlFbGVtZW50KGFsZXJ0cykudGl0bGV9XTtjb25zdCBkZXRhaWxSb3dzPXRoaXMuZ2V0Um93c0ZvclNpbmdsZUFsZXJ0Xyh0ci5iLmdldE9ubHlFbGVtZW50KGFsZXJ0cykpO3Jvd3MucHVzaC5hcHBseShyb3dzLGRldGFpbFJvd3MpO3JldHVybiByb3dzO30KLXJldHVybiBhbGVydHMubWFwKGZ1bmN0aW9uKGFsZXJ0KXtyZXR1cm57bmFtZTonQWxlcnQnLHZhbHVlOmFsZXJ0LnRpdGxlLGlzRXhwYW5kZWQ6YWxlcnRzLnNpemU8MTAsc3ViUm93czp0aGlzLmdldFJvd3NGb3JTaW5nbGVBbGVydF8oYWxlcnQpfTt9LHRoaXMpO30sdXBkYXRlQ29udGVudHNfKCl7aWYodGhpcy5jdXJyZW50U2VsZWN0aW9uXz09PXVuZGVmaW5lZCl7dGhpcy4kLnRhYmxlLnJvd3M9W107dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTtyZXR1cm47fQotY29uc3QgYWxlcnRzPXRoaXMuY3VycmVudFNlbGVjdGlvbl87dGhpcy4kLnRhYmxlLnRhYmxlUm93cz10aGlzLmdldFJvd3NGb3JBbGVydHNfKGFsZXJ0cyk7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9LGdldCByZWxhdGVkRXZlbnRzVG9IaWdobGlnaHQoKXtpZighdGhpcy5jdXJyZW50U2VsZWN0aW9uXylyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHJlc3VsdD1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcy5jdXJyZW50U2VsZWN0aW9uXyl7cmVzdWx0LmFkZEV2ZW50U2V0KGV2ZW50LmFzc29jaWF0ZWRFdmVudHMpO30KLXJldHVybiByZXN1bHQ7fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1hbGVydC1zdWItdmlldycsdHIubW9kZWwuQWxlcnQse211bHRpOmZhbHNlLHRpdGxlOidBbGVydCcsfSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLWFsZXJ0LXN1Yi12aWV3Jyx0ci5tb2RlbC5BbGVydCx7bXVsdGk6dHJ1ZSx0aXRsZTonQWxlcnRzJyx9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe2NvbnN0IE5PX0JSRUFLX1NQQUNFPVN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKTtjb25zdCBSSUdIVFdBUkRTX0FSUk9XPVN0cmluZy5mcm9tQ2hhckNvZGUoODU5NCk7Y29uc3QgQ09MTEFUT1I9bmV3IEludGwuQ29sbGF0b3IodW5kZWZpbmVkLHtudW1lcmljOnRydWV9KTtmdW5jdGlvbiBUaXRsZUNvbHVtbih0aXRsZSl7dGhpcy50aXRsZT10aXRsZTt9Ci1UaXRsZUNvbHVtbi5wcm90b3R5cGU9e3N1cHBvcnRzQ2VsbFNlbGVjdGlvbjpmYWxzZSx2YWx1ZShyb3cpe2NvbnN0IGZvcm1hdHRlZFRpdGxlPXRoaXMuZm9ybWF0VGl0bGUocm93KTtjb25zdCBjb250ZXh0cz1yb3cuY29udGV4dHM7aWYoY29udGV4dHM9PT11bmRlZmluZWR8fGNvbnRleHRzLmxlbmd0aD09PTApe3JldHVybiBmb3JtYXR0ZWRUaXRsZTt9Ci1jb25zdCBmaXJzdENvbnRleHQ9Y29udGV4dHNbMF07Y29uc3QgbGFzdENvbnRleHQ9Y29udGV4dHNbY29udGV4dHMubGVuZ3RoLTFdO2xldCBjaGFuZ2VEZWZpbmVkQ29udGV4dENvdW50PTA7Zm9yKGxldCBpPTE7aTxjb250ZXh0cy5sZW5ndGg7aSsrKXtpZigoY29udGV4dHNbaV09PT11bmRlZmluZWQpIT09KGNvbnRleHRzW2ktMV09PT11bmRlZmluZWQpKXtjaGFuZ2VEZWZpbmVkQ29udGV4dENvdW50Kys7fX0KLWxldCBjb2xvcj11bmRlZmluZWQ7bGV0IHByZWZpeD11bmRlZmluZWQ7aWYoIWZpcnN0Q29udGV4dCYmbGFzdENvbnRleHQpe2NvbG9yPSdyZWQnO3ByZWZpeD0nKysrJzt9ZWxzZSBpZihmaXJzdENvbnRleHQmJiFsYXN0Q29udGV4dCl7Y29sb3I9J2dyZWVuJztwcmVmaXg9Jy0tLSc7fQotaWYoY2hhbmdlRGVmaW5lZENvbnRleHRDb3VudD4xKXtjb2xvcj0ncHVycGxlJzt9Ci1pZihjb2xvcj09PXVuZGVmaW5lZCYmcHJlZml4PT09dW5kZWZpbmVkKXtyZXR1cm4gZm9ybWF0dGVkVGl0bGU7fQotY29uc3QgdGl0bGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7aWYocHJlZml4IT09dW5kZWZpbmVkKXtjb25zdCBwcmVmaXhFbD10ci51aS5iLmNyZWF0ZVNwYW4oe3RleHRDb250ZW50OnByZWZpeH0pO3ByZWZpeEVsLnN0eWxlLmZvbnRGYW1pbHk9J21vbm9zcGFjZSc7UG9seW1lci5kb20odGl0bGVFbCkuYXBwZW5kQ2hpbGQocHJlZml4RWwpO1BvbHltZXIuZG9tKHRpdGxlRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuYXNIVE1MT3JUZXh0Tm9kZShOT19CUkVBS19TUEFDRSkpO30KLWlmKGNvbG9yIT09dW5kZWZpbmVkKXt0aXRsZUVsLnN0eWxlLmNvbG9yPWNvbG9yO30KLVBvbHltZXIuZG9tKHRpdGxlRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuYXNIVE1MT3JUZXh0Tm9kZShmb3JtYXR0ZWRUaXRsZSkpO3JldHVybiB0aXRsZUVsO30sZm9ybWF0VGl0bGUocm93KXtyZXR1cm4gcm93LnRpdGxlO30sY21wKHJvd0Escm93Qil7cmV0dXJuIENPTExBVE9SLmNvbXBhcmUocm93QS50aXRsZSxyb3dCLnRpdGxlKTt9fTtmdW5jdGlvbiBNZW1vcnlDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe3RoaXMubmFtZT1uYW1lO3RoaXMuY2VsbFBhdGg9Y2VsbFBhdGg7dGhpcy5zaG91bGRTZXRDb250ZXh0R3JvdXA9ZmFsc2U7dGhpcy5hZ2dyZWdhdGlvbk1vZGU9YWdncmVnYXRpb25Nb2RlO30KLU1lbW9yeUNvbHVtbi5mcm9tUm93cz1mdW5jdGlvbihyb3dzLGNvbmZpZyl7Y29uc3QgY2VsbE5hbWVzPW5ldyBTZXQoKTtmdW5jdGlvbiBnYXRoZXJDZWxsTmFtZXMocm93cyl7cm93cy5mb3JFYWNoKGZ1bmN0aW9uKHJvdyl7aWYocm93PT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBmaWVsZENlbGxzPXJvd1tjb25maWcuY2VsbEtleV07aWYoZmllbGRDZWxscyE9PXVuZGVmaW5lZCl7Zm9yKGNvbnN0W2ZpZWxkTmFtZSxmaWVsZENlbGxdb2YgT2JqZWN0LmVudHJpZXMoZmllbGRDZWxscykpe2lmKGZpZWxkQ2VsbD09PXVuZGVmaW5lZHx8ZmllbGRDZWxsLmZpZWxkcz09PXVuZGVmaW5lZCl7Y29udGludWU7fQotY2VsbE5hbWVzLmFkZChmaWVsZE5hbWUpO319Ci1jb25zdCBzdWJSb3dzPXJvdy5zdWJSb3dzO2lmKHN1YlJvd3MhPT11bmRlZmluZWQpe2dhdGhlckNlbGxOYW1lcyhzdWJSb3dzKTt9fSk7fQotZ2F0aGVyQ2VsbE5hbWVzKHJvd3MpO2NvbnN0IHBvc2l0aW9ucz1bXTtjZWxsTmFtZXMuZm9yRWFjaChmdW5jdGlvbihjZWxsTmFtZSl7Y29uc3QgY2VsbFBhdGg9W2NvbmZpZy5jZWxsS2V5LGNlbGxOYW1lXTtjb25zdCBtYXRjaGluZ1J1bGU9TWVtb3J5Q29sdW1uLmZpbmRNYXRjaGluZ1J1bGUoY2VsbE5hbWUsY29uZmlnLnJ1bGVzKTtjb25zdCBjb25zdHJ1Y3Rvcj1tYXRjaGluZ1J1bGUuY29sdW1uQ29uc3RydWN0b3I7Y29uc3QgY29sdW1uPW5ldyBjb25zdHJ1Y3RvcihjZWxsTmFtZSxjZWxsUGF0aCxjb25maWcuYWdncmVnYXRpb25Nb2RlKTtjb2x1bW4uc2hvdWxkU2V0Q29udGV4dEdyb3VwPSEhY29uZmlnLnNob3VsZFNldENvbnRleHRHcm91cDtwb3NpdGlvbnMucHVzaCh7aW1wb3J0YW5jZTptYXRjaGluZ1J1bGUuaW1wb3J0YW5jZSxjb2x1bW59KTt9KTtwb3NpdGlvbnMuc29ydChmdW5jdGlvbihhLGIpe2lmKGEuaW1wb3J0YW5jZT09PWIuaW1wb3J0YW5jZSl7cmV0dXJuIENPTExBVE9SLmNvbXBhcmUoYS5jb2x1bW4ubmFtZSxiLmNvbHVtbi5uYW1lKTt9Ci1yZXR1cm4gYi5pbXBvcnRhbmNlLWEuaW1wb3J0YW5jZTt9KTtyZXR1cm4gcG9zaXRpb25zLm1hcChmdW5jdGlvbihwb3NpdGlvbil7cmV0dXJuIHBvc2l0aW9uLmNvbHVtbjt9KTt9O01lbW9yeUNvbHVtbi5zcGFjZUVxdWFsbHk9ZnVuY3Rpb24oY29sdW1ucyl7Y29uc3QgY29sdW1uV2lkdGg9KDEwMC9jb2x1bW5zLmxlbmd0aCkudG9GaXhlZCgzKSsnJSc7Y29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbil7Y29sdW1uLndpZHRoPWNvbHVtbldpZHRoO30pO307TWVtb3J5Q29sdW1uLmZpbmRNYXRjaGluZ1J1bGU9ZnVuY3Rpb24obmFtZSxydWxlcyl7Zm9yKGxldCBpPTA7aTxydWxlcy5sZW5ndGg7aSsrKXtjb25zdCBydWxlPXJ1bGVzW2ldO2lmKE1lbW9yeUNvbHVtbi5uYW1lTWF0Y2hlc0NvbmRpdGlvbihuYW1lLHJ1bGUuY29uZGl0aW9uKSl7cmV0dXJuIHJ1bGU7fX0KLXJldHVybiB1bmRlZmluZWQ7fTtNZW1vcnlDb2x1bW4ubmFtZU1hdGNoZXNDb25kaXRpb249ZnVuY3Rpb24obmFtZSxjb25kaXRpb24pe2lmKGNvbmRpdGlvbj09PXVuZGVmaW5lZClyZXR1cm4gdHJ1ZTtpZih0eXBlb2YoY29uZGl0aW9uKT09PSdzdHJpbmcnKXJldHVybiBuYW1lPT09Y29uZGl0aW9uO3JldHVybiBjb25kaXRpb24udGVzdChuYW1lKTt9O01lbW9yeUNvbHVtbi5BZ2dyZWdhdGlvbk1vZGU9e0RJRkY6MCxNQVg6MX07TWVtb3J5Q29sdW1uLlNPTUVfVElNRVNUQU1QU19JTkZPX1FVQU5USUZJRVI9J2F0IHNvbWUgc2VsZWN0ZWQgdGltZXN0YW1wcyc7TWVtb3J5Q29sdW1uLnByb3RvdHlwZT17Z2V0IHRpdGxlKCl7cmV0dXJuIHRoaXMubmFtZTt9LGNlbGwocm93KXtsZXQgY2VsbD1yb3c7Y29uc3QgY2VsbFBhdGg9dGhpcy5jZWxsUGF0aDtmb3IobGV0IGk9MDtpPGNlbGxQYXRoLmxlbmd0aDtpKyspe2lmKGNlbGw9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtjZWxsPWNlbGxbY2VsbFBhdGhbaV1dO30KLXJldHVybiBjZWxsO30sYWdncmVnYXRlQ2VsbHMocm93LHN1YlJvd3Mpe30sZmllbGRzKHJvdyl7Y29uc3QgY2VsbD10aGlzLmNlbGwocm93KTtpZihjZWxsPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIGNlbGwuZmllbGRzO30sdmFsdWUocm93KXtjb25zdCBmaWVsZHM9dGhpcy5maWVsZHMocm93KTtpZih0aGlzLmhhc0FsbFJlbGV2YW50RmllbGRzVW5kZWZpbmVkKGZpZWxkcykpcmV0dXJuJyc7Y29uc3QgY29udGV4dHM9cm93LmNvbnRleHRzO2NvbnN0IGNvbG9yPXRoaXMuY29sb3IoZmllbGRzLGNvbnRleHRzKTtjb25zdCBpbmZvcz1bXTt0aGlzLmFkZEluZm9zKGZpZWxkcyxjb250ZXh0cyxpbmZvcyk7Y29uc3QgZm9ybWF0dGVkRmllbGRzPXRoaXMuZm9ybWF0RmllbGRzKGZpZWxkcyk7aWYoKGNvbG9yPT09dW5kZWZpbmVkfHxmb3JtYXR0ZWRGaWVsZHM9PT0nJykmJmluZm9zLmxlbmd0aD09PTApe3JldHVybiBmb3JtYXR0ZWRGaWVsZHM7fQotY29uc3QgZmllbGRFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7ZmllbGRFbC5zdHlsZS5kaXNwbGF5PSdmbGV4JztmaWVsZEVsLnN0eWxlLmFsaWduSXRlbXM9J2NlbnRlcic7ZmllbGRFbC5zdHlsZS5qdXN0aWZ5Q29udGVudD0nZmxleC1lbmQnO1BvbHltZXIuZG9tKGZpZWxkRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuYXNIVE1MT3JUZXh0Tm9kZShmb3JtYXR0ZWRGaWVsZHMpKTtpbmZvcy5mb3JFYWNoKGZ1bmN0aW9uKGluZm8pe2NvbnN0IGluZm9FbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7aW5mb0VsLnN0eWxlLnBhZGRpbmdMZWZ0PSc0cHgnO2luZm9FbC5zdHlsZS5jdXJzb3I9J2hlbHAnO2luZm9FbC5zdHlsZS5mb250V2VpZ2h0PSdib2xkJztQb2x5bWVyLmRvbShpbmZvRWwpLnRleHRDb250ZW50PWluZm8uaWNvbjtpZihpbmZvLmNvbG9yIT09dW5kZWZpbmVkKXtpbmZvRWwuc3R5bGUuY29sb3I9aW5mby5jb2xvcjt9Ci1pbmZvRWwudGl0bGU9aW5mby5tZXNzYWdlO1BvbHltZXIuZG9tKGZpZWxkRWwpLmFwcGVuZENoaWxkKGluZm9FbCk7fSx0aGlzKTtpZihjb2xvciE9PXVuZGVmaW5lZCl7ZmllbGRFbC5zdHlsZS5jb2xvcj1jb2xvcjt9Ci1yZXR1cm4gZmllbGRFbDt9LGhhc0FsbFJlbGV2YW50RmllbGRzVW5kZWZpbmVkKGZpZWxkcyl7aWYoZmllbGRzPT09dW5kZWZpbmVkKXJldHVybiB0cnVlO3N3aXRjaCh0aGlzLmFnZ3JlZ2F0aW9uTW9kZSl7Y2FzZSBNZW1vcnlDb2x1bW4uQWdncmVnYXRpb25Nb2RlLkRJRkY6cmV0dXJuIGZpZWxkc1swXT09PXVuZGVmaW5lZCYmZmllbGRzW2ZpZWxkcy5sZW5ndGgtMV09PT11bmRlZmluZWQ7Y2FzZSBNZW1vcnlDb2x1bW4uQWdncmVnYXRpb25Nb2RlLk1BWDpkZWZhdWx0OnJldHVybiBmaWVsZHMuZXZlcnkoZnVuY3Rpb24oZmllbGQpe3JldHVybiBmaWVsZD09PXVuZGVmaW5lZDt9KTt9fSxjb2xvcihmaWVsZHMsY29udGV4dHMpe3JldHVybiB1bmRlZmluZWQ7fSxmb3JtYXRGaWVsZHMoZmllbGRzKXtpZihmaWVsZHMubGVuZ3RoPT09MSl7cmV0dXJuIHRoaXMuZm9ybWF0U2luZ2xlRmllbGQoZmllbGRzWzBdKTt9Ci1yZXR1cm4gdGhpcy5mb3JtYXRNdWx0aXBsZUZpZWxkcyhmaWVsZHMpO30sZm9ybWF0U2luZ2xlRmllbGQoZmllbGQpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxmb3JtYXRNdWx0aXBsZUZpZWxkcyhmaWVsZHMpe3N3aXRjaCh0aGlzLmFnZ3JlZ2F0aW9uTW9kZSl7Y2FzZSBNZW1vcnlDb2x1bW4uQWdncmVnYXRpb25Nb2RlLkRJRkY6cmV0dXJuIHRoaXMuZm9ybWF0TXVsdGlwbGVGaWVsZHNEaWZmKGZpZWxkc1swXSxmaWVsZHNbZmllbGRzLmxlbmd0aC0xXSk7Y2FzZSBNZW1vcnlDb2x1bW4uQWdncmVnYXRpb25Nb2RlLk1BWDpyZXR1cm4gdGhpcy5mb3JtYXRNdWx0aXBsZUZpZWxkc01heChmaWVsZHMpO2RlZmF1bHQ6cmV0dXJuIHRyLnVpLmIuY3JlYXRlU3Bhbih7dGV4dENvbnRlbnQ6Jyh1bnN1cHBvcnRlZCBhZ2dyZWdhdGlvbiBtb2RlKScsaXRhbGljOnRydWV9KTt9fSxmb3JtYXRNdWx0aXBsZUZpZWxkc0RpZmYoZmlyc3RGaWVsZCxsYXN0RmllbGQpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxmb3JtYXRNdWx0aXBsZUZpZWxkc01heChmaWVsZHMpe3JldHVybiB0aGlzLmZvcm1hdFNpbmdsZUZpZWxkKHRoaXMuZ2V0TWF4RmllbGQoZmllbGRzKSk7fSxjbXAocm93QSxyb3dCKXtjb25zdCBmaWVsZHNBPXRoaXMuZmllbGRzKHJvd0EpO2NvbnN0IGZpZWxkc0I9dGhpcy5maWVsZHMocm93Qik7aWYoZmllbGRzQSE9PXVuZGVmaW5lZCYmZmllbGRzQiE9PXVuZGVmaW5lZCYmZmllbGRzQS5sZW5ndGghPT1maWVsZHNCLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCdEaWZmZXJlbnQgbnVtYmVyIG9mIGZpZWxkcycpO30KLWNvbnN0IHVuZGVmaW5lZEE9dGhpcy5oYXNBbGxSZWxldmFudEZpZWxkc1VuZGVmaW5lZChmaWVsZHNBKTtjb25zdCB1bmRlZmluZWRCPXRoaXMuaGFzQWxsUmVsZXZhbnRGaWVsZHNVbmRlZmluZWQoZmllbGRzQik7aWYodW5kZWZpbmVkQSYmdW5kZWZpbmVkQilyZXR1cm4gMDtpZih1bmRlZmluZWRBKXJldHVybi0xO2lmKHVuZGVmaW5lZEIpcmV0dXJuIDE7cmV0dXJuIHRoaXMuY29tcGFyZUZpZWxkcyhmaWVsZHNBLGZpZWxkc0IpO30sY29tcGFyZUZpZWxkcyhmaWVsZHNBLGZpZWxkc0Ipe2lmKGZpZWxkc0EubGVuZ3RoPT09MSl7cmV0dXJuIHRoaXMuY29tcGFyZVNpbmdsZUZpZWxkcyhmaWVsZHNBWzBdLGZpZWxkc0JbMF0pO30KLXJldHVybiB0aGlzLmNvbXBhcmVNdWx0aXBsZUZpZWxkcyhmaWVsZHNBLGZpZWxkc0IpO30sY29tcGFyZVNpbmdsZUZpZWxkcyhmaWVsZEEsZmllbGRCKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sY29tcGFyZU11bHRpcGxlRmllbGRzKGZpZWxkc0EsZmllbGRzQil7c3dpdGNoKHRoaXMuYWdncmVnYXRpb25Nb2RlKXtjYXNlIE1lbW9yeUNvbHVtbi5BZ2dyZWdhdGlvbk1vZGUuRElGRjpyZXR1cm4gdGhpcy5jb21wYXJlTXVsdGlwbGVGaWVsZHNEaWZmKGZpZWxkc0FbMF0sZmllbGRzQVtmaWVsZHNBLmxlbmd0aC0xXSxmaWVsZHNCWzBdLGZpZWxkc0JbZmllbGRzQi5sZW5ndGgtMV0pO2Nhc2UgTWVtb3J5Q29sdW1uLkFnZ3JlZ2F0aW9uTW9kZS5NQVg6cmV0dXJuIHRoaXMuY29tcGFyZU11bHRpcGxlRmllbGRzTWF4KGZpZWxkc0EsZmllbGRzQik7ZGVmYXVsdDpyZXR1cm4gMDt9fSxjb21wYXJlTXVsdGlwbGVGaWVsZHNEaWZmKGZpcnN0RmllbGRBLGxhc3RGaWVsZEEsZmlyc3RGaWVsZEIsbGFzdEZpZWxkQil7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGNvbXBhcmVNdWx0aXBsZUZpZWxkc01heChmaWVsZHNBLGZpZWxkc0Ipe3JldHVybiB0aGlzLmNvbXBhcmVTaW5nbGVGaWVsZHModGhpcy5nZXRNYXhGaWVsZChmaWVsZHNBKSx0aGlzLmdldE1heEZpZWxkKGZpZWxkc0IpKTt9LGdldE1heEZpZWxkKGZpZWxkcyl7cmV0dXJuIGZpZWxkcy5yZWR1Y2UoZnVuY3Rpb24oYWNjdW11bGF0b3IsZmllbGQpe2lmKGZpZWxkPT09dW5kZWZpbmVkKXtyZXR1cm4gYWNjdW11bGF0b3I7fQotaWYoYWNjdW11bGF0b3I9PT11bmRlZmluZWR8fHRoaXMuY29tcGFyZVNpbmdsZUZpZWxkcyhmaWVsZCxhY2N1bXVsYXRvcik+MCl7cmV0dXJuIGZpZWxkO30KLXJldHVybiBhY2N1bXVsYXRvcjt9LmJpbmQodGhpcyksdW5kZWZpbmVkKTt9LGFkZEluZm9zKGZpZWxkcyxjb250ZXh0cyxpbmZvcyl7fSxnZXRJbXBvcnRhbmNlKGltcG9ydGFuY2VSdWxlcyl7aWYoaW1wb3J0YW5jZVJ1bGVzLmxlbmd0aD09PTApcmV0dXJuIDA7Y29uc3QgbWF0Y2hpbmdSdWxlPU1lbW9yeUNvbHVtbi5maW5kTWF0Y2hpbmdSdWxlKHRoaXMubmFtZSxpbXBvcnRhbmNlUnVsZXMpO2lmKG1hdGNoaW5nUnVsZSE9PXVuZGVmaW5lZCl7cmV0dXJuIG1hdGNoaW5nUnVsZS5pbXBvcnRhbmNlO30KLWxldCBtaW5JbXBvcnRhbmNlPWltcG9ydGFuY2VSdWxlc1swXS5pbXBvcnRhbmNlO2ZvcihsZXQgaT0xO2k8aW1wb3J0YW5jZVJ1bGVzLmxlbmd0aDtpKyspe21pbkltcG9ydGFuY2U9TWF0aC5taW4obWluSW1wb3J0YW5jZSxpbXBvcnRhbmNlUnVsZXNbaV0uaW1wb3J0YW5jZSk7fQotcmV0dXJuIG1pbkltcG9ydGFuY2UtMTt9fTtmdW5jdGlvbiBTdHJpbmdNZW1vcnlDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe01lbW9yeUNvbHVtbi5jYWxsKHRoaXMsbmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpO30KLVN0cmluZ01lbW9yeUNvbHVtbi5wcm90b3R5cGU9e19fcHJvdG9fXzpNZW1vcnlDb2x1bW4ucHJvdG90eXBlLGZvcm1hdFNpbmdsZUZpZWxkKHN0cmluZyl7cmV0dXJuIHN0cmluZzt9LGZvcm1hdE11bHRpcGxlRmllbGRzRGlmZihmaXJzdFN0cmluZyxsYXN0U3RyaW5nKXtpZihmaXJzdFN0cmluZz09PXVuZGVmaW5lZCl7Y29uc3Qgc3BhbkVsPXRyLnVpLmIuY3JlYXRlU3Bhbih7Y29sb3I6J3JlZCd9KTtQb2x5bWVyLmRvbShzcGFuRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuYXNIVE1MT3JUZXh0Tm9kZSgnKycpKTtQb2x5bWVyLmRvbShzcGFuRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuYXNIVE1MT3JUZXh0Tm9kZSh0aGlzLmZvcm1hdFNpbmdsZUZpZWxkKGxhc3RTdHJpbmcpKSk7cmV0dXJuIHNwYW5FbDt9ZWxzZSBpZihsYXN0U3RyaW5nPT09dW5kZWZpbmVkKXtjb25zdCBzcGFuRWw9dHIudWkuYi5jcmVhdGVTcGFuKHtjb2xvcjonZ3JlZW4nfSk7UG9seW1lci5kb20oc3BhbkVsKS5hcHBlbmRDaGlsZCh0ci51aS5iLmFzSFRNTE9yVGV4dE5vZGUoJy0nKSk7UG9seW1lci5kb20oc3BhbkVsKS5hcHBlbmRDaGlsZCh0ci51aS5iLmFzSFRNTE9yVGV4dE5vZGUodGhpcy5mb3JtYXRTaW5nbGVGaWVsZChmaXJzdFN0cmluZykpKTtyZXR1cm4gc3BhbkVsO31lbHNlIGlmKGZpcnN0U3RyaW5nPT09bGFzdFN0cmluZyl7cmV0dXJuIHRoaXMuZm9ybWF0U2luZ2xlRmllbGQoZmlyc3RTdHJpbmcpO30KLWNvbnN0IHNwYW5FbD10ci51aS5iLmNyZWF0ZVNwYW4oe2NvbG9yOidEYXJrT3JhbmdlJ30pO1BvbHltZXIuZG9tKHNwYW5FbCkuYXBwZW5kQ2hpbGQodHIudWkuYi5hc0hUTUxPclRleHROb2RlKHRoaXMuZm9ybWF0U2luZ2xlRmllbGQoZmlyc3RTdHJpbmcpKSk7UG9seW1lci5kb20oc3BhbkVsKS5hcHBlbmRDaGlsZCh0ci51aS5iLmFzSFRNTE9yVGV4dE5vZGUoJyAnK1JJR0hUV0FSRFNfQVJST1crJyAnKSk7UG9seW1lci5kb20oc3BhbkVsKS5hcHBlbmRDaGlsZCh0ci51aS5iLmFzSFRNTE9yVGV4dE5vZGUodGhpcy5mb3JtYXRTaW5nbGVGaWVsZChsYXN0U3RyaW5nKSkpO3JldHVybiBzcGFuRWw7fSxjb21wYXJlU2luZ2xlRmllbGRzKHN0cmluZ0Esc3RyaW5nQil7cmV0dXJuIENPTExBVE9SLmNvbXBhcmUoc3RyaW5nQSxzdHJpbmdCKTt9LGNvbXBhcmVNdWx0aXBsZUZpZWxkc0RpZmYoZmlyc3RTdHJpbmdBLGxhc3RTdHJpbmdBLGZpcnN0U3RyaW5nQixsYXN0U3RyaW5nQil7aWYoZmlyc3RTdHJpbmdBPT09dW5kZWZpbmVkJiZmaXJzdFN0cmluZ0IhPT11bmRlZmluZWQpe3JldHVybiAxO30KLWlmKGZpcnN0U3RyaW5nQSE9PXVuZGVmaW5lZCYmZmlyc3RTdHJpbmdCPT09dW5kZWZpbmVkKXtyZXR1cm4tMTt9Ci1pZihmaXJzdFN0cmluZ0E9PT11bmRlZmluZWQmJmZpcnN0U3RyaW5nQj09PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMuY29tcGFyZVNpbmdsZUZpZWxkcyhsYXN0U3RyaW5nQSxsYXN0U3RyaW5nQik7fQotaWYobGFzdFN0cmluZ0E9PT11bmRlZmluZWQmJmxhc3RTdHJpbmdCIT09dW5kZWZpbmVkKXtyZXR1cm4tMTt9Ci1pZihsYXN0U3RyaW5nQSE9PXVuZGVmaW5lZCYmbGFzdFN0cmluZ0I9PT11bmRlZmluZWQpe3JldHVybiAxO30KLWlmKGxhc3RTdHJpbmdBPT09dW5kZWZpbmVkJiZsYXN0U3RyaW5nQj09PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMuY29tcGFyZVNpbmdsZUZpZWxkcyhmaXJzdFN0cmluZ0IsZmlyc3RTdHJpbmdBKTt9Ci1jb25zdCBhcmVTdHJpbmdzQUVxdWFsPWZpcnN0U3RyaW5nQT09PWxhc3RTdHJpbmdBO2NvbnN0IGFyZVN0cmluZ3NCRXF1YWw9Zmlyc3RTdHJpbmdCPT09bGFzdFN0cmluZ0I7aWYoYXJlU3RyaW5nc0FFcXVhbCYmYXJlU3RyaW5nc0JFcXVhbClyZXR1cm4gMDtpZihhcmVTdHJpbmdzQUVxdWFsKXJldHVybi0xO2lmKGFyZVN0cmluZ3NCRXF1YWwpcmV0dXJuIDE7cmV0dXJuIDA7fX07ZnVuY3Rpb24gTnVtZXJpY01lbW9yeUNvbHVtbihuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSl7TWVtb3J5Q29sdW1uLmNhbGwodGhpcyxuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSk7fQotTnVtZXJpY01lbW9yeUNvbHVtbi5ESUZGX0VQU0lMT049MC4wMDAxO051bWVyaWNNZW1vcnlDb2x1bW4ucHJvdG90eXBlPXtfX3Byb3RvX186TWVtb3J5Q29sdW1uLnByb3RvdHlwZSxhbGlnbjp0ci51aS5iLlRhYmxlRm9ybWF0LkNvbHVtbkFsaWdubWVudC5SSUdIVCxhZ2dyZWdhdGVDZWxscyhyb3csc3ViUm93cyl7Y29uc3Qgc3ViUm93Q2VsbHM9c3ViUm93cy5tYXAodGhpcy5jZWxsLHRoaXMpO2xldCBoYXNEZWZpbmVkU3ViUm93TnVtZXJpYz1mYWxzZTtsZXQgdGltZXN0YW1wQ291bnQ9dW5kZWZpbmVkO3N1YlJvd0NlbGxzLmZvckVhY2goZnVuY3Rpb24oc3ViUm93Q2VsbCl7aWYoc3ViUm93Q2VsbD09PXVuZGVmaW5lZClyZXR1cm47Y29uc3Qgc3ViUm93TnVtZXJpY3M9c3ViUm93Q2VsbC5maWVsZHM7aWYoc3ViUm93TnVtZXJpY3M9PT11bmRlZmluZWQpcmV0dXJuO2lmKHRpbWVzdGFtcENvdW50PT09dW5kZWZpbmVkKXt0aW1lc3RhbXBDb3VudD1zdWJSb3dOdW1lcmljcy5sZW5ndGg7fWVsc2UgaWYodGltZXN0YW1wQ291bnQhPT1zdWJSb3dOdW1lcmljcy5sZW5ndGgpe3Rocm93IG5ldyBFcnJvcignU3ViLXJvd3MgaGF2ZSBkaWZmZXJlbnQgbnVtYmVycyBvZiB0aW1lc3RhbXBzJyk7fQotaWYoaGFzRGVmaW5lZFN1YlJvd051bWVyaWMpe3JldHVybjt9Ci1oYXNEZWZpbmVkU3ViUm93TnVtZXJpYz1zdWJSb3dOdW1lcmljcy5zb21lKGZ1bmN0aW9uKG51bWVyaWMpe3JldHVybiBudW1lcmljIT09dW5kZWZpbmVkO30pO30pO2lmKCFoYXNEZWZpbmVkU3ViUm93TnVtZXJpYyl7cmV0dXJuO30KLWNvbnN0IGNlbGxQYXRoPXRoaXMuY2VsbFBhdGg7bGV0IHJvd0NlbGw9cm93O2ZvcihsZXQgaT0wO2k8Y2VsbFBhdGgubGVuZ3RoO2krKyl7Y29uc3QgbmV4dFN0ZXBOYW1lPWNlbGxQYXRoW2ldO2xldCBuZXh0U3RlcD1yb3dDZWxsW25leHRTdGVwTmFtZV07aWYobmV4dFN0ZXA9PT11bmRlZmluZWQpe2lmKGk8Y2VsbFBhdGgubGVuZ3RoLTEpe25leHRTdGVwPXt9O31lbHNle25leHRTdGVwPW5ldyBNZW1vcnlDZWxsKHVuZGVmaW5lZCk7fQotcm93Q2VsbFtuZXh0U3RlcE5hbWVdPW5leHRTdGVwO30KLXJvd0NlbGw9bmV4dFN0ZXA7fQotaWYocm93Q2VsbC5maWVsZHM9PT11bmRlZmluZWQpe3Jvd0NlbGwuZmllbGRzPW5ldyBBcnJheSh0aW1lc3RhbXBDb3VudCk7fWVsc2UgaWYocm93Q2VsbC5maWVsZHMubGVuZ3RoIT09dGltZXN0YW1wQ291bnQpe3Rocm93IG5ldyBFcnJvcignUm93IGhhcyBhIGRpZmZlcmVudCBudW1iZXIgb2YgdGltZXN0YW1wcyB0aGFuIHN1Yi1yb3dzJyk7fQotZm9yKGxldCBpPTA7aTx0aW1lc3RhbXBDb3VudDtpKyspe2lmKHJvd0NlbGwuZmllbGRzW2ldIT09dW5kZWZpbmVkKWNvbnRpbnVlO3Jvd0NlbGwuZmllbGRzW2ldPXRyLm1vZGVsLk1lbW9yeUFsbG9jYXRvckR1bXAuYWdncmVnYXRlTnVtZXJpY3Moc3ViUm93Q2VsbHMubWFwKGZ1bmN0aW9uKHN1YlJvd0NlbGwpe2lmKHN1YlJvd0NlbGw9PT11bmRlZmluZWR8fHN1YlJvd0NlbGwuZmllbGRzPT09dW5kZWZpbmVkKXtyZXR1cm4gdW5kZWZpbmVkO30KLXJldHVybiBzdWJSb3dDZWxsLmZpZWxkc1tpXTt9KSk7fX0sZm9ybWF0U2luZ2xlRmllbGQobnVtZXJpYyl7cmV0dXJuIHRyLnYudWkuY3JlYXRlU2NhbGFyU3BhbihudW1lcmljLHtjb250ZXh0OnRoaXMuZ2V0Rm9ybWF0dGluZ0NvbnRleHQobnVtZXJpYy51bml0KSxjb250ZXh0R3JvdXA6dGhpcy5zaG91bGRTZXRDb250ZXh0R3JvdXA/dGhpcy5uYW1lOnVuZGVmaW5lZCxpbmxpbmU6dHJ1ZSx9KTt9LGdldEZvcm1hdHRpbmdDb250ZXh0KHVuaXQpe3JldHVybiB1bmRlZmluZWQ7fSxmb3JtYXRNdWx0aXBsZUZpZWxkc0RpZmYoZmlyc3ROdW1lcmljLGxhc3ROdW1lcmljKXtyZXR1cm4gdGhpcy5mb3JtYXRTaW5nbGVGaWVsZCh0aGlzLmdldERpZmZGaWVsZF8oZmlyc3ROdW1lcmljLGxhc3ROdW1lcmljKSk7fSxjb21wYXJlU2luZ2xlRmllbGRzKG51bWVyaWNBLG51bWVyaWNCKXtyZXR1cm4gbnVtZXJpY0EudmFsdWUtbnVtZXJpY0IudmFsdWU7fSxjb21wYXJlTXVsdGlwbGVGaWVsZHNEaWZmKGZpcnN0TnVtZXJpY0EsbGFzdE51bWVyaWNBLGZpcnN0TnVtZXJpY0IsbGFzdE51bWVyaWNCKXtyZXR1cm4gdGhpcy5nZXREaWZmRmllbGRWYWx1ZV8oZmlyc3ROdW1lcmljQSxsYXN0TnVtZXJpY0EpLQotdGhpcy5nZXREaWZmRmllbGRWYWx1ZV8oZmlyc3ROdW1lcmljQixsYXN0TnVtZXJpY0IpO30sZ2V0RGlmZkZpZWxkXyhmaXJzdE51bWVyaWMsbGFzdE51bWVyaWMpe2NvbnN0IGRlZmluZWROdW1lcmljPWZpcnN0TnVtZXJpY3x8bGFzdE51bWVyaWM7cmV0dXJuIG5ldyB0ci5iLlNjYWxhcihkZWZpbmVkTnVtZXJpYy51bml0LmNvcnJlc3BvbmRpbmdEZWx0YVVuaXQsdGhpcy5nZXREaWZmRmllbGRWYWx1ZV8oZmlyc3ROdW1lcmljLGxhc3ROdW1lcmljKSk7fSxnZXREaWZmRmllbGRWYWx1ZV8oZmlyc3ROdW1lcmljLGxhc3ROdW1lcmljKXtjb25zdCBmaXJzdFZhbHVlPWZpcnN0TnVtZXJpYz09PXVuZGVmaW5lZD8wOmZpcnN0TnVtZXJpYy52YWx1ZTtjb25zdCBsYXN0VmFsdWU9bGFzdE51bWVyaWM9PT11bmRlZmluZWQ/MDpsYXN0TnVtZXJpYy52YWx1ZTtjb25zdCBkaWZmPWxhc3RWYWx1ZS1maXJzdFZhbHVlO3JldHVybiBNYXRoLmFicyhkaWZmKTxOdW1lcmljTWVtb3J5Q29sdW1uLkRJRkZfRVBTSUxPTj8wOmRpZmY7fX07ZnVuY3Rpb24gTWVtb3J5Q2VsbChmaWVsZHMpe3RoaXMuZmllbGRzPWZpZWxkczt9Ci1NZW1vcnlDZWxsLmV4dHJhY3RGaWVsZHM9ZnVuY3Rpb24oY2VsbCl7aWYoY2VsbD09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBjZWxsLmZpZWxkczt9O2NvbnN0IFJFQ1VSU0lWRV9FWFBBTlNJT05fTUFYX1ZJU0lCTEVfUk9XX0NPVU5UPTEwO2Z1bmN0aW9uIGV4cGFuZFRhYmxlUm93c1JlY3Vyc2l2ZWx5KHRhYmxlKXtsZXQgY3VycmVudExldmVsUm93cz10YWJsZS50YWJsZVJvd3M7bGV0IHRvdGFsVmlzaWJsZVJvd0NvdW50PWN1cnJlbnRMZXZlbFJvd3MubGVuZ3RoO3doaWxlKGN1cnJlbnRMZXZlbFJvd3MubGVuZ3RoPjApe2xldCBuZXh0TGV2ZWxSb3dDb3VudD0wO2N1cnJlbnRMZXZlbFJvd3MuZm9yRWFjaChmdW5jdGlvbihjdXJyZW50TGV2ZWxSb3cpe2NvbnN0IHN1YlJvd3M9Y3VycmVudExldmVsUm93LnN1YlJvd3M7aWYoc3ViUm93cz09PXVuZGVmaW5lZHx8c3ViUm93cy5sZW5ndGg9PT0wKXJldHVybjtuZXh0TGV2ZWxSb3dDb3VudCs9c3ViUm93cy5sZW5ndGg7fSk7aWYodG90YWxWaXNpYmxlUm93Q291bnQrbmV4dExldmVsUm93Q291bnQ+UkVDVVJTSVZFX0VYUEFOU0lPTl9NQVhfVklTSUJMRV9ST1dfQ09VTlQpe2JyZWFrO30KLWNvbnN0IG5leHRMZXZlbFJvd3M9bmV3IEFycmF5KG5leHRMZXZlbFJvd0NvdW50KTtsZXQgbmV4dExldmVsUm93SW5kZXg9MDtjdXJyZW50TGV2ZWxSb3dzLmZvckVhY2goZnVuY3Rpb24oY3VycmVudExldmVsUm93KXtjb25zdCBzdWJSb3dzPWN1cnJlbnRMZXZlbFJvdy5zdWJSb3dzO2lmKHN1YlJvd3M9PT11bmRlZmluZWR8fHN1YlJvd3MubGVuZ3RoPT09MClyZXR1cm47dGFibGUuc2V0RXhwYW5kZWRGb3JUYWJsZVJvdyhjdXJyZW50TGV2ZWxSb3csdHJ1ZSk7c3ViUm93cy5mb3JFYWNoKGZ1bmN0aW9uKHN1YlJvdyl7bmV4dExldmVsUm93c1tuZXh0TGV2ZWxSb3dJbmRleCsrXT1zdWJSb3c7fSk7fSk7dG90YWxWaXNpYmxlUm93Q291bnQrPW5leHRMZXZlbFJvd0NvdW50O2N1cnJlbnRMZXZlbFJvd3M9bmV4dExldmVsUm93czt9fQotZnVuY3Rpb24gYWdncmVnYXRlVGFibGVSb3dDZWxsc1JlY3Vyc2l2ZWx5KHJvdyxjb2x1bW5zLG9wdF9wcmVkaWNhdGUpe2NvbnN0IHN1YlJvd3M9cm93LnN1YlJvd3M7aWYoc3ViUm93cz09PXVuZGVmaW5lZHx8c3ViUm93cy5sZW5ndGg9PT0wKXJldHVybjtzdWJSb3dzLmZvckVhY2goZnVuY3Rpb24oc3ViUm93KXthZ2dyZWdhdGVUYWJsZVJvd0NlbGxzUmVjdXJzaXZlbHkoc3ViUm93LGNvbHVtbnMsb3B0X3ByZWRpY2F0ZSk7fSk7aWYob3B0X3ByZWRpY2F0ZT09PXVuZGVmaW5lZHx8b3B0X3ByZWRpY2F0ZShyb3cuY29udGV4dHMpKXthZ2dyZWdhdGVUYWJsZVJvd0NlbGxzKHJvdyxzdWJSb3dzLGNvbHVtbnMpO319Ci1mdW5jdGlvbiBhZ2dyZWdhdGVUYWJsZVJvd0NlbGxzKHJvdyxzdWJSb3dzLGNvbHVtbnMpe2NvbHVtbnMuZm9yRWFjaChmdW5jdGlvbihjb2x1bW4pe2lmKCEoY29sdW1uIGluc3RhbmNlb2YgTWVtb3J5Q29sdW1uKSlyZXR1cm47Y29sdW1uLmFnZ3JlZ2F0ZUNlbGxzKHJvdyxzdWJSb3dzKTt9KTt9Ci1mdW5jdGlvbiBjcmVhdGVDZWxscyh0aW1lVG9WYWx1ZXMsdmFsdWVGaWVsZHNHZXR0ZXIsb3B0X3RoaXMpe29wdF90aGlzPW9wdF90aGlzfHx0aGlzO2NvbnN0IGZpZWxkTmFtZVRvRmllbGRzPXRyLmIuaW52ZXJ0QXJyYXlPZkRpY3RzKHRpbWVUb1ZhbHVlcyx2YWx1ZUZpZWxkc0dldHRlcixvcHRfdGhpcyk7Y29uc3QgcmVzdWx0PXt9O2Zvcihjb25zdFtmaWVsZE5hbWUsZmllbGRzXW9mIE9iamVjdC5lbnRyaWVzKGZpZWxkTmFtZVRvRmllbGRzKSl7cmVzdWx0W2ZpZWxkTmFtZV09bmV3IHRyLnVpLmFuYWx5c2lzLk1lbW9yeUNlbGwoZmllbGRzKTt9Ci1yZXR1cm4gcmVzdWx0O30KLWZ1bmN0aW9uIGNyZWF0ZVdhcm5pbmdJbmZvKG1lc3NhZ2Upe3JldHVybnttZXNzYWdlLGljb246U3RyaW5nLmZyb21DaGFyQ29kZSg5ODg4KSxjb2xvcjoncmVkJ307fQotZnVuY3Rpb24gRGV0YWlsc051bWVyaWNNZW1vcnlDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe051bWVyaWNNZW1vcnlDb2x1bW4uY2FsbCh0aGlzLG5hbWUsY2VsbFBhdGgsYWdncmVnYXRpb25Nb2RlKTt9Ci1EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbi5wcm90b3R5cGU9e19fcHJvdG9fXzpOdW1lcmljTWVtb3J5Q29sdW1uLnByb3RvdHlwZSxnZXRGb3JtYXR0aW5nQ29udGV4dCh1bml0KXtpZih1bml0LmJhc2VVbml0PT09dHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlcyl7cmV0dXJue3VuaXRQcmVmaXg6dHIuYi5Vbml0UHJlZml4U2NhbGUuQklOQVJZLktJQkl9O30KLXJldHVybiB1bmRlZmluZWQ7fX07cmV0dXJue1RpdGxlQ29sdW1uLE1lbW9yeUNvbHVtbixTdHJpbmdNZW1vcnlDb2x1bW4sTnVtZXJpY01lbW9yeUNvbHVtbixNZW1vcnlDZWxsLGV4cGFuZFRhYmxlUm93c1JlY3Vyc2l2ZWx5LGFnZ3JlZ2F0ZVRhYmxlUm93Q2VsbHNSZWN1cnNpdmVseSxhZ2dyZWdhdGVUYWJsZVJvd0NlbGxzLGNyZWF0ZUNlbGxzLGNyZWF0ZVdhcm5pbmdJbmZvLERldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1uLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5hbmFseXNpcycsZnVuY3Rpb24oKXtjb25zdCBMQVRJTl9TTUFMTF9MRVRURVJfRl9XSVRIX0hPT0s9U3RyaW5nLmZyb21DaGFyQ29kZSgweDAxOTIpO2NvbnN0IENJUkNMRURfTEFUSU5fQ0FQSVRBTF9MRVRURVJfVD1TdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjRDOSk7Y29uc3QgSGVhcERldGFpbHNSb3dEaW1lbnNpb249e1JPT1Q6e30sU1RBQ0tfRlJBTUU6e2xhYmVsOidTdGFjayBmcmFtZScsc3ltYm9sOkxBVElOX1NNQUxMX0xFVFRFUl9GX1dJVEhfSE9PSyxjb2xvcjonaGVhcF9kdW1wX3N0YWNrX2ZyYW1lJ30sT0JKRUNUX1RZUEU6e2xhYmVsOidPYmplY3QgdHlwZScsc3ltYm9sOkNJUkNMRURfTEFUSU5fQ0FQSVRBTF9MRVRURVJfVCxjb2xvcjonaGVhcF9kdW1wX29iamVjdF90eXBlJ319O2Z1bmN0aW9uIEhlYXBEZXRhaWxzVGl0bGVDb2x1bW4odGl0bGUpe3RyLnVpLmFuYWx5c2lzLlRpdGxlQ29sdW1uLmNhbGwodGhpcyx0aXRsZSk7fQotSGVhcERldGFpbHNUaXRsZUNvbHVtbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5hbmFseXNpcy5UaXRsZUNvbHVtbi5wcm90b3R5cGUsZm9ybWF0VGl0bGUocm93KXtpZihyb3cuZGltZW5zaW9uPT09SGVhcERldGFpbHNSb3dEaW1lbnNpb24uUk9PVCl7cmV0dXJuIHJvdy50aXRsZTt9Ci1jb25zdCBzeW1ib2xFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7UG9seW1lci5kb20oc3ltYm9sRWwpLnRleHRDb250ZW50PXJvdy5kaW1lbnNpb24uc3ltYm9sO3N5bWJvbEVsLnRpdGxlPXJvdy5kaW1lbnNpb24ubGFiZWw7c3ltYm9sRWwuc3R5bGUuY29sb3I9dHIuYi5Db2xvclNjaGVtZS5nZXRDb2xvckZvclJlc2VydmVkTmFtZUFzU3RyaW5nKHJvdy5kaW1lbnNpb24uY29sb3IpO3N5bWJvbEVsLnN0eWxlLnBhZGRpbmdSaWdodD0nNHB4JztzeW1ib2xFbC5zdHlsZS5jdXJzb3I9J2hlbHAnO3N5bWJvbEVsLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnO2NvbnN0IHRpdGxlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1BvbHltZXIuZG9tKHRpdGxlRWwpLmFwcGVuZENoaWxkKHN5bWJvbEVsKTtQb2x5bWVyLmRvbSh0aXRsZUVsKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyb3cudGl0bGUpKTtyZXR1cm4gdGl0bGVFbDt9fTtmdW5jdGlvbiBBbGxvY2F0aW9uQ291bnRDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe3RyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1uLmNhbGwodGhpcyxuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSk7fQotQWxsb2NhdGlvbkNvdW50Q29sdW1uLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1uLnByb3RvdHlwZSxnZXRGb3JtYXR0aW5nQ29udGV4dCh1bml0KXtyZXR1cm57bWluaW11bUZyYWN0aW9uRGlnaXRzOjB9O319O2NvbnN0IEhFQVBfREVUQUlMU19DT0xVTU5fUlVMRVM9W3tjb25kaXRpb246J1NpemUnLGltcG9ydGFuY2U6Mixjb2x1bW5Db25zdHJ1Y3Rvcjp0ci51aS5hbmFseXNpcy5EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbn0se2NvbmRpdGlvbjonQ291bnQnLGltcG9ydGFuY2U6MSxjb2x1bW5Db25zdHJ1Y3RvcjpBbGxvY2F0aW9uQ291bnRDb2x1bW59LHtpbXBvcnRhbmNlOjAsY29sdW1uQ29uc3RydWN0b3I6dHIudWkuYW5hbHlzaXMuRGV0YWlsc051bWVyaWNNZW1vcnlDb2x1bW59XTtyZXR1cm57SGVhcERldGFpbHNSb3dEaW1lbnNpb24sSGVhcERldGFpbHNUaXRsZUNvbHVtbixBbGxvY2F0aW9uQ291bnRDb2x1bW4sSEVBUF9ERVRBSUxTX0NPTFVNTl9SVUxFUyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5hbHlzaXMnLGZ1bmN0aW9uKCl7Y29uc3QgUmVidWlsZGFibGVCZWhhdmlvcj17cmVidWlsZCgpe2lmKCF0aGlzLnBhbmVEaXJ0eV8pe3JldHVybjt9Ci10aGlzLnBhbmVEaXJ0eV89ZmFsc2U7dGhpcy5vblJlYnVpbGRfKCk7fSxzY2hlZHVsZVJlYnVpbGRfKCl7aWYodGhpcy5wYW5lRGlydHlfKXJldHVybjt0aGlzLnBhbmVEaXJ0eV89dHJ1ZTt0ci5iLnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJlYnVpbGQuYmluZCh0aGlzKSk7fSxvblJlYnVpbGRfKCl7fX07cmV0dXJue1JlYnVpbGRhYmxlQmVoYXZpb3IsfTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWItdGFiLXZpZXcnLHByb3BlcnRpZXM6e2xhYmVsXzp7dHlwZTpTdHJpbmcsdmFsdWU6KCk9PicnfSxzZWxlY3RlZFN1YlZpZXdfOk9iamVjdCxzdWJWaWV3c186e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSx0YWJzSGlkZGVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ZmFsc2Usb2JzZXJ2ZXI6J3RhYnNIaWRkZW5DaGFuZ2VkXyd9fSxyZWFkeSgpe3RoaXMuJC50YWJzLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpLHRydWUpO3RoaXMudXBkYXRlRm9jdXNhYmlsaXR5XygpO30sc2V0IGxhYmVsKG5ld0xhYmVsKXt0aGlzLnNldCgnbGFiZWxfJyxuZXdMYWJlbCk7fSxnZXQgdGFicygpe3JldHVybiB0aGlzLmdldCgnc3ViVmlld3NfJyk7fSxnZXQgc2VsZWN0ZWRTdWJWaWV3KCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRTdWJWaWV3Xzt9LHNldCBzZWxlY3RlZFN1YlZpZXcoc3ViVmlldyl7aWYoc3ViVmlldz09PXRoaXMuc2VsZWN0ZWRTdWJWaWV3XylyZXR1cm47aWYodGhpcy5zZWxlY3RlZFN1YlZpZXdfKXtQb2x5bWVyLmRvbSh0aGlzLiQuc3ViVmlldykucmVtb3ZlQ2hpbGQodGhpcy5zZWxlY3RlZFN1YlZpZXdfKTtjb25zdCBvbGRJbnB1dD10aGlzLnJvb3QuZ2V0RWxlbWVudEJ5SWQodGhpcy5jb21wdXRlUmFkaW9JZF8odGhpcy5zZWxlY3RlZFN1YlZpZXdfKSk7aWYob2xkSW5wdXQpe29sZElucHV0LmNoZWNrZWQ9ZmFsc2U7fX0KLXRoaXMuc2V0KCdzZWxlY3RlZFN1YlZpZXdfJyxzdWJWaWV3KTtpZihzdWJWaWV3KXtQb2x5bWVyLmRvbSh0aGlzLiQuc3ViVmlldykuYXBwZW5kQ2hpbGQoc3ViVmlldyk7Y29uc3QgbmV3SW5wdXQ9dGhpcy5yb290LmdldEVsZW1lbnRCeUlkKHRoaXMuY29tcHV0ZVJhZGlvSWRfKHN1YlZpZXcpKTtpZihuZXdJbnB1dCl7bmV3SW5wdXQuY2hlY2tlZD10cnVlO319Ci10aGlzLmZpcmUoJ3NlbGVjdGVkLXRhYi1jaGFuZ2UnKTt9LGNsZWFyU3ViVmlld3MoKXt0aGlzLnNwbGljZSgnc3ViVmlld3NfJywwLHRoaXMuc3ViVmlld3NfLmxlbmd0aCk7dGhpcy5zZWxlY3RlZFN1YlZpZXc9dW5kZWZpbmVkO3RoaXMudXBkYXRlRm9jdXNhYmlsaXR5XygpO30sYWRkU3ViVmlldyhzdWJWaWV3KXt0aGlzLnB1c2goJ3N1YlZpZXdzXycsc3ViVmlldyk7aWYoIXRoaXMuc2VsZWN0ZWRTdWJWaWV3Xyl0aGlzLnNlbGVjdGVkU3ViVmlldz1zdWJWaWV3O3RoaXMudXBkYXRlRm9jdXNhYmlsaXR5XygpO30sZ2V0IHN1YlZpZXdzKCl7cmV0dXJuIHRoaXMuc3ViVmlld3NfO30scmVzZXRTdWJWaWV3cyhzdWJWaWV3cyl7dGhpcy5zcGxpY2UoJ3N1YlZpZXdzXycsMCx0aGlzLnN1YlZpZXdzXy5sZW5ndGgpO2lmKHN1YlZpZXdzLmxlbmd0aCl7Zm9yKGNvbnN0IHN1YlZpZXcgb2Ygc3ViVmlld3Mpe3RoaXMucHVzaCgnc3ViVmlld3NfJyxzdWJWaWV3KTt9Ci10aGlzLnNlbGVjdGVkU3ViVmlldz1zdWJWaWV3c1swXTt9ZWxzZXt0aGlzLnNlbGVjdGVkU3ViVmlldz11bmRlZmluZWQ7fQotdGhpcy51cGRhdGVGb2N1c2FiaWxpdHlfKCk7fSxvblRhYkNoYW5nZWRfKGV2ZW50KXt0aGlzLnNlbGVjdGVkU3ViVmlldz1ldmVudC5tb2RlbC5pdGVtO30saXNDaGVja2VkXyhzdWJWaWV3KXtyZXR1cm4gdGhpcy5zZWxlY3RlZFN1YlZpZXdfPT09c3ViVmlldzt9LHRhYnNIaWRkZW5DaGFuZ2VkXygpe3RoaXMudXBkYXRlRm9jdXNhYmlsaXR5XygpO30sb25LZXlEb3duXyhlKXtpZih0aGlzLnRhYnNIaWRkZW4pcmV0dXJuO2xldCBrZXlIYW5kbGVkPWZhbHNlO3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgMzc6a2V5SGFuZGxlZD10aGlzLnNlbGVjdFByZXZpb3VzVGFiSWZQb3NzaWJsZSgpO2JyZWFrO2Nhc2UgMzk6a2V5SGFuZGxlZD10aGlzLnNlbGVjdE5leHRUYWJJZlBvc3NpYmxlKCk7YnJlYWs7fQotaWYoIWtleUhhbmRsZWQpcmV0dXJuO2Uuc3RvcFByb3BhZ2F0aW9uKCk7ZS5wcmV2ZW50RGVmYXVsdCgpO30sc2VsZWN0TmV4dFRhYklmUG9zc2libGUoKXtyZXR1cm4gdGhpcy5zZWxlY3RUYWJCeU9mZnNldElmUG9zc2libGVfKDEpO30sc2VsZWN0UHJldmlvdXNUYWJJZlBvc3NpYmxlKCl7cmV0dXJuIHRoaXMuc2VsZWN0VGFiQnlPZmZzZXRJZlBvc3NpYmxlXygtMSk7fSxzZWxlY3RUYWJCeU9mZnNldElmUG9zc2libGVfKG9mZnNldCl7aWYoIXRoaXMuc2VsZWN0ZWRTdWJWaWV3XylyZXR1cm4gZmFsc2U7Y29uc3QgY3VycmVudEluZGV4PXRoaXMuc3ViVmlld3NfLmluZGV4T2YodGhpcy5zZWxlY3RlZFN1YlZpZXdfKTtjb25zdCBuZXdTdWJWaWV3PXRoaXMudGFic1tjdXJyZW50SW5kZXgrb2Zmc2V0XTtpZighbmV3U3ViVmlldylyZXR1cm4gZmFsc2U7dGhpcy5zZWxlY3RlZFN1YlZpZXc9bmV3U3ViVmlldztyZXR1cm4gdHJ1ZTt9LHNob3VsZEJlRm9jdXNhYmxlXygpe3JldHVybiF0aGlzLnRhYnNIaWRkZW4mJnRoaXMuc3ViVmlld3NfLmxlbmd0aD4wO30sdXBkYXRlRm9jdXNhYmlsaXR5Xygpe2lmKHRoaXMuc2hvdWxkQmVGb2N1c2FibGVfKCkpe1BvbHltZXIuZG9tKHRoaXMuJC50YWJzKS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywwKTt9ZWxzZXtQb2x5bWVyLmRvbSh0aGlzLiQudGFicykucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO319LGNvbXB1dGVSYWRpb0lkXyhzdWJWaWV3KXtyZXR1cm4gc3ViVmlldy50YWdOYW1lKyctJytzdWJWaWV3LnRhYkxhYmVsLnJlcGxhY2UoLyAvZywnLScpO319KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe2NvbnN0IFJFU09OQUJMRV9OVU1CRVJfT0ZfUk9XUz0yMDA7Y29uc3QgVGFiVWlTdGF0ZT17Tk9fTE9OR19UQUlMOjAsSElESU5HX0xPTkdfVEFJTDoxLFNIT1dJTkdfTE9OR19UQUlMOjIsfTtmdW5jdGlvbiBFbXB0eUZpbGxlckNvbHVtbigpe30KLUVtcHR5RmlsbGVyQ29sdW1uLnByb3RvdHlwZT17dGl0bGU6JycsdmFsdWUoKXtyZXR1cm4nJzt9LH07UG9seW1lcih7aXM6J3RyLXVpLWEtbWVtb3J5LWR1bXAtaGVhcC1kZXRhaWxzLWJyZWFrZG93bi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLlJlYnVpbGRhYmxlQmVoYXZpb3JdLGNyZWF0ZWQoKXt0aGlzLmRpc3BsYXllZE5vZGVfPXVuZGVmaW5lZDt0aGlzLmRpbWVuc2lvblRvVGFiXz1uZXcgTWFwKCk7fSxyZWFkeSgpe3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO3RoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKSx0cnVlKTt9LGdldCBkaXNwbGF5ZWROb2RlKCl7cmV0dXJuIHRoaXMuZGlzcGxheWVkTm9kZV87fSxzZXQgZGlzcGxheWVkTm9kZShub2RlKXt0aGlzLmRpc3BsYXllZE5vZGVfPW5vZGU7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxnZXQgYWdncmVnYXRpb25Nb2RlKCl7cmV0dXJuIHRoaXMuYWdncmVnYXRpb25Nb2RlXzt9LHNldCBhZ2dyZWdhdGlvbk1vZGUoYWdncmVnYXRpb25Nb2RlKXt0aGlzLmFnZ3JlZ2F0aW9uTW9kZV89YWdncmVnYXRpb25Nb2RlO2Zvcihjb25zdCB0YWIgb2YgdGhpcy4kLnRhYnMudGFicyl7dGFiLmFnZ3JlZ2F0aW9uTW9kZT1hZ2dyZWdhdGlvbk1vZGU7fX0sb25SZWJ1aWxkXygpe2NvbnN0IHByZXZpb3VzbHlTZWxlY3RlZFRhYj10aGlzLiQudGFicy5zZWxlY3RlZFN1YlZpZXc7bGV0IHByZXZpb3VzbHlTZWxlY3RlZFRhYkZvY3VzZWQ9ZmFsc2U7bGV0IHByZXZpb3VzbHlTZWxlY3RlZERpbWVuc2lvbj11bmRlZmluZWQ7aWYocHJldmlvdXNseVNlbGVjdGVkVGFiKXtwcmV2aW91c2x5U2VsZWN0ZWRUYWJGb2N1c2VkPXByZXZpb3VzbHlTZWxlY3RlZFRhYi5pc0ZvY3VzZWQ7cHJldmlvdXNseVNlbGVjdGVkRGltZW5zaW9uPXByZXZpb3VzbHlTZWxlY3RlZFRhYi5kaW1lbnNpb247fQotZm9yKGNvbnN0IHRhYiBvZiB0aGlzLiQudGFicy50YWJzKXt0YWIubm9kZXM9dW5kZWZpbmVkO30KLXRoaXMuJC50YWJzLmNsZWFyU3ViVmlld3MoKTtpZih0aGlzLmRpc3BsYXllZE5vZGVfPT09dW5kZWZpbmVkKXt0aGlzLiQudGFicy5sYWJlbD0nTm8gaGVhcCBub2RlIHByb3ZpZGVkLic7cmV0dXJuO30KLWZvcihjb25zdFtkaW1lbnNpb24sY2hpbGRyZW5db2YgdGhpcy5kaXNwbGF5ZWROb2RlXy5jaGlsZE5vZGVzKXtpZighdGhpcy5kaW1lbnNpb25Ub1RhYl8uaGFzKGRpbWVuc2lvbikpe3RoaXMuZGltZW5zaW9uVG9UYWJfLnNldChkaW1lbnNpb24sZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtYnJlYWtkb3duLXZpZXctdGFiJykpO30KLWNvbnN0IHRhYj10aGlzLmRpbWVuc2lvblRvVGFiXy5nZXQoZGltZW5zaW9uKTt0YWIuYWdncmVnYXRpb25Nb2RlPXRoaXMuYWdncmVnYXRpb25Nb2RlXzt0YWIuZGltZW5zaW9uPWRpbWVuc2lvbjt0YWIubm9kZXM9Y2hpbGRyZW47dGhpcy4kLnRhYnMuYWRkU3ViVmlldyh0YWIpO3RhYi5yZWJ1aWxkKCk7aWYoZGltZW5zaW9uPT09cHJldmlvdXNseVNlbGVjdGVkRGltZW5zaW9uKXt0aGlzLiQudGFicy5zZWxlY3RlZFN1YlZpZXc9dGFiO2lmKHByZXZpb3VzbHlTZWxlY3RlZFRhYkZvY3VzZWQpe3RhYi5mb2N1cygpO319fQotaWYodGhpcy4kLnRhYnMudGFicy5sZW5ndGg+MCl7dGhpcy4kLnRhYnMubGFiZWw9J0JyZWFrIHNlbGVjdGVkIG5vZGUgZnVydGhlciBieTonO31lbHNle3RoaXMuJC50YWJzLmxhYmVsPSdTZWxlY3RlZCBub2RlIGNhbm5vdCBiZSBicm9rZW4gZG93biBhbnkgZnVydGhlci4nO319LG9uS2V5RG93bl8oa2V5RXZlbnQpe2lmKCF0aGlzLmRpc3BsYXllZE5vZGVfKXJldHVybjtsZXQga2V5SGFuZGxlZD1mYWxzZTtzd2l0Y2goa2V5RXZlbnQua2V5Q29kZSl7Y2FzZSA4OntpZighdGhpcy5kaXNwbGF5ZWROb2RlXy5wYXJlbnROb2RlKWJyZWFrO2NvbnN0IHZpZXdFdmVudD1uZXcgdHIuYi5FdmVudCgnZW50ZXItbm9kZScpO3ZpZXdFdmVudC5ub2RlPXRoaXMuZGlzcGxheWVkTm9kZV8ucGFyZW50Tm9kZTt0aGlzLmRpc3BhdGNoRXZlbnQodmlld0V2ZW50KTtrZXlIYW5kbGVkPXRydWU7YnJlYWs7fQotY2FzZSAzNzpjYXNlIDM5Ontjb25zdCB3YXNGb2N1c2VkPXRoaXMuJC50YWJzLnNlbGVjdGVkU3ViVmlldy5pc0ZvY3VzZWQ7a2V5SGFuZGxlZD1rZXlFdmVudC5rZXlDb2RlPT09Mzc/dGhpcy4kLnRhYnMuc2VsZWN0UHJldmlvdXNUYWJJZlBvc3NpYmxlKCk6dGhpcy4kLnRhYnMuc2VsZWN0TmV4dFRhYklmUG9zc2libGUoKTtpZih3YXNGb2N1c2VkJiZrZXlIYW5kbGVkKXt0aGlzLiQudGFicy5zZWxlY3RlZFN1YlZpZXcuZm9jdXMoKTt9fX0KLWlmKCFrZXlIYW5kbGVkKXJldHVybjtrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtrZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO319KTtQb2x5bWVyKHtpczondHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtYnJlYWtkb3duLXZpZXctdGFiJyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLlJlYnVpbGRhYmxlQmVoYXZpb3JdLGNyZWF0ZWQoKXt0aGlzLmRpbWVuc2lvbl89dW5kZWZpbmVkO3RoaXMubm9kZXNfPXVuZGVmaW5lZDt0aGlzLmFnZ3JlZ2F0aW9uTW9kZV89dW5kZWZpbmVkO3RoaXMuZGlzcGxheUxvbmdUYWlsXz1mYWxzZTt9LHJlYWR5KCl7dGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ3N0ZXAtaW50bycsZnVuY3Rpb24odGFibGVFdmVudCl7Y29uc3Qgdmlld0V2ZW50PW5ldyB0ci5iLkV2ZW50KCdlbnRlci1ub2RlJyk7dmlld0V2ZW50Lm5vZGU9dGFibGVFdmVudC50YWJsZVJvdzt0aGlzLmRpc3BhdGNoRXZlbnQodmlld0V2ZW50KTt9LmJpbmQodGhpcykpO30sZ2V0IGRpc3BsYXlMb25nVGFpbCgpe3JldHVybiB0aGlzLmRpc3BsYXlMb25nVGFpbF87fSxzZXQgZGlzcGxheUxvbmdUYWlsKG5ld1ZhbHVlKXtpZih0aGlzLmRpc3BsYXlMb25nVGFpbD09PW5ld1ZhbHVlKXJldHVybjt0aGlzLmRpc3BsYXlMb25nVGFpbF89bmV3VmFsdWU7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxnZXQgZGltZW5zaW9uKCl7cmV0dXJuIHRoaXMuZGltZW5zaW9uXzt9LHNldCBkaW1lbnNpb24oZGltZW5zaW9uKXt0aGlzLmRpbWVuc2lvbl89ZGltZW5zaW9uO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sZ2V0IG5vZGVzKCl7cmV0dXJuIHRoaXMubm9kZXNfO30sc2V0IG5vZGVzKG5vZGVzKXt0aGlzLm5vZGVzXz1ub2Rlczt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LGdldCBub2Rlcygpe3JldHVybiB0aGlzLm5vZGVzX3x8W107fSxnZXQgZGltZW5zaW9uTGFiZWxfKCl7aWYodGhpcy5kaW1lbnNpb25fPT09dW5kZWZpbmVkKXJldHVybicodW5kZWZpbmVkKSc7cmV0dXJuIHRoaXMuZGltZW5zaW9uXy5sYWJlbDt9LGdldCB0YWJMYWJlbCgpe2xldCBub2RlQ291bnQ9MDtpZih0aGlzLm5vZGVzXyl7bm9kZUNvdW50PXRoaXMubm9kZXNfLmxlbmd0aDt9Ci1yZXR1cm4gdGhpcy5kaW1lbnNpb25MYWJlbF8rJyAoJytub2RlQ291bnQrJyknO30sZ2V0IHRhYkljb24oKXtpZih0aGlzLmRpbWVuc2lvbl89PT11bmRlZmluZWR8fHRoaXMuZGltZW5zaW9uXz09PXRyLnVpLmFuYWx5c2lzLkhlYXBEZXRhaWxzUm93RGltZW5zaW9uLlJPT1Qpe3JldHVybiB1bmRlZmluZWQ7fQotcmV0dXJue3RleHQ6dGhpcy5kaW1lbnNpb25fLnN5bWJvbCxzdHlsZTonY29sb3I6ICcrdHIuYi5Db2xvclNjaGVtZS5nZXRDb2xvckZvclJlc2VydmVkTmFtZUFzU3RyaW5nKHRoaXMuZGltZW5zaW9uXy5jb2xvcikrJzsnfTt9LGdldCBhZ2dyZWdhdGlvbk1vZGUoKXtyZXR1cm4gdGhpcy5hZ2dyZWdhdGlvbk1vZGVfO30sc2V0IGFnZ3JlZ2F0aW9uTW9kZShhZ2dyZWdhdGlvbk1vZGUpe3RoaXMuYWdncmVnYXRpb25Nb2RlXz1hZ2dyZWdhdGlvbk1vZGU7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxmb2N1cygpe3RoaXMuJC50YWJsZS5mb2N1cygpO30sYmx1cigpe3RoaXMuJC50YWJsZS5ibHVyKCk7fSxnZXQgaXNGb2N1c2VkKCl7cmV0dXJuIHRoaXMuJC50YWJsZS5pc0ZvY3VzZWQ7fSxvblJlYnVpbGRfKCl7dGhpcy4kLnRhYmxlLnNlbGVjdGlvbk1vZGU9dHIudWkuYi5UYWJsZUZvcm1hdC5TZWxlY3Rpb25Nb2RlLlJPVzt0aGlzLiQudGFibGUuZW1wdHlWYWx1ZT0nQ2Fubm90IGJyZWFrIGRvd24gYnkgJysKLXRoaXMuZGltZW5zaW9uTGFiZWxfLnRvTG93ZXJDYXNlKCkrJyBhbnkgZnVydGhlci4nO2NvbnN0W3N0YXRlLHJvd3NdPXRoaXMuZ2V0Um93c18oKTtjb25zdCB0b3RhbD10aGlzLm5vZGVzLmxlbmd0aDtjb25zdCBkaXNwbGF5ZWQ9cm93cy5sZW5ndGg7Y29uc3QgaGlkZGVuPXRvdGFsLWRpc3BsYXllZDt0aGlzLnVwZGF0ZUluZm9CYXJfKHN0YXRlLFt0b3RhbCxkaXNwbGF5ZWQsaGlkZGVuXSk7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1yb3dzO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9dGhpcy5jcmVhdGVDb2x1bW5zXyhyb3dzKTtpZih0aGlzLiQudGFibGUuc29ydENvbHVtbkluZGV4PT09dW5kZWZpbmVkKXt0aGlzLiQudGFibGUuc29ydENvbHVtbkluZGV4PTA7dGhpcy4kLnRhYmxlLnNvcnREZXNjZW5kaW5nPWZhbHNlO30KLXRoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fSxjcmVhdGVDb2x1bW5zXyhyb3dzKXtjb25zdCB0aXRsZUNvbHVtbj1uZXcgdHIudWkuYW5hbHlzaXMuSGVhcERldGFpbHNUaXRsZUNvbHVtbih0aGlzLmRpbWVuc2lvbkxhYmVsXyk7dGl0bGVDb2x1bW4ud2lkdGg9JzQwMHB4Jztjb25zdCBudW1lcmljQ29sdW1ucz10ci51aS5hbmFseXNpcy5NZW1vcnlDb2x1bW4uZnJvbVJvd3Mocm93cyx7Y2VsbEtleTonY2VsbHMnLGFnZ3JlZ2F0aW9uTW9kZTp0aGlzLmFnZ3JlZ2F0aW9uTW9kZV8scnVsZXM6dHIudWkuYW5hbHlzaXMuSEVBUF9ERVRBSUxTX0NPTFVNTl9SVUxFUyxzaG91bGRTZXRDb250ZXh0R3JvdXA6dHJ1ZX0pO2lmKG51bWVyaWNDb2x1bW5zLmxlbmd0aD09PTApe251bWVyaWNDb2x1bW5zLnB1c2gobmV3IEVtcHR5RmlsbGVyQ29sdW1uKCkpO30KLXRyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5zcGFjZUVxdWFsbHkobnVtZXJpY0NvbHVtbnMpO2NvbnN0IGNvbHVtbnM9W3RpdGxlQ29sdW1uXS5jb25jYXQobnVtZXJpY0NvbHVtbnMpO3JldHVybiBjb2x1bW5zO30sZ2V0Um93c18oKXtsZXQgcm93cz10aGlzLm5vZGVzO2lmKHJvd3MubGVuZ3RoPD1SRVNPTkFCTEVfTlVNQkVSX09GX1JPV1Mpe3JldHVybltUYWJVaVN0YXRlLk5PX0xPTkdfVEFJTCxyb3dzXTt9ZWxzZSBpZih0aGlzLmRpc3BsYXlMb25nVGFpbCl7cmV0dXJuW1RhYlVpU3RhdGUuU0hPV0lOR19MT05HX1RBSUwscm93c107fQotY29uc3QgYWJzU2l6ZT1yb3c9Pk1hdGgubWF4KHJvdy5jZWxscy5TaXplLmZpZWxkc1swXS52YWx1ZSk7cm93cy5zb3J0KChhLGIpPT5hYnNTaXplKGIpLWFic1NpemUoYSkpO3Jvd3M9cm93cy5zbGljZSgwLFJFU09OQUJMRV9OVU1CRVJfT0ZfUk9XUyk7cmV0dXJuW1RhYlVpU3RhdGUuSElESU5HX0xPTkdfVEFJTCxyb3dzXTt9LHVwZGF0ZUluZm9CYXJfKHN0YXRlLHJvd1N0YXRzKXtpZihzdGF0ZT09PVRhYlVpU3RhdGUuU0hPV0lOR19MT05HX1RBSUwpe3RoaXMubG9uZ1RhaWxWaXNpYmxlSW5mb0Jhcl8ocm93U3RhdHMpO31lbHNlIGlmKHN0YXRlPT09VGFiVWlTdGF0ZS5ISURJTkdfTE9OR19UQUlMKXt0aGlzLmxvbmdUYWlsSGlkZGVuSW5mb0Jhcl8ocm93U3RhdHMpO31lbHNle3RoaXMuaGlkZUluZm9CYXJfKCk7fX0sbG9uZ1RhaWxWaXNpYmxlSW5mb0Jhcl8ocm93U3RhdHMpe2NvbnN0W3RvdGFsLHZpc2libGUsaGlkZGVuXT1yb3dTdGF0cztjb25zdCBjb3VsZEhpZGU9dG90YWwtUkVTT05BQkxFX05VTUJFUl9PRl9ST1dTO3RoaXMuJC5pbmZvLm1lc3NhZ2U9J1Nob3dpbmcgJyt0b3RhbCsnIHJvd3MuIFRoaXMgbWF5IGJlIHNsb3cuJzt0aGlzLiQuaW5mby5yZW1vdmVBbGxCdXR0b25zKCk7Y29uc3QgYnV0dG9uVGV4dD0nSGlkZSAnK2NvdWxkSGlkZSsnIHJvd3MuJzt0aGlzLiQuaW5mby5hZGRCdXR0b24oYnV0dG9uVGV4dCwoKT0+dGhpcy5kaXNwbGF5TG9uZ1RhaWw9ZmFsc2UpO3RoaXMuJC5pbmZvLnZpc2libGU9dHJ1ZTt9LGxvbmdUYWlsSGlkZGVuSW5mb0Jhcl8ocm93U3RhdHMpe2NvbnN0W3RvdGFsLHZpc2libGUsaGlkZGVuXT1yb3dTdGF0czt0aGlzLiQuaW5mby5tZXNzYWdlPSdIaWRpbmcgdGhlIHNtYWxsZXN0ICcraGlkZGVuKycgcm93cy4nO3RoaXMuJC5pbmZvLnJlbW92ZUFsbEJ1dHRvbnMoKTt0aGlzLiQuaW5mby5hZGRCdXR0b24oJ1Nob3cgYWxsLicsKCk9PnRoaXMuZGlzcGxheUxvbmdUYWlsPXRydWUpO3RoaXMuJC5pbmZvLnZpc2libGU9dHJ1ZTt9LGhpZGVJbmZvQmFyXygpe3RoaXMuJC5pbmZvLnZpc2libGU9ZmFsc2U7fSx9KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe2NvbnN0IERPV05XQVJEU19BUlJPV19XSVRIX1RJUF9SSUdIVFdBUkRTPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyMUIzKTtmdW5jdGlvbiBIZWFwRGV0YWlsc1BhdGhDb2x1bW4odGl0bGUpe3RyLnVpLmFuYWx5c2lzLkhlYXBEZXRhaWxzVGl0bGVDb2x1bW4uY2FsbCh0aGlzLHRpdGxlKTt9Ci1IZWFwRGV0YWlsc1BhdGhDb2x1bW4ucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5hbHlzaXMuSGVhcERldGFpbHNUaXRsZUNvbHVtbi5wcm90b3R5cGUsZm9ybWF0VGl0bGUocm93KXtjb25zdCB0aXRsZT10ci51aS5hbmFseXNpcy5IZWFwRGV0YWlsc1RpdGxlQ29sdW1uLnByb3RvdHlwZS5mb3JtYXRUaXRsZS5jYWxsKHRoaXMscm93KTtpZihyb3cuZGltZW5zaW9uPT09dHIudWkuYW5hbHlzaXMuSGVhcERldGFpbHNSb3dEaW1lbnNpb24uUk9PVCl7cmV0dXJuIHRpdGxlO30KLWNvbnN0IGFycm93RWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1BvbHltZXIuZG9tKGFycm93RWwpLnRleHRDb250ZW50PURPV05XQVJEU19BUlJPV19XSVRIX1RJUF9SSUdIVFdBUkRTO2Fycm93RWwuc3R5bGUucGFkZGluZ1JpZ2h0PScycHgnO2Fycm93RWwuc3R5bGUuZm9udFdlaWdodD0nYm9sZCc7YXJyb3dFbC5zdHlsZS5jb2xvcj10ci5iLkNvbG9yU2NoZW1lLmdldENvbG9yRm9yUmVzZXJ2ZWROYW1lQXNTdHJpbmcoJ2hlYXBfZHVtcF9jaGlsZF9ub2RlX2Fycm93Jyk7Y29uc3Qgcm93RWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1BvbHltZXIuZG9tKHJvd0VsKS5hcHBlbmRDaGlsZChhcnJvd0VsKTtQb2x5bWVyLmRvbShyb3dFbCkuYXBwZW5kQ2hpbGQodHIudWkuYi5hc0hUTUxPclRleHROb2RlKHRpdGxlKSk7cmV0dXJuIHJvd0VsO319O1BvbHltZXIoe2lzOid0ci11aS1hLW1lbW9yeS1kdW1wLWhlYXAtZGV0YWlscy1wYXRoLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuUmVidWlsZGFibGVCZWhhdmlvcl0sY3JlYXRlZCgpe3RoaXMuc2VsZWN0ZWROb2RlXz11bmRlZmluZWQ7dGhpcy5hZ2dyZWdhdGlvbk1vZGVfPXVuZGVmaW5lZDt9LHJlYWR5KCl7dGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbi1jaGFuZ2VkJyxmdW5jdGlvbihldmVudCl7dGhpcy5zZWxlY3RlZE5vZGVfPXRoaXMuJC50YWJsZS5zZWxlY3RlZFRhYmxlUm93O3RoaXMuZGlkU2VsZWN0ZWROb2RlQ2hhbmdlXygpO30uYmluZCh0aGlzKSk7fSxkaWRTZWxlY3RlZE5vZGVDaGFuZ2VfKCl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyB0ci5iLkV2ZW50KCdzZWxlY3RlZC1ub2RlLWNoYW5nZWQnKSk7fSxnZXQgc2VsZWN0ZWROb2RlKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWROb2RlXzt9LHNldCBzZWxlY3RlZE5vZGUobm9kZSl7dGhpcy5zZWxlY3RlZE5vZGVfPW5vZGU7dGhpcy5kaWRTZWxlY3RlZE5vZGVDaGFuZ2VfKCk7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxnZXQgYWdncmVnYXRpb25Nb2RlKCl7cmV0dXJuIHRoaXMuYWdncmVnYXRpb25Nb2RlXzt9LHNldCBhZ2dyZWdhdGlvbk1vZGUoYWdncmVnYXRpb25Nb2RlKXt0aGlzLmFnZ3JlZ2F0aW9uTW9kZV89YWdncmVnYXRpb25Nb2RlO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sb25SZWJ1aWxkXygpe2lmKHRoaXMuc2VsZWN0ZWROb2RlXz09PXVuZGVmaW5lZCl7dGhpcy4kLnRhYmxlLmNsZWFyKCk7cmV0dXJuO30KLWlmKHRoaXMuJC50YWJsZS50YWJsZVJvd3MuaW5jbHVkZXModGhpcy5zZWxlY3RlZE5vZGVfKSl7dGhpcy4kLnRhYmxlLnNlbGVjdGVkVGFibGVSb3c9dGhpcy5zZWxlY3RlZE5vZGVfO3JldHVybjt9Ci10aGlzLiQudGFibGUuc2VsZWN0aW9uTW9kZT10ci51aS5iLlRhYmxlRm9ybWF0LlNlbGVjdGlvbk1vZGUuUk9XO3RoaXMuJC50YWJsZS51c2VyQ2FuTW9kaWZ5U29ydE9yZGVyPWZhbHNlO2NvbnN0IHJvd3M9dGhpcy5jcmVhdGVSb3dzXyh0aGlzLnNlbGVjdGVkTm9kZV8pO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9cm93czt0aGlzLiQudGFibGUudGFibGVDb2x1bW5zPXRoaXMuY3JlYXRlQ29sdW1uc18ocm93cyk7dGhpcy4kLnRhYmxlLnNlbGVjdGVkVGFibGVSb3c9cm93c1tyb3dzLmxlbmd0aC0xXTt9LGNyZWF0ZVJvd3NfKG5vZGUpe2NvbnN0IHJvd3M9W107d2hpbGUobm9kZSl7cm93cy5wdXNoKG5vZGUpO25vZGU9bm9kZS5wYXJlbnROb2RlO30KLXJvd3MucmV2ZXJzZSgpO3JldHVybiByb3dzO30sY3JlYXRlQ29sdW1uc18ocm93cyl7Y29uc3QgdGl0bGVDb2x1bW49bmV3IEhlYXBEZXRhaWxzUGF0aENvbHVtbignQ3VycmVudCBwYXRoJyk7dGl0bGVDb2x1bW4ud2lkdGg9JzIwMHB4Jztjb25zdCBudW1lcmljQ29sdW1ucz10ci51aS5hbmFseXNpcy5NZW1vcnlDb2x1bW4uZnJvbVJvd3Mocm93cyx7Y2VsbEtleTonY2VsbHMnLGFnZ3JlZ2F0aW9uTW9kZTp0aGlzLmFnZ3JlZ2F0aW9uTW9kZV8scnVsZXM6dHIudWkuYW5hbHlzaXMuSEVBUF9ERVRBSUxTX0NPTFVNTl9SVUxFUyxzaG91bGRTZXRDb250ZXh0R3JvdXA6dHJ1ZX0pO3RyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5zcGFjZUVxdWFsbHkobnVtZXJpY0NvbHVtbnMpO3JldHVyblt0aXRsZUNvbHVtbl0uY29uY2F0KG51bWVyaWNDb2x1bW5zKTt9fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5hbmFseXNpcycsZnVuY3Rpb24oKXtjb25zdCBTdGFja2VkUGFuZUltcGw9e3NldCBjaGlsZFBhbmVCdWlsZGVyKGNoaWxkUGFuZUJ1aWxkZXIpe3RoaXMuY2hpbGRQYW5lQnVpbGRlcl89Y2hpbGRQYW5lQnVpbGRlcjt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IHRyLmIuRXZlbnQoJ3JlcXVlc3QtY2hpbGQtcGFuZS1jaGFuZ2UnKSk7fSxnZXQgY2hpbGRQYW5lQnVpbGRlcigpe3JldHVybiB0aGlzLmNoaWxkUGFuZUJ1aWxkZXJfO30sYXBwZW5kZWQoKXt0aGlzLnJlYnVpbGQoKTt9fTtjb25zdCBTdGFja2VkUGFuZT1bdHIudWkuYW5hbHlzaXMuUmVidWlsZGFibGVCZWhhdmlvcixTdGFja2VkUGFuZUltcGxdO3JldHVybntTdGFja2VkUGFuZSx9O30pO1BvbHltZXIoe2lzOid0ci11aS1hLXN0YWNrZWQtcGFuZScsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5TdGFja2VkUGFuZV19KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe2NvbnN0IFNjYWxhcj10ci5iLlNjYWxhcjtjb25zdCBzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXI9dHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXI7Y29uc3QgY291bnRfc21hbGxlcklzQmV0dGVyPXRyLmIuVW5pdC5ieU5hbWUuY291bnRfc21hbGxlcklzQmV0dGVyO2NvbnN0IE11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlcj10ci5iLk11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlcjtjb25zdCBUb3RhbFN0YXRlPXRyLmIuTXVsdGlEaW1lbnNpb25hbFZpZXdOb2RlLlRvdGFsU3RhdGU7ZnVuY3Rpb24gSGVhcER1bXBUcmVlTm9kZShzdGFja0ZyYW1lTm9kZXMsZGltZW5zaW9uLHRpdGxlLGhlYXZ5VmlldyxwYXJlbnROb2RlKXt0aGlzLmRpbWVuc2lvbj1kaW1lbnNpb247dGhpcy50aXRsZT10aXRsZTt0aGlzLnBhcmVudE5vZGU9cGFyZW50Tm9kZTt0aGlzLmhlYXZ5Vmlld189aGVhdnlWaWV3O3RoaXMuc3RhY2tGcmFtZU5vZGVzXz1zdGFja0ZyYW1lTm9kZXM7dGhpcy5sYXp5Q2VsbHNfPXVuZGVmaW5lZDt0aGlzLmxhenlDaGlsZE5vZGVzXz11bmRlZmluZWQ7fQotSGVhcER1bXBUcmVlTm9kZS5wcm90b3R5cGU9e2dldCBtaW5EaXNwbGF5ZWRUb3RhbFN0YXRlXygpe2lmKHRoaXMuaGVhdnlWaWV3Xyl7cmV0dXJuIFRvdGFsU3RhdGUuTE9XRVJfQk9VTkQ7fQotcmV0dXJuIFRvdGFsU3RhdGUuRVhBQ1Q7fSxnZXQgY2hpbGROb2Rlcygpe2lmKCF0aGlzLmxhenlDaGlsZE5vZGVzXyl7dGhpcy5sYXp5Q2hpbGROb2Rlc189bmV3IE1hcCgpO3RoaXMuYWRkRGltZW5zaW9uQ2hpbGROb2Rlc18odHIudWkuYW5hbHlzaXMuSGVhcERldGFpbHNSb3dEaW1lbnNpb24uU1RBQ0tfRlJBTUUsMCk7dGhpcy5hZGREaW1lbnNpb25DaGlsZE5vZGVzXyh0ci51aS5hbmFseXNpcy5IZWFwRGV0YWlsc1Jvd0RpbWVuc2lvbi5PQkpFQ1RfVFlQRSwxKTt0aGlzLnJlbGVhc2VTdGFja0ZyYW1lTm9kZXNJZlBvc3NpYmxlXygpO30KLXJldHVybiB0aGlzLmxhenlDaGlsZE5vZGVzXzt9LGdldCBjZWxscygpe2lmKCF0aGlzLmxhenlDZWxsc18pe3RoaXMuYWRkQ2VsbHNfKCk7dGhpcy5yZWxlYXNlU3RhY2tGcmFtZU5vZGVzSWZQb3NzaWJsZV8oKTt9Ci1yZXR1cm4gdGhpcy5sYXp5Q2VsbHNfO30scmVsZWFzZVN0YWNrRnJhbWVOb2Rlc0lmUG9zc2libGVfKCl7aWYodGhpcy5sYXp5Q2VsbHNfJiZ0aGlzLmxhenlDaGlsZE5vZGVzXyl7dGhpcy5zdGFja0ZyYW1lTm9kZXNfPXVuZGVmaW5lZDt9fSxhZGREaW1lbnNpb25DaGlsZE5vZGVzXyhkaW1lbnNpb24sZGltZW5zaW9uSW5kZXgpe2NvbnN0IGRpbWVuc2lvbkNoaWxkVGl0bGVUb1N0YWNrRnJhbWVOb2Rlcz10ci5iLmludmVydEFycmF5T2ZEaWN0cyh0aGlzLnN0YWNrRnJhbWVOb2Rlc18sbm9kZT0+dGhpcy5jb252ZXJ0U3RhY2tGcmFtZU5vZGVEaW1lbnNpb25Ub0NoaWxkRGljdF8obm9kZSxkaW1lbnNpb25JbmRleCkpO2NvbnN0IGRpbWVuc2lvbkNoaWxkTm9kZXM9W107Zm9yKGNvbnN0W2NoaWxkVGl0bGUsY2hpbGRTdGFja0ZyYW1lTm9kZXNdb2YKLU9iamVjdC5lbnRyaWVzKGRpbWVuc2lvbkNoaWxkVGl0bGVUb1N0YWNrRnJhbWVOb2Rlcykpe2RpbWVuc2lvbkNoaWxkTm9kZXMucHVzaChuZXcgSGVhcER1bXBUcmVlTm9kZShjaGlsZFN0YWNrRnJhbWVOb2RlcyxkaW1lbnNpb24sY2hpbGRUaXRsZSx0aGlzLmhlYXZ5Vmlld18sdGhpcykpO30KLXRoaXMubGF6eUNoaWxkTm9kZXNfLnNldChkaW1lbnNpb24sZGltZW5zaW9uQ2hpbGROb2Rlcyk7fSxjb252ZXJ0U3RhY2tGcmFtZU5vZGVEaW1lbnNpb25Ub0NoaWxkRGljdF8oc3RhY2tGcmFtZU5vZGUsZGltZW5zaW9uSW5kZXgpe2NvbnN0IGNoaWxkRGljdD17fTtsZXQgZGlzcGxheWVkQ2hpbGRyZW5Ub3RhbFNpemU9MDtsZXQgZGlzcGxheWVkQ2hpbGRyZW5Ub3RhbENvdW50PTA7bGV0IGhhc0Rpc3BsYXllZENoaWxkcmVuPWZhbHNlO2xldCBhbGxEaXNwbGF5ZWRDaGlsZHJlbkhhdmVEaXNwbGF5ZWRDb3VudHM9dHJ1ZTtmb3IoY29uc3QgY2hpbGQgb2Ygc3RhY2tGcmFtZU5vZGUuY2hpbGRyZW5bZGltZW5zaW9uSW5kZXhdLnZhbHVlcygpKXtpZihjaGlsZC52YWx1ZXNbMF0udG90YWxTdGF0ZTx0aGlzLm1pbkRpc3BsYXllZFRvdGFsU3RhdGVfKXtjb250aW51ZTt9Ci1pZihjaGlsZC52YWx1ZXNbMV0udG90YWxTdGF0ZTx0aGlzLm1pbkRpc3BsYXllZFRvdGFsU3RhdGVfKXthbGxEaXNwbGF5ZWRDaGlsZHJlbkhhdmVEaXNwbGF5ZWRDb3VudHM9ZmFsc2U7fQotY2hpbGREaWN0W2NoaWxkLnRpdGxlW2RpbWVuc2lvbkluZGV4XV09Y2hpbGQ7ZGlzcGxheWVkQ2hpbGRyZW5Ub3RhbFNpemUrPWNoaWxkLnZhbHVlc1swXS50b3RhbDtkaXNwbGF5ZWRDaGlsZHJlblRvdGFsQ291bnQrPWNoaWxkLnZhbHVlc1sxXS50b3RhbDtoYXNEaXNwbGF5ZWRDaGlsZHJlbj10cnVlO30KLWNvbnN0IG5vZGVUb3RhbFNpemU9c3RhY2tGcmFtZU5vZGUudmFsdWVzWzBdLnRvdGFsO2NvbnN0IG5vZGVUb3RhbENvdW50PXN0YWNrRnJhbWVOb2RlLnZhbHVlc1sxXS50b3RhbDtjb25zdCBoYXNVbmNsYXNzaWZpZWRTaXplT3JDb3VudD1kaXNwbGF5ZWRDaGlsZHJlblRvdGFsU2l6ZTxub2RlVG90YWxTaXplfHxkaXNwbGF5ZWRDaGlsZHJlblRvdGFsQ291bnQ8bm9kZVRvdGFsQ291bnQ7aWYoIXRoaXMuaGVhdnlWaWV3XyYmaGFzVW5jbGFzc2lmaWVkU2l6ZU9yQ291bnQmJmhhc0Rpc3BsYXllZENoaWxkcmVuKXtjb25zdCBvdGhlclRpdGxlPXN0YWNrRnJhbWVOb2RlLnRpdGxlLnNsaWNlKCk7b3RoZXJUaXRsZVtkaW1lbnNpb25JbmRleF09JzxvdGhlcj4nO2NvbnN0IG90aGVyTm9kZT1uZXcgdHIuYi5NdWx0aURpbWVuc2lvbmFsVmlld05vZGUob3RoZXJUaXRsZSwyKTtjaGlsZERpY3Rbb3RoZXJUaXRsZVtkaW1lbnNpb25JbmRleF1dPW90aGVyTm9kZTtvdGhlck5vZGUudmFsdWVzWzBdLnRvdGFsPW5vZGVUb3RhbFNpemUtZGlzcGxheWVkQ2hpbGRyZW5Ub3RhbFNpemU7b3RoZXJOb2RlLnZhbHVlc1swXS50b3RhbFN0YXRlPXRoaXMubWluRGlzcGxheWVkVG90YWxTdGF0ZV87b3RoZXJOb2RlLnZhbHVlc1sxXS50b3RhbD1ub2RlVG90YWxDb3VudC1kaXNwbGF5ZWRDaGlsZHJlblRvdGFsQ291bnQ7b3RoZXJOb2RlLnZhbHVlc1sxXS50b3RhbFN0YXRlPWFsbERpc3BsYXllZENoaWxkcmVuSGF2ZURpc3BsYXllZENvdW50cz90aGlzLm1pbkRpc3BsYXllZFRvdGFsU3RhdGVfOlRvdGFsU3RhdGUuTk9UX1BST1ZJREVEO30KLXJldHVybiBjaGlsZERpY3Q7fSxhZGRDZWxsc18oKXt0aGlzLmxhenlDZWxsc189dHIudWkuYW5hbHlzaXMuY3JlYXRlQ2VsbHModGhpcy5zdGFja0ZyYW1lTm9kZXNfLGZ1bmN0aW9uKHN0YWNrRnJhbWVOb2RlKXtjb25zdCBzaXplPXN0YWNrRnJhbWVOb2RlLnZhbHVlc1swXS50b3RhbDtjb25zdCBudW1lcmljcz17J1NpemUnOm5ldyBTY2FsYXIoc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLHNpemUpfTtjb25zdCBjb3VudFZhbHVlPXN0YWNrRnJhbWVOb2RlLnZhbHVlc1sxXTtpZihjb3VudFZhbHVlLnRvdGFsU3RhdGU+PXRoaXMubWluRGlzcGxheWVkVG90YWxTdGF0ZV8pe2NvbnN0IGNvdW50PWNvdW50VmFsdWUudG90YWw7bnVtZXJpY3MuQ291bnQ9bmV3IFNjYWxhcihjb3VudF9zbWFsbGVySXNCZXR0ZXIsY291bnQpO30KLXJldHVybiBudW1lcmljczt9LHRoaXMpO319O1BvbHltZXIoe2lzOid0ci11aS1hLW1lbW9yeS1kdW1wLWhlYXAtZGV0YWlscy1wYW5lJyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLlN0YWNrZWRQYW5lXSxjcmVhdGVkKCl7dGhpcy5oZWFwRHVtcHNfPXVuZGVmaW5lZDt0aGlzLnZpZXdNb2RlXz11bmRlZmluZWQ7dGhpcy5hZ2dyZWdhdGlvbk1vZGVfPXVuZGVmaW5lZDt0aGlzLmNhY2hlZEJ1aWxkZXJzXz1uZXcgTWFwKCk7fSxyZWFkeSgpe3RoaXMuJC5pbmZvX2Jhci5tZXNzYWdlPSdOb3RlOiBWYWx1ZXMgZGlzcGxheWVkIGluIHRoZSBoZWF2eSB2aWV3ICcrJ2FyZSBsb3dlciBib3VuZHMgKGV4Y2VwdCBmb3IgdGhlIHJvb3QpLic7UG9seW1lci5kb20odGhpcy4kLnZpZXdfbW9kZV9jb250YWluZXIpLmFwcGVuZENoaWxkKHRyLnVpLmIuY3JlYXRlU2VsZWN0b3IodGhpcywndmlld01vZGUnLCdtZW1vcnlEdW1wSGVhcERldGFpbHNQYW5lLnZpZXdNb2RlJyxNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmlld1R5cGUuVE9QX0RPV05fVFJFRV9WSUVXLFt7bGFiZWw6J1RvcC1kb3duIChUcmVlKScsdmFsdWU6TXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZpZXdUeXBlLlRPUF9ET1dOX1RSRUVfVklFV30se2xhYmVsOidUb3AtZG93biAoSGVhdnkpJyx2YWx1ZTpNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmlld1R5cGUuVE9QX0RPV05fSEVBVllfVklFV30se2xhYmVsOidCb3R0b20tdXAgKEhlYXZ5KScsdmFsdWU6TXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZpZXdUeXBlLkJPVFRPTV9VUF9IRUFWWV9WSUVXfV0pKTt0aGlzLiQuZHJhZ19oYW5kbGUudGFyZ2V0PXRoaXMuJC5wYXRoX3ZpZXc7dGhpcy4kLmRyYWdfaGFuZGxlLmhvcml6b250YWw9ZmFsc2U7dGhpcy4kLnBhdGhfdmlldy5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3RlZC1ub2RlLWNoYW5nZWQnLChmdW5jdGlvbihlKXt0aGlzLiQuYnJlYWtkb3duX3ZpZXcuZGlzcGxheWVkTm9kZT10aGlzLiQucGF0aF92aWV3LnNlbGVjdGVkTm9kZTt9KS5iaW5kKHRoaXMpKTt0aGlzLiQuYnJlYWtkb3duX3ZpZXcuYWRkRXZlbnRMaXN0ZW5lcignZW50ZXItbm9kZScsKGZ1bmN0aW9uKGUpe3RoaXMuJC5wYXRoX3ZpZXcuc2VsZWN0ZWROb2RlPWUubm9kZTt9KS5iaW5kKHRoaXMpKTt9LHNldCBoZWFwRHVtcHMoaGVhcER1bXBzKXt0aGlzLmhlYXBEdW1wc189aGVhcER1bXBzO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sZ2V0IGhlYXBEdW1wcygpe3JldHVybiB0aGlzLmhlYXBEdW1wc187fSxzZXQgYWdncmVnYXRpb25Nb2RlKGFnZ3JlZ2F0aW9uTW9kZSl7dGhpcy5hZ2dyZWdhdGlvbk1vZGVfPWFnZ3JlZ2F0aW9uTW9kZTt0aGlzLiQucGF0aF92aWV3LmFnZ3JlZ2F0aW9uTW9kZT1hZ2dyZWdhdGlvbk1vZGU7dGhpcy4kLmJyZWFrZG93bl92aWV3LmFnZ3JlZ2F0aW9uTW9kZT1hZ2dyZWdhdGlvbk1vZGU7fSxnZXQgYWdncmVnYXRpb25Nb2RlKCl7cmV0dXJuIHRoaXMuYWdncmVnYXRpb25Nb2RlXzt9LHNldCB2aWV3TW9kZSh2aWV3TW9kZSl7dGhpcy52aWV3TW9kZV89dmlld01vZGU7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxnZXQgdmlld01vZGUoKXtyZXR1cm4gdGhpcy52aWV3TW9kZV87fSxnZXQgaGVhdnlWaWV3KCl7c3dpdGNoKHRoaXMudmlld01vZGUpe2Nhc2UgTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZpZXdUeXBlLlRPUF9ET1dOX0hFQVZZX1ZJRVc6Y2FzZSBNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmlld1R5cGUuQk9UVE9NX1VQX0hFQVZZX1ZJRVc6cmV0dXJuIHRydWU7ZGVmYXVsdDpyZXR1cm4gZmFsc2U7fX0sb25SZWJ1aWxkXygpe2lmKHRoaXMuaGVhcER1bXBzXz09PXVuZGVmaW5lZHx8dGhpcy5oZWFwRHVtcHNfLmxlbmd0aD09PTApe3RoaXMuJC5pbmZvX3RleHQuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC5zcGxpdF92aWV3LnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC52aWV3X21vZGVfY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC5pbmZvX2Jhci5oaWRkZW49dHJ1ZTt0aGlzLiQucGF0aF92aWV3LnNlbGVjdGVkTm9kZT11bmRlZmluZWQ7cmV0dXJuO30KLXRoaXMuJC5pbmZvX3RleHQuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnNwbGl0X3ZpZXcuc3R5bGUuZGlzcGxheT0nZmxleCc7dGhpcy4kLnZpZXdfbW9kZV9jb250YWluZXIuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC5pbmZvX2Jhci5oaWRkZW49IXRoaXMuaGVhdnlWaWV3O3RoaXMuJC5wYXRoX3ZpZXcuc2VsZWN0ZWROb2RlPXRoaXMuY3JlYXRlSGVhcFRyZWVfKCk7dGhpcy4kLnBhdGhfdmlldy5yZWJ1aWxkKCk7dGhpcy4kLmJyZWFrZG93bl92aWV3LnJlYnVpbGQoKTt9LGNyZWF0ZUhlYXBUcmVlXygpe2NvbnN0IGRlZmluZWRIZWFwRHVtcD10aGlzLmhlYXBEdW1wc18uZmluZCh4PT54KTtpZihkZWZpbmVkSGVhcER1bXA9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCByb290Um93VGl0bGU9ZGVmaW5lZEhlYXBEdW1wLmFsbG9jYXRvck5hbWU7Y29uc3Qgc3RhY2tGcmFtZVRyZWVzPXRoaXMuY3JlYXRlU3RhY2tGcmFtZVRyZWVzXyh0aGlzLmhlYXBEdW1wc18pO3JldHVybiBuZXcgSGVhcER1bXBUcmVlTm9kZShzdGFja0ZyYW1lVHJlZXMsdHIudWkuYW5hbHlzaXMuSGVhcERldGFpbHNSb3dEaW1lbnNpb24uUk9PVCxyb290Um93VGl0bGUsdGhpcy5oZWF2eVZpZXcpO30sY3JlYXRlU3RhY2tGcmFtZVRyZWVzXyhoZWFwRHVtcHMpe2NvbnN0IGJ1aWxkZXJzPWhlYXBEdW1wcy5tYXAoaGVhcER1bXA9PnRoaXMuY3JlYXRlQnVpbGRlcl8oaGVhcER1bXApKTtjb25zdCB2aWV3cz1idWlsZGVycy5tYXAoYnVpbGRlcj0+e2lmKGJ1aWxkZXI9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gYnVpbGRlci5idWlsZFZpZXcodGhpcy52aWV3TW9kZSk7fSk7cmV0dXJuIHZpZXdzO30sY3JlYXRlQnVpbGRlcl8oaGVhcER1bXApe2lmKGhlYXBEdW1wPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7aWYodGhpcy5jYWNoZWRCdWlsZGVyc18uaGFzKGhlYXBEdW1wKSl7cmV0dXJuIHRoaXMuY2FjaGVkQnVpbGRlcnNfLmdldChoZWFwRHVtcCk7fQotY29uc3QgZGltZW5zaW9ucz0yO2NvbnN0IHZhbHVlQ291bnQ9Mjtjb25zdCBidWlsZGVyPW5ldyBNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIoZGltZW5zaW9ucyx2YWx1ZUNvdW50KTtmb3IoY29uc3QgZW50cnkgb2YgaGVhcER1bXAuZW50cmllcyl7Y29uc3QgbGVhZlN0YWNrRnJhbWU9ZW50cnkubGVhZlN0YWNrRnJhbWU7Y29uc3Qgc3RhY2tUcmFjZVBhdGg9bGVhZlN0YWNrRnJhbWU9PT11bmRlZmluZWQ/W106bGVhZlN0YWNrRnJhbWUuZ2V0VXNlckZyaWVuZGx5U3RhY2tUcmFjZSgpLnJldmVyc2UoKTtjb25zdCBvYmplY3RUeXBlTmFtZT1lbnRyeS5vYmplY3RUeXBlTmFtZTtjb25zdCBvYmplY3RUeXBlTmFtZVBhdGg9b2JqZWN0VHlwZU5hbWU9PT11bmRlZmluZWQ/W106W29iamVjdFR5cGVOYW1lXTtjb25zdCB2YWx1ZUtpbmQ9ZW50cnkudmFsdWVzQXJlVG90YWxzP011bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WYWx1ZUtpbmQuVE9UQUw6TXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZhbHVlS2luZC5TRUxGO2J1aWxkZXIuYWRkUGF0aChbc3RhY2tUcmFjZVBhdGgsb2JqZWN0VHlwZU5hbWVQYXRoXSxbZW50cnkuc2l6ZSxlbnRyeS5jb3VudF0sdmFsdWVLaW5kKTt9Ci1idWlsZGVyLmNvbXBsZXRlPWhlYXBEdW1wLmlzQ29tcGxldGU7dGhpcy5jYWNoZWRCdWlsZGVyc18uc2V0KGhlYXBEdW1wLGJ1aWxkZXIpO3JldHVybiBidWlsZGVyO30sfSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5hbmFseXNpcycsZnVuY3Rpb24oKXtjb25zdCBVUkxfVE9fU0laRV9WU19FRkZFQ1RJVkVfU0laRT0naHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYy8rL21hc3Rlci9kb2NzL21lbW9yeS1pbmZyYS9SRUFETUUubWQjZWZmZWN0aXZlX3NpemUtdnNfc2l6ZSc7Y29uc3QgU1VCQUxMT0NBVElPTl9DT05URVhUPXRydWU7Y29uc3QgTWVtb3J5QWxsb2NhdG9yRHVtcEluZm9UeXBlPXRyLm1vZGVsLk1lbW9yeUFsbG9jYXRvckR1bXBJbmZvVHlwZTtjb25zdCBQUk9WSURFRF9TSVpFX0xFU1NfVEhBTl9BR0dSRUdBVEVEX0NISUxEUkVOPU1lbW9yeUFsbG9jYXRvckR1bXBJbmZvVHlwZS5QUk9WSURFRF9TSVpFX0xFU1NfVEhBTl9BR0dSRUdBVEVEX0NISUxEUkVOO2NvbnN0IFBST1ZJREVEX1NJWkVfTEVTU19USEFOX0xBUkdFU1RfT1dORVI9TWVtb3J5QWxsb2NhdG9yRHVtcEluZm9UeXBlLlBST1ZJREVEX1NJWkVfTEVTU19USEFOX0xBUkdFU1RfT1dORVI7Y29uc3QgTEVGVFdBUkRTX09QRU5fSEVBREVEX0FSUk9XPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyMUZEKTtjb25zdCBSSUdIVFdBUkRTX09QRU5fSEVBREVEX0FSUk9XPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyMUZFKTtjb25zdCBFTl9EQVNIPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyMDEzKTtjb25zdCBDSVJDTEVEX0xBVElOX1NNQUxMX0xFVFRFUl9JPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyNEQ4KTtmdW5jdGlvbiBBbGxvY2F0b3JEdW1wTmFtZUNvbHVtbigpe3RyLnVpLmFuYWx5c2lzLlRpdGxlQ29sdW1uLmNhbGwodGhpcywnQ29tcG9uZW50Jyk7fQotQWxsb2NhdG9yRHVtcE5hbWVDb2x1bW4ucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5hbHlzaXMuVGl0bGVDb2x1bW4ucHJvdG90eXBlLGZvcm1hdFRpdGxlKHJvdyl7aWYoIXJvdy5zdWJhbGxvY2F0aW9uKXtyZXR1cm4gcm93LnRpdGxlO30KLXJldHVybiB0ci51aS5iLmNyZWF0ZVNwYW4oe3RleHRDb250ZW50OnJvdy50aXRsZSxpdGFsaWM6dHJ1ZSx0b29sdGlwOnJvdy5mdWxsTmFtZXM9PT11bmRlZmluZWQ/dW5kZWZpbmVkOnJvdy5mdWxsTmFtZXMuam9pbignLCAnKX0pO319O2Z1bmN0aW9uIGdldEFuZFVwZGF0ZUVudHJ5KG1hcCxuYW1lLGNyZWF0ZWRDYWxsYmFjayl7bGV0IGVudHJ5PW1hcC5nZXQobmFtZSk7aWYoZW50cnk9PT11bmRlZmluZWQpe2VudHJ5PXtjb3VudDowfTtjcmVhdGVkQ2FsbGJhY2soZW50cnkpO21hcC5zZXQobmFtZSxlbnRyeSk7fQotZW50cnkuY291bnQrKztyZXR1cm4gZW50cnk7fQotZnVuY3Rpb24gU2l6ZUluZm9NZXNzYWdlQnVpbGRlcigpe3RoaXMucGFydHNfPVtdO3RoaXMuaW5kZW50Xz0wO30KLVNpemVJbmZvTWVzc2FnZUJ1aWxkZXIucHJvdG90eXBlPXthcHBlbmQoKXt0aGlzLnBhcnRzXy5wdXNoLmFwcGx5KHRoaXMucGFydHNfLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKTt9LGFwcGVuZE1hcChtYXAsaGFzUGx1cmFsU3VmZml4LGVtcHR5VGV4dCxpdGVtQ2FsbGJhY2ssb3B0X3RoaXMpe29wdF90aGlzPW9wdF90aGlzfHx0aGlzO2lmKG1hcC5zaXplPT09MCl7aWYoZW1wdHlUZXh0KXt0aGlzLmFwcGVuZChlbXB0eVRleHQpO319ZWxzZSBpZihtYXAuc2l6ZT09PTEpe3RoaXMucGFydHNfLnB1c2goJyAnKTtjb25zdCBrZXk9bWFwLmtleXMoKS5uZXh0KCkudmFsdWU7aXRlbUNhbGxiYWNrLmNhbGwob3B0X3RoaXMsa2V5LG1hcC5nZXQoa2V5KSk7fWVsc2V7aWYoaGFzUGx1cmFsU3VmZml4KXt0aGlzLnBhcnRzXy5wdXNoKCdzJyk7fQotdGhpcy5wYXJ0c18ucHVzaCgnOicpO3RoaXMuaW5kZW50XysrO2Zvcihjb25zdCBrZXkgb2YgbWFwLmtleXMoKSl7dGhpcy5wYXJ0c18ucHVzaCgnXG4nLCcgJy5yZXBlYXQoMyoodGhpcy5pbmRlbnRfLTEpKSwnIC0gJyk7aXRlbUNhbGxiYWNrLmNhbGwob3B0X3RoaXMsa2V5LG1hcC5nZXQoa2V5KSk7fQotdGhpcy5pbmRlbnRfLS07fX0sYXBwZW5kSW1wb3J0YW5jZVJhbmdlKHJhbmdlKXt0aGlzLmFwcGVuZCgnIChpbXBvcnRhbmNlOiAnKTtpZihyYW5nZS5taW49PT1yYW5nZS5tYXgpe3RoaXMuYXBwZW5kKHJhbmdlLm1pbik7fWVsc2V7dGhpcy5hcHBlbmQocmFuZ2UubWluLEVOX0RBU0gscmFuZ2UubWF4KTt9Ci10aGlzLmFwcGVuZCgnKScpO30sYXBwZW5kU2l6ZUlmRGVmaW5lZChzaXplKXtpZihzaXplIT09dW5kZWZpbmVkKXt0aGlzLmFwcGVuZCgnICgnLHRyLmIuVW5pdC5ieU5hbWUuc2l6ZUluQnl0ZXMuZm9ybWF0KHNpemUpLCcpJyk7fX0sYXBwZW5kU29tZVRpbWVzdGFtcHNRdWFudGlmaWVyKCl7dGhpcy5hcHBlbmQoJyAnLHRyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5TT01FX1RJTUVTVEFNUFNfSU5GT19RVUFOVElGSUVSKTt9LGJ1aWxkKCl7cmV0dXJuIHRoaXMucGFydHNfLmpvaW4oJycpO319O2Z1bmN0aW9uIEVmZmVjdGl2ZVNpemVDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe3RyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1uLmNhbGwodGhpcyxuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSk7fQotRWZmZWN0aXZlU2l6ZUNvbHVtbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5hbmFseXNpcy5EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbi5wcm90b3R5cGUsZ2V0IHRpdGxlKCl7cmV0dXJuIHRyLnVpLmIuY3JlYXRlTGluayh7dGV4dENvbnRlbnQ6dGhpcy5uYW1lLHRvb2x0aXA6J01lbW9yeSB1c2VkIGJ5IHRoaXMgY29tcG9uZW50JyxocmVmOlVSTF9UT19TSVpFX1ZTX0VGRkVDVElWRV9TSVpFfSk7fSxhZGRJbmZvcyhudW1lcmljcyxtZW1vcnlBbGxvY2F0b3JEdW1wcyxpbmZvcyl7aWYobWVtb3J5QWxsb2NhdG9yRHVtcHM9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IG93bmVyTmFtZVRvRW50cnk9bmV3IE1hcCgpO2NvbnN0IG93bmVkTmFtZVRvRW50cnk9bmV3IE1hcCgpO2ZvcihsZXQgaT0wO2k8bnVtZXJpY3MubGVuZ3RoO2krKyl7aWYobnVtZXJpY3NbaV09PT11bmRlZmluZWQpY29udGludWU7Y29uc3QgZHVtcD1tZW1vcnlBbGxvY2F0b3JEdW1wc1tpXTtpZihkdW1wPT09U1VCQUxMT0NBVElPTl9DT05URVhUKXtyZXR1cm47fQotZHVtcC5vd25lZEJ5LmZvckVhY2goZnVuY3Rpb24ob3duZXJMaW5rKXtjb25zdCBvd25lckR1bXA9b3duZXJMaW5rLnNvdXJjZTt0aGlzLmdldEFuZFVwZGF0ZU93bmVyc2hpcEVudHJ5Xyhvd25lck5hbWVUb0VudHJ5LG93bmVyRHVtcCxvd25lckxpbmspO30sdGhpcyk7Y29uc3Qgb3duZWRMaW5rPWR1bXAub3ducztpZihvd25lZExpbmshPT11bmRlZmluZWQpe2NvbnN0IG93bmVkRHVtcD1vd25lZExpbmsudGFyZ2V0O2NvbnN0IG93bmVkRW50cnk9dGhpcy5nZXRBbmRVcGRhdGVPd25lcnNoaXBFbnRyeV8ob3duZWROYW1lVG9FbnRyeSxvd25lZER1bXAsb3duZWRMaW5rLHRydWUpO2NvbnN0IHNoYXJlck5hbWVUb0VudHJ5PW93bmVkRW50cnkuc2hhcmVyTmFtZVRvRW50cnk7b3duZWREdW1wLm93bmVkQnkuZm9yRWFjaChmdW5jdGlvbihzaGFyZXJMaW5rKXtjb25zdCBzaGFyZXJEdW1wPXNoYXJlckxpbmsuc291cmNlO2lmKHNoYXJlckR1bXA9PT1kdW1wKXJldHVybjt0aGlzLmdldEFuZFVwZGF0ZU93bmVyc2hpcEVudHJ5XyhzaGFyZXJOYW1lVG9FbnRyeSxzaGFyZXJEdW1wLHNoYXJlckxpbmspO30sdGhpcyk7fX0KLWlmKG93bmVyTmFtZVRvRW50cnkuc2l6ZT4wKXtjb25zdCBtZXNzYWdlQnVpbGRlcj1uZXcgU2l6ZUluZm9NZXNzYWdlQnVpbGRlcigpO21lc3NhZ2VCdWlsZGVyLmFwcGVuZCgnc2hhcmVkIGJ5Jyk7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kTWFwKG93bmVyTmFtZVRvRW50cnksZmFsc2UsdW5kZWZpbmVkLGZ1bmN0aW9uKG93bmVyTmFtZSxvd25lckVudHJ5KXttZXNzYWdlQnVpbGRlci5hcHBlbmQob3duZXJOYW1lKTtpZihvd25lckVudHJ5LmNvdW50PG51bWVyaWNzLmxlbmd0aCl7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kU29tZVRpbWVzdGFtcHNRdWFudGlmaWVyKCk7fQotbWVzc2FnZUJ1aWxkZXIuYXBwZW5kSW1wb3J0YW5jZVJhbmdlKG93bmVyRW50cnkuaW1wb3J0YW5jZVJhbmdlKTt9LHRoaXMpO2luZm9zLnB1c2goe21lc3NhZ2U6bWVzc2FnZUJ1aWxkZXIuYnVpbGQoKSxpY29uOkxFRlRXQVJEU19PUEVOX0hFQURFRF9BUlJPVyxjb2xvcjonZ3JlZW4nfSk7fQotaWYob3duZWROYW1lVG9FbnRyeS5zaXplPjApe2NvbnN0IG1lc3NhZ2VCdWlsZGVyPW5ldyBTaXplSW5mb01lc3NhZ2VCdWlsZGVyKCk7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kKCdzaGFyZXMnKTttZXNzYWdlQnVpbGRlci5hcHBlbmRNYXAob3duZWROYW1lVG9FbnRyeSxmYWxzZSx1bmRlZmluZWQsZnVuY3Rpb24ob3duZWROYW1lLG93bmVkRW50cnkpe21lc3NhZ2VCdWlsZGVyLmFwcGVuZChvd25lZE5hbWUpO2NvbnN0IG93bmVkQ291bnQ9b3duZWRFbnRyeS5jb3VudDtpZihvd25lZENvdW50PG51bWVyaWNzLmxlbmd0aCl7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kU29tZVRpbWVzdGFtcHNRdWFudGlmaWVyKCk7fQotbWVzc2FnZUJ1aWxkZXIuYXBwZW5kSW1wb3J0YW5jZVJhbmdlKG93bmVkRW50cnkuaW1wb3J0YW5jZVJhbmdlKTttZXNzYWdlQnVpbGRlci5hcHBlbmQoJyB3aXRoJyk7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kTWFwKG93bmVkRW50cnkuc2hhcmVyTmFtZVRvRW50cnksZmFsc2UsJyBubyBvdGhlciBkdW1wcycsZnVuY3Rpb24oc2hhcmVyTmFtZSxzaGFyZXJFbnRyeSl7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kKHNoYXJlck5hbWUpO2lmKHNoYXJlckVudHJ5LmNvdW50PG93bmVkQ291bnQpe21lc3NhZ2VCdWlsZGVyLmFwcGVuZFNvbWVUaW1lc3RhbXBzUXVhbnRpZmllcigpO30KLW1lc3NhZ2VCdWlsZGVyLmFwcGVuZEltcG9ydGFuY2VSYW5nZShzaGFyZXJFbnRyeS5pbXBvcnRhbmNlUmFuZ2UpO30sdGhpcyk7fSx0aGlzKTtpbmZvcy5wdXNoKHttZXNzYWdlOm1lc3NhZ2VCdWlsZGVyLmJ1aWxkKCksaWNvbjpSSUdIVFdBUkRTX09QRU5fSEVBREVEX0FSUk9XLGNvbG9yOidncmVlbid9KTt9fSxnZXRBbmRVcGRhdGVPd25lcnNoaXBFbnRyeV8obWFwLGR1bXAsbGluayxvcHRfd2l0aFNoYXJlck5hbWVUb0VudHJ5KXtjb25zdCBlbnRyeT1nZXRBbmRVcGRhdGVFbnRyeShtYXAsZHVtcC5xdWFudGlmaWVkTmFtZSxmdW5jdGlvbihuZXdFbnRyeSl7bmV3RW50cnkuaW1wb3J0YW5jZVJhbmdlPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTtpZihvcHRfd2l0aFNoYXJlck5hbWVUb0VudHJ5KXtuZXdFbnRyeS5zaGFyZXJOYW1lVG9FbnRyeT1uZXcgTWFwKCk7fX0pO2VudHJ5LmltcG9ydGFuY2VSYW5nZS5hZGRWYWx1ZShsaW5rLmltcG9ydGFuY2V8fDApO3JldHVybiBlbnRyeTt9fTtmdW5jdGlvbiBTaXplQ29sdW1uKG5hbWUsY2VsbFBhdGgsYWdncmVnYXRpb25Nb2RlKXt0ci51aS5hbmFseXNpcy5EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbi5jYWxsKHRoaXMsbmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpO30KLVNpemVDb2x1bW4ucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5hbHlzaXMuRGV0YWlsc051bWVyaWNNZW1vcnlDb2x1bW4ucHJvdG90eXBlLGdldCB0aXRsZSgpe3JldHVybiB0ci51aS5iLmNyZWF0ZUxpbmsoe3RleHRDb250ZW50OnRoaXMubmFtZSx0b29sdGlwOidNZW1vcnkgcmVxdWVzdGVkIGJ5IHRoaXMgY29tcG9uZW50JyxocmVmOlVSTF9UT19TSVpFX1ZTX0VGRkVDVElWRV9TSVpFfSk7fSxhZGRJbmZvcyhudW1lcmljcyxtZW1vcnlBbGxvY2F0b3JEdW1wcyxpbmZvcyl7aWYobWVtb3J5QWxsb2NhdG9yRHVtcHM9PT11bmRlZmluZWQpcmV0dXJuO3RoaXMuYWRkT3ZlcmxhcEluZm9fKG51bWVyaWNzLG1lbW9yeUFsbG9jYXRvckR1bXBzLGluZm9zKTt0aGlzLmFkZFByb3ZpZGVkU2l6ZVdhcm5pbmdJbmZvc18obnVtZXJpY3MsbWVtb3J5QWxsb2NhdG9yRHVtcHMsaW5mb3MpO30sYWRkT3ZlcmxhcEluZm9fKG51bWVyaWNzLG1lbW9yeUFsbG9jYXRvckR1bXBzLGluZm9zKXtjb25zdCBzaWJsaW5nTmFtZVRvRW50cnk9bmV3IE1hcCgpO2ZvcihsZXQgaT0wO2k8bnVtZXJpY3MubGVuZ3RoO2krKyl7aWYobnVtZXJpY3NbaV09PT11bmRlZmluZWQpY29udGludWU7Y29uc3QgZHVtcD1tZW1vcnlBbGxvY2F0b3JEdW1wc1tpXTtpZihkdW1wPT09U1VCQUxMT0NBVElPTl9DT05URVhUKXtyZXR1cm47fQotY29uc3Qgb3duZWRCeVNpYmxpbmdTaXplcz1kdW1wLm93bmVkQnlTaWJsaW5nU2l6ZXM7Zm9yKGNvbnN0IHNpYmxpbmdEdW1wIG9mIG93bmVkQnlTaWJsaW5nU2l6ZXMua2V5cygpKXtjb25zdCBzaWJsaW5nTmFtZT1zaWJsaW5nRHVtcC5uYW1lO2dldEFuZFVwZGF0ZUVudHJ5KHNpYmxpbmdOYW1lVG9FbnRyeSxzaWJsaW5nTmFtZSxmdW5jdGlvbihuZXdFbnRyeSl7aWYobnVtZXJpY3MubGVuZ3RoPT09MSl7bmV3RW50cnkuc2l6ZT1vd25lZEJ5U2libGluZ1NpemVzLmdldChzaWJsaW5nRHVtcCk7fX0pO319Ci1pZihzaWJsaW5nTmFtZVRvRW50cnkuc2l6ZT4wKXtjb25zdCBtZXNzYWdlQnVpbGRlcj1uZXcgU2l6ZUluZm9NZXNzYWdlQnVpbGRlcigpO21lc3NhZ2VCdWlsZGVyLmFwcGVuZCgnb3ZlcmxhcHMgd2l0aCBpdHMgc2libGluZycpO21lc3NhZ2VCdWlsZGVyLmFwcGVuZE1hcChzaWJsaW5nTmFtZVRvRW50cnksdHJ1ZSx1bmRlZmluZWQsZnVuY3Rpb24oc2libGluZ05hbWUsc2libGluZ0VudHJ5KXttZXNzYWdlQnVpbGRlci5hcHBlbmQoJ1wnJyxzaWJsaW5nTmFtZSwnXCcnKTttZXNzYWdlQnVpbGRlci5hcHBlbmRTaXplSWZEZWZpbmVkKHNpYmxpbmdFbnRyeS5zaXplKTtpZihzaWJsaW5nRW50cnkuY291bnQ8bnVtZXJpY3MubGVuZ3RoKXttZXNzYWdlQnVpbGRlci5hcHBlbmRTb21lVGltZXN0YW1wc1F1YW50aWZpZXIoKTt9fSx0aGlzKTtpbmZvcy5wdXNoKHttZXNzYWdlOm1lc3NhZ2VCdWlsZGVyLmJ1aWxkKCksaWNvbjpDSVJDTEVEX0xBVElOX1NNQUxMX0xFVFRFUl9JLGNvbG9yOidibHVlJ30pO319LGFkZFByb3ZpZGVkU2l6ZVdhcm5pbmdJbmZvc18obnVtZXJpY3MsbWVtb3J5QWxsb2NhdG9yRHVtcHMsaW5mb3Mpe2NvbnN0IGluZm9UeXBlVG9FbnRyeT1uZXcgTWFwKCk7Zm9yKGxldCBpPTA7aTxudW1lcmljcy5sZW5ndGg7aSsrKXtpZihudW1lcmljc1tpXT09PXVuZGVmaW5lZCljb250aW51ZTtjb25zdCBkdW1wPW1lbW9yeUFsbG9jYXRvckR1bXBzW2ldO2lmKGR1bXA9PT1TVUJBTExPQ0FUSU9OX0NPTlRFWFQpe3JldHVybjt9Ci1kdW1wLmluZm9zLmZvckVhY2goZnVuY3Rpb24oZHVtcEluZm8pe2dldEFuZFVwZGF0ZUVudHJ5KGluZm9UeXBlVG9FbnRyeSxkdW1wSW5mby50eXBlLGZ1bmN0aW9uKG5ld0VudHJ5KXtpZihudW1lcmljcy5sZW5ndGg9PT0xKXtuZXdFbnRyeS5wcm92aWRlZFNpemU9ZHVtcEluZm8ucHJvdmlkZWRTaXplO25ld0VudHJ5LmRlcGVuZGVuY3lTaXplPWR1bXBJbmZvLmRlcGVuZGVuY3lTaXplO319KTt9KTt9Ci1mb3IoY29uc3QgaW5mb1R5cGUgb2YgaW5mb1R5cGVUb0VudHJ5LmtleXMoKSl7Y29uc3QgZW50cnk9aW5mb1R5cGVUb0VudHJ5LmdldChpbmZvVHlwZSk7Y29uc3QgbWVzc2FnZUJ1aWxkZXI9bmV3IFNpemVJbmZvTWVzc2FnZUJ1aWxkZXIoKTttZXNzYWdlQnVpbGRlci5hcHBlbmQoJ3Byb3ZpZGVkIHNpemUnKTttZXNzYWdlQnVpbGRlci5hcHBlbmRTaXplSWZEZWZpbmVkKGVudHJ5LnByb3ZpZGVkU2l6ZSk7bGV0IGRlcGVuZGVuY3lOYW1lO3N3aXRjaChpbmZvVHlwZSl7Y2FzZSBQUk9WSURFRF9TSVpFX0xFU1NfVEhBTl9BR0dSRUdBVEVEX0NISUxEUkVOOmRlcGVuZGVuY3lOYW1lPSd0aGUgYWdncmVnYXRlZCBzaXplIG9mIHRoZSBjaGlsZHJlbic7YnJlYWs7Y2FzZSBQUk9WSURFRF9TSVpFX0xFU1NfVEhBTl9MQVJHRVNUX09XTkVSOmRlcGVuZGVuY3lOYW1lPSd0aGUgc2l6ZSBvZiB0aGUgbGFyZ2VzdCBvd25lcic7YnJlYWs7ZGVmYXVsdDpkZXBlbmRlbmN5TmFtZT0nYW4gdW5rbm93biBkZXBlbmRlbmN5JzticmVhazt9Ci1tZXNzYWdlQnVpbGRlci5hcHBlbmQoJyB3YXMgbGVzcyB0aGFuICcsZGVwZW5kZW5jeU5hbWUpO21lc3NhZ2VCdWlsZGVyLmFwcGVuZFNpemVJZkRlZmluZWQoZW50cnkuZGVwZW5kZW5jeVNpemUpO2lmKGVudHJ5LmNvdW50PG51bWVyaWNzLmxlbmd0aCl7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kU29tZVRpbWVzdGFtcHNRdWFudGlmaWVyKCk7fQotaW5mb3MucHVzaCh0ci51aS5hbmFseXNpcy5jcmVhdGVXYXJuaW5nSW5mbyhtZXNzYWdlQnVpbGRlci5idWlsZCgpKSk7fX19O2NvbnN0IE5VTUVSSUNfQ09MVU1OX1JVTEVTPVt7Y29uZGl0aW9uOnRyLm1vZGVsLk1lbW9yeUFsbG9jYXRvckR1bXAuRUZGRUNUSVZFX1NJWkVfTlVNRVJJQ19OQU1FLGltcG9ydGFuY2U6MTAsY29sdW1uQ29uc3RydWN0b3I6RWZmZWN0aXZlU2l6ZUNvbHVtbn0se2NvbmRpdGlvbjp0ci5tb2RlbC5NZW1vcnlBbGxvY2F0b3JEdW1wLlNJWkVfTlVNRVJJQ19OQU1FLGltcG9ydGFuY2U6OSxjb2x1bW5Db25zdHJ1Y3RvcjpTaXplQ29sdW1ufSx7Y29uZGl0aW9uOidwYWdlX3NpemUnLGltcG9ydGFuY2U6MCxjb2x1bW5Db25zdHJ1Y3Rvcjp0ci51aS5hbmFseXNpcy5EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbn0se2NvbmRpdGlvbjovc2l6ZS8saW1wb3J0YW5jZTo1LGNvbHVtbkNvbnN0cnVjdG9yOnRyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1ufSx7aW1wb3J0YW5jZTowLGNvbHVtbkNvbnN0cnVjdG9yOnRyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1ufV07Y29uc3QgRElBR05PU1RJQ19DT0xVTU5fUlVMRVM9W3tpbXBvcnRhbmNlOjAsY29sdW1uQ29uc3RydWN0b3I6dHIudWkuYW5hbHlzaXMuU3RyaW5nTWVtb3J5Q29sdW1ufV07UG9seW1lcih7aXM6J3RyLXVpLWEtbWVtb3J5LWR1bXAtYWxsb2NhdG9yLWRldGFpbHMtcGFuZScsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5TdGFja2VkUGFuZV0sY3JlYXRlZCgpe3RoaXMubWVtb3J5QWxsb2NhdG9yRHVtcHNfPXVuZGVmaW5lZDt0aGlzLmhlYXBEdW1wc189dW5kZWZpbmVkO3RoaXMuYWdncmVnYXRpb25Nb2RlXz11bmRlZmluZWQ7fSxyZWFkeSgpe3RoaXMuJC50YWJsZS5zZWxlY3Rpb25Nb2RlPXRyLnVpLmIuVGFibGVGb3JtYXQuU2VsZWN0aW9uTW9kZS5ST1c7fSxzZXQgbWVtb3J5QWxsb2NhdG9yRHVtcHMobWVtb3J5QWxsb2NhdG9yRHVtcHMpe3RoaXMubWVtb3J5QWxsb2NhdG9yRHVtcHNfPW1lbW9yeUFsbG9jYXRvckR1bXBzO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sZ2V0IG1lbW9yeUFsbG9jYXRvckR1bXBzKCl7cmV0dXJuIHRoaXMubWVtb3J5QWxsb2NhdG9yRHVtcHNfO30sc2V0IGhlYXBEdW1wcyhoZWFwRHVtcHMpe3RoaXMuaGVhcER1bXBzXz1oZWFwRHVtcHM7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxzZXQgYWdncmVnYXRpb25Nb2RlKGFnZ3JlZ2F0aW9uTW9kZSl7dGhpcy5hZ2dyZWdhdGlvbk1vZGVfPWFnZ3JlZ2F0aW9uTW9kZTt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LGdldCBhZ2dyZWdhdGlvbk1vZGUoKXtyZXR1cm4gdGhpcy5hZ2dyZWdhdGlvbk1vZGVfO30sb25SZWJ1aWxkXygpe2lmKHRoaXMubWVtb3J5QWxsb2NhdG9yRHVtcHNfPT09dW5kZWZpbmVkfHx0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzXy5sZW5ndGg9PT0wKXt0aGlzLiQuaW5mb190ZXh0LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLiQudGFibGUuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnRhYmxlLmNsZWFyKCk7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt0aGlzLmNoaWxkUGFuZUJ1aWxkZXI9dW5kZWZpbmVkO3JldHVybjt9Ci10aGlzLiQuaW5mb190ZXh0LnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC50YWJsZS5zdHlsZS5kaXNwbGF5PSdibG9jayc7Y29uc3Qgcm93cz10aGlzLmNyZWF0ZVJvd3NfKCk7Y29uc3QgY29sdW1ucz10aGlzLmNyZWF0ZUNvbHVtbnNfKHJvd3MpO3Jvd3MuZm9yRWFjaChmdW5jdGlvbihyb290Um93KXt0ci51aS5hbmFseXNpcy5hZ2dyZWdhdGVUYWJsZVJvd0NlbGxzUmVjdXJzaXZlbHkocm9vdFJvdyxjb2x1bW5zLGZ1bmN0aW9uKGNvbnRleHRzKXtyZXR1cm4gY29udGV4dHMhPT11bmRlZmluZWQmJmNvbnRleHRzLnNvbWUoZnVuY3Rpb24oY29udGV4dCl7cmV0dXJuIGNvbnRleHQ9PT1TVUJBTExPQ0FUSU9OX0NPTlRFWFQ7fSk7fSk7fSk7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1yb3dzO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9Y29sdW1uczt0aGlzLiQudGFibGUucmVidWlsZCgpO3RyLnVpLmFuYWx5c2lzLmV4cGFuZFRhYmxlUm93c1JlY3Vyc2l2ZWx5KHRoaXMuJC50YWJsZSk7aWYodGhpcy5oZWFwRHVtcHNfPT09dW5kZWZpbmVkKXt0aGlzLmNoaWxkUGFuZUJ1aWxkZXI9dW5kZWZpbmVkO31lbHNle3RoaXMuY2hpbGRQYW5lQnVpbGRlcj1mdW5jdGlvbigpe2NvbnN0IHBhbmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtcGFuZScpO3BhbmUuaGVhcER1bXBzPXRoaXMuaGVhcER1bXBzXztwYW5lLmFnZ3JlZ2F0aW9uTW9kZT10aGlzLmFnZ3JlZ2F0aW9uTW9kZV87cmV0dXJuIHBhbmU7fS5iaW5kKHRoaXMpO319LGNyZWF0ZVJvd3NfKCl7cmV0dXJuW3RoaXMuY3JlYXRlQWxsb2NhdG9yUm93UmVjdXJzaXZlbHlfKHRoaXMubWVtb3J5QWxsb2NhdG9yRHVtcHNfKV07fSxjcmVhdGVBbGxvY2F0b3JSb3dSZWN1cnNpdmVseV8oZHVtcHMpe2NvbnN0IGRlZmluZWREdW1wPWR1bXBzLmZpbmQoeD0+eCk7Y29uc3QgdGl0bGU9ZGVmaW5lZER1bXAubmFtZTtjb25zdCBmdWxsTmFtZT1kZWZpbmVkRHVtcC5mdWxsTmFtZTtjb25zdCBudW1lcmljQ2VsbHM9dHIudWkuYW5hbHlzaXMuY3JlYXRlQ2VsbHMoZHVtcHMsZnVuY3Rpb24oZHVtcCl7cmV0dXJuIGR1bXAubnVtZXJpY3M7fSk7Y29uc3QgZGlhZ25vc3RpY0NlbGxzPXRyLnVpLmFuYWx5c2lzLmNyZWF0ZUNlbGxzKGR1bXBzLGZ1bmN0aW9uKGR1bXApe3JldHVybiBkdW1wLmRpYWdub3N0aWNzO30pO2xldCBzdWJhbGxvY2F0ZWRCeT11bmRlZmluZWQ7aWYodGl0bGUuc3RhcnRzV2l0aCgnX18nKSl7Zm9yKGxldCBpPTA7aTxkdW1wcy5sZW5ndGg7aSsrKXtjb25zdCBkdW1wPWR1bXBzW2ldO2lmKGR1bXA9PT11bmRlZmluZWR8fGR1bXAub3duZWRCeS5sZW5ndGg9PT0wKXtjb250aW51ZTt9Ci1jb25zdCBvd25lckR1bXA9ZHVtcC5vd25lZEJ5WzBdLnNvdXJjZTtpZihkdW1wLm93bmVkQnkubGVuZ3RoPjF8fGR1bXAuY2hpbGRyZW4ubGVuZ3RoPjB8fG93bmVyRHVtcC5jb250YWluZXJNZW1vcnlEdW1wIT09ZHVtcC5jb250YWluZXJNZW1vcnlEdW1wKXtzdWJhbGxvY2F0ZWRCeT11bmRlZmluZWQ7YnJlYWs7fQotaWYoc3ViYWxsb2NhdGVkQnk9PT11bmRlZmluZWQpe3N1YmFsbG9jYXRlZEJ5PW93bmVyRHVtcC5mdWxsTmFtZTt9ZWxzZSBpZihzdWJhbGxvY2F0ZWRCeSE9PW93bmVyRHVtcC5mdWxsTmFtZSl7c3ViYWxsb2NhdGVkQnk9dW5kZWZpbmVkO2JyZWFrO319fQotY29uc3Qgcm93PXt0aXRsZSxmdWxsTmFtZXM6W2Z1bGxOYW1lXSxjb250ZXh0czpkdW1wcyxudW1lcmljQ2VsbHMsZGlhZ25vc3RpY0NlbGxzLHN1YmFsbG9jYXRlZEJ5fTtjb25zdCBjaGlsZER1bXBOYW1lVG9EdW1wcz10ci5iLmludmVydEFycmF5T2ZEaWN0cyhkdW1wcyxmdW5jdGlvbihkdW1wKXtjb25zdCByZXN1bHRzPXt9O2Zvcihjb25zdCBjaGlsZCBvZiBkdW1wLmNoaWxkcmVuKXtyZXN1bHRzW2NoaWxkLm5hbWVdPWNoaWxkO30KLXJldHVybiByZXN1bHRzO30pO2NvbnN0IHN1YlJvd3M9W107bGV0IHN1YmFsbG9jYXRpb25DbGFzc2lmaWNhdGlvblJvb3ROb2RlPXVuZGVmaW5lZDtmb3IoY29uc3QgY2hpbGREdW1wcyBvZiBPYmplY3QudmFsdWVzKGNoaWxkRHVtcE5hbWVUb0R1bXBzKSl7Y29uc3QgY2hpbGRSb3c9dGhpcy5jcmVhdGVBbGxvY2F0b3JSb3dSZWN1cnNpdmVseV8oY2hpbGREdW1wcyk7aWYoY2hpbGRSb3cuc3ViYWxsb2NhdGVkQnk9PT11bmRlZmluZWQpe3N1YlJvd3MucHVzaChjaGlsZFJvdyk7fWVsc2V7c3ViYWxsb2NhdGlvbkNsYXNzaWZpY2F0aW9uUm9vdE5vZGU9dGhpcy5jbGFzc2lmeVN1YmFsbG9jYXRpb25Sb3dfKGNoaWxkUm93LHN1YmFsbG9jYXRpb25DbGFzc2lmaWNhdGlvblJvb3ROb2RlKTt9fQotaWYoc3ViYWxsb2NhdGlvbkNsYXNzaWZpY2F0aW9uUm9vdE5vZGUhPT11bmRlZmluZWQpe2NvbnN0IHN1YmFsbG9jYXRpb25Sb3c9dGhpcy5jcmVhdGVTdWJhbGxvY2F0aW9uUm93UmVjdXJzaXZlbHlfKCdzdWJhbGxvY2F0aW9ucycsc3ViYWxsb2NhdGlvbkNsYXNzaWZpY2F0aW9uUm9vdE5vZGUpO3N1YlJvd3MucHVzaChzdWJhbGxvY2F0aW9uUm93KTt9Ci1pZihzdWJSb3dzLmxlbmd0aD4wKXtyb3cuc3ViUm93cz1zdWJSb3dzO30KLXJldHVybiByb3c7fSxjbGFzc2lmeVN1YmFsbG9jYXRpb25Sb3dfKHN1YmFsbG9jYXRpb25Sb3cscm9vdE5vZGUpe2lmKHJvb3ROb2RlPT09dW5kZWZpbmVkKXtyb290Tm9kZT17Y2hpbGRyZW46e30scm93OnVuZGVmaW5lZH07fQotY29uc3Qgc3ViYWxsb2NhdGlvbkxldmVscz1zdWJhbGxvY2F0aW9uUm93LnN1YmFsbG9jYXRlZEJ5LnNwbGl0KCcvJyk7bGV0IGN1cnJlbnROb2RlPXJvb3ROb2RlO2ZvcihsZXQgaT0wO2k8c3ViYWxsb2NhdGlvbkxldmVscy5sZW5ndGg7aSsrKXtjb25zdCBzdWJhbGxvY2F0aW9uTGV2ZWw9c3ViYWxsb2NhdGlvbkxldmVsc1tpXTtsZXQgbmV4dE5vZGU9Y3VycmVudE5vZGUuY2hpbGRyZW5bc3ViYWxsb2NhdGlvbkxldmVsXTtpZihuZXh0Tm9kZT09PXVuZGVmaW5lZCl7Y3VycmVudE5vZGUuY2hpbGRyZW5bc3ViYWxsb2NhdGlvbkxldmVsXT1uZXh0Tm9kZT17Y2hpbGRyZW46e30scm93OnVuZGVmaW5lZH07fQotY3VycmVudE5vZGU9bmV4dE5vZGU7fQotY29uc3QgZXhpc3RpbmdSb3c9Y3VycmVudE5vZGUucm93O2lmKGV4aXN0aW5nUm93IT09dW5kZWZpbmVkKXtmb3IobGV0IGk9MDtpPHN1YmFsbG9jYXRpb25Sb3cuY29udGV4dHMubGVuZ3RoO2krKyl7Y29uc3QgbmV3Q29udGV4dD1zdWJhbGxvY2F0aW9uUm93LmNvbnRleHRzW2ldO2lmKG5ld0NvbnRleHQ9PT11bmRlZmluZWQpY29udGludWU7aWYoZXhpc3RpbmdSb3cuY29udGV4dHNbaV0hPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTXVsdGlwbGUgc3ViYWxsb2NhdGlvbnMgd2l0aCB0aGUgc2FtZSBvd25lciBuYW1lJyk7fQotZXhpc3RpbmdSb3cuY29udGV4dHNbaV09bmV3Q29udGV4dDtbJ251bWVyaWNDZWxscycsJ2RpYWdub3N0aWNDZWxscyddLmZvckVhY2goZnVuY3Rpb24oY2VsbEtleSl7Y29uc3Qgc3ViYWxsb2NhdGlvbkNlbGxzPXN1YmFsbG9jYXRpb25Sb3dbY2VsbEtleV07aWYoc3ViYWxsb2NhdGlvbkNlbGxzPT09dW5kZWZpbmVkKXJldHVybjtmb3IoY29uc3RbY2VsbE5hbWUsY2VsbF1vZiBPYmplY3QuZW50cmllcyhzdWJhbGxvY2F0aW9uQ2VsbHMpKXtpZihjZWxsPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IGZpZWxkcz1jZWxsLmZpZWxkcztpZihmaWVsZHM9PT11bmRlZmluZWQpY29udGludWU7Y29uc3QgZmllbGQ9ZmllbGRzW2ldO2lmKGZpZWxkPT09dW5kZWZpbmVkKWNvbnRpbnVlO2xldCBleGlzdGluZ0NlbGxzPWV4aXN0aW5nUm93W2NlbGxLZXldO2lmKGV4aXN0aW5nQ2VsbHM9PT11bmRlZmluZWQpe2V4aXN0aW5nQ2VsbHM9e307ZXhpc3RpbmdSb3dbY2VsbEtleV09ZXhpc3RpbmdDZWxsczt9Ci1sZXQgZXhpc3RpbmdDZWxsPWV4aXN0aW5nQ2VsbHNbY2VsbE5hbWVdO2lmKGV4aXN0aW5nQ2VsbD09PXVuZGVmaW5lZCl7ZXhpc3RpbmdDZWxsPW5ldyB0ci51aS5hbmFseXNpcy5NZW1vcnlDZWxsKG5ldyBBcnJheShmaWVsZHMubGVuZ3RoKSk7ZXhpc3RpbmdDZWxsc1tjZWxsTmFtZV09ZXhpc3RpbmdDZWxsO30KLWV4aXN0aW5nQ2VsbC5maWVsZHNbaV09ZmllbGQ7fX0pO30KLWV4aXN0aW5nUm93LmZ1bGxOYW1lcy5wdXNoLmFwcGx5KGV4aXN0aW5nUm93LmZ1bGxOYW1lcyxzdWJhbGxvY2F0aW9uUm93LmZ1bGxOYW1lcyk7fWVsc2V7Y3VycmVudE5vZGUucm93PXN1YmFsbG9jYXRpb25Sb3c7fQotcmV0dXJuIHJvb3ROb2RlO30sY3JlYXRlU3ViYWxsb2NhdGlvblJvd1JlY3Vyc2l2ZWx5XyhuYW1lLG5vZGUpe2NvbnN0IGNoaWxkQ291bnQ9T2JqZWN0LmtleXMobm9kZS5jaGlsZHJlbikubGVuZ3RoO2lmKGNoaWxkQ291bnQ9PT0wKXtpZihub2RlLnJvdz09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdTdWJhbGxvY2F0aW9uIG5vZGUgbXVzdCBoYXZlIGEgcm93IG9yIGNoaWxkcmVuJyk7fQotY29uc3Qgcm93PW5vZGUucm93O3Jvdy50aXRsZT1uYW1lO3Jvdy5zdWJhbGxvY2F0aW9uPXRydWU7cmV0dXJuIHJvdzt9Ci1jb25zdCBzdWJSb3dzPVtdO2Zvcihjb25zdFtzdWJOYW1lLHN1Yk5vZGVdb2YgT2JqZWN0LmVudHJpZXMobm9kZS5jaGlsZHJlbikpe3N1YlJvd3MucHVzaCh0aGlzLmNyZWF0ZVN1YmFsbG9jYXRpb25Sb3dSZWN1cnNpdmVseV8oc3ViTmFtZSxzdWJOb2RlKSk7fQotaWYobm9kZS5yb3chPT11bmRlZmluZWQpe2NvbnN0IHJvdz1ub2RlLnJvdztyb3cudGl0bGU9Jzx1bnNwZWNpZmllZD4nO3Jvdy5zdWJhbGxvY2F0aW9uPXRydWU7c3ViUm93cy51bnNoaWZ0KHJvdyk7fQotY29uc3QgY29udGV4dHM9bmV3IEFycmF5KHN1YlJvd3NbMF0uY29udGV4dHMubGVuZ3RoKTtmb3IobGV0IGk9MDtpPHN1YlJvd3MubGVuZ3RoO2krKyl7c3ViUm93c1tpXS5jb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uKHN1YkNvbnRleHQsaW5kZXgpe2lmKHN1YkNvbnRleHQhPT11bmRlZmluZWQpe2NvbnRleHRzW2luZGV4XT1TVUJBTExPQ0FUSU9OX0NPTlRFWFQ7fX0pO30KLXJldHVybnt0aXRsZTpuYW1lLHN1YmFsbG9jYXRpb246dHJ1ZSxjb250ZXh0cyxzdWJSb3dzfTt9LGNyZWF0ZUNvbHVtbnNfKHJvd3Mpe2NvbnN0IHRpdGxlQ29sdW1uPW5ldyBBbGxvY2F0b3JEdW1wTmFtZUNvbHVtbigpO3RpdGxlQ29sdW1uLndpZHRoPScyMDBweCc7Y29uc3QgbnVtZXJpY0NvbHVtbnM9dHIudWkuYW5hbHlzaXMuTWVtb3J5Q29sdW1uLmZyb21Sb3dzKHJvd3Mse2NlbGxLZXk6J251bWVyaWNDZWxscycsYWdncmVnYXRpb25Nb2RlOnRoaXMuYWdncmVnYXRpb25Nb2RlXyxydWxlczpOVU1FUklDX0NPTFVNTl9SVUxFU30pO2NvbnN0IGRpYWdub3N0aWNDb2x1bW5zPXRyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5mcm9tUm93cyhyb3dzLHtjZWxsS2V5OidkaWFnbm9zdGljQ2VsbHMnLGFnZ3JlZ2F0aW9uTW9kZTp0aGlzLmFnZ3JlZ2F0aW9uTW9kZV8scnVsZXM6RElBR05PU1RJQ19DT0xVTU5fUlVMRVN9KTtjb25zdCBmaWVsZENvbHVtbnM9bnVtZXJpY0NvbHVtbnMuY29uY2F0KGRpYWdub3N0aWNDb2x1bW5zKTt0ci51aS5hbmFseXNpcy5NZW1vcnlDb2x1bW4uc3BhY2VFcXVhbGx5KGZpZWxkQ29sdW1ucyk7Y29uc3QgY29sdW1ucz1bdGl0bGVDb2x1bW5dLmNvbmNhdChmaWVsZENvbHVtbnMpO3JldHVybiBjb2x1bW5zO319KTtyZXR1cm57U1VCQUxMT0NBVElPTl9DT05URVhULEFsbG9jYXRvckR1bXBOYW1lQ29sdW1uLEVmZmVjdGl2ZVNpemVDb2x1bW4sU2l6ZUNvbHVtbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5hbHlzaXMnLGZ1bmN0aW9uKCl7Y29uc3QgU2NhbGFyPXRyLmIuU2NhbGFyO2NvbnN0IHNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcjtjb25zdCBDT05TVEFOVF9DT0xVTU5fUlVMRVM9W3tjb25kaXRpb246J1N0YXJ0IGFkZHJlc3MnLGltcG9ydGFuY2U6MCxjb2x1bW5Db25zdHJ1Y3Rvcjp0ci51aS5hbmFseXNpcy5TdHJpbmdNZW1vcnlDb2x1bW59XTtjb25zdCBWQVJJQUJMRV9DT0xVTU5fUlVMRVM9W3tjb25kaXRpb246J1ZpcnR1YWwgc2l6ZScsaW1wb3J0YW5jZTo3LGNvbHVtbkNvbnN0cnVjdG9yOnRyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1ufSx7Y29uZGl0aW9uOidQcm90ZWN0aW9uIGZsYWdzJyxpbXBvcnRhbmNlOjYsY29sdW1uQ29uc3RydWN0b3I6dHIudWkuYW5hbHlzaXMuU3RyaW5nTWVtb3J5Q29sdW1ufSx7Y29uZGl0aW9uOidQU1MnLGltcG9ydGFuY2U6NSxjb2x1bW5Db25zdHJ1Y3Rvcjp0ci51aS5hbmFseXNpcy5EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbn0se2NvbmRpdGlvbjonUHJpdmF0ZSBkaXJ0eScsaW1wb3J0YW5jZTo0LGNvbHVtbkNvbnN0cnVjdG9yOnRyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1ufSx7Y29uZGl0aW9uOidQcml2YXRlIGNsZWFuJyxpbXBvcnRhbmNlOjMsY29sdW1uQ29uc3RydWN0b3I6dHIudWkuYW5hbHlzaXMuRGV0YWlsc051bWVyaWNNZW1vcnlDb2x1bW59LHtjb25kaXRpb246J1NoYXJlZCBkaXJ0eScsaW1wb3J0YW5jZToyLGNvbHVtbkNvbnN0cnVjdG9yOnRyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1ufSx7Y29uZGl0aW9uOidTaGFyZWQgY2xlYW4nLGltcG9ydGFuY2U6MSxjb2x1bW5Db25zdHJ1Y3Rvcjp0ci51aS5hbmFseXNpcy5EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbn0se2NvbmRpdGlvbjonU3dhcHBlZCcsaW1wb3J0YW5jZTowLGNvbHVtbkNvbnN0cnVjdG9yOnRyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1ufV07Y29uc3QgQllURV9TVEFUX0NPTFVNTl9NQVA9eydwcm9wb3J0aW9uYWxSZXNpZGVudCc6J1BTUycsJ3ByaXZhdGVEaXJ0eVJlc2lkZW50JzonUHJpdmF0ZSBkaXJ0eScsJ3ByaXZhdGVDbGVhblJlc2lkZW50JzonUHJpdmF0ZSBjbGVhbicsJ3NoYXJlZERpcnR5UmVzaWRlbnQnOidTaGFyZWQgZGlydHknLCdzaGFyZWRDbGVhblJlc2lkZW50JzonU2hhcmVkIGNsZWFuJywnc3dhcHBlZCc6J1N3YXBwZWQnfTtmdW5jdGlvbiBoZXhTdHJpbmcoYWRkcmVzcyxpczY0Qml0QWRkcmVzcyl7aWYoYWRkcmVzcz09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IGhleFBhZGRpbmc9aXM2NEJpdEFkZHJlc3M/JzAwMDAwMDAwMDAwMDAwMDAnOicwMDAwMDAwMCc7cmV0dXJuKGhleFBhZGRpbmcrYWRkcmVzcy50b1N0cmluZygxNikpLnN1YnN0cigtaGV4UGFkZGluZy5sZW5ndGgpO30KLWZ1bmN0aW9uIHBydW5lRW1wdHlSdWxlUm93cyhyb3cpe2lmKHJvdy5zdWJSb3dzPT09dW5kZWZpbmVkfHxyb3cuc3ViUm93cy5sZW5ndGg9PT0wKXJldHVybjtpZihyb3cuc3ViUm93c1swXS5ydWxlPT09dW5kZWZpbmVkKXtyZXR1cm47fQotcm93LnN1YlJvd3MuZm9yRWFjaChwcnVuZUVtcHR5UnVsZVJvd3MpO3Jvdy5zdWJSb3dzPXJvdy5zdWJSb3dzLmZpbHRlcihmdW5jdGlvbihzdWJSb3cpe3JldHVybiBzdWJSb3cuc3ViUm93cy5sZW5ndGg+MDt9KTt9Ci1Qb2x5bWVyKHtpczondHItdWktYS1tZW1vcnktZHVtcC12bS1yZWdpb25zLWRldGFpbHMtcGFuZScsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5TdGFja2VkUGFuZV0sY3JlYXRlZCgpe3RoaXMudm1SZWdpb25zXz11bmRlZmluZWQ7dGhpcy5hZ2dyZWdhdGlvbk1vZGVfPXVuZGVmaW5lZDt9LHJlYWR5KCl7dGhpcy4kLnRhYmxlLnNlbGVjdGlvbk1vZGU9dHIudWkuYi5UYWJsZUZvcm1hdC5TZWxlY3Rpb25Nb2RlLlJPVzt9LHNldCB2bVJlZ2lvbnModm1SZWdpb25zKXt0aGlzLnZtUmVnaW9uc189dm1SZWdpb25zO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sZ2V0IHZtUmVnaW9ucygpe3JldHVybiB0aGlzLnZtUmVnaW9uc187fSxzZXQgYWdncmVnYXRpb25Nb2RlKGFnZ3JlZ2F0aW9uTW9kZSl7dGhpcy5hZ2dyZWdhdGlvbk1vZGVfPWFnZ3JlZ2F0aW9uTW9kZTt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LGdldCBhZ2dyZWdhdGlvbk1vZGUoKXtyZXR1cm4gdGhpcy5hZ2dyZWdhdGlvbk1vZGVfO30sb25SZWJ1aWxkXygpe2lmKHRoaXMudm1SZWdpb25zXz09PXVuZGVmaW5lZHx8dGhpcy52bVJlZ2lvbnNfLmxlbmd0aD09PTApe3RoaXMuJC5pbmZvX3RleHQuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC50YWJsZS5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQudGFibGUuY2xlYXIoKTt0aGlzLiQudGFibGUucmVidWlsZCgpO3JldHVybjt9Ci10aGlzLiQuaW5mb190ZXh0LnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC50YWJsZS5zdHlsZS5kaXNwbGF5PSdibG9jayc7Y29uc3Qgcm93cz10aGlzLmNyZWF0ZVJvd3NfKHRoaXMudm1SZWdpb25zXyk7Y29uc3QgY29sdW1ucz10aGlzLmNyZWF0ZUNvbHVtbnNfKHJvd3MpO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9cm93czt0aGlzLiQudGFibGUudGFibGVDb2x1bW5zPWNvbHVtbnM7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt0ci51aS5hbmFseXNpcy5leHBhbmRUYWJsZVJvd3NSZWN1cnNpdmVseSh0aGlzLiQudGFibGUpO30sY3JlYXRlUm93c18odGltZVRvVm1SZWdpb25UcmVlKXtjb25zdCBpczY0Qml0QWRkcmVzcz10aW1lVG9WbVJlZ2lvblRyZWUuc29tZShmdW5jdGlvbih2bVJlZ2lvblRyZWUpe2lmKHZtUmVnaW9uVHJlZT09PXVuZGVmaW5lZClyZXR1cm4gZmFsc2U7cmV0dXJuIHZtUmVnaW9uVHJlZS5zb21lUmVnaW9uKGZ1bmN0aW9uKHJlZ2lvbil7aWYocmVnaW9uLnN0YXJ0QWRkcmVzcz09PXVuZGVmaW5lZClyZXR1cm4gZmFsc2U7cmV0dXJuIHJlZ2lvbi5zdGFydEFkZHJlc3M+PTQyOTQ5NjcyOTY7fSk7fSk7cmV0dXJuW3RoaXMuY3JlYXRlQ2xhc3NpZmljYXRpb25Ob2RlUm93KHRpbWVUb1ZtUmVnaW9uVHJlZSxpczY0Qml0QWRkcmVzcyldO30sY3JlYXRlQ2xhc3NpZmljYXRpb25Ob2RlUm93KHRpbWVUb05vZGUsaXM2NEJpdEFkZHJlc3Mpe2NvbnN0IGRlZmluZWROb2RlPXRpbWVUb05vZGUuZmluZCh4PT54KTtjb25zdCBjaGlsZE5vZGVJZFRvVGltZVRvTm9kZT1PYmplY3QudmFsdWVzKHRyLmIuaW52ZXJ0QXJyYXlPZkRpY3RzKHRpbWVUb05vZGUsZnVuY3Rpb24obm9kZSl7Y29uc3QgY2hpbGRyZW49bm9kZS5jaGlsZHJlbjtpZihjaGlsZHJlbj09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IGNoaWxkTWFwPXt9O2NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGROb2RlKXtpZighY2hpbGROb2RlLmhhc1JlZ2lvbnMpcmV0dXJuO2NoaWxkTWFwW2NoaWxkTm9kZS50aXRsZV09Y2hpbGROb2RlO30pO3JldHVybiBjaGlsZE1hcDt9KSk7Y29uc3QgY2hpbGROb2RlU3ViUm93cz1jaGlsZE5vZGVJZFRvVGltZVRvTm9kZS5tYXAoZnVuY3Rpb24odGltZVRvQ2hpbGROb2RlKXtyZXR1cm4gdGhpcy5jcmVhdGVDbGFzc2lmaWNhdGlvbk5vZGVSb3codGltZVRvQ2hpbGROb2RlLGlzNjRCaXRBZGRyZXNzKTt9LHRoaXMpO2NvbnN0IHJlZ2lvbklkVG9UaW1lVG9SZWdpb249T2JqZWN0LnZhbHVlcyh0ci5iLmludmVydEFycmF5T2ZEaWN0cyh0aW1lVG9Ob2RlLGZ1bmN0aW9uKG5vZGUpe2NvbnN0IHJlZ2lvbnM9bm9kZS5yZWdpb25zO2lmKHJlZ2lvbnM9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCByZXN1bHRzPXt9O2Zvcihjb25zdCByZWdpb24gb2YgcmVnaW9ucyl7cmVzdWx0c1tyZWdpb24udW5pcXVlSWRXaXRoaW5Qcm9jZXNzXT1yZWdpb247fQotcmV0dXJuIHJlc3VsdHM7fSkpO2NvbnN0IHJlZ2lvblN1YlJvd3M9cmVnaW9uSWRUb1RpbWVUb1JlZ2lvbi5tYXAoZnVuY3Rpb24odGltZVRvUmVnaW9uKXtyZXR1cm4gdGhpcy5jcmVhdGVSZWdpb25Sb3dfKHRpbWVUb1JlZ2lvbixpczY0Qml0QWRkcmVzcyk7fSx0aGlzKTtjb25zdCBzdWJSb3dzPWNoaWxkTm9kZVN1YlJvd3MuY29uY2F0KHJlZ2lvblN1YlJvd3MpO3JldHVybnt0aXRsZTpkZWZpbmVkTm9kZS50aXRsZSxjb250ZXh0czp0aW1lVG9Ob2RlLHZhcmlhYmxlQ2VsbHM6dGhpcy5jcmVhdGVWYXJpYWJsZUNlbGxzXyh0aW1lVG9Ob2RlKSxzdWJSb3dzfTt9LGNyZWF0ZVJlZ2lvblJvd18odGltZVRvUmVnaW9uLGlzNjRCaXRBZGRyZXNzKXtjb25zdCBkZWZpbmVkUmVnaW9uPXRpbWVUb1JlZ2lvbi5maW5kKHg9PngpO3JldHVybnt0aXRsZTpkZWZpbmVkUmVnaW9uLm1hcHBlZEZpbGUsY29udGV4dHM6dGltZVRvUmVnaW9uLGNvbnN0YW50Q2VsbHM6dGhpcy5jcmVhdGVDb25zdGFudENlbGxzXyhkZWZpbmVkUmVnaW9uLGlzNjRCaXRBZGRyZXNzKSx2YXJpYWJsZUNlbGxzOnRoaXMuY3JlYXRlVmFyaWFibGVDZWxsc18odGltZVRvUmVnaW9uKX07fSxjcmVhdGVDb25zdGFudENlbGxzXyhkZWZpbmVkUmVnaW9uLGlzNjRCaXRBZGRyZXNzKXtyZXR1cm4gdHIudWkuYW5hbHlzaXMuY3JlYXRlQ2VsbHMoW2RlZmluZWRSZWdpb25dLGZ1bmN0aW9uKHJlZ2lvbil7Y29uc3Qgc3RhcnRBZGRyZXNzPXJlZ2lvbi5zdGFydEFkZHJlc3M7aWYoc3RhcnRBZGRyZXNzPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7cmV0dXJueydTdGFydCBhZGRyZXNzJzpoZXhTdHJpbmcoc3RhcnRBZGRyZXNzLGlzNjRCaXRBZGRyZXNzKX07fSk7fSxjcmVhdGVWYXJpYWJsZUNlbGxzXyh0aW1lVG9SZWdpb24pe3JldHVybiB0ci51aS5hbmFseXNpcy5jcmVhdGVDZWxscyh0aW1lVG9SZWdpb24sZnVuY3Rpb24ocmVnaW9uKXtjb25zdCBmaWVsZHM9e307Y29uc3Qgc2l6ZUluQnl0ZXM9cmVnaW9uLnNpemVJbkJ5dGVzO2lmKHNpemVJbkJ5dGVzIT09dW5kZWZpbmVkKXtmaWVsZHNbJ1ZpcnR1YWwgc2l6ZSddPW5ldyBTY2FsYXIoc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLHNpemVJbkJ5dGVzKTt9Ci1jb25zdCBwcm90ZWN0aW9uRmxhZ3M9cmVnaW9uLnByb3RlY3Rpb25GbGFnc1RvU3RyaW5nO2lmKHByb3RlY3Rpb25GbGFncyE9PXVuZGVmaW5lZCl7ZmllbGRzWydQcm90ZWN0aW9uIGZsYWdzJ109cHJvdGVjdGlvbkZsYWdzO30KLWZvcihjb25zdFtieXRlU3RhdE5hbWUsY29sdW1uTmFtZV1vZgotT2JqZWN0LmVudHJpZXMoQllURV9TVEFUX0NPTFVNTl9NQVApKXtjb25zdCBieXRlU3RhdD1yZWdpb24uYnl0ZVN0YXRzW2J5dGVTdGF0TmFtZV07aWYoYnl0ZVN0YXQ9PT11bmRlZmluZWQpY29udGludWU7ZmllbGRzW2NvbHVtbk5hbWVdPW5ldyBTY2FsYXIoc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLGJ5dGVTdGF0KTt9Ci1yZXR1cm4gZmllbGRzO30pO30sY3JlYXRlQ29sdW1uc18ocm93cyl7Y29uc3QgdGl0bGVDb2x1bW49bmV3IHRyLnVpLmFuYWx5c2lzLlRpdGxlQ29sdW1uKCdNYXBwZWQgZmlsZScpO3RpdGxlQ29sdW1uLndpZHRoPScyMDBweCc7Y29uc3QgY29uc3RhbnRDb2x1bW5zPXRyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5mcm9tUm93cyhyb3dzLHtjZWxsS2V5Oidjb25zdGFudENlbGxzJyxhZ2dyZWdhdGlvbk1vZGU6dW5kZWZpbmVkLHJ1bGVzOkNPTlNUQU5UX0NPTFVNTl9SVUxFU30pO2NvbnN0IHZhcmlhYmxlQ29sdW1ucz10ci51aS5hbmFseXNpcy5NZW1vcnlDb2x1bW4uZnJvbVJvd3Mocm93cyx7Y2VsbEtleTondmFyaWFibGVDZWxscycsYWdncmVnYXRpb25Nb2RlOnRoaXMuYWdncmVnYXRpb25Nb2RlXyxydWxlczpWQVJJQUJMRV9DT0xVTU5fUlVMRVN9KTtjb25zdCBmaWVsZENvbHVtbnM9Y29uc3RhbnRDb2x1bW5zLmNvbmNhdCh2YXJpYWJsZUNvbHVtbnMpO3RyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5zcGFjZUVxdWFsbHkoZmllbGRDb2x1bW5zKTtjb25zdCBjb2x1bW5zPVt0aXRsZUNvbHVtbl0uY29uY2F0KGZpZWxkQ29sdW1ucyk7cmV0dXJuIGNvbHVtbnM7fX0pO3JldHVybnt9O30pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYi1jb2xvci1sZWdlbmQnLHJlYWR5KCl7Y29uc3QgYmxhY2tTcXVhcmVDaGFyQ29kZT05NjMyO3RoaXMuJC5zcXVhcmUuaW5uZXJUZXh0PVN0cmluZy5mcm9tQ2hhckNvZGUoYmxhY2tTcXVhcmVDaGFyQ29kZSk7dGhpcy5sYWJlbF89dW5kZWZpbmVkO3RoaXMuY29tcG91bmRFdmVudFNlbGVjdGlvblN0YXRlXz10ci5tb2RlbC5Db21wb3VuZEV2ZW50U2VsZWN0aW9uU3RhdGUuTk9UX1NFTEVDVEVEO30sc2V0IGNvbXBvdW5kRXZlbnRTZWxlY3Rpb25TdGF0ZShjb21wb3VuZEV2ZW50U2VsZWN0aW9uU3RhdGUpe3RoaXMuY29tcG91bmRFdmVudFNlbGVjdGlvblN0YXRlXz1jb21wb3VuZEV2ZW50U2VsZWN0aW9uU3RhdGU7fSxnZXQgbGFiZWwoKXtyZXR1cm4gdGhpcy5sYWJlbF87fSxzZXQgbGFiZWwobGFiZWwpe2lmKGxhYmVsPT09dW5kZWZpbmVkKXt0aGlzLnNldExhYmVsQW5kQ29sb3JJZCh1bmRlZmluZWQsdW5kZWZpbmVkKTtyZXR1cm47fQotY29uc3QgY29sb3JJZD10ci5iLkNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhsYWJlbCk7dGhpcy5zZXRMYWJlbEFuZENvbG9ySWQobGFiZWwsY29sb3JJZCk7fSxzZXRMYWJlbEFuZENvbG9ySWQobGFiZWwsY29sb3JJZCl7dGhpcy5sYWJlbF89bGFiZWw7UG9seW1lci5kb20odGhpcy4kLmxhYmVsKS50ZXh0Q29udGVudD0nJztQb2x5bWVyLmRvbSh0aGlzLiQubGFiZWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuYXNIVE1MT3JUZXh0Tm9kZShsYWJlbCkpO2lmKGNvbG9ySWQ9PT11bmRlZmluZWQpe3RoaXMuJC5zcXVhcmUuc3R5bGUuY29sb3I9J2luaXRpYWwnO31lbHNle3RoaXMuJC5zcXVhcmUuc3R5bGUuY29sb3I9dHIuYi5Db2xvclNjaGVtZS5jb2xvcnNBc1N0cmluZ3NbY29sb3JJZF07fX19KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWItdmlldy1zcGVjaWZpYy1icnVzaGluZy1zdGF0ZScsZ2V0IHZpZXdJZCgpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgndmlldy1pZCcpO30sc2V0IHZpZXdJZCh2aWV3SWQpe1BvbHltZXIuZG9tKHRoaXMpLnNldEF0dHJpYnV0ZSgndmlldy1pZCcsdmlld0lkKTt9LGdldCgpe2NvbnN0IHZpZXdJZD10aGlzLnZpZXdJZDtpZighdmlld0lkKXt0aHJvdyBuZXcgRXJyb3IoJ0VsZW1lbnQgbXVzdCBoYXZlIGEgdmlldy1pZCBhdHRyaWJ1dGUhJyk7fQotY29uc3QgYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXI9dHIuYy5CcnVzaGluZ1N0YXRlQ29udHJvbGxlci5nZXRDb250cm9sbGVyRm9yRWxlbWVudCh0aGlzKTtpZighYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuZ2V0Vmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZSh2aWV3SWQpO30sc2V0KHN0YXRlKXtjb25zdCB2aWV3SWQ9dGhpcy52aWV3SWQ7aWYoIXZpZXdJZCl7dGhyb3cgbmV3IEVycm9yKCdFbGVtZW50IG11c3QgaGF2ZSBhIHZpZXctaWQgYXR0cmlidXRlIScpO30KLWNvbnN0IGJydXNoaW5nU3RhdGVDb250cm9sbGVyPXRyLmMuQnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuZ2V0Q29udHJvbGxlckZvckVsZW1lbnQodGhpcyk7aWYoIWJydXNoaW5nU3RhdGVDb250cm9sbGVyKXJldHVybjticnVzaGluZ1N0YXRlQ29udHJvbGxlci5jaGFuZ2VWaWV3U3BlY2lmaWNCcnVzaGluZ1N0YXRlKHZpZXdJZCxzdGF0ZSk7fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5hbHlzaXMnLGZ1bmN0aW9uKCl7Y29uc3QgTWVtb3J5Q29sdW1uQ29sb3JTY2hlbWU9dHIuYi5NZW1vcnlDb2x1bW5Db2xvclNjaGVtZTtjb25zdCBTY2FsYXI9dHIuYi5TY2FsYXI7Y29uc3Qgc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyPXRyLmIuVW5pdC5ieU5hbWUuc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyO2NvbnN0IFBMQVRGT1JNX1NQRUNJRklDX1RPVEFMX05BTUVfU1VGRklYPSdfYnl0ZXMnO2NvbnN0IERJU1BMQVlFRF9TSVpFX05VTUVSSUNfTkFNRT10ci5tb2RlbC5NZW1vcnlBbGxvY2F0b3JEdW1wLkRJU1BMQVlFRF9TSVpFX05VTUVSSUNfTkFNRTtjb25zdCBTT01FX1RJTUVTVEFNUFNfSU5GT19RVUFOVElGSUVSPXRyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5TT01FX1RJTUVTVEFNUFNfSU5GT19RVUFOVElGSUVSO2NvbnN0IFJJR0hUV0FSRFNfQVJST1dfV0lUSF9IT09LPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyMUFBKTtjb25zdCBSSUdIVFdBUkRTX0FSUk9XX0ZST01fQkFSPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyMUE2KTtjb25zdCBHUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE89U3RyaW5nLmZyb21DaGFyQ29kZSgweDIyNjUpO2NvbnN0IFVOTUFSUklFRF9QQVJUTkVSU0hJUF9TWU1CT0w9U3RyaW5nLmZyb21DaGFyQ29kZSgweDI2QUYpO2NvbnN0IFRSSUdSQU1fRk9SX0hFQVZFTj1TdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjYzMCk7ZnVuY3Rpb24gbGF6eU1hcChsaXN0LGZuLG9wdF90aGlzKXtvcHRfdGhpcz1vcHRfdGhpc3x8dGhpcztsZXQgcmVzdWx0PXVuZGVmaW5lZDtsaXN0LmZvckVhY2goZnVuY3Rpb24oaXRlbSxpbmRleCl7Y29uc3QgdmFsdWU9Zm4uY2FsbChvcHRfdGhpcyxpdGVtLGluZGV4KTtpZih2YWx1ZT09PXVuZGVmaW5lZClyZXR1cm47aWYocmVzdWx0PT09dW5kZWZpbmVkKXtyZXN1bHQ9bmV3IEFycmF5KGxpc3QubGVuZ3RoKTt9Ci1yZXN1bHRbaW5kZXhdPXZhbHVlO30pO3JldHVybiByZXN1bHQ7fQotZnVuY3Rpb24gUHJvY2Vzc05hbWVDb2x1bW4oKXt0ci51aS5hbmFseXNpcy5UaXRsZUNvbHVtbi5jYWxsKHRoaXMsJ1Byb2Nlc3MnKTt9Ci1Qcm9jZXNzTmFtZUNvbHVtbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5hbmFseXNpcy5UaXRsZUNvbHVtbi5wcm90b3R5cGUsZm9ybWF0VGl0bGUocm93KXtpZihyb3cuY29udGV4dHM9PT11bmRlZmluZWQpe3JldHVybiByb3cudGl0bGU7fQotY29uc3QgdGl0bGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLWNvbG9yLWxlZ2VuZCcpO3RpdGxlRWwubGFiZWw9cm93LnRpdGxlO3JldHVybiB0aXRsZUVsO319O2Z1bmN0aW9uIFVzZWRNZW1vcnlDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe3RyLnVpLmFuYWx5c2lzLk51bWVyaWNNZW1vcnlDb2x1bW4uY2FsbCh0aGlzLG5hbWUsY2VsbFBhdGgsYWdncmVnYXRpb25Nb2RlKTt9Ci1Vc2VkTWVtb3J5Q29sdW1uLkNPTE9SPU1lbW9yeUNvbHVtbkNvbG9yU2NoZW1lLmdldENvbG9yKCd1c2VkX21lbW9yeV9jb2x1bW4nKS50b1N0cmluZygpO1VzZWRNZW1vcnlDb2x1bW4uT0xERVJfQ09MT1I9TWVtb3J5Q29sdW1uQ29sb3JTY2hlbWUuZ2V0Q29sb3IoJ29sZGVyX3VzZWRfbWVtb3J5X2NvbHVtbicpLnRvU3RyaW5nKCk7VXNlZE1lbW9yeUNvbHVtbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5hbmFseXNpcy5OdW1lcmljTWVtb3J5Q29sdW1uLnByb3RvdHlwZSxnZXQgdGl0bGUoKXtyZXR1cm4gdHIudWkuYi5jcmVhdGVTcGFuKHt0ZXh0Q29udGVudDp0aGlzLm5hbWUsY29sb3I6VXNlZE1lbW9yeUNvbHVtbi5DT0xPUn0pO30sZ2V0Rm9ybWF0dGluZ0NvbnRleHQodW5pdCl7cmV0dXJue3VuaXRQcmVmaXg6dHIuYi5Vbml0UHJlZml4U2NhbGUuQklOQVJZLk1FQkl9O30sY29sb3IobnVtZXJpY3MscHJvY2Vzc01lbW9yeUR1bXBzKXtyZXR1cm4gVXNlZE1lbW9yeUNvbHVtbi5DT0xPUjt9LGdldENoaWxkUGFuZUJ1aWxkZXIocHJvY2Vzc01lbW9yeUR1bXBzKXtpZihwcm9jZXNzTWVtb3J5RHVtcHM9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCB2bVJlZ2lvbnM9bGF6eU1hcChwcm9jZXNzTWVtb3J5RHVtcHMsZnVuY3Rpb24ocG1kKXtpZihwbWQ9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gcG1kLm1vc3RSZWNlbnRWbVJlZ2lvbnM7fSk7aWYodm1SZWdpb25zPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgcGFuZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLW1lbW9yeS1kdW1wLXZtLXJlZ2lvbnMtZGV0YWlscy1wYW5lJyk7cGFuZS52bVJlZ2lvbnM9dm1SZWdpb25zO3BhbmUuYWdncmVnYXRpb25Nb2RlPXRoaXMuYWdncmVnYXRpb25Nb2RlO3JldHVybiBwYW5lO30uYmluZCh0aGlzKTt9fTtmdW5jdGlvbiBQZWFrTWVtb3J5Q29sdW1uKG5hbWUsY2VsbFBhdGgsYWdncmVnYXRpb25Nb2RlKXtVc2VkTWVtb3J5Q29sdW1uLmNhbGwodGhpcyxuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSk7fQotUGVha01lbW9yeUNvbHVtbi5wcm90b3R5cGU9e19fcHJvdG9fXzpVc2VkTWVtb3J5Q29sdW1uLnByb3RvdHlwZSxhZGRJbmZvcyhudW1lcmljcyxwcm9jZXNzTWVtb3J5RHVtcHMsaW5mb3Mpe2lmKHByb2Nlc3NNZW1vcnlEdW1wcz09PXVuZGVmaW5lZClyZXR1cm47bGV0IHJlc2V0dGFibGVWYWx1ZUNvdW50PTA7bGV0IG5vblJlc2V0dGFibGVWYWx1ZUNvdW50PTA7Zm9yKGxldCBpPTA7aTxudW1lcmljcy5sZW5ndGg7aSsrKXtpZihudW1lcmljc1tpXT09PXVuZGVmaW5lZCljb250aW51ZTtpZihwcm9jZXNzTWVtb3J5RHVtcHNbaV0uYXJlUGVha1Jlc2lkZW50Qnl0ZXNSZXNldHRhYmxlKXtyZXNldHRhYmxlVmFsdWVDb3VudCsrO31lbHNle25vblJlc2V0dGFibGVWYWx1ZUNvdW50Kys7fX0KLWlmKHJlc2V0dGFibGVWYWx1ZUNvdW50PjAmJm5vblJlc2V0dGFibGVWYWx1ZUNvdW50PjApe2luZm9zLnB1c2godHIudWkuYW5hbHlzaXMuY3JlYXRlV2FybmluZ0luZm8oJ0JvdGggcmVzZXR0YWJsZSBhbmQgJysnbm9uLXJlc2V0dGFibGUgcGVhayBSU1MgdmFsdWVzIHdlcmUgcHJvdmlkZWQgYnkgdGhlIHByb2Nlc3MnKSk7fWVsc2UgaWYocmVzZXR0YWJsZVZhbHVlQ291bnQ+MCl7aW5mb3MucHVzaCh7aWNvbjpSSUdIVFdBUkRTX0FSUk9XX1dJVEhfSE9PSyxtZXNzYWdlOidQZWFrIFJTUyBzaW5jZSBwcmV2aW91cyBtZW1vcnkgZHVtcC4nfSk7fWVsc2V7aW5mb3MucHVzaCh7aWNvbjpSSUdIVFdBUkRTX0FSUk9XX0ZST01fQkFSLG1lc3NhZ2U6J1BlYWsgUlNTIHNpbmNlIHByb2Nlc3Mgc3RhcnR1cC4gRmluZXIgZ3JhaW5lZCAnKydwZWFrcyByZXF1aXJlIGEgTGludXgga2VybmVsIHZlcnNpb24gJysKLUdSRUFURVJfVEhBTl9PUl9FUVVBTF9UTysnIDQuMC4nfSk7fX19O2Z1bmN0aW9uIEJ5dGVTdGF0Q29sdW1uKG5hbWUsY2VsbFBhdGgsYWdncmVnYXRpb25Nb2RlKXtVc2VkTWVtb3J5Q29sdW1uLmNhbGwodGhpcyxuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSk7fQotQnl0ZVN0YXRDb2x1bW4ucHJvdG90eXBlPXtfX3Byb3RvX186VXNlZE1lbW9yeUNvbHVtbi5wcm90b3R5cGUsY29sb3IobnVtZXJpY3MscHJvY2Vzc01lbW9yeUR1bXBzKXtpZihwcm9jZXNzTWVtb3J5RHVtcHM9PT11bmRlZmluZWQpe3JldHVybiBVc2VkTWVtb3J5Q29sdW1uLkNPTE9SO30KLWNvbnN0IGFsbE9sZGVyVmFsdWVzPXByb2Nlc3NNZW1vcnlEdW1wcy5ldmVyeShmdW5jdGlvbihwcm9jZXNzTWVtb3J5RHVtcCl7aWYocHJvY2Vzc01lbW9yeUR1bXA9PT11bmRlZmluZWQpcmV0dXJuIHRydWU7cmV0dXJuIXByb2Nlc3NNZW1vcnlEdW1wLmhhc093blZtUmVnaW9uczt9KTtpZihhbGxPbGRlclZhbHVlcyl7cmV0dXJuIFVzZWRNZW1vcnlDb2x1bW4uT0xERVJfQ09MT1I7fQotcmV0dXJuIFVzZWRNZW1vcnlDb2x1bW4uQ09MT1I7fSxhZGRJbmZvcyhudW1lcmljcyxwcm9jZXNzTWVtb3J5RHVtcHMsaW5mb3Mpe2lmKHByb2Nlc3NNZW1vcnlEdW1wcz09PXVuZGVmaW5lZClyZXR1cm47bGV0IG9sZGVyVmFsdWVDb3VudD0wO2ZvcihsZXQgaT0wO2k8bnVtZXJpY3MubGVuZ3RoO2krKyl7Y29uc3QgcHJvY2Vzc01lbW9yeUR1bXA9cHJvY2Vzc01lbW9yeUR1bXBzW2ldO2lmKHByb2Nlc3NNZW1vcnlEdW1wIT09dW5kZWZpbmVkJiYhcHJvY2Vzc01lbW9yeUR1bXAuaGFzT3duVm1SZWdpb25zKXtvbGRlclZhbHVlQ291bnQrKzt9fQotaWYob2xkZXJWYWx1ZUNvdW50PT09MCl7cmV0dXJuO30KLWNvbnN0IGluZm9RdWFudGlmaWVyPW9sZGVyVmFsdWVDb3VudDxudW1lcmljcy5sZW5ndGg/JyAnK1NPTUVfVElNRVNUQU1QU19JTkZPX1FVQU5USUZJRVI6Jyc7aW5mb3MucHVzaCh7bWVzc2FnZTonT2xkZXIgdmFsdWUnK2luZm9RdWFudGlmaWVyKycgKG9ubHkgaGVhdnkgKHB1cnBsZSkgbWVtb3J5IGR1bXBzIGNvbnRhaW4gbWVtb3J5IG1hcHMpLicsaWNvbjpVTk1BUlJJRURfUEFSVE5FUlNISVBfU1lNQk9MfSk7fX07VXNlZE1lbW9yeUNvbHVtbi5SVUxFUz1be2NvbmRpdGlvbjonVG90YWwgcmVzaWRlbnQnLGltcG9ydGFuY2U6MTAsY29sdW1uQ29uc3RydWN0b3I6VXNlZE1lbW9yeUNvbHVtbn0se2NvbmRpdGlvbjonUGVhayB0b3RhbCByZXNpZGVudCcsaW1wb3J0YW5jZTo5LGNvbHVtbkNvbnN0cnVjdG9yOlBlYWtNZW1vcnlDb2x1bW59LHtjb25kaXRpb246J1BTUycsaW1wb3J0YW5jZTo4LGNvbHVtbkNvbnN0cnVjdG9yOkJ5dGVTdGF0Q29sdW1ufSx7Y29uZGl0aW9uOidQcml2YXRlIGRpcnR5JyxpbXBvcnRhbmNlOjcsY29sdW1uQ29uc3RydWN0b3I6Qnl0ZVN0YXRDb2x1bW59LHtjb25kaXRpb246J1N3YXBwZWQnLGltcG9ydGFuY2U6Nixjb2x1bW5Db25zdHJ1Y3RvcjpCeXRlU3RhdENvbHVtbn0se2ltcG9ydGFuY2U6MCxjb2x1bW5Db25zdHJ1Y3RvcjpVc2VkTWVtb3J5Q29sdW1ufV07VXNlZE1lbW9yeUNvbHVtbi5UT1RBTFNfTUFQPXsncmVzaWRlbnRCeXRlcyc6J1RvdGFsIHJlc2lkZW50JywncGVha1Jlc2lkZW50Qnl0ZXMnOidQZWFrIHRvdGFsIHJlc2lkZW50JywncHJpdmF0ZUZvb3RwcmludEJ5dGVzJzonUHJpdmF0ZSBmb290cHJpbnQnLH07VXNlZE1lbW9yeUNvbHVtbi5QTEFURk9STV9TUEVDSUZJQ19UT1RBTFNfTUFQPXsndm0nOidUb3RhbCB2aXJ0dWFsJywnc3dwJzonU3dhcHBlZCcsJ3BjJzonUHJpdmF0ZSBjbGVhbicsJ3BkJzonUHJpdmF0ZSBkaXJ0eScsJ3NjJzonU2hhcmVkIGNsZWFuJywnc2QnOidTaGFyZWQgZGlydHknLCdncHVfZWdsJzonR1BVIEVHTCcsJ2dwdV9lZ2xfcHNzJzonR1BVIEVHTCBQU1MnLCdncHVfZ2wnOidHUFUgR0wnLCdncHVfZ2xfcHNzJzonR1BVIEdMIFBTUycsJ2dwdV9ldGMnOidHUFUgT3RoZXInLCdncHVfZXRjX3Bzcyc6J0dQVSBPdGhlciBQU1MnLH07VXNlZE1lbW9yeUNvbHVtbi5CWVRFX1NUQVRfTUFQPXsncHJvcG9ydGlvbmFsUmVzaWRlbnQnOidQU1MnLCdwcml2YXRlRGlydHlSZXNpZGVudCc6J1ByaXZhdGUgZGlydHknLCdzd2FwcGVkJzonU3dhcHBlZCd9O2Z1bmN0aW9uIEFsbG9jYXRvckNvbHVtbihuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSl7dHIudWkuYW5hbHlzaXMuTnVtZXJpY01lbW9yeUNvbHVtbi5jYWxsKHRoaXMsbmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpO30KLUFsbG9jYXRvckNvbHVtbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5hbmFseXNpcy5OdW1lcmljTWVtb3J5Q29sdW1uLnByb3RvdHlwZSxnZXQgdGl0bGUoKXtjb25zdCB0aXRsZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItY29sb3ItbGVnZW5kJyk7dGl0bGVFbC5sYWJlbD10aGlzLm5hbWU7cmV0dXJuIHRpdGxlRWw7fSxnZXRGb3JtYXR0aW5nQ29udGV4dCh1bml0KXtyZXR1cm57dW5pdFByZWZpeDp0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTUVCSX07fSxhZGRJbmZvcyhudW1lcmljcyxwcm9jZXNzTWVtb3J5RHVtcHMsaW5mb3Mpe2lmKHByb2Nlc3NNZW1vcnlEdW1wcz09PXVuZGVmaW5lZClyZXR1cm47bGV0IGhlYXBEdW1wQ291bnQ9MDtsZXQgbWlzc2luZ1NpemVDb3VudD0wO2ZvcihsZXQgaT0wO2k8cHJvY2Vzc01lbW9yeUR1bXBzLmxlbmd0aDtpKyspe2NvbnN0IHByb2Nlc3NNZW1vcnlEdW1wPXByb2Nlc3NNZW1vcnlEdW1wc1tpXTtpZihwcm9jZXNzTWVtb3J5RHVtcD09PXVuZGVmaW5lZCljb250aW51ZTtjb25zdCBoZWFwRHVtcHM9cHJvY2Vzc01lbW9yeUR1bXAuaGVhcER1bXBzO2lmKGhlYXBEdW1wcyE9PXVuZGVmaW5lZCYmaGVhcER1bXBzW3RoaXMubmFtZV0hPT11bmRlZmluZWQpe2hlYXBEdW1wQ291bnQrKzt9Ci1jb25zdCBhbGxvY2F0b3JEdW1wPXByb2Nlc3NNZW1vcnlEdW1wLmdldE1lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lKHRoaXMubmFtZSk7aWYoYWxsb2NhdG9yRHVtcCE9PXVuZGVmaW5lZCYmYWxsb2NhdG9yRHVtcC5udW1lcmljc1tESVNQTEFZRURfU0laRV9OVU1FUklDX05BTUVdPT09dW5kZWZpbmVkKXttaXNzaW5nU2l6ZUNvdW50Kys7fX0KLWlmKGhlYXBEdW1wQ291bnQ+MCl7Y29uc3QgaW5mb1F1YW50aWZpZXI9aGVhcER1bXBDb3VudDxudW1lcmljcy5sZW5ndGg/JyAnK1NPTUVfVElNRVNUQU1QU19JTkZPX1FVQU5USUZJRVI6Jyc7aW5mb3MucHVzaCh7bWVzc2FnZTonSGVhcCBkdW1wIHByb3ZpZGVkJytpbmZvUXVhbnRpZmllcisnLicsaWNvbjpUUklHUkFNX0ZPUl9IRUFWRU59KTt9Ci1pZihtaXNzaW5nU2l6ZUNvdW50PjApe2NvbnN0IGluZm9RdWFudGlmaWVyPW1pc3NpbmdTaXplQ291bnQ8bnVtZXJpY3MubGVuZ3RoPycgJytTT01FX1RJTUVTVEFNUFNfSU5GT19RVUFOVElGSUVSOicnO2luZm9zLnB1c2godHIudWkuYW5hbHlzaXMuY3JlYXRlV2FybmluZ0luZm8oJ1NpemUgd2FzIG5vdCBwcm92aWRlZCcraW5mb1F1YW50aWZpZXIrJy4nKSk7fX0sZ2V0Q2hpbGRQYW5lQnVpbGRlcihwcm9jZXNzTWVtb3J5RHVtcHMpe2lmKHByb2Nlc3NNZW1vcnlEdW1wcz09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IG1lbW9yeUFsbG9jYXRvckR1bXBzPWxhenlNYXAocHJvY2Vzc01lbW9yeUR1bXBzLGZ1bmN0aW9uKHBtZCl7aWYocG1kPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHBtZC5nZXRNZW1vcnlBbGxvY2F0b3JEdW1wQnlGdWxsTmFtZSh0aGlzLm5hbWUpO30sdGhpcyk7aWYobWVtb3J5QWxsb2NhdG9yRHVtcHM9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCBoZWFwRHVtcHM9bGF6eU1hcChwcm9jZXNzTWVtb3J5RHVtcHMsZnVuY3Rpb24ocG1kKXtpZihwbWQ9PT11bmRlZmluZWR8fHBtZC5oZWFwRHVtcHM9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gcG1kLmhlYXBEdW1wc1t0aGlzLm5hbWVdO30sdGhpcyk7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgcGFuZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLW1lbW9yeS1kdW1wLWFsbG9jYXRvci1kZXRhaWxzLXBhbmUnKTtwYW5lLm1lbW9yeUFsbG9jYXRvckR1bXBzPW1lbW9yeUFsbG9jYXRvckR1bXBzO3BhbmUuaGVhcER1bXBzPWhlYXBEdW1wcztwYW5lLmFnZ3JlZ2F0aW9uTW9kZT10aGlzLmFnZ3JlZ2F0aW9uTW9kZTtyZXR1cm4gcGFuZTt9LmJpbmQodGhpcyk7fX07ZnVuY3Rpb24gVHJhY2luZ0NvbHVtbihuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSl7QWxsb2NhdG9yQ29sdW1uLmNhbGwodGhpcyxuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSk7fQotVHJhY2luZ0NvbHVtbi5DT0xPUj1NZW1vcnlDb2x1bW5Db2xvclNjaGVtZS5nZXRDb2xvcigndHJhY2luZ19tZW1vcnlfY29sdW1uJykudG9TdHJpbmcoKTtUcmFjaW5nQ29sdW1uLnByb3RvdHlwZT17X19wcm90b19fOkFsbG9jYXRvckNvbHVtbi5wcm90b3R5cGUsZ2V0IHRpdGxlKCl7cmV0dXJuIHRyLnVpLmIuY3JlYXRlU3Bhbih7dGV4dENvbnRlbnQ6dGhpcy5uYW1lLGNvbG9yOlRyYWNpbmdDb2x1bW4uQ09MT1J9KTt9LGNvbG9yKG51bWVyaWNzLHByb2Nlc3NNZW1vcnlEdW1wcyl7cmV0dXJuIFRyYWNpbmdDb2x1bW4uQ09MT1I7fX07QWxsb2NhdG9yQ29sdW1uLlJVTEVTPVt7Y29uZGl0aW9uOid0cmFjaW5nJyxpbXBvcnRhbmNlOjAsY29sdW1uQ29uc3RydWN0b3I6VHJhY2luZ0NvbHVtbn0se2ltcG9ydGFuY2U6MSxjb2x1bW5Db25zdHJ1Y3RvcjpBbGxvY2F0b3JDb2x1bW59XTtQb2x5bWVyKHtpczondHItdWktYS1tZW1vcnktZHVtcC1vdmVydmlldy1wYW5lJyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLlN0YWNrZWRQYW5lXSxjcmVhdGVkKCl7dGhpcy5wcm9jZXNzTWVtb3J5RHVtcHNfPXVuZGVmaW5lZDt0aGlzLmFnZ3JlZ2F0aW9uTW9kZV89dW5kZWZpbmVkO30scmVhZHkoKXt0aGlzLiQudGFibGUuc2VsZWN0aW9uTW9kZT10ci51aS5iLlRhYmxlRm9ybWF0LlNlbGVjdGlvbk1vZGUuQ0VMTDt0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uLWNoYW5nZWQnLGZ1bmN0aW9uKHRhYmxlRXZlbnQpe3RhYmxlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy5jaGFuZ2VDaGlsZFBhbmVfKCk7fS5iaW5kKHRoaXMpKTt9LHNldCBwcm9jZXNzTWVtb3J5RHVtcHMocHJvY2Vzc01lbW9yeUR1bXBzKXt0aGlzLnByb2Nlc3NNZW1vcnlEdW1wc189cHJvY2Vzc01lbW9yeUR1bXBzO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sZ2V0IHByb2Nlc3NNZW1vcnlEdW1wcygpe3JldHVybiB0aGlzLnByb2Nlc3NNZW1vcnlEdW1wc187fSxzZXQgYWdncmVnYXRpb25Nb2RlKGFnZ3JlZ2F0aW9uTW9kZSl7dGhpcy5hZ2dyZWdhdGlvbk1vZGVfPWFnZ3JlZ2F0aW9uTW9kZTt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LGdldCBhZ2dyZWdhdGlvbk1vZGUoKXtyZXR1cm4gdGhpcy5hZ2dyZWdhdGlvbk1vZGVfO30sZ2V0IHNlbGVjdGVkTWVtb3J5Q2VsbCgpe2lmKHRoaXMucHJvY2Vzc01lbW9yeUR1bXBzXz09PXVuZGVmaW5lZHx8dGhpcy5wcm9jZXNzTWVtb3J5RHVtcHNfLmxlbmd0aD09PTApe3JldHVybiB1bmRlZmluZWQ7fQotY29uc3Qgc2VsZWN0ZWRUYWJsZVJvdz10aGlzLiQudGFibGUuc2VsZWN0ZWRUYWJsZVJvdztpZighc2VsZWN0ZWRUYWJsZVJvdylyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHNlbGVjdGVkQ29sdW1uSW5kZXg9dGhpcy4kLnRhYmxlLnNlbGVjdGVkQ29sdW1uSW5kZXg7aWYoc2VsZWN0ZWRDb2x1bW5JbmRleD09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHNlbGVjdGVkQ29sdW1uPXRoaXMuJC50YWJsZS50YWJsZUNvbHVtbnNbc2VsZWN0ZWRDb2x1bW5JbmRleF07Y29uc3Qgc2VsZWN0ZWRNZW1vcnlDZWxsPXNlbGVjdGVkQ29sdW1uLmNlbGwoc2VsZWN0ZWRUYWJsZVJvdyk7cmV0dXJuIHNlbGVjdGVkTWVtb3J5Q2VsbDt9LGNoYW5nZUNoaWxkUGFuZV8oKXt0aGlzLnN0b3JlU2VsZWN0aW9uXygpO3RoaXMuY2hpbGRQYW5lQnVpbGRlcj10aGlzLmRldGVybWluZUNoaWxkUGFuZUJ1aWxkZXJGcm9tU2VsZWN0aW9uXygpO30sZGV0ZXJtaW5lQ2hpbGRQYW5lQnVpbGRlckZyb21TZWxlY3Rpb25fKCl7aWYodGhpcy5wcm9jZXNzTWVtb3J5RHVtcHNfPT09dW5kZWZpbmVkfHx0aGlzLnByb2Nlc3NNZW1vcnlEdW1wc18ubGVuZ3RoPT09MCl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1jb25zdCBzZWxlY3RlZFRhYmxlUm93PXRoaXMuJC50YWJsZS5zZWxlY3RlZFRhYmxlUm93O2lmKCFzZWxlY3RlZFRhYmxlUm93KXJldHVybiB1bmRlZmluZWQ7Y29uc3Qgc2VsZWN0ZWRDb2x1bW5JbmRleD10aGlzLiQudGFibGUuc2VsZWN0ZWRDb2x1bW5JbmRleDtpZihzZWxlY3RlZENvbHVtbkluZGV4PT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7Y29uc3Qgc2VsZWN0ZWRDb2x1bW49dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1uc1tzZWxlY3RlZENvbHVtbkluZGV4XTtyZXR1cm4gc2VsZWN0ZWRDb2x1bW4uZ2V0Q2hpbGRQYW5lQnVpbGRlcihzZWxlY3RlZFRhYmxlUm93LmNvbnRleHRzKTt9LG9uUmVidWlsZF8oKXtpZih0aGlzLnByb2Nlc3NNZW1vcnlEdW1wc189PT11bmRlZmluZWR8fHRoaXMucHJvY2Vzc01lbW9yeUR1bXBzXy5sZW5ndGg9PT0wKXt0aGlzLiQuaW5mb190ZXh0LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLiQudGFibGUuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnRhYmxlLmNsZWFyKCk7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTtyZXR1cm47fQotdGhpcy4kLmluZm9fdGV4dC5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQudGFibGUuc3R5bGUuZGlzcGxheT0nYmxvY2snO2NvbnN0IHJvd3M9dGhpcy5jcmVhdGVSb3dzXygpO2NvbnN0IGNvbHVtbnM9dGhpcy5jcmVhdGVDb2x1bW5zXyhyb3dzKTtjb25zdCBmb290ZXJSb3dzPXRoaXMuY3JlYXRlRm9vdGVyUm93c18ocm93cyxjb2x1bW5zKTt0aGlzLiQudGFibGUudGFibGVSb3dzPXJvd3M7dGhpcy4kLnRhYmxlLmZvb3RlclJvd3M9Zm9vdGVyUm93czt0aGlzLiQudGFibGUudGFibGVDb2x1bW5zPWNvbHVtbnM7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt0aGlzLnJlc3RvcmVTZWxlY3Rpb25fKCk7fSxjcmVhdGVSb3dzXygpe2NvbnN0IHRpbWVUb1BpZFRvUHJvY2Vzc01lbW9yeUR1bXA9dGhpcy5wcm9jZXNzTWVtb3J5RHVtcHNfO2NvbnN0IHBpZFRvVGltZVRvUHJvY2Vzc01lbW9yeUR1bXA9dHIuYi5pbnZlcnRBcnJheU9mRGljdHModGltZVRvUGlkVG9Qcm9jZXNzTWVtb3J5RHVtcCk7Y29uc3Qgcm93cz1bXTtmb3IoY29uc3RbcGlkLHRpbWVUb0R1bXBdb2YKLU9iamVjdC5lbnRyaWVzKHBpZFRvVGltZVRvUHJvY2Vzc01lbW9yeUR1bXApKXtjb25zdCBwcm9jZXNzPXRpbWVUb0R1bXAuZmluZCh4PT54KS5wcm9jZXNzO2NvbnN0IHVzZWRNZW1vcnlDZWxscz10ci51aS5hbmFseXNpcy5jcmVhdGVDZWxscyh0aW1lVG9EdW1wLGZ1bmN0aW9uKGR1bXApe2NvbnN0IHNpemVzPXt9O2NvbnN0IHRvdGFscz1kdW1wLnRvdGFscztpZih0b3RhbHMhPT11bmRlZmluZWQpe2Zvcihjb25zdFt0b3RhbE5hbWUsY2VsbE5hbWVdb2YKLU9iamVjdC5lbnRyaWVzKFVzZWRNZW1vcnlDb2x1bW4uVE9UQUxTX01BUCkpe2NvbnN0IHRvdGFsPXRvdGFsc1t0b3RhbE5hbWVdO2lmKHRvdGFsPT09dW5kZWZpbmVkKWNvbnRpbnVlO3NpemVzW2NlbGxOYW1lXT1uZXcgU2NhbGFyKHNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcix0b3RhbCk7fQotY29uc3QgcGxhdGZvcm1TcGVjaWZpYz10b3RhbHMucGxhdGZvcm1TcGVjaWZpYztpZihwbGF0Zm9ybVNwZWNpZmljIT09dW5kZWZpbmVkKXtmb3IoY29uc3RbbmFtZSxzaXplXW9mIE9iamVjdC5lbnRyaWVzKHBsYXRmb3JtU3BlY2lmaWMpKXtsZXQgbmV3TmFtZT1uYW1lO2lmKFVzZWRNZW1vcnlDb2x1bW4uUExBVEZPUk1fU1BFQ0lGSUNfVE9UQUxTX01BUFtuYW1lXT09PXVuZGVmaW5lZCl7aWYobmFtZS5lbmRzV2l0aChQTEFURk9STV9TUEVDSUZJQ19UT1RBTF9OQU1FX1NVRkZJWCkpe25ld05hbWU9bmFtZS5zdWJzdHJpbmcoMCxuYW1lLmxlbmd0aC0KLVBMQVRGT1JNX1NQRUNJRklDX1RPVEFMX05BTUVfU1VGRklYLmxlbmd0aCk7fQotbmV3TmFtZT1uZXdOYW1lLnJlcGxhY2UoJ18nLCcgJykudHJpbSgpO25ld05hbWU9bmV3TmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStuZXdOYW1lLnNsaWNlKDEpO31lbHNle25ld05hbWU9VXNlZE1lbW9yeUNvbHVtbi5QTEFURk9STV9TUEVDSUZJQ19UT1RBTFNfTUFQW25hbWVdO30KLXNpemVzW25ld05hbWVdPW5ldyBTY2FsYXIoc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLHNpemUpO319fQotY29uc3Qgdm1SZWdpb25zPWR1bXAubW9zdFJlY2VudFZtUmVnaW9ucztpZih2bVJlZ2lvbnMhPT11bmRlZmluZWQpe2Zvcihjb25zdFtieXRlU3RhdE5hbWUsY2VsbE5hbWVdb2YKLU9iamVjdC5lbnRyaWVzKFVzZWRNZW1vcnlDb2x1bW4uQllURV9TVEFUX01BUCkpe2NvbnN0IGJ5dGVTdGF0PXZtUmVnaW9ucy5ieXRlU3RhdHNbYnl0ZVN0YXROYW1lXTtpZihieXRlU3RhdD09PXVuZGVmaW5lZCljb250aW51ZTtzaXplc1tjZWxsTmFtZV09bmV3IFNjYWxhcihzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnl0ZVN0YXQpO319Ci1yZXR1cm4gc2l6ZXM7fSk7Y29uc3QgYWxsb2NhdG9yQ2VsbHM9dHIudWkuYW5hbHlzaXMuY3JlYXRlQ2VsbHModGltZVRvRHVtcCxmdW5jdGlvbihkdW1wKXtjb25zdCBtZW1vcnlBbGxvY2F0b3JEdW1wcz1kdW1wLm1lbW9yeUFsbG9jYXRvckR1bXBzO2lmKG1lbW9yeUFsbG9jYXRvckR1bXBzPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7Y29uc3Qgc2l6ZXM9e307bWVtb3J5QWxsb2NhdG9yRHVtcHMuZm9yRWFjaChmdW5jdGlvbihhbGxvY2F0b3JEdW1wKXtsZXQgcm9vdERpc3BsYXllZFNpemVOdW1lcmljPWFsbG9jYXRvckR1bXAubnVtZXJpY3NbRElTUExBWUVEX1NJWkVfTlVNRVJJQ19OQU1FXTtpZihyb290RGlzcGxheWVkU2l6ZU51bWVyaWM9PT11bmRlZmluZWQpe3Jvb3REaXNwbGF5ZWRTaXplTnVtZXJpYz1uZXcgU2NhbGFyKHNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlciwwKTt9Ci1zaXplc1thbGxvY2F0b3JEdW1wLmZ1bGxOYW1lXT1yb290RGlzcGxheWVkU2l6ZU51bWVyaWM7fSk7cmV0dXJuIHNpemVzO30pO3Jvd3MucHVzaCh7dGl0bGU6cHJvY2Vzcy51c2VyRnJpZW5kbHlOYW1lLGNvbnRleHRzOnRpbWVUb0R1bXAsdXNlZE1lbW9yeUNlbGxzLGFsbG9jYXRvckNlbGxzfSk7fQotcmV0dXJuIHJvd3M7fSxjcmVhdGVGb290ZXJSb3dzXyhyb3dzLGNvbHVtbnMpe2lmKHJvd3MubGVuZ3RoPD0xKXJldHVybltdO2NvbnN0IHRvdGFsUm93PXt0aXRsZTonVG90YWwnfTt0ci51aS5hbmFseXNpcy5hZ2dyZWdhdGVUYWJsZVJvd0NlbGxzKHRvdGFsUm93LHJvd3MsY29sdW1ucyk7cmV0dXJuW3RvdGFsUm93XTt9LGNyZWF0ZUNvbHVtbnNfKHJvd3Mpe2NvbnN0IHRpdGxlQ29sdW1uPW5ldyBQcm9jZXNzTmFtZUNvbHVtbigpO3RpdGxlQ29sdW1uLndpZHRoPScyMDBweCc7Y29uc3QgdXNlZE1lbW9yeVNpemVDb2x1bW5zPXRyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5mcm9tUm93cyhyb3dzLHtjZWxsS2V5Oid1c2VkTWVtb3J5Q2VsbHMnLGFnZ3JlZ2F0aW9uTW9kZTp0aGlzLmFnZ3JlZ2F0aW9uTW9kZV8scnVsZXM6VXNlZE1lbW9yeUNvbHVtbi5SVUxFU30pO2NvbnN0IGFsbG9jYXRvclNpemVDb2x1bW5zPXRyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5mcm9tUm93cyhyb3dzLHtjZWxsS2V5OidhbGxvY2F0b3JDZWxscycsYWdncmVnYXRpb25Nb2RlOnRoaXMuYWdncmVnYXRpb25Nb2RlXyxydWxlczpBbGxvY2F0b3JDb2x1bW4uUlVMRVN9KTtjb25zdCBzaXplQ29sdW1ucz11c2VkTWVtb3J5U2l6ZUNvbHVtbnMuY29uY2F0KGFsbG9jYXRvclNpemVDb2x1bW5zKTt0ci51aS5hbmFseXNpcy5NZW1vcnlDb2x1bW4uc3BhY2VFcXVhbGx5KHNpemVDb2x1bW5zKTtjb25zdCBjb2x1bW5zPVt0aXRsZUNvbHVtbl0uY29uY2F0KHNpemVDb2x1bW5zKTtyZXR1cm4gY29sdW1uczt9LHN0b3JlU2VsZWN0aW9uXygpe2xldCBzZWxlY3RlZFJvd1RpdGxlO2NvbnN0IHNlbGVjdGVkUm93PXRoaXMuJC50YWJsZS5zZWxlY3RlZFRhYmxlUm93O2lmKHNlbGVjdGVkUm93IT09dW5kZWZpbmVkKXtzZWxlY3RlZFJvd1RpdGxlPXNlbGVjdGVkUm93LnRpdGxlO30KLWxldCBzZWxlY3RlZENvbHVtbk5hbWU7Y29uc3Qgc2VsZWN0ZWRDb2x1bW5JbmRleD10aGlzLiQudGFibGUuc2VsZWN0ZWRDb2x1bW5JbmRleDtpZihzZWxlY3RlZENvbHVtbkluZGV4IT09dW5kZWZpbmVkKXtjb25zdCBzZWxlY3RlZENvbHVtbj10aGlzLiQudGFibGUudGFibGVDb2x1bW5zW3NlbGVjdGVkQ29sdW1uSW5kZXhdO3NlbGVjdGVkQ29sdW1uTmFtZT1zZWxlY3RlZENvbHVtbi5uYW1lO30KLXRoaXMuJC5zdGF0ZS5zZXQoe3Jvd1RpdGxlOnNlbGVjdGVkUm93VGl0bGUsY29sdW1uTmFtZTpzZWxlY3RlZENvbHVtbk5hbWV9KTt9LHJlc3RvcmVTZWxlY3Rpb25fKCl7Y29uc3Qgc2V0dGluZ3M9dGhpcy4kLnN0YXRlLmdldCgpO2lmKHNldHRpbmdzPT09dW5kZWZpbmVkfHxzZXR0aW5ncy5yb3dUaXRsZT09PXVuZGVmaW5lZHx8c2V0dGluZ3MuY29sdW1uTmFtZT09PXVuZGVmaW5lZCl7cmV0dXJuO30KLWNvbnN0IHNlbGVjdGVkQ29sdW1uSW5kZXg9dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucy5maW5kSW5kZXgoY29sPT5jb2wubmFtZT09PXNldHRpbmdzLmNvbHVtbk5hbWUpO2lmKHNlbGVjdGVkQ29sdW1uSW5kZXg9PT0tMSlyZXR1cm47Y29uc3Qgc2VsZWN0ZWRSb3dUaXRsZT1zZXR0aW5ncy5yb3dUaXRsZTtjb25zdCBzZWxlY3RlZFJvdz10aGlzLiQudGFibGUudGFibGVSb3dzLmZpbmQocm93PT5yb3cudGl0bGU9PT1zZWxlY3RlZFJvd1RpdGxlKTtpZihzZWxlY3RlZFJvdz09PXVuZGVmaW5lZClyZXR1cm47dGhpcy4kLnRhYmxlLnNlbGVjdGVkVGFibGVSb3c9c2VsZWN0ZWRSb3c7dGhpcy4kLnRhYmxlLnNlbGVjdGVkQ29sdW1uSW5kZXg9c2VsZWN0ZWRDb2x1bW5JbmRleDt9fSk7cmV0dXJue1Byb2Nlc3NOYW1lQ29sdW1uLFVzZWRNZW1vcnlDb2x1bW4sUGVha01lbW9yeUNvbHVtbixCeXRlU3RhdENvbHVtbixBbGxvY2F0b3JDb2x1bW4sVHJhY2luZ0NvbHVtbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5hbHlzaXMnLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXVpLWEtbWVtb3J5LWR1bXAtaGVhZGVyLXBhbmUnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuU3RhY2tlZFBhbmVdLGNyZWF0ZWQoKXt0aGlzLmNvbnRhaW5lck1lbW9yeUR1bXBzXz11bmRlZmluZWQ7fSxyZWFkeSgpe1BvbHltZXIuZG9tKHRoaXMuJC5hZ2dyZWdhdGlvbl9tb2RlX2NvbnRhaW5lcikuYXBwZW5kQ2hpbGQodHIudWkuYi5jcmVhdGVTZWxlY3Rvcih0aGlzLCdhZ2dyZWdhdGlvbk1vZGUnLCdtZW1vcnlEdW1wSGVhZGVyUGFuZS5hZ2dyZWdhdGlvbk1vZGUnLHRyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5BZ2dyZWdhdGlvbk1vZGUuRElGRixbe2xhYmVsOidEaWZmJyx2YWx1ZTp0ci51aS5hbmFseXNpcy5NZW1vcnlDb2x1bW4uQWdncmVnYXRpb25Nb2RlLkRJRkZ9LHtsYWJlbDonTWF4Jyx2YWx1ZTp0ci51aS5hbmFseXNpcy5NZW1vcnlDb2x1bW4uQWdncmVnYXRpb25Nb2RlLk1BWH1dKSk7fSxzZXQgY29udGFpbmVyTWVtb3J5RHVtcHMoY29udGFpbmVyTWVtb3J5RHVtcHMpe3RoaXMuY29udGFpbmVyTWVtb3J5RHVtcHNfPWNvbnRhaW5lck1lbW9yeUR1bXBzO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sZ2V0IGNvbnRhaW5lck1lbW9yeUR1bXBzKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyTWVtb3J5RHVtcHNfO30sc2V0IGFnZ3JlZ2F0aW9uTW9kZShhZ2dyZWdhdGlvbk1vZGUpe3RoaXMuYWdncmVnYXRpb25Nb2RlXz1hZ2dyZWdhdGlvbk1vZGU7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxnZXQgYWdncmVnYXRpb25Nb2RlKCl7cmV0dXJuIHRoaXMuYWdncmVnYXRpb25Nb2RlXzt9LG9uUmVidWlsZF8oKXt0aGlzLnVwZGF0ZUxhYmVsXygpO3RoaXMudXBkYXRlQWdncmVnYXRpb25Nb2RlU2VsZWN0b3JfKCk7dGhpcy5jaGFuZ2VDaGlsZFBhbmVfKCk7fSx1cGRhdGVMYWJlbF8oKXtQb2x5bWVyLmRvbSh0aGlzLiQubGFiZWwpLnRleHRDb250ZW50PScnO2lmKHRoaXMuY29udGFpbmVyTWVtb3J5RHVtcHNfPT09dW5kZWZpbmVkfHx0aGlzLmNvbnRhaW5lck1lbW9yeUR1bXBzXy5sZW5ndGg8PTApe1BvbHltZXIuZG9tKHRoaXMuJC5sYWJlbCkudGV4dENvbnRlbnQ9J05vIG1lbW9yeSBkdW1wcyBzZWxlY3RlZCc7cmV0dXJuO30KLWNvbnN0IGNvbnRhaW5lckR1bXBDb3VudD10aGlzLmNvbnRhaW5lck1lbW9yeUR1bXBzXy5sZW5ndGg7Y29uc3QgaXNNdWx0aVNlbGVjdGlvbj1jb250YWluZXJEdW1wQ291bnQ+MTtQb2x5bWVyLmRvbSh0aGlzLiQubGFiZWwpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdTZWxlY3RlZCAnK2NvbnRhaW5lckR1bXBDb3VudCsnIG1lbW9yeSBkdW1wJysKLShpc011bHRpU2VsZWN0aW9uPydzJzonJykrJyBpbiAnK3RoaXMuY29udGFpbmVyTWVtb3J5RHVtcHNfWzBdLmNvbnRhaW5lck5hbWUrJyBhdCAnKSk7UG9seW1lci5kb20odGhpcy4kLmxhYmVsKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMuZm9ybWF0KHRoaXMuY29udGFpbmVyTWVtb3J5RHVtcHNfWzBdLnN0YXJ0KSkpO2lmKGlzTXVsdGlTZWxlY3Rpb24pe2NvbnN0IEVMTElQU0lTPVN0cmluZy5mcm9tQ2hhckNvZGUoODIzMCk7UG9seW1lci5kb20odGhpcy4kLmxhYmVsKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShFTExJUFNJUykpO1BvbHltZXIuZG9tKHRoaXMuJC5sYWJlbCkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLmZvcm1hdCh0aGlzLmNvbnRhaW5lck1lbW9yeUR1bXBzX1tjb250YWluZXJEdW1wQ291bnQtMV0uc3RhcnQpKSk7fX0sdXBkYXRlQWdncmVnYXRpb25Nb2RlU2VsZWN0b3JfKCl7bGV0IGRpc3BsYXlTdHlsZTtpZih0aGlzLmNvbnRhaW5lck1lbW9yeUR1bXBzXz09PXVuZGVmaW5lZHx8dGhpcy5jb250YWluZXJNZW1vcnlEdW1wc18ubGVuZ3RoPD0xKXtkaXNwbGF5U3R5bGU9J25vbmUnO31lbHNle2Rpc3BsYXlTdHlsZT0naW5pdGlhbCc7fQotdGhpcy4kLmFnZ3JlZ2F0aW9uX21vZGVfY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9ZGlzcGxheVN0eWxlO30sY2hhbmdlQ2hpbGRQYW5lXygpe3RoaXMuY2hpbGRQYW5lQnVpbGRlcj1mdW5jdGlvbigpe2lmKHRoaXMuY29udGFpbmVyTWVtb3J5RHVtcHNfPT09dW5kZWZpbmVkfHx0aGlzLmNvbnRhaW5lck1lbW9yeUR1bXBzXy5sZW5ndGg8PTApe3JldHVybiB1bmRlZmluZWQ7fQotY29uc3Qgb3ZlcnZpZXdQYW5lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtbWVtb3J5LWR1bXAtb3ZlcnZpZXctcGFuZScpO292ZXJ2aWV3UGFuZS5wcm9jZXNzTWVtb3J5RHVtcHM9dGhpcy5jb250YWluZXJNZW1vcnlEdW1wc18ubWFwKGZ1bmN0aW9uKGNvbnRhaW5lckR1bXApe3JldHVybiBjb250YWluZXJEdW1wLnByb2Nlc3NNZW1vcnlEdW1wczt9KTtvdmVydmlld1BhbmUuYWdncmVnYXRpb25Nb2RlPXRoaXMuYWdncmVnYXRpb25Nb2RlO3JldHVybiBvdmVydmlld1BhbmU7fS5iaW5kKHRoaXMpO319KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtc3RhY2tlZC1wYW5lLXZpZXcnLHNldFBhbmVCdWlsZGVyKHBhbmVCdWlsZGVyLG9wdF9wYXJlbnRQYW5lKXtjb25zdCBwYW5lQ29udGFpbmVyPXRoaXMuJC5wYW5lX2NvbnRhaW5lcjtpZihvcHRfcGFyZW50UGFuZSl7aWYoIShvcHRfcGFyZW50UGFuZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSl7dGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgcGFuZSBtdXN0IGJlIGFuIEhUTUwgZWxlbWVudCcpO30KLWlmKG9wdF9wYXJlbnRQYW5lLnBhcmVudEVsZW1lbnQhPT1wYW5lQ29udGFpbmVyKXt0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBwYW5lIG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgcGFuZSBjb250YWluZXInKTt9fQotd2hpbGUoUG9seW1lci5kb20ocGFuZUNvbnRhaW5lcikubGFzdEVsZW1lbnRDaGlsZCE9PW51bGwmJlBvbHltZXIuZG9tKHBhbmVDb250YWluZXIpLmxhc3RFbGVtZW50Q2hpbGQhPT1vcHRfcGFyZW50UGFuZSl7Y29uc3QgcmVtb3ZlZFBhbmU9UG9seW1lci5kb20odGhpcy4kLnBhbmVfY29udGFpbmVyKS5sYXN0RWxlbWVudENoaWxkO2NvbnN0IGxpc3RlbmVyPXRoaXMubGlzdGVuZXJzXy5nZXQocmVtb3ZlZFBhbmUpO2lmKGxpc3RlbmVyPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ05vIGxpc3RlbmVyIGFzc29jaWF0ZWQgd2l0aCBwYW5lJyk7fQotdGhpcy5saXN0ZW5lcnNfLmRlbGV0ZShyZW1vdmVkUGFuZSk7cmVtb3ZlZFBhbmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVxdWVzdC1jaGlsZC1wYW5lLWNoYW5nZScsbGlzdGVuZXIpO1BvbHltZXIuZG9tKHBhbmVDb250YWluZXIpLnJlbW92ZUNoaWxkKHJlbW92ZWRQYW5lKTt9Ci1pZihvcHRfcGFyZW50UGFuZSYmb3B0X3BhcmVudFBhbmUucGFyZW50RWxlbWVudCE9PXBhbmVDb250YWluZXIpe3Rocm93IG5ldyBFcnJvcignUGFyZW50IHBhbmUgd2FzIHJlbW92ZWQgZnJvbSB0aGUgcGFuZSBjb250YWluZXInKTt9Ci1pZighcGFuZUJ1aWxkZXIpcmV0dXJuO2NvbnN0IHBhbmU9cGFuZUJ1aWxkZXIoKTtpZighcGFuZSlyZXR1cm47aWYoIShwYW5lIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKXt0aHJvdyBuZXcgRXJyb3IoJ1BhbmUgbXVzdCBiZSBhbiBIVE1MIGVsZW1lbnQnKTt9Ci1jb25zdCBsaXN0ZW5lcj1mdW5jdGlvbihldmVudCl7dGhpcy5zZXRQYW5lQnVpbGRlcihwYW5lLmNoaWxkUGFuZUJ1aWxkZXIscGFuZSk7fS5iaW5kKHRoaXMpO2lmKCF0aGlzLmxpc3RlbmVyc18pe3RoaXMubGlzdGVuZXJzXz1uZXcgV2Vha01hcCgpO30KLXRoaXMubGlzdGVuZXJzXy5zZXQocGFuZSxsaXN0ZW5lcik7cGFuZS5hZGRFdmVudExpc3RlbmVyKCdyZXF1ZXN0LWNoaWxkLXBhbmUtY2hhbmdlJyxsaXN0ZW5lcik7UG9seW1lci5kb20ocGFuZUNvbnRhaW5lcikuYXBwZW5kQ2hpbGQocGFuZSk7cGFuZS5hcHBlbmRlZCgpO30scmVidWlsZCgpe2xldCBjdXJyZW50UGFuZT1Qb2x5bWVyLmRvbSh0aGlzLiQucGFuZV9jb250YWluZXIpLmZpcnN0RWxlbWVudENoaWxkO3doaWxlKGN1cnJlbnRQYW5lKXtjdXJyZW50UGFuZS5yZWJ1aWxkKCk7Y3VycmVudFBhbmU9Y3VycmVudFBhbmUubmV4dEVsZW1lbnRTaWJsaW5nO319LGdldCBwYW5lc0ZvclRlc3RpbmcoKXtjb25zdCBwYW5lcz1bXTtsZXQgY3VycmVudENoaWxkPVBvbHltZXIuZG9tKHRoaXMuJC5wYW5lX2NvbnRhaW5lcikuZmlyc3RFbGVtZW50Q2hpbGQ7d2hpbGUoY3VycmVudENoaWxkKXtwYW5lcy5wdXNoKGN1cnJlbnRDaGlsZCk7Y3VycmVudENoaWxkPWN1cnJlbnRDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmc7fQotcmV0dXJuIHBhbmVzO319KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe1BvbHltZXIoe2lzOid0ci11aS1hLWNvbnRhaW5lci1tZW1vcnktZHVtcC1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXtpZihzZWxlY3Rpb249PT11bmRlZmluZWQpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO3RoaXMuZHVtcHNCeUNvbnRhaW5lck5hbWVfPXVuZGVmaW5lZDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO3JldHVybjt9Ci1zZWxlY3Rpb24uZm9yRWFjaChmdW5jdGlvbihldmVudCl7aWYoIShldmVudCBpbnN0YW5jZW9mIHRyLm1vZGVsLkNvbnRhaW5lck1lbW9yeUR1bXApKXt0aHJvdyBuZXcgRXJyb3IoJ01lbW9yeSBkdW1wIHN1Yi12aWV3IG9ubHkgc3VwcG9ydHMgY29udGFpbmVyIG1lbW9yeSBkdW1wcycpO319KTt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjt0aGlzLmR1bXBzQnlDb250YWluZXJOYW1lXz10ci5iLmdyb3VwSW50b01hcCh0aGlzLmN1cnJlbnRTZWxlY3Rpb25fLnRvQXJyYXkoKSxkdW1wPT5kdW1wLmNvbnRhaW5lck5hbWUpO2Zvcihjb25zdCBkdW1wcyBvZiB0aGlzLmR1bXBzQnlDb250YWluZXJOYW1lXy52YWx1ZXMoKSl7ZHVtcHMuc29ydCgoYSxiKT0+YS5zdGFydC1iLnN0YXJ0KTt9Ci10aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO30sZ2V0IHJlcXVpcmVzVGFsbFZpZXcoKXtyZXR1cm4gdHJ1ZTt9LHVwZGF0ZUNvbnRlbnRzXygpe1BvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS50ZXh0Q29udGVudD0nJztpZih0aGlzLmR1bXBzQnlDb250YWluZXJOYW1lXz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgY29udGFpbmVyTmFtZXM9QXJyYXkuZnJvbSh0aGlzLmR1bXBzQnlDb250YWluZXJOYW1lXy5rZXlzKCkpO2lmKGNvbnRhaW5lck5hbWVzLmxlbmd0aD09PTApcmV0dXJuO2lmKGNvbnRhaW5lck5hbWVzLmxlbmd0aD4xKXt0aGlzLmJ1aWxkVmlld0Zvck11bHRpcGxlQ29udGFpbmVyTmFtZXNfKCk7fWVsc2V7dGhpcy5idWlsZFZpZXdGb3JTaW5nbGVDb250YWluZXJOYW1lXygpO319LGJ1aWxkVmlld0ZvclNpbmdsZUNvbnRhaW5lck5hbWVfKCl7Y29uc3QgY29udGFpbmVyTWVtb3J5RHVtcHM9dHIuYi5nZXRGaXJzdEVsZW1lbnQodGhpcy5kdW1wc0J5Q29udGFpbmVyTmFtZV8udmFsdWVzKCkpO2NvbnN0IGR1bXBWaWV3PXRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLXN0YWNrZWQtcGFuZS12aWV3Jyk7UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLmFwcGVuZENoaWxkKGR1bXBWaWV3KTtkdW1wVmlldy5zZXRQYW5lQnVpbGRlcihmdW5jdGlvbigpe2NvbnN0IGhlYWRlclBhbmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1tZW1vcnktZHVtcC1oZWFkZXItcGFuZScpO2hlYWRlclBhbmUuY29udGFpbmVyTWVtb3J5RHVtcHM9Y29udGFpbmVyTWVtb3J5RHVtcHM7cmV0dXJuIGhlYWRlclBhbmU7fSk7fSxidWlsZFZpZXdGb3JNdWx0aXBsZUNvbnRhaW5lck5hbWVzXygpe2NvbnN0IG93bmVyRG9jdW1lbnQ9dGhpcy5vd25lckRvY3VtZW50O2NvbnN0IHJvd3M9W107Zm9yKGNvbnN0W2NvbnRhaW5lck5hbWUsZHVtcHNdb2YgdGhpcy5kdW1wc0J5Q29udGFpbmVyTmFtZV8pe3Jvd3MucHVzaCh7Y29udGFpbmVyTmFtZSxzdWJSb3dzOmR1bXBzLGlzRXhwYW5kZWQ6dHJ1ZSx9KTt9Ci1yb3dzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5jb250YWluZXJOYW1lLmxvY2FsZUNvbXBhcmUoYi5jb250YWluZXJOYW1lKTt9KTtjb25zdCBjb2x1bW5zPVt7dGl0bGU6J0R1bXAnLHZhbHVlKHJvdyl7aWYocm93LnN1YlJvd3M9PT11bmRlZmluZWQpe3JldHVybiB0aGlzLnNpbmdsZUR1bXBWYWx1ZV8ocm93KTt9Ci1yZXR1cm4gdGhpcy5ncm91cGVkRHVtcFZhbHVlXyhyb3cpO30sc2luZ2xlRHVtcFZhbHVlXyhyb3cpe2NvbnN0IGxpbmtFbD1vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2xpbmtFbC5zZXRTZWxlY3Rpb25BbmRDb250ZW50KG5ldyB0ci5tb2RlbC5FdmVudFNldChbcm93XSkpO1BvbHltZXIuZG9tKGxpbmtFbCkuYXBwZW5kQ2hpbGQodHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKHJvdy5zdGFydCx7dW5pdDp0ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMsb3duZXJEb2N1bWVudH0pKTtyZXR1cm4gbGlua0VsO30sZ3JvdXBlZER1bXBWYWx1ZV8ocm93KXtjb25zdCBsaW5rRWw9b3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWFuYWx5c2lzLWxpbmsnKTtsaW5rRWwuc2V0U2VsZWN0aW9uQW5kQ29udGVudChuZXcgdHIubW9kZWwuRXZlbnRTZXQocm93LnN1YlJvd3MpKTtQb2x5bWVyLmRvbShsaW5rRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuY3JlYXRlU3Bhbih7b3duZXJEb2N1bWVudCx0ZXh0Q29udGVudDpyb3cuc3ViUm93cy5sZW5ndGgrJyBtZW1vcnkgZHVtcCcrCi0ocm93LnN1YlJvd3MubGVuZ3RoPT09MT8nJzoncycpKycgaW4gJ30pKTtQb2x5bWVyLmRvbShsaW5rRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuY3JlYXRlU3Bhbih7b3duZXJEb2N1bWVudCx0ZXh0Q29udGVudDpyb3cuY29udGFpbmVyTmFtZSxib2xkOnRydWV9KSk7cmV0dXJuIGxpbmtFbDt9fV07Y29uc3QgdGFibGU9dGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItdGFibGUnKTt0YWJsZS50YWJsZUNvbHVtbnM9Y29sdW1uczt0YWJsZS50YWJsZVJvd3M9cm93czt0YWJsZS5zaG93SGVhZGVyPWZhbHNlO3RhYmxlLnJlYnVpbGQoKTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuYXBwZW5kQ2hpbGQodGFibGUpO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtY29udGFpbmVyLW1lbW9yeS1kdW1wLXN1Yi12aWV3Jyx0ci5tb2RlbC5HbG9iYWxNZW1vcnlEdW1wLHttdWx0aTpmYWxzZSx0aXRsZTonR2xvYmFsIE1lbW9yeSBEdW1wJyx9KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtY29udGFpbmVyLW1lbW9yeS1kdW1wLXN1Yi12aWV3Jyx0ci5tb2RlbC5HbG9iYWxNZW1vcnlEdW1wLHttdWx0aTp0cnVlLHRpdGxlOidHbG9iYWwgTWVtb3J5IER1bXBzJyx9KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtY29udGFpbmVyLW1lbW9yeS1kdW1wLXN1Yi12aWV3Jyx0ci5tb2RlbC5Qcm9jZXNzTWVtb3J5RHVtcCx7bXVsdGk6ZmFsc2UsdGl0bGU6J1Byb2Nlc3MgTWVtb3J5IER1bXAnLH0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1jb250YWluZXItbWVtb3J5LWR1bXAtc3ViLXZpZXcnLHRyLm1vZGVsLlByb2Nlc3NNZW1vcnlEdW1wLHttdWx0aTp0cnVlLHRpdGxlOidQcm9jZXNzIE1lbW9yeSBEdW1wcycsfSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnOyhmdW5jdGlvbigpe2NvbnN0IENPVU5URVJfU0FNUExFX1RBQkxFX0NPTFVNTlM9W3t0aXRsZTonQ291bnRlcicsd2lkdGg6JzE1MHB4Jyx2YWx1ZShyb3cpe3JldHVybiByb3cuY291bnRlcjt9fSx7dGl0bGU6J1Nlcmllcycsd2lkdGg6JzE1MHB4Jyx2YWx1ZShyb3cpe3JldHVybiByb3cuc2VyaWVzO319LHt0aXRsZTonVGltZScsd2lkdGg6JzE1MHB4Jyx2YWx1ZShyb3cpe3JldHVybiByb3cuc3RhcnQ7fX0se3RpdGxlOidWYWx1ZScsd2lkdGg6JzEwMCUnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy52YWx1ZTt9fV07UG9seW1lcih7aXM6J3RyLXVpLWEtY291bnRlci1zYW1wbGUtc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxyZWFkeSgpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9Q09VTlRFUl9TQU1QTEVfVEFCTEVfQ09MVU1OUzt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlQ29udGVudHNfKCl7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz10aGlzLnNlbGVjdGlvbj90aGlzLmdldFJvd3NfKHRoaXMuc2VsZWN0aW9uLnRvQXJyYXkoKSk6W107dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9LGdldFJvd3NfKHNhbXBsZXMpe2NvbnN0IHNhbXBsZXNCeUNvdW50ZXI9dHIuYi5ncm91cEludG9NYXAoc2FtcGxlcyxzYW1wbGU9PnNhbXBsZS5zZXJpZXMuY291bnRlci5ndWlkKTtjb25zdCByb3dzPVtdO2Zvcihjb25zdCBjb3VudGVyU2FtcGxlcyBvZiBzYW1wbGVzQnlDb3VudGVyLnZhbHVlcygpKXtjb25zdCBzYW1wbGVzQnlTZXJpZXM9dHIuYi5ncm91cEludG9NYXAoY291bnRlclNhbXBsZXMsc2FtcGxlPT5zYW1wbGUuc2VyaWVzLmd1aWQpO2Zvcihjb25zdCBzZXJpZXNTYW1wbGVzIG9mIHNhbXBsZXNCeVNlcmllcy52YWx1ZXMoKSl7Y29uc3Qgc2VyaWVzUm93cz10aGlzLmdldFJvd3NGb3JTYW1wbGVzXyhzZXJpZXNTYW1wbGVzKTtzZXJpZXNSb3dzWzBdLmNvdW50ZXI9c2VyaWVzU2FtcGxlc1swXS5zZXJpZXMuY291bnRlci5uYW1lO3Nlcmllc1Jvd3NbMF0uc2VyaWVzPXNlcmllc1NhbXBsZXNbMF0uc2VyaWVzLm5hbWU7aWYoc2VyaWVzUm93cy5sZW5ndGg+MSl7c2VyaWVzUm93c1swXS5zdWJSb3dzPXNlcmllc1Jvd3Muc2xpY2UoMSk7c2VyaWVzUm93c1swXS5pc0V4cGFuZGVkPXRydWU7fQotcm93cy5wdXNoKHNlcmllc1Jvd3NbMF0pO319Ci1yZXR1cm4gcm93czt9LGdldFJvd3NGb3JTYW1wbGVzXyhzYW1wbGVzKXtyZXR1cm4gc2FtcGxlcy5tYXAoZnVuY3Rpb24oc2FtcGxlKXtyZXR1cm57c3RhcnQ6c2FtcGxlLnRpbWVzdGFtcCx2YWx1ZTpzYW1wbGUudmFsdWV9O30pO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtY291bnRlci1zYW1wbGUtc3ViLXZpZXcnLHRyLm1vZGVsLkNvdW50ZXJTYW1wbGUse211bHRpOmZhbHNlLHRpdGxlOidDb3VudGVyIFNhbXBsZScsfSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLWNvdW50ZXItc2FtcGxlLXN1Yi12aWV3Jyx0ci5tb2RlbC5Db3VudGVyU2FtcGxlLHttdWx0aTp0cnVlLHRpdGxlOidDb3VudGVyIFNhbXBsZXMnLH0pO30pKCk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5hbmFseXNpcycsZnVuY3Rpb24oKXtmdW5jdGlvbiBNdWx0aUV2ZW50U3VtbWFyeSh0aXRsZSxldmVudHMpe3RoaXMudGl0bGU9dGl0bGU7dGhpcy5kdXJhdGlvbl89dW5kZWZpbmVkO3RoaXMuc2VsZlRpbWVfPXVuZGVmaW5lZDt0aGlzLmV2ZW50c189ZXZlbnRzO3RoaXMuY3B1VGltZXNDb21wdXRlZF89ZmFsc2U7dGhpcy5jcHVTZWxmVGltZV89dW5kZWZpbmVkO3RoaXMuY3B1RHVyYXRpb25fPXVuZGVmaW5lZDt0aGlzLm1heER1cmF0aW9uXz11bmRlZmluZWQ7dGhpcy5tYXhDcHVEdXJhdGlvbl89dW5kZWZpbmVkO3RoaXMubWF4U2VsZlRpbWVfPXVuZGVmaW5lZDt0aGlzLm1heENwdVNlbGZUaW1lXz11bmRlZmluZWQ7dGhpcy51bnRvdGFsbGFibGVBcmdzXz1bXTt0aGlzLnRvdGFsbGVkQXJnc189dW5kZWZpbmVkO30KLU11bHRpRXZlbnRTdW1tYXJ5LnByb3RvdHlwZT17c2V0IHRpdGxlKHRpdGxlKXtpZih0aXRsZT09PSdUb3RhbHMnKXt0aGlzLnRvdGFsc1Jvdz10cnVlO30KLXRoaXMudGl0bGVfPXRpdGxlO30sZ2V0IHRpdGxlKCl7cmV0dXJuIHRoaXMudGl0bGVfO30sZ2V0IGR1cmF0aW9uKCl7aWYodGhpcy5kdXJhdGlvbl89PT11bmRlZmluZWQpe3RoaXMuZHVyYXRpb25fPXRyLmIubWF0aC5TdGF0aXN0aWNzLnN1bSh0aGlzLmV2ZW50c18sZnVuY3Rpb24oZXZlbnQpe3JldHVybiBldmVudC5kdXJhdGlvbjt9KTt9Ci1yZXR1cm4gdGhpcy5kdXJhdGlvbl87fSxnZXQgY3B1U2VsZlRpbWUoKXt0aGlzLmNvbXB1dGVDcHVUaW1lc0lmTmVlZGVkXygpO3JldHVybiB0aGlzLmNwdVNlbGZUaW1lXzt9LGdldCBjcHVEdXJhdGlvbigpe3RoaXMuY29tcHV0ZUNwdVRpbWVzSWZOZWVkZWRfKCk7cmV0dXJuIHRoaXMuY3B1RHVyYXRpb25fO30sY29tcHV0ZUNwdVRpbWVzSWZOZWVkZWRfKCl7aWYodGhpcy5jcHVUaW1lc0NvbXB1dGVkXylyZXR1cm47dGhpcy5jcHVUaW1lc0NvbXB1dGVkXz10cnVlO2xldCBjcHVTZWxmVGltZT0wO2xldCBjcHVEdXJhdGlvbj0wO2xldCBoYXNDcHVEYXRhPWZhbHNlO2Zvcihjb25zdCBldmVudCBvZiB0aGlzLmV2ZW50c18pe2lmKGV2ZW50LmNwdUR1cmF0aW9uIT09dW5kZWZpbmVkKXtjcHVEdXJhdGlvbis9ZXZlbnQuY3B1RHVyYXRpb247aGFzQ3B1RGF0YT10cnVlO30KLWlmKGV2ZW50LmNwdVNlbGZUaW1lIT09dW5kZWZpbmVkKXtjcHVTZWxmVGltZSs9ZXZlbnQuY3B1U2VsZlRpbWU7aGFzQ3B1RGF0YT10cnVlO319Ci1pZihoYXNDcHVEYXRhKXt0aGlzLmNwdUR1cmF0aW9uXz1jcHVEdXJhdGlvbjt0aGlzLmNwdVNlbGZUaW1lXz1jcHVTZWxmVGltZTt9fSxnZXQgc2VsZlRpbWUoKXtpZih0aGlzLnNlbGZUaW1lXz09PXVuZGVmaW5lZCl7dGhpcy5zZWxmVGltZV89MDtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcy5ldmVudHNfKXtpZihldmVudC5zZWxmVGltZSE9PXVuZGVmaW5lZCl7dGhpcy5zZWxmVGltZV8rPWV2ZW50LnNlbGZUaW1lO319fQotcmV0dXJuIHRoaXMuc2VsZlRpbWVfO30sZ2V0IGV2ZW50cygpe3JldHVybiB0aGlzLmV2ZW50c187fSxnZXQgbnVtRXZlbnRzKCl7cmV0dXJuIHRoaXMuZXZlbnRzXy5sZW5ndGg7fSxnZXQgbnVtQWxlcnRzKCl7aWYodGhpcy5udW1BbGVydHNfPT09dW5kZWZpbmVkKXt0aGlzLm51bUFsZXJ0c189dHIuYi5tYXRoLlN0YXRpc3RpY3Muc3VtKHRoaXMuZXZlbnRzXyxldmVudD0+ZXZlbnQuYXNzb2NpYXRlZEFsZXJ0cy5sZW5ndGgpO30KLXJldHVybiB0aGlzLm51bUFsZXJ0c187fSxnZXQgdW50b3RhbGxhYmxlQXJncygpe3RoaXMudXBkYXRlQXJnc0lmTmVlZGVkXygpO3JldHVybiB0aGlzLnVudG90YWxsYWJsZUFyZ3NfO30sZ2V0IHRvdGFsbGVkQXJncygpe3RoaXMudXBkYXRlQXJnc0lmTmVlZGVkXygpO3JldHVybiB0aGlzLnRvdGFsbGVkQXJnc187fSxnZXQgbWF4RHVyYXRpb24oKXtpZih0aGlzLm1heER1cmF0aW9uXz09PXVuZGVmaW5lZCl7dGhpcy5tYXhEdXJhdGlvbl89dHIuYi5tYXRoLlN0YXRpc3RpY3MubWF4KHRoaXMuZXZlbnRzXyxmdW5jdGlvbihldmVudCl7cmV0dXJuIGV2ZW50LmR1cmF0aW9uO30pO30KLXJldHVybiB0aGlzLm1heER1cmF0aW9uXzt9LGdldCBtYXhDcHVEdXJhdGlvbigpe2lmKHRoaXMubWF4Q3B1RHVyYXRpb25fPT09dW5kZWZpbmVkKXt0aGlzLm1heENwdUR1cmF0aW9uXz10ci5iLm1hdGguU3RhdGlzdGljcy5tYXgodGhpcy5ldmVudHNfLGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZlbnQuY3B1RHVyYXRpb247fSk7fQotcmV0dXJuIHRoaXMubWF4Q3B1RHVyYXRpb25fO30sZ2V0IG1heFNlbGZUaW1lKCl7aWYodGhpcy5tYXhTZWxmVGltZV89PT11bmRlZmluZWQpe3RoaXMubWF4U2VsZlRpbWVfPXRyLmIubWF0aC5TdGF0aXN0aWNzLm1heCh0aGlzLmV2ZW50c18sZnVuY3Rpb24oZXZlbnQpe3JldHVybiBldmVudC5zZWxmVGltZTt9KTt9Ci1yZXR1cm4gdGhpcy5tYXhTZWxmVGltZV87fSxnZXQgbWF4Q3B1U2VsZlRpbWUoKXtpZih0aGlzLm1heENwdVNlbGZUaW1lXz09PXVuZGVmaW5lZCl7dGhpcy5tYXhDcHVTZWxmVGltZV89dHIuYi5tYXRoLlN0YXRpc3RpY3MubWF4KHRoaXMuZXZlbnRzXyxmdW5jdGlvbihldmVudCl7cmV0dXJuIGV2ZW50LmNwdVNlbGZUaW1lO30pO30KLXJldHVybiB0aGlzLm1heENwdVNlbGZUaW1lXzt9LHVwZGF0ZUFyZ3NJZk5lZWRlZF8oKXtpZih0aGlzLnRvdGFsbGVkQXJnc18hPT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IHVudG90YWxsYWJsZUFyZ3M9e307Y29uc3QgdG90YWxsZWRBcmdzPXt9O2Zvcihjb25zdCBldmVudCBvZiB0aGlzLmV2ZW50c18pe2Zvcihjb25zdCBhcmdOYW1lIGluIGV2ZW50LmFyZ3Mpe2NvbnN0IGFyZ1ZhbD1ldmVudC5hcmdzW2FyZ05hbWVdO2NvbnN0IHR5cGU9dHlwZW9mIGFyZ1ZhbDtpZih0eXBlIT09J251bWJlcicpe3VudG90YWxsYWJsZUFyZ3NbYXJnTmFtZV09dHJ1ZTtkZWxldGUgdG90YWxsZWRBcmdzW2FyZ05hbWVdO2NvbnRpbnVlO30KLWlmKHVudG90YWxsYWJsZUFyZ3NbYXJnTmFtZV0pe2NvbnRpbnVlO30KLWlmKHRvdGFsbGVkQXJnc1thcmdOYW1lXT09PXVuZGVmaW5lZCl7dG90YWxsZWRBcmdzW2FyZ05hbWVdPTA7fQotdG90YWxsZWRBcmdzW2FyZ05hbWVdKz1hcmdWYWw7fX0KLXRoaXMudW50b3RhbGxhYmxlQXJnc189T2JqZWN0LmtleXModW50b3RhbGxhYmxlQXJncyk7dGhpcy50b3RhbGxlZEFyZ3NfPXRvdGFsbGVkQXJnczt9fTtyZXR1cm57TXVsdGlFdmVudFN1bW1hcnksfTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtbXVsdGktZXZlbnQtc3VtbWFyeS10YWJsZScscmVhZHkoKXt0aGlzLnNob3dUb3RhbHNfPWZhbHNlO3RoaXMuZXZlbnRzSGF2ZUR1cmF0aW9uXz10cnVlO3RoaXMuZXZlbnRzSGF2ZVN1YlJvd3NfPXRydWU7dGhpcy5ldmVudHNCeVRpdGxlXz11bmRlZmluZWQ7fSx1cGRhdGVUYWJsZUNvbHVtbnNfKHJvd3MsbWF4VmFsdWVzKXtsZXQgaGFzQ3B1RGF0YT1mYWxzZTtsZXQgaGFzQWxlcnRzPWZhbHNlO3Jvd3MuZm9yRWFjaChmdW5jdGlvbihyb3cpe2lmKHJvdy5jcHVEdXJhdGlvbiE9PXVuZGVmaW5lZCl7aGFzQ3B1RGF0YT10cnVlO30KLWlmKHJvdy5jcHVTZWxmVGltZSE9PXVuZGVmaW5lZCl7aGFzQ3B1RGF0YT10cnVlO30KLWlmKHJvdy5udW1BbGVydHMpe2hhc0FsZXJ0cz10cnVlO319KTtjb25zdCBvd25lckRvY3VtZW50PXRoaXMub3duZXJEb2N1bWVudDtjb25zdCBjb2x1bW5zPVtdO2NvbHVtbnMucHVzaCh7dGl0bGU6J05hbWUnLHZhbHVlKHJvdyl7aWYocm93LnRpdGxlPT09J1RvdGFscycpcmV0dXJuJ1RvdGFscyc7Y29uc3QgbGlua0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2xpbmtFbC5zZXRTZWxlY3Rpb25BbmRDb250ZW50KGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0ci5tb2RlbC5FdmVudFNldChyb3cuZXZlbnRzKTt9LHJvdy50aXRsZSk7cmV0dXJuIGxpbmtFbDt9LHdpZHRoOiczNTBweCcsY21wKHJvd0Escm93Qil7cmV0dXJuIHJvd0EudGl0bGUubG9jYWxlQ29tcGFyZShyb3dCLnRpdGxlKTt9fSk7aWYodGhpcy5ldmVudHNIYXZlRHVyYXRpb25fKXtjb2x1bW5zLnB1c2goe3RpdGxlOidXYWxsIER1cmF0aW9uJyx2YWx1ZShyb3cpe3JldHVybiB0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4ocm93LmR1cmF0aW9uLHt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5NcyxjdXN0b21Db250ZXh0UmFuZ2U6cm93LnRvdGFsc1Jvdz91bmRlZmluZWQ6dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKDAsbWF4VmFsdWVzLmR1cmF0aW9uKSxvd25lckRvY3VtZW50LH0pO30sd2lkdGg6Jzx1cGF0ZWQgZnVydGhlciBkb3duPicsY21wKHJvd0Escm93Qil7cmV0dXJuIHJvd0EuZHVyYXRpb24tcm93Qi5kdXJhdGlvbjt9fSk7fQotaWYodGhpcy5ldmVudHNIYXZlRHVyYXRpb25fJiZoYXNDcHVEYXRhKXtjb2x1bW5zLnB1c2goe3RpdGxlOidDUFUgRHVyYXRpb24nLHZhbHVlKHJvdyl7cmV0dXJuIHRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbihyb3cuY3B1RHVyYXRpb24se3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zLGN1c3RvbUNvbnRleHRSYW5nZTpyb3cudG90YWxzUm93P3VuZGVmaW5lZDp0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoMCxtYXhWYWx1ZXMuY3B1RHVyYXRpb24pLG93bmVyRG9jdW1lbnQsfSk7fSx3aWR0aDonPHVwYXRlZCBmdXJ0aGVyIGRvd24+JyxjbXAocm93QSxyb3dCKXtyZXR1cm4gcm93QS5jcHVEdXJhdGlvbi1yb3dCLmNwdUR1cmF0aW9uO319KTt9Ci1pZih0aGlzLmV2ZW50c0hhdmVTdWJSb3dzXyYmdGhpcy5ldmVudHNIYXZlRHVyYXRpb25fKXtjb2x1bW5zLnB1c2goe3RpdGxlOidTZWxmIHRpbWUnLHZhbHVlKHJvdyl7cmV0dXJuIHRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbihyb3cuc2VsZlRpbWUse3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zLGN1c3RvbUNvbnRleHRSYW5nZTpyb3cudG90YWxzUm93P3VuZGVmaW5lZDp0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoMCxtYXhWYWx1ZXMuc2VsZlRpbWUpLG93bmVyRG9jdW1lbnQsfSk7fSx3aWR0aDonPHVwYXRlZCBmdXJ0aGVyIGRvd24+JyxjbXAocm93QSxyb3dCKXtyZXR1cm4gcm93QS5zZWxmVGltZS1yb3dCLnNlbGZUaW1lO319KTt9Ci1pZih0aGlzLmV2ZW50c0hhdmVTdWJSb3dzXyYmdGhpcy5ldmVudHNIYXZlRHVyYXRpb25fJiZoYXNDcHVEYXRhKXtjb2x1bW5zLnB1c2goe3RpdGxlOidDUFUgU2VsZiBUaW1lJyx2YWx1ZShyb3cpe3JldHVybiB0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4ocm93LmNwdVNlbGZUaW1lLHt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5NcyxjdXN0b21Db250ZXh0UmFuZ2U6cm93LnRvdGFsc1Jvdz91bmRlZmluZWQ6dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKDAsbWF4VmFsdWVzLmNwdVNlbGZUaW1lKSxvd25lckRvY3VtZW50LH0pO30sd2lkdGg6Jzx1cGF0ZWQgZnVydGhlciBkb3duPicsY21wKHJvd0Escm93Qil7cmV0dXJuIHJvd0EuY3B1U2VsZlRpbWUtcm93Qi5jcHVTZWxmVGltZTt9fSk7fQotaWYodGhpcy5ldmVudHNIYXZlRHVyYXRpb25fKXtjb2x1bW5zLnB1c2goe3RpdGxlOidBdmVyYWdlICcrKGhhc0NwdURhdGE/J0NQVSc6J1dhbGwnKSsnIER1cmF0aW9uJyx2YWx1ZShyb3cpe2NvbnN0IHRvdGFsRHVyYXRpb249aGFzQ3B1RGF0YT9yb3cuY3B1RHVyYXRpb246cm93LmR1cmF0aW9uO3JldHVybiB0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4odG90YWxEdXJhdGlvbi9yb3cubnVtRXZlbnRzLHt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5NcyxjdXN0b21Db250ZXh0UmFuZ2U6cm93LnRvdGFsc1Jvdz91bmRlZmluZWQ6dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKDAsbWF4VmFsdWVzLmR1cmF0aW9uKSxvd25lckRvY3VtZW50LH0pO30sd2lkdGg6Jzx1cGF0ZWQgZnVydGhlciBkb3duPicsY21wKHJvd0Escm93Qil7aWYoaGFzQ3B1RGF0YSl7cmV0dXJuIHJvd0EuY3B1RHVyYXRpb24vcm93QS5udW1FdmVudHMtCi1yb3dCLmNwdUR1cmF0aW9uL3Jvd0IubnVtRXZlbnRzO30KLXJldHVybiByb3dBLmR1cmF0aW9uL3Jvd0EubnVtRXZlbnRzLQotcm93Qi5kdXJhdGlvbi9yb3dCLm51bUV2ZW50czt9fSk7fQotY29sdW1ucy5wdXNoKHt0aXRsZTonT2NjdXJyZW5jZXMnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5udW1FdmVudHM7fSx3aWR0aDonPHVwYXRlZCBmdXJ0aGVyIGRvd24+JyxjbXAocm93QSxyb3dCKXtyZXR1cm4gcm93QS5udW1FdmVudHMtcm93Qi5udW1FdmVudHM7fX0pO2xldCBhbGVydHNDb2x1bW5JbmRleDtpZihoYXNBbGVydHMpe2NvbHVtbnMucHVzaCh7dGl0bGU6J051bSBBbGVydHMnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5udW1BbGVydHM7fSx3aWR0aDonPHVwYXRlZCBmdXJ0aGVyIGRvd24+JyxjbXAocm93QSxyb3dCKXtyZXR1cm4gcm93QS5udW1BbGVydHMtcm93Qi5udW1BbGVydHM7fX0pO2FsZXJ0c0NvbHVtbkluZGV4PWNvbHVtbnMubGVuZ3RoLTE7fQotbGV0IGNvbFdpZHRoUGVyY2VudGFnZTtpZihjb2x1bW5zLmxlbmd0aD09PTEpe2NvbFdpZHRoUGVyY2VudGFnZT0nMTAwJSc7fWVsc2V7Y29sV2lkdGhQZXJjZW50YWdlPSgxMDAvKGNvbHVtbnMubGVuZ3RoLTEpKS50b0ZpeGVkKDMpKyclJzt9Ci1mb3IobGV0IGk9MTtpPGNvbHVtbnMubGVuZ3RoO2krKyl7Y29sdW1uc1tpXS53aWR0aD1jb2xXaWR0aFBlcmNlbnRhZ2U7fQotdGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1jb2x1bW5zO2lmKGhhc0FsZXJ0cyl7dGhpcy4kLnRhYmxlLnNvcnRDb2x1bW5JbmRleD1hbGVydHNDb2x1bW5JbmRleDt0aGlzLiQudGFibGUuc29ydERlc2NlbmRpbmc9dHJ1ZTt9fSxjb25maWd1cmUoY29uZmlnKXtpZihjb25maWcuZXZlbnRzQnlUaXRsZT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZDogZXZlbnRzQnlUaXRsZScpO30KLWlmKGNvbmZpZy5zaG93VG90YWxzIT09dW5kZWZpbmVkKXt0aGlzLnNob3dUb3RhbHNfPWNvbmZpZy5zaG93VG90YWxzO31lbHNle3RoaXMuc2hvd1RvdGFsc189dHJ1ZTt9Ci1pZihjb25maWcuZXZlbnRzSGF2ZUR1cmF0aW9uIT09dW5kZWZpbmVkKXt0aGlzLmV2ZW50c0hhdmVEdXJhdGlvbl89Y29uZmlnLmV2ZW50c0hhdmVEdXJhdGlvbjt9ZWxzZXt0aGlzLmV2ZW50c0hhdmVEdXJhdGlvbl89dHJ1ZTt9Ci1pZihjb25maWcuZXZlbnRzSGF2ZVN1YlJvd3MhPT11bmRlZmluZWQpe3RoaXMuZXZlbnRzSGF2ZVN1YlJvd3NfPWNvbmZpZy5ldmVudHNIYXZlU3ViUm93czt9ZWxzZXt0aGlzLmV2ZW50c0hhdmVTdWJSb3dzXz10cnVlO30KLXRoaXMuZXZlbnRzQnlUaXRsZV89Y29uZmlnLmV2ZW50c0J5VGl0bGU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBzaG93VG90YWxzKCl7cmV0dXJuIHRoaXMuc2hvd1RvdGFsc187fSxzZXQgc2hvd1RvdGFscyhzaG93VG90YWxzKXt0aGlzLnNob3dUb3RhbHNfPXNob3dUb3RhbHM7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBldmVudHNIYXZlRHVyYXRpb24oKXtyZXR1cm4gdGhpcy5ldmVudHNIYXZlRHVyYXRpb25fO30sc2V0IGV2ZW50c0hhdmVEdXJhdGlvbihldmVudHNIYXZlRHVyYXRpb24pe3RoaXMuZXZlbnRzSGF2ZUR1cmF0aW9uXz1ldmVudHNIYXZlRHVyYXRpb247dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBldmVudHNIYXZlU3ViUm93cygpe3JldHVybiB0aGlzLmV2ZW50c0hhdmVTdWJSb3dzXzt9LHNldCBldmVudHNIYXZlU3ViUm93cyhldmVudHNIYXZlU3ViUm93cyl7dGhpcy5ldmVudHNIYXZlU3ViUm93c189ZXZlbnRzSGF2ZVN1YlJvd3M7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBldmVudHNCeVRpdGxlKCl7cmV0dXJuIHRoaXMuZXZlbnRzQnlUaXRsZV87fSxzZXQgZXZlbnRzQnlUaXRsZShldmVudHNCeVRpdGxlKXt0aGlzLmV2ZW50c0J5VGl0bGVfPWV2ZW50c0J5VGl0bGU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBzZWxlY3Rpb25Cb3VuZHMoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25Cb3VuZHNfO30sc2V0IHNlbGVjdGlvbkJvdW5kcyhzZWxlY3Rpb25Cb3VuZHMpe3RoaXMuc2VsZWN0aW9uQm91bmRzXz1zZWxlY3Rpb25Cb3VuZHM7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe2xldCBldmVudHNCeVRpdGxlO2lmKHRoaXMuZXZlbnRzQnlUaXRsZV8hPT11bmRlZmluZWQpe2V2ZW50c0J5VGl0bGU9dGhpcy5ldmVudHNCeVRpdGxlXzt9ZWxzZXtldmVudHNCeVRpdGxlPVtdO30KLWNvbnN0IGFsbEV2ZW50cz1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtjb25zdCByb3dzPVtdO2Zvcihjb25zdFt0aXRsZSxldmVudHNPZlNpbmdsZVRpdGxlXW9mIE9iamVjdC5lbnRyaWVzKGV2ZW50c0J5VGl0bGUpKXtmb3IoY29uc3QgZXZlbnQgb2YgZXZlbnRzT2ZTaW5nbGVUaXRsZSlhbGxFdmVudHMucHVzaChldmVudCk7Y29uc3Qgcm93PW5ldyB0ci51aS5hbmFseXNpcy5NdWx0aUV2ZW50U3VtbWFyeSh0aXRsZSxldmVudHNPZlNpbmdsZVRpdGxlKTtyb3dzLnB1c2gocm93KTt9Ci10aGlzLnVwZGF0ZVRhYmxlQ29sdW1uc18ocm93cyk7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1yb3dzO2NvbnN0IG1heFZhbHVlcz17ZHVyYXRpb246dW5kZWZpbmVkLHNlbGZUaW1lOnVuZGVmaW5lZCxjcHVTZWxmVGltZTp1bmRlZmluZWQsY3B1RHVyYXRpb246dW5kZWZpbmVkfTtpZih0aGlzLmV2ZW50c0hhdmVEdXJhdGlvbil7Zm9yKGNvbnN0IGNvbHVtbiBpbiBtYXhWYWx1ZXMpe21heFZhbHVlc1tjb2x1bW5dPXRyLmIubWF0aC5TdGF0aXN0aWNzLm1heChyb3dzLGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZlbnRbY29sdW1uXTt9KTt9fQotY29uc3QgZm9vdGVyUm93cz1bXTtpZih0aGlzLnNob3dUb3RhbHNfKXtjb25zdCBtdWx0aUV2ZW50U3VtbWFyeT1uZXcgdHIudWkuYW5hbHlzaXMuTXVsdGlFdmVudFN1bW1hcnkoJ1RvdGFscycsYWxsRXZlbnRzKTtmb290ZXJSb3dzLnB1c2gobXVsdGlFdmVudFN1bW1hcnkpO30KLXRoaXMudXBkYXRlVGFibGVDb2x1bW5zXyhyb3dzLG1heFZhbHVlcyk7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1yb3dzO3RoaXMuJC50YWJsZS5mb290ZXJSb3dzPWZvb3RlclJvd3M7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLXNlbGVjdGlvbi1zdW1tYXJ5LXRhYmxlJyxjcmVhdGVkKCl7dGhpcy5zZWxlY3Rpb25fPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTt9LHJlYWR5KCl7dGhpcy4kLnRhYmxlLnNob3dIZWFkZXI9ZmFsc2U7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1be3RpdGxlOidOYW1lJyx2YWx1ZShyb3cpe3JldHVybiByb3cudGl0bGU7fSx3aWR0aDonMzUwcHgnfSx7dGl0bGU6J1ZhbHVlJyx3aWR0aDonMTAwJScsdmFsdWUocm93KXtyZXR1cm4gcm93LnZhbHVlO319XTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuc2VsZWN0aW9uXz1zZWxlY3Rpb247dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe2NvbnN0IHNlbGVjdGlvbj10aGlzLnNlbGVjdGlvbl87Y29uc3Qgcm93cz1bXTtsZXQgaGFzUmFuZ2U7aWYodGhpcy5zZWxlY3Rpb25fJiYoIXNlbGVjdGlvbi5ib3VuZHMuaXNFbXB0eSkpe2hhc1JhbmdlPXRydWU7fWVsc2V7aGFzUmFuZ2U9ZmFsc2U7fQotcm93cy5wdXNoKHt0aXRsZTonU2VsZWN0aW9uIHN0YXJ0Jyx2YWx1ZTpoYXNSYW5nZT90ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4oc2VsZWN0aW9uLmJvdW5kcy5taW4se3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLG93bmVyRG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50fSk6JzxlbXB0eT4nfSk7cm93cy5wdXNoKHt0aXRsZTonU2VsZWN0aW9uIGV4dGVudCcsdmFsdWU6aGFzUmFuZ2U/dHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKHNlbGVjdGlvbi5ib3VuZHMucmFuZ2Use3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zLG93bmVyRG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50fSk6JzxlbXB0eT4nfSk7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1yb3dzO3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fX0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYi1yYWRpby1waWNrZXInLGNyZWF0ZWQoKXt0aGlzLm5lZWRzSW5pdF89dHJ1ZTt0aGlzLnNldHRpbmdzS2V5Xz11bmRlZmluZWQ7dGhpcy5pc1JlYWR5Xz1mYWxzZTt0aGlzLnJhZGlvQnV0dG9uc189dW5kZWZpbmVkO3RoaXMuc2VsZWN0ZWRLZXlfPXVuZGVmaW5lZDt9LHJlYWR5KCl7dGhpcy5pc1JlYWR5Xz10cnVlO3RoaXMubWF5YmVJbml0XygpO3RoaXMubWF5YmVSZW5kZXJSYWRpb0J1dHRvbnNfKCk7fSxnZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3ZlcnRpY2FsJyk7fSxzZXQgdmVydGljYWwodmVydGljYWwpe2lmKHZlcnRpY2FsKXt0aGlzLnNldEF0dHJpYnV0ZSgndmVydGljYWwnLHRydWUpO31lbHNle3RoaXMucmVtb3ZlQXR0cmlidXRlKCd2ZXJ0aWNhbCcpO319LGdldCBzZXR0aW5nc0tleSgpe3JldHVybiB0aGlzLnNldHRpbmdzS2V5Xzt9LHNldCBzZXR0aW5nc0tleShzZXR0aW5nc0tleSl7aWYoIXRoaXMubmVlZHNJbml0Xyl7dGhyb3cgbmV3IEVycm9yKCdBbHJlYWR5IGluaXRpYWxpemVkLicpO30KLXRoaXMuc2V0dGluZ3NLZXlfPXNldHRpbmdzS2V5O3RoaXMubWF5YmVJbml0XygpO30sbWF5YmVJbml0Xygpe2lmKCF0aGlzLm5lZWRzSW5pdF8pcmV0dXJuO2lmKHRoaXMuc2V0dGluZ3NLZXlfPT09dW5kZWZpbmVkKXJldHVybjt0aGlzLm5lZWRzSW5pdF89ZmFsc2U7dGhpcy5zZWxlY3QodHIuYi5TZXR0aW5ncy5nZXQodGhpcy5zZXR0aW5nc0tleV8pKTt9LHNldCBpdGVtcyhpdGVtcyl7dGhpcy5yYWRpb0J1dHRvbnNfPXt9O2l0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZS5rZXkgaW4gdGhpcy5yYWRpb0J1dHRvbnNfKXt0aHJvdyBuZXcgRXJyb3IoZS5rZXkrJyBhbHJlYWR5IGV4aXN0cycpO30KLWNvbnN0IHJhZGlvQnV0dG9uPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2NvbnN0IGlucHV0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7Y29uc3QgbGFiZWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtpbnB1dC50eXBlPSdyYWRpbyc7aW5wdXQuaWQ9ZS5sYWJlbDtpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXt0aGlzLnNlbGVjdChlLmtleSk7fS5iaW5kKHRoaXMpKTtQb2x5bWVyLmRvbShsYWJlbCkuaW5uZXJIVE1MPWUubGFiZWw7bGFiZWwuaHRtbEZvcj1lLmxhYmVsO2xhYmVsLnN0eWxlLmRpc3BsYXk9J2lubGluZSc7UG9seW1lci5kb20ocmFkaW9CdXR0b24pLmFwcGVuZENoaWxkKGlucHV0KTtQb2x5bWVyLmRvbShyYWRpb0J1dHRvbikuYXBwZW5kQ2hpbGQobGFiZWwpO3RoaXMucmFkaW9CdXR0b25zX1tlLmtleV09aW5wdXQ7fS5iaW5kKHRoaXMpKTt0aGlzLm1heWJlSW5pdF8oKTt0aGlzLm1heWJlUmVuZGVyUmFkaW9CdXR0b25zXygpO30sbWF5YmVSZW5kZXJSYWRpb0J1dHRvbnNfKCl7aWYoIXRoaXMuaXNSZWFkeV8pcmV0dXJuO2lmKHRoaXMucmFkaW9CdXR0b25zXz09PXVuZGVmaW5lZClyZXR1cm47Zm9yKGNvbnN0IGtleSBpbiB0aGlzLnJhZGlvQnV0dG9uc18pe1BvbHltZXIuZG9tKHRoaXMuJC5jb250YWluZXIpLmFwcGVuZENoaWxkKHRoaXMucmFkaW9CdXR0b25zX1trZXldLnBhcmVudEVsZW1lbnQpO30KLWlmKHRoaXMuc2VsZWN0ZWRLZXlfIT09dW5kZWZpbmVkKXt0aGlzLnNlbGVjdCh0aGlzLnNlbGVjdGVkS2V5Xyk7fX0sc2VsZWN0KGtleSl7aWYoa2V5PT09dW5kZWZpbmVkfHxrZXk9PT10aGlzLnNlbGVjdGVkS2V5Xyl7cmV0dXJuO30KLWlmKHRoaXMucmFkaW9CdXR0b25zXz09PXVuZGVmaW5lZCl7dGhpcy5zZWxlY3RlZEtleV89a2V5O3JldHVybjt9Ci1pZighKGtleSBpbiB0aGlzLnJhZGlvQnV0dG9uc18pKXt0aHJvdyBuZXcgRXJyb3Ioa2V5KycgZG9lcyBub3QgZXhpc3RzJyk7fQotaWYodGhpcy5zZWxlY3RlZEtleV8hPT11bmRlZmluZWQpe3RoaXMucmFkaW9CdXR0b25zX1t0aGlzLnNlbGVjdGVkS2V5X10uY2hlY2tlZD1mYWxzZTt9Ci10aGlzLnNlbGVjdGVkS2V5Xz1rZXk7dHIuYi5TZXR0aW5ncy5zZXQodGhpcy5zZXR0aW5nc0tleV8sdGhpcy5zZWxlY3RlZEtleV8pO2lmKHRoaXMuc2VsZWN0ZWRLZXlfIT09dW5kZWZpbmVkKXt0aGlzLnJhZGlvQnV0dG9uc19bdGhpcy5zZWxlY3RlZEtleV9dLmNoZWNrZWQ9dHJ1ZTt9Ci10aGlzLmRpc3BhdGNoRXZlbnQobmV3IHRyLmIuRXZlbnQoJ2NoYW5nZScsZmFsc2UpKTt9LGdldCBzZWxlY3RlZEtleSgpe3JldHVybiB0aGlzLnNlbGVjdGVkS2V5Xzt9LH0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBNSU5fR1VJREVMSU5FX0hFSUdIVF9QWD0zO2NvbnN0IENIRUNLQk9YX1dJRFRIX1BYPTE4O2NvbnN0IE5hbWVDb2x1bW5DaGFydD10ci51aS5iLmRlZmluZSgnbmFtZS1jb2x1bW4tY2hhcnQnLHRyLnVpLmIuQ29sdW1uQ2hhcnQpO05hbWVDb2x1bW5DaGFydC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5iLkNvbHVtbkNoYXJ0LnByb3RvdHlwZSxnZXQgeEF4aXNIZWlnaHQoKXtyZXR1cm4gNSsodGhpcy50ZXh0SGVpZ2h0UHhfKnRoaXMuZGF0YV8ubGVuZ3RoKTt9LHVwZGF0ZU1hcmdpbnNfKCl7c3VwZXIudXBkYXRlTWFyZ2luc18oKTtsZXQgeEF4aXNUaWNrT3ZlcmhhbmdQeD0wO2ZvcihsZXQgaT0wO2k8dGhpcy5kYXRhXy5sZW5ndGg7KytpKXtjb25zdCBkYXR1bT10aGlzLmRhdGFfW2ldO3hBeGlzVGlja092ZXJoYW5nUHg9TWF0aC5tYXgoeEF4aXNUaWNrT3ZlcmhhbmdQeCx0aGlzLnhTY2FsZV8oaSkrdHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLGRhdHVtLngpLndpZHRoLQotdGhpcy5ncmFwaFdpZHRoKTt9Ci10aGlzLm1hcmdpbi5yaWdodD1NYXRoLm1heCh0aGlzLm1hcmdpbi5yaWdodCx4QXhpc1RpY2tPdmVyaGFuZ1B4KTt9LGdldFhGb3JEYXR1bV8oZGF0dW0saW5kZXgpe3JldHVybiBpbmRleDt9LGdldCB4QXhpc1RpY2tPZmZzZXQoKXtyZXR1cm4gMC41O30sdXBkYXRlWEF4aXNfKHhBeGlzKXt4QXhpcy5zZWxlY3RBbGwoJyonKS5yZW1vdmUoKTtpZih0aGlzLmhpZGVYQXhpcylyZXR1cm47Y29uc3QgbmFtZVRleHRzPXhBeGlzLnNlbGVjdEFsbCgndGV4dCcpLmRhdGEodGhpcy5kYXRhXyk7bmFtZVRleHRzLmVudGVyKCkuYXBwZW5kKCd0ZXh0JykuYXR0cigndHJhbnNmb3JtJywoZCxpbmRleCk9Pid0cmFuc2xhdGUoMCwgJysKLXRoaXMudGV4dEhlaWdodFB4XyoodGhpcy5kYXRhXy5sZW5ndGgtaW5kZXgpKycpJykuYXR0cigneCcsKGQsaW5kZXgpPT50aGlzLnhTY2FsZV8oaW5kZXgpKS5hdHRyKCd5JyxkPT50aGlzLmdyYXBoSGVpZ2h0KS50ZXh0KGQ9PmQueCk7bmFtZVRleHRzLmV4aXQoKS5yZW1vdmUoKTtjb25zdCBndWlkZUxpbmVzPXhBeGlzLnNlbGVjdEFsbCgnbGluZS5ndWlkZScpLmRhdGEodGhpcy5kYXRhXyk7Z3VpZGVMaW5lcy5lbnRlcigpLmFwcGVuZCgnbGluZScpLmF0dHIoJ3gxJywoZCxpbmRleCk9PnRoaXMueFNjYWxlXyhpbmRleCt0aGlzLnhBeGlzVGlja09mZnNldCkpLmF0dHIoJ3gyJywoZCxpbmRleCk9PnRoaXMueFNjYWxlXyhpbmRleCt0aGlzLnhBeGlzVGlja09mZnNldCkpLmF0dHIoJ3kxJywoKT0+dGhpcy5ncmFwaEhlaWdodCkuYXR0cigneTInLChkLGluZGV4KT0+dGhpcy5ncmFwaEhlaWdodCtNYXRoLm1heChNSU5fR1VJREVMSU5FX0hFSUdIVF9QWCwodGhpcy50ZXh0SGVpZ2h0UHhfKih0aGlzLmRhdGFfLmxlbmd0aC1pbmRleC0xKSkpKTt9fTtyZXR1cm57TmFtZUNvbHVtbkNoYXJ0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2NvbnN0IExpbmVDaGFydD10ci51aS5iLkxpbmVDaGFydDtjb25zdCBOYW1lTGluZUNoYXJ0PXRyLnVpLmIuZGVmaW5lKCduYW1lLWxpbmUtY2hhcnQnLExpbmVDaGFydCk7TmFtZUxpbmVDaGFydC5wcm90b3R5cGU9e19fcHJvdG9fXzpMaW5lQ2hhcnQucHJvdG90eXBlLGdldFhGb3JEYXR1bV8oZGF0dW0saW5kZXgpe3JldHVybiBpbmRleDt9LGdldCB4QXhpc0hlaWdodCgpe3JldHVybiA1Kyh0aGlzLnRleHRIZWlnaHRQeF8qdGhpcy5kYXRhXy5sZW5ndGgpO30sZ2V0IHhBeGlzVGlja09mZnNldCgpe3JldHVybiAwO30sdXBkYXRlTWFyZ2luc18oKXt0ci51aS5iLk5hbWVDb2x1bW5DaGFydC5wcm90b3R5cGUudXBkYXRlTWFyZ2luc18uY2FsbCh0aGlzKTt9LHVwZGF0ZVhBeGlzXyh4QXhpcyl7eEF4aXMuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7aWYodGhpcy5oaWRlWEF4aXMpcmV0dXJuO3RyLnVpLmIuTmFtZUNvbHVtbkNoYXJ0LnByb3RvdHlwZS51cGRhdGVYQXhpc18uY2FsbCh0aGlzLHhBeGlzKTtjb25zdCBiYXNlbGluZT14QXhpcy5zZWxlY3RBbGwoJ3BhdGgnKS5kYXRhKFt0aGlzXSk7YmFzZWxpbmUuZW50ZXIoKS5hcHBlbmQoJ2xpbmUnKS5hdHRyKCdzdHJva2UnLCdibGFjaycpLmF0dHIoJ3gxJyx0aGlzLnhTY2FsZV8oMCkpLmF0dHIoJ3gyJyx0aGlzLnhTY2FsZV8odGhpcy5kYXRhXy5sZW5ndGgtMSkpLmF0dHIoJ3kxJyx0aGlzLmdyYXBoSGVpZ2h0KS5hdHRyKCd5MicsdGhpcy5ncmFwaEhlaWdodCk7YmFzZWxpbmUuZXhpdCgpLnJlbW92ZSgpO319O3JldHVybntOYW1lTGluZUNoYXJ0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2NvbnN0IEJveENoYXJ0PXRyLnVpLmIuZGVmaW5lKCdib3gtY2hhcnQnLHRyLnVpLmIuTmFtZUxpbmVDaGFydCk7Qm94Q2hhcnQucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYi5OYW1lTGluZUNoYXJ0LnByb3RvdHlwZSxnZXQgaGlkZUxlZ2VuZCgpe3JldHVybiB0cnVlO30sdXBkYXRlRGF0YVJhbmdlXygpe2lmKHRoaXMub3ZlcnJpZGVEYXRhUmFuZ2VfIT09dW5kZWZpbmVkKXtyZXR1cm47fQotdGhpcy5hdXRvRGF0YVJhbmdlXy5yZXNldCgpO2Zvcihjb25zdCBkYXR1bSBvZiB0aGlzLmRhdGFfKXt0aGlzLmF1dG9EYXRhUmFuZ2VfLmFkZFZhbHVlKGRhdHVtLnBlcmNlbnRpbGVfMCk7dGhpcy5hdXRvRGF0YVJhbmdlXy5hZGRWYWx1ZShkYXR1bS5wZXJjZW50aWxlXzEwMCk7fX0sdXBkYXRlU2NhbGVzXygpe3N1cGVyLnVwZGF0ZVNjYWxlc18oKTt0aGlzLnhTY2FsZV8uZG9tYWluKFswLHRoaXMuZGF0YV8ubGVuZ3RoXSk7fSxnZXQgeEF4aXNUaWNrT2Zmc2V0KCl7cmV0dXJuIDAuNTt9LHVwZGF0ZURhdGFSYW5nZV8oKXtpZih0aGlzLm92ZXJyaWRlRGF0YVJhbmdlXyE9PXVuZGVmaW5lZClyZXR1cm47dGhpcy5hdXRvRGF0YVJhbmdlXy5yZXNldCgpO2Zvcihjb25zdCBkYXR1bSBvZiB0aGlzLmRhdGFfKXt0aGlzLmF1dG9EYXRhUmFuZ2VfLmFkZFZhbHVlKGRhdHVtLnBlcmNlbnRpbGVfMCk7dGhpcy5hdXRvRGF0YVJhbmdlXy5hZGRWYWx1ZShkYXR1bS5wZXJjZW50aWxlXzEwMCk7fX0sdXBkYXRlWEF4aXNfKHhBeGlzKXt4QXhpcy5zZWxlY3RBbGwoJyonKS5yZW1vdmUoKTtpZih0aGlzLmhpZGVYQXhpcylyZXR1cm47dHIudWkuYi5OYW1lQ29sdW1uQ2hhcnQucHJvdG90eXBlLnVwZGF0ZVhBeGlzXy5jYWxsKHRoaXMseEF4aXMpO2NvbnN0IGJhc2VsaW5lPXhBeGlzLnNlbGVjdEFsbCgncGF0aCcpLmRhdGEoW3RoaXNdKTtiYXNlbGluZS5lbnRlcigpLmFwcGVuZCgnbGluZScpLmF0dHIoJ3N0cm9rZScsJ2JsYWNrJykuYXR0cigneDEnLHRoaXMueFNjYWxlXygwKSkuYXR0cigneDInLHRoaXMueFNjYWxlXyh0aGlzLmRhdGFfLmxlbmd0aCkpLmF0dHIoJ3kxJyx0aGlzLmdyYXBoSGVpZ2h0KS5hdHRyKCd5MicsdGhpcy5ncmFwaEhlaWdodCk7YmFzZWxpbmUuZXhpdCgpLnJlbW92ZSgpO30sdXBkYXRlRGF0YUNvbnRlbnRzXyhkYXRhU2VsKXtkYXRhU2VsLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpO2NvbnN0IGJveGVzU2VsPWRhdGFTZWwuc2VsZWN0QWxsKCdwYXRoJyk7Zm9yKGxldCBpbmRleD0wO2luZGV4PHRoaXMuZGF0YV8ubGVuZ3RoOysraW5kZXgpe2NvbnN0IGRhdHVtPXRoaXMuZGF0YV9baW5kZXhdO2NvbnN0IGNvbG9yPWRhdHVtLmNvbG9yfHwnYmxhY2snO2xldCBzZWw9Ym94ZXNTZWwuZGF0YShbZGF0dW1dKTtzZWwuZW50ZXIoKS5hcHBlbmQoJ3JlY3QnKS5hdHRyKCdmaWxsJyxjb2xvcikuYXR0cigneCcsdGhpcy54U2NhbGVfKGluZGV4KzAuMikpLmF0dHIoJ3dpZHRoJyx0aGlzLnhTY2FsZV8oaW5kZXgrMC44KS10aGlzLnhTY2FsZV8oaW5kZXgrMC4yKSkuYXR0cigneScsdGhpcy55U2NhbGVfKGRhdHVtLnBlcmNlbnRpbGVfNzUpKS5hdHRyKCdoZWlnaHQnLHRoaXMueVNjYWxlXyhkYXR1bS5wZXJjZW50aWxlXzI1KS0KLXRoaXMueVNjYWxlXyhkYXR1bS5wZXJjZW50aWxlXzc1KSk7c2VsLmV4aXQoKS5yZW1vdmUoKTtzZWw9Ym94ZXNTZWwuZGF0YShbZGF0dW1dKTtzZWwuZW50ZXIoKS5hcHBlbmQoJ2xpbmUnKS5hdHRyKCdzdHJva2UnLGNvbG9yKS5hdHRyKCd4MScsdGhpcy54U2NhbGVfKGluZGV4KSkuYXR0cigneDInLHRoaXMueFNjYWxlXyhpbmRleCsxKSkuYXR0cigneTEnLHRoaXMueVNjYWxlXyhkYXR1bS5wZXJjZW50aWxlXzUwKSkuYXR0cigneTInLHRoaXMueVNjYWxlXyhkYXR1bS5wZXJjZW50aWxlXzUwKSk7c2VsLmV4aXQoKS5yZW1vdmUoKTtzZWw9Ym94ZXNTZWwuZGF0YShbZGF0dW1dKTtzZWwuZW50ZXIoKS5hcHBlbmQoJ2xpbmUnKS5hdHRyKCdzdHJva2UnLGNvbG9yKS5hdHRyKCd4MScsdGhpcy54U2NhbGVfKGluZGV4KzAuNCkpLmF0dHIoJ3gyJyx0aGlzLnhTY2FsZV8oaW5kZXgrMC42KSkuYXR0cigneTEnLHRoaXMueVNjYWxlXyhkYXR1bS5wZXJjZW50aWxlXzApKS5hdHRyKCd5MicsdGhpcy55U2NhbGVfKGRhdHVtLnBlcmNlbnRpbGVfMCkpO3NlbC5leGl0KCkucmVtb3ZlKCk7c2VsPWJveGVzU2VsLmRhdGEoW2RhdHVtXSk7c2VsLmVudGVyKCkuYXBwZW5kKCdsaW5lJykuYXR0cignc3Ryb2tlJyxjb2xvcikuYXR0cigneDEnLHRoaXMueFNjYWxlXyhpbmRleCswLjQpKS5hdHRyKCd4MicsdGhpcy54U2NhbGVfKGluZGV4KzAuNikpLmF0dHIoJ3kxJyx0aGlzLnlTY2FsZV8oZGF0dW0ucGVyY2VudGlsZV8xMDApKS5hdHRyKCd5MicsdGhpcy55U2NhbGVfKGRhdHVtLnBlcmNlbnRpbGVfMTAwKSk7c2VsLmV4aXQoKS5yZW1vdmUoKTtzZWw9Ym94ZXNTZWwuZGF0YShbZGF0dW1dKTtzZWwuZW50ZXIoKS5hcHBlbmQoJ2xpbmUnKS5hdHRyKCdzdHJva2UnLGNvbG9yKS5hdHRyKCd4MScsdGhpcy54U2NhbGVfKGluZGV4KzAuNSkpLmF0dHIoJ3gyJyx0aGlzLnhTY2FsZV8oaW5kZXgrMC41KSkuYXR0cigneTEnLHRoaXMueVNjYWxlXyhkYXR1bS5wZXJjZW50aWxlXzEwMCkpLmF0dHIoJ3kyJyx0aGlzLnlTY2FsZV8oZGF0dW0ucGVyY2VudGlsZV8wKSk7c2VsLmV4aXQoKS5yZW1vdmUoKTt9fX07cmV0dXJue0JveENoYXJ0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2NvbnN0IEJhckNoYXJ0PXRyLnVpLmIuZGVmaW5lKCdiYXItY2hhcnQnLHRyLnVpLmIuQ29sdW1uQ2hhcnQpO0JhckNoYXJ0LnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmIuQ29sdW1uQ2hhcnQucHJvdG90eXBlLGRlY29yYXRlKCl7c3VwZXIuZGVjb3JhdGUoKTt0aGlzLnZlcnRpY2FsU2NhbGVfPXVuZGVmaW5lZDt0aGlzLmhvcml6b250YWxTY2FsZV89dW5kZWZpbmVkO30sdXBkYXRlU2NhbGVzXygpe3N1cGVyLnVwZGF0ZVNjYWxlc18oKTt0aGlzLnlTY2FsZV8ucmFuZ2UoW3RoaXMuZ3JhcGhXaWR0aCwwXSk7dGhpcy54U2NhbGVfLnJhbmdlKFswLHRoaXMuZ3JhcGhIZWlnaHRdKTt0aGlzLnZlcnRpY2FsU2NhbGVfPXRoaXMuaXNZTG9nU2NhbGVfP2QzLnNjYWxlLmxvZygxMCk6ZDMuc2NhbGUubGluZWFyKCk7dGhpcy52ZXJ0aWNhbFNjYWxlXy5kb21haW4odGhpcy54U2NhbGVfLmRvbWFpbigpKTt0aGlzLnZlcnRpY2FsU2NhbGVfLnJhbmdlKFt0aGlzLmdyYXBoSGVpZ2h0LDBdKTt0aGlzLmhvcml6b250YWxTY2FsZV89ZDMuc2NhbGUubGluZWFyKCk7dGhpcy5ob3Jpem9udGFsU2NhbGVfLmRvbWFpbih0aGlzLnlTY2FsZV8uZG9tYWluKCkpO3RoaXMuaG9yaXpvbnRhbFNjYWxlXy5yYW5nZShbMCx0aGlzLmdyYXBoV2lkdGhdKTt9LGdldCBkZWZhdWx0R3JhcGhIZWlnaHQoKXtyZXR1cm4gTWF0aC5tYXgoMjAsMTAqdGhpcy5kYXRhXy5sZW5ndGgpO30sZ2V0IGRlZmF1bHRHcmFwaFdpZHRoKCl7cmV0dXJuIDEwMDt9LGdldCBiYXJIZWlnaHQoKXtyZXR1cm4gdGhpcy5ncmFwaEhlaWdodC90aGlzLmRhdGEubGVuZ3RoO30sZHJhd0JydXNoXyhicnVzaFJlY3RzU2VsKXticnVzaFJlY3RzU2VsLmF0dHIoJ3gnLDApLmF0dHIoJ3dpZHRoJyx0aGlzLmdyYXBoV2lkdGgpLmF0dHIoJ3knLGQ9PnRoaXMudmVydGljYWxTY2FsZV8oZC5tYXgpKS5hdHRyKCdoZWlnaHQnLGQ9PnRoaXMudmVydGljYWxTY2FsZV8oZC5taW4pLXRoaXMudmVydGljYWxTY2FsZV8oZC5tYXgpKS5hdHRyKCdmaWxsJywncmdiKDIxMywgMjM2LCAyMjkpJyk7fSxnZXREYXRhUG9pbnRBdENoYXJ0UG9pbnRfKGNoYXJ0UG9pbnQpe2NvbnN0IGZsaXBwZWRQb2ludD17eDp0aGlzLmdyYXBoSGVpZ2h0LWNoYXJ0UG9pbnQueSx5OnRoaXMuZ3JhcGhXaWR0aC1jaGFydFBvaW50Lnh9O3JldHVybiBzdXBlci5nZXREYXRhUG9pbnRBdENoYXJ0UG9pbnRfKGZsaXBwZWRQb2ludCk7fSxkcmF3WEF4aXNfKHhBeGlzKXt4QXhpcy5hdHRyKCd0cmFuc2Zvcm0nLCd0cmFuc2xhdGUoMCwnK3RoaXMuZ3JhcGhIZWlnaHQrJyknKS5jYWxsKGQzLnN2Zy5heGlzKCkuc2NhbGUodGhpcy5ob3Jpem9udGFsU2NhbGVfKS5vcmllbnQoJ2JvdHRvbScpKTt9LGdldCB5QXhpc1dpZHRoKCl7cmV0dXJuIHRoaXMuY29tcHV0ZVNjYWxlVGlja1dpZHRoXyh0aGlzLnZlcnRpY2FsU2NhbGVfKTt9LGRyYXdZQXhpc18oeUF4aXMpe2NvbnN0IGF4aXNNb2RpZmllcj1kMy5zdmcuYXhpcygpLnNjYWxlKHRoaXMudmVydGljYWxTY2FsZV8pLm9yaWVudCgnbGVmdCcpO3lBeGlzLmNhbGwoYXhpc01vZGlmaWVyKTt9LGRyYXdIb3ZlclZhbHVlQm94XyhyZWN0KXtjb25zdCByZWN0SG92ZXJFdmVudD1uZXcgdHIuYi5FdmVudCgncmVjdC1tb3VzZWVudGVyJyk7cmVjdEhvdmVyRXZlbnQucmVjdD1yZWN0O3RoaXMuZGlzcGF0Y2hFdmVudChyZWN0SG92ZXJFdmVudCk7aWYoIXRoaXMuZW5hYmxlSG92ZXJCb3gpcmV0dXJuO2NvbnN0IHNlcmllc0tleXM9Wy4uLnRoaXMuc2VyaWVzQnlLZXlfLmtleXMoKV07Y29uc3QgY2hhcnRBcmVhU2VsPWQzLnNlbGVjdCh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQpO2NoYXJ0QXJlYVNlbC5zZWxlY3RBbGwoJy5ob3ZlcicpLnJlbW92ZSgpO2xldCBrZXlXaWR0aFB4PTA7bGV0IGtleUhlaWdodFB4PTA7bGV0IHhXaWR0aFB4PTA7bGV0IHhIZWlnaHRQeD0wO2lmKHNlcmllc0tleXMubGVuZ3RoPjEpe2tleVdpZHRoUHg9dHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQscmVjdC5rZXkpLndpZHRoO2tleUhlaWdodFB4PXRoaXMudGV4dEhlaWdodFB4Xzt9Ci1pZih0aGlzLmRhdGEubGVuZ3RoPjEpe3hXaWR0aFB4PXRyLnVpLmIuZ2V0U1ZHVGV4dFNpemUodGhpcy5jaGFydEFyZWFFbGVtZW50LCcnK3JlY3QuZGF0dW0ueCkud2lkdGg7eEhlaWdodFB4PXRoaXMudGV4dEhlaWdodFB4Xzt9Ci1jb25zdCB2YWx1ZVdpZHRoUHg9dHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQscmVjdC52YWx1ZSkud2lkdGg7Y29uc3QgdmFsdWVIZWlnaHRQeD10aGlzLnRleHRIZWlnaHRQeF87Y29uc3QgaG92ZXJXaWR0aFB4PU1hdGgubWluKE1hdGgubWF4KGtleVdpZHRoUHgseFdpZHRoUHgsdmFsdWVXaWR0aFB4KSs1LE1hdGgubWF4KDUwLHJlY3Qud2lkdGhQeCkpO2NvbnN0IGhvdmVyVG9wUHg9cmVjdC50b3BQeCsocmVjdC5oZWlnaHRQeC8yKTtjb25zdCBob3ZlckxlZnRQeD1yZWN0LmxlZnRQeCtyZWN0LndpZHRoUHgtaG92ZXJXaWR0aFB4O2NoYXJ0QXJlYVNlbC5hcHBlbmQoJ3JlY3QnKS5hdHRyKCdjbGFzcycsJ2hvdmVyJykuYXR0cignZmlsbCcsJ3doaXRlJykuYXR0cigneCcsaG92ZXJMZWZ0UHgpLmF0dHIoJ3knLGhvdmVyVG9wUHgpLmF0dHIoJ3dpZHRoJyxob3ZlcldpZHRoUHgpLmF0dHIoJ2hlaWdodCcsa2V5SGVpZ2h0UHgreEhlaWdodFB4K3ZhbHVlSGVpZ2h0UHgpO2lmKHNlcmllc0tleXMubGVuZ3RoPjEpe2NoYXJ0QXJlYVNlbC5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsJ2hvdmVyJykuYXR0cignZmlsbCcscmVjdC5jb2xvcikuYXR0cigneCcsaG92ZXJMZWZ0UHgrMikuYXR0cigneScsaG92ZXJUb3BQeCtrZXlIZWlnaHRQeC0zKS50ZXh0KHJlY3Qua2V5KTt9Ci1pZih0aGlzLmRhdGEubGVuZ3RoPjEpe2NoYXJ0QXJlYVNlbC5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsJ2hvdmVyJykuYXR0cignZmlsbCcscmVjdC5jb2xvcikuYXR0cigneCcsaG92ZXJMZWZ0UHgrMikuYXR0cigneScsaG92ZXJUb3BQeCtrZXlIZWlnaHRQeCt2YWx1ZUhlaWdodFB4LTMpLnRleHQoJycrcmVjdC5kYXR1bS54KTt9Ci1jaGFydEFyZWFTZWwuYXBwZW5kKCd0ZXh0JykuYXR0cignY2xhc3MnLCdob3ZlcicpLmF0dHIoJ2ZpbGwnLHJlY3QuY29sb3IpLmF0dHIoJ3gnLGhvdmVyTGVmdFB4KzIpLmF0dHIoJ3knLGhvdmVyVG9wUHgreEhlaWdodFB4K2tleUhlaWdodFB4K3ZhbHVlSGVpZ2h0UHgtMykudGV4dChyZWN0LnZhbHVlKTt9LGZsaXBSZWN0XyhyZWN0KXtyZXR1cm57ZGF0dW06cmVjdC5kYXR1bSxpbmRleDpyZWN0LmluZGV4LGtleTpyZWN0LmtleSx2YWx1ZTpyZWN0LnZhbHVlLGNvbG9yOnJlY3QuY29sb3IsdG9wUHg6dGhpcy5ncmFwaEhlaWdodC1yZWN0LmxlZnRQeC1yZWN0LndpZHRoUHgsbGVmdFB4OnRoaXMuZ3JhcGhXaWR0aC1yZWN0LnRvcFB4LXJlY3QuaGVpZ2h0UHgsd2lkdGhQeDpyZWN0LmhlaWdodFB4LGhlaWdodFB4OnJlY3Qud2lkdGhQeCx1bmRlcmZsb3c6cmVjdC51bmRlcmZsb3csb3ZlcmZsb3c6cmVjdC5vdmVyZmxvdyx9O30sZHJhd1JlY3RfKHJlY3Qsc2VsKXtzdXBlci5kcmF3UmVjdF8odGhpcy5mbGlwUmVjdF8ocmVjdCksc2VsKTt9LGRyYXdVbmRlcmZsb3dfKHJlY3QscmVjdHNTZWwpe2xldCBzZWw9cmVjdHNTZWwuZGF0YShbcmVjdF0pO3NlbC5lbnRlcigpLmFwcGVuZCgndGV4dCcpLnRleHQoJyonKS5hdHRyKCdmaWxsJyxyZWN0LmNvbG9yKS5hdHRyKCd4JywwKS5hdHRyKCd5Jyx0aGlzLmdyYXBoSGVpZ2h0LXJlY3QubGVmdFB4KwotMysocmVjdC53aWR0aFB4LzIpKTtzZWwuZXhpdCgpLnJlbW92ZSgpO3NlbD1yZWN0c1NlbC5kYXRhKFtyZWN0XSk7c2VsLmVudGVyKCkuYXBwZW5kKCdyZWN0JykuYXR0cignZmlsbCcsJ3JnYmEoMCwgMCwgMCwgMCknKS5hdHRyKCd4JywwKS5hdHRyKCd5Jyx0aGlzLmdyYXBoSGVpZ2h0LXJlY3QubGVmdFB4LXJlY3Qud2lkdGhQeCkuYXR0cignd2lkdGgnLDEwKS5hdHRyKCdoZWlnaHQnLHJlY3Qud2lkdGhQeCkub24oJ21vdXNlZW50ZXInLCgpPT50aGlzLmRyYXdIb3ZlclZhbHVlQm94Xyh0aGlzLmZsaXBSZWN0XyhyZWN0KSkpLm9uKCdtb3VzZWxlYXZlJywoKT0+dGhpcy5jbGVhckhvdmVyVmFsdWVCb3hfKHJlY3QpKTtzZWwuZXhpdCgpLnJlbW92ZSgpO30sZHJhd092ZXJmbG93XyhyZWN0LHNlbCl7c2VsPXNlbC5kYXRhKFtyZWN0XSk7c2VsLmVudGVyKCkuYXBwZW5kKCd0ZXh0JykudGV4dCgnKicpLmF0dHIoJ2ZpbGwnLHJlY3QuY29sb3IpLmF0dHIoJ3gnLHRoaXMuZ3JhcGhXaWR0aCkuYXR0cigneScsdGhpcy5ncmFwaEhlaWdodC1yZWN0LmxlZnRQeCsKLTMrKHJlY3Qud2lkdGhQeC8yKSk7c2VsLmV4aXQoKS5yZW1vdmUoKTt9fTtyZXR1cm57QmFyQ2hhcnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgTmFtZUJhckNoYXJ0PXRyLnVpLmIuZGVmaW5lKCduYW1lLWJhci1jaGFydCcsdHIudWkuYi5CYXJDaGFydCk7Y29uc3QgWV9BWElTX1BBRERJTkc9MjtOYW1lQmFyQ2hhcnQucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYi5CYXJDaGFydC5wcm90b3R5cGUsZ2V0RGF0YVBvaW50QXRDaGFydFBvaW50XyhjaGFydFBvaW50KXtyZXR1cm57eDp0ci51aS5iLkJhckNoYXJ0LnByb3RvdHlwZS5nZXREYXRhUG9pbnRBdENoYXJ0UG9pbnRfLmNhbGwodGhpcyxjaGFydFBvaW50KS54LHk6cGFyc2VJbnQoTWF0aC5mbG9vcigodGhpcy5ncmFwaEhlaWdodC1jaGFydFBvaW50LnkpL3RoaXMuYmFySGVpZ2h0KSl9O30sZ2V0WEZvckRhdHVtXyhkYXR1bSxpbmRleCl7cmV0dXJuIGluZGV4O30sZ2V0IHlBeGlzV2lkdGgoKXtpZih0aGlzLmRhdGEubGVuZ3RoPT09MClyZXR1cm4gMDtyZXR1cm4gWV9BWElTX1BBRERJTkcrdHIuYi5tYXRoLlN0YXRpc3RpY3MubWF4KHRoaXMuZGF0YV8sZD0+dHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLGQueCkud2lkdGgpO30sZ2V0IGRlZmF1bHRHcmFwaEhlaWdodCgpe3JldHVybigzK3RoaXMudGV4dEhlaWdodFB4XykqdGhpcy5kYXRhLmxlbmd0aDt9LHVwZGF0ZVlBeGlzXyh5QXhpcyl7aWYodHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLCd0ZXN0Jykud2lkdGg9PT0wKXt0ci5iLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy51cGRhdGVZQXhpc18oeUF4aXMpKTtyZXR1cm47fQoteUF4aXMuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7Y29uc3QgbmFtZVRleHRzPXlBeGlzLnNlbGVjdEFsbCgndGV4dCcpLmRhdGEodGhpcy5kYXRhXyk7bmFtZVRleHRzLmVudGVyKCkuYXBwZW5kKCd0ZXh0JykuYXR0cigneCcsZD0+LSh0ci51aS5iLmdldFNWR1RleHRTaXplKHRoaXMsZC54KS53aWR0aCtZX0FYSVNfUEFERElORykpLmF0dHIoJ3knLChkLGluZGV4KT0+dGhpcy52ZXJ0aWNhbFNjYWxlXyhpbmRleCkpLnRleHQoZD0+ZC54KTtuYW1lVGV4dHMuZXhpdCgpLnJlbW92ZSgpO2xldCBwcmV2aW91c1RvcD11bmRlZmluZWQ7Zm9yKGNvbnN0IHRleHQgb2YgbmFtZVRleHRzWzBdKXtjb25zdCBiYm94PXRleHQuZ2V0QkJveCgpO2lmKChwcmV2aW91c1RvcD09PXVuZGVmaW5lZCl8fChwcmV2aW91c1RvcD4oYmJveC55K2Jib3guaGVpZ2h0KSkpe3ByZXZpb3VzVG9wPWJib3gueTt9ZWxzZXt0ZXh0LnN0eWxlLm9wYWNpdHk9MDt9fX19O3JldHVybntOYW1lQmFyQ2hhcnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7Y29uc3QgRElBR05PU1RJQ19TUEFOX0JFSEFWSU9SPXtjcmVhdGVkKCl7dGhpcy5kaWFnbm9zdGljXz11bmRlZmluZWQ7dGhpcy5uYW1lXz11bmRlZmluZWQ7dGhpcy5oaXN0b2dyYW1fPXVuZGVmaW5lZDt9LGF0dGFjaGVkKCl7aWYodGhpcy5kaWFnbm9zdGljXyl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGRpYWdub3N0aWMoKXtyZXR1cm4gdGhpcy5kaWFnbm9zdGljXzt9LGJ1aWxkKGRpYWdub3N0aWMsbmFtZSxoaXN0b2dyYW0pe3RoaXMuZGlhZ25vc3RpY189ZGlhZ25vc3RpYzt0aGlzLm5hbWVfPW5hbWU7dGhpcy5oaXN0b2dyYW1fPWhpc3RvZ3JhbTtpZih0aGlzLmlzQXR0YWNoZWQpdGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe3Rocm93IG5ldyBFcnJvcignZG9tLW1vZHVsZXMgbXVzdCBvdmVycmlkZSB1cGRhdGVDb250ZW50c18oKScpO319O3JldHVybntESUFHTk9TVElDX1NQQU5fQkVIQVZJT1IsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7Y29uc3QgREVGQVVMVF9DT0xPUl9TQ0hFTUU9bmV3IHRyLmIuU2luZWJvd0NvbG9yR2VuZXJhdG9yKCk7ZnVuY3Rpb24gZ2V0SGlzdG9ncmFtTmFtZShoaXN0b2dyYW0sZGlhZ25vc3RpY05hbWUsa2V5KXtpZihoaXN0b2dyYW09PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCBuYW1lTWFwPWhpc3RvZ3JhbS5kaWFnbm9zdGljcy5nZXQoZGlhZ25vc3RpY05hbWUpO2lmKG5hbWVNYXA9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gbmFtZU1hcC5nZXQoa2V5KTt9Ci1jbGFzcyBCcmVha2Rvd25UYWJsZVN1bW1hcnlSb3d7Y29uc3RydWN0b3IoZGlzcGxheUVsZW1lbnQsaGlzdG9ncmFtTmFtZXMpe3RoaXMuZGlzcGxheUVsZW1lbnRfPWRpc3BsYXlFbGVtZW50O3RoaXMuaGlzdG9ncmFtTmFtZXNfPWhpc3RvZ3JhbU5hbWVzO3RoaXMua2V5U3Bhbl89dW5kZWZpbmVkO30KLWdldCBudW1iZXJWYWx1ZSgpe3JldHVybiB1bmRlZmluZWQ7fQotZ2V0IGtleVNwYW4oKXtpZih0aGlzLmtleVNwYW5fPT09dW5kZWZpbmVkKXtpZih0aGlzLmhpc3RvZ3JhbU5hbWVzXy5sZW5ndGgpe3RoaXMua2V5U3Bhbl89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7dGhpcy5rZXlTcGFuXy5zZXRTZWxlY3Rpb25BbmRDb250ZW50KHRoaXMuaGlzdG9ncmFtTmFtZXNfLCdTZWxlY3QgQWxsJyk7fWVsc2V7dGhpcy5rZXlTcGFuXz0nU3VtJzt9fQotcmV0dXJuIHRoaXMua2V5U3Bhbl87fQotZ2V0IG5hbWUoKXtyZXR1cm4nU3VtJzt9Ci1nZXQgZGlzcGxheUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5kaXNwbGF5RWxlbWVudF87fQotZ2V0IHN0cmluZ1BlcmNlbnQoKXtyZXR1cm4nMTAwJSc7fX0KLWNsYXNzIEJyZWFrZG93blRhYmxlUm93e2NvbnN0cnVjdG9yKG5hbWUsdmFsdWUsaGlzdG9ncmFtTmFtZSx1bml0LGNvbG9yKXt0aGlzLm5hbWVfPW5hbWU7dGhpcy52YWx1ZV89dmFsdWU7dGhpcy5oaXN0b2dyYW1OYW1lXz1oaXN0b2dyYW1OYW1lO3RoaXMudW5pdF89dW5pdDtpZih0eXBlb2YgdmFsdWUhPT0nbnVtYmVyJyl7dGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCB2YWx1ZSAnK3ZhbHVlKTt9Ci10aGlzLnRhYmxlU3VtXz11bmRlZmluZWQ7dGhpcy5rZXlTcGFuXz11bmRlZmluZWQ7dGhpcy5jb2xvcl89Y29sb3I7Y29uc3QgaHNsPXRoaXMuY29sb3IudG9IU0woKTtoc2wubCo9MC44NTt0aGlzLmhpZ2hsaWdodGVkQ29sb3JfPXRyLmIuQ29sb3IuZnJvbUhTTChoc2wpO2lmKHRoaXMudW5pdF8pe3RoaXMuZGlzcGxheUVsZW1lbnRfPXRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbih0aGlzLm51bWJlclZhbHVlLHt1bml0OnRoaXMudW5pdF8sfSk7fWVsc2V7dGhpcy5kaXNwbGF5RWxlbWVudF89dHIudWkuYi5jcmVhdGVTcGFuKHt0ZXh0Q29udGVudDp0aGlzLnN0cmluZ1ZhbHVlLH0pO319Ci1nZXQgbmFtZSgpe3JldHVybiB0aGlzLm5hbWVfO30KLWdldCBjb2xvcigpe3JldHVybiB0aGlzLmNvbG9yXzt9Ci1nZXQgaGlnaGxpZ2h0ZWRDb2xvcigpe3JldHVybiB0aGlzLmhpZ2hsaWdodGVkQ29sb3JfO30KLWdldCBrZXlTcGFuKCl7aWYodGhpcy5rZXlTcGFuXz09PXVuZGVmaW5lZCl7aWYodGhpcy5oaXN0b2dyYW1OYW1lXyl7dGhpcy5rZXlTcGFuXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWFuYWx5c2lzLWxpbmsnKTt0aGlzLmtleVNwYW5fLnNldFNlbGVjdGlvbkFuZENvbnRlbnQoW3RoaXMuaGlzdG9ncmFtTmFtZV9dLHRoaXMubmFtZSk7dGhpcy5rZXlTcGFuXy5jb2xvcj10aGlzLmNvbG9yO3RoaXMua2V5U3Bhbl8udGl0bGU9dGhpcy5oaXN0b2dyYW1OYW1lXzt9ZWxzZXt0aGlzLmtleVNwYW5fPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTt0aGlzLmtleVNwYW5fLmlubmVyVGV4dD10aGlzLm5hbWU7dGhpcy5rZXlTcGFuXy5zdHlsZS5jb2xvcj10aGlzLmNvbG9yO319Ci1yZXR1cm4gdGhpcy5rZXlTcGFuXzt9Ci1nZXQgbnVtYmVyVmFsdWUoKXtpZighaXNOYU4odGhpcy52YWx1ZV8pJiYodGhpcy52YWx1ZV8hPT1JbmZpbml0eSkmJih0aGlzLnZhbHVlXyE9PS1JbmZpbml0eSkmJih0aGlzLnZhbHVlXz4wKSlyZXR1cm4gdGhpcy52YWx1ZV87cmV0dXJuIHVuZGVmaW5lZDt9Ci1nZXQgc3RyaW5nVmFsdWUoKXtpZigodGhpcy51bml0XyE9PXVuZGVmaW5lZCkmJiFpc05hTih0aGlzLnZhbHVlXykmJih0aGlzLnZhbHVlXyE9PUluZmluaXR5KSYmKHRoaXMudmFsdWVfIT09LUluZmluaXR5KSl7cmV0dXJuIHRoaXMudW5pdF8uZm9ybWF0KHRoaXMudmFsdWVfKTt9Ci1yZXR1cm4gdGhpcy52YWx1ZV8udG9TdHJpbmcoKTt9Ci1zZXQgdGFibGVTdW0ocyl7dGhpcy50YWJsZVN1bV89czt9Ci1nZXQgc3RyaW5nUGVyY2VudCgpe2lmKHRoaXMudGFibGVTdW1fPT09dW5kZWZpbmVkKXJldHVybicnO2NvbnN0IG51bT10aGlzLm51bWJlclZhbHVlO2lmKG51bT09PXVuZGVmaW5lZClyZXR1cm4nJztyZXR1cm4gTWF0aC5mbG9vcihudW0qMTAwLjAvdGhpcy50YWJsZVN1bV8pKyclJzt9Ci1nZXQgZGlzcGxheUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5kaXNwbGF5RWxlbWVudF87fQotY29tcGFyZShvdGhlcil7aWYodGhpcy5udW1iZXJWYWx1ZT09PXVuZGVmaW5lZCl7aWYob3RoZXIubnVtYmVyVmFsdWU9PT11bmRlZmluZWQpe3JldHVybiB0aGlzLm5hbWUubG9jYWxlQ29tcGFyZShvdGhlci5uYW1lKTt9Ci1yZXR1cm4gMTt9Ci1pZihvdGhlci5udW1iZXJWYWx1ZT09PXVuZGVmaW5lZCl7cmV0dXJuLTE7fQotaWYodGhpcy5udW1iZXJWYWx1ZT09PW90aGVyLm51bWJlclZhbHVlKXtyZXR1cm4gdGhpcy5uYW1lLmxvY2FsZUNvbXBhcmUob3RoZXIubmFtZSk7fQotcmV0dXJuIG90aGVyLm51bWJlclZhbHVlLXRoaXMubnVtYmVyVmFsdWU7fX0KLVBvbHltZXIoe2lzOid0ci12LXVpLWJyZWFrZG93bi1zcGFuJyxiZWhhdmlvcnM6W3RyLnYudWkuRElBR05PU1RJQ19TUEFOX0JFSEFWSU9SXSxjcmVhdGVkKCl7dGhpcy5jaGFydF89bmV3IHRyLnVpLmIuQ29sdW1uQ2hhcnQoKTt0aGlzLmNoYXJ0Xy5ncmFwaEhlaWdodD0xMzA7dGhpcy5jaGFydF8uaXNTdGFja2VkPXRydWU7dGhpcy5jaGFydF8uaGlkZVhBeGlzPXRydWU7dGhpcy5jaGFydF8uaGlkZUxlZ2VuZD10cnVlO3RoaXMuY2hhcnRfLmVuYWJsZUhvdmVyQm94PWZhbHNlO3RoaXMuY2hhcnRfLmFkZEV2ZW50TGlzdGVuZXIoJ3JlY3QtbW91c2VlbnRlcicsZXZlbnQ9PnRoaXMub25SZWN0TW91c2VFbnRlcl8oZXZlbnQpKTt0aGlzLmNoYXJ0Xy5hZGRFdmVudExpc3RlbmVyKCdyZWN0LW1vdXNlbGVhdmUnLGV2ZW50PT50aGlzLm9uUmVjdE1vdXNlTGVhdmVfKGV2ZW50KSk7fSxvblJlY3RNb3VzZUVudGVyXyhldmVudCl7Zm9yKGNvbnN0IHJvdyBvZiB0aGlzLiQudGFibGUudGFibGVSb3dzKXtpZihyb3cubmFtZT09PWV2ZW50LnJlY3Qua2V5KXtyb3cuZGlzcGxheUVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZD1ldmVudC5yZWN0LmNvbG9yO3Jvdy5rZXlTcGFuLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTt9ZWxzZXtyb3cuZGlzcGxheUVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZD0nJzt9fX0sb25SZWN0TW91c2VMZWF2ZV8oZXZlbnQpe2Zvcihjb25zdCByb3cgb2YgdGhpcy4kLnRhYmxlLnRhYmxlUm93cyl7cm93LmRpc3BsYXlFbGVtZW50LnN0eWxlLmJhY2tncm91bmQ9Jyc7fX0scmVhZHkoKXtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLmNoYXJ0Xyk7dGhpcy4kLnRhYmxlLnplYnJhPXRydWU7dGhpcy4kLnRhYmxlLnNob3dIZWFkZXI9ZmFsc2U7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1be3ZhbHVlOnJvdz0+cm93LmtleVNwYW4sfSx7dmFsdWU6cm93PT5yb3cuZGlzcGxheUVsZW1lbnQsYWxpZ246dHIudWkuYi5UYWJsZUZvcm1hdC5Db2x1bW5BbGlnbm1lbnQuUklHSFQsfSx7dmFsdWU6cm93PT5yb3cuc3RyaW5nUGVyY2VudCxhbGlnbjp0ci51aS5iLlRhYmxlRm9ybWF0LkNvbHVtbkFsaWdubWVudC5SSUdIVCx9LF07fSx1cGRhdGVDb250ZW50c18oKXt0aGlzLiQuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC50YWJsZS5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQuZW1wdHkuc3R5bGUuZGlzcGxheT0nYmxvY2snO2lmKCF0aGlzLmRpYWdub3N0aWNfKXt0aGlzLmNoYXJ0Xy5kYXRhPVtdO3JldHVybjt9Ci1pZih0aGlzLmhpc3RvZ3JhbV8pdGhpcy5jaGFydF8udW5pdD10aGlzLmhpc3RvZ3JhbV8udW5pdDtsZXQgY29sb3JTY2hlbWU9dW5kZWZpbmVkO2lmKHRoaXMuZGlhZ25vc3RpYy5jb2xvclNjaGVtZT09PXRyLnYuZC5DT0xPUl9TQ0hFTUVfQ0hST01FX1VTRVJfRlJJRU5ETFlfQ0FURUdPUllfRFJJVkVSKXtjb2xvclNjaGVtZT0obmFtZSk9PntsZXQgY2F0PW5hbWUuc3BsaXQoJyAnKTtjYXQ9Y2F0W2NhdC5sZW5ndGgtMV07cmV0dXJuIHRyLmUuY2hyb21lLkNocm9tZVVzZXJGcmllbmRseUNhdGVnb3J5RHJpdmVyLmdldENvbG9yKGNhdCk7fTt9ZWxzZSBpZih0aGlzLmRpYWdub3N0aWMuY29sb3JTY2hlbWUhPT11bmRlZmluZWQpe2NvbG9yU2NoZW1lPShuYW1lKT0+dHIuYi5GaXhlZENvbG9yU2NoZW1lUmVnaXN0cnkubG9va1VwKHRoaXMuZGlhZ25vc3RpYy5jb2xvclNjaGVtZSkuZ2V0Q29sb3IobmFtZSk7fWVsc2V7Y29sb3JTY2hlbWU9KG5hbWUpPT5ERUZBVUxUX0NPTE9SX1NDSEVNRS5jb2xvckZvcktleShuYW1lKTt9Ci1jb25zdCB0YWJsZVJvd3M9W107bGV0IHRhYmxlU3VtPTA7Y29uc3QgaGlzdG9ncmFtTmFtZXM9W107Zm9yKGNvbnN0W2tleSx2YWx1ZV1vZiB0aGlzLmRpYWdub3N0aWMpe2xldCBoaXN0b2dyYW1OYW1lO2xldCByb3c7aWYodmFsdWUgaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbSl7aGlzdG9ncmFtTmFtZT12YWx1ZS5uYW1lO3Jvdz1uZXcgQnJlYWtkb3duVGFibGVSb3coa2V5LHZhbHVlLnN1bSxoaXN0b2dyYW1OYW1lLHZhbHVlLnVuaXQsY29sb3JTY2hlbWUoa2V5KSk7fWVsc2V7aGlzdG9ncmFtTmFtZT1nZXRIaXN0b2dyYW1OYW1lKHRoaXMuaGlzdG9ncmFtXyx0aGlzLm5hbWVfLGtleSk7cm93PW5ldyBCcmVha2Rvd25UYWJsZVJvdyhrZXksdmFsdWUsaGlzdG9ncmFtTmFtZSx0aGlzLmNoYXJ0Xy51bml0LGNvbG9yU2NoZW1lKGtleSkpO30KLXRhYmxlUm93cy5wdXNoKHJvdyk7aWYocm93Lm51bWJlclZhbHVlIT09dW5kZWZpbmVkKXRhYmxlU3VtKz1yb3cubnVtYmVyVmFsdWU7aWYoaGlzdG9ncmFtTmFtZSl7aGlzdG9ncmFtTmFtZXMucHVzaChoaXN0b2dyYW1OYW1lKTt9fQotdGFibGVSb3dzLnNvcnQoKHgseSk9PnguY29tcGFyZSh5KSk7aWYodGFibGVTdW0+MCl7bGV0IHN1bW1hcnlEaXNwbGF5RWxlbWVudD10YWJsZVN1bTtpZih0aGlzLmNoYXJ0Xy51bml0IT09dW5kZWZpbmVkKXtzdW1tYXJ5RGlzcGxheUVsZW1lbnQ9dGhpcy5jaGFydF8udW5pdC5mb3JtYXQodGFibGVTdW0pO30KLXN1bW1hcnlEaXNwbGF5RWxlbWVudD10ci51aS5iLmNyZWF0ZVNwYW4oe3RleHRDb250ZW50OnN1bW1hcnlEaXNwbGF5RWxlbWVudCx9KTt0YWJsZVJvd3MudW5zaGlmdChuZXcgQnJlYWtkb3duVGFibGVTdW1tYXJ5Um93KHN1bW1hcnlEaXNwbGF5RWxlbWVudCxoaXN0b2dyYW1OYW1lcykpO30KLWNvbnN0IGNoYXJ0RGF0YT17eDowfTtmb3IoY29uc3Qgcm93IG9mIHRhYmxlUm93cyl7aWYocm93Lm51bWJlclZhbHVlPT09dW5kZWZpbmVkKWNvbnRpbnVlO3Jvdy50YWJsZVN1bT10YWJsZVN1bTtjaGFydERhdGFbcm93Lm5hbWVdPXJvdy5udW1iZXJWYWx1ZTtjb25zdCBkYXRhU2VyaWVzPXRoaXMuY2hhcnRfLmdldERhdGFTZXJpZXMocm93Lm5hbWUpO2RhdGFTZXJpZXMuY29sb3I9cm93LmNvbG9yO2RhdGFTZXJpZXMuaGlnaGxpZ2h0ZWRDb2xvcj1yb3cuaGlnaGxpZ2h0ZWRDb2xvcjt9Ci1pZih0YWJsZVJvd3MubGVuZ3RoPjApe3RoaXMuJC50YWJsZS5zdHlsZS5kaXNwbGF5PSdibG9jayc7dGhpcy4kLmVtcHR5LnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9dGFibGVSb3dzO3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fQotaWYoT2JqZWN0LmtleXMoY2hhcnREYXRhKS5sZW5ndGg+MSl7dGhpcy4kLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSdibG9jayc7dGhpcy4kLmVtcHR5LnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuY2hhcnRfLmRhdGE9W2NoYXJ0RGF0YV07fX19KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXYtdWktY29sbGVjdGVkLXJlbGF0ZWQtZXZlbnQtc2V0LXNwYW4nLGJlaGF2aW9yczpbdHIudi51aS5ESUFHTk9TVElDX1NQQU5fQkVIQVZJT1JdLHVwZGF0ZUNvbnRlbnRzXygpe1BvbHltZXIuZG9tKHRoaXMpLnRleHRDb250ZW50PScnO2Zvcihjb25zdFtjYW5vbmljYWxVcmwsZXZlbnRzXW9mIHRoaXMuZGlhZ25vc3RpYyl7Y29uc3QgbGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7aWYoZXZlbnRzLmxlbmd0aD09PTEpe2NvbnN0IGV2ZW50PXRyLmIuZ2V0T25seUVsZW1lbnQoZXZlbnRzKTtsaW5rLnRleHRDb250ZW50PWV2ZW50LnRpdGxlKycgJysKLXRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Ncy5mb3JtYXQoZXZlbnQuZHVyYXRpb24pO31lbHNle2xpbmsudGV4dENvbnRlbnQ9ZXZlbnRzLmxlbmd0aCsnIGV2ZW50cyc7fQotbGluay5ocmVmPWNhbm9uaWNhbFVybDtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChsaW5rKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTt9fX0pO3JldHVybnt9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi51aScsZnVuY3Rpb24oKXtQb2x5bWVyKHtpczondHItdi11aS1kYXRlLXJhbmdlLXNwYW4nLGJlaGF2aW9yczpbdHIudi51aS5ESUFHTk9TVElDX1NQQU5fQkVIQVZJT1JdLHVwZGF0ZUNvbnRlbnRzXygpe2lmKHRoaXMuZGlhZ25vc3RpYz09PXVuZGVmaW5lZCl7UG9seW1lci5kb20odGhpcykudGV4dENvbnRlbnQ9Jyc7cmV0dXJuO30KLVBvbHltZXIuZG9tKHRoaXMpLnRleHRDb250ZW50PXRoaXMuZGlhZ25vc3RpYy50b1N0cmluZygpO319KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXYtdWktZ2VuZXJpYy1zZXQtc3BhbicsYmVoYXZpb3JzOlt0ci52LnVpLkRJQUdOT1NUSUNfU1BBTl9CRUhBVklPUl0sdXBkYXRlQ29udGVudHNfKCl7dGhpcy4kLmdlbmVyaWMuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLmxpbmtzLnRleHRDb250ZW50PScnO2lmKHRoaXMuZGlhZ25vc3RpYz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgdmFsdWVzPUFycmF5LmZyb20odGhpcy5kaWFnbm9zdGljKTtsZXQgYXJlQWxsU3RyaW5ncz10cnVlO2xldCBhcmVBbGxOdW1iZXJzPXRydWU7Zm9yKGNvbnN0IHZhbHVlIG9mIHZhbHVlcyl7aWYodHlwZW9mIHZhbHVlIT09J251bWJlcicpe2FyZUFsbE51bWJlcnM9ZmFsc2U7aWYodHlwZW9mIHZhbHVlIT09J3N0cmluZycpe2FyZUFsbFN0cmluZ3M9ZmFsc2U7YnJlYWs7fX19Ci1pZighYXJlQWxsU3RyaW5ncyl7dGhpcy4kLmdlbmVyaWMuc3R5bGUuZGlzcGxheT0nJzt0aGlzLiQuZ2VuZXJpYy5vYmplY3Q9dmFsdWVzO3JldHVybjt9Ci1pZihhcmVBbGxOdW1iZXJzKXt2YWx1ZXMuc29ydCgoeCx5KT0+eC15KTt9ZWxzZXt2YWx1ZXMuc29ydCgpO30KLWZvcihjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpe2NvbnN0IGxpbms9e3RleHRDb250ZW50OicnK3ZhbHVlfTtpZih0ci5iLmlzVXJsKHZhbHVlKSlsaW5rLmhyZWY9dmFsdWU7aWYodGhpcy5uYW1lXz09PXRyLnYuZC5SRVNFUlZFRF9OQU1FUy5UUkFDRV9VUkxTKXtsaW5rLnRleHRDb250ZW50PXZhbHVlLnN1YnN0cigxK3ZhbHVlLmxhc3RJbmRleE9mKCcvJykpO30KLWNvbnN0IGxpbmtFbD10ci51aS5iLmNyZWF0ZUxpbmsobGluayk7aWYobGluay5ocmVmKXtsaW5rRWwudGFyZ2V0PSdfYmxhbmsnO2xpbmtFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZT0+ZS5zdG9wUHJvcGFnYXRpb24oKSk7fQotdGhpcy4kLmxpbmtzLmFwcGVuZENoaWxkKGxpbmtFbCk7fX19KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXYtdWktcmVsYXRlZC1ldmVudC1zZXQtc3BhbicsYmVoYXZpb3JzOlt0ci52LnVpLkRJQUdOT1NUSUNfU1BBTl9CRUhBVklPUl0sdXBkYXRlQ29udGVudHNfKCl7UG9seW1lci5kb20odGhpcykudGV4dENvbnRlbnQ9Jyc7Y29uc3QgZXZlbnRzPW5ldyB0ci5tb2RlbC5FdmVudFNldChbLi4udGhpcy5kaWFnbm9zdGljXSk7Y29uc3QgbGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWFuYWx5c2lzLWxpbmsnKTtsZXQgbGFiZWw9ZXZlbnRzLmxlbmd0aCsnIGV2ZW50cyc7aWYoZXZlbnRzLmxlbmd0aD09PTEpe2NvbnN0IGV2ZW50PXRyLmIuZ2V0T25seUVsZW1lbnQoZXZlbnRzKTtsYWJlbD1ldmVudC50aXRsZSsnICc7bGFiZWwrPXRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Ncy5mb3JtYXQoZXZlbnQuZHVyYXRpb24pO30KLWxpbmsuc2V0U2VsZWN0aW9uQW5kQ29udGVudChldmVudHMsbGFiZWwpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGxpbmspO319KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXYtdWktcmVsYXRlZC1oaXN0b2dyYW0tbWFwLXNwYW4nLGJlaGF2aW9yczpbdHIudi51aS5ESUFHTk9TVElDX1NQQU5fQkVIQVZJT1JdLHJlYWR5KCl7dGhpcy4kLnRhYmxlLnNob3dIZWFkZXI9ZmFsc2U7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1be3ZhbHVlOnJvdz0+cm93WzBdfSx7dmFsdWU6cm93PT5yb3dbMV19LF07fSx1cGRhdGVDb250ZW50c18oKXtQb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudD0nJztjb25zdCByb3dzPVtdO2NvbnN0IGhpc3RvZ3JhbU5hbWVzPW5ldyBTZXQoKTtmb3IoY29uc3RbbmFtZSxoaXN0XW9mIHRoaXMuZGlhZ25vc3RpYyl7aGlzdG9ncmFtTmFtZXMuYWRkKGhpc3QubmFtZSk7fQotaWYoaGlzdG9ncmFtTmFtZXMuc2l6ZT4xKXtjb25zdCBsaW5rPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2xpbmsuc2V0U2VsZWN0aW9uQW5kQ29udGVudChBcnJheS5mcm9tKGhpc3RvZ3JhbU5hbWVzKSwnU2VsZWN0IEFsbCcpO3Jvd3MucHVzaChbbGluaywnJ10pO30KLWZvcihjb25zdFtuYW1lLGhpc3Rdb2YgdGhpcy5kaWFnbm9zdGljKXtjb25zdCBsaW5rPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2xpbmsuc2V0U2VsZWN0aW9uQW5kQ29udGVudChbaGlzdC5uYW1lXSxuYW1lKTtjb25zdCBzY2FsYXJTcGFuPXRyLnYudWkuY3JlYXRlU2NhbGFyU3BhbihoaXN0KTtyb3dzLnB1c2goW2xpbmssc2NhbGFyU3Bhbl0pO30KLXRoaXMuJC50YWJsZS50YWJsZVJvd3M9cm93czt0aGlzLiQudGFibGUucmVidWlsZCgpO319KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXYtdWktc2NhbGFyLWRpYWdub3N0aWMtc3BhbicsYmVoYXZpb3JzOlt0ci52LnVpLkRJQUdOT1NUSUNfU1BBTl9CRUhBVklPUl0sdXBkYXRlQ29udGVudHNfKCl7dGhpcy4kLnNjYWxhci5zZXRWYWx1ZUFuZFVuaXQodGhpcy5kaWFnbm9zdGljLnZhbHVlLnZhbHVlLHRoaXMuZGlhZ25vc3RpYy52YWx1ZS51bml0KTt9fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci12LXVpLXRhZy1tYXAtc3BhbicsYmVoYXZpb3JzOlt0ci52LnVpLkRJQUdOT1NUSUNfU1BBTl9CRUhBVklPUl0sdXBkYXRlQ29udGVudHNfKCl7aWYodGhpcy5kaWFnbm9zdGljPT09dW5kZWZpbmVkKXt0aGlzLiQuZ2VuZXJpYy5vYmplY3Q9dW5kZWZpbmVkO3JldHVybjt9Ci1jb25zdCBvYmo9e307Zm9yKGNvbnN0W3RhZyxzdG9yaWVzXW9mIHRoaXMuZGlhZ25vc3RpYy50YWdzVG9TdG9yeU5hbWVzKXtvYmpbdGFnXT1BcnJheS5mcm9tKHN0b3JpZXMpO30KLXRoaXMuJC5nZW5lcmljLm9iamVjdD1vYmo7fSxvblNob3dfKCl7dGhpcy4kLnNob3cuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLmhpZGUuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC5nZW5lcmljLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt9LG9uSGlkZV8oKXt0aGlzLiQuc2hvdy5zdHlsZS5kaXNwbGF5PSdibG9jayc7dGhpcy4kLmhpZGUuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLmdlbmVyaWMuc3R5bGUuZGlzcGxheT0nbm9uZSc7fSx9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXYtdWktdW5tZXJnZWFibGUtZGlhZ25vc3RpYy1zZXQtc3BhbicsYmVoYXZpb3JzOlt0ci52LnVpLkRJQUdOT1NUSUNfU1BBTl9CRUhBVklPUl0sdXBkYXRlQ29udGVudHNfKCl7UG9seW1lci5kb20odGhpcykudGV4dENvbnRlbnQ9Jyc7Zm9yKGNvbnN0IGRpYWdub3N0aWMgb2YgdGhpcy5kaWFnbm9zdGljKXtjb25zdCBkaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7ZGl2LmFwcGVuZENoaWxkKHRyLnYudWkuY3JlYXRlRGlhZ25vc3RpY1NwYW4oZGlhZ25vc3RpYyx0aGlzLm5hbWVfLHRoaXMuaGlzdG9ncmFtXykpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGRpdik7fX19KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZmluZEVsZW1lbnROYW1lRm9yRGlhZ25vc3RpYyhkaWFnbm9zdGljKXtsZXQgdHlwZUluZm89dW5kZWZpbmVkO2xldCBjdXJQcm90bz1kaWFnbm9zdGljLmNvbnN0cnVjdG9yLnByb3RvdHlwZTt3aGlsZShjdXJQcm90byl7dHlwZUluZm89dHIudi5kLkRpYWdub3N0aWMuZmluZFR5cGVJbmZvKGN1clByb3RvLmNvbnN0cnVjdG9yKTtpZih0eXBlSW5mbyYmdHlwZUluZm8ubWV0YWRhdGEuZWxlbWVudE5hbWUpYnJlYWs7dHlwZUluZm89dW5kZWZpbmVkO2N1clByb3RvPWN1clByb3RvLl9fcHJvdG9fXzt9Ci1pZih0eXBlSW5mbz09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKGRpYWdub3N0aWMuY29uc3RydWN0b3IubmFtZSsnIG9yIGEgYmFzZSBjbGFzcyBtdXN0IGhhdmUgYSByZWdpc3RlcmVkIGVsZW1lbnROYW1lJyk7fQotY29uc3QgdGFnTmFtZT10eXBlSW5mby5tZXRhZGF0YS5lbGVtZW50TmFtZTtpZih0ci51aS5iLmlzVW5rbm93bkVsZW1lbnROYW1lKHRhZ05hbWUpKXt0aHJvdyBuZXcgRXJyb3IoJ0VsZW1lbnQgbm90IHJlZ2lzdGVyZWQ6ICcrdGFnTmFtZSk7fQotcmV0dXJuIHRhZ05hbWU7fQotZnVuY3Rpb24gY3JlYXRlRGlhZ25vc3RpY1NwYW4oZGlhZ25vc3RpYyxuYW1lLGhpc3RvZ3JhbSl7Y29uc3QgdGFnTmFtZT1maW5kRWxlbWVudE5hbWVGb3JEaWFnbm9zdGljKGRpYWdub3N0aWMpO2NvbnN0IHNwYW49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtpZihzcGFuLmJ1aWxkPT09dW5kZWZpbmVkKXRocm93IG5ldyBFcnJvcih0YWdOYW1lKTtzcGFuLmJ1aWxkKGRpYWdub3N0aWMsbmFtZSxoaXN0b2dyYW0pO3JldHVybiBzcGFuO30KLXJldHVybntjcmVhdGVEaWFnbm9zdGljU3Bhbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi51aScsZnVuY3Rpb24oKXtmdW5jdGlvbiBtYWtlQ29sdW1uKHRpdGxlLGhpc3RvZ3JhbSl7cmV0dXJue3RpdGxlLHZhbHVlKG1hcCl7Y29uc3QgZGlhZ25vc3RpYz1tYXAuZ2V0KHRpdGxlKTtpZighZGlhZ25vc3RpYylyZXR1cm4nJztyZXR1cm4gdHIudi51aS5jcmVhdGVEaWFnbm9zdGljU3BhbihkaWFnbm9zdGljLHRpdGxlLGhpc3RvZ3JhbSk7fX07fQotUG9seW1lcih7aXM6J3RyLXYtdWktZGlhZ25vc3RpYy1tYXAtdGFibGUnLGNyZWF0ZWQoKXt0aGlzLmRpYWdub3N0aWNNYXBzXz11bmRlZmluZWQ7dGhpcy5oaXN0b2dyYW1fPXVuZGVmaW5lZDt0aGlzLmlzTWV0YWRhdGFfPWZhbHNlO30sc2V0IGhpc3RvZ3JhbShoKXt0aGlzLmhpc3RvZ3JhbV89aDt9LHNldCBpc01ldGFkYXRhKG0pe3RoaXMuaXNNZXRhZGF0YV89bTt0aGlzLiQudGFibGUuc2hvd0hlYWRlcj0hdGhpcy5pc01ldGFkYXRhXzt9LHNldCBkaWFnbm9zdGljTWFwcyhtYXBzKXt0aGlzLmRpYWdub3N0aWNNYXBzXz1tYXBzO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgZGlhZ25vc3RpY01hcHMoKXtyZXR1cm4gdGhpcy5kaWFnbm9zdGljTWFwc187fSx1cGRhdGVDb250ZW50c18oKXtpZih0aGlzLmlzTWV0YWRhdGFfJiZ0aGlzLmRpYWdub3N0aWNNYXBzXy5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGRpYWdub3N0aWMtbWFwLXRhYmxlcyByZXF1aXJlIGV4YWN0bHkgMSBEaWFnbm9zdGljTWFwJyk7fQotaWYodGhpcy5kaWFnbm9zdGljTWFwc189PT11bmRlZmluZWR8fHRoaXMuZGlhZ25vc3RpY01hcHNfLmxlbmd0aD09PTApe3RoaXMuJC50YWJsZS50YWJsZVJvd3M9W107dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1bXTtyZXR1cm47fQotbGV0IG5hbWVzPW5ldyBTZXQoKTtmb3IoY29uc3QgbWFwIG9mIHRoaXMuZGlhZ25vc3RpY01hcHNfKXtmb3IoY29uc3RbbmFtZSxkaWFnbm9zdGljXW9mIG1hcCl7aWYoZGlhZ25vc3RpYyBpbnN0YW5jZW9mIHRyLnYuZC5Vbm1lcmdlYWJsZURpYWdub3N0aWNTZXQpY29udGludWU7aWYoZGlhZ25vc3RpYyBpbnN0YW5jZW9mIHRyLnYuZC5Db2xsZWN0ZWRSZWxhdGVkRXZlbnRTZXQpY29udGludWU7aWYoZGlhZ25vc3RpYyBpbnN0YW5jZW9mIHRyLnYuZC5Hcm91cGluZ1BhdGgpY29udGludWU7bmFtZXMuYWRkKG5hbWUpO319Ci1uYW1lcz1BcnJheS5mcm9tKG5hbWVzKS5zb3J0KCk7Y29uc3QgaGlzdG9ncmFtPXRoaXMuaGlzdG9ncmFtXztpZih0aGlzLmlzTWV0YWRhdGFfKXtjb25zdCBkaWFnbm9zdGljTWFwPXRoaXMuZGlhZ25vc3RpY01hcHNfWzBdO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t2YWx1ZShuYW1lKXtyZXR1cm4gbmFtZS5uYW1lO319LHt2YWx1ZShuYW1lKXtjb25zdCBkaWFnbm9zdGljPWRpYWdub3N0aWNNYXAuZ2V0KG5hbWUubmFtZSk7aWYoIWRpYWdub3N0aWMpcmV0dXJuJyc7cmV0dXJuIHRyLnYudWkuY3JlYXRlRGlhZ25vc3RpY1NwYW4oZGlhZ25vc3RpYyxuYW1lLm5hbWUsaGlzdG9ncmFtKTt9fSxdO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9bmFtZXMubWFwKG5hbWU9PntyZXR1cm57bmFtZX07fSk7fWVsc2V7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1uYW1lcy5tYXAobmFtZT0+bWFrZUNvbHVtbihuYW1lLGhpc3RvZ3JhbSkpO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9dGhpcy5kaWFnbm9zdGljTWFwc187fQotdGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2NsYXNzIFNlcmlhbGl6YWJsZXtjb25zdHJ1Y3Rvcigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCdwcm9wZXJ0aWVzXycse2NvbmZpZ3VyYWJsZTpmYWxzZSxlbnVtZXJhYmxlOmZhbHNlLHZhbHVlOm5ldyBNYXAoKSx9KTt9Ci1kZWZpbmUobmFtZSxpbml0aWFsVmFsdWUpe2lmKHRoaXNbbmFtZV0hPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcihgIiR7bmFtZX0iIGlzIGFscmVhZHkgZGVmaW5lZC5gKTt9Ci1pZihuYW1lW25hbWUubGVuZ3RoLTFdPT09J18nKXt0aHJvdyBuZXcgRXJyb3IoYCIke25hbWV9IiBjYW5ub3QgZW5kIHdpdGggYW4gdW5kZXJzY29yZS5gKTt9Ci10aGlzLnByb3BlcnRpZXNfLnNldChuYW1lLGluaXRpYWxWYWx1ZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsbmFtZSx7Y29uZmlndXJhYmxlOmZhbHNlLGVudW1lcmFibGU6dHJ1ZSxnZXQ6KCk9PnRoaXMucHJvcGVydGllc18uZ2V0KG5hbWUpLHNldDp2YWx1ZT0+dGhpcy5zZXRQcm9wZXJ0eV8obmFtZSx2YWx1ZSksfSk7fQotc2V0UHJvcGVydHlfKG5hbWUsdmFsdWUpe3RoaXMucHJvcGVydGllc18uc2V0KG5hbWUsdmFsdWUpO30KLWNsb25lKCl7cmV0dXJuIFNlcmlhbGl6YWJsZS5mcm9tRGljdCh0aGlzLmFzRGljdCgpKTt9Ci1hc0RpY3QoKXtmdW5jdGlvbiB2aXNpdChvYmope2lmKG9iaiBpbnN0YW5jZW9mIFNlcmlhbGl6YWJsZSlyZXR1cm4gb2JqLmFzRGljdCgpO2lmKG9iaiBpbnN0YW5jZW9mIFNldClyZXR1cm4gQXJyYXkuZnJvbShvYmopO2lmKG9iaiBpbnN0YW5jZW9mIEFycmF5KXJldHVybiBvYmoubWFwKHZpc2l0KTtpZighKG9iaiBpbnN0YW5jZW9mIE1hcCkpcmV0dXJuIG9iajtjb25zdCByZXN1bHQ9e307Zm9yKGNvbnN0W25hbWUsdmFsdWVdb2Ygb2JqKXtyZXN1bHRbbmFtZV09dmlzaXQodmFsdWUpO30KLXJldHVybiByZXN1bHQ7fQotY29uc3QgZGljdD17dHlwZTp0aGlzLmNvbnN0cnVjdG9yLm5hbWV9O2Zvcihjb25zdFtuYW1lLHZhbHVlXW9mIHRoaXMucHJvcGVydGllc18pe2RpY3RbbmFtZS5yZXBsYWNlKC9fJC8sJycpXT12aXNpdCh2YWx1ZSk7fQotcmV0dXJuIGRpY3Q7fQotc3RhdGljIGZyb21EaWN0KGRpY3Qpe2Z1bmN0aW9uIHZpc2l0KGQpe2lmKGQgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4gZC5tYXAodmlzaXQpO2lmKCEoZCBpbnN0YW5jZW9mIE9iamVjdCkpcmV0dXJuIGQ7aWYodHlwZW9mIGQudHlwZT09PSdzdHJpbmcnKXJldHVybiBTZXJpYWxpemFibGUuZnJvbURpY3QoZCk7Y29uc3QgcmVzdWx0PW5ldyBNYXAoKTtmb3IoY29uc3RbbmFtZSx2YWx1ZV1vZiBPYmplY3QuZW50cmllcyhkKSl7cmVzdWx0LnNldChuYW1lLHZpc2l0KHZhbHVlKSk7fQotcmV0dXJuIHJlc3VsdDt9Ci1jb25zdCB0eXBlSW5mbz1TZXJpYWxpemFibGUuZmluZFR5cGVJbmZvV2l0aE5hbWUoZGljdC50eXBlKTtjb25zdCByZXN1bHQ9bmV3IHR5cGVJbmZvLmNvbnN0cnVjdG9yKCk7Zm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMoZGljdCkpe3Jlc3VsdFtuYW1lXT12aXNpdCh2YWx1ZSk7fQotcmV0dXJuIHJlc3VsdDt9fQotY29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5CQVNJQ19SRUdJU1RSWV9NT0RFKTtvcHRpb25zLmRlZmF1bHRNZXRhZGF0YT17fTtvcHRpb25zLm1hbmRhdG9yeUJhc2VDbGFzcz1TZXJpYWxpemFibGU7dHIuYi5kZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KFNlcmlhbGl6YWJsZSxvcHRpb25zKTtyZXR1cm57U2VyaWFsaXphYmxlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2NsYXNzIFZpZXdTdGF0ZSBleHRlbmRzIHRyLmIuU2VyaWFsaXphYmxle2NvbnN0cnVjdG9yKCl7c3VwZXIoKTt0ci5iLkV2ZW50VGFyZ2V0LmRlY29yYXRlKHRoaXMpO30KLXNldFByb3BlcnR5XyhuYW1lLHZhbHVlKXt0aGlzLnVwZGF0ZShuZXcgTWFwKFtbbmFtZSx2YWx1ZV1dKSk7fQotYXN5bmMgdXBkYXRlRnJvbVZpZXdTdGF0ZShvdGhlcil7YXdhaXQgdGhpcy51cGRhdGUob3RoZXIucHJvcGVydGllc18pO30KLWFzeW5jIHVwZGF0ZShkZWx0YSl7aWYoIShkZWx0YSBpbnN0YW5jZW9mIE1hcCkpZGVsdGE9bmV3IE1hcChPYmplY3QuZW50cmllcyhkZWx0YSkpO2NvbnN0IGFjdHVhbERlbHRhPXt9O2Zvcihjb25zdFtuYW1lLGN1cnJlbnRdb2YgZGVsdGEpe2NvbnN0IHByZXZpb3VzPXRoaXNbbmFtZV07aWYocHJldmlvdXM9PT1jdXJyZW50KWNvbnRpbnVlO2FjdHVhbERlbHRhW25hbWVdPXtwcmV2aW91cyxjdXJyZW50fTt0ci5iLlNlcmlhbGl6YWJsZS5wcm90b3R5cGUuc2V0UHJvcGVydHlfLmNhbGwodGhpcyxuYW1lLGN1cnJlbnQpO30KLWlmKE9iamVjdC5rZXlzKGFjdHVhbERlbHRhKS5sZW5ndGg9PT0wKXJldHVybjthd2FpdCB0ci5iLmRpc3BhdGNoU2ltcGxlRXZlbnRBc3luYyh0aGlzLHRoaXMudXBkYXRlRXZlbnROYW1lXyx7ZGVsdGE6YWN0dWFsRGVsdGF9KTt9Ci1nZXQgdXBkYXRlRXZlbnROYW1lXygpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrJy51cGRhdGUnO30KLWFkZFVwZGF0ZUxpc3RlbmVyKGxpc3RlbmVyKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodGhpcy51cGRhdGVFdmVudE5hbWVfLGxpc3RlbmVyKTt9Ci1yZW1vdmVVcGRhdGVMaXN0ZW5lcihsaXN0ZW5lcil7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMudXBkYXRlRXZlbnROYW1lXyxsaXN0ZW5lcik7fX0KLXJldHVybntWaWV3U3RhdGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7Y2xhc3MgSGlzdG9ncmFtU2V0Vmlld1N0YXRlIGV4dGVuZHMgdHIuYi5WaWV3U3RhdGV7Y29uc3RydWN0b3IoKXtzdXBlcigpO3RoaXMuZGVmaW5lKCdzZWFyY2hRdWVyeScsJycpO3RoaXMuZGVmaW5lKCdyZWZlcmVuY2VEaXNwbGF5TGFiZWwnLCcnKTt0aGlzLmRlZmluZSgnZGlzcGxheVN0YXRpc3RpY05hbWUnLCcnKTt0aGlzLmRlZmluZSgnc2hvd0FsbCcsZmFsc2UpO3RoaXMuZGVmaW5lKCdncm91cGluZ3MnLFtdKTt0aGlzLmRlZmluZSgnc29ydENvbHVtbkluZGV4JywwKTt0aGlzLmRlZmluZSgnc29ydERlc2NlbmRpbmcnLGZhbHNlKTt0aGlzLmRlZmluZSgnY29uc3RyYWluTmFtZUNvbHVtbicsdHJ1ZSk7dGhpcy5kZWZpbmUoJ3RhYmxlUm93U3RhdGVzJyxuZXcgTWFwKCkpO3RoaXMuZGVmaW5lKCdhbHBoYScsMC4wMSk7fX0KLXRyLmIuVmlld1N0YXRlLnJlZ2lzdGVyKEhpc3RvZ3JhbVNldFZpZXdTdGF0ZSk7Y2xhc3MgSGlzdG9ncmFtU2V0VGFibGVSb3dTdGF0ZSBleHRlbmRzIHRyLmIuVmlld1N0YXRle2NvbnN0cnVjdG9yKCl7c3VwZXIoKTt0aGlzLmRlZmluZSgnaXNFeHBhbmRlZCcsZmFsc2UpO3RoaXMuZGVmaW5lKCdpc092ZXJ2aWV3ZWQnLGZhbHNlKTt0aGlzLmRlZmluZSgnY2VsbHMnLG5ldyBNYXAoKSk7dGhpcy5kZWZpbmUoJ3N1YlJvd3MnLG5ldyBNYXAoKSk7dGhpcy5kZWZpbmUoJ2RpYWdub3N0aWNzVGFiJywnJyk7fQotYXNDb21wYWN0RGljdCgpe2NvbnN0IHJlc3VsdD17fTtpZih0aGlzLmlzRXhwYW5kZWQpcmVzdWx0LmU9JzEnO2lmKHRoaXMuaXNPdmVydmlld2VkKXJlc3VsdC5vPScxJztpZih0aGlzLmRpYWdub3N0aWNzVGFiKXJlc3VsdC5kPXRoaXMuZGlhZ25vc3RpY3NUYWI7Y29uc3QgY2VsbHM9e307Zm9yKGNvbnN0W25hbWUsY2VsbF1vZiB0aGlzLmNlbGxzKXtjb25zdCBjZWxsRGljdD1jZWxsLmFzQ29tcGFjdERpY3QoKTtpZihjZWxsRGljdD09PXVuZGVmaW5lZCljb250aW51ZTtjZWxsc1tuYW1lXT1jZWxsRGljdDt9Ci1pZihPYmplY3Qua2V5cyhjZWxscykubGVuZ3RoPjApcmVzdWx0LmM9Y2VsbHM7Y29uc3Qgc3ViUm93cz17fTtmb3IoY29uc3RbbmFtZSxyb3ddb2YgdGhpcy5zdWJSb3dzKXtjb25zdCByb3dEaWN0PXJvdy5hc0NvbXBhY3REaWN0KCk7aWYocm93RGljdD09PXVuZGVmaW5lZCljb250aW51ZTtzdWJSb3dzW25hbWVdPXJvd0RpY3Q7fQotaWYoT2JqZWN0LmtleXMoc3ViUm93cykubGVuZ3RoPjApcmVzdWx0LnI9c3ViUm93cztpZihPYmplY3Qua2V5cyhyZXN1bHQpLmxlbmd0aD09PTApcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gcmVzdWx0O30KLWFzeW5jIHVwZGF0ZUZyb21Db21wYWN0RGljdChkaWN0KXthd2FpdCB0aGlzLnVwZGF0ZSh7aXNFeHBhbmRlZDpkaWN0LmU9PT0nMScsaXNPdmVydmlld2VkOmRpY3Qubz09PScxJyxkaWFnbm9zdGljc1RhYjpkaWN0LmR8fCcnLH0pO2Zvcihjb25zdFtuYW1lLGNlbGxEaWN0XW9mIE9iamVjdC5lbnRyaWVzKGRpY3QuY3x8e30pKXtjb25zdCBjZWxsPXRoaXMuY2VsbHMuZ2V0KG5hbWUpO2lmKGNlbGw9PT11bmRlZmluZWQpY29udGludWU7YXdhaXQgY2VsbC51cGRhdGVGcm9tQ29tcGFjdERpY3QoY2VsbERpY3QpO30KLWZvcihjb25zdFtuYW1lLHN1YlJvd0RpY3Rdb2YgT2JqZWN0LmVudHJpZXMoZGljdC5yfHx7fSkpe2NvbnN0IHN1YlJvdz10aGlzLnN1YlJvd3MuZ2V0KG5hbWUpO2lmKHN1YlJvdz09PXVuZGVmaW5lZCljb250aW51ZTthd2FpdCBzdWJSb3cudXBkYXRlRnJvbUNvbXBhY3REaWN0KHN1YlJvd0RpY3QpO319KndhbGsoKXt5aWVsZCB0aGlzO2Zvcihjb25zdCByb3cgb2YgdGhpcy5zdWJSb3dzLnZhbHVlcygpKXlpZWxkKnJvdy53YWxrKCk7fQotc3RhdGljKndhbGtBbGwocm9vdFJvd3Mpe2Zvcihjb25zdCByb290Um93IG9mIHJvb3RSb3dzKXlpZWxkKnJvb3RSb3cud2FsaygpO319Ci10ci5iLlZpZXdTdGF0ZS5yZWdpc3RlcihIaXN0b2dyYW1TZXRUYWJsZVJvd1N0YXRlKTtjbGFzcyBIaXN0b2dyYW1TZXRUYWJsZUNlbGxTdGF0ZSBleHRlbmRzIHRyLmIuVmlld1N0YXRle2NvbnN0cnVjdG9yKCl7c3VwZXIoKTt0aGlzLmRlZmluZSgnaXNPcGVuJyxmYWxzZSk7dGhpcy5kZWZpbmUoJ2JydXNoZWRCaW5SYW5nZScsbmV3IHRyLmIubWF0aC5SYW5nZSgpKTt0aGlzLmRlZmluZSgnbWVyZ2VTYW1wbGVEaWFnbm9zdGljcycsdHJ1ZSk7fQotYXNDb21wYWN0RGljdCgpe2NvbnN0IHJlc3VsdD17fTtpZih0aGlzLmlzT3BlbilyZXN1bHQubz0nMSc7aWYoIXRoaXMubWVyZ2VTYW1wbGVEaWFnbm9zdGljcylyZXN1bHQubT0nMCc7aWYoIXRoaXMuYnJ1c2hlZEJpblJhbmdlLmlzRW1wdHkpe3Jlc3VsdC5iPXRoaXMuYnJ1c2hlZEJpblJhbmdlLm1pbisnXycrdGhpcy5icnVzaGVkQmluUmFuZ2UubWF4O30KLWlmKE9iamVjdC5rZXlzKHJlc3VsdCkubGVuZ3RoPT09MClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiByZXN1bHQ7fQotYXN5bmMgdXBkYXRlRnJvbUNvbXBhY3REaWN0KGRpY3Qpe2xldCBiaW5SYW5nZT10aGlzLmJydXNoZWRCaW5SYW5nZTtpZihkaWN0LmIpe2xldFtiTWluLGJNYXhdPWRpY3QuYi5zcGxpdCgnXycpO2JNaW49cGFyc2VJbnQoYk1pbik7Yk1heD1wYXJzZUludChiTWF4KTtpZihiTWluIT09YmluUmFuZ2UubWlufHxiTWF4IT09YmluUmFuZ2UubWF4KXtiaW5SYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoYk1pbixiTWF4KTt9fQotYXdhaXQgdGhpcy51cGRhdGUoe2lzT3BlbjpkaWN0Lm89PT0nMScsYnJ1c2hlZEJpblJhbmdlOmJpblJhbmdlLG1lcmdlU2FtcGxlRGlhZ25vc3RpY3M6ZGljdC5tIT09JzAnLH0pO319Ci10ci5iLlZpZXdTdGF0ZS5yZWdpc3RlcihIaXN0b2dyYW1TZXRUYWJsZUNlbGxTdGF0ZSk7cmV0dXJue0hpc3RvZ3JhbVNldFRhYmxlQ2VsbFN0YXRlLEhpc3RvZ3JhbVNldFRhYmxlUm93U3RhdGUsSGlzdG9ncmFtU2V0Vmlld1N0YXRlLH07fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci12LXVpLXNjYWxhci1tYXAtdGFibGUnLGNyZWF0ZWQoKXt0aGlzLnNjYWxhck1hcF89bmV3IE1hcCgpO3RoaXMuc2lnbmlmaWNhbmNlXz1uZXcgTWFwKCk7fSxyZWFkeSgpe3RoaXMuJC50YWJsZS5zaG93SGVhZGVyPWZhbHNlO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t2YWx1ZShyb3cpe3JldHVybiByb3cubmFtZTt9fSx7dmFsdWUocm93KXtjb25zdCBzcGFuPXRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbihyb3cudmFsdWUpO2lmKHJvdy5zaWduaWZpY2FuY2UhPT11bmRlZmluZWQpe3NwYW4uc2lnbmlmaWNhbmNlPXJvdy5zaWduaWZpY2FuY2U7fWVsc2UgaWYocm93LmFueVJvd3NIYXZlU2lnbmlmaWNhbmNlKXtzcGFuLnN0eWxlLm1hcmdpblJpZ2h0PScxOHB4Jzt9Ci1zcGFuLnN0eWxlLndoaXRlU3BhY2U9J25vd3JhcCc7cmV0dXJuIHNwYW47fX1dO30sZ2V0IHNjYWxhck1hcCgpe3JldHVybiB0aGlzLnNjYWxhck1hcF87fSxzZXQgc2NhbGFyTWFwKG1hcCl7dGhpcy5zY2FsYXJNYXBfPW1hcDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sc2V0U2lnbmlmaWNhbmNlRm9yS2V5KGtleSxzaWduaWZpY2FuY2Upe3RoaXMuc2lnbmlmaWNhbmNlXy5zZXQoa2V5LHNpZ25pZmljYW5jZSk7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe2NvbnN0IHJvd3M9W107Zm9yKGNvbnN0W2tleSxzY2FsYXJdb2YgdGhpcy5zY2FsYXJNYXApe3Jvd3MucHVzaCh7bmFtZTprZXksdmFsdWU6c2NhbGFyLHNpZ25pZmljYW5jZTp0aGlzLnNpZ25pZmljYW5jZV8uZ2V0KGtleSksYW55Um93c0hhdmVTaWduaWZpY2FuY2U6KHRoaXMuc2lnbmlmaWNhbmNlXy5zaXplPjApfSk7fQotdGhpcy4kLnRhYmxlLnRhYmxlUm93cz1yb3dzO3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi51aScsZnVuY3Rpb24oKXtjb25zdCBERUZBVUxUX0JBUl9IRUlHSFRfUFg9NTtjb25zdCBUUlVOQ0FURV9CSU5fTUFSR0lOPTAuMTU7Y29uc3QgSUdOT1JFX0RFTFRBX1NUQVRJU1RJQ1NfTkFNRVM9W2Ake3RyLnYuREVMVEF9bWluYCxgJSR7dHIudi5ERUxUQX1taW5gLGAke3RyLnYuREVMVEF9bWF4YCxgJSR7dHIudi5ERUxUQX1tYXhgLGAke3RyLnYuREVMVEF9c3VtYCxgJSR7dHIudi5ERUxUQX1zdW1gLGAke3RyLnYuREVMVEF9Y291bnRgLGAlJHt0ci52LkRFTFRBfWNvdW50YCxdO1BvbHltZXIoe2lzOid0ci12LXVpLWhpc3RvZ3JhbS1zcGFuJyxjcmVhdGVkKCl7dGhpcy52aWV3U3RhdGVMaXN0ZW5lcl89dGhpcy5vblZpZXdTdGF0ZVVwZGF0ZV8uYmluZCh0aGlzKTt0aGlzLnZpZXdTdGF0ZT1uZXcgdHIudi51aS5IaXN0b2dyYW1TZXRUYWJsZUNlbGxTdGF0ZSgpO3RoaXMucm93U3RhdGVMaXN0ZW5lcl89dGhpcy5vblJvd1N0YXRlVXBkYXRlXy5iaW5kKHRoaXMpO3RoaXMucm93U3RhdGU9bmV3IHRyLnYudWkuSGlzdG9ncmFtU2V0VGFibGVSb3dTdGF0ZSgpO3RoaXMucm9vdFN0YXRlTGlzdGVuZXJfPXRoaXMub25Sb290U3RhdGVVcGRhdGVfLmJpbmQodGhpcyk7dGhpcy5yb290U3RhdGU9bmV3IHRyLnYudWkuSGlzdG9ncmFtU2V0Vmlld1N0YXRlKCk7dGhpcy5oaXN0b2dyYW1fPXVuZGVmaW5lZDt0aGlzLnJlZmVyZW5jZUhpc3RvZ3JhbV89dW5kZWZpbmVkO3RoaXMuZ3JhcGhXaWR0aF89dW5kZWZpbmVkO3RoaXMuZ3JhcGhIZWlnaHRfPXVuZGVmaW5lZDt0aGlzLm1vdXNlRG93bkJpbl89dW5kZWZpbmVkO3RoaXMucHJldkJydXNoZWRCaW5SYW5nZV89bmV3IHRyLmIubWF0aC5SYW5nZSgpO3RoaXMuYW55U2FtcGxlRGlhZ25vc3RpY3NfPWZhbHNlO3RoaXMuY2FuTWVyZ2VTYW1wbGVEaWFnbm9zdGljc189dHJ1ZTt0aGlzLm13dVJlc3VsdF89dW5kZWZpbmVkO30sZ2V0IHJvd1N0YXRlKCl7cmV0dXJuIHRoaXMucm93U3RhdGVfO30sc2V0IHJvd1N0YXRlKHJzKXtpZih0aGlzLnJvd1N0YXRlKXt0aGlzLnJvd1N0YXRlLnJlbW92ZVVwZGF0ZUxpc3RlbmVyKHRoaXMucm93U3RhdGVMaXN0ZW5lcl8pO30KLXRoaXMucm93U3RhdGVfPXJzO3RoaXMucm93U3RhdGUuYWRkVXBkYXRlTGlzdGVuZXIodGhpcy5yb3dTdGF0ZUxpc3RlbmVyXyk7aWYodGhpcy5pc0F0dGFjaGVkKXRoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgdmlld1N0YXRlKCl7cmV0dXJuIHRoaXMudmlld1N0YXRlXzt9LHNldCB2aWV3U3RhdGUodnMpe2lmKHRoaXMudmlld1N0YXRlKXt0aGlzLnZpZXdTdGF0ZS5yZW1vdmVVcGRhdGVMaXN0ZW5lcih0aGlzLnZpZXdTdGF0ZUxpc3RlbmVyXyk7fQotdGhpcy52aWV3U3RhdGVfPXZzO3RoaXMudmlld1N0YXRlLmFkZFVwZGF0ZUxpc3RlbmVyKHRoaXMudmlld1N0YXRlTGlzdGVuZXJfKTtpZih0aGlzLmlzQXR0YWNoZWQpdGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCByb290U3RhdGUoKXtyZXR1cm4gdGhpcy5yb290U3RhdGVfO30sc2V0IHJvb3RTdGF0ZSh2cyl7aWYodGhpcy5yb290U3RhdGUpe3RoaXMucm9vdFN0YXRlLnJlbW92ZVVwZGF0ZUxpc3RlbmVyKHRoaXMucm9vdFN0YXRlTGlzdGVuZXJfKTt9Ci10aGlzLnJvb3RTdGF0ZV89dnM7dGhpcy5yb290U3RhdGUuYWRkVXBkYXRlTGlzdGVuZXIodGhpcy5yb290U3RhdGVMaXN0ZW5lcl8pO2lmKHRoaXMuaXNBdHRhY2hlZCl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sYnVpbGQoaGlzdG9ncmFtLG9wdF9yZWZlcmVuY2VIaXN0b2dyYW0pe3RoaXMuaGlzdG9ncmFtXz1oaXN0b2dyYW07dGhpcy4kLm1ldHJpY19kaWFnbm9zdGljcy5oaXN0b2dyYW09aGlzdG9ncmFtO3RoaXMuJC5zYW1wbGVfZGlhZ25vc3RpY3MuaGlzdG9ncmFtPWhpc3RvZ3JhbTt0aGlzLnJlZmVyZW5jZUhpc3RvZ3JhbV89b3B0X3JlZmVyZW5jZUhpc3RvZ3JhbTtpZih0aGlzLmhpc3RvZ3JhbS5jYW5Db21wYXJlKHRoaXMucmVmZXJlbmNlSGlzdG9ncmFtKSl7dGhpcy5td3VSZXN1bHRfPXRyLmIubWF0aC5TdGF0aXN0aWNzLm13dSh0aGlzLmhpc3RvZ3JhbS5zYW1wbGVWYWx1ZXMsdGhpcy5yZWZlcmVuY2VIaXN0b2dyYW0uc2FtcGxlVmFsdWVzLHRoaXMucm9vdFN0YXRlLmFscGhhKTt9Ci10aGlzLmFueVNhbXBsZURpYWdub3N0aWNzXz1mYWxzZTtmb3IoY29uc3QgYmluIG9mIHRoaXMuaGlzdG9ncmFtLmFsbEJpbnMpe2lmKGJpbi5kaWFnbm9zdGljTWFwcy5sZW5ndGg+MCl7dGhpcy5hbnlTYW1wbGVEaWFnbm9zdGljc189dHJ1ZTticmVhazt9fQotaWYodGhpcy5pc0F0dGFjaGVkKXRoaXMudXBkYXRlQ29udGVudHNfKCk7fSxvblZpZXdTdGF0ZVVwZGF0ZV8oZXZlbnQpe2lmKGV2ZW50LmRlbHRhLmJydXNoZWRCaW5SYW5nZSl7aWYodGhpcy5jaGFydF8hPT11bmRlZmluZWQpe3RoaXMuY2hhcnRfLmJydXNoZWRSYW5nZT10aGlzLnZpZXdTdGF0ZS5icnVzaGVkQmluUmFuZ2U7fQotdGhpcy51cGRhdGVEaWFnbm9zdGljc18oKTt9Ci1pZihldmVudC5kZWx0YS5tZXJnZVNhbXBsZURpYWdub3N0aWNzJiYodGhpcy52aWV3U3RhdGUubWVyZ2VTYW1wbGVEaWFnbm9zdGljcyE9PXRoaXMuJC5tZXJnZV9zYW1wbGVfZGlhZ25vc3RpY3MuY2hlY2tlZCkpe3RoaXMuJC5tZXJnZV9zYW1wbGVfZGlhZ25vc3RpY3MuY2hlY2tlZD10aGlzLmNhbk1lcmdlU2FtcGxlRGlhZ25vc3RpY3MmJnRoaXMudmlld1N0YXRlLm1lcmdlU2FtcGxlRGlhZ25vc3RpY3M7dGhpcy51cGRhdGVEaWFnbm9zdGljc18oKTt9fSx1cGRhdGVTaWduaWZpY2FuY2VfKCl7aWYoIXRoaXMubXd1UmVzdWx0XylyZXR1cm47dGhpcy4kLnN0YXRzLnNldFNpZ25pZmljYW5jZUZvcktleShgJHt0ci52LkRFTFRBfWF2Z2AsdGhpcy5td3VSZXN1bHRfLnNpZ25pZmljYW5jZSk7fSxvblJvb3RTdGF0ZVVwZGF0ZV8oZXZlbnQpe2lmKGV2ZW50LmRlbHRhLmFscGhhJiZ0aGlzLm13dVJlc3VsdF8pe3RoaXMubXd1UmVzdWx0Xy5jb21wYXJlKHRoaXMucm9vdFN0YXRlLmFscGhhKTt0aGlzLnVwZGF0ZVNpZ25pZmljYW5jZV8oKTt9fSxvblJvd1N0YXRlVXBkYXRlXyhldmVudCl7aWYoZXZlbnQuZGVsdGEuZGlhZ25vc3RpY3NUYWIpe2lmKHRoaXMucm93U3RhdGUuZGlhZ25vc3RpY3NUYWI9PT10aGlzLiQuc2FtcGxlX2RpYWdub3N0aWNzX2NvbnRhaW5lci50YWJMYWJlbCl7dGhpcy51cGRhdGVEaWFnbm9zdGljc18oKTt9ZWxzZXtmb3IoY29uc3QgdGFiIG9mIHRoaXMuJC5kaWFnbm9zdGljcy5zdWJWaWV3cyl7aWYodGhpcy5yb3dTdGF0ZS5kaWFnbm9zdGljc1RhYj09PXRhYi50YWJMYWJlbCl7dGhpcy4kLmRpYWdub3N0aWNzLnNlbGVjdGVkU3ViVmlldz10YWI7YnJlYWs7fX19fX0scmVhZHkoKXt0aGlzLiQubWV0cmljX2RpYWdub3N0aWNzLnRhYkxhYmVsPSdoaXN0b2dyYW0gZGlhZ25vc3RpY3MnO3RoaXMuJC5zYW1wbGVfZGlhZ25vc3RpY3NfY29udGFpbmVyLnRhYkxhYmVsPSdzYW1wbGUgZGlhZ25vc3RpY3MnO3RoaXMuJC5tZXRhZGF0YV9kaWFnbm9zdGljcy50YWJMYWJlbD0nbWV0YWRhdGEnO3RoaXMuJC5tZXRhZGF0YV9kaWFnbm9zdGljcy5pc01ldGFkYXRhPXRydWU7dGhpcy4kLmRpYWdub3N0aWNzLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGVkLXRhYi1jaGFuZ2UnLHRoaXMub25TZWxlY3RlZERpYWdub3N0aWNzQ2hhbmdlZF8uYmluZCh0aGlzKSk7dGhpcy4kLmRyYWdfaGFuZGxlLnRhcmdldD10aGlzLiQuY29udGFpbmVyO3RoaXMuJC5kcmFnX2hhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnLWhhbmRsZS1yZXNpemUnLHRoaXMub25SZXNpemVfLmJpbmQodGhpcykpO30sYXR0YWNoZWQoKXtpZih0aGlzLmhpc3RvZ3JhbV8hPT11bmRlZmluZWQpdGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBjYW5NZXJnZVNhbXBsZURpYWdub3N0aWNzKCl7cmV0dXJuIHRoaXMuY2FuTWVyZ2VTYW1wbGVEaWFnbm9zdGljc187fSxzZXQgY2FuTWVyZ2VTYW1wbGVEaWFnbm9zdGljcyhtZXJnZSl7dGhpcy5jYW5NZXJnZVNhbXBsZURpYWdub3N0aWNzXz1tZXJnZTtpZighbWVyZ2UpdGhpcy52aWV3U3RhdGUubWVyZ2VTYW1wbGVEaWFnbm9zdGljcz1mYWxzZTt0aGlzLiQubWVyZ2Vfc2FtcGxlX2RpYWdub3N0aWNzX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PShtZXJnZT8nJzonbm9uZScpO30sb25SZXNpemVfKGV2ZW50KXtldmVudC5zdG9wUHJvcGFnYXRpb24oKTtsZXQgaGVpZ2h0UHg9cGFyc2VJbnQodGhpcy4kLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQpO2lmKGhlaWdodFB4PHRoaXMuZGVmYXVsdEdyYXBoSGVpZ2h0KXtoZWlnaHRQeD10aGlzLmRlZmF1bHRHcmFwaEhlaWdodDt0aGlzLiQuY29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmRlZmF1bHRHcmFwaEhlaWdodCsncHgnO30KLXRoaXMuY2hhcnRfLmdyYXBoSGVpZ2h0PWhlaWdodFB4LSh0aGlzLmNoYXJ0Xy5tYXJnaW4udG9wKwotdGhpcy5jaGFydF8ubWFyZ2luLmJvdHRvbSk7dGhpcy4kLnN0YXRzX2NvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQ9dGhpcy5jaGFydF8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KydweCc7fSxnZXQgZ3JhcGhXaWR0aCgpe3JldHVybiB0aGlzLmdyYXBoV2lkdGhffHx0aGlzLmRlZmF1bHRHcmFwaFdpZHRoO30sc2V0IGdyYXBoV2lkdGgod2lkdGgpe3RoaXMuZ3JhcGhXaWR0aF89d2lkdGg7fSxnZXQgZ3JhcGhIZWlnaHQoKXtyZXR1cm4gdGhpcy5ncmFwaEhlaWdodF98fHRoaXMuZGVmYXVsdEdyYXBoSGVpZ2h0O30sc2V0IGdyYXBoSGVpZ2h0KGhlaWdodCl7dGhpcy5ncmFwaEhlaWdodF89aGVpZ2h0O30sZ2V0IGJhckhlaWdodCgpe3JldHVybiB0aGlzLmNoYXJ0Xy5iYXJIZWlnaHQ7fSxzZXQgYmFySGVpZ2h0KHB4KXt0aGlzLmdyYXBoSGVpZ2h0PXRoaXMuY29tcHV0ZUNoYXJ0SGVpZ2h0XyhweCk7fSxjb21wdXRlQ2hhcnRIZWlnaHRfKGJhckhlaWdodFB4KXtyZXR1cm4odGhpcy5jaGFydF8ubWFyZ2luLnRvcCsKLXRoaXMuY2hhcnRfLm1hcmdpbi5ib3R0b20rCi0oYmFySGVpZ2h0UHgqdGhpcy5oaXN0b2dyYW0uYWxsQmlucy5sZW5ndGgpKTt9LGdldCBkZWZhdWx0R3JhcGhIZWlnaHQoKXtpZih0aGlzLmhpc3RvZ3JhbSYmdGhpcy5oaXN0b2dyYW0uYWxsQmlucy5sZW5ndGg9PT0xKXtyZXR1cm4gMTUwO30KLXJldHVybiB0aGlzLmNvbXB1dGVDaGFydEhlaWdodF8oREVGQVVMVF9CQVJfSEVJR0hUX1BYKTt9LGdldCBkZWZhdWx0R3JhcGhXaWR0aCgpe2lmKHRoaXMuaGlzdG9ncmFtLmFsbEJpbnMubGVuZ3RoPT09MSl7cmV0dXJuIDEwMDt9Ci1yZXR1cm4gMzAwO30sZ2V0IGJydXNoZWRCaW5zKCl7Y29uc3QgYmlucz1bXTtpZih0aGlzLmhpc3RvZ3JhbSYmIXRoaXMudmlld1N0YXRlLmJydXNoZWRCaW5SYW5nZS5pc0VtcHR5KXtmb3IobGV0IGk9dGhpcy52aWV3U3RhdGUuYnJ1c2hlZEJpblJhbmdlLm1pbjtpPHRoaXMudmlld1N0YXRlLmJydXNoZWRCaW5SYW5nZS5tYXg7KytpKXtiaW5zLnB1c2godGhpcy5oaXN0b2dyYW0uYWxsQmluc1tpXSk7fX0KLXJldHVybiBiaW5zO30sYXN5bmMgdXBkYXRlQnJ1c2hlZFJhbmdlXyhiaW5JbmRleCl7Y29uc3QgYnJ1c2hlZEJpblJhbmdlPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTticnVzaGVkQmluUmFuZ2UuYWRkVmFsdWUodHIuYi5tYXRoLmNsYW1wKHRoaXMubW91c2VEb3duQmluSW5kZXhfLDAsdGhpcy5oaXN0b2dyYW0uYWxsQmlucy5sZW5ndGgtMSkpO2JydXNoZWRCaW5SYW5nZS5hZGRWYWx1ZSh0ci5iLm1hdGguY2xhbXAoYmluSW5kZXgsMCx0aGlzLmhpc3RvZ3JhbS5hbGxCaW5zLmxlbmd0aC0xKSk7YnJ1c2hlZEJpblJhbmdlLm1heCs9MTthd2FpdCB0aGlzLnZpZXdTdGF0ZS51cGRhdGUoe2JydXNoZWRCaW5SYW5nZX0pO30sb25Nb3VzZURvd25fKGNoYXJ0RXZlbnQpe2NoYXJ0RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7aWYoIXRoaXMuaGlzdG9ncmFtKXJldHVybjt0aGlzLnByZXZCcnVzaGVkQmluUmFuZ2VfPXRoaXMudmlld1N0YXRlLmJydXNoZWRCaW5SYW5nZTt0aGlzLm1vdXNlRG93bkJpbkluZGV4Xz1jaGFydEV2ZW50Lnk7dGhpcy51cGRhdGVCcnVzaGVkUmFuZ2VfKGNoYXJ0RXZlbnQueSk7fSxvbk1vdXNlTW92ZV8oY2hhcnRFdmVudCl7Y2hhcnRFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtpZighdGhpcy5oaXN0b2dyYW0pcmV0dXJuO3RoaXMudXBkYXRlQnJ1c2hlZFJhbmdlXyhjaGFydEV2ZW50LnkpO30sb25Nb3VzZVVwXyhjaGFydEV2ZW50KXtjaGFydEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2lmKCF0aGlzLmhpc3RvZ3JhbSlyZXR1cm47dGhpcy51cGRhdGVCcnVzaGVkUmFuZ2VfKGNoYXJ0RXZlbnQueSk7aWYodGhpcy5wcmV2QnJ1c2hlZEJpblJhbmdlXy5yYW5nZT09PTEmJnRoaXMudmlld1N0YXRlLmJydXNoZWRCaW5SYW5nZS5yYW5nZT09PTEmJih0aGlzLnByZXZCcnVzaGVkQmluUmFuZ2VfLm1pbj09PXRoaXMudmlld1N0YXRlLmJydXNoZWRCaW5SYW5nZS5taW4pKXt0ci5iLlRpbWluZy5pbnN0YW50KCdoaXN0b2dyYW0tc3BhbicsJ2NsZWFyQnJ1c2hlZEJpbnMnKTt0aGlzLnZpZXdTdGF0ZS51cGRhdGUoe2JydXNoZWRCaW5SYW5nZTpuZXcgdHIuYi5tYXRoLlJhbmdlKCl9KTt9ZWxzZXt0ci5iLlRpbWluZy5pbnN0YW50KCdoaXN0b2dyYW0tc3BhbicsJ2JydXNoQmlucycpO30KLXRoaXMubW91c2VEb3duQmluSW5kZXhfPXVuZGVmaW5lZDt9LGFzeW5jIG9uU2VsZWN0ZWREaWFnbm9zdGljc0NoYW5nZWRfKCl7YXdhaXQgdGhpcy5yb3dTdGF0ZS51cGRhdGUoe2RpYWdub3N0aWNzVGFiOnRoaXMuJC5kaWFnbm9zdGljcy5zZWxlY3RlZFN1YlZpZXcudGFiTGFiZWwsfSk7aWYoKHRoaXMuJC5kaWFnbm9zdGljcy5zZWxlY3RlZFN1YlZpZXc9PT10aGlzLiQuc2FtcGxlX2RpYWdub3N0aWNzX2NvbnRhaW5lcikmJnRoaXMuaGlzdG9ncmFtJiZ0aGlzLnZpZXdTdGF0ZS5icnVzaGVkQmluUmFuZ2UuaXNFbXB0eSl7Y29uc3QgYnJ1c2hlZEJpblJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZSgwLHRoaXMuaGlzdG9ncmFtLmFsbEJpbnMubGVuZ3RoKTthd2FpdCB0aGlzLnZpZXdTdGF0ZS51cGRhdGUoe2JydXNoZWRCaW5SYW5nZX0pO3RoaXMudXBkYXRlRGlhZ25vc3RpY3NfKCk7fX0sdXBkYXRlRGlhZ25vc3RpY3NfKCl7bGV0IG1hcHM9W107Zm9yKGNvbnN0IGJpbiBvZiB0aGlzLmJydXNoZWRCaW5zKXtmb3IoY29uc3QgbWFwIG9mIGJpbi5kaWFnbm9zdGljTWFwcyl7bWFwcy5wdXNoKG1hcCk7fX0KLWlmKHRoaXMuJC5tZXJnZV9zYW1wbGVfZGlhZ25vc3RpY3MuY2hlY2tlZCE9PXRoaXMudmlld1N0YXRlLm1lcmdlU2FtcGxlRGlhZ25vc3RpY3Mpe3RoaXMudmlld1N0YXRlLnVwZGF0ZSh7bWVyZ2VTYW1wbGVEaWFnbm9zdGljczp0aGlzLiQubWVyZ2Vfc2FtcGxlX2RpYWdub3N0aWNzLmNoZWNrZWR9KTt9Ci1pZih0aGlzLnZpZXdTdGF0ZS5tZXJnZVNhbXBsZURpYWdub3N0aWNzKXtjb25zdCBtZXJnZWQ9bmV3IHRyLnYuZC5EaWFnbm9zdGljTWFwKCk7Zm9yKGNvbnN0IG1hcCBvZiBtYXBzKXttZXJnZWQuYWRkRGlhZ25vc3RpY3MobWFwKTt9Ci1tYXBzPVttZXJnZWRdO30KLWNvbnN0IG1hcms9dHIuYi5UaW1pbmcubWFyaygnaGlzdG9ncmFtLXNwYW4nLCh0aGlzLnZpZXdTdGF0ZS5tZXJnZVNhbXBsZURpYWdub3N0aWNzPydtZXJnZSc6J3NwbGl0JykrJ1NhbXBsZURpYWdub3N0aWNzJyk7dGhpcy4kLnNhbXBsZV9kaWFnbm9zdGljcy5kaWFnbm9zdGljTWFwcz1tYXBzO21hcmsuZW5kKCk7aWYodGhpcy5hbnlTYW1wbGVEaWFnbm9zdGljc18pe3RoaXMuJC5kaWFnbm9zdGljcy5zZWxlY3RlZFN1YlZpZXc9dGhpcy4kLnNhbXBsZV9kaWFnbm9zdGljc19jb250YWluZXI7fX0sZ2V0IGhpc3RvZ3JhbSgpe3JldHVybiB0aGlzLmhpc3RvZ3JhbV87fSxnZXQgcmVmZXJlbmNlSGlzdG9ncmFtKCl7cmV0dXJuIHRoaXMucmVmZXJlbmNlSGlzdG9ncmFtXzt9LGdldERlbHRhU2NhbGFyc18oc3RhdE5hbWVzLHNjYWxhck1hcCl7aWYoIXRoaXMuaGlzdG9ncmFtLmNhbkNvbXBhcmUodGhpcy5yZWZlcmVuY2VIaXN0b2dyYW0pKXJldHVybjtmb3IoY29uc3QgZGVsdGFTdGF0TmFtZSBvZiB0ci52Lkhpc3RvZ3JhbS5nZXREZWx0YVN0YXRpc3RpY3NOYW1lcyhzdGF0TmFtZXMpKXtpZihJR05PUkVfREVMVEFfU1RBVElTVElDU19OQU1FUy5pbmNsdWRlcyhkZWx0YVN0YXROYW1lKSljb250aW51ZTtjb25zdCBzY2FsYXI9dGhpcy5oaXN0b2dyYW0uZ2V0U3RhdGlzdGljU2NhbGFyKGRlbHRhU3RhdE5hbWUsdGhpcy5yZWZlcmVuY2VIaXN0b2dyYW0sdGhpcy5td3VSZXN1bHRfKTtpZihzY2FsYXI9PT11bmRlZmluZWQpY29udGludWU7c2NhbGFyTWFwLnNldChkZWx0YVN0YXROYW1lLHNjYWxhcik7fX0sc2V0IGlzWUxvZ1NjYWxlKGxvZ1NjYWxlKXt0aGlzLmNoYXJ0Xy5pc1lMb2dTY2FsZT1sb2dTY2FsZTt9LGFzeW5jIHVwZGF0ZUNvbnRlbnRzXygpe3RoaXMuJC5jaGFydC5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQuZHJhZ19oYW5kbGUuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLmNvbnRhaW5lci5zdHlsZS5qdXN0aWZ5Q29udGVudD0nJzt3aGlsZShQb2x5bWVyLmRvbSh0aGlzLiQuY2hhcnQpLmxhc3RDaGlsZCl7UG9seW1lci5kb20odGhpcy4kLmNoYXJ0KS5yZW1vdmVDaGlsZChQb2x5bWVyLmRvbSh0aGlzLiQuY2hhcnQpLmxhc3RDaGlsZCk7fQotaWYoIXRoaXMuaGlzdG9ncmFtKXJldHVybjt0aGlzLiQuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Jyc7Y29uc3Qgc2NhbGFyTWFwPW5ldyBNYXAoKTt0aGlzLmdldERlbHRhU2NhbGFyc18odGhpcy5oaXN0b2dyYW0uc3RhdGlzdGljc05hbWVzLHNjYWxhck1hcCk7Zm9yKGNvbnN0W25hbWUsc2NhbGFyXW9mIHRoaXMuaGlzdG9ncmFtLnN0YXRpc3RpY3NTY2FsYXJzKXtzY2FsYXJNYXAuc2V0KG5hbWUsc2NhbGFyKTt9Ci10aGlzLiQuc3RhdHMuc2NhbGFyTWFwPXNjYWxhck1hcDt0aGlzLnVwZGF0ZVNpZ25pZmljYW5jZV8oKTtjb25zdCBtZXRyaWNEaWFnbm9zdGljTWFwPW5ldyB0ci52LmQuRGlhZ25vc3RpY01hcCgpO2NvbnN0IG1ldGFkYXRhRGlhZ25vc3RpY01hcD1uZXcgdHIudi5kLkRpYWdub3N0aWNNYXAoKTtmb3IoY29uc3Rba2V5LGRpYWdub3N0aWNdb2YgdGhpcy5oaXN0b2dyYW0uZGlhZ25vc3RpY3Mpe2lmKGtleT09PXRyLnYuZC5SRVNFUlZFRF9OQU1FUy5NRVJHRURfRlJPTSljb250aW51ZTtpZihrZXk9PT10ci52LmQuUkVTRVJWRURfTkFNRVMuTUVSR0VEX1RPKWNvbnRpbnVlO2lmKGRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuR3JvdXBpbmdQYXRoKWNvbnRpbnVlO2lmKGRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuUmVsYXRlZE5hbWVNYXApY29udGludWU7aWYodHIudi5kLlJFU0VSVkVEX05BTUVTX1NFVC5oYXMoa2V5KSl7bWV0YWRhdGFEaWFnbm9zdGljTWFwLnNldChrZXksZGlhZ25vc3RpYyk7fWVsc2V7bWV0cmljRGlhZ25vc3RpY01hcC5zZXQoa2V5LGRpYWdub3N0aWMpO319Ci1jb25zdCBkaWFnbm9zdGljVGFicz1bXTtpZihtZXRyaWNEaWFnbm9zdGljTWFwLnNpemUpe3RoaXMuJC5tZXRyaWNfZGlhZ25vc3RpY3MuZGlhZ25vc3RpY01hcHM9W21ldHJpY0RpYWdub3N0aWNNYXBdO2RpYWdub3N0aWNUYWJzLnB1c2godGhpcy4kLm1ldHJpY19kaWFnbm9zdGljcyk7fQotaWYodGhpcy5hbnlTYW1wbGVEaWFnbm9zdGljc18pe2RpYWdub3N0aWNUYWJzLnB1c2godGhpcy4kLnNhbXBsZV9kaWFnbm9zdGljc19jb250YWluZXIpO30KLWlmKG1ldGFkYXRhRGlhZ25vc3RpY01hcC5zaXplKXt0aGlzLiQubWV0YWRhdGFfZGlhZ25vc3RpY3MuZGlhZ25vc3RpY01hcHM9W21ldGFkYXRhRGlhZ25vc3RpY01hcF07ZGlhZ25vc3RpY1RhYnMucHVzaCh0aGlzLiQubWV0YWRhdGFfZGlhZ25vc3RpY3MpO30KLXRoaXMuJC5kaWFnbm9zdGljcy5yZXNldFN1YlZpZXdzKGRpYWdub3N0aWNUYWJzKTt0aGlzLiQuZGlhZ25vc3RpY3Muc2V0KCd0YWJzSGlkZGVuJyxkaWFnbm9zdGljVGFicy5sZW5ndGg8Mik7aWYodGhpcy5oaXN0b2dyYW0ubnVtVmFsdWVzPD0xKXthd2FpdCB0aGlzLnZpZXdTdGF0ZS51cGRhdGUoe2JydXNoZWRCaW5SYW5nZTp0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoMCx0aGlzLmhpc3RvZ3JhbS5hbGxCaW5zLmxlbmd0aCl9KTt0aGlzLiQuY29udGFpbmVyLnN0eWxlLmp1c3RpZnlDb250ZW50PSdmbGV4LWVuZCc7cmV0dXJuO30KLXRoaXMuJC5jaGFydC5zdHlsZS5kaXNwbGF5PSdibG9jayc7dGhpcy4kLmRyYWdfaGFuZGxlLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztpZih0aGlzLmhpc3RvZ3JhbS5hbGxCaW5zLmxlbmd0aD09PTEpe2lmKHRoaXMuaGlzdG9ncmFtLm1pbiE9PXRoaXMuaGlzdG9ncmFtLm1heCl7dGhpcy5jaGFydF89bmV3IHRyLnVpLmIuQm94Q2hhcnQoKTtQb2x5bWVyLmRvbSh0aGlzLiQuY2hhcnQpLmFwcGVuZENoaWxkKHRoaXMuY2hhcnRfKTt0aGlzLmNoYXJ0Xy5ncmFwaFdpZHRoPXRoaXMuZ3JhcGhXaWR0aDt0aGlzLmNoYXJ0Xy5ncmFwaEhlaWdodD10aGlzLmdyYXBoSGVpZ2h0O3RoaXMuY2hhcnRfLmhpZGVYQXhpcz10cnVlO3RoaXMuY2hhcnRfLmRhdGE9W3t4OicnLGNvbG9yOidibHVlJyxwZXJjZW50aWxlXzA6dGhpcy5oaXN0b2dyYW0ucnVubmluZy5taW4scGVyY2VudGlsZV8yNTp0aGlzLmhpc3RvZ3JhbS5nZXRBcHByb3hpbWF0ZVBlcmNlbnRpbGUoMC4yNSkscGVyY2VudGlsZV81MDp0aGlzLmhpc3RvZ3JhbS5nZXRBcHByb3hpbWF0ZVBlcmNlbnRpbGUoMC41KSxwZXJjZW50aWxlXzc1OnRoaXMuaGlzdG9ncmFtLmdldEFwcHJveGltYXRlUGVyY2VudGlsZSgwLjc1KSxwZXJjZW50aWxlXzEwMDp0aGlzLmhpc3RvZ3JhbS5ydW5uaW5nLm1heCx9XTt9Ci10aGlzLiQuc3RhdHNfY29udGFpbmVyLnN0eWxlLm1heEhlaWdodD10aGlzLmNoYXJ0Xy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQrJ3B4Jzthd2FpdCB0aGlzLnZpZXdTdGF0ZS51cGRhdGUoe2JydXNoZWRCaW5SYW5nZTp0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoMCx0aGlzLmhpc3RvZ3JhbS5hbGxCaW5zLmxlbmd0aCl9KTtyZXR1cm47fQotdGhpcy5jaGFydF89bmV3IHRyLnVpLmIuTmFtZUJhckNoYXJ0KCk7UG9seW1lci5kb20odGhpcy4kLmNoYXJ0KS5hcHBlbmRDaGlsZCh0aGlzLmNoYXJ0Xyk7dGhpcy5jaGFydF8uZ3JhcGhXaWR0aD10aGlzLmdyYXBoV2lkdGg7dGhpcy5jaGFydF8uZ3JhcGhIZWlnaHQ9dGhpcy5ncmFwaEhlaWdodDt0aGlzLmNoYXJ0Xy5hZGRFdmVudExpc3RlbmVyKCdpdGVtLW1vdXNlZG93bicsdGhpcy5vbk1vdXNlRG93bl8uYmluZCh0aGlzKSk7dGhpcy5jaGFydF8uYWRkRXZlbnRMaXN0ZW5lcignaXRlbS1tb3VzZW1vdmUnLHRoaXMub25Nb3VzZU1vdmVfLmJpbmQodGhpcykpO3RoaXMuY2hhcnRfLmFkZEV2ZW50TGlzdGVuZXIoJ2l0ZW0tbW91c2V1cCcsdGhpcy5vbk1vdXNlVXBfLmJpbmQodGhpcykpO3RoaXMuY2hhcnRfLmhpZGVMZWdlbmQ9dHJ1ZTt0aGlzLmNoYXJ0Xy5nZXREYXRhU2VyaWVzKCd5JykuY29sb3I9J2JsdWUnO3RoaXMuY2hhcnRfLnhBeGlzTGFiZWw9JyMnO3RoaXMuY2hhcnRfLmJydXNoZWRSYW5nZT10aGlzLnZpZXdTdGF0ZS5icnVzaGVkQmluUmFuZ2U7aWYoIXRoaXMudmlld1N0YXRlLmJydXNoZWRCaW5SYW5nZS5pc0VtcHR5KXt0aGlzLnVwZGF0ZURpYWdub3N0aWNzXygpO30KLWNvbnN0IGNoYXJ0RGF0YT1bXTtjb25zdCBiaW5Db3VudHM9W107Zm9yKGNvbnN0IGJpbiBvZiB0aGlzLmhpc3RvZ3JhbS5hbGxCaW5zKXtsZXQgeD1iaW4ucmFuZ2UubWluO2lmKHg9PT0tTnVtYmVyLk1BWF9WQUxVRSl7eD0nPCcrbmV3IHRyLmIuU2NhbGFyKHRoaXMuaGlzdG9ncmFtLnVuaXQsYmluLnJhbmdlLm1heCkudG9TdHJpbmcoKTt9ZWxzZXt4PW5ldyB0ci5iLlNjYWxhcih0aGlzLmhpc3RvZ3JhbS51bml0LHgpLnRvU3RyaW5nKCk7fQotY2hhcnREYXRhLnB1c2goe3gseTpiaW4uY291bnR9KTtiaW5Db3VudHMucHVzaChiaW4uY291bnQpO30KLWJpbkNvdW50cy5zb3J0KCh4LHkpPT55LXgpO2NvbnN0IGRhdGFSYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoMCxiaW5Db3VudHNbMF0pO2lmKGJpbkNvdW50c1sxXT4wJiZiaW5Db3VudHNbMF0+KGJpbkNvdW50c1sxXSoyKSl7ZGF0YVJhbmdlLm1heD1iaW5Db3VudHNbMV0qKDErVFJVTkNBVEVfQklOX01BUkdJTik7fQotaWYoYmluQ291bnRzWzJdPjAmJmJpbkNvdW50c1sxXT4oYmluQ291bnRzWzJdKjIpKXtkYXRhUmFuZ2UubWF4PWJpbkNvdW50c1syXSooMStUUlVOQ0FURV9CSU5fTUFSR0lOKTt9Ci10aGlzLmNoYXJ0Xy5vdmVycmlkZURhdGFSYW5nZT1kYXRhUmFuZ2U7dGhpcy5jaGFydF8uZGF0YT1jaGFydERhdGE7dGhpcy4kLnN0YXRzX2NvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQ9dGhpcy5jaGFydF8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KydweCc7fX0pO30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5hbHlzaXMnLGZ1bmN0aW9uKCl7Y29uc3QgRVZFTlRfRklFTEQ9W3trZXk6J3N0YXJ0JyxsYWJlbDonU3RhcnQnfSx7a2V5OidjcHVEdXJhdGlvbicsbGFiZWw6J0NQVSBEdXJhdGlvbid9LHtrZXk6J2R1cmF0aW9uJyxsYWJlbDonRHVyYXRpb24nfSx7a2V5OidjcHVTZWxmVGltZScsbGFiZWw6J0NQVSBTZWxmIFRpbWUnfSx7a2V5OidzZWxmVGltZScsbGFiZWw6J1NlbGYgVGltZSd9XTtmdW5jdGlvbiBidWlsZERpYWdub3N0aWNzXyhzbGljZSl7Y29uc3QgZGlhZ25vc3RpY3M9e307Zm9yKGNvbnN0IGl0ZW0gb2YgRVZFTlRfRklFTEQpe2NvbnN0IGZpZWxkTmFtZT1pdGVtLmtleTtpZihzbGljZVtmaWVsZE5hbWVdPT09dW5kZWZpbmVkKWNvbnRpbnVlO2RpYWdub3N0aWNzW2ZpZWxkTmFtZV09bmV3IHRyLnYuZC5TY2FsYXIobmV3IHRyLmIuU2NhbGFyKHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5NcyxzbGljZVtmaWVsZE5hbWVdKSk7fQotZGlhZ25vc3RpY3MuYXJncz1uZXcgdHIudi5kLkdlbmVyaWNTZXQoW3NsaWNlLmFyZ3NdKTtkaWFnbm9zdGljcy5ldmVudD1uZXcgdHIudi5kLlJlbGF0ZWRFdmVudFNldChzbGljZSk7cmV0dXJuIGRpYWdub3N0aWNzO30KLVBvbHltZXIoe2lzOid0ci11aS1hLW11bHRpLWV2ZW50LXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sY3JlYXRlZCgpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO3RoaXMuZXZlbnRzSGF2ZUR1cmF0aW9uXz10cnVlO3RoaXMuZXZlbnRzSGF2ZVN1YlJvd3NfPXRydWU7fSxyZWFkeSgpe3RoaXMuJC5yYWRpb1BpY2tlci5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQucmFkaW9QaWNrZXIuaXRlbXM9RVZFTlRfRklFTEQ7dGhpcy4kLnJhZGlvUGlja2VyLnNlbGVjdCgnY3B1U2VsZlRpbWUnKTt0aGlzLiQucmFkaW9QaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywoKT0+e2lmKHRoaXMuaXNBdHRhY2hlZCl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30pO3RoaXMuJC5oaXN0b2dyYW1TcGFuLmdyYXBoV2lkdGg9NDAwO3RoaXMuJC5oaXN0b2dyYW1TcGFuLmNhbk1lcmdlU2FtcGxlRGlhZ25vc3RpY3M9ZmFsc2U7dGhpcy4kLmhpc3RvZ3JhbUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSdub25lJzt9LGF0dGFjaGVkKCl7aWYodGhpcy5jdXJyZW50U2VsZWN0aW9uXyE9PXVuZGVmaW5lZCl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe2lmKHNlbGVjdGlvbi5sZW5ndGg8PTEpe3Rocm93IG5ldyBFcnJvcignT25seSBzdXBwb3J0cyBtdWx0aXBsZSBpdGVtcycpO30KLXRoaXMuc2V0U2VsZWN0aW9uV2l0aG91dEVycm9yQ2hlY2tzKHNlbGVjdGlvbik7fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGlvbl87fSxzZXRTZWxlY3Rpb25XaXRob3V0RXJyb3JDaGVja3Moc2VsZWN0aW9uKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjtpZih0aGlzLmlzQXR0YWNoZWQpdGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBldmVudHNIYXZlRHVyYXRpb24oKXtyZXR1cm4gdGhpcy5ldmVudHNIYXZlRHVyYXRpb25fO30sc2V0IGV2ZW50c0hhdmVEdXJhdGlvbihldmVudHNIYXZlRHVyYXRpb24pe3RoaXMuZXZlbnRzSGF2ZUR1cmF0aW9uXz1ldmVudHNIYXZlRHVyYXRpb247aWYodGhpcy5pc0F0dGFjaGVkKXRoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgZXZlbnRzSGF2ZVN1YlJvd3MoKXtyZXR1cm4gdGhpcy5ldmVudHNIYXZlU3ViUm93c187fSxzZXQgZXZlbnRzSGF2ZVN1YlJvd3MoZXZlbnRzSGF2ZVN1YlJvd3Mpe3RoaXMuZXZlbnRzSGF2ZVN1YlJvd3NfPWV2ZW50c0hhdmVTdWJSb3dzO2lmKHRoaXMuaXNBdHRhY2hlZCl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sYnVpbGRIaXN0b2dyYW1fKHNlbGVjdGVkS2V5KXtsZXQgbGVmdEJvdW5kYXJ5PU51bWJlci5NQVhfVkFMVUU7bGV0IHJpZ2h0Qm91bmRhcnk9dHIuYi5tYXRoLlN0YXRpc3RpY3MucGVyY2VudGlsZSh0aGlzLmN1cnJlbnRTZWxlY3Rpb25fLDAuOTUsZnVuY3Rpb24odmFsdWUpe2xlZnRCb3VuZGFyeT1NYXRoLm1pbihsZWZ0Qm91bmRhcnksdmFsdWVbc2VsZWN0ZWRLZXldKTtyZXR1cm4gdmFsdWVbc2VsZWN0ZWRLZXldO30pO2lmKGxlZnRCb3VuZGFyeT09PXJpZ2h0Qm91bmRhcnkpcmlnaHRCb3VuZGFyeSs9MTtjb25zdCBoaXN0b2dyYW09bmV3IHRyLnYuSGlzdG9ncmFtKCcnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Ncyx0ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKGxlZnRCb3VuZGFyeSxyaWdodEJvdW5kYXJ5LE1hdGguY2VpbChNYXRoLnNxcnQodGhpcy5jdXJyZW50U2VsZWN0aW9uXy5sZW5ndGgpKSkpO2hpc3RvZ3JhbS5jdXN0b21pemVTdW1tYXJ5T3B0aW9ucyh7c3VtOmZhbHNlfSk7Zm9yKGNvbnN0IHNsaWNlIG9mIHRoaXMuY3VycmVudFNlbGVjdGlvbl8pe2hpc3RvZ3JhbS5hZGRTYW1wbGUoc2xpY2Vbc2VsZWN0ZWRLZXldLGJ1aWxkRGlhZ25vc3RpY3NfKHNsaWNlKSk7fQotcmV0dXJuIGhpc3RvZ3JhbTt9LHVwZGF0ZUNvbnRlbnRzXygpe2NvbnN0IHNlbGVjdGlvbj10aGlzLmN1cnJlbnRTZWxlY3Rpb25fO2lmKCFzZWxlY3Rpb24pcmV0dXJuO2NvbnN0IGV2ZW50c0J5VGl0bGU9c2VsZWN0aW9uLmdldEV2ZW50c09yZ2FuaXplZEJ5VGl0bGUoKTtjb25zdCBudW1UaXRsZXM9T2JqZWN0LmtleXMoZXZlbnRzQnlUaXRsZSkubGVuZ3RoO3RoaXMuJC5ldmVudFN1bW1hcnlUYWJsZS5jb25maWd1cmUoe3Nob3dUb3RhbHM6bnVtVGl0bGVzPjEsZXZlbnRzQnlUaXRsZSxldmVudHNIYXZlRHVyYXRpb246dGhpcy5ldmVudHNIYXZlRHVyYXRpb25fLGV2ZW50c0hhdmVTdWJSb3dzOnRoaXMuZXZlbnRzSGF2ZVN1YlJvd3NffSk7dGhpcy4kLnNlbGVjdGlvblN1bW1hcnlUYWJsZS5zZWxlY3Rpb249dGhpcy5jdXJyZW50U2VsZWN0aW9uXztpZihudW1UaXRsZXM9PT0xKXt0aGlzLiQucmFkaW9QaWNrZXIuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC5oaXN0b2dyYW1Db250YWluZXIuc3R5bGUuZGlzcGxheT0nZmxleCc7dGhpcy4kLmhpc3RvZ3JhbVNwYW4uYnVpbGQodGhpcy5idWlsZEhpc3RvZ3JhbV8odGhpcy4kLnJhZGlvUGlja2VyLnNlbGVjdGVkS2V5KSk7aWYodGhpcy4kLmhpc3RvZ3JhbVNwYW4uaGlzdG9ncmFtLm51bVZhbHVlcz09PTApe3RoaXMuJC5oaXN0b2dyYW1Db250YWluZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7fX1lbHNle3RoaXMuJC5yYWRpb1BpY2tlci5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQuaGlzdG9ncmFtQ29udGFpbmVyLnN0eWxlLmRpc3BsYXk9J25vbmUnO319fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5hbmFseXNpcycsZnVuY3Rpb24oKXtjb25zdCBGTE9XX0lOPTB4MTtjb25zdCBGTE9XX09VVD0weDI7Y29uc3QgRkxPV19JTl9PVVQ9RkxPV19JTnxGTE9XX09VVDtmdW5jdGlvbiBGbG93Q2xhc3NpZmllcigpe3RoaXMubnVtRXZlbnRzXz0wO3RoaXMuZXZlbnRzQnlHVUlEXz17fTt9Ci1GbG93Q2xhc3NpZmllci5wcm90b3R5cGU9e2dldEZTXyhldmVudCl7bGV0IGZzPXRoaXMuZXZlbnRzQnlHVUlEX1tldmVudC5ndWlkXTtpZihmcz09PXVuZGVmaW5lZCl7dGhpcy5udW1FdmVudHNfKys7ZnM9e3N0YXRlOjAsZXZlbnR9O3RoaXMuZXZlbnRzQnlHVUlEX1tldmVudC5ndWlkXT1mczt9Ci1yZXR1cm4gZnM7fSxhZGRJbkZsb3coZXZlbnQpe2NvbnN0IGZzPXRoaXMuZ2V0RlNfKGV2ZW50KTtmcy5zdGF0ZXw9RkxPV19JTjtyZXR1cm4gZXZlbnQ7fSxhZGRPdXRGbG93KGV2ZW50KXtjb25zdCBmcz10aGlzLmdldEZTXyhldmVudCk7ZnMuc3RhdGV8PUZMT1dfT1VUO3JldHVybiBldmVudDt9LGhhc0V2ZW50cygpe3JldHVybiB0aGlzLm51bUV2ZW50c18+MDt9LGdldCBpbkZsb3dFdmVudHMoKXtjb25zdCBzZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7Zm9yKGNvbnN0IGd1aWQgaW4gdGhpcy5ldmVudHNCeUdVSURfKXtjb25zdCBmcz10aGlzLmV2ZW50c0J5R1VJRF9bZ3VpZF07aWYoZnMuc3RhdGU9PT1GTE9XX0lOKXtzZWxlY3Rpb24ucHVzaChmcy5ldmVudCk7fX0KLXJldHVybiBzZWxlY3Rpb247fSxnZXQgb3V0Rmxvd0V2ZW50cygpe2NvbnN0IHNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtmb3IoY29uc3QgZ3VpZCBpbiB0aGlzLmV2ZW50c0J5R1VJRF8pe2NvbnN0IGZzPXRoaXMuZXZlbnRzQnlHVUlEX1tndWlkXTtpZihmcy5zdGF0ZT09PUZMT1dfT1VUKXtzZWxlY3Rpb24ucHVzaChmcy5ldmVudCk7fX0KLXJldHVybiBzZWxlY3Rpb247fSxnZXQgaW50ZXJuYWxGbG93RXZlbnRzKCl7Y29uc3Qgc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2Zvcihjb25zdCBndWlkIGluIHRoaXMuZXZlbnRzQnlHVUlEXyl7Y29uc3QgZnM9dGhpcy5ldmVudHNCeUdVSURfW2d1aWRdO2lmKGZzLnN0YXRlPT09RkxPV19JTl9PVVQpe3NlbGVjdGlvbi5wdXNoKGZzLmV2ZW50KTt9fQotcmV0dXJuIHNlbGVjdGlvbjt9fTtyZXR1cm57Rmxvd0NsYXNzaWZpZXIsfTt9KTsndXNlIHN0cmljdCc7ZnVuY3Rpb24qZ2V0RXZlbnRJbkZsb3dFdmVudHMoZXZlbnQpe2lmKCFldmVudC5pbkZsb3dFdmVudHMpcmV0dXJuO3lpZWxkKmV2ZW50LmluRmxvd0V2ZW50czt9Ci1mdW5jdGlvbipnZXRFdmVudE91dEZsb3dFdmVudHMoZXZlbnQpe2lmKCFldmVudC5vdXRGbG93RXZlbnRzKXJldHVybjt5aWVsZCpldmVudC5vdXRGbG93RXZlbnRzO30KLWZ1bmN0aW9uKmdldEV2ZW50QW5jZXN0b3JzKGV2ZW50KXtpZighZXZlbnQuZW51bWVyYXRlQWxsQW5jZXN0b3JzKXJldHVybjt5aWVsZCpldmVudC5lbnVtZXJhdGVBbGxBbmNlc3RvcnMoKTt9Ci1mdW5jdGlvbipnZXRFdmVudERlc2NlbmRlbnRzKGV2ZW50KXtpZighZXZlbnQuZW51bWVyYXRlQWxsRGVzY2VuZGVudHMpcmV0dXJuO3lpZWxkKmV2ZW50LmVudW1lcmF0ZUFsbERlc2NlbmRlbnRzKCk7fQotUG9seW1lcih7aXM6J3RyLXVpLWEtcmVsYXRlZC1ldmVudHMnLHJlYWR5KCl7dGhpcy5ldmVudEdyb3Vwc189W107dGhpcy5jYW5jZWxGdW5jdGlvbnNfPVtdO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t0aXRsZTonRXZlbnQocyknLHZhbHVlKHJvdyl7Y29uc3QgdHlwZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTt0eXBlRWwuaW5uZXJUZXh0PXJvdy50eXBlO2lmKHJvdy50b29sdGlwKXt0eXBlRWwudGl0bGU9cm93LnRvb2x0aXA7fQotcmV0dXJuIHR5cGVFbDt9LHdpZHRoOicxNTBweCd9LHt0aXRsZTonTGluaycsd2lkdGg6JzEwMCUnLHZhbHVlKHJvdyl7Y29uc3QgbGlua0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2lmKHJvdy5uYW1lKXtsaW5rRWwuc2V0U2VsZWN0aW9uQW5kQ29udGVudChyb3cuc2VsZWN0aW9uLHJvdy5uYW1lKTt9ZWxzZXtsaW5rRWwuc2VsZWN0aW9uPXJvdy5zZWxlY3Rpb247fQotcmV0dXJuIGxpbmtFbDt9fV07fSxoYXNSZWxhdGVkRXZlbnRzKCl7cmV0dXJuKHRoaXMuZXZlbnRHcm91cHNfJiZ0aGlzLmV2ZW50R3JvdXBzXy5sZW5ndGg+MCk7fSxzZXRSZWxhdGVkRXZlbnRzKGV2ZW50U2V0KXt0aGlzLmNhbmNlbEFsbFRhc2tzXygpO3RoaXMuZXZlbnRHcm91cHNfPVtdO3RoaXMuYWRkUnVudGltZUNhbGxTdGF0c18oZXZlbnRTZXQpO3RoaXMuYWRkT3ZlcmxhcHBpbmdWOElDU3RhdHNfKGV2ZW50U2V0KTt0aGlzLmFkZFY4R0NPYmplY3RTdGF0c18oZXZlbnRTZXQpO3RoaXMuYWRkVjhTbGljZXNfKGV2ZW50U2V0KTt0aGlzLmFkZENvbm5lY3RlZEZsb3dzXyhldmVudFNldCk7dGhpcy5hZGRDb25uZWN0ZWRFdmVudHNfKGV2ZW50U2V0KTt0aGlzLmFkZE92ZXJsYXBwaW5nU2FtcGxlc18oZXZlbnRTZXQpO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxhZGRDb25uZWN0ZWRGbG93c18oZXZlbnRTZXQpe2NvbnN0IGNsYXNzaWZpZXI9bmV3IHRyLnVpLmFuYWx5c2lzLkZsb3dDbGFzc2lmaWVyKCk7ZXZlbnRTZXQuZm9yRWFjaChmdW5jdGlvbihzbGljZSl7aWYoc2xpY2UuaW5GbG93RXZlbnRzKXtzbGljZS5pbkZsb3dFdmVudHMuZm9yRWFjaChmdW5jdGlvbihmbG93KXtjbGFzc2lmaWVyLmFkZEluRmxvdyhmbG93KTt9KTt9Ci1pZihzbGljZS5vdXRGbG93RXZlbnRzKXtzbGljZS5vdXRGbG93RXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZmxvdyl7Y2xhc3NpZmllci5hZGRPdXRGbG93KGZsb3cpO30pO319KTtpZighY2xhc3NpZmllci5oYXNFdmVudHMoKSlyZXR1cm47Y29uc3QgYWRkVG9FdmVudEdyb3Vwcz1mdW5jdGlvbih0eXBlLGZsb3dFdmVudCl7dGhpcy5ldmVudEdyb3Vwc18ucHVzaCh7dHlwZSxzZWxlY3Rpb246bmV3IHRyLm1vZGVsLkV2ZW50U2V0KGZsb3dFdmVudCksbmFtZTpmbG93RXZlbnQudGl0bGV9KTt9O2NsYXNzaWZpZXIuaW5GbG93RXZlbnRzLmZvckVhY2goYWRkVG9FdmVudEdyb3Vwcy5iaW5kKHRoaXMsJ0luY29taW5nIGZsb3cnKSk7Y2xhc3NpZmllci5vdXRGbG93RXZlbnRzLmZvckVhY2goYWRkVG9FdmVudEdyb3Vwcy5iaW5kKHRoaXMsJ091dGdvaW5nIGZsb3cnKSk7Y2xhc3NpZmllci5pbnRlcm5hbEZsb3dFdmVudHMuZm9yRWFjaChhZGRUb0V2ZW50R3JvdXBzLmJpbmQodGhpcywnSW50ZXJuYWwgZmxvdycpKTt9LGNhbmNlbEFsbFRhc2tzXygpe3RoaXMuY2FuY2VsRnVuY3Rpb25zXy5mb3JFYWNoKGZ1bmN0aW9uKGNhbmNlbEZ1bmN0aW9uKXtjYW5jZWxGdW5jdGlvbigpO30pO3RoaXMuY2FuY2VsRnVuY3Rpb25zXz1bXTt9LGFkZENvbm5lY3RlZEV2ZW50c18oZXZlbnRTZXQpe3RoaXMuY2FuY2VsRnVuY3Rpb25zXy5wdXNoKHRoaXMuY3JlYXRlRXZlbnRzTGlua0lmTmVlZGVkXygnUHJlY2VkaW5nIGV2ZW50cycsJ0FkZCBhbGwgZXZlbnRzIHRoYXQgaGF2ZSBsZWQgdG8gdGhlIHNlbGVjdGVkIG9uZShzKSwgY29ubmVjdGVkIGJ5ICcrJ2Zsb3cgYXJyb3dzIG9yIGJ5IGNhbGwgc3RhY2suJyxldmVudFNldCxmdW5jdGlvbiooZXZlbnQpe3lpZWxkKmdldEV2ZW50SW5GbG93RXZlbnRzKGV2ZW50KTt5aWVsZCpnZXRFdmVudEFuY2VzdG9ycyhldmVudCk7aWYoZXZlbnQuc3RhcnRTbGljZSl7eWllbGQgZXZlbnQuc3RhcnRTbGljZTt9fS5iaW5kKHRoaXMpKSk7dGhpcy5jYW5jZWxGdW5jdGlvbnNfLnB1c2godGhpcy5jcmVhdGVFdmVudHNMaW5rSWZOZWVkZWRfKCdGb2xsb3dpbmcgZXZlbnRzJywnQWRkIGFsbCBldmVudHMgdGhhdCBoYXZlIGJlZW4gY2F1c2VkIGJ5IHRoZSBzZWxlY3RlZCBvbmUocyksICcrJ2Nvbm5lY3RlZCBieSBmbG93IGFycm93cyBvciBieSBjYWxsIHN0YWNrLicsZXZlbnRTZXQsZnVuY3Rpb24qKGV2ZW50KXt5aWVsZCpnZXRFdmVudE91dEZsb3dFdmVudHMoZXZlbnQpO3lpZWxkKmdldEV2ZW50RGVzY2VuZGVudHMoZXZlbnQpO2lmKGV2ZW50LmVuZFNsaWNlKXt5aWVsZCBldmVudC5lbmRTbGljZTt9fS5iaW5kKHRoaXMpKSk7dGhpcy5jYW5jZWxGdW5jdGlvbnNfLnB1c2godGhpcy5jcmVhdGVFdmVudHNMaW5rSWZOZWVkZWRfKCdBbGwgY29ubmVjdGVkIGV2ZW50cycsJ0FkZCBhbGwgZXZlbnRzIGNvbm5lY3RlZCB0byB0aGUgc2VsZWN0ZWQgb25lKHMpIGJ5IGZsb3cgYXJyb3dzIG9yICcrJ2J5IGNhbGwgc3RhY2suJyxldmVudFNldCxmdW5jdGlvbiooZXZlbnQpe3lpZWxkKmdldEV2ZW50SW5GbG93RXZlbnRzKGV2ZW50KTt5aWVsZCpnZXRFdmVudE91dEZsb3dFdmVudHMoZXZlbnQpO3lpZWxkKmdldEV2ZW50QW5jZXN0b3JzKGV2ZW50KTt5aWVsZCpnZXRFdmVudERlc2NlbmRlbnRzKGV2ZW50KTtpZihldmVudC5zdGFydFNsaWNlKXt5aWVsZCBldmVudC5zdGFydFNsaWNlO30KLWlmKGV2ZW50LmVuZFNsaWNlKXt5aWVsZCBldmVudC5lbmRTbGljZTt9fS5iaW5kKHRoaXMpKSk7fSxjcmVhdGVFdmVudHNMaW5rSWZOZWVkZWRfKHRpdGxlLHRvb2x0aXAsZXZlbnRzLGNvbm5lY3RlZEZuKXtldmVudHM9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KGV2ZW50cyk7Y29uc3QgZXZlbnRzVG9Qcm9jZXNzPW5ldyBTZXQoZXZlbnRzKTtsZXQgd2FzQ2hhbmdlZD1mYWxzZTtsZXQgdGFzaztsZXQgaXNDYW5jZWxlZD1mYWxzZTtmdW5jdGlvbiBhZGRFdmVudHNVbnRpbFRpbWVvdXQoKXtpZihpc0NhbmNlbGVkKXJldHVybjtjb25zdCB0aW1lb3V0PXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSs4O3doaWxlKGV2ZW50c1RvUHJvY2Vzcy5zaXplPjAmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTw9dGltZW91dCl7Y29uc3QgbmV4dEV2ZW50PXRyLmIuZ2V0Rmlyc3RFbGVtZW50KGV2ZW50c1RvUHJvY2Vzcyk7ZXZlbnRzVG9Qcm9jZXNzLmRlbGV0ZShuZXh0RXZlbnQpO2Zvcihjb25zdCBldmVudFRvQWRkIG9mIGNvbm5lY3RlZEZuKG5leHRFdmVudCkpe2lmKCFldmVudHMuY29udGFpbnMoZXZlbnRUb0FkZCkpe2V2ZW50cy5wdXNoKGV2ZW50VG9BZGQpO2V2ZW50c1RvUHJvY2Vzcy5hZGQoZXZlbnRUb0FkZCk7d2FzQ2hhbmdlZD10cnVlO319fQotaWYoZXZlbnRzVG9Qcm9jZXNzLnNpemU+MCl7Y29uc3QgbmV3VGFzaz1uZXcgdHIuYi5UYXNrKGFkZEV2ZW50c1VudGlsVGltZW91dC5iaW5kKHRoaXMpLHRoaXMpO3Rhc2suYWZ0ZXIobmV3VGFzayk7dGFzaz1uZXdUYXNrO3JldHVybjt9Ci1pZighd2FzQ2hhbmdlZClyZXR1cm47dGhpcy5ldmVudEdyb3Vwc18ucHVzaCh7dHlwZTp0aXRsZSx0b29sdGlwLHNlbGVjdGlvbjpldmVudHN9KTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30KLWZ1bmN0aW9uIGNhbmNlbFRhc2soKXtpc0NhbmNlbGVkPXRydWU7fQotdGFzaz1uZXcgdHIuYi5UYXNrKGFkZEV2ZW50c1VudGlsVGltZW91dC5iaW5kKHRoaXMpLHRoaXMpO3RyLmIuVGFzay5SdW5XaGVuSWRsZSh0YXNrKTtyZXR1cm4gY2FuY2VsVGFzazt9LGFkZE92ZXJsYXBwaW5nU2FtcGxlc18oZXZlbnRTZXQpe2NvbnN0IHNhbXBsZXM9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7Zm9yKGNvbnN0IHNsaWNlIG9mIGV2ZW50U2V0KXtpZighc2xpY2UucGFyZW50Q29udGFpbmVyfHwhc2xpY2UucGFyZW50Q29udGFpbmVyLnNhbXBsZXMpe2NvbnRpbnVlO30KLWNvbnN0IGNhbmRpZGF0ZXM9c2xpY2UucGFyZW50Q29udGFpbmVyLnNhbXBsZXM7Y29uc3QgcmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHNsaWNlLnN0YXJ0LHNsaWNlLnN0YXJ0K3NsaWNlLmR1cmF0aW9uKTtjb25zdCBmaWx0ZXJlZFNhbXBsZXM9cmFuZ2UuZmlsdGVyQXJyYXkoY2FuZGlkYXRlcyxmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlLnN0YXJ0O30pO2Zvcihjb25zdCBzYW1wbGUgb2YgZmlsdGVyZWRTYW1wbGVzKXtzYW1wbGVzLnB1c2goc2FtcGxlKTt9fQotaWYoc2FtcGxlcy5sZW5ndGg+MCl7dGhpcy5ldmVudEdyb3Vwc18ucHVzaCh7dHlwZTonT3ZlcmxhcHBpbmcgc2FtcGxlcycsdG9vbHRpcDonQWxsIHNhbXBsZXMgb3ZlcmxhcHBpbmcgdGhlIHNlbGVjdGVkIHNsaWNlKHMpLicsc2VsZWN0aW9uOnNhbXBsZXN9KTt9fSxhZGRWOFNsaWNlc18oZXZlbnRTZXQpe2NvbnN0IHY4U2xpY2VzPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2Zvcihjb25zdCBzbGljZSBvZiBldmVudFNldCl7aWYoc2xpY2UuY2F0ZWdvcnk9PT0ndjgnKXt2OFNsaWNlcy5wdXNoKHNsaWNlKTt9fQotaWYodjhTbGljZXMubGVuZ3RoPjApe3RoaXMuZXZlbnRHcm91cHNfLnB1c2goe3R5cGU6J1Y4IFNsaWNlcycsdG9vbHRpcDonQWxsIFY4IHNsaWNlcyBpbiB0aGUgc2VsZWN0ZWQgc2xpY2UocykuJyxzZWxlY3Rpb246djhTbGljZXN9KTt9fSxhZGRSdW50aW1lQ2FsbFN0YXRzXyhldmVudFNldCl7Y29uc3Qgc2xpY2VzPWV2ZW50U2V0LmZpbHRlcihmdW5jdGlvbihzbGljZSl7cmV0dXJuKHNsaWNlLmNhdGVnb3J5PT09J3Y4J3x8c2xpY2UuY2F0ZWdvcnk9PT0nZGlzYWJsZWQtYnktZGVmYXVsdC12OC5ydW50aW1lX3N0YXRzJykmJnNsaWNlLnJ1bnRpbWVDYWxsU3RhdHM7fSk7aWYoc2xpY2VzLmxlbmd0aD4wKXt0aGlzLmV2ZW50R3JvdXBzXy5wdXNoKHt0eXBlOidSdW50aW1lIGNhbGwgc3RhdHMgdGFibGUnLHRvb2x0aXA6J0FsbCBWOCBzbGljZXMgY29udGFpbmluZyBydW50aW1lIGNhbGwgc3RhdHMgdGFibGUgaW4gdGhlIHNlbGVjdGVkIHNsaWNlKHMpLicsc2VsZWN0aW9uOnNsaWNlc30pO319LGFkZFY4R0NPYmplY3RTdGF0c18oZXZlbnRTZXQpe2NvbnN0IHNsaWNlcz1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtmb3IoY29uc3Qgc2xpY2Ugb2YgZXZlbnRTZXQpe2lmKHNsaWNlLnRpdGxlPT09J1Y4LkdDX09iamVjdHNfU3RhdHMnKXtzbGljZXMucHVzaChzbGljZSk7fX0KLWlmKHNsaWNlcy5sZW5ndGg+MCl7dGhpcy5ldmVudEdyb3Vwc18ucHVzaCh7dHlwZTonVjggR0Mgc3RhdHMgdGFibGUnLHRvb2x0aXA6J0FsbCBWOCBHQyBzdGF0aXN0aWNzIHNsaWNlcyBpbiB0aGUgc2VsZWN0ZWQgc2V0Licsc2VsZWN0aW9uOnNsaWNlc30pO319LGFkZE92ZXJsYXBwaW5nVjhJQ1N0YXRzXyhldmVudFNldCl7Y29uc3Qgc2xpY2VzPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2Zvcihjb25zdCBzbGljZSBvZiBldmVudFNldCl7aWYoIXNsaWNlLnBhcmVudENvbnRhaW5lcnx8IXNsaWNlLnBhcmVudENvbnRhaW5lci5zbGljZUdyb3VwKXtjb250aW51ZTt9Ci1jb25zdCBzbGljZUdyb3VwPXNsaWNlLnBhcmVudENvbnRhaW5lci5zbGljZUdyb3VwLnNsaWNlcztjb25zdCByYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2Uoc2xpY2Uuc3RhcnQsc2xpY2Uuc3RhcnQrc2xpY2UuZHVyYXRpb24pO2NvbnN0IGZpbHRlcmVkU2xpY2VzPXJhbmdlLmZpbHRlckFycmF5KHNsaWNlR3JvdXAsdmFsdWU9PnZhbHVlLnN0YXJ0KTtjb25zdCBpY1NsaWNlcz1maWx0ZXJlZFNsaWNlcy5maWx0ZXIoeD0+eC50aXRsZT09PSdWOC5JQ1N0YXRzJyk7Zm9yKGNvbnN0IGljU2xpY2Ugb2YgaWNTbGljZXMpe3NsaWNlcy5wdXNoKGljU2xpY2UpO319Ci1pZihzbGljZXMubGVuZ3RoPjApe3RoaXMuZXZlbnRHcm91cHNfLnB1c2goe3R5cGU6J092ZXJsYXBwaW5nIFY4IElDIHN0YXRzJyx0b29sdGlwOidBbGwgVjggSUMgc3RhdGlzdGljcyBvdmVybGFwcGluZyB0aGUgc2VsZWN0ZWQgc2V0Licsc2VsZWN0aW9uOnNsaWNlc30pO319LHVwZGF0ZUNvbnRlbnRzXygpe2NvbnN0IHRhYmxlPXRoaXMuJC50YWJsZTtpZih0aGlzLmV2ZW50R3JvdXBzXz09PXVuZGVmaW5lZCl7dGFibGUudGFibGVSb3dzPVtdO31lbHNle3RhYmxlLnRhYmxlUm93cz10aGlzLmV2ZW50R3JvdXBzXy5zbGljZSgpO30KLXRhYmxlLnJlYnVpbGQoKTt9fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLW11bHRpLWFzeW5jLXNsaWNlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLiQuY29udGVudC5zZWxlY3Rpb247fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uPXNlbGVjdGlvbjt0aGlzLiQucmVsYXRlZEV2ZW50cy5zZXRSZWxhdGVkRXZlbnRzKHNlbGVjdGlvbik7aWYodGhpcy4kLnJlbGF0ZWRFdmVudHMuaGFzUmVsYXRlZEV2ZW50cygpKXt0aGlzLiQucmVsYXRlZEV2ZW50cy5zdHlsZS5kaXNwbGF5PScnO31lbHNle3RoaXMuJC5yZWxhdGVkRXZlbnRzLnN0eWxlLmRpc3BsYXk9J25vbmUnO319LGdldCByZWxhdGVkRXZlbnRzVG9IaWdobGlnaHQoKXtpZighdGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uKXJldHVybiB1bmRlZmluZWQ7Y29uc3Qgc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO3RoaXMuJC5jb250ZW50LnNlbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGFzeW5jRXZlbnQpe2lmKCFhc3luY0V2ZW50LmFzc29jaWF0ZWRFdmVudHMpcmV0dXJuO2FzeW5jRXZlbnQuYXNzb2NpYXRlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtzZWxlY3Rpb24ucHVzaChldmVudCk7fSk7fSk7aWYoc2VsZWN0aW9uLmxlbmd0aClyZXR1cm4gc2VsZWN0aW9uO3JldHVybiB1bmRlZmluZWQ7fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1tdWx0aS1hc3luYy1zbGljZS1zdWItdmlldycsdHIubW9kZWwuQXN5bmNTbGljZSx7bXVsdGk6dHJ1ZSx0aXRsZTonQXN5bmMgU2xpY2VzJyx9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtbXVsdGktY3B1LXNsaWNlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10scmVhZHkoKXt0aGlzLiQuY29udGVudC5ldmVudHNIYXZlU3ViUm93cz1mYWxzZTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuJC5jb250ZW50LnNldFNlbGVjdGlvbldpdGhvdXRFcnJvckNoZWNrcyhzZWxlY3Rpb24pO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtbXVsdGktY3B1LXNsaWNlLXN1Yi12aWV3Jyx0ci5tb2RlbC5DcHVTbGljZSx7bXVsdGk6dHJ1ZSx0aXRsZTonQ1BVIFNsaWNlcycsfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLW11bHRpLWZsb3ctZXZlbnQtc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxyZWFkeSgpe3RoaXMuJC5jb250ZW50LmV2ZW50c0hhdmVEdXJhdGlvbj1mYWxzZTt0aGlzLiQuY29udGVudC5ldmVudHNIYXZlU3ViUm93cz1mYWxzZTt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLiQuY29udGVudC5zZWxlY3Rpb249c2VsZWN0aW9uO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLiQuY29udGVudC5zZWxlY3Rpb247fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1tdWx0aS1mbG93LWV2ZW50LXN1Yi12aWV3Jyx0ci5tb2RlbC5GbG93RXZlbnQse211bHRpOnRydWUsdGl0bGU6J0Zsb3cgRXZlbnRzJyx9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtbXVsdGktZnJhbWUtc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxjcmVhdGVkKCl7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz11bmRlZmluZWQ7fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7UG9seW1lci5kb20odGhpcykudGV4dENvbnRlbnQ9Jyc7Y29uc3QgcmVhbFZpZXc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1tdWx0aS1ldmVudC1zdWItdmlldycpO3JlYWxWaWV3LmV2ZW50c0hhdmVEdXJhdGlvbj1mYWxzZTtyZWFsVmlldy5ldmVudHNIYXZlU3ViUm93cz1mYWxzZTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChyZWFsVmlldyk7cmVhbFZpZXcuc2V0U2VsZWN0aW9uV2l0aG91dEVycm9yQ2hlY2tzKHNlbGVjdGlvbik7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz1zZWxlY3Rpb247fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGlvbl87fSxnZXQgcmVsYXRlZEV2ZW50c1RvSGlnaGxpZ2h0KCl7aWYoIXRoaXMuY3VycmVudFNlbGVjdGlvbl8pcmV0dXJuIHVuZGVmaW5lZDtjb25zdCBzZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7dGhpcy5jdXJyZW50U2VsZWN0aW9uXy5mb3JFYWNoKGZ1bmN0aW9uKGZyYW1lRXZlbnQpe2ZyYW1lRXZlbnQuYXNzb2NpYXRlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtzZWxlY3Rpb24ucHVzaChldmVudCk7fSk7fSk7cmV0dXJuIHNlbGVjdGlvbjt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLW11bHRpLWZyYW1lLXN1Yi12aWV3Jyx0ci5tb2RlbC5GcmFtZSx7bXVsdGk6dHJ1ZSx0aXRsZTonRnJhbWVzJyx9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtbXVsdGktaW5zdGFudC1ldmVudC1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGNyZWF0ZWQoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkudGV4dENvbnRlbnQ9Jyc7Y29uc3QgcmVhbFZpZXc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1tdWx0aS1ldmVudC1zdWItdmlldycpO3JlYWxWaWV3LmV2ZW50c0hhdmVEdXJhdGlvbj1mYWxzZTtyZWFsVmlldy5ldmVudHNIYXZlU3ViUm93cz1mYWxzZTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuYXBwZW5kQ2hpbGQocmVhbFZpZXcpO3JlYWxWaWV3LnNldFNlbGVjdGlvbldpdGhvdXRFcnJvckNoZWNrcyhzZWxlY3Rpb24pO3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO319KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtbXVsdGktb2JqZWN0LXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sY3JlYXRlZCgpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO30scmVhZHkoKXt0aGlzLiQuY29udGVudC5zaG93SGVhZGVyPWZhbHNlO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO2NvbnN0IG9iamVjdEV2ZW50cz1BcnJheS5mcm9tKHNlbGVjdGlvbikuc29ydCh0ci5iLm1hdGguUmFuZ2UuY29tcGFyZUJ5TWluVGltZXMpO2NvbnN0IHRpbWVTcGFuQ29uZmlnPXt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Ncyxvd25lckRvY3VtZW50OnRoaXMub3duZXJEb2N1bWVudH07Y29uc3QgdGFibGU9dGhpcy4kLmNvbnRlbnQ7dGFibGUudGFibGVDb2x1bW5zPVt7dGl0bGU6J0ZpcnN0Jyx2YWx1ZShldmVudCl7aWYoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5PYmplY3RTbmFwc2hvdCl7cmV0dXJuIHRyLnYudWkuY3JlYXRlU2NhbGFyU3BhbihldmVudC50cyx0aW1lU3BhbkNvbmZpZyk7fQotY29uc3Qgc3BhbkVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtQb2x5bWVyLmRvbShzcGFuRWwpLmFwcGVuZENoaWxkKHRyLnYudWkuY3JlYXRlU2NhbGFyU3BhbihldmVudC5jcmVhdGlvblRzLHRpbWVTcGFuQ29uZmlnKSk7UG9seW1lci5kb20oc3BhbkVsKS5hcHBlbmRDaGlsZCh0ci51aS5iLmNyZWF0ZVNwYW4oe3RleHRDb250ZW50OictJyxtYXJnaW5MZWZ0Oic0cHgnLG1hcmdpblJpZ2h0Oic0cHgnfSkpO2lmKGV2ZW50LmRlbGV0aW9uVHMhPT1OdW1iZXIuTUFYX1ZBTFVFKXtQb2x5bWVyLmRvbShzcGFuRWwpLmFwcGVuZENoaWxkKHRyLnYudWkuY3JlYXRlU2NhbGFyU3BhbihldmVudC5kZWxldGlvblRzLHRpbWVTcGFuQ29uZmlnKSk7fQotcmV0dXJuIHNwYW5FbDt9LHdpZHRoOicyMDBweCd9LHt0aXRsZTonU2Vjb25kJyx2YWx1ZShldmVudCl7Y29uc3QgbGlua0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2xpbmtFbC5zZXRTZWxlY3Rpb25BbmRDb250ZW50KGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0ci5tb2RlbC5FdmVudFNldChldmVudCk7fSxldmVudC51c2VyRnJpZW5kbHlOYW1lKTtyZXR1cm4gbGlua0VsO30sd2lkdGg6JzEwMCUnfV07dGFibGUudGFibGVSb3dzPW9iamVjdEV2ZW50czt0YWJsZS5yZWJ1aWxkKCk7fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1tdWx0aS1vYmplY3Qtc3ViLXZpZXcnLHRyLm1vZGVsLk9iamVjdEluc3RhbmNlLHttdWx0aTp0cnVlLHRpdGxlOidPYmplY3QgSW5zdGFuY2VzJyx9KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtbXVsdGktb2JqZWN0LXN1Yi12aWV3Jyx0ci5tb2RlbC5PYmplY3RTbmFwc2hvdCx7bXVsdGk6dHJ1ZSx0aXRsZTonT2JqZWN0IFNuYXBzaG90cycsfSk7J3VzZSBzdHJpY3QnO2NvbnN0IEV2ZW50U2V0PXRyLm1vZGVsLkV2ZW50U2V0O2NvbnN0IENIQVJUX1RJVExFPSdQb3dlciAoVykgYnkgbXMgc2luY2UgdmVydGljYWwgc3luYyc7UG9seW1lcih7aXM6J3RyLXVpLWEtZnJhbWUtcG93ZXItdXNhZ2UtY2hhcnQnLHJlYWR5KCl7dGhpcy5jaGFydF89dW5kZWZpbmVkO3RoaXMuc2FtcGxlc189bmV3IEV2ZW50U2V0KCk7dGhpcy52U3luY1RpbWVzdGFtcHNfPVtdO30sYXR0YWNoZWQoKXtpZih0aGlzLnNhbXBsZXNfKXRoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgY2hhcnQoKXtyZXR1cm4gdGhpcy5jaGFydF87fSxnZXQgc2FtcGxlcygpe3JldHVybiB0aGlzLnNhbXBsZXNfO30sZ2V0IHZTeW5jVGltZXN0YW1wcygpe3JldHVybiB0aGlzLnZTeW5jVGltZXN0YW1wc187fSxzZXREYXRhKHNhbXBsZXMsdlN5bmNUaW1lc3RhbXBzKXt0aGlzLnNhbXBsZXNfPShzYW1wbGVzPT09dW5kZWZpbmVkKT9uZXcgRXZlbnRTZXQoKTpzYW1wbGVzO3RoaXMudlN5bmNUaW1lc3RhbXBzXz0odlN5bmNUaW1lc3RhbXBzPT09dW5kZWZpbmVkKT9bXTp2U3luY1RpbWVzdGFtcHM7aWYodGhpcy5pc0F0dGFjaGVkKXRoaXMudXBkYXRlQ29udGVudHNfKCk7fSx1cGRhdGVDb250ZW50c18oKXt0aGlzLmNsZWFyQ2hhcnRfKCk7Y29uc3QgZGF0YT10aGlzLmdldERhdGFGb3JMaW5lQ2hhcnRfKCk7aWYoZGF0YS5sZW5ndGg9PT0wKXJldHVybjt0aGlzLmNoYXJ0Xz1uZXcgdHIudWkuYi5MaW5lQ2hhcnQoKTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuYXBwZW5kQ2hpbGQodGhpcy5jaGFydF8pO3RoaXMuY2hhcnRfLmNoYXJ0VGl0bGU9Q0hBUlRfVElUTEU7dGhpcy5jaGFydF8uZGF0YT1kYXRhO30sY2xlYXJDaGFydF8oKXtjb25zdCBjb250ZW50PXRoaXMuJC5jb250ZW50O3doaWxlKFBvbHltZXIuZG9tKGNvbnRlbnQpLmZpcnN0Q2hpbGQpe1BvbHltZXIuZG9tKGNvbnRlbnQpLnJlbW92ZUNoaWxkKFBvbHltZXIuZG9tKGNvbnRlbnQpLmZpcnN0Q2hpbGQpO30KLXRoaXMuY2hhcnRfPXVuZGVmaW5lZDt9LGdldERhdGFGb3JMaW5lQ2hhcnRfKCl7Y29uc3Qgc29ydGVkU2FtcGxlcz10aGlzLnNvcnRTYW1wbGVzQnlUaW1lc3RhbXBBc2NlbmRpbmdfKHRoaXMuc2FtcGxlcyk7Y29uc3QgdlN5bmNUaW1lc3RhbXBzPXRoaXMudlN5bmNUaW1lc3RhbXBzLnNsaWNlKCk7bGV0IGxhc3RWU3luY1RpbWVzdGFtcD11bmRlZmluZWQ7Y29uc3QgcG9pbnRzPVtdO2xldCBmcmFtZU51bWJlcj0wO3NvcnRlZFNhbXBsZXMuZm9yRWFjaChmdW5jdGlvbihzYW1wbGUpe3doaWxlKHZTeW5jVGltZXN0YW1wcy5sZW5ndGg+MCYmdlN5bmNUaW1lc3RhbXBzWzBdPD1zYW1wbGUuc3RhcnQpe2xhc3RWU3luY1RpbWVzdGFtcD12U3luY1RpbWVzdGFtcHMuc2hpZnQoKTtmcmFtZU51bWJlcisrO30KLWlmKGxhc3RWU3luY1RpbWVzdGFtcD09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgcG9pbnQ9e3g6c2FtcGxlLnN0YXJ0LWxhc3RWU3luY1RpbWVzdGFtcH07cG9pbnRbJ2YnK2ZyYW1lTnVtYmVyXT1zYW1wbGUucG93ZXJJblc7cG9pbnRzLnB1c2gocG9pbnQpO30pO3JldHVybiBwb2ludHM7fSxzb3J0U2FtcGxlc0J5VGltZXN0YW1wQXNjZW5kaW5nXyhzYW1wbGVzKXtyZXR1cm4gc2FtcGxlcy50b0FycmF5KCkuc29ydChmdW5jdGlvbihzbXBsMSxzbXBsMil7cmV0dXJuIHNtcGwxLnN0YXJ0LXNtcGwyLnN0YXJ0O30pO319KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtcG93ZXItc2FtcGxlLXN1bW1hcnktdGFibGUnLHJlYWR5KCl7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1be3RpdGxlOidNaW4gcG93ZXInLHdpZHRoOicxMDBweCcsdmFsdWUocm93KXtyZXR1cm4gdHIuYi5Vbml0LmJ5TmFtZS5wb3dlckluV2F0dHMuZm9ybWF0KHJvdy5taW4pO319LHt0aXRsZTonTWF4IHBvd2VyJyx3aWR0aDonMTAwcHgnLHZhbHVlKHJvdyl7cmV0dXJuIHRyLmIuVW5pdC5ieU5hbWUucG93ZXJJbldhdHRzLmZvcm1hdChyb3cubWF4KTt9fSx7dGl0bGU6J1RpbWUtd2VpZ2h0ZWQgYXZlcmFnZScsd2lkdGg6JzEwMHB4Jyx2YWx1ZShyb3cpe3JldHVybiB0ci5iLlVuaXQuYnlOYW1lLnBvd2VySW5XYXR0cy5mb3JtYXQocm93LnRpbWVXZWlnaHRlZEF2ZXJhZ2VJblcpO319LHt0aXRsZTonRW5lcmd5IGNvbnN1bWVkJyx3aWR0aDonMTAwcHgnLHZhbHVlKHJvdyl7cmV0dXJuIHRyLmIuVW5pdC5ieU5hbWUuZW5lcmd5SW5Kb3VsZXMuZm9ybWF0KHJvdy5lbmVyZ3lDb25zdW1lZEluSik7fX0se3RpdGxlOidTYW1wbGUgY291bnQnLHdpZHRoOicxMDAlJyx2YWx1ZShyb3cpe3JldHVybiByb3cuc2FtcGxlQ291bnQ7fX1dO3RoaXMuc2FtcGxlcz1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTt9LGdldCBzYW1wbGVzKCl7cmV0dXJuIHRoaXMuc2FtcGxlc187fSxzZXQgc2FtcGxlcyhzYW1wbGVzKXtpZihzYW1wbGVzPT09dGhpcy5zYW1wbGVzKXJldHVybjt0aGlzLnNhbXBsZXNfPShzYW1wbGVzPT09dW5kZWZpbmVkKT9uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTpzYW1wbGVzO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSx1cGRhdGVDb250ZW50c18oKXtpZih0aGlzLnNhbXBsZXMubGVuZ3RoPT09MCl7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1bXTt9ZWxzZXt0aGlzLiQudGFibGUudGFibGVSb3dzPVt7bWluOnRoaXMuZ2V0TWluKCksbWF4OnRoaXMuZ2V0TWF4KCksdGltZVdlaWdodGVkQXZlcmFnZUluVzp0aGlzLmdldFRpbWVXZWlnaHRlZEF2ZXJhZ2VJblcoKSxlbmVyZ3lDb25zdW1lZEluSjp0aGlzLmdldEVuZXJneUNvbnN1bWVkSW5KKCksc2FtcGxlQ291bnQ6dGhpcy5zYW1wbGVzLmxlbmd0aH1dO30KLXRoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fSxnZXRNaW4oKXtyZXR1cm4gTWF0aC5taW4uYXBwbHkobnVsbCx0aGlzLnNhbXBsZXMubWFwKGZ1bmN0aW9uKHNhbXBsZSl7cmV0dXJuIHNhbXBsZS5wb3dlckluVzt9KSk7fSxnZXRNYXgoKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCx0aGlzLnNhbXBsZXMubWFwKGZ1bmN0aW9uKHNhbXBsZSl7cmV0dXJuIHNhbXBsZS5wb3dlckluVzt9KSk7fSxnZXRUaW1lV2VpZ2h0ZWRBdmVyYWdlSW5XKCl7Y29uc3QgZW5lcmd5Q29uc3VtZWRJbko9dGhpcy5nZXRFbmVyZ3lDb25zdW1lZEluSigpO2lmKGVuZXJneUNvbnN1bWVkSW5KPT09J04vQScpcmV0dXJuJ04vQSc7Y29uc3QgZHVyYXRpb25JblM9dHIuYi5jb252ZXJ0VW5pdCh0aGlzLnNhbXBsZXMuYm91bmRzLmR1cmF0aW9uLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUxMSSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTk9ORSk7cmV0dXJuIGVuZXJneUNvbnN1bWVkSW5KL2R1cmF0aW9uSW5TO30sZ2V0RW5lcmd5Q29uc3VtZWRJbkooKXtpZih0aGlzLnNhbXBsZXMubGVuZ3RoPDIpcmV0dXJuJ04vQSc7Y29uc3QgYm91bmRzPXRoaXMuc2FtcGxlcy5ib3VuZHM7Y29uc3Qgc2VyaWVzPXRyLmIuZ2V0Rmlyc3RFbGVtZW50KHRoaXMuc2FtcGxlcykuc2VyaWVzO3JldHVybiBzZXJpZXMuZ2V0RW5lcmd5Q29uc3VtZWRJbkooYm91bmRzLm1pbixib3VuZHMubWF4KTt9fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLW11bHRpLXBvd2VyLXNhbXBsZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLHJlYWR5KCl7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz11bmRlZmluZWQ7fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGlvbl87fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz1zZWxlY3Rpb247dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe2NvbnN0IHNhbXBsZXM9dGhpcy5zZWxlY3Rpb247Y29uc3QgdlN5bmNUaW1lc3RhbXBzPSghc2FtcGxlcz9bXTp0ci5iLmdldEZpcnN0RWxlbWVudChzYW1wbGVzKS5zZXJpZXMuZGV2aWNlLnZTeW5jVGltZXN0YW1wcyk7dGhpcy4kLnN1bW1hcnlUYWJsZS5zYW1wbGVzPXNhbXBsZXM7dGhpcy4kLmNoYXJ0LnNldERhdGEodGhpcy5zZWxlY3Rpb24sdlN5bmNUaW1lc3RhbXBzKTt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLW11bHRpLXBvd2VyLXNhbXBsZS1zdWItdmlldycsdHIubW9kZWwuUG93ZXJTYW1wbGUse211bHRpOnRydWUsdGl0bGU6J1Bvd2VyIFNhbXBsZXMnLH0pOyd1c2Ugc3RyaWN0JzsoZnVuY3Rpb24oKXtjb25zdCBNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXI9dHIuYi5NdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXI7UG9seW1lcih7aXM6J3RyLXVpLWEtbXVsdGktc2FtcGxlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sY3JlYXRlZCgpe3RoaXMudmlld09wdGlvbl89dW5kZWZpbmVkO3RoaXMuc2VsZWN0aW9uXz11bmRlZmluZWQ7fSxyZWFkeSgpe2NvbnN0IHZpZXdTZWxlY3Rvcj10ci51aS5iLmNyZWF0ZVNlbGVjdG9yKHRoaXMsJ3ZpZXdPcHRpb24nLCd0cmFjaW5nLnVpLmFuYWx5c2lzLm11bHRpX3NhbXBsZV9zdWJfdmlldycsTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZpZXdUeXBlLlRPUF9ET1dOX1RSRUVfVklFVyxbe2xhYmVsOidUb3AtZG93biAoVHJlZSknLHZhbHVlOk11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WaWV3VHlwZS5UT1BfRE9XTl9UUkVFX1ZJRVd9LHtsYWJlbDonVG9wLWRvd24gKEhlYXZ5KScsdmFsdWU6TXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZpZXdUeXBlLlRPUF9ET1dOX0hFQVZZX1ZJRVd9LHtsYWJlbDonQm90dG9tLXVwIChIZWF2eSknLHZhbHVlOk11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WaWV3VHlwZS5CT1RUT01fVVBfSEVBVllfVklFV31dKTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udHJvbCkuYXBwZW5kQ2hpbGQodmlld1NlbGVjdG9yKTt0aGlzLiQudGFibGUuc2VsZWN0aW9uTW9kZT10ci51aS5iLlRhYmxlRm9ybWF0LlNlbGVjdGlvbk1vZGUuUk9XO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbl87fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhpcy5zZWxlY3Rpb25fPXNlbGVjdGlvbjt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHZpZXdPcHRpb24oKXtyZXR1cm4gdGhpcy52aWV3T3B0aW9uXzt9LHNldCB2aWV3T3B0aW9uKHZpZXdPcHRpb24pe3RoaXMudmlld09wdGlvbl89dmlld09wdGlvbjt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sY3JlYXRlU2FtcGxpbmdTdW1tYXJ5XyhzZWxlY3Rpb24sdmlld09wdGlvbil7Y29uc3QgYnVpbGRlcj1uZXcgTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyKDEsMSk7Y29uc3Qgc2FtcGxlcz1zZWxlY3Rpb24uZmlsdGVyKGV2ZW50PT5ldmVudCBpbnN0YW5jZW9mIHRyLm1vZGVsLlNhbXBsZSk7c2FtcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHNhbXBsZSl7YnVpbGRlci5hZGRQYXRoKFtzYW1wbGUudXNlckZyaWVuZGx5U3RhY2sucmV2ZXJzZSgpXSxbMV0sTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZhbHVlS2luZC5TRUxGKTt9KTtyZXR1cm4gYnVpbGRlci5idWlsZFZpZXcodmlld09wdGlvbik7fSxwcm9jZXNzU2FtcGxlUm93c18ocm93cyl7Zm9yKGNvbnN0IHJvdyBvZiByb3dzKXtsZXQgdGl0bGU9cm93LnRpdGxlWzBdO2xldCByZXN1bHRzPS8oLiopIChEZW9wdGltaXplZCByZWFzb246IC4qKS8uZXhlYyh0aXRsZSk7aWYocmVzdWx0cyE9PW51bGwpe3Jvdy5kZW9wdFJlYXNvbj1yZXN1bHRzWzJdO3RpdGxlPXJlc3VsdHNbMV07fQotcmVzdWx0cz0vKC4qKSB1cmw6ICguKikvLmV4ZWModGl0bGUpO2lmKHJlc3VsdHMhPT1udWxsKXtyb3cuZnVuY3Rpb25OYW1lPXJlc3VsdHNbMV07cm93LnVybD1yZXN1bHRzWzJdO2lmKHJvdy5mdW5jdGlvbk5hbWU9PT0nJyl7cm93LmZ1bmN0aW9uTmFtZT0nKGFub255bW91cyBmdW5jdGlvbiknO30KLWlmKHJvdy51cmw9PT0nJyl7cm93LnVybD0ndW5rbm93bic7fX1lbHNle3Jvdy5mdW5jdGlvbk5hbWU9dGl0bGU7cm93LnVybD0ndW5rbm93bic7fQotdGhpcy5wcm9jZXNzU2FtcGxlUm93c18ocm93LnN1YlJvd3MpO319LHVwZGF0ZUNvbnRlbnRzXygpe2lmKHRoaXMuc2VsZWN0aW9uPT09dW5kZWZpbmVkKXt0aGlzLiQudGFibGUudGFibGVDb2x1bW5zPVtdO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9W107dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTtyZXR1cm47fQotY29uc3Qgc2FtcGxpbmdEYXRhPXRoaXMuY3JlYXRlU2FtcGxpbmdTdW1tYXJ5Xyh0aGlzLnNlbGVjdGlvbix0aGlzLnZpZXdPcHRpb24pO2NvbnN0IHRvdGFsPXNhbXBsaW5nRGF0YS52YWx1ZXNbMF0udG90YWw7Y29uc3QgY29sdW1ucz1bdGhpcy5jcmVhdGVQZXJjZW50Q29sdW1uXygnVG90YWwnLHRvdGFsKSx0aGlzLmNyZWF0ZVNhbXBsZXNDb2x1bW5fKCdUb3RhbCcpLHRoaXMuY3JlYXRlUGVyY2VudENvbHVtbl8oJ1NlbGYnLHRvdGFsKSx0aGlzLmNyZWF0ZVNhbXBsZXNDb2x1bW5fKCdTZWxmJykse3RpdGxlOidGdW5jdGlvbiBOYW1lJyx2YWx1ZShyb3cpe2lmKHJvdy5kZW9wdFJlYXNvbiE9PXVuZGVmaW5lZCl7Y29uc3Qgc3BhbkVsPXRyLnVpLmIuY3JlYXRlU3Bhbih7aXRhbGljOnRydWUsY29sb3I6JyNGNDQzMzYnLHRvb2x0aXA6cm93LmRlb3B0UmVhc29ufSk7c3BhbkVsLmlubmVyVGV4dD1yb3cuZnVuY3Rpb25OYW1lO3JldHVybiBzcGFuRWw7fQotcmV0dXJuIHJvdy5mdW5jdGlvbk5hbWU7fSx3aWR0aDonMTUwcHgnLGNtcDooYSxiKT0+YS5mdW5jdGlvbk5hbWUubG9jYWxlQ29tcGFyZShiLmZ1bmN0aW9uTmFtZSksc2hvd0V4cGFuZEJ1dHRvbnM6dHJ1ZX0se3RpdGxlOidMb2NhdGlvbicsdmFsdWUocm93KXtyZXR1cm4gcm93LnVybDt9LHdpZHRoOicyNTBweCcsY21wOihhLGIpPT5hLnVybC5sb2NhbGVDb21wYXJlKGIudXJsKSx9XTt0aGlzLnByb2Nlc3NTYW1wbGVSb3dzXyhzYW1wbGluZ0RhdGEuc3ViUm93cyk7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1jb2x1bW5zO3RoaXMuJC50YWJsZS5zb3J0Q29sdW1uSW5kZXg9MTt0aGlzLiQudGFibGUuc29ydERlc2NlbmRpbmc9dHJ1ZTt0aGlzLiQudGFibGUudGFibGVSb3dzPXNhbXBsaW5nRGF0YS5zdWJSb3dzO3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fSxjcmVhdGVQZXJjZW50Q29sdW1uXyh0aXRsZSxzYW1wbGluZ0RhdGFUb3RhbCl7Y29uc3QgZmllbGQ9dGl0bGUudG9Mb3dlckNhc2UoKTtyZXR1cm57dGl0bGU6dGl0bGUrJyBwZXJjZW50Jyx2YWx1ZShyb3cpe3JldHVybiB0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4ocm93LnZhbHVlc1swXVtmaWVsZF0vc2FtcGxpbmdEYXRhVG90YWwse2N1c3RvbUNvbnRleHRSYW5nZTp0ci5iLm1hdGguUmFuZ2UuUEVSQ0VOVF9SQU5HRSx1bml0OnRyLmIuVW5pdC5ieU5hbWUubm9ybWFsaXplZFBlcmNlbnRhZ2UsY29udGV4dDp7bWluaW11bUZyYWN0aW9uRGlnaXRzOjIsbWF4aW11bUZyYWN0aW9uRGlnaXRzOjJ9LH0pO30sd2lkdGg6JzYwcHgnLGNtcDooYSxiKT0+YS52YWx1ZXNbMF1bZmllbGRdLWIudmFsdWVzWzBdW2ZpZWxkXX07fSxjcmVhdGVTYW1wbGVzQ29sdW1uXyh0aXRsZSl7Y29uc3QgZmllbGQ9dGl0bGUudG9Mb3dlckNhc2UoKTtyZXR1cm57dGl0bGU6dGl0bGUrJyBzYW1wbGVzJyx2YWx1ZShyb3cpe3JldHVybiB0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4ocm93LnZhbHVlc1swXVtmaWVsZF0se3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS51bml0bGVzc051bWJlcixjb250ZXh0OnttYXhpbXVtRnJhY3Rpb25EaWdpdHM6MH0sfSk7fSx3aWR0aDonNjBweCcsY21wOihhLGIpPT5hLnZhbHVlc1swXVtmaWVsZF0tYi52YWx1ZXNbMF1bZmllbGRdfTt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLW11bHRpLXNhbXBsZS1zdWItdmlldycsdHIubW9kZWwuU2FtcGxlLHttdWx0aTp0cnVlLHRpdGxlOidTYW1wbGVzJyx9KTt9KSgpOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1tdWx0aS10aHJlYWQtc2xpY2Utc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxjcmVhdGVkKCl7dGhpcy5zZWxlY3Rpb25fPXVuZGVmaW5lZDt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuc2VsZWN0aW9uXz1zZWxlY3Rpb247aWYodHIuaXNFeHBvcnRlZCgndHIudWkuZS5jaHJvbWUuY2MuUmFzdGVyVGFza1NlbGVjdGlvbicpKXtpZih0ci51aS5lLmNocm9tZS5jYy5SYXN0ZXJUYXNrU2VsZWN0aW9uLnN1cHBvcnRzKHNlbGVjdGlvbikpe2NvbnN0IGx0dlNlbGVjdGlvbj1uZXcgdHIudWkuZS5jaHJvbWUuY2MuUmFzdGVyVGFza1NlbGVjdGlvbihzZWxlY3Rpb24pO2NvbnN0IGx0dj1uZXcgdHIudWkuZS5jaHJvbWUuY2MuTGF5ZXJUcmVlSG9zdEltcGxTbmFwc2hvdFZpZXcoKTtsdHYub2JqZWN0U25hcHNob3Q9bHR2U2VsZWN0aW9uLmNvbnRhaW5pbmdTbmFwc2hvdDtsdHYuc2VsZWN0aW9uPWx0dlNlbGVjdGlvbjtsdHYuZXh0cmFIaWdobGlnaHRzQnlMYXllcklkPWx0dlNlbGVjdGlvbi5leHRyYUhpZ2hsaWdodHNCeUxheWVySWQ7UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLnRleHRDb250ZW50PScnO1BvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5hcHBlbmRDaGlsZChsdHYpO3RoaXMucmVxdWlyZXNUYWxsVmlld189dHJ1ZTtyZXR1cm47fX0KLVBvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS50ZXh0Q29udGVudD0nJztjb25zdCBtZXN2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtbXVsdGktZXZlbnQtc3ViLXZpZXcnKTttZXN2LnNlbGVjdGlvbj1zZWxlY3Rpb247UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLmFwcGVuZENoaWxkKG1lc3YpO2NvbnN0IHJlbGF0ZWRFdmVudHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1yZWxhdGVkLWV2ZW50cycpO3JlbGF0ZWRFdmVudHMuc2V0UmVsYXRlZEV2ZW50cyhzZWxlY3Rpb24pO2lmKHJlbGF0ZWRFdmVudHMuaGFzUmVsYXRlZEV2ZW50cygpKXtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuYXBwZW5kQ2hpbGQocmVsYXRlZEV2ZW50cyk7fX0sZ2V0IHJlcXVpcmVzVGFsbFZpZXcoKXtpZih0aGlzLiQuY29udGVudC5jaGlsZHJlbi5sZW5ndGg9PT0wKXJldHVybiBmYWxzZTtjb25zdCBjaGlsZFRhZ05hbWU9dGhpcy4kLmNvbnRlbnQuY2hpbGRyZW5bMF0udGFnTmFtZTtpZihjaGlsZFRhZ05hbWU9PT0nVFItVUktQS1NVUxUSS1FVkVOVC1TVUItVklFVycpe3JldHVybiBmYWxzZTt9Ci1yZXR1cm4gdHJ1ZTt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLW11bHRpLXRocmVhZC1zbGljZS1zdWItdmlldycsdHIubW9kZWwuVGhyZWFkU2xpY2Use211bHRpOnRydWUsdGl0bGU6J1NsaWNlcycsfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLW11bHRpLXRocmVhZC10aW1lLXNsaWNlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10scmVhZHkoKXt0aGlzLiQuY29udGVudC5ldmVudHNIYXZlU3ViUm93cz1mYWxzZTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuJC5jb250ZW50LnNldFNlbGVjdGlvbldpdGhvdXRFcnJvckNoZWNrcyhzZWxlY3Rpb24pO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtbXVsdGktdGhyZWFkLXRpbWUtc2xpY2Utc3ViLXZpZXcnLHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSx7bXVsdGk6dHJ1ZSx0aXRsZTonVGhyZWFkIFRpbWVzbGljZXMnLH0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS11c2VyLWV4cGVjdGF0aW9uLXJlbGF0ZWQtc2FtcGxlcy10YWJsZScscmVhZHkoKXt0aGlzLnNhbXBsZXNfPVtdO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t0aXRsZTonRXZlbnQocyknLHZhbHVlKHJvdyl7Y29uc3QgdHlwZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTt0eXBlRWwuaW5uZXJUZXh0PXJvdy50eXBlO2lmKHJvdy50b29sdGlwKXt0eXBlRWwudGl0bGU9cm93LnRvb2x0aXA7fQotcmV0dXJuIHR5cGVFbDt9LHdpZHRoOicxNTBweCd9LHt0aXRsZTonTGluaycsd2lkdGg6JzEwMCUnLHZhbHVlKHJvdyl7Y29uc3QgbGlua0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2lmKHJvdy5uYW1lKXtsaW5rRWwuc2V0U2VsZWN0aW9uQW5kQ29udGVudChyb3cuc2VsZWN0aW9uLHJvdy5uYW1lKTt9ZWxzZXtsaW5rRWwuc2VsZWN0aW9uPXJvdy5zZWxlY3Rpb247fQotcmV0dXJuIGxpbmtFbDt9fV07fSxoYXNSZWxhdGVkU2FtcGxlcygpe3JldHVybih0aGlzLnNhbXBsZXNfJiZ0aGlzLnNhbXBsZXNfLmxlbmd0aD4wKTt9LHNldCBzZWxlY3Rpb24oZXZlbnRTZXQpe3RoaXMuc2FtcGxlc189W107Y29uc3Qgc2FtcGxlcz1uZXcgdHIubW9kZWwuRXZlbnRTZXQ7ZXZlbnRTZXQuZm9yRWFjaChmdW5jdGlvbih1ZSl7c2FtcGxlcy5hZGRFdmVudFNldCh1ZS5hc3NvY2lhdGVkU2FtcGxlcyk7fS5iaW5kKHRoaXMpKTtpZihzYW1wbGVzLmxlbmd0aD4wKXt0aGlzLnNhbXBsZXNfLnB1c2goe3R5cGU6J092ZXJsYXBwaW5nIHNhbXBsZXMnLHRvb2x0aXA6J0FsbCBzYW1wbGVzIG92ZXJsYXBwaW5nIHRoZSBzZWxlY3RlZCB1c2VyIGV4cGVjdGF0aW9uKHMpLicsc2VsZWN0aW9uOnNhbXBsZXN9KTt9Ci10aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlQ29udGVudHNfKCl7Y29uc3QgdGFibGU9dGhpcy4kLnRhYmxlO2lmKHRoaXMuc2FtcGxlc18mJnRoaXMuc2FtcGxlc18ubGVuZ3RoPjApe3RhYmxlLnRhYmxlUm93cz10aGlzLnNhbXBsZXNfLnNsaWNlKCk7fWVsc2V7dGFibGUudGFibGVSb3dzPVtdO30KLXRhYmxlLnJlYnVpbGQoKTt9fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLW11bHRpLWludGVyYWN0aW9uLXJlY29yZC1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGNyZWF0ZWQoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjt0aGlzLiQucmVhbFZpZXcuc2V0U2VsZWN0aW9uV2l0aG91dEVycm9yQ2hlY2tzKHNlbGVjdGlvbik7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz1zZWxlY3Rpb247dGhpcy4kLnJlbGF0ZWRTYW1wbGVzLnNlbGVjdGlvbj1zZWxlY3Rpb247aWYodGhpcy4kLnJlbGF0ZWRTYW1wbGVzLmhhc1JlbGF0ZWRTYW1wbGVzKCkpe3RoaXMuJC5ldmVudHMuc3R5bGUuZGlzcGxheT0nJzt9ZWxzZXt0aGlzLiQuZXZlbnRzLnN0eWxlLmRpc3BsYXk9J25vbmUnO319LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0aW9uXzt9LGdldCByZWxhdGVkRXZlbnRzVG9IaWdobGlnaHQoKXtpZighdGhpcy5jdXJyZW50U2VsZWN0aW9uXylyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fLmZvckVhY2goZnVuY3Rpb24oaXIpe2lyLmFzc29jaWF0ZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7c2VsZWN0aW9uLnB1c2goZXZlbnQpO30pO30pO3JldHVybiBzZWxlY3Rpb247fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1zaW5nbGUtdXNlci1leHBlY3RhdGlvbi1zdWItdmlldycsdHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLHttdWx0aTp0cnVlLHRpdGxlOidVc2VyIEV4cGVjdGF0aW9ucycsfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLXNpbmdsZS1hc3luYy1zbGljZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe2lmKHNlbGVjdGlvbi5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoJ09ubHkgc3VwcG9ydHMgc2luZ2xlIHNsaWNlcycpO30KLXRoaXMuJC5jb250ZW50LnNldFNlbGVjdGlvbldpdGhvdXRFcnJvckNoZWNrcyhzZWxlY3Rpb24pO3RoaXMuJC5yZWxhdGVkRXZlbnRzLnNldFJlbGF0ZWRFdmVudHMoc2VsZWN0aW9uKTtpZih0aGlzLiQucmVsYXRlZEV2ZW50cy5oYXNSZWxhdGVkRXZlbnRzKCkpe3RoaXMuJC5yZWxhdGVkRXZlbnRzLnN0eWxlLmRpc3BsYXk9Jyc7fWVsc2V7dGhpcy4kLnJlbGF0ZWRFdmVudHMuc3R5bGUuZGlzcGxheT0nbm9uZSc7fX0sZ2V0RXZlbnRSb3dzXyhldmVudCl7Y29uc3Qgcm93cz10aGlzLl9fcHJvdG9fXy5fX3Byb3RvX18uZ2V0RXZlbnRSb3dzXyhldmVudCk7cm93cy5zcGxpY2UoMCwwLHtuYW1lOidJRCcsdmFsdWU6ZXZlbnQuaWR9KTtyZXR1cm4gcm93czt9LGdldCByZWxhdGVkRXZlbnRzVG9IaWdobGlnaHQoKXtpZighdGhpcy5jdXJyZW50U2VsZWN0aW9uXylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0ci5iLmdldE9ubHlFbGVtZW50KHRoaXMuY3VycmVudFNlbGVjdGlvbl8pLmFzc29jaWF0ZWRFdmVudHM7fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1zaW5nbGUtYXN5bmMtc2xpY2Utc3ViLXZpZXcnLHRyLm1vZGVsLkFzeW5jU2xpY2Use211bHRpOmZhbHNlLHRpdGxlOidBc3luYyBTbGljZScsfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLXNpbmdsZS1jcHUtc2xpY2Utc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxjcmVhdGVkKCl7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz11bmRlZmluZWQ7fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGlvbl87fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7Y29uc3QgY3B1U2xpY2U9dHIuYi5nZXRPbmx5RWxlbWVudChzZWxlY3Rpb24pO2lmKCEoY3B1U2xpY2UgaW5zdGFuY2VvZiB0ci5tb2RlbC5DcHVTbGljZSkpe3Rocm93IG5ldyBFcnJvcignT25seSBzdXBwb3J0cyB0aHJlYWQgdGltZSBzbGljZXMnKTt9Ci10aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjtjb25zdCB0aHJlYWQ9Y3B1U2xpY2UudGhyZWFkVGhhdFdhc1J1bm5pbmc7Y29uc3Qgcm9vdD1Qb2x5bWVyLmRvbSh0aGlzLnJvb3QpO2lmKHRocmVhZCl7UG9seW1lci5kb20ocm9vdC5xdWVyeVNlbGVjdG9yKCcjcHJvY2Vzcy1uYW1lJykpLnRleHRDb250ZW50PXRocmVhZC5wYXJlbnQudXNlckZyaWVuZGx5TmFtZTtQb2x5bWVyLmRvbShyb290LnF1ZXJ5U2VsZWN0b3IoJyN0aHJlYWQtbmFtZScpKS50ZXh0Q29udGVudD10aHJlYWQudXNlckZyaWVuZGx5TmFtZTt9ZWxzZXtyb290LnF1ZXJ5U2VsZWN0b3IoJyNwcm9jZXNzLW5hbWUnKS5wYXJlbnRFbGVtZW50LnN0eWxlLmRpc3BsYXk9J25vbmUnO1BvbHltZXIuZG9tKHJvb3QucXVlcnlTZWxlY3RvcignI3RocmVhZC1uYW1lJykpLnRleHRDb250ZW50PWNwdVNsaWNlLnRpdGxlO30KLXJvb3QucXVlcnlTZWxlY3RvcignI3N0YXJ0Jykuc2V0VmFsdWVBbmRVbml0KGNwdVNsaWNlLnN0YXJ0LHRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Ncyk7cm9vdC5xdWVyeVNlbGVjdG9yKCcjZHVyYXRpb24nKS5zZXRWYWx1ZUFuZFVuaXQoY3B1U2xpY2UuZHVyYXRpb24sdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zKTtjb25zdCBydW5uaW5nVGhyZWFkRWw9cm9vdC5xdWVyeVNlbGVjdG9yKCcjcnVubmluZy10aHJlYWQnKTtjb25zdCB0aW1lU2xpY2U9Y3B1U2xpY2UuZ2V0QXNzb2NpYXRlZFRpbWVzbGljZSgpO2lmKCF0aW1lU2xpY2Upe3J1bm5pbmdUaHJlYWRFbC5wYXJlbnRFbGVtZW50LnN0eWxlLmRpc3BsYXk9J25vbmUnO31lbHNle2NvbnN0IHRocmVhZExpbms9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7dGhyZWFkTGluay5zZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KHRpbWVTbGljZSk7UG9seW1lci5kb20odGhyZWFkTGluaykudGV4dENvbnRlbnQ9J0NsaWNrIHRvIHNlbGVjdCc7cnVubmluZ1RocmVhZEVsLnBhcmVudEVsZW1lbnQuc3R5bGUuZGlzcGxheT0nJztQb2x5bWVyLmRvbShydW5uaW5nVGhyZWFkRWwpLnRleHRDb250ZW50PScnO1BvbHltZXIuZG9tKHJ1bm5pbmdUaHJlYWRFbCkuYXBwZW5kQ2hpbGQodGhyZWFkTGluayk7fQotcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXJncycpLm9iamVjdD1jcHVTbGljZS5hcmdzO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtc2luZ2xlLWNwdS1zbGljZS1zdWItdmlldycsdHIubW9kZWwuQ3B1U2xpY2Use211bHRpOmZhbHNlLHRpdGxlOidDUFUgU2xpY2UnLH0pOyd1c2Ugc3RyaWN0JztmdW5jdGlvbiBjcmVhdGVBbmFseXNpc0xpbmtUbyhldmVudCl7Y29uc3QgbGlua0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2xpbmtFbC5zZXRTZWxlY3Rpb25BbmRDb250ZW50KG5ldyB0ci5tb2RlbC5FdmVudFNldChldmVudCksZXZlbnQudXNlckZyaWVuZGx5TmFtZSk7cmV0dXJuIGxpbmtFbDt9Ci1Qb2x5bWVyKHtpczondHItdWktYS1zaW5nbGUtZmxvdy1ldmVudC1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGxpc3RlbmVyczp7J3NpbmdsZUV2ZW50U3ViVmlldy5jdXN0b21pemUtcm93cyc6J29uQ3VzdG9taXplUm93c18nfSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz1zZWxlY3Rpb247dGhpcy4kLnNpbmdsZUV2ZW50U3ViVmlldy5zZXRTZWxlY3Rpb25XaXRob3V0RXJyb3JDaGVja3Moc2VsZWN0aW9uKTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0aW9uXzt9LG9uQ3VzdG9taXplUm93c18oZSl7Y29uc3QgZXZlbnQ9dHIuYi5nZXRPbmx5RWxlbWVudCh0aGlzLmN1cnJlbnRTZWxlY3Rpb25fKTtjb25zdCByb3dzPWUucm93cztyb3dzLnVuc2hpZnQoe25hbWU6J0lEJyx2YWx1ZTpldmVudC5pZH0pO3Jvd3MucHVzaCh7bmFtZTonRnJvbScsdmFsdWU6Y3JlYXRlQW5hbHlzaXNMaW5rVG8oZXZlbnQuc3RhcnRTbGljZSl9KTtyb3dzLnB1c2goe25hbWU6J1RvJyx2YWx1ZTpjcmVhdGVBbmFseXNpc0xpbmtUbyhldmVudC5lbmRTbGljZSl9KTt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLXNpbmdsZS1mbG93LWV2ZW50LXN1Yi12aWV3Jyx0ci5tb2RlbC5GbG93RXZlbnQse211bHRpOmZhbHNlLHRpdGxlOidGbG93IEV2ZW50Jyx9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtc2luZ2xlLWZyYW1lLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10scmVhZHkoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjt0aGlzLiQuYXN2LnNlbGVjdGlvbj10ci5iLmdldE9ubHlFbGVtZW50KHNlbGVjdGlvbikuYXNzb2NpYXRlZEFsZXJ0czt9LGdldCByZWxhdGVkRXZlbnRzVG9IaWdobGlnaHQoKXtpZighdGhpcy5jdXJyZW50U2VsZWN0aW9uXylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0ci5iLmdldE9ubHlFbGVtZW50KHRoaXMuY3VycmVudFNlbGVjdGlvbl8pLmFzc29jaWF0ZWRFdmVudHM7fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1zaW5nbGUtZnJhbWUtc3ViLXZpZXcnLHRyLm1vZGVsLkZyYW1lLHttdWx0aTpmYWxzZSx0aXRsZTonRnJhbWUnLH0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1zaW5nbGUtaW5zdGFudC1ldmVudC1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGNyZWF0ZWQoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkudGV4dENvbnRlbnQ9Jyc7Y29uc3QgcmVhbFZpZXc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1zaW5nbGUtZXZlbnQtc3ViLXZpZXcnKTtyZWFsVmlldy5zZXRTZWxlY3Rpb25XaXRob3V0RXJyb3JDaGVja3Moc2VsZWN0aW9uKTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuYXBwZW5kQ2hpbGQocmVhbFZpZXcpO3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtc2luZ2xlLWluc3RhbnQtZXZlbnQtc3ViLXZpZXcnLHRyLm1vZGVsLkluc3RhbnRFdmVudCx7bXVsdGk6ZmFsc2UsdGl0bGU6J0luc3RhbnQgRXZlbnQnLH0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1tdWx0aS1pbnN0YW50LWV2ZW50LXN1Yi12aWV3Jyx0ci5tb2RlbC5JbnN0YW50RXZlbnQse211bHRpOnRydWUsdGl0bGU6J0luc3RhbnQgRXZlbnRzJyx9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe2NvbnN0IE9iamVjdEluc3RhbmNlVmlldz10ci51aS5iLmRlZmluZSgnb2JqZWN0LWluc3RhbmNlLXZpZXcnKTtPYmplY3RJbnN0YW5jZVZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186SFRNTERpdkVsZW1lbnQucHJvdG90eXBlLGRlY29yYXRlKCl7dGhpcy5vYmplY3RJbnN0YW5jZV89dW5kZWZpbmVkO30sZ2V0IHJlcXVpcmVzVGFsbFZpZXcoKXtyZXR1cm4gdHJ1ZTt9LHNldCBtb2RlbEV2ZW50KG9iail7dGhpcy5vYmplY3RJbnN0YW5jZT1vYmo7fSxnZXQgbW9kZWxFdmVudCgpe3JldHVybiB0aGlzLm9iamVjdEluc3RhbmNlO30sZ2V0IG9iamVjdEluc3RhbmNlKCl7cmV0dXJuIHRoaXMub2JqZWN0SW5zdGFuY2VfO30sc2V0IG9iamVjdEluc3RhbmNlKGkpe3RoaXMub2JqZWN0SW5zdGFuY2VfPWk7dGhpcy51cGRhdGVDb250ZW50cygpO30sdXBkYXRlQ29udGVudHMoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO319O2NvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuVFlQRV9CQVNFRF9SRUdJU1RSWV9NT0RFKTtvcHRpb25zLm1hbmRhdG9yeUJhc2VDbGFzcz1PYmplY3RJbnN0YW5jZVZpZXc7b3B0aW9ucy5kZWZhdWx0TWV0YWRhdGE9e3Nob3dJblRyYWNrVmlldzp0cnVlfTt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoT2JqZWN0SW5zdGFuY2VWaWV3LG9wdGlvbnMpO3JldHVybntPYmplY3RJbnN0YW5jZVZpZXcsfTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtc2luZ2xlLW9iamVjdC1pbnN0YW5jZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGNyZWF0ZWQoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt9LGdldCByZXF1aXJlc1RhbGxWaWV3KCl7aWYodGhpcy4kLmNvbnRlbnQuY2hpbGRyZW4ubGVuZ3RoPT09MCl7cmV0dXJuIGZhbHNlO30KLWlmKHRoaXMuJC5jb250ZW50LmNoaWxkcmVuWzBdaW5zdGFuY2VvZgotdHIudWkuYW5hbHlzaXMuT2JqZWN0SW5zdGFuY2VWaWV3KXtyZXR1cm4gdGhpcy4kLmNvbnRlbnQuY2hpbGRyZW5bMF0ucmVxdWlyZXNUYWxsVmlldzt9fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGlvbl87fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7Y29uc3QgaW5zdGFuY2U9dHIuYi5nZXRPbmx5RWxlbWVudChzZWxlY3Rpb24pO2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiB0ci5tb2RlbC5PYmplY3RJbnN0YW5jZSkpe3Rocm93IG5ldyBFcnJvcignT25seSBzdXBwb3J0cyBvYmplY3QgaW5zdGFuY2VzJyk7fQotUG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLnRleHRDb250ZW50PScnO3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO2NvbnN0IHR5cGVJbmZvPXRyLnVpLmFuYWx5c2lzLk9iamVjdEluc3RhbmNlVmlldy5nZXRUeXBlSW5mbyhpbnN0YW5jZS5jYXRlZ29yeSxpbnN0YW5jZS50eXBlTmFtZSk7aWYodHlwZUluZm8pe2NvbnN0IGN1c3RvbVZpZXc9bmV3IHR5cGVJbmZvLmNvbnN0cnVjdG9yKCk7UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLmFwcGVuZENoaWxkKGN1c3RvbVZpZXcpO2N1c3RvbVZpZXcubW9kZWxFdmVudD1pbnN0YW5jZTt9ZWxzZXt0aGlzLmFwcGVuZEdlbmVyaWNBbmFseXNpc18oaW5zdGFuY2UpO319LGFwcGVuZEdlbmVyaWNBbmFseXNpc18oaW5zdGFuY2Upe2xldCBodG1sPScnO2h0bWwrPSc8ZGl2IGNsYXNzPSJ0aXRsZSI+JysKLWluc3RhbmNlLnR5cGVOYW1lKycgJysKLWluc3RhbmNlLmlkKyc8L2Rpdj5cbic7aHRtbCs9Jzx0YWJsZT4nO2h0bWwrPSc8dHI+JztodG1sKz0nPHRyPjx0ZD5jcmVhdGlvblRzOjwvdGQ+PHRkPicrCi1pbnN0YW5jZS5jcmVhdGlvblRzKyc8L3RkPjwvdHI+XG4nO2lmKGluc3RhbmNlLmRlbGV0aW9uVHMhPT1OdW1iZXIuTUFYX1ZBTFVFKXtodG1sKz0nPHRyPjx0ZD5kZWxldGlvblRzOjwvdGQ+PHRkPicrCi1pbnN0YW5jZS5kZWxldGlvblRzKyc8L3RkPjwvdHI+XG4nO31lbHNle2h0bWwrPSc8dHI+PHRkPmRlbGV0aW9uVHM6PC90ZD48dGQ+bm90IGRlbGV0ZWQ8L3RkPjwvdHI+XG4nO30KLWh0bWwrPSc8dHI+PHRkPnNuYXBzaG90czo8L3RkPjx0ZCBpZD0ic25hcHNob3RzIj48L3RkPjwvdHI+XG4nO2h0bWwrPSc8L3RhYmxlPic7UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLmlubmVySFRNTD1odG1sO2NvbnN0IHNuYXBzaG90c0VsPVBvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5xdWVyeVNlbGVjdG9yKCcjc25hcHNob3RzJyk7aW5zdGFuY2Uuc25hcHNob3RzLmZvckVhY2goZnVuY3Rpb24oc25hcHNob3Qpe2NvbnN0IHNuYXBzaG90TGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWFuYWx5c2lzLWxpbmsnKTtzbmFwc2hvdExpbmsuc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldChzbmFwc2hvdCk7UG9seW1lci5kb20oc25hcHNob3RzRWwpLmFwcGVuZENoaWxkKHNuYXBzaG90TGluayk7fSk7fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1zaW5nbGUtb2JqZWN0LWluc3RhbmNlLXN1Yi12aWV3Jyx0ci5tb2RlbC5PYmplY3RJbnN0YW5jZSx7bXVsdGk6ZmFsc2UsdGl0bGU6J09iamVjdCBJbnN0YW5jZScsfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLXNpbmdsZS1vYmplY3Qtc25hcHNob3Qtc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxjcmVhdGVkKCl7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz11bmRlZmluZWQ7fSxnZXQgcmVxdWlyZXNUYWxsVmlldygpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT09MCl7cmV0dXJuIGZhbHNlO30KLWlmKHRoaXMuY2hpbGRyZW5bMF1pbnN0YW5jZW9mIHRyLnVpLmFuYWx5c2lzLk9iamVjdFNuYXBzaG90Vmlldyl7cmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0ucmVxdWlyZXNUYWxsVmlldzt9fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGlvbl87fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7Y29uc3Qgc25hcHNob3Q9dHIuYi5nZXRPbmx5RWxlbWVudChzZWxlY3Rpb24pO2lmKCEoc25hcHNob3QgaW5zdGFuY2VvZiB0ci5tb2RlbC5PYmplY3RTbmFwc2hvdCkpe3Rocm93IG5ldyBFcnJvcignT25seSBzdXBwb3J0cyBvYmplY3QgaW5zdGFuY2VzJyk7fQotUG9seW1lci5kb20odGhpcykudGV4dENvbnRlbnQ9Jyc7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz1zZWxlY3Rpb247Y29uc3QgdHlwZUluZm89dHIudWkuYW5hbHlzaXMuT2JqZWN0U25hcHNob3RWaWV3LmdldFR5cGVJbmZvKHNuYXBzaG90Lm9iamVjdEluc3RhbmNlLmNhdGVnb3J5LHNuYXBzaG90Lm9iamVjdEluc3RhbmNlLnR5cGVOYW1lKTtpZih0eXBlSW5mbyl7Y29uc3QgY3VzdG9tVmlldz1uZXcgdHlwZUluZm8uY29uc3RydWN0b3IoKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChjdXN0b21WaWV3KTtjdXN0b21WaWV3Lm1vZGVsRXZlbnQ9c25hcHNob3Q7fWVsc2V7dGhpcy5hcHBlbmRHZW5lcmljQW5hbHlzaXNfKHNuYXBzaG90KTt9fSxhcHBlbmRHZW5lcmljQW5hbHlzaXNfKHNuYXBzaG90KXtjb25zdCBpbnN0YW5jZT1zbmFwc2hvdC5vYmplY3RJbnN0YW5jZTtQb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudD0nJztjb25zdCB0aXRsZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1BvbHltZXIuZG9tKHRpdGxlRWwpLmNsYXNzTGlzdC5hZGQoJ3RpdGxlJyk7UG9seW1lci5kb20odGl0bGVFbCkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1NuYXBzaG90IG9mICcpKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aXRsZUVsKTtjb25zdCBpbnN0YW5jZUxpbmtFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWFuYWx5c2lzLWxpbmsnKTtpbnN0YW5jZUxpbmtFbC5zZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KGluc3RhbmNlKTtQb2x5bWVyLmRvbSh0aXRsZUVsKS5hcHBlbmRDaGlsZChpbnN0YW5jZUxpbmtFbCk7UG9seW1lci5kb20odGl0bGVFbCkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyBAICcpKTtQb2x5bWVyLmRvbSh0aXRsZUVsKS5hcHBlbmRDaGlsZCh0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4oc25hcHNob3QudHMse3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLG93bmVyRG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50LGlubGluZTp0cnVlLH0pKTtjb25zdCB0YWJsZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGFibGVFbCk7Y29uc3Qgcm93RWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTtQb2x5bWVyLmRvbSh0YWJsZUVsKS5hcHBlbmRDaGlsZChyb3dFbCk7Y29uc3QgbGFiZWxFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpO1BvbHltZXIuZG9tKGxhYmVsRWwpLnRleHRDb250ZW50PSdhcmdzOic7UG9seW1lci5kb20ocm93RWwpLmFwcGVuZENoaWxkKGxhYmVsRWwpO2NvbnN0IGFyZ3NFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpO2FyZ3NFbC5pZD0nYXJncyc7UG9seW1lci5kb20ocm93RWwpLmFwcGVuZENoaWxkKGFyZ3NFbCk7Y29uc3Qgb2JqZWN0Vmlld0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtZ2VuZXJpYy1vYmplY3QtdmlldycpO29iamVjdFZpZXdFbC5vYmplY3Q9c25hcHNob3QuYXJncztQb2x5bWVyLmRvbShhcmdzRWwpLmFwcGVuZENoaWxkKG9iamVjdFZpZXdFbCk7fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1zaW5nbGUtb2JqZWN0LXNuYXBzaG90LXN1Yi12aWV3Jyx0ci5tb2RlbC5PYmplY3RTbmFwc2hvdCx7bXVsdGk6ZmFsc2UsdGl0bGU6J09iamVjdCBTbmFwc2hvdCcsfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLXBvd2VyLXNhbXBsZS10YWJsZScscmVhZHkoKXt0aGlzLiQudGFibGUudGFibGVDb2x1bW5zPVt7dGl0bGU6J1RpbWUnLHdpZHRoOicxMDBweCcsdmFsdWUocm93KXtyZXR1cm4gdHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKHJvdy5zdGFydCx7dW5pdDp0ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXN9KTt9fSx7dGl0bGU6J1Bvd2VyJyx3aWR0aDonMTAwJScsdmFsdWUocm93KXtyZXR1cm4gdHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKHJvdy5wb3dlckluVyx7dW5pdDp0ci5iLlVuaXQuYnlOYW1lLnBvd2VySW5XYXR0c30pO319XTt0aGlzLnNhbXBsZT11bmRlZmluZWQ7fSxnZXQgc2FtcGxlKCl7cmV0dXJuIHRoaXMuc2FtcGxlXzt9LHNldCBzYW1wbGUoc2FtcGxlKXt0aGlzLnNhbXBsZV89c2FtcGxlO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSx1cGRhdGVDb250ZW50c18oKXtpZih0aGlzLnNhbXBsZT09PXVuZGVmaW5lZCl7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1bXTt9ZWxzZXt0aGlzLiQudGFibGUudGFibGVSb3dzPVt0aGlzLnNhbXBsZV07fQotdGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLXNpbmdsZS1wb3dlci1zYW1wbGUtc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxyZWFkeSgpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSx1cGRhdGVDb250ZW50c18oKXtpZih0aGlzLnNlbGVjdGlvbi5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXNzIG11bHRpcGxlIHNhbXBsZXMgdG8gc2FtcGxlIHRhYmxlLicpO30KLXRoaXMuJC5zYW1wbGVzVGFibGUuc2FtcGxlPXRyLmIuZ2V0T25seUVsZW1lbnQodGhpcy5zZWxlY3Rpb24pO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtc2luZ2xlLXBvd2VyLXNhbXBsZS1zdWItdmlldycsdHIubW9kZWwuUG93ZXJTYW1wbGUse211bHRpOmZhbHNlLHRpdGxlOidQb3dlciBTYW1wbGUnLH0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1zaW5nbGUtc2FtcGxlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sY3JlYXRlZCgpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO30scmVhZHkoKXt0aGlzLiQuY29udGVudC50YWJsZUNvbHVtbnM9W3t0aXRsZTonJyx2YWx1ZTpyb3c9PnJvdy50aXRsZSx3aWR0aDonMTAwcHgnfSx7dGl0bGU6JycsdmFsdWU6cm93PT5yb3cudmFsdWUsd2lkdGg6JzEwMCUnfV07dGhpcy4kLmNvbnRlbnQuc2hvd0hlYWRlcj1mYWxzZTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjtpZih0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPT09dW5kZWZpbmVkKXt0aGlzLiQuY29udGVudC50YWJsZVJvd3M9W107cmV0dXJuO30KLWNvbnN0IHNhbXBsZT10ci5iLmdldE9ubHlFbGVtZW50KHRoaXMuY3VycmVudFNlbGVjdGlvbl8pO2NvbnN0IHRhYmxlPXRoaXMuJC5jb250ZW50O2NvbnN0IHJvd3M9W107cm93cy5wdXNoKHt0aXRsZTonVGl0bGUnLHZhbHVlOnNhbXBsZS50aXRsZX0pO3Jvd3MucHVzaCh7dGl0bGU6J1NhbXBsZSB0aW1lJyx2YWx1ZTp0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4oc2FtcGxlLnN0YXJ0LHt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Ncyxvd25lckRvY3VtZW50OnRoaXMub3duZXJEb2N1bWVudH0pfSk7Y29uc3QgY2FsbFN0YWNrVGFibGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLXRhYmxlJyk7Y2FsbFN0YWNrVGFibGVFbC50YWJsZVJvd3M9c2FtcGxlLmdldE5vZGVzQXNBcnJheSgpLnJldmVyc2UoKTtjYWxsU3RhY2tUYWJsZUVsLnRhYmxlQ29sdW1ucz1be3RpdGxlOidmdW5jdGlvbiBuYW1lJyx2YWx1ZTpyb3c9PnJvdy5mdW5jdGlvbk5hbWV8fCcoYW5vbnltb3VzIGZ1bmN0aW9uKSd9LHt0aXRsZTonbG9jYXRpb24nLHZhbHVlOnJvdz0+cm93LnVybH1dO2NhbGxTdGFja1RhYmxlRWwucmVidWlsZCgpO3Jvd3MucHVzaCh7dGl0bGU6J0NhbGwgc3RhY2snLHZhbHVlOmNhbGxTdGFja1RhYmxlRWx9KTt0YWJsZS50YWJsZVJvd3M9cm93czt0YWJsZS5yZWJ1aWxkKCk7fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1zaW5nbGUtc2FtcGxlLXN1Yi12aWV3Jyx0ci5tb2RlbC5TYW1wbGUse211bHRpOmZhbHNlLHRpdGxlOidTYW1wbGUnLH0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1zaW5nbGUtdGhyZWFkLXNsaWNlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLiQuY29udGVudC5zZWxlY3Rpb247fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uPXNlbGVjdGlvbjt0aGlzLiQucmVsYXRlZEV2ZW50cy5zZXRSZWxhdGVkRXZlbnRzKHNlbGVjdGlvbik7aWYodGhpcy4kLnJlbGF0ZWRFdmVudHMuaGFzUmVsYXRlZEV2ZW50cygpKXt0aGlzLiQucmVsYXRlZEV2ZW50cy5zdHlsZS5kaXNwbGF5PScnO31lbHNle3RoaXMuJC5yZWxhdGVkRXZlbnRzLnN0eWxlLmRpc3BsYXk9J25vbmUnO319fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLXNpbmdsZS10aHJlYWQtc2xpY2Utc3ViLXZpZXcnLHRyLm1vZGVsLlRocmVhZFNsaWNlLHttdWx0aTpmYWxzZSx0aXRsZTonU2xpY2UnLH0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1zaW5nbGUtdGhyZWFkLXRpbWUtc2xpY2Utc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxjcmVhdGVkKCl7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz11bmRlZmluZWQ7fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGlvbl87fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7Y29uc3QgdGltZVNsaWNlPXRyLmIuZ2V0T25seUVsZW1lbnQoc2VsZWN0aW9uKTtpZighKHRpbWVTbGljZSBpbnN0YW5jZW9mIHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSkpe3Rocm93IG5ldyBFcnJvcignT25seSBzdXBwb3J0cyB0aHJlYWQgdGltZSBzbGljZXMnKTt9Ci10aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjtjb25zdCB0aHJlYWQ9dGltZVNsaWNlLnRocmVhZDtjb25zdCByb290PVBvbHltZXIuZG9tKHRoaXMucm9vdCk7UG9seW1lci5kb20ocm9vdC5xdWVyeVNlbGVjdG9yKCcjc3RhdGUnKSkudGV4dENvbnRlbnQ9dGltZVNsaWNlLnRpdGxlO2NvbnN0IHN0YXRlQ29sb3I9dHIuYi5Db2xvclNjaGVtZS5jb2xvcnNBc1N0cmluZ3NbdGltZVNsaWNlLmNvbG9ySWRdO3Jvb3QucXVlcnlTZWxlY3RvcignI3N0YXRlJykuc3R5bGUuYmFja2dyb3VuZENvbG9yPXN0YXRlQ29sb3I7UG9seW1lci5kb20ocm9vdC5xdWVyeVNlbGVjdG9yKCcjcHJvY2Vzcy1uYW1lJykpLnRleHRDb250ZW50PXRocmVhZC5wYXJlbnQudXNlckZyaWVuZGx5TmFtZTtQb2x5bWVyLmRvbShyb290LnF1ZXJ5U2VsZWN0b3IoJyN0aHJlYWQtbmFtZScpKS50ZXh0Q29udGVudD10aHJlYWQudXNlckZyaWVuZGx5TmFtZTtyb290LnF1ZXJ5U2VsZWN0b3IoJyNzdGFydCcpLnNldFZhbHVlQW5kVW5pdCh0aW1lU2xpY2Uuc3RhcnQsdHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zKTtyb290LnF1ZXJ5U2VsZWN0b3IoJyNkdXJhdGlvbicpLnNldFZhbHVlQW5kVW5pdCh0aW1lU2xpY2UuZHVyYXRpb24sdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zKTtjb25zdCBvbkNwdUVsPXJvb3QucXVlcnlTZWxlY3RvcignI29uLWNwdScpO1BvbHltZXIuZG9tKG9uQ3B1RWwpLnRleHRDb250ZW50PScnO2NvbnN0IHJ1bm5pbmdJbnN0ZWFkRWw9cm9vdC5xdWVyeVNlbGVjdG9yKCcjcnVubmluZy1pbnN0ZWFkJyk7aWYodGltZVNsaWNlLmNwdU9uV2hpY2hUaHJlYWRXYXNSdW5uaW5nKXtQb2x5bWVyLmRvbShydW5uaW5nSW5zdGVhZEVsLnBhcmVudEVsZW1lbnQpLnJlbW92ZUNoaWxkKHJ1bm5pbmdJbnN0ZWFkRWwpO2NvbnN0IGNwdUxpbms9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7Y3B1TGluay5zZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KHRpbWVTbGljZS5nZXRBc3NvY2lhdGVkQ3B1U2xpY2UoKSk7UG9seW1lci5kb20oY3B1TGluaykudGV4dENvbnRlbnQ9dGltZVNsaWNlLmNwdU9uV2hpY2hUaHJlYWRXYXNSdW5uaW5nLnVzZXJGcmllbmRseU5hbWU7UG9seW1lci5kb20ob25DcHVFbCkuYXBwZW5kQ2hpbGQoY3B1TGluayk7fWVsc2V7UG9seW1lci5kb20ob25DcHVFbC5wYXJlbnRFbGVtZW50KS5yZW1vdmVDaGlsZChvbkNwdUVsKTtjb25zdCBjcHVTbGljZVRoYXRUb29rQ3B1PXRpbWVTbGljZS5nZXRDcHVTbGljZVRoYXRUb29rQ3B1KCk7aWYoY3B1U2xpY2VUaGF0VG9va0NwdSl7Y29uc3QgY3B1TGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWFuYWx5c2lzLWxpbmsnKTtjcHVMaW5rLnNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoY3B1U2xpY2VUaGF0VG9va0NwdSk7aWYoY3B1U2xpY2VUaGF0VG9va0NwdS50aHJlYWQpe1BvbHltZXIuZG9tKGNwdUxpbmspLnRleHRDb250ZW50PWNwdVNsaWNlVGhhdFRvb2tDcHUudGhyZWFkLnVzZXJGcmllbmRseU5hbWU7fWVsc2V7UG9seW1lci5kb20oY3B1TGluaykudGV4dENvbnRlbnQ9Y3B1U2xpY2VUaGF0VG9va0NwdS50aXRsZTt9Ci1Qb2x5bWVyLmRvbShydW5uaW5nSW5zdGVhZEVsKS5hcHBlbmRDaGlsZChjcHVMaW5rKTt9ZWxzZXtQb2x5bWVyLmRvbShydW5uaW5nSW5zdGVhZEVsLnBhcmVudEVsZW1lbnQpLnJlbW92ZUNoaWxkKHJ1bm5pbmdJbnN0ZWFkRWwpO319Ci1jb25zdCBhcmdzRWw9cm9vdC5xdWVyeVNlbGVjdG9yKCcjYXJncycpO2lmKE9iamVjdC5rZXlzKHRpbWVTbGljZS5hcmdzKS5sZW5ndGg+MCl7Y29uc3QgYXJnc1ZpZXc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1nZW5lcmljLW9iamVjdC12aWV3Jyk7YXJnc1ZpZXcub2JqZWN0PXRpbWVTbGljZS5hcmdzO2FyZ3NFbC5wYXJlbnRFbGVtZW50LnN0eWxlLmRpc3BsYXk9Jyc7UG9seW1lci5kb20oYXJnc0VsKS50ZXh0Q29udGVudD0nJztQb2x5bWVyLmRvbShhcmdzRWwpLmFwcGVuZENoaWxkKGFyZ3NWaWV3KTt9ZWxzZXthcmdzRWwucGFyZW50RWxlbWVudC5zdHlsZS5kaXNwbGF5PSdub25lJzt9fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1zaW5nbGUtdGhyZWFkLXRpbWUtc2xpY2Utc3ViLXZpZXcnLHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSx7bXVsdGk6ZmFsc2UsdGl0bGU6J1RocmVhZCBUaW1lc2xpY2UnLH0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1zaW5nbGUtdXNlci1leHBlY3RhdGlvbi1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGNyZWF0ZWQoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLiQucmVhbFZpZXcuYWRkRXZlbnRMaXN0ZW5lcignY3VzdG9taXplLXJvd3MnLHRoaXMub25DdXN0b21pemVSb3dzXy5iaW5kKHRoaXMpKTt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjt0aGlzLiQucmVhbFZpZXcuc2V0U2VsZWN0aW9uV2l0aG91dEVycm9yQ2hlY2tzKHNlbGVjdGlvbik7dGhpcy4kLnJlbGF0ZWRTYW1wbGVzLnNlbGVjdGlvbj1zZWxlY3Rpb247aWYodGhpcy4kLnJlbGF0ZWRTYW1wbGVzLmhhc1JlbGF0ZWRTYW1wbGVzKCkpe3RoaXMuJC5ldmVudHMuc3R5bGUuZGlzcGxheT0nJzt9ZWxzZXt0aGlzLiQuZXZlbnRzLnN0eWxlLmRpc3BsYXk9J25vbmUnO319LGdldCByZWxhdGVkRXZlbnRzVG9IaWdobGlnaHQoKXtpZighdGhpcy5jdXJyZW50U2VsZWN0aW9uXylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0ci5iLmdldE9ubHlFbGVtZW50KHRoaXMuY3VycmVudFNlbGVjdGlvbl8pLmFzc29jaWF0ZWRFdmVudHM7fSxvbkN1c3RvbWl6ZVJvd3NfKGV2ZW50KXtjb25zdCB1ZT10ci5iLmdldE9ubHlFbGVtZW50KHRoaXMuc2VsZWN0aW9uKTtpZih1ZS5yYXdDcHVNcyl7ZXZlbnQucm93cy5wdXNoKHtuYW1lOidUb3RhbCBDUFUnLHZhbHVlOnRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbih1ZS50b3RhbENwdU1zLHt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc30pfSk7fX19KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtc2luZ2xlLXVzZXItZXhwZWN0YXRpb24tc3ViLXZpZXcnLHRyLm1vZGVsLnVtLlVzZXJFeHBlY3RhdGlvbix7bXVsdGk6ZmFsc2UsdGl0bGU6J1VzZXIgRXhwZWN0YXRpb24nLH0pOyd1c2Ugc3RyaWN0JzsoZnVuY3Rpb24oKXtjb25zdCBFdmVudFJlZ2lzdHJ5PXRyLm1vZGVsLkV2ZW50UmVnaXN0cnk7ZnVuY3Rpb24gZ2V0VGFiU3RyaXBMYWJlbChudW1FdmVudHMpe2lmKG51bUV2ZW50cz09PTApe3JldHVybidOb3RoaW5nIHNlbGVjdGVkLiBUYXAgc3R1ZmYuJzt9ZWxzZSBpZihudW1FdmVudHM9PT0xKXtyZXR1cm4nMSBpdGVtIHNlbGVjdGVkLic7fQotcmV0dXJuIG51bUV2ZW50cysnIGl0ZW1zIHNlbGVjdGVkLic7fQotZnVuY3Rpb24gY3JlYXRlU3ViVmlldyhzdWJWaWV3VHlwZUluZm8sc2VsZWN0aW9uKXtsZXQgdGFnTmFtZTtpZihzZWxlY3Rpb24ubGVuZ3RoPT09MSl7dGFnTmFtZT1zdWJWaWV3VHlwZUluZm8uc2luZ2xlVGFnTmFtZTt9ZWxzZXt0YWdOYW1lPXN1YlZpZXdUeXBlSW5mby5tdWx0aVRhZ05hbWU7fQotaWYodGFnTmFtZT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdObyB2aWV3IHJlZ2lzdGVyZWQgZm9yICcrCi1zdWJWaWV3VHlwZUluZm8uZXZlbnRDb25zdHJ1Y3Rvci5uYW1lKTt9Ci1jb25zdCBzdWJWaWV3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7bGV0IHRpdGxlO2lmKHNlbGVjdGlvbi5sZW5ndGg9PT0xKXt0aXRsZT1zdWJWaWV3VHlwZUluZm8uc2luZ2xlVGl0bGU7fWVsc2V7dGl0bGU9c3ViVmlld1R5cGVJbmZvLm11bHRpVGl0bGU7fQotdGl0bGUrPScgKCcrc2VsZWN0aW9uLmxlbmd0aCsnKSc7c3ViVmlldy50YWJMYWJlbD10aXRsZTtzdWJWaWV3LnNlbGVjdGlvbj1zZWxlY3Rpb247cmV0dXJuIHN1YlZpZXc7fQotUG9seW1lcih7aXM6J3RyLXVpLWEtYW5hbHlzaXMtdmlldycscmVhZHkoKXt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXz11bmRlZmluZWQ7dGhpcy5sYXN0U2VsZWN0aW9uXz11bmRlZmluZWQ7dGhpcy50YWJWaWV3Xz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLXRhYi12aWV3Jyk7dGhpcy50YWJWaWV3Xy5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3RlZC10YWItY2hhbmdlJyx0aGlzLm9uU2VsZWN0ZWRTdWJWaWV3Q2hhbmdlZF8uYmluZCh0aGlzKSk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy50YWJWaWV3Xyk7fSxzZXQgdGFsbE1vZGUodmFsdWUpe1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC50b2dnbGUoJ3RhbGwtbW9kZScsdmFsdWUpO30sZ2V0IHRhbGxNb2RlKCl7cmV0dXJuIFBvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5jb250YWlucygndGFsbC1tb2RlJyk7fSxnZXQgdGFiVmlldygpe3JldHVybiB0aGlzLnRhYlZpZXdfO30sZ2V0IGJydXNoaW5nU3RhdGVDb250cm9sbGVyKCl7cmV0dXJuIHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfO30sc2V0IGJydXNoaW5nU3RhdGVDb250cm9sbGVyKGJydXNoaW5nU3RhdGVDb250cm9sbGVyKXtpZih0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXyl7dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJyx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZF8uYmluZCh0aGlzKSk7fQotdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl89YnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXI7aWYodGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcil7dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZF8uYmluZCh0aGlzKSk7fQotdGhpcy5vblNlbGVjdGlvbkNoYW5nZWRfKCk7fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLnNlbGVjdGlvbjt9LG9uU2VsZWN0aW9uQ2hhbmdlZF8oZSl7aWYodGhpcy5sYXN0U2VsZWN0aW9uXyYmdGhpcy5zZWxlY3Rpb24uZXF1YWxzKHRoaXMubGFzdFNlbGVjdGlvbl8pKXtyZXR1cm47fQotdGhpcy5sYXN0U2VsZWN0aW9uXz10aGlzLnNlbGVjdGlvbjt0aGlzLnRhbGxNb2RlPWZhbHNlO3RoaXMudGFiVmlld18ubGFiZWw9Z2V0VGFiU3RyaXBMYWJlbCh0aGlzLnNlbGVjdGlvbi5sZW5ndGgpO2NvbnN0IGV2ZW50c0J5QmFzZVR5cGVOYW1lPXRoaXMuc2VsZWN0aW9uLmdldEV2ZW50c09yZ2FuaXplZEJ5QmFzZVR5cGUodHJ1ZSk7Y29uc3QgQVNWPXRyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldztjb25zdCBldmVudHNCeVRhZ05hbWU9QVNWLmdldEV2ZW50c09yZ2FuaXplZEJ5VHlwZUluZm8odGhpcy5zZWxlY3Rpb24pO2NvbnN0IG5ld1N1YlZpZXdzPVtdO2V2ZW50c0J5VGFnTmFtZS5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50cyx0eXBlSW5mbyl7bmV3U3ViVmlld3MucHVzaChjcmVhdGVTdWJWaWV3KHR5cGVJbmZvLGV2ZW50cykpO30pO3RoaXMudGFiVmlld18ucmVzZXRTdWJWaWV3cyhuZXdTdWJWaWV3cyk7fSxvblNlbGVjdGVkU3ViVmlld0NoYW5nZWRfKCl7Y29uc3Qgc2VsZWN0ZWRTdWJWaWV3PXRoaXMudGFiVmlld18uc2VsZWN0ZWRTdWJWaWV3O2lmKCFzZWxlY3RlZFN1YlZpZXcpe3RoaXMudGFsbE1vZGU9ZmFsc2U7dGhpcy5tYXliZUNoYW5nZVJlbGF0ZWRFdmVudHNfKHVuZGVmaW5lZCk7cmV0dXJuO30KLXRoaXMudGFsbE1vZGU9c2VsZWN0ZWRTdWJWaWV3LnJlcXVpcmVzVGFsbFZpZXc7dGhpcy5tYXliZUNoYW5nZVJlbGF0ZWRFdmVudHNfKHNlbGVjdGVkU3ViVmlldy5yZWxhdGVkRXZlbnRzVG9IaWdobGlnaHQpO30sbWF5YmVDaGFuZ2VSZWxhdGVkRXZlbnRzXyhldmVudHMpe2lmKHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIpe3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuY2hhbmdlQW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50cyhldmVudHMpO319fSk7fSkoKTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXVpLWItZHJvcGRvd24nLHByb3BlcnRpZXM6e2xhYmVsOnt0eXBlOlN0cmluZyx2YWx1ZTonJyx9LH0sb3Blbigpe2lmKHRoaXMuaXNPcGVuKXJldHVybjtQb2x5bWVyLmRvbSh0aGlzLiQuYnV0dG9uKS5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7Y29uc3QgYnV0dG9uUmVjdD10aGlzLiQuYnV0dG9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuJC5kaWFsb2cuc3R5bGUudG9wPWJ1dHRvblJlY3QuYm90dG9tLTErJ3B4Jzt0aGlzLiQuZGlhbG9nLnN0eWxlLmxlZnQ9YnV0dG9uUmVjdC5sZWZ0KydweCc7dGhpcy4kLmRpYWxvZy5zaG93TW9kYWwoKTtjb25zdCBkaWFsb2dSZWN0PXRoaXMuJC5kaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoZGlhbG9nUmVjdC5yaWdodD53aW5kb3cuaW5uZXJXaWR0aCl7dGhpcy4kLmRpYWxvZy5zdHlsZS5sZWZ0PU1hdGgubWF4KDAsYnV0dG9uUmVjdC5yaWdodC0KLWRpYWxvZ1JlY3Qud2lkdGgpKydweCc7fX0sb25EaWFsb2dUYXBfKGV2ZW50KXtpZihldmVudC5kZXRhaWwuc291cmNlRXZlbnQuc3JjRWxlbWVudCE9PXRoaXMuJC5kaWFsb2cpcmV0dXJuO2NvbnN0IGRpYWxvZ1JlY3Q9dGhpcy4kLmRpYWxvZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgaW5zaWRlPXRydWU7aW5zaWRlJj1ldmVudC5kZXRhaWwueD49ZGlhbG9nUmVjdC5sZWZ0O2luc2lkZSY9ZXZlbnQuZGV0YWlsLng8ZGlhbG9nUmVjdC5yaWdodDtpbnNpZGUmPWV2ZW50LmRldGFpbC55Pj1kaWFsb2dSZWN0LnRvcDtpbnNpZGUmPWV2ZW50LmRldGFpbC55PGRpYWxvZ1JlY3QuYm90dG9tO2lmKGluc2lkZSlyZXR1cm47ZXZlbnQucHJldmVudERlZmF1bHQoKTt0aGlzLmNsb3NlKCk7fSxjbG9zZSgpe2lmKCF0aGlzLmlzT3BlbilyZXR1cm47dGhpcy4kLmRpYWxvZy5jbG9zZSgpO1BvbHltZXIuZG9tKHRoaXMuJC5idXR0b24pLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTt0aGlzLiQuYnV0dG9uLmZvY3VzKCk7fSxnZXQgaXNPcGVuKCl7cmV0dXJuIHRoaXMuJC5idXR0b24uY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJyk7fX0pO3JldHVybnt9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBGYXZpY29uc0J5SHVlPXtibHVlOidkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUxnQUFBQzRDQVlBQUFCUU15YkhBQUFscmtsRVFWUjRBZTJkQ1h3ZFZiM0g1MjY1eWMzU3BFazN1a0VYQ3FWVUJMVDRXbTE5b0ZLdGFOMGZLaWp5OUNNZ3VQQmFySUpzSWlBOHFzalRoN1NsbEFvRmVWQmFFQVJrTFYxb29YdEwweVJka3FacDl1M3V5L3YvNXVZL09abTc1eTY1OSthY2RuTE9uUDM4NXp2Lys1OHpaMllNaW5UcGxJQWh6c29EY2VhVDJSS1VRTHdISU1GcWgwVjJsbDBrbjRYQTZieXY5L1Z3ODM0a1gxOWU3a2VSUUN6aFJ5azZiSkpZUnZEMVlUWHVoUmRlcURqNzdMUFB0TmxzNDAwbVU3SFJhQ3pGRmdnRVZKL2lTcWhzaWNGZ0tJWFVLTDZidkI2Zno5Zmo5L3U3S2I0YlBqYUs2N1hiN1EwSERodzQ5SVV2ZktFZDJYVWI3V3B4SElZdlhSZ0o4QUVMa3pSc28xZ21LcndrQmZqRzczNzN1NVpseTVaTktTOHZuMkcxV3M4MG04M1lwaFBJMHduUVVlbVFGcDBJelFSOXRkZnJ4WGJJNVhJZDZ1am8rUEN1dSs2cVhiTm1qWWZhOU5NbW5nRG9CbXQraEllOTQ0TTUzQVVod3F3Q3ZYVHAwcUpycjczMm9wS1NrazhYRmhaK2ltQytnSUFyeUFaQjBRbmxKdUIzT0ozT3QzcDZlbDUvNktHSHR0eHp6ejBPNnBzZStHRVArM0FHbktFMkVoZ0cwdEFGdDk5Kys0V2tvVDl0c1ZnVzBEYUg0Z3V6QWVnNCt1RDBlRHhiYVh1RE5QenJ0OXh5eTNiUzhHNHFCOEJGNk9Pb0tyK3lERGZBQjBCOTFWVlhGZjcydDcrOWxMVDA1UVVGQlpmUW9ZV3RuQSt1eCsxMnYwcmEvVysvK3RXdlhscTVjcVdUQmpVc1lSOE9nRFBVOEtHdGpSOSsrT0hIeDR3WjgrMmlvcUt2MFg0bGJmbnNXaDBPeDkrYm1wcld6cGd4WXhzTkZCcGQxT3A1YmNia00rQU10Z3IxMXExYlR6L3p6RFAvZ3k0UXYwMnpHdFB6bWVoSVk2TVptbXE2VUYxNzZOQ2hKK2JNbVhPa0QzUVI5a2hGY3pZK0h3RVh3VGJWMU5UTUkyMjlGQ1lJWFNUbTQzZ1Robzh1VWdNd1lVaXIzek4xNnRSM3FBSWZiWGtKZWo0ZGNJeEYxZGJrbTQ0ZVBmcVpxcXFxcFRUN01aZjJwWXNnQVpxTjJkVFMwbkxQNU1tVFg2RXNERHJESHFGVTdrVG5BK0FhMkJNbVREQnYyYkxsaXlOSGpseENac2dGdVhNWWhyNm5aTDdzYUd0cnUvZWlpeTdhVUY5Zjc2VWVBZktjQnoyWEFVZmZWYmdKYkF1Qi9ZM0t5c29sZE9ObDV0RGprcnM5b0J0TCsxdGJXd0g2VXdTNi9tWlN6ZzBzVndIWFRKRzllL2RlT0dYS2xPV2tzUy9NT2VsbmNZZEpvMit2cmEzOTZheFpzN1pUTjBYVEpZdDdIZHExWEFOYzFkZzBETk9xVmF0R0xsNjgrRFphLzNFMVhUd0NlT242SkxDbHk2bmNVOSttTkxuQlpSTE9ZUEFISEk1SDJsNS84VGRIYmwzU1JqVXg2RGt6dFpncmdLT2ZETGY1eElrVDM2bW9xTGlMekpHMHJBRkpBb21zS0RwMVc1MVM3NElablNJWDhEY3JYVjNMbEsvT2U1eHFaUHNja0djOTZMa0FPUHBvd3JaNzkrNVpOSzMxQnprelF0S0k0cXh2VjBkSlRTTEo1OTJrSEt1N1FmblB4WHVwRm1oemJGa05lVGIvdEdzYWUvYnMyVmE2d3IvbHJMUE8yaXpoVGdMUVpJdWFhTXAxeXZUTnl2TmJiMUhvbUZCMVp0ckFVTllxeW16dEdNTnQycmh4NDRUNTgrZXZvaHMxbjByMitBeVg4bW5UNEtJQXZaNjNsQTgyZjEvNTVUWDFGSjIxdG5rMkFzNHpKT2JxNnVyUDBCVGdDbWxyaTJURkRtY0VjSFFEdG5sejR3K1V5eitIbTBSc20yUHVQR3RjTnBrb210WmVzR0JCWVhOejgyMTBkKzA1Q1hmV3NCTGFFUU5kNUkrZThKeXlZZXR0Q2gwenlvQnJwYXd5V2JKRmcydHd2L2ppaXhQbnpadTNtaFpGelEyVnFJeUpSd0laMCtCaVp6eWVUY3FlYlZjcVMzNTBuS0t6eG1USkJzRFJCM1dXWk4rK2ZYUHBwczA2MHRwVm91eGtPREVKREFuZzZHSWcwS0kwSHYrbWNzWG5OOUZlVnN5eURMV0p3bkNiYWRYZm9tblRwbTJVY0NjR2MxYmxOaGlxbE5NbWJsVCs5c29pNmhkbVdLQzRobFNKRGlYZ2FCc0NzTkRLdnlzblRwejRKSVdMYUpNdXB5VmdLRkxHakh0U2Vmck5LMmtZRnRwd2pJZU1zNkZxV0lPYjdrcitZdHk0Y1grbTIrMDQ0NlhMQndrRVNIdVByUHF6OHV5bVg5QndoaFR5b1FCY2hac2VRaWlnZGNqMzBnckFPK1NEQ1BsQXRXNE1lTGlrZE1RZHl2cXQ5eXAwckNsMVNEUjVwZ0ZYNFY2NGNHRVJ2ZGhtUldscDZYVTZzY2pkZkpOQWNmRjF5c3FOSzVRNUMyRitaaHp5VEY0QXFIQ1BHalhLU2pkd0hxVUhmcithYjhjeVc4WXpaTE1vMFFUZ2NqMmpmTy9TN3luTnpTN0t4dE9JMFVxa0pDMVRHbHlGbTNwY2NQRGd3ZnNrM0NrNWRybFZpZFg2VldYRnh2dkFBRzBaMCtTWkFKemh0alEyTmk2bGQ1RDhLTGVPak94dHlpUmdLLzZSOHV5N1M2bStqRjE0cGh0d21FQm93M0w4K1BHcjZGbkptMU1tTEZsUmJrcWd0T3htNWFtM3JnSVR0SUdOdEpySjZRUWNIY2RQa1lVdUtMOU1zeWJMS1N5ZGxJQ2lqS3hjcmp6KzBwZEpGS3pKMHdaNXVnQm51TTI3ZHUyYVQ3ZmZWOUpVSUdDWFRrcUFKRUFzakoyd1FsbTFmajd0cFBXT1p6b0FCOXlvMS96U1N5L05vTGRKcmFNd0ZzZExKeVVnU3FCUUdYL0dPdVgrRlRNb0VwQ0RtWlJyOG5RQmJxSUhnb3ZuenAyN210YVdsSW1qa21FcEFVMENZR1BtUjFjckYxOWNUSEg0aFU4NTRLbXVFQ2NNT21vOWRlclVBeU5HakxpYXd0SmxXQUpaT1E4ZVRRYjI3a2VVeXo3eE04cVM4am55Vkdwd05rMHMrL2Z2LzRxRU85b1JsV2tESkdBcnZWcFo4OUpYS0M3bE15dXBBcHpoTm0vWXNHSDZHV2VjOGVDQUFjZ2RLWUZZRWhoejJvUEszWCtaVHRsU2FvK25FbkR6eFdSTDBlTm1qMHE3TzliUmxPa2hFb0E5ZnQ2Y1I1V1BxL1k0SUUrSitaeUtTalM3bTU2anZLK3NyRXplcVF3NWVwbU55RGtiWEJSUFQ4Ly9LbCsrNkVhS1NvazlucXdHMTB5VEhUdDJmSnBXQjBxNHhZTWx3NGxMb0podTV6L3kzS2VwWUVwTWxXUUJWN1UzbVNYRk5OOTlINzFZUGZFQnlSSlNBcUlFd05ENHlmY3BGeXpncWNPa0dFMm1NR3R2eTJPUFBYWTl2WmpuVExHZk1pd2xNR2dKV0N4bktrdHYvUW1WVDNwV1piQ0FNOXpteHg5Ly9JelJvMGZqMFNUcHBBUlNKNEh5a1RjcU4vLzNHVlJoVXFaS01vQ3JDNm5vNlp5N3lUU3hwVzVrc2lZcEFaS0EwV2hUUGo3M2R4Uktha0hXWUFCbjdXM1pzMmNQdmpINWVYbEFwQVRTSW9HaTRpOG9LNTYvdEE5eXNBcjJFbktEQVJ4bHpKZGRkbGtKM2RDNU42SFdaR1lwZ1VRbE1IN1N2YlJXcFlTS3NhbVNVQTJKQXM3YTIveW5QLzNwT3ZyYzllU0VXcE9acFFRU2xZRFpQRm41NGEveGNEb0RucEFXVHhSdzVEZlJKN0RMNkhVUFAwNjByeksvbE1DZ0pGQSs4c2ZLWmQvQ3FsUmM5eVhFYkNLWldYdGJsaTFiOWdONkVYM2xvRG9yQzBrSkpDb0JrNmxTK2ViVlA2QmlDVThiSmdJNDhwcHhVMmZzMkxIWEpOcEhtVjlLSUNrSlZGWmRvM3pzWTdqNXc2WktYTlhGQ3pocmIvUEREei84SGJLOXg4WlZ1OHdrSlpBcUNaak5ZNVdmM3ZrZHFvNEJqOHNXanhkdzVEUFJ0M0tLVGp2dE5OeGhrazVLSVBNU3FCejFFMlhxN0lUZWtCVVA0S3k5TGV2V3Jmc0dhZTlKbVIrWmJGRktnQ1JnTHBpazNITDNOeWdVdHkwZUQrQ3E5aDQvZm53QmJUZElRVXNKREtrRVJvKzlRU2tyNDd1Yk1mbU5sUUhhRzV2NTZhZWYvbmRhVURWdFNBY25HNWNTTUZ1bUtYYy9mREdZcEkzNWpDaVhlQURIM0tPWjdscCtTeTZIalNoSG1aQXBDV0E1N2RnSjN3S1R0SUZOUUI3UnhRSWM2YWJMTDcrY25pRWVzVEJpTFRKQlNpQ1RFaWd1V2FoOC9pc2pxRWtBSHBYaGFJazRNNUJ1WHJwMDZaZm9PVXRjdlVvbkpURDBFakNhaXBTdmZmOUwxSkdZVTRiUkFFZWFDamg5UCtmcjBqd1ordU1xZTlBbkFaZ3BvMFovbmZZWThJZ2NSMHFBOXNabWV1Q0JCeWJaYkxaLzY2dGFlbElDMlNFQkt6RjV6VEpNV2JNZERsNURYRFRBVmUyOWFOR2liNUQyanBRdnBFSVpJU1dRRVFrWWljbTVDMFF0bmpEZzZ1d0pQWTcydFl4MFdEWWlKWkNvQk1vckdYRFc0aUUxaE5QTU9CTVFiMXF6WnMwTW12dWVIbEpLUm1TMUJDWllZWm9PQTJleFRGZCtkVC9lVHN1ektTRmFQSndrTk1EUE8rKzgrZkxpTXZkQStaOEpKY3FQTis5Ukdub2NvWjBQQkVMakZGMmNiamRZSUV5a3ZxNHdXZWhkNEFQYjA1ZEJhcmk0Z2FXQ2UvcDhBVCt1Rk9kVDRqN2FvSlRCN29BR293RnVycXFxbWljQlY1UVBtZ0xLWDNiN2xWYkhBTm1STExQVlZTam5HVDZoekZSYTQ0ZEhIRXFJSGhRVGhYQzgrWVFpcVE2Nks5cm52YWtvRDFPOURQaUFKdlNBbzh2WWpNWEZ4V1o2VTlWRkEzSVAwNTJmdis1VkdudHpCVzQrU0NZbDRLdFEvTDN0cENCSjArV3BDL2hLTGdLcnZiMjlERGo0MVE0V0l2VU9jYVpISDMxMGxzbGtHcWxQSEk3N3VRZDM4Q2daVEJiU1ZCVktYaytDR1l3alM3NTgveXd3UzFzSXovb0kxdUNtbVRObmZsS2FKN2wvT211UUczbWlnUTl4bnZnMFcyZ2FOLzJUZllEem9MUURGdzV3VllPVC9UMVhBcTdKS2FjREt1UzJjc1ZnMUIvdW5CNlcybmt3YWlpdW1FczdyTUVCdWVaRUc1enBOOUd0K1FLeXYrZG91V1FnNXlYQWtQdnRIWU83OE14aUNaaXNKWE5zVlJNTDdDM0huZFJONWxpMXcvV25OUGFORHo3NDRMbDBacFJtOFpoazF3WWhBWWFjalBKQmxNN2VJZ0hGVUZyeXhadlBwUjZxL0lvOURhdkJKMHlZY0pZMFQwUXg1VTg0Q0RuTnJ0amI4MmRRWkhxWnlzZWZSUVBhUmx0RURjNEpSbHI3UFMxL1JpOUhvcGVBd1dSV2pMWUtRaUYvTkxuQldncG1vY0daWTNYWW9vbUNCT3liYVBYZ05LbkJWZm5rN1I4VjhxTHl2SUFjckJvTGlxYUNYZG9ZY3ZYWU1lQjhLbVBmU0lCUFVWUGxuN3lXUUQva2pFRU9EN2ZBQnNCVmZ2dEdvVElkWW9PUEhEblNYRmhZT0RtSGh5cTdub0FFZ3BDUFVQeU9UaXFsM1FCTW9JYnN5R28wRjA0dUluWWRiVzNSVFpSYmI3MTFBblhabWgzZGxyM0loQVFZY3Bvb3owUnphV21EVGsxcjBZTHJ3UzRHd1JhSnVvTUdtWHJqT2VlY0k1ZkhRaUxEekttUUY5SUxYRlhJR1lmYzhxMmpaNEpkQmx5Rm5FOVpIb2x4MUtoUjhnSnptTUhOdzlVZ3o4VTducmlqV1RveVpDWkZ0TUVCdTdHb3FHZ2lEMWo2dzA4Q0t1VFdVc1h2NnM2NU81NkdBcFZkbFdNK2Nub05icUIzRCtKekVkSU5Zd2t3NURsbmt4dk5ZSmV0RWRWRUVUVTRJb3kwUkxaRXpvRVBZN3I3aGg2RXZJUTBlUS9GWlAvc0NwaWxQZ053S0cwVmJneUZkelRxQ1hDOFpGdzZLUUVBb3hnTFMzTm9QYmtSN0dvc0l5eHFjQnhTZ3dRY1lwQ09KV0RBT25JcktVYlM1QUg5TTVHY0tVdDhPaUVaY0sxSGJJTWpRaVZmQXE3SlJnYjZKQURJRFFSNXRwdXVBYU1HdUdhaXNBYlhJaVRna3V0d0V1alg1TDJVbkowMnVTRUlPSGRmWlZwcWNCYUg5R05LSUtqSlE2eUFtT1V5bFlIc2ErNmNwckJaZzNNZnBBM09rcEIrV0FrRU5YbXhFbkRiczIrZTNLQUJydlU5UklOVGloNTZMYk1NU0FsQUFxb21MN0JSUUZPVTJTR1lnTW91T3FWMWpHSFdJcnhlcjUwKzhpb2ZWOHVPUTVhMXZWQTFPVUVlY09QdFdkbGhreHNVSC8yc2FFNWxtdWZCdFZpZno0ZXJDT21rQkdKS0lLako4VjBFVFQvR0xKUE9EQUcvWDgrdU9nK08wMDg3QmFIQjA5a0pXWGQrU1NDb3lZdVVnSWNlYUIvcWVYTC9BQTJ1Y2kzYTRKQjhRR3J3L0FJd0U2TlJOYm1sY01odDhvQmZ0VDQwWlkyeHN3Mk9zSm9nQVljb3BFdFVBcW9tdDVBbTl3NmRKZzhFTlBOYWd6eXNCcy8yVzdLSkNsL216NHdFOE9Zc2czbG9OTG5LYk5BRzErREdxRm1ESTFMZHBBMmVHUmp5dFJYMTlYQUVlY0RyNmtNcWN5TTFCTlRyUjQxbHRDeHFjQVljNnlPbGt4SVl0QVNDbWh5UDlXWjJkb1ZtVVhodEwxaFdIV3R3M2xjY0RrY2IxSDIyTDZ6Uk9pd0RXU21Cb0NhMzltbnlESFNSbVBWN25HMzZsbGlEczFyM3Q3ZTMxK2t6eVgwcGdjRklRTlBrR2JyajZiZTNnVjI4N1o5NVZrMFU3TUNwa2RYVjFiWHlJak1vRVBrM2VRbW9rSnNLZ2xPSUFEMXRtNko0V283VU1zZDlQUSt3QnNlK0N2Z3p6endqQWUrVGp2UlNJd0dHbkI0cVMwMkY0V29oRThXNTh6azk0Q0d6S1A2WFgzNjUyK1Z5TmRONmxGSGg2cEZ4VWdLRGtRQWdEeWdXeGVEekRLWjQ3REplVjNQdnZ0ZnBWUUNoSmdvS3M4MEMrOFhmMDlOelJKb3BFSXQwcVpRQUlGZm91MEdwWG9VSVZ2MHV4eEhxcThvditjeHp5RFNobXNGdXQ5ZWxjbUN5TGlrQmxvQUt1WkVtNzFKc2kvdmRLck1pNEdxVGJJTXo4Y2pndzB5SzFPQjhTS1NmYWdrTWdEd1ZsWk1HRHpnNm9KUjl0SUZoNWxtendkRU1SL3BQbmp4Wml3anBwQVRTSlFIVkpnL1FSYWZmbTN3VDlHdmc2MjRHc3dQZ1JzWGhOTGgvL2ZyMXUyblJGWUNYVGtvZ2JSSlFieWJDWEVsMmRpWGdDemgyYnRoTkZRSHdBWkF6NEJnRWdFYWlqejRDMjl6WjJWa2p6UlNJUmJwMFNpQUlPVDdNZ0NuRXhEZXlUaFMvczd1bWErdmFacXBBTkZIVWJ1c0JaOGk5cmEydFd5WGdxb3prbnpSTFFJTWNGNTZKT2lMYzE5TzZsWXJCMWhtZ3ZWR1ZDRGoyVlExT3ZxK21wbWFMQkJ3aWtTNFRFbEFoeDd2SkU1NWRJV2hiNnJaUUg2RzlXWU5yWFJZQmgvWm1EZTVidVhMbFZqODVMYWNNU0Fta1dRSWE1SW0wUTR4MmJYa1VHcHpoWm83VldzSUJycDRKR3pac2FDYzcvS0RVNG9sSVcrWk5WZ0w5a01lMng0UDJkK2RCKzg2WDhORlAxdUFSQVVmZldJUERudkhTZE9FMkNUakVJbDBtSlJDRVBBNTduQWozZHpYajQ2OHFyK1N6RGE1MVY5VGdpR1RBY1RaNHlRN2ZMQUhYWkNVREdaU0FCbmxVbTV3Z2JhM2RERlpwRTAwVXJhZjZCeDVZdmVOTThDNWZ2bnpiSlpkYzRpd3VMcVlIN1lhdnEreXRVUnE3MHJSSUtJdkVHbG1aQVlzd0RqWkNSQmNoTFVKMFVMZUdxWXphUUw4QWZFai9QQTVuejh1L1p3M08ybnRBQytFQVIwYlZubm4zM1hlN0d4c2IzNWd5WmNxbHhoUjltR2ovb1U3bGlXZnJsUFpPZDVqUlpHZlViSzlibVVuUEdJWUllRUIzQjhpMVB5VUtCSFRvK3ZQRkVZcmNmcFI2b3JZZlI2TlptaVVROENzOVhVMXZiRGl5RXlzSTJmNW15TFZlNndGSEFxU2xhbkR5UFR0Mzdueis5Tk5QVHhuZ3YvM0RIcVc1bFY0dGtHUE82N0VyUGkrOXBndy9tWUFHZmp5Tzh6Sm8rdkw2ZEgyZG1jNnZiMS9mUDMxLzlQbjErN0hLNjlQMTVmWHQ5ZVVQK0x4S1IvT0I1eWs3ZmxyRk9mQUJOZWh0Y0NTS2dIdXZ1KzY2dDJuNWJHdGs3VEdndnBnN3VRZzNCbVcyMkJTVEdhOHBJd2VoeCtzNEwzd3h6T1hGT000aitzakhlY1N3bUVjTWkzbkVzSmhIREl0NUVOWTc1SVhqTWh4V0krUDRFNnU4UHAzYllWL2ZIc1dEUmIvZjFWcTNiOVhibEJ6eEFoTkZvd0VPdGUraGxZV08rdnI2ZjZRS2NEU2FxMDZGM0ZRWWRlVUVvdzlmREdmTG1NVStpZUZJL1JQemlPRlU1WTlVVC9UNGdPSjJ0UC9EN2U3Qm16K2h3Y05lWUtLT2NJQWpIaWFLWnFhOCt1cXI2K2w5S1lnZjlnNlFHL3NneHdIWGJ4QVFneUNHOWZtR2FsL3NreGlPMUI4eGp4aE9WZjVJOVVTTFY4ais3bWpkL1J6MVJ6UlB3R3VJaXdRNHpCU2NGYURhczNUcDByMGRIUjJIcFJZUHlvOGhEKzdKdjVtVUFCajBlZXlIang1OFloKzF5NENEVlRBYjRxSUJ6cENqRWpmTmlXK1FkKzc3NWRjUGVUUmRJOU5DZitPU2xRbDk4TTNSdkFGTTBzYm1DVmhOQ0hBY1NhaDhUWXV2WHIxNlBUMk1qQXFsNjVPQWFwUGpYWHpSblA0aUNuazVMbHc1VG9NdmhzUGx6WVU0Y1F4aU9GTGZ4VHhpdUMrLzMrL3hOQjkvY3ozdGl0bzdySG1DSXBFME9OSndSckFkN2w2MWFsWGprU05IWHBCYUhLTHBkNWhaTWZFTEozRkE5QnV5OG9FU3cvcDh2Qy9tRWNPY25tdStPQVl4SEdrY1loNHhUUGx4MzhEdGFIbmhaUDNyalpRRURSNXhlaEJGNGVJRlhEVlQxcTVkK3docDhZaG5TN0RLNGZkWGhkeUVkL0ZKbDA0SitBTmVmM1BEcGtlb0RUWlBrZ0ljZlIyZ3hlKzc3NzZhWThlTy9WTnE4ZEREMkE5NXNqYW1MRTgvZVNUZ2dSc3VMajJPdG44MjFENWZRNGx4YVc4Y3BXZ2FIT25RMXBxWlFtSFhVMDg5OVZlUHh4UFdvRWVCNGV3WWNod2FkaHptdzRWNGpoUERuSjZvTDlZaGh1T3RSeXdqaHVNdHI4OG4xaUdHT1o4WUo0WTVQWkt2K0gyQnRoT2IvMHBsOEY1bUVmQ29Ga1Vzd05FSFZJQ0xUZFZNdWZQT093K1FGbjlUYW5HSUp0VEJIamVTdWNJSENqa1Fac2ZoU09tY0wxNC8yZnFTTGEvdlo2ejZZcVhyNjhNKzFwMjRuSzF2SHEzKyt3SGFaZk1FVEVhRkcyWGpBUnphV2dPY3dxNFhYM3p4WWRMaUtDOWRHQWt3NVBxZjJjenNvME9Na1JoR1hHNXU5TjV2cGIzcC9ZZHBBS3k5QVIrWWpHbEp4QXM0YTNHY1BhNGxTNWJzT25IaXhHYXB4VWthRVZ3UWNucXJhc1lkdzgwd293TWNsL0hPSk4wZ3RMZmIxYkg1eU1ISGQxRmxERGhyNzVRQWprNnlGc2RWS3lCM2J0eTQ4VUU1b3dMUlJIWWE1SmdTWThkaG5pWkRQTWVKWVU1UDFCZnJFTU9SNmhIeklCekxjVjhqMWFlUFIzMWNSZ3h6UGpGT0RQZWwreFd2djZONXg0T1VoQ1dvWUE4TXhxVzlLVjljSmdyeUFYQm9jUWJjZGVPTk4rNmtkNGsvSjllb1FEeVJuUXE1c2UrRmszeWcyVWN4RHZjZFVMVW1qb3RjYmVRVUxodHZmZnI4WEM2U2o1YTVUT1JlOUtkd1hxNVBYejVLT24wV1VISDJubnl1ZHQvcW5WU010WGZNcWNIK3h1TUhIR1ZZaTZzWG0yandwcHR1V2s0UEpyZkxOU3FpU0VQREd1U2hTVEltZ2dUVU5TZGVlL3V4QTJ1WFV4YUdPMjdibTZ1Tnh3Ym52S3pGOGZPQUJwMnZ2ZlphODlhdFcvOG9MemhaUkpGOXpWeUpuRVdtQ0JLZ2IxNHFQWjAxZjJ4djNvMDNWc0U4QVhOeDI5NWNWU0tBbzR5b3hWWElGeTllL0F3OTFyWkxYbkN5U0NQN0pwbytOTkxuUE1RdkhYQVlmanovVUR1WEVjTmNWb3dUdzV5ZWFsOXNRd3hIYWtmTUk0YkYvSGhpeXVQcTJMVi8yOTNQVUI2R08ySHRqZm9IQTdnNG80TEduV3ZXckxuTDZYVDZwS2tDa1VaM2dOeEFMNEhuQTRyY0NNZnJPRytrOHJIUzQyMG4zbnlKdGhjclB4Z0srRDIrNW9hMzdxSStxSHlSajR2TGhMVTN4cEFvNENqRGdPT01Vclg0SFhmY3NlL0FnUVByNkkyMFNKY3VoZ1FZY3ZWaWpTKytwTjkzOFJwUUhEMG4xaDM3OENtczk5WnJiN0NYa0JzTTRHaUFJVmVuREduZmNjTU5OenpVMHRMU0tFMlYrT1N2bWl1WVhaRk9rd0RtdkQyZTdzYWEvWDk5aUNMeE9Cb0FGN1czbGpmZXdHQUJaMXVjcHcyZDc3MzNYdXNUVHp4eEUzMyt4Q05ObGZqRUQzdmNxRUxPTjJXR3IwK1dDUzAzY1h0YVRteTZxYnV0cHBVa3lIQW5OTyt0bC94Z0FVYzlETG1teFduYWNBZUIvaERkQU5LM0kvY2pTQ0FJZWJpM2QwUW9rS2ZSWkhjcnZaMDFEOVh0VzcyRGhxalgzbUJ0VUM1WndHR3FhRnFjd3M1TEw3MTA5ZEdqUjkrV040RGlQeDdESFhMYzBIRTVXdDdlcy9tMjFXQ29iNFBpVE9pbVRqaUpKd000NmdQZzJQaUNFMmVlL1djLys5bHZ5QjV2a3ZZNFNTTk8xMit1eEZrZ1Q3TEI3dlo2dXB0cTk2NzhEUTNKVGhzWWdna0FwcGd2Q2c3T0pRczRXa1VuTUgyQ013NmRjOUFOb0pOUFB2bmtMOGtlOTBwN25DUVNwelBTOUNGc2NyeUhiemhzRUV2QTcvYTJOTHp6eTQ2V1hTZHBWK1dIL0tRdUxGRXZ1MVFBenJZNG15cHFKK2xWRTl1M2JkdjJaOWpqRW5JV2Qyd2ZrQnNNK1crVDk4MTMwOTNLNmovWDdsKzluU1Fqd3AzVWhhVW81VlFBanZvWThnR215c0tGQzFmU2dxeFgzRzZja05MRkt3RVZjdTNyWS9rNXN3SzcyOUhiOU1xZWQyOWZTWExSbXlhd0NBWjlZU25LT1ZXQW8wNkdIRFRqUWdHZHRpOWF0T2pYZE5INW5vU2NwSkdBVTAwVkk3NCtsbitPWHYyZ09KMHQ3eDNjZHVldmFYUXFKK1R6dEdESzRJYmtVZzI0YUkrcmtOTlhJcnF1dU9LS0cra0JpWU55VVJaRUhyL0xSOGo5OU9GWHQ2djk0S0gzNzcvUjRXanRJbWtBY0JGdU1KUVM3UTFKcDBORm9ITmlCdzBFdWJlMnRuYlQvUG56Rnp6M1V0TUlBNzZtSlYxY0VqQVljSWhJbkxnVGt1TU9ab25IM1hXOGR2ZGZmOXpadXIrSmh0TkxHd01POHphbDJodmlTZ2ZncUJkdUFPaGtpN3U2dTd1M05IV08reXhOaWRrazVFRWh4Zk0zQ0htZlNITjB6UXE5OEZqeHVudGE2dyt2KzlHcGhuZU8wV2owY0tkVWM3TmMwd1c0cUc2MDhBY2ZmTkJyTWx2Zkx4MHg1WE1HbzdsQVFzNkhJYmJmTHl0Tm5MRUxaVWtPck8ybUYyYjJuRHo2NHJYMWh6Y2NwRzdwNFlibUJ1QXBkK2tDSEIzbEk4Rysydm5PbHIwZEJZVlYrNHRLeGwxTXN3V1cvZ09YOHJIbFhZVXNxK0M4Q2hhZVp2OC92T3FZdm81aGIybDQ4K2QxKzlmaU5yd0lkOHJtdXlNZDdIUUNMcllKeURYUTIwL3RPR1V4Ris2d2xVMWFZRFFXRlBHQkV3dkljSGdKOU10S0UyZjRqRmtRcTlyY251NzJ4cnAvL09USWdjY3gxODF3WTg0NzdYQkRCSmtHWEFPOW8yVlBtK0p6YmlvWk1YV2V3VlJRMm4vZzBDM3Bva2xnb0t5eWM1N2NUeGVVWG5mSENWclhmVTFEN2ZyOU5KNGUyZ0E0dzUzME9wTm9NdUswVEFHTzlsamxhSkIzdFZkM3UxeU5iNVpWelB5NDBXeXQ3TCtZNHU1SlA1SUUraUZuc1ViS21mbDR6SE43bkczVmRYdFdYTnZVOEdZZDlRQmdaeHh1akR5VGdLTTlPQVpjOWUxZERZNmVqb092bDFmTm5tMHlGWTFUYUFwUi9RaG9NSy84RzBVQ0d1UUdFbVVXS0hLODNqaEE4OXowZ3ZvUER1MWNmbjFiODY0VDFIMjlXWklSemMxaXl6VGdBK0NtVHFqN0xrZXJ1NjE1NnhzVm95K2NRaytmbjQ0REp5SG5ReFRkMXlCWFJSazlienBUc1NyUTcvTW9MdnZKTi9hL2Q5dVNubzVqTGRRZXc0MGJPVmdobUZHNE1kNU1BNDQyNFVKQTk3cnR2dWI2ZjcxVlB1cGNxOWxTTnR0Z05CTGo4b1pRVUZ6Ui93NlVVK1pWT2VEMmVWMkIzdTdheC9hOWUvUHZYSTdPVHVxeENEY3VLRE1PTjZRMlZJQ2piWWFjSi9qcEhZdGUvOG1qcjM1Z3RWVWRMQ3dhUFlmbXl1bkRsRktiUTFpeFhCQnlpRFJ6VGwwUkdQQmlQWGQ3UzhQYnl3NjhkKy9UZEF6NVlsSzhRemtrY0VNU1F3azQybWZJNFd1Z3Q1M2MzdUIwbkh5dHRIejZUSG80ZHl3T25qUlpJSzdvamlIUHhPdzRsZzRFWUpJNG1uZlc3Vjk1ZmYzaDlidXBkOURhckxsaGtvaFRnWms5Ky9wRWxTMkFBMjdlVk9qdDNmVzlwNDY5OWtyNXFGa21jMEhaUjZUSjBuZkVZbmdEelpVWW1RZVpyTjZaaEVuU2VYajFuazIvdnIybnN3NXZuNExHWnJqMWk2Y0cyVkx5eFlZYWNJeUF6MnpXNGhybzlIUG5PM25zdFoyRmhaWDdDbTFqNXRDREFFV2t5cVUyajNIY3RWKzdGSnZqV0UrQ1dSS3Z0NnV0cGVHdFgrN2YvdnYvNnpOSkdHN01jZlBGWk5wdXY4Y1kvb0RrYkFBY0hSSWhGMEZYdzIxTjIwODRIZld2MlVvbmphSFBoRXdKYWlrSitvQWpxZHZSSU5mRkQyWlhmU0lMRjVJK0Z6MmtVUC9ha1QwcmxoeXYyYkNYNm1LTkRjRDFOM0NncUliYzRSelBKb2YrWU9vRUp4N2Vpb05QbCtGRGxIU3hxZGdRbmo3N2g1K29HUGVKWHhRVWxFM0NnN3FaK0VtbWRuUFdZWVlqR1JlYy9uTXJibmZuc2JhVDIrNnYyZjN3WnFvUEpnaER6Vk9Bdk53VkRiTENTcWJwbEpUTk5zQXhLUDVoQmVSNE9CR2ZTUURrREhwUllXRkZ5WXp6Zi9HZDRvcXBWNUpHdCtJWnhsUnFMR29ycjF6d21kakVtT01aRXAvWDRlcnBxRmxkL2Y0RGp6dWQ3WmdoZ2FiR0JyRFoxc1lzQ2EvbFRxd2hLcGhPbHkwbWluNk1MQ1Q0MktBVjJLYnplYjFPYjlQeGYrMzJ1dHRlTFNxWk9KNCsralJKbWkxNkVmYnY5NS84ckRzaSsrcHpGWDNtQ00xa3ZYUGt3N1gvVmJkMzFlc2tjM0g2RDlwYmhCdkhKN21maXY3dXBqU1VqUnBjSENENnh5WUxhM1BXNkRCYlZNMCs0L3lmZktxODhpUFhtcTBqSnVPZGYvSjJ2eWpDL25CUWsvZnZpeUhSenZhNnU0NjJOKzk2cUhybmcyOVJIdGJVckxVeDljYzNibGpwc0VJU3E4eUtjTFlEemtJQzVBdzZiSE5BenZhNUNyblpiQzZjL3BIckx5a2JlZllWWm12NU5BazZpeTY2UHdCc1Y4ZmhycllEajFYdit1T3I5R1l5QnB0OW50Y1diZTJzMU5yaWlITUZjUFNadFRsQWh6Wm4wQUU0d3c3Zk91UDg2ejQ1b3ZMY0t5eldrZWNFTDBSTjBrWW53WWd1YUdQNzhNSkxldGw4Mjc3TzFqMlBmZmorbjk2bVBBQVpHOEJtSHhvYllQTWRTWUNkdFZxYitxYTVYQUtjTzQwKzQ5cUJRWWMyWjQydUFrNzdxajkxOXRVZnF4aDF3WlhXb3NyejZjRUtzbHhRYlBoT0x3Wk5GS3o0STdEOWJyb0wyZnArZS9PTzFUVzdIM21QQk1OZ2k3NW9qZ0JxdnBDa1lHNjRYQVFja2tXL3NZbG1DelE2VHkyS29CZWNjYzUzWjVlUC91aVhySVdqRnBqTlJUYUQrbm8wRk0xLzJEV282Y0lSYjNEMWVoMTJsN1A1alk1VEg2eXYyN2NHdDljQnNRZzF3dERXdklsMmRrNW9iZXE3NW5JVmNCNEFRODZncytuQ29MTm1WN1Y4WWNuWTRpa3p2cjNBTnVLTXoxbUxxaTRrMEUzcSs3blZ1Nk9vSW4rY092OU5VeUo0K0FDZkJLRzN0MjYzZDlhOVhQdmgyamVjUFNkeGc0YTFNNEJteUJscW52YUQxczRaY3lUYzBjdDF3SGxNZXRCaGk3Q056aVlNKzZxbXJ6cnR3dEhqSmkvNnJLMWsvT2ZvaWJscEFKMWh6MFhOenBvYWk2QUFOVGFmdS91d3ZhZmg1Y2FqRy8vWmNtTDdLWklKQTh4d2l6N1NvSzFaWStjMDJEUU8xZVVMNE9KNGdyWkgwRTZIUm1ldERzQVpldEUzVDVxNmVIcjVtUFBtV1F1cnpqY1hsczhpMEsyMFZGY3g0aVdZZUE5SkZwb3lBNENtSmF0WUkwSlF1N3pPanIwdVo4djdIVTA3M3psVzgydzFkUjdhR1BBQzVuQSswbGxqOHoySG5ETkZhQXhoWGI0QnpvTU1VdGx2bzBPanMxYlhBNjlxZEVxSGJ5NHNMTGVPbTdwNFZsbjV0QXNzaFJYbkZ4U01PSnNlaXJiZ0FoWFBqQVp2bXJEWWduNy9qUlJ1UGpWK0VHTFV4YnpSQlNLV3FkSjdSbkNoR0tCUGZ0QXQ5QU1lWi92N1hSMkhkelRXUEx2WDZleUF5Y0ZRQTJqZUdIQk9ZMjNOR2h1TmNFTVV6QS9IUnlvL1JoTTZDaEYwYUhiUlZoZTFPMFBPY2V5YmlvdkgyOFpOVy9TUjRwSko1NW9MaWllWnpMWkpKb3R0UEZZMkJvSEhXbldBVDFXcjBvd2tVbjE4SkpZb0h2OXhVUWlRTmQvcm9KZm5OUGk4OW1OZWQrK3gzcDVqZXhvUGI5elYyOXVBdTRxQWxEVXgrd3cyZkk2RHowQ0w5bldremxEMjNIWjZxZWYyYUtMM0htTmw4NFZCWjgzT1FFZnlPUjk4bERXT25qQjNkRm5GT1pPdHRqR1RMSVdsazgxbTIwUmFNbEJwVUV3MkF5MlFvUlBBUmcxU2ZmUVhGN0Y5dnRwRmFPRWd4YlNyaHVoREFWNTdnQlorQkJTZjNlOXp0WHE5OXVNZVovZFJsNzNwV0ZmN3ZxT242amZCaG1Zb1JlMHJ3aHN1TE9abHU1cDl0VHY1L0djNEFjN0hFV01XTjRaVzlBRTZRODNROHo2ZkhLS3ZRcStyMTBEbWpybW9aRUt4MVRhNnlHSXRLN2FZeTdBaVV2RjR1K3dlVjFldnkzN0s0ZWlwN3lXekFtQkNpNG9id3d5ZnRhN29JOHhBTThUWUYvTndXYkhldk5YV05QWVFOeHdCRjRVZ2dvNHdnOHErQ0wwSXVBZzM1MEVjMThIMW9pMHhqSDNSTVhpSTR6QnJWd1pjRHl4RHkxRHpQdWRubit0algyeDMySVFoZk9tQ0VtQlpNSkR3R1hReExNWUJicVN4ejVBakRnNCtiN3dQSDlEQk1YejZmVUNLT0VBcytnd3YrMGdUdzlqSEJzZCtjRytZL3VVRE1VeUhIM1hZTEJzR05KSXZRcTNQZ3diRWVzUUdHVURSUjFpL01lejZlSEVmOVdKZk9wMEVXUGk2YUxrYlFRSXNMd1laMmFMRmlla1JxaHdBSmtQSzhLSk10TGhJZGNyNFBnbnd3WkVDU1U0Q2VqbnE5MUc3UG83QkZWdld4K24zeGJ3eUhJY0UvaDlWTFdSWUhXWEMvUUFBQUFCSlJVNUVya0pnZ2c9PScsZ3JlZW46J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTGdBQUFDNENBWUFBQUJRTXliSEFBQWx0a2xFUVZSNEFlMmRDWFFjeFpuSFIzTm9ORHA4U0Q3a1U3YnhGWENjaEJoTVlvTE5taENjT0JCeWtHdzJnWVRrUFY2QWhHWEQyc1RaSlFjSkczanNndzNoc2N1Q3NURXNPQVFXMXNiWStNQUh4cFl0SHpJKzVFT3k1VU1TdG5XUFprWnphYjkvajc1V1RXdDZOS081WjZyODJsVmRYVjFkOWUvZmZQcTZ1cm83enlCREloWElpN0R5bmdqTHlXSlJLaERwQ1lpeTJwd296dHJweFN3Q2IrZDFiYXlGbTlmMVl1MytjajJNQWdPSkgyYlhuTm5FR2lIV3BwVzhkOTk5ZC9pblB2V3A2WVdGaGVOTUpsT1IwV2dzd2RMVDA2UEVsRmRNK3hibjVlV1ZRRFhLNzZUSTd2UDU3SDYvdjVQeU94RmpvYnd1aDhOeDRkaXhZeWUrOXJXdnRhSzRacUZWTlkvVGlHVUlvUUNmc0JDYmNqYUxOVkhnSlJVUUczLzR3eDlhbGkxYk5tWFlzR0V6ckZicmRMUFpqR1VhZ1R5TkFCMlpDTFhvaDNDSm9EL3A5WHF4bk9qdTdqN1IxdFoyL0xISEhxdGJ0V3FWaDQ3cHAwWDhBYUFaYlBtUnp2bkFKelBYaFJCaFZvQmV1blNwN2I3NzdydXV1TGo0eG9LQ2doc0k1czhUY1BucElCVDlvTndFL0Q2WHk3WGRicmQvOE95enorNSsvUEhIbmRRMkxmQTVEM3N1QTg1UUd3bU1QTExRK2IvLy9lL25rSVcrMFdLeExLQmxMdVVYcEFQUUViVEI1ZkY0S21uWlNoYitnMGNlZWFTS0xMeWI5Z1BnSXZRUlZKVmRSWElOOENDbzc3Nzc3b0kvL3ZHUHQ1Q1YvbjUrZnY1TmRHcmhLMmREc0x2ZDdrMWszZi9uMTcvKzlmcmx5NWU3cUZNNUNYc3VBTTVRSTRhMU5oNC9mdnphMGFOSC80UE5adnMyclpmUmtzMmgyZWwwL3UyVFR6NTVkY2FNR1h1b283RG9vbFhQYWpjbW13Rm5zQldvS3lzckowMmZQdjN2NlFMeEgyaFVZMW8yRTYzWE54cWhPVWtYcXErZU9ISGl0Ymx6NTU3cEJWMkVYVy9Yak0zUFJzQkZzRTIxdGJYWGs3VmVDaGVFTGhLenNiOVJ3MGNYcVQxd1ljaXFQMzdGRlZkOFNCWDRhTWxLMExQcGhLTXZpcldtMkZSZlgvL2xFU05HTEtYUmozbTBMb09PQWpRYXMvUHk1Y3VQVjFSVWJLUWlERHJEcnJOWDVtUm5BK0FxMk9QSGp6ZnYzcjM3NjZXbHBVdklEZmw4NXB5RzFMZVUzSmQ5TFMwdFQxeDMzWFZyenA4Lzc2VVdBZktNQnoyVEFVZmJGYmdKYkF1QmZVZFpXZGtTdXZGeVplcHh5ZHdXMEkybG84M056UUQ5cndTNjltWlN4blVzVXdGWFhaSERody9QbVRKbHl0TmtzZWRrblBwcDNHQ3k2RlYxZFhYL09HdldyQ3BxcHVpNnBIR3IremN0MHdCWExEWjF3L1RTU3krVjNuNzc3YitqK1I4L3BZdEhBQzlEcndJTzl4SEQ1YzVYREY1ZlMweWEwTVdvMytud3ZyQng0N25mTExsdkt5cGowRE5tYURGVEFFYzdHVzV6UTBQREQ0WVBILzRZdVNNSm1RTVNFeFZwc1BQeGhqc01IdC9GdUxXa3A4ZHdxYjNkdDJ6aG5EMnZVS1hzbndQeXRBYzlFd0JIRzAxWURoMDZOSXVHdGY1RGpveVFHbUhDNFhNTHdtd2QvQ2FmdDJmbm1YcjNBM2Q4WmY5aHFnWFdIRXRhUTU3T2Y5cFZpejE3OW13clhlRS9NblBtekYwUzdzRURHdXVlSm5QZXZDdXVzTzc2c1BxNlIyYlBIbTJsK3N5MGdLRzBOWlRwMmpDRzI3UjI3ZHJ4OCtmUGY0bHUxTndRNnduS2xmMFRaY0ZGL2J3ZS8vWjl1eHcvdnZmdWo4OVRmdHI2NXVrSU9JK1FtRStlUFBsbEdnSjhVZnJhSWxvRHA1TUJPRm9CMzd6eFF2ZFB2cjVnUDI0U3NXK09zZk8wQ2Vua29xaFdlOEdDQlFXWExsMzZIZDFkZTF2Q25UYXM5R3RJWHA1aDVMZ0oxcmUzSDd6MmR3c1dqTVRVWWx3cnBaWExraTRXWElWNzNicDFFNjYvL3ZxVk5DbEszbUx2aDFSa0djbXk0R0pyM0I3L3prT1ZYWGZkODZQRDV5Zy9iVnlXZEFBY2JWQkdTWTRjT1RLUGJ0cXNKcXM5UWhSUHBxTlRJQldBbzRVMGwrMXl3MW5YZDI5ZHVIOG5yYWJGS0V1cVhSU0cyMHl6L2haUG5UcDFyWVE3T3BqVHFUUk5VaHd4dHNLNjl0M3RjeFpUdXpEQ0FzT1ZVaU9hU3NCeGJBaGdvWmwvZDAyWU1PRjFTdHRva1NHREZTQ2FiZVZqODE5L3YzTE9YZFFOQ3kwNHh5bmpMRlVIVnVHbXU1Sy9IRE5tekhOMHV4Mi9lQm15UW9FZTg0Z1JsdWMyVjEzelMrcE9TaUZQQmVBSzNQUVFRajdOUTM2Q1pnQStLaDlFeUFxcWd6cEJRNGg1dzRhWkg2VVJsaWR3cm1salNpeDVzZ0ZYNEY2MGFKR05YbXp6WWtsSnlmMUJxc2lWckZPZ3FOaDAvNXViSnIyNGFGRXAzTStrUTU3TUN3QUY3cEVqUjFycEJzNEtldUQzVzFsM050T2tRNmthUlFuWGZaZkwvK1kzYnF6N0VkM2Y2S1p5UEl3WWJwZTRiRXVXQlZmZ3BoYm4xOVRVUENuaGpzdTV5NmhLQ2dxTTMzcHI0K1Fud1FBdFNiUGt5UUNjNGJZME5qWXVwWGVRM0pOUlowWTJObTRLRkJhYjd0bFNkYzFTcWpCcEY1NkpCaHd1RUk1aE9YZnUzTjMwck9TL3hrMHRXVkZHS2pCMG1QbGZOMWJPdVJ0TTBBSTJFdW9tSnhKd05CeC9paXgwUWZrTnVwSittdEl5U0FVTXBTUHluMTZ6NWZQZklDbllraWNNOGtRQnpuQ2JxNnVyNTlQdDkrVTBGQWpZWlpBSzRKNithY3pFL0JmZlduLzFmSklqb1hjOEV3RTQ0RWE5NXZYcjE4K2d0MG10cGpRbXg4c2dGVkFWSUVnS0prekpYLzJmcTY2YVFabUFITXpFM1pJbkNuQVRQUkJjTkcvZXZKVTB0MlNJMml1WmtBb0lDaGlOZVVNK082ZDQ1Y0xieHhWUk52N0N4eDN3ZUZlSUh3d2FhcjE0OGVKVFE0Y08vU21sWlVpeUF1azREaDVPZ3M1TzN3c0xQcmZuUVNvVDl6SHllRnB3L0ZoUW4rWG8wYVBmbEhDSE82VnltNmhBU1lucHAyOXYrZHczd1E0dFlDaHVoamRlZ0RQYzVqVnIxa3liUEhueU0ySUhaRm9xTUpBQzQ4WmJuL256aTFkTm8zSng5Y2ZqQ2JoNTRjS0ZSZlM0MlFycGR3OTBPdVYyclFMd3g2LzlRdkdLaFFzVmZ4eVF4OFdLeDZNUy9FZ1V2NXZtR1R3NVpNZ1FlYWRTZS9hU3ZKNXBQcmdvajczRDkxL3pyOTd6RU9YRnhSK1AxWUtycnNtK2ZmdHVwTm1CRW03eGJNbDAxQW9VbFJqdldiMXU5bzIwWTF4Y2xWZ0JWNnczdVNWRk5ONzlKTDNMTHVvT3lSMmtBcUlDWUtoaXN1M0pCUXZHOHRCaFRJekdzak5iYjh2TEw3LzhDM294ejNTeG9USXRGUmlzQWhhTGNmcXlQNDM1T2UwZjg2aktZQUZudU0ydnZQTEs1RkdqUnVIUkpCbWtBbkZUb0xUTTh0Q2ZucGs1bVNxTXlWV0pCWEJjV0ZybzZady8wWitWd3JqMVRGWWtGU0FGd05RWDV3LzVOMHJHTkNGck1JQ3o5Ylo4L1BISCtNYmtWK1Vaa1Fva1FvR2lRdFBYL3JiK003ZjBRZzVXd1Y1VVlUQ0FZeC96cmJmZVdrdzNkSjZJNm1peXNGUWdTZ1hHVjlpZVdIanJxR0xhalYyVnFHcUlGbkMyM3VhLy9PVXY5OVBucml1aU9wb3NMQldJVWdHTEphOWl5YThxOEhBNkF4NlZGWThXY0pRMzBTZXdoOURySG40V1pWdGxjYW5Bb0JRWVhtcjYyZmUrTndHelVuSGRGeFd6MFJSbTYyMVp0bXpaVCtoRjlHV0RhcTNjU1NvUXBRSW1VMTdabmZlTytnbnRGdld3WVRTQW82d1pOM1hLeTh2dmpiS05zcmhVSUNZRnlrWmE3cjFtd1VqYy9HRlhKYUw2SWdXY3JiZjUrZWVmL3dINTN1VVIxUzRMU1FYaXBJRFprbGYrbTk5Ti9BRlZ4NEJINUl0SENqakttZWhiT2JheFk4ZmlEcE1NVW9Ha0swQlcvT2V6WnhkSDlZYXNTQUJuNjIxWnZYcjFIV1M5SnlhOVovS0FVZ0ZTSUQ4L2IrS2pUMDIvZzVJUisrS1JBSzVZNzNIanh1WFQ4b0JVV2lxUVNnVkdsVnNlb0NuWmZIZHpRSDRIS2dEcmpjWDh4aHR2L0IxTnFKcWF5czdKWTBzRkxQbDVVNTliVmJFUVROTENmT29LRXduZ0dIczAwMTNMNzhucHNMbzZ5ZzFKVWdBTWpobGI4RDB3U1F2WUJPUzZZU0RBc2QzMC9lOS9uNTRoSHJwSXR4YTVRU3FRUkFXS2g1Z1dmZldiWTRiU0lRRjRXSWJEYmNRdkE5dk5TNWN1dlkyZXM4VFZxd3hTZ1pRcllEUWFiSGZmVTM0Yk5XVEFJY053Z0dPYkFqaDlQK2M3MGoxSitYbVZEZWhWQUN5T0xzLy9EcTB5NExvYzYyMWc1OTMwMUZOUFRTd3NMUHlpVkZjcWtFNEsyQXJ6dnZqUHY1MkdJV3YydzBQNjR1RUFWNnozNHNXTDc2QmZqRjY1ZE9xemJFc09LUUFtNS85ZGlXakZvd1pjR1QyaHg5RytuVU82eWE1bWtBTDBXQnNEemxhOFgrdERXV2ErdURTdFdyVnFCbzE5VCt1M2w4eElhd1VzcGxGcDNiNTROWTdtaWsvNzAzL014TnRwZVRTbG54V0hrNjROS3VDZi9leG41OHVMUzYwODZiOCszUHFnNFdETkh3ME81eWY5R2t1Zjkrc1g2TjN0d1htYVZXd01rVVd2K1E3ZUxWU2hIazFtdjMxMEtnOVZydC9oL1BTdFFvTi9QbFZ4aEJZWWE3QWJWQ3djNFBReHp4SFhTOEFOaGtaN2phR3E4VzhHaDZlZDlNdU00QzJlYnJEN0pocDZDSUpzRHI0ODEvVUd3NG5ucVk4TWVGQjN0WURqRjZCWThLS2lJak85cWVxNm9OSTV1ckwrMUw4Yk90MlhNNjczUHJQZjRPandaRFhrL3A2ZTY4QnFWMWNYQXg1a3hVUDU0TWd6clZpeFlwYkpaQ3JOdUxPYWdBWm5JdHlRd1dRMkdncHBYbEtlRWVjOE93T043NVYrL1lFclpsSHYyQThQNnFpZUJUZGRlZVdWWDVMdVNaQldHYm5Da0RzN1BRYS9QeU83RUw3UlpJNUhUQ2orRWhYYVR3dDdJS3BmcHJYZ2ludENCVTNrZjgrVGdJZlhObE8yQW5KYmljVkF0N2l6TG9CUjJ4RExQT29ZVy9DZ1AxZWlCV2Y2VFhSclBwLzg3N2xacDBZT2Q0Z2hoeVVQTlVLUnlkSlliYWE1SXlZVTVsOCs1M0JSUDVoanhZcHJmOU5ZTno3enpET2ZwbDlHU1NaM1dyYTl2d0lNT1JtOXJBclVuNUtiZnp6dDA5UXBoVit4Y3lFdCtQang0MmRLOTBTVUtYdlNERGtzZWRZRXducll5SUtaMUo4OXRPaGFjTjVncExuZlU3T204N0lqL1JSZ3lMUEppRmxzWmpBTEM4NGNLLzFHQmdkc3dMcUpaZzlPemFiT2N3ZGwzS2NBSUM4b051TXRybjJaR1pwQ0h5eFcweFhVL0g0WG1ndzQ5eExyUmdKOFNvYjJWVFk3Q2dWVXlMTmduTHdYY0lYZlhna1VwdnY1NEtXbHBlYUNnb0tLS0hTU1JUTllBUVh5SXJQQjFlWFZ6T0xJckU1WnJjYUswbEtidWFYRkNiRFpZQ3N1Q2ZjRW1jYmYvdmEzNHltMmNxYU1zMThCaGp5VFovM1RtS0IxN25jbmdWMVk4WDZBTS9YR3E2NVNQc2FaL1dkVjlqQklBVUJ1TFNTZm5QRmdJaklvSGoycENGTzd4UjZvRnB5N1lSdzVjcVM4d0F3NjlibXowZ2M1Y01pd1FFMHVLckgwRzBrUmZYREZRYmZaYkJNeXJHdXl1WEZVUUlHYzNwL1E3ZlNSVDY1TzZZampFUkpYVlg2aENld3FIUE5Sc0lMQUZqeVAzajJJejBYSWtNTUtCQ0EzWmR3UW9zbG9CTHNxeXppRm9nWEhCaU5Oa1MzT2hyRlJkRTZHd1NzQXlQUEprcnZKa21lQ0hWZVlOZVVCY1BiQmxjN3ppa285QVk2WGpNc2dGVkRta3lzWG5xQWpBd0lONTROZGxXV2tSUXVPTHVSSndDR0RES3lBMFpSbnNOck01Sk9uL3ppNXlaekhnSFB6MVZFVVpDamtTOEJWYldTaVZ3R0dYQ0VralZVeEdsWEExYjg1Yk1IVkRBbDRHcC9CRkRhTklYZTd2R2s3dUVMK2lPaGVLMHp6S0Fxa2t4WThoUUJsd3FFQmVYNEJKbWlsWjJ1TlJ1WDZVZUdZVzhnV25OZWxEODVLeURpa0FneTV1enY5eHNsTlJ2VWlVMjE3UHd0T1c3VFFxNFZsUWlvQUJSVElyVFF6TmMxTWVVOWVEOWdOYWNIVlB6cGVyOWRCSDNtVmo2dEpsc01xd0pCN3lKS255emc1dlRYQUlUUmFZWnJId2RWOG44L1hwYTdJaEZRZ2pBS0FuT1pocDgzZ1NvL2ZvR1ZYR1FmSEQxRDlFY0tDaCttVDNDUVZDRktBSWZlNnlaS3JGQVVWU2RxSzM5Y2pzcXR3TGZyZ2FFaVB0T0JKT3g5WmN5QkFiczdIM0pVVWQ4bW5XUENnbjVsNFFhbHNrSUNuK0NSbDZPRVZ5TWxkOGJycDlWa3BNdVU5ZmorN0tDcmtJUzE0djlmcFpxam9zdG5KVllEdUpKSWxKNlJTWU1yQnJLOUhBVnlGRzcxbkM0NU1aWkUrZUhLaHlMYWpNZVEranovcGh0enZ5NE1QcnJJTWJVVUx6b0RiczAxMDJaL2tLZ0RJVFJaajBnMjUzKzhIdXd5NDBtbTI0S29DVHFlekJlWmV6Z2xYSlpHSlFTZ0F5QTBFT1N4NU1nTGNmcCs3cDBWN0xMYmdUTDIvdGJYMXRMYVFYSmNLREVZQnR1U0QyWGN3K3pnNnU4RXVmbEhNcytLaVlBVkJ5VHg1OG1TZHZNZ01DQ0wvajEyQnBFRk85TGFlZDlZeHg3MHQ3MkVMam5VRjhEZmZmRk1DM3F1T2pPS2pBRU9leU1FVmZPeXFldnRGTGVEOVJsSDhHelpzNk96dTdyNUU4MUZHeHFkN3NoYXBBSTFtd0NlbjV6ejkzc1Q0NUg1UHo2VVRleTUya3RiOVhCVG9yMWp2M28xK3U5MStScm9wa0VXR2VDb0F5STBFZWJ5SFY4QnF0OHQ3aHRvS3VFTUNqbjRBY3FXQXcrRTRqUXdacEFMeFZrQ0JuRzd0SzVERFo0blQ0bmI1d2F3SXVOSjA5c0ZGQys3RFNJcTA0UEUrdGJJK1ZvQWhqNWRQamlIQ2Jyc1hnTk5UR01FV1hCd0hWeUZ2YW1xcTQ4YklXQ3FRQ0FVQWVROFpjSm9CR0hQMStLRjBOSHZBTEN3NGM2elVHOHFDKzk5NTU1MUROT2txOWlQSDNIUlpRVFlyZ0p1Sm1LUVZhNkN2T2ZmVWZOaHdpT29SWFJTRlh3WWN4MEFHQ3Zqb0k3Q1gydHZiYTZXYkFsbGtTS1FDc1VLdVhHQjJlV3NyMzd0d2lkb3B1aWhLczdXQU0rVGU1dWJtU2dsNElrK3RySnNWWU1nSE16MEUvbmRYbTZlUzZxSTNFK203S0h3c3hZTFRpcSsydG5hM0JKeGxrWEdpRlFEY2VEZTVFaU1kNlVJUHpMVTBPbmVEMmQ0RkRLdEJ6NEw3bGk5ZlhrbXpzNElLcTN2SmhGUWdBUW93NU5GVVRZVDY5Nnc1RHdzdXVpZUsvNDE2UWdHdS9CTFdyRm5UU241NGpiVGkwY2d0eThhcWdBbzVyajBIV0hCN3Z0dmhxVG55VVZNcmxXWUxEcmhEQW82MllRT3NOdndaTHcwWDdwR0FreEl5SkZXQmdIc3k4Q0hoZjl0YjNQajRxOElyeFdCWGhSczFpQlljNnd3NGZnMWU4c04zU2NBaGl3ekpWb0FoSjFkYy8yWW5OYXE1b1dzWFJRQmNkRkhVNW9vM2VwQUp3Qmx5NzlOUFA3M25wcHR1Y2hVVkZSV29lK1Jnd25YUlptaDNZQlFxdTRPdU1RdXlpWDBhNkdRSEN1aHMxRDFHWDdWQktWaHA3QVBndGZ2U1M0ZGNtMWJVc1FWbjZ4MTA1RkNBbzZEaXozejAwVWVkalkyTlc2ZE1tWEtMMGFnMTlrSHRpSGlsOW55ajRiMmRWWWFPTHZFVkZoSHZucEtDWHM5WERVYTNtNDRkcEYxUVc3VGlCMjNVV2RIZFIrY3c4RGxEQmxDZ0UvUzMwQTVoOXRPcEx1YnNhRy9yNkpXbkorZ05ydGJtclJkTzdzWU1RdmEvR1hLMW5WckFzUUdhb0NETXZ1Zmd3WVAvTjJuU3BMZ0Ivc0piNncwdEhXaFRaZ1YzdDR0ZWlkQk5qWWJra0VoUGVtMi91Q3lqcHQxZnUxMjdmN0xMYTQrdmJaKzJQZHJ5MnZXQjl0ZHUxKzZ2UFY2Z3ZOL3ZNelRVSHY4L0t1MmhCYXoyZ3hzMWhUTExxSUVCOTk1Ly8vMDdhUHBzczY2MVFTMVJoRXlFRzkzTHR4YlFLeEg0KzdnUVBkTEFaUkdMYWQ1ZnpPTXlZb3h5WEVaTWkyWEV0RmhHVEl0bHhMUllCbWx0UUZrRTNvZlRTbVlFL3cyMHYzWTdINGRqN2ZFQ3JvclA0Mm11MnJaaEIyM1Z2Y0RFbnVFQWg5bjMwTXhDNS9uejU5K0xGK0E0YUthR0FPVDV3YnhwTzZNOVg5ak9lZHF5cVZqbnR1anhvMjFUb3N0cmp4ZmhlbGRueDN0dXU5MUp4V0hCUTE1Z29xcFFnQ01mRnB5dHVHZlRwazN2MFB0U2tKL3pBWkJiTEwyUU15UmlESVVZQ2pFdGxrbGxXbXlUbU5acmsxaEdUTWVydkY0OVlmTDk5SmJOcHZyYXQ2azVvbnNDWHZzRlBjRGhwdUJYb2ZqaFM1Y3VQZHpXMW5aS1d2R0FmaGFHdkorY01pUFJDb0JCajh0MTZ0Q09UVWZvV0F3NFdBV3ovVUtvaTB3VVFtR0dISlc0YVV4OFRWbFoyWVAwRFI5c3ova0F5Qkc4SHNnalE3SVVBT0QyanZZMWREd01hMEY4aGpzazRIb1dITzJGeVZldCtNcVZLOStoaDVIbDJZUXl2UUdRbS9QSlhRa1hjS2NDZ2U5WWNGckpEUEZmdE9WRFZKRldXZEgyWjREeTlQcGpUOTJSL2U5UUg4RWlQQXd3R3RJOW9YeGRIeHpiOEl0Z1A5ejkwa3N2Tlo0NWMrWmRPZjhLMHZRRkM0MnNLSkF6d05vWVJmbWtpV2x0T1Y0WHk0aHAzcDVwc2RnSE1hM1hEN0dNbUtieUFMS3JzLzNkTXg4ZmFLUWtMRGdBQjZNaHJUZmxSd3c0ZmkzdVYxOTk5UVd5NHJxL0ZsU1lpMEdCM0dMSnhhNG50YzkrcjlkLzV0akhMOUJCMlQySkNYQTBQc2lLUC9ua2s3Vm56NTU5WDFyeC91ZVZJUTl6OGErT0pNc3lnWUdtYUhUQVhWZG5aK2Y3eC9ic3FPMEZmRUM0Y1piQytlRFlEbXV0dWltVTd2N3JYLy82M3g2UFIvZFBBbmJLMVFESVRjb1FZcS9mRFNId3A1aGpNUjNJN2I5ZDcwKzNYajdYUGRqNll0MWYyNjZCNmh0b3U3YSszblc2YzlsVGYvTHdmOVB1dUowc3VpZGhQWXFCQUVkelVBRWNlY1ZOK2NNZi9uQ01yUGcyYWNVaFRmOWdvWXRPazVuY0ZUNVJLSUkwQjA3cmJlZHlrY2F4MWhmci90cDJEbFRmUU51MTlkRTZSazRjOW81dGgzZCtjSXhXMlQwSmUzSEoxVVFDT0t5MUNqaWx1OWV0Vy9jOFdYR3VROFlhQlZUSU5mbHlkWEFLK0gwMDcrVFV5ZWRwYjdiZWdBOU1EdWhKUkFvNFczSDhlcnFYTEZsUzNkRFFzRXRhY1ZKREowaklkWVNKTWh2VzI5blZ1ZXZBdHZYVnRDc0R6dFk3TG9DalNXekY0ZGdEY3RmYXRXdWZrU01xa0VZL0FISXpqYTVnTGpNSFRnY205QWZ5T1E5bE9NM2JvNDNGT3NTMFhqMWlHYVFIQ3RHMkQvWHhQbUthMnlQbWlXbmUzdVAzK1p2cWpqOUQyMXkwZ0Qwd0dKSDFwbklEWG1TaURBSUFEN3JZZk9paGh3N1N1OFRmbG5OVUZIMTAvelBUUmFmSmJGWk9NcDlvanJFVHAvbUVpbm02bFliWkVHMTkydkxjRHIwNDJ2WnA2OWZ1SDI0N3BzUjJ0RFMvWGJWbC9VSGFqNjEzUktNbkxGRWtMZ3FYWlN1dVhHemlnQTgvL1BEVDlHQnlLLzZNeUtDdkFFT3VYMEp1MFNvQXByemQzYTNWTzlZL1Rkc1k3b2g5YjY0dldzRFpGOGNCWFpzM2I3NVVXVm41WjNuQnlYTHF4d0hJNWMwZ2ZZV0N0OEI2TnpkZStIUGo2ZE40VmhEdUNaaUwyUGZtMnFJQkhQdUlWbHlCL1BiYmIzK1RIbXVybGhlY0xLbCtESDljSFVMa1l1eWZJNDVrd1g2OGo1am1mY1U4TWMzYjR4Mkx4eERUZXNjUnk0aHBvVHdlelhOMWRWVnZmZXVWTjZrSXd4MjE5VWIxZ3dHY3JiaHlzWWtHckZxMTZqR1h5K1dUcmdva0RSOFV5RTAwaVpOUEtJb2pIV25nc25yN0Q3UTkwdU5FV2k3YTR3MVFIZ3o1dkY1ZjNaRURqMUVUQURkZlhFWnR2ZEdGYUFISFBndzRmbEdLRlgvMDBVZVBIRHQyYkRXOWtSYmJaUmhBQVlZY1dNc2xXQU1EUGN4Z2I3NjhtbTdxWUw2MzFucUR2YWpDWUFESEFSaHl0dUxPQng1NDRObkxseTgzU2xjbE12MEJ1WkZHVjJUb1U2Q0g0SFk3bkkzN05yLzNMT1hpY1RTdDllNHJIR0Zxc0lDekw2Nk9pKy9kdTdmNXRkZGVlNWcrZitLUnJrcGs2cHZwbHI0Q09ic2JPUndES0JweTlweXVxWDc0WWtOOU02MHkzRkdOZTJ1Vkh5emdxSWNoVjYwNERSdnVJOUNmcFJ0QTJ1UElkUjBGRk1qbFUxTDBwUWN2alpvMFBIdmdndzM3U0NxdDlRWnJnd3F4QWc1WFJiWGlsSGJkY3NzdEsrdnI2M2ZJRzBDUm53K0dQRmY5Y2JwYmFlanFhTnV4WmZYeWxXQ29kK0c3bG1Bc0pZRGpET0xnV1BpQ0U3ODh4NE1QUHZnYjhzYy9rZjQ0cVJGaENFQ2VlejQ1L081dXAvT1RxbzN2L29ha3d1dk93QkJjQURERmZGRnljQ0VXQzg1SFJDTXdmSUpmSEJybnBCdEFUYSsvL3ZxdnlCLzNTbitjRklrdzRKYStVUnhDekhLZkhHYVovdEo3NlNtZFg5RnJJSnBvVmVHSFlyREV3NEtVSEh5SUIrQm9KeHJEcm9yU1NIclZSTldlUFh1ZWd6OHVJWS84QkNtUUc3UC96UVZnQW43MzVhWUx6KzNmc3E2S0ZCTGhqdW5DVWxRN0hvQ2pQb1k4eUZWWnRHalJjcHFRdGRHdHZMaFNQS3hNaDFNZ1lNa0JlZlo2NVRSSjBORFoxcnB4eTJ2TGwxTkh0YTRKRENhWWlqbkVDM0EwaENIblVSVTAyckY0OGVKL29Zdk92Ukx5Nk02VmlWd1ZveW1lcHllNjR5ZXl0SThzZDFkSCs5NHRiNno0RnpEU3UvQ3dZTnpnUmgvaXFTQUFGLzF4Tk5oQlg0bm91UFBPT3graUJ5UnE1S1FzU0I1NVlNaXp5UlhIaUVtM3ZiTm05OW8zSG5KMmRIU1FHZ0JjaEJzTXhjVjZRK2xFT0h0b25OakFQSUxjVzFkWHQzUCsvUGtMUHRoL2VHZ2VQcWNsUTBRSzRMM3N5bnZCczJCS01tWUl1aHoyYy9zMnJmMVpZMzN0SnlSQUZ5ME1PTnpidUZwdkNKd0l3RkV2UWhEbzVJdDNkM1oyN25hWUNtNm1HWFdGUE5FOVVGVCtIMDRCL3ZoQWdQSE05TXY5ZnZwZ2xOUFpmR2pucG50T0h6bDBsdnFyaFR1dWxwdjFUQlRnb2dWWDB3Y09IT2lpeDdqMkR4ODk5aXMwSEpZdkllZlRNSENjMS91RmpVd2NrY0w5RUhwaHB2MzRnWS91cTluelVVMEl1R0c1QVhqY1E2SUFSME1aYkk2VnhqZlYxN1VWbFF3NU9xUjB4RUthaDJHUmtFZCtUbFhJSVcyR0dISzg2dGp0Y2pucWp4NzRwd05iMzhkdGVORnl4MjI4VzAvRlJBSXVIaE9RcTZCZnFEMSswV0lwMkRkczFLZ0ZOQ1Jta3o2NUtGWDR0QXA1QnZqazhMbmREa2ZyaVFON2ZuNWc2d2FNZFRQY0dQTk9PTnhRTXRtQXE2RFRuYXNXbjhlMXM3Ujh3dlZreUV2NHhLRlJNb1JYUURVSWlpR256MTZuNGI4ZUd1ZDJkOWticW5kK2NDKzlidTBvOWNoT0N3Qm51SEV6SnlGK045V3JobVFCamdPeUJWY2h2OXh3b2JPcm8zWGJxUEdUcmpWWkxHVjhNYVcyVGlaMEZRaEFUbEt5cXJvbGs3OEI0OXowSHNHVCt6YXR1YS91eU1IVDFBS0FuWFM0MGZOa0FvN2pJVERnU3R4KythS3orY0xaRDhvblRaMU5yeUVlQTU5Yyt1VUJvUWI2WDRVY0JkUEFKOGR3SnQ1Q1JUTUREK3hZODhZdkdzK2NhcUNXYWQyU3BGaHUxaTdaZ0FmQlRZMVExdW1keis3enA0NXVIWGZGakNuMEFzdEplVVlKT1orZ2dXTFZYVW14S2Nlc1FIcVdrbTYvdDJ6ZCtzYUtKVzBYbXk1VDJ4bHUzTWpCRE1Ha3dnM3RrZzA0am9uUUQzUzYwdmJWVmgvY1BtYnlGR3UrclhBMitlUmt5R0dXWkJoSUFkWXBZTVNUNzVIMzBCZzNmY3FscDYycDRlV05yeTcvTjNyVldqdTFXWVFiRjVSSmh4dTZwUXB3SEpzaDV3c04rbml0MTMrcXV1cEE0WkNoTlNWRGg4ODFta3cwd2lLdE9jUWFLRUFuQ0pyTW9Nd0lwSkVTajZPcmxhYThMdHYydjYrK1FlZVFMeWJGTzVRcGdSdGFwQkp3SEo4aFI2eUNmdUZVelFYNlU3ZDVSUG40Szhrdkw1Y3VDNlFhT0tpUUo4RWZKMi9iZ0l0SlIzdmJ3YjFiMXYzaWFPWDJROVJDV0cyMjNIQkp4S0hBWlAvK0ZNSFNCWERBellzQ1BWMThkcDA2ZUdCamVjVmtrN1d3NkRQU1pWSE8xNEQvc2JzeVlNRVlDdURPcE5majdtbHBPTDl5dzZvWGY5OTZzUUZ2bjRMRlpyaTFrNmRpT0Zwc3U2WWFjTFNlZjlsc3hWWFE2YytkNzlTaHFvTjA1L05JMFRCeVdZeHdXV2pBUVBybVljOTZuejd4TmVXQmh4Um9mTnZwYkRsN3JQcFgyLzczZjk3cWRVa1lib3h4ODhWa3dtNi9oKzI4Wm1NNkFJNG1pWkNMb0N2cDg2ZU9OOWliV3pZUEhWayttbHlXS1hCWk1DN1dkeUkxdlpLcnZkcXdyTEVKQXJBeFNvSnZnbmEwWE5wY3RYbnRrcU9WSHg2bVd0bGlBM0R0RFJ3WXFwUUhrSkpPQWUzQlhGcjg4UENtU2lzdCtPS3FqWlpDcEsrNTViWXZWRXk3OHBjRlJjVVQ4ZVJMM3pBWmJaV2hud0lBTTViQXczL2RYZmF6OVNlTy92dmU5OWZzb3ZyZ2dqRFVQQVRJMDExeHdQajhzbUpwZU8rKzZRWTRtaFV3endISThaZzV2clFLeUJsMFcwRkpTZkVOdC8zOUQwcEhqNzNMWXJWYXlYV1IxcHdFMGd1QkdZalJNYWVPa05CRHRjMU5EU3MvWExQNkZWZG5KMFpJWUtteEFHejJ0VEZLd25PNW96c1E3WmpJa0M0dWlyYVBMQkppTExBSzdOUDV2RzYzdC9iUXZrTU9SOGVtb1dXang5RnIwQ1pLdDBVcllkOTZueXZIdGtNL3hod3Vka2ZzcmEwZkh0ejYvai92Mi96dUI2UzVPUHdINnkzQ2pmTVQyNStLdnViR05aV09GbHpzSU5ySExndGJjN2JvY0ZzVXl6N3ZxOSs2b1h6SzlQc0tDZ3NyYUU2TDRyYjBuVlN4dXR4T0J5eDVhQTNZei9hUm4rMXlPT29iVDU5OGR0ZTZON2RUYWJiVWJMVXg5TWMzYnRqb3NFRUtYWGtLYzlNZGNKWUdrRFBvOE0wQk9mdm5DdVJtczdsZzd1SnYzMVErcnVKT2ExSHhWTHpjRXY2NUJKMGxEQjB6MkxpQUpELzdWTk9GK3BjcjEvNXRFNzJ1aE1IbW1NZTFSVjg3TGEyMjJOTk1BUnh0Wm1zTzBHSE5HWFFBenJBanRuNXgwVGUvVkQ1NTZwMEZ4U1ZYNFkxUm1Jb3JRU2RsaEtDQWpmRnNMMWxzZStlUnB0T25YdjdvdmJkMlVCR0FqQVZnY3d5TERiRDVqaVRBVGx1clRXMVRReVlCem8xR20zSHR3S0REbXJORlZ3Q25kU1crNXVhdlh6TnU4b3k3Q29jTXVScGZWZ2k4aGlGM2h4Y0RMZ3BtL0dGaWxNZmc2T2pZZitIMDhaVTBNcktYTkdPd3hWaDBSd0ExWDBoU01qTkNKZ0lPWmRGdUxLTGJBb3ZPUTRzaTZQbFh6Nzk1OXRpcE0yOHJLaG0yd0d6Tkw4VHJHSExsb3BTaHhvUW8zRnIzZHJzZFhaMXRXeHRPMWJ5emY5djd1TDBPaUVXb2tZYTE1a1gwc3pQQ2FsUGIxWkNwZ0hNSEdISUduVjBYQnAwdHUyTGxpNGVOS1ByYy9DOHZLQzB2LzBwaHliQTVOSTV1b2dsZGl2dVNiZVBwR0FrQjNKaWZqVStDT0RyYnFscWFtalljMkxaeHE3M3RNbTdRc0hVRzBBdzVRODNEZnJEYUdlT09NQlJpbk9tQWMxKzBvUE9OSW5aZnhGaXg5Qk9tWGpWcStweTVOdzhyRy9rVm1wNDdsVitYRnZEVk04K05VUzExSDlSMFM5MXhxcTM1MG9ZVFZaWHZuenQxNUNLSnhRQXozR0tNYmJEV2JMRXpHbXdSREU1blE4eWdJd2Jrc09oczFRRTU0TmJHNXF1K2NNTzBjWk9tWFc4Yk12VHFnc0xpV1FTN0ZXOTVoYytlcnNBSEErMVhYbVJKbHJxYlhxeHoyTm5SdnYvQ21aTWZIdG0xL1NUMUY5WVk4QUxtVURHMnM4V0dDNUlWWUZNL2xKQXRGcHo3d3pINnhiQURkRjRBdUJaNHhhSlR2ckt0b0xqWU91dmFMODBxR3pQeDh3VkRTcTYyMllvL1pUU2JMTGhicWp3enFzeFBwOUpLQ01pWHFCR2FBTVE0VU1EMXhVMFk4anNNbU0ySEo5WnBMcHJINmJRZmMzVjA3bTl1UEx2djhKNGRoMTEyTzF3T2hocEE4OEtBOHphMjFteXhsZHFwZkZhRmJBV2NUNUlJT3Z4MDBWY1hyVHREem5rY200YVdsUlhPdUdiZVo0YVhqZm0weFZZd01UL2ZPdEZzTFJobndzTVl5dkNqVVFHLzc2S1ZENjJOdFZJSG9OV1dVaUFtb0hGUkNKQVZYNXBpK29LZGsrenpCYmU3KzZ6SDZUcmIydHo0OGZHOU82dmJtNXR4VnhHUXNpWG1tTUZHekhtSUdXalJ2dzdkR0NxYzZVR3JlcWIzSjF6NzBWY0F6akZiZGRHVlliQzFzVmhXK2FGVXpQek1xTkVUSjFZVUR5dWJhTFVWVmVSYnJSTk1Gbk9aeVdndXpBdkFqOWZUb1o2QW13UExqeFVLQ2sxRU1sdG9pcjMwT0pPamh5RDIrYjBPbjhmYjdPN3VQdGZ0N0txM3R6V2YvZVRzMmZyNm1tcjQwQXlsYUgxRmVFT2x4YkxzZm5Dc3RDZWIvMlBOczdtUDJyNmh6K0lDZU5teWN3d3dHV3FHbmRlNWpCZ2pqVVdzTjQvY0hmUFEwbEZGOVBpZHpWcFVXRlJnSzhLTVNJUEwyZVhvN3FMUnV2WldaM3ZMeFM1eUt3QW11d2djTTh5STJlcUtNZElNTkVPTWRiRU03OHQxY2t6RmNpUGtJdURpbVEwQ2tqWXdxQnlMOEl1QVk3dTRqY3VqUHFTNVhrb0dwYkV1QmhFNFRyTjFaY0Mxd0RLMEREV3ZjM21PdVQ2T3hlUG1URHJYQVJkUE5HdkJjQ0xXZ3N2ckRERWdSem1PT1Q5VVhUZ1c1d002QklaUHV3NUlrUWVJeFpqaDVSamJ4RFRXc1NCd0hGakwwZjlaOEJ6dGZ0aHVzemFJd3kwaTFOcHlPSUJZajNoQUJsQ01rZFl1RExzMlgxeEh2VmlYUWFNQWk2L0pscXM2Q3JCZURES0toY3NUdCt0VUdRUW1ROHJ3WXA5d2VYcDF5dnhlQmZqa1NFRmlVMENybzNZZHRXdnpHRnp4eU5vODdicFlWcVlqVU9EL0FacmJtN1RzMXJwRkFBQUFBRWxGVGtTdVFtQ0MnLHJlZDonZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFMZ0FBQUM0Q0FZQUFBQlFNeWJIQUFBay8wbEVRVlI0QWUyZENaeFV4WjNIcTgvcG5oa0dtT0VRdVFTNVZDVHhXSEVEQmx5TmtjaWFrTU1reHVqR3VPdkhPMjRJS0NhZTBVUWxLd215cm9vY29xdG96R3BBNG9GaVZBUVU1SWFSY2Nod0RzUGN6TkYzOS81L2IrYmZWTC9wN3VtZTZidXIrRHlxWHQzMXIyLy81Ly9xMVh2UElKUkxwZ1FNTVZZZWlER2Z5aGFuQkdLZGdEaXJ6WXZzTEx0SVBndUIwL2xjNyt2aDV2Tkl2cjY4T284aWdlNkVINlZvM2lTeGpPRHJ3MXJjbTIrKzJmK01NODRZVjFoWU9OUmtNaFVaamNZK09BS0JnT1pUWERHVkxUWVlESDBnTllwdklhL1Y1L08xK3YzK0ZvcHZnWStENHRyYTI5dVA3TjI3ZDk4VlYxelJpT3k2ZzA2RGNSeUdyMXdZQ2ZDRWhVbksyeWlXaVFZdlNRRys4YWMvL2FsbDNyeDVvL3YxNnplK29LQmduTmxzeGpHV1FCNUxnQTVNaHJUb2gxQkwwRmQ0dlY0Yysxd3UxNzZtcHFZdkhubmtrZjByVnF6d1VKdCtPdVFmQUxyQm1oL2h2SGM4bWZrdUNCbG1EZWk1YytmYWI3bmxsZ3VMaTRzdnR0bHNYeWVZenlQZ3JKa2dLUHBCdVFuNExVNm44OFBXMXRaMWl4WXQydmpvbzQ4NnFHOTY0UE1lOW53R25LRTJFaGdHMHREV0J4OTg4SHpTMEJkYkxKYnBkRXltZUZzbUFCMURINXdlajJjVEhSK1FobDkzNzczM2JpWU43Nlp5QUZ5R1BvYXFjaXRMdmdFZUF2WDExMTl2ZS9qaGh5OG5MWDIxMVdxOWxLWVd0bkl1dUZhMzI3Mld0UHYvM25QUFBXOHRXYkxFU1lQS1M5anpBWENHR2o2MHRmR0xMNzY0WVBEZ3dUK3gyKzNmcC9NeU9uTFoxVHNjamovWDFOUzhPSDc4K0U5cG9ORG9zbGJQYVRNbWx3Rm5zRFdvTjIzYWROcTRjZU4rVEJlSVA2RlZqYkc1VEhTa3NkRUtUUVZkcUw2NGI5KytseVpQbmx6VkNib01lNlNpV1J1Zmk0RExZSnNxS3l1bmtyYWVDeE9FTGhKemNieHh3MGNYcVFHWU1LVFZIejM5OU5NL3BncDhkT1FrNkxrMDRSaUxwcTNKTngwNGNPQWJBd1lNbUV1ckgxUG9YTGtJRXFEVm1QVjFkWFdQamh3NThsM0t3cUF6N0JGS1pVOTBMZ0FlQkh2WXNHSG1qUnMzL210cGFla2NNa1BPeTU1cFNIOVB5WHpaMHREUThOaUZGMTY0NnZEaHcxN3FFU0RQZXRDekdYRDBYWU9id0xZUTJGZVZsWlhOb1Jzdlo2WWZsK3p0QWQxWTJsTmZYdy9RWHlIUTlUZVRzbTVnMlFwNDBCVFp0V3ZYK2FOSGoxNUFHdnY4ckpOK0JuZVlOUHJtL2Z2My8yTGl4SW1icVp1eTZaTEJ2ZTdhdFd3RFhOUFlOQXpUMHFWTFMyZk5tdlVBN2YrNGdTNGVBYnh5blJJd0hOOG96RHNlRlFaSFRXOWw0bS8zQkJhLzhubkRmVDk3dktxQkttUFFzMlpwTVZzQVJ6OFpidlBSbzBldjZkKy8veU5ramlSbEQwaHZxVWgzZWNzcnB3dEQyK0dFZGNNZkVMVU5iV0xld05uaUJhcVU3WE5BbnZHZ1p3UGc2S01KeDQ0ZE95YlNzdFlmMWNvSVNTT0tzeTR0aUpMYTh5U1BYNnd2cnhOM1RMcFg3S0phb00xeFpEVGttZnluUGFpeEowMmFWRUJYK1BkT21EQmhnNEs3NTREMnRxVEZLS2FjUFZoc09QRW5jZStrU1FLL0lqTWRZQ2hqRldXbWRvemhOcTFldlhyWXRHblRsdEtObXEvM2RvTHlwWHl5Tkxnc1A0OVhmUGhPcGZqWnpDY0ViS0dNdGMwekVYQmVJVEZYVkZSOGc1WUFuMU8ydG94VzkrRlVBSTVld0RZL1VDOStQdnJYQWplSjJEYkgybm5HdUV3eVVZSmFlL3IwNmJiYTJ0b0g2TzdhNndydWpHR2xTMGVNQmpGdzFBRHhldE1UNG9IcFoybGJpM0d0bEZFbVM2Wm84Q0RjYTlhc0dUNTE2dFRsdENsSzNXTHZnbFJzRWFuUzRISnZYRjZ4L3YwdnhIWGZXaWdPVVh6R21DeVpBRGo2b0syUzdONjlld3JkdEZsSldudUFMRHdWams4QzZRQWNQU1NUcGE2aVR2eHd3bS9FZWpyTmlGV1dkSnNvRExlWmR2M05IRE5tekdvRmQzd3daMUp1TWxrR2pCc29WbGY5VHN5a2ZtR0ZCWW9yclVvMG5ZQ2piUWpBUWp2L3JocytmUGpMRkxiVG9Wd1dTNEJvdG8vc0wxNCsrcmk0am9aaG9RTnpuRGJPMHRWd0VHNjZLL25MSVVPR1BFVzMyL0dMVnk0M0pHQWVVaUtlcXZzdjhVc2FUbG9oVHdmZ0d0ejBFSUtWOWlFL1Jqc0FIMUlQSXVRRzFTR2pDQWhEV2FGNHFIbUJlR3p3WUlHM0VhUkZrNmNhY0EzdUdUTm0yT25GTnMvMTZkUG4xaENocUpPY2swQ0pUZHhhZVk5NGJzWmt6ZnhNT2VTcHZBRFE0QjQ0Y0dBQjNjQlpSZy84ZmkvblpqTkRCcFN1VlpSb3czZDR4R3NqSHhUL1Zsc3JYSlNQbHhHakZVbElXcW8wdUFZMzlkaGFYbDQrWDhHZGtMbkxxa3JzRnZFOTB1VHp3UUFkS2RQa3FRQ2M0YlpVVjFmUHBYZVEzSmhWTTZNNm16QUo5TEdKRyt2L0lPWlNoU203OEV3MjREQ0IwSWJsMEtGRDE5T3prcjlKbUxSVVJWa3BnZElpOFp2cXg4WDFZSUlPc0pGVU16bVpnS1BqK0ZOa29Rdks3OUNxeVFJS0s2Y2tJRTRwRVFzcUh4YmZJVkd3Sms4YTVNa0NuT0UyYjkrK2ZScmRmbDlDUzRHQVhUa2xBVHdpWVJwVkpwN2JmYitZUnVKSTZoM1BaQUFPdUZHdithMjMzaHBQYjVOYVNlSGtQR0pDRlN1WG5SSWdTR3dUQm9tVmIvMm5HRThqQU9SZ0p1R2FQRm1BbStpQjRLSXBVNllzcDcwbEpkazVCYXJYeVphQTBTaEtMaDR0bHMrNlFCUlJXL2dMbjNEQUUxMGhmakRvYU1IeDQ4ZWY2TnUzN3cwVVZpN0ZFc2pFZGZCb0ltaDJpTVg5N2hSM1VwNkVyNUVuVW9Qang0TDZMSHYyN1BtdWdqdmFsS28wV1FKOTdlS0dMeDhVM3dVN2RJQ2hoQ25lUkFIT2NKdFhyVm8xZHRTb1VRdmxBYWl3a2tCM0VxQW5neGF1dWsyTXBYd0p0Y2NUQ2JqNWtrc3VLYUxIelpZcHU3dTc2VlRwZWduQUhyOXN2RmgyeVFUTkhnZmtDZEhpaWFnRVB4TE43cWJuS09lWGxKU29PNVg2MlV2eGViYlo0TEo0eUI1L211engyUlNYRUh1OHR4bzhhSnBzMmJMbFl0b2RxT0NXWjB1RjQ1WUE3VDY4Y2Z1OTRtSXFtQkJUcGJlQWE5cWJ6SklpV3UrZVR5OVdqM3RBcW9DU2dDd0JJRVRyNC9Pbmp3c3VIZmFLMGQ0VVp1MXRlZjc1NTIrbkYvT01renVxd2tvQ1BaV0ExU3pHdlhTOXVJM0s5M3BWcGFlQU05em1GMTU0WWRTZ1FZUHdhSkp5U2dJSms4RGd2bUwyQy84aFJsR0Z2VEpWZWdNNExpd3Q5SFRPNzhrMEtVell5RlJGU2dJa0FUSlZDcTg4Uy95T2dyM2FrTlVUd0ZsN1czYnUzSWx2VEg1THpZaVNRRElrMEtkQVhFRWJzaTd2aEJ5c2dyMjRYRThBUnhuemxWZGVXVXczZEI2THF6V1ZXVWtnVGdtTUhTZ2V1M0t5OW9GZU5sWGlxaUZld0ZsN201OTg4c2xiNlhQWEkrTnFUV1ZXRW9oVEFoYVRHUG5NTElHSDB4bnd1TFI0dklBanY0aytnVjFDcjN1NEtjNitxdXhLQWoyU3dJQSs0cWJycHdqc1NzVjFYMXpNeHBPWnRiZGwzcng1UDZjWDBaZjFxTGVxa0pKQW5CSXdtVVRaL1RQRno2bFkzTXVHOFFDT3ZHYmMxRG5sbEZOdWpyT1BLcnVTUUs4a1FHL0t1cGxlMFl4OTQyeXF4RlJmcklDejlqWS84OHd6MTVEdGZVcE10YXRNU2dJSmtvRFpKRTVaOW1OeERWWEhnTWRraThjS09QS1o2RnM1OWxOUFBSVjNtSlJURWtpNUJJYjBGYmROT2oyK04yVEZBamhyYjh2S2xTdXZJdTA5SXVValV3MHFDWkFFckJZeDRpL1hpYXNvR0xNdEhndmdtdlllT25Tb2xZNDdsS1NWQk5JcGdXSDl4UjBsSmNHN205M3kyMTBHYUc4YzVsZGZmZlZmYUVQVm1IUU9Ucld0SkVBYnNjYThmN080QkV6U3dYeEdGRXdzZ0dQdDBVeDNMWCtrdHNOR2xLTktTSkVFc0oxMjFDRHhJekJKQjlnRTVCRmRkNEFqM1hUMTFWZlRNOFI5WjBTc1JTVW9DYVJRQW4wTHhJeXJ2eWI2VXBNQVBDckQwUkx4eTBDNmVlN2N1ZCttNXl6VjUwVklHTXFsWHdMMC9LYjluc3ZFdDZrbjNTNFpSZ01jYVJyZzlQMmNIeWp6SlAwVHEzclFJUUdZS1NQNmlSL1FHUU1la2VOSUNkRGVPRXhQUFBIRWlNTEN3cTkxVkszK1Z4TElEQWtVV2NYWG5yaGFZTW1hN1hEdzJzVkZBMXpUM2pObnpyeUt0SGVrZkYwcVZCRktBcW1RQUJGcG5EVXhSSXZIRGJpMmVrS1BvMzAvRlIxV2JTZ0p4Q3VCd2NWQndGbUxkNmtpbkdiR0x3SHhwaFVyVm95bnRlK3hYVXFwaUl5V1FLQm9XRWIzTDFHZG96WHhzUy85dS9aMldsNU42YUxGWWFUclhSRHdyMzcxcTlQVXhhVmVQSmwvM256ZWY0dWFOMjhTN2hOSHVuUTJFT2dTUmEvcjFya3VFWGlsZDFlbnI2dW5lY0pWSGt0ZDlPbHdhT0pwMUxQZGRFQXBnOTJRb3RFQU53OFlNR0NxQXB3a3RtZW44SzljSVVSVEk4a3Y4MTBCZFhHSTcySlI3M0xSOStORDVqdnpPeDluRDgwdTExUWhWajFEeFJqd2tCcjBnT01Yb0dud29xSWlNNzJwNnNLUTNIbDY0bnYwZmhHb1BaNVZvOGZmN1A1K3YyancrRWlsNVM3a2ZRS0JDOEZxVzFzYkF4Nml4UkdwZDRnekxWdTJiS0xKWkNyVkorYmplYmJCelhOa29Uc2lwZlJRbzBIVFdSeWJXejdCV3ZxSGtZTW4wcWpZRGc4Wm9CNXcxdUNtTTg4ODh5Smxub1RJS2l0UEdISWozUjNoeWMwbEh3Q1BMYlJkUkI0QTU2RUY1eW9jNElnemtmMDlSUUVlbEZOV0J3QjVmM29rSmhmbkUyTXFOWnVtZ0ZrNndDNGdEem9aY0tiZlJMZm1yV1IvVHc3bVVvR3NsMEFvNUR6VnVlRVhtVXlUaHhjVzhoZVVlVkRhbk1tQUl3TG54b1VMRjU1TnY0dytXZzcxWDg1SWdDRTNBb0VjY2pTY1ByOFpkZXJaTkNTTlgzbG84aW9LazI4YU5telloRno4Y3lZUFBGL0RIWkFiUktQWG16TnJLNkI2cU0weWdieFA2V0NPdGFValdZTnpncEgyZm8vSlZ3RHlZZHhtVXVIOXpXWk4zZVhLZVB1WWpHQVdQRFBIMnREMEdod1pUTFI3Y0l6UzRKcDhjdlkvUU42UElHL0tBVTBPVm91TXh0UEJMaDBNdVRaM3JNRkJQUnpPalFUNGFPMU0vWmZURW1ESWM4RW10NXMwd0RWK095ZE5ZNW9CUjV5bTJrdExTODAybTIxa1RzK3NHbHhRQW9DOHI0bk1GWnA5RFFBR0ljdDhtOUV3c3RSdWgwWEN3OURHcUFmY2VQLzk5Mk1yR3JZektKY25FamdKT2RqSVVoY1FCYmNQSFF4MndYUndJR3lETS9YR3M4NDZTMjJQemRJNTdrMjNBWGtKbWJBbmZObTVkd1VBbjFta2JlMytvaE53UkFWWWd3Y0JIemh3b0xyQTdBMHBXVnhXZzV4ZTVXbzhxUUN6WmpRQXVOUnM3cktTd2hvY0F3SHNScnZkUGh3bnl1V25CQUI1SDlMa0xab216eTRaRkptTllGZmptSHV1MStBR2V2ZGdNU2NxUHo4bG9FR3VhZkxzR3IvWllBQzdiSTNBMXg2NzUxRWd3a2hiWkl2VkdqaUxKSDk5UUY1TW1ydzFTelE1bUtWRmNBQU9wYTNCamRuamt5RDFCRGhlTXE2Y2tvRFFORG50UXNRU1lqWTRnaHpzQmxsR1dMYkJNUWFEQWh4aVVJNGxZQ0xOV0V6bWlxYkpNL3pCSUt2QnlJQno5elVOemljYStRcHdGb2Z5V1FJTU9iR2UwYzRrQWd4NHNLZXN3WU1SQ3ZDTW5zTzBkWTRoYi9QNU0vWVpUN05KMCtBc0k0MXBYa1ZCSkNLVWljTGlVWDRYQ1FEeUloTld5WVA2c0V1ZWRFWkUwK0RjTHdVNFMwTDVZU1hBa0xkcm1qeHNsclJGR21PeHdhbDNiTGFrcmFPcTRjeVdBQ0F2MURSNVp2V1RWbEhBcm1hSmNNL1lSQW4remZGNnZlMmNxSHdsZ1VnU1lNaTdyRE5UQVNZczFiN1BINURaMVpqbS9nWEg0ZlA1Mm9JbktxQWtFRVVDZ0p6MllXZU1SVTZYdjNwMk5aV08xYzNnQ3FmUzRGRm1WQ1Yxa1FCRDdxUzNhS1g3TFhFK3YxL1c0QnJYYktKd3h3TktnN01vbEIrckJBQzVqZDY5UWw1YW5TOGdvTUdEeWhxZGtTOG90UVFGZUZybktHc2IxelE1UWE1cDhqU053bThJbWloQnlNTnE4RUM2Lzlha1NVQ3EyZDVKQUsrSDB6UjU3NnJwVVdrd1N5dVhFVFc0WnE5UXpRRmxnL2RJdnFwUXB3UVljaGU5dkR2VmI3WDFCZ1JzOENETDZKS3N3YlVFQXJ5MXM2L0tVeExva1FRQWVRRnRRVXoxSFU5NkZ6cllaY0MxdnNzMnVCYmhjRGdhb083Vm52QWV6YTBxMUNtQkRzaUZjUGxUSXhKUTdhVFhvZXRiWXczTzFQc2JHeHYvb2Mra3pwVUVlaUtCazVxOEo2WGpMOVBrOVlCZC9LU1laODFFd1FtY0ZsbFJVYkZmWFdSMkNFVDkzM3NKQUhLclpxNGs5dzRuZWxybGRPd25Md2czd3F6QmthNGx2UGJhYXdwd1NFTzVoRWtnQ0hrUzE4a0I3MnYxelhyQWcrdmdUTDMvN2JmZmJuRzVYTFZtczNsZ3drYW9Lc3A3Q1FCeUMwbkJvK25SeEl2RDdmZlhyanZlMUVJMWR6RlIwRm9RY0dSb2JXMnRVbVlLeEtKY0lpV2dRVTZnSjFxUmc5VTJYNkNLK2dxNHd3S09jUUJ5TFVON2Uvcy9FS0dja2tDaUpRREk2ZlVPQ2Q5eDJPN3pnVmtaY0szcmJJUExHdHlIbFJTbHdSTTl0YW8rbG9BTU9jZjF4Z2U4VFQ0dkFQZlJFYUxCNVhYd0lPVEhqaDNiMzVzR1ZWa2xnZTRrQU1oaHFuZ1RzQzBFOWRSNmZHQTJCRzcwSVp3Rzk3L3h4aHM3YU5NVmdGZE9TU0JwRXNETnhBNXpwWGRXdVkvTWpWVzF6VHVvb3dBOEJISUdISU1BMEVqMDBVZGdhNXVibXl1Vm1RS3hLSmRNQ1FCeUUvRU5mZDZUZjZDMnhSK29mUEZJVFMzMVV6WlJ0RzdyQVdmSXZmWDE5WnNVNE1tY1dsVTNTeUFJZVE4VU9ZQ3Q5M2cza2VlbEkwUjdvMzRaY0p4ckdweDhYMlZsNVVZRk9FU2lYQ29rQU1nQkkzbHhIVERrcXh5dWpWUVUycHMxZUxETE11RDRNYkFHOXkxWnNtU1RuMXd3cHdvb0NTUlpBZ3g1UE0zUWczTCtKVFgxME9BTU4zT3NWUk1PY08yWHNHclZxa2F5dzh1VkZvOUgzQ3B2YnlYQWtNTmE2ZTdBUTZETlhsLzVXOGZxR3lrN2EvQ0lnS052ck1GaHozaHB1ZkJUQlRqRW9sd3FKUURJQVhkM0RyRFd1ajM0K0t2R0svbHNnd2VMeWhvY2tRdzRmZzFlc3NNM0tNQ0RzbEtCRkVxQUlZK214ZEdkeW5iUEJ2SUF1R3lpSUVsejhvMGVSTEI2eHkvQnUyREJnazh2dmZSU1oxRlJrVTNMbmFmL1ZSYVZDTS94bXB3ZmZTUmxCaWpDdVVqeHlCc3hMVUpDcE1mYmtCMzlBdkQ2L2puOGZ1ZmpoNDZ3Qm1mdEhkSkNPTUNSVWJOblB2bmtrNWJxNnVvUFJvOGVmYm1SbnBoT2hHdmJXaUdPL2M5ZmhhZXVPUkhWcGFRT3QrOHJ3bG1DYjd1SHlDNms3VWdwVWN0RUtCU3RURWlqblNmNmlaZnpSR2hDeXhKdk8zSzk2UTdUNDJtaTJubmlnMjFONWRoQnlQWTNReDdzbmg1d0pFQW1tZ1luMzdOdDI3YS9ubmJhYVFrRGZQK2RUd3AzZFQzYXlTcm45SHRFdTkrcjJZWVFVQ3cySWdiSWVSazBsT080Y09tSWsxMnE4OHR0STh4OWpkUi9mWDc5ZVhmbDllbjY4cEhHN3czNHhXNW56VjhwdjRjT2VRMDhwSXB3YWhsdE11RGVXMis5OVNQYVBsc2ZUVXVFMU5qTlNUYkNqU0VWR1MyaTBOaWhEMktGRytVNEwzdzVqRFE0T1k3enlMNmNSdzdMZWVTd25FY095M25rc0p3SFliMURYamd1dzJFdE1vYi91aXV2VCtkMjJOZTNoM2l3NkF6NDZoZTM3UHlJVGlOZVlLSnNOTUNoOWoyMHM5QngrUERodnlVS2NEU2FyUTZRMndueWFOZjRuTWEzblRGV2pzdUVjWE5mWXUxZnN2UDNSQ2JRd0xVKzU5OGEzVzRIQmFIQncxNWdvdTV3Z0NNZUdweTF1R2Z0MnJWdjBPc2tFSi8zRHBEYmpDWU5Xb1pFOWlFZ2hrSU95M25TR1piN0pJY2o5VW5PSTRjVGxUOVNQZEhpQWVaMlo5M3I1TW5tQ2FLN3VFaUE0MGVDWHdXbzlzeWRPM2RYVTFQVGwwcUxkOGlQSWU4NFUvK25VZ0pnc0MzZytYSko4KzdkMUM0RERsYkJiQmNYN2lJVG1aQ1pJVWNsYmxvVFgxVldWblluZmNNSDZYbnZBRG1jS3dEWktwY3FDVUJOMTNqYlZwSG5wb1BORSthMVN6Y2lhWEJrUkYxQkxiNTgrZkkzNkdGa1ZLaGNwd1EwVGQ3bFM0eEtQTW1VZ0Z2NFBHKzNIWG1EMnBDMWQxanpCUDJJQmpoK0ZTZ0lNOFc5ZE9uUzZxcXFxamZWL2l1U2h1U3dzbUpUa0VzU1NWNFFhOSsxUHNlYjc3WldWVk1yME9CZ0U0eUMxYkF1VnNBMU0rWEZGMTljVEZvODRxOGxiQXQ1RUtrZ1Q4MGt1d01CLzdxMkk0dXBOVFpQZWdVNGVoMml4ZWZQbjE5NThPREJkNVFXN3pxaERIbTBxMytWMW5NSmtQSVc5ZjcyZDE0OVVWSFpDWGkzY0dPV29tbHdwRU5iQjgwVUNydGVlZVdWWnowZVQ4US9DU2lVcjY0RGNpd2hublFjam5iakFyazVQVjZmeTNLTCt2YTZxNiszNWZYMWQxZGZkK242K3ZqY0wveUJqeDNWejFKNUZ4MnllUkxWb3VnT2NQUUhGZUJpVXpOVGZ2dmIzKzRsTGY1M3BjVWhtcTRPTjRJS0RCMlFZM0xnMkpmRFBIRnlITUx4T3E2N3AvWDF0cnkrdjkzVjExMjZ2ajZjZDlqZXpyK3ZhQ3JmUzZkc25vREpxSENqYkN5QVExc0hBYWV3YTgyYU5jK1FGa2Q1NWNKSVFBODV3NWNLSDkxaGlPUndLdHBPVmhzKzRuaWo4OWd6TkI3VzNvQVBUSFpyU2NRS09HdHgvSHBjYytiTTJYNzA2TkVOU291VE5DSTRRRzRsVFo1cXgzQXpiR2lmNDFMZGwwUzBCKzFkNzNkdFdOeTRlenZWeDRDejlrNEk0T2duYTNFWTlvRGN1WHIxNm9WcVJRV2lpZXhPYXZLVGlPRXlDNDR2dHppc1JYYkdjeHpuaWNmbnNySFdwOC9QNVNMNSt2NTMxemQ5L2ZyeTNhVjdhT1ZraytQNFFzcm5wQVBzZ2NHWXREZmxpOGxFUVQ0QURpM09nTHRtejU2OWpkNGwvcnJhb3dMeFJIWTJUWlBqWTZrZC81Q1RKMWtPUjBxUFhIUDRGSzQ3MXZyMCtibGNKRi91Yy9nZWhNYnE2OWVYajVidW95MnhSMzF0cnovZHVHTWJsV1B0SGRQcUNmY2lGaE9GODdJVzF5NDIwZUJkZDkyMWdCNU1ibFI3VkZoRTRYMkdQSHlxaWcwbmdZNDlKOTdHeFUyN0ZsQTZ3eDJ6N2MxMXhnczQyK0pvMFBuZWUrL1ZidHEwNlUvcWdwUEZHZGtINUZoZFVTNDJDZUQ1cWIyZXhqOTk3cXpGRzZ0Z25vQzVtRzF2YmlVZXdGRkcxdUlhNUxObXpYcU5IbXZicmk0NFdhU1IvUUxhWnN0TGlKeUxyWFA0c1J3b3gyWGtNSmVWNCtRd3B5ZmFsOXVRdzVIYWtmUElZVGsvdEhlajM3WDl2dU1iWDZNOERIZmMyaHYxOXdSdzF1TGF4U1k2c0dMRmlrZWNUaWZlZ1lnNmxZc2lBVUNPMVJXZVVHUkZPRmJIZVNPVjd5NDkxblppelJkdmU5M2xCME51K3FEOE8yMkhINkUrQUc2K3VJeGJlMk1NOFFLT01ndzRmbEdhRm4vb29ZZDI3OTI3ZHlXOWtSYnB5blVqZ1NEa2VQK0hPa0prRUtCZndDRi82OG9YbXZkZ3Y3ZGVlNE85dUZ4UEFFY0RERGxyY2NjZGQ5eXhxSzZ1cmxxWktySEpINUJiZXFSZllxcy9HM05oemZ0RXdGMzlaTlBPUmRSL1BJNm0xOTV4RDZ1bmdMTXR6c3VHenM4Kys2eitwWmRldW9zK2YwSkxsOHBVaVdVbUdITDgyYzczQTY5aGN3bS81LzNXUTNlVk94cncyZ1dHTzY1MWI3M2Nld280Nm1ISWcxcWNsZzIzRU9pTDZBYVF2aDExSGtFQ2dOeXNORGx0ZFBLTGZlNkdSVTgzN2Q1Q290SnI3eDVyek40Q0RsTWxxTVVwN0x6ODhzdVhIemh3NENOMUF5Z0MwV0dpOHgxeTNOQ3A4VG8rK2xYTit1VmdxUFBndTVaZ0xDMkFZNnJRT0E2KzRNUXZyLzNPTysrOGorenhHbVdQa3pSaWRKcTVZdWlOdm9teG9RekxCcnU3MmUrcFdkUzQ2ejdxV2pzZFlBZ21BSmhpdmlqWU01Y0lpYUlUV0Q3Qkx3NmRjOUFOb0dNdnYvenkzV1NQMHplR2V2empvNnJ5eTJINTBFS1FSN3BObm12eDBNdnVnTi83dnVQdzNWdWN4NDdSYkd2OGtBK1dlRm13VnhBa0FuQVFqTTZ3cWFKMWtsNDFzZm5UVHo5OUN2YTRnanoyT1FMaytEQlRyanN3QWJ0N3I2ZmhxYWNiZG02bThjcHc5K3JDVXBaZElnQkhmUXg1aUtreVk4YU1KYlFoNjEyM0d6OUk1V0tWd0VsTm5ydXJLMTZDKzRpMzlkMDVOZXVYa0Z6MHBna1Vaa0wrOUNjS2NNd2RRdzZhY2FHQVRyZlBuRG56MTNUUitabUNuS1FSaDRPcFlzNVJtOXlqWFZTMmYzWlgzWVpmazBnMFRzam5aY0dFd1ExeEp4cHcyUjdYSUtldlJKeTQ5dHByWjlNREV1VnFVeFpFSHJ0anlITnBqUndySnZVK1IvbkRqWnRuMTNzY0owZ2FBRnlHR3d3bFJIdEQwc25ZM29iT3lSMDBFT1RlL2Z2M3I1ODJiZHIwcG1YdjlNVlhicFdMVFFJbWtsV0hRR1dSeGxZMjAzSUI3a2FmNjlDQzVwMDM3WERVNG9zQ2JYUXc0REJ2RTZxOU1mNWtBSTU2NFVKQUoxdmMxZExTc25GVVpjdGx0S091VUVIZUlhUlkvZ2ZrY0JCb3RxNmsrS256SndLZSttVW55bTljMTNyb0lBMUZEM2RDTlRma0JaY3N3R1YxRXd4djNicTFyY0JrK1h5Y3BkODM2Yyt2VlVIZU1RbXgvTSt5Q2dvemxrSVprb2UybVlyV2dLZjE5Uk9WdC95NTVjdHk2cFllYm1odUFKNXdseXpBMFZHZUMvYTF6bTl6MWphVm1lMTdobHVLTDZIVkFndFBYTUpIbG9NVnNxeENCSnJoNCt5QTI5Mit0djNJZno3YnRBdTM0V1c0RTdiZUhVa015UVJjYmhOekVweVhUWTVqeCtrSmx5MmpyU1hUU1pQYmVlTGtBaW9jWGdJc3E2QXd3MmZMaUZqWTNDZjhuc2JYMi9iZjltempMcXgxTTl4WTgwNDYzQkJDcWdFUGdyN1ZXZHZRYnZDdUgyOHRuVW8yZVIrZU9IUkt1ZWdTQ01xS1RIT1k1NWw0NEYwbURRSG4wZVhOWDl6OHlvbUtQVFNpVmpvQU9NT05temxKc2J1cDNxQkxGZUJva0pWT0VQSnlWMlBMVVcvNzM4KzJEYmpBWmpDVjhjVlVzSGNxRUZFQ2dEd295SWk1MHBPQWRlNDZuNk5pWWVQdVc5YTJIZmdIOVFKZ3B4eHVqRDZWZ0tNOU9KNFh6VC9nT2VIWTdXNVlkNjV0MENTNzBUUkUyNG5SdVdyUWtWMzlIMGtDREhtbXJLMWdabkg3L1pqWHNmV1JoczIzYjNIVUhLVys2ODJTbEdodWxsbXFBUStCbXpxaG5kZDZIZTVQSERVZlRDNDhaWFNod1h5YWdweW5wM3VmelJVSU1wME91d0xwV1VxNi9kNzJ3ZDIxRytmc2R6ZlZVWDhZYnR6SXdRN0JsTUlOZWFRYWNMUUoxd1gwRnIvYjl6Zm53US9QS3hoVVVHS3lUaklKbzRFbnI2T0kraitTQkdRNVljVTgxUWZnZGdhOGdRcFAwL08vcVAvNGQ0MWVCNzd5SzhPTkM4cVV3dzE1cFF0d3RNMlE4NFZHd0VzYnlOOXNyZG82MEZSWVBzUmluMnd4bU96WVM0QUhjNVdMTG9HVDVrcjBmSWxNeFk1QXZMK2syZTl1ZksvOThMejdhamU5U25QSUY1UHlIY3Ewd0kyeHBoTnd0TStRd3crQ3ZzRlJmYVRhMi9iZXVJTFNNKzBHMHluS1pJR291bmVwaEp4TmtocGYrN2FGalR0dnA1V1NIZFJEYUczVzNEQko1S1ZBekhIS1hhWUFEcmo1MEtDdjhyUzByWEZVdlh0T3dTQlRYNVAxSzhwa2lZME5ObGVTU1JOdTNzQWtLZmMwTDcrajlzTUg5N3VhOGZZcGFHeUdXNzk1S3JiT0p5Rlh1Z0hIa0hndTREUGttamFuUDNlK05hMVYyd2FhN2J1SG1Bc24wL1pSdTdZWFE1a3NVVkU0YWRJbGR1Y0tjVTBtQ1c3ZXVCdldPbzdjL1VEdHhyOTBtaVFNTjlhNCtXSXlhYmZmb3c1ZWw1Z0pnS05MTXVReTZGcDRnK1BZMGNOa3NveXlsZ3ltejRTTTduaW9TOW5tdXJrTU9UMEplVWgwajA1Z2EvdG9pdWo3OE9LUXIvVzlSWTNiNTd4NjRzdGRWQmxyYkFDdXY0RURKWlYybDJsWGIrZ1ByaXZ4dzhPWFZndm9zTkZocDZNUTRUdkt6dm5uaSt5bi9yTFVhQjJCSjEvNFR6S2xLUmRHQXJDVmUrUFkxbTcwdXc5KzdLeit3eC9ydDI2ZyttQ0NNTlM4Qk1qYlhiVy92cjFwTTVGbE13MXdqQTE5d2dISThTVm1LeDJBbkVHMzl6ZmJpdTh2dStDYXNkWisxOUhIV0F2TTJFU3F6QllTVVhnSERSd3Y1cnhDMHViM3VDckkxbjZ3L3RNWEdyMU9ySkJBVStNQTJHeHJZNVdFOTNMSDJ4UVZUWjdMRkJORlAwSVdFbndjMEFwczAvbWNmcS8zcmJZRE8rcjl6clVqTE1WRGFlUFdDR1cyNkVWNDhweC8vS3c1b3ZsNHd4U2JJL1R5K1krZmE5N3pxMFdOTzlhUnpPWGxQMmh2R1c3TVQwYVlKQ2RIM1JIQ1dEUFpvWDlzc3JBMlo0ME9zMFhUN0hNR25QLzFDMnlEYnVscnRJN0U2NG54N2xhZTFFd2VYS3I3QnEwY3liR2Q3U0k3bTlhMUQzem1xbG4wV04zbkgxSisxdFNzdGJIMHh6ZHVXT2xFcmpoU2d5bUt6M1RBV1F5QW5FR0hiUTdJMlQ3WElEZWJ6YmE3K3AxejZTVGJnR3Y3R3d2R0tOQlpkTkY5R1d4NkovZVhPNXgxei8rK2FldGFlak1aZzgwK3Iydkx0blpHYW0xNXhOa0NPUHJNMmh5Z1E1c3o2QUNjWVlkZjhLdXk4eTg2eno3ZzJqS2o3U3dGT2tra2pKUEJKbE52OXhaSDNmT1AxMi8raUxJQ1pCd0FtMzFvYklETmR5UUJkc1pxYmVwYjBHVVQ0TnhwOUJuWERndzZ0RGxyZEExd090ZjgyOHJPK2FmSnRrSFhEVExaejdYaU5ReFVCSVh6MVh3QjFLQVNhOW4wUmlseDNPZjRmSlB6K1BLRjlWcy9vMmdHVy9abGN3UlE4NFVrQmJQRFpTUGdrS3pHS2ZteTJRS056a3VMTXVqV0cwclBtblJod1pCdkR6YmJwOXNONWtMQW5pOFhwUXkxbjlBRzFJNkF0NTFlZFBuQlJsZjFHNHNiZHVQMk9pQ1dvVVlZMnBvUDJjN09DcTFOZlErNmJBV2NCNEQrQTNJR25VMFhCcDAxdTZibGg1cUxpMjdvZDhiME1kYiszeHhvc3A5UG9KdndjaDNBbm12cjZWaS9CdFJlZ3ByQTl0WDZISnUvZERlK3ZiaHA3d2YwUmluY29HSHRES0FaY29hYWwvMmd0YlBHSEtHK2RuSFpEamdQU0E4NlRCaTIwZG1FWVYvVDlGTUtUeDAwcTNqMFpTT3NmYjVaWXJDTzBVeVlMTmJzc3FidWhCcGZTL2p5b0x2bDdmOXIzZi9PK3Zhangwa21ERERETGZ0SWc3Wm1qWjNWWU5NNE5KY3JnTXZqZ1RiSHVBQTVORHByZFFETzBNdSsrWWY5eG8yZFhEQjRLbW4xYy91WkNpYlNoV2tCUGkrQ1IrZ3kxWlNSZ2NibUp6eEpRMHQ4cmlhZmF4ZHA2ODgzdVdvK1h0bTByNExHREcwTWVBRnpPQi9wckxGaGd1UUUyRFFPemVVYTRQSzRXS3NEZEQ0QXRoNTRUYU5UdkpiV3oyd3IrRkhmc1JNbldFclBHMml5bmR2ZlZIQUd3VzdCQlNxQTcvalgwUXdMTDFrWHJZQVlqZzFmK0xoTUJOQzRVQ1NvUGZTbXFMMjFQdWZuNVo2R0xTODNWK3hxOGpwaGNqRFVBSm9QQnB6VFdGdXp4dTZvbmdya2t1TTV5cVV4eVdQQitCaDB2YTB1YTNlR25PUFlOdzIxRlJYK29IRGNWMDZ6bHB4ZFF2dGZDZzJtRVlWR3kxQ3JNTnBadzdNdnd5OTNBbUc5b0JsYWZUNkdHUFl6UUdiZkxmeU9kci9uU0h2QWQ1QjI4eDJzY3AvWStXcjd2dTFIbkcyNHF3aElXUk96ejJERDV6ajRETFJzWDBmcURtWFBicWVYZTNhUEpucnZHWFQyV2F2THBneURyZmZsdk5vUDVlTGlZWU1tV2N0R0RqRVZqK2hydG93c01saUcwMWNheXVncHBFSzZrMnFuYldDRmxOR014aGg4MXZSc1hrQWJneXdpelV1dldXaW5XK1FPVDhEWDd2TDc2dHNDbmtQTlhzK0JhbC9yd1IzdStnUHJXZy9EaG1Zb1plMHJ3eHN1TE9kbDg0UDk2QkxMZ2RSOEFweW5xNE81RHFXS01PQUZ0TElQd0JscWhwM1A5WGsxNER2ckNLbWJ6QjN6U0d0eDBSQmpvYjJmdWFDb2o4R0tIWkdpSmVCdWIvSzYycXI5N1k0RDd0WTJNaXNBWm9meVB1a3p6UEJaNjhvK3dndzBRNHh6T1ErWDFkZE4yZkxENVNQZzhzeUdBRWtKTXF4NmtHWEE5V2xjRHZVaHpQV2lMVG1NYzlreGVJampNR3RYQmx3UExFUExVUE01NTJlZjYyTmZiamR2d2hDK2NoMFNZRmt3a1BEMTRQSTVRd3pva1k5OWpnOVhGMXJoZUVBSHgvRHB6d0VwNGdDeDdETzg3Q05ORHVNY0J4ejdIV2Q1K2o4TFBFK0hIM1hZTEJ2NDBRNFphbjArTkNEWEl6ZklBTW8rd3ZxRFlkZkh5K2VvRitmSzZTVEF3dGRGcTlNSUVtQjVNY2pJRmkxT1RvOVFaUWlZRENuRGl6TFI0aUxWcWVJN0pjQ1Rvd1RTT3dubzVhZy9SKzM2T0FaWGJsa2ZweitYODZwd0RCTDRmd04vSVp3TUJ3SDVBQUFBQUVsRlRrU3VRbUNDJyx5ZWxsb3c6J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTGNBQUFDNENBWUFBQUNoT0gxS0FBQWxhRWxFUVZSNEFlMmRDWmhVeGJYSFR5K3pMOHl3RERzU1ZoRVZKUW9Da29TSUlyNGt2b2hMeE8yWmZDOGFuMG1RckNRbSt1SjdxSGt2NWhFL3hTUWFOb2tCb2dreGlnYVV1TERJcHNpT01BNE1Pd3l6N3pQZDcveUxPWmZxbnU3cDd1bWVYdXQ4MysycVc3ZHUzYXBUdjN2NjNMcjMxcldSa1Vob3dPWlZpUGM2TnV0cGJxLzhXUFZPODE3M3NZdEo2a2dEdXNJN3ltZTJuWWRUZElaUWowTkgxdnJnd1lOdGMrYk15YjM0NG90ekNnc0w4N0t5c25MVDB0S3ltNXViNitycjYydkt5OHVyZCs3Y1dmdjQ0NC9YbEpTVUFHU0IyVmZvS3czSE05S0JCcVF6T3NpU3Nwc0VYZ21oQ01UdERHVDJUVGZkTkR3dkwyOGtRenZDNlhTT2NEZ2NRMncyV3pmZW5tZTMyM001bnVOMnV3UHFsL081T0YrZHkrV3E0WDJyT1Y3WjJ0cGEzTkxTc3A5UGd2M1YxZFg3WG5ubGxVLzRSS25qN1M1ZWROQVJsNFdqUm5RTkJGUytuam5KNHdLeEh0cDM3Tmd4cEcvZnZsUFk2bDdDQUkva1pUZ3YvWU1CTjFMNjRoUEF6Y0FmNWVVVFh2YXg5ZDl4L1BqeHRaZGNja2t4SDBPQUY4Z2xqTlRoRTdhY1ZJZGJRTFp6RHlKdVg3ZHUzWUNoUTRkT3ljbkorUUpiNU0rekZSNFFyNzNMMXY0SVcvaDNhbXRyLzNudzRNRzFreVpOT3NKMUZkZ2xCT3dwS2FrSXR3ZlFUejMxVk40ZGQ5d3huZDJMTDdKMS9oekRQQ3hSU1dEWUQ3QlZmNWZkbWJlWExsMjZhdmJzMmRYY0ZzQ2RrcUNuQ3R3Q05FTDdnQUVEbkJzMmJQaDhRVUhCbmVucDZUZHlXaTR2eVNZMVRVMU5LeXNxS2w2Y01HSENPMGVPSEduaEJ1cVFKNzFGVDNhNEZjemNxUWdkdTNidEd0V3ZYNzg3TXpNenY4WVd1bit5MGV5dlBXelJqelkwTlB6cDJMRmpMNDRlUFhvUDUydmxSYmZvL25aTjZQUmtoZHZ5b1gvNzI5OTI0NUdOZTlpSHZvTXZCQzlQNk42S1FPWDVndlJEOXRHWDhnak1vdnZ1dTYrU2l4UnJqakNwSkpuZ1JsdXdBR3o3OHVYTHUwK2RPdlhiRFBXM2VMMlFGeU9lR2lobnlPZXZXYlBtNlZ0dnZmVXNid0xjQW5wU3VDekpBTGNIMUt0WHIrNHpkdXpZV2JtNXVmL09uWldNdnJRbm91R3YxYkQ4ZnR1MmJmOTM3YlhYbm1nRFBDa2dUM1M0bFpYbURyR3ZYNzkrMEVVWFhUU2JSejN1NWZYTThQczg1VXBvNEZHV0JidDM3MzVxNHNTSmg3bjFZc2tSSnFRa0t0eW9OOEIydlB6eXl6MnV1ZWFhWDJSblo5L05OMWJTRTdJWDRxalNmTU9vcWE2dWJ2RmJiNzMxOHhrelpwUngxWER4S1pZOGptb2F1Q3FKQmpmcWk4V0I0YnpObXpmL1cvZnUzUi9qOVI2Qm01bzZPV3l1RXJLMWZNaUt3dWhmSjhWTlpXVVZ0VC83N01USEZyWU5JOG9JUzhMNDQ0a0V0N2dnanUzYnQxODJiTml3ZVh3SGNYd251eTVwZHdQWXpyb2ZNZGlSOFNhYVc5d2ZmRkxjK04zUkUvN3hFU3ROckhoa0N1L2lYa2dFdUZGSEJmYjgrZk1MYjd2dHRrZjRZdkdiN0lJNHUxZzNDVm04dlhFcE9SdGZpR3pkYmJhV21wcVczNzI0b3U0L3YvV0RqOHU1Y01BZDk2NUt2TU10MXRwNTZOQ2gyNHFLaXA3Z215OTlJdHR6eVZXYW8zRVJZZWtLY2JucHhLbXk1aC8zSGJWcEdaY3ZkenpqMW9vRG5uZ1VuSFFPTEk4KyttaEJaV1hsQzMzNjlGbG93STV0VjlsdDFLZFB6N1NGZGFVVFhuajAwUkVGMGtjY3hxV1JqTWRLV1dCdjJyVHBVbjdZZnduZldSd1oyMjVObktOM3BlWFd0ZERpb24wNzk5VGVkZmtYUHZxWTArR0x5d1dubmkybThYaXozS2dQTExiejZOR2ozeGd6WnN3N0J1eVk4dUgzNEU0N2pSeHpVYzQ3Si9lTi93YjZpeGYwVzF6eEZDK1ZFV3Z0bkR0M2JpRS95YmFnWjgrZXo3Q3lzbmd4RXFjYXNOa29xNmk3ODVtNncxY3RtRHQzR0I1eEVNamp3aU9JaDBxZ0RqakpNRzQ5aHA5YWU1R3Q5ZkE0N2MrNHIxYTAzQkp2UmJTNDNKL3MzRk4zUjV1YkloZWJNUjBUajdYbEZvdWR0bS9mdm1zdXZmVFNOUVpzYjJ3U1k5MXB0dzBmTXpybnJZT2JyN2lHYTV6R0M5eVVtQnJQV01JdFlHT1k3eForVy93dnJJdzhYb3drcUFhNFEvTStNempqTDBkMmpMK0ZteEJ6RnlWV2NPTzRPTFBUK0FINmIvRUx1QXM1YnA0TFlTVWt1akRnNmYzN09oZWUzbmNWSGpVV0N4NFR6bUp4VUFFNy9lVEprNC8wNk5IaktiN2JHSXQ2SkRwSDhWdC9OOWw3ZG5jOGRmYVRjWTl3SldHMFlqS1NFbTJvRk5oODBaaFJWbGIyTkwvRCtLUDQ3U0ZUczNBMVVGaVE5cU9ha2dsUGp4N2RLeU1XZ0VjVGJnWDIrUEhqczNqNmhDWDhmTWpYdzFXZTJULytOWkNUWS8vNjVqZUdMUmsvdmp1R2RhTnF3YU4xTmF2QTVzYWxuejE3OWpsKzlldk8rTytXeEt4aHJJWUNBMm1ydHE3MXhkd0xOdDdQK1pwNGthY0xBKzBXMXZab1dHNEJPNDE5N01jTTJHSDFWOEx1bkpQdHVMUDg0RldQY1FPaWRwSFoxWENqZkN4cHBhV2wzMkVmKzZHRTdSMVQ4YkExVUpEdmVPalVudkhmQVErOENCdGhsK3V2Z0s2RUd5NlBBcnU0dVBqMjNyMTd6L1ZYQ1pPZU9ocm8xY3M1dDNUN3VOdTV4UUo0bDduR1hRVTNLcXpHc2ZtRjArdjc5KzgvUDVvVFI2WU9LZ25ZVWpmWit2ZExtNy92ZzdIWHR3RU9Ucm9FOEs2QVd5eTJreDlaSFRka3lKQWxiWTFJd0o0d1ZlNEtEVEFnYWNNSFp5M1o5dmJsNDdoODNNa0VoeEVIdkN2Z1Jwbk9lZlBtRmZGNDlsTE1VODNyUm93R1BEUmdzMVBPcFJkbExaMzN4SkFpM2lDQWUrUUpkeVhTWjRzQ215dVZ3WSt0cnVBNVJLYUZXMEd6ZjJnYWlOZWhRSCt0cUt0M3Zaa3phQU9lUldua1JaNG05SmM5cFBSSVdtNmNLTXJQUG56NDhIY04yQ0gxUThwbXpzNnlUenV4KzhydnNnSmtpREJpQmpkU2NBdlk4TE92NGhkNThVeUJFYU9Cb0RSUTFEUHRFZmEvcitMTUVYMlNNRkp3b3h6SEUwODgwWXY5N0FYc1o2T1NSb3dHZ3RJQWVMbDBWTmFDSng0ZDBvdDN3TDkvUkxpTXhGOEFLZ0tZNFdjdlkzZGtPc2VOeEVnRGllWno2MnFxcTI5ZGxUTm80MjJjRmhIL085d3pCQ2VIZ3B0Zk9IakFnSzEzbFltSHFvSHNMTWYwb3p2SFBjRDd5ZWhKV01ZM0hMZ3RzQmN2WG53QjM0RjhPTlRHbVB4R0E5NGE2RnVVOXZEaVp5NitnTlBEQmp4Y3VOWG95QTAzM1BBNCswMW1MbXp2bmpMcklXdUEzNmpQL2RjYjhoN25IY01lUGVrczNKYlYzcnAxNjdYOHNWRjhOTW1JMFVCRU5KQ1hhNy94bzNmR1hzdUZoV1c5T3dzMzluTmVkOTExdVJkZWVPRXZJOUlpVTRqUmdLYUJpMFprL3ZLNjYzckRHeERBdGEzQlJUc0R0MlcxbjMvKytWazhqZkRRNEE1bGNoa05CSytCTktkdDZPSmZENXJGZXdqY0lWOWNoZ3EzQlRaL1VHa1kzNnd4ejJjSDMxOG1aNGdhNEpzN0R5MWZNSHBZWndIdkROenFJcEkvMWZFa1gwU2FiOCtFMkdFbWUvQWFzTmx0bWRPL2tQOGs3OUdwaTh0UTRMYXM5cnZ2dmp1Qlh4ZTdMdmhxbXB4R0E1M1RRRTZPN2JwMXI0K1JXL1BnTldqM0pGUzRsZFhtVyt6Zlk2dmR1ZHFhdll3R1F0QUFPT05iODkvblhVSzIzc0hDYlZudDExOS8vVEtlbG1GcUNQVXpXWTBHd3RKQWJxNTk2ajlldWVReUxpU2tpOHRRNEliVmRsNTU1Wld6T1RSbU82enVNanVIcGdHYmJmeGxPZUFPY0lQRG9QZ0xCbTdMYXZNM0gwZmw1K2QvS2JTS21keEdBK0ZySUQvUC9xV1hYeHcxaWtzSzJub0hDN2V5MnBNblQ4YlFYekQ3aE44YVU0TFJnSWNHYlBZcFYzVURmMEZiNzBDZ2l0VjJMRnEwYUFoYjdSa2V4ek1yUmdOUjFBRFBlekpqMGZ5TGh2QWhZV3pCYm9mdVNiQndPNmRPbmZvZ1g3bWlVQ05HQXpIUkFBK2NPUDVsU3Q2RGZQQ2dYSk5nNEhhd081TERzMFhkRkpNV21ZTWFEV2dhS0NodzNEUjVjay9NcUJEd3dySWp1TVVsd1RRTjAvbHpIdmp1b0JHamdaaHF3RzZuZ21mbkRzVGJYZ0d0ZDBkd1k1dTZrQnd3WU1DdDVxWk5UUHZVSEx4TkErQndZUC8wVzNsVkxpejlNdXh2QTZ3MkZzZWNPWE42OGZQYVgyd3Iyd1JHQXpIWFFGNk80NHR6WmxzdkV3dXI3ZXJWRWR6WTVyejc3cnR2NXM5UzQ5YW5FYU9CdU5DQTNXNUwrL3J0M1cvbXluVG9tblFFdDNKSitKdnJtQTNJaU5GQVhHbWdYMUZhd0MrbStZSmJ6THhqeVpJbEkvbU5kdHpUTjJJMEVGY2F5TXF5WGZiUzd5NGN5WldTVVJOdzZ5SCs0TVlPam9rVEo5NWlMaVE5OUJYM0syNzFUeDMzMVF5N2d1Qnkwdmc4V0cvRktvZnQ0SWJQNGkzSXBQenR3c0xDejN0dk5PdnhyWUVXMjNpcUtQczlWeEtmblVsYzRmbmNQU3J2dFVwWWIybHlnVSsvZnJjMzNKWkxjczg5OXhTd1MzS3B4eEZTZE1WV3Y0ZHNsZStRemQwYzl4cUFHZXZtL0FKVlZCU1R5K1ZpQ0R3aFFRTjhKTFZMYzFQNy9iejM5VlhPdVR5ZSsvcks1enZOY3orVTFaRzRYTzVMYjV0ZVdiQnMxUUhNVUNYc1dvVjR3NDJ5WUxVZDk5MTMzeVEyL2RCVlNvdXRiaGM1OTk3TW1rc2NTNGhPSzJoeFUxbWxiN2g5ZGFqM2Y3cjN1cTk5WXAzR0o2N2pucWt0azVhdG9wVmNGM0RyMFVuZWNLTk5DdTUrL2ZwTk52NDJtNFB5TjhqV2REVFcvUmp5OFRGMjJ5UExUV2VyaUZ5V0xRdTVtTGplQWJEMjZlYWV6TUhmZVFHM1NMSmFpd1Jkc0s3ZzVpY0FKK2tiVWpWdWMrT3ppWWtwUEQwQ2RjL25EazBFTTl4SkZlZG4yeWJ5cnZpekVuYXRrblM0b1FJc2psbXpadlhNenM2KzBNcGxJZ21yQVFIY3dUMHRIWnhNWVhhR2U5UURYMDN2Q1c1NWthYXAvdklGdDMzbXpKbFh0MlZVbWN4UFltc0FnQmZtc1drRDROejlTYmJZdm5xMUc3eUM1UTdoUmdZSDM1VzgydmpiaVEyMGQrMTF3TDIzSmZJNk9PMVRTSUJiWEJNQXJzVGJjaXU0ZVU0U2MxZFNOSlJFb1FLY1o5K0RCWStVNEY4QUl2OEdFbGVKVWZySnlpVHcyZzV1R1MwUjJoWGNQTDc5bVNqVnl4d215aHB3d2tYSmRWTkZUZVJHVVFSd05FWGlFa2FqZWRrWkJGNEZibFVOL25IcjV6RGk5cC84NUNkOTJOU3poMllrV1RVQXdBdGd3Y1drSlhoRCtVVEttM1ZMV2g5dWhtSlltaU53bzVsWTdQdzh5WERaYU1MazFZQUFya1pSdU9kaGFSTjVtWFN4RGR5Q1oyRlpyVWdQS3JqNTVzMVFjekVwS2tudUVJQjM0N2NSWWNHRmlFUU1VZisrM1YxRHViY0VidFZ4N1N3M3YzVXpMTG03MUxSTzE0QUFEcXVkeUpLYmFRTzNBcmRxalE0MzRuYWVCM0NJc2R5SjNNMmgxMTBBaitRb1N1aTE2UHdlNERVbm00WndDWXBoRGhYY0dDMlJjeGFoZzBkS2tNbElpbWtBZ09kbnU2bXF6dmRUZy9HdWpxeDBHN2pGaUluRk0waUhJTUUrYXRTbzlNek16QUVxeGZ5a25BYk9BYzRnTUJXSmRuR1prZTRlTU9vem1lbmdtQmNGdUE2M2JkcTBhWVY0akREbGV0VTAyTklBQU0vTE9nZTNsWmdZRWNlVU1hMkZYRldBYmNFdEt6YWVuNFJIUDQya3VnWUU4TTZNZzh1RnFWaCs2RkxTZk9sVnRuVTJ2K3lIY0ZDUkcveGFQT3QzS0cyOWV2VXlOMjk4OVVBS3BnSHdYSDRldktaZWUwQTZTRDBJc01ndWNRbDlGYUZ2azdpRWdmTHIyN3ZudWNHdndLMzhFOWx1NDJGQVk3bEZHeVlrWmNHejJZa0ZMZ2tnK1RrT3NkeXF0akphb21qblo3Z04zQW5RaWRHc29zT2hXWERySFpkbzFpQzRZd0hnekV6ZmJnbEtzQm00ZzFOa3F1VVN3R3NiNG5lWUVHNU1UanA1V0c2UDBSSWVCc3d4TjNCU0RkM2cyZ3ZBYy9pcm94MzV3c0dWMURXNVVLLzBERGVtTmxaZUNJNWlqUWtpa1Q5MWpZMUdqQVo4YXNBWDRBSTdRajN1czRCT0pPcGw2bkZmUmFVNzdBSTNOdHYwMFJLK2dEQncrMUthU1R1dmdYT0F1Nm1PWndxUnVVY0VPdVNTdUlUbjkreDhUQzlMNGhMcXBUcWR5bklqQ2RiYmMrNnQxdGJXRmlRYU1Scm9TQU1BbkYvTXBYb0EzbEhHS0c5cmRkazgrQldmRzlXd05UVTExZnFhb1NqS2RUU0hTd0FOQVBDc2pEWVRHUWYxeGI5SVl6UFZjbFdVMVVhVmRMaXBvYUVCRzQwWURRU2xBUjF3dVlyekRsR1FSWnVQVW1XYjkzNysxcjNMMC9mbnVRTTkrTlhoZGh1NGZXamZKSFdvQVF0d29jd3J0eVFIQzZ2WDd1MVd2Y3REQmttcmI3WUJic3RURXJoVlFsMWRIYjgyYXNSb0lEUU5BSEE4aitmcklpKzBrc0xMelJlNXdxL2lHYU1sUXJxN29xTEN3NnlIZHlpemR5cHA0SndGZDFNRHp6NG5veWpSYkQ5T3JNcGFEOHZ0bHFGQUFPNHVMeThYOHFOWkwzT3NKTkVBZjZ1R0xmZzV3S1BkSk1CZFh1TUN2NHBsSEYvY0VsV1gwNmRQVjV2UkVxVUs4OU5KRFp3RFBQb3VDdjR0VHBWVHRWNXRnVnZSdm52Mzdob0R0NjRlRSsrTUJnQjRCcytoREd2cXZhQThwSWxJWFBJaFhkSWtqeDdLTnNrdklhNHE5eHl5QTI0UHk0MFZpSHZseXBYVlBOYk5Nem9iTVJvSVR3TVc0RjdGZU1PSnpaS214d1ZhNzFEUGc3aEljek5WdmJhK1Nkd1NKRnN6VGdudGJoNHhLVEhXVzFSbXduQTBBTURUWWNHNWtLNWNjQVhMSXlVbGZCaUxZOVJiM0JMRXNjRlZXMXRiZ2hValJnT1IwSUFGdU9hS1JLSmM3ekpxRzJ3bG5PYmlSVHdSQmJmUWpnMHVIZzc4MUZodTFvU1JpR2tBZ0tmeHVKeTNpeEdwZFZTMHF0YjlLUWVLWVE0VjAySzVCWEEzajVnVUk3TVJvNEZJYWtBQWoyU1plbG1uS3VnZ3Ixc2NZeHZnMWhOYWVjVGtvTEhjVUkyUlNHdEFBSStVeFpaeVVNODloMXd3eXZpYW1jV3pXRzVzVnlaOTRjS0ZuL0wzQ3hFM1lqUVFjUTBBY0NmUGpBTXdJeVZNcTJ2aGFzZW5YSjVpV01vVnVJVjIxNjVkdXhwNHhPU1laRENoMFVDa05hQURMdFkzbkxDK3lYWnMxNEVtZnNQVHVxQUV6OVpvaVFVM3A3WFcxTlFZMXdUYU1kSmxHc0M3dXJEZzRRcGM2Sm9HTi94dHVDU3czTUt5Qjl4aTBsMG5UcHpZYlB6dWNOVnU5ZytrQVFFOGxERndsT25oMFRES0o4dHNtem5aNHBmakhwWWIreUFCR1ZxM2JObXl3YmpkVUltUnJ0WUFBSGVFNElNTDJISkM0T3ZJVy9lM2J1QjY2cFpiVmJ1ZHo0MU1QLzNwVDNmeml3dm1ObnhYOTZ3cFgya0FnSGQyWnRuR0ZxcjY4UXVPM2VDV0Y1OXVDUTVpV2U3cTZ1cW1zMmZQYmpXdUNkUmlKQm9hRU1CRE9SYjRMS3VnTFl3cnZtR3V3NjJLRWN1TkZRdHVqcmNjTzNic0F3TzMwcEg1aVpJR0JQQmdSMDVRcldObHRrMGM0SzMzZ0hBRGNHUnEyYkJodzNyamQ3TW1qRVJWQXdBY2NBY2o4TGZYN1d4ZHoza0ZidkNMUllsZURPSVluT0VYOXRXY2E5M09uRG16bm1kKzdhRnlwdWlQNDhqamhNVklkRFVRak5kUVZlY3VLN2loZVNMWHJKSVhQTzdLTTZrbzQ2d0FsOWZNT0UwUmowUTFZc0poQzhPOW1UK1ZmYjA5VWI4RWhGYUZLYzJ0YVZSZVlSbURNRXN6dTRlaWdZNEFkN0haUG55S01BUW9WdHZqWWhMSDBlSEd1c0NOSFZyMjdkdTNldURBZ1JHRjIxYXhtMnpIMXBMTjNZemp4YjNZRzg5UWVsMDJQeklNM2JVWGY5amp0U2RmNGk4ZGVmM3M0dmVGVzM5bCtTdEhIYU9EamFHVzV6ZC9SOGZ3MDhwUXkycHBkZE91dmEyckdWUEZLcmRONEVZemxlaHVDUkt3RHVCNVBrL0tHemx5Wk0vMTY5ZS96NS92aThnWEZ3QzI4eDlmWnJEaDFpZU9WTlc3Y0Jjc2NTcWNBald0YlhSWGYvbC9LNi9lZDZycEREY1hyNWZoOWp0QXR6cktsK1hHUnREWHpKYTc3c2lSSTZ0SGpCaHhVeVJjRTl2aFY4bFdlNFNMVGl6SlIzWFpMdFJpd01sSXpEV0F4L3FPbjZIViswNFJmMWlRNEFLQVYzQnJnYzF4Ni9ZNzRpSXc3MWh3RmpUeHFNbEtuaUJUdG9VVjJseUpTMGMrZitHTEp6YzNFZ2NhWUkrRXRoeWlsVndWQUFWT2hWbVAydW5qM0xKQkxMZnlaZTYvLy81TlZWVlZSenR5N21YSFpBOEJlQzZQSmNGM00wdHNkQURiekY5NE9QcTlQNU9NYjROVHNkd2VDUHFEV3dDSHlXOHVLU2w1emNCOVRtOTVmRFdTZzhGU0l6SFJBQzQ4U3l2b05UNjRZcE5EQVJ2TWVvZ3Z1SkVCWmg0NzRheG81aWtmL3RyTTc4NGJPYWNCQVR6WU8ya21IMXQ1L3F1THhOTENDSy9hU1g4Rmw3eUkxUWF2N2NRZjNEZ0xMTC83eVNlZkxDNHJLOXR1clBkNS9RSHdiT09EbjFkSUZHS3cydVcxdFAzLzNxWmlQcHp1YjdlejJxaE9NSERqN0dqYXNXUEhTeTFxU0JHN0dZRUdsQVZud0kzL0hSMGR0TEs1M1hXQ1htTFZDOWhnRTBZNEpMZzV2OW9CTzhMOE44MmNPZk0xbnZhaDFGaHZxT2E4NUJvTGZsNFpYUmlEMWE2c3A5TDdsaWwvRzNDRFM3OWdveXIrTERlMjRXeXcvRzUrOWF4aCsvYnRmNGpVc0NBT2tDd2lnRWZDcHpSbCtQYk44WkRVemhQMGg1b2FkYk5HOTdkOVdtMndGUWh1QVZ4WjcyOSs4NXQvcmF5c1BHbXNkL3ZURW9CbjhkUmhSaUt2QVdXMUcrams3T1hxUWxLc3R0OVJFcWxCUjNBakQ4dytDZ0hjalVlUEhxM2R1WFBuSW1POVdScyt4Rmh3MzFZMzNIOGpXTzI5SjJqUjBRcjFRU2M4K1FjZXdTWDQ5Q3VCNElibFJnSHFvcExEeG05Lys5c3IrRTJkTW1POWZlc1VZK0RHZ3Z2V1RXZFNZYlZybXFqc3h5dHBCZmpqUlM0bU8vUzNjYXhBY0NPUFdHOEZPRDl2VXJWbno1NFhqZldHYW55TEFHNUdVY0lmUmNGekpQdFAwb3Y3amhQZTZSV3dBMXB0OUV3d2NJdjFWbjQzNzlNNFo4NmNsOWg2VnhyckRSWDZGZ1c0R1FmM3Jad2dVMkcxcXh1cDh1ZC9WOE4vWXJYQllVQ3JqVU1FQXpmeWlmVld2dmZHalJ2TE4yL2UvTFM1YXduVitCZmM1TW5DT0hpRTdzNmxXamt0VE4yMlVucDZhd21WczVhRDlyV2xSNEtGMjl0Nk44eVlNV01GVDk2ejA3eG5LYXIwSFFMd1RET0s0bHM1SGFUQ0hUbFZUVHZ2V3FSOGJUeXJMYU1rUVZsdEZCMHMzTWpyWWIzNTh5TDF5NVl0bTh2em03aU1ld0wxK0JjQjNQamd3Zm5ndU1QQzg1RzRYdDVHYzNuU2hucldiTWhXRzcwUkN0enRyUGZERHovODhmNzkrLzlzTGk3OWd5MWJCSEJaTjZGL0RlQTIrNEV6OU9kZnZFNGZjNjVPV1cyVUhncmN5Qy9XRzM4Uk9Kc2F2di85Ny8rR2I4dWZOZFliNnVsWTRIL0RSVWsxM3ptVTlrS0RsWTEwOXNkL3BkOXdGR0RMaFdSUUl5VFlYeVJVdUdHOWNSQU1DK0tnOWUrOTkxNFpYMkQrbXQwVVhqVVNTQU1BUE1QNzViNUFPNlhROWlhbWEwc0ovWHJqUVNyalpvdExBdDdBSGZnTFdrS0ZHd1VMNEdya2hOZnIrZUp5SmQrOTNHYmNrK0QwTG9DSFl0RlNJUy91Uko2b29tMjN2NkJlSVJPd3dWbklZS01uT2dzMzNCUHJyaVhIRytiTm0vY0l2NDVXWTBaUG9OYkFJb0FIem5rK0J5NUlJWEpoS25HVjJKWXVhWHBlMlI0bzFQZlI0LzcyMC9Qb2NYLzVPMHJINkVobEE5VTg4MDk2aFBQcDdnZzRBMjhoV1cwY3F6TndZei94dlMzci9keHp6eDFjdlhyMUwzajBoT2ZaQ0xrZUtEUGxCUDQzWEJTQUVjd0NCUWxFZWx6MjFkUDB1R3dQRk9yNzZIRi8rK2w1OUxpLy9QN1MyMFpIYU8wKytzWHYzMWNmYnZLMjJ1QXRaT2tzM0RnUURpaldHMmRhL1YxMzNmWG0zcjE3bDV1Yk8xQlBjQUxBMDFQY0IyOW1wNE9uYVZqK2pjWDBKbXNOWU1zSWlWanQ0SlRwbFNzY3VHR2VBYmhZYjFTbzdwWmJidm5WOGVQSDl4ci8yMHZUSGF4YUZweE5XeXI0MW5vYjRXZWZyS0c5ZHk2a1g0RWZYc1FsQVZmZ3E5TnVRQVMrU3NLSFB5ODI5cnQ1Z3F1V0R5ZE1tUENWakl5TWRNemFLV0kvOFM1aE1kSmVBK3I3TU55TjZHd1IwWnkvdi9OSXArTzRja3c5THNmUjAvUzRiQTgxeEF4MVZRMVUrOHMxOUsxLzdxVmpYR1l0TDdEYzhvQ1VwZzBjTVRRSngzTGpTRGk0dDN0U04zLytmUGpmanhuL083VE95R0FYSlEyZjBPRGRzRUFrUExmV3RiOXlMSC9IRDdROWxOcmhzcXlCblk2Mzl0Smp2MzlYK2RsaXRRWHNzS3cyNmhJdTNDaERBQmYzQkdkZUhmdmZxL2pSMkJWbS9Cc3FDbDRFOE9EM1NNeWNHTS9lYzRKVzNMdVlWbkVMQURhNHdiMlRzTjBSTGtOSkpPQkdRVGpMTUJicEFmajA2ZE9mTEM0dWZ0OEFEaFVGTHdBY0Y1bTZiNXBNY1Z4QWxweWw5Mjk4anA1a3JYaUREWTdBVTlnU0tiaFJFVmh3ZmZTa2p0KzNyTG41NXB0L1dGcGErckVaUVFtdHJ3QTNYSlJrRTRCOXBKdysvdHJ6OU1QS09qVmh2TGM3QW80aUlwR0dXL3h2L0wybzBaTURCdzVVOEh5REQvSGpzY1V0ZUVEWFNOQWFFTUNUeFdyamdhaVQxVlQ4NEV2MDBJRlRWTUdLRUxEQml3ejdSUXp1cnJZTnFxS0hEaDFxNHR2ekd5WmZtSFZOYnNVSHVmejVieU5CYXNEUlpuN2t2cGl1T29rajlMWGdFSkpIai92S0sva2s3RXgrN0tPTGxJVVFkeUJQMTlDSk9hL1EvVy9zb1NPY2hKRVJ3QjFSUDV2THM2UXI0UFo1NXZIRlpiMnIxYjFsWE5IUmEvbXVYS1lCM09xRGdCRmZnT3ZnK0N0QXo2UEh1eW8vanFFdk9BN1dZYkY1R3JTS1g3MU5EeXphUUFjNFNZYjg4TytPNjdTSStkbGNsaVZkQVRjS0IrQ3l5TUZzSCt3NldzblRBTys4cEQ5ZHg0Q25HY0JGTllGREFWd2ZCdys4Vit4ekFHeWVLYXIrRCt2cHU3OThrN1p6aldDdHhSM1JoLzBpWHRtdWdsdXZxRUNPME1iUEQ1enBtVXM3UnZhbUtReDRSZ3AvUzByWFVWQnhBVndwa2sxaXZQdmlBUHRzUFZVdjJVaXpmdmFxK2pnVG9CYXJEYkJoc2RHY0xwRm93bzBHcUlhczNrT251ZDBmakJsQWsvbldjNDUwV3BlME1Na0tGVjNCQjlkZGdIaUx0ekMyN0dPZm12Y1dQVGozRGZxSXV3RlFZNEVyb2x2c2hJYWIyMktkbldpSWFzeUdZcXJrWndyZXUvSUNtc2l2WUJWSXB5R3prWTQxSVA5MmNwSFpjZTdvYjIzaWNZL2pWWFRvWjMrakI1NWZSNTl3RGZDTlNOMWlSM3hreEZjcm8yRzU1Ymh5aGxxQWYzeUVhbmNjcDdXZkcwNWorWHN6UlFBY2Y3VkdBbXNnSGdISHlRYXdlZHF6WFE4dXAvOTQ5V05yVkVRSE8ySjNJQU5wS1pwd1MxMEViaFYrZW9ZYVYrK2x0NjhkUmFQeU0ybUFBVnpVRkRnVXdKRXoxdjQzNm9CYjZwK1cwY1piWDZDSE5uMUtwemtKVU1QUDFoK0dZby9VK2lmbmFOZEp0T0hXd1paR3VzL1VVTXVmUHFTMTE0K21mdmtaTk54cExIalFQUzZBeDlKRndSaDJIZHRqbnF6eTlXblAwazlLeTlRTm1waUNEUVZHRzI3cE5CMXl4RjMxamVUNjNYdTA3b29McUx4M043b3kzVUZPNlRqWnlZUytOYUFQcVViYmdxdWh2a1pxNUZHd1gxMy9ORDNML1lnUG5zTEg5alhjaDc2T21zUUtialJRUWQwV1dyQXYzMHI3YlhiYU9MSVBYWkhwcEc3R1RRbU9CUS9BZVpldUhqMUI3L0hFT1hTaWtnNC92WlptelY1QmEvbXdzTmJpWDh1b2lOeWdRUjlIVldJSnR6UVVqWWFMWXJrcDZ3NVFPZnZoYjA0YVNuM1lEeDltM0JSUlZjZWhBTjdWRkNrM2hBZno5cDZrTjI5ZlFEOVkrUkVkNHBvSjJHS3g5VHVQWFYwbG40cUpOZHhvdFBlaVFEOWRUYzNzcHJ3MzlnSTYwenVmeHNGTmtiOWNueTB4aVVvRE10clVGVFRCcjFlMzBodW84ZTM5OUQvVGZrUFBjajlWOG9GMS8xcWVGUkdMSGJPZWlUWGNhTGowZzFodlBYU3YyRXFmdUcyMGJuZ1JYYzQzZkFvZC9IOHJIUmd6cmNYNWdTMzl0T2xLakVJNEljREdtelBIS3FsNDN0czBpNy9nK3k2clFlNDR5b2lJZ0MxOUdGTk53VFdMRjBGZGNMSmg0Y2YxQ2QvcDVROVNxeVc3ZXg3bExMMlg3dmpzSUxxM1d5Wi92SUJ6V1ozSW1ZeTAxd0RjaDNBRlVPTVpiSjVUcEg3cllWckFzNjR1UFZ2dFlhbjFOMmhncmJHSXdRcjM4R0h0SHcrV1cyOEFsQ0tMblAwSVcrdWJ5TFgwQTlweHFJeldYTmliK3ZMazdvUGxZdE5BcnF2d2ZEd2N2WWdMVXN1MmVQOXBlbWZPU3ZyQnd5dnBIZTRIdUNBeUdnS3d2Wi9zaXd1d29ZVjRzdHlvandpZVlzYUNHVDE0ZGoxbHhmbDdZWllsejNqMmRycjZYeTZtMlQzenFEK1BxcEFaTm1UdCtCR0FpaVZZZ2NXSEM4TDNINDYrdG9PZWVuQVp2Yy83d3VVQXpBSTAxdlZuUkNMd1A4RWxSbERpRlc0MEVYVVR3QVZ5QUc0dEEzdFIzb0k3Nko0eEErbU92SFRLZ0t0aUlJZnEya3N3Y0FOcXVDRFZUZFRJajBZc3ZYY3BMU285cmNhdFlaMzFSYURtVThBYTVXcC8wQmlueERQY1VBM3Fod1h1RXdDSEx3NUxiZ0dPK015cmFOQ0RrK251RWIxcE9yc3I2VHl5WWlCbnhYaUxQOEFCTlc2ZHN3dlN0UDhVclhybVBWcjh4NDEwbVBmWGdVWWNVR09JRDFDTGJ4M0Nmd0x2RlVXSmQ3aEZGYWduckxoQUxxNEtMam9GOUl5dlhrYjlaaytsbVNPSzZDdjhYZlpNZmw3Y1FDNGE5QkVDYXR5SXFXNmdCb2I2YjArdG9ULys1U00xT1E1Y0RnRWJjZDBGQWRSd1FlSVdhcTZia2tTQkc1VkZYUVZ5V0hGeFZRQzRRSzdpVTRaVHI0ZS9STGVON2tkZnpjdWdYQVU1N3huT0JSWWZJeWtFMWh0djh5aW9HNmxtMXpINnkzLzluWmF0L1VROTZDUWdBMnlKKzNKQjRoNXNkRllpd1Mxd0NlRGUvampBRm9zT2E1NysyYzlRNFg5L21XNFozWmRtOEozT1FzekpKM2M3VXdsMEFJMEZrdzgwc0ZQQlU1aVY3enBPTC8vMFZWcXg5VlAxcFRBQUxFQWpybHRxOGFzVHdscHozUzFKUkxpbDhnSTVYQlVzOE1kbGZGd2dWOEFYNWxIVzR6ZlN4Q3NHMHZVRHU5TkVmblk4WGF4NU1sK0F3dTBRSzEzYlJFMmxaMm45bGxKNmc0ZjExcGRYVzQraDZoWWFjZmpVY3VzOFlWd1Fybk03U1dTNDBSalVYeUFYbjF3Z0IrQUN1Y1RUeHcybWJqK2NSbE5IOWFacC9Rcm9Zb2JjcG1aM1FrRmNVaUpiZExIUThCbncwZ0M3SHU1akZiUnpEejhEd2kvbnJ0bFVvbTZWd3pMTEloWWE2enJVc05KaXFSUENCZUg2dHBORWgxc2E1QXR5ZlhRRmNBTjZnVnlkQUhkTm9BRjNqNlBwUTNyUWxJSWNHb3hSRm9DdWJnNXg1bmlIWFljWnozd0FhSXg2Vk5SU1NYRVpyVjI4aVZZdDJVQkh1Q2tDcmtDTmRUME8xME9zZE1KRHpXMVJraXh3NiswUjBNVmQwVjBXdVFnVjBNWEtPNzk4Q1JWOWJSeGRNYlFIamUzVGpTN24wWmErY0Ywd2RxN0RqZ1BGd3JvRFpJZ0Nta1BBakRIcHR0R080L3pvNlljSHkyamJuemJSbGxkMzBDbk9BbUIxcUFWb1BSMUF5NElqeU1MUnhKZGtnMXZ2RWJRTnJvcTRLd0k3QUJlb3ZVTnNRejduekhIVTc4WXhkTVdRbmpTV24wcThMRHVOZW1JT2JWeVFBbmJyd3BRelEzVGc5Zmk1cllGL0JWN2tsTGdpalg5d0lRaVlFZUt0Y243cjVjekpLdnFvK0F4dFc3bWR0dnh4a3hxK0UrdXJ3eXR3U3loNUJHZ3UwWEkvQWxjeXdYSWtNOXpTRldMSkJYU0VGc1FjQitCWUYrZ2xyaUJ2UzdkUEdVNkZVeStpd2NPS2FGQlJQZzNxbGtVRDg5TnBJRnY0Zm16ZG5RQWV6MU9MSzZQT0xLOTFiQlBMcTBJR0Z4ZDhBakhTc041bWxWdDQvUGxZVlJPVjhxUTJwYWVxNkREUHIzZDR6VzRxNFdFN2ZBc2RZQUpXQVZiaUFOazdEcGlSSmpBalZJZmxNR2tGZlpBcWdyYnFDK0FGNkFobDhRVTIwbVM3dm84NldYSXp5Zm0xSzZqZlpRTnBRRUVtNWZQMHcxbFphWlROdzQ3WjdMOW5zNFhQWmw4K2k2MStOc09kd1FBM3N2V3RZOSs0bmkxeEhmdkpkVHc4VjFmUFMyTXoxVmMwVU5WSHBYVGtUMXZvV0UyREI1QUFGRkNLMVJWZ0JXUjlYYzhqK3dqTUVuSlJ5UzJwQkxmZWt6cmtpQ3RRT2RUaEZhQjl3UzBuaFlSU2huZTVzbzVqSXk0Q3dDQUNtbmNvbGhXUUNwd0lKUzd3QW15Sis4cnJYUzVuVHgzUkZaNDZyZlpzcVFDb2h3SzdIZ3I0SGFYcFpVZ2NSOVBqV0JmbzlMaWtJUlNRQldaOTNWOGEwdlV5Skk1anBLUkE2VVk4TlNBZ2VvZUFHbW1CUXUvOVVEclN2QVh3UVFSQ1BSUlFBNFg2UGhJL1Y2cjU5YWwwb3haUERRaXNTUFVWbHpROWxMeDZpTGkzQUVpSUhncWszcUhrODg2ckNqQS83VFdBRGpFU3VnWjB2VW5jTzVSU0pWM1c5VkJBbFRSWjl3NnhYZElrcndrRGFLQWp4UWZZMVd3T29JRlFkR3ZBRGFETXpteitmNlNNWUVYNHo3aE1BQUFBQUVsRlRrU3VRbUNDJ307cmV0dXJue0Zhdmljb25zQnlIdWUsfTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWItaW5mby1iYXItZ3JvdXAnLHJlYWR5KCl7dGhpcy5tZXNzYWdlc189W107fSxjbGVhck1lc3NhZ2VzKCl7dGhpcy5tZXNzYWdlc189W107dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGFkZE1lc3NhZ2UodGV4dCxvcHRfYnV0dG9ucyl7b3B0X2J1dHRvbnM9b3B0X2J1dHRvbnN8fFtdO2ZvcihsZXQgaT0wO2k8b3B0X2J1dHRvbnMubGVuZ3RoO2krKyl7aWYob3B0X2J1dHRvbnNbaV0uYnV0dG9uVGV4dD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdidXR0b25UZXh0IG11c3QgYmUgcHJvdmlkZWQnKTt9Ci1pZihvcHRfYnV0dG9uc1tpXS5vbkNsaWNrPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ29uQ2xpY2sgbXVzdCBiZSBwcm92aWRlZCcpO319Ci10aGlzLm1lc3NhZ2VzXy5wdXNoKHt0ZXh0LGJ1dHRvbnM6b3B0X2J1dHRvbnN8fFtdfSk7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe1BvbHltZXIuZG9tKHRoaXMuJC5tZXNzYWdlcykudGV4dENvbnRlbnQ9Jyc7dGhpcy5tZXNzYWdlc18uZm9yRWFjaChmdW5jdGlvbihtZXNzYWdlKXtjb25zdCBiYXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1pbmZvLWJhcicpO2Jhci5tZXNzYWdlPW1lc3NhZ2UudGV4dDtiYXIudmlzaWJsZT10cnVlO21lc3NhZ2UuYnV0dG9ucy5mb3JFYWNoKGZ1bmN0aW9uKGJ1dHRvbil7YmFyLmFkZEJ1dHRvbihidXR0b24uYnV0dG9uVGV4dCxidXR0b24ub25DbGljayk7fSx0aGlzKTtQb2x5bWVyLmRvbSh0aGlzLiQubWVzc2FnZXMpLmFwcGVuZENoaWxkKGJhcik7fSx0aGlzKTt9fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1iLXRvb2xiYXItYnV0dG9uJ30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWknLGZ1bmN0aW9uKCl7Y29uc3QgVGFzaz10ci5iLlRhc2s7ZnVuY3Rpb24gRmluZENvbnRyb2xsZXIoYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIpe3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfPWJydXNoaW5nU3RhdGVDb250cm9sbGVyO3RoaXMuZmlsdGVySGl0c189W107dGhpcy5jdXJyZW50SGl0SW5kZXhfPS0xO3RoaXMuYWN0aXZlUHJvbWlzZV89UHJvbWlzZS5yZXNvbHZlKCk7dGhpcy5hY3RpdmVUYXNrXz11bmRlZmluZWQ7fQotRmluZENvbnRyb2xsZXIucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZSxnZXQgbW9kZWwoKXtyZXR1cm4gdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8ubW9kZWw7fSxnZXQgYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIoKXtyZXR1cm4gdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl87fSxlbnF1ZXVlT3BlcmF0aW9uXyhvcGVyYXRpb24pe2xldCB0YXNrO2lmKG9wZXJhdGlvbiBpbnN0YW5jZW9mIHRyLmIuVGFzayl7dGFzaz1vcGVyYXRpb247fWVsc2V7dGFzaz1uZXcgdHIuYi5UYXNrKG9wZXJhdGlvbix0aGlzKTt9Ci1pZih0aGlzLmFjdGl2ZVRhc2tfKXt0aGlzLmFjdGl2ZVRhc2tfPXRoaXMuYWN0aXZlVGFza18uZW5xdWV1ZSh0YXNrKTt9ZWxzZXt0aGlzLmFjdGl2ZVRhc2tfPXRhc2s7dGhpcy5hY3RpdmVQcm9taXNlXz1UYXNrLlJ1bldoZW5JZGxlKHRoaXMuYWN0aXZlVGFza18pO3RoaXMuYWN0aXZlUHJvbWlzZV8udGhlbihmdW5jdGlvbigpe3RoaXMuYWN0aXZlUHJvbWlzZV89dW5kZWZpbmVkO3RoaXMuYWN0aXZlVGFza189dW5kZWZpbmVkO30uYmluZCh0aGlzKSk7fX0sc3RhcnRGaWx0ZXJpbmcoZmlsdGVyVGV4dCl7Y29uc3Qgc2M9dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl87aWYoIXNjKXJldHVybjt0aGlzLmVucXVldWVPcGVyYXRpb25fKGZ1bmN0aW9uKCl7dGhpcy5maWx0ZXJIaXRzXz1bXTt0aGlzLmN1cnJlbnRIaXRJbmRleF89LTE7fS5iaW5kKHRoaXMpKTtsZXQgc3RhdGVGcm9tU3RyaW5nO3RyeXtzdGF0ZUZyb21TdHJpbmc9c2MudWlTdGF0ZUZyb21TdHJpbmcoZmlsdGVyVGV4dCk7fWNhdGNoKGUpe3RoaXMuZW5xdWV1ZU9wZXJhdGlvbl8oZnVuY3Rpb24oKXtjb25zdCBvdmVybGF5PW5ldyB0ci51aS5iLk92ZXJsYXkoKTtQb2x5bWVyLmRvbShvdmVybGF5KS50ZXh0Q29udGVudD1lLm1lc3NhZ2U7b3ZlcmxheS50aXRsZT0nVUkgU3RhdGUgTmF2aWdhdGlvbiBFcnJvcic7b3ZlcmxheS52aXNpYmxlPXRydWU7fSk7cmV0dXJuIHRoaXMuYWN0aXZlUHJvbWlzZV87fQotaWYoc3RhdGVGcm9tU3RyaW5nIT09dW5kZWZpbmVkKXt0aGlzLmVucXVldWVPcGVyYXRpb25fKHNjLm5hdlRvUG9zaXRpb24uYmluZCh0aGlzLHN0YXRlRnJvbVN0cmluZyx0cnVlKSk7fWVsc2V7aWYoZmlsdGVyVGV4dC5sZW5ndGg9PT0wKXt0aGlzLmVucXVldWVPcGVyYXRpb25fKHNjLmZpbmRUZXh0Q2xlYXJlZC5iaW5kKHNjKSk7fWVsc2V7Y29uc3QgZmlsdGVyPW5ldyB0ci5jLkZ1bGxUZXh0RmlsdGVyKGZpbHRlclRleHQpO2NvbnN0IGZpbHRlckhpdFNldD1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTt0aGlzLmVucXVldWVPcGVyYXRpb25fKHNjLmFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb25Bc1Rhc2soZmlsdGVyLGZpbHRlckhpdFNldCkpO3RoaXMuZW5xdWV1ZU9wZXJhdGlvbl8oZnVuY3Rpb24oKXt0aGlzLmZpbHRlckhpdHNfPWZpbHRlckhpdFNldC50b0FycmF5KCk7c2MuZmluZFRleHRDaGFuZ2VkVG8oZmlsdGVySGl0U2V0KTt9LmJpbmQodGhpcykpO319Ci1yZXR1cm4gdGhpcy5hY3RpdmVQcm9taXNlXzt9LGdldCBmaWx0ZXJIaXRzKCl7cmV0dXJuIHRoaXMuZmlsdGVySGl0c187fSxnZXQgY3VycmVudEhpdEluZGV4KCl7cmV0dXJuIHRoaXMuY3VycmVudEhpdEluZGV4Xzt9LGZpbmRfKGRpcil7Y29uc3QgZmlyc3RIaXQ9dGhpcy5jdXJyZW50SGl0SW5kZXhfPT09LTE7aWYoZmlyc3RIaXQmJmRpcjwwKXt0aGlzLmN1cnJlbnRIaXRJbmRleF89MDt9Ci1jb25zdCBOPXRoaXMuZmlsdGVySGl0cy5sZW5ndGg7dGhpcy5jdXJyZW50SGl0SW5kZXhfPSh0aGlzLmN1cnJlbnRIaXRJbmRleF8rZGlyK04pJU47aWYoIXRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfKXJldHVybjt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXy5maW5kRm9jdXNDaGFuZ2VkVG8obmV3IHRyLm1vZGVsLkV2ZW50U2V0KHRoaXMuZmlsdGVySGl0c1t0aGlzLmN1cnJlbnRIaXRJbmRleF0pKTt9LGZpbmROZXh0KCl7dGhpcy5maW5kXygxKTt9LGZpbmRQcmV2aW91cygpe3RoaXMuZmluZF8oLTEpO319O3JldHVybntGaW5kQ29udHJvbGxlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBUaW1pbmdUb29sKHZpZXdwb3J0LHRhcmdldEVsZW1lbnQpe3RoaXMudmlld3BvcnRfPXZpZXdwb3J0O3RoaXMub25Nb3VzZU1vdmVfPXRoaXMub25Nb3VzZU1vdmVfLmJpbmQodGhpcyk7dGhpcy5vbkRibENsaWNrXz10aGlzLm9uRGJsQ2xpY2tfLmJpbmQodGhpcyk7dGhpcy50YXJnZXRFbGVtZW50Xz10YXJnZXRFbGVtZW50O3RoaXMuaXNNb3ZpbmdMZWZ0RWRnZV89ZmFsc2U7fQotVGltaW5nVG9vbC5wcm90b3R5cGU9e29uRW50ZXJUaW1pbmcoZSl7dGhpcy50YXJnZXRFbGVtZW50Xy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLHRoaXMub25Nb3VzZU1vdmVfKTt0aGlzLnRhcmdldEVsZW1lbnRfLmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJyx0aGlzLm9uRGJsQ2xpY2tfKTt9LG9uQmVnaW5UaW1pbmcoZSl7aWYoIXRoaXMuaXNUb3VjaFBvaW50SW5zaWRlVHJhY2tCb3VuZHNfKGUuY2xpZW50WCxlLmNsaWVudFkpKXtyZXR1cm47fQotY29uc3QgcHQ9dGhpcy5nZXRTbmFwcGVkVG9FdmVudFBvc2l0aW9uXyhlKTt0aGlzLm1vdXNlRG93bkF0XyhwdC54LHB0LnkpO3RoaXMudXBkYXRlU25hcEluZGljYXRvcnNfKHB0KTt9LHVwZGF0ZVNuYXBJbmRpY2F0b3JzXyhwdCl7aWYoIXB0LnNuYXBwZWQpcmV0dXJuO2NvbnN0IGlyPXRoaXMudmlld3BvcnRfLmludGVyZXN0UmFuZ2U7aWYoaXIubWluPT09cHQueCl7aXIubGVmdFNuYXBJbmRpY2F0b3I9bmV3IHRyLnVpLlNuYXBJbmRpY2F0b3IocHQueSxwdC5oZWlnaHQpO30KLWlmKGlyLm1heD09PXB0Lngpe2lyLnJpZ2h0U25hcEluZGljYXRvcj1uZXcgdHIudWkuU25hcEluZGljYXRvcihwdC55LHB0LmhlaWdodCk7fX0sb25VcGRhdGVUaW1pbmcoZSl7Y29uc3QgcHQ9dGhpcy5nZXRTbmFwcGVkVG9FdmVudFBvc2l0aW9uXyhlKTt0aGlzLm1vdXNlTW92ZUF0XyhwdC54LHB0LnksdHJ1ZSk7dGhpcy51cGRhdGVTbmFwSW5kaWNhdG9yc18ocHQpO30sb25FbmRUaW1pbmcoZSl7dGhpcy5tb3VzZVVwXygpO30sb25FeGl0VGltaW5nKGUpe3RoaXMudGFyZ2V0RWxlbWVudF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyx0aGlzLm9uTW91c2VNb3ZlXyk7dGhpcy50YXJnZXRFbGVtZW50Xy5yZW1vdmVFdmVudExpc3RlbmVyKCdkYmxjbGljaycsdGhpcy5vbkRibENsaWNrXyk7fSxvbk1vdXNlTW92ZV8oZSl7aWYoZS5idXR0b24pcmV0dXJuO2NvbnN0IHdvcmxkWD10aGlzLmdldFdvcmxkWEZyb21FdmVudF8oZSk7dGhpcy5tb3VzZU1vdmVBdF8od29ybGRYLGUuY2xpZW50WSxmYWxzZSk7fSxvbkRibENsaWNrXyhlKXt9LGlzVG91Y2hQb2ludEluc2lkZVRyYWNrQm91bmRzXyhjbGllbnRYLGNsaWVudFkpe2lmKCF0aGlzLnZpZXdwb3J0X3x8IXRoaXMudmlld3BvcnRfLm1vZGVsVHJhY2tDb250YWluZXJ8fCF0aGlzLnZpZXdwb3J0Xy5tb2RlbFRyYWNrQ29udGFpbmVyLmNhbnZhcyl7cmV0dXJuIGZhbHNlO30KLWNvbnN0IGNhbnZhcz10aGlzLnZpZXdwb3J0Xy5tb2RlbFRyYWNrQ29udGFpbmVyLmNhbnZhcztjb25zdCBjYW52YXNSZWN0PWNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihjbGllbnRYPj1jYW52YXNSZWN0LmxlZnQmJmNsaWVudFg8PWNhbnZhc1JlY3QucmlnaHQmJmNsaWVudFk+PWNhbnZhc1JlY3QudG9wJiZjbGllbnRZPD1jYW52YXNSZWN0LmJvdHRvbSl7cmV0dXJuIHRydWU7fQotcmV0dXJuIGZhbHNlO30sbW91c2VEb3duQXRfKHdvcmxkWCx5KXtjb25zdCBpcj10aGlzLnZpZXdwb3J0Xy5pbnRlcmVzdFJhbmdlO2NvbnN0IGR0PXRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgbmVhcm5lc3NUaHJlc2hvbGRXb3JsZD1kdC54Vmlld1ZlY3RvclRvV29ybGQoNipwaXhlbFJhdGlvKTtpZihpci5pc0VtcHR5KXtpci5zZXRNaW5BbmRNYXgod29ybGRYLHdvcmxkWCk7aXIucmlnaHRTZWxlY3RlZD10cnVlO3RoaXMuaXNNb3ZpbmdMZWZ0RWRnZV89ZmFsc2U7cmV0dXJuO30KLWlmKE1hdGguYWJzKHdvcmxkWC1pci5taW4pPG5lYXJuZXNzVGhyZXNob2xkV29ybGQpe2lyLmxlZnRTZWxlY3RlZD10cnVlO2lyLm1pbj13b3JsZFg7dGhpcy5pc01vdmluZ0xlZnRFZGdlXz10cnVlO3JldHVybjt9Ci1pZihNYXRoLmFicyh3b3JsZFgtaXIubWF4KTxuZWFybmVzc1RocmVzaG9sZFdvcmxkKXtpci5yaWdodFNlbGVjdGVkPXRydWU7aXIubWF4PXdvcmxkWDt0aGlzLmlzTW92aW5nTGVmdEVkZ2VfPWZhbHNlO3JldHVybjt9Ci1pci5zZXRNaW5BbmRNYXgod29ybGRYLHdvcmxkWCk7aXIucmlnaHRTZWxlY3RlZD10cnVlO3RoaXMuaXNNb3ZpbmdMZWZ0RWRnZV89ZmFsc2U7fSxtb3VzZU1vdmVBdF8od29ybGRYLHksbW91c2VEb3duKXtpZihtb3VzZURvd24pe3RoaXMudXBkYXRlTW92aW5nRWRnZV8od29ybGRYKTtyZXR1cm47fQotY29uc3QgaXI9dGhpcy52aWV3cG9ydF8uaW50ZXJlc3RSYW5nZTtjb25zdCBkdD10aGlzLnZpZXdwb3J0Xy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IG5lYXJuZXNzVGhyZXNob2xkV29ybGQ9ZHQueFZpZXdWZWN0b3JUb1dvcmxkKDYqcGl4ZWxSYXRpbyk7aWYoTWF0aC5hYnMod29ybGRYLWlyLm1pbik8bmVhcm5lc3NUaHJlc2hvbGRXb3JsZCl7aXIubGVmdFNlbGVjdGVkPXRydWU7aXIucmlnaHRTZWxlY3RlZD1mYWxzZTtyZXR1cm47fQotaWYoTWF0aC5hYnMod29ybGRYLWlyLm1heCk8bmVhcm5lc3NUaHJlc2hvbGRXb3JsZCl7aXIubGVmdFNlbGVjdGVkPWZhbHNlO2lyLnJpZ2h0U2VsZWN0ZWQ9dHJ1ZTtyZXR1cm47fQotaXIubGVmdFNlbGVjdGVkPWZhbHNlO2lyLnJpZ2h0U2VsZWN0ZWQ9ZmFsc2U7cmV0dXJuO30sdXBkYXRlTW92aW5nRWRnZV8obmV3V29ybGRYKXtjb25zdCBpcj10aGlzLnZpZXdwb3J0Xy5pbnRlcmVzdFJhbmdlO2xldCBhPWlyLm1pbjtsZXQgYj1pci5tYXg7aWYodGhpcy5pc01vdmluZ0xlZnRFZGdlXyl7YT1uZXdXb3JsZFg7fWVsc2V7Yj1uZXdXb3JsZFg7fQotaWYoYTw9Yil7aXIuc2V0TWluQW5kTWF4KGEsYik7fWVsc2V7aXIuc2V0TWluQW5kTWF4KGIsYSk7fQotaWYoaXIubWluPT09bmV3V29ybGRYKXt0aGlzLmlzTW92aW5nTGVmdEVkZ2VfPXRydWU7aXIubGVmdFNlbGVjdGVkPXRydWU7aXIucmlnaHRTZWxlY3RlZD1mYWxzZTt9ZWxzZXt0aGlzLmlzTW92aW5nTGVmdEVkZ2VfPWZhbHNlO2lyLmxlZnRTZWxlY3RlZD1mYWxzZTtpci5yaWdodFNlbGVjdGVkPXRydWU7fX0sbW91c2VVcF8oKXtjb25zdCBkdD10aGlzLnZpZXdwb3J0Xy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCBpcj10aGlzLnZpZXdwb3J0Xy5pbnRlcmVzdFJhbmdlO2lyLmxlZnRTZWxlY3RlZD1mYWxzZTtpci5yaWdodFNlbGVjdGVkPWZhbHNlO2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgbWluV2lkdGhWYWx1ZT1kdC54Vmlld1ZlY3RvclRvV29ybGQoMipwaXhlbFJhdGlvKTtpZihpci5yYW5nZTxtaW5XaWR0aFZhbHVlKXtpci5yZXNldCgpO319LGdldFdvcmxkWEZyb21FdmVudF8oZSl7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCBjYW52YXM9dGhpcy52aWV3cG9ydF8ubW9kZWxUcmFja0NvbnRhaW5lci5jYW52YXM7Y29uc3Qgd29ybGRPZmZzZXQ9Y2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7Y29uc3Qgdmlld1g9KGUuY2xpZW50WC13b3JsZE9mZnNldCkqcGl4ZWxSYXRpbztyZXR1cm4gdGhpcy52aWV3cG9ydF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm0ueFZpZXdUb1dvcmxkKHZpZXdYKTt9LGdldFNuYXBwZWRUb0V2ZW50UG9zaXRpb25fKGUpe2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgRVZFTlRfU05BUF9SQU5HRT0xNipwaXhlbFJhdGlvO2NvbnN0IG1vZGVsVHJhY2tDb250YWluZXI9dGhpcy52aWV3cG9ydF8ubW9kZWxUcmFja0NvbnRhaW5lcjtjb25zdCBtb2RlbFRyYWNrQ29udGFpbmVyUmVjdD1tb2RlbFRyYWNrQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IHZpZXdwb3J0PXRoaXMudmlld3BvcnRfO2NvbnN0IGR0PXZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IHdvcmxkTWF4RGlzdD1kdC54Vmlld1ZlY3RvclRvV29ybGQoRVZFTlRfU05BUF9SQU5HRSk7Y29uc3Qgd29ybGRYPXRoaXMuZ2V0V29ybGRYRnJvbUV2ZW50XyhlKTtjb25zdCBtb3VzZVk9ZS5jbGllbnRZO2NvbnN0IHNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTttb2RlbFRyYWNrQ29udGFpbmVyLmFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uKHdvcmxkWCx3b3JsZE1heERpc3QsbW91c2VZLG1vdXNlWSxzZWxlY3Rpb24pO2lmKCFzZWxlY3Rpb24ubGVuZ3RoKXttb2RlbFRyYWNrQ29udGFpbmVyLmFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uKHdvcmxkWCx3b3JsZE1heERpc3QsbW9kZWxUcmFja0NvbnRhaW5lclJlY3QudG9wLG1vZGVsVHJhY2tDb250YWluZXJSZWN0LmJvdHRvbSxzZWxlY3Rpb24pO30KLWxldCBtaW5EaXN0WD13b3JsZE1heERpc3Q7bGV0IG1pbkRpc3RZPUluZmluaXR5O2NvbnN0IHBpeFdpZHRoPWR0LnhWaWV3VmVjdG9yVG9Xb3JsZCgxKTtjb25zdCByZXN1bHQ9e3g6d29ybGRYLHk6bW91c2VZLW1vZGVsVHJhY2tDb250YWluZXJSZWN0LnRvcCxoZWlnaHQ6MCxzbmFwcGVkOmZhbHNlfTtjb25zdCBldmVudEJvdW5kcz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7Zm9yKGNvbnN0IGV2ZW50IG9mIHNlbGVjdGlvbil7Y29uc3QgdHJhY2s9dmlld3BvcnQudHJhY2tGb3JFdmVudChldmVudCk7Y29uc3QgdHJhY2tSZWN0PXRyYWNrLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2V2ZW50Qm91bmRzLnJlc2V0KCk7ZXZlbnQuYWRkQm91bmRzVG9SYW5nZShldmVudEJvdW5kcyk7bGV0IGV2ZW50WDtpZihNYXRoLmFicyhldmVudEJvdW5kcy5taW4td29ybGRYKTxNYXRoLmFicyhldmVudEJvdW5kcy5tYXgtd29ybGRYKSl7ZXZlbnRYPWV2ZW50Qm91bmRzLm1pbjt9ZWxzZXtldmVudFg9ZXZlbnRCb3VuZHMubWF4O30KLWNvbnN0IGRpc3RYPWV2ZW50WC13b3JsZFg7Y29uc3QgZXZlbnRZPXRyYWNrUmVjdC50b3A7Y29uc3QgZXZlbnRIZWlnaHQ9dHJhY2tSZWN0LmhlaWdodDtjb25zdCBkaXN0WT1NYXRoLmFicyhldmVudFkrZXZlbnRIZWlnaHQvMi1tb3VzZVkpO2lmKChkaXN0WDw9bWluRGlzdFh8fE1hdGguYWJzKGRpc3RYLW1pbkRpc3RYKTxwaXhXaWR0aCkmJmRpc3RZPG1pbkRpc3RZKXttaW5EaXN0WD1kaXN0WDttaW5EaXN0WT1kaXN0WTtyZXN1bHQueD1ldmVudFg7cmVzdWx0Lnk9ZXZlbnRZKwotbW9kZWxUcmFja0NvbnRhaW5lci5zY3JvbGxUb3AtbW9kZWxUcmFja0NvbnRhaW5lclJlY3QudG9wO3Jlc3VsdC5oZWlnaHQ9ZXZlbnRIZWlnaHQ7cmVzdWx0LnNuYXBwZWQ9dHJ1ZTt9fQotcmV0dXJuIHJlc3VsdDt9fTtyZXR1cm57VGltaW5nVG9vbCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWknLGZ1bmN0aW9uKCl7Y29uc3Qga0RlZmF1bHRQYW5BbmltYXRpb25EdXJhdGlvbk1zPTEwMC4wO2NvbnN0IGxlcnA9dHIuYi5tYXRoLmxlcnA7ZnVuY3Rpb24gVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtUGFuQW5pbWF0aW9uKGRlbHRhWCxkZWx0YVksb3B0X2R1cmF0aW9uTXMpe3RoaXMuZGVsdGFYPWRlbHRhWDt0aGlzLmRlbHRhWT1kZWx0YVk7aWYob3B0X2R1cmF0aW9uTXM9PT11bmRlZmluZWQpe3RoaXMuZHVyYXRpb25Ncz1rRGVmYXVsdFBhbkFuaW1hdGlvbkR1cmF0aW9uTXM7fWVsc2V7dGhpcy5kdXJhdGlvbk1zPW9wdF9kdXJhdGlvbk1zO30KLXRoaXMuc3RhcnRQYW5YPXVuZGVmaW5lZDt0aGlzLnN0YXJ0UGFuWT11bmRlZmluZWQ7dGhpcy5zdGFydFRpbWVNcz11bmRlZmluZWQ7fQotVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtUGFuQW5pbWF0aW9uLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmIuQW5pbWF0aW9uLnByb3RvdHlwZSxnZXQgYWZmZWN0c1BhblkoKXtyZXR1cm4gdGhpcy5kZWx0YVkhPT0wO30sY2FuVGFrZU92ZXJGb3IoZXhpc3RpbmdBbmltYXRpb24pe3JldHVybiBleGlzdGluZ0FuaW1hdGlvbiBpbnN0YW5jZW9mIFRpbWVsaW5lRGlzcGxheVRyYW5zZm9ybVBhbkFuaW1hdGlvbjt9LHRha2VPdmVyRm9yKGV4aXN0aW5nLHRpbWVzdGFtcCx0YXJnZXQpe2NvbnN0IHJlbWFpbmluZ0RlbHRhWE9uRXhpc3Rpbmc9ZXhpc3RpbmcuZ29hbFBhblgtdGFyZ2V0LnBhblg7Y29uc3QgcmVtYWluaW5nRGVsdGFZT25FeGlzdGluZz1leGlzdGluZy5nb2FsUGFuWS10YXJnZXQucGFuWTtsZXQgcmVtYWluaW5nVGltZU9uRXhpc3Rpbmc9dGltZXN0YW1wLShleGlzdGluZy5zdGFydFRpbWVNcytleGlzdGluZy5kdXJhdGlvbk1zKTtyZW1haW5pbmdUaW1lT25FeGlzdGluZz1NYXRoLm1heChyZW1haW5pbmdUaW1lT25FeGlzdGluZywwKTt0aGlzLmRlbHRhWCs9cmVtYWluaW5nRGVsdGFYT25FeGlzdGluZzt0aGlzLmRlbHRhWSs9cmVtYWluaW5nRGVsdGFZT25FeGlzdGluZzt0aGlzLmR1cmF0aW9uTXMrPXJlbWFpbmluZ1RpbWVPbkV4aXN0aW5nO30sc3RhcnQodGltZXN0YW1wLHRhcmdldCl7dGhpcy5zdGFydFRpbWVNcz10aW1lc3RhbXA7dGhpcy5zdGFydFBhblg9dGFyZ2V0LnBhblg7dGhpcy5zdGFydFBhblk9dGFyZ2V0LnBhblk7fSx0aWNrKHRpbWVzdGFtcCx0YXJnZXQpe2xldCBwZXJjZW50RG9uZT0odGltZXN0YW1wLXRoaXMuc3RhcnRUaW1lTXMpL3RoaXMuZHVyYXRpb25NcztwZXJjZW50RG9uZT10ci5iLm1hdGguY2xhbXAocGVyY2VudERvbmUsMCwxKTt0YXJnZXQucGFuWD1sZXJwKHBlcmNlbnREb25lLHRoaXMuc3RhcnRQYW5YLHRoaXMuZ29hbFBhblgpO2lmKHRoaXMuYWZmZWN0c1Bhblkpe3RhcmdldC5wYW5ZPWxlcnAocGVyY2VudERvbmUsdGhpcy5zdGFydFBhblksdGhpcy5nb2FsUGFuWSk7fQotcmV0dXJuIHRpbWVzdGFtcD49dGhpcy5zdGFydFRpbWVNcyt0aGlzLmR1cmF0aW9uTXM7fSxnZXQgZ29hbFBhblgoKXtyZXR1cm4gdGhpcy5zdGFydFBhblgrdGhpcy5kZWx0YVg7fSxnZXQgZ29hbFBhblkoKXtyZXR1cm4gdGhpcy5zdGFydFBhblkrdGhpcy5kZWx0YVk7fX07ZnVuY3Rpb24gVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtWm9vbVRvQW5pbWF0aW9uKGdvYWxGb2NhbFBvaW50WFdvcmxkLGdvYWxGb2NhbFBvaW50WFZpZXcsZ29hbEZvY2FsUG9pbnRZLHpvb21JblJhdGlvWCxvcHRfZHVyYXRpb25Ncyl7dGhpcy5nb2FsRm9jYWxQb2ludFhXb3JsZD1nb2FsRm9jYWxQb2ludFhXb3JsZDt0aGlzLmdvYWxGb2NhbFBvaW50WFZpZXc9Z29hbEZvY2FsUG9pbnRYVmlldzt0aGlzLmdvYWxGb2NhbFBvaW50WT1nb2FsRm9jYWxQb2ludFk7dGhpcy56b29tSW5SYXRpb1g9em9vbUluUmF0aW9YO2lmKG9wdF9kdXJhdGlvbk1zPT09dW5kZWZpbmVkKXt0aGlzLmR1cmF0aW9uTXM9a0RlZmF1bHRQYW5BbmltYXRpb25EdXJhdGlvbk1zO31lbHNle3RoaXMuZHVyYXRpb25Ncz1vcHRfZHVyYXRpb25Nczt9Ci10aGlzLnN0YXJ0VGltZU1zPXVuZGVmaW5lZDt0aGlzLnN0YXJ0U2NhbGVYPXVuZGVmaW5lZDt0aGlzLmdvYWxTY2FsZVg9dW5kZWZpbmVkO3RoaXMuc3RhcnRQYW5ZPXVuZGVmaW5lZDt9Ci1UaW1lbGluZURpc3BsYXlUcmFuc2Zvcm1ab29tVG9BbmltYXRpb24ucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYi5BbmltYXRpb24ucHJvdG90eXBlLGdldCBhZmZlY3RzUGFuWSgpe3JldHVybiB0aGlzLnN0YXJ0UGFuWSE9PXRoaXMuZ29hbEZvY2FsUG9pbnRZO30sY2FuVGFrZU92ZXJGb3IoZXhpc3RpbmdBbmltYXRpb24pe3JldHVybiBmYWxzZTt9LHRha2VPdmVyRm9yKGV4aXN0aW5nQW5pbWF0aW9uLHRpbWVzdGFtcCx0YXJnZXQpe3RoaXMuZ29hbFNjYWxlWD10YXJnZXQuc2NhbGVYKnRoaXMuem9vbUluUmF0aW9YO30sc3RhcnQodGltZXN0YW1wLHRhcmdldCl7dGhpcy5zdGFydFRpbWVNcz10aW1lc3RhbXA7dGhpcy5zdGFydFNjYWxlWD10YXJnZXQuc2NhbGVYO3RoaXMuZ29hbFNjYWxlWD10aGlzLnpvb21JblJhdGlvWCp0YXJnZXQuc2NhbGVYO3RoaXMuc3RhcnRQYW5ZPXRhcmdldC5wYW5ZO30sdGljayh0aW1lc3RhbXAsdGFyZ2V0KXtsZXQgcGVyY2VudERvbmU9KHRpbWVzdGFtcC10aGlzLnN0YXJ0VGltZU1zKS90aGlzLmR1cmF0aW9uTXM7cGVyY2VudERvbmU9dHIuYi5tYXRoLmNsYW1wKHBlcmNlbnREb25lLDAsMSk7dGFyZ2V0LnNjYWxlWD1sZXJwKHBlcmNlbnREb25lLHRoaXMuc3RhcnRTY2FsZVgsdGhpcy5nb2FsU2NhbGVYKTtpZih0aGlzLmFmZmVjdHNQYW5ZKXt0YXJnZXQucGFuWT1sZXJwKHBlcmNlbnREb25lLHRoaXMuc3RhcnRQYW5ZLHRoaXMuZ29hbEZvY2FsUG9pbnRZKTt9Ci10YXJnZXQueFBhbldvcmxkUG9zVG9WaWV3UG9zKHRoaXMuZ29hbEZvY2FsUG9pbnRYV29ybGQsdGhpcy5nb2FsRm9jYWxQb2ludFhWaWV3KTtyZXR1cm4gdGltZXN0YW1wPj10aGlzLnN0YXJ0VGltZU1zK3RoaXMuZHVyYXRpb25Nczt9fTtyZXR1cm57VGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtUGFuQW5pbWF0aW9uLFRpbWVsaW5lRGlzcGxheVRyYW5zZm9ybVpvb21Ub0FuaW1hdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IERyYXdUeXBlPXtHRU5FUkFMX0VWRU5UOjEsSU5TVEFOVF9FVkVOVDoyLEJBQ0tHUk9VTkQ6MyxHUklEOjQsRkxPV19BUlJPV1M6NSxNQVJLRVJTOjYsSElHSExJR0hUUzo3LEFOTk9UQVRJT05TOjh9O2NvbnN0IE1BWF9PVkVSU0laRV9NVUxUSVBMRT0zLjA7Y29uc3QgUkVEUkFXX1NMT1A9KE1BWF9PVkVSU0laRV9NVUxUSVBMRS0xKS8yO2NvbnN0IERyYXdpbmdDb250YWluZXI9dHIudWkuYi5kZWZpbmUoJ2RyYXdpbmctY29udGFpbmVyJyx0ci51aS50cmFja3MuVHJhY2spO0RyYXdpbmdDb250YWluZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2RyYXdpbmctY29udGFpbmVyJyk7dGhpcy5jYW52YXNfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO3RoaXMuY2FudmFzXy5jbGFzc05hbWU9J2RyYXdpbmctY29udGFpbmVyLWNhbnZhcyc7dGhpcy5jYW52YXNfLnN0eWxlLmxlZnQ9dHIudWkuYi5jb25zdGFudHMuSEVBRElOR19XSURUSCsncHgnO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzXyk7dGhpcy5jdHhfPXRoaXMuY2FudmFzXy5nZXRDb250ZXh0KCcyZCcpO3RoaXMub2Zmc2V0WV89MDt0aGlzLnZpZXdwb3J0Q2hhbmdlXz10aGlzLnZpZXdwb3J0Q2hhbmdlXy5iaW5kKHRoaXMpO3RoaXMudmlld3BvcnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyx0aGlzLnZpZXdwb3J0Q2hhbmdlXyk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsdGhpcy53aW5kb3dSZXNpemVkXy5iaW5kKHRoaXMpKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsdGhpcy5zY3JvbGxDaGFuZ2VkXy5iaW5kKHRoaXMpKTt9LGdldCBjYW52YXMoKXtyZXR1cm4gdGhpcy5jYW52YXNfO30sY29udGV4dCgpe3JldHVybiB0aGlzLmN0eF87fSx2aWV3cG9ydENoYW5nZV8oKXt0aGlzLmludmFsaWRhdGUoKTt9LHdpbmRvd1Jlc2l6ZWRfKCl7dGhpcy5pbnZhbGlkYXRlKCk7fSxzY3JvbGxDaGFuZ2VkXygpe2lmKHRoaXMudXBkYXRlT2Zmc2V0WV8oKSl7dGhpcy5pbnZhbGlkYXRlKCk7fX0saW52YWxpZGF0ZSgpe2lmKHRoaXMucmFmUGVuZGluZ18pcmV0dXJuO3RoaXMucmFmUGVuZGluZ189dHJ1ZTt0ci5iLnJlcXVlc3RQcmVBbmltYXRpb25GcmFtZSh0aGlzLnByZURyYXdfLHRoaXMpO30scHJlRHJhd18oKXt0aGlzLnJhZlBlbmRpbmdfPWZhbHNlO3RoaXMudXBkYXRlQ2FudmFzU2l6ZUlmTmVlZGVkXygpO3RyLmIucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW5UaGlzRnJhbWVJZlBvc3NpYmxlKHRoaXMuZHJhd18sdGhpcyk7fSxkcmF3Xygpe3RoaXMuY3R4Xy5jbGVhclJlY3QoMCwwLHRoaXMuY2FudmFzXy53aWR0aCx0aGlzLmNhbnZhc18uaGVpZ2h0KTtjb25zdCB0eXBlc1RvRHJhdz1bRHJhd1R5cGUuQkFDS0dST1VORCxEcmF3VHlwZS5ISUdITElHSFRTLERyYXdUeXBlLkdSSUQsRHJhd1R5cGUuSU5TVEFOVF9FVkVOVCxEcmF3VHlwZS5HRU5FUkFMX0VWRU5ULERyYXdUeXBlLk1BUktFUlMsRHJhd1R5cGUuQU5OT1RBVElPTlMsRHJhd1R5cGUuRkxPV19BUlJPV1NdO2Zvcihjb25zdCBpZHggaW4gdHlwZXNUb0RyYXcpe2ZvcihsZXQgaT0wO2k8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytpKXtpZighKHRoaXMuY2hpbGRyZW5baV1pbnN0YW5jZW9mIHRyLnVpLnRyYWNrcy5UcmFjaykpe2NvbnRpbnVlO30KLXRoaXMuY2hpbGRyZW5baV0uZHJhd1RyYWNrKHR5cGVzVG9EcmF3W2lkeF0pO319Ci1jb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IGJvdW5kcz10aGlzLmNhbnZhc18uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgZHQ9dGhpcy52aWV3cG9ydC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCB2aWV3TFdvcmxkPWR0LnhWaWV3VG9Xb3JsZCgwKTtjb25zdCB2aWV3UldvcmxkPWR0LnhWaWV3VG9Xb3JsZChib3VuZHMud2lkdGgqcGl4ZWxSYXRpbyk7Y29uc3Qgdmlld0hlaWdodD1ib3VuZHMuaGVpZ2h0KnBpeGVsUmF0aW87dGhpcy52aWV3cG9ydC5kcmF3R3JpZExpbmVzKHRoaXMuY3R4Xyx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdmlld0hlaWdodCk7fSx1cGRhdGVPZmZzZXRZXygpe2NvbnN0IG1heFlEZWx0YT13aW5kb3cuaW5uZXJIZWlnaHQqUkVEUkFXX1NMT1A7bGV0IG5ld09mZnNldD10aGlzLnNjcm9sbFRvcC1tYXhZRGVsdGE7aWYoTWF0aC5hYnMobmV3T2Zmc2V0LXRoaXMub2Zmc2V0WV8pPD1tYXhZRGVsdGEpcmV0dXJuIGZhbHNlO2NvbnN0IG1heE9mZnNldD10aGlzLnNjcm9sbEhlaWdodC0KLXRoaXMuY2FudmFzXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7bmV3T2Zmc2V0PU1hdGgubWF4KDAsTWF0aC5taW4obmV3T2Zmc2V0LG1heE9mZnNldCkpO2lmKG5ld09mZnNldCE9PXRoaXMub2Zmc2V0WV8pe3RoaXMub2Zmc2V0WV89bmV3T2Zmc2V0O3JldHVybiB0cnVlO30KLXJldHVybiBmYWxzZTt9LHVwZGF0ZUNhbnZhc1NpemVJZk5lZWRlZF8oKXtjb25zdCB2aXNpYmxlQ2hpbGRUcmFja3M9QXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5maWx0ZXIodGhpcy52aXNpYmxlRmlsdGVyXyk7aWYodmlzaWJsZUNoaWxkVHJhY2tzLmxlbmd0aD09PTApe3JldHVybjt9Ci1jb25zdCB0aGlzQm91bmRzPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgZmlyc3RDaGlsZFRyYWNrQm91bmRzPXZpc2libGVDaGlsZFRyYWNrc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBsYXN0Q2hpbGRUcmFja0JvdW5kcz12aXNpYmxlQ2hpbGRUcmFja3NbdmlzaWJsZUNoaWxkVHJhY2tzLmxlbmd0aC0xXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBpbm5lcldpZHRoPWZpcnN0Q2hpbGRUcmFja0JvdW5kcy53aWR0aC0KLXRyLnVpLmIuY29uc3RhbnRzLkhFQURJTkdfV0lEVEg7Y29uc3QgaW5uZXJIZWlnaHQ9TWF0aC5taW4obGFzdENoaWxkVHJhY2tCb3VuZHMuYm90dG9tLWZpcnN0Q2hpbGRUcmFja0JvdW5kcy50b3AsTWF0aC5mbG9vcih3aW5kb3cuaW5uZXJIZWlnaHQqTUFYX09WRVJTSVpFX01VTFRJUExFKSk7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtpZih0aGlzLmNhbnZhc18ud2lkdGghPT1pbm5lcldpZHRoKnBpeGVsUmF0aW8pe3RoaXMuY2FudmFzXy53aWR0aD1pbm5lcldpZHRoKnBpeGVsUmF0aW87dGhpcy5jYW52YXNfLnN0eWxlLndpZHRoPWlubmVyV2lkdGgrJ3B4Jzt9Ci1pZih0aGlzLmNhbnZhc18uaGVpZ2h0IT09aW5uZXJIZWlnaHQqcGl4ZWxSYXRpbyl7dGhpcy5jYW52YXNfLmhlaWdodD1pbm5lckhlaWdodCpwaXhlbFJhdGlvO3RoaXMuY2FudmFzXy5zdHlsZS5oZWlnaHQ9aW5uZXJIZWlnaHQrJ3B4Jzt9Ci1pZih0aGlzLmNhbnZhc18udG9wIT09dGhpcy5vZmZzZXRZXyl7dGhpcy5jYW52YXNfLnRvcD10aGlzLm9mZnNldFlfO3RoaXMuY2FudmFzXy5zdHlsZS50b3A9dGhpcy5vZmZzZXRZXysncHgnO319LHZpc2libGVGaWx0ZXJfKGVsZW1lbnQpe2lmKCEoZWxlbWVudCBpbnN0YW5jZW9mIHRyLnVpLnRyYWNrcy5UcmFjaykpcmV0dXJuIGZhbHNlO3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXNwbGF5IT09J25vbmUnO30sYWRkQ2xvc2VzdEV2ZW50VG9TZWxlY3Rpb24od29ybGRYLHdvcmxkTWF4RGlzdCxsb1ksaGlZLHNlbGVjdGlvbil7Zm9yKGxldCBpPTA7aTx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK2kpe2lmKCEodGhpcy5jaGlsZHJlbltpXWluc3RhbmNlb2YgdHIudWkudHJhY2tzLlRyYWNrKSl7Y29udGludWU7fQotY29uc3QgdHJhY2tDbGllbnRSZWN0PXRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgYT1NYXRoLm1heChsb1ksdHJhY2tDbGllbnRSZWN0LnRvcCk7Y29uc3QgYj1NYXRoLm1pbihoaVksdHJhY2tDbGllbnRSZWN0LmJvdHRvbSk7aWYoYTw9Yil7dGhpcy5jaGlsZHJlbltpXS5hZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKTt9fQotdHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZS5hZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fSxhZGRFdmVudHNUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCl7Zm9yKGxldCBpPTA7aTx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK2kpe2lmKCEodGhpcy5jaGlsZHJlbltpXWluc3RhbmNlb2YgdHIudWkudHJhY2tzLlRyYWNrKSl7Y29udGludWU7fQotdGhpcy5jaGlsZHJlbltpXS5hZGRFdmVudHNUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCk7fX19O3JldHVybntEcmF3aW5nQ29udGFpbmVyLERyYXdUeXBlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBTZWxlY3RhYmxlSXRlbT10ci5tb2RlbC5TZWxlY3RhYmxlSXRlbTtjb25zdCBTZWxlY3Rpb25TdGF0ZT10ci5tb2RlbC5TZWxlY3Rpb25TdGF0ZTtmdW5jdGlvbiBQcm94eVNlbGVjdGFibGVJdGVtKG1vZGVsSXRlbSl7U2VsZWN0YWJsZUl0ZW0uY2FsbCh0aGlzLG1vZGVsSXRlbSk7fQotUHJveHlTZWxlY3RhYmxlSXRlbS5wcm90b3R5cGU9e19fcHJvdG9fXzpTZWxlY3RhYmxlSXRlbS5wcm90b3R5cGUsZ2V0IHNlbGVjdGlvblN0YXRlKCl7Y29uc3QgbW9kZWxJdGVtPXRoaXMubW9kZWxJdGVtXztpZihtb2RlbEl0ZW09PT11bmRlZmluZWQpe3JldHVybiBTZWxlY3Rpb25TdGF0ZS5OT05FO30KLXJldHVybiBtb2RlbEl0ZW0uc2VsZWN0aW9uU3RhdGU7fX07cmV0dXJue1Byb3h5U2VsZWN0YWJsZUl0ZW0sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBFdmVudFByZXNlbnRlcj10ci51aS5iLkV2ZW50UHJlc2VudGVyO2NvbnN0IFNlbGVjdGlvblN0YXRlPXRyLm1vZGVsLlNlbGVjdGlvblN0YXRlO2NvbnN0IExldHRlckRvdFRyYWNrPXRyLnVpLmIuZGVmaW5lKCdsZXR0ZXItZG90LXRyYWNrJyx0ci51aS50cmFja3MuVHJhY2spO0xldHRlckRvdFRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdsZXR0ZXItZG90LXRyYWNrJyk7dGhpcy5pdGVtc189dW5kZWZpbmVkO3RoaXMuaGVhZGluZ189ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1oZWFkaW5nJyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5oZWFkaW5nXyk7fSxzZXQgaGVhZGluZyhoZWFkaW5nKXt0aGlzLmhlYWRpbmdfLmhlYWRpbmc9aGVhZGluZzt9LGdldCBoZWFkaW5nKCl7cmV0dXJuIHRoaXMuaGVhZGluZ18uaGVhZGluZzt9LHNldCB0b29sdGlwKHRvb2x0aXApe3RoaXMuaGVhZGluZ18udG9vbHRpcD10b29sdGlwO30sZ2V0IGl0ZW1zKCl7cmV0dXJuIHRoaXMuaXRlbXNfO30sc2V0IGl0ZW1zKGl0ZW1zKXt0aGlzLml0ZW1zXz1pdGVtczt0aGlzLmludmFsaWRhdGVEcmF3aW5nQ29udGFpbmVyKCk7fSxnZXQgaGVpZ2h0KCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmhlaWdodDt9LHNldCBoZWlnaHQoaGVpZ2h0KXt0aGlzLnN0eWxlLmhlaWdodD1oZWlnaHQ7fSxnZXQgZHVtcFJhZGl1c1ZpZXcoKXtyZXR1cm4gNyood2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpO30sZHJhdyh0eXBlLHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0KXtpZih0aGlzLml0ZW1zXz09PXVuZGVmaW5lZClyZXR1cm47c3dpdGNoKHR5cGUpe2Nhc2UgdHIudWkudHJhY2tzLkRyYXdUeXBlLkdFTkVSQUxfRVZFTlQ6dGhpcy5kcmF3TGV0dGVyRG90c18odmlld0xXb3JsZCx2aWV3UldvcmxkKTticmVhazt9fSxkcmF3TGV0dGVyRG90c18odmlld0xXb3JsZCx2aWV3UldvcmxkKXtjb25zdCBjdHg9dGhpcy5jb250ZXh0KCk7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCBib3VuZHM9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBoZWlnaHQ9Ym91bmRzLmhlaWdodCpwaXhlbFJhdGlvO2NvbnN0IGhhbGZIZWlnaHQ9aGVpZ2h0KjAuNTtjb25zdCB0d29QaT1NYXRoLlBJKjI7Y29uc3QgZHQ9dGhpcy52aWV3cG9ydC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCBkdW1wUmFkaXVzVmlldz10aGlzLmR1bXBSYWRpdXNWaWV3O2NvbnN0IGl0ZW1SYWRpdXNXb3JsZD1kdC54Vmlld1ZlY3RvclRvV29ybGQoaGVpZ2h0KTtjb25zdCBpdGVtcz10aGlzLml0ZW1zXztjb25zdCBsb0k9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KGl0ZW1zLGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBpdGVtLnN0YXJ0O30sdmlld0xXb3JsZCk7Y29uc3Qgb2xkRm9udD1jdHguZm9udDtjdHguZm9udD0nNDAwICcrTWF0aC5mbG9vcig5KnBpeGVsUmF0aW8pKydweCBBcmlhbCc7Y3R4LnN0cm9rZVN0eWxlPSdyZ2IoMCwwLDApJztjdHgudGV4dEJhc2VsaW5lPSdtaWRkbGUnO2N0eC50ZXh0QWxpZ249J2NlbnRlcic7Y29uc3QgZHJhd0l0ZW1zPWZ1bmN0aW9uKHNlbGVjdGVkKXtmb3IobGV0IGk9bG9JO2k8aXRlbXMubGVuZ3RoOysraSl7Y29uc3QgaXRlbT1pdGVtc1tpXTtjb25zdCB4PWl0ZW0uc3RhcnQ7aWYoeC1pdGVtUmFkaXVzV29ybGQ+dmlld1JXb3JsZClicmVhaztpZihpdGVtLnNlbGVjdGVkIT09c2VsZWN0ZWQpY29udGludWU7Y29uc3QgeFZpZXc9ZHQueFdvcmxkVG9WaWV3KHgpO2N0eC5maWxsU3R5bGU9RXZlbnRQcmVzZW50ZXIuZ2V0U2VsZWN0YWJsZUl0ZW1Db2xvckFzU3RyaW5nKGl0ZW0pO2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKHhWaWV3LGhhbGZIZWlnaHQsZHVtcFJhZGl1c1ZpZXcrMC41LDAsdHdvUGkpO2N0eC5maWxsKCk7aWYoaXRlbS5zZWxlY3RlZCl7Y3R4LmxpbmVXaWR0aD0zO2N0eC5zdHJva2VTdHlsZT0ncmdiKDEwMCwxMDAsMCknO2N0eC5zdHJva2UoKTtjdHguYmVnaW5QYXRoKCk7Y3R4LmFyYyh4VmlldyxoYWxmSGVpZ2h0LGR1bXBSYWRpdXNWaWV3LDAsdHdvUGkpO2N0eC5saW5lV2lkdGg9MS41O2N0eC5zdHJva2VTdHlsZT0ncmdiKDI1NSwyNTUsMCknO2N0eC5zdHJva2UoKTt9ZWxzZXtjdHgubGluZVdpZHRoPTE7Y3R4LnN0cm9rZVN0eWxlPSdyZ2IoMCwwLDApJztjdHguc3Ryb2tlKCk7fQotY3R4LmZpbGxTdHlsZT0ncmdiKDI1NSwgMjU1LCAyNTUpJztjdHguZmlsbFRleHQoaXRlbS5kb3RMZXR0ZXIseFZpZXcsaGFsZkhlaWdodCk7fX07ZHJhd0l0ZW1zKGZhbHNlKTtkcmF3SXRlbXModHJ1ZSk7Y3R4LmxpbmVXaWR0aD0xO2N0eC5mb250PW9sZEZvbnQ7fSxhZGRFdmVudHNUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCl7aWYodGhpcy5pdGVtc189PT11bmRlZmluZWQpcmV0dXJuO3RoaXMuaXRlbXNfLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aXRlbS5hZGRUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCx0aGlzKTt9LHRoaXMpO30sYWRkSW50ZXJzZWN0aW5nRXZlbnRzSW5SYW5nZVRvU2VsZWN0aW9uSW5Xb3JsZFNwYWNlKGxvV1gsaGlXWCx2aWV3UGl4V2lkdGhXb3JsZCxzZWxlY3Rpb24pe2lmKHRoaXMuaXRlbXNfPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBpdGVtUmFkaXVzV29ybGQ9dmlld1BpeFdpZHRoV29ybGQqdGhpcy5kdW1wUmFkaXVzVmlldzt0ci5iLml0ZXJhdGVPdmVySW50ZXJzZWN0aW5nSW50ZXJ2YWxzKHRoaXMuaXRlbXNfLGZ1bmN0aW9uKHgpe3JldHVybiB4LnN0YXJ0LWl0ZW1SYWRpdXNXb3JsZDt9LGZ1bmN0aW9uKHgpe3JldHVybiAyKml0ZW1SYWRpdXNXb3JsZDt9LGxvV1gsaGlXWCxmdW5jdGlvbihpdGVtKXtpdGVtLmFkZFRvU2VsZWN0aW9uKHNlbGVjdGlvbik7fS5iaW5kKHRoaXMpKTt9LGFkZEV2ZW50TmVhclRvUHJvdmlkZWRFdmVudFRvU2VsZWN0aW9uKGV2ZW50LG9mZnNldCxzZWxlY3Rpb24pe2lmKHRoaXMuaXRlbXNfPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBpbmRleD10aGlzLml0ZW1zXy5maW5kSW5kZXgoaXRlbT0+aXRlbS5tb2RlbEl0ZW09PT1ldmVudCk7aWYoaW5kZXg9PT0tMSlyZXR1cm4gZmFsc2U7Y29uc3QgbmV3SW5kZXg9aW5kZXgrb2Zmc2V0O2lmKG5ld0luZGV4Pj0wJiZuZXdJbmRleDx0aGlzLml0ZW1zXy5sZW5ndGgpe3RoaXMuaXRlbXNfW25ld0luZGV4XS5hZGRUb1NlbGVjdGlvbihzZWxlY3Rpb24pO3JldHVybiB0cnVlO30KLXJldHVybiBmYWxzZTt9LGFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb24oZmlsdGVyLHNlbGVjdGlvbil7fSxhZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKXtpZih0aGlzLml0ZW1zXz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgaXRlbT10ci5iLmZpbmRDbG9zZXN0RWxlbWVudEluU29ydGVkQXJyYXkodGhpcy5pdGVtc18sZnVuY3Rpb24oeCl7cmV0dXJuIHguc3RhcnQ7fSx3b3JsZFgsd29ybGRNYXhEaXN0KTtpZighaXRlbSlyZXR1cm47aXRlbS5hZGRUb1NlbGVjdGlvbihzZWxlY3Rpb24pO319O2Z1bmN0aW9uIExldHRlckRvdChtb2RlbEl0ZW0sZG90TGV0dGVyLGNvbG9ySWQsc3RhcnQpe3RyLm1vZGVsLlByb3h5U2VsZWN0YWJsZUl0ZW0uY2FsbCh0aGlzLG1vZGVsSXRlbSk7dGhpcy5kb3RMZXR0ZXI9ZG90TGV0dGVyO3RoaXMuY29sb3JJZD1jb2xvcklkO3RoaXMuc3RhcnQ9c3RhcnQ7fQotTGV0dGVyRG90LnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLlByb3h5U2VsZWN0YWJsZUl0ZW0ucHJvdG90eXBlfTtyZXR1cm57TGV0dGVyRG90VHJhY2ssTGV0dGVyRG90LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgQWxlcnRUcmFjaz10ci51aS5iLmRlZmluZSgnYWxlcnQtdHJhY2snLHRyLnVpLnRyYWNrcy5MZXR0ZXJEb3RUcmFjayk7QWxlcnRUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuTGV0dGVyRG90VHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuTGV0dGVyRG90VHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7dGhpcy5oZWFkaW5nPSdBbGVydHMnO3RoaXMuYWxlcnRzXz11bmRlZmluZWQ7fSxnZXQgYWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxlcnRzXzt9LHNldCBhbGVydHMoYWxlcnRzKXt0aGlzLmFsZXJ0c189YWxlcnRzO2lmKGFsZXJ0cz09PXVuZGVmaW5lZCl7dGhpcy5pdGVtcz11bmRlZmluZWQ7cmV0dXJuO30KLXRoaXMuaXRlbXM9dGhpcy5hbGVydHNfLm1hcChmdW5jdGlvbihhbGVydCl7cmV0dXJuIG5ldyB0ci51aS50cmFja3MuTGV0dGVyRG90KGFsZXJ0LFN0cmluZy5mcm9tQ2hhckNvZGUoOTg4OCksYWxlcnQuY29sb3JJZCxhbGVydC5zdGFydCk7fSk7fX07cmV0dXJue0FsZXJ0VHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBUYXNrPXRyLmIuVGFzaztjb25zdCBDb250YWluZXJUcmFjaz10ci51aS5iLmRlZmluZSgnY29udGFpbmVyLXRyYWNrJyx0ci51aS50cmFja3MuVHJhY2spO0NvbnRhaW5lclRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTt9LGRldGFjaCgpe1BvbHltZXIuZG9tKHRoaXMpLnRleHRDb250ZW50PScnO30sZ2V0IHRyYWNrc18oKXtjb25zdCB0cmFja3M9W107Zm9yKGxldCBpPTA7aTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtpKyspe2lmKHRoaXMuY2hpbGRyZW5baV1pbnN0YW5jZW9mIHRyLnVpLnRyYWNrcy5UcmFjayl7dHJhY2tzLnB1c2godGhpcy5jaGlsZHJlbltpXSk7fX0KLXJldHVybiB0cmFja3M7fSxkcmF3VHJhY2sodHlwZSl7dGhpcy50cmFja3NfLmZvckVhY2goZnVuY3Rpb24odHJhY2spe3RyYWNrLmRyYXdUcmFjayh0eXBlKTt9KTt9LGFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbihsb1ZYLGhpVlgsbG9ZLGhpWSxzZWxlY3Rpb24pe2ZvcihsZXQgaT0wO2k8dGhpcy50cmFja3NfLmxlbmd0aDtpKyspe2NvbnN0IHRyYWNrQ2xpZW50UmVjdD10aGlzLnRyYWNrc19baV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgYT1NYXRoLm1heChsb1ksdHJhY2tDbGllbnRSZWN0LnRvcCk7Y29uc3QgYj1NYXRoLm1pbihoaVksdHJhY2tDbGllbnRSZWN0LmJvdHRvbSk7aWYoYTw9Yil7dGhpcy50cmFja3NfW2ldLmFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbihsb1ZYLGhpVlgsbG9ZLGhpWSxzZWxlY3Rpb24pO319Ci10ci51aS50cmFja3MuVHJhY2sucHJvdG90eXBlLmFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fSxhZGRFdmVudHNUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCl7Zm9yKGNvbnN0IHRyYWNrIG9mIHRoaXMudHJhY2tzXyl7dHJhY2suYWRkRXZlbnRzVG9UcmFja01hcChldmVudFRvVHJhY2tNYXApO319LGFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb24oZmlsdGVyLHNlbGVjdGlvbil7Zm9yKGxldCBpPTA7aTx0aGlzLnRyYWNrc18ubGVuZ3RoO2krKyl7dGhpcy50cmFja3NfW2ldLmFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb24oZmlsdGVyLHNlbGVjdGlvbik7fX0sYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbkFzVGFzayhmaWx0ZXIsc2VsZWN0aW9uKXtjb25zdCB0YXNrPW5ldyBUYXNrKCk7Zm9yKGxldCBpPTA7aTx0aGlzLnRyYWNrc18ubGVuZ3RoO2krKyl7dGFzay5zdWJUYXNrKGZ1bmN0aW9uKGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudHJhY2tzX1tpXS5hZGRBbGxFdmVudHNNYXRjaGluZ0ZpbHRlclRvU2VsZWN0aW9uKGZpbHRlcixzZWxlY3Rpb24pO307fShpKSx0aGlzKTt9Ci1yZXR1cm4gdGFzazt9LGFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uKHdvcmxkWCx3b3JsZE1heERpc3QsbG9ZLGhpWSxzZWxlY3Rpb24pe2ZvcihsZXQgaT0wO2k8dGhpcy50cmFja3NfLmxlbmd0aDtpKyspe2NvbnN0IHRyYWNrQ2xpZW50UmVjdD10aGlzLnRyYWNrc19baV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgYT1NYXRoLm1heChsb1ksdHJhY2tDbGllbnRSZWN0LnRvcCk7Y29uc3QgYj1NYXRoLm1pbihoaVksdHJhY2tDbGllbnRSZWN0LmJvdHRvbSk7aWYoYTw9Yil7dGhpcy50cmFja3NfW2ldLmFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uKHdvcmxkWCx3b3JsZE1heERpc3QsbG9ZLGhpWSxzZWxlY3Rpb24pO319Ci10ci51aS50cmFja3MuVHJhY2sucHJvdG90eXBlLmFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9LGFkZENvbnRhaW5lcnNUb1RyYWNrTWFwKGNvbnRhaW5lclRvVHJhY2tNYXApe3RoaXMudHJhY2tzXy5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNrKXt0cmFjay5hZGRDb250YWluZXJzVG9UcmFja01hcChjb250YWluZXJUb1RyYWNrTWFwKTt9KTt9LGNsZWFyVHJhY2tzXygpe3RoaXMudHJhY2tzXy5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNrKXtQb2x5bWVyLmRvbSh0aGlzKS5yZW1vdmVDaGlsZCh0cmFjayk7fSx0aGlzKTt9fTtyZXR1cm57Q29udGFpbmVyVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtmdW5jdGlvbiBDaGFydFBvaW50KG1vZGVsSXRlbSx4LHksb3B0X3lCYXNlKXt0ci5tb2RlbC5Qcm94eVNlbGVjdGFibGVJdGVtLmNhbGwodGhpcyxtb2RlbEl0ZW0pO3RoaXMueD14O3RoaXMueT15O3RoaXMuZG90TGV0dGVyPXVuZGVmaW5lZDt0aGlzLnlCYXNlPW9wdF95QmFzZTt9Ci1DaGFydFBvaW50LnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLlByb3h5U2VsZWN0YWJsZUl0ZW0ucHJvdG90eXBlLH07cmV0dXJue0NoYXJ0UG9pbnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IEV2ZW50UHJlc2VudGVyPXRyLnVpLmIuRXZlbnRQcmVzZW50ZXI7Y29uc3QgU2VsZWN0aW9uU3RhdGU9dHIubW9kZWwuU2VsZWN0aW9uU3RhdGU7Y29uc3QgQ2hhcnRTZXJpZXNUeXBlPXtMSU5FOjAsQVJFQToxfTtjb25zdCBERUZBVUxUX1JFTkRFUklOR19DT05GSUc9e2NoYXJ0VHlwZTpDaGFydFNlcmllc1R5cGUuTElORSxzZWxlY3RlZFBvaW50U2l6ZTo0LHVuc2VsZWN0ZWRQb2ludFNpemU6Myxzb2xpZFNlbGVjdGVkRG90czpmYWxzZSxjb2xvcklkOjAsbGluZVdpZHRoOjEsc2tpcERpc3RhbmNlOjEsdW5zZWxlY3RlZFBvaW50RGVuc2l0eVRyYW5zcGFyZW50OjAuMTAsdW5zZWxlY3RlZFBvaW50RGVuc2l0eU9wYXF1ZTowLjA1LGJhY2tncm91bmRPcGFjaXR5OjAuNSxzdGVwR3JhcGg6dHJ1ZX07Y29uc3QgTEFTVF9QT0lOVF9XSURUSD0xNjtjb25zdCBET1RfTEVUVEVSX1JBRElVU19QWD03O2NvbnN0IERPVF9MRVRURVJfUkFESVVTX1BBRERJTkdfUFg9MC41O2NvbnN0IERPVF9MRVRURVJfU0VMRUNURURfT1VUTElORV9XSURUSF9QWD0zO2NvbnN0IERPVF9MRVRURVJfU0VMRUNURURfT1VUTElORV9ERVRBSUxfV0lEVEhfUFg9MS41O2NvbnN0IERPVF9MRVRURVJfVU5TRUxFQ1RFRF9PVVRMSU5FX1dJRFRIX1BYPTE7Y29uc3QgRE9UX0xFVFRFUl9GT05UX1dFSUdIVD00MDA7Y29uc3QgRE9UX0xFVFRFUl9GT05UX1NJWkVfUFg9OTtjb25zdCBET1RfTEVUVEVSX0ZPTlQ9J0FyaWFsJztjb25zdCBDaGFydFNlcmllc0NvbXBvbmVudD17QkFDS0dST1VORDowLExJTkU6MSxET1RTOjJ9O2Z1bmN0aW9uIENoYXJ0U2VyaWVzKHBvaW50cyxzZXJpZXNZQXhpcyxvcHRfcmVuZGVyaW5nQ29uZmlnKXt0aGlzLnBvaW50cz1wb2ludHM7dGhpcy5zZXJpZXNZQXhpcz1zZXJpZXNZQXhpczt0aGlzLnVzZVJlbmRlcmluZ0NvbmZpZ18ob3B0X3JlbmRlcmluZ0NvbmZpZyk7fQotQ2hhcnRTZXJpZXMucHJvdG90eXBlPXt1c2VSZW5kZXJpbmdDb25maWdfKG9wdF9yZW5kZXJpbmdDb25maWcpe2NvbnN0IGNvbmZpZz1vcHRfcmVuZGVyaW5nQ29uZmlnfHx7fTtmb3IoY29uc3Rba2V5LGRlZmF1bHRWYWx1ZV1vZgotT2JqZWN0LmVudHJpZXMoREVGQVVMVF9SRU5ERVJJTkdfQ09ORklHKSl7bGV0IHZhbHVlPWNvbmZpZ1trZXldO2lmKHZhbHVlPT09dW5kZWZpbmVkKXt2YWx1ZT1kZWZhdWx0VmFsdWU7fQotdGhpc1trZXkrJ18nXT12YWx1ZTt9Ci10aGlzLnRvcFBhZGRpbmc9dGhpcy5ib3R0b21QYWRkaW5nPU1hdGgubWF4KHRoaXMuc2VsZWN0ZWRQb2ludFNpemVfLHRoaXMudW5zZWxlY3RlZFBvaW50U2l6ZV8pLzI7fSxnZXQgcmFuZ2UoKXtjb25zdCByYW5nZT1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7dGhpcy5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihwb2ludCl7cmFuZ2UuYWRkVmFsdWUocG9pbnQueSk7fSx0aGlzKTtyZXR1cm4gcmFuZ2U7fSxkcmF3KGN0eCx0cmFuc2Zvcm0saGlnaERldGFpbHMpe2lmKHRoaXMucG9pbnRzPT09dW5kZWZpbmVkfHx0aGlzLnBvaW50cy5sZW5ndGg9PT0wKXtyZXR1cm47fQotaWYodGhpcy5jaGFydFR5cGVfPT09Q2hhcnRTZXJpZXNUeXBlLkFSRUEpe3RoaXMuZHJhd0NvbXBvbmVudF8oY3R4LHRyYW5zZm9ybSxDaGFydFNlcmllc0NvbXBvbmVudC5CQUNLR1JPVU5ELGhpZ2hEZXRhaWxzKTt9Ci1pZih0aGlzLmNoYXJ0VHlwZV89PT1DaGFydFNlcmllc1R5cGUuTElORXx8aGlnaERldGFpbHMpe3RoaXMuZHJhd0NvbXBvbmVudF8oY3R4LHRyYW5zZm9ybSxDaGFydFNlcmllc0NvbXBvbmVudC5MSU5FLGhpZ2hEZXRhaWxzKTt9Ci10aGlzLmRyYXdDb21wb25lbnRfKGN0eCx0cmFuc2Zvcm0sQ2hhcnRTZXJpZXNDb21wb25lbnQuRE9UUyxoaWdoRGV0YWlscyk7fSxkcmF3Q29tcG9uZW50XyhjdHgsdHJhbnNmb3JtLGNvbXBvbmVudCxoaWdoRGV0YWlscyl7bGV0IGV4dHJhUGl4ZWxzPTA7aWYoY29tcG9uZW50PT09Q2hhcnRTZXJpZXNDb21wb25lbnQuRE9UUyl7ZXh0cmFQaXhlbHM9TWF0aC5tYXgodGhpcy5zZWxlY3RlZFBvaW50U2l6ZV8sdGhpcy51bnNlbGVjdGVkUG9pbnRTaXplXyk7fQotY29uc3QgcGl4ZWxSYXRpbz10cmFuc2Zvcm0ucGl4ZWxSYXRpbztjb25zdCBsZWZ0Vmlld1g9dHJhbnNmb3JtLmxlZnRWaWV3WC1leHRyYVBpeGVscypwaXhlbFJhdGlvO2NvbnN0IHJpZ2h0Vmlld1g9dHJhbnNmb3JtLnJpZ2h0Vmlld1grZXh0cmFQaXhlbHMqcGl4ZWxSYXRpbztjb25zdCBsZWZ0VGltZXN0YW1wPXRyYW5zZm9ybS5sZWZ0VGltZXN0YW1wLWV4dHJhUGl4ZWxzO2NvbnN0IHJpZ2h0VGltZXN0YW1wPXRyYW5zZm9ybS5yaWdodFRpbWVzdGFtcCtleHRyYVBpeGVscztjb25zdCBmaXJzdFZpc2libGVJbmRleD10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkodGhpcy5wb2ludHMsZnVuY3Rpb24ocG9pbnQpe3JldHVybiBwb2ludC54O30sbGVmdFRpbWVzdGFtcCk7bGV0IGxhc3RWaXNpYmxlSW5kZXg9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMucG9pbnRzLGZ1bmN0aW9uKHBvaW50KXtyZXR1cm4gcG9pbnQueDt9LHJpZ2h0VGltZXN0YW1wKTtpZihsYXN0VmlzaWJsZUluZGV4Pj10aGlzLnBvaW50cy5sZW5ndGh8fHRoaXMucG9pbnRzW2xhc3RWaXNpYmxlSW5kZXhdLng+cmlnaHRUaW1lc3RhbXApe2xhc3RWaXNpYmxlSW5kZXgtLTt9Ci1jb25zdCB2aWV3U2tpcERpc3RhbmNlPXRoaXMuc2tpcERpc3RhbmNlXypwaXhlbFJhdGlvO2xldCBzZWxlY3RlZENpcmNsZVJhZGl1cztsZXQgbGV0dGVyRG90UmFkaXVzO2xldCBzcXVhcmVTaXplO2xldCBzcXVhcmVIYWxmU2l6ZTtsZXQgc3F1YXJlT3BhY2l0eTtsZXQgdW5zZWxlY3RlZFNlcmllc0NvbG9yO2xldCBjdXJyZW50U3RhdGVTZXJpZXNDb2xvcjtjdHguc2F2ZSgpO2N0eC5mb250PURPVF9MRVRURVJfRk9OVF9XRUlHSFQrJyAnKwotTWF0aC5mbG9vcihET1RfTEVUVEVSX0ZPTlRfU0laRV9QWCpwaXhlbFJhdGlvKSsncHggJysKLURPVF9MRVRURVJfRk9OVDtjdHgudGV4dEJhc2VsaW5lPSdtaWRkbGUnO2N0eC50ZXh0QWxpZ249J2NlbnRlcic7c3dpdGNoKGNvbXBvbmVudCl7Y2FzZSBDaGFydFNlcmllc0NvbXBvbmVudC5ET1RTOntzZWxlY3RlZENpcmNsZVJhZGl1cz0odGhpcy5zZWxlY3RlZFBvaW50U2l6ZV8vMikqcGl4ZWxSYXRpbztsZXR0ZXJEb3RSYWRpdXM9TWF0aC5tYXgoc2VsZWN0ZWRDaXJjbGVSYWRpdXMsRE9UX0xFVFRFUl9SQURJVVNfUFgqcGl4ZWxSYXRpbyk7c3F1YXJlU2l6ZT10aGlzLnVuc2VsZWN0ZWRQb2ludFNpemVfKnBpeGVsUmF0aW87c3F1YXJlSGFsZlNpemU9c3F1YXJlU2l6ZS8yO3Vuc2VsZWN0ZWRTZXJpZXNDb2xvcj1FdmVudFByZXNlbnRlci5nZXRDb3VudGVyU2VyaWVzQ29sb3IodGhpcy5jb2xvcklkXyxTZWxlY3Rpb25TdGF0ZS5OT05FKTtpZighaGlnaERldGFpbHMpe3NxdWFyZU9wYWNpdHk9MDticmVhazt9Ci1jb25zdCB2aXNpYmxlSW5kZXhSYW5nZT1sYXN0VmlzaWJsZUluZGV4LWZpcnN0VmlzaWJsZUluZGV4O2lmKHZpc2libGVJbmRleFJhbmdlPD0wKXtzcXVhcmVPcGFjaXR5PTE7YnJlYWs7fQotY29uc3QgdmlzaWJsZVZpZXdYUmFuZ2U9dHJhbnNmb3JtLndvcmxkWFRvVmlld1godGhpcy5wb2ludHNbbGFzdFZpc2libGVJbmRleF0ueCktCi10cmFuc2Zvcm0ud29ybGRYVG9WaWV3WCh0aGlzLnBvaW50c1tmaXJzdFZpc2libGVJbmRleF0ueCk7aWYodmlzaWJsZVZpZXdYUmFuZ2U9PT0wKXtzcXVhcmVPcGFjaXR5PTE7YnJlYWs7fQotY29uc3QgZGVuc2l0eT12aXNpYmxlSW5kZXhSYW5nZS92aXNpYmxlVmlld1hSYW5nZTtjb25zdCBjbGFtcGVkRGVuc2l0eT10ci5iLm1hdGguY2xhbXAoZGVuc2l0eSx0aGlzLnVuc2VsZWN0ZWRQb2ludERlbnNpdHlPcGFxdWVfLHRoaXMudW5zZWxlY3RlZFBvaW50RGVuc2l0eVRyYW5zcGFyZW50Xyk7Y29uc3QgZGVuc2l0eVJhbmdlPXRoaXMudW5zZWxlY3RlZFBvaW50RGVuc2l0eVRyYW5zcGFyZW50Xy0KLXRoaXMudW5zZWxlY3RlZFBvaW50RGVuc2l0eU9wYXF1ZV87c3F1YXJlT3BhY2l0eT0odGhpcy51bnNlbGVjdGVkUG9pbnREZW5zaXR5VHJhbnNwYXJlbnRfLWNsYW1wZWREZW5zaXR5KS9kZW5zaXR5UmFuZ2U7YnJlYWs7fQotY2FzZSBDaGFydFNlcmllc0NvbXBvbmVudC5MSU5FOmN0eC5zdHJva2VTdHlsZT1FdmVudFByZXNlbnRlci5nZXRDb3VudGVyU2VyaWVzQ29sb3IodGhpcy5jb2xvcklkXyxTZWxlY3Rpb25TdGF0ZS5OT05FKTtjdHgubGluZVdpZHRoPXRoaXMubGluZVdpZHRoXypwaXhlbFJhdGlvO2JyZWFrO2Nhc2UgQ2hhcnRTZXJpZXNDb21wb25lbnQuQkFDS0dST1VORDpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb21wb25lbnQ6ICcrY29tcG9uZW50KTt9Ci1sZXQgcHJldmlvdXNWaWV3WD11bmRlZmluZWQ7bGV0IHByZXZpb3VzVmlld1k9dW5kZWZpbmVkO2xldCBwcmV2aW91c1ZpZXdZQmFzZT11bmRlZmluZWQ7bGV0IGxhc3RTZWxlY3Rpb25TdGF0ZT11bmRlZmluZWQ7bGV0IGJhc2VTdGVwcz11bmRlZmluZWQ7Y29uc3Qgc3RhcnRJbmRleD1NYXRoLm1heChmaXJzdFZpc2libGVJbmRleC0xLDApO2xldCBjdXJyZW50Vmlld1g7Zm9yKGxldCBpPXN0YXJ0SW5kZXg7aTx0aGlzLnBvaW50cy5sZW5ndGg7aSsrKXtjb25zdCBjdXJyZW50UG9pbnQ9dGhpcy5wb2ludHNbaV07Y3VycmVudFZpZXdYPXRyYW5zZm9ybS53b3JsZFhUb1ZpZXdYKGN1cnJlbnRQb2ludC54KTtpZihjdXJyZW50Vmlld1g+cmlnaHRWaWV3WCl7aWYocHJldmlvdXNWaWV3WCE9PXVuZGVmaW5lZCl7cHJldmlvdXNWaWV3WD1jdXJyZW50Vmlld1g9cmlnaHRWaWV3WDtpZihjb21wb25lbnQ9PT1DaGFydFNlcmllc0NvbXBvbmVudC5CQUNLR1JPVU5EfHxjb21wb25lbnQ9PT1DaGFydFNlcmllc0NvbXBvbmVudC5MSU5FKXtjdHgubGluZVRvKGN1cnJlbnRWaWV3WCxwcmV2aW91c1ZpZXdZKTt9fQotYnJlYWs7fQotaWYoaSsxPHRoaXMucG9pbnRzLmxlbmd0aCl7Y29uc3QgbmV4dFBvaW50PXRoaXMucG9pbnRzW2krMV07Y29uc3QgbmV4dFZpZXdYPXRyYW5zZm9ybS53b3JsZFhUb1ZpZXdYKG5leHRQb2ludC54KTtpZihwcmV2aW91c1ZpZXdYIT09dW5kZWZpbmVkJiZuZXh0Vmlld1gtcHJldmlvdXNWaWV3WDw9dmlld1NraXBEaXN0YW5jZSYmbmV4dFZpZXdYPHJpZ2h0Vmlld1gpe2NvbnRpbnVlO30KLWlmKGN1cnJlbnRWaWV3WDxsZWZ0Vmlld1gpe2N1cnJlbnRWaWV3WD1sZWZ0Vmlld1g7fX0KLWlmKHByZXZpb3VzVmlld1ghPT11bmRlZmluZWQmJmN1cnJlbnRWaWV3WC1wcmV2aW91c1ZpZXdYPHZpZXdTa2lwRGlzdGFuY2Upe2N1cnJlbnRWaWV3WD1wcmV2aW91c1ZpZXdYK3ZpZXdTa2lwRGlzdGFuY2U7fQotY29uc3QgY3VycmVudFZpZXdZPU1hdGgucm91bmQodHJhbnNmb3JtLndvcmxkWVRvVmlld1koY3VycmVudFBvaW50LnkpKTtsZXQgY3VycmVudFZpZXdZQmFzZTtpZihjdXJyZW50UG9pbnQueUJhc2U9PT11bmRlZmluZWQpe2N1cnJlbnRWaWV3WUJhc2U9dHJhbnNmb3JtLm91dGVyQm90dG9tVmlld1k7fWVsc2V7Y3VycmVudFZpZXdZQmFzZT1NYXRoLnJvdW5kKHRyYW5zZm9ybS53b3JsZFlUb1ZpZXdZKGN1cnJlbnRQb2ludC55QmFzZSkpO30KLWNvbnN0IGN1cnJlbnRTZWxlY3Rpb25TdGF0ZT1jdXJyZW50UG9pbnQuc2VsZWN0aW9uU3RhdGU7aWYoY3VycmVudFNlbGVjdGlvblN0YXRlIT09bGFzdFNlbGVjdGlvblN0YXRlKXtjb25zdCBvcGFjaXR5PWN1cnJlbnRTZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLlNFTEVDVEVEPzE6c3F1YXJlT3BhY2l0eTtjdXJyZW50U3RhdGVTZXJpZXNDb2xvcj1FdmVudFByZXNlbnRlci5nZXRDb3VudGVyU2VyaWVzQ29sb3IodGhpcy5jb2xvcklkXyxjdXJyZW50U2VsZWN0aW9uU3RhdGUsb3BhY2l0eSk7fQotc3dpdGNoKGNvbXBvbmVudCl7Y2FzZSBDaGFydFNlcmllc0NvbXBvbmVudC5ET1RTOmlmKGN1cnJlbnRQb2ludC5kb3RMZXR0ZXIpe2N0eC5maWxsU3R5bGU9dW5zZWxlY3RlZFNlcmllc0NvbG9yO2N0eC5zdHJva2VTdHlsZT1Db2xvclNjaGVtZS5nZXRDb2xvckZvclJlc2VydmVkTmFtZUFzU3RyaW5nKCdibGFjaycpO2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKGN1cnJlbnRWaWV3WCxjdXJyZW50Vmlld1ksbGV0dGVyRG90UmFkaXVzK0RPVF9MRVRURVJfUkFESVVTX1BBRERJTkdfUFgsMCwyKk1hdGguUEkpO2N0eC5maWxsKCk7aWYoY3VycmVudFNlbGVjdGlvblN0YXRlPT09U2VsZWN0aW9uU3RhdGUuU0VMRUNURUQpe2N0eC5saW5lV2lkdGg9RE9UX0xFVFRFUl9TRUxFQ1RFRF9PVVRMSU5FX1dJRFRIX1BYO2N0eC5zdHJva2VTdHlsZT1Db2xvclNjaGVtZS5nZXRDb2xvckZvclJlc2VydmVkTmFtZUFzU3RyaW5nKCdvbGl2ZScpO2N0eC5zdHJva2UoKTtjdHguYmVnaW5QYXRoKCk7Y3R4LmFyYyhjdXJyZW50Vmlld1gsY3VycmVudFZpZXdZLGxldHRlckRvdFJhZGl1cywwLDIqTWF0aC5QSSk7Y3R4LmxpbmVXaWR0aD1ET1RfTEVUVEVSX1NFTEVDVEVEX09VVExJTkVfREVUQUlMX1dJRFRIX1BYO2N0eC5zdHJva2VTdHlsZT1Db2xvclNjaGVtZS5nZXRDb2xvckZvclJlc2VydmVkTmFtZUFzU3RyaW5nKCd5ZWxsb3cnKTtjdHguc3Ryb2tlKCk7fWVsc2V7Y3R4LmxpbmVXaWR0aD1ET1RfTEVUVEVSX1VOU0VMRUNURURfT1VUTElORV9XSURUSF9QWDtjdHguc3Ryb2tlU3R5bGU9Q29sb3JTY2hlbWUuZ2V0Q29sb3JGb3JSZXNlcnZlZE5hbWVBc1N0cmluZygnYmxhY2snKTtjdHguc3Ryb2tlKCk7fQotY3R4LmZpbGxTdHlsZT1Db2xvclNjaGVtZS5nZXRDb2xvckZvclJlc2VydmVkTmFtZUFzU3RyaW5nKCd3aGl0ZScpO2N0eC5maWxsVGV4dChjdXJyZW50UG9pbnQuZG90TGV0dGVyLGN1cnJlbnRWaWV3WCxjdXJyZW50Vmlld1kpO31lbHNle2N0eC5zdHJva2VTdHlsZT11bnNlbGVjdGVkU2VyaWVzQ29sb3I7Y3R4LmxpbmVXaWR0aD1waXhlbFJhdGlvO2lmKGN1cnJlbnRTZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLlNFTEVDVEVEKXtpZih0aGlzLnNvbGlkU2VsZWN0ZWREb3RzXyl7Y3R4LmZpbGxTdHlsZT1jdHguc3Ryb2tlU3R5bGU7fWVsc2V7Y3R4LmZpbGxTdHlsZT1jdXJyZW50U3RhdGVTZXJpZXNDb2xvcjt9Ci1jdHguYmVnaW5QYXRoKCk7Y3R4LmFyYyhjdXJyZW50Vmlld1gsY3VycmVudFZpZXdZLHNlbGVjdGVkQ2lyY2xlUmFkaXVzLDAsMipNYXRoLlBJKTtjdHguZmlsbCgpO2N0eC5zdHJva2UoKTt9ZWxzZSBpZihzcXVhcmVPcGFjaXR5PjApe2N0eC5maWxsU3R5bGU9Y3VycmVudFN0YXRlU2VyaWVzQ29sb3I7Y3R4LmZpbGxSZWN0KGN1cnJlbnRWaWV3WC1zcXVhcmVIYWxmU2l6ZSxjdXJyZW50Vmlld1ktc3F1YXJlSGFsZlNpemUsc3F1YXJlU2l6ZSxzcXVhcmVTaXplKTt9fQotYnJlYWs7Y2FzZSBDaGFydFNlcmllc0NvbXBvbmVudC5MSU5FOmlmKHByZXZpb3VzVmlld1g9PT11bmRlZmluZWQpe2N0eC5iZWdpblBhdGgoKTtjdHgubW92ZVRvKGN1cnJlbnRWaWV3WCxjdXJyZW50Vmlld1kpO31lbHNlIGlmKHRoaXMuc3RlcEdyYXBoXyl7Y3R4LmxpbmVUbyhjdXJyZW50Vmlld1gscHJldmlvdXNWaWV3WSk7fQotY3R4LmxpbmVUbyhjdXJyZW50Vmlld1gsY3VycmVudFZpZXdZKTticmVhaztjYXNlIENoYXJ0U2VyaWVzQ29tcG9uZW50LkJBQ0tHUk9VTkQ6aWYocHJldmlvdXNWaWV3WCE9PXVuZGVmaW5lZCYmdGhpcy5zdGVwR3JhcGhfKXtjdHgubGluZVRvKGN1cnJlbnRWaWV3WCxwcmV2aW91c1ZpZXdZKTt9ZWxzZXtjdHgubGluZVRvKGN1cnJlbnRWaWV3WCxjdXJyZW50Vmlld1kpO30KLWlmKGN1cnJlbnRTZWxlY3Rpb25TdGF0ZSE9PWxhc3RTZWxlY3Rpb25TdGF0ZSl7aWYocHJldmlvdXNWaWV3WCE9PXVuZGVmaW5lZCl7bGV0IHByZXZpb3VzQmFzZVN0ZXBWaWV3WD1jdXJyZW50Vmlld1g7Zm9yKGxldCBqPWJhc2VTdGVwcy5sZW5ndGgtMTtqPj0wO2otLSl7Y29uc3QgYmFzZVN0ZXA9YmFzZVN0ZXBzW2pdO2NvbnN0IGJhc2VTdGVwVmlld1g9YmFzZVN0ZXAudmlld1g7Y29uc3QgYmFzZVN0ZXBWaWV3WT1iYXNlU3RlcC52aWV3WTtjdHgubGluZVRvKHByZXZpb3VzQmFzZVN0ZXBWaWV3WCxiYXNlU3RlcFZpZXdZKTtjdHgubGluZVRvKGJhc2VTdGVwVmlld1gsYmFzZVN0ZXBWaWV3WSk7cHJldmlvdXNCYXNlU3RlcFZpZXdYPWJhc2VTdGVwVmlld1g7fQotY3R4LmNsb3NlUGF0aCgpO2N0eC5maWxsKCk7fQotY3R4LmJlZ2luUGF0aCgpO2N0eC5maWxsU3R5bGU9RXZlbnRQcmVzZW50ZXIuZ2V0Q291bnRlclNlcmllc0NvbG9yKHRoaXMuY29sb3JJZF8sY3VycmVudFNlbGVjdGlvblN0YXRlLHRoaXMuYmFja2dyb3VuZE9wYWNpdHlfKTtjdHgubW92ZVRvKGN1cnJlbnRWaWV3WCxjdXJyZW50Vmlld1lCYXNlKTtiYXNlU3RlcHM9W107fQotaWYoY3VycmVudFZpZXdZQmFzZSE9PXByZXZpb3VzVmlld1lCYXNlfHxjdXJyZW50U2VsZWN0aW9uU3RhdGUhPT1sYXN0U2VsZWN0aW9uU3RhdGUpe2Jhc2VTdGVwcy5wdXNoKHt2aWV3WDpjdXJyZW50Vmlld1gsdmlld1k6Y3VycmVudFZpZXdZQmFzZX0pO30KLWN0eC5saW5lVG8oY3VycmVudFZpZXdYLGN1cnJlbnRWaWV3WSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ05vdCByZWFjaGFibGUnKTt9Ci1wcmV2aW91c1ZpZXdYPWN1cnJlbnRWaWV3WDtwcmV2aW91c1ZpZXdZPWN1cnJlbnRWaWV3WTtwcmV2aW91c1ZpZXdZQmFzZT1jdXJyZW50Vmlld1lCYXNlO2xhc3RTZWxlY3Rpb25TdGF0ZT1jdXJyZW50U2VsZWN0aW9uU3RhdGU7fQotaWYocHJldmlvdXNWaWV3WCE9PXVuZGVmaW5lZCl7c3dpdGNoKGNvbXBvbmVudCl7Y2FzZSBDaGFydFNlcmllc0NvbXBvbmVudC5ET1RTOmJyZWFrO2Nhc2UgQ2hhcnRTZXJpZXNDb21wb25lbnQuTElORTpjdHguc3Ryb2tlKCk7YnJlYWs7Y2FzZSBDaGFydFNlcmllc0NvbXBvbmVudC5CQUNLR1JPVU5EOntsZXQgcHJldmlvdXNCYXNlU3RlcFZpZXdYPWN1cnJlbnRWaWV3WDtmb3IobGV0IGo9YmFzZVN0ZXBzLmxlbmd0aC0xO2o+PTA7ai0tKXtjb25zdCBiYXNlU3RlcD1iYXNlU3RlcHNbal07Y29uc3QgYmFzZVN0ZXBWaWV3WD1iYXNlU3RlcC52aWV3WDtjb25zdCBiYXNlU3RlcFZpZXdZPWJhc2VTdGVwLnZpZXdZO2N0eC5saW5lVG8ocHJldmlvdXNCYXNlU3RlcFZpZXdYLGJhc2VTdGVwVmlld1kpO2N0eC5saW5lVG8oYmFzZVN0ZXBWaWV3WCxiYXNlU3RlcFZpZXdZKTtwcmV2aW91c0Jhc2VTdGVwVmlld1g9YmFzZVN0ZXBWaWV3WDt9Ci1jdHguY2xvc2VQYXRoKCk7Y3R4LmZpbGwoKTticmVhazt9Ci1kZWZhdWx0OnRocm93IG5ldyBFcnJvcignTm90IHJlYWNoYWJsZScpO319Ci1jdHgucmVzdG9yZSgpO30sYWRkSW50ZXJzZWN0aW5nRXZlbnRzSW5SYW5nZVRvU2VsZWN0aW9uSW5Xb3JsZFNwYWNlKGxvV1gsaGlXWCx2aWV3UGl4V2lkdGhXb3JsZCxzZWxlY3Rpb24pe2NvbnN0IHBvaW50cz10aGlzLnBvaW50cztmdW5jdGlvbiBnZXRQb2ludFdpZHRoKHBvaW50LGkpe2lmKGk9PT1wb2ludHMubGVuZ3RoLTEpe3JldHVybiBMQVNUX1BPSU5UX1dJRFRIKnZpZXdQaXhXaWR0aFdvcmxkO30KLWNvbnN0IG5leHRQb2ludD1wb2ludHNbaSsxXTtyZXR1cm4gbmV4dFBvaW50LngtcG9pbnQueDt9Ci1mdW5jdGlvbiBzZWxlY3RQb2ludChwb2ludCl7cG9pbnQuYWRkVG9TZWxlY3Rpb24oc2VsZWN0aW9uKTt9Ci10ci5iLml0ZXJhdGVPdmVySW50ZXJzZWN0aW5nSW50ZXJ2YWxzKHRoaXMucG9pbnRzLGZ1bmN0aW9uKHBvaW50KXtyZXR1cm4gcG9pbnQueDt9LGdldFBvaW50V2lkdGgsbG9XWCxoaVdYLHNlbGVjdFBvaW50KTt9LGFkZEV2ZW50TmVhclRvUHJvdmlkZWRFdmVudFRvU2VsZWN0aW9uKGV2ZW50LG9mZnNldCxzZWxlY3Rpb24pe2lmKHRoaXMucG9pbnRzPT09dW5kZWZpbmVkKXJldHVybiBmYWxzZTtjb25zdCBpbmRleD10aGlzLnBvaW50cy5maW5kSW5kZXgocG9pbnQ9PnBvaW50Lm1vZGVsSXRlbT09PWV2ZW50KTtpZihpbmRleD09PS0xKXJldHVybiBmYWxzZTtjb25zdCBuZXdJbmRleD1pbmRleCtvZmZzZXQ7aWYobmV3SW5kZXg8MHx8bmV3SW5kZXg+PXRoaXMucG9pbnRzLmxlbmd0aClyZXR1cm4gZmFsc2U7dGhpcy5wb2ludHNbbmV3SW5kZXhdLmFkZFRvU2VsZWN0aW9uKHNlbGVjdGlvbik7cmV0dXJuIHRydWU7fSxhZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKXtpZih0aGlzLnBvaW50cz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgaXRlbT10ci5iLmZpbmRDbG9zZXN0RWxlbWVudEluU29ydGVkQXJyYXkodGhpcy5wb2ludHMsZnVuY3Rpb24ocG9pbnQpe3JldHVybiBwb2ludC54O30sd29ybGRYLHdvcmxkTWF4RGlzdCk7aWYoIWl0ZW0pcmV0dXJuO2l0ZW0uYWRkVG9TZWxlY3Rpb24oc2VsZWN0aW9uKTt9fTtyZXR1cm57Q2hhcnRTZXJpZXMsQ2hhcnRTZXJpZXNUeXBlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBJREVBTF9NQUpPUl9NQVJLX0hFSUdIVF9QWD0zMDtjb25zdCBBWElTX0xBQkxFX01BUkdJTl9QWD0xMDtjb25zdCBBWElTX0xBQkxFX0ZPTlRfU0laRV9QWD05O2NvbnN0IEFYSVNfTEFCTEVfRk9OVD0nQXJpYWwnO2Z1bmN0aW9uIENoYXJ0U2VyaWVzWUF4aXMob3B0X21pbixvcHRfbWF4KXt0aGlzLmd1aWRfPXRyLmIuR1VJRC5hbGxvY2F0ZVNpbXBsZSgpO3RoaXMuYm91bmRzPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTtpZihvcHRfbWluIT09dW5kZWZpbmVkKXRoaXMuYm91bmRzLmFkZFZhbHVlKG9wdF9taW4pO2lmKG9wdF9tYXghPT11bmRlZmluZWQpdGhpcy5ib3VuZHMuYWRkVmFsdWUob3B0X21heCk7fQotQ2hhcnRTZXJpZXNZQXhpcy5wcm90b3R5cGU9e2dldCBndWlkKCl7cmV0dXJuIHRoaXMuZ3VpZF87fSx2YWx1ZVRvVW5pdFJhbmdlKHZhbHVlKXtpZih0aGlzLmJvdW5kcy5pc0VtcHR5KXt0aHJvdyBuZXcgRXJyb3IoJ0NoYXJ0IHNlcmllcyB5LWF4aXMgYm91bmRzIGFyZSBlbXB0eScpO30KLWNvbnN0IGJvdW5kcz10aGlzLmJvdW5kcztpZihib3VuZHMucmFuZ2U9PT0wKXJldHVybiAwO3JldHVybih2YWx1ZS1ib3VuZHMubWluKS9ib3VuZHMucmFuZ2U7fSx1bml0UmFuZ2VUb1ZhbHVlKHVuaXRSYW5nZSl7aWYodGhpcy5ib3VuZHMuaXNFbXB0eSl7dGhyb3cgbmV3IEVycm9yKCdDaGFydCBzZXJpZXMgeS1heGlzIGJvdW5kcyBhcmUgZW1wdHknKTt9Ci1yZXR1cm4gdW5pdFJhbmdlKnRoaXMuYm91bmRzLnJhbmdlK3RoaXMuYm91bmRzLm1pbjt9LGF1dG9TZXRGcm9tU2VyaWVzKHNlcmllcyxvcHRfY29uZmlnKXtjb25zdCByYW5nZT1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7c2VyaWVzLmZvckVhY2goZnVuY3Rpb24ocyl7cmFuZ2UuYWRkUmFuZ2Uocy5yYW5nZSk7fSx0aGlzKTt0aGlzLmF1dG9TZXRGcm9tUmFuZ2UocmFuZ2Usb3B0X2NvbmZpZyk7fSxhdXRvU2V0RnJvbVJhbmdlKHJhbmdlLG9wdF9jb25maWcpe2lmKHJhbmdlLmlzRW1wdHkpcmV0dXJuO2NvbnN0IGJvdW5kcz10aGlzLmJvdW5kcztpZihib3VuZHMuaXNFbXB0eSl7Ym91bmRzLmFkZFJhbmdlKHJhbmdlKTtyZXR1cm47fQotaWYoIW9wdF9jb25maWcpcmV0dXJuO2NvbnN0IHVzZVJhbmdlTWluPShvcHRfY29uZmlnLmV4cGFuZE1pbiYmcmFuZ2UubWluPGJvdW5kcy5taW58fG9wdF9jb25maWcuc2hyaW5rTWluJiZyYW5nZS5taW4+Ym91bmRzLm1pbik7Y29uc3QgdXNlUmFuZ2VNYXg9KG9wdF9jb25maWcuZXhwYW5kTWF4JiZyYW5nZS5tYXg+Ym91bmRzLm1heHx8b3B0X2NvbmZpZy5zaHJpbmtNYXgmJnJhbmdlLm1heDxib3VuZHMubWF4KTtpZighdXNlUmFuZ2VNaW4mJiF1c2VSYW5nZU1heClyZXR1cm47aWYodXNlUmFuZ2VNaW4mJnVzZVJhbmdlTWF4KXtib3VuZHMubWluPXJhbmdlLm1pbjtib3VuZHMubWF4PXJhbmdlLm1heDtyZXR1cm47fQotaWYodXNlUmFuZ2VNaW4pe2JvdW5kcy5taW49TWF0aC5taW4ocmFuZ2UubWluLGJvdW5kcy5tYXgpO31lbHNle2JvdW5kcy5tYXg9TWF0aC5tYXgocmFuZ2UubWF4LGJvdW5kcy5taW4pO319LG1ham9yTWFya0hlaWdodFdvcmxkXyh0cmFuc2Zvcm0scGl4ZWxSYXRpbyl7Y29uc3QgaWRlYWxNYWpvck1hcmtIZWlnaHRQeD1JREVBTF9NQUpPUl9NQVJLX0hFSUdIVF9QWCpwaXhlbFJhdGlvO2NvbnN0IGlkZWFsTWFqb3JNYXJrSGVpZ2h0V29ybGQ9dHJhbnNmb3JtLnZlY3RvclRvV29ybGREaXN0YW5jZShpZGVhbE1ham9yTWFya0hlaWdodFB4KTtyZXR1cm4gdHIuYi5tYXRoLnByZWZlcnJlZE51bWJlckxhcmdlclRoYW5NaW4oaWRlYWxNYWpvck1hcmtIZWlnaHRXb3JsZCk7fSxkcmF3KGN0eCx0cmFuc2Zvcm0sc2hvd1lBeGlzTGFiZWxzLHNob3dZR3JpZExpbmVzKXtpZighc2hvd1lBeGlzTGFiZWxzJiYhc2hvd1lHcmlkTGluZXMpcmV0dXJuO2NvbnN0IHBpeGVsUmF0aW89dHJhbnNmb3JtLnBpeGVsUmF0aW87Y29uc3Qgdmlld1RvcD10cmFuc2Zvcm0ub3V0ZXJUb3BWaWV3WTtjb25zdCB3b3JsZFRvcD10cmFuc2Zvcm0udmlld1lUb1dvcmxkWSh2aWV3VG9wKTtjb25zdCB2aWV3Qm90dG9tPXRyYW5zZm9ybS5vdXRlckJvdHRvbVZpZXdZO2NvbnN0IHZpZXdIZWlnaHQ9dmlld0JvdHRvbS12aWV3VG9wO2NvbnN0IHZpZXdMZWZ0PXRyYW5zZm9ybS5sZWZ0Vmlld1g7Y29uc3Qgdmlld1JpZ2h0PXRyYW5zZm9ybS5yaWdodFZpZXdYO2NvbnN0IGxhYmVsTGVmdD10cmFuc2Zvcm0ubGVmdFlMYWJlbDtjdHguc2F2ZSgpO2N0eC5saW5lV2lkdGg9cGl4ZWxSYXRpbztjdHguZmlsbFN0eWxlPUNvbG9yU2NoZW1lLmdldENvbG9yRm9yUmVzZXJ2ZWROYW1lQXNTdHJpbmcoJ2JsYWNrJyk7Y3R4LnRleHRBbGlnbj0nbGVmdCc7Y3R4LnRleHRCYXNlbGluZT0nY2VudGVyJztjdHguZm9udD0oQVhJU19MQUJMRV9GT05UX1NJWkVfUFgqcGl4ZWxSYXRpbykrJ3B4ICcrQVhJU19MQUJMRV9GT05UO2N0eC5iZWdpblBhdGgoKTtjdHguc3Ryb2tlU3R5bGU9Q29sb3JTY2hlbWUuZ2V0Q29sb3JGb3JSZXNlcnZlZE5hbWVBc1N0cmluZygnYmxhY2snKTt0ci51aS5iLmRyYXdMaW5lKGN0eCx2aWV3TGVmdCx2aWV3VG9wLHZpZXdMZWZ0LHZpZXdCb3R0b20sdmlld0xlZnQpO2N0eC5zdHJva2UoKTtjdHguY2xvc2VQYXRoKCk7Y3R4LmJlZ2luUGF0aCgpO2N0eC5zdHJva2VTdHlsZT1Db2xvclNjaGVtZS5nZXRDb2xvckZvclJlc2VydmVkTmFtZUFzU3RyaW5nKCdncmV5Jyk7Y29uc3QgbWFqb3JNYXJrSGVpZ2h0PXRoaXMubWFqb3JNYXJrSGVpZ2h0V29ybGRfKHRyYW5zZm9ybSxwaXhlbFJhdGlvKTtjb25zdCBtYXhNYWpvck1hcms9TWF0aC5tYXgodHJhbnNmb3JtLnZpZXdZVG9Xb3JsZFkodmlld1RvcCksTWF0aC5hYnModHJhbnNmb3JtLnZpZXdZVG9Xb3JsZFkodmlld0JvdHRvbSkpKTtmb3IobGV0IGN1cldvcmxkWT0wO2N1cldvcmxkWTw9bWF4TWFqb3JNYXJrO2N1cldvcmxkWSs9bWFqb3JNYXJrSGVpZ2h0KXtjb25zdCByb3VuZGVkVW5pdFZhbHVlPU1hdGguZmxvb3IoY3VyV29ybGRZKjEwMDAwMDApLzEwMDAwMDA7Y29uc3QgY3VyVmlld1lQb3NpdGl2ZT10cmFuc2Zvcm0ud29ybGRZVG9WaWV3WShjdXJXb3JsZFkpO2lmKGN1clZpZXdZUG9zaXRpdmU+PXZpZXdUb3Ape2lmKHNob3dZQXhpc0xhYmVscyl7Y3R4LmZpbGxUZXh0KHJvdW5kZWRVbml0VmFsdWUsdmlld0xlZnQrQVhJU19MQUJMRV9NQVJHSU5fUFgsY3VyVmlld1lQb3NpdGl2ZS1BWElTX0xBQkxFX01BUkdJTl9QWCk7fQotaWYoc2hvd1lHcmlkTGluZXMpe3RyLnVpLmIuZHJhd0xpbmUoY3R4LHZpZXdMZWZ0LGN1clZpZXdZUG9zaXRpdmUsdmlld1JpZ2h0LGN1clZpZXdZUG9zaXRpdmUpO319Ci1jb25zdCBjdXJWaWV3WU5lZ2F0aXZlPXRyYW5zZm9ybS53b3JsZFlUb1ZpZXdZKC0xKmN1cldvcmxkWSk7aWYoY3VyVmlld1lOZWdhdGl2ZTw9dmlld0JvdHRvbSl7aWYoc2hvd1lBeGlzTGFiZWxzKXtjdHguZmlsbFRleHQocm91bmRlZFVuaXRWYWx1ZSx2aWV3TGVmdCtBWElTX0xBQkxFX01BUkdJTl9QWCxjdXJWaWV3WU5lZ2F0aXZlLUFYSVNfTEFCTEVfTUFSR0lOX1BYKTt9Ci1pZihzaG93WUdyaWRMaW5lcyl7dHIudWkuYi5kcmF3TGluZShjdHgsdmlld0xlZnQsY3VyVmlld1lOZWdhdGl2ZSx2aWV3UmlnaHQsY3VyVmlld1lOZWdhdGl2ZSk7fX19Ci1jdHguc3Ryb2tlKCk7Y3R4LnJlc3RvcmUoKTt9fTtyZXR1cm57Q2hhcnRTZXJpZXNZQXhpcyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2Z1bmN0aW9uIENoYXJ0VHJhbnNmb3JtKGRpc3BsYXlUcmFuc2Zvcm0sYXhpcyx0cmFja1dpZHRoLHRyYWNrSGVpZ2h0LHRvcFBhZGRpbmcsYm90dG9tUGFkZGluZyxwaXhlbFJhdGlvKXt0aGlzLnBpeGVsUmF0aW89cGl4ZWxSYXRpbzt0aGlzLmxlZnRWaWV3WD0wO3RoaXMucmlnaHRWaWV3WD10cmFja1dpZHRoO3RoaXMubGVmdFRpbWVzdGFtcD1kaXNwbGF5VHJhbnNmb3JtLnhWaWV3VG9Xb3JsZCh0aGlzLmxlZnRWaWV3WCk7dGhpcy5yaWdodFRpbWVzdGFtcD1kaXNwbGF5VHJhbnNmb3JtLnhWaWV3VG9Xb3JsZCh0aGlzLnJpZ2h0Vmlld1gpO3RoaXMuZGlzcGxheVRyYW5zZm9ybV89ZGlzcGxheVRyYW5zZm9ybTt0aGlzLm91dGVyVG9wVmlld1k9MDt0aGlzLmlubmVyVG9wVmlld1k9dG9wUGFkZGluZzt0aGlzLmlubmVyQm90dG9tVmlld1k9dHJhY2tIZWlnaHQtYm90dG9tUGFkZGluZzt0aGlzLm91dGVyQm90dG9tVmlld1k9dHJhY2tIZWlnaHQ7dGhpcy5heGlzXz1heGlzO3RoaXMuaW5uZXJIZWlnaHRfPXRoaXMuaW5uZXJCb3R0b21WaWV3WS10aGlzLmlubmVyVG9wVmlld1k7fQotQ2hhcnRUcmFuc2Zvcm0ucHJvdG90eXBlPXt3b3JsZFhUb1ZpZXdYKHdvcmxkWCl7cmV0dXJuIHRoaXMuZGlzcGxheVRyYW5zZm9ybV8ueFdvcmxkVG9WaWV3KHdvcmxkWCk7fSx2aWV3WFRvV29ybGRYKHZpZXdYKXtyZXR1cm4gdGhpcy5kaXNwbGF5VHJhbnNmb3JtXy54Vmlld1RvV29ybGQodmlld1gpO30sdmVjdG9yVG9Xb3JsZERpc3RhbmNlKHZpZXdZKXtyZXR1cm4gdGhpcy5heGlzXy5ib3VuZHMucmFuZ2UqTWF0aC5hYnModmlld1kvdGhpcy5pbm5lckhlaWdodF8pO30sdmlld1lUb1dvcmxkWSh2aWV3WSl7cmV0dXJuIHRoaXMuYXhpc18udW5pdFJhbmdlVG9WYWx1ZSgxLSh2aWV3WS10aGlzLmlubmVyVG9wVmlld1kpL3RoaXMuaW5uZXJIZWlnaHRfKTt9LHdvcmxkWVRvVmlld1kod29ybGRZKXtjb25zdCBpbm5lckhlaWdodENvZWZmaWNpZW50PTEtdGhpcy5heGlzXy52YWx1ZVRvVW5pdFJhbmdlKHdvcmxkWSk7cmV0dXJuIGlubmVySGVpZ2h0Q29lZmZpY2llbnQqdGhpcy5pbm5lckhlaWdodF8rdGhpcy5pbm5lclRvcFZpZXdZO319O3JldHVybntDaGFydFRyYW5zZm9ybSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IENoYXJ0VHJhY2s9dHIudWkuYi5kZWZpbmUoJ2NoYXJ0LXRyYWNrJyx0ci51aS50cmFja3MuVHJhY2spO0NoYXJ0VHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2NoYXJ0LXRyYWNrJyk7dGhpcy5zZXJpZXNfPXVuZGVmaW5lZDt0aGlzLmF4ZXNfPXVuZGVmaW5lZDt0aGlzLmF4aXNHdWlkVG9BeGlzRGF0YV89dW5kZWZpbmVkO3RoaXMudG9wUGFkZGluZ189dW5kZWZpbmVkO3RoaXMuYm90dG9tUGFkZGluZ189dW5kZWZpbmVkO3RoaXMuc2hvd1lBeGlzTGFiZWxzXz11bmRlZmluZWQ7dGhpcy5zaG93R3JpZExpbmVzXz11bmRlZmluZWQ7dGhpcy5oZWFkaW5nXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLWhlYWRpbmcnKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmhlYWRpbmdfKTt9LHNldCBoZWFkaW5nKGhlYWRpbmcpe3RoaXMuaGVhZGluZ18uaGVhZGluZz1oZWFkaW5nO30sZ2V0IGhlYWRpbmcoKXtyZXR1cm4gdGhpcy5oZWFkaW5nXy5oZWFkaW5nO30sc2V0IHRvb2x0aXAodG9vbHRpcCl7dGhpcy5oZWFkaW5nXy50b29sdGlwPXRvb2x0aXA7fSxnZXQgc2VyaWVzKCl7cmV0dXJuIHRoaXMuc2VyaWVzXzt9LHNldCBzZXJpZXMoc2VyaWVzKXt0aGlzLnNlcmllc189c2VyaWVzO3RoaXMuY2FsY3VsYXRlQXhpc0RhdGFBbmRQYWRkaW5nXygpO3RoaXMuaW52YWxpZGF0ZURyYXdpbmdDb250YWluZXIoKTt9LGdldCBoZWlnaHQoKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuaGVpZ2h0O30sc2V0IGhlaWdodChoZWlnaHQpe3RoaXMuc3R5bGUuaGVpZ2h0PWhlaWdodDt0aGlzLmludmFsaWRhdGVEcmF3aW5nQ29udGFpbmVyKCk7fSxnZXQgc2hvd1lBeGlzTGFiZWxzKCl7cmV0dXJuIHRoaXMuc2hvd1lBeGlzTGFiZWxzXzt9LHNldCBzaG93WUF4aXNMYWJlbHMoc2hvd1lBeGlzTGFiZWxzKXt0aGlzLnNob3dZQXhpc0xhYmVsc189c2hvd1lBeGlzTGFiZWxzO3RoaXMuaW52YWxpZGF0ZURyYXdpbmdDb250YWluZXIoKTt9LGdldCBzaG93R3JpZExpbmVzKCl7cmV0dXJuIHRoaXMuc2hvd0dyaWRMaW5lc187fSxzZXQgc2hvd0dyaWRMaW5lcyhzaG93R3JpZExpbmVzKXt0aGlzLnNob3dHcmlkTGluZXNfPXNob3dHcmlkTGluZXM7dGhpcy5pbnZhbGlkYXRlRHJhd2luZ0NvbnRhaW5lcigpO30sZ2V0IGhhc1Zpc2libGVDb250ZW50KCl7cmV0dXJuISF0aGlzLnNlcmllcyYmdGhpcy5zZXJpZXMubGVuZ3RoPjA7fSxjYWxjdWxhdGVBeGlzRGF0YUFuZFBhZGRpbmdfKCl7aWYoIXRoaXMuc2VyaWVzXyl7dGhpcy5heGVzXz11bmRlZmluZWQ7dGhpcy5heGlzR3VpZFRvQXhpc0RhdGFfPXVuZGVmaW5lZDt0aGlzLnRvcFBhZGRpbmdfPXVuZGVmaW5lZDt0aGlzLmJvdHRvbVBhZGRpbmdfPXVuZGVmaW5lZDtyZXR1cm47fQotY29uc3QgYXhpc0d1aWRUb0F4aXNEYXRhPXt9O2xldCB0b3BQYWRkaW5nPTA7bGV0IGJvdHRvbVBhZGRpbmc9MDt0aGlzLnNlcmllc18uZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe2NvbnN0IHNlcmllc1lBeGlzPXNlcmllcy5zZXJpZXNZQXhpcztjb25zdCBheGlzR3VpZD1zZXJpZXNZQXhpcy5ndWlkO2lmKCEoYXhpc0d1aWQgaW4gYXhpc0d1aWRUb0F4aXNEYXRhKSl7YXhpc0d1aWRUb0F4aXNEYXRhW2F4aXNHdWlkXT17YXhpczpzZXJpZXNZQXhpcyxzZXJpZXM6W119O2lmKCF0aGlzLmF4ZXNfKXRoaXMuYXhlc189W107dGhpcy5heGVzXy5wdXNoKHNlcmllc1lBeGlzKTt9Ci1heGlzR3VpZFRvQXhpc0RhdGFbYXhpc0d1aWRdLnNlcmllcy5wdXNoKHNlcmllcyk7dG9wUGFkZGluZz1NYXRoLm1heCh0b3BQYWRkaW5nLHNlcmllcy50b3BQYWRkaW5nKTtib3R0b21QYWRkaW5nPU1hdGgubWF4KGJvdHRvbVBhZGRpbmcsc2VyaWVzLmJvdHRvbVBhZGRpbmcpO30sdGhpcyk7dGhpcy5heGlzR3VpZFRvQXhpc0RhdGFfPWF4aXNHdWlkVG9BeGlzRGF0YTt0aGlzLnRvcFBhZGRpbmdfPXRvcFBhZGRpbmc7dGhpcy5ib3R0b21QYWRkaW5nXz1ib3R0b21QYWRkaW5nO30sZHJhdyh0eXBlLHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0KXtzd2l0Y2godHlwZSl7Y2FzZSB0ci51aS50cmFja3MuRHJhd1R5cGUuR0VORVJBTF9FVkVOVDp0aGlzLmRyYXdDaGFydF8odmlld0xXb3JsZCx2aWV3UldvcmxkKTticmVhazt9fSxkcmF3Q2hhcnRfKHZpZXdMV29ybGQsdmlld1JXb3JsZCl7aWYoIXRoaXMuc2VyaWVzXylyZXR1cm47Y29uc3QgY3R4PXRoaXMuY29udGV4dCgpO2NvbnN0IGRpc3BsYXlUcmFuc2Zvcm09dGhpcy52aWV3cG9ydC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IGJvdW5kcz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGhpZ2hEZXRhaWxzPXRoaXMudmlld3BvcnQuaGlnaERldGFpbHM7Y29uc3Qgd2lkdGg9Ym91bmRzLndpZHRoKnBpeGVsUmF0aW87Y29uc3QgaGVpZ2h0PWJvdW5kcy5oZWlnaHQqcGl4ZWxSYXRpbztjb25zdCB0b3BQYWRkaW5nPXRoaXMudG9wUGFkZGluZ18qcGl4ZWxSYXRpbztjb25zdCBib3R0b21QYWRkaW5nPXRoaXMuYm90dG9tUGFkZGluZ18qcGl4ZWxSYXRpbztjdHguc2F2ZSgpO2N0eC5iZWdpblBhdGgoKTtjdHgucmVjdCgwLDAsd2lkdGgsaGVpZ2h0KTtjdHguY2xpcCgpO2lmKHRoaXMuYXhlc18pe2lmKCh0aGlzLnNob3dHcmlkTGluZXNffHx0aGlzLnNob3dZQXhpc0xhYmVsc18pJiZ0aGlzLmF4ZXNfLmxlbmd0aD4xKXt0aHJvdyBuZXcgRXJyb3IoJ09ubHkgb25lIGF4aXMgYWxsb3dlZCB3aGVuIHNob3dpbmcgZ3JpZCBsaW5lcy4nKTt9Ci1mb3IoY29uc3QgeUF4aXMgb2YgdGhpcy5heGVzXyl7Y29uc3QgY2hhcnRUcmFuc2Zvcm09bmV3IHRyLnVpLnRyYWNrcy5DaGFydFRyYW5zZm9ybShkaXNwbGF5VHJhbnNmb3JtLHlBeGlzLHdpZHRoLGhlaWdodCx0b3BQYWRkaW5nLGJvdHRvbVBhZGRpbmcscGl4ZWxSYXRpbyk7eUF4aXMuZHJhdyhjdHgsY2hhcnRUcmFuc2Zvcm0sdGhpcy5zaG93WUF4aXNMYWJlbHNfLHRoaXMuc2hvd0dyaWRMaW5lc18pO319Ci1mb3IoY29uc3Qgc2VyaWVzIG9mIHRoaXMuc2VyaWVzKXtjb25zdCBjaGFydFRyYW5zZm9ybT1uZXcgdHIudWkudHJhY2tzLkNoYXJ0VHJhbnNmb3JtKGRpc3BsYXlUcmFuc2Zvcm0sc2VyaWVzLnNlcmllc1lBeGlzLHdpZHRoLGhlaWdodCx0b3BQYWRkaW5nLGJvdHRvbVBhZGRpbmcscGl4ZWxSYXRpbyk7c2VyaWVzLmRyYXcoY3R4LGNoYXJ0VHJhbnNmb3JtLGhpZ2hEZXRhaWxzKTt9Ci1jdHgucmVzdG9yZSgpO30sYWRkRXZlbnRzVG9UcmFja01hcChldmVudFRvVHJhY2tNYXApe3RoaXMuc2VyaWVzXy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7c2VyaWVzLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKHBvaW50KXtwb2ludC5hZGRUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCx0aGlzKTt9LHRoaXMpO30sdGhpcyk7fSxhZGRJbnRlcnNlY3RpbmdFdmVudHNJblJhbmdlVG9TZWxlY3Rpb25JbldvcmxkU3BhY2UobG9XWCxoaVdYLHZpZXdQaXhXaWR0aFdvcmxkLHNlbGVjdGlvbil7dGhpcy5zZXJpZXNfLmZvckVhY2goZnVuY3Rpb24oc2VyaWVzKXtzZXJpZXMuYWRkSW50ZXJzZWN0aW5nRXZlbnRzSW5SYW5nZVRvU2VsZWN0aW9uSW5Xb3JsZFNwYWNlKGxvV1gsaGlXWCx2aWV3UGl4V2lkdGhXb3JsZCxzZWxlY3Rpb24pO30sdGhpcyk7fSxhZGRFdmVudE5lYXJUb1Byb3ZpZGVkRXZlbnRUb1NlbGVjdGlvbihldmVudCxvZmZzZXQsc2VsZWN0aW9uKXtsZXQgZm91bmRJdGVtPWZhbHNlO3RoaXMuc2VyaWVzXy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7Zm91bmRJdGVtPWZvdW5kSXRlbXx8c2VyaWVzLmFkZEV2ZW50TmVhclRvUHJvdmlkZWRFdmVudFRvU2VsZWN0aW9uKGV2ZW50LG9mZnNldCxzZWxlY3Rpb24pO30sdGhpcyk7cmV0dXJuIGZvdW5kSXRlbTt9LGFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb24oZmlsdGVyLHNlbGVjdGlvbil7fSxhZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKXt0aGlzLnNlcmllc18uZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3Nlcmllcy5hZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKTt9LHRoaXMpO30sYXV0b1NldEFsbEF4ZXMob3B0X2NvbmZpZyl7Zm9yKGNvbnN0IGF4aXNEYXRhIG9mIE9iamVjdC52YWx1ZXModGhpcy5heGlzR3VpZFRvQXhpc0RhdGFfKSl7Y29uc3Qgc2VyaWVzWUF4aXM9YXhpc0RhdGEuYXhpcztjb25zdCBzZXJpZXM9YXhpc0RhdGEuc2VyaWVzO3Nlcmllc1lBeGlzLmF1dG9TZXRGcm9tU2VyaWVzKHNlcmllcyxvcHRfY29uZmlnKTt9fSxhdXRvU2V0QXhpcyhzZXJpZXNZQXhpcyxvcHRfY29uZmlnKXtjb25zdCBzZXJpZXM9dGhpcy5heGlzR3VpZFRvQXhpc0RhdGFfW3Nlcmllc1lBeGlzLmd1aWRdLnNlcmllcztzZXJpZXNZQXhpcy5hdXRvU2V0RnJvbVNlcmllcyhzZXJpZXMsb3B0X2NvbmZpZyk7fX07cmV0dXJue0NoYXJ0VHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IENoYXJ0VHJhY2s9dHIudWkudHJhY2tzLkNoYXJ0VHJhY2s7Y29uc3QgQ3B1VXNhZ2VUcmFjaz10ci51aS5iLmRlZmluZSgnY3B1LXVzYWdlLXRyYWNrJyxDaGFydFRyYWNrKTtDcHVVc2FnZVRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOkNoYXJ0VHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXtDaGFydFRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO3RoaXMuY2xhc3NMaXN0LmFkZCgnY3B1LXVzYWdlLXRyYWNrJyk7dGhpcy5oZWFkaW5nPSdDUFUgdXNhZ2UnO3RoaXMuY3B1VXNhZ2VTZXJpZXNfPXVuZGVmaW5lZDt9LGluaXRpYWxpemUobW9kZWwpe2lmKG1vZGVsIT09dW5kZWZpbmVkKXt0aGlzLmNwdVVzYWdlU2VyaWVzXz1tb2RlbC5kZXZpY2UuY3B1VXNhZ2VTZXJpZXM7fWVsc2V7dGhpcy5jcHVVc2FnZVNlcmllc189dW5kZWZpbmVkO30KLXRoaXMuc2VyaWVzPXRoaXMuYnVpbGRDaGFydFNlcmllc18oKTt0aGlzLmF1dG9TZXRBbGxBeGVzKHtleHBhbmRNYXg6dHJ1ZX0pO30sZ2V0IGhhc1Zpc2libGVDb250ZW50KCl7cmV0dXJuISF0aGlzLmNwdVVzYWdlU2VyaWVzXyYmdGhpcy5jcHVVc2FnZVNlcmllc18uc2FtcGxlcy5sZW5ndGg+MDt9LGFkZENvbnRhaW5lcnNUb1RyYWNrTWFwKGNvbnRhaW5lclRvVHJhY2tNYXApe2NvbnRhaW5lclRvVHJhY2tNYXAuYWRkQ29udGFpbmVyKHRoaXMuc2VyaWVzXyx0aGlzKTt9LGJ1aWxkQ2hhcnRTZXJpZXNfKHlBeGlzLGNvbG9yKXtpZighdGhpcy5oYXNWaXNpYmxlQ29udGVudClyZXR1cm5bXTt5QXhpcz1uZXcgdHIudWkudHJhY2tzLkNoYXJ0U2VyaWVzWUF4aXMoMCx1bmRlZmluZWQpO2NvbnN0IHVzYWdlU2FtcGxlcz10aGlzLmNwdVVzYWdlU2VyaWVzXy5zYW1wbGVzO2NvbnN0IHB0cz1uZXcgQXJyYXkodXNhZ2VTYW1wbGVzLmxlbmd0aCsxKTtmb3IobGV0IGk9MDtpPHVzYWdlU2FtcGxlcy5sZW5ndGg7aSsrKXtwdHNbaV09bmV3IHRyLnVpLnRyYWNrcy5DaGFydFBvaW50KHVuZGVmaW5lZCx1c2FnZVNhbXBsZXNbaV0uc3RhcnQsdXNhZ2VTYW1wbGVzW2ldLnVzYWdlKTt9Ci1wdHNbdXNhZ2VTYW1wbGVzLmxlbmd0aF09bmV3IHRyLnVpLnRyYWNrcy5DaGFydFBvaW50KHVuZGVmaW5lZCx1c2FnZVNhbXBsZXNbdXNhZ2VTYW1wbGVzLmxlbmd0aC0xXS5zdGFydCwwKTtjb25zdCByZW5kZXJpbmdDb25maWc9e2NoYXJ0VHlwZTp0ci51aS50cmFja3MuQ2hhcnRTZXJpZXNUeXBlLkFSRUEsY29sb3JJZDpjb2xvcn07cmV0dXJuW25ldyB0ci51aS50cmFja3MuQ2hhcnRTZXJpZXMocHRzLHlBeGlzLHJlbmRlcmluZ0NvbmZpZyldO30sfTtyZXR1cm57Q3B1VXNhZ2VUcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgQ2hhcnRUcmFjaz10ci51aS50cmFja3MuQ2hhcnRUcmFjaztjb25zdCBQb3dlclNlcmllc1RyYWNrPXRyLnVpLmIuZGVmaW5lKCdwb3dlci1zZXJpZXMtdHJhY2snLENoYXJ0VHJhY2spO1Bvd2VyU2VyaWVzVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186Q2hhcnRUcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe0NoYXJ0VHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgncG93ZXItc2VyaWVzLXRyYWNrJyk7dGhpcy5oZWFkaW5nPSdQb3dlcic7dGhpcy5wb3dlclNlcmllc189dW5kZWZpbmVkO30sc2V0IHBvd2VyU2VyaWVzKHBvd2VyU2VyaWVzKXt0aGlzLnBvd2VyU2VyaWVzXz1wb3dlclNlcmllczt0aGlzLnNlcmllcz10aGlzLmJ1aWxkQ2hhcnRTZXJpZXNfKCk7dGhpcy5hdXRvU2V0QWxsQXhlcyh7ZXhwYW5kTWF4OnRydWV9KTt9LGdldCBoYXNWaXNpYmxlQ29udGVudCgpe3JldHVybih0aGlzLnBvd2VyU2VyaWVzXyYmdGhpcy5wb3dlclNlcmllc18uc2FtcGxlcy5sZW5ndGg+MCk7fSxhZGRDb250YWluZXJzVG9UcmFja01hcChjb250YWluZXJUb1RyYWNrTWFwKXtjb250YWluZXJUb1RyYWNrTWFwLmFkZENvbnRhaW5lcih0aGlzLnBvd2VyU2VyaWVzXyx0aGlzKTt9LGJ1aWxkQ2hhcnRTZXJpZXNfKCl7aWYoIXRoaXMuaGFzVmlzaWJsZUNvbnRlbnQpcmV0dXJuW107Y29uc3Qgc2VyaWVzWUF4aXM9bmV3IHRyLnVpLnRyYWNrcy5DaGFydFNlcmllc1lBeGlzKDAsdW5kZWZpbmVkKTtjb25zdCBwdHM9dGhpcy5wb3dlclNlcmllc18uc2FtcGxlcy5tYXAoZnVuY3Rpb24oc21wbCl7cmV0dXJuIG5ldyB0ci51aS50cmFja3MuQ2hhcnRQb2ludChzbXBsLHNtcGwuc3RhcnQsc21wbC5wb3dlckluVyk7fSk7Y29uc3QgcmVuZGVyaW5nQ29uZmlnPXtjaGFydFR5cGU6dHIudWkudHJhY2tzLkNoYXJ0U2VyaWVzVHlwZS5BUkVBLGNvbG9ySWQ6Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHRoaXMuaGVhZGluZyl9O3JldHVybltuZXcgdHIudWkudHJhY2tzLkNoYXJ0U2VyaWVzKHB0cyxzZXJpZXNZQXhpcyxyZW5kZXJpbmdDb25maWcpXTt9fTtyZXR1cm57UG93ZXJTZXJpZXNUcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IFNwYWNpbmdUcmFjaz10ci51aS5iLmRlZmluZSgnc3BhY2luZy10cmFjaycsdHIudWkudHJhY2tzLlRyYWNrKTtTcGFjaW5nVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ3NwYWNpbmctdHJhY2snKTt0aGlzLmhlYWRpbmdfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItaGVhZGluZycpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuaGVhZGluZ18pO30sYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbihmaWx0ZXIsc2VsZWN0aW9uKXt9fTtyZXR1cm57U3BhY2luZ1RyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgQ29udGFpbmVyVHJhY2s9dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrO2NvbnN0IERldmljZVRyYWNrPXRyLnVpLmIuZGVmaW5lKCdkZXZpY2UtdHJhY2snLENvbnRhaW5lclRyYWNrKTtEZXZpY2VUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzpDb250YWluZXJUcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe0NvbnRhaW5lclRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2RldmljZS10cmFjaycpO3RoaXMuZGV2aWNlXz11bmRlZmluZWQ7dGhpcy5wb3dlclNlcmllc1RyYWNrXz11bmRlZmluZWQ7fSxnZXQgZGV2aWNlKCl7cmV0dXJuIHRoaXMuZGV2aWNlXzt9LHNldCBkZXZpY2UoZGV2aWNlKXt0aGlzLmRldmljZV89ZGV2aWNlO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgcG93ZXJTZXJpZXNUcmFjaygpe3JldHVybiB0aGlzLnBvd2VyU2VyaWVzVHJhY2tfO30sZ2V0IGhhc1Zpc2libGVDb250ZW50KCl7cmV0dXJuKHRoaXMucG93ZXJTZXJpZXNUcmFja18mJnRoaXMucG93ZXJTZXJpZXNUcmFja18uaGFzVmlzaWJsZUNvbnRlbnQpO30sYWRkQ29udGFpbmVyc1RvVHJhY2tNYXAoY29udGFpbmVyVG9UcmFja01hcCl7dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZS5hZGRDb250YWluZXJzVG9UcmFja01hcC5jYWxsKHRoaXMsY29udGFpbmVyVG9UcmFja01hcCk7Y29udGFpbmVyVG9UcmFja01hcC5hZGRDb250YWluZXIodGhpcy5kZXZpY2UsdGhpcyk7fSxhZGRFdmVudHNUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCl7dGhpcy50cmFja3NfLmZvckVhY2goZnVuY3Rpb24odHJhY2spe3RyYWNrLmFkZEV2ZW50c1RvVHJhY2tNYXAoZXZlbnRUb1RyYWNrTWFwKTt9KTt9LGFwcGVuZFBvd2VyU2VyaWVzVHJhY2tfKCl7dGhpcy5wb3dlclNlcmllc1RyYWNrXz1uZXcgdHIudWkudHJhY2tzLlBvd2VyU2VyaWVzVHJhY2sodGhpcy52aWV3cG9ydCk7dGhpcy5wb3dlclNlcmllc1RyYWNrXy5wb3dlclNlcmllcz10aGlzLmRldmljZS5wb3dlclNlcmllcztpZih0aGlzLnBvd2VyU2VyaWVzVHJhY2tfLmhhc1Zpc2libGVDb250ZW50KXtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLnBvd2VyU2VyaWVzVHJhY2tfKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChuZXcgdHIudWkudHJhY2tzLlNwYWNpbmdUcmFjayh0aGlzLnZpZXdwb3J0KSk7fX0sdXBkYXRlQ29udGVudHNfKCl7dGhpcy5jbGVhclRyYWNrc18oKTt0aGlzLmFwcGVuZFBvd2VyU2VyaWVzVHJhY2tfKCk7fX07cmV0dXJue0RldmljZVRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBESVNQTEFZRURfU0laRV9OVU1FUklDX05BTUU9dHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcC5ESVNQTEFZRURfU0laRV9OVU1FUklDX05BTUU7Y29uc3QgQkFDS0dST1VORD10ci5tb2RlbC5Db250YWluZXJNZW1vcnlEdW1wLkxldmVsT2ZEZXRhaWwuQkFDS0dST1VORDtjb25zdCBMSUdIVD10ci5tb2RlbC5Db250YWluZXJNZW1vcnlEdW1wLkxldmVsT2ZEZXRhaWwuTElHSFQ7Y29uc3QgREVUQUlMRUQ9dHIubW9kZWwuQ29udGFpbmVyTWVtb3J5RHVtcC5MZXZlbE9mRGV0YWlsLkRFVEFJTEVEO2NvbnN0IFNZU1RFTV9NRU1PUllfQ0hBUlRfUkVOREVSSU5HX0NPTkZJRz17Y2hhcnRUeXBlOnRyLnVpLnRyYWNrcy5DaGFydFNlcmllc1R5cGUuQVJFQSxjb2xvcklkOkNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZygnc3lzdGVtTWVtb3J5JyksYmFja2dyb3VuZE9wYWNpdHk6MC44fTtjb25zdCBTWVNURU1fTUVNT1JZX1NFUklFU19OQU1FUz1bJ1VzZWQgKEtCKScsJ1N3YXBwZWQgKEtCKSddO2Z1bmN0aW9uIGV4dHJhY3RHbG9iYWxNZW1vcnlEdW1wVXNlZFNpemVzKGdsb2JhbE1lbW9yeUR1bXAsYWRkU2l6ZSl7Zm9yKGNvbnN0W3BpZCxwbWRdb2YKLU9iamVjdC5lbnRyaWVzKGdsb2JhbE1lbW9yeUR1bXAucHJvY2Vzc01lbW9yeUR1bXBzKSl7Y29uc3QgbW9zdFJlY2VudFZtUmVnaW9ucz1wbWQubW9zdFJlY2VudFZtUmVnaW9ucztpZihtb3N0UmVjZW50Vm1SZWdpb25zPT09dW5kZWZpbmVkKWNvbnRpbnVlO2FkZFNpemUocGlkLG1vc3RSZWNlbnRWbVJlZ2lvbnMuYnl0ZVN0YXRzLnByb3BvcnRpb25hbFJlc2lkZW50fHwwLHBtZC5wcm9jZXNzLnVzZXJGcmllbmRseU5hbWUpO319Ci1mdW5jdGlvbiBleHRyYWN0UHJvY2Vzc01lbW9yeUR1bXBBbGxvY2F0b3JTaXplcyhwcm9jZXNzTWVtb3J5RHVtcCxhZGRTaXplKXtjb25zdCBhbGxvY2F0b3JEdW1wcz1wcm9jZXNzTWVtb3J5RHVtcC5tZW1vcnlBbGxvY2F0b3JEdW1wcztpZihhbGxvY2F0b3JEdW1wcz09PXVuZGVmaW5lZClyZXR1cm47YWxsb2NhdG9yRHVtcHMuZm9yRWFjaChmdW5jdGlvbihhbGxvY2F0b3JEdW1wKXtpZihhbGxvY2F0b3JEdW1wLmZ1bGxOYW1lPT09J3RyYWNpbmcnKXJldHVybjtjb25zdCBhbGxvY2F0b3JTaXplPWFsbG9jYXRvckR1bXAubnVtZXJpY3NbRElTUExBWUVEX1NJWkVfTlVNRVJJQ19OQU1FXTtpZihhbGxvY2F0b3JTaXplPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBhbGxvY2F0b3JTaXplVmFsdWU9YWxsb2NhdG9yU2l6ZS52YWx1ZTtpZihhbGxvY2F0b3JTaXplVmFsdWU9PT11bmRlZmluZWQpcmV0dXJuO2FkZFNpemUoYWxsb2NhdG9yRHVtcC5mdWxsTmFtZSxhbGxvY2F0b3JTaXplVmFsdWUpO30pO30KLWZ1bmN0aW9uIGV4dHJhY3RHbG9iYWxNZW1vcnlEdW1wQWxsb2NhdG9yU2l6ZXMoZ2xvYmFsTWVtb3J5RHVtcCxhZGRTaXplKXtmb3IoY29uc3QgcG1kIG9mIE9iamVjdC52YWx1ZXMoZ2xvYmFsTWVtb3J5RHVtcC5wcm9jZXNzTWVtb3J5RHVtcHMpKXtleHRyYWN0UHJvY2Vzc01lbW9yeUR1bXBBbGxvY2F0b3JTaXplcyhwbWQsYWRkU2l6ZSk7fX0KLWZ1bmN0aW9uIGJ1aWxkTWVtb3J5Q2hhcnRTZXJpZXMobWVtb3J5RHVtcHMsZHVtcFNpemVFeHRyYWN0b3Ipe2NvbnN0IGR1bXBDb3VudD1tZW1vcnlEdW1wcy5sZW5ndGg7Y29uc3QgaWRUb1RpbWVzdGFtcFRvUG9pbnQ9e307Y29uc3QgaWRUb05hbWU9e307bWVtb3J5RHVtcHMuZm9yRWFjaChmdW5jdGlvbihkdW1wLGluZGV4KXtkdW1wU2l6ZUV4dHJhY3RvcihkdW1wLGZ1bmN0aW9uIGFkZFNpemUoaWQsc2l6ZSxvcHRfbmFtZSl7bGV0IHRpbWVzdGFtcFRvUG9pbnQ9aWRUb1RpbWVzdGFtcFRvUG9pbnRbaWRdO2lmKHRpbWVzdGFtcFRvUG9pbnQ9PT11bmRlZmluZWQpe2lkVG9UaW1lc3RhbXBUb1BvaW50W2lkXT10aW1lc3RhbXBUb1BvaW50PW5ldyBBcnJheShkdW1wQ291bnQpO2ZvcihsZXQgaT0wO2k8ZHVtcENvdW50O2krKyl7Y29uc3QgbW9kZWxJdGVtPW1lbW9yeUR1bXBzW2ldO3RpbWVzdGFtcFRvUG9pbnRbaV09bmV3IHRyLnVpLnRyYWNrcy5DaGFydFBvaW50KG1vZGVsSXRlbSxtb2RlbEl0ZW0uc3RhcnQsMCk7fX0KLXRpbWVzdGFtcFRvUG9pbnRbaW5kZXhdLnkrPXNpemU7aWYob3B0X25hbWUhPT11bmRlZmluZWQpaWRUb05hbWVbaWRdPW9wdF9uYW1lO30pO30pO2NvbnN0IGlkcz1PYmplY3Qua2V5cyhpZFRvVGltZXN0YW1wVG9Qb2ludCk7aWYoaWRzLmxlbmd0aD09PTApcmV0dXJuIHVuZGVmaW5lZDtpZHMuc29ydCgpO2ZvcihsZXQgaT0wO2k8ZHVtcENvdW50O2krKyl7bGV0IGJhc2VTaXplPTA7Zm9yKGxldCBqPWlkcy5sZW5ndGgtMTtqPj0wO2otLSl7Y29uc3QgcG9pbnQ9aWRUb1RpbWVzdGFtcFRvUG9pbnRbaWRzW2pdXVtpXTtwb2ludC55QmFzZT1iYXNlU2l6ZTtwb2ludC55Kz1iYXNlU2l6ZTtiYXNlU2l6ZT1wb2ludC55O319Ci1jb25zdCBzZXJpZXNZQXhpcz1uZXcgdHIudWkudHJhY2tzLkNoYXJ0U2VyaWVzWUF4aXMoMCk7Y29uc3Qgc2VyaWVzPWlkcy5tYXAoZnVuY3Rpb24oaWQpe2NvbnN0IGNvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGlkVG9OYW1lW2lkXXx8aWQpO2NvbnN0IHJlbmRlcmluZ0NvbmZpZz17Y2hhcnRUeXBlOnRyLnVpLnRyYWNrcy5DaGFydFNlcmllc1R5cGUuQVJFQSxjb2xvcklkLGJhY2tncm91bmRPcGFjaXR5OjAuOH07cmV0dXJuIG5ldyB0ci51aS50cmFja3MuQ2hhcnRTZXJpZXMoaWRUb1RpbWVzdGFtcFRvUG9pbnRbaWRdLHNlcmllc1lBeGlzLHJlbmRlcmluZ0NvbmZpZyk7fSk7c2VyaWVzLnJldmVyc2UoKTtyZXR1cm4gc2VyaWVzO30KLWZ1bmN0aW9uIGJ1aWxkTWVtb3J5TGV0dGVyRG90cyhtZW1vcnlEdW1wcyl7Y29uc3QgYmFja2dyb3VuZE1lbW9yeUNvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZSgnYmFja2dyb3VuZF9tZW1vcnlfZHVtcCcpO2NvbnN0IGxpZ2h0TWVtb3J5Q29sb3JJZD1Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lKCdsaWdodF9tZW1vcnlfZHVtcCcpO2NvbnN0IGRldGFpbGVkTWVtb3J5Q29sb3JJZD1Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lKCdkZXRhaWxlZF9tZW1vcnlfZHVtcCcpO3JldHVybiBtZW1vcnlEdW1wcy5tYXAoZnVuY3Rpb24obWVtb3J5RHVtcCl7bGV0IG1lbW9yeUNvbG9ySWQ7c3dpdGNoKG1lbW9yeUR1bXAubGV2ZWxPZkRldGFpbCl7Y2FzZSBCQUNLR1JPVU5EOm1lbW9yeUNvbG9ySWQ9YmFja2dyb3VuZE1lbW9yeUNvbG9ySWQ7YnJlYWs7Y2FzZSBERVRBSUxFRDptZW1vcnlDb2xvcklkPWRldGFpbGVkTWVtb3J5Q29sb3JJZDticmVhaztjYXNlIExJR0hUOmRlZmF1bHQ6bWVtb3J5Q29sb3JJZD1saWdodE1lbW9yeUNvbG9ySWQ7fQotcmV0dXJuIG5ldyB0ci51aS50cmFja3MuTGV0dGVyRG90KG1lbW9yeUR1bXAsJ00nLG1lbW9yeUNvbG9ySWQsbWVtb3J5RHVtcC5zdGFydCk7fSk7fQotZnVuY3Rpb24gYnVpbGRHbG9iYWxVc2VkTWVtb3J5Q2hhcnRTZXJpZXMoZ2xvYmFsTWVtb3J5RHVtcHMpe3JldHVybiBidWlsZE1lbW9yeUNoYXJ0U2VyaWVzKGdsb2JhbE1lbW9yeUR1bXBzLGV4dHJhY3RHbG9iYWxNZW1vcnlEdW1wVXNlZFNpemVzKTt9Ci1mdW5jdGlvbiBidWlsZFByb2Nlc3NBbGxvY2F0ZWRNZW1vcnlDaGFydFNlcmllcyhwcm9jZXNzTWVtb3J5RHVtcHMpe3JldHVybiBidWlsZE1lbW9yeUNoYXJ0U2VyaWVzKHByb2Nlc3NNZW1vcnlEdW1wcyxleHRyYWN0UHJvY2Vzc01lbW9yeUR1bXBBbGxvY2F0b3JTaXplcyk7fQotZnVuY3Rpb24gYnVpbGRHbG9iYWxBbGxvY2F0ZWRNZW1vcnlDaGFydFNlcmllcyhnbG9iYWxNZW1vcnlEdW1wcyl7cmV0dXJuIGJ1aWxkTWVtb3J5Q2hhcnRTZXJpZXMoZ2xvYmFsTWVtb3J5RHVtcHMsZXh0cmFjdEdsb2JhbE1lbW9yeUR1bXBBbGxvY2F0b3JTaXplcyk7fQotZnVuY3Rpb24gYnVpbGRTeXN0ZW1NZW1vcnlDaGFydFNlcmllcyhtb2RlbCl7aWYobW9kZWwua2VybmVsLmNvdW50ZXJzPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBtZW1vcnlDb3VudGVyPW1vZGVsLmtlcm5lbC5jb3VudGVyc1snZ2xvYmFsLlN5c3RlbU1lbW9yeSddO2lmKG1lbW9yeUNvdW50ZXI9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IHRyYWNrcz1bXTtmb3IoY29uc3QgbmFtZSBvZiBTWVNURU1fTUVNT1JZX1NFUklFU19OQU1FUyl7Y29uc3Qgc2VyaWVzPW1lbW9yeUNvdW50ZXIuc2VyaWVzLmZpbmQoc2VyaWVzPT5zZXJpZXMubmFtZT09PW5hbWUpO2lmKHNlcmllcz09PXVuZGVmaW5lZHx8c2VyaWVzLnNhbXBsZXMubGVuZ3RoPT09MClyZXR1cm47Y29uc3QgY2hhcnRQb2ludHM9W107Y29uc3QgdmFsdWVSYW5nZT1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7Zm9yKGNvbnN0IHNhbXBsZSBvZiBzZXJpZXMuc2FtcGxlcyl7Y2hhcnRQb2ludHMucHVzaChuZXcgdHIudWkudHJhY2tzLkNoYXJ0UG9pbnQoc2FtcGxlLHNhbXBsZS50aW1lc3RhbXAsc2FtcGxlLnZhbHVlLDApKTt2YWx1ZVJhbmdlLmFkZFZhbHVlKHNhbXBsZS52YWx1ZSk7fQotY29uc3QgYmFzZUxpbmU9TWF0aC5tYXgoMCx2YWx1ZVJhbmdlLm1pbi12YWx1ZVJhbmdlLnJhbmdlKTtjb25zdCBheGlzWT1uZXcgdHIudWkudHJhY2tzLkNoYXJ0U2VyaWVzWUF4aXMoYmFzZUxpbmUsdmFsdWVSYW5nZS5tYXgpO2NvbnN0IGNoYXJ0U2VyaWVzPVtuZXcgdHIudWkudHJhY2tzLkNoYXJ0U2VyaWVzKGNoYXJ0UG9pbnRzLGF4aXNZLFNZU1RFTV9NRU1PUllfQ0hBUlRfUkVOREVSSU5HX0NPTkZJRyldO3RyYWNrcy5wdXNoKHtuYW1lOidTeXN0ZW0gTWVtb3J5ICcrbmFtZSxzZXJpZXM6Y2hhcnRTZXJpZXN9KTt9Ci1yZXR1cm4gdHJhY2tzO30KLXJldHVybntidWlsZE1lbW9yeUxldHRlckRvdHMsYnVpbGRHbG9iYWxVc2VkTWVtb3J5Q2hhcnRTZXJpZXMsYnVpbGRQcm9jZXNzQWxsb2NhdGVkTWVtb3J5Q2hhcnRTZXJpZXMsYnVpbGRHbG9iYWxBbGxvY2F0ZWRNZW1vcnlDaGFydFNlcmllcyxidWlsZFN5c3RlbU1lbW9yeUNoYXJ0U2VyaWVzLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgVVNFRF9NRU1PUllfVFJBQ0tfSEVJR0hUPTUwO2NvbnN0IEFMTE9DQVRFRF9NRU1PUllfVFJBQ0tfSEVJR0hUPTUwO2NvbnN0IEdsb2JhbE1lbW9yeUR1bXBUcmFjaz10ci51aS5iLmRlZmluZSgnZ2xvYmFsLW1lbW9yeS1kdW1wLXRyYWNrJyx0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2spO0dsb2JhbE1lbW9yeUR1bXBUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7dGhpcy5tZW1vcnlEdW1wc189dW5kZWZpbmVkO30sZ2V0IG1lbW9yeUR1bXBzKCl7cmV0dXJuIHRoaXMubWVtb3J5RHVtcHNfO30sc2V0IG1lbW9yeUR1bXBzKG1lbW9yeUR1bXBzKXt0aGlzLm1lbW9yeUR1bXBzXz1tZW1vcnlEdW1wczt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlQ29udGVudHNfKCl7dGhpcy5jbGVhclRyYWNrc18oKTtpZighdGhpcy5tZW1vcnlEdW1wc198fCF0aGlzLm1lbW9yeUR1bXBzXy5sZW5ndGgpcmV0dXJuO3RoaXMuYXBwZW5kRHVtcERvdHNUcmFja18oKTt0aGlzLmFwcGVuZFVzZWRNZW1vcnlUcmFja18oKTt0aGlzLmFwcGVuZEFsbG9jYXRlZE1lbW9yeVRyYWNrXygpO30sYXBwZW5kRHVtcERvdHNUcmFja18oKXtjb25zdCBpdGVtcz10ci51aS50cmFja3MuYnVpbGRNZW1vcnlMZXR0ZXJEb3RzKHRoaXMubWVtb3J5RHVtcHNfKTtpZighaXRlbXMpcmV0dXJuO2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuTGV0dGVyRG90VHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2suaGVhZGluZz0nTWVtb3J5IER1bXBzJzt0cmFjay5pdGVtcz1pdGVtcztQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7fSxhcHBlbmRVc2VkTWVtb3J5VHJhY2tfKCl7Y29uc3QgdHJhY2tzPVtdO2NvbnN0IHBlclByb2Nlc3NTZXJpZXM9dHIudWkudHJhY2tzLmJ1aWxkR2xvYmFsVXNlZE1lbW9yeUNoYXJ0U2VyaWVzKHRoaXMubWVtb3J5RHVtcHNfKTtpZihwZXJQcm9jZXNzU2VyaWVzIT09dW5kZWZpbmVkKXt0cmFja3MucHVzaCh7bmFtZTonTWVtb3J5IHBlciBwcm9jZXNzJyxzZXJpZXM6cGVyUHJvY2Vzc1Nlcmllc30pO31lbHNle3RyYWNrcy5wdXNoLmFwcGx5KHRyYWNrcyx0ci51aS50cmFja3MuYnVpbGRTeXN0ZW1NZW1vcnlDaGFydFNlcmllcyh0aGlzLm1lbW9yeUR1bXBzX1swXS5tb2RlbCkpO30KLWZvcihjb25zdHtuYW1lLHNlcmllc31vZiB0cmFja3Mpe2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuQ2hhcnRUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay5oZWFkaW5nPW5hbWU7dHJhY2suaGVpZ2h0PVVTRURfTUVNT1JZX1RSQUNLX0hFSUdIVCsncHgnO3RyYWNrLnNlcmllcz1zZXJpZXM7dHJhY2suYXV0b1NldEFsbEF4ZXMoe2V4cGFuZE1heDp0cnVlfSk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodHJhY2spO319LGFwcGVuZEFsbG9jYXRlZE1lbW9yeVRyYWNrXygpe2NvbnN0IHNlcmllcz10ci51aS50cmFja3MuYnVpbGRHbG9iYWxBbGxvY2F0ZWRNZW1vcnlDaGFydFNlcmllcyh0aGlzLm1lbW9yeUR1bXBzXyk7aWYoIXNlcmllcylyZXR1cm47Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5DaGFydFRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLmhlYWRpbmc9J01lbW9yeSBwZXIgY29tcG9uZW50Jzt0cmFjay5oZWlnaHQ9QUxMT0NBVEVEX01FTU9SWV9UUkFDS19IRUlHSFQrJ3B4Jzt0cmFjay5zZXJpZXM9c2VyaWVzO3RyYWNrLmF1dG9TZXRBbGxBeGVzKHtleHBhbmRNYXg6dHJ1ZX0pO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRyYWNrKTt9fTtyZXR1cm57R2xvYmFsTWVtb3J5RHVtcFRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEZhc3RSZWN0UmVuZGVyZXIoY3R4LHhNaW4seE1heCxtaW5SZWN0U2l6ZSxtYXhNZXJnZURpc3QscGFsZXR0ZSl7dGhpcy5jdHhfPWN0eDt0aGlzLnhNaW5fPXhNaW47dGhpcy54TWF4Xz14TWF4O3RoaXMubWluUmVjdFNpemVfPW1pblJlY3RTaXplO3RoaXMubWF4TWVyZ2VEaXN0Xz1tYXhNZXJnZURpc3Q7dGhpcy5wYWxldHRlXz1wYWxldHRlO30KLUZhc3RSZWN0UmVuZGVyZXIucHJvdG90eXBlPXt5XzowLGhfOjAsbWVyZ2luZ186ZmFsc2UsbWVyZ2VTdGFydFhfOjAsbWVyZ2VDdXJSaWdodF86MCxtZXJnZWRDb2xvcklkXzowLG1lcmdlZEFscGhhXzowLHNldFlhbmRIKHksaCl7aWYodGhpcy55Xz09PXkmJnRoaXMuaF89PT1oKXtyZXR1cm47fQotdGhpcy5mbHVzaCgpO3RoaXMueV89eTt0aGlzLmhfPWg7fSxmaWxsUmVjdCh4LHcsY29sb3JJZCxhbHBoYSl7Y29uc3Qgcj14K3c7aWYodzx0aGlzLm1pblJlY3RTaXplXyl7aWYoci10aGlzLm1lcmdlU3RhcnRYXz50aGlzLm1heE1lcmdlRGlzdF8pe3RoaXMuZmx1c2goKTt9Ci1pZighdGhpcy5tZXJnaW5nXyl7dGhpcy5tZXJnaW5nXz10cnVlO3RoaXMubWVyZ2VTdGFydFhfPXg7dGhpcy5tZXJnZUN1clJpZ2h0Xz1yO3RoaXMubWVyZ2VkQ29sb3JJZF89Y29sb3JJZDt0aGlzLm1lcmdlZEFscGhhXz1hbHBoYTt9ZWxzZXt0aGlzLm1lcmdlQ3VyUmlnaHRfPXI7aWYodGhpcy5tZXJnZWRBbHBoYV88YWxwaGF8fCh0aGlzLm1lcmdlZEFscGhhXz09PWFscGhhJiZ0aGlzLm1lcmdlZENvbG9ySWRfPGNvbG9ySWQpKXt0aGlzLm1lcmdlZEFscGhhXz1hbHBoYTt0aGlzLm1lcmdlZENvbG9ySWRfPWNvbG9ySWQ7fX19ZWxzZXtpZih0aGlzLm1lcmdpbmdfKXt0aGlzLmZsdXNoKCk7fQotdGhpcy5jdHhfLmZpbGxTdHlsZT10aGlzLnBhbGV0dGVfW2NvbG9ySWRdO3RoaXMuY3R4Xy5nbG9iYWxBbHBoYT1hbHBoYTtjb25zdCB4TGVmdD1NYXRoLm1heCh4LHRoaXMueE1pbl8pO2NvbnN0IHhSaWdodD1NYXRoLm1pbihyLHRoaXMueE1heF8pO2lmKHhMZWZ0PHhSaWdodCl7dGhpcy5jdHhfLmZpbGxSZWN0KHhMZWZ0LHRoaXMueV8seFJpZ2h0LXhMZWZ0LHRoaXMuaF8pO319fSxmbHVzaCgpe2lmKHRoaXMubWVyZ2luZ18pe3RoaXMuY3R4Xy5maWxsU3R5bGU9dGhpcy5wYWxldHRlX1t0aGlzLm1lcmdlZENvbG9ySWRfXTt0aGlzLmN0eF8uZ2xvYmFsQWxwaGE9dGhpcy5tZXJnZWRBbHBoYV87Y29uc3QgeExlZnQ9TWF0aC5tYXgodGhpcy5tZXJnZVN0YXJ0WF8sdGhpcy54TWluXyk7Y29uc3QgeFJpZ2h0PU1hdGgubWluKHRoaXMubWVyZ2VDdXJSaWdodF8sdGhpcy54TWF4Xyk7aWYoeExlZnQ8eFJpZ2h0KXt0aGlzLmN0eF8uZmlsbFJlY3QoeExlZnQsdGhpcy55Xyx4UmlnaHQteExlZnQsdGhpcy5oXyk7fQotdGhpcy5tZXJnaW5nXz1mYWxzZTt9fX07cmV0dXJue0Zhc3RSZWN0UmVuZGVyZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBSZWN0VHJhY2s9dHIudWkuYi5kZWZpbmUoJ3JlY3QtdHJhY2snLHRyLnVpLnRyYWNrcy5UcmFjayk7UmVjdFRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdyZWN0LXRyYWNrJyk7dGhpcy5hc3luY1N0eWxlXz1mYWxzZTt0aGlzLnJlY3RzXz1udWxsO3RoaXMuaGVhZGluZ189ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1oZWFkaW5nJyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5oZWFkaW5nXyk7fSxzZXQgaGVhZGluZyhoZWFkaW5nKXt0aGlzLmhlYWRpbmdfLmhlYWRpbmc9aGVhZGluZzt9LGdldCBoZWFkaW5nKCl7cmV0dXJuIHRoaXMuaGVhZGluZ18uaGVhZGluZzt9LHNldCB0b29sdGlwKHRvb2x0aXApe3RoaXMuaGVhZGluZ18udG9vbHRpcD10b29sdGlwO30sc2V0IHNlbGVjdGlvbkdlbmVyYXRvcihnZW5lcmF0b3Ipe3RoaXMuaGVhZGluZ18uc2VsZWN0aW9uR2VuZXJhdG9yPWdlbmVyYXRvcjt9LHNldCBleHBhbmRlZChleHBhbmRlZCl7dGhpcy5oZWFkaW5nXy5leHBhbmRlZD0hIWV4cGFuZGVkO30sc2V0IGFycm93VmlzaWJsZShhcnJvd1Zpc2libGUpe3RoaXMuaGVhZGluZ18uYXJyb3dWaXNpYmxlPSEhYXJyb3dWaXNpYmxlO30sZ2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuaGVhZGluZ18uZXhwYW5kZWQ7fSxnZXQgYXN5bmNTdHlsZSgpe3JldHVybiB0aGlzLmFzeW5jU3R5bGVfO30sc2V0IGFzeW5jU3R5bGUodil7dGhpcy5hc3luY1N0eWxlXz0hIXY7fSxnZXQgcmVjdHMoKXtyZXR1cm4gdGhpcy5yZWN0c187fSxzZXQgcmVjdHMocmVjdHMpe3RoaXMucmVjdHNfPXJlY3RzfHxbXTt0aGlzLmludmFsaWRhdGVEcmF3aW5nQ29udGFpbmVyKCk7fSxnZXQgaGVpZ2h0KCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmhlaWdodDt9LHNldCBoZWlnaHQoaGVpZ2h0KXt0aGlzLnN0eWxlLmhlaWdodD1oZWlnaHQ7dGhpcy5pbnZhbGlkYXRlRHJhd2luZ0NvbnRhaW5lcigpO30sZ2V0IGhhc1Zpc2libGVDb250ZW50KCl7cmV0dXJuIHRoaXMucmVjdHNfLmxlbmd0aD4wO30sZHJhdyh0eXBlLHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0KXtzd2l0Y2godHlwZSl7Y2FzZSB0ci51aS50cmFja3MuRHJhd1R5cGUuR0VORVJBTF9FVkVOVDp0aGlzLmRyYXdSZWN0c18odmlld0xXb3JsZCx2aWV3UldvcmxkKTticmVhazt9fSxkcmF3UmVjdHNfKHZpZXdMV29ybGQsdmlld1JXb3JsZCl7Y29uc3QgY3R4PXRoaXMuY29udGV4dCgpO2N0eC5zYXZlKCk7Y29uc3QgYm91bmRzPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dHIudWkuYi5kcmF3U2xpY2VzKGN0eCx0aGlzLnZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLHZpZXdMV29ybGQsdmlld1JXb3JsZCxib3VuZHMuaGVpZ2h0LHRoaXMucmVjdHNfLHRoaXMuYXN5bmNTdHlsZV8pO2N0eC5yZXN0b3JlKCk7aWYoYm91bmRzLmhlaWdodDw9NilyZXR1cm47bGV0IGZvbnRTaXplO2xldCB5T2Zmc2V0O2lmKGJvdW5kcy5oZWlnaHQ8MTUpe2ZvbnRTaXplPTY7eU9mZnNldD0xLjA7fWVsc2V7Zm9udFNpemU9MTA7eU9mZnNldD0yLjU7fQotdHIudWkuYi5kcmF3TGFiZWxzKGN0eCx0aGlzLnZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLHZpZXdMV29ybGQsdmlld1JXb3JsZCx0aGlzLnJlY3RzXyx0aGlzLmFzeW5jU3R5bGVfLGZvbnRTaXplLHlPZmZzZXQpO30sYWRkRXZlbnRzVG9UcmFja01hcChldmVudFRvVHJhY2tNYXApe2lmKHRoaXMucmVjdHNfPT09dW5kZWZpbmVkfHx0aGlzLnJlY3RzXz09PW51bGwpe3JldHVybjt9Ci10aGlzLnJlY3RzXy5mb3JFYWNoKGZ1bmN0aW9uKHJlY3Qpe3JlY3QuYWRkVG9UcmFja01hcChldmVudFRvVHJhY2tNYXAsdGhpcyk7fSx0aGlzKTt9LGFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbkluV29ybGRTcGFjZShsb1dYLGhpV1gsdmlld1BpeFdpZHRoV29ybGQsc2VsZWN0aW9uKXtmdW5jdGlvbiBvblJlY3QocmVjdCl7cmVjdC5hZGRUb1NlbGVjdGlvbihzZWxlY3Rpb24pO30KLW9uUmVjdD1vblJlY3QuYmluZCh0aGlzKTtjb25zdCBpbnN0YW50RXZlbnRXaWR0aD0yKnZpZXdQaXhXaWR0aFdvcmxkO3RyLmIuaXRlcmF0ZU92ZXJJbnRlcnNlY3RpbmdJbnRlcnZhbHModGhpcy5yZWN0c18sZnVuY3Rpb24oeCl7cmV0dXJuIHguc3RhcnQ7fSxmdW5jdGlvbih4KXtyZXR1cm4geC5kdXJhdGlvbj09PTA/eC5kdXJhdGlvbitpbnN0YW50RXZlbnRXaWR0aDp4LmR1cmF0aW9uO30sbG9XWCxoaVdYLG9uUmVjdCk7fSxhZGRFdmVudE5lYXJUb1Byb3ZpZGVkRXZlbnRUb1NlbGVjdGlvbihldmVudCxvZmZzZXQsc2VsZWN0aW9uKXtjb25zdCBpbmRleD10aGlzLnJlY3RzXy5maW5kSW5kZXgocmVjdD0+cmVjdC5tb2RlbEl0ZW09PT1ldmVudCk7aWYoaW5kZXg9PT0tMSlyZXR1cm4gZmFsc2U7Y29uc3QgbmV3SW5kZXg9aW5kZXgrb2Zmc2V0O2lmKG5ld0luZGV4PDB8fG5ld0luZGV4Pj10aGlzLnJlY3RzXy5sZW5ndGgpcmV0dXJuIGZhbHNlO3RoaXMucmVjdHNfW25ld0luZGV4XS5hZGRUb1NlbGVjdGlvbihzZWxlY3Rpb24pO3JldHVybiB0cnVlO30sYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbihmaWx0ZXIsc2VsZWN0aW9uKXtmb3IobGV0IGk9MDtpPHRoaXMucmVjdHNfLmxlbmd0aDsrK2kpe2NvbnN0IG1vZGVsSXRlbT10aGlzLnJlY3RzX1tpXS5tb2RlbEl0ZW07aWYoIW1vZGVsSXRlbSljb250aW51ZTtpZihmaWx0ZXIubWF0Y2hTbGljZShtb2RlbEl0ZW0pKXtzZWxlY3Rpb24ucHVzaChtb2RlbEl0ZW0pO319fSxhZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKXtjb25zdCByZWN0PXRyLmIuZmluZENsb3Nlc3RJbnRlcnZhbEluU29ydGVkSW50ZXJ2YWxzKHRoaXMucmVjdHNfLGZ1bmN0aW9uKHgpe3JldHVybiB4LnN0YXJ0O30sZnVuY3Rpb24oeCl7cmV0dXJuIHguZW5kO30sd29ybGRYLHdvcmxkTWF4RGlzdCk7aWYoIXJlY3QpcmV0dXJuO3JlY3QuYWRkVG9TZWxlY3Rpb24oc2VsZWN0aW9uKTt9fTtmdW5jdGlvbiBSZWN0KG1vZGVsSXRlbSx0aXRsZSxjb2xvcklkLHN0YXJ0LGR1cmF0aW9uKXt0ci5tb2RlbC5Qcm94eVNlbGVjdGFibGVJdGVtLmNhbGwodGhpcyxtb2RlbEl0ZW0pO3RoaXMudGl0bGU9dGl0bGU7dGhpcy5jb2xvcklkPWNvbG9ySWQ7dGhpcy5zdGFydD1zdGFydDt0aGlzLmR1cmF0aW9uPWR1cmF0aW9uO3RoaXMuZW5kPXN0YXJ0K2R1cmF0aW9uO30KLVJlY3QucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuUHJveHlTZWxlY3RhYmxlSXRlbS5wcm90b3R5cGV9O3JldHVybntSZWN0VHJhY2ssUmVjdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IFNsaWNlVHJhY2s9dHIudWkuYi5kZWZpbmUoJ3NsaWNlLXRyYWNrJyx0ci51aS50cmFja3MuUmVjdFRyYWNrKTtTbGljZVRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5SZWN0VHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuUmVjdFRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO30sZ2V0IHNsaWNlcygpe3JldHVybiB0aGlzLnJlY3RzO30sc2V0IHNsaWNlcyhzbGljZXMpe3RoaXMucmVjdHM9c2xpY2VzO319O3JldHVybntTbGljZVRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgQ3B1VHJhY2s9dHIudWkuYi5kZWZpbmUoJ2NwdS10cmFjaycsdHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrKTtDcHVUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgnY3B1LXRyYWNrJyk7dGhpcy5kZXRhaWxlZE1vZGVfPXRydWU7fSxnZXQgY3B1KCl7cmV0dXJuIHRoaXMuY3B1Xzt9LHNldCBjcHUoY3B1KXt0aGlzLmNwdV89Y3B1O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgZGV0YWlsZWRNb2RlKCl7cmV0dXJuIHRoaXMuZGV0YWlsZWRNb2RlXzt9LHNldCBkZXRhaWxlZE1vZGUoZGV0YWlsZWRNb2RlKXt0aGlzLmRldGFpbGVkTW9kZV89ZGV0YWlsZWRNb2RlO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgdG9vbHRpcCgpe3JldHVybiB0aGlzLnRvb2x0aXBfO30sc2V0IHRvb2x0aXAodmFsdWUpe3RoaXMudG9vbHRpcF89dmFsdWU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBoYXNWaXNpYmxlQ29udGVudCgpe2lmKHRoaXMuY3B1Xz09PXVuZGVmaW5lZClyZXR1cm4gZmFsc2U7Y29uc3QgY3B1PXRoaXMuY3B1XztpZihjcHUuc2xpY2VzLmxlbmd0aClyZXR1cm4gdHJ1ZTtpZihjcHUuc2FtcGxlcyYmY3B1LnNhbXBsZXMubGVuZ3RoKXJldHVybiB0cnVlO2lmKE9iamVjdC5rZXlzKGNwdS5jb3VudGVycykubGVuZ3RoPjApcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNlO30sdXBkYXRlQ29udGVudHNfKCl7dGhpcy5kZXRhY2goKTtpZighdGhpcy5jcHVfKXJldHVybjtjb25zdCBzbGljZXM9dGhpcy5jcHVfLnNsaWNlcztpZihzbGljZXMubGVuZ3RoKXtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLlNsaWNlVHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2suc2xpY2VzPXNsaWNlczt0cmFjay5oZWFkaW5nPXRoaXMuY3B1Xy51c2VyRnJpZW5kbHlOYW1lKyc6JztQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7fQotaWYodGhpcy5kZXRhaWxlZE1vZGVfKXt0aGlzLmFwcGVuZFNhbXBsZXNUcmFja3NfKCk7Zm9yKGNvbnN0IGNvdW50ZXJOYW1lIGluIHRoaXMuY3B1Xy5jb3VudGVycyl7Y29uc3QgY291bnRlcj10aGlzLmNwdV8uY291bnRlcnNbY291bnRlck5hbWVdO2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuQ291bnRlclRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLmhlYWRpbmc9dGhpcy5jcHVfLnVzZXJGcmllbmRseU5hbWUrJyAnKwotY291bnRlci5uYW1lKyc6Jzt0cmFjay5jb3VudGVyPWNvdW50ZXI7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodHJhY2spO319fSxhcHBlbmRTYW1wbGVzVHJhY2tzXygpe2NvbnN0IHNhbXBsZXM9dGhpcy5jcHVfLnNhbXBsZXM7aWYoc2FtcGxlcz09PXVuZGVmaW5lZHx8c2FtcGxlcy5sZW5ndGg9PT0wKXtyZXR1cm47fQotY29uc3Qgc2FtcGxlc0J5VGl0bGU9e307c2FtcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHNhbXBsZSl7aWYoc2FtcGxlc0J5VGl0bGVbc2FtcGxlLnRpdGxlXT09PXVuZGVmaW5lZCl7c2FtcGxlc0J5VGl0bGVbc2FtcGxlLnRpdGxlXT1bXTt9Ci1zYW1wbGVzQnlUaXRsZVtzYW1wbGUudGl0bGVdLnB1c2goc2FtcGxlKTt9KTtjb25zdCBzYW1wbGVUaXRsZXM9T2JqZWN0LmtleXMoc2FtcGxlc0J5VGl0bGUpO3NhbXBsZVRpdGxlcy5zb3J0KCk7c2FtcGxlVGl0bGVzLmZvckVhY2goZnVuY3Rpb24oc2FtcGxlVGl0bGUpe2NvbnN0IHNhbXBsZXM9c2FtcGxlc0J5VGl0bGVbc2FtcGxlVGl0bGVdO2NvbnN0IHNhbXBsZXNUcmFjaz1uZXcgdHIudWkudHJhY2tzLlNsaWNlVHJhY2sodGhpcy52aWV3cG9ydCk7c2FtcGxlc1RyYWNrLmdyb3VwPXRoaXMuY3B1XztzYW1wbGVzVHJhY2suc2xpY2VzPXNhbXBsZXM7c2FtcGxlc1RyYWNrLmhlYWRpbmc9dGhpcy5jcHVfLnVzZXJGcmllbmRseU5hbWUrJzogJysKLXNhbXBsZVRpdGxlO3NhbXBsZXNUcmFjay50b29sdGlwPXRoaXMuY3B1Xy51c2VyRnJpZW5kbHlEZXRhaWxzO3NhbXBsZXNUcmFjay5zZWxlY3Rpb25HZW5lcmF0b3I9ZnVuY3Rpb24oKXtjb25zdCBzZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7Zm9yKGxldCBpPTA7aTxzYW1wbGVzVHJhY2suc2xpY2VzLmxlbmd0aDtpKyspe3NlbGVjdGlvbi5wdXNoKHNhbXBsZXNUcmFjay5zbGljZXNbaV0pO30KLXJldHVybiBzZWxlY3Rpb247fTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChzYW1wbGVzVHJhY2spO30sdGhpcyk7fX07cmV0dXJue0NwdVRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBTZXR0aW5ncz10ci5iLlNldHRpbmdzO2Z1bmN0aW9uIE1vZGVsU2V0dGluZ3MobW9kZWwpe3RoaXMubW9kZWw9bW9kZWw7dGhpcy5vYmplY3RzQnlLZXlfPVtdO3RoaXMubm9udW5pcXVlS2V5c189W107dGhpcy5idWlsZE9iamVjdHNCeUtleU1hcF8oKTt0aGlzLnJlbW92ZU5vbnVuaXF1ZUtleXNGcm9tU2V0dGluZ3NfKCk7dGhpcy5lcGhlbWVyYWxTZXR0aW5nc0J5R1VJRF89e307fQotTW9kZWxTZXR0aW5ncy5wcm90b3R5cGU9e2J1aWxkT2JqZWN0c0J5S2V5TWFwXygpe2NvbnN0IG9iamVjdHM9W107dGhpcy5tb2RlbC5pdGVyYXRlQWxsUGVyc2lzdGFibGVPYmplY3RzKGZ1bmN0aW9uKG8pe29iamVjdHMucHVzaChvKTt9KTtjb25zdCBvYmplY3RzQnlLZXk9e307Y29uc3QgTk9OVU5JUVVFX0tFWT0nbm9udW5pcXVlS2V5Jztmb3IobGV0IGk9MDtpPG9iamVjdHMubGVuZ3RoO2krKyl7Y29uc3Qgb2JqZWN0PW9iamVjdHNbaV07Y29uc3Qgb2JqZWN0S2V5PW9iamVjdC5nZXRTZXR0aW5nc0tleSgpO2lmKCFvYmplY3RLZXkpY29udGludWU7aWYob2JqZWN0c0J5S2V5W29iamVjdEtleV09PT11bmRlZmluZWQpe29iamVjdHNCeUtleVtvYmplY3RLZXldPW9iamVjdDtjb250aW51ZTt9Ci1vYmplY3RzQnlLZXlbb2JqZWN0S2V5XT1OT05VTklRVUVfS0VZO30KLWNvbnN0IG5vbnVuaXF1ZUtleXM9e307T2JqZWN0LmtleXMob2JqZWN0c0J5S2V5KS5mb3JFYWNoKGZ1bmN0aW9uKG9iamVjdEtleSl7aWYob2JqZWN0c0J5S2V5W29iamVjdEtleV0hPT1OT05VTklRVUVfS0VZKXtyZXR1cm47fQotZGVsZXRlIG9iamVjdHNCeUtleVtvYmplY3RLZXldO25vbnVuaXF1ZUtleXNbb2JqZWN0S2V5XT10cnVlO30pO3RoaXMubm9udW5pcXVlS2V5cz1ub251bmlxdWVLZXlzO3RoaXMub2JqZWN0c0J5S2V5Xz1vYmplY3RzQnlLZXk7fSxyZW1vdmVOb251bmlxdWVLZXlzRnJvbVNldHRpbmdzXygpe2NvbnN0IHNldHRpbmdzPVNldHRpbmdzLmdldCgndHJhY2VfbW9kZWxfc2V0dGluZ3MnLHt9KTtsZXQgc2V0dGluZ3NDaGFuZ2VkPWZhbHNlO09iamVjdC5rZXlzKHNldHRpbmdzKS5mb3JFYWNoKGZ1bmN0aW9uKG9iamVjdEtleSl7aWYoIXRoaXMubm9udW5pcXVlS2V5c1tvYmplY3RLZXldKXtyZXR1cm47fQotc2V0dGluZ3NDaGFuZ2VkPXRydWU7ZGVsZXRlIHNldHRpbmdzW29iamVjdEtleV07fSx0aGlzKTtpZihzZXR0aW5nc0NoYW5nZWQpe1NldHRpbmdzLnNldCgndHJhY2VfbW9kZWxfc2V0dGluZ3MnLHNldHRpbmdzKTt9fSxoYXNVbmlxdWVTZXR0aW5nS2V5KG9iamVjdCl7Y29uc3Qgb2JqZWN0S2V5PW9iamVjdC5nZXRTZXR0aW5nc0tleSgpO2lmKCFvYmplY3RLZXkpcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLm9iamVjdHNCeUtleV9bb2JqZWN0S2V5XSE9PXVuZGVmaW5lZDt9LGdldFNldHRpbmdGb3Iob2JqZWN0LG9iamVjdExldmVsS2V5LGRlZmF1bHRWYWx1ZSl7Y29uc3Qgb2JqZWN0S2V5PW9iamVjdC5nZXRTZXR0aW5nc0tleSgpO2lmKCFvYmplY3RLZXl8fCF0aGlzLm9iamVjdHNCeUtleV9bb2JqZWN0S2V5XSl7Y29uc3Qgc2V0dGluZ3M9dGhpcy5nZXRFcGhlbWVyYWxTZXR0aW5nc0Zvcl8ob2JqZWN0KTtjb25zdCBlcGhlbWVyYWxWYWx1ZT1zZXR0aW5nc1tvYmplY3RMZXZlbEtleV07aWYoZXBoZW1lcmFsVmFsdWUhPT11bmRlZmluZWQpe3JldHVybiBlcGhlbWVyYWxWYWx1ZTt9Ci1yZXR1cm4gZGVmYXVsdFZhbHVlO30KLWNvbnN0IHNldHRpbmdzPVNldHRpbmdzLmdldCgndHJhY2VfbW9kZWxfc2V0dGluZ3MnLHt9KTtpZighc2V0dGluZ3Nbb2JqZWN0S2V5XSl7c2V0dGluZ3Nbb2JqZWN0S2V5XT17fTt9Ci1jb25zdCB2YWx1ZT1zZXR0aW5nc1tvYmplY3RLZXldW29iamVjdExldmVsS2V5XTtpZih2YWx1ZSE9PXVuZGVmaW5lZCl7cmV0dXJuIHZhbHVlO30KLXJldHVybiBkZWZhdWx0VmFsdWU7fSxzZXRTZXR0aW5nRm9yKG9iamVjdCxvYmplY3RMZXZlbEtleSx2YWx1ZSl7Y29uc3Qgb2JqZWN0S2V5PW9iamVjdC5nZXRTZXR0aW5nc0tleSgpO2lmKCFvYmplY3RLZXl8fCF0aGlzLm9iamVjdHNCeUtleV9bb2JqZWN0S2V5XSl7dGhpcy5nZXRFcGhlbWVyYWxTZXR0aW5nc0Zvcl8ob2JqZWN0KVtvYmplY3RMZXZlbEtleV09dmFsdWU7cmV0dXJuO30KLWNvbnN0IHNldHRpbmdzPVNldHRpbmdzLmdldCgndHJhY2VfbW9kZWxfc2V0dGluZ3MnLHt9KTtpZighc2V0dGluZ3Nbb2JqZWN0S2V5XSl7c2V0dGluZ3Nbb2JqZWN0S2V5XT17fTt9Ci1pZihzZXR0aW5nc1tvYmplY3RLZXldW29iamVjdExldmVsS2V5XT09PXZhbHVlKXtyZXR1cm47fQotc2V0dGluZ3Nbb2JqZWN0S2V5XVtvYmplY3RMZXZlbEtleV09dmFsdWU7U2V0dGluZ3Muc2V0KCd0cmFjZV9tb2RlbF9zZXR0aW5ncycsc2V0dGluZ3MpO30sZ2V0RXBoZW1lcmFsU2V0dGluZ3NGb3JfKG9iamVjdCl7aWYob2JqZWN0Lmd1aWQ9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignT25seSBvYmplY3RzIHdpdGggR1VJRHMgY2FuIGJlIHBlcnNpc3RlZCcpO30KLWlmKHRoaXMuZXBoZW1lcmFsU2V0dGluZ3NCeUdVSURfW29iamVjdC5ndWlkXT09PXVuZGVmaW5lZCl7dGhpcy5lcGhlbWVyYWxTZXR0aW5nc0J5R1VJRF9bb2JqZWN0Lmd1aWRdPXt9O30KLXJldHVybiB0aGlzLmVwaGVtZXJhbFNldHRpbmdzQnlHVUlEX1tvYmplY3QuZ3VpZF07fX07cmV0dXJue01vZGVsU2V0dGluZ3MsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBDb3VudGVyVHJhY2s9dHIudWkuYi5kZWZpbmUoJ2NvdW50ZXItdHJhY2snLHRyLnVpLnRyYWNrcy5DaGFydFRyYWNrKTtDb3VudGVyVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLkNoYXJ0VHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuQ2hhcnRUcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdjb3VudGVyLXRyYWNrJyk7fSxnZXQgY291bnRlcigpe3JldHVybiB0aGlzLmNoYXJ0O30sc2V0IGNvdW50ZXIoY291bnRlcil7dGhpcy5oZWFkaW5nPWNvdW50ZXIubmFtZSsnOiAnO3RoaXMuc2VyaWVzPUNvdW50ZXJUcmFjay5idWlsZENoYXJ0U2VyaWVzRnJvbUNvdW50ZXIoY291bnRlcik7dGhpcy5hdXRvU2V0QWxsQXhlcyh7ZXhwYW5kTWF4OnRydWV9KTt9LGdldE1vZGVsRXZlbnRGcm9tSXRlbShjaGFydFZhbHVlKXtyZXR1cm4gY2hhcnRWYWx1ZTt9fTtDb3VudGVyVHJhY2suYnVpbGRDaGFydFNlcmllc0Zyb21Db3VudGVyPWZ1bmN0aW9uKGNvdW50ZXIpe2NvbnN0IG51bVNlcmllcz1jb3VudGVyLnNlcmllcy5sZW5ndGg7Y29uc3QgdG90YWxzPWNvdW50ZXIudG90YWxzO2NvbnN0IHNlcmllc1lBeGlzPW5ldyB0ci51aS50cmFja3MuQ2hhcnRTZXJpZXNZQXhpcygwLHVuZGVmaW5lZCk7Y29uc3QgY2hhcnRTZXJpZXM9Y291bnRlci5zZXJpZXMubWFwKGZ1bmN0aW9uKHNlcmllcyxzZXJpZXNJbmRleCl7Y29uc3QgY2hhcnRQb2ludHM9c2VyaWVzLnNhbXBsZXMubWFwKGZ1bmN0aW9uKHNhbXBsZSxzYW1wbGVJbmRleCl7Y29uc3QgdG90YWw9dG90YWxzW3NhbXBsZUluZGV4Km51bVNlcmllcytzZXJpZXNJbmRleF07cmV0dXJuIG5ldyB0ci51aS50cmFja3MuQ2hhcnRQb2ludChzYW1wbGUsc2FtcGxlLnRpbWVzdGFtcCx0b3RhbCk7fSk7Y29uc3QgcmVuZGVyaW5nQ29uZmlnPXtjaGFydFR5cGU6dHIudWkudHJhY2tzLkNoYXJ0U2VyaWVzVHlwZS5BUkVBLGNvbG9ySWQ6c2VyaWVzLmNvbG9yfTtyZXR1cm4gbmV3IHRyLnVpLnRyYWNrcy5DaGFydFNlcmllcyhjaGFydFBvaW50cyxzZXJpZXNZQXhpcyxyZW5kZXJpbmdDb25maWcpO30pO2NoYXJ0U2VyaWVzLnJldmVyc2UoKTtyZXR1cm4gY2hhcnRTZXJpZXM7fTtyZXR1cm57Q291bnRlclRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3Qgc3RhcnRDb21wYXJlPWZ1bmN0aW9uKHgseSl7cmV0dXJuIHguc3RhcnQteS5zdGFydDt9O2NvbnN0IEZyYW1lVHJhY2s9dHIudWkuYi5kZWZpbmUoJ2ZyYW1lLXRyYWNrJyx0ci51aS50cmFja3MuTGV0dGVyRG90VHJhY2spO0ZyYW1lVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLkxldHRlckRvdFRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLkxldHRlckRvdFRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO3RoaXMuaGVhZGluZz0nRnJhbWVzJzt0aGlzLmZyYW1lc189dW5kZWZpbmVkO3RoaXMuaXRlbXM9dW5kZWZpbmVkO30sZ2V0IGZyYW1lcygpe3JldHVybiB0aGlzLmZyYW1lc187fSxzZXQgZnJhbWVzKGZyYW1lcyl7dGhpcy5mcmFtZXNfPWZyYW1lcztpZihmcmFtZXM9PT11bmRlZmluZWQpcmV0dXJuO3RoaXMuZnJhbWVzXz10aGlzLmZyYW1lc18uc2xpY2UoKTt0aGlzLmZyYW1lc18uc29ydChzdGFydENvbXBhcmUpO3RoaXMuaXRlbXM9dGhpcy5mcmFtZXNfLm1hcChmdW5jdGlvbihmcmFtZSl7cmV0dXJuIG5ldyBGcmFtZURvdChmcmFtZSk7fSk7fX07ZnVuY3Rpb24gRnJhbWVEb3QoZnJhbWUpe3RyLnVpLnRyYWNrcy5MZXR0ZXJEb3QuY2FsbCh0aGlzLGZyYW1lLCdGJyxmcmFtZS5jb2xvcklkLGZyYW1lLnN0YXJ0KTt9Ci1GcmFtZURvdC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuTGV0dGVyRG90LnByb3RvdHlwZX07cmV0dXJue0ZyYW1lVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBNdWx0aVJvd1RyYWNrPXRyLnVpLmIuZGVmaW5lKCdtdWx0aS1yb3ctdHJhY2snLHRyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjayk7TXVsdGlSb3dUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7dGhpcy50b29sdGlwXz0nJzt0aGlzLmhlYWRpbmdfPScnO3RoaXMuZ3JvdXBpbmdTb3VyY2VfPXVuZGVmaW5lZDt0aGlzLml0ZW1zVG9Hcm91cF89dW5kZWZpbmVkO3RoaXMuZGVmYXVsdFRvQ29sbGFwc2VkV2hlblN1YlJvd0NvdW50TW9yZVRoYW49MTt0aGlzLmN1cnJlbnRTdWJSb3dzV2l0aEhlYWRpbmdzXz11bmRlZmluZWQ7dGhpcy5leHBhbmRlZF89dHJ1ZTt9LGdldCBpdGVtc1RvR3JvdXAoKXtyZXR1cm4gdGhpcy5pdGVtc1RvR3JvdXBfO30sc2V0SXRlbXNUb0dyb3VwKGl0ZW1zVG9Hcm91cCxvcHRfZ3JvdXBpbmdTb3VyY2Upe3RoaXMuaXRlbXNUb0dyb3VwXz1pdGVtc1RvR3JvdXA7dGhpcy5ncm91cGluZ1NvdXJjZV89b3B0X2dyb3VwaW5nU291cmNlO3RoaXMuY3VycmVudFN1YlJvd3NXaXRoSGVhZGluZ3NfPXVuZGVmaW5lZDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO3RoaXMudXBkYXRlRXhwYW5kZWRTdGF0ZUZyb21Hcm91cGluZ1NvdXJjZV8oKTt9LHNldFByZWJ1aWx0U3ViUm93cyhncm91cGluZ1NvdXJjZSxzdWJSb3dzV2l0aEhlYWRpbmdzKXt0aGlzLml0ZW1zVG9Hcm91cF89dW5kZWZpbmVkO3RoaXMuZ3JvdXBpbmdTb3VyY2VfPWdyb3VwaW5nU291cmNlO3RoaXMuY3VycmVudFN1YlJvd3NXaXRoSGVhZGluZ3NfPXN1YlJvd3NXaXRoSGVhZGluZ3M7dGhpcy51cGRhdGVDb250ZW50c18oKTt0aGlzLnVwZGF0ZUV4cGFuZGVkU3RhdGVGcm9tR3JvdXBpbmdTb3VyY2VfKCk7fSxnZXQgaGVhZGluZygpe3JldHVybiB0aGlzLmhlYWRpbmdfO30sc2V0IGhlYWRpbmcoaCl7dGhpcy5oZWFkaW5nXz1oO3RoaXMudXBkYXRlSGVhZGluZ0FuZFRvb2x0aXBfKCk7fSxnZXQgdG9vbHRpcCgpe3JldHVybiB0aGlzLnRvb2x0aXBfO30sc2V0IHRvb2x0aXAodCl7dGhpcy50b29sdGlwXz10O3RoaXMudXBkYXRlSGVhZGluZ0FuZFRvb2x0aXBfKCk7fSxnZXQgc3ViUm93cygpe3JldHVybiB0aGlzLmN1cnJlbnRTdWJSb3dzV2l0aEhlYWRpbmdzXy5tYXAoZWxlbT0+ZWxlbS5yb3cpO30sZ2V0IGhhc1Zpc2libGVDb250ZW50KCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjA7fSxnZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRlZF87fSxzZXQgZXhwYW5kZWQoZXhwYW5kZWQpe2lmKHRoaXMuZXhwYW5kZWRfPT09ZXhwYW5kZWQpcmV0dXJuO3RoaXMuZXhwYW5kZWRfPWV4cGFuZGVkO3RoaXMuZXhwYW5kZWRTdGF0ZUNoYW5nZWRfKCk7fSxvbkhlYWRpbmdDbGlja2VkXyhlKXtpZih0aGlzLnN1YlJvd3MubGVuZ3RoPD0xKXJldHVybjt0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkO2lmKHRoaXMuZ3JvdXBpbmdTb3VyY2VfKXtjb25zdCBtb2RlbFNldHRpbmdzPW5ldyB0ci5tb2RlbC5Nb2RlbFNldHRpbmdzKHRoaXMuZ3JvdXBpbmdTb3VyY2VfLm1vZGVsKTttb2RlbFNldHRpbmdzLnNldFNldHRpbmdGb3IodGhpcy5ncm91cGluZ1NvdXJjZV8sJ2V4cGFuZGVkJyx0aGlzLmV4cGFuZGVkKTt9Ci1lLnN0b3BQcm9wYWdhdGlvbigpO30sdXBkYXRlRXhwYW5kZWRTdGF0ZUZyb21Hcm91cGluZ1NvdXJjZV8oKXtpZih0aGlzLmdyb3VwaW5nU291cmNlXyl7Y29uc3QgbnVtU3ViUm93cz10aGlzLnN1YlJvd3MubGVuZ3RoO2NvbnN0IG1vZGVsU2V0dGluZ3M9bmV3IHRyLm1vZGVsLk1vZGVsU2V0dGluZ3ModGhpcy5ncm91cGluZ1NvdXJjZV8ubW9kZWwpO2lmKG51bVN1YlJvd3M+MSl7bGV0IGRlZmF1bHRFeHBhbmRlZDtpZihudW1TdWJSb3dzPnRoaXMuZGVmYXVsdFRvQ29sbGFwc2VkV2hlblN1YlJvd0NvdW50TW9yZVRoYW4pe2RlZmF1bHRFeHBhbmRlZD1mYWxzZTt9ZWxzZXtkZWZhdWx0RXhwYW5kZWQ9dHJ1ZTt9Ci10aGlzLmV4cGFuZGVkPW1vZGVsU2V0dGluZ3MuZ2V0U2V0dGluZ0Zvcih0aGlzLmdyb3VwaW5nU291cmNlXywnZXhwYW5kZWQnLGRlZmF1bHRFeHBhbmRlZCk7fWVsc2V7dGhpcy5leHBhbmRlZD11bmRlZmluZWQ7fX19LGV4cGFuZGVkU3RhdGVDaGFuZ2VkXygpe2NvbnN0IG1pbkg9TWF0aC5tYXgoMixNYXRoLmNlaWwoMTgvdGhpcy5jaGlsZHJlbi5sZW5ndGgpKTtjb25zdCBoPSh0aGlzLmV4cGFuZGVkXz8xODptaW5IKSsncHgnO2ZvcihsZXQgaT0wO2k8dGhpcy5jaGlsZHJlbi5sZW5ndGg7aSsrKXt0aGlzLmNoaWxkcmVuW2ldLmhlaWdodD1oO2lmKGk9PT0wKXt0aGlzLmNoaWxkcmVuW2ldLmFycm93VmlzaWJsZT10cnVlO30KLXRoaXMuY2hpbGRyZW5baV0uZXhwYW5kZWQ9dGhpcy5leHBhbmRlZDt9Ci1pZih0aGlzLmNoaWxkcmVuLmxlbmd0aD09PTEpe3RoaXMuY2hpbGRyZW5bMF0uZXhwYW5kZWQ9dHJ1ZTt0aGlzLmNoaWxkcmVuWzBdLmFycm93VmlzaWJsZT1mYWxzZTt9fSx1cGRhdGVDb250ZW50c18oKXt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLnVwZGF0ZUNvbnRlbnRzXy5jYWxsKHRoaXMpO3RoaXMuZGV0YWNoKCk7aWYodGhpcy5jdXJyZW50U3ViUm93c1dpdGhIZWFkaW5nc189PT11bmRlZmluZWQpe2lmKHRoaXMuaXRlbXNUb0dyb3VwXz09PXVuZGVmaW5lZCl7cmV0dXJuO30KLWNvbnN0IHN1YlJvd3M9dGhpcy5idWlsZFN1YlJvd3NfKHRoaXMuaXRlbXNUb0dyb3VwXyk7dGhpcy5jdXJyZW50U3ViUm93c1dpdGhIZWFkaW5nc189c3ViUm93cy5tYXAocm93PT57cmV0dXJue3JvdyxoZWFkaW5nOnVuZGVmaW5lZH07fSk7fQotaWYodGhpcy5jdXJyZW50U3ViUm93c1dpdGhIZWFkaW5nc189PT11bmRlZmluZWR8fHRoaXMuY3VycmVudFN1YlJvd3NXaXRoSGVhZGluZ3NfLmxlbmd0aD09PTApe3JldHVybjt9Ci1jb25zdCBhZGRTdWJUcmFja0V4PShpdGVtcyxvcHRfaGVhZGluZyk9Pntjb25zdCB0cmFjaz10aGlzLmFkZFN1YlRyYWNrXyhpdGVtcyk7aWYob3B0X2hlYWRpbmchPT11bmRlZmluZWQpe3RyYWNrLmhlYWRpbmc9b3B0X2hlYWRpbmc7fQotdHJhY2suYWRkRXZlbnRMaXN0ZW5lcignaGVhZGluZy1jbGlja2VkJyx0aGlzLm9uSGVhZGluZ0NsaWNrZWRfLmJpbmQodGhpcykpO307aWYodGhpcy5jdXJyZW50U3ViUm93c1dpdGhIZWFkaW5nc19bMF0uaGVhZGluZyE9PXVuZGVmaW5lZCYmdGhpcy5jdXJyZW50U3ViUm93c1dpdGhIZWFkaW5nc19bMF0uaGVhZGluZyE9PXRoaXMuaGVhZGluZ18pe2FkZFN1YlRyYWNrRXgoW10pO30KLWZvcihjb25zdCBzdWJSb3dXaXRoSGVhZGluZyBvZiB0aGlzLmN1cnJlbnRTdWJSb3dzV2l0aEhlYWRpbmdzXyl7Y29uc3Qgc3ViUm93PXN1YlJvd1dpdGhIZWFkaW5nLnJvdztpZihzdWJSb3cubGVuZ3RoPT09MCl7Y29udGludWU7fQotYWRkU3ViVHJhY2tFeChzdWJSb3csc3ViUm93V2l0aEhlYWRpbmcuaGVhZGluZyk7fQotdGhpcy51cGRhdGVIZWFkaW5nQW5kVG9vbHRpcF8oKTt0aGlzLmV4cGFuZGVkU3RhdGVDaGFuZ2VkXygpO30sdXBkYXRlSGVhZGluZ0FuZFRvb2x0aXBfKCl7aWYoIVBvbHltZXIuZG9tKHRoaXMpLmZpcnN0Q2hpbGQpcmV0dXJuO1BvbHltZXIuZG9tKHRoaXMpLmZpcnN0Q2hpbGQuaGVhZGluZz10aGlzLmhlYWRpbmdfO1BvbHltZXIuZG9tKHRoaXMpLmZpcnN0Q2hpbGQudG9vbHRpcD10aGlzLnRvb2x0aXBfO30sYnVpbGRTdWJSb3dzXyhpdGVtc1RvR3JvdXApe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxhZGRTdWJUcmFja18oc3ViUm93SXRlbXMpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxhcmVBcnJheUNvbnRlbnRzU2FtZV8oYSxiKXtpZighYXx8IWIpcmV0dXJuIGZhbHNlO2lmKCFhLmxlbmd0aHx8IWIubGVuZ3RoKXJldHVybiBmYWxzZTtpZihhLmxlbmd0aCE9PWIubGVuZ3RoKXJldHVybiBmYWxzZTtmb3IobGV0IGk9MDtpPGEubGVuZ3RoOysraSl7aWYoYVtpXSE9PWJbaV0pcmV0dXJuIGZhbHNlO30KLXJldHVybiB0cnVlO319O3JldHVybntNdWx0aVJvd1RyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgT2JqZWN0SW5zdGFuY2VHcm91cFRyYWNrPXRyLnVpLmIuZGVmaW5lKCdvYmplY3QtaW5zdGFuY2UtZ3JvdXAtdHJhY2snLHRyLnVpLnRyYWNrcy5NdWx0aVJvd1RyYWNrKTtPYmplY3RJbnN0YW5jZUdyb3VwVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLk11bHRpUm93VHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuTXVsdGlSb3dUcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdvYmplY3QtaW5zdGFuY2UtZ3JvdXAtdHJhY2snKTt0aGlzLm9iamVjdEluc3RhbmNlc189dW5kZWZpbmVkO30sZ2V0IG9iamVjdEluc3RhbmNlcygpe3JldHVybiB0aGlzLml0ZW1zVG9Hcm91cDt9LHNldCBvYmplY3RJbnN0YW5jZXMob2JqZWN0SW5zdGFuY2VzKXt0aGlzLnNldEl0ZW1zVG9Hcm91cChvYmplY3RJbnN0YW5jZXMpO30sYWRkU3ViVHJhY2tfKG9iamVjdEluc3RhbmNlcyl7Y29uc3QgaGFzTXVsdGlwbGVSb3dzPXRoaXMuc3ViUm93cy5sZW5ndGg+MTtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLk9iamVjdEluc3RhbmNlVHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2sub2JqZWN0SW5zdGFuY2VzPW9iamVjdEluc3RhbmNlcztQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7cmV0dXJuIHRyYWNrO30sYnVpbGRTdWJSb3dzXyhvYmplY3RJbnN0YW5jZXMpe29iamVjdEluc3RhbmNlcy5zb3J0KGZ1bmN0aW9uKHgseSl7cmV0dXJuIHguY3JlYXRpb25Ucy15LmNyZWF0aW9uVHM7fSk7Y29uc3Qgc3ViUm93cz1bXTtmb3IobGV0IGk9MDtpPG9iamVjdEluc3RhbmNlcy5sZW5ndGg7aSsrKXtjb25zdCBvYmplY3RJbnN0YW5jZT1vYmplY3RJbnN0YW5jZXNbaV07bGV0IGZvdW5kPWZhbHNlO2ZvcihsZXQgaj0wO2o8c3ViUm93cy5sZW5ndGg7aisrKXtjb25zdCBzdWJSb3c9c3ViUm93c1tqXTtjb25zdCBsYXN0SXRlbUluU3ViUm93PXN1YlJvd1tzdWJSb3cubGVuZ3RoLTFdO2lmKG9iamVjdEluc3RhbmNlLmNyZWF0aW9uVHM+PWxhc3RJdGVtSW5TdWJSb3cuZGVsZXRpb25Ucyl7Zm91bmQ9dHJ1ZTtzdWJSb3cucHVzaChvYmplY3RJbnN0YW5jZSk7YnJlYWs7fX0KLWlmKCFmb3VuZCl7c3ViUm93cy5wdXNoKFtvYmplY3RJbnN0YW5jZV0pO319Ci1yZXR1cm4gc3ViUm93czt9LHVwZGF0ZUhlYWRpbmdBbmRUb29sdGlwXygpe319O3JldHVybntPYmplY3RJbnN0YW5jZUdyb3VwVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBBc3luY1NsaWNlR3JvdXBUcmFjaz10ci51aS5iLmRlZmluZSgnYXN5bmMtc2xpY2UtZ3JvdXAtdHJhY2snLHRyLnVpLnRyYWNrcy5NdWx0aVJvd1RyYWNrKTtBc3luY1NsaWNlR3JvdXBUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuTXVsdGlSb3dUcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5NdWx0aVJvd1RyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2FzeW5jLXNsaWNlLWdyb3VwLXRyYWNrJyk7dGhpcy5ncm91cF89dW5kZWZpbmVkO30sYWRkU3ViVHJhY2tfKHNsaWNlcyl7Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5TbGljZVRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLnNsaWNlcz1zbGljZXM7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodHJhY2spO3RyYWNrLmFzeW5jU3R5bGU9dHJ1ZTtyZXR1cm4gdHJhY2s7fSxnZXQgZ3JvdXAoKXtyZXR1cm4gdGhpcy5ncm91cF87fSxzZXQgZ3JvdXAoZ3JvdXApe3RoaXMuZ3JvdXBfPWdyb3VwO3RoaXMuYnVpbGRBbmRTZXRTdWJSb3dzXygpO30sZ2V0IGV2ZW50Q29udGFpbmVyKCl7cmV0dXJuIHRoaXMuZ3JvdXA7fSxhZGRDb250YWluZXJzVG9UcmFja01hcChjb250YWluZXJUb1RyYWNrTWFwKXt0ci51aS50cmFja3MuTXVsdGlSb3dUcmFjay5wcm90b3R5cGUuYWRkQ29udGFpbmVyc1RvVHJhY2tNYXAuYXBwbHkodGhpcyxhcmd1bWVudHMpO2NvbnRhaW5lclRvVHJhY2tNYXAuYWRkQ29udGFpbmVyKHRoaXMuZ3JvdXAsdGhpcyk7fSxidWlsZEFuZFNldFN1YlJvd3NfKCl7aWYodGhpcy5ncm91cF8udmlld1N1Ykdyb3Vwcy5sZW5ndGg8PTEpe2NvbnN0IHJvd3M9Z3JvdXBBc3luY1NsaWNlc0ludG9TdWJSb3dzKHRoaXMuZ3JvdXBfLnNsaWNlcyk7Y29uc3Qgcm93c1dpdGhIZWFkaW5ncz1yb3dzLm1hcChyb3c9PntyZXR1cm57cm93LGhlYWRpbmc6dW5kZWZpbmVkfTt9KTt0aGlzLnNldFByZWJ1aWx0U3ViUm93cyh0aGlzLmdyb3VwXyxyb3dzV2l0aEhlYWRpbmdzKTtyZXR1cm47fQotY29uc3Qgcm93c1dpdGhIZWFkaW5ncz1bXTtmb3IoY29uc3Qgc3ViR3JvdXAgb2YgdGhpcy5ncm91cF8udmlld1N1Ykdyb3Vwcyl7Y29uc3Qgc3ViR3JvdXBSb3dzPWdyb3VwQXN5bmNTbGljZXNJbnRvU3ViUm93cyhzdWJHcm91cC5zbGljZXMpO2lmKHN1Ykdyb3VwUm93cy5sZW5ndGg9PT0wKXtjb250aW51ZTt9Ci1mb3IobGV0IGk9MDtpPHN1Ykdyb3VwUm93cy5sZW5ndGg7aSsrKXtyb3dzV2l0aEhlYWRpbmdzLnB1c2goe3JvdzpzdWJHcm91cFJvd3NbaV0saGVhZGluZzooaT09PTA/c3ViR3JvdXAudGl0bGU6JycpfSk7fX0KLXRoaXMuc2V0UHJlYnVpbHRTdWJSb3dzKHRoaXMuZ3JvdXBfLHJvd3NXaXRoSGVhZGluZ3MpO319O2Z1bmN0aW9uIHN0cmlwU2xpY2VfKHNsaWNlKXtpZihzbGljZS5zdWJTbGljZXMhPT11bmRlZmluZWQmJnNsaWNlLnN1YlNsaWNlcy5sZW5ndGg9PT0xKXtjb25zdCBzdWJTbGljZT1zbGljZS5zdWJTbGljZXNbMF07aWYodHIuYi5tYXRoLmFwcHJveGltYXRlbHkoc3ViU2xpY2Uuc3RhcnQsc2xpY2Uuc3RhcnQsMSkmJnRyLmIubWF0aC5hcHByb3hpbWF0ZWx5KHN1YlNsaWNlLmR1cmF0aW9uLHNsaWNlLmR1cmF0aW9uLDEpKXtyZXR1cm4gc3ViU2xpY2U7fX0KLXJldHVybiBzbGljZTt9Ci1mdW5jdGlvbiBtYWtlTGV2ZWxTdWJSb3dzXyhzbGljZXMpe2NvbnN0IHJvd3M9W107Y29uc3QgcHV0U2xpY2U9KHNsaWNlLGxldmVsKT0+e3doaWxlKHJvd3MubGVuZ3RoPD1sZXZlbCl7cm93cy5wdXNoKFtdKTt9Ci1yb3dzW2xldmVsXS5wdXNoKHNsaWNlKTt9O2NvbnN0IHB1dFNsaWNlUmVjdXJzaXZlbHk9KHNsaWNlLGxldmVsKT0+e3B1dFNsaWNlKHNsaWNlLGxldmVsKTtpZihzbGljZS5zdWJTbGljZXMhPT11bmRlZmluZWQpe2Zvcihjb25zdCBzdWJTbGljZSBvZiBzbGljZS5zdWJTbGljZXMpe3B1dFNsaWNlUmVjdXJzaXZlbHkoc3ViU2xpY2UsbGV2ZWwrMSk7fX19O2Zvcihjb25zdCBzbGljZSBvZiBzbGljZXMpe3B1dFNsaWNlUmVjdXJzaXZlbHkoc3RyaXBTbGljZV8oc2xpY2UpLDApO30KLXJldHVybiByb3dzO30KLWZ1bmN0aW9uIGdyb3VwQXN5bmNTbGljZXNJbnRvU3ViUm93cyhzbGljZXMsb3B0X3NraXBTb3J0KXtpZighb3B0X3NraXBTb3J0KXtzbGljZXMuc29ydCgoeCx5KT0+eC5zdGFydC15LnN0YXJ0KTt9Ci1jb25zdCByb3dzPVtdO2xldCBzbGljZXNMZWZ0PXNsaWNlczt3aGlsZShzbGljZXNMZWZ0Lmxlbmd0aCE9PTApe2NvbnN0IGZpdD1bXTtjb25zdCB1bmZpdD1bXTtsZXQgbGV2ZWxFbmRUaW1lPS0xO2Zvcihjb25zdCBzbGljZSBvZiBzbGljZXNMZWZ0KXtpZihzbGljZS5zdGFydD49bGV2ZWxFbmRUaW1lKXtsZXZlbEVuZFRpbWU9c2xpY2UuZW5kO2ZpdC5wdXNoKHNsaWNlKTt9ZWxzZXt1bmZpdC5wdXNoKHNsaWNlKTt9fQotcm93cy5wdXNoKC4uLm1ha2VMZXZlbFN1YlJvd3NfKGZpdCkpO3NsaWNlc0xlZnQ9dW5maXQ7fQotcmV0dXJuIHJvd3M7fQotcmV0dXJue0FzeW5jU2xpY2VHcm91cFRyYWNrLGdyb3VwQXN5bmNTbGljZXNJbnRvU3ViUm93cyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IFNhbXBsZVRyYWNrPXRyLnVpLmIuZGVmaW5lKCdzYW1wbGUtdHJhY2snLHRyLnVpLnRyYWNrcy5SZWN0VHJhY2spO1NhbXBsZVRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5SZWN0VHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuUmVjdFRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO30sZ2V0IHNhbXBsZXMoKXtyZXR1cm4gdGhpcy5yZWN0czt9LHNldCBzYW1wbGVzKHNhbXBsZXMpe3RoaXMucmVjdHM9c2FtcGxlczt9fTtyZXR1cm57U2FtcGxlVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBTbGljZUdyb3VwVHJhY2s9dHIudWkuYi5kZWZpbmUoJ3NsaWNlLWdyb3VwLXRyYWNrJyx0ci51aS50cmFja3MuTXVsdGlSb3dUcmFjayk7U2xpY2VHcm91cFRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5NdWx0aVJvd1RyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLk11bHRpUm93VHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgnc2xpY2UtZ3JvdXAtdHJhY2snKTt0aGlzLmdyb3VwXz11bmRlZmluZWQ7dGhpcy5kZWZhdWx0VG9Db2xsYXBzZWRXaGVuU3ViUm93Q291bnRNb3JlVGhhbj0xMDA7fSxhZGRTdWJUcmFja18oc2xpY2VzKXtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLlNsaWNlVHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2suc2xpY2VzPXNsaWNlcztQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7cmV0dXJuIHRyYWNrO30sZ2V0IGdyb3VwKCl7cmV0dXJuIHRoaXMuZ3JvdXBfO30sc2V0IGdyb3VwKGdyb3VwKXt0aGlzLmdyb3VwXz1ncm91cDt0aGlzLnNldEl0ZW1zVG9Hcm91cCh0aGlzLmdyb3VwXy5zbGljZXMsdGhpcy5ncm91cF8pO30sZ2V0IGV2ZW50Q29udGFpbmVyKCl7cmV0dXJuIHRoaXMuZ3JvdXA7fSxhZGRDb250YWluZXJzVG9UcmFja01hcChjb250YWluZXJUb1RyYWNrTWFwKXt0ci51aS50cmFja3MuTXVsdGlSb3dUcmFjay5wcm90b3R5cGUuYWRkQ29udGFpbmVyc1RvVHJhY2tNYXAuYXBwbHkodGhpcyxhcmd1bWVudHMpO2NvbnRhaW5lclRvVHJhY2tNYXAuYWRkQ29udGFpbmVyKHRoaXMuZ3JvdXAsdGhpcyk7fSxidWlsZFN1YlJvd3NfKHNsaWNlcyl7Y29uc3QgcHJlY2lzaW9uVW5pdD10aGlzLmdyb3VwLm1vZGVsLmludHJpbnNpY1RpbWVVbml0O2lmKCFzbGljZXMubGVuZ3RoKXJldHVybltdO2NvbnN0IG9wcz1bXTtmb3IobGV0IGk9MDtpPHNsaWNlcy5sZW5ndGg7aSsrKXtpZihzbGljZXNbaV0uc3ViU2xpY2VzKXtzbGljZXNbaV0uc3ViU2xpY2VzLnNwbGljZSgwLHNsaWNlc1tpXS5zdWJTbGljZXMubGVuZ3RoKTt9Ci1vcHMucHVzaChpKTt9Ci1vcHMuc29ydChmdW5jdGlvbihpeCxpeSl7Y29uc3QgeD1zbGljZXNbaXhdO2NvbnN0IHk9c2xpY2VzW2l5XTtpZih4LnN0YXJ0IT09eS5zdGFydClyZXR1cm4geC5zdGFydC15LnN0YXJ0O3JldHVybiBpeC1peTt9KTtjb25zdCBzdWJSb3dzPVtbXV07dGhpcy5iYWRTbGljZXNfPVtdO2ZvcihsZXQgaT0wO2k8b3BzLmxlbmd0aDtpKyspe2NvbnN0IG9wPW9wc1tpXTtjb25zdCBzbGljZT1zbGljZXNbb3BdO2xldCBpbnNlcnRlZD1mYWxzZTtmb3IobGV0IGo9c3ViUm93cy5sZW5ndGgtMTtqPj0wO2otLSl7aWYoc3ViUm93c1tqXS5sZW5ndGg9PT0wKWNvbnRpbnVlO2NvbnN0IGluc2VydGVkU2xpY2U9c3ViUm93c1tqXVtzdWJSb3dzW2pdLmxlbmd0aC0xXTtpZihzbGljZS5zdGFydDxpbnNlcnRlZFNsaWNlLnN0YXJ0KXt0aGlzLmJhZFNsaWNlc18ucHVzaChzbGljZSk7aW5zZXJ0ZWQ9dHJ1ZTt9Ci1pZihpbnNlcnRlZFNsaWNlLmJvdW5kcyhzbGljZSxwcmVjaXNpb25Vbml0KSl7d2hpbGUoc3ViUm93cy5sZW5ndGg8PWorMSl7c3ViUm93cy5wdXNoKFtdKTt9Ci1zdWJSb3dzW2orMV0ucHVzaChzbGljZSk7aWYoaW5zZXJ0ZWRTbGljZS5zdWJTbGljZXMpe2luc2VydGVkU2xpY2Uuc3ViU2xpY2VzLnB1c2goc2xpY2UpO30KLWluc2VydGVkPXRydWU7YnJlYWs7fX0KLWlmKGluc2VydGVkKWNvbnRpbnVlO3N1YlJvd3NbMF0ucHVzaChzbGljZSk7fQotcmV0dXJuIHN1YlJvd3M7fX07cmV0dXJue1NsaWNlR3JvdXBUcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IFRocmVhZFRyYWNrPXRyLnVpLmIuZGVmaW5lKCd0aHJlYWQtdHJhY2snLHRyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjayk7VGhyZWFkVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ3RocmVhZC10cmFjaycpO3RoaXMuaGVhZGluZ189ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1oZWFkaW5nJyk7fSxnZXQgdGhyZWFkKCl7cmV0dXJuIHRoaXMudGhyZWFkXzt9LHNldCB0aHJlYWQodGhyZWFkKXt0aGlzLnRocmVhZF89dGhyZWFkO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgaGFzVmlzaWJsZUNvbnRlbnQoKXtyZXR1cm4gdGhpcy50cmFja3NfLmxlbmd0aD4wO30sZ2V0IGhhc1NsaWNlcygpe3JldHVybiB0aGlzLnRocmVhZF8uYXN5bmNTbGljZUdyb3VwLmxlbmd0aD4wfHx0aGlzLnRocmVhZF8uc2xpY2VHcm91cC5sZW5ndGg+MDt9LGdldCBoYXNUaW1lU2xpY2VzKCl7cmV0dXJuIHRoaXMudGhyZWFkXy50aW1lU2xpY2VzO30sZ2V0IGV2ZW50Q29udGFpbmVyKCl7cmV0dXJuIHRoaXMudGhyZWFkO30sYWRkQ29udGFpbmVyc1RvVHJhY2tNYXAoY29udGFpbmVyVG9UcmFja01hcCl7dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZS5hZGRDb250YWluZXJzVG9UcmFja01hcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Y29udGFpbmVyVG9UcmFja01hcC5hZGRDb250YWluZXIodGhpcy50aHJlYWQsdGhpcyk7fSx1cGRhdGVDb250ZW50c18oKXt0aGlzLmRldGFjaCgpO2lmKCF0aGlzLnRocmVhZF8pcmV0dXJuO3RoaXMuaGVhZGluZ18uaGVhZGluZz10aGlzLnRocmVhZF8udXNlckZyaWVuZGx5TmFtZTt0aGlzLmhlYWRpbmdfLnRvb2x0aXA9dGhpcy50aHJlYWRfLnVzZXJGcmllbmRseURldGFpbHM7aWYodGhpcy50aHJlYWRfLmFzeW5jU2xpY2VHcm91cC5sZW5ndGgpe3RoaXMuYXBwZW5kQXN5bmNTbGljZVRyYWNrc18oKTt9Ci10aGlzLmFwcGVuZFRocmVhZFNhbXBsZXNUcmFja3NfKCk7bGV0IG5lZWRzSGVhZGluZz1mYWxzZTtpZih0aGlzLnRocmVhZF8udGltZVNsaWNlcyl7Y29uc3QgdGltZVNsaWNlc1RyYWNrPW5ldyB0ci51aS50cmFja3MuU2xpY2VUcmFjayh0aGlzLnZpZXdwb3J0KTt0aW1lU2xpY2VzVHJhY2suaGVhZGluZz0nJzt0aW1lU2xpY2VzVHJhY2suaGVpZ2h0PXRyLnVpLmIuVEhJTl9TTElDRV9IRUlHSFQrJ3B4Jzt0aW1lU2xpY2VzVHJhY2suc2xpY2VzPXRoaXMudGhyZWFkXy50aW1lU2xpY2VzO2lmKHRpbWVTbGljZXNUcmFjay5oYXNWaXNpYmxlQ29udGVudCl7bmVlZHNIZWFkaW5nPXRydWU7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGltZVNsaWNlc1RyYWNrKTt9fQotaWYodGhpcy50aHJlYWRfLnNsaWNlR3JvdXAubGVuZ3RoKXtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLlNsaWNlR3JvdXBUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay5oZWFkaW5nPXRoaXMudGhyZWFkXy51c2VyRnJpZW5kbHlOYW1lO3RyYWNrLnRvb2x0aXA9dGhpcy50aHJlYWRfLnVzZXJGcmllbmRseURldGFpbHM7dHJhY2suZ3JvdXA9dGhpcy50aHJlYWRfLnNsaWNlR3JvdXA7aWYodHJhY2suaGFzVmlzaWJsZUNvbnRlbnQpe25lZWRzSGVhZGluZz1mYWxzZTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7fX0KLWlmKG5lZWRzSGVhZGluZyl7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5oZWFkaW5nXyk7fX0sYXBwZW5kQXN5bmNTbGljZVRyYWNrc18oKXtjb25zdCBzdWJHcm91cHM9dGhpcy50aHJlYWRfLmFzeW5jU2xpY2VHcm91cC52aWV3U3ViR3JvdXBzO3N1Ykdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uKHN1Ykdyb3VwKXtjb25zdCBhc3luY1RyYWNrPW5ldyB0ci51aS50cmFja3MuQXN5bmNTbGljZUdyb3VwVHJhY2sodGhpcy52aWV3cG9ydCk7YXN5bmNUcmFjay5ncm91cD1zdWJHcm91cDthc3luY1RyYWNrLmhlYWRpbmc9c3ViR3JvdXAudGl0bGU7aWYoYXN5bmNUcmFjay5oYXNWaXNpYmxlQ29udGVudCl7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQoYXN5bmNUcmFjayk7fX0sdGhpcyk7fSxhcHBlbmRUaHJlYWRTYW1wbGVzVHJhY2tzXygpe2NvbnN0IHRocmVhZFNhbXBsZXM9dGhpcy50aHJlYWRfLnNhbXBsZXM7aWYodGhyZWFkU2FtcGxlcz09PXVuZGVmaW5lZHx8dGhyZWFkU2FtcGxlcy5sZW5ndGg9PT0wKXtyZXR1cm47fQotY29uc3Qgc2FtcGxlc0J5VGl0bGU9e307dGhyZWFkU2FtcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHNhbXBsZSl7aWYoc2FtcGxlc0J5VGl0bGVbc2FtcGxlLnRpdGxlXT09PXVuZGVmaW5lZCl7c2FtcGxlc0J5VGl0bGVbc2FtcGxlLnRpdGxlXT1bXTt9Ci1zYW1wbGVzQnlUaXRsZVtzYW1wbGUudGl0bGVdLnB1c2goc2FtcGxlKTt9KTtjb25zdCBzYW1wbGVUaXRsZXM9T2JqZWN0LmtleXMoc2FtcGxlc0J5VGl0bGUpO3NhbXBsZVRpdGxlcy5zb3J0KCk7c2FtcGxlVGl0bGVzLmZvckVhY2goZnVuY3Rpb24oc2FtcGxlVGl0bGUpe2NvbnN0IHNhbXBsZXM9c2FtcGxlc0J5VGl0bGVbc2FtcGxlVGl0bGVdO2NvbnN0IHNhbXBsZXNUcmFjaz1uZXcgdHIudWkudHJhY2tzLlNhbXBsZVRyYWNrKHRoaXMudmlld3BvcnQpO3NhbXBsZXNUcmFjay5ncm91cD10aGlzLnRocmVhZF87c2FtcGxlc1RyYWNrLnNhbXBsZXM9c2FtcGxlcztzYW1wbGVzVHJhY2suaGVhZGluZz10aGlzLnRocmVhZF8udXNlckZyaWVuZGx5TmFtZSsnOiAnKwotc2FtcGxlVGl0bGU7c2FtcGxlc1RyYWNrLnRvb2x0aXA9dGhpcy50aHJlYWRfLnVzZXJGcmllbmRseURldGFpbHM7c2FtcGxlc1RyYWNrLnNlbGVjdGlvbkdlbmVyYXRvcj1mdW5jdGlvbigpe2NvbnN0IHNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtmb3IobGV0IGk9MDtpPHNhbXBsZXNUcmFjay5zYW1wbGVzLmxlbmd0aDtpKyspe3NlbGVjdGlvbi5wdXNoKHNhbXBsZXNUcmFjay5zYW1wbGVzW2ldKTt9Ci1yZXR1cm4gc2VsZWN0aW9uO307UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQoc2FtcGxlc1RyYWNrKTt9LHRoaXMpO30sY29sbGFwc2VkRGlkQ2hhbmdlKGNvbGxhcHNlZCl7aWYoY29sbGFwc2VkKXtsZXQgaD1wYXJzZUludCh0aGlzLnRyYWNrc1swXS5oZWlnaHQpO2ZvcihsZXQgaT0wO2k8dGhpcy50cmFja3MubGVuZ3RoOysraSl7aWYoaD4yKXt0aGlzLnRyYWNrc1tpXS5oZWlnaHQ9TWF0aC5mbG9vcihoKSsncHgnO31lbHNle3RoaXMudHJhY2tzW2ldLnN0eWxlLmRpc3BsYXk9J25vbmUnO30KLWg9aCowLjU7fX1lbHNle2ZvcihsZXQgaT0wO2k8dGhpcy50cmFja3MubGVuZ3RoOysraSl7dGhpcy50cmFja3NbaV0uaGVpZ2h0PXRoaXMudHJhY2tzWzBdLmhlaWdodDt0aGlzLnRyYWNrc1tpXS5zdHlsZS5kaXNwbGF5PScnO319fX07cmV0dXJue1RocmVhZFRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgT3RoZXJUaHJlYWRzVHJhY2s9dHIudWkuYi5kZWZpbmUoJ290aGVyLXRocmVhZHMtdHJhY2snLHRyLnVpLnRyYWNrcy5PdGhlclRocmVhZHNUcmFjayk7Y29uc3QgU3BhY2luZ1RyYWNrPXRyLnVpLnRyYWNrcy5TcGFjaW5nVHJhY2s7T3RoZXJUaHJlYWRzVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO3RoaXMuaGVhZGVyXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLWhlYWRpbmcnKTt0aGlzLmhlYWRlcl8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMub25IZWFkZXJDbGlja18uYmluZCh0aGlzKSk7dGhpcy5oZWFkZXJfLmhlYWRpbmc9J090aGVyIFRocmVhZHMnO3RoaXMuaGVhZGVyXy50b29sdGlwPSdUaHJlYWRzIHdpdGggb25seSBzY2hlZHVsaW5nIGluZm9ybWF0aW9uJzt0aGlzLmhlYWRlcl8uYXJyb3dWaXNpYmxlPXRydWU7dGhpcy50aHJlYWRzXz1bXTt0aGlzLmV4cGFuZGVkPWZhbHNlO3RoaXMuY29sbGFwc2libGVfPXRydWU7fSxzZXQgdGhyZWFkcyh0aHJlYWRzKXt0aGlzLnRocmVhZHNfPXRocmVhZHM7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHNldCBjb2xsYXBzaWJsZShjb2xsYXBzaWJsZSl7dGhpcy5jb2xsYXBzaWJsZV89Y29sbGFwc2libGU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LG9uSGVhZGVyQ2xpY2tfKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7ZS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ7fSxnZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5oZWFkZXJfLmV4cGFuZGVkO30sc2V0IGV4cGFuZGVkKGV4cGFuZGVkKXtleHBhbmRlZD0hIWV4cGFuZGVkO2lmKHRoaXMuZXhwYW5kZWQ9PT1leHBhbmRlZClyZXR1cm47dGhpcy5oZWFkZXJfLmV4cGFuZGVkPWV4cGFuZGVkO3RoaXMudmlld3BvcnRfLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlQ29udGVudHNfKCl7dGhpcy5kZXRhY2goKTtpZih0aGlzLmNvbGxhcHNpYmxlXyl7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5oZWFkZXJfKTt9Ci1pZih0aGlzLmV4cGFuZGVkfHwhdGhpcy5jb2xsYXBzaWJsZV8pe2Zvcihjb25zdCB0aHJlYWQgb2YgdGhpcy50aHJlYWRzXyl7Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5UaHJlYWRUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay50aHJlYWQ9dGhyZWFkO2lmKCF0cmFjay5oYXNWaXNpYmxlQ29udGVudClyZXR1cm47UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodHJhY2spO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKG5ldyBTcGFjaW5nVHJhY2sodGhpcy52aWV3cG9ydCkpO319fX07cmV0dXJue090aGVyVGhyZWFkc1RyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBQcm9jZXNzU3VtbWFyeVRyYWNrPXRyLnVpLmIuZGVmaW5lKCdwcm9jZXNzLXN1bW1hcnktdHJhY2snLHRyLnVpLnRyYWNrcy5SZWN0VHJhY2spO1Byb2Nlc3NTdW1tYXJ5VHJhY2suYnVpbGRSZWN0c0Zyb21Qcm9jZXNzPWZ1bmN0aW9uKHByb2Nlc3Mpe2lmKCFwcm9jZXNzKXJldHVybltdO2NvbnN0IG9wcz1bXTtjb25zdCBwdXNoT3A9ZnVuY3Rpb24oaXNTdGFydCx0aW1lLHNsaWNlKXtvcHMucHVzaCh7aXNTdGFydCx0aW1lLHNsaWNlfSk7fTtmb3IoY29uc3QgdGlkIGluIHByb2Nlc3MudGhyZWFkcyl7Y29uc3Qgc2xpY2VHcm91cD1wcm9jZXNzLnRocmVhZHNbdGlkXS5zbGljZUdyb3VwO3NsaWNlR3JvdXAudG9wTGV2ZWxTbGljZXMuZm9yRWFjaChmdW5jdGlvbihzbGljZSl7cHVzaE9wKHRydWUsc2xpY2Uuc3RhcnQsdW5kZWZpbmVkKTtwdXNoT3AoZmFsc2Usc2xpY2UuZW5kLHVuZGVmaW5lZCk7fSk7c2xpY2VHcm91cC5zbGljZXMuZm9yRWFjaChmdW5jdGlvbihzbGljZSl7aWYoc2xpY2UuaW1wb3J0YW50KXtwdXNoT3AodHJ1ZSxzbGljZS5zdGFydCxzbGljZSk7cHVzaE9wKGZhbHNlLHNsaWNlLmVuZCxzbGljZSk7fX0pO30KLW9wcy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudGltZS1iLnRpbWU7fSk7Y29uc3QgcmVjdHM9W107Y29uc3QgZ2VuZXJpY0NvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZSgnZ2VuZXJpY193b3JrJyk7Y29uc3QgcHVzaFJlY3Q9ZnVuY3Rpb24oc3RhcnQsZW5kLHNsaWNlKXtyZWN0cy5wdXNoKG5ldyB0ci51aS50cmFja3MuUmVjdChzbGljZSxzbGljZT9zbGljZS50aXRsZTonJyxzbGljZT9zbGljZS5jb2xvcklkOmdlbmVyaWNDb2xvcklkLHN0YXJ0LGVuZC1zdGFydCkpO307bGV0IGRlcHRoPTA7bGV0IGN1cnJlbnRTbGljZT11bmRlZmluZWQ7bGV0IGxhc3RTdGFydD11bmRlZmluZWQ7b3BzLmZvckVhY2goZnVuY3Rpb24ob3Ape2RlcHRoKz1vcC5pc1N0YXJ0PzE6LTE7aWYoY3VycmVudFNsaWNlKXtpZighb3AuaXNTdGFydCYmb3Auc2xpY2U9PT1jdXJyZW50U2xpY2Upe3B1c2hSZWN0KGxhc3RTdGFydCxvcC50aW1lLGN1cnJlbnRTbGljZSk7bGFzdFN0YXJ0PWRlcHRoPj0xP29wLnRpbWU6dW5kZWZpbmVkO2N1cnJlbnRTbGljZT11bmRlZmluZWQ7fX1lbHNle2lmKG9wLmlzU3RhcnQpe2lmKGRlcHRoPT09MSl7bGFzdFN0YXJ0PW9wLnRpbWU7Y3VycmVudFNsaWNlPW9wLnNsaWNlO31lbHNlIGlmKG9wLnNsaWNlKXtpZihvcC50aW1lIT09bGFzdFN0YXJ0KXtwdXNoUmVjdChsYXN0U3RhcnQsb3AudGltZSx1bmRlZmluZWQpO2xhc3RTdGFydD1vcC50aW1lO30KLWN1cnJlbnRTbGljZT1vcC5zbGljZTt9fWVsc2V7aWYoZGVwdGg9PT0wKXtwdXNoUmVjdChsYXN0U3RhcnQsb3AudGltZSx1bmRlZmluZWQpO2xhc3RTdGFydD11bmRlZmluZWQ7fX19fSk7cmV0dXJuIHJlY3RzO307UHJvY2Vzc1N1bW1hcnlUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuUmVjdFRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLlJlY3RUcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTt9LGdldCBwcm9jZXNzKCl7cmV0dXJuIHRoaXMucHJvY2Vzc187fSxzZXQgcHJvY2Vzcyhwcm9jZXNzKXt0aGlzLnByb2Nlc3NfPXByb2Nlc3M7dGhpcy5yZWN0cz1Qcm9jZXNzU3VtbWFyeVRyYWNrLmJ1aWxkUmVjdHNGcm9tUHJvY2Vzcyhwcm9jZXNzKTt9fTtyZXR1cm57UHJvY2Vzc1N1bW1hcnlUcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IE9iamVjdFNuYXBzaG90Vmlldz10ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXc7Y29uc3QgT2JqZWN0SW5zdGFuY2VWaWV3PXRyLnVpLmFuYWx5c2lzLk9iamVjdEluc3RhbmNlVmlldztjb25zdCBTcGFjaW5nVHJhY2s9dHIudWkudHJhY2tzLlNwYWNpbmdUcmFjaztjb25zdCBQcm9jZXNzVHJhY2tCYXNlPXRyLnVpLmIuZGVmaW5lKCdwcm9jZXNzLXRyYWNrLWJhc2UnLHRyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjayk7UHJvY2Vzc1RyYWNrQmFzZS5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7dGhpcy5wcm9jZXNzQmFzZV89dW5kZWZpbmVkO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ3Byb2Nlc3MtdHJhY2stYmFzZScpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2V4cGFuZGVkJyk7dGhpcy5wcm9jZXNzTmFtZUVsXz10ci51aS5iLmNyZWF0ZVNwYW4oKTtQb2x5bWVyLmRvbSh0aGlzLnByb2Nlc3NOYW1lRWxfKS5jbGFzc0xpc3QuYWRkKCdwcm9jZXNzLXRyYWNrLW5hbWUnKTt0aGlzLmhlYWRlckVsXz10ci51aS5iLmNyZWF0ZURpdih7Y2xhc3NOYW1lOidwcm9jZXNzLXRyYWNrLWhlYWRlcid9KTtQb2x5bWVyLmRvbSh0aGlzLmhlYWRlckVsXykuYXBwZW5kQ2hpbGQodGhpcy5wcm9jZXNzTmFtZUVsXyk7dGhpcy5oZWFkZXJFbF8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMub25IZWFkZXJDbGlja18uYmluZCh0aGlzKSk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5oZWFkZXJFbF8pO30sZ2V0IHByb2Nlc3NCYXNlKCl7cmV0dXJuIHRoaXMucHJvY2Vzc0Jhc2VfO30sc2V0IHByb2Nlc3NCYXNlKHByb2Nlc3NCYXNlKXt0aGlzLnByb2Nlc3NCYXNlXz1wcm9jZXNzQmFzZTtpZih0aGlzLnByb2Nlc3NCYXNlXyl7Y29uc3QgbW9kZWxTZXR0aW5ncz1uZXcgdHIubW9kZWwuTW9kZWxTZXR0aW5ncyh0aGlzLnByb2Nlc3NCYXNlXy5tb2RlbCk7Y29uc3QgZGVmYXVsdFZhbHVlPXRoaXMucHJvY2Vzc0Jhc2VfLmltcG9ydGFudDt0aGlzLmV4cGFuZGVkPW1vZGVsU2V0dGluZ3MuZ2V0U2V0dGluZ0Zvcih0aGlzLnByb2Nlc3NCYXNlXywnZXhwYW5kZWQnLGRlZmF1bHRWYWx1ZSk7fQotdGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBleHBhbmRlZCgpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuY29udGFpbnMoJ2V4cGFuZGVkJyk7fSxzZXQgZXhwYW5kZWQoZXhwYW5kZWQpe2V4cGFuZGVkPSEhZXhwYW5kZWQ7aWYodGhpcy5leHBhbmRlZD09PWV4cGFuZGVkKXJldHVybjtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QudG9nZ2xlKCdleHBhbmRlZCcpO3RoaXMudmlld3BvcnRfLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTtpZighdGhpcy5wcm9jZXNzQmFzZV8pcmV0dXJuO2NvbnN0IG1vZGVsU2V0dGluZ3M9bmV3IHRyLm1vZGVsLk1vZGVsU2V0dGluZ3ModGhpcy5wcm9jZXNzQmFzZV8ubW9kZWwpO21vZGVsU2V0dGluZ3Muc2V0U2V0dGluZ0Zvcih0aGlzLnByb2Nlc3NCYXNlXywnZXhwYW5kZWQnLGV4cGFuZGVkKTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO3RoaXMudmlld3BvcnQucmVidWlsZEV2ZW50VG9UcmFja01hcCgpO3RoaXMudmlld3BvcnQucmVidWlsZENvbnRhaW5lclRvVHJhY2tNYXAoKTt9LGdldCBoYXNWaXNpYmxlQ29udGVudCgpe2lmKHRoaXMuZXhwYW5kZWQpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD4xO30KLXJldHVybiB0cnVlO30sb25IZWFkZXJDbGlja18oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTtlLnByZXZlbnREZWZhdWx0KCk7dGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZDt9LHVwZGF0ZUNvbnRlbnRzXygpe3RoaXMuY2xlYXJUcmFja3NfKCk7aWYoIXRoaXMucHJvY2Vzc0Jhc2VfKXJldHVybjtQb2x5bWVyLmRvbSh0aGlzLnByb2Nlc3NOYW1lRWxfKS50ZXh0Q29udGVudD10aGlzLnByb2Nlc3NCYXNlXy51c2VyRnJpZW5kbHlOYW1lO3RoaXMuaGVhZGVyRWxfLnRpdGxlPXRoaXMucHJvY2Vzc0Jhc2VfLnVzZXJGcmllbmRseURldGFpbHM7dGhpcy53aWxsQXBwZW5kVHJhY2tzXygpO2lmKHRoaXMuZXhwYW5kZWQpe3RoaXMuYXBwZW5kTWVtb3J5RHVtcFRyYWNrXygpO3RoaXMuYXBwZW5kT2JqZWN0SW5zdGFuY2VUcmFja3NfKCk7dGhpcy5hcHBlbmRDb3VudGVyVHJhY2tzXygpO3RoaXMuYXBwZW5kRnJhbWVUcmFja18oKTt0aGlzLmFwcGVuZFRocmVhZFRyYWNrc18oKTt9ZWxzZXt0aGlzLmFwcGVuZFN1bW1hcnlUcmFja18oKTt9Ci10aGlzLmRpZEFwcGVuZFRyYWNrc18oKTt9LHdpbGxBcHBlbmRUcmFja3NfKCl7fSxkaWRBcHBlbmRUcmFja3NfKCl7fSxhcHBlbmRNZW1vcnlEdW1wVHJhY2tfKCl7fSxhcHBlbmRTdW1tYXJ5VHJhY2tfKCl7Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5Qcm9jZXNzU3VtbWFyeVRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLnByb2Nlc3M9dGhpcy5wcm9jZXNzO2lmKCF0cmFjay5oYXNWaXNpYmxlQ29udGVudClyZXR1cm47UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodHJhY2spO30sYXBwZW5kRnJhbWVUcmFja18oKXtjb25zdCBmcmFtZXM9dGhpcy5wcm9jZXNzP3RoaXMucHJvY2Vzcy5mcmFtZXM6dW5kZWZpbmVkO2lmKCFmcmFtZXN8fCFmcmFtZXMubGVuZ3RoKXJldHVybjtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLkZyYW1lVHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2suZnJhbWVzPWZyYW1lcztQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7fSxhcHBlbmRPYmplY3RJbnN0YW5jZVRyYWNrc18oKXtjb25zdCBpbnN0YW5jZXNCeVR5cGVOYW1lPXRoaXMucHJvY2Vzc0Jhc2VfLm9iamVjdHMuZ2V0QWxsSW5zdGFuY2VzQnlUeXBlTmFtZSgpO2NvbnN0IGluc3RhbmNlVHlwZU5hbWVzPU9iamVjdC5rZXlzKGluc3RhbmNlc0J5VHlwZU5hbWUpO2luc3RhbmNlVHlwZU5hbWVzLnNvcnQoKTtsZXQgZGlkQXBwZW5kQXRMZWFzdE9uZVRyYWNrPWZhbHNlO2luc3RhbmNlVHlwZU5hbWVzLmZvckVhY2goZnVuY3Rpb24odHlwZU5hbWUpe2NvbnN0IGFsbEluc3RhbmNlcz1pbnN0YW5jZXNCeVR5cGVOYW1lW3R5cGVOYW1lXTtsZXQgaW5zdGFuY2VWaWV3SW5mbz1PYmplY3RJbnN0YW5jZVZpZXcuZ2V0VHlwZUluZm8odW5kZWZpbmVkLHR5cGVOYW1lKTtsZXQgc25hcHNob3RWaWV3SW5mbz1PYmplY3RTbmFwc2hvdFZpZXcuZ2V0VHlwZUluZm8odW5kZWZpbmVkLHR5cGVOYW1lKTtpZihpbnN0YW5jZVZpZXdJbmZvJiYhaW5zdGFuY2VWaWV3SW5mby5tZXRhZGF0YS5zaG93SW5UcmFja1ZpZXcpe2luc3RhbmNlVmlld0luZm89dW5kZWZpbmVkO30KLWlmKHNuYXBzaG90Vmlld0luZm8mJiFzbmFwc2hvdFZpZXdJbmZvLm1ldGFkYXRhLnNob3dJblRyYWNrVmlldyl7c25hcHNob3RWaWV3SW5mbz11bmRlZmluZWQ7fQotY29uc3QgaGFzVmlld0luZm89aW5zdGFuY2VWaWV3SW5mb3x8c25hcHNob3RWaWV3SW5mbztjb25zdCB2aXNpYmxlSW5zdGFuY2VzPVtdO2ZvcihsZXQgaT0wO2k8YWxsSW5zdGFuY2VzLmxlbmd0aDtpKyspe2NvbnN0IGluc3RhbmNlPWFsbEluc3RhbmNlc1tpXTtpZihpbnN0YW5jZS5zbmFwc2hvdHMubGVuZ3RoPT09MCljb250aW51ZTtpZihpbnN0YW5jZS5oYXNJbXBsaWNpdFNuYXBzaG90cyYmIWhhc1ZpZXdJbmZvKWNvbnRpbnVlO3Zpc2libGVJbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7fQotaWYodmlzaWJsZUluc3RhbmNlcy5sZW5ndGg9PT0wKXJldHVybjtsZXQgdHJhY2tDb25zdHJ1Y3Rvcj10ci51aS50cmFja3MuT2JqZWN0SW5zdGFuY2VUcmFjay5nZXRDb25zdHJ1Y3Rvcih1bmRlZmluZWQsdHlwZU5hbWUpO2lmKCF0cmFja0NvbnN0cnVjdG9yKXtzbmFwc2hvdFZpZXdJbmZvPU9iamVjdFNuYXBzaG90Vmlldy5nZXRUeXBlSW5mbyh1bmRlZmluZWQsdHlwZU5hbWUpO2lmKHNuYXBzaG90Vmlld0luZm8mJnNuYXBzaG90Vmlld0luZm8ubWV0YWRhdGEuc2hvd0luc3RhbmNlcyl7dHJhY2tDb25zdHJ1Y3Rvcj10ci51aS50cmFja3MuT2JqZWN0SW5zdGFuY2VHcm91cFRyYWNrO31lbHNle3RyYWNrQ29uc3RydWN0b3I9dHIudWkudHJhY2tzLk9iamVjdEluc3RhbmNlVHJhY2s7fX0KLWNvbnN0IHRyYWNrPW5ldyB0cmFja0NvbnN0cnVjdG9yKHRoaXMudmlld3BvcnQpO3RyYWNrLm9iamVjdEluc3RhbmNlcz12aXNpYmxlSW5zdGFuY2VzO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRyYWNrKTtkaWRBcHBlbmRBdExlYXN0T25lVHJhY2s9dHJ1ZTt9LHRoaXMpO2lmKGRpZEFwcGVuZEF0TGVhc3RPbmVUcmFjayl7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQobmV3IFNwYWNpbmdUcmFjayh0aGlzLnZpZXdwb3J0KSk7fX0sYXBwZW5kQ291bnRlclRyYWNrc18oKXtjb25zdCBjb3VudGVycz1PYmplY3QudmFsdWVzKHRoaXMucHJvY2Vzc0Jhc2UuY291bnRlcnMpO2NvdW50ZXJzLnNvcnQodHIubW9kZWwuQ291bnRlci5jb21wYXJlKTtjb3VudGVycy5mb3JFYWNoKGZ1bmN0aW9uKGNvdW50ZXIpe2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuQ291bnRlclRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLmNvdW50ZXI9Y291bnRlcjtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQobmV3IFNwYWNpbmdUcmFjayh0aGlzLnZpZXdwb3J0KSk7fS5iaW5kKHRoaXMpKTt9LGFwcGVuZFRocmVhZFRyYWNrc18oKXtjb25zdCB0aHJlYWRzPU9iamVjdC52YWx1ZXModGhpcy5wcm9jZXNzQmFzZS50aHJlYWRzKTt0aHJlYWRzLnNvcnQodHIubW9kZWwuVGhyZWFkLmNvbXBhcmUpO2NvbnN0IG90aGVyVGhyZWFkcz1bXTtsZXQgaGFzVmlzaWJsZVRocmVhZHM9ZmFsc2U7dGhyZWFkcy5mb3JFYWNoKGZ1bmN0aW9uKHRocmVhZCl7Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5UaHJlYWRUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay50aHJlYWQ9dGhyZWFkO2lmKCF0cmFjay5oYXNWaXNpYmxlQ29udGVudClyZXR1cm47aWYodHJhY2suaGFzU2xpY2VzKXtoYXNWaXNpYmxlVGhyZWFkcz10cnVlO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRyYWNrKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChuZXcgU3BhY2luZ1RyYWNrKHRoaXMudmlld3BvcnQpKTt9ZWxzZSBpZih0cmFjay5oYXNUaW1lU2xpY2VzKXtvdGhlclRocmVhZHMucHVzaCh0aHJlYWQpO319LmJpbmQodGhpcykpO2lmKG90aGVyVGhyZWFkcy5sZW5ndGg+MCl7Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5PdGhlclRocmVhZHNUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay50aHJlYWRzPW90aGVyVGhyZWFkczt0cmFjay5jb2xsYXBzaWJsZT1vdGhlclRocmVhZHMubGVuZ3RoPjEmJmhhc1Zpc2libGVUaHJlYWRzO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRyYWNrKTt9fX07cmV0dXJue1Byb2Nlc3NUcmFja0Jhc2UsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBDcHU9dHIubW9kZWwuQ3B1O2NvbnN0IENwdVRyYWNrPXRyLnVpLnRyYWNrcy5jcHVfdHJhY2s7Y29uc3QgUHJvY2Vzc1RyYWNrQmFzZT10ci51aS50cmFja3MuUHJvY2Vzc1RyYWNrQmFzZTtjb25zdCBTcGFjaW5nVHJhY2s9dHIudWkudHJhY2tzLlNwYWNpbmdUcmFjaztjb25zdCBLZXJuZWxUcmFjaz10ci51aS5iLmRlZmluZSgna2VybmVsLXRyYWNrJyxQcm9jZXNzVHJhY2tCYXNlKTtLZXJuZWxUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzpQcm9jZXNzVHJhY2tCYXNlLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7UHJvY2Vzc1RyYWNrQmFzZS5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTt9LHNldCBrZXJuZWwoa2VybmVsKXt0aGlzLnByb2Nlc3NCYXNlPWtlcm5lbDt9LGdldCBrZXJuZWwoKXtyZXR1cm4gdGhpcy5wcm9jZXNzQmFzZTt9LGdldCBldmVudENvbnRhaW5lcigpe3JldHVybiB0aGlzLmtlcm5lbDt9LGdldCBoYXNWaXNpYmxlQ29udGVudCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD4xO30sYWRkQ29udGFpbmVyc1RvVHJhY2tNYXAoY29udGFpbmVyVG9UcmFja01hcCl7dHIudWkudHJhY2tzLlByb2Nlc3NUcmFja0Jhc2UucHJvdG90eXBlLmFkZENvbnRhaW5lcnNUb1RyYWNrTWFwLmNhbGwodGhpcyxjb250YWluZXJUb1RyYWNrTWFwKTtjb250YWluZXJUb1RyYWNrTWFwLmFkZENvbnRhaW5lcih0aGlzLmtlcm5lbCx0aGlzKTt9LHdpbGxBcHBlbmRUcmFja3NfKCl7Y29uc3QgY3B1cz1PYmplY3QudmFsdWVzKHRoaXMua2VybmVsLmNwdXMpO2NwdXMuc29ydCh0ci5tb2RlbC5DcHUuY29tcGFyZSk7bGV0IGRpZEFwcGVuZEF0TGVhc3RPbmVUcmFjaz1mYWxzZTtmb3IobGV0IGk9MDtpPGNwdXMubGVuZ3RoOysraSl7Y29uc3QgY3B1PWNwdXNbaV07Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5DcHVUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay5kZXRhaWxlZE1vZGU9dGhpcy5leHBhbmRlZDt0cmFjay5jcHU9Y3B1O2lmKCF0cmFjay5oYXNWaXNpYmxlQ29udGVudCljb250aW51ZTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7ZGlkQXBwZW5kQXRMZWFzdE9uZVRyYWNrPXRydWU7fQotaWYoZGlkQXBwZW5kQXRMZWFzdE9uZVRyYWNrKXtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChuZXcgU3BhY2luZ1RyYWNrKHRoaXMudmlld3BvcnQpKTt9fX07cmV0dXJue0tlcm5lbFRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgSW50ZXJhY3Rpb25UcmFjaz10ci51aS5iLmRlZmluZSgnaW50ZXJhY3Rpb24tdHJhY2snLHRyLnVpLnRyYWNrcy5NdWx0aVJvd1RyYWNrKTtJbnRlcmFjdGlvblRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5NdWx0aVJvd1RyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLk11bHRpUm93VHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7dGhpcy5oZWFkaW5nPSdJbnRlcmFjdGlvbnMnO3RoaXMuc3ViUm93c189W107fSxzZXQgbW9kZWwobW9kZWwpe3RoaXMuc2V0SXRlbXNUb0dyb3VwKG1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnMse2d1aWQ6dHIuYi5HVUlELmFsbG9jYXRlU2ltcGxlKCksbW9kZWwsZ2V0U2V0dGluZ3NLZXkoKXtyZXR1cm4gdW5kZWZpbmVkO319KTt9LGJ1aWxkU3ViUm93c18oc2xpY2VzKXtpZih0aGlzLnN1YlJvd3NfLmxlbmd0aCl7cmV0dXJuIHRoaXMuc3ViUm93c187fQotdGhpcy5zdWJSb3dzXy5wdXNoKC4uLnRyLnVpLnRyYWNrcy5ncm91cEFzeW5jU2xpY2VzSW50b1N1YlJvd3Moc2xpY2VzLHRydWUpKTtyZXR1cm4gdGhpcy5zdWJSb3dzXzt9LGFkZFN1YlRyYWNrXyhzbGljZXMpe2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuU2xpY2VUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay5zbGljZXM9c2xpY2VzO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRyYWNrKTtyZXR1cm4gdHJhY2s7fX07cmV0dXJue0ludGVyYWN0aW9uVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IExldHRlckRvdFRyYWNrPXRyLnVpLnRyYWNrcy5MZXR0ZXJEb3RUcmFjaztjb25zdCBNZW1vcnlUcmFjaz10ci51aS5iLmRlZmluZSgnbWVtb3J5LXRyYWNrJyxMZXR0ZXJEb3RUcmFjayk7TWVtb3J5VHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186TGV0dGVyRG90VHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXtMZXR0ZXJEb3RUcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTt0aGlzLmNsYXNzTGlzdC5hZGQoJ21lbW9yeS10cmFjaycpO3RoaXMuaGVhZGluZz0nTWVtb3J5IEV2ZW50cyc7dGhpcy5sb3dNZW1vcnlFdmVudHNfPXVuZGVmaW5lZDt9LGluaXRpYWxpemUobW9kZWwpe2lmKG1vZGVsIT09dW5kZWZpbmVkKXt0aGlzLmxvd01lbW9yeUV2ZW50c189bW9kZWwuZGV2aWNlLmxvd01lbW9yeUV2ZW50czt9ZWxzZXt0aGlzLmxvd01lbW9yeUV2ZW50c189dW5kZWZpbmVkO30KLWlmKHRoaXMuaGFzVmlzaWJsZUNvbnRlbnQpe3RoaXMuaXRlbXM9dGhpcy5idWlsZE1lbW9yeUxldHRlckRvdHNfKHRoaXMubG93TWVtb3J5RXZlbnRzXyk7fX0sZ2V0IGhhc1Zpc2libGVDb250ZW50KCl7cmV0dXJuISF0aGlzLmxvd01lbW9yeUV2ZW50c18mJnRoaXMubG93TWVtb3J5RXZlbnRzXy5sZW5ndGghPT0wO30sYnVpbGRNZW1vcnlMZXR0ZXJEb3RzXyhtZW1vcnlFdmVudHMpe3JldHVybiBtZW1vcnlFdmVudHMubWFwKG1lbW9yeUV2ZW50PT5uZXcgdHIudWkudHJhY2tzLkxldHRlckRvdChtZW1vcnlFdmVudCwnSycsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZSgnYmFja2dyb3VuZF9tZW1vcnlfZHVtcCcpLG1lbW9yeUV2ZW50LnN0YXJ0KSk7fSx9O3JldHVybntNZW1vcnlUcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IEFMTE9DQVRFRF9NRU1PUllfVFJBQ0tfSEVJR0hUPTUwO2NvbnN0IFByb2Nlc3NNZW1vcnlEdW1wVHJhY2s9dHIudWkuYi5kZWZpbmUoJ3Byb2Nlc3MtbWVtb3J5LWR1bXAtdHJhY2snLHRyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjayk7UHJvY2Vzc01lbW9yeUR1bXBUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7dGhpcy5tZW1vcnlEdW1wc189dW5kZWZpbmVkO30sZ2V0IG1lbW9yeUR1bXBzKCl7cmV0dXJuIHRoaXMubWVtb3J5RHVtcHNfO30sc2V0IG1lbW9yeUR1bXBzKG1lbW9yeUR1bXBzKXt0aGlzLm1lbW9yeUR1bXBzXz1tZW1vcnlEdW1wczt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlQ29udGVudHNfKCl7dGhpcy5jbGVhclRyYWNrc18oKTtpZighdGhpcy5tZW1vcnlEdW1wc198fCF0aGlzLm1lbW9yeUR1bXBzXy5sZW5ndGgpcmV0dXJuO3RoaXMuYXBwZW5kQWxsb2NhdGVkTWVtb3J5VHJhY2tfKCk7fSxhcHBlbmRBbGxvY2F0ZWRNZW1vcnlUcmFja18oKXtjb25zdCBzZXJpZXM9dHIudWkudHJhY2tzLmJ1aWxkUHJvY2Vzc0FsbG9jYXRlZE1lbW9yeUNoYXJ0U2VyaWVzKHRoaXMubWVtb3J5RHVtcHNfKTtpZighc2VyaWVzKXJldHVybjtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLkNoYXJ0VHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2suaGVhZGluZz0nTWVtb3J5IHBlciBjb21wb25lbnQnO3RyYWNrLmhlaWdodD1BTExPQ0FURURfTUVNT1JZX1RSQUNLX0hFSUdIVCsncHgnO3RyYWNrLnNlcmllcz1zZXJpZXM7dHJhY2suYXV0b1NldEFsbEF4ZXMoe2V4cGFuZE1heDp0cnVlfSk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodHJhY2spO319O3JldHVybntQcm9jZXNzTWVtb3J5RHVtcFRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgUHJvY2Vzc1RyYWNrQmFzZT10ci51aS50cmFja3MuUHJvY2Vzc1RyYWNrQmFzZTtjb25zdCBQcm9jZXNzVHJhY2s9dHIudWkuYi5kZWZpbmUoJ3Byb2Nlc3MtdHJhY2snLFByb2Nlc3NUcmFja0Jhc2UpO1Byb2Nlc3NUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzpQcm9jZXNzVHJhY2tCYXNlLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLlByb2Nlc3NUcmFja0Jhc2UucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7fSxkcmF3VHJhY2sodHlwZSl7c3dpdGNoKHR5cGUpe2Nhc2UgdHIudWkudHJhY2tzLkRyYXdUeXBlLklOU1RBTlRfRVZFTlQ6e2lmKCF0aGlzLnByb2Nlc3NCYXNlLmluc3RhbnRFdmVudHN8fHRoaXMucHJvY2Vzc0Jhc2UuaW5zdGFudEV2ZW50cy5sZW5ndGg9PT0wKXticmVhazt9Ci1jb25zdCBjdHg9dGhpcy5jb250ZXh0KCk7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCBib3VuZHM9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBjYW52YXNCb3VuZHM9Y3R4LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjdHguc2F2ZSgpO2N0eC50cmFuc2xhdGUoMCxwaXhlbFJhdGlvKihib3VuZHMudG9wLWNhbnZhc0JvdW5kcy50b3ApKTtjb25zdCBkdD10aGlzLnZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IHZpZXdMV29ybGQ9ZHQueFZpZXdUb1dvcmxkKDApO2NvbnN0IHZpZXdSV29ybGQ9ZHQueFZpZXdUb1dvcmxkKGNhbnZhc0JvdW5kcy53aWR0aCpwaXhlbFJhdGlvKTt0ci51aS5iLmRyYXdJbnN0YW50U2xpY2VzQXNMaW5lcyhjdHgsdGhpcy52aWV3cG9ydC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybSx2aWV3TFdvcmxkLHZpZXdSV29ybGQsYm91bmRzLmhlaWdodCx0aGlzLnByb2Nlc3NCYXNlLmluc3RhbnRFdmVudHMsMik7Y3R4LnJlc3RvcmUoKTticmVhazt9Ci1jYXNlIHRyLnVpLnRyYWNrcy5EcmF3VHlwZS5CQUNLR1JPVU5EOnRoaXMuZHJhd0JhY2tncm91bmRfKCk7cmV0dXJuO30KLXRyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjay5wcm90b3R5cGUuZHJhd1RyYWNrLmNhbGwodGhpcyx0eXBlKTt9LGRyYXdCYWNrZ3JvdW5kXygpe2NvbnN0IGN0eD10aGlzLmNvbnRleHQoKTtjb25zdCBjYW52YXNCb3VuZHM9Y3R4LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2xldCBkcmF3PWZhbHNlO2N0eC5maWxsU3R5bGU9JyNlZWUnO2ZvcihsZXQgaT0wO2k8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytpKXtpZighKHRoaXMuY2hpbGRyZW5baV1pbnN0YW5jZW9mIHRyLnVpLnRyYWNrcy5UcmFjayl8fCh0aGlzLmNoaWxkcmVuW2ldaW5zdGFuY2VvZiB0ci51aS50cmFja3MuU3BhY2luZ1RyYWNrKSl7Y29udGludWU7fQotZHJhdz0hZHJhdztpZighZHJhdyljb250aW51ZTtjb25zdCBib3VuZHM9dGhpcy5jaGlsZHJlbltpXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjdHguZmlsbFJlY3QoMCxwaXhlbFJhdGlvKihib3VuZHMudG9wLWNhbnZhc0JvdW5kcy50b3ApLGN0eC5jYW52YXMud2lkdGgscGl4ZWxSYXRpbypib3VuZHMuaGVpZ2h0KTt9fSxzZXQgcHJvY2Vzcyhwcm9jZXNzKXt0aGlzLnByb2Nlc3NCYXNlPXByb2Nlc3M7fSxnZXQgcHJvY2Vzcygpe3JldHVybiB0aGlzLnByb2Nlc3NCYXNlO30sZ2V0IGV2ZW50Q29udGFpbmVyKCl7cmV0dXJuIHRoaXMucHJvY2Vzczt9LGFkZENvbnRhaW5lcnNUb1RyYWNrTWFwKGNvbnRhaW5lclRvVHJhY2tNYXApe3RyLnVpLnRyYWNrcy5Qcm9jZXNzVHJhY2tCYXNlLnByb3RvdHlwZS5hZGRDb250YWluZXJzVG9UcmFja01hcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Y29udGFpbmVyVG9UcmFja01hcC5hZGRDb250YWluZXIodGhpcy5wcm9jZXNzLHRoaXMpO30sYXBwZW5kTWVtb3J5RHVtcFRyYWNrXygpe2NvbnN0IHByb2Nlc3NNZW1vcnlEdW1wcz10aGlzLnByb2Nlc3MubWVtb3J5RHVtcHM7aWYocHJvY2Vzc01lbW9yeUR1bXBzLmxlbmd0aCl7Y29uc3QgcG1kdD1uZXcgdHIudWkudHJhY2tzLlByb2Nlc3NNZW1vcnlEdW1wVHJhY2sodGhpcy52aWV3cG9ydF8pO3BtZHQubWVtb3J5RHVtcHM9cHJvY2Vzc01lbW9yeUR1bXBzO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHBtZHQpO319LGFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbkluV29ybGRTcGFjZShsb1dYLGhpV1gsdmlld1BpeFdpZHRoV29ybGQsc2VsZWN0aW9uKXtmdW5jdGlvbiBvblBpY2tIaXQoaW5zdGFudEV2ZW50KXtzZWxlY3Rpb24ucHVzaChpbnN0YW50RXZlbnQpO30KLWNvbnN0IGluc3RhbnRFdmVudFdpZHRoPTIqdmlld1BpeFdpZHRoV29ybGQ7dHIuYi5pdGVyYXRlT3ZlckludGVyc2VjdGluZ0ludGVydmFscyh0aGlzLnByb2Nlc3NCYXNlLmluc3RhbnRFdmVudHMsZnVuY3Rpb24oeCl7cmV0dXJuIHguc3RhcnQ7fSxmdW5jdGlvbih4KXtyZXR1cm4geC5kdXJhdGlvbitpbnN0YW50RXZlbnRXaWR0aDt9LGxvV1gsaGlXWCxvblBpY2tIaXQuYmluZCh0aGlzKSk7dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZS5hZGRJbnRlcnNlY3RpbmdFdmVudHNJblJhbmdlVG9TZWxlY3Rpb25JbldvcmxkU3BhY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO30sYWRkQ2xvc2VzdEV2ZW50VG9TZWxlY3Rpb24od29ybGRYLHdvcmxkTWF4RGlzdCxsb1ksaGlZLHNlbGVjdGlvbil7dGhpcy5hZGRDbG9zZXN0SW5zdGFudEV2ZW50VG9TZWxlY3Rpb24odGhpcy5wcm9jZXNzQmFzZS5pbnN0YW50RXZlbnRzLHdvcmxkWCx3b3JsZE1heERpc3Qsc2VsZWN0aW9uKTt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9fTtyZXR1cm57UHJvY2Vzc1RyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgU2VsZWN0aW9uU3RhdGU9dHIubW9kZWwuU2VsZWN0aW9uU3RhdGU7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBFdmVudFByZXNlbnRlcj10ci51aS5iLkV2ZW50UHJlc2VudGVyO2NvbnN0IE1vZGVsVHJhY2s9dHIudWkuYi5kZWZpbmUoJ21vZGVsLXRyYWNrJyx0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2spO01vZGVsVHJhY2suVlNZTkNfSElHSExJR0hUX0FMUEhBPTAuMTtNb2RlbFRyYWNrLlZTWU5DX0RFTlNJVFlfVFJBTlNQQVJFTlQ9MC4yMDtNb2RlbFRyYWNrLlZTWU5DX0RFTlNJVFlfT1BBUVVFPTAuMTA7TW9kZWxUcmFjay5WU1lOQ19ERU5TSVRZX1JBTkdFPU1vZGVsVHJhY2suVlNZTkNfREVOU0lUWV9UUkFOU1BBUkVOVC1Nb2RlbFRyYWNrLlZTWU5DX0RFTlNJVFlfT1BBUVVFO01vZGVsVHJhY2suZ2VuZXJhdGVTdHJpcGVzXz1mdW5jdGlvbih0aW1lcyxtaW5UaW1lLG1heFRpbWUpe2lmKHRpbWVzLmxlbmd0aD09PTApcmV0dXJuW107Y29uc3QgbG93SW5kZXg9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRpbWVzLCh4PT54KSxtaW5UaW1lKTtsZXQgaGlnaEluZGV4PWxvd0luZGV4LTE7d2hpbGUodGltZXNbaGlnaEluZGV4KzFdPD1tYXhUaW1lKXtoaWdoSW5kZXgrKzt9Ci1jb25zdCBzdHJpcGVzPVtdO2ZvcihsZXQgaT1sb3dJbmRleC0obG93SW5kZXglMik7aTw9aGlnaEluZGV4O2krPTIpe2NvbnN0IGxlZnQ9aTxsb3dJbmRleD9taW5UaW1lOnRpbWVzW2ldO2NvbnN0IHJpZ2h0PWkrMT5oaWdoSW5kZXg/bWF4VGltZTp0aW1lc1tpKzFdO3N0cmlwZXMucHVzaCh0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UobGVmdCxyaWdodCkpO30KLXJldHVybiBzdHJpcGVzO307TW9kZWxUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgnbW9kZWwtdHJhY2snKTt0aGlzLnVwcGVyTW9kZV89ZmFsc2U7dGhpcy5hbm5vdGF0aW9uVmlld3NfPVtdO3RoaXMudlN5bmNUaW1lc189W107fSxnZXQgdXBwZXJNb2RlKCl7cmV0dXJuIHRoaXMudXBwZXJNb2RlXzt9LHNldCB1cHBlck1vZGUodXBwZXJNb2RlKXt0aGlzLnVwcGVyTW9kZV89dXBwZXJNb2RlO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxkZXRhY2goKXt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpO30sZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30sc2V0IG1vZGVsKG1vZGVsKXt0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO3RoaXMubW9kZWxfLmFkZEV2ZW50TGlzdGVuZXIoJ2Fubm90YXRpb25DaGFuZ2UnLHRoaXMudXBkYXRlQW5ub3RhdGlvbnNfLmJpbmQodGhpcykpO30sZ2V0IGhhc1Zpc2libGVDb250ZW50KCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjA7fSx1cGRhdGVDb250ZW50c18oKXtQb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudD0nJztpZighdGhpcy5tb2RlbF8pcmV0dXJuO2lmKHRoaXMudXBwZXJNb2RlXyl7dGhpcy51cGRhdGVDb250ZW50c0ZvclVwcGVyTW9kZV8oKTt9ZWxzZXt0aGlzLnVwZGF0ZUNvbnRlbnRzRm9yTG93ZXJNb2RlXygpO319LHVwZGF0ZUNvbnRlbnRzRm9yVXBwZXJNb2RlXygpe30sdXBkYXRlQ29udGVudHNGb3JMb3dlck1vZGVfKCl7aWYodGhpcy5tb2RlbF8udXNlck1vZGVsLmV4cGVjdGF0aW9ucy5sZW5ndGg+MSl7Y29uc3QgbXJ0PW5ldyB0ci51aS50cmFja3MuSW50ZXJhY3Rpb25UcmFjayh0aGlzLnZpZXdwb3J0Xyk7bXJ0Lm1vZGVsPXRoaXMubW9kZWxfO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKG1ydCk7fQotaWYodGhpcy5tb2RlbF8uYWxlcnRzLmxlbmd0aCl7Y29uc3QgYXQ9bmV3IHRyLnVpLnRyYWNrcy5BbGVydFRyYWNrKHRoaXMudmlld3BvcnRfKTthdC5hbGVydHM9dGhpcy5tb2RlbF8uYWxlcnRzO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGF0KTt9Ci1pZih0aGlzLm1vZGVsXy5nbG9iYWxNZW1vcnlEdW1wcy5sZW5ndGgpe2NvbnN0IGdtZHQ9bmV3IHRyLnVpLnRyYWNrcy5HbG9iYWxNZW1vcnlEdW1wVHJhY2sodGhpcy52aWV3cG9ydF8pO2dtZHQubWVtb3J5RHVtcHM9dGhpcy5tb2RlbF8uZ2xvYmFsTWVtb3J5RHVtcHM7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQoZ21kdCk7fQotdGhpcy5hcHBlbmREZXZpY2VUcmFja18oKTt0aGlzLmFwcGVuZENwdVVzYWdlVHJhY2tfKCk7dGhpcy5hcHBlbmRNZW1vcnlUcmFja18oKTt0aGlzLmFwcGVuZEtlcm5lbFRyYWNrXygpO2NvbnN0IHByb2Nlc3Nlcz10aGlzLm1vZGVsXy5nZXRBbGxQcm9jZXNzZXMoKTtwcm9jZXNzZXMuc29ydCh0ci5tb2RlbC5Qcm9jZXNzLmNvbXBhcmUpO2ZvcihsZXQgaT0wO2k8cHJvY2Vzc2VzLmxlbmd0aDsrK2kpe2NvbnN0IHByb2Nlc3M9cHJvY2Vzc2VzW2ldO2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuUHJvY2Vzc1RyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLnByb2Nlc3M9cHJvY2VzcztpZighdHJhY2suaGFzVmlzaWJsZUNvbnRlbnQpY29udGludWU7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodHJhY2spO30KLXRoaXMudmlld3BvcnRfLnJlYnVpbGRFdmVudFRvVHJhY2tNYXAoKTt0aGlzLnZpZXdwb3J0Xy5yZWJ1aWxkQ29udGFpbmVyVG9UcmFja01hcCgpO3RoaXMudlN5bmNUaW1lc189dGhpcy5tb2RlbF8uZGV2aWNlLnZTeW5jVGltZXN0YW1wczt0aGlzLnVwZGF0ZUFubm90YXRpb25zXygpO30sZ2V0Q29udGVudEJvdW5kcygpe3JldHVybiB0aGlzLm1vZGVsLmJvdW5kczt9LGFkZEFubm90YXRpb24oYW5ub3RhdGlvbil7dGhpcy5tb2RlbC5hZGRBbm5vdGF0aW9uKGFubm90YXRpb24pO30scmVtb3ZlQW5ub3RhdGlvbihhbm5vdGF0aW9uKXt0aGlzLm1vZGVsLnJlbW92ZUFubm90YXRpb24oYW5ub3RhdGlvbik7fSx1cGRhdGVBbm5vdGF0aW9uc18oKXt0aGlzLmFubm90YXRpb25WaWV3c189W107Y29uc3QgYW5ub3RhdGlvbnM9dGhpcy5tb2RlbF8uZ2V0QWxsQW5ub3RhdGlvbnMoKTtmb3IobGV0IGk9MDtpPGFubm90YXRpb25zLmxlbmd0aDtpKyspe3RoaXMuYW5ub3RhdGlvblZpZXdzXy5wdXNoKGFubm90YXRpb25zW2ldLmdldE9yQ3JlYXRlVmlldyh0aGlzLnZpZXdwb3J0XykpO30KLXRoaXMuaW52YWxpZGF0ZURyYXdpbmdDb250YWluZXIoKTt9LGFkZEV2ZW50c1RvVHJhY2tNYXAoZXZlbnRUb1RyYWNrTWFwKXtpZighdGhpcy5tb2RlbF8pcmV0dXJuO2NvbnN0IHRyYWNrcz10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wO2k8dHJhY2tzLmxlbmd0aDsrK2kpe3RyYWNrc1tpXS5hZGRFdmVudHNUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCk7fQotaWYodGhpcy5pbnN0YW50RXZlbnRzPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCB2cD10aGlzLnZpZXdwb3J0Xzt0aGlzLmluc3RhbnRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldil7ZXZlbnRUb1RyYWNrTWFwLmFkZEV2ZW50KGV2LHRoaXMpO30uYmluZCh0aGlzKSk7fSxhcHBlbmREZXZpY2VUcmFja18oKXtjb25zdCBkZXZpY2U9dGhpcy5tb2RlbC5kZXZpY2U7Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5EZXZpY2VUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay5kZXZpY2U9dGhpcy5tb2RlbC5kZXZpY2U7aWYoIXRyYWNrLmhhc1Zpc2libGVDb250ZW50KXJldHVybjtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7fSxhcHBlbmRLZXJuZWxUcmFja18oKXtjb25zdCBrZXJuZWw9dGhpcy5tb2RlbC5rZXJuZWw7Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5LZXJuZWxUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay5rZXJuZWw9dGhpcy5tb2RlbC5rZXJuZWw7aWYoIXRyYWNrLmhhc1Zpc2libGVDb250ZW50KXJldHVybjtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7fSxhcHBlbmRDcHVVc2FnZVRyYWNrXygpe2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuQ3B1VXNhZ2VUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay5pbml0aWFsaXplKHRoaXMubW9kZWwpO2lmKCF0cmFjay5oYXNWaXNpYmxlQ29udGVudClyZXR1cm47dGhpcy5hcHBlbmRDaGlsZCh0cmFjayk7fSxhcHBlbmRNZW1vcnlUcmFja18oKXtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLk1lbW9yeVRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLmluaXRpYWxpemUodGhpcy5tb2RlbCk7aWYoIXRyYWNrLmhhc1Zpc2libGVDb250ZW50KXJldHVybjtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7fSxkcmF3VHJhY2sodHlwZSl7Y29uc3QgY3R4PXRoaXMuY29udGV4dCgpO2lmKCF0aGlzLm1vZGVsXylyZXR1cm47Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCBib3VuZHM9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBjYW52YXNCb3VuZHM9Y3R4LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjdHguc2F2ZSgpO2N0eC50cmFuc2xhdGUoMCxwaXhlbFJhdGlvKihib3VuZHMudG9wLWNhbnZhc0JvdW5kcy50b3ApKTtjb25zdCBkdD10aGlzLnZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IHZpZXdMV29ybGQ9ZHQueFZpZXdUb1dvcmxkKDApO2NvbnN0IHZpZXdSV29ybGQ9ZHQueFZpZXdUb1dvcmxkKGNhbnZhc0JvdW5kcy53aWR0aCpwaXhlbFJhdGlvKTtjb25zdCB2aWV3SGVpZ2h0PWJvdW5kcy5oZWlnaHQqcGl4ZWxSYXRpbztzd2l0Y2godHlwZSl7Y2FzZSB0ci51aS50cmFja3MuRHJhd1R5cGUuR1JJRDp0aGlzLnZpZXdwb3J0LmRyYXdNYWpvck1hcmtMaW5lcyhjdHgsdmlld0hlaWdodCk7Y3R4LnJlc3RvcmUoKTtyZXR1cm47Y2FzZSB0ci51aS50cmFja3MuRHJhd1R5cGUuRkxPV19BUlJPV1M6aWYodGhpcy5tb2RlbF8uZmxvd0ludGVydmFsVHJlZS5zaXplPT09MCl7Y3R4LnJlc3RvcmUoKTtyZXR1cm47fQotdGhpcy5kcmF3Rmxvd0Fycm93c18odmlld0xXb3JsZCx2aWV3UldvcmxkKTtjdHgucmVzdG9yZSgpO3JldHVybjtjYXNlIHRyLnVpLnRyYWNrcy5EcmF3VHlwZS5JTlNUQU5UX0VWRU5UOmlmKCF0aGlzLm1vZGVsXy5pbnN0YW50RXZlbnRzfHx0aGlzLm1vZGVsXy5pbnN0YW50RXZlbnRzLmxlbmd0aD09PTApe2JyZWFrO30KLXRyLnVpLmIuZHJhd0luc3RhbnRTbGljZXNBc0xpbmVzKGN0eCx0aGlzLnZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLHZpZXdMV29ybGQsdmlld1JXb3JsZCxib3VuZHMuaGVpZ2h0LHRoaXMubW9kZWxfLmluc3RhbnRFdmVudHMsNCk7YnJlYWs7Y2FzZSB0ci51aS50cmFja3MuRHJhd1R5cGUuTUFSS0VSUzppZighdGhpcy52aWV3cG9ydC5pbnRlcmVzdFJhbmdlLmlzRW1wdHkpe3RoaXMudmlld3BvcnQuaW50ZXJlc3RSYW5nZS5kcmF3KGN0eCx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdmlld0hlaWdodCk7dGhpcy52aWV3cG9ydC5pbnRlcmVzdFJhbmdlLmRyYXdJbmRpY2F0b3JzKGN0eCx2aWV3TFdvcmxkLHZpZXdSV29ybGQpO30KLWN0eC5yZXN0b3JlKCk7cmV0dXJuO2Nhc2UgdHIudWkudHJhY2tzLkRyYXdUeXBlLkhJR0hMSUdIVFM6dGhpcy5kcmF3VlN5bmNIaWdobGlnaHQoY3R4LGR0LHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0KTtjdHgucmVzdG9yZSgpO3JldHVybjtjYXNlIHRyLnVpLnRyYWNrcy5EcmF3VHlwZS5BTk5PVEFUSU9OUzpmb3IobGV0IGk9MDtpPHRoaXMuYW5ub3RhdGlvblZpZXdzXy5sZW5ndGg7aSsrKXt0aGlzLmFubm90YXRpb25WaWV3c19baV0uZHJhdyhjdHgpO30KLWN0eC5yZXN0b3JlKCk7cmV0dXJuO30KLWN0eC5yZXN0b3JlKCk7dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZS5kcmF3VHJhY2suY2FsbCh0aGlzLHR5cGUpO30sZHJhd0Zsb3dBcnJvd3NfKHZpZXdMV29ybGQsdmlld1JXb3JsZCl7Y29uc3QgY3R4PXRoaXMuY29udGV4dCgpO2N0eC5zdHJva2VTdHlsZT0ncmdiYSgwLCAwLCAwLCAwLjQpJztjdHguZmlsbFN0eWxlPSdyZ2JhKDAsIDAsIDAsIDAuNCknO2N0eC5saW5lV2lkdGg9MTtjb25zdCBldmVudHM9dGhpcy5tb2RlbF8uZmxvd0ludGVydmFsVHJlZS5maW5kSW50ZXJzZWN0aW9uKHZpZXdMV29ybGQsdmlld1JXb3JsZCk7Y29uc3Qgb25seUhpZ2hsaWdodGVkPSF0aGlzLnZpZXdwb3J0LnNob3dGbG93RXZlbnRzO2NvbnN0IGNhbnZhc0JvdW5kcz1jdHguY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2ZvcihsZXQgaT0wO2k8ZXZlbnRzLmxlbmd0aDsrK2kpe2lmKG9ubHlIaWdobGlnaHRlZCYmZXZlbnRzW2ldLnNlbGVjdGlvblN0YXRlIT09U2VsZWN0aW9uU3RhdGUuU0VMRUNURUQmJmV2ZW50c1tpXS5zZWxlY3Rpb25TdGF0ZSE9PVNlbGVjdGlvblN0YXRlLkhJR0hMSUdIVEVEKXtjb250aW51ZTt9Ci10aGlzLmRyYXdGbG93QXJyb3dfKGN0eCxldmVudHNbaV0sY2FudmFzQm91bmRzKTt9fSxkcmF3Rmxvd0Fycm93XyhjdHgsZmxvd0V2ZW50LGNhbnZhc0JvdW5kcyl7Y29uc3QgZHQ9dGhpcy52aWV3cG9ydC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IHN0YXJ0VHJhY2s9dGhpcy52aWV3cG9ydC50cmFja0ZvckV2ZW50KGZsb3dFdmVudC5zdGFydFNsaWNlKTtjb25zdCBlbmRUcmFjaz10aGlzLnZpZXdwb3J0LnRyYWNrRm9yRXZlbnQoZmxvd0V2ZW50LmVuZFNsaWNlKTtpZihzdGFydFRyYWNrPT09dW5kZWZpbmVkfHxlbmRUcmFjaz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3Qgc3RhcnRCb3VuZHM9c3RhcnRUcmFjay5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBlbmRCb3VuZHM9ZW5kVHJhY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoZmxvd0V2ZW50LnNlbGVjdGlvblN0YXRlPT09U2VsZWN0aW9uU3RhdGUuU0VMRUNURUQpe2N0eC5zaGFkb3dCbHVyPTE7Y3R4LnNoYWRvd0NvbG9yPSdyZWQnO2N0eC5zaGFkb3dPZmZzZXR5PTI7Y3R4LnN0cm9rZVN0eWxlPXRyLmIuQ29sb3JTY2hlbWUuY29sb3JzQXNTdHJpbmdzW3RyLmIuQ29sb3JTY2hlbWUuZ2V0VmFyaWFudENvbG9ySWQoZmxvd0V2ZW50LmNvbG9ySWQsdHIuYi5Db2xvclNjaGVtZS5wcm9wZXJ0aWVzLmJyaWdodGVuZWRPZmZzZXRzWzBdKV07fWVsc2UgaWYoZmxvd0V2ZW50LnNlbGVjdGlvblN0YXRlPT09U2VsZWN0aW9uU3RhdGUuSElHSExJR0hURUQpe2N0eC5zaGFkb3dCbHVyPTE7Y3R4LnNoYWRvd0NvbG9yPSdyZWQnO2N0eC5zaGFkb3dPZmZzZXR5PTI7Y3R4LnN0cm9rZVN0eWxlPXRyLmIuQ29sb3JTY2hlbWUuY29sb3JzQXNTdHJpbmdzW3RyLmIuQ29sb3JTY2hlbWUuZ2V0VmFyaWFudENvbG9ySWQoZmxvd0V2ZW50LmNvbG9ySWQsdHIuYi5Db2xvclNjaGVtZS5wcm9wZXJ0aWVzLmJyaWdodGVuZWRPZmZzZXRzWzBdKV07fWVsc2UgaWYoZmxvd0V2ZW50LnNlbGVjdGlvblN0YXRlPT09U2VsZWN0aW9uU3RhdGUuRElNTUVEKXtjdHguc2hhZG93Qmx1cj0wO2N0eC5zaGFkb3dPZmZzZXRYPTA7Y3R4LnN0cm9rZVN0eWxlPXRyLmIuQ29sb3JTY2hlbWUuY29sb3JzQXNTdHJpbmdzW2Zsb3dFdmVudC5jb2xvcklkXTt9ZWxzZXtsZXQgaGFzQm9vc3Q9ZmFsc2U7Y29uc3Qgc3RhcnRTbGljZT1mbG93RXZlbnQuc3RhcnRTbGljZTtoYXNCb29zdHw9c3RhcnRTbGljZS5zZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLlNFTEVDVEVEO2hhc0Jvb3N0fD1zdGFydFNsaWNlLnNlbGVjdGlvblN0YXRlPT09U2VsZWN0aW9uU3RhdGUuSElHSExJR0hURUQ7Y29uc3QgZW5kU2xpY2U9Zmxvd0V2ZW50LmVuZFNsaWNlO2hhc0Jvb3N0fD1lbmRTbGljZS5zZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLlNFTEVDVEVEO2hhc0Jvb3N0fD1lbmRTbGljZS5zZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLkhJR0hMSUdIVEVEO2lmKGhhc0Jvb3N0KXtjdHguc2hhZG93Qmx1cj0xO2N0eC5zaGFkb3dDb2xvcj0ncmdiYSgyNTUsIDAsIDAsIDAuNCknO2N0eC5zaGFkb3dPZmZzZXR5PTI7Y3R4LnN0cm9rZVN0eWxlPXRyLmIuQ29sb3JTY2hlbWUuY29sb3JzQXNTdHJpbmdzW3RyLmIuQ29sb3JTY2hlbWUuZ2V0VmFyaWFudENvbG9ySWQoZmxvd0V2ZW50LmNvbG9ySWQsdHIuYi5Db2xvclNjaGVtZS5wcm9wZXJ0aWVzLmJyaWdodGVuZWRPZmZzZXRzWzBdKV07fWVsc2V7Y3R4LnNoYWRvd0JsdXI9MDtjdHguc2hhZG93T2Zmc2V0WD0wO2N0eC5zdHJva2VTdHlsZT10ci5iLkNvbG9yU2NoZW1lLmNvbG9yc0FzU3RyaW5nc1tmbG93RXZlbnQuY29sb3JJZF07fX0KLWNvbnN0IHN0YXJ0U2l6ZT1zdGFydEJvdW5kcy5sZWZ0K3N0YXJ0Qm91bmRzLnRvcCsKLXN0YXJ0Qm91bmRzLmJvdHRvbStzdGFydEJvdW5kcy5yaWdodDtjb25zdCBlbmRTaXplPWVuZEJvdW5kcy5sZWZ0K2VuZEJvdW5kcy50b3ArCi1lbmRCb3VuZHMuYm90dG9tK2VuZEJvdW5kcy5yaWdodDtpZihzdGFydFNpemU9PT0wJiZlbmRTaXplPT09MClyZXR1cm47Y29uc3Qgc3RhcnRZPXRoaXMuY2FsY3VsYXRlVHJhY2tZXyhzdGFydFRyYWNrLGNhbnZhc0JvdW5kcyk7Y29uc3QgZW5kWT10aGlzLmNhbGN1bGF0ZVRyYWNrWV8oZW5kVHJhY2ssY2FudmFzQm91bmRzKTtjb25zdCBwaXhlbFN0YXJ0WT1waXhlbFJhdGlvKnN0YXJ0WTtjb25zdCBwaXhlbEVuZFk9cGl4ZWxSYXRpbyplbmRZO2NvbnN0IHN0YXJ0WFZpZXc9ZHQueFdvcmxkVG9WaWV3KGZsb3dFdmVudC5zdGFydCk7Y29uc3QgZW5kWFZpZXc9ZHQueFdvcmxkVG9WaWV3KGZsb3dFdmVudC5lbmQpO2NvbnN0IG1pZFhWaWV3PShzdGFydFhWaWV3K2VuZFhWaWV3KS8yO2N0eC5iZWdpblBhdGgoKTtjdHgubW92ZVRvKHN0YXJ0WFZpZXcscGl4ZWxTdGFydFkpO2N0eC5iZXppZXJDdXJ2ZVRvKG1pZFhWaWV3LHBpeGVsU3RhcnRZLG1pZFhWaWV3LHBpeGVsRW5kWSxlbmRYVmlldyxwaXhlbEVuZFkpO2N0eC5zdHJva2UoKTtjb25zdCBhcnJvd1dpZHRoPTUqcGl4ZWxSYXRpbztjb25zdCBkaXN0YW5jZT1lbmRYVmlldy1zdGFydFhWaWV3O2lmKGRpc3RhbmNlPD0oMiphcnJvd1dpZHRoKSlyZXR1cm47Y29uc3QgdGlwWD1lbmRYVmlldztjb25zdCB0aXBZPXBpeGVsRW5kWTtjb25zdCBhcnJvd0hlaWdodD0oZW5kQm91bmRzLmhlaWdodC80KSpwaXhlbFJhdGlvO3RyLnVpLmIuZHJhd1RyaWFuZ2xlKGN0eCx0aXBYLHRpcFksdGlwWC1hcnJvd1dpZHRoLHRpcFktYXJyb3dIZWlnaHQsdGlwWC1hcnJvd1dpZHRoLHRpcFkrYXJyb3dIZWlnaHQpO2N0eC5maWxsKCk7fSxkcmF3VlN5bmNIaWdobGlnaHQoY3R4LGR0LHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0KXtpZighdGhpcy52aWV3cG9ydF8uaGlnaGxpZ2h0VlN5bmMpe3JldHVybjt9Ci1jb25zdCBzdHJpcGVzPU1vZGVsVHJhY2suZ2VuZXJhdGVTdHJpcGVzXyh0aGlzLnZTeW5jVGltZXNfLHZpZXdMV29ybGQsdmlld1JXb3JsZCk7aWYoc3RyaXBlcy5sZW5ndGg9PT0wKXtyZXR1cm47fQotY29uc3QgdlN5bmNIaWdobGlnaHRDb2xvcj1uZXcgdHIuYi5Db2xvcihDb2xvclNjaGVtZS5nZXRDb2xvckZvclJlc2VydmVkTmFtZUFzU3RyaW5nKCd2c3luY19oaWdobGlnaHRfY29sb3InKSk7Y29uc3Qgc3RyaXBlUmFuZ2U9c3RyaXBlc1tzdHJpcGVzLmxlbmd0aC0xXS5tYXgtc3RyaXBlc1swXS5taW47Y29uc3Qgc3RyaXBlRGVuc2l0eT1zdHJpcGVSYW5nZT9zdHJpcGVzLmxlbmd0aC8oZHQuc2NhbGVYKnN0cmlwZVJhbmdlKTowO2NvbnN0IGNsYW1wZWRTdHJpcGVEZW5zaXR5PXRyLmIubWF0aC5jbGFtcChzdHJpcGVEZW5zaXR5LE1vZGVsVHJhY2suVlNZTkNfREVOU0lUWV9PUEFRVUUsTW9kZWxUcmFjay5WU1lOQ19ERU5TSVRZX1RSQU5TUEFSRU5UKTtjb25zdCBvcGFjaXR5PShNb2RlbFRyYWNrLlZTWU5DX0RFTlNJVFlfVFJBTlNQQVJFTlQtY2xhbXBlZFN0cmlwZURlbnNpdHkpL01vZGVsVHJhY2suVlNZTkNfREVOU0lUWV9SQU5HRTtpZihvcGFjaXR5PT09MCl7cmV0dXJuO30KLWN0eC5maWxsU3R5bGU9dlN5bmNIaWdobGlnaHRDb2xvci50b1N0cmluZ1dpdGhBbHBoYU92ZXJyaWRlKE1vZGVsVHJhY2suVlNZTkNfSElHSExJR0hUX0FMUEhBKm9wYWNpdHkpO2ZvcihsZXQgaT0wO2k8c3RyaXBlcy5sZW5ndGg7aSsrKXtjb25zdCB4TGVmdFZpZXc9ZHQueFdvcmxkVG9WaWV3KHN0cmlwZXNbaV0ubWluKTtjb25zdCB4UmlnaHRWaWV3PWR0LnhXb3JsZFRvVmlldyhzdHJpcGVzW2ldLm1heCk7Y3R4LmZpbGxSZWN0KHhMZWZ0VmlldywwLHhSaWdodFZpZXcteExlZnRWaWV3LHZpZXdIZWlnaHQpO319LGNhbGN1bGF0ZVRyYWNrWV8odHJhY2ssY2FudmFzQm91bmRzKXtjb25zdCBib3VuZHM9dHJhY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3Qgc2l6ZT1ib3VuZHMubGVmdCtib3VuZHMudG9wK2JvdW5kcy5ib3R0b20rYm91bmRzLnJpZ2h0O2lmKHNpemU9PT0wKXtyZXR1cm4gdGhpcy5jYWxjdWxhdGVUcmFja1lfKFBvbHltZXIuZG9tKHRyYWNrKS5wYXJlbnROb2RlLGNhbnZhc0JvdW5kcyk7fQotcmV0dXJuIGJvdW5kcy50b3AtY2FudmFzQm91bmRzLnRvcCsoYm91bmRzLmhlaWdodC8yKTt9LGFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbkluV29ybGRTcGFjZShsb1dYLGhpV1gsdmlld1BpeFdpZHRoV29ybGQsc2VsZWN0aW9uKXtmdW5jdGlvbiBvblBpY2tIaXQoaW5zdGFudEV2ZW50KXtzZWxlY3Rpb24ucHVzaChpbnN0YW50RXZlbnQpO30KLWNvbnN0IGluc3RhbnRFdmVudFdpZHRoPTMqdmlld1BpeFdpZHRoV29ybGQ7dHIuYi5pdGVyYXRlT3ZlckludGVyc2VjdGluZ0ludGVydmFscyh0aGlzLm1vZGVsXy5pbnN0YW50RXZlbnRzLGZ1bmN0aW9uKHgpe3JldHVybiB4LnN0YXJ0O30sZnVuY3Rpb24oeCl7cmV0dXJuIHguZHVyYXRpb24raW5zdGFudEV2ZW50V2lkdGg7fSxsb1dYLGhpV1gsb25QaWNrSGl0LmJpbmQodGhpcykpO3RyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjay5wcm90b3R5cGUuYWRkSW50ZXJzZWN0aW5nRXZlbnRzSW5SYW5nZVRvU2VsZWN0aW9uSW5Xb3JsZFNwYWNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9LGFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uKHdvcmxkWCx3b3JsZE1heERpc3QsbG9ZLGhpWSxzZWxlY3Rpb24pe3RoaXMuYWRkQ2xvc2VzdEluc3RhbnRFdmVudFRvU2VsZWN0aW9uKHRoaXMubW9kZWxfLmluc3RhbnRFdmVudHMsd29ybGRYLHdvcmxkTWF4RGlzdCxzZWxlY3Rpb24pO3RyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjay5wcm90b3R5cGUuYWRkQ2xvc2VzdEV2ZW50VG9TZWxlY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpO319O3JldHVybntNb2RlbFRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgWEF4aXNUcmFjaz10ci51aS5iLmRlZmluZSgneC1heGlzLXRyYWNrJyx0ci51aS50cmFja3MuVHJhY2spO1hBeGlzVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ3gtYXhpcy10cmFjaycpO3RoaXMuc3RyaW5nc19zZWNzXz1bXTt0aGlzLnN0cmluZ3NfbXNlY3NfPVtdO3RoaXMuc3RyaW5nc191c2Vjc189W107dGhpcy5zdHJpbmdzX25zZWNzXz1bXTt0aGlzLnZpZXdwb3J0Q2hhbmdlXz10aGlzLnZpZXdwb3J0Q2hhbmdlXy5iaW5kKHRoaXMpO3ZpZXdwb3J0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsdGhpcy52aWV3cG9ydENoYW5nZV8pO2NvbnN0IGhlYWRpbmc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1oZWFkaW5nJyk7aGVhZGluZy5hcnJvd1Zpc2libGU9ZmFsc2U7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQoaGVhZGluZyk7fSxkZXRhY2goKXt0ci51aS50cmFja3MuVHJhY2sucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpO3RoaXMudmlld3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJyx0aGlzLnZpZXdwb3J0Q2hhbmdlXyk7fSx2aWV3cG9ydENoYW5nZV8oKXtpZih0aGlzLnZpZXdwb3J0LmludGVyZXN0UmFuZ2UuaXNFbXB0eSl7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LnJlbW92ZSgndGFsbC1tb2RlJyk7fWVsc2V7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgndGFsbC1tb2RlJyk7fX0sZHJhdyh0eXBlLHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0KXtzd2l0Y2godHlwZSl7Y2FzZSB0ci51aS50cmFja3MuRHJhd1R5cGUuR1JJRDp0aGlzLmRyYXdHcmlkXyh2aWV3TFdvcmxkLHZpZXdSV29ybGQpO2JyZWFrO2Nhc2UgdHIudWkudHJhY2tzLkRyYXdUeXBlLk1BUktFUlM6dGhpcy5kcmF3TWFya2Vyc18odmlld0xXb3JsZCx2aWV3UldvcmxkKTticmVhazt9fSxkcmF3R3JpZF8odmlld0xXb3JsZCx2aWV3UldvcmxkKXtjb25zdCBjdHg9dGhpcy5jb250ZXh0KCk7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCBjYW52YXNCb3VuZHM9Y3R4LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCB0cmFja0JvdW5kcz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IHdpZHRoPWNhbnZhc0JvdW5kcy53aWR0aCpwaXhlbFJhdGlvO2NvbnN0IGhlaWdodD10cmFja0JvdW5kcy5oZWlnaHQqcGl4ZWxSYXRpbztjb25zdCBoYXNJbnRlcmVzdFJhbmdlPSF0aGlzLnZpZXdwb3J0LmludGVyZXN0UmFuZ2UuaXNFbXB0eTtjb25zdCB4QXhpc0hlaWdodFB4PWhhc0ludGVyZXN0UmFuZ2U/KGhlaWdodCoyKS81OmhlaWdodDtjb25zdCB2cD10aGlzLnZpZXdwb3J0O2NvbnN0IGR0PXZwLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO3ZwLnVwZGF0ZU1ham9yTWFya0RhdGEodmlld0xXb3JsZCx2aWV3UldvcmxkKTtjb25zdCBtYWpvck1hcmtEaXN0YW5jZVdvcmxkPXZwLm1ham9yTWFya1dvcmxkUG9zaXRpb25zLmxlbmd0aD4xP3ZwLm1ham9yTWFya1dvcmxkUG9zaXRpb25zWzFdLXZwLm1ham9yTWFya1dvcmxkUG9zaXRpb25zWzBdOjA7Y29uc3QgbnVtVGlja3NQZXJNYWpvcj01O2NvbnN0IG1pbm9yTWFya0Rpc3RhbmNlV29ybGQ9bWFqb3JNYXJrRGlzdGFuY2VXb3JsZC9udW1UaWNrc1Blck1ham9yO2NvbnN0IG1pbm9yTWFya0Rpc3RhbmNlUHg9ZHQueFdvcmxkVmVjdG9yVG9WaWV3KG1pbm9yTWFya0Rpc3RhbmNlV29ybGQpO2NvbnN0IG1pbm9yVGlja0hlaWdodD1NYXRoLmZsb29yKHhBeGlzSGVpZ2h0UHgqMC4yNSk7Y3R4LnNhdmUoKTtjdHgubGluZVdpZHRoPU1hdGgucm91bmQocGl4ZWxSYXRpbyk7Y29uc3QgY3Jpc3BMaW5lQ29ycmVjdGlvbj0oY3R4LmxpbmVXaWR0aCUyKS8yO2N0eC50cmFuc2xhdGUoY3Jpc3BMaW5lQ29ycmVjdGlvbiwtY3Jpc3BMaW5lQ29ycmVjdGlvbik7Y3R4LmZpbGxTdHlsZT0ncmdiKDAsIDAsIDApJztjdHguc3Ryb2tlU3R5bGU9J3JnYigwLCAwLCAwKSc7Y3R4LnRleHRBbGlnbj0nbGVmdCc7Y3R4LnRleHRCYXNlbGluZT0ndG9wJztjdHguZm9udD0oOSpwaXhlbFJhdGlvKSsncHggc2Fucy1zZXJpZic7Y29uc3QgdGlja0xhYmVscz1bXTtjdHguYmVnaW5QYXRoKCk7Zm9yKGxldCBpPTA7aTx2cC5tYWpvck1hcmtXb3JsZFBvc2l0aW9ucy5sZW5ndGg7aSsrKXtjb25zdCBjdXJYV29ybGQ9dnAubWFqb3JNYXJrV29ybGRQb3NpdGlvbnNbaV07Y29uc3QgY3VyWFZpZXc9ZHQueFdvcmxkVG9WaWV3KGN1clhXb3JsZCk7Y29uc3QgZGlzcGxheVRleHQ9dnAubWFqb3JNYXJrVW5pdC5mb3JtYXQoY3VyWFdvcmxkLHtkZWx0YVZhbHVlOm1ham9yTWFya0Rpc3RhbmNlV29ybGR9KTtjdHguZmlsbFRleHQoZGlzcGxheVRleHQsY3VyWFZpZXcrKDIqcGl4ZWxSYXRpbyksMCk7dHIudWkuYi5kcmF3TGluZShjdHgsY3VyWFZpZXcsMCxjdXJYVmlldyx4QXhpc0hlaWdodFB4KTtpZihtaW5vck1hcmtEaXN0YW5jZVB4KXtmb3IobGV0IGo9MTtqPG51bVRpY2tzUGVyTWFqb3I7KytqKXtjb25zdCB4Vmlldz1NYXRoLmZsb29yKGN1clhWaWV3K21pbm9yTWFya0Rpc3RhbmNlUHgqaik7dHIudWkuYi5kcmF3TGluZShjdHgseFZpZXcseEF4aXNIZWlnaHRQeC1taW5vclRpY2tIZWlnaHQseFZpZXcseEF4aXNIZWlnaHRQeCk7fX19Ci1jdHguc3Ryb2tlU3R5bGU9J3JnYigwLCAwLCAwKSc7dHIudWkuYi5kcmF3TGluZShjdHgsMCxoZWlnaHQsd2lkdGgsaGVpZ2h0KTtjdHguc3Ryb2tlKCk7aWYoIWhhc0ludGVyZXN0UmFuZ2UpcmV0dXJuO3RyLnVpLmIuZHJhd0xpbmUoY3R4LDAseEF4aXNIZWlnaHRQeCx3aWR0aCx4QXhpc0hlaWdodFB4KTtjdHguc3Ryb2tlKCk7bGV0IGRpc3BsYXlEaXN0YW5jZTtjb25zdCBkaXNwbGF5VGV4dENvbG9yPSdyZ2IoMCwwLDApJztjb25zdCBhcnJvd1NwYWNpbmc9MTAqcGl4ZWxSYXRpbztjb25zdCBhcnJvd0NvbG9yPSdyZ2IoMTI4LDEyMSwxMjEpJztjb25zdCBhcnJvd1Bvc1k9eEF4aXNIZWlnaHRQeCoxLjc1O2NvbnN0IGFycm93V2lkdGhWaWV3PTMqcGl4ZWxSYXRpbztjb25zdCBhcnJvd0xlbmd0aFZpZXc9MTAqcGl4ZWxSYXRpbztjb25zdCBzcGFjZUZvckFycm93c1ZpZXc9MiooYXJyb3dXaWR0aFZpZXcrYXJyb3dTcGFjaW5nKTtjdHgudGV4dEJhc2VsaW5lPSdtaWRkbGUnO2N0eC5mb250PSgxNCpwaXhlbFJhdGlvKSsncHggc2Fucy1zZXJpZic7Y29uc3QgdGV4dFBvc1k9YXJyb3dQb3NZO2NvbnN0IGludGVyZXN0UmFuZ2U9dnAuaW50ZXJlc3RSYW5nZTtpZihpbnRlcmVzdFJhbmdlLnJhbmdlPT09MCl7Y29uc3QgbWFya2VyV29ybGQ9aW50ZXJlc3RSYW5nZS5taW47Y29uc3QgbWFya2VyVmlldz1kdC54V29ybGRUb1ZpZXcobWFya2VyV29ybGQpO2NvbnN0IHRleHRUb0RyYXc9dnAubWFqb3JNYXJrVW5pdC5mb3JtYXQobWFya2VyV29ybGQpO2xldCB0ZXh0TGVmdFZpZXc9bWFya2VyVmlldys0KnBpeGVsUmF0aW87Y29uc3QgdGV4dFdpZHRoVmlldz1jdHgubWVhc3VyZVRleHQodGV4dFRvRHJhdykud2lkdGg7aWYodGV4dExlZnRWaWV3K3RleHRXaWR0aFZpZXc+d2lkdGgpe3RleHRMZWZ0Vmlldz1tYXJrZXJWaWV3LTQqcGl4ZWxSYXRpby10ZXh0V2lkdGhWaWV3O30KLWN0eC5maWxsU3R5bGU9ZGlzcGxheVRleHRDb2xvcjtjdHguZmlsbFRleHQodGV4dFRvRHJhdyx0ZXh0TGVmdFZpZXcsdGV4dFBvc1kpO3JldHVybjt9Ci1jb25zdCBsZWZ0TWFya2VyPWludGVyZXN0UmFuZ2UubWluO2NvbnN0IHJpZ2h0TWFya2VyPWludGVyZXN0UmFuZ2UubWF4O2NvbnN0IGxlZnRNYXJrZXJWaWV3PWR0LnhXb3JsZFRvVmlldyhsZWZ0TWFya2VyKTtjb25zdCByaWdodE1hcmtlclZpZXc9ZHQueFdvcmxkVG9WaWV3KHJpZ2h0TWFya2VyKTtjb25zdCBkaXN0YW5jZUJldHdlZW5NYXJrZXJzPWludGVyZXN0UmFuZ2UucmFuZ2U7Y29uc3QgZGlzdGFuY2VCZXR3ZWVuTWFya2Vyc1ZpZXc9ZHQueFdvcmxkVmVjdG9yVG9WaWV3KGRpc3RhbmNlQmV0d2Vlbk1hcmtlcnMpO2NvbnN0IHBvc2l0aW9uSW5NaWRkbGVPZk1hcmtlcnNWaWV3PWxlZnRNYXJrZXJWaWV3KyhkaXN0YW5jZUJldHdlZW5NYXJrZXJzVmlldy8yKTtjb25zdCB0ZXh0VG9EcmF3PXZwLm1ham9yTWFya1VuaXQuZm9ybWF0KGRpc3RhbmNlQmV0d2Vlbk1hcmtlcnMpO2NvbnN0IHRleHRXaWR0aFZpZXc9Y3R4Lm1lYXN1cmVUZXh0KHRleHRUb0RyYXcpLndpZHRoO2NvbnN0IHNwYWNlRm9yQXJyb3dzQW5kVGV4dFZpZXc9dGV4dFdpZHRoVmlldytzcGFjZUZvckFycm93c1ZpZXcrYXJyb3dTcGFjaW5nO2xldCB0ZXh0TGVmdFZpZXc9cG9zaXRpb25Jbk1pZGRsZU9mTWFya2Vyc1ZpZXctdGV4dFdpZHRoVmlldy8yO2NvbnN0IHRleHRSaWdodFZpZXc9dGV4dExlZnRWaWV3K3RleHRXaWR0aFZpZXc7aWYoc3BhY2VGb3JBcnJvd3NBbmRUZXh0Vmlldz5kaXN0YW5jZUJldHdlZW5NYXJrZXJzVmlldyl7dGV4dExlZnRWaWV3PXJpZ2h0TWFya2VyVmlldysyKmFycm93U3BhY2luZztpZih0ZXh0TGVmdFZpZXcrdGV4dFdpZHRoVmlldz53aWR0aCl7dGV4dExlZnRWaWV3PWxlZnRNYXJrZXJWaWV3LTIqYXJyb3dTcGFjaW5nLXRleHRXaWR0aFZpZXc7fQotY3R4LmZpbGxTdHlsZT1kaXNwbGF5VGV4dENvbG9yO2N0eC5maWxsVGV4dCh0ZXh0VG9EcmF3LHRleHRMZWZ0Vmlldyx0ZXh0UG9zWSk7Y3R4LnN0cm9rZVN0eWxlPWFycm93Q29sb3I7Y3R4LmJlZ2luUGF0aCgpO3RyLnVpLmIuZHJhd0xpbmUoY3R4LGxlZnRNYXJrZXJWaWV3LGFycm93UG9zWSxyaWdodE1hcmtlclZpZXcsYXJyb3dQb3NZKTtjdHguc3Ryb2tlKCk7Y3R4LmZpbGxTdHlsZT1hcnJvd0NvbG9yO3RyLnVpLmIuZHJhd0Fycm93KGN0eCxsZWZ0TWFya2VyVmlldy0xLjUqYXJyb3dTcGFjaW5nLGFycm93UG9zWSxsZWZ0TWFya2VyVmlldyxhcnJvd1Bvc1ksYXJyb3dMZW5ndGhWaWV3LGFycm93V2lkdGhWaWV3KTt0ci51aS5iLmRyYXdBcnJvdyhjdHgscmlnaHRNYXJrZXJWaWV3KzEuNSphcnJvd1NwYWNpbmcsYXJyb3dQb3NZLHJpZ2h0TWFya2VyVmlldyxhcnJvd1Bvc1ksYXJyb3dMZW5ndGhWaWV3LGFycm93V2lkdGhWaWV3KTt9ZWxzZSBpZihzcGFjZUZvckFycm93c1ZpZXc8PWRpc3RhbmNlQmV0d2Vlbk1hcmtlcnNWaWV3KXtsZXQgbGVmdEFycm93U3RhcnQ7bGV0IHJpZ2h0QXJyb3dTdGFydDtpZihzcGFjZUZvckFycm93c0FuZFRleHRWaWV3PD1kaXN0YW5jZUJldHdlZW5NYXJrZXJzVmlldyl7Y3R4LmZpbGxTdHlsZT1kaXNwbGF5VGV4dENvbG9yO2N0eC5maWxsVGV4dCh0ZXh0VG9EcmF3LHRleHRMZWZ0Vmlldyx0ZXh0UG9zWSk7bGVmdEFycm93U3RhcnQ9dGV4dExlZnRWaWV3LWFycm93U3BhY2luZztyaWdodEFycm93U3RhcnQ9dGV4dFJpZ2h0VmlldythcnJvd1NwYWNpbmc7fWVsc2V7bGVmdEFycm93U3RhcnQ9cG9zaXRpb25Jbk1pZGRsZU9mTWFya2Vyc1ZpZXc7cmlnaHRBcnJvd1N0YXJ0PXBvc2l0aW9uSW5NaWRkbGVPZk1hcmtlcnNWaWV3O30KLWN0eC5zdHJva2VTdHlsZT1hcnJvd0NvbG9yO2N0eC5maWxsU3R5bGU9YXJyb3dDb2xvcjt0ci51aS5iLmRyYXdBcnJvdyhjdHgsbGVmdEFycm93U3RhcnQsYXJyb3dQb3NZLGxlZnRNYXJrZXJWaWV3LGFycm93UG9zWSxhcnJvd0xlbmd0aFZpZXcsYXJyb3dXaWR0aFZpZXcpO3RyLnVpLmIuZHJhd0Fycm93KGN0eCxyaWdodEFycm93U3RhcnQsYXJyb3dQb3NZLHJpZ2h0TWFya2VyVmlldyxhcnJvd1Bvc1ksYXJyb3dMZW5ndGhWaWV3LGFycm93V2lkdGhWaWV3KTt9Ci1jdHgucmVzdG9yZSgpO30sZHJhd01hcmtlcnNfKHZpZXdMV29ybGQsdmlld1JXb3JsZCl7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCB0cmFja0JvdW5kcz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IHZpZXdIZWlnaHQ9dHJhY2tCb3VuZHMuaGVpZ2h0KnBpeGVsUmF0aW87aWYoIXRoaXMudmlld3BvcnQuaW50ZXJlc3RSYW5nZS5pc0VtcHR5KXt0aGlzLnZpZXdwb3J0LmludGVyZXN0UmFuZ2UuZHJhdyh0aGlzLmNvbnRleHQoKSx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdmlld0hlaWdodCk7fX0sYWRkSW50ZXJzZWN0aW5nRXZlbnRzSW5SYW5nZVRvU2VsZWN0aW9uKGxvVlgsaGlWWCxsb1ksaGlZLHNlbGVjdGlvbil7fSxhZGRBbGxFdmVudHNNYXRjaGluZ0ZpbHRlclRvU2VsZWN0aW9uKGZpbHRlcixzZWxlY3Rpb24pe319O3JldHVybntYQXhpc1RyYWNrLH07fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS10aW1lbGluZS10cmFjay12aWV3JyxyZWFkeSgpe3RoaXMuZGlzcGxheVRyYW5zZm9ybV89bmV3IHRyLnVpLlRpbWVsaW5lRGlzcGxheVRyYW5zZm9ybSgpO3RoaXMubW9kZWxfPXVuZGVmaW5lZDt0aGlzLnRpbWVsaW5lVmlld189dW5kZWZpbmVkO3RoaXMucG9sbElmVmlld3BvcnRBdHRhY2hlZEludGVydmFsXz11bmRlZmluZWQ7dGhpcy52aWV3cG9ydF89bmV3IHRyLnVpLlRpbWVsaW5lVmlld3BvcnQodGhpcyk7dGhpcy52aWV3cG9ydERpc3BsYXlUcmFuc2Zvcm1BdE1vdXNlRG93bl89dW5kZWZpbmVkO3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfPXVuZGVmaW5lZDt0aGlzLnJ1bGVyVHJhY2tDb250YWluZXJfPW5ldyB0ci51aS50cmFja3MuRHJhd2luZ0NvbnRhaW5lcih0aGlzLnZpZXdwb3J0Xyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5ydWxlclRyYWNrQ29udGFpbmVyXyk7dGhpcy5ydWxlclRyYWNrQ29udGFpbmVyXy5pbnZhbGlkYXRlKCk7dGhpcy5ydWxlclRyYWNrQ29udGFpbmVyXy5zdHlsZS5vdmVyZmxvd1k9J2hpZGRlbic7dGhpcy5ydWxlclRyYWNrQ29udGFpbmVyXy5zdHlsZS5mbGV4U2hyaW5rPScwJzt0aGlzLnJ1bGVyVHJhY2tfPW5ldyB0ci51aS50cmFja3MuWEF4aXNUcmFjayh0aGlzLnZpZXdwb3J0Xyk7UG9seW1lci5kb20odGhpcy5ydWxlclRyYWNrQ29udGFpbmVyXykuYXBwZW5kQ2hpbGQodGhpcy5ydWxlclRyYWNrXyk7dGhpcy51cHBlck1vZGVsVHJhY2tfPW5ldyB0ci51aS50cmFja3MuTW9kZWxUcmFjayh0aGlzLnZpZXdwb3J0Xyk7dGhpcy51cHBlck1vZGVsVHJhY2tfLnVwcGVyTW9kZT10cnVlO1BvbHltZXIuZG9tKHRoaXMucnVsZXJUcmFja0NvbnRhaW5lcl8pLmFwcGVuZENoaWxkKHRoaXMudXBwZXJNb2RlbFRyYWNrXyk7dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXz1uZXcgdHIudWkudHJhY2tzLkRyYXdpbmdDb250YWluZXIodGhpcy52aWV3cG9ydF8pO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8pO3RoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uc3R5bGUuZmxleEdyb3c9JzEnO3RoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uaW52YWxpZGF0ZSgpO3RoaXMudmlld3BvcnRfLm1vZGVsVHJhY2tDb250YWluZXI9dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXzt0aGlzLm1vZGVsVHJhY2tfPW5ldyB0ci51aS50cmFja3MuTW9kZWxUcmFjayh0aGlzLnZpZXdwb3J0Xyk7UG9seW1lci5kb20odGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXykuYXBwZW5kQ2hpbGQodGhpcy5tb2RlbFRyYWNrXyk7dGhpcy50aW1pbmdUb29sXz1uZXcgdHIudWkuYi5UaW1pbmdUb29sKHRoaXMudmlld3BvcnRfLHRoaXMpO3RoaXMuaW5pdE1vdXNlTW9kZVNlbGVjdG9yKCk7dGhpcy5oaWRlRHJhZ0JveF8oKTt0aGlzLmluaXRIaW50VGV4dF8oKTt0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZF89dGhpcy5vblNlbGVjdGlvbkNoYW5nZWRfLmJpbmQodGhpcyk7dGhpcy5vbkRibENsaWNrXz10aGlzLm9uRGJsQ2xpY2tfLmJpbmQodGhpcyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsdGhpcy5vbkRibENsaWNrXyk7dGhpcy5vbk1vdXNlV2hlZWxfPXRoaXMub25Nb3VzZVdoZWVsXy5iaW5kKHRoaXMpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V3aGVlbCcsdGhpcy5vbk1vdXNlV2hlZWxfKTt0aGlzLm9uTW91c2VEb3duXz10aGlzLm9uTW91c2VEb3duXy5iaW5kKHRoaXMpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJyx0aGlzLm9uTW91c2VEb3duXyk7dGhpcy5vbk1vdXNlTW92ZV89dGhpcy5vbk1vdXNlTW92ZV8uYmluZCh0aGlzKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsdGhpcy5vbk1vdXNlTW92ZV8pO3RoaXMub25Ub3VjaFN0YXJ0Xz10aGlzLm9uVG91Y2hTdGFydF8uYmluZCh0aGlzKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLHRoaXMub25Ub3VjaFN0YXJ0Xyk7dGhpcy5vblRvdWNoTW92ZV89dGhpcy5vblRvdWNoTW92ZV8uYmluZCh0aGlzKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsdGhpcy5vblRvdWNoTW92ZV8pO3RoaXMub25Ub3VjaEVuZF89dGhpcy5vblRvdWNoRW5kXy5iaW5kKHRoaXMpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLHRoaXMub25Ub3VjaEVuZF8pO3RoaXMuYWRkSG90S2V5c18oKTt0aGlzLm1vdXNlVmlld1Bvc0F0TW91c2VEb3duXz17eDowLHk6MH07dGhpcy5sYXN0TW91c2VWaWV3UG9zXz17eDowLHk6MH07dGhpcy5sYXN0VG91Y2hWaWV3UG9zaXRpb25zXz1bXTt0aGlzLmFsZXJ0Xz11bmRlZmluZWQ7dGhpcy5pc1Bhbm5pbmdBbmRTY2FubmluZ189ZmFsc2U7dGhpcy5pc1pvb21pbmdfPWZhbHNlO30saW5pdE1vdXNlTW9kZVNlbGVjdG9yKCl7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1tb3VzZS1tb2RlLXNlbGVjdG9yJyk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8udGFyZ2V0RWxlbWVudD10aGlzO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMubW91c2VNb2RlU2VsZWN0b3JfKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdiZWdpbnBhbicsdGhpcy5vbkJlZ2luUGFuU2Nhbl8uYmluZCh0aGlzKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcigndXBkYXRlcGFuJyx0aGlzLm9uVXBkYXRlUGFuU2Nhbl8uYmluZCh0aGlzKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcignZW5kcGFuJyx0aGlzLm9uRW5kUGFuU2Nhbl8uYmluZCh0aGlzKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcignYmVnaW5zZWxlY3Rpb24nLHRoaXMub25CZWdpblNlbGVjdGlvbl8uYmluZCh0aGlzKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcigndXBkYXRlc2VsZWN0aW9uJyx0aGlzLm9uVXBkYXRlU2VsZWN0aW9uXy5iaW5kKHRoaXMpKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdlbmRzZWxlY3Rpb24nLHRoaXMub25FbmRTZWxlY3Rpb25fLmJpbmQodGhpcykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ2JlZ2luem9vbScsdGhpcy5vbkJlZ2luWm9vbV8uYmluZCh0aGlzKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcigndXBkYXRlem9vbScsdGhpcy5vblVwZGF0ZVpvb21fLmJpbmQodGhpcykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZHpvb20nLHRoaXMub25FbmRab29tXy5iaW5kKHRoaXMpKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdlbnRlcnRpbWluZycsdGhpcy50aW1pbmdUb29sXy5vbkVudGVyVGltaW5nLmJpbmQodGhpcy50aW1pbmdUb29sXykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ2JlZ2ludGltaW5nJyx0aGlzLnRpbWluZ1Rvb2xfLm9uQmVnaW5UaW1pbmcuYmluZCh0aGlzLnRpbWluZ1Rvb2xfKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcigndXBkYXRldGltaW5nJyx0aGlzLnRpbWluZ1Rvb2xfLm9uVXBkYXRlVGltaW5nLmJpbmQodGhpcy50aW1pbmdUb29sXykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZHRpbWluZycsdGhpcy50aW1pbmdUb29sXy5vbkVuZFRpbWluZy5iaW5kKHRoaXMudGltaW5nVG9vbF8pKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdleGl0dGltaW5nJyx0aGlzLnRpbWluZ1Rvb2xfLm9uRXhpdFRpbWluZy5iaW5kKHRoaXMudGltaW5nVG9vbF8pKTtjb25zdCBtPXRyLnVpLmIuTU9VU0VfU0VMRUNUT1JfTU9ERTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5zdXBwb3J0ZWRNb2RlTWFzaz1tLlNFTEVDVElPTnxtLlBBTlNDQU58bS5aT09NfG0uVElNSU5HO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnNldHRpbmdzS2V5PSd0aW1lbGluZVRyYWNrVmlldy5tb3VzZU1vZGVTZWxlY3Rvcic7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc2V0S2V5Q29kZUZvck1vZGUobS5QQU5TQ0FOLCcyJy5jaGFyQ29kZUF0KDApKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5zZXRLZXlDb2RlRm9yTW9kZShtLlNFTEVDVElPTiwnMScuY2hhckNvZGVBdCgwKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc2V0S2V5Q29kZUZvck1vZGUobS5aT09NLCczJy5jaGFyQ29kZUF0KDApKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5zZXRLZXlDb2RlRm9yTW9kZShtLlRJTUlORywnNCcuY2hhckNvZGVBdCgwKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc2V0TW9kaWZpZXJGb3JBbHRlcm5hdGVNb2RlKG0uU0VMRUNUSU9OLHRyLnVpLmIuTU9ESUZJRVIuU0hJRlQpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnNldE1vZGlmaWVyRm9yQWx0ZXJuYXRlTW9kZShtLlBBTlNDQU4sdHIudWkuYi5NT0RJRklFUi5TUEFDRSk7fSxnZXQgYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIoKXtyZXR1cm4gdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl87fSxzZXQgYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIoYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIpe2lmKHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfKXt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXy5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkXyk7fQotdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl89YnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXI7aWYodGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8pe3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsdGhpcy5vblNlbGVjdGlvbkNoYW5nZWRfKTt9fSxzZXQgdGltZWxpbmVWaWV3KHZpZXcpe3RoaXMudGltZWxpbmVWaWV3Xz12aWV3O30sb25TZWxlY3Rpb25DaGFuZ2VkXygpe3RoaXMuc2hvd0hpbnRUZXh0XygnUHJlc3MgXCdtXCcgdG8gbWFyayBjdXJyZW50IHNlbGVjdGlvbicpO3RoaXMudmlld3BvcnRfLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aHJvdyBuZXcgRXJyb3IoJ0RPIE5PVCBDQUxMIFRISVMnKTt9LHNldCBoaWdobGlnaHQoaGlnaGxpZ2h0KXt0aHJvdyBuZXcgRXJyb3IoJ0RPIE5PVCBDQUxMIFRISVMnKTt9LGRldGFjaCgpe3RoaXMubW9kZWxUcmFja18uZGV0YWNoKCk7dGhpcy51cHBlck1vZGVsVHJhY2tfLmRldGFjaCgpO2lmKHRoaXMucG9sbElmVmlld3BvcnRBdHRhY2hlZEludGVydmFsXyl7d2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5wb2xsSWZWaWV3cG9ydEF0dGFjaGVkSW50ZXJ2YWxfKTt0aGlzLnBvbGxJZlZpZXdwb3J0QXR0YWNoZWRJbnRlcnZhbF89dW5kZWZpbmVkO30KLXRoaXMudmlld3BvcnRfLmRldGFjaCgpO30sZ2V0IHZpZXdwb3J0KCl7cmV0dXJuIHRoaXMudmlld3BvcnRfO30sZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30sc2V0IG1vZGVsKG1vZGVsKXtpZighbW9kZWwpe3Rocm93IG5ldyBFcnJvcignTW9kZWwgY2Fubm90IGJlIHVuZGVmaW5lZCcpO30KLWNvbnN0IG1vZGVsSW5zdGFuY2VDaGFuZ2VkPXRoaXMubW9kZWxfIT09bW9kZWw7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy5tb2RlbFRyYWNrXy5tb2RlbD1tb2RlbDt0aGlzLnVwcGVyTW9kZWxUcmFja18ubW9kZWw9bW9kZWw7aWYobW9kZWxJbnN0YW5jZUNoYW5nZWQpe3RoaXMucG9sbElmVmlld3BvcnRBdHRhY2hlZEludGVydmFsXz13aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5wb2xsSWZWaWV3cG9ydEF0dGFjaGVkXy5iaW5kKHRoaXMpLDI1MCk7fX0sZ2V0IGhhc1Zpc2libGVDb250ZW50KCl7cmV0dXJuIHRoaXMubW9kZWxUcmFja18uaGFzVmlzaWJsZUNvbnRlbnR8fHRoaXMudXBwZXJNb2RlbFRyYWNrXy5oYXNWaXNpYmxlQ29udGVudDt9LHBvbGxJZlZpZXdwb3J0QXR0YWNoZWRfKCl7aWYoIXRoaXMudmlld3BvcnRfLmlzQXR0YWNoZWRUb0RvY3VtZW50T3JJblRlc3RNb2RlfHx0aGlzLnZpZXdwb3J0Xy5jbGllbnRXaWR0aD09PTApe3JldHVybjt9Ci13aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJyx0aGlzLnZpZXdwb3J0Xy5kaXNwYXRjaENoYW5nZUV2ZW50KTt3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnBvbGxJZlZpZXdwb3J0QXR0YWNoZWRJbnRlcnZhbF8pO3RoaXMucG9sbElmVmlld3BvcnRBdHRhY2hlZEludGVydmFsXz11bmRlZmluZWQ7dGhpcy5zZXRJbml0aWFsVmlld3BvcnRfKCk7fSxzZXRJbml0aWFsVmlld3BvcnRfKCl7dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy51cGRhdGVDYW52YXNTaXplSWZOZWVkZWRfKCk7Y29uc3Qgdz10aGlzLm1vZGVsVHJhY2tDb250YWluZXJfLmNhbnZhcy53aWR0aDtsZXQgbWluO2xldCByYW5nZTtpZih0aGlzLm1vZGVsXy5ib3VuZHMuaXNFbXB0eSl7bWluPTA7cmFuZ2U9MTAwMDt9ZWxzZSBpZih0aGlzLm1vZGVsXy5ib3VuZHMucmFuZ2U9PT0wKXttaW49dGhpcy5tb2RlbF8uYm91bmRzLm1pbjtyYW5nZT0xMDAwO31lbHNle21pbj10aGlzLm1vZGVsXy5ib3VuZHMubWluO3JhbmdlPXRoaXMubW9kZWxfLmJvdW5kcy5yYW5nZTt9Ci1jb25zdCBib29zdD1yYW5nZSowLjE1O3RoaXMuZGlzcGxheVRyYW5zZm9ybV8uc2V0KHRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtKTt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLnhTZXRXb3JsZEJvdW5kcyhtaW4tYm9vc3QsbWluK3JhbmdlK2Jvb3N0LHcpO3RoaXMudmlld3BvcnRfLnNldERpc3BsYXlUcmFuc2Zvcm1JbW1lZGlhdGVseSh0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fKTt9LGFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb25Bc1Rhc2soZmlsdGVyLHNlbGVjdGlvbil7Y29uc3QgbW9kZWxUcmFjaz10aGlzLm1vZGVsVHJhY2tfO2NvbnN0IGZpcnN0VD1tb2RlbFRyYWNrLmFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb25Bc1Rhc2soZmlsdGVyLHNlbGVjdGlvbik7Y29uc3QgbGFzdFQ9Zmlyc3RULmFmdGVyKGZ1bmN0aW9uKCl7dGhpcy51cHBlck1vZGVsVHJhY2tfLmFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb24oZmlsdGVyLHNlbGVjdGlvbik7fSx0aGlzKTtyZXR1cm4gZmlyc3RUO30sb25Nb3VzZU1vdmVfKGUpe2lmKHRoaXMuaXNab29taW5nXylyZXR1cm47dGhpcy5zdG9yZUxhc3RNb3VzZVBvc18oZSk7fSxvblRvdWNoU3RhcnRfKGUpe3RoaXMuc3RvcmVMYXN0VG91Y2hQb3NpdGlvbnNfKGUpO3RoaXMuZm9jdXNFbGVtZW50c18oKTt9LG9uVG91Y2hNb3ZlXyhlKXtlLnByZXZlbnREZWZhdWx0KCk7dGhpcy5vblVwZGF0ZVRyYW5zZm9ybUZvclRvdWNoXyhlKTt9LG9uVG91Y2hFbmRfKGUpe3RoaXMuc3RvcmVMYXN0VG91Y2hQb3NpdGlvbnNfKGUpO3RoaXMuZm9jdXNFbGVtZW50c18oKTt9LGFkZEhvdEtleXNfKCl7dGhpcy5hZGRLZXlEb3duSG90S2V5c18oKTt0aGlzLmFkZEtleVByZXNzSG90S2V5c18oKTt9LGFkZEtleVByZXNzSG90S2V5KGRpY3Qpe2RpY3QuZXZlbnRUeXBlPSdrZXlwcmVzcyc7ZGljdC51c2VDYXB0dXJlPWZhbHNlO2RpY3QudGhpc0FyZz10aGlzO2NvbnN0IGJpbmRpbmc9bmV3IHRyLnVpLmIuSG90S2V5KGRpY3QpO3RoaXMuJC5ob3RrZXlfY29udHJvbGxlci5hZGRIb3RLZXkoYmluZGluZyk7fSxhZGRLZXlQcmVzc0hvdEtleXNfKCl7dGhpcy5hZGRLZXlQcmVzc0hvdEtleSh7a2V5Q29kZXM6Wyd3Jy5jaGFyQ29kZUF0KDApLCcsJy5jaGFyQ29kZUF0KDApXSxjYWxsYmFjayhlKXt0aGlzLnpvb21CeV8oMS41LHRydWUpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGVzOlsncycuY2hhckNvZGVBdCgwKSwnbycuY2hhckNvZGVBdCgwKV0sY2FsbGJhY2soZSl7dGhpcy56b29tQnlfKDEvMS41LHRydWUpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6J2cnLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5vbkdyaWRUb2dnbGVfKHRydWUpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6J0cnLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5vbkdyaWRUb2dnbGVfKGZhbHNlKTtlLnN0b3BQcm9wYWdhdGlvbigpO319KTt0aGlzLmFkZEtleVByZXNzSG90S2V5KHtrZXlDb2RlczpbJ1cnLmNoYXJDb2RlQXQoMCksJzwnLmNoYXJDb2RlQXQoMCldLGNhbGxiYWNrKGUpe3RoaXMuem9vbUJ5XygxMCx0cnVlKTtlLnN0b3BQcm9wYWdhdGlvbigpO319KTt0aGlzLmFkZEtleVByZXNzSG90S2V5KHtrZXlDb2RlczpbJ1MnLmNoYXJDb2RlQXQoMCksJ08nLmNoYXJDb2RlQXQoMCldLGNhbGxiYWNrKGUpe3RoaXMuem9vbUJ5XygxLzEwLHRydWUpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6J2EnLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5xdWV1ZVNtb290aFBhbl8odGhpcy52aWV3V2lkdGhfKjAuMywwKTtlLnN0b3BQcm9wYWdhdGlvbigpO319KTt0aGlzLmFkZEtleVByZXNzSG90S2V5KHtrZXlDb2RlczpbJ2QnLmNoYXJDb2RlQXQoMCksJ2UnLmNoYXJDb2RlQXQoMCldLGNhbGxiYWNrKGUpe3RoaXMucXVldWVTbW9vdGhQYW5fKHRoaXMudmlld1dpZHRoXyotMC4zLDApO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6J0EnLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5xdWV1ZVNtb290aFBhbl8odmlld1dpZHRoKjAuNSwwKTtlLnN0b3BQcm9wYWdhdGlvbigpO319KTt0aGlzLmFkZEtleVByZXNzSG90S2V5KHtrZXlDb2RlOidEJy5jaGFyQ29kZUF0KDApLGNhbGxiYWNrKGUpe3RoaXMucXVldWVTbW9vdGhQYW5fKHZpZXdXaWR0aCotMC41LDApO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6JzAnLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5zZXRJbml0aWFsVmlld3BvcnRfKCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSk7dGhpcy5hZGRLZXlQcmVzc0hvdEtleSh7a2V5Q29kZTonZicuY2hhckNvZGVBdCgwKSxjYWxsYmFjayhlKXt0aGlzLnpvb21Ub1NlbGVjdGlvbigpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6J20nLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5zZXRDdXJyZW50U2VsZWN0aW9uQXNJbnRlcmVzdFJhbmdlXygpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6J3AnLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5zZWxlY3RQb3dlclNhbXBsZXNJbkN1cnJlbnRUaW1lUmFuZ2VfKCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSk7dGhpcy5hZGRLZXlQcmVzc0hvdEtleSh7a2V5Q29kZTonaCcuY2hhckNvZGVBdCgwKSxjYWxsYmFjayhlKXt0aGlzLnRvZ2dsZUhpZ2hEZXRhaWxzXygpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO30sZ2V0IHZpZXdXaWR0aF8oKXtyZXR1cm4gdGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jYW52YXMuY2xpZW50V2lkdGg7fSxhZGRLZXlEb3duSG90S2V5c18oKXtjb25zdCBhZGRCaW5kaW5nPWZ1bmN0aW9uKGRpY3Qpe2RpY3QuZXZlbnRUeXBlPSdrZXlkb3duJztkaWN0LnVzZUNhcHR1cmU9ZmFsc2U7ZGljdC50aGlzQXJnPXRoaXM7Y29uc3QgYmluZGluZz1uZXcgdHIudWkuYi5Ib3RLZXkoZGljdCk7dGhpcy4kLmhvdGtleV9jb250cm9sbGVyLmFkZEhvdEtleShiaW5kaW5nKTt9LmJpbmQodGhpcyk7YWRkQmluZGluZyh7a2V5Q29kZTozNyxjYWxsYmFjayhlKXtjb25zdCBjdXJTZWw9dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8uc2VsZWN0aW9uO2NvbnN0IHNlbD10aGlzLnZpZXdwb3J0LmdldFNoaWZ0ZWRTZWxlY3Rpb24oY3VyU2VsLC0xKTtpZihzZWwpe3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuY2hhbmdlU2VsZWN0aW9uRnJvbVRpbWVsaW5lKHNlbCk7dGhpcy5wYW5Ub1NlbGVjdGlvbigpO31lbHNle3RoaXMucXVldWVTbW9vdGhQYW5fKHRoaXMudmlld1dpZHRoXyowLjMsMCk7fQotZS5wcmV2ZW50RGVmYXVsdCgpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO2FkZEJpbmRpbmcoe2tleUNvZGU6MzksY2FsbGJhY2soZSl7Y29uc3QgY3VyU2VsPXRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLnNlbGVjdGlvbjtjb25zdCBzZWw9dGhpcy52aWV3cG9ydC5nZXRTaGlmdGVkU2VsZWN0aW9uKGN1clNlbCwxKTtpZihzZWwpe3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuY2hhbmdlU2VsZWN0aW9uRnJvbVRpbWVsaW5lKHNlbCk7dGhpcy5wYW5Ub1NlbGVjdGlvbigpO31lbHNle3RoaXMucXVldWVTbW9vdGhQYW5fKC10aGlzLnZpZXdXaWR0aF8qMC4zLDApO30KLWUucHJldmVudERlZmF1bHQoKTtlLnN0b3BQcm9wYWdhdGlvbigpO319KTt9LG9uRGJsQ2xpY2tfKGUpe2lmKHRoaXMubW91c2VNb2RlU2VsZWN0b3JfLm1vZGUhPT10ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuU0VMRUNUSU9OKXtyZXR1cm47fQotY29uc3QgY3VyU2VsZWN0aW9uPXRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLnNlbGVjdGlvbjtpZighY3VyU2VsZWN0aW9uLmxlbmd0aHx8IXRyLmIuZ2V0T25seUVsZW1lbnQoY3VyU2VsZWN0aW9uKS50aXRsZSl7cmV0dXJuO30KLWNvbnN0IHNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtjb25zdCBmaWx0ZXI9bmV3IHRyLmMuRXhhY3RUaXRsZUZpbHRlcih0ci5iLmdldE9ubHlFbGVtZW50KGN1clNlbGVjdGlvbikudGl0bGUpO3RoaXMubW9kZWxUcmFja18uYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbihmaWx0ZXIsc2VsZWN0aW9uKTt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyLmNoYW5nZVNlbGVjdGlvbkZyb21UaW1lbGluZShzZWxlY3Rpb24pO30sb25Nb3VzZVdoZWVsXyhlKXtpZighZS5hbHRLZXkpcmV0dXJuO2NvbnN0IGRlbHRhPWUud2hlZWxEZWx0YS8xMjA7Y29uc3Qgem9vbVNjYWxlPU1hdGgucG93KDEuNSxkZWx0YSk7dGhpcy56b29tQnlfKHpvb21TY2FsZSk7ZS5wcmV2ZW50RGVmYXVsdCgpO30sb25Nb3VzZURvd25fKGUpe2lmKHRoaXMubW91c2VNb2RlU2VsZWN0b3JfLm1vZGUhPT10ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuU0VMRUNUSU9OKXtyZXR1cm47fQotaWYoZS50YXJnZXQhPT10aGlzLnJ1bGVyVHJhY2tfKXJldHVybjt0aGlzLmRyYWdCZWdpbkV2ZW50Xz11bmRlZmluZWQ7aWYodGhpcy54TmF2U3RyaW5nTWFya2VyXyl7dGhpcy5tb2RlbC5yZW1vdmVBbm5vdGF0aW9uKHRoaXMueE5hdlN0cmluZ01hcmtlcl8pO3RoaXMueE5hdlN0cmluZ01hcmtlcl89dW5kZWZpbmVkO30KLWNvbnN0IGR0PXRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO3RyLnVpLmIudHJhY2tNb3VzZU1vdmVzVW50aWxNb3VzZVVwKGZ1bmN0aW9uKGUpe2lmKGUudGFyZ2V0PT09dGhpcy5ydWxlclRyYWNrXylyZXR1cm47Y29uc3QgcmVsYXRpdmVQb3NpdGlvbj10aGlzLmV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpO2NvbnN0IGxvYz10ci5tb2RlbC5Mb2NhdGlvbi5mcm9tVmlld0Nvb3JkaW5hdGVzKHRoaXMudmlld3BvcnRfLHJlbGF0aXZlUG9zaXRpb24ueCxyZWxhdGl2ZVBvc2l0aW9uLnkpO2lmKCFsb2MpcmV0dXJuO2lmKHRoaXMuZ3VpZGVMaW5lQW5ub3RhdGlvbl89PT11bmRlZmluZWQpe3RoaXMuZ3VpZGVMaW5lQW5ub3RhdGlvbl89bmV3IHRyLm1vZGVsLlhNYXJrZXJBbm5vdGF0aW9uKGxvYy54V29ybGQpO3RoaXMubW9kZWwuYWRkQW5ub3RhdGlvbih0aGlzLmd1aWRlTGluZUFubm90YXRpb25fKTt9ZWxzZXt0aGlzLmd1aWRlTGluZUFubm90YXRpb25fLnRpbWVzdGFtcD1sb2MueFdvcmxkO3RoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uaW52YWxpZGF0ZSgpO30KLWNvbnN0IHN0YXRlPW5ldyB0ci51aS5iLlVJU3RhdGUobG9jLHRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLnNjYWxlWCk7dGhpcy50aW1lbGluZVZpZXdfLnNldEZpbmRDdGxUZXh0KHN0YXRlLnRvVXNlckZyaWVuZGx5U3RyaW5nKHRoaXMudmlld3BvcnRfKSk7fS5iaW5kKHRoaXMpLHVuZGVmaW5lZCxmdW5jdGlvbiBvbktleVVwRHVyaW5nRHJhZygpe2lmKHRoaXMuZHJhZ0JlZ2luRXZlbnRfKXt0aGlzLnNldERyYWdCb3hQb3NpdGlvbl8odGhpcy5kcmFnQm94WFN0YXJ0Xyx0aGlzLmRyYWdCb3hZU3RhcnRfLHRoaXMuZHJhZ0JveFhFbmRfLHRoaXMuZHJhZ0JveFlFbmRfKTt9fS5iaW5kKHRoaXMpKTt9LHF1ZXVlU21vb3RoUGFuXyh2aWV3RGVsdGFYLGRlbHRhWSl7Y29uc3QgZGVsdGFYPXRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLnhWaWV3VmVjdG9yVG9Xb3JsZCh2aWV3RGVsdGFYKTtjb25zdCBhbmltYXRpb249bmV3IHRyLnVpLlRpbWVsaW5lRGlzcGxheVRyYW5zZm9ybVBhbkFuaW1hdGlvbihkZWx0YVgsZGVsdGFZKTt0aGlzLnZpZXdwb3J0Xy5xdWV1ZURpc3BsYXlUcmFuc2Zvcm1BbmltYXRpb24oYW5pbWF0aW9uKTt9LHpvb21CeV8oc2NhbGUsc21vb3RoKXtpZihzY2FsZTw9MCl7cmV0dXJuO30KLXNtb290aD0hIXNtb290aDtjb25zdCB2cD10aGlzLnZpZXdwb3J0Xztjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IGdvYWxGb2NhbFBvaW50WFZpZXc9dGhpcy5sYXN0TW91c2VWaWV3UG9zXy54KnBpeGVsUmF0aW87Y29uc3QgZ29hbEZvY2FsUG9pbnRYV29ybGQ9dnAuY3VycmVudERpc3BsYXlUcmFuc2Zvcm0ueFZpZXdUb1dvcmxkKGdvYWxGb2NhbFBvaW50WFZpZXcpO2lmKHNtb290aCl7Y29uc3QgYW5pbWF0aW9uPW5ldyB0ci51aS5UaW1lbGluZURpc3BsYXlUcmFuc2Zvcm1ab29tVG9BbmltYXRpb24oZ29hbEZvY2FsUG9pbnRYV29ybGQsZ29hbEZvY2FsUG9pbnRYVmlldyx2cC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybS5wYW5ZLHNjYWxlKTt2cC5xdWV1ZURpc3BsYXlUcmFuc2Zvcm1BbmltYXRpb24oYW5pbWF0aW9uKTt9ZWxzZXt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLnNldCh2cC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybSk7dGhpcy5kaXNwbGF5VHJhbnNmb3JtXy5zY2FsZVgqPXNjYWxlO3RoaXMuZGlzcGxheVRyYW5zZm9ybV8ueFBhbldvcmxkUG9zVG9WaWV3UG9zKGdvYWxGb2NhbFBvaW50WFdvcmxkLGdvYWxGb2NhbFBvaW50WFZpZXcsdGhpcy52aWV3V2lkdGhfKTt2cC5zZXREaXNwbGF5VHJhbnNmb3JtSW1tZWRpYXRlbHkodGhpcy5kaXNwbGF5VHJhbnNmb3JtXyk7fX0sem9vbVRvU2VsZWN0aW9uKCl7aWYoIXRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuc2VsZWN0aW9uT2ZJbnRlcmVzdC5sZW5ndGgpcmV0dXJuO2NvbnN0IGJvdW5kcz10aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyLnNlbGVjdGlvbk9mSW50ZXJlc3QuYm91bmRzO2lmKCFib3VuZHMucmFuZ2UpcmV0dXJuO2NvbnN0IHdvcmxkQ2VudGVyPWJvdW5kcy5jZW50ZXI7Y29uc3Qgdmlld0NlbnRlcj10aGlzLm1vZGVsVHJhY2tDb250YWluZXJfLmNhbnZhcy53aWR0aC8yO2NvbnN0IGFkanVzdGVkV29ybGRSYW5nZT1ib3VuZHMucmFuZ2UqMS4yNTtjb25zdCBuZXdTY2FsZT10aGlzLm1vZGVsVHJhY2tDb250YWluZXJfLmNhbnZhcy53aWR0aC9hZGp1c3RlZFdvcmxkUmFuZ2U7Y29uc3Qgem9vbUluUmF0aW89bmV3U2NhbGUvdGhpcy52aWV3cG9ydF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm0uc2NhbGVYO2NvbnN0IGFuaW1hdGlvbj1uZXcgdHIudWkuVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtWm9vbVRvQW5pbWF0aW9uKHdvcmxkQ2VudGVyLHZpZXdDZW50ZXIsdGhpcy52aWV3cG9ydF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm0ucGFuWSx6b29tSW5SYXRpbyk7dGhpcy52aWV3cG9ydF8ucXVldWVEaXNwbGF5VHJhbnNmb3JtQW5pbWF0aW9uKGFuaW1hdGlvbik7fSxwYW5Ub1NlbGVjdGlvbigpe2lmKCF0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyLnNlbGVjdGlvbk9mSW50ZXJlc3QubGVuZ3RoKXJldHVybjtjb25zdCBib3VuZHM9dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlci5zZWxlY3Rpb25PZkludGVyZXN0LmJvdW5kcztjb25zdCB3b3JsZENlbnRlcj1ib3VuZHMuY2VudGVyO2NvbnN0IHZpZXdXaWR0aD10aGlzLnZpZXdXaWR0aF87Y29uc3QgZHQ9dGhpcy52aWV3cG9ydF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm07aWYoZmFsc2UmJiFib3VuZHMucmFuZ2Upe2lmKGR0LnhXb3JsZFRvVmlldyhib3VuZHMuY2VudGVyKTwwfHxkdC54V29ybGRUb1ZpZXcoYm91bmRzLmNlbnRlcik+dmlld1dpZHRoKXt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLnNldChkdCk7dGhpcy5kaXNwbGF5VHJhbnNmb3JtXy54UGFuV29ybGRQb3NUb1ZpZXdQb3Mod29ybGRDZW50ZXIsJ2NlbnRlcicsdmlld1dpZHRoKTtjb25zdCBkZWx0YVg9dGhpcy5kaXNwbGF5VHJhbnNmb3JtXy5wYW5YLWR0LnBhblg7Y29uc3QgYW5pbWF0aW9uPW5ldyB0ci51aS5UaW1lbGluZURpc3BsYXlUcmFuc2Zvcm1QYW5BbmltYXRpb24oZGVsdGFYLDApO3RoaXMudmlld3BvcnRfLnF1ZXVlRGlzcGxheVRyYW5zZm9ybUFuaW1hdGlvbihhbmltYXRpb24pO30KLXJldHVybjt9Ci10aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLnNldChkdCk7dGhpcy5kaXNwbGF5VHJhbnNmb3JtXy54UGFuV29ybGRCb3VuZHNJbnRvVmlldyhib3VuZHMubWluLGJvdW5kcy5tYXgsdmlld1dpZHRoKTtjb25zdCBkZWx0YVg9dGhpcy5kaXNwbGF5VHJhbnNmb3JtXy5wYW5YLWR0LnBhblg7Y29uc3QgYW5pbWF0aW9uPW5ldyB0ci51aS5UaW1lbGluZURpc3BsYXlUcmFuc2Zvcm1QYW5BbmltYXRpb24oZGVsdGFYLDApO3RoaXMudmlld3BvcnRfLnF1ZXVlRGlzcGxheVRyYW5zZm9ybUFuaW1hdGlvbihhbmltYXRpb24pO30sbmF2VG9Qb3NpdGlvbih1aVN0YXRlLHNob3dOYXZMaW5lKXtjb25zdCBsb2NhdGlvbj11aVN0YXRlLmxvY2F0aW9uO2NvbnN0IHNjYWxlWD11aVN0YXRlLnNjYWxlWDtjb25zdCB0cmFjaz1sb2NhdGlvbi5nZXRDb250YWluaW5nVHJhY2sodGhpcy52aWV3cG9ydF8pO2NvbnN0IHdvcmxkQ2VudGVyPWxvY2F0aW9uLnhXb3JsZDtjb25zdCB2aWV3Q2VudGVyPXRoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uY2FudmFzLndpZHRoLzU7Y29uc3Qgem9vbUluUmF0aW89c2NhbGVYL3RoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLnNjYWxlWDt0cmFjay5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7Y29uc3QgYW5pbWF0aW9uPW5ldyB0ci51aS5UaW1lbGluZURpc3BsYXlUcmFuc2Zvcm1ab29tVG9BbmltYXRpb24od29ybGRDZW50ZXIsdmlld0NlbnRlcix0aGlzLnZpZXdwb3J0Xy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybS5wYW5ZLHpvb21JblJhdGlvKTt0aGlzLnZpZXdwb3J0Xy5xdWV1ZURpc3BsYXlUcmFuc2Zvcm1BbmltYXRpb24oYW5pbWF0aW9uKTtpZighc2hvd05hdkxpbmUpcmV0dXJuO2lmKHRoaXMueE5hdlN0cmluZ01hcmtlcl8pe3RoaXMubW9kZWwucmVtb3ZlQW5ub3RhdGlvbih0aGlzLnhOYXZTdHJpbmdNYXJrZXJfKTt9Ci10aGlzLnhOYXZTdHJpbmdNYXJrZXJfPW5ldyB0ci5tb2RlbC5YTWFya2VyQW5ub3RhdGlvbih3b3JsZENlbnRlcik7dGhpcy5tb2RlbC5hZGRBbm5vdGF0aW9uKHRoaXMueE5hdlN0cmluZ01hcmtlcl8pO30sc2VsZWN0UG93ZXJTYW1wbGVzSW5DdXJyZW50VGltZVJhbmdlXygpe2NvbnN0IHNlbGVjdGlvbkJvdW5kcz10aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXy5zZWxlY3Rpb24uYm91bmRzO2lmKHRoaXMubW9kZWwuZGV2aWNlLnBvd2VyU2VyaWVzJiYhc2VsZWN0aW9uQm91bmRzLmVtcHR5KXtjb25zdCBldmVudHM9dGhpcy5tb2RlbC5kZXZpY2UucG93ZXJTZXJpZXMuZ2V0U2FtcGxlc1dpdGhpblJhbmdlKHNlbGVjdGlvbkJvdW5kcy5taW4sc2VsZWN0aW9uQm91bmRzLm1heCk7Y29uc3Qgc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldChldmVudHMpO3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLmNoYW5nZVNlbGVjdGlvbkZyb21UaW1lbGluZShzZWxlY3Rpb24pO319LHNldEN1cnJlbnRTZWxlY3Rpb25Bc0ludGVyZXN0UmFuZ2VfKCl7Y29uc3Qgc2VsZWN0aW9uQm91bmRzPXRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLnNlbGVjdGlvbi5ib3VuZHM7aWYoc2VsZWN0aW9uQm91bmRzLmVtcHR5KXt0aGlzLnZpZXdwb3J0Xy5pbnRlcmVzdFJhbmdlLnJlc2V0KCk7cmV0dXJuO30KLWlmKHRoaXMudmlld3BvcnRfLmludGVyZXN0UmFuZ2UubWluPT09c2VsZWN0aW9uQm91bmRzLm1pbiYmdGhpcy52aWV3cG9ydF8uaW50ZXJlc3RSYW5nZS5tYXg9PT1zZWxlY3Rpb25Cb3VuZHMubWF4KXt0aGlzLnZpZXdwb3J0Xy5pbnRlcmVzdFJhbmdlLnJlc2V0KCk7fWVsc2V7dGhpcy52aWV3cG9ydF8uaW50ZXJlc3RSYW5nZS5zZXQoc2VsZWN0aW9uQm91bmRzKTt9fSx0b2dnbGVIaWdoRGV0YWlsc18oKXt0aGlzLnZpZXdwb3J0Xy5oaWdoRGV0YWlscz0hdGhpcy52aWV3cG9ydF8uaGlnaERldGFpbHM7fSxoaWRlRHJhZ0JveF8oKXt0aGlzLiQuZHJhZ19ib3guc3R5bGUubGVmdD0nLTEwMDBweCc7dGhpcy4kLmRyYWdfYm94LnN0eWxlLnRvcD0nLTEwMDBweCc7dGhpcy4kLmRyYWdfYm94LnN0eWxlLndpZHRoPTA7dGhpcy4kLmRyYWdfYm94LnN0eWxlLmhlaWdodD0wO30sc2V0RHJhZ0JveFBvc2l0aW9uXyh4U3RhcnQseVN0YXJ0LHhFbmQseUVuZCl7Y29uc3QgbG9ZPU1hdGgubWluKHlTdGFydCx5RW5kKTtjb25zdCBoaVk9TWF0aC5tYXgoeVN0YXJ0LHlFbmQpO2NvbnN0IGxvWD1NYXRoLm1pbih4U3RhcnQseEVuZCk7Y29uc3QgaGlYPU1hdGgubWF4KHhTdGFydCx4RW5kKTtjb25zdCBtb2RlbFRyYWNrUmVjdD10aGlzLm1vZGVsVHJhY2tfLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGRyYWdSZWN0PXtsZWZ0OmxvWCx0b3A6bG9ZLHdpZHRoOmhpWC1sb1gsaGVpZ2h0OmhpWS1sb1l9O2RyYWdSZWN0LnJpZ2h0PWRyYWdSZWN0LmxlZnQrZHJhZ1JlY3Qud2lkdGg7ZHJhZ1JlY3QuYm90dG9tPWRyYWdSZWN0LnRvcCtkcmFnUmVjdC5oZWlnaHQ7Y29uc3QgbW9kZWxUcmFja0NvbnRhaW5lclJlY3Q9dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBjbGlwUmVjdD17bGVmdDptb2RlbFRyYWNrQ29udGFpbmVyUmVjdC5sZWZ0LHRvcDptb2RlbFRyYWNrQ29udGFpbmVyUmVjdC50b3AscmlnaHQ6bW9kZWxUcmFja0NvbnRhaW5lclJlY3QucmlnaHQsYm90dG9tOm1vZGVsVHJhY2tDb250YWluZXJSZWN0LmJvdHRvbX07Y29uc3QgaGVhZGluZ1dpZHRoPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKFBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJ3RyLXVpLWItaGVhZGluZycpKS53aWR0aDtjb25zdCB0cmFja1RpdGxlV2lkdGg9cGFyc2VJbnQoaGVhZGluZ1dpZHRoKTtjbGlwUmVjdC5sZWZ0PWNsaXBSZWN0LmxlZnQrdHJhY2tUaXRsZVdpZHRoO2NvbnN0IGludGVyc2VjdFJlY3RfPWZ1bmN0aW9uKHIxLHIyKXtpZihyMi5sZWZ0PnIxLnJpZ2h0fHxyMi5yaWdodDxyMS5sZWZ0fHxyMi50b3A+cjEuYm90dG9tfHxyMi5ib3R0b208cjEudG9wKXtyZXR1cm4gZmFsc2U7fQotY29uc3QgcmVzdWx0cz17fTtyZXN1bHRzLmxlZnQ9TWF0aC5tYXgocjEubGVmdCxyMi5sZWZ0KTtyZXN1bHRzLnRvcD1NYXRoLm1heChyMS50b3AscjIudG9wKTtyZXN1bHRzLnJpZ2h0PU1hdGgubWluKHIxLnJpZ2h0LHIyLnJpZ2h0KTtyZXN1bHRzLmJvdHRvbT1NYXRoLm1pbihyMS5ib3R0b20scjIuYm90dG9tKTtyZXN1bHRzLndpZHRoPXJlc3VsdHMucmlnaHQtcmVzdWx0cy5sZWZ0O3Jlc3VsdHMuaGVpZ2h0PXJlc3VsdHMuYm90dG9tLXJlc3VsdHMudG9wO3JldHVybiByZXN1bHRzO307Y29uc3QgZmluYWxEcmFnQm94PWludGVyc2VjdFJlY3RfKGNsaXBSZWN0LGRyYWdSZWN0KTt0aGlzLiQuZHJhZ19ib3guc3R5bGUubGVmdD1maW5hbERyYWdCb3gubGVmdCsncHgnO3RoaXMuJC5kcmFnX2JveC5zdHlsZS53aWR0aD1maW5hbERyYWdCb3gud2lkdGgrJ3B4Jzt0aGlzLiQuZHJhZ19ib3guc3R5bGUudG9wPWZpbmFsRHJhZ0JveC50b3ArJ3B4Jzt0aGlzLiQuZHJhZ19ib3guc3R5bGUuaGVpZ2h0PWZpbmFsRHJhZ0JveC5oZWlnaHQrJ3B4Jzt0aGlzLiQuZHJhZ19ib3guc3R5bGUud2hpdGVTcGFjZT0nbm93cmFwJztjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IGNhbnY9dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jYW52YXM7Y29uc3QgZHQ9dGhpcy52aWV3cG9ydF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3QgbG9XWD1kdC54Vmlld1RvV29ybGQoKGxvWC1jYW52Lm9mZnNldExlZnQpKnBpeGVsUmF0aW8pO2NvbnN0IGhpV1g9ZHQueFZpZXdUb1dvcmxkKChoaVgtY2Fudi5vZmZzZXRMZWZ0KSpwaXhlbFJhdGlvKTtQb2x5bWVyLmRvbSh0aGlzLiQuZHJhZ19ib3gpLnRleHRDb250ZW50PXRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Ncy5mb3JtYXQoaGlXWC1sb1dYKTtjb25zdCBlPW5ldyB0ci5iLkV2ZW50KCdzZWxlY3Rpb25DaGFuZ2luZycpO2UubG9XWD1sb1dYO2UuaGlXWD1oaVdYO3RoaXMuZGlzcGF0Y2hFdmVudChlKTt9LG9uR3JpZFRvZ2dsZV8obGVmdCl7Y29uc3Qgc2VsZWN0aW9uPXRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLnNlbGVjdGlvbjtjb25zdCB0Yj1sZWZ0P3NlbGVjdGlvbi5ib3VuZHMubWluOnNlbGVjdGlvbi5ib3VuZHMubWF4O2lmKHRoaXMudmlld3BvcnRfLmdyaWRFbmFibGVkJiZ0aGlzLnZpZXdwb3J0Xy5ncmlkU2lkZT09PWxlZnQmJnRoaXMudmlld3BvcnRfLmdyaWRJbml0aWFsVGltZWJhc2U9PT10Yil7dGhpcy52aWV3cG9ydF8uZ3JpZHNpZGU9dW5kZWZpbmVkO3RoaXMudmlld3BvcnRfLmdyaWRFbmFibGVkPWZhbHNlO3RoaXMudmlld3BvcnRfLmdyaWRJbml0aWFsVGltZWJhc2U9dW5kZWZpbmVkO3JldHVybjt9Ci1jb25zdCBudW1JbnRlcnZhbHNTaW5jZVN0YXJ0PU1hdGguY2VpbCgodGItdGhpcy5tb2RlbF8uYm91bmRzLm1pbikvdGhpcy52aWV3cG9ydF8uZ3JpZFN0ZXBfKTt0aGlzLnZpZXdwb3J0Xy5ncmlkRW5hYmxlZD10cnVlO3RoaXMudmlld3BvcnRfLmdyaWRTaWRlPWxlZnQ7dGhpcy52aWV3cG9ydF8uZ3JpZEluaXRpYWxUaW1lYmFzZT10Yjt0aGlzLnZpZXdwb3J0Xy5ncmlkVGltZWJhc2U9dGItCi0obnVtSW50ZXJ2YWxzU2luY2VTdGFydCsxKSp0aGlzLnZpZXdwb3J0Xy5ncmlkU3RlcF87fSxzdG9yZUxhc3RNb3VzZVBvc18oZSl7dGhpcy5sYXN0TW91c2VWaWV3UG9zXz10aGlzLmV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpO30sc3RvcmVMYXN0VG91Y2hQb3NpdGlvbnNfKGUpe3RoaXMubGFzdFRvdWNoVmlld1Bvc2l0aW9uc189dGhpcy5leHRyYWN0UmVsYXRpdmVUb3VjaFBvc2l0aW9uc18oZSk7fSxleHRyYWN0UmVsYXRpdmVNb3VzZVBvc2l0aW9uXyhlKXtjb25zdCBjYW52PXRoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uY2FudmFzO3JldHVybnt4OmUuY2xpZW50WC1jYW52Lm9mZnNldExlZnQseTplLmNsaWVudFktY2Fudi5vZmZzZXRUb3B9O30sZXh0cmFjdFJlbGF0aXZlVG91Y2hQb3NpdGlvbnNfKGUpe2NvbnN0IGNhbnY9dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jYW52YXM7Y29uc3QgdG91Y2hlcz1bXTtmb3IobGV0IGk9MDtpPGUudG91Y2hlcy5sZW5ndGg7KytpKXt0b3VjaGVzLnB1c2goe3g6ZS50b3VjaGVzW2ldLmNsaWVudFgtY2Fudi5vZmZzZXRMZWZ0LHk6ZS50b3VjaGVzW2ldLmNsaWVudFktY2Fudi5vZmZzZXRUb3B9KTt9Ci1yZXR1cm4gdG91Y2hlczt9LHN0b3JlSW5pdGlhbE1vdXNlRG93blBvc18oZSl7Y29uc3QgcG9zaXRpb249dGhpcy5leHRyYWN0UmVsYXRpdmVNb3VzZVBvc2l0aW9uXyhlKTt0aGlzLm1vdXNlVmlld1Bvc0F0TW91c2VEb3duXy54PXBvc2l0aW9uLng7dGhpcy5tb3VzZVZpZXdQb3NBdE1vdXNlRG93bl8ueT1wb3NpdGlvbi55O30sZm9jdXNFbGVtZW50c18oKXt0aGlzLiQuaG90a2V5X2NvbnRyb2xsZXIuY2hpbGRSZXF1ZXN0c0dlbmVyYWxGb2N1cyh0aGlzKTt9LHN0b3JlSW5pdGlhbEludGVyYWN0aW9uUG9zaXRpb25zQW5kRm9jdXNfKGUpe3RoaXMuc3RvcmVJbml0aWFsTW91c2VEb3duUG9zXyhlKTt0aGlzLnN0b3JlTGFzdE1vdXNlUG9zXyhlKTt0aGlzLmZvY3VzRWxlbWVudHNfKCk7fSxvbkJlZ2luUGFuU2Nhbl8oZSl7Y29uc3QgdnA9dGhpcy52aWV3cG9ydF87dGhpcy52aWV3cG9ydERpc3BsYXlUcmFuc2Zvcm1BdE1vdXNlRG93bl89dnAuY3VycmVudERpc3BsYXlUcmFuc2Zvcm0uY2xvbmUoKTt0aGlzLmlzUGFubmluZ0FuZFNjYW5uaW5nXz10cnVlO3RoaXMuc3RvcmVJbml0aWFsSW50ZXJhY3Rpb25Qb3NpdGlvbnNBbmRGb2N1c18oZSk7ZS5wcmV2ZW50RGVmYXVsdCgpO30sb25VcGRhdGVQYW5TY2FuXyhlKXtpZighdGhpcy5pc1Bhbm5pbmdBbmRTY2FubmluZ18pcmV0dXJuO2NvbnN0IHZpZXdXaWR0aD10aGlzLnZpZXdXaWR0aF87Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCB4RGVsdGFWaWV3PXBpeGVsUmF0aW8qKHRoaXMubGFzdE1vdXNlVmlld1Bvc18ueC0KLXRoaXMubW91c2VWaWV3UG9zQXRNb3VzZURvd25fLngpO2NvbnN0IHlEZWx0YT10aGlzLmxhc3RNb3VzZVZpZXdQb3NfLnktCi10aGlzLm1vdXNlVmlld1Bvc0F0TW91c2VEb3duXy55O3RoaXMuZGlzcGxheVRyYW5zZm9ybV8uc2V0KHRoaXMudmlld3BvcnREaXNwbGF5VHJhbnNmb3JtQXRNb3VzZURvd25fKTt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLmluY3JlbWVudFBhblhJblZpZXdVbml0cyh4RGVsdGFWaWV3KTt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLnBhblktPXlEZWx0YTt0aGlzLnZpZXdwb3J0Xy5zZXREaXNwbGF5VHJhbnNmb3JtSW1tZWRpYXRlbHkodGhpcy5kaXNwbGF5VHJhbnNmb3JtXyk7ZS5wcmV2ZW50RGVmYXVsdCgpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy5zdG9yZUxhc3RNb3VzZVBvc18oZSk7fSxvbkVuZFBhblNjYW5fKGUpe3RoaXMuaXNQYW5uaW5nQW5kU2Nhbm5pbmdfPWZhbHNlO3RoaXMuc3RvcmVMYXN0TW91c2VQb3NfKGUpO2lmKCFlLmlzQ2xpY2spe2UucHJldmVudERlZmF1bHQoKTt9fSxvbkJlZ2luU2VsZWN0aW9uXyhlKXtjb25zdCBjYW52PXRoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uY2FudmFzO2NvbnN0IHJlY3Q9dGhpcy5tb2RlbFRyYWNrXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBjYW52UmVjdD1jYW52LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGluc2lkZT1yZWN0JiZlLmNsaWVudFg+PXJlY3QubGVmdCYmZS5jbGllbnRYPHJlY3QucmlnaHQmJmUuY2xpZW50WT49cmVjdC50b3AmJmUuY2xpZW50WTxyZWN0LmJvdHRvbSYmZS5jbGllbnRYPj1jYW52UmVjdC5sZWZ0JiZlLmNsaWVudFg8Y2FudlJlY3QucmlnaHQ7aWYoIWluc2lkZSlyZXR1cm47dGhpcy5kcmFnQmVnaW5FdmVudF89ZTt0aGlzLnN0b3JlSW5pdGlhbEludGVyYWN0aW9uUG9zaXRpb25zQW5kRm9jdXNfKGUpO2UucHJldmVudERlZmF1bHQoKTt9LG9uVXBkYXRlU2VsZWN0aW9uXyhlKXtpZighdGhpcy5kcmFnQmVnaW5FdmVudF8pcmV0dXJuO3RoaXMuZHJhZ0JveFhTdGFydF89dGhpcy5kcmFnQmVnaW5FdmVudF8uY2xpZW50WDt0aGlzLmRyYWdCb3hYRW5kXz1lLmNsaWVudFg7dGhpcy5kcmFnQm94WVN0YXJ0Xz10aGlzLmRyYWdCZWdpbkV2ZW50Xy5jbGllbnRZO3RoaXMuZHJhZ0JveFlFbmRfPWUuY2xpZW50WTt0aGlzLnNldERyYWdCb3hQb3NpdGlvbl8odGhpcy5kcmFnQm94WFN0YXJ0Xyx0aGlzLmRyYWdCb3hZU3RhcnRfLHRoaXMuZHJhZ0JveFhFbmRfLHRoaXMuZHJhZ0JveFlFbmRfKTt9LG9uRW5kU2VsZWN0aW9uXyhlKXtlLnByZXZlbnREZWZhdWx0KCk7aWYoIXRoaXMuZHJhZ0JlZ2luRXZlbnRfKXJldHVybjt0aGlzLmhpZGVEcmFnQm94XygpO2NvbnN0IGVEb3duPXRoaXMuZHJhZ0JlZ2luRXZlbnRfO3RoaXMuZHJhZ0JlZ2luRXZlbnRfPXVuZGVmaW5lZDtjb25zdCBsb1k9TWF0aC5taW4oZURvd24uY2xpZW50WSxlLmNsaWVudFkpO2NvbnN0IGhpWT1NYXRoLm1heChlRG93bi5jbGllbnRZLGUuY2xpZW50WSk7Y29uc3QgbG9YPU1hdGgubWluKGVEb3duLmNsaWVudFgsZS5jbGllbnRYKTtjb25zdCBoaVg9TWF0aC5tYXgoZURvd24uY2xpZW50WCxlLmNsaWVudFgpO2NvbnN0IGNhbnY9dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jYW52YXM7Y29uc3Qgd29ybGRPZmZzZXQ9Y2Fudi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O2NvbnN0IGxvVlg9bG9YLXdvcmxkT2Zmc2V0O2NvbnN0IGhpVlg9aGlYLXdvcmxkT2Zmc2V0O2NvbnN0IHNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtpZihlRG93bi5hcHBlbmRTZWxlY3Rpb24pe2NvbnN0IHByZXZpb3VzU2VsZWN0aW9uPXRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLnNlbGVjdGlvbjtpZihwcmV2aW91c1NlbGVjdGlvbiE9PXVuZGVmaW5lZCl7c2VsZWN0aW9uLmFkZEV2ZW50U2V0KHByZXZpb3VzU2VsZWN0aW9uKTt9fQotdGhpcy5tb2RlbFRyYWNrXy5hZGRJbnRlcnNlY3RpbmdFdmVudHNJblJhbmdlVG9TZWxlY3Rpb24obG9WWCxoaVZYLGxvWSxoaVksc2VsZWN0aW9uKTt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXy5jaGFuZ2VTZWxlY3Rpb25Gcm9tVGltZWxpbmUoc2VsZWN0aW9uKTt9LG9uQmVnaW5ab29tXyhlKXt0aGlzLmlzWm9vbWluZ189dHJ1ZTt0aGlzLnN0b3JlSW5pdGlhbEludGVyYWN0aW9uUG9zaXRpb25zQW5kRm9jdXNfKGUpO2UucHJldmVudERlZmF1bHQoKTt9LG9uVXBkYXRlWm9vbV8oZSl7aWYoIXRoaXMuaXNab29taW5nXylyZXR1cm47Y29uc3QgbmV3UG9zaXRpb249dGhpcy5leHRyYWN0UmVsYXRpdmVNb3VzZVBvc2l0aW9uXyhlKTtjb25zdCB6b29tU2NhbGVWYWx1ZT0xKyh0aGlzLmxhc3RNb3VzZVZpZXdQb3NfLnktCi1uZXdQb3NpdGlvbi55KSowLjAxO3RoaXMuem9vbUJ5Xyh6b29tU2NhbGVWYWx1ZSxmYWxzZSk7dGhpcy5zdG9yZUxhc3RNb3VzZVBvc18oZSk7fSxvbkVuZFpvb21fKGUpe3RoaXMuaXNab29taW5nXz1mYWxzZTtpZighZS5pc0NsaWNrKXtlLnByZXZlbnREZWZhdWx0KCk7fX0sY29tcHV0ZVRvdWNoQ2VudGVyXyhwb3NpdGlvbnMpe2xldCB4U3VtPTA7bGV0IHlTdW09MDtmb3IobGV0IGk9MDtpPHBvc2l0aW9ucy5sZW5ndGg7KytpKXt4U3VtKz1wb3NpdGlvbnNbaV0ueDt5U3VtKz1wb3NpdGlvbnNbaV0ueTt9Ci1yZXR1cm57eDp4U3VtL3Bvc2l0aW9ucy5sZW5ndGgseTp5U3VtL3Bvc2l0aW9ucy5sZW5ndGh9O30sY29tcHV0ZVRvdWNoU3Bhbl8ocG9zaXRpb25zKXtsZXQgeE1pbj1OdW1iZXIuTUFYX1ZBTFVFO2xldCB5TWluPU51bWJlci5NQVhfVkFMVUU7bGV0IHhNYXg9TnVtYmVyLk1JTl9WQUxVRTtsZXQgeU1heD1OdW1iZXIuTUlOX1ZBTFVFO2ZvcihsZXQgaT0wO2k8cG9zaXRpb25zLmxlbmd0aDsrK2kpe3hNaW49TWF0aC5taW4oeE1pbixwb3NpdGlvbnNbaV0ueCk7eU1pbj1NYXRoLm1pbih5TWluLHBvc2l0aW9uc1tpXS55KTt4TWF4PU1hdGgubWF4KHhNYXgscG9zaXRpb25zW2ldLngpO3lNYXg9TWF0aC5tYXgoeU1heCxwb3NpdGlvbnNbaV0ueSk7fQotcmV0dXJuIE1hdGguc3FydCgoeE1pbi14TWF4KSooeE1pbi14TWF4KSsKLSh5TWluLXlNYXgpKih5TWluLXlNYXgpKTt9LG9uVXBkYXRlVHJhbnNmb3JtRm9yVG91Y2hfKGUpe2NvbnN0IG5ld1Bvc2l0aW9ucz10aGlzLmV4dHJhY3RSZWxhdGl2ZVRvdWNoUG9zaXRpb25zXyhlKTtjb25zdCBjdXJyZW50UG9zaXRpb25zPXRoaXMubGFzdFRvdWNoVmlld1Bvc2l0aW9uc187Y29uc3QgbmV3Q2VudGVyPXRoaXMuY29tcHV0ZVRvdWNoQ2VudGVyXyhuZXdQb3NpdGlvbnMpO2NvbnN0IGN1cnJlbnRDZW50ZXI9dGhpcy5jb21wdXRlVG91Y2hDZW50ZXJfKGN1cnJlbnRQb3NpdGlvbnMpO2NvbnN0IG5ld1NwYW49dGhpcy5jb21wdXRlVG91Y2hTcGFuXyhuZXdQb3NpdGlvbnMpO2NvbnN0IGN1cnJlbnRTcGFuPXRoaXMuY29tcHV0ZVRvdWNoU3Bhbl8oY3VycmVudFBvc2l0aW9ucyk7Y29uc3QgdnA9dGhpcy52aWV3cG9ydF87Y29uc3Qgdmlld1dpZHRoPXRoaXMudmlld1dpZHRoXztjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IHhEZWx0YT1waXhlbFJhdGlvKihuZXdDZW50ZXIueC1jdXJyZW50Q2VudGVyLngpO2NvbnN0IHlEZWx0YT1uZXdDZW50ZXIueS1jdXJyZW50Q2VudGVyLnk7Y29uc3Qgem9vbVNjYWxlVmFsdWU9Y3VycmVudFNwYW4+MTA/bmV3U3Bhbi9jdXJyZW50U3BhbjoxO2NvbnN0IHZpZXdGb2N1cz1waXhlbFJhdGlvKm5ld0NlbnRlci54O2NvbnN0IHdvcmxkRm9jdXM9dnAuY3VycmVudERpc3BsYXlUcmFuc2Zvcm0ueFZpZXdUb1dvcmxkKHZpZXdGb2N1cyk7dGhpcy5kaXNwbGF5VHJhbnNmb3JtXy5zZXQodnAuY3VycmVudERpc3BsYXlUcmFuc2Zvcm0pO3RoaXMuZGlzcGxheVRyYW5zZm9ybV8uc2NhbGVYKj16b29tU2NhbGVWYWx1ZTt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLnhQYW5Xb3JsZFBvc1RvVmlld1Bvcyh3b3JsZEZvY3VzLHZpZXdGb2N1cyx2aWV3V2lkdGgpO3RoaXMuZGlzcGxheVRyYW5zZm9ybV8uaW5jcmVtZW50UGFuWEluVmlld1VuaXRzKHhEZWx0YSk7dGhpcy5kaXNwbGF5VHJhbnNmb3JtXy5wYW5ZLT15RGVsdGE7dnAuc2V0RGlzcGxheVRyYW5zZm9ybUltbWVkaWF0ZWx5KHRoaXMuZGlzcGxheVRyYW5zZm9ybV8pO3RoaXMuc3RvcmVMYXN0VG91Y2hQb3NpdGlvbnNfKGUpO30saW5pdEhpbnRUZXh0Xygpe3RoaXMuJC5oaW50X3RleHQuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy5wZW5kaW5nSGludFRleHRDbGVhclRpbWVvdXRfPXVuZGVmaW5lZDt9LHNob3dIaW50VGV4dF8odGV4dCl7aWYodGhpcy5wZW5kaW5nSGludFRleHRDbGVhclRpbWVvdXRfKXt3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMucGVuZGluZ0hpbnRUZXh0Q2xlYXJUaW1lb3V0Xyk7dGhpcy5wZW5kaW5nSGludFRleHRDbGVhclRpbWVvdXRfPXVuZGVmaW5lZDt9Ci10aGlzLnBlbmRpbmdIaW50VGV4dENsZWFyVGltZW91dF89c2V0VGltZW91dCh0aGlzLmhpZGVIaW50VGV4dF8uYmluZCh0aGlzKSwxMDAwKTtQb2x5bWVyLmRvbSh0aGlzLiQuaGludF90ZXh0KS50ZXh0Q29udGVudD10ZXh0O3RoaXMuJC5oaW50X3RleHQuc3R5bGUuZGlzcGxheT0nJzt9LGhpZGVIaW50VGV4dF8oKXt0aGlzLnBlbmRpbmdIaW50VGV4dENsZWFyVGltZW91dF89dW5kZWZpbmVkO3RoaXMuJC5oaW50X3RleHQuc3R5bGUuZGlzcGxheT0nbm9uZSc7fX0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktZmluZC1jb250cm9sJyxmaWx0ZXJLZXlEb3duKGUpe2lmKGUua2V5Q29kZT09PTI3KXtjb25zdCBoa2M9dHIuYi5nZXRIb3RrZXlDb250cm9sbGVyRm9yRWxlbWVudCh0aGlzKTtpZihoa2Mpe2hrYy5jaGlsZFJlcXVlc3RzQmx1cih0aGlzKTt9ZWxzZXt0aGlzLmJsdXIoKTt9Ci1lLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm47fWVsc2UgaWYoZS5rZXlDb2RlPT09MTMpe2lmKGUuc2hpZnRLZXkpe3RoaXMuZmluZFByZXZpb3VzKCk7fWVsc2V7dGhpcy5maW5kTmV4dCgpO319fSxmaWx0ZXJCbHVyKGUpe3RoaXMudXBkYXRlSGl0Q291bnRFbCgpO30sZmlsdGVyRm9jdXMoZSl7dGhpcy4kLmZpbHRlci5zZWxlY3QoKTt9LGZpbHRlck1vdXNlVXAoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO30sZ2V0IGNvbnRyb2xsZXIoKXtyZXR1cm4gdGhpcy5jb250cm9sbGVyXzt9LHNldCBjb250cm9sbGVyKGMpe3RoaXMuY29udHJvbGxlcl89Yzt0aGlzLnVwZGF0ZUhpdENvdW50RWwoKTt9LGZvY3VzKCl7dGhpcy4kLmZpbHRlci5mb2N1cygpO30sZ2V0IGhhc0ZvY3VzKCl7cmV0dXJuIHRoaXM9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O30sZmlsdGVyVGV4dENoYW5nZWQoKXtQb2x5bWVyLmRvbSh0aGlzLiQuaGl0Q291bnQpLnRleHRDb250ZW50PScnO3RoaXMuJC5zcGlubmVyLnN0eWxlLnZpc2liaWxpdHk9J3Zpc2libGUnO3RoaXMuJC5zcGlubmVyLnN0eWxlLmFuaW1hdGlvbj0nc3BpbiAxcyBsaW5lYXIgaW5maW5pdGUnO3RoaXMuY29udHJvbGxlci5zdGFydEZpbHRlcmluZyh0aGlzLiQuZmlsdGVyLnZhbHVlKS50aGVuKGZ1bmN0aW9uKCl7dGhpcy4kLnNwaW5uZXIuc3R5bGUudmlzaWJpbGl0eT0naGlkZGVuJzt0aGlzLiQuc3Bpbm5lci5zdHlsZS5hbmltYXRpb249Jyc7dGhpcy51cGRhdGVIaXRDb3VudEVsKCk7fS5iaW5kKHRoaXMpKTt9LGZpbmROZXh0KCl7aWYodGhpcy5jb250cm9sbGVyKXt0aGlzLmNvbnRyb2xsZXIuZmluZE5leHQoKTt9Ci10aGlzLnVwZGF0ZUhpdENvdW50RWwoKTt9LGZpbmRQcmV2aW91cygpe2lmKHRoaXMuY29udHJvbGxlcil7dGhpcy5jb250cm9sbGVyLmZpbmRQcmV2aW91cygpO30KLXRoaXMudXBkYXRlSGl0Q291bnRFbCgpO30sdXBkYXRlSGl0Q291bnRFbCgpe2lmKCF0aGlzLmNvbnRyb2xsZXJ8fHRoaXMuJC5maWx0ZXIudmFsdWUubGVuZ3RoPT09MCl7UG9seW1lci5kb20odGhpcy4kLmhpdENvdW50KS50ZXh0Q29udGVudD0nJztyZXR1cm47fQotY29uc3Qgbj10aGlzLmNvbnRyb2xsZXIuZmlsdGVySGl0cy5sZW5ndGg7Y29uc3QgaT1uPT09MD8tMTp0aGlzLmNvbnRyb2xsZXIuY3VycmVudEhpdEluZGV4O1BvbHltZXIuZG9tKHRoaXMuJC5oaXRDb3VudCkudGV4dENvbnRlbnQ9KGkrMSkrJyBvZiAnK247fSxzZXRUZXh0KHN0cmluZyl7dGhpcy4kLmZpbHRlci52YWx1ZT1zdHJpbmc7fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS50cXVlcnknLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQ29udGV4dCgpe3RoaXMuZXZlbnQ9dW5kZWZpbmVkO3RoaXMuYW5jZXN0b3JzPVtdO30KLUNvbnRleHQucHJvdG90eXBlPXtwdXNoKGV2ZW50KXtjb25zdCBjdHg9bmV3IENvbnRleHQoKTtjdHguYW5jZXN0b3JzPXRoaXMuYW5jZXN0b3JzLnNsaWNlKCk7Y3R4LmFuY2VzdG9ycy5wdXNoKGV2ZW50KTtyZXR1cm4gY3R4O30scG9wKGV2ZW50KXtjb25zdCBjdHg9bmV3IENvbnRleHQoKTtjdHguZXZlbnQ9dGhpcy5hbmNlc3RvcnNbdGhpcy5hbmNlc3RvcnMubGVuZ3RoLTFdO2N0eC5hbmNlc3RvcnM9dGhpcy5hbmNlc3RvcnMuc2xpY2UoMCx0aGlzLmFuY2VzdG9ycy5sZW5ndGgtMSk7cmV0dXJuIGN0eDt9fTtyZXR1cm57Q29udGV4dCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS50cXVlcnknLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRmlsdGVyKCl7dHIuYy5TY3JpcHRpbmdPYmplY3QuY2FsbCh0aGlzKTt9Ci1GaWx0ZXIubm9ybWFsaXplRmlsdGVyRXhwcmVzc2lvbj1mdW5jdGlvbihmaWx0ZXJFeHByZXNzaW9uKXtpZihmaWx0ZXJFeHByZXNzaW9uIGluc3RhbmNlb2YgU3RyaW5nfHx0eXBlb2YoZmlsdGVyRXhwcmVzc2lvbik9PT0nc3RyaW5nJ3x8ZmlsdGVyRXhwcmVzc2lvbiBpbnN0YW5jZW9mIFJlZ0V4cCl7Y29uc3QgZmlsdGVyPW5ldyB0ci5lLnRxdWVyeS5GaWx0ZXJIYXNUaXRsZShmaWx0ZXJFeHByZXNzaW9uKTtyZXR1cm4gZmlsdGVyO30KLXJldHVybiBmaWx0ZXJFeHByZXNzaW9uO307RmlsdGVyLnByb3RvdHlwZT17X19wcm90b19fOnRyLmMuU2NyaXB0aW5nT2JqZWN0LnByb3RvdHlwZSxldmFsdWF0ZShjb250ZXh0KXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sbWF0Y2hWYWx1ZV8odmFsdWUsZXhwZWN0ZWQpe2lmKGV4cGVjdGVkIGluc3RhbmNlb2YgUmVnRXhwKXtyZXR1cm4gZXhwZWN0ZWQudGVzdCh2YWx1ZSk7fWVsc2UgaWYoZXhwZWN0ZWQgaW5zdGFuY2VvZiBGdW5jdGlvbil7cmV0dXJuIGV4cGVjdGVkKHZhbHVlKTt9Ci1yZXR1cm4gdmFsdWU9PT1leHBlY3RlZDt9fTtyZXR1cm57RmlsdGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnRxdWVyeScsZnVuY3Rpb24oKXtmdW5jdGlvbiBGaWx0ZXJBbGxPZihvcHRfc3ViRXhwcmVzc2lvbnMpe3RyLmUudHF1ZXJ5LkZpbHRlci5jYWxsKHRoaXMpO3RoaXMuc3ViRXhwcmVzc2lvbnM9b3B0X3N1YkV4cHJlc3Npb25zfHxbXTt9Ci1GaWx0ZXJBbGxPZi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5lLnRxdWVyeS5GaWx0ZXIucHJvdG90eXBlLHNldCBzdWJFeHByZXNzaW9ucyhleHBycyl7dGhpcy5zdWJFeHByZXNzaW9uc189W107Zm9yKGxldCBpPTA7aTxleHBycy5sZW5ndGg7aSsrKXt0aGlzLnN1YkV4cHJlc3Npb25zXy5wdXNoKHRyLmUudHF1ZXJ5LkZpbHRlci5ub3JtYWxpemVGaWx0ZXJFeHByZXNzaW9uKGV4cHJzW2ldKSk7fX0sZ2V0IHN1YkV4cHJlc3Npb25zKCl7cmV0dXJuIHRoaXMuc3ViRXhwcmVzc2lvbnNfO30sZXZhbHVhdGUoY29udGV4dCl7aWYoIXRoaXMuc3ViRXhwcmVzc2lvbnMubGVuZ3RoKXJldHVybiB0cnVlO2ZvcihsZXQgaT0wO2k8dGhpcy5zdWJFeHByZXNzaW9ucy5sZW5ndGg7aSsrKXtpZighdGhpcy5zdWJFeHByZXNzaW9uc1tpXS5ldmFsdWF0ZShjb250ZXh0KSl7cmV0dXJuIGZhbHNlO319Ci1yZXR1cm4gdHJ1ZTt9fTt0ci5jLlNjcmlwdGluZ09iamVjdFJlZ2lzdHJ5LnJlZ2lzdGVyKGZ1bmN0aW9uKCl7Y29uc3QgZXhwcnM9W107Zm9yKGxldCBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7ZXhwcnMucHVzaChhcmd1bWVudHNbaV0pO30KLXJldHVybiBuZXcgRmlsdGVyQWxsT2YoZXhwcnMpO30se25hbWU6J2FsbE9mJ30pO3JldHVybntGaWx0ZXJBbGxPZix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS50cXVlcnknLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRmlsdGVyTm90KHN1YkV4cHJlc3Npb24pe3RyLmUudHF1ZXJ5LkZpbHRlci5jYWxsKHRoaXMpO3RoaXMuc3ViRXhwcmVzc2lvbj1zdWJFeHByZXNzaW9uO30KLUZpbHRlck5vdC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5lLnRxdWVyeS5GaWx0ZXIucHJvdG90eXBlLHNldCBzdWJFeHByZXNzaW9uKGV4cHIpe3RoaXMuc3ViRXhwcmVzc2lvbl89dHIuZS50cXVlcnkuRmlsdGVyLm5vcm1hbGl6ZUZpbHRlckV4cHJlc3Npb24oZXhwcik7fSxnZXQgc3ViRXhwcmVzc2lvbigpe3JldHVybiB0aGlzLnN1YkV4cHJlc3Npb25fO30sZXZhbHVhdGUoY29udGV4dCl7cmV0dXJuIXRoaXMuc3ViRXhwcmVzc2lvbi5ldmFsdWF0ZShjb250ZXh0KTt9fTt0ci5jLlNjcmlwdGluZ09iamVjdFJlZ2lzdHJ5LnJlZ2lzdGVyKGZ1bmN0aW9uKCl7Y29uc3QgZXhwcnM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtpZihleHBycy5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoJ25vdCgpIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBzdWJleHByZXNzaW9uJyk7fQotcmV0dXJuIG5ldyBGaWx0ZXJOb3QoZXhwcnNbMF0pO30se25hbWU6J25vdCd9KTtyZXR1cm57RmlsdGVyTm90LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnRxdWVyeScsZnVuY3Rpb24oKXtmdW5jdGlvbiBGaWx0ZXJBbnlPZihvcHRfc3ViRXhwcmVzc2lvbnMpe3RyLmUudHF1ZXJ5LkZpbHRlci5jYWxsKHRoaXMpO3RoaXMuc3ViRXhwcmVzc2lvbnM9b3B0X3N1YkV4cHJlc3Npb25zfHxbXTt9Ci1GaWx0ZXJBbnlPZi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5lLnRxdWVyeS5GaWx0ZXIucHJvdG90eXBlLHNldCBzdWJFeHByZXNzaW9ucyhleHBycyl7dGhpcy5zdWJFeHByZXNzaW9uc189W107Zm9yKGxldCBpPTA7aTxleHBycy5sZW5ndGg7aSsrKXt0aGlzLnN1YkV4cHJlc3Npb25zXy5wdXNoKHRyLmUudHF1ZXJ5LkZpbHRlci5ub3JtYWxpemVGaWx0ZXJFeHByZXNzaW9uKGV4cHJzW2ldKSk7fX0sZ2V0IHN1YkV4cHJlc3Npb25zKCl7cmV0dXJuIHRoaXMuc3ViRXhwcmVzc2lvbnNfO30sZXZhbHVhdGUoY29udGV4dCl7aWYoIXRoaXMuc3ViRXhwcmVzc2lvbnMubGVuZ3RoKXJldHVybiB0cnVlO2ZvcihsZXQgaT0wO2k8dGhpcy5zdWJFeHByZXNzaW9ucy5sZW5ndGg7aSsrKXtpZih0aGlzLnN1YkV4cHJlc3Npb25zW2ldLmV2YWx1YXRlKGNvbnRleHQpKXJldHVybiB0cnVlO30KLXJldHVybiBmYWxzZTt9fTt0ci5jLlNjcmlwdGluZ09iamVjdFJlZ2lzdHJ5LnJlZ2lzdGVyKGZ1bmN0aW9uKCl7Y29uc3QgZXhwcnM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gbmV3IEZpbHRlckFueU9mKGV4cHJzKTt9LHtuYW1lOidhbnlPZid9KTt0ci5jLlNjcmlwdGluZ09iamVjdFJlZ2lzdHJ5LnJlZ2lzdGVyKGZ1bmN0aW9uKCl7Y29uc3QgZXhwcnM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gbmV3IHRyLmUudHF1ZXJ5LkZpbHRlck5vdChuZXcgRmlsdGVyQW55T2YoZXhwcnMpKTt9LHtuYW1lOidub25lT2YnfSk7cmV0dXJue0ZpbHRlckFueU9mLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnRxdWVyeScsZnVuY3Rpb24oKXtmdW5jdGlvbiBGaWx0ZXJIYXNBbmNlc3RvcihvcHRfc3ViRXhwcmVzc2lvbil7dGhpcy5zdWJFeHByZXNzaW9uPW9wdF9zdWJFeHByZXNzaW9uO30KLUZpbHRlckhhc0FuY2VzdG9yLnByb3RvdHlwZT17X19wcm90b19fOnRyLmUudHF1ZXJ5LkZpbHRlci5wcm90b3R5cGUsc2V0IHN1YkV4cHJlc3Npb24oZXhwcil7dGhpcy5zdWJFeHByZXNzaW9uXz10ci5lLnRxdWVyeS5GaWx0ZXIubm9ybWFsaXplRmlsdGVyRXhwcmVzc2lvbihleHByKTt9LGdldCBzdWJFeHByZXNzaW9uKCl7cmV0dXJuIHRoaXMuc3ViRXhwcmVzc2lvbl87fSxldmFsdWF0ZShjb250ZXh0KXtpZighdGhpcy5zdWJFeHByZXNzaW9uKXtyZXR1cm4gY29udGV4dC5hbmNlc3RvcnMubGVuZ3RoPjA7fQotd2hpbGUoY29udGV4dC5hbmNlc3RvcnMubGVuZ3RoKXtjb250ZXh0PWNvbnRleHQucG9wKCk7aWYodGhpcy5zdWJFeHByZXNzaW9uLmV2YWx1YXRlKGNvbnRleHQpKXJldHVybiB0cnVlO30KLXJldHVybiBmYWxzZTt9fTt0ci5jLlNjcmlwdGluZ09iamVjdFJlZ2lzdHJ5LnJlZ2lzdGVyKGZ1bmN0aW9uKHN1YkV4cHJlc3Npb24pe3JldHVybiBuZXcgRmlsdGVySGFzQW5jZXN0b3Ioc3ViRXhwcmVzc2lvbik7fSx7bmFtZTonaGFzQW5jZXN0b3InfSk7cmV0dXJue0ZpbHRlckhhc0FuY2VzdG9yLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnRxdWVyeScsZnVuY3Rpb24oKXtmdW5jdGlvbiBGaWx0ZXJIYXNEdXJhdGlvbihtaW5WYWx1ZU9yRXhwZWN0ZWQsb3B0X21heFZhbHVlKXtpZihtaW5WYWx1ZU9yRXhwZWN0ZWQhPT11bmRlZmluZWQmJm9wdF9tYXhWYWx1ZSE9PXVuZGVmaW5lZCl7dGhpcy5taW5WYWx1ZT1taW5WYWx1ZU9yRXhwZWN0ZWQ7dGhpcy5tYXhWYWx1ZT1vcHRfbWF4VmFsdWU7fWVsc2V7dGhpcy5leHBlY3RlZD1taW5WYWx1ZU9yRXhwZWN0ZWQ7fX0KLUZpbHRlckhhc0R1cmF0aW9uLnByb3RvdHlwZT17X19wcm90b19fOnRyLmUudHF1ZXJ5LkZpbHRlci5wcm90b3R5cGUsZXZhbHVhdGUoY29udGV4dCl7aWYoY29udGV4dC5ldmVudC5kdXJhdGlvbj09PXVuZGVmaW5lZClyZXR1cm4gZmFsc2U7aWYodGhpcy5taW5WYWx1ZSE9PXVuZGVmaW5lZCYmdGhpcy5tYXhWYWx1ZSE9PXVuZGVmaW5lZCl7cmV0dXJuIGNvbnRleHQuZXZlbnQuZHVyYXRpb24+PXRoaXMubWluVmFsdWUmJmNvbnRleHQuZXZlbnQuZHVyYXRpb248PXRoaXMubWF4VmFsdWU7fQotcmV0dXJuIHRoaXMubWF0Y2hWYWx1ZV8oY29udGV4dC5ldmVudC5kdXJhdGlvbix0aGlzLmV4cGVjdGVkKTt9fTt0ci5jLlNjcmlwdGluZ09iamVjdFJlZ2lzdHJ5LnJlZ2lzdGVyKGZ1bmN0aW9uKG1pblZhbHVlT3JFeHBlY3RlZCxvcHRfbWF4VmFsdWUpe3JldHVybiBuZXcgRmlsdGVySGFzRHVyYXRpb24obWluVmFsdWVPckV4cGVjdGVkLG9wdF9tYXhWYWx1ZSk7fSx7bmFtZTonaGFzRHVyYXRpb24nfSk7cmV0dXJue0ZpbHRlckhhc0R1cmF0aW9uLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnRxdWVyeScsZnVuY3Rpb24oKXtmdW5jdGlvbiBGaWx0ZXJIYXNUaXRsZShleHBlY3RlZCl7dHIuZS50cXVlcnkuRmlsdGVyLmNhbGwodGhpcyk7dGhpcy5leHBlY3RlZD1leHBlY3RlZDt9Ci1GaWx0ZXJIYXNUaXRsZS5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5lLnRxdWVyeS5GaWx0ZXIucHJvdG90eXBlLGV2YWx1YXRlKGNvbnRleHQpe3JldHVybiB0aGlzLm1hdGNoVmFsdWVfKGNvbnRleHQuZXZlbnQudGl0bGUsdGhpcy5leHBlY3RlZCk7fX07dHIuYy5TY3JpcHRpbmdPYmplY3RSZWdpc3RyeS5yZWdpc3RlcihmdW5jdGlvbihleHBlY3RlZCl7Y29uc3QgZmlsdGVyPW5ldyB0ci5lLnRxdWVyeS5GaWx0ZXJIYXNUaXRsZShleHBlY3RlZCk7cmV0dXJuIGZpbHRlcjt9LHtuYW1lOidoYXNUaXRsZSd9KTtyZXR1cm57RmlsdGVySGFzVGl0bGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUudHF1ZXJ5JyxmdW5jdGlvbigpe2Z1bmN0aW9uIEZpbHRlcklzVG9wTGV2ZWwob3B0X3N1YkV4cHJlc3Npb24pe3RoaXMuc3ViRXhwcmVzc2lvbj1vcHRfc3ViRXhwcmVzc2lvbjt9Ci1GaWx0ZXJJc1RvcExldmVsLnByb3RvdHlwZT17X19wcm90b19fOnRyLmUudHF1ZXJ5LkZpbHRlci5wcm90b3R5cGUsc2V0IHN1YkV4cHJlc3Npb24oZXhwcil7dGhpcy5zdWJFeHByZXNzaW9uXz10ci5lLnRxdWVyeS5GaWx0ZXIubm9ybWFsaXplRmlsdGVyRXhwcmVzc2lvbihleHByKTt9LGdldCBzdWJFeHByZXNzaW9uKCl7cmV0dXJuIHRoaXMuc3ViRXhwcmVzc2lvbl87fSxldmFsdWF0ZShjb250ZXh0KXtpZihjb250ZXh0LmFuY2VzdG9ycy5sZW5ndGg+MClyZXR1cm4gZmFsc2U7aWYoIXRoaXMuc3ViRXhwcmVzc2lvbilyZXR1cm4gdHJ1ZTtyZXR1cm4gdGhpcy5zdWJFeHByZXNzaW9uLmV2YWx1YXRlKGNvbnRleHQpO319O3RyLmMuU2NyaXB0aW5nT2JqZWN0UmVnaXN0cnkucmVnaXN0ZXIoZnVuY3Rpb24oc3ViRXhwcmVzc2lvbil7cmV0dXJuIG5ldyBGaWx0ZXJJc1RvcExldmVsKHN1YkV4cHJlc3Npb24pO30se25hbWU6J2lzVG9wTGV2ZWwnfSk7cmV0dXJue0ZpbHRlcklzVG9wTGV2ZWwsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUudHF1ZXJ5JyxmdW5jdGlvbigpe2Z1bmN0aW9uIGFkZEV2ZW50VHJlZVRvU2VsZWN0aW9uKHNlbGVjdGlvbixldmVudCl7c2VsZWN0aW9uLnB1c2goZXZlbnQpO2lmKCFldmVudC5zdWJTbGljZXMpcmV0dXJuO2V2ZW50LnN1YlNsaWNlcy5mb3JFYWNoKGFkZEV2ZW50VHJlZVRvU2VsZWN0aW9uLmJpbmQodW5kZWZpbmVkLHNlbGVjdGlvbikpO30KLWZ1bmN0aW9uIFRRdWVyeShtb2RlbCl7dHIuYy5TY3JpcHRpbmdPYmplY3QuY2FsbCh0aGlzKTt0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLnBhcmVudF89dW5kZWZpbmVkO3RoaXMuZmlsdGVyRXhwcmVzc2lvbl89dW5kZWZpbmVkO3RoaXMuc2VsZWN0aW9uXz11bmRlZmluZWQ7fQotVFF1ZXJ5LnByb3RvdHlwZT17X19wcm90b19fOnRyLmMuU2NyaXB0aW5nT2JqZWN0LnByb3RvdHlwZSxvbk1vZGVsQ2hhbmdlZChtb2RlbCl7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy5zZWxlY3Rpb25fPXVuZGVmaW5lZDt9LGdldCBicnVzaGluZ1N0YXRlQ29udHJvbGxlcigpe3JldHVybiB0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXzt9LGZpbHRlcihmaWx0ZXJFeHByZXNzaW9uKXtjb25zdCByZXN1bHQ9bmV3IFRRdWVyeSh0aGlzLm1vZGVsXyk7cmVzdWx0LnBhcmVudF89dGhpcztyZXN1bHQuZmlsdGVyRXhwcmVzc2lvbl89dHIuZS50cXVlcnkuRmlsdGVyLm5vcm1hbGl6ZUZpbHRlckV4cHJlc3Npb24oZmlsdGVyRXhwcmVzc2lvbik7cmV0dXJuIHJlc3VsdDt9LGNyZWF0ZUZpbHRlclRhc2tHcmFwaF8oKXtjb25zdCBub2Rlcz1bdGhpc107d2hpbGUobm9kZXNbbm9kZXMubGVuZ3RoLTFdLnBhcmVudF8pe25vZGVzLnB1c2gobm9kZXNbbm9kZXMubGVuZ3RoLTFdLnBhcmVudF8pO30KLWNvbnN0IHJvb3RUYXNrPW5ldyB0ci5iLlRhc2soKTtsZXQgbGFzdFRhc2s9cm9vdFRhc2s7bGV0IG5vZGU7Zm9yKGxldCBpPW5vZGVzLmxlbmd0aC0xO2k+PTA7aS0tKXtub2RlPW5vZGVzW2ldO2lmKG5vZGUuc2VsZWN0aW9uXyE9PXVuZGVmaW5lZCljb250aW51ZTtub2RlLnNlbGVjdGlvbl89bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7aWYobm9kZS5wYXJlbnRfPT09dW5kZWZpbmVkKXtsYXN0VGFzaz1sYXN0VGFzay5hZnRlcih0aGlzLnNlbGVjdEV2ZXJ5dGhpbmdBc1Rhc2tfKG5vZGUuc2VsZWN0aW9uXykpO31lbHNle2NvbnN0IHByZXZOb2RlPW5vZGVzW2krMV07bGFzdFRhc2s9dGhpcy5jcmVhdGVGaWx0ZXJUYXNrRm9yTm9kZV8obGFzdFRhc2ssbm9kZSxwcmV2Tm9kZSk7fX0KLXJldHVybntyb290VGFzayxsYXN0VGFzayxsYXN0Tm9kZTpub2RlfTt9LGNyZWF0ZUZpbHRlclRhc2tGb3JOb2RlXyhsYXN0VGFzayxub2RlLHByZXZOb2RlKXtyZXR1cm4gbGFzdFRhc2suYWZ0ZXIoZnVuY3Rpb24oKXtub2RlLmV2YWx1YXRlRmlsdGVyRXhwcmVzc2lvbl8ocHJldk5vZGUuc2VsZWN0aW9uXyxub2RlLnNlbGVjdGlvbl8pO30sdGhpcyk7fSxldmFsdWF0ZUZpbHRlckV4cHJlc3Npb25fKGlucHV0U2VsZWN0aW9uLG91dHB1dFNlbGVjdGlvbil7Y29uc3Qgc2VlbkV2ZW50cz17fTtpbnB1dFNlbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtjb25zdCBjb250ZXh0PW5ldyB0ci5lLnRxdWVyeS5Db250ZXh0KCk7Y29udGV4dC5ldmVudD1ldmVudDt0aGlzLmV2YWx1YXRlRmlsdGVyRXhwcmVzc2lvbkZvckV2ZW50Xyhjb250ZXh0LGlucHV0U2VsZWN0aW9uLG91dHB1dFNlbGVjdGlvbixzZWVuRXZlbnRzKTt9LmJpbmQodGhpcykpO30sZXZhbHVhdGVGaWx0ZXJFeHByZXNzaW9uRm9yRXZlbnRfKGNvbnRleHQsaW5wdXRTZWxlY3Rpb24sb3V0cHV0U2VsZWN0aW9uLHNlZW5FdmVudHMpe2NvbnN0IGV2ZW50PWNvbnRleHQuZXZlbnQ7aWYoaW5wdXRTZWxlY3Rpb24uY29udGFpbnMoZXZlbnQpJiYhc2VlbkV2ZW50c1tldmVudC5ndWlkXSl7c2VlbkV2ZW50c1tldmVudC5ndWlkXT10cnVlO2lmKCF0aGlzLmZpbHRlckV4cHJlc3Npb25ffHx0aGlzLmZpbHRlckV4cHJlc3Npb25fLmV2YWx1YXRlKGNvbnRleHQpKXtvdXRwdXRTZWxlY3Rpb24ucHVzaChldmVudCk7fX0KLWlmKCFldmVudC5zdWJTbGljZXMpcmV0dXJuO2NvbnRleHQ9Y29udGV4dC5wdXNoKGV2ZW50KTtmb3IobGV0IGk9MDtpPGV2ZW50LnN1YlNsaWNlcy5sZW5ndGg7aSsrKXtjb250ZXh0LmV2ZW50PWV2ZW50LnN1YlNsaWNlc1tpXTt0aGlzLmV2YWx1YXRlRmlsdGVyRXhwcmVzc2lvbkZvckV2ZW50Xyhjb250ZXh0LGlucHV0U2VsZWN0aW9uLG91dHB1dFNlbGVjdGlvbixzZWVuRXZlbnRzKTt9fSxzZWxlY3RFdmVyeXRoaW5nQXNUYXNrXyhzZWxlY3Rpb24pe2NvbnN0IGZpbHRlclRhc2s9bmV3IHRyLmIuVGFzaygpO2Zvcihjb25zdCBjb250YWluZXIgb2YgdGhpcy5tb2RlbF8uZ2V0RGVzY2VuZGFudEV2ZW50Q29udGFpbmVycygpKXtmaWx0ZXJUYXNrLnN1YlRhc2soKCk9Pntmb3IoY29uc3QgZXZlbnQgb2YgY29udGFpbmVyLmNoaWxkRXZlbnRzKCkpe2FkZEV2ZW50VHJlZVRvU2VsZWN0aW9uKHNlbGVjdGlvbixldmVudCk7fX0sdGhpcyk7fQotcmV0dXJuIGZpbHRlclRhc2s7fSxyZWFkeSgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLHJlamVjdCl7Y29uc3QgZ3JhcGg9dGhpcy5jcmVhdGVGaWx0ZXJUYXNrR3JhcGhfKCk7Z3JhcGgubGFzdFRhc2s9Z3JhcGgubGFzdFRhc2suYWZ0ZXIoZnVuY3Rpb24oKXtyZXNvbHZlKHRoaXMuc2VsZWN0aW9uXyk7fSx0aGlzKTt0ci5iLlRhc2suUnVuV2hlbklkbGUoZ3JhcGgucm9vdFRhc2spO30uYmluZCh0aGlzKSk7fSxnZXQgc2VsZWN0aW9uKCl7aWYodGhpcy5zZWxlY3Rpb25fPT09dW5kZWZpbmVkKXtjb25zdCBncmFwaD10aGlzLmNyZWF0ZUZpbHRlclRhc2tHcmFwaF8oKTt0ci5iLlRhc2suUnVuU3luY2hyb25vdXNseShncmFwaC5yb290VGFzayk7fQotcmV0dXJuIHRoaXMuc2VsZWN0aW9uXzt9fTt0ci5jLlNjcmlwdGluZ09iamVjdFJlZ2lzdHJ5LnJlZ2lzdGVyKG5ldyBUUXVlcnkoKSx7bmFtZTonJHQnfSk7cmV0dXJue1RRdWVyeSx9O30pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktc2NyaXB0aW5nLWNvbnRyb2wnLGlzRW50ZXJLZXlfKGV2ZW50KXtyZXR1cm4gZXZlbnQua2V5Q29kZSE9PTIyOSYmKGV2ZW50LmtleT09PSdFbnRlcid8fGV2ZW50LmtleUlkZW50aWZpZXI9PT0nRW50ZXInKTt9LHNldEZvY3VzXyhmb2N1c2VkKXtjb25zdCBwcm9tcHRFbD10aGlzLiQucHJvbXB0O2lmKGZvY3VzZWQpe3Byb21wdEVsLmZvY3VzKCk7UG9seW1lci5kb20odGhpcy4kLnJvb3QpLmNsYXNzTGlzdC5hZGQoJ2ZvY3VzZWQnKTtpZihwcm9tcHRFbC52YWx1ZS5sZW5ndGg+MCl7Y29uc3Qgc2VsPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtzZWwuY29sbGFwc2UoUG9seW1lci5kb20ocHJvbXB0RWwpLmZpcnN0Q2hpbGQscHJvbXB0RWwudmFsdWUubGVuZ3RoKTt9fWVsc2V7cHJvbXB0RWwuYmx1cigpO1BvbHltZXIuZG9tKHRoaXMuJC5yb290KS5jbGFzc0xpc3QucmVtb3ZlKCdmb2N1c2VkJyk7Y29uc3QgcGFyZW50PXByb21wdEVsLnBhcmVudEVsZW1lbnQ7Y29uc3QgbmV4dEVsPVBvbHltZXIuZG9tKHByb21wdEVsKS5uZXh0U2libGluZztwcm9tcHRFbC5yZW1vdmUoKTtQb2x5bWVyLmRvbShwYXJlbnQpLmluc2VydEJlZm9yZShwcm9tcHRFbCxuZXh0RWwpO319LG9uQ29uc29sZUZvY3VzKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy5zZXRGb2N1c18odHJ1ZSk7fSxvbkNvbnNvbGVCbHVyKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy5zZXRGb2N1c18oZmFsc2UpO30scHJvbXB0S2V5RG93bihlKXtlLnN0b3BQcm9wYWdhdGlvbigpO2lmKCF0aGlzLmlzRW50ZXJLZXlfKGUpKXJldHVybjtlLnByZXZlbnREZWZhdWx0KCk7Y29uc3QgcHJvbXB0RWw9dGhpcy4kLnByb21wdDtjb25zdCBjb21tYW5kPXByb21wdEVsLnZhbHVlO2lmKGNvbW1hbmQubGVuZ3RoPT09MClyZXR1cm47cHJvbXB0RWwudmFsdWU9Jyc7dGhpcy5hZGRMaW5lXyhTdHJpbmcuZnJvbUNoYXJDb2RlKDE4NykrJyAnK2NvbW1hbmQpO2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD10aGlzLmNvbnRyb2xsZXJfLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQpO31jYXRjaChlKXtyZXN1bHQ9ZS5zdGFja3x8ZS5zdGFja1RyYWNlO30KLWlmKHJlc3VsdCBpbnN0YW5jZW9mIHRyLmUudHF1ZXJ5LlRRdWVyeSl7cmVzdWx0LnJlYWR5KCkudGhlbihmdW5jdGlvbihzZWxlY3Rpb24pe3RoaXMuYWRkTGluZV8oc2VsZWN0aW9uLmxlbmd0aCsnIG1hdGNoZXMnKTt0aGlzLmNvbnRyb2xsZXJfLmJydXNoaW5nU3RhdGVDb250cm9sbGVyLnNob3dTY3JpcHRDb250cm9sU2VsZWN0aW9uKHNlbGVjdGlvbik7fS5iaW5kKHRoaXMpKTt9ZWxzZXt0aGlzLmFkZExpbmVfKHJlc3VsdCk7fQotcHJvbXB0RWwuc2Nyb2xsSW50b1ZpZXcoKTt9LGFkZExpbmVfKGxpbmUpe2NvbnN0IGhpc3RvcnlFbD10aGlzLiQuaGlzdG9yeTtpZihoaXN0b3J5RWwuaW5uZXJUZXh0Lmxlbmd0aCE9PTApe2hpc3RvcnlFbC5pbm5lclRleHQrPSdcbic7fQotaGlzdG9yeUVsLmlubmVyVGV4dCs9bGluZTt9LHByb21wdEtleVByZXNzKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7fSx0b2dnbGVWaXNpYmlsaXR5KCl7Y29uc3Qgcm9vdD10aGlzLiQucm9vdDtpZighdGhpcy52aXNpYmxlKXtQb2x5bWVyLmRvbShyb290KS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTt0aGlzLnNldEZvY3VzXyh0cnVlKTt9ZWxzZXtQb2x5bWVyLmRvbShyb290KS5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTt0aGlzLnNldEZvY3VzXyhmYWxzZSk7fX0sZ2V0IGhhc0ZvY3VzKCl7cmV0dXJuIHRoaXM9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O30sZ2V0IHZpc2libGUoKXtjb25zdCByb290PXRoaXMuJC5yb290O3JldHVybiFQb2x5bWVyLmRvbShyb290KS5jbGFzc0xpc3QuY29udGFpbnMoJ2hpZGRlbicpO30sZ2V0IGNvbnRyb2xsZXIoKXtyZXR1cm4gdGhpcy5jb250cm9sbGVyXzt9LHNldCBjb250cm9sbGVyKGMpe3RoaXMuY29udHJvbGxlcl89Yzt9fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1zaWRlLXBhbmVsLWNvbnRhaW5lcicscmVhZHkoKXt0aGlzLmFjdGl2ZVBhbmVsQ29udGFpbmVyXz10aGlzLiQuYWN0aXZlX3BhbmVsX2NvbnRhaW5lcjt0aGlzLnRhYlN0cmlwXz10aGlzLiQudGFiX3N0cmlwO3RoaXMuZHJhZ0hhbmRsZV89dGhpcy4kLnNpZGVfcGFuZWxfZHJhZ19oYW5kbGU7dGhpcy5kcmFnSGFuZGxlXy5ob3Jpem9udGFsPWZhbHNlO3RoaXMuZHJhZ0hhbmRsZV8udGFyZ2V0PXRoaXMuYWN0aXZlUGFuZWxDb250YWluZXJfO3RoaXMucmFuZ2VPZkludGVyZXN0Xz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl89dW5kZWZpbmVkO3RoaXMub25TZWxlY3Rpb25DaGFuZ2VkXz10aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZF8uYmluZCh0aGlzKTt0aGlzLm9uTW9kZWxDaGFuZ2VkXz10aGlzLm9uTW9kZWxDaGFuZ2VkXy5iaW5kKHRoaXMpO30sZ2V0IGJydXNoaW5nU3RhdGVDb250cm9sbGVyKCl7cmV0dXJuIHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfO30sc2V0IGJydXNoaW5nU3RhdGVDb250cm9sbGVyKGJydXNoaW5nU3RhdGVDb250cm9sbGVyKXtpZih0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyKXt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXy5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkXyk7dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW9kZWwtY2hhbmdlZCcsdGhpcy5vbk1vZGVsQ2hhbmdlZF8pO30KLXRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfPWJydXNoaW5nU3RhdGVDb250cm9sbGVyO2lmKHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIpe3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsdGhpcy5vblNlbGVjdGlvbkNoYW5nZWRfKTt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXy5hZGRFdmVudExpc3RlbmVyKCdtb2RlbC1jaGFuZ2VkJyx0aGlzLm9uTW9kZWxDaGFuZ2VkXyk7aWYodGhpcy5tb2RlbCl7dGhpcy5vbk1vZGVsQ2hhbmdlZF8oKTt9fX0sb25TZWxlY3Rpb25DaGFuZ2VkXygpe2lmKHRoaXMuYWN0aXZlUGFuZWwpe3RoaXMuYWN0aXZlUGFuZWwuc2VsZWN0aW9uPXRoaXMuc2VsZWN0aW9uO319LGdldCBtb2RlbCgpe3JldHVybiB0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXy5tb2RlbDt9LG9uTW9kZWxDaGFuZ2VkXygpe3RoaXMuYWN0aXZlUGFuZWxUeXBlXz11bmRlZmluZWQ7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBleHBhbmRlZCgpe3RoaXMuaGFzQXR0cmlidXRlKCdleHBhbmRlZCcpO30sZ2V0IGFjdGl2ZVBhbmVsKCl7cmV0dXJuIHRoaXMuYWN0aXZlUGFuZWxDb250YWluZXJfLmNoaWxkcmVuWzBdO30sZ2V0IGFjdGl2ZVBhbmVsVHlwZSgpe3JldHVybiB0aGlzLmFjdGl2ZVBhbmVsVHlwZV87fSxzZXQgYWN0aXZlUGFuZWxUeXBlKHBhbmVsVHlwZSl7aWYodGhpcy5tb2RlbD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWN0aXZhdGUgcGFuZWwgd2l0aG91dCBhIG1vZGVsJyk7fQotbGV0IHBhbmVsPXVuZGVmaW5lZDtpZihwYW5lbFR5cGUpe3BhbmVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocGFuZWxUeXBlKTt9Ci1pZihwYW5lbCE9PXVuZGVmaW5lZCYmIXBhbmVsLnN1cHBvcnRzTW9kZWwodGhpcy5tb2RlbCkpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IGFjdGl2YXRlIHBhbmVsOiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgbW9kZWwnKTt9Ci1pZih0aGlzLmFjdGl2ZVBhbmVsVHlwZSl7UG9seW1lci5kb20odGhpcy5nZXRMYWJlbEVsZW1lbnRGb3JQYW5lbFR5cGVfKHRoaXMuYWN0aXZlUGFuZWxUeXBlKSkucmVtb3ZlQXR0cmlidXRlKCdzZWxlY3RlZCcpO30KLWlmKHRoaXMuYWN0aXZlUGFuZWxUeXBlKXt0aGlzLmdldExhYmVsRWxlbWVudEZvclBhbmVsVHlwZV8odGhpcy5hY3RpdmVQYW5lbFR5cGUpLnJlbW92ZUF0dHJpYnV0ZSgnc2VsZWN0ZWQnKTt9Ci1pZih0aGlzLmFjdGl2ZVBhbmVsKXt0aGlzLmFjdGl2ZVBhbmVsQ29udGFpbmVyXy5yZW1vdmVDaGlsZCh0aGlzLmFjdGl2ZVBhbmVsKTt9Ci1pZihwYW5lbFR5cGU9PT11bmRlZmluZWQpe1BvbHltZXIuZG9tKHRoaXMpLnJlbW92ZUF0dHJpYnV0ZSgnZXhwYW5kZWQnKTt0aGlzLmFjdGl2ZVBhbmVsVHlwZV89dW5kZWZpbmVkO3JldHVybjt9Ci1Qb2x5bWVyLmRvbSh0aGlzLmdldExhYmVsRWxlbWVudEZvclBhbmVsVHlwZV8ocGFuZWxUeXBlKSkuc2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsdHJ1ZSk7UG9seW1lci5kb20odGhpcykuc2V0QXR0cmlidXRlKCdleHBhbmRlZCcsdHJ1ZSk7UG9seW1lci5kb20odGhpcy5hY3RpdmVQYW5lbENvbnRhaW5lcl8pLmFwcGVuZENoaWxkKHBhbmVsKTtwYW5lbC5yYW5nZU9mSW50ZXJlc3Q9dGhpcy5yYW5nZU9mSW50ZXJlc3RfO3BhbmVsLnNlbGVjdGlvbj10aGlzLnNlbGVjdGlvbl87cGFuZWwubW9kZWw9dGhpcy5tb2RlbDt0aGlzLmFjdGl2ZVBhbmVsVHlwZV89cGFuZWxUeXBlO30sZ2V0UGFuZWxUeXBlRm9yQ29uc3RydWN0b3JfKGNvbnN0cnVjdG9yKXtmb3IobGV0IGk9MDtpPHRoaXMudGFiU3RyaXBfLmNoaWxkcmVuLmxlbmd0aDtpKyspe2lmKHRoaXMudGFiU3RyaXBfLmNoaWxkcmVuW2ldLnBhbmVsVHlwZS5jb25zdHJ1Y3Rvcj09PWNvbnN0cnVjdG9yKXtyZXR1cm4gdGhpcy50YWJTdHJpcF8uY2hpbGRyZW5baV0ucGFuZWxUeXBlO319fSxnZXRMYWJlbEVsZW1lbnRGb3JQYW5lbFR5cGVfKHBhbmVsVHlwZSl7Zm9yKGxldCBpPTA7aTx0aGlzLnRhYlN0cmlwXy5jaGlsZHJlbi5sZW5ndGg7aSsrKXtpZih0aGlzLnRhYlN0cmlwXy5jaGlsZHJlbltpXS5wYW5lbFR5cGU9PT1wYW5lbFR5cGUpe3JldHVybiB0aGlzLnRhYlN0cmlwXy5jaGlsZHJlbltpXTt9fQotcmV0dXJuIHVuZGVmaW5lZDt9LHVwZGF0ZUNvbnRlbnRzXygpe2NvbnN0IHByZXZpb3VzbHlBY3RpdmVQYW5lbFR5cGU9dGhpcy5hY3RpdmVQYW5lbFR5cGU7UG9seW1lci5kb20odGhpcy50YWJTdHJpcF8pLnRleHRDb250ZW50PScnO2NvbnN0IHN1cHBvcnRlZFBhbmVsVHlwZXM9W107Y29uc3QgcGFuZWxUeXBlSW5mb3M9dHIudWkuc2lkZV9wYW5lbC5TaWRlUGFuZWxSZWdpc3RyeS5nZXRBbGxSZWdpc3RlcmVkVHlwZUluZm9zKCk7Y29uc3QgdW5zdXBwb3J0ZWRMYWJlbEVscz1bXTtmb3IoY29uc3QgcGFuZWxUeXBlSW5mbyBvZiBwYW5lbFR5cGVJbmZvcyl7Y29uc3QgbGFiZWxFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWItc3RyaXAtbGFiZWwnKTtjb25zdCBwYW5lbD1wYW5lbFR5cGVJbmZvLmNvbnN0cnVjdG9yKCk7Y29uc3QgcGFuZWxUeXBlPXBhbmVsLnRhZ05hbWU7UG9seW1lci5kb20obGFiZWxFbCkudGV4dENvbnRlbnQ9cGFuZWwudGV4dExhYmVsO2xhYmVsRWwucGFuZWxUeXBlPXBhbmVsVHlwZTtjb25zdCBzdXBwb3J0ZWQ9cGFuZWwuc3VwcG9ydHNNb2RlbCh0aGlzLm1vZGVsKTtpZih0aGlzLm1vZGVsJiZzdXBwb3J0ZWQuc3VwcG9ydGVkKXtzdXBwb3J0ZWRQYW5lbFR5cGVzLnB1c2gocGFuZWxUeXBlKTtQb2x5bWVyLmRvbShsYWJlbEVsKS5zZXRBdHRyaWJ1dGUoJ2VuYWJsZWQnLHRydWUpO2xhYmVsRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKHBhbmVsVHlwZSl7dGhpcy5hY3RpdmVQYW5lbFR5cGU9dGhpcy5hY3RpdmVQYW5lbFR5cGU9PT1wYW5lbFR5cGU/dW5kZWZpbmVkOnBhbmVsVHlwZTt9LmJpbmQodGhpcyxwYW5lbFR5cGUpKTtQb2x5bWVyLmRvbSh0aGlzLnRhYlN0cmlwXykuYXBwZW5kQ2hpbGQobGFiZWxFbCk7fWVsc2V7aWYodGhpcy5hY3RpdmVQYW5lbCl7dGhpcy5hY3RpdmVQYW5lbENvbnRhaW5lcl8ucmVtb3ZlQ2hpbGQodGhpcy5hY3RpdmVQYW5lbCk7fQotdGhpcy5yZW1vdmVBdHRyaWJ1dGUoJ2V4cGFuZGVkJyk7dW5zdXBwb3J0ZWRMYWJlbEVscy5wdXNoKGxhYmVsRWwpO319Ci1mb3IoY29uc3QgbGFiZWxFbCBvZiB1bnN1cHBvcnRlZExhYmVsRWxzKXtQb2x5bWVyLmRvbSh0aGlzLnRhYlN0cmlwXykuYXBwZW5kQ2hpbGQobGFiZWxFbCk7fQotaWYocHJldmlvdXNseUFjdGl2ZVBhbmVsVHlwZSYmc3VwcG9ydGVkUGFuZWxUeXBlcy5pbmNsdWRlcyhwcmV2aW91c2x5QWN0aXZlUGFuZWxUeXBlKSl7dGhpcy5hY3RpdmVQYW5lbFR5cGU9cHJldmlvdXNseUFjdGl2ZVBhbmVsVHlwZTtQb2x5bWVyLmRvbSh0aGlzKS5zZXRBdHRyaWJ1dGUoJ2V4cGFuZGVkJyx0cnVlKTt9ZWxzZXtpZih0aGlzLmFjdGl2ZVBhbmVsKXtQb2x5bWVyLmRvbSh0aGlzLmFjdGl2ZVBhbmVsQ29udGFpbmVyXykucmVtb3ZlQ2hpbGQodGhpcy5hY3RpdmVQYW5lbCk7fQotUG9seW1lci5kb20odGhpcykucmVtb3ZlQXR0cmlidXRlKCdleHBhbmRlZCcpO319LGdldCByYW5nZU9mSW50ZXJlc3QoKXtyZXR1cm4gdGhpcy5yYW5nZU9mSW50ZXJlc3RfO30sc2V0IHJhbmdlT2ZJbnRlcmVzdChyYW5nZSl7aWYocmFuZ2U9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTXVzdCBub3QgYmUgdW5kZWZpbmVkJyk7fQotdGhpcy5yYW5nZU9mSW50ZXJlc3RfPXJhbmdlO2lmKHRoaXMuYWN0aXZlUGFuZWwpe3RoaXMuYWN0aXZlUGFuZWwucmFuZ2VPZkludGVyZXN0PXJhbmdlO319fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS10aW1lbGluZS12aWV3LWhlbHAtb3ZlcmxheScscmVhZHkoKXtjb25zdCBtb2Q9dHIuaXNNYWM/J2NtZCAnOidjdHJsJztjb25zdCBzcGFucz1Qb2x5bWVyLmRvbSh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NwYW4ubW9kJyk7Zm9yKGxldCBpPTA7aTxzcGFucy5sZW5ndGg7aSsrKXtQb2x5bWVyLmRvbShzcGFuc1tpXSkudGV4dENvbnRlbnQ9bW9kO319fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS10aW1lbGluZS12aWV3LW1ldGFkYXRhLW92ZXJsYXknLGNyZWF0ZWQoKXt0aGlzLm1ldGFkYXRhXz11bmRlZmluZWQ7fSxyZWFkeSgpe3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t0aXRsZTonbmFtZScsdmFsdWU6ZD0+ZC5uYW1lLH0se3RpdGxlOid2YWx1ZScsdmFsdWU6ZD0+e2NvbnN0IGdvdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXcnKTtnb3Yub2JqZWN0PWQudmFsdWU7cmV0dXJuIGdvdjt9LH1dO30sZ2V0IG1ldGFkYXRhKCl7cmV0dXJuIHRoaXMubWV0YWRhdGFfO30sc2V0IG1ldGFkYXRhKG1ldGFkYXRhKXt0aGlzLm1ldGFkYXRhXz1tZXRhZGF0YTt0aGlzLiQudGFibGUudGFibGVSb3dzPXRoaXMubWV0YWRhdGFfO3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fX0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdi11aS1wcmVmZXJyZWQtZGlzcGxheS11bml0JyxyZWFkeSgpe3RoaXMucHJlZmVycmVkVGltZURpc3BsYXlNb2RlXz11bmRlZmluZWQ7fSxhdHRhY2hlZCgpe3RyLmIuVW5pdC5kaWRQcmVmZXJyZWRUaW1lRGlzcGxheVVuaXRDaGFuZ2UoKTt9LGRldGFjaGVkKCl7dHIuYi5Vbml0LmRpZFByZWZlcnJlZFRpbWVEaXNwbGF5VW5pdENoYW5nZSgpO30sZ2V0IHByZWZlcnJlZFRpbWVEaXNwbGF5TW9kZSgpe3JldHVybiB0aGlzLnByZWZlcnJlZFRpbWVEaXNwbGF5TW9kZV87fSxzZXQgcHJlZmVycmVkVGltZURpc3BsYXlNb2RlKHYpe2lmKHRoaXMucHJlZmVycmVkVGltZURpc3BsYXlNb2RlXz09PXYpcmV0dXJuO3RoaXMucHJlZmVycmVkVGltZURpc3BsYXlNb2RlXz12O3RyLmIuVW5pdC5kaWRQcmVmZXJyZWRUaW1lRGlzcGxheVVuaXRDaGFuZ2UoKTt9fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS10aW1lbGluZS12aWV3JyxjcmVhdGVkKCl7dGhpcy50cmFja1ZpZXdDb250YWluZXJfPXVuZGVmaW5lZDt0aGlzLnF1ZXVlZE1vZGVsXz11bmRlZmluZWQ7dGhpcy5idWlsdFByb21pc2VfPXVuZGVmaW5lZDt0aGlzLmRvbmVCdWlsZGluZ189dW5kZWZpbmVkO30sYXR0YWNoZWQoKXt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy50cmFja1ZpZXdDb250YWluZXJfPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJyN0cmFja192aWV3X2NvbnRhaW5lcicpO2lmKCF0aGlzLnRyYWNrVmlld0NvbnRhaW5lcl8pe3Rocm93IG5ldyBFcnJvcignbWlzc2luZyB0cmFja3ZpZXdDb250YWluZXInKTt9Ci1pZih0aGlzLnF1ZXVlZE1vZGVsXyl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30pO30scmVhZHkoKXt0aGlzLnRhYkluZGV4PTA7dGhpcy50aXRsZUVsXz10aGlzLiQudGl0bGU7dGhpcy5sZWZ0Q29udHJvbHNFbF89dGhpcy4kLmxlZnRfY29udHJvbHM7dGhpcy5yaWdodENvbnRyb2xzRWxfPXRoaXMuJC5yaWdodF9jb250cm9sczt0aGlzLmNvbGxhcHNpbmdDb250cm9sc0VsXz10aGlzLiQuY29sbGFwc2luZ19jb250cm9sczt0aGlzLnNpZGVQYW5lbENvbnRhaW5lcl89dGhpcy4kLnNpZGVfcGFuZWxfY29udGFpbmVyO3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfPW5ldyB0ci5jLkJydXNoaW5nU3RhdGVDb250cm9sbGVyKHRoaXMpO3RoaXMuZmluZEN0bF89dGhpcy4kLnZpZXdfZmluZF9jb250cm9sO3RoaXMuZmluZEN0bF8uY29udHJvbGxlcj1uZXcgdHIudWkuRmluZENvbnRyb2xsZXIodGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8pO3RoaXMuc2NyaXB0aW5nQ3RsXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1zY3JpcHRpbmctY29udHJvbCcpO3RoaXMuc2NyaXB0aW5nQ3RsXy5jb250cm9sbGVyPW5ldyB0ci5jLlNjcmlwdGluZ0NvbnRyb2xsZXIodGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8pO3RoaXMuc2lkZVBhbmVsQ29udGFpbmVyXy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcj10aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXztpZih3aW5kb3cudHIubWV0cmljcyYmd2luZG93LnRyLm1ldHJpY3Muc2gmJndpbmRvdy50ci5tZXRyaWNzLnNoLlN5c3RlbUhlYWx0aE1ldHJpYyl7dGhpcy5yYWlsU2NvcmVTcGFuXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci1tZXRyaWNzLXVpLXNoLXN5c3RlbS1oZWFsdGgtc3BhbicpO1BvbHltZXIuZG9tKHRoaXMucmlnaHRDb250cm9scykuYXBwZW5kQ2hpbGQodGhpcy5yYWlsU2NvcmVTcGFuXyk7fWVsc2V7dGhpcy5yYWlsU2NvcmVTcGFuXz11bmRlZmluZWQ7fQotdGhpcy5vcHRpb25zRHJvcGRvd25fPXRoaXMuJC52aWV3X29wdGlvbnNfZHJvcGRvd247UG9seW1lci5kb20odGhpcy5vcHRpb25zRHJvcGRvd25fLmljb25FbGVtZW50KS50ZXh0Q29udGVudD0nVmlldyBPcHRpb25zJzt0aGlzLnNob3dGbG93RXZlbnRzXz1mYWxzZTtQb2x5bWVyLmRvbSh0aGlzLm9wdGlvbnNEcm9wZG93bl8pLmFwcGVuZENoaWxkKHRyLnVpLmIuY3JlYXRlQ2hlY2tCb3godGhpcywnc2hvd0Zsb3dFdmVudHMnLCd0ci51aS5UaW1lbGluZVZpZXcuc2hvd0Zsb3dFdmVudHMnLGZhbHNlLCdGbG93IGV2ZW50cycpKTt0aGlzLmhpZ2hsaWdodFZTeW5jXz1mYWxzZTt0aGlzLmhpZ2hsaWdodFZTeW5jQ2hlY2tib3hfPXRyLnVpLmIuY3JlYXRlQ2hlY2tCb3godGhpcywnaGlnaGxpZ2h0VlN5bmMnLCd0ci51aS5UaW1lbGluZVZpZXcuaGlnaGxpZ2h0VlN5bmMnLGZhbHNlLCdIaWdobGlnaHQgVlN5bmMnKTtQb2x5bWVyLmRvbSh0aGlzLm9wdGlvbnNEcm9wZG93bl8pLmFwcGVuZENoaWxkKHRoaXMuaGlnaGxpZ2h0VlN5bmNDaGVja2JveF8pO3RoaXMuaW5pdE1ldGFkYXRhQnV0dG9uXygpO3RoaXMuaW5pdENvbnNvbGVCdXR0b25fKCk7dGhpcy5pbml0SGVscEJ1dHRvbl8oKTtQb2x5bWVyLmRvbSh0aGlzLmNvbGxhcHNpbmdDb250cm9scykuYXBwZW5kQ2hpbGQodGhpcy5zY3JpcHRpbmdDdGxfKTt0aGlzLmRyYWdFbF89dGhpcy4kLmRyYWdfaGFuZGxlO3RoaXMuYW5hbHlzaXNFbF89dGhpcy4kLmFuYWx5c2lzO3RoaXMuYW5hbHlzaXNFbF8uYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXI9dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl87dGhpcy5hZGRFdmVudExpc3RlbmVyKCdyZXF1ZXN0U2VsZWN0aW9uQ2hhbmdlJyxmdW5jdGlvbihlKXtjb25zdCBzYz10aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXztzYy5jaGFuZ2VTZWxlY3Rpb25Gcm9tUmVxdWVzdFNlbGVjdGlvbkNoYW5nZUV2ZW50KGUuc2VsZWN0aW9uKTt9LmJpbmQodGhpcykpO3RoaXMub25WaWV3cG9ydENoYW5nZWRfPXRoaXMub25WaWV3cG9ydENoYW5nZWRfLmJpbmQodGhpcyk7dGhpcy5iaW5kS2V5TGlzdGVuZXJzXygpO3RoaXMuZHJhZ0VsXy50YXJnZXQ9dGhpcy5hbmFseXNpc0VsXzt9LGdldCBnbG9iYWxNb2RlKCl7cmV0dXJuIHRoaXMuaG90a2V5Q29udHJvbGxlci5nbG9iYWxNb2RlO30sc2V0IGdsb2JhbE1vZGUoZ2xvYmFsTW9kZSl7Z2xvYmFsTW9kZT0hIWdsb2JhbE1vZGU7dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8uaGlzdG9yeUVuYWJsZWQ9Z2xvYmFsTW9kZTt0aGlzLmhvdGtleUNvbnRyb2xsZXIuZ2xvYmFsTW9kZT1nbG9iYWxNb2RlO30sZ2V0IGhvdGtleUNvbnRyb2xsZXIoKXtyZXR1cm4gdGhpcy4kLmhrYzt9LHVwZGF0ZURvY3VtZW50RmF2aWNvbigpe2xldCBodWU7aWYoIXRoaXMubW9kZWwpe2h1ZT0nYmx1ZSc7fWVsc2V7aHVlPXRoaXMubW9kZWwuZmF2aWNvbkh1ZTt9Ci1sZXQgZmF2aWNvbkRhdGE9dHIudWkuYi5GYXZpY29uc0J5SHVlW2h1ZV07aWYoZmF2aWNvbkRhdGE9PT11bmRlZmluZWQpe2Zhdmljb25EYXRhPXRyLnVpLmIuRmF2aWNvbnNCeUh1ZS5ibHVlO30KLWxldCBsaW5rPVBvbHltZXIuZG9tKGRvY3VtZW50LmhlYWQpLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbcmVsPSJzaG9ydGN1dCBpY29uIl0nKTtpZighbGluayl7bGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7bGluay5yZWw9J3Nob3J0Y3V0IGljb24nO1BvbHltZXIuZG9tKGRvY3VtZW50LmhlYWQpLmFwcGVuZENoaWxkKGxpbmspO30KLWxpbmsuaHJlZj1mYXZpY29uRGF0YTt9LGdldCBzaG93Rmxvd0V2ZW50cygpe3JldHVybiB0aGlzLnNob3dGbG93RXZlbnRzXzt9LHNldCBzaG93Rmxvd0V2ZW50cyhzaG93Rmxvd0V2ZW50cyl7dGhpcy5zaG93Rmxvd0V2ZW50c189c2hvd0Zsb3dFdmVudHM7aWYoIXRoaXMudHJhY2tWaWV3XylyZXR1cm47dGhpcy50cmFja1ZpZXdfLnZpZXdwb3J0LnNob3dGbG93RXZlbnRzPXNob3dGbG93RXZlbnRzO30sZ2V0IGhpZ2hsaWdodFZTeW5jKCl7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0VlN5bmNfO30sc2V0IGhpZ2hsaWdodFZTeW5jKGhpZ2hsaWdodFZTeW5jKXt0aGlzLmhpZ2hsaWdodFZTeW5jXz1oaWdobGlnaHRWU3luYztpZighdGhpcy50cmFja1ZpZXdfKXJldHVybjt0aGlzLnRyYWNrVmlld18udmlld3BvcnQuaGlnaGxpZ2h0VlN5bmM9aGlnaGxpZ2h0VlN5bmM7fSxpbml0SGVscEJ1dHRvbl8oKXtjb25zdCBoZWxwQnV0dG9uRWw9dGhpcy4kLnZpZXdfaGVscF9idXR0b247Y29uc3QgZGxnPW5ldyB0ci51aS5iLk92ZXJsYXkoKTtkbGcudGl0bGU9J0Nocm9tZSBUcmFjaW5nIEhlbHAnO2RsZy52aXNpYmxlPWZhbHNlO2RsZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS10aW1lbGluZS12aWV3LWhlbHAtb3ZlcmxheScpKTtmdW5jdGlvbiBvbkNsaWNrKGUpe2RsZy52aXNpYmxlPSFkbGcudmlzaWJsZTtlLnN0b3BQcm9wYWdhdGlvbigpO30KLWhlbHBCdXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsb25DbGljay5iaW5kKHRoaXMpKTt9LGluaXRDb25zb2xlQnV0dG9uXygpe2NvbnN0IHRvZ2dsZUVsPXRoaXMuJC52aWV3X2NvbnNvbGVfYnV0dG9uO2Z1bmN0aW9uIG9uQ2xpY2soZSl7dGhpcy5zY3JpcHRpbmdDdGxfLnRvZ2dsZVZpc2liaWxpdHkoKTtlLnN0b3BQcm9wYWdhdGlvbigpO3JldHVybiBmYWxzZTt9Ci10b2dnbGVFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsb25DbGljay5iaW5kKHRoaXMpKTt9LGluaXRNZXRhZGF0YUJ1dHRvbl8oKXtjb25zdCBzaG93RWw9dGhpcy4kLnZpZXdfbWV0YWRhdGFfYnV0dG9uO2Z1bmN0aW9uIG9uQ2xpY2soZSl7Y29uc3QgZGxnPW5ldyB0ci51aS5iLk92ZXJsYXkoKTtkbGcudGl0bGU9J01ldGFkYXRhIGZvciB0cmFjZSc7Y29uc3QgbWV0YWRhdGFPdmVybGF5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLXRpbWVsaW5lLXZpZXctbWV0YWRhdGEtb3ZlcmxheScpO21ldGFkYXRhT3ZlcmxheS5tZXRhZGF0YT10aGlzLm1vZGVsLm1ldGFkYXRhO1BvbHltZXIuZG9tKGRsZykuYXBwZW5kQ2hpbGQobWV0YWRhdGFPdmVybGF5KTtkbGcudmlzaWJsZT10cnVlO2Uuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIGZhbHNlO30KLXNob3dFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsb25DbGljay5iaW5kKHRoaXMpKTt0aGlzLnVwZGF0ZU1ldGFkYXRhQnV0dG9uVmlzaWJpbGl0eV8oKTt9LHVwZGF0ZU1ldGFkYXRhQnV0dG9uVmlzaWJpbGl0eV8oKXtjb25zdCBzaG93RWw9dGhpcy4kLnZpZXdfbWV0YWRhdGFfYnV0dG9uO3Nob3dFbC5zdHlsZS5kaXNwbGF5PSh0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLm1ldGFkYXRhLmxlbmd0aCk/Jyc6J25vbmUnO30sZ2V0IGxlZnRDb250cm9scygpe3JldHVybiB0aGlzLmxlZnRDb250cm9sc0VsXzt9LGdldCByaWdodENvbnRyb2xzKCl7cmV0dXJuIHRoaXMucmlnaHRDb250cm9sc0VsXzt9LGdldCBjb2xsYXBzaW5nQ29udHJvbHMoKXtyZXR1cm4gdGhpcy5jb2xsYXBzaW5nQ29udHJvbHNFbF87fSxnZXQgdmlld1RpdGxlKCl7cmV0dXJuIFBvbHltZXIuZG9tKHRoaXMudGl0bGVFbF8pLnRleHRDb250ZW50LnN1YnN0cmluZyhQb2x5bWVyLmRvbSh0aGlzLnRpdGxlRWxfKS50ZXh0Q29udGVudC5sZW5ndGgtMik7fSxzZXQgdmlld1RpdGxlKHRleHQpe2lmKHRleHQ9PT11bmRlZmluZWQpe1BvbHltZXIuZG9tKHRoaXMudGl0bGVFbF8pLnRleHRDb250ZW50PScnO3RoaXMudGl0bGVFbF8uaGlkZGVuPXRydWU7cmV0dXJuO30KLXRoaXMudGl0bGVFbF8uaGlkZGVuPWZhbHNlO1BvbHltZXIuZG9tKHRoaXMudGl0bGVFbF8pLnRleHRDb250ZW50PXRleHQ7fSxnZXQgbW9kZWwoKXtpZih0aGlzLnRyYWNrVmlld18pe3JldHVybiB0aGlzLnRyYWNrVmlld18ubW9kZWw7fQotcmV0dXJuIHVuZGVmaW5lZDt9LHNldCBtb2RlbChtb2RlbCl7dGhpcy5idWlsZChtb2RlbCk7fSxhc3luYyBidWlsZChtb2RlbCl7dGhpcy5xdWV1ZWRNb2RlbF89bW9kZWw7dGhpcy5idWlsdFByb21pc2VfPW5ldyBQcm9taXNlKChyZXNvbHZlLHJlamVjdCk9Pnt0aGlzLmRvbmVCdWlsZGluZ189cmVzb2x2ZTt9KTtpZih0aGlzLnRyYWNrVmlld0NvbnRhaW5lcl8pYXdhaXQgdGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBidWlsdFByb21pc2UoKXtyZXR1cm4gdGhpcy5idWlsdFByb21pc2VfO30sYXN5bmMgdXBkYXRlQ29udGVudHNfKCl7aWYodGhpcy50cmFja1ZpZXdDb250YWluZXJfPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ3RpbWVsaW5lLXZpZXcudXBkYXRlQ29udGVudHNfIHJlcXVpcmVzIHRyYWNrVmlld0NvbnRhaW5lcl8nKTt9Ci1jb25zdCBtb2RlbD10aGlzLnF1ZXVlZE1vZGVsXzt0aGlzLnF1ZXVlZE1vZGVsXz11bmRlZmluZWQ7Y29uc3QgbW9kZWxJbnN0YW5jZUNoYW5nZWQ9bW9kZWwhPT10aGlzLm1vZGVsO2NvbnN0IG1vZGVsVmFsaWQ9bW9kZWwmJiFtb2RlbC5ib3VuZHMuaXNFbXB0eTtjb25zdCBpbXBvcnRXYXJuaW5nc0VsPVBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvcignI2ltcG9ydC13YXJuaW5ncycpO1BvbHltZXIuZG9tKGltcG9ydFdhcm5pbmdzRWwpLnRleHRDb250ZW50PScnO2lmKG1vZGVsSW5zdGFuY2VDaGFuZ2VkKXtpZih0aGlzLnJhaWxTY29yZVNwYW5fKXt0aGlzLnJhaWxTY29yZVNwYW5fLm1vZGVsPXVuZGVmaW5lZDt9Ci1Qb2x5bWVyLmRvbSh0aGlzLnRyYWNrVmlld0NvbnRhaW5lcl8pLnRleHRDb250ZW50PScnO2lmKHRoaXMudHJhY2tWaWV3Xyl7dGhpcy50cmFja1ZpZXdfLnZpZXdwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsdGhpcy5vblZpZXdwb3J0Q2hhbmdlZF8pO3RoaXMudHJhY2tWaWV3Xy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcj11bmRlZmluZWQ7dGhpcy50cmFja1ZpZXdfLmRldGFjaCgpO3RoaXMudHJhY2tWaWV3Xz11bmRlZmluZWQ7fQotdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8ubW9kZWxXaWxsQ2hhbmdlKCk7fQotaWYobW9kZWxWYWxpZCYmIXRoaXMudHJhY2tWaWV3Xyl7dGhpcy50cmFja1ZpZXdfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLXRpbWVsaW5lLXRyYWNrLXZpZXcnKTt0aGlzLnRyYWNrVmlld18udGltZWxpbmVWaWV3PXRoaXM7dGhpcy50cmFja1ZpZXcuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXI9dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl87UG9seW1lci5kb20odGhpcy50cmFja1ZpZXdDb250YWluZXJfKS5hcHBlbmRDaGlsZCh0aGlzLnRyYWNrVmlld18pO3RoaXMudHJhY2tWaWV3Xy52aWV3cG9ydC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLHRoaXMub25WaWV3cG9ydENoYW5nZWRfKTt9Ci1pZihtb2RlbFZhbGlkKXt0aGlzLnRyYWNrVmlld18ubW9kZWw9bW9kZWw7dGhpcy50cmFja1ZpZXdfLnZpZXdwb3J0LnNob3dGbG93RXZlbnRzPXRoaXMuc2hvd0Zsb3dFdmVudHM7dGhpcy50cmFja1ZpZXdfLnZpZXdwb3J0LmhpZ2hsaWdodFZTeW5jPXRoaXMuaGlnaGxpZ2h0VlN5bmM7aWYodGhpcy5yYWlsU2NvcmVTcGFuXyl7dGhpcy5yYWlsU2NvcmVTcGFuXy5tb2RlbD1tb2RlbDt9Ci10aGlzLiQuZGlzcGxheV91bml0LnByZWZlcnJlZFRpbWVEaXNwbGF5TW9kZT1tb2RlbC5pbnRyaW5zaWNUaW1lVW5pdDt9Ci1pZihtb2RlbCl7Zm9yKGNvbnN0IHdhcm5pbmcgb2YgbW9kZWwuaW1wb3J0V2FybmluZ3NUaGF0U2hvdWxkQmVTaG93blRvVXNlcil7aW1wb3J0V2FybmluZ3NFbC5hZGRNZXNzYWdlKGBJbXBvcnQgV2FybmluZzogJHt3YXJuaW5nLnR5cGV9OiAke3dhcm5pbmcubWVzc2FnZX1gLFt7YnV0dG9uVGV4dDonRGlzbWlzcycsb25DbGljayhldmVudCxpbmZvYmFyKXtpbmZvYmFyLnZpc2libGU9ZmFsc2U7fX1dKTt9fQotaWYobW9kZWxJbnN0YW5jZUNoYW5nZWQpe3RoaXMudXBkYXRlTWV0YWRhdGFCdXR0b25WaXNpYmlsaXR5XygpO3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLm1vZGVsRGlkQ2hhbmdlKCk7dGhpcy5vblZpZXdwb3J0Q2hhbmdlZF8oKTt9Ci10aGlzLmRvbmVCdWlsZGluZ18oKTt9LGdldCBicnVzaGluZ1N0YXRlQ29udHJvbGxlcigpe3JldHVybiB0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXzt9LGdldCB0cmFja1ZpZXcoKXtyZXR1cm4gdGhpcy50cmFja1ZpZXdfO30sZ2V0IHNldHRpbmdzKCl7aWYoIXRoaXMuc2V0dGluZ3NfKXt0aGlzLnNldHRpbmdzXz1uZXcgdHIuYi5TZXR0aW5ncygpO30KLXJldHVybiB0aGlzLnNldHRpbmdzXzt9LHNldCBmb2N1c0VsZW1lbnQodmFsdWUpe3Rocm93IG5ldyBFcnJvcignVGhpcyBpcyBkZXByZWNhdGVkLiBQbGVhc2Ugc2V0IGdsb2JhbE1vZGUgdG8gdHJ1ZS4nKTt9LGJpbmRLZXlMaXN0ZW5lcnNfKCl7Y29uc3QgaGtjPXRoaXMuaG90a2V5Q29udHJvbGxlcjtoa2MuYWRkSG90S2V5KG5ldyB0ci51aS5iLkhvdEtleSh7ZXZlbnRUeXBlOidrZXlwcmVzcycsa2V5Q29kZTonYCcuY2hhckNvZGVBdCgwKSx1c2VDYXB0dXJlOnRydWUsdGhpc0FyZzp0aGlzLGNhbGxiYWNrKGUpe3RoaXMuc2NyaXB0aW5nQ3RsXy50b2dnbGVWaXNpYmlsaXR5KCk7aWYoIXRoaXMuc2NyaXB0aW5nQ3RsXy5oYXNGb2N1cyl7dGhpcy5mb2N1cygpO30KLWUuc3RvcFByb3BhZ2F0aW9uKCk7fX0pKTtoa2MuYWRkSG90S2V5KG5ldyB0ci51aS5iLkhvdEtleSh7ZXZlbnRUeXBlOidrZXlwcmVzcycsa2V5Q29kZTonLycuY2hhckNvZGVBdCgwKSx1c2VDYXB0dXJlOnRydWUsdGhpc0FyZzp0aGlzLGNhbGxiYWNrKGUpe2lmKHRoaXMuc2NyaXB0aW5nQ3RsXy5oYXNGb2N1cylyZXR1cm47aWYodGhpcy5maW5kQ3RsXy5oYXNGb2N1cyl7dGhpcy5mb2N1cygpO31lbHNle3RoaXMuZmluZEN0bF8uZm9jdXMoKTt9Ci1lLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSkpO2hrYy5hZGRIb3RLZXkobmV3IHRyLnVpLmIuSG90S2V5KHtldmVudFR5cGU6J2tleXByZXNzJyxrZXlDb2RlOic/Jy5jaGFyQ29kZUF0KDApLHVzZUNhcHR1cmU6ZmFsc2UsdGhpc0FyZzp0aGlzLGNhbGxiYWNrKGUpe3RoaXMuJC52aWV3X2hlbHBfYnV0dG9uLmNsaWNrKCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSkpO2hrYy5hZGRIb3RLZXkobmV3IHRyLnVpLmIuSG90S2V5KHtldmVudFR5cGU6J2tleXByZXNzJyxrZXlDb2RlOid2Jy5jaGFyQ29kZUF0KDApLHVzZUNhcHR1cmU6ZmFsc2UsdGhpc0FyZzp0aGlzLGNhbGxiYWNrKGUpe3RoaXMudG9nZ2xlSGlnaGxpZ2h0VlN5bmNfKCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSkpO30sb25WaWV3cG9ydENoYW5nZWRfKGUpe2NvbnN0IHNwYz10aGlzLnNpZGVQYW5lbENvbnRhaW5lcl87aWYoIXRoaXMudHJhY2tWaWV3Xyl7c3BjLnJhbmdlT2ZJbnRlcmVzdC5yZXNldCgpO3JldHVybjt9Ci1jb25zdCB2cj10aGlzLnRyYWNrVmlld18udmlld3BvcnQuaW50ZXJlc3RSYW5nZS5hc1JhbmdlT2JqZWN0KCk7aWYoIXNwYy5yYW5nZU9mSW50ZXJlc3QuZXF1YWxzKHZyKSl7c3BjLnJhbmdlT2ZJbnRlcmVzdD12cjt9Ci1pZih0aGlzLnJhaWxTY29yZVNwYW5fJiZ0aGlzLm1vZGVsKXt0aGlzLnJhaWxTY29yZVNwYW5fLm1vZGVsPXRoaXMubW9kZWw7fX0sdG9nZ2xlSGlnaGxpZ2h0VlN5bmNfKCl7dGhpcy5oaWdobGlnaHRWU3luY0NoZWNrYm94Xy5jaGVja2VkPSF0aGlzLmhpZ2hsaWdodFZTeW5jQ2hlY2tib3hfLmNoZWNrZWQ7fSxzZXRGaW5kQ3RsVGV4dChzdHJpbmcpe3RoaXMuZmluZEN0bF8uc2V0VGV4dChzdHJpbmcpO319KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUm93KHRpdGxlLGRhdGEsZ3JvdXBpbmdLZXlGdW5jcyxyb3dTdGF0c0NvbnN0cnVjdG9yKXt0aGlzLnRpdGxlPXRpdGxlO3RoaXMuZGF0YV89ZGF0YTtpZihncm91cGluZ0tleUZ1bmNzPT09dW5kZWZpbmVkKXtncm91cGluZ0tleUZ1bmNzPVtdO30KLXRoaXMuZ3JvdXBpbmdLZXlGdW5jc189Z3JvdXBpbmdLZXlGdW5jczt0aGlzLnJvd1N0YXRzQ29uc3RydWN0b3JfPXJvd1N0YXRzQ29uc3RydWN0b3I7dGhpcy5zdWJSb3dzQnVpbHRfPWZhbHNlO3RoaXMuc3ViUm93c189dW5kZWZpbmVkO3RoaXMucm93U3RhdHNfPXVuZGVmaW5lZDt9Ci1Sb3cucHJvdG90eXBlPXtnZXRDdXJyZW50R3JvdXBpbmdLZXlGdW5jXygpe2lmKHRoaXMuZ3JvdXBpbmdLZXlGdW5jc18ubGVuZ3RoPT09MClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLmdyb3VwaW5nS2V5RnVuY3NfWzBdO30sZ2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5kYXRhXzt9LGdldCByb3dTdGF0cygpe2lmKHRoaXMucm93U3RhdHNfPT09dW5kZWZpbmVkKXt0aGlzLnJvd1N0YXRzXz1uZXcgdGhpcy5yb3dTdGF0c0NvbnN0cnVjdG9yXyh0aGlzKTt9Ci1yZXR1cm4gdGhpcy5yb3dTdGF0c187fSxyZWJ1aWxkU3ViUm93c0lmTmVlZGVkXygpe2lmKHRoaXMuc3ViUm93c0J1aWx0XylyZXR1cm47dGhpcy5zdWJSb3dzQnVpbHRfPXRydWU7Y29uc3QgZ3JvdXBpbmdLZXlGdW5jPXRoaXMuZ2V0Q3VycmVudEdyb3VwaW5nS2V5RnVuY18oKTtpZihncm91cGluZ0tleUZ1bmM9PT11bmRlZmluZWQpe3RoaXMuc3ViUm93c189dW5kZWZpbmVkO3JldHVybjt9Ci1jb25zdCBkYXRhQnlLZXk9e307bGV0IGhhc1ZhbHVlcz1mYWxzZTt0aGlzLmRhdGFfLmZvckVhY2goZnVuY3Rpb24oZGF0dW0pe2NvbnN0IGtleT1ncm91cGluZ0tleUZ1bmMoZGF0dW0pO2hhc1ZhbHVlcz1oYXNWYWx1ZXN8fChrZXkhPT11bmRlZmluZWQpO2lmKGRhdGFCeUtleVtrZXldPT09dW5kZWZpbmVkKXtkYXRhQnlLZXlba2V5XT1bXTt9Ci1kYXRhQnlLZXlba2V5XS5wdXNoKGRhdHVtKTt9KTtpZighaGFzVmFsdWVzKXt0aGlzLnN1YlJvd3NfPXVuZGVmaW5lZDtyZXR1cm47fQotdGhpcy5zdWJSb3dzXz1bXTtmb3IoY29uc3Qga2V5IGluIGRhdGFCeUtleSl7Y29uc3Qgcm93PW5ldyBSb3coa2V5LGRhdGFCeUtleVtrZXldLHRoaXMuZ3JvdXBpbmdLZXlGdW5jc18uc2xpY2UoMSksdGhpcy5yb3dTdGF0c0NvbnN0cnVjdG9yXyk7dGhpcy5zdWJSb3dzXy5wdXNoKHJvdyk7fX0sZ2V0IGlzRXhwYW5kZWQoKXtyZXR1cm4odGhpcy5zdWJSb3dzJiYodGhpcy5zdWJSb3dzLmxlbmd0aD4wKSYmKHRoaXMuc3ViUm93cy5sZW5ndGg8NSkpO30sZ2V0IHN1YlJvd3MoKXt0aGlzLnJlYnVpbGRTdWJSb3dzSWZOZWVkZWRfKCk7cmV0dXJuIHRoaXMuc3ViUm93c187fX07UG9seW1lcih7aXM6J3RyLXVpLWItZ3JvdXBpbmctdGFibGUnLGNyZWF0ZWQoKXt0aGlzLmRhdGFUb0dyb3VwXz11bmRlZmluZWQ7dGhpcy5ncm91cEJ5Xz11bmRlZmluZWQ7dGhpcy5yb3dTdGF0c0NvbnN0cnVjdG9yXz11bmRlZmluZWQ7fSxnZXQgdGFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM7fSxzZXQgdGFibGVDb2x1bW5zKHRhYmxlQ29sdW1ucyl7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz10YWJsZUNvbHVtbnM7fSxnZXQgdGFibGVSb3dzKCl7cmV0dXJuIHRoaXMuJC50YWJsZS50YWJsZVJvd3M7fSxnZXQgc29ydENvbHVtbkluZGV4KCl7cmV0dXJuIHRoaXMuJC50YWJsZS5zb3J0Q29sdW1uSW5kZXg7fSxzZXQgc29ydENvbHVtbkluZGV4KHNvcnRDb2x1bW5JbmRleCl7dGhpcy4kLnRhYmxlLnNvcnRDb2x1bW5JbmRleD1zb3J0Q29sdW1uSW5kZXg7fSxnZXQgc29ydERlc2NlbmRpbmcoKXtyZXR1cm4gdGhpcy4kLnRhYmxlLnNvcnREZXNjZW5kaW5nO30sc2V0IHNvcnREZXNjZW5kaW5nKHNvcnREZXNjZW5kaW5nKXt0aGlzLiQudGFibGUuc29ydERlc2NlbmRpbmc9c29ydERlc2NlbmRpbmc7fSxnZXQgc2VsZWN0aW9uTW9kZSgpe3JldHVybiB0aGlzLiQudGFibGUuc2VsZWN0aW9uTW9kZTt9LHNldCBzZWxlY3Rpb25Nb2RlKHNlbGVjdGlvbk1vZGUpe3RoaXMuJC50YWJsZS5zZWxlY3Rpb25Nb2RlPXNlbGVjdGlvbk1vZGU7fSxnZXQgcm93SGlnaGxpZ2h0U3R5bGUoKXtyZXR1cm4gdGhpcy4kLnRhYmxlLnJvd0hpZ2hsaWdodFN0eWxlO30sc2V0IHJvd0hpZ2hsaWdodFN0eWxlKHJvd0hpZ2hsaWdodFN0eWxlKXt0aGlzLiQudGFibGUucm93SGlnaGxpZ2h0U3R5bGU9cm93SGlnaGxpZ2h0U3R5bGU7fSxnZXQgY2VsbEhpZ2hsaWdodFN0eWxlKCl7cmV0dXJuIHRoaXMuJC50YWJsZS5jZWxsSGlnaGxpZ2h0U3R5bGU7fSxzZXQgY2VsbEhpZ2hsaWdodFN0eWxlKGNlbGxIaWdobGlnaHRTdHlsZSl7dGhpcy4kLnRhYmxlLmNlbGxIaWdobGlnaHRTdHlsZT1jZWxsSGlnaGxpZ2h0U3R5bGU7fSxnZXQgc2VsZWN0ZWRDb2x1bW5JbmRleCgpe3JldHVybiB0aGlzLiQudGFibGUuc2VsZWN0ZWRDb2x1bW5JbmRleDt9LHNldCBzZWxlY3RlZENvbHVtbkluZGV4KHNlbGVjdGVkQ29sdW1uSW5kZXgpe3RoaXMuJC50YWJsZS5zZWxlY3RlZENvbHVtbkluZGV4PXNlbGVjdGVkQ29sdW1uSW5kZXg7fSxnZXQgc2VsZWN0ZWRUYWJsZVJvdygpe3JldHVybiB0aGlzLiQudGFibGUuc2VsZWN0ZWRUYWJsZVJvdzt9LHNldCBzZWxlY3RlZFRhYmxlUm93KHNlbGVjdGVkVGFibGVSb3cpe3RoaXMuJC50YWJsZS5zZWxlY3RlZFRhYmxlUm93PXNlbGVjdGVkVGFibGVSb3c7fSxnZXQgZ3JvdXBCeSgpe3JldHVybiB0aGlzLmdyb3VwQnlfO30sc2V0IGdyb3VwQnkoZ3JvdXBCeSl7dGhpcy5ncm91cEJ5Xz1ncm91cEJ5O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgZGF0YVRvR3JvdXAoKXtyZXR1cm4gdGhpcy5kYXRhVG9Hcm91cF87fSxzZXQgZGF0YVRvR3JvdXAoZGF0YVRvR3JvdXApe3RoaXMuZGF0YVRvR3JvdXBfPWRhdGFUb0dyb3VwO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgcm93U3RhdHNDb25zdHJ1Y3Rvcigpe3JldHVybiB0aGlzLnJvd1N0YXRzQ29uc3RydWN0b3JfO30sc2V0IHJvd1N0YXRzQ29uc3RydWN0b3Iocm93U3RhdHNDb25zdHJ1Y3Rvcil7dGhpcy5yb3dTdGF0c0NvbnN0cnVjdG9yXz1yb3dTdGF0c0NvbnN0cnVjdG9yO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxyZWJ1aWxkKCl7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9LHVwZGF0ZUNvbnRlbnRzXygpe2NvbnN0IGdyb3VwQnk9dGhpcy5ncm91cEJ5X3x8W107Y29uc3QgZGF0YVRvR3JvdXA9dGhpcy5kYXRhVG9Hcm91cF98fFtdO2NvbnN0IHJvd1N0YXRzQ29uc3RydWN0b3I9dGhpcy5yb3dTdGF0c0NvbnN0cnVjdG9yX3x8ZnVuY3Rpb24oKXt9O2NvbnN0IHN1cGVyUm93PW5ldyBSb3coJycsZGF0YVRvR3JvdXAsZ3JvdXBCeSxyb3dTdGF0c0NvbnN0cnVjdG9yKTt0aGlzLiQudGFibGUudGFibGVSb3dzPXN1cGVyUm93LnN1YlJvd3N8fFtdO319KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgVEhJU19ET0M9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5vd25lckRvY3VtZW50O1BvbHltZXIoe2lzOid0ci11aS1iLWdyb3VwaW5nLXRhYmxlLWdyb3VwYnktcGlja2VyLWdyb3VwJyxjcmVhdGVkKCl7dGhpcy5waWNrZXJfPXVuZGVmaW5lZDt0aGlzLmdyb3VwXz11bmRlZmluZWQ7fSxnZXQgcGlja2VyKCl7cmV0dXJuIHRoaXMucGlja2VyXzt9LHNldCBwaWNrZXIocGlja2VyKXt0aGlzLnBpY2tlcl89cGlja2VyO30sZ2V0IGdyb3VwKCl7cmV0dXJuIHRoaXMuZ3JvdXBfO30sc2V0IGdyb3VwKGcpe3RoaXMuZ3JvdXBfPWc7dGhpcy4kLmxhYmVsLnRleHRDb250ZW50PWcubGFiZWw7fSxnZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLiQuZW5hYmxlZC5jaGVja2VkO30sc2V0IGVuYWJsZWQoZW5hYmxlZCl7dGhpcy4kLmVuYWJsZWQuY2hlY2tlZD1lbmFibGVkO2lmKCF0aGlzLmVuYWJsZWQpe3RoaXMuJC5sZWZ0LnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC5yaWdodC5zdHlsZS5kaXNwbGF5PSdub25lJzt9fSxzZXQgaXNGaXJzdChpc0ZpcnN0KXt0aGlzLiQubGVmdC5zdHlsZS5kaXNwbGF5PSghdGhpcy5lbmFibGVkfHxpc0ZpcnN0KT8nbm9uZSc6J2lubGluZSc7fSxzZXQgaXNMYXN0KGlzTGFzdCl7dGhpcy4kLnJpZ2h0LnN0eWxlLmRpc3BsYXk9KCF0aGlzLmVuYWJsZWR8fGlzTGFzdCk/J25vbmUnOidpbmxpbmUnO30sbW92ZUxlZnRfKCl7dGhpcy5waWNrZXIubW92ZUxlZnRfKHRoaXMpO30sbW92ZVJpZ2h0Xygpe3RoaXMucGlja2VyLm1vdmVSaWdodF8odGhpcyk7fSxvbkVuYWJsZUNoYW5nZWRfKCl7aWYoIXRoaXMuZW5hYmxlZCl7dGhpcy4kLmxlZnQuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnJpZ2h0LnN0eWxlLmRpc3BsYXk9J25vbmUnO30KLXRoaXMucGlja2VyLm9uRW5hYmxlQ2hhbmdlZF8odGhpcyk7fX0pO1BvbHltZXIoe2lzOid0ci11aS1iLWdyb3VwaW5nLXRhYmxlLWdyb3VwYnktcGlja2VyJyxjcmVhdGVkKCl7dGhpcy5zZXR0aW5nc0tleV89dW5kZWZpbmVkO30sZ2V0IHNldHRpbmdzS2V5KCl7cmV0dXJuIHRoaXMuc2V0dGluZ3NLZXlfO30sc2V0IHNldHRpbmdzS2V5KHNldHRpbmdzS2V5KXt0aGlzLnNldHRpbmdzS2V5Xz1zZXR0aW5nc0tleTtpZih0aGlzLiQuY29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCl7dGhpcy5yZXN0b3JlU2V0dGluZ18oKTt9fSxyZXN0b3JlU2V0dGluZ18oKXtpZih0aGlzLnNldHRpbmdzS2V5Xz09PXVuZGVmaW5lZClyZXR1cm47dGhpcy5jdXJyZW50R3JvdXBLZXlzPXRyLmIuU2V0dGluZ3MuZ2V0KHRoaXMuc2V0dGluZ3NLZXlfLHRoaXMuY3VycmVudEdyb3VwS2V5cyk7fSxnZXQgcG9zc2libGVHcm91cHMoKXtyZXR1cm5bLi4udGhpcy4kLmNvbnRhaW5lci5jaGlsZHJlbl0ubWFwKGdyb3VwRWw9Pmdyb3VwRWwuZ3JvdXApO30sc2V0IHBvc3NpYmxlR3JvdXBzKHBvc3NpYmxlR3JvdXBzKXtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGFpbmVyKS50ZXh0Q29udGVudD0nJztmb3IobGV0IGk9MDtpPHBvc3NpYmxlR3JvdXBzLmxlbmd0aDsrK2kpe2NvbnN0IGdyb3VwRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1ncm91cGluZy10YWJsZS1ncm91cGJ5LXBpY2tlci1ncm91cCcpO2dyb3VwRWwucGlja2VyPXRoaXM7Z3JvdXBFbC5ncm91cD1wb3NzaWJsZUdyb3Vwc1tpXTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGFpbmVyKS5hcHBlbmRDaGlsZChncm91cEVsKTt9Ci10aGlzLnJlc3RvcmVTZXR0aW5nXygpO3RoaXMudXBkYXRlRmlyc3RMYXN0XygpO30sdXBkYXRlRmlyc3RMYXN0Xygpe2NvbnN0IGdyb3VwRWxzPXRoaXMuJC5jb250YWluZXIuY2hpbGRyZW47Y29uc3QgZW5hYmxlZEdyb3VwRWxzPVsuLi5ncm91cEVsc10uZmlsdGVyKGVsPT5lbC5lbmFibGVkKTtmb3IobGV0IGk9MDtpPGVuYWJsZWRHcm91cEVscy5sZW5ndGg7KytpKXtlbmFibGVkR3JvdXBFbHNbaV0uaXNGaXJzdD1pPT09MDtlbmFibGVkR3JvdXBFbHNbaV0uaXNMYXN0PWk9PT1lbmFibGVkR3JvdXBFbHMubGVuZ3RoLTE7fX0sZ2V0IGN1cnJlbnRHcm91cEtleXMoKXtyZXR1cm4gdGhpcy5jdXJyZW50R3JvdXBzLm1hcChncm91cD0+Z3JvdXAua2V5KTt9LGdldCBjdXJyZW50R3JvdXBzKCl7Y29uc3QgZ3JvdXBzPVtdO2Zvcihjb25zdCBncm91cEVsIG9mIHRoaXMuJC5jb250YWluZXIuY2hpbGRyZW4pe2lmKGdyb3VwRWwuZW5hYmxlZCl7Z3JvdXBzLnB1c2goZ3JvdXBFbC5ncm91cCk7fX0KLXJldHVybiBncm91cHM7fSxzZXQgY3VycmVudEdyb3VwS2V5cyhuZXdLZXlzKXtpZighdHIuYi5jb21wYXJlQXJyYXlzKHRoaXMuY3VycmVudEdyb3VwS2V5cyxuZXdLZXlzLCh4LHkpPT54LmxvY2FsZUNvbXBhcmUoeSkpKXtyZXR1cm47fQotY29uc3QgcG9zc2libGVHcm91cHM9bmV3IE1hcCgpO2Zvcihjb25zdCBncm91cCBvZiB0aGlzLnBvc3NpYmxlR3JvdXBzKXtwb3NzaWJsZUdyb3Vwcy5zZXQoZ3JvdXAua2V5LGdyb3VwKTt9Ci1jb25zdCBncm91cEVscz10aGlzLiQuY29udGFpbmVyLmNoaWxkcmVuO2xldCBpPTA7Zm9yKGk9MDtpPG5ld0tleXMubGVuZ3RoOysraSl7Y29uc3QgZ3JvdXA9cG9zc2libGVHcm91cHMuZ2V0KG5ld0tleXNbaV0pO2lmKGdyb3VwPT09dW5kZWZpbmVkKXtuZXdLZXlzLnNwbGljZShpLDEpOy0taTtjb250aW51ZTt9Ci1ncm91cEVsc1tpXS5ncm91cD1ncm91cDtncm91cEVsc1tpXS5lbmFibGVkPXRydWU7cG9zc2libGVHcm91cHMuZGVsZXRlKG5ld0tleXNbaV0pO30KLWZvcihjb25zdCBncm91cCBvZiBwb3NzaWJsZUdyb3Vwcy52YWx1ZXMoKSl7Z3JvdXBFbHNbaV0uZ3JvdXA9Z3JvdXA7Z3JvdXBFbHNbaV0uZW5hYmxlZD1mYWxzZTsrK2k7fQotdGhpcy51cGRhdGVGaXJzdExhc3RfKCk7dGhpcy5vbkN1cnJlbnRHcm91cHNDaGFuZ2VkXygpO30sbW92ZUxlZnRfKGdyb3VwRWwpe2NvbnN0IHJlZmVyZW5jZT1ncm91cEVsLnByZXZpb3VzU2libGluZztQb2x5bWVyLmRvbSh0aGlzLiQuY29udGFpbmVyKS5yZW1vdmVDaGlsZChncm91cEVsKTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGFpbmVyKS5pbnNlcnRCZWZvcmUoZ3JvdXBFbCxyZWZlcmVuY2UpO3RoaXMudXBkYXRlRmlyc3RMYXN0XygpO2lmKGdyb3VwRWwuZW5hYmxlZCl7dGhpcy5vbkN1cnJlbnRHcm91cHNDaGFuZ2VkXygpO319LG1vdmVSaWdodF8oZ3JvdXBFbCl7Y29uc3QgcmVmZXJlbmNlPWdyb3VwRWwubmV4dFNpYmxpbmcubmV4dFNpYmxpbmc7UG9seW1lci5kb20odGhpcy4kLmNvbnRhaW5lcikucmVtb3ZlQ2hpbGQoZ3JvdXBFbCk7aWYocmVmZXJlbmNlKXtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGFpbmVyKS5pbnNlcnRCZWZvcmUoZ3JvdXBFbCxyZWZlcmVuY2UpO31lbHNle1BvbHltZXIuZG9tKHRoaXMuJC5jb250YWluZXIpLmFwcGVuZENoaWxkKGdyb3VwRWwpO30KLXRoaXMudXBkYXRlRmlyc3RMYXN0XygpO2lmKGdyb3VwRWwuZW5hYmxlZCl7dGhpcy5vbkN1cnJlbnRHcm91cHNDaGFuZ2VkXygpO319LG9uQ3VycmVudEdyb3Vwc0NoYW5nZWRfKCl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyB0ci5iLkV2ZW50KCdjdXJyZW50LWdyb3Vwcy1jaGFuZ2VkJykpO3RyLmIuU2V0dGluZ3Muc2V0KHRoaXMuc2V0dGluZ3NLZXlfLHRoaXMuY3VycmVudEdyb3VwS2V5cyk7fSxvbkVuYWJsZUNoYW5nZWRfKGdyb3VwRWwpe3RoaXMudXBkYXRlRmlyc3RMYXN0XygpO3RoaXMub25DdXJyZW50R3JvdXBzQ2hhbmdlZF8oKTt9fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnOyhmdW5jdGlvbigpe1BvbHltZXIoe2lzOid0ci11aS1zcC1maWxlLXNpemUtc3RhdHMtc2lkZS1wYW5lbCcsYmVoYXZpb3JzOlt0ci51aS5iZWhhdmlvcnMuU2lkZVBhbmVsXSxyZWFkeSgpe3RoaXMubW9kZWxfPXVuZGVmaW5lZDt0aGlzLnNlbGVjdGlvbl89bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7dGhpcy4kLnBpY2tlci5zZXR0aW5nc0tleT0ndHItdWktc3AtZmlsZS1zaXplLXN0YXRzLXNpZGUtcGFuZWwtcGlja2VyJzt0aGlzLiQucGlja2VyLnBvc3NpYmxlR3JvdXBzPVt7a2V5OidwaGFzZScsbGFiZWw6J0V2ZW50IFR5cGUnLGRhdGFGbihldmVudFN0YXQpe3JldHVybiBldmVudFN0YXQucGhhc2U7fX0se2tleTonY2F0ZWdvcnknLGxhYmVsOidDYXRlZ29yeScsZGF0YUZuKGV2ZW50U3RhdCl7cmV0dXJuIGV2ZW50U3RhdC5jYXRlZ29yeTt9fSx7a2V5Oid0aXRsZScsbGFiZWw6J1RpdGxlJyxkYXRhRm4oZXZlbnRTdGF0KXtyZXR1cm4gZXZlbnRTdGF0LnRpdGxlO319XTtpZih0aGlzLiQucGlja2VyLmN1cnJlbnRHcm91cEtleXMubGVuZ3RoPT09MCl7dGhpcy4kLnBpY2tlci5jdXJyZW50R3JvdXBLZXlzPVsncGhhc2UnLCd0aXRsZSddO30KLXRoaXMuJC5waWNrZXIuYWRkRXZlbnRMaXN0ZW5lcignY3VycmVudC1ncm91cHMtY2hhbmdlZCcsdGhpcy51cGRhdGVDb250ZW50c18uYmluZCh0aGlzKSk7fSxnZXQgdGV4dExhYmVsKCl7cmV0dXJuJ0ZpbGUgU2l6ZSBTdGF0cyc7fSxzdXBwb3J0c01vZGVsKG0pe2lmKCFtKXtyZXR1cm57c3VwcG9ydGVkOmZhbHNlLHJlYXNvbjonTm8gc3RhdHMgd2VyZSBjb2xsZWN0ZWQgZm9yIHRoaXMgZmlsZS4nfTt9Ci1pZihtLnN0YXRzLmFsbFRyYWNlRXZlbnRTdGF0cy5sZW5ndGg9PT0wKXtyZXR1cm57c3VwcG9ydGVkOmZhbHNlLHJlYXNvbjonTm8gc3RhdHMgd2VyZSBjb2xsZWN0ZWQgZm9yIHRoaXMgZmlsZS4nfTt9Ci1yZXR1cm57c3VwcG9ydGVkOnRydWV9O30sZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30sc2V0IG1vZGVsKG1vZGVsKXt0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHJhbmdlT2ZJbnRlcmVzdCgpe3JldHVybiB0aGlzLnJhbmdlT2ZJbnRlcmVzdF87fSxzZXQgcmFuZ2VPZkludGVyZXN0KHJhbmdlT2ZJbnRlcmVzdCl7dGhpcy5yYW5nZU9mSW50ZXJlc3RfPXJhbmdlT2ZJbnRlcmVzdDt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuc2VsZWN0aW9uXz1zZWxlY3Rpb247fSxjcmVhdGVDb2x1bW5zXyhzdGF0cyl7Y29uc3QgY29sdW1ucz1be3RpdGxlOidUaXRsZScsdmFsdWUocm93KXtjb25zdCB0aXRsZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtQb2x5bWVyLmRvbSh0aXRsZUVsKS50ZXh0Q29udGVudD1yb3cudGl0bGU7dGl0bGVFbC5zdHlsZS50ZXh0T3ZlcmZsb3c9J2VsbGlwc2lzJztyZXR1cm4gdGl0bGVFbDt9LGNtcChhLGIpe3JldHVybiBhLnRpdGxlLmxvY2FsZUNvbXBhcmUoYi50aXRsZSk7fSx3aWR0aDonNDAwcHgnfSx7dGl0bGU6J051bSBFdmVudHMnLGFsaWduOnRyLnVpLmIuVGFibGVGb3JtYXQuQ29sdW1uQWxpZ25tZW50LlJJR0hULHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5yb3dTdGF0cy5udW1FdmVudHM7fSxjbXAoYSxiKXtyZXR1cm4gYS5yb3dTdGF0cy5udW1FdmVudHMtYi5yb3dTdGF0cy5udW1FdmVudHM7fSx3aWR0aDonODBweCd9XTtpZihzdGF0cyYmc3RhdHMuaGFzRXZlbnRTaXplc2luQnl0ZXMpe2NvbHVtbnMucHVzaCh7dGl0bGU6J0J5dGVzJyx2YWx1ZShyb3cpe2NvbnN0IHZhbHVlPW5ldyB0ci5iLlNjYWxhcih0ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzLHJvdy5yb3dTdGF0cy50b3RhbEV2ZW50U2l6ZWluQnl0ZXMpO2NvbnN0IHNwYW5FbD10ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4odmFsdWUpO3JldHVybiBzcGFuRWw7fSxjbXAoYSxiKXtyZXR1cm4gYS5yb3dTdGF0cy50b3RhbEV2ZW50U2l6ZWluQnl0ZXMtCi1iLnJvd1N0YXRzLnRvdGFsRXZlbnRTaXplaW5CeXRlczt9LHdpZHRoOic4MHB4J30pO30KLXJldHVybiBjb2x1bW5zO30sdXBkYXRlQ29udGVudHNfKCl7Y29uc3QgdGFibGU9dGhpcy4kLnRhYmxlO2NvbnN0IGNvbHVtbnM9dGhpcy5jcmVhdGVDb2x1bW5zXyh0aGlzLm1vZGVsLnN0YXRzKTt0YWJsZS5yb3dTdGF0c0NvbnN0cnVjdG9yPWZ1bmN0aW9uIE1vZGVsU3RhdHNSb3dTdGF0cyhyb3cpe2NvbnN0IHN1bT10ci5iLm1hdGguU3RhdGlzdGljcy5zdW0ocm93LmRhdGEsZnVuY3Rpb24oeCl7cmV0dXJuIHgubnVtRXZlbnRzO30pO2NvbnN0IHRvdGFsRXZlbnRTaXplaW5CeXRlcz10ci5iLm1hdGguU3RhdGlzdGljcy5zdW0ocm93LmRhdGEseD0+eC50b3RhbEV2ZW50U2l6ZWluQnl0ZXMpO3JldHVybntudW1FdmVudHM6c3VtLHRvdGFsRXZlbnRTaXplaW5CeXRlc307fTt0YWJsZS50YWJsZUNvbHVtbnM9Y29sdW1uczt0YWJsZS5zb3J0Q29sdW1uSW5kZXg9MTt0YWJsZS5zb3J0RGVzY2VuZGluZz10cnVlO3RhYmxlLnNlbGVjdGlvbk1vZGU9dHIudWkuYi5UYWJsZUZvcm1hdC5TZWxlY3Rpb25Nb2RlLlJPVzt0YWJsZS5ncm91cEJ5PXRoaXMuJC5waWNrZXIuY3VycmVudEdyb3Vwcy5tYXAoZnVuY3Rpb24oZ3JvdXApe3JldHVybiBncm91cC5kYXRhRm47fSk7aWYoIXRoaXMubW9kZWwpe3RhYmxlLmRhdGFUb0dyb3VwPVtdO31lbHNle3RhYmxlLmRhdGFUb0dyb3VwPXRoaXMubW9kZWwuc3RhdHMuYWxsVHJhY2VFdmVudFN0YXRzO30KLXRoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fX0pO3RyLnVpLnNpZGVfcGFuZWwuU2lkZVBhbmVsUmVnaXN0cnkucmVnaXN0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktc3AtZmlsZS1zaXplLXN0YXRzLXNpZGUtcGFuZWwnKTt9KTt9KSgpOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubXJlJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEZhaWx1cmUoam9iLGZ1bmN0aW9uSGFuZGxlU3RyaW5nLHRyYWNlQ2Fub25pY2FsVXJsLGZhaWx1cmVUeXBlTmFtZSxkZXNjcmlwdGlvbixzdGFjayl7dGhpcy5qb2I9am9iO3RoaXMuZnVuY3Rpb25IYW5kbGVTdHJpbmc9ZnVuY3Rpb25IYW5kbGVTdHJpbmc7dGhpcy50cmFjZUNhbm9uaWNhbFVybD10cmFjZUNhbm9uaWNhbFVybDt0aGlzLmZhaWx1cmVUeXBlTmFtZT1mYWlsdXJlVHlwZU5hbWU7dGhpcy5kZXNjcmlwdGlvbj1kZXNjcmlwdGlvbjt0aGlzLnN0YWNrPXN0YWNrO30KLUZhaWx1cmUucHJvdG90eXBlPXthc0RpY3QoKXtyZXR1cm57ZnVuY3Rpb25faGFuZGxlX3N0cmluZzp0aGlzLmZ1bmN0aW9uSGFuZGxlU3RyaW5nLHRyYWNlX2Nhbm9uaWNhbF91cmw6dGhpcy50cmFjZUNhbm9uaWNhbFVybCx0eXBlOnRoaXMuZmFpbHVyZVR5cGVOYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sc3RhY2s6dGhpcy5zdGFja307fX07RmFpbHVyZS5mcm9tRGljdD1mdW5jdGlvbihmYWlsdXJlRGljdCl7cmV0dXJuIG5ldyBGYWlsdXJlKHVuZGVmaW5lZCxmYWlsdXJlRGljdC5mdW5jdGlvbl9oYW5kbGVfc3RyaW5nLGZhaWx1cmVEaWN0LnRyYWNlX2Nhbm9uaWNhbF91cmwsZmFpbHVyZURpY3QudHlwZSxmYWlsdXJlRGljdC5kZXNjcmlwdGlvbixmYWlsdXJlRGljdC5zdGFjayk7fTtyZXR1cm57RmFpbHVyZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubXJlJyxmdW5jdGlvbigpe2NvbnN0IEZ1bmN0aW9uUmVnaXN0cnk9e2FsbEZ1bmN0aW9uc186W10sYWxsRnVuY3Rpb25zQnlOYW1lXzp7fSxnZXQgYWxsRnVuY3Rpb25zKCl7cmV0dXJuIHRoaXMuYWxsRnVuY3Rpb25zXzt9LGdldCBhbGxGdW5jdGlvbnNCeU5hbWUoKXtyZXR1cm4gdGhpcy5hbGxGdW5jdGlvbnNCeU5hbWVfO319O0Z1bmN0aW9uUmVnaXN0cnkuZ2V0RnVuY3Rpb249ZnVuY3Rpb24obmFtZSl7cmV0dXJuIHRoaXMuYWxsRnVuY3Rpb25zQnlOYW1lX1tuYW1lXTt9O0Z1bmN0aW9uUmVnaXN0cnkucmVnaXN0ZXI9ZnVuY3Rpb24oZnVuYyl7aWYoZnVuYy5uYW1lPT09Jycpe3Rocm93IG5ldyBFcnJvcignUmVnaXN0ZXJlZCBmdW5jdGlvbnMgbXVzdCBub3QgYmUgYW5vbnltb3VzJyk7fQotaWYodGhpcy5hbGxGdW5jdGlvbnNCeU5hbWVbZnVuYy5uYW1lXSE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBuYW1lZCAnK2Z1bmMubmFtZSsnaXMgYWxyZWFkeSByZWdpc3RlcmVkLicpO30KLXRoaXMuYWxsRnVuY3Rpb25zQnlOYW1lW2Z1bmMubmFtZV09ZnVuYzt0aGlzLmFsbEZ1bmN0aW9ucy5wdXNoKGZ1bmMpO307ZnVuY3Rpb24gTW9kdWxlVG9Mb2FkKGhyZWYsZmlsZW5hbWUpe2lmKChocmVmIT09dW5kZWZpbmVkKT8oZmlsZW5hbWUhPT11bmRlZmluZWQpOihmaWxlbmFtZT09PXVuZGVmaW5lZCkpe3Rocm93IG5ldyBFcnJvcignTW9kdWxlVG9Mb2FkIG11c3Qgc3BlY2lmeSBleGFjdGx5IG9uZSBvZiBocmVmIG9yICcrJ2ZpbGVuYW1lJyk7fQotdGhpcy5ocmVmPWhyZWY7dGhpcy5maWxlbmFtZT1maWxlbmFtZTt9Ci1Nb2R1bGVUb0xvYWQucHJvdG90eXBlPXthc0RpY3QoKXtpZih0aGlzLmhyZWYhPT11bmRlZmluZWQpe3JldHVybnsnaHJlZic6dGhpcy5ocmVmfTt9Ci1yZXR1cm57J2ZpbGVuYW1lJzp0aGlzLmZpbGVuYW1lfTt9LHRvU3RyaW5nKCl7aWYodGhpcy5ocmVmIT09dW5kZWZpbmVkKXtyZXR1cm4nTW9kdWxlVG9Mb2FkKGhyZWY9IicrdGhpcy5ocmVmKyciKSc7fQotcmV0dXJuJ01vZHVsZVRvTG9hZChmaWxlbmFtZT0iJyt0aGlzLmZpbGVuYW1lKyciKSc7fX07TW9kdWxlVG9Mb2FkLmZyb21EaWN0PWZ1bmN0aW9uKG1vZHVsZURpY3Qpe3JldHVybiBuZXcgTW9kdWxlVG9Mb2FkKG1vZHVsZURpY3QuaHJlZixtb2R1bGVEaWN0LmZpbGVuYW1lKTt9O2Z1bmN0aW9uIEZ1bmN0aW9uSGFuZGxlKG1vZHVsZXNUb0xvYWQsZnVuY3Rpb25OYW1lLG9wdF9vcHRpb25zKXtpZighKG1vZHVsZXNUb0xvYWQgaW5zdGFuY2VvZiBBcnJheSkpe3Rocm93IG5ldyBFcnJvcignbW9kdWxlc1RvTG9hZCBpbiBGdW5jdGlvbkhhbmRsZSBtdXN0IGJlIGFuIGFycmF5Jyk7fQotaWYodHlwZW9mKGZ1bmN0aW9uTmFtZSkhPT0nc3RyaW5nJyl7dGhyb3cgbmV3IEVycm9yKCdmdW5jdGlvbk5hbWUgaW4gRnVuY3Rpb25IYW5kbGUgbXVzdCBiZSBhIHN0cmluZycpO30KLXRoaXMubW9kdWxlc1RvTG9hZD1tb2R1bGVzVG9Mb2FkO3RoaXMuZnVuY3Rpb25OYW1lPWZ1bmN0aW9uTmFtZTt0aGlzLm9wdGlvbnNfPW9wdF9vcHRpb25zO30KLUZ1bmN0aW9uSGFuZGxlLnByb3RvdHlwZT17Z2V0IG9wdGlvbnMoKXtyZXR1cm4gdGhpcy5vcHRpb25zXzt9LGFzRGljdCgpe3JldHVybnsnbW9kdWxlc190b19sb2FkJzp0aGlzLm1vZHVsZXNUb0xvYWQubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBtLmFzRGljdCgpO30pLCdmdW5jdGlvbl9uYW1lJzp0aGlzLmZ1bmN0aW9uTmFtZSwnb3B0aW9ucyc6dGhpcy5vcHRpb25zX307fSxhc1VzZXJGcmllbmRseVN0cmluZygpe2NvbnN0IHBhcnRzPXRoaXMubW9kdWxlc1RvTG9hZC5tYXAobXRsPT5tdGwuZmlsZW5hbWUpO3BhcnRzLnB1c2godGhpcy5mdW5jdGlvbk5hbWUpO3BhcnRzLnB1c2goSlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zXykpO3JldHVybiBwYXJ0cy5qb2luKCcsJyk7fSxoYXNIcmVmcygpe2Zvcihjb25zdCBtb2R1bGUgaW4gdGhpcy5tb2R1bGVzVG9Mb2FkKXtpZih0aGlzLm1vZHVsZXNUb0xvYWRbbW9kdWxlXS5ocmVmIT09dW5kZWZpbmVkKXtyZXR1cm4gdHJ1ZTt9fQotcmV0dXJuIGZhbHNlO30sbG9hZCgpe2lmKHRoaXMuaGFzSHJlZnMoKSl7Y29uc3QgZXJyPW5ldyBFcnJvcignRnVuY3Rpb25IYW5kbGUgbmFtZWQgJyt0aGlzLmZ1bmN0aW9uTmFtZSsnIHNwZWNpZmllcyBocmVmcywgd2hpY2ggY2Fubm90IGJlIGxvYWRlZC4nKTtlcnIubmFtZT0nRnVuY3Rpb25Mb2FkaW5nRXJyb3InO3Rocm93IGVycjt9Ci1mb3IoY29uc3QgbW9kdWxlIGluIHRoaXMubW9kdWxlc1RvTG9hZCl7Y29uc3QgZmlsZW5hbWU9dGhpcy5tb2R1bGVzVG9Mb2FkW21vZHVsZV0uZmlsZW5hbWU7dHJ5e0hUTUxJbXBvcnRzTG9hZGVyLmxvYWRIVE1MRmlsZShmaWxlbmFtZSk7fWNhdGNoKGVycil7ZXJyLm5hbWU9J0Z1bmN0aW9uTG9hZGluZ0Vycm9yJzt0aHJvdyBlcnI7fX0KLWNvbnN0IGZ1bmM9RnVuY3Rpb25SZWdpc3RyeS5nZXRGdW5jdGlvbih0aGlzLmZ1bmN0aW9uTmFtZSk7aWYoZnVuYz09PXVuZGVmaW5lZCl7Y29uc3QgZXJyPW5ldyBFcnJvcignTm8gcmVnaXN0ZXJlZCBmdW5jdGlvbiBuYW1lZCAnK3RoaXMuZnVuY3Rpb25OYW1lKTtlcnIubmFtZT0nRnVuY3Rpb25Ob3REZWZpbmVkRXJyb3InO3Rocm93IGVycjt9Ci1yZXR1cm4gZnVuYzt9LHRvU3RyaW5nKCl7Y29uc3QgbW9kdWxlc1RvTG9hZFN0cj10aGlzLm1vZHVsZXNUb0xvYWQubWFwKGZ1bmN0aW9uKG1vZHVsZSl7cmV0dXJuIG1vZHVsZS50b1N0cmluZygpO30pO3JldHVybidGdW5jdGlvbkhhbmRsZShtb2R1bGVzVG9Mb2FkPVsnK21vZHVsZXNUb0xvYWRTdHIrJ10sICcrJ2Z1bmN0aW9uTmFtZT0iJyt0aGlzLmZ1bmN0aW9uTmFtZSsnIiwgb3B0aW9ucz0iJysKLUpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9uc18pKyciKSc7fX07RnVuY3Rpb25IYW5kbGUubG9hZEZyb21GaWxlbmFtZV89ZnVuY3Rpb24oZmlsZW5hbWUpe3RyeXtjb25zdCBudW1GdW5jdGlvbnNCZWZvcmU9RnVuY3Rpb25SZWdpc3RyeS5hbGxGdW5jdGlvbnMubGVuZ3RoO0hUTUxJbXBvcnRzTG9hZGVyLmxvYWRIVE1MRmlsZShmaWxlbmFtZSk7fWNhdGNoKGVycil7ZXJyLm5hbWU9J0Z1bmN0aW9uTG9hZGluZ0Vycm9yJzt0aHJvdyBlcnI7fQotY29uc3QgbnVtRnVuY3Rpb25zTm93PUZ1bmN0aW9uUmVnaXN0cnkuYWxsRnVuY3Rpb25zLmxlbmd0aDtpZihudW1GdW5jdGlvbnNOb3chPT0obnVtRnVuY3Rpb25zQmVmb3JlKzEpKXtjb25zdCBlcnI9bmV3IEVycm9yKGZpbGVuYW1lKycgZGlkblwndCBjYWxsIEZ1bmN0aW9uUmVnaXN0cnkucmVnaXN0ZXInKTtlcnIubmFtZT0nRnVuY3Rpb25Ob3REZWZpbmVkRXJyb3InO3Rocm93IGVycjt9Ci1yZXR1cm4gRnVuY3Rpb25SZWdpc3RyeS5hbGxGdW5jdGlvbnNbbnVtRnVuY3Rpb25zTm93LTFdO307RnVuY3Rpb25IYW5kbGUuZnJvbURpY3Q9ZnVuY3Rpb24oaGFuZGxlRGljdCl7Y29uc3Qgb3B0aW9ucz1oYW5kbGVEaWN0Lm9wdGlvbnM7bGV0IG1vZHVsZXNUb0xvYWQ7aWYoaGFuZGxlRGljdC5tb2R1bGVzX3RvX2xvYWQhPT11bmRlZmluZWQpe21vZHVsZXNUb0xvYWQ9aGFuZGxlRGljdC5tb2R1bGVzX3RvX2xvYWQubWFwKGZ1bmN0aW9uKG1vZHVsZSl7cmV0dXJuIE1vZHVsZVRvTG9hZC5mcm9tRGljdChtb2R1bGUpO30pO30KLXJldHVybiBuZXcgRnVuY3Rpb25IYW5kbGUobW9kdWxlc1RvTG9hZCxoYW5kbGVEaWN0LmZ1bmN0aW9uX25hbWUsb3B0aW9ucyk7fTtyZXR1cm57RnVuY3Rpb25IYW5kbGUsTW9kdWxlVG9Mb2FkLEZ1bmN0aW9uUmVnaXN0cnksfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcnVuTWV0cmljcyhtb2RlbCxvcHRpb25zLGFkZEZhaWx1cmVDYil7aWYob3B0aW9ucz09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdPcHRpb25zIGFyZSByZXF1aXJlZC4nKTt9Ci1jb25zdCBtZXRyaWNOYW1lcz1vcHRpb25zLm1ldHJpY3M7aWYoIW1ldHJpY05hbWVzKXt0aHJvdyBuZXcgRXJyb3IoJ01ldHJpYyBuYW1lcyBzaG91bGQgYmUgc3BlY2lmaWVkLicpO30KLWNvbnN0IGNhdGVnb3JpZXM9Z2V0VHJhY2VDYXRlZ29yaWVzKG1vZGVsKTtjb25zdCBoaXN0b2dyYW1zPW5ldyB0ci52Lkhpc3RvZ3JhbVNldCgpO2Zvcihjb25zdCBtZXRyaWNOYW1lIG9mIG1ldHJpY05hbWVzKXtjb25zdCBtZXRyaWM9dHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5maW5kVHlwZUluZm9XaXRoTmFtZShtZXRyaWNOYW1lKTtpZihtZXRyaWM9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcihgIiR7bWV0cmljTmFtZX0iIGlzIG5vdCBhIHJlZ2lzdGVyZWQgbWV0cmljLmApO30KLXZhbGlkYXRlVHJhY2VDYXRlZ29yaWVzKG1ldHJpYy5tZXRhZGF0YS5yZXF1aXJlZENhdGVnb3JpZXMsY2F0ZWdvcmllcyk7dHJ5e21ldHJpYy5jb25zdHJ1Y3RvcihoaXN0b2dyYW1zLG1vZGVsLG9wdGlvbnMpO31jYXRjaChlKXtjb25zdCBlcnI9dHIuYi5ub3JtYWxpemVFeGNlcHRpb24oZSk7YWRkRmFpbHVyZUNiKG5ldyB0ci5tcmUuRmFpbHVyZSh1bmRlZmluZWQsJ21ldHJpY01hcEZ1bmN0aW9uJyxtb2RlbC5jYW5vbmljYWxVcmwsZXJyLnR5cGVOYW1lLGVyci5tZXNzYWdlLGVyci5zdGFjaykpO319Ci12YWxpZGF0ZURpYWdub3N0aWNOYW1lcyhoaXN0b2dyYW1zKTtyZXR1cm4gaGlzdG9ncmFtczt9Ci1mdW5jdGlvbiBnZXRUcmFjZUNhdGVnb3JpZXMobW9kZWwpe2Zvcihjb25zdCBtZXRhZGF0YSBvZiBtb2RlbC5tZXRhZGF0YSl7bGV0IGNvbmZpZztpZihtZXRhZGF0YS5uYW1lPT09J1RyYWNlQ29uZmlnJyYmbWV0YWRhdGEudmFsdWUpe2NvbmZpZz1tZXRhZGF0YS52YWx1ZTt9Ci1pZihtZXRhZGF0YS5uYW1lPT09J21ldGFkYXRhJyYmbWV0YWRhdGEudmFsdWUmJm1ldGFkYXRhLnZhbHVlWyd0cmFjZS1jb25maWcnXSYmbWV0YWRhdGEudmFsdWVbJ3RyYWNlLWNvbmZpZyddIT09J19fc3RyaXBwZWRfXycpe2NvbmZpZz1KU09OLnBhcnNlKG1ldGFkYXRhLnZhbHVlWyd0cmFjZS1jb25maWcnXSk7fQotaWYoY29uZmlnKXtyZXR1cm57ZXhjbHVkZWQ6Y29uZmlnLmV4Y2x1ZGVkX2NhdGVnb3JpZXN8fFtdLGluY2x1ZGVkOmNvbmZpZy5pbmNsdWRlZF9jYXRlZ29yaWVzfHxbXSx9O319fQotZnVuY3Rpb24gdmFsaWRhdGVUcmFjZUNhdGVnb3JpZXMocmVxdWlyZWRDYXRlZ29yaWVzLGNhdGVnb3JpZXMpe2lmKCFyZXF1aXJlZENhdGVnb3JpZXMpcmV0dXJuO2lmKCFjYXRlZ29yaWVzKXRocm93IG5ldyBFcnJvcignTWlzc2luZyB0cmFjZSBjb25maWcgbWV0YWRhdGEnKTtmb3IoY29uc3QgY2F0IG9mIHJlcXVpcmVkQ2F0ZWdvcmllcyl7Y29uc3QgaXNEaXNhYmxlZEJ5RGVmYXVsdD0oY2F0LmluZGV4T2YoJ2Rpc2FibGVkLWJ5LWRlZmF1bHQnKT09PTApO2xldCBtaXNzaW5nPWZhbHNlO2lmKGlzRGlzYWJsZWRCeURlZmF1bHQpe2lmKCFjYXRlZ29yaWVzLmluY2x1ZGVkLmluY2x1ZGVzKGNhdCkpe21pc3Npbmc9dHJ1ZTt9fWVsc2UgaWYoY2F0ZWdvcmllcy5leGNsdWRlZC5pbmNsdWRlcyhjYXQpKXttaXNzaW5nPXRydWU7fQotaWYobWlzc2luZyl7dGhyb3cgbmV3IEVycm9yKGBUcmFjZSBpcyBtaXNzaW5nIHJlcXVpcmVkIGNhdGVnb3J5ICIke2NhdH0iYCk7fX19Ci1mdW5jdGlvbiB2YWxpZGF0ZURpYWdub3N0aWNOYW1lcyhoaXN0b2dyYW1zKXtmb3IoY29uc3QgaGlzdCBvZiBoaXN0b2dyYW1zKXtmb3IoY29uc3QgbmFtZSBvZiBoaXN0LmRpYWdub3N0aWNzLmtleXMoKSl7aWYodHIudi5kLlJFU0VSVkVEX05BTUVTX1NFVC5oYXMobmFtZSkpe3Rocm93IG5ldyBFcnJvcihgSWxsZWdhbCBkaWFnbm9zdGljIG5hbWUgIiR7bmFtZX0iIG9uIEhpc3RvZ3JhbSAiJHtoaXN0Lm5hbWV9ImApO319fX0KLWZ1bmN0aW9uIGFkZFRlbGVtZXRyeUluZm8oaGlzdG9ncmFtcyxtb2RlbCl7Zm9yKGNvbnN0IG1ldGFkYXRhIG9mIG1vZGVsLm1ldGFkYXRhKXtpZighbWV0YWRhdGEudmFsdWV8fCFtZXRhZGF0YS52YWx1ZS50ZWxlbWV0cnkpY29udGludWU7Y29uc3QgdHJhY2VVcmxzPW1ldGFkYXRhLnZhbHVlLnRlbGVtZXRyeVt0ci52LmQuUkVTRVJWRURfTkFNRVMuVFJBQ0VfVVJMU107aWYodHJhY2VVcmxzJiZtb2RlbC5jYW5vbmljYWxVcmwhPT10cmFjZVVybHNbMF0pe3Rocm93IG5ldyBFcnJvcihgY2Fub25pY2FsVXJsICIke21vZGVsLmNhbm9uaWNhbFVybH0iICE9IGArYHRyYWNlVXJsICIke3RyYWNlVXJsc1swXX0iYCk7fQotZm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEudmFsdWUudGVsZW1ldHJ5KSl7Y29uc3QgdHlwZT10ci52LmQuUkVTRVJWRURfTkFNRVNfVE9fVFlQRVMuZ2V0KG5hbWUpO2lmKHR5cGU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB0ZWxlbWV0cnkuJHtuYW1lfWApO30KLWhpc3RvZ3JhbXMuYWRkU2hhcmVkRGlhZ25vc3RpY1RvQWxsSGlzdG9ncmFtcyhuYW1lLG5ldyB0eXBlKHZhbHVlKSk7fX19Ci1mdW5jdGlvbiBtZXRyaWNNYXBGdW5jdGlvbihyZXN1bHQsbW9kZWwsb3B0aW9ucyl7Y29uc3QgaGlzdG9ncmFtcz1ydW5NZXRyaWNzKG1vZGVsLG9wdGlvbnMscmVzdWx0LmFkZEZhaWx1cmUuYmluZChyZXN1bHQpKTthZGRUZWxlbWV0cnlJbmZvKGhpc3RvZ3JhbXMsbW9kZWwpO3Jlc3VsdC5hZGRQYWlyKCdoaXN0b2dyYW1zJyxoaXN0b2dyYW1zLmFzRGljdHMoKSk7Y29uc3Qgc2NhbGFyRGljdHM9W107Zm9yKGNvbnN0IHZhbHVlIG9mIGhpc3RvZ3JhbXMpe2Zvcihjb25zdFtzdGF0TmFtZSxzY2FsYXJdb2YgdmFsdWUuc3RhdGlzdGljc1NjYWxhcnMpe3NjYWxhckRpY3RzLnB1c2goe25hbWU6dmFsdWUubmFtZSsnXycrc3RhdE5hbWUsbnVtZXJpYzpzY2FsYXIuYXNEaWN0KCksZGVzY3JpcHRpb246dmFsdWUuZGVzY3JpcHRpb24sfSk7fX0KLXJlc3VsdC5hZGRQYWlyKCdzY2FsYXJzJyxzY2FsYXJEaWN0cyk7fQotdHIubXJlLkZ1bmN0aW9uUmVnaXN0cnkucmVnaXN0ZXIobWV0cmljTWFwRnVuY3Rpb24pO3JldHVybnttZXRyaWNNYXBGdW5jdGlvbixydW5NZXRyaWNzLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tcmUnLGZ1bmN0aW9uKCl7Y2xhc3MgTXJlUmVzdWx0e2NvbnN0cnVjdG9yKGZhaWx1cmVzLHBhaXJzKXtpZihmYWlsdXJlcz09PXVuZGVmaW5lZCl7ZmFpbHVyZXM9W107fQotaWYocGFpcnM9PT11bmRlZmluZWQpe3BhaXJzPXt9O30KLXRoaXMuZmFpbHVyZXM9ZmFpbHVyZXM7dGhpcy5wYWlycz1wYWlyczt9Ci1hZGRGYWlsdXJlKGZhaWx1cmUpe3RoaXMuZmFpbHVyZXMucHVzaChmYWlsdXJlKTt9Ci1hZGRQYWlyKGtleSx2YWx1ZSl7aWYoa2V5IGluIHRoaXMucGFpcnMpe3Rocm93IG5ldyBFcnJvcignS2V5ICcra2V5KycgYWxyZWFkeSBleGlzdHMgaW4gcmVzdWx0LicpO30KLXRoaXMucGFpcnNba2V5XT12YWx1ZTt9Ci1hc0RpY3QoKXtjb25zdCBkPXtwYWlyczp0aGlzLnBhaXJzfTtpZih0aGlzLmZhaWx1cmVzKXtkLmZhaWx1cmVzPXRoaXMuZmFpbHVyZXMubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBmLmFzRGljdCgpO30pO30KLXJldHVybiBkO30KLWhhZEZhaWx1cmVzKCl7cmV0dXJuIHRoaXMuZmFpbHVyZXMubGVuZ3RoPjA7fQotc3RhdGljIGZyb21EaWN0KHJlc3VsdERpY3Qpe2NvbnN0IGZhaWx1cmVzPShyZXN1bHREaWN0LmZhaWx1cmVzIT09dW5kZWZpbmVkKT9yZXN1bHREaWN0LmZhaWx1cmVzLm1hcCh0ci5tcmUuRmFpbHVyZS5mcm9tRGljdCk6dW5kZWZpbmVkO2NvbnN0IHBhaXJzPXJlc3VsdERpY3QucGFpcnM7cmV0dXJuIG5ldyBNcmVSZXN1bHQoZmFpbHVyZXMscGFpcnMpO319Ci1yZXR1cm57TXJlUmVzdWx0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aScsZnVuY3Rpb24oKXtjbGFzcyBOdWxsQnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIgZXh0ZW5kcyB0ci5jLkJydXNoaW5nU3RhdGVDb250cm9sbGVye2NvbnN0cnVjdG9yKCl7c3VwZXIodW5kZWZpbmVkKTt0aGlzLnBhcmVudENvbnRyb2xsZXI9dW5kZWZpbmVkO30KLWRpc3BhdGNoQ2hhbmdlRXZlbnRfKCl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXRoaXMucGFyZW50Q29udHJvbGxlci5kaXNwYXRjaENoYW5nZUV2ZW50XygpO30KLWdldCBtb2RlbCgpe2lmKCF0aGlzLnBhcmVudENvbnRyb2xsZXIpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdGhpcy5wYXJlbnRDb250cm9sbGVyLm1vZGVsO30KLWdldCB0cmFja1ZpZXcoKXtpZighdGhpcy5wYXJlbnRDb250cm9sbGVyKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMucGFyZW50Q29udHJvbGxlci50cmFja1ZpZXc7fQotZ2V0IHZpZXdwb3J0KCl7aWYoIXRoaXMucGFyZW50Q29udHJvbGxlcilyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLnBhcmVudENvbnRyb2xsZXIudmlld3BvcnQ7fQotZ2V0IGhpc3RvcnlFbmFibGVkKCl7aWYoIXRoaXMucGFyZW50Q29udHJvbGxlcilyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLnBhcmVudENvbnRyb2xsZXIuaGlzdG9yeUVuYWJsZWQ7fQotc2V0IGhpc3RvcnlFbmFibGVkKGhpc3RvcnlFbmFibGVkKXtpZih0aGlzLnBhcmVudENvbnRyb2xsZXIpe3RoaXMucGFyZW50Q29udHJvbGxlci5oaXN0b3J5RW5hYmxlZD1oaXN0b3J5RW5hYmxlZDt9fQotbW9kZWxXaWxsQ2hhbmdlKCl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXRoaXMucGFyZW50Q29udHJvbGxlci5tb2RlbFdpbGxDaGFuZ2UoKTt9Ci1tb2RlbERpZENoYW5nZSgpe2lmKHRoaXMucGFyZW50Q29udHJvbGxlcil0aGlzLnBhcmVudENvbnRyb2xsZXIubW9kZWxEaWRDaGFuZ2UoKTt9Ci1vblVzZXJJbml0aWF0ZWRTZWxlY3Rpb25DaGFuZ2VfKCl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXt0aGlzLnBhcmVudENvbnRyb2xsZXIub25Vc2VySW5pdGlhdGVkU2VsZWN0aW9uQ2hhbmdlXygpO319Ci1vblBvcFN0YXRlXyhlKXtpZih0aGlzLnBhcmVudENvbnRyb2xsZXIpdGhpcy5wYXJlbnRDb250cm9sbGVyLm9uUG9wU3RhdGVfKGUpO30KLWdldCBzZWxlY3Rpb24oKXtpZighdGhpcy5wYXJlbnRDb250cm9sbGVyKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMucGFyZW50Q29udHJvbGxlci5zZWxlY3Rpb247fQotZ2V0IGZpbmRNYXRjaGVzKCl7aWYoIXRoaXMucGFyZW50Q29udHJvbGxlcilyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLnBhcmVudENvbnRyb2xsZXIuZmluZE1hdGNoZXM7fQotZ2V0IHNlbGVjdGlvbk9mSW50ZXJlc3QoKXtpZighdGhpcy5wYXJlbnRDb250cm9sbGVyKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMucGFyZW50Q29udHJvbGxlci5zZWxlY3Rpb25PZkludGVyZXN0O30KLWdldCBjdXJyZW50QnJ1c2hpbmdTdGF0ZSgpe2lmKCF0aGlzLnBhcmVudENvbnRyb2xsZXIpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdGhpcy5wYXJlbnRDb250cm9sbGVyLmN1cnJlbnRCcnVzaGluZ1N0YXRlO30KLXNldCBjdXJyZW50QnJ1c2hpbmdTdGF0ZShuZXdCcnVzaGluZ1N0YXRlKXtpZih0aGlzLnBhcmVudENvbnRyb2xsZXIpe3RoaXMucGFyZW50Q29udHJvbGxlci5jdXJyZW50QnJ1c2hpbmdTdGF0ZT1uZXdCcnVzaGluZ1N0YXRlO319Ci1hZGRBbGxFdmVudHNNYXRjaGluZ0ZpbHRlclRvU2VsZWN0aW9uQXNUYXNrKGZpbHRlcixzZWxlY3Rpb24pe2lmKHRoaXMucGFyZW50Q29udHJvbGxlcil7dGhpcy5wYXJlbnRDb250cm9sbGVyLmFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb25Bc1Rhc2soZmlsdGVyLHNlbGVjdGlvbik7fX0KLWZpbmRUZXh0Q2hhbmdlZFRvKGFsbFBvc3NpYmxlTWF0Y2hlcyl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXt0aGlzLnBhcmVudENvbnRyb2xsZXIuZmluZFRleHRDaGFuZ2VkVG8oYWxsUG9zc2libGVNYXRjaGVzKTt9fQotZmluZEZvY3VzQ2hhbmdlZFRvKGN1cnJlbnRGb2N1cyl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXt0aGlzLnBhcmVudENvbnRyb2xsZXIuZmluZEZvY3VzQ2hhbmdlZFRvKGN1cnJlbnRGb2N1cyk7fX0KLWZpbmRUZXh0Q2xlYXJlZCgpe2lmKHRoaXMucGFyZW50Q29udHJvbGxlcil7dGhpcy5wYXJlbnRDb250cm9sbGVyLmZpbmRUZXh0Q2xlYXJlZCgpO319Ci11aVN0YXRlRnJvbVN0cmluZyhzdHJpbmcpe2lmKHRoaXMucGFyZW50Q29udHJvbGxlcil7dGhpcy5wYXJlbnRDb250cm9sbGVyLnVpU3RhdGVGcm9tU3RyaW5nKHN0cmluZyk7fX0KLW5hdlRvUG9zaXRpb24odWlTdGF0ZSxzaG93TmF2TGluZSl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXt0aGlzLnBhcmVudENvbnRyb2xsZXIubmF2VG9Qb3NpdGlvbih1aVN0YXRlLHNob3dOYXZMaW5lKTt9fQotY2hhbmdlU2VsZWN0aW9uRnJvbVRpbWVsaW5lKHNlbGVjdGlvbil7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXt0aGlzLnBhcmVudENvbnRyb2xsZXIuY2hhbmdlU2VsZWN0aW9uRnJvbVRpbWVsaW5lKHNlbGVjdGlvbik7fX0KLXNob3dTY3JpcHRDb250cm9sU2VsZWN0aW9uKHNlbGVjdGlvbil7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXt0aGlzLnBhcmVudENvbnRyb2xsZXIuc2hvd1NjcmlwdENvbnRyb2xTZWxlY3Rpb24oc2VsZWN0aW9uKTt9fQotY2hhbmdlU2VsZWN0aW9uRnJvbVJlcXVlc3RTZWxlY3Rpb25DaGFuZ2VFdmVudChzZWxlY3Rpb24pe2lmKHRoaXMucGFyZW50Q29udHJvbGxlcil7dGhpcy5wYXJlbnRDb250cm9sbGVyLmNoYW5nZVNlbGVjdGlvbkZyb21SZXF1ZXN0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoc2VsZWN0aW9uKTt9fQotY2hhbmdlQW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50cyhldmVudFNldCl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyJiYoZXZlbnRTZXQgaW5zdGFuY2VvZiB0ci5tb2RlbC5FdmVudFNldCkpe3RoaXMucGFyZW50Q29udHJvbGxlci5jaGFuZ2VBbmFseXNpc1ZpZXdSZWxhdGVkRXZlbnRzKGV2ZW50U2V0KTt9fQotY2hhbmdlQW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50cyhldmVudFNldCl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyJiYoZXZlbnRTZXQgaW5zdGFuY2VvZiB0ci5tb2RlbC5FdmVudFNldCkpe3RoaXMucGFyZW50Q29udHJvbGxlci5jaGFuZ2VBbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzKGV2ZW50U2V0KTt9fQotZ2V0Vmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZSh2aWV3SWQpe2lmKHRoaXMucGFyZW50Q29udHJvbGxlcil7dGhpcy5wYXJlbnRDb250cm9sbGVyLmdldFZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGUodmlld0lkKTt9fQotY2hhbmdlVmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZSh2aWV3SWQsbmV3U3RhdGUpe2lmKHRoaXMucGFyZW50Q29udHJvbGxlcil7dGhpcy5wYXJlbnRDb250cm9sbGVyLmNoYW5nZVZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGUodmlld0lkLG5ld1N0YXRlKTt9fX0KLXJldHVybntOdWxsQnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYnLGZ1bmN0aW9uKCl7Y29uc3QgSUdOT1JFX0dST1VQSU5HX0tFWVM9WyduYW1lJywnc3RvcnlUYWdzJyxdO2NsYXNzIENTVkJ1aWxkZXJ7Y29uc3RydWN0b3IoaGlzdG9ncmFtcyl7dGhpcy5oaXN0b2dyYW1zXz1oaXN0b2dyYW1zO3RoaXMudGFibGVfPVtdO3RoaXMuc3RhdGlzdGljc05hbWVzXz1uZXcgU2V0KCk7dGhpcy5ncm91cGluZ3NfPVtdO30KLWJ1aWxkKCl7dGhpcy5wcmVwYXJlXygpO3RoaXMuYnVpbGRIZWFkZXJfKCk7dGhpcy5idWlsZFRhYmxlXygpO30KLXByZXBhcmVfKCl7Zm9yKGNvbnN0W2tleSxncm91cGluZ11vZiB0ci52Lkhpc3RvZ3JhbUdyb3VwaW5nLkJZX0tFWSl7aWYoSUdOT1JFX0dST1VQSU5HX0tFWVMuaW5jbHVkZXMoa2V5KSljb250aW51ZTt0aGlzLmdyb3VwaW5nc18ucHVzaChncm91cGluZyk7fQotdGhpcy5ncm91cGluZ3NfLnB1c2gobmV3IHRyLnYuR2VuZXJpY1NldEdyb3VwaW5nKHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5UUkFDRV9VUkxTKSk7dGhpcy5ncm91cGluZ3NfLnNvcnQoKGEsYik9PmEua2V5LmxvY2FsZUNvbXBhcmUoYi5rZXkpKTtmb3IoY29uc3QgaGlzdCBvZiB0aGlzLmhpc3RvZ3JhbXNfKXtmb3IoY29uc3QgbmFtZSBvZiBoaXN0LnN0YXRpc3RpY3NOYW1lcyl7dGhpcy5zdGF0aXN0aWNzTmFtZXNfLmFkZChuYW1lKTt9fQotdGhpcy5zdGF0aXN0aWNzTmFtZXNfPUFycmF5LmZyb20odGhpcy5zdGF0aXN0aWNzTmFtZXNfKTt0aGlzLnN0YXRpc3RpY3NOYW1lc18uc29ydCgpO30KLWJ1aWxkSGVhZGVyXygpe2NvbnN0IGhlYWRlcj1bJ25hbWUnLCd1bml0J107Zm9yKGNvbnN0IG5hbWUgb2YgdGhpcy5zdGF0aXN0aWNzTmFtZXNfKXtoZWFkZXIucHVzaChuYW1lKTt9Ci1mb3IoY29uc3QgZ3JvdXBpbmcgb2YgdGhpcy5ncm91cGluZ3NfKXtoZWFkZXIucHVzaChncm91cGluZy5rZXkpO30KLXRoaXMudGFibGVfLnB1c2goaGVhZGVyKTt9Ci1idWlsZFRhYmxlXygpe2Zvcihjb25zdCBoaXN0IG9mIHRoaXMuaGlzdG9ncmFtc18pe2NvbnN0IHJvdz1baGlzdC5uYW1lLGhpc3QudW5pdC51bml0U3RyaW5nXTt0aGlzLnRhYmxlXy5wdXNoKHJvdyk7Zm9yKGNvbnN0IG5hbWUgb2YgdGhpcy5zdGF0aXN0aWNzTmFtZXNfKXtjb25zdCBzdGF0PWhpc3QuZ2V0U3RhdGlzdGljU2NhbGFyKG5hbWUpO2lmKHN0YXQpe3Jvdy5wdXNoKHN0YXQudmFsdWUpO31lbHNle3Jvdy5wdXNoKCcnKTt9fQotZm9yKGNvbnN0IGdyb3VwaW5nIG9mIHRoaXMuZ3JvdXBpbmdzXyl7cm93LnB1c2goZ3JvdXBpbmcuY2FsbGJhY2soaGlzdCkpO319fQotdG9TdHJpbmcoKXtsZXQgc3RyPScnO2Zvcihjb25zdCByb3cgb2YgdGhpcy50YWJsZV8pe2ZvcihsZXQgaT0wO2k8cm93Lmxlbmd0aDsrK2kpe2lmKGk+MCl7c3RyKz0nLCc7fQotbGV0IGNlbGw9Jycrcm93W2ldO2NlbGw9Y2VsbC5yZXBsYWNlKC9cbi9nLCcgJyk7aWYoY2VsbC5pbmRleE9mKCcsJyk+PTB8fGNlbGwuaW5kZXhPZignIicpPj0wKXtjZWxsPSciJytjZWxsLnJlcGxhY2UoLyIvZywnIiInKSsnIic7fQotc3RyKz1jZWxsO30KLXN0cis9J1xuJzt9Ci1yZXR1cm4gc3RyO319Ci1yZXR1cm57Q1NWQnVpbGRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudicsZnVuY3Rpb24oKXtjb25zdCBnZXREaXNwbGF5TGFiZWw9dHIudi5IaXN0b2dyYW1Hcm91cGluZy5ESVNQTEFZX0xBQkVMLmNhbGxiYWNrO2NvbnN0IERFRkFVTFRfUE9TU0lCTEVfR1JPVVBTPVtdO0RFRkFVTFRfUE9TU0lCTEVfR1JPVVBTLnB1c2gobmV3IHRyLnYuSGlzdG9ncmFtR3JvdXBpbmcodHIudi5IaXN0b2dyYW1Hcm91cGluZy5ISVNUT0dSQU1fTkFNRS5rZXksaD0+aC5zaG9ydE5hbWV8fGgubmFtZSkpO2NvbnN0IEVYQ0xVREVEX0dST1VQSU5HX0tFWVM9W3RyLnYuSGlzdG9ncmFtR3JvdXBpbmcuSElTVE9HUkFNX05BTUUua2V5LHRyLnYuSGlzdG9ncmFtR3JvdXBpbmcuRElTUExBWV9MQUJFTC5rZXksXTtmb3IoY29uc3QgZ3JvdXAgb2YgdHIudi5IaXN0b2dyYW1Hcm91cGluZy5CWV9LRVkudmFsdWVzKCkpe2lmKEVYQ0xVREVEX0dST1VQSU5HX0tFWVMuaW5jbHVkZXMoZ3JvdXAua2V5KSljb250aW51ZTtERUZBVUxUX1BPU1NJQkxFX0dST1VQUy5wdXNoKGdyb3VwKTt9Ci1jbGFzcyBIaXN0b2dyYW1QYXJhbWV0ZXJDb2xsZWN0b3J7Y29uc3RydWN0b3IoKXt0aGlzLnN0YXRpc3RpY05hbWVzXz1uZXcgU2V0KFsnYXZnJ10pO3RoaXMubGFiZWxzVG9TdGFydFRpbWVzXz1uZXcgTWFwKCk7dGhpcy5rZXlzVG9Hcm91cGluZ3NfPW5ldyBNYXAoREVGQVVMVF9QT1NTSUJMRV9HUk9VUFMubWFwKGc9PltnLmtleSxnXSkpO3RoaXMua2V5c1RvVmFsdWVzXz1uZXcgTWFwKERFRkFVTFRfUE9TU0lCTEVfR1JPVVBTLm1hcChnPT5bZy5rZXksbmV3IFNldCgpXSkpO3RoaXMua2V5c1RvVmFsdWVzXy5kZWxldGUodHIudi5IaXN0b2dyYW1Hcm91cGluZy5ISVNUT0dSQU1fTkFNRS5rZXkpO30KLXByb2Nlc3MoaGlzdG9ncmFtcyl7Y29uc3QgYWxsU3RvcnlUYWdzPW5ldyBTZXQoKTtsZXQgbWF4U2FtcGxlQ291bnQ9MDtmb3IoY29uc3QgaGlzdCBvZiBoaXN0b2dyYW1zKXttYXhTYW1wbGVDb3VudD1NYXRoLm1heChtYXhTYW1wbGVDb3VudCxoaXN0Lm51bVZhbHVlcyk7Zm9yKGNvbnN0IHN0YXROYW1lIG9mIGhpc3Quc3RhdGlzdGljc05hbWVzKXt0aGlzLnN0YXRpc3RpY05hbWVzXy5hZGQoc3RhdE5hbWUpO30KLWxldCBzdGFydFRpbWU9aGlzdC5kaWFnbm9zdGljcy5nZXQodHIudi5kLlJFU0VSVkVEX05BTUVTLkJFTkNITUFSS19TVEFSVCk7aWYoc3RhcnRUaW1lIT09dW5kZWZpbmVkKXN0YXJ0VGltZT1zdGFydFRpbWUubWluRGF0ZS5nZXRUaW1lKCk7Y29uc3QgZGlzcGxheUxhYmVsPWdldERpc3BsYXlMYWJlbChoaXN0KTtpZih0aGlzLmxhYmVsc1RvU3RhcnRUaW1lc18uaGFzKGRpc3BsYXlMYWJlbCkpe3N0YXJ0VGltZT1NYXRoLm1pbihzdGFydFRpbWUsdGhpcy5sYWJlbHNUb1N0YXJ0VGltZXNfLmdldChkaXNwbGF5TGFiZWwpKTt9Ci10aGlzLmxhYmVsc1RvU3RhcnRUaW1lc18uc2V0KGRpc3BsYXlMYWJlbCxzdGFydFRpbWUpO2Zvcihjb25zdFtncm91cGluZ0tleSx2YWx1ZXNdb2YgdGhpcy5rZXlzVG9WYWx1ZXNfKXtjb25zdCBncm91cGluZz10aGlzLmtleXNUb0dyb3VwaW5nc18uZ2V0KGdyb3VwaW5nS2V5KTtjb25zdCB2YWx1ZT1ncm91cGluZy5jYWxsYmFjayhoaXN0KTtpZighdmFsdWUpY29udGludWU7dmFsdWVzLmFkZCh2YWx1ZSk7aWYodmFsdWVzLnNpemU+MSl7dGhpcy5rZXlzVG9WYWx1ZXNfLmRlbGV0ZShncm91cGluZ0tleSk7fX0KLWNvbnN0IHN0b3J5VGFncz1oaXN0LmRpYWdub3N0aWNzLmdldCh0ci52LmQuUkVTRVJWRURfTkFNRVMuU1RPUllfVEFHUyk7Zm9yKGNvbnN0IHRhZyBvZihzdG9yeVRhZ3N8fFtdKSl7YWxsU3RvcnlUYWdzLmFkZCh0YWcpO319Ci10ci5iLlRpbWluZy5pbnN0YW50KCdIaXN0b2dyYW1QYXJhbWV0ZXJDb2xsZWN0b3InLCdtYXhTYW1wbGVDb3VudCcsbWF4U2FtcGxlQ291bnQpO2Zvcihjb25zdCB0YWdHcm91cGluZyBvZiB0ci52Lkhpc3RvZ3JhbUdyb3VwaW5nLmJ1aWxkRnJvbVRhZ3MoYWxsU3RvcnlUYWdzLHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5TVE9SWV9UQUdTKSl7Y29uc3QgdmFsdWVzPW5ldyBTZXQoKTtmb3IoY29uc3QgaGlzdCBvZiBoaXN0b2dyYW1zKXt2YWx1ZXMuYWRkKHRhZ0dyb3VwaW5nLmNhbGxiYWNrKGhpc3QpKTt9Ci1pZih2YWx1ZXMuc2l6ZT4xKXt0aGlzLmtleXNUb0dyb3VwaW5nc18uc2V0KHRhZ0dyb3VwaW5nLmtleSx0YWdHcm91cGluZyk7dGhpcy5rZXlzVG9WYWx1ZXNfLnNldCh0YWdHcm91cGluZy5rZXksdmFsdWVzKTt9fX0KLWdldCBzdGF0aXN0aWNOYW1lcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuc3RhdGlzdGljTmFtZXNfKTt9Ci1nZXQgbGFiZWxzKCl7Y29uc3QgZGlzcGxheUxhYmVscz1BcnJheS5mcm9tKHRoaXMubGFiZWxzVG9TdGFydFRpbWVzXy5rZXlzKCkpO2Rpc3BsYXlMYWJlbHMuc29ydCgoeCx5KT0+dGhpcy5sYWJlbHNUb1N0YXJ0VGltZXNfLmdldCh4KS10aGlzLmxhYmVsc1RvU3RhcnRUaW1lc18uZ2V0KHkpKTtyZXR1cm4gZGlzcGxheUxhYmVsczt9Ci1nZXQgcG9zc2libGVHcm91cGluZ3MoKXtmb3IoY29uc3Rba2V5LHZhbHVlc11vZiB0aGlzLmtleXNUb1ZhbHVlc18pe2lmKHZhbHVlcy5zaXplPj0yKWNvbnRpbnVlO3RoaXMua2V5c1RvR3JvdXBpbmdzXy5kZWxldGUoa2V5KTt9Ci1yZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmtleXNUb0dyb3VwaW5nc18udmFsdWVzKCkpO319Ci1yZXR1cm57SGlzdG9ncmFtUGFyYW1ldGVyQ29sbGVjdG9yLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe1BvbHltZXIoe2lzOid0ci12LXVpLWhpc3RvZ3JhbS1zZXQtY29udHJvbHMtZXhwb3J0JyxleHBvcnRSYXdDc3ZfKCl7dGhpcy5leHBvcnRfKGZhbHNlLCdjc3YnKTt9LGV4cG9ydFJhd0pzb25fKCl7dGhpcy5leHBvcnRfKGZhbHNlLCdqc29uJyk7fSxleHBvcnRNZXJnZWRDc3ZfKCl7dGhpcy5leHBvcnRfKHRydWUsJ2NzdicpO30sZXhwb3J0TWVyZ2VkSnNvbl8oKXt0aGlzLmV4cG9ydF8odHJ1ZSwnanNvbicpO30sZXhwb3J0XyhtZXJnZWQsZm9ybWF0KXt0ci5iLmRpc3BhdGNoU2ltcGxlRXZlbnQodGhpcywnZXhwb3J0Jyx0cnVlLHRydWUse21lcmdlZCxmb3JtYXR9KTt9LH0pO3JldHVybnt9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi51aScsZnVuY3Rpb24oKXtjb25zdCBBTFBIQV9PUFRJT05TPVtdO2ZvcihsZXQgaT0xO2k8MTA7KytpKUFMUEhBX09QVElPTlMucHVzaChpKjFlLTMpO2ZvcihsZXQgaT0xO2k8MTA7KytpKUFMUEhBX09QVElPTlMucHVzaChpKjFlLTIpO0FMUEhBX09QVElPTlMucHVzaCgwLjEpO1BvbHltZXIoe2lzOid0ci12LXVpLWhpc3RvZ3JhbS1zZXQtY29udHJvbHMnLHByb3BlcnRpZXM6e3NlYXJjaFF1ZXJ5Ont0eXBlOlN0cmluZyx2YWx1ZTonJyxvYnNlcnZlcjonb25Vc2VyQ2hhbmdlXycsfSxzaG93QWxsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ZmFsc2Usb2JzZXJ2ZXI6J29uVXNlckNoYW5nZV8nLH0scmVmZXJlbmNlRGlzcGxheUxhYmVsOnt0eXBlOlN0cmluZyx2YWx1ZTonJyxvYnNlcnZlcjonb25Vc2VyQ2hhbmdlXycsfSxkaXNwbGF5U3RhdGlzdGljTmFtZTp7dHlwZTpTdHJpbmcsdmFsdWU6Jycsb2JzZXJ2ZXI6J29uVXNlckNoYW5nZV8nLH0sYWxwaGFTdHJpbmc6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOidnZXRBbHBoYVN0cmluZ18oYWxwaGFJbmRleCknLH0sYWxwaGFJbmRleDp7dHlwZTpOdW1iZXIsdmFsdWU6OSxvYnNlcnZlcjonb25Vc2VyQ2hhbmdlXycsfSx9LGNyZWF0ZWQoKXt0aGlzLnZpZXdTdGF0ZV89dW5kZWZpbmVkO3RoaXMucm93TGlzdGVuZXJfPXRoaXMub25Sb3dWaWV3U3RhdGVVcGRhdGVfLmJpbmQodGhpcyk7dGhpcy5iYXNlU3RhdGlzdGljTmFtZXNfPVtdO3RoaXMuaXNJbk9uVmlld1N0YXRlVXBkYXRlXz1mYWxzZTt9LHJlYWR5KCl7dGhpcy4kLnBpY2tlci5hZGRFdmVudExpc3RlbmVyKCdjdXJyZW50LWdyb3Vwcy1jaGFuZ2VkJyx0aGlzLm9uR3JvdXBzQ2hhbmdlZF8uYmluZCh0aGlzKSk7fSxnZXQgdmlld1N0YXRlKCl7cmV0dXJuIHRoaXMudmlld1N0YXRlXzt9LHNldCB2aWV3U3RhdGUodnMpe2lmKHRoaXMudmlld1N0YXRlXyl7dGhyb3cgbmV3IEVycm9yKCd2aWV3U3RhdGUgbXVzdCBiZSBzZXQgZXhhY3RseSBvbmNlLicpO30KLXRoaXMudmlld1N0YXRlXz12czt0aGlzLnZpZXdTdGF0ZS5hZGRVcGRhdGVMaXN0ZW5lcih0aGlzLm9uVmlld1N0YXRlVXBkYXRlXy5iaW5kKHRoaXMpKTt9LGFzeW5jIG9uVXNlckNoYW5nZV8oKXtpZighdGhpcy52aWV3U3RhdGUpcmV0dXJuO2lmKHRoaXMuaXNJbk9uVmlld1N0YXRlVXBkYXRlXylyZXR1cm47Y29uc3QgbWFya3M9W107aWYodGhpcy5zZWFyY2hRdWVyeSE9PXRoaXMudmlld1N0YXRlLnNlYXJjaFF1ZXJ5KXttYXJrcy5wdXNoKHRyLmIuVGltaW5nLm1hcmsoJ2hpc3RvZ3JhbS1zZXQtY29udHJvbHMnLCdzZWFyY2gnKSk7fQotaWYodGhpcy5zaG93QWxsIT09dGhpcy52aWV3U3RhdGUuc2hvd0FsbCl7bWFya3MucHVzaCh0ci5iLlRpbWluZy5tYXJrKCdoaXN0b2dyYW0tc2V0LWNvbnRyb2xzJywnc2hvd0FsbCcpKTt9Ci1pZih0aGlzLnJlZmVyZW5jZURpc3BsYXlMYWJlbCE9PXRoaXMudmlld1N0YXRlLnJlZmVyZW5jZURpc3BsYXlMYWJlbCl7bWFya3MucHVzaCh0ci5iLlRpbWluZy5tYXJrKCdoaXN0b2dyYW0tc2V0LWNvbnRyb2xzJywncmVmZXJlbmNlQ29sdW1uJykpO30KLWlmKHRoaXMuZGlzcGxheVN0YXRpc3RpY05hbWUhPT10aGlzLnZpZXdTdGF0ZS5kaXNwbGF5U3RhdGlzdGljTmFtZSl7bWFya3MucHVzaCh0ci5iLlRpbWluZy5tYXJrKCdoaXN0b2dyYW0tc2V0LWNvbnRyb2xzJywnc3RhdGlzdGljJykpO30KLWlmKHBhcnNlSW50KHRoaXMuYWxwaGFJbmRleCkhPT10aGlzLmdldEFscGhhSW5kZXhGcm9tVmlld1N0YXRlXygpKXttYXJrcy5wdXNoKHRyLmIuVGltaW5nLm1hcmsoJ2hpc3RvZ3JhbS1zZXQtY29udHJvbHMnLCdhbHBoYScpKTt9Ci10aGlzLiQuY2xlYXJfc2VhcmNoLnN0eWxlLnZpc2liaWxpdHk9dGhpcy5zZWFyY2hRdWVyeT8ndmlzaWJsZSc6J2hpZGRlbic7bGV0IGRpc3BsYXlTdGF0aXN0aWNOYW1lPXRoaXMuZGlzcGxheVN0YXRpc3RpY05hbWU7aWYodGhpcy52aWV3U3RhdGUucmVmZXJlbmNlRGlzcGxheUxhYmVsPT09JycmJnRoaXMucmVmZXJlbmNlRGlzcGxheUxhYmVsIT09JycmJnRoaXMuYmFzZVN0YXRpc3RpY05hbWVzLmxlbmd0aCl7ZGlzcGxheVN0YXRpc3RpY05hbWU9YCUke3RyLnYuREVMVEF9JHt0aGlzLmRpc3BsYXlTdGF0aXN0aWNOYW1lfWA7fQotaWYodGhpcy5yZWZlcmVuY2VEaXNwbGF5TGFiZWw9PT0nJyYmdGhpcy52aWV3U3RhdGUucmVmZXJlbmNlRGlzcGxheUxhYmVsIT09JycmJnRoaXMuYmFzZVN0YXRpc3RpY05hbWVzLmxlbmd0aCl7Y29uc3QgZGVsdGFJbmRleD1kaXNwbGF5U3RhdGlzdGljTmFtZS5pbmRleE9mKHRyLnYuREVMVEEpO2lmKGRlbHRhSW5kZXg+PTApe2Rpc3BsYXlTdGF0aXN0aWNOYW1lPWRpc3BsYXlTdGF0aXN0aWNOYW1lLnNsaWNlKGRlbHRhSW5kZXgrMSk7fWVsc2UgaWYoIXRoaXMuYmFzZVN0YXRpc3RpY05hbWVzLmluY2x1ZGVzKGRpc3BsYXlTdGF0aXN0aWNOYW1lKSl7ZGlzcGxheVN0YXRpc3RpY05hbWU9J2F2Zyc7fX0KLWF3YWl0IHRoaXMudmlld1N0YXRlLnVwZGF0ZSh7c2VhcmNoUXVlcnk6dGhpcy5zZWFyY2hRdWVyeSxzaG93QWxsOnRoaXMuc2hvd0FsbCxyZWZlcmVuY2VEaXNwbGF5TGFiZWw6dGhpcy5yZWZlcmVuY2VEaXNwbGF5TGFiZWwsZGlzcGxheVN0YXRpc3RpY05hbWUsYWxwaGE6QUxQSEFfT1BUSU9OU1t0aGlzLmFscGhhSW5kZXhdLH0pO2lmKHRoaXMucmVmZXJlbmNlRGlzcGxheUxhYmVsJiZ0aGlzLnN0YXRpc3RpY05hbWVzLmxlbmd0aD09PXRoaXMuYmFzZVN0YXRpc3RpY05hbWVzLmxlbmd0aCl7dGhpcy5zdGF0aXN0aWNOYW1lcz10aGlzLmJhc2VTdGF0aXN0aWNOYW1lcy5jb25jYXQodHIudi5IaXN0b2dyYW0uZ2V0RGVsdGFTdGF0aXN0aWNzTmFtZXModGhpcy5iYXNlU3RhdGlzdGljTmFtZXMpKTt9ZWxzZSBpZighdGhpcy5yZWZlcmVuY2VEaXNwbGF5TGFiZWwmJnRoaXMuc3RhdGlzdGljTmFtZXMubGVuZ3RoPnRoaXMuYmFzZVN0YXRpc3RpY05hbWVzLmxlbmd0aCl7dGhpcy5zdGF0aXN0aWNOYW1lcz10aGlzLmJhc2VTdGF0aXN0aWNOYW1lczt9Ci1mb3IoY29uc3QgbWFyayBvZiBtYXJrcyltYXJrLmVuZCgpO30sb25WaWV3U3RhdGVVcGRhdGVfKGV2ZW50KXt0aGlzLmlzSW5PblZpZXdTdGF0ZVVwZGF0ZV89dHJ1ZTtpZihldmVudC5kZWx0YS5zZWFyY2hRdWVyeSl7dGhpcy5zZWFyY2hRdWVyeT10aGlzLnZpZXdTdGF0ZS5zZWFyY2hRdWVyeTt9Ci1pZihldmVudC5kZWx0YS5zaG93QWxsKXRoaXMuc2hvd0FsbD10aGlzLnZpZXdTdGF0ZS5zaG93QWxsO2lmKGV2ZW50LmRlbHRhLmRpc3BsYXlTdGF0aXN0aWNOYW1lKXt0aGlzLmRpc3BsYXlTdGF0aXN0aWNOYW1lPXRoaXMudmlld1N0YXRlLmRpc3BsYXlTdGF0aXN0aWNOYW1lO30KLWlmKGV2ZW50LmRlbHRhLnJlZmVyZW5jZURpc3BsYXlMYWJlbCl7dGhpcy5yZWZlcmVuY2VEaXNwbGF5TGFiZWw9dGhpcy52aWV3U3RhdGUucmVmZXJlbmNlRGlzcGxheUxhYmVsO3RoaXMuJC5hbHBoYS5zdHlsZS5kaXNwbGF5PXRoaXMucmVmZXJlbmNlRGlzcGxheUxhYmVsPydpbmxpbmUnOicnO30KLWlmKGV2ZW50LmRlbHRhLmdyb3VwaW5ncyl7dGhpcy4kLnBpY2tlci5jdXJyZW50R3JvdXBLZXlzPXRoaXMudmlld1N0YXRlLmdyb3VwaW5ncy5tYXAoZz0+Zy5rZXkpO30KLWlmKGV2ZW50LmRlbHRhLnRhYmxlUm93U3RhdGVzKXtmb3IoY29uc3Qgcm93IG9mIHRyLnYudWkuSGlzdG9ncmFtU2V0VGFibGVSb3dTdGF0ZS53YWxrQWxsKHRoaXMudmlld1N0YXRlLnRhYmxlUm93U3RhdGVzLnZhbHVlcygpKSl7cm93LmFkZFVwZGF0ZUxpc3RlbmVyKHRoaXMucm93TGlzdGVuZXJfKTt9Ci1jb25zdCBhbnlTaG93aW5nPXRoaXMuYW55T3ZlcnZpZXdDaGFydHNfO3RoaXMuJC5oaWRlX292ZXJ2aWV3LnN0eWxlLmRpc3BsYXk9YW55U2hvd2luZz8naW5saW5lJzonbm9uZSc7dGhpcy4kLnNob3dfb3ZlcnZpZXcuc3R5bGUuZGlzcGxheT1hbnlTaG93aW5nPydub25lJzonaW5saW5lJzt9Ci1pZihldmVudC5kZWx0YS5hbHBoYSl7dGhpcy5hbHBoYUluZGV4PXRoaXMuZ2V0QWxwaGFJbmRleEZyb21WaWV3U3RhdGVfKCk7fQotdGhpcy5pc0luT25WaWV3U3RhdGVVcGRhdGVfPWZhbHNlO3RoaXMub25Vc2VyQ2hhbmdlXygpO30sb25Sb3dWaWV3U3RhdGVVcGRhdGVfKGV2ZW50KXtpZihldmVudC5kZWx0YS5pc092ZXJ2aWV3ZWQpe2NvbnN0IGFueVNob3dpbmc9ZXZlbnQuZGVsdGEuaXNPdmVydmlld2VkLmN1cnJlbnR8fHRoaXMuYW55T3ZlcnZpZXdDaGFydHNfO3RoaXMuJC5oaWRlX292ZXJ2aWV3LnN0eWxlLmRpc3BsYXk9YW55U2hvd2luZz8naW5saW5lJzonbm9uZSc7dGhpcy4kLnNob3dfb3ZlcnZpZXcuc3R5bGUuZGlzcGxheT1hbnlTaG93aW5nPydub25lJzonaW5saW5lJzt9Ci1pZihldmVudC5kZWx0YS5zdWJSb3dzKXtmb3IoY29uc3Qgc3ViUm93IG9mIGV2ZW50LmRlbHRhLnN1YlJvd3MucHJldmlvdXMpe3N1YlJvdy5yZW1vdmVVcGRhdGVMaXN0ZW5lcih0aGlzLnJvd0xpc3RlbmVyXyk7fQotZm9yKGNvbnN0IHN1YlJvdyBvZiBldmVudC5kZWx0YS5zdWJSb3dzLmN1cnJlbnQpe3N1YlJvdy5hZGRVcGRhdGVMaXN0ZW5lcih0aGlzLnJvd0xpc3RlbmVyXyk7fX19LG9uR3JvdXBzQ2hhbmdlZF8oKXtpZih0aGlzLiQucGlja2VyLmN1cnJlbnRHcm91cHMubGVuZ3RoPT09MCYmdGhpcy4kLnBpY2tlci5wb3NzaWJsZUdyb3Vwcy5sZW5ndGg+MCl7dGhpcy4kLnBpY2tlci5jdXJyZW50R3JvdXBLZXlzPVt0aGlzLiQucGlja2VyLnBvc3NpYmxlR3JvdXBzWzBdLmtleV07fQotdGhpcy52aWV3U3RhdGUuZ3JvdXBpbmdzPXRoaXMuJC5waWNrZXIuY3VycmVudEdyb3Vwczt9LHNldCBzaG93QWxsRW5hYmxlZChlbmFibGUpe2lmKCFlbmFibGUpdGhpcy4kLnNob3dfYWxsLmNoZWNrZWQ9dHJ1ZTt0aGlzLiQuc2hvd19hbGwuZGlzYWJsZWQ9IWVuYWJsZTt9LHNldCBwb3NzaWJsZUdyb3VwaW5ncyhncm91cGluZ3Mpe3RoaXMuJC5waWNrZXIucG9zc2libGVHcm91cHM9Z3JvdXBpbmdzO3RoaXMuJC5waWNrZXIuc3R5bGUuZGlzcGxheT0oZ3JvdXBpbmdzLmxlbmd0aDwyKT8nbm9uZSc6J2Jsb2NrJzt0aGlzLm9uR3JvdXBzQ2hhbmdlZF8oKTt9LHNldCBkaXNwbGF5TGFiZWxzKGxhYmVscyl7dGhpcy4kLnJlZmVyZW5jZV9kaXNwbGF5X2xhYmVsLnN0eWxlLmRpc3BsYXk9KGxhYmVscy5sZW5ndGg8Mik/J25vbmUnOidpbmxpbmUnO3doaWxlKHRoaXMuJC5yZWZlcmVuY2VfZGlzcGxheV9sYWJlbC5jaGlsZHJlbi5sZW5ndGg+MSl7dGhpcy4kLnJlZmVyZW5jZV9kaXNwbGF5X2xhYmVsLnJlbW92ZUNoaWxkKHRoaXMuJC5yZWZlcmVuY2VfZGlzcGxheV9sYWJlbC5sYXN0Q2hpbGQpO30KLWZvcihjb25zdCBkaXNwbGF5TGFiZWwgb2YgbGFiZWxzKXtjb25zdCBvcHRpb249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7b3B0aW9uLnRleHRDb250ZW50PWRpc3BsYXlMYWJlbDtvcHRpb24udmFsdWU9ZGlzcGxheUxhYmVsO3RoaXMuJC5yZWZlcmVuY2VfZGlzcGxheV9sYWJlbC5hcHBlbmRDaGlsZChvcHRpb24pO30KLWlmKGxhYmVscy5pbmNsdWRlcyh0aGlzLnZpZXdTdGF0ZS5yZWZlcmVuY2VEaXNwbGF5TGFiZWwpKXt0aGlzLnJlZmVyZW5jZURpc3BsYXlMYWJlbD10aGlzLnZpZXdTdGF0ZS5yZWZlcmVuY2VEaXNwbGF5TGFiZWw7fWVsc2V7dGhpcy52aWV3U3RhdGUucmVmZXJlbmNlRGlzcGxheUxhYmVsPScnO319LGdldCBiYXNlU3RhdGlzdGljTmFtZXMoKXtyZXR1cm4gdGhpcy5iYXNlU3RhdGlzdGljTmFtZXNfO30sc2V0IGJhc2VTdGF0aXN0aWNOYW1lcyhuYW1lcyl7dGhpcy5iYXNlU3RhdGlzdGljTmFtZXNfPW5hbWVzO3RoaXMuc3RhdGlzdGljTmFtZXM9bmFtZXM7fSxnZXQgc3RhdGlzdGljTmFtZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLiQuc3RhdGlzdGljLm9wdGlvbnMpLm1hcChvPT5vLnZhbHVlKTt9LHNldCBzdGF0aXN0aWNOYW1lcyhuYW1lcyl7dGhpcy4kLnN0YXRpc3RpYy5zdHlsZS5kaXNwbGF5PShuYW1lcy5sZW5ndGg8Mik/J25vbmUnOidpbmxpbmUnO3doaWxlKHRoaXMuJC5zdGF0aXN0aWMuY2hpbGRyZW4ubGVuZ3RoKXt0aGlzLiQuc3RhdGlzdGljLnJlbW92ZUNoaWxkKHRoaXMuJC5zdGF0aXN0aWMubGFzdENoaWxkKTt9Ci1mb3IoY29uc3QgbmFtZSBvZiBuYW1lcyl7Y29uc3Qgb3B0aW9uPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO29wdGlvbi50ZXh0Q29udGVudD1uYW1lO3RoaXMuJC5zdGF0aXN0aWMuYXBwZW5kQ2hpbGQob3B0aW9uKTt9Ci1pZihuYW1lcy5pbmNsdWRlcyh0aGlzLnZpZXdTdGF0ZS5kaXNwbGF5U3RhdGlzdGljTmFtZSkpe3RoaXMuZGlzcGxheVN0YXRpc3RpY05hbWU9dGhpcy52aWV3U3RhdGUuZGlzcGxheVN0YXRpc3RpY05hbWU7dGhpcy4kLnN0YXRpc3RpYy52YWx1ZT10aGlzLmRpc3BsYXlTdGF0aXN0aWNOYW1lO31lbHNle3RoaXMudmlld1N0YXRlLmRpc3BsYXlTdGF0aXN0aWNOYW1lPW5hbWVzWzBdfHwnJzt9fSxnZXQgYW55T3ZlcnZpZXdDaGFydHNfKCl7Zm9yKGNvbnN0IHJvdyBvZiB0ci52LnVpLkhpc3RvZ3JhbVNldFRhYmxlUm93U3RhdGUud2Fsa0FsbCh0aGlzLnZpZXdTdGF0ZS50YWJsZVJvd1N0YXRlcy52YWx1ZXMoKSkpe2lmKHJvdy5pc092ZXJ2aWV3ZWQpcmV0dXJuIHRydWU7fQotcmV0dXJuIGZhbHNlO30sYXN5bmMgdG9nZ2xlT3ZlcnZpZXdMaW5lQ2hhcnRzXygpe2NvbnN0IHNob3dPdmVydmlld3M9IXRoaXMuYW55T3ZlcnZpZXdDaGFydHNfO2NvbnN0IG1hcms9dHIuYi5UaW1pbmcubWFyaygnaGlzdG9ncmFtLXNldC1jb250cm9scycsKHNob3dPdmVydmlld3M/J3Nob3cnOidoaWRlJykrJ092ZXJ2aWV3Q2hhcnRzJyk7Zm9yKGNvbnN0IHJvdyBvZiB0ci52LnVpLkhpc3RvZ3JhbVNldFRhYmxlUm93U3RhdGUud2Fsa0FsbCh0aGlzLnZpZXdTdGF0ZS50YWJsZVJvd1N0YXRlcy52YWx1ZXMoKSkpe2F3YWl0IHJvdy51cGRhdGUoe2lzT3ZlcnZpZXdlZDpzaG93T3ZlcnZpZXdzfSk7fQotdGhpcy4kLmhpZGVfb3ZlcnZpZXcuc3R5bGUuZGlzcGxheT1zaG93T3ZlcnZpZXdzPydpbmxpbmUnOidub25lJzt0aGlzLiQuc2hvd19vdmVydmlldy5zdHlsZS5kaXNwbGF5PXNob3dPdmVydmlld3M/J25vbmUnOidpbmxpbmUnO2F3YWl0IHRyLmIuYW5pbWF0aW9uRnJhbWUoKTttYXJrLmVuZCgpO30sc2V0IGhlbHBIcmVmKGhyZWYpe3RoaXMuJC5oZWxwLmhyZWY9aHJlZjt0aGlzLiQuaGVscC5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnO30sc2V0IGZlZWRiYWNrSHJlZihocmVmKXt0aGlzLiQuZmVlZGJhY2suaHJlZj1ocmVmO3RoaXMuJC5mZWVkYmFjay5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnO30sY2xlYXJTZWFyY2hfKCl7dGhpcy5zZXQoJ3NlYXJjaFF1ZXJ5JywnJyk7dGhpcy4kLnNlYXJjaC5mb2N1cygpO30sZ2V0QWxwaGFTdHJpbmdfKGFscGhhSW5kZXgpe3JldHVybignJytBTFBIQV9PUFRJT05TW2FscGhhSW5kZXhdKS5zdWJzdHIoMCw1KTt9LG9wZW5BbHBoYVNsaWRlcl8oKXtjb25zdCBhbHBoYUJ1dHRvblJlY3Q9dGhpcy4kLmFscGhhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuJC5hbHBoYV9zbGlkZXJfY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3RoaXMuJC5hbHBoYV9zbGlkZXJfY29udGFpbmVyLnN0eWxlLnRvcD1hbHBoYUJ1dHRvblJlY3QuYm90dG9tKydweCc7dGhpcy4kLmFscGhhX3NsaWRlcl9jb250YWluZXIuc3R5bGUubGVmdD1hbHBoYUJ1dHRvblJlY3QubGVmdCsncHgnO3RoaXMuJC5hbHBoYV9zbGlkZXIuZm9jdXMoKTt9LGNsb3NlQWxwaGFTbGlkZXJfKCl7dGhpcy4kLmFscGhhX3NsaWRlcl9jb250YWluZXIuc3R5bGUuZGlzcGxheT0nJzt9LHVwZGF0ZUFscGhhXygpe3RoaXMuYWxwaGFJbmRleD10aGlzLiQuYWxwaGFfc2xpZGVyLnZhbHVlO30sZ2V0QWxwaGFJbmRleEZyb21WaWV3U3RhdGVfKCl7Zm9yKGxldCBpPTA7aTxBTFBIQV9PUFRJT05TLmxlbmd0aDsrK2kpe2lmKEFMUEhBX09QVElPTlNbaV0+PXRoaXMudmlld1N0YXRlLmFscGhhKXJldHVybiBpO30KLXJldHVybiBBTFBIQV9PUFRJT05TLmxlbmd0aC0xO30sfSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52JyxmdW5jdGlvbigpe2Z1bmN0aW9uIGRlbGV0ZU1lcmdlZFRvRGlhZ25vc3RpY3MoaGlzdG9ncmFtQXJyYXlNYXApe2Zvcihjb25zdFtuYW1lLGhpc3RvZ3JhbXNdb2YgaGlzdG9ncmFtQXJyYXlNYXApe2lmKGhpc3RvZ3JhbXMgaW5zdGFuY2VvZiBBcnJheSl7Zm9yKGNvbnN0IGhpc3RvZ3JhbSBvZiBoaXN0b2dyYW1zKXtoaXN0b2dyYW0uZGlhZ25vc3RpY3MuZGVsZXRlKHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5NRVJHRURfVE8pO319ZWxzZSBpZihoaXN0b2dyYW1zIGluc3RhbmNlb2YgTWFwKXtkZWxldGVNZXJnZWRUb0RpYWdub3N0aWNzKGhpc3RvZ3JhbXMpO319fQotY2xhc3MgSGlzdG9ncmFtU2V0SGllcmFyY2h5e2NvbnN0cnVjdG9yKG5hbWUpe3RoaXMubmFtZT1uYW1lO3RoaXMuZGVzY3JpcHRpb249Jyc7dGhpcy5kZXB0aD0wO3RoaXMuc3ViUm93cz1bXTt0aGlzLmNvbHVtbnM9bmV3IE1hcCgpO3RoaXMubWVyZ2VSZWxhdGlvbnNoaXBzRm9yQ29sdW1uXz1uZXcgTWFwKCk7fSp3YWxrKCl7eWllbGQgdGhpcztmb3IoY29uc3Qgcm93IG9mIHRoaXMuc3ViUm93cyl5aWVsZCpyb3cud2FsaygpO30KLXN0YXRpYyp3YWxrQWxsKHJvb3RSb3dzKXtmb3IoY29uc3Qgcm9vdFJvdyBvZiByb290Um93cyl5aWVsZCpyb290Um93LndhbGsoKTt9Ci1zdGF0aWMgYnVpbGQoaGlzdG9ncmFtQXJyYXlNYXApe2NvbnN0IHJvb3RSb3dzPVtdO0hpc3RvZ3JhbVNldEhpZXJhcmNoeS5idWlsZEludGVybmFsXyhoaXN0b2dyYW1BcnJheU1hcCxbXSxyb290Um93cyk7Y29uc3QgaGlzdG9ncmFtcz1uZXcgdHIudi5IaXN0b2dyYW1TZXQoKTtmb3IoY29uc3Qgcm93IG9mIEhpc3RvZ3JhbVNldEhpZXJhcmNoeS53YWxrQWxsKHJvb3RSb3dzKSl7Zm9yKGNvbnN0IGhpc3Qgb2Ygcm93LmNvbHVtbnMudmFsdWVzKCkpe2lmKCEoaGlzdCBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKSljb250aW51ZTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShoaXN0KTt9fQotaGlzdG9ncmFtcy5kZWR1cGxpY2F0ZURpYWdub3N0aWNzKCk7Zm9yKGNvbnN0IHJvdyBvZiBIaXN0b2dyYW1TZXRIaWVyYXJjaHkud2Fsa0FsbChyb290Um93cykpe2Zvcihjb25zdFtuYW1lLGhpc3Rdb2Ygcm93LmNvbHVtbnMpe2lmKCEoaGlzdCBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKSljb250aW51ZTtpZighcm93Lm1lcmdlUmVsYXRpb25zaGlwc0ZvckNvbHVtbl8uZ2V0KG5hbWUpKWNvbnRpbnVlO2hpc3QuZGlhZ25vc3RpY3MubWVyZ2VSZWxhdGlvbnNoaXBzKGhpc3QpO319Ci1kZWxldGVNZXJnZWRUb0RpYWdub3N0aWNzKGhpc3RvZ3JhbUFycmF5TWFwKTtmb3IoY29uc3Qgcm93IG9mIEhpc3RvZ3JhbVNldEhpZXJhcmNoeS53YWxrQWxsKHJvb3RSb3dzKSl7cm93Lm1heWJlUmViaW5fKCk7fQotcmV0dXJuIHJvb3RSb3dzO30KLW1heWJlUmViaW5fKCl7Y29uc3QgZGF0YVJhbmdlPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTtmb3IoY29uc3QgaGlzdCBvZiB0aGlzLmNvbHVtbnMudmFsdWVzKCkpe2lmKCEoaGlzdCBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKSljb250aW51ZTtpZihoaXN0LmFsbEJpbnMubGVuZ3RoPjEpcmV0dXJuO2lmKGhpc3QubnVtVmFsdWVzPT09MCljb250aW51ZTtkYXRhUmFuZ2UuYWRkVmFsdWUoaGlzdC5taW4pO2RhdGFSYW5nZS5hZGRWYWx1ZShoaXN0Lm1heCk7fQotZGF0YVJhbmdlLmFkZFZhbHVlKHRyLmIubWF0aC5sZXNzZXJXaG9sZU51bWJlcihkYXRhUmFuZ2UubWluKSk7ZGF0YVJhbmdlLmFkZFZhbHVlKHRyLmIubWF0aC5ncmVhdGVyV2hvbGVOdW1iZXIoZGF0YVJhbmdlLm1heCkpO2lmKGRhdGFSYW5nZS5taW49PT1kYXRhUmFuZ2UubWF4KXJldHVybjtjb25zdCBib3VuZGFyaWVzPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoZGF0YVJhbmdlLm1pbixkYXRhUmFuZ2UubWF4LHRyLnYuREVGQVVMVF9SRUJJTk5FRF9DT1VOVCk7Zm9yKGNvbnN0W25hbWUsaGlzdF1vZiB0aGlzLmNvbHVtbnMpe2lmKCEoaGlzdCBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKSljb250aW51ZTt0aGlzLmNvbHVtbnMuc2V0KG5hbWUsaGlzdC5yZWJpbihib3VuZGFyaWVzKSk7fX0KLXN0YXRpYyBtZXJnZUhpc3RvZ3JhbURvd25IaWVyYXJjaHlfKGhpc3RvZ3JhbSxoaWVyYXJjaHksY29sdW1uTmFtZSl7bGV0IGdyb3VwaW5nUGF0aD11bmRlZmluZWQ7Zm9yKGNvbnN0IHJvdyBvZiBoaWVyYXJjaHkpe2lmKGdyb3VwaW5nUGF0aCE9PXVuZGVmaW5lZCl7Z3JvdXBpbmdQYXRoLnB1c2gocm93Lm5hbWUpO31lbHNlIGlmKHJvdy5uYW1lPT09aGlzdG9ncmFtLm5hbWUpe2dyb3VwaW5nUGF0aD1bXTt9Ci1pZighcm93LmRlc2NyaXB0aW9uKXtyb3cuZGVzY3JpcHRpb249aGlzdG9ncmFtLmRlc2NyaXB0aW9uO30KLWNvbnN0IGV4aXN0aW5nPXJvdy5jb2x1bW5zLmdldChjb2x1bW5OYW1lKTtpZihleGlzdGluZz09PXVuZGVmaW5lZCl7Y29uc3QgY2xvbmU9aGlzdG9ncmFtLmNsb25lKCk7aWYoZ3JvdXBpbmdQYXRoIT09dW5kZWZpbmVkKXtuZXcgdHIudi5kLkdyb3VwaW5nUGF0aChncm91cGluZ1BhdGgpLmFkZFRvSGlzdG9ncmFtKGNsb25lKTt9Ci1yb3cuY29sdW1ucy5zZXQoY29sdW1uTmFtZSxjbG9uZSk7cm93Lm1lcmdlUmVsYXRpb25zaGlwc0ZvckNvbHVtbl8uc2V0KGNvbHVtbk5hbWUsdHJ1ZSk7Y29udGludWU7fQotaWYoZXhpc3RpbmcgaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbVNldCl7ZXhpc3RpbmcuYWRkSGlzdG9ncmFtKGhpc3RvZ3JhbSk7Y29udGludWU7fQotaWYoIWV4aXN0aW5nLmNhbkFkZEhpc3RvZ3JhbShoaXN0b2dyYW0pKXtjb25zdCB1bm1lcmdlYWJsZUhpc3RvZ3JhbXM9bmV3IHRyLnYuSGlzdG9ncmFtU2V0KFtoaXN0b2dyYW1dKTtjb25zdCBtZXJnZWRGcm9tPWV4aXN0aW5nLmRpYWdub3N0aWNzLmdldCh0ci52LmQuUkVTRVJWRURfTkFNRVMuTUVSR0VEX0ZST00pO2lmKG1lcmdlZEZyb20hPT11bmRlZmluZWQpe2Zvcihjb25zdFt1bnVzZWROYW1lLG9yaWdIaXN0XW9mIG1lcmdlZEZyb20pe3VubWVyZ2VhYmxlSGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0ob3JpZ0hpc3QpO319Ci1yb3cuY29sdW1ucy5zZXQoY29sdW1uTmFtZSx1bm1lcmdlYWJsZUhpc3RvZ3JhbXMpO2NvbnRpbnVlO30KLWlmKGV4aXN0aW5nLm5hbWUhPT1oaXN0b2dyYW0ubmFtZSl7cm93Lm1lcmdlUmVsYXRpb25zaGlwc0ZvckNvbHVtbl8uc2V0KG5hbWUsZmFsc2UpO30KLWV4aXN0aW5nLmFkZEhpc3RvZ3JhbShoaXN0b2dyYW0pO319Ci1zdGF0aWMgYnVpbGRJbnRlcm5hbF8oaGlzdG9ncmFtQXJyYXlNYXAsaGllcmFyY2h5LHJvb3RSb3dzKXtmb3IoY29uc3RbbmFtZSxoaXN0b2dyYW1zXW9mIGhpc3RvZ3JhbUFycmF5TWFwKXtpZihoaXN0b2dyYW1zIGluc3RhbmNlb2YgQXJyYXkpe2Zvcihjb25zdCBoaXN0b2dyYW0gb2YgaGlzdG9ncmFtcyl7SGlzdG9ncmFtU2V0SGllcmFyY2h5Lm1lcmdlSGlzdG9ncmFtRG93bkhpZXJhcmNoeV8oaGlzdG9ncmFtLGhpZXJhcmNoeSxuYW1lKTt9fWVsc2UgaWYoaGlzdG9ncmFtcyBpbnN0YW5jZW9mIE1hcCl7Y29uc3Qgcm93PW5ldyBIaXN0b2dyYW1TZXRIaWVyYXJjaHkobmFtZSk7cm93LmRlcHRoPWhpZXJhcmNoeS5sZW5ndGg7aGllcmFyY2h5LnB1c2gocm93KTtIaXN0b2dyYW1TZXRIaWVyYXJjaHkuYnVpbGRJbnRlcm5hbF8oaGlzdG9ncmFtcyxoaWVyYXJjaHkscm9vdFJvd3MpO2hpZXJhcmNoeS5wb3AoKTtpZihoaWVyYXJjaHkubGVuZ3RoPT09MCl7cm9vdFJvd3MucHVzaChyb3cpO31lbHNle2NvbnN0IHBhcmVudFJvdz1oaWVyYXJjaHlbaGllcmFyY2h5Lmxlbmd0aC0xXTtwYXJlbnRSb3cuc3ViUm93cy5wdXNoKHJvdyk7fX19fQotc3RhdGljIGZpbHRlcihyb3dzLGhpc3RvZ3JhbXMpe2NvbnN0IHJlc3VsdHM9W107Zm9yKGNvbnN0IHJvdyBvZiByb3dzKXtsZXQgZmlsdGVyZWRTdWJSb3dzPVtdO2lmKHJvdy5zdWJSb3dzLmxlbmd0aD4wKXtmaWx0ZXJlZFN1YlJvd3M9SGlzdG9ncmFtU2V0SGllcmFyY2h5LmZpbHRlcihyb3cuc3ViUm93cyxoaXN0b2dyYW1zKTtpZihmaWx0ZXJlZFN1YlJvd3MubGVuZ3RoPT09MCljb250aW51ZTt9ZWxzZXtsZXQgZm91bmQ9ZmFsc2U7Zm9yKGNvbnN0IHRlc3RIaXN0IG9mIHJvdy5jb2x1bW5zLnZhbHVlcygpKXtpZih0ZXN0SGlzdCBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtU2V0KXtmb3IoY29uc3Qgb3JpZ0hpc3Qgb2YgdGVzdEhpc3Qpe2lmKGhpc3RvZ3JhbXMubG9va3VwSGlzdG9ncmFtKG9yaWdIaXN0Lmd1aWQpIT09dW5kZWZpbmVkKXtmb3VuZD10cnVlO2JyZWFrO319Ci1pZihmb3VuZClicmVhaztjb250aW51ZTt9Ci1pZighKHRlc3RIaXN0IGluc3RhbmNlb2YgdHIudi5IaXN0b2dyYW0pKXt0aHJvdyBuZXcgRXJyb3IoJ0NlbGxzIGNhbiBvbmx5IGNvbnRhaW4gSGlzdG9ncmFtIG9yIEhpc3RvZ3JhbVNldCcpO30KLWlmKGhpc3RvZ3JhbXMubG9va3VwSGlzdG9ncmFtKHRlc3RIaXN0Lmd1aWQpIT09dW5kZWZpbmVkKXtmb3VuZD10cnVlO2JyZWFrO30KLWNvbnN0IG1lcmdlZEZyb209dGVzdEhpc3QuZGlhZ25vc3RpY3MuZ2V0KHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5NRVJHRURfRlJPTSk7aWYobWVyZ2VkRnJvbSE9PXVuZGVmaW5lZCl7Zm9yKGNvbnN0W3VudXNlZE5hbWUsb3JpZ0hpc3Rdb2YgbWVyZ2VkRnJvbSl7aWYoaGlzdG9ncmFtcy5sb29rdXBIaXN0b2dyYW0ob3JpZ0hpc3QuZ3VpZCkhPT11bmRlZmluZWQpe2ZvdW5kPXRydWU7YnJlYWs7fX19Ci1pZihmb3VuZClicmVhazt9Ci1pZighZm91bmQpY29udGludWU7fQotY29uc3QgY2xvbmU9bmV3IEhpc3RvZ3JhbVNldEhpZXJhcmNoeShyb3cubmFtZSk7Y2xvbmUuZGVzY3JpcHRpb249cm93LmRlc2NyaXB0aW9uO2Nsb25lLmRlcHRoPXJvdy5kZXB0aDtjbG9uZS5zdWJSb3dzPWZpbHRlcmVkU3ViUm93cztjbG9uZS5jb2x1bW5zPXJvdy5jb2x1bW5zO3Jlc3VsdHMucHVzaChjbG9uZSk7fQotcmV0dXJuIHJlc3VsdHM7fX0KLXJldHVybntIaXN0b2dyYW1TZXRIaWVyYXJjaHksfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXYtdWktaGlzdG9ncmFtLXNldC10YWJsZS1jZWxsJyxjcmVhdGVkKCl7dGhpcy52aWV3U3RhdGVfPXVuZGVmaW5lZDt0aGlzLnJvb3RMaXN0ZW5lcl89dGhpcy5vblJvb3RTdGF0ZVVwZGF0ZV8uYmluZCh0aGlzKTt0aGlzLnJvd189dW5kZWZpbmVkO3RoaXMuZGlzcGxheUxhYmVsXz0nJzt0aGlzLmhpc3RvZ3JhbV89dW5kZWZpbmVkO3RoaXMuaGlzdG9ncmFtU3Bhbl89dW5kZWZpbmVkO3RoaXMub3ZlcnZpZXdDaGFydF89dW5kZWZpbmVkO3RoaXMubXd1UmVzdWx0Xz11bmRlZmluZWQ7fSxyZWFkeSgpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMub25DbGlja18uYmluZCh0aGlzKSk7fSxhdHRhY2hlZCgpe2lmKHRoaXMucm93KXt0aGlzLnJvdy5yb290Vmlld1N0YXRlLmFkZFVwZGF0ZUxpc3RlbmVyKHRoaXMucm9vdExpc3RlbmVyXyk7fX0sZGV0YWNoZWQoKXt0aGlzLnJvdy5yb290Vmlld1N0YXRlLnJlbW92ZVVwZGF0ZUxpc3RlbmVyKHRoaXMucm9vdExpc3RlbmVyXyk7fSx1cGRhdGVNd3VfKCl7Y29uc3QgcmVmZXJlbmNlSGlzdG9ncmFtPXRoaXMucmVmZXJlbmNlSGlzdG9ncmFtO3RoaXMubXd1UmVzdWx0Xz11bmRlZmluZWQ7aWYoISh0aGlzLmhpc3RvZ3JhbSBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKSlyZXR1cm47aWYoIXRoaXMuaGlzdG9ncmFtLmNhbkNvbXBhcmUocmVmZXJlbmNlSGlzdG9ncmFtKSlyZXR1cm47dGhpcy5td3VSZXN1bHRfPXRyLmIubWF0aC5TdGF0aXN0aWNzLm13dSh0aGlzLmhpc3RvZ3JhbS5zYW1wbGVWYWx1ZXMscmVmZXJlbmNlSGlzdG9ncmFtLnNhbXBsZVZhbHVlcyx0aGlzLnJvdy5yb290Vmlld1N0YXRlLmFscGhhKTt9LGJ1aWxkKHJvdyxkaXNwbGF5TGFiZWwsdmlld1N0YXRlKXt0aGlzLnJvd189cm93O3RoaXMuZGlzcGxheUxhYmVsXz1kaXNwbGF5TGFiZWw7dGhpcy52aWV3U3RhdGVfPXZpZXdTdGF0ZTt0aGlzLmhpc3RvZ3JhbV89dGhpcy5yb3cuY29sdW1ucy5nZXQoZGlzcGxheUxhYmVsKTtpZih0aGlzLnZpZXdTdGF0ZSl7dGhpcy52aWV3U3RhdGUuYWRkVXBkYXRlTGlzdGVuZXIodGhpcy5vblZpZXdTdGF0ZVVwZGF0ZV8uYmluZCh0aGlzKSk7fQotdGhpcy5yb3cudmlld1N0YXRlLmFkZFVwZGF0ZUxpc3RlbmVyKHRoaXMub25Sb3dTdGF0ZVVwZGF0ZV8uYmluZCh0aGlzKSk7aWYodGhpcy5pc0F0dGFjaGVkKXt0aGlzLnJvdy5yb290Vmlld1N0YXRlLmFkZFVwZGF0ZUxpc3RlbmVyKHRoaXMucm9vdExpc3RlbmVyXyk7fQotdGhpcy51cGRhdGVNd3VfKCk7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZVNpZ25pZmljYW5jZV8oKXtpZighdGhpcy5td3VSZXN1bHRfKXJldHVybjt0aGlzLiQuc2NhbGFyLnNpZ25pZmljYW5jZT10aGlzLm13dVJlc3VsdF8uc2lnbmlmaWNhbmNlO30sZ2V0IHZpZXdTdGF0ZSgpe3JldHVybiB0aGlzLnZpZXdTdGF0ZV87fSxnZXQgcm93KCl7cmV0dXJuIHRoaXMucm93Xzt9LGdldCBoaXN0b2dyYW0oKXtyZXR1cm4gdGhpcy5oaXN0b2dyYW1fO30sZ2V0IHJlZmVyZW5jZUhpc3RvZ3JhbSgpe2NvbnN0IHJlZmVyZW5jZURpc3BsYXlMYWJlbD10aGlzLnJvdy5yb290Vmlld1N0YXRlLnJlZmVyZW5jZURpc3BsYXlMYWJlbDtpZighcmVmZXJlbmNlRGlzcGxheUxhYmVsKXJldHVybiB1bmRlZmluZWQ7aWYocmVmZXJlbmNlRGlzcGxheUxhYmVsPT09dGhpcy5kaXNwbGF5TGFiZWxfKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMucm93LmNvbHVtbnMuZ2V0KHJlZmVyZW5jZURpc3BsYXlMYWJlbCk7fSxnZXQgaXNIaXN0b2dyYW1PcGVuKCl7cmV0dXJuKHRoaXMuaGlzdG9ncmFtU3Bhbl8hPT11bmRlZmluZWQpJiYodGhpcy4kLmhpc3RvZ3JhbS5zdHlsZS5kaXNwbGF5PT09J2Jsb2NrJyk7fSxzZXQgaXNIaXN0b2dyYW1PcGVuKG9wZW4pe2lmKCEodGhpcy5oaXN0b2dyYW0gaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbSl8fCh0aGlzLmhpc3RvZ3JhbS5udW1WYWx1ZXM9PT0wKSl7cmV0dXJuO30KLXRoaXMuJC5zY2FsYXIuc3R5bGUuZGlzcGxheT1vcGVuPydub25lJzonZmxleCc7dGhpcy4kLm9wZW5faGlzdG9ncmFtLnN0eWxlLmRpc3BsYXk9b3Blbj8nbm9uZSc6J2Jsb2NrJzt0aGlzLiQuY2xvc2VfaGlzdG9ncmFtLnN0eWxlLmRpc3BsYXk9b3Blbj8nYmxvY2snOidub25lJzt0aGlzLiQuaGlzdG9ncmFtLnN0eWxlLmRpc3BsYXk9b3Blbj8nYmxvY2snOidub25lJztpZihvcGVuJiZ0aGlzLmhpc3RvZ3JhbVNwYW5fPT09dW5kZWZpbmVkKXt0aGlzLmhpc3RvZ3JhbVNwYW5fPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXYtdWktaGlzdG9ncmFtLXNwYW4nKTt0aGlzLmhpc3RvZ3JhbVNwYW5fLnZpZXdTdGF0ZT10aGlzLnZpZXdTdGF0ZTt0aGlzLmhpc3RvZ3JhbVNwYW5fLnJvd1N0YXRlPXRoaXMucm93LnZpZXdTdGF0ZTt0aGlzLmhpc3RvZ3JhbVNwYW5fLnJvb3RTdGF0ZT10aGlzLnJvdy5yb290Vmlld1N0YXRlO3RoaXMuaGlzdG9ncmFtU3Bhbl8uYnVpbGQodGhpcy5oaXN0b2dyYW0sdGhpcy5yZWZlcmVuY2VIaXN0b2dyYW0pO3RoaXMuJC5oaXN0b2dyYW0uYXBwZW5kQ2hpbGQodGhpcy5oaXN0b2dyYW1TcGFuXyk7fQotdGhpcy52aWV3U3RhdGUuaXNPcGVuPW9wZW47fSxvblZpZXdTdGF0ZVVwZGF0ZV8oZXZlbnQpe2lmKGV2ZW50LmRlbHRhLmlzT3Blbil7dGhpcy5pc0hpc3RvZ3JhbU9wZW49dGhpcy52aWV3U3RhdGUuaXNPcGVuO319LG9uUm93U3RhdGVVcGRhdGVfKGV2ZW50KXtpZihldmVudC5kZWx0YS5pc092ZXJ2aWV3ZWQ9PT11bmRlZmluZWQpcmV0dXJuO2lmKHRoaXMucm93LnZpZXdTdGF0ZS5pc092ZXJ2aWV3ZWQpe3RoaXMuc2hvd092ZXJ2aWV3KCk7fWVsc2V7dGhpcy5oaWRlT3ZlcnZpZXcoKTt9fSxvblJvb3RTdGF0ZVVwZGF0ZV8oZXZlbnQpe2lmKGV2ZW50LmRlbHRhLnJlZmVyZW5jZURpc3BsYXlMYWJlbCYmdGhpcy5oaXN0b2dyYW1TcGFuXyl7dGhpcy5oaXN0b2dyYW1TcGFuXy5idWlsZCh0aGlzLmhpc3RvZ3JhbSx0aGlzLnJlZmVyZW5jZUhpc3RvZ3JhbSk7fQotaWYoZXZlbnQuZGVsdGEuZGlzcGxheVN0YXRpc3RpY05hbWV8fGV2ZW50LmRlbHRhLnJlZmVyZW5jZURpc3BsYXlMYWJlbCl7dGhpcy51cGRhdGVNd3VfKCk7dGhpcy51cGRhdGVDb250ZW50c18oKTt9ZWxzZSBpZihldmVudC5kZWx0YS5hbHBoYSYmdGhpcy5td3VSZXN1bHRfKXt0aGlzLm13dVJlc3VsdF8uY29tcGFyZSh0aGlzLnJvdy5yb290Vmlld1N0YXRlLmFscGhhKTt0aGlzLnVwZGF0ZVNpZ25pZmljYW5jZV8oKTt9Ci1pZih0aGlzLnJvdy52aWV3U3RhdGUuaXNPdmVydmlld2VkJiYoZXZlbnQuZGVsdGEuc29ydENvbHVtbkluZGV4fHxldmVudC5kZWx0YS5zb3J0RGVzY2VuZGluZ3x8ZXZlbnQuZGVsdGEuZGlzcGxheVN0YXRpc3RpY05hbWV8fGV2ZW50LmRlbHRhLnJlZmVyZW5jZURpc3BsYXlMYWJlbCkpe2lmKHRoaXMub3ZlcnZpZXdDaGFydF8hPT11bmRlZmluZWQpe3RoaXMuJC5vdmVydmlld19jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5vdmVydmlld0NoYXJ0Xyk7dGhpcy5vdmVydmlld0NoYXJ0Xz11bmRlZmluZWQ7fQotdGhpcy5zaG93T3ZlcnZpZXcoKTt9fSxvbkNsaWNrXyhldmVudCl7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7fSxvcGVuSGlzdG9ncmFtXygpe3RoaXMuaXNIaXN0b2dyYW1PcGVuPXRydWU7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZS1jZWxsJywnb3BlbicpO30sY2xvc2VIaXN0b2dyYW1fKCl7dGhpcy5pc0hpc3RvZ3JhbU9wZW49ZmFsc2U7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZS1jZWxsJywnY2xvc2UnKTt9LHVwZGF0ZUNvbnRlbnRzXygpe2NvbnN0IGlzT3Blbj10aGlzLmlzSGlzdG9ncmFtT3Blbjt0aGlzLiQuZW1wdHkuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnVubWVyZ2VhYmxlLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC5zY2FsYXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLmhpc3RvZ3JhbS5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQuY2xvc2VfaGlzdG9ncmFtLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC5vcGVuX2hpc3RvZ3JhbS5zdHlsZS52aXNpYmlsaXR5PSdoaWRkZW4nO2lmKCF0aGlzLmhpc3RvZ3JhbSl7dGhpcy4kLm1pc3Npbmcuc3R5bGUuZGlzcGxheT0nYmxvY2snO3JldHVybjt9Ci10aGlzLiQubWlzc2luZy5zdHlsZS5kaXNwbGF5PSdub25lJztpZih0aGlzLmhpc3RvZ3JhbSBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtU2V0KXt0aGlzLiQudW5tZXJnZWFibGUuc3R5bGUuZGlzcGxheT0nYmxvY2snO3JldHVybjt9Ci1pZighKHRoaXMuaGlzdG9ncmFtIGluc3RhbmNlb2YgdHIudi5IaXN0b2dyYW0pKXt0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgSGlzdG9ncmFtOiAnK3RoaXMuaGlzdG9ncmFtKTt9Ci1pZih0aGlzLmhpc3RvZ3JhbS5udW1WYWx1ZXM9PT0wKXt0aGlzLiQuZW1wdHkuc3R5bGUuZGlzcGxheT0nYmxvY2snO3JldHVybjt9Ci10aGlzLiQub3Blbl9oaXN0b2dyYW0uc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC5vcGVuX2hpc3RvZ3JhbS5zdHlsZS52aXNpYmlsaXR5PSd2aXNpYmxlJzt0aGlzLiQuc2NhbGFyLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3RoaXMudXBkYXRlU2lnbmlmaWNhbmNlXygpO2NvbnN0IHJlZmVyZW5jZUhpc3RvZ3JhbT10aGlzLnJlZmVyZW5jZUhpc3RvZ3JhbTtjb25zdCBzdGF0TmFtZT10aGlzLmhpc3RvZ3JhbS5nZXRBdmFpbGFibGVTdGF0aXN0aWNOYW1lKHRoaXMucm93LnJvb3RWaWV3U3RhdGUuZGlzcGxheVN0YXRpc3RpY05hbWUscmVmZXJlbmNlSGlzdG9ncmFtKTtjb25zdCBzdGF0aXN0aWNTY2FsYXI9dGhpcy5oaXN0b2dyYW0uZ2V0U3RhdGlzdGljU2NhbGFyKHN0YXROYW1lLHJlZmVyZW5jZUhpc3RvZ3JhbSk7dGhpcy4kLnNjYWxhci5zZXRWYWx1ZUFuZFVuaXQoc3RhdGlzdGljU2NhbGFyLnZhbHVlLHN0YXRpc3RpY1NjYWxhci51bml0KTt0aGlzLmlzSGlzdG9ncmFtT3Blbj1pc09wZW47fSxzaG93T3ZlcnZpZXcoKXt0aGlzLiQub3ZlcnZpZXdfY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztpZih0aGlzLm92ZXJ2aWV3Q2hhcnRfIT09dW5kZWZpbmVkKXJldHVybjt0aGlzLnJvdy5zb3J0U3ViUm93cygpO2xldCByZWZlcmVuY2VEaXNwbGF5TGFiZWw9dGhpcy5yb3cucm9vdFZpZXdTdGF0ZS5yZWZlcmVuY2VEaXNwbGF5TGFiZWw7aWYocmVmZXJlbmNlRGlzcGxheUxhYmVsPT09dGhpcy5kaXNwbGF5TGFiZWxfKXtyZWZlcmVuY2VEaXNwbGF5TGFiZWw9dW5kZWZpbmVkO30KLWNvbnN0IGRpc3BsYXlTdGF0aXN0aWNOYW1lPXRoaXMucm93LnJvb3RWaWV3U3RhdGUuZGlzcGxheVN0YXRpc3RpY05hbWU7Y29uc3QgZGF0YT1bXTtsZXQgdW5pdDtmb3IoY29uc3Qgc3ViUm93IG9mIHRoaXMucm93LnN1YlJvd3Mpe2NvbnN0IHN1Ykhpc3Q9c3ViUm93LmNvbHVtbnMuZ2V0KHRoaXMuZGlzcGxheUxhYmVsXyk7aWYoIShzdWJIaXN0IGluc3RhbmNlb2YgdHIudi5IaXN0b2dyYW0pKWNvbnRpbnVlO2lmKHVuaXQ9PT11bmRlZmluZWQpe3VuaXQ9c3ViSGlzdC51bml0O31lbHNlIGlmKHVuaXQhPT1zdWJIaXN0LnVuaXQpe2RhdGEuc3BsaWNlKDApO2JyZWFrO30KLWNvbnN0IHJlZkhpc3Q9c3ViUm93LmNvbHVtbnMuZ2V0KHJlZmVyZW5jZURpc3BsYXlMYWJlbCk7Y29uc3Qgc3RhdE5hbWU9c3ViSGlzdC5nZXRBdmFpbGFibGVTdGF0aXN0aWNOYW1lKGRpc3BsYXlTdGF0aXN0aWNOYW1lLHJlZkhpc3QpO2NvbnN0IHN0YXRTY2FsYXI9c3ViSGlzdC5nZXRTdGF0aXN0aWNTY2FsYXIoc3RhdE5hbWUscmVmSGlzdCk7aWYoc3RhdFNjYWxhciE9PXVuZGVmaW5lZCl7ZGF0YS5wdXNoKHt4OnN1YlJvdy5uYW1lLHk6c3RhdFNjYWxhci52YWx1ZSx9KTt9fQotaWYoZGF0YS5sZW5ndGg8MilyZXR1cm47dGhpcy5vdmVydmlld0NoYXJ0Xz1uZXcgdHIudWkuYi5OYW1lTGluZUNoYXJ0KCk7dGhpcy4kLm92ZXJ2aWV3X2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLm92ZXJ2aWV3Q2hhcnRfKTt0aGlzLm92ZXJ2aWV3Q2hhcnRfLmRpc3BsYXlYSW5Ib3Zlcj10cnVlO3RoaXMub3ZlcnZpZXdDaGFydF8uaGlkZUxlZ2VuZD10cnVlO3RoaXMub3ZlcnZpZXdDaGFydF8udW5pdD11bml0O3RoaXMub3ZlcnZpZXdDaGFydF8ub3ZlcnJpZGVEYXRhUmFuZ2U9dGhpcy5yb3cub3ZlcnZpZXdEYXRhUmFuZ2U7dGhpcy5vdmVydmlld0NoYXJ0Xy5kYXRhPWRhdGE7fSxoaWRlT3ZlcnZpZXcoKXt0aGlzLiQub3ZlcnZpZXdfY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9J25vbmUnO319KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7Y29uc3QgTkFNRV9DT0xVTU5fV0lEVEhfUFg9MzAwO1BvbHltZXIoe2lzOid0ci12LXVpLWhpc3RvZ3JhbS1zZXQtdGFibGUtbmFtZS1jZWxsJyxjcmVhdGVkKCl7dGhpcy5yb3dfPXVuZGVmaW5lZDt0aGlzLm92ZXJ2aWV3Q2hhcnRfPXVuZGVmaW5lZDt0aGlzLmNlbGxMaXN0ZW5lcl89dGhpcy5vbkNlbGxTdGF0ZVVwZGF0ZV8uYmluZCh0aGlzKTt0aGlzLnJvb3RMaXN0ZW5lcl89dGhpcy5vblJvb3RTdGF0ZVVwZGF0ZV8uYmluZCh0aGlzKTt9LGF0dGFjaGVkKCl7aWYodGhpcy5yb3cpe3RoaXMucm93LnJvb3RWaWV3U3RhdGUuYWRkVXBkYXRlTGlzdGVuZXIodGhpcy5yb290TGlzdGVuZXJfKTt9fSxkZXRhY2hlZCgpe3RoaXMucm93LnJvb3RWaWV3U3RhdGUucmVtb3ZlVXBkYXRlTGlzdGVuZXIodGhpcy5yb290TGlzdGVuZXJfKTt9LGdldCByb3coKXtyZXR1cm4gdGhpcy5yb3dfO30sYnVpbGQocm93KXtpZih0aGlzLnJvd18hPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcigncm93IG11c3QgYmUgc2V0IGV4YWN0bHkgb25jZS4nKTt9Ci10aGlzLnJvd189cm93O3RoaXMucm93LnZpZXdTdGF0ZS5hZGRVcGRhdGVMaXN0ZW5lcih0aGlzLm9uUm93U3RhdGVVcGRhdGVfLmJpbmQodGhpcykpO3RoaXMuY29uc3RyYWluV2lkdGg9dGhpcy5yb3cucm9vdFZpZXdTdGF0ZS5jb25zdHJhaW5OYW1lQ29sdW1uO2lmKHRoaXMuaXNBdHRhY2hlZCl7dGhpcy5yb3cucm9vdFZpZXdTdGF0ZS5hZGRVcGRhdGVMaXN0ZW5lcih0aGlzLnJvb3RMaXN0ZW5lcl8pO30KLWZvcihjb25zdCBjZWxsU3RhdGUgb2YgdGhpcy5yb3cudmlld1N0YXRlLmNlbGxzLnZhbHVlcygpKXtjZWxsU3RhdGUuYWRkVXBkYXRlTGlzdGVuZXIodGhpcy5jZWxsTGlzdGVuZXJfKTt9Ci1Qb2x5bWVyLmRvbSh0aGlzLiQubmFtZSkudGV4dENvbnRlbnQ9dGhpcy5yb3cubmFtZTt0aGlzLnRpdGxlPXRoaXMucm93Lm5hbWU7aWYodGhpcy5yb3cuZGVzY3JpcHRpb24pe3RoaXMudGl0bGUrPSdcbicrdGhpcy5yb3cuZGVzY3JpcHRpb247fQotaWYodGhpcy5yb3cub3ZlcnZpZXdEYXRhUmFuZ2UuaXNFbXB0eXx8dGhpcy5yb3cub3ZlcnZpZXdEYXRhUmFuZ2UubWluPT09dGhpcy5yb3cub3ZlcnZpZXdEYXRhUmFuZ2UubWF4KXt0aGlzLiQuc2hvd19vdmVydmlldy5zdHlsZS5kaXNwbGF5PSdub25lJzt9Ci1sZXQgaGlzdG9ncmFtQ291bnQ9MDtmb3IoY29uc3QgY2VsbCBvZiB0aGlzLnJvdy5jb2x1bW5zLnZhbHVlcygpKXtpZihjZWxsIGluc3RhbmNlb2YgdHIudi5IaXN0b2dyYW0mJmNlbGwubnVtVmFsdWVzPjApeysraGlzdG9ncmFtQ291bnQ7fX0KLWlmKGhpc3RvZ3JhbUNvdW50PD0xKXt0aGlzLiQub3Blbl9oaXN0b2dyYW1zLnN0eWxlLmRpc3BsYXk9J25vbmUnO319LHNldCBjb25zdHJhaW5XaWR0aChjb25zdHJhaW4pe3RoaXMuJC5uYW1lLnN0eWxlLm1heFdpZHRoPWNvbnN0cmFpbj8odGhpcy5uYW1lV2lkdGhQeCsncHgnKTonbm9uZSc7fSxnZXQgbmFtZVdpZHRoUHgoKXtyZXR1cm4gTkFNRV9DT0xVTU5fV0lEVEhfUFgtKDE2KnRoaXMucm93LmRlcHRoKTt9LGdldCBpc092ZXJmbG93aW5nKCl7cmV0dXJuIHRoaXMuJC5uYW1lLnN0eWxlLm1heFdpZHRoIT09J25vbmUnJiZ0aGlzLiQubmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD09PXRoaXMubmFtZVdpZHRoUHg7fSxnZXQgaXNPdmVydmlld2VkKCl7cmV0dXJuIHRoaXMuJC5vdmVydmlld19jb250YWluZXIuc3R5bGUuZGlzcGxheT09PSdibG9jayc7fSxzZXQgaXNPdmVydmlld2VkKGlzT3ZlcnZpZXdlZCl7aWYoaXNPdmVydmlld2VkPT09dGhpcy5pc092ZXJ2aWV3ZWQpcmV0dXJuO2lmKGlzT3ZlcnZpZXdlZCl7dGhpcy5zaG93T3ZlcnZpZXdfKCk7fWVsc2V7dGhpcy5oaWRlT3ZlcnZpZXdfKCk7fX0saGlkZU92ZXJ2aWV3XyhvcHRfZXZlbnQpe3RoaXMuJC5vdmVydmlld19jb250YWluZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLmhpZGVfb3ZlcnZpZXcuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnNob3dfb3ZlcnZpZXcuc3R5bGUuZGlzcGxheT0nYmxvY2snO2lmKG9wdF9ldmVudCE9PXVuZGVmaW5lZCl7b3B0X2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3RyLmIuVGltaW5nLmluc3RhbnQoJ2hpc3RvZ3JhbS1zZXQtdGFibGUtbmFtZS1jZWxsJywnaGlkZU92ZXJ2aWV3Jyk7dGhpcy5yb3cudmlld1N0YXRlLmlzT3ZlcnZpZXdlZD10aGlzLmlzT3ZlcnZpZXdlZDt9fSxzaG93T3ZlcnZpZXdfKG9wdF9ldmVudCl7aWYob3B0X2V2ZW50IT09dW5kZWZpbmVkKXtvcHRfZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZS1uYW1lLWNlbGwnLCdzaG93T3ZlcnZpZXcnKTt0aGlzLnJvdy52aWV3U3RhdGUuaXNPdmVydmlld2VkPXRydWU7fQotdGhpcy4kLm92ZXJ2aWV3X2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSdibG9jayc7dGhpcy4kLmhpZGVfb3ZlcnZpZXcuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC5zaG93X292ZXJ2aWV3LnN0eWxlLmRpc3BsYXk9J25vbmUnO2lmKHRoaXMub3ZlcnZpZXdDaGFydF89PT11bmRlZmluZWQpe2NvbnN0IGRpc3BsYXlTdGF0aXN0aWNOYW1lPXRoaXMucm93LnJvb3RWaWV3U3RhdGUuZGlzcGxheVN0YXRpc3RpY05hbWU7Y29uc3QgZGF0YT1bXTtsZXQgdW5pdDtmb3IoY29uc3RbZGlzcGxheUxhYmVsLGhpc3Rdb2YgdGhpcy5yb3cuc29ydGVkQ29sdW1ucygpKXtpZighKGhpc3QgaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbSkpY29udGludWU7aWYodW5pdD09PXVuZGVmaW5lZCl7dW5pdD1oaXN0LnVuaXQ7fWVsc2UgaWYodW5pdCE9PWhpc3QudW5pdCl7ZGF0YS5zcGxpY2UoMCk7YnJlYWs7fQotY29uc3Qgc3RhdE5hbWU9aGlzdC5nZXRBdmFpbGFibGVTdGF0aXN0aWNOYW1lKGRpc3BsYXlTdGF0aXN0aWNOYW1lKTtjb25zdCBzdGF0U2NhbGFyPWhpc3QuZ2V0U3RhdGlzdGljU2NhbGFyKHN0YXROYW1lKTtpZihzdGF0U2NhbGFyIT09dW5kZWZpbmVkKXtkYXRhLnB1c2goe3g6ZGlzcGxheUxhYmVsLHk6c3RhdFNjYWxhci52YWx1ZSx9KTt9fQotaWYoZGF0YS5sZW5ndGg8Mil7cmV0dXJuO30KLXRoaXMub3ZlcnZpZXdDaGFydF89bmV3IHRyLnVpLmIuTmFtZUxpbmVDaGFydCgpO3RoaXMuJC5vdmVydmlld19jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5vdmVydmlld0NoYXJ0Xyk7dGhpcy5vdmVydmlld0NoYXJ0Xy5kaXNwbGF5WEluSG92ZXI9dHJ1ZTt0aGlzLm92ZXJ2aWV3Q2hhcnRfLmhpZGVMZWdlbmQ9dHJ1ZTt0aGlzLm92ZXJ2aWV3Q2hhcnRfLnVuaXQ9dW5pdDt0aGlzLm92ZXJ2aWV3Q2hhcnRfLm92ZXJyaWRlRGF0YVJhbmdlPXRoaXMucm93Lm92ZXJ2aWV3RGF0YVJhbmdlO3RoaXMub3ZlcnZpZXdDaGFydF8uZGF0YT1kYXRhO319LG9wZW5IaXN0b2dyYW1zXyhldmVudCl7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZS1uYW1lLWNlbGwnLCdvcGVuSGlzdG9ncmFtcycpO2Zvcihjb25zdCBjZWxsIG9mIHRoaXMucm93LmNlbGxzLnZhbHVlcygpKXtjZWxsLmlzSGlzdG9ncmFtT3Blbj10cnVlO30KLXRoaXMuJC5jbG9zZV9oaXN0b2dyYW1zLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLiQub3Blbl9oaXN0b2dyYW1zLnN0eWxlLmRpc3BsYXk9J25vbmUnO30sY2xvc2VIaXN0b2dyYW1zXyhldmVudCl7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZS1uYW1lLWNlbGwnLCdjbG9zZUhpc3RvZ3JhbXMnKTtmb3IoY29uc3QgY2VsbCBvZiB0aGlzLnJvdy5jZWxscy52YWx1ZXMoKSl7Y2VsbC5pc0hpc3RvZ3JhbU9wZW49ZmFsc2U7fQotdGhpcy4kLm9wZW5faGlzdG9ncmFtcy5zdHlsZS5kaXNwbGF5PSdibG9jayc7dGhpcy4kLmNsb3NlX2hpc3RvZ3JhbXMuc3R5bGUuZGlzcGxheT0nbm9uZSc7fSxvblJvb3RTdGF0ZVVwZGF0ZV8oZXZlbnQpe2lmKGV2ZW50LmRlbHRhLmNvbnN0cmFpbk5hbWVDb2x1bW4pe3RoaXMuY29uc3RyYWluV2lkdGg9dGhpcy5yb3cucm9vdFZpZXdTdGF0ZS5jb25zdHJhaW5OYW1lQ29sdW1uO30KLWlmKHRoaXMucm93LnZpZXdTdGF0ZS5pc092ZXJ2aWV3ZWQmJmV2ZW50LmRlbHRhLmRpc3BsYXlTdGF0aXN0aWNOYW1lKXt0aGlzLnJvdy5yZXNldE92ZXJ2aWV3RGF0YVJhbmdlKCk7aWYodGhpcy5vdmVydmlld0NoYXJ0XyE9PXVuZGVmaW5lZCl7dGhpcy4kLm92ZXJ2aWV3X2NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm92ZXJ2aWV3Q2hhcnRfKTt0aGlzLm92ZXJ2aWV3Q2hhcnRfPXVuZGVmaW5lZDt9Ci10aGlzLnNob3dPdmVydmlld18oKTt9fSxvblJvd1N0YXRlVXBkYXRlXyhldmVudCl7aWYoZXZlbnQuZGVsdGEuaXNPdmVydmlld2VkKXt0aGlzLmlzT3ZlcnZpZXdlZD10aGlzLnJvdy52aWV3U3RhdGUuaXNPdmVydmlld2VkO319LG9uQ2VsbFN0YXRlVXBkYXRlXyhldmVudCl7aWYoIWV2ZW50LmRlbHRhLmlzT3BlbilyZXR1cm47bGV0IGNlbGxDb3VudD0wO2xldCBvcGVuQ2VsbENvdW50PTA7Zm9yKGNvbnN0IGNlbGwgb2YgdGhpcy5yb3cuY2VsbHMudmFsdWVzKCkpe2lmKCEoY2VsbC5oaXN0b2dyYW0gaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbSl8fChjZWxsLmhpc3RvZ3JhbS5udW1WYWx1ZXM9PT0wKSl7Y29udGludWU7fQotKytjZWxsQ291bnQ7aWYoY2VsbC5pc0hpc3RvZ3JhbU9wZW4pKytvcGVuQ2VsbENvdW50O30KLWlmKGNlbGxDb3VudDw9MSlyZXR1cm47Y29uc3QgbW9zdGx5T3Blbj1vcGVuQ2VsbENvdW50PihjZWxsQ291bnQvMik7dGhpcy4kLm9wZW5faGlzdG9ncmFtcy5zdHlsZS5kaXNwbGF5PW1vc3RseU9wZW4/J25vbmUnOidibG9jayc7dGhpcy4kLmNsb3NlX2hpc3RvZ3JhbXMuc3R5bGUuZGlzcGxheT1tb3N0bHlPcGVuPydibG9jayc6J25vbmUnO319KTtyZXR1cm57TkFNRV9DT0xVTU5fV0lEVEhfUFgsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7Y2xhc3MgSGlzdG9ncmFtU2V0VGFibGVSb3d7Y29uc3RydWN0b3IoaGllcmFyY2h5LGJhc2VUYWJsZSxyb290Vmlld1N0YXRlKXt0aGlzLmhpZXJhcmNoeV89aGllcmFyY2h5O3RoaXMuYmFzZVRhYmxlXz1iYXNlVGFibGU7dGhpcy5yb290Vmlld1N0YXRlXz1yb290Vmlld1N0YXRlO3RoaXMudmlld1N0YXRlXz1uZXcgdHIudi51aS5IaXN0b2dyYW1TZXRUYWJsZVJvd1N0YXRlKCk7dGhpcy52aWV3U3RhdGVfLmFkZFVwZGF0ZUxpc3RlbmVyKHRoaXMub25WaWV3U3RhdGVVcGRhdGVfLmJpbmQodGhpcykpO3RoaXMub3ZlcnZpZXdEYXRhUmFuZ2VfPXVuZGVmaW5lZDt0aGlzLm5hbWVDZWxsXz11bmRlZmluZWQ7dGhpcy5jZWxsc189bmV3IE1hcCgpO3RoaXMuc3ViUm93c189W107Zm9yKGNvbnN0IHN1YkhpZXJhcmNoeSBvZiBoaWVyYXJjaHkuc3ViUm93cyl7Y29uc3Qgc3ViUm93PW5ldyBIaXN0b2dyYW1TZXRUYWJsZVJvdyhzdWJIaWVyYXJjaHksYmFzZVRhYmxlLHJvb3RWaWV3U3RhdGUpO3RoaXMuc3ViUm93c18ucHVzaChzdWJSb3cpO3RoaXMudmlld1N0YXRlLnN1YlJvd3Muc2V0KHN1YlJvdy5uYW1lLHN1YlJvdy52aWV3U3RhdGUpO30KLWZvcihjb25zdCBjb2x1bW5OYW1lIG9mIHRoaXMuY29sdW1ucy5rZXlzKCkpe3RoaXMudmlld1N0YXRlLmNlbGxzLnNldChjb2x1bW5OYW1lLG5ldyB0ci52LnVpLkhpc3RvZ3JhbVNldFRhYmxlQ2VsbFN0YXRlKCkpO319Ci1nZXQgbmFtZSgpe3JldHVybiB0aGlzLmhpZXJhcmNoeV8ubmFtZTt9Ci1nZXQgZGVwdGgoKXtyZXR1cm4gdGhpcy5oaWVyYXJjaHlfLmRlcHRoO30KLWdldCBkZXNjcmlwdGlvbigpe3JldHVybiB0aGlzLmhpZXJhcmNoeV8uZGVzY3JpcHRpb247fQotZ2V0IGNvbHVtbnMoKXtyZXR1cm4gdGhpcy5oaWVyYXJjaHlfLmNvbHVtbnM7fSpzb3J0ZWRDb2x1bW5zKCl7Zm9yKGNvbnN0IGNvbCBvZiB0aGlzLmJhc2VUYWJsZV8udGFibGVDb2x1bW5zKXt5aWVsZFtjb2wuZGlzcGxheUxhYmVsLHRoaXMuaGllcmFyY2h5Xy5jb2x1bW5zLmdldChjb2wuZGlzcGxheUxhYmVsKSxdO319Ci1nZXQgb3ZlcnZpZXdEYXRhUmFuZ2UoKXtpZih0aGlzLm92ZXJ2aWV3RGF0YVJhbmdlXz09PXVuZGVmaW5lZCl7dGhpcy5vdmVydmlld0RhdGFSYW5nZV89bmV3IHRyLmIubWF0aC5SYW5nZSgpO2NvbnN0IGRpc3BsYXlTdGF0aXN0aWNOYW1lPXRoaXMucm9vdFZpZXdTdGF0ZS5kaXNwbGF5U3RhdGlzdGljTmFtZTtjb25zdCByZWZlcmVuY2VEaXNwbGF5TGFiZWw9dGhpcy5yb290Vmlld1N0YXRlLnJlZmVyZW5jZURpc3BsYXlMYWJlbDtmb3IoY29uc3RbZGlzcGxheUxhYmVsLGhpc3Rdb2YgdGhpcy5jb2x1bW5zKXtpZihoaXN0IGluc3RhbmNlb2YgdHIudi5IaXN0b2dyYW0pe2NvbnN0IHN0YXROYW1lPWhpc3QuZ2V0QXZhaWxhYmxlU3RhdGlzdGljTmFtZShkaXNwbGF5U3RhdGlzdGljTmFtZSk7Y29uc3Qgc3RhdFNjYWxhcj1oaXN0LmdldFN0YXRpc3RpY1NjYWxhcihzdGF0TmFtZSk7aWYoc3RhdFNjYWxhciE9PXVuZGVmaW5lZCl7dGhpcy5vdmVydmlld0RhdGFSYW5nZV8uYWRkVmFsdWUoc3RhdFNjYWxhci52YWx1ZSk7fX0KLWZvcihjb25zdCBzdWJSb3cgb2YgdGhpcy5zdWJSb3dzKXtjb25zdCBzdWJIaXN0PXN1YlJvdy5jb2x1bW5zLmdldChkaXNwbGF5TGFiZWwpO2lmKCEoc3ViSGlzdCBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKSljb250aW51ZTtjb25zdCByZWZIaXN0PXN1YlJvdy5jb2x1bW5zLmdldChyZWZlcmVuY2VEaXNwbGF5TGFiZWwpO2NvbnN0IHN0YXROYW1lPXN1Ykhpc3QuZ2V0QXZhaWxhYmxlU3RhdGlzdGljTmFtZShkaXNwbGF5U3RhdGlzdGljTmFtZSxyZWZIaXN0KTtjb25zdCBzdGF0U2NhbGFyPXN1Ykhpc3QuZ2V0U3RhdGlzdGljU2NhbGFyKHN0YXROYW1lLHJlZkhpc3QpO2lmKHN0YXRTY2FsYXIhPT11bmRlZmluZWQpe3RoaXMub3ZlcnZpZXdEYXRhUmFuZ2VfLmFkZFZhbHVlKHN0YXRTY2FsYXIudmFsdWUpO319fX0KLXJldHVybiB0aGlzLm92ZXJ2aWV3RGF0YVJhbmdlXzt9Ci1yZXNldE92ZXJ2aWV3RGF0YVJhbmdlKCl7dGhpcy5vdmVydmlld0RhdGFSYW5nZV89dW5kZWZpbmVkO30KLWdldCByb290Vmlld1N0YXRlKCl7cmV0dXJuIHRoaXMucm9vdFZpZXdTdGF0ZV87fQotZ2V0IGNlbGxzKCl7cmV0dXJuIHRoaXMuY2VsbHNfO30KLWdldCBzdWJSb3dzKCl7cmV0dXJuIHRoaXMuc3ViUm93c187fQotZ2V0IHZpZXdTdGF0ZSgpe3JldHVybiB0aGlzLnZpZXdTdGF0ZV87fSp3YWxrKCl7eWllbGQgdGhpcztmb3IoY29uc3Qgcm93IG9mIHRoaXMuc3ViUm93cyl5aWVsZCpyb3cud2FsaygpO30KLXN0YXRpYyp3YWxrQWxsKHJvb3RSb3dzKXtmb3IoY29uc3Qgcm9vdFJvdyBvZiByb290Um93cyl5aWVsZCpyb290Um93LndhbGsoKTt9Ci1nZXQgbmFtZUNlbGwoKXtpZih0aGlzLm5hbWVDZWxsXz09PXVuZGVmaW5lZCl7dGhpcy5uYW1lQ2VsbF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdi11aS1oaXN0b2dyYW0tc2V0LXRhYmxlLW5hbWUtY2VsbCcpO3RoaXMubmFtZUNlbGxfLmJ1aWxkKHRoaXMpO30KLXJldHVybiB0aGlzLm5hbWVDZWxsXzt9Ci1nZXRDZWxsKGNvbHVtbk5hbWUpe2lmKHRoaXMuY2VsbHMuaGFzKGNvbHVtbk5hbWUpKXJldHVybiB0aGlzLmNlbGxzLmdldChjb2x1bW5OYW1lKTtjb25zdCBjZWxsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXYtdWktaGlzdG9ncmFtLXNldC10YWJsZS1jZWxsJyk7Y2VsbC5idWlsZCh0aGlzLGNvbHVtbk5hbWUsdGhpcy52aWV3U3RhdGUuY2VsbHMuZ2V0KGNvbHVtbk5hbWUpKTt0aGlzLmNlbGxzLnNldChjb2x1bW5OYW1lLGNlbGwpO3JldHVybiBjZWxsO30KLWNvbXBhcmVOYW1lcyhvdGhlcil7cmV0dXJuIHRoaXMubmFtZS5sb2NhbGVDb21wYXJlKG90aGVyLm5hbWUpO30KLWNvbXBhcmVDZWxscyhvdGhlcixkaXNwbGF5TGFiZWwpe2NvbnN0IGNlbGxBPXRoaXMuY29sdW1ucy5nZXQoZGlzcGxheUxhYmVsKTtjb25zdCBjZWxsQj1vdGhlci5jb2x1bW5zLmdldChkaXNwbGF5TGFiZWwpO2lmKCEoY2VsbEEgaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbSl8fCEoY2VsbEIgaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbSkpe3JldHVybiB1bmRlZmluZWQ7fQotbGV0IHJlZmVyZW5jZUNlbGxBO2xldCByZWZlcmVuY2VDZWxsQjtjb25zdCByZWZlcmVuY2VEaXNwbGF5TGFiZWw9dGhpcy5yb290Vmlld1N0YXRlLnJlZmVyZW5jZURpc3BsYXlMYWJlbDtpZihyZWZlcmVuY2VEaXNwbGF5TGFiZWwmJnJlZmVyZW5jZURpc3BsYXlMYWJlbCE9PWRpc3BsYXlMYWJlbCl7cmVmZXJlbmNlQ2VsbEE9dGhpcy5jb2x1bW5zLmdldChyZWZlcmVuY2VEaXNwbGF5TGFiZWwpO3JlZmVyZW5jZUNlbGxCPW90aGVyLmNvbHVtbnMuZ2V0KHJlZmVyZW5jZURpc3BsYXlMYWJlbCk7fQotY29uc3Qgc3RhdGlzdGljQT1jZWxsQS5nZXRBdmFpbGFibGVTdGF0aXN0aWNOYW1lKHRoaXMucm9vdFZpZXdTdGF0ZS5kaXNwbGF5U3RhdGlzdGljTmFtZSxyZWZlcmVuY2VDZWxsQSk7Y29uc3Qgc3RhdGlzdGljQj1jZWxsQi5nZXRBdmFpbGFibGVTdGF0aXN0aWNOYW1lKHRoaXMucm9vdFZpZXdTdGF0ZS5kaXNwbGF5U3RhdGlzdGljTmFtZSxyZWZlcmVuY2VDZWxsQik7Y29uc3Qgc2NhbGFyQT1jZWxsQS5nZXRTdGF0aXN0aWNTY2FsYXIoc3RhdGlzdGljQSxyZWZlcmVuY2VDZWxsQSk7Y29uc3Qgc2NhbGFyQj1jZWxsQi5nZXRTdGF0aXN0aWNTY2FsYXIoc3RhdGlzdGljQixyZWZlcmVuY2VDZWxsQik7Y29uc3QgdmFsdWVBPXNjYWxhckE/c2NhbGFyQS52YWx1ZTp1bmRlZmluZWQ7Y29uc3QgdmFsdWVCPXNjYWxhckI/c2NhbGFyQi52YWx1ZTp1bmRlZmluZWQ7cmV0dXJuIHZhbHVlQS12YWx1ZUI7fQotb25WaWV3U3RhdGVVcGRhdGVfKGV2ZW50KXtpZihldmVudC5kZWx0YS5pc0V4cGFuZGVkKXt0aGlzLmJhc2VUYWJsZV8uc2V0RXhwYW5kZWRGb3JUYWJsZVJvdyh0aGlzLHRoaXMudmlld1N0YXRlLmlzRXhwYW5kZWQpO30KLWlmKGV2ZW50LmRlbHRhLnN1YlJvd3Mpe3Rocm93IG5ldyBFcnJvcignSGlzdG9ncmFtU2V0VGFibGVSb3cuc3ViUm93cyBtdXN0IG5vdCBiZSByZWFzc2lnbmVkLicpO30KLWlmKGV2ZW50LmRlbHRhLmNlbGxzKXtmb3IoY29uc3RbZGlzcGxheUxhYmVsLGNlbGxdb2YgdGhpcy5jZWxscyl7aWYoY2VsbC52aWV3U3RhdGUhPT10aGlzLnZpZXdTdGF0ZS5jZWxscy5nZXQoZGlzcGxheUxhYmVsKSl7dGhyb3cgbmV3IEVycm9yKCdPbmx5IEhpc3RvZ3JhbVNldFRhYmxlUm93IG1heSB1cGRhdGUgY2VsbHMnKTt9fX19Ci1hc3luYyByZXN0b3JlU3RhdGUodnMpe2F3YWl0IHRoaXMudmlld1N0YXRlLnVwZGF0ZSh7aXNFeHBhbmRlZDp2cy5pc0V4cGFuZGVkLGlzT3ZlcnZpZXdlZDp2cy5pc092ZXJ2aWV3ZWQsfSk7Zm9yKGNvbnN0W2Rpc3BsYXlMYWJlbCxjZWxsXW9mIHRoaXMuY2VsbHMpe2NvbnN0IHByZXZpb3VzU3RhdGU9dnMuY2VsbHMuZ2V0KGRpc3BsYXlMYWJlbCk7aWYoIXByZXZpb3VzU3RhdGUpY29udGludWU7YXdhaXQgY2VsbC52aWV3U3RhdGUudXBkYXRlRnJvbVZpZXdTdGF0ZShwcmV2aW91c1N0YXRlKTt9Ci1mb3IoY29uc3Qgcm93IG9mIHRoaXMuc3ViUm93cyl7Y29uc3QgcHJldmlvdXNTdGF0ZT12cy5zdWJSb3dzLmdldChyb3cubmFtZSk7aWYoIXByZXZpb3VzU3RhdGUpY29udGludWU7YXdhaXQgcm93LnJlc3RvcmVTdGF0ZShwcmV2aW91c1N0YXRlKTt9fQotc29ydFN1YlJvd3MoKXtjb25zdCBzb3J0Q29sdW1uPXRoaXMuYmFzZVRhYmxlXy50YWJsZUNvbHVtbnNbdGhpcy5yb290Vmlld1N0YXRlXy5zb3J0Q29sdW1uSW5kZXhdO2lmKHNvcnRDb2x1bW49PT11bmRlZmluZWQpcmV0dXJuO3RoaXMuc3ViUm93c18uc29ydChzb3J0Q29sdW1uLmNtcCk7aWYodGhpcy5yb290Vmlld1N0YXRlXy5zb3J0RGVzY2VuZGluZyl7dGhpcy5zdWJSb3dzXy5yZXZlcnNlKCk7fX19Ci1yZXR1cm57SGlzdG9ncmFtU2V0VGFibGVSb3csfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7Y29uc3QgTUlETElORV9IT1JJWk9OVEFMX0VMTElQU0lTPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyMmVmKTtmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyKXtyZXR1cm4gc3RyLnJlcGxhY2UoL1tcLVxbXF1cL1x7XH1cKFwpXCpcK1w/XC5cXFxeXCRcfF0vZywnXFwkJicpO30KLVBvbHltZXIoe2lzOid0ci12LXVpLWhpc3RvZ3JhbS1zZXQtdGFibGUnLGNyZWF0ZWQoKXt0aGlzLnZpZXdTdGF0ZV89dW5kZWZpbmVkO3RoaXMucHJvZ3Jlc3NfPSgpPT5Qcm9taXNlLnJlc29sdmUoKTt0aGlzLm5hbWVDb2x1bW5UaXRsZV89dW5kZWZpbmVkO3RoaXMuZGlzcGxheUxhYmVsc189W107dGhpcy5oaXN0b2dyYW1zXz11bmRlZmluZWQ7dGhpcy5zb3VyY2VIaXN0b2dyYW1zXz11bmRlZmluZWQ7dGhpcy5ncm91cGVkSGlzdG9ncmFtc189dW5kZWZpbmVkO3RoaXMuaGllcmFyY2hpZXNfPXVuZGVmaW5lZDt0aGlzLnRhYmxlUm93c189dW5kZWZpbmVkO3RoaXMuc29ydENvbHVtbkNoYW5nZWRMaXN0ZW5lcl89ZT0+dGhpcy5vblNvcnRDb2x1bW5DaGFuZ2VkXyhlKTt9LHJlYWR5KCl7dGhpcy4kLnRhYmxlLnplYnJhPXRydWU7dGhpcy5hZGRFdmVudExpc3RlbmVyKCdzb3J0LWNvbHVtbi1jaGFuZ2VkJyx0aGlzLnNvcnRDb2x1bW5DaGFuZ2VkTGlzdGVuZXJfKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3JlcXVlc3RTZWxlY3Rpb25DaGFuZ2UnLHRoaXMub25SZXF1ZXN0U2VsZWN0aW9uQ2hhbmdlXy5iaW5kKHRoaXMpKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3Jvdy1leHBhbmRlZC1jaGFuZ2VkJyx0aGlzLm9uUm93RXhwYW5kZWRDaGFuZ2VkXy5iaW5kKHRoaXMpKTt9LGdldCB2aWV3U3RhdGUoKXtyZXR1cm4gdGhpcy52aWV3U3RhdGVfO30sc2V0IHZpZXdTdGF0ZSh2cyl7aWYodGhpcy52aWV3U3RhdGVfKXt0aHJvdyBuZXcgRXJyb3IoJ3ZpZXdTdGF0ZSBtdXN0IGJlIHNldCBleGFjdGx5IG9uY2UuJyk7fQotdGhpcy52aWV3U3RhdGVfPXZzO3RoaXMudmlld1N0YXRlLmFkZFVwZGF0ZUxpc3RlbmVyKHRoaXMub25WaWV3U3RhdGVVcGRhdGVfLmJpbmQodGhpcykpO30sZ2V0IGhpc3RvZ3JhbXMoKXtyZXR1cm4gdGhpcy5oaXN0b2dyYW1zXzt9LGFzeW5jIGJ1aWxkKGhpc3RvZ3JhbXMsc291cmNlSGlzdG9ncmFtcyxkaXNwbGF5TGFiZWxzLG9wdF9wcm9ncmVzcyl7dGhpcy5oaXN0b2dyYW1zXz1oaXN0b2dyYW1zO3RoaXMuc291cmNlSGlzdG9ncmFtc189c291cmNlSGlzdG9ncmFtczt0aGlzLmdyb3VwZWRIaXN0b2dyYW1zXz11bmRlZmluZWQ7dGhpcy5kaXNwbGF5TGFiZWxzXz1kaXNwbGF5TGFiZWxzO2lmKG9wdF9wcm9ncmVzcyE9PXVuZGVmaW5lZCl0aGlzLnByb2dyZXNzXz1vcHRfcHJvZ3Jlc3M7aWYoaGlzdG9ncmFtcy5sZW5ndGg9PT0wKXt0aHJvdyBuZXcgRXJyb3IoJ2hpc3RvZ3JhbS1zZXQtdGFibGUgcmVxdWlyZXMgbm9uLWVtcHR5IEhpc3RvZ3JhbVNldC4nKTt9Ci1hd2FpdCB0aGlzLnByb2dyZXNzXygnQnVpbGRpbmcgY29sdW1ucy4uLicpO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t0aXRsZTp0aGlzLmJ1aWxkTmFtZUNvbHVtblRpdGxlXygpLHZhbHVlOnJvdz0+cm93Lm5hbWVDZWxsLGNtcDooYSxiKT0+YS5jb21wYXJlTmFtZXMoYiksfV0uY29uY2F0KGRpc3BsYXlMYWJlbHMubWFwKGw9PnRoaXMuYnVpbGRDb2x1bW5fKGwpKSk7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZScsJ2NvbHVtbkNvdW50Jyx0aGlzLiQudGFibGUudGFibGVDb2x1bW5zLmxlbmd0aCk7YXdhaXQgdGhpcy51cGRhdGVDb250ZW50c18oKTt0aGlzLmZpcmUoJ2Rpc3BsYXktcmVhZHknKTt0aGlzLnByb2dyZXNzXz0oKT0+UHJvbWlzZS5yZXNvbHZlKCk7dGhpcy5jaGVja05hbWVDb2x1bW5PdmVyZmxvd18odHIudi51aS5IaXN0b2dyYW1TZXRUYWJsZVJvdy53YWxrQWxsKHRoaXMuJC50YWJsZS50YWJsZVJvd3MpKTt9LGJ1aWxkTmFtZUNvbHVtblRpdGxlXygpe3RoaXMubmFtZUNvbHVtblRpdGxlXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7dGhpcy5uYW1lQ29sdW1uVGl0bGVfLnN0eWxlLmRpc3BsYXk9J2lubGluZS1mbGV4Jztjb25zdCBuYW1lRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO25hbWVFbC50ZXh0Q29udGVudD0nTmFtZSc7dGhpcy5uYW1lQ29sdW1uVGl0bGVfLmFwcGVuZENoaWxkKG5hbWVFbCk7Y29uc3QgdG9nZ2xlV2lkdGhFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7dG9nZ2xlV2lkdGhFbC5zdHlsZS5mb250V2VpZ2h0PSdib2xkJzt0b2dnbGVXaWR0aEVsLnN0eWxlLmJhY2tncm91bmQ9JyNiYmInO3RvZ2dsZVdpZHRoRWwuc3R5bGUuY29sb3I9JyMzMzMnO3RvZ2dsZVdpZHRoRWwuc3R5bGUucGFkZGluZz0nMHB4IDNweCc7dG9nZ2xlV2lkdGhFbC5zdHlsZS5tYXJnaW5SaWdodD0nOHB4Jzt0b2dnbGVXaWR0aEVsLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RvZ2dsZVdpZHRoRWwudGV4dENvbnRlbnQ9TUlETElORV9IT1JJWk9OVEFMX0VMTElQU0lTO3RvZ2dsZVdpZHRoRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMudG9nZ2xlTmFtZUNvbHVtbldpZHRoXy5iaW5kKHRoaXMpKTt0aGlzLm5hbWVDb2x1bW5UaXRsZV8uYXBwZW5kQ2hpbGQodG9nZ2xlV2lkdGhFbCk7cmV0dXJuIHRoaXMubmFtZUNvbHVtblRpdGxlXzt9LHRvZ2dsZU5hbWVDb2x1bW5XaWR0aF8ob3B0X2V2ZW50KXt0aGlzLnZpZXdTdGF0ZS51cGRhdGUoe2NvbnN0cmFpbk5hbWVDb2x1bW46IXRoaXMudmlld1N0YXRlLmNvbnN0cmFpbk5hbWVDb2x1bW4sfSk7aWYob3B0X2V2ZW50IT09dW5kZWZpbmVkKXtvcHRfZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7b3B0X2V2ZW50LnByZXZlbnREZWZhdWx0KCk7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZScsJ25hbWVDb2x1bW4nKwotKHRoaXMudmlld1N0YXRlLmNvbnN0cmFpbk5hbWVDb2x1bW4/J0NvbnN0cmFpbmVkJzonVW5jb25zdHJhaW5lZCcpKTt9fSxidWlsZENvbHVtbl8oZGlzcGxheUxhYmVsKXtjb25zdCB0aXRsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7dGl0bGUudGV4dENvbnRlbnQ9ZGlzcGxheUxhYmVsO3RpdGxlLnN0eWxlLndoaXRlU3BhY2U9J3ByZSc7cmV0dXJue2Rpc3BsYXlMYWJlbCx0aXRsZSx2YWx1ZTpyb3c9PnJvdy5nZXRDZWxsKGRpc3BsYXlMYWJlbCksY21wOihyb3dBLHJvd0IpPT5yb3dBLmNvbXBhcmVDZWxscyhyb3dCLGRpc3BsYXlMYWJlbCksfTt9LGFzeW5jIHVwZGF0ZUNvbnRlbnRzXygpe2lmKHRoaXMuZ3JvdXBlZEhpc3RvZ3JhbXNfPT09dW5kZWZpbmVkKXthd2FpdCB0aGlzLnByb2dyZXNzXygnR3JvdXBpbmcgSGlzdG9ncmFtcy4uLicpO3RoaXMuZ3JvdXBIaXN0b2dyYW1zXygpO30KLWlmKHRoaXMuaGllcmFyY2hpZXNfPT09dW5kZWZpbmVkKXthd2FpdCB0aGlzLnByb2dyZXNzXygnTWVyZ2luZyBIaXN0b2dyYW1zLi4uJyk7dGhpcy5oaWVyYXJjaGllc189dHIudi5IaXN0b2dyYW1TZXRIaWVyYXJjaHkuYnVpbGQodGhpcy5ncm91cGVkSGlzdG9ncmFtc18pO3RoaXMudGFibGVSb3dzXz11bmRlZmluZWQ7fQotY29uc3QgdGFibGVSb3dzRGlydHk9dGhpcy50YWJsZVJvd3NfPT09dW5kZWZpbmVkO2NvbnN0IHByZXZpb3VzUm93U3RhdGVzPXRoaXMudmlld1N0YXRlLnRhYmxlUm93U3RhdGVzO2lmKHRhYmxlUm93c0RpcnR5KXthd2FpdCB0aGlzLnByb2dyZXNzXygnRmlsdGVyaW5nIHJvd3MuLi4nKTtsZXQgZmlsdGVyZWRIaXN0b2dyYW1zPXRoaXMudmlld1N0YXRlLnNob3dBbGw/dGhpcy5oaXN0b2dyYW1zOnRoaXMuc291cmNlSGlzdG9ncmFtc187aWYodGhpcy52aWV3U3RhdGUuc2VhcmNoUXVlcnkpe2xldCBxdWVyeT11bmRlZmluZWQ7dHJ5e3F1ZXJ5PW5ldyBSZWdFeHAodGhpcy52aWV3U3RhdGUuc2VhcmNoUXVlcnkpO31jYXRjaChlKXt9Ci1pZihxdWVyeSE9PXVuZGVmaW5lZCl7ZmlsdGVyZWRIaXN0b2dyYW1zPW5ldyB0ci52Lkhpc3RvZ3JhbVNldChbLi4uZmlsdGVyZWRIaXN0b2dyYW1zXS5maWx0ZXIoaGlzdD0+aGlzdC5uYW1lLm1hdGNoKHF1ZXJ5KSkpO2lmKGZpbHRlcmVkSGlzdG9ncmFtcy5sZW5ndGg9PT0wJiYhdGhpcy52aWV3U3RhdGUuc2hvd0FsbCl7YXdhaXQgdGhpcy52aWV3U3RhdGUudXBkYXRlKHtzaG93QWxsOnRydWV9KTtyZXR1cm47fX19Ci1jb25zdCBmaWx0ZXJlZEhpZXJhcmNoaWVzPXRyLnYuSGlzdG9ncmFtU2V0SGllcmFyY2h5LmZpbHRlcih0aGlzLmhpZXJhcmNoaWVzXyxmaWx0ZXJlZEhpc3RvZ3JhbXMpO3RoaXMudGFibGVSb3dzXz1maWx0ZXJlZEhpZXJhcmNoaWVzLm1hcChoaWVyYXJjaHk9Pm5ldyB0ci52LnVpLkhpc3RvZ3JhbVNldFRhYmxlUm93KGhpZXJhcmNoeSx0aGlzLiQudGFibGUsdGhpcy52aWV3U3RhdGUpKTt0ci5iLlRpbWluZy5pbnN0YW50KCdoaXN0b2dyYW0tc2V0LXRhYmxlJywncm9vdFJvd0NvdW50Jyx0aGlzLnRhYmxlUm93c18ubGVuZ3RoKTtjb25zdCBuYW1lc1RvUm93U3RhdGVzPW5ldyBNYXAoKTtmb3IoY29uc3Qgcm93IG9mIHRoaXMudGFibGVSb3dzXyl7bmFtZXNUb1Jvd1N0YXRlcy5zZXQocm93Lm5hbWUscm93LnZpZXdTdGF0ZSk7fQotYXdhaXQgdGhpcy52aWV3U3RhdGUudXBkYXRlKHt0YWJsZVJvd1N0YXRlczpuYW1lc1RvUm93U3RhdGVzfSk7fQotYXdhaXQgdGhpcy5wcm9ncmVzc18oJ0NvbmZpZ3VyaW5nIHRhYmxlLi4uJyk7dGhpcy5uYW1lQ29sdW1uVGl0bGVfLmNoaWxkcmVuWzFdLnN0eWxlLmZpbHRlcj10aGlzLnZpZXdTdGF0ZS5jb25zdHJhaW5OYW1lQ29sdW1uPydpbnZlcnQoMTAwJSknOicnO2NvbnN0IHJlZmVyZW5jZURpc3BsYXlMYWJlbEluZGV4PXRoaXMuZGlzcGxheUxhYmVsc18uaW5kZXhPZih0aGlzLnZpZXdTdGF0ZS5yZWZlcmVuY2VEaXNwbGF5TGFiZWwpO3RoaXMuJC50YWJsZS5zZWxlY3RlZFRhYmxlQ29sdW1uSW5kZXg9KHJlZmVyZW5jZURpc3BsYXlMYWJlbEluZGV4PDApP3VuZGVmaW5lZDooMStyZWZlcmVuY2VEaXNwbGF5TGFiZWxJbmRleCk7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdzb3J0LWNvbHVtbi1jaGFuZ2VkJyx0aGlzLnNvcnRDb2x1bW5DaGFuZ2VkTGlzdGVuZXJfKTt0aGlzLiQudGFibGUuc29ydENvbHVtbkluZGV4PXRoaXMudmlld1N0YXRlLnNvcnRDb2x1bW5JbmRleDt0aGlzLiQudGFibGUuc29ydERlc2NlbmRpbmc9dGhpcy52aWV3U3RhdGUuc29ydERlc2NlbmRpbmc7dGhpcy5hZGRFdmVudExpc3RlbmVyKCdzb3J0LWNvbHVtbi1jaGFuZ2VkJyx0aGlzLnNvcnRDb2x1bW5DaGFuZ2VkTGlzdGVuZXJfKTtpZih0YWJsZVJvd3NEaXJ0eSl7YXdhaXQgdGhpcy5wcm9ncmVzc18oJ0J1aWxkaW5nIERPTS4uLicpO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9dGhpcy50YWJsZVJvd3NfO2Zvcihjb25zdCByb3cgb2YgdGhpcy50YWJsZVJvd3NfKXtjb25zdCBwcmV2aW91c1N0YXRlPXByZXZpb3VzUm93U3RhdGVzLmdldChyb3cubmFtZSk7aWYoIXByZXZpb3VzU3RhdGUpY29udGludWU7YXdhaXQgcm93LnJlc3RvcmVTdGF0ZShwcmV2aW91c1N0YXRlKTt9fQotdGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9LGFzeW5jIG9uUm93RXhwYW5kZWRDaGFuZ2VkXyhldmVudCl7ZXZlbnQucm93LnZpZXdTdGF0ZS5pc0V4cGFuZGVkPXRoaXMuJC50YWJsZS5nZXRFeHBhbmRlZEZvclRhYmxlUm93KGV2ZW50LnJvdyk7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZScsJ3JvdycrKGV2ZW50LnJvdy52aWV3U3RhdGUuaXNFeHBhbmRlZD8nRXhwYW5kZWQnOidDb2xsYXBzZWQnKSk7aWYodGhpcy5uYW1lQ29sdW1uVGl0bGVfLmNoaWxkcmVuWzFdLnN0eWxlLmRpc3BsYXk9PT0nYmxvY2snKXJldHVybjthd2FpdCB0ci5iLmFuaW1hdGlvbkZyYW1lKCk7dGhpcy5jaGVja05hbWVDb2x1bW5PdmVyZmxvd18oZXZlbnQucm93LnN1YlJvd3MpO30sY2hlY2tOYW1lQ29sdW1uT3ZlcmZsb3dfKHJvd3Mpe2Zvcihjb25zdCByb3cgb2Ygcm93cyl7aWYoIXJvdy5uYW1lQ2VsbC5pc092ZXJmbG93aW5nKWNvbnRpbnVlO2NvbnN0W25hbWVTcGFuLGRvdHNdPXRoaXMubmFtZUNvbHVtblRpdGxlXy5jaGlsZHJlbjtkb3RzLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztjb25zdCBsYWJlbFdpZHRoUHg9dHIudi51aS5OQU1FX0NPTFVNTl9XSURUSF9QWC0KLWRvdHMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7bmFtZVNwYW4uc3R5bGUud2lkdGg9bGFiZWxXaWR0aFB4KydweCc7cmV0dXJuO319LGdyb3VwSGlzdG9ncmFtc18oKXtjb25zdCBncm91cGluZ3M9dGhpcy52aWV3U3RhdGUuZ3JvdXBpbmdzLnNsaWNlKCk7Z3JvdXBpbmdzLnB1c2godHIudi5IaXN0b2dyYW1Hcm91cGluZy5ESVNQTEFZX0xBQkVMKTtmdW5jdGlvbiBjYW5Ta2lwR3JvdXBpbmcoZ3JvdXBpbmcsZ3JvdXBlZEhpc3RvZ3JhbXMpe2lmKGdyb3VwZWRIaXN0b2dyYW1zLnNpemU+MSlyZXR1cm4gZmFsc2U7aWYoZ3JvdXBpbmcua2V5PT09Z3JvdXBpbmdzWzBdLmtleSlyZXR1cm4gZmFsc2U7aWYoZ3JvdXBpbmcua2V5PT09dHIudi5IaXN0b2dyYW1Hcm91cGluZy5ESVNQTEFZX0xBQkVMLmtleSl7cmV0dXJuIGZhbHNlO30KLXJldHVybiB0cnVlO30KLXRoaXMuZ3JvdXBlZEhpc3RvZ3JhbXNfPXRoaXMuaGlzdG9ncmFtcy5ncm91cEhpc3RvZ3JhbXNSZWN1cnNpdmVseShncm91cGluZ3MsY2FuU2tpcEdyb3VwaW5nKTt0aGlzLmhpZXJhcmNoaWVzXz11bmRlZmluZWQ7fSxhc3luYyBvblZpZXdTdGF0ZVVwZGF0ZV8oZXZlbnQpe2lmKHRoaXMuaGlzdG9ncmFtc189PT11bmRlZmluZWQpcmV0dXJuO2lmKGV2ZW50LmRlbHRhLmdyb3VwaW5ncyE9PXVuZGVmaW5lZCl7dGhpcy5ncm91cGVkSGlzdG9ncmFtc189dW5kZWZpbmVkO30KLWlmKGV2ZW50LmRlbHRhLnNlYXJjaFF1ZXJ5IT09dW5kZWZpbmVkfHxldmVudC5kZWx0YS5zaG93QWxsIT09dW5kZWZpbmVkKXt0aGlzLnRhYmxlUm93c189dW5kZWZpbmVkO30KLWlmKGV2ZW50LmRlbHRhLmRpc3BsYXlTdGF0aXN0aWMhPT11bmRlZmluZWQmJnRoaXMuJC50YWJsZS5zb3J0Q29sdW1uSW5kZXg+MCl7dGhpcy4kLnRhYmxlLnNvcnRDb2x1bW5JbmRleD11bmRlZmluZWQ7fQotaWYoZXZlbnQuZGVsdGEucmVmZXJlbmNlRGlzcGxheUxhYmVsIT09dW5kZWZpbmVkfHxldmVudC5kZWx0YS5kaXNwbGF5U3RhdGlzdGljTmFtZSE9PXVuZGVmaW5lZCl7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz10aGlzLiQudGFibGUudGFibGVSb3dzO30KLWlmKGV2ZW50LmRlbHRhLnRhYmxlUm93U3RhdGVzKXtpZih0aGlzLnRhYmxlUm93c18ubGVuZ3RoIT09dGhpcy52aWV3U3RhdGUudGFibGVSb3dTdGF0ZXMuc2l6ZSl7dGhyb3cgbmV3IEVycm9yKCdPbmx5IGhpc3RvZ3JhbS1zZXQtdGFibGUgbWF5IHVwZGF0ZSB0YWJsZVJvd1N0YXRlcycpO30KLWZvcihjb25zdCByb3cgb2YgdGhpcy50YWJsZVJvd3NfKXtpZih0aGlzLnZpZXdTdGF0ZS50YWJsZVJvd1N0YXRlcy5nZXQocm93Lm5hbWUpIT09cm93LnZpZXdTdGF0ZSl7dGhyb3cgbmV3IEVycm9yKCdPbmx5IGhpc3RvZ3JhbS1zZXQtdGFibGUgbWF5IHVwZGF0ZSB0YWJsZVJvd1N0YXRlcycpO319fQotYXdhaXQgdGhpcy51cGRhdGVDb250ZW50c18oKTt9LG9uU29ydENvbHVtbkNoYW5nZWRfKGV2ZW50KXt0ci5iLlRpbWluZy5pbnN0YW50KCdoaXN0b2dyYW0tc2V0LXRhYmxlJywnc29ydENvbHVtbicpO3RoaXMudmlld1N0YXRlLnVwZGF0ZSh7c29ydENvbHVtbkluZGV4OmV2ZW50LnNvcnRDb2x1bW5JbmRleCxzb3J0RGVzY2VuZGluZzpldmVudC5zb3J0RGVzY2VuZGluZyx9KTt9LG9uUmVxdWVzdFNlbGVjdGlvbkNoYW5nZV8oZXZlbnQpe2lmKGV2ZW50LnNlbGVjdGlvbiBpbnN0YW5jZW9mIHRyLm1vZGVsLkV2ZW50U2V0KXJldHVybjtldmVudC5zdG9wUHJvcGFnYXRpb24oKTt0ci5iLlRpbWluZy5pbnN0YW50KCdoaXN0b2dyYW0tc2V0LXRhYmxlJywnc2VsZWN0SGlzdG9ncmFtTmFtZXMnKTtsZXQgaGlzdG9ncmFtTmFtZXM9ZXZlbnQuc2VsZWN0aW9uO2hpc3RvZ3JhbU5hbWVzLnNvcnQoKTtoaXN0b2dyYW1OYW1lcz1oaXN0b2dyYW1OYW1lcy5tYXAoZXNjYXBlUmVnRXhwKS5qb2luKCd8Jyk7dGhpcy52aWV3U3RhdGUudXBkYXRlKHtzaG93QWxsOnRydWUsc2VhcmNoUXVlcnk6YF4oJHtoaXN0b2dyYW1OYW1lc30pJGAsfSk7fSxnZXQgbGVhZkhpc3RvZ3JhbXMoKXtjb25zdCBoaXN0b2dyYW1zPW5ldyB0ci52Lkhpc3RvZ3JhbVNldCgpO2Zvcihjb25zdCByb3cgb2YKLXRyLnYudWkuSGlzdG9ncmFtU2V0VGFibGVSb3cud2Fsa0FsbCh0aGlzLiQudGFibGUudGFibGVSb3dzKSl7aWYocm93LnN1YlJvd3MubGVuZ3RoKWNvbnRpbnVlO2Zvcihjb25zdCBoaXN0IG9mIHJvdy5jb2x1bW5zLnZhbHVlcygpKXtpZighKGhpc3QgaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbSkpY29udGludWU7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oaGlzdCk7fX0KLXJldHVybiBoaXN0b2dyYW1zO319KTtyZXR1cm57TUlETElORV9IT1JJWk9OVEFMX0VMTElQU0lTLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe1BvbHltZXIoe2lzOid0ci12LXVpLWhpc3RvZ3JhbS1zZXQtdmlldycsbGlzdGVuZXJzOntleHBvcnQ6J29uRXhwb3J0XycsfSxjcmVhdGVkKCl7dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl89bmV3IHRyLnVpLk51bGxCcnVzaGluZ1N0YXRlQ29udHJvbGxlcigpO3RoaXMudmlld1N0YXRlXz1uZXcgdHIudi51aS5IaXN0b2dyYW1TZXRWaWV3U3RhdGUoKTt9LHJlYWR5KCl7dGhpcy4kLnRhYmxlLnZpZXdTdGF0ZT10aGlzLnZpZXdTdGF0ZTt0aGlzLiQuY29udHJvbHMudmlld1N0YXRlPXRoaXMudmlld1N0YXRlO30sYXR0YWNoZWQoKXt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyLnBhcmVudENvbnRyb2xsZXI9dHIuYy5CcnVzaGluZ1N0YXRlQ29udHJvbGxlci5nZXRDb250cm9sbGVyRm9yRWxlbWVudCh0aGlzLnBhcmVudE5vZGUpO30sZ2V0IGJydXNoaW5nU3RhdGVDb250cm9sbGVyKCl7cmV0dXJuIHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfO30sZ2V0IHZpZXdTdGF0ZSgpe3JldHVybiB0aGlzLnZpZXdTdGF0ZV87fSxnZXQgaGlzdG9ncmFtcygpe3JldHVybiB0aGlzLiQudGFibGUuaGlzdG9ncmFtczt9LGFzeW5jIGJ1aWxkKGhpc3RvZ3JhbXMsb3B0X29wdGlvbnMpe2NvbnN0IG9wdGlvbnM9b3B0X29wdGlvbnN8fHt9O2NvbnN0IHByb2dyZXNzPW9wdGlvbnMucHJvZ3Jlc3N8fCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkpO2lmKG9wdGlvbnMuaGVscEhyZWYpdGhpcy4kLmNvbnRyb2xzLmhlbHBIcmVmPW9wdGlvbnMuaGVscEhyZWY7aWYob3B0aW9ucy5mZWVkYmFja0hyZWYpe3RoaXMuJC5jb250cm9scy5mZWVkYmFja0hyZWY9b3B0aW9ucy5mZWVkYmFja0hyZWY7fQotaWYoaGlzdG9ncmFtcz09PXVuZGVmaW5lZHx8aGlzdG9ncmFtcy5sZW5ndGg9PT0wKXt0aGlzLiQuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC56ZXJvLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztyZXR1cm47fQotdGhpcy4kLnplcm8uc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSdibG9jayc7dGhpcy4kLmNvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQ9KHdpbmRvdy5pbm5lckhlaWdodC0xNikrJ3B4Jztjb25zdCBidWlsZE1hcms9dHIuYi5UaW1pbmcubWFyaygnaGlzdG9ncmFtLXNldC12aWV3JywnYnVpbGQnKTthd2FpdCBwcm9ncmVzcygnRmluZGluZyBpbXBvcnRhbnQgSGlzdG9ncmFtcy4uLicpO2NvbnN0IHNvdXJjZUhpc3RvZ3JhbXNNYXJrPXRyLmIuVGltaW5nLm1hcmsoJ2hpc3RvZ3JhbS1zZXQtdmlldycsJ3NvdXJjZUhpc3RvZ3JhbXMnKTtjb25zdCBzb3VyY2VIaXN0b2dyYW1zPWhpc3RvZ3JhbXMuc291cmNlSGlzdG9ncmFtcztzb3VyY2VIaXN0b2dyYW1zTWFyay5lbmQoKTt0aGlzLiQuY29udHJvbHMuc2hvd0FsbEVuYWJsZWQ9KHNvdXJjZUhpc3RvZ3JhbXMubGVuZ3RoIT09aGlzdG9ncmFtcy5sZW5ndGgpO2F3YWl0IHByb2dyZXNzKCdDb2xsZWN0aW5nIHBhcmFtZXRlcnMuLi4nKTtjb25zdCBjb2xsZWN0UGFyYW1ldGVyc01hcms9dHIuYi5UaW1pbmcubWFyaygnaGlzdG9ncmFtLXNldC12aWV3JywnY29sbGVjdFBhcmFtZXRlcnMnKTtjb25zdCBwYXJhbWV0ZXJDb2xsZWN0b3I9bmV3IHRyLnYuSGlzdG9ncmFtUGFyYW1ldGVyQ29sbGVjdG9yKCk7cGFyYW1ldGVyQ29sbGVjdG9yLnByb2Nlc3MoaGlzdG9ncmFtcyk7dGhpcy4kLmNvbnRyb2xzLmJhc2VTdGF0aXN0aWNOYW1lcz1wYXJhbWV0ZXJDb2xsZWN0b3Iuc3RhdGlzdGljTmFtZXM7dGhpcy4kLmNvbnRyb2xzLnBvc3NpYmxlR3JvdXBpbmdzPXBhcmFtZXRlckNvbGxlY3Rvci5wb3NzaWJsZUdyb3VwaW5ncztjb25zdCBkaXNwbGF5TGFiZWxzPXBhcmFtZXRlckNvbGxlY3Rvci5sYWJlbHM7dGhpcy4kLmNvbnRyb2xzLmRpc3BsYXlMYWJlbHM9ZGlzcGxheUxhYmVscztjb2xsZWN0UGFyYW1ldGVyc01hcmsuZW5kKCk7YXdhaXQgdGhpcy4kLnRhYmxlLmJ1aWxkKGhpc3RvZ3JhbXMsc291cmNlSGlzdG9ncmFtcyxkaXNwbGF5TGFiZWxzLHByb2dyZXNzKTtidWlsZE1hcmsuZW5kKCk7fSxvbkV4cG9ydF8oZXZlbnQpe2NvbnN0IG1hcms9dHIuYi5UaW1pbmcubWFyaygnaGlzdG9ncmFtLXNldC12aWV3JywnZXhwb3J0JysKLShldmVudC5tZXJnZWQ/J01lcmdlZCc6J1JhdycpK2V2ZW50LmZvcm1hdC50b1VwcGVyQ2FzZSgpKTtjb25zdCBoaXN0b2dyYW1zPWV2ZW50Lm1lcmdlZD90aGlzLiQudGFibGUubGVhZkhpc3RvZ3JhbXM6dGhpcy5oaXN0b2dyYW1zO2xldCBibG9iO2lmKGV2ZW50LmZvcm1hdD09PSdjc3YnKXtjb25zdCBjc3Y9bmV3IHRyLnYuQ1NWQnVpbGRlcihoaXN0b2dyYW1zKTtjc3YuYnVpbGQoKTtibG9iPW5ldyB3aW5kb3cuQmxvYihbY3N2LnRvU3RyaW5nKCldLHt0eXBlOid0ZXh0L2Nzdid9KTt9ZWxzZSBpZihldmVudC5mb3JtYXQ9PT0nanNvbicpe2Jsb2I9bmV3IHdpbmRvdy5CbG9iKFtKU09OLnN0cmluZ2lmeShoaXN0b2dyYW1zLmFzRGljdHMoKSldLHt0eXBlOid0ZXh0L2pzb24nfSk7fWVsc2V7dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZXhwb3J0IGZvcm1hdCAiJHtldmVudC5mb3JtYXR9ImApO30KLWNvbnN0IHBhdGg9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCcvJyk7Y29uc3QgYmFzZW5hbWU9cGF0aFtwYXRoLmxlbmd0aC0xXS5zcGxpdCgnLicpWzBdfHwnaGlzdG9ncmFtcyc7Y29uc3QgYW5jaG9yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTthbmNob3IuZG93bmxvYWQ9YCR7YmFzZW5hbWV9LiR7ZXZlbnQuZm9ybWF0fWA7YW5jaG9yLmhyZWY9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7YW5jaG9yLmNsaWNrKCk7bWFyay5lbmQoKTt9LH0pO3JldHVybnt9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWknLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXVpLXNwLW1ldHJpY3Mtc2lkZS1wYW5lbCcsYmVoYXZpb3JzOlt0ci51aS5iZWhhdmlvcnMuU2lkZVBhbmVsXSxyZWFkeSgpe3RoaXMubW9kZWxfPXVuZGVmaW5lZDt0aGlzLnJhbmdlT2ZJbnRlcmVzdF89dW5kZWZpbmVkO3RoaXMubWV0cmljTGF0ZW5jaWVzTXNfPVtdO3RoaXMubWV0cmljc189W107dHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5nZXRBbGxSZWdpc3RlcmVkVHlwZUluZm9zKCkuZm9yRWFjaChmdW5jdGlvbihtKXtpZihtLmNvbnN0cnVjdG9yLm5hbWU9PT0nc2FtcGxlTWV0cmljJylyZXR1cm47dGhpcy5tZXRyaWNzXy5wdXNoKHtsYWJlbDptLmNvbnN0cnVjdG9yLm5hbWUsdmFsdWU6bS5jb25zdHJ1Y3Rvci5uYW1lfSk7fSx0aGlzKTt0aGlzLm1ldHJpY3NfLnNvcnQoKHgseSk9PngubGFiZWwubG9jYWxlQ29tcGFyZSh5LmxhYmVsKSk7dGhpcy5zZXR0aW5nc0tleV89J21ldHJpY3Mtc2lkZS1wYW5lbC1tZXRyaWMtbmFtZSc7dGhpcy5jdXJyZW50TWV0cmljTmFtZV89J3Jlc3BvbnNpdmVuZXNzTWV0cmljJztjb25zdCBtZXRyaWNTZWxlY3Rvcj10ci51aS5iLmNyZWF0ZVNlbGVjdG9yKHRoaXMsJ2N1cnJlbnRNZXRyaWNOYW1lXycsdGhpcy5zZXR0aW5nc0tleV8sdGhpcy5jdXJyZW50TWV0cmljTmFtZV8sdGhpcy5tZXRyaWNzXyk7UG9seW1lci5kb20odGhpcy4kLnRvcF9sZWZ0X2NvbnRyb2xzKS5hcHBlbmRDaGlsZChtZXRyaWNTZWxlY3Rvcik7bWV0cmljU2VsZWN0b3IuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyx0aGlzLm9uTWV0cmljQ2hhbmdlXy5iaW5kKHRoaXMpKTt0aGlzLmN1cnJlbnRNZXRyaWNUeXBlSW5mb189dHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5maW5kVHlwZUluZm9XaXRoTmFtZSh0aGlzLmN1cnJlbnRNZXRyaWNOYW1lXyk7dGhpcy5yZWNvbXB1dGVCdXR0b25fPXRyLnVpLmIuY3JlYXRlQnV0dG9uKCdSZWNvbXB1dGUnLHRoaXMub25SZWNvbXB1dGVfLHRoaXMpO1BvbHltZXIuZG9tKHRoaXMuJC50b3BfbGVmdF9jb250cm9scykuYXBwZW5kQ2hpbGQodGhpcy5yZWNvbXB1dGVCdXR0b25fKTt0aGlzLiQucmVzdWx0cy5hZGRFdmVudExpc3RlbmVyKCdkaXNwbGF5LXJlYWR5JywoKT0+e3RoaXMuJC5yZXN1bHRzLnN0eWxlLmRpc3BsYXk9Jyc7fSk7fSxhc3luYyBidWlsZChtb2RlbCl7dGhpcy5tb2RlbF89bW9kZWw7YXdhaXQgdGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBtZXRyaWNMYXRlbmN5TXMoKXtyZXR1cm4gdHIuYi5tYXRoLlN0YXRpc3RpY3MubWVhbih0aGlzLm1ldHJpY0xhdGVuY2llc01zXyk7fSxvbk1ldHJpY0NoYW5nZV8oKXt0aGlzLmN1cnJlbnRNZXRyaWNUeXBlSW5mb189dHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5maW5kVHlwZUluZm9XaXRoTmFtZSh0aGlzLmN1cnJlbnRNZXRyaWNOYW1lXyk7dGhpcy5tZXRyaWNMYXRlbmNpZXNNc189W107dGhpcy51cGRhdGVDb250ZW50c18oKTt9LG9uUmVjb21wdXRlXygpe3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgdGV4dExhYmVsKCl7cmV0dXJuJ01ldHJpY3MnO30sc3VwcG9ydHNNb2RlbChtKXtpZighbSl7cmV0dXJue3N1cHBvcnRlZDpmYWxzZSxyZWFzb246J05vIG1vZGVsIGF2YWlsYWJsZSd9O30KLXJldHVybntzdXBwb3J0ZWQ6dHJ1ZX07fSxnZXQgbW9kZWwoKXtyZXR1cm4gdGhpcy5tb2RlbF87fSxzZXQgbW9kZWwobW9kZWwpe3RoaXMuYnVpbGQobW9kZWwpO30sZ2V0IHNlbGVjdGlvbigpe30sc2V0IHNlbGVjdGlvbihfKXt9LGdldCByYW5nZU9mSW50ZXJlc3QoKXtyZXR1cm4gdGhpcy5yYW5nZU9mSW50ZXJlc3RfO30sc2V0IHJhbmdlT2ZJbnRlcmVzdChyYW5nZSl7dGhpcy5yYW5nZU9mSW50ZXJlc3RfPXJhbmdlO2lmKHRoaXMuY3VycmVudE1ldHJpY1R5cGVJbmZvXyYmdGhpcy5jdXJyZW50TWV0cmljVHlwZUluZm9fLm1ldGFkYXRhLnN1cHBvcnRzUmFuZ2VPZkludGVyZXN0KXtpZigodGhpcy5tZXRyaWNMYXRlbmN5TXM9PT11bmRlZmluZWQpfHwodGhpcy5tZXRyaWNMYXRlbmN5TXM8MTAwKSl7dGhpcy51cGRhdGVDb250ZW50c18oKTt9ZWxzZXt0aGlzLnJlY29tcHV0ZUJ1dHRvbl8uc3R5bGUuYmFja2dyb3VuZD0ncmVkJzt9fX0sYXN5bmMgdXBkYXRlQ29udGVudHNfKCl7UG9seW1lci5kb20odGhpcy4kLmVycm9yKS50ZXh0Q29udGVudD0nJzt0aGlzLiQucmVzdWx0cy5zdHlsZS5kaXNwbGF5PSdub25lJztpZighdGhpcy5tb2RlbF8pe1BvbHltZXIuZG9tKHRoaXMuJC5lcnJvcikudGV4dENvbnRlbnQ9J01pc3NpbmcgbW9kZWwnO3JldHVybjt9Ci1jb25zdCBvcHRpb25zPXttZXRyaWNzOlt0aGlzLmN1cnJlbnRNZXRyaWNOYW1lX119O2lmKHRoaXMuY3VycmVudE1ldHJpY1R5cGVJbmZvXyYmdGhpcy5jdXJyZW50TWV0cmljVHlwZUluZm9fLm1ldGFkYXRhLnN1cHBvcnRzUmFuZ2VPZkludGVyZXN0JiZ0aGlzLnJhbmdlT2ZJbnRlcmVzdCYmIXRoaXMucmFuZ2VPZkludGVyZXN0LmlzRW1wdHkpe29wdGlvbnMucmFuZ2VPZkludGVyZXN0PXRoaXMucmFuZ2VPZkludGVyZXN0O30KLWNvbnN0IHN0YXJ0RGF0ZT1uZXcgRGF0ZSgpO2NvbnN0IGFkZEZhaWx1cmVDYj1mYWlsdXJlPT57UG9seW1lci5kb20odGhpcy4kLmVycm9yKS50ZXh0Q29udGVudD1mYWlsdXJlLmRlc2NyaXB0aW9uO307Y29uc3QgaGlzdG9ncmFtcz10ci5tZXRyaWNzLnJ1bk1ldHJpY3ModGhpcy5tb2RlbF8sb3B0aW9ucyxhZGRGYWlsdXJlQ2IpO3RoaXMubWV0cmljTGF0ZW5jaWVzTXNfLnB1c2gobmV3IERhdGUoKS1zdGFydERhdGUpO3doaWxlKHRoaXMubWV0cmljTGF0ZW5jaWVzTXNfLmxlbmd0aD4yMCl7dGhpcy5tZXRyaWNMYXRlbmNpZXNNc18uc2hpZnQoKTt9Ci10aGlzLnJlY29tcHV0ZUJ1dHRvbl8uc3R5bGUuYmFja2dyb3VuZD0nJzthd2FpdCB0aGlzLiQucmVzdWx0cy5idWlsZChoaXN0b2dyYW1zKTt9fSk7dHIudWkuc2lkZV9wYW5lbC5TaWRlUGFuZWxSZWdpc3RyeS5yZWdpc3RlcihmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1zcC1tZXRyaWNzLXNpZGUtcGFuZWwnKTt9KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWUtcy1hbGVydHMtc2lkZS1wYW5lbCcsYmVoYXZpb3JzOlt0ci51aS5iZWhhdmlvcnMuU2lkZVBhbmVsXSxyZWFkeSgpe3RoaXMucmFuZ2VPZkludGVyZXN0Xz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7dGhpcy5zZWxlY3Rpb25fPXVuZGVmaW5lZDt9LGdldCBtb2RlbCgpe3JldHVybiB0aGlzLm1vZGVsXzt9LHNldCBtb2RlbChtb2RlbCl7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt9LHNldCByYW5nZU9mSW50ZXJlc3QocmFuZ2VPZkludGVyZXN0KXt9LHNlbGVjdEFsZXJ0c09mVHlwZShhbGVydFR5cGVTdHJpbmcpe2NvbnN0IGFsZXJ0c09mVHlwZT10aGlzLm1vZGVsXy5hbGVydHMuZmlsdGVyKGZ1bmN0aW9uKGFsZXJ0KXtyZXR1cm4gYWxlcnQudGl0bGU9PT1hbGVydFR5cGVTdHJpbmc7fSk7Y29uc3QgZXZlbnQ9bmV3IHRyLm1vZGVsLlJlcXVlc3RTZWxlY3Rpb25DaGFuZ2VFdmVudCgpO2V2ZW50LnNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoYWxlcnRzT2ZUeXBlKTt0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO30sYWxlcnRzQnlUeXBlXyhhbGVydHMpe2NvbnN0IGFsZXJ0c0J5VHlwZT17fTthbGVydHMuZm9yRWFjaChmdW5jdGlvbihhbGVydCl7aWYoIWFsZXJ0c0J5VHlwZVthbGVydC50aXRsZV0pe2FsZXJ0c0J5VHlwZVthbGVydC50aXRsZV09W107fQotYWxlcnRzQnlUeXBlW2FsZXJ0LnRpdGxlXS5wdXNoKGFsZXJ0KTt9KTtyZXR1cm4gYWxlcnRzQnlUeXBlO30sYWxlcnRzVGFibGVSb3dzXyhhbGVydHNCeVR5cGUpe3JldHVybiBPYmplY3Qua2V5cyhhbGVydHNCeVR5cGUpLm1hcChmdW5jdGlvbihrZXkpe3JldHVybnthbGVydFR5cGU6a2V5LGNvdW50OmFsZXJ0c0J5VHlwZVtrZXldLmxlbmd0aH07fSk7fSxhbGVydHNUYWJsZUNvbHVtbnNfKCl7cmV0dXJuW3t0aXRsZTonQWxlcnQgdHlwZScsdmFsdWUocm93KXtyZXR1cm4gcm93LmFsZXJ0VHlwZTt9LHdpZHRoOicxODBweCd9LHt0aXRsZTonQ291bnQnLHdpZHRoOicxMDAlJyx2YWx1ZShyb3cpe3JldHVybiByb3cuY291bnQ7fX1dO30sY3JlYXRlQWxlcnRzVGFibGVfKGFsZXJ0cyl7Y29uc3QgYWxlcnRzQnlUeXBlPXRoaXMuYWxlcnRzQnlUeXBlXyhhbGVydHMpO2NvbnN0IHRhYmxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItdGFibGUnKTt0YWJsZS50YWJsZUNvbHVtbnM9dGhpcy5hbGVydHNUYWJsZUNvbHVtbnNfKCk7dGFibGUudGFibGVSb3dzPXRoaXMuYWxlcnRzVGFibGVSb3dzXyhhbGVydHNCeVR5cGUpO3RhYmxlLnNlbGVjdGlvbk1vZGU9dHIudWkuYi5UYWJsZUZvcm1hdC5TZWxlY3Rpb25Nb2RlLlJPVzt0YWJsZS5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb24tY2hhbmdlZCcsZnVuY3Rpb24oZSl7Y29uc3Qgcm93PXRhYmxlLnNlbGVjdGVkVGFibGVSb3c7aWYocm93KXt0aGlzLnNlbGVjdEFsZXJ0c09mVHlwZShyb3cuYWxlcnRUeXBlKTt9fS5iaW5kKHRoaXMpKTtyZXR1cm4gdGFibGU7fSx1cGRhdGVDb250ZW50c18oKXtQb2x5bWVyLmRvbSh0aGlzLiQucmVzdWx0X2FyZWEpLnRleHRDb250ZW50PScnO2lmKHRoaXMubW9kZWxfPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBwYW5lbD10aGlzLmNyZWF0ZUFsZXJ0c1RhYmxlXyh0aGlzLm1vZGVsXy5hbGVydHMpO1BvbHltZXIuZG9tKHRoaXMuJC5yZXN1bHRfYXJlYSkuYXBwZW5kQ2hpbGQocGFuZWwpO30sc3VwcG9ydHNNb2RlbChtKXtpZihtPT09dW5kZWZpbmVkKXtyZXR1cm57c3VwcG9ydGVkOmZhbHNlLHJlYXNvbjonVW5rbm93biB0cmFjaW5nIG1vZGVsJ307fWVsc2UgaWYobS5hbGVydHMubGVuZ3RoPT09MCl7cmV0dXJue3N1cHBvcnRlZDpmYWxzZSxyZWFzb246J05vIGFsZXJ0cyBpbiB0cmFjaW5nIG1vZGVsJ307fQotcmV0dXJue3N1cHBvcnRlZDp0cnVlfTt9LGdldCB0ZXh0TGFiZWwoKXtyZXR1cm4nQWxlcnRzJzt9fSk7dHIudWkuc2lkZV9wYW5lbC5TaWRlUGFuZWxSZWdpc3RyeS5yZWdpc3RlcihmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1lLXMtYWxlcnRzLXNpZGUtcGFuZWwnKTt9KTsKLTwvc2NyaXB0PgotPCEtLUNBVEFQVUxUX1JFVj1OT19BVVRPX1VQREFURS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3Rlc3RfZGF0YS9hdHJhY2VfZGF0YSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3Rlc3RfZGF0YS9hdHJhY2VfZGF0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFjZWIxOC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvYXRyYWNlX2RhdGEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotIyB0cmFjZXI6IG5vcAotIwotIyBlbnRyaWVzLWluLWJ1ZmZlci9lbnRyaWVzLXdyaXR0ZW46IDExNi8xMTYgICAjUDoxCi0jCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy0tLS0tPT4gaXJxcy1vZmYKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gXy0tLS09PiBuZWVkLXJlc2NoZWQKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAvIF8tLS09PiBoYXJkaXJxL3NvZnRpcnEKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgLyBfLS09PiBwcmVlbXB0LWRlcHRoCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8fCAvICAgICBkZWxheQotIyAgICAgICAgICAgVEFTSy1QSUQgICBDUFUjICB8fHx8ICAgIFRJTUVTVEFNUCAgRlVOQ1RJT04KLSMgICAgICAgICAgICAgIHwgfCAgICAgICB8ICAgfHx8fCAgICAgICB8ICAgICAgICAgfAotYXRyYWNlLTE0NDQ2IFswMDBdIC4uLjIgIDEyMTIuNDY1MDYyOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1hdHJhY2UgcHJldl9waWQ9MTQ0NDYgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuLjQgIDEyMTIuNDY1MDc0OiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNDY1MDgyOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAota3NvZnRpcnFkLzAtMyAgICAgWzAwMF0gLi4uMiAgMTIxMi40NjUwOTI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuLjQgIDEyMTIuNDY1MTAyOiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNDY1MTI2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAota3NvZnRpcnFkLzAtMyAgICAgWzAwMF0gLi4uMiAgMTIxMi40NjUxMzI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuLjQgIDEyMTIuNDY1MTM5OiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNDY1MTQ1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAota3NvZnRpcnFkLzAtMyAgICAgWzAwMF0gLi4uMiAgMTIxMi40NjUyMjc6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuaDUgIDEyMTIuNDY1Mjk3OiBzY2hlZF93YWtldXA6IGNvbW09YWRiZCBwaWQ9MjEyIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEyLjQ2NTMwNjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1hZGJkIG5leHRfcGlkPTIxMiBuZXh0X3ByaW89MTIwCi1kc3hfZXhwX3dvcmtxdWUtMjEyICAgWzAwMF0gZC4uNCAgMTIxMi40NjUzMjk6IHNjaGVkX3dha2V1cDogY29tbT1hZGJkIHBpZD0yMDkgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi1kc3hfZXhwX3dvcmtxdWUtMjEyICAgWzAwMF0gLi4uMiAgMTIxMi40NjUzNDg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWFkYmQgcHJldl9waWQ9MjEyIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09YWRiZCBuZXh0X3BpZD0yMDkgbmV4dF9wcmlvPTEyMAotdWV0aGVyLTIwOSAgIFswMDBdIGQuLjQgIDEyMTIuNDY1Mzk1OiBzY2hlZF93YWtldXA6IGNvbW09YWRiZCBwaWQ9MjExIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotdWV0aGVyLTIwOSAgIFswMDBdIC4uLjIgIDEyMTIuNDY1NDQxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1hZGJkIHByZXZfcGlkPTIwOSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPWFkYmQgbmV4dF9waWQ9MjExIG5leHRfcHJpbz0xMjAKLWRzeF9yZWJ1aWxkX3dvci0yMTEgICBbMDAwXSAuLi4yICAxMjEyLjQ2NTQ0ODogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09YWRiZCBwcmV2X3BpZD0yMTEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuaDUgIDEyMTIuNTc0NTU0OiBzY2hlZF93YWtldXA6IGNvbW09c2Vuc29ycy5xY29tIHBpZD0yOTIgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNTc0NTY2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPXNlbnNvcnMucWNvbSBuZXh0X3BpZD0yOTIgbmV4dF9wcmlvPTEyMAotaXJxLzM2My1BUk02NCBzLTI5MiAgIFswMDBdIC4uLjIgIDEyMTIuNTc0NjY1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zZW5zb3JzLnFjb20gcHJldl9waWQ9MjkyIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c2Vuc29ycy5xY29tIG5leHRfcGlkPTE0NDQ3IG5leHRfcHJpbz0xMjAKLXNlbnNvcnMucWNvbS0xNDQ0NyBbMDAwXSBkLi40ICAxMjEyLjU3NDc5Nzogc2NoZWRfd2FrZXVwOiBjb21tPXNlbnNvcnMucWNvbSBwaWQ9MTU5MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLXNlbnNvcnMucWNvbS0xNDQ0NyBbMDAwXSAuLi4yICAxMjEyLjU3NDgwMjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c2Vuc29ycy5xY29tIHByZXZfcGlkPTE0NDQ3IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SKyA9PT4gbmV4dF9jb21tPXNlbnNvcnMucWNvbSBuZXh0X3BpZD0xNTkzIG5leHRfcHJpbz0xMjAKLXNlbnNvcnMucWNvbS0xNTkzICBbMDAwXSAuLi4yICAxMjEyLjU3NDgxOTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c2Vuc29ycy5xY29tIHByZXZfcGlkPTE1OTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPUQgPT0+IG5leHRfY29tbT1zZW5zb3JzLnFjb20gbmV4dF9waWQ9MTQ0NDcgbmV4dF9wcmlvPTEyMAotc2Vuc29ycy5xY29tLTE0NDQ3IFswMDBdIGQuLjMgIDEyMTIuNTc0ODIzOiBzY2hlZF93YWtldXA6IGNvbW09c2Vuc29ycy5xY29tIHBpZD0xNTkzIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotc2Vuc29ycy5xY29tLTE0NDQ3IFswMDBdIC4uLjIgIDEyMTIuNTc0ODI3OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zZW5zb3JzLnFjb20gcHJldl9waWQ9MTQ0NDcgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIrID09PiBuZXh0X2NvbW09c2Vuc29ycy5xY29tIG5leHRfcGlkPTE1OTMgbmV4dF9wcmlvPTEyMAotc2Vuc29ycy5xY29tLTE1OTMgIFswMDBdIGQuLjQgIDEyMTIuNTc0ODY1OiBzY2hlZF93YWtldXA6IGNvbW09c2Vuc29ycy5xY29tIHBpZD03NjAgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi1zZW5zb3JzLnFjb20tMTU5MyAgWzAwMF0gLi4uMiAgMTIxMi41NzQ4NzY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD0xNTkzIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c2Vuc29ycy5xY29tIG5leHRfcGlkPTc2MCBuZXh0X3ByaW89MTIwCi1zZW5zb3JzLnFjb20tNzYwICAgWzAwMF0gZC4uNCAgMTIxMi41NzQ5MDU6IHNjaGVkX3dha2V1cDogY29tbT1zeXN0ZW1fc2VydmVyIHBpZD03ODIgcHJpbz0xMTggc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi1zZW5zb3JzLnFjb20tNzYwICAgWzAwMF0gLi4uMiAgMTIxMi41NzQ5MTc6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD03NjAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zeXN0ZW1fc2VydmVyIG5leHRfcGlkPTc4MiBuZXh0X3ByaW89MTE4Ci1zeXN0ZW1fc2VydmVyLTc4MiAgIFswMDBdIGQuLjQgIDEyMTIuNTc0OTgxOiBzY2hlZF93YWtldXA6IGNvbW09c3lzdGVtX3NlcnZlciBwaWQ9Nzg1IHByaW89MTE4IHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotc3lzdGVtX3NlcnZlci03ODIgICBbMDAwXSAuLi4yICAxMjEyLjU3NTAwOTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3lzdGVtX3NlcnZlciBwcmV2X3BpZD03ODIgcHJldl9wcmlvPTExOCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zeXN0ZW1fc2VydmVyIG5leHRfcGlkPTc4NSBuZXh0X3ByaW89MTE4Ci1zeXN0ZW1fc2VydmVyLTc4NSAgIFswMDBdIC4uLjIgIDEyMTIuNTc1MDQ1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zeXN0ZW1fc2VydmVyIHByZXZfcGlkPTc4NSBwcmV2X3ByaW89MTE4IHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXNlbnNvcnMucWNvbSBuZXh0X3BpZD0xNDQ0NyBuZXh0X3ByaW89MTIwCi1zZW5zb3JzLnFjb20tMTQ0NDcgWzAwMF0gLi4uMyAgMTIxMi41NzUxNDM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD0xNDQ0NyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9eCA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMi41NzUxNTM6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi41NzUxNTk6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi1rc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEyLjU3NTE2Nzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMi41NzUxNzU6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi41NzUxODE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi1rc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEyLjU3NTE4ODogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMi41NzUxOTU6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi41NzUyMDE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi1rc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEyLjU3NTIxMTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC5oNCAgMTIxMi42NDk2MDE6IHNjaGVkX3dha2V1cDogY29tbT1NTUhhbmRsZXJUaHJlYWQgcGlkPTcyMzEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNjQ5NjE0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPU1NSGFuZGxlclRocmVhZCBuZXh0X3BpZD03MjMxIG5leHRfcHJpbz0xMjAKLU1NSGFuZGxlclRocmVhZC03MjMxICBbMDAwXSAuLi4yICAxMjEyLjY0OTYzMDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09TU1IYW5kbGVyVGhyZWFkIHByZXZfcGlkPTcyMzEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuaDYgIDEyMTIuNzI5NTM5OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci91OjEgcGlkPTIxIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkTnM2ICAxMjEyLjcyOTU1MDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMDoySCBwaWQ9NTU3IHByaW89MTAwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEyLjcyOTU2Mzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyL3U6MSBuZXh0X3BpZD0yMSBuZXh0X3ByaW89MTIwCi1rd29ya2VyL3U6MS0yMSAgICBbMDAwXSBkLi41ICAxMjEyLjcyOTU3MTogc2NoZWRfd2FrZXVwOiBjb21tPW1wZGVjaXNpb24gcGlkPTIwNDYgcHJpbz0xMTMgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi1rd29ya2VyL3U6MS0yMSAgICBbMDAwXSAuLi4yICAxMjEyLjcyOTU3ODogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci91OjEgcHJldl9waWQ9MjEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1rd29ya2VyLzA6MkggbmV4dF9waWQ9NTU3IG5leHRfcHJpbz0xMDAKLXRoZXJtYWwtZW5naW5lLTU1NyAgIFswMDBdIGQuLjQgIDEyMTIuNzI5NTk3OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjFIIHBpZD0xNyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLXRoZXJtYWwtZW5naW5lLTU1NyAgIFswMDBdIC4uLjIgIDEyMTIuNzI5NjAwOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyLzA6MkggcHJldl9waWQ9NTU3IHByZXZfcHJpbz0xMDAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09bXBkZWNpc2lvbiBuZXh0X3BpZD0yMDQ2IG5leHRfcHJpbz0xMTMKLW1wZGVjaXNpb24tMjA0NiAgWzAwMF0gLi4uMiAgMTIxMi43Mjk4MDE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPW1wZGVjaXNpb24gcHJldl9waWQ9MjA0NiBwcmV2X3ByaW89MTEzIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoxSCBuZXh0X3BpZD0xNyBuZXh0X3ByaW89MTAwCi1rd29ya2VyLzA6MUgtMTcgICAgWzAwMF0gLi4uMiAgMTIxMi43MzAxMDQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDoxSCBwcmV2X3BpZD0xNyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMi43MzAxMzQ6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi43MzAxNTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi1rc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEyLjczMDE3Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMi43MzAyMDE6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi43MzAyMjA6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi1rc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEyLjczMDI0MTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMi43MzAyNjI6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi43MzAyODA6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi1rc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEyLjczMDMwMzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC5oNiAgMTIxMi43MzA2Mzg6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyL3U6MEggcGlkPTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMwNjY5OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWt3b3JrZXIvdTowSCBuZXh0X3BpZD03IG5leHRfcHJpbz0xMDAKLW1pZ3JhdGlvbi8wLTcgICAgIFswMDBdIGQuLjYgIDEyMTIuNzMwNzA3OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjFIIHBpZD0xNyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLW1pZ3JhdGlvbi8wLTcgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMwNzI4OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyL3U6MEggcHJldl9waWQ9NyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoxSCBuZXh0X3BpZD0xNyBuZXh0X3ByaW89MTAwCi1rd29ya2VyLzA6MUgtMTcgICAgWzAwMF0gLi4uMiAgMTIxMi43MzA5MTY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDoxSCBwcmV2X3BpZD0xNyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC5oNiAgMTIxMi43MzE2MzI6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyL3U6MEggcGlkPTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMxNjYxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWt3b3JrZXIvdTowSCBuZXh0X3BpZD03IG5leHRfcHJpbz0xMDAKLW1pZ3JhdGlvbi8wLTcgICAgIFswMDBdIGQuLjYgIDEyMTIuNzMxNzAyOiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjFIIHBpZD0xNyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLW1pZ3JhdGlvbi8wLTcgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMxNzIyOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyL3U6MEggcHJldl9waWQ9NyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoxSCBuZXh0X3BpZD0xNyBuZXh0X3ByaW89MTAwCi1rd29ya2VyLzA6MUgtMTcgICAgWzAwMF0gLi4uMiAgMTIxMi43MzE4MzI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDoxSCBwcmV2X3BpZD0xNyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC5oNiAgMTIxMi43MzI2ODU6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyL3U6MEggcGlkPTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMyNzE0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWt3b3JrZXIvdTowSCBuZXh0X3BpZD03IG5leHRfcHJpbz0xMDAKLW1pZ3JhdGlvbi8wLTcgICAgIFswMDBdIGQuLjYgIDEyMTIuNzMyNzQ3OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjFIIHBpZD0xNyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLW1pZ3JhdGlvbi8wLTcgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMyNzY3OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyL3U6MEggcHJldl9waWQ9NyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoxSCBuZXh0X3BpZD0xNyBuZXh0X3ByaW89MTAwCi1rd29ya2VyLzA6MUgtMTcgICAgWzAwMF0gZC4uNCAgMTIxMi43MzI4MTA6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyLzA6MkggcGlkPTU1NyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLWt3b3JrZXIvMDoxSC0xNyAgICBbMDAwXSAuLi4yICAxMjEyLjczMjgyOTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8wOjFIIHByZXZfcGlkPTE3IHByZXZfcHJpbz0xMDAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjJIIG5leHRfcGlkPTU1NyBuZXh0X3ByaW89MTAwCi10aGVybWFsLWVuZ2luZS01NTcgICBbMDAwXSAuLi4yICAxMjEyLjczMjg1NDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8wOjJIIHByZXZfcGlkPTU1NyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC5oNCAgMTIxMi44NzYyNjY6IHNjaGVkX3dha2V1cDogY29tbT1SSUxTZW5kZXIwIHBpZD0xMzY1IHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkTmg0ICAxMjEyLjg3NjI4NDogc2NoZWRfd2FrZXVwOiBjb21tPU1NSGFuZGxlclRocmVhZCBwaWQ9NzIzMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi44NzYzMTY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09UklMU2VuZGVyMCBuZXh0X3BpZD0xMzY1IG5leHRfcHJpbz0xMjAKLVJJTFNlbmRlcjAtMTM2NSAgWzAwMF0gLi4uMiAgMTIxMi44NzY0MTU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPVJJTFNlbmRlcjAgcHJldl9waWQ9MTM2NSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPU1NSGFuZGxlclRocmVhZCBuZXh0X3BpZD03MjMxIG5leHRfcHJpbz0xMjAKLU1NSGFuZGxlclRocmVhZC03MjMxICBbMDAwXSAuLi4yICAxMjEyLjg3NjQ1NDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09TU1IYW5kbGVyVGhyZWFkIHByZXZfcGlkPTcyMzEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuaDQgIDEyMTMuMDg5NTY5OiBzY2hlZF93YWtldXA6IGNvbW09VGhyZWFkLTYyNSBwaWQ9NTc1MCBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZE5oNCAgMTIxMy4wODk1ODc6IHNjaGVkX3dha2V1cDogY29tbT1NTUhhbmRsZXJUaHJlYWQgcGlkPTcyMzEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTMuMDg5NjIyOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPVRocmVhZC02MjUgbmV4dF9waWQ9NTc1MCBuZXh0X3ByaW89MTIwCi1Bc3luY1Rhc2sgIzEtNTc1MCAgWzAwMF0gLi4uMiAgMTIxMy4wODk4NDI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPVRocmVhZC02MjUgcHJldl9waWQ9NTc1MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPU1NSGFuZGxlclRocmVhZCBuZXh0X3BpZD03MjMxIG5leHRfcHJpbz0xMjAKLU1NSGFuZGxlclRocmVhZC03MjMxICBbMDAwXSAuLi4yICAxMjEzLjA4OTg3OTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09TU1IYW5kbGVyVGhyZWFkIHByZXZfcGlkPTcyMzEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuaDQgIDEyMTMuMzI3NDM5OiBzY2hlZF93YWtldXA6IGNvbW09cGFuZG9yYS5hbmRyb2lkIHBpZD01Mzk1IHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkTmg0ICAxMjEzLjMyNzQ1NTogc2NoZWRfd2FrZXVwOiBjb21tPU1NSGFuZGxlclRocmVhZCBwaWQ9NzIzMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMy4zMjc0ODc6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09TU1IYW5kbGVyVGhyZWFkIG5leHRfcGlkPTcyMzEgbmV4dF9wcmlvPTEyMAotTU1IYW5kbGVyVGhyZWFkLTcyMzEgIFswMDBdIC4uLjIgIDEyMTMuMzI3NTE4OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1NTUhhbmRsZXJUaHJlYWQgcHJldl9waWQ9NzIzMSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXBhbmRvcmEuYW5kcm9pZCBuZXh0X3BpZD01Mzk1IG5leHRfcHJpbz0xMjAKLXBhbmRvcmEuYW5kcm9pZC01Mzk1ICBbMDAwXSBkLi40ICAxMjEzLjMyNzcxODogc2NoZWRfd2FrZXVwOiBjb21tPUJpbmRlcl8xIHBpZD03ODAgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi1wYW5kb3JhLmFuZHJvaWQtNTM5NSAgWzAwMF0gLi4uMiAgMTIxMy4zMjc3Mzk6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXBhbmRvcmEuYW5kcm9pZCBwcmV2X3BpZD01Mzk1IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SKyA9PT4gbmV4dF9jb21tPUJpbmRlcl8xIG5leHRfcGlkPTc4MCBuZXh0X3ByaW89MTIwCi1CaW5kZXJfMS03ODAgICBbMDAwXSAuLi4yICAxMjEzLjMyNzc2Mzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09QmluZGVyXzEgcHJldl9waWQ9NzgwIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09cGFuZG9yYS5hbmRyb2lkIG5leHRfcGlkPTUzOTUgbmV4dF9wcmlvPTEyMAotcGFuZG9yYS5hbmRyb2lkLTUzOTUgIFswMDBdIGQuLjMgIDEyMTMuMzI3NzgxOiBzY2hlZF93YWtldXA6IGNvbW09QmluZGVyXzEgcGlkPTc4MCBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLXBhbmRvcmEuYW5kcm9pZC01Mzk1ICBbMDAwXSAuLi4yICAxMjEzLjMyNzc5NTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09cGFuZG9yYS5hbmRyb2lkIHByZXZfcGlkPTUzOTUgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIrID09PiBuZXh0X2NvbW09QmluZGVyXzEgbmV4dF9waWQ9NzgwIG5leHRfcHJpbz0xMjAKLUJpbmRlcl8xLTc4MCAgIFswMDBdIGQuLjQgIDEyMTMuMzI4MDU2OiBzY2hlZF93YWtldXA6IGNvbW09QmluZGVyXzEgcGlkPTg3OCBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLUJpbmRlcl8xLTc4MCAgIFswMDBdIC4uLjIgIDEyMTMuMzI4MDk1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1CaW5kZXJfMSBwcmV2X3BpZD03ODAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1CaW5kZXJfMSBuZXh0X3BpZD04NzggbmV4dF9wcmlvPTEyMAotQmluZGVyXzEtODc4ICAgWzAwMF0gZC4uNCAgMTIxMy4zMjgyNjM6IHNjaGVkX3dha2V1cDogY29tbT1CaW5kZXJfMSBwaWQ9NzgwIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotQmluZGVyXzEtODc4ICAgWzAwMF0gLi4uMiAgMTIxMy4zMjgzNDU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPUJpbmRlcl8xIHByZXZfcGlkPTg3OCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPUJpbmRlcl8xIG5leHRfcGlkPTc4MCBuZXh0X3ByaW89MTIwCi1CaW5kZXJfMS03ODAgICBbMDAwXSAuLi4yICAxMjEzLjMyODU1ODogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09QmluZGVyXzEgcHJldl9waWQ9NzgwIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09cGFuZG9yYS5hbmRyb2lkIG5leHRfcGlkPTUzOTUgbmV4dF9wcmlvPTEyMAotcGFuZG9yYS5hbmRyb2lkLTUzOTUgIFswMDBdIC4uLjIgIDEyMTMuMzI4NzQzOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1wYW5kb3JhLmFuZHJvaWQgcHJldl9waWQ9NTM5NSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMy4zMjg3NzM6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMy4zMjg3OTM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi1rc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEzLjMyODgyMTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMy4zMjg4NDY6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMy4zMjg4NjY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi1rc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEzLjMyODg5MTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMy4zMjg5MTM6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMy4zMjg5MzE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi1rc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEzLjMyODk2NDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC5oNCAgMTIxMy40NjUxMzg6IHNjaGVkX3dha2V1cDogY29tbT1hdHJhY2UgcGlkPTE0NDQ2IHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEzLjQ2NTE3MTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1hdHJhY2UgbmV4dF9waWQ9MTQ0NDYgbmV4dF9wcmlvPTEyMApkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdGVzdF9kYXRhL2F0cmFjZV9kYXRhX3JhdyBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3Rlc3RfZGF0YS9hdHJhY2VfZGF0YV9yYXcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOGUwODYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdGVzdF9kYXRhL2F0cmFjZV9kYXRhX3JhdworKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0KLSMgdHJhY2VyOiBub3AKLSMKLSMgZW50cmllcy1pbi1idWZmZXIvZW50cmllcy13cml0dGVuOiAxMTYvMTE2ICAgI1A6MQotIwotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8tLS0tLT0+IGlycXMtb2ZmCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF8tLS0tPT4gbmVlZC1yZXNjaGVkCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLyBfLS0tPT4gaGFyZGlycS9zb2Z0aXJxCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IC8gXy0tPT4gcHJlZW1wdC1kZXB0aAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fHwgLyAgICAgZGVsYXkKLSMgICAgICAgICAgIFRBU0stUElEICAgQ1BVIyAgfHx8fCAgICBUSU1FU1RBTVAgIEZVTkNUSU9OCi0jICAgICAgICAgICAgICB8IHwgICAgICAgfCAgIHx8fHwgICAgICAgfCAgICAgICAgIHwKLSAgICAgICAgICBhdHJhY2UtMTQ0NDYgWzAwMF0gLi4uMiAgMTIxMi40NjUwNjI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWF0cmFjZSBwcmV2X3BpZD0xNDQ0NiBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMi40NjUwNzQ6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi40NjUwODI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi0gICAgIGtzb2Z0aXJxZC8wLTMgICAgIFswMDBdIC4uLjIgIDEyMTIuNDY1MDkyOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLi40ICAxMjEyLjQ2NTEwMjogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEyLjQ2NTEyNjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLSAgICAga3NvZnRpcnFkLzAtMyAgICAgWzAwMF0gLi4uMiAgMTIxMi40NjUxMzI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuLjQgIDEyMTIuNDY1MTM5OiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNDY1MTQ1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAotICAgICBrc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEyLjQ2NTIyNzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC5oNSAgMTIxMi40NjUyOTc6IHNjaGVkX3dha2V1cDogY29tbT1hZGJkIHBpZD0yMTIgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNDY1MzA2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWFkYmQgbmV4dF9waWQ9MjEyIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICAgIGFkYmQtMjEyICAgWzAwMF0gZC4uNCAgMTIxMi40NjUzMjk6IHNjaGVkX3dha2V1cDogY29tbT1hZGJkIHBpZD0yMDkgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgICBhZGJkLTIxMiAgIFswMDBdIC4uLjIgIDEyMTIuNDY1MzQ4OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1hZGJkIHByZXZfcGlkPTIxMiBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPWFkYmQgbmV4dF9waWQ9MjA5IG5leHRfcHJpbz0xMjAKLSAgICAgICAgICAgIGFkYmQtMjA5ICAgWzAwMF0gZC4uNCAgMTIxMi40NjUzOTU6IHNjaGVkX3dha2V1cDogY29tbT1hZGJkIHBpZD0yMTEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgICBhZGJkLTIwOSAgIFswMDBdIC4uLjIgIDEyMTIuNDY1NDQxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1hZGJkIHByZXZfcGlkPTIwOSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPWFkYmQgbmV4dF9waWQ9MjExIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICAgIGFkYmQtMjExICAgWzAwMF0gLi4uMiAgMTIxMi40NjU0NDg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWFkYmQgcHJldl9waWQ9MjExIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLmg1ICAxMjEyLjU3NDU1NDogc2NoZWRfd2FrZXVwOiBjb21tPXNlbnNvcnMucWNvbSBwaWQ9MjkyIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEyLjU3NDU2Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1zZW5zb3JzLnFjb20gbmV4dF9waWQ9MjkyIG5leHRfcHJpbz0xMjAKLSAgICBzZW5zb3JzLnFjb20tMjkyICAgWzAwMF0gLi4uMiAgMTIxMi41NzQ2NjU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD0yOTIgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zZW5zb3JzLnFjb20gbmV4dF9waWQ9MTQ0NDcgbmV4dF9wcmlvPTEyMAotICAgIHNlbnNvcnMucWNvbS0xNDQ0NyBbMDAwXSBkLi40ICAxMjEyLjU3NDc5Nzogc2NoZWRfd2FrZXVwOiBjb21tPXNlbnNvcnMucWNvbSBwaWQ9MTU5MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICBzZW5zb3JzLnFjb20tMTQ0NDcgWzAwMF0gLi4uMiAgMTIxMi41NzQ4MDI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD0xNDQ0NyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UisgPT0+IG5leHRfY29tbT1zZW5zb3JzLnFjb20gbmV4dF9waWQ9MTU5MyBuZXh0X3ByaW89MTIwCi0gICAgc2Vuc29ycy5xY29tLTE1OTMgIFswMDBdIC4uLjIgIDEyMTIuNTc0ODE5OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zZW5zb3JzLnFjb20gcHJldl9waWQ9MTU5MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPXNlbnNvcnMucWNvbSBuZXh0X3BpZD0xNDQ0NyBuZXh0X3ByaW89MTIwCi0gICAgc2Vuc29ycy5xY29tLTE0NDQ3IFswMDBdIGQuLjMgIDEyMTIuNTc0ODIzOiBzY2hlZF93YWtldXA6IGNvbW09c2Vuc29ycy5xY29tIHBpZD0xNTkzIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgIHNlbnNvcnMucWNvbS0xNDQ0NyBbMDAwXSAuLi4yICAxMjEyLjU3NDgyNzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c2Vuc29ycy5xY29tIHByZXZfcGlkPTE0NDQ3IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SKyA9PT4gbmV4dF9jb21tPXNlbnNvcnMucWNvbSBuZXh0X3BpZD0xNTkzIG5leHRfcHJpbz0xMjAKLSAgICBzZW5zb3JzLnFjb20tMTU5MyAgWzAwMF0gZC4uNCAgMTIxMi41NzQ4NjU6IHNjaGVkX3dha2V1cDogY29tbT1zZW5zb3JzLnFjb20gcGlkPTc2MCBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICBzZW5zb3JzLnFjb20tMTU5MyAgWzAwMF0gLi4uMiAgMTIxMi41NzQ4NzY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD0xNTkzIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c2Vuc29ycy5xY29tIG5leHRfcGlkPTc2MCBuZXh0X3ByaW89MTIwCi0gICAgc2Vuc29ycy5xY29tLTc2MCAgIFswMDBdIGQuLjQgIDEyMTIuNTc0OTA1OiBzY2hlZF93YWtldXA6IGNvbW09c3lzdGVtX3NlcnZlciBwaWQ9NzgyIHByaW89MTE4IHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgIHNlbnNvcnMucWNvbS03NjAgICBbMDAwXSAuLi4yICAxMjEyLjU3NDkxNzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c2Vuc29ycy5xY29tIHByZXZfcGlkPTc2MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN5c3RlbV9zZXJ2ZXIgbmV4dF9waWQ9NzgyIG5leHRfcHJpbz0xMTgKLSAgIHN5c3RlbV9zZXJ2ZXItNzgyICAgWzAwMF0gZC4uNCAgMTIxMi41NzQ5ODE6IHNjaGVkX3dha2V1cDogY29tbT1zeXN0ZW1fc2VydmVyIHBpZD03ODUgcHJpbz0xMTggc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICBzeXN0ZW1fc2VydmVyLTc4MiAgIFswMDBdIC4uLjIgIDEyMTIuNTc1MDA5OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zeXN0ZW1fc2VydmVyIHByZXZfcGlkPTc4MiBwcmV2X3ByaW89MTE4IHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN5c3RlbV9zZXJ2ZXIgbmV4dF9waWQ9Nzg1IG5leHRfcHJpbz0xMTgKLSAgIHN5c3RlbV9zZXJ2ZXItNzg1ICAgWzAwMF0gLi4uMiAgMTIxMi41NzUwNDU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN5c3RlbV9zZXJ2ZXIgcHJldl9waWQ9Nzg1IHByZXZfcHJpbz0xMTggcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c2Vuc29ycy5xY29tIG5leHRfcGlkPTE0NDQ3IG5leHRfcHJpbz0xMjAKLSAgICBzZW5zb3JzLnFjb20tMTQ0NDcgWzAwMF0gLi4uMyAgMTIxMi41NzUxNDM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD0xNDQ0NyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9eCA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMi41NzUxNTM6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi41NzUxNTk6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi0gICAgIGtzb2Z0aXJxZC8wLTMgICAgIFswMDBdIC4uLjIgIDEyMTIuNTc1MTY3OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLi40ICAxMjEyLjU3NTE3NTogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEyLjU3NTE4MTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLSAgICAga3NvZnRpcnFkLzAtMyAgICAgWzAwMF0gLi4uMiAgMTIxMi41NzUxODg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuLjQgIDEyMTIuNTc1MTk1OiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNTc1MjAxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAotICAgICBrc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEyLjU3NTIxMTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC5oNCAgMTIxMi42NDk2MDE6IHNjaGVkX3dha2V1cDogY29tbT1NTUhhbmRsZXJUaHJlYWQgcGlkPTcyMzEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNjQ5NjE0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPU1NSGFuZGxlclRocmVhZCBuZXh0X3BpZD03MjMxIG5leHRfcHJpbz0xMjAKLSBNTUhhbmRsZXJUaHJlYWQtNzIzMSAgWzAwMF0gLi4uMiAgMTIxMi42NDk2MzA6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPU1NSGFuZGxlclRocmVhZCBwcmV2X3BpZD03MjMxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLmg2ICAxMjEyLjcyOTUzOTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvdToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZE5zNiAgMTIxMi43Mjk1NTA6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyLzA6MkggcGlkPTU1NyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi43Mjk1NjM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci91OjEgbmV4dF9waWQ9MjEgbmV4dF9wcmlvPTEyMAotICAgICBrd29ya2VyL3U6MS0yMSAgICBbMDAwXSBkLi41ICAxMjEyLjcyOTU3MTogc2NoZWRfd2FrZXVwOiBjb21tPW1wZGVjaXNpb24gcGlkPTIwNDYgcHJpbz0xMTMgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgIGt3b3JrZXIvdToxLTIxICAgIFswMDBdIC4uLjIgIDEyMTIuNzI5NTc4OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyL3U6MSBwcmV2X3BpZD0yMSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoySCBuZXh0X3BpZD01NTcgbmV4dF9wcmlvPTEwMAotICAgIGt3b3JrZXIvMDoySC01NTcgICBbMDAwXSBkLi40ICAxMjEyLjcyOTU5Nzogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMDoxSCBwaWQ9MTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAga3dvcmtlci8wOjJILTU1NyAgIFswMDBdIC4uLjIgIDEyMTIuNzI5NjAwOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyLzA6MkggcHJldl9waWQ9NTU3IHByZXZfcHJpbz0xMDAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09bXBkZWNpc2lvbiBuZXh0X3BpZD0yMDQ2IG5leHRfcHJpbz0xMTMKLSAgICAgIG1wZGVjaXNpb24tMjA0NiAgWzAwMF0gLi4uMiAgMTIxMi43Mjk4MDE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPW1wZGVjaXNpb24gcHJldl9waWQ9MjA0NiBwcmV2X3ByaW89MTEzIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoxSCBuZXh0X3BpZD0xNyBuZXh0X3ByaW89MTAwCi0gICAga3dvcmtlci8wOjFILTE3ICAgIFswMDBdIC4uLjIgIDEyMTIuNzMwMTA0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyLzA6MUggcHJldl9waWQ9MTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPUQgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuLjQgIDEyMTIuNzMwMTM0OiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMwMTU0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAotICAgICBrc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEyLjczMDE3Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMi43MzAyMDE6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi43MzAyMjA6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi0gICAgIGtzb2Z0aXJxZC8wLTMgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMwMjQxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLi40ICAxMjEyLjczMDI2Mjogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEyLjczMDI4MDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLSAgICAga3NvZnRpcnFkLzAtMyAgICAgWzAwMF0gLi4uMiAgMTIxMi43MzAzMDM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuaDYgIDEyMTIuNzMwNjM4OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci91OjBIIHBpZD03IHByaW89MTAwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEyLjczMDY2OTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyL3U6MEggbmV4dF9waWQ9NyBuZXh0X3ByaW89MTAwCi0gICAga3dvcmtlci91OjBILTcgICAgIFswMDBdIGQuLjYgIDEyMTIuNzMwNzA3OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjFIIHBpZD0xNyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICBrd29ya2VyL3U6MEgtNyAgICAgWzAwMF0gLi4uMiAgMTIxMi43MzA3Mjg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvdTowSCBwcmV2X3BpZD03IHByZXZfcHJpbz0xMDAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjFIIG5leHRfcGlkPTE3IG5leHRfcHJpbz0xMDAKLSAgICBrd29ya2VyLzA6MUgtMTcgICAgWzAwMF0gLi4uMiAgMTIxMi43MzA5MTY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDoxSCBwcmV2X3BpZD0xNyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC5oNiAgMTIxMi43MzE2MzI6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyL3U6MEggcGlkPTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMxNjYxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWt3b3JrZXIvdTowSCBuZXh0X3BpZD03IG5leHRfcHJpbz0xMDAKLSAgICBrd29ya2VyL3U6MEgtNyAgICAgWzAwMF0gZC4uNiAgMTIxMi43MzE3MDI6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyLzA6MUggcGlkPTE3IHByaW89MTAwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgIGt3b3JrZXIvdTowSC03ICAgICBbMDAwXSAuLi4yICAxMjEyLjczMTcyMjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci91OjBIIHByZXZfcGlkPTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPUQgPT0+IG5leHRfY29tbT1rd29ya2VyLzA6MUggbmV4dF9waWQ9MTcgbmV4dF9wcmlvPTEwMAotICAgIGt3b3JrZXIvMDoxSC0xNyAgICBbMDAwXSAuLi4yICAxMjEyLjczMTgzMjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8wOjFIIHByZXZfcGlkPTE3IHByZXZfcHJpbz0xMDAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLmg2ICAxMjEyLjczMjY4NTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvdTowSCBwaWQ9NyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi43MzI3MTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci91OjBIIG5leHRfcGlkPTcgbmV4dF9wcmlvPTEwMAotICAgIGt3b3JrZXIvdTowSC03ICAgICBbMDAwXSBkLi42ICAxMjEyLjczMjc0Nzogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMDoxSCBwaWQ9MTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAga3dvcmtlci91OjBILTcgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMyNzY3OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyL3U6MEggcHJldl9waWQ9NyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoxSCBuZXh0X3BpZD0xNyBuZXh0X3ByaW89MTAwCi0gICAga3dvcmtlci8wOjFILTE3ICAgIFswMDBdIGQuLjQgIDEyMTIuNzMyODEwOiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjJIIHBpZD01NTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAga3dvcmtlci8wOjFILTE3ICAgIFswMDBdIC4uLjIgIDEyMTIuNzMyODI5OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyLzA6MUggcHJldl9waWQ9MTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1rd29ya2VyLzA6MkggbmV4dF9waWQ9NTU3IG5leHRfcHJpbz0xMDAKLSAgICBrd29ya2VyLzA6MkgtNTU3ICAgWzAwMF0gLi4uMiAgMTIxMi43MzI4NTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDoySCBwcmV2X3BpZD01NTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuaDQgIDEyMTIuODc2MjY2OiBzY2hlZF93YWtldXA6IGNvbW09UklMU2VuZGVyMCBwaWQ9MTM2NSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZE5oNCAgMTIxMi44NzYyODQ6IHNjaGVkX3dha2V1cDogY29tbT1NTUhhbmRsZXJUaHJlYWQgcGlkPTcyMzEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuODc2MzE2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPVJJTFNlbmRlcjAgbmV4dF9waWQ9MTM2NSBuZXh0X3ByaW89MTIwCi0gICAgICBSSUxTZW5kZXIwLTEzNjUgIFswMDBdIC4uLjIgIDEyMTIuODc2NDE1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1SSUxTZW5kZXIwIHByZXZfcGlkPTEzNjUgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1NTUhhbmRsZXJUaHJlYWQgbmV4dF9waWQ9NzIzMSBuZXh0X3ByaW89MTIwCi0gTU1IYW5kbGVyVGhyZWFkLTcyMzEgIFswMDBdIC4uLjIgIDEyMTIuODc2NDU0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1NTUhhbmRsZXJUaHJlYWQgcHJldl9waWQ9NzIzMSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC5oNCAgMTIxMy4wODk1Njk6IHNjaGVkX3dha2V1cDogY29tbT1UaHJlYWQtNjI1IHBpZD01NzUwIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkTmg0ICAxMjEzLjA4OTU4Nzogc2NoZWRfd2FrZXVwOiBjb21tPU1NSGFuZGxlclRocmVhZCBwaWQ9NzIzMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMy4wODk2MjI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09VGhyZWFkLTYyNSBuZXh0X3BpZD01NzUwIG5leHRfcHJpbz0xMjAKLSAgICAgIFRocmVhZC02MjUtNTc1MCAgWzAwMF0gLi4uMiAgMTIxMy4wODk4NDI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPVRocmVhZC02MjUgcHJldl9waWQ9NTc1MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPU1NSGFuZGxlclRocmVhZCBuZXh0X3BpZD03MjMxIG5leHRfcHJpbz0xMjAKLSBNTUhhbmRsZXJUaHJlYWQtNzIzMSAgWzAwMF0gLi4uMiAgMTIxMy4wODk4Nzk6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPU1NSGFuZGxlclRocmVhZCBwcmV2X3BpZD03MjMxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLmg0ICAxMjEzLjMyNzQzOTogc2NoZWRfd2FrZXVwOiBjb21tPXBhbmRvcmEuYW5kcm9pZCBwaWQ9NTM5NSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZE5oNCAgMTIxMy4zMjc0NTU6IHNjaGVkX3dha2V1cDogY29tbT1NTUhhbmRsZXJUaHJlYWQgcGlkPTcyMzEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTMuMzI3NDg3OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPU1NSGFuZGxlclRocmVhZCBuZXh0X3BpZD03MjMxIG5leHRfcHJpbz0xMjAKLSBNTUhhbmRsZXJUaHJlYWQtNzIzMSAgWzAwMF0gLi4uMiAgMTIxMy4zMjc1MTg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPU1NSGFuZGxlclRocmVhZCBwcmV2X3BpZD03MjMxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09cGFuZG9yYS5hbmRyb2lkIG5leHRfcGlkPTUzOTUgbmV4dF9wcmlvPTEyMAotIHBhbmRvcmEuYW5kcm9pZC01Mzk1ICBbMDAwXSBkLi40ICAxMjEzLjMyNzcxODogc2NoZWRfd2FrZXVwOiBjb21tPUJpbmRlcl8xIHBpZD03ODAgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gcGFuZG9yYS5hbmRyb2lkLTUzOTUgIFswMDBdIC4uLjIgIDEyMTMuMzI3NzM5OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1wYW5kb3JhLmFuZHJvaWQgcHJldl9waWQ9NTM5NSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UisgPT0+IG5leHRfY29tbT1CaW5kZXJfMSBuZXh0X3BpZD03ODAgbmV4dF9wcmlvPTEyMAotICAgICAgICBCaW5kZXJfMS03ODAgICBbMDAwXSAuLi4yICAxMjEzLjMyNzc2Mzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09QmluZGVyXzEgcHJldl9waWQ9NzgwIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09cGFuZG9yYS5hbmRyb2lkIG5leHRfcGlkPTUzOTUgbmV4dF9wcmlvPTEyMAotIHBhbmRvcmEuYW5kcm9pZC01Mzk1ICBbMDAwXSBkLi4zICAxMjEzLjMyNzc4MTogc2NoZWRfd2FrZXVwOiBjb21tPUJpbmRlcl8xIHBpZD03ODAgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gcGFuZG9yYS5hbmRyb2lkLTUzOTUgIFswMDBdIC4uLjIgIDEyMTMuMzI3Nzk1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1wYW5kb3JhLmFuZHJvaWQgcHJldl9waWQ9NTM5NSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UisgPT0+IG5leHRfY29tbT1CaW5kZXJfMSBuZXh0X3BpZD03ODAgbmV4dF9wcmlvPTEyMAotICAgICAgICBCaW5kZXJfMS03ODAgICBbMDAwXSBkLi40ICAxMjEzLjMyODA1Njogc2NoZWRfd2FrZXVwOiBjb21tPUJpbmRlcl8xIHBpZD04NzggcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgIEJpbmRlcl8xLTc4MCAgIFswMDBdIC4uLjIgIDEyMTMuMzI4MDk1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1CaW5kZXJfMSBwcmV2X3BpZD03ODAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1CaW5kZXJfMSBuZXh0X3BpZD04NzggbmV4dF9wcmlvPTEyMAotICAgICAgICBCaW5kZXJfMS04NzggICBbMDAwXSBkLi40ICAxMjEzLjMyODI2Mzogc2NoZWRfd2FrZXVwOiBjb21tPUJpbmRlcl8xIHBpZD03ODAgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgIEJpbmRlcl8xLTg3OCAgIFswMDBdIC4uLjIgIDEyMTMuMzI4MzQ1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1CaW5kZXJfMSBwcmV2X3BpZD04NzggcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1CaW5kZXJfMSBuZXh0X3BpZD03ODAgbmV4dF9wcmlvPTEyMAotICAgICAgICBCaW5kZXJfMS03ODAgICBbMDAwXSAuLi4yICAxMjEzLjMyODU1ODogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09QmluZGVyXzEgcHJldl9waWQ9NzgwIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09cGFuZG9yYS5hbmRyb2lkIG5leHRfcGlkPTUzOTUgbmV4dF9wcmlvPTEyMAotIHBhbmRvcmEuYW5kcm9pZC01Mzk1ICBbMDAwXSAuLi4yICAxMjEzLjMyODc0Mzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09cGFuZG9yYS5hbmRyb2lkIHByZXZfcGlkPTUzOTUgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuLjQgIDEyMTMuMzI4NzczOiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTMuMzI4NzkzOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAotICAgICBrc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEzLjMyODgyMTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMy4zMjg4NDY6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMy4zMjg4NjY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi0gICAgIGtzb2Z0aXJxZC8wLTMgICAgIFswMDBdIC4uLjIgIDEyMTMuMzI4ODkxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLi40ICAxMjEzLjMyODkxMzogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEzLjMyODkzMTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLSAgICAga3NvZnRpcnFkLzAtMyAgICAgWzAwMF0gLi4uMiAgMTIxMy4zMjg5NjQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuaDQgIDEyMTMuNDY1MTM4OiBzY2hlZF93YWtldXA6IGNvbW09YXRyYWNlIHBpZD0xNDQ0NiBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMy40NjUxNzE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09YXRyYWNlIG5leHRfcGlkPTE0NDQ2IG5leHRfcHJpbz0xMjAKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3Rlc3RfZGF0YS9hdHJhY2VfZGF0YV9zdHJpcHBlZCBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3Rlc3RfZGF0YS9hdHJhY2VfZGF0YV9zdHJpcHBlZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI2MWViZi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvYXRyYWNlX2RhdGFfc3RyaXBwZWQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotIyB0cmFjZXI6IG5vcAotIwotIyBlbnRyaWVzLWluLWJ1ZmZlci9lbnRyaWVzLXdyaXR0ZW46IDExNi8xMTYgICAjUDoxCi0jCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy0tLS0tPT4gaXJxcy1vZmYKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gXy0tLS09PiBuZWVkLXJlc2NoZWQKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAvIF8tLS09PiBoYXJkaXJxL3NvZnRpcnEKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgLyBfLS09PiBwcmVlbXB0LWRlcHRoCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8fCAvICAgICBkZWxheQotIyAgICAgICAgICAgVEFTSy1QSUQgICBDUFUjICB8fHx8ICAgIFRJTUVTVEFNUCAgRlVOQ1RJT04KLSMgICAgICAgICAgICAgIHwgfCAgICAgICB8ICAgfHx8fCAgICAgICB8ICAgICAgICAgfAotICAgICAgICAgIGF0cmFjZS0xNDQ0NiBbMDAwXSAuLi4yICAxMjEyLjQ2NTA2Mjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09YXRyYWNlIHByZXZfcGlkPTE0NDQ2IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLi40ICAxMjEyLjQ2NTA3NDogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEyLjQ2NTA4Mjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLSAgICAga3NvZnRpcnFkLzAtMyAgICAgWzAwMF0gLi4uMiAgMTIxMi40NjUwOTI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuLjQgIDEyMTIuNDY1MTAyOiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNDY1MTI2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAotICAgICBrc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEyLjQ2NTEzMjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMi40NjUxMzk6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi40NjUxNDU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi0gICAgIGtzb2Z0aXJxZC8wLTMgICAgIFswMDBdIC4uLjIgIDEyMTIuNDY1MjI3OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLmg1ICAxMjEyLjQ2NTI5Nzogc2NoZWRfd2FrZXVwOiBjb21tPWFkYmQgcGlkPTIxMiBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi40NjUzMDY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09YWRiZCBuZXh0X3BpZD0yMTIgbmV4dF9wcmlvPTEyMAotICAgICAgICAgICAgYWRiZC0yMTIgICBbMDAwXSBkLi40ICAxMjEyLjQ2NTMyOTogc2NoZWRfd2FrZXVwOiBjb21tPWFkYmQgcGlkPTIwOSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICAgIGFkYmQtMjEyICAgWzAwMF0gLi4uMiAgMTIxMi40NjUzNDg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWFkYmQgcHJldl9waWQ9MjEyIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09YWRiZCBuZXh0X3BpZD0yMDkgbmV4dF9wcmlvPTEyMAotICAgICAgICAgICAgYWRiZC0yMDkgICBbMDAwXSBkLi40ICAxMjEyLjQ2NTM5NTogc2NoZWRfd2FrZXVwOiBjb21tPWFkYmQgcGlkPTIxMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICAgIGFkYmQtMjA5ICAgWzAwMF0gLi4uMiAgMTIxMi40NjU0NDE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWFkYmQgcHJldl9waWQ9MjA5IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09YWRiZCBuZXh0X3BpZD0yMTEgbmV4dF9wcmlvPTEyMAotICAgICAgICAgICAgYWRiZC0yMTEgICBbMDAwXSAuLi4yICAxMjEyLjQ2NTQ0ODogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09YWRiZCBwcmV2X3BpZD0yMTEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuaDUgIDEyMTIuNTc0NTU0OiBzY2hlZF93YWtldXA6IGNvbW09c2Vuc29ycy5xY29tIHBpZD0yOTIgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNTc0NTY2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPXNlbnNvcnMucWNvbSBuZXh0X3BpZD0yOTIgbmV4dF9wcmlvPTEyMAotICAgIHNlbnNvcnMucWNvbS0yOTIgICBbMDAwXSAuLi4yICAxMjEyLjU3NDY2NTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c2Vuc29ycy5xY29tIHByZXZfcGlkPTI5MiBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXNlbnNvcnMucWNvbSBuZXh0X3BpZD0xNDQ0NyBuZXh0X3ByaW89MTIwCi0gICAgc2Vuc29ycy5xY29tLTE0NDQ3IFswMDBdIGQuLjQgIDEyMTIuNTc0Nzk3OiBzY2hlZF93YWtldXA6IGNvbW09c2Vuc29ycy5xY29tIHBpZD0xNTkzIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgIHNlbnNvcnMucWNvbS0xNDQ0NyBbMDAwXSAuLi4yICAxMjEyLjU3NDgwMjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c2Vuc29ycy5xY29tIHByZXZfcGlkPTE0NDQ3IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SKyA9PT4gbmV4dF9jb21tPXNlbnNvcnMucWNvbSBuZXh0X3BpZD0xNTkzIG5leHRfcHJpbz0xMjAKLSAgICBzZW5zb3JzLnFjb20tMTU5MyAgWzAwMF0gLi4uMiAgMTIxMi41NzQ4MTk6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD0xNTkzIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09c2Vuc29ycy5xY29tIG5leHRfcGlkPTE0NDQ3IG5leHRfcHJpbz0xMjAKLSAgICBzZW5zb3JzLnFjb20tMTQ0NDcgWzAwMF0gZC4uMyAgMTIxMi41NzQ4MjM6IHNjaGVkX3dha2V1cDogY29tbT1zZW5zb3JzLnFjb20gcGlkPTE1OTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgc2Vuc29ycy5xY29tLTE0NDQ3IFswMDBdIC4uLjIgIDEyMTIuNTc0ODI3OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zZW5zb3JzLnFjb20gcHJldl9waWQ9MTQ0NDcgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIrID09PiBuZXh0X2NvbW09c2Vuc29ycy5xY29tIG5leHRfcGlkPTE1OTMgbmV4dF9wcmlvPTEyMAotICAgIHNlbnNvcnMucWNvbS0xNTkzICBbMDAwXSBkLi40ICAxMjEyLjU3NDg2NTogc2NoZWRfd2FrZXVwOiBjb21tPXNlbnNvcnMucWNvbSBwaWQ9NzYwIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgIHNlbnNvcnMucWNvbS0xNTkzICBbMDAwXSAuLi4yICAxMjEyLjU3NDg3Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c2Vuc29ycy5xY29tIHByZXZfcGlkPTE1OTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zZW5zb3JzLnFjb20gbmV4dF9waWQ9NzYwIG5leHRfcHJpbz0xMjAKLSAgICBzZW5zb3JzLnFjb20tNzYwICAgWzAwMF0gZC4uNCAgMTIxMi41NzQ5MDU6IHNjaGVkX3dha2V1cDogY29tbT1zeXN0ZW1fc2VydmVyIHBpZD03ODIgcHJpbz0xMTggc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgc2Vuc29ycy5xY29tLTc2MCAgIFswMDBdIC4uLjIgIDEyMTIuNTc0OTE3OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zZW5zb3JzLnFjb20gcHJldl9waWQ9NzYwIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3lzdGVtX3NlcnZlciBuZXh0X3BpZD03ODIgbmV4dF9wcmlvPTExOAotICAgc3lzdGVtX3NlcnZlci03ODIgICBbMDAwXSBkLi40ICAxMjEyLjU3NDk4MTogc2NoZWRfd2FrZXVwOiBjb21tPXN5c3RlbV9zZXJ2ZXIgcGlkPTc4NSBwcmlvPTExOCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgIHN5c3RlbV9zZXJ2ZXItNzgyICAgWzAwMF0gLi4uMiAgMTIxMi41NzUwMDk6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN5c3RlbV9zZXJ2ZXIgcHJldl9waWQ9NzgyIHByZXZfcHJpbz0xMTggcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3lzdGVtX3NlcnZlciBuZXh0X3BpZD03ODUgbmV4dF9wcmlvPTExOAotICAgc3lzdGVtX3NlcnZlci03ODUgICBbMDAwXSAuLi4yICAxMjEyLjU3NTA0NTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3lzdGVtX3NlcnZlciBwcmV2X3BpZD03ODUgcHJldl9wcmlvPTExOCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zZW5zb3JzLnFjb20gbmV4dF9waWQ9MTQ0NDcgbmV4dF9wcmlvPTEyMAotICAgIHNlbnNvcnMucWNvbS0xNDQ0NyBbMDAwXSAuLi4zICAxMjEyLjU3NTE0Mzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c2Vuc29ycy5xY29tIHByZXZfcGlkPTE0NDQ3IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT14ID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLi40ICAxMjEyLjU3NTE1Mzogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEyLjU3NTE1OTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLSAgICAga3NvZnRpcnFkLzAtMyAgICAgWzAwMF0gLi4uMiAgMTIxMi41NzUxNjc6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuLjQgIDEyMTIuNTc1MTc1OiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNTc1MTgxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAotICAgICBrc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEyLjU3NTE4ODogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMi41NzUxOTU6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi41NzUyMDE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi0gICAgIGtzb2Z0aXJxZC8wLTMgICAgIFswMDBdIC4uLjIgIDEyMTIuNTc1MjExOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLmg0ICAxMjEyLjY0OTYwMTogc2NoZWRfd2FrZXVwOiBjb21tPU1NSGFuZGxlclRocmVhZCBwaWQ9NzIzMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi42NDk2MTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09TU1IYW5kbGVyVGhyZWFkIG5leHRfcGlkPTcyMzEgbmV4dF9wcmlvPTEyMAotIE1NSGFuZGxlclRocmVhZC03MjMxICBbMDAwXSAuLi4yICAxMjEyLjY0OTYzMDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09TU1IYW5kbGVyVGhyZWFkIHByZXZfcGlkPTcyMzEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuaDYgIDEyMTIuNzI5NTM5OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci91OjEgcGlkPTIxIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkTnM2ICAxMjEyLjcyOTU1MDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMDoySCBwaWQ9NTU3IHByaW89MTAwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEyLjcyOTU2Mzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyL3U6MSBuZXh0X3BpZD0yMSBuZXh0X3ByaW89MTIwCi0gICAgIGt3b3JrZXIvdToxLTIxICAgIFswMDBdIGQuLjUgIDEyMTIuNzI5NTcxOiBzY2hlZF93YWtldXA6IGNvbW09bXBkZWNpc2lvbiBwaWQ9MjA0NiBwcmlvPTExMyBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAga3dvcmtlci91OjEtMjEgICAgWzAwMF0gLi4uMiAgMTIxMi43Mjk1Nzg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvdToxIHByZXZfcGlkPTIxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjJIIG5leHRfcGlkPTU1NyBuZXh0X3ByaW89MTAwCi0gICAga3dvcmtlci8wOjJILTU1NyAgIFswMDBdIGQuLjQgIDEyMTIuNzI5NTk3OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjFIIHBpZD0xNyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICBrd29ya2VyLzA6MkgtNTU3ICAgWzAwMF0gLi4uMiAgMTIxMi43Mjk2MDA6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDoySCBwcmV2X3BpZD01NTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPUQgPT0+IG5leHRfY29tbT1tcGRlY2lzaW9uIG5leHRfcGlkPTIwNDYgbmV4dF9wcmlvPTExMwotICAgICAgbXBkZWNpc2lvbi0yMDQ2ICBbMDAwXSAuLi4yICAxMjEyLjcyOTgwMTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09bXBkZWNpc2lvbiBwcmV2X3BpZD0yMDQ2IHByZXZfcHJpbz0xMTMgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjFIIG5leHRfcGlkPTE3IG5leHRfcHJpbz0xMDAKLSAgICBrd29ya2VyLzA6MUgtMTcgICAgWzAwMF0gLi4uMiAgMTIxMi43MzAxMDQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDoxSCBwcmV2X3BpZD0xNyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMi43MzAxMzQ6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi43MzAxNTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi0gICAgIGtzb2Z0aXJxZC8wLTMgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMwMTc2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLi40ICAxMjEyLjczMDIwMTogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEyLjczMDIyMDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLSAgICAga3NvZnRpcnFkLzAtMyAgICAgWzAwMF0gLi4uMiAgMTIxMi43MzAyNDE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuLjQgIDEyMTIuNzMwMjYyOiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMwMjgwOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAotICAgICBrc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEyLjczMDMwMzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC5oNiAgMTIxMi43MzA2Mzg6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyL3U6MEggcGlkPTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMwNjY5OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWt3b3JrZXIvdTowSCBuZXh0X3BpZD03IG5leHRfcHJpbz0xMDAKLSAgICBrd29ya2VyL3U6MEgtNyAgICAgWzAwMF0gZC4uNiAgMTIxMi43MzA3MDc6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyLzA6MUggcGlkPTE3IHByaW89MTAwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgIGt3b3JrZXIvdTowSC03ICAgICBbMDAwXSAuLi4yICAxMjEyLjczMDcyODogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci91OjBIIHByZXZfcGlkPTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPUQgPT0+IG5leHRfY29tbT1rd29ya2VyLzA6MUggbmV4dF9waWQ9MTcgbmV4dF9wcmlvPTEwMAotICAgIGt3b3JrZXIvMDoxSC0xNyAgICBbMDAwXSAuLi4yICAxMjEyLjczMDkxNjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8wOjFIIHByZXZfcGlkPTE3IHByZXZfcHJpbz0xMDAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLmg2ICAxMjEyLjczMTYzMjogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvdTowSCBwaWQ9NyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi43MzE2NjE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci91OjBIIG5leHRfcGlkPTcgbmV4dF9wcmlvPTEwMAotICAgIGt3b3JrZXIvdTowSC03ICAgICBbMDAwXSBkLi42ICAxMjEyLjczMTcwMjogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMDoxSCBwaWQ9MTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAga3dvcmtlci91OjBILTcgICAgIFswMDBdIC4uLjIgIDEyMTIuNzMxNzIyOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyL3U6MEggcHJldl9waWQ9NyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoxSCBuZXh0X3BpZD0xNyBuZXh0X3ByaW89MTAwCi0gICAga3dvcmtlci8wOjFILTE3ICAgIFswMDBdIC4uLjIgIDEyMTIuNzMxODMyOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyLzA6MUggcHJldl9waWQ9MTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPUQgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuaDYgIDEyMTIuNzMyNjg1OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci91OjBIIHBpZD03IHByaW89MTAwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEyLjczMjcxNDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyL3U6MEggbmV4dF9waWQ9NyBuZXh0X3ByaW89MTAwCi0gICAga3dvcmtlci91OjBILTcgICAgIFswMDBdIGQuLjYgIDEyMTIuNzMyNzQ3OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjFIIHBpZD0xNyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICBrd29ya2VyL3U6MEgtNyAgICAgWzAwMF0gLi4uMiAgMTIxMi43MzI3Njc6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvdTowSCBwcmV2X3BpZD03IHByZXZfcHJpbz0xMDAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjFIIG5leHRfcGlkPTE3IG5leHRfcHJpbz0xMDAKLSAgICBrd29ya2VyLzA6MUgtMTcgICAgWzAwMF0gZC4uNCAgMTIxMi43MzI4MTA6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyLzA6MkggcGlkPTU1NyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICBrd29ya2VyLzA6MUgtMTcgICAgWzAwMF0gLi4uMiAgMTIxMi43MzI4Mjk6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDoxSCBwcmV2X3BpZD0xNyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoySCBuZXh0X3BpZD01NTcgbmV4dF9wcmlvPTEwMAotICAgIGt3b3JrZXIvMDoySC01NTcgICBbMDAwXSAuLi4yICAxMjEyLjczMjg1NDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8wOjJIIHByZXZfcGlkPTU1NyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC5oNCAgMTIxMi44NzYyNjY6IHNjaGVkX3dha2V1cDogY29tbT1SSUxTZW5kZXIwIHBpZD0xMzY1IHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkTmg0ICAxMjEyLjg3NjI4NDogc2NoZWRfd2FrZXVwOiBjb21tPU1NSGFuZGxlclRocmVhZCBwaWQ9NzIzMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMi44NzYzMTY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09UklMU2VuZGVyMCBuZXh0X3BpZD0xMzY1IG5leHRfcHJpbz0xMjAKLSAgICAgIFJJTFNlbmRlcjAtMTM2NSAgWzAwMF0gLi4uMiAgMTIxMi44NzY0MTU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPVJJTFNlbmRlcjAgcHJldl9waWQ9MTM2NSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPU1NSGFuZGxlclRocmVhZCBuZXh0X3BpZD03MjMxIG5leHRfcHJpbz0xMjAKLSBNTUhhbmRsZXJUaHJlYWQtNzIzMSAgWzAwMF0gLi4uMiAgMTIxMi44NzY0NTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPU1NSGFuZGxlclRocmVhZCBwcmV2X3BpZD03MjMxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLmg0ICAxMjEzLjA4OTU2OTogc2NoZWRfd2FrZXVwOiBjb21tPVRocmVhZC02MjUgcGlkPTU3NTAgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGROaDQgIDEyMTMuMDg5NTg3OiBzY2hlZF93YWtldXA6IGNvbW09TU1IYW5kbGVyVGhyZWFkIHBpZD03MjMxIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEzLjA4OTYyMjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1UaHJlYWQtNjI1IG5leHRfcGlkPTU3NTAgbmV4dF9wcmlvPTEyMAotICAgICAgVGhyZWFkLTYyNS01NzUwICBbMDAwXSAuLi4yICAxMjEzLjA4OTg0Mjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09VGhyZWFkLTYyNSBwcmV2X3BpZD01NzUwIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09TU1IYW5kbGVyVGhyZWFkIG5leHRfcGlkPTcyMzEgbmV4dF9wcmlvPTEyMAotIE1NSGFuZGxlclRocmVhZC03MjMxICBbMDAwXSAuLi4yICAxMjEzLjA4OTg3OTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09TU1IYW5kbGVyVGhyZWFkIHByZXZfcGlkPTcyMzEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuaDQgIDEyMTMuMzI3NDM5OiBzY2hlZF93YWtldXA6IGNvbW09cGFuZG9yYS5hbmRyb2lkIHBpZD01Mzk1IHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkTmg0ICAxMjEzLjMyNzQ1NTogc2NoZWRfd2FrZXVwOiBjb21tPU1NSGFuZGxlclRocmVhZCBwaWQ9NzIzMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMy4zMjc0ODc6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09TU1IYW5kbGVyVGhyZWFkIG5leHRfcGlkPTcyMzEgbmV4dF9wcmlvPTEyMAotIE1NSGFuZGxlclRocmVhZC03MjMxICBbMDAwXSAuLi4yICAxMjEzLjMyNzUxODogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09TU1IYW5kbGVyVGhyZWFkIHByZXZfcGlkPTcyMzEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1wYW5kb3JhLmFuZHJvaWQgbmV4dF9waWQ9NTM5NSBuZXh0X3ByaW89MTIwCi0gcGFuZG9yYS5hbmRyb2lkLTUzOTUgIFswMDBdIGQuLjQgIDEyMTMuMzI3NzE4OiBzY2hlZF93YWtldXA6IGNvbW09QmluZGVyXzEgcGlkPTc4MCBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSBwYW5kb3JhLmFuZHJvaWQtNTM5NSAgWzAwMF0gLi4uMiAgMTIxMy4zMjc3Mzk6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXBhbmRvcmEuYW5kcm9pZCBwcmV2X3BpZD01Mzk1IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SKyA9PT4gbmV4dF9jb21tPUJpbmRlcl8xIG5leHRfcGlkPTc4MCBuZXh0X3ByaW89MTIwCi0gICAgICAgIEJpbmRlcl8xLTc4MCAgIFswMDBdIC4uLjIgIDEyMTMuMzI3NzYzOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1CaW5kZXJfMSBwcmV2X3BpZD03ODAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPUQgPT0+IG5leHRfY29tbT1wYW5kb3JhLmFuZHJvaWQgbmV4dF9waWQ9NTM5NSBuZXh0X3ByaW89MTIwCi0gcGFuZG9yYS5hbmRyb2lkLTUzOTUgIFswMDBdIGQuLjMgIDEyMTMuMzI3NzgxOiBzY2hlZF93YWtldXA6IGNvbW09QmluZGVyXzEgcGlkPTc4MCBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSBwYW5kb3JhLmFuZHJvaWQtNTM5NSAgWzAwMF0gLi4uMiAgMTIxMy4zMjc3OTU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXBhbmRvcmEuYW5kcm9pZCBwcmV2X3BpZD01Mzk1IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SKyA9PT4gbmV4dF9jb21tPUJpbmRlcl8xIG5leHRfcGlkPTc4MCBuZXh0X3ByaW89MTIwCi0gICAgICAgIEJpbmRlcl8xLTc4MCAgIFswMDBdIGQuLjQgIDEyMTMuMzI4MDU2OiBzY2hlZF93YWtldXA6IGNvbW09QmluZGVyXzEgcGlkPTg3OCBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgQmluZGVyXzEtNzgwICAgWzAwMF0gLi4uMiAgMTIxMy4zMjgwOTU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPUJpbmRlcl8xIHByZXZfcGlkPTc4MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPUJpbmRlcl8xIG5leHRfcGlkPTg3OCBuZXh0X3ByaW89MTIwCi0gICAgICAgIEJpbmRlcl8xLTg3OCAgIFswMDBdIGQuLjQgIDEyMTMuMzI4MjYzOiBzY2hlZF93YWtldXA6IGNvbW09QmluZGVyXzEgcGlkPTc4MCBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgQmluZGVyXzEtODc4ICAgWzAwMF0gLi4uMiAgMTIxMy4zMjgzNDU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPUJpbmRlcl8xIHByZXZfcGlkPTg3OCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPUJpbmRlcl8xIG5leHRfcGlkPTc4MCBuZXh0X3ByaW89MTIwCi0gICAgICAgIEJpbmRlcl8xLTc4MCAgIFswMDBdIC4uLjIgIDEyMTMuMzI4NTU4OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1CaW5kZXJfMSBwcmV2X3BpZD03ODAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1wYW5kb3JhLmFuZHJvaWQgbmV4dF9waWQ9NTM5NSBuZXh0X3ByaW89MTIwCi0gcGFuZG9yYS5hbmRyb2lkLTUzOTUgIFswMDBdIC4uLjIgIDEyMTMuMzI4NzQzOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1wYW5kb3JhLmFuZHJvaWQgcHJldl9waWQ9NTM5NSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC4uNCAgMTIxMy4zMjg3NzM6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gLi4uMiAgMTIxMy4zMjg3OTM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi0gICAgIGtzb2Z0aXJxZC8wLTMgICAgIFswMDBdIC4uLjIgIDEyMTMuMzI4ODIxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSBkLi40ICAxMjEzLjMyODg0Njogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEzLjMyODg2Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLSAgICAga3NvZnRpcnFkLzAtMyAgICAgWzAwMF0gLi4uMiAgMTIxMy4zMjg4OTE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIGQuLjQgIDEyMTMuMzI4OTEzOiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgIFswMDBdIC4uLjIgIDEyMTMuMzI4OTMxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAotICAgICBrc29mdGlycWQvMC0zICAgICBbMDAwXSAuLi4yICAxMjEzLjMyODk2NDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgWzAwMF0gZC5oNCAgMTIxMy40NjUxMzg6IHNjaGVkX3dha2V1cDogY29tbT1hdHJhY2UgcGlkPTE0NDQ2IHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICBbMDAwXSAuLi4yICAxMjEzLjQ2NTE3MTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1hdHJhY2UgbmV4dF9waWQ9MTQ0NDYgbmV4dF9wcmlvPTEyMApkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdGVzdF9kYXRhL2F0cmFjZV9leHRyYWN0ZWRfdGdpZHMgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvYXRyYWNlX2V4dHJhY3RlZF90Z2lkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA4NGZiYS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvYXRyYWNlX2V4dHJhY3RlZF90Z2lkcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsnMjI1MDMnOiAnMTgwODknLCAnMTg2OCc6ICcxNzcyJywgJzEwNDU4JzogJzE3NzInLCAnNDI5JzogJzQyOScsICcyMzQnOiAnMjM0JywgJzE4OTU2JzogJzE4OTQ5JywgJzE4OTU3JzogJzE4OTQ5JywgJzE4OTU0JzogJzE4OTQ5JywgJzE4OTU1JzogJzE4OTQ5JywgJzU5ODAnOiAnMTM3MCcsICczNDQnOiAnMzQ0JywgJzM0NSc6ICczNDUnLCAnMzQ2JzogJzM0NicsICczNDAnOiAnMzQwJywgJzM0MSc6ICczNDEnLCAnMzQyJzogJzM0MicsICczNDMnOiAnMzQzJywgJzM3MjMnOiAnNDUwJywgJzIyMTg0JzogJzE3NjAnLCAnMzQ5JzogJzM0OScsICc0MTEnOiAnNDA2JywgJzI5MTInOiAnMTQ4MycsICcyOTEzJzogJzE0ODMnLCAnMTc5Myc6ICcxNzcyJywgJzE3OTAnOiAnMTc3MicsICcxNzk3JzogJzE0ODMnLCAnMTQ5MCc6ICcxMzkzJywgJzEzOTcnOiAnMTM5MycsICcxNDkyJzogJzE0ODMnLCAnMTQ5Myc6ICcxNDgzJywgJzE0OTQnOiAnMTQ4MycsICcxNDk1JzogJzE0ODMnLCAnMTQ5Nic6ICc4NTgnLCAnMTQ5Nyc6ICcxNDgzJywgJzE0OTgnOiAnMTQ4MycsICcxODY4Nic6ICc0NTQnLCAnMjQzMDQnOiAnMjQzMDQnLCAnMTM5NSc6ICcxMzkzJywgJzEwNjgnOiAnMTA2OCcsICc0MjInOiAnNDIyJywgJzE3MDQnOiAnMTUwMCcsICc1MjYyJzogJzE3NzInLCAnNDI1JzogJzQyNScsICc2NjU0JzogJzEzNzAnLCAnMjUyMjQnOiAnMjUyMjQnLCAnNDI0JzogJzQyNCcsICc4NjgnOiAnODU4JywgJzE2NjknOiAnMTY1NScsICcxNjY4JzogJzE2NTUnLCAnMTY2Nyc6ICcxNjU1JywgJzE2NjYnOiAnMTY1NScsICcyOTQnOiAnMjk0JywgJzI5NSc6ICcyOTUnLCAnMTY2Myc6ICcxNjU1JywgJzI3MDgnOiAnMjU3OScsICcxNjYwJzogJzE2NTUnLCAnMTEyOSc6ICcxMTI0JywgJzE2MjgnOiAnMTQ4MycsICczNzc2JzogJzg1OCcsICcxMDgxJzogJzEwNzknLCAnMTA4MCc6ICcxMDc5JywgJzExMjQnOiAnMTEyNCcsICcxMTI3JzogJzExMjQnLCAnMjcwJzogJzI3MCcsICcyNzEnOiAnMjcxJywgJzI3Mic6ICcyNzInLCAnMjczJzogJzI3MycsICcyNzQnOiAnMjc0JywgJzI3NSc6ICcyNzUnLCAnMjc2JzogJzI3NicsICcyNzcnOiAnMjc3JywgJzI3OCc6ICcyNzgnLCAnMjc5JzogJzI3OScsICcyNTExNSc6ICcyNTExNScsICc1ODMnOiAnNDQ0JywgJzMzODYnOiAnODU4JywgJzExNjg5JzogJzgyNjknLCAnMjU0NCc6ICcxNjU1JywgJzI1NDgnOiAnMTY1NScsICc1MjQnOiAnNDUwJywgJzUyNSc6ICc0NTAnLCAnNTI2JzogJzQ1MCcsICc1MjcnOiAnNDUwJywgJzUyMCc6ICc0NTAnLCAnNTIxJzogJzQ1MCcsICc1MjInOiAnNDUwJywgJzUyMyc6ICc0NTAnLCAnMTQwMyc6ICcxMzkzJywgJzE0MDInOiAnMTM5MycsICcxMDE2JzogJzQ0NScsICcxMDE3JzogJzQ0NScsICcxNDA3JzogJzEzOTMnLCAnMTQwNic6ICcxMzkzJywgJzE0MDUnOiAnMTM5MycsICcxMDEzJzogJzQ0NScsICczMDMnOiAnMzAzJywgJzEzMzknOiAnODU4JywgJzc1MTYnOiAnODU4JywgJzEyMzInOiAnMTEyNCcsICcyNDQ1JzogJzE3NjAnLCAnMjUyMjcnOiAnMjUyMjcnLCAnNDQyJzogJzQ0MicsICcyNzYxJzogJzI3NjEnLCAnNDIxJzogJzQyMScsICc0NDcnOiAnNDQ3JywgJzQ0Nic6ICc0NDYnLCAnNDQ1JzogJzQ0NScsICczMDUnOiAnMzA1JywgJzEwOCc6ICcxMDgnLCAnMTA5JzogJzEwOScsICcxODEwMSc6ICcxODA4OScsICcxODEwMCc6ICcxODA4OScsICc4MjgwJzogJzgyNjknLCAnMjEwMic6ICcxNzcyJywgJzEwMic6ICcxMDInLCAnMTAzJzogJzEwMycsICcxMDAnOiAnMTAwJywgJzEwMSc6ICcxMDEnLCAnMTA2JzogJzEwNicsICcxMDcnOiAnMTA3JywgJzEwNCc6ICcxMDQnLCAnMTA1JzogJzEwNScsICcxODQ5JzogJzE1MDAnLCAnMTg0OCc6ICcxNTAwJywgJzkwNic6ICc5MDYnLCAnOTA3JzogJzkwNycsICc5MDUnOiAnOTA1JywgJzMzJzogJzMzJywgJzE4NDInOiAnMTUwMCcsICczMSc6ICczMScsICczMCc6ICczMCcsICcxODQ3JzogJzE1MDAnLCAnMTUzNic6ICc4NTgnLCAnMTUzNSc6ICcxMzkzJywgJzI0Nic6ICcyNDYnLCAnMTUzMyc6ICcxMzkzJywgJzE1MzInOiAnMTM5MycsICcxNTMxJzogJzE1MDAnLCAnMjE5MjAnOiAnMTM3MCcsICcyNDI4MSc6ICcyNDI4MScsICc0MzcnOiAnNDM3JywgJzQzNCc6ICc0MzQnLCAnMTUxMic6ICcxNTAwJywgJzIxNjEnOiAnMTM3MCcsICcxOTQwJzogJzE3NzInLCAnMTUzOSc6ICcxNDU4JywgJzIxNjInOiAnMTc3MicsICcyNjE1JzogJzE2NTUnLCAnMjYxNCc6ICcxNzYwJywgJzI2MTInOiAnMTc2MCcsICcyNjExJzogJzI1NzknLCAnNDIzJzogJzQyMycsICczMzUnOiAnMzM1JywgJzMzNyc6ICczMzcnLCAnMTg0NTAnOiAnMTgwODknLCAnMzMxJzogJzMzMScsICcxOTE4Nyc6ICcxMzcwJywgJzMzMyc6ICczMzMnLCAnMzMyJzogJzMzMicsICc1MTM2JzogJzE1MDAnLCAnMjMyNDYnOiAnMjMyMzMnLCAnMjA4Nyc6ICcxNzcyJywgJzIzMjQwJzogJzIzMjMzJywgJzIzMjQxJzogJzIzMjMzJywgJzIzMjQyJzogJzIzMjMzJywgJzIzMjQzJzogJzIzMjMzJywgJzg1NCc6ICc0MzknLCAnODUwJzogJzQzOScsICc4NTEnOiAnNDM5JywgJzg1Mic6ICc0MzknLCAnODUzJzogJzQzOScsICc4NTgnOiAnODU4JywgJzg4JzogJzg4JywgJzEzNzUnOiAnODU4JywgJzU0MSc6ICc0NDInLCAnMjY4OCc6ICcyNTc5JywgJzYnOiAnNicsICcyNjg0JzogJzI1NzknLCAnMjY4NSc6ICcyNTc5JywgJzIzMzk4JzogJzExMjQnLCAnMjY4Myc6ICcyNTc5JywgJzQ5JzogJzQ5JywgJzg0Nic6ICc0MzknLCAnMTM3NCc6ICc4NTgnLCAnMzU1NSc6ICc4NTgnLCAnNTQyNCc6ICc0NDUnLCAnOTknOiAnOTknLCAnOTgnOiAnOTgnLCAnMjI0NSc6ICc4NTgnLCAnOTEnOiAnOTEnLCAnOTAnOiAnOTAnLCAnOTMnOiAnOTMnLCAnOTInOiAnOTInLCAnOTUnOiAnOTUnLCAnOTQnOiAnOTQnLCAnMTQxNDMnOiAnMTc2MCcsICc5Nic6ICc5NicsICcxNjIzJzogJzE0NzEnLCAnMTYyMic6ICcxNDgzJywgJzE2MjEnOiAnMTQ4MycsICc1MTgxJzogJzE1MDAnLCAnMTYyNyc6ICcxNDgzJywgJzI1NzgnOiAnMjU1OCcsICcxNjI1JzogJzE0ODMnLCAnMTYyNCc6ICcxNDgzJywgJzM0OCc6ICczNDgnLCAnNTE4OSc6ICcxNTAwJywgJzU0MjcnOiAnNDQ1JywgJzQ0NjknOiAnNDQyJywgJzIwMjI4JzogJzE4NjQ5JywgJzU1OSc6ICc0NDInLCAnNzc0JzogJzQwNScsICcxMTE4MCc6ICc4NTgnLCAnMjI3NTgnOiAnMTg2NDknLCAnMTg2NzAnOiAnMTg2NDknLCAnMjM4JzogJzIzOCcsICcyMzknOiAnMjM5JywgJzI0MzM3JzogJzExMjQnLCAnMjM1JzogJzIzNScsICcyMjc1MSc6ICcxODY0OScsICcyMjc1MCc6ICcxODY0OScsICcyMzYnOiAnMjM2JywgJzIyNzUyJzogJzE4NjQ5JywgJzIyNzU1JzogJzE4NjQ5JywgJzIzMSc6ICcyMzEnLCAnMjMyJzogJzIzMicsICcyMjc1Nic6ICcxODY0OScsICcxMDUwJzogJzg1OCcsICcxMDUxJzogJzQ0NScsICcxMDUyJzogJzg1OCcsICcyMzcnOiAnMjM3JywgJzIzMCc6ICcyMzAnLCAnMjMzJzogJzIzMycsICcyNzA1JzogJzI1NzknLCAnMTY5Mic6ICcxMzcwJywgJzE2OTMnOiAnMTUwMCcsICcyNzA0JzogJzI1NzknLCAnMTc1NCc6ICcxNjU1JywgJzU5MjgnOiAnODU4JywgJzUwMic6ICc0NTAnLCAnMTU3OSc6ICcxNDgzJywgJzYxNCc6ICc0NTcnLCAnMTIyODEnOiAnMTc3MicsICc0NDY4JzogJzQ0MicsICcyNTY1JzogJzI1NTgnLCAnMTg4Nyc6ICc0MDUnLCAnMTg4Nic6ICcxNTAwJywgJzE4ODUnOiAnMTc2MCcsICcxNDM4JzogJzQ0NScsICcxODgyJzogJzE3NzInLCAnMTEwNDgnOiAnMTM3MCcsICcyMTIzJzogJzEzNzAnLCAnODAnOiAnODAnLCAnMTQ5MSc6ICcxNDcxJywgJzIwODInOiAnMTM3MCcsICczMTE2JzogJzE3NzInLCAnMzExNCc6ICcxMzcwJywgJzEyODgnOiAnMTEyNCcsICcxMDI4JzogJzg1OCcsICcxNDcwJzogJzE0NTgnLCAnMTQ3MSc6ICcxNDcxJywgJzE0NzYnOiAnMTQ1OCcsICcxNDc1JzogJzE0NzEnLCAnMTQ3OCc6ICcxNDcxJywgJzE0NzknOiAnMTQ3MScsICc2ODAnOiAnNDUyJywgJzIzMjAwJzogJzIzMTg3JywgJzIzMjAxJzogJzIzMTg3JywgJzI2NTknOiAnMjU3OScsICcyNzExJzogJzI1NzknLCAnMjcxNic6ICcyNTc5JywgJzEzMDEnOiAnMTEyNCcsICcyMzIwNic6ICcyMzE4NycsICcyNzE1JzogJzI1NzknLCAnMjY1Myc6ICcyNTc5JywgJzI2NTInOiAnMjU3OScsICcyNjUxJzogJzI1NzknLCAnMjY1MCc6ICcyNTc5JywgJzI2NTcnOiAnMjU3OScsICcyNjU1JzogJzI1NzknLCAnODczJzogJzg3MScsICcyMzU5MCc6ICc0NTMnLCAnMjM1OTEnOiAnNDUzJywgJzIzNTkzJzogJzQ1MycsICc0OTgnOiAnNDUwJywgJzQ5OSc6ICc0MzYnLCAnMTM1JzogJzEzNScsICcxMzQnOiAnMTM0JywgJzQ5NCc6ICc0NTAnLCAnNDk1JzogJzQ1MCcsICcyMTgnOiAnMjE4JywgJzQ5Nyc6ICc0NTAnLCAnNDkwJzogJzQ1MCcsICc0OTEnOiAnNDUwJywgJzQ5Mic6ICc0NTAnLCAnNDkzJzogJzQ1MCcsICcyNCc6ICcyNCcsICcyMDM3JzogJzE3NzInLCAnMjYnOiAnMjYnLCAnMjcnOiAnMjcnLCAnMTgzNic6ICcxNjU1JywgJzIyJzogJzIyJywgJzIzJzogJzIzJywgJzE4MzgnOiAnMTY1NScsICcxODM5JzogJzE3NzInLCAnMjgnOiAnMjgnLCAnMjknOiAnMjknLCAnMTM3MCc6ICcxMzcwJywgJzQwNSc6ICc0MDUnLCAnNDA0JzogJzQwNCcsICc0MDMnOiAnNDAzJywgJzQwMic6ICc0MDInLCAnMTM3Nyc6ICcxMzcwJywgJzQ1MSc6ICc0NTEnLCAnMTM3OCc6ICcxMzcwJywgJzQ1Mic6ICc0NTInLCAnNDUzJzogJzQ1MycsICc4NzknOiAnODc3JywgJzMnOiAnMycsICc0NTQnOiAnNDU0JywgJzgyOTgnOiAnODI2OScsICcyNDUwJzogJzg1OCcsICcxMTI3NCc6ICc4MjY5JywgJzknOiAnOScsICcxOTUxJzogJzE3NzInLCAnNDU2JzogJzQ1NicsICcyNzEyJzogJzI1NzknLCAnOTcwMSc6ICc4NTgnLCAnMjMzNzAnOiAnMTEyNCcsICcxODk2OSc6ICcxODA4OScsICc4MjkwJzogJzgyNjknLCAnMTg5NjQnOiAnMTg5NDknLCAnMTg5NjInOiAnMTg5NDknLCAnMTg5NjEnOiAnMTg5NDknLCAnMzcxJzogJzM2NCcsICczNzAnOiAnMzY0JywgJzM3Mic6ICczNzInLCAnODIxJzogJzQ0MicsICc4MjAnOiAnNDQyJywgJzEzMTQnOiAnODU4JywgJzEzMzQnOiAnODU4JywgJzE3OSc6ICcxNzknLCAnMTg2NjUnOiAnMTg2NDknLCAnMTg2NjAnOiAnMTg2NDknLCAnMTg2NjEnOiAnMTg2NDknLCAnMTQ4Myc6ICcxNDgzJywgJzE0ODInOiAnMTQ3MScsICcxNDgxJzogJzE0NzEnLCAnMTQ4MCc6ICcxNDcxJywgJzM5Nyc6ICczOTcnLCAnOTAxMSc6ICcxNzcyJywgJzE0ODUnOiAnMTQ3MScsICczOTQnOiAnMzY2JywgJzgyJzogJzgyJywgJzgzJzogJzgzJywgJzE0ODknOiAnMTQ4MycsICczOTgnOiAnMzk4JywgJzg2JzogJzg2JywgJzg3JzogJzg3JywgJzg0JzogJzg0JywgJzg1JzogJzg1JywgJzc5Nyc6ICc0NDInLCAnNzk2JzogJzQ0MicsICc1MjUwJzogJzE1MDAnLCAnMTcxMCc6ICcxNjU1JywgJzE3MTYnOiAnMTY1NScsICc0MTUnOiAnNDA1JywgJzE3MTgnOiAnMTY1NScsICc3OTknOiAnNDQyJywgJzcnOiAnNycsICcxNjU1JzogJzE2NTUnLCAnMzIxNCc6ICcxNzYwJywgJzI5OCc6ICcyOTgnLCAnMTg2OTAnOiAnNDU0JywgJzExMzMnOiAnMTEyNCcsICcxNzcyJzogJzE3NzInLCAnMTEzMSc6ICcxMTI0JywgJzI5OSc6ICcyOTknLCAnMTEzNyc6ICcxMTI0JywgJzExMzYnOiAnMTEyNCcsICcxMTM1JzogJzExMjQnLCAnMTEzNCc6ICcxMTI0JywgJzI0NSc6ICcyNDUnLCAnMjQ0JzogJzI0NCcsICcyNDcnOiAnMjQ3JywgJzE4MzQwJzogJzE4MDg5JywgJzI0MSc6ICcyNDEnLCAnMzE1Nic6ICcxNzcyJywgJzI0Myc6ICcyNDMnLCAnMTkzMDknOiAnMTc2MCcsICcyNDknOiAnMjQ5JywgJzI0OCc6ICcyNDgnLCAnMTk4Myc6ICcxNzcyJywgJzE0MzcnOiAnMTQzNycsICcyMDEnOiAnMjAxJywgJzE0MzAnOiAnMTEyNCcsICcyNTc5JzogJzI1NzknLCAnMjU3Nyc6ICcxNjU1JywgJzMyMTMnOiAnMTc2MCcsICcyNTcwJzogJzI1NTgnLCAnNTE5JzogJzQ1MCcsICc1MTgnOiAnNDUwJywgJzEwMDknOiAnNDQ1JywgJzEwMDgnOiAnNDA1JywgJzUxMSc6ICc0NTAnLCAnNTEwJzogJzQ1MCcsICc1MTMnOiAnNDUwJywgJzUxMic6ICc0NTAnLCAnNTE1JzogJzQ1MCcsICc1MTQnOiAnNDUwJywgJzUxNyc6ICc0NTAnLCAnNTE2JzogJzQ1MCcsICcyNTk0JzogJzI1NzknLCAnNDU5JzogJzQ1OScsICcxMjI0JzogJzExMjQnLCAnMjU5MCc6ICcyNTc5JywgJzI1OTEnOiAnMjU3OScsICc1Myc6ICc1MycsICc0NTAnOiAnNDUwJywgJzUyMzQnOiAnMTQ3MScsICcyNzE0JzogJzI1NzknLCAnODA1OCc6ICcxMzcwJywgJzI1OTgnOiAnMjU3OScsICcxMzQ1JzogJzEzNDUnLCAnMjQ1Myc6ICcxMzcwJywgJzQ1Nyc6ICc0NTcnLCAnMzcwMic6ICc0NTAnLCAnMjUyMjgnOiAnNDY1JywgJzgyOTQnOiAnODI2OScsICcxODcwJzogJzE2NTUnLCAnMTc4JzogJzE3OCcsICcxNzcnOiAnMTc3JywgJzE3Nic6ICcxNzYnLCAnMTc1JzogJzE3NScsICcxNzQnOiAnMTc0JywgJzE3Myc6ICcxNzMnLCAnMTcyJzogJzE3MicsICcxNzEnOiAnMTcxJywgJzE3MCc6ICcxNzAnLCAnMjg4Myc6ICcyODgzJywgJzMyMDAnOiAnODU4JywgJzI4ODYnOiAnMjg4MycsICczNzc1JzogJzg1OCcsICcyNDQxJzogJzg1OCcsICc2OSc6ICc2OScsICc4OTUnOiAnODU4JywgJzI4ODgnOiAnMjg4MycsICczNzc0JzogJzg1OCcsICc0NDYzJzogJzQ0MicsICcxNTAwJzogJzE1MDAnLCAnMTUwMSc6ICcxNDgzJywgJzg3MSc6ICc4NzEnLCAnMjk3JzogJzI5NycsICcxNTA5JzogJzE1MDAnLCAnNjM2Nyc6ICcxNzcyJywgJzI2MjYnOiAnMjU3OScsICcyNjI1JzogJzE3NjAnLCAnMjYyOCc6ICcyNTc5JywgJzI2MjknOiAnMjU3OScsICcxOTE5JzogJzE1MDAnLCAnMTkxMSc6ICcxNzcyJywgJzE5MTAnOiAnMTc3MicsICcxOTEzJzogJzE3NzInLCAnMTkxMic6ICcxNzcyJywgJzE5MTUnOiAnMTUwMCcsICcxOTE0JzogJzE3NzInLCAnMjMyMzcnOiAnMjMyMzMnLCAnMTEnOiAnMTEnLCAnMTAnOiAnMTAnLCAnMzA4Nic6ICcxMzcwJywgJzE1JzogJzE1JywgJzE0JzogJzE0JywgJzE2JzogJzE2JywgJzE5JzogJzE5JywgJzE4JzogJzE4JywgJzI1MjE0JzogJzgyNjknLCAnODYyJzogJzg1OCcsICc4NjUnOiAnODU4JywgJzU3MTInOiAnMTc3MicsICc3NTY4JzogJzg1OCcsICc4NjYnOiAnODU4JywgJzE4OTQ5JzogJzE4OTQ5JywgJzI2OTknOiAnMjU3OScsICcyNjk4JzogJzI1NzknLCAnMjY5Nyc6ICcyNTc5JywgJzI2OTQnOiAnMjU3OScsICc4ODMnOiAnODU4JywgJzg4Mic6ICc4NzcnLCAnODgxJzogJzg3NycsICc4ODAnOiAnODgwJywgJzg4Nyc6ICc0NTcnLCAnODg2JzogJzg1OCcsICc4ODUnOiAnODU4JywgJzg4NCc6ICc4NTgnLCAnODg5JzogJzQ1NycsICc4ODgnOiAnODU4JywgJzM5MDgnOiAnNDQyJywgJzE5NzInOiAnMTM3MCcsICcxNjA3JzogJzE0ODMnLCAnMTk3MCc6ICcxNzcyJywgJzEwMTEnOiAnNDQ1JywgJzExMTgxJzogJzg1OCcsICc0OTYnOiAnNDUwJywgJzE4Njg1JzogJzQ1NCcsICczMjM0JzogJzE3NjAnLCAnMTYxNic6ICcxNTAwJywgJzE2MTcnOiAnMTQ3MScsICcxNjE0JzogJzE0NzEnLCAnMTk2Nyc6ICcxNzcyJywgJzE2MTMnOiAnMTM3MCcsICczMjInOiAnMzIyJywgJzMyMyc6ICczMjMnLCAnMzIwJzogJzMyMCcsICczMjEnOiAnMzIxJywgJzMyNic6ICczMjYnLCAnMzI3JzogJzMyNycsICczMjQnOiAnMzI0JywgJzMyNSc6ICczMjUnLCAnNDMzJzogJzQzMycsICczMjgnOiAnMzI4JywgJzMyOSc6ICczMjknLCAnMTg2NTUnOiAnMTg2NDknLCAnMTg2NTQnOiAnMTg2NDknLCAnMTg2NTcnOiAnMTg2NDknLCAnMTg2NTYnOiAnMTg2NDknLCAnMjA1JzogJzIwNScsICcyMDQnOiAnMjA0JywgJzIwNyc6ICcyMDcnLCAnNzcyJzogJzQwNScsICcyMDknOiAnMjA5JywgJzIwOCc6ICcyMDgnLCAnMTg2NTknOiAnMTg2NDknLCAnMTg2NTgnOiAnMTg2NDknLCAnMTM0MCc6ICc4NTgnLCAnNzcnOiAnNzcnLCAnMzM1NCc6ICc0MzYnLCAnNzUnOiAnNzUnLCAnNzQnOiAnNzQnLCAnNzMnOiAnNzMnLCAnNzInOiAnNzInLCAnNzEnOiAnNzEnLCAnNzAnOiAnNzAnLCAnNzknOiAnNzknLCAnNzgnOiAnNzgnLCAnMic6ICcyJywgJzIzMjM5JzogJzIzMjMzJywgJzIwMDY3JzogJzE1MDAnLCAnMTA0MCc6ICc4NTgnLCAnMTA0Nyc6ICc4NTgnLCAnMTA0Myc6ICc4NTgnLCAnMTA0NSc6ICc4NTgnLCAnMTA0NCc6ICc4NTgnLCAnMTA0OCc6ICc4NTgnLCAnMjIzNSc6ICcxNzYwJywgJzEyNzY0JzogJzE3NjAnLCAnMzU3NSc6ICc0NDInLCAnMTc2OCc6ICcxNzYwJywgJzE3NjknOiAnMTc2MCcsICc0MTIyJzogJzQ0MicsICcxNzYwJzogJzE3NjAnLCAnMTc2Nic6ICcxNzYwJywgJzE3NjcnOiAnMTc2MCcsICcxNzY1JzogJzE3NjAnLCAnMjE2JzogJzIxNicsICcxMjY4JzogJzEyNjgnLCAnMjcxMyc6ICcyNTc5JywgJzEyNjcnOiAnODU4JywgJzI3MTAnOiAnMjU3OScsICcxMzQwMCc6ICcxNjU1JywgJzIwOTYnOiAnMTc2MCcsICcyMDkwJzogJzE3NzInLCAnMjA5Myc6ICcxNDcxJywgJzMxNzAnOiAnODU4JywgJzQ0NzAnOiAnNDQyJywgJzM2NTYnOiAnNDUwJywgJzIzMjMzJzogJzIzMjMzJywgJzg3NTMnOiAnODI2OScsICcyNzE3JzogJzI1NzknLCAnMjUyNCc6ICcxNTAwJywgJzE1NDInOiAnMTQ1OCcsICcyNTIwJzogJzE1MDAnLCAnMjQ4Nic6ICcxNzYwJywgJzI0ODcnOiAnMTc2MCcsICcyNDg0JzogJzE3NjAnLCAnMjQ4NSc6ICcxNzYwJywgJzI0ODMnOiAnMTc2MCcsICcxNTQ4JzogJzE0NTgnLCAnMTU0OSc6ICcxNDU4JywgJzQ0OTQnOiAnNDQyJywgJzE0NjknOiAnMTQ1OCcsICczNjgnOiAnMzY0JywgJzE0NjUnOiAnMTQ1OCcsICc4JzogJzgnLCAnMTQ2Nyc6ICcxNDU4JywgJzE0NjYnOiAnMTQ1OCcsICcxNDYxJzogJzE0NTgnLCAnMjcxOCc6ICcyNTc5JywgJzE0NjMnOiAnMTQ1OCcsICcyMzYwNCc6ICcxNzYwJywgJzg2OSc6ICc4NTgnLCAnMTMxNSc6ICcxMTI0JywgJzI3MTknOiAnMjU3OScsICcyNzA5JzogJzI1NzknLCAnMjQ2MSc6ICcxNzcyJywgJzUxNDgnOiAnMTQ3MScsICcxMDI0JzogJzg1OCcsICc1MTQ2JzogJzE0NzEnLCAnMTgwOTcnOiAnMTgwODknLCAnMjcwNyc6ICcyNTc5JywgJzI3MDYnOiAnMjU3OScsICcyNzAyJzogJzI1NzknLCAnMTAxNCc6ICc0NDUnLCAnMTInOiAnMTInLCAnODI3Mic6ICc4MjY5JywgJzE4MDk1JzogJzE4MDg5JywgJzEwMTUnOiAnNDQ1JywgJzEzOTI3JzogJzEzNzAnLCAnMjE5JzogJzIxOScsICcyNTIxOSc6ICcyNTIxOScsICcyNTIxOCc6ICc4NTgnLCAnNDIzMCc6ICc0MzYnLCAnNzc3JzogJzQwNScsICc1NzQwJzogJzU3NDAnLCAnMjUxODEnOiAnMjUxODEnLCAnMTAyMyc6ICc4NTgnLCAnMTgyNSc6ICcxNzYwJywgJzEwMTAnOiAnNDQ1JywgJzE4MjcnOiAnMTc2MCcsICcxODIxJzogJzE1MDAnLCAnMTgyMic6ICcxNTAwJywgJzQxNCc6ICc0MDUnLCAnMjA2OSc6ICcxNDcxJywgJzQxNic6ICc0MDUnLCAnNDEwJzogJzQwNicsICcxMzg5JzogJzEzNzAnLCAnNDEyJzogJzQwNicsICc0MTMnOiAnNDA2JywgJzEzODQnOiAnMTM3MCcsICcxMzg1JzogJzExMjQnLCAnMTM4Nic6ICcxMzcwJywgJzM2MSc6ICczNjEnLCAnMTE4NCc6ICcxMTI0JywgJzEzODInOiAnMTM3MCcsICcxMzgzJzogJzEzNzAnLCAnMzE5JzogJzMxOScsICczMTgnOiAnMzE4JywgJzE4NjkzJzogJzQ1NCcsICczMTMnOiAnMzEzJywgJzMxMic6ICczMTInLCAnMzExJzogJzMxMScsICczMTAnOiAnMzEwJywgJzMxNyc6ICczMTcnLCAnMzE2JzogJzMxNicsICczMTUnOiAnMzE1JywgJzMxNCc6ICczMTQnLCAnMTkyMSc6ICcxNzcyJywgJzE5MjInOiAnMTc3MicsICc0NDgnOiAnNDQ4JywgJzg2Nyc6ICc4NTgnLCAnMzY5JzogJzM2NCcsICcyNDY3OCc6ICcyNDY3OCcsICcyMDY5Myc6ICcxODA4OScsICc3ODQnOiAnNzg0JywgJzgwOCc6ICc0NDInLCAnMjY2Nic6ICcyNTc5JywgJzI2NjcnOiAnMjU3OScsICcyNTg5JzogJzI1NzknLCAnMjY2NSc6ICcyNTc5JywgJzI2NjInOiAnMjU3OScsICcyNjYzJzogJzI1NzknLCAnMjY2MCc6ICcyNTc5JywgJzI2NjEnOiAnMjU3OScsICczNjYnOiAnMzY2JywgJzM2NCc6ICczNjQnLCAnMzYyJzogJzM2MicsICczNjMnOiAnMzYzJywgJzM2MCc6ICczNjAnLCAnMjY2OSc6ICcyNTc5JywgJzQ0MCc6ICc0NDAnLCAnMTIwNDInOiAnODI2OScsICcyNjY0JzogJzI1NzknLCAnMTMzMSc6ICc4NTgnLCAnMjI3ODInOiAnMTEyNCcsICc5Nyc6ICc5NycsICczODAnOiAnMzY0JywgJzM4MSc6ICczNjQnLCAnNDA2JzogJzQwNicsICc1MTMzJzogJzQ0NScsICc1MjgnOiAnNDUwJywgJzIwJzogJzIwJywgJzQ0NCc6ICc0NDQnLCAnOTAwOSc6ICcxMzcwJywgJzE3NzAnOiAnMTc2MCcsICc0NzU4JzogJzE0ODMnLCAnNDc1OSc6ICcxNDgzJywgJzE2NDcnOiAnMTQ4MycsICc1MjQ4JzogJzE0NzEnLCAnMTcyNSc6ICcxNjU1JywgJzUyNDInOiAnMTQ3MScsICc1OTc5JzogJzEzNzAnLCAnMzYxMCc6ICc0MzcnLCAnMTA3Mic6ICc4NTgnLCAnODI4MSc6ICc4MjY5JywgJzEwNDInOiAnODU4JywgJzYwJzogJzYwJywgJzc3NSc6ICc0MDUnLCAnNDYzMSc6ICcxNDgzJywgJzI1OSc6ICcyNTknLCAnNjQnOiAnNjQnLCAnNjUnOiAnNjUnLCAnNjYnOiAnNjYnLCAnNjcnOiAnNjcnLCAnMjUyJzogJzI1MicsICcyNTMnOiAnMjUzJywgJzI1MCc6ICcyNTAnLCAnMjUxJzogJzI1MScsICcyNTYnOiAnMjU2JywgJzI1Nyc6ICcyNTcnLCAnMjU0JzogJzI1NCcsICcyNTUnOiAnMjU1JywgJzI1NjgnOiAnMjU1OCcsICcyNDM1OCc6ICcxMTI0JywgJzE0MjYnOiAnMTEyNCcsICcxNDI5JzogJzg1OCcsICcyNTYwJzogJzI1NTgnLCAnMTU4MCc6ICcxNDgzJywgJzI1NjInOiAnMjU1OCcsICcyNDM1Nyc6ICcxMTI0JywgJzI0MzU2JzogJzExMjQnLCAnMjQzNTUnOiAnMTEyNCcsICcyNTY2JzogJzI1NTgnLCAnMTAzOCc6ICc4NTgnLCAnMTg5NTgnOiAnMTg5NDknLCAnNTA4JzogJzQ1MCcsICc1MDknOiAnNDUwJywgJzUwNic6ICc0NTAnLCAnNTA3JzogJzQ1MCcsICc1MDQnOiAnNDUwJywgJzUwNSc6ICc0NTAnLCAnMjMyNDUnOiAnMjMyMzMnLCAnNTAzJzogJzQ1MCcsICc1MDAnOiAnNDUwJywgJzIwMDEnOiAnMTc3MicsICcyNTg2JzogJzE2NTUnLCAnMTM1OSc6ICcxMzQ1JywgJzI1ODQnOiAnMjU3OScsICc0NjknOiAnNDY1JywgJzQ2OCc6ICc0NjUnLCAnNzg1JzogJzc4NScsICc0NjUnOiAnNDY1JywgJzQ2NCc6ICc0NTEnLCAnNDY3JzogJzQ2NScsICc0NjYnOiAnNDY2JywgJzQ2MSc6ICc0NjEnLCAnMTM1NSc6ICcxMzQ1JywgJzEzNTQnOiAnMTM0NScsICcxODYxJzogJzE2NTUnLCAnOTAxJzogJzQzNicsICcxNjgnOiAnMTY4JywgJzE2OSc6ICcxNjknLCAnMjgwJzogJzI4MCcsICcxNjQnOiAnMTY0JywgJzE2NSc6ICcxNjUnLCAnMTY2JzogJzE2NicsICcxNjcnOiAnMTY3JywgJzE2MCc6ICcxNjAnLCAnMTYxJzogJzE2MScsICcxNjInOiAnMTYyJywgJzE2Myc6ICcxNjMnLCAnODI4OSc6ICc4MjY5JywgJzE0NTcnOiAnODU4JywgJzI4OTgnOiAnMjg4MycsICc4NjQnOiAnODU4JywgJzI4OTUnOiAnMjg4MycsICcyODk0JzogJzI4ODMnLCAnMjg5Nyc6ICcyODgzJywgJzI4OTEnOiAnMjg4MycsICcyODkwJzogJzI4ODMnLCAnMjg5Myc6ICcyODgzJywgJzI4OTInOiAnMjg4MycsICcxNDU0JzogJzg1OCcsICc1MjknOiAnNDUwJywgJzIxMDgnOiAnMTc2MCcsICcxNTE5JzogJzE1MDAnLCAnMTUxOCc6ICcxNTAwJywgJzMyJzogJzMyJywgJzIxMDMnOiAnMTM3MCcsICcxNTE0JzogJzE1MDAnLCAnMjUxNic6ICcxNDcxJywgJzI4Nic6ICcyODYnLCAnMTQ1OCc6ICcxNDU4JywgJzIxMDYnOiAnMTM3MCcsICcxNTEzJzogJzE1MDAnLCAnMjEwNCc6ICcxNzYwJywgJzEwMTY4JzogJzgyNjknLCAnMjYzNCc6ICcyNTc5JywgJzgyNzgnOiAnODI2OScsICcyNjMxJzogJzI1NzknLCAnMjYzMCc6ICcyNTc5JywgJzI2MzMnOiAnMjU3OScsICcxMDk3JzogJzg1OCcsICcyMzE4Nyc6ICcyMzE4NycsICcxODc2NSc6ICc4NTgnLCAnMTgxMCc6ICcxNDcxJywgJzE4MTEnOiAnMTQ3MScsICc4NzgnOiAnODc3JywgJzE4MTMnOiAnMTQ3MScsICc4NzYnOiAnODcxJywgJzg3Nyc6ICc4NzcnLCAnODc0JzogJzg3MScsICc4NzUnOiAnODcxJywgJzg3Mic6ICc4NzInLCAnNjQxMCc6ICc4NTgnLCAnODcwJzogJzg1OCcsICc0NDEnOiAnNDQxJywgJzc3NzcnOiAnMTY1NScsICc3Nzc2JzogJzE2NTUnLCAnNzc3NSc6ICcxNjU1JywgJzc3NzMnOiAnMTY1NScsICcxMDc2OSc6ICc4MjY5JywgJzE4NzY0JzogJzg1OCcsICc4OTAnOiAnNDU3JywgJzg5MSc6ICc4NTgnLCAnODkyJzogJzg1OCcsICc4OTMnOiAnODU4JywgJzg5NCc6ICc4NTgnLCAnNDM4JzogJzQzOCcsICc4OTYnOiAnODU4JywgJzg5Nyc6ICc0MzYnLCAnODk5JzogJzg1OCcsICc0MzknOiAnNDM5JywgJzMxODYnOiAnODU4JywgJzQzNic6ICc0MzYnLCAnOTc2OCc6ICc4MjY5JywgJzYzJzogJzYzJywgJzE2MDknOiAnMTQ3MScsICc0MzUnOiAnNDM1JywgJzQxNTUnOiAnNDQyJywgJzE4MDg5JzogJzE4MDg5JywgJzQxNTgnOiAnNDQyJywgJzI1MDk0JzogJzI1MDk0JywgJzMyMjAnOiAnMTc2MCcsICczMjIzJzogJzE3NjAnLCAnMzIyMic6ICcxNzYwJywgJzM1Nic6ICczNTYnLCAnMzU1JzogJzM1NScsICczNTQnOiAnMzU0JywgJzUyJzogJzUyJywgJzQzMCc6ICc0MzAnLCAnODAzJzogJzgwMycsICc5MDgnOiAnNDM2JywgJzgwMSc6ICc0NDInLCAnNDMxJzogJzQzMScsICc4MDcnOiAnNDQyJywgJzE3ODgnOiAnMTc3MicsICcxODA5OSc6ICcxODA4OScsICcxODA5OCc6ICcxODA4OScsICcyMTInOiAnMjEyJywgJzIxMyc6ICcyMTMnLCAnMjExJzogJzIxMScsICcxODA5Myc6ICcxODA4OScsICcxNzgxJzogJzE3NzInLCAnMTg3NjMnOiAnODU4JywgJzE3ODMnOiAnMTc3MicsICcxNzg0JzogJzE3NzInLCAnMTgwOTYnOiAnMTgwODknLCAnMTc4Nic6ICcxNzcyJywgJzE4NjQ5JzogJzE4NjQ5JywgJzQ2Myc6ICc0NjMnLCAnMzMyOSc6ICcxMzcwJywgJzEwMzMnOiAnODU4JywgJzMzOCc6ICczMzgnLCAnMTc3NSc6ICcxNzYwJywgJzc2JzogJzc2JywgJzE3NzYnOiAnMTc3MicsICcxNzcxJzogJzE3NjAnLCAnNDcwMic6ICcxNDgzJywgJzEwNzgnOiAnODU4JywgJzEwNzknOiAnMTA3OScsICcxMDc2JzogJzg1OCcsICcxMDc3JzogJzg1OCcsICcxMDc0JzogJzg1OCcsICcxMDc1JzogJzg1OCcsICcxNzc5JzogJzE3NzInLCAnMTA3Myc6ICc4NTgnLCAnNDg0JzogJzQ1MCcsICcxMDcxJzogJzg1OCcsICcyODknOiAnMjg5JywgJzI4OCc6ICcyODgnLCAnMzc1MCc6ICc4NTgnLCAnMjgxJzogJzI4MScsICcxNjc1JzogJzE2NTUnLCAnMjgzJzogJzI4MycsICcyODInOiAnMjgyJywgJzI4NSc6ICcyODUnLCAnMjg0JzogJzI4NCcsICcyODcnOiAnMjg3JywgJzE2NzMnOiAnMTY1NScsICcxMDk0JzogJzg1OCcsICcxMDk2JzogJzg1OCcsICczMzYnOiAnMzM2JywgJzI0OTgnOiAnMTc3MicsICczMzAnOiAnMzMwJywgJzI2Myc6ICcyNjMnLCAnMjYyJzogJzI2MicsICcyNjEnOiAnMjYxJywgJzI2MCc6ICcyNjAnLCAnMjY3JzogJzI2NycsICcyNjYnOiAnMjY2JywgJzI2NSc6ICcyNjUnLCAnMjY0JzogJzI2NCcsICc1OSc6ICc1OScsICcyNjknOiAnMjY5JywgJzI2OCc6ICcyNjgnLCAnMTgzNjgnOiAnMTgwODknLCAnNTgnOiAnNTgnLCAnMjU1MCc6ICcxNjU1JywgJzE1NTAnOiAnMTM5MycsICcyNTUyJzogJzE2NTUnLCAnMTU1Mic6ICcxMTI0JywgJzI1NTQnOiAnMTY1NScsICcxNTU0JzogJzExMjQnLCAnNjEnOiAnNjEnLCAnMTU1OSc6ICcxNDgzJywgJzU0JzogJzU0JywgJzU3JzogJzU3JywgJzU2JzogJzU2JywgJzI0OTUnOiAnMTc3MicsICcyNDk0JzogJzE3NzInLCAnMjQ5Nyc6ICcxNzcyJywgJzI0OTYnOiAnMTc3MicsICcyNTU4JzogJzI1NTgnLCAnNTM1JzogJzQ1MCcsICcyNDkxMic6ICcyNDkxMicsICc1MzMnOiAnNDUwJywgJzUzMic6ICc0NTAnLCAnNTMxJzogJzQ1MCcsICc1MzAnOiAnNDUwJywgJzI0OTE4JzogJzI0OTE4JywgJzE0MTInOiAnMTM5MycsICcxNDE1JzogJzg1OCcsICc1MzknOiAnNDY2JywgJzUzOCc6ICc0NjEnLCAnMTMyMic6ICcxMTI0JywgJzEzMjMnOiAnMTEyNCcsICcyNDc1JzogJzE3NjAnLCAnMjQ3Myc6ICcxNzYwJywgJzEzMjcnOiAnMTEyNCcsICcyMDAnOiAnMjAwJywgJzUxNTEnOiAnMTQ1OCcsICc1MTUyJzogJzE0NzEnLCAnMjAzJzogJzIwMycsICc1MCc6ICc1MCcsICc2OCc6ICc2OCcsICc3NzYnOiAnNDA1JywgJzExMSc6ICcxMTEnLCAnMTEwJzogJzExMCcsICcxOTA3JzogJzE3NzInLCAnNzcxJzogJzQwNScsICc1JzogJzUnLCAnOTM1Nic6ICc4MjY5JywgJzE4NTgnOiAnMTc2MCcsICcxODU5JzogJzE1MDAnLCAnMjUxOTQnOiAnMjUxOTQnLCAnNTEzNCc6ICc0NDUnLCAnNTM2JzogJzQ1MCcsICcxODUwJzogJzE1MDAnLCAnMTY4NjUnOiAnMTM3MCcsICcxODUyJzogJzE1MDAnLCAnMTg1Myc6ICcxNTAwJywgJzE4NTQnOiAnMTUwMCcsICcxODU3JzogJzE3NzInLCAnMTUyNCc6ICcxNTAwJywgJzUzNCc6ICc0NTAnLCAnMTM5OCc6ICc4NTgnLCAnMjA3Myc6ICcxNDcxJywgJzIwNzInOiAnMTQ3MScsICcyMDcxJzogJzE0NzEnLCAnMjA3MCc6ICcxNDcxJywgJzEzOTMnOiAnMTM5MycsICcxMzkyJzogJzEzNzAnLCAnNDI3JzogJzQyNycsICc0MjYnOiAnNDI2JywgJzMwOCc6ICczMDgnLCAnMzA5JzogJzMwOScsICcyNjA3JzogJzE2NTUnLCAnMjYwMCc6ICcxNjU1JywgJzI2MDInOiAnMjU3OScsICczMDAnOiAnMzAwJywgJzMwMSc6ICczMDEnLCAnMzAyJzogJzMwMicsICcxOTE5Mic6ICcxMzcwJywgJzMwNCc6ICczMDQnLCAnMjYwOSc6ICcyNTc5JywgJzMwNic6ICczMDYnLCAnNzc4JzogJzQwNScsICcyMzI1Myc6ICcyMzI1MycsICcxMDM1JzogJzg1OCcsICc0MTE0JzogJzQzNicsICc0MTEyJzogJzQzNicsICc0MTEzJzogJzQzNicsICcyMjM4Mic6ICcyMjM4MicsICc0NTgnOiAnNDU4JywgJzg0Nyc6ICc0MzknLCAnMzM0Myc6ICc0MzUnLCAnMzQ2Mic6ICc0NDInLCAnMjk2JzogJzI5NicsICc1NSc6ICc1NScsICcxODg2OSc6ICcxNzcyJywgJzg0OSc6ICc0MzknLCAnODQ4JzogJzQzOScsICcyNjcxJzogJzI1NzknLCAnMjY3MCc6ICcxNzYwJywgJzI2NzInOiAnMjU3OScsICcxNDI4JzogJzg1OCcsICcyNDc2Nyc6ICcyNDc2NycsICcxNTgxJzogJzQwNScsICc3MTAwJzogJzg1OCcsICcyMDIzMCc6ICcxODY0OScsICc2Mic6ICc2MicsICc4MSc6ICc4MScsICc0ODcnOiAnNDUwJywgJzI0MCc6ICcyNDAnLCAnMjU4JzogJzI1OCcsICcyNTY3JzogJzI1NTgnLCAnMjM0MDAnOiAnMjM0MDAnLCAnMjM0MDEnOiAnMTEyNCcsICcxNTg1JzogJzg1OCcsICc0ODUnOiAnNDUwJywgJzE5ODYnOiAnMTc2MCcsICcxNzM4JzogJzEzNDUnLCAnMzIxNic6ICcxNzYwJywgJzMyMTcnOiAnMTc2MCcsICcxOTgyJzogJzEzNzAnLCAnMzIxMSc6ICcxNzYwJywgJzE4Njk3JzogJzE4NjQ5JywgJzE2MzcnOiAnMTUwMCcsICc1MjMyJzogJzE1MDAnLCAnMzIxOCc6ICcxNzYwJywgJzMyMTknOiAnMTc2MCcsICcxNzM3JzogJzE2NTUnLCAnNDgyJzogJzQzNScsICcxMDM5JzogJzg1OCcsICc0ODAnOiAnNDgwJywgJzEwNDYnOiAnODU4JywgJzM2MDInOiAnNDUwJywgJzI4MTEnOiAnODU4JywgJzM2MDQnOiAnNDM3JywgJzEwMzYnOiAnODU4JywgJzM2MDgnOiAnNDM3JywgJzEwNDEnOiAnODU4JywgJzI0Mic6ICcyNDInLCAnMjE4Myc6ICcxNzYwJywgJzIyOSc6ICcyMjknLCAnMjI4JzogJzIyOCcsICcyMjcnOiAnMjI3JywgJzIyNic6ICcyMjYnLCAnMjI1JzogJzIyNScsICcyMjQnOiAnMjI0JywgJzIyMyc6ICcyMjMnLCAnMjIyJzogJzIyMicsICcyMjEnOiAnMjIxJywgJzIyMCc6ICcyMjAnLCAnMTAyNSc6ICc4NTgnLCAnMzkzJzogJzM5MycsICcxMDI3JzogJzg1OCcsICcxMDI2JzogJzg1OCcsICcxMDIxJzogJzQ0NScsICcyMjcyJzogJzg1OCcsICc4MjY5JzogJzgyNjknLCAnMTMzMyc6ICc4NTgnLCAnNTQyNSc6ICc0NDUnLCAnMTE4Nyc6ICcxMTI0JywgJzE3OTUxJzogJzE3NjAnLCAnNTQyNic6ICc0NDUnLCAnMTE4Mic6ICcxMTI0JywgJzMzNzInOiAnNDM2JywgJzEwMzcnOiAnODU4JywgJzg5JzogJzg5JywgJzEwMzQnOiAnODU4JywgJzE3NDYnOiAnMTQ4MycsICc1MDEnOiAnNDUwJywgJzM5Nic6ICczNjYnLCAnNjA1JzogJzYwNScsICc4MTcyJzogJzg1OCcsICcyNDM4JzogJzEzNzAnLCAnMTU1JzogJzE1NScsICczOTUnOiAnMzY2JywgJzE1Nyc6ICcxNTcnLCAnMTU2JzogJzE1NicsICcxNTknOiAnMTU5JywgJzE1OCc6ICcxNTgnLCAnMjU4NSc6ICcxNjU1JywgJzI0MzUnOiAnODU4JywgJzE4OTgnOiAnMTc2MCcsICcxODk5JzogJzE1MDAnLCAnODI3OSc6ICc4MjY5JywgJzE1MzQ5JzogJzgyNjknLCAnODI3Nyc6ICc4MjY5JywgJzgyNzYnOiAnODI2OScsICc4Mjc1JzogJzgyNjknLCAnMzczMyc6ICc4NTgnLCAnMzk5JzogJzM5OScsICcxODkyJzogJzE2NTUnLCAnMjEzNic6ICcxNzcyJywgJzIxMzUnOiAnMTM3MCcsICcyMTMyJzogJzE3NzInLCAnNDgnOiAnNDgnLCAnMjEzMSc6ICcxMzcwJywgJzQ2JzogJzQ2JywgJzQ3JzogJzQ3JywgJzQ0JzogJzQ0JywgJzQ1JzogJzQ1JywgJzQyJzogJzQyJywgJzQwJzogJzQwJywgJzQxJzogJzQxJywgJzE2ODInOiAnMTQ4MycsICcxNDQzJzogJzEzNzAnLCAnMTQ0Mic6ICcxMzcwJywgJzEwMTInOiAnNDQ1JywgJzMyMDEnOiAnODU4JywgJzE0NDknOiAnODU4JywgJzQ3Nyc6ICc0NTAnLCAnMjcyNyc6ICcyNTc5JywgJzI2NDknOiAnMjU3OScsICcyNzI1JzogJzI1NzknLCAnNTE2NCc6ICcxNDcxJywgJzUxNjUnOiAnMTUwMCcsICcyNzIwJzogJzI1NzknLCAnMjY0MCc6ICcyNTc5JywgJzYwNic6ICc2MDYnLCAnNDc1JzogJzQzNycsICc0ODYnOiAnNDYzJywgJzIzMTk4JzogJzIzMTg3JywgJzgwNjAnOiAnMTc3MicsICc0ODgnOiAnNDUwJywgJzIzMTk0JzogJzIzMTg3JywgJzIzMTk1JzogJzIzMTg3JywgJzIzMTk2JzogJzIzMTg3JywgJzIzMTk3JzogJzIzMTg3JywgJzQ4Myc6ICc0NjMnLCAnMjMxOTEnOiAnMjMxODcnLCAnMjM1ODknOiAnNDUzJywgJzExMzEwJzogJzE2NTUnLCAnMTgwMCc6ICcxNDgzJywgJzM3ODknOiAnNDUwJywgJzE4MDknOiAnMTQ3MScsICcxMzY0JzogJzEzNDUnLCAnMTM2NSc6ICcxMzQ1JywgJzEzNjMnOiAnMTM0NScsICcxMzYwJzogJzEzNDUnLCAnMTg1MSc6ICcxNTAwJywgJzQ3OSc6ICc0NTAnLCAnMTM2OCc6ICcxMzQ1JywgJzMxOTgnOiAnMjU3OSd9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdGVzdF9kYXRhL2F0cmFjZV9leHRyYWN0ZWRfdGhyZWFkcyBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3Rlc3RfZGF0YS9hdHJhY2VfZXh0cmFjdGVkX3RocmVhZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NDlmYmYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdGVzdF9kYXRhL2F0cmFjZV9leHRyYWN0ZWRfdGhyZWFkcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsxOiAnL2luaXQnLCAyOiAna3RocmVhZGQnLCAzOiAna3NvZnRpcnFkLzAnLCA3OiAna3dvcmtlci91OjBIJywgODogJ21pZ3JhdGlvbi8wJywgMTM6ICdraGVscGVyJywgMTQ6ICduZXRucyd9CmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvYXRyYWNlX2ZpeGVkX3RnaWRzIGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdGVzdF9kYXRhL2F0cmFjZV9maXhlZF90Z2lkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI0NTZkNS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvYXRyYWNlX2ZpeGVkX3RnaWRzCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLSMgdHJhY2VyOiBub3AKLSMKLSMgZW50cmllcy1pbi1idWZmZXIvZW50cmllcy13cml0dGVuOiAxMTYvMTE2ICAgI1A6MQotIwotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8tLS0tLT0+IGlycXMtb2ZmCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF8tLS0tPT4gbmVlZC1yZXNjaGVkCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLyBfLS0tPT4gaGFyZGlycS9zb2Z0aXJxCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IC8gXy0tPT4gcHJlZW1wdC1kZXB0aAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fHwgLyAgICAgZGVsYXkKLSMgICAgICAgICAgIFRBU0stUElEICAgQ1BVIyAgfHx8fCAgICBUSU1FU1RBTVAgIEZVTkNUSU9OCi0jICAgICAgICAgICAgICB8IHwgICAgICAgfCAgIHx8fHwgICAgICAgfCAgICAgICAgIHwKLSAgICAgICAgICBhdHJhY2UtMTQ0NDYgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi40NjUwNjI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWF0cmFjZSBwcmV2X3BpZD0xNDQ0NiBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMi40NjUwNzQ6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi40NjUwODI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi1rc29mdGlycWQvMC0zICggMykgWzAwMF0gLi4uMiAgMTIxMi40NjUwOTI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAoLS0tLS0pIFswMDBdIGQuLjQgIDEyMTIuNDY1MTAyOiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNDY1MTI2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAota3NvZnRpcnFkLzAtMyAoIDMpIFswMDBdIC4uLjIgIDEyMTIuNDY1MTMyOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEyLjQ2NTEzOTogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjQ2NTE0NTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLWtzb2Z0aXJxZC8wLTMgKCAzKSBbMDAwXSAuLi4yICAxMjEyLjQ2NTIyNzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gZC5oNSAgMTIxMi40NjUyOTc6IHNjaGVkX3dha2V1cDogY29tbT1hZGJkIHBpZD0yMTIgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNDY1MzA2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWFkYmQgbmV4dF9waWQ9MjEyIG5leHRfcHJpbz0xMjAKLWFkYmQtMjEyICggMjEyKSBbMDAwXSBkLi40ICAxMjEyLjQ2NTMyOTogc2NoZWRfd2FrZXVwOiBjb21tPWFkYmQgcGlkPTIwOSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLWFkYmQtMjEyICggMjEyKSBbMDAwXSAuLi4yICAxMjEyLjQ2NTM0ODogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09YWRiZCBwcmV2X3BpZD0yMTIgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1hZGJkIG5leHRfcGlkPTIwOSBuZXh0X3ByaW89MTIwCi1hZGJkLTIwOSAoIDIwOSkgWzAwMF0gZC4uNCAgMTIxMi40NjUzOTU6IHNjaGVkX3dha2V1cDogY29tbT1hZGJkIHBpZD0yMTEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi1hZGJkLTIwOSAoIDIwOSkgWzAwMF0gLi4uMiAgMTIxMi40NjU0NDE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWFkYmQgcHJldl9waWQ9MjA5IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09YWRiZCBuZXh0X3BpZD0yMTEgbmV4dF9wcmlvPTEyMAotYWRiZC0yMTEgKCAyMTEpIFswMDBdIC4uLjIgIDEyMTIuNDY1NDQ4OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1hZGJkIHByZXZfcGlkPTIxMSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gZC5oNSAgMTIxMi41NzQ1NTQ6IHNjaGVkX3dha2V1cDogY29tbT1zZW5zb3JzLnFjb20gcGlkPTI5MiBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi41NzQ1NjY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09c2Vuc29ycy5xY29tIG5leHRfcGlkPTI5MiBuZXh0X3ByaW89MTIwCi0gICAgc2Vuc29ycy5xY29tLTI5MiAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNTc0NjY1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zZW5zb3JzLnFjb20gcHJldl9waWQ9MjkyIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c2Vuc29ycy5xY29tIG5leHRfcGlkPTE0NDQ3IG5leHRfcHJpbz0xMjAKLSAgICBzZW5zb3JzLnFjb20tMTQ0NDcgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMi41NzQ3OTc6IHNjaGVkX3dha2V1cDogY29tbT1zZW5zb3JzLnFjb20gcGlkPTE1OTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgc2Vuc29ycy5xY29tLTE0NDQ3ICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNTc0ODAyOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zZW5zb3JzLnFjb20gcHJldl9waWQ9MTQ0NDcgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIrID09PiBuZXh0X2NvbW09c2Vuc29ycy5xY29tIG5leHRfcGlkPTE1OTMgbmV4dF9wcmlvPTEyMAotICAgIHNlbnNvcnMucWNvbS0xNTkzICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjU3NDgxOTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c2Vuc29ycy5xY29tIHByZXZfcGlkPTE1OTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPUQgPT0+IG5leHRfY29tbT1zZW5zb3JzLnFjb20gbmV4dF9waWQ9MTQ0NDcgbmV4dF9wcmlvPTEyMAotICAgIHNlbnNvcnMucWNvbS0xNDQ0NyAgKC0tLS0tKSBbMDAwXSBkLi4zICAxMjEyLjU3NDgyMzogc2NoZWRfd2FrZXVwOiBjb21tPXNlbnNvcnMucWNvbSBwaWQ9MTU5MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICBzZW5zb3JzLnFjb20tMTQ0NDcgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi41NzQ4Mjc6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD0xNDQ0NyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UisgPT0+IG5leHRfY29tbT1zZW5zb3JzLnFjb20gbmV4dF9waWQ9MTU5MyBuZXh0X3ByaW89MTIwCi0gICAgc2Vuc29ycy5xY29tLTE1OTMgICAoLS0tLS0pIFswMDBdIGQuLjQgIDEyMTIuNTc0ODY1OiBzY2hlZF93YWtldXA6IGNvbW09c2Vuc29ycy5xY29tIHBpZD03NjAgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgc2Vuc29ycy5xY29tLTE1OTMgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNTc0ODc2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zZW5zb3JzLnFjb20gcHJldl9waWQ9MTU5MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXNlbnNvcnMucWNvbSBuZXh0X3BpZD03NjAgbmV4dF9wcmlvPTEyMAotICAgIHNlbnNvcnMucWNvbS03NjAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEyLjU3NDkwNTogc2NoZWRfd2FrZXVwOiBjb21tPXN5c3RlbV9zZXJ2ZXIgcGlkPTc4MiBwcmlvPTExOCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICBzZW5zb3JzLnFjb20tNzYwICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi41NzQ5MTc6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD03NjAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zeXN0ZW1fc2VydmVyIG5leHRfcGlkPTc4MiBuZXh0X3ByaW89MTE4Ci0gICBzeXN0ZW1fc2VydmVyLTc4MiAgICAoLS0tLS0pIFswMDBdIGQuLjQgIDEyMTIuNTc0OTgxOiBzY2hlZF93YWtldXA6IGNvbW09c3lzdGVtX3NlcnZlciBwaWQ9Nzg1IHByaW89MTE4IHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgc3lzdGVtX3NlcnZlci03ODIgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjU3NTAwOTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3lzdGVtX3NlcnZlciBwcmV2X3BpZD03ODIgcHJldl9wcmlvPTExOCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zeXN0ZW1fc2VydmVyIG5leHRfcGlkPTc4NSBuZXh0X3ByaW89MTE4Ci1zeXN0ZW1fc2VydmVyLTc4NSAoIDc4NSkgWzAwMF0gLi4uMiAgMTIxMi41NzUwNDU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN5c3RlbV9zZXJ2ZXIgcHJldl9waWQ9Nzg1IHByZXZfcHJpbz0xMTggcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c2Vuc29ycy5xY29tIG5leHRfcGlkPTE0NDQ3IG5leHRfcHJpbz0xMjAKLSAgICBzZW5zb3JzLnFjb20tMTQ0NDcgICgtLS0tLSkgWzAwMF0gLi4uMyAgMTIxMi41NzUxNDM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD0xNDQ0NyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9eCA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMi41NzUxNTM6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi41NzUxNTk6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi1rc29mdGlycWQvMC0zICggMykgWzAwMF0gLi4uMiAgMTIxMi41NzUxNjc6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAoLS0tLS0pIFswMDBdIGQuLjQgIDEyMTIuNTc1MTc1OiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNTc1MTgxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAota3NvZnRpcnFkLzAtMyAoIDMpIFswMDBdIC4uLjIgIDEyMTIuNTc1MTg4OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEyLjU3NTE5NTogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjU3NTIwMTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLWtzb2Z0aXJxZC8wLTMgKCAzKSBbMDAwXSAuLi4yICAxMjEyLjU3NTIxMTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gZC5oNCAgMTIxMi42NDk2MDE6IHNjaGVkX3dha2V1cDogY29tbT1NTUhhbmRsZXJUaHJlYWQgcGlkPTcyMzEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNjQ5NjE0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPU1NSGFuZGxlclRocmVhZCBuZXh0X3BpZD03MjMxIG5leHRfcHJpbz0xMjAKLSBNTUhhbmRsZXJUaHJlYWQtNzIzMSAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi42NDk2MzA6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPU1NSGFuZGxlclRocmVhZCBwcmV2X3BpZD03MjMxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgKC0tLS0tKSBbMDAwXSBkLmg2ICAxMjEyLjcyOTUzOTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvdToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gZE5zNiAgMTIxMi43Mjk1NTA6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyLzA6MkggcGlkPTU1NyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43Mjk1NjM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci91OjEgbmV4dF9waWQ9MjEgbmV4dF9wcmlvPTEyMAotICAgICBrd29ya2VyL3U6MS0yMSAgICAgICAgKC0tLS0tKSBbMDAwXSBkLi41ICAxMjEyLjcyOTU3MTogc2NoZWRfd2FrZXVwOiBjb21tPW1wZGVjaXNpb24gcGlkPTIwNDYgcHJpbz0xMTMgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgIGt3b3JrZXIvdToxLTIxICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzI5NTc4OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyL3U6MSBwcmV2X3BpZD0yMSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoySCBuZXh0X3BpZD01NTcgbmV4dF9wcmlvPTEwMAotICAgIGt3b3JrZXIvMDoySC01NTcgICAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEyLjcyOTU5Nzogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMDoxSCBwaWQ9MTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAga3dvcmtlci8wOjJILTU1NyAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzI5NjAwOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyLzA6MkggcHJldl9waWQ9NTU3IHByZXZfcHJpbz0xMDAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09bXBkZWNpc2lvbiBuZXh0X3BpZD0yMDQ2IG5leHRfcHJpbz0xMTMKLSAgICAgIG1wZGVjaXNpb24tMjA0NiAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43Mjk4MDE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPW1wZGVjaXNpb24gcHJldl9waWQ9MjA0NiBwcmV2X3ByaW89MTEzIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoxSCBuZXh0X3BpZD0xNyBuZXh0X3ByaW89MTAwCi0gICAga3dvcmtlci8wOjFILTE3ICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzMwMTA0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyLzA6MUggcHJldl9waWQ9MTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPUQgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIGQuLjQgIDEyMTIuNzMwMTM0OiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzMwMTU0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAota3NvZnRpcnFkLzAtMyAoIDMpIFswMDBdIC4uLjIgIDEyMTIuNzMwMTc2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEyLjczMDIwMTogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjczMDIyMDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLWtzb2Z0aXJxZC8wLTMgKCAzKSBbMDAwXSAuLi4yICAxMjEyLjczMDI0MTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMi43MzAyNjI6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43MzAyODA6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi1rc29mdGlycWQvMC0zICggMykgWzAwMF0gLi4uMiAgMTIxMi43MzAzMDM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIGQuaDYgIDEyMTIuNzMwNjM4OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci91OjBIIHBpZD03IHByaW89MTAwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjczMDY2OTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyL3U6MEggbmV4dF9waWQ9NyBuZXh0X3ByaW89MTAwCi1rd29ya2VyL3U6MEgtNyAoIDcpIFswMDBdIGQuLjYgIDEyMTIuNzMwNzA3OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjFIIHBpZD0xNyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLWt3b3JrZXIvdTowSC03ICggNykgWzAwMF0gLi4uMiAgMTIxMi43MzA3Mjg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvdTowSCBwcmV2X3BpZD03IHByZXZfcHJpbz0xMDAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjFIIG5leHRfcGlkPTE3IG5leHRfcHJpbz0xMDAKLSAgICBrd29ya2VyLzA6MUgtMTcgICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43MzA5MTY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDoxSCBwcmV2X3BpZD0xNyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gZC5oNiAgMTIxMi43MzE2MzI6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyL3U6MEggcGlkPTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzMxNjYxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWt3b3JrZXIvdTowSCBuZXh0X3BpZD03IG5leHRfcHJpbz0xMDAKLWt3b3JrZXIvdTowSC03ICggNykgWzAwMF0gZC4uNiAgMTIxMi43MzE3MDI6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyLzA6MUggcGlkPTE3IHByaW89MTAwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAota3dvcmtlci91OjBILTcgKCA3KSBbMDAwXSAuLi4yICAxMjEyLjczMTcyMjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci91OjBIIHByZXZfcGlkPTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPUQgPT0+IG5leHRfY29tbT1rd29ya2VyLzA6MUggbmV4dF9waWQ9MTcgbmV4dF9wcmlvPTEwMAotICAgIGt3b3JrZXIvMDoxSC0xNyAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjczMTgzMjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8wOjFIIHByZXZfcGlkPTE3IHByZXZfcHJpbz0xMDAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSBkLmg2ICAxMjEyLjczMjY4NTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvdTowSCBwaWQ9NyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43MzI3MTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci91OjBIIG5leHRfcGlkPTcgbmV4dF9wcmlvPTEwMAota3dvcmtlci91OjBILTcgKCA3KSBbMDAwXSBkLi42ICAxMjEyLjczMjc0Nzogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMDoxSCBwaWQ9MTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi1rd29ya2VyL3U6MEgtNyAoIDcpIFswMDBdIC4uLjIgIDEyMTIuNzMyNzY3OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyL3U6MEggcHJldl9waWQ9NyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoxSCBuZXh0X3BpZD0xNyBuZXh0X3ByaW89MTAwCi0gICAga3dvcmtlci8wOjFILTE3ICAgICAgICAoLS0tLS0pIFswMDBdIGQuLjQgIDEyMTIuNzMyODEwOiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjJIIHBpZD01NTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAga3dvcmtlci8wOjFILTE3ICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzMyODI5OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyLzA6MUggcHJldl9waWQ9MTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1rd29ya2VyLzA6MkggbmV4dF9waWQ9NTU3IG5leHRfcHJpbz0xMDAKLSAgICBrd29ya2VyLzA6MkgtNTU3ICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43MzI4NTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDoySCBwcmV2X3BpZD01NTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIGQuaDQgIDEyMTIuODc2MjY2OiBzY2hlZF93YWtldXA6IGNvbW09UklMU2VuZGVyMCBwaWQ9MTM2NSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gZE5oNCAgMTIxMi44NzYyODQ6IHNjaGVkX3dha2V1cDogY29tbT1NTUhhbmRsZXJUaHJlYWQgcGlkPTcyMzEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuODc2MzE2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPVJJTFNlbmRlcjAgbmV4dF9waWQ9MTM2NSBuZXh0X3ByaW89MTIwCi1SSUxTZW5kZXIwLTEzNjUgKCAxMzQ1KSBbMDAwXSAuLi4yICAxMjEyLjg3NjQxNTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09UklMU2VuZGVyMCBwcmV2X3BpZD0xMzY1IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09TU1IYW5kbGVyVGhyZWFkIG5leHRfcGlkPTcyMzEgbmV4dF9wcmlvPTEyMAotIE1NSGFuZGxlclRocmVhZC03MjMxICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjg3NjQ1NDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09TU1IYW5kbGVyVGhyZWFkIHByZXZfcGlkPTcyMzEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIGQuaDQgIDEyMTMuMDg5NTY5OiBzY2hlZF93YWtldXA6IGNvbW09VGhyZWFkLTYyNSBwaWQ9NTc1MCBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gZE5oNCAgMTIxMy4wODk1ODc6IHNjaGVkX3dha2V1cDogY29tbT1NTUhhbmRsZXJUaHJlYWQgcGlkPTcyMzEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTMuMDg5NjIyOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPVRocmVhZC02MjUgbmV4dF9waWQ9NTc1MCBuZXh0X3ByaW89MTIwCi0gICAgICBUaHJlYWQtNjI1LTU3NTAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTMuMDg5ODQyOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1UaHJlYWQtNjI1IHByZXZfcGlkPTU3NTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1NTUhhbmRsZXJUaHJlYWQgbmV4dF9waWQ9NzIzMSBuZXh0X3ByaW89MTIwCi0gTU1IYW5kbGVyVGhyZWFkLTcyMzEgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTMuMDg5ODc5OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1NTUhhbmRsZXJUaHJlYWQgcHJldl9waWQ9NzIzMSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gZC5oNCAgMTIxMy4zMjc0Mzk6IHNjaGVkX3dha2V1cDogY29tbT1wYW5kb3JhLmFuZHJvaWQgcGlkPTUzOTUgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIGROaDQgIDEyMTMuMzI3NDU1OiBzY2hlZF93YWtldXA6IGNvbW09TU1IYW5kbGVyVGhyZWFkIHBpZD03MjMxIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEzLjMyNzQ4Nzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1NTUhhbmRsZXJUaHJlYWQgbmV4dF9waWQ9NzIzMSBuZXh0X3ByaW89MTIwCi0gTU1IYW5kbGVyVGhyZWFkLTcyMzEgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTMuMzI3NTE4OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1NTUhhbmRsZXJUaHJlYWQgcHJldl9waWQ9NzIzMSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXBhbmRvcmEuYW5kcm9pZCBuZXh0X3BpZD01Mzk1IG5leHRfcHJpbz0xMjAKLSBwYW5kb3JhLmFuZHJvaWQtNTM5NSAgICAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMy4zMjc3MTg6IHNjaGVkX3dha2V1cDogY29tbT1CaW5kZXJfMSBwaWQ9NzgwIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotIHBhbmRvcmEuYW5kcm9pZC01Mzk1ICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEzLjMyNzczOTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09cGFuZG9yYS5hbmRyb2lkIHByZXZfcGlkPTUzOTUgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIrID09PiBuZXh0X2NvbW09QmluZGVyXzEgbmV4dF9waWQ9NzgwIG5leHRfcHJpbz0xMjAKLSAgICAgICAgQmluZGVyXzEtNzgwICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMy4zMjc3NjM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPUJpbmRlcl8xIHByZXZfcGlkPTc4MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPXBhbmRvcmEuYW5kcm9pZCBuZXh0X3BpZD01Mzk1IG5leHRfcHJpbz0xMjAKLSBwYW5kb3JhLmFuZHJvaWQtNTM5NSAgICAgICgtLS0tLSkgWzAwMF0gZC4uMyAgMTIxMy4zMjc3ODE6IHNjaGVkX3dha2V1cDogY29tbT1CaW5kZXJfMSBwaWQ9NzgwIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotIHBhbmRvcmEuYW5kcm9pZC01Mzk1ICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEzLjMyNzc5NTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09cGFuZG9yYS5hbmRyb2lkIHByZXZfcGlkPTUzOTUgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIrID09PiBuZXh0X2NvbW09QmluZGVyXzEgbmV4dF9waWQ9NzgwIG5leHRfcHJpbz0xMjAKLSAgICAgICAgQmluZGVyXzEtNzgwICAgICAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMy4zMjgwNTY6IHNjaGVkX3dha2V1cDogY29tbT1CaW5kZXJfMSBwaWQ9ODc4IHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICBCaW5kZXJfMS03ODAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEzLjMyODA5NTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09QmluZGVyXzEgcHJldl9waWQ9NzgwIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09QmluZGVyXzEgbmV4dF9waWQ9ODc4IG5leHRfcHJpbz0xMjAKLUJpbmRlcl8xLTg3OCAoIDg3NykgWzAwMF0gZC4uNCAgMTIxMy4zMjgyNjM6IHNjaGVkX3dha2V1cDogY29tbT1CaW5kZXJfMSBwaWQ9NzgwIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotQmluZGVyXzEtODc4ICggODc3KSBbMDAwXSAuLi4yICAxMjEzLjMyODM0NTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09QmluZGVyXzEgcHJldl9waWQ9ODc4IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09QmluZGVyXzEgbmV4dF9waWQ9NzgwIG5leHRfcHJpbz0xMjAKLSAgICAgICAgQmluZGVyXzEtNzgwICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMy4zMjg1NTg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPUJpbmRlcl8xIHByZXZfcGlkPTc4MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXBhbmRvcmEuYW5kcm9pZCBuZXh0X3BpZD01Mzk1IG5leHRfcHJpbz0xMjAKLSBwYW5kb3JhLmFuZHJvaWQtNTM5NSAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMy4zMjg3NDM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXBhbmRvcmEuYW5kcm9pZCBwcmV2X3BpZD01Mzk1IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEzLjMyODc3Mzogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEzLjMyODc5Mzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLWtzb2Z0aXJxZC8wLTMgKCAzKSBbMDAwXSAuLi4yICAxMjEzLjMyODgyMTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMy4zMjg4NDY6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMy4zMjg4NjY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi1rc29mdGlycWQvMC0zICggMykgWzAwMF0gLi4uMiAgMTIxMy4zMjg4OTE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIGQuLjQgIDEyMTMuMzI4OTEzOiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTMuMzI4OTMxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAota3NvZnRpcnFkLzAtMyAoIDMpIFswMDBdIC4uLjIgIDEyMTMuMzI4OTY0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSBkLmg0ICAxMjEzLjQ2NTEzODogc2NoZWRfd2FrZXVwOiBjb21tPWF0cmFjZSBwaWQ9MTQ0NDYgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTMuNDY1MTcxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWF0cmFjZSBuZXh0X3BpZD0xNDQ0NiBuZXh0X3ByaW89MTIwCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvYXRyYWNlX21pc3NpbmdfdGdpZHMgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvYXRyYWNlX21pc3NpbmdfdGdpZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NjI0ODIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdGVzdF9kYXRhL2F0cmFjZV9taXNzaW5nX3RnaWRzCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLSMgdHJhY2VyOiBub3AKLSMKLSMgZW50cmllcy1pbi1idWZmZXIvZW50cmllcy13cml0dGVuOiAxMTYvMTE2ICAgI1A6MQotIwotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8tLS0tLT0+IGlycXMtb2ZmCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF8tLS0tPT4gbmVlZC1yZXNjaGVkCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLyBfLS0tPT4gaGFyZGlycS9zb2Z0aXJxCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IC8gXy0tPT4gcHJlZW1wdC1kZXB0aAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fHwgLyAgICAgZGVsYXkKLSMgICAgICAgICAgIFRBU0stUElEICAgQ1BVIyAgfHx8fCAgICBUSU1FU1RBTVAgIEZVTkNUSU9OCi0jICAgICAgICAgICAgICB8IHwgICAgICAgfCAgIHx8fHwgICAgICAgfCAgICAgICAgIHwKLSAgICAgICAgICBhdHJhY2UtMTQ0NDYgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi40NjUwNjI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWF0cmFjZSBwcmV2X3BpZD0xNDQ0NiBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMi40NjUwNzQ6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi40NjUwODI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi0gICAgIGtzb2Z0aXJxZC8wLTMgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNDY1MDkyOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEyLjQ2NTEwMjogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjQ2NTEyNjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLSAgICAga3NvZnRpcnFkLzAtMyAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi40NjUxMzI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAoLS0tLS0pIFswMDBdIGQuLjQgIDEyMTIuNDY1MTM5OiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNDY1MTQ1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAotICAgICBrc29mdGlycWQvMC0zICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjQ2NTIyNzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gZC5oNSAgMTIxMi40NjUyOTc6IHNjaGVkX3dha2V1cDogY29tbT1hZGJkIHBpZD0yMTIgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNDY1MzA2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWFkYmQgbmV4dF9waWQ9MjEyIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICAgIGFkYmQtMjEyICAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMi40NjUzMjk6IHNjaGVkX3dha2V1cDogY29tbT1hZGJkIHBpZD0yMDkgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgICBhZGJkLTIxMiAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNDY1MzQ4OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1hZGJkIHByZXZfcGlkPTIxMiBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPWFkYmQgbmV4dF9waWQ9MjA5IG5leHRfcHJpbz0xMjAKLSAgICAgICAgICAgIGFkYmQtMjA5ICAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMi40NjUzOTU6IHNjaGVkX3dha2V1cDogY29tbT1hZGJkIHBpZD0yMTEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgICBhZGJkLTIwOSAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNDY1NDQxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1hZGJkIHByZXZfcGlkPTIwOSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPWFkYmQgbmV4dF9waWQ9MjExIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICAgIGFkYmQtMjExICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi40NjU0NDg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWFkYmQgcHJldl9waWQ9MjExIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgKC0tLS0tKSBbMDAwXSBkLmg1ICAxMjEyLjU3NDU1NDogc2NoZWRfd2FrZXVwOiBjb21tPXNlbnNvcnMucWNvbSBwaWQ9MjkyIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjU3NDU2Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1zZW5zb3JzLnFjb20gbmV4dF9waWQ9MjkyIG5leHRfcHJpbz0xMjAKLSAgICBzZW5zb3JzLnFjb20tMjkyICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi41NzQ2NjU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD0yOTIgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zZW5zb3JzLnFjb20gbmV4dF9waWQ9MTQ0NDcgbmV4dF9wcmlvPTEyMAotICAgIHNlbnNvcnMucWNvbS0xNDQ0NyAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEyLjU3NDc5Nzogc2NoZWRfd2FrZXVwOiBjb21tPXNlbnNvcnMucWNvbSBwaWQ9MTU5MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICBzZW5zb3JzLnFjb20tMTQ0NDcgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi41NzQ4MDI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD0xNDQ0NyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UisgPT0+IG5leHRfY29tbT1zZW5zb3JzLnFjb20gbmV4dF9waWQ9MTU5MyBuZXh0X3ByaW89MTIwCi0gICAgc2Vuc29ycy5xY29tLTE1OTMgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNTc0ODE5OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zZW5zb3JzLnFjb20gcHJldl9waWQ9MTU5MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPXNlbnNvcnMucWNvbSBuZXh0X3BpZD0xNDQ0NyBuZXh0X3ByaW89MTIwCi0gICAgc2Vuc29ycy5xY29tLTE0NDQ3ICAoLS0tLS0pIFswMDBdIGQuLjMgIDEyMTIuNTc0ODIzOiBzY2hlZF93YWtldXA6IGNvbW09c2Vuc29ycy5xY29tIHBpZD0xNTkzIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgIHNlbnNvcnMucWNvbS0xNDQ0NyAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjU3NDgyNzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c2Vuc29ycy5xY29tIHByZXZfcGlkPTE0NDQ3IHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SKyA9PT4gbmV4dF9jb21tPXNlbnNvcnMucWNvbSBuZXh0X3BpZD0xNTkzIG5leHRfcHJpbz0xMjAKLSAgICBzZW5zb3JzLnFjb20tMTU5MyAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMi41NzQ4NjU6IHNjaGVkX3dha2V1cDogY29tbT1zZW5zb3JzLnFjb20gcGlkPTc2MCBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICBzZW5zb3JzLnFjb20tMTU5MyAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi41NzQ4NzY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD0xNTkzIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c2Vuc29ycy5xY29tIG5leHRfcGlkPTc2MCBuZXh0X3ByaW89MTIwCi0gICAgc2Vuc29ycy5xY29tLTc2MCAgICAoLS0tLS0pIFswMDBdIGQuLjQgIDEyMTIuNTc0OTA1OiBzY2hlZF93YWtldXA6IGNvbW09c3lzdGVtX3NlcnZlciBwaWQ9NzgyIHByaW89MTE4IHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgIHNlbnNvcnMucWNvbS03NjAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjU3NDkxNzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c2Vuc29ycy5xY29tIHByZXZfcGlkPTc2MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN5c3RlbV9zZXJ2ZXIgbmV4dF9waWQ9NzgyIG5leHRfcHJpbz0xMTgKLSAgIHN5c3RlbV9zZXJ2ZXItNzgyICAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMi41NzQ5ODE6IHNjaGVkX3dha2V1cDogY29tbT1zeXN0ZW1fc2VydmVyIHBpZD03ODUgcHJpbz0xMTggc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICBzeXN0ZW1fc2VydmVyLTc4MiAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNTc1MDA5OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zeXN0ZW1fc2VydmVyIHByZXZfcGlkPTc4MiBwcmV2X3ByaW89MTE4IHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN5c3RlbV9zZXJ2ZXIgbmV4dF9waWQ9Nzg1IG5leHRfcHJpbz0xMTgKLSAgIHN5c3RlbV9zZXJ2ZXItNzg1ICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi41NzUwNDU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN5c3RlbV9zZXJ2ZXIgcHJldl9waWQ9Nzg1IHByZXZfcHJpbz0xMTggcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c2Vuc29ycy5xY29tIG5leHRfcGlkPTE0NDQ3IG5leHRfcHJpbz0xMjAKLSAgICBzZW5zb3JzLnFjb20tMTQ0NDcgICgtLS0tLSkgWzAwMF0gLi4uMyAgMTIxMi41NzUxNDM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXNlbnNvcnMucWNvbSBwcmV2X3BpZD0xNDQ0NyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9eCA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMi41NzUxNTM6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi41NzUxNTk6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi0gICAgIGtzb2Z0aXJxZC8wLTMgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNTc1MTY3OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEyLjU3NTE3NTogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjU3NTE4MTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLSAgICAga3NvZnRpcnFkLzAtMyAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi41NzUxODg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAoLS0tLS0pIFswMDBdIGQuLjQgIDEyMTIuNTc1MTk1OiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNTc1MjAxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAotICAgICBrc29mdGlycWQvMC0zICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjU3NTIxMTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gZC5oNCAgMTIxMi42NDk2MDE6IHNjaGVkX3dha2V1cDogY29tbT1NTUhhbmRsZXJUaHJlYWQgcGlkPTcyMzEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNjQ5NjE0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPU1NSGFuZGxlclRocmVhZCBuZXh0X3BpZD03MjMxIG5leHRfcHJpbz0xMjAKLSBNTUhhbmRsZXJUaHJlYWQtNzIzMSAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi42NDk2MzA6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPU1NSGFuZGxlclRocmVhZCBwcmV2X3BpZD03MjMxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgKC0tLS0tKSBbMDAwXSBkLmg2ICAxMjEyLjcyOTUzOTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvdToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gZE5zNiAgMTIxMi43Mjk1NTA6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyLzA6MkggcGlkPTU1NyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43Mjk1NjM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci91OjEgbmV4dF9waWQ9MjEgbmV4dF9wcmlvPTEyMAotICAgICBrd29ya2VyL3U6MS0yMSAgICAgICAgKC0tLS0tKSBbMDAwXSBkLi41ICAxMjEyLjcyOTU3MTogc2NoZWRfd2FrZXVwOiBjb21tPW1wZGVjaXNpb24gcGlkPTIwNDYgcHJpbz0xMTMgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgIGt3b3JrZXIvdToxLTIxICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzI5NTc4OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyL3U6MSBwcmV2X3BpZD0yMSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoySCBuZXh0X3BpZD01NTcgbmV4dF9wcmlvPTEwMAotICAgIGt3b3JrZXIvMDoySC01NTcgICAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEyLjcyOTU5Nzogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMDoxSCBwaWQ9MTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAga3dvcmtlci8wOjJILTU1NyAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzI5NjAwOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyLzA6MkggcHJldl9waWQ9NTU3IHByZXZfcHJpbz0xMDAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09bXBkZWNpc2lvbiBuZXh0X3BpZD0yMDQ2IG5leHRfcHJpbz0xMTMKLSAgICAgIG1wZGVjaXNpb24tMjA0NiAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43Mjk4MDE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPW1wZGVjaXNpb24gcHJldl9waWQ9MjA0NiBwcmV2X3ByaW89MTEzIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoxSCBuZXh0X3BpZD0xNyBuZXh0X3ByaW89MTAwCi0gICAga3dvcmtlci8wOjFILTE3ICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzMwMTA0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyLzA6MUggcHJldl9waWQ9MTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPUQgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIGQuLjQgIDEyMTIuNzMwMTM0OiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzMwMTU0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAotICAgICBrc29mdGlycWQvMC0zICAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjczMDE3Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMi43MzAyMDE6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43MzAyMjA6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi0gICAgIGtzb2Z0aXJxZC8wLTMgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzMwMjQxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEyLjczMDI2Mjogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjczMDI4MDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLSAgICAga3NvZnRpcnFkLzAtMyAgICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43MzAzMDM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIGQuaDYgIDEyMTIuNzMwNjM4OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci91OjBIIHBpZD03IHByaW89MTAwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjczMDY2OTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyL3U6MEggbmV4dF9waWQ9NyBuZXh0X3ByaW89MTAwCi0gICAga3dvcmtlci91OjBILTcgICAgICAgICAoLS0tLS0pIFswMDBdIGQuLjYgIDEyMTIuNzMwNzA3OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjFIIHBpZD0xNyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICBrd29ya2VyL3U6MEgtNyAgICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43MzA3Mjg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvdTowSCBwcmV2X3BpZD03IHByZXZfcHJpbz0xMDAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjFIIG5leHRfcGlkPTE3IG5leHRfcHJpbz0xMDAKLSAgICBrd29ya2VyLzA6MUgtMTcgICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43MzA5MTY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDoxSCBwcmV2X3BpZD0xNyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gZC5oNiAgMTIxMi43MzE2MzI6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyL3U6MEggcGlkPTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzMxNjYxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWt3b3JrZXIvdTowSCBuZXh0X3BpZD03IG5leHRfcHJpbz0xMDAKLSAgICBrd29ya2VyL3U6MEgtNyAgICAgICAgICgtLS0tLSkgWzAwMF0gZC4uNiAgMTIxMi43MzE3MDI6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyLzA6MUggcGlkPTE3IHByaW89MTAwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgIGt3b3JrZXIvdTowSC03ICAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjczMTcyMjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci91OjBIIHByZXZfcGlkPTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPUQgPT0+IG5leHRfY29tbT1rd29ya2VyLzA6MUggbmV4dF9waWQ9MTcgbmV4dF9wcmlvPTEwMAotICAgIGt3b3JrZXIvMDoxSC0xNyAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEyLjczMTgzMjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8wOjFIIHByZXZfcGlkPTE3IHByZXZfcHJpbz0xMDAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSBkLmg2ICAxMjEyLjczMjY4NTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvdTowSCBwaWQ9NyBwcmlvPTEwMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43MzI3MTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci91OjBIIG5leHRfcGlkPTcgbmV4dF9wcmlvPTEwMAotICAgIGt3b3JrZXIvdTowSC03ICAgICAgICAgKC0tLS0tKSBbMDAwXSBkLi42ICAxMjEyLjczMjc0Nzogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMDoxSCBwaWQ9MTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAga3dvcmtlci91OjBILTcgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzMyNzY3OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyL3U6MEggcHJldl9waWQ9NyBwcmV2X3ByaW89MTAwIHByZXZfc3RhdGU9RCA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMDoxSCBuZXh0X3BpZD0xNyBuZXh0X3ByaW89MTAwCi0gICAga3dvcmtlci8wOjFILTE3ICAgICAgICAoLS0tLS0pIFswMDBdIGQuLjQgIDEyMTIuNzMyODEwOiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjJIIHBpZD01NTcgcHJpbz0xMDAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAga3dvcmtlci8wOjFILTE3ICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuNzMyODI5OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rd29ya2VyLzA6MUggcHJldl9waWQ9MTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1rd29ya2VyLzA6MkggbmV4dF9waWQ9NTU3IG5leHRfcHJpbz0xMDAKLSAgICBrd29ya2VyLzA6MkgtNTU3ICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMi43MzI4NTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDoySCBwcmV2X3BpZD01NTcgcHJldl9wcmlvPTEwMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIGQuaDQgIDEyMTIuODc2MjY2OiBzY2hlZF93YWtldXA6IGNvbW09UklMU2VuZGVyMCBwaWQ9MTM2NSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gZE5oNCAgMTIxMi44NzYyODQ6IHNjaGVkX3dha2V1cDogY29tbT1NTUhhbmRsZXJUaHJlYWQgcGlkPTcyMzEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuODc2MzE2OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPVJJTFNlbmRlcjAgbmV4dF9waWQ9MTM2NSBuZXh0X3ByaW89MTIwCi0gICAgICBSSUxTZW5kZXIwLTEzNjUgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuODc2NDE1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1SSUxTZW5kZXIwIHByZXZfcGlkPTEzNjUgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1NTUhhbmRsZXJUaHJlYWQgbmV4dF9waWQ9NzIzMSBuZXh0X3ByaW89MTIwCi0gTU1IYW5kbGVyVGhyZWFkLTcyMzEgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTIuODc2NDU0OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1NTUhhbmRsZXJUaHJlYWQgcHJldl9waWQ9NzIzMSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gZC5oNCAgMTIxMy4wODk1Njk6IHNjaGVkX3dha2V1cDogY29tbT1UaHJlYWQtNjI1IHBpZD01NzUwIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSBkTmg0ICAxMjEzLjA4OTU4Nzogc2NoZWRfd2FrZXVwOiBjb21tPU1NSGFuZGxlclRocmVhZCBwaWQ9NzIzMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMy4wODk2MjI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09VGhyZWFkLTYyNSBuZXh0X3BpZD01NzUwIG5leHRfcHJpbz0xMjAKLSAgICAgIFRocmVhZC02MjUtNTc1MCAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMy4wODk4NDI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPVRocmVhZC02MjUgcHJldl9waWQ9NTc1MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPU1NSGFuZGxlclRocmVhZCBuZXh0X3BpZD03MjMxIG5leHRfcHJpbz0xMjAKLSBNTUhhbmRsZXJUaHJlYWQtNzIzMSAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMy4wODk4Nzk6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPU1NSGFuZGxlclRocmVhZCBwcmV2X3BpZD03MjMxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSBkLmg0ICAxMjEzLjMyNzQzOTogc2NoZWRfd2FrZXVwOiBjb21tPXBhbmRvcmEuYW5kcm9pZCBwaWQ9NTM5NSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gZE5oNCAgMTIxMy4zMjc0NTU6IHNjaGVkX3dha2V1cDogY29tbT1NTUhhbmRsZXJUaHJlYWQgcGlkPTcyMzEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTMuMzI3NDg3OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPU1NSGFuZGxlclRocmVhZCBuZXh0X3BpZD03MjMxIG5leHRfcHJpbz0xMjAKLSBNTUhhbmRsZXJUaHJlYWQtNzIzMSAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMy4zMjc1MTg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPU1NSGFuZGxlclRocmVhZCBwcmV2X3BpZD03MjMxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09cGFuZG9yYS5hbmRyb2lkIG5leHRfcGlkPTUzOTUgbmV4dF9wcmlvPTEyMAotIHBhbmRvcmEuYW5kcm9pZC01Mzk1ICAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEzLjMyNzcxODogc2NoZWRfd2FrZXVwOiBjb21tPUJpbmRlcl8xIHBpZD03ODAgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gcGFuZG9yYS5hbmRyb2lkLTUzOTUgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTMuMzI3NzM5OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1wYW5kb3JhLmFuZHJvaWQgcHJldl9waWQ9NTM5NSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UisgPT0+IG5leHRfY29tbT1CaW5kZXJfMSBuZXh0X3BpZD03ODAgbmV4dF9wcmlvPTEyMAotICAgICAgICBCaW5kZXJfMS03ODAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEzLjMyNzc2Mzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09QmluZGVyXzEgcHJldl9waWQ9NzgwIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1EID09PiBuZXh0X2NvbW09cGFuZG9yYS5hbmRyb2lkIG5leHRfcGlkPTUzOTUgbmV4dF9wcmlvPTEyMAotIHBhbmRvcmEuYW5kcm9pZC01Mzk1ICAgICAgKC0tLS0tKSBbMDAwXSBkLi4zICAxMjEzLjMyNzc4MTogc2NoZWRfd2FrZXVwOiBjb21tPUJpbmRlcl8xIHBpZD03ODAgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gcGFuZG9yYS5hbmRyb2lkLTUzOTUgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTMuMzI3Nzk1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1wYW5kb3JhLmFuZHJvaWQgcHJldl9waWQ9NTM5NSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UisgPT0+IG5leHRfY29tbT1CaW5kZXJfMSBuZXh0X3BpZD03ODAgbmV4dF9wcmlvPTEyMAotICAgICAgICBCaW5kZXJfMS03ODAgICAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEzLjMyODA1Njogc2NoZWRfd2FrZXVwOiBjb21tPUJpbmRlcl8xIHBpZD04NzggcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgIEJpbmRlcl8xLTc4MCAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTMuMzI4MDk1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1CaW5kZXJfMSBwcmV2X3BpZD03ODAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1CaW5kZXJfMSBuZXh0X3BpZD04NzggbmV4dF9wcmlvPTEyMAotICAgICAgICBCaW5kZXJfMS04NzggICAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEzLjMyODI2Mzogc2NoZWRfd2FrZXVwOiBjb21tPUJpbmRlcl8xIHBpZD03ODAgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgIEJpbmRlcl8xLTg3OCAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTMuMzI4MzQ1OiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1CaW5kZXJfMSBwcmV2X3BpZD04NzggcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1CaW5kZXJfMSBuZXh0X3BpZD03ODAgbmV4dF9wcmlvPTEyMAotICAgICAgICBCaW5kZXJfMS03ODAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEzLjMyODU1ODogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09QmluZGVyXzEgcHJldl9waWQ9NzgwIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09cGFuZG9yYS5hbmRyb2lkIG5leHRfcGlkPTUzOTUgbmV4dF9wcmlvPTEyMAotIHBhbmRvcmEuYW5kcm9pZC01Mzk1ICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEzLjMyODc0Mzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09cGFuZG9yYS5hbmRyb2lkIHByZXZfcGlkPTUzOTUgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIGQuLjQgIDEyMTMuMzI4NzczOiBzY2hlZF93YWtldXA6IGNvbW09a3NvZnRpcnFkLzAgcGlkPTMgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTMuMzI4NzkzOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1zd2FwcGVyLzAgcHJldl9waWQ9MCBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UiA9PT4gbmV4dF9jb21tPWtzb2Z0aXJxZC8wIG5leHRfcGlkPTMgbmV4dF9wcmlvPTEyMAotICAgICBrc29mdGlycWQvMC0zICAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEzLjMyODgyMTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3NvZnRpcnFkLzAgcHJldl9waWQ9MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gZC4uNCAgMTIxMy4zMjg4NDY6IHNjaGVkX3dha2V1cDogY29tbT1rc29mdGlycWQvMCBwaWQ9MyBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMy4zMjg4NjY6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3NvZnRpcnFkLzAgbmV4dF9waWQ9MyBuZXh0X3ByaW89MTIwCi0gICAgIGtzb2Z0aXJxZC8wLTMgICAgICAgICAoLS0tLS0pIFswMDBdIC4uLjIgIDEyMTMuMzI4ODkxOiBzY2hlZF9zd2l0Y2g6IHByZXZfY29tbT1rc29mdGlycWQvMCBwcmV2X3BpZD0zIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8wIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSBkLi40ICAxMjEzLjMyODkxMzogc2NoZWRfd2FrZXVwOiBjb21tPWtzb2Z0aXJxZC8wIHBpZD0zIHByaW89MTIwIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAotICAgICAgICAgIDxpZGxlPi0wICAgICAgICAgKC0tLS0tKSBbMDAwXSAuLi4yICAxMjEzLjMyODkzMTogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rc29mdGlycWQvMCBuZXh0X3BpZD0zIG5leHRfcHJpbz0xMjAKLSAgICAga3NvZnRpcnFkLzAtMyAgICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMy4zMjg5NjQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWtzb2Z0aXJxZC8wIHByZXZfcGlkPTMgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCi0gICAgICAgICAgPGlkbGU+LTAgICAgICAgICAoLS0tLS0pIFswMDBdIGQuaDQgIDEyMTMuNDY1MTM4OiBzY2hlZF93YWtldXA6IGNvbW09YXRyYWNlIHBpZD0xNDQ0NiBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDAKLSAgICAgICAgICA8aWRsZT4tMCAgICAgICAgICgtLS0tLSkgWzAwMF0gLi4uMiAgMTIxMy40NjUxNzE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09YXRyYWNlIG5leHRfcGlkPTE0NDQ2IG5leHRfcHJpbz0xMjAKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3Rlc3RfZGF0YS9hdHJhY2VfcHJvY2ZzX2R1bXAgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvYXRyYWNlX3Byb2Nmc19kdW1wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWYwYzc2Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3Rlc3RfZGF0YS9hdHJhY2VfcHJvY2ZzX2R1bXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTU2ICswLDAgQEAKLXByb2MvMS90YXNrLzEKLS9wcm9jLzEwL3Rhc2svMTAKLS9wcm9jLzEwMC90YXNrLzEwMAotL3Byb2MvMTAxL3Rhc2svMTAxCi0vcHJvYy8xMDIvdGFzay8xMDIKLS9wcm9jLzEwMy90YXNrLzEwMwotL3Byb2MvMTA0L3Rhc2svMTA0Ci0vcHJvYy8xMDUvdGFzay8xMDUKLS9wcm9jLzEwNi90YXNrLzEwNgotL3Byb2MvMTA2OC90YXNrLzEwNjgKLS9wcm9jLzEwNy90YXNrLzEwNwotL3Byb2MvMTA3OS90YXNrLzEwNzkKLS9wcm9jLzEwNzkvdGFzay8xMDgwCi0vcHJvYy8xMDc5L3Rhc2svMTA4MQotL3Byb2MvMTA4L3Rhc2svMTA4Ci0vcHJvYy8xMDkvdGFzay8xMDkKLS9wcm9jLzExL3Rhc2svMTEKLS9wcm9jLzExMC90YXNrLzExMAotL3Byb2MvMTExL3Rhc2svMTExCi0vcHJvYy8xMTI0L3Rhc2svMTEyNAotL3Byb2MvMTEyNC90YXNrLzExMjcKLS9wcm9jLzExMjQvdGFzay8xMTI5Ci0vcHJvYy8xMTI0L3Rhc2svMTEzMQotL3Byb2MvMTEyNC90YXNrLzExMzMKLS9wcm9jLzExMjQvdGFzay8xMTM0Ci0vcHJvYy8xMTI0L3Rhc2svMTEzNQotL3Byb2MvMTEyNC90YXNrLzExMzYKLS9wcm9jLzExMjQvdGFzay8xMTM3Ci0vcHJvYy8xMTI0L3Rhc2svMTE4MgotL3Byb2MvMTEyNC90YXNrLzExODQKLS9wcm9jLzExMjQvdGFzay8xMTg3Ci0vcHJvYy8xMTI0L3Rhc2svMTIyNAotL3Byb2MvMTEyNC90YXNrLzEyMzIKLS9wcm9jLzExMjQvdGFzay8xMjg4Ci0vcHJvYy8xMTI0L3Rhc2svMTMwMQotL3Byb2MvMTEyNC90YXNrLzEzMTUKLS9wcm9jLzExMjQvdGFzay8xMzIyCi0vcHJvYy8xMTI0L3Rhc2svMTMyMwotL3Byb2MvMTEyNC90YXNrLzEzMjcKLS9wcm9jLzExMjQvdGFzay8xMzg1Ci0vcHJvYy8xMTI0L3Rhc2svMTQyNgotL3Byb2MvMTEyNC90YXNrLzE0MzAKLS9wcm9jLzExMjQvdGFzay8xNTUyCi0vcHJvYy8xMTI0L3Rhc2svMTU1NAotL3Byb2MvMTEyNC90YXNrLzIyNzgyCi0vcHJvYy8xMTI0L3Rhc2svMjMzNzAKLS9wcm9jLzExMjQvdGFzay8yMzM5OAotL3Byb2MvMTEyNC90YXNrLzIzNDAxCi0vcHJvYy8xMTI0L3Rhc2svMjQzMzcKLS9wcm9jLzExMjQvdGFzay8yNDM1NQotL3Byb2MvMTEyNC90YXNrLzI0MzU2Ci0vcHJvYy8xMTI0L3Rhc2svMjQzNTcKLS9wcm9jLzExMjQvdGFzay8yNDM1OAotL3Byb2MvMTIvdGFzay8xMgotL3Byb2MvMTI2OC90YXNrLzEyNjgKLS9wcm9jLzEzNC90YXNrLzEzNAotL3Byb2MvMTM0NS90YXNrLzEzNDUKLS9wcm9jLzEzNDUvdGFzay8xMzU0Ci0vcHJvYy8xMzQ1L3Rhc2svMTM1NQotL3Byb2MvMTM0NS90YXNrLzEzNTkKLS9wcm9jLzEzNDUvdGFzay8xMzYwCi0vcHJvYy8xMzQ1L3Rhc2svMTM2MwotL3Byb2MvMTM0NS90YXNrLzEzNjQKLS9wcm9jLzEzNDUvdGFzay8xMzY1Ci0vcHJvYy8xMzQ1L3Rhc2svMTM2OAotL3Byb2MvMTM0NS90YXNrLzE3MzgKLS9wcm9jLzEzNS90YXNrLzEzNQotL3Byb2MvMTM3MC90YXNrLzExMDQ4Ci0vcHJvYy8xMzcwL3Rhc2svMTM3MAotL3Byb2MvMTM3MC90YXNrLzEzNzcKLS9wcm9jLzEzNzAvdGFzay8xMzc4Ci0vcHJvYy8xMzcwL3Rhc2svMTM4MgotL3Byb2MvMTM3MC90YXNrLzEzODMKLS9wcm9jLzEzNzAvdGFzay8xMzg0Ci0vcHJvYy8xMzcwL3Rhc2svMTM4NgotL3Byb2MvMTM3MC90YXNrLzEzODkKLS9wcm9jLzEzNzAvdGFzay8xMzkyCi0vcHJvYy8xMzcwL3Rhc2svMTM5MjcKLS9wcm9jLzEzNzAvdGFzay8xNDQyCi0vcHJvYy8xMzcwL3Rhc2svMTQ0MwotL3Byb2MvMTM3MC90YXNrLzE2MTMKLS9wcm9jLzEzNzAvdGFzay8xNjg2NQotL3Byb2MvMTM3MC90YXNrLzE2OTIKLS9wcm9jLzEzNzAvdGFzay8xOTE4NwotL3Byb2MvMTM3MC90YXNrLzE5MTkyCi0vcHJvYy8xMzcwL3Rhc2svMTk3MgotL3Byb2MvMTM3MC90YXNrLzE5ODIKLS9wcm9jLzEzNzAvdGFzay8yMDgyCi0vcHJvYy8xMzcwL3Rhc2svMjEwMwotL3Byb2MvMTM3MC90YXNrLzIxMDYKLS9wcm9jLzEzNzAvdGFzay8yMTIzCi0vcHJvYy8xMzcwL3Rhc2svMjEzMQotL3Byb2MvMTM3MC90YXNrLzIxMzUKLS9wcm9jLzEzNzAvdGFzay8yMTYxCi0vcHJvYy8xMzcwL3Rhc2svMjE5MjAKLS9wcm9jLzEzNzAvdGFzay8yNDM4Ci0vcHJvYy8xMzcwL3Rhc2svMjQ1MwotL3Byb2MvMTM3MC90YXNrLzMwODYKLS9wcm9jLzEzNzAvdGFzay8zMTE0Ci0vcHJvYy8xMzcwL3Rhc2svMzMyOQotL3Byb2MvMTM3MC90YXNrLzU5NzkKLS9wcm9jLzEzNzAvdGFzay81OTgwCi0vcHJvYy8xMzcwL3Rhc2svNjY1NAotL3Byb2MvMTM3MC90YXNrLzgwNTgKLS9wcm9jLzEzNzAvdGFzay85MDA5Ci0vcHJvYy8xMzkzL3Rhc2svMTM5MwotL3Byb2MvMTM5My90YXNrLzEzOTUKLS9wcm9jLzEzOTMvdGFzay8xMzk3Ci0vcHJvYy8xMzkzL3Rhc2svMTQwMgotL3Byb2MvMTM5My90YXNrLzE0MDMKLS9wcm9jLzEzOTMvdGFzay8xNDA1Ci0vcHJvYy8xMzkzL3Rhc2svMTQwNgotL3Byb2MvMTM5My90YXNrLzE0MDcKLS9wcm9jLzEzOTMvdGFzay8xNDEyCi0vcHJvYy8xMzkzL3Rhc2svMTQ5MAotL3Byb2MvMTM5My90YXNrLzE1MzIKLS9wcm9jLzEzOTMvdGFzay8xNTMzCi0vcHJvYy8xMzkzL3Rhc2svMTUzNQotL3Byb2MvMTM5My90YXNrLzE1NTAKLS9wcm9jLzE0L3Rhc2svMTQKLS9wcm9jLzE0MzcvdGFzay8xNDM3Ci0vcHJvYy8xNDU4L3Rhc2svMTQ1OAotL3Byb2MvMTQ1OC90YXNrLzE0NjEKLS9wcm9jLzE0NTgvdGFzay8xNDYzCi0vcHJvYy8xNDU4L3Rhc2svMTQ2NQotL3Byb2MvMTQ1OC90YXNrLzE0NjYKLS9wcm9jLzE0NTgvdGFzay8xNDY3Ci0vcHJvYy8xNDU4L3Rhc2svMTQ2OQotL3Byb2MvMTQ1OC90YXNrLzE0NzAKLS9wcm9jLzE0NTgvdGFzay8xNDc2Ci0vcHJvYy8xNDU4L3Rhc2svMTUzOQotL3Byb2MvMTQ1OC90YXNrLzE1NDIKLS9wcm9jLzE0NTgvdGFzay8xNTQ4Ci0vcHJvYy8xNDU4L3Rhc2svMTU0OQotL3Byb2MvMTQ1OC90YXNrLzUxNTEKLS9wcm9jLzE0NzEvdGFzay8xNDcxCi0vcHJvYy8xNDcxL3Rhc2svMTQ3NQotL3Byb2MvMTQ3MS90YXNrLzE0NzgKLS9wcm9jLzE0NzEvdGFzay8xNDc5Ci0vcHJvYy8xNDcxL3Rhc2svMTQ4MAotL3Byb2MvMTQ3MS90YXNrLzE0ODEKLS9wcm9jLzE0NzEvdGFzay8xNDgyCi0vcHJvYy8xNDcxL3Rhc2svMTQ4NQotL3Byb2MvMTQ3MS90YXNrLzE0OTEKLS9wcm9jLzE0NzEvdGFzay8xNjA5Ci0vcHJvYy8xNDcxL3Rhc2svMTYxNAotL3Byb2MvMTQ3MS90YXNrLzE2MTcKLS9wcm9jLzE0NzEvdGFzay8xNjIzCi0vcHJvYy8xNDcxL3Rhc2svMTgwOQotL3Byb2MvMTQ3MS90YXNrLzE4MTAKLS9wcm9jLzE0NzEvdGFzay8xODExCi0vcHJvYy8xNDcxL3Rhc2svMTgxMwotL3Byb2MvMTQ3MS90YXNrLzIwNjkKLS9wcm9jLzE0NzEvdGFzay8yMDcwCi0vcHJvYy8xNDcxL3Rhc2svMjA3MQotL3Byb2MvMTQ3MS90YXNrLzIwNzIKLS9wcm9jLzE0NzEvdGFzay8yMDczCi0vcHJvYy8xNDcxL3Rhc2svMjA5MwotL3Byb2MvMTQ3MS90YXNrLzI1MTYKLS9wcm9jLzE0NzEvdGFzay81MTQ2Ci0vcHJvYy8xNDcxL3Rhc2svNTE0OAotL3Byb2MvMTQ3MS90YXNrLzUxNTIKLS9wcm9jLzE0NzEvdGFzay81MTY0Ci0vcHJvYy8xNDcxL3Rhc2svNTIzNAotL3Byb2MvMTQ3MS90YXNrLzUyNDIKLS9wcm9jLzE0NzEvdGFzay81MjQ4Ci0vcHJvYy8xNDgzL3Rhc2svMTQ4MwotL3Byb2MvMTQ4My90YXNrLzE0ODkKLS9wcm9jLzE0ODMvdGFzay8xNDkyCi0vcHJvYy8xNDgzL3Rhc2svMTQ5MwotL3Byb2MvMTQ4My90YXNrLzE0OTQKLS9wcm9jLzE0ODMvdGFzay8xNDk1Ci0vcHJvYy8xNDgzL3Rhc2svMTQ5NwotL3Byb2MvMTQ4My90YXNrLzE0OTgKLS9wcm9jLzE0ODMvdGFzay8xNTAxCi0vcHJvYy8xNDgzL3Rhc2svMTU1OQotL3Byb2MvMTQ4My90YXNrLzE1NzkKLS9wcm9jLzE0ODMvdGFzay8xNTgwCi0vcHJvYy8xNDgzL3Rhc2svMTYwNwotL3Byb2MvMTQ4My90YXNrLzE2MjEKLS9wcm9jLzE0ODMvdGFzay8xNjIyCi0vcHJvYy8xNDgzL3Rhc2svMTYyNAotL3Byb2MvMTQ4My90YXNrLzE2MjUKLS9wcm9jLzE0ODMvdGFzay8xNjI3Ci0vcHJvYy8xNDgzL3Rhc2svMTYyOAotL3Byb2MvMTQ4My90YXNrLzE2NDcKLS9wcm9jLzE0ODMvdGFzay8xNjgyCi0vcHJvYy8xNDgzL3Rhc2svMTc0NgotL3Byb2MvMTQ4My90YXNrLzE3OTcKLS9wcm9jLzE0ODMvdGFzay8xODAwCi0vcHJvYy8xNDgzL3Rhc2svMjkxMgotL3Byb2MvMTQ4My90YXNrLzI5MTMKLS9wcm9jLzE0ODMvdGFzay80NjMxCi0vcHJvYy8xNDgzL3Rhc2svNDcwMgotL3Byb2MvMTQ4My90YXNrLzQ3NTgKLS9wcm9jLzE0ODMvdGFzay80NzU5Ci0vcHJvYy8xNS90YXNrLzE1Ci0vcHJvYy8xNTAwL3Rhc2svMTUwMAotL3Byb2MvMTUwMC90YXNrLzE1MDkKLS9wcm9jLzE1MDAvdGFzay8xNTEyCi0vcHJvYy8xNTAwL3Rhc2svMTUxMwotL3Byb2MvMTUwMC90YXNrLzE1MTQKLS9wcm9jLzE1MDAvdGFzay8xNTE4Ci0vcHJvYy8xNTAwL3Rhc2svMTUxOQotL3Byb2MvMTUwMC90YXNrLzE1MjQKLS9wcm9jLzE1MDAvdGFzay8xNTMxCi0vcHJvYy8xNTAwL3Rhc2svMTYxNgotL3Byb2MvMTUwMC90YXNrLzE2MzcKLS9wcm9jLzE1MDAvdGFzay8xNjkzCi0vcHJvYy8xNTAwL3Rhc2svMTcwNAotL3Byb2MvMTUwMC90YXNrLzE4MjEKLS9wcm9jLzE1MDAvdGFzay8xODIyCi0vcHJvYy8xNTAwL3Rhc2svMTg0MgotL3Byb2MvMTUwMC90YXNrLzE4NDcKLS9wcm9jLzE1MDAvdGFzay8xODQ4Ci0vcHJvYy8xNTAwL3Rhc2svMTg0OQotL3Byb2MvMTUwMC90YXNrLzE4NTAKLS9wcm9jLzE1MDAvdGFzay8xODUxCi0vcHJvYy8xNTAwL3Rhc2svMTg1MgotL3Byb2MvMTUwMC90YXNrLzE4NTMKLS9wcm9jLzE1MDAvdGFzay8xODU0Ci0vcHJvYy8xNTAwL3Rhc2svMTg1OQotL3Byb2MvMTUwMC90YXNrLzE4ODYKLS9wcm9jLzE1MDAvdGFzay8xODk5Ci0vcHJvYy8xNTAwL3Rhc2svMTkxNQotL3Byb2MvMTUwMC90YXNrLzE5MTkKLS9wcm9jLzE1MDAvdGFzay8yMDA2NwotL3Byb2MvMTUwMC90YXNrLzI1MjAKLS9wcm9jLzE1MDAvdGFzay8yNTI0Ci0vcHJvYy8xNTAwL3Rhc2svNTEzNgotL3Byb2MvMTUwMC90YXNrLzUxNjUKLS9wcm9jLzE1MDAvdGFzay81MTgxCi0vcHJvYy8xNTAwL3Rhc2svNTE4OQotL3Byb2MvMTUwMC90YXNrLzUyMzIKLS9wcm9jLzE1MDAvdGFzay81MjUwCi0vcHJvYy8xNTUvdGFzay8xNTUKLS9wcm9jLzE1Ni90YXNrLzE1NgotL3Byb2MvMTU3L3Rhc2svMTU3Ci0vcHJvYy8xNTgvdGFzay8xNTgKLS9wcm9jLzE1OS90YXNrLzE1OQotL3Byb2MvMTYvdGFzay8xNgotL3Byb2MvMTYwL3Rhc2svMTYwCi0vcHJvYy8xNjEvdGFzay8xNjEKLS9wcm9jLzE2Mi90YXNrLzE2MgotL3Byb2MvMTYzL3Rhc2svMTYzCi0vcHJvYy8xNjQvdGFzay8xNjQKLS9wcm9jLzE2NS90YXNrLzE2NQotL3Byb2MvMTY1NS90YXNrLzExMzEwCi0vcHJvYy8xNjU1L3Rhc2svMTM0MDAKLS9wcm9jLzE2NTUvdGFzay8xNjU1Ci0vcHJvYy8xNjU1L3Rhc2svMTY2MAotL3Byb2MvMTY1NS90YXNrLzE2NjMKLS9wcm9jLzE2NTUvdGFzay8xNjY2Ci0vcHJvYy8xNjU1L3Rhc2svMTY2NwotL3Byb2MvMTY1NS90YXNrLzE2NjgKLS9wcm9jLzE2NTUvdGFzay8xNjY5Ci0vcHJvYy8xNjU1L3Rhc2svMTY3MwotL3Byb2MvMTY1NS90YXNrLzE2NzUKLS9wcm9jLzE2NTUvdGFzay8xNzEwCi0vcHJvYy8xNjU1L3Rhc2svMTcxNgotL3Byb2MvMTY1NS90YXNrLzE3MTgKLS9wcm9jLzE2NTUvdGFzay8xNzI1Ci0vcHJvYy8xNjU1L3Rhc2svMTczNwotL3Byb2MvMTY1NS90YXNrLzE3NTQKLS9wcm9jLzE2NTUvdGFzay8xODM2Ci0vcHJvYy8xNjU1L3Rhc2svMTgzOAotL3Byb2MvMTY1NS90YXNrLzE4NjEKLS9wcm9jLzE2NTUvdGFzay8xODcwCi0vcHJvYy8xNjU1L3Rhc2svMTg5MgotL3Byb2MvMTY1NS90YXNrLzI1NDQKLS9wcm9jLzE2NTUvdGFzay8yNTQ4Ci0vcHJvYy8xNjU1L3Rhc2svMjU1MAotL3Byb2MvMTY1NS90YXNrLzI1NTIKLS9wcm9jLzE2NTUvdGFzay8yNTU0Ci0vcHJvYy8xNjU1L3Rhc2svMjU3NwotL3Byb2MvMTY1NS90YXNrLzI1ODUKLS9wcm9jLzE2NTUvdGFzay8yNTg2Ci0vcHJvYy8xNjU1L3Rhc2svMjYwMAotL3Byb2MvMTY1NS90YXNrLzI2MDcKLS9wcm9jLzE2NTUvdGFzay8yNjE1Ci0vcHJvYy8xNjU1L3Rhc2svNzc3MwotL3Byb2MvMTY1NS90YXNrLzc3NzUKLS9wcm9jLzE2NTUvdGFzay83Nzc2Ci0vcHJvYy8xNjU1L3Rhc2svNzc3NwotL3Byb2MvMTY2L3Rhc2svMTY2Ci0vcHJvYy8xNjcvdGFzay8xNjcKLS9wcm9jLzE2OC90YXNrLzE2OAotL3Byb2MvMTY5L3Rhc2svMTY5Ci0vcHJvYy8xNzAvdGFzay8xNzAKLS9wcm9jLzE3MS90YXNrLzE3MQotL3Byb2MvMTcyL3Rhc2svMTcyCi0vcHJvYy8xNzMvdGFzay8xNzMKLS9wcm9jLzE3NC90YXNrLzE3NAotL3Byb2MvMTc1L3Rhc2svMTc1Ci0vcHJvYy8xNzYvdGFzay8xNzYKLS9wcm9jLzE3NjAvdGFzay8xMjc2NAotL3Byb2MvMTc2MC90YXNrLzE0MTQzCi0vcHJvYy8xNzYwL3Rhc2svMTc2MAotL3Byb2MvMTc2MC90YXNrLzE3NjUKLS9wcm9jLzE3NjAvdGFzay8xNzY2Ci0vcHJvYy8xNzYwL3Rhc2svMTc2NwotL3Byb2MvMTc2MC90YXNrLzE3NjgKLS9wcm9jLzE3NjAvdGFzay8xNzY5Ci0vcHJvYy8xNzYwL3Rhc2svMTc3MAotL3Byb2MvMTc2MC90YXNrLzE3NzEKLS9wcm9jLzE3NjAvdGFzay8xNzc1Ci0vcHJvYy8xNzYwL3Rhc2svMTc5NTEKLS9wcm9jLzE3NjAvdGFzay8xODI1Ci0vcHJvYy8xNzYwL3Rhc2svMTgyNwotL3Byb2MvMTc2MC90YXNrLzE4NTgKLS9wcm9jLzE3NjAvdGFzay8xODg1Ci0vcHJvYy8xNzYwL3Rhc2svMTg5OAotL3Byb2MvMTc2MC90YXNrLzE5MzA5Ci0vcHJvYy8xNzYwL3Rhc2svMTk4NgotL3Byb2MvMTc2MC90YXNrLzIwOTYKLS9wcm9jLzE3NjAvdGFzay8yMTA0Ci0vcHJvYy8xNzYwL3Rhc2svMjEwOAotL3Byb2MvMTc2MC90YXNrLzIxODMKLS9wcm9jLzE3NjAvdGFzay8yMjE4NAotL3Byb2MvMTc2MC90YXNrLzIyMzUKLS9wcm9jLzE3NjAvdGFzay8yMzYwNAotL3Byb2MvMTc2MC90YXNrLzI0NDUKLS9wcm9jLzE3NjAvdGFzay8yNDczCi0vcHJvYy8xNzYwL3Rhc2svMjQ3NQotL3Byb2MvMTc2MC90YXNrLzI0ODMKLS9wcm9jLzE3NjAvdGFzay8yNDg0Ci0vcHJvYy8xNzYwL3Rhc2svMjQ4NQotL3Byb2MvMTc2MC90YXNrLzI0ODYKLS9wcm9jLzE3NjAvdGFzay8yNDg3Ci0vcHJvYy8xNzYwL3Rhc2svMjYxMgotL3Byb2MvMTc2MC90YXNrLzI2MTQKLS9wcm9jLzE3NjAvdGFzay8yNjI1Ci0vcHJvYy8xNzYwL3Rhc2svMjY3MAotL3Byb2MvMTc2MC90YXNrLzMyMTEKLS9wcm9jLzE3NjAvdGFzay8zMjEzCi0vcHJvYy8xNzYwL3Rhc2svMzIxNAotL3Byb2MvMTc2MC90YXNrLzMyMTYKLS9wcm9jLzE3NjAvdGFzay8zMjE3Ci0vcHJvYy8xNzYwL3Rhc2svMzIxOAotL3Byb2MvMTc2MC90YXNrLzMyMTkKLS9wcm9jLzE3NjAvdGFzay8zMjIwCi0vcHJvYy8xNzYwL3Rhc2svMzIyMgotL3Byb2MvMTc2MC90YXNrLzMyMjMKLS9wcm9jLzE3NjAvdGFzay8zMjM0Ci0vcHJvYy8xNzcvdGFzay8xNzcKLS9wcm9jLzE3NzIvdGFzay8xMDQ1OAotL3Byb2MvMTc3Mi90YXNrLzEyMjgxCi0vcHJvYy8xNzcyL3Rhc2svMTc3MgotL3Byb2MvMTc3Mi90YXNrLzE3NzYKLS9wcm9jLzE3NzIvdGFzay8xNzc5Ci0vcHJvYy8xNzcyL3Rhc2svMTc4MQotL3Byb2MvMTc3Mi90YXNrLzE3ODMKLS9wcm9jLzE3NzIvdGFzay8xNzg0Ci0vcHJvYy8xNzcyL3Rhc2svMTc4NgotL3Byb2MvMTc3Mi90YXNrLzE3ODgKLS9wcm9jLzE3NzIvdGFzay8xNzkwCi0vcHJvYy8xNzcyL3Rhc2svMTc5MwotL3Byb2MvMTc3Mi90YXNrLzE4MzkKLS9wcm9jLzE3NzIvdGFzay8xODU3Ci0vcHJvYy8xNzcyL3Rhc2svMTg2OAotL3Byb2MvMTc3Mi90YXNrLzE4ODIKLS9wcm9jLzE3NzIvdGFzay8xODg2OQotL3Byb2MvMTc3Mi90YXNrLzE5MDcKLS9wcm9jLzE3NzIvdGFzay8xOTEwCi0vcHJvYy8xNzcyL3Rhc2svMTkxMQotL3Byb2MvMTc3Mi90YXNrLzE5MTIKLS9wcm9jLzE3NzIvdGFzay8xOTEzCi0vcHJvYy8xNzcyL3Rhc2svMTkxNAotL3Byb2MvMTc3Mi90YXNrLzE5MjEKLS9wcm9jLzE3NzIvdGFzay8xOTIyCi0vcHJvYy8xNzcyL3Rhc2svMTk0MAotL3Byb2MvMTc3Mi90YXNrLzE5NTEKLS9wcm9jLzE3NzIvdGFzay8xOTY3Ci0vcHJvYy8xNzcyL3Rhc2svMTk3MAotL3Byb2MvMTc3Mi90YXNrLzE5ODMKLS9wcm9jLzE3NzIvdGFzay8yMDAxCi0vcHJvYy8xNzcyL3Rhc2svMjAzNwotL3Byb2MvMTc3Mi90YXNrLzIwODcKLS9wcm9jLzE3NzIvdGFzay8yMDkwCi0vcHJvYy8xNzcyL3Rhc2svMjEwMgotL3Byb2MvMTc3Mi90YXNrLzIxMzIKLS9wcm9jLzE3NzIvdGFzay8yMTM2Ci0vcHJvYy8xNzcyL3Rhc2svMjE2MgotL3Byb2MvMTc3Mi90YXNrLzI0NjEKLS9wcm9jLzE3NzIvdGFzay8yNDk0Ci0vcHJvYy8xNzcyL3Rhc2svMjQ5NQotL3Byb2MvMTc3Mi90YXNrLzI0OTYKLS9wcm9jLzE3NzIvdGFzay8yNDk3Ci0vcHJvYy8xNzcyL3Rhc2svMjQ5OAotL3Byb2MvMTc3Mi90YXNrLzMxMTYKLS9wcm9jLzE3NzIvdGFzay8zMTU2Ci0vcHJvYy8xNzcyL3Rhc2svNTI2MgotL3Byb2MvMTc3Mi90YXNrLzU3MTIKLS9wcm9jLzE3NzIvdGFzay82MzY3Ci0vcHJvYy8xNzcyL3Rhc2svODA2MAotL3Byb2MvMTc3Mi90YXNrLzkwMTEKLS9wcm9jLzE3OC90YXNrLzE3OAotL3Byb2MvMTc5L3Rhc2svMTc5Ci0vcHJvYy8xOC90YXNrLzE4Ci0vcHJvYy8xODA4OS90YXNrLzE4MDg5Ci0vcHJvYy8xODA4OS90YXNrLzE4MDkzCi0vcHJvYy8xODA4OS90YXNrLzE4MDk1Ci0vcHJvYy8xODA4OS90YXNrLzE4MDk2Ci0vcHJvYy8xODA4OS90YXNrLzE4MDk3Ci0vcHJvYy8xODA4OS90YXNrLzE4MDk4Ci0vcHJvYy8xODA4OS90YXNrLzE4MDk5Ci0vcHJvYy8xODA4OS90YXNrLzE4MTAwCi0vcHJvYy8xODA4OS90YXNrLzE4MTAxCi0vcHJvYy8xODA4OS90YXNrLzE4MzQwCi0vcHJvYy8xODA4OS90YXNrLzE4MzY4Ci0vcHJvYy8xODA4OS90YXNrLzE4NDUwCi0vcHJvYy8xODA4OS90YXNrLzE4OTY5Ci0vcHJvYy8xODA4OS90YXNrLzIwNjkzCi0vcHJvYy8xODA4OS90YXNrLzIyNTAzCi0vcHJvYy8xODY0OS90YXNrLzE4NjQ5Ci0vcHJvYy8xODY0OS90YXNrLzE4NjU0Ci0vcHJvYy8xODY0OS90YXNrLzE4NjU1Ci0vcHJvYy8xODY0OS90YXNrLzE4NjU2Ci0vcHJvYy8xODY0OS90YXNrLzE4NjU3Ci0vcHJvYy8xODY0OS90YXNrLzE4NjU4Ci0vcHJvYy8xODY0OS90YXNrLzE4NjU5Ci0vcHJvYy8xODY0OS90YXNrLzE4NjYwCi0vcHJvYy8xODY0OS90YXNrLzE4NjYxCi0vcHJvYy8xODY0OS90YXNrLzE4NjY1Ci0vcHJvYy8xODY0OS90YXNrLzE4NjcwCi0vcHJvYy8xODY0OS90YXNrLzE4Njk3Ci0vcHJvYy8xODY0OS90YXNrLzIwMjI4Ci0vcHJvYy8xODY0OS90YXNrLzIwMjMwCi0vcHJvYy8xODY0OS90YXNrLzIyNzUwCi0vcHJvYy8xODY0OS90YXNrLzIyNzUxCi0vcHJvYy8xODY0OS90YXNrLzIyNzUyCi0vcHJvYy8xODY0OS90YXNrLzIyNzU1Ci0vcHJvYy8xODY0OS90YXNrLzIyNzU2Ci0vcHJvYy8xODY0OS90YXNrLzIyNzU4Ci0vcHJvYy8xODk0OS90YXNrLzE4OTQ5Ci0vcHJvYy8xODk0OS90YXNrLzE4OTU0Ci0vcHJvYy8xODk0OS90YXNrLzE4OTU1Ci0vcHJvYy8xODk0OS90YXNrLzE4OTU2Ci0vcHJvYy8xODk0OS90YXNrLzE4OTU3Ci0vcHJvYy8xODk0OS90YXNrLzE4OTU4Ci0vcHJvYy8xODk0OS90YXNrLzE4OTYxCi0vcHJvYy8xODk0OS90YXNrLzE4OTYyCi0vcHJvYy8xODk0OS90YXNrLzE4OTY0Ci0vcHJvYy8xOS90YXNrLzE5Ci0vcHJvYy8yL3Rhc2svMgotL3Byb2MvMjAvdGFzay8yMAotL3Byb2MvMjAwL3Rhc2svMjAwCi0vcHJvYy8yMDEvdGFzay8yMDEKLS9wcm9jLzIwMy90YXNrLzIwMwotL3Byb2MvMjA0L3Rhc2svMjA0Ci0vcHJvYy8yMDUvdGFzay8yMDUKLS9wcm9jLzIwNy90YXNrLzIwNwotL3Byb2MvMjA4L3Rhc2svMjA4Ci0vcHJvYy8yMDkvdGFzay8yMDkKLS9wcm9jLzIxMS90YXNrLzIxMQotL3Byb2MvMjEyL3Rhc2svMjEyCi0vcHJvYy8yMTMvdGFzay8yMTMKLS9wcm9jLzIxNi90YXNrLzIxNgotL3Byb2MvMjE4L3Rhc2svMjE4Ci0vcHJvYy8yMTkvdGFzay8yMTkKLS9wcm9jLzIyL3Rhc2svMjIKLS9wcm9jLzIyMC90YXNrLzIyMAotL3Byb2MvMjIxL3Rhc2svMjIxCi0vcHJvYy8yMjIvdGFzay8yMjIKLS9wcm9jLzIyMy90YXNrLzIyMwotL3Byb2MvMjIzODIvdGFzay8yMjM4MgotL3Byb2MvMjI0L3Rhc2svMjI0Ci0vcHJvYy8yMjUvdGFzay8yMjUKLS9wcm9jLzIyNi90YXNrLzIyNgotL3Byb2MvMjI3L3Rhc2svMjI3Ci0vcHJvYy8yMjgvdGFzay8yMjgKLS9wcm9jLzIyOS90YXNrLzIyOQotL3Byb2MvMjMvdGFzay8yMwotL3Byb2MvMjMwL3Rhc2svMjMwCi0vcHJvYy8yMzEvdGFzay8yMzEKLS9wcm9jLzIzMTg3L3Rhc2svMjMxODcKLS9wcm9jLzIzMTg3L3Rhc2svMjMxOTEKLS9wcm9jLzIzMTg3L3Rhc2svMjMxOTQKLS9wcm9jLzIzMTg3L3Rhc2svMjMxOTUKLS9wcm9jLzIzMTg3L3Rhc2svMjMxOTYKLS9wcm9jLzIzMTg3L3Rhc2svMjMxOTcKLS9wcm9jLzIzMTg3L3Rhc2svMjMxOTgKLS9wcm9jLzIzMTg3L3Rhc2svMjMyMDAKLS9wcm9jLzIzMTg3L3Rhc2svMjMyMDEKLS9wcm9jLzIzMTg3L3Rhc2svMjMyMDYKLS9wcm9jLzIzMi90YXNrLzIzMgotL3Byb2MvMjMyMzMvdGFzay8yMzIzMwotL3Byb2MvMjMyMzMvdGFzay8yMzIzNwotL3Byb2MvMjMyMzMvdGFzay8yMzIzOQotL3Byb2MvMjMyMzMvdGFzay8yMzI0MAotL3Byb2MvMjMyMzMvdGFzay8yMzI0MQotL3Byb2MvMjMyMzMvdGFzay8yMzI0MgotL3Byb2MvMjMyMzMvdGFzay8yMzI0MwotL3Byb2MvMjMyMzMvdGFzay8yMzI0NQotL3Byb2MvMjMyMzMvdGFzay8yMzI0NgotL3Byb2MvMjMyNTMvdGFzay8yMzI1MwotL3Byb2MvMjMzL3Rhc2svMjMzCi0vcHJvYy8yMzQvdGFzay8yMzQKLS9wcm9jLzIzNDAwL3Rhc2svMjM0MDAKLS9wcm9jLzIzNS90YXNrLzIzNQotL3Byb2MvMjM2L3Rhc2svMjM2Ci0vcHJvYy8yMzcvdGFzay8yMzcKLS9wcm9jLzIzOC90YXNrLzIzOAotL3Byb2MvMjM5L3Rhc2svMjM5Ci0vcHJvYy8yNC90YXNrLzI0Ci0vcHJvYy8yNDAvdGFzay8yNDAKLS9wcm9jLzI0MS90YXNrLzI0MQotL3Byb2MvMjQyL3Rhc2svMjQyCi0vcHJvYy8yNDI4MS90YXNrLzI0MjgxCi0vcHJvYy8yNDMvdGFzay8yNDMKLS9wcm9jLzI0MzA0L3Rhc2svMjQzMDQKLS9wcm9jLzI0NC90YXNrLzI0NAotL3Byb2MvMjQ1L3Rhc2svMjQ1Ci0vcHJvYy8yNDYvdGFzay8yNDYKLS9wcm9jLzI0Njc4L3Rhc2svMjQ2NzgKLS9wcm9jLzI0Ny90YXNrLzI0NwotL3Byb2MvMjQ3NjcvdGFzay8yNDc2NwotL3Byb2MvMjQ4L3Rhc2svMjQ4Ci0vcHJvYy8yNDkvdGFzay8yNDkKLS9wcm9jLzI0OTEyL3Rhc2svMjQ5MTIKLS9wcm9jLzI0OTE4L3Rhc2svMjQ5MTgKLS9wcm9jLzI1MC90YXNrLzI1MAotL3Byb2MvMjUwOTQvdGFzay8yNTA5NAotL3Byb2MvMjUxL3Rhc2svMjUxCi0vcHJvYy8yNTExNS90YXNrLzI1MTE1Ci0vcHJvYy8yNTE4MS90YXNrLzI1MTgxCi0vcHJvYy8yNTE5NC90YXNrLzI1MTk0Ci0vcHJvYy8yNTIvdGFzay8yNTIKLS9wcm9jLzI1MjE5L3Rhc2svMjUyMTkKLS9wcm9jLzI1MjI0L3Rhc2svMjUyMjQKLS9wcm9jLzI1MjI3L3Rhc2svMjUyMjcKLS9wcm9jLzI1My90YXNrLzI1MwotL3Byb2MvMjU0L3Rhc2svMjU0Ci0vcHJvYy8yNTUvdGFzay8yNTUKLS9wcm9jLzI1NTgvdGFzay8yNTU4Ci0vcHJvYy8yNTU4L3Rhc2svMjU2MAotL3Byb2MvMjU1OC90YXNrLzI1NjIKLS9wcm9jLzI1NTgvdGFzay8yNTY1Ci0vcHJvYy8yNTU4L3Rhc2svMjU2NgotL3Byb2MvMjU1OC90YXNrLzI1NjcKLS9wcm9jLzI1NTgvdGFzay8yNTY4Ci0vcHJvYy8yNTU4L3Rhc2svMjU3MAotL3Byb2MvMjU1OC90YXNrLzI1NzgKLS9wcm9jLzI1Ni90YXNrLzI1NgotL3Byb2MvMjU3L3Rhc2svMjU3Ci0vcHJvYy8yNTc5L3Rhc2svMjU3OQotL3Byb2MvMjU3OS90YXNrLzI1ODQKLS9wcm9jLzI1NzkvdGFzay8yNTg5Ci0vcHJvYy8yNTc5L3Rhc2svMjU5MAotL3Byb2MvMjU3OS90YXNrLzI1OTEKLS9wcm9jLzI1NzkvdGFzay8yNTk0Ci0vcHJvYy8yNTc5L3Rhc2svMjU5OAotL3Byb2MvMjU3OS90YXNrLzI2MDIKLS9wcm9jLzI1NzkvdGFzay8yNjA5Ci0vcHJvYy8yNTc5L3Rhc2svMjYxMQotL3Byb2MvMjU3OS90YXNrLzI2MjYKLS9wcm9jLzI1NzkvdGFzay8yNjI4Ci0vcHJvYy8yNTc5L3Rhc2svMjYyOQotL3Byb2MvMjU3OS90YXNrLzI2MzAKLS9wcm9jLzI1NzkvdGFzay8yNjMxCi0vcHJvYy8yNTc5L3Rhc2svMjYzMwotL3Byb2MvMjU3OS90YXNrLzI2MzQKLS9wcm9jLzI1NzkvdGFzay8yNjQwCi0vcHJvYy8yNTc5L3Rhc2svMjY0OQotL3Byb2MvMjU3OS90YXNrLzI2NTAKLS9wcm9jLzI1NzkvdGFzay8yNjUxCi0vcHJvYy8yNTc5L3Rhc2svMjY1MgotL3Byb2MvMjU3OS90YXNrLzI2NTMKLS9wcm9jLzI1NzkvdGFzay8yNjU1Ci0vcHJvYy8yNTc5L3Rhc2svMjY1NwotL3Byb2MvMjU3OS90YXNrLzI2NTkKLS9wcm9jLzI1NzkvdGFzay8yNjYwCi0vcHJvYy8yNTc5L3Rhc2svMjY2MQotL3Byb2MvMjU3OS90YXNrLzI2NjIKLS9wcm9jLzI1NzkvdGFzay8yNjYzCi0vcHJvYy8yNTc5L3Rhc2svMjY2NAotL3Byb2MvMjU3OS90YXNrLzI2NjUKLS9wcm9jLzI1NzkvdGFzay8yNjY2Ci0vcHJvYy8yNTc5L3Rhc2svMjY2NwotL3Byb2MvMjU3OS90YXNrLzI2NjkKLS9wcm9jLzI1NzkvdGFzay8yNjcxCi0vcHJvYy8yNTc5L3Rhc2svMjY3MgotL3Byb2MvMjU3OS90YXNrLzI2ODMKLS9wcm9jLzI1NzkvdGFzay8yNjg0Ci0vcHJvYy8yNTc5L3Rhc2svMjY4NQotL3Byb2MvMjU3OS90YXNrLzI2ODgKLS9wcm9jLzI1NzkvdGFzay8yNjk0Ci0vcHJvYy8yNTc5L3Rhc2svMjY5NwotL3Byb2MvMjU3OS90YXNrLzI2OTgKLS9wcm9jLzI1NzkvdGFzay8yNjk5Ci0vcHJvYy8yNTc5L3Rhc2svMjcwMgotL3Byb2MvMjU3OS90YXNrLzI3MDQKLS9wcm9jLzI1NzkvdGFzay8yNzA1Ci0vcHJvYy8yNTc5L3Rhc2svMjcwNgotL3Byb2MvMjU3OS90YXNrLzI3MDcKLS9wcm9jLzI1NzkvdGFzay8yNzA4Ci0vcHJvYy8yNTc5L3Rhc2svMjcwOQotL3Byb2MvMjU3OS90YXNrLzI3MTAKLS9wcm9jLzI1NzkvdGFzay8yNzExCi0vcHJvYy8yNTc5L3Rhc2svMjcxMgotL3Byb2MvMjU3OS90YXNrLzI3MTMKLS9wcm9jLzI1NzkvdGFzay8yNzE0Ci0vcHJvYy8yNTc5L3Rhc2svMjcxNQotL3Byb2MvMjU3OS90YXNrLzI3MTYKLS9wcm9jLzI1NzkvdGFzay8yNzE3Ci0vcHJvYy8yNTc5L3Rhc2svMjcxOAotL3Byb2MvMjU3OS90YXNrLzI3MTkKLS9wcm9jLzI1NzkvdGFzay8yNzIwCi0vcHJvYy8yNTc5L3Rhc2svMjcyNQotL3Byb2MvMjU3OS90YXNrLzI3MjcKLS9wcm9jLzI1NzkvdGFzay8zMTk4Ci0vcHJvYy8yNTgvdGFzay8yNTgKLS9wcm9jLzI1OS90YXNrLzI1OQotL3Byb2MvMjYvdGFzay8yNgotL3Byb2MvMjYwL3Rhc2svMjYwCi0vcHJvYy8yNjEvdGFzay8yNjEKLS9wcm9jLzI2Mi90YXNrLzI2MgotL3Byb2MvMjYzL3Rhc2svMjYzCi0vcHJvYy8yNjQvdGFzay8yNjQKLS9wcm9jLzI2NS90YXNrLzI2NQotL3Byb2MvMjY2L3Rhc2svMjY2Ci0vcHJvYy8yNjcvdGFzay8yNjcKLS9wcm9jLzI2OC90YXNrLzI2OAotL3Byb2MvMjY5L3Rhc2svMjY5Ci0vcHJvYy8yNy90YXNrLzI3Ci0vcHJvYy8yNzAvdGFzay8yNzAKLS9wcm9jLzI3MS90YXNrLzI3MQotL3Byb2MvMjcyL3Rhc2svMjcyCi0vcHJvYy8yNzMvdGFzay8yNzMKLS9wcm9jLzI3NC90YXNrLzI3NAotL3Byb2MvMjc1L3Rhc2svMjc1Ci0vcHJvYy8yNzYvdGFzay8yNzYKLS9wcm9jLzI3NjEvdGFzay8yNzYxCi0vcHJvYy8yNzcvdGFzay8yNzcKLS9wcm9jLzI3OC90YXNrLzI3OAotL3Byb2MvMjc5L3Rhc2svMjc5Ci0vcHJvYy8yOC90YXNrLzI4Ci0vcHJvYy8yODAvdGFzay8yODAKLS9wcm9jLzI4MS90YXNrLzI4MQotL3Byb2MvMjgyL3Rhc2svMjgyCi0vcHJvYy8yODMvdGFzay8yODMKLS9wcm9jLzI4NC90YXNrLzI4NAotL3Byb2MvMjg1L3Rhc2svMjg1Ci0vcHJvYy8yODYvdGFzay8yODYKLS9wcm9jLzI4Ny90YXNrLzI4NwotL3Byb2MvMjg4L3Rhc2svMjg4Ci0vcHJvYy8yODgzL3Rhc2svMjg4MwotL3Byb2MvMjg4My90YXNrLzI4ODYKLS9wcm9jLzI4ODMvdGFzay8yODg4Ci0vcHJvYy8yODgzL3Rhc2svMjg5MAotL3Byb2MvMjg4My90YXNrLzI4OTEKLS9wcm9jLzI4ODMvdGFzay8yODkyCi0vcHJvYy8yODgzL3Rhc2svMjg5MwotL3Byb2MvMjg4My90YXNrLzI4OTQKLS9wcm9jLzI4ODMvdGFzay8yODk1Ci0vcHJvYy8yODgzL3Rhc2svMjg5NwotL3Byb2MvMjg4My90YXNrLzI4OTgKLS9wcm9jLzI4OS90YXNrLzI4OQotL3Byb2MvMjkvdGFzay8yOQotL3Byb2MvMjk0L3Rhc2svMjk0Ci0vcHJvYy8yOTUvdGFzay8yOTUKLS9wcm9jLzI5Ni90YXNrLzI5NgotL3Byb2MvMjk3L3Rhc2svMjk3Ci0vcHJvYy8yOTgvdGFzay8yOTgKLS9wcm9jLzI5OS90YXNrLzI5OQotL3Byb2MvMy90YXNrLzMKLS9wcm9jLzMwL3Rhc2svMzAKLS9wcm9jLzMwMC90YXNrLzMwMAotL3Byb2MvMzAxL3Rhc2svMzAxCi0vcHJvYy8zMDIvdGFzay8zMDIKLS9wcm9jLzMwMy90YXNrLzMwMwotL3Byb2MvMzA0L3Rhc2svMzA0Ci0vcHJvYy8zMDUvdGFzay8zMDUKLS9wcm9jLzMwNi90YXNrLzMwNgotL3Byb2MvMzA4L3Rhc2svMzA4Ci0vcHJvYy8zMDkvdGFzay8zMDkKLS9wcm9jLzMxL3Rhc2svMzEKLS9wcm9jLzMxMC90YXNrLzMxMAotL3Byb2MvMzExL3Rhc2svMzExCi0vcHJvYy8zMTIvdGFzay8zMTIKLS9wcm9jLzMxMy90YXNrLzMxMwotL3Byb2MvMzE0L3Rhc2svMzE0Ci0vcHJvYy8zMTUvdGFzay8zMTUKLS9wcm9jLzMxNi90YXNrLzMxNgotL3Byb2MvMzE3L3Rhc2svMzE3Ci0vcHJvYy8zMTgvdGFzay8zMTgKLS9wcm9jLzMxOS90YXNrLzMxOQotL3Byb2MvMzIvdGFzay8zMgotL3Byb2MvMzIwL3Rhc2svMzIwCi0vcHJvYy8zMjEvdGFzay8zMjEKLS9wcm9jLzMyMi90YXNrLzMyMgotL3Byb2MvMzIzL3Rhc2svMzIzCi0vcHJvYy8zMjQvdGFzay8zMjQKLS9wcm9jLzMyNS90YXNrLzMyNQotL3Byb2MvMzI2L3Rhc2svMzI2Ci0vcHJvYy8zMjcvdGFzay8zMjcKLS9wcm9jLzMyOC90YXNrLzMyOAotL3Byb2MvMzI5L3Rhc2svMzI5Ci0vcHJvYy8zMy90YXNrLzMzCi0vcHJvYy8zMzAvdGFzay8zMzAKLS9wcm9jLzMzMS90YXNrLzMzMQotL3Byb2MvMzMyL3Rhc2svMzMyCi0vcHJvYy8zMzMvdGFzay8zMzMKLS9wcm9jLzMzNS90YXNrLzMzNQotL3Byb2MvMzM2L3Rhc2svMzM2Ci0vcHJvYy8zMzcvdGFzay8zMzcKLS9wcm9jLzMzOC90YXNrLzMzOAotL3Byb2MvMzQwL3Rhc2svMzQwCi0vcHJvYy8zNDEvdGFzay8zNDEKLS9wcm9jLzM0Mi90YXNrLzM0MgotL3Byb2MvMzQzL3Rhc2svMzQzCi0vcHJvYy8zNDQvdGFzay8zNDQKLS9wcm9jLzM0NS90YXNrLzM0NQotL3Byb2MvMzQ2L3Rhc2svMzQ2Ci0vcHJvYy8zNDgvdGFzay8zNDgKLS9wcm9jLzM0OS90YXNrLzM0OQotL3Byb2MvMzU0L3Rhc2svMzU0Ci0vcHJvYy8zNTUvdGFzay8zNTUKLS9wcm9jLzM1Ni90YXNrLzM1NgotL3Byb2MvMzYwL3Rhc2svMzYwCi0vcHJvYy8zNjEvdGFzay8zNjEKLS9wcm9jLzM2Mi90YXNrLzM2MgotL3Byb2MvMzYzL3Rhc2svMzYzCi0vcHJvYy8zNjQvdGFzay8zNjQKLS9wcm9jLzM2NC90YXNrLzM2OAotL3Byb2MvMzY0L3Rhc2svMzY5Ci0vcHJvYy8zNjQvdGFzay8zNzAKLS9wcm9jLzM2NC90YXNrLzM3MQotL3Byb2MvMzY0L3Rhc2svMzgwCi0vcHJvYy8zNjQvdGFzay8zODEKLS9wcm9jLzM2Ni90YXNrLzM2NgotL3Byb2MvMzY2L3Rhc2svMzk0Ci0vcHJvYy8zNjYvdGFzay8zOTUKLS9wcm9jLzM2Ni90YXNrLzM5NgotL3Byb2MvMzcyL3Rhc2svMzcyCi0vcHJvYy8zOTMvdGFzay8zOTMKLS9wcm9jLzM5Ny90YXNrLzM5NwotL3Byb2MvMzk4L3Rhc2svMzk4Ci0vcHJvYy8zOTkvdGFzay8zOTkKLS9wcm9jLzQwL3Rhc2svNDAKLS9wcm9jLzQwMi90YXNrLzQwMgotL3Byb2MvNDAzL3Rhc2svNDAzCi0vcHJvYy80MDQvdGFzay80MDQKLS9wcm9jLzQwNS90YXNrLzEwMDgKLS9wcm9jLzQwNS90YXNrLzE1ODEKLS9wcm9jLzQwNS90YXNrLzE4ODcKLS9wcm9jLzQwNS90YXNrLzQwNQotL3Byb2MvNDA1L3Rhc2svNDE0Ci0vcHJvYy80MDUvdGFzay80MTUKLS9wcm9jLzQwNS90YXNrLzQxNgotL3Byb2MvNDA1L3Rhc2svNzcxCi0vcHJvYy80MDUvdGFzay83NzIKLS9wcm9jLzQwNS90YXNrLzc3NAotL3Byb2MvNDA1L3Rhc2svNzc1Ci0vcHJvYy80MDUvdGFzay83NzYKLS9wcm9jLzQwNS90YXNrLzc3NwotL3Byb2MvNDA1L3Rhc2svNzc4Ci0vcHJvYy80MDYvdGFzay80MDYKLS9wcm9jLzQwNi90YXNrLzQxMAotL3Byb2MvNDA2L3Rhc2svNDExCi0vcHJvYy80MDYvdGFzay80MTIKLS9wcm9jLzQwNi90YXNrLzQxMwotL3Byb2MvNDEvdGFzay80MQotL3Byb2MvNDIvdGFzay80MgotL3Byb2MvNDIxL3Rhc2svNDIxCi0vcHJvYy80MjIvdGFzay80MjIKLS9wcm9jLzQyMy90YXNrLzQyMwotL3Byb2MvNDI0L3Rhc2svNDI0Ci0vcHJvYy80MjUvdGFzay80MjUKLS9wcm9jLzQyNi90YXNrLzQyNgotL3Byb2MvNDI3L3Rhc2svNDI3Ci0vcHJvYy80MjkvdGFzay80MjkKLS9wcm9jLzQzMC90YXNrLzQzMAotL3Byb2MvNDMxL3Rhc2svNDMxCi0vcHJvYy80MzMvdGFzay80MzMKLS9wcm9jLzQzNC90YXNrLzQzNAotL3Byb2MvNDM1L3Rhc2svMzM0MwotL3Byb2MvNDM1L3Rhc2svNDM1Ci0vcHJvYy80MzUvdGFzay80ODIKLS9wcm9jLzQzNi90YXNrLzMzNTQKLS9wcm9jLzQzNi90YXNrLzMzNzIKLS9wcm9jLzQzNi90YXNrLzQxMTIKLS9wcm9jLzQzNi90YXNrLzQxMTMKLS9wcm9jLzQzNi90YXNrLzQxMTQKLS9wcm9jLzQzNi90YXNrLzQyMzAKLS9wcm9jLzQzNi90YXNrLzQzNgotL3Byb2MvNDM2L3Rhc2svNDk5Ci0vcHJvYy80MzYvdGFzay84OTcKLS9wcm9jLzQzNi90YXNrLzkwMQotL3Byb2MvNDM2L3Rhc2svOTA4Ci0vcHJvYy80MzcvdGFzay8zNjA0Ci0vcHJvYy80MzcvdGFzay8zNjA4Ci0vcHJvYy80MzcvdGFzay8zNjEwCi0vcHJvYy80MzcvdGFzay80MzcKLS9wcm9jLzQzNy90YXNrLzQ3NQotL3Byb2MvNDM4L3Rhc2svNDM4Ci0vcHJvYy80MzkvdGFzay80MzkKLS9wcm9jLzQzOS90YXNrLzg0NgotL3Byb2MvNDM5L3Rhc2svODQ3Ci0vcHJvYy80MzkvdGFzay84NDgKLS9wcm9jLzQzOS90YXNrLzg0OQotL3Byb2MvNDM5L3Rhc2svODUwCi0vcHJvYy80MzkvdGFzay84NTEKLS9wcm9jLzQzOS90YXNrLzg1MgotL3Byb2MvNDM5L3Rhc2svODUzCi0vcHJvYy80MzkvdGFzay84NTQKLS9wcm9jLzQ0L3Rhc2svNDQKLS9wcm9jLzQ0MC90YXNrLzQ0MAotL3Byb2MvNDQxL3Rhc2svNDQxCi0vcHJvYy80NDIvdGFzay8zNDYyCi0vcHJvYy80NDIvdGFzay8zNTc1Ci0vcHJvYy80NDIvdGFzay8zOTA4Ci0vcHJvYy80NDIvdGFzay80MTIyCi0vcHJvYy80NDIvdGFzay80MTU1Ci0vcHJvYy80NDIvdGFzay80MTU4Ci0vcHJvYy80NDIvdGFzay80NDIKLS9wcm9jLzQ0Mi90YXNrLzQ0NjMKLS9wcm9jLzQ0Mi90YXNrLzQ0NjgKLS9wcm9jLzQ0Mi90YXNrLzQ0NjkKLS9wcm9jLzQ0Mi90YXNrLzQ0NzAKLS9wcm9jLzQ0Mi90YXNrLzQ0OTQKLS9wcm9jLzQ0Mi90YXNrLzU0MQotL3Byb2MvNDQyL3Rhc2svNTU5Ci0vcHJvYy80NDIvdGFzay83OTYKLS9wcm9jLzQ0Mi90YXNrLzc5NwotL3Byb2MvNDQyL3Rhc2svNzk5Ci0vcHJvYy80NDIvdGFzay84MDEKLS9wcm9jLzQ0Mi90YXNrLzgwNwotL3Byb2MvNDQyL3Rhc2svODA4Ci0vcHJvYy80NDIvdGFzay84MjAKLS9wcm9jLzQ0Mi90YXNrLzgyMQotL3Byb2MvNDQ0L3Rhc2svNDQ0Ci0vcHJvYy80NDQvdGFzay81ODMKLS9wcm9jLzQ0NS90YXNrLzEwMDkKLS9wcm9jLzQ0NS90YXNrLzEwMTAKLS9wcm9jLzQ0NS90YXNrLzEwMTEKLS9wcm9jLzQ0NS90YXNrLzEwMTIKLS9wcm9jLzQ0NS90YXNrLzEwMTMKLS9wcm9jLzQ0NS90YXNrLzEwMTQKLS9wcm9jLzQ0NS90YXNrLzEwMTUKLS9wcm9jLzQ0NS90YXNrLzEwMTYKLS9wcm9jLzQ0NS90YXNrLzEwMTcKLS9wcm9jLzQ0NS90YXNrLzEwMjEKLS9wcm9jLzQ0NS90YXNrLzEwNTEKLS9wcm9jLzQ0NS90YXNrLzE0MzgKLS9wcm9jLzQ0NS90YXNrLzQ0NQotL3Byb2MvNDQ1L3Rhc2svNTEzMwotL3Byb2MvNDQ1L3Rhc2svNTEzNAotL3Byb2MvNDQ1L3Rhc2svNTQyNAotL3Byb2MvNDQ1L3Rhc2svNTQyNQotL3Byb2MvNDQ1L3Rhc2svNTQyNgotL3Byb2MvNDQ1L3Rhc2svNTQyNwotL3Byb2MvNDQ2L3Rhc2svNDQ2Ci0vcHJvYy80NDcvdGFzay80NDcKLS9wcm9jLzQ0OC90YXNrLzQ0OAotL3Byb2MvNDUvdGFzay80NQotL3Byb2MvNDUwL3Rhc2svMzYwMgotL3Byb2MvNDUwL3Rhc2svMzY1NgotL3Byb2MvNDUwL3Rhc2svMzcwMgotL3Byb2MvNDUwL3Rhc2svMzcyMwotL3Byb2MvNDUwL3Rhc2svMzc4OQotL3Byb2MvNDUwL3Rhc2svNDUwCi0vcHJvYy80NTAvdGFzay80NzcKLS9wcm9jLzQ1MC90YXNrLzQ3OQotL3Byb2MvNDUwL3Rhc2svNDg0Ci0vcHJvYy80NTAvdGFzay80ODUKLS9wcm9jLzQ1MC90YXNrLzQ4NwotL3Byb2MvNDUwL3Rhc2svNDg4Ci0vcHJvYy80NTAvdGFzay80OTAKLS9wcm9jLzQ1MC90YXNrLzQ5MQotL3Byb2MvNDUwL3Rhc2svNDkyCi0vcHJvYy80NTAvdGFzay80OTMKLS9wcm9jLzQ1MC90YXNrLzQ5NAotL3Byb2MvNDUwL3Rhc2svNDk1Ci0vcHJvYy80NTAvdGFzay80OTYKLS9wcm9jLzQ1MC90YXNrLzQ5NwotL3Byb2MvNDUwL3Rhc2svNDk4Ci0vcHJvYy80NTAvdGFzay81MDAKLS9wcm9jLzQ1MC90YXNrLzUwMQotL3Byb2MvNDUwL3Rhc2svNTAyCi0vcHJvYy80NTAvdGFzay81MDMKLS9wcm9jLzQ1MC90YXNrLzUwNAotL3Byb2MvNDUwL3Rhc2svNTA1Ci0vcHJvYy80NTAvdGFzay81MDYKLS9wcm9jLzQ1MC90YXNrLzUwNwotL3Byb2MvNDUwL3Rhc2svNTA4Ci0vcHJvYy80NTAvdGFzay81MDkKLS9wcm9jLzQ1MC90YXNrLzUxMAotL3Byb2MvNDUwL3Rhc2svNTExCi0vcHJvYy80NTAvdGFzay81MTIKLS9wcm9jLzQ1MC90YXNrLzUxMwotL3Byb2MvNDUwL3Rhc2svNTE0Ci0vcHJvYy80NTAvdGFzay81MTUKLS9wcm9jLzQ1MC90YXNrLzUxNgotL3Byb2MvNDUwL3Rhc2svNTE3Ci0vcHJvYy80NTAvdGFzay81MTgKLS9wcm9jLzQ1MC90YXNrLzUxOQotL3Byb2MvNDUwL3Rhc2svNTIwCi0vcHJvYy80NTAvdGFzay81MjEKLS9wcm9jLzQ1MC90YXNrLzUyMgotL3Byb2MvNDUwL3Rhc2svNTIzCi0vcHJvYy80NTAvdGFzay81MjQKLS9wcm9jLzQ1MC90YXNrLzUyNQotL3Byb2MvNDUwL3Rhc2svNTI2Ci0vcHJvYy80NTAvdGFzay81MjcKLS9wcm9jLzQ1MC90YXNrLzUyOAotL3Byb2MvNDUwL3Rhc2svNTI5Ci0vcHJvYy80NTAvdGFzay81MzAKLS9wcm9jLzQ1MC90YXNrLzUzMQotL3Byb2MvNDUwL3Rhc2svNTMyCi0vcHJvYy80NTAvdGFzay81MzMKLS9wcm9jLzQ1MC90YXNrLzUzNAotL3Byb2MvNDUwL3Rhc2svNTM1Ci0vcHJvYy80NTAvdGFzay81MzYKLS9wcm9jLzQ1MS90YXNrLzQ1MQotL3Byb2MvNDUxL3Rhc2svNDY0Ci0vcHJvYy80NTIvdGFzay80NTIKLS9wcm9jLzQ1Mi90YXNrLzY4MAotL3Byb2MvNDUzL3Rhc2svMjM1ODkKLS9wcm9jLzQ1My90YXNrLzIzNTkwCi0vcHJvYy80NTMvdGFzay8yMzU5MQotL3Byb2MvNDUzL3Rhc2svMjM1OTMKLS9wcm9jLzQ1My90YXNrLzQ1MwotL3Byb2MvNDU0L3Rhc2svMTg2ODUKLS9wcm9jLzQ1NC90YXNrLzE4Njg2Ci0vcHJvYy80NTQvdGFzay8xODY5MAotL3Byb2MvNDU0L3Rhc2svMTg2OTMKLS9wcm9jLzQ1NC90YXNrLzQ1NAotL3Byb2MvNDU2L3Rhc2svNDU2Ci0vcHJvYy80NTcvdGFzay80NTcKLS9wcm9jLzQ1Ny90YXNrLzYxNAotL3Byb2MvNDU3L3Rhc2svODg3Ci0vcHJvYy80NTcvdGFzay84ODkKLS9wcm9jLzQ1Ny90YXNrLzg5MAotL3Byb2MvNDU4L3Rhc2svNDU4Ci0vcHJvYy80NTkvdGFzay80NTkKLS9wcm9jLzQ2L3Rhc2svNDYKLS9wcm9jLzQ2MS90YXNrLzQ2MQotL3Byb2MvNDYxL3Rhc2svNTM4Ci0vcHJvYy80NjMvdGFzay80NjMKLS9wcm9jLzQ2My90YXNrLzQ4MwotL3Byb2MvNDYzL3Rhc2svNDg2Ci0vcHJvYy80NjUvdGFzay8yNTIyOAotL3Byb2MvNDY1L3Rhc2svNDY1Ci0vcHJvYy80NjUvdGFzay80NjcKLS9wcm9jLzQ2NS90YXNrLzQ2OAotL3Byb2MvNDY1L3Rhc2svNDY5Ci0vcHJvYy80NjYvdGFzay80NjYKLS9wcm9jLzQ2Ni90YXNrLzUzOQotL3Byb2MvNDcvdGFzay80NwotL3Byb2MvNDgvdGFzay80OAotL3Byb2MvNDgwL3Rhc2svNDgwCi0vcHJvYy80OS90YXNrLzQ5Ci0vcHJvYy81L3Rhc2svNQotL3Byb2MvNTAvdGFzay81MAotL3Byb2MvNTIvdGFzay81MgotL3Byb2MvNTMvdGFzay81MwotL3Byb2MvNTQvdGFzay81NAotL3Byb2MvNTUvdGFzay81NQotL3Byb2MvNTYvdGFzay81NgotL3Byb2MvNTcvdGFzay81NwotL3Byb2MvNTc0MC90YXNrLzU3NDAKLS9wcm9jLzU4L3Rhc2svNTgKLS9wcm9jLzU5L3Rhc2svNTkKLS9wcm9jLzYvdGFzay82Ci0vcHJvYy82MC90YXNrLzYwCi0vcHJvYy82MDUvdGFzay82MDUKLS9wcm9jLzYwNi90YXNrLzYwNgotL3Byb2MvNjEvdGFzay82MQotL3Byb2MvNjIvdGFzay82MgotL3Byb2MvNjMvdGFzay82MwotL3Byb2MvNjQvdGFzay82NAotL3Byb2MvNjUvdGFzay82NQotL3Byb2MvNjYvdGFzay82NgotL3Byb2MvNjcvdGFzay82NwotL3Byb2MvNjgvdGFzay82OAotL3Byb2MvNjkvdGFzay82OQotL3Byb2MvNy90YXNrLzcKLS9wcm9jLzcwL3Rhc2svNzAKLS9wcm9jLzcxL3Rhc2svNzEKLS9wcm9jLzcyL3Rhc2svNzIKLS9wcm9jLzczL3Rhc2svNzMKLS9wcm9jLzc0L3Rhc2svNzQKLS9wcm9jLzc1L3Rhc2svNzUKLS9wcm9jLzc2L3Rhc2svNzYKLS9wcm9jLzc3L3Rhc2svNzcKLS9wcm9jLzc4L3Rhc2svNzgKLS9wcm9jLzc4NC90YXNrLzc4NAotL3Byb2MvNzg1L3Rhc2svNzg1Ci0vcHJvYy83OS90YXNrLzc5Ci0vcHJvYy84L3Rhc2svOAotL3Byb2MvODAvdGFzay84MAotL3Byb2MvODAzL3Rhc2svODAzCi0vcHJvYy84MS90YXNrLzgxCi0vcHJvYy84Mi90YXNrLzgyCi0vcHJvYy84MjY5L3Rhc2svMTAxNjgKLS9wcm9jLzgyNjkvdGFzay8xMDc2OQotL3Byb2MvODI2OS90YXNrLzExMjc0Ci0vcHJvYy84MjY5L3Rhc2svMTE2ODkKLS9wcm9jLzgyNjkvdGFzay8xMjA0MgotL3Byb2MvODI2OS90YXNrLzE1MzQ5Ci0vcHJvYy84MjY5L3Rhc2svMjUyMTQKLS9wcm9jLzgyNjkvdGFzay84MjY5Ci0vcHJvYy84MjY5L3Rhc2svODI3MgotL3Byb2MvODI2OS90YXNrLzgyNzUKLS9wcm9jLzgyNjkvdGFzay84Mjc2Ci0vcHJvYy84MjY5L3Rhc2svODI3NwotL3Byb2MvODI2OS90YXNrLzgyNzgKLS9wcm9jLzgyNjkvdGFzay84Mjc5Ci0vcHJvYy84MjY5L3Rhc2svODI4MAotL3Byb2MvODI2OS90YXNrLzgyODEKLS9wcm9jLzgyNjkvdGFzay84Mjg5Ci0vcHJvYy84MjY5L3Rhc2svODI5MAotL3Byb2MvODI2OS90YXNrLzgyOTQKLS9wcm9jLzgyNjkvdGFzay84Mjk4Ci0vcHJvYy84MjY5L3Rhc2svODc1MwotL3Byb2MvODI2OS90YXNrLzkzNTYKLS9wcm9jLzgyNjkvdGFzay85NzY4Ci0vcHJvYy84My90YXNrLzgzCi0vcHJvYy84NC90YXNrLzg0Ci0vcHJvYy84NS90YXNrLzg1Ci0vcHJvYy84NTgvdGFzay8xMDIzCi0vcHJvYy84NTgvdGFzay8xMDI0Ci0vcHJvYy84NTgvdGFzay8xMDI1Ci0vcHJvYy84NTgvdGFzay8xMDI2Ci0vcHJvYy84NTgvdGFzay8xMDI3Ci0vcHJvYy84NTgvdGFzay8xMDI4Ci0vcHJvYy84NTgvdGFzay8xMDMzCi0vcHJvYy84NTgvdGFzay8xMDM0Ci0vcHJvYy84NTgvdGFzay8xMDM1Ci0vcHJvYy84NTgvdGFzay8xMDM2Ci0vcHJvYy84NTgvdGFzay8xMDM3Ci0vcHJvYy84NTgvdGFzay8xMDM4Ci0vcHJvYy84NTgvdGFzay8xMDM5Ci0vcHJvYy84NTgvdGFzay8xMDQwCi0vcHJvYy84NTgvdGFzay8xMDQxCi0vcHJvYy84NTgvdGFzay8xMDQyCi0vcHJvYy84NTgvdGFzay8xMDQzCi0vcHJvYy84NTgvdGFzay8xMDQ0Ci0vcHJvYy84NTgvdGFzay8xMDQ1Ci0vcHJvYy84NTgvdGFzay8xMDQ2Ci0vcHJvYy84NTgvdGFzay8xMDQ3Ci0vcHJvYy84NTgvdGFzay8xMDQ4Ci0vcHJvYy84NTgvdGFzay8xMDUwCi0vcHJvYy84NTgvdGFzay8xMDUyCi0vcHJvYy84NTgvdGFzay8xMDcxCi0vcHJvYy84NTgvdGFzay8xMDcyCi0vcHJvYy84NTgvdGFzay8xMDczCi0vcHJvYy84NTgvdGFzay8xMDc0Ci0vcHJvYy84NTgvdGFzay8xMDc1Ci0vcHJvYy84NTgvdGFzay8xMDc2Ci0vcHJvYy84NTgvdGFzay8xMDc3Ci0vcHJvYy84NTgvdGFzay8xMDc4Ci0vcHJvYy84NTgvdGFzay8xMDk0Ci0vcHJvYy84NTgvdGFzay8xMDk2Ci0vcHJvYy84NTgvdGFzay8xMDk3Ci0vcHJvYy84NTgvdGFzay8xMTE4MAotL3Byb2MvODU4L3Rhc2svMTExODEKLS9wcm9jLzg1OC90YXNrLzEyNjcKLS9wcm9jLzg1OC90YXNrLzEzMTQKLS9wcm9jLzg1OC90YXNrLzEzMzEKLS9wcm9jLzg1OC90YXNrLzEzMzMKLS9wcm9jLzg1OC90YXNrLzEzMzQKLS9wcm9jLzg1OC90YXNrLzEzMzkKLS9wcm9jLzg1OC90YXNrLzEzNDAKLS9wcm9jLzg1OC90YXNrLzEzNzQKLS9wcm9jLzg1OC90YXNrLzEzNzUKLS9wcm9jLzg1OC90YXNrLzEzOTgKLS9wcm9jLzg1OC90YXNrLzE0MTUKLS9wcm9jLzg1OC90YXNrLzE0MjgKLS9wcm9jLzg1OC90YXNrLzE0MjkKLS9wcm9jLzg1OC90YXNrLzE0NDkKLS9wcm9jLzg1OC90YXNrLzE0NTQKLS9wcm9jLzg1OC90YXNrLzE0NTcKLS9wcm9jLzg1OC90YXNrLzE0OTYKLS9wcm9jLzg1OC90YXNrLzE1MzYKLS9wcm9jLzg1OC90YXNrLzE1ODUKLS9wcm9jLzg1OC90YXNrLzE4NzYzCi0vcHJvYy84NTgvdGFzay8xODc2NAotL3Byb2MvODU4L3Rhc2svMTg3NjUKLS9wcm9jLzg1OC90YXNrLzIyNDUKLS9wcm9jLzg1OC90YXNrLzIyNzIKLS9wcm9jLzg1OC90YXNrLzI0MzUKLS9wcm9jLzg1OC90YXNrLzI0NDEKLS9wcm9jLzg1OC90YXNrLzI0NTAKLS9wcm9jLzg1OC90YXNrLzI1MjE4Ci0vcHJvYy84NTgvdGFzay8yODExCi0vcHJvYy84NTgvdGFzay8zMTcwCi0vcHJvYy84NTgvdGFzay8zMTg2Ci0vcHJvYy84NTgvdGFzay8zMjAwCi0vcHJvYy84NTgvdGFzay8zMjAxCi0vcHJvYy84NTgvdGFzay8zMzg2Ci0vcHJvYy84NTgvdGFzay8zNTU1Ci0vcHJvYy84NTgvdGFzay8zNzMzCi0vcHJvYy84NTgvdGFzay8zNzUwCi0vcHJvYy84NTgvdGFzay8zNzc0Ci0vcHJvYy84NTgvdGFzay8zNzc1Ci0vcHJvYy84NTgvdGFzay8zNzc2Ci0vcHJvYy84NTgvdGFzay81OTI4Ci0vcHJvYy84NTgvdGFzay82NDEwCi0vcHJvYy84NTgvdGFzay83MTAwCi0vcHJvYy84NTgvdGFzay83NTE2Ci0vcHJvYy84NTgvdGFzay83NTY4Ci0vcHJvYy84NTgvdGFzay84MTcyCi0vcHJvYy84NTgvdGFzay84NTgKLS9wcm9jLzg1OC90YXNrLzg2MgotL3Byb2MvODU4L3Rhc2svODY0Ci0vcHJvYy84NTgvdGFzay84NjUKLS9wcm9jLzg1OC90YXNrLzg2NgotL3Byb2MvODU4L3Rhc2svODY3Ci0vcHJvYy84NTgvdGFzay84NjgKLS9wcm9jLzg1OC90YXNrLzg2OQotL3Byb2MvODU4L3Rhc2svODcwCi0vcHJvYy84NTgvdGFzay84ODMKLS9wcm9jLzg1OC90YXNrLzg4NAotL3Byb2MvODU4L3Rhc2svODg1Ci0vcHJvYy84NTgvdGFzay84ODYKLS9wcm9jLzg1OC90YXNrLzg4OAotL3Byb2MvODU4L3Rhc2svODkxCi0vcHJvYy84NTgvdGFzay84OTIKLS9wcm9jLzg1OC90YXNrLzg5MwotL3Byb2MvODU4L3Rhc2svODk0Ci0vcHJvYy84NTgvdGFzay84OTUKLS9wcm9jLzg1OC90YXNrLzg5NgotL3Byb2MvODU4L3Rhc2svODk5Ci0vcHJvYy84NTgvdGFzay85NzAxCi0vcHJvYy84Ni90YXNrLzg2Ci0vcHJvYy84Ny90YXNrLzg3Ci0vcHJvYy84NzEvdGFzay84NzEKLS9wcm9jLzg3MS90YXNrLzg3MwotL3Byb2MvODcxL3Rhc2svODc0Ci0vcHJvYy84NzEvdGFzay84NzUKLS9wcm9jLzg3MS90YXNrLzg3NgotL3Byb2MvODcyL3Rhc2svODcyCi0vcHJvYy84NzcvdGFzay84NzcKLS9wcm9jLzg3Ny90YXNrLzg3OAotL3Byb2MvODc3L3Rhc2svODc5Ci0vcHJvYy84NzcvdGFzay84ODEKLS9wcm9jLzg3Ny90YXNrLzg4MgotL3Byb2MvODgvdGFzay84OAotL3Byb2MvODgwL3Rhc2svODgwCi0vcHJvYy84OS90YXNrLzg5Ci0vcHJvYy85L3Rhc2svOQotL3Byb2MvOTAvdGFzay85MAotL3Byb2MvOTA1L3Rhc2svOTA1Ci0vcHJvYy85MDYvdGFzay85MDYKLS9wcm9jLzkwNy90YXNrLzkwNwotL3Byb2MvOTEvdGFzay85MQotL3Byb2MvOTIvdGFzay85MgotL3Byb2MvOTMvdGFzay85MwotL3Byb2MvOTQvdGFzay85NAotL3Byb2MvOTUvdGFzay85NQotL3Byb2MvOTYvdGFzay85NgotL3Byb2MvOTcvdGFzay85NwotL3Byb2MvOTgvdGFzay85OAotL3Byb2MvOTkvdGFzay85OQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3Rlc3RfZGF0YS9iYXR0b3JfdGVzdF9kYXRhLnR4dCBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3Rlc3RfZGF0YS9iYXR0b3JfdGVzdF9kYXRhLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY3MjczNi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvYmF0dG9yX3Rlc3RfZGF0YS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIEJhdHRPcgotIyB2b2x0YWdlX3JhbmdlIFstNjA3OS43LCA2MTk2LjhdIG1WCi0jIGN1cnJlbnRfcmFuZ2UgWy02MDU3LjMsIDU3NjQuMV0gbUEKLSMgc2FtcGxlX3JhdGUgMTAwMDAgSHosIGdhaW4gMTAuMXgKLTAuMDAgNi41IDQzMDcuNwotMC4xMCAxNS4xIDQzMTMuNwotMC4yMCAxNS4xIDQzMTMuNwotMC4zMCAxMi4yIDQzMTAuNwotMC40MCAxMi4yIDQzMDcuNwotMC41MCAxOC4wIDQzMzQuNwotMC42MCAxNS4xIDQzMzQuNwotMC43MCAxOC4wIDQzMzcuNwotMC44MCAxOC4wIDQzMzcuNwotMC45MCAyMC45IDQzMzEuNwotMS4wMCA5LjMgNDMzNC43Ci0xLjEwIDkuMyA0MzA3LjcKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3Rlc3RfZGF0YS9jb21wcmVzc2VkX2F0cmFjZV9kYXRhLnR4dCBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3Rlc3RfZGF0YS9jb21wcmVzc2VkX2F0cmFjZV9kYXRhLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM2ODIxMC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvY29tcHJlc3NlZF9hdHJhY2VfZGF0YS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVRSQUNFOgoteJy9XdtuHEeSffdXNKAXz4PsyltVlrEzgK+zxnps7cqefVgshDbZGvWYZHO6m7a14MdvJC3KJiujT0VkFDWAZGjEc7LynnHi8mx13K/PNvtPVle76w+effBstbk67rebw/Pt1fMfb16/3uw/vv+bX/bb43Fz9cnKddF/XH5brVbPXnzS3/3crF+vnpdff/7Larv/1+H57vXrmT/48W8/ST94tdmcP99vDmdvNufzfvj23U/TD79Z78+J+ePD7vWR/pz58++OnW2KIjl0jI2ERvvGGJHp9s0e4gmEIz68zFpSUOLADmuJMZUFyqFAgrmWVGaNE5FDtXFoa0k1FpBAcrbzQGAtkSV185aIE42KB3q30NGoeNp2TKCcLdUl+HyRjZ7edA+R6AN1L+iJ8Qi/k+VRB5ETTma1K/D5Ix0Qh6nX+vymcYRDy/3zG9IX4/j5TQw+waPa4v7Xu8ev6C5EW0AttAWUIIQ42xaIFtTbBmq4Ci0GT2+6h8gVgCdyZhvE4oy3guKhCbQlDEHBrUBSXVWxFQw1MIrlVuhfNoxDjqGxy8a/XfRFfSAyyRd80SIhx7A6Ci0GQNDUjFyuIcfAgwbD1z63BBagAoeQYzBWsZv+NDnkGEy1HJRBrN55HkSVneeBCSdPEJVzUAacWzJ3gfcFyijg3BJ2nednT9MgBx/gv4mEZrkcPICQ1FQ/tjl4r9BqpugbNBe02lEp2cmGHPMPtRQ1DgotOQ7mW7fTClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdGVzdF9kYXRhL2RlY29tcHJlc3NlZF9hdHJhY2VfZGF0YS50eHQgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvZGVjb21wcmVzc2VkX2F0cmFjZV9kYXRhLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdmYjVlOC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvZGVjb21wcmVzc2VkX2F0cmFjZV9kYXRhLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwNTMgKzAsMCBAQAotIyB0cmFjZXI6IG5vcAotIwotIyBlbnRyaWVzLWluLWJ1ZmZlci9lbnRyaWVzLXdyaXR0ZW46IDEwNDIvMTA0MiAgICNQOjYKLSMKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8tLS0tLT0+IGlycXMtb2ZmCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gXy0tLS09PiBuZWVkLXJlc2NoZWQKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC8gXy0tLT0+IGhhcmRpcnEvc29mdGlycQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IC8gXy0tPT4gcHJlZW1wdC1kZXB0aAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8fCAvICAgICBkZWxheQotIyAgICAgICAgICAgVEFTSy1QSUQgICAgVEdJRCAgIENQVSMgIHx8fHwgICAgVElNRVNUQU1QICBGVU5DVElPTgotIyAgICAgICAgICAgICAgfCB8ICAgICAgICB8ICAgICAgfCAgIHx8fHwgICAgICAgfCAgICAgICAgIHwKLSAgICAgICAgICAgPC4uLj4tMTkxNjEgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMS4zNTQ5MDg6IHRyYWNpbmdfbWFya193cml0ZTogdHJhY2VfZXZlbnRfY2xvY2tfc3luYzogcGFyZW50X3RzPTY4MzIwMS4zNzUwMDAKLSAgICAgICAgICAgPC4uLj4tMTkxNjEgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMS4zNTQ5MjY6IHRyYWNpbmdfbWFya193cml0ZTogdHJhY2VfZXZlbnRfY2xvY2tfc3luYzogcmVhbHRpbWVfdHM9MzcyMDMyNTEzNwotIG5kcm9pZC5zeXN0ZW11aS0xMzU4MCAoMTM1ODApIFswMDFdIC4uLjEgNjgzMjAyLjEwNDIyMzogdHJhY2luZ19tYXJrX3dyaXRlOiBTfDEzNTgwfGRlbGl2ZXJJbnB1dEV2ZW50fDI2MwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjEwNDIyMzogdHJhY2luZ19tYXJrX3dyaXRlOiBTfDE4OTI2fGRlbGl2ZXJJbnB1dEV2ZW50fDEwMjQKLSBuZHJvaWQuc3lzdGVtdWktMTM1ODAgKDEzNTgwKSBbMDAxXSAuLi4xIDY4MzIwMi4xMDQ2MDY6IHRyYWNpbmdfbWFya193cml0ZTogRnwxMzU4MHxkZWxpdmVySW5wdXRFdmVudHwyNjMKLSBuZHJvaWQuc3lzdGVtdWktMTM1ODAgKDEzNTgwKSBbMDAxXSAuLi4xIDY4MzIwMi4xMDQ4NDY6IHRyYWNpbmdfbWFya193cml0ZTogU3wxMzU4MHxkZWxpdmVySW5wdXRFdmVudHwyNjcKLSBuZHJvaWQuc3lzdGVtdWktMTM1ODAgKDEzNTgwKSBbMDAxXSAuLi4xIDY4MzIwMi4xMDUwNDY6IHRyYWNpbmdfbWFya193cml0ZTogRnwxMzU4MHxkZWxpdmVySW5wdXRFdmVudHwyNjcKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4xMDcyODY6IHRyYWNpbmdfbWFya193cml0ZTogRnwxODkyNnxkZWxpdmVySW5wdXRFdmVudHwxMDI0Ci0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTE1ODA5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8Q2hvcmVvZ3JhcGhlciNkb0ZyYW1lCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTE1ODYwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8aW5wdXQKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xMTU5NzI6IHRyYWNpbmdfbWFya193cml0ZTogU3wxODkyNnxkZWxpdmVySW5wdXRFdmVudHwxMDQxCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTE2NTA2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEZ8MTg5MjZ8ZGVsaXZlcklucHV0RXZlbnR8MTA0MQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjExNjg0OTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTE2ODgzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xMzE2NjA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxDaG9yZW9ncmFwaGVyI2RvRnJhbWUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xMzE3MTA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxpbnB1dAotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjEzMTgzMzogdHJhY2luZ19tYXJrX3dyaXRlOiBTfDE4OTI2fGRlbGl2ZXJJbnB1dEV2ZW50fDEwNTYKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xMzIzNTE6IHRyYWNpbmdfbWFya193cml0ZTogRnwxODkyNnxkZWxpdmVySW5wdXRFdmVudHwxMDU2Ci0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMTMyNDQyOiB0cmFjaW5nX21hcmtfd3JpdGU6IFN8MTg5MjZ8ZGVsaXZlcklucHV0RXZlbnR8MTA3MQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjEzMzE1ODogdHJhY2luZ19tYXJrX3dyaXRlOiBTfDE4OTI2fGFuaW1hdG9yOm9wYWNpdHl8MjM3NTE0NTIKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDAyXSAuLi4xIDY4MzIwMi4xMzM3NjA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxub3RpZnlGcmFtZVBlbmRpbmcKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDAyXSAuLi4xIDY4MzIwMi4xMzM3NzE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjEzMzc4MDogdHJhY2luZ19tYXJrX3dyaXRlOiBGfDE4OTI2fGRlbGl2ZXJJbnB1dEV2ZW50fDEwNzEKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xMzM4NTM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjEzMzg3OTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFuaW1hdGlvbgotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjEzMzk5MzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMTM0MDE4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dHJhdmVyc2FsCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMTM0MDc1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZHJhdwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjEzNDExNDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fFJlY29yZCBWaWV3I2RyYXcoKQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjEzNDQ2NjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwMl0gLi4uMSA2ODMyMDIuMTM0NzM0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8RHJhd0ZyYW1lCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwMl0gLi4uMSA2ODMyMDIuMTM0NzQzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c3luY0ZyYW1lU3RhdGUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDAyXSAuLi4xIDY4MzIwMi4xMzQ3OTc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxwcmVwYXJlVHJlZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDJdIC4uLjEgNjgzMjAyLjEzNTIwNTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwMl0gLi4uMSA2ODMyMDIuMTM1MjEzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDAyXSAuLi4xIDY4MzIwMi4xMzUzMDg6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxjb21wdXRlT3JkZXJpbmcKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDAyXSAuLi4xIDY4MzIwMi4xMzUzNzY6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDJdIC4uLjEgNjgzMjAyLjEzNTgxOTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGZsdXNoIGRyYXdpbmcgY29tbWFuZHMKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4xMzYxMjA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMTM2MTMzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMTM2MTUxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAyXSAuLi4xIDY4MzIwMi4xMzYxNTY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMTM2MTY1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAyXSAuLi4xIDY4MzIwMi4xMzYxNjU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4xMzYxNzA6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjEzNjE3NzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMl0gLi4uMSA2ODMyMDIuMTM2MTc3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAyXSAuLi4xIDY4MzIwMi4xMzYxODY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDJdIC4uLjEgNjgzMjAyLjEzNjIwNDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMl0gLi4uMSA2ODMyMDIuMTM2MjEwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4xMzYyMjA6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjEzNjIyODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMl0gLi4uMSA2ODMyMDIuMTM2MjM0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAyXSAuLi4xIDY4MzIwMi4xMzYyNDM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDJdIC4uLjEgNjgzMjAyLjEzNjI1MDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHNoYWRvdyB0ZXNzZWxsYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAyXSAuLi4xIDY4MzIwMi4xMzYyNTc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAyXSAuLi4xIDY4MzIwMi4xMzYyNjQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDJdIC4uLjEgNjgzMjAyLjEzNjI3MzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVBbWJpZW50U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMl0gLi4uMSA2ODMyMDIuMTM2MjgxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAyXSAuLi4xIDY4MzIwMi4xMzYyODg6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlU3BvdFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDJdIC4uLjEgNjgzMjAyLjEzNjMxMTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMl0gLi4uMSA2ODMyMDIuMTM2MzE4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xMzYzNzc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjEzNjM5MzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMTM2NDQxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aml0dGVyTmFub3N8Njc2NzM1OQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjEzNjQ3MDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGNvbW1pdAotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjEzNjUwMDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMTM2NTMxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDAyXSAuLi4xIDY4MzIwMi4xMzc0NDc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjEzOTUwMjogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfVGV4dHVyZXwxODU4MzgwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTM5NTMyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9UZXh0dXJlX2NvdW50fDE1NwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjEzOTU0MjogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfT2Zmc2NyZWVuQnVmZmVyfDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xMzk1NTI6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX09mZnNjcmVlbkJ1ZmZlcl9jb3VudHwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTM5NTYyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9MYXllcnwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTM5NTcxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9MYXllcl9jb3VudHwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTM5NzcxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xMzk3ODc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxub3RpZnlGcmFtZVBlbmRpbmcKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xMzk3OTM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE0OTA4NTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fENob3Jlb2dyYXBoZXIjZG9GcmFtZQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE0OTEzNjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGlucHV0Ci0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMTQ5MTg1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xNDkyMDQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhbmltYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xNDk1MTE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE0OTUzNzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRyYXZlcnNhbAotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE0OTU5NTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fG1lYXN1cmUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xNDk3Mzg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE0OTc2MjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGxheW91dAotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE1NzAwNDogdHJhY2luZ19tYXJrX3dyaXRlOiBTfDE4OTI2fGFuaW1hdG9yOmJvdHRvbXwxNzc4ODU5ODkKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xNjE2MjA6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE2MTcwNDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRyYXcKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xNjE3NTU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxSZWNvcmQgVmlldyNkcmF3KCkKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xNjU0MTg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE2NTU0MjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fERyYXdGcmFtZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE2NTU1MzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHN5bmNGcmFtZVN0YXRlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTY1NTg2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8cHJlcGFyZVRyZWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNjU5ODE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE2NTk4OTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMTY2MDYwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNjYwNzI6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxjb21wdXRlT3JkZXJpbmcKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xNjYwNzQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE2NjExNjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTY2MTI1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNjYyOTY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTY2MzEyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMTY2MzE0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8Q2hvcmVvZ3JhcGhlciNkb0ZyYW1lCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTY2MzMwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNjYzNDI6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE2NjM2MTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMTY2MzYzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YW5pbWF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTY2MzY5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNjY0MDg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE2NjQxNjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMTY3MDU4OiB0cmFjaW5nX21hcmtfd3JpdGU6IFN8MTg5MjZ8YW5pbWF0b3J8NDYyNjc1NTMKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xNjcyOTc6IHRyYWNpbmdfbWFya193cml0ZTogU3wxODkyNnxhbmltYXRvcnwyMTk2NjQwNzAKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNjczNjI6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTY3Mzc3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTY3Mzg2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNjczOTQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE2NzQwMjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTY3NDA4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNjc0Mjk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE2NzQzNDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMTY3NDY3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNjc0Njk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTY3NDc3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTY3NDg3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNjc0OTQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE2NzUwMTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRyYXZlcnNhbAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE2NzUwODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGZsdXNoIGRyYXdpbmcgY29tbWFuZHMKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNjc1Mjk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE2NzUzNjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTY3NTU2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNjc1NjE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE2NzU4MDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRyYXcKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xNjc2MjY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxSZWNvcmQgVmlldyNkcmF3KCkKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNjg0ODM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxVcGxvYWQgNjN4NjMgVGV4dHVyZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE2ODc4MDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTY4OTcwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8VXBsb2FkIDYzeDYzIFRleHR1cmUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xNjg5Nzg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE2OTE4ODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTY5MzEzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8VXBsb2FkIDYzeDYzIFRleHR1cmUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNjk1Mzc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE3MDg3ODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTcxNzExOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9UZXh0dXJlfDE5MDYwMDgKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNzE3MjE6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX1RleHR1cmVfY291bnR8MTYwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTcxNzI4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9PZmZzY3JlZW5CdWZmZXJ8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE3MTczNTogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfT2Zmc2NyZWVuQnVmZmVyX2NvdW50fDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNzE3NDI6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX0xheWVyfDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNzE3NDg6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX0xheWVyX2NvdW50fDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNzE4NzI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE3MTg4MjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fG5vdGlmeUZyYW1lUGVuZGluZwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE3MTg4NjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTcxODkzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8bm90aWZ5RnJhbWVQZW5kaW5nCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTcxODk2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNzE5MDM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxEcmF3RnJhbWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNzE5MDk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzeW5jRnJhbWVTdGF0ZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE3MTkzMzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHByZXBhcmVUcmVlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTcyMDk1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNzIxMDE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE3MjE1NjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGNvbXB1dGVPcmRlcmluZwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE3MjE5NjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTcyMzE4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE3MjMyNjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE3MjMzNTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTcyMzQzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNzIzNTQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE3MjM2MDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTcyMzgwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNzIzODY6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjE3MjQ4MDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMTcyNDk1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4xNzI1Mzk6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxqaXR0ZXJOYW5vc3wxMDExMzE1MQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjE3MjU2NjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGNvbW1pdAotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE3MjU5MzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHNoYWRvdyB0ZXNzZWxsYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNzI2MDA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4xNzI2MDM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE3MjYwNzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTcyNjE1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNzI2MTg6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxmbHVzaCBkcmF3aW5nIGNvbW1hbmRzCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTcyNjE5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNzI2MjY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlU3BvdFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjE3MjY0MjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTcyNjQ2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNzI2NTI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE3MjY4MTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHNoYWRvdyB0ZXNzZWxsYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNzI2ODc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNzI2OTU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE3MjcwMjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVBbWJpZW50U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTcyNzEwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xNzI3MTY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlU3BvdFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE3Mjc0MTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTcyNzQ2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNzM0NTE6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlUGF0aAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE3MzQ2MDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE3MzQ4OTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTczNTA2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNzQzODQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE3OTU1OTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fENob3Jlb2dyYXBoZXIjZG9GcmFtZQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE3OTYwMjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGlucHV0Ci0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTc5NjQzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xNzk2NjM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhbmltYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xODAxNDY6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE4MDE3ODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRyYXZlcnNhbAotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE4MDIzODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRyYXcKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xODAyNzQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxSZWNvcmQgVmlldyNkcmF3KCkKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xODEwNjI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE4MTk3NTogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfVGV4dHVyZXwxOTA2MDA4Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTgxOTg2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9UZXh0dXJlX2NvdW50fDE2MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE4MTk5MzogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfT2Zmc2NyZWVuQnVmZmVyfDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xODIwMDA6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX09mZnNjcmVlbkJ1ZmZlcl9jb3VudHwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTgyMDA2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9MYXllcnwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTgyMDEyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9MYXllcl9jb3VudHwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTgyMTE3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xODIxMzM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxub3RpZnlGcmFtZVBlbmRpbmcKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xODIxMzg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE4MjE0NjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fERyYXdGcmFtZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE4MjE1MjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHN5bmNGcmFtZVN0YXRlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTgyMTg0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8cHJlcGFyZVRyZWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xODIzNzk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxBbGxvY2F0ZSA4OTZ4MTI4IEhXIExheWVyCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTgyNDU1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xODI1NDg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE4MjU1NDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTgyODA5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8T3B0aW1pemUgSFcgTGF5ZXIgRGlzcGxheUxpc3QgQnV0dG9uIDg0OXgxMjYKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xODI4OTg6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxjb21wdXRlT3JkZXJpbmcKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xODI5NTY6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjE4MzE5NTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTgzMjIzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xODMzMzI6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxqaXR0ZXJOYW5vc3w0MTc1MzIyCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTgzMzYxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8Y29tbWl0Ci0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMTgzMzkzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4xODM0Mjg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE4NDE2MDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTg0MTczOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8Y29tcHV0ZU9yZGVyaW5nCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTg0MjQ4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4xODQ0MDA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMTg0NDExOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMTg0NDUxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4xODQ0NjM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjE4NDQ3ODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMTg0NDg1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xODQ2MDc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxCdXR0b24gYWxwaGEgY2F1c2VkIHNhdmVMYXllciA4NDl4MTI2Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTg0NjEyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4xODQ4Mjk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjE4NDg3MTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMTg0ODg0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjE4NDg5MTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjE4NDg5ODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMTg0OTA3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4xODQ5MTA6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjE4NDkxNjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMTg0OTIxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjE4NDkzMDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjE4NDk0MTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMTg0OTQ5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4xODQ5NjE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjE4NDk2ODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMTg0OTg5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4xODUwMTc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjE4NTA2NDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMTg1MDcyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xODcyNzQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxJc3N1ZSBIVyBMYXllciBEaXNwbGF5TGlzdCBCdXR0b24gODQ5eDEyNgotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE4NzUwNjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTg3NjQ1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8Zmx1c2ggZHJhd2luZyBjb21tYW5kcwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE4ODI3OTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVQYXRoCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTg4Mjg5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTg4MzE4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xODgzMzI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE4ODU3ODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fEJ1aWxkIEdMIFNoYWRlcgotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjE4ODk1OTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTg4OTcyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8QnVpbGQgR0wgU2hhZGVyCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMTkyMDg4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4xOTIxNzM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxsaW5rUHJvZ3JhbQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE5NjIzNzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fENob3Jlb2dyYXBoZXIjZG9GcmFtZQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE5NjI3NjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGlucHV0Ci0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMTk2MzA0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xOTYzMjA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhbmltYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xOTY3MDI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE5NjczMjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRyYXZlcnNhbAotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjE5Njc5MTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRyYXcKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xOTY4MjQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxSZWNvcmQgVmlldyNkcmF3KCkKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4xOTcyNjM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwNjM2MjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjA3MjE4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMDgxMjg6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX1RleHR1cmV8MjM2NDc2MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwODEzODogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfVGV4dHVyZV9jb3VudHwxNjEKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMDgxNDQ6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX09mZnNjcmVlbkJ1ZmZlcnwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjA4MTUwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9PZmZzY3JlZW5CdWZmZXJfY291bnR8MQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwODE1NjogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfTGF5ZXJ8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwODE2MjogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfTGF5ZXJfY291bnR8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwODIzNjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjA4MjQ0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8bm90aWZ5RnJhbWVQZW5kaW5nCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjA4MjQ4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMDgyNTQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxEcmF3RnJhbWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMDgyNjA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzeW5jRnJhbWVTdGF0ZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwODI4MTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHByZXBhcmVUcmVlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjA4NDY5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8QWxsb2NhdGUgMTA4OHgxOTIgSFcgTGF5ZXIKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMDg1MTU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwODU0NTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fEFsbG9jYXRlIDEwODh4MTkyIEhXIExheWVyCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjA4NTU5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMDg1NzQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwODU4MDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjA4NjMxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMDg2MzI6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxPcHRpbWl6ZSBIVyBMYXllciBEaXNwbGF5TGlzdCBMaW5lYXJMYXlvdXQgMTA4MHgxODkKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMDg2Mzc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxjb21wdXRlT3JkZXJpbmcKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yMDg2NDI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwODY0NDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjA4NjcyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMDg2OTQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwODcwNTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fE9wdGltaXplIEhXIExheWVyIERpc3BsYXlMaXN0IExpbmVhckxheW91dCAxMDgweDE4OQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwODcxMDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGNvbXB1dGVPcmRlcmluZwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwODcxNjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjA4NzQxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMDg3NDk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxjb21wdXRlT3JkZXJpbmcKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMDg3OTg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjIwODg5MjogdHJhY2luZ19tYXJrX3dyaXRlOiBGfDE4OTI2fGFuaW1hdG9yOm9wYWNpdHl8MjM3NTE0NTIKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMDg5MzA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjA4OTQyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjA4OTU2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMDg5Njc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwODk3MTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fEJ1dHRvbiBhbHBoYSBjYXVzZWQgc2F2ZUxheWVyIDg0OXgxMjYKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMDg5NzU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIwODk4OTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjA4OTk1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMDkwMjc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIwOTAzNDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjA5MTI0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8TGluZWFyTGF5b3V0IGFscGhhIGNhdXNlZCBzYXZlTGF5ZXIgMTA4MHgxODkKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMDkxMjc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIwOTEzNzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fExpbmVhckxheW91dCBhbHBoYSBjYXVzZWQgc2F2ZUxheWVyIDEwODB4MTg5Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjA5MTQwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMDkxOTk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjA5MjA1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjA5MjEyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMDkyMjA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIwOTIyMzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjA5MjI4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMDkyNTE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIwOTI1NzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjA5MzQ3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIwOTM1NzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIwOTM2NzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjA5NDIxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMDk0NzY6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIwOTQ4NDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjA5NTA2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMDk1MTE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxMDMwMzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fElzc3VlIEhXIExheWVyIERpc3BsYXlMaXN0IExpbmVhckxheW91dCAxMDgweDE4OQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxMDY0NDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjExNzY5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8SXNzdWUgSFcgTGF5ZXIgRGlzcGxheUxpc3QgTGluZWFyTGF5b3V0IDEwODB4MTg5Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjEyMDQwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMTIxNTE6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxmbHVzaCBkcmF3aW5nIGNvbW1hbmRzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjEyNjk3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVBhdGgKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMTI3MDU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMTI3MzM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxMjc0NzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjEyODEwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8Q2hvcmVvZ3JhcGhlciNkb0ZyYW1lCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjEyODQzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8aW5wdXQKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yMTI4Nzg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjIxMjg5NTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFuaW1hdGlvbgotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjIxMzE4NzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjEzMjIxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dHJhdmVyc2FsCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjEzMzIxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZHJhdwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjIxMzM2MDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fFJlY29yZCBWaWV3I2RyYXcoKQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxNDAzODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjE0ODQzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMTUxMTE6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX1RleHR1cmV8NDAzNTkyOAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxNTExODogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfVGV4dHVyZV9jb3VudHwxNjMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMTUxMjI6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX09mZnNjcmVlbkJ1ZmZlcnwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjE1MTI3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9PZmZzY3JlZW5CdWZmZXJfY291bnR8MwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxNTEzMTogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfTGF5ZXJ8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxNTEzNTogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfTGF5ZXJfY291bnR8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxNTIwMzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjE1MjEwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8bm90aWZ5RnJhbWVQZW5kaW5nCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjE1MjEyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMTUyMTk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxEcmF3RnJhbWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMTUyMjM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzeW5jRnJhbWVTdGF0ZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxNTI0MjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHByZXBhcmVUcmVlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjE1NDQ0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMTU0NTI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjIxNTQ5NjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjE1NTA0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMTU1MDY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxjb21wdXRlT3JkZXJpbmcKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yMTU1Mjc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxNTU0NjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjE1NjY1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIxNTY3NjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIxNTY5MTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjE1Njk5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8QnV0dG9uIGFscGhhIGNhdXNlZCBzYXZlTGF5ZXIgODQ5eDEyNgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIxNTcwMjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVBbWJpZW50U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjE1NzAzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMTU3MTg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIxNTcyNTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjE1NzU4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMTU3NjU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxNTg0MDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fExpbmVhckxheW91dCBhbHBoYSBjYXVzZWQgc2F2ZUxheWVyIDEwODB4MTg5Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjE1ODQzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMTU4NTI6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxMaW5lYXJMYXlvdXQgYWxwaGEgY2F1c2VkIHNhdmVMYXllciAxMDgweDE4OQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxNTg1NDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjE1OTA3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIxNTkxNDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxNTkxNjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGZsdXNoIGRyYXdpbmcgY29tbWFuZHMKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMTU5MjI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIxNTkzMDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVBbWJpZW50U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjE1OTMzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMTU5Mzk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlU3BvdFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIxNTk1OTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjE1OTY0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMTU5OTU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjE2MDAyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjE2MDEwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMTYwMTY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIxNjAyODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjE2MDM0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMTYwNTQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIxNjA1OTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjE2MzgxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVBhdGgKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMTYzODg6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMTY0MDc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIxNjQxNjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjE3MTI2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4yMjIyNTM6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX1RleHR1cmV8NDAzNTkyOAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjIyMjI2NDogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfVGV4dHVyZV9jb3VudHwxNjMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4yMjIyNzE6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX09mZnNjcmVlbkJ1ZmZlcnwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMjIyMjc5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9PZmZzY3JlZW5CdWZmZXJfY291bnR8MwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjIyMjI4NzogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfTGF5ZXJ8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjIyMjI5NTogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfTGF5ZXJfY291bnR8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjIyMjM5NzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMjIyNDA2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZHJhaW5EaXNwbGF5RXZlbnRRdWV1ZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjIyMjQyMTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjI5MDA3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZHJhaW5EaXNwbGF5RXZlbnRRdWV1ZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjIyOTAyOTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHF1ZXVlIG1GcmFtZUNhbGxiYWNrVGFzawotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjIyOTAzNzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjI5MDM5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yMzA0NTE6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxDaG9yZW9ncmFwaGVyI2RvRnJhbWUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yMzA0ODQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxpbnB1dAotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjIzMDUwNzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjMwNTE4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YW5pbWF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjMwNzU1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yMzA3NzM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0cmF2ZXJzYWwKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yMzA4MTg6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxkcmF3Ci0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjMwODQ4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8UmVjb3JkIFZpZXcjZHJhdygpCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjMxMTYyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMzExNjI6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxub3RpZnlGcmFtZVBlbmRpbmcKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMzExNjk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIzMTE3ODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fERyYXdGcmFtZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIzMTE4MjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHN5bmNGcmFtZVN0YXRlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjMxMjAzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8cHJlcGFyZVRyZWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMzEzNDI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIzMTM0NzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjMxMzgxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yMzEzODg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIzMTM5MjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGNvbXB1dGVPcmRlcmluZwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjIzMTQwODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjMxNDI0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMzE1NzI6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxCdXR0b24gYWxwaGEgY2F1c2VkIHNhdmVMYXllciA4NDl4MTI2Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjMxNTc2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMzE3MDY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjMxNzE1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8TGluZWFyTGF5b3V0IGFscGhhIGNhdXNlZCBzYXZlTGF5ZXIgMTA4MHgxODkKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMzE3MTg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIzMTcxOTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIzMTcyODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fExpbmVhckxheW91dCBhbHBoYSBjYXVzZWQgc2F2ZUxheWVyIDEwODB4MTg5Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjMxNzMwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMzE3MzU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIzMTc0NjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVBbWJpZW50U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjMxNzcxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMzE3NzQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxmbHVzaCBkcmF3aW5nIGNvbW1hbmRzCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjMxNzc5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMzE4MTE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIzMTgxODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjMxODMyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIzMTgzNzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIzMTg0NDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjMxODUxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMzE4NTQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjIzMTg1OTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjMxODgzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yMzE4ODk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjIzMjA0NDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHNoYWRvdyB0ZXNzZWxsYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4yMzIwNTM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4yMzIwNjM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjIzMjA3MTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVBbWJpZW50U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMjMyMDgwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4yMzIwODU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlU3BvdFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjIzMjEwNzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMjMyMTEzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMzIyNjk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlUGF0aAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIzMjI3NTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIzMjI5MzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjMyMzAzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMzIzNTI6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlUGF0aAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIzMjM1NjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIzMjM2MzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjMyMzY3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMzI5Mzk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIzMzYwNDogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfVGV4dHVyZXw0MDM1OTI4Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjMzNjEyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9UZXh0dXJlX2NvdW50fDE2MwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjIzMzYxNjogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfT2Zmc2NyZWVuQnVmZmVyfDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMzM2MjE6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX09mZnNjcmVlbkJ1ZmZlcl9jb3VudHwzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjMzNjI2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9MYXllcnwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjMzNjMwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9MYXllcl9jb3VudHwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjMzNjg4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMzM2OTQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxkaXNwYXRjaEZyYW1lQ2FsbGJhY2tzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjMzNjk2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yMzM3MDA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxkcmFpbkRpc3BsYXlFdmVudFF1ZXVlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjMzNzEwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yNDU3Nzg6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxkcmFpbkRpc3BsYXlFdmVudFF1ZXVlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjQ1Nzk5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8cXVldWUgbUZyYW1lQ2FsbGJhY2tUYXNrCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjQ1ODA1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yNDU4MDc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI0NjU2NzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fENob3Jlb2dyYXBoZXIjZG9GcmFtZQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI0NjU5ODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGlucHV0Ci0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjQ2NjQ5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yNDY2NjE6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhbmltYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yNDY4ODE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI0Njg5NDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRyYXZlcnNhbAotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI0NjkyNzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRyYXcKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yNDY5NDg6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxSZWNvcmQgVmlldyNkcmF3KCkKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDcwNzA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxub3RpZnlGcmFtZVBlbmRpbmcKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDcwNzc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI0NzE5NjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjQ3MjM2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8RHJhd0ZyYW1lCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjQ3MjQwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c3luY0ZyYW1lU3RhdGUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDcyNjM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxwcmVwYXJlVHJlZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI0NzQwNzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjQ3NDEyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yNDc0NDM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI0NzQ1MDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjQ3NDU3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8Y29tcHV0ZU9yZGVyaW5nCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjQ3NDY1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDc0ODc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI0NzYzMTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fEJ1dHRvbiBhbHBoYSBjYXVzZWQgc2F2ZUxheWVyIDg0OXgxMjYKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDc2MzQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI0Nzc0NDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHNoYWRvdyB0ZXNzZWxsYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDc3NTY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxMaW5lYXJMYXlvdXQgYWxwaGEgY2F1c2VkIHNhdmVMYXllciAxMDgweDE4OQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI0Nzc1NjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI0Nzc1OTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjQ3NzY4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8TGluZWFyTGF5b3V0IGFscGhhIGNhdXNlZCBzYXZlTGF5ZXIgMTA4MHgxODkKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDc3NzI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI0Nzc3MjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjQ3NzgzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNDc4MDU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI0NzgxMjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjQ3ODE5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8Zmx1c2ggZHJhd2luZyBjb21tYW5kcwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI0Nzg0NzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjQ3ODU0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNDc4NjQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjQ3ODcwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjQ3ODc2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNDc4ODM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI0Nzg4NjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjQ3ODkxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNDc5MTI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI0NzkxNzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjQ3OTQ4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI0Nzk1NTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI0Nzk2MzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjQ3OTcwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNDc5ODE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI0Nzk4NjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjQ4MDA2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNDgwMTE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI0ODI1OTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVQYXRoCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjQ4MjY1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjQ4MjgyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDgyOTI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI0ODM0NTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVQYXRoCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjQ4MzQ5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjQ4MzU4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDgzNjU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI0ODk1MjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjQ5NTU2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9UZXh0dXJlfDQwMzU5MjgKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDk1NjI6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX1RleHR1cmVfY291bnR8MTYzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjQ5NTY3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9PZmZzY3JlZW5CdWZmZXJ8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI0OTU3MjogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfT2Zmc2NyZWVuQnVmZmVyX2NvdW50fDMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDk1NzY6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX0xheWVyfDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDk1ODA6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX0xheWVyX2NvdW50fDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDk2NjM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI0OTY2OTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRpc3BhdGNoRnJhbWVDYWxsYmFja3MKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDk2NzE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI0OTY3NjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRyYWluRGlzcGxheUV2ZW50UXVldWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNDk2ODQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2Mjg5MDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRyYWluRGlzcGxheUV2ZW50UXVldWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNjI5MDk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxxdWV1ZSBtRnJhbWVDYWxsYmFja1Rhc2sKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNjI5MTc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2MjkxOTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjYzMDA3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8Q2hvcmVvZ3JhcGhlciNkb0ZyYW1lCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjYzMDMyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8aW5wdXQKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yNjMwNTU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI2MzA2NDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFuaW1hdGlvbgotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI2MzMwOTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjYzMzIzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dHJhdmVyc2FsCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjYzMzU2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZHJhdwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI2MzM3OTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fFJlY29yZCBWaWV3I2RyYXcoKQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2MzUxODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fG5vdGlmeUZyYW1lUGVuZGluZwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2MzUyMzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjYzNjQ5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNjM3MDA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxEcmF3RnJhbWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNjM3MDQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzeW5jRnJhbWVTdGF0ZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2MzcyOTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHByZXBhcmVUcmVlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjYzODgyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNjM4ODg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2Mzk0NjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGNvbXB1dGVPcmRlcmluZwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2Mzk3ODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjY0MTA1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yNjQxMTY6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI2NDEzOTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjY0MTQ5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8QnV0dG9uIGFscGhhIGNhdXNlZCBzYXZlTGF5ZXIgODQ5eDEyNgotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2NDE1MzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjY0MjcxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI2NDI4MjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2NDI5MTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fExpbmVhckxheW91dCBhbHBoYSBjYXVzZWQgc2F2ZUxheWVyIDEwODB4MTg5Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjY0Mjk0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNjQyOTc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2NDMwNDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fExpbmVhckxheW91dCBhbHBoYSBjYXVzZWQgc2F2ZUxheWVyIDEwODB4MTg5Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjY0MzA3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNjQzMDk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI2NDMyMzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjY0MzI5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNjQzNTU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxmbHVzaCBkcmF3aW5nIGNvbW1hbmRzCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjY0MzcwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNjQzNzc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI2NDM4OTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHNoYWRvdyB0ZXNzZWxsYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNjQzOTU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNjQ0MDE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI2NDQwODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVBbWJpZW50U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjY0NDExOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNjQ0MTY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlU3BvdFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI2NDQzOTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjY0NDQ0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNjQ0NzY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjY0NDgzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjY0NDkxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNjQ0OTg6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI2NDUwNzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjY0NTEzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yNjQ1MzI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI2NDUzODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjY0NzkzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVBhdGgKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNjQ3OTk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNjQ4MTg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2NDgyODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjY0ODc3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVBhdGgKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNjQ4ODE6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNjQ4OTA6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2NDg5NjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjY1NDcxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNjYwMDc6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX1RleHR1cmV8NDAzNTkyOAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2NjAxMzogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfVGV4dHVyZV9jb3VudHwxNjMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yNjYwMTg6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX09mZnNjcmVlbkJ1ZmZlcnwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjY2MDIzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9PZmZzY3JlZW5CdWZmZXJfY291bnR8MwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2NjAyNzogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfTGF5ZXJ8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2NjAzMTogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfTGF5ZXJfY291bnR8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2NjA4NjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjY2MDkyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZGlzcGF0Y2hGcmFtZUNhbGxiYWNrcwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2NjA5NTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjY2MDk5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZHJhaW5EaXNwbGF5RXZlbnRRdWV1ZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI2NjEwNzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjc5MTk3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZHJhaW5EaXNwbGF5RXZlbnRRdWV1ZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI3OTI3ODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHF1ZXVlIG1GcmFtZUNhbGxiYWNrVGFzawotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI3OTI5MDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjc5MjkyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yODAyNzA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxDaG9yZW9ncmFwaGVyI2RvRnJhbWUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yODAzMTc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxpbnB1dAotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI4MDM2MTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjgwMzczOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YW5pbWF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjgwNjQ1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yODA2NTk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0cmF2ZXJzYWwKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yODA3MDM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxkcmF3Ci0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjgwNzM1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8UmVjb3JkIFZpZXcjZHJhdygpCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjgxMTA5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8bm90aWZ5RnJhbWVQZW5kaW5nCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjgxMTA5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yODExMTg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI4MTEzMTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fERyYXdGcmFtZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI4MTEzNTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHN5bmNGcmFtZVN0YXRlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjgxMTYwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8cHJlcGFyZVRyZWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yODEzMjg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI4MTMzNDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjgxMzc2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yODEzODM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI4MTM4NzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGNvbXB1dGVPcmRlcmluZwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI4MTQwNTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjgxNDIyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yODE2MDc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxCdXR0b24gYWxwaGEgY2F1c2VkIHNhdmVMYXllciA4NDl4MTI2Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjgxNjEyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yODE3NDA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjgxNzUxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8TGluZWFyTGF5b3V0IGFscGhhIGNhdXNlZCBzYXZlTGF5ZXIgMTA4MHgxODkKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yODE3NTQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yODE3NTU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI4MTc2NDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fExpbmVhckxheW91dCBhbHBoYSBjYXVzZWQgc2F2ZUxheWVyIDEwODB4MTg5Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjgxNzY2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yODE3NzE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI4MTc4MzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVBbWJpZW50U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjgxODA4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yODE4MTU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlU3BvdFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI4MTgxNjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGZsdXNoIGRyYXdpbmcgY29tbWFuZHMKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yODE4NTQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI4MTg2MTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjgxODcyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI4MTg3ODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI4MTg4NTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjgxODkxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yODE4OTU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI4MTkwMDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjgxOTE5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yODE5MjQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI4MTk1ODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHNoYWRvdyB0ZXNzZWxsYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yODE5NjU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yODE5NzU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI4MTk4MjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVBbWJpZW50U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjgxOTkzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAzXSAuLi4xIDY4MzIwMi4yODE5OTk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlU3BvdFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDNdIC4uLjEgNjgzMjAyLjI4MjAxODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwM10gLi4uMSA2ODMyMDIuMjgyMDI0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yODIzMzE6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlUGF0aAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI4MjMzODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI4MjM1NzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjgyMzY3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yODI0MjU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlUGF0aAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI4MjQyOTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI4MjQzODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjgyNDQ0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yODMwOTM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI4Mzk5NjogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfVGV4dHVyZXw0MDM1OTI4Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjg0MDA1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9UZXh0dXJlX2NvdW50fDE2MwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI4NDAxMTogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfT2Zmc2NyZWVuQnVmZmVyfDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yODQwMTY6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX09mZnNjcmVlbkJ1ZmZlcl9jb3VudHwzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjg0MDIwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9MYXllcnwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjg0MDI1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9MYXllcl9jb3VudHwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjg0MTEyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yODQxMTk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxkaXNwYXRjaEZyYW1lQ2FsbGJhY2tzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjg0MTIxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yODQxMjU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxkcmFpbkRpc3BsYXlFdmVudFF1ZXVlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjg0MTM1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yOTU5Njk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxkcmFpbkRpc3BsYXlFdmVudFF1ZXVlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjk2MDEwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8cXVldWUgbUZyYW1lQ2FsbGJhY2tUYXNrCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjk2MDE5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yOTYwMjE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI5NzA3MTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fENob3Jlb2dyYXBoZXIjZG9GcmFtZQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI5NzEyOTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGlucHV0Ci0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjk3MjEwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yOTcyMjQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhbmltYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yOTc3Mzk6IHRyYWNpbmdfbWFya193cml0ZTogU3wxODkyNnxhbmltYXRvcnwxMjIxMzAwNTUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yOTc4NDc6IHRyYWNpbmdfbWFya193cml0ZTogU3wxODkyNnxhbmltYXRvcnwxNzI5NDk5NDAKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yOTc5MzI6IHRyYWNpbmdfbWFya193cml0ZTogU3wxODkyNnxhbmltYXRvcnwxOTA4OTA0NjEKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4yOTgwMTA6IHRyYWNpbmdfbWFya193cml0ZTogU3wxODkyNnxhbmltYXRvcnwyMDA1ODQ1MAotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI5ODA4NzogdHJhY2luZ19tYXJrX3dyaXRlOiBTfDE4OTI2fGFuaW1hdG9yfDE4NDg0NzM5NQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI5ODIwMDogdHJhY2luZ19tYXJrX3dyaXRlOiBTfDE4OTI2fGFuaW1hdG9yfDE2MjgyNTUwNAotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI5ODI4ODogdHJhY2luZ19tYXJrX3dyaXRlOiBTfDE4OTI2fGFuaW1hdG9yfDE1MzkxOTE5MwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI5ODMyNzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjk4MzQwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dHJhdmVyc2FsCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjk4Mzc3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZHJhdwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjI5ODQwMjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fFJlY29yZCBWaWV3I2RyYXcoKQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI5ODUyMTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRpc3BhdGNoRnJhbWVDYWxsYmFja3MKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yOTg1NjY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxwcmVwYXJlQW5kRHJhdwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI5ODU4MDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHByZXBhcmVUcmVlCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMjk4NzU0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yOTg3NzA6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI5ODgzMjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGNvbXB1dGVPcmRlcmluZwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI5ODkwMzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMjk5MDM5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjI5OTA1MjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjI5OTA2ODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMjk5MDc5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yOTkwODc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxMaW5lYXJMYXlvdXQgYWxwaGEgY2F1c2VkIHNhdmVMYXllciAxMDgweDE4OQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI5OTA5MDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMjk5MDk5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yOTkxMDA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxMaW5lYXJMYXlvdXQgYWxwaGEgY2F1c2VkIHNhdmVMYXllciAxMDgweDE4OQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI5OTEwMzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMjk5MTA4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yOTkxNTM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxmbHVzaCBkcmF3aW5nIGNvbW1hbmRzCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMjk5MTU1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4yOTkxNjI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjI5OTE3ODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHNoYWRvdyB0ZXNzZWxsYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4yOTkxODQ6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4yOTkxOTE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjI5OTE5ODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVBbWJpZW50U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMjk5MjAxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4yOTkyMDc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlU3BvdFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjI5OTIyNzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMjk5MjMzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4yOTkyNjc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMjk5Mjc0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMjk5Mjg0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4yOTkyOTE6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjI5OTMwNzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMjk5MzEzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4yOTkzMzQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjI5OTMzOTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjk5NTUyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVBhdGgKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yOTk1NTk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yOTk1NzY6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI5OTU4NzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjk5NjU5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVBhdGgKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yOTk2NjM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4yOTk2NzI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjI5OTY3ODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMjk5OTAyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMDEwNjI6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX1RleHR1cmV8NDAzNTkyOAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMwMTA3NTogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfVGV4dHVyZV9jb3VudHwxNjMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMDEwODQ6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX09mZnNjcmVlbkJ1ZmZlcnwwCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzAxMDk0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9PZmZzY3JlZW5CdWZmZXJfY291bnR8MwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMwMTEwMzogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfTGF5ZXJ8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMwMTExMjogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfTGF5ZXJfY291bnR8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMwMTIxNDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzAxMjIwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMDEyMzE6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxub3RpZnlGcmFtZVBlbmRpbmcKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMDEyMzY6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMwMTI0NzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fERyYXdGcmFtZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMwMTI1NDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHN5bmNGcmFtZVN0YXRlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzAxMjgxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8cHJlcGFyZVRyZWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMDE0ODk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMwMTQ5NzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzAxNTIwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMDE1Mzc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxkcmFpbkRpc3BsYXlFdmVudFF1ZXVlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzAxNTU3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMDE3OTg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMwMTgxMzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzAxODU4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMTI4NTA6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxkcmFpbkRpc3BsYXlFdmVudFF1ZXVlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzEyODgzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8cXVldWUgbUZyYW1lQ2FsbGJhY2tUYXNrCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzEyODk2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMTI5MDA6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMxMzAyMzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fENob3Jlb2dyYXBoZXIjZG9GcmFtZQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMxMzA2OTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGlucHV0Ci0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzEzMTA1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMTMxMjU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhbmltYXRpb24KLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMTM5MTQ6IHRyYWNpbmdfbWFya193cml0ZTogRnwxODkyNnxhbmltYXRvcnw0NjI2NzU1MwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMxNDIwMTogdHJhY2luZ19tYXJrX3dyaXRlOiBGfDE4OTI2fGFuaW1hdG9yfDIxOTY2NDA3MAotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMxNDQ4ODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzE0NTE1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dHJhdmVyc2FsCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzE0NjM4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZHJhdwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMxNDcwNDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fFJlY29yZCBWaWV3I2RyYXcoKQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMxNDk5OTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fG5vdGlmeUZyYW1lUGVuZGluZwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMxNTAxNjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzE1MDQ4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZGlzcGF0Y2hGcmFtZUNhbGxiYWNrcwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMxNTA1MzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzE1MDYxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZHJhaW5EaXNwbGF5RXZlbnRRdWV1ZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMxNTA3MjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzE1MjQzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMTU4NzI6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxEcmF3RnJhbWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMTU4ODI6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzeW5jRnJhbWVTdGF0ZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMxNTkxNjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHByZXBhcmVUcmVlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzE2MTc3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMTYxODg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMxNjI4MTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGNvbXB1dGVPcmRlcmluZwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMxNjMzODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzE2NTAyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMxNjUxNTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMxNjUzMjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzE2NTQzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMTY1NjA6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMxNjU2ODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzE2NTcxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMTY1NzU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxCdXR0b24gYWxwaGEgY2F1c2VkIHNhdmVMYXllciA4NDl4MTI2Ci0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzE2NTgxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMTY1ODU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMxNjYwODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzE2NjczOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMTY4MzQ6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxqaXR0ZXJOYW5vc3w1NTUyOTAwCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzE2OTczOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8Y29tbWl0Ci0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzE2OTgyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMxNjk4NDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGZsdXNoIGRyYXdpbmcgY29tbWFuZHMKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMTY5OTI6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxhcHByb3hpbWF0ZVBhdGhPdXRsaW5lVmVydGljZXMKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMTcwMDM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMxNzAxMDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzE3MDEzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMTcwMjY6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMxNzAzMjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzE3MDQwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMTcwNTQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMxNzA2MDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzE3MDkwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMxNzA5NjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMxNzEwMzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzE3MTExOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMTcxMTU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMxNzEyMDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzE3MTQxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMTcxNDY6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMxNzc3OTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVQYXRoCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzE3NzkwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzE3ODIzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMTc4NDQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMxNzkzNTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVQYXRoCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzE3OTQ0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzE3OTY0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMTc5Nzc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMxOTAyOTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzE5ODAxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9UZXh0dXJlfDQwMzU5MjgKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMTk4MTM6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX1RleHR1cmVfY291bnR8MTYzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzE5ODIyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9PZmZzY3JlZW5CdWZmZXJ8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMxOTgzMjogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfT2Zmc2NyZWVuQnVmZmVyX2NvdW50fDMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMTk4NDE6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX0xheWVyfDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMTk4NTA6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX0xheWVyX2NvdW50fDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMTk5Mzk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMyMDAxNTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRyYWluRGlzcGxheUV2ZW50UXVldWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMjAwMzM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMyOTUwMzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRyYWluRGlzcGxheUV2ZW50UXVldWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMjk1Mzg6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxxdWV1ZSBtRnJhbWVDYWxsYmFja1Rhc2sKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMjk1NTc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMyOTU2MjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzI5NzU5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8Q2hvcmVvZ3JhcGhlciNkb0ZyYW1lCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzI5ODE5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8aW5wdXQKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMjk4NTc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMyOTg3NzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFuaW1hdGlvbgotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzMDQwOTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzMwNDM0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dHJhdmVyc2FsCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzMwNTA1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZHJhdwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzMDU1MzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fFJlY29yZCBWaWV3I2RyYXcoKQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzMTEyODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzMxMjEyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8bm90aWZ5RnJhbWVQZW5kaW5nCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzMxMjI3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMzEyMzc6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxEcmF3RnJhbWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMzEyNDU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzeW5jRnJhbWVTdGF0ZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzMTI4MTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHByZXBhcmVUcmVlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzMxNTE4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMzE1Mzk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzMTYzOTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGNvbXB1dGVPcmRlcmluZwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzMTcwMDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzMxODc2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zMzE4OTI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjMzMTkzMzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzMxOTg4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8QnV0dG9uIGFscGhhIGNhdXNlZCBzYXZlTGF5ZXIgODQ5eDEyNgotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzMTk5NDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzMyMDc1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMzMjA4ODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMzMjEwNzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzMyMTE5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMzIxMzY6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMzMjE0MzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzMyMTg5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMzIxOTU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzMjMxOTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGZsdXNoIGRyYXdpbmcgY29tbWFuZHMKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMzIzNDk6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzMyMzU3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzMyMzY4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMzIzNzY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMzMjM4NTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzMyMzkxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMzI0MTI6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMzMjQxNzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzMyNDQ2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMzMjQ1MzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMzMjQ1OTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzMyNDY2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMzI0Njk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjMzMjQ3NTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzMyNDk5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zMzI1MDQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzMzEwODogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVQYXRoCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzMzMTE5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzMzMTU2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMzMxNzY6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzMzI2NzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVQYXRoCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzMzMzYyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzMzMzg3OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMzM0MDU6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzNDY3MTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzM1NTMxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9UZXh0dXJlfDQwMzU5MjgKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMzU1NDQ6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX1RleHR1cmVfY291bnR8MTYzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzM1NTU0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9PZmZzY3JlZW5CdWZmZXJ8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzNTU2MzogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfT2Zmc2NyZWVuQnVmZmVyX2NvdW50fDMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMzU1NzI6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX0xheWVyfDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMzU1ODI6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX0xheWVyX2NvdW50fDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMzU3MzM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzNTc0NTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRpc3BhdGNoRnJhbWVDYWxsYmFja3MKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMzU3NDk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjMzNTc1NzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRyYWluRGlzcGxheUV2ZW50UXVldWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zMzU3NzM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjM0NDg3MDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRyYWluRGlzcGxheUV2ZW50UXVldWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zNDQ5MjM6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxxdWV1ZSBtRnJhbWVDYWxsYmFja1Rhc2sKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zNDQ5Mzk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjM0NDk0MzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzQ2NTg4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8Q2hvcmVvZ3JhcGhlciNkb0ZyYW1lCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzQ2Njk1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8aW5wdXQKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zNDY3NjE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjM0Njc4MjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFuaW1hdGlvbgotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjM0NzQ2MjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzQ3NDkyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dHJhdmVyc2FsCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzQ3NTYyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZHJhdwotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjM0NzYwMzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fFJlY29yZCBWaWV3I2RyYXcoKQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM0ODEwNzogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fG5vdGlmeUZyYW1lUGVuZGluZwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM0ODEyMDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzQ4MTMxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZGlzcGF0Y2hGcmFtZUNhbGxiYWNrcwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM0ODEzNTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzQ4MTQzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8ZHJhaW5EaXNwbGF5RXZlbnRRdWV1ZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM0ODE1NTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzQ4MTU4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zNDgyMjY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxEcmF3RnJhbWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zNDgyMzU6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzeW5jRnJhbWVTdGF0ZQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM0ODI3MDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHByZXBhcmVUcmVlCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzQ4NTEwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zNDg1MTk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM0ODYxNTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGNvbXB1dGVPcmRlcmluZwotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM0ODY3NTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTI2ICgtLS0tLSkgWzAwNF0gLi4uMSA2ODMyMDIuMzQ4ODYzOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5MjYgKC0tLS0tKSBbMDA0XSAuLi4xIDY4MzIwMi4zNDg4Nzc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODkyNiAoLS0tLS0pIFswMDRdIC4uLjEgNjgzMjAyLjM0ODkxMDogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzQ4OTQ2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8QnV0dG9uIGFscGhhIGNhdXNlZCBzYXZlTGF5ZXIgODQ5eDEyNgotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM0ODk1MzogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMzQ4OTg2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjM0ODk5OTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjM0OTAxODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMzQ5MDMwOiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4zNDkwNDk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDBdIC4uLjEgNjgzMjAyLjM0OTA1NjogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMF0gLi4uMSA2ODMyMDIuMzQ5MDk2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAwXSAuLi4xIDY4MzIwMi4zNDkxMDM6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM0OTI1NDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGZsdXNoIGRyYXdpbmcgY29tbWFuZHMKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zNDkzMTY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnxzaGFkb3cgdGVzc2VsbGF0aW9uCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzQ5MzI2OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzQ5MzM4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zNDkzNDY6IHRyYWNpbmdfbWFya193cml0ZTogQnwxODkyNnx0ZXNzZWxsYXRlQW1iaWVudFNoYWRvdwotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjM0OTM1OTogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg5ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzQ5MzY1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZVNwb3RTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODkgKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zNDkzODY6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OSAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjM0OTM5MjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzQ5NDI0OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8c2hhZG93IHRlc3NlbGxhdGlvbgotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjM0OTQzMDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGFwcHJveGltYXRlUGF0aE91dGxpbmVWZXJ0aWNlcwotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjM0OTQzODogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzQ5NDQ1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8dGVzc2VsbGF0ZUFtYmllbnRTaGFkb3cKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zNDk0NDg6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk4OCAoLS0tLS0pIFswMDFdIC4uLjEgNjgzMjAyLjM0OTQ1NDogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVTcG90U2hhZG93Ci0gICAgICAgICAgIDwuLi4+LTE4OTg4ICgtLS0tLSkgWzAwMV0gLi4uMSA2ODMyMDIuMzQ5NDczOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5ODggKC0tLS0tKSBbMDAxXSAuLi4xIDY4MzIwMi4zNDk0Nzk6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM1MDA5OTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVQYXRoCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzUwMTE1OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzUwMTcyOiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zNTAxOTc6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM1MDMzOTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fHRlc3NlbGxhdGVQYXRoCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzUwMzQ5OiB0cmFjaW5nX21hcmtfd3JpdGU6IEJ8MTg5MjZ8YXBwcm94aW1hdGVQYXRoT3V0bGluZVZlcnRpY2VzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzUwMzY4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zNTAzODE6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM1MTUyNjogdHJhY2luZ19tYXJrX3dyaXRlOiBFCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzUyNTQ4OiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9UZXh0dXJlfDQwMzU5MjgKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zNTI1NjI6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX1RleHR1cmVfY291bnR8MTYzCi0gICAgICAgICAgIDwuLi4+LTE4OTY0ICgtLS0tLSkgWzAwNV0gLi4uMSA2ODMyMDIuMzUyNTcxOiB0cmFjaW5nX21hcmtfd3JpdGU6IEN8MTg5MjZ8aHd1aV9PZmZzY3JlZW5CdWZmZXJ8MAotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM1MjU4MDogdHJhY2luZ19tYXJrX3dyaXRlOiBDfDE4OTI2fGh3dWlfT2Zmc2NyZWVuQnVmZmVyX2NvdW50fDMKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zNTI1ODk6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX0xheWVyfDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zNTI1OTk6IHRyYWNpbmdfbWFya193cml0ZTogQ3wxODkyNnxod3VpX0xheWVyX2NvdW50fDAKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zNTI3MzQ6IHRyYWNpbmdfbWFya193cml0ZTogRQotICAgICAgICAgICA8Li4uPi0xODk2NCAoLS0tLS0pIFswMDVdIC4uLjEgNjgzMjAyLjM1Mjc0NTogdHJhY2luZ19tYXJrX3dyaXRlOiBCfDE4OTI2fGRyYWluRGlzcGxheUV2ZW50UXVldWUKLSAgICAgICAgICAgPC4uLj4tMTg5NjQgKC0tLS0tKSBbMDA1XSAuLi4xIDY4MzIwMi4zNTI3NjA6IHRyYWNpbmdfbWFya193cml0ZTogRQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdGVzdF9kYXRhL3Byb2ZpbGUtY2hyb21lX3N5c3RyYWNlX3BlcmZfY2hyb21lX2RhdGEgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvcHJvZmlsZS1jaHJvbWVfc3lzdHJhY2VfcGVyZl9jaHJvbWVfZGF0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VmMGI5MC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90ZXN0X2RhdGEvcHJvZmlsZS1jaHJvbWVfc3lzdHJhY2VfcGVyZl9jaHJvbWVfZGF0YQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsidHJhY2VFdmVudHMiOiBbeyJ0ZHVyIjogNDYwLCAibmFtZSI6ICJNZXNzYWdlTG9vcDo6UnVuVGFzayIsICJ0dHMiOiA2MDE2MjAwLCAiYXJncyI6IHsic3JjX2Z1bmMiOiAiUHVzaE9udG9JbW1lZGlhdGVJbmNvbWluZ1F1ZXVlTG9ja2VkIiwgInNyY19maWxlIjogIi4uLy4uL2NvbXBvbmVudHMvc2NoZWR1bGVyL2Jhc2UvdGFza19xdWV1ZV9pbXBsLmNjIn0sICJwaWQiOiAxMzkzMSwgInRzIjogMTk2NDg5NTA1MzAyLCAiY2F0IjogInRvcGxldmVsIiwgInRpZCI6IDEzOTU2LCAicGgiOiAiWCIsICJkdXIiOiA0NjN9LCB7InRkdXIiOiA0MTIsICJuYW1lIjogIlRhc2tRdWV1ZU1hbmFnZXI6OkRvV29yayIsICJ0dHMiOiA2MDE2MjQzLCAiYXJncyI6IHsiZnJvbV9tYWluX3RocmVhZCI6IGZhbHNlfSwgInBpZCI6IDEzOTMxLCAidHMiOiAxOTY0ODk1MDUzNDUsICJjYXQiOiAicmVuZGVyZXIuc2NoZWR1bGVyIiwgInRpZCI6IDEzOTU2LCAicGgiOiAiWCIsICJkdXIiOiA0MTV9LCB7InRkdXIiOiAxMTMsICJuYW1lIjogIlRhc2tRdWV1ZU1hbmFnZXI6OlByb2Nlc3NUYXNrRnJvbVdvcmtRdWV1ZSIsICJ0dHMiOiA2MDE2MjgwLCAiYXJncyI6IHsic3JjX2Z1bmMiOiAiU2V0RW5hYmxlZCIsICJzcmNfZmlsZSI6ICIuLi8uLi9iYXNlL3RyYWNlX2V2ZW50L3RyYWNlX2xvZy5jYyJ9LCAicGlkIjogMTM5MzEsICJ0cyI6IDE5NjQ4OTUwNTM4MiwgImNhdCI6ICJ0b3BsZXZlbCIsICJ0aWQiOiAxMzk1NiwgInBoIjogIlgiLCAiZHVyIjogMTE3fSwgeyJuYW1lIjogIkZyYW1lQmxhbWVDb250ZXh0IiwgInR0cyI6IDYwMTYzMTEsICJhcmdzIjoge30sICJwaWQiOiAxMzkzMSwgInRzIjogMTk2NDg5NTA1NDE0LCAiY2F0IjogImJsaW5rIiwgInRpZCI6IDEzOTU2LCAic2NvcGUiOiAiUGxhdGZvcm1UaHJlYWQiLCAicGgiOiAiKCIsICJpZCI6ICIweDM2ODQifSwgeyJ0ZHVyIjogNzEsICJuYW1lIjogIlRhc2tRdWV1ZU1hbmFnZXI6OlJ1blRhc2siLCAidHRzIjogNjAxNjMxOCwgImFyZ3MiOiB7InF1ZXVlIjogImRlZmF1bHRfdHEifSwgInBpZCI6IDEzOTMxLCAidHMiOiAxOTY0ODk1MDU0MjEsICJjYXQiOiAicmVuZGVyZXIuc2NoZWR1bGVyIiwgInRpZCI6IDEzOTU2LCAicGgiOiAiWCIsICJkdXIiOiA3NH0sIHsibmFtZSI6ICJUb3BMZXZlbCIsICJ0dHMiOiA2MDE2MzMyLCAiYXJncyI6IHsic25hcHNob3QiOiB7fX0sICJwaWQiOiAxMzkzMSwgInRzIjogMTk2NDg5NTA1NDM0LCAiY2F0IjogImJsaW5rIiwgInRpZCI6IDEzOTU2LCAic2NvcGUiOiAiUGxhdGZvcm1UaHJlYWQiLCAicGgiOiAiTyIsICJpZCI6ICIweDM2ODQifSwgeyJuYW1lIjogIkZyYW1lQmxhbWVDb250ZXh0IiwgInR0cyI6IDYwMTYzODIsICJhcmdzIjoge30sICJwaWQiOiAxMzkzMSwgInRzIjogMTk2NDg5NTA1NDgzLCAiY2F0IjogImJsaW5rIiwgInRpZCI6IDEzOTU2LCAic2NvcGUiOiAiUGxhdGZvcm1UaHJlYWQiLCAicGgiOiAiKSIsICJpZCI6ICIweDM2ODQifSwgeyJ0ZHVyIjogODcsICJuYW1lIjogIlRhc2tRdWV1ZU1hbmFnZXI6OlByb2Nlc3NUYXNrRnJvbVdvcmtRdWV1ZSIsICJ0dHMiOiA2MDE2NDEzLCAiYXJncyI6IHsic3JjX2Z1bmMiOiAiU2V0RW5hYmxlZCIsICJzcmNfZmlsZSI6ICIuLi8uLi9iYXNlL3RyYWNlX2V2ZW50L3RyYWNlX2xvZy5jYyJ9LCAicGlkIjogMTM5MzEsICJ0cyI6IDE5NjQ4OTUwNTUxNSwgImNhdCI6ICJ0b3BsZXZlbCIsICJ0aWQiOiAxMzk1NiwgInBoIjogIlgiLCAiZHVyIjogOTF9LCB7Im5hbWUiOiAiRnJhbWVCbGFtZUNvbnRleHQiLCAidHRzIjogNjAxNjQ0MSwgImFyZ3MiOiB7fSwgInBpZCI6IDEzOTMxLCAidHMiOiAxOTY0ODk1MDU1NDMsICJjYXQiOiAiYmxpbmsiLCAidGlkIjogMTM5NTYsICJzY29wZSI6ICJQbGF0Zm9ybVRocmVhZCIsICJwaCI6ICIoIiwgImlkIjogIjB4MzY4NCJ9LCB7InRkdXIiOiA0OCwgIm5hbWUiOiAiVGFza1F1ZXVlTWFuYWdlcjo6UnVuVGFzayIsICJ0dHMiOiA2MDE2NDQ3LCAiYXJncyI6IHsicXVldWUiOiAiZGVmYXVsdF90cSJ9LCAicGlkIjogMTM5MzEsICJ0cyI6IDE5NjQ4OTUwNTU1MCwgImNhdCI6ICJyZW5kZXJlci5zY2hlZHVsZXIiLCAidGlkIjogMTM5NTYsICJwaCI6ICJYIiwgImR1ciI6IDUxfV0sICJzdGFja0ZyYW1lcyI6IHsiMjg1MCI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiZGF0YWdyYW1fcG9sbCIsICJwYXJlbnQiOiAyNTczfSwgIjI4NTMiOiB7ImNhdGVnb3J5IjogIkFuZHJvaWQiLCAibmFtZSI6ICJhbmRyb2lkOjpJUENUaHJlYWRTdGF0ZTo6SVBDVGhyZWFkU3RhdGUoKSIsICJwYXJlbnQiOiAxNTJ9LCAiMTUyMyI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAidXBkYXRlX2Nsa19zdGF0aXN0aWNzIiwgInBhcmVudCI6IDE1MjJ9LCAiMjg1NSI6IHsiY2F0ZWdvcnkiOiAiSmF2YSIsICJuYW1lIjogImFydDo6bWlycm9yOjpQcmltaXRpdmVBcnJheTx1bnNpZ25lZCBjaGFyPjo6U2V0QXJyYXlDbGFzcyhhcnQ6Om1pcnJvcjo6Q2xhc3MqKSJ9LCAiMTk5MyI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiX2ZpbmRfbmV4dF9iaXRfbGUifSwgIjI4NTciOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogIl9fcHV0X3Rhc2tfc3RydWN0IiwgInBhcmVudCI6IDI4NTZ9LCAiMjg1NiI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiZGVsYXllZF9wdXRfdGFza19zdHJ1Y3QiLCAicGFyZW50IjogNTQxfSwgIjE0OTAiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogIl9fcmN1X3JlYWRfdW5sb2NrIiwgInBhcmVudCI6IDExOTR9LCAiMTM5NyI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAibXNtX3JwbV9zZW5kX3NtZF9idWZmZXIiLCAicGFyZW50IjogMTM5Nn0sICIxNDkyIjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJrZ3NsX2lvbW11X2RlZmF1bHRfc2V0c3RhdGUiLCAicGFyZW50IjogMTE0M30sICIxNDkzIjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJfcmF3X3NwaW5fbG9jayIsICJwYXJlbnQiOiAxMjZ9LCAiMTQ5NCI6IHsiY2F0ZWdvcnkiOiAibGliaW5wdXRmbGluZ2VyLnNvIiwgIm5hbWUiOiAiYW5kcm9pZDo6RXZlbnRIdWI6Om1hcEtleShpbnQsIGludCwgaW50LCBpbnQqLCB1bnNpZ25lZCBpbnQqKSBjb25zdCJ9LCAiMTQ5NSI6IHsiY2F0ZWdvcnkiOiAiU3RhbmRhcmQgTGliIiwgIm5hbWUiOiAiamVfZnJlZSJ9LCAiMTQ5NiI6IHsiY2F0ZWdvcnkiOiAibGlib3ZlcmxheS5zbyIsICJuYW1lIjogIm92ZXJsYXk6Ok92ZXJsYXk6OmNvbmZpZ0JlZ2luKCkiLCAicGFyZW50IjogMTQ5NX0sICIxMzk2IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJtc21fcnBtX3NlbmRfZGF0YS5pc3JhLjExIiwgInBhcmVudCI6IDEzOTV9LCAiMTQ5OCI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAic2NoZWR1bGVfaHJ0aW1lb3V0X3JhbmdlIiwgInBhcmVudCI6IDE0OTd9LCAiMTQ5OSI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAic2NoZWR1bGVfaHJ0aW1lb3V0X3JhbmdlX2Nsb2NrIiwgInBhcmVudCI6IDE0OTh9LCAiMzMzOSI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiZm9yY2VfcXVpZXNjZW50X3N0YXRlIiwgInBhcmVudCI6IDMzMzh9LCAiMzMzOCI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAicmN1X3Byb2Nlc3NfY2FsbGJhY2tzIiwgInBhcmVudCI6IDMzMzd9LCAiMTM5NSI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAibXNtX3JwbV9zZW5kX3JlcXVlc3QiLCAicGFyZW50IjogMTM5NH0sICI0MTg5IjogeyJjYXRlZ29yeSI6ICJsaWJ6LnNvIiwgIm5hbWUiOiAiaW5mbGF0ZV9mYXN0In0sICIxOTk0IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJ1cF9yZWFkIiwgInBhcmVudCI6IDI4fSwgIjE3MDAiOiB7ImNhdGVnb3J5IjogIkdQVSBEcml2ZXIiLCAibmFtZSI6ICJnc2xfbWVtb3J5X3dyaXRlIn0sICIxNzAxIjogeyJjYXRlZ29yeSI6ICJHUFUgRHJpdmVyIiwgIm5hbWUiOiAibGVpYV9lbmRfdGlsaW5nIn0sICIxNzAyIjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJ0cmFjaW5nX21hcmtfd3JpdGUiLCAicGFyZW50IjogNTl9LCAiMTM5NCI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAibXNtX2J1c19ycG1fcmVxLmNvbnN0cHJvcC4yIiwgInBhcmVudCI6IDEzOTN9LCAiMTcwNCI6IHsiY2F0ZWdvcnkiOiAiQW5kcm9pZCIsICJuYW1lIjogImFuZHJvaWQ6OlNvcnRlZFZlY3RvcjxhbmRyb2lkOjprZXlfdmFsdWVfcGFpcl90PGFuZHJvaWQ6OndwPGFuZHJvaWQ6OklCaW5kZXI+LCBhbmRyb2lkOjpIZWFwQ2FjaGU6OmhlYXBfaW5mb190PiA+Ojpkb19tb3ZlX2JhY2t3YXJkKHZvaWQqLCB2b2lkIGNvbnN0KiwgdW5zaWduZWQgaW50KSBjb25zdCJ9LCAiMTcwNSI6IHsiY2F0ZWdvcnkiOiAiU3RhbmRhcmQgTGliIiwgIm5hbWUiOiAiZXBvbGxfcHdhaXQifSwgIjE3MDYiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogImRwY21fZGFwbV9zdHJlYW1fZXZlbnQiLCAicGFyZW50IjogMTY4OX0sICIxNzA3IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJzbmRfc29jX2RhcG1fcnRkX3N0cmVhbV9ldmVudCIsICJwYXJlbnQiOiAxNzA2fSwgIjE3MDgiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogIndpZGdldF9zdHJlYW1fZXZlbnQiLCAicGFyZW50IjogMTcwN30sICIxMzkzIjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJtc21fYnVzX3JwbV9jb21taXRfYXJiLmlzcmEuMSIsICJwYXJlbnQiOiAxMzkyfSwgIjE5OTYiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogInNjaGVkdWxlIiwgInBhcmVudCI6IDE1Njl9LCAiNDU3MiI6IHsiY2F0ZWdvcnkiOiAibGliYysrX3NoYXJlZC5zbyIsICJuYW1lIjogInN0ZDo6X18xOjppb3NfYmFzZTo6fmlvc19iYXNlKCkifSwgIjEzOTIiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogIm1zbV9idXNfcmVtb3RlX2h3X2NvbW1pdCIsICJwYXJlbnQiOiAxMzkxfSwgIjQ1NzMiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogImZwdXQiLCAicGFyZW50IjogNTN9LCAiMTM5MSI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAibXNtX2J1c19iaW1jX2NvbW1pdCIsICJwYXJlbnQiOiAxMzkwfSwgIjMyMTciOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogIm1zbV9idXNfZmFicmljX2Nsa19zZXQiLCAicGFyZW50IjogMzIxNn0sICIxMzkwIjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJtc21fYnVzX2ZhYnJpY19od19jb21taXQiLCAicGFyZW50IjogMTM4OX0sICI0MTg4IjogeyJjYXRlZ29yeSI6ICJsaWJncHUuY3Iuc28iLCAibmFtZSI6ICJncHU6OmdsZXMyOjpHTEVTMkRlY29kZXJJbXBsOjpSZXN0b3JlU3RhdGUoZ3B1OjpnbGVzMjo6Q29udGV4dFN0YXRlIGNvbnN0KikifSwgIjM2NTkiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogIl9fb2NtZW1fYWxsb2NhdGVfcmFuZ2UiLCAicGFyZW50IjogMzY1OH0sICIxMTI4IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJwdXRfY3JlZF9yY3UiLCAicGFyZW50IjogNTQxfSwgIjExMjkiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogImttZW1fY2FjaGVfZnJlZSIsICJwYXJlbnQiOiAxMTI4fSwgIjE2MjgiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogImtnc2xfaW9tbXVfdW5tYXAiLCAicGFyZW50IjogMTYyN30sICI0NTc2IjogeyJjYXRlZ29yeSI6ICJKYXZhIiwgIm5hbWUiOiAiYXJ0OjpKTkk6OlJlbGVhc2VCb29sZWFuQXJyYXlFbGVtZW50cyhfSk5JRW52KiwgX2pib29sZWFuQXJyYXkqLCB1bnNpZ25lZCBjaGFyKiwgaW50KSJ9LCAiMzgxMyI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAicmVndWxhdG9yX2Rpc2FibGUiLCAicGFyZW50IjogMzgxMn0sICIxMTIwIjogeyJjYXRlZ29yeSI6ICJTdGFuZGFyZCBMaWIiLCAibmFtZSI6ICJzZW5kdG8ifSwgIjExMjEiOiB7ImNhdGVnb3J5IjogIkphdmEiLCAibmFtZSI6ICJhcnRBbGxvY1N0cmluZ0Zyb21CeXRlc0Zyb21Db2RlUmVnaW9uIn0sICIxMTIyIjogeyJjYXRlZ29yeSI6ICJBbmRyb2lkIiwgIm5hbWUiOiAiYW5kcm9pZDo6SVBDVGhyZWFkU3RhdGU6OmRlY1N0cm9uZ0hhbmRsZShpbnQpIiwgInBhcmVudCI6IDE1Mn0sICIxMTIzIjogeyJjYXRlZ29yeSI6ICJBbmRyb2lkIiwgIm5hbWUiOiAiYW5kcm9pZDo6QnBNZW1vcnk6OmdldE1lbW9yeShpbnQqLCB1bnNpZ25lZCBpbnQqKSBjb25zdCJ9LCAiMTEyNCI6IHsiY2F0ZWdvcnkiOiAiR1BVIERyaXZlciIsICJuYW1lIjogIm94aWxpX2NvbmZpZ3VyZV9kZXB0aGNvbnRyb2wifSwgIjExMjUiOiB7ImNhdGVnb3J5IjogIkFuZHJvaWQiLCAibmFtZSI6ICJhbmRyb2lkOjpCdWZmZXJlZFRleHRPdXRwdXQ6OnBvcEJ1bmRsZSgpIn0sICIxMTI2IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJfdGVzdF9hbmRfc2V0X2JpdCIsICJwYXJlbnQiOiA4M30sICIxMTI3IjogeyJjYXRlZ29yeSI6ICJ0aGVybWFsLWVuZ2luZS1oaCIsICJuYW1lIjogIlt1bmtub3duXSJ9LCAiNDQ5MCI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiX19zY2hlZHVsZSIsICJwYXJlbnQiOiA0NDg5fSwgIjQ1NzkiOiB7ImNhdGVnb3J5IjogImxpYmMrK19zaGFyZWQuc28iLCAibmFtZSI6ICJzdGQ6Ol9fMTo6bnVtX3B1dDxjaGFyLCBzdGQ6Ol9fMTo6b3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyLCBzdGQ6Ol9fMTo6Y2hhcl90cmFpdHM8Y2hhcj4gPiA+Ojpkb19wdXQoc3RkOjpfXzE6Om9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhciwgc3RkOjpfXzE6OmNoYXJfdHJhaXRzPGNoYXI+ID4sIHN0ZDo6X18xOjppb3NfYmFzZSYsIGNoYXIsIGxvbmcpIGNvbnN0In0sICIyOTg5IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJ0dHlfcmVsZWFzZSIsICJwYXJlbnQiOiA1MX0sICIyOTg4IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJrbWVtX2NhY2hlX2FsbG9jIiwgInBhcmVudCI6IDI5ODd9LCAiMzAyOSI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAicHJlcGFyZV90b193YWl0IiwgInBhcmVudCI6IDMwMjh9LCAiMzAyOCI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiZGhkX3Bub19zdG9wX2Zvcl9nc2NhbiIsICJwYXJlbnQiOiAyMTAyfSwgIjI5ODMiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogImtmcmVlIiwgInBhcmVudCI6IDI5ODJ9LCAiMjk4MiI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiYmluZGVyX2RlZmVycmVkX2Z1bmMiLCAicGFyZW50IjogMzV9LCAiMjk4MSI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiX19tdXRleF9sb2NrX3Nsb3dwYXRoIiwgInBhcmVudCI6IDI5ODB9LCAiMjk4MCI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAibXV0ZXhfbG9jayIsICJwYXJlbnQiOiAyOTc5fSwgIjI5ODciOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogInNwbGl0X3ZtYSIsICJwYXJlbnQiOiAyMjkzfSwgIjI5ODYiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogIl9fc2xhYl9mcmVlIiwgInBhcmVudCI6IDI5ODV9LCAiMjk4NSI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAia21lbV9jYWNoZV9mcmVlIiwgInBhcmVudCI6IDI5ODR9LCAiMjk4NCI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAicmVtb3ZlX3ZtYSIsICJwYXJlbnQiOiAyOTczfSwgIjUyNCI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAicmN1X2lkbGVfZW50ZXIiLCAicGFyZW50IjogMjAwfSwgIjUyNSI6IHsiY2F0ZWdvcnkiOiAiU3RhbmRhcmQgTGliIiwgIm5hbWUiOiAic2lnZW1wdHlzZXQifSwgIjUyNiI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAic2tiX2ZyZWVfZGF0YWdyYW0iLCAicGFyZW50IjogMjg0fSwgIjUyNyI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiY29uc3VtZV9za2IiLCAicGFyZW50IjogNTI2fSwgIjUyMCI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAicnVuX3JlYmFsYW5jZV9kb21haW5zIiwgInBhcmVudCI6IDUxOX0sICI1MjEiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogInJlYmFsYW5jZV9kb21haW5zIiwgInBhcmVudCI6IDUyMH0sICI1MjIiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogImxvYWRfYmFsYW5jZSIsICJwYXJlbnQiOiA1MjF9LCAiNTIzIjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJjcHVtYXNrX25leHRfYW5kIiwgInBhcmVudCI6IDUyMn0sICIxMDE0IjogeyJjYXRlZ29yeSI6ICJKYXZhIiwgIm5hbWUiOiAiYXJ0OjptaXJyb3I6OkNsYXNzOjpTZXRTdGF0dXMoYXJ0OjpIYW5kbGU8YXJ0OjptaXJyb3I6OkNsYXNzPiwgYXJ0OjptaXJyb3I6OkNsYXNzOjpTdGF0dXMsIGFydDo6VGhyZWFkKikifSwgIjEwMTUiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogInNnX25leHQiLCAicGFyZW50IjogMTU5fSwgIjEwMTYiOiB7ImNhdGVnb3J5IjogIkdQVSBEcml2ZXIiLCAibmFtZSI6ICJsZWlhX3ByaW1pdGl2ZV9jbGVhciJ9LCAiMTAxNyI6IHsiY2F0ZWdvcnkiOiAiU3RhbmRhcmQgTGliIiwgIm5hbWUiOiAibWVtbW92ZSJ9LCAiNTI4IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJfX2tmcmVlX3NrYiIsICJwYXJlbnQiOiA1Mjd9LCAiNTI5IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJza2JfcmVsZWFzZV9oZWFkX3N0YXRlIiwgInBhcmVudCI6IDUyOH0sICIxMDEyIjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJfX3NjaGVkdWxlIiwgInBhcmVudCI6IDEwMTF9LCAiMTAxMyI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiX3Jhd19zcGluX3VubG9ja19pcnEiLCAicGFyZW50IjogMTAxMn0sICIxMjM0IjogeyJjYXRlZ29yeSI6ICJHUFUgRHJpdmVyIiwgIm5hbWUiOiAiZWdsTWFwSW1hZ2UifSwgIjEyMzUiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogIm11dGV4X3VubG9jayIsICJwYXJlbnQiOiAzOTF9LCAiMTIzNiI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiX19tdXRleF91bmxvY2tfc2xvd3BhdGgiLCAicGFyZW50IjogMTIzNX0sICIxMjM3IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJnZW5fcG9vbF9hbGxvY19hbGlnbmVkIiwgInBhcmVudCI6IDQwM30sICIxMjMwIjogeyJjYXRlZ29yeSI6ICJTdGFuZGFyZCBMaWIiLCAibmFtZSI6ICJzdHJuY21wIn0sICIxMjMxIjogeyJjYXRlZ29yeSI6ICJsaWJxbWlfZW5jZGVjLnNvIiwgIm5hbWUiOiAiW3Vua25vd25dIn0sICIxMjMyIjogeyJjYXRlZ29yeSI6ICJiYXNlLm9kZXgiLCAibmFtZSI6ICJbdW5rbm93bl0ifSwgIjEyMzMiOiB7ImNhdGVnb3J5IjogIkphdmEiLCAibmFtZSI6ICJbdW5rbm93bl0iLCAicGFyZW50IjogMTIzMn0sICI0MTk2IjogeyJjYXRlZ29yeSI6ICJsaWJjYy5jci5zbyIsICJuYW1lIjogImNjOjpSb2xsaW5nVGltZURlbHRhSGlzdG9yeTo6UGVyY2VudGlsZShkb3VibGUpIGNvbnN0In0sICIzOTU3IjogeyJjYXRlZ29yeSI6ICJBbmRyb2lkIiwgIm5hbWUiOiAiYW5kcm9pZDo6QnBCaW5kZXI6OkJwQmluZGVyKGludCkifSwgIjQxOTQiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogInNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSIsICJwYXJlbnQiOiAzODB9LCAiNDE5NSI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAia3RpbWVfZ2V0X3RzIiwgInBhcmVudCI6IDQxOTR9LCAiMTIzOCI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAic2V0X2JpdHNfbGwiLCAicGFyZW50IjogMTIzN30sICIxMjM5IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbiIsICJwYXJlbnQiOiAxMTQ2fSwgIjQxOTAiOiB7ImNhdGVnb3J5IjogImxpYmdwdS5jci5zbyIsICJuYW1lIjogInN0ZDo6X18xOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpfXzE6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6Ol9fMTo6YWxsb2NhdG9yPGNoYXI+ID46OmFwcGVuZChjaGFyIGNvbnN0KiwgdW5zaWduZWQgaW50KSJ9LCAiMzk1NiI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAicmVtb3ZlX3ZtX2FyZWEiLCAicGFyZW50IjogMzk1NX0sICIyNTI2IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJfX2RfYWxsb2MiLCAicGFyZW50IjogMjUyNX0sICI0MzU4IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJtZHNzX21kcF9zbXBfcmVzZXJ2ZSIsICJwYXJlbnQiOiA1OTJ9LCAiMzk1NSI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiX192dW5tYXAiLCAicGFyZW50IjogMzk1NH0sICI0MzU0IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJrbWFwX2F0b21pYyIsICJwYXJlbnQiOiA0MzUzfSwgIjQzNTUiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogImttYXBfaGlnaF9nZXQiLCAicGFyZW50IjogNDM1NH0sICI0MzU2IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJfcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUiLCAicGFyZW50IjogNDM1NX0sICIzOTU0IjogeyJjYXRlZ29yeSI6ICJLZXJuZWwiLCAibmFtZSI6ICJ2ZnJlZSIsICJwYXJlbnQiOiAxNTU4fSwgIjMxNjciOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogIl9fYWxsb2Nfc2tiIiwgInBhcmVudCI6IDMxNjZ9LCAiNDM1MSI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiX19pbmNfem9uZV9wYWdlX3N0YXRlIiwgInBhcmVudCI6IDQzNTB9LCAiNDM1MiI6IHsiY2F0ZWdvcnkiOiAiS2VybmVsIiwgIm5hbWUiOiAiX19pbmNfem9uZV9zdGF0ZSIsICJwYXJlbnQiOiA0MzUxfSwgIjQzNTMiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogInY2X2NsZWFyX3VzZXJfaGlnaHBhZ2Vfbm9uYWxpYXNpbmciLCAicGFyZW50IjogNDM0OX0sICI0MzEwIjogeyJjYXRlZ29yeSI6ICJsaWJncHUuY3Iuc28iLCAibmFtZSI6ICJbdW5rbm93bl0iLCAicGFyZW50IjogNDMwOX0sICI0MzgiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogImtnc2xfYWRkX2ZlbmNlX2V2ZW50IiwgInBhcmVudCI6IDQzN30sICI0MzkiOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogInN5bmNfZmVuY2VfY3JlYXRlIiwgInBhcmVudCI6IDQzOH0sICI0MzYiOiB7ImNhdGVnb3J5IjogIkFuZHJvaWQiLCAibmFtZSI6ICJhbmRyb2lkOjpSZWZCYXNlOjp3ZWFrcmVmX3R5cGU6OmRlY1dlYWsodm9pZCBjb25zdCopIn0sICI0MzciOiB7ImNhdGVnb3J5IjogIktlcm5lbCIsICJuYW1lIjogImtnc2xfaW9jdGxfdGltZXN0YW1wX2V2ZW50IiwgInBhcmVudCI6IDM4Nn0sICI0MzQiOiB7ImNhdGVnb3J5IjogIlN0YW5kYXJkIExpYiIsICJuYW1lIjogInB0aHJlYWRfY3JlYXRlIn19LCAic2FtcGxlcyI6IFt7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDI5Nzg1MCwgInRzIjogMTk2NDkzNjIxODcwLjI0MSwgImNwdSI6IDIsICJjb21tIjogImtzb2Z0aXJxZC8yIiwgInRpZCI6IDE0MTA2LCAic2YiOiA1Mzl9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzIwOTYsICJ0cyI6IDE5NjQ5MzYyMTkzOC42MjYsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzIxMTYsICJ0cyI6IDE5NjQ5MzYyMjQzOS4wNDMsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzA5MTksICJ0cyI6IDE5NjQ5MzYyMjkzOC42NzgsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzA4NzYsICJ0cyI6IDE5NjQ5MzYyMzQzOC4xMDUsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzA4NzYsICJ0cyI6IDE5NjQ5MzYyMzkzNy44OTcsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzEwODMsICJ0cyI6IDE5NjQ5MzYyNDQzNy4yMiwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTEyOCwgInRzIjogMTk2NDkzNjI0OTM2LjA3NCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTMyMCwgInRzIjogMTk2NDkzNjI1NDM1LjkxOCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTYwMSwgInRzIjogMTk2NDkzNjI1OTM3LjQ4LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxNzM0LCAidHMiOiAxOTY0OTM2MjY0MzUuOTE4LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxMzk3LCAidHMiOiAxOTY0OTM2MjY5MzUuMzk3LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA0Mzc2NTgsICJ0cyI6IDE5NjQ5MzYyNjk4Ny4xNjgsICJjcHUiOiAwLCAiY29tbSI6ICJzd2FwcGVyIiwgInRpZCI6IDAsICJzZiI6IDc3fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxNjc4LCAidHMiOiAxOTY0OTM2Mjc0MzYuMTI2LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxOTI5LCAidHMiOiAxOTY0OTM2Mjc5MzUuNzYyLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxNzEwLCAidHMiOiAxOTY0OTM2Mjg0MzUuNjA1LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxNzk5LCAidHMiOiAxOTY0OTM2Mjg5MzQuNzcyLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxODI5LCAidHMiOiAxOTY0OTM2Mjk0MzQuNDA3LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxOTc3LCAidHMiOiAxOTY0OTM2Mjk5MzQuNzcyLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMyMTk5LCAidHMiOiAxOTY0OTM2MzA0MzQuODI0LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMyMDM4LCAidHMiOiAxOTY0OTM2MzA5MzQuNjY4LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxOTgwLCAidHMiOiAxOTY0OTM2MzE0MzQuNzcyLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA0Mzc2NTgsICJ0cyI6IDE5NjQ5MzYzMTc3My4xMDUsICJjcHUiOiAwLCAiY29tbSI6ICJzdXJmYWNlZmxpbmdlciIsICJ0aWQiOiAyMzUsICJzZiI6IDQ4fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAzNDg2NTEsICJ0cyI6IDE5NjQ5MzYzMTg1MS44NTUsICJjcHUiOiAyLCAiY29tbSI6ICJrc29mdGlycWQvMiIsICJ0aWQiOiAxNDEwNiwgInNmIjogMzAwNX0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTk5NSwgInRzIjogMTk2NDkzNjMxOTM5LjY2OCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMjc1NTM4LCAidHMiOiAxOTY0OTM2MzE5NzMuNjI2LCAiY3B1IjogMiwgImNvbW0iOiAibmRyb2lkLnN5c3RlbXVpIiwgInRpZCI6IDk2NSwgInNmIjogMTUyfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAzODYyNzMsICJ0cyI6IDE5NjQ5MzYzMjAyNS41NTMsICJjcHUiOiAwLCAiY29tbSI6ICJzd2FwcGVyIiwgInRpZCI6IDAsICJzZiI6IDc3fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAyNDI4MjIsICJ0cyI6IDE5NjQ5MzYzMjA4Ni4yODIsICJjcHUiOiAyLCAiY29tbSI6ICJzd2FwcGVyIiwgInRpZCI6IDAsICJzZiI6IDUyNH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMzA2MDUwLCAidHMiOiAxOTY0OTM2MzIxNjIuNDgsICJjcHUiOiAwLCAiY29tbSI6ICJrc29mdGlycWQvMCIsICJ0aWQiOiAzLCAic2YiOiA4NH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTg2MSwgInRzIjogMTk2NDkzNjMyNDM5LjkyOCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMDU0OCwgInRzIjogMTk2NDkzNjMyOTM4LjEwNSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMDU2MywgInRzIjogMTk2NDkzNjMzNDM4LjM2NiwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMDkzMiwgInRzIjogMTk2NDkzNjMzOTM3LjYzNywgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMDkxOSwgInRzIjogMTk2NDkzNjM0NDM3LjIyLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxMDgyLCAidHMiOiAxOTY0OTM2MzQ5MzYuNDkxLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxMjMwLCAidHMiOiAxOTY0OTM2MzU0MzUuNTAxLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxNDA3LCAidHMiOiAxOTY0OTM2MzU5MzUuMjkzLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxNzE3LCAidHMiOiAxOTY0OTM2MzY0MzQuNzIsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE3NDcsICJ0cyI6IDE5NjQ5MzYzNjkzNC43MiwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMzQzNDI0LCAidHMiOiAxOTY0OTM2MzcwNzcuMjcyLCAiY3B1IjogMCwgImNvbW0iOiAic3dhcHBlciIsICJ0aWQiOiAwLCAic2YiOiA3N30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTk1NCwgInRzIjogMTk2NDkzNjM3NDM1LjUwMSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTkxMSwgInRzIjogMTk2NDkzNjM3OTM0LjgyNCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNDU3MjUxLCAidHMiOiAxOTY0OTM2MzgzMDEuMjMsICJjcHUiOiAwLCAiY29tbSI6ICJzZW5zb3JzLnFjb20iLCAidGlkIjogOTczLCAic2YiOiA1fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxODI0LCAidHMiOiAxOTY0OTM2Mzg0MzQuOTI4LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA0MDU5MTEsICJ0cyI6IDE5NjQ5MzYzODQ4MC4xODksICJjcHUiOiAwLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDg0NCwgInNmIjogMzAwNn0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMzM3MjA3LCAidHMiOiAxOTY0OTM2Mzg1NTguMDUzLCAiY3B1IjogMiwgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiA4ODUsICJzZiI6IDU4NH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMzc1OTA3LCAidHMiOiAxOTY0OTM2Mzg3MjcuMzc2LCAiY3B1IjogMCwgImNvbW0iOiAici5TY2FubmVyVGhyZWFkIiwgInRpZCI6IDE0MTY0LCAic2YiOiA0MDl9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDQ4MjIyMSwgInRzIjogMTk2NDkzNjM4NzcwLjQ0OSwgImNwdSI6IDIsICJjb21tIjogIi5nbXMucGVyc2lzdGVudCIsICJ0aWQiOiAxMzg4NSwgInNmIjogMjR9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE4OTgsICJ0cyI6IDE5NjQ5MzYzODkzNS41MDEsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE4NzAsICJ0cyI6IDE5NjQ5MzYzOTQzNC42NjgsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE2ODAsICJ0cyI6IDE5NjQ5MzYzOTkzNC4zNTUsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE5MTYsICJ0cyI6IDE5NjQ5MzY0MDQzNC4zNTUsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzIwMzQsICJ0cyI6IDE5NjQ5MzY0MDkzNS4xODksICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzIwMzQsICJ0cyI6IDE5NjQ5MzY0MTQzNC4wOTUsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE4ODgsICJ0cyI6IDE5NjQ5MzY0MTkzNy44OTcsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDQ1OTk3MywgInRzIjogMTk2NDkzNjQxOTg5LjE0NywgImNwdSI6IDAsICJjb21tIjogInN3YXBwZXIiLCAidGlkIjogMCwgInNmIjogNzd9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDQyNjYwMiwgInRzIjogMTk2NDkzNjQyMzkyLjExNiwgImNwdSI6IDIsICJjb21tIjogInN3YXBwZXIiLCAidGlkIjogMCwgInNmIjogMjA0fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMyMTM3LCAidHMiOiAxOTY0OTM2NDI0MzcuMTY4LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxMTI4LCAidHMiOiAxOTY0OTM2NDI5MzYuNzUxLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxMjYxLCAidHMiOiAxOTY0OTM2NDM0MzYuNDkxLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxMzM1LCAidHMiOiAxOTY0OTM2NDM5MzYuODAzLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxMzk0LCAidHMiOiAxOTY0OTM2NDQ0MzUuNzYyLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxMzM2LCAidHMiOiAxOTY0OTM2NDQ5MzUuOTcsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE2MDIsICJ0cyI6IDE5NjQ5MzY0NTQzNS42MDUsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE2NjIsICJ0cyI6IDE5NjQ5MzY0NTkzNS4xMzcsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE3MzYsICJ0cyI6IDE5NjQ5MzY0NjQzNC40NiwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTgxMCwgInRzIjogMTk2NDkzNjQ2OTM1LjM0NSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMjAxNywgInRzIjogMTk2NDkzNjQ3NDM2LjY5OSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTczOSwgInRzIjogMTk2NDkzNjQ3OTM1LjM0NSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTQxNywgInRzIjogMTk2NDkzNjQ4NDM0LjE0NywgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNDY4NDkxLCAidHMiOiAxOTY0OTM2NDg1ODAuNDQ5LCAiY3B1IjogMCwgImNvbW0iOiAic3dhcHBlciIsICJ0aWQiOiAwLCAic2YiOiA3M30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNDQ2MTU4LCAidHMiOiAxOTY0OTM2NDg4NjIuNTg1LCAiY3B1IjogMiwgImNvbW0iOiAibmRyb2lkLnN5c3RlbXVpIiwgInRpZCI6IDk2NSwgInNmIjogMTUyfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxODMxLCAidHMiOiAxOTY0OTM2NDg5MzQuNTY0LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMyMTQxLCAidHMiOiAxOTY0OTM2NDk0MzQuODI0LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMyMDI1LCAidHMiOiAxOTY0OTM2NDk5MzQuNjE2LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxOTgyLCAidHMiOiAxOTY0OTM2NTA0MzQuMjUxLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxOTY4LCAidHMiOiAxOTY0OTM2NTA5MzUuMjQxLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMyMDU3LCAidHMiOiAxOTY0OTM2NTE0MzQuNTEyLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAzOTgwODksICJ0cyI6IDE5NjQ5MzY1MTgzOS44MjQsICJjcHUiOiAyLCAiY29tbSI6ICJrc29mdGlycWQvMiIsICJ0aWQiOiAxNDEwNiwgInNmIjogODR9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDQxODkwNywgInRzIjogMTk2NDkzNjUxODYxLjA3NCwgImNwdSI6IDAsICJjb21tIjogImtzb2Z0aXJxZC8wIiwgInRpZCI6IDMsICJzZiI6IDE2OTl9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE5MjYsICJ0cyI6IDE5NjQ5MzY1MTkzNy4yMiwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTkyMSwgInRzIjogMTk2NDkzNjUyNDM3Ljk0OSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTIzMywgInRzIjogMTk2NDkzNjUyOTM2Ljg1NSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTA4NywgInRzIjogMTk2NDkzNjUzNDM1Ljg2NiwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTMwOSwgInRzIjogMTk2NDkzNjUzOTM1Ljg2NiwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTU5MCwgInRzIjogMTk2NDkzNjU0NDM1LjgxNCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTU2MiwgInRzIjogMTk2NDkzNjU0OTM1LjQ0OSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTYwNywgInRzIjogMTk2NDkzNjU1NDM1LjM5NywgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTcxMCwgInRzIjogMTk2NDkzNjU1OTM1LjYwNSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTc0MCwgInRzIjogMTk2NDkzNjU2NDM0LjYxNiwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTY1MywgInRzIjogMTk2NDkzNjU2OTM0LjcyLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAzMzEwNTksICJ0cyI6IDE5NjQ5MzY1NzA0MS44NTUsICJjcHUiOiAwLCAiY29tbSI6ICJzd2FwcGVyIiwgInRpZCI6IDAsICJzZiI6IDc3fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxOTkzLCAidHMiOiAxOTY0OTM2NTc0MzUuMTg5LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxOTA2LCAidHMiOiAxOTY0OTM2NTc5MzMuOTM5LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAyOTU5ODUsICJ0cyI6IDE5NjQ5MzY1ODAyOS45OCwgImNwdSI6IDAsICJjb21tIjogImt3b3JrZXIvdToyIiwgInRpZCI6IDEzOTIyLCAic2YiOiAzNH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMjYyNTU5LCAidHMiOiAxOTY0OTM2NTgxNDcuNjM3LCAiY3B1IjogMCwgImNvbW0iOiAic2Vuc29ycy5xY29tIiwgInRpZCI6IDk3MywgInNmIjogNTM0fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAyNDYzNDEsICJ0cyI6IDE5NjQ5MzY1ODI1Ni41OTUsICJjcHUiOiAwLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDg0MCwgInNmIjogMjMzMH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMzE0OTE2LCAidHMiOiAxOTY0OTM2NTgzNjkuNjE2LCAiY3B1IjogMiwgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiA4ODUsICJzZiI6IDQ1NH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTg0OCwgInRzIjogMTk2NDkzNjU4NDM0LjQ2LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAzNDY4MTQsICJ0cyI6IDE5NjQ5MzY1ODQ2OS45MjgsICJjcHUiOiAwLCAiY29tbSI6ICJyLlNjYW5uZXJUaHJlYWQiLCAidGlkIjogMTQxNjQsICJzZiI6IDEyNjJ9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDI4MjE2MywgInRzIjogMTk2NDkzNjU4NDkzLjMxNCwgImNwdSI6IDIsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogODA5LCAic2YiOiA0ODB9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDI0OTU5NSwgInRzIjogMTk2NDkzNjU4NjA0LjYxNiwgImNwdSI6IDIsICJjb21tIjogIi5nbXMucGVyc2lzdGVudCIsICJ0aWQiOiAxMzg4NSwgInNmIjogMTE4Nn0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMjA5OSwgInRzIjogMTk2NDkzNjU4OTM0LjQwNywgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMjAxMiwgInRzIjogMTk2NDkzNjU5NDM1LjE4OSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTk2OSwgInRzIjogMTk2NDkzNjU5OTM1LjEzNywgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTc2NCwgInRzIjogMTk2NDkzNjYwNDM0LjMwMywgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTg2OCwgInRzIjogMTk2NDkzNjYwOTM0Ljk4LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMyMDQ1LCAidHMiOiAxOTY0OTM2NjE0MzMuODM1LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxODg0LCAidHMiOiAxOTY0OTM2NjE5MzguMjEsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDUwMjQwMSwgInRzIjogMTk2NDkzNjYxOTkyLjUzMiwgImNwdSI6IDAsICJjb21tIjogInN3YXBwZXIiLCAidGlkIjogMCwgInNmIjogNzd9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDM0NDM0OCwgInRzIjogMTk2NDkzNjYyMzQ4LjQxOCwgImNwdSI6IDIsICJjb21tIjogInN3YXBwZXIiLCAidGlkIjogMCwgInNmIjogMjA0fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMyMTI0LCAidHMiOiAxOTY0OTM2NjI0MzguMzY2LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMwOTg1LCAidHMiOiAxOTY0OTM2NjI5MzguMTA1LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMwOTEzLCAidHMiOiAxOTY0OTM2NjM0MzcuNTMyLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMwOTg3LCAidHMiOiAxOTY0OTM2NjM5MzcuMTY4LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxMTA1LCAidHMiOiAxOTY0OTM2NjQ0MzUuNjU3LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxMjA4LCAidHMiOiAxOTY0OTM2NjQ5MzUuNzYyLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxNjM3LCAidHMiOiAxOTY0OTM2NjU0MzYuMjgyLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA0Mzk3NzQsICJ0cyI6IDE5NjQ5MzY2NTYxMi4wNjQsICJjcHUiOiAyLCAiY29tbSI6ICJuZHJvaWQuc3lzdGVtdWkiLCAidGlkIjogOTY1LCAic2YiOiA4MzR9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE2MDksICJ0cyI6IDE5NjQ5MzY2NTkzNi42OTksICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE1MzYsICJ0cyI6IDE5NjQ5MzY2NjQzNC43MiwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTUyMywgInRzIjogMTk2NDkzNjY2OTM0LjU2NCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNTI1NDM3LCAidHMiOiAxOTY0OTM2NjY5NzkuMzAzLCAiY3B1IjogMCwgImNvbW0iOiAic3dhcHBlciIsICJ0aWQiOiAwLCAic2YiOiA3N30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTg5MywgInRzIjogMTk2NDkzNjY3NDM2LjQ5MSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTkwOCwgInRzIjogMTk2NDkzNjY3OTM0LjE5OSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTU0MiwgInRzIjogMTk2NDkzNjY4NDM0LjkyOCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMjA3NSwgInRzIjogMTk2NDkzNjY4OTM0Ljg3NiwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMjAwMywgInRzIjogMTk2NDkzNjY5NDM0LjA5NSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTg1NywgInRzIjogMTk2NDkzNjY5OTM0LjA0MywgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMjA2NCwgInRzIjogMTk2NDkzNjcwNDM0LjE5OSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMjEwOSwgInRzIjogMTk2NDkzNjcwOTM0LjU2NCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMjA1MSwgInRzIjogMTk2NDkzNjcxNDM0LjY2OCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTk3OSwgInRzIjogMTk2NDkzNjcxOTM4LjkzOSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNDY5MDgwLCAidHMiOiAxOTY0OTM2NzE5ODEuMzg3LCAiY3B1IjogMCwgImNvbW0iOiAic3dhcHBlciIsICJ0aWQiOiAwLCAic2YiOiA3N30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMzEzMzk5LCAidHMiOiAxOTY0OTM2NzIyOTEuNTk1LCAiY3B1IjogMiwgImNvbW0iOiAic3dhcHBlciIsICJ0aWQiOiAwLCAic2YiOiAxMDYwfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxOTQxLCAidHMiOiAxOTY0OTM2NzI0MzguNTc0LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMwODMxLCAidHMiOiAxOTY0OTM2NzI5MzcuNzkzLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMwODMxLCAidHMiOiAxOTY0OTM2NzM0MzYuNDkxLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxMDM4LCAidHMiOiAxOTY0OTM2NzM5MzYuMTc4LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxMzkzLCAidHMiOiAxOTY0OTM2NzQ0MzYuNDkxLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxNTExLCAidHMiOiAxOTY0OTM2NzQ5MzYuNjQ3LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxMzk0LCAidHMiOiAxOTY0OTM2NzU0MzUuODY2LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxNDI0LCAidHMiOiAxOTY0OTM2NzU5MzUuMzk3LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxNTU3LCAidHMiOiAxOTY0OTM2NzY0MzUuNDQ5LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxNjkwLCAidHMiOiAxOTY0OTM2NzY5MzUuNTUzLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAzNzA1MjgsICJ0cyI6IDE5NjQ5MzY3NzEwMy40NywgImNwdSI6IDAsICJjb21tIjogInN3YXBwZXIiLCAidGlkIjogMCwgInNmIjogNzd9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE3NjQsICJ0cyI6IDE5NjQ5MzY3NzQzNS42MDUsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDMyODg0MywgInRzIjogMTk2NDkzNjc3ODk3Ljc0MSwgImNwdSI6IDAsICJjb21tIjogInNlbnNvcnMucWNvbSIsICJ0aWQiOiA5NzMsICJzZiI6IDMwMDl9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE2NDcsICJ0cyI6IDE5NjQ5MzY3NzkzNC45MjgsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDI5MTc1MiwgInRzIjogMTk2NDkzNjc4MDI3Ljk0OSwgImNwdSI6IDAsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogODQwLCAic2YiOiAxMDA0fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAyNzgyNDUsICJ0cyI6IDE5NjQ5MzY3ODE1MC4yOTMsICJjcHUiOiAwLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDg0NCwgInNmIjogNDh9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDMxMzM5OSwgInRzIjogMTk2NDkzNjc4MjY3LjM3NiwgImNwdSI6IDIsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogODg1LCAic2YiOiAyMDQ2fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAzNzcyMzYsICJ0cyI6IDE5NjQ5MzY3ODM2Ny43NDEsICJjcHUiOiAwLCAiY29tbSI6ICJyLlNjYW5uZXJUaHJlYWQiLCAidGlkIjogMTQxNjQsICJzZiI6IDQwOX0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMjc3MTU4LCAidHMiOiAxOTY0OTM2NzgzODkuMjUxLCAiY3B1IjogMiwgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDEzODg1LCAic2YiOiAzMDEwfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxNzUwLCAidHMiOiAxOTY0OTM2Nzg0MzUuMzk3LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxODM5LCAidHMiOiAxOTY0OTM2Nzg5MzQuNDYsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE3MjIsICJ0cyI6IDE5NjQ5MzY3OTQzNC40MDcsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE5NDQsICJ0cyI6IDE5NjQ5MzY3OTkzNS4zNDUsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzIwMDMsICJ0cyI6IDE5NjQ5MzY4MDQzNC43NzIsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE3MjUsICJ0cyI6IDE5NjQ5MzY4MDkzNC43NzIsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE5MDIsICJ0cyI6IDE5NjQ5MzY4MTQzNC40NiwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMjQ1NDEzLCAidHMiOiAxOTY0OTM2ODE4NDcuNDI4LCAiY3B1IjogMiwgImNvbW0iOiAic3dhcHBlciIsICJ0aWQiOiAwLCAic2YiOiA1MjR9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE5MDIsICJ0cyI6IDE5NjQ5MzY4MTkzOC4wMDEsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDUyMTk3OSwgInRzIjogMTk2NDkzNjgxOTkxLjY5OSwgImNwdSI6IDAsICJjb21tIjogInN3YXBwZXIiLCAidGlkIjogMCwgInNmIjogNzd9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDMwNDYwOCwgInRzIjogMTk2NDkzNjgyNDA0LjYxNiwgImNwdSI6IDIsICJjb21tIjogIm5kcm9pZC5zeXN0ZW11aSIsICJ0aWQiOiA5NjUsICJzZiI6IDExOTF9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE5NDEsICJ0cyI6IDE5NjQ5MzY4MjQzOC42NzgsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDI3MjAzOSwgInRzIjogMTk2NDkzNjgyNTI0LjMwMywgImNwdSI6IDIsICJjb21tIjogIm5kcm9pZC5zeXN0ZW11aSIsICJ0aWQiOiA5NjUsICJzZiI6IDI0fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAyNjg1NTMsICJ0cyI6IDE5NjQ5MzY4MjY0OS45MjgsICJjcHUiOiAyLCAiY29tbSI6ICJzd2FwcGVyIiwgInRpZCI6IDAsICJzZiI6IDIwNH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMDkwMywgInRzIjogMTk2NDkzNjgyOTM4LjM2NiwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMDc3MiwgInRzIjogMTk2NDkzNjgzNDM3LjMyNCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNjA3MDEzLCAidHMiOiAxOTY0OTM2ODM4NDEuNTQzLCAiY3B1IjogMCwgImNvbW0iOiAiZGhkX2RwYyIsICJ0aWQiOiAxMjUsICJzZiI6IDMwMjF9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzA4NjEsICJ0cyI6IDE5NjQ5MzY4MzkzNi45NTksICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDU0MTYwNSwgInRzIjogMTk2NDkzNjg0MDgwLjEzNywgImNwdSI6IDAsICJjb21tIjogIndwYV9zdXBwbGljYW50IiwgInRpZCI6IDExMDgsICJzZiI6IDMwMjJ9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMjY1MTQsICJ0cyI6IDE5NjQ5MzY4NDA4My42NzgsICJjcHUiOiAzLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDExMDMsICJzZiI6IDEwMjR9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzExMjcsICJ0cyI6IDE5NjQ5MzY4NDQzNy4zNzYsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDQ5MjIwNiwgInRzIjogMTk2NDkzNjg0NjA1LjcwOSwgImNwdSI6IDAsICJjb21tIjogInN3YXBwZXIiLCAidGlkIjogMCwgInNmIjogNzd9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDU1OTU1OCwgInRzIjogMTk2NDkzNjg0ODI0LjgyNCwgImNwdSI6IDAsICJjb21tIjogImRoZF9kcGMiLCAidGlkIjogMTI1LCAic2YiOiAzMDI1fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMDUwMzQ3LCAidHMiOiAxOTY0OTM2ODQ5MjAuNjA1LCAiY3B1IjogMywgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiA5MjQsICJzZiI6IDE4ODd9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzEyMTYsICJ0cyI6IDE5NjQ5MzY4NDkzNS42MDUsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDI3Mn0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTA1MDM0NywgInRzIjogMTk2NDkzNjg1Mzg1LjI0MSwgImNwdSI6IDMsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogOTI0LCAic2YiOiAxNTJ9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzExMTQsICJ0cyI6IDE5NjQ5MzY4NTQzNS4yNDEsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDk5NzUwNywgInRzIjogMTk2NDkzNjg1ODI2LjE3OCwgImNwdSI6IDMsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogOTI0LCAic2YiOiA5MDV9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE2MTcsICJ0cyI6IDE5NjQ5MzY4NTkzNS4wMzIsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDEwMDcwNzMsICJ0cyI6IDE5NjQ5MzY4NjI3MC4zNDUsICJjcHUiOiAzLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDkyNCwgInNmIjogMzAyNn0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTY5MSwgInRzIjogMTk2NDkzNjg2NDM1LjI5MywgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTAyMzg4NSwgInRzIjogMTk2NDkzNjg2NzIyLjQyOCwgImNwdSI6IDMsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogOTI0LCAic2YiOiAzMDI3fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxNzIxLCAidHMiOiAxOTY0OTM2ODY5MzQuNzIsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDEwMzk5NTcsICJ0cyI6IDE5NjQ5MzY4NzE4Mi44OTcsICJjcHUiOiAzLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDkyNCwgInNmIjogMjM1Nn0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTc4MCwgInRzIjogMTk2NDkzNjg3NDM2LjA3NCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTA1MzY4NiwgInRzIjogMTk2NDkzNjg3NjQ3LjQyOCwgImNwdSI6IDMsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogOTI0LCAic2YiOiAyMzI2fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMxODEwLCAidHMiOiAxOTY0OTM2ODc5MzUuNzYyLCAiY3B1IjogMSwgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDE2NjAsICJzZiI6IDE1Mn0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTA2NTIwNSwgInRzIjogMTk2NDkzNjg4MTE3LjUzMiwgImNwdSI6IDMsICJjb21tIjogIi5nbXMucGVyc2lzdGVudCIsICJ0aWQiOiAxNzI5LCAic2YiOiAxMn0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTUzMiwgInRzIjogMTk2NDkzNjg4NDM2LjA3NCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNTU2MTQzLCAidHMiOiAxOTY0OTM2ODg1NzAuMzQ1LCAiY3B1IjogMCwgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDE2OTIsICJzZiI6IDEyMzJ9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDEwNzUzNTYsICJ0cyI6IDE5NjQ5MzY4ODU5MS44NTUsICJjcHUiOiAzLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDkyNCwgInNmIjogMzAyOX0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNjQ1MjU5LCAidHMiOiAxOTY0OTM2ODg4NTUuMTM3LCAiY3B1IjogMCwgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDE2OTIsICJzZiI6IDE1Mn0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTY4MCwgInRzIjogMTk2NDkzNjg4OTM1LjAzMiwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNTc1MzcxLCAidHMiOiAxOTY0OTM2ODkxMTAuMzk3LCAiY3B1IjogMCwgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDE2OTIsICJzZiI6IDEzNzh9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDYyOTY3NCwgInRzIjogMTk2NDkzNjg5Mzg3Ljg0NSwgImNwdSI6IDAsICJjb21tIjogIi5nbXMucGVyc2lzdGVudCIsICJ0aWQiOiAxNjkyLCAic2YiOiAxMn0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTU5MywgInRzIjogMTk2NDkzNjg5NDM0LjA5NSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNzA1Mjk3LCAidHMiOiAxOTY0OTM2ODk2OTkuODI0LCAiY3B1IjogMCwgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDE2OTIsICJzZiI6IDkwNX0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTgwMCwgInRzIjogMTk2NDkzNjg5OTM0LjQwNywgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNzc1ODM3LCAidHMiOiAxOTY0OTM2OTAwNDIuMjcyLCAiY3B1IjogMCwgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDE2OTIsICJzZiI6IDEyMzJ9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDgzNDQ5MiwgInRzIjogMTk2NDkzNjkwNDExLjI4MiwgImNwdSI6IDAsICJjb21tIjogIi5nbXMucGVyc2lzdGVudCIsICJ0aWQiOiAxNjkyLCAic2YiOiAxNTJ9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzIwMzYsICJ0cyI6IDE5NjQ5MzY5MDQzMy43MywgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogODgyMzIxLCAidHMiOiAxOTY0OTM2OTA4MDAuODE0LCAiY3B1IjogMCwgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDE2OTIsICJzZiI6IDMwMzB9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE5MzQsICJ0cyI6IDE5NjQ5MzY5MDkzNC4yNTEsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDkyMTU3NywgInRzIjogMTk2NDkzNjkxMjA5LjQwNywgImNwdSI6IDAsICJjb21tIjogIi5nbXMucGVyc2lzdGVudCIsICJ0aWQiOiAxNjkyLCAic2YiOiAxMDE0fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMyMTI2LCAidHMiOiAxOTY0OTM2OTE0MzQuODc2LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA5NTQxODcsICJ0cyI6IDE5NjQ5MzY5MTYzMC41MDEsICJjcHUiOiAwLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDIyNzcsICJzZiI6IDE1Mn0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMzc0OTE2LCAidHMiOiAxOTY0OTM2OTE2NzguMjYyLCAiY3B1IjogMiwgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiA4MTUsICJzZiI6IDI3MTN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDUxNDczMiwgInRzIjogMTk2NDkzNjkxOTEzLjc4MiwgImNwdSI6IDIsICJjb21tIjogImRoZF9kcGMiLCAidGlkIjogMTI1LCAic2YiOiA3Mjh9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE5ODAsICJ0cyI6IDE5NjQ5MzY5MTkzNy40OCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogOTgwOTYzLCAidHMiOiAxOTY0OTM2OTIwNzYuODAzLCAiY3B1IjogMCwgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDE2OTIsICJzZiI6IDMwMzF9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDEwODM3NzgsICJ0cyI6IDE5NjQ5MzY5MjE4Mi4wNjQsICJjcHUiOiAzLCAiY29tbSI6ICJzd2FwcGVyIiwgInRpZCI6IDAsICJzZiI6IDUyNH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNDA3MDU5LCAidHMiOiAxOTY0OTM2OTIyNTUuNzA5LCAiY3B1IjogMiwgImNvbW0iOiAic3dhcHBlciIsICJ0aWQiOiAwLCAic2YiOiAyMDF9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzE3ODYsICJ0cyI6IDE5NjQ5MzY5MjQzOC43ODIsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDQ2NDQzNywgInRzIjogMTk2NDkzNjkyNDYyLjE2OCwgImNwdSI6IDIsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogMTQxOSwgInNmIjogMjR9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDk1NjA5NSwgInRzIjogMTk2NDkzNjkyNTAzLjkzOSwgImNwdSI6IDAsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogODA4LCAic2YiOiAzODB9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDQ5MTEwOCwgInRzIjogMTk2NDkzNjkyNjc4Ljk5MSwgImNwdSI6IDIsICJjb21tIjogImxta2QiLCAidGlkIjogMTkyLCAic2YiOiAxMDUzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA1Nzg2OTEsICJ0cyI6IDE5NjQ5MzY5MjkzNC45OCwgImNwdSI6IDIsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogMTQxOSwgInNmIjogMjI2MX0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTA2OSwgInRzIjogMTk2NDkzNjkyOTM2LjI4MiwgImNwdSI6IDEsICJjb21tIjogIi5nbXMucGVyc2lzdGVudCIsICJ0aWQiOiAxMzc1LCAic2YiOiAxNDc5fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA2NzMwNDUsICJ0cyI6IDE5NjQ5MzY5MzIzMy42MjYsICJjcHUiOiAyLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDE0MzYsICJzZiI6IDIzODJ9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDk3MDQ1OSwgInRzIjogMTk2NDkzNjkzMzAxLjQzOSwgImNwdSI6IDAsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogMjk3OSwgInNmIjogMTUyfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMwOTUyLCAidHMiOiAxOTY0OTM2OTM0MzcuNTg0LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA3NTMzNDAsICJ0cyI6IDE5NjQ5MzY5MzU2OC42NzgsICJjcHUiOiAyLCAiY29tbSI6ICJzd2FwcGVyIiwgInRpZCI6IDAsICJzZiI6IDIwNH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogOTkwOTYzLCAidHMiOiAxOTY0OTM2OTM3MzkuNTY0LCAiY3B1IjogMCwgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiA4MDIsICJzZiI6IDE1Mn0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTQyNSwgInRzIjogMTk2NDkzNjkzOTM5LjU2NCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogODE2NzIxLCAidHMiOiAxOTY0OTM2OTQwMjIuMzI0LCAiY3B1IjogMiwgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiAxMjAyLCAic2YiOiAxNTJ9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDEwMTgzMTEsICJ0cyI6IDE5NjQ5MzY5NDI4MC43MDksICJjcHUiOiAzLCAiY29tbSI6ICIuZ21zLnBlcnNpc3RlbnQiLCAidGlkIjogMTY5MiwgInNmIjogMzAzMX0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogOTQ0NzQ1LCAidHMiOiAxOTY0OTM2OTQzMTguMjYyLCAiY3B1IjogMCwgImNvbW0iOiAiZGhkX2RwYyIsICJ0aWQiOiAxMjUsICJzZiI6IDcxOH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTEzMiwgInRzIjogMTk2NDkzNjk0NDM2LjkwNywgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogODY2ODg2LCAidHMiOiAxOTY0OTM2OTQ1ODMuMzE0LCAiY3B1IjogMiwgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiAzMTU4NSwgInNmIjogMTUyfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMwNTYxLCAidHMiOiAxOTY0OTM2OTQ5MzUuNjA1LCAiY3B1IjogMSwgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDI3ODk2LCAic2YiOiAyNH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogODc3OTcyLCAidHMiOiAxOTY0OTM2OTQ5NzAuNzA5LCAiY3B1IjogMiwgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiAzMTU4NSwgInNmIjogMTg4NX0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogOTA4NzUxLCAidHMiOiAxOTY0OTM2OTUyNTUuMzk3LCAiY3B1IjogMywgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDE2OTIsICJzZiI6IDE1MTh9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDk2MTQ4NywgInRzIjogMTk2NDkzNjk1MjU1Ljk3LCAiY3B1IjogMCwgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDE1ODEsICJzZiI6IDI1Nzl9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzEzOTEsICJ0cyI6IDE5NjQ5MzY5NTQzOC45MzksICJjcHUiOiAxLCAiY29tbSI6ICIuZ21zLnBlcnNpc3RlbnQiLCAidGlkIjogMzQ5MCwgInNmIjogMTUyfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA4NjYwODcsICJ0cyI6IDE5NjQ5MzY5NTYxNy43OTMsICJjcHUiOiAyLCAiY29tbSI6ICJzd2FwcGVyIiwgInRpZCI6IDAsICJzZiI6IDIwNH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogODIyMjI1LCAidHMiOiAxOTY0OTM2OTU2MjYuOTU5LCAiY3B1IjogMywgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiAzNDM1LCAic2YiOiAzMDM2fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA5NDUxMzUsICJ0cyI6IDE5NjQ5MzY5NTcyNS40NDksICJjcHUiOiAwLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDIyNzYsICJzZiI6IDE1Mn0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMTcwMSwgInRzIjogMTk2NDkzNjk1OTM4Ljk5MSwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNzcyMTYzLCAidHMiOiAxOTY0OTM2OTYwNjkuNTEyLCAiY3B1IjogMywgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDE2OTIsICJzZiI6IDI0fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA4ODk5ODYsICJ0cyI6IDE5NjQ5MzY5NjExNy45NDksICJjcHUiOiAwLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDgwNywgInNmIjogMTUyfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMwNzM2LCAidHMiOiAxOTY0OTM2OTY0MzcuMTY4LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA4OTcyMzIsICJ0cyI6IDE5NjQ5MzY5NjUxNC4xNDcsICJjcHUiOiAwLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDE0MjgsICJzZiI6IDIwfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA4MDU1MDksICJ0cyI6IDE5NjQ5MzY5Njc1Ny4wNjQsICJjcHUiOiAzLCAiY29tbSI6ICIuZ21zLnBlcnNpc3RlbnQiLCAidGlkIjogMTM2MywgInNmIjogMjMyNn0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogOTI3OTg4LCAidHMiOiAxOTY0OTM2OTY5MjYuMDIyLCAiY3B1IjogMCwgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiAyMjc3LCAic2YiOiAxNTJ9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzA3MzYsICJ0cyI6IDE5NjQ5MzY5Njk0MC41MDEsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDg5NzQ2MiwgInRzIjogMTk2NDkzNjk2OTUyLjA2NCwgImNwdSI6IDIsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogMTQxOSwgInNmIjogMjR9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDgxODYwNywgInRzIjogMTk2NDkzNjk3MTI0LjE0NywgImNwdSI6IDMsICJjb21tIjogIi5nbXMucGVyc2lzdGVudCIsICJ0aWQiOiAxMzYzLCAic2YiOiA0NDd9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDk1ODM3OSwgInRzIjogMTk2NDkzNjk3MzU3LjAxMiwgImNwdSI6IDAsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogMjk3OSwgInNmIjogMTJ9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzExODAsICJ0cyI6IDE5NjQ5MzY5NzQ0MC4yOTMsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDg3MjAyNywgInRzIjogMTk2NDkzNjk3NTg2Ljk1OSwgImNwdSI6IDIsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogMTQzNiwgInNmIjogMTUyfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA5ODM5NzUsICJ0cyI6IDE5NjQ5MzY5Nzc5Mi42ODksICJjcHUiOiAwLCAiY29tbSI6ICJzZW5zb3JzLnFjb20iLCAidGlkIjogODE5LCAic2YiOiAyMDE3fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMwMjMwLCAidHMiOiAxOTY0OTM2OTc5MzkuOTI4LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA4MDM4NTcsICJ0cyI6IDE5NjQ5MzY5Nzk0Mi4zNzYsICJjcHUiOiAyLCAiY29tbSI6ICIuZ21zLnBlcnNpc3RlbnQiLCAidGlkIjogMTM2MywgInNmIjogMTkyfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMDAzNjg3LCAidHMiOiAxOTY0OTM2OTgyMzcuMTE2LCAiY3B1IjogMCwgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDE2MzYsICJzZiI6IDEyMzJ9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDc4MjUwOSwgInRzIjogMTk2NDkzNjk4Mjg4LjEwNSwgImNwdSI6IDIsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogMTIwMiwgInNmIjogMTl9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzAzMzQsICJ0cyI6IDE5NjQ5MzY5ODQzOC42NzgsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDgyMjM0MCwgInRzIjogMTk2NDkzNjk4NjUxLjY5OSwgImNwdSI6IDIsICJjb21tIjogIi5nbXMucGVyc2lzdGVudCIsICJ0aWQiOiAxMzYzLCAic2YiOiAzMDM4fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMDIyMzQ4LCAidHMiOiAxOTY0OTM2OTg2ODcuMDEyLCAiY3B1IjogMCwgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiA4MDcsICJzZiI6IDEyNTZ9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzA1NDEsICJ0cyI6IDE5NjQ5MzY5ODkzOC43ODIsICJjcHUiOiAxLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDgwNywgInNmIjogMzAzOX0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNzkwNjczLCAidHMiOiAxOTY0OTM2OTkwMDIuMTY4LCAiY3B1IjogMywgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiAzNDM1LCAic2YiOiAzMDQxfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA4NjgxODYsICJ0cyI6IDE5NjQ5MzY5OTAzNi44NTUsICJjcHUiOiAyLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDE0MTQsICJzZiI6IDg0MX0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTAzODI5NCwgInRzIjogMTk2NDkzNjk5MTUxLjgwMywgImNwdSI6IDAsICJjb21tIjogInN1cmZhY2VmbGluZ2VyIiwgInRpZCI6IDIzNSwgInNmIjogNDh9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDgyNjUzNywgInRzIjogMTk2NDkzNjk5MzY5LjQ1OSwgImNwdSI6IDMsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogMzQzNSwgInNmIjogMTUyfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMwNzQ4LCAidHMiOiAxOTY0OTM2OTk0MzkuMTQ3LCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA5MDg5NjQsICJ0cyI6IDE5NjQ5MzY5OTQzOS40NTksICJjcHUiOiAyLCAiY29tbSI6ICJuZHJvaWQuc3lzdGVtdWkiLCAidGlkIjogOTY1LCAic2YiOiAyNH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTA1MjYxNSwgInRzIjogMTk2NDkzNjk5NjIyLjExNiwgImNwdSI6IDAsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogMTQyOCwgInNmIjogNDUwfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA3NTA3MjcsICJ0cyI6IDE5NjQ5MzY5OTcwMi43OTMsICJjcHUiOiAzLCAiY29tbSI6ICJzeXN0ZW1fc2VydmVyIiwgInRpZCI6IDI5NzgsICJzZiI6IDI0fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiA5NDI4NjMsICJ0cyI6IDE5NjQ5MzY5OTg1NS4wMzIsICJjcHUiOiAyLCAiY29tbSI6ICIuZ21zLnBlcnNpc3RlbnQiLCAidGlkIjogMTM2MywgInNmIjogMTc1NH0sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogMTEzMDk0MCwgInRzIjogMTk2NDkzNjk5OTM4LjgzNCwgImNwdSI6IDEsICJjb21tIjogImlsZWdlZF9wcm9jZXNzMSIsICJ0aWQiOiAxNDEzOCwgInNmIjogM30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogNzg0NjcwLCAidHMiOiAxOTY0OTM3MDAwNTAuMjQxLCAiY3B1IjogMywgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiA4MDcsICJzZiI6IDEyfSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMDYyNjYyLCAidHMiOiAxOTY0OTM3MDAxNTcuMDEyLCAiY3B1IjogMCwgImNvbW0iOiAic3lzdGVtX3NlcnZlciIsICJ0aWQiOiAxNDI4LCAic2YiOiA5Mzh9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDk3MTQ1MSwgInRzIjogMTk2NDkzNzAwMjg4LjM2NiwgImNwdSI6IDIsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogMjk3OSwgInNmIjogMzA0N30sIHsibmFtZSI6ICJjeWNsZXM6SEciLCAid2VpZ2h0IjogODMzNjIxLCAidHMiOiAxOTY0OTM3MDA0MTguODg3LCAiY3B1IjogMywgImNvbW0iOiAiLmdtcy5wZXJzaXN0ZW50IiwgInRpZCI6IDE2OTIsICJzZiI6IDEyMzJ9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDExMzA3NTAsICJ0cyI6IDE5NjQ5MzcwMDQzNi41OTUsICJjcHUiOiAxLCAiY29tbSI6ICJpbGVnZWRfcHJvY2VzczEiLCAidGlkIjogMTQxMzgsICJzZiI6IDN9LCB7Im5hbWUiOiAiY3ljbGVzOkhHIiwgIndlaWdodCI6IDg3OTM5NSwgInRzIjogMTk2NDkzNzAwODEwLjcwOSwgImNwdSI6IDMsICJjb21tIjogInN5c3RlbV9zZXJ2ZXIiLCAidGlkIjogODA0LCAic2YiOiAzMDU0fSwgeyJuYW1lIjogImN5Y2xlczpIRyIsICJ3ZWlnaHQiOiAxMTMwODk4LCAidHMiOiAxOTY0OTM3MDA5MzYuNzUxLCAiY3B1IjogMSwgImNvbW0iOiAiaWxlZ2VkX3Byb2Nlc3MxIiwgInRpZCI6IDE0MTM4LCAic2YiOiAzfV0sICJtZXRhZGF0YSI6IHsibmV0d29yay10eXBlIjogIldpRmkiLCAiZ3B1LWdsLXZlbmRvciI6ICJRdWFsY29tbSIsICJncHUtcHN2ZXIiOiAiMy4wMCIsICJmaWVsZC10cmlhbHMiOiBbIjg1MzM1OWZhLWY3ZGU1YWYxIiwgIjIzNmQ1ZDllLWZlY2ZmZmExIiwgImUwMzZhMTk2LTNmNGExN2RmIiwgIjc3MjA3NzI5LTNmNGExN2RmIiwgIjRiZjk0ZDItMTU2MDY1MjAiLCAiMmEzM2I5MGUtM2Y0YTE3ZGYiLCAiYmEzZjg3ZGEtOTJjYzgxZWMiLCAiNDZkYTNlMDctM2Y0YTE3ZGYiLCAiMWNlOGExOTItM2Y0YTE3ZGYiLCAiM2ZiZTUzNTktM2Y0YTE3ZGYiLCAiNDNkMGRkMWUtM2Y0YTE3ZGYiLCAiMTA2NjdiMjgtZTJiYzQxMjYiLCAiNmNlN2Q3YjUtM2Y0YTE3ZGYiLCAiOTM3MzFkY2EtM2Y0YTE3ZGYiLCAiNjRjYmRmYzItM2Y0YTE3ZGYiLCAiYjc3ODY0NzQtZDkzYTA2MjAiLCAiMTU4YTg3Zi0zZjRhMTdkZiIsICI4NjhiZGE5MC0zZjRhMTdkZiIsICIyMTgyZGNhZS0zN2E1ODk3NSIsICI0ZWEzMDNhNi0zZjRhMTdkZiIsICI4MjZkNmNhYi05NmUzZWYzYyIsICI4YjRkODlhYS0zZjRhMTdkZiIsICIzMGU2NzlmLTNmNGExN2RmIiwgImYyY2IzNjUzLWMyZmUwODYyIiwgIjg2N2M0YzY4LTNmNGExN2RmIiwgImQ3NDc5MTZmLWQ3NDc5MTZmIiwgIjc3ZDBmMTMxLWRmMGM5NzQ3IiwgIjJmNDBmZWI2LTNmNGExN2RmIiwgImRkMTM5YmQ3LTNmNGExN2RmIiwgImZlMDViZTVmLTRhZDYwNTc1Il0sICJwcm9kdWN0LXZlcnNpb24iOiAiQ2hyb21lLzUzLjAuMjc4NC4wIiwgImdwdS12c3ZlciI6ICIzLjAwIiwgInVzZXItYWdlbnQiOiAiTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDYuMDsgTmV4dXMgNSBCdWlsZC9NUkE1OUcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS81My4wLjI3ODQuMCBNb2JpbGUgU2FmYXJpLzUzNy4zNiIsICJvcy1hcmNoIjogImFybXY3bCIsICJvcy12ZXJzaW9uIjogIjYuMC4wIiwgImdwdS1nbC1yZW5kZXJlciI6ICJBZHJlbm8gKFRNKSAzMzAiLCAibnVtLWNwdXMiOiA0LCAiZ3B1LWRyaXZlciI6ICIxMjcuMCIsICJjbG9jay1kb21haW4iOiAiTElOVVhfQ0xPQ0tfTU9OT1RPTklDIiwgInBoeXNpY2FsLW1lbW9yeSI6IDE4NTQsICJjcHUtbW9kZWwiOiAwLCAiY3B1LWZhbWlseSI6IDAsICJoaWdocmVzLXRpY2tzIjogdHJ1ZSwgImNwdS1icmFuZCI6ICJSTXY3IFByb2Nlc3NvciByZXYgMCAodjdsKSIsICJjcHUtc3RlcHBpbmciOiAwLCAib3MtbmFtZSI6ICJBbmRyb2lkIn19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2VfcmVzdWx0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2VfcmVzdWx0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWM3OGY3Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNlX3Jlc3VsdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLScnJ1RyYWNpbmcgYWdlbnQgcmVzdWx0IHdyYXBwZXIgZm9yIHN5c3RyYWNlLgotCi1UaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGNhcHR1cmVkIHRyYWNlIHJlc3VsdHMgZnJvbSBhIHBhcnRpY3VsYXIKLXRvb2wgKGUuZy4gYXRyYWNlLCBmdHJhY2UuKQotJycnCi0KLQotY2xhc3MgVHJhY2VSZXN1bHQob2JqZWN0KToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZV9uYW1lLCByYXdfZGF0YSk6Ci0gICAgc2VsZi5zb3VyY2VfbmFtZSA9IHNvdXJjZV9uYW1lCi0gICAgc2VsZi5yYXdfZGF0YSA9IHJhd19kYXRhCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90cmFjaW5nX2FnZW50cy9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTlkNzc5Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJycnVHJhY2luZyBhZ2VudCBpbnRlcmZhY2UgZm9yIHN5c3RyYWNlLgotCi1UaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gYWdlbnQgdGhhdCBjYXB0dXJlcyB0cmFjZXMgZnJvbSBhIHBhcnRpY3VsYXIKLXRvb2wgKGUuZy4gYXRyYWNlLCBmdHJhY2UuKQotJycnCi0KLSMgVGltZW91dCBpbnRlcnZhbCBjb25zdGFudHMuCi0KLVNUQVJUX1NUT1BfVElNRU9VVCA9IDEwLjAKLUdFVF9SRVNVTFRTX1RJTUVPVVQgPSAzMC4wCi0KLQotY2xhc3MgVHJhY2luZ0NvbmZpZyhvYmplY3QpOgotICAnJydTdG9yZSB0aGUgdHJhY2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGFsbCBTeXN0cmFjZSBhZ2VudHMuIElmIHRoZXJlCi0gIGFyZSBldmVyIGFueSBvcHRpb25zIHRoYXQgYXJlIHRvIGJlIHNoYXJlZCBiZXR3ZWVuIGFsbCBvZiB0aGUgYWdlbnRzLCB0aG9zZQotICBvcHRpb25zIHNob3VsZCBnbyBoZXJlLgotICAnJycKLSAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgIHBhc3MKLQotCi1jbGFzcyBUcmFjaW5nQWdlbnQob2JqZWN0KToKLSAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgIHBhc3MKLQotICBkZWYgU3RhcnRBZ2VudFRyYWNpbmcoc2VsZiwgY29uZmlnLCB0aW1lb3V0PU5vbmUpOgotICAgICcnJ1N0YXJ0cyBydW5uaW5nIHRoZSB0cmFjZSBmb3IgdGhpcyBhZ2VudC4gU3RvcHMgd2l0aCB0aW1lb3V0IGlmCi0gICAgbm90IGNvbXBsZXRlZCB3aXRoaW4gdGltZW91dCBpbnRlcnZhbC4KLQotICAgIEFyZ3M6Ci0gICAgICAgIGNvbmZpZzogVHJhY2luZ0NvbmZpZyBzdWJjbGFzcyBjb250YWluaW5nIGFnZW50LXNwZWNpZmljIG9wdGlvbnMKLSAgICAgICAgICAgICAgICBhbmQgY2F0ZWdvcmllcy4KLSAgICAgICAgdGltZW91dDogVGltZW91dCBpbnRlcnZhbCBpbiBzZWNvbmRzLgotCi0gICAgUmV0dXJuczoKLSAgICAgICAgQm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZSB0cmFjZSBzdGFydGVkIHN1Y2Nlc3NmdWxseS4KLSAgICAnJycKLSAgICBwYXNzCi0KLSAgZGVmIFN0b3BBZ2VudFRyYWNpbmcoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAnJydTdG9wcyBydW5uaW5nIHRoZSB0cmFjZSBmb3IgdGhpcyBhZ2VudCBhbmQgcmV0dXJucyBpbW1lZGlhdGVseS4KLSAgICBTdG9wcyB3aXRoIHRpbWVvdXQgaWYgbm90IGNvbXBsZXRlZCB3aXRoaW4gdGltZW91dCBpbnRlcnZhbC4KLQotICAgIEFyZ3M6Ci0gICAgICAgIHRpbWVvdXQ6IFRpbWVvdXQgaW50ZXJ2YWwgaW4gc2Vjb25kcy4KLQotICAgIFJldHVybnM6Ci0gICAgICAgIEJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgdHJhY2Ugc3RhcnRlZCBzdWNjZXNzZnVsbHkuCi0gICAgJycnCi0gICAgcGFzcwotCi0gIGRlZiBTdXBwb3J0c0V4cGxpY2l0Q2xvY2tTeW5jKHNlbGYpOgotICAgICcnJ0ZpbmQgb3V0IGlmIHRoaXMgYWdlbnQgc3VwcG9ydHMgcmVjb3JkaW5nIG9mIGNsb2NrIHN5bmMgbWFya2Vycy4KLQotICAgIFJldHVybnM6Ci0gICAgICAgIEJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgYWdlbnQgc3VwcG9ydHMgcmVjb3JkaW5nCi0gICAgICAgIG9mIGNsb2NrIHN5bmMgbWFya2Vycy4KLSAgICAnJycKLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgZGVmIFJlY29yZENsb2NrU3luY01hcmtlcihzZWxmLCBzeW5jX2lkLCBkaWRfcmVjb3JkX3N5bmNfbWFya2VyX2NhbGxiYWNrKToKLSAgICAnJydSZWNvcmQgYSBjbG9jayBzeW5jIG1hcmtlciBmb3IgdGhpcyBhZ2VudC4KLQotICAgIEFyZ3M6Ci0gICAgICAgIHN5bmNfaWQ6IENsb2NrIHN5bmMgSUQgc3RyaW5nLgotICAgICAgICBkaWRfcmVjb3JkX3N5bmNfbWFya2VyX2NhbGxiYWNrOiBDYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsCi0gICAgICAgICh3aXRoIGFyZ3VtZW50czogdGltZXN0YW1wIGFuZCBzeW5jX2lkKSBhZnRlciB0aGUKLSAgICAgICAgY2xvY2sgc3luYyBtYXJrZXIgaXMgcmVjb3JkZWQuCi0gICAgJycnCi0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gIGRlZiBHZXRSZXN1bHRzKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgJycnR2V0IHRoZSBjb21wbGV0ZWQgdHJhY2UgZm9yIHRoaXMgYWdlbnQsIHN0b3BwaW5nIHdpdGggdGltZW91dAotCi0gICAgR2V0IHRoZSBjb21wbGV0ZWQgdHJhY2UgZm9yIHRoaXMgYWdlbnQuIENhbGwgb25seSBhZnRlcgotICAgIFN0b3BBZ2VudFRyYWNpbmcgaXMgZG9uZS4gVGhpcyBmdW5jdGlvbiBibG9ja3MgdW50aWwgdGhlIHJlc3VsdAotICAgIGlzIGNvbGxlY3RlZCAobm90ZTsgdGhpcyBtYXkgdGFrZSBzZXZlcmFsIHNlY29uZHMpLiBTdG9wcyB3aXRoIHRpbWVvdXQKLSAgICBpZiBub3QgY29tcGxldGVkIHdpdGhpbiBzZWxmLl9vcHRpb25zLmNvbGxlY3Rpb25fdGltZW91dCBzZWNvbmRzLgotCi0gICAgQXJnczoKLSAgICAgICAgdGltZW91dDogVGltZW91dCBpbnRlcnZhbCBpbiBzZWNvbmRzLgotICAgIFJldHVybnM6Ci0gICAgICAgIENvbXBsZXRlZCB0cmFjZSBmb3IgdGhpcyBhZ2VudC4KLSAgICAnJycKLSAgICBwYXNzCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90cmFjaW5nX2FnZW50cy9hZ2VudHNfdW5pdHRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90cmFjaW5nX2FnZW50cy9hZ2VudHNfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNzFjYWYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvYWdlbnRzX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdXRpbAotCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkLnNkayBpbXBvcnQgaW50ZW50Ci1mcm9tIGRldmlsLmFuZHJvaWQuc2RrIGltcG9ydCBrZXlldmVudAotCi0KLWNsYXNzIEJhc2VBZ2VudFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgZGV2aWNlcyA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscy5IZWFsdGh5RGV2aWNlcygpCi0gICAgc2VsZi5icm93c2VyID0gJ3N0YWJsZScKLSAgICBzZWxmLnBhY2thZ2VfaW5mbyA9IHV0aWwuZ2V0X3N1cHBvcnRlZF9icm93c2VycygpW3NlbGYuYnJvd3Nlcl0KLSAgICBzZWxmLmRldmljZSA9IGRldmljZXNbMF0KLQotICAgIGN1cnJfYnJvd3NlciA9IHNlbGYuR2V0Q2hyb21lUHJvY2Vzc0lEKCkKLSAgICBpZiBjdXJyX2Jyb3dzZXIgPT0gTm9uZToKLSAgICAgIHNlbGYuU3RhcnRCcm93c2VyKCkKLQotICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgIyBTdG9wIHRoZSBicm93c2VyIGFmdGVyIGVhY2ggdGVzdCB0byBlbnN1cmUgdGhhdCBpdCBkb2Vzbid0IGludGVyZmVyZQotICAgICMgd2l0aCBzdWJzZXF1ZW50IHRlc3RzLCBlLmcuIGJ5IGhvbGRpbmcgdGhlIGRldnRvb2xzIHNvY2tldCBvcGVuLgotICAgIHNlbGYuZGV2aWNlLkZvcmNlU3RvcChzZWxmLnBhY2thZ2VfaW5mby5wYWNrYWdlKQotCi0gIGRlZiBTdGFydEJyb3dzZXIoc2VsZik6Ci0gICAgIyBUdXJuIG9uIHRoZSBkZXZpY2Ugc2NyZWVuLgotICAgIHNlbGYuZGV2aWNlLlNldFNjcmVlbihUcnVlKQotCi0gICAgIyBVbmxvY2sgZGV2aWNlLgotICAgIHNlbGYuZGV2aWNlLlNlbmRLZXlFdmVudChrZXlldmVudC5LRVlDT0RFX01FTlUpCi0KLSAgICAjIFN0YXJ0IGJyb3dzZXIuCi0gICAgc2VsZi5kZXZpY2UuU3RhcnRBY3Rpdml0eSgKLSAgICAgIGludGVudC5JbnRlbnQoYWN0aXZpdHk9c2VsZi5wYWNrYWdlX2luZm8uYWN0aXZpdHksCi0gICAgICAgICAgICAgICAgICAgIHBhY2thZ2U9c2VsZi5wYWNrYWdlX2luZm8ucGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgZGF0YT0nYWJvdXQ6YmxhbmsnLAotICAgICAgICAgICAgICAgICAgICBleHRyYXM9eydjcmVhdGVfbmV3X3RhYic6IFRydWV9KSwKLSAgICAgIGJsb2NraW5nPVRydWUsIGZvcmNlX3N0b3A9VHJ1ZSkKLQotICBkZWYgR2V0Q2hyb21lUHJvY2Vzc0lEKHNlbGYpOgotICAgIHJldHVybiBzZWxmLmRldmljZS5HZXRBcHBsaWNhdGlvblBpZHMoCi0gICAgICAgIHNlbGYucGFja2FnZV9pbmZvLnBhY2thZ2UsIGF0X21vc3Rfb25lPVRydWUpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90cmFjaW5nX2FnZW50cy9hbmRyb2lkX3Byb2Nlc3NfZGF0YV9hZ2VudC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL2FuZHJvaWRfcHJvY2Vzc19kYXRhX2FnZW50LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODA5YTBjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL2FuZHJvaWRfcHJvY2Vzc19kYXRhX2FnZW50LnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIFRyYWNpbmcgYWdlbnQgdGhhdCBjYXB0dXJlcyBmcmllbmRseSBwcm9jZXNzIGFuZCB0aHJlYWQgZGF0YSAtIG5hbWVzLCBwaWRzIGFuZAotIyB0aWRzIGFuZCBuYW1lcywgZXRjIHRvIGVucmljaCBkaXNwbGF5IGluIHRoZSB0cmFjZSB2aWV3ZXIuIENhcHR1cmVzIHNuYXBzaG90cwotIyBvZiB0aGUgb3V0cHV0IG9mICdwcycgb24gdGhlIGRldmljZSBhdCBpbnRlcnZhbHMuCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgcHlfdXRpbHMKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdXRpbHMKLWZyb20gZGV2aWwuYW5kcm9pZC5kZXZpY2VfZXJyb3JzIGltcG9ydCBBZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcgotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2luZ19hZ2VudHMKLWZyb20gc3lzdHJhY2UgaW1wb3J0IHRyYWNlX3Jlc3VsdAotCi0jIExlZnRtb3N0IG91dHB1dCBjb2x1bW5zIG1hdGNoIHRob3NlIHVzZWQgb24gbGVnYWN5IGRldmljZXMuCi0jIEdldCB0aHJlYWQgbmFtZXMgc2VwYXJhdGVseSBhcyB0aGVyZSBtYXkgYmUgc3BhY2VzIHRoYXQgYnJlYWtzIGNvbAotIyBzcGxpdHRpbmcuCi0jIFRPRE8oYmVubSk6IFJlZmFjdG9yIGRldmljZV91dGlscy5HZXRQaWRzIHRvIGdldCB0aHJlYWRzIGFuZCB1c2UgdGhhdCBoZXJlLgotUFNfQ09NTUFORF9QUk9DID0gInBzIC1BIC1vIFVTRVIsUElELFBQSUQsVlNJWkUsUlNTLFdDSEFOLEFERFI9UEMsUyxOQU1FLENPTU0iIFwKLSAgICAiJiYgcHMgLUFUIC1vIFVTRVIsUElELFRJRCxDTUQiCi0KLSMgRmFsbGJhY2sgZm9yIG9sZCBkZXZpY2VzLgotUFNfQ09NTUFORF9QUk9DX0xFR0FDWSA9ICJwcyAmJiBwcyAtdCIKLQotIyBpZGVudGlmeSB0aGlzIGFzIHRyYWNlIG9mIHRocmVhZCAvIHByb2Nlc3Mgc3RhdGUKLVRSQUNFX0hFQURFUiA9ICdQUk9DRVNTIERVTVBcbicKLQotZGVmIHRyeV9jcmVhdGVfYWdlbnQoY29uZmlnKToKLSAgaWYgY29uZmlnLnRhcmdldCAhPSAnYW5kcm9pZCc6Ci0gICAgcmV0dXJuIE5vbmUKLSAgaWYgY29uZmlnLmZyb21fZmlsZSBpcyBub3QgTm9uZToKLSAgICByZXR1cm4gTm9uZQotICBpZiBjb25maWcucHJvY2Vzc19kdW1wX2VuYWJsZToKLSAgICAjIFNpbmNlIEF0cmFjZVByb2Nlc3NEdW1wQWdlbnQgd2FzIGVuYWJsZWQgaXQncyB1bm5lY2Vzc2FyeSB0byBjb2xsZWN0IHBzCi0gICAgIyBkYXRhIGJlY2F1c2UgZWFjaCBwcm9jZXNzIG1lbW9yeSBkdW1wIHVwZGF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgcHJvY2Vzc2VzCi0gICAgIyBhbmQgdGhlaXIgdGhyZWFkcy4gSXQncyBtb3JlIGNvbXBsZXRlIGRhdGEgdGhhbiB0d28gcHMgc25hcHNob3RzIGZvciBhbgotICAgICMgZW50aXJlIHRyYWNlLiBIb3dldmVyLCB0aGF0IGFnZW50IGlzbid0IGVuYWJsZWQgYnkgZGVmYXVsdC4KLSAgICByZXR1cm4gTm9uZQotICByZXR1cm4gQW5kcm9pZFByb2Nlc3NEYXRhQWdlbnQoKQotCi1kZWYgZ2V0X2NvbmZpZyhvcHRpb25zKToKLSAgcmV0dXJuIG9wdGlvbnMKLQotY2xhc3MgQW5kcm9pZFByb2Nlc3NEYXRhQWdlbnQodHJhY2luZ19hZ2VudHMuVHJhY2luZ0FnZW50KToKLSAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgIHN1cGVyKEFuZHJvaWRQcm9jZXNzRGF0YUFnZW50LCBzZWxmKS5fX2luaXRfXygpCi0gICAgc2VsZi5fdHJhY2VfZGF0YSA9ICIiCi0gICAgc2VsZi5fZGV2aWNlID0gTm9uZQotCi0gIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICByZXR1cm4gJ2FuZHJvaWRfcHJvY2Vzc19kYXRhJwotCi0gIEBweV91dGlscy5UaW1lb3V0KHRyYWNpbmdfYWdlbnRzLlNUQVJUX1NUT1BfVElNRU9VVCkKLSAgZGVmIFN0YXJ0QWdlbnRUcmFjaW5nKHNlbGYsIGNvbmZpZywgdGltZW91dD1Ob25lKToKLSAgICBzZWxmLl9kZXZpY2UgPSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMoY29uZmlnLmRldmljZV9zZXJpYWxfbnVtYmVyKQotICAgIHNlbGYuX3RyYWNlX2RhdGEgKz0gc2VsZi5fZ2V0X3Byb2Nlc3Nfc25hcHNob3QoKQotICAgIHJldHVybiBUcnVlCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuU1RBUlRfU1RPUF9USU1FT1VUKQotICBkZWYgU3RvcEFnZW50VHJhY2luZyhzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgIHNlbGYuX3RyYWNlX2RhdGEgKz0gc2VsZi5fZ2V0X3Byb2Nlc3Nfc25hcHNob3QoKQotICAgIHJldHVybiBUcnVlCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuR0VUX1JFU1VMVFNfVElNRU9VVCkKLSAgZGVmIEdldFJlc3VsdHMoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICByZXN1bHQgPSBUUkFDRV9IRUFERVIgKyBzZWxmLl90cmFjZV9kYXRhCi0gICAgcmV0dXJuIHRyYWNlX3Jlc3VsdC5UcmFjZVJlc3VsdCgnYW5kcm9pZFByb2Nlc3NEdW1wJywgcmVzdWx0KQotCi0gIGRlZiBTdXBwb3J0c0V4cGxpY2l0Q2xvY2tTeW5jKHNlbGYpOgotICAgIHJldHVybiBGYWxzZQotCi0gIGRlZiBSZWNvcmRDbG9ja1N5bmNNYXJrZXIoc2VsZiwgc3luY19pZCwgZGlkX3JlY29yZF9zeW5jX21hcmtlcl9jYWxsYmFjayk6Ci0gICAgcGFzcwotCi0gIGRlZiBfZ2V0X3Byb2Nlc3Nfc25hcHNob3Qoc2VsZik6Ci0gICAgdXNlX2xlZ2FjeSA9IEZhbHNlCi0gICAgdHJ5OgotICAgICAgZHVtcCA9IHNlbGYuX2RldmljZS5SdW5TaGVsbENvbW1hbmQoIFwKLSAgICAgICAgICBQU19DT01NQU5EX1BST0MsIGNoZWNrX3JldHVybj1UcnVlLCBhc19yb290PVRydWUsIHNoZWxsPVRydWUpCi0gICAgZXhjZXB0IEFkYlNoZWxsQ29tbWFuZEZhaWxlZEVycm9yOgotICAgICAgdXNlX2xlZ2FjeSA9IFRydWUKLQotICAgICMgQ2hlY2sgbGVuZ3RoIG9mIDIgYXMgd2UgZXhlY3V0ZSB0d28gY29tbWFuZHMsIHdoaWNoIGluIGNhc2Ugb2YgZmFpbHVyZQotICAgICMgb24gb2xkIGRldmljZXMgb3V0cHV0IDEgbGluZSBlYWNoLgotICAgIGlmIHVzZV9sZWdhY3kgb3IgbGVuKGR1bXApID09IDI6Ci0gICAgICBsb2dnaW5nLmRlYnVnKCdDb3VsZG5cJ3QgcGFyc2UgcHMgZHVtcCwgdHJ5aW5nIGxlZ2FjeSBtZXRob2QgLi4uJykKLSAgICAgIGR1bXAgPSBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKCBcCi0gICAgICAgICAgUFNfQ09NTUFORF9QUk9DX0xFR0FDWSwgY2hlY2tfcmV0dXJuPVRydWUsIGFzX3Jvb3Q9VHJ1ZSwgc2hlbGw9VHJ1ZSkKLSAgICAgIGlmIGxlbihkdW1wKSA9PSAyOgotICAgICAgICBsb2dnaW5nLmVycm9yKCdVbmFibGUgdG8gZXh0cmFjdCBwcm9jZXNzIGRhdGEhJykKLSAgICAgICAgcmV0dXJuICIiCi0KLSAgICByZXR1cm4gJ1xuJy5qb2luKGR1bXApICsgJ1xuJwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvYXRyYWNlX2FnZW50LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvYXRyYWNlX2FnZW50LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2VkM2ZhLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL2F0cmFjZV9hZ2VudC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ1NyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IHBsYXRmb3JtCi1pbXBvcnQgcHlfdXRpbHMKLWltcG9ydCByZQotaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHpsaWIKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdXRpbHMKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IHZlcnNpb25fY29kZXMKLWZyb20gcHlfdHJhY2VfZXZlbnQgaW1wb3J0IHRyYWNlX3RpbWUgYXMgdHJhY2VfdGltZV9tb2R1bGUKLWZyb20gc3lzdHJhY2UgaW1wb3J0IHRyYWNlX3Jlc3VsdAotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2luZ19hZ2VudHMKLWZyb20gc3lzdHJhY2UgaW1wb3J0IHV0aWwKLQotIyBUZXh0IHRoYXQgQURCIHNlbmRzLCBidXQgZG9lcyBub3QgbmVlZCB0byBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuCi1BREJfSUdOT1JFX1JFR0VYUCA9IHInXmNhcHR1cmluZyB0cmFjZVwuXC5cLiBkb25lfF5jYXB0dXJpbmcgdHJhY2VcLlwuXC4nCi0jIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IG9uIG91dHB1dCBmcm9tIEFEQi4KLUFEQl9TVERPVVRfUkVBRF9USU1FT1VUID0gMC4yCi0jIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZvciBsYXJnZSBvdXRwdXQgZnJvbSBBREIuCi1BREJfTEFSR0VfT1VUUFVUX1RJTUVPVVQgPSA2MDAKLSMgVGhlIGFkYiBzaGVsbCBjb21tYW5kIHRvIGluaXRpYXRlIGEgdHJhY2UuCi1BVFJBQ0VfQkFTRV9BUkdTID0gWydhdHJhY2UnXQotIyBJZiBhIGN1c3RvbSBsaXN0IG9mIGNhdGVnb3JpZXMgaXMgbm90IHNwZWNpZmllZCwgdHJhY2VzIHdpbGwgaW5jbHVkZQotIyB0aGVzZSBjYXRlZ29yaWVzIChpZiBhdmFpbGFibGUgb24gdGhlIGRldmljZSkuCi1ERUZBVUxUX0NBVEVHT1JJRVMgPSAnc2NoZWQsZnJlcSxnZngsdmlldyxkYWx2aWssd2VidmlldywnXAotICAgICAgICAgICAgICAgICAgICAgJ2lucHV0LGRpc2ssYW0sd20scnMsYmluZGVyX2RyaXZlcicKLSMgVGhlIGNvbW1hbmQgdG8gbGlzdCB0cmFjZSBjYXRlZ29yaWVzLgotTElTVF9DQVRFR09SSUVTX0FSR1MgPSBBVFJBQ0VfQkFTRV9BUkdTICsgWyctLWxpc3RfY2F0ZWdvcmllcyddCi0jIE1pbmltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiBkaXNwbGF5aW5nIHN0YXR1cyB1cGRhdGVzLgotTUlOX1RJTUVfQkVUV0VFTl9TVEFUVVNfVVBEQVRFUyA9IDAuMgotIyBBREIgc2VuZHMgdGhpcyB0ZXh0IHRvIGluZGljYXRlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRyYWNlIGRhdGEuCi1UUkFDRV9TVEFSVF9SRUdFWFAgPSByJ1RSQUNFXDonCi0jIFBsYWluLXRleHQgdHJhY2UgZGF0YSBzaG91bGQgYWx3YXlzIHN0YXJ0IHdpdGggdGhpcyBzdHJpbmcuCi1UUkFDRV9URVhUX0hFQURFUiA9ICcjIHRyYWNlcicKLV9GSVhfTUlTU0lOR19UR0lEUyA9IFRydWUKLV9GSVhfQ0lSQ1VMQVJfVFJBQ0VTID0gVHJ1ZQotCi0KLWRlZiBsaXN0X2NhdGVnb3JpZXMoY29uZmlnKToKLSAgIiIiTGlzdCB0aGUgcG9zc2libGUgdHJhY2UgZXZlbnQgY2F0ZWdvcmllcy4KLQotICBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRoZSB0cmFjaW5nIGNvbmZpZyBzaW5jZSBpdCBuZWVkcyB0byBnZXQgdGhlIHNlcmlhbAotICBudW1iZXIgb2YgdGhlIGRldmljZSB0byBzZW5kIGEgY29tbWFuZCB0by4KLQotICBBcmdzOgotICAgICAgY29uZmlnOiBUcmFjaW5nIGNvbmZpZy4KLSAgIiIiCi0gIGRldnV0aWxzID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKGNvbmZpZy5kZXZpY2Vfc2VyaWFsX251bWJlcikKLSAgY2F0ZWdvcmllcyA9IGRldnV0aWxzLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgIExJU1RfQ0FURUdPUklFU19BUkdTLCBjaGVja19yZXR1cm49VHJ1ZSkKLQotICBkZXZpY2Vfc2RrX3ZlcnNpb24gPSB1dGlsLmdldF9kZXZpY2Vfc2RrX3ZlcnNpb24oKQotICBpZiBkZXZpY2Vfc2RrX3ZlcnNpb24gPCB2ZXJzaW9uX2NvZGVzLk1BUlNITUFMTE9XOgotICAgICMgd29yayBhcm91bmQgcGxhdGZvcm0gYnVnIHdoZXJlIHJzIHRhZyB3b3VsZCBjb3JydXB0IHRyYWNlIHVudGlsIE0oQXBpMjMpCi0gICAgY2F0ZWdvcmllcyA9IFtjIGZvciBjIGluIGNhdGVnb3JpZXMgaWYgbm90IHJlLm1hdGNoKHInXlxzKnJzXHMqLScsIGMpXQotCi0gIHByaW50ICdcbicuam9pbihjYXRlZ29yaWVzKQotICBpZiBub3QgZGV2dXRpbHMuSGFzUm9vdCgpOgotICAgIHByaW50ICdcbk5PVEU6IG1vcmUgY2F0ZWdvcmllcyBtYXkgYmUgYXZhaWxhYmxlIHdpdGggYWRiIHJvb3RcbicKLQotCi1kZWYgZ2V0X2F2YWlsYWJsZV9jYXRlZ29yaWVzKGNvbmZpZywgZGV2aWNlX3Nka192ZXJzaW9uKToKLSAgIiIiR2V0cyB0aGUgbGlzdCBvZiBhdHJhY2UgY2F0ZWdvcmllcyBhdmFpbGFibGUgZm9yIHRyYWNpbmcuCi0gIEFyZ3M6Ci0gICAgICBjb25maWc6IFRyYWNpbmcgY29uZmlnLgotICAgICAgZGV2aWNlX3Nka192ZXJzaW9uOiBTZGsgdmVyc2lvbiBpbnQgb2YgZGV2aWNlIHRvIGJlIHF1ZXJpZWQuCi0gICIiIgotICBkZXZ1dGlscyA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscyhjb25maWcuZGV2aWNlX3NlcmlhbF9udW1iZXIpCi0gIGNhdGVnb3JpZXNfb3V0cHV0ID0gZGV2dXRpbHMuUnVuU2hlbGxDb21tYW5kKAotICAgICAgTElTVF9DQVRFR09SSUVTX0FSR1MsIGNoZWNrX3JldHVybj1UcnVlKQotICBjYXRlZ29yaWVzID0gW2Muc3BsaXQoJy0nKVswXS5zdHJpcCgpIGZvciBjIGluIGNhdGVnb3JpZXNfb3V0cHV0XQotCi0gIGlmIGRldmljZV9zZGtfdmVyc2lvbiA8IHZlcnNpb25fY29kZXMuTUFSU0hNQUxMT1c6Ci0gICAgIyB3b3JrIGFyb3VuZCBwbGF0Zm9ybSBidWcgd2hlcmUgcnMgdGFnIHdvdWxkIGNvcnJ1cHQgdHJhY2UgdW50aWwgTShBcGkyMykKLSAgICBjYXRlZ29yaWVzID0gW2MgZm9yIGMgaW4gY2F0ZWdvcmllcyBpZiBjICE9ICdycyddCi0gIHJldHVybiBjYXRlZ29yaWVzCi0KLQotZGVmIHRyeV9jcmVhdGVfYWdlbnQoY29uZmlnKToKLSAgIiIiQ3JlYXRlIGFuIEF0cmFjZSBhZ2VudC4KLQotICBBcmdzOgotICAgICAgY29uZmlnOiBDb21tYW5kIGxpbmUgY29uZmlnLgotICAiIiIKLSAgaWYgY29uZmlnLnRhcmdldCAhPSAnYW5kcm9pZCc6Ci0gICAgcmV0dXJuIE5vbmUKLSAgaWYgY29uZmlnLmZyb21fZmlsZSBpcyBub3QgTm9uZToKLSAgICByZXR1cm4gTm9uZQotCi0gIGlmIG5vdCBjb25maWcuYXRyYWNlX2NhdGVnb3JpZXM6Ci0gICAgcmV0dXJuIE5vbmUKLQotICAjIENoZWNrIGRldmljZSBTREsgdmVyc2lvbi4KLSAgZGV2aWNlX3Nka192ZXJzaW9uID0gdXRpbC5nZXRfZGV2aWNlX3Nka192ZXJzaW9uKCkKLSAgaWYgZGV2aWNlX3Nka192ZXJzaW9uIDwgdmVyc2lvbl9jb2Rlcy5KRUxMWV9CRUFOX01SMjoKLSAgICBwcmludCAoJ0RldmljZSBTREsgdmVyc2lvbnMgPCAxOCAoSmVsbHliZWFuIE1SMikgbm90IHN1cHBvcnRlZC5cbicKLSAgICAgICAgICAgJ1lvdXIgZGV2aWNlIFNESyB2ZXJzaW9uIGlzICVkLicgJSBkZXZpY2Vfc2RrX3ZlcnNpb24pCi0gICAgcmV0dXJuIE5vbmUKLQotICByZXR1cm4gQXRyYWNlQWdlbnQoZGV2aWNlX3Nka192ZXJzaW9uKQotCi1kZWYgX2NvbnN0cnVjdF9leHRyYV9hdHJhY2VfYXJncyhjb25maWcsIGNhdGVnb3JpZXMpOgotICAiIiJDb25zdHJ1Y3QgZXh0cmEgYXJndW1lbnRzICgtYSwgLWssIGNhdGVnb3JpZXMpIGZvciBhdHJhY2UgY29tbWFuZC4KLQotICBBcmdzOgotICAgICAgY29uZmlnOiBUcmFjaW5nIGNvbmZpZy4KLSAgIiIiCi0gIGV4dHJhX2FyZ3MgPSBbXQotCi0gIGlmIGNvbmZpZy5hcHBfbmFtZSBpcyBub3QgTm9uZToKLSAgICBleHRyYV9hcmdzLmV4dGVuZChbJy1hJywgY29uZmlnLmFwcF9uYW1lXSkKLQotICBpZiBjb25maWcua2Z1bmNzIGlzIG5vdCBOb25lOgotICAgIGV4dHJhX2FyZ3MuZXh0ZW5kKFsnLWsnLCBjb25maWcua2Z1bmNzXSkKLQotICBleHRyYV9hcmdzLmV4dGVuZChjYXRlZ29yaWVzKQotICByZXR1cm4gZXh0cmFfYXJncwotCi1kZWYgX2NvbnN0cnVjdF9hdHJhY2VfYXJncyhjb25maWcsIGNhdGVnb3JpZXMpOgotICAiIiJCdWlsZHMgdGhlIGNvbW1hbmQgdXNlZCB0byBpbnZva2UgYSB0cmFjZSBwcm9jZXNzLgotICBSZXR1cm5zOgotICAgIEEgdHVwbGUgd2hlcmUgdGhlIGZpcnN0IGVsZW1lbnQgaXMgYW4gYXJyYXkgb2YgY29tbWFuZCBhcmd1bWVudHMsIGFuZAotICAgIHRoZSBzZWNvbmQgZWxlbWVudCBpcyBhIGJvb2xlYW4gd2hpY2ggd2lsbCBiZSB0cnVlIGlmIHRoZSBjb21tYW5kIHdpbGwKLSAgICBzdHJlYW0gdHJhY2UgZGF0YS4KLSAgIiIiCi0gIGF0cmFjZV9hcmdzID0gQVRSQUNFX0JBU0VfQVJHU1s6XQotCi0gIGlmIGNvbmZpZy5jb21wcmVzc190cmFjZV9kYXRhOgotICAgIGF0cmFjZV9hcmdzLmV4dGVuZChbJy16J10pCi0KLSAgaWYgKGNvbmZpZy50cmFjZV90aW1lIGlzIG5vdCBOb25lKSBhbmQgKGNvbmZpZy50cmFjZV90aW1lID4gMCk6Ci0gICAgYXRyYWNlX2FyZ3MuZXh0ZW5kKFsnLXQnLCBzdHIoY29uZmlnLnRyYWNlX3RpbWUpXSkKLQotICBpZiAoY29uZmlnLnRyYWNlX2J1Zl9zaXplIGlzIG5vdCBOb25lKSBhbmQgKGNvbmZpZy50cmFjZV9idWZfc2l6ZSA+IDApOgotICAgIGF0cmFjZV9hcmdzLmV4dGVuZChbJy1iJywgc3RyKGNvbmZpZy50cmFjZV9idWZfc2l6ZSldKQotCi0gIGVsaWYgJ3NjaGVkJyBpbiBjYXRlZ29yaWVzOgotICAgICMgJ3NjaGVkJyBpcyBhIGhpZ2gtdm9sdW1lIHRhZywgZG91YmxlIHRoZSBkZWZhdWx0IGJ1ZmZlciBzaXplCi0gICAgIyB0byBhY2NvbW1vZGF0ZSB0aGF0Ci0gICAgYXRyYWNlX2FyZ3MuZXh0ZW5kKFsnLWInLCAnNDA5NiddKQotICBleHRyYV9hcmdzID0gX2NvbnN0cnVjdF9leHRyYV9hdHJhY2VfYXJncyhjb25maWcsIGNhdGVnb3JpZXMpCi0KLSAgYXRyYWNlX2FyZ3MuZXh0ZW5kKGV4dHJhX2FyZ3MpCi0gIHJldHVybiBhdHJhY2VfYXJncwotCi0KLWNsYXNzIEF0cmFjZUFnZW50KHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdBZ2VudCk6Ci0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGRldmljZV9zZGtfdmVyc2lvbik6Ci0gICAgc3VwZXIoQXRyYWNlQWdlbnQsIHNlbGYpLl9faW5pdF9fKCkKLSAgICBzZWxmLl9kZXZpY2Vfc2RrX3ZlcnNpb24gPSBkZXZpY2Vfc2RrX3ZlcnNpb24KLSAgICBzZWxmLl9hZGIgPSBOb25lCi0gICAgc2VsZi5fdHJhY2VfZGF0YSA9IE5vbmUKLSAgICBzZWxmLl90cmFjZXJfYXJncyA9IE5vbmUKLSAgICBzZWxmLl9jb2xsZWN0aW9uX3RocmVhZCA9IE5vbmUKLSAgICBzZWxmLl9kZXZpY2VfdXRpbHMgPSBOb25lCi0gICAgc2VsZi5fZGV2aWNlX3NlcmlhbF9udW1iZXIgPSBOb25lCi0gICAgc2VsZi5fY29uZmlnID0gTm9uZQotICAgIHNlbGYuX2NhdGVnb3JpZXMgPSBOb25lCi0KLSAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgIHJldHVybiAnYXRyYWNlJwotCi0gIEBweV91dGlscy5UaW1lb3V0KHRyYWNpbmdfYWdlbnRzLlNUQVJUX1NUT1BfVElNRU9VVCkKLSAgZGVmIFN0YXJ0QWdlbnRUcmFjaW5nKHNlbGYsIGNvbmZpZywgdGltZW91dD1Ob25lKToKLSAgICBhc3NlcnQgY29uZmlnLmF0cmFjZV9jYXRlZ29yaWVzLCAnQXRyYWNlIGNhdGVnb3JpZXMgYXJlIG1pc3NpbmchJwotICAgIHNlbGYuX2NvbmZpZyA9IGNvbmZpZwotICAgIHNlbGYuX2NhdGVnb3JpZXMgPSBjb25maWcuYXRyYWNlX2NhdGVnb3JpZXMKLSAgICBpZiBpc2luc3RhbmNlKHNlbGYuX2NhdGVnb3JpZXMsIGxpc3QpOgotICAgICAgc2VsZi5fY2F0ZWdvcmllcyA9ICcsJy5qb2luKHNlbGYuX2NhdGVnb3JpZXMpCi0gICAgYXZhaWxfY2F0cyA9IGdldF9hdmFpbGFibGVfY2F0ZWdvcmllcyhjb25maWcsIHNlbGYuX2RldmljZV9zZGtfdmVyc2lvbikKLSAgICB1bmF2YWlsYWJsZSA9IFt4IGZvciB4IGluIHNlbGYuX2NhdGVnb3JpZXMuc3BsaXQoJywnKSBpZgotICAgICAgICB4IG5vdCBpbiBhdmFpbF9jYXRzXQotICAgIHNlbGYuX2NhdGVnb3JpZXMgPSBbeCBmb3IgeCBpbiBzZWxmLl9jYXRlZ29yaWVzLnNwbGl0KCcsJykgaWYKLSAgICAgICAgeCBpbiBhdmFpbF9jYXRzXQotICAgIGlmIHVuYXZhaWxhYmxlOgotICAgICAgcHJpbnQgJ1RoZXNlIGNhdGVnb3JpZXMgYXJlIHVuYXZhaWxhYmxlOiAnICsgJyAnLmpvaW4odW5hdmFpbGFibGUpCi0gICAgc2VsZi5fZGV2aWNlX3V0aWxzID0gZGV2aWNlX3V0aWxzLkRldmljZVV0aWxzKGNvbmZpZy5kZXZpY2Vfc2VyaWFsX251bWJlcikKLSAgICBzZWxmLl9kZXZpY2Vfc2VyaWFsX251bWJlciA9IGNvbmZpZy5kZXZpY2Vfc2VyaWFsX251bWJlcgotICAgIHNlbGYuX3RyYWNlcl9hcmdzID0gX2NvbnN0cnVjdF9hdHJhY2VfYXJncyhjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhdGVnb3JpZXMpCi0gICAgc2VsZi5fZGV2aWNlX3V0aWxzLlJ1blNoZWxsQ29tbWFuZCgKLSAgICAgICAgc2VsZi5fdHJhY2VyX2FyZ3MgKyBbJy0tYXN5bmNfc3RhcnQnXSwgY2hlY2tfcmV0dXJuPVRydWUpCi0gICAgcmV0dXJuIFRydWUKLQotICBkZWYgX2NvbGxlY3RfYW5kX3ByZXByb2Nlc3Moc2VsZik6Ci0gICAgIiIiQ29sbGVjdHMgYW5kIHByZXByb2Nlc3NlcyB0cmFjZSBkYXRhLgotCi0gICAgU3RvcmVzIHJlc3VsdHMgaW4gc2VsZi5fdHJhY2VfZGF0YS4KLSAgICAiIiIKLSAgICB0cmFjZV9kYXRhID0gc2VsZi5fY29sbGVjdF90cmFjZV9kYXRhKCkKLSAgICBzZWxmLl90cmFjZV9kYXRhID0gc2VsZi5fcHJlcHJvY2Vzc190cmFjZV9kYXRhKHRyYWNlX2RhdGEpCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuU1RBUlRfU1RPUF9USU1FT1VUKQotICBkZWYgU3RvcEFnZW50VHJhY2luZyhzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgICIiIlN0b3BzIHRyYWNpbmcgYW5kIHN0YXJ0cyBjb2xsZWN0aW5nIHJlc3VsdHMuCi0KLSAgICBUbyBzeW5jaHJvbm91c2x5IHJldHJpZXZlIHRoZSByZXN1bHRzIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwKLSAgICBjYWxsIEdldFJlc3VsdHMoKS4KLSAgICAiIiIKLSAgICBzZWxmLl9jb2xsZWN0aW9uX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQoCi0gICAgICAgIHRhcmdldD1zZWxmLl9jb2xsZWN0X2FuZF9wcmVwcm9jZXNzKQotICAgIHNlbGYuX2NvbGxlY3Rpb25fdGhyZWFkLnN0YXJ0KCkKLSAgICByZXR1cm4gVHJ1ZQotCi0gIEBweV91dGlscy5UaW1lb3V0KHRyYWNpbmdfYWdlbnRzLkdFVF9SRVNVTFRTX1RJTUVPVVQpCi0gIGRlZiBHZXRSZXN1bHRzKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgIiIiV2FpdHMgZm9yIGNvbGxlY3Rpb24gdGhyZWFkIHRvIGZpbmlzaCBhbmQgcmV0dXJucyB0cmFjZSByZXN1bHRzLiIiIgotICAgIHNlbGYuX2NvbGxlY3Rpb25fdGhyZWFkLmpvaW4oKQotICAgIHNlbGYuX2NvbGxlY3Rpb25fdGhyZWFkID0gTm9uZQotICAgIHJldHVybiB0cmFjZV9yZXN1bHQuVHJhY2VSZXN1bHQoJ3N5c3RlbVRyYWNlRXZlbnRzJywgc2VsZi5fdHJhY2VfZGF0YSkKLQotICBkZWYgU3VwcG9ydHNFeHBsaWNpdENsb2NrU3luYyhzZWxmKToKLSAgICByZXR1cm4gVHJ1ZQotCi0gIGRlZiBSZWNvcmRDbG9ja1N5bmNNYXJrZXIoc2VsZiwgc3luY19pZCwgZGlkX3JlY29yZF9zeW5jX21hcmtlcl9jYWxsYmFjayk6Ci0gICAgIiIiUmVjb3JkcyBhIGNsb2NrIHN5bmMgbWFya2VyLgotCi0gICAgQXJnczoKLSAgICAgICAgc3luY19pZDogSUQgc3RyaW5nIGZvciBjbG9jayBzeW5jIG1hcmtlci4KLSAgICAiIiIKLSAgICBjbWQgPSAnZWNobyB0cmFjZV9ldmVudF9jbG9ja19zeW5jOiBuYW1lPSVzID4nIFwKLSAgICAgICAgJyAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNlX21hcmtlcicgJSBzeW5jX2lkCi0gICAgd2l0aCBzZWxmLl9kZXZpY2VfdXRpbHMuYWRiLlBlcnNpc3RlbnRTaGVsbCgKLSAgICAgICAgc2VsZi5fZGV2aWNlX3NlcmlhbF9udW1iZXIpIGFzIHNoZWxsOgotICAgICAgdDEgPSB0cmFjZV90aW1lX21vZHVsZS5Ob3coKQotICAgICAgc2hlbGwuUnVuQ29tbWFuZChjbWQsIGNsb3NlPVRydWUpCi0gICAgICBkaWRfcmVjb3JkX3N5bmNfbWFya2VyX2NhbGxiYWNrKHQxLCBzeW5jX2lkKQotCi0gIGRlZiBfc3RvcF9jb2xsZWN0X3RyYWNlKHNlbGYpOgotICAgICIiIlN0b3BzIGF0cmFjZS4KLQotICAgIE5vdGUgdGhhdCBwcmlvciB0byBBcGkgMjMsIC0tYXN5bmMtc3RvcCBtYXkgbm90IGFjdHVhbGx5IHN0b3AgdHJhY2luZy4KLSAgICBUaHVzLCB0aGlzIHVzZXMgYSBmYWxsYmFjayBtZXRob2Qgb2YgcnVubmluZyBhIHplcm8tbGVuZ3RoIHN5bmNocm9ub3VzCi0gICAgdHJhY2UgaWYgdHJhY2luZyBpcyBzdGlsbCBvbi4iIiIKLSAgICByZXN1bHQgPSBzZWxmLl9kZXZpY2VfdXRpbHMuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICBzZWxmLl90cmFjZXJfYXJncyArIFsnLS1hc3luY19zdG9wJ10sIHJhd19vdXRwdXQ9VHJ1ZSwKLSAgICAgICAgbGFyZ2Vfb3V0cHV0PVRydWUsIGNoZWNrX3JldHVybj1UcnVlLCB0aW1lb3V0PUFEQl9MQVJHRV9PVVRQVVRfVElNRU9VVCkKLSAgICBpc190cmFjZV9lbmFibGVkX2ZpbGUgPSAnL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uJwotCi0gICAgaWYgc2VsZi5fZGV2aWNlX3Nka192ZXJzaW9uIDwgdmVyc2lvbl9jb2Rlcy5NQVJTSE1BTExPVzoKLSAgICAgIGlmIGludChzZWxmLl9kZXZpY2VfdXRpbHMuUmVhZEZpbGUoaXNfdHJhY2VfZW5hYmxlZF9maWxlKSk6Ci0gICAgICAgICMgdHJhY2luZyB3YXMgaW5jb3JyZWN0bHkgbGVmdCBvbiwgZGlzYWJsZSBpdAotICAgICAgICBzZWxmLl9kZXZpY2VfdXRpbHMuUnVuU2hlbGxDb21tYW5kKAotICAgICAgICAgICAgc2VsZi5fdHJhY2VyX2FyZ3MgKyBbJy10IDAnXSwgY2hlY2tfcmV0dXJuPVRydWUpCi0KLSAgICByZXR1cm4gcmVzdWx0Ci0KLSAgZGVmIF9jb2xsZWN0X3RyYWNlX2RhdGEoc2VsZik6Ci0gICAgIiIiUmVhZHMgdGhlIG91dHB1dCBmcm9tIGF0cmFjZSBhbmQgc3RvcHMgdGhlIHRyYWNlLiIiIgotICAgIHJlc3VsdCA9IHNlbGYuX3N0b3BfY29sbGVjdF90cmFjZSgpCi0KLSAgICBkYXRhX3N0YXJ0ID0gcmUuc2VhcmNoKFRSQUNFX1NUQVJUX1JFR0VYUCwgcmVzdWx0KQotICAgIGlmIGRhdGFfc3RhcnQ6Ci0gICAgICBkYXRhX3N0YXJ0ID0gZGF0YV9zdGFydC5lbmQoMCkKLSAgICBlbHNlOgotICAgICAgcmFpc2UgSU9FcnJvcignVW5hYmxlIHRvIGdldCBhdHJhY2UgZGF0YS4gRGlkIHlvdSBmb3JnZXQgYWRiIHJvb3Q/JykKLSAgICBvdXRwdXQgPSByZS5zdWIoQURCX0lHTk9SRV9SRUdFWFAsICcnLCByZXN1bHRbZGF0YV9zdGFydDpdKQotICAgIHJldHVybiBvdXRwdXQKLQotICBkZWYgX3ByZXByb2Nlc3NfdHJhY2VfZGF0YShzZWxmLCB0cmFjZV9kYXRhKToKLSAgICAiIiJQZXJmb3JtcyB2YXJpb3VzIHByb2Nlc3Npbmcgb24gYXRyYWNlIGRhdGEuCi0KLSAgICBBcmdzOgotICAgICAgdHJhY2VfZGF0YTogVGhlIHJhdyB0cmFjZSBkYXRhLgotICAgIFJldHVybnM6Ci0gICAgICBUaGUgcHJvY2Vzc2VkIHRyYWNlIGRhdGEuCi0gICAgIiIiCi0gICAgaWYgdHJhY2VfZGF0YToKLSAgICAgIHRyYWNlX2RhdGEgPSBzdHJpcF9hbmRfZGVjb21wcmVzc190cmFjZSh0cmFjZV9kYXRhKQotCi0gICAgaWYgbm90IHRyYWNlX2RhdGE6Ci0gICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAoJ05vIGRhdGEgd2FzIGNhcHR1cmVkLiAgT3V0cHV0IGZpbGUgd2FzIG5vdCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dyaXR0ZW4uJykKLSAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBpZiBfRklYX01JU1NJTkdfVEdJRFM6Ci0gICAgICAjIEdhdGhlciBwcm9jIGRhdGEgZnJvbSBkZXZpY2UgYW5kIHBhdGNoIHRnaWRzCi0gICAgICBwcm9jZnNfZHVtcCA9IHNlbGYuX2RldmljZV91dGlscy5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgICAgJ2VjaG8gLW4gL3Byb2MvWzAtOV0qL3Rhc2svWzAtOV0qJywKLSAgICAgICAgICBzaGVsbD1UcnVlLCBjaGVja19yZXR1cm49VHJ1ZSlbMF0uc3BsaXQoJyAnKQotICAgICAgcGlkMl90Z2lkID0gZXh0cmFjdF90Z2lkcyhwcm9jZnNfZHVtcCkKLSAgICAgIHRyYWNlX2RhdGEgPSBmaXhfbWlzc2luZ190Z2lkcyh0cmFjZV9kYXRhLCBwaWQyX3RnaWQpCi0KLSAgICBpZiBfRklYX0NJUkNVTEFSX1RSQUNFUzoKLSAgICAgIHRyYWNlX2RhdGEgPSBmaXhfY2lyY3VsYXJfdHJhY2VzKHRyYWNlX2RhdGEpCi0KLSAgICByZXR1cm4gdHJhY2VfZGF0YQotCi1kZWYgZXh0cmFjdF90Z2lkcyh0cmFjZV9saW5lcyk6Ci0gICIiIlJlbW92ZXMgdGhlIHByb2NmcyBkdW1wIGZyb20gdGhlIGdpdmVuIHRyYWNlIHRleHQKLQotICBBcmdzOgotICAgIHRyYWNlX2xpbmVzOiBUaGUgdGV4dCBwb3J0aW9uIG9mIHRoZSB0cmFjZQotCi0gIFJldHVybnM6Ci0gICAgYSBtYXAgb2YgcGlkcyB0byB0aGVpciB0Z2lkLgotICAiIiIKLSAgdGdpZF8ycGlkID0ge30KLSAgZm9yIGxpbmUgaW4gdHJhY2VfbGluZXM6Ci0gICAgcmVzdWx0ID0gcmUubWF0Y2goJ14vcHJvYy8oWzAtOV0rKS90YXNrLyhbMC05XSspJywgbGluZSkKLSAgICBpZiByZXN1bHQ6Ci0gICAgICBwYXJlbnRfcGlkLCB0Z2lkID0gcmVzdWx0Lmdyb3VwKDEsIDIpCi0gICAgICB0Z2lkXzJwaWRbdGdpZF0gPSBwYXJlbnRfcGlkCi0KLSAgcmV0dXJuIHRnaWRfMnBpZAotCi0KLWRlZiBzdHJpcF9hbmRfZGVjb21wcmVzc190cmFjZSh0cmFjZV9kYXRhKToKLSAgIiIiRml4ZXMgbmV3LWxpbmVzIGFuZCBkZWNvbXByZXNzZXMgdHJhY2UgZGF0YS4KLQotICBBcmdzOgotICAgIHRyYWNlX2RhdGE6IFRoZSB0cmFjZSBkYXRhIHJldHVybmVkIGJ5IGF0cmFjZS4KLSAgUmV0dXJuczoKLSAgICBUaGUgZGVjb21wcmVzc2VkIHRyYWNlIGRhdGEuCi0gICIiIgotICAjIENvbGxhcHNlIENSTEZzIHRoYXQgYXJlIGFkZGVkIGJ5IGFkYiBzaGVsbC4KLSAgaWYgdHJhY2VfZGF0YS5zdGFydHN3aXRoKCdcclxuJyk6Ci0gICAgdHJhY2VfZGF0YSA9IHRyYWNlX2RhdGEucmVwbGFjZSgnXHJcbicsICdcbicpCi0gIGVsaWYgdHJhY2VfZGF0YS5zdGFydHN3aXRoKCdcclxyXG4nKToKLSAgICAjIE9uIHdpbmRvd3MsIGFkYiBhZGRzIGFuIGV4dHJhICdccicgY2hhcmFjdGVyIGZvciBlYWNoIGxpbmUuCi0gICAgdHJhY2VfZGF0YSA9IHRyYWNlX2RhdGEucmVwbGFjZSgnXHJcclxuJywgJ1xuJykKLQotICAjIFNraXAgdGhlIGluaXRpYWwgbmV3bGluZS4KLSAgaWYgdHJhY2VfZGF0YVswXSA9PSAnXG4nOgotICAgIHRyYWNlX2RhdGEgPSB0cmFjZV9kYXRhWzE6XQotCi0gIGlmIG5vdCB0cmFjZV9kYXRhLnN0YXJ0c3dpdGgoVFJBQ0VfVEVYVF9IRUFERVIpOgotICAgICMgTm8gaGVhZGVyIGZvdW5kLCBzbyBhc3N1bWUgdGhlIGRhdGEgaXMgY29tcHJlc3NlZC4KLSAgICB0cmFjZV9kYXRhID0gemxpYi5kZWNvbXByZXNzKHRyYWNlX2RhdGEpCi0KLSAgIyBFbmZvcmNlIFVuaXggbGluZS1lbmRpbmdzLgotICB0cmFjZV9kYXRhID0gdHJhY2VfZGF0YS5yZXBsYWNlKCdccicsICcnKQotCi0gICMgU2tpcCBhbnkgaW5pdGlhbCBuZXdsaW5lcy4KLSAgd2hpbGUgdHJhY2VfZGF0YSBhbmQgdHJhY2VfZGF0YVswXSA9PSAnXG4nOgotICAgIHRyYWNlX2RhdGEgPSB0cmFjZV9kYXRhWzE6XQotCi0gIHJldHVybiB0cmFjZV9kYXRhCi0KLQotZGVmIGZpeF9taXNzaW5nX3RnaWRzKHRyYWNlX2RhdGEsIHBpZDJfdGdpZCk6Ci0gICIiIlJlcGxhY2VzIG1pc3NpbmcgVEdJRHMgZnJvbSB0aGUgdHJhY2UgZGF0YSB3aXRoIHRob3NlIGZvdW5kIGluIHByb2NmcwotCi0gIEFyZ3M6Ci0gICAgdHJhY2VfZGF0YTogdGhlIGF0cmFjZSBkYXRhCi0KLSAgUmV0dXJuczoKLSAgICBUaGUgdXBkYXRlZCB0cmFjZSBkYXRhIHdpdGggbWlzc2luZyBUR0lEcyByZXBsYWNlZCB3aXRoIHRoZSBjb3JyZWN0IFRHSUQKLSAgIiIiCi0KLSAgZGVmIHJlcGwobSk6Ci0gICAgdGlkID0gbS5ncm91cCgyKQotICAgIGlmIChpbnQodGlkKSA+IDAgYW5kIG0uZ3JvdXAoMSkgIT0gJzxpZGxlPicgYW5kIG0uZ3JvdXAoMykgPT0gJygtLS0tLSknCi0gICAgICAgIGFuZCB0aWQgaW4gcGlkMl90Z2lkKToKLSAgICAgICMgcmV0dXJucyBQcm9jX25hbWUtUElEIChUR0lEKQotICAgICAgIyBCaW5kZXJfMi0zODEgKC0tLS0tKSBiZWNvbWVzIEJpbmRlcl8yLTM4MSAoMTI4KQotICAgICAgcmV0dXJuIG0uZ3JvdXAoMSkgKyAnLScgKyBtLmdyb3VwKDIpICsgJyAoICcgKyBwaWQyX3RnaWRbdGlkXSArICcpJwotCi0gICAgcmV0dXJuIG0uZ3JvdXAoMCkKLQotICAjIG1hdGNoZXMgc29tZXRoaW5nIGxpa2U6Ci0gICMgQmluZGVyXzItODk1ICgtLS0tLSkKLSAgdHJhY2VfZGF0YSA9IHJlLnN1YihyJ15ccyooXFMrKS0oXGQrKVxzKyhcKFxTK1wpKScsIHJlcGwsIHRyYWNlX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgZmxhZ3M9cmUuTVVMVElMSU5FKQotICByZXR1cm4gdHJhY2VfZGF0YQotCi0KLWRlZiBmaXhfY2lyY3VsYXJfdHJhY2VzKG91dCk6Ci0gICIiIkZpeCBpbmNvbnNpc3RlbnRjaWVzIGluIHRyYWNlcyBkdWUgdG8gY2lyY3VsYXIgYnVmZmVyaW5nLgotCi0gIFRoZSBjaXJjdWxhciBidWZmZXJzIGFyZSBrZXB0IHBlciBDUFUsIHNvIGl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXQgdGhlCi0gIGJlZ2lubmluZyBvZiBhIHNsaWNlIGlzIG92ZXJ3cml0dGVuIGJlZm9yZSB0aGUgZW5kLiBUbyB3b3JrIGFyb3VuZCB0aGlzLCB3ZQotICB0aHJvdyBhd2F5IHRoZSBwcmVmaXggb2YgdGhlIHRyYWNlIHdoZXJlIG5vdCBhbGwgQ1BVcyBoYXZlIGV2ZW50cyB5ZXQuCi0KLSAgQXJnczoKLSAgICBvdXQ6IFRoZSBkYXRhIHRvIGZpeC4KLSAgUmV0dXJuczoKLSAgICBUaGUgdXBkYXRlZCB0cmFjZSBkYXRhLgotICAiIiIKLSAgIyBJZiBhbnkgb2YgdGhlIENQVSdzIGJ1ZmZlcnMgaGF2ZSBmaWxsZWQgdXAgYW5kCi0gICMgb2xkZXIgZXZlbnRzIGhhdmUgYmVlbiBkcm9wcGVkLCB0aGUga2VybmVsCi0gICMgZW1pdHMgbWFya2VycyBvZiB0aGUgZm9ybSAnIyMjIyMgQ1BVIDIgYnVmZmVyIHN0YXJ0ZWQgIyMjIycgb24KLSAgIyB0aGUgbGluZSBiZWZvcmUgdGhlIGZpcnN0IGV2ZW50IGluIHRoZSB0cmFjZSBvbiB0aGF0IENQVS4KLSAgIwotICAjIE5vIHN1Y2ggaGVhZGVycyBhcmUgZW1pdHRlZCBpZiB0aGVyZSB3ZXJlIG5vIG92ZXJmbG93cyBvciB0aGUgdHJhY2UKLSAgIyB3YXMgY2FwdHVyZWQgd2l0aCBub24tY2lyY3VsYXIgYnVmZmVycy4KLSAgYnVmZmVyX3N0YXJ0X3JlID0gcmUuY29tcGlsZShyJ14jKyBDUFUgXGQrIGJ1ZmZlciBzdGFydGVkJywgcmUuTVVMVElMSU5FKQotCi0gIHN0YXJ0X29mX2Z1bGxfdHJhY2UgPSAwCi0KLSAgd2hpbGUgVHJ1ZToKLSAgICByZXN1bHQgPSBidWZmZXJfc3RhcnRfcmUuc2VhcmNoKG91dCwgc3RhcnRfb2ZfZnVsbF90cmFjZSArIDEpCi0gICAgaWYgcmVzdWx0OgotICAgICAgc3RhcnRfb2ZfZnVsbF90cmFjZSA9IHJlc3VsdC5zdGFydCgpCi0gICAgZWxzZToKLSAgICAgIGJyZWFrCi0KLSAgaWYgc3RhcnRfb2ZfZnVsbF90cmFjZSA+IDA6Ci0gICAgIyBOZWVkIHRvIGtlZXAgdGhlIGhlYWRlciBpbnRhY3QgdG8gbWFrZSB0aGUgaW1wb3J0ZXIgaGFwcHkuCi0gICAgZW5kX29mX2hlYWRlciA9IHJlLnNlYXJjaChyJ15bXiNdJywgb3V0LCByZS5NVUxUSUxJTkUpLnN0YXJ0KCkKLSAgICBvdXQgPSBvdXRbOmVuZF9vZl9oZWFkZXJdICsgb3V0W3N0YXJ0X29mX2Z1bGxfdHJhY2U6XQotICByZXR1cm4gb3V0Ci0KLQotY2xhc3MgQXRyYWNlQ29uZmlnKHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdDb25maWcpOgotICBkZWYgX19pbml0X18oc2VsZiwgYXRyYWNlX2NhdGVnb3JpZXMsIHRyYWNlX2J1Zl9zaXplLCBrZnVuY3MsCi0gICAgICAgICAgICAgICBhcHBfbmFtZSwgY29tcHJlc3NfdHJhY2VfZGF0YSwgZnJvbV9maWxlLAotICAgICAgICAgICAgICAgZGV2aWNlX3NlcmlhbF9udW1iZXIsIHRyYWNlX3RpbWUsIHRhcmdldCk6Ci0gICAgdHJhY2luZ19hZ2VudHMuVHJhY2luZ0NvbmZpZy5fX2luaXRfXyhzZWxmKQotICAgIHNlbGYuYXRyYWNlX2NhdGVnb3JpZXMgPSBhdHJhY2VfY2F0ZWdvcmllcwotICAgIHNlbGYudHJhY2VfYnVmX3NpemUgPSB0cmFjZV9idWZfc2l6ZQotICAgIHNlbGYua2Z1bmNzID0ga2Z1bmNzCi0gICAgc2VsZi5hcHBfbmFtZSA9IGFwcF9uYW1lCi0gICAgIyBUcmFjZSBjb21wcmVzc2lvbiBpcyBicm9rZW4gb24gV2luZG93cy4KLSAgICAjIFRPRE86IEZpeCBodHRwczovL2NyYnVnLmNvbS83Mzk3NTEuCi0gICAgc2VsZi5jb21wcmVzc190cmFjZV9kYXRhID0gXAotICAgICAgICBjb21wcmVzc190cmFjZV9kYXRhIGFuZCBwbGF0Zm9ybS5zeXN0ZW0oKSAhPSAnV2luZG93cycKLSAgICBzZWxmLmZyb21fZmlsZSA9IGZyb21fZmlsZQotICAgIHNlbGYuZGV2aWNlX3NlcmlhbF9udW1iZXIgPSBkZXZpY2Vfc2VyaWFsX251bWJlcgotICAgIHNlbGYudHJhY2VfdGltZSA9IHRyYWNlX3RpbWUKLSAgICBzZWxmLnRhcmdldCA9IHRhcmdldAotCi0KLWRlZiBhZGRfb3B0aW9ucyhwYXJzZXIpOgotICBvcHRpb25zID0gb3B0cGFyc2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnQXRyYWNlIG9wdGlvbnMnKQotICBvcHRpb25zLmFkZF9vcHRpb24oJy0tYXRyYWNlLWNhdGVnb3JpZXMnLCBkZXN0PSdhdHJhY2VfY2F0ZWdvcmllcycsCi0gICAgICAgICAgICAgICAgICAgICBoZWxwPSdTZWxlY3QgYXRyYWNlIGNhdGVnb3JpZXMgd2l0aCBhIGNvbW1hLWRlbGltaXRlZCAnCi0gICAgICAgICAgICAgICAgICAgICAnbGlzdCwgZS5nLiAtLWF0cmFjZS1jYXRlZ29yaWVzPWNhdDEsY2F0MixjYXQzJykKLSAgb3B0aW9ucy5hZGRfb3B0aW9uKCctaycsICctLWt0cmFjZScsIGRlc3Q9J2tmdW5jcycsIGFjdGlvbj0nc3RvcmUnLAotICAgICAgICAgICAgICAgICAgICAgaGVscD0nc3BlY2lmeSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGtlcm5lbCBmdW5jdGlvbnMgJwotICAgICAgICAgICAgICAgICAgICAgJ3RvIHRyYWNlJykKLSAgb3B0aW9ucy5hZGRfb3B0aW9uKCctLW5vLWNvbXByZXNzJywgZGVzdD0nY29tcHJlc3NfdHJhY2VfZGF0YScsCi0gICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLAotICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGVsbCB0aGUgZGV2aWNlIG5vdCB0byBzZW5kIHRoZSB0cmFjZSBkYXRhIGluICcKLSAgICAgICAgICAgICAgICAgICAgICdjb21wcmVzc2VkIGZvcm0uJykKLSAgb3B0aW9ucy5hZGRfb3B0aW9uKCctYScsICctLWFwcCcsIGRlc3Q9J2FwcF9uYW1lJywgZGVmYXVsdD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdzdG9yZScsCi0gICAgICAgICAgICAgICAgICAgICBoZWxwPSdlbmFibGUgYXBwbGljYXRpb24tbGV2ZWwgdHJhY2luZyBmb3IgJwotICAgICAgICAgICAgICAgICAgICAgJ2NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFwcCBjbWRsaW5lcycpCi0gIG9wdGlvbnMuYWRkX29wdGlvbignLS1mcm9tLWZpbGUnLCBkZXN0PSdmcm9tX2ZpbGUnLAotICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZScsIGhlbHA9J3JlYWQgdGhlIHRyYWNlIGZyb20gYSAnCi0gICAgICAgICAgICAgICAgICAgICAnZmlsZSAoY29tcHJlc3NlZCkgcmF0aGVyIHRoYW4gcnVubmluZyBhICcKLSAgICAgICAgICAgICAgICAgICAgICdsaXZlIHRyYWNlJykKLSAgcmV0dXJuIG9wdGlvbnMKLQotZGVmIGdldF9jb25maWcob3B0aW9ucyk6Ci0gIHJldHVybiBBdHJhY2VDb25maWcob3B0aW9ucy5hdHJhY2VfY2F0ZWdvcmllcywKLSAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRyYWNlX2J1Zl9zaXplLCBvcHRpb25zLmtmdW5jcywKLSAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFwcF9uYW1lLCBvcHRpb25zLmNvbXByZXNzX3RyYWNlX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5mcm9tX2ZpbGUsIG9wdGlvbnMuZGV2aWNlX3NlcmlhbF9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50cmFjZV90aW1lLCBvcHRpb25zLnRhcmdldCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL2F0cmFjZV9hZ2VudF91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL2F0cmFjZV9hZ2VudF91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOWNjYzZlMy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90cmFjaW5nX2FnZW50cy9hdHJhY2VfYWdlbnRfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgZGVjb3JhdG9ycwotZnJvbSBzeXN0cmFjZSBpbXBvcnQgcnVuX3N5c3RyYWNlCi1mcm9tIHN5c3RyYWNlIGltcG9ydCB1dGlsCi1mcm9tIHN5c3RyYWNlLnRyYWNpbmdfYWdlbnRzIGltcG9ydCBhdHJhY2VfYWdlbnQKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdXRpbHMKLWZyb20gZGV2aWwuYW5kcm9pZC5zZGsgaW1wb3J0IGludGVudAotCi0KLURFVklDRV9TRVJJQUwgPSAnQUc4NDA0RUMwNDQ0QUdDJwotQVRSQUNFX0FSR1MgPSBbJ2F0cmFjZScsICcteicsICctdCcsICcxMCcsICctYicsICc0MDk2J10KLUNBVEVHT1JJRVMgPSBbJ3NjaGVkJywgJ2dmeCcsICd2aWV3JywgJ3dtJ10KLUFEQl9TSEVMTCA9IFsnYWRiJywgJy1zJywgREVWSUNFX1NFUklBTCwgJ3NoZWxsJ10KLQotU1lTVFJBQ0VfQ01EID0gWycuL3J1bl9zeXN0cmFjZS5weScsICctLXRpbWUnLCAnMTAnLCAnLW8nLCAnb3V0Lmh0bWwnLCAnLWUnLAotICAgICAgICAgICAgICAgIERFVklDRV9TRVJJQUxdICsgQ0FURUdPUklFUwotVFJBQ0VfQVJHUyA9IChBVFJBQ0VfQVJHUyArIENBVEVHT1JJRVMpCi0KLVRFU1RfRElSID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIG9zLnBhcmRpciwgJ3Rlc3RfZGF0YScpCi1BVFJBQ0VfREFUQSA9IG9zLnBhdGguam9pbihURVNUX0RJUiwgJ2F0cmFjZV9kYXRhJykKLUFUUkFDRV9EQVRBX1JBVyA9IG9zLnBhdGguam9pbihURVNUX0RJUiwgJ2F0cmFjZV9kYXRhX3JhdycpCi1BVFJBQ0VfREFUQV9TVFJJUFBFRCA9IG9zLnBhdGguam9pbihURVNUX0RJUiwgJ2F0cmFjZV9kYXRhX3N0cmlwcGVkJykKLUFUUkFDRV9QUk9DRlNfRFVNUCA9IG9zLnBhdGguam9pbihURVNUX0RJUiwgJ2F0cmFjZV9wcm9jZnNfZHVtcCcpCi1BVFJBQ0VfRVhUUkFDVEVEX1RHSURTID0gb3MucGF0aC5qb2luKFRFU1RfRElSLCAnYXRyYWNlX2V4dHJhY3RlZF90Z2lkcycpCi1BVFJBQ0VfTUlTU0lOR19UR0lEUyA9IG9zLnBhdGguam9pbihURVNUX0RJUiwgJ2F0cmFjZV9taXNzaW5nX3RnaWRzJykKLUFUUkFDRV9GSVhFRF9UR0lEUyA9IG9zLnBhdGguam9pbihURVNUX0RJUiwgJ2F0cmFjZV9maXhlZF90Z2lkcycpCi0KLQotY2xhc3MgQXRyYWNlQWdlbnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAjIFRPRE8od2FzaGluZ3RvbnApOiBUaGVzZSBlbmQtdG8tZW5kIHRlc3RzIGRvIG5vdCB3b3JrIG9uIHRoZSBUcnlib3Qgc2VydmVyCi0gICMgYmVjYXVzZSBhZGIgY2Fubm90IGJlIGZvdW5kIG9uIHRoZSBUcnlib3Qgc2VydmVycy4gRmlndXJlIG91dCB3aGF0IHRoZQotICAjIGlzc3VlIGlzIGFuZCB1cGRhdGUgdGhpcyB0ZXN0LgotICBAZGVjb3JhdG9ycy5EaXNhYmxlZAotICBkZWYgdGVzdF90cmFjaW5nKHNlbGYpOgotICAgIFRSQUNFX0JVRkZFUl9TSVpFID0gJzE2Mzg0JwotICAgIFRSQUNFX1RJTUUgPSAnNScKLQotICAgIGRldmljZXMgPSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMuSGVhbHRoeURldmljZXMoKQotICAgIHBhY2thZ2VfaW5mbyA9IHV0aWwuZ2V0X3N1cHBvcnRlZF9icm93c2VycygpWydzdGFibGUnXQotICAgIGRldmljZSA9IGRldmljZXNbMF0KLSAgICBvdXRwdXRfZmlsZV9uYW1lID0gdXRpbC5nZW5lcmF0ZV9yYW5kb21fZmlsZW5hbWVfZm9yX3Rlc3QoKQotCi0gICAgdHJ5OgotICAgICAgIyBMYXVuY2ggdGhlIGJyb3dzZXIgYmVmb3JlIHRyYWNpbmcuCi0gICAgICBkZXZpY2UuU3RhcnRBY3Rpdml0eSgKLSAgICAgICAgICBpbnRlbnQuSW50ZW50KGFjdGl2aXR5PXBhY2thZ2VfaW5mby5hY3Rpdml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2U9cGFja2FnZV9pbmZvLnBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhPSdhYm91dDpibGFuaycsCi0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYXM9eydjcmVhdGVfbmV3X3RhYic6IFRydWV9KSwKLSAgICAgICAgICBibG9ja2luZz1UcnVlLCBmb3JjZV9zdG9wPVRydWUpCi0KLSAgICAgICMgUnVuIGF0cmFjZSBhZ2VudC4KLSAgICAgIHJ1bl9zeXN0cmFjZS5tYWluX2ltcGwoWycuL3J1bl9zeXN0cmFjZS5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBQ0VfQlVGRkVSX1NJWkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBQ0VfVElNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZmlsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1lJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihkZXZpY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tYXRyYWNlLWNhdGVnb3JpZXM9Z2Z4LGlucHV0LHZpZXcnXSkKLQotICAgICAgIyBWZXJpZnkgcmVzdWx0cy4KLSAgICAgIHdpdGggb3BlbihvdXRwdXRfZmlsZV9uYW1lLCAncicpIGFzIGY6Ci0gICAgICAgIGZ1bGxfdHJhY2UgPSBmLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0NQVSMnaW4gZnVsbF90cmFjZSkKLSAgICBleGNlcHQ6Ci0gICAgICByYWlzZQotICAgIGZpbmFsbHk6Ci0gICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvdXRwdXRfZmlsZV9uYW1lKToKLSAgICAgICAgb3MucmVtb3ZlKG91dHB1dF9maWxlX25hbWUpCi0KLSAgQGRlY29yYXRvcnMuSG9zdE9ubHlUZXN0Ci0gIGRlZiB0ZXN0X2NvbnN0cnVjdF9hdHJhY2VfYXJncyhzZWxmKToKLSAgICBvcHRpb25zLCBjYXRlZ29yaWVzID0gcnVuX3N5c3RyYWNlLnBhcnNlX29wdGlvbnMoU1lTVFJBQ0VfQ01EKQotICAgIG9wdGlvbnMuYXRyYWNlX2NhdGVnb3JpZXMgPSBjYXRlZ29yaWVzCi0gICAgdHJhY2VyX2FyZ3MgPSBhdHJhY2VfYWdlbnQuX2NvbnN0cnVjdF9hdHJhY2VfYXJncyhvcHRpb25zLCBjYXRlZ29yaWVzKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyAnLmpvaW4oVFJBQ0VfQVJHUyksICcgJy5qb2luKHRyYWNlcl9hcmdzKSkKLQotICBAZGVjb3JhdG9ycy5Ib3N0T25seVRlc3QKLSAgZGVmIHRlc3Rfc3RyaXBfYW5kX2RlY29tcHJlc3NfdHJhY2Uoc2VsZik6Ci0gICAgd2l0aCBjb250ZXh0bGliLm5lc3RlZChvcGVuKEFUUkFDRV9EQVRBX1JBVywgJ3InKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW4oQVRSQUNFX0RBVEFfU1RSSVBQRUQsICdyJykpIGFzIChmMSwgZjIpOgotICAgICAgYXRyYWNlX2RhdGFfcmF3ID0gZjEucmVhZCgpCi0gICAgICBhdHJhY2VfZGF0YV9zdHJpcHBlZCA9IGYyLnJlYWQoKQotCi0gICAgICB0cmFjZV9kYXRhID0gYXRyYWNlX2FnZW50LnN0cmlwX2FuZF9kZWNvbXByZXNzX3RyYWNlKGF0cmFjZV9kYXRhX3JhdykKLSAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXRyYWNlX2RhdGFfc3RyaXBwZWQsIHRyYWNlX2RhdGEpCi0KLSAgQGRlY29yYXRvcnMuSG9zdE9ubHlUZXN0Ci0gIGRlZiB0ZXN0X2V4dHJhY3RfdGdpZHMoc2VsZik6Ci0gICAgd2l0aCBjb250ZXh0bGliLm5lc3RlZChvcGVuKEFUUkFDRV9QUk9DRlNfRFVNUCwgJ3InKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW4oQVRSQUNFX0VYVFJBQ1RFRF9UR0lEUywgJ3InKSkgYXMgKGYxLCBmMik6Ci0KLSAgICAgIGF0cmFjZV9wcm9jZnNfZHVtcCA9IGYxLnJlYWQoKQotICAgICAgYXRyYWNlX3Byb2Nmc19leHRyYWN0ZWQgPSBmMi5yZWFkKCkKLQotICAgICAgdGdpZHMgPSBldmFsKGF0cmFjZV9wcm9jZnNfZXh0cmFjdGVkKQotICAgICAgcmVzdWx0ID0gYXRyYWNlX2FnZW50LmV4dHJhY3RfdGdpZHMoYXRyYWNlX3Byb2Nmc19kdW1wLnNwbGl0bGluZXMoKSkKLQotICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHRnaWRzKQotCi0gIEBkZWNvcmF0b3JzLkhvc3RPbmx5VGVzdAotICBkZWYgdGVzdF9maXhfbWlzc2luZ190Z2lkcyhzZWxmKToKLSAgICB3aXRoIGNvbnRleHRsaWIubmVzdGVkKG9wZW4oQVRSQUNFX0VYVFJBQ1RFRF9UR0lEUywgJ3InKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW4oQVRSQUNFX01JU1NJTkdfVEdJRFMsICdyJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuKEFUUkFDRV9GSVhFRF9UR0lEUywgJ3InKSkgYXMgKGYxLCBmMiwgZjMpOgotCi0gICAgICBhdHJhY2VfZGF0YSA9IGYyLnJlYWQoKQotICAgICAgdGdpZF9tYXAgPSBldmFsKGYxLnJlYWQoKSkKLSAgICAgIGZpeGVkID0gZjMucmVhZCgpCi0KLSAgICAgIHJlcyA9IGF0cmFjZV9hZ2VudC5maXhfbWlzc2luZ190Z2lkcyhhdHJhY2VfZGF0YSwgdGdpZF9tYXApCi0gICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgZml4ZWQpCi0KLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgbG9nZ2luZy5nZXRMb2dnZXIoKS5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvYXRyYWNlX2Zyb21fZmlsZV9hZ2VudC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL2F0cmFjZV9mcm9tX2ZpbGVfYWdlbnQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNGU3ODEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvYXRyYWNlX2Zyb21fZmlsZV9hZ2VudC5weQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9zCi1pbXBvcnQgcHlfdXRpbHMKLWltcG9ydCByZQotCi1mcm9tIHN5c3RyYWNlIGltcG9ydCB0cmFjZV9yZXN1bHQKLWZyb20gc3lzdHJhY2UgaW1wb3J0IHRyYWNpbmdfYWdlbnRzCi1mcm9tIHN5c3RyYWNlLnRyYWNpbmdfYWdlbnRzIGltcG9ydCBhdHJhY2VfYWdlbnQKLQotCi0jIEFEQiBzZW5kcyB0aGlzIHRleHQgdG8gaW5kaWNhdGUgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJhY2UgZGF0YS4KLVRSQUNFX1NUQVJUX1JFR0VYUCA9IHInVFJBQ0VcOicKLSMgVGV4dCB0aGF0IEFEQiBzZW5kcywgYnV0IGRvZXMgbm90IG5lZWQgdG8gYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLgotQURCX0lHTk9SRV9SRUdFWFAgPSByJ15jYXB0dXJpbmcgdHJhY2VcLlwuXC4gZG9uZXxeY2FwdHVyaW5nIHRyYWNlXC5cLlwuJwotCi0KLWRlZiB0cnlfY3JlYXRlX2FnZW50KG9wdGlvbnMpOgotICBpZiBvcHRpb25zLmZyb21fZmlsZSBpcyBub3QgTm9uZToKLSAgICByZXR1cm4gQXRyYWNlRnJvbUZpbGVBZ2VudChvcHRpb25zKQotICBlbHNlOgotICAgIHJldHVybiBGYWxzZQotCi0KLWNsYXNzIEF0cmFjZUZyb21GaWxlQ29uZmlnKHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdDb25maWcpOgotICBkZWYgX19pbml0X18oc2VsZiwgZnJvbV9maWxlKToKLSAgICB0cmFjaW5nX2FnZW50cy5UcmFjaW5nQ29uZmlnLl9faW5pdF9fKHNlbGYpCi0gICAgc2VsZi5maXhfY2lyY3VsYXIgPSBUcnVlCi0gICAgc2VsZi5mcm9tX2ZpbGUgPSBmcm9tX2ZpbGUKLQotZGVmIGFkZF9vcHRpb25zKHBhcnNlcik6ICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAotICAjIFRoZSBhdHJhY2VfZnJvbV9maWxlX2FnZW50IGlzIG5vdCBjdXJyZW50bHkgdXNlZCwgc28gZG9uJ3QgZGlzcGxheQotICAjIGFueSBvcHRpb25zLgotICByZXR1cm4gTm9uZQotCi1kZWYgZ2V0X2NvbmZpZyhvcHRpb25zKToKLSAgcmV0dXJuIEF0cmFjZUZyb21GaWxlQ29uZmlnKG9wdGlvbnMuZnJvbV9maWxlKQotCi0KLWNsYXNzIEF0cmFjZUZyb21GaWxlQWdlbnQodHJhY2luZ19hZ2VudHMuVHJhY2luZ0FnZW50KToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgotICAgIHN1cGVyKEF0cmFjZUZyb21GaWxlQWdlbnQsIHNlbGYpLl9faW5pdF9fKCkKLSAgICBzZWxmLl9maWxlbmFtZSA9IG9zLnBhdGguZXhwYW5kdXNlcihvcHRpb25zLmZyb21fZmlsZSkKLSAgICBzZWxmLl90cmFjZV9kYXRhID0gRmFsc2UKLQotICBAcHlfdXRpbHMuVGltZW91dCh0cmFjaW5nX2FnZW50cy5TVEFSVF9TVE9QX1RJTUVPVVQpCi0gIGRlZiBTdGFydEFnZW50VHJhY2luZyhzZWxmLCBjb25maWcsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci0gICAgcmV0dXJuIFRydWUKLQotICBAcHlfdXRpbHMuVGltZW91dCh0cmFjaW5nX2FnZW50cy5TVEFSVF9TVE9QX1RJTUVPVVQpCi0gIGRlZiBTdG9wQWdlbnRUcmFjaW5nKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgc2VsZi5fdHJhY2VfZGF0YSA9IHNlbGYuX3JlYWRfdHJhY2VfZGF0YSgpCi0gICAgcmV0dXJuIFRydWUKLQotICBkZWYgU3VwcG9ydHNFeHBsaWNpdENsb2NrU3luYyhzZWxmKToKLSAgICByZXR1cm4gRmFsc2UKLQotICBkZWYgUmVjb3JkQ2xvY2tTeW5jTWFya2VyKHNlbGYsIHN5bmNfaWQsIGRpZF9yZWNvcmRfY2xvY2tfc3luY19jYWxsYmFjayk6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gIEBweV91dGlscy5UaW1lb3V0KHRyYWNpbmdfYWdlbnRzLkdFVF9SRVNVTFRTX1RJTUVPVVQpCi0gIGRlZiBHZXRSZXN1bHRzKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgcmV0dXJuIHRyYWNlX3Jlc3VsdC5UcmFjZVJlc3VsdCgndHJhY2UtZGF0YScsIHNlbGYuX3RyYWNlX2RhdGEpCi0KLSAgZGVmIF9yZWFkX3RyYWNlX2RhdGEoc2VsZik6Ci0gICAgd2l0aCBvcGVuKHNlbGYuX2ZpbGVuYW1lLCAncmInKSBhcyBmOgotICAgICAgcmVzdWx0ID0gZi5yZWFkKCkKLSAgICBkYXRhX3N0YXJ0ID0gcmUuc2VhcmNoKFRSQUNFX1NUQVJUX1JFR0VYUCwgcmVzdWx0KS5lbmQoMCkKLSAgICBkYXRhID0gcmUuc3ViKEFEQl9JR05PUkVfUkVHRVhQLCAnJywgcmVzdWx0W2RhdGFfc3RhcnQ6XSkKLSAgICByZXR1cm4gc2VsZi5fcHJlcHJvY2Vzc19kYXRhKGRhdGEpCi0KLSAgIyBweWxpbnQ6IGRpc2FibGU9bm8tc2VsZi11c2UKLSAgZGVmIF9wcmVwcm9jZXNzX2RhdGEoc2VsZiwgZGF0YSk6Ci0gICAgIyBUT0RPOiBhZGQgZml4X3RocmVhZHMgYW5kIGZpeF90Z2lkcyBvcHRpb25zIGJhY2sgaW4gaGVyZQotICAgICMgb25jZSB3ZSBlbWJlZCB0aGUgZHVtcCBkYXRhIGluIHRoZSBmaWxlIChiLzI3NTA0MDY4KQotICAgIGRhdGEgPSBhdHJhY2VfYWdlbnQuc3RyaXBfYW5kX2RlY29tcHJlc3NfdHJhY2UoZGF0YSkKLSAgICBkYXRhID0gYXRyYWNlX2FnZW50LmZpeF9jaXJjdWxhcl90cmFjZXMoZGF0YSkKLSAgICByZXR1cm4gZGF0YQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvYXRyYWNlX2Zyb21fZmlsZV9hZ2VudF91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL2F0cmFjZV9mcm9tX2ZpbGVfYWdlbnRfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDYxMGI1NzAuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvYXRyYWNlX2Zyb21fZmlsZV9hZ2VudF91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAoYykgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgZGVjb3JhdG9ycwotZnJvbSBzeXN0cmFjZSBpbXBvcnQgcnVuX3N5c3RyYWNlCi1mcm9tIHN5c3RyYWNlIGltcG9ydCB1cGRhdGVfc3lzdHJhY2VfdHJhY2Vfdmlld2VyCi1mcm9tIHN5c3RyYWNlIGltcG9ydCB1dGlsCi0KLVRFU1RfRElSID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICd0ZXN0X2RhdGEnKQotCi1DT01QUkVTU0VEX0FUUkFDRV9EQVRBID0gb3MucGF0aC5qb2luKFRFU1RfRElSLCAnY29tcHJlc3NlZF9hdHJhY2VfZGF0YS50eHQnKQotREVDT01QUkVTU0VEX0FUUkFDRV9EQVRBID0gb3MucGF0aC5qb2luKFRFU1RfRElSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWNvbXByZXNzZWRfYXRyYWNlX2RhdGEudHh0JykKLU5PTl9FWElTVEVOVF9EQVRBID0gb3MucGF0aC5qb2luKFRFU1RfRElSLCAnVEhJU19GSUxFX0RPRVNfTk9UX0VYSVNULnR4dCcpCi0KLWNsYXNzIEF0cmFjZUZyb21GaWxlQWdlbnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgQGRlY29yYXRvcnMuSG9zdE9ubHlUZXN0Ci0gIGRlZiB0ZXN0X2Zyb21fZmlsZShzZWxmKToKLSAgICB1cGRhdGVfc3lzdHJhY2VfdHJhY2Vfdmlld2VyLnVwZGF0ZShmb3JjZV91cGRhdGU9VHJ1ZSkKLSAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoCi0gICAgICAgIHVwZGF0ZV9zeXN0cmFjZV90cmFjZV92aWV3ZXIuU1lTVFJBQ0VfVFJBQ0VfVklFV0VSX0hUTUxfRklMRSkpCi0gICAgb3V0cHV0X2ZpbGVfbmFtZSA9IHV0aWwuZ2VuZXJhdGVfcmFuZG9tX2ZpbGVuYW1lX2Zvcl90ZXN0KCkKLSAgICB0cnk6Ci0gICAgICAjIHVzZSBmcm9tLWZpbGUgdG8gY3JlYXRlIGEgc3BlY2lmaWMgZXhwZWN0ZWQgb3V0cHV0Ci0gICAgICBydW5fc3lzdHJhY2UubWFpbl9pbXBsKFsnLi9ydW5fc3lzdHJhY2UucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tZnJvbS1maWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBSRVNTRURfQVRSQUNFX0RBVEEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGVfbmFtZV0pCi0gICAgICAjIGFuZCB2ZXJpZnkgZmlsZSBjb250ZW50cwotICAgICAgd2l0aCBjb250ZXh0bGliLm5lc3RlZChvcGVuKG91dHB1dF9maWxlX25hbWUsICdyJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW4oREVDT01QUkVTU0VEX0FUUkFDRV9EQVRBLCAncicpKSBhcyAoZjEsIGYyKToKLSAgICAgICAgZnVsbF90cmFjZSA9IGYxLnJlYWQoKQotICAgICAgICBleHBlY3RlZF9jb250ZW50cyA9IGYyLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWRfY29udGVudHMgaW4gZnVsbF90cmFjZSkKLSAgICBleGNlcHQ6Ci0gICAgICByYWlzZQotICAgIGZpbmFsbHk6Ci0gICAgICBvcy5yZW1vdmUodXBkYXRlX3N5c3RyYWNlX3RyYWNlX3ZpZXdlci5TWVNUUkFDRV9UUkFDRV9WSUVXRVJfSFRNTF9GSUxFKQotICAgICAgaWYgb3MucGF0aC5leGlzdHMob3V0cHV0X2ZpbGVfbmFtZSk6Ci0gICAgICAgIG9zLnJlbW92ZShvdXRwdXRfZmlsZV9uYW1lKQotCi0KLSAgQGRlY29yYXRvcnMuSG9zdE9ubHlUZXN0Ci0gIGRlZiB0ZXN0X2RlZmF1bHRfb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgIHVwZGF0ZV9zeXN0cmFjZV90cmFjZV92aWV3ZXIudXBkYXRlKGZvcmNlX3VwZGF0ZT1UcnVlKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cygKLSAgICAgICAgdXBkYXRlX3N5c3RyYWNlX3RyYWNlX3ZpZXdlci5TWVNUUkFDRV9UUkFDRV9WSUVXRVJfSFRNTF9GSUxFKSkKLSAgICBvdXRwdXRfZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKFRFU1RfRElSLCAnY29tcHJlc3NlZF9hdHJhY2VfZGF0YS5odG1sJykKLSAgICB0cnk6Ci0gICAgICAjIHVzZSBmcm9tLWZpbGUgdG8gY3JlYXRlIGEgc3BlY2lmaWMgZXhwZWN0ZWQgb3V0cHV0Ci0gICAgICBydW5fc3lzdHJhY2UubWFpbl9pbXBsKFsnLi9ydW5fc3lzdHJhY2UucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tZnJvbS1maWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBSRVNTRURfQVRSQUNFX0RBVEFdKQotICAgICAgIyBhbmQgdmVyaWZ5IGZpbGUgY29udGVudHMKLSAgICAgIHdpdGggY29udGV4dGxpYi5uZXN0ZWQob3BlbihvdXRwdXRfZmlsZV9uYW1lLCAncicpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuKERFQ09NUFJFU1NFRF9BVFJBQ0VfREFUQSwgJ3InKSkgYXMgKGYxLCBmMik6Ci0gICAgICAgIGZ1bGxfdHJhY2UgPSBmMS5yZWFkKCkKLSAgICAgICAgZXhwZWN0ZWRfY29udGVudHMgPSBmMi5yZWFkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkX2NvbnRlbnRzIGluIGZ1bGxfdHJhY2UpCi0gICAgZXhjZXB0OgotICAgICAgcmFpc2UKLSAgICBmaW5hbGx5OgotICAgICAgb3MucmVtb3ZlKHVwZGF0ZV9zeXN0cmFjZV90cmFjZV92aWV3ZXIuU1lTVFJBQ0VfVFJBQ0VfVklFV0VSX0hUTUxfRklMRSkKLSAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG91dHB1dF9maWxlX25hbWUpOgotICAgICAgICBvcy5yZW1vdmUob3V0cHV0X2ZpbGVfbmFtZSkKLQotCi0gIEBkZWNvcmF0b3JzLkhvc3RPbmx5VGVzdAotICBkZWYgdGVzdF9taXNzaW5nX2ZpbGUoc2VsZik6Ci0gICAgdHJ5OgotICAgICAgcnVuX3N5c3RyYWNlLm1haW5faW1wbChbJy4vcnVuX3N5c3RyYWNlLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWZyb20tZmlsZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT05fRVhJU1RFTlRfREFUQV0pCi0gICAgICBzZWxmLmZhaWwoJ3Nob3VsZCBub3QgZ2V0IGhlcmUnKQotICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvYXRyYWNlX3Byb2Nlc3NfZHVtcC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL2F0cmFjZV9wcm9jZXNzX2R1bXAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwN2RhNTguLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvYXRyYWNlX3Byb2Nlc3NfZHVtcC5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSMgVHJhY2luZyBhZ2VudCB0aGF0IGNhcHR1cmVzIHBlcmlvZGljIHBlci1wcm9jZXNzIG1lbW9yeSBkdW1wcyBhbmQgb3RoZXIKLSMgdXNlZnVsIGluZm9ybWF0aW9uIGZyb20gUHJvY0ZTIGxpa2UgdXRpbWUsIHN0aW1lLCBPT00gc3RhdHMsIGV0Yy4KLQotaW1wb3J0IGpzb24KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCBweV91dGlscwotCi1mcm9tIGRldmlsLmFuZHJvaWQgaW1wb3J0IGRldmljZV91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkLmRldmljZV9lcnJvcnMgaW1wb3J0IEFkYlNoZWxsQ29tbWFuZEZhaWxlZEVycm9yCi1mcm9tIHB5X3RyYWNlX2V2ZW50IGltcG9ydCB0cmFjZV90aW1lIGFzIHRyYWNlX3RpbWVfbW9kdWxlCi1mcm9tIHN5c3RyYWNlIGltcG9ydCB0cmFjaW5nX2FnZW50cwotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2VfcmVzdWx0Ci0KLVRSQUNFX0hFQURFUiA9ICdBVFJBQ0VfUFJPQ0VTU19EVU1QJwotVFJBQ0VfUkVTVUxUX05BTUUgPSAnYXRyYWNlUHJvY2Vzc0R1bXAnCi0KLUhFTFBFUl9DT01NQU5EID0gJy9kYXRhL2xvY2FsL3RtcC9hdHJhY2VfaGVscGVyJwotSEVMUEVSX1NUT1BfQ09NTUFORCA9ICdraWxsIC1URVJNIGBwaWRvZiBhdHJhY2VfaGVscGVyYCcKLUhFTFBFUl9EVU1QX0pTT04gPSAnL2RhdGEvbG9jYWwvdG1wL3Byb2NkdW1wLmpzb24nCi0KLQotY2xhc3MgQXRyYWNlUHJvY2Vzc0R1bXBBZ2VudCh0cmFjaW5nX2FnZW50cy5UcmFjaW5nQWdlbnQpOgotICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgc3VwZXIoQXRyYWNlUHJvY2Vzc0R1bXBBZ2VudCwgc2VsZikuX19pbml0X18oKQotICAgIHNlbGYuX2RldmljZSA9IE5vbmUKLSAgICBzZWxmLl9kdW1wID0gTm9uZQotICAgIHNlbGYuX2Nsb2NrX3N5bmNfbWFya2VycyA9IHt9Ci0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuU1RBUlRfU1RPUF9USU1FT1VUKQotICBkZWYgU3RhcnRBZ2VudFRyYWNpbmcoc2VsZiwgY29uZmlnLCB0aW1lb3V0PU5vbmUpOgotICAgIHNlbGYuX2RldmljZSA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscyhjb25maWcuZGV2aWNlX3NlcmlhbF9udW1iZXIpCi0gICAgY21kID0gW0hFTFBFUl9DT01NQU5ELCAnLWInLCAnLWcnLAotICAgICAgICAnLXQnLCBzdHIoY29uZmlnLmR1bXBfaW50ZXJ2YWxfbXMpLAotICAgICAgICAnLW8nLCBIRUxQRVJfRFVNUF9KU09OXQotICAgIGlmIGNvbmZpZy5mdWxsX2R1bXBfY29uZmlnOgotICAgICAgY21kICs9IFsnLW0nLCBjb25maWcuZnVsbF9kdW1wX2NvbmZpZ10KLSAgICBpZiBjb25maWcuZW5hYmxlX21tYXBzOgotICAgICAgY21kICs9IFsnLXMnXQotICAgIHNlbGYuX2RldmljZS5SdW5TaGVsbENvbW1hbmQoY21kLCBjaGVja19yZXR1cm49VHJ1ZSwgYXNfcm9vdD1UcnVlKQotICAgIHJldHVybiBUcnVlCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuU1RBUlRfU1RPUF9USU1FT1VUKQotICBkZWYgU3RvcEFnZW50VHJhY2luZyhzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgIHNlbGYuX2RldmljZS5SdW5TaGVsbENvbW1hbmQoCi0gICAgICAgIEhFTFBFUl9TVE9QX0NPTU1BTkQsCi0gICAgICAgIHNoZWxsPVRydWUsIGNoZWNrX3JldHVybj1UcnVlLCBhc19yb290PVRydWUpCi0gICAgdHJ5OgotICAgICAgc2VsZi5fZGV2aWNlLlJ1blNoZWxsQ29tbWFuZChbJ3Rlc3QnLCAnLWYnLCBIRUxQRVJfRFVNUF9KU09OXSwKLSAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgYXNfcm9vdD1UcnVlKQotICAgICAgc2VsZi5fZHVtcCA9IHNlbGYuX2RldmljZS5SZWFkRmlsZShIRUxQRVJfRFVNUF9KU09OLCBmb3JjZV9wdWxsPVRydWUpCi0gICAgICBzZWxmLl9kZXZpY2UuUnVuU2hlbGxDb21tYW5kKFsncm0nLCBIRUxQRVJfRFVNUF9KU09OXSwKLSAgICAgICAgICBjaGVja19yZXR1cm49VHJ1ZSwgYXNfcm9vdD1UcnVlKQotICAgIGV4Y2VwdCBBZGJTaGVsbENvbW1hbmRGYWlsZWRFcnJvcjoKLSAgICAgIGxvZ2dpbmcuZXJyb3IoJ0F0cmFjZVByb2Nlc3NEdW1wQWdlbnQgZmFpbGVkIHRvIHB1bGwgZGF0YS4gQ2hlY2sgZGV2aWNlIHN0b3JhZ2UuJykKLSAgICAgIHJldHVybiBGYWxzZQotICAgIHJldHVybiBUcnVlCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuR0VUX1JFU1VMVFNfVElNRU9VVCkKLSAgZGVmIEdldFJlc3VsdHMoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICByZXN1bHQgPSBUUkFDRV9IRUFERVIgKyAnXG4nICsgc2VsZi5fZHVtcAotICAgIGNzID0ganNvbi5kdW1wcyhzZWxmLl9jbG9ja19zeW5jX21hcmtlcnMpCi0gICAgcmVzdWx0ID0gVFJBQ0VfSEVBREVSICsgXAotICAgICAgICAnXG57XCJjbG9ja19zeW5jX21hcmtlcnNcIjonICsgY3MgKyAnLFxuXCJkdW1wXCI6JyArIHNlbGYuX2R1bXAgKyAnfScKLSAgICByZXR1cm4gdHJhY2VfcmVzdWx0LlRyYWNlUmVzdWx0KFRSQUNFX1JFU1VMVF9OQU1FLCByZXN1bHQpCi0KLSAgZGVmIFN1cHBvcnRzRXhwbGljaXRDbG9ja1N5bmMoc2VsZik6Ci0gICAgcmV0dXJuIFRydWUKLQotICBkZWYgUmVjb3JkQ2xvY2tTeW5jTWFya2VyKHNlbGYsIHN5bmNfaWQsIGRpZF9yZWNvcmRfc3luY19tYXJrZXJfY2FsbGJhY2spOgotICAgIHdpdGggc2VsZi5fZGV2aWNlLmFkYi5QZXJzaXN0ZW50U2hlbGwoc2VsZi5fZGV2aWNlLnNlcmlhbCkgYXMgc2hlbGw6Ci0gICAgICB0c19pbl9jb250cm9sbGVyX2RvbWFpbiA9IHRyYWNlX3RpbWVfbW9kdWxlLk5vdygpCi0gICAgICBvdXRwdXQgPSBzaGVsbC5SdW5Db21tYW5kKEhFTFBFUl9DT01NQU5EICsgJyAtLWVjaG8tdHMnLCBjbG9zZT1UcnVlKQotICAgICAgdHNfaW5fYWdlbnRfZG9tYWluID0gaW50KG91dHB1dFswXVswXSkKLSAgICAgIHNlbGYuX2Nsb2NrX3N5bmNfbWFya2Vyc1tzeW5jX2lkXSA9IHRzX2luX2FnZW50X2RvbWFpbgotICAgICAgZGlkX3JlY29yZF9zeW5jX21hcmtlcl9jYWxsYmFjayh0c19pbl9jb250cm9sbGVyX2RvbWFpbiwgc3luY19pZCkKLQotCi1jbGFzcyBBdHJhY2VQcm9jZXNzRHVtcENvbmZpZyh0cmFjaW5nX2FnZW50cy5UcmFjaW5nQ29uZmlnKToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGVuYWJsZWQsIGRldmljZV9zZXJpYWxfbnVtYmVyLAotICAgICAgICAgICAgICAgZHVtcF9pbnRlcnZhbF9tcywgZnVsbF9kdW1wX2NvbmZpZywgZW5hYmxlX21tYXBzKToKLSAgICB0cmFjaW5nX2FnZW50cy5UcmFjaW5nQ29uZmlnLl9faW5pdF9fKHNlbGYpCi0gICAgc2VsZi5lbmFibGVkID0gZW5hYmxlZAotICAgIHNlbGYuZGV2aWNlX3NlcmlhbF9udW1iZXIgPSBkZXZpY2Vfc2VyaWFsX251bWJlcgotICAgIHNlbGYuZHVtcF9pbnRlcnZhbF9tcyA9IGR1bXBfaW50ZXJ2YWxfbXMKLSAgICBzZWxmLmZ1bGxfZHVtcF9jb25maWcgPSBmdWxsX2R1bXBfY29uZmlnCi0gICAgc2VsZi5lbmFibGVfbW1hcHMgPSBlbmFibGVfbW1hcHMKLQotCi1kZWYgYWRkX29wdGlvbnMocGFyc2VyKToKLSAgb3B0aW9ucyA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgJ0F0cmFjZSBwcm9jZXNzIGR1bXAgb3B0aW9ucycpCi0gIG9wdGlvbnMuYWRkX29wdGlvbignLS1wcm9jZXNzLWR1bXAnLCBkZXN0PSdwcm9jZXNzX2R1bXBfZW5hYmxlJywKLSAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAgICAgICAgICAgICBoZWxwPSdDYXB0dXJlIHBlcmlvZGljIHBlci1wcm9jZXNzIG1lbW9yeSBkdW1wcy4nKQotICBvcHRpb25zLmFkZF9vcHRpb24oJy0tcHJvY2Vzcy1kdW1wLWludGVydmFsJywgZGVzdD0ncHJvY2Vzc19kdW1wX2ludGVydmFsX21zJywKLSAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9NTAwMCwKLSAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0ludGVydmFsIGJldHdlZW4gbWVtb3J5IGR1bXBzIGluIG1pbGxpc2Vjb25kcy4nKQotICBvcHRpb25zLmFkZF9vcHRpb24oJy0tcHJvY2Vzcy1kdW1wLWZ1bGwnLCBkZXN0PSdwcm9jZXNzX2R1bXBfZnVsbF9jb25maWcnLAotICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ2FwdHVyZSBmdWxsIG1lbW9yeSBkdW1wcyBmb3Igc29tZSBwcm9jZXNzZXMuXG4nIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZhbHVlOiBhbGwsIGFwcHMgb3IgY29tbWEtc2VwYXJhdGVkIHByb2Nlc3MgbmFtZXMuJykKLSAgb3B0aW9ucy5hZGRfb3B0aW9uKCctLXByb2Nlc3MtZHVtcC1tbWFwcycsIGRlc3Q9J3Byb2Nlc3NfZHVtcF9tbWFwcycsCi0gICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ2FwdHVyZSBWTSByZWdpb25zIGFuZCBtZW1vcnktbWFwcGVkIGZpbGVzLlxuJyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdJdCBpbmNyZWFzZXMgZHVtcCBzaXplIGRyYW1hdGljYWxseSwgaGVuY2Ugb25seSAnIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hhcyBlZmZlY3QgaWYgLS1wcm9jZXNzLWR1bXAtZnVsbCBpcyBhIHdoaXRlbGlzdC4nKQotICByZXR1cm4gb3B0aW9ucwotCi0KLWRlZiBnZXRfY29uZmlnKG9wdGlvbnMpOgotICBjYW5fZW5hYmxlID0gKG9wdGlvbnMudGFyZ2V0ID09ICdhbmRyb2lkJykgYW5kIChub3Qgb3B0aW9ucy5mcm9tX2ZpbGUpCi0gIHJldHVybiBBdHJhY2VQcm9jZXNzRHVtcENvbmZpZygKLSAgICBlbmFibGVkPShvcHRpb25zLnByb2Nlc3NfZHVtcF9lbmFibGUgYW5kIGNhbl9lbmFibGUpLAotICAgIGRldmljZV9zZXJpYWxfbnVtYmVyPW9wdGlvbnMuZGV2aWNlX3NlcmlhbF9udW1iZXIsCi0gICAgZHVtcF9pbnRlcnZhbF9tcz1vcHRpb25zLnByb2Nlc3NfZHVtcF9pbnRlcnZhbF9tcywKLSAgICBmdWxsX2R1bXBfY29uZmlnPW9wdGlvbnMucHJvY2Vzc19kdW1wX2Z1bGxfY29uZmlnLAotICAgIGVuYWJsZV9tbWFwcz1vcHRpb25zLnByb2Nlc3NfZHVtcF9tbWFwcwotICApCi0KLQotZGVmIHRyeV9jcmVhdGVfYWdlbnQoY29uZmlnKToKLSAgaWYgY29uZmlnLmVuYWJsZWQ6Ci0gICAgcmV0dXJuIEF0cmFjZVByb2Nlc3NEdW1wQWdlbnQoKQotICByZXR1cm4gTm9uZQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvYmF0dG9yX3RyYWNlX2FnZW50LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvYmF0dG9yX3RyYWNlX2FnZW50LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTkxYjEzLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL2JhdHRvcl90cmFjZV9hZ2VudC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBhdGV4aXQKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCBweV91dGlscwotCi1mcm9tIGJhdHRvciBpbXBvcnQgYmF0dG9yX3dyYXBwZXIKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgYmF0dGVyeV91dGlscwotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdXRpbHMKLWZyb20gZGV2aWwudXRpbHMgaW1wb3J0IGJhdHRvcl9kZXZpY2VfbWFwcGluZwotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgZmluZF91c2JfZGV2aWNlcwotZnJvbSBweV90cmFjZV9ldmVudCBpbXBvcnQgdHJhY2VfdGltZQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2VfcmVzdWx0Ci1mcm9tIHN5c3RyYWNlIGltcG9ydCB0cmFjaW5nX2FnZW50cwotCi0KLWRlZiB0cnlfY3JlYXRlX2FnZW50KGNvbmZpZyk6Ci0gIGlmIGNvbmZpZy5mcm9tX2ZpbGUgaXMgbm90IE5vbmU6Ci0gICAgcmV0dXJuIE5vbmUKLSAgaWYgY29uZmlnLmJhdHRvcjoKLSAgICByZXR1cm4gQmF0dE9yVHJhY2VBZ2VudCgpCi0gIHJldHVybiBOb25lCi0KLQotY2xhc3MgQmF0dE9yQ29uZmlnKHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdDb25maWcpOgotICBkZWYgX19pbml0X18oc2VsZiwgYmF0dG9yX2NhdGVnb3JpZXMsIHNlcmlhbF9tYXAsIGJhdHRvcl9wYXRoLAotICAgICAgICAgICAgICAgYmF0dG9yLCB0YXJnZXQsIGZyb21fZmlsZSwgZGV2aWNlX3NlcmlhbF9udW1iZXIpOgotICAgIHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdDb25maWcuX19pbml0X18oc2VsZikKLSAgICBzZWxmLmJhdHRvcl9jYXRlZ29yaWVzID0gYmF0dG9yX2NhdGVnb3JpZXMKLSAgICBzZWxmLnNlcmlhbF9tYXAgPSBzZXJpYWxfbWFwCi0gICAgc2VsZi5iYXR0b3JfcGF0aCA9IGJhdHRvcl9wYXRoCi0gICAgc2VsZi5iYXR0b3IgPSBiYXR0b3IKLSAgICBzZWxmLnRhcmdldCA9IHRhcmdldAotICAgIHNlbGYuZnJvbV9maWxlID0gZnJvbV9maWxlCi0gICAgc2VsZi5kZXZpY2Vfc2VyaWFsX251bWJlciA9IGRldmljZV9zZXJpYWxfbnVtYmVyCi0KLQotZGVmIGFkZF9vcHRpb25zKHBhcnNlcik6Ci0gIG9wdGlvbnMgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdCYXR0T3IgdHJhY2Ugb3B0aW9ucycpCi0gIG9wdGlvbnMuYWRkX29wdGlvbignLS1iYXR0b3ItY2F0ZWdvcmllcycsIGRlc3Q9J2JhdHRvcl9jYXRlZ29yaWVzJywKLSAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NlbGVjdCBiYXR0b3IgY2F0ZWdvcmllcyB3aXRoIGEgY29tbWEtZGVsaW1pdGVkICcKLSAgICAgICAgICAgICAgICAgICAgICdsaXN0LCBlLmcuIC0tYmF0dG9yLWNhdGVnb3JpZXM9Y2F0MSxjYXQyLGNhdDMnKQotICBvcHRpb25zLmFkZF9vcHRpb24oJy0tc2VyaWFsLW1hcCcsIGRlc3Q9J3NlcmlhbF9tYXAnLAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSdzZXJpYWxfbWFwLmpzb24nLAotICAgICAgICAgICAgICAgICAgICBoZWxwPSdGaWxlIGNvbnRhaW5pbmcgcHJlZ2VuZXJhdGVkIG1hcCBvZiBwaG9uZSBzZXJpYWwgJwotICAgICAgICAgICAgICAgICAgICAnbnVtYmVycyB0byBCYXR0T3Igc2VyaWFsIG51bWJlcnMuJykKLSAgb3B0aW9ucy5hZGRfb3B0aW9uKCctLWJhdHRvci1wYXRoJywgZGVzdD0nYmF0dG9yX3BhdGgnLCBkZWZhdWx0PU5vbmUsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGhlbHA9J3NwZWNpZnkgYSBCYXR0T3IgcGF0aCB0byB1c2UnKQotICBvcHRpb25zLmFkZF9vcHRpb24oJy0tYmF0dG9yJywgZGVzdD0nYmF0dG9yJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nVXNlIHRoZSBCYXR0T3IgdHJhY2luZyBhZ2VudC4nKQotICByZXR1cm4gb3B0aW9ucwotCi1kZWYgZ2V0X2NvbmZpZyhvcHRpb25zKToKLSAgcmV0dXJuIEJhdHRPckNvbmZpZygKLSAgICAgIG9wdGlvbnMuYmF0dG9yX2NhdGVnb3JpZXMsIG9wdGlvbnMuc2VyaWFsX21hcCwgb3B0aW9ucy5iYXR0b3JfcGF0aCwKLSAgICAgIG9wdGlvbnMuYmF0dG9yLCBvcHRpb25zLnRhcmdldCwgb3B0aW9ucy5mcm9tX2ZpbGUsCi0gICAgICBvcHRpb25zLmRldmljZV9zZXJpYWxfbnVtYmVyKQotCi1kZWYgX3JlZW5hYmxlX2NoYXJnaW5nX2lmX25lZWRlZChiYXR0ZXJ5KToKLSAgaWYgbm90IGJhdHRlcnkuR2V0Q2hhcmdpbmcoKToKLSAgICBiYXR0ZXJ5LlNldENoYXJnaW5nKFRydWUpCi0gIGxvZ2dpbmcuaW5mbygnQ2hhcmdpbmcgc3RhdHVzIGNoZWNrZWQgYXQgZXhpdC4nKQotCi0KLWNsYXNzIEJhdHRPclRyYWNlQWdlbnQodHJhY2luZ19hZ2VudHMuVHJhY2luZ0FnZW50KToKLSAgIyBDbGFzcyByZXByZXNlbnRpbmcgdHJhY2luZyBhZ2VudCB0aGF0IGdldHMgZGF0YSBmcm9tIGEgQmF0dE9yLgotICAjIEJhdHRPcnMgYXJlIGhpZ2gtZnJlcXVlbmN5IHBvd2VyIG1vbml0b3JzIHVzZWQgZm9yIGJhdHRlcnkgdGVzdGluZy4KLSAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgIHN1cGVyKEJhdHRPclRyYWNlQWdlbnQsIHNlbGYpLl9faW5pdF9fKCkKLSAgICBzZWxmLl9jb2xsZWN0aW9uX3Byb2Nlc3MgPSBOb25lCi0gICAgc2VsZi5fcmVjb3JkaW5nX2Vycm9yID0gTm9uZQotICAgIHNlbGYuX2JhdHRvcl93cmFwcGVyID0gTm9uZQotICAgIHNlbGYuX2JhdHRlcnlfdXRpbHMgPSBOb25lCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgX0ZpbmRCYXR0T3JQYXRoKGNvbmZpZyk6Ci0gICAgYmF0dG9yX3BhdGggPSBjb25maWcuYmF0dG9yX3BhdGgKLSAgICBpZiBub3QgY29uZmlnLmJhdHRvcl9wYXRoIGFuZCBub3QgY29uZmlnLnNlcmlhbF9tYXA6Ci0gICAgICBkZXZpY2VfdHJlZSA9IGZpbmRfdXNiX2RldmljZXMuR2V0QnVzTnVtYmVyVG9EZXZpY2VUcmVlTWFwKCkKLSAgICAgIGJhdHRvcnMgPSBiYXR0b3JfZGV2aWNlX21hcHBpbmcuR2V0QmF0dE9yTGlzdChkZXZpY2VfdHJlZSkKLSAgICAgIGFzc2VydCBsZW4oYmF0dG9ycykgPT0gMSwgKCdNdXN0IHNwZWNpZnkgQmF0dE9yIHBhdGggaWYgdGhlcmUgaXMgbm90ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGFjdGx5IG9uZScpCi0gICAgICBiYXR0b3JfcGF0aCA9IGJhdHRvcnNbMF0KLSAgICByZXR1cm4gYmF0dG9yX3BhdGgKLQotICBAcHlfdXRpbHMuVGltZW91dCh0cmFjaW5nX2FnZW50cy5TVEFSVF9TVE9QX1RJTUVPVVQpCi0gIGRlZiBTdGFydEFnZW50VHJhY2luZyhzZWxmLCBjb25maWcsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgIiIiU3RhcnRzIHRyYWNpbmcuCi0KLSAgICBBcmdzOgotICAgICAgICBjb25maWc6IFRyYWNpbmcgY29uZmlnLgotCi0gICAgUmFpc2VzOgotICAgICAgICBSdW50aW1lRXJyb3I6IElmIHRyYWNlIGFscmVhZHkgaW4gcHJvZ3Jlc3MuCi0gICAgICAgIEFzc2VydGlvbkVycm9yOiBJZiBUaGVyZSBpcyBubyBCYXR0T3IgcGF0aCBnaXZlbiBhbmQgbW9yZQotICAgICAgICAgICAgdGhhbiBvbmUgQmF0dE9yIGlzIGF0dGFjaGVkLgotICAgICIiIgotICAgIGJhdHRvcl9wYXRoID0gc2VsZi5fRmluZEJhdHRPclBhdGgoY29uZmlnKQotICAgIHNlbGYuX2JhdHRvcl93cmFwcGVyID0gYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlcigKLSAgICAgICAgdGFyZ2V0X3BsYXRmb3JtPWNvbmZpZy50YXJnZXQsCi0gICAgICAgIGFuZHJvaWRfZGV2aWNlPWNvbmZpZy5kZXZpY2Vfc2VyaWFsX251bWJlciwKLSAgICAgICAgYmF0dG9yX3BhdGg9YmF0dG9yX3BhdGgsCi0gICAgICAgIGJhdHRvcl9tYXBfZmlsZT1jb25maWcuc2VyaWFsX21hcCkKLQotICAgIGRldl91dGlscyA9IGRldmljZV91dGlscy5EZXZpY2VVdGlscyhjb25maWcuZGV2aWNlX3NlcmlhbF9udW1iZXIpCi0gICAgc2VsZi5fYmF0dGVyeV91dGlscyA9IGJhdHRlcnlfdXRpbHMuQmF0dGVyeVV0aWxzKGRldl91dGlscykKLSAgICBzZWxmLl9iYXR0ZXJ5X3V0aWxzLlNldENoYXJnaW5nKEZhbHNlKQotICAgIGF0ZXhpdC5yZWdpc3RlcihfcmVlbmFibGVfY2hhcmdpbmdfaWZfbmVlZGVkLCBzZWxmLl9iYXR0ZXJ5X3V0aWxzKQotICAgIHNlbGYuX2JhdHRvcl93cmFwcGVyLlN0YXJ0U2hlbGwoKQotICAgIHNlbGYuX2JhdHRvcl93cmFwcGVyLlN0YXJ0VHJhY2luZygpCi0gICAgcmV0dXJuIFRydWUKLQotICBAcHlfdXRpbHMuVGltZW91dCh0cmFjaW5nX2FnZW50cy5TVEFSVF9TVE9QX1RJTUVPVVQpCi0gIGRlZiBTdG9wQWdlbnRUcmFjaW5nKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgIiIiU3RvcHMgdHJhY2luZyBhbmQgY29sbGVjdHMgdGhlIHJlc3VsdHMgYXN5bmNocm9ub3VzbHkuCi0KLSAgICBDcmVhdGVzIGEgbmV3IHByb2Nlc3MgdGhhdCBzdG9wcyB0aGUgdHJhY2luZyBhbmQgY29sbGVjdHMgdGhlIHJlc3VsdHMuCi0gICAgUmV0dXJucyBpbW1lZGlhdGVseSBhZnRlciB0aGUgcHJvY2VzcyBpcyBjcmVhdGVkIChkb2VzIG5vdCB3YWl0IGZvcgotICAgIHRyYWNlIHJlc3VsdHMgdG8gYmUgY29sbGVjdGVkKS4KLSAgICAiIiIKLSAgICBzZWxmLl9iYXR0b3Jfd3JhcHBlci5TdG9wVHJhY2luZygpCi0gICAgc2VsZi5fYmF0dGVyeV91dGlscy5TZXRDaGFyZ2luZyhUcnVlKQotICAgIHJldHVybiBUcnVlCi0KLSAgZGVmIFN1cHBvcnRzRXhwbGljaXRDbG9ja1N5bmMoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgZXhwbGljaXQgY2xvY2sgc3luYy4iIiIKLSAgICByZXR1cm4gc2VsZi5fYmF0dG9yX3dyYXBwZXIuU3VwcG9ydHNFeHBsaWNpdENsb2NrU3luYygpCi0KLSAgZGVmIFJlY29yZENsb2NrU3luY01hcmtlcihzZWxmLCBzeW5jX2lkLCBkaWRfcmVjb3JkX3N5bmNfbWFya2VyX2NhbGxiYWNrKToKLSAgICAiIiJSZWNvcmRzIGEgY2xvY2sgc3luYyBtYXJrZXIuCi0KLSAgICBBcmdzOgotICAgICAgICBzeW5jX2lkOiBJRCBzdHJpbmcgZm9yIGNsb2NrIHN5bmMgbWFya2VyLgotICAgICAgICBkaWRfcmVjb3JkX3N5bmNfbWFya2VyX2NhbGxiYWNrOiBDYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIGFmdGVyCi0gICAgICAgIHRoZSBjbG9jayBzeW5jIG1hcmtlciBpcyByZWNvcmRlZC4KLSAgICAiIiIKLSAgICB0cyA9IHRyYWNlX3RpbWUuTm93KCkKLSAgICBzZWxmLl9iYXR0b3Jfd3JhcHBlci5SZWNvcmRDbG9ja1N5bmNNYXJrZXIoc3luY19pZCkKLSAgICBkaWRfcmVjb3JkX3N5bmNfbWFya2VyX2NhbGxiYWNrKHRzLCBzeW5jX2lkKQotCi0gIEBweV91dGlscy5UaW1lb3V0KHRyYWNpbmdfYWdlbnRzLkdFVF9SRVNVTFRTX1RJTUVPVVQpCi0gIGRlZiBHZXRSZXN1bHRzKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgIiIiV2FpdHMgdW50aWwgZGF0YSBjb2xsZWN0aW9uIGlzIGNvbXBsZXRlZCBhbmQgZ2V0IHRoZSB0cmFjZSBkYXRhLgotCi0gICAgVGhlIHRyYWNlIGRhdGEgaXMgdGhlIGRhdGEgdGhhdCBjb21lcyBvdXQgb2YgdGhlIEJhdHRPciwgYW5kIGlzIGluIHRoZQotICAgIGZvcm1hdCB3aXRoIHRoZSBmb2xsb3dpbmcgbGluZXM6Ci0KLSAgICB0aW1lIGN1cnJlbnQgdm9sdGFnZSA8c3luY19pZD4KLQotICAgIHdoZXJlIHRoZSBzeW5jX2lkIGlzIG9ubHkgdGhlcmUgaWYgYSBjbG9jayBzeW5jIG1hcmtlciB3YXMgcmVjb3JkZWQKLSAgICBkdXJpbmcgdGhhdCBzYW1wbGUuCi0KLSAgICB0aW1lID0gdGltZSBzaW5jZSBzdGFydCBvZiB0cmFjZSAobXMpCi0gICAgY3VycmVudCA9IGN1cnJlbnQgdGhyb3VnaCBiYXR0ZXJ5IChtQSkgLSB0aGlzIGNhbiBiZSBuZWdhdGl2ZSBpZiB0aGUKLSAgICAgICAgYmF0dGVyeSBpcyBjaGFyZ2luZwotICAgIHZvbHRhZ2UgPSB2b2x0YWdlIG9mIGJhdHRlcnkgKG1WKQotCi0gICAgUmV0dXJuczoKLSAgICAgIFRoZSB0cmFjZSBkYXRhLgotICAgICIiIgotICAgIHJldHVybiB0cmFjZV9yZXN1bHQuVHJhY2VSZXN1bHQoCi0gICAgICAgICdwb3dlclRyYWNlQXNTdHJpbmcnLCBzZWxmLl9iYXR0b3Jfd3JhcHBlci5Db2xsZWN0VHJhY2VEYXRhKCkpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90cmFjaW5nX2FnZW50cy9iYXR0b3JfdHJhY2VfYWdlbnRfdW5pdHRlc3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90cmFjaW5nX2FnZW50cy9iYXR0b3JfdHJhY2VfYWdlbnRfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDYzNDcxNjEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvYmF0dG9yX3RyYWNlX2FnZW50X3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IGxvZ2dpbmcKLQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgZGVjb3JhdG9ycwotZnJvbSBzeXN0cmFjZS50cmFjaW5nX2FnZW50cyBpbXBvcnQgYmF0dG9yX3RyYWNlX2FnZW50Ci1mcm9tIGJhdHRvciBpbXBvcnQgYmF0dG9yX3dyYXBwZXIKLWZyb20gZGV2aWwuYW5kcm9pZCBpbXBvcnQgYmF0dGVyeV91dGlscwotZnJvbSBkZXZpbC51dGlscyBpbXBvcnQgYmF0dG9yX2RldmljZV9tYXBwaW5nCi1mcm9tIGRldmlsLnV0aWxzIGltcG9ydCBmaW5kX3VzYl9kZXZpY2VzCi0KLQotbW9ja19vcHRzID0gbmFtZWR0dXBsZSgnbW9ja19vcHRzJywgWyd0YXJnZXQnLCAnZGV2aWNlX3NlcmlhbF9udW1iZXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXR0b3JfcGF0aCcsICdzZXJpYWxfbWFwJ10pCi1PUFRJT05TID0gbW9ja19vcHRzKCdhbmRyb2lkJywgJ1BobjInLCBOb25lLCBfX2ZpbGVfXykKLUNBVEVHT1JJRVMgPSBOb25lCi1fREVGQVVMVF9CQVRUT1JfTElTVCA9IFsnZGV2L3R0eVVTQjAnXQotCi1kZWYgcmFpc2VfZXJyb3IoKmFyZ3MsICoqa3dhcmdzKToKLSAgZGVsIGFyZ3MKLSAgZGVsIGt3YXJncwotICByYWlzZSBSdW50aW1lRXJyb3IoJ1Nob3VsZCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIHRoZSB0ZXN0JykKLQotYmF0dG9yX2RldmljZV9tYXBwaW5nLkdlbmVyYXRlU2VyaWFsTWFwRmlsZSA9IHJhaXNlX2Vycm9yCi0KLWRlZiBzZXR1cF9iYXR0b3JfdGVzdChTdGFydFNoZWxsX2Vycm9yLCBTdGFydFRyYWNpbmdfZXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgU3RvcFRyYWNpbmdfZXJyb3IsIENvbGxlY3RUcmFjZURhdGFfZXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgYmF0dG9yX3BhdGhzPU5vbmUpOgotICB3cmFwcGVyID0gTW9ja0JhdHRPcldyYXBwZXIoU3RhcnRTaGVsbF9lcnJvciwgU3RhcnRUcmFjaW5nX2Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcFRyYWNpbmdfZXJyb3IsIENvbGxlY3RUcmFjZURhdGFfZXJyb3IpCi0gIGRlZiB3cmFwcGVyX21ha2VyKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgZGVsIGFyZ3MKLSAgICBkZWwga3dhcmdzCi0gICAgcmV0dXJuIHdyYXBwZXIKLSAgYmF0dG9yX3dyYXBwZXIuQmF0dE9yV3JhcHBlciA9IHdyYXBwZXJfbWFrZXIKLSAgZmluZF91c2JfZGV2aWNlcy5HZXRCdXNOdW1iZXJUb0RldmljZVRyZWVNYXAgPSBsYW1iZGE6IE5vbmUKLSAgaWYgYmF0dG9yX3BhdGhzIGlzIE5vbmU6Ci0gICAgYmF0dG9yX3BhdGhzID0gX0RFRkFVTFRfQkFUVE9SX0xJU1QKLSAgYmF0dG9yX2RldmljZV9tYXBwaW5nLkdldEJhdHRPckxpc3QgPSBsYW1iZGEgeDogYmF0dG9yX3BhdGhzCi0KLQotY2xhc3MgTW9ja0JhdHRPcldyYXBwZXIob2JqZWN0KToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIFN0YXJ0U2hlbGxfZXJyb3I9RmFsc2UsIFN0YXJ0VHJhY2luZ19lcnJvcj1GYWxzZSwKLSAgICAgICAgICAgICAgIFN0b3BUcmFjaW5nX2Vycm9yPUZhbHNlLCBDb2xsZWN0VHJhY2VEYXRhX2Vycm9yPUZhbHNlKToKLSAgICBzZWxmLl9TdGFydFNoZWxsX2Vycm9yID0gU3RhcnRTaGVsbF9lcnJvcgotICAgIHNlbGYuX1N0YXJ0VHJhY2luZ19lcnJvciA9IFN0YXJ0VHJhY2luZ19lcnJvcgotICAgIHNlbGYuX1N0b3BUcmFjaW5nX2Vycm9yID0gU3RvcFRyYWNpbmdfZXJyb3IKLSAgICBzZWxmLl9Db2xsZWN0VHJhY2VEYXRhX2Vycm9yID0gQ29sbGVjdFRyYWNlRGF0YV9lcnJvcgotICAgIHNlbGYuX3J1bm5pbmcgPSBGYWxzZQotICAgIHNlbGYuX3RyYWNpbmcgPSBGYWxzZQotICAgIHNlbGYuX291dHB1dCA9IEZhbHNlCi0KLSAgZGVmIElzU2hlbGxSdW5uaW5nKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9ydW5uaW5nCi0KLSAgZGVmIFN0YXJ0U2hlbGwoc2VsZik6Ci0gICAgYXNzZXJ0IG5vdCBzZWxmLl9ydW5uaW5nCi0gICAgaWYgc2VsZi5fU3RhcnRTaGVsbF9lcnJvcjoKLSAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignU2ltdWxhdGVkIGVycm9yIGluIFN0YXJ0U2hlbGwnKQotICAgIHNlbGYuX3J1bm5pbmcgPSBUcnVlCi0KLSAgZGVmIFN0YXJ0VHJhY2luZyhzZWxmKToKLSAgICBhc3NlcnQgc2VsZi5fcnVubmluZwotICAgIGFzc2VydCBub3Qgc2VsZi5fdHJhY2luZwotICAgIGlmIHNlbGYuX1N0YXJ0VHJhY2luZ19lcnJvcjoKLSAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignU2ltdWxhdGVkIGVycm9yIGluIFN0YXJ0VHJhY2luZycpCi0gICAgc2VsZi5fdHJhY2luZyA9IFRydWUKLQotICBkZWYgU3RvcFRyYWNpbmcoc2VsZik6Ci0gICAgYXNzZXJ0IHNlbGYuX3J1bm5pbmcKLSAgICBhc3NlcnQgc2VsZi5fdHJhY2luZwotICAgIGlmIHNlbGYuX1N0b3BUcmFjaW5nX2Vycm9yOgotICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdTaW11bGF0ZWQgZXJyb3IgaW4gU3RvcFRyYWNpbmcnKQotICAgIHNlbGYuX3J1bm5pbmcgPSBGYWxzZQotICAgIHNlbGYuX3RyYWNpbmcgPSBGYWxzZQotICAgIHNlbGYuX291dHB1dCA9IFRydWUKLQotICBkZWYgQ29sbGVjdFRyYWNlRGF0YShzZWxmKToKLSAgICBhc3NlcnQgc2VsZi5fb3V0cHV0Ci0gICAgaWYgc2VsZi5fQ29sbGVjdFRyYWNlRGF0YV9lcnJvcjoKLSAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignU2ltdWxhdGVkIGVycm9yIGluIENvbGxlY3RUcmFjZURhdGEnKQotICAgIHJldHVybiAndHJhY2VvdXQxXG50cmFjZW91dDInCi0KLQotY2xhc3MgTW9ja0JhdHRlcnlVdGlscyhvYmplY3QpOgotICBkZWYgX19pbml0X18oc2VsZiwgXyk6Ci0gICAgc2VsZi5faXNfY2hhcmdpbmcgPSBUcnVlCi0KLSAgZGVmIEdldENoYXJnaW5nKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9pc19jaGFyZ2luZwotCi0gIGRlZiBTZXRDaGFyZ2luZyhzZWxmLCB2YWx1ZSk6Ci0gICAgc2VsZi5faXNfY2hhcmdpbmcgPSB2YWx1ZQotCi0KLWJhdHRlcnlfdXRpbHMuQmF0dGVyeVV0aWxzID0gTW9ja0JhdHRlcnlVdGlscwotCi0KLWNsYXNzIEJhdHRPckFnZW50VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgQGRlY29yYXRvcnMuSG9zdE9ubHlUZXN0Ci0gIGRlZiB0ZXN0X3RyYWNlX2RvdWJsZV9zdGFydChzZWxmKToKLSAgICBzZXR1cF9iYXR0b3JfdGVzdChTdGFydFNoZWxsX2Vycm9yPUZhbHNlLCBTdGFydFRyYWNpbmdfZXJyb3I9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgU3RvcFRyYWNpbmdfZXJyb3I9RmFsc2UsIENvbGxlY3RUcmFjZURhdGFfZXJyb3I9RmFsc2UpCi0gICAgYWdlbnQgPSBiYXR0b3JfdHJhY2VfYWdlbnQuQmF0dE9yVHJhY2VBZ2VudCgpCi0gICAgYWdlbnQuU3RhcnRBZ2VudFRyYWNpbmcoT1BUSU9OUywgQ0FURUdPUklFUykKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IGFnZW50LlN0YXJ0QWdlbnRUcmFjaW5nKE9QVElPTlMsIENBVEVHT1JJRVMpKQotCi0gIEBkZWNvcmF0b3JzLkhvc3RPbmx5VGVzdAotICBkZWYgdGVzdF90cmFjZV9lcnJvcl9zdGFydF9zaGVsbChzZWxmKToKLSAgICBzZXR1cF9iYXR0b3JfdGVzdChTdGFydFNoZWxsX2Vycm9yPVRydWUsIFN0YXJ0VHJhY2luZ19lcnJvcj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICBTdG9wVHJhY2luZ19lcnJvcj1GYWxzZSwgQ29sbGVjdFRyYWNlRGF0YV9lcnJvcj1GYWxzZSkKLSAgICBhZ2VudCA9IGJhdHRvcl90cmFjZV9hZ2VudC5CYXR0T3JUcmFjZUFnZW50KCkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBhZ2VudC5TdGFydEFnZW50VHJhY2luZyhPUFRJT05TLCBDQVRFR09SSUVTKSkKLQotICBAZGVjb3JhdG9ycy5Ib3N0T25seVRlc3QKLSAgZGVmIHRlc3RfdHJhY2VfZXJyb3Jfc3RhcnRfdHJhY2luZyhzZWxmKToKLSAgICBzZXR1cF9iYXR0b3JfdGVzdChTdGFydFNoZWxsX2Vycm9yPUZhbHNlLCBTdGFydFRyYWNpbmdfZXJyb3I9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICBTdG9wVHJhY2luZ19lcnJvcj1GYWxzZSwgQ29sbGVjdFRyYWNlRGF0YV9lcnJvcj1GYWxzZSkKLSAgICBhZ2VudCA9IGJhdHRvcl90cmFjZV9hZ2VudC5CYXR0T3JUcmFjZUFnZW50KCkKLSAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBhZ2VudC5TdGFydEFnZW50VHJhY2luZyhPUFRJT05TLCBDQVRFR09SSUVTKSkKLQotICBAZGVjb3JhdG9ycy5Ib3N0T25seVRlc3QKLSAgZGVmIHRlc3RfdHJhY2VfZXJyb3Jfc3RvcF90cmFjaW5nKHNlbGYpOgotICAgIHNldHVwX2JhdHRvcl90ZXN0KFN0YXJ0U2hlbGxfZXJyb3I9RmFsc2UsIFN0YXJ0VHJhY2luZ19lcnJvcj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICBTdG9wVHJhY2luZ19lcnJvcj1UcnVlLCBDb2xsZWN0VHJhY2VEYXRhX2Vycm9yPUZhbHNlKQotICAgIGFnZW50ID0gYmF0dG9yX3RyYWNlX2FnZW50LkJhdHRPclRyYWNlQWdlbnQoKQotICAgIGFnZW50LlN0YXJ0QWdlbnRUcmFjaW5nKE9QVElPTlMsIENBVEVHT1JJRVMpCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBhZ2VudC5TdG9wQWdlbnRUcmFjaW5nKQotCi0gIEBkZWNvcmF0b3JzLkhvc3RPbmx5VGVzdAotICBkZWYgdGVzdF90cmFjZV9lcnJvcl9nZXRfcmVzdWx0cyhzZWxmKToKLSAgICBzZXR1cF9iYXR0b3JfdGVzdChTdGFydFNoZWxsX2Vycm9yPUZhbHNlLCBTdGFydFRyYWNpbmdfZXJyb3I9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgU3RvcFRyYWNpbmdfZXJyb3I9RmFsc2UsIENvbGxlY3RUcmFjZURhdGFfZXJyb3I9VHJ1ZSkKLSAgICBhZ2VudCA9IGJhdHRvcl90cmFjZV9hZ2VudC5CYXR0T3JUcmFjZUFnZW50KCkKLSAgICBhZ2VudC5TdGFydEFnZW50VHJhY2luZyhPUFRJT05TLCBDQVRFR09SSUVTKQotICAgIGFnZW50LlN0b3BBZ2VudFRyYWNpbmcoKQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgYWdlbnQuR2V0UmVzdWx0cykKLQotICBAZGVjb3JhdG9ycy5Ib3N0T25seVRlc3QKLSAgZGVmIHRlc3RfdHJhY2VfY29tcGxldGUoc2VsZik6Ci0gICAgc2V0dXBfYmF0dG9yX3Rlc3QoU3RhcnRTaGVsbF9lcnJvcj1GYWxzZSwgU3RhcnRUcmFjaW5nX2Vycm9yPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgIFN0b3BUcmFjaW5nX2Vycm9yPUZhbHNlLCBDb2xsZWN0VHJhY2VEYXRhX2Vycm9yPUZhbHNlKQotICAgIGFnZW50ID0gYmF0dG9yX3RyYWNlX2FnZW50LkJhdHRPclRyYWNlQWdlbnQoKQotICAgIGFnZW50LlN0YXJ0QWdlbnRUcmFjaW5nKE9QVElPTlMsIENBVEVHT1JJRVMpCi0gICAgYWdlbnQuU3RvcEFnZW50VHJhY2luZygpCi0gICAgeCA9IGFnZW50LkdldFJlc3VsdHMoKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5yYXdfZGF0YSwgJ3RyYWNlb3V0MVxudHJhY2VvdXQyJykKLQotICBAZGVjb3JhdG9ycy5Ib3N0T25seVRlc3QKLSAgZGVmIHRlc3RfdHJhY2VfZXJyb3Jfbm9fYmF0dG9yKHNlbGYpOgotICAgIHNldHVwX2JhdHRvcl90ZXN0KFN0YXJ0U2hlbGxfZXJyb3I9RmFsc2UsIFN0YXJ0VHJhY2luZ19lcnJvcj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICBTdG9wVHJhY2luZ19lcnJvcj1GYWxzZSwgQ29sbGVjdFRyYWNlRGF0YV9lcnJvcj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICBiYXR0b3JfcGF0aHM9W10pCi0gICAgYWdlbnQgPSBiYXR0b3JfdHJhY2VfYWdlbnQuQmF0dE9yVHJhY2VBZ2VudCgpCi0gICAgb3B0aW9ucyA9IG1vY2tfb3B0cygnYW5kcm9pZCcsICdQaG4yJywgTm9uZSwgTm9uZSkKLSAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKLSAgICAgIGFnZW50LlN0YXJ0QWdlbnRUcmFjaW5nKG9wdGlvbnMsIENBVEVHT1JJRVMpCi0KLSAgQGRlY29yYXRvcnMuSG9zdE9ubHlUZXN0Ci0gIGRlZiB0ZXN0X3RyYWNlX2Vycm9yX211bHRpcGxlX2JhdHRvcnNfbm9fYmF0dG9yX3BhdGgoc2VsZik6Ci0gICAgc2V0dXBfYmF0dG9yX3Rlc3QoU3RhcnRTaGVsbF9lcnJvcj1GYWxzZSwgU3RhcnRUcmFjaW5nX2Vycm9yPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgIFN0b3BUcmFjaW5nX2Vycm9yPUZhbHNlLCBDb2xsZWN0VHJhY2VEYXRhX2Vycm9yPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgIGJhdHRvcl9wYXRocz1bJ2EnLCAnYiddKQotICAgIGFnZW50ID0gYmF0dG9yX3RyYWNlX2FnZW50LkJhdHRPclRyYWNlQWdlbnQoKQotICAgIG9wdGlvbnMgPSBtb2NrX29wdHMoJ2FuZHJvaWQnLCAnUGhuMicsIE5vbmUsIE5vbmUpCi0gICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6Ci0gICAgICBhZ2VudC5TdGFydEFnZW50VHJhY2luZyhvcHRpb25zLCBDQVRFR09SSUVTKQotCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKLSAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL2Z0cmFjZV9hZ2VudC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL2Z0cmFjZV9hZ2VudC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgzMDc0Ni4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90cmFjaW5nX2FnZW50cy9mdHJhY2VfYWdlbnQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCBvcwotaW1wb3J0IHB5X3V0aWxzCi0KLWZyb20gc3lzdHJhY2UgaW1wb3J0IHRyYWNlX3Jlc3VsdAotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2luZ19hZ2VudHMKLQotCi1jbGFzcyBGdHJhY2VBZ2VudElvKG9iamVjdCk6Ci0gIEBzdGF0aWNtZXRob2QKLSAgZGVmIHdyaXRlRmlsZShwYXRoLCBkYXRhKToKLSAgICBpZiBGdHJhY2VBZ2VudElvLmhhdmVXcml0ZVBlcm1pc3Npb25zKHBhdGgpOgotICAgICAgd2l0aCBvcGVuKHBhdGgsICd3JykgYXMgZjoKLSAgICAgICAgZi53cml0ZShkYXRhKQotICAgIGVsc2U6Ci0gICAgICByYWlzZSBJT0Vycm9yKCdDYW5ub3Qgd3JpdGUgdG8gJXM7IGRpZCB5b3UgZm9yZ2V0IHN1ZG8vcm9vdD8nICUgcGF0aCkKLQotICBAc3RhdGljbWV0aG9kCi0gIGRlZiByZWFkRmlsZShwYXRoKToKLSAgICB3aXRoIG9wZW4ocGF0aCwgJ3InKSBhcyBmOgotICAgICAgcmV0dXJuIGYucmVhZCgpCi0KLSAgQHN0YXRpY21ldGhvZAotICBkZWYgaGF2ZVdyaXRlUGVybWlzc2lvbnMocGF0aCk6Ci0gICAgcmV0dXJuIG9zLmFjY2VzcyhwYXRoLCBvcy5XX09LKQotCi0KLUZUX0RJUiA9ICIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nLyIKLUZUX0NMT0NLID0gRlRfRElSICsgInRyYWNlX2Nsb2NrIgotRlRfQlVGRkVSX1NJWkUgPSBGVF9ESVIgKyAiYnVmZmVyX3NpemVfa2IiCi1GVF9UUkFDRVIgPSBGVF9ESVIgKyAiY3VycmVudF90cmFjZXIiCi1GVF9QUklOVF9UR0lEID0gRlRfRElSICsgIm9wdGlvbnMvcHJpbnQtdGdpZCIKLUZUX1RSQUNFX09OID0gRlRfRElSICsgInRyYWNpbmdfb24iCi1GVF9UUkFDRSA9IEZUX0RJUiArICJ0cmFjZSIKLUZUX1RSQUNFX01BUktFUiA9IEZUX0RJUiArICJ0cmFjZV9tYXJrZXIiCi1GVF9PVkVSV1JJVEUgPSBGVF9ESVIgKyAib3B0aW9ucy9vdmVyd3JpdGUiCi0KLWFsbF9jYXRlZ29yaWVzID0gewotICAgICJzY2hlZCI6IHsKLSAgICAgICAgICAiZGVzYyI6ICJDUFUgU2NoZWR1bGluZyIsCi0gICAgICAgICAgInJlcSI6IFsic2NoZWQvc2NoZWRfc3dpdGNoLyIsICJzY2hlZC9zY2hlZF93YWtldXAvIl0KLSAgICB9LAotICAgICJmcmVxIjogewotICAgICAgICAgICJkZXNjIjogIkNQVSBGcmVxdWVuY3kiLAotICAgICAgICAgICJyZXEiOiBbInBvd2VyL2NwdV9mcmVxdWVuY3kvIl0sCi0gICAgICAgICAgIm9wdCI6IFsicG93ZXIvY2xvY2tfc2V0X3JhdGUvIiwgImNsay9jbGtfc2V0X3JhdGUvIl0KLSAgICB9LAotICAgICJpcnEiOiB7Ci0gICAgICAgICAgImRlc2MiOiAiQ1BVIElSUVMgYW5kIElQSVMiLAotICAgICAgICAgICJyZXEiOiBbImlycS8iXSwKLSAgICAgICAgICAib3B0IjogWyJpcGkvIl0KLSAgICB9LAotICAgICJ3b3JrcSI6IHsKLSAgICAgICAgICAiZGVzYyI6ICJLZXJuZWwgd29ya3F1ZXVlcyIsCi0gICAgICAgICAgInJlcSI6IFsid29ya3F1ZXVlLyJdCi0gICAgfSwKLSAgICAibWVtcmVjbGFpbSI6IHsKLSAgICAgICAgICAiZGVzYyI6ICJLZXJuZWwgTWVtb3J5IFJlY2xhaW0iLAotICAgICAgICAgICJyZXEiOiBbInZtc2Nhbi9tbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW4vIiwKLSAgICAgICAgICAgICAgICAgICJ2bXNjYW4vbW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZC8iLAotICAgICAgICAgICAgICAgICAgInZtc2Nhbi9tbV92bXNjYW5fa3N3YXBkX3dha2UvIiwKLSAgICAgICAgICAgICAgICAgICJ2bXNjYW4vbW1fdm1zY2FuX2tzd2FwZF9zbGVlcC8iXQotICAgIH0sCi0gICAgImlkbGUiOiB7Ci0gICAgICAgICAgImRlc2MiOiAiQ1BVIElkbGUiLAotICAgICAgICAgICJyZXEiOiBbInBvd2VyL2NwdV9pZGxlLyJdCi0gICAgfSwKLSAgICAicmVndWxhdG9ycyI6IHsKLSAgICAgICAgICAiZGVzYyI6ICJWb2x0YWdlIGFuZCBDdXJyZW50IFJlZ3VsYXRvcnMiLAotICAgICAgICAgICJyZXEiOiBbInJlZ3VsYXRvci8iXQotICAgIH0sCi0gICAgImRpc2siOiB7Ci0gICAgICAgICAgImRlc2MiOiAiRGlzayBJL08iLAotICAgICAgICAgICJyZXEiOiBbImJsb2NrL2Jsb2NrX3JxX2lzc3VlLyIsCi0gICAgICAgICAgICAgICAgICAiYmxvY2svYmxvY2tfcnFfY29tcGxldGUvIl0sCi0gICAgICAgICAgIm9wdCI6IFsiZjJmcy9mMmZzX3N5bmNfZmlsZV9lbnRlci8iLAotICAgICAgICAgICAgICAgICAgImYyZnMvZjJmc19zeW5jX2ZpbGVfZXhpdC8iLAotICAgICAgICAgICAgICAgICAgImYyZnMvZjJmc193cml0ZV9iZWdpbi8iLAotICAgICAgICAgICAgICAgICAgImYyZnMvZjJmc193cml0ZV9lbmQvIiwKLSAgICAgICAgICAgICAgICAgICJleHQ0L2V4dDRfZGFfd3JpdGVfYmVnaW4vIiwKLSAgICAgICAgICAgICAgICAgICJleHQ0L2V4dDRfZGFfd3JpdGVfZW5kLyIsCi0gICAgICAgICAgICAgICAgICAiZXh0NC9leHQ0X3N5bmNfZmlsZV9lbnRlci8iLAotICAgICAgICAgICAgICAgICAgImV4dDQvZXh0NF9zeW5jX2ZpbGVfZXhpdC8iXQotICAgIH0KLX0KLQotCi1kZWYgdHJ5X2NyZWF0ZV9hZ2VudChjb25maWcpOgotICBpZiBjb25maWcudGFyZ2V0ICE9ICdsaW51eCc6Ci0gICAgcmV0dXJuIE5vbmUKLSAgcmV0dXJuIEZ0cmFjZUFnZW50KEZ0cmFjZUFnZW50SW8pCi0KLQotZGVmIGxpc3RfY2F0ZWdvcmllcyhfKToKLSAgYWdlbnQgPSBGdHJhY2VBZ2VudChGdHJhY2VBZ2VudElvKQotICBhZ2VudC5fcHJpbnRfYXZhaWxfY2F0ZWdvcmllcygpCi0KLQotY2xhc3MgRnRyYWNlQ29uZmlnKHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdDb25maWcpOgotICBkZWYgX19pbml0X18oc2VsZiwgZnRyYWNlX2NhdGVnb3JpZXMsIHRhcmdldCwgdHJhY2VfYnVmX3NpemUpOgotICAgIHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdDb25maWcuX19pbml0X18oc2VsZikKLSAgICBzZWxmLmZ0cmFjZV9jYXRlZ29yaWVzID0gZnRyYWNlX2NhdGVnb3JpZXMKLSAgICBzZWxmLnRhcmdldCA9IHRhcmdldAotICAgIHNlbGYudHJhY2VfYnVmX3NpemUgPSB0cmFjZV9idWZfc2l6ZQotCi0KLWRlZiBhZGRfb3B0aW9ucyhwYXJzZXIpOgotICBvcHRpb25zID0gb3B0cGFyc2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnRnRyYWNlIG9wdGlvbnMnKQotICBvcHRpb25zLmFkZF9vcHRpb24oJy0tZnRyYWNlLWNhdGVnb3JpZXMnLCBkZXN0PSdmdHJhY2VfY2F0ZWdvcmllcycsCi0gICAgICAgICAgICAgICAgICAgICBoZWxwPSdTZWxlY3QgZnRyYWNlIGNhdGVnb3JpZXMgd2l0aCBhIGNvbW1hLWRlbGltaXRlZCAnCi0gICAgICAgICAgICAgICAgICAgICAnbGlzdCwgZS5nLiAtLWZ0cmFjZS1jYXRlZ29yaWVzPWNhdDEsY2F0MixjYXQzJykKLSAgcmV0dXJuIG9wdGlvbnMKLQotCi1kZWYgZ2V0X2NvbmZpZyhvcHRpb25zKToKLSAgcmV0dXJuIEZ0cmFjZUNvbmZpZyhvcHRpb25zLmZ0cmFjZV9jYXRlZ29yaWVzLCBvcHRpb25zLnRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRyYWNlX2J1Zl9zaXplKQotCi0KLWNsYXNzIEZ0cmFjZUFnZW50KHRyYWNpbmdfYWdlbnRzLlRyYWNpbmdBZ2VudCk6Ci0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbz1GdHJhY2VBZ2VudElvKToKLSAgICAiIiJJbml0aWFsaXplIGEgc3lzdHJhY2UgYWdlbnQuCi0KLSAgICBBcmdzOgotICAgICAgY29uZmlnOiBUaGUgY29tbWFuZC1saW5lIGNvbmZpZy4KLSAgICAgIGNhdGVnb3JpZXM6IFRoZSB0cmFjZSBjYXRlZ29yaWVzIHRvIGNhcHR1cmUuCi0gICAgIiIiCi0gICAgc3VwZXIoRnRyYWNlQWdlbnQsIHNlbGYpLl9faW5pdF9fKCkKLSAgICBzZWxmLl9maW8gPSBmaW8KLSAgICBzZWxmLl9jb25maWcgPSBOb25lCi0gICAgc2VsZi5fY2F0ZWdvcmllcyA9IE5vbmUKLQotICBkZWYgX2dldF90cmFjZV9idWZmZXJfc2l6ZShzZWxmKToKLSAgICBidWZmZXJfc2l6ZSA9IDQwOTYKLSAgICBpZiAoKHNlbGYuX2NvbmZpZy50cmFjZV9idWZfc2l6ZSBpcyBub3QgTm9uZSkKLSAgICAgICAgYW5kIChzZWxmLl9jb25maWcudHJhY2VfYnVmX3NpemUgPiAwKSk6Ci0gICAgICBidWZmZXJfc2l6ZSA9IHNlbGYuX2NvbmZpZy50cmFjZV9idWZfc2l6ZQotICAgIHJldHVybiBidWZmZXJfc2l6ZQotCi0gIGRlZiBfZml4X2NhdGVnb3JpZXMoc2VsZiwgY2F0ZWdvcmllcyk6Ci0gICAgIiIiCi0gICAgQXBwbGllcyB0aGUgZGVmYXVsdCBjYXRlZ29yeSAoc2NoZWQpIGlmIHRoZXJlIGFyZSBubyBjYXRlZ29yaWVzCi0gICAgaW4gdGhlIGxpc3QgYW5kIHJlbW92ZXMgdW5hdmFpbGFibGUgY2F0ZWdvcmllcyBmcm9tIHRoZSBsaXN0LgotICAgIEFyZ3M6Ci0gICAgICAgIGNhdGVnb3JpZXM6IExpc3Qgb2YgY2F0ZWdvcmllcy4KLSAgICAiIiIKLSAgICBpZiBub3QgY2F0ZWdvcmllczoKLSAgICAgIGNhdGVnb3JpZXMgPSBbInNjaGVkIl0KLSAgICByZXR1cm4gW3ggZm9yIHggaW4gY2F0ZWdvcmllcwotICAgICAgICAgICAgaWYgc2VsZi5faXNfY2F0ZWdvcnlfYXZhaWxhYmxlKHgpXQotCi0gIEBweV91dGlscy5UaW1lb3V0KHRyYWNpbmdfYWdlbnRzLlNUQVJUX1NUT1BfVElNRU9VVCkKLSAgZGVmIFN0YXJ0QWdlbnRUcmFjaW5nKHNlbGYsIGNvbmZpZywgdGltZW91dD1Ob25lKToKLSAgICAiIiJTdGFydCB0cmFjaW5nLgotICAgICIiIgotICAgIHNlbGYuX2NvbmZpZyA9IGNvbmZpZwotICAgIGNhdGVnb3JpZXMgPSBzZWxmLl9maXhfY2F0ZWdvcmllcyhjb25maWcuZnRyYWNlX2NhdGVnb3JpZXMpCi0gICAgc2VsZi5fZmlvLndyaXRlRmlsZShGVF9CVUZGRVJfU0laRSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cihzZWxmLl9nZXRfdHJhY2VfYnVmZmVyX3NpemUoKSkpCi0gICAgc2VsZi5fZmlvLndyaXRlRmlsZShGVF9DTE9DSywgJ2dsb2JhbCcpCi0gICAgc2VsZi5fZmlvLndyaXRlRmlsZShGVF9UUkFDRVIsICdub3AnKQotICAgIHNlbGYuX2Zpby53cml0ZUZpbGUoRlRfT1ZFUldSSVRFLCAiMCIpCi0KLSAgICAjIFRPRE86IHJpYW5kcmV3cyB0byBwdXNoIG5lY2Vzc2FyeSBwYXRjaGVzIGZvciBUR0lEIG9wdGlvbiB0byB1cHN0cmVhbQotICAgICMgbGludXgga2VybmVsCi0gICAgIyBzZWxmLl9maW8ud3JpdGVGaWxlKEZUX1BSSU5UX1RHSUQsICcxJykKLQotICAgIGZvciBjYXRlZ29yeSBpbiBjYXRlZ29yaWVzOgotICAgICAgc2VsZi5fY2F0ZWdvcnlfZW5hYmxlKGNhdGVnb3J5KQotCi0gICAgc2VsZi5fY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXMgIyBuZWVkIHRvIHN0b3JlIGxpc3Qgb2YgY2F0ZWdvcmllcyB0byBkaXNhYmxlCi0gICAgcHJpbnQgJ3N0YXJ0aW5nIHRyYWNpbmcuJwotCi0gICAgc2VsZi5fZmlvLndyaXRlRmlsZShGVF9UUkFDRSwgJycpCi0gICAgc2VsZi5fZmlvLndyaXRlRmlsZShGVF9UUkFDRV9PTiwgJzEnKQotICAgIHJldHVybiBUcnVlCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuU1RBUlRfU1RPUF9USU1FT1VUKQotICBkZWYgU3RvcEFnZW50VHJhY2luZyhzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgICIiIkNvbGxlY3QgdGhlIHJlc3VsdCBvZiB0cmFjaW5nLgotCi0gICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHdoaWxlIGNvbGxlY3RpbmcgdGhlIHJlc3VsdC4gRm9yIHN5bmMgbW9kZSwgaXQKLSAgICByZWFkcyB0aGUgZGF0YSwgZS5nLiwgZnJvbSBzdGRvdXQsIHVudGlsIGl0IGZpbmlzaGVzLiBGb3IgYXN5bmMgbW9kZSwgaXQKLSAgICBibG9ja3MgdW50aWwgdGhlIGFnZW50IGlzIHN0b3BwZWQgYW5kIHRoZSBkYXRhIGlzIHJlYWR5LgotICAgICIiIgotICAgIHNlbGYuX2Zpby53cml0ZUZpbGUoRlRfVFJBQ0VfT04sICcwJykKLSAgICBmb3IgY2F0ZWdvcnkgaW4gc2VsZi5fY2F0ZWdvcmllczoKLSAgICAgIHNlbGYuX2NhdGVnb3J5X2Rpc2FibGUoY2F0ZWdvcnkpCi0gICAgcmV0dXJuIFRydWUKLQotICBAcHlfdXRpbHMuVGltZW91dCh0cmFjaW5nX2FnZW50cy5HRVRfUkVTVUxUU19USU1FT1VUKQotICBkZWYgR2V0UmVzdWx0cyhzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgICMgZ2V0IHRoZSBvdXRwdXQKLSAgICBkID0gc2VsZi5fZmlvLnJlYWRGaWxlKEZUX1RSQUNFKQotICAgIHNlbGYuX2Zpby53cml0ZUZpbGUoRlRfQlVGRkVSX1NJWkUsICIxIikKLSAgICByZXR1cm4gdHJhY2VfcmVzdWx0LlRyYWNlUmVzdWx0KCd0cmFjZS1kYXRhJywgZCkKLQotICBkZWYgU3VwcG9ydHNFeHBsaWNpdENsb2NrU3luYyhzZWxmKToKLSAgICByZXR1cm4gRmFsc2UKLQotICBkZWYgUmVjb3JkQ2xvY2tTeW5jTWFya2VyKHNlbGYsIHN5bmNfaWQsIGRpZF9yZWNvcmRfc3luY19tYXJrZXJfY2FsbGJhY2spOgotICAgICMgTm8gaW1wbGVtZW50YXRpb24sIGJ1dCBuZWVkIHRvIGhhdmUgdGhpcyB0byBzdXBwb3J0IHRoZSBBUEkKLSAgICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLSAgICByZXR1cm4gRmFsc2UKLQotICBkZWYgX2lzX2NhdGVnb3J5X2F2YWlsYWJsZShzZWxmLCBjYXRlZ29yeSk6Ci0gICAgaWYgY2F0ZWdvcnkgbm90IGluIGFsbF9jYXRlZ29yaWVzOgotICAgICAgcmV0dXJuIEZhbHNlCi0gICAgZXZlbnRzX2RpciA9IEZUX0RJUiArICJldmVudHMvIgotICAgIHJlcV9ldmVudHMgPSBhbGxfY2F0ZWdvcmllc1tjYXRlZ29yeV1bInJlcSJdCi0gICAgZm9yIGV2ZW50IGluIHJlcV9ldmVudHM6Ci0gICAgICBldmVudF9mdWxsX3BhdGggPSBldmVudHNfZGlyICsgZXZlbnQgKyAiZW5hYmxlIgotICAgICAgaWYgbm90IHNlbGYuX2Zpby5oYXZlV3JpdGVQZXJtaXNzaW9ucyhldmVudF9mdWxsX3BhdGgpOgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICByZXR1cm4gVHJ1ZQotCi0gIGRlZiBfYXZhaWxfY2F0ZWdvcmllcyhzZWxmKToKLSAgICByZXQgPSBbXQotICAgIGZvciBldmVudCBpbiBhbGxfY2F0ZWdvcmllczoKLSAgICAgIGlmIHNlbGYuX2lzX2NhdGVnb3J5X2F2YWlsYWJsZShldmVudCk6Ci0gICAgICAgIHJldC5hcHBlbmQoZXZlbnQpCi0gICAgcmV0dXJuIHJldAotCi0gIGRlZiBfcHJpbnRfYXZhaWxfY2F0ZWdvcmllcyhzZWxmKToKLSAgICBhdmFpbCA9IHNlbGYuX2F2YWlsX2NhdGVnb3JpZXMoKQotICAgIGlmIGxlbihhdmFpbCk6Ci0gICAgICBwcmludCAidHJhY2luZyBjb25maWc6IgotICAgICAgZm9yIGNhdGVnb3J5IGluIHNlbGYuX2F2YWlsX2NhdGVnb3JpZXMoKToKLSAgICAgICAgZGVzYyA9IGFsbF9jYXRlZ29yaWVzW2NhdGVnb3J5XVsiZGVzYyJdCi0gICAgICAgIHByaW50ICJ7MDogPDE2fSIuZm9ybWF0KGNhdGVnb3J5KSwgIjogIiwgZGVzYwotICAgIGVsc2U6Ci0gICAgICBwcmludCAiTm8gdHJhY2luZyBjYXRlZ29yaWVzIGF2YWlsYWJsZSAtIHBlcmhhcHMgeW91IG5lZWQgcm9vdD8iCi0KLSAgZGVmIF9jYXRlZ29yeV9lbmFibGVfcGF0aHMoc2VsZiwgY2F0ZWdvcnkpOgotICAgIGV2ZW50c19kaXIgPSBGVF9ESVIgKyAiZXZlbnRzLyIKLSAgICByZXFfZXZlbnRzID0gYWxsX2NhdGVnb3JpZXNbY2F0ZWdvcnldWyJyZXEiXQotICAgIGZvciBldmVudCBpbiByZXFfZXZlbnRzOgotICAgICAgZXZlbnRfZnVsbF9wYXRoID0gZXZlbnRzX2RpciArIGV2ZW50ICsgImVuYWJsZSIKLSAgICAgIHlpZWxkIGV2ZW50X2Z1bGxfcGF0aAotICAgIGlmICJvcHQiIGluIGFsbF9jYXRlZ29yaWVzW2NhdGVnb3J5XToKLSAgICAgIG9wdF9ldmVudHMgPSBhbGxfY2F0ZWdvcmllc1tjYXRlZ29yeV1bIm9wdCJdCi0gICAgICBmb3IgZXZlbnQgaW4gb3B0X2V2ZW50czoKLSAgICAgICAgZXZlbnRfZnVsbF9wYXRoID0gZXZlbnRzX2RpciArIGV2ZW50ICsgImVuYWJsZSIKLSAgICAgICAgaWYgc2VsZi5fZmlvLmhhdmVXcml0ZVBlcm1pc3Npb25zKGV2ZW50X2Z1bGxfcGF0aCk6Ci0gICAgICAgICAgeWllbGQgZXZlbnRfZnVsbF9wYXRoCi0KLSAgZGVmIF9jYXRlZ29yeV9lbmFibGUoc2VsZiwgY2F0ZWdvcnkpOgotICAgIGZvciBwYXRoIGluIHNlbGYuX2NhdGVnb3J5X2VuYWJsZV9wYXRocyhjYXRlZ29yeSk6Ci0gICAgICBzZWxmLl9maW8ud3JpdGVGaWxlKHBhdGgsICIxIikKLQotICBkZWYgX2NhdGVnb3J5X2Rpc2FibGUoc2VsZiwgY2F0ZWdvcnkpOgotICAgIGZvciBwYXRoIGluIHNlbGYuX2NhdGVnb3J5X2VuYWJsZV9wYXRocyhjYXRlZ29yeSk6Ci0gICAgICBzZWxmLl9maW8ud3JpdGVGaWxlKHBhdGgsICIwIikKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL2Z0cmFjZV9hZ2VudF91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfYWdlbnRzL2Z0cmFjZV9hZ2VudF91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZmRjNTRjZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90cmFjaW5nX2FnZW50cy9mdHJhY2VfYWdlbnRfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgbG9nZ2luZwotCi1mcm9tIHN5c3RyYWNlIGltcG9ydCBkZWNvcmF0b3JzCi1mcm9tIHN5c3RyYWNlIGltcG9ydCBydW5fc3lzdHJhY2UKLWZyb20gc3lzdHJhY2UudHJhY2luZ19hZ2VudHMgaW1wb3J0IGZ0cmFjZV9hZ2VudAotCi0KLVNZU1RSQUNFX0hPU1RfQ01EX0RFRkFVTFQgPSBbJy4vc3lzdHJhY2UucHknLCAnLS10YXJnZXQ9bGludXgnXQotRlRfRElSID0gIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvIgotRlRfRVZFTlRfRElSID0gRlRfRElSICsgImV2ZW50cy8iCi1GVF9UUkFDRV9PTiA9IEZUX0RJUiArICJ0cmFjaW5nX29uIgotRlRfVFJBQ0UgPSBGVF9ESVIgKyAidHJhY2UiCi1GVF9CVUZGRVJfU0laRSA9IEZUX0RJUiArICJidWZmZXJfc2l6ZV9rYiIKLQotCi1kZWYgbWFrZV90ZXN0X2lvX2ludGVyZmFjZShwZXJtaXR0ZWRfZmlsZXMpOgotICBjbGFzcyBUZXN0SW9JbXBsKG9iamVjdCk6Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHdyaXRlRmlsZShwYXRoLCBkYXRhKToKLSAgICAgIHBlcm1pdHRlZF9maWxlc1twYXRoXSA9IGRhdGEKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgcmVhZEZpbGUocGF0aCk6Ci0gICAgICBpZiBwYXRoIGluIHBlcm1pdHRlZF9maWxlczoKLSAgICAgICAgcmV0dXJuIHBlcm1pdHRlZF9maWxlc1twYXRoXQotICAgICAgZWxzZToKLSAgICAgICAgcmV0dXJuICIiCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGhhdmVXcml0ZVBlcm1pc3Npb25zKHBhdGgpOgotICAgICAgcmV0dXJuIHBhdGggaW4gcGVybWl0dGVkX2ZpbGVzCi0KLSAgcmV0dXJuIFRlc3RJb0ltcGwKLQotCi1jbGFzcyBGdHJhY2VBZ2VudFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIEBkZWNvcmF0b3JzLkhvc3RPbmx5VGVzdAotICBkZWYgdGVzdF9hdmFpbF9jYXRlZ29yaWVzKHNlbGYpOgotICAgICMgc2NoZWQgb25seSBoYXMgcmVxdWlyZWQgZXZlbnRzCi0gICAgcGVybWl0dGVkX2ZpbGVzID0gewotICAgICAgRlRfRVZFTlRfRElSICsgInNjaGVkL3NjaGVkX3N3aXRjaC9lbmFibGUiOiAiMCIsCi0gICAgICBGVF9FVkVOVF9ESVIgKyAic2NoZWQvc2NoZWRfd2FrZXVwL2VuYWJsZSI6ICIwIgotICAgIH0KLSAgICBpb19pbnRlcmZhY2UgPSBtYWtlX3Rlc3RfaW9faW50ZXJmYWNlKHBlcm1pdHRlZF9maWxlcykKLSAgICBhZ2VudCA9IGZ0cmFjZV9hZ2VudC5GdHJhY2VBZ2VudChpb19pbnRlcmZhY2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbJ3NjaGVkJ10sIGFnZW50Ll9hdmFpbF9jYXRlZ29yaWVzKCkpCi0KLSAgICAjIGNoZWNrIGZvciBubyBhdmFpbGFibGUgY2F0ZWdvcmllcwotICAgIHBlcm1pdHRlZF9maWxlcyA9IHt9Ci0gICAgaW9faW50ZXJmYWNlID0gbWFrZV90ZXN0X2lvX2ludGVyZmFjZShwZXJtaXR0ZWRfZmlsZXMpCi0gICAgYWdlbnQgPSBmdHJhY2VfYWdlbnQuRnRyYWNlQWdlbnQoaW9faW50ZXJmYWNlKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIGFnZW50Ll9hdmFpbF9jYXRlZ29yaWVzKCkpCi0KLSAgICAjIGJsb2NrIGhhcyBzb21lIHJlcXVpcmVkLCBzb21lIG9wdGlvbmFsIGV2ZW50cwotICAgIHBlcm1pdHRlZF9maWxlcyA9IHsKLSAgICAgIEZUX0VWRU5UX0RJUiArICJibG9jay9ibG9ja19ycV9jb21wbGV0ZS9lbmFibGUiOiAiMCIsCi0gICAgICBGVF9FVkVOVF9ESVIgKyAiYmxvY2svYmxvY2tfcnFfaXNzdWUvZW5hYmxlIjogIjAiCi0gICAgfQotICAgIGlvX2ludGVyZmFjZSA9IG1ha2VfdGVzdF9pb19pbnRlcmZhY2UocGVybWl0dGVkX2ZpbGVzKQotICAgIGFnZW50ID0gZnRyYWNlX2FnZW50LkZ0cmFjZUFnZW50KGlvX2ludGVyZmFjZSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKFsnZGlzayddLCBhZ2VudC5fYXZhaWxfY2F0ZWdvcmllcygpKQotCi0gIEBkZWNvcmF0b3JzLkhvc3RPbmx5VGVzdAotICBkZWYgdGVzdF90cmFjaW5nX2Jvb3RzdHJhcChzZWxmKToKLSAgICB3b3JrcV9ldmVudF9wYXRoID0gRlRfRVZFTlRfRElSICsgIndvcmtxdWV1ZS9lbmFibGUiCi0gICAgcGVybWl0dGVkX2ZpbGVzID0gewotICAgICAgd29ya3FfZXZlbnRfcGF0aDogIjAiLAotICAgICAgRlRfVFJBQ0U6ICJ4IgotICAgIH0KLSAgICBpb19pbnRlcmZhY2UgPSBtYWtlX3Rlc3RfaW9faW50ZXJmYWNlKHBlcm1pdHRlZF9maWxlcykKLSAgICBzeXN0cmFjZV9jbWQgPSBTWVNUUkFDRV9IT1NUX0NNRF9ERUZBVUxUICsgWyJ3b3JrcSJdCi0gICAgb3B0aW9ucywgY2F0ZWdvcmllcyA9IHJ1bl9zeXN0cmFjZS5wYXJzZV9vcHRpb25zKHN5c3RyYWNlX2NtZCkKLSAgICBhZ2VudCA9IGZ0cmFjZV9hZ2VudC5GdHJhY2VBZ2VudChpb19pbnRlcmZhY2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbJ3dvcmtxJ10sIGFnZW50Ll9hdmFpbF9jYXRlZ29yaWVzKCkpCi0KLSAgICAjIGNvbmZpcm0gdHJhY2luZyBpcyBlbmFibGVkLCBidWZmZXIgaXMgY2xlYXJlZAotICAgIGFnZW50LlN0YXJ0QWdlbnRUcmFjaW5nKG9wdGlvbnMsIGNhdGVnb3JpZXMpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwZXJtaXR0ZWRfZmlsZXNbRlRfVFJBQ0VfT05dLCAiMSIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwZXJtaXR0ZWRfZmlsZXNbRlRfVFJBQ0VdLCAiIikKLQotICAgICMgZmlsbCBpbiBmaWxlIHdpdGggZHVtbXkgY29udGVudHMKLSAgICBkdW1teV90cmFjZSA9ICJ0cmFjZV9jb250ZW50cyIKLSAgICBwZXJtaXR0ZWRfZmlsZXNbRlRfVFJBQ0VdID0gZHVtbXlfdHJhY2UKLQotICAgICMgY29uZmlybSB0cmFjaW5nIGlzIGRpc2FibGVkCi0gICAgYWdlbnQuU3RvcEFnZW50VHJhY2luZygpCi0gICAgYWdlbnQuR2V0UmVzdWx0cygpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwZXJtaXR0ZWRfZmlsZXNbRlRfVFJBQ0VfT05dLCAiMCIpCi0KLSAgICAjIGNvbmZpcm0gdHJhY2UgaXMgZXhwZWN0ZWQsIGFuZCByZWFkIGZyb20gZnMKLSAgICBzZWxmLmFzc2VydEVxdWFsKGFnZW50LkdldFJlc3VsdHMoKS5yYXdfZGF0YSwgZHVtbXlfdHJhY2UpCi0KLSAgICAjIGNvbmZpcm0gYnVmZmVyIHNpemUgaXMgcmVzZXQgdG8gMQotICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVybWl0dGVkX2ZpbGVzW0ZUX0JVRkZFUl9TSVpFXSwgIjEiKQotCi0gIEBkZWNvcmF0b3JzLkhvc3RPbmx5VGVzdAotICBkZWYgdGVzdF90cmFjaW5nX2V2ZW50X2VuYWJsZV9kaXNhYmxlKHNlbGYpOgotICAgICMgdHVybiBvbiBpcnEgdHJhY2luZwotICAgIGlwaV9ldmVudF9wYXRoID0gRlRfRVZFTlRfRElSICsgImlwaS9lbmFibGUiCi0gICAgaXJxX2V2ZW50X3BhdGggPSBGVF9FVkVOVF9ESVIgKyAiaXJxL2VuYWJsZSIKLSAgICBwZXJtaXR0ZWRfZmlsZXMgPSB7Ci0gICAgICBpcGlfZXZlbnRfcGF0aDogIjAiLAotICAgICAgaXJxX2V2ZW50X3BhdGg6ICIwIgotICAgIH0KLSAgICBpb19pbnRlcmZhY2UgPSBtYWtlX3Rlc3RfaW9faW50ZXJmYWNlKHBlcm1pdHRlZF9maWxlcykKLSAgICBzeXN0cmFjZV9jbWQgPSBTWVNUUkFDRV9IT1NUX0NNRF9ERUZBVUxUICsgWyJpcnEiXQotICAgIG9wdGlvbnMsIGNhdGVnb3JpZXMgPSBydW5fc3lzdHJhY2UucGFyc2Vfb3B0aW9ucyhzeXN0cmFjZV9jbWQpCi0gICAgb3B0aW9ucy5mdHJhY2VfY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXMKLSAgICBhZ2VudCA9IGZ0cmFjZV9hZ2VudC5GdHJhY2VBZ2VudChpb19pbnRlcmZhY2UpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChbJ2lycSddLCBhZ2VudC5fYXZhaWxfY2F0ZWdvcmllcygpKQotCi0gICAgIyBjb25maXJtIGFsbCB0aGUgZXZlbnQgbm9kZXMgYXJlIHR1cm5lZCBvbiBkdXJpbmcgdHJhY2luZwotICAgIGFnZW50LlN0YXJ0QWdlbnRUcmFjaW5nKG9wdGlvbnMpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwZXJtaXR0ZWRfZmlsZXNbaXJxX2V2ZW50X3BhdGhdLCAiMSIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwZXJtaXR0ZWRfZmlsZXNbaXBpX2V2ZW50X3BhdGhdLCAiMSIpCi0KLSAgICAjIGFuZCB0aGVuIHR1cm5lZCBvZmYgd2hlbiBjb21wbGV0ZWQuCi0gICAgYWdlbnQuU3RvcEFnZW50VHJhY2luZygpCi0gICAgYWdlbnQuR2V0UmVzdWx0cygpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwZXJtaXR0ZWRfZmlsZXNbaXJxX2V2ZW50X3BhdGhdLCAiMCIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChwZXJtaXR0ZWRfZmlsZXNbaXBpX2V2ZW50X3BhdGhdLCAiMCIpCi0KLSAgQGRlY29yYXRvcnMuSG9zdE9ubHlUZXN0Ci0gIGRlZiB0ZXN0X2J1ZmZlcl9zaXplKHNlbGYpOgotICAgIHN5c3RyYWNlX2NtZCA9IFNZU1RSQUNFX0hPU1RfQ01EX0RFRkFVTFQgKyBbJy1iJywgJzE2MDAwJ10KLSAgICBvcHRpb25zLCBjYXRlZ29yaWVzID0gcnVuX3N5c3RyYWNlLnBhcnNlX29wdGlvbnMoc3lzdHJhY2VfY21kKQotICAgIGFnZW50ID0gZnRyYWNlX2FnZW50LkZ0cmFjZUFnZW50KCkKLSAgICBhZ2VudC5fY29uZmlnID0gb3B0aW9ucwotICAgIGFnZW50Ll9jb25maWcuYXRyYWNlX2NhdGVnb3JpZXMgPSBjYXRlZ29yaWVzCi0gICAgc2VsZi5hc3NlcnRFcXVhbChhZ2VudC5fZ2V0X3RyYWNlX2J1ZmZlcl9zaXplKCksIDE2MDAwKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICBsb2dnaW5nLmdldExvZ2dlcigpLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0gIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90cmFjaW5nX2FnZW50cy93YWx0X2FnZW50LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvd2FsdF9hZ2VudC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJkODRiNS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90cmFjaW5nX2FnZW50cy93YWx0X2FnZW50LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IHB5X3V0aWxzCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCB0aHJlYWRpbmcKLQotZnJvbSBkZXZpbC5hbmRyb2lkIGltcG9ydCBkZXZpY2VfdXRpbHMKLWZyb20gc3lzdHJhY2UgaW1wb3J0IHRyYWNlX3Jlc3VsdAotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2luZ19hZ2VudHMKLWZyb20gcHlfdHJhY2VfZXZlbnQgaW1wb3J0IHRyYWNlX3RpbWUgYXMgdHJhY2VfdGltZV9tb2R1bGUKLQotVFJBQ0VfRklMRV9QQVRIID0gXAotICAgICcvc2RjYXJkL0FuZHJvaWQvZGF0YS9vcmcuY2hyb21pdW0ubGF0ZW5jeS53YWx0L2ZpbGVzL3RyYWNlLnR4dCcKLQotQ0xPQ0tfRE9NQUlOX01BUktFUiA9ICcjIGNsb2NrX3R5cGU9TElOVVhfQ0xPQ0tfTU9OT1RPTklDXG4nCi0KLQotZGVmIHRyeV9jcmVhdGVfYWdlbnQob3B0aW9ucyk6Ci0gIGlmIG9wdGlvbnMuaXNfd2FsdF9lbmFibGVkOgotICAgIHJldHVybiBXYWx0QWdlbnQoKQotICByZXR1cm4gTm9uZQotCi0KLWNsYXNzIFdhbHRDb25maWcodHJhY2luZ19hZ2VudHMuVHJhY2luZ0NvbmZpZyk6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZpY2Vfc2VyaWFsX251bWJlciwgaXNfd2FsdF9lbmFibGVkKToKLSAgICB0cmFjaW5nX2FnZW50cy5UcmFjaW5nQ29uZmlnLl9faW5pdF9fKHNlbGYpCi0gICAgc2VsZi5kZXZpY2Vfc2VyaWFsX251bWJlciA9IGRldmljZV9zZXJpYWxfbnVtYmVyCi0gICAgc2VsZi5pc193YWx0X2VuYWJsZWQgPSBpc193YWx0X2VuYWJsZWQKLQotCi1kZWYgYWRkX29wdGlvbnMocGFyc2VyKToKLSAgb3B0aW9ucyA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgJ1dBTFQgdHJhY2Ugb3B0aW9ucycpCi0gIG9wdGlvbnMuYWRkX29wdGlvbignLS13YWx0JywgZGVzdD0naXNfd2FsdF9lbmFibGVkJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nVXNlIHRoZSBXQUxUIHRyYWNpbmcgYWdlbnQuICcKLSAgICAgICAgICAgICAgICAgICAgJ1dBTFQgaXMgYSBkZXZpY2UgZm9yIG1lYXN1cmluZyBsYXRlbmN5IG9mIHBoeXNpY2FsICcKLSAgICAgICAgICAgICAgICAgICAgJ3NlbnNvcnMgb24gcGhvbmVzIGFuZCBjb21wdXRlcnMuICcKLSAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL3dhbHQnKQotICByZXR1cm4gb3B0aW9ucwotCi0KLWRlZiBnZXRfY29uZmlnKG9wdGlvbnMpOgotICByZXR1cm4gV2FsdENvbmZpZyhvcHRpb25zLmRldmljZV9zZXJpYWxfbnVtYmVyLCBvcHRpb25zLmlzX3dhbHRfZW5hYmxlZCkKLQotCi1jbGFzcyBXYWx0QWdlbnQodHJhY2luZ19hZ2VudHMuVHJhY2luZ0FnZW50KToKLSAgIiIiCi0gIFRoaXMgdHJhY2luZyBhZ2VudCByZXF1aXJlcyB0aGUgV0FMVCBhcHAgdG8gYmUgaW5zdGFsbGVkIG9uIHRoZSBBbmRyb2lkIHBob25lLAotICBhbmQgcmVxdWlyZXMgdGhlIFdBTFQgZGV2aWNlIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBwaG9uZS4gV0FMVCBpcyBhIGRldmljZQotICBmb3IgbWVhc3VyaW5nIGxhdGVuY3kgb2YgcGh5c2ljYWwgc2Vuc29ycyBhbmQgb3V0cHV0cyBvbiBwaG9uZXMgYW5kCi0gIGNvbXB1dGVycy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvd2FsdAotICAiIiIKLSAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgIHN1cGVyKFdhbHRBZ2VudCwgc2VsZikuX19pbml0X18oKQotICAgIHNlbGYuX3RyYWNlX2NvbnRlbnRzID0gTm9uZQotICAgIHNlbGYuX2NvbmZpZyA9IE5vbmUKLSAgICBzZWxmLl9kZXZpY2VfdXRpbHMgPSBOb25lCi0gICAgc2VsZi5fY2xvY2tfc3luY19tYXJrZXIgPSBOb25lCi0gICAgc2VsZi5fY29sbGVjdGlvbl90aHJlYWQgPSBOb25lCi0KLSAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgIHJldHVybiAnV2FsdEFnZW50JwotCi0gIEBweV91dGlscy5UaW1lb3V0KHRyYWNpbmdfYWdlbnRzLlNUQVJUX1NUT1BfVElNRU9VVCkKLSAgZGVmIFN0YXJ0QWdlbnRUcmFjaW5nKHNlbGYsIGNvbmZpZywgdGltZW91dD1Ob25lKToKLSAgICBkZWwgdGltZW91dCAgIyB1bnVzZWQKLSAgICBzZWxmLl9jb25maWcgPSBjb25maWcKLSAgICBzZWxmLl9kZXZpY2VfdXRpbHMgPSBkZXZpY2VfdXRpbHMuRGV2aWNlVXRpbHMoCi0gICAgICAgIHNlbGYuX2NvbmZpZy5kZXZpY2Vfc2VyaWFsX251bWJlcikKLSAgICBpZiBzZWxmLl9kZXZpY2VfdXRpbHMuUGF0aEV4aXN0cyhUUkFDRV9GSUxFX1BBVEgpOgotICAgICAgIyBjbGVhciBvbGQgdHJhY2UgZXZlbnRzIHNvIHRoZXkgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgY3VycmVudCB0cmFjZQotICAgICAgc2VsZi5fZGV2aWNlX3V0aWxzLldyaXRlRmlsZShUUkFDRV9GSUxFX1BBVEgsICcnKQotICAgIHJldHVybiBUcnVlCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuU1RBUlRfU1RPUF9USU1FT1VUKQotICBkZWYgU3RvcEFnZW50VHJhY2luZyhzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgICIiIlN0b3BzIHRyYWNpbmcgYW5kIHN0YXJ0cyBjb2xsZWN0aW5nIHJlc3VsdHMuCi0KLSAgICBUbyBzeW5jaHJvbm91c2x5IHJldHJpZXZlIHRoZSByZXN1bHRzIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwKLSAgICBjYWxsIEdldFJlc3VsdHMoKS4KLSAgICAiIiIKLSAgICBkZWwgdGltZW91dCAgIyB1bnVzZWQKLSAgICBzZWxmLl9jb2xsZWN0aW9uX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQoCi0gICAgICAgIHRhcmdldD1zZWxmLl9jb2xsZWN0X3RyYWNlX2RhdGEpCi0gICAgc2VsZi5fY29sbGVjdGlvbl90aHJlYWQuc3RhcnQoKQotICAgIHJldHVybiBUcnVlCi0KLSAgZGVmIF9jb2xsZWN0X3RyYWNlX2RhdGEoc2VsZik6Ci0gICAgc2VsZi5fdHJhY2VfY29udGVudHMgPSBzZWxmLl9kZXZpY2VfdXRpbHMuUmVhZEZpbGUoVFJBQ0VfRklMRV9QQVRIKQotCi0gIGRlZiBTdXBwb3J0c0V4cGxpY2l0Q2xvY2tTeW5jKHNlbGYpOgotICAgIHJldHVybiBUcnVlCi0KLSAgZGVmIFJlY29yZENsb2NrU3luY01hcmtlcihzZWxmLCBzeW5jX2lkLCBkaWRfcmVjb3JkX2Nsb2NrX3N5bmNfY2FsbGJhY2spOgotICAgIGNtZCA9ICdjYXQgL3Byb2MvdGltZXJfbGlzdCB8IGdyZXAgbm93JwotICAgIHQxID0gdHJhY2VfdGltZV9tb2R1bGUuTm93KCkKLSAgICBjb21tYW5kX3Jlc3VsdCA9IHNlbGYuX2RldmljZV91dGlscy5SdW5TaGVsbENvbW1hbmQoY21kLCBzaGVsbD1UcnVlKQotICAgIG5zZWMgPSBjb21tYW5kX3Jlc3VsdFswXS5zcGxpdCgpWzJdCi0gICAgc2VsZi5fY2xvY2tfc3luY19tYXJrZXIgPSBmb3JtYXRfY2xvY2tfc3luY19tYXJrZXIoc3luY19pZCwgbnNlYykKLSAgICBkaWRfcmVjb3JkX2Nsb2NrX3N5bmNfY2FsbGJhY2sodDEsIHN5bmNfaWQpCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuR0VUX1JFU1VMVFNfVElNRU9VVCkKLSAgZGVmIEdldFJlc3VsdHMoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICBkZWwgdGltZW91dCAgIyB1bnVzZWQKLSAgICBzZWxmLl9jb2xsZWN0aW9uX3RocmVhZC5qb2luKCkKLSAgICBzZWxmLl9jb2xsZWN0aW9uX3RocmVhZCA9IE5vbmUKLSAgICByZXR1cm4gdHJhY2VfcmVzdWx0LlRyYWNlUmVzdWx0KCd3YWx0VHJhY2UnLCBzZWxmLl9nZXRfdHJhY2VfcmVzdWx0KCkpCi0KLSAgZGVmIF9nZXRfdHJhY2VfcmVzdWx0KHNlbGYpOgotICAgIHJlc3VsdCA9ICcjIHRyYWNlcjogXG4nICsgQ0xPQ0tfRE9NQUlOX01BUktFUiArIHNlbGYuX3RyYWNlX2NvbnRlbnRzCi0gICAgaWYgc2VsZi5fY2xvY2tfc3luY19tYXJrZXIgaXMgbm90IE5vbmU6Ci0gICAgICByZXN1bHQgKz0gc2VsZi5fY2xvY2tfc3luY19tYXJrZXIKLSAgICByZXR1cm4gcmVzdWx0Ci0KLQotZGVmIGZvcm1hdF9jbG9ja19zeW5jX21hcmtlcihzeW5jX2lkLCBuYW5vc2VjX3RpbWUpOgotICByZXR1cm4gKCc8MD4tMCAgKC0tLS0tKSBbMDAxXSAuLi4xICAnICsgc3RyKGZsb2F0KG5hbm9zZWNfdGltZSkgLyAxZTkpCi0gICAgICAgICAgKyAnOiB0cmFjaW5nX21hcmtfd3JpdGU6IHRyYWNlX2V2ZW50X2Nsb2NrX3N5bmM6IG5hbWU9JwotICAgICAgICAgICsgc3luY19pZCArICdcbicpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90cmFjaW5nX2FnZW50cy93YWx0X2FnZW50X3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19hZ2VudHMvd2FsdF9hZ2VudF91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRmY2FmNy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS90cmFjaW5nX2FnZW50cy93YWx0X2FnZW50X3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgZGVjb3JhdG9ycwotZnJvbSBzeXN0cmFjZSBpbXBvcnQgcnVuX3N5c3RyYWNlCi1mcm9tIHN5c3RyYWNlLnRyYWNpbmdfYWdlbnRzIGltcG9ydCB3YWx0X2FnZW50Ci0KLQotY2xhc3MgV2FsdEFnZW50VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICIiIgotICBUaGUgV0FMVCBhZ2VudCBwdWxscyB0aGUgdHJhY2UgbG9nIGZyb20gdGhlIEFuZHJvaWQgcGhvbmUsIGFuZCBkb2VzIG5vdAotICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBXQUxUIGRldmljZSBkaXJlY3RseS4gVGhpcyBtYWtlcyB0aGUgYWdlbnQgbW9yZSBzaW1pbGFyCi0gIHRvIGF0cmFjZSB0aGFuIEJhdHRPci4gU2luY2UgdGhlIGhvc3Qgb25seSBjb25uZWN0cyB0byB0aGUgQW5kcm9pZCBwaG9uZSwKLSAgbW9yZSBleGhhdXN0aXZlIHRlc3Rpbmcgd291bGQgcmVxdWlyZSBtb2NraW5nIERldmljZVV0aWxzLgotICAiIiIKLQotICBAZGVjb3JhdG9ycy5Ib3N0T25seVRlc3QKLSAgZGVmIHRlc3RfY29uc3RydWN0X3dhbHRfYXJncyhzZWxmKToKLSAgICBvcHRpb25zLCBfID0gcnVuX3N5c3RyYWNlLnBhcnNlX29wdGlvbnMoWycuL3J1bl9zeXN0cmFjZS5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS13YWx0J10pCi0gICAgc2VsZi5hc3NlcnRUcnVlKHdhbHRfYWdlbnQuZ2V0X2NvbmZpZyhvcHRpb25zKS5pc193YWx0X2VuYWJsZWQpCi0gICAgb3B0aW9ucywgXyA9IHJ1bl9zeXN0cmFjZS5wYXJzZV9vcHRpb25zKFsnLi9ydW5fc3lzdHJhY2UucHknXSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKHdhbHRfYWdlbnQuZ2V0X2NvbmZpZyhvcHRpb25zKS5pc193YWx0X2VuYWJsZWQpCi0KLSAgQGRlY29yYXRvcnMuSG9zdE9ubHlUZXN0Ci0gIGRlZiB0ZXN0X2Zvcm1hdF9jbG9ja19zeW5jX21hcmtlcihzZWxmKToKLSAgICBhY3R1YWxfbWFya2VyID0gd2FsdF9hZ2VudC5mb3JtYXRfY2xvY2tfc3luY19tYXJrZXIoCi0gICAgICAgICAgICAgICAgICAgICdzb21lX3N5bmNfaWQnLCAxMjM0NTY3ODkwMTIzNCkKLSAgICBleHBlY3RlZF9tYXJrZXIgPSAoJzwwPi0wICAoLS0tLS0pIFswMDFdIC4uLjEgIDEyMzQ1LjY3ODkwMTI6ICcgKwotICAgICAgICAgICAgICAgICAgICAgICAndHJhY2luZ19tYXJrX3dyaXRlOiB0cmFjZV9ldmVudF9jbG9ja19zeW5jOiAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgJ25hbWU9c29tZV9zeW5jX2lkXG4nKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX21hcmtlciwgZXhwZWN0ZWRfbWFya2VyKQotCi0gIEBkZWNvcmF0b3JzLkhvc3RPbmx5VGVzdAotICBkZWYgdGVzdF9nZXRfcmVzdWx0c19zdHJpbmcoc2VsZik6Ci0gICAgYWdlbnQgPSB3YWx0X2FnZW50LldhbHRBZ2VudCgpCi0gICAgYWdlbnQuX3RyYWNlX2NvbnRlbnRzID0gJzx0cmFjZSBjb250ZW50cyBoZXJlPlxuJwotICAgIGFnZW50Ll9jbG9ja19zeW5jX21hcmtlciA9ICc8Y2xvY2sgc3luYyBtYXJrZXIgaGVyZT5cbicKLSAgICByZXN1bHQgPSBhZ2VudC5fZ2V0X3RyYWNlX3Jlc3VsdCgpCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LCAnIyB0cmFjZXI6IFxuIyBjbG9ja190eXBlPUxJTlVYX0NMT0NLX01PTk9UT05JQ1xuJwotICAgICAgICAgICAgICAgICAgICAgICc8dHJhY2UgY29udGVudHMgaGVyZT5cbjxjbG9jayBzeW5jIG1hcmtlciBoZXJlPlxuJykKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgbG9nZ2luZy5nZXRMb2dnZXIoKS5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19jb250cm9sbGVyLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdHJhY2luZ19jb250cm9sbGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGQyZDdjLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3N5c3RyYWNlL3N5c3RyYWNlL3RyYWNpbmdfY29udHJvbGxlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDMwNiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0nJydUcmFjaW5nIGNvbnRyb2xsZXIgY2xhc3MuIFRoaXMgY2xhc3MgbWFuYWdlcwotbXVsdGlwbGUgdHJhY2luZyBhZ2VudHMgYW5kIGNvbGxlY3RzIGRhdGEgZnJvbSBhbGwgb2YgdGhlbS4gSXQgYWxzbwotbWFuYWdlcyB0aGUgY2xvY2sgc3luYyBwcm9jZXNzLgotJycnCi0KLWltcG9ydCBhc3QKLWltcG9ydCBqc29uCi1pbXBvcnQgc3lzCi1pbXBvcnQgcHlfdXRpbHMKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHV1aWQKLQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdHJhY2VfcmVzdWx0Ci1mcm9tIHN5c3RyYWNlIGltcG9ydCB0cmFjaW5nX2FnZW50cwotZnJvbSBweV90cmFjZV9ldmVudCBpbXBvcnQgdHJhY2VfZXZlbnQKLQotCi1UUkFDRV9EQVRBX0NPTlRST0xMRVJfTkFNRSA9ICdzeXN0cmFjZUNvbnRyb2xsZXInCi0KLQotZGVmIENvbnRyb2xsZXJBZ2VudENsb2NrU3luYyhpc3N1ZV90cywgbmFtZSk6Ci0gICIiIlJlY29yZCB0aGUgY2xvY2sgc3luYyBtYXJrZXIgZm9yIGNvbnRyb2xsZXIgdHJhY2luZyBhZ2VudC4KLQotICBVbmxpa2Ugd2l0aCB0aGUgb3RoZXIgdHJhY2luZyBhZ2VudHMsIHRoZSB0cmFjaW5nIGNvbnRyb2xsZXIgc2hvdWxkIG5vdAotICBjYWxsIHRoaXMgZGlyZWN0bHkuIFJhdGhlciwgaXQgaXMgY2FsbGVkIHZpYSBjYWxsYmFjayBmcm9tIHRoZSBvdGhlcgotICB0cmFjaW5nIGFnZW50cyB3aGVuIHRoZXkgd3JpdGUgYSB0cmFjZS4KLSAgIiIiCi0gIHRyYWNlX2V2ZW50LmNsb2NrX3N5bmMobmFtZSwgaXNzdWVfdHM9aXNzdWVfdHMpCi0KLQotY2xhc3MgVHJhY2luZ0NvbnRyb2xsZXJBZ2VudCh0cmFjaW5nX2FnZW50cy5UcmFjaW5nQWdlbnQpOgotICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgc3VwZXIoVHJhY2luZ0NvbnRyb2xsZXJBZ2VudCwgc2VsZikuX19pbml0X18oKQotICAgIHNlbGYuX2xvZ19wYXRoID0gTm9uZQotCi0gIEBweV91dGlscy5UaW1lb3V0KHRyYWNpbmdfYWdlbnRzLlNUQVJUX1NUT1BfVElNRU9VVCkKLSAgZGVmIFN0YXJ0QWdlbnRUcmFjaW5nKHNlbGYsIGNvbmZpZywgdGltZW91dD1Ob25lKToKLSAgICAiIiJTdGFydCB0cmFjaW5nIGZvciB0aGUgY29udHJvbGxlciB0cmFjaW5nIGFnZW50LgotCi0gICAgU3RhcnQgdHJhY2luZyBmb3IgdGhlIGNvbnRyb2xsZXIgdHJhY2luZyBhZ2VudC4gTm90ZSB0aGF0Ci0gICAgdGhlIHRyYWNpbmcgY29udHJvbGxlciByZWNvcmRzIHRoZSAiY29udHJvbGxlciBzaWRlIgotICAgIG9mIHRoZSBjbG9jayBzeW5jIHJlY29yZHMsIGFuZCBub3RoaW5nIGVsc2UuCi0gICAgIiIiCi0gICAgZGVsIGNvbmZpZwotICAgIGlmIG5vdCB0cmFjZV9ldmVudC50cmFjZV9jYW5fZW5hYmxlKCk6Ci0gICAgICByYWlzZSBSdW50aW1lRXJyb3IsICgnQ2Fubm90IGVuYWJsZSB0cmFjZV9ldmVudDsnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnIGVuc3VyZSBweV91dGlscyBpcyBpbiBQWVRIT05QQVRIJykKLQotICAgIGNvbnRyb2xsZXJfbG9nX2ZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlKQotICAgIHNlbGYuX2xvZ19wYXRoID0gY29udHJvbGxlcl9sb2dfZmlsZS5uYW1lCi0gICAgY29udHJvbGxlcl9sb2dfZmlsZS5jbG9zZSgpCi0gICAgdHJhY2VfZXZlbnQudHJhY2VfZW5hYmxlKHNlbGYuX2xvZ19wYXRoKQotICAgIHJldHVybiBUcnVlCi0KLSAgQHB5X3V0aWxzLlRpbWVvdXQodHJhY2luZ19hZ2VudHMuU1RBUlRfU1RPUF9USU1FT1VUKQotICBkZWYgU3RvcEFnZW50VHJhY2luZyhzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgICIiIlN0b3BzIHRyYWNpbmcgZm9yIHRoZSBjb250cm9sbGVyIHRyYWNpbmcgYWdlbnQuCi0gICAgIiIiCi0gICAgIyBweWxpbnQ6IGRpc2FibGU9bm8tc2VsZi11c2UKLSAgICAjIFRoaXMgZnVuY3Rpb24gZG9lc24ndCB1c2Ugc2VsZiwgYnV0IG1ha2luZyBpdCBhIG1lbWJlciBmdW5jdGlvbgotICAgICMgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIFRyYWNpbmdBZ2VudHMKLSAgICB0cmFjZV9ldmVudC50cmFjZV9kaXNhYmxlKCkKLSAgICByZXR1cm4gVHJ1ZQotCi0gIEBweV91dGlscy5UaW1lb3V0KHRyYWNpbmdfYWdlbnRzLkdFVF9SRVNVTFRTX1RJTUVPVVQpCi0gIGRlZiBHZXRSZXN1bHRzKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgIiIiR2V0cyB0aGUgbG9nIG91dHB1dCBmcm9tIHRoZSBjb250cm9sbGVyIHRyYWNpbmcgYWdlbnQuCi0KLSAgICBUaGlzIG91dHB1dCBvbmx5IGNvbnRhaW5zIHRoZSAiY29udHJvbGxlciBzaWRlIiBvZiB0aGUgY2xvY2sgc3luYyByZWNvcmRzLgotICAgICIiIgotICAgIHdpdGggb3BlbihzZWxmLl9sb2dfcGF0aCwgJ3InKSBhcyBvdXRmaWxlOgotICAgICAgZGF0YSA9IGFzdC5saXRlcmFsX2V2YWwob3V0ZmlsZS5yZWFkKCkgKyAnXScpCi0gICAgIyBFeHBsaWNpdGx5IHNldCBpdHMgb3duIGNsb2NrIGRvbWFpbi4gVGhpcyB3aWxsIHN0b3AgdGhlIFN5c3RyYWNlIGNsb2NrCi0gICAgIyBkb21haW4gZnJvbSBpbmNvcnJlY3RseSBiZWluZyBjb2xsYXBzZWQgaW50byB0aGUgb24gZGV2aWNlIGNsb2NrIGRvbWFpbi4KLSAgICBmb3JtYXR0ZWRfZGF0YSA9IHsKLSAgICAgICAgJ3RyYWNlRXZlbnRzJzogZGF0YSwKLSAgICAgICAgJ21ldGFkYXRhJzogewotICAgICAgICAgICAgJ2Nsb2NrLWRvbWFpbic6ICdTWVNUUkFDRScsCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRyYWNlX3Jlc3VsdC5UcmFjZVJlc3VsdChUUkFDRV9EQVRBX0NPTlRST0xMRVJfTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24uZHVtcHMoZm9ybWF0dGVkX2RhdGEpKQotCi0gIGRlZiBTdXBwb3J0c0V4cGxpY2l0Q2xvY2tTeW5jKHNlbGYpOgotICAgICIiIlJldHVybnMgd2hldGhlciB0aGlzIHN1cHBvcnRzIGV4cGxpY2l0IGNsb2NrIHN5bmMuCi0gICAgQWx0aG91Z2ggdGhlIHRyYWNpbmcgY29udHJvbGxlciBjb25jZXB0dWFsbHkgc3VwcG9ydHMgZXhwbGljaXQgY2xvY2sKLSAgICBzeW5jLCBpdCBpcyBub3QgYW4gYWdlbnQgY29udHJvbGxlZCBieSBvdGhlciBjb250cm9sbGVycyBzbyBpdCBkb2VzIG5vdAotICAgIGRlZmluZSBSZWNvcmRDbG9ja1N5bmNNYXJrZXIgKHJhdGhlciwgdGhlIHJlY29yZGluZyBvZiB0aGUgImNvbnRyb2xsZXIKLSAgICBzaWRlIiBvZiB0aGUgY2xvY2sgc3luYyBtYXJrZXIgaXMgZG9uZSBpbiBfSXNzdWVDbG9ja1N5bmNNYXJrZXIpLiBUaHVzLAotICAgIFN1cHBvcnRzRXhwbGljaXRDbG9ja1N5bmMgbXVzdCByZXR1cm4gZmFsc2UuCi0gICAgIiIiCi0gICAgcmV0dXJuIEZhbHNlCi0KLSAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci0gIGRlZiBSZWNvcmRDbG9ja1N5bmNNYXJrZXIoc2VsZiwgc3luY19pZCwgY2FsbGJhY2spOgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotY2xhc3MgVHJhY2luZ0NvbnRyb2xsZXIob2JqZWN0KToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGFnZW50c193aXRoX2NvbmZpZywgY29udHJvbGxlcl9jb25maWcpOgotICAgICIiIkNyZWF0ZSB0cmFjaW5nIGNvbnRyb2xsZXIuCi0KLSAgICBDcmVhdGUgYSB0cmFjaW5nIGNvbnRyb2xsZXIgb2JqZWN0LiBOb3RlIHRoYXQgdGhlIHRyYWNpbmcKLSAgICBjb250cm9sbGVyIGlzIGFsc28gYSB0cmFjaW5nIGFnZW50LgotCi0gICAgQXJnczoKLSAgICAgICBhZ2VudHNfd2l0aF9jb25maWc6IExpc3Qgb2YgdHJhY2luZyBhZ2VudHMgZm9yIHRoaXMgY29udHJvbGxlciB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0cmFjaW5nIGNvbmZpZ3VyYXRpb24gb2JqZWN0cy4KLSAgICAgICBjb250cm9sbGVyX2NvbmZpZzogIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRyYWNpbmcgY29udHJvbGxlci4KLSAgICAiIiIKLSAgICBzZWxmLl9jaGlsZF9hZ2VudHMgPSBOb25lCi0gICAgc2VsZi5fY2hpbGRfYWdlbnRzX3dpdGhfY29uZmlnID0gYWdlbnRzX3dpdGhfY29uZmlnCi0gICAgc2VsZi5fY29udHJvbGxlcl9hZ2VudCA9IFRyYWNpbmdDb250cm9sbGVyQWdlbnQoKQotICAgIHNlbGYuX2NvbnRyb2xsZXJfY29uZmlnID0gY29udHJvbGxlcl9jb25maWcKLSAgICBzZWxmLl90cmFjZV9pbl9wcm9ncmVzcyA9IEZhbHNlCi0gICAgc2VsZi5hbGxfcmVzdWx0cyA9IE5vbmUKLQotICBAcHJvcGVydHkKLSAgZGVmIGdldF9jaGlsZF9hZ2VudHMoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX2NoaWxkX2FnZW50cwotCi0gIGRlZiBTdGFydFRyYWNpbmcoc2VsZik6Ci0gICAgIiIiU3RhcnQgdHJhY2luZyBmb3IgYWxsIHRyYWNpbmcgYWdlbnRzLgotCi0gICAgVGhpcyBmdW5jdGlvbiBzdGFydHMgdHJhY2luZyBmb3IgYm90aCB0aGUgY29udHJvbGxlciB0cmFjaW5nIGFnZW50Ci0gICAgYW5kIHRoZSBjaGlsZCB0cmFjaW5nIGFnZW50cy4KLQotICAgIFJldHVybnM6Ci0gICAgICAgIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RhcnQgdHJhY2luZyBzdWNjZWVkZWQuCi0gICAgICAgIFN0YXJ0IHRyYWNpbmcgaXMgY29uc2lkZXJlZCBzdWNjZXNzZnVsIGlmIGF0IGxlYXN0IHRoZQotICAgICAgICBjb250cm9sbGVyIHRyYWNpbmcgYWdlbnQgd2FzIHN0YXJ0ZWQuCi0gICAgIiIiCi0gICAgYXNzZXJ0IG5vdCBzZWxmLl90cmFjZV9pbl9wcm9ncmVzcywgJ1RyYWNlIGFscmVhZHkgaW4gcHJvZ3Jlc3MuJwotICAgIHNlbGYuX3RyYWNlX2luX3Byb2dyZXNzID0gVHJ1ZQotCi0gICAgIyBTdGFydCB0aGUgY29udHJvbGxlciB0cmFjaW5nIGFnZW50cy4gQ29udHJvbGxlciB0cmFjaW5nIGFnZW50Ci0gICAgIyBtdXN0IGJlIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5IHRvIHByb2NlZWQuCi0gICAgaWYgbm90IHNlbGYuX2NvbnRyb2xsZXJfYWdlbnQuU3RhcnRBZ2VudFRyYWNpbmcoCi0gICAgICAgIHNlbGYuX2NvbnRyb2xsZXJfY29uZmlnLAotICAgICAgICB0aW1lb3V0PXNlbGYuX2NvbnRyb2xsZXJfY29uZmlnLnRpbWVvdXQpOgotICAgICAgcHJpbnQgJ1VuYWJsZSB0byBzdGFydCBjb250cm9sbGVyIHRyYWNpbmcgYWdlbnQuJwotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAjIFN0YXJ0IHRoZSBjaGlsZCB0cmFjaW5nIGFnZW50cy4KLSAgICBzdWNjX2FnZW50cyA9IFtdCi0gICAgZm9yIGFnZW50X2FuZF9jb25maWcgaW4gc2VsZi5fY2hpbGRfYWdlbnRzX3dpdGhfY29uZmlnOgotICAgICAgYWdlbnQgPSBhZ2VudF9hbmRfY29uZmlnLmFnZW50Ci0gICAgICBjb25maWcgPSBhZ2VudF9hbmRfY29uZmlnLmNvbmZpZwotICAgICAgaWYgYWdlbnQuU3RhcnRBZ2VudFRyYWNpbmcoY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1zZWxmLl9jb250cm9sbGVyX2NvbmZpZy50aW1lb3V0KToKLSAgICAgICAgc3VjY19hZ2VudHMuYXBwZW5kKGFnZW50KQotICAgICAgZWxzZToKLSAgICAgICAgcHJpbnQgJ0FnZW50ICVzIG5vdCBzdGFydGVkLicgJSBzdHIoYWdlbnQpCi0KLSAgICAjIFByaW50IHdhcm5pbmcgaWYgYWxsIGFnZW50cyBub3Qgc3RhcnRlZC4KLSAgICBuYSA9IGxlbihzZWxmLl9jaGlsZF9hZ2VudHNfd2l0aF9jb25maWcpCi0gICAgbnMgPSBsZW4oc3VjY19hZ2VudHMpCi0gICAgaWYgbnMgPCBuYToKLSAgICAgIHByaW50ICdXYXJuaW5nOiBPbmx5ICVkIG9mICVkIHRyYWNpbmcgYWdlbnRzIHN0YXJ0ZWQuJyAlIChucywgbmEpCi0gICAgc2VsZi5fY2hpbGRfYWdlbnRzID0gc3VjY19hZ2VudHMKLSAgICByZXR1cm4gVHJ1ZQotCi0gIGRlZiBTdG9wVHJhY2luZyhzZWxmKToKLSAgICAiIiJJc3N1ZSBjbG9jayBzeW5jIG1hcmtlciBhbmQgc3RvcCB0cmFjaW5nIGZvciBhbGwgdHJhY2luZyBhZ2VudHMuCi0KLSAgICBUaGlzIGZ1bmN0aW9uIHN0b3BzIGJvdGggdGhlIGNvbnRyb2xsZXIgdHJhY2luZyBhZ2VudAotICAgIGFuZCB0aGUgY2hpbGQgdHJhY2luZyBhZ2VudHMuIEl0IGlzc3VlcyBhIGNsb2NrIHN5bmMgbWFya2VyIHByaW9yCi0gICAgdG8gc3RvcHBpbmcgdHJhY2luZy4KLQotICAgIFJldHVybnM6Ci0gICAgICAgIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RvcCB0cmFjaW5nIHN1Y2NlZWRlZAotICAgICAgICBmb3IgYWxsIGFnZW50cy4KLSAgICAiIiIKLSAgICBhc3NlcnQgc2VsZi5fdHJhY2VfaW5fcHJvZ3Jlc3MsICdObyB0cmFjZSBpbiBwcm9ncmVzcy4nCi0gICAgc2VsZi5fdHJhY2VfaW5fcHJvZ3Jlc3MgPSBGYWxzZQotCi0gICAgIyBJc3N1ZSB0aGUgY2xvY2sgc3luYyBtYXJrZXIgYW5kIHN0b3AgdGhlIGNoaWxkIHRyYWNpbmcgYWdlbnRzLgotICAgIHNlbGYuX0lzc3VlQ2xvY2tTeW5jTWFya2VyKCkKLSAgICBzdWNjX2FnZW50cyA9IFtdCi0gICAgZm9yIGFnZW50IGluIHNlbGYuX2NoaWxkX2FnZW50czoKLSAgICAgIGlmIGFnZW50LlN0b3BBZ2VudFRyYWNpbmcodGltZW91dD1zZWxmLl9jb250cm9sbGVyX2NvbmZpZy50aW1lb3V0KToKLSAgICAgICAgc3VjY19hZ2VudHMuYXBwZW5kKGFnZW50KQotICAgICAgZWxzZToKLSAgICAgICAgcHJpbnQgJ0FnZW50ICVzIG5vdCBzdG9wcGVkLicgJSBzdHIoYWdlbnQpCi0KLSAgICAjIFN0b3AgdGhlIGNvbnRyb2xsZXIgdHJhY2luZyBhZ2VudC4gQ29udHJvbGxlciB0cmFjaW5nIGFnZW50Ci0gICAgIyBtdXN0IGJlIHN0b3BwZWQgc3VjY2Vzc2Z1bGx5IHRvIHByb2NlZWQuCi0gICAgaWYgbm90IHNlbGYuX2NvbnRyb2xsZXJfYWdlbnQuU3RvcEFnZW50VHJhY2luZygKLSAgICAgICAgdGltZW91dD1zZWxmLl9jb250cm9sbGVyX2NvbmZpZy50aW1lb3V0KToKLSAgICAgIHByaW50ICdVbmFibGUgdG8gc3RvcCBjb250cm9sbGVyIHRyYWNpbmcgYWdlbnQuJwotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAjIFByaW50IHdhcm5pbmcgaWYgYWxsIGFnZW50cyBub3Qgc3RvcHBlZC4KLSAgICBuYSA9IGxlbihzZWxmLl9jaGlsZF9hZ2VudHMpCi0gICAgbnMgPSBsZW4oc3VjY19hZ2VudHMpCi0gICAgaWYgbnMgPCBuYToKLSAgICAgIHByaW50ICdXYXJuaW5nOiBPbmx5ICVkIG9mICVkIHRyYWNpbmcgYWdlbnRzIHN0b3BwZWQuJyAlIChucywgbmEpCi0gICAgICBzZWxmLl9jaGlsZF9hZ2VudHMgPSBzdWNjX2FnZW50cwotCi0gICAgIyBDb2xsZWN0IHRoZSByZXN1bHRzIGZyb20gYWxsIHRoZSBzdG9wcGVkIHRyYWNpbmcgYWdlbnRzLgotICAgIGFsbF9yZXN1bHRzID0gW10KLSAgICBmb3IgYWdlbnQgaW4gc2VsZi5fY2hpbGRfYWdlbnRzICsgW3NlbGYuX2NvbnRyb2xsZXJfYWdlbnRdOgotICAgICAgdHJ5OgotICAgICAgICByZXN1bHQgPSBhZ2VudC5HZXRSZXN1bHRzKAotICAgICAgICAgICAgdGltZW91dD1zZWxmLl9jb250cm9sbGVyX2NvbmZpZy5jb2xsZWN0aW9uX3RpbWVvdXQpCi0gICAgICAgIGlmIG5vdCByZXN1bHQ6Ci0gICAgICAgICAgcHJpbnQgJ1dhcm5pbmc6IFRpbWVvdXQgd2hlbiBnZXR0aW5nIHJlc3VsdHMgZnJvbSAlcy4nICUgc3RyKGFnZW50KQotICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHJlc3VsdC5zb3VyY2VfbmFtZSBpbiBbci5zb3VyY2VfbmFtZSBmb3IgciBpbiBhbGxfcmVzdWx0c106Ci0gICAgICAgICAgcHJpbnQgKCdXYXJuaW5nOiBEdXBsaWNhdGUgdHJhY2luZyBhZ2VudHMgbmFtZWQgJXMuJyAlCi0gICAgICAgICAgICAgICAgIHJlc3VsdC5zb3VyY2VfbmFtZSkKLSAgICAgICAgYWxsX3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkKLSAgICAgICMgQ2hlY2sgZm9yIGV4Y2VwdGlvbnMuIElmIGFueSBleGNlcHRpb25zIGFyZSBzZWVuLCByZXJhaXNlIGFuZCBhYm9ydC4KLSAgICAgICMgTm90ZSB0aGF0IGEgdGltZW91dCBleGNlcHRpb24gd2lsbCBiZSBzd2FsbG9lZCBieSB0aGUgdGltZW91dAotICAgICAgIyBtZWNoYW5pc20gYW5kIHdpbGwgbm90IGdldCB0byB0aGF0IHBvaW50IChpdCB3aWxsIHJldHVybiBGYWxzZSBpbnN0ZWFkCi0gICAgICAjIG9mIHRoZSB0cmFjZSByZXN1bHQsIHdoaWNoIHdpbGwgYmUgZGVhbHQgd2l0aCBhYm92ZSkKLSAgICAgIGV4Y2VwdDoKLSAgICAgICAgcHJpbnQgJ1dhcm5pbmc6IEV4Y2VwdGlvbiBnZXR0aW5nIHJlc3VsdHMgZnJvbSAlczonICUgc3RyKGFnZW50KQotICAgICAgICBwcmludCBzeXMuZXhjX2luZm8oKVswXQotICAgICAgICByYWlzZQotICAgIHNlbGYuYWxsX3Jlc3VsdHMgPSBhbGxfcmVzdWx0cwotICAgIHJldHVybiBhbGxfcmVzdWx0cwotCi0gIGRlZiBHZXRUcmFjZVR5cGUoc2VsZik6Ci0gICAgIiIiUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY2hpbGQgYWdlbnRzIHRoYXQgYXJlIGJlaW5nIHRyYWNlZC4iIiIKLSAgICBzb3J0ZWRfYWdlbnRzID0gc29ydGVkKG1hcChzdHIsIHNlbGYuX2NoaWxkX2FnZW50cykpCi0gICAgcmV0dXJuICcgKyAnLmpvaW4oc29ydGVkX2FnZW50cykKLQotICBkZWYgX0lzc3VlQ2xvY2tTeW5jTWFya2VyKHNlbGYpOgotICAgICIiIklzc3VlIGNsb2NrIHN5bmMgbWFya2VycyB0byBhbGwgdGhlIGNoaWxkIHRyYWNpbmcgYWdlbnRzLiIiIgotICAgIGZvciBhZ2VudCBpbiBzZWxmLl9jaGlsZF9hZ2VudHM6Ci0gICAgICBpZiBhZ2VudC5TdXBwb3J0c0V4cGxpY2l0Q2xvY2tTeW5jKCk6Ci0gICAgICAgIHN5bmNfaWQgPSBHZXRVbmlxdWVTeW5jSUQoKQotICAgICAgICBhZ2VudC5SZWNvcmRDbG9ja1N5bmNNYXJrZXIoc3luY19pZCwgQ29udHJvbGxlckFnZW50Q2xvY2tTeW5jKQotCi1kZWYgR2V0VW5pcXVlU3luY0lEKCk6Ci0gICIiIkdldCBhIHVuaXF1ZSBzeW5jIElELgotCi0gIEdldHMgYSB1bmlxdWUgc3luYyBJRCBieSBnZW5lcmF0aW5nIGEgVVVJRCBhbmQgY29udmVydGluZyBpdCB0byBhIHN0cmluZwotICAoc2luY2UgVVVJRHMgYXJlIG5vdCBKU09OIHNlcmlhbGl6YWJsZSkKLSAgIiIiCi0gIHJldHVybiBzdHIodXVpZC51dWlkNCgpKQotCi0KLWNsYXNzIEFnZW50V2l0aENvbmZpZyhvYmplY3QpOgotICBkZWYgX19pbml0X18oc2VsZiwgYWdlbnQsIGNvbmZpZyk6Ci0gICAgc2VsZi5hZ2VudCA9IGFnZW50Ci0gICAgc2VsZi5jb25maWcgPSBjb25maWcKLQotCi1kZWYgQ3JlYXRlQWdlbnRzV2l0aENvbmZpZyhvcHRpb25zLCBtb2R1bGVzKToKLSAgIiIiQ3JlYXRlIHRyYWNpbmcgYWdlbnRzLgotCi0gIFRoaXMgZnVuY3Rpb24gd2lsbCBkZXRlcm1pbmUgd2hpY2ggdHJhY2luZyBhZ2VudHMgYXJlIHZhbGlkIGdpdmVuIHRoZQotICBvcHRpb25zIGFuZCBjcmVhdGUgdGhvc2UgYWdlbnRzIGFsb25nIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uCi0gIG9iamVjdC4KLSAgQXJnczoKLSAgICBvcHRpb25zOiBUaGUgY29tbWFuZC1saW5lIG9wdGlvbnMuCi0gICAgbW9kdWxlczogVGhlIG1vZHVsZXMgZm9yIGVpdGhlciBTeXN0cmFjZSBvciBwcm9maWxlX2Nocm9tZS4KLSAgICAgICAgICAgICBUT0RPKHdhc2hpbmd0b25wKTogQWZ0ZXIgYWxsIHByb2ZpbGVfY2hyb21lIGFnZW50cyBhcmUgaW4KLSAgICAgICAgICAgICBTeXN0cmFjZSwgdGhpcyBwYXJhbWV0ZXIgd2lsbCBubyBsb25nZXIgYmUgdmFsaWQuCi0gIFJldHVybnM6Ci0gICAgQSBsaXN0IG9mIEFnZW50V2l0aENvbmZpZyBvcHRpb25zIGNvbnRhaW5pbmcgYWdlbnRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nCi0gICAgY29uZmlndXJhdGlvbiBvYmplY3QuCi0gICIiIgotICByZXN1bHQgPSBbXQotICBmb3IgbW9kdWxlIGluIG1vZHVsZXM6Ci0gICAgY29uZmlnID0gbW9kdWxlLmdldF9jb25maWcob3B0aW9ucykKLSAgICBhZ2VudCA9IG1vZHVsZS50cnlfY3JlYXRlX2FnZW50KGNvbmZpZykKLSAgICBpZiBhZ2VudCBhbmQgY29uZmlnOgotICAgICAgcmVzdWx0LmFwcGVuZChBZ2VudFdpdGhDb25maWcoYWdlbnQsIGNvbmZpZykpCi0gIHJldHVybiBbeCBmb3IgeCBpbiByZXN1bHQgaWYgeCBhbmQgeC5hZ2VudF0KLQotCi1jbGFzcyBUcmFjaW5nQ29udHJvbGxlckNvbmZpZyh0cmFjaW5nX2FnZW50cy5UcmFjaW5nQ29uZmlnKToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dF9maWxlLCB0cmFjZV90aW1lLCB3cml0ZV9qc29uLAotICAgICAgICAgICAgICAgbGlua19hc3NldHMsIGFzc2V0X2RpciwgdGltZW91dCwgY29sbGVjdGlvbl90aW1lb3V0LAotICAgICAgICAgICAgICAgZGV2aWNlX3NlcmlhbF9udW1iZXIsIHRhcmdldCk6Ci0gICAgdHJhY2luZ19hZ2VudHMuVHJhY2luZ0NvbmZpZy5fX2luaXRfXyhzZWxmKQotICAgIHNlbGYub3V0cHV0X2ZpbGUgPSBvdXRwdXRfZmlsZQotICAgIHNlbGYudHJhY2VfdGltZSA9IHRyYWNlX3RpbWUKLSAgICBzZWxmLndyaXRlX2pzb24gPSB3cml0ZV9qc29uCi0gICAgc2VsZi5saW5rX2Fzc2V0cyA9IGxpbmtfYXNzZXRzCi0gICAgc2VsZi5hc3NldF9kaXIgPSBhc3NldF9kaXIKLSAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0Ci0gICAgc2VsZi5jb2xsZWN0aW9uX3RpbWVvdXQgPSBjb2xsZWN0aW9uX3RpbWVvdXQKLSAgICBzZWxmLmRldmljZV9zZXJpYWxfbnVtYmVyID0gZGV2aWNlX3NlcmlhbF9udW1iZXIKLSAgICBzZWxmLnRhcmdldCA9IHRhcmdldAotCi0KLWRlZiBHZXRDb250cm9sbGVyQ29uZmlnKG9wdGlvbnMpOgotICByZXR1cm4gVHJhY2luZ0NvbnRyb2xsZXJDb25maWcob3B0aW9ucy5vdXRwdXRfZmlsZSwgb3B0aW9ucy50cmFjZV90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy53cml0ZV9qc29uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5saW5rX2Fzc2V0cywgb3B0aW9ucy5hc3NldF9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRpbWVvdXQsIG9wdGlvbnMuY29sbGVjdGlvbl90aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5kZXZpY2Vfc2VyaWFsX251bWJlciwgb3B0aW9ucy50YXJnZXQpCi0KLWRlZiBHZXRDaHJvbWVTdGFydHVwQ29udHJvbGxlckNvbmZpZyhvcHRpb25zKToKLSAgcmV0dXJuIFRyYWNpbmdDb250cm9sbGVyQ29uZmlnKE5vbmUsIG9wdGlvbnMudHJhY2VfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMud3JpdGVfanNvbiwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS91cGRhdGVfc3lzdHJhY2VfdHJhY2Vfdmlld2VyLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdXBkYXRlX3N5c3RyYWNlX3RyYWNlX3ZpZXdlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNzI4NzhhNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS91cGRhdGVfc3lzdHJhY2VfdHJhY2Vfdmlld2VyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBjb2RlY3MKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi0KLV9DQVRBUFVMVF9QQVRIID0gb3MucGF0aC5hYnNwYXRoKAotICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBvcy5wYXRoLnBhcmRpciwgb3MucGF0aC5wYXJkaXIpKQotc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguam9pbihfQ0FUQVBVTFRfUEFUSCwgJ3RyYWNpbmcnKSkKLQotZnJvbSB0cmFjaW5nX2J1aWxkIGltcG9ydCB2dWxjYW5pemVfdHJhY2Vfdmlld2VyCi0KLQotU1lTVFJBQ0VfVFJBQ0VfVklFV0VSX0hUTUxfRklMRSA9IG9zLnBhdGguam9pbigKLSAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSksCi0gICAgJ3N5c3RyYWNlX3RyYWNlX3ZpZXdlci5odG1sJykKLUNBVEFQVUxUX1JFVl8gPSAnQ0FUQVBVTFRfUkVWJwotTk9fQVVUT19VUERBVEVfID0gJ05PX0FVVE9fVVBEQVRFJwotVU5LTk9XTl9SRVZJU0lPTl8gPSAnVU5LTk9XTicKLQotCi1kZWYgY3JlYXRlX2NhdGFwdWx0X3Jldl9zdHJfKHJldmlzaW9uKToKLSAgcmV0dXJuICc8IS0tJyArIENBVEFQVUxUX1JFVl8gKyAnPScgKyBzdHIocmV2aXNpb24pICsgJy0tPicKLQotCi1kZWYgZ2V0X2NhdGFwdWx0X3Jldl9pbl9maWxlXyhodG1sX2ZpbGUpOgotICBhc3NlcnQgb3MucGF0aC5leGlzdHMoaHRtbF9maWxlKQotICByZXYgPSAnJwotICB3aXRoIG9wZW4oaHRtbF9maWxlLCAncicpIGFzIGY6Ci0gICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCi0gICAgZm9yIGxpbmUgaW4gbGluZXNbOjotMV06Ci0gICAgICBpZiBDQVRBUFVMVF9SRVZfIGluIGxpbmU6Ci0gICAgICAgIHRva2VucyA9IGxpbmUuc3BsaXQoQ0FUQVBVTFRfUkVWXykKLSAgICAgICAgcmV2ID0gcmUuc3ViKHInWz1cLT5dJywgJycsIHRva2Vuc1sxXSkuc3RyaXAoKQotICAgICAgICBicmVhawotICByZXR1cm4gcmV2Ci0KLQotZGVmIGdldF9jYXRhcHVsdF9yZXZfaW5fZ2l0XygpOgotICB0cnk6Ci0gICAgY2F0YXB1bHRfcmV2ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCi0gICAgICAgICdnaXQgcmV2LXBhcnNlIEhFQUQnLAotICAgICAgICBzaGVsbD1UcnVlLCAjIE5lZWRlZCBieSBXaW5kb3dzCi0gICAgICAgIGN3ZD1vcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpLnN0cmlwKCkKLSAgZXhjZXB0IChzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciwgT1NFcnJvcik6Ci0gICAgcmV0dXJuIE5vbmUKLSAgaWYgbm90IGNhdGFwdWx0X3JldjoKLSAgICByZXR1cm4gTm9uZQotICByZXR1cm4gY2F0YXB1bHRfcmV2Ci0KLQotZGVmIHVwZGF0ZShub19hdXRvX3VwZGF0ZT1GYWxzZSwgbm9fbWluPUZhbHNlLCBmb3JjZV91cGRhdGU9RmFsc2UpOgotICAiIiJVcGRhdGUgdGhlIHN5c3RyYWNlIHRyYWNlIHZpZXdlciBodG1sIGZpbGUuCi0KLSAgV2hlbiB0aGUgaHRtbCBmaWxlIGV4aXN0cywgZG8gbm90IHVwZGF0ZSB0aGUgZmlsZSBpZgotICAxLiB0aGUgcmV2aXNpb24gaXMgTk9fQVVUT19VUERBVEVfOwotICAyLiBvciB0aGUgcmV2aXNpb24gaXMgbm90IGNoYW5nZWQuCi0KLSAgQXJnczoKLSAgICBub19hdXRvX3VwZGF0ZTogSWYgdHJ1ZSwgZm9yY2UgdXBkYXRpbmcgdGhlIGZpbGUgd2l0aCByZXZpc2lvbgotICAgICAgICAgICAgICAgICAgICBOT19BVVRPX1VQREFURV8uIEZ1dHVyZSBhdXRvLXVwZGF0ZXMgd2lsbCBiZSBza2lwcGVkLgotICAgIG5vX21pbjogICAgICAgICBJZiB0cnVlLCBza2lwIG1pbmlmaWNhdGlvbiB3aGVuIHVwZGF0aW5nIHRoZSBmaWxlLgotICAgIGZvcmNlX3VwZGF0ZTogICBJZiB0cnVlLCB1cGRhdGUgdGhlIHN5c3RyYWNlIHRyYWNlIHZpZXdlciBmaWxlIG5vIG1hdHRlcgotICAgICAgICAgICAgICAgICAgICB3aGF0LgotICAiIiIKLSAgaWYgbm9fYXV0b191cGRhdGU6Ci0gICAgbmV3X3JldiA9IE5PX0FVVE9fVVBEQVRFXwotICBlbHNlOgotICAgIG5ld19yZXYgPSBnZXRfY2F0YXB1bHRfcmV2X2luX2dpdF8oKQotICAgIGlmIG5vdCBuZXdfcmV2OgotICAgICAgIyBTb3VyY2UgdHJlZSBjb3VsZCBiZSBtaXNzaW5nIGdpdCBtZXRhZGF0YS4KLSAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICdXYXJuaW5nOiBDb3VsZG5cJ3QgZGV0ZXJtaW5lIGN1cnJlbnQgZ2l0IHJldmlzaW9uLicKLSAgICAgIG5ld19yZXYgPSBVTktOT1dOX1JFVklTSU9OXwotCi0gIG5lZWRfdXBkYXRlID0gRmFsc2UKLSAgaWYgZm9yY2VfdXBkYXRlOgotICAgIG5lZWRfdXBkYXRlID0gVHJ1ZQotICBlbGlmIG5vX2F1dG9fdXBkYXRlOgotICAgIG5lZWRfdXBkYXRlID0gVHJ1ZQotICBlbGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhTWVNUUkFDRV9UUkFDRV9WSUVXRVJfSFRNTF9GSUxFKToKLSAgICBuZWVkX3VwZGF0ZSA9IFRydWUKLSAgZWxzZToKLSAgICBvbGRfcmV2ID0gZ2V0X2NhdGFwdWx0X3Jldl9pbl9maWxlXyhTWVNUUkFDRV9UUkFDRV9WSUVXRVJfSFRNTF9GSUxFKQotICAgIGlmIG5vdCBvbGRfcmV2IG9yIG9sZF9yZXYgPT0gVU5LTk9XTl9SRVZJU0lPTl86Ci0gICAgICBuZWVkX3VwZGF0ZSA9IFRydWUKLSAgICAjIElmIG9sZF9yZXYgd2FzIHNldCB0byBOT19BVVRPX1VQREFURV8gaXQgc2hvdWxkIGJlIHNraXBwZWQsIHNpbmNlIGZvcmNlZAotICAgICMgdXBkYXRlIGNhc2VzIGhhdmUgYmVlbiBhbHJlYWR5IGhhbmRsZWQgYWJvdmUuCi0gICAgaWYgb2xkX3JldiAhPSBuZXdfcmV2IGFuZCBvbGRfcmV2ICE9IE5PX0FVVE9fVVBEQVRFXzoKLSAgICAgIG5lZWRfdXBkYXRlID0gVHJ1ZQotCi0gIGlmIG5vdCBuZWVkX3VwZGF0ZToKLSAgICBwcmludCAnVXBkYXRlIHNraXBwZWQuJwotICAgIHJldHVybgotCi0gIHByaW50ICdHZW5lcmF0aW5nIHZpZXdlciBmaWxlICVzIHdpdGggcmV2aXNpb24gJXMuJyAlICgKLSAgICAgICAgICAgIFNZU1RSQUNFX1RSQUNFX1ZJRVdFUl9IVE1MX0ZJTEUsIG5ld19yZXYpCi0KLSAgIyBHZW5lcmF0ZSB0aGUgdnVsY2FuaXplZCByZXN1bHQuCi0gIHdpdGggY29kZWNzLm9wZW4oU1lTVFJBQ0VfVFJBQ0VfVklFV0VSX0hUTUxfRklMRSwKLSAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0ndXRmLTgnLCBtb2RlPSd3JykgYXMgZjoKLSAgICB2dWxjYW5pemVfdHJhY2Vfdmlld2VyLldyaXRlVHJhY2VWaWV3ZXIoCi0gICAgICAgIGYsCi0gICAgICAgIGNvbmZpZ19uYW1lPSdmdWxsJywKLSAgICAgICAgbWluaWZ5PShub3Qgbm9fbWluKSwKLSAgICAgICAgb3V0cHV0X2h0bWxfaGVhZF9hbmRfYm9keT1GYWxzZSkKLSAgICBpZiBub3QgZm9yY2VfdXBkYXRlOgotICAgICAgZi53cml0ZShjcmVhdGVfY2F0YXB1bHRfcmV2X3N0cl8obmV3X3JldikpCi0KLWRlZiBtYWluKCk6Ci0gIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCctLWZvcmNlLXVwZGF0ZScsIGRlc3Q9J2ZvcmNlX3VwZGF0ZScsCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2ZvcmNlIHVwZGF0ZSB0aGUgJwotICAgICAgICAgICAgICAgICAgICAnc3lzdHJhY2UgdHJhY2Ugdmlld2VyIGh0bWwgZmlsZScpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCctLW5vLWF1dG8tdXBkYXRlJywgZGVzdD0nbm9fYXV0b191cGRhdGUnLAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdmb3JjZSB1cGRhdGUgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgJ3N5c3RyYWNlIHRyYWNlIHZpZXdlciBodG1sIGZpbGUgYW5kIGRpc2FibGUgYXV0by11cGRhdGVzLCAnCi0gICAgICAgICAgICAgICAgICAgICdkZWxldGUgXCdzeXN0cmFjZV90cmFjZV92aWV3ZXIuaHRtbFwnIHRvIHJlLWVuYWJsZSAnCi0gICAgICAgICAgICAgICAgICAgICdhdXRvLXVwZGF0ZXMnKQotICBwYXJzZXIuYWRkX29wdGlvbignLS1uby1taW4nLCBkZXN0PSdub19taW4nLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdza2lwIG1pbmlmaWNhdGlvbicpCi0gICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC12YXJpYWJsZQotICBvcHRpb25zLCB1bnVzZWRfYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2WzE6XSkKLQotICB1cGRhdGUobm9fYXV0b191cGRhdGU9b3B0aW9ucy5ub19hdXRvX3VwZGF0ZSwKLSAgICAgICAgIG5vX21pbj1vcHRpb25zLm5vX21pbiwKLSAgICAgICAgIGZvcmNlX3VwZGF0ZT1vcHRpb25zLmZvcmNlX3VwZGF0ZSkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgbWFpbigpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS91dGlsLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdXRpbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFkYzQ3NS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS91dGlsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgb3MKLWltcG9ydCByYW5kb20KLWltcG9ydCBzdHJpbmcKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi0KLWZyb20gZGV2aWwuYW5kcm9pZC5jb25zdGFudHMgaW1wb3J0IGNocm9tZQotCi1jbGFzcyBPcHRpb25QYXJzZXJJZ25vcmVFcnJvcnMob3B0cGFyc2UuT3B0aW9uUGFyc2VyKToKLSAgIiIiV3JhcHBlciBmb3IgT3B0aW9uUGFyc2VyIHRoYXQgaWdub3JlcyBlcnJvcnMgYW5kIHByb2R1Y2VzIG5vIG91dHB1dC4iIiIKLQotICBkZWYgZXJyb3Ioc2VsZiwgbXNnKToKLSAgICBwYXNzCi0KLSAgZGVmIGV4aXQoc2VsZiwgc3RhdHVzPTAsIG1zZz1Ob25lKToKLSAgICBwYXNzCi0KLSAgZGVmIHByaW50X3VzYWdlKHNlbGYsIG91dF9maWxlPU5vbmUpOgotICAgIHBhc3MKLQotICBkZWYgcHJpbnRfaGVscChzZWxmLCBvdXRfZmlsZT1Ob25lKToKLSAgICBwYXNzCi0KLSAgZGVmIHByaW50X3ZlcnNpb24oc2VsZiwgb3V0X2ZpbGU9Tm9uZSk6Ci0gICAgcGFzcwotCi0KLWRlZiBhZGRfYWRiX3NlcmlhbChhZGJfY29tbWFuZCwgZGV2aWNlX3NlcmlhbCk6Ci0gICIiIkFkZCBzZXJpYWwgbnVtYmVyIHRvIEFEQiBzaGVsbCBjb21tYW5kLgotCi0gIEFEQiBzaGVsbCBjb21tYW5kIGlzIGdpdmVuIGFzIGxpc3QsIGUuZy4KLSAgWydhZGInLCdzaGVsbCcsJ3NvbWVfY29tbWFuZCcsJ3NvbWVfYXJncyddLgotICBUaGlzIHJlcGxhY2VzIGl0IHdpdGg6Ci0gIFsnYWRiJywnc2hlbGwnLC1zJyxkZXZpY2Vfc2VyaWFsLCdzb21lX2NvbW1hbmQnLCdzb21lX2FyZ3MnXQotCi0gIEFyZ3M6Ci0gICAgIGFkYl9jb21tYW5kOiBBREIgY29tbWFuZCBsaXN0LgotICAgICBkZXZpY2Vfc2VyaWFsOiBEZXZpY2Ugc2VyaWFsIG51bWJlci4KLQotICBSZXR1cm5zOgotICAgICBBREIgY29tbWFuZCBsaXN0IHdpdGggc2VyaWFsIG51bWJlciBhZGRlZC4KLSAgIiIiCi0gIGlmIGRldmljZV9zZXJpYWwgaXMgbm90IE5vbmU6Ci0gICAgYWRiX2NvbW1hbmQuaW5zZXJ0KDEsIGRldmljZV9zZXJpYWwpCi0gICAgYWRiX2NvbW1hbmQuaW5zZXJ0KDEsICctcycpCi0KLQotZGVmIGNvbnN0cnVjdF9hZGJfc2hlbGxfY29tbWFuZChzaGVsbF9hcmdzLCBkZXZpY2Vfc2VyaWFsKToKLSAgIiIiQ29uc3RydWN0IGFuIEFEQiBzaGVsbCBjb21tYW5kIHdpdGggZ2l2ZW4gZGV2aWNlIHNlcmlhbCBhbmQgYXJndW1lbnRzLgotCi0gIEFyZ3M6Ci0gICAgIHNoZWxsX2FyZ3M6IGFycmF5IG9mIGFyZ3VtZW50cyB0byBwYXNzIHRvIGFkYiBzaGVsbC4KLSAgICAgZGV2aWNlX3NlcmlhbDogaWYgbm90IGVtcHR5LCB3aWxsIGFkZCB0aGUgYXBwcm9wcmlhdGUgY29tbWFuZC1saW5lCi0gICAgICAgIHBhcmFtZXRlcnMgc28gdGhhdCBhZGIgdGFyZ2V0cyB0aGUgZ2l2ZW4gZGV2aWNlLgotICAiIiIKLSAgYWRiX2NvbW1hbmQgPSBbJ2FkYicsICdzaGVsbCcsICcgJy5qb2luKHNoZWxsX2FyZ3MpXQotICBhZGRfYWRiX3NlcmlhbChhZGJfY29tbWFuZCwgZGV2aWNlX3NlcmlhbCkKLSAgcmV0dXJuIGFkYl9jb21tYW5kCi0KLQotZGVmIHJ1bl9hZGJfY29tbWFuZChhZGJfY29tbWFuZCk6Ci0gIGFkYl9vdXRwdXQgPSBbXQotICBhZGJfcmV0dXJuX2NvZGUgPSAwCi0gIHRyeToKLSAgICBhZGJfb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoYWRiX2NvbW1hbmQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9RmFsc2UsIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQotICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKLSAgICAjIFRoaXMgdXN1YWxseSBtZWFucyB0aGF0IHRoZSBhZGIgZXhlY3V0YWJsZSB3YXMgbm90IGZvdW5kIGluIHRoZSBwYXRoLgotICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICgnXG5UaGUgY29tbWFuZCAiJXMiIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZXJyb3I6JwotICAgICAgICAgICAgICAgICAgICAgICAgICAlICcgJy5qb2luKGFkYl9jb21tYW5kKSkKLSAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAnICAgICVzJyAlIHN0cihlcnJvcikKLSAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAnSXMgYWRiIGluIHlvdXIgcGF0aD8nCi0gICAgYWRiX3JldHVybl9jb2RlID0gZXJyb3IuZXJybm8KLSAgICBhZGJfb3V0cHV0ID0gZXJyb3IKLSAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGVycm9yOgotICAgICMgVGhlIHByb2Nlc3MgZXhpdGVkIHdpdGggYW4gZXJyb3IuCi0gICAgYWRiX3JldHVybl9jb2RlID0gZXJyb3IucmV0dXJuY29kZQotICAgIGFkYl9vdXRwdXQgPSBlcnJvci5vdXRwdXQKLQotICByZXR1cm4gKGFkYl9vdXRwdXQsIGFkYl9yZXR1cm5fY29kZSkKLQotCi1kZWYgcnVuX2FkYl9zaGVsbChzaGVsbF9hcmdzLCBkZXZpY2Vfc2VyaWFsKToKLSAgIiIiUnVucyAiYWRiIHNoZWxsIiB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCi0KLSAgQXJnczoKLSAgICBzaGVsbF9hcmdzOiBhcnJheSBvZiBhcmd1bWVudHMgdG8gcGFzcyB0byBhZGIgc2hlbGwuCi0gICAgZGV2aWNlX3NlcmlhbDogaWYgbm90IGVtcHR5LCB3aWxsIGFkZCB0aGUgYXBwcm9wcmlhdGUgY29tbWFuZC1saW5lCi0gICAgICAgIHBhcmFtZXRlcnMgc28gdGhhdCBhZGIgdGFyZ2V0cyB0aGUgZ2l2ZW4gZGV2aWNlLgotICBSZXR1cm5zOgotICAgIEEgdHVwbGUgY29udGFpbmluZyB0aGUgYWRiIG91dHB1dCAoc3Rkb3V0ICYgc3RkZXJyKSBhbmQgdGhlIHJldHVybiBjb2RlCi0gICAgZnJvbSBhZGIuICBXaWxsIGV4aXQgaWYgYWRiIGZhaWxzIHRvIHN0YXJ0LgotICAiIiIKLSAgYWRiX2NvbW1hbmQgPSBjb25zdHJ1Y3RfYWRiX3NoZWxsX2NvbW1hbmQoc2hlbGxfYXJncywgZGV2aWNlX3NlcmlhbCkKLSAgcmV0dXJuIHJ1bl9hZGJfY29tbWFuZChhZGJfY29tbWFuZCkKLQotCi1kZWYgZ2V0X2RldmljZV9zZGtfdmVyc2lvbigpOgotICAiIiJVc2VzIGFkYiB0byBhdHRlbXB0IHRvIGRldGVybWluZSB0aGUgU0RLIHZlcnNpb24gb2YgYSBydW5uaW5nIGRldmljZS4iIiIKLQotICBnZXRwcm9wX2FyZ3MgPSBbJ2dldHByb3AnLCAncm8uYnVpbGQudmVyc2lvbi5zZGsnXQotCi0gICMgZ2V0X2RldmljZV9zZGtfdmVyc2lvbigpIGlzIGNhbGxlZCBiZWZvcmUgd2UgZXZlbiBwYXJzZSBvdXIgY29tbWFuZC1saW5lCi0gICMgYXJncy4gIFRoZXJlZm9yZSwgcGFyc2UganVzdCB0aGUgZGV2aWNlIHNlcmlhbCBudW1iZXIgcGFydCBvZiB0aGUKLSAgIyBjb21tYW5kLWxpbmUgc28gd2UgY2FuIHNlbmQgdGhlIGFkYiBjb21tYW5kIHRvIHRoZSBjb3JyZWN0IGRldmljZS4KLSAgcGFyc2VyID0gT3B0aW9uUGFyc2VySWdub3JlRXJyb3JzKCkKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy1lJywgJy0tc2VyaWFsJywgZGVzdD0nZGV2aWNlX3NlcmlhbCcsIHR5cGU9J3N0cmluZycpCi0gIG9wdGlvbnMsIHVudXNlZF9hcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKSAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLXZhcmlhYmxlCi0KLSAgc3VjY2VzcyA9IEZhbHNlCi0KLSAgYWRiX291dHB1dCwgYWRiX3JldHVybl9jb2RlID0gcnVuX2FkYl9zaGVsbChnZXRwcm9wX2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5kZXZpY2Vfc2VyaWFsKQotCi0gIGlmIGFkYl9yZXR1cm5fY29kZSA9PSAwOgotICAgICMgQURCIG1heSBwcmludCBvdXRwdXQgb3RoZXIgdGhhbiB0aGUgdmVyc2lvbiBudW1iZXIgKGUuZy4gaXQgY2hvdWxkCi0gICAgIyBwcmludCBhIG1lc3NhZ2UgYWJvdXQgc3RhcnRpbmcgdGhlIEFEQiBzZXJ2ZXIpLgotICAgICMgQnJlYWsgdGhlIEFEQiBvdXRwdXQgaW50byB3aGl0ZS1zcGFjZSBkZWxpbWl0ZWQgc2VnbWVudHMuCi0gICAgcGFyc2VkX291dHB1dCA9IHN0ci5zcGxpdChhZGJfb3V0cHV0KQotICAgIGlmIHBhcnNlZF9vdXRwdXQ6Ci0gICAgICAjIEFzc3VtZSB0aGF0IHRoZSB2ZXJzaW9uIG51bWJlciBpcyB0aGUgbGFzdCB0aGluZyBwcmludGVkIGJ5IEFEQi4KLSAgICAgIHZlcnNpb25fc3RyaW5nID0gcGFyc2VkX291dHB1dFstMV0KLSAgICAgIGlmIHZlcnNpb25fc3RyaW5nOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgIyBUcnkgdG8gY29udmVydCB0aGUgdGV4dCBpbnRvIGFuIGludGVnZXIuCi0gICAgICAgICAgdmVyc2lvbiA9IGludCh2ZXJzaW9uX3N0cmluZykKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgdmVyc2lvbiA9IC0xCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgc3VjY2VzcyA9IFRydWUKLQotICBpZiBub3Qgc3VjY2VzczoKLSAgICBzeXMuZXhpdCgxKQotCi0gIHJldHVybiB2ZXJzaW9uCi0KLQotZGVmIGdlbmVyYXRlX3JhbmRvbV9maWxlbmFtZV9mb3JfdGVzdCgpOgotICAiIiJVc2VkIGZvciB0ZW1wb3JhcnkgZmlsZXMgdXNlZCBpbiB0ZXN0cy4KLQotICBGaWxlcyBjcmVhdGVkIGZyb20gJ05hbWVkVGVtcG9yYXJ5RmlsZScgaGF2ZSBpbmNvbnNpc3RlbnQgcmV1c2Ugc3VwcG9ydCBhY3Jvc3MKLSAgcGxhdGZvcm1zLCBzbyBpdCdzIG5vdCBndWFyYW50ZWVkIHRoYXQgdGhleSBjYW4gYmUgcmVvcGVuZWQuIFNpbmNlIG1hbnkgdGVzdHMKLSAgY29tbXVuaWNhdGUgZmlsZXMgdmlhIHBhdGgsIHdlIHR5cGljYWxseSB1c2UgdGhpcyBtZXRob2QsIGFzIHdlbGwgYXMKLSAgbWFudWFsIGZpbGUgcmVtb3ZhbC4iIiIKLSAgbmFtZSA9ICcnLmpvaW4ocmFuZG9tLmNob2ljZShzdHJpbmcuYXNjaWlfdXBwZXJjYXNlICsKLSAgICAgICAgICAgICAgc3RyaW5nLmRpZ2l0cykgZm9yIF8gaW4gcmFuZ2UoMTApKQotICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKG5hbWUpCi0KLQotZGVmIGdldF9zdXBwb3J0ZWRfYnJvd3NlcnMoKToKLSAgIiIiUmV0dXJucyB0aGUgcGFja2FnZSBuYW1lcyBvZiBhbGwgc3VwcG9ydGVkIGJyb3dzZXJzLiIiIgotICAjIEFkZCBhbGlhc2VzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KLSAgc3VwcG9ydGVkX2Jyb3dzZXJzID0gewotICAgICdzdGFibGUnOiBjaHJvbWUuUEFDS0FHRV9JTkZPWydjaHJvbWVfc3RhYmxlJ10sCi0gICAgJ2JldGEnOiBjaHJvbWUuUEFDS0FHRV9JTkZPWydjaHJvbWVfYmV0YSddLAotICAgICdkZXYnOiBjaHJvbWUuUEFDS0FHRV9JTkZPWydjaHJvbWVfZGV2J10sCi0gICAgJ2J1aWxkJzogY2hyb21lLlBBQ0tBR0VfSU5GT1snY2hyb21lJ10sCi0gIH0KLSAgc3VwcG9ydGVkX2Jyb3dzZXJzLnVwZGF0ZShjaHJvbWUuUEFDS0FHRV9JTkZPKQotICByZXR1cm4gc3VwcG9ydGVkX2Jyb3dzZXJzCi0KLQotZGVmIGdldF9kZWZhdWx0X3NlcmlhbCgpOgotICBpZiAnQU5EUk9JRF9TRVJJQUwnIGluIG9zLmVudmlyb246Ci0gICAgcmV0dXJuIG9zLmVudmlyb25bJ0FORFJPSURfU0VSSUFMJ10KLSAgcmV0dXJuIE5vbmUKLQotCi1kZWYgZ2V0X21haW5fb3B0aW9ucyhwYXJzZXIpOgotICBwYXJzZXIuYWRkX29wdGlvbignLW8nLCBkZXN0PSdvdXRwdXRfZmlsZScsIGhlbHA9J3dyaXRlIHRyYWNlIG91dHB1dCB0byBGSUxFJywKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLCBtZXRhdmFyPSdGSUxFJykKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy10JywgJy0tdGltZScsIGRlc3Q9J3RyYWNlX3RpbWUnLCB0eXBlPSdpbnQnLAotICAgICAgICAgICAgICAgICAgICBoZWxwPSd0cmFjZSBmb3IgTiBzZWNvbmRzJywgbWV0YXZhcj0nTicpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCctaicsICctLWpzb24nLCBkZXN0PSd3cml0ZV9qc29uJywKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgaGVscD0nd3JpdGUgYSBKU09OIGZpbGUnKQotICBwYXJzZXIuYWRkX29wdGlvbignLS1saW5rLWFzc2V0cycsIGRlc3Q9J2xpbmtfYXNzZXRzJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgaGVscD0nKGRlcHJlY2F0ZWQpJykKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy0tZnJvbS1maWxlJywgZGVzdD0nZnJvbV9maWxlJywgYWN0aW9uPSdzdG9yZScsCi0gICAgICAgICAgICAgICAgICAgIGhlbHA9J3JlYWQgdGhlIHRyYWNlIGZyb20gYSBmaWxlIChjb21wcmVzc2VkKSByYXRoZXIgdGhhbicKLSAgICAgICAgICAgICAgICAgICAgJ3J1bm5pbmcgYSBsaXZlIHRyYWNlJykKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy0tYXNzZXQtZGlyJywgZGVzdD0nYXNzZXRfZGlyJywgZGVmYXVsdD0ndHJhY2Utdmlld2VyJywKLSAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgaGVscD0nKGRlcHJlY2F0ZWQpJykKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy1lJywgJy0tc2VyaWFsJywgZGVzdD0nZGV2aWNlX3NlcmlhbF9udW1iZXInLAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWdldF9kZWZhdWx0X3NlcmlhbCgpLAotICAgICAgICAgICAgICAgICAgICB0eXBlPSdzdHJpbmcnLCBoZWxwPSdhZGIgZGV2aWNlIHNlcmlhbCBudW1iZXInKQotICBwYXJzZXIuYWRkX29wdGlvbignLS10YXJnZXQnLCBkZXN0PSd0YXJnZXQnLCBkZWZhdWx0PSdhbmRyb2lkJywgdHlwZT0nc3RyaW5nJywKLSAgICAgICAgICAgICAgICAgICAgaGVscD0nY2hvb3NlIHRyYWNpbmcgdGFyZ2V0IChhbmRyb2lkIG9yIGxpbnV4KScpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCctLXRpbWVvdXQnLCBkZXN0PSd0aW1lb3V0JywgdHlwZT0naW50JywKLSAgICAgICAgICAgICAgICAgICAgaGVscD0ndGltZW91dCBmb3Igc3RhcnQgYW5kIHN0b3AgdHJhY2luZyAoc2Vjb25kcyknKQotICBwYXJzZXIuYWRkX29wdGlvbignLS1jb2xsZWN0aW9uLXRpbWVvdXQnLCBkZXN0PSdjb2xsZWN0aW9uX3RpbWVvdXQnLAotICAgICAgICAgICAgICAgICAgICB0eXBlPSdpbnQnLCBoZWxwPSd0aW1lb3V0IGZvciBkYXRhIGNvbGxlY3Rpb24gKHNlY29uZHMpJykKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy1hJywgJy0tYXBwJywgZGVzdD0nYXBwX25hbWUnLCBkZWZhdWx0PU5vbmUsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLAotICAgICAgICAgICAgICAgICAgICBoZWxwPSdlbmFibGUgYXBwbGljYXRpb24tbGV2ZWwgdHJhY2luZyBmb3IgJwotICAgICAgICAgICAgICAgICAgICAnY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYXBwIGNtZGxpbmVzJykKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy10JywgJy0tdGltZScsIGRlc3Q9J3RyYWNlX3RpbWUnLCB0eXBlPSdpbnQnLAotICAgICAgICAgICAgICAgICAgICBoZWxwPSd0cmFjZSBmb3IgTiBzZWNvbmRzJywgbWV0YXZhcj0nTicpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCctLXRhcmdldCcsIGRlc3Q9J3RhcmdldCcsIGRlZmF1bHQ9J2FuZHJvaWQnLAotICAgICAgICAgICAgICAgICAgICB0eXBlPSdzdHJpbmcnLCBoZWxwPSdjaG9vc2UgdHJhY2luZyB0YXJnZXQgKGFuZHJvaWQgb3IgJwotICAgICAgICAgICAgICAgICAgICAnIGxpbnV4KScpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCctYicsICctLWJ1Zi1zaXplJywgZGVzdD0ndHJhY2VfYnVmX3NpemUnLAotICAgICAgICAgICAgICAgICAgICB0eXBlPSdpbnQnLCBoZWxwPSd1c2UgYSB0cmFjZSBidWZmZXIgc2l6ZSAnCi0gICAgICAgICAgICAgICAgICAgICcgb2YgTiBLQicsIG1ldGF2YXI9J04nKQotICByZXR1cm4gcGFyc2VyCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS91dGlsX3VuaXR0ZXN0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvc3lzdHJhY2Uvc3lzdHJhY2UvdXRpbF91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg4ZjgzNS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC9zeXN0cmFjZS9zeXN0cmFjZS91dGlsX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBzeXN0cmFjZSBpbXBvcnQgZGVjb3JhdG9ycwotZnJvbSBzeXN0cmFjZSBpbXBvcnQgdXRpbAotCi0KLURFVklDRV9TRVJJQUwgPSAnQUc4NDA0RUMwNDQ0QUdDJwotTElTVF9UTVBfQVJHUyA9IFsnbHMnLCAnL2RhdGEvbG9jYWwvdG1wJ10KLUFUUkFDRV9BUkdTID0gWydhdHJhY2UnLCAnLXonLCAnLXQnLCAnMTAnLCAnLWInLCAnNDA5NiddCi1BREJfU0hFTEwgPSBbJ2FkYicsICctcycsIERFVklDRV9TRVJJQUwsICdzaGVsbCddCi0KLQotY2xhc3MgVXRpbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIEBkZWNvcmF0b3JzLkhvc3RPbmx5VGVzdAotICBkZWYgdGVzdF9jb25zdHJ1Y3RfYWRiX3NoZWxsX2NvbW1hbmQoc2VsZik6Ci0gICAgY29tbWFuZCA9IHV0aWwuY29uc3RydWN0X2FkYl9zaGVsbF9jb21tYW5kKExJU1RfVE1QX0FSR1MsIE5vbmUpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnICcuam9pbihjb21tYW5kKSwgJ2FkYiBzaGVsbCBscyAvZGF0YS9sb2NhbC90bXAnKQotCi0gICAgY29tbWFuZCA9IHV0aWwuY29uc3RydWN0X2FkYl9zaGVsbF9jb21tYW5kKExJU1RfVE1QX0FSR1MsIERFVklDRV9TRVJJQUwpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnICcuam9pbihjb21tYW5kKSwKLSAgICAgICAgICAgICAgICAgICAgICdhZGIgLXMgQUc4NDA0RUMwNDQ0QUdDIHNoZWxsIGxzIC9kYXRhL2xvY2FsL3RtcCcpCi0KLSAgICBjb21tYW5kID0gdXRpbC5jb25zdHJ1Y3RfYWRiX3NoZWxsX2NvbW1hbmQoQVRSQUNFX0FSR1MsIERFVklDRV9TRVJJQUwpCi0gICAgc2VsZi5hc3NlcnRFcXVhbCgnICcuam9pbihjb21tYW5kKSwKLSAgICAgICAgICAgICAgICAgICAgICdhZGIgLXMgQUc4NDA0RUMwNDQ0QUdDIHNoZWxsIGF0cmFjZSAteiAtdCAxMCAtYiA0MDk2JykKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL0xJQ0VOU0UudHh0IGIvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvTElDRU5TRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MDRlYTMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvTElDRU5TRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi1Db3B5cmlnaHQgKGMpIDIwMDEtMjAxMyBDaHJpcyBMaWVjaHRpIDxjbGllY2h0aUBnbXgubmV0PjsKLUFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0KLVRoaXMgaXMgdGhlIFB5dGhvbiBsaWNlbnNlLiBJbiBzaG9ydCwgeW91IGNhbiB1c2UgdGhpcyBwcm9kdWN0IGluCi1jb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIG1vZGlmeSBpdCwgcmVkaXN0cmlidXRlIGl0LgotQSBub3RpZmljYXRpb24gdG8gdGhlIGF1dGhvciB3aGVuIHlvdSB1c2UgYW5kL29yIG1vZGlmeSBpdCBpcyB3ZWxjb21lLgotCi0KLVRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBBQ0NFU1NJTkcgT1IgT1RIRVJXSVNFIFVTSU5HIFRISVMgU09GVFdBUkUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotTElDRU5TRSBBR1JFRU1FTlQKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGlzCi1wcm9kdWN0LCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcKLWFuZCBvdGhlcndpc2UgdXNpbmcgdGhpcyBwcm9kdWN0IGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzCi1hc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uCi0KLTIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsCi10aGUgY29weXJpZ2h0IGhvbGRlciBoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLAotcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LAotcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLAotYW5kIG90aGVyd2lzZSB1c2UgdGhpcyBwcm9kdWN0IGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sCi1wcm92aWRlZCwgaG93ZXZlciwgdGhhdCBjb3B5cmlnaHQgaG9sZGVycyBMaWNlbnNlIEFncmVlbWVudCBhbmQKLWNvcHlyaWdodCBob2xkZXJzIG5vdGljZSBvZiBjb3B5cmlnaHQgYXJlIHJldGFpbmVkIGluIHRoaXMgcHJvZHVjdAotYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS4KLQotMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24KLW9yIGluY29ycG9yYXRlcyB0aGlzIHByb2R1Y3Qgb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UKLXRoZSBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4KLUxpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZgotdGhlIGNoYW5nZXMgbWFkZSB0byB0aGlzIHByb2R1Y3QuCi0KLTQuIFRoZSBjb3B5cmlnaHQgaG9sZGVyIGlzIG1ha2luZyB0aGlzIHByb2R1Y3QgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uCi1hbiAiQVMgSVMiIGJhc2lzLiBUSEUgQ09QWVJJR0hUIEhPTERFUiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IKLVdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRC4gIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sCi1USEUgQ09QWVJJR0hUIEhPTERFUiBNQUtFUyBOTyBBTkQgRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUgotV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IKLVRIQVQgVEhFIFVTRSBPRiBUSElTIFBST0RVQ1QgV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KLQotNS4gVEhFIENPUFlSSUdIVCBIT0xERVIgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIKLVVTRVJTIE9GIFRISVMgUFJPRFVDVCBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgT1IgTE9TUyBBUyBBIFJFU1VMVCBPRiBNT0RJRllJTkcsIERJU1RSSUJVVElORywgT1IgT1RIRVJXSVNFCi1VU0lORyBUSElTIFBST0RVQ1QsIE9SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLVBPU1NJQklMSVRZIFRIRVJFT0YuCi0KLTYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwKLWJyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCi0KLTcuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueQotcmVsYXRpb25zaGlwIG9mIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiB0aGUKLWNvcHlyaWdodCBob2xkZXIgYW5kIExpY2Vuc2VlLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50Ci1wZXJtaXNzaW9uIHRvIHVzZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGZyb20gdGhlIGNvcHlyaWdodCBob2xkZXIKLWluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZgotTGljZW5zZWUsIG9yIGFueSB0aGlyZCBwYXJ0eS4KLQotOC4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhpcyBwcm9kdWN0LCBMaWNlbnNlZQotYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKLUFncmVlbWVudC4KLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvUkVBRE1FLmNocm9taXVtIGIvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvUkVBRE1FLmNocm9taXVtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDU5M2RiLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL1JFQURNRS5jaHJvbWl1bQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLU5hbWU6IHB5U2VyaWFsCi1TaG9ydCBOYW1lOiBweVNlcmlhbAotVVJMOiBodHRwczovL2dpdGh1Yi5jb20vcHlzZXJpYWwvcHlzZXJpYWwKLVZlcnNpb246IDIuNwotRGF0ZTogMjAxMy0xMC0xNwotTGljZW5zZTogUHl0aG9uCi1MaWNlbnNlIEZpbGU6IE5PVF9TSElQUEVECi1TZWN1cml0eSBDcml0aWNhbDogbm8KLQotRGVzY3JpcHRpb246Ci1MaWJyYXJ5IGZvciBQeXRob24gYWNjZXNzIGZvciB0aGUgc2VyaWFsIHBvcnQuIFVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aAotYSBNb25zb29uIGRldmljZSwgd2hpY2ggdHVubmVscyBzZXJpYWwgb3ZlciBVU0IuCi0KLUxvY2FsIE1vZGlmaWNhdGlvbnM6Ci1JbmNsdWRlcyBvbmx5IHRoZSBzZXJpYWwvIGZvbGRlciBhbmQgTElDRU5TRS50eHQuCi1QYWNrYWdpbmcgYW5kIHNldHVwIGZpbGVzIGhhdmUgbm90IGJlZW4gY29waWVkIGRvd25zdHJlYW0uCi1BbGwgb3RoZXIgZmlsZXMgYW5kIGZvbGRlcnMgKGRvY3VtZW50YXRpb24vLCBleGFtcGxlcy8sIHRlc3QvKQotaGF2ZSBub3QgYmVlbiBjb3BpZWQgZG93bnN0cmVhbS4KLWxpbnV4LXByb2R1Y3RfaW5mby5wYXRjaCBoYXMgYmVlbiBhcHBsaWVkIHRvIGluY2x1ZGUgdGhlIHByb2R1Y3QgaW5mb3JtYXRpb24gYXMgZGVzY3JpcHRpb24uCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9saW51eC1wcm9kdWN0X2luZm8ucGF0Y2ggYi9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9saW51eC1wcm9kdWN0X2luZm8ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmODAwMWEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvbGludXgtcHJvZHVjdF9pbmZvLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotSW5kZXg6IHNlcmlhbC90b29scy9saXN0X3BvcnRzX2xpbnV4LnB5Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gc2VyaWFsL3Rvb2xzL2xpc3RfcG9ydHNfbGludXgucHkJKHJldmlzaW9uIDQ5NCkKLSsrKyBzZXJpYWwvdG9vbHMvbGlzdF9wb3J0c19saW51eC5weQkod29ya2luZyBjb3B5KQotQEAgLTExMCw2ICsxMTAsMTQgQEAKLSAgICAgc3lzX2Rldl9wYXRoID0gJy9zeXMvY2xhc3MvdHR5LyVzL2RldmljZS9pbnRlcmZhY2UnICUgKGJhc2UsKQotICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzeXNfZGV2X3BhdGgpOgotICAgICAgICAgcmV0dXJuIHJlYWRfbGluZShzeXNfZGV2X3BhdGgpCi0rCi0rICAgICMgVVNCIFByb2R1Y3QgSW5mb3JtYXRpb24KLSsgICAgc3lzX2Rldl9wYXRoID0gJy9zeXMvY2xhc3MvdHR5LyVzL2RldmljZScgJSAoYmFzZSwpCi0rICAgIGlmIG9zLnBhdGguZXhpc3RzKHN5c19kZXZfcGF0aCk6Ci0rICAgICAgICBwcm9kdWN0X25hbWVfZmlsZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKHN5c19kZXZfcGF0aCkpICsgIi9wcm9kdWN0IgotKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocHJvZHVjdF9uYW1lX2ZpbGUpOgotKyAgICAgICAgICAgIHJldHVybiByZWFkX2xpbmUocHJvZHVjdF9uYW1lX2ZpbGUpCi0rCi0gICAgIHJldHVybiBiYXNlCi0gCi0gZGVmIGh3aW5mbyhkZXZpY2UpOgpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL19faW5pdF9fLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzM2FlNTJlLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbiAKLQotIyBwb3J0YWJsZSBzZXJpYWwgcG9ydCBhY2Nlc3Mgd2l0aCBweXRob24KLSMgdGhpcyBpcyBhIHdyYXBwZXIgbW9kdWxlIGZvciBkaWZmZXJlbnQgcGxhdGZvcm0gaW1wbGVtZW50YXRpb25zCi0jCi0jIChDKSAyMDAxLTIwMTAgQ2hyaXMgTGllY2h0aSA8Y2xpZWNodGlAZ214Lm5ldD4KLSMgdGhpcyBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGZyZWUgc29mdHdhcmUgbGljZW5zZSwgc2VlIGxpY2Vuc2UudHh0Ci0KLVZFUlNJT04gPSAnMi43JwotCi1pbXBvcnQgc3lzCi0KLWlmIHN5cy5wbGF0Zm9ybSA9PSAnY2xpJzoKLSAgICBmcm9tIHNlcmlhbC5zZXJpYWxjbGkgaW1wb3J0ICoKLWVsc2U6Ci0gICAgaW1wb3J0IG9zCi0gICAgIyBjaG9zZSBhbiBpbXBsZW1lbnRhdGlvbiwgZGVwZW5kaW5nIG9uIG9zCi0gICAgaWYgb3MubmFtZSA9PSAnbnQnOiAjc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgIGZyb20gc2VyaWFsLnNlcmlhbHdpbjMyIGltcG9ydCAqCi0gICAgZWxpZiBvcy5uYW1lID09ICdwb3NpeCc6Ci0gICAgICAgIGZyb20gc2VyaWFsLnNlcmlhbHBvc2l4IGltcG9ydCAqCi0gICAgZWxpZiBvcy5uYW1lID09ICdqYXZhJzoKLSAgICAgICAgZnJvbSBzZXJpYWwuc2VyaWFsamF2YSBpbXBvcnQgKgotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJTb3JyeTogbm8gaW1wbGVtZW50YXRpb24gZm9yIHlvdXIgcGxhdGZvcm0gKCclcycpIGF2YWlsYWJsZSIgJSAob3MubmFtZSwpKQotCi0KLXByb3RvY29sX2hhbmRsZXJfcGFja2FnZXMgPSBbCi0gICAgICAgICdzZXJpYWwudXJsaGFuZGxlcicsCi0gICAgICAgIF0KLQotZGVmIHNlcmlhbF9mb3JfdXJsKHVybCwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAiIiJcCi0gICAgR2V0IGFuIGluc3RhbmNlIG9mIHRoZSBTZXJpYWwgY2xhc3MsIGRlcGVuZGluZyBvbiBwb3J0L3VybC4gVGhlIHBvcnQgaXMgbm90Ci0gICAgb3BlbmVkIHdoZW4gdGhlIGtleXdvcmQgcGFyYW1ldGVyICdkb19ub3Rfb3BlbicgaXMgdHJ1ZSwgYnkgZGVmYXVsdCBpdAotICAgIGlzLiBBbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgZGlyZWN0bHkgcGFzc2VkIHRvIHRoZSBfX2luaXRfXyBtZXRob2Qgd2hlbgotICAgIHRoZSBwb3J0IGlzIGluc3RhbnRpYXRlZC4KLQotICAgIFRoZSBsaXN0IG9mIHBhY2thZ2UgbmFtZXMgdGhhdCBpcyBzZWFyY2hlZCBmb3IgcHJvdG9jb2wgaGFuZGxlcnMgaXMga2VwdCBpbgotICAgIGBgcHJvdG9jb2xfaGFuZGxlcl9wYWNrYWdlc2BgLgotCi0gICAgZS5nLiB3ZSB3YW50IHRvIHN1cHBvcnQgYSBVUkwgYGBmb29iYXI6Ly9gYC4gQSBtb2R1bGUKLSAgICBgYG15X2hhbmRsZXJzLnByb3RvY29sX2Zvb2JhcmBgIGlzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLiBUaGVuCi0gICAgYGBwcm90b2NvbF9oYW5kbGVyX3BhY2thZ2VzLmFwcGVuZCgibXlfaGFuZGxlcnMiKWBgIHdvdWxkIGV4dGVuZCB0aGUgc2VhcmNoCi0gICAgcGF0aCBzbyB0aGF0IGBgc2VyaWFsX2Zvcl91cmwoImZvb2JhcjovLyIpKWBgIHdvdWxkIHdvcmsuCi0gICAgIiIiCi0gICAgIyBjaGVjayByZW1vdmUgZXh0cmEgcGFyYW1ldGVyIHRvIG5vdCBjb25mdXNlIHRoZSBTZXJpYWwgY2xhc3MKLSAgICBkb19vcGVuID0gJ2RvX25vdF9vcGVuJyBub3QgaW4ga3dhcmdzIG9yIG5vdCBrd2FyZ3NbJ2RvX25vdF9vcGVuJ10KLSAgICBpZiAnZG9fbm90X29wZW4nIGluIGt3YXJnczogZGVsIGt3YXJnc1snZG9fbm90X29wZW4nXQotICAgICMgdGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZSBuYXRpdmUgdmVyc2lvbgotICAgIGtsYXNzID0gU2VyaWFsICAgIyAnbmF0aXZlJyBpbXBsZW1lbnRhdGlvbgotICAgICMgY2hlY2sgcG9ydCB0eXBlIGFuZCBnZXQgY2xhc3MKLSAgICB0cnk6Ci0gICAgICAgIHVybF9ub2Nhc2UgPSB1cmwubG93ZXIoKQotICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgIyBpdCdzIG5vdCBhIHN0cmluZywgdXNlIGRlZmF1bHQKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIGlmICc6Ly8nIGluIHVybF9ub2Nhc2U6Ci0gICAgICAgICAgICBwcm90b2NvbCA9IHVybF9ub2Nhc2Uuc3BsaXQoJzovLycsIDEpWzBdCi0gICAgICAgICAgICBmb3IgcGFja2FnZV9uYW1lIGluIHByb3RvY29sX2hhbmRsZXJfcGFja2FnZXM6Ci0gICAgICAgICAgICAgICAgbW9kdWxlX25hbWUgPSAnJXMucHJvdG9jb2xfJXMnICUgKHBhY2thZ2VfbmFtZSwgcHJvdG9jb2wsKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlcl9tb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZV9uYW1lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGtsYXNzID0gc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdLlNlcmlhbAotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIFVSTCwgcHJvdG9jb2wgJXIgbm90IGtub3duJyAlIChwcm90b2NvbCwpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAga2xhc3MgPSBTZXJpYWwgICAjICduYXRpdmUnIGltcGxlbWVudGF0aW9uCi0gICAgIyBpbnN0YW50aWF0ZSBhbmQgb3BlbiB3aGVuIGRlc2lyZWQKLSAgICBpbnN0YW5jZSA9IGtsYXNzKE5vbmUsICphcmdzLCAqKmt3YXJncykKLSAgICBpbnN0YW5jZS5wb3J0ID0gdXJsCi0gICAgaWYgZG9fb3BlbjoKLSAgICAgICAgaW5zdGFuY2Uub3BlbigpCi0gICAgcmV0dXJuIGluc3RhbmNlCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvcmZjMjIxNy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC9yZmMyMjE3LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDEyZWE3Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC9yZmMyMjE3LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTMyMyArMCwwIEBACi0jISBweXRob24KLSMKLSMgUHl0aG9uIFNlcmlhbCBQb3J0IEV4dGVuc2lvbiBmb3IgV2luMzIsIExpbnV4LCBCU0QsIEp5dGhvbgotIyBzZWUgX19pbml0X18ucHkKLSMKLSMgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIFJGQzIyMTcgY29tcGF0aWJsZSBjbGllbnQuIFJGMjIxNyBkZXNjaWJlcyBhCi0jIHByb3RvY29sIHRvIGFjY2VzcyBzZXJpYWwgcG9ydHMgb3ZlciBUQ1AvSVAgYW5kIGFsbG93cyBzZXR0aW5nIHRoZSBiYXVkIHJhdGUsCi0jIG1vZGVtIGNvbnRyb2wgbGluZXMgZXRjLgotIwotIyAoQykgMjAwMS0yMDEzIENocmlzIExpZWNodGkgPGNsaWVjaHRpQGdteC5uZXQ+Ci0jIHRoaXMgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYSBmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHNlZSBsaWNlbnNlLnR4dAotCi0jIFRPRE86Ci0jIC0gc2V0dGluZyBjb250cm9sIGxpbmUgLT4gYW5zd2VyIGlzIG5vdCBjaGVja2VkIChoYWQgcHJvYmxlbXMgd2l0aCBvbmUgb2YgdGhlCi0jICAgc2V2ZXJzKS4gY29uc2lkZXIgaW1wbGVtZW50aW5nIGEgY29tcGF0aWJpbGl0eSBtb2RlIGZsYWcgdG8gbWFrZSBjaGVjawotIyAgIGNvbmRpdGlvbmFsCi0jIC0gd3JpdGUgdGltZW91dCBub3QgaW1wbGVtZW50ZWQgYXQgYWxsCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBvYnNlcnZhdGlvbnMgYW5kIGlzc3VlcyB3aXRoIHNlcnZlcnMKLSM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBzcmVkaXJkIFYyLjIuMQotIyAtIGh0dHA6Ly93d3cuaWJpYmxpby5vcmcvcHViL0xpbnV4L3N5c3RlbS9zZXJpYWwvICAgc3JlZGlyZC0yLjIuMi50YXIuZ3oKLSMgLSBkb2VzIG5vdCBhY2tub3dsZWRnZSBTRVRfQ09OVFJPTCAoUlRTL0RUUikgY29ycmVjdGx5LCBhbHdheXMgcmVzcG9uZGluZwotIyAgIFsxMDUgMV0gaW5zdGVhZCBvZiB0aGUgYWN0dWFsIHZhbHVlLgotIyAtIFNFVF9CQVVEUkFURSBhbnN3ZXIgY29udGFpbnMgNCBleHRyYSBudWxsIGJ5dGVzIC0+IHByb2JhYmx5IGZvciBsYXJnZXIKLSMgICBudW1iZXJzIHRoYW4gMioqMzI/Ci0jIC0gVG8gZ2V0IHRoZSBzaWduYXR1cmUgW0NPTV9QT1JUX09QVElPTiAwXSBoYXMgdG8gYmUgc2VudC4KLSMgLSBydW4gYSBzZXJ2ZXI6IHdoaWxlIHRydWU7IGRvIG5jIC1sIC1wIDcwMDAgLWMgInNyZWRpcmQgZGVidWcgL2Rldi90dHlVU0IwIC92YXIvbG9jay9zcmVkaXIiOyBkb25lCi0jPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMgdGVsbmV0Y3BjZCAodW50ZXN0ZWQpCi0jIC0gaHR0cDovL2Z0cC53YXluZS5lZHUva2VybWl0L3NyZWRpcmQvdGVsbmV0Y3BjZC0xLjA5LnRhci5negotIyAtIFRvIGdldCB0aGUgc2lnbmF0dXJlIFtDT01fUE9SVF9PUFRJT05dIHcvbyBkYXRhIGhhcyB0byBiZSBzZW50LgotIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIHNlcjJuZXQKLSMgLSBkb2VzIG5vdCBuZWdvdGlhdGUgQklOQVJZIG9yIENPTV9QT1JUX09QVElPTiBmb3IgaGlzIHNpZGUgYnV0IGF0IGxlYXN0Ci0jICAgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIGNsaWVudCBhY3RpdmF0ZXMgdGhlc2Ugb3B0aW9ucwotIyAtIFRoZSBjb25maWd1cmF0aW9uIG1heSBiZSB0aGF0IHRoZSBzZXJ2ZXIgcHJpbnRzIGEgYmFubmVyLiBBcyB0aGlzIGNsaWVudAotIyAgIGltcGxlbWVudGF0aW9uIGRvZXMgYSBmbHVzaElucHV0IG9uIGNvbm5lY3QsIHRoaXMgYmFubmVyIGlzIGhpZGRlbiBmcm9tCi0jICAgdGhlIHVzZXIgYXBwbGljYXRpb24uCi0jIC0gTk9USUZZX01PREVNU1RBVEU6IHRoZSBwb2xsIGludGVydmFsIG9mIHRoZSBzZXJ2ZXIgc2VlbXMgdG8gYmUgb25lCi0jICAgc2Vjb25kLgotIyAtIFRvIGdldCB0aGUgc2lnbmF0dXJlIFtDT01fUE9SVF9PUFRJT04gMF0gaGFzIHRvIGJlIHNlbnQuCi0jIC0gcnVuIGEgc2VydmVyOiBydW4gc2VyMm5ldCBkYWVtb24sIGluIC9ldGMvc2VyMm5ldC5jb25mOgotIyAgICAgMjAwMDp0ZWxuZXQ6MDovZGV2L3R0eVMwOjk2MDAgcmVtY3RsIGJhbm5lcgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgSG93IHRvIGlkZW50aWZ5IHBvcnRzPyBweVNlcmlhbCBtaWdodCB3YW50IHRvIHN1cHBvcnQgb3RoZXIgcHJvdG9jb2xzIGluIHRoZQotIyBmdXR1cmUsIHNvIGxldHMgdXNlIGFuIFVSTCBzY2hlbWUuCi0jIGZvciBSRkMyMjE3IGNvbXBsaWFudCBzZXJ2ZXJzIHdlIHdpbGwgdXNlIHRoaXM6Ci0jICAgIHJmYzIyMTc6Ly88aG9zdD46PHBvcnQ+Wy9vcHRpb25bL29wdGlvbi4uLl1dCi0jCi0jIG9wdGlvbnM6Ci0jIC0gImRlYnVnIiBwcmludCBkaWFnbm9zdGljIG1lc3NhZ2VzCi0jIC0gImlnbl9zZXRfY29udHJvbCI6IGRvIG5vdCBsb29rIGF0IHRoZSBhbnN3ZXJzIHRvIFNFVF9DT05UUk9MCi0jIC0gInBvbGxfbW9kZW0iOiBpc3N1ZSBOT1RJRllfTU9ERU1TVEFURSByZXF1ZXN0cyB3aGVuIENUUy9EVFIvUkkvQ0QgaXMgcmVhZC4KLSMgICBXaXRob3V0IHRoaXMgb3B0aW9uIGl0IGV4cGVjdHMgdGhhdCB0aGUgc2VydmVyIHNlbmRzIG5vdGlmaWNhdGlvbnMKLSMgICBhdXRvbWF0aWNhbGx5IG9uIGNoYW5nZSAod2hpY2ggbW9zdCBzZXJ2ZXJzIGRvIGFuZCBpcyBhY2NvcmRpbmcgdG8gdGhlCi0jICAgUkZDKS4KLSMgdGhlIG9yZGVyIG9mIHRoZSBvcHRpb25zIGlzIG5vdCByZWxldmFudAotCi1mcm9tIHNlcmlhbC5zZXJpYWx1dGlsIGltcG9ydCAqCi1pbXBvcnQgdGltZQotaW1wb3J0IHN0cnVjdAotaW1wb3J0IHNvY2tldAotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IFF1ZXVlCi1pbXBvcnQgbG9nZ2luZwotCi0jIHBvcnQgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIHNvbWV0aGluZyBsaWtlIHRoaXM6Ci0jIHJmYzIyMTc6Ly9ob3N0OnBvcnQKLSMgaG9zdCBtYXkgYmUgYW4gSVAgb3IgaW5jbHVkaW5nIGRvbWFpbiwgd2hhdGV2ZXIuCi0jIHBvcnQgaXMgMC4uLjY1NTM1Ci0KLSMgbWFwIGxvZyBsZXZlbCBuYW1lcyB0byBjb25zdGFudHMuIHVzZWQgaW4gZnJvbVVSTCgpCi1MT0dHRVJfTEVWRUxTID0gewotICAgICdkZWJ1Zyc6IGxvZ2dpbmcuREVCVUcsCi0gICAgJ2luZm8nOiBsb2dnaW5nLklORk8sCi0gICAgJ3dhcm5pbmcnOiBsb2dnaW5nLldBUk5JTkcsCi0gICAgJ2Vycm9yJzogbG9nZ2luZy5FUlJPUiwKLSAgICB9Ci0KLQotIyB0ZWxuZXQgcHJvdG9jb2wgY2hhcmFjdGVycwotSUFDICA9IHRvX2J5dGVzKFsyNTVdKSAjIEludGVycHJldCBBcyBDb21tYW5kCi1ET05UID0gdG9fYnl0ZXMoWzI1NF0pCi1ETyAgID0gdG9fYnl0ZXMoWzI1M10pCi1XT05UID0gdG9fYnl0ZXMoWzI1Ml0pCi1XSUxMID0gdG9fYnl0ZXMoWzI1MV0pCi1JQUNfRE9VQkxFRCA9IHRvX2J5dGVzKFtJQUMsIElBQ10pCi0KLVNFICA9IHRvX2J5dGVzKFsyNDBdKSAgIyBTdWJuZWdvdGlhdGlvbiBFbmQKLU5PUCA9IHRvX2J5dGVzKFsyNDFdKSAgIyBObyBPcGVyYXRpb24KLURNICA9IHRvX2J5dGVzKFsyNDJdKSAgIyBEYXRhIE1hcmsKLUJSSyA9IHRvX2J5dGVzKFsyNDNdKSAgIyBCcmVhawotSVAgID0gdG9fYnl0ZXMoWzI0NF0pICAjIEludGVycnVwdCBwcm9jZXNzCi1BTyAgPSB0b19ieXRlcyhbMjQ1XSkgICMgQWJvcnQgb3V0cHV0Ci1BWVQgPSB0b19ieXRlcyhbMjQ2XSkgICMgQXJlIFlvdSBUaGVyZQotRUMgID0gdG9fYnl0ZXMoWzI0N10pICAjIEVyYXNlIENoYXJhY3RlcgotRUwgID0gdG9fYnl0ZXMoWzI0OF0pICAjIEVyYXNlIExpbmUKLUdBICA9IHRvX2J5dGVzKFsyNDldKSAgIyBHbyBBaGVhZAotU0IgPSAgdG9fYnl0ZXMoWzI1MF0pICAjIFN1Ym5lZ290aWF0aW9uIEJlZ2luCi0KLSMgc2VsZWN0ZWQgdGVsbmV0IG9wdGlvbnMKLUJJTkFSWSA9IHRvX2J5dGVzKFswXSkgIyA4LWJpdCBkYXRhIHBhdGgKLUVDSE8gPSB0b19ieXRlcyhbMV0pICAgIyBlY2hvCi1TR0EgPSB0b19ieXRlcyhbM10pICAgICMgc3VwcHJlc3MgZ28gYWhlYWQKLQotIyBSRkMyMjE3Ci1DT01fUE9SVF9PUFRJT04gPSB0b19ieXRlcyhbNDRdKQotCi0jIENsaWVudCB0byBBY2Nlc3MgU2VydmVyCi1TRVRfQkFVRFJBVEUgPSB0b19ieXRlcyhbMV0pCi1TRVRfREFUQVNJWkUgPSB0b19ieXRlcyhbMl0pCi1TRVRfUEFSSVRZID0gdG9fYnl0ZXMoWzNdKQotU0VUX1NUT1BTSVpFID0gdG9fYnl0ZXMoWzRdKQotU0VUX0NPTlRST0wgPSB0b19ieXRlcyhbNV0pCi1OT1RJRllfTElORVNUQVRFID0gdG9fYnl0ZXMoWzZdKQotTk9USUZZX01PREVNU1RBVEUgPSB0b19ieXRlcyhbN10pCi1GTE9XQ09OVFJPTF9TVVNQRU5EID0gdG9fYnl0ZXMoWzhdKQotRkxPV0NPTlRST0xfUkVTVU1FID0gdG9fYnl0ZXMoWzldKQotU0VUX0xJTkVTVEFURV9NQVNLID0gdG9fYnl0ZXMoWzEwXSkKLVNFVF9NT0RFTVNUQVRFX01BU0sgPSB0b19ieXRlcyhbMTFdKQotUFVSR0VfREFUQSA9IHRvX2J5dGVzKFsxMl0pCi0KLVNFUlZFUl9TRVRfQkFVRFJBVEUgPSB0b19ieXRlcyhbMTAxXSkKLVNFUlZFUl9TRVRfREFUQVNJWkUgPSB0b19ieXRlcyhbMTAyXSkKLVNFUlZFUl9TRVRfUEFSSVRZID0gdG9fYnl0ZXMoWzEwM10pCi1TRVJWRVJfU0VUX1NUT1BTSVpFID0gdG9fYnl0ZXMoWzEwNF0pCi1TRVJWRVJfU0VUX0NPTlRST0wgPSB0b19ieXRlcyhbMTA1XSkKLVNFUlZFUl9OT1RJRllfTElORVNUQVRFID0gdG9fYnl0ZXMoWzEwNl0pCi1TRVJWRVJfTk9USUZZX01PREVNU1RBVEUgPSB0b19ieXRlcyhbMTA3XSkKLVNFUlZFUl9GTE9XQ09OVFJPTF9TVVNQRU5EID0gdG9fYnl0ZXMoWzEwOF0pCi1TRVJWRVJfRkxPV0NPTlRST0xfUkVTVU1FID0gdG9fYnl0ZXMoWzEwOV0pCi1TRVJWRVJfU0VUX0xJTkVTVEFURV9NQVNLID0gdG9fYnl0ZXMoWzExMF0pCi1TRVJWRVJfU0VUX01PREVNU1RBVEVfTUFTSyA9IHRvX2J5dGVzKFsxMTFdKQotU0VSVkVSX1BVUkdFX0RBVEEgPSB0b19ieXRlcyhbMTEyXSkKLQotUkZDMjIxN19BTlNXRVJfTUFQID0gewotICAgIFNFVF9CQVVEUkFURTogU0VSVkVSX1NFVF9CQVVEUkFURSwKLSAgICBTRVRfREFUQVNJWkU6IFNFUlZFUl9TRVRfREFUQVNJWkUsCi0gICAgU0VUX1BBUklUWTogU0VSVkVSX1NFVF9QQVJJVFksCi0gICAgU0VUX1NUT1BTSVpFOiBTRVJWRVJfU0VUX1NUT1BTSVpFLAotICAgIFNFVF9DT05UUk9MOiBTRVJWRVJfU0VUX0NPTlRST0wsCi0gICAgTk9USUZZX0xJTkVTVEFURTogU0VSVkVSX05PVElGWV9MSU5FU1RBVEUsCi0gICAgTk9USUZZX01PREVNU1RBVEU6IFNFUlZFUl9OT1RJRllfTU9ERU1TVEFURSwKLSAgICBGTE9XQ09OVFJPTF9TVVNQRU5EOiBTRVJWRVJfRkxPV0NPTlRST0xfU1VTUEVORCwKLSAgICBGTE9XQ09OVFJPTF9SRVNVTUU6IFNFUlZFUl9GTE9XQ09OVFJPTF9SRVNVTUUsCi0gICAgU0VUX0xJTkVTVEFURV9NQVNLOiBTRVJWRVJfU0VUX0xJTkVTVEFURV9NQVNLLAotICAgIFNFVF9NT0RFTVNUQVRFX01BU0s6IFNFUlZFUl9TRVRfTU9ERU1TVEFURV9NQVNLLAotICAgIFBVUkdFX0RBVEE6IFNFUlZFUl9QVVJHRV9EQVRBLAotfQotCi1TRVRfQ09OVFJPTF9SRVFfRkxPV19TRVRUSU5HID0gdG9fYnl0ZXMoWzBdKSAgICAgICAgIyBSZXF1ZXN0IENvbSBQb3J0IEZsb3cgQ29udHJvbCBTZXR0aW5nIChvdXRib3VuZC9ib3RoKQotU0VUX0NPTlRST0xfVVNFX05PX0ZMT1dfQ09OVFJPTCA9IHRvX2J5dGVzKFsxXSkgICAgICMgVXNlIE5vIEZsb3cgQ29udHJvbCAob3V0Ym91bmQvYm90aCkKLVNFVF9DT05UUk9MX1VTRV9TV19GTE9XX0NPTlRST0wgPSB0b19ieXRlcyhbMl0pICAgICAjIFVzZSBYT04vWE9GRiBGbG93IENvbnRyb2wgKG91dGJvdW5kL2JvdGgpCi1TRVRfQ09OVFJPTF9VU0VfSFdfRkxPV19DT05UUk9MID0gdG9fYnl0ZXMoWzNdKSAgICAgIyBVc2UgSEFSRFdBUkUgRmxvdyBDb250cm9sIChvdXRib3VuZC9ib3RoKQotU0VUX0NPTlRST0xfUkVRX0JSRUFLX1NUQVRFID0gdG9fYnl0ZXMoWzRdKSAgICAgICAgICMgUmVxdWVzdCBCUkVBSyBTdGF0ZQotU0VUX0NPTlRST0xfQlJFQUtfT04gPSB0b19ieXRlcyhbNV0pICAgICAgICAgICAgICAgICMgU2V0IEJSRUFLIFN0YXRlIE9OCi1TRVRfQ09OVFJPTF9CUkVBS19PRkYgPSB0b19ieXRlcyhbNl0pICAgICAgICAgICAgICAgIyBTZXQgQlJFQUsgU3RhdGUgT0ZGCi1TRVRfQ09OVFJPTF9SRVFfRFRSID0gdG9fYnl0ZXMoWzddKSAgICAgICAgICAgICAgICAgIyBSZXF1ZXN0IERUUiBTaWduYWwgU3RhdGUKLVNFVF9DT05UUk9MX0RUUl9PTiA9IHRvX2J5dGVzKFs4XSkgICAgICAgICAgICAgICAgICAjIFNldCBEVFIgU2lnbmFsIFN0YXRlIE9OCi1TRVRfQ09OVFJPTF9EVFJfT0ZGID0gdG9fYnl0ZXMoWzldKSAgICAgICAgICAgICAgICAgIyBTZXQgRFRSIFNpZ25hbCBTdGF0ZSBPRkYKLVNFVF9DT05UUk9MX1JFUV9SVFMgPSB0b19ieXRlcyhbMTBdKSAgICAgICAgICAgICAgICAjIFJlcXVlc3QgUlRTIFNpZ25hbCBTdGF0ZQotU0VUX0NPTlRST0xfUlRTX09OID0gdG9fYnl0ZXMoWzExXSkgICAgICAgICAgICAgICAgICMgU2V0IFJUUyBTaWduYWwgU3RhdGUgT04KLVNFVF9DT05UUk9MX1JUU19PRkYgPSB0b19ieXRlcyhbMTJdKSAgICAgICAgICAgICAgICAjIFNldCBSVFMgU2lnbmFsIFN0YXRlIE9GRgotU0VUX0NPTlRST0xfUkVRX0ZMT1dfU0VUVElOR19JTiA9IHRvX2J5dGVzKFsxM10pICAgICMgUmVxdWVzdCBDb20gUG9ydCBGbG93IENvbnRyb2wgU2V0dGluZyAoaW5ib3VuZCkKLVNFVF9DT05UUk9MX1VTRV9OT19GTE9XX0NPTlRST0xfSU4gPSB0b19ieXRlcyhbMTRdKSAjIFVzZSBObyBGbG93IENvbnRyb2wgKGluYm91bmQpCi1TRVRfQ09OVFJPTF9VU0VfU1dfRkxPV19DT05UT0xfSU4gPSB0b19ieXRlcyhbMTVdKSAgIyBVc2UgWE9OL1hPRkYgRmxvdyBDb250cm9sIChpbmJvdW5kKQotU0VUX0NPTlRST0xfVVNFX0hXX0ZMT1dfQ09OVE9MX0lOID0gdG9fYnl0ZXMoWzE2XSkgICMgVXNlIEhBUkRXQVJFIEZsb3cgQ29udHJvbCAoaW5ib3VuZCkKLVNFVF9DT05UUk9MX1VTRV9EQ0RfRkxPV19DT05UUk9MID0gdG9fYnl0ZXMoWzE3XSkgICAjIFVzZSBEQ0QgRmxvdyBDb250cm9sIChvdXRib3VuZC9ib3RoKQotU0VUX0NPTlRST0xfVVNFX0RUUl9GTE9XX0NPTlRST0wgPSB0b19ieXRlcyhbMThdKSAgICMgVXNlIERUUiBGbG93IENvbnRyb2wgKGluYm91bmQpCi1TRVRfQ09OVFJPTF9VU0VfRFNSX0ZMT1dfQ09OVFJPTCA9IHRvX2J5dGVzKFsxOV0pICAgIyBVc2UgRFNSIEZsb3cgQ29udHJvbCAob3V0Ym91bmQvYm90aCkKLQotTElORVNUQVRFX01BU0tfVElNRU9VVCA9IDEyOCAgICAgICAgICAgICAgICAjIFRpbWUtb3V0IEVycm9yCi1MSU5FU1RBVEVfTUFTS19TSElGVFJFR19FTVBUWSA9IDY0ICAgICAgICAgICMgVHJhbnNmZXIgU2hpZnQgUmVnaXN0ZXIgRW1wdHkKLUxJTkVTVEFURV9NQVNLX1RSQU5TUkVHX0VNUFRZID0gMzIgICAgICAgICAgIyBUcmFuc2ZlciBIb2xkaW5nIFJlZ2lzdGVyIEVtcHR5Ci1MSU5FU1RBVEVfTUFTS19CUkVBS19ERVRFQ1QgPSAxNiAgICAgICAgICAgICMgQnJlYWstZGV0ZWN0IEVycm9yCi1MSU5FU1RBVEVfTUFTS19GUkFNSU5HX0VSUk9SID0gOCAgICAgICAgICAgICMgRnJhbWluZyBFcnJvcgotTElORVNUQVRFX01BU0tfUEFSVElZX0VSUk9SID0gNCAgICAgICAgICAgICAjIFBhcml0eSBFcnJvcgotTElORVNUQVRFX01BU0tfT1ZFUlJVTl9FUlJPUiA9IDIgICAgICAgICAgICAjIE92ZXJydW4gRXJyb3IKLUxJTkVTVEFURV9NQVNLX0RBVEFfUkVBRFkgPSAxICAgICAgICAgICAgICAgIyBEYXRhIFJlYWR5Ci0KLU1PREVNU1RBVEVfTUFTS19DRCA9IDEyOCAgICAgICAgICAgICAgICAgICAgIyBSZWNlaXZlIExpbmUgU2lnbmFsIERldGVjdCAoYWxzbyBrbm93biBhcyBDYXJyaWVyIERldGVjdCkKLU1PREVNU1RBVEVfTUFTS19SSSA9IDY0ICAgICAgICAgICAgICAgICAgICAgIyBSaW5nIEluZGljYXRvcgotTU9ERU1TVEFURV9NQVNLX0RTUiA9IDMyICAgICAgICAgICAgICAgICAgICAjIERhdGEtU2V0LVJlYWR5IFNpZ25hbCBTdGF0ZQotTU9ERU1TVEFURV9NQVNLX0NUUyA9IDE2ICAgICAgICAgICAgICAgICAgICAjIENsZWFyLVRvLVNlbmQgU2lnbmFsIFN0YXRlCi1NT0RFTVNUQVRFX01BU0tfQ0RfQ0hBTkdFID0gOCAgICAgICAgICAgICAgICMgRGVsdGEgUmVjZWl2ZSBMaW5lIFNpZ25hbCBEZXRlY3QKLU1PREVNU1RBVEVfTUFTS19SSV9DSEFOR0UgPSA0ICAgICAgICAgICAgICAgIyBUcmFpbGluZy1lZGdlIFJpbmcgRGV0ZWN0b3IKLU1PREVNU1RBVEVfTUFTS19EU1JfQ0hBTkdFID0gMiAgICAgICAgICAgICAgIyBEZWx0YSBEYXRhLVNldC1SZWFkeQotTU9ERU1TVEFURV9NQVNLX0NUU19DSEFOR0UgPSAxICAgICAgICAgICAgICAjIERlbHRhIENsZWFyLVRvLVNlbmQKLQotUFVSR0VfUkVDRUlWRV9CVUZGRVIgPSB0b19ieXRlcyhbMV0pICAgICAgICAjIFB1cmdlIGFjY2VzcyBzZXJ2ZXIgcmVjZWl2ZSBkYXRhIGJ1ZmZlcgotUFVSR0VfVFJBTlNNSVRfQlVGRkVSID0gdG9fYnl0ZXMoWzJdKSAgICAgICAjIFB1cmdlIGFjY2VzcyBzZXJ2ZXIgdHJhbnNtaXQgZGF0YSBidWZmZXIKLVBVUkdFX0JPVEhfQlVGRkVSUyA9IHRvX2J5dGVzKFszXSkgICAgICAgICAgIyBQdXJnZSBib3RoIHRoZSBhY2Nlc3Mgc2VydmVyIHJlY2VpdmUgZGF0YSBidWZmZXIgYW5kIHRoZSBhY2Nlc3Mgc2VydmVyIHRyYW5zbWl0IGRhdGEgYnVmZmVyCi0KLQotUkZDMjIxN19QQVJJVFlfTUFQID0gewotICAgIFBBUklUWV9OT05FOiAxLAotICAgIFBBUklUWV9PREQ6IDIsCi0gICAgUEFSSVRZX0VWRU46IDMsCi0gICAgUEFSSVRZX01BUks6IDQsCi0gICAgUEFSSVRZX1NQQUNFOiA1LAotfQotUkZDMjIxN19SRVZFUlNFX1BBUklUWV9NQVAgPSBkaWN0KCh2LGspIGZvciBrLHYgaW4gUkZDMjIxN19QQVJJVFlfTUFQLml0ZW1zKCkpCi0KLVJGQzIyMTdfU1RPUEJJVF9NQVAgPSB7Ci0gICAgU1RPUEJJVFNfT05FOiAxLAotICAgIFNUT1BCSVRTX09ORV9QT0lOVF9GSVZFOiAzLAotICAgIFNUT1BCSVRTX1RXTzogMiwKLX0KLVJGQzIyMTdfUkVWRVJTRV9TVE9QQklUX01BUCA9IGRpY3QoKHYsaykgZm9yIGssdiBpbiBSRkMyMjE3X1NUT1BCSVRfTUFQLml0ZW1zKCkpCi0KLSMgVGVsbmV0IGZpbHRlciBzdGF0ZXMKLU1fTk9STUFMID0gMAotTV9JQUNfU0VFTiA9IDEKLU1fTkVHT1RJQVRFID0gMgotCi0jIFRlbG5ldE9wdGlvbiBhbmQgVGVsbmV0U3VibmVnb3RpYXRpb24gc3RhdGVzCi1SRVFVRVNURUQgPSAnUkVRVUVTVEVEJwotQUNUSVZFID0gJ0FDVElWRScKLUlOQUNUSVZFID0gJ0lOQUNUSVZFJwotUkVBTExZX0lOQUNUSVZFID0gJ1JFQUxMWV9JTkFDVElWRScKLQotY2xhc3MgVGVsbmV0T3B0aW9uKG9iamVjdCk6Ci0gICAgIiIiTWFuYWdlIGEgc2luZ2xlIHRlbG5ldCBvcHRpb24sIGtlZXBzIHRyYWNrIG9mIERPL0RPTlQgV0lMTC9XT05ULiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm5lY3Rpb24sIG5hbWUsIG9wdGlvbiwgc2VuZF95ZXMsIHNlbmRfbm8sIGFja195ZXMsIGFja19ubywgaW5pdGlhbF9zdGF0ZSwgYWN0aXZhdGlvbl9jYWxsYmFjaz1Ob25lKToKLSAgICAgICAgIiIiXAotICAgICAgICBJbml0aWFsaXplIG9wdGlvbi4KLSAgICAgICAgOnBhcmFtIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24gdXNlZCB0byB0cmFuc21pdCBhbnN3ZXJzCi0gICAgICAgIDpwYXJhbSBuYW1lOiBhIHJlYWRhYmxlIG5hbWUgZm9yIGRlYnVnIG91dHB1dHMKLSAgICAgICAgOnBhcmFtIHNlbmRfeWVzOiB3aGF0IHRvIHNlbmQgd2hlbiBvcHRpb24gaXMgdG8gYmUgZW5hYmxlZC4KLSAgICAgICAgOnBhcmFtIHNlbmRfbm86IHdoYXQgdG8gc2VuZCB3aGVuIG9wdGlvbiBpcyB0byBiZSBkaXNhYmxlZC4KLSAgICAgICAgOnBhcmFtIGFja195ZXM6IHdoYXQgdG8gZXhwZWN0IHdoZW4gcmVtb3RlIGFncmVlcyBvbiBvcHRpb24uCi0gICAgICAgIDpwYXJhbSBhY2tfbm86IHdoYXQgdG8gZXhwZWN0IHdoZW4gcmVtb3RlIGRpc2FncmVlcyBvbiBvcHRpb24uCi0gICAgICAgIDpwYXJhbSBpbml0aWFsX3N0YXRlOiBvcHRpb25zIGluaXRpYWxpemVkIHdpdGggUkVRVUVTVEVEIGFyZSB0cmllZCB0bwotICAgICAgICAgICAgYmUgZW5hYmxlZCBvbiBzdGFydHVwLiB1c2UgSU5BQ1RJVkUgZm9yIGFsbCBvdGhlcnMuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uCi0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi5vcHRpb24gPSBvcHRpb24KLSAgICAgICAgc2VsZi5zZW5kX3llcyA9IHNlbmRfeWVzCi0gICAgICAgIHNlbGYuc2VuZF9ubyA9IHNlbmRfbm8KLSAgICAgICAgc2VsZi5hY2tfeWVzID0gYWNrX3llcwotICAgICAgICBzZWxmLmFja19ubyA9IGFja19ubwotICAgICAgICBzZWxmLnN0YXRlID0gaW5pdGlhbF9zdGF0ZQotICAgICAgICBzZWxmLmFjdGl2ZSA9IEZhbHNlCi0gICAgICAgIHNlbGYuYWN0aXZhdGlvbl9jYWxsYmFjayA9IGFjdGl2YXRpb25fY2FsbGJhY2sKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgIiIiU3RyaW5nIGZvciBkZWJ1ZyBvdXRwdXRzIiIiCi0gICAgICAgIHJldHVybiAiJXM6JXMoJXMpIiAlIChzZWxmLm5hbWUsIHNlbGYuYWN0aXZlLCBzZWxmLnN0YXRlKQotCi0gICAgZGVmIHByb2Nlc3NfaW5jb21pbmcoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgICIiIkEgRE8vRE9OVC9XSUxML1dPTlQgd2FzIHJlY2VpdmVkIGZvciB0aGlzIG9wdGlvbiwgdXBkYXRlIHN0YXRlIGFuZAotICAgICAgICBhbnN3ZXIgd2hlbiBuZWVkZWQuIiIiCi0gICAgICAgIGlmIGNvbW1hbmQgPT0gc2VsZi5hY2tfeWVzOgotICAgICAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBSRVFVRVNURUQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IEFDVElWRQotICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZlID0gVHJ1ZQotICAgICAgICAgICAgICAgIGlmIHNlbGYuYWN0aXZhdGlvbl9jYWxsYmFjayBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hY3RpdmF0aW9uX2NhbGxiYWNrKCkKLSAgICAgICAgICAgIGVsaWYgc2VsZi5zdGF0ZSBpcyBBQ1RJVkU6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxpZiBzZWxmLnN0YXRlIGlzIElOQUNUSVZFOgotICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBBQ1RJVkUKLSAgICAgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24udGVsbmV0U2VuZE9wdGlvbihzZWxmLnNlbmRfeWVzLCBzZWxmLm9wdGlvbikKLSAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmFjdGl2YXRpb25fY2FsbGJhY2sgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZhdGlvbl9jYWxsYmFjaygpCi0gICAgICAgICAgICBlbGlmIHNlbGYuc3RhdGUgaXMgUkVBTExZX0lOQUNUSVZFOgotICAgICAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbi50ZWxuZXRTZW5kT3B0aW9uKHNlbGYuc2VuZF9ubywgc2VsZi5vcHRpb24pCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ29wdGlvbiBpbiBpbGxlZ2FsIHN0YXRlICVyJyAlIHNlbGYpCi0gICAgICAgIGVsaWYgY29tbWFuZCA9PSBzZWxmLmFja19ubzoKLSAgICAgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgUkVRVUVTVEVEOgotICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBJTkFDVElWRQotICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZlID0gRmFsc2UKLSAgICAgICAgICAgIGVsaWYgc2VsZi5zdGF0ZSBpcyBBQ1RJVkU6Ci0gICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IElOQUNUSVZFCi0gICAgICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnRlbG5ldFNlbmRPcHRpb24oc2VsZi5zZW5kX25vLCBzZWxmLm9wdGlvbikKLSAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZSA9IEZhbHNlCi0gICAgICAgICAgICBlbGlmIHNlbGYuc3RhdGUgaXMgSU5BQ1RJVkU6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxpZiBzZWxmLnN0YXRlIGlzIFJFQUxMWV9JTkFDVElWRToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ29wdGlvbiBpbiBpbGxlZ2FsIHN0YXRlICVyJyAlIHNlbGYpCi0KLQotY2xhc3MgVGVsbmV0U3VibmVnb3RpYXRpb24ob2JqZWN0KToKLSAgICAiIiJcCi0gICAgQSBvYmplY3QgdG8gaGFuZGxlIHN1Ym5lZ290aWF0aW9uIG9mIG9wdGlvbnMuIEluIHRoaXMgY2FzZSBhY3R1YWxseQotICAgIHN1Yi1zdWIgb3B0aW9ucyBmb3IgUkZDIDIyMTcuIEl0IGlzIHVzZWQgdG8gdHJhY2sgY29tIHBvcnQgb3B0aW9ucy4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uZWN0aW9uLCBuYW1lLCBvcHRpb24sIGFja19vcHRpb249Tm9uZSk6Ci0gICAgICAgIGlmIGFja19vcHRpb24gaXMgTm9uZTogYWNrX29wdGlvbiA9IG9wdGlvbgotICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uCi0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi5vcHRpb24gPSBvcHRpb24KLSAgICAgICAgc2VsZi52YWx1ZSA9IE5vbmUKLSAgICAgICAgc2VsZi5hY2tfb3B0aW9uID0gYWNrX29wdGlvbgotICAgICAgICBzZWxmLnN0YXRlID0gSU5BQ1RJVkUKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgIiIiU3RyaW5nIGZvciBkZWJ1ZyBvdXRwdXRzLiIiIgotICAgICAgICByZXR1cm4gIiVzOiVzIiAlIChzZWxmLm5hbWUsIHNlbGYuc3RhdGUpCi0KLSAgICBkZWYgc2V0KHNlbGYsIHZhbHVlKToKLSAgICAgICAgIiIiXAotICAgICAgICByZXF1ZXN0IGEgY2hhbmdlIG9mIHRoZSB2YWx1ZS4gYSByZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIHNlcnZlci4gaWYKLSAgICAgICAgdGhlIGNsaWVudCBuZWVkcyB0byBrbm93IGlmIHRoZSBjaGFuZ2UgaXMgcGVyZm9ybWVkIGhlIGhhcyB0byBjaGVjayB0aGUKLSAgICAgICAgc3RhdGUgb2YgdGhpcyBvYmplY3QuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKLSAgICAgICAgc2VsZi5zdGF0ZSA9IFJFUVVFU1RFRAotICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucmZjMjIxN1NlbmRTdWJuZWdvdGlhdGlvbihzZWxmLm9wdGlvbiwgc2VsZi52YWx1ZSkKLSAgICAgICAgaWYgc2VsZi5jb25uZWN0aW9uLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbi5sb2dnZXIuZGVidWcoIlNCIFJlcXVlc3RpbmcgJXMgLT4gJXIiICUgKHNlbGYubmFtZSwgc2VsZi52YWx1ZSkpCi0KLSAgICBkZWYgaXNSZWFkeShzZWxmKToKLSAgICAgICAgIiIiXAotICAgICAgICBjaGVjayBpZiBhbnN3ZXIgZnJvbSBzZXJ2ZXIgaGFzIGJlZW4gcmVjZWl2ZWQuIHdoZW4gc2VydmVyIHJlamVjdHMKLSAgICAgICAgdGhlIGNoYW5nZSwgcmFpc2UgYSBWYWx1ZUVycm9yLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5zdGF0ZSA9PSBSRUFMTFlfSU5BQ1RJVkU6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZW1vdGUgcmVqZWN0ZWQgdmFsdWUgZm9yIG9wdGlvbiAlciIgJSAoc2VsZi5uYW1lKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuc3RhdGUgPT0gQUNUSVZFCi0gICAgIyBhZGQgcHJvcGVydHkgdG8gaGF2ZSBhIHNpbWlsYXIgaW50ZXJmYWNlIGFzIFRlbG5ldE9wdGlvbgotICAgIGFjdGl2ZSA9IHByb3BlcnR5KGlzUmVhZHkpCi0KLSAgICBkZWYgd2FpdChzZWxmLCB0aW1lb3V0PTMpOgotICAgICAgICAiIiJcCi0gICAgICAgIHdhaXQgdW50aWwgdGhlIHN1Ym5lZ290aWF0aW9uIGhhcyBiZWVuIGFja25vd2xlZGdlZCBvciB0aW1lb3V0LiBJdAotICAgICAgICBjYW4gYWxzbyB0aHJvdyBhIHZhbHVlIGVycm9yIHdoZW4gdGhlIGFuc3dlciBmcm9tIHRoZSBzZXJ2ZXIgZG9lcyBub3QKLSAgICAgICAgbWF0Y2ggdGhlIHZhbHVlIHNlbnQuCi0gICAgICAgICIiIgotICAgICAgICB0aW1lb3V0X3RpbWUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKLSAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgPCB0aW1lb3V0X3RpbWU6Ci0gICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDUpICAgICMgcHJldmVudCAxMDAlIENQVSBsb2FkCi0gICAgICAgICAgICBpZiBzZWxmLmlzUmVhZHkoKToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJ0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIG9wdGlvbiAlciIgJSAoc2VsZi5uYW1lKSkKLQotICAgIGRlZiBjaGVja0Fuc3dlcihzZWxmLCBzdWJvcHRpb24pOgotICAgICAgICAiIiJcCi0gICAgICAgIGNoZWNrIGFuIGluY29taW5nIHN1Ym5lZ290aWF0aW9uIGJsb2NrLiB0aGUgcGFyYW1ldGVyIGFscmVhZHkgaGFzCi0gICAgICAgIGN1dCBvZmYgdGhlIGhlYWRlciBsaWtlIHN1YiBvcHRpb24gbnVtYmVyIGFuZCBjb20gcG9ydCBvcHRpb24gdmFsdWUuCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLnZhbHVlID09IHN1Ym9wdGlvbls6bGVuKHNlbGYudmFsdWUpXToKLSAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBBQ1RJVkUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgZXJyb3IgcHJvcGFnYXRpb24gZG9uZSBpbiBpc1JlYWR5Ci0gICAgICAgICAgICBzZWxmLnN0YXRlID0gUkVBTExZX0lOQUNUSVZFCi0gICAgICAgIGlmIHNlbGYuY29ubmVjdGlvbi5sb2dnZXI6Ci0gICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24ubG9nZ2VyLmRlYnVnKCJTQiBBbnN3ZXIgJXMgLT4gJXIgLT4gJXMiICUgKHNlbGYubmFtZSwgc3Vib3B0aW9uLCBzZWxmLnN0YXRlKSkKLQotCi1jbGFzcyBSRkMyMjE3U2VyaWFsKFNlcmlhbEJhc2UpOgotICAgICIiIlNlcmlhbCBwb3J0IGltcGxlbWVudGF0aW9uIGZvciBSRkMgMjIxNyByZW1vdGUgc2VyaWFsIHBvcnRzLiIiIgotCi0gICAgQkFVRFJBVEVTID0gKDUwLCA3NSwgMTEwLCAxMzQsIDE1MCwgMjAwLCAzMDAsIDYwMCwgMTIwMCwgMTgwMCwgMjQwMCwgNDgwMCwKLSAgICAgICAgICAgICAgICAgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwKQotCi0gICAgZGVmIG9wZW4oc2VsZik6Ci0gICAgICAgICIiIlwKLSAgICAgICAgT3BlbiBwb3J0IHdpdGggY3VycmVudCBzZXR0aW5ncy4gVGhpcyBtYXkgdGhyb3cgYSBTZXJpYWxFeGNlcHRpb24KLSAgICAgICAgaWYgdGhlIHBvcnQgY2Fubm90IGJlIG9wZW5lZC4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYubG9nZ2VyID0gTm9uZQotICAgICAgICBzZWxmLl9pZ25vcmVfc2V0X2NvbnRyb2xfYW5zd2VyID0gRmFsc2UKLSAgICAgICAgc2VsZi5fcG9sbF9tb2RlbV9zdGF0ZSA9IEZhbHNlCi0gICAgICAgIHNlbGYuX25ldHdvcmtfdGltZW91dCA9IDMKLSAgICAgICAgaWYgc2VsZi5fcG9ydCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJQb3J0IG11c3QgYmUgY29uZmlndXJlZCBiZWZvcmUgaXQgY2FuIGJlIHVzZWQuIikKLSAgICAgICAgaWYgc2VsZi5faXNPcGVuOgotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJQb3J0IGlzIGFscmVhZHkgb3Blbi4iKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgICAgICBzZWxmLl9zb2NrZXQuY29ubmVjdChzZWxmLmZyb21VUkwoc2VsZi5wb3J0c3RyKSkKLSAgICAgICAgICAgIHNlbGYuX3NvY2tldC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX1RDUCwgc29ja2V0LlRDUF9OT0RFTEFZLCAxKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBtc2c6Ci0gICAgICAgICAgICBzZWxmLl9zb2NrZXQgPSBOb25lCi0gICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oIkNvdWxkIG5vdCBvcGVuIHBvcnQgJXM6ICVzIiAlIChzZWxmLnBvcnRzdHIsIG1zZykpCi0KLSAgICAgICAgc2VsZi5fc29ja2V0LnNldHRpbWVvdXQoNSkgIyBYWFggZ29vZCB2YWx1ZT8KLQotICAgICAgICAjIHVzZSBhIHRocmVhZCBzYXZlIHF1ZXVlIGFzIGJ1ZmZlci4gaXQgYWxzbyBzaW1wbGlmaWVzIGltcGxlbWVudGluZwotICAgICAgICAjIHRoZSByZWFkIHRpbWVvdXQKLSAgICAgICAgc2VsZi5fcmVhZF9idWZmZXIgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgICMgdG8gZW5zdXJlIHRoYXQgdXNlciB3cml0ZXMgZG9lcyBub3QgaW50ZXJmZXJlIHdpdGggaW50ZXJuYWwKLSAgICAgICAgIyB0ZWxuZXQvcmZjMjIxNyBvcHRpb25zIGVzdGFibGlzaCBhIGxvY2sKLSAgICAgICAgc2VsZi5fd3JpdGVfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKLSAgICAgICAgIyBuYW1lIHRoZSBmb2xsb3dpbmcgc2VwYXJhdGVseSBzbyB0aGF0LCBiZWxvdywgYSBjaGVjayBjYW4gYmUgZWFzaWx5IGRvbmUKLSAgICAgICAgbWFuZGFkb3J5X29wdGlvbnMgPSBbCi0gICAgICAgICAgICBUZWxuZXRPcHRpb24oc2VsZiwgJ3dlLUJJTkFSWScsIEJJTkFSWSwgV0lMTCwgV09OVCwgRE8sIERPTlQsIElOQUNUSVZFKSwKLSAgICAgICAgICAgIFRlbG5ldE9wdGlvbihzZWxmLCAnd2UtUkZDMjIxNycsIENPTV9QT1JUX09QVElPTiwgV0lMTCwgV09OVCwgRE8sIERPTlQsIFJFUVVFU1RFRCksCi0gICAgICAgIF0KLSAgICAgICAgIyBhbGwgc3VwcG9ydGVkIHRlbG5ldCBvcHRpb25zCi0gICAgICAgIHNlbGYuX3RlbG5ldF9vcHRpb25zID0gWwotICAgICAgICAgICAgVGVsbmV0T3B0aW9uKHNlbGYsICdFQ0hPJywgRUNITywgRE8sIERPTlQsIFdJTEwsIFdPTlQsIFJFUVVFU1RFRCksCi0gICAgICAgICAgICBUZWxuZXRPcHRpb24oc2VsZiwgJ3dlLVNHQScsIFNHQSwgV0lMTCwgV09OVCwgRE8sIERPTlQsIFJFUVVFU1RFRCksCi0gICAgICAgICAgICBUZWxuZXRPcHRpb24oc2VsZiwgJ3RoZXktU0dBJywgU0dBLCBETywgRE9OVCwgV0lMTCwgV09OVCwgUkVRVUVTVEVEKSwKLSAgICAgICAgICAgIFRlbG5ldE9wdGlvbihzZWxmLCAndGhleS1CSU5BUlknLCBCSU5BUlksIERPLCBET05ULCBXSUxMLCBXT05ULCBJTkFDVElWRSksCi0gICAgICAgICAgICBUZWxuZXRPcHRpb24oc2VsZiwgJ3RoZXktUkZDMjIxNycsIENPTV9QT1JUX09QVElPTiwgRE8sIERPTlQsIFdJTEwsIFdPTlQsIFJFUVVFU1RFRCksCi0gICAgICAgIF0gKyBtYW5kYWRvcnlfb3B0aW9ucwotICAgICAgICAjIFJGQyAyMjE3IHNwZWNpZmljIHN0YXRlcwotICAgICAgICAjIENPTSBwb3J0IHNldHRpbmdzCi0gICAgICAgIHNlbGYuX3JmYzIyMTdfcG9ydF9zZXR0aW5ncyA9IHsKLSAgICAgICAgICAgICdiYXVkcmF0ZSc6IFRlbG5ldFN1Ym5lZ290aWF0aW9uKHNlbGYsICdiYXVkcmF0ZScsIFNFVF9CQVVEUkFURSwgU0VSVkVSX1NFVF9CQVVEUkFURSksCi0gICAgICAgICAgICAnZGF0YXNpemUnOiBUZWxuZXRTdWJuZWdvdGlhdGlvbihzZWxmLCAnZGF0YXNpemUnLCBTRVRfREFUQVNJWkUsIFNFUlZFUl9TRVRfREFUQVNJWkUpLAotICAgICAgICAgICAgJ3Bhcml0eSc6ICAgVGVsbmV0U3VibmVnb3RpYXRpb24oc2VsZiwgJ3Bhcml0eScsICAgU0VUX1BBUklUWSwgICBTRVJWRVJfU0VUX1BBUklUWSksCi0gICAgICAgICAgICAnc3RvcHNpemUnOiBUZWxuZXRTdWJuZWdvdGlhdGlvbihzZWxmLCAnc3RvcHNpemUnLCBTRVRfU1RPUFNJWkUsIFNFUlZFUl9TRVRfU1RPUFNJWkUpLAotICAgICAgICAgICAgfQotICAgICAgICAjIFRoZXJlIGFyZSBtb3JlIHN1Ym5lZ290aWF0aW9uIG9iamVjdHMsIGNvbWJpbmUgYWxsIGluIG9uZSBkaWN0aW9uYXJ5Ci0gICAgICAgICMgZm9yIGVhc3kgYWNjZXNzCi0gICAgICAgIHNlbGYuX3JmYzIyMTdfb3B0aW9ucyA9IHsKLSAgICAgICAgICAgICdwdXJnZSc6ICAgIFRlbG5ldFN1Ym5lZ290aWF0aW9uKHNlbGYsICdwdXJnZScsICAgIFBVUkdFX0RBVEEsICAgU0VSVkVSX1BVUkdFX0RBVEEpLAotICAgICAgICAgICAgJ2NvbnRyb2wnOiAgVGVsbmV0U3VibmVnb3RpYXRpb24oc2VsZiwgJ2NvbnRyb2wnLCAgU0VUX0NPTlRST0wsICBTRVJWRVJfU0VUX0NPTlRST0wpLAotICAgICAgICAgICAgfQotICAgICAgICBzZWxmLl9yZmMyMjE3X29wdGlvbnMudXBkYXRlKHNlbGYuX3JmYzIyMTdfcG9ydF9zZXR0aW5ncykKLSAgICAgICAgIyBjYWNoZSBmb3IgbGluZSBhbmQgbW9kZW0gc3RhdGVzIHRoYXQgdGhlIHNlcnZlciBzZW5kcyB0byB1cwotICAgICAgICBzZWxmLl9saW5lc3RhdGUgPSAwCi0gICAgICAgIHNlbGYuX21vZGVtc3RhdGUgPSBOb25lCi0gICAgICAgIHNlbGYuX21vZGVtc3RhdGVfZXhwaXJlcyA9IDAKLSAgICAgICAgIyBSRkMgMjIxNyBmbG93IGNvbnRyb2wgYmV0d2VlbiBzZXJ2ZXIgYW5kIGNsaWVudAotICAgICAgICBzZWxmLl9yZW1vdGVfc3VzcGVuZF9mbG93ID0gRmFsc2UKLQotICAgICAgICBzZWxmLl90aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl90ZWxuZXRSZWFkTG9vcCkKLSAgICAgICAgc2VsZi5fdGhyZWFkLnNldERhZW1vbihUcnVlKQotICAgICAgICBzZWxmLl90aHJlYWQuc2V0TmFtZSgncHlTZXJpYWwgUkZDIDIyMTcgcmVhZGVyIHRocmVhZCBmb3IgJXMnICUgKHNlbGYuX3BvcnQsKSkKLSAgICAgICAgc2VsZi5fdGhyZWFkLnN0YXJ0KCkKLQotICAgICAgICAjIG5lZ290aWF0ZSBUZWxuZXQvUkZDIDIyMTcgLT4gc2VuZCBpbml0aWFsIHJlcXVlc3RzCi0gICAgICAgIGZvciBvcHRpb24gaW4gc2VsZi5fdGVsbmV0X29wdGlvbnM6Ci0gICAgICAgICAgICBpZiBvcHRpb24uc3RhdGUgaXMgUkVRVUVTVEVEOgotICAgICAgICAgICAgICAgIHNlbGYudGVsbmV0U2VuZE9wdGlvbihvcHRpb24uc2VuZF95ZXMsIG9wdGlvbi5vcHRpb24pCi0gICAgICAgICMgbm93IHdhaXQgdW50aWwgaW1wb3J0YW50IG9wdGlvbnMgYXJlIG5lZ290aWF0ZWQKLSAgICAgICAgdGltZW91dF90aW1lID0gdGltZS50aW1lKCkgKyBzZWxmLl9uZXR3b3JrX3RpbWVvdXQKLSAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgPCB0aW1lb3V0X3RpbWU6Ci0gICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDUpICAgICMgcHJldmVudCAxMDAlIENQVSBsb2FkCi0gICAgICAgICAgICBpZiBzdW0oby5hY3RpdmUgZm9yIG8gaW4gbWFuZGFkb3J5X29wdGlvbnMpID09IGxlbihtYW5kYWRvcnlfb3B0aW9ucyk6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbigiUmVtb3RlIGRvZXMgbm90IHNlZW0gdG8gc3VwcG9ydCBSRkMyMjE3IG9yIEJJTkFSWSBtb2RlICVyIiAlIG1hbmRhZG9yeV9vcHRpb25zKQotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIk5lZ290aWF0ZWQgb3B0aW9uczogJXMiICUgc2VsZi5fdGVsbmV0X29wdGlvbnMpCi0KLSAgICAgICAgIyBmaW5lLCBnbyBvbiwgc2V0IFJGQyAyMjcxIHNwZWNpZmljIHRoaW5ncwotICAgICAgICBzZWxmLl9yZWNvbmZpZ3VyZVBvcnQoKQotICAgICAgICAjIGFsbCB0aGluZ3Mgc2V0IHVwIGdldCwgbm93IGEgY2xlYW4gc3RhcnQKLSAgICAgICAgc2VsZi5faXNPcGVuID0gVHJ1ZQotICAgICAgICBpZiBub3Qgc2VsZi5fcnRzY3RzOgotICAgICAgICAgICAgc2VsZi5zZXRSVFMoVHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuc2V0RFRSKFRydWUpCi0gICAgICAgIHNlbGYuZmx1c2hJbnB1dCgpCi0gICAgICAgIHNlbGYuZmx1c2hPdXRwdXQoKQotCi0gICAgZGVmIF9yZWNvbmZpZ3VyZVBvcnQoc2VsZik6Ci0gICAgICAgICIiIlNldCBjb21tdW5pY2F0aW9uIHBhcmFtZXRlcnMgb24gb3BlbmVkIHBvcnQuIiIiCi0gICAgICAgIGlmIHNlbGYuX3NvY2tldCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJDYW4gb25seSBvcGVyYXRlIG9uIG9wZW4gcG9ydHMiKQotCi0gICAgICAgICMgaWYgc2VsZi5fdGltZW91dCAhPSAwIGFuZCBzZWxmLl9pbnRlckNoYXJUaW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgIyBYWFgKLQotICAgICAgICBpZiBzZWxmLl93cml0ZVRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCd3cml0ZVRpbWVvdXQgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQnKQotICAgICAgICAgICAgIyBYWFgKLQotICAgICAgICAjIFNldHVwIHRoZSBjb25uZWN0aW9uCi0gICAgICAgICMgdG8gZ2V0IGdvb2QgcGVyZm9ybWFuY2UsIGFsbCBwYXJhbWV0ZXIgY2hhbmdlcyBhcmUgc2VudCBmaXJzdC4uLgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLl9iYXVkcmF0ZSwgKGludCwgbG9uZykpIG9yIG5vdCAwIDwgc2VsZi5fYmF1ZHJhdGUgPCAyKiozMjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgYmF1ZHJhdGU6ICVyIiAlIChzZWxmLl9iYXVkcmF0ZSkpCi0gICAgICAgIHNlbGYuX3JmYzIyMTdfcG9ydF9zZXR0aW5nc1snYmF1ZHJhdGUnXS5zZXQoc3RydWN0LnBhY2soJyFJJywgc2VsZi5fYmF1ZHJhdGUpKQotICAgICAgICBzZWxmLl9yZmMyMjE3X3BvcnRfc2V0dGluZ3NbJ2RhdGFzaXplJ10uc2V0KHN0cnVjdC5wYWNrKCchQicsIHNlbGYuX2J5dGVzaXplKSkKLSAgICAgICAgc2VsZi5fcmZjMjIxN19wb3J0X3NldHRpbmdzWydwYXJpdHknXS5zZXQoc3RydWN0LnBhY2soJyFCJywgUkZDMjIxN19QQVJJVFlfTUFQW3NlbGYuX3Bhcml0eV0pKQotICAgICAgICBzZWxmLl9yZmMyMjE3X3BvcnRfc2V0dGluZ3NbJ3N0b3BzaXplJ10uc2V0KHN0cnVjdC5wYWNrKCchQicsIFJGQzIyMTdfU1RPUEJJVF9NQVBbc2VsZi5fc3RvcGJpdHNdKSkKLQotICAgICAgICAjIGFuZCBub3cgd2FpdCB1bnRpbCBwYXJhbWV0ZXJzIGFyZSBhY3RpdmUKLSAgICAgICAgaXRlbXMgPSBzZWxmLl9yZmMyMjE3X3BvcnRfc2V0dGluZ3MudmFsdWVzKCkKLSAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiTmVnb3RpYXRpbmcgc2V0dGluZ3M6ICVzIiAlIChpdGVtcywpKQotICAgICAgICB0aW1lb3V0X3RpbWUgPSB0aW1lLnRpbWUoKSArIHNlbGYuX25ldHdvcmtfdGltZW91dAotICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSA8IHRpbWVvdXRfdGltZToKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wNSkgICAgIyBwcmV2ZW50IDEwMCUgQ1BVIGxvYWQKLSAgICAgICAgICAgIGlmIHN1bShvLmFjdGl2ZSBmb3IgbyBpbiBpdGVtcykgPT0gbGVuKGl0ZW1zKToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJSZW1vdGUgZG9lcyBub3QgYWNjZXB0IHBhcmFtZXRlciBjaGFuZ2UgKFJGQzIyMTcpOiAlciIgJSBpdGVtcykKLSAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJOZWdvdGlhdGVkIHNldHRpbmdzOiAlcyIgJSAoaXRlbXMsKSkKLQotICAgICAgICBpZiBzZWxmLl9ydHNjdHMgYW5kIHNlbGYuX3hvbnhvZmY6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd4b254b2ZmIGFuZCBydHNjdHMgdG9nZXRoZXIgYXJlIG5vdCBzdXBwb3J0ZWQnKQotICAgICAgICBlbGlmIHNlbGYuX3J0c2N0czoKLSAgICAgICAgICAgIHNlbGYucmZjMjIxN1NldENvbnRyb2woU0VUX0NPTlRST0xfVVNFX0hXX0ZMT1dfQ09OVFJPTCkKLSAgICAgICAgZWxpZiBzZWxmLl94b254b2ZmOgotICAgICAgICAgICAgc2VsZi5yZmMyMjE3U2V0Q29udHJvbChTRVRfQ09OVFJPTF9VU0VfU1dfRkxPV19DT05UUk9MKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5yZmMyMjE3U2V0Q29udHJvbChTRVRfQ09OVFJPTF9VU0VfTk9fRkxPV19DT05UUk9MKQotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICAiIiJDbG9zZSBwb3J0IiIiCi0gICAgICAgIGlmIHNlbGYuX2lzT3BlbjoKLSAgICAgICAgICAgIGlmIHNlbGYuX3NvY2tldDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2tldC5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrZXQuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgIyBpZ25vcmUgZXJyb3JzLgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgc2VsZi5fc29ja2V0ID0gTm9uZQotICAgICAgICAgICAgaWYgc2VsZi5fdGhyZWFkOgotICAgICAgICAgICAgICAgIHNlbGYuX3RocmVhZC5qb2luKCkKLSAgICAgICAgICAgIHNlbGYuX2lzT3BlbiA9IEZhbHNlCi0gICAgICAgICAgICAjIGluIGNhc2Ugb2YgcXVpY2sgcmVjb25uZWN0cywgZ2l2ZSB0aGUgc2VydmVyIHNvbWUgdGltZQotICAgICAgICAgICAgdGltZS5zbGVlcCgwLjMpCi0KLSAgICBkZWYgbWFrZURldmljZU5hbWUoc2VsZiwgcG9ydCk6Ci0gICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbigidGhlcmUgaXMgbm8gc2Vuc2libGUgd2F5IHRvIHR1cm4gbnVtYmVycyBpbnRvIFVSTHMiKQotCi0gICAgZGVmIGZyb21VUkwoc2VsZiwgdXJsKToKLSAgICAgICAgIiIiZXh0cmFjdCBob3N0IGFuZCBwb3J0IGZyb20gYW4gVVJMIHN0cmluZyIiIgotICAgICAgICBpZiB1cmwubG93ZXIoKS5zdGFydHN3aXRoKCJyZmMyMjE3Oi8vIik6IHVybCA9IHVybFsxMDpdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgaXMgdGhlcmUgYSAicGF0aCIgKG91ciBvcHRpb25zKT8KLSAgICAgICAgICAgIGlmICcvJyBpbiB1cmw6Ci0gICAgICAgICAgICAgICAgIyBjdXQgYXdheSBvcHRpb25zCi0gICAgICAgICAgICAgICAgdXJsLCBvcHRpb25zID0gdXJsLnNwbGl0KCcvJywgMSkKLSAgICAgICAgICAgICAgICAjIHByb2Nlc3Mgb3B0aW9ucyBub3csIGRpcmVjdGx5IGFsdGVyaW5nIHNlbGYKLSAgICAgICAgICAgICAgICBmb3Igb3B0aW9uIGluIG9wdGlvbnMuc3BsaXQoJy8nKToKLSAgICAgICAgICAgICAgICAgICAgaWYgJz0nIGluIG9wdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgdmFsdWUgPSBvcHRpb24uc3BsaXQoJz0nLCAxKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIGlmIG9wdGlvbiA9PSAnbG9nZ2luZyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKCkgICAjIFhYWCBpcyB0aGF0IGdvb2QgdG8gY2FsbCBpdCBoZXJlPwotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigncHlTZXJpYWwucmZjMjIxNycpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5zZXRMZXZlbChMT0dHRVJfTEVWRUxTW3ZhbHVlXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCdlbmFibGVkIGxvZ2dpbmcnKQotICAgICAgICAgICAgICAgICAgICBlbGlmIG9wdGlvbiA9PSAnaWduX3NldF9jb250cm9sJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lnbm9yZV9zZXRfY29udHJvbF9hbnN3ZXIgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgb3B0aW9uID09ICdwb2xsX21vZGVtJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvbGxfbW9kZW1fc3RhdGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgb3B0aW9uID09ICd0aW1lb3V0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX25ldHdvcmtfdGltZW91dCA9IGZsb2F0KHZhbHVlKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5rbm93biBvcHRpb246ICVyJyAlIChvcHRpb24sKSkKLSAgICAgICAgICAgICMgZ2V0IGhvc3QgYW5kIHBvcnQKLSAgICAgICAgICAgIGhvc3QsIHBvcnQgPSB1cmwuc3BsaXQoJzonLCAxKSAjIG1heSByYWlzZSBWYWx1ZUVycm9yIGJlY2F1c2Ugb2YgdW5wYWNraW5nCi0gICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpICAgICAgICAgICAgICAgIyBhbmQgdGhpcyBpZiBpdCdzIG5vdCBhIG51bWJlcgotICAgICAgICAgICAgaWYgbm90IDAgPD0gcG9ydCA8IDY1NTM2OiByYWlzZSBWYWx1ZUVycm9yKCJwb3J0IG5vdCBpbiByYW5nZSAwLi4uNjU1MzUiKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbignZXhwZWN0ZWQgYSBzdHJpbmcgaW4gdGhlIGZvcm0gIltyZmMyMjE3Oi8vXTxob3N0Pjo8cG9ydD5bL29wdGlvblsvb3B0aW9uLi4uXV0iOiAlcycgJSBlKQotICAgICAgICByZXR1cm4gKGhvc3QsIHBvcnQpCi0KLSAgICAjICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtCi0KLSAgICBkZWYgaW5XYWl0aW5nKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGN1cnJlbnRseSBpbiB0aGUgaW5wdXQgYnVmZmVyLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2J1ZmZlci5xc2l6ZSgpCi0KLSAgICBkZWYgcmVhZChzZWxmLCBzaXplPTEpOgotICAgICAgICAiIiJcCi0gICAgICAgIFJlYWQgc2l6ZSBieXRlcyBmcm9tIHRoZSBzZXJpYWwgcG9ydC4gSWYgYSB0aW1lb3V0IGlzIHNldCBpdCBtYXkKLSAgICAgICAgcmV0dXJuIGxlc3MgY2hhcmFjdGVycyBhcyByZXF1ZXN0ZWQuIFdpdGggbm8gdGltZW91dCBpdCB3aWxsIGJsb2NrCi0gICAgICAgIHVudGlsIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzIGlzIHJlYWQuCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGRhdGEgPSBieXRlYXJyYXkoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBsZW4oZGF0YSkgPCBzaXplOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3RocmVhZCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oJ2Nvbm5lY3Rpb24gZmFpbGVkIChyZWFkZXIgdGhyZWFkIGRpZWQpJykKLSAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChzZWxmLl9yZWFkX2J1ZmZlci5nZXQoVHJ1ZSwgc2VsZi5fdGltZW91dCkpCi0gICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eTogIyAtPiB0aW1lb3V0Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHJldHVybiBieXRlcyhkYXRhKQotCi0gICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgotICAgICAgICAiIiJcCi0gICAgICAgIE91dHB1dCB0aGUgZ2l2ZW4gc3RyaW5nIG92ZXIgdGhlIHNlcmlhbCBwb3J0LiBDYW4gYmxvY2sgaWYgdGhlCi0gICAgICAgIGNvbm5lY3Rpb24gaXMgYmxvY2tlZC4gTWF5IHJhaXNlIFNlcmlhbEV4Y2VwdGlvbiBpZiB0aGUgY29ubmVjdGlvbiBpcwotICAgICAgICBjbG9zZWQuCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHNlbGYuX3dyaXRlX2xvY2suYWNxdWlyZSgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbCh0b19ieXRlcyhkYXRhKS5yZXBsYWNlKElBQywgSUFDX0RPVUJMRUQpKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKLSAgICAgICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oImNvbm5lY3Rpb24gZmFpbGVkIChzb2NrZXQgZXJyb3IpOiAlcyIgJSBlKSAjIFhYWCB3aGF0IGV4Y2VwdGlvbiBpZiBzb2NrZXQgY29ubmVjdGlvbiBmYWlscwotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fd3JpdGVfbG9jay5yZWxlYXNlKCkKLSAgICAgICAgcmV0dXJuIGxlbihkYXRhKQotCi0gICAgZGVmIGZsdXNoSW5wdXQoc2VsZik6Ci0gICAgICAgICIiIkNsZWFyIGlucHV0IGJ1ZmZlciwgZGlzY2FyZGluZyBhbGwgdGhhdCBpcyBpbiB0aGUgYnVmZmVyLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHNlbGYucmZjMjIxN1NlbmRQdXJnZShQVVJHRV9SRUNFSVZFX0JVRkZFUikKLSAgICAgICAgIyBlbXB0eSByZWFkIGJ1ZmZlcgotICAgICAgICB3aGlsZSBzZWxmLl9yZWFkX2J1ZmZlci5xc2l6ZSgpOgotICAgICAgICAgICAgc2VsZi5fcmVhZF9idWZmZXIuZ2V0KEZhbHNlKQotCi0gICAgZGVmIGZsdXNoT3V0cHV0KHNlbGYpOgotICAgICAgICAiIiJcCi0gICAgICAgIENsZWFyIG91dHB1dCBidWZmZXIsIGFib3J0aW5nIHRoZSBjdXJyZW50IG91dHB1dCBhbmQKLSAgICAgICAgZGlzY2FyZGluZyBhbGwgdGhhdCBpcyBpbiB0aGUgYnVmZmVyLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBzZWxmLnJmYzIyMTdTZW5kUHVyZ2UoUFVSR0VfVFJBTlNNSVRfQlVGRkVSKQotCi0gICAgZGVmIHNlbmRCcmVhayhzZWxmLCBkdXJhdGlvbj0wLjI1KToKLSAgICAgICAgIiIiU2VuZCBicmVhayBjb25kaXRpb24uIFRpbWVkLCByZXR1cm5zIHRvIGlkbGUgc3RhdGUgYWZ0ZXIgZ2l2ZW4KLSAgICAgICAgZHVyYXRpb24uIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgc2VsZi5zZXRCcmVhayhUcnVlKQotICAgICAgICB0aW1lLnNsZWVwKGR1cmF0aW9uKQotICAgICAgICBzZWxmLnNldEJyZWFrKEZhbHNlKQotCi0gICAgZGVmIHNldEJyZWFrKHNlbGYsIGxldmVsPVRydWUpOgotICAgICAgICAiIiJcCi0gICAgICAgIFNldCBicmVhazogQ29udHJvbHMgVFhELiBXaGVuIGFjdGl2ZSwgdG8gdHJhbnNtaXR0aW5nIGlzCi0gICAgICAgIHBvc3NpYmxlLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ3NldCBCUkVBSyB0byAlcycgJSAoJ2luYWN0aXZlJywgJ2FjdGl2ZScpW2Jvb2wobGV2ZWwpXSkKLSAgICAgICAgaWYgbGV2ZWw6Ci0gICAgICAgICAgICBzZWxmLnJmYzIyMTdTZXRDb250cm9sKFNFVF9DT05UUk9MX0JSRUFLX09OKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5yZmMyMjE3U2V0Q29udHJvbChTRVRfQ09OVFJPTF9CUkVBS19PRkYpCi0KLSAgICBkZWYgc2V0UlRTKHNlbGYsIGxldmVsPVRydWUpOgotICAgICAgICAiIiJTZXQgdGVybWluYWwgc3RhdHVzIGxpbmU6IFJlcXVlc3QgVG8gU2VuZC4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ3NldCBSVFMgdG8gJXMnICUgKCdpbmFjdGl2ZScsICdhY3RpdmUnKVtib29sKGxldmVsKV0pCi0gICAgICAgIGlmIGxldmVsOgotICAgICAgICAgICAgc2VsZi5yZmMyMjE3U2V0Q29udHJvbChTRVRfQ09OVFJPTF9SVFNfT04pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnJmYzIyMTdTZXRDb250cm9sKFNFVF9DT05UUk9MX1JUU19PRkYpCi0KLSAgICBkZWYgc2V0RFRSKHNlbGYsIGxldmVsPVRydWUpOgotICAgICAgICAiIiJTZXQgdGVybWluYWwgc3RhdHVzIGxpbmU6IERhdGEgVGVybWluYWwgUmVhZHkuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCdzZXQgRFRSIHRvICVzJyAlICgnaW5hY3RpdmUnLCAnYWN0aXZlJylbYm9vbChsZXZlbCldKQotICAgICAgICBpZiBsZXZlbDoKLSAgICAgICAgICAgIHNlbGYucmZjMjIxN1NldENvbnRyb2woU0VUX0NPTlRST0xfRFRSX09OKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5yZmMyMjE3U2V0Q29udHJvbChTRVRfQ09OVFJPTF9EVFJfT0ZGKQotCi0gICAgZGVmIGdldENUUyhzZWxmKToKLSAgICAgICAgIiIiUmVhZCB0ZXJtaW5hbCBzdGF0dXMgbGluZTogQ2xlYXIgVG8gU2VuZC4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICByZXR1cm4gYm9vbChzZWxmLmdldE1vZGVtU3RhdGUoKSAmIE1PREVNU1RBVEVfTUFTS19DVFMpCi0KLSAgICBkZWYgZ2V0RFNSKHNlbGYpOgotICAgICAgICAiIiJSZWFkIHRlcm1pbmFsIHN0YXR1cyBsaW5lOiBEYXRhIFNldCBSZWFkeS4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICByZXR1cm4gYm9vbChzZWxmLmdldE1vZGVtU3RhdGUoKSAmIE1PREVNU1RBVEVfTUFTS19EU1IpCi0KLSAgICBkZWYgZ2V0Ukkoc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdGVybWluYWwgc3RhdHVzIGxpbmU6IFJpbmcgSW5kaWNhdG9yLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHJldHVybiBib29sKHNlbGYuZ2V0TW9kZW1TdGF0ZSgpICYgTU9ERU1TVEFURV9NQVNLX1JJKQotCi0gICAgZGVmIGdldENEKHNlbGYpOgotICAgICAgICAiIiJSZWFkIHRlcm1pbmFsIHN0YXR1cyBsaW5lOiBDYXJyaWVyIERldGVjdC4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICByZXR1cm4gYm9vbChzZWxmLmdldE1vZGVtU3RhdGUoKSAmIE1PREVNU1RBVEVfTUFTS19DRCkKLQotICAgICMgLSAtIC0gcGxhdGZvcm0gc3BlY2lmaWMgLSAtIC0KLSAgICAjIE5vbmUgc28gZmFyCi0KLSAgICAjIC0gLSAtIFJGQzIyMTcgc3BlY2lmaWMgLSAtIC0KLQotICAgIGRlZiBfdGVsbmV0UmVhZExvb3Aoc2VsZik6Ci0gICAgICAgICIiInJlYWQgbG9vcCBmb3IgdGhlIHNvY2tldC4iIiIKLSAgICAgICAgbW9kZSA9IE1fTk9STUFMCi0gICAgICAgIHN1Ym9wdGlvbiA9IE5vbmUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgc2VsZi5fc29ja2V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3NvY2tldC5yZWN2KDEwMjQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICAjIGp1c3QgbmVlZCB0byBnZXQgb3V0IG9mIHJlY3YgZm9ybSB0aW1lIHRvIHRpbWUgdG8gY2hlY2sgaWYKLSAgICAgICAgICAgICAgICAgICAgIyBzdGlsbCBhbGl2ZQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgICAgICMgY29ubmVjdGlvbiBmYWlscyAtPiB0ZXJtaW5hdGUgbG9vcAotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJzb2NrZXQgZXJyb3IgaW4gcmVhZGVyIHRocmVhZDogJXMiICUgKGUsKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiBub3QgZGF0YTogYnJlYWsgIyBsb3N0IGNvbm5lY3Rpb24KLSAgICAgICAgICAgICAgICBmb3IgYnl0ZSBpbiBkYXRhOgotICAgICAgICAgICAgICAgICAgICBpZiBtb2RlID09IE1fTk9STUFMOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBpbnRlcnByZXQgYXMgY29tbWFuZCBvciBhcyBkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBieXRlID09IElBQzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gTV9JQUNfU0VFTgotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3JlIGRhdGEgaW4gcmVhZCBidWZmZXIgb3Igc3ViIG9wdGlvbiBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlcGVuZGluZyBvbiBzdGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN1Ym9wdGlvbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vib3B0aW9uLmFwcGVuZChieXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfYnVmZmVyLnB1dChieXRlKQotICAgICAgICAgICAgICAgICAgICBlbGlmIG1vZGUgPT0gTV9JQUNfU0VFTjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJ5dGUgPT0gSUFDOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW50ZXJwcmV0IGFzIGNvbW1hbmQgZG91YmxlZCAtPiBpbnNlcnQgY2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpdHNlbGYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdWJvcHRpb24gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym9wdGlvbi5hcHBlbmQoSUFDKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfYnVmZmVyLnB1dChJQUMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IE1fTk9STUFMCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGJ5dGUgPT0gU0I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdWIgb3B0aW9uIHN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vib3B0aW9uID0gYnl0ZWFycmF5KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gTV9OT1JNQUwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgYnl0ZSA9PSBTRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN1YiBvcHRpb24gZW5kIC0+IHByb2Nlc3MgaXQgbm93Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVsbmV0UHJvY2Vzc1N1Ym5lZ290aWF0aW9uKGJ5dGVzKHN1Ym9wdGlvbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vib3B0aW9uID0gTm9uZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBNX05PUk1BTAotICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBieXRlIGluIChETywgRE9OVCwgV0lMTCwgV09OVCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBuZWdvdGlhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbG5ldF9jb21tYW5kID0gYnl0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBNX05FR09USUFURQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG90aGVyIHRlbG5ldCBjb21tYW5kcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbG5ldFByb2Nlc3NDb21tYW5kKGJ5dGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IE1fTk9STUFMCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgbW9kZSA9PSBNX05FR09USUFURTogIyBETywgRE9OVCwgV0lMTCwgV09OVCB3YXMgcmVjZWl2ZWQsIG9wdGlvbiBub3cgZm9sbG93aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZWxuZXROZWdvdGlhdGVPcHRpb24odGVsbmV0X2NvbW1hbmQsIGJ5dGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gTV9OT1JNQUwKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKLSAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJyZWFkIHRocmVhZCB0ZXJtaW5hdGVkIikKLQotICAgICMgLSBpbmNvbWluZyB0ZWxuZXQgY29tbWFuZHMgYW5kIG9wdGlvbnMKLQotICAgIGRlZiBfdGVsbmV0UHJvY2Vzc0NvbW1hbmQoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgICIiIlByb2Nlc3MgY29tbWFuZHMgb3RoZXIgdGhhbiBETywgRE9OVCwgV0lMTCwgV09OVC4iIiIKLSAgICAgICAgIyBDdXJyZW50bHkgbm9uZS4gUkZDMjIxNyBvbmx5IHVzZXMgbmVnb3RpYXRpb24gYW5kIHN1Ym5lZ290aWF0aW9uLgotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoImlnbm9yaW5nIFRlbG5ldCBjb21tYW5kOiAlciIgJSAoY29tbWFuZCwpKQotCi0gICAgZGVmIF90ZWxuZXROZWdvdGlhdGVPcHRpb24oc2VsZiwgY29tbWFuZCwgb3B0aW9uKToKLSAgICAgICAgIiIiUHJvY2VzcyBpbmNvbWluZyBETywgRE9OVCwgV0lMTCwgV09OVC4iIiIKLSAgICAgICAgIyBjaGVjayBvdXIgcmVnaXN0ZXJlZCB0ZWxuZXQgb3B0aW9ucyBhbmQgZm9yd2FyZCBjb21tYW5kIHRvIHRoZW0KLSAgICAgICAgIyB0aGV5IGtub3cgdGhlbXNlbHZlcyBpZiB0aGV5IGhhdmUgdG8gYW5zd2VyIG9yIG5vdAotICAgICAgICBrbm93biA9IEZhbHNlCi0gICAgICAgIGZvciBpdGVtIGluIHNlbGYuX3RlbG5ldF9vcHRpb25zOgotICAgICAgICAgICAgIyBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIG1hdGNoISBhcyBzb21lIG9wdGlvbnMgYXJlIGR1cGxpY2F0ZWQgZm9yCi0gICAgICAgICAgICAjICd1cycgYW5kICd0aGVtJwotICAgICAgICAgICAgaWYgaXRlbS5vcHRpb24gPT0gb3B0aW9uOgotICAgICAgICAgICAgICAgIGl0ZW0ucHJvY2Vzc19pbmNvbWluZyhjb21tYW5kKQotICAgICAgICAgICAgICAgIGtub3duID0gVHJ1ZQotICAgICAgICBpZiBub3Qga25vd246Ci0gICAgICAgICAgICAjIGhhbmRsZSB1bmtub3duIG9wdGlvbnMKLSAgICAgICAgICAgICMgb25seSBhbnN3ZXIgdG8gcG9zaXRpdmUgcmVxdWVzdHMgYW5kIGRlbnkgdGhlbQotICAgICAgICAgICAgaWYgY29tbWFuZCA9PSBXSUxMIG9yIGNvbW1hbmQgPT0gRE86Ci0gICAgICAgICAgICAgICAgc2VsZi50ZWxuZXRTZW5kT3B0aW9uKChjb21tYW5kID09IFdJTEwgYW5kIERPTlQgb3IgV09OVCksIG9wdGlvbikKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygicmVqZWN0ZWQgVGVsbmV0IG9wdGlvbjogJXIiICUgKG9wdGlvbiwpKQotCi0KLSAgICBkZWYgX3RlbG5ldFByb2Nlc3NTdWJuZWdvdGlhdGlvbihzZWxmLCBzdWJvcHRpb24pOgotICAgICAgICAiIiJQcm9jZXNzIHN1Ym5lZ290aWF0aW9uLCB0aGUgZGF0YSBiZXR3ZWVuIElBQyBTQiBhbmQgSUFDIFNFLiIiIgotICAgICAgICBpZiBzdWJvcHRpb25bMDoxXSA9PSBDT01fUE9SVF9PUFRJT046Ci0gICAgICAgICAgICBpZiBzdWJvcHRpb25bMToyXSA9PSBTRVJWRVJfTk9USUZZX0xJTkVTVEFURSBhbmQgbGVuKHN1Ym9wdGlvbikgPj0gMzoKLSAgICAgICAgICAgICAgICBzZWxmLl9saW5lc3RhdGUgPSBvcmQoc3Vib3B0aW9uWzI6M10pICMgZW5zdXJlIGl0IGlzIGEgbnVtYmVyCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIk5PVElGWV9MSU5FU1RBVEU6ICVzIiAlIHNlbGYuX2xpbmVzdGF0ZSkKLSAgICAgICAgICAgIGVsaWYgc3Vib3B0aW9uWzE6Ml0gPT0gU0VSVkVSX05PVElGWV9NT0RFTVNUQVRFIGFuZCBsZW4oc3Vib3B0aW9uKSA+PSAzOgotICAgICAgICAgICAgICAgIHNlbGYuX21vZGVtc3RhdGUgPSBvcmQoc3Vib3B0aW9uWzI6M10pICMgZW5zdXJlIGl0IGlzIGEgbnVtYmVyCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIk5PVElGWV9NT0RFTVNUQVRFOiAlcyIgJSBzZWxmLl9tb2RlbXN0YXRlKQotICAgICAgICAgICAgICAgICMgdXBkYXRlIHRpbWUgd2hlbiB3ZSB0aGluayB0aGF0IGEgcG9sbCB3b3VsZCBtYWtlIHNlbnNlCi0gICAgICAgICAgICAgICAgc2VsZi5fbW9kZW1zdGF0ZV9leHBpcmVzID0gdGltZS50aW1lKCkgKyAwLjMKLSAgICAgICAgICAgIGVsaWYgc3Vib3B0aW9uWzE6Ml0gPT0gRkxPV0NPTlRST0xfU1VTUEVORDoKLSAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdGVfc3VzcGVuZF9mbG93ID0gVHJ1ZQotICAgICAgICAgICAgZWxpZiBzdWJvcHRpb25bMToyXSA9PSBGTE9XQ09OVFJPTF9SRVNVTUU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcmVtb3RlX3N1c3BlbmRfZmxvdyA9IEZhbHNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIHNlbGYuX3JmYzIyMTdfb3B0aW9ucy52YWx1ZXMoKToKLSAgICAgICAgICAgICAgICAgICAgaWYgaXRlbS5hY2tfb3B0aW9uID09IHN1Ym9wdGlvblsxOjJdOgotICAgICAgICAgICAgICAgICAgICAgICAgI34gcHJpbnQgInByb2Nlc3NpbmcgQ09NX1BPUlRfT1BUSU9OOiAlciIgJSBsaXN0KHN1Ym9wdGlvblsxOl0pCi0gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNoZWNrQW5zd2VyKGJ5dGVzKHN1Ym9wdGlvblsyOl0pKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoImlnbm9yaW5nIENPTV9QT1JUX09QVElPTjogJXIiICUgKHN1Ym9wdGlvbiwpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygiaWdub3Jpbmcgc3VibmVnb3RpYXRpb246ICVyIiAlIChzdWJvcHRpb24sKSkKLQotICAgICMgLSBvdXRnb2luZyB0ZWxuZXQgY29tbWFuZHMgYW5kIG9wdGlvbnMKLQotICAgIGRlZiBfaW50ZXJuYWxfcmF3X3dyaXRlKHNlbGYsIGRhdGEpOgotICAgICAgICAiIiJpbnRlcm5hbCBzb2NrZXQgd3JpdGUgd2l0aCBubyBkYXRhIGVzY2FwaW5nLiB1c2VkIHRvIHNlbmQgdGVsbmV0IHN0dWZmLiIiIgotICAgICAgICBzZWxmLl93cml0ZV9sb2NrLmFjcXVpcmUoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbChkYXRhKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fd3JpdGVfbG9jay5yZWxlYXNlKCkKLQotICAgIGRlZiB0ZWxuZXRTZW5kT3B0aW9uKHNlbGYsIGFjdGlvbiwgb3B0aW9uKToKLSAgICAgICAgIiIiU2VuZCBETywgRE9OVCwgV0lMTCwgV09OVC4iIiIKLSAgICAgICAgc2VsZi5faW50ZXJuYWxfcmF3X3dyaXRlKHRvX2J5dGVzKFtJQUMsIGFjdGlvbiwgb3B0aW9uXSkpCi0KLSAgICBkZWYgcmZjMjIxN1NlbmRTdWJuZWdvdGlhdGlvbihzZWxmLCBvcHRpb24sIHZhbHVlPScnKToKLSAgICAgICAgIiIiU3VibmVnb3RpYXRpb24gb2YgUkZDMjIxNyBwYXJhbWV0ZXJzLiIiIgotICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoSUFDLCBJQUNfRE9VQkxFRCkKLSAgICAgICAgc2VsZi5faW50ZXJuYWxfcmF3X3dyaXRlKHRvX2J5dGVzKFtJQUMsIFNCLCBDT01fUE9SVF9PUFRJT04sIG9wdGlvbl0gKyBsaXN0KHZhbHVlKSArIFtJQUMsIFNFXSkpCi0KLSAgICBkZWYgcmZjMjIxN1NlbmRQdXJnZShzZWxmLCB2YWx1ZSk6Ci0gICAgICAgIGl0ZW0gPSBzZWxmLl9yZmMyMjE3X29wdGlvbnNbJ3B1cmdlJ10KLSAgICAgICAgaXRlbS5zZXQodmFsdWUpICMgdHJhbnNtaXQgZGVzaXJlZCBwdXJnZSB0eXBlCi0gICAgICAgIGl0ZW0ud2FpdChzZWxmLl9uZXR3b3JrX3RpbWVvdXQpICMgd2FpdCBmb3IgYWNrbm93bGVkZ2UgZnJvbSB0aGUgc2VydmVyCi0KLSAgICBkZWYgcmZjMjIxN1NldENvbnRyb2woc2VsZiwgdmFsdWUpOgotICAgICAgICBpdGVtID0gc2VsZi5fcmZjMjIxN19vcHRpb25zWydjb250cm9sJ10KLSAgICAgICAgaXRlbS5zZXQodmFsdWUpICMgdHJhbnNtaXQgZGVzaXJlZCBjb250cm9sIHR5cGUKLSAgICAgICAgaWYgc2VsZi5faWdub3JlX3NldF9jb250cm9sX2Fuc3dlcjoKLSAgICAgICAgICAgICMgYW5zd2VycyBhcmUgaWdub3JlZCB3aGVuIG9wdGlvbiBpcyBzZXQuIGNvbXBhdGliaWxpdHkgbW9kZSBmb3IKLSAgICAgICAgICAgICMgc2VydmVycyB0aGF0IGFuc3dlciwgYnV0IG5vdCB0aGUgZXhwZWN0ZWQgb25lLi4uIChvciBubyBhbnN3ZXIKLSAgICAgICAgICAgICMgYXQgYWxsKSBpLmUuIHNyZWRpcmQKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKSAgIyB0aGlzIGhlbHBzIGdldHRpbmcgdGhlIHVuaXQgdGVzdHMgcGFzc2VkCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpdGVtLndhaXQoc2VsZi5fbmV0d29ya190aW1lb3V0KSAgIyB3YWl0IGZvciBhY2tub3dsZWRnZSBmcm9tIHRoZSBzZXJ2ZXIKLQotICAgIGRlZiByZmMyMjE3Rmxvd1NlcnZlclJlYWR5KHNlbGYpOgotICAgICAgICAiIiJcCi0gICAgICAgIGNoZWNrIGlmIHNlcnZlciBpcyByZWFkeSB0byByZWNlaXZlIGRhdGEuIGJsb2NrIGZvciBzb21lIHRpbWUgd2hlbgotICAgICAgICBub3QuCi0gICAgICAgICIiIgotICAgICAgICAjfiBpZiBzZWxmLl9yZW1vdGVfc3VzcGVuZF9mbG93OgotICAgICAgICAgICAgI34gd2FpdC0tLQotCi0gICAgZGVmIGdldE1vZGVtU3RhdGUoc2VsZik6Ci0gICAgICAgICIiIlwKLSAgICAgICAgZ2V0IGxhc3QgbW9kZW0gc3RhdGUgKGNhY2hlZCB2YWx1ZS4gaWYgdmFsdWUgaXMgIm9sZCIsIHJlcXVlc3QgYSBuZXcKLSAgICAgICAgb25lLiB0aGlzIGNhY2hlIGhlbHBzIHRoYXQgd2UgZG9uJ3QgaXNzdWUgdG8gbWFueSByZXF1ZXN0cyB3aGVuIGUuZy4gYWxsCi0gICAgICAgIHN0YXR1cyBsaW5lcywgb25lIGFmdGVyIHRoZSBvdGhlciBpcyBxdWVyaWVkIGJ5IHRlIHVzZXIgKGdldENUUywgZ2V0RFNSCi0gICAgICAgIGV0Yy4pCi0gICAgICAgICIiIgotICAgICAgICAjIGFjdGl2ZSBtb2RlbSBzdGF0ZSBwb2xsaW5nIGVuYWJsZWQ/IGlzIHRoZSB2YWx1ZSBmcmVzaCBlbm91Z2g/Ci0gICAgICAgIGlmIHNlbGYuX3BvbGxfbW9kZW1fc3RhdGUgYW5kIHNlbGYuX21vZGVtc3RhdGVfZXhwaXJlcyA8IHRpbWUudGltZSgpOgotICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoJ3BvbGxpbmcgbW9kZW0gc3RhdGUnKQotICAgICAgICAgICAgIyB3aGVuIGl0IGlzIG9sZGVyLCByZXF1ZXN0IGFuIHVwZGF0ZQotICAgICAgICAgICAgc2VsZi5yZmMyMjE3U2VuZFN1Ym5lZ290aWF0aW9uKE5PVElGWV9NT0RFTVNUQVRFKQotICAgICAgICAgICAgdGltZW91dF90aW1lID0gdGltZS50aW1lKCkgKyBzZWxmLl9uZXR3b3JrX3RpbWVvdXQKLSAgICAgICAgICAgIHdoaWxlIHRpbWUudGltZSgpIDwgdGltZW91dF90aW1lOgotICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wNSkgICAgIyBwcmV2ZW50IDEwMCUgQ1BVIGxvYWQKLSAgICAgICAgICAgICAgICAjIHdoZW4gZXhwaXJhdGlvbiB0aW1lIGlzIHVwZGF0ZWQsIGl0IG1lYW5zIHRoYXQgdGhlcmUgaXMgYSBuZXcKLSAgICAgICAgICAgICAgICAjIHZhbHVlCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fbW9kZW1zdGF0ZV9leHBpcmVzID4gdGltZS50aW1lKCk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygncG9sbCBmb3IgbW9kZW0gc3RhdGUgZmFpbGVkJykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICMgZXZlbiB3aGVuIHRoZXJlIGlzIGEgdGltZW91dCwgZG8gbm90IGdlbmVyYXRlIGFuIGVycm9yIGp1c3QKLSAgICAgICAgICAgICMgcmV0dXJuIHRoZSBsYXN0IGtub3duIHZhbHVlLiB0aGlzIHdheSB3ZSBjYW4gc3VwcG9ydCBidWdneQotICAgICAgICAgICAgIyBzZXJ2ZXJzIHRoYXQgZG8gbm90IHJlc3BvbmQgdG8gcG9sbHMsIGJ1dCBzZW5kIGF1dG9tYXRpYwotICAgICAgICAgICAgIyB1cGRhdGVzLgotICAgICAgICBpZiBzZWxmLl9tb2RlbXN0YXRlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoJ3VzaW5nIGNhY2hlZCBtb2RlbSBzdGF0ZScpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5fbW9kZW1zdGF0ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBuZXZlciByZWNlaXZlZCBhIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBzZXJ2ZXIKLSAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbigicmVtb3RlIHNlbmRzIG5vIE5PVElGWV9NT0RFTVNUQVRFIikKLQotCi0jIGFzc2VtYmxlIFNlcmlhbCBjbGFzcyB3aXRoIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIGJhc2UKLSMgZm9yIGZpbGUtbGlrZSBiZWhhdmlvci4gZm9yIFB5dGhvbiAyLjYgYW5kIG5ld2VyLCB0aGF0IHByb3ZpZGUgdGhlIG5ldyBJL08KLSMgbGlicmFyeSwgZGVyaXZlIGZyb20gaW8uUmF3SU9CYXNlCi10cnk6Ci0gICAgaW1wb3J0IGlvCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBjbGFzc2ljIHZlcnNpb24gd2l0aCBvdXIgb3duIGZpbGUtbGlrZSBlbXVsYXRpb24KLSAgICBjbGFzcyBTZXJpYWwoUkZDMjIxN1NlcmlhbCwgRmlsZUxpa2UpOgotICAgICAgICBwYXNzCi1lbHNlOgotICAgICMgaW8gbGlicmFyeSBwcmVzZW50Ci0gICAgY2xhc3MgU2VyaWFsKFJGQzIyMTdTZXJpYWwsIGlvLlJhd0lPQmFzZSk6Ci0gICAgICAgIHBhc3MKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBUaGUgZm9sbG93aW5nIGlzIGNvZGUgdGhhdCBoZWxwcyBpbXBsZW1lbnRpbmcgYW4gUkZDIDIyMTcgc2VydmVyLgotCi1jbGFzcyBQb3J0TWFuYWdlcihvYmplY3QpOgotICAgICIiIlwKLSAgICBUaGlzIGNsYXNzIG1hbmFnZXMgdGhlIHN0YXRlIG9mIFRlbG5ldCBhbmQgUkZDIDIyMTcuIEl0IG5lZWRzIGEgc2VyaWFsCi0gICAgaW5zdGFuY2UgYW5kIGEgY29ubmVjdGlvbiB0byB3b3JrIHdpdGguIENvbm5lY3Rpb24gaXMgZXhwZWN0ZWQgdG8gaW1wbGVtZW50Ci0gICAgYSAodGhyZWFkIHNhZmUpIHdyaXRlIGZ1bmN0aW9uLCB0aGF0IHdyaXRlcyB0aGUgc3RyaW5nIHRvIHRoZSBuZXR3b3JrLgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcmlhbF9wb3J0LCBjb25uZWN0aW9uLCBsb2dnZXI9Tm9uZSk6Ci0gICAgICAgIHNlbGYuc2VyaWFsID0gc2VyaWFsX3BvcnQKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gY29ubmVjdGlvbgotICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlcgotICAgICAgICBzZWxmLl9jbGllbnRfaXNfcmZjMjIxNyA9IEZhbHNlCi0KLSAgICAgICAgIyBmaWx0ZXIgc3RhdGUgbWFjaGluZQotICAgICAgICBzZWxmLm1vZGUgPSBNX05PUk1BTAotICAgICAgICBzZWxmLnN1Ym9wdGlvbiA9IE5vbmUKLSAgICAgICAgc2VsZi50ZWxuZXRfY29tbWFuZCA9IE5vbmUKLQotICAgICAgICAjIHN0YXRlcyBmb3IgbW9kZW0vbGluZSBjb250cm9sIGV2ZW50cwotICAgICAgICBzZWxmLm1vZGVtc3RhdGVfbWFzayA9IDI1NQotICAgICAgICBzZWxmLmxhc3RfbW9kZW1zdGF0ZSA9IE5vbmUKLSAgICAgICAgc2VsZi5saW5zdGF0ZV9tYXNrID0gMAotCi0gICAgICAgICMgYWxsIHN1cHBvcnRlZCB0ZWxuZXQgb3B0aW9ucwotICAgICAgICBzZWxmLl90ZWxuZXRfb3B0aW9ucyA9IFsKLSAgICAgICAgICAgIFRlbG5ldE9wdGlvbihzZWxmLCAnRUNITycsIEVDSE8sIFdJTEwsIFdPTlQsIERPLCBET05ULCBSRVFVRVNURUQpLAotICAgICAgICAgICAgVGVsbmV0T3B0aW9uKHNlbGYsICd3ZS1TR0EnLCBTR0EsIFdJTEwsIFdPTlQsIERPLCBET05ULCBSRVFVRVNURUQpLAotICAgICAgICAgICAgVGVsbmV0T3B0aW9uKHNlbGYsICd0aGV5LVNHQScsIFNHQSwgRE8sIERPTlQsIFdJTEwsIFdPTlQsIElOQUNUSVZFKSwKLSAgICAgICAgICAgIFRlbG5ldE9wdGlvbihzZWxmLCAnd2UtQklOQVJZJywgQklOQVJZLCBXSUxMLCBXT05ULCBETywgRE9OVCwgSU5BQ1RJVkUpLAotICAgICAgICAgICAgVGVsbmV0T3B0aW9uKHNlbGYsICd0aGV5LUJJTkFSWScsIEJJTkFSWSwgRE8sIERPTlQsIFdJTEwsIFdPTlQsIFJFUVVFU1RFRCksCi0gICAgICAgICAgICBUZWxuZXRPcHRpb24oc2VsZiwgJ3dlLVJGQzIyMTcnLCBDT01fUE9SVF9PUFRJT04sIFdJTEwsIFdPTlQsIERPLCBET05ULCBSRVFVRVNURUQsIHNlbGYuX2NsaWVudF9vayksCi0gICAgICAgICAgICBUZWxuZXRPcHRpb24oc2VsZiwgJ3RoZXktUkZDMjIxNycsIENPTV9QT1JUX09QVElPTiwgRE8sIERPTlQsIFdJTEwsIFdPTlQsIElOQUNUSVZFLCBzZWxmLl9jbGllbnRfb2spLAotICAgICAgICAgICAgXQotCi0gICAgICAgICMgbmVnb3RpYXRlIFRlbG5ldC9SRkMyMjE3IC0+IHNlbmQgaW5pdGlhbCByZXF1ZXN0cwotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJyZXF1ZXN0aW5nIGluaXRpYWwgVGVsbmV0L1JGQyAyMjE3IG9wdGlvbnMiKQotICAgICAgICBmb3Igb3B0aW9uIGluIHNlbGYuX3RlbG5ldF9vcHRpb25zOgotICAgICAgICAgICAgaWYgb3B0aW9uLnN0YXRlIGlzIFJFUVVFU1RFRDoKLSAgICAgICAgICAgICAgICBzZWxmLnRlbG5ldFNlbmRPcHRpb24ob3B0aW9uLnNlbmRfeWVzLCBvcHRpb24ub3B0aW9uKQotICAgICAgICAjIGlzc3VlIDFzdCBtb2RlbSBzdGF0ZSBub3RpZmljYXRpb24KLQotICAgIGRlZiBfY2xpZW50X29rKHNlbGYpOgotICAgICAgICAiIiJcCi0gICAgICAgIGNhbGxiYWNrIG9mIHRlbG5ldCBvcHRpb24uIGl0IGdldHMgY2FsbGVkIHdoZW4gb3B0aW9uIGlzIGFjdGl2YXRlZC4KLSAgICAgICAgdGhpcyBvbmUgaGVyZSBpcyB1c2VkIHRvIGRldGVjdCB3aGVuIHRoZSBjbGllbnQgYWdyZWVzIG9uIFJGQyAyMjE3LiBhCi0gICAgICAgIGZsYWcgaXMgc2V0IHNvIHRoYXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgY2hlY2tfbW9kZW1fbGluZXMga25vdyBpZiB0aGUKLSAgICAgICAgY2xpZW50IGlzIG9rLgotICAgICAgICAiIiIKLSAgICAgICAgIyBUaGUgY2FsbGJhY2sgaXMgdXNlZCBmb3Igd2UgYW5kIHRoZXkgc28gaWYgb25lIHBhcnR5IGFncmVlcywgd2UncmUKLSAgICAgICAgIyBhbHJlYWR5IGhhcHB5LiBpdCBzZWVtcyBub3QgYWxsIHNlcnZlcnMgZG8gdGhlIG5lZ290aWF0aW9uIGNvcnJlY3RseQotICAgICAgICAjIGFuZCBpIGd1ZXNzIHRoZXJlIGFyZSBpbmNvcnJlY3QgY2xpZW50cyB0b28uLiBzbyBiZSBoYXBweSBpZiBjbGllbnQKLSAgICAgICAgIyBhbnN3ZXJzIG9uZSBvciB0aGUgb3RoZXIgcG9zaXRpdmVseS4KLSAgICAgICAgc2VsZi5fY2xpZW50X2lzX3JmYzIyMTcgPSBUcnVlCi0gICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiY2xpZW50IGFjY2VwdHMgUkZDIDIyMTciKQotICAgICAgICAjIHRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGNsaWVudCBnZXRzIGEgbm90aWZpY2F0aW9uLCBldmVuIGlmIHRoZXJlCi0gICAgICAgICMgd2FzIG5vIGNoYW5nZQotICAgICAgICBzZWxmLmNoZWNrX21vZGVtX2xpbmVzKGZvcmNlX25vdGlmaWNhdGlvbj1UcnVlKQotCi0gICAgIyAtIG91dGdvaW5nIHRlbG5ldCBjb21tYW5kcyBhbmQgb3B0aW9ucwotCi0gICAgZGVmIHRlbG5ldFNlbmRPcHRpb24oc2VsZiwgYWN0aW9uLCBvcHRpb24pOgotICAgICAgICAiIiJTZW5kIERPLCBET05ULCBXSUxMLCBXT05ULiIiIgotICAgICAgICBzZWxmLmNvbm5lY3Rpb24ud3JpdGUodG9fYnl0ZXMoW0lBQywgYWN0aW9uLCBvcHRpb25dKSkKLQotICAgIGRlZiByZmMyMjE3U2VuZFN1Ym5lZ290aWF0aW9uKHNlbGYsIG9wdGlvbiwgdmFsdWU9JycpOgotICAgICAgICAiIiJTdWJuZWdvdGlhdGlvbiBvZiBSRkMgMjIxNyBwYXJhbWV0ZXJzLiIiIgotICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoSUFDLCBJQUNfRE9VQkxFRCkKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uLndyaXRlKHRvX2J5dGVzKFtJQUMsIFNCLCBDT01fUE9SVF9PUFRJT04sIG9wdGlvbl0gKyBsaXN0KHZhbHVlKSArIFtJQUMsIFNFXSkpCi0KLSAgICAjIC0gY2hlY2sgbW9kZW0gbGluZXMsIG5lZWRzIHRvIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkgZnJvbSB1c2VyIHRvCi0gICAgIyBlc3RhYmxpc2ggcG9sbGluZwotCi0gICAgZGVmIGNoZWNrX21vZGVtX2xpbmVzKHNlbGYsIGZvcmNlX25vdGlmaWNhdGlvbj1GYWxzZSk6Ci0gICAgICAgIG1vZGVtc3RhdGUgPSAoCi0gICAgICAgICAgICAoc2VsZi5zZXJpYWwuZ2V0Q1RTKCkgYW5kIE1PREVNU1RBVEVfTUFTS19DVFMpIHwKLSAgICAgICAgICAgIChzZWxmLnNlcmlhbC5nZXREU1IoKSBhbmQgTU9ERU1TVEFURV9NQVNLX0RTUikgfAotICAgICAgICAgICAgKHNlbGYuc2VyaWFsLmdldFJJKCkgYW5kIE1PREVNU1RBVEVfTUFTS19SSSkgfAotICAgICAgICAgICAgKHNlbGYuc2VyaWFsLmdldENEKCkgYW5kIE1PREVNU1RBVEVfTUFTS19DRCkKLSAgICAgICAgKQotICAgICAgICAjIGNoZWNrIHdoYXQgaGFzIGNoYW5nZWQKLSAgICAgICAgZGVsdGFzID0gbW9kZW1zdGF0ZSBeIChzZWxmLmxhc3RfbW9kZW1zdGF0ZSBvciAwKSAjIHdoZW4gbGFzdCBpcyBOb25lIC0+IDAKLSAgICAgICAgaWYgZGVsdGFzICYgTU9ERU1TVEFURV9NQVNLX0NUUzoKLSAgICAgICAgICAgIG1vZGVtc3RhdGUgfD0gTU9ERU1TVEFURV9NQVNLX0NUU19DSEFOR0UKLSAgICAgICAgaWYgZGVsdGFzICYgTU9ERU1TVEFURV9NQVNLX0RTUjoKLSAgICAgICAgICAgIG1vZGVtc3RhdGUgfD0gTU9ERU1TVEFURV9NQVNLX0RTUl9DSEFOR0UKLSAgICAgICAgaWYgZGVsdGFzICYgTU9ERU1TVEFURV9NQVNLX1JJOgotICAgICAgICAgICAgbW9kZW1zdGF0ZSB8PSBNT0RFTVNUQVRFX01BU0tfUklfQ0hBTkdFCi0gICAgICAgIGlmIGRlbHRhcyAmIE1PREVNU1RBVEVfTUFTS19DRDoKLSAgICAgICAgICAgIG1vZGVtc3RhdGUgfD0gTU9ERU1TVEFURV9NQVNLX0NEX0NIQU5HRQotICAgICAgICAjIGlmIG5ldyBzdGF0ZSBpcyBkaWZmZXJlbnQgYW5kIHRoZSBtYXNrIGFsbG93cyB0aGlzIGNoYW5nZSwgc2VuZAotICAgICAgICAjIG5vdGlmaWNhdGlvbi4gc3VwcHJlc3Mgbm90aWZpY2F0aW9ucyB3aGVuIGNsaWVudCBpcyBub3QgcmZjMjIxNwotICAgICAgICBpZiBtb2RlbXN0YXRlICE9IHNlbGYubGFzdF9tb2RlbXN0YXRlIG9yIGZvcmNlX25vdGlmaWNhdGlvbjoKLSAgICAgICAgICAgIGlmIChzZWxmLl9jbGllbnRfaXNfcmZjMjIxNyBhbmQgKG1vZGVtc3RhdGUgJiBzZWxmLm1vZGVtc3RhdGVfbWFzaykpIG9yIGZvcmNlX25vdGlmaWNhdGlvbjoKLSAgICAgICAgICAgICAgICBzZWxmLnJmYzIyMTdTZW5kU3VibmVnb3RpYXRpb24oCi0gICAgICAgICAgICAgICAgICAgIFNFUlZFUl9OT1RJRllfTU9ERU1TVEFURSwKLSAgICAgICAgICAgICAgICAgICAgdG9fYnl0ZXMoW21vZGVtc3RhdGUgJiBzZWxmLm1vZGVtc3RhdGVfbWFza10pCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiTk9USUZZX01PREVNU1RBVEU6ICVzIiAlIChtb2RlbXN0YXRlLCkpCi0gICAgICAgICAgICAjIHNhdmUgbGFzdCBzdGF0ZSwgYnV0IGZvcmdldCBhYm91dCBkZWx0YXMuCi0gICAgICAgICAgICAjIG90aGVyd2lzZSBpdCB3b3VsZCBhbHNvIG5vdGlmeSBhYm91dCBjaGFuZ2luZyBkZWx0YXMgd2hpY2ggaXMKLSAgICAgICAgICAgICMgcHJvYmFibHkgbm90IHZlcnkgdXNlZnVsCi0gICAgICAgICAgICBzZWxmLmxhc3RfbW9kZW1zdGF0ZSA9IG1vZGVtc3RhdGUgJiAweGYwCi0KLSAgICAjIC0gb3V0Z29pbmcgZGF0YSBlc2NhcGluZwotCi0gICAgZGVmIGVzY2FwZShzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiXAotICAgICAgICB0aGlzIGdlbmVyYXRvciBmdW5jdGlvbiBpcyBmb3IgdGhlIHVzZXIuIGFsbCBvdXRnb2luZyBkYXRhIGhhcyB0byBiZQotICAgICAgICBwcm9wZXJseSBlc2NhcGVkLCBzbyB0aGF0IG5vIElBQyBjaGFyYWN0ZXIgaW4gdGhlIGRhdGEgc3RyZWFtIG1lc3NlcyB1cAotICAgICAgICB0aGUgVGVsbmV0IHN0YXRlIG1hY2hpbmUgaW4gdGhlIHNlcnZlci4KLQotICAgICAgICBzb2NrZXQuc2VuZGFsbChlc2NhcGUoZGF0YSkpCi0gICAgICAgICIiIgotICAgICAgICBmb3IgYnl0ZSBpbiBkYXRhOgotICAgICAgICAgICAgaWYgYnl0ZSA9PSBJQUM6Ci0gICAgICAgICAgICAgICAgeWllbGQgSUFDCi0gICAgICAgICAgICAgICAgeWllbGQgSUFDCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHlpZWxkIGJ5dGUKLQotICAgICMgLSBpbmNvbWluZyBkYXRhIGZpbHRlcgotCi0gICAgZGVmIGZpbHRlcihzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiXAotICAgICAgICBoYW5kbGUgYSBidW5jaCBvZiBpbmNvbWluZyBieXRlcy4gdGhpcyBpcyBhIGdlbmVyYXRvci4gaXQgd2lsbCB5aWVsZAotICAgICAgICBhbGwgY2hhcmFjdGVycyBub3Qgb2YgaW50ZXJlc3QgZm9yIFRlbG5ldC9SRkMgMjIxNy4KLQotICAgICAgICBUaGUgaWRlYSBpcyB0aGF0IHRoZSByZWFkZXIgdGhyZWFkIHB1c2hlcyBkYXRhIGZyb20gdGhlIHNvY2tldCB0aHJvdWdoCi0gICAgICAgIHRoaXMgZmlsdGVyOgotCi0gICAgICAgIGZvciBieXRlIGluIGZpbHRlcihzb2NrZXQucmVjdigxMDI0KSk6Ci0gICAgICAgICAgICAjIGRvIHRoaW5ncyBsaWtlIENSL0xGIGNvbnZlcnNpb24vd2hhdGV2ZXIKLSAgICAgICAgICAgICMgYW5kIHdyaXRlIGRhdGEgdG8gdGhlIHNlcmlhbCBwb3J0Ci0gICAgICAgICAgICBzZXJpYWwud3JpdGUoYnl0ZSkKLQotICAgICAgICAoc29ja2V0IGVycm9yIGhhbmRsaW5nIGNvZGUgbGVmdCBhcyBleGVyY2lzZSBmb3IgdGhlIHJlYWRlcikKLSAgICAgICAgIiIiCi0gICAgICAgIGZvciBieXRlIGluIGRhdGE6Ci0gICAgICAgICAgICBpZiBzZWxmLm1vZGUgPT0gTV9OT1JNQUw6Ci0gICAgICAgICAgICAgICAgIyBpbnRlcnByZXQgYXMgY29tbWFuZCBvciBhcyBkYXRhCi0gICAgICAgICAgICAgICAgaWYgYnl0ZSA9PSBJQUM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZSA9IE1fSUFDX1NFRU4KLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIHN0b3JlIGRhdGEgaW4gc3ViIG9wdGlvbiBidWZmZXIgb3IgcGFzcyBpdCB0byBvdXIKLSAgICAgICAgICAgICAgICAgICAgIyBjb25zdW1lciBkZXBlbmRpbmcgb24gc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zdWJvcHRpb24gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN1Ym9wdGlvbi5hcHBlbmQoYnl0ZSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGJ5dGUKLSAgICAgICAgICAgIGVsaWYgc2VsZi5tb2RlID09IE1fSUFDX1NFRU46Ci0gICAgICAgICAgICAgICAgaWYgYnl0ZSA9PSBJQUM6Ci0gICAgICAgICAgICAgICAgICAgICMgaW50ZXJwcmV0IGFzIGNvbW1hbmQgZG91YmxlZCAtPiBpbnNlcnQgY2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgICAgICMgaXRzZWxmCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc3Vib3B0aW9uIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdWJvcHRpb24uYXBwZW5kKGJ5dGUpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBieXRlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZSA9IE1fTk9STUFMCi0gICAgICAgICAgICAgICAgZWxpZiBieXRlID09IFNCOgotICAgICAgICAgICAgICAgICAgICAjIHN1YiBvcHRpb24gc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zdWJvcHRpb24gPSBieXRlYXJyYXkoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGUgPSBNX05PUk1BTAotICAgICAgICAgICAgICAgIGVsaWYgYnl0ZSA9PSBTRToKLSAgICAgICAgICAgICAgICAgICAgIyBzdWIgb3B0aW9uIGVuZCAtPiBwcm9jZXNzIGl0IG5vdwotICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZWxuZXRQcm9jZXNzU3VibmVnb3RpYXRpb24oYnl0ZXMoc2VsZi5zdWJvcHRpb24pKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnN1Ym9wdGlvbiA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlID0gTV9OT1JNQUwKLSAgICAgICAgICAgICAgICBlbGlmIGJ5dGUgaW4gKERPLCBET05ULCBXSUxMLCBXT05UKToKLSAgICAgICAgICAgICAgICAgICAgIyBuZWdvdGlhdGlvbgotICAgICAgICAgICAgICAgICAgICBzZWxmLnRlbG5ldF9jb21tYW5kID0gYnl0ZQotICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGUgPSBNX05FR09USUFURQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgb3RoZXIgdGVsbmV0IGNvbW1hbmRzCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbG5ldFByb2Nlc3NDb21tYW5kKGJ5dGUpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZSA9IE1fTk9STUFMCi0gICAgICAgICAgICBlbGlmIHNlbGYubW9kZSA9PSBNX05FR09USUFURTogIyBETywgRE9OVCwgV0lMTCwgV09OVCB3YXMgcmVjZWl2ZWQsIG9wdGlvbiBub3cgZm9sbG93aW5nCi0gICAgICAgICAgICAgICAgc2VsZi5fdGVsbmV0TmVnb3RpYXRlT3B0aW9uKHNlbGYudGVsbmV0X2NvbW1hbmQsIGJ5dGUpCi0gICAgICAgICAgICAgICAgc2VsZi5tb2RlID0gTV9OT1JNQUwKLQotICAgICMgLSBpbmNvbWluZyB0ZWxuZXQgY29tbWFuZHMgYW5kIG9wdGlvbnMKLQotICAgIGRlZiBfdGVsbmV0UHJvY2Vzc0NvbW1hbmQoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgICIiIlByb2Nlc3MgY29tbWFuZHMgb3RoZXIgdGhhbiBETywgRE9OVCwgV0lMTCwgV09OVC4iIiIKLSAgICAgICAgIyBDdXJyZW50bHkgbm9uZS4gUkZDMjIxNyBvbmx5IHVzZXMgbmVnb3RpYXRpb24gYW5kIHN1Ym5lZ290aWF0aW9uLgotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoImlnbm9yaW5nIFRlbG5ldCBjb21tYW5kOiAlciIgJSAoY29tbWFuZCwpKQotCi0gICAgZGVmIF90ZWxuZXROZWdvdGlhdGVPcHRpb24oc2VsZiwgY29tbWFuZCwgb3B0aW9uKToKLSAgICAgICAgIiIiUHJvY2VzcyBpbmNvbWluZyBETywgRE9OVCwgV0lMTCwgV09OVC4iIiIKLSAgICAgICAgIyBjaGVjayBvdXIgcmVnaXN0ZXJlZCB0ZWxuZXQgb3B0aW9ucyBhbmQgZm9yd2FyZCBjb21tYW5kIHRvIHRoZW0KLSAgICAgICAgIyB0aGV5IGtub3cgdGhlbXNlbHZlcyBpZiB0aGV5IGhhdmUgdG8gYW5zd2VyIG9yIG5vdAotICAgICAgICBrbm93biA9IEZhbHNlCi0gICAgICAgIGZvciBpdGVtIGluIHNlbGYuX3RlbG5ldF9vcHRpb25zOgotICAgICAgICAgICAgIyBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIG1hdGNoISBhcyBzb21lIG9wdGlvbnMgYXJlIGR1cGxpY2F0ZWQgZm9yCi0gICAgICAgICAgICAjICd1cycgYW5kICd0aGVtJwotICAgICAgICAgICAgaWYgaXRlbS5vcHRpb24gPT0gb3B0aW9uOgotICAgICAgICAgICAgICAgIGl0ZW0ucHJvY2Vzc19pbmNvbWluZyhjb21tYW5kKQotICAgICAgICAgICAgICAgIGtub3duID0gVHJ1ZQotICAgICAgICBpZiBub3Qga25vd246Ci0gICAgICAgICAgICAjIGhhbmRsZSB1bmtub3duIG9wdGlvbnMKLSAgICAgICAgICAgICMgb25seSBhbnN3ZXIgdG8gcG9zaXRpdmUgcmVxdWVzdHMgYW5kIGRlbnkgdGhlbQotICAgICAgICAgICAgaWYgY29tbWFuZCA9PSBXSUxMIG9yIGNvbW1hbmQgPT0gRE86Ci0gICAgICAgICAgICAgICAgc2VsZi50ZWxuZXRTZW5kT3B0aW9uKChjb21tYW5kID09IFdJTEwgYW5kIERPTlQgb3IgV09OVCksIG9wdGlvbikKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygicmVqZWN0ZWQgVGVsbmV0IG9wdGlvbjogJXIiICUgKG9wdGlvbiwpKQotCi0KLSAgICBkZWYgX3RlbG5ldFByb2Nlc3NTdWJuZWdvdGlhdGlvbihzZWxmLCBzdWJvcHRpb24pOgotICAgICAgICAiIiJQcm9jZXNzIHN1Ym5lZ290aWF0aW9uLCB0aGUgZGF0YSBiZXR3ZWVuIElBQyBTQiBhbmQgSUFDIFNFLiIiIgotICAgICAgICBpZiBzdWJvcHRpb25bMDoxXSA9PSBDT01fUE9SVF9PUFRJT046Ci0gICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygncmVjZWl2ZWQgQ09NX1BPUlRfT1BUSU9OOiAlcicgJSAoc3Vib3B0aW9uLCkpCi0gICAgICAgICAgICBpZiBzdWJvcHRpb25bMToyXSA9PSBTRVRfQkFVRFJBVEU6Ci0gICAgICAgICAgICAgICAgYmFja3VwID0gc2VsZi5zZXJpYWwuYmF1ZHJhdGUKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIChiYXVkcmF0ZSwpID0gc3RydWN0LnVucGFjaygiIUkiLCBzdWJvcHRpb25bMjo2XSkKLSAgICAgICAgICAgICAgICAgICAgaWYgYmF1ZHJhdGUgIT0gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLmJhdWRyYXRlID0gYmF1ZHJhdGUKLSAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigiZmFpbGVkIHRvIHNldCBiYXVkIHJhdGU6ICVzIiAlIChlLCkpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLmJhdWRyYXRlID0gYmFja3VwCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCIlcyBiYXVkIHJhdGU6ICVzIiAlIChiYXVkcmF0ZSBhbmQgJ3NldCcgb3IgJ2dldCcsIHNlbGYuc2VyaWFsLmJhdWRyYXRlKSkKLSAgICAgICAgICAgICAgICBzZWxmLnJmYzIyMTdTZW5kU3VibmVnb3RpYXRpb24oU0VSVkVSX1NFVF9CQVVEUkFURSwgc3RydWN0LnBhY2soIiFJIiwgc2VsZi5zZXJpYWwuYmF1ZHJhdGUpKQotICAgICAgICAgICAgZWxpZiBzdWJvcHRpb25bMToyXSA9PSBTRVRfREFUQVNJWkU6Ci0gICAgICAgICAgICAgICAgYmFja3VwID0gc2VsZi5zZXJpYWwuYnl0ZXNpemUKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIChkYXRhc2l6ZSwpID0gc3RydWN0LnVucGFjaygiIUIiLCBzdWJvcHRpb25bMjozXSkKLSAgICAgICAgICAgICAgICAgICAgaWYgZGF0YXNpemUgIT0gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLmJ5dGVzaXplID0gZGF0YXNpemUKLSAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigiZmFpbGVkIHRvIHNldCBkYXRhIHNpemU6ICVzIiAlIChlLCkpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLmJ5dGVzaXplID0gYmFja3VwCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCIlcyBkYXRhIHNpemU6ICVzIiAlIChkYXRhc2l6ZSBhbmQgJ3NldCcgb3IgJ2dldCcsIHNlbGYuc2VyaWFsLmJ5dGVzaXplKSkKLSAgICAgICAgICAgICAgICBzZWxmLnJmYzIyMTdTZW5kU3VibmVnb3RpYXRpb24oU0VSVkVSX1NFVF9EQVRBU0laRSwgc3RydWN0LnBhY2soIiFCIiwgc2VsZi5zZXJpYWwuYnl0ZXNpemUpKQotICAgICAgICAgICAgZWxpZiBzdWJvcHRpb25bMToyXSA9PSBTRVRfUEFSSVRZOgotICAgICAgICAgICAgICAgIGJhY2t1cCA9IHNlbGYuc2VyaWFsLnBhcml0eQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcGFyaXR5ID0gc3RydWN0LnVucGFjaygiIUIiLCBzdWJvcHRpb25bMjozXSlbMF0KLSAgICAgICAgICAgICAgICAgICAgaWYgcGFyaXR5ICE9IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWwucGFyaXR5ID0gUkZDMjIxN19SRVZFUlNFX1BBUklUWV9NQVBbcGFyaXR5XQotICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKCJmYWlsZWQgdG8gc2V0IHBhcml0eTogJXMiICUgKGUsKSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWwucGFyaXR5ID0gYmFja3VwCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCIlcyBwYXJpdHk6ICVzIiAlIChwYXJpdHkgYW5kICdzZXQnIG9yICdnZXQnLCBzZWxmLnNlcmlhbC5wYXJpdHkpKQotICAgICAgICAgICAgICAgIHNlbGYucmZjMjIxN1NlbmRTdWJuZWdvdGlhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgU0VSVkVSX1NFVF9QQVJJVFksCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCIhQiIsIFJGQzIyMTdfUEFSSVRZX01BUFtzZWxmLnNlcmlhbC5wYXJpdHldKQotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICBlbGlmIHN1Ym9wdGlvblsxOjJdID09IFNFVF9TVE9QU0laRToKLSAgICAgICAgICAgICAgICBiYWNrdXAgPSBzZWxmLnNlcmlhbC5zdG9wYml0cwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc3RvcGJpdHMgPSBzdHJ1Y3QudW5wYWNrKCIhQiIsIHN1Ym9wdGlvblsyOjNdKVswXQotICAgICAgICAgICAgICAgICAgICBpZiBzdG9wYml0cyAhPSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWwuc3RvcGJpdHMgPSBSRkMyMjE3X1JFVkVSU0VfU1RPUEJJVF9NQVBbc3RvcGJpdHNdCi0gICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoImZhaWxlZCB0byBzZXQgc3RvcCBiaXRzOiAlcyIgJSAoZSwpKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5zdG9wYml0cyA9IGJhY2t1cAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiJXMgc3RvcCBiaXRzOiAlcyIgJSAoc3RvcGJpdHMgYW5kICdzZXQnIG9yICdnZXQnLCBzZWxmLnNlcmlhbC5zdG9wYml0cykpCi0gICAgICAgICAgICAgICAgc2VsZi5yZmMyMjE3U2VuZFN1Ym5lZ290aWF0aW9uKAotICAgICAgICAgICAgICAgICAgICBTRVJWRVJfU0VUX1NUT1BTSVpFLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygiIUIiLCBSRkMyMjE3X1NUT1BCSVRfTUFQW3NlbGYuc2VyaWFsLnN0b3BiaXRzXSkKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgZWxpZiBzdWJvcHRpb25bMToyXSA9PSBTRVRfQ09OVFJPTDoKLSAgICAgICAgICAgICAgICBpZiBzdWJvcHRpb25bMjozXSA9PSBTRVRfQ09OVFJPTF9SRVFfRkxPV19TRVRUSU5HOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcmlhbC54b254b2ZmOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZmMyMjE3U2VuZFN1Ym5lZ290aWF0aW9uKFNFUlZFUl9TRVRfQ09OVFJPTCwgU0VUX0NPTlRST0xfVVNFX1NXX0ZMT1dfQ09OVFJPTCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLnNlcmlhbC5ydHNjdHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJmYzIyMTdTZW5kU3VibmVnb3RpYXRpb24oU0VSVkVSX1NFVF9DT05UUk9MLCBTRVRfQ09OVFJPTF9VU0VfSFdfRkxPV19DT05UUk9MKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZmMyMjE3U2VuZFN1Ym5lZ290aWF0aW9uKFNFUlZFUl9TRVRfQ09OVFJPTCwgU0VUX0NPTlRST0xfVVNFX05PX0ZMT1dfQ09OVFJPTCkKLSAgICAgICAgICAgICAgICBlbGlmIHN1Ym9wdGlvblsyOjNdID09IFNFVF9DT05UUk9MX1VTRV9OT19GTE9XX0NPTlRST0w6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLnhvbnhvZmYgPSBGYWxzZQotICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5ydHNjdHMgPSBGYWxzZQotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oImNoYW5nZWQgZmxvdyBjb250cm9sIHRvIE5vbmUiKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJmYzIyMTdTZW5kU3VibmVnb3RpYXRpb24oU0VSVkVSX1NFVF9DT05UUk9MLCBTRVRfQ09OVFJPTF9VU0VfTk9fRkxPV19DT05UUk9MKQotICAgICAgICAgICAgICAgIGVsaWYgc3Vib3B0aW9uWzI6M10gPT0gU0VUX0NPTlRST0xfVVNFX1NXX0ZMT1dfQ09OVFJPTDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWwueG9ueG9mZiA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJjaGFuZ2VkIGZsb3cgY29udHJvbCB0byBYT04vWE9GRiIpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucmZjMjIxN1NlbmRTdWJuZWdvdGlhdGlvbihTRVJWRVJfU0VUX0NPTlRST0wsIFNFVF9DT05UUk9MX1VTRV9TV19GTE9XX0NPTlRST0wpCi0gICAgICAgICAgICAgICAgZWxpZiBzdWJvcHRpb25bMjozXSA9PSBTRVRfQ09OVFJPTF9VU0VfSFdfRkxPV19DT05UUk9MOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5ydHNjdHMgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiY2hhbmdlZCBmbG93IGNvbnRyb2wgdG8gUlRTL0NUUyIpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucmZjMjIxN1NlbmRTdWJuZWdvdGlhdGlvbihTRVJWRVJfU0VUX0NPTlRST0wsIFNFVF9DT05UUk9MX1VTRV9IV19GTE9XX0NPTlRST0wpCi0gICAgICAgICAgICAgICAgZWxpZiBzdWJvcHRpb25bMjozXSA9PSBTRVRfQ09OVFJPTF9SRVFfQlJFQUtfU1RBVEU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygicmVxdWVzdGVkIGJyZWFrIHN0YXRlIC0gbm90IGltcGxlbWVudGVkIikKLSAgICAgICAgICAgICAgICAgICAgcGFzcyAjIFhYWCBuZWVkcyBjYWNoZWQgdmFsdWUKLSAgICAgICAgICAgICAgICBlbGlmIHN1Ym9wdGlvblsyOjNdID09IFNFVF9DT05UUk9MX0JSRUFLX09OOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5zZXRCcmVhayhUcnVlKQotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oImNoYW5nZWQgQlJFQUsgdG8gYWN0aXZlIikKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5yZmMyMjE3U2VuZFN1Ym5lZ290aWF0aW9uKFNFUlZFUl9TRVRfQ09OVFJPTCwgU0VUX0NPTlRST0xfQlJFQUtfT04pCi0gICAgICAgICAgICAgICAgZWxpZiBzdWJvcHRpb25bMjozXSA9PSBTRVRfQ09OVFJPTF9CUkVBS19PRkY6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLnNldEJyZWFrKEZhbHNlKQotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oImNoYW5nZWQgQlJFQUsgdG8gaW5hY3RpdmUiKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJmYzIyMTdTZW5kU3VibmVnb3RpYXRpb24oU0VSVkVSX1NFVF9DT05UUk9MLCBTRVRfQ09OVFJPTF9CUkVBS19PRkYpCi0gICAgICAgICAgICAgICAgZWxpZiBzdWJvcHRpb25bMjozXSA9PSBTRVRfQ09OVFJPTF9SRVFfRFRSOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm5pbmcoInJlcXVlc3RlZCBEVFIgc3RhdGUgLSBub3QgaW1wbGVtZW50ZWQiKQotICAgICAgICAgICAgICAgICAgICBwYXNzICMgWFhYIG5lZWRzIGNhY2hlZCB2YWx1ZQotICAgICAgICAgICAgICAgIGVsaWYgc3Vib3B0aW9uWzI6M10gPT0gU0VUX0NPTlRST0xfRFRSX09OOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5zZXREVFIoVHJ1ZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJjaGFuZ2VkIERUUiB0byBhY3RpdmUiKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJmYzIyMTdTZW5kU3VibmVnb3RpYXRpb24oU0VSVkVSX1NFVF9DT05UUk9MLCBTRVRfQ09OVFJPTF9EVFJfT04pCi0gICAgICAgICAgICAgICAgZWxpZiBzdWJvcHRpb25bMjozXSA9PSBTRVRfQ09OVFJPTF9EVFJfT0ZGOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5zZXREVFIoRmFsc2UpCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiY2hhbmdlZCBEVFIgdG8gaW5hY3RpdmUiKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJmYzIyMTdTZW5kU3VibmVnb3RpYXRpb24oU0VSVkVSX1NFVF9DT05UUk9MLCBTRVRfQ09OVFJPTF9EVFJfT0ZGKQotICAgICAgICAgICAgICAgIGVsaWYgc3Vib3B0aW9uWzI6M10gPT0gU0VUX0NPTlRST0xfUkVRX1JUUzoKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCJyZXF1ZXN0ZWQgUlRTIHN0YXRlIC0gbm90IGltcGxlbWVudGVkIikKLSAgICAgICAgICAgICAgICAgICAgcGFzcyAjIFhYWCBuZWVkcyBjYWNoZWQgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgI34gc2VsZi5yZmMyMjE3U2VuZFN1Ym5lZ290aWF0aW9uKFNFUlZFUl9TRVRfQ09OVFJPTCwgU0VUX0NPTlRST0xfUlRTX09OKQotICAgICAgICAgICAgICAgIGVsaWYgc3Vib3B0aW9uWzI6M10gPT0gU0VUX0NPTlRST0xfUlRTX09OOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5zZXRSVFMoVHJ1ZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJjaGFuZ2VkIFJUUyB0byBhY3RpdmUiKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJmYzIyMTdTZW5kU3VibmVnb3RpYXRpb24oU0VSVkVSX1NFVF9DT05UUk9MLCBTRVRfQ09OVFJPTF9SVFNfT04pCi0gICAgICAgICAgICAgICAgZWxpZiBzdWJvcHRpb25bMjozXSA9PSBTRVRfQ09OVFJPTF9SVFNfT0ZGOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5zZXRSVFMoRmFsc2UpCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiY2hhbmdlZCBSVFMgdG8gaW5hY3RpdmUiKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJmYzIyMTdTZW5kU3VibmVnb3RpYXRpb24oU0VSVkVSX1NFVF9DT05UUk9MLCBTRVRfQ09OVFJPTF9SVFNfT0ZGKQotICAgICAgICAgICAgICAgICN+IGVsaWYgc3Vib3B0aW9uWzI6M10gPT0gU0VUX0NPTlRST0xfUkVRX0ZMT1dfU0VUVElOR19JTjoKLSAgICAgICAgICAgICAgICAjfiBlbGlmIHN1Ym9wdGlvblsyOjNdID09IFNFVF9DT05UUk9MX1VTRV9OT19GTE9XX0NPTlRST0xfSU46Ci0gICAgICAgICAgICAgICAgI34gZWxpZiBzdWJvcHRpb25bMjozXSA9PSBTRVRfQ09OVFJPTF9VU0VfU1dfRkxPV19DT05UT0xfSU46Ci0gICAgICAgICAgICAgICAgI34gZWxpZiBzdWJvcHRpb25bMjozXSA9PSBTRVRfQ09OVFJPTF9VU0VfSFdfRkxPV19DT05UT0xfSU46Ci0gICAgICAgICAgICAgICAgI34gZWxpZiBzdWJvcHRpb25bMjozXSA9PSBTRVRfQ09OVFJPTF9VU0VfRENEX0ZMT1dfQ09OVFJPTDoKLSAgICAgICAgICAgICAgICAjfiBlbGlmIHN1Ym9wdGlvblsyOjNdID09IFNFVF9DT05UUk9MX1VTRV9EVFJfRkxPV19DT05UUk9MOgotICAgICAgICAgICAgICAgICN+IGVsaWYgc3Vib3B0aW9uWzI6M10gPT0gU0VUX0NPTlRST0xfVVNFX0RTUl9GTE9XX0NPTlRST0w6Ci0gICAgICAgICAgICBlbGlmIHN1Ym9wdGlvblsxOjJdID09IE5PVElGWV9MSU5FU1RBVEU6Ci0gICAgICAgICAgICAgICAgIyBjbGllbnQgcG9sbHMgZm9yIGN1cnJlbnQgc3RhdGUKLSAgICAgICAgICAgICAgICBzZWxmLnJmYzIyMTdTZW5kU3VibmVnb3RpYXRpb24oCi0gICAgICAgICAgICAgICAgICAgIFNFUlZFUl9OT1RJRllfTElORVNUQVRFLAotICAgICAgICAgICAgICAgICAgICB0b19ieXRlcyhbMF0pICAgIyBzb3JyeSwgbm90aGluZyBsaWtlIHRoYXQgaW1wbGVtZW50ZWQKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgZWxpZiBzdWJvcHRpb25bMToyXSA9PSBOT1RJRllfTU9ERU1TVEFURToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygicmVxdWVzdCBmb3IgbW9kZW0gc3RhdGUiKQotICAgICAgICAgICAgICAgICMgY2xpZW50IHBvbGxzIGZvciBjdXJyZW50IHN0YXRlCi0gICAgICAgICAgICAgICAgc2VsZi5jaGVja19tb2RlbV9saW5lcyhmb3JjZV9ub3RpZmljYXRpb249VHJ1ZSkKLSAgICAgICAgICAgIGVsaWYgc3Vib3B0aW9uWzE6Ml0gPT0gRkxPV0NPTlRST0xfU1VTUEVORDoKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygic3VzcGVuZCIpCi0gICAgICAgICAgICAgICAgc2VsZi5fcmVtb3RlX3N1c3BlbmRfZmxvdyA9IFRydWUKLSAgICAgICAgICAgIGVsaWYgc3Vib3B0aW9uWzE6Ml0gPT0gRkxPV0NPTlRST0xfUkVTVU1FOgotICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJyZXN1bWUiKQotICAgICAgICAgICAgICAgIHNlbGYuX3JlbW90ZV9zdXNwZW5kX2Zsb3cgPSBGYWxzZQotICAgICAgICAgICAgZWxpZiBzdWJvcHRpb25bMToyXSA9PSBTRVRfTElORVNUQVRFX01BU0s6Ci0gICAgICAgICAgICAgICAgc2VsZi5saW5zdGF0ZV9tYXNrID0gb3JkKHN1Ym9wdGlvblsyOjNdKSAjIGVuc3VyZSBpdCBpcyBhIG51bWJlcgotICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJsaW5lIHN0YXRlIG1hc2s6IDB4JTAyeCIgJSAoc2VsZi5saW5zdGF0ZV9tYXNrLCkpCi0gICAgICAgICAgICBlbGlmIHN1Ym9wdGlvblsxOjJdID09IFNFVF9NT0RFTVNUQVRFX01BU0s6Ci0gICAgICAgICAgICAgICAgc2VsZi5tb2RlbXN0YXRlX21hc2sgPSBvcmQoc3Vib3B0aW9uWzI6M10pICMgZW5zdXJlIGl0IGlzIGEgbnVtYmVyCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIm1vZGVtIHN0YXRlIG1hc2s6IDB4JTAyeCIgJSAoc2VsZi5tb2RlbXN0YXRlX21hc2ssKSkKLSAgICAgICAgICAgIGVsaWYgc3Vib3B0aW9uWzE6Ml0gPT0gUFVSR0VfREFUQToKLSAgICAgICAgICAgICAgICBpZiBzdWJvcHRpb25bMjozXSA9PSBQVVJHRV9SRUNFSVZFX0JVRkZFUjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWwuZmx1c2hJbnB1dCgpCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygicHVyZ2UgaW4iKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJmYzIyMTdTZW5kU3VibmVnb3RpYXRpb24oU0VSVkVSX1BVUkdFX0RBVEEsIFBVUkdFX1JFQ0VJVkVfQlVGRkVSKQotICAgICAgICAgICAgICAgIGVsaWYgc3Vib3B0aW9uWzI6M10gPT0gUFVSR0VfVFJBTlNNSVRfQlVGRkVSOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5mbHVzaE91dHB1dCgpCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygicHVyZ2Ugb3V0IikKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5yZmMyMjE3U2VuZFN1Ym5lZ290aWF0aW9uKFNFUlZFUl9QVVJHRV9EQVRBLCBQVVJHRV9UUkFOU01JVF9CVUZGRVIpCi0gICAgICAgICAgICAgICAgZWxpZiBzdWJvcHRpb25bMjozXSA9PSBQVVJHRV9CT1RIX0JVRkZFUlM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLmZsdXNoSW5wdXQoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5mbHVzaE91dHB1dCgpCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygicHVyZ2UgYm90aCIpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucmZjMjIxN1NlbmRTdWJuZWdvdGlhdGlvbihTRVJWRVJfUFVSR0VfREFUQSwgUFVSR0VfQk9USF9CVUZGRVJTKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoInVuZGVmaW5lZCBQVVJHRV9EQVRBOiAlciIgJSBsaXN0KHN1Ym9wdGlvblsyOl0pKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoInVuZGVmaW5lZCBDT01fUE9SVF9PUFRJT046ICVyIiAlIGxpc3Qoc3Vib3B0aW9uWzE6XSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKCJ1bmtub3duIHN1Ym5lZ290aWF0aW9uOiAlciIgJSAoc3Vib3B0aW9uLCkpCi0KLQotIyBzaW1wbGUgY2xpZW50IHRlc3QKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IHN5cwotICAgIHMgPSBTZXJpYWwoJ3JmYzIyMTc6Ly9sb2NhbGhvc3Q6NzAwMCcsIDExNTIwMCkKLSAgICBzeXMuc3Rkb3V0LndyaXRlKCclc1xuJyAlIHMpCi0KLSAgICAjfiBzLmJhdWRyYXRlID0gMTg5OAotCi0gICAgc3lzLnN0ZG91dC53cml0ZSgid3JpdGUuLi5cbiIpCi0gICAgcy53cml0ZSgiaGVsbG9cbiIpCi0gICAgcy5mbHVzaCgpCi0gICAgc3lzLnN0ZG91dC53cml0ZSgicmVhZDogJXNcbiIgJSBzLnJlYWQoNSkpCi0KLSAgICAjfiBzLmJhdWRyYXRlID0gMTkyMDAKLSAgICAjfiBzLmRhdGFiaXRzID0gNwotICAgIHMuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3NlcmlhbGNsaS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC9zZXJpYWxjbGkucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MTY5YTMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3NlcmlhbGNsaS5weQorKysgL2Rldi9udWxsCkBAIC0xLDI3MyArMCwwIEBACi0jISBweXRob24KLSMgUHl0aG9uIFNlcmlhbCBQb3J0IEV4dGVuc2lvbiBmb3IgV2luMzIsIExpbnV4LCBCU0QsIEp5dGhvbiBhbmQgLk5FVC9Nb25vCi0jIHNlcmlhbCBkcml2ZXIgZm9yIC5ORVQvTW9ubyAoSXJvblB5dGhvbiksIC5ORVQgPj0gMgotIyBzZWUgX19pbml0X18ucHkKLSMKLSMgKEMpIDIwMDggQ2hyaXMgTGllY2h0aSA8Y2xpZWNodGlAZ214Lm5ldD4KLSMgdGhpcyBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGZyZWUgc29mdHdhcmUgbGljZW5zZSwgc2VlIGxpY2Vuc2UudHh0Ci0KLWltcG9ydCBjbHIKLWltcG9ydCBTeXN0ZW0KLWltcG9ydCBTeXN0ZW0uSU8uUG9ydHMKLWZyb20gc2VyaWFsLnNlcmlhbHV0aWwgaW1wb3J0ICoKLQotCi1kZWYgZGV2aWNlKHBvcnRudW0pOgotICAgICIiIlR1cm4gYSBwb3J0IG51bWJlciBpbnRvIGEgZGV2aWNlIG5hbWUiIiIKLSAgICByZXR1cm4gU3lzdGVtLklPLlBvcnRzLlNlcmlhbFBvcnQuR2V0UG9ydE5hbWVzKClbcG9ydG51bV0KLQotCi0jIG11c3QgaW52b2tlIGZ1bmN0aW9uIHdpdGggYnl0ZSBhcnJheSwgbWFrZSBhIGhlbHBlciB0byBjb252ZXJ0IHN0cmluZ3MKLSMgdG8gYnl0ZSBhcnJheXMKLXNhYiA9IFN5c3RlbS5BcnJheVtTeXN0ZW0uQnl0ZV0KLWRlZiBhc19ieXRlX2FycmF5KHN0cmluZyk6Ci0gICAgcmV0dXJuIHNhYihbb3JkKHgpIGZvciB4IGluIHN0cmluZ10pICAjIFhYWCB3aWxsIHJlcXVpcmUgYWRhcHRpb24gd2hlbiBydW4gd2l0aCBhIDMueCBjb21wYXRpYmxlIElyb25QeXRob24KLQotY2xhc3MgSXJvblNlcmlhbChTZXJpYWxCYXNlKToKLSAgICAiIiJTZXJpYWwgcG9ydCBpbXBsZW1lbnRhdGlvbiBmb3IgLk5FVC9Nb25vLiIiIgotCi0gICAgQkFVRFJBVEVTID0gKDUwLCA3NSwgMTEwLCAxMzQsIDE1MCwgMjAwLCAzMDAsIDYwMCwgMTIwMCwgMTgwMCwgMjQwMCwgNDgwMCwKLSAgICAgICAgICAgICAgICA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDApCi0KLSAgICBkZWYgb3BlbihzZWxmKToKLSAgICAgICAgIiIiT3BlbiBwb3J0IHdpdGggY3VycmVudCBzZXR0aW5ncy4gVGhpcyBtYXkgdGhyb3cgYSBTZXJpYWxFeGNlcHRpb24KLSAgICAgICAgICAgaWYgdGhlIHBvcnQgY2Fubm90IGJlIG9wZW5lZC4iIiIKLSAgICAgICAgaWYgc2VsZi5fcG9ydCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJQb3J0IG11c3QgYmUgY29uZmlndXJlZCBiZWZvcmUgaXQgY2FuIGJlIHVzZWQuIikKLSAgICAgICAgaWYgc2VsZi5faXNPcGVuOgotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJQb3J0IGlzIGFscmVhZHkgb3Blbi4iKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0X2hhbmRsZSA9IFN5c3RlbS5JTy5Qb3J0cy5TZXJpYWxQb3J0KHNlbGYucG9ydHN0cikKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgbXNnOgotICAgICAgICAgICAgc2VsZi5fcG9ydF9oYW5kbGUgPSBOb25lCi0gICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oImNvdWxkIG5vdCBvcGVuIHBvcnQgJXM6ICVzIiAlIChzZWxmLnBvcnRzdHIsIG1zZykpCi0KLSAgICAgICAgc2VsZi5fcmVjb25maWd1cmVQb3J0KCkKLSAgICAgICAgc2VsZi5fcG9ydF9oYW5kbGUuT3BlbigpCi0gICAgICAgIHNlbGYuX2lzT3BlbiA9IFRydWUKLSAgICAgICAgaWYgbm90IHNlbGYuX3J0c2N0czoKLSAgICAgICAgICAgIHNlbGYuc2V0UlRTKFRydWUpCi0gICAgICAgICAgICBzZWxmLnNldERUUihUcnVlKQotICAgICAgICBzZWxmLmZsdXNoSW5wdXQoKQotICAgICAgICBzZWxmLmZsdXNoT3V0cHV0KCkKLQotICAgIGRlZiBfcmVjb25maWd1cmVQb3J0KHNlbGYpOgotICAgICAgICAiIiJTZXQgY29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzIG9uIG9wZW5lZCBwb3J0LiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5fcG9ydF9oYW5kbGU6Ci0gICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oIkNhbiBvbmx5IG9wZXJhdGUgb24gYSB2YWxpZCBwb3J0IGhhbmRsZSIpCi0KLSAgICAgICAgI34gc2VsZi5fcG9ydF9oYW5kbGUuUmVjZWl2ZWRCeXRlc1RocmVzaG9sZCA9IDEKLQotICAgICAgICBpZiBzZWxmLl90aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0X2hhbmRsZS5SZWFkVGltZW91dCA9IFN5c3RlbS5JTy5Qb3J0cy5TZXJpYWxQb3J0LkluZmluaXRlVGltZW91dAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fcG9ydF9oYW5kbGUuUmVhZFRpbWVvdXQgPSBpbnQoc2VsZi5fdGltZW91dCoxMDAwKQotCi0gICAgICAgICMgaWYgc2VsZi5fdGltZW91dCAhPSAwIGFuZCBzZWxmLl9pbnRlckNoYXJUaW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgIyB0aW1lb3V0cyA9IChpbnQoc2VsZi5faW50ZXJDaGFyVGltZW91dCAqIDEwMDApLCkgKyB0aW1lb3V0c1sxOl0KLQotICAgICAgICBpZiBzZWxmLl93cml0ZVRpbWVvdXQgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLldyaXRlVGltZW91dCA9IFN5c3RlbS5JTy5Qb3J0cy5TZXJpYWxQb3J0LkluZmluaXRlVGltZW91dAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fcG9ydF9oYW5kbGUuV3JpdGVUaW1lb3V0ID0gaW50KHNlbGYuX3dyaXRlVGltZW91dCoxMDAwKQotCi0KLSAgICAgICAgIyBTZXR1cCB0aGUgY29ubmVjdGlvbiBpbmZvLgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0X2hhbmRsZS5CYXVkUmF0ZSA9IHNlbGYuX2JhdWRyYXRlCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAgICAgICAgIyBjYXRjaCBlcnJvcnMgZnJvbSBpbGxlZ2FsIGJhdWRyYXRlIHNldHRpbmdzCi0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHN0cihlKSkKLQotICAgICAgICBpZiBzZWxmLl9ieXRlc2l6ZSA9PSBGSVZFQklUUzoKLSAgICAgICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLkRhdGFCaXRzICAgICA9IDUKLSAgICAgICAgZWxpZiBzZWxmLl9ieXRlc2l6ZSA9PSBTSVhCSVRTOgotICAgICAgICAgICAgc2VsZi5fcG9ydF9oYW5kbGUuRGF0YUJpdHMgICAgID0gNgotICAgICAgICBlbGlmIHNlbGYuX2J5dGVzaXplID09IFNFVkVOQklUUzoKLSAgICAgICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLkRhdGFCaXRzICAgICA9IDcKLSAgICAgICAgZWxpZiBzZWxmLl9ieXRlc2l6ZSA9PSBFSUdIVEJJVFM6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0X2hhbmRsZS5EYXRhQml0cyAgICAgPSA4Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbnN1cHBvcnRlZCBudW1iZXIgb2YgZGF0YSBiaXRzOiAlciIgJSBzZWxmLl9ieXRlc2l6ZSkKLQotICAgICAgICBpZiBzZWxmLl9wYXJpdHkgPT0gUEFSSVRZX05PTkU6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0X2hhbmRsZS5QYXJpdHkgICAgICAgPSBnZXRhdHRyKFN5c3RlbS5JTy5Qb3J0cy5QYXJpdHksICdOb25lJykgIyByZXNlcnZlZCBrZXl3b3JkIGluIFB5M2sKLSAgICAgICAgZWxpZiBzZWxmLl9wYXJpdHkgPT0gUEFSSVRZX0VWRU46Ci0gICAgICAgICAgICBzZWxmLl9wb3J0X2hhbmRsZS5QYXJpdHkgICAgICAgPSBTeXN0ZW0uSU8uUG9ydHMuUGFyaXR5LkV2ZW4KLSAgICAgICAgZWxpZiBzZWxmLl9wYXJpdHkgPT0gUEFSSVRZX09ERDoKLSAgICAgICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLlBhcml0eSAgICAgICA9IFN5c3RlbS5JTy5Qb3J0cy5QYXJpdHkuT2RkCi0gICAgICAgIGVsaWYgc2VsZi5fcGFyaXR5ID09IFBBUklUWV9NQVJLOgotICAgICAgICAgICAgc2VsZi5fcG9ydF9oYW5kbGUuUGFyaXR5ICAgICAgID0gU3lzdGVtLklPLlBvcnRzLlBhcml0eS5NYXJrCi0gICAgICAgIGVsaWYgc2VsZi5fcGFyaXR5ID09IFBBUklUWV9TUEFDRToKLSAgICAgICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLlBhcml0eSAgICAgICA9IFN5c3RlbS5JTy5Qb3J0cy5QYXJpdHkuU3BhY2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIHBhcml0eSBtb2RlOiAlciIgJSBzZWxmLl9wYXJpdHkpCi0KLSAgICAgICAgaWYgc2VsZi5fc3RvcGJpdHMgPT0gU1RPUEJJVFNfT05FOgotICAgICAgICAgICAgc2VsZi5fcG9ydF9oYW5kbGUuU3RvcEJpdHMgICAgID0gU3lzdGVtLklPLlBvcnRzLlN0b3BCaXRzLk9uZQotICAgICAgICBlbGlmIHNlbGYuX3N0b3BiaXRzID09IFNUT1BCSVRTX09ORV9QT0lOVF9GSVZFOgotICAgICAgICAgICAgc2VsZi5fcG9ydF9oYW5kbGUuU3RvcEJpdHMgICAgID0gU3lzdGVtLklPLlBvcnRzLlN0b3BCaXRzLk9uZVBvaW50Rml2ZQotICAgICAgICBlbGlmIHNlbGYuX3N0b3BiaXRzID09IFNUT1BCSVRTX1RXTzoKLSAgICAgICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLlN0b3BCaXRzICAgICA9IFN5c3RlbS5JTy5Qb3J0cy5TdG9wQml0cy5Ud28KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIG51bWJlciBvZiBzdG9wIGJpdHM6ICVyIiAlIHNlbGYuX3N0b3BiaXRzKQotCi0gICAgICAgIGlmIHNlbGYuX3J0c2N0cyBhbmQgc2VsZi5feG9ueG9mZjoKLSAgICAgICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLkhhbmRzaGFrZSAgPSBTeXN0ZW0uSU8uUG9ydHMuSGFuZHNoYWtlLlJlcXVlc3RUb1NlbmRYT25YT2ZmCi0gICAgICAgIGVsaWYgc2VsZi5fcnRzY3RzOgotICAgICAgICAgICAgc2VsZi5fcG9ydF9oYW5kbGUuSGFuZHNoYWtlICA9IFN5c3RlbS5JTy5Qb3J0cy5IYW5kc2hha2UuUmVxdWVzdFRvU2VuZAotICAgICAgICBlbGlmIHNlbGYuX3hvbnhvZmY6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0X2hhbmRsZS5IYW5kc2hha2UgID0gU3lzdGVtLklPLlBvcnRzLkhhbmRzaGFrZS5YT25YT2ZmCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0X2hhbmRsZS5IYW5kc2hha2UgID0gZ2V0YXR0cihTeXN0ZW0uSU8uUG9ydHMuSGFuZHNoYWtlLCAnTm9uZScpICAgIyByZXNlcnZlZCBrZXl3b3JkIGluIFB5M2sKLQotICAgICN+IGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICAjfiBzZWxmLmNsb3NlKCkKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgIiIiQ2xvc2UgcG9ydCIiIgotICAgICAgICBpZiBzZWxmLl9pc09wZW46Ci0gICAgICAgICAgICBpZiBzZWxmLl9wb3J0X2hhbmRsZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLkNsb3NlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgU3lzdGVtLklPLlBvcnRzLkludmFsaWRPcGVyYXRpb25FeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgICAgICMgaWdub3JlIGVycm9ycy4gY2FuIGhhcHBlbiBmb3IgdW5wbHVnZ2VkIFVTQiBzZXJpYWwgZGV2aWNlcwotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgc2VsZi5fcG9ydF9oYW5kbGUgPSBOb25lCi0gICAgICAgICAgICBzZWxmLl9pc09wZW4gPSBGYWxzZQotCi0gICAgZGVmIG1ha2VEZXZpY2VOYW1lKHNlbGYsIHBvcnQpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gZGV2aWNlKHBvcnQpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGU6Ci0gICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oc3RyKGUpKQotCi0gICAgIyAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLQotCi0gICAgZGVmIGluV2FpdGluZyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBjdXJyZW50bHkgaW4gdGhlIGlucHV0IGJ1ZmZlci4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3BvcnRfaGFuZGxlOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHJldHVybiBzZWxmLl9wb3J0X2hhbmRsZS5CeXRlc1RvUmVhZAotCi0gICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0xKToKLSAgICAgICAgIiIiUmVhZCBzaXplIGJ5dGVzIGZyb20gdGhlIHNlcmlhbCBwb3J0LiBJZiBhIHRpbWVvdXQgaXMgc2V0IGl0IG1heQotICAgICAgICAgICByZXR1cm4gbGVzcyBjaGFyYWN0ZXJzIGFzIHJlcXVlc3RlZC4gV2l0aCBubyB0aW1lb3V0IGl0IHdpbGwgYmxvY2sKLSAgICAgICAgICAgdW50aWwgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMgaXMgcmVhZC4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3BvcnRfaGFuZGxlOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgICMgbXVzdCB1c2Ugc2luZ2xlIGJ5dGUgcmVhZHMgYXMgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gcmVhZAotICAgICAgICAjIHdpdGhvdXQgYXBwbHlpbmcgZW5jb2RpbmdzCi0gICAgICAgIGRhdGEgPSBieXRlYXJyYXkoKQotICAgICAgICB3aGlsZSBzaXplOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHNlbGYuX3BvcnRfaGFuZGxlLlJlYWRCeXRlKCkpCi0gICAgICAgICAgICBleGNlcHQgU3lzdGVtLlRpbWVvdXRFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2l6ZSAtPSAxCi0gICAgICAgIHJldHVybiBieXRlcyhkYXRhKQotCi0gICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgotICAgICAgICAiIiJPdXRwdXQgdGhlIGdpdmVuIHN0cmluZyBvdmVyIHRoZSBzZXJpYWwgcG9ydC4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3BvcnRfaGFuZGxlOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5KSk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2V4cGVjdGVkICVzIG9yIGJ5dGVhcnJheSwgZ290ICVzJyAlIChieXRlcywgdHlwZShkYXRhKSkpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgbXVzdCBjYWxsIG92ZXJsb2FkZWQgbWV0aG9kIHdpdGggYnl0ZSBhcnJheSBhcmd1bWVudAotICAgICAgICAgICAgIyBhcyB0aGlzIGlzIHRoZSBvbmx5IG9uZSBub3QgYXBwbHlpbmcgZW5jb2RpbmdzCi0gICAgICAgICAgICBzZWxmLl9wb3J0X2hhbmRsZS5Xcml0ZShhc19ieXRlX2FycmF5KGRhdGEpLCAwLCBsZW4oZGF0YSkpCi0gICAgICAgIGV4Y2VwdCBTeXN0ZW0uVGltZW91dEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIHJhaXNlIHdyaXRlVGltZW91dEVycm9yCi0gICAgICAgIHJldHVybiBsZW4oZGF0YSkKLQotICAgIGRlZiBmbHVzaElucHV0KHNlbGYpOgotICAgICAgICAiIiJDbGVhciBpbnB1dCBidWZmZXIsIGRpc2NhcmRpbmcgYWxsIHRoYXQgaXMgaW4gdGhlIGJ1ZmZlci4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3BvcnRfaGFuZGxlOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLkRpc2NhcmRJbkJ1ZmZlcigpCi0KLSAgICBkZWYgZmx1c2hPdXRwdXQoc2VsZik6Ci0gICAgICAgICIiIkNsZWFyIG91dHB1dCBidWZmZXIsIGFib3J0aW5nIHRoZSBjdXJyZW50IG91dHB1dCBhbmQKLSAgICAgICAgZGlzY2FyZGluZyBhbGwgdGhhdCBpcyBpbiB0aGUgYnVmZmVyLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5fcG9ydF9oYW5kbGU6IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgc2VsZi5fcG9ydF9oYW5kbGUuRGlzY2FyZE91dEJ1ZmZlcigpCi0KLSAgICBkZWYgc2VuZEJyZWFrKHNlbGYsIGR1cmF0aW9uPTAuMjUpOgotICAgICAgICAiIiJTZW5kIGJyZWFrIGNvbmRpdGlvbi4gVGltZWQsIHJldHVybnMgdG8gaWRsZSBzdGF0ZSBhZnRlciBnaXZlbiBkdXJhdGlvbi4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3BvcnRfaGFuZGxlOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGltcG9ydCB0aW1lCi0gICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLkJyZWFrU3RhdGUgPSBUcnVlCi0gICAgICAgIHRpbWUuc2xlZXAoZHVyYXRpb24pCi0gICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLkJyZWFrU3RhdGUgPSBGYWxzZQotCi0gICAgZGVmIHNldEJyZWFrKHNlbGYsIGxldmVsPVRydWUpOgotICAgICAgICAiIiJTZXQgYnJlYWs6IENvbnRyb2xzIFRYRC4gV2hlbiBhY3RpdmUsIHRvIHRyYW5zbWl0dGluZyBpcyBwb3NzaWJsZS4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3BvcnRfaGFuZGxlOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLkJyZWFrU3RhdGUgPSBib29sKGxldmVsKQotCi0gICAgZGVmIHNldFJUUyhzZWxmLCBsZXZlbD1UcnVlKToKLSAgICAgICAgIiIiU2V0IHRlcm1pbmFsIHN0YXR1cyBsaW5lOiBSZXF1ZXN0IFRvIFNlbmQiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3BvcnRfaGFuZGxlOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLlJ0c0VuYWJsZSA9IGJvb2wobGV2ZWwpCi0KLSAgICBkZWYgc2V0RFRSKHNlbGYsIGxldmVsPVRydWUpOgotICAgICAgICAiIiJTZXQgdGVybWluYWwgc3RhdHVzIGxpbmU6IERhdGEgVGVybWluYWwgUmVhZHkiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3BvcnRfaGFuZGxlOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHNlbGYuX3BvcnRfaGFuZGxlLkR0ckVuYWJsZSA9IGJvb2wobGV2ZWwpCi0KLSAgICBkZWYgZ2V0Q1RTKHNlbGYpOgotICAgICAgICAiIiJSZWFkIHRlcm1pbmFsIHN0YXR1cyBsaW5lOiBDbGVhciBUbyBTZW5kIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9wb3J0X2hhbmRsZTogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICByZXR1cm4gc2VsZi5fcG9ydF9oYW5kbGUuQ3RzSG9sZGluZwotCi0gICAgZGVmIGdldERTUihzZWxmKToKLSAgICAgICAgIiIiUmVhZCB0ZXJtaW5hbCBzdGF0dXMgbGluZTogRGF0YSBTZXQgUmVhZHkiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3BvcnRfaGFuZGxlOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHJldHVybiBzZWxmLl9wb3J0X2hhbmRsZS5Ec3JIb2xkaW5nCi0KLSAgICBkZWYgZ2V0Ukkoc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdGVybWluYWwgc3RhdHVzIGxpbmU6IFJpbmcgSW5kaWNhdG9yIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9wb3J0X2hhbmRsZTogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICAjfiByZXR1cm4gc2VsZi5fcG9ydF9oYW5kbGUuWFhYCi0gICAgICAgIHJldHVybiBGYWxzZSAjWFhYIGFuIGVycm9yIHdvdWxkIGJlIGJldHRlcgotCi0gICAgZGVmIGdldENEKHNlbGYpOgotICAgICAgICAiIiJSZWFkIHRlcm1pbmFsIHN0YXR1cyBsaW5lOiBDYXJyaWVyIERldGVjdCIiIgotICAgICAgICBpZiBub3Qgc2VsZi5fcG9ydF9oYW5kbGU6IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnRfaGFuZGxlLkNESG9sZGluZwotCi0gICAgIyAtIC0gcGxhdGZvcm0gc3BlY2lmaWMgLSAtIC0gLQotICAgICMgbm9uZQotCi0KLSMgYXNzZW1ibGUgU2VyaWFsIGNsYXNzIHdpdGggdGhlIHBsYXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgYmFzZQotIyBmb3IgZmlsZS1saWtlIGJlaGF2aW9yLiBmb3IgUHl0aG9uIDIuNiBhbmQgbmV3ZXIsIHRoYXQgcHJvdmlkZSB0aGUgbmV3IEkvTwotIyBsaWJyYXJ5LCBkZXJpdmUgZnJvbSBpby5SYXdJT0Jhc2UKLXRyeToKLSAgICBpbXBvcnQgaW8KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIGNsYXNzaWMgdmVyc2lvbiB3aXRoIG91ciBvd24gZmlsZS1saWtlIGVtdWxhdGlvbgotICAgIGNsYXNzIFNlcmlhbChJcm9uU2VyaWFsLCBGaWxlTGlrZSk6Ci0gICAgICAgIHBhc3MKLWVsc2U6Ci0gICAgIyBpbyBsaWJyYXJ5IHByZXNlbnQKLSAgICBjbGFzcyBTZXJpYWwoSXJvblNlcmlhbCwgaW8uUmF3SU9CYXNlKToKLSAgICAgICAgcGFzcwotCi0KLSMgTnVyIFRlc3RmdW5rdGlvbiEhCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGltcG9ydCBzeXMKLQotICAgIHMgPSBTZXJpYWwoMCkKLSAgICBzeXMuc3RkaW8ud3JpdGUoJyVzXG4nICUgcykKLQotICAgIHMgPSBTZXJpYWwoKQotICAgIHN5cy5zdGRpby53cml0ZSgnJXNcbicgJSBzKQotCi0KLSAgICBzLmJhdWRyYXRlID0gMTkyMDAKLSAgICBzLmRhdGFiaXRzID0gNwotICAgIHMuY2xvc2UoKQotICAgIHMucG9ydCA9IDAKLSAgICBzLm9wZW4oKQotICAgIHN5cy5zdGRpby53cml0ZSgnJXNcbicgJSBzKQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvc2VyaWFsamF2YS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC9zZXJpYWxqYXZhLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmE3OGY4Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC9zZXJpYWxqYXZhLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYyICswLDAgQEAKLSMhanl0aG9uCi0jCi0jIFB5dGhvbiBTZXJpYWwgUG9ydCBFeHRlbnNpb24gZm9yIFdpbjMyLCBMaW51eCwgQlNELCBKeXRob24KLSMgbW9kdWxlIGZvciBzZXJpYWwgSU8gZm9yIEp5dGhvbiBhbmQgSmF2YUNvbW0KLSMgc2VlIF9faW5pdF9fLnB5Ci0jCi0jIChDKSAyMDAyLTIwMDggQ2hyaXMgTGllY2h0aSA8Y2xpZWNodGlAZ214Lm5ldD4KLSMgdGhpcyBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGZyZWUgc29mdHdhcmUgbGljZW5zZSwgc2VlIGxpY2Vuc2UudHh0Ci0KLWZyb20gc2VyaWFsLnNlcmlhbHV0aWwgaW1wb3J0ICoKLQotZGVmIG15X2ltcG9ydChuYW1lKToKLSAgICBtb2QgPSBfX2ltcG9ydF9fKG5hbWUpCi0gICAgY29tcG9uZW50cyA9IG5hbWUuc3BsaXQoJy4nKQotICAgIGZvciBjb21wIGluIGNvbXBvbmVudHNbMTpdOgotICAgICAgICBtb2QgPSBnZXRhdHRyKG1vZCwgY29tcCkKLSAgICByZXR1cm4gbW9kCi0KLQotZGVmIGRldGVjdF9qYXZhX2NvbW0obmFtZXMpOgotICAgICIiInRyeSBnaXZlbiBsaXN0IG9mIG1vZHVsZXMgYW5kIHJldHVybiB0aGF0IGltcG9ydHMiIiIKLSAgICBmb3IgbmFtZSBpbiBuYW1lczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbW9kID0gbXlfaW1wb3J0KG5hbWUpCi0gICAgICAgICAgICBtb2QuU2VyaWFsUG9ydAotICAgICAgICAgICAgcmV0dXJuIG1vZAotICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICAgICAgICBwYXNzCi0gICAgcmFpc2UgSW1wb3J0RXJyb3IoIk5vIEphdmEgQ29tbXVuaWNhdGlvbnMgQVBJIGltcGxlbWVudGF0aW9uIGZvdW5kIikKLQotCi0jIEphdmEgQ29tbXVuaWNhdGlvbnMgQVBJIGltcGxlbWVudGF0aW9ucwotIyBodHRwOi8vbWhvLnJlcHVibGlrYS5wbC9qYXZhL2NvbW0vCi0KLWNvbW0gPSBkZXRlY3RfamF2YV9jb21tKFsKLSAgICAnamF2YXguY29tbScsICMgU3VuL0lCTQotICAgICdnbnUuaW8nLCAgICAgIyBSWFRYCi1dKQotCi0KLWRlZiBkZXZpY2UocG9ydG51bWJlcik6Ci0gICAgIiIiVHVybiBhIHBvcnQgbnVtYmVyIGludG8gYSBkZXZpY2UgbmFtZSIiIgotICAgIGVudW0gPSBjb21tLkNvbW1Qb3J0SWRlbnRpZmllci5nZXRQb3J0SWRlbnRpZmllcnMoKQotICAgIHBvcnRzID0gW10KLSAgICB3aGlsZSBlbnVtLmhhc01vcmVFbGVtZW50cygpOgotICAgICAgICBlbCA9IGVudW0ubmV4dEVsZW1lbnQoKQotICAgICAgICBpZiBlbC5nZXRQb3J0VHlwZSgpID09IGNvbW0uQ29tbVBvcnRJZGVudGlmaWVyLlBPUlRfU0VSSUFMOgotICAgICAgICAgICAgcG9ydHMuYXBwZW5kKGVsKQotICAgIHJldHVybiBwb3J0c1twb3J0bnVtYmVyXS5nZXROYW1lKCkKLQotCi1jbGFzcyBKYXZhU2VyaWFsKFNlcmlhbEJhc2UpOgotICAgICIiIlNlcmlhbCBwb3J0IGNsYXNzLCBpbXBsZW1lbnRlZCB3aXRoIEphdmEgQ29tbXVuaWNhdGlvbnMgQVBJIGFuZAotICAgICAgIHRodXMgdXNhYmxlIHdpdGgganl0aG9uIGFuZCB0aGUgYXBwcm9wcmlhdGUgamF2YSBleHRlbnNpb24uIiIiCi0KLSAgICBkZWYgb3BlbihzZWxmKToKLSAgICAgICAgIiIiT3BlbiBwb3J0IHdpdGggY3VycmVudCBzZXR0aW5ncy4gVGhpcyBtYXkgdGhyb3cgYSBTZXJpYWxFeGNlcHRpb24KLSAgICAgICAgICAgaWYgdGhlIHBvcnQgY2Fubm90IGJlIG9wZW5lZC4iIiIKLSAgICAgICAgaWYgc2VsZi5fcG9ydCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJQb3J0IG11c3QgYmUgY29uZmlndXJlZCBiZWZvcmUgaXQgY2FuIGJlIHVzZWQuIikKLSAgICAgICAgaWYgc2VsZi5faXNPcGVuOgotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJQb3J0IGlzIGFscmVhZHkgb3Blbi4iKQotICAgICAgICBpZiB0eXBlKHNlbGYuX3BvcnQpID09IHR5cGUoJycpOiAgICAgICMgc3RyaW5ncyBhcmUgdGFrZW4gZGlyZWN0bHkKLSAgICAgICAgICAgIHBvcnRJZCA9IGNvbW0uQ29tbVBvcnRJZGVudGlmaWVyLmdldFBvcnRJZGVudGlmaWVyKHNlbGYuX3BvcnQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwb3J0SWQgPSBjb21tLkNvbW1Qb3J0SWRlbnRpZmllci5nZXRQb3J0SWRlbnRpZmllcihkZXZpY2Uoc2VsZi5fcG9ydCkpICAgICAjIG51bWJlcnMgYXJlIHRyYW5zZm9ybWVkIHRvIGEgY29tcG9ydCBpZCBvYmoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5zUG9ydCA9IHBvcnRJZC5vcGVuKCJweXRob24gc2VyaWFsIG1vZHVsZSIsIDEwKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBtc2c6Ci0gICAgICAgICAgICBzZWxmLnNQb3J0ID0gTm9uZQotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJDb3VsZCBub3Qgb3BlbiBwb3J0OiAlcyIgJSBtc2cpCi0gICAgICAgIHNlbGYuX3JlY29uZmlndXJlUG9ydCgpCi0gICAgICAgIHNlbGYuX2luc3RyZWFtID0gc2VsZi5zUG9ydC5nZXRJbnB1dFN0cmVhbSgpCi0gICAgICAgIHNlbGYuX291dHN0cmVhbSA9IHNlbGYuc1BvcnQuZ2V0T3V0cHV0U3RyZWFtKCkKLSAgICAgICAgc2VsZi5faXNPcGVuID0gVHJ1ZQotCi0gICAgZGVmIF9yZWNvbmZpZ3VyZVBvcnQoc2VsZik6Ci0gICAgICAgICIiIlNldCBjb21tdW5pY2F0aW9uIHBhcmFtZXRlcnMgb24gb3BlbmVkIHBvcnQuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLnNQb3J0OgotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJDYW4gb25seSBvcGVyYXRlIG9uIGEgdmFsaWQgcG9ydCBoYW5kbGUiKQotCi0gICAgICAgIHNlbGYuc1BvcnQuZW5hYmxlUmVjZWl2ZVRpbWVvdXQoMzApCi0gICAgICAgIGlmIHNlbGYuX2J5dGVzaXplID09IEZJVkVCSVRTOgotICAgICAgICAgICAgamRhdGFiaXRzID0gY29tbS5TZXJpYWxQb3J0LkRBVEFCSVRTXzUKLSAgICAgICAgZWxpZiBzZWxmLl9ieXRlc2l6ZSA9PSBTSVhCSVRTOgotICAgICAgICAgICAgamRhdGFiaXRzID0gY29tbS5TZXJpYWxQb3J0LkRBVEFCSVRTXzYKLSAgICAgICAgZWxpZiBzZWxmLl9ieXRlc2l6ZSA9PSBTRVZFTkJJVFM6Ci0gICAgICAgICAgICBqZGF0YWJpdHMgPSBjb21tLlNlcmlhbFBvcnQuREFUQUJJVFNfNwotICAgICAgICBlbGlmIHNlbGYuX2J5dGVzaXplID09IEVJR0hUQklUUzoKLSAgICAgICAgICAgIGpkYXRhYml0cyA9IGNvbW0uU2VyaWFsUG9ydC5EQVRBQklUU184Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bnN1cHBvcnRlZCBieXRlc2l6ZTogJXIiICUgc2VsZi5fYnl0ZXNpemUpCi0KLSAgICAgICAgaWYgc2VsZi5fc3RvcGJpdHMgPT0gU1RPUEJJVFNfT05FOgotICAgICAgICAgICAganN0b3BiaXRzID0gY29tbS5TZXJpYWxQb3J0LlNUT1BCSVRTXzEKLSAgICAgICAgZWxpZiBzdG9wYml0cyA9PSBTVE9QQklUU19PTkVfUE9JTlRfRklWRToKLSAgICAgICAgICAgIHNlbGYuX2pzdG9wYml0cyA9IGNvbW0uU2VyaWFsUG9ydC5TVE9QQklUU18xXzUKLSAgICAgICAgZWxpZiBzZWxmLl9zdG9wYml0cyA9PSBTVE9QQklUU19UV086Ci0gICAgICAgICAgICBqc3RvcGJpdHMgPSBjb21tLlNlcmlhbFBvcnQuU1RPUEJJVFNfMgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5zdXBwb3J0ZWQgbnVtYmVyIG9mIHN0b3BiaXRzOiAlciIgJSBzZWxmLl9zdG9wYml0cykKLQotICAgICAgICBpZiBzZWxmLl9wYXJpdHkgPT0gUEFSSVRZX05PTkU6Ci0gICAgICAgICAgICBqcGFyaXR5ID0gY29tbS5TZXJpYWxQb3J0LlBBUklUWV9OT05FCi0gICAgICAgIGVsaWYgc2VsZi5fcGFyaXR5ID09IFBBUklUWV9FVkVOOgotICAgICAgICAgICAganBhcml0eSA9IGNvbW0uU2VyaWFsUG9ydC5QQVJJVFlfRVZFTgotICAgICAgICBlbGlmIHNlbGYuX3Bhcml0eSA9PSBQQVJJVFlfT0REOgotICAgICAgICAgICAganBhcml0eSA9IGNvbW0uU2VyaWFsUG9ydC5QQVJJVFlfT0RECi0gICAgICAgIGVsaWYgc2VsZi5fcGFyaXR5ID09IFBBUklUWV9NQVJLOgotICAgICAgICAgICAganBhcml0eSA9IGNvbW0uU2VyaWFsUG9ydC5QQVJJVFlfTUFSSwotICAgICAgICBlbGlmIHNlbGYuX3Bhcml0eSA9PSBQQVJJVFlfU1BBQ0U6Ci0gICAgICAgICAgICBqcGFyaXR5ID0gY29tbS5TZXJpYWxQb3J0LlBBUklUWV9TUEFDRQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5zdXBwb3J0ZWQgcGFyaXR5IHR5cGU6ICVyIiAlIHNlbGYuX3Bhcml0eSkKLQotICAgICAgICBqZmxvd2luID0gamZsb3dvdXQgPSAwCi0gICAgICAgIGlmIHNlbGYuX3J0c2N0czoKLSAgICAgICAgICAgIGpmbG93aW4gIHw9ICBjb21tLlNlcmlhbFBvcnQuRkxPV0NPTlRST0xfUlRTQ1RTX0lOCi0gICAgICAgICAgICBqZmxvd291dCB8PSAgY29tbS5TZXJpYWxQb3J0LkZMT1dDT05UUk9MX1JUU0NUU19PVVQKLSAgICAgICAgaWYgc2VsZi5feG9ueG9mZjoKLSAgICAgICAgICAgIGpmbG93aW4gIHw9ICBjb21tLlNlcmlhbFBvcnQuRkxPV0NPTlRST0xfWE9OWE9GRl9JTgotICAgICAgICAgICAgamZsb3dvdXQgfD0gIGNvbW0uU2VyaWFsUG9ydC5GTE9XQ09OVFJPTF9YT05YT0ZGX09VVAotCi0gICAgICAgIHNlbGYuc1BvcnQuc2V0U2VyaWFsUG9ydFBhcmFtcyhzZWxmLl9iYXVkcmF0ZSwgamRhdGFiaXRzLCBqc3RvcGJpdHMsIGpwYXJpdHkpCi0gICAgICAgIHNlbGYuc1BvcnQuc2V0Rmxvd0NvbnRyb2xNb2RlKGpmbG93aW4gfCBqZmxvd291dCkKLQotICAgICAgICBpZiBzZWxmLl90aW1lb3V0ID49IDA6Ci0gICAgICAgICAgICBzZWxmLnNQb3J0LmVuYWJsZVJlY2VpdmVUaW1lb3V0KHNlbGYuX3RpbWVvdXQqMTAwMCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc1BvcnQuZGlzYWJsZVJlY2VpdmVUaW1lb3V0KCkKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgIiIiQ2xvc2UgcG9ydCIiIgotICAgICAgICBpZiBzZWxmLl9pc09wZW46Ci0gICAgICAgICAgICBpZiBzZWxmLnNQb3J0OgotICAgICAgICAgICAgICAgIHNlbGYuX2luc3RyZWFtLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9vdXRzdHJlYW0uY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuc1BvcnQuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuc1BvcnQgPSBOb25lCi0gICAgICAgICAgICBzZWxmLl9pc09wZW4gPSBGYWxzZQotCi0gICAgZGVmIG1ha2VEZXZpY2VOYW1lKHNlbGYsIHBvcnQpOgotICAgICAgICByZXR1cm4gZGV2aWNlKHBvcnQpCi0KLSAgICAjICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtCi0KLSAgICBkZWYgaW5XYWl0aW5nKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGN1cnJlbnRseSBpbiB0aGUgaW5wdXQgYnVmZmVyLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5zUG9ydDogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICByZXR1cm4gc2VsZi5faW5zdHJlYW0uYXZhaWxhYmxlKCkKLQotICAgIGRlZiByZWFkKHNlbGYsIHNpemU9MSk6Ci0gICAgICAgICIiIlJlYWQgc2l6ZSBieXRlcyBmcm9tIHRoZSBzZXJpYWwgcG9ydC4gSWYgYSB0aW1lb3V0IGlzIHNldCBpdCBtYXkKLSAgICAgICAgICAgcmV0dXJuIGxlc3MgY2hhcmFjdGVycyBhcyByZXF1ZXN0ZWQuIFdpdGggbm8gdGltZW91dCBpdCB3aWxsIGJsb2NrCi0gICAgICAgICAgIHVudGlsIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzIGlzIHJlYWQuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLnNQb3J0OiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHJlYWQgPSBieXRlYXJyYXkoKQotICAgICAgICBpZiBzaXplID4gMDoKLSAgICAgICAgICAgIHdoaWxlIGxlbihyZWFkKSA8IHNpemU6Ci0gICAgICAgICAgICAgICAgeCA9IHNlbGYuX2luc3RyZWFtLnJlYWQoKQotICAgICAgICAgICAgICAgIGlmIHggPT0gLTE6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudGltZW91dCA+PSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZWFkLmFwcGVuZCh4KQotICAgICAgICByZXR1cm4gYnl0ZXMocmVhZCkKLQotICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiT3V0cHV0IHRoZSBnaXZlbiBzdHJpbmcgb3ZlciB0aGUgc2VyaWFsIHBvcnQuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLnNQb3J0OiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5KSk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2V4cGVjdGVkICVzIG9yIGJ5dGVhcnJheSwgZ290ICVzJyAlIChieXRlcywgdHlwZShkYXRhKSkpCi0gICAgICAgIHNlbGYuX291dHN0cmVhbS53cml0ZShkYXRhKQotICAgICAgICByZXR1cm4gbGVuKGRhdGEpCi0KLSAgICBkZWYgZmx1c2hJbnB1dChzZWxmKToKLSAgICAgICAgIiIiQ2xlYXIgaW5wdXQgYnVmZmVyLCBkaXNjYXJkaW5nIGFsbCB0aGF0IGlzIGluIHRoZSBidWZmZXIuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLnNQb3J0OiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHNlbGYuX2luc3RyZWFtLnNraXAoc2VsZi5faW5zdHJlYW0uYXZhaWxhYmxlKCkpCi0KLSAgICBkZWYgZmx1c2hPdXRwdXQoc2VsZik6Ci0gICAgICAgICIiIkNsZWFyIG91dHB1dCBidWZmZXIsIGFib3J0aW5nIHRoZSBjdXJyZW50IG91dHB1dCBhbmQKLSAgICAgICAgZGlzY2FyZGluZyBhbGwgdGhhdCBpcyBpbiB0aGUgYnVmZmVyLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5zUG9ydDogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBzZWxmLl9vdXRzdHJlYW0uZmx1c2goKQotCi0gICAgZGVmIHNlbmRCcmVhayhzZWxmLCBkdXJhdGlvbj0wLjI1KToKLSAgICAgICAgIiIiU2VuZCBicmVhayBjb25kaXRpb24uIFRpbWVkLCByZXR1cm5zIHRvIGlkbGUgc3RhdGUgYWZ0ZXIgZ2l2ZW4gZHVyYXRpb24uIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLnNQb3J0OiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHNlbGYuc1BvcnQuc2VuZEJyZWFrKGR1cmF0aW9uKjEwMDAuMCkKLQotICAgIGRlZiBzZXRCcmVhayhzZWxmLCBsZXZlbD0xKToKLSAgICAgICAgIiIiU2V0IGJyZWFrOiBDb250cm9scyBUWEQuIFdoZW4gYWN0aXZlLCB0byB0cmFuc21pdHRpbmcgaXMgcG9zc2libGUuIiIiCi0gICAgICAgIGlmIHNlbGYuZmQgaXMgTm9uZTogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oIlRoZSBzZXRCcmVhayBmdW5jdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gamF2YS4iKQotCi0gICAgZGVmIHNldFJUUyhzZWxmLCBsZXZlbD0xKToKLSAgICAgICAgIiIiU2V0IHRlcm1pbmFsIHN0YXR1cyBsaW5lOiBSZXF1ZXN0IFRvIFNlbmQiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuc1BvcnQ6IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgc2VsZi5zUG9ydC5zZXRSVFMobGV2ZWwpCi0KLSAgICBkZWYgc2V0RFRSKHNlbGYsIGxldmVsPTEpOgotICAgICAgICAiIiJTZXQgdGVybWluYWwgc3RhdHVzIGxpbmU6IERhdGEgVGVybWluYWwgUmVhZHkiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuc1BvcnQ6IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgc2VsZi5zUG9ydC5zZXREVFIobGV2ZWwpCi0KLSAgICBkZWYgZ2V0Q1RTKHNlbGYpOgotICAgICAgICAiIiJSZWFkIHRlcm1pbmFsIHN0YXR1cyBsaW5lOiBDbGVhciBUbyBTZW5kIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLnNQb3J0OiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHNlbGYuc1BvcnQuaXNDVFMoKQotCi0gICAgZGVmIGdldERTUihzZWxmKToKLSAgICAgICAgIiIiUmVhZCB0ZXJtaW5hbCBzdGF0dXMgbGluZTogRGF0YSBTZXQgUmVhZHkiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuc1BvcnQ6IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgc2VsZi5zUG9ydC5pc0RTUigpCi0KLSAgICBkZWYgZ2V0Ukkoc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdGVybWluYWwgc3RhdHVzIGxpbmU6IFJpbmcgSW5kaWNhdG9yIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLnNQb3J0OiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHNlbGYuc1BvcnQuaXNSSSgpCi0KLSAgICBkZWYgZ2V0Q0Qoc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdGVybWluYWwgc3RhdHVzIGxpbmU6IENhcnJpZXIgRGV0ZWN0IiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLnNQb3J0OiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHNlbGYuc1BvcnQuaXNDRCgpCi0KLQotIyBhc3NlbWJsZSBTZXJpYWwgY2xhc3Mgd2l0aCB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBiYXNlCi0jIGZvciBmaWxlLWxpa2UgYmVoYXZpb3IuIGZvciBQeXRob24gMi42IGFuZCBuZXdlciwgdGhhdCBwcm92aWRlIHRoZSBuZXcgSS9PCi0jIGxpYnJhcnksIGRlcml2ZSBmcm9tIGlvLlJhd0lPQmFzZQotdHJ5OgotICAgIGltcG9ydCBpbwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgY2xhc3NpYyB2ZXJzaW9uIHdpdGggb3VyIG93biBmaWxlLWxpa2UgZW11bGF0aW9uCi0gICAgY2xhc3MgU2VyaWFsKEphdmFTZXJpYWwsIEZpbGVMaWtlKToKLSAgICAgICAgcGFzcwotZWxzZToKLSAgICAjIGlvIGxpYnJhcnkgcHJlc2VudAotICAgIGNsYXNzIFNlcmlhbChKYXZhU2VyaWFsLCBpby5SYXdJT0Jhc2UpOgotICAgICAgICBwYXNzCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBzID0gU2VyaWFsKDAsCi0gICAgICAgICBiYXVkcmF0ZT0xOTIwMCwgICAgICAgICMgYmF1ZHJhdGUKLSAgICAgICAgIGJ5dGVzaXplPUVJR0hUQklUUywgICAgIyBudW1iZXIgb2YgZGF0YWJpdHMKLSAgICAgICAgIHBhcml0eT1QQVJJVFlfRVZFTiwgICAgIyBlbmFibGUgcGFyaXR5IGNoZWNraW5nCi0gICAgICAgICBzdG9wYml0cz1TVE9QQklUU19PTkUsICMgbnVtYmVyIG9mIHN0b3BiaXRzCi0gICAgICAgICB0aW1lb3V0PTMsICAgICAgICAgICAgICMgc2V0IGEgdGltZW91dCB2YWx1ZSwgTm9uZSBmb3Igd2FpdGluZyBmb3JldmVyCi0gICAgICAgICB4b254b2ZmPTAsICAgICAgICAgICAgICMgZW5hYmxlIHNvZnR3YXJlIGZsb3cgY29udHJvbAotICAgICAgICAgcnRzY3RzPTAsICAgICAgICAgICAgICAjIGVuYWJsZSBSVFMvQ1RTIGZsb3cgY29udHJvbAotICAgICkKLSAgICBzLnNldFJUUygxKQotICAgIHMuc2V0RFRSKDEpCi0gICAgcy5mbHVzaElucHV0KCkKLSAgICBzLmZsdXNoT3V0cHV0KCkKLSAgICBzLndyaXRlKCdoZWxsbycpCi0gICAgc3lzLnN0ZGlvLndyaXRlKCclclxuJyAlIHMucmVhZCg1KSkKLSAgICBzeXMuc3RkaW8ud3JpdGUoJyVzXG4nICUgcy5pbldhaXRpbmcoKSkKLSAgICBkZWwgcwotCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC9zZXJpYWxwb3NpeC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC9zZXJpYWxwb3NpeC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYjliNGIyOC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvc2VyaWFscG9zaXgucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3MDMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIFB5dGhvbiBTZXJpYWwgUG9ydCBFeHRlbnNpb24gZm9yIFdpbjMyLCBMaW51eCwgQlNELCBKeXRob24KLSMgbW9kdWxlIGZvciBzZXJpYWwgSU8gZm9yIFBPU0lYIGNvbXBhdGlibGUgc3lzdGVtcywgbGlrZSBMaW51eAotIyBzZWUgX19pbml0X18ucHkKLSMKLSMgKEMpIDIwMDEtMjAxMCBDaHJpcyBMaWVjaHRpIDxjbGllY2h0aUBnbXgubmV0PgotIyB0aGlzIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzZWUgbGljZW5zZS50eHQKLSMKLSMgcGFydHMgYmFzZWQgb24gY29kZSBmcm9tIEdyYW50IEIuIEVkd2FyZHMgIDxncmFudGVAdmlzaS5jb20+OgotIyAgZnRwOi8vZnRwLnZpc2kuY29tL3VzZXJzL2dyYW50ZS9weXRob24vUG9zaXhTZXJpYWwucHkKLSMKLSMgcmVmZXJlbmNlczogaHR0cDovL3d3dy5lYXN5c3cuY29tL35taWtlL3NlcmlhbC9zZXJpYWwuaHRtbAotCi1pbXBvcnQgc3lzLCBvcywgZmNudGwsIHRlcm1pb3MsIHN0cnVjdCwgc2VsZWN0LCBlcnJubywgdGltZQotZnJvbSBzZXJpYWwuc2VyaWFsdXRpbCBpbXBvcnQgKgotCi0jIERvIGNoZWNrIHRoZSBQeXRob24gdmVyc2lvbiBhcyBzb21lIGNvbnN0YW50cyBoYXZlIG1vdmVkLgotaWYgKHN5cy5oZXh2ZXJzaW9uIDwgMHgwMjAxMDBmMCk6Ci0gICAgaW1wb3J0IFRFUk1JT1MKLWVsc2U6Ci0gICAgVEVSTUlPUyA9IHRlcm1pb3MKLQotaWYgKHN5cy5oZXh2ZXJzaW9uIDwgMHgwMjAyMDBmMCk6Ci0gICAgaW1wb3J0IEZDTlRMCi1lbHNlOgotICAgIEZDTlRMID0gZmNudGwKLQotIyB0cnkgdG8gZGV0ZWN0IHRoZSBPUyBzbyB0aGF0IGEgZGV2aWNlIGNhbiBiZSBzZWxlY3RlZC4uLgotIyB0aGlzIGNvZGUgYmxvY2sgc2hvdWxkIHN1cHBseSBhIGRldmljZSgpIGFuZCBzZXRfc3BlY2lhbF9iYXVkcmF0ZSgpIGZ1bmN0aW9uCi0jIGZvciB0aGUgcGxhdGZvcm0KLXBsYXQgPSBzeXMucGxhdGZvcm0ubG93ZXIoKQotCi1pZiAgIHBsYXRbOjVdID09ICdsaW51eCc6ICAgICMgTGludXggKGNvbmZpcm1lZCkKLQotICAgIGRlZiBkZXZpY2UocG9ydCk6Ci0gICAgICAgIHJldHVybiAnL2Rldi90dHlTJWQnICUgcG9ydAotCi0gICAgVENHRVRTMiA9IDB4ODAyQzU0MkEKLSAgICBUQ1NFVFMyID0gMHg0MDJDNTQyQgotICAgIEJPVEhFUiA9IDBvMDEwMDAwCi0KLSAgICBkZWYgc2V0X3NwZWNpYWxfYmF1ZHJhdGUocG9ydCwgYmF1ZHJhdGUpOgotICAgICAgICAjIHJpZ2h0IHNpemUgaXMgNDQgb24geDg2XzY0LCBhbGxvdyBmb3Igc29tZSBncm93dGgKLSAgICAgICAgaW1wb3J0IGFycmF5Ci0gICAgICAgIGJ1ZiA9IGFycmF5LmFycmF5KCdpJywgWzBdICogNjQpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBnZXQgc2VyaWFsX3N0cnVjdAotICAgICAgICAgICAgRkNOVEwuaW9jdGwocG9ydC5mZCwgVENHRVRTMiwgYnVmKQotICAgICAgICAgICAgIyBzZXQgY3VzdG9tIHNwZWVkCi0gICAgICAgICAgICBidWZbMl0gJj0gflRFUk1JT1MuQ0JBVUQKLSAgICAgICAgICAgIGJ1ZlsyXSB8PSBCT1RIRVIKLSAgICAgICAgICAgIGJ1Zls5XSA9IGJ1ZlsxMF0gPSBiYXVkcmF0ZQotCi0gICAgICAgICAgICAjIHNldCBzZXJpYWxfc3RydWN0Ci0gICAgICAgICAgICByZXMgPSBGQ05UTC5pb2N0bChwb3J0LmZkLCBUQ1NFVFMyLCBidWYpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRmFpbGVkIHRvIHNldCBjdXN0b20gYmF1ZCByYXRlICglcyk6ICVzJyAlIChiYXVkcmF0ZSwgZSkpCi0KLSAgICBiYXVkcmF0ZV9jb25zdGFudHMgPSB7Ci0gICAgICAgIDA6ICAgICAgIDAwMDAwMDAsICAjIGhhbmcgdXAKLSAgICAgICAgNTA6ICAgICAgMDAwMDAwMSwKLSAgICAgICAgNzU6ICAgICAgMDAwMDAwMiwKLSAgICAgICAgMTEwOiAgICAgMDAwMDAwMywKLSAgICAgICAgMTM0OiAgICAgMDAwMDAwNCwKLSAgICAgICAgMTUwOiAgICAgMDAwMDAwNSwKLSAgICAgICAgMjAwOiAgICAgMDAwMDAwNiwKLSAgICAgICAgMzAwOiAgICAgMDAwMDAwNywKLSAgICAgICAgNjAwOiAgICAgMDAwMDAxMCwKLSAgICAgICAgMTIwMDogICAgMDAwMDAxMSwKLSAgICAgICAgMTgwMDogICAgMDAwMDAxMiwKLSAgICAgICAgMjQwMDogICAgMDAwMDAxMywKLSAgICAgICAgNDgwMDogICAgMDAwMDAxNCwKLSAgICAgICAgOTYwMDogICAgMDAwMDAxNSwKLSAgICAgICAgMTkyMDA6ICAgMDAwMDAxNiwKLSAgICAgICAgMzg0MDA6ICAgMDAwMDAxNywKLSAgICAgICAgNTc2MDA6ICAgMDAxMDAwMSwKLSAgICAgICAgMTE1MjAwOiAgMDAxMDAwMiwKLSAgICAgICAgMjMwNDAwOiAgMDAxMDAwMywKLSAgICAgICAgNDYwODAwOiAgMDAxMDAwNCwKLSAgICAgICAgNTAwMDAwOiAgMDAxMDAwNSwKLSAgICAgICAgNTc2MDAwOiAgMDAxMDAwNiwKLSAgICAgICAgOTIxNjAwOiAgMDAxMDAwNywKLSAgICAgICAgMTAwMDAwMDogMDAxMDAxMCwKLSAgICAgICAgMTE1MjAwMDogMDAxMDAxMSwKLSAgICAgICAgMTUwMDAwMDogMDAxMDAxMiwKLSAgICAgICAgMjAwMDAwMDogMDAxMDAxMywKLSAgICAgICAgMjUwMDAwMDogMDAxMDAxNCwKLSAgICAgICAgMzAwMDAwMDogMDAxMDAxNSwKLSAgICAgICAgMzUwMDAwMDogMDAxMDAxNiwKLSAgICAgICAgNDAwMDAwMDogMDAxMDAxNwotICAgIH0KLQotZWxpZiBwbGF0ID09ICdjeWd3aW4nOiAgICAgICAjIGN5Z3dpbi93aW4zMiAoY29uZmlybWVkKQotCi0gICAgZGVmIGRldmljZShwb3J0KToKLSAgICAgICAgcmV0dXJuICcvZGV2L2NvbSVkJyAlIChwb3J0ICsgMSkKLQotICAgIGRlZiBzZXRfc3BlY2lhbF9iYXVkcmF0ZShwb3J0LCBiYXVkcmF0ZSk6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNvcnJ5IGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSBub24gc3RhbmRhcmQgYmF1ZCByYXRlIG9uIHRoaXMgcGxhdGZvcm0iKQotCi0gICAgYmF1ZHJhdGVfY29uc3RhbnRzID0gewotICAgICAgICAxMjgwMDA6IDB4MDEwMDMsCi0gICAgICAgIDI1NjAwMDogMHgwMTAwNSwKLSAgICAgICAgNTAwMDAwOiAweDAxMDA3LAotICAgICAgICA1NzYwMDA6IDB4MDEwMDgsCi0gICAgICAgIDkyMTYwMDogMHgwMTAwOSwKLSAgICAgICAgMTAwMDAwMDogMHgwMTAwYSwKLSAgICAgICAgMTE1MjAwMDogMHgwMTAwYiwKLSAgICAgICAgMTUwMDAwMDogMHgwMTAwYywKLSAgICAgICAgMjAwMDAwMDogMHgwMTAwZCwKLSAgICAgICAgMjUwMDAwMDogMHgwMTAwZSwKLSAgICAgICAgMzAwMDAwMDogMHgwMTAwZgotICAgIH0KLQotZWxpZiBwbGF0Wzo3XSA9PSAnb3BlbmJzZCc6ICAgICMgT3BlbkJTRAotCi0gICAgZGVmIGRldmljZShwb3J0KToKLSAgICAgICAgcmV0dXJuICcvZGV2L2N1YSUwMmQnICUgcG9ydAotCi0gICAgZGVmIHNldF9zcGVjaWFsX2JhdWRyYXRlKHBvcnQsIGJhdWRyYXRlKToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic29ycnkgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIG5vbiBzdGFuZGFyZCBiYXVkIHJhdGUgb24gdGhpcyBwbGF0Zm9ybSIpCi0KLSAgICBiYXVkcmF0ZV9jb25zdGFudHMgPSB7fQotCi1lbGlmIHBsYXRbOjNdID09ICdic2QnIG9yICBcCi0gICAgcGxhdFs6N10gPT0gJ2ZyZWVic2QnOgotCi0gICAgZGVmIGRldmljZShwb3J0KToKLSAgICAgICAgcmV0dXJuICcvZGV2L2N1YWQlZCcgJSBwb3J0Ci0KLSAgICBkZWYgc2V0X3NwZWNpYWxfYmF1ZHJhdGUocG9ydCwgYmF1ZHJhdGUpOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzb3JyeSBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgbm9uIHN0YW5kYXJkIGJhdWQgcmF0ZSBvbiB0aGlzIHBsYXRmb3JtIikKLQotICAgIGJhdWRyYXRlX2NvbnN0YW50cyA9IHt9Ci0KLWVsaWYgcGxhdFs6Nl0gPT0gJ2Rhcndpbic6ICAgIyBPUyBYCi0KLSAgICB2ZXJzaW9uID0gb3MudW5hbWUoKVsyXS5zcGxpdCgnLicpCi0gICAgIyBUaWdlciBvciBhYm92ZSBjYW4gc3VwcG9ydCBhcmJpdHJhcnkgc2VyaWFsIHNwZWVkcwotICAgIGlmIGludCh2ZXJzaW9uWzBdKSA+PSA4OgotICAgICAgICBkZWYgc2V0X3NwZWNpYWxfYmF1ZHJhdGUocG9ydCwgYmF1ZHJhdGUpOgotICAgICAgICAgICAgIyB1c2UgSU9LaXQtc3BlY2lmaWMgY2FsbCB0byBzZXQgdXAgaGlnaCBzcGVlZHMKLSAgICAgICAgICAgIGltcG9ydCBhcnJheSwgZmNudGwKLSAgICAgICAgICAgIGJ1ZiA9IGFycmF5LmFycmF5KCdpJywgW2JhdWRyYXRlXSkKLSAgICAgICAgICAgIElPU1NJT1NQRUVEID0gMHg4MDA0NTQwMiAjX0lPVygnVCcsIDIsIHNwZWVkX3QpCi0gICAgICAgICAgICBmY250bC5pb2N0bChwb3J0LmZkLCBJT1NTSU9TUEVFRCwgYnVmLCAxKQotICAgIGVsc2U6ICMgdmVyc2lvbiA8IDgKLSAgICAgICAgZGVmIHNldF9zcGVjaWFsX2JhdWRyYXRlKHBvcnQsIGJhdWRyYXRlKToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJhdWQgcmF0ZSBub3Qgc3VwcG9ydGVkIikKLQotICAgIGRlZiBkZXZpY2UocG9ydCk6Ci0gICAgICAgIHJldHVybiAnL2Rldi9jdWFkJWQnICUgcG9ydAotCi0gICAgYmF1ZHJhdGVfY29uc3RhbnRzID0ge30KLQotCi1lbGlmIHBsYXRbOjZdID09ICduZXRic2QnOiAgICMgTmV0QlNEIDEuNiB0ZXN0aW5nIGJ5IEVyawotCi0gICAgZGVmIGRldmljZShwb3J0KToKLSAgICAgICAgcmV0dXJuICcvZGV2L2R0eSUwMmQnICUgcG9ydAotCi0gICAgZGVmIHNldF9zcGVjaWFsX2JhdWRyYXRlKHBvcnQsIGJhdWRyYXRlKToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic29ycnkgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIG5vbiBzdGFuZGFyZCBiYXVkIHJhdGUgb24gdGhpcyBwbGF0Zm9ybSIpCi0KLSAgICBiYXVkcmF0ZV9jb25zdGFudHMgPSB7fQotCi1lbGlmIHBsYXRbOjRdID09ICdpcml4JzogICAgICMgSVJJWCAocGFydGlhbGx5IHRlc3RlZCkKLQotICAgIGRlZiBkZXZpY2UocG9ydCk6Ci0gICAgICAgIHJldHVybiAnL2Rldi90dHlmJWQnICUgKHBvcnQrMSkgI1hYWCBkaWZmZXJlbnQgZGV2aWNlIG5hbWVzIGRlcGVuZGluZyBvbiBmbG93IGNvbnRyb2wKLQotICAgIGRlZiBzZXRfc3BlY2lhbF9iYXVkcmF0ZShwb3J0LCBiYXVkcmF0ZSk6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNvcnJ5IGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSBub24gc3RhbmRhcmQgYmF1ZCByYXRlIG9uIHRoaXMgcGxhdGZvcm0iKQotCi0gICAgYmF1ZHJhdGVfY29uc3RhbnRzID0ge30KLQotZWxpZiBwbGF0WzoyXSA9PSAnaHAnOiAgICAgICAjIEhQLVVYIChub3QgdGVzdGVkKQotCi0gICAgZGVmIGRldmljZShwb3J0KToKLSAgICAgICAgcmV0dXJuICcvZGV2L3R0eSVkcDAnICUgKHBvcnQrMSkKLQotICAgIGRlZiBzZXRfc3BlY2lhbF9iYXVkcmF0ZShwb3J0LCBiYXVkcmF0ZSk6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNvcnJ5IGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSBub24gc3RhbmRhcmQgYmF1ZCByYXRlIG9uIHRoaXMgcGxhdGZvcm0iKQotCi0gICAgYmF1ZHJhdGVfY29uc3RhbnRzID0ge30KLQotZWxpZiBwbGF0Wzo1XSA9PSAnc3Vub3MnOiAgICAjIFNvbGFyaXMvU3VuT1MgKGNvbmZpcm1lZCkKLQotICAgIGRlZiBkZXZpY2UocG9ydCk6Ci0gICAgICAgIHJldHVybiAnL2Rldi90dHklYycgJSAob3JkKCdhJykrcG9ydCkKLQotICAgIGRlZiBzZXRfc3BlY2lhbF9iYXVkcmF0ZShwb3J0LCBiYXVkcmF0ZSk6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNvcnJ5IGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSBub24gc3RhbmRhcmQgYmF1ZCByYXRlIG9uIHRoaXMgcGxhdGZvcm0iKQotCi0gICAgYmF1ZHJhdGVfY29uc3RhbnRzID0ge30KLQotZWxpZiBwbGF0WzozXSA9PSAnYWl4JzogICAgICAjIEFJWAotCi0gICAgZGVmIGRldmljZShwb3J0KToKLSAgICAgICAgcmV0dXJuICcvZGV2L3R0eSVkJyAlIChwb3J0KQotCi0gICAgZGVmIHNldF9zcGVjaWFsX2JhdWRyYXRlKHBvcnQsIGJhdWRyYXRlKToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic29ycnkgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIG5vbiBzdGFuZGFyZCBiYXVkIHJhdGUgb24gdGhpcyBwbGF0Zm9ybSIpCi0KLSAgICBiYXVkcmF0ZV9jb25zdGFudHMgPSB7fQotCi1lbHNlOgotICAgICMgcGxhdGZvcm0gZGV0ZWN0aW9uIGhhcyBmYWlsZWQuLi4KLSAgICBzeXMuc3RkZXJyLndyaXRlKCIiIlwKLWRvbid0IGtub3cgaG93IHRvIG51bWJlciB0dHlzIG9uIHRoaXMgc3lzdGVtLgotISBVc2UgYW4gZXhwbGljaXQgcGF0aCAoZWcgL2Rldi90dHlTMSkgb3Igc2VuZCB0aGlzIGluZm9ybWF0aW9uIHRvCi0hIHRoZSBhdXRob3Igb2YgdGhpcyBtb2R1bGU6Ci0KLXN5cy5wbGF0Zm9ybSA9ICVyCi1vcy5uYW1lID0gJXIKLXNlcmlhbHBvc2l4LnB5IHZlcnNpb24gPSAlcwotCi1hbHNvIGFkZCB0aGUgZGV2aWNlIG5hbWUgb2YgdGhlIHNlcmlhbCBwb3J0IGFuZCB3aGVyZSB0aGUKLWNvdW50aW5nIHN0YXJ0cyBmb3IgdGhlIGZpcnN0IHNlcmlhbCBwb3J0LgotZS5nLiAnZmlyc3Qgc2VyaWFsIHBvcnQ6IC9kZXYvdHR5UzAnCi1hbmQgd2l0aCBhIGJpdCBsdWNrIHlvdSBjYW4gZ2V0IHRoaXMgbW9kdWxlIHJ1bm5pbmcuLi4KLSIiIiAlIChzeXMucGxhdGZvcm0sIG9zLm5hbWUsIFZFUlNJT04pKQotICAgICMgbm8gZXhjZXB0aW9uLCBqdXN0IGNvbnRpbnVlIHdpdGggYSBicmF2ZSBhdHRlbXB0IHRvIGJ1aWxkIGEgZGV2aWNlIG5hbWUKLSAgICAjIGV2ZW4gaWYgdGhlIGRldmljZSBuYW1lIGlzIG5vdCBjb3JyZWN0IGZvciB0aGUgcGxhdGZvcm0gaXQgaGFzIGNoYW5jZXMKLSAgICAjIHRvIHdvcmsgdXNpbmcgYSBzdHJpbmcgd2l0aCB0aGUgcmVhbCBkZXZpY2UgbmFtZSBhcyBwb3J0IHBhcmFtZXRlci4KLSAgICBkZWYgZGV2aWNlKHBvcnR1bSk6Ci0gICAgICAgIHJldHVybiAnL2Rldi90dHlTJWQnICUgcG9ydG51bQotICAgIGRlZiBzZXRfc3BlY2lhbF9iYXVkcmF0ZShwb3J0LCBiYXVkcmF0ZSk6Ci0gICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbigic29ycnkgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIG5vbiBzdGFuZGFyZCBiYXVkIHJhdGUgb24gdGhpcyBwbGF0Zm9ybSIpCi0gICAgYmF1ZHJhdGVfY29uc3RhbnRzID0ge30KLSAgICAjfiByYWlzZSBFeGNlcHRpb24sICJ0aGlzIG1vZHVsZSBkb2VzIG5vdCBydW4gb24gdGhpcyBwbGF0Zm9ybSwgc29ycnkuIgotCi0jIHdoYXRzIHVwIHdpdGggImFpeCIsICJiZW9zIiwgLi4uLgotIyB0aGV5IHNob3VsZCB3b3JrLCBqdXN0IG5lZWQgdG8ga25vdyB0aGUgZGV2aWNlIG5hbWVzLgotCi0KLSMgbG9hZCBzb21lIGNvbnN0YW50cyBmb3IgbGF0ZXIgdXNlLgotIyB0cnkgdG8gdXNlIHZhbHVlcyBmcm9tIFRFUk1JT1MsIHVzZSBkZWZhdWx0cyBmcm9tIGxpbnV4IG90aGVyd2lzZQotVElPQ01HRVQgID0gaGFzYXR0cihURVJNSU9TLCAnVElPQ01HRVQnKSBhbmQgVEVSTUlPUy5USU9DTUdFVCBvciAweDU0MTUKLVRJT0NNQklTICA9IGhhc2F0dHIoVEVSTUlPUywgJ1RJT0NNQklTJykgYW5kIFRFUk1JT1MuVElPQ01CSVMgb3IgMHg1NDE2Ci1USU9DTUJJQyAgPSBoYXNhdHRyKFRFUk1JT1MsICdUSU9DTUJJQycpIGFuZCBURVJNSU9TLlRJT0NNQklDIG9yIDB4NTQxNwotVElPQ01TRVQgID0gaGFzYXR0cihURVJNSU9TLCAnVElPQ01TRVQnKSBhbmQgVEVSTUlPUy5USU9DTVNFVCBvciAweDU0MTgKLQotI1RJT0NNX0xFID0gaGFzYXR0cihURVJNSU9TLCAnVElPQ01fTEUnKSBhbmQgVEVSTUlPUy5USU9DTV9MRSBvciAweDAwMQotVElPQ01fRFRSID0gaGFzYXR0cihURVJNSU9TLCAnVElPQ01fRFRSJykgYW5kIFRFUk1JT1MuVElPQ01fRFRSIG9yIDB4MDAyCi1USU9DTV9SVFMgPSBoYXNhdHRyKFRFUk1JT1MsICdUSU9DTV9SVFMnKSBhbmQgVEVSTUlPUy5USU9DTV9SVFMgb3IgMHgwMDQKLSNUSU9DTV9TVCA9IGhhc2F0dHIoVEVSTUlPUywgJ1RJT0NNX1NUJykgYW5kIFRFUk1JT1MuVElPQ01fU1Qgb3IgMHgwMDgKLSNUSU9DTV9TUiA9IGhhc2F0dHIoVEVSTUlPUywgJ1RJT0NNX1NSJykgYW5kIFRFUk1JT1MuVElPQ01fU1Igb3IgMHgwMTAKLQotVElPQ01fQ1RTID0gaGFzYXR0cihURVJNSU9TLCAnVElPQ01fQ1RTJykgYW5kIFRFUk1JT1MuVElPQ01fQ1RTIG9yIDB4MDIwCi1USU9DTV9DQVIgPSBoYXNhdHRyKFRFUk1JT1MsICdUSU9DTV9DQVInKSBhbmQgVEVSTUlPUy5USU9DTV9DQVIgb3IgMHgwNDAKLVRJT0NNX1JORyA9IGhhc2F0dHIoVEVSTUlPUywgJ1RJT0NNX1JORycpIGFuZCBURVJNSU9TLlRJT0NNX1JORyBvciAweDA4MAotVElPQ01fRFNSID0gaGFzYXR0cihURVJNSU9TLCAnVElPQ01fRFNSJykgYW5kIFRFUk1JT1MuVElPQ01fRFNSIG9yIDB4MTAwCi1USU9DTV9DRCAgPSBoYXNhdHRyKFRFUk1JT1MsICdUSU9DTV9DRCcpIGFuZCBURVJNSU9TLlRJT0NNX0NEIG9yIFRJT0NNX0NBUgotVElPQ01fUkkgID0gaGFzYXR0cihURVJNSU9TLCAnVElPQ01fUkknKSBhbmQgVEVSTUlPUy5USU9DTV9SSSBvciBUSU9DTV9STkcKLSNUSU9DTV9PVVQxID0gaGFzYXR0cihURVJNSU9TLCAnVElPQ01fT1VUMScpIGFuZCBURVJNSU9TLlRJT0NNX09VVDEgb3IgMHgyMDAwCi0jVElPQ01fT1VUMiA9IGhhc2F0dHIoVEVSTUlPUywgJ1RJT0NNX09VVDInKSBhbmQgVEVSTUlPUy5USU9DTV9PVVQyIG9yIDB4NDAwMAotaWYgaGFzYXR0cihURVJNSU9TLCAnVElPQ0lOUScpOgotICAgIFRJT0NJTlEgPSBURVJNSU9TLlRJT0NJTlEKLWVsc2U6Ci0gICAgVElPQ0lOUSA9IGhhc2F0dHIoVEVSTUlPUywgJ0ZJT05SRUFEJykgYW5kIFRFUk1JT1MuRklPTlJFQUQgb3IgMHg1NDFCCi1USU9DT1VUUSAgID0gaGFzYXR0cihURVJNSU9TLCAnVElPQ09VVFEnKSBhbmQgVEVSTUlPUy5USU9DT1VUUSBvciAweDU0MTEKLQotVElPQ01femVyb19zdHIgPSBzdHJ1Y3QucGFjaygnSScsIDApCi1USU9DTV9SVFNfc3RyID0gc3RydWN0LnBhY2soJ0knLCBUSU9DTV9SVFMpCi1USU9DTV9EVFJfc3RyID0gc3RydWN0LnBhY2soJ0knLCBUSU9DTV9EVFIpCi0KLVRJT0NTQlJLICA9IGhhc2F0dHIoVEVSTUlPUywgJ1RJT0NTQlJLJykgYW5kIFRFUk1JT1MuVElPQ1NCUksgb3IgMHg1NDI3Ci1USU9DQ0JSSyAgPSBoYXNhdHRyKFRFUk1JT1MsICdUSU9DQ0JSSycpIGFuZCBURVJNSU9TLlRJT0NDQlJLIG9yIDB4NTQyOAotCi0KLWNsYXNzIFBvc2l4U2VyaWFsKFNlcmlhbEJhc2UpOgotICAgICIiIlNlcmlhbCBwb3J0IGNsYXNzIFBPU0lYIGltcGxlbWVudGF0aW9uLiBTZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uIGlzIAotICAgIGRvbmUgd2l0aCB0ZXJtaW9zIGFuZCBmY250bC4gUnVucyBvbiBMaW51eCBhbmQgbWFueSBvdGhlciBVbip4IGxpa2UKLSAgICBzeXN0ZW1zLiIiIgotCi0gICAgZGVmIG9wZW4oc2VsZik6Ci0gICAgICAgICIiIk9wZW4gcG9ydCB3aXRoIGN1cnJlbnQgc2V0dGluZ3MuIFRoaXMgbWF5IHRocm93IGEgU2VyaWFsRXhjZXB0aW9uCi0gICAgICAgICAgIGlmIHRoZSBwb3J0IGNhbm5vdCBiZSBvcGVuZWQuIiIiCi0gICAgICAgIGlmIHNlbGYuX3BvcnQgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbigiUG9ydCBtdXN0IGJlIGNvbmZpZ3VyZWQgYmVmb3JlIGl0IGNhbiBiZSB1c2VkLiIpCi0gICAgICAgIGlmIHNlbGYuX2lzT3BlbjoKLSAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbigiUG9ydCBpcyBhbHJlYWR5IG9wZW4uIikKLSAgICAgICAgc2VsZi5mZCA9IE5vbmUKLSAgICAgICAgIyBvcGVuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuZmQgPSBvcy5vcGVuKHNlbGYucG9ydHN0ciwgb3MuT19SRFdSfG9zLk9fTk9DVFRZfG9zLk9fTk9OQkxPQ0spCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6Ci0gICAgICAgICAgICBzZWxmLmZkID0gTm9uZQotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKG1zZy5lcnJubywgImNvdWxkIG5vdCBvcGVuIHBvcnQgJXM6ICVzIiAlIChzZWxmLl9wb3J0LCBtc2cpKQotICAgICAgICAjfiBmY250bC5mY250bChzZWxmLmZkLCBGQ05UTC5GX1NFVEZMLCAwKSAgIyBzZXQgYmxvY2tpbmcKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9yZWNvbmZpZ3VyZVBvcnQoKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5mZCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAjIGlnbm9yZSBhbnkgZXhjZXB0aW9uIHdoZW4gY2xvc2luZyB0aGUgcG9ydAotICAgICAgICAgICAgICAgICMgYWxzbyB0byBrZWVwIG9yaWdpbmFsIGV4Y2VwdGlvbiB0aGF0IGhhcHBlbmVkIHdoZW4gc2V0dGluZyB1cAotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHNlbGYuZmQgPSBOb25lCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5faXNPcGVuID0gVHJ1ZQotICAgICAgICBzZWxmLmZsdXNoSW5wdXQoKQotCi0KLSAgICBkZWYgX3JlY29uZmlndXJlUG9ydChzZWxmKToKLSAgICAgICAgIiIiU2V0IGNvbW11bmljYXRpb24gcGFyYW1ldGVycyBvbiBvcGVuZWQgcG9ydC4iIiIKLSAgICAgICAgaWYgc2VsZi5mZCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJDYW4gb25seSBvcGVyYXRlIG9uIGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yIikKLSAgICAgICAgY3VzdG9tX2JhdWQgPSBOb25lCi0KLSAgICAgICAgdm1pbiA9IHZ0aW1lID0gMCAgICAgICAgICAgICAgICAjIHRpbWVvdXQgaXMgZG9uZSB2aWEgc2VsZWN0Ci0gICAgICAgIGlmIHNlbGYuX2ludGVyQ2hhclRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB2bWluID0gMQotICAgICAgICAgICAgdnRpbWUgPSBpbnQoc2VsZi5faW50ZXJDaGFyVGltZW91dCAqIDEwKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcmlnX2F0dHIgPSB0ZXJtaW9zLnRjZ2V0YXR0cihzZWxmLmZkKQotICAgICAgICAgICAgaWZsYWcsIG9mbGFnLCBjZmxhZywgbGZsYWcsIGlzcGVlZCwgb3NwZWVkLCBjYyA9IG9yaWdfYXR0cgotICAgICAgICBleGNlcHQgdGVybWlvcy5lcnJvciwgbXNnOiAgICAgICMgaWYgYSBwb3J0IGlzIG5vbmV4aXN0ZW50IGJ1dCBoYXMgYSAvZGV2IGZpbGUsIGl0J2xsIGZhaWwgaGVyZQotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJDb3VsZCBub3QgY29uZmlndXJlIHBvcnQ6ICVzIiAlIG1zZykKLSAgICAgICAgIyBzZXQgdXAgcmF3IG1vZGUgLyBubyBlY2hvIC8gYmluYXJ5Ci0gICAgICAgIGNmbGFnIHw9ICAoVEVSTUlPUy5DTE9DQUx8VEVSTUlPUy5DUkVBRCkKLSAgICAgICAgbGZsYWcgJj0gfihURVJNSU9TLklDQU5PTnxURVJNSU9TLkVDSE98VEVSTUlPUy5FQ0hPRXxURVJNSU9TLkVDSE9LfFRFUk1JT1MuRUNIT05MfAotICAgICAgICAgICAgICAgICAgICAgVEVSTUlPUy5JU0lHfFRFUk1JT1MuSUVYVEVOKSAjfFRFUk1JT1MuRUNIT1BSVAotICAgICAgICBmb3IgZmxhZyBpbiAoJ0VDSE9DVEwnLCAnRUNIT0tFJyk6ICMgbmV0YnNkIHdvcmthcm91bmQgZm9yIEVyawotICAgICAgICAgICAgaWYgaGFzYXR0cihURVJNSU9TLCBmbGFnKToKLSAgICAgICAgICAgICAgICBsZmxhZyAmPSB+Z2V0YXR0cihURVJNSU9TLCBmbGFnKQotCi0gICAgICAgIG9mbGFnICY9IH4oVEVSTUlPUy5PUE9TVCkKLSAgICAgICAgaWZsYWcgJj0gfihURVJNSU9TLklOTENSfFRFUk1JT1MuSUdOQ1J8VEVSTUlPUy5JQ1JOTHxURVJNSU9TLklHTkJSSykKLSAgICAgICAgaWYgaGFzYXR0cihURVJNSU9TLCAnSVVDTEMnKToKLSAgICAgICAgICAgIGlmbGFnICY9IH5URVJNSU9TLklVQ0xDCi0gICAgICAgIGlmIGhhc2F0dHIoVEVSTUlPUywgJ1BBUk1SSycpOgotICAgICAgICAgICAgaWZsYWcgJj0gflRFUk1JT1MuUEFSTVJLCi0KLSAgICAgICAgIyBzZXR1cCBiYXVkIHJhdGUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaXNwZWVkID0gb3NwZWVkID0gZ2V0YXR0cihURVJNSU9TLCAnQiVzJyAlIChzZWxmLl9iYXVkcmF0ZSkpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpc3BlZWQgPSBvc3BlZWQgPSBiYXVkcmF0ZV9jb25zdGFudHNbc2VsZi5fYmF1ZHJhdGVdCi0gICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgI34gcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBiYXVkIHJhdGU6ICVyJyAlIHNlbGYuX2JhdWRyYXRlKQotICAgICAgICAgICAgICAgICMgbWF5IG5lZWQgY3VzdG9tIGJhdWQgcmF0ZSwgaXQgaXNuJ3QgaW4gb3VyIGxpc3QuCi0gICAgICAgICAgICAgICAgaXNwZWVkID0gb3NwZWVkID0gZ2V0YXR0cihURVJNSU9TLCAnQjM4NDAwJykKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGN1c3RvbV9iYXVkID0gaW50KHNlbGYuX2JhdWRyYXRlKSAjIHN0b3JlIGZvciBsYXRlcgotICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGJhdWQgcmF0ZTogJXInICUgc2VsZi5fYmF1ZHJhdGUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaWYgY3VzdG9tX2JhdWQgPCAwOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBiYXVkIHJhdGU6ICVyJyAlIHNlbGYuX2JhdWRyYXRlKQotCi0gICAgICAgICMgc2V0dXAgY2hhciBsZW4KLSAgICAgICAgY2ZsYWcgJj0gflRFUk1JT1MuQ1NJWkUKLSAgICAgICAgaWYgc2VsZi5fYnl0ZXNpemUgPT0gODoKLSAgICAgICAgICAgIGNmbGFnIHw9IFRFUk1JT1MuQ1M4Ci0gICAgICAgIGVsaWYgc2VsZi5fYnl0ZXNpemUgPT0gNzoKLSAgICAgICAgICAgIGNmbGFnIHw9IFRFUk1JT1MuQ1M3Ci0gICAgICAgIGVsaWYgc2VsZi5fYnl0ZXNpemUgPT0gNjoKLSAgICAgICAgICAgIGNmbGFnIHw9IFRFUk1JT1MuQ1M2Ci0gICAgICAgIGVsaWYgc2VsZi5fYnl0ZXNpemUgPT0gNToKLSAgICAgICAgICAgIGNmbGFnIHw9IFRFUk1JT1MuQ1M1Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGNoYXIgbGVuOiAlcicgJSBzZWxmLl9ieXRlc2l6ZSkKLSAgICAgICAgIyBzZXR1cCBzdG9wYml0cwotICAgICAgICBpZiBzZWxmLl9zdG9wYml0cyA9PSBTVE9QQklUU19PTkU6Ci0gICAgICAgICAgICBjZmxhZyAmPSB+KFRFUk1JT1MuQ1NUT1BCKQotICAgICAgICBlbGlmIHNlbGYuX3N0b3BiaXRzID09IFNUT1BCSVRTX09ORV9QT0lOVF9GSVZFOgotICAgICAgICAgICAgY2ZsYWcgfD0gIChURVJNSU9TLkNTVE9QQikgICMgWFhYIHNhbWUgYXMgVFdPLi4gdGhlcmUgaXMgbm8gUE9TSVggc3VwcG9ydCBmb3IgMS41Ci0gICAgICAgIGVsaWYgc2VsZi5fc3RvcGJpdHMgPT0gU1RPUEJJVFNfVFdPOgotICAgICAgICAgICAgY2ZsYWcgfD0gIChURVJNSU9TLkNTVE9QQikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgc3RvcCBiaXQgc3BlY2lmaWNhdGlvbjogJXInICUgc2VsZi5fc3RvcGJpdHMpCi0gICAgICAgICMgc2V0dXAgcGFyaXR5Ci0gICAgICAgIGlmbGFnICY9IH4oVEVSTUlPUy5JTlBDS3xURVJNSU9TLklTVFJJUCkKLSAgICAgICAgaWYgc2VsZi5fcGFyaXR5ID09IFBBUklUWV9OT05FOgotICAgICAgICAgICAgY2ZsYWcgJj0gfihURVJNSU9TLlBBUkVOQnxURVJNSU9TLlBBUk9ERCkKLSAgICAgICAgZWxpZiBzZWxmLl9wYXJpdHkgPT0gUEFSSVRZX0VWRU46Ci0gICAgICAgICAgICBjZmxhZyAmPSB+KFRFUk1JT1MuUEFST0REKQotICAgICAgICAgICAgY2ZsYWcgfD0gIChURVJNSU9TLlBBUkVOQikKLSAgICAgICAgZWxpZiBzZWxmLl9wYXJpdHkgPT0gUEFSSVRZX09ERDoKLSAgICAgICAgICAgIGNmbGFnIHw9ICAoVEVSTUlPUy5QQVJFTkJ8VEVSTUlPUy5QQVJPREQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHBhcml0eTogJXInICUgc2VsZi5fcGFyaXR5KQotICAgICAgICAjIHNldHVwIGZsb3cgY29udHJvbAotICAgICAgICAjIHhvbnhvZmYKLSAgICAgICAgaWYgaGFzYXR0cihURVJNSU9TLCAnSVhBTlknKToKLSAgICAgICAgICAgIGlmIHNlbGYuX3hvbnhvZmY6Ci0gICAgICAgICAgICAgICAgaWZsYWcgfD0gIChURVJNSU9TLklYT058VEVSTUlPUy5JWE9GRikgI3xURVJNSU9TLklYQU5ZKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZmxhZyAmPSB+KFRFUk1JT1MuSVhPTnxURVJNSU9TLklYT0ZGfFRFUk1JT1MuSVhBTlkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBzZWxmLl94b254b2ZmOgotICAgICAgICAgICAgICAgIGlmbGFnIHw9ICAoVEVSTUlPUy5JWE9OfFRFUk1JT1MuSVhPRkYpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmbGFnICY9IH4oVEVSTUlPUy5JWE9OfFRFUk1JT1MuSVhPRkYpCi0gICAgICAgICMgcnRzY3RzCi0gICAgICAgIGlmIGhhc2F0dHIoVEVSTUlPUywgJ0NSVFNDVFMnKToKLSAgICAgICAgICAgIGlmIHNlbGYuX3J0c2N0czoKLSAgICAgICAgICAgICAgICBjZmxhZyB8PSAgKFRFUk1JT1MuQ1JUU0NUUykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY2ZsYWcgJj0gfihURVJNSU9TLkNSVFNDVFMpCi0gICAgICAgIGVsaWYgaGFzYXR0cihURVJNSU9TLCAnQ05FV19SVFNDVFMnKTogICAjIHRyeSBpdCB3aXRoIGFsdGVybmF0ZSBjb25zdGFudCBuYW1lCi0gICAgICAgICAgICBpZiBzZWxmLl9ydHNjdHM6Ci0gICAgICAgICAgICAgICAgY2ZsYWcgfD0gIChURVJNSU9TLkNORVdfUlRTQ1RTKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjZmxhZyAmPSB+KFRFUk1JT1MuQ05FV19SVFNDVFMpCi0gICAgICAgICMgWFhYIHNob3VsZCB0aGVyZSBiZSBhIHdhcm5pbmcgaWYgc2V0dGluZyB1cCBydHNjdHMgKGFuZCB4b254b2ZmIGV0YykgZmFpbHM/PwotCi0gICAgICAgICMgYnVmZmVyCi0gICAgICAgICMgdm1pbiAibWluaW1hbCBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSByZWFkLiA9IGZvciBub24gYmxvY2tpbmciCi0gICAgICAgIGlmIHZtaW4gPCAwIG9yIHZtaW4gPiAyNTU6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHZtaW46ICVyICcgJSB2bWluKQotICAgICAgICBjY1tURVJNSU9TLlZNSU5dID0gdm1pbgotICAgICAgICAjIHZ0aW1lCi0gICAgICAgIGlmIHZ0aW1lIDwgMCBvciB2dGltZSA+IDI1NToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgdnRpbWU6ICVyJyAlIHZ0aW1lKQotICAgICAgICBjY1tURVJNSU9TLlZUSU1FXSA9IHZ0aW1lCi0gICAgICAgICMgYWN0aXZhdGUgc2V0dGluZ3MKLSAgICAgICAgaWYgW2lmbGFnLCBvZmxhZywgY2ZsYWcsIGxmbGFnLCBpc3BlZWQsIG9zcGVlZCwgY2NdICE9IG9yaWdfYXR0cjoKLSAgICAgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKHNlbGYuZmQsIFRFUk1JT1MuVENTQU5PVywgW2lmbGFnLCBvZmxhZywgY2ZsYWcsIGxmbGFnLCBpc3BlZWQsIG9zcGVlZCwgY2NdKQotCi0gICAgICAgICMgYXBwbHkgY3VzdG9tIGJhdWQgcmF0ZSwgaWYgYW55Ci0gICAgICAgIGlmIGN1c3RvbV9iYXVkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2V0X3NwZWNpYWxfYmF1ZHJhdGUoc2VsZiwgY3VzdG9tX2JhdWQpCi0KLSAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgICIiIkNsb3NlIHBvcnQiIiIKLSAgICAgICAgaWYgc2VsZi5faXNPcGVuOgotICAgICAgICAgICAgaWYgc2VsZi5mZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBvcy5jbG9zZShzZWxmLmZkKQotICAgICAgICAgICAgICAgIHNlbGYuZmQgPSBOb25lCi0gICAgICAgICAgICBzZWxmLl9pc09wZW4gPSBGYWxzZQotCi0gICAgZGVmIG1ha2VEZXZpY2VOYW1lKHNlbGYsIHBvcnQpOgotICAgICAgICByZXR1cm4gZGV2aWNlKHBvcnQpCi0KLSAgICAjICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtCi0KLSAgICBkZWYgaW5XYWl0aW5nKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGN1cnJlbnRseSBpbiB0aGUgaW5wdXQgYnVmZmVyLiIiIgotICAgICAgICAjfiBzID0gZmNudGwuaW9jdGwoc2VsZi5mZCwgVEVSTUlPUy5GSU9OUkVBRCwgVElPQ01femVyb19zdHIpCi0gICAgICAgIHMgPSBmY250bC5pb2N0bChzZWxmLmZkLCBUSU9DSU5RLCBUSU9DTV96ZXJvX3N0cikKLSAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJ0knLHMpWzBdCi0KLSAgICAjIHNlbGVjdCBiYXNlZCBpbXBsZW1lbnRhdGlvbiwgcHJvdmVkIHRvIHdvcmsgb24gbWFueSBzeXN0ZW1zCi0gICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0xKToKLSAgICAgICAgIiIiUmVhZCBzaXplIGJ5dGVzIGZyb20gdGhlIHNlcmlhbCBwb3J0LiBJZiBhIHRpbWVvdXQgaXMgc2V0IGl0IG1heQotICAgICAgICAgICByZXR1cm4gbGVzcyBjaGFyYWN0ZXJzIGFzIHJlcXVlc3RlZC4gV2l0aCBubyB0aW1lb3V0IGl0IHdpbGwgYmxvY2sKLSAgICAgICAgICAgdW50aWwgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMgaXMgcmVhZC4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICByZWFkID0gYnl0ZWFycmF5KCkKLSAgICAgICAgd2hpbGUgbGVuKHJlYWQpIDwgc2l6ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZWFkeSxfLF8gPSBzZWxlY3Quc2VsZWN0KFtzZWxmLmZkXSxbXSxbXSwgc2VsZi5fdGltZW91dCkKLSAgICAgICAgICAgICAgICAjIElmIHNlbGVjdCB3YXMgdXNlZCB3aXRoIGEgdGltZW91dCwgYW5kIHRoZSB0aW1lb3V0IG9jY3VycywgaXQKLSAgICAgICAgICAgICAgICAjIHJldHVybnMgd2l0aCBlbXB0eSBsaXN0cyAtPiB0aHVzIGFib3J0IHJlYWQgb3BlcmF0aW9uLgotICAgICAgICAgICAgICAgICMgRm9yIHRpbWVvdXQgPT0gMCAobm9uLWJsb2NraW5nIG9wZXJhdGlvbikgYWxzbyBhYm9ydCB3aGVuIHRoZXJlCi0gICAgICAgICAgICAgICAgIyBpcyBub3RoaW5nIHRvIHJlYWQuCi0gICAgICAgICAgICAgICAgaWYgbm90IHJlYWR5OgotICAgICAgICAgICAgICAgICAgICBicmVhayAgICMgdGltZW91dAotICAgICAgICAgICAgICAgIGJ1ZiA9IG9zLnJlYWQoc2VsZi5mZCwgc2l6ZS1sZW4ocmVhZCkpCi0gICAgICAgICAgICAgICAgIyByZWFkIHNob3VsZCBhbHdheXMgcmV0dXJuIHNvbWUgZGF0YSBhcyBzZWxlY3QgcmVwb3J0ZWQgaXQgd2FzCi0gICAgICAgICAgICAgICAgIyByZWFkeSB0byByZWFkIHdoZW4gd2UgZ2V0IHRvIHRoaXMgcG9pbnQuCi0gICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjoKLSAgICAgICAgICAgICAgICAgICAgIyBEaXNjb25uZWN0ZWQgZGV2aWNlcywgYXQgbGVhc3Qgb24gTGludXgsIHNob3cgdGhlCi0gICAgICAgICAgICAgICAgICAgICMgYmVoYXZpb3IgdGhhdCB0aGV5IGFyZSBhbHdheXMgcmVhZHkgdG8gcmVhZCBpbW1lZGlhdGVseQotICAgICAgICAgICAgICAgICAgICAjIGJ1dCByZWFkaW5nIHJldHVybnMgbm90aGluZy4KLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCdkZXZpY2UgcmVwb3J0cyByZWFkaW5lc3MgdG8gcmVhZCBidXQgcmV0dXJuZWQgbm8gZGF0YSAoZGV2aWNlIGRpc2Nvbm5lY3RlZCBvciBtdWx0aXBsZSBhY2Nlc3Mgb24gcG9ydD8pJykKLSAgICAgICAgICAgICAgICByZWFkLmV4dGVuZChidWYpCi0gICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yLCBlOgotICAgICAgICAgICAgICAgICMgaWdub3JlIEVBR0FJTiBlcnJvcnMuIGFsbCBvdGhlciBlcnJvcnMgYXJlIHNob3duCi0gICAgICAgICAgICAgICAgIyBzZWUgYWxzbyBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTMxNTEvI3NlbGVjdAotICAgICAgICAgICAgICAgIGlmIGVbMF0gIT0gZXJybm8uRUFHQUlOOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oJ3JlYWQgZmFpbGVkOiAlcycgJSAoZSwpKQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgIyBpZ25vcmUgRUFHQUlOIGVycm9ycy4gYWxsIG90aGVyIGVycm9ycyBhcmUgc2hvd24KLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVBR0FJTjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCdyZWFkIGZhaWxlZDogJXMnICUgKGUsKSkKLSAgICAgICAgcmV0dXJuIGJ5dGVzKHJlYWQpCi0KLSAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6Ci0gICAgICAgICIiIk91dHB1dCB0aGUgZ2l2ZW4gc3RyaW5nIG92ZXIgdGhlIHNlcmlhbCBwb3J0LiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGQgPSB0b19ieXRlcyhkYXRhKQotICAgICAgICB0eF9sZW4gPSBsZW4oZCkKLSAgICAgICAgaWYgc2VsZi5fd3JpdGVUaW1lb3V0IGlzIG5vdCBOb25lIGFuZCBzZWxmLl93cml0ZVRpbWVvdXQgPiAwOgotICAgICAgICAgICAgdGltZW91dCA9IHRpbWUudGltZSgpICsgc2VsZi5fd3JpdGVUaW1lb3V0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0aW1lb3V0ID0gTm9uZQotICAgICAgICB3aGlsZSB0eF9sZW4gPiAwOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG4gPSBvcy53cml0ZShzZWxmLmZkLCBkKQotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgICMgd2hlbiB0aW1lb3V0IGlzIHNldCwgdXNlIHNlbGVjdCB0byB3YWl0IGZvciBiZWluZyByZWFkeQotICAgICAgICAgICAgICAgICAgICAjIHdpdGggdGhlIHRpbWUgbGVmdCBhcyB0aW1lb3V0Ci0gICAgICAgICAgICAgICAgICAgIHRpbWVsZWZ0ID0gdGltZW91dCAtIHRpbWUudGltZSgpCi0gICAgICAgICAgICAgICAgICAgIGlmIHRpbWVsZWZ0IDwgMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHdyaXRlVGltZW91dEVycm9yCi0gICAgICAgICAgICAgICAgICAgIF8sIHJlYWR5LCBfID0gc2VsZWN0LnNlbGVjdChbXSwgW3NlbGYuZmRdLCBbXSwgdGltZWxlZnQpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHdyaXRlVGltZW91dEVycm9yCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyB3YWl0IGZvciB3cml0ZSBvcGVyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgXywgcmVhZHksIF8gPSBzZWxlY3Quc2VsZWN0KFtdLCBbc2VsZi5mZF0sIFtdLCBOb25lKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVhZHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oJ3dyaXRlIGZhaWxlZCAoc2VsZWN0KScpCi0gICAgICAgICAgICAgICAgZCA9IGRbbjpdCi0gICAgICAgICAgICAgICAgdHhfbGVuIC09IG4KLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCB2OgotICAgICAgICAgICAgICAgIGlmIHYuZXJybm8gIT0gZXJybm8uRUFHQUlOOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oJ3dyaXRlIGZhaWxlZDogJXMnICUgKHYsKSkKLSAgICAgICAgcmV0dXJuIGxlbihkYXRhKQotCi0gICAgZGVmIGZsdXNoKHNlbGYpOgotICAgICAgICAiIiJGbHVzaCBvZiBmaWxlIGxpa2Ugb2JqZWN0cy4gSW4gdGhpcyBjYXNlLCB3YWl0IHVudGlsIGFsbCBkYXRhCi0gICAgICAgICAgIGlzIHdyaXR0ZW4uIiIiCi0gICAgICAgIHNlbGYuZHJhaW5PdXRwdXQoKQotCi0gICAgZGVmIGZsdXNoSW5wdXQoc2VsZik6Ci0gICAgICAgICIiIkNsZWFyIGlucHV0IGJ1ZmZlciwgZGlzY2FyZGluZyBhbGwgdGhhdCBpcyBpbiB0aGUgYnVmZmVyLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHRlcm1pb3MudGNmbHVzaChzZWxmLmZkLCBURVJNSU9TLlRDSUZMVVNIKQotCi0gICAgZGVmIGZsdXNoT3V0cHV0KHNlbGYpOgotICAgICAgICAiIiJDbGVhciBvdXRwdXQgYnVmZmVyLCBhYm9ydGluZyB0aGUgY3VycmVudCBvdXRwdXQgYW5kCi0gICAgICAgIGRpc2NhcmRpbmcgYWxsIHRoYXQgaXMgaW4gdGhlIGJ1ZmZlci4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICB0ZXJtaW9zLnRjZmx1c2goc2VsZi5mZCwgVEVSTUlPUy5UQ09GTFVTSCkKLQotICAgIGRlZiBzZW5kQnJlYWsoc2VsZiwgZHVyYXRpb249MC4yNSk6Ci0gICAgICAgICIiIlNlbmQgYnJlYWsgY29uZGl0aW9uLiBUaW1lZCwgcmV0dXJucyB0byBpZGxlIHN0YXRlIGFmdGVyIGdpdmVuIGR1cmF0aW9uLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHRlcm1pb3MudGNzZW5kYnJlYWsoc2VsZi5mZCwgaW50KGR1cmF0aW9uLzAuMjUpKQotCi0gICAgZGVmIHNldEJyZWFrKHNlbGYsIGxldmVsPTEpOgotICAgICAgICAiIiJTZXQgYnJlYWs6IENvbnRyb2xzIFRYRC4gV2hlbiBhY3RpdmUsIG5vIHRyYW5zbWl0dGluZyBpcyBwb3NzaWJsZS4iIiIKLSAgICAgICAgaWYgc2VsZi5mZCBpcyBOb25lOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGlmIGxldmVsOgotICAgICAgICAgICAgZmNudGwuaW9jdGwoc2VsZi5mZCwgVElPQ1NCUkspCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmY250bC5pb2N0bChzZWxmLmZkLCBUSU9DQ0JSSykKLQotICAgIGRlZiBzZXRSVFMoc2VsZiwgbGV2ZWw9MSk6Ci0gICAgICAgICIiIlNldCB0ZXJtaW5hbCBzdGF0dXMgbGluZTogUmVxdWVzdCBUbyBTZW5kIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgaWYgbGV2ZWw6Ci0gICAgICAgICAgICBmY250bC5pb2N0bChzZWxmLmZkLCBUSU9DTUJJUywgVElPQ01fUlRTX3N0cikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZjbnRsLmlvY3RsKHNlbGYuZmQsIFRJT0NNQklDLCBUSU9DTV9SVFNfc3RyKQotCi0gICAgZGVmIHNldERUUihzZWxmLCBsZXZlbD0xKToKLSAgICAgICAgIiIiU2V0IHRlcm1pbmFsIHN0YXR1cyBsaW5lOiBEYXRhIFRlcm1pbmFsIFJlYWR5IiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgaWYgbGV2ZWw6Ci0gICAgICAgICAgICBmY250bC5pb2N0bChzZWxmLmZkLCBUSU9DTUJJUywgVElPQ01fRFRSX3N0cikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZjbnRsLmlvY3RsKHNlbGYuZmQsIFRJT0NNQklDLCBUSU9DTV9EVFJfc3RyKQotCi0gICAgZGVmIGdldENUUyhzZWxmKToKLSAgICAgICAgIiIiUmVhZCB0ZXJtaW5hbCBzdGF0dXMgbGluZTogQ2xlYXIgVG8gU2VuZCIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHMgPSBmY250bC5pb2N0bChzZWxmLmZkLCBUSU9DTUdFVCwgVElPQ01femVyb19zdHIpCi0gICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCdJJyxzKVswXSAmIFRJT0NNX0NUUyAhPSAwCi0KLSAgICBkZWYgZ2V0RFNSKHNlbGYpOgotICAgICAgICAiIiJSZWFkIHRlcm1pbmFsIHN0YXR1cyBsaW5lOiBEYXRhIFNldCBSZWFkeSIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHMgPSBmY250bC5pb2N0bChzZWxmLmZkLCBUSU9DTUdFVCwgVElPQ01femVyb19zdHIpCi0gICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCdJJyxzKVswXSAmIFRJT0NNX0RTUiAhPSAwCi0KLSAgICBkZWYgZ2V0Ukkoc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdGVybWluYWwgc3RhdHVzIGxpbmU6IFJpbmcgSW5kaWNhdG9yIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgcyA9IGZjbnRsLmlvY3RsKHNlbGYuZmQsIFRJT0NNR0VULCBUSU9DTV96ZXJvX3N0cikKLSAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJ0knLHMpWzBdICYgVElPQ01fUkkgIT0gMAotCi0gICAgZGVmIGdldENEKHNlbGYpOgotICAgICAgICAiIiJSZWFkIHRlcm1pbmFsIHN0YXR1cyBsaW5lOiBDYXJyaWVyIERldGVjdCIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHMgPSBmY250bC5pb2N0bChzZWxmLmZkLCBUSU9DTUdFVCwgVElPQ01femVyb19zdHIpCi0gICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCdJJyxzKVswXSAmIFRJT0NNX0NEICE9IDAKLQotICAgICMgLSAtIHBsYXRmb3JtIHNwZWNpZmljIC0gLSAtIC0KLQotICAgIGRlZiBvdXRXYWl0aW5nKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGN1cnJlbnRseSBpbiB0aGUgb3V0cHV0IGJ1ZmZlci4iIiIKLSAgICAgICAgI34gcyA9IGZjbnRsLmlvY3RsKHNlbGYuZmQsIFRFUk1JT1MuRklPTlJFQUQsIFRJT0NNX3plcm9fc3RyKQotICAgICAgICBzID0gZmNudGwuaW9jdGwoc2VsZi5mZCwgVElPQ09VVFEsIFRJT0NNX3plcm9fc3RyKQotICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnSScscylbMF0KLQotICAgIGRlZiBkcmFpbk91dHB1dChzZWxmKToKLSAgICAgICAgIiIiaW50ZXJuYWwgLSBub3QgcG9ydGFibGUhIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgdGVybWlvcy50Y2RyYWluKHNlbGYuZmQpCi0KLSAgICBkZWYgbm9uYmxvY2tpbmcoc2VsZik6Ci0gICAgICAgICIiImludGVybmFsIC0gbm90IHBvcnRhYmxlISIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGZjbnRsLmZjbnRsKHNlbGYuZmQsIEZDTlRMLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCi0KLSAgICBkZWYgZmlsZW5vKHNlbGYpOgotICAgICAgICAiIiJcCi0gICAgICAgIEZvciBlYXNpZXIgdXNlIG9mIHRoZSBzZXJpYWwgcG9ydCBpbnN0YW5jZSB3aXRoIHNlbGVjdC4KLSAgICAgICAgV0FSTklORzogdGhpcyBmdW5jdGlvbiBpcyBub3QgcG9ydGFibGUgdG8gZGlmZmVyZW50IHBsYXRmb3JtcyEKLSAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgcmV0dXJuIHNlbGYuZmQKLQotICAgIGRlZiBzZXRYT04oc2VsZiwgbGV2ZWw9VHJ1ZSk6Ci0gICAgICAgICIiIlwKLSAgICAgICAgTWFudWFsbHkgY29udHJvbCBmbG93IC0gd2hlbiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZC4KLSAgICAgICAgVGhpcyB3aWxsIHNlbmQgWE9OICh0cnVlKSBhbmQgWE9GRiAoZmFsc2UpIHRvIHRoZSBvdGhlciBkZXZpY2UuCi0gICAgICAgIFdBUk5JTkc6IHRoaXMgZnVuY3Rpb24gaXMgbm90IHBvcnRhYmxlIHRvIGRpZmZlcmVudCBwbGF0Zm9ybXMhCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5oQ29tUG9ydDogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBpZiBlbmFibGU6Ci0gICAgICAgICAgICB0ZXJtaW9zLnRjZmxvdyhzZWxmLmZkLCBURVJNSU9TLlRDSU9OKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdGVybWlvcy50Y2Zsb3coc2VsZi5mZCwgVEVSTUlPUy5UQ0lPRkYpCi0KLSAgICBkZWYgZmxvd0NvbnRyb2xPdXQoc2VsZiwgZW5hYmxlKToKLSAgICAgICAgIiIiXAotICAgICAgICBNYW51YWxseSBjb250cm9sIGZsb3cgb2Ygb3V0Z29pbmcgZGF0YSAtIHdoZW4gaGFyZHdhcmUgb3Igc29mdHdhcmUgZmxvdwotICAgICAgICBjb250cm9sIGlzIGVuYWJsZWQuCi0gICAgICAgIFdBUk5JTkc6IHRoaXMgZnVuY3Rpb24gaXMgbm90IHBvcnRhYmxlIHRvIGRpZmZlcmVudCBwbGF0Zm9ybXMhCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGlmIGVuYWJsZToKLSAgICAgICAgICAgIHRlcm1pb3MudGNmbG93KHNlbGYuZmQsIFRFUk1JT1MuVENPT04pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0ZXJtaW9zLnRjZmxvdyhzZWxmLmZkLCBURVJNSU9TLlRDT09GRikKLQotCi0jIGFzc2VtYmxlIFNlcmlhbCBjbGFzcyB3aXRoIHRoZSBwbGF0Zm9ybSBzcGVjaWZjIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgYmFzZQotIyBmb3IgZmlsZS1saWtlIGJlaGF2aW9yLiBmb3IgUHl0aG9uIDIuNiBhbmQgbmV3ZXIsIHRoYXQgcHJvdmlkZSB0aGUgbmV3IEkvTwotIyBsaWJyYXJ5LCBkZXJyaXZlIGZyb20gaW8uUmF3SU9CYXNlCi10cnk6Ci0gICAgaW1wb3J0IGlvCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBjbGFzc2ljIHZlcnNpb24gd2l0aCBvdXIgb3duIGZpbGUtbGlrZSBlbXVsYXRpb24KLSAgICBjbGFzcyBTZXJpYWwoUG9zaXhTZXJpYWwsIEZpbGVMaWtlKToKLSAgICAgICAgcGFzcwotZWxzZToKLSAgICAjIGlvIGxpYnJhcnkgcHJlc2VudAotICAgIGNsYXNzIFNlcmlhbChQb3NpeFNlcmlhbCwgaW8uUmF3SU9CYXNlKToKLSAgICAgICAgcGFzcwotCi1jbGFzcyBQb3NpeFBvbGxTZXJpYWwoU2VyaWFsKToKLSAgICAiIiJwb2xsIGJhc2VkIHJlYWQgaW1wbGVtZW50YXRpb24uIG5vdCBhbGwgc3lzdGVtcyBzdXBwb3J0IHBvbGwgcHJvcGVybHkuCi0gICAgaG93ZXZlciB0aGlzIG9uZSBoYXMgYmV0dGVyIGhhbmRsaW5nIG9mIGVycm9ycywgc3VjaCBhcyBhIGRldmljZQotICAgIGRpc2Nvbm5lY3Rpbmcgd2hpbGUgaXQncyBpbiB1c2UgKGUuZy4gVVNCLXNlcmlhbCB1bnBsdWdnZWQpIiIiCi0KLSAgICBkZWYgcmVhZChzZWxmLCBzaXplPTEpOgotICAgICAgICAiIiJSZWFkIHNpemUgYnl0ZXMgZnJvbSB0aGUgc2VyaWFsIHBvcnQuIElmIGEgdGltZW91dCBpcyBzZXQgaXQgbWF5Ci0gICAgICAgICAgIHJldHVybiBsZXNzIGNoYXJhY3RlcnMgYXMgcmVxdWVzdGVkLiBXaXRoIG5vIHRpbWVvdXQgaXQgd2lsbCBibG9jawotICAgICAgICAgICB1bnRpbCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcyBpcyByZWFkLiIiIgotICAgICAgICBpZiBzZWxmLmZkIGlzIE5vbmU6IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgcmVhZCA9IGJ5dGVhcnJheSgpCi0gICAgICAgIHBvbGwgPSBzZWxlY3QucG9sbCgpCi0gICAgICAgIHBvbGwucmVnaXN0ZXIoc2VsZi5mZCwgc2VsZWN0LlBPTExJTnxzZWxlY3QuUE9MTEVSUnxzZWxlY3QuUE9MTEhVUHxzZWxlY3QuUE9MTE5WQUwpCi0gICAgICAgIGlmIHNpemUgPiAwOgotICAgICAgICAgICAgd2hpbGUgbGVuKHJlYWQpIDwgc2l6ZToKLSAgICAgICAgICAgICAgICAjIHByaW50ICJcdHJlYWQoKTogc2l6ZSIsc2l6ZSwgImhhdmUiLCBsZW4ocmVhZCkgICAgI2RlYnVnCi0gICAgICAgICAgICAgICAgIyB3YWl0IHVudGlsIGRldmljZSBiZWNvbWVzIHJlYWR5IHRvIHJlYWQgKG9yIHNvbWV0aGluZyBmYWlscykKLSAgICAgICAgICAgICAgICBmb3IgZmQsIGV2ZW50IGluIHBvbGwucG9sbChzZWxmLl90aW1lb3V0KjEwMDApOgotICAgICAgICAgICAgICAgICAgICBpZiBldmVudCAmIChzZWxlY3QuUE9MTEVSUnxzZWxlY3QuUE9MTEhVUHxzZWxlY3QuUE9MTE5WQUwpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCdkZXZpY2UgcmVwb3J0cyBlcnJvciAocG9sbCknKQotICAgICAgICAgICAgICAgICAgICAjICB3ZSBkb24ndCBjYXJlIGlmIGl0IGlzIHNlbGVjdC5QT0xMSU4gb3IgdGltZW91dCwgdGhhdCdzCi0gICAgICAgICAgICAgICAgICAgICMgIGhhbmRsZWQgYmVsb3cKLSAgICAgICAgICAgICAgICBidWYgPSBvcy5yZWFkKHNlbGYuZmQsIHNpemUgLSBsZW4ocmVhZCkpCi0gICAgICAgICAgICAgICAgcmVhZC5leHRlbmQoYnVmKQotICAgICAgICAgICAgICAgIGlmICgoc2VsZi5fdGltZW91dCBpcyBub3QgTm9uZSBhbmQgc2VsZi5fdGltZW91dCA+PSAwKSBvciAKLSAgICAgICAgICAgICAgICAgICAgKHNlbGYuX2ludGVyQ2hhclRpbWVvdXQgaXMgbm90IE5vbmUgYW5kIHNlbGYuX2ludGVyQ2hhclRpbWVvdXQgPiAwKSkgYW5kIG5vdCBidWY6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrICAgIyBlYXJseSBhYm9ydCBvbiB0aW1lb3V0Ci0gICAgICAgIHJldHVybiBieXRlcyhyZWFkKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgcyA9IFNlcmlhbCgwLAotICAgICAgICAgICAgICAgICBiYXVkcmF0ZT0xOTIwMCwgICAgICAgICMgYmF1ZCByYXRlCi0gICAgICAgICAgICAgICAgIGJ5dGVzaXplPUVJR0hUQklUUywgICAgIyBudW1iZXIgb2YgZGF0YSBiaXRzCi0gICAgICAgICAgICAgICAgIHBhcml0eT1QQVJJVFlfRVZFTiwgICAgIyBlbmFibGUgcGFyaXR5IGNoZWNraW5nCi0gICAgICAgICAgICAgICAgIHN0b3BiaXRzPVNUT1BCSVRTX09ORSwgIyBudW1iZXIgb2Ygc3RvcCBiaXRzCi0gICAgICAgICAgICAgICAgIHRpbWVvdXQ9MywgICAgICAgICAgICAgIyBzZXQgYSB0aW1lb3V0IHZhbHVlLCBOb25lIGZvciB3YWl0aW5nIGZvcmV2ZXIKLSAgICAgICAgICAgICAgICAgeG9ueG9mZj0wLCAgICAgICAgICAgICAjIGVuYWJsZSBzb2Z0d2FyZSBmbG93IGNvbnRyb2wKLSAgICAgICAgICAgICAgICAgcnRzY3RzPTAsICAgICAgICAgICAgICAjIGVuYWJsZSBSVFMvQ1RTIGZsb3cgY29udHJvbAotICAgICAgICAgICAgICAgKQotICAgIHMuc2V0UlRTKDEpCi0gICAgcy5zZXREVFIoMSkKLSAgICBzLmZsdXNoSW5wdXQoKQotICAgIHMuZmx1c2hPdXRwdXQoKQotICAgIHMud3JpdGUoJ2hlbGxvJykKLSAgICBzeXMuc3Rkb3V0LndyaXRlKCclclxuJyAlIHMucmVhZCg1KSkKLSAgICBzeXMuc3Rkb3V0LndyaXRlKCclc1xuJyAlIHMuaW5XYWl0aW5nKCkpCi0gICAgZGVsIHMKLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3NlcmlhbHV0aWwucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvc2VyaWFsdXRpbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4ZWNlNC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvc2VyaWFsdXRpbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDU1MSArMCwwIEBACi0jISBweXRob24KLSMgUHl0aG9uIFNlcmlhbCBQb3J0IEV4dGVuc2lvbiBmb3IgV2luMzIsIExpbnV4LCBCU0QsIEp5dGhvbgotIyBzZWUgX19pbml0X18ucHkKLSMKLSMgKEMpIDIwMDEtMjAxMCBDaHJpcyBMaWVjaHRpIDxjbGllY2h0aUBnbXgubmV0PgotIyB0aGlzIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzZWUgbGljZW5zZS50eHQKLQotIyBjb21wYXRpYmlsaXR5IGZvciBvbGRlciBQeXRob24gPCAyLjYKLXRyeToKLSAgICBieXRlcwotICAgIGJ5dGVhcnJheQotZXhjZXB0IChOYW1lRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAjIFB5dGhvbiBvbGRlciB0aGFuIDIuNiBkbyBub3QgaGF2ZSB0aGVzZSB0eXBlcy4gTGlrZSBmb3IgUHl0aG9uIDIuNiB0aGV5Ci0gICAgIyBzaG91bGQgYmVoYXZlIGxpa2Ugc3RyLiBGb3IgUHl0aG9uIG9sZGVyIHRoYW4gMy4wIHdlIHdhbnQgdG8gd29yayB3aXRoCi0gICAgIyBzdHJpbmdzIGFueXdheSwgb25seSBsYXRlciB2ZXJzaW9ucyBoYXZlIGEgdHJ1ZSBieXRlcyB0eXBlLgotICAgIGJ5dGVzID0gc3RyCi0gICAgIyBieXRlYXJyYXkgaXMgYSBtdXRhYmxlIHR5cGUgdGhhdCBpcyBlYXNpbHkgdHVybmVkIGludG8gYW4gaW5zdGFuY2Ugb2YKLSAgICAjIGJ5dGVzCi0gICAgY2xhc3MgYnl0ZWFycmF5KGxpc3QpOgotICAgICAgICAjIGZvciBieXRlcyhieXRlYXJyYXkoKSkgdXNhZ2UKLSAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6IHJldHVybiAnJy5qb2luKHNlbGYpCi0gICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKTogcmV0dXJuICdieXRlYXJyYXkoJXIpJyAlICcnLmpvaW4oc2VsZikKLSAgICAgICAgIyBhcHBlbmQgYXV0b21hdGljYWxseSBjb252ZXJ0cyBpbnRlZ2VycyB0byBjaGFyYWN0ZXJzCi0gICAgICAgIGRlZiBhcHBlbmQoc2VsZiwgaXRlbSk6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIHN0cik6Ci0gICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoc2VsZiwgaXRlbSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoc2VsZiwgY2hyKGl0ZW0pKQotICAgICAgICAjICs9Ci0gICAgICAgIGRlZiBfX2lhZGRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICBmb3IgYnl0ZSBpbiBvdGhlcjoKLSAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZChieXRlKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgICAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsIGksIGopOgotICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShsaXN0Ll9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKSkKLQotICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaXRlbSk6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIHNsaWNlKToKLSAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZWFycmF5KGxpc3QuX19nZXRpdGVtX18oc2VsZiwgaXRlbSkpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBvcmQobGlzdC5fX2dldGl0ZW1fXyhzZWxmLCBpdGVtKSkKLQotICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgICAgIG90aGVyID0gYnl0ZWFycmF5KG90aGVyKQotICAgICAgICAgICAgcmV0dXJuIGxpc3QuX19lcV9fKHNlbGYsIG90aGVyKQotCi0jIGBgbWVtb3J5dmlld2BgIHdhcyBpbnRyb2R1Y2VkIGluIFB5dGhvbiAyLjcgYW5kIGBgYnl0ZXMoc29tZV9tZW1vcnl2aWV3KWBgCi0jIGlzbid0IHJldHVybmluZyB0aGUgY29udGVudHMgKHZlcnkgdW5mb3J0dW5hdGUpLiBUaGVyZWZvcmUgd2UgbmVlZCBzcGVjaWFsCi0jIGNhc2VzIGFuZCB0ZXN0IGZvciBpdC4gRW5zdXJlIHRoYXQgdGhlcmUgaXMgYSBgYG1lbW9yeXZpZXdgYCBvYmplY3QgZm9yIG9sZGVyCi0jIFB5dGhvbiB2ZXJzaW9ucy4gVGhpcyBpcyBlYXNpZXIgdGhhbiBtYWtpbmcgZXZlcnkgdGVzdCBkZXBlbmRlbnQgb24gaXRzCi0jIGV4aXN0ZW5jZS4KLXRyeToKLSAgICBtZW1vcnl2aWV3Ci1leGNlcHQgKE5hbWVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgICMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgbWF0dGVyIGFzIHdlIGRvIG5vdCByZWFseSB1c2UgaXQuCi0gICAgIyBpdCBqdXN0IG11c3Qgbm90IGluaGVyaXQgZnJvbSBzb21ldGhpbmcgZWxzZSB3ZSBtaWdodCBjYXJlIGZvci4KLSAgICBjbGFzcyBtZW1vcnl2aWV3OgotICAgICAgICBwYXNzCi0KLQotIyBhbGwgUHl0aG9uIHZlcnNpb25zIHByaW9yIDMueCBjb252ZXJ0IGBgc3RyKFsxN10pYGAgdG8gJ1sxN10nIGluc3RlYWQgb2YgJ1x4MTEnCi0jIHNvIGEgc2ltcGxlIGBgYnl0ZXMoc2VxdWVuY2UpYGAgZG9lc24ndCB3b3JrIGZvciBhbGwgdmVyc2lvbnMKLWRlZiB0b19ieXRlcyhzZXEpOgotICAgICIiImNvbnZlcnQgYSBzZXF1ZW5jZSB0byBhIGJ5dGVzIHR5cGUiIiIKLSAgICBpZiBpc2luc3RhbmNlKHNlcSwgYnl0ZXMpOgotICAgICAgICByZXR1cm4gc2VxCi0gICAgZWxpZiBpc2luc3RhbmNlKHNlcSwgYnl0ZWFycmF5KToKLSAgICAgICAgcmV0dXJuIGJ5dGVzKHNlcSkKLSAgICBlbGlmIGlzaW5zdGFuY2Uoc2VxLCBtZW1vcnl2aWV3KToKLSAgICAgICAgcmV0dXJuIHNlcS50b2J5dGVzKCkKLSAgICBlbHNlOgotICAgICAgICBiID0gYnl0ZWFycmF5KCkKLSAgICAgICAgZm9yIGl0ZW0gaW4gc2VxOgotICAgICAgICAgICAgYi5hcHBlbmQoaXRlbSkgICMgdGhpcyBvbmUgaGFuZGxlcyBpbnQgYW5kIHN0ciBmb3Igb3VyIGVtdWxhdGlvbiBhbmQgaW50cyBmb3IgUHl0aG9uIDMueAotICAgICAgICByZXR1cm4gYnl0ZXMoYikKLQotIyBjcmVhdGUgY29udHJvbCBieXRlcwotWE9OICA9IHRvX2J5dGVzKFsxN10pCi1YT0ZGID0gdG9fYnl0ZXMoWzE5XSkKLQotQ1IgPSB0b19ieXRlcyhbMTNdKQotTEYgPSB0b19ieXRlcyhbMTBdKQotCi0KLVBBUklUWV9OT05FLCBQQVJJVFlfRVZFTiwgUEFSSVRZX09ERCwgUEFSSVRZX01BUkssIFBBUklUWV9TUEFDRSA9ICdOJywgJ0UnLCAnTycsICdNJywgJ1MnCi1TVE9QQklUU19PTkUsIFNUT1BCSVRTX09ORV9QT0lOVF9GSVZFLCBTVE9QQklUU19UV08gPSAoMSwgMS41LCAyKQotRklWRUJJVFMsIFNJWEJJVFMsIFNFVkVOQklUUywgRUlHSFRCSVRTID0gKDUsIDYsIDcsIDgpCi0KLVBBUklUWV9OQU1FUyA9IHsKLSAgICBQQVJJVFlfTk9ORTogICdOb25lJywKLSAgICBQQVJJVFlfRVZFTjogICdFdmVuJywKLSAgICBQQVJJVFlfT0REOiAgICdPZGQnLAotICAgIFBBUklUWV9NQVJLOiAgJ01hcmsnLAotICAgIFBBUklUWV9TUEFDRTogJ1NwYWNlJywKLX0KLQotCi1jbGFzcyBTZXJpYWxFeGNlcHRpb24oSU9FcnJvcik6Ci0gICAgIiIiQmFzZSBjbGFzcyBmb3Igc2VyaWFsIHBvcnQgcmVsYXRlZCBleGNlcHRpb25zLiIiIgotCi0KLWNsYXNzIFNlcmlhbFRpbWVvdXRFeGNlcHRpb24oU2VyaWFsRXhjZXB0aW9uKToKLSAgICAiIiJXcml0ZSB0aW1lb3V0cyBnaXZlIGFuIGV4Y2VwdGlvbiIiIgotCi0KLXdyaXRlVGltZW91dEVycm9yID0gU2VyaWFsVGltZW91dEV4Y2VwdGlvbignV3JpdGUgdGltZW91dCcpCi1wb3J0Tm90T3BlbkVycm9yID0gU2VyaWFsRXhjZXB0aW9uKCdBdHRlbXB0aW5nIHRvIHVzZSBhIHBvcnQgdGhhdCBpcyBub3Qgb3BlbicpCi0KLQotY2xhc3MgRmlsZUxpa2Uob2JqZWN0KToKLSAgICAiIiJBbiBhYnN0cmFjdCBmaWxlIGxpa2UgY2xhc3MuCi0KLSAgICBUaGlzIGNsYXNzIGltcGxlbWVudHMgcmVhZGxpbmUgYW5kIHJlYWRsaW5lcyBiYXNlZCBvbiByZWFkIGFuZAotICAgIHdyaXRlbGluZXMgYmFzZWQgb24gd3JpdGUuCi0gICAgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGFib3ZlIGZ1bmN0aW9ucyBmb3IgdG8gU2VyaWFsCi0gICAgcG9ydCBvYmplY3RzLgotCi0gICAgTm90ZSB0aGF0IHdoZW4gdGhlIHNlcmlhbCBwb3J0IHdhcyBvcGVuZWQgd2l0aCBfTk9fIHRpbWVvdXQgdGhhdAotICAgIHJlYWRsaW5lIGJsb2NrcyB1bnRpbCBpdCBzZWVzIGEgbmV3bGluZSAob3IgdGhlIHNwZWNpZmllZCBzaXplIGlzCi0gICAgcmVhY2hlZCkgYW5kIHRoYXQgcmVhZGxpbmVzIHdvdWxkIG5ldmVyIHJldHVybiBhbmQgdGhlcmVmb3JlCi0gICAgcmVmdXNlcyB0byB3b3JrIChpdCByYWlzZXMgYW4gZXhjZXB0aW9uIGluIHRoaXMgY2FzZSkhCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBzZWxmLmNsb3NlZCA9IFRydWUKLQotICAgICMgc28gdGhhdCBwb3J0cyBhcmUgY2xvc2VkIHdoZW4gb2JqZWN0cyBhcmUgZGlzY2FyZGVkCi0gICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgICIiIkRlc3RydWN0b3IuICBDYWxscyBjbG9zZSgpLiIiIgotICAgICAgICAjIFRoZSB0cnkvZXhjZXB0IGJsb2NrIGlzIGluIGNhc2UgdGhpcyBpcyBjYWxsZWQgYXQgcHJvZ3JhbQotICAgICAgICAjIGV4aXQgdGltZSwgd2hlbiBpdCdzIHBvc3NpYmxlIHRoYXQgZ2xvYmFscyBoYXZlIGFscmVhZHkgYmVlbgotICAgICAgICAjIGRlbGV0ZWQsIGFuZCB0aGVuIHRoZSBjbG9zZSgpIGNhbGwgbWlnaHQgZmFpbC4gIFNpbmNlCi0gICAgICAgICMgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBzdWNoIGZhaWx1cmVzIGFuZCB0aGV5IGFubm95Ci0gICAgICAgICMgdGhlIGVuZCB1c2Vycywgd2Ugc3VwcHJlc3MgdGhlIHRyYWNlYmFjay4KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIHNlcXVlbmNlKToKLSAgICAgICAgZm9yIGxpbmUgaW4gc2VxdWVuY2U6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKGxpbmUpCi0KLSAgICBkZWYgZmx1c2goc2VsZik6Ci0gICAgICAgICIiImZsdXNoIG9mIGZpbGUgbGlrZSBvYmplY3RzIiIiCi0gICAgICAgIHBhc3MKLQotICAgICMgaXRlcmF0b3IgZm9yIGUuZy4gImZvciBsaW5lIGluIFNlcmlhbCgwKTogLi4uIiB1c2FnZQotICAgIGRlZiBuZXh0KHNlbGYpOgotICAgICAgICBsaW5lID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgIGlmIG5vdCBsaW5lOiByYWlzZSBTdG9wSXRlcmF0aW9uCi0gICAgICAgIHJldHVybiBsaW5lCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT1Ob25lLCBlb2w9TEYpOgotICAgICAgICAiIiJyZWFkIGEgbGluZSB3aGljaCBpcyB0ZXJtaW5hdGVkIHdpdGggZW5kLW9mLWxpbmUgKGVvbCkgY2hhcmFjdGVyCi0gICAgICAgICgnXG4nIGJ5IGRlZmF1bHQpIG9yIHVudGlsIHRpbWVvdXQuIiIiCi0gICAgICAgIGxlbmVvbCA9IGxlbihlb2wpCi0gICAgICAgIGxpbmUgPSBieXRlYXJyYXkoKQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgYyA9IHNlbGYucmVhZCgxKQotICAgICAgICAgICAgaWYgYzoKLSAgICAgICAgICAgICAgICBsaW5lICs9IGMKLSAgICAgICAgICAgICAgICBpZiBsaW5lWy1sZW5lb2w6XSA9PSBlb2w6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgaWYgc2l6ZSBpcyBub3QgTm9uZSBhbmQgbGVuKGxpbmUpID49IHNpemU6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHJldHVybiBieXRlcyhsaW5lKQotCi0gICAgZGVmIHJlYWRsaW5lcyhzZWxmLCBzaXplaGludD1Ob25lLCBlb2w9TEYpOgotICAgICAgICAiIiJyZWFkIGEgbGlzdCBvZiBsaW5lcywgdW50aWwgdGltZW91dC4KLSAgICAgICAgc2l6ZWhpbnQgaXMgaWdub3JlZC4iIiIKLSAgICAgICAgaWYgc2VsZi50aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJTZXJpYWwgcG9ydCBNVVNUIGhhdmUgZW5hYmxlZCB0aW1lb3V0IGZvciB0aGlzIGZ1bmN0aW9uISIpCi0gICAgICAgIGxlbmVvbCA9IGxlbihlb2wpCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGxpbmUgPSBzZWxmLnJlYWRsaW5lKGVvbD1lb2wpCi0gICAgICAgICAgICBpZiBsaW5lOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQotICAgICAgICAgICAgICAgIGlmIGxpbmVbLWxlbmVvbDpdICE9IGVvbDogICAgIyB3YXMgdGhlIGxpbmUgcmVjZWl2ZWQgd2l0aCBhIHRpbWVvdXQ/Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHJldHVybiBsaW5lcwotCi0gICAgZGVmIHhyZWFkbGluZXMoc2VsZiwgc2l6ZWhpbnQ9Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgbGluZXMsIGltcGxlbWVudGVkIGFzIGdlbmVyYXRvci4gSXQgd2lsbCByYWlzZSBTdG9wSXRlcmF0aW9uIG9uCi0gICAgICAgIHRpbWVvdXQgKGVtcHR5IHJlYWQpLiBzaXplaGludCBpcyBpZ25vcmVkLiIiIgotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgbGluZSA9IHNlbGYucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbm90IGxpbmU6IGJyZWFrCi0gICAgICAgICAgICB5aWVsZCBsaW5lCi0KLSAgICAjIG90aGVyIGZ1bmN0aW9ucyBvZiBmaWxlLWxpa2VzIC0gbm90IHVzZWQgYnkgcHlTZXJpYWwKLQotICAgICN+IHJlYWRpbnRvKGIpCi0KLSAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZT0wKToKLSAgICAgICAgcmFpc2UgSU9FcnJvcigiZmlsZSBpcyBub3Qgc2Vla2FibGUiKQotCi0gICAgZGVmIHRlbGwoc2VsZik6Ci0gICAgICAgIHJhaXNlIElPRXJyb3IoImZpbGUgaXMgbm90IHNlZWthYmxlIikKLQotICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBuPU5vbmUpOgotICAgICAgICByYWlzZSBJT0Vycm9yKCJmaWxlIGlzIG5vdCBzZWVrYWJsZSIpCi0KLSAgICBkZWYgaXNhdHR5KHNlbGYpOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotCi1jbGFzcyBTZXJpYWxCYXNlKG9iamVjdCk6Ci0gICAgIiIiU2VyaWFsIHBvcnQgYmFzZSBjbGFzcy4gUHJvdmlkZXMgX19pbml0X18gZnVuY3Rpb24gYW5kIHByb3BlcnRpZXMgdG8KLSAgICAgICBnZXQvc2V0IHBvcnQgc2V0dGluZ3MuIiIiCi0KLSAgICAjIGRlZmF1bHQgdmFsdWVzLCBtYXkgYmUgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzc2VzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxsIHZhbHVlcwotICAgIEJBVURSQVRFUyA9ICg1MCwgNzUsIDExMCwgMTM0LCAxNTAsIDIwMCwgMzAwLCA2MDAsIDEyMDAsIDE4MDAsIDI0MDAsIDQ4MDAsCi0gICAgICAgICAgICAgICAgIDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCwgMjMwNDAwLCA0NjA4MDAsIDUwMDAwMCwKLSAgICAgICAgICAgICAgICAgNTc2MDAwLCA5MjE2MDAsIDEwMDAwMDAsIDExNTIwMDAsIDE1MDAwMDAsIDIwMDAwMDAsIDI1MDAwMDAsCi0gICAgICAgICAgICAgICAgIDMwMDAwMDAsIDM1MDAwMDAsIDQwMDAwMDApCi0gICAgQllURVNJWkVTID0gKEZJVkVCSVRTLCBTSVhCSVRTLCBTRVZFTkJJVFMsIEVJR0hUQklUUykKLSAgICBQQVJJVElFUyAgPSAoUEFSSVRZX05PTkUsIFBBUklUWV9FVkVOLCBQQVJJVFlfT0RELCBQQVJJVFlfTUFSSywgUEFSSVRZX1NQQUNFKQotICAgIFNUT1BCSVRTICA9IChTVE9QQklUU19PTkUsIFNUT1BCSVRTX09ORV9QT0lOVF9GSVZFLCBTVE9QQklUU19UV08pCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwKLSAgICAgICAgICAgICAgICAgcG9ydCA9IE5vbmUsICAgICAgICAgICAjIG51bWJlciBvZiBkZXZpY2UsIG51bWJlcmluZyBzdGFydHMgYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHplcm8uIGlmIGV2ZXJ5dGhpbmcgZmFpbHMsIHRoZSB1c2VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjYW4gc3BlY2lmeSBhIGRldmljZSBzdHJpbmcsIG5vdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoYXQgdGhpcyBpc24ndCBwb3J0YWJsZSBhbnltb3JlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwb3J0IHdpbGwgYmUgb3BlbmVkIGlmIG9uZSBpcyBzcGVjaWZpZWQKLSAgICAgICAgICAgICAgICAgYmF1ZHJhdGU9OTYwMCwgICAgICAgICAjIGJhdWQgcmF0ZQotICAgICAgICAgICAgICAgICBieXRlc2l6ZT1FSUdIVEJJVFMsICAgICMgbnVtYmVyIG9mIGRhdGEgYml0cwotICAgICAgICAgICAgICAgICBwYXJpdHk9UEFSSVRZX05PTkUsICAgICMgZW5hYmxlIHBhcml0eSBjaGVja2luZwotICAgICAgICAgICAgICAgICBzdG9wYml0cz1TVE9QQklUU19PTkUsICMgbnVtYmVyIG9mIHN0b3AgYml0cwotICAgICAgICAgICAgICAgICB0aW1lb3V0PU5vbmUsICAgICAgICAgICMgc2V0IGEgdGltZW91dCB2YWx1ZSwgTm9uZSB0byB3YWl0IGZvcmV2ZXIKLSAgICAgICAgICAgICAgICAgeG9ueG9mZj1GYWxzZSwgICAgICAgICAjIGVuYWJsZSBzb2Z0d2FyZSBmbG93IGNvbnRyb2wKLSAgICAgICAgICAgICAgICAgcnRzY3RzPUZhbHNlLCAgICAgICAgICAjIGVuYWJsZSBSVFMvQ1RTIGZsb3cgY29udHJvbAotICAgICAgICAgICAgICAgICB3cml0ZVRpbWVvdXQ9Tm9uZSwgICAgICMgc2V0IGEgdGltZW91dCBmb3Igd3JpdGVzCi0gICAgICAgICAgICAgICAgIGRzcmR0cj1GYWxzZSwgICAgICAgICAgIyBOb25lOiB1c2UgcnRzY3RzIHNldHRpbmcsIGRzcmR0ciBvdmVycmlkZSBpZiBUcnVlIG9yIEZhbHNlCi0gICAgICAgICAgICAgICAgIGludGVyQ2hhclRpbWVvdXQ9Tm9uZSAgIyBJbnRlci1jaGFyYWN0ZXIgdGltZW91dCwgTm9uZSB0byBkaXNhYmxlCi0gICAgICAgICAgICAgICAgICk6Ci0gICAgICAgICIiIkluaXRpYWxpemUgY29tbSBwb3J0IG9iamVjdC4gSWYgYSBwb3J0IGlzIGdpdmVuLCB0aGVuIHRoZSBwb3J0IHdpbGwgYmUKLSAgICAgICAgICAgb3BlbmVkIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgYSBTZXJpYWwgcG9ydCBvYmplY3QgaW4gY2xvc2VkIHN0YXRlCi0gICAgICAgICAgIGlzIHJldHVybmVkLiIiIgotCi0gICAgICAgIHNlbGYuX2lzT3BlbiAgID0gRmFsc2UKLSAgICAgICAgc2VsZi5fcG9ydCAgICAgPSBOb25lICAgICAgICAgICAjIGNvcnJlY3QgdmFsdWUgaXMgYXNzaWduZWQgYmVsb3cgdGhyb3VnaCBwcm9wZXJ0aWVzCi0gICAgICAgIHNlbGYuX2JhdWRyYXRlID0gTm9uZSAgICAgICAgICAgIyBjb3JyZWN0IHZhbHVlIGlzIGFzc2lnbmVkIGJlbG93IHRocm91Z2ggcHJvcGVydGllcwotICAgICAgICBzZWxmLl9ieXRlc2l6ZSA9IE5vbmUgICAgICAgICAgICMgY29ycmVjdCB2YWx1ZSBpcyBhc3NpZ25lZCBiZWxvdyB0aHJvdWdoIHByb3BlcnRpZXMKLSAgICAgICAgc2VsZi5fcGFyaXR5ICAgPSBOb25lICAgICAgICAgICAjIGNvcnJlY3QgdmFsdWUgaXMgYXNzaWduZWQgYmVsb3cgdGhyb3VnaCBwcm9wZXJ0aWVzCi0gICAgICAgIHNlbGYuX3N0b3BiaXRzID0gTm9uZSAgICAgICAgICAgIyBjb3JyZWN0IHZhbHVlIGlzIGFzc2lnbmVkIGJlbG93IHRocm91Z2ggcHJvcGVydGllcwotICAgICAgICBzZWxmLl90aW1lb3V0ICA9IE5vbmUgICAgICAgICAgICMgY29ycmVjdCB2YWx1ZSBpcyBhc3NpZ25lZCBiZWxvdyB0aHJvdWdoIHByb3BlcnRpZXMKLSAgICAgICAgc2VsZi5fd3JpdGVUaW1lb3V0ID0gTm9uZSAgICAgICAjIGNvcnJlY3QgdmFsdWUgaXMgYXNzaWduZWQgYmVsb3cgdGhyb3VnaCBwcm9wZXJ0aWVzCi0gICAgICAgIHNlbGYuX3hvbnhvZmYgID0gTm9uZSAgICAgICAgICAgIyBjb3JyZWN0IHZhbHVlIGlzIGFzc2lnbmVkIGJlbG93IHRocm91Z2ggcHJvcGVydGllcwotICAgICAgICBzZWxmLl9ydHNjdHMgICA9IE5vbmUgICAgICAgICAgICMgY29ycmVjdCB2YWx1ZSBpcyBhc3NpZ25lZCBiZWxvdyB0aHJvdWdoIHByb3BlcnRpZXMKLSAgICAgICAgc2VsZi5fZHNyZHRyICAgPSBOb25lICAgICAgICAgICAjIGNvcnJlY3QgdmFsdWUgaXMgYXNzaWduZWQgYmVsb3cgdGhyb3VnaCBwcm9wZXJ0aWVzCi0gICAgICAgIHNlbGYuX2ludGVyQ2hhclRpbWVvdXQgPSBOb25lICAgIyBjb3JyZWN0IHZhbHVlIGlzIGFzc2lnbmVkIGJlbG93IHRocm91Z2ggcHJvcGVydGllcwotCi0gICAgICAgICMgYXNzaWduIHZhbHVlcyB1c2luZyBnZXQvc2V0IG1ldGhvZHMgdXNpbmcgdGhlIHByb3BlcnRpZXMgZmVhdHVyZQotICAgICAgICBzZWxmLnBvcnQgICAgID0gcG9ydAotICAgICAgICBzZWxmLmJhdWRyYXRlID0gYmF1ZHJhdGUKLSAgICAgICAgc2VsZi5ieXRlc2l6ZSA9IGJ5dGVzaXplCi0gICAgICAgIHNlbGYucGFyaXR5ICAgPSBwYXJpdHkKLSAgICAgICAgc2VsZi5zdG9wYml0cyA9IHN0b3BiaXRzCi0gICAgICAgIHNlbGYudGltZW91dCAgPSB0aW1lb3V0Ci0gICAgICAgIHNlbGYud3JpdGVUaW1lb3V0ID0gd3JpdGVUaW1lb3V0Ci0gICAgICAgIHNlbGYueG9ueG9mZiAgPSB4b254b2ZmCi0gICAgICAgIHNlbGYucnRzY3RzICAgPSBydHNjdHMKLSAgICAgICAgc2VsZi5kc3JkdHIgICA9IGRzcmR0cgotICAgICAgICBzZWxmLmludGVyQ2hhclRpbWVvdXQgPSBpbnRlckNoYXJUaW1lb3V0Ci0KLSAgICAgICAgaWYgcG9ydCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYub3BlbigpCi0KLSAgICBkZWYgaXNPcGVuKHNlbGYpOgotICAgICAgICAiIiJDaGVjayBpZiB0aGUgcG9ydCBpcyBvcGVuZWQuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9pc09wZW4KLQotICAgICMgIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0KLQotICAgICMgVE9ETzogdGhlc2UgYXJlIG5vdCByZWFsbHkgbmVlZGVkIGFzIHRoZSBpcyB0aGUgQkFVRFJBVEVTIGV0Yy4gYXR0cmlidXRlLi4uCi0gICAgIyBtYXliZSBpIHJlbW92ZSB0aGVtIGJlZm9yZSB0aGUgZmluYWwgcmVsZWFzZS4uLgotCi0gICAgZGVmIGdldFN1cHBvcnRlZEJhdWRyYXRlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFsoc3RyKGIpLCBiKSBmb3IgYiBpbiBzZWxmLkJBVURSQVRFU10KLQotICAgIGRlZiBnZXRTdXBwb3J0ZWRCeXRlU2l6ZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBbKHN0cihiKSwgYikgZm9yIGIgaW4gc2VsZi5CWVRFU0laRVNdCi0KLSAgICBkZWYgZ2V0U3VwcG9ydGVkU3RvcGJpdHMoc2VsZik6Ci0gICAgICAgIHJldHVybiBbKHN0cihiKSwgYikgZm9yIGIgaW4gc2VsZi5TVE9QQklUU10KLQotICAgIGRlZiBnZXRTdXBwb3J0ZWRQYXJpdGllcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFsoUEFSSVRZX05BTUVTW2JdLCBiKSBmb3IgYiBpbiBzZWxmLlBBUklUSUVTXQotCi0gICAgIyAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLQotCi0gICAgZGVmIHNldFBvcnQoc2VsZiwgcG9ydCk6Ci0gICAgICAgICIiIkNoYW5nZSB0aGUgcG9ydC4gVGhlIGF0dHJpYnV0ZSBwb3J0c3RyIGlzIHNldCB0byBhIHN0cmluZyB0aGF0Ci0gICAgICAgICAgIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBwb3J0LiIiIgotCi0gICAgICAgIHdhc19vcGVuID0gc2VsZi5faXNPcGVuCi0gICAgICAgIGlmIHdhc19vcGVuOiBzZWxmLmNsb3NlKCkKLSAgICAgICAgaWYgcG9ydCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocG9ydCwgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5wb3J0c3RyID0gcG9ydAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLnBvcnRzdHIgPSBzZWxmLm1ha2VEZXZpY2VOYW1lKHBvcnQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnBvcnRzdHIgPSBOb25lCi0gICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYubmFtZSA9IHNlbGYucG9ydHN0cgotICAgICAgICBpZiB3YXNfb3Blbjogc2VsZi5vcGVuKCkKLQotICAgIGRlZiBnZXRQb3J0KHNlbGYpOgotICAgICAgICAiIiJHZXQgdGhlIGN1cnJlbnQgcG9ydCBzZXR0aW5nLiBUaGUgdmFsdWUgdGhhdCB3YXMgcGFzc2VkIG9uIGluaXQgb3IgdXNpbmcKLSAgICAgICAgICAgc2V0UG9ydCgpIGlzIHBhc3NlZCBiYWNrLiBTZWUgYWxzbyB0aGUgYXR0cmlidXRlIHBvcnRzdHIgd2hpY2ggY29udGFpbnMKLSAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHBvcnQgYXMgYSBzdHJpbmcuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ci0KLSAgICBwb3J0ID0gcHJvcGVydHkoZ2V0UG9ydCwgc2V0UG9ydCwgZG9jPSJQb3J0IHNldHRpbmciKQotCi0KLSAgICBkZWYgc2V0QmF1ZHJhdGUoc2VsZiwgYmF1ZHJhdGUpOgotICAgICAgICAiIiJDaGFuZ2UgYmF1ZCByYXRlLiBJdCByYWlzZXMgYSBWYWx1ZUVycm9yIGlmIHRoZSBwb3J0IGlzIG9wZW4gYW5kIHRoZQotICAgICAgICBiYXVkIHJhdGUgaXMgbm90IHBvc3NpYmxlLiBJZiB0aGUgcG9ydCBpcyBjbG9zZWQsIHRoZW4gdGhlIHZhbHVlIGlzCi0gICAgICAgIGFjY2VwdGVkIGFuZCB0aGUgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIHRoZSBwb3J0IGlzIG9wZW5lZC4iIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYiA9IGludChiYXVkcmF0ZSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk5vdCBhIHZhbGlkIGJhdWRyYXRlOiAlciIgJSAoYmF1ZHJhdGUsKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGIgPD0gMDoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJOb3QgYSB2YWxpZCBiYXVkcmF0ZTogJXIiICUgKGJhdWRyYXRlLCkpCi0gICAgICAgICAgICBzZWxmLl9iYXVkcmF0ZSA9IGIKLSAgICAgICAgICAgIGlmIHNlbGYuX2lzT3BlbjogIHNlbGYuX3JlY29uZmlndXJlUG9ydCgpCi0KLSAgICBkZWYgZ2V0QmF1ZHJhdGUoc2VsZik6Ci0gICAgICAgICIiIkdldCB0aGUgY3VycmVudCBiYXVkIHJhdGUgc2V0dGluZy4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2JhdWRyYXRlCi0KLSAgICBiYXVkcmF0ZSA9IHByb3BlcnR5KGdldEJhdWRyYXRlLCBzZXRCYXVkcmF0ZSwgZG9jPSJCYXVkIHJhdGUgc2V0dGluZyIpCi0KLQotICAgIGRlZiBzZXRCeXRlU2l6ZShzZWxmLCBieXRlc2l6ZSk6Ci0gICAgICAgICIiIkNoYW5nZSBieXRlIHNpemUuIiIiCi0gICAgICAgIGlmIGJ5dGVzaXplIG5vdCBpbiBzZWxmLkJZVEVTSVpFUzogcmFpc2UgVmFsdWVFcnJvcigiTm90IGEgdmFsaWQgYnl0ZSBzaXplOiAlciIgJSAoYnl0ZXNpemUsKSkKLSAgICAgICAgc2VsZi5fYnl0ZXNpemUgPSBieXRlc2l6ZQotICAgICAgICBpZiBzZWxmLl9pc09wZW46IHNlbGYuX3JlY29uZmlndXJlUG9ydCgpCi0KLSAgICBkZWYgZ2V0Qnl0ZVNpemUoc2VsZik6Ci0gICAgICAgICIiIkdldCB0aGUgY3VycmVudCBieXRlIHNpemUgc2V0dGluZy4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J5dGVzaXplCi0KLSAgICBieXRlc2l6ZSA9IHByb3BlcnR5KGdldEJ5dGVTaXplLCBzZXRCeXRlU2l6ZSwgZG9jPSJCeXRlIHNpemUgc2V0dGluZyIpCi0KLQotICAgIGRlZiBzZXRQYXJpdHkoc2VsZiwgcGFyaXR5KToKLSAgICAgICAgIiIiQ2hhbmdlIHBhcml0eSBzZXR0aW5nLiIiIgotICAgICAgICBpZiBwYXJpdHkgbm90IGluIHNlbGYuUEFSSVRJRVM6IHJhaXNlIFZhbHVlRXJyb3IoIk5vdCBhIHZhbGlkIHBhcml0eTogJXIiICUgKHBhcml0eSwpKQotICAgICAgICBzZWxmLl9wYXJpdHkgPSBwYXJpdHkKLSAgICAgICAgaWYgc2VsZi5faXNPcGVuOiBzZWxmLl9yZWNvbmZpZ3VyZVBvcnQoKQotCi0gICAgZGVmIGdldFBhcml0eShzZWxmKToKLSAgICAgICAgIiIiR2V0IHRoZSBjdXJyZW50IHBhcml0eSBzZXR0aW5nLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fcGFyaXR5Ci0KLSAgICBwYXJpdHkgPSBwcm9wZXJ0eShnZXRQYXJpdHksIHNldFBhcml0eSwgZG9jPSJQYXJpdHkgc2V0dGluZyIpCi0KLQotICAgIGRlZiBzZXRTdG9wYml0cyhzZWxmLCBzdG9wYml0cyk6Ci0gICAgICAgICIiIkNoYW5nZSBzdG9wIGJpdHMgc2l6ZS4iIiIKLSAgICAgICAgaWYgc3RvcGJpdHMgbm90IGluIHNlbGYuU1RPUEJJVFM6IHJhaXNlIFZhbHVlRXJyb3IoIk5vdCBhIHZhbGlkIHN0b3AgYml0IHNpemU6ICVyIiAlIChzdG9wYml0cywpKQotICAgICAgICBzZWxmLl9zdG9wYml0cyA9IHN0b3BiaXRzCi0gICAgICAgIGlmIHNlbGYuX2lzT3Blbjogc2VsZi5fcmVjb25maWd1cmVQb3J0KCkKLQotICAgIGRlZiBnZXRTdG9wYml0cyhzZWxmKToKLSAgICAgICAgIiIiR2V0IHRoZSBjdXJyZW50IHN0b3AgYml0cyBzZXR0aW5nLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fc3RvcGJpdHMKLQotICAgIHN0b3BiaXRzID0gcHJvcGVydHkoZ2V0U3RvcGJpdHMsIHNldFN0b3BiaXRzLCBkb2M9IlN0b3AgYml0cyBzZXR0aW5nIikKLQotCi0gICAgZGVmIHNldFRpbWVvdXQoc2VsZiwgdGltZW91dCk6Ci0gICAgICAgICIiIkNoYW5nZSB0aW1lb3V0IHNldHRpbmcuIiIiCi0gICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdGltZW91dCArIDEgICAgICMgdGVzdCBpZiBpdCdzIGEgbnVtYmVyLCB3aWxsIHRocm93IGEgVHlwZUVycm9yIGlmIG5vdC4uLgotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJOb3QgYSB2YWxpZCB0aW1lb3V0OiAlciIgJSAodGltZW91dCwpKQotICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6IHJhaXNlIFZhbHVlRXJyb3IoIk5vdCBhIHZhbGlkIHRpbWVvdXQ6ICVyIiAlICh0aW1lb3V0LCkpCi0gICAgICAgIHNlbGYuX3RpbWVvdXQgPSB0aW1lb3V0Ci0gICAgICAgIGlmIHNlbGYuX2lzT3Blbjogc2VsZi5fcmVjb25maWd1cmVQb3J0KCkKLQotICAgIGRlZiBnZXRUaW1lb3V0KHNlbGYpOgotICAgICAgICAiIiJHZXQgdGhlIGN1cnJlbnQgdGltZW91dCBzZXR0aW5nLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fdGltZW91dAotCi0gICAgdGltZW91dCA9IHByb3BlcnR5KGdldFRpbWVvdXQsIHNldFRpbWVvdXQsIGRvYz0iVGltZW91dCBzZXR0aW5nIGZvciByZWFkKCkiKQotCi0KLSAgICBkZWYgc2V0V3JpdGVUaW1lb3V0KHNlbGYsIHRpbWVvdXQpOgotICAgICAgICAiIiJDaGFuZ2UgdGltZW91dCBzZXR0aW5nLiIiIgotICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6IHJhaXNlIFZhbHVlRXJyb3IoIk5vdCBhIHZhbGlkIHRpbWVvdXQ6ICVyIiAlICh0aW1lb3V0LCkpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdGltZW91dCArIDEgICAgICN0ZXN0IGlmIGl0J3MgYSBudW1iZXIsIHdpbGwgdGhyb3cgYSBUeXBlRXJyb3IgaWYgbm90Li4uCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk5vdCBhIHZhbGlkIHRpbWVvdXQ6ICVyIiAlIHRpbWVvdXQpCi0KLSAgICAgICAgc2VsZi5fd3JpdGVUaW1lb3V0ID0gdGltZW91dAotICAgICAgICBpZiBzZWxmLl9pc09wZW46IHNlbGYuX3JlY29uZmlndXJlUG9ydCgpCi0KLSAgICBkZWYgZ2V0V3JpdGVUaW1lb3V0KHNlbGYpOgotICAgICAgICAiIiJHZXQgdGhlIGN1cnJlbnQgdGltZW91dCBzZXR0aW5nLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fd3JpdGVUaW1lb3V0Ci0KLSAgICB3cml0ZVRpbWVvdXQgPSBwcm9wZXJ0eShnZXRXcml0ZVRpbWVvdXQsIHNldFdyaXRlVGltZW91dCwgZG9jPSJUaW1lb3V0IHNldHRpbmcgZm9yIHdyaXRlKCkiKQotCi0KLSAgICBkZWYgc2V0WG9uWG9mZihzZWxmLCB4b254b2ZmKToKLSAgICAgICAgIiIiQ2hhbmdlIFhPTi9YT0ZGIHNldHRpbmcuIiIiCi0gICAgICAgIHNlbGYuX3hvbnhvZmYgPSB4b254b2ZmCi0gICAgICAgIGlmIHNlbGYuX2lzT3Blbjogc2VsZi5fcmVjb25maWd1cmVQb3J0KCkKLQotICAgIGRlZiBnZXRYb25Yb2ZmKHNlbGYpOgotICAgICAgICAiIiJHZXQgdGhlIGN1cnJlbnQgWE9OL1hPRkYgc2V0dGluZy4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3hvbnhvZmYKLQotICAgIHhvbnhvZmYgPSBwcm9wZXJ0eShnZXRYb25Yb2ZmLCBzZXRYb25Yb2ZmLCBkb2M9IlhPTi9YT0ZGIHNldHRpbmciKQotCi0gICAgZGVmIHNldFJ0c0N0cyhzZWxmLCBydHNjdHMpOgotICAgICAgICAiIiJDaGFuZ2UgUlRTL0NUUyBmbG93IGNvbnRyb2wgc2V0dGluZy4iIiIKLSAgICAgICAgc2VsZi5fcnRzY3RzID0gcnRzY3RzCi0gICAgICAgIGlmIHNlbGYuX2lzT3Blbjogc2VsZi5fcmVjb25maWd1cmVQb3J0KCkKLQotICAgIGRlZiBnZXRSdHNDdHMoc2VsZik6Ci0gICAgICAgICIiIkdldCB0aGUgY3VycmVudCBSVFMvQ1RTIGZsb3cgY29udHJvbCBzZXR0aW5nLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fcnRzY3RzCi0KLSAgICBydHNjdHMgPSBwcm9wZXJ0eShnZXRSdHNDdHMsIHNldFJ0c0N0cywgZG9jPSJSVFMvQ1RTIGZsb3cgY29udHJvbCBzZXR0aW5nIikKLQotICAgIGRlZiBzZXREc3JEdHIoc2VsZiwgZHNyZHRyPU5vbmUpOgotICAgICAgICAiIiJDaGFuZ2UgRHNyRHRyIGZsb3cgY29udHJvbCBzZXR0aW5nLiIiIgotICAgICAgICBpZiBkc3JkdHIgaXMgTm9uZToKLSAgICAgICAgICAgICMgaWYgbm90IHNldCwga2VlcCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgZm9sbG93IHJ0c2N0cyBzZXR0aW5nCi0gICAgICAgICAgICBzZWxmLl9kc3JkdHIgPSBzZWxmLl9ydHNjdHMKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgaWYgZGVmaW5lZCBpbmRlcGVuZGVudGx5LCBmb2xsb3cgaXRzIHZhbHVlCi0gICAgICAgICAgICBzZWxmLl9kc3JkdHIgPSBkc3JkdHIKLSAgICAgICAgaWYgc2VsZi5faXNPcGVuOiBzZWxmLl9yZWNvbmZpZ3VyZVBvcnQoKQotCi0gICAgZGVmIGdldERzckR0cihzZWxmKToKLSAgICAgICAgIiIiR2V0IHRoZSBjdXJyZW50IERTUi9EVFIgZmxvdyBjb250cm9sIHNldHRpbmcuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9kc3JkdHIKLQotICAgIGRzcmR0ciA9IHByb3BlcnR5KGdldERzckR0ciwgc2V0RHNyRHRyLCAiRFNSL0RUUiBmbG93IGNvbnRyb2wgc2V0dGluZyIpCi0KLSAgICBkZWYgc2V0SW50ZXJDaGFyVGltZW91dChzZWxmLCBpbnRlckNoYXJUaW1lb3V0KToKLSAgICAgICAgIiIiQ2hhbmdlIGludGVyLWNoYXJhY3RlciB0aW1lb3V0IHNldHRpbmcuIiIiCi0gICAgICAgIGlmIGludGVyQ2hhclRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBpZiBpbnRlckNoYXJUaW1lb3V0IDwgMDogcmFpc2UgVmFsdWVFcnJvcigiTm90IGEgdmFsaWQgdGltZW91dDogJXIiICUgaW50ZXJDaGFyVGltZW91dCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbnRlckNoYXJUaW1lb3V0ICsgMSAgICAgIyB0ZXN0IGlmIGl0J3MgYSBudW1iZXIsIHdpbGwgdGhyb3cgYSBUeXBlRXJyb3IgaWYgbm90Li4uCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk5vdCBhIHZhbGlkIHRpbWVvdXQ6ICVyIiAlIGludGVyQ2hhclRpbWVvdXQpCi0KLSAgICAgICAgc2VsZi5faW50ZXJDaGFyVGltZW91dCA9IGludGVyQ2hhclRpbWVvdXQKLSAgICAgICAgaWYgc2VsZi5faXNPcGVuOiBzZWxmLl9yZWNvbmZpZ3VyZVBvcnQoKQotCi0gICAgZGVmIGdldEludGVyQ2hhclRpbWVvdXQoc2VsZik6Ci0gICAgICAgICIiIkdldCB0aGUgY3VycmVudCBpbnRlci1jaGFyYWN0ZXIgdGltZW91dCBzZXR0aW5nLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5faW50ZXJDaGFyVGltZW91dAotCi0gICAgaW50ZXJDaGFyVGltZW91dCA9IHByb3BlcnR5KGdldEludGVyQ2hhclRpbWVvdXQsIHNldEludGVyQ2hhclRpbWVvdXQsIGRvYz0iSW50ZXItY2hhcmFjdGVyIHRpbWVvdXQgc2V0dGluZyBmb3IgcmVhZCgpIikKLQotICAgICMgIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0KLQotICAgIF9TRVRUSU5HUyA9ICgnYmF1ZHJhdGUnLCAnYnl0ZXNpemUnLCAncGFyaXR5JywgJ3N0b3BiaXRzJywgJ3hvbnhvZmYnLAotICAgICAgICAgICAgJ2RzcmR0cicsICdydHNjdHMnLCAndGltZW91dCcsICd3cml0ZVRpbWVvdXQnLCAnaW50ZXJDaGFyVGltZW91dCcpCi0KLSAgICBkZWYgZ2V0U2V0dGluZ3NEaWN0KHNlbGYpOgotICAgICAgICAiIiJHZXQgY3VycmVudCBwb3J0IHNldHRpbmdzIGFzIGEgZGljdGlvbmFyeS4gRm9yIHVzZSB3aXRoCi0gICAgICAgIGFwcGx5U2V0dGluZ3NEaWN0IiIiCi0gICAgICAgIHJldHVybiBkaWN0KFsoa2V5LCBnZXRhdHRyKHNlbGYsICdfJytrZXkpKSBmb3Iga2V5IGluIHNlbGYuX1NFVFRJTkdTXSkKLQotICAgIGRlZiBhcHBseVNldHRpbmdzRGljdChzZWxmLCBkKToKLSAgICAgICAgIiIiYXBwbHkgc3RvcmVkIHNldHRpbmdzIGZyb20gYSBkaWN0aW9uYXJ5IHJldHVybmVkIGZyb20KLSAgICAgICAgZ2V0U2V0dGluZ3NEaWN0LiBpdCdzIGFsbG93ZWQgdG8gZGVsZXRlIGtleXMgZnJvbSB0aGUgZGljdGlvbmFyeS4gdGhlc2UKLSAgICAgICAgdmFsdWVzIHdpbGwgc2ltcGx5IGxlZnQgdW5jaGFuZ2VkLiIiIgotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX1NFVFRJTkdTOgotICAgICAgICAgICAgaWYgZFtrZXldICE9IGdldGF0dHIoc2VsZiwgJ18nK2tleSk6ICAgIyBjaGVjayBhZ2FpbnN0IGludGVybmFsICJfIiB2YWx1ZQotICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCBkW2tleV0pICAgICAgICAgICMgc2V0IG5vbiAiXyIgdmFsdWUgdG8gdXNlIHByb3BlcnRpZXMgd3JpdGUgZnVuY3Rpb24KLQotICAgICMgIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0KLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgIiIiU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHBvcnQgc2V0dGluZ3MgYW5kIGl0cyBzdGF0ZS4iIiIKLSAgICAgICAgcmV0dXJuICIlczxpZD0weCV4LCBvcGVuPSVzPihwb3J0PSVyLCBiYXVkcmF0ZT0lciwgYnl0ZXNpemU9JXIsIHBhcml0eT0lciwgc3RvcGJpdHM9JXIsIHRpbWVvdXQ9JXIsIHhvbnhvZmY9JXIsIHJ0c2N0cz0lciwgZHNyZHRyPSVyKSIgJSAoCi0gICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKLSAgICAgICAgICAgIGlkKHNlbGYpLAotICAgICAgICAgICAgc2VsZi5faXNPcGVuLAotICAgICAgICAgICAgc2VsZi5wb3J0c3RyLAotICAgICAgICAgICAgc2VsZi5iYXVkcmF0ZSwKLSAgICAgICAgICAgIHNlbGYuYnl0ZXNpemUsCi0gICAgICAgICAgICBzZWxmLnBhcml0eSwKLSAgICAgICAgICAgIHNlbGYuc3RvcGJpdHMsCi0gICAgICAgICAgICBzZWxmLnRpbWVvdXQsCi0gICAgICAgICAgICBzZWxmLnhvbnhvZmYsCi0gICAgICAgICAgICBzZWxmLnJ0c2N0cywKLSAgICAgICAgICAgIHNlbGYuZHNyZHRyLAotICAgICAgICApCi0KLQotICAgICMgIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0KLSAgICAjIGNvbXBhdGliaWxpdHkgd2l0aCBpbyBsaWJyYXJ5Ci0KLSAgICBkZWYgcmVhZGFibGUoc2VsZik6IHJldHVybiBUcnVlCi0gICAgZGVmIHdyaXRhYmxlKHNlbGYpOiByZXR1cm4gVHJ1ZQotICAgIGRlZiBzZWVrYWJsZShzZWxmKTogcmV0dXJuIEZhbHNlCi0gICAgZGVmIHJlYWRpbnRvKHNlbGYsIGIpOgotICAgICAgICBkYXRhID0gc2VsZi5yZWFkKGxlbihiKSkKLSAgICAgICAgbiA9IGxlbihkYXRhKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBiWzpuXSA9IGRhdGEKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZXJyOgotICAgICAgICAgICAgaW1wb3J0IGFycmF5Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShiLCBhcnJheS5hcnJheSk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXJyCi0gICAgICAgICAgICBiWzpuXSA9IGFycmF5LmFycmF5KCdiJywgZGF0YSkKLSAgICAgICAgcmV0dXJuIG4KLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGltcG9ydCBzeXMKLSAgICBzID0gU2VyaWFsQmFzZSgpCi0gICAgc3lzLnN0ZG91dC53cml0ZSgncG9ydCBuYW1lOiAgJXNcbicgJSBzLnBvcnRzdHIpCi0gICAgc3lzLnN0ZG91dC53cml0ZSgnYmF1ZCByYXRlczogJXNcbicgJSBzLmdldFN1cHBvcnRlZEJhdWRyYXRlcygpKQotICAgIHN5cy5zdGRvdXQud3JpdGUoJ2J5dGUgc2l6ZXM6ICVzXG4nICUgcy5nZXRTdXBwb3J0ZWRCeXRlU2l6ZXMoKSkKLSAgICBzeXMuc3Rkb3V0LndyaXRlKCdwYXJpdGllczogICAlc1xuJyAlIHMuZ2V0U3VwcG9ydGVkUGFyaXRpZXMoKSkKLSAgICBzeXMuc3Rkb3V0LndyaXRlKCdzdG9wIGJpdHM6ICAlc1xuJyAlIHMuZ2V0U3VwcG9ydGVkU3RvcGJpdHMoKSkKLSAgICBzeXMuc3Rkb3V0LndyaXRlKCclc1xuJyAlIHMpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvc2VyaWFsd2luMzIucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvc2VyaWFsd2luMzIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZGQ5NTMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3NlcmlhbHdpbjMyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDYxICswLDAgQEAKLSMhIHB5dGhvbgotIyBQeXRob24gU2VyaWFsIFBvcnQgRXh0ZW5zaW9uIGZvciBXaW4zMiwgTGludXgsIEJTRCwgSnl0aG9uCi0jIHNlcmlhbCBkcml2ZXIgZm9yIHdpbjMyCi0jIHNlZSBfX2luaXRfXy5weQotIwotIyAoQykgMjAwMS0yMDExIENocmlzIExpZWNodGkgPGNsaWVjaHRpQGdteC5uZXQ+Ci0jIHRoaXMgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYSBmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHNlZSBsaWNlbnNlLnR4dAotIwotIyBJbml0aWFsIHBhdGNoIHRvIHVzZSBjdHlwZXMgYnkgR2lvdmFubmkgQmFqbyA8cmFza3lAZGV2ZWxlci5jb20+Ci0KLWltcG9ydCBjdHlwZXMKLWZyb20gc2VyaWFsIGltcG9ydCB3aW4zMgotCi1mcm9tIHNlcmlhbC5zZXJpYWx1dGlsIGltcG9ydCAqCi0KLQotZGVmIGRldmljZShwb3J0bnVtKToKLSAgICAiIiJUdXJuIGEgcG9ydCBudW1iZXIgaW50byBhIGRldmljZSBuYW1lIiIiCi0gICAgcmV0dXJuICdDT00lZCcgJSAocG9ydG51bSsxKSAjIG51bWJlcnMgYXJlIHRyYW5zZm9ybWVkIHRvIGEgc3RyaW5nCi0KLQotY2xhc3MgV2luMzJTZXJpYWwoU2VyaWFsQmFzZSk6Ci0gICAgIiIiU2VyaWFsIHBvcnQgaW1wbGVtZW50YXRpb24gZm9yIFdpbjMyIGJhc2VkIG9uIGN0eXBlcy4iIiIKLQotICAgIEJBVURSQVRFUyA9ICg1MCwgNzUsIDExMCwgMTM0LCAxNTAsIDIwMCwgMzAwLCA2MDAsIDEyMDAsIDE4MDAsIDI0MDAsIDQ4MDAsCi0gICAgICAgICAgICAgICAgIDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBzZWxmLmhDb21Qb3J0ID0gTm9uZQotICAgICAgICBzZWxmLl9vdmVybGFwcGVkUmVhZCA9IE5vbmUKLSAgICAgICAgc2VsZi5fb3ZlcmxhcHBlZFdyaXRlID0gTm9uZQotICAgICAgICBzZWxmLl9ydHNUb2dnbGUgPSBGYWxzZQotCi0gICAgICAgIHNlbGYuX3J0c1N0YXRlID0gd2luMzIuUlRTX0NPTlRST0xfRU5BQkxFCi0gICAgICAgIHNlbGYuX2R0clN0YXRlID0gd2luMzIuRFRSX0NPTlRST0xfRU5BQkxFCi0KLQotICAgICAgICBTZXJpYWxCYXNlLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKLQotICAgIGRlZiBvcGVuKHNlbGYpOgotICAgICAgICAiIiJPcGVuIHBvcnQgd2l0aCBjdXJyZW50IHNldHRpbmdzLiBUaGlzIG1heSB0aHJvdyBhIFNlcmlhbEV4Y2VwdGlvbgotICAgICAgICAgICBpZiB0aGUgcG9ydCBjYW5ub3QgYmUgb3BlbmVkLiIiIgotICAgICAgICBpZiBzZWxmLl9wb3J0IGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oIlBvcnQgbXVzdCBiZSBjb25maWd1cmVkIGJlZm9yZSBpdCBjYW4gYmUgdXNlZC4iKQotICAgICAgICBpZiBzZWxmLl9pc09wZW46Ci0gICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oIlBvcnQgaXMgYWxyZWFkeSBvcGVuLiIpCi0gICAgICAgICMgdGhlICJcXC5cQ09NeCIgZm9ybWF0IGlzIHJlcXVpcmVkIGZvciBkZXZpY2VzIG90aGVyIHRoYW4gQ09NMS1DT004Ci0gICAgICAgICMgbm90IGFsbCB2ZXJzaW9ucyBvZiB3aW5kb3dzIHNlZW0gdG8gc3VwcG9ydCB0aGlzIHByb3Blcmx5Ci0gICAgICAgICMgc28gdGhhdCB0aGUgZmlyc3QgZmV3IHBvcnRzIGFyZSB1c2VkIHdpdGggdGhlIERPUyBkZXZpY2UgbmFtZQotICAgICAgICBwb3J0ID0gc2VsZi5wb3J0c3RyCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIHBvcnQudXBwZXIoKS5zdGFydHN3aXRoKCdDT00nKSBhbmQgaW50KHBvcnRbMzpdKSA+IDg6Ci0gICAgICAgICAgICAgICAgcG9ydCA9ICdcXFxcLlxcJyArIHBvcnQKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAjIGZvciBsaWtlIENPTW5vdGFudW1iZXIKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5oQ29tUG9ydCA9IHdpbjMyLkNyZWF0ZUZpbGUocG9ydCwKLSAgICAgICAgICAgICAgIHdpbjMyLkdFTkVSSUNfUkVBRCB8IHdpbjMyLkdFTkVSSUNfV1JJVEUsCi0gICAgICAgICAgICAgICAwLCAjIGV4Y2x1c2l2ZSBhY2Nlc3MKLSAgICAgICAgICAgICAgIE5vbmUsICMgbm8gc2VjdXJpdHkKLSAgICAgICAgICAgICAgIHdpbjMyLk9QRU5fRVhJU1RJTkcsCi0gICAgICAgICAgICAgICB3aW4zMi5GSUxFX0FUVFJJQlVURV9OT1JNQUwgfCB3aW4zMi5GSUxFX0ZMQUdfT1ZFUkxBUFBFRCwKLSAgICAgICAgICAgICAgIDApCi0gICAgICAgIGlmIHNlbGYuaENvbVBvcnQgPT0gd2luMzIuSU5WQUxJRF9IQU5ETEVfVkFMVUU6Ci0gICAgICAgICAgICBzZWxmLmhDb21Qb3J0ID0gTm9uZSAgICAjICdjYXVzZSBfX2RlbF9fIGlzIGNhbGxlZCBhbnl3YXkKLSAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbigiY291bGQgbm90IG9wZW4gcG9ydCAlcjogJXIiICUgKHNlbGYucG9ydHN0ciwgY3R5cGVzLldpbkVycm9yKCkpKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX292ZXJsYXBwZWRSZWFkID0gd2luMzIuT1ZFUkxBUFBFRCgpCi0gICAgICAgICAgICBzZWxmLl9vdmVybGFwcGVkUmVhZC5oRXZlbnQgPSB3aW4zMi5DcmVhdGVFdmVudChOb25lLCAxLCAwLCBOb25lKQotICAgICAgICAgICAgc2VsZi5fb3ZlcmxhcHBlZFdyaXRlID0gd2luMzIuT1ZFUkxBUFBFRCgpCi0gICAgICAgICAgICAjfiBzZWxmLl9vdmVybGFwcGVkV3JpdGUuaEV2ZW50ID0gd2luMzIuQ3JlYXRlRXZlbnQoTm9uZSwgMSwgMCwgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuX292ZXJsYXBwZWRXcml0ZS5oRXZlbnQgPSB3aW4zMi5DcmVhdGVFdmVudChOb25lLCAwLCAwLCBOb25lKQotCi0gICAgICAgICAgICAjIFNldHVwIGEgNGsgYnVmZmVyCi0gICAgICAgICAgICB3aW4zMi5TZXR1cENvbW0oc2VsZi5oQ29tUG9ydCwgNDA5NiwgNDA5NikKLQotICAgICAgICAgICAgIyBTYXZlIG9yaWdpbmFsIHRpbWVvdXQgdmFsdWVzOgotICAgICAgICAgICAgc2VsZi5fb3JnVGltZW91dHMgPSB3aW4zMi5DT01NVElNRU9VVFMoKQotICAgICAgICAgICAgd2luMzIuR2V0Q29tbVRpbWVvdXRzKHNlbGYuaENvbVBvcnQsIGN0eXBlcy5ieXJlZihzZWxmLl9vcmdUaW1lb3V0cykpCi0KLSAgICAgICAgICAgIHNlbGYuX3JlY29uZmlndXJlUG9ydCgpCi0KLSAgICAgICAgICAgICMgQ2xlYXIgYnVmZmVyczoKLSAgICAgICAgICAgICMgUmVtb3ZlIGFueXRoaW5nIHRoYXQgd2FzIHRoZXJlCi0gICAgICAgICAgICB3aW4zMi5QdXJnZUNvbW0oc2VsZi5oQ29tUG9ydCwKLSAgICAgICAgICAgICAgICAgICAgd2luMzIuUFVSR0VfVFhDTEVBUiB8IHdpbjMyLlBVUkdFX1RYQUJPUlQgfAotICAgICAgICAgICAgICAgICAgICB3aW4zMi5QVVJHRV9SWENMRUFSIHwgd2luMzIuUFVSR0VfUlhBQk9SVCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAjIGlnbm9yZSBhbnkgZXhjZXB0aW9uIHdoZW4gY2xvc2luZyB0aGUgcG9ydAotICAgICAgICAgICAgICAgICMgYWxzbyB0byBrZWVwIG9yaWdpbmFsIGV4Y2VwdGlvbiB0aGF0IGhhcHBlbmVkIHdoZW4gc2V0dGluZyB1cAotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHNlbGYuaENvbVBvcnQgPSBOb25lCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5faXNPcGVuID0gVHJ1ZQotCi0KLSAgICBkZWYgX3JlY29uZmlndXJlUG9ydChzZWxmKToKLSAgICAgICAgIiIiU2V0IGNvbW11bmljYXRpb24gcGFyYW1ldGVycyBvbiBvcGVuZWQgcG9ydC4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuaENvbVBvcnQ6Ci0gICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oIkNhbiBvbmx5IG9wZXJhdGUgb24gYSB2YWxpZCBwb3J0IGhhbmRsZSIpCi0KLSAgICAgICAgIyBTZXQgV2luZG93cyB0aW1lb3V0IHZhbHVlcwotICAgICAgICAjIHRpbWVvdXRzIGlzIGEgdHVwbGUgd2l0aCB0aGUgZm9sbG93aW5nIGl0ZW1zOgotICAgICAgICAjIChSZWFkSW50ZXJ2YWxUaW1lb3V0LFJlYWRUb3RhbFRpbWVvdXRNdWx0aXBsaWVyLAotICAgICAgICAjICBSZWFkVG90YWxUaW1lb3V0Q29uc3RhbnQsV3JpdGVUb3RhbFRpbWVvdXRNdWx0aXBsaWVyLAotICAgICAgICAjICBXcml0ZVRvdGFsVGltZW91dENvbnN0YW50KQotICAgICAgICBpZiBzZWxmLl90aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICB0aW1lb3V0cyA9ICgwLCAwLCAwLCAwLCAwKQotICAgICAgICBlbGlmIHNlbGYuX3RpbWVvdXQgPT0gMDoKLSAgICAgICAgICAgIHRpbWVvdXRzID0gKHdpbjMyLk1BWERXT1JELCAwLCAwLCAwLCAwKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdGltZW91dHMgPSAoMCwgMCwgaW50KHNlbGYuX3RpbWVvdXQqMTAwMCksIDAsIDApCi0gICAgICAgIGlmIHNlbGYuX3RpbWVvdXQgIT0gMCBhbmQgc2VsZi5faW50ZXJDaGFyVGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRpbWVvdXRzID0gKGludChzZWxmLl9pbnRlckNoYXJUaW1lb3V0ICogMTAwMCksKSArIHRpbWVvdXRzWzE6XQotCi0gICAgICAgIGlmIHNlbGYuX3dyaXRlVGltZW91dCBpcyBOb25lOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbGlmIHNlbGYuX3dyaXRlVGltZW91dCA9PSAwOgotICAgICAgICAgICAgdGltZW91dHMgPSB0aW1lb3V0c1s6LTJdICsgKDAsIHdpbjMyLk1BWERXT1JEKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdGltZW91dHMgPSB0aW1lb3V0c1s6LTJdICsgKDAsIGludChzZWxmLl93cml0ZVRpbWVvdXQqMTAwMCkpCi0gICAgICAgIHdpbjMyLlNldENvbW1UaW1lb3V0cyhzZWxmLmhDb21Qb3J0LCBjdHlwZXMuYnlyZWYod2luMzIuQ09NTVRJTUVPVVRTKCp0aW1lb3V0cykpKQotCi0gICAgICAgIHdpbjMyLlNldENvbW1NYXNrKHNlbGYuaENvbVBvcnQsIHdpbjMyLkVWX0VSUikKLQotICAgICAgICAjIFNldHVwIHRoZSBjb25uZWN0aW9uIGluZm8uCi0gICAgICAgICMgR2V0IHN0YXRlIGFuZCBtb2RpZnkgaXQ6Ci0gICAgICAgIGNvbURDQiA9IHdpbjMyLkRDQigpCi0gICAgICAgIHdpbjMyLkdldENvbW1TdGF0ZShzZWxmLmhDb21Qb3J0LCBjdHlwZXMuYnlyZWYoY29tRENCKSkKLSAgICAgICAgY29tRENCLkJhdWRSYXRlID0gc2VsZi5fYmF1ZHJhdGUKLQotICAgICAgICBpZiBzZWxmLl9ieXRlc2l6ZSA9PSBGSVZFQklUUzoKLSAgICAgICAgICAgIGNvbURDQi5CeXRlU2l6ZSAgICAgPSA1Ci0gICAgICAgIGVsaWYgc2VsZi5fYnl0ZXNpemUgPT0gU0lYQklUUzoKLSAgICAgICAgICAgIGNvbURDQi5CeXRlU2l6ZSAgICAgPSA2Ci0gICAgICAgIGVsaWYgc2VsZi5fYnl0ZXNpemUgPT0gU0VWRU5CSVRTOgotICAgICAgICAgICAgY29tRENCLkJ5dGVTaXplICAgICA9IDcKLSAgICAgICAgZWxpZiBzZWxmLl9ieXRlc2l6ZSA9PSBFSUdIVEJJVFM6Ci0gICAgICAgICAgICBjb21EQ0IuQnl0ZVNpemUgICAgID0gOAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5zdXBwb3J0ZWQgbnVtYmVyIG9mIGRhdGEgYml0czogJXIiICUgc2VsZi5fYnl0ZXNpemUpCi0KLSAgICAgICAgaWYgc2VsZi5fcGFyaXR5ID09IFBBUklUWV9OT05FOgotICAgICAgICAgICAgY29tRENCLlBhcml0eSAgICAgICA9IHdpbjMyLk5PUEFSSVRZCi0gICAgICAgICAgICBjb21EQ0IuZlBhcml0eSAgICAgID0gMCAjIERpc2FibGUgUGFyaXR5IENoZWNrCi0gICAgICAgIGVsaWYgc2VsZi5fcGFyaXR5ID09IFBBUklUWV9FVkVOOgotICAgICAgICAgICAgY29tRENCLlBhcml0eSAgICAgICA9IHdpbjMyLkVWRU5QQVJJVFkKLSAgICAgICAgICAgIGNvbURDQi5mUGFyaXR5ICAgICAgPSAxICMgRW5hYmxlIFBhcml0eSBDaGVjawotICAgICAgICBlbGlmIHNlbGYuX3Bhcml0eSA9PSBQQVJJVFlfT0REOgotICAgICAgICAgICAgY29tRENCLlBhcml0eSAgICAgICA9IHdpbjMyLk9ERFBBUklUWQotICAgICAgICAgICAgY29tRENCLmZQYXJpdHkgICAgICA9IDEgIyBFbmFibGUgUGFyaXR5IENoZWNrCi0gICAgICAgIGVsaWYgc2VsZi5fcGFyaXR5ID09IFBBUklUWV9NQVJLOgotICAgICAgICAgICAgY29tRENCLlBhcml0eSAgICAgICA9IHdpbjMyLk1BUktQQVJJVFkKLSAgICAgICAgICAgIGNvbURDQi5mUGFyaXR5ICAgICAgPSAxICMgRW5hYmxlIFBhcml0eSBDaGVjawotICAgICAgICBlbGlmIHNlbGYuX3Bhcml0eSA9PSBQQVJJVFlfU1BBQ0U6Ci0gICAgICAgICAgICBjb21EQ0IuUGFyaXR5ICAgICAgID0gd2luMzIuU1BBQ0VQQVJJVFkKLSAgICAgICAgICAgIGNvbURDQi5mUGFyaXR5ICAgICAgPSAxICMgRW5hYmxlIFBhcml0eSBDaGVjawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5zdXBwb3J0ZWQgcGFyaXR5IG1vZGU6ICVyIiAlIHNlbGYuX3Bhcml0eSkKLQotICAgICAgICBpZiBzZWxmLl9zdG9wYml0cyA9PSBTVE9QQklUU19PTkU6Ci0gICAgICAgICAgICBjb21EQ0IuU3RvcEJpdHMgICAgID0gd2luMzIuT05FU1RPUEJJVAotICAgICAgICBlbGlmIHNlbGYuX3N0b3BiaXRzID09IFNUT1BCSVRTX09ORV9QT0lOVF9GSVZFOgotICAgICAgICAgICAgY29tRENCLlN0b3BCaXRzICAgICA9IHdpbjMyLk9ORTVTVE9QQklUUwotICAgICAgICBlbGlmIHNlbGYuX3N0b3BiaXRzID09IFNUT1BCSVRTX1RXTzoKLSAgICAgICAgICAgIGNvbURDQi5TdG9wQml0cyAgICAgPSB3aW4zMi5UV09TVE9QQklUUwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5zdXBwb3J0ZWQgbnVtYmVyIG9mIHN0b3AgYml0czogJXIiICUgc2VsZi5fc3RvcGJpdHMpCi0KLSAgICAgICAgY29tRENCLmZCaW5hcnkgICAgICAgICAgPSAxICMgRW5hYmxlIEJpbmFyeSBUcmFuc21pc3Npb24KLSAgICAgICAgIyBDaGFyLiB3LyBQYXJpdHktRXJyIGFyZSByZXBsYWNlZCB3aXRoIDB4ZmYgKGlmIGZFcnJvckNoYXIgaXMgc2V0IHRvIFRSVUUpCi0gICAgICAgIGlmIHNlbGYuX3J0c2N0czoKLSAgICAgICAgICAgIGNvbURDQi5mUnRzQ29udHJvbCAgPSB3aW4zMi5SVFNfQ09OVFJPTF9IQU5EU0hBS0UKLSAgICAgICAgZWxpZiBzZWxmLl9ydHNUb2dnbGU6Ci0gICAgICAgICAgICBjb21EQ0IuZlJ0c0NvbnRyb2wgID0gd2luMzIuUlRTX0NPTlRST0xfVE9HR0xFCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb21EQ0IuZlJ0c0NvbnRyb2wgID0gc2VsZi5fcnRzU3RhdGUKLSAgICAgICAgaWYgc2VsZi5fZHNyZHRyOgotICAgICAgICAgICAgY29tRENCLmZEdHJDb250cm9sICA9IHdpbjMyLkRUUl9DT05UUk9MX0hBTkRTSEFLRQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29tRENCLmZEdHJDb250cm9sICA9IHNlbGYuX2R0clN0YXRlCi0KLSAgICAgICAgaWYgc2VsZi5fcnRzVG9nZ2xlOgotICAgICAgICAgICAgY29tRENCLmZPdXR4Q3RzRmxvdyAgICAgPSAwCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb21EQ0IuZk91dHhDdHNGbG93ICAgICA9IHNlbGYuX3J0c2N0cwotICAgICAgICBjb21EQ0IuZk91dHhEc3JGbG93ICAgICA9IHNlbGYuX2RzcmR0cgotICAgICAgICBjb21EQ0IuZk91dFggICAgICAgICAgICA9IHNlbGYuX3hvbnhvZmYKLSAgICAgICAgY29tRENCLmZJblggICAgICAgICAgICAgPSBzZWxmLl94b254b2ZmCi0gICAgICAgIGNvbURDQi5mTnVsbCAgICAgICAgICAgID0gMAotICAgICAgICBjb21EQ0IuZkVycm9yQ2hhciAgICAgICA9IDAKLSAgICAgICAgY29tRENCLmZBYm9ydE9uRXJyb3IgICAgPSAwCi0gICAgICAgIGNvbURDQi5Yb25DaGFyICAgICAgICAgID0gWE9OCi0gICAgICAgIGNvbURDQi5Yb2ZmQ2hhciAgICAgICAgID0gWE9GRgotCi0gICAgICAgIGlmIG5vdCB3aW4zMi5TZXRDb21tU3RhdGUoc2VsZi5oQ29tUG9ydCwgY3R5cGVzLmJ5cmVmKGNvbURDQikpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IGNvbmZpZ3VyZSBwb3J0LCBzb21lIHNldHRpbmcgd2FzIHdyb25nLiBPcmlnaW5hbCBtZXNzYWdlOiAlciIgJSBjdHlwZXMuV2luRXJyb3IoKSkKLQotICAgICN+IGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICAjfiBzZWxmLmNsb3NlKCkKLQotCi0gICAgZGVmIF9jbG9zZShzZWxmKToKLSAgICAgICAgIiIiaW50ZXJuYWwgY2xvc2UgcG9ydCBoZWxwZXIiIiIKLSAgICAgICAgaWYgc2VsZi5oQ29tUG9ydDoKLSAgICAgICAgICAgICMgUmVzdG9yZSBvcmlnaW5hbCB0aW1lb3V0IHZhbHVlczoKLSAgICAgICAgICAgIHdpbjMyLlNldENvbW1UaW1lb3V0cyhzZWxmLmhDb21Qb3J0LCBzZWxmLl9vcmdUaW1lb3V0cykKLSAgICAgICAgICAgICMgQ2xvc2UgQ09NLVBvcnQ6Ci0gICAgICAgICAgICB3aW4zMi5DbG9zZUhhbmRsZShzZWxmLmhDb21Qb3J0KQotICAgICAgICAgICAgaWYgc2VsZi5fb3ZlcmxhcHBlZFJlYWQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgd2luMzIuQ2xvc2VIYW5kbGUoc2VsZi5fb3ZlcmxhcHBlZFJlYWQuaEV2ZW50KQotICAgICAgICAgICAgICAgIHNlbGYuX292ZXJsYXBwZWRSZWFkID0gTm9uZQotICAgICAgICAgICAgaWYgc2VsZi5fb3ZlcmxhcHBlZFdyaXRlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHdpbjMyLkNsb3NlSGFuZGxlKHNlbGYuX292ZXJsYXBwZWRXcml0ZS5oRXZlbnQpCi0gICAgICAgICAgICAgICAgc2VsZi5fb3ZlcmxhcHBlZFdyaXRlID0gTm9uZQotICAgICAgICAgICAgc2VsZi5oQ29tUG9ydCA9IE5vbmUKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgIiIiQ2xvc2UgcG9ydCIiIgotICAgICAgICBpZiBzZWxmLl9pc09wZW46Ci0gICAgICAgICAgICBzZWxmLl9jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl9pc09wZW4gPSBGYWxzZQotCi0gICAgZGVmIG1ha2VEZXZpY2VOYW1lKHNlbGYsIHBvcnQpOgotICAgICAgICByZXR1cm4gZGV2aWNlKHBvcnQpCi0KLSAgICAjICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtCi0KLSAgICBkZWYgaW5XYWl0aW5nKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGN1cnJlbnRseSBpbiB0aGUgaW5wdXQgYnVmZmVyLiIiIgotICAgICAgICBmbGFncyA9IHdpbjMyLkRXT1JEKCkKLSAgICAgICAgY29tc3RhdCA9IHdpbjMyLkNPTVNUQVQoKQotICAgICAgICBpZiBub3Qgd2luMzIuQ2xlYXJDb21tRXJyb3Ioc2VsZi5oQ29tUG9ydCwgY3R5cGVzLmJ5cmVmKGZsYWdzKSwgY3R5cGVzLmJ5cmVmKGNvbXN0YXQpKToKLSAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbignY2FsbCB0byBDbGVhckNvbW1FcnJvciBmYWlsZWQnKQotICAgICAgICByZXR1cm4gY29tc3RhdC5jYkluUXVlCi0KLSAgICBkZWYgcmVhZChzZWxmLCBzaXplPTEpOgotICAgICAgICAiIiJSZWFkIHNpemUgYnl0ZXMgZnJvbSB0aGUgc2VyaWFsIHBvcnQuIElmIGEgdGltZW91dCBpcyBzZXQgaXQgbWF5Ci0gICAgICAgICAgIHJldHVybiBsZXNzIGNoYXJhY3RlcnMgYXMgcmVxdWVzdGVkLiBXaXRoIG5vIHRpbWVvdXQgaXQgd2lsbCBibG9jawotICAgICAgICAgICB1bnRpbCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcyBpcyByZWFkLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5oQ29tUG9ydDogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBpZiBzaXplID4gMDoKLSAgICAgICAgICAgIHdpbjMyLlJlc2V0RXZlbnQoc2VsZi5fb3ZlcmxhcHBlZFJlYWQuaEV2ZW50KQotICAgICAgICAgICAgZmxhZ3MgPSB3aW4zMi5EV09SRCgpCi0gICAgICAgICAgICBjb21zdGF0ID0gd2luMzIuQ09NU1RBVCgpCi0gICAgICAgICAgICBpZiBub3Qgd2luMzIuQ2xlYXJDb21tRXJyb3Ioc2VsZi5oQ29tUG9ydCwgY3R5cGVzLmJ5cmVmKGZsYWdzKSwgY3R5cGVzLmJ5cmVmKGNvbXN0YXQpKToKLSAgICAgICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oJ2NhbGwgdG8gQ2xlYXJDb21tRXJyb3IgZmFpbGVkJykKLSAgICAgICAgICAgIGlmIHNlbGYudGltZW91dCA9PSAwOgotICAgICAgICAgICAgICAgIG4gPSBtaW4oY29tc3RhdC5jYkluUXVlLCBzaXplKQotICAgICAgICAgICAgICAgIGlmIG4gPiAwOgotICAgICAgICAgICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIobikKLSAgICAgICAgICAgICAgICAgICAgcmMgPSB3aW4zMi5EV09SRCgpCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IHdpbjMyLlJlYWRGaWxlKHNlbGYuaENvbVBvcnQsIGJ1ZiwgbiwgY3R5cGVzLmJ5cmVmKHJjKSwgY3R5cGVzLmJ5cmVmKHNlbGYuX292ZXJsYXBwZWRSZWFkKSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGVyciBhbmQgd2luMzIuR2V0TGFzdEVycm9yKCkgIT0gd2luMzIuRVJST1JfSU9fUEVORElORzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbigiUmVhZEZpbGUgZmFpbGVkICglcikiICUgY3R5cGVzLldpbkVycm9yKCkpCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IHdpbjMyLldhaXRGb3JTaW5nbGVPYmplY3Qoc2VsZi5fb3ZlcmxhcHBlZFJlYWQuaEV2ZW50LCB3aW4zMi5JTkZJTklURSkKLSAgICAgICAgICAgICAgICAgICAgcmVhZCA9IGJ1Zi5yYXdbOnJjLnZhbHVlXQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJlYWQgPSBieXRlcygpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcihzaXplKQotICAgICAgICAgICAgICAgIHJjID0gd2luMzIuRFdPUkQoKQotICAgICAgICAgICAgICAgIGVyciA9IHdpbjMyLlJlYWRGaWxlKHNlbGYuaENvbVBvcnQsIGJ1Ziwgc2l6ZSwgY3R5cGVzLmJ5cmVmKHJjKSwgY3R5cGVzLmJ5cmVmKHNlbGYuX292ZXJsYXBwZWRSZWFkKSkKLSAgICAgICAgICAgICAgICBpZiBub3QgZXJyIGFuZCB3aW4zMi5HZXRMYXN0RXJyb3IoKSAhPSB3aW4zMi5FUlJPUl9JT19QRU5ESU5HOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oIlJlYWRGaWxlIGZhaWxlZCAoJXIpIiAlIGN0eXBlcy5XaW5FcnJvcigpKQotICAgICAgICAgICAgICAgIGVyciA9IHdpbjMyLkdldE92ZXJsYXBwZWRSZXN1bHQoc2VsZi5oQ29tUG9ydCwgY3R5cGVzLmJ5cmVmKHNlbGYuX292ZXJsYXBwZWRSZWFkKSwgY3R5cGVzLmJ5cmVmKHJjKSwgVHJ1ZSkKLSAgICAgICAgICAgICAgICByZWFkID0gYnVmLnJhd1s6cmMudmFsdWVdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZWFkID0gYnl0ZXMoKQotICAgICAgICByZXR1cm4gYnl0ZXMocmVhZCkKLQotICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiT3V0cHV0IHRoZSBnaXZlbiBzdHJpbmcgb3ZlciB0aGUgc2VyaWFsIHBvcnQuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLmhDb21Qb3J0OiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgICN+IGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5KSk6Ci0gICAgICAgICAgICAjfiByYWlzZSBUeXBlRXJyb3IoJ2V4cGVjdGVkICVzIG9yIGJ5dGVhcnJheSwgZ290ICVzJyAlIChieXRlcywgdHlwZShkYXRhKSkpCi0gICAgICAgICMgY29udmVydCBkYXRhIChuZWVkZWQgaW4gY2FzZSBvZiBtZW1vcnl2aWV3IGluc3RhbmNlOiBQeSAzLjEgaW8gbGliKSwgY3R5cGVzIGRvZXNuJ3QgbGlrZSBtZW1vcnl2aWV3Ci0gICAgICAgIGRhdGEgPSB0b19ieXRlcyhkYXRhKQotICAgICAgICBpZiBkYXRhOgotICAgICAgICAgICAgI34gd2luMzJldmVudC5SZXNldEV2ZW50KHNlbGYuX292ZXJsYXBwZWRXcml0ZS5oRXZlbnQpCi0gICAgICAgICAgICBuID0gd2luMzIuRFdPUkQoKQotICAgICAgICAgICAgZXJyID0gd2luMzIuV3JpdGVGaWxlKHNlbGYuaENvbVBvcnQsIGRhdGEsIGxlbihkYXRhKSwgY3R5cGVzLmJ5cmVmKG4pLCBzZWxmLl9vdmVybGFwcGVkV3JpdGUpCi0gICAgICAgICAgICBpZiBub3QgZXJyIGFuZCB3aW4zMi5HZXRMYXN0RXJyb3IoKSAhPSB3aW4zMi5FUlJPUl9JT19QRU5ESU5HOgotICAgICAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbigiV3JpdGVGaWxlIGZhaWxlZCAoJXIpIiAlIGN0eXBlcy5XaW5FcnJvcigpKQotICAgICAgICAgICAgaWYgc2VsZi5fd3JpdGVUaW1lb3V0ICE9IDA6ICMgaWYgYmxvY2tpbmcgKE5vbmUpIG9yIHcvIHdyaXRlIHRpbWVvdXQgKD4wKQotICAgICAgICAgICAgICAgICMgV2FpdCBmb3IgdGhlIHdyaXRlIHRvIGNvbXBsZXRlLgotICAgICAgICAgICAgICAgICN+IHdpbjMyLldhaXRGb3JTaW5nbGVPYmplY3Qoc2VsZi5fb3ZlcmxhcHBlZFdyaXRlLmhFdmVudCwgd2luMzIuSU5GSU5JVEUpCi0gICAgICAgICAgICAgICAgZXJyID0gd2luMzIuR2V0T3ZlcmxhcHBlZFJlc3VsdChzZWxmLmhDb21Qb3J0LCBzZWxmLl9vdmVybGFwcGVkV3JpdGUsIGN0eXBlcy5ieXJlZihuKSwgVHJ1ZSkKLSAgICAgICAgICAgICAgICBpZiBuLnZhbHVlICE9IGxlbihkYXRhKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2Ugd3JpdGVUaW1lb3V0RXJyb3IKLSAgICAgICAgICAgIHJldHVybiBuLnZhbHVlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gMAotCi0gICAgZGVmIGZsdXNoKHNlbGYpOgotICAgICAgICAiIiJGbHVzaCBvZiBmaWxlIGxpa2Ugb2JqZWN0cy4gSW4gdGhpcyBjYXNlLCB3YWl0IHVudGlsIGFsbCBkYXRhCi0gICAgICAgICAgIGlzIHdyaXR0ZW4uIiIiCi0gICAgICAgIHdoaWxlIHNlbGYub3V0V2FpdGluZygpOgotICAgICAgICAgICAgdGltZS5zbGVlcCgwLjA1KQotICAgICAgICAjIFhYWCBjb3VsZCBhbHNvIHVzZSBXYWl0Q29tbUV2ZW50IHdpdGggbWFzayBFVl9UWEVNUFRZLCBidXQgaXQgd291bGQKLSAgICAgICAgIyByZXF1aXJlIG92ZXJsYXBwZWQgSU8gYW5kIGl0cyBhbHNvIG9ubHkgcG9zc2libGUgdG8gc2V0IGEgc2luZ2xlIG1hc2sKLSAgICAgICAgIyBvbiB0aGUgcG9ydC0tLQotCi0gICAgZGVmIGZsdXNoSW5wdXQoc2VsZik6Ci0gICAgICAgICIiIkNsZWFyIGlucHV0IGJ1ZmZlciwgZGlzY2FyZGluZyBhbGwgdGhhdCBpcyBpbiB0aGUgYnVmZmVyLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5oQ29tUG9ydDogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICB3aW4zMi5QdXJnZUNvbW0oc2VsZi5oQ29tUG9ydCwgd2luMzIuUFVSR0VfUlhDTEVBUiB8IHdpbjMyLlBVUkdFX1JYQUJPUlQpCi0KLSAgICBkZWYgZmx1c2hPdXRwdXQoc2VsZik6Ci0gICAgICAgICIiIkNsZWFyIG91dHB1dCBidWZmZXIsIGFib3J0aW5nIHRoZSBjdXJyZW50IG91dHB1dCBhbmQKLSAgICAgICAgZGlzY2FyZGluZyBhbGwgdGhhdCBpcyBpbiB0aGUgYnVmZmVyLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5oQ29tUG9ydDogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICB3aW4zMi5QdXJnZUNvbW0oc2VsZi5oQ29tUG9ydCwgd2luMzIuUFVSR0VfVFhDTEVBUiB8IHdpbjMyLlBVUkdFX1RYQUJPUlQpCi0KLSAgICBkZWYgc2VuZEJyZWFrKHNlbGYsIGR1cmF0aW9uPTAuMjUpOgotICAgICAgICAiIiJTZW5kIGJyZWFrIGNvbmRpdGlvbi4gVGltZWQsIHJldHVybnMgdG8gaWRsZSBzdGF0ZSBhZnRlciBnaXZlbiBkdXJhdGlvbi4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuaENvbVBvcnQ6IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgaW1wb3J0IHRpbWUKLSAgICAgICAgd2luMzIuU2V0Q29tbUJyZWFrKHNlbGYuaENvbVBvcnQpCi0gICAgICAgIHRpbWUuc2xlZXAoZHVyYXRpb24pCi0gICAgICAgIHdpbjMyLkNsZWFyQ29tbUJyZWFrKHNlbGYuaENvbVBvcnQpCi0KLSAgICBkZWYgc2V0QnJlYWsoc2VsZiwgbGV2ZWw9MSk6Ci0gICAgICAgICIiIlNldCBicmVhazogQ29udHJvbHMgVFhELiBXaGVuIGFjdGl2ZSwgdG8gdHJhbnNtaXR0aW5nIGlzIHBvc3NpYmxlLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5oQ29tUG9ydDogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBpZiBsZXZlbDoKLSAgICAgICAgICAgIHdpbjMyLlNldENvbW1CcmVhayhzZWxmLmhDb21Qb3J0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgd2luMzIuQ2xlYXJDb21tQnJlYWsoc2VsZi5oQ29tUG9ydCkKLQotICAgIGRlZiBzZXRSVFMoc2VsZiwgbGV2ZWw9MSk6Ci0gICAgICAgICIiIlNldCB0ZXJtaW5hbCBzdGF0dXMgbGluZTogUmVxdWVzdCBUbyBTZW5kIiIiCi0gICAgICAgICMgcmVtZW1iZXIgbGV2ZWwgZm9yIHJlY29uZmlndXJlCi0gICAgICAgIGlmIGxldmVsOgotICAgICAgICAgICAgc2VsZi5fcnRzU3RhdGUgPSB3aW4zMi5SVFNfQ09OVFJPTF9FTkFCTEUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3J0c1N0YXRlID0gd2luMzIuUlRTX0NPTlRST0xfRElTQUJMRQotICAgICAgICAjIGFsc28gYXBwbHkgbm93IGlmIHBvcnQgaXMgb3BlbgotICAgICAgICBpZiBzZWxmLmhDb21Qb3J0OgotICAgICAgICAgICAgaWYgbGV2ZWw6Ci0gICAgICAgICAgICAgICAgd2luMzIuRXNjYXBlQ29tbUZ1bmN0aW9uKHNlbGYuaENvbVBvcnQsIHdpbjMyLlNFVFJUUykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgd2luMzIuRXNjYXBlQ29tbUZ1bmN0aW9uKHNlbGYuaENvbVBvcnQsIHdpbjMyLkNMUlJUUykKLQotICAgIGRlZiBzZXREVFIoc2VsZiwgbGV2ZWw9MSk6Ci0gICAgICAgICIiIlNldCB0ZXJtaW5hbCBzdGF0dXMgbGluZTogRGF0YSBUZXJtaW5hbCBSZWFkeSIiIgotICAgICAgICAjIHJlbWVtYmVyIGxldmVsIGZvciByZWNvbmZpZ3VyZQotICAgICAgICBpZiBsZXZlbDoKLSAgICAgICAgICAgIHNlbGYuX2R0clN0YXRlID0gd2luMzIuRFRSX0NPTlRST0xfRU5BQkxFCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9kdHJTdGF0ZSA9IHdpbjMyLkRUUl9DT05UUk9MX0RJU0FCTEUKLSAgICAgICAgIyBhbHNvIGFwcGx5IG5vdyBpZiBwb3J0IGlzIG9wZW4KLSAgICAgICAgaWYgc2VsZi5oQ29tUG9ydDoKLSAgICAgICAgICAgIGlmIGxldmVsOgotICAgICAgICAgICAgICAgIHdpbjMyLkVzY2FwZUNvbW1GdW5jdGlvbihzZWxmLmhDb21Qb3J0LCB3aW4zMi5TRVREVFIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHdpbjMyLkVzY2FwZUNvbW1GdW5jdGlvbihzZWxmLmhDb21Qb3J0LCB3aW4zMi5DTFJEVFIpCi0KLSAgICBkZWYgX0dldENvbW1Nb2RlbVN0YXR1cyhzZWxmKToKLSAgICAgICAgc3RhdCA9IHdpbjMyLkRXT1JEKCkKLSAgICAgICAgd2luMzIuR2V0Q29tbU1vZGVtU3RhdHVzKHNlbGYuaENvbVBvcnQsIGN0eXBlcy5ieXJlZihzdGF0KSkKLSAgICAgICAgcmV0dXJuIHN0YXQudmFsdWUKLQotICAgIGRlZiBnZXRDVFMoc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdGVybWluYWwgc3RhdHVzIGxpbmU6IENsZWFyIFRvIFNlbmQiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuaENvbVBvcnQ6IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgcmV0dXJuIHdpbjMyLk1TX0NUU19PTiAmIHNlbGYuX0dldENvbW1Nb2RlbVN0YXR1cygpICE9IDAKLQotICAgIGRlZiBnZXREU1Ioc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdGVybWluYWwgc3RhdHVzIGxpbmU6IERhdGEgU2V0IFJlYWR5IiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLmhDb21Qb3J0OiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHJldHVybiB3aW4zMi5NU19EU1JfT04gJiBzZWxmLl9HZXRDb21tTW9kZW1TdGF0dXMoKSAhPSAwCi0KLSAgICBkZWYgZ2V0Ukkoc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdGVybWluYWwgc3RhdHVzIGxpbmU6IFJpbmcgSW5kaWNhdG9yIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLmhDb21Qb3J0OiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIHJldHVybiB3aW4zMi5NU19SSU5HX09OICYgc2VsZi5fR2V0Q29tbU1vZGVtU3RhdHVzKCkgIT0gMAotCi0gICAgZGVmIGdldENEKHNlbGYpOgotICAgICAgICAiIiJSZWFkIHRlcm1pbmFsIHN0YXR1cyBsaW5lOiBDYXJyaWVyIERldGVjdCIiIgotICAgICAgICBpZiBub3Qgc2VsZi5oQ29tUG9ydDogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICByZXR1cm4gd2luMzIuTVNfUkxTRF9PTiAmIHNlbGYuX0dldENvbW1Nb2RlbVN0YXR1cygpICE9IDAKLQotICAgICMgLSAtIHBsYXRmb3JtIHNwZWNpZmljIC0gLSAtIC0KLQotICAgIGRlZiBzZXRCdWZmZXJTaXplKHNlbGYsIHJ4X3NpemU9NDA5NiwgdHhfc2l6ZT1Ob25lKToKLSAgICAgICAgIiIiXAotICAgICAgICBSZWNvbW1lbmQgYSBidWZmZXIgc2l6ZSB0byB0aGUgZHJpdmVyIChkZXZpY2UgZHJpdmVyIGNhbiBpZ25vcmUgdGhpcwotICAgICAgICB2bGF1ZSkuIE11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgcG9ydCBpcyBvcGVuZGVkLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgdHhfc2l6ZSBpcyBOb25lOiB0eF9zaXplID0gcnhfc2l6ZQotICAgICAgICB3aW4zMi5TZXR1cENvbW0oc2VsZi5oQ29tUG9ydCwgcnhfc2l6ZSwgdHhfc2l6ZSkKLQotICAgIGRlZiBzZXRYT04oc2VsZiwgbGV2ZWw9VHJ1ZSk6Ci0gICAgICAgICIiIlwKLSAgICAgICAgTWFudWFsbHkgY29udHJvbCBmbG93IC0gd2hlbiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZC4KLSAgICAgICAgVGhpcyB3aWxsIHNlbmQgWE9OICh0cnVlKSBhbmQgWE9GRiAoZmFsc2UpIHRvIHRoZSBvdGhlciBkZXZpY2UuCi0gICAgICAgIFdBUk5JTkc6IHRoaXMgZnVuY3Rpb24gaXMgbm90IHBvcnRhYmxlIHRvIGRpZmZlcmVudCBwbGF0Zm9ybXMhCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5oQ29tUG9ydDogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBpZiBsZXZlbDoKLSAgICAgICAgICAgIHdpbjMyLkVzY2FwZUNvbW1GdW5jdGlvbihzZWxmLmhDb21Qb3J0LCB3aW4zMi5TRVRYT04pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3aW4zMi5Fc2NhcGVDb21tRnVuY3Rpb24oc2VsZi5oQ29tUG9ydCwgd2luMzIuU0VUWE9GRikKLQotICAgIGRlZiBvdXRXYWl0aW5nKHNlbGYpOgotICAgICAgICAiIiJyZXR1cm4gaG93IG1hbnkgY2hhcmFjdGVycyB0aGUgaW4gdGhlIG91dGdvaW5nIGJ1ZmZlciIiIgotICAgICAgICBmbGFncyA9IHdpbjMyLkRXT1JEKCkKLSAgICAgICAgY29tc3RhdCA9IHdpbjMyLkNPTVNUQVQoKQotICAgICAgICBpZiBub3Qgd2luMzIuQ2xlYXJDb21tRXJyb3Ioc2VsZi5oQ29tUG9ydCwgY3R5cGVzLmJ5cmVmKGZsYWdzKSwgY3R5cGVzLmJ5cmVmKGNvbXN0YXQpKToKLSAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbignY2FsbCB0byBDbGVhckNvbW1FcnJvciBmYWlsZWQnKQotICAgICAgICByZXR1cm4gY29tc3RhdC5jYk91dFF1ZQotCi0gICAgIyBmdW5jdGlvbnMgdXNlZnVsIGZvciBSUy00ODUgYWRhcHRlcnMKLSAgICBkZWYgc2V0UnRzVG9nZ2xlKHNlbGYsIHJ0c1RvZ2dsZSk6Ci0gICAgICAgICIiIkNoYW5nZSBSVFMgdG9nZ2xlIGNvbnRyb2wgc2V0dGluZy4iIiIKLSAgICAgICAgc2VsZi5fcnRzVG9nZ2xlID0gcnRzVG9nZ2xlCi0gICAgICAgIGlmIHNlbGYuX2lzT3Blbjogc2VsZi5fcmVjb25maWd1cmVQb3J0KCkKLQotICAgIGRlZiBnZXRSdHNUb2dnbGUoc2VsZik6Ci0gICAgICAgICIiIkdldCB0aGUgY3VycmVudCBSVFMgdG9nZ2xlIGNvbnRyb2wgc2V0dGluZy4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J0c1RvZ2dsZQotCi0gICAgcnRzVG9nZ2xlID0gcHJvcGVydHkoZ2V0UnRzVG9nZ2xlLCBzZXRSdHNUb2dnbGUsIGRvYz0iUlRTIHRvZ2dsZSBjb250cm9sIHNldHRpbmciKQotCi0KLSMgYXNzZW1ibGUgU2VyaWFsIGNsYXNzIHdpdGggdGhlIHBsYXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgYmFzZQotIyBmb3IgZmlsZS1saWtlIGJlaGF2aW9yLiBmb3IgUHl0aG9uIDIuNiBhbmQgbmV3ZXIsIHRoYXQgcHJvdmlkZSB0aGUgbmV3IEkvTwotIyBsaWJyYXJ5LCBkZXJpdmUgZnJvbSBpby5SYXdJT0Jhc2UKLXRyeToKLSAgICBpbXBvcnQgaW8KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIGNsYXNzaWMgdmVyc2lvbiB3aXRoIG91ciBvd24gZmlsZS1saWtlIGVtdWxhdGlvbgotICAgIGNsYXNzIFNlcmlhbChXaW4zMlNlcmlhbCwgRmlsZUxpa2UpOgotICAgICAgICBwYXNzCi1lbHNlOgotICAgICMgaW8gbGlicmFyeSBwcmVzZW50Ci0gICAgY2xhc3MgU2VyaWFsKFdpbjMyU2VyaWFsLCBpby5SYXdJT0Jhc2UpOgotICAgICAgICBwYXNzCi0KLQotIyBOdXIgVGVzdGZ1bmt0aW9uISEKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgcyA9IFNlcmlhbCgwKQotICAgIHN5cy5zdGRvdXQud3JpdGUoIiVzXG4iICUgcykKLQotICAgIHMgPSBTZXJpYWwoKQotICAgIHN5cy5zdGRvdXQud3JpdGUoIiVzXG4iICUgcykKLQotICAgIHMuYmF1ZHJhdGUgPSAxOTIwMAotICAgIHMuZGF0YWJpdHMgPSA3Ci0gICAgcy5jbG9zZSgpCi0gICAgcy5wb3J0ID0gMAotICAgIHMub3BlbigpCi0gICAgc3lzLnN0ZG91dC53cml0ZSgiJXNcbiIgJSBzKQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvc2VybXNkb3MucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvc2VybXNkb3MucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YTAwMTcuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3Nlcm1zZG9zLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLSMgc2VybXNkb3MucHkKLSMKLSMgSGlzdG9yeToKLSMKLSMgICAzcmQgU2VwdGVtYmVyIDIwMDIgICAgICAgICAgICAgICAgICAgICAgRGF2ZSBIYXluZXMKLSMgICAxLiBGaXJzdCBkZWZpbmVkCi0jCi0jIEFsdGhvdWdoIHRoaXMgY29kZSBzaG91bGQgcnVuIHVuZGVyIHRoZSBsYXRlc3QgdmVyc2lvbnMgb2YKLSMgUHl0aG9uLCBvbiBET1MtYmFzZWQgcGxhdGZvcm1zIHN1Y2ggYXMgV2luZG93cyA5NSBhbmQgOTgsCi0jIGl0IGhhcyBiZWVuIHNwZWNpZmljYWxseSB3cml0dGVuIHRvIGJlIGNvbXBhdGlibGUgd2l0aAotIyBQeURPUywgYXZhaWxhYmxlIGF0OgotIyBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi93cHkvZG9zLmh0bWwKLSMKLSMgUHlET1MgaXMgYSBzdHJpcHBlZC1kb3duIHZlcnNpb24gb2YgUHl0aG9uIDEuNS4yIGZvcgotIyBET1MgbWFjaGluZXMuIFRoZXJlZm9yZSwgaW4gbWFraW5nIGNoYW5nZXMgdG8gdGhpcyBmaWxlLAotIyBwbGVhc2UgcmVzcGVjdCBQeXRob24gMS41LjIgc3ludGF4LiBJbiBhZGRpdGlvbiwgcGxlYXNlCi0jIGxpbWl0IHRoZSB3aWR0aCBvZiB0aGlzIGZpbGUgdG8gNjAgY2hhcmFjdGVycy4KLSMKLSMgTm90ZSBhbHNvIHRoYXQgdGhlIG1vZHVsZXMgaW4gUHlET1MgY29udGFpbiBmZXdlciBtZW1iZXJzCi0jIHRoYW4gb3RoZXIgdmVyc2lvbnMsIHNvIHdlIGFyZSByZXN0cmljdGVkIHRvIHVzaW5nIHRoZQotIyBmb2xsb3dpbmc6Ci0jCi0jIEluIG1vZHVsZSBvczoKLSMgLS0tLS0tLS0tLS0tLQotIyBlbnZpcm9uLCBjaGRpciwgZ2V0Y3dkLCBnZXRwaWQsIHVtYXNrLCBmZG9wZW4sIGNsb3NlLAotIyBkdXAsIGR1cDIsIGZzdGF0LCBsc2Vlaywgb3BlbiwgcmVhZCwgd3JpdGUsIE9fUkRPTkxZLAotIyBPX1dST05MWSwgT19SRFdSLCBPX0FQUEVORCwgT19DUkVBVCwgT19FWENMLCBPX1RSVU5DLAotIyBhY2Nlc3MsIEZfT0ssIFJfT0ssIFdfT0ssIFhfT0ssIGNobW9kLCBsaXN0ZGlyLCBta2RpciwKLSMgcmVtb3ZlLCByZW5hbWUsIHJlbmFtZXMsIHJtZGlyLCBzdGF0LCB1bmxpbmssIHV0aW1lLAotIyBleGVjbCwgZXhlY2xlLCBleGVjbHAsIGV4ZWNscGUsIGV4ZWN2cCwgZXhlY3ZwZSwgX2V4aXQsCi0jIHN5c3RlbS4KLSMKLSMgSW4gbW9kdWxlIG9zLnBhdGg6Ci0jIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBjdXJkaXIsIHBhcmRpciwgc2VwLCBhbHRzZXAsIHBhdGhzZXAsIGRlZnBhdGgsIGxpbmVzZXAuCi0jCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHN0cmluZwotaW1wb3J0IHNlcmlhbC5zZXJpYWx1dGlsCi0KLUJBVURfUkFURVMgPSB7Ci0gICAgICAgICAgICAgICAgMTEwOiAiMTEiLAotICAgICAgICAgICAgICAgIDE1MDogIjE1IiwKLSAgICAgICAgICAgICAgICAzMDA6ICIzMCIsCi0gICAgICAgICAgICAgICAgNjAwOiAiNjAiLAotICAgICAgICAgICAgICAgIDEyMDA6ICIxMiIsCi0gICAgICAgICAgICAgICAgMjQwMDogIjI0IiwKLSAgICAgICAgICAgICAgICA0ODAwOiAiNDgiLAotICAgICAgICAgICAgICAgIDk2MDA6ICI5NiIsCi0gICAgICAgICAgICAgICAgMTkyMDA6ICIxOSJ9Ci0KLShQQVJJVFlfTk9ORSwgUEFSSVRZX0VWRU4sIFBBUklUWV9PREQsIFBBUklUWV9NQVJLLAotUEFSSVRZX1NQQUNFKSA9ICgwLCAxLCAyLCAzLCA0KQotKFNUT1BCSVRTX09ORSwgU1RPUEJJVFNfT05FQU5EQUhBTEYsCi1TVE9QQklUU19UV08pID0gKDEsIDEuNSwgMikKLUZJVkVCSVRTLCBTSVhCSVRTLCBTRVZFTkJJVFMsIEVJR0hUQklUUyA9ICg1LCA2LCA3LCA4KQotKFJFVFVSTl9FUlJPUiwgUkVUVVJOX0JVU1ksIFJFVFVSTl9SRVRSWSwgUkVUVVJOX1JFQURZLAotUkVUVVJOX05PTkUpID0gKCdFJywgJ0InLCAnUCcsICdSJywgJ04nKQotcG9ydE5vdE9wZW5FcnJvciA9IFZhbHVlRXJyb3IoJ3BvcnQgbm90IG9wZW4nKQotCi1kZWYgZGV2aWNlKHBvcnRudW0pOgotICAgIHJldHVybiAnQ09NJWQnICUgKHBvcnRudW0rMSkKLQotY2xhc3MgU2VyaWFsKHNlcmlhbHV0aWwuRmlsZUxpa2UpOgotICAgICIiIgotICAgICAgIHBvcnQ6IG51bWJlciBvZiBkZXZpY2U7IG51bWJlcmluZyBzdGFydHMgYXQKLSAgICAgICAgICAgIHplcm8uIGlmIGV2ZXJ5dGhpbmcgZmFpbHMsIHRoZSB1c2VyIGNhbgotICAgICAgICAgICAgc3BlY2lmeSBhIGRldmljZSBzdHJpbmcsIG5vdGUgdGhhdCB0aGlzCi0gICAgICAgICAgICBpc24ndCBwb3J0YWJsZSBhbnkgbW9yZQotICAgICAgIGJhdWRyYXRlOiBiYXVkIHJhdGUKLSAgICAgICBieXRlc2l6ZTogbnVtYmVyIG9mIGRhdGFiaXRzCi0gICAgICAgcGFyaXR5OiBlbmFibGUgcGFyaXR5IGNoZWNraW5nCi0gICAgICAgc3RvcGJpdHM6IG51bWJlciBvZiBzdG9wYml0cwotICAgICAgIHRpbWVvdXQ6IHNldCBhIHRpbWVvdXQgKE5vbmUgZm9yIHdhaXRpbmcgZm9yZXZlcikKLSAgICAgICB4b254b2ZmOiBlbmFibGUgc29mdHdhcmUgZmxvdyBjb250cm9sCi0gICAgICAgcnRzY3RzOiBlbmFibGUgUlRTL0NUUyBmbG93IGNvbnRyb2wKLSAgICAgICByZXRyeTogRE9TIHJldHJ5IG1vZGUKLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwKLSAgICAgICAgICAgICAgICAgcG9ydCwKLSAgICAgICAgICAgICAgICAgYmF1ZHJhdGUgPSA5NjAwLAotICAgICAgICAgICAgICAgICBieXRlc2l6ZSA9IEVJR0hUQklUUywKLSAgICAgICAgICAgICAgICAgcGFyaXR5ID0gUEFSSVRZX05PTkUsCi0gICAgICAgICAgICAgICAgIHN0b3BiaXRzID0gU1RPUEJJVFNfT05FLAotICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gTm9uZSwKLSAgICAgICAgICAgICAgICAgeG9ueG9mZiA9IDAsCi0gICAgICAgICAgICAgICAgIHJ0c2N0cyA9IDAsCi0gICAgICAgICAgICAgICAgIHJldHJ5ID0gUkVUVVJOX1JFVFJZCi0gICAgICAgICAgICAgICAgICk6Ci0KLSAgICAgICAgaWYgdHlwZShwb3J0KSA9PSB0eXBlKCcnKToKLSAgICAgICAgIyBzdHJpbmdzIGFyZSB0YWtlbiBkaXJlY3RseQotICAgICAgICAgICAgc2VsZi5wb3J0c3RyID0gcG9ydAotICAgICAgICBlbHNlOgotICAgICAgICAjIG51bWJlcnMgYXJlIHRyYW5zZm9ybWVkIHRvIGEgc3RyaW5nCi0gICAgICAgICAgICBzZWxmLnBvcnRzdHIgPSBkZXZpY2UocG9ydCsxKQotCi0gICAgICAgIHNlbGYuYmF1ZCA9IEJBVURfUkFURVNbYmF1ZHJhdGVdCi0gICAgICAgIHNlbGYuYnl0ZXNpemUgPSBzdHIoYnl0ZXNpemUpCi0KLSAgICAgICAgaWYgcGFyaXR5ID09IFBBUklUWV9OT05FOgotICAgICAgICAgICAgc2VsZi5wYXJpdHkgPSAnTicKLSAgICAgICAgZWxpZiBwYXJpdHkgPT0gUEFSSVRZX0VWRU46Ci0gICAgICAgICAgICBzZWxmLnBhcml0eSA9ICdFJwotICAgICAgICBlbGlmIHBhcml0eSA9PSBQQVJJVFlfT0REOgotICAgICAgICAgICAgc2VsZi5wYXJpdHkgPSAnTycKLSAgICAgICAgZWxpZiBwYXJpdHkgPT0gUEFSSVRZX01BUks6Ci0gICAgICAgICAgICBzZWxmLnBhcml0eSA9ICdNJwotICAgICAgICBlbGlmIHBhcml0eSA9PSBQQVJJVFlfU1BBQ0U6Ci0gICAgICAgICAgICBzZWxmLnBhcml0eSA9ICdTJwotCi0gICAgICAgIHNlbGYuc3RvcCA9IHN0cihzdG9wYml0cykKLSAgICAgICAgc2VsZi5yZXRyeSA9IHJldHJ5Ci0gICAgICAgIHNlbGYuZmlsZW5hbWUgPSAic2VybXNkb3MudG1wIgotCi0gICAgICAgIHNlbGYuX2NvbmZpZyhzZWxmLnBvcnRzdHIsIHNlbGYuYmF1ZCwgc2VsZi5wYXJpdHksCi0gICAgICAgIHNlbGYuYnl0ZXNpemUsIHNlbGYuc3RvcCwgc2VsZi5yZXRyeSwgc2VsZi5maWxlbmFtZSkKLQotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICBzZWxmLmNsb3NlKCkKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIF9jb25maWcoc2VsZiwgcG9ydCwgYmF1ZCwgcGFyaXR5LCBkYXRhLCBzdG9wLCByZXRyeSwKLSAgICAgICAgZmlsZW5hbWUpOgotICAgICAgICBjb21TdHJpbmcgPSBzdHJpbmcuam9pbigoIk1PREUgIiwgcG9ydCwgIjoiCi0gICAgICAgICwgIiBCQVVEPSAiLCBiYXVkLCAiIFBBUklUWT0gIiwgcGFyaXR5Ci0gICAgICAgICwgIiBEQVRBPSAiLCBkYXRhLCAiIFNUT1A9ICIsIHN0b3AsICIgUkVUUlk9ICIsCi0gICAgICAgIHJldHJ5LCAiID4gIiwgZmlsZW5hbWUgKSwgJycpCi0gICAgICAgIG9zLnN5c3RlbShjb21TdHJpbmcpCi0KLSAgICBkZWYgc2V0QmF1ZHJhdGUoc2VsZiwgYmF1ZHJhdGUpOgotICAgICAgICBzZWxmLl9jb25maWcoc2VsZi5wb3J0c3RyLCBCQVVEX1JBVEVTW2JhdWRyYXRlXSwKLSAgICAgICAgc2VsZi5wYXJpdHksIHNlbGYuYnl0ZXNpemUsIHNlbGYuc3RvcCwgc2VsZi5yZXRyeSwKLSAgICAgICAgc2VsZi5maWxlbmFtZSkKLQotICAgIGRlZiBpbldhaXRpbmcoc2VsZik6Ci0gICAgICAgICIiInJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3YWl0aW5nIHRvIGJlIHJlYWQiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIHJlYWQoc2VsZiwgbnVtID0gMSk6Ci0gICAgICAgICIiIlJlYWQgbnVtIGJ5dGVzIGZyb20gc2VyaWFsIHBvcnQiIiIKLSAgICAgICAgaGFuZGxlID0gb3Mub3BlbihzZWxmLnBvcnRzdHIsCi0gICAgICAgIG9zLk9fUkRPTkxZIHwgb3MuT19CSU5BUlkpCi0gICAgICAgIHJ2ID0gb3MucmVhZChoYW5kbGUsIG51bSkKLSAgICAgICAgb3MuY2xvc2UoaGFuZGxlKQotICAgICAgICByZXR1cm4gcnYKLQotICAgIGRlZiB3cml0ZShzZWxmLCBzKToKLSAgICAgICAgIiIiV3JpdGUgc3RyaW5nIHRvIHNlcmlhbCBwb3J0IiIiCi0gICAgICAgIGhhbmRsZSA9IG9zLm9wZW4oc2VsZi5wb3J0c3RyLAotICAgICAgICBvcy5PX1dST05MWSB8IG9zLk9fQklOQVJZKQotICAgICAgICBydiA9IG9zLndyaXRlKGhhbmRsZSwgcykKLSAgICAgICAgb3MuY2xvc2UoaGFuZGxlKQotICAgICAgICByZXR1cm4gcnYKLQotICAgIGRlZiBmbHVzaElucHV0KHNlbGYpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBkZWYgZmx1c2hPdXRwdXQoc2VsZik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBzZW5kQnJlYWsoc2VsZik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBzZXRSVFMoc2VsZixsZXZlbD0xKToKLSAgICAgICAgIiIiU2V0IHRlcm1pbmFsIHN0YXR1cyBsaW5lIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBzZXREVFIoc2VsZixsZXZlbD0xKToKLSAgICAgICAgIiIiU2V0IHRlcm1pbmFsIHN0YXR1cyBsaW5lIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBnZXRDVFMoc2VsZik6Ci0gICAgICAgICIiIkVlYWQgdGVybWluYWwgc3RhdHVzIGxpbmUiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIGdldERTUihzZWxmKToKLSAgICAgICAgIiIiRWVhZCB0ZXJtaW5hbCBzdGF0dXMgbGluZSIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBkZWYgZ2V0Ukkoc2VsZik6Ci0gICAgICAgICIiIkVlYWQgdGVybWluYWwgc3RhdHVzIGxpbmUiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIGdldENEKHNlbGYpOgotICAgICAgICAiIiJFZWFkIHRlcm1pbmFsIHN0YXR1cyBsaW5lIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHN0cmluZy5qb2luKCggIjxTZXJpYWw+OiAiLCBzZWxmLnBvcnRzdHIKLSAgICAgICAgLCBzZWxmLmJhdWQsIHNlbGYucGFyaXR5LCBzZWxmLmJ5dGVzaXplLCBzZWxmLnN0b3AsCi0gICAgICAgIHNlbGYucmV0cnkgLCBzZWxmLmZpbGVuYW1lKSwgJyAnKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHMgPSBTZXJpYWwoMCkKLSAgICBzeXMuc3RkaW8ud3JpdGUoJyVzICVzXG4nICUgKF9fbmFtZV9fLCBzKSkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC90b29scy9fX2luaXRfXy5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC90b29scy9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdG9vbHMvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3Rvb2xzL2xpc3RfcG9ydHMucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdG9vbHMvbGlzdF9wb3J0cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZDM3M2E1NS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdG9vbHMvbGlzdF9wb3J0cy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotIyBwb3J0YWJsZSBzZXJpYWwgcG9ydCBhY2Nlc3Mgd2l0aCBweXRob24KLSMgdGhpcyBpcyBhIHdyYXBwZXIgbW9kdWxlIGZvciBkaWZmZXJlbnQgcGxhdGZvcm0gaW1wbGVtZW50YXRpb25zIG9mIHRoZQotIyBwb3J0IGVudW1lcmF0aW9uIGZlYXR1cmUKLSMKLSMgKEMpIDIwMTEtMjAxMyBDaHJpcyBMaWVjaHRpIDxjbGllY2h0aUBnbXgubmV0PgotIyB0aGlzIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzZWUgbGljZW5zZS50eHQKLQotIiIiXAotVGhpcyBtb2R1bGUgd2lsbCBwcm92aWRlIGEgZnVuY3Rpb24gY2FsbGVkIGNvbXBvcnRzIHRoYXQgcmV0dXJucyBhbgotaXRlcmFibGUgKGdlbmVyYXRvciBvciBsaXN0KSB0aGF0IHdpbGwgZW51bWVyYXRlIGF2YWlsYWJsZSBjb20gcG9ydHMuIE5vdGUgdGhhdAotb24gc29tZSBzeXN0ZW1zIG5vbi1leGlzdGVudCBwb3J0cyBtYXkgYmUgbGlzdGVkLgotCi1BZGRpdGlvbmFsbHkgYSBncmVwIGZ1bmN0aW9uIGlzIHN1cHBsaWVkIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBwb3J0cwotYmFzZWQgb24gdGhlaXIgZGVzY3JpcHRpb25zIG9yIGhhcmR3YXJlIElELgotIiIiCi0KLWltcG9ydCBzeXMsIG9zLCByZQotCi0jIGNob3NlIGFuIGltcGxlbWVudGF0aW9uLCBkZXBlbmRpbmcgb24gb3MKLSN+IGlmIHN5cy5wbGF0Zm9ybSA9PSAnY2xpJzoKLSN+IGVsc2U6Ci1pbXBvcnQgb3MKLSMgY2hvc2UgYW4gaW1wbGVtZW50YXRpb24sIGRlcGVuZGluZyBvbiBvcwotaWYgb3MubmFtZSA9PSAnbnQnOiAjc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgZnJvbSBzZXJpYWwudG9vbHMubGlzdF9wb3J0c193aW5kb3dzIGltcG9ydCAqCi1lbGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKLSAgICBmcm9tIHNlcmlhbC50b29scy5saXN0X3BvcnRzX3Bvc2l4IGltcG9ydCAqCi0jfiBlbGlmIG9zLm5hbWUgPT0gJ2phdmEnOgotZWxzZToKLSAgICByYWlzZSBJbXBvcnRFcnJvcigiU29ycnk6IG5vIGltcGxlbWVudGF0aW9uIGZvciB5b3VyIHBsYXRmb3JtICgnJXMnKSBhdmFpbGFibGUiICUgKG9zLm5hbWUsKSkKLQotIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQotCi1kZWYgZ3JlcChyZWdleHApOgotICAgICIiIlwKLSAgICBTZWFyY2ggZm9yIHBvcnRzIHVzaW5nIGEgcmVndWxhciBleHByZXNzaW9uLiBQb3J0IG5hbWUsIGRlc2NyaXB0aW9uIGFuZAotICAgIGhhcmR3YXJlIElEIGFyZSBzZWFyY2hlZC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gaXRlcmFibGUgdGhhdCByZXR1cm5zIHRoZQotICAgIHNhbWUgdHVwbGVzIGFzIGNvbXBvcnQoKSB3b3VsZCBkby4KLSAgICAiIiIKLSAgICByID0gcmUuY29tcGlsZShyZWdleHAsIHJlLkkpCi0gICAgZm9yIHBvcnQsIGRlc2MsIGh3aWQgaW4gY29tcG9ydHMoKToKLSAgICAgICAgaWYgci5zZWFyY2gocG9ydCkgb3Igci5zZWFyY2goZGVzYykgb3Igci5zZWFyY2goaHdpZCk6Ci0gICAgICAgICAgICB5aWVsZCBwb3J0LCBkZXNjLCBod2lkCi0KLQotIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQotZGVmIG1haW4oKToKLSAgICBpbXBvcnQgb3B0cGFyc2UKLQotICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKLSAgICAgICAgdXNhZ2UgPSAiJXByb2cgW29wdGlvbnNdIFs8cmVnZXhwPl0iLAotICAgICAgICBkZXNjcmlwdGlvbiA9ICJNaW5pdGVybSAtIEEgc2ltcGxlIHRlcm1pbmFsIHByb2dyYW0gZm9yIHRoZSBzZXJpYWwgcG9ydC4iCi0gICAgKQotCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tZGVidWciLAotICAgICAgICAgICAgaGVscD0icHJpbnQgZGVidWcgbWVzc2FnZXMgYW5kIHRyYWNlYmFja3MgKGRldmVsb3BtZW50IG1vZGUpIiwKLSAgICAgICAgICAgIGRlc3Q9ImRlYnVnIiwKLSAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQotCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsCi0gICAgICAgICAgICBoZWxwPSJzaG93IG1vcmUgbWVzc2FnZXMgKGNhbiBiZSBnaXZlbiBtdWx0aXBsZSB0aW1lcykiLAotICAgICAgICAgICAgZGVzdD0idmVyYm9zZSIsCi0gICAgICAgICAgICBkZWZhdWx0PTEsCi0gICAgICAgICAgICBhY3Rpb249J2NvdW50JykKLQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcSIsICItLXF1aWV0IiwKLSAgICAgICAgICAgIGhlbHA9InN1cHByZXNzIGFsbCBtZXNzYWdlcyIsCi0gICAgICAgICAgICBkZXN0PSJ2ZXJib3NlIiwKLSAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfY29uc3QnLAotICAgICAgICAgICAgY29uc3Q9MCkKLQotICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLQotCi0gICAgaGl0cyA9IDAKLSAgICAjIGdldCBpdGVyYXJvciB3LyBvciB3L28gZmlsdGVyCi0gICAgaWYgYXJnczoKLSAgICAgICAgaWYgbGVuKGFyZ3MpID4gMToKLSAgICAgICAgICAgIHBhcnNlci5lcnJvcignbW9yZSB0aGFuIG9uZSByZWdleHAgbm90IHN1cHBvcnRlZCcpCi0gICAgICAgIHByaW50ICJGaWx0ZXJlZCBsaXN0IHdpdGggcmVnZXhwOiAlciIgJSAoYXJnc1swXSwpCi0gICAgICAgIGl0ZXJhdG9yID0gc29ydGVkKGdyZXAoYXJnc1swXSkpCi0gICAgZWxzZToKLSAgICAgICAgaXRlcmF0b3IgPSBzb3J0ZWQoY29tcG9ydHMoKSkKLSAgICAjIGxpc3QgdGhlbQotICAgIGZvciBwb3J0LCBkZXNjLCBod2lkIGluIGl0ZXJhdG9yOgotICAgICAgICBwcmludCgiJS0yMHMiICUgKHBvcnQsKSkKLSAgICAgICAgaWYgb3B0aW9ucy52ZXJib3NlID4gMToKLSAgICAgICAgICAgIHByaW50KCIgICAgZGVzYzogJXMiICUgKGRlc2MsKSkKLSAgICAgICAgICAgIHByaW50KCIgICAgaHdpZDogJXMiICUgKGh3aWQsKSkKLSAgICAgICAgaGl0cyArPSAxCi0gICAgaWYgb3B0aW9ucy52ZXJib3NlOgotICAgICAgICBpZiBoaXRzOgotICAgICAgICAgICAgcHJpbnQoIiVkIHBvcnRzIGZvdW5kIiAlIChoaXRzLCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCgibm8gcG9ydHMgZm91bmQiKQotCi0jIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCi0jIHRlc3QKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdG9vbHMvbGlzdF9wb3J0c19saW51eC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC90b29scy9saXN0X3BvcnRzX2xpbnV4LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlY2ZkMTU4Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC90b29scy9saXN0X3BvcnRzX2xpbnV4LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIHBvcnRhYmxlIHNlcmlhbCBwb3J0IGFjY2VzcyB3aXRoIHB5dGhvbgotIwotIyBUaGlzIGlzIGEgbW9kdWxlIHRoYXQgZ2F0aGVycyBhIGxpc3Qgb2Ygc2VyaWFsIHBvcnRzIGluY2x1ZGluZyBkZXRhaWxzIG9uCi0jIEdOVS9MaW51eCBzeXN0ZW1zCi0jCi0jIChDKSAyMDExLTIwMTMgQ2hyaXMgTGllY2h0aSA8Y2xpZWNodGlAZ214Lm5ldD4KLSMgdGhpcyBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGZyZWUgc29mdHdhcmUgbGljZW5zZSwgc2VlIGxpY2Vuc2UudHh0Ci0KLWltcG9ydCBnbG9iCi1pbXBvcnQgc3lzCi1pbXBvcnQgb3MKLWltcG9ydCByZQotCi10cnk6Ci0gICAgaW1wb3J0IHN1YnByb2Nlc3MKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBkZWYgcG9wZW4oYXJndik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNpLCBzbyA9ICBvcy5wb3BlbjQoJyAnLmpvaW4oYXJndikpCi0gICAgICAgICAgICByZXR1cm4gc28ucmVhZCgpLnN0cmlwKCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignbHN1c2IgZmFpbGVkJykKLWVsc2U6Ci0gICAgZGVmIHBvcGVuKGFyZ3YpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoYXJndiwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5zdHJpcCgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2xzdXNiIGZhaWxlZCcpCi0KLQotIyBUaGUgY29tcG9ydHMgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGFuIGl0ZXJhYmxlIHRoYXQgeWllbGRzIHR1cGxlcyBvZgotIyAzIHN0cmluZ3M6IHBvcnQgbmFtZSwgaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpb24gYW5kIGEgaGFyZHdhcmUgSUQuCi0jCi0jIGFzIGN1cnJlbnRseSBubyBtZXRob2QgaXMga25vd24gdG8gZ2V0IHRoZSBzZWNvbmQgdHdvIHN0cmluZ3MgZWFzaWx5LCB0aGV5Ci0jIGFyZSBjdXJyZW50bHkganVzdCBpZGVudGljYWwgdG8gdGhlIHBvcnQgbmFtZS4KLQotIyB0cnkgdG8gZGV0ZWN0IHRoZSBPUyBzbyB0aGF0IGEgZGV2aWNlIGNhbiBiZSBzZWxlY3RlZC4uLgotcGxhdCA9IHN5cy5wbGF0Zm9ybS5sb3dlcigpCi0KLWRlZiByZWFkX2xpbmUoZmlsZW5hbWUpOgotICAgICIiImhlbHAgZnVuY3Rpb24gdG8gcmVhZCBhIHNpbmdsZSBsaW5lIGZyb20gYSBmaWxlLiByZXR1cm5zIG5vbmUiIiIKLSAgICB0cnk6Ci0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpLnN0cmlwKCkKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIHJldHVybiBsaW5lCi0gICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLWRlZiByZV9ncm91cChyZWdleHAsIHRleHQpOgotICAgICIiInNlYXJjaCBmb3IgcmVnZXhwIGluIHRleHQsIHJldHVybiAxc3QgZ3JvdXAgb24gbWF0Y2giIiIKLSAgICBpZiBzeXMudmVyc2lvbiA8ICczJzoKLSAgICAgICAgbSA9IHJlLnNlYXJjaChyZWdleHAsIHRleHQpCi0gICAgZWxzZToKLSAgICAgICAgIyB0ZXh0IGlzIGJ5dGVzLWxpa2UKLSAgICAgICAgbSA9IHJlLnNlYXJjaChyZWdleHAsIHRleHQuZGVjb2RlKCdhc2NpaScsICdyZXBsYWNlJykpCi0gICAgaWYgbTogcmV0dXJuIG0uZ3JvdXAoMSkKLQotCi0jIHRyeSB0byBleHRyYWN0IGRlc2NyaXB0aW9ucyBmcm9tIHN5c2ZzLiB0aGlzIHdhcyBkb25lIGJ5IGV4cGVyaW1lbnRpbmcsCi0jIG5vIGd1YXJhbnRlZSB0aGF0IGl0IHdvcmtzIGZvciBhbGwgZGV2aWNlcyBvciBpbiB0aGUgZnV0dXJlLi4uCi0KLWRlZiB1c2Jfc3lzZnNfaHdfc3RyaW5nKHN5c2ZzX3BhdGgpOgotICAgICIiImdpdmVuIGEgcGF0aCB0byBhIHVzYiBkZXZpY2UgaW4gc3lzZnMsIHJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGl0IiIiCi0gICAgYnVzLCBkZXYgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGgucmVhbHBhdGgoc3lzZnNfcGF0aCkpLnNwbGl0KCctJykKLSAgICBzbnIgPSByZWFkX2xpbmUoc3lzZnNfcGF0aCsnL3NlcmlhbCcpCi0gICAgaWYgc25yOgotICAgICAgICBzbnJfdHh0ID0gJyBTTlI9JXMnICUgKHNuciwpCi0gICAgZWxzZToKLSAgICAgICAgc25yX3R4dCA9ICcnCi0gICAgcmV0dXJuICdVU0IgVklEOlBJRD0lczolcyVzJyAlICgKLSAgICAgICAgICAgIHJlYWRfbGluZShzeXNmc19wYXRoKycvaWRWZW5kb3InKSwKLSAgICAgICAgICAgIHJlYWRfbGluZShzeXNmc19wYXRoKycvaWRQcm9kdWN0JyksCi0gICAgICAgICAgICBzbnJfdHh0Ci0gICAgICAgICAgICApCi0KLWRlZiB1c2JfbHN1c2Jfc3RyaW5nKHN5c2ZzX3BhdGgpOgotICAgIGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGgucmVhbHBhdGgoc3lzZnNfcGF0aCkpCi0gICAgYnVzID0gYmFzZS5zcGxpdCgnLScpWzBdCi0gICAgdHJ5OgotICAgICAgICBkZXYgPSBpbnQocmVhZF9saW5lKG9zLnBhdGguam9pbihzeXNmc19wYXRoLCAnZGV2bnVtJykpKQotICAgICAgICBkZXNjID0gcG9wZW4oWydsc3VzYicsICctdicsICctcycsICclczolcycgJSAoYnVzLCBkZXYpXSkKLSAgICAgICAgIyBkZXNjcmlwdGlvbnMgZnJvbSBkZXZpY2UKLSAgICAgICAgaU1hbnVmYWN0dXJlciA9IHJlX2dyb3VwKCdpTWFudWZhY3R1cmVyXHMrXHcrICguKyknLCBkZXNjKQotICAgICAgICBpUHJvZHVjdCA9IHJlX2dyb3VwKCdpUHJvZHVjdFxzK1x3KyAoLispJywgZGVzYykKLSAgICAgICAgaVNlcmlhbCA9IHJlX2dyb3VwKCdpU2VyaWFsXHMrXHcrICguKyknLCBkZXNjKSBvciAnJwotICAgICAgICAjIGRlc2NyaXB0aW9ucyBmcm9tIGtlcm5lbAotICAgICAgICBpZFZlbmRvciA9IHJlX2dyb3VwKCdpZFZlbmRvclxzKzB4XHcrICguKyknLCBkZXNjKQotICAgICAgICBpZFByb2R1Y3QgPSByZV9ncm91cCgnaWRQcm9kdWN0XHMrMHhcdysgKC4rKScsIGRlc2MpCi0gICAgICAgICMgY3JlYXRlIGRlc2NyaXB0aW9ucy4gcHJlZmVyIHRleHQgZnJvbSBkZXZpY2UsIGZhbGwgYmFjayB0byB0aGUgb3RoZXJzCi0gICAgICAgIHJldHVybiAnJXMgJXMgJXMnICUgKGlNYW51ZmFjdHVyZXIgb3IgaWRWZW5kb3IsIGlQcm9kdWN0IG9yIGlkUHJvZHVjdCwgaVNlcmlhbCkKLSAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgcmV0dXJuIGJhc2UKLQotZGVmIGRlc2NyaWJlKGRldmljZSk6Ci0gICAgIiIiXAotICAgIEdldCBhIGh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aW9uLgotICAgIEZvciBVU0ItU2VyaWFsIGRldmljZXMgdHJ5IHRvIHJ1biBsc3VzYiB0byBnZXQgYSBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbi4KLSAgICBGb3IgVVNCLUNEQyBkZXZpY2VzIHJlYWQgdGhlIGRlc2NyaXB0aW9uIGZyb20gc3lzZnMuCi0gICAgIiIiCi0gICAgYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUoZGV2aWNlKQotICAgICMgVVNCLVNlcmlhbCBkZXZpY2VzCi0gICAgc3lzX2Rldl9wYXRoID0gJy9zeXMvY2xhc3MvdHR5LyVzL2RldmljZS9kcml2ZXIvJXMnICUgKGJhc2UsIGJhc2UpCi0gICAgaWYgb3MucGF0aC5leGlzdHMoc3lzX2Rldl9wYXRoKToKLSAgICAgICAgc3lzX3VzYiA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChzeXNfZGV2X3BhdGgpKSkKLSAgICAgICAgcmV0dXJuIHVzYl9sc3VzYl9zdHJpbmcoc3lzX3VzYikKLSAgICAjIFVTQi1DREMgZGV2aWNlcwotICAgIHN5c19kZXZfcGF0aCA9ICcvc3lzL2NsYXNzL3R0eS8lcy9kZXZpY2UvaW50ZXJmYWNlJyAlIChiYXNlLCkKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhzeXNfZGV2X3BhdGgpOgotICAgICAgICByZXR1cm4gcmVhZF9saW5lKHN5c19kZXZfcGF0aCkKLQotICAgICMgVVNCIFByb2R1Y3QgSW5mb3JtYXRpb24KLSAgICBzeXNfZGV2X3BhdGggPSAnL3N5cy9jbGFzcy90dHkvJXMvZGV2aWNlJyAlIChiYXNlLCkKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhzeXNfZGV2X3BhdGgpOgotICAgICAgICBwcm9kdWN0X25hbWVfZmlsZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKHN5c19kZXZfcGF0aCkpICsgIi9wcm9kdWN0IgotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwcm9kdWN0X25hbWVfZmlsZSk6Ci0gICAgICAgICAgICByZXR1cm4gcmVhZF9saW5lKHByb2R1Y3RfbmFtZV9maWxlKQotCi0gICAgcmV0dXJuIGJhc2UKLQotZGVmIGh3aW5mbyhkZXZpY2UpOgotICAgICIiIlRyeSB0byBnZXQgYSBIVyBpZGVudGlmaWNhdGlvbiB1c2luZyBzeXNmcyIiIgotICAgIGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKGRldmljZSkKLSAgICBpZiBvcy5wYXRoLmV4aXN0cygnL3N5cy9jbGFzcy90dHkvJXMvZGV2aWNlJyAlIChiYXNlLCkpOgotICAgICAgICAjIFBDSSBiYXNlZCBkZXZpY2VzCi0gICAgICAgIHN5c19pZF9wYXRoID0gJy9zeXMvY2xhc3MvdHR5LyVzL2RldmljZS9pZCcgJSAoYmFzZSwpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHN5c19pZF9wYXRoKToKLSAgICAgICAgICAgIHJldHVybiByZWFkX2xpbmUoc3lzX2lkX3BhdGgpCi0gICAgICAgICMgVVNCLVNlcmlhbCBkZXZpY2VzCi0gICAgICAgIHN5c19kZXZfcGF0aCA9ICcvc3lzL2NsYXNzL3R0eS8lcy9kZXZpY2UvZHJpdmVyLyVzJyAlIChiYXNlLCBiYXNlKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzeXNfZGV2X3BhdGgpOgotICAgICAgICAgICAgc3lzX3VzYiA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChzeXNfZGV2X3BhdGgpKSkKLSAgICAgICAgICAgIHJldHVybiB1c2Jfc3lzZnNfaHdfc3RyaW5nKHN5c191c2IpCi0gICAgICAgICMgVVNCLUNEQyBkZXZpY2VzCi0gICAgICAgIGlmIGJhc2Uuc3RhcnRzd2l0aCgndHR5QUNNJyk6Ci0gICAgICAgICAgICBzeXNfZGV2X3BhdGggPSAnL3N5cy9jbGFzcy90dHkvJXMvZGV2aWNlJyAlIChiYXNlLCkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHN5c19kZXZfcGF0aCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHVzYl9zeXNmc19od19zdHJpbmcoc3lzX2Rldl9wYXRoICsgJy8uLicpCi0gICAgcmV0dXJuICduL2EnICAgICMgWFhYIGRpcmVjdGx5IHJlbW92ZSB0aGVzZSBmcm9tIHRoZSBsaXN0PwotCi1kZWYgY29tcG9ydHMoKToKLSAgICBkZXZpY2VzID0gZ2xvYi5nbG9iKCcvZGV2L3R0eVMqJykgKyBnbG9iLmdsb2IoJy9kZXYvdHR5VVNCKicpICsgZ2xvYi5nbG9iKCcvZGV2L3R0eUFDTSonKQotICAgIHJldHVybiBbKGQsIGRlc2NyaWJlKGQpLCBod2luZm8oZCkpIGZvciBkIGluIGRldmljZXNdCi0KLSMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KLSMgdGVzdAotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBmb3IgcG9ydCwgZGVzYywgaHdpZCBpbiBzb3J0ZWQoY29tcG9ydHMoKSk6Ci0gICAgICAgIHByaW50ICIlczogJXMgWyVzXSIgJSAocG9ydCwgZGVzYywgaHdpZCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC90b29scy9saXN0X3BvcnRzX29zeC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC90b29scy9saXN0X3BvcnRzX29zeC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYzllZDYxNS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdG9vbHMvbGlzdF9wb3J0c19vc3gucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgcG9ydGFibGUgc2VyaWFsIHBvcnQgYWNjZXNzIHdpdGggcHl0aG9uCi0jCi0jIFRoaXMgaXMgYSBtb2R1bGUgdGhhdCBnYXRoZXJzIGEgbGlzdCBvZiBzZXJpYWwgcG9ydHMgaW5jbHVkaW5nIGRldGFpbHMgb24gT1NYCi0jCi0jIGNvZGUgb3JpZ2luYWxseSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWtlcmJvdC9weXNlcmlhbC90cmVlL21hc3Rlci9zZXJpYWwvdG9vbHMKLSMgd2l0aCBjb250cmlidXRpb25zIGZyb20gY2lib21haHRvLCBkZ3MzLCBGYXJNY0tvbiwgdGVkYnJhbmRzdG9uCi0jIGFuZCBtb2RpZmljYXRpb25zIGJ5IGNsaWVjaHRpCi0jCi0jIHRoaXMgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYSBmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHNlZSBsaWNlbnNlLnR4dAotCi0KLQotIyBMaXN0IGFsbCBvZiB0aGUgY2FsbG91dCBkZXZpY2VzIGluIE9TL1ggYnkgcXVlcnlpbmcgSU9LaXQuCi0KLSMgU2VlIHRoZSBmb2xsb3dpbmcgZm9yIGEgcmVmZXJlbmNlIG9mIGhvdyB0byBkbyB0aGlzOgotIyBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L21hYy8jZG9jdW1lbnRhdGlvbi9EZXZpY2VEcml2ZXJzL0NvbmNlcHR1YWwvV29ya2luZ1dTZXJpYWwvV1dTZXJpYWxfU2VyaWFsRGV2cy9TZXJpYWxEZXZpY2VzLmh0bWwjLy9hcHBsZV9yZWYvZG9jL3VpZC9UUDMwMDAwMzg0LUNJSEdFQUZECi0KLSMgTW9yZSBoZWxwIGZyb20gZGFyd2luX2hpZC5weQotCi0jIEFsc28gc2VlIHRoZSAnSU9SZWdpc3RyeUV4cGxvcmVyJyBmb3IgYW4gaWRlYSBvZiB3aGF0IHdlIGFyZSBhY3R1YWxseSBzZWFyY2hpbmcKLQotaW1wb3J0IGN0eXBlcwotZnJvbSBjdHlwZXMgaW1wb3J0IHV0aWwKLWltcG9ydCByZQotCi1pb2tpdCA9IGN0eXBlcy5jZGxsLkxvYWRMaWJyYXJ5KGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgnSU9LaXQnKSkKLWNmID0gY3R5cGVzLmNkbGwuTG9hZExpYnJhcnkoY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5KCdDb3JlRm91bmRhdGlvbicpKQotCi1rSU9NYXN0ZXJQb3J0RGVmYXVsdCA9IGN0eXBlcy5jX3ZvaWRfcC5pbl9kbGwoaW9raXQsICJrSU9NYXN0ZXJQb3J0RGVmYXVsdCIpCi1rQ0ZBbGxvY2F0b3JEZWZhdWx0ID0gY3R5cGVzLmNfdm9pZF9wLmluX2RsbChjZiwgImtDRkFsbG9jYXRvckRlZmF1bHQiKQotCi1rQ0ZTdHJpbmdFbmNvZGluZ01hY1JvbWFuID0gMAotCi1pb2tpdC5JT1NlcnZpY2VNYXRjaGluZy5yZXN0eXBlID0gY3R5cGVzLmNfdm9pZF9wCi0KLWlva2l0LklPU2VydmljZUdldE1hdGNoaW5nU2VydmljZXMuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCBjdHlwZXMuY192b2lkX3AsIGN0eXBlcy5jX3ZvaWRfcF0KLWlva2l0LklPU2VydmljZUdldE1hdGNoaW5nU2VydmljZXMucmVzdHlwZSA9IGN0eXBlcy5jX3ZvaWRfcAotCi1pb2tpdC5JT1JlZ2lzdHJ5RW50cnlHZXRQYXJlbnRFbnRyeS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIGN0eXBlcy5jX3ZvaWRfcCwgY3R5cGVzLmNfdm9pZF9wXQotCi1pb2tpdC5JT1JlZ2lzdHJ5RW50cnlDcmVhdGVDRlByb3BlcnR5LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgY3R5cGVzLmNfdm9pZF9wLCBjdHlwZXMuY192b2lkX3AsIGN0eXBlcy5jX3VpbnQzMl0KLWlva2l0LklPUmVnaXN0cnlFbnRyeUNyZWF0ZUNGUHJvcGVydHkucmVzdHlwZSA9IGN0eXBlcy5jX3ZvaWRfcAotCi1pb2tpdC5JT1JlZ2lzdHJ5RW50cnlHZXRQYXRoLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgY3R5cGVzLmNfdm9pZF9wLCBjdHlwZXMuY192b2lkX3BdCi1pb2tpdC5JT1JlZ2lzdHJ5RW50cnlHZXRQYXRoLnJlc3R5cGUgPSBjdHlwZXMuY192b2lkX3AKLQotaW9raXQuSU9SZWdpc3RyeUVudHJ5R2V0TmFtZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIGN0eXBlcy5jX3ZvaWRfcF0KLWlva2l0LklPUmVnaXN0cnlFbnRyeUdldE5hbWUucmVzdHlwZSA9IGN0eXBlcy5jX3ZvaWRfcAotCi1pb2tpdC5JT09iamVjdEdldENsYXNzLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgY3R5cGVzLmNfdm9pZF9wXQotaW9raXQuSU9PYmplY3RHZXRDbGFzcy5yZXN0eXBlID0gY3R5cGVzLmNfdm9pZF9wCi0KLWlva2l0LklPT2JqZWN0UmVsZWFzZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCi0KLQotY2YuQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZy5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIGN0eXBlcy5jX2NoYXJfcCwgY3R5cGVzLmNfaW50MzJdCi1jZi5DRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nLnJlc3R5cGUgPSBjdHlwZXMuY192b2lkX3AKLQotY2YuQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgY3R5cGVzLmNfdWludDMyXQotY2YuQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyLnJlc3R5cGUgPSBjdHlwZXMuY19jaGFyX3AKLQotY2YuQ0ZOdW1iZXJHZXRWYWx1ZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIGN0eXBlcy5jX3VpbnQzMiwgY3R5cGVzLmNfdm9pZF9wXQotY2YuQ0ZOdW1iZXJHZXRWYWx1ZS5yZXN0eXBlID0gY3R5cGVzLmNfdm9pZF9wCi0KLWRlZiBnZXRfc3RyaW5nX3Byb3BlcnR5KGRldmljZV90LCBwcm9wZXJ0eSk6Ci0gICAgIiIiIFNlYXJjaCB0aGUgZ2l2ZW4gZGV2aWNlIGZvciB0aGUgc3BlY2lmaWVkIHN0cmluZyBwcm9wZXJ0eQotCi0gICAgQHBhcmFtIGRldmljZV90IERldmljZSB0byBzZWFyY2gKLSAgICBAcGFyYW0gcHJvcGVydHkgU3RyaW5nIHRvIHNlYXJjaCBmb3IuCi0gICAgQHJldHVybiBQeXRob24gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZhbHVlLCBvciBOb25lIGlmIG5vdCBmb3VuZC4KLSAgICAiIiIKLSAgICBrZXkgPSBjZi5DRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKAotICAgICAgICBrQ0ZBbGxvY2F0b3JEZWZhdWx0LAotICAgICAgICBwcm9wZXJ0eS5lbmNvZGUoIm1hY19yb21hbiIpLAotICAgICAgICBrQ0ZTdHJpbmdFbmNvZGluZ01hY1JvbWFuCi0gICAgKQotCi0gICAgQ0ZDb250YWluZXIgPSBpb2tpdC5JT1JlZ2lzdHJ5RW50cnlDcmVhdGVDRlByb3BlcnR5KAotICAgICAgICBkZXZpY2VfdCwKLSAgICAgICAga2V5LAotICAgICAgICBrQ0ZBbGxvY2F0b3JEZWZhdWx0LAotICAgICAgICAwCi0gICAgKTsKLQotICAgIG91dHB1dCA9IE5vbmUKLQotICAgIGlmIENGQ29udGFpbmVyOgotICAgICAgICBvdXRwdXQgPSBjZi5DRlN0cmluZ0dldENTdHJpbmdQdHIoQ0ZDb250YWluZXIsIDApCi0KLSAgICByZXR1cm4gb3V0cHV0Ci0KLWRlZiBnZXRfaW50X3Byb3BlcnR5KGRldmljZV90LCBwcm9wZXJ0eSk6Ci0gICAgIiIiIFNlYXJjaCB0aGUgZ2l2ZW4gZGV2aWNlIGZvciB0aGUgc3BlY2lmaWVkIHN0cmluZyBwcm9wZXJ0eQotCi0gICAgQHBhcmFtIGRldmljZV90IERldmljZSB0byBzZWFyY2gKLSAgICBAcGFyYW0gcHJvcGVydHkgU3RyaW5nIHRvIHNlYXJjaCBmb3IuCi0gICAgQHJldHVybiBQeXRob24gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZhbHVlLCBvciBOb25lIGlmIG5vdCBmb3VuZC4KLSAgICAiIiIKLSAgICBrZXkgPSBjZi5DRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKAotICAgICAgICBrQ0ZBbGxvY2F0b3JEZWZhdWx0LAotICAgICAgICBwcm9wZXJ0eS5lbmNvZGUoIm1hY19yb21hbiIpLAotICAgICAgICBrQ0ZTdHJpbmdFbmNvZGluZ01hY1JvbWFuCi0gICAgKQotCi0gICAgQ0ZDb250YWluZXIgPSBpb2tpdC5JT1JlZ2lzdHJ5RW50cnlDcmVhdGVDRlByb3BlcnR5KAotICAgICAgICBkZXZpY2VfdCwKLSAgICAgICAga2V5LAotICAgICAgICBrQ0ZBbGxvY2F0b3JEZWZhdWx0LAotICAgICAgICAwCi0gICAgKTsKLQotICAgIG51bWJlciA9IGN0eXBlcy5jX3VpbnQxNigpCi0KLSAgICBpZiBDRkNvbnRhaW5lcjoKLSAgICAgICAgb3V0cHV0ID0gY2YuQ0ZOdW1iZXJHZXRWYWx1ZShDRkNvbnRhaW5lciwgMiwgY3R5cGVzLmJ5cmVmKG51bWJlcikpCi0KLSAgICByZXR1cm4gbnVtYmVyLnZhbHVlCi0KLWRlZiBJT1JlZ2lzdHJ5RW50cnlHZXROYW1lKGRldmljZSk6Ci0gICAgcGF0aG5hbWUgPSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIoMTAwKSAjIFRPRE86IElzIHRoaXMgb2s/Ci0gICAgaW9raXQuSU9PYmplY3RHZXRDbGFzcygKLSAgICAgICAgZGV2aWNlLAotICAgICAgICBjdHlwZXMuYnlyZWYocGF0aG5hbWUpCi0gICAgKQotCi0gICAgcmV0dXJuIHBhdGhuYW1lLnZhbHVlCi0KLWRlZiBHZXRQYXJlbnREZXZpY2VCeVR5cGUoZGV2aWNlLCBwYXJlbnRfdHlwZSk6Ci0gICAgIiIiIEZpbmQgdGhlIGZpcnN0IHBhcmVudCBvZiBhIGRldmljZSB0aGF0IGltcGxlbWVudHMgdGhlIHBhcmVudF90eXBlCi0gICAgICAgIEBwYXJhbSBJT1NlcnZpY2UgU2VydmljZSB0byBpbnNwZWN0Ci0gICAgICAgIEByZXR1cm4gUG9pbnRlciB0byB0aGUgcGFyZW50IHR5cGUsIG9yIE5vbmUgaWYgaXQgd2FzIG5vdCBmb3VuZC4KLSAgICAiIiIKLSAgICAjIEZpcnN0LCB0cnkgdG8gd2FsayB1cCB0aGUgSU9TZXJ2aWNlIHRyZWUgdG8gZmluZCBhIHBhcmVudCBvZiB0aGlzIGRldmljZSB0aGF0IGlzIGEgSU9VU0JEZXZpY2UuCi0gICAgd2hpbGUgSU9SZWdpc3RyeUVudHJ5R2V0TmFtZShkZXZpY2UpICE9IHBhcmVudF90eXBlOgotICAgICAgICBwYXJlbnQgPSBjdHlwZXMuY192b2lkX3AoKQotICAgICAgICByZXNwb25zZSA9IGlva2l0LklPUmVnaXN0cnlFbnRyeUdldFBhcmVudEVudHJ5KAotICAgICAgICAgICAgZGV2aWNlLAotICAgICAgICAgICAgIklPU2VydmljZSIuZW5jb2RlKCJtYWNfcm9tYW4iKSwKLSAgICAgICAgICAgIGN0eXBlcy5ieXJlZihwYXJlbnQpCi0gICAgICAgICkKLQotICAgICAgICAjIElmIHdlIHdlcmVuJ3QgYWJsZSB0byBmaW5kIGEgcGFyZW50IGZvciB0aGUgZGV2aWNlLCB3ZSdyZSBkb25lLgotICAgICAgICBpZiByZXNwb25zZSAhPSAwOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICBkZXZpY2UgPSBwYXJlbnQKLQotICAgIHJldHVybiBkZXZpY2UKLQotZGVmIEdldElPU2VydmljZXNCeVR5cGUoc2VydmljZV90eXBlKToKLSAgICAiIiIKLSAgICAiIiIKLSAgICBzZXJpYWxfcG9ydF9pdGVyYXRvciA9IGN0eXBlcy5jX3ZvaWRfcCgpCi0KLSAgICByZXNwb25zZSA9IGlva2l0LklPU2VydmljZUdldE1hdGNoaW5nU2VydmljZXMoCi0gICAgICAgIGtJT01hc3RlclBvcnREZWZhdWx0LAotICAgICAgICBpb2tpdC5JT1NlcnZpY2VNYXRjaGluZyhzZXJ2aWNlX3R5cGUpLAotICAgICAgICBjdHlwZXMuYnlyZWYoc2VyaWFsX3BvcnRfaXRlcmF0b3IpCi0gICAgKQotCi0gICAgc2VydmljZXMgPSBbXQotICAgIHdoaWxlIGlva2l0LklPSXRlcmF0b3JJc1ZhbGlkKHNlcmlhbF9wb3J0X2l0ZXJhdG9yKToKLSAgICAgICAgc2VydmljZSA9IGlva2l0LklPSXRlcmF0b3JOZXh0KHNlcmlhbF9wb3J0X2l0ZXJhdG9yKQotICAgICAgICBpZiBub3Qgc2VydmljZToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHNlcnZpY2VzLmFwcGVuZChzZXJ2aWNlKQotCi0gICAgaW9raXQuSU9PYmplY3RSZWxlYXNlKHNlcmlhbF9wb3J0X2l0ZXJhdG9yKQotCi0gICAgcmV0dXJuIHNlcnZpY2VzCi0KLWRlZiBjb21wb3J0cygpOgotICAgICMgU2NhbiBmb3IgYWxsIGlva2l0IHNlcmlhbCBwb3J0cwotICAgIHNlcnZpY2VzID0gR2V0SU9TZXJ2aWNlc0J5VHlwZSgnSU9TZXJpYWxCU0RDbGllbnQnKQotCi0gICAgcG9ydHMgPSBbXQotICAgIGZvciBzZXJ2aWNlIGluIHNlcnZpY2VzOgotICAgICAgICBpbmZvID0gW10KLQotICAgICAgICAjIEZpcnN0LCBhZGQgdGhlIGNhbGxvdXQgZGV2aWNlIGZpbGUuCi0gICAgICAgIGluZm8uYXBwZW5kKGdldF9zdHJpbmdfcHJvcGVydHkoc2VydmljZSwgIklPQ2FsbG91dERldmljZSIpKQotCi0gICAgICAgICMgSWYgdGhlIHNlcmlhbCBwb3J0IGlzIGltcGxlbWVudGVkIGJ5IGEKLSAgICAgICAgdXNiX2RldmljZSA9IEdldFBhcmVudERldmljZUJ5VHlwZShzZXJ2aWNlLCAiSU9VU0JEZXZpY2UiKQotICAgICAgICBpZiB1c2JfZGV2aWNlICE9IE5vbmU6Ci0gICAgICAgICAgICBpbmZvLmFwcGVuZChnZXRfc3RyaW5nX3Byb3BlcnR5KHVzYl9kZXZpY2UsICJVU0IgUHJvZHVjdCBOYW1lIikpCi0KLSAgICAgICAgICAgIGluZm8uYXBwZW5kKAotICAgICAgICAgICAgICAgICJVU0IgVklEOlBJRD0leDoleCBTTlI9JXMiJSgKLSAgICAgICAgICAgICAgICBnZXRfaW50X3Byb3BlcnR5KHVzYl9kZXZpY2UsICJpZFZlbmRvciIpLAotICAgICAgICAgICAgICAgIGdldF9pbnRfcHJvcGVydHkodXNiX2RldmljZSwgImlkUHJvZHVjdCIpLAotICAgICAgICAgICAgICAgIGdldF9zdHJpbmdfcHJvcGVydHkodXNiX2RldmljZSwgIlVTQiBTZXJpYWwgTnVtYmVyIikpCi0gICAgICAgICAgICApCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgIGluZm8uYXBwZW5kKCduL2EnKQotICAgICAgICAgICBpbmZvLmFwcGVuZCgnbi9hJykKLQotICAgICAgICBwb3J0cy5hcHBlbmQoaW5mbykKLQotICAgIHJldHVybiBwb3J0cwotCi0jIHRlc3QKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZm9yIHBvcnQsIGRlc2MsIGh3aWQgaW4gc29ydGVkKGNvbXBvcnRzKCkpOgotICAgICAgICBwcmludCAiJXM6ICVzIFslc10iICUgKHBvcnQsIGRlc2MsIGh3aWQpCi0KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC90b29scy9saXN0X3BvcnRzX3Bvc2l4LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3Rvb2xzL2xpc3RfcG9ydHNfcG9zaXgucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDA5ZjExNWYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3Rvb2xzL2xpc3RfcG9ydHNfcG9zaXgucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgcG9ydGFibGUgc2VyaWFsIHBvcnQgYWNjZXNzIHdpdGggcHl0aG9uCi0KLSMgVGhpcyBpcyBhIG1vZHVsZSB0aGF0IGdhdGhlcnMgYSBsaXN0IG9mIHNlcmlhbCBwb3J0cyBvbiBQT1NJWHkgc3lzdGVtcy4KLSMgRm9yIHNvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLCBzZWUgYWxzbyBsaXN0X3BvcnRzX2xpbnV4LCBsaXN0X3BvcnRzX29zeAotIwotIyB0aGlzIGlzIGEgd3JhcHBlciBtb2R1bGUgZm9yIGRpZmZlcmVudCBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlCi0jIHBvcnQgZW51bWVyYXRpb24gZmVhdHVyZQotIwotIyAoQykgMjAxMS0yMDEzIENocmlzIExpZWNodGkgPGNsaWVjaHRpQGdteC5uZXQ+Ci0jIHRoaXMgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYSBmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHNlZSBsaWNlbnNlLnR4dAotCi0iIiJcCi1UaGUgYGBjb21wb3J0c2BgIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHJldHVybiBhbiBpdGVyYWJsZSB0aGF0IHlpZWxkcyB0dXBsZXMKLW9mIDMgc3RyaW5nczogcG9ydCBuYW1lLCBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBhbmQgYSBoYXJkd2FyZSBJRC4KLQotQXMgY3VycmVudGx5IG5vIG1ldGhvZCBpcyBrbm93biB0byBnZXQgdGhlIHNlY29uZCB0d28gc3RyaW5ncyBlYXNpbHksIHRoZXkgYXJlCi1jdXJyZW50bHkganVzdCBpZGVudGljYWwgdG8gdGhlIHBvcnQgbmFtZS4KLSIiIgotCi1pbXBvcnQgZ2xvYgotaW1wb3J0IHN5cwotaW1wb3J0IG9zCi0KLSMgdHJ5IHRvIGRldGVjdCB0aGUgT1Mgc28gdGhhdCBhIGRldmljZSBjYW4gYmUgc2VsZWN0ZWQuLi4KLXBsYXQgPSBzeXMucGxhdGZvcm0ubG93ZXIoKQotCi1pZiAgIHBsYXRbOjVdID09ICdsaW51eCc6ICAgICMgTGludXggKGNvbmZpcm1lZCkKLSAgICBmcm9tIHNlcmlhbC50b29scy5saXN0X3BvcnRzX2xpbnV4IGltcG9ydCBjb21wb3J0cwotCi1lbGlmIHBsYXQgPT0gJ2N5Z3dpbic6ICAgICAgICMgY3lnd2luL3dpbjMyCi0gICAgZGVmIGNvbXBvcnRzKCk6Ci0gICAgICAgIGRldmljZXMgPSBnbG9iLmdsb2IoJy9kZXYvY29tKicpCi0gICAgICAgIHJldHVybiBbKGQsIGQsIGQpIGZvciBkIGluIGRldmljZXNdCi0KLWVsaWYgcGxhdFs6N10gPT0gJ29wZW5ic2QnOiAgICAjIE9wZW5CU0QKLSAgICBkZWYgY29tcG9ydHMoKToKLSAgICAgICAgZGV2aWNlcyA9IGdsb2IuZ2xvYignL2Rldi9jdWEqJykKLSAgICAgICAgcmV0dXJuIFsoZCwgZCwgZCkgZm9yIGQgaW4gZGV2aWNlc10KLQotZWxpZiBwbGF0WzozXSA9PSAnYnNkJyBvciAgXAotICAgICAgICBwbGF0Wzo3XSA9PSAnZnJlZWJzZCc6Ci0KLSAgICBkZWYgY29tcG9ydHMoKToKLSAgICAgICAgZGV2aWNlcyA9IGdsb2IuZ2xvYignL2Rldi9jdWFkKicpCi0gICAgICAgIHJldHVybiBbKGQsIGQsIGQpIGZvciBkIGluIGRldmljZXNdCi0KLWVsaWYgcGxhdFs6Nl0gPT0gJ2Rhcndpbic6ICAgIyBPUyBYIChjb25maXJtZWQpCi0gICAgZnJvbSBzZXJpYWwudG9vbHMubGlzdF9wb3J0c19vc3ggaW1wb3J0IGNvbXBvcnRzCi0KLWVsaWYgcGxhdFs6Nl0gPT0gJ25ldGJzZCc6ICAgIyBOZXRCU0QKLSAgICBkZWYgY29tcG9ydHMoKToKLSAgICAgICAgIiIic2NhbiBmb3IgYXZhaWxhYmxlIHBvcnRzLiByZXR1cm4gYSBsaXN0IG9mIGRldmljZSBuYW1lcy4iIiIKLSAgICAgICAgZGV2aWNlcyA9IGdsb2IuZ2xvYignL2Rldi9kdHkqJykKLSAgICAgICAgcmV0dXJuIFsoZCwgZCwgZCkgZm9yIGQgaW4gZGV2aWNlc10KLQotZWxpZiBwbGF0Wzo0XSA9PSAnaXJpeCc6ICAgICAjIElSSVgKLSAgICBkZWYgY29tcG9ydHMoKToKLSAgICAgICAgIiIic2NhbiBmb3IgYXZhaWxhYmxlIHBvcnRzLiByZXR1cm4gYSBsaXN0IG9mIGRldmljZSBuYW1lcy4iIiIKLSAgICAgICAgZGV2aWNlcyA9IGdsb2IuZ2xvYignL2Rldi90dHlmKicpCi0gICAgICAgIHJldHVybiBbKGQsIGQsIGQpIGZvciBkIGluIGRldmljZXNdCi0KLWVsaWYgcGxhdFs6Ml0gPT0gJ2hwJzogICAgICAgIyBIUC1VWCAobm90IHRlc3RlZCkKLSAgICBkZWYgY29tcG9ydHMoKToKLSAgICAgICAgIiIic2NhbiBmb3IgYXZhaWxhYmxlIHBvcnRzLiByZXR1cm4gYSBsaXN0IG9mIGRldmljZSBuYW1lcy4iIiIKLSAgICAgICAgZGV2aWNlcyA9IGdsb2IuZ2xvYignL2Rldi90dHkqcDAnKQotICAgICAgICByZXR1cm4gWyhkLCBkLCBkKSBmb3IgZCBpbiBkZXZpY2VzXQotCi1lbGlmIHBsYXRbOjVdID09ICdzdW5vcyc6ICAgICMgU29sYXJpcy9TdW5PUwotICAgIGRlZiBjb21wb3J0cygpOgotICAgICAgICAiIiJzY2FuIGZvciBhdmFpbGFibGUgcG9ydHMuIHJldHVybiBhIGxpc3Qgb2YgZGV2aWNlIG5hbWVzLiIiIgotICAgICAgICBkZXZpY2VzID0gZ2xvYi5nbG9iKCcvZGV2L3R0eSpjJykKLSAgICAgICAgcmV0dXJuIFsoZCwgZCwgZCkgZm9yIGQgaW4gZGV2aWNlc10KLQotZWxpZiBwbGF0WzozXSA9PSAnYWl4JzogICAgICAjIEFJWAotICAgIGRlZiBjb21wb3J0cygpOgotICAgICAgICAiIiJzY2FuIGZvciBhdmFpbGFibGUgcG9ydHMuIHJldHVybiBhIGxpc3Qgb2YgZGV2aWNlIG5hbWVzLiIiIgotICAgICAgICBkZXZpY2VzID0gZ2xvYi5nbG9iKCcvZGV2L3R0eSonKQotICAgICAgICByZXR1cm4gWyhkLCBkLCBkKSBmb3IgZCBpbiBkZXZpY2VzXQotCi1lbHNlOgotICAgICMgcGxhdGZvcm0gZGV0ZWN0aW9uIGhhcyBmYWlsZWQuLi4KLSAgICBzeXMuc3RkZXJyLndyaXRlKCIiIlwKLWRvbid0IGtub3cgaG93IHRvIGVudW1lcmF0ZSB0dHlzIG9uIHRoaXMgc3lzdGVtLgotISBJIHlvdSBrbm93IGhvdyB0aGUgc2VyaWFsIHBvcnRzIGFyZSBuYW1lZCBzZW5kIHRoaXMgaW5mb3JtYXRpb24gdG8KLSEgdGhlIGF1dGhvciBvZiB0aGlzIG1vZHVsZToKLQotc3lzLnBsYXRmb3JtID0gJXIKLW9zLm5hbWUgPSAlcgotcHlTZXJpYWwgdmVyc2lvbiA9ICVzCi0KLWFsc28gYWRkIHRoZSBuYW1pbmcgc2NoZW1lIG9mIHRoZSBzZXJpYWwgcG9ydHMgYW5kIHdpdGggYSBiaXQgbHVjayB5b3UgY2FuIGdldAotdGhpcyBtb2R1bGUgcnVubmluZy4uLgotIiIiICUgKHN5cy5wbGF0Zm9ybSwgb3MubmFtZSwgc2VyaWFsLlZFUlNJT04pKQotICAgIHJhaXNlIEltcG9ydEVycm9yKCJTb3JyeTogbm8gaW1wbGVtZW50YXRpb24gZm9yIHlvdXIgcGxhdGZvcm0gKCclcycpIGF2YWlsYWJsZSIgJSAob3MubmFtZSwpKQotCi0jIHRlc3QKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZm9yIHBvcnQsIGRlc2MsIGh3aWQgaW4gc29ydGVkKGNvbXBvcnRzKCkpOgotICAgICAgICBwcmludCAiJXM6ICVzIFslc10iICUgKHBvcnQsIGRlc2MsIGh3aWQpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdG9vbHMvbGlzdF9wb3J0c193aW5kb3dzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3Rvb2xzL2xpc3RfcG9ydHNfd2luZG93cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E1OTdjYS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdG9vbHMvbGlzdF9wb3J0c193aW5kb3dzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjQwICswLDAgQEAKLWltcG9ydCBjdHlwZXMKLWltcG9ydCByZQotCi1kZWYgVmFsaWRIYW5kbGUodmFsdWUsIGZ1bmMsIGFyZ3VtZW50cyk6Ci0gICAgaWYgdmFsdWUgPT0gMDoKLSAgICAgICAgcmFpc2UgY3R5cGVzLldpbkVycm9yKCkKLSAgICByZXR1cm4gdmFsdWUKLQotaW1wb3J0IHNlcmlhbAotZnJvbSBzZXJpYWwud2luMzIgaW1wb3J0IFVMT05HX1BUUiwgaXNfNjRiaXQKLWZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBIQU5ETEUKLWZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBCT09MCi1mcm9tIGN0eXBlcy53aW50eXBlcyBpbXBvcnQgSFdORAotZnJvbSBjdHlwZXMud2ludHlwZXMgaW1wb3J0IERXT1JECi1mcm9tIGN0eXBlcy53aW50eXBlcyBpbXBvcnQgV09SRAotZnJvbSBjdHlwZXMud2ludHlwZXMgaW1wb3J0IExPTkcKLWZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBVTE9ORwotZnJvbSBjdHlwZXMud2ludHlwZXMgaW1wb3J0IExQQ1NUUgotZnJvbSBjdHlwZXMud2ludHlwZXMgaW1wb3J0IEhLRVkKLWZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBCWVRFCi0KLU5VTEwgPSAwCi1IREVWSU5GTyA9IGN0eXBlcy5jX3ZvaWRfcAotUENUU1RSID0gY3R5cGVzLmNfY2hhcl9wCi1QVFNUUiA9IGN0eXBlcy5jX3ZvaWRfcAotQ0hBUiA9IGN0eXBlcy5jX2NoYXIKLUxQRFdPUkQgPSBQRFdPUkQgPSBjdHlwZXMuUE9JTlRFUihEV09SRCkKLSN+IExQQllURSA9IFBCWVRFID0gY3R5cGVzLlBPSU5URVIoQllURSkKLUxQQllURSA9IFBCWVRFID0gY3R5cGVzLmNfdm9pZF9wICAgICAgICAjIFhYWCBhdm9pZHMgZXJyb3IgYWJvdXQgdHlwZXMKLQotQUNDRVNTX01BU0sgPSBEV09SRAotUkVHU0FNID0gQUNDRVNTX01BU0sKLQotCi1kZWYgYnl0ZV9idWZmZXIobGVuZ3RoKToKLSAgICAiIiJHZXQgYSBidWZmZXIgZm9yIGEgc3RyaW5nIiIiCi0gICAgcmV0dXJuIChCWVRFKmxlbmd0aCkoKQotCi1kZWYgc3RyaW5nKGJ1ZmZlcik6Ci0gICAgcyA9IFtdCi0gICAgZm9yIGMgaW4gYnVmZmVyOgotICAgICAgICBpZiBjID09IDA6IGJyZWFrCi0gICAgICAgIHMuYXBwZW5kKGNocihjICYgMHhmZikpICMgIiYgMHhmZiI6IGhhY2sgdG8gY29udmVydCBzaWduZWQgdG8gdW5zaWduZWQKLSAgICByZXR1cm4gJycuam9pbihzKQotCi0KLWNsYXNzIEdVSUQoY3R5cGVzLlN0cnVjdHVyZSk6Ci0gICAgX2ZpZWxkc18gPSBbCi0gICAgICAgICgnRGF0YTEnLCBEV09SRCksCi0gICAgICAgICgnRGF0YTInLCBXT1JEKSwKLSAgICAgICAgKCdEYXRhMycsIFdPUkQpLAotICAgICAgICAoJ0RhdGE0JywgQllURSo4KSwKLSAgICBdCi0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAieyUwOHgtJTA0eC0lMDR4LSVzLSVzfSIgJSAoCi0gICAgICAgICAgICBzZWxmLkRhdGExLAotICAgICAgICAgICAgc2VsZi5EYXRhMiwKLSAgICAgICAgICAgIHNlbGYuRGF0YTMsCi0gICAgICAgICAgICAnJy5qb2luKFsiJTAyeCIgJSBkIGZvciBkIGluIHNlbGYuRGF0YTRbOjJdXSksCi0gICAgICAgICAgICAnJy5qb2luKFsiJTAyeCIgJSBkIGZvciBkIGluIHNlbGYuRGF0YTRbMjpdXSksCi0gICAgICAgICkKLQotY2xhc3MgU1BfREVWSU5GT19EQVRBKGN0eXBlcy5TdHJ1Y3R1cmUpOgotICAgIF9maWVsZHNfID0gWwotICAgICAgICAoJ2NiU2l6ZScsIERXT1JEKSwKLSAgICAgICAgKCdDbGFzc0d1aWQnLCBHVUlEKSwKLSAgICAgICAgKCdEZXZJbnN0JywgRFdPUkQpLAotICAgICAgICAoJ1Jlc2VydmVkJywgVUxPTkdfUFRSKSwKLSAgICBdCi0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiQ2xhc3NHdWlkOiVzIERldkluc3Q6JXMiICUgKHNlbGYuQ2xhc3NHdWlkLCBzZWxmLkRldkluc3QpCi1QU1BfREVWSU5GT19EQVRBID0gY3R5cGVzLlBPSU5URVIoU1BfREVWSU5GT19EQVRBKQotCi1QU1BfREVWSUNFX0lOVEVSRkFDRV9ERVRBSUxfREFUQSA9IGN0eXBlcy5jX3ZvaWRfcAotCi1zZXR1cGFwaSA9IGN0eXBlcy53aW5kbGwuTG9hZExpYnJhcnkoInNldHVwYXBpIikKLVNldHVwRGlEZXN0cm95RGV2aWNlSW5mb0xpc3QgPSBzZXR1cGFwaS5TZXR1cERpRGVzdHJveURldmljZUluZm9MaXN0Ci1TZXR1cERpRGVzdHJveURldmljZUluZm9MaXN0LmFyZ3R5cGVzID0gW0hERVZJTkZPXQotU2V0dXBEaURlc3Ryb3lEZXZpY2VJbmZvTGlzdC5yZXN0eXBlID0gQk9PTAotCi1TZXR1cERpQ2xhc3NHdWlkc0Zyb21OYW1lID0gc2V0dXBhcGkuU2V0dXBEaUNsYXNzR3VpZHNGcm9tTmFtZUEKLVNldHVwRGlDbGFzc0d1aWRzRnJvbU5hbWUuYXJndHlwZXMgPSBbUENUU1RSLCBjdHlwZXMuUE9JTlRFUihHVUlEKSwgRFdPUkQsIFBEV09SRF0KLVNldHVwRGlDbGFzc0d1aWRzRnJvbU5hbWUucmVzdHlwZSA9IEJPT0wKLQotU2V0dXBEaUVudW1EZXZpY2VJbmZvID0gc2V0dXBhcGkuU2V0dXBEaUVudW1EZXZpY2VJbmZvCi1TZXR1cERpRW51bURldmljZUluZm8uYXJndHlwZXMgPSBbSERFVklORk8sIERXT1JELCBQU1BfREVWSU5GT19EQVRBXQotU2V0dXBEaUVudW1EZXZpY2VJbmZvLnJlc3R5cGUgPSBCT09MCi0KLVNldHVwRGlHZXRDbGFzc0RldnMgPSBzZXR1cGFwaS5TZXR1cERpR2V0Q2xhc3NEZXZzQQotU2V0dXBEaUdldENsYXNzRGV2cy5hcmd0eXBlcyA9IFtjdHlwZXMuUE9JTlRFUihHVUlEKSwgUENUU1RSLCBIV05ELCBEV09SRF0KLVNldHVwRGlHZXRDbGFzc0RldnMucmVzdHlwZSA9IEhERVZJTkZPCi1TZXR1cERpR2V0Q2xhc3NEZXZzLmVycmNoZWNrID0gVmFsaWRIYW5kbGUKLQotU2V0dXBEaUdldERldmljZVJlZ2lzdHJ5UHJvcGVydHkgPSBzZXR1cGFwaS5TZXR1cERpR2V0RGV2aWNlUmVnaXN0cnlQcm9wZXJ0eUEKLVNldHVwRGlHZXREZXZpY2VSZWdpc3RyeVByb3BlcnR5LmFyZ3R5cGVzID0gW0hERVZJTkZPLCBQU1BfREVWSU5GT19EQVRBLCBEV09SRCwgUERXT1JELCBQQllURSwgRFdPUkQsIFBEV09SRF0KLVNldHVwRGlHZXREZXZpY2VSZWdpc3RyeVByb3BlcnR5LnJlc3R5cGUgPSBCT09MCi0KLVNldHVwRGlHZXREZXZpY2VJbnN0YW5jZUlkID0gc2V0dXBhcGkuU2V0dXBEaUdldERldmljZUluc3RhbmNlSWRBCi1TZXR1cERpR2V0RGV2aWNlSW5zdGFuY2VJZC5hcmd0eXBlcyA9IFtIREVWSU5GTywgUFNQX0RFVklORk9fREFUQSwgUFRTVFIsIERXT1JELCBQRFdPUkRdCi1TZXR1cERpR2V0RGV2aWNlSW5zdGFuY2VJZC5yZXN0eXBlID0gQk9PTAotCi1TZXR1cERpT3BlbkRldlJlZ0tleSA9IHNldHVwYXBpLlNldHVwRGlPcGVuRGV2UmVnS2V5Ci1TZXR1cERpT3BlbkRldlJlZ0tleS5hcmd0eXBlcyA9IFtIREVWSU5GTywgUFNQX0RFVklORk9fREFUQSwgRFdPUkQsIERXT1JELCBEV09SRCwgUkVHU0FNXQotU2V0dXBEaU9wZW5EZXZSZWdLZXkucmVzdHlwZSA9IEhLRVkKLQotYWR2YXBpMzIgPSBjdHlwZXMud2luZGxsLkxvYWRMaWJyYXJ5KCJBZHZhcGkzMiIpCi1SZWdDbG9zZUtleSA9IGFkdmFwaTMyLlJlZ0Nsb3NlS2V5Ci1SZWdDbG9zZUtleS5hcmd0eXBlcyA9IFtIS0VZXQotUmVnQ2xvc2VLZXkucmVzdHlwZSA9IExPTkcKLQotUmVnUXVlcnlWYWx1ZUV4ID0gYWR2YXBpMzIuUmVnUXVlcnlWYWx1ZUV4QQotUmVnUXVlcnlWYWx1ZUV4LmFyZ3R5cGVzID0gW0hLRVksIExQQ1NUUiwgTFBEV09SRCwgTFBEV09SRCwgTFBCWVRFLCBMUERXT1JEXQotUmVnUXVlcnlWYWx1ZUV4LnJlc3R5cGUgPSBMT05HCi0KLQotRElHQ0ZfUFJFU0VOVCA9IDIKLURJR0NGX0RFVklDRUlOVEVSRkFDRSA9IDE2Ci1JTlZBTElEX0hBTkRMRV9WQUxVRSA9IDAKLUVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIgPSAxMjIKLVNQRFJQX0hBUkRXQVJFSUQgPSAxCi1TUERSUF9GUklFTkRMWU5BTUUgPSAxMgotRElDU19GTEFHX0dMT0JBTCA9IDEKLURJUkVHX0RFViA9IDB4MDAwMDAwMDEKLUtFWV9SRUFEID0gMHgyMDAxOQotCi0jIHdvcmthcm91bmQgZm9yIGNvbXBhdGliaWxpdHkgYmV0d2VlbiBQeXRob24gMi54IGFuZCAzLngKLVBvcnRzID0gc2VyaWFsLnRvX2J5dGVzKFs4MCwgMTExLCAxMTQsIDExNiwgMTE1XSkgIyAiUG9ydHMiCi1Qb3J0TmFtZSA9IHNlcmlhbC50b19ieXRlcyhbODAsIDExMSwgMTE0LCAxMTYsIDc4LCA5NywgMTA5LCAxMDFdKSAjICJQb3J0TmFtZSIKLQotZGVmIGNvbXBvcnRzKCk6Ci0gICAgR1VJRHMgPSAoR1VJRCo4KSgpICMgc28gZmFyIG9ubHkgc2VlbiBvbmUgdXNlZCwgc28gaG9wZSA4IGFyZSBlbm91Z2guLi4KLSAgICBndWlkc19zaXplID0gRFdPUkQoKQotICAgIGlmIG5vdCBTZXR1cERpQ2xhc3NHdWlkc0Zyb21OYW1lKAotICAgICAgICAgICAgUG9ydHMsCi0gICAgICAgICAgICBHVUlEcywKLSAgICAgICAgICAgIGN0eXBlcy5zaXplb2YoR1VJRHMpLAotICAgICAgICAgICAgY3R5cGVzLmJ5cmVmKGd1aWRzX3NpemUpKToKLSAgICAgICAgcmFpc2UgY3R5cGVzLldpbkVycm9yKCkKLQotICAgICMgcmVwZWF0IGZvciBhbGwgcG9zc2libGUgR1VJRHMKLSAgICBmb3IgaW5kZXggaW4gcmFuZ2UoZ3VpZHNfc2l6ZS52YWx1ZSk6Ci0gICAgICAgIGdfaGRpID0gU2V0dXBEaUdldENsYXNzRGV2cygKLSAgICAgICAgICAgICAgICBjdHlwZXMuYnlyZWYoR1VJRHNbaW5kZXhdKSwKLSAgICAgICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgRElHQ0ZfUFJFU0VOVCkgIyB3YXMgRElHQ0ZfUFJFU0VOVHxESUdDRl9ERVZJQ0VJTlRFUkZBQ0Ugd2hpY2ggbWlzc2VzIENEQyBwb3J0cwotCi0gICAgICAgIGRldmluZm8gPSBTUF9ERVZJTkZPX0RBVEEoKQotICAgICAgICBkZXZpbmZvLmNiU2l6ZSA9IGN0eXBlcy5zaXplb2YoZGV2aW5mbykKLSAgICAgICAgaW5kZXggPSAwCi0gICAgICAgIHdoaWxlIFNldHVwRGlFbnVtRGV2aWNlSW5mbyhnX2hkaSwgaW5kZXgsIGN0eXBlcy5ieXJlZihkZXZpbmZvKSk6Ci0gICAgICAgICAgICBpbmRleCArPSAxCi0KLSAgICAgICAgICAgICMgZ2V0IHRoZSByZWFsIGNvbSBwb3J0IG5hbWUKLSAgICAgICAgICAgIGhrZXkgPSBTZXR1cERpT3BlbkRldlJlZ0tleSgKLSAgICAgICAgICAgICAgICAgICAgZ19oZGksCi0gICAgICAgICAgICAgICAgICAgIGN0eXBlcy5ieXJlZihkZXZpbmZvKSwKLSAgICAgICAgICAgICAgICAgICAgRElDU19GTEFHX0dMT0JBTCwKLSAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgRElSRUdfREVWLCAgIyBESVJFR19EUlYgZm9yIFNXIGluZm8KLSAgICAgICAgICAgICAgICAgICAgS0VZX1JFQUQpCi0gICAgICAgICAgICBwb3J0X25hbWVfYnVmZmVyID0gYnl0ZV9idWZmZXIoMjUwKQotICAgICAgICAgICAgcG9ydF9uYW1lX2xlbmd0aCA9IFVMT05HKGN0eXBlcy5zaXplb2YocG9ydF9uYW1lX2J1ZmZlcikpCi0gICAgICAgICAgICBSZWdRdWVyeVZhbHVlRXgoCi0gICAgICAgICAgICAgICAgICAgIGhrZXksCi0gICAgICAgICAgICAgICAgICAgIFBvcnROYW1lLAotICAgICAgICAgICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgICAgICAgICBjdHlwZXMuYnlyZWYocG9ydF9uYW1lX2J1ZmZlciksCi0gICAgICAgICAgICAgICAgICAgIGN0eXBlcy5ieXJlZihwb3J0X25hbWVfbGVuZ3RoKSkKLSAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGhrZXkpCi0KLSAgICAgICAgICAgICMgdW5mb3J0dW5hdGVseSBkb2VzIHRoaXMgbWV0aG9kIGFsc28gaW5jbHVkZSBwYXJhbGxlbCBwb3J0cy4KLSAgICAgICAgICAgICMgd2UgY291bGQgY2hlY2sgZm9yIG5hbWVzIHN0YXJ0aW5nIHdpdGggQ09NIG9yIGp1c3QgZXhjbHVkZSBMUFQKLSAgICAgICAgICAgICMgYW5kIGhvcGUgdGhhdCBvdGhlciAidW5rbm93biIgbmFtZXMgYXJlIHNlcmlhbCBwb3J0cy4uLgotICAgICAgICAgICAgaWYgc3RyaW5nKHBvcnRfbmFtZV9idWZmZXIpLnN0YXJ0c3dpdGgoJ0xQVCcpOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgICMgaGFyZHdhcmUgSUQKLSAgICAgICAgICAgIHN6SGFyZHdhcmVJRCA9IGJ5dGVfYnVmZmVyKDI1MCkKLSAgICAgICAgICAgICMgdHJ5IHRvIGdldCBJRCB0aGF0IGluY2x1ZGVzIHNlcmlhbCBudW1iZXIKLSAgICAgICAgICAgIGlmIG5vdCBTZXR1cERpR2V0RGV2aWNlSW5zdGFuY2VJZCgKLSAgICAgICAgICAgICAgICAgICAgZ19oZGksCi0gICAgICAgICAgICAgICAgICAgIGN0eXBlcy5ieXJlZihkZXZpbmZvKSwKLSAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmJ5cmVmKHN6SGFyZHdhcmVJRCksCi0gICAgICAgICAgICAgICAgICAgIGN0eXBlcy5zaXplb2Yoc3pIYXJkd2FyZUlEKSAtIDEsCi0gICAgICAgICAgICAgICAgICAgIE5vbmUpOgotICAgICAgICAgICAgICAgICMgZmFsbCBiYWNrIHRvIG1vcmUgZ2VuZXJpYyBoYXJkd2FyZSBJRCBpZiB0aGF0IHdvdWxkIGZhaWwKLSAgICAgICAgICAgICAgICBpZiBub3QgU2V0dXBEaUdldERldmljZVJlZ2lzdHJ5UHJvcGVydHkoCi0gICAgICAgICAgICAgICAgICAgICAgICBnX2hkaSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5ieXJlZihkZXZpbmZvKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNQRFJQX0hBUkRXQVJFSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmJ5cmVmKHN6SGFyZHdhcmVJRCksCi0gICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuc2l6ZW9mKHN6SGFyZHdhcmVJRCkgLSAxLAotICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSk6Ci0gICAgICAgICAgICAgICAgICAgICMgSWdub3JlIEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIKLSAgICAgICAgICAgICAgICAgICAgaWYgY3R5cGVzLkdldExhc3RFcnJvcigpICE9IEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBjdHlwZXMuV2luRXJyb3IoKQotICAgICAgICAgICAgIyBzdHJpbmdpZnkKLSAgICAgICAgICAgIHN6SGFyZHdhcmVJRF9zdHIgPSBzdHJpbmcoc3pIYXJkd2FyZUlEKQotCi0gICAgICAgICAgICAjIGluIGNhc2Ugb2YgVVNCLCBtYWtlIGEgbW9yZSByZWFkYWJsZSBzdHJpbmcsIHNpbWlsYXIgdG8gdGhhdCBmb3JtCi0gICAgICAgICAgICAjIHRoYXQgd2UgYWxzbyBnZW5lcmF0ZSBvbiBvdGhlciBwbGF0Zm9ybXMKLSAgICAgICAgICAgIGlmIHN6SGFyZHdhcmVJRF9zdHIuc3RhcnRzd2l0aCgnVVNCJyk6Ci0gICAgICAgICAgICAgICAgbSA9IHJlLnNlYXJjaChyJ1ZJRF8oWzAtOWEtZl17NH0pJlBJRF8oWzAtOWEtZl17NH0pKFxcKFx3KykpPycsIHN6SGFyZHdhcmVJRF9zdHIsIHJlLkkpCi0gICAgICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICAgICAgaWYgbS5ncm91cCg0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN6SGFyZHdhcmVJRF9zdHIgPSAnVVNCIFZJRDpQSUQ9JXM6JXMgU05SPSVzJyAlIChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpLCBtLmdyb3VwKDQpKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc3pIYXJkd2FyZUlEX3N0ciA9ICdVU0IgVklEOlBJRD0lczolcycgJSAobS5ncm91cCgxKSwgbS5ncm91cCgyKSkKLQotICAgICAgICAgICAgIyBmcmllbmRseSBuYW1lCi0gICAgICAgICAgICBzekZyaWVuZGx5TmFtZSA9IGJ5dGVfYnVmZmVyKDI1MCkKLSAgICAgICAgICAgIGlmIG5vdCBTZXR1cERpR2V0RGV2aWNlUmVnaXN0cnlQcm9wZXJ0eSgKLSAgICAgICAgICAgICAgICAgICAgZ19oZGksCi0gICAgICAgICAgICAgICAgICAgIGN0eXBlcy5ieXJlZihkZXZpbmZvKSwKLSAgICAgICAgICAgICAgICAgICAgU1BEUlBfRlJJRU5ETFlOQU1FLAotICAgICAgICAgICAgICAgICAgICAjfiBTUERSUF9ERVZJQ0VERVNDLAotICAgICAgICAgICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgICAgICAgICBjdHlwZXMuYnlyZWYoc3pGcmllbmRseU5hbWUpLAotICAgICAgICAgICAgICAgICAgICBjdHlwZXMuc2l6ZW9mKHN6RnJpZW5kbHlOYW1lKSAtIDEsCi0gICAgICAgICAgICAgICAgICAgIE5vbmUpOgotICAgICAgICAgICAgICAgICMgSWdub3JlIEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIKLSAgICAgICAgICAgICAgICAjfiBpZiBjdHlwZXMuR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUjoKLSAgICAgICAgICAgICAgICAgICAgI34gcmFpc2UgSU9FcnJvcigiZmFpbGVkIHRvIGdldCBkZXRhaWxzIGZvciAlcyAoJXMpIiAlIChkZXZpbmZvLCBzekhhcmR3YXJlSUQudmFsdWUpKQotICAgICAgICAgICAgICAgICMgaWdub3JlIGVycm9ycyBhbmQgc3RpbGwgaW5jbHVkZSB0aGUgcG9ydCBpbiB0aGUgbGlzdCwgZnJpZW5kbHkgbmFtZSB3aWxsIGJlIHNhbWUgYXMgcG9ydCBuYW1lCi0gICAgICAgICAgICAgICAgeWllbGQgc3RyaW5nKHBvcnRfbmFtZV9idWZmZXIpLCAnbi9hJywgc3pIYXJkd2FyZUlEX3N0cgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB5aWVsZCBzdHJpbmcocG9ydF9uYW1lX2J1ZmZlciksIHN0cmluZyhzekZyaWVuZGx5TmFtZSksIHN6SGFyZHdhcmVJRF9zdHIKLQotICAgICAgICBTZXR1cERpRGVzdHJveURldmljZUluZm9MaXN0KGdfaGRpKQotCi0jIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCi0jIHRlc3QKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IHNlcmlhbAotCi0gICAgZm9yIHBvcnQsIGRlc2MsIGh3aWQgaW4gc29ydGVkKGNvbXBvcnRzKCkpOgotICAgICAgICBwcmludCAiJXM6ICVzIFslc10iICUgKHBvcnQsIGRlc2MsIGh3aWQpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdG9vbHMvbWluaXRlcm0ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdG9vbHMvbWluaXRlcm0ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDI3NGM3ZmIuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3Rvb2xzL21pbml0ZXJtLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjk0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIFZlcnkgc2ltcGxlIHNlcmlhbCB0ZXJtaW5hbAotIyAoQykyMDAyLTIwMTEgQ2hyaXMgTGllY2h0aSA8Y2xpZWNodGlAZ214Lm5ldD4KLQotIyBJbnB1dCBjaGFyYWN0ZXJzIGFyZSBzZW50IGRpcmVjdGx5IChvbmx5IExGIC0+IENSL0xGL0NSTEYgdHJhbnNsYXRpb24gaXMKLSMgZG9uZSksIHJlY2VpdmVkIGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZCBhcyBpcyAob3IgZXNjYXBlZCB0cm91Z2ggcHl0aG9ucwotIyByZXByLCB1c2VmdWwgZm9yIGRlYnVnIHB1cnBvc2VzKQotCi0KLWltcG9ydCBzeXMsIG9zLCBzZXJpYWwsIHRocmVhZGluZwotdHJ5OgotICAgIGZyb20gc2VyaWFsLnRvb2xzLmxpc3RfcG9ydHMgaW1wb3J0IGNvbXBvcnRzCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgY29tcG9ydHMgPSBOb25lCi0KLUVYSVRDSEFSQ1RFUiA9IHNlcmlhbC50b19ieXRlcyhbMHgxZF0pICAgIyBHUy9DVFJMK10KLU1FTlVDSEFSQUNURVIgPSBzZXJpYWwudG9fYnl0ZXMoWzB4MTRdKSAgIyBNZW51OiBDVFJMK1QKLQotREVGQVVMVF9QT1JUID0gTm9uZQotREVGQVVMVF9CQVVEUkFURSA9IDk2MDAKLURFRkFVTFRfUlRTID0gTm9uZQotREVGQVVMVF9EVFIgPSBOb25lCi0KLQotZGVmIGtleV9kZXNjcmlwdGlvbihjaGFyYWN0ZXIpOgotICAgICIiImdlbmVyYXRlIGEgcmVhZGFibGUgZGVzY3JpcHRpb24gZm9yIGEga2V5IiIiCi0gICAgYXNjaWlfY29kZSA9IG9yZChjaGFyYWN0ZXIpCi0gICAgaWYgYXNjaWlfY29kZSA8IDMyOgotICAgICAgICByZXR1cm4gJ0N0cmwrJWMnICUgKG9yZCgnQCcpICsgYXNjaWlfY29kZSkKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gcmVwcihjaGFyYWN0ZXIpCi0KLQotIyBoZWxwIHRleHQsIHN0YXJ0cyB3aXRoIGJsYW5rIGxpbmUhIGl0J3MgYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBjdXJyZW50IHZhbHVlcwotIyBmb3IgdGhlIHNob3J0Y3V0IGtleXMgaXMgdXNlZCBhbmQgbm90IHRoZSB2YWx1ZSBhdCBwcm9ncmFtIHN0YXJ0Ci1kZWYgZ2V0X2hlbHBfdGV4dCgpOgotICAgIHJldHVybiAiIiIKLS0tLSBweVNlcmlhbCAoJSh2ZXJzaW9uKXMpIC0gbWluaXRlcm0gLSBoZWxwCi0tLS0KLS0tLSAlKGV4aXQpLThzIEV4aXQgcHJvZ3JhbQotLS0tICUobWVudSktOHMgTWVudSBlc2NhcGUga2V5LCBmb2xsb3dlZCBieToKLS0tLSBNZW51IGtleXM6Ci0tLS0gICAgJShpdHNlbGYpLTdzIFNlbmQgdGhlIG1lbnUgY2hhcmFjdGVyIGl0c2VsZiB0byByZW1vdGUKLS0tLSAgICAlKGV4Y2hhciktN3MgU2VuZCB0aGUgZXhpdCBjaGFyYWN0ZXIgaXRzZWxmIHRvIHJlbW90ZQotLS0tICAgICUoaW5mbyktN3MgU2hvdyBpbmZvCi0tLS0gICAgJSh1cGxvYWQpLTdzIFVwbG9hZCBmaWxlIChwcm9tcHQgd2lsbCBiZSBzaG93bikKLS0tLSBUb2dnbGVzOgotLS0tICAgICUocnRzKS03cyBSVFMgICAgICAgICAgJShlY2hvKS03cyBsb2NhbCBlY2hvCi0tLS0gICAgJShkdHIpLTdzIERUUiAgICAgICAgICAlKGJyZWFrKS03cyBCUkVBSwotLS0tICAgICUobGZtKS03cyBsaW5lIGZlZWQgICAgJShyZXByKS03cyBDeWNsZSByZXByIG1vZGUKLS0tLQotLS0tIFBvcnQgc2V0dGluZ3MgKCUobWVudSlzIGZvbGxvd2VkIGJ5IHRoZSBmb2xsb3dpbmcpOgotLS0tICAgIHAgICAgICAgICAgY2hhbmdlIHBvcnQKLS0tLSAgICA3IDggICAgICAgIHNldCBkYXRhIGJpdHMKLS0tLSAgICBuIGUgbyBzIG0gIGNoYW5nZSBwYXJpdHkgKE5vbmUsIEV2ZW4sIE9kZCwgU3BhY2UsIE1hcmspCi0tLS0gICAgMSAyIDMgICAgICBzZXQgc3RvcCBiaXRzICgxLCAyLCAxLjUpCi0tLS0gICAgYiAgICAgICAgICBjaGFuZ2UgYmF1ZCByYXRlCi0tLS0gICAgeCBYICAgICAgICBkaXNhYmxlL2VuYWJsZSBzb2Z0d2FyZSBmbG93IGNvbnRyb2wKLS0tLSAgICByIFIgICAgICAgIGRpc2FibGUvZW5hYmxlIGhhcmR3YXJlIGZsb3cgY29udHJvbAotIiIiICUgewotICAgICd2ZXJzaW9uJzogZ2V0YXR0cihzZXJpYWwsICdWRVJTSU9OJywgJ3Vua25vd24gdmVyc2lvbicpLAotICAgICdleGl0Jzoga2V5X2Rlc2NyaXB0aW9uKEVYSVRDSEFSQ1RFUiksCi0gICAgJ21lbnUnOiBrZXlfZGVzY3JpcHRpb24oTUVOVUNIQVJBQ1RFUiksCi0gICAgJ3J0cyc6IGtleV9kZXNjcmlwdGlvbignXHgxMicpLAotICAgICdyZXByJzoga2V5X2Rlc2NyaXB0aW9uKCdceDAxJyksCi0gICAgJ2R0cic6IGtleV9kZXNjcmlwdGlvbignXHgwNCcpLAotICAgICdsZm0nOiBrZXlfZGVzY3JpcHRpb24oJ1x4MGMnKSwKLSAgICAnYnJlYWsnOiBrZXlfZGVzY3JpcHRpb24oJ1x4MDInKSwKLSAgICAnZWNobyc6IGtleV9kZXNjcmlwdGlvbignXHgwNScpLAotICAgICdpbmZvJzoga2V5X2Rlc2NyaXB0aW9uKCdceDA5JyksCi0gICAgJ3VwbG9hZCc6IGtleV9kZXNjcmlwdGlvbignXHgxNScpLAotICAgICdpdHNlbGYnOiBrZXlfZGVzY3JpcHRpb24oTUVOVUNIQVJBQ1RFUiksCi0gICAgJ2V4Y2hhcic6IGtleV9kZXNjcmlwdGlvbihFWElUQ0hBUkNURVIpLAotfQotCi1pZiBzeXMudmVyc2lvbl9pbmZvID49ICgzLCAwKToKLSAgICBkZWYgY2hhcmFjdGVyKGIpOgotICAgICAgICByZXR1cm4gYi5kZWNvZGUoJ2xhdGluMScpCi1lbHNlOgotICAgIGRlZiBjaGFyYWN0ZXIoYik6Ci0gICAgICAgIHJldHVybiBiCi0KLUxGID0gc2VyaWFsLnRvX2J5dGVzKFsxMF0pCi1DUiA9IHNlcmlhbC50b19ieXRlcyhbMTNdKQotQ1JMRiA9IHNlcmlhbC50b19ieXRlcyhbMTMsIDEwXSkKLQotWDAwID0gc2VyaWFsLnRvX2J5dGVzKFswXSkKLVgwRSA9IHNlcmlhbC50b19ieXRlcyhbMHgwZV0pCi0KLSMgZmlyc3QgY2hvb3NlIGEgcGxhdGZvcm0gZGVwZW5kYW50IHdheSB0byByZWFkIHNpbmdsZSBjaGFyYWN0ZXJzIGZyb20gdGhlIGNvbnNvbGUKLWdsb2JhbCBjb25zb2xlCi0KLWlmIG9zLm5hbWUgPT0gJ250JzoKLSAgICBpbXBvcnQgbXN2Y3J0Ci0gICAgY2xhc3MgQ29uc29sZShvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgZGVmIHNldHVwKHNlbGYpOgotICAgICAgICAgICAgcGFzcyAgICAjIERvIG5vdGhpbmcgZm9yICdudCcKLQotICAgICAgICBkZWYgY2xlYW51cChzZWxmKToKLSAgICAgICAgICAgIHBhc3MgICAgIyBEbyBub3RoaW5nIGZvciAnbnQnCi0KLSAgICAgICAgZGVmIGdldGtleShzZWxmKToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgeiA9IG1zdmNydC5nZXRjaCgpCi0gICAgICAgICAgICAgICAgaWYgeiA9PSBYMDAgb3IgeiA9PSBYMEU6ICAgICMgZnVuY3Rpb25zIGtleXMsIGlnbm9yZQotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuZ2V0Y2goKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHogPT0gQ1I6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTEYKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHoKLQotICAgIGNvbnNvbGUgPSBDb25zb2xlKCkKLQotZWxpZiBvcy5uYW1lID09ICdwb3NpeCc6Ci0gICAgaW1wb3J0IHRlcm1pb3MsIHN5cywgb3MKLSAgICBjbGFzcyBDb25zb2xlKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgICAgIHNlbGYuZmQgPSBzeXMuc3RkaW4uZmlsZW5vKCkKLSAgICAgICAgICAgIHNlbGYub2xkID0gTm9uZQotCi0gICAgICAgIGRlZiBzZXR1cChzZWxmKToKLSAgICAgICAgICAgIHNlbGYub2xkID0gdGVybWlvcy50Y2dldGF0dHIoc2VsZi5mZCkKLSAgICAgICAgICAgIG5ldyA9IHRlcm1pb3MudGNnZXRhdHRyKHNlbGYuZmQpCi0gICAgICAgICAgICBuZXdbM10gPSBuZXdbM10gJiB+dGVybWlvcy5JQ0FOT04gJiB+dGVybWlvcy5FQ0hPICYgfnRlcm1pb3MuSVNJRwotICAgICAgICAgICAgbmV3WzZdW3Rlcm1pb3MuVk1JTl0gPSAxCi0gICAgICAgICAgICBuZXdbNl1bdGVybWlvcy5WVElNRV0gPSAwCi0gICAgICAgICAgICB0ZXJtaW9zLnRjc2V0YXR0cihzZWxmLmZkLCB0ZXJtaW9zLlRDU0FOT1csIG5ldykKLQotICAgICAgICBkZWYgZ2V0a2V5KHNlbGYpOgotICAgICAgICAgICAgYyA9IG9zLnJlYWQoc2VsZi5mZCwgMSkKLSAgICAgICAgICAgIHJldHVybiBjCi0KLSAgICAgICAgZGVmIGNsZWFudXAoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLm9sZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICB0ZXJtaW9zLnRjc2V0YXR0cihzZWxmLmZkLCB0ZXJtaW9zLlRDU0FGTFVTSCwgc2VsZi5vbGQpCi0KLSAgICBjb25zb2xlID0gQ29uc29sZSgpCi0KLSAgICBkZWYgY2xlYW51cF9jb25zb2xlKCk6Ci0gICAgICAgIGNvbnNvbGUuY2xlYW51cCgpCi0KLSAgICBzeXMuZXhpdGZ1bmMgPSBjbGVhbnVwX2NvbnNvbGUgICAgICAjIHRlcm1pbmFsIG1vZGVzIGhhdmUgdG8gYmUgcmVzdG9yZWQgb24gZXhpdC4uLgotCi1lbHNlOgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIlNvcnJ5IG5vIGltcGxlbWVudGF0aW9uIGZvciB5b3VyIHBsYXRmb3JtICglcykgYXZhaWxhYmxlLiIgJSBzeXMucGxhdGZvcm0pCi0KLQotZGVmIGR1bXBfcG9ydF9saXN0KCk6Ci0gICAgaWYgY29tcG9ydHM6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1xuLS0tIEF2YWlsYWJsZSBwb3J0czpcbicpCi0gICAgICAgIGZvciBwb3J0LCBkZXNjLCBod2lkIGluIHNvcnRlZChjb21wb3J0cygpKToKLSAgICAgICAgICAgICN+IHN5cy5zdGRlcnIud3JpdGUoJy0tLSAlLTIwcyAlcyBbJXNdXG4nICUgKHBvcnQsIGRlc2MsIGh3aWQpKQotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLS0tICUtMjBzICVzXG4nICUgKHBvcnQsIGRlc2MpKQotCi0KLUNPTlZFUlRfQ1JMRiA9IDIKLUNPTlZFUlRfQ1IgICA9IDEKLUNPTlZFUlRfTEYgICA9IDAKLU5FV0xJTkVfQ09OVkVSSVNPTl9NQVAgPSAoTEYsIENSLCBDUkxGKQotTEZfTU9ERVMgPSAoJ0xGJywgJ0NSJywgJ0NSL0xGJykKLQotUkVQUl9NT0RFUyA9ICgncmF3JywgJ3NvbWUgY29udHJvbCcsICdhbGwgY29udHJvbCcsICdoZXgnKQotCi1jbGFzcyBNaW5pdGVybShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBiYXVkcmF0ZSwgcGFyaXR5LCBydHNjdHMsIHhvbnhvZmYsIGVjaG89RmFsc2UsIGNvbnZlcnRfb3V0Z29pbmc9Q09OVkVSVF9DUkxGLCByZXByX21vZGU9MCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuc2VyaWFsID0gc2VyaWFsLnNlcmlhbF9mb3JfdXJsKHBvcnQsIGJhdWRyYXRlLCBwYXJpdHk9cGFyaXR5LCBydHNjdHM9cnRzY3RzLCB4b254b2ZmPXhvbnhvZmYsIHRpbWVvdXQ9MSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgIyBoYXBwZW5zIHdoZW4gdGhlIGluc3RhbGxlZCBweXNlcmlhbCBpcyBvbGRlciB0aGFuIDIuNS4gdXNlIHRoZQotICAgICAgICAgICAgIyBTZXJpYWwgY2xhc3MgZGlyZWN0bHkgdGhlbi4KLSAgICAgICAgICAgIHNlbGYuc2VyaWFsID0gc2VyaWFsLlNlcmlhbChwb3J0LCBiYXVkcmF0ZSwgcGFyaXR5PXBhcml0eSwgcnRzY3RzPXJ0c2N0cywgeG9ueG9mZj14b254b2ZmLCB0aW1lb3V0PTEpCi0gICAgICAgIHNlbGYuZWNobyA9IGVjaG8KLSAgICAgICAgc2VsZi5yZXByX21vZGUgPSByZXByX21vZGUKLSAgICAgICAgc2VsZi5jb252ZXJ0X291dGdvaW5nID0gY29udmVydF9vdXRnb2luZwotICAgICAgICBzZWxmLm5ld2xpbmUgPSBORVdMSU5FX0NPTlZFUklTT05fTUFQW3NlbGYuY29udmVydF9vdXRnb2luZ10KLSAgICAgICAgc2VsZi5kdHJfc3RhdGUgPSBUcnVlCi0gICAgICAgIHNlbGYucnRzX3N0YXRlID0gVHJ1ZQotICAgICAgICBzZWxmLmJyZWFrX3N0YXRlID0gRmFsc2UKLQotICAgIGRlZiBfc3RhcnRfcmVhZGVyKHNlbGYpOgotICAgICAgICAiIiJTdGFydCByZWFkZXIgdGhyZWFkIiIiCi0gICAgICAgIHNlbGYuX3JlYWRlcl9hbGl2ZSA9IFRydWUKLSAgICAgICAgIyBzdGFydCBzZXJpYWwtPmNvbnNvbGUgdGhyZWFkCi0gICAgICAgIHNlbGYucmVjZWl2ZXJfdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5yZWFkZXIpCi0gICAgICAgIHNlbGYucmVjZWl2ZXJfdGhyZWFkLnNldERhZW1vbihUcnVlKQotICAgICAgICBzZWxmLnJlY2VpdmVyX3RocmVhZC5zdGFydCgpCi0KLSAgICBkZWYgX3N0b3BfcmVhZGVyKHNlbGYpOgotICAgICAgICAiIiJTdG9wIHJlYWRlciB0aHJlYWQgb25seSwgd2FpdCBmb3IgY2xlYW4gZXhpdCBvZiB0aHJlYWQiIiIKLSAgICAgICAgc2VsZi5fcmVhZGVyX2FsaXZlID0gRmFsc2UKLSAgICAgICAgc2VsZi5yZWNlaXZlcl90aHJlYWQuam9pbigpCi0KLQotICAgIGRlZiBzdGFydChzZWxmKToKLSAgICAgICAgc2VsZi5hbGl2ZSA9IFRydWUKLSAgICAgICAgc2VsZi5fc3RhcnRfcmVhZGVyKCkKLSAgICAgICAgIyBlbnRlciBjb25zb2xlLT5zZXJpYWwgbG9vcAotICAgICAgICBzZWxmLnRyYW5zbWl0dGVyX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYud3JpdGVyKQotICAgICAgICBzZWxmLnRyYW5zbWl0dGVyX3RocmVhZC5zZXREYWVtb24oVHJ1ZSkKLSAgICAgICAgc2VsZi50cmFuc21pdHRlcl90aHJlYWQuc3RhcnQoKQotCi0gICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIHNlbGYuYWxpdmUgPSBGYWxzZQotCi0gICAgZGVmIGpvaW4oc2VsZiwgdHJhbnNtaXRfb25seT1GYWxzZSk6Ci0gICAgICAgIHNlbGYudHJhbnNtaXR0ZXJfdGhyZWFkLmpvaW4oKQotICAgICAgICBpZiBub3QgdHJhbnNtaXRfb25seToKLSAgICAgICAgICAgIHNlbGYucmVjZWl2ZXJfdGhyZWFkLmpvaW4oKQotCi0gICAgZGVmIGR1bXBfcG9ydF9zZXR0aW5ncyhzZWxmKToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiXG4tLS0gU2V0dGluZ3M6ICVzICAlcywlcywlcywlc1xuIiAlICgKLSAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5wb3J0c3RyLAotICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLmJhdWRyYXRlLAotICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLmJ5dGVzaXplLAotICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLnBhcml0eSwKLSAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5zdG9wYml0cykpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy0tLSBSVFM6ICUtOHMgIERUUjogJS04cyAgQlJFQUs6ICUtOHNcbicgJSAoCi0gICAgICAgICAgICAgICAgKHNlbGYucnRzX3N0YXRlIGFuZCAnYWN0aXZlJyBvciAnaW5hY3RpdmUnKSwKLSAgICAgICAgICAgICAgICAoc2VsZi5kdHJfc3RhdGUgYW5kICdhY3RpdmUnIG9yICdpbmFjdGl2ZScpLAotICAgICAgICAgICAgICAgIChzZWxmLmJyZWFrX3N0YXRlIGFuZCAnYWN0aXZlJyBvciAnaW5hY3RpdmUnKSkpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy0tLSBDVFM6ICUtOHMgIERTUjogJS04cyAgUkk6ICUtOHMgIENEOiAlLThzXG4nICUgKAotICAgICAgICAgICAgICAgICAgICAoc2VsZi5zZXJpYWwuZ2V0Q1RTKCkgYW5kICdhY3RpdmUnIG9yICdpbmFjdGl2ZScpLAotICAgICAgICAgICAgICAgICAgICAoc2VsZi5zZXJpYWwuZ2V0RFNSKCkgYW5kICdhY3RpdmUnIG9yICdpbmFjdGl2ZScpLAotICAgICAgICAgICAgICAgICAgICAoc2VsZi5zZXJpYWwuZ2V0UkkoKSBhbmQgJ2FjdGl2ZScgb3IgJ2luYWN0aXZlJyksCi0gICAgICAgICAgICAgICAgICAgIChzZWxmLnNlcmlhbC5nZXRDRCgpIGFuZCAnYWN0aXZlJyBvciAnaW5hY3RpdmUnKSkpCi0gICAgICAgIGV4Y2VwdCBzZXJpYWwuU2VyaWFsRXhjZXB0aW9uOgotICAgICAgICAgICAgIyBvbiBSRkMgMjIxNyBwb3J0cyBpdCBjYW4gaGFwcGVuIHRvIG5vIG1vZGVtIHN0YXRlIG5vdGlmaWNhdGlvbiB3YXMKLSAgICAgICAgICAgICMgeWV0IHJlY2VpdmVkLiBpZ25vcmUgdGhpcyBlcnJvci4KLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLS0tIHNvZnR3YXJlIGZsb3cgY29udHJvbDogJXNcbicgJSAoc2VsZi5zZXJpYWwueG9ueG9mZiBhbmQgJ2FjdGl2ZScgb3IgJ2luYWN0aXZlJykpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy0tLSBoYXJkd2FyZSBmbG93IGNvbnRyb2w6ICVzXG4nICUgKHNlbGYuc2VyaWFsLnJ0c2N0cyBhbmQgJ2FjdGl2ZScgb3IgJ2luYWN0aXZlJykpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy0tLSBkYXRhIGVzY2FwaW5nOiAlcyAgbGluZWZlZWQ6ICVzXG4nICUgKAotICAgICAgICAgICAgICAgIFJFUFJfTU9ERVNbc2VsZi5yZXByX21vZGVdLAotICAgICAgICAgICAgICAgIExGX01PREVTW3NlbGYuY29udmVydF9vdXRnb2luZ10pKQotCi0gICAgZGVmIHJlYWRlcihzZWxmKToKLSAgICAgICAgIiIibG9vcCBhbmQgY29weSBzZXJpYWwtPmNvbnNvbGUiIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgc2VsZi5hbGl2ZSBhbmQgc2VsZi5fcmVhZGVyX2FsaXZlOgotICAgICAgICAgICAgICAgIGRhdGEgPSBjaGFyYWN0ZXIoc2VsZi5zZXJpYWwucmVhZCgxKSkKLQotICAgICAgICAgICAgICAgIGlmIHNlbGYucmVwcl9tb2RlID09IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgZGlyZWN0IG91dHB1dCwganVzdCBoYXZlIHRvIGNhcmUgYWJvdXQgbmV3bGluZSBzZXR0aW5nCi0gICAgICAgICAgICAgICAgICAgIGlmIGRhdGEgPT0gJ1xyJyBhbmQgc2VsZi5jb252ZXJ0X291dGdvaW5nID09IENPTlZFUlRfQ1I6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGRhdGEpCi0gICAgICAgICAgICAgICAgZWxpZiBzZWxmLnJlcHJfbW9kZSA9PSAxOgotICAgICAgICAgICAgICAgICAgICAjIGVzY2FwZSBub24tcHJpbnRhYmxlLCBsZXQgcGFzcyBuZXdsaW5lcwotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbnZlcnRfb3V0Z29pbmcgPT0gQ09OVkVSVF9DUkxGIGFuZCBkYXRhIGluICdcclxuJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRhdGEgPT0gJ1xuJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGRhdGEgPT0gJ1xyJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgZGF0YSA9PSAnXG4nIGFuZCBzZWxmLmNvbnZlcnRfb3V0Z29pbmcgPT0gQ09OVkVSVF9MRjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBkYXRhID09ICdccicgYW5kIHNlbGYuY29udmVydF9vdXRnb2luZyA9PSBDT05WRVJUX0NSOgotICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShyZXByKGRhdGEpWzE6LTFdKQotICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5yZXByX21vZGUgPT0gMjoKLSAgICAgICAgICAgICAgICAgICAgIyBlc2NhcGUgYWxsIG5vbi1wcmludGFibGUsIGluY2x1ZGluZyBuZXdsaW5lCi0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocmVwcihkYXRhKVsxOi0xXSkKLSAgICAgICAgICAgICAgICBlbGlmIHNlbGYucmVwcl9tb2RlID09IDM6Ci0gICAgICAgICAgICAgICAgICAgICMgZXNjYXBlIGV2ZXJ5dGhpbmcgKGhleGR1bXApCi0gICAgICAgICAgICAgICAgICAgIGZvciBjIGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIlcyAiICUgYy5lbmNvZGUoJ2hleCcpKQotICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICBleGNlcHQgc2VyaWFsLlNlcmlhbEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIHNlbGYuYWxpdmUgPSBGYWxzZQotICAgICAgICAgICAgIyB3b3VsZCBiZSBuaWNlIGlmIHRoZSBjb25zb2xlIHJlYWRlciBjb3VsZCBiZSBpbnRlcnJ1cHR0ZWQgYXQgdGhpcwotICAgICAgICAgICAgIyBwb2ludC4uLgotICAgICAgICAgICAgcmFpc2UKLQotCi0gICAgZGVmIHdyaXRlcihzZWxmKToKLSAgICAgICAgIiIiXAotICAgICAgICBMb29wIGFuZCBjb3B5IGNvbnNvbGUtPnNlcmlhbCB1bnRpbCBFWElUQ0hBUkNURVIgY2hhcmFjdGVyIGlzCi0gICAgICAgIGZvdW5kLiBXaGVuIE1FTlVDSEFSQUNURVIgaXMgZm91bmQsIGludGVycHJldCB0aGUgbmV4dCBrZXkKLSAgICAgICAgbG9jYWxseS4KLSAgICAgICAgIiIiCi0gICAgICAgIG1lbnVfYWN0aXZlID0gRmFsc2UKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgc2VsZi5hbGl2ZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBjb25zb2xlLmdldGtleSgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgICAgICBiID0gc2VyaWFsLnRvX2J5dGVzKFszXSkKLSAgICAgICAgICAgICAgICBjID0gY2hhcmFjdGVyKGIpCi0gICAgICAgICAgICAgICAgaWYgbWVudV9hY3RpdmU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGMgPT0gTUVOVUNIQVJBQ1RFUiBvciBjID09IEVYSVRDSEFSQ1RFUjogIyBNZW51IGNoYXJhY3RlciBhZ2Fpbi9leGl0IGNoYXIgLT4gc2VuZCBpdHNlbGYKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLndyaXRlKGIpICAgICAgICAgICAgICAgICAgICAjIHNlbmQgY2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVjaG86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShjKQotICAgICAgICAgICAgICAgICAgICBlbGlmIGMgPT0gJ1x4MTUnOiAgICAgICAgICAgICAgICAgICAgICAgIyBDVFJMK1UgLT4gdXBsb2FkIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1xuLS0tIEZpbGUgdG8gdXBsb2FkOiAnKQotICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmNsZWFudXAoKQotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5yc3RyaXAoJ1xyXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlID0gb3BlbihmaWxlbmFtZSwgJ3InKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCctLS0gU2VuZGluZyBmaWxlICVzIC0tLVxuJyAlIGZpbGVuYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZpbGUucmVhZGxpbmUoKS5yc3RyaXAoJ1xyXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLndyaXRlKGxpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC53cml0ZSgnXHJcbicpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdhaXQgZm9yIG91dHB1dCBidWZmZXIgdG8gZHJhaW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5mbHVzaCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCcuJykgICAjIFByb2dyZXNzIGluZGljYXRvci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnXG4tLS0gRmlsZSAlcyBzZW50IC0tLVxuJyAlIGZpbGVuYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCctLS0gRVJST1Igb3BlbmluZyBmaWxlICVzOiAlcyAtLS1cbicgJSAoZmlsZW5hbWUsIGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5zZXR1cCgpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgYyBpbiAnXHgwOGhIPyc6ICAgICAgICAgICAgICAgICAgICAjIENUUkwrSCwgaCwgSCwgPyAtPiBTaG93IGhlbHAKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZ2V0X2hlbHBfdGV4dCgpKQotICAgICAgICAgICAgICAgICAgICBlbGlmIGMgPT0gJ1x4MTInOiAgICAgICAgICAgICAgICAgICAgICAgIyBDVFJMK1IgLT4gVG9nZ2xlIFJUUwotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ydHNfc3RhdGUgPSBub3Qgc2VsZi5ydHNfc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLnNldFJUUyhzZWxmLnJ0c19zdGF0ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy0tLSBSVFMgJXMgLS0tXG4nICUgKHNlbGYucnRzX3N0YXRlIGFuZCAnYWN0aXZlJyBvciAnaW5hY3RpdmUnKSkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBjID09ICdceDA0JzogICAgICAgICAgICAgICAgICAgICAgICMgQ1RSTCtEIC0+IFRvZ2dsZSBEVFIKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHRyX3N0YXRlID0gbm90IHNlbGYuZHRyX3N0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5zZXREVFIoc2VsZi5kdHJfc3RhdGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCctLS0gRFRSICVzIC0tLVxuJyAlIChzZWxmLmR0cl9zdGF0ZSBhbmQgJ2FjdGl2ZScgb3IgJ2luYWN0aXZlJykpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgYyA9PSAnXHgwMic6ICAgICAgICAgICAgICAgICAgICAgICAjIENUUkwrQiAtPiB0b2dnbGUgQlJFQUsgY29uZGl0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJyZWFrX3N0YXRlID0gbm90IHNlbGYuYnJlYWtfc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLnNldEJyZWFrKHNlbGYuYnJlYWtfc3RhdGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCctLS0gQlJFQUsgJXMgLS0tXG4nICUgKHNlbGYuYnJlYWtfc3RhdGUgYW5kICdhY3RpdmUnIG9yICdpbmFjdGl2ZScpKQotICAgICAgICAgICAgICAgICAgICBlbGlmIGMgPT0gJ1x4MDUnOiAgICAgICAgICAgICAgICAgICAgICAgIyBDVFJMK0UgLT4gdG9nZ2xlIGxvY2FsIGVjaG8KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZWNobyA9IG5vdCBzZWxmLmVjaG8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy0tLSBsb2NhbCBlY2hvICVzIC0tLVxuJyAlIChzZWxmLmVjaG8gYW5kICdhY3RpdmUnIG9yICdpbmFjdGl2ZScpKQotICAgICAgICAgICAgICAgICAgICBlbGlmIGMgPT0gJ1x4MDknOiAgICAgICAgICAgICAgICAgICAgICAgIyBDVFJMK0kgLT4gaW5mbwotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wX3BvcnRfc2V0dGluZ3MoKQotICAgICAgICAgICAgICAgICAgICBlbGlmIGMgPT0gJ1x4MDEnOiAgICAgICAgICAgICAgICAgICAgICAgIyBDVFJMK0EgLT4gY3ljbGUgZXNjYXBlIG1vZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwcl9tb2RlICs9IDEKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucmVwcl9tb2RlID4gMzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcHJfbW9kZSA9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy0tLSBlc2NhcGUgZGF0YTogJXMgLS0tXG4nICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUFJfTU9ERVNbc2VsZi5yZXByX21vZGVdLAotICAgICAgICAgICAgICAgICAgICAgICAgKSkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBjID09ICdceDBjJzogICAgICAgICAgICAgICAgICAgICAgICMgQ1RSTCtMIC0+IGN5Y2xlIGxpbmVmZWVkIG1vZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udmVydF9vdXRnb2luZyArPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbnZlcnRfb3V0Z29pbmcgPiAyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udmVydF9vdXRnb2luZyA9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV3bGluZSA9IE5FV0xJTkVfQ09OVkVSSVNPTl9NQVBbc2VsZi5jb252ZXJ0X291dGdvaW5nXQotICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLS0tIGxpbmUgZmVlZCAlcyAtLS1cbicgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTEZfTU9ERVNbc2VsZi5jb252ZXJ0X291dGdvaW5nXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICkpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgYyBpbiAncFAnOiAgICAgICAgICAgICAgICAgICAgICAgICAjIFAgLT4gY2hhbmdlIHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBfcG9ydF9saXN0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy0tLSBFbnRlciBwb3J0IG5hbWU6ICcpCi0gICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuY2xlYW51cCgpCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IHN5cy5zdGRpbi5yZWFkbGluZSgpLnN0cmlwKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0ID0gTm9uZQotICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5zZXR1cCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBwb3J0IGFuZCBwb3J0ICE9IHNlbGYuc2VyaWFsLnBvcnQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZWFkZXIgdGhyZWFkIG5lZWRzIHRvIGJlIHNodXQgZG93bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3BfcmVhZGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNhdmUgc2V0dGluZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IHNlbGYuc2VyaWFsLmdldFNldHRpbmdzRGljdCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc2VyaWFsID0gc2VyaWFsLnNlcmlhbF9mb3JfdXJsKHBvcnQsIGRvX25vdF9vcGVuPVRydWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaGFwcGVucyB3aGVuIHRoZSBpbnN0YWxsZWQgcHlzZXJpYWwgaXMgb2xkZXIgdGhhbiAyLjUuIHVzZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2VyaWFsIGNsYXNzIGRpcmVjdGx5IHRoZW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc2VyaWFsID0gc2VyaWFsLlNlcmlhbCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc2VyaWFsLnBvcnQgPSBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVzdG9yZSBzZXR0aW5ncyBhbmQgb3BlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc2VyaWFsLmFwcGx5U2V0dGluZ3NEaWN0KHNldHRpbmdzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc2VyaWFsLm9wZW4oKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc2VyaWFsLnNldFJUUyhzZWxmLnJ0c19zdGF0ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3NlcmlhbC5zZXREVFIoc2VsZi5kdHJfc3RhdGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19zZXJpYWwuc2V0QnJlYWsoc2VsZi5icmVha19zdGF0ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCctLS0gRVJST1Igb3BlbmluZyBuZXcgcG9ydDogJXMgLS0tXG4nICUgKGUsKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3NlcmlhbC5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWwuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbCA9IG5ld19zZXJpYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLS0tIFBvcnQgY2hhbmdlZCB0bzogJXMgLS0tXG4nICUgKHNlbGYuc2VyaWFsLnBvcnQsKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCByZXN0YXJ0IHRoZSByZWFkZXIgdGhyZWFkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhcnRfcmVhZGVyKCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBjIGluICdiQic6ICAgICAgICAgICAgICAgICAgICAgICAgICMgQiAtPiBjaGFuZ2UgYmF1ZHJhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1xuLS0tIEJhdWRyYXRlOiAnKQotICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmNsZWFudXAoKQotICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwID0gc2VsZi5zZXJpYWwuYmF1ZHJhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5iYXVkcmF0ZSA9IGludChzeXMuc3RkaW4ucmVhZGxpbmUoKS5zdHJpcCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLS0tIEVSUk9SIHNldHRpbmcgYmF1ZHJhdGU6ICVzIC0tLVxuJyAlIChlLCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWwuYmF1ZHJhdGUgPSBiYWNrdXAKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wX3BvcnRfc2V0dGluZ3MoKQotICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5zZXR1cCgpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgYyA9PSAnOCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAjIDggLT4gY2hhbmdlIHRvIDggYml0cwotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWwuYnl0ZXNpemUgPSBzZXJpYWwuRUlHSFRCSVRTCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBfcG9ydF9zZXR0aW5ncygpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgYyA9PSAnNyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAjIDcgLT4gY2hhbmdlIHRvIDggYml0cwotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWwuYnl0ZXNpemUgPSBzZXJpYWwuU0VWRU5CSVRTCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBfcG9ydF9zZXR0aW5ncygpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgYyBpbiAnZUUnOiAgICAgICAgICAgICAgICAgICAgICAgICAjIEUgLT4gY2hhbmdlIHRvIGV2ZW4gcGFyaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5wYXJpdHkgPSBzZXJpYWwuUEFSSVRZX0VWRU4KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcF9wb3J0X3NldHRpbmdzKCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBjIGluICdvTyc6ICAgICAgICAgICAgICAgICAgICAgICAgICMgTyAtPiBjaGFuZ2UgdG8gb2RkIHBhcml0eQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWwucGFyaXR5ID0gc2VyaWFsLlBBUklUWV9PREQKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcF9wb3J0X3NldHRpbmdzKCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBjIGluICdtTSc6ICAgICAgICAgICAgICAgICAgICAgICAgICMgTSAtPiBjaGFuZ2UgdG8gbWFyayBwYXJpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLnBhcml0eSA9IHNlcmlhbC5QQVJJVFlfTUFSSwotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wX3BvcnRfc2V0dGluZ3MoKQotICAgICAgICAgICAgICAgICAgICBlbGlmIGMgaW4gJ3NTJzogICAgICAgICAgICAgICAgICAgICAgICAgIyBTIC0+IGNoYW5nZSB0byBzcGFjZSBwYXJpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLnBhcml0eSA9IHNlcmlhbC5QQVJJVFlfU1BBQ0UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcF9wb3J0X3NldHRpbmdzKCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBjIGluICduTic6ICAgICAgICAgICAgICAgICAgICAgICAgICMgTiAtPiBjaGFuZ2UgdG8gbm8gcGFyaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5wYXJpdHkgPSBzZXJpYWwuUEFSSVRZX05PTkUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcF9wb3J0X3NldHRpbmdzKCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBjID09ICcxJzogICAgICAgICAgICAgICAgICAgICAgICAgICMgMSAtPiBjaGFuZ2UgdG8gMSBzdG9wIGJpdHMKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLnN0b3BiaXRzID0gc2VyaWFsLlNUT1BCSVRTX09ORQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wX3BvcnRfc2V0dGluZ3MoKQotICAgICAgICAgICAgICAgICAgICBlbGlmIGMgPT0gJzInOiAgICAgICAgICAgICAgICAgICAgICAgICAgIyAyIC0+IGNoYW5nZSB0byAyIHN0b3AgYml0cwotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWwuc3RvcGJpdHMgPSBzZXJpYWwuU1RPUEJJVFNfVFdPCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBfcG9ydF9zZXR0aW5ncygpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgYyA9PSAnMyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAjIDMgLT4gY2hhbmdlIHRvIDEuNSBzdG9wIGJpdHMKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsLnN0b3BiaXRzID0gc2VyaWFsLlNUT1BCSVRTX09ORV9QT0lOVF9GSVZFCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBfcG9ydF9zZXR0aW5ncygpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgYyBpbiAneFgnOiAgICAgICAgICAgICAgICAgICAgICAgICAjIFggLT4gY2hhbmdlIHNvZnR3YXJlIGZsb3cgY29udHJvbAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWwueG9ueG9mZiA9IChjID09ICdYJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcF9wb3J0X3NldHRpbmdzKCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBjIGluICdyUic6ICAgICAgICAgICAgICAgICAgICAgICAgICMgUiAtPiBjaGFuZ2UgaGFyZHdhcmUgZmxvdyBjb250cm9sCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC5ydHNjdHMgPSAoYyA9PSAnUicpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBfcG9ydF9zZXR0aW5ncygpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCctLS0gdW5rbm93biBtZW51IGNoYXJhY3RlciAlcyAtLVxuJyAlIGtleV9kZXNjcmlwdGlvbihjKSkKLSAgICAgICAgICAgICAgICAgICAgbWVudV9hY3RpdmUgPSBGYWxzZQotICAgICAgICAgICAgICAgIGVsaWYgYyA9PSBNRU5VQ0hBUkFDVEVSOiAjIG5leHQgY2hhciB3aWxsIGJlIGZvciBtZW51Ci0gICAgICAgICAgICAgICAgICAgIG1lbnVfYWN0aXZlID0gVHJ1ZQotICAgICAgICAgICAgICAgIGVsaWYgYyA9PSBFWElUQ0hBUkNURVI6IAotICAgICAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQotICAgICAgICAgICAgICAgICAgICBicmVhayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBleGl0IGFwcAotICAgICAgICAgICAgICAgIGVsaWYgYyA9PSAnXG4nOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbC53cml0ZShzZWxmLm5ld2xpbmUpICAgICAgICAgIyBzZW5kIG5ld2xpbmUgY2hhcmFjdGVyKHMpCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZWNobzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoYykgICAgICAgICAgICAgICAgICMgbG9jYWwgZWNobyBpcyBhIHJlYWwgbmV3bGluZSBpbiBhbnkgY2FzZQotICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJpYWwud3JpdGUoYikgICAgICAgICAgICAgICAgICAgICMgc2VuZCBieXRlCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZWNobzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoYykKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmFsaXZlID0gRmFsc2UKLSAgICAgICAgICAgIHJhaXNlCi0KLWRlZiBtYWluKCk6Ci0gICAgaW1wb3J0IG9wdHBhcnNlCi0KLSAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCi0gICAgICAgIHVzYWdlID0gIiVwcm9nIFtvcHRpb25zXSBbcG9ydCBbYmF1ZHJhdGVdXSIsCi0gICAgICAgIGRlc2NyaXB0aW9uID0gIk1pbml0ZXJtIC0gQSBzaW1wbGUgdGVybWluYWwgcHJvZ3JhbSBmb3IgdGhlIHNlcmlhbCBwb3J0LiIKLSAgICApCi0KLSAgICBncm91cCA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgIlBvcnQgc2V0dGluZ3MiKQotCi0gICAgZ3JvdXAuYWRkX29wdGlvbigiLXAiLCAiLS1wb3J0IiwKLSAgICAgICAgZGVzdCA9ICJwb3J0IiwKLSAgICAgICAgaGVscCA9ICJwb3J0LCBhIG51bWJlciBvciBhIGRldmljZSBuYW1lLiAoZGVwcmVjYXRlZCBvcHRpb24sIHVzZSBwYXJhbWV0ZXIgaW5zdGVhZCkiLAotICAgICAgICBkZWZhdWx0ID0gREVGQVVMVF9QT1JUCi0gICAgKQotCi0gICAgZ3JvdXAuYWRkX29wdGlvbigiLWIiLCAiLS1iYXVkIiwKLSAgICAgICAgZGVzdCA9ICJiYXVkcmF0ZSIsCi0gICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsCi0gICAgICAgIHR5cGUgPSAnaW50JywKLSAgICAgICAgaGVscCA9ICJzZXQgYmF1ZCByYXRlLCBkZWZhdWx0ICVkZWZhdWx0IiwKLSAgICAgICAgZGVmYXVsdCA9IERFRkFVTFRfQkFVRFJBVEUKLSAgICApCi0KLSAgICBncm91cC5hZGRfb3B0aW9uKCItLXBhcml0eSIsCi0gICAgICAgIGRlc3QgPSAicGFyaXR5IiwKLSAgICAgICAgYWN0aW9uID0gInN0b3JlIiwKLSAgICAgICAgaGVscCA9ICJzZXQgcGFyaXR5LCBvbmUgb2YgW04sIEUsIE8sIFMsIE1dLCBkZWZhdWx0PU4iLAotICAgICAgICBkZWZhdWx0ID0gJ04nCi0gICAgKQotCi0gICAgZ3JvdXAuYWRkX29wdGlvbigiLS1ydHNjdHMiLAotICAgICAgICBkZXN0ID0gInJ0c2N0cyIsCi0gICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKLSAgICAgICAgaGVscCA9ICJlbmFibGUgUlRTL0NUUyBmbG93IGNvbnRyb2wgKGRlZmF1bHQgb2ZmKSIsCi0gICAgICAgIGRlZmF1bHQgPSBGYWxzZQotICAgICkKLQotICAgIGdyb3VwLmFkZF9vcHRpb24oIi0teG9ueG9mZiIsCi0gICAgICAgIGRlc3QgPSAieG9ueG9mZiIsCi0gICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKLSAgICAgICAgaGVscCA9ICJlbmFibGUgc29mdHdhcmUgZmxvdyBjb250cm9sIChkZWZhdWx0IG9mZikiLAotICAgICAgICBkZWZhdWx0ID0gRmFsc2UKLSAgICApCi0KLSAgICBncm91cC5hZGRfb3B0aW9uKCItLXJ0cyIsCi0gICAgICAgIGRlc3QgPSAicnRzX3N0YXRlIiwKLSAgICAgICAgYWN0aW9uID0gInN0b3JlIiwKLSAgICAgICAgdHlwZSA9ICdpbnQnLAotICAgICAgICBoZWxwID0gInNldCBpbml0aWFsIFJUUyBsaW5lIHN0YXRlIChwb3NzaWJsZSB2YWx1ZXM6IDAsIDEpIiwKLSAgICAgICAgZGVmYXVsdCA9IERFRkFVTFRfUlRTCi0gICAgKQotCi0gICAgZ3JvdXAuYWRkX29wdGlvbigiLS1kdHIiLAotICAgICAgICBkZXN0ID0gImR0cl9zdGF0ZSIsCi0gICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsCi0gICAgICAgIHR5cGUgPSAnaW50JywKLSAgICAgICAgaGVscCA9ICJzZXQgaW5pdGlhbCBEVFIgbGluZSBzdGF0ZSAocG9zc2libGUgdmFsdWVzOiAwLCAxKSIsCi0gICAgICAgIGRlZmF1bHQgPSBERUZBVUxUX0RUUgotICAgICkKLQotICAgIHBhcnNlci5hZGRfb3B0aW9uX2dyb3VwKGdyb3VwKQotCi0gICAgZ3JvdXAgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICJEYXRhIGhhbmRsaW5nIikKLQotICAgIGdyb3VwLmFkZF9vcHRpb24oIi1lIiwgIi0tZWNobyIsCi0gICAgICAgIGRlc3QgPSAiZWNobyIsCi0gICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKLSAgICAgICAgaGVscCA9ICJlbmFibGUgbG9jYWwgZWNobyAoZGVmYXVsdCBvZmYpIiwKLSAgICAgICAgZGVmYXVsdCA9IEZhbHNlCi0gICAgKQotCi0gICAgZ3JvdXAuYWRkX29wdGlvbigiLS1jciIsCi0gICAgICAgIGRlc3QgPSAiY3IiLAotICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsCi0gICAgICAgIGhlbHAgPSAiZG8gbm90IHNlbmQgQ1IrTEYsIHNlbmQgQ1Igb25seSIsCi0gICAgICAgIGRlZmF1bHQgPSBGYWxzZQotICAgICkKLQotICAgIGdyb3VwLmFkZF9vcHRpb24oIi0tbGYiLAotICAgICAgICBkZXN0ID0gImxmIiwKLSAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLAotICAgICAgICBoZWxwID0gImRvIG5vdCBzZW5kIENSK0xGLCBzZW5kIExGIG9ubHkiLAotICAgICAgICBkZWZhdWx0ID0gRmFsc2UKLSAgICApCi0KLSAgICBncm91cC5hZGRfb3B0aW9uKCItRCIsICItLWRlYnVnIiwKLSAgICAgICAgZGVzdCA9ICJyZXByX21vZGUiLAotICAgICAgICBhY3Rpb24gPSAiY291bnQiLAotICAgICAgICBoZWxwID0gIiIiZGVidWcgcmVjZWl2ZWQgZGF0YSAoZXNjYXBlIG5vbi1wcmludGFibGUgY2hhcnMpCi0tLWRlYnVnIGNhbiBiZSBnaXZlbiBtdWx0aXBsZSB0aW1lczoKLTA6IGp1c3QgcHJpbnQgd2hhdCBpcyByZWNlaXZlZAotMTogZXNjYXBlIG5vbi1wcmludGFibGUgY2hhcmFjdGVycywgZG8gbmV3bGluZXMgYXMgdW51c3VhbAotMjogZXNjYXBlIG5vbi1wcmludGFibGUgY2hhcmFjdGVycywgbmV3bGluZXMgdG9vCi0zOiBoZXggZHVtcCBldmVyeXRoaW5nIiIiLAotICAgICAgICBkZWZhdWx0ID0gMAotICAgICkKLQotICAgIHBhcnNlci5hZGRfb3B0aW9uX2dyb3VwKGdyb3VwKQotCi0KLSAgICBncm91cCA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgIkhvdGtleXMiKQotCi0gICAgZ3JvdXAuYWRkX29wdGlvbigiLS1leGl0LWNoYXIiLAotICAgICAgICBkZXN0ID0gImV4aXRfY2hhciIsCi0gICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsCi0gICAgICAgIHR5cGUgPSAnaW50JywKLSAgICAgICAgaGVscCA9ICJBU0NJSSBjb2RlIG9mIHNwZWNpYWwgY2hhcmFjdGVyIHRoYXQgaXMgdXNlZCB0byBleGl0IHRoZSBhcHBsaWNhdGlvbiIsCi0gICAgICAgIGRlZmF1bHQgPSAweDFkCi0gICAgKQotCi0gICAgZ3JvdXAuYWRkX29wdGlvbigiLS1tZW51LWNoYXIiLAotICAgICAgICBkZXN0ID0gIm1lbnVfY2hhciIsCi0gICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsCi0gICAgICAgIHR5cGUgPSAnaW50JywKLSAgICAgICAgaGVscCA9ICJBU0NJSSBjb2RlIG9mIHNwZWNpYWwgY2hhcmFjdGVyIHRoYXQgaXMgdXNlZCB0byBjb250cm9sIG1pbml0ZXJtIChtZW51KSIsCi0gICAgICAgIGRlZmF1bHQgPSAweDE0Ci0gICAgKQotCi0gICAgcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAoZ3JvdXApCi0KLSAgICBncm91cCA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgIkRpYWdub3N0aWNzIikKLQotICAgIGdyb3VwLmFkZF9vcHRpb24oIi1xIiwgIi0tcXVpZXQiLAotICAgICAgICBkZXN0ID0gInF1aWV0IiwKLSAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLAotICAgICAgICBoZWxwID0gInN1cHByZXNzIG5vbi1lcnJvciBtZXNzYWdlcyIsCi0gICAgICAgIGRlZmF1bHQgPSBGYWxzZQotICAgICkKLQotICAgIHBhcnNlci5hZGRfb3B0aW9uX2dyb3VwKGdyb3VwKQotCi0KLSAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCi0KLSAgICBvcHRpb25zLnBhcml0eSA9IG9wdGlvbnMucGFyaXR5LnVwcGVyKCkKLSAgICBpZiBvcHRpb25zLnBhcml0eSBub3QgaW4gJ05FT1NNJzoKLSAgICAgICAgcGFyc2VyLmVycm9yKCJpbnZhbGlkIHBhcml0eSIpCi0KLSAgICBpZiBvcHRpb25zLmNyIGFuZCBvcHRpb25zLmxmOgotICAgICAgICBwYXJzZXIuZXJyb3IoIm9ubHkgb25lIG9mIC0tY3Igb3IgLS1sZiBjYW4gYmUgc3BlY2lmaWVkIikKLQotICAgIGlmIG9wdGlvbnMubWVudV9jaGFyID09IG9wdGlvbnMuZXhpdF9jaGFyOgotICAgICAgICBwYXJzZXIuZXJyb3IoJy0tZXhpdC1jaGFyIGNhbiBub3QgYmUgdGhlIHNhbWUgYXMgLS1tZW51LWNoYXInKQotCi0gICAgZ2xvYmFsIEVYSVRDSEFSQ1RFUiwgTUVOVUNIQVJBQ1RFUgotICAgIEVYSVRDSEFSQ1RFUiA9IGNocihvcHRpb25zLmV4aXRfY2hhcikKLSAgICBNRU5VQ0hBUkFDVEVSID0gY2hyKG9wdGlvbnMubWVudV9jaGFyKQotCi0gICAgcG9ydCA9IG9wdGlvbnMucG9ydAotICAgIGJhdWRyYXRlID0gb3B0aW9ucy5iYXVkcmF0ZQotICAgIGlmIGFyZ3M6Ci0gICAgICAgIGlmIG9wdGlvbnMucG9ydCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHBhcnNlci5lcnJvcigibm8gYXJndW1lbnRzIGFyZSBhbGxvd2VkLCBvcHRpb25zIG9ubHkgd2hlbiAtLXBvcnQgaXMgZ2l2ZW4iKQotICAgICAgICBwb3J0ID0gYXJncy5wb3AoMCkKLSAgICAgICAgaWYgYXJnczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBiYXVkcmF0ZSA9IGludChhcmdzWzBdKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFyc2VyLmVycm9yKCJiYXVkIHJhdGUgbXVzdCBiZSBhIG51bWJlciwgbm90ICVyIiAlIGFyZ3NbMF0pCi0gICAgICAgICAgICBhcmdzLnBvcCgwKQotICAgICAgICBpZiBhcmdzOgotICAgICAgICAgICAgcGFyc2VyLmVycm9yKCJ0b28gbWFueSBhcmd1bWVudHMiKQotICAgIGVsc2U6Ci0gICAgICAgICMgbm9wb3J0IGdpdmVuIG9uIGNvbW1hbmQgbGluZSAtPiBhc2sgdXNlciBub3cKLSAgICAgICAgaWYgcG9ydCBpcyBOb25lOgotICAgICAgICAgICAgZHVtcF9wb3J0X2xpc3QoKQotICAgICAgICAgICAgcG9ydCA9IHJhd19pbnB1dCgnRW50ZXIgcG9ydCBuYW1lOicpCi0KLSAgICBjb252ZXJ0X291dGdvaW5nID0gQ09OVkVSVF9DUkxGCi0gICAgaWYgb3B0aW9ucy5jcjoKLSAgICAgICAgY29udmVydF9vdXRnb2luZyA9IENPTlZFUlRfQ1IKLSAgICBlbGlmIG9wdGlvbnMubGY6Ci0gICAgICAgIGNvbnZlcnRfb3V0Z29pbmcgPSBDT05WRVJUX0xGCi0KLSAgICB0cnk6Ci0gICAgICAgIG1pbml0ZXJtID0gTWluaXRlcm0oCi0gICAgICAgICAgICBwb3J0LAotICAgICAgICAgICAgYmF1ZHJhdGUsCi0gICAgICAgICAgICBvcHRpb25zLnBhcml0eSwKLSAgICAgICAgICAgIHJ0c2N0cz1vcHRpb25zLnJ0c2N0cywKLSAgICAgICAgICAgIHhvbnhvZmY9b3B0aW9ucy54b254b2ZmLAotICAgICAgICAgICAgZWNobz1vcHRpb25zLmVjaG8sCi0gICAgICAgICAgICBjb252ZXJ0X291dGdvaW5nPWNvbnZlcnRfb3V0Z29pbmcsCi0gICAgICAgICAgICByZXByX21vZGU9b3B0aW9ucy5yZXByX21vZGUsCi0gICAgICAgICkKLSAgICBleGNlcHQgc2VyaWFsLlNlcmlhbEV4Y2VwdGlvbiwgZToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiY291bGQgbm90IG9wZW4gcG9ydCAlcjogJXNcbiIgJSAocG9ydCwgZSkpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBpZiBub3Qgb3B0aW9ucy5xdWlldDoKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLS0tIE1pbml0ZXJtIG9uICVzOiAlZCwlcywlcywlcyAtLS1cbicgJSAoCi0gICAgICAgICAgICBtaW5pdGVybS5zZXJpYWwucG9ydHN0ciwKLSAgICAgICAgICAgIG1pbml0ZXJtLnNlcmlhbC5iYXVkcmF0ZSwKLSAgICAgICAgICAgIG1pbml0ZXJtLnNlcmlhbC5ieXRlc2l6ZSwKLSAgICAgICAgICAgIG1pbml0ZXJtLnNlcmlhbC5wYXJpdHksCi0gICAgICAgICAgICBtaW5pdGVybS5zZXJpYWwuc3RvcGJpdHMsCi0gICAgICAgICkpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy0tLSBRdWl0OiAlcyAgfCAgTWVudTogJXMgfCBIZWxwOiAlcyBmb2xsb3dlZCBieSAlcyAtLS1cbicgJSAoCi0gICAgICAgICAgICBrZXlfZGVzY3JpcHRpb24oRVhJVENIQVJDVEVSKSwKLSAgICAgICAgICAgIGtleV9kZXNjcmlwdGlvbihNRU5VQ0hBUkFDVEVSKSwKLSAgICAgICAgICAgIGtleV9kZXNjcmlwdGlvbihNRU5VQ0hBUkFDVEVSKSwKLSAgICAgICAgICAgIGtleV9kZXNjcmlwdGlvbignXHgwOCcpLAotICAgICAgICApKQotCi0gICAgaWYgb3B0aW9ucy5kdHJfc3RhdGUgaXMgbm90IE5vbmU6Ci0gICAgICAgIGlmIG5vdCBvcHRpb25zLnF1aWV0OgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLS0tIGZvcmNpbmcgRFRSICVzXG4nICUgKG9wdGlvbnMuZHRyX3N0YXRlIGFuZCAnYWN0aXZlJyBvciAnaW5hY3RpdmUnKSkKLSAgICAgICAgbWluaXRlcm0uc2VyaWFsLnNldERUUihvcHRpb25zLmR0cl9zdGF0ZSkKLSAgICAgICAgbWluaXRlcm0uZHRyX3N0YXRlID0gb3B0aW9ucy5kdHJfc3RhdGUKLSAgICBpZiBvcHRpb25zLnJ0c19zdGF0ZSBpcyBub3QgTm9uZToKLSAgICAgICAgaWYgbm90IG9wdGlvbnMucXVpZXQ6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCctLS0gZm9yY2luZyBSVFMgJXNcbicgJSAob3B0aW9ucy5ydHNfc3RhdGUgYW5kICdhY3RpdmUnIG9yICdpbmFjdGl2ZScpKQotICAgICAgICBtaW5pdGVybS5zZXJpYWwuc2V0UlRTKG9wdGlvbnMucnRzX3N0YXRlKQotICAgICAgICBtaW5pdGVybS5ydHNfc3RhdGUgPSBvcHRpb25zLnJ0c19zdGF0ZQotCi0gICAgY29uc29sZS5zZXR1cCgpCi0gICAgbWluaXRlcm0uc3RhcnQoKQotICAgIHRyeToKLSAgICAgICAgbWluaXRlcm0uam9pbihUcnVlKQotICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgcGFzcwotICAgIGlmIG5vdCBvcHRpb25zLnF1aWV0OgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJcbi0tLSBleGl0IC0tLVxuIikKLSAgICBtaW5pdGVybS5qb2luKCkKLSAgICAjfiBjb25zb2xlLmNsZWFudXAoKQotCi0jIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3VybGhhbmRsZXIvX19pbml0X18ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdXJsaGFuZGxlci9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdXJsaGFuZGxlci9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdXJsaGFuZGxlci9wcm90b2NvbF9od2dyZXAucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdXJsaGFuZGxlci9wcm90b2NvbF9od2dyZXAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyY2RhNDMuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3VybGhhbmRsZXIvcHJvdG9jb2xfaHdncmVwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIyEgcHl0aG9uCi0jCi0jIFB5dGhvbiBTZXJpYWwgUG9ydCBFeHRlbnNpb24gZm9yIFdpbjMyLCBMaW51eCwgQlNELCBKeXRob24KLSMgc2VlIF9faW5pdF9fLnB5Ci0jCi0jIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBzcGVjaWFsIFVSTCBoYW5kbGVyIHRoYXQgdXNlcyB0aGUgcG9ydCBsaXN0aW5nIHRvCi0jIGZpbmQgcG9ydHMgYnkgc2VhcmNoaW5nIHRoZSBzdHJpbmcgZGVzY3JpcHRpb25zLgotIwotIyAoQykgMjAxMSBDaHJpcyBMaWVjaHRpIDxjbGllY2h0aUBnbXgubmV0PgotIyB0aGlzIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzZWUgbGljZW5zZS50eHQKLSMKLSMgVVJMIGZvcm1hdDogICAgaHdncmVwOi8vcmVnZXhwCi0KLWltcG9ydCBzZXJpYWwKLWltcG9ydCBzZXJpYWwudG9vbHMubGlzdF9wb3J0cwotCi1jbGFzcyBTZXJpYWwoc2VyaWFsLlNlcmlhbCk6Ci0gICAgIiIiSnVzdCBpbmhlcml0IHRoZSBuYXRpdmUgU2VyaWFsIHBvcnQgaW1wbGVtZW50YXRpb24gYW5kIHBhdGNoIHRoZSBvcGVuIGZ1bmN0aW9uLiIiIgotCi0gICAgZGVmIHNldFBvcnQoc2VsZiwgdmFsdWUpOgotICAgICAgICAiIiJ0cmFuc2xhdGUgcG9ydCBuYW1lIGJlZm9yZSBzdG9yaW5nIGl0IiIiCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpIGFuZCB2YWx1ZS5zdGFydHN3aXRoKCdod2dyZXA6Ly8nKToKLSAgICAgICAgICAgIHNlcmlhbC5TZXJpYWwuc2V0UG9ydChzZWxmLCBzZWxmLmZyb21VUkwodmFsdWUpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VyaWFsLlNlcmlhbC5zZXRQb3J0KHNlbGYsIHZhbHVlKQotCi0gICAgZGVmIGZyb21VUkwoc2VsZiwgdXJsKToKLSAgICAgICAgIiIiZXh0cmFjdCBob3N0IGFuZCBwb3J0IGZyb20gYW4gVVJMIHN0cmluZyIiIgotICAgICAgICBpZiB1cmwubG93ZXIoKS5zdGFydHN3aXRoKCJod2dyZXA6Ly8iKTogdXJsID0gdXJsWzk6XQotICAgICAgICAjIHVzZSBhIGZvciBsb29wIHRvIGdldCB0aGUgMXN0IGVsZW1lbnQgZnJvbSB0aGUgZ2VuZXJhdG9yCi0gICAgICAgIGZvciBwb3J0LCBkZXNjLCBod2lkIGluIHNlcmlhbC50b29scy5saXN0X3BvcnRzLmdyZXAodXJsKToKLSAgICAgICAgICAgIHJldHVybiBwb3J0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBzZXJpYWwuU2VyaWFsRXhjZXB0aW9uKCdubyBwb3J0cyBmb3VuZCBtYXRjaGluZyByZWdleHAgJXInICUgKHVybCwpKQotCi0gICAgIyBvdmVycmlkZSBwcm9wZXJ0eQotICAgIHBvcnQgPSBwcm9wZXJ0eShzZXJpYWwuU2VyaWFsLmdldFBvcnQsIHNldFBvcnQsIGRvYz0iUG9ydCBzZXR0aW5nIikKLQotIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgI34gcyA9IFNlcmlhbCgnaHdncmVwOi8vdHR5UzAnKQotICAgIHMgPSBTZXJpYWwoTm9uZSkKLSAgICBzLnBvcnQgPSAnaHdncmVwOi8vdHR5UzAnCi0gICAgcHJpbnQgcwotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdXJsaGFuZGxlci9wcm90b2NvbF9sb29wLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3VybGhhbmRsZXIvcHJvdG9jb2xfbG9vcC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RhOTRhZC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdXJsaGFuZGxlci9wcm90b2NvbF9sb29wLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLSMhIHB5dGhvbgotIwotIyBQeXRob24gU2VyaWFsIFBvcnQgRXh0ZW5zaW9uIGZvciBXaW4zMiwgTGludXgsIEJTRCwgSnl0aG9uCi0jIHNlZSBfX2luaXRfXy5weQotIwotIyBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgbG9vcCBiYWNrIGNvbm5lY3Rpb24gcmVjZWl2aW5nIGl0c2VsZiB3aGF0IGl0IHNlbnQuCi0jCi0jIFRoZSBwdXJwb3NlIG9mIHRoaXMgbW9kdWxlIGlzLi4gd2VsbC4uLiBZb3UgY2FuIHJ1biB0aGUgdW5pdCB0ZXN0cyB3aXRoIGl0LgotIyBhbmQgaXQgd2FzIHNvIGVhc3kgdG8gaW1wbGVtZW50IDstKQotIwotIyAoQykgMjAwMS0yMDExIENocmlzIExpZWNodGkgPGNsaWVjaHRpQGdteC5uZXQ+Ci0jIHRoaXMgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYSBmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHNlZSBsaWNlbnNlLnR4dAotIwotIyBVUkwgZm9ybWF0OiAgICBsb29wOi8vW29wdGlvblsvb3B0aW9uLi4uXV0KLSMgb3B0aW9uczoKLSMgLSAiZGVidWciIHByaW50IGRpYWdub3N0aWMgbWVzc2FnZXMKLQotZnJvbSBzZXJpYWwuc2VyaWFsdXRpbCBpbXBvcnQgKgotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHRpbWUKLWltcG9ydCBsb2dnaW5nCi0KLSMgbWFwIGxvZyBsZXZlbCBuYW1lcyB0byBjb25zdGFudHMuIHVzZWQgaW4gZnJvbVVSTCgpCi1MT0dHRVJfTEVWRUxTID0gewotICAgICdkZWJ1Zyc6IGxvZ2dpbmcuREVCVUcsCi0gICAgJ2luZm8nOiBsb2dnaW5nLklORk8sCi0gICAgJ3dhcm5pbmcnOiBsb2dnaW5nLldBUk5JTkcsCi0gICAgJ2Vycm9yJzogbG9nZ2luZy5FUlJPUiwKLSAgICB9Ci0KLQotY2xhc3MgTG9vcGJhY2tTZXJpYWwoU2VyaWFsQmFzZSk6Ci0gICAgIiIiU2VyaWFsIHBvcnQgaW1wbGVtZW50YXRpb24gdGhhdCBzaW11bGF0ZXMgYSBsb29wIGJhY2sgY29ubmVjdGlvbiBpbiBwbGFpbiBzb2Z0d2FyZS4iIiIKLQotICAgIEJBVURSQVRFUyA9ICg1MCwgNzUsIDExMCwgMTM0LCAxNTAsIDIwMCwgMzAwLCA2MDAsIDEyMDAsIDE4MDAsIDI0MDAsIDQ4MDAsCi0gICAgICAgICAgICAgICAgIDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCkKLQotICAgIGRlZiBvcGVuKHNlbGYpOgotICAgICAgICAiIiJPcGVuIHBvcnQgd2l0aCBjdXJyZW50IHNldHRpbmdzLiBUaGlzIG1heSB0aHJvdyBhIFNlcmlhbEV4Y2VwdGlvbgotICAgICAgICAgICBpZiB0aGUgcG9ydCBjYW5ub3QgYmUgb3BlbmVkLiIiIgotICAgICAgICBpZiBzZWxmLl9pc09wZW46Ci0gICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oIlBvcnQgaXMgYWxyZWFkeSBvcGVuLiIpCi0gICAgICAgIHNlbGYubG9nZ2VyID0gTm9uZQotICAgICAgICBzZWxmLmJ1ZmZlcl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQotICAgICAgICBzZWxmLmxvb3BfYnVmZmVyID0gYnl0ZWFycmF5KCkKLSAgICAgICAgc2VsZi5jdHMgPSBGYWxzZQotICAgICAgICBzZWxmLmRzciA9IEZhbHNlCi0KLSAgICAgICAgaWYgc2VsZi5fcG9ydCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJQb3J0IG11c3QgYmUgY29uZmlndXJlZCBiZWZvcmUgaXQgY2FuIGJlIHVzZWQuIikKLSAgICAgICAgIyBub3QgdGhhdCB0aGVyZSBpcyBhbnl0aGluZyB0byBvcGVuLCBidXQgdGhlIGZ1bmN0aW9uIGFwcGxpZXMgdGhlCi0gICAgICAgICMgb3B0aW9ucyBmb3VuZCBpbiB0aGUgVVJMCi0gICAgICAgIHNlbGYuZnJvbVVSTChzZWxmLnBvcnQpCi0KLSAgICAgICAgIyBub3QgdGhhdCB0aGVyZSBhbnl0aGluZyB0byBjb25maWd1cmUuLi4KLSAgICAgICAgc2VsZi5fcmVjb25maWd1cmVQb3J0KCkKLSAgICAgICAgIyBhbGwgdGhpbmdzIHNldCB1cCBnZXQsIG5vdyBhIGNsZWFuIHN0YXJ0Ci0gICAgICAgIHNlbGYuX2lzT3BlbiA9IFRydWUKLSAgICAgICAgaWYgbm90IHNlbGYuX3J0c2N0czoKLSAgICAgICAgICAgIHNlbGYuc2V0UlRTKFRydWUpCi0gICAgICAgICAgICBzZWxmLnNldERUUihUcnVlKQotICAgICAgICBzZWxmLmZsdXNoSW5wdXQoKQotICAgICAgICBzZWxmLmZsdXNoT3V0cHV0KCkKLQotICAgIGRlZiBfcmVjb25maWd1cmVQb3J0KHNlbGYpOgotICAgICAgICAiIiJTZXQgY29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzIG9uIG9wZW5lZCBwb3J0LiBmb3IgdGhlIGxvb3A6Ly8KLSAgICAgICAgcHJvdG9jb2wgYWxsIHNldHRpbmdzIGFyZSBpZ25vcmVkISIiIgotICAgICAgICAjIG5vdCB0aGF0J3MgaXQgb2YgYW55IHJlYWwgdXNlLCBidXQgaXQgaGVscHMgaW4gdGhlIHVuaXQgdGVzdHMKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5fYmF1ZHJhdGUsIChpbnQsIGxvbmcpKSBvciBub3QgMCA8IHNlbGYuX2JhdWRyYXRlIDwgMioqMzI6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGJhdWRyYXRlOiAlciIgJSAoc2VsZi5fYmF1ZHJhdGUpKQotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ19yZWNvbmZpZ3VyZVBvcnQoKScpCi0KLSAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgICIiIkNsb3NlIHBvcnQiIiIKLSAgICAgICAgaWYgc2VsZi5faXNPcGVuOgotICAgICAgICAgICAgc2VsZi5faXNPcGVuID0gRmFsc2UKLSAgICAgICAgICAgICMgaW4gY2FzZSBvZiBxdWljayByZWNvbm5lY3RzLCBnaXZlIHRoZSBzZXJ2ZXIgc29tZSB0aW1lCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDAuMykKLQotICAgIGRlZiBtYWtlRGV2aWNlTmFtZShzZWxmLCBwb3J0KToKLSAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJ0aGVyZSBpcyBubyBzZW5zaWJsZSB3YXkgdG8gdHVybiBudW1iZXJzIGludG8gVVJMcyIpCi0KLSAgICBkZWYgZnJvbVVSTChzZWxmLCB1cmwpOgotICAgICAgICAiIiJleHRyYWN0IGhvc3QgYW5kIHBvcnQgZnJvbSBhbiBVUkwgc3RyaW5nIiIiCi0gICAgICAgIGlmIHVybC5sb3dlcigpLnN0YXJ0c3dpdGgoImxvb3A6Ly8iKTogdXJsID0gdXJsWzc6XQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIHByb2Nlc3Mgb3B0aW9ucyBub3csIGRpcmVjdGx5IGFsdGVyaW5nIHNlbGYKLSAgICAgICAgICAgIGZvciBvcHRpb24gaW4gdXJsLnNwbGl0KCcvJyk6Ci0gICAgICAgICAgICAgICAgaWYgJz0nIGluIG9wdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9uLCB2YWx1ZSA9IG9wdGlvbi5zcGxpdCgnPScsIDEpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOb25lCi0gICAgICAgICAgICAgICAgaWYgbm90IG9wdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGVsaWYgb3B0aW9uID09ICdsb2dnaW5nJzoKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZygpICAgIyBYWFggaXMgdGhhdCBnb29kIHRvIGNhbGwgaXQgaGVyZT8KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigncHlTZXJpYWwubG9vcCcpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLnNldExldmVsKExPR0dFUl9MRVZFTFNbdmFsdWVdKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygnZW5hYmxlZCBsb2dnaW5nJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bmtub3duIG9wdGlvbjogJXInICUgKG9wdGlvbiwpKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbignZXhwZWN0ZWQgYSBzdHJpbmcgaW4gdGhlIGZvcm0gIltsb29wOi8vXVtvcHRpb25bL29wdGlvbi4uLl1dIjogJXMnICUgZSkKLQotICAgICMgIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0KLQotICAgIGRlZiBpbldhaXRpbmcoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgY3VycmVudGx5IGluIHRoZSBpbnB1dCBidWZmZXIuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICAjIGF0dGVudGlvbiB0aGUgbG9nZ2VkIHZhbHVlIGNhbiBkaWZmZXIgZnJvbSByZXR1cm4gdmFsdWUgaW4KLSAgICAgICAgICAgICMgdGhyZWFkZWQgZW52aXJvbm1lbnRzLi4uCi0gICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygnaW5XYWl0aW5nKCkgLT4gJWQnICUgKGxlbihzZWxmLmxvb3BfYnVmZmVyKSwpKQotICAgICAgICByZXR1cm4gbGVuKHNlbGYubG9vcF9idWZmZXIpCi0KLSAgICBkZWYgcmVhZChzZWxmLCBzaXplPTEpOgotICAgICAgICAiIiJSZWFkIHNpemUgYnl0ZXMgZnJvbSB0aGUgc2VyaWFsIHBvcnQuIElmIGEgdGltZW91dCBpcyBzZXQgaXQgbWF5Ci0gICAgICAgIHJldHVybiBsZXNzIGNoYXJhY3RlcnMgYXMgcmVxdWVzdGVkLiBXaXRoIG5vIHRpbWVvdXQgaXQgd2lsbCBibG9jawotICAgICAgICB1bnRpbCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcyBpcyByZWFkLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGlmIHNlbGYuX3RpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0aW1lb3V0ID0gdGltZS50aW1lKCkgKyBzZWxmLl90aW1lb3V0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0aW1lb3V0ID0gTm9uZQotICAgICAgICBkYXRhID0gYnl0ZWFycmF5KCkKLSAgICAgICAgd2hpbGUgc2l6ZSA+IDA6Ci0gICAgICAgICAgICBzZWxmLmJ1ZmZlcl9sb2NrLmFjcXVpcmUoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGJsb2NrID0gdG9fYnl0ZXMoc2VsZi5sb29wX2J1ZmZlcls6c2l6ZV0pCi0gICAgICAgICAgICAgICAgZGVsIHNlbGYubG9vcF9idWZmZXJbOnNpemVdCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHNlbGYuYnVmZmVyX2xvY2sucmVsZWFzZSgpCi0gICAgICAgICAgICBkYXRhICs9IGJsb2NrCi0gICAgICAgICAgICBzaXplIC09IGxlbihibG9jaykKLSAgICAgICAgICAgICMgY2hlY2sgZm9yIHRpbWVvdXQgbm93LCBhZnRlciBkYXRhIGhhcyBiZWVuIHJlYWQuCi0gICAgICAgICAgICAjIHVzZWZ1bCBmb3IgdGltZW91dCA9IDAgKG5vbiBibG9ja2luZykgcmVhZAotICAgICAgICAgICAgaWYgdGltZW91dCBhbmQgdGltZS50aW1lKCkgPiB0aW1lb3V0OgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHJldHVybiBieXRlcyhkYXRhKQotCi0gICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgotICAgICAgICAiIiJPdXRwdXQgdGhlIGdpdmVuIHN0cmluZyBvdmVyIHRoZSBzZXJpYWwgcG9ydC4gQ2FuIGJsb2NrIGlmIHRoZQotICAgICAgICBjb25uZWN0aW9uIGlzIGJsb2NrZWQuIE1heSByYWlzZSBTZXJpYWxFeGNlcHRpb24gaWYgdGhlIGNvbm5lY3Rpb24gaXMKLSAgICAgICAgY2xvc2VkLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgICMgZW5zdXJlIHdlJ3JlIHdvcmtpbmcgd2l0aCBieXRlcwotICAgICAgICBkYXRhID0gdG9fYnl0ZXMoZGF0YSkKLSAgICAgICAgIyBjYWxjdWxhdGUgYXByb3ggdGltZSB0aGF0IHdvdWxkIGJlIHVzZWQgdG8gc2VuZCB0aGUgZGF0YQotICAgICAgICB0aW1lX3VzZWRfdG9fc2VuZCA9IDEwLjAqbGVuKGRhdGEpIC8gc2VsZi5fYmF1ZHJhdGUKLSAgICAgICAgIyB3aGVuIGEgd3JpdGUgdGltZW91dCBpcyBjb25maWd1cmVkIGNoZWNrIGlmIHdlIHdvdWxkIGJlIHN1Y2Nlc3NmdWwKLSAgICAgICAgIyAobm90IHNlbmRpbmcgYW55dGhpbmcsIG5vdCBldmVuIHRoZSBwYXJ0IHRoYXQgd291bGQgaGF2ZSB0aW1lKQotICAgICAgICBpZiBzZWxmLl93cml0ZVRpbWVvdXQgaXMgbm90IE5vbmUgYW5kIHRpbWVfdXNlZF90b19zZW5kID4gc2VsZi5fd3JpdGVUaW1lb3V0OgotICAgICAgICAgICAgdGltZS5zbGVlcChzZWxmLl93cml0ZVRpbWVvdXQpICMgbXVzdCB3YWl0IHNvIHRoYXQgdW5pdCB0ZXN0IHN1Y2NlZWRzCi0gICAgICAgICAgICByYWlzZSB3cml0ZVRpbWVvdXRFcnJvcgotICAgICAgICBzZWxmLmJ1ZmZlcl9sb2NrLmFjcXVpcmUoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmxvb3BfYnVmZmVyICs9IGRhdGEKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyX2xvY2sucmVsZWFzZSgpCi0gICAgICAgIHJldHVybiBsZW4oZGF0YSkKLQotICAgIGRlZiBmbHVzaElucHV0KHNlbGYpOgotICAgICAgICAiIiJDbGVhciBpbnB1dCBidWZmZXIsIGRpc2NhcmRpbmcgYWxsIHRoYXQgaXMgaW4gdGhlIGJ1ZmZlci4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ2ZsdXNoSW5wdXQoKScpCi0gICAgICAgIHNlbGYuYnVmZmVyX2xvY2suYWNxdWlyZSgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBzZWxmLmxvb3BfYnVmZmVyWzpdCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLmJ1ZmZlcl9sb2NrLnJlbGVhc2UoKQotCi0gICAgZGVmIGZsdXNoT3V0cHV0KHNlbGYpOgotICAgICAgICAiIiJDbGVhciBvdXRwdXQgYnVmZmVyLCBhYm9ydGluZyB0aGUgY3VycmVudCBvdXRwdXQgYW5kCi0gICAgICAgIGRpc2NhcmRpbmcgYWxsIHRoYXQgaXMgaW4gdGhlIGJ1ZmZlci4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ2ZsdXNoT3V0cHV0KCknKQotCi0gICAgZGVmIHNlbmRCcmVhayhzZWxmLCBkdXJhdGlvbj0wLjI1KToKLSAgICAgICAgIiIiU2VuZCBicmVhayBjb25kaXRpb24uIFRpbWVkLCByZXR1cm5zIHRvIGlkbGUgc3RhdGUgYWZ0ZXIgZ2l2ZW4KLSAgICAgICAgZHVyYXRpb24uIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLQotICAgIGRlZiBzZXRCcmVhayhzZWxmLCBsZXZlbD1UcnVlKToKLSAgICAgICAgIiIiU2V0IGJyZWFrOiBDb250cm9scyBUWEQuIFdoZW4gYWN0aXZlLCB0byB0cmFuc21pdHRpbmcgaXMKLSAgICAgICAgcG9zc2libGUuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCdzZXRCcmVhayglciknICUgKGxldmVsLCkpCi0KLSAgICBkZWYgc2V0UlRTKHNlbGYsIGxldmVsPVRydWUpOgotICAgICAgICAiIiJTZXQgdGVybWluYWwgc3RhdHVzIGxpbmU6IFJlcXVlc3QgVG8gU2VuZCIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnc2V0UlRTKCVyKSAtPiBzdGF0ZSBvZiBDVFMnICUgKGxldmVsLCkpCi0gICAgICAgIHNlbGYuY3RzID0gbGV2ZWwKLQotICAgIGRlZiBzZXREVFIoc2VsZiwgbGV2ZWw9VHJ1ZSk6Ci0gICAgICAgICIiIlNldCB0ZXJtaW5hbCBzdGF0dXMgbGluZTogRGF0YSBUZXJtaW5hbCBSZWFkeSIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnc2V0RFRSKCVyKSAtPiBzdGF0ZSBvZiBEU1InICUgKGxldmVsLCkpCi0gICAgICAgIHNlbGYuZHNyID0gbGV2ZWwKLQotICAgIGRlZiBnZXRDVFMoc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdGVybWluYWwgc3RhdHVzIGxpbmU6IENsZWFyIFRvIFNlbmQiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ2dldENUUygpIC0+IHN0YXRlIG9mIFJUUyAoJXIpJyAlIChzZWxmLmN0cywpKQotICAgICAgICByZXR1cm4gc2VsZi5jdHMKLQotICAgIGRlZiBnZXREU1Ioc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdGVybWluYWwgc3RhdHVzIGxpbmU6IERhdGEgU2V0IFJlYWR5IiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCdnZXREU1IoKSAtPiBzdGF0ZSBvZiBEVFIgKCVyKScgJSAoc2VsZi5kc3IsKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuZHNyCi0KLSAgICBkZWYgZ2V0Ukkoc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdGVybWluYWwgc3RhdHVzIGxpbmU6IFJpbmcgSW5kaWNhdG9yIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCdyZXR1cm5pbmcgZHVtbXkgZm9yIGdldFJJKCknKQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBnZXRDRChzZWxmKToKLSAgICAgICAgIiIiUmVhZCB0ZXJtaW5hbCBzdGF0dXMgbGluZTogQ2FycmllciBEZXRlY3QiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ3JldHVybmluZyBkdW1teSBmb3IgZ2V0Q0QoKScpCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAjIC0gLSAtIHBsYXRmb3JtIHNwZWNpZmljIC0gLSAtCi0gICAgIyBOb25lIHNvIGZhcgotCi0KLSMgYXNzZW1ibGUgU2VyaWFsIGNsYXNzIHdpdGggdGhlIHBsYXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgYmFzZQotIyBmb3IgZmlsZS1saWtlIGJlaGF2aW9yLiBmb3IgUHl0aG9uIDIuNiBhbmQgbmV3ZXIsIHRoYXQgcHJvdmlkZSB0aGUgbmV3IEkvTwotIyBsaWJyYXJ5LCBkZXJpdmUgZnJvbSBpby5SYXdJT0Jhc2UKLXRyeToKLSAgICBpbXBvcnQgaW8KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIGNsYXNzaWMgdmVyc2lvbiB3aXRoIG91ciBvd24gZmlsZS1saWtlIGVtdWxhdGlvbgotICAgIGNsYXNzIFNlcmlhbChMb29wYmFja1NlcmlhbCwgRmlsZUxpa2UpOgotICAgICAgICBwYXNzCi1lbHNlOgotICAgICMgaW8gbGlicmFyeSBwcmVzZW50Ci0gICAgY2xhc3MgU2VyaWFsKExvb3BiYWNrU2VyaWFsLCBpby5SYXdJT0Jhc2UpOgotICAgICAgICBwYXNzCi0KLQotIyBzaW1wbGUgY2xpZW50IHRlc3QKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IHN5cwotICAgIHMgPSBTZXJpYWwoJ2xvb3A6Ly8nKQotICAgIHN5cy5zdGRvdXQud3JpdGUoJyVzXG4nICUgcykKLQotICAgIHN5cy5zdGRvdXQud3JpdGUoIndyaXRlLi4uXG4iKQotICAgIHMud3JpdGUoImhlbGxvXG4iKQotICAgIHMuZmx1c2goKQotICAgIHN5cy5zdGRvdXQud3JpdGUoInJlYWQ6ICVzXG4iICUgcy5yZWFkKDUpKQotCi0gICAgcy5jbG9zZSgpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdXJsaGFuZGxlci9wcm90b2NvbF9yZmMyMjE3LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3VybGhhbmRsZXIvcHJvdG9jb2xfcmZjMjIxNy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTgxYmE0NS4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvdXJsaGFuZGxlci9wcm90b2NvbF9yZmMyMjE3LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotIyEgcHl0aG9uCi0jCi0jIFB5dGhvbiBTZXJpYWwgUG9ydCBFeHRlbnNpb24gZm9yIFdpbjMyLCBMaW51eCwgQlNELCBKeXRob24KLSMgc2VlIC4uL19faW5pdF9fLnB5Ci0jCi0jIFRoaXMgaXMgYSB0aGluIHdyYXBwZXIgdG8gbG9hZCB0aGUgcmZjMjI3MSBpbXBsZW1lbnRhdGlvbi4KLSMKLSMgKEMpIDIwMTEgQ2hyaXMgTGllY2h0aSA8Y2xpZWNodGlAZ214Lm5ldD4KLSMgdGhpcyBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGZyZWUgc29mdHdhcmUgbGljZW5zZSwgc2VlIGxpY2Vuc2UudHh0Ci0KLWZyb20gc2VyaWFsLnJmYzIyMTcgaW1wb3J0IFNlcmlhbApkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3VybGhhbmRsZXIvcHJvdG9jb2xfc29ja2V0LnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3VybGhhbmRsZXIvcHJvdG9jb2xfc29ja2V0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTBhOGU0Li4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3B5c2VyaWFsL3NlcmlhbC91cmxoYW5kbGVyL3Byb3RvY29sX3NvY2tldC5weQorKysgL2Rldi9udWxsCkBAIC0xLDI3NCArMCwwIEBACi0jISBweXRob24KLSMKLSMgUHl0aG9uIFNlcmlhbCBQb3J0IEV4dGVuc2lvbiBmb3IgV2luMzIsIExpbnV4LCBCU0QsIEp5dGhvbgotIyBzZWUgX19pbml0X18ucHkKLSMKLSMgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIHNpbXBsZSBzb2NrZXQgYmFzZWQgY2xpZW50LgotIyBJdCBkb2VzIG5vdCBzdXBwb3J0IGNoYW5naW5nIGFueSBwb3J0IHBhcmFtZXRlcnMgYW5kIHdpbGwgc2lsZW50bHkgaWdub3JlIGFueQotIyByZXF1ZXN0cyB0byBkbyBzby4KLSMKLSMgVGhlIHB1cnBvc2Ugb2YgdGhpcyBtb2R1bGUgaXMgdGhhdCBhcHBsaWNhdGlvbnMgdXNpbmcgcHlTZXJpYWwgY2FuIGNvbm5lY3QgdG8KLSMgVENQL0lQIHRvIHNlcmlhbCBwb3J0IGNvbnZlcnRlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBSRkMgMjIxNy4KLSMKLSMgKEMpIDIwMDEtMjAxMSBDaHJpcyBMaWVjaHRpIDxjbGllY2h0aUBnbXgubmV0PgotIyB0aGlzIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzZWUgbGljZW5zZS50eHQKLSMKLSMgVVJMIGZvcm1hdDogICAgc29ja2V0Oi8vPGhvc3Q+Ojxwb3J0Plsvb3B0aW9uWy9vcHRpb24uLi5dXQotIyBvcHRpb25zOgotIyAtICJkZWJ1ZyIgcHJpbnQgZGlhZ25vc3RpYyBtZXNzYWdlcwotCi1mcm9tIHNlcmlhbC5zZXJpYWx1dGlsIGltcG9ydCAqCi1pbXBvcnQgdGltZQotaW1wb3J0IHNvY2tldAotaW1wb3J0IGxvZ2dpbmcKLQotIyBtYXAgbG9nIGxldmVsIG5hbWVzIHRvIGNvbnN0YW50cy4gdXNlZCBpbiBmcm9tVVJMKCkKLUxPR0dFUl9MRVZFTFMgPSB7Ci0gICAgJ2RlYnVnJzogbG9nZ2luZy5ERUJVRywKLSAgICAnaW5mbyc6IGxvZ2dpbmcuSU5GTywKLSAgICAnd2FybmluZyc6IGxvZ2dpbmcuV0FSTklORywKLSAgICAnZXJyb3InOiBsb2dnaW5nLkVSUk9SLAotICAgIH0KLQotUE9MTF9USU1FT1VUID0gMgotCi1jbGFzcyBTb2NrZXRTZXJpYWwoU2VyaWFsQmFzZSk6Ci0gICAgIiIiU2VyaWFsIHBvcnQgaW1wbGVtZW50YXRpb24gZm9yIHBsYWluIHNvY2tldHMuIiIiCi0KLSAgICBCQVVEUkFURVMgPSAoNTAsIDc1LCAxMTAsIDEzNCwgMTUwLCAyMDAsIDMwMCwgNjAwLCAxMjAwLCAxODAwLCAyNDAwLCA0ODAwLAotICAgICAgICAgICAgICAgICA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDApCi0KLSAgICBkZWYgb3BlbihzZWxmKToKLSAgICAgICAgIiIiT3BlbiBwb3J0IHdpdGggY3VycmVudCBzZXR0aW5ncy4gVGhpcyBtYXkgdGhyb3cgYSBTZXJpYWxFeGNlcHRpb24KLSAgICAgICAgICAgaWYgdGhlIHBvcnQgY2Fubm90IGJlIG9wZW5lZC4iIiIKLSAgICAgICAgc2VsZi5sb2dnZXIgPSBOb25lCi0gICAgICAgIGlmIHNlbGYuX3BvcnQgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbigiUG9ydCBtdXN0IGJlIGNvbmZpZ3VyZWQgYmVmb3JlIGl0IGNhbiBiZSB1c2VkLiIpCi0gICAgICAgIGlmIHNlbGYuX2lzT3BlbjoKLSAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbigiUG9ydCBpcyBhbHJlYWR5IG9wZW4uIikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBYWFggaW4gZnV0dXJlIHJlcGxhY2Ugd2l0aCBjcmVhdGVfY29ubmVjdGlvbiAocHkgPj0yLjYpCi0gICAgICAgICAgICBzZWxmLl9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgICAgICBzZWxmLl9zb2NrZXQuY29ubmVjdChzZWxmLmZyb21VUkwoc2VsZi5wb3J0c3RyKSkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgbXNnOgotICAgICAgICAgICAgc2VsZi5fc29ja2V0ID0gTm9uZQotICAgICAgICAgICAgcmFpc2UgU2VyaWFsRXhjZXB0aW9uKCJDb3VsZCBub3Qgb3BlbiBwb3J0ICVzOiAlcyIgJSAoc2VsZi5wb3J0c3RyLCBtc2cpKQotCi0gICAgICAgIHNlbGYuX3NvY2tldC5zZXR0aW1lb3V0KFBPTExfVElNRU9VVCkgIyB1c2VkIGZvciB3cml0ZSB0aW1lb3V0IHN1cHBvcnQgOi8KLQotICAgICAgICAjIG5vdCB0aGF0IHRoZXJlIGFueXRoaW5nIHRvIGNvbmZpZ3VyZS4uLgotICAgICAgICBzZWxmLl9yZWNvbmZpZ3VyZVBvcnQoKQotICAgICAgICAjIGFsbCB0aGluZ3Mgc2V0IHVwIGdldCwgbm93IGEgY2xlYW4gc3RhcnQKLSAgICAgICAgc2VsZi5faXNPcGVuID0gVHJ1ZQotICAgICAgICBpZiBub3Qgc2VsZi5fcnRzY3RzOgotICAgICAgICAgICAgc2VsZi5zZXRSVFMoVHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuc2V0RFRSKFRydWUpCi0gICAgICAgIHNlbGYuZmx1c2hJbnB1dCgpCi0gICAgICAgIHNlbGYuZmx1c2hPdXRwdXQoKQotCi0gICAgZGVmIF9yZWNvbmZpZ3VyZVBvcnQoc2VsZik6Ci0gICAgICAgICIiIlNldCBjb21tdW5pY2F0aW9uIHBhcmFtZXRlcnMgb24gb3BlbmVkIHBvcnQuIGZvciB0aGUgc29ja2V0Oi8vCi0gICAgICAgIHByb3RvY29sIGFsbCBzZXR0aW5ncyBhcmUgaWdub3JlZCEiIiIKLSAgICAgICAgaWYgc2VsZi5fc29ja2V0IGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oIkNhbiBvbmx5IG9wZXJhdGUgb24gb3BlbiBwb3J0cyIpCi0gICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnaWdub3JlZCBwb3J0IGNvbmZpZ3VyYXRpb24gY2hhbmdlJykKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgIiIiQ2xvc2UgcG9ydCIiIgotICAgICAgICBpZiBzZWxmLl9pc09wZW46Ci0gICAgICAgICAgICBpZiBzZWxmLl9zb2NrZXQ6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrZXQuc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29ja2V0LmNsb3NlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICMgaWdub3JlIGVycm9ycy4KLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIHNlbGYuX3NvY2tldCA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYuX2lzT3BlbiA9IEZhbHNlCi0gICAgICAgICAgICAjIGluIGNhc2Ugb2YgcXVpY2sgcmVjb25uZWN0cywgZ2l2ZSB0aGUgc2VydmVyIHNvbWUgdGltZQotICAgICAgICAgICAgdGltZS5zbGVlcCgwLjMpCi0KLSAgICBkZWYgbWFrZURldmljZU5hbWUoc2VsZiwgcG9ydCk6Ci0gICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbigidGhlcmUgaXMgbm8gc2Vuc2libGUgd2F5IHRvIHR1cm4gbnVtYmVycyBpbnRvIFVSTHMiKQotCi0gICAgZGVmIGZyb21VUkwoc2VsZiwgdXJsKToKLSAgICAgICAgIiIiZXh0cmFjdCBob3N0IGFuZCBwb3J0IGZyb20gYW4gVVJMIHN0cmluZyIiIgotICAgICAgICBpZiB1cmwubG93ZXIoKS5zdGFydHN3aXRoKCJzb2NrZXQ6Ly8iKTogdXJsID0gdXJsWzk6XQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIGlzIHRoZXJlIGEgInBhdGgiIChvdXIgb3B0aW9ucyk/Ci0gICAgICAgICAgICBpZiAnLycgaW4gdXJsOgotICAgICAgICAgICAgICAgICMgY3V0IGF3YXkgb3B0aW9ucwotICAgICAgICAgICAgICAgIHVybCwgb3B0aW9ucyA9IHVybC5zcGxpdCgnLycsIDEpCi0gICAgICAgICAgICAgICAgIyBwcm9jZXNzIG9wdGlvbnMgbm93LCBkaXJlY3RseSBhbHRlcmluZyBzZWxmCi0gICAgICAgICAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zLnNwbGl0KCcvJyk6Ci0gICAgICAgICAgICAgICAgICAgIGlmICc9JyBpbiBvcHRpb246Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHZhbHVlID0gb3B0aW9uLnNwbGl0KCc9JywgMSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBpZiBvcHRpb24gPT0gJ2xvZ2dpbmcnOgotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZygpICAgIyBYWFggaXMgdGhhdCBnb29kIHRvIGNhbGwgaXQgaGVyZT8KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3B5U2VyaWFsLnNvY2tldCcpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5zZXRMZXZlbChMT0dHRVJfTEVWRUxTW3ZhbHVlXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCdlbmFibGVkIGxvZ2dpbmcnKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5rbm93biBvcHRpb246ICVyJyAlIChvcHRpb24sKSkKLSAgICAgICAgICAgICMgZ2V0IGhvc3QgYW5kIHBvcnQKLSAgICAgICAgICAgIGhvc3QsIHBvcnQgPSB1cmwuc3BsaXQoJzonLCAxKSAjIG1heSByYWlzZSBWYWx1ZUVycm9yIGJlY2F1c2Ugb2YgdW5wYWNraW5nCi0gICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpICAgICAgICAgICAgICAgIyBhbmQgdGhpcyBpZiBpdCdzIG5vdCBhIG51bWJlcgotICAgICAgICAgICAgaWYgbm90IDAgPD0gcG9ydCA8IDY1NTM2OiByYWlzZSBWYWx1ZUVycm9yKCJwb3J0IG5vdCBpbiByYW5nZSAwLi4uNjU1MzUiKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbignZXhwZWN0ZWQgYSBzdHJpbmcgaW4gdGhlIGZvcm0gIltyZmMyMjE3Oi8vXTxob3N0Pjo8cG9ydD5bL29wdGlvblsvb3B0aW9uLi4uXV0iOiAlcycgJSBlKQotICAgICAgICByZXR1cm4gKGhvc3QsIHBvcnQpCi0KLSAgICAjICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtCi0KLSAgICBkZWYgaW5XYWl0aW5nKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGN1cnJlbnRseSBpbiB0aGUgaW5wdXQgYnVmZmVyLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgIyBzZXQgdGhpcyBvbmUgdG8gZGVidWcgYXMgdGhlIGZ1bmN0aW9uIGNvdWxkIGJlIGNhbGxlZCBvZnRlbi4uLgotICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoJ1dBUk5JTkc6IGluV2FpdGluZyByZXR1cm5zIGR1bW15IHZhbHVlJykKLSAgICAgICAgcmV0dXJuIDAgIyBobW1tLCBzZWUgY29tbWVudCBpbiByZWFkKCkKLQotICAgIGRlZiByZWFkKHNlbGYsIHNpemU9MSk6Ci0gICAgICAgICIiIlJlYWQgc2l6ZSBieXRlcyBmcm9tIHRoZSBzZXJpYWwgcG9ydC4gSWYgYSB0aW1lb3V0IGlzIHNldCBpdCBtYXkKLSAgICAgICAgcmV0dXJuIGxlc3MgY2hhcmFjdGVycyBhcyByZXF1ZXN0ZWQuIFdpdGggbm8gdGltZW91dCBpdCB3aWxsIGJsb2NrCi0gICAgICAgIHVudGlsIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzIGlzIHJlYWQuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgZGF0YSA9IGJ5dGVhcnJheSgpCi0gICAgICAgIGlmIHNlbGYuX3RpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0aW1lb3V0ID0gdGltZS50aW1lKCkgKyBzZWxmLl90aW1lb3V0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0aW1lb3V0ID0gTm9uZQotICAgICAgICB3aGlsZSBsZW4oZGF0YSkgPCBzaXplIGFuZCAodGltZW91dCBpcyBOb25lIG9yIHRpbWUudGltZSgpIDwgdGltZW91dCk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBhbiBpbXBsZW1lbnRhdGlvbiB3aXRoIGludGVybmFsIGJ1ZmZlciB3b3VsZCBiZSBiZXR0ZXIKLSAgICAgICAgICAgICAgICAjIHBlcmZvcm1pbmcuLi4KLSAgICAgICAgICAgICAgICB0ID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgICAgICBibG9jayA9IHNlbGYuX3NvY2tldC5yZWN2KHNpemUgLSBsZW4oZGF0YSkpCi0gICAgICAgICAgICAgICAgZHVyYXRpb24gPSB0aW1lLnRpbWUoKSAtIHQKLSAgICAgICAgICAgICAgICBpZiBibG9jazoKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5leHRlbmQoYmxvY2spCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyBubyBkYXRhIC0+IEVPRiAoY29ubmVjdGlvbiBwcm9iYWJseSBjbG9zZWQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgIyBqdXN0IG5lZWQgdG8gZ2V0IG91dCBvZiByZWN2IGZyb20gdGltZSB0byB0aW1lIHRvIGNoZWNrIGlmCi0gICAgICAgICAgICAgICAgIyBzdGlsbCBhbGl2ZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlOgotICAgICAgICAgICAgICAgICMgY29ubmVjdGlvbiBmYWlscyAtPiB0ZXJtaW5hdGUgbG9vcAotICAgICAgICAgICAgICAgIHJhaXNlIFNlcmlhbEV4Y2VwdGlvbignY29ubmVjdGlvbiBmYWlsZWQgKCVzKScgJSBlKQotICAgICAgICByZXR1cm4gYnl0ZXMoZGF0YSkKLQotICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiT3V0cHV0IHRoZSBnaXZlbiBzdHJpbmcgb3ZlciB0aGUgc2VyaWFsIHBvcnQuIENhbiBibG9jayBpZiB0aGUKLSAgICAgICAgY29ubmVjdGlvbiBpcyBibG9ja2VkLiBNYXkgcmFpc2UgU2VyaWFsRXhjZXB0aW9uIGlmIHRoZSBjb25uZWN0aW9uIGlzCi0gICAgICAgIGNsb3NlZC4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbCh0b19ieXRlcyhkYXRhKSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKLSAgICAgICAgICAgICMgWFhYIHdoYXQgZXhjZXB0aW9uIGlmIHNvY2tldCBjb25uZWN0aW9uIGZhaWxzCi0gICAgICAgICAgICByYWlzZSBTZXJpYWxFeGNlcHRpb24oInNvY2tldCBjb25uZWN0aW9uIGZhaWxlZDogJXMiICUgZSkKLSAgICAgICAgcmV0dXJuIGxlbihkYXRhKQotCi0gICAgZGVmIGZsdXNoSW5wdXQoc2VsZik6Ci0gICAgICAgICIiIkNsZWFyIGlucHV0IGJ1ZmZlciwgZGlzY2FyZGluZyBhbGwgdGhhdCBpcyBpbiB0aGUgYnVmZmVyLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnaWdub3JlZCBmbHVzaElucHV0JykKLQotICAgIGRlZiBmbHVzaE91dHB1dChzZWxmKToKLSAgICAgICAgIiIiQ2xlYXIgb3V0cHV0IGJ1ZmZlciwgYWJvcnRpbmcgdGhlIGN1cnJlbnQgb3V0cHV0IGFuZAotICAgICAgICBkaXNjYXJkaW5nIGFsbCB0aGF0IGlzIGluIHRoZSBidWZmZXIuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCdpZ25vcmVkIGZsdXNoT3V0cHV0JykKLQotICAgIGRlZiBzZW5kQnJlYWsoc2VsZiwgZHVyYXRpb249MC4yNSk6Ci0gICAgICAgICIiIlNlbmQgYnJlYWsgY29uZGl0aW9uLiBUaW1lZCwgcmV0dXJucyB0byBpZGxlIHN0YXRlIGFmdGVyIGdpdmVuCi0gICAgICAgIGR1cmF0aW9uLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnaWdub3JlZCBzZW5kQnJlYWsoJXIpJyAlIChkdXJhdGlvbiwpKQotCi0gICAgZGVmIHNldEJyZWFrKHNlbGYsIGxldmVsPVRydWUpOgotICAgICAgICAiIiJTZXQgYnJlYWs6IENvbnRyb2xzIFRYRC4gV2hlbiBhY3RpdmUsIHRvIHRyYW5zbWl0dGluZyBpcwotICAgICAgICBwb3NzaWJsZS4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ2lnbm9yZWQgc2V0QnJlYWsoJXIpJyAlIChsZXZlbCwpKQotCi0gICAgZGVmIHNldFJUUyhzZWxmLCBsZXZlbD1UcnVlKToKLSAgICAgICAgIiIiU2V0IHRlcm1pbmFsIHN0YXR1cyBsaW5lOiBSZXF1ZXN0IFRvIFNlbmQiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ2lnbm9yZWQgc2V0UlRTKCVyKScgJSAobGV2ZWwsKSkKLQotICAgIGRlZiBzZXREVFIoc2VsZiwgbGV2ZWw9VHJ1ZSk6Ci0gICAgICAgICIiIlNldCB0ZXJtaW5hbCBzdGF0dXMgbGluZTogRGF0YSBUZXJtaW5hbCBSZWFkeSIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnaWdub3JlZCBzZXREVFIoJXIpJyAlIChsZXZlbCwpKQotCi0gICAgZGVmIGdldENUUyhzZWxmKToKLSAgICAgICAgIiIiUmVhZCB0ZXJtaW5hbCBzdGF0dXMgbGluZTogQ2xlYXIgVG8gU2VuZCIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygncmV0dXJuaW5nIGR1bW15IGZvciBnZXRDVFMoKScpCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgZ2V0RFNSKHNlbGYpOgotICAgICAgICAiIiJSZWFkIHRlcm1pbmFsIHN0YXR1cyBsaW5lOiBEYXRhIFNldCBSZWFkeSIiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNPcGVuOiByYWlzZSBwb3J0Tm90T3BlbkVycm9yCi0gICAgICAgIGlmIHNlbGYubG9nZ2VyOgotICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygncmV0dXJuaW5nIGR1bW15IGZvciBnZXREU1IoKScpCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgZ2V0Ukkoc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdGVybWluYWwgc3RhdHVzIGxpbmU6IFJpbmcgSW5kaWNhdG9yIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc09wZW46IHJhaXNlIHBvcnROb3RPcGVuRXJyb3IKLSAgICAgICAgaWYgc2VsZi5sb2dnZXI6Ci0gICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCdyZXR1cm5pbmcgZHVtbXkgZm9yIGdldFJJKCknKQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBnZXRDRChzZWxmKToKLSAgICAgICAgIiIiUmVhZCB0ZXJtaW5hbCBzdGF0dXMgbGluZTogQ2FycmllciBEZXRlY3QiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzT3BlbjogcmFpc2UgcG9ydE5vdE9wZW5FcnJvcgotICAgICAgICBpZiBzZWxmLmxvZ2dlcjoKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ3JldHVybmluZyBkdW1teSBmb3IgZ2V0Q0QoKScpCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAjIC0gLSAtIHBsYXRmb3JtIHNwZWNpZmljIC0gLSAtCi0gICAgIyBOb25lIHNvIGZhcgotCi0KLSMgYXNzZW1ibGUgU2VyaWFsIGNsYXNzIHdpdGggdGhlIHBsYXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgYmFzZQotIyBmb3IgZmlsZS1saWtlIGJlaGF2aW9yLiBmb3IgUHl0aG9uIDIuNiBhbmQgbmV3ZXIsIHRoYXQgcHJvdmlkZSB0aGUgbmV3IEkvTwotIyBsaWJyYXJ5LCBkZXJpdmUgZnJvbSBpby5SYXdJT0Jhc2UKLXRyeToKLSAgICBpbXBvcnQgaW8KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIGNsYXNzaWMgdmVyc2lvbiB3aXRoIG91ciBvd24gZmlsZS1saWtlIGVtdWxhdGlvbgotICAgIGNsYXNzIFNlcmlhbChTb2NrZXRTZXJpYWwsIEZpbGVMaWtlKToKLSAgICAgICAgcGFzcwotZWxzZToKLSAgICAjIGlvIGxpYnJhcnkgcHJlc2VudAotICAgIGNsYXNzIFNlcmlhbChTb2NrZXRTZXJpYWwsIGlvLlJhd0lPQmFzZSk6Ci0gICAgICAgIHBhc3MKLQotCi0jIHNpbXBsZSBjbGllbnQgdGVzdAotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpbXBvcnQgc3lzCi0gICAgcyA9IFNlcmlhbCgnc29ja2V0Oi8vbG9jYWxob3N0OjcwMDAnKQotICAgIHN5cy5zdGRvdXQud3JpdGUoJyVzXG4nICUgcykKLQotICAgIHN5cy5zdGRvdXQud3JpdGUoIndyaXRlLi4uXG4iKQotICAgIHMud3JpdGUoImhlbGxvXG4iKQotICAgIHMuZmx1c2goKQotICAgIHN5cy5zdGRvdXQud3JpdGUoInJlYWQ6ICVzXG4iICUgcy5yZWFkKDUpKQotCi0gICAgcy5jbG9zZSgpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvd2luMzIucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS9weXNlcmlhbC9zZXJpYWwvd2luMzIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYjNkN2EuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvcHlzZXJpYWwvc2VyaWFsL3dpbjMyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzIwICswLDAgQEAKLWZyb20gY3R5cGVzIGltcG9ydCAqCi1mcm9tIGN0eXBlcy53aW50eXBlcyBpbXBvcnQgSEFORExFCi1mcm9tIGN0eXBlcy53aW50eXBlcyBpbXBvcnQgQk9PTAotZnJvbSBjdHlwZXMud2ludHlwZXMgaW1wb3J0IExQQ1dTVFIKLV9zdGRjYWxsX2xpYnJhcmllcyA9IHt9Ci1fc3RkY2FsbF9saWJyYXJpZXNbJ2tlcm5lbDMyJ10gPSBXaW5ETEwoJ2tlcm5lbDMyJykKLWZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBEV09SRAotZnJvbSBjdHlwZXMud2ludHlwZXMgaW1wb3J0IFdPUkQKLWZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBCWVRFCi0KLUlOVkFMSURfSEFORExFX1ZBTFVFID0gSEFORExFKC0xKS52YWx1ZQotCi0jIHNvbWUgZGV0YWlscyBvZiB0aGUgd2luZG93cyBBUEkgZGlmZmVyIGJldHdlZW4gMzIgYW5kIDY0IGJpdCBzeXN0ZW1zLi4KLWRlZiBpc182NGJpdCgpOgotICAgICIiIlJldHVybnMgdHJ1ZSB3aGVuIHJ1bm5pbmcgb24gYSA2NCBiaXQgc3lzdGVtIiIiCi0gICAgcmV0dXJuIHNpemVvZihjX3Vsb25nKSAhPSBzaXplb2YoY192b2lkX3ApCi0KLSMgVUxPTkdfUFRSIGlzIGEgYW4gb3JkaW5hcnkgbnVtYmVyLCBub3QgYSBwb2ludGVyIGFuZCBjb250cmFyeSB0byB0aGUgbmFtZSBpdAotIyBpcyBlaXRoZXIgMzIgb3IgNjQgYml0cywgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHdpbmRvd3MuLi4KLSMgc28gdGVzdCBpZiB0aGlzIGEgMzIgYml0IHdpbmRvd3MuLi4KLWlmIGlzXzY0Yml0KCk6Ci0gICAgIyBhc3N1bWUgNjQgYml0cwotICAgIFVMT05HX1BUUiA9IGNfaW50NjQKLWVsc2U6Ci0gICAgIyAzMiBiaXRzCi0gICAgVUxPTkdfUFRSID0gY191bG9uZwotCi0KLWNsYXNzIF9TRUNVUklUWV9BVFRSSUJVVEVTKFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotTFBTRUNVUklUWV9BVFRSSUJVVEVTID0gUE9JTlRFUihfU0VDVVJJVFlfQVRUUklCVVRFUykKLQotCi10cnk6Ci0gICAgQ3JlYXRlRXZlbnRXID0gX3N0ZGNhbGxfbGlicmFyaWVzWydrZXJuZWwzMiddLkNyZWF0ZUV2ZW50VwotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICMgRmFsbGJhY2sgdG8gbm9uIHdpZGUgY2hhciB2ZXJzaW9uIGZvciBvbGQgT1MuLi4KLSAgICBmcm9tIGN0eXBlcy53aW50eXBlcyBpbXBvcnQgTFBDU1RSCi0gICAgQ3JlYXRlRXZlbnRBID0gX3N0ZGNhbGxfbGlicmFyaWVzWydrZXJuZWwzMiddLkNyZWF0ZUV2ZW50QQotICAgIENyZWF0ZUV2ZW50QS5yZXN0eXBlID0gSEFORExFCi0gICAgQ3JlYXRlRXZlbnRBLmFyZ3R5cGVzID0gW0xQU0VDVVJJVFlfQVRUUklCVVRFUywgQk9PTCwgQk9PTCwgTFBDU1RSXQotICAgIENyZWF0ZUV2ZW50PUNyZWF0ZUV2ZW50QQotCi0gICAgQ3JlYXRlRmlsZUEgPSBfc3RkY2FsbF9saWJyYXJpZXNbJ2tlcm5lbDMyJ10uQ3JlYXRlRmlsZUEKLSAgICBDcmVhdGVGaWxlQS5yZXN0eXBlID0gSEFORExFCi0gICAgQ3JlYXRlRmlsZUEuYXJndHlwZXMgPSBbTFBDU1RSLCBEV09SRCwgRFdPUkQsIExQU0VDVVJJVFlfQVRUUklCVVRFUywgRFdPUkQsIERXT1JELCBIQU5ETEVdCi0gICAgQ3JlYXRlRmlsZSA9IENyZWF0ZUZpbGVBCi1lbHNlOgotICAgIENyZWF0ZUV2ZW50Vy5yZXN0eXBlID0gSEFORExFCi0gICAgQ3JlYXRlRXZlbnRXLmFyZ3R5cGVzID0gW0xQU0VDVVJJVFlfQVRUUklCVVRFUywgQk9PTCwgQk9PTCwgTFBDV1NUUl0KLSAgICBDcmVhdGVFdmVudCA9IENyZWF0ZUV2ZW50VyAjIGFsaWFzCi0KLSAgICBDcmVhdGVGaWxlVyA9IF9zdGRjYWxsX2xpYnJhcmllc1sna2VybmVsMzInXS5DcmVhdGVGaWxlVwotICAgIENyZWF0ZUZpbGVXLnJlc3R5cGUgPSBIQU5ETEUKLSAgICBDcmVhdGVGaWxlVy5hcmd0eXBlcyA9IFtMUENXU1RSLCBEV09SRCwgRFdPUkQsIExQU0VDVVJJVFlfQVRUUklCVVRFUywgRFdPUkQsIERXT1JELCBIQU5ETEVdCi0gICAgQ3JlYXRlRmlsZSA9IENyZWF0ZUZpbGVXICMgYWxpYXMKLQotY2xhc3MgX09WRVJMQVBQRUQoU3RydWN0dXJlKToKLSAgICBwYXNzCi1PVkVSTEFQUEVEID0gX09WRVJMQVBQRUQKLQotY2xhc3MgX0NPTVNUQVQoU3RydWN0dXJlKToKLSAgICBwYXNzCi1DT01TVEFUID0gX0NPTVNUQVQKLQotY2xhc3MgX0RDQihTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLURDQiA9IF9EQ0IKLQotY2xhc3MgX0NPTU1USU1FT1VUUyhTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLUNPTU1USU1FT1VUUyA9IF9DT01NVElNRU9VVFMKLQotR2V0TGFzdEVycm9yID0gX3N0ZGNhbGxfbGlicmFyaWVzWydrZXJuZWwzMiddLkdldExhc3RFcnJvcgotR2V0TGFzdEVycm9yLnJlc3R5cGUgPSBEV09SRAotR2V0TGFzdEVycm9yLmFyZ3R5cGVzID0gW10KLQotTFBPVkVSTEFQUEVEID0gUE9JTlRFUihfT1ZFUkxBUFBFRCkKLUxQRFdPUkQgPSBQT0lOVEVSKERXT1JEKQotCi1HZXRPdmVybGFwcGVkUmVzdWx0ID0gX3N0ZGNhbGxfbGlicmFyaWVzWydrZXJuZWwzMiddLkdldE92ZXJsYXBwZWRSZXN1bHQKLUdldE92ZXJsYXBwZWRSZXN1bHQucmVzdHlwZSA9IEJPT0wKLUdldE92ZXJsYXBwZWRSZXN1bHQuYXJndHlwZXMgPSBbSEFORExFLCBMUE9WRVJMQVBQRUQsIExQRFdPUkQsIEJPT0xdCi0KLVJlc2V0RXZlbnQgPSBfc3RkY2FsbF9saWJyYXJpZXNbJ2tlcm5lbDMyJ10uUmVzZXRFdmVudAotUmVzZXRFdmVudC5yZXN0eXBlID0gQk9PTAotUmVzZXRFdmVudC5hcmd0eXBlcyA9IFtIQU5ETEVdCi0KLUxQQ1ZPSUQgPSBjX3ZvaWRfcAotCi1Xcml0ZUZpbGUgPSBfc3RkY2FsbF9saWJyYXJpZXNbJ2tlcm5lbDMyJ10uV3JpdGVGaWxlCi1Xcml0ZUZpbGUucmVzdHlwZSA9IEJPT0wKLVdyaXRlRmlsZS5hcmd0eXBlcyA9IFtIQU5ETEUsIExQQ1ZPSUQsIERXT1JELCBMUERXT1JELCBMUE9WRVJMQVBQRURdCi0KLUxQVk9JRCA9IGNfdm9pZF9wCi0KLVJlYWRGaWxlID0gX3N0ZGNhbGxfbGlicmFyaWVzWydrZXJuZWwzMiddLlJlYWRGaWxlCi1SZWFkRmlsZS5yZXN0eXBlID0gQk9PTAotUmVhZEZpbGUuYXJndHlwZXMgPSBbSEFORExFLCBMUFZPSUQsIERXT1JELCBMUERXT1JELCBMUE9WRVJMQVBQRURdCi0KLUNsb3NlSGFuZGxlID0gX3N0ZGNhbGxfbGlicmFyaWVzWydrZXJuZWwzMiddLkNsb3NlSGFuZGxlCi1DbG9zZUhhbmRsZS5yZXN0eXBlID0gQk9PTAotQ2xvc2VIYW5kbGUuYXJndHlwZXMgPSBbSEFORExFXQotCi1DbGVhckNvbW1CcmVhayA9IF9zdGRjYWxsX2xpYnJhcmllc1sna2VybmVsMzInXS5DbGVhckNvbW1CcmVhawotQ2xlYXJDb21tQnJlYWsucmVzdHlwZSA9IEJPT0wKLUNsZWFyQ29tbUJyZWFrLmFyZ3R5cGVzID0gW0hBTkRMRV0KLQotTFBDT01TVEFUID0gUE9JTlRFUihfQ09NU1RBVCkKLQotQ2xlYXJDb21tRXJyb3IgPSBfc3RkY2FsbF9saWJyYXJpZXNbJ2tlcm5lbDMyJ10uQ2xlYXJDb21tRXJyb3IKLUNsZWFyQ29tbUVycm9yLnJlc3R5cGUgPSBCT09MCi1DbGVhckNvbW1FcnJvci5hcmd0eXBlcyA9IFtIQU5ETEUsIExQRFdPUkQsIExQQ09NU1RBVF0KLQotU2V0dXBDb21tID0gX3N0ZGNhbGxfbGlicmFyaWVzWydrZXJuZWwzMiddLlNldHVwQ29tbQotU2V0dXBDb21tLnJlc3R5cGUgPSBCT09MCi1TZXR1cENvbW0uYXJndHlwZXMgPSBbSEFORExFLCBEV09SRCwgRFdPUkRdCi0KLUVzY2FwZUNvbW1GdW5jdGlvbiA9IF9zdGRjYWxsX2xpYnJhcmllc1sna2VybmVsMzInXS5Fc2NhcGVDb21tRnVuY3Rpb24KLUVzY2FwZUNvbW1GdW5jdGlvbi5yZXN0eXBlID0gQk9PTAotRXNjYXBlQ29tbUZ1bmN0aW9uLmFyZ3R5cGVzID0gW0hBTkRMRSwgRFdPUkRdCi0KLUdldENvbW1Nb2RlbVN0YXR1cyA9IF9zdGRjYWxsX2xpYnJhcmllc1sna2VybmVsMzInXS5HZXRDb21tTW9kZW1TdGF0dXMKLUdldENvbW1Nb2RlbVN0YXR1cy5yZXN0eXBlID0gQk9PTAotR2V0Q29tbU1vZGVtU3RhdHVzLmFyZ3R5cGVzID0gW0hBTkRMRSwgTFBEV09SRF0KLQotTFBEQ0IgPSBQT0lOVEVSKF9EQ0IpCi0KLUdldENvbW1TdGF0ZSA9IF9zdGRjYWxsX2xpYnJhcmllc1sna2VybmVsMzInXS5HZXRDb21tU3RhdGUKLUdldENvbW1TdGF0ZS5yZXN0eXBlID0gQk9PTAotR2V0Q29tbVN0YXRlLmFyZ3R5cGVzID0gW0hBTkRMRSwgTFBEQ0JdCi0KLUxQQ09NTVRJTUVPVVRTID0gUE9JTlRFUihfQ09NTVRJTUVPVVRTKQotCi1HZXRDb21tVGltZW91dHMgPSBfc3RkY2FsbF9saWJyYXJpZXNbJ2tlcm5lbDMyJ10uR2V0Q29tbVRpbWVvdXRzCi1HZXRDb21tVGltZW91dHMucmVzdHlwZSA9IEJPT0wKLUdldENvbW1UaW1lb3V0cy5hcmd0eXBlcyA9IFtIQU5ETEUsIExQQ09NTVRJTUVPVVRTXQotCi1QdXJnZUNvbW0gPSBfc3RkY2FsbF9saWJyYXJpZXNbJ2tlcm5lbDMyJ10uUHVyZ2VDb21tCi1QdXJnZUNvbW0ucmVzdHlwZSA9IEJPT0wKLVB1cmdlQ29tbS5hcmd0eXBlcyA9IFtIQU5ETEUsIERXT1JEXQotCi1TZXRDb21tQnJlYWsgPSBfc3RkY2FsbF9saWJyYXJpZXNbJ2tlcm5lbDMyJ10uU2V0Q29tbUJyZWFrCi1TZXRDb21tQnJlYWsucmVzdHlwZSA9IEJPT0wKLVNldENvbW1CcmVhay5hcmd0eXBlcyA9IFtIQU5ETEVdCi0KLVNldENvbW1NYXNrID0gX3N0ZGNhbGxfbGlicmFyaWVzWydrZXJuZWwzMiddLlNldENvbW1NYXNrCi1TZXRDb21tTWFzay5yZXN0eXBlID0gQk9PTAotU2V0Q29tbU1hc2suYXJndHlwZXMgPSBbSEFORExFLCBEV09SRF0KLQotU2V0Q29tbVN0YXRlID0gX3N0ZGNhbGxfbGlicmFyaWVzWydrZXJuZWwzMiddLlNldENvbW1TdGF0ZQotU2V0Q29tbVN0YXRlLnJlc3R5cGUgPSBCT09MCi1TZXRDb21tU3RhdGUuYXJndHlwZXMgPSBbSEFORExFLCBMUERDQl0KLQotU2V0Q29tbVRpbWVvdXRzID0gX3N0ZGNhbGxfbGlicmFyaWVzWydrZXJuZWwzMiddLlNldENvbW1UaW1lb3V0cwotU2V0Q29tbVRpbWVvdXRzLnJlc3R5cGUgPSBCT09MCi1TZXRDb21tVGltZW91dHMuYXJndHlwZXMgPSBbSEFORExFLCBMUENPTU1USU1FT1VUU10KLQotV2FpdEZvclNpbmdsZU9iamVjdCA9IF9zdGRjYWxsX2xpYnJhcmllc1sna2VybmVsMzInXS5XYWl0Rm9yU2luZ2xlT2JqZWN0Ci1XYWl0Rm9yU2luZ2xlT2JqZWN0LnJlc3R5cGUgPSBEV09SRAotV2FpdEZvclNpbmdsZU9iamVjdC5hcmd0eXBlcyA9IFtIQU5ETEUsIERXT1JEXQotCi1PTkVTVE9QQklUID0gMCAjIFZhcmlhYmxlIGNfaW50Ci1UV09TVE9QQklUUyA9IDIgIyBWYXJpYWJsZSBjX2ludAotT05FNVNUT1BCSVRTID0gMQotCi1OT1BBUklUWSA9IDAgIyBWYXJpYWJsZSBjX2ludAotT0REUEFSSVRZID0gMSAjIFZhcmlhYmxlIGNfaW50Ci1FVkVOUEFSSVRZID0gMiAjIFZhcmlhYmxlIGNfaW50Ci1NQVJLUEFSSVRZID0gMwotU1BBQ0VQQVJJVFkgPSA0Ci0KLVJUU19DT05UUk9MX0hBTkRTSEFLRSA9IDIgIyBWYXJpYWJsZSBjX2ludAotUlRTX0NPTlRST0xfRElTQUJMRSA9IDAgIyBWYXJpYWJsZSBjX2ludAotUlRTX0NPTlRST0xfRU5BQkxFID0gMSAjIFZhcmlhYmxlIGNfaW50Ci1SVFNfQ09OVFJPTF9UT0dHTEUgPSAzICMgVmFyaWFibGUgY19pbnQKLVNFVFJUUyA9IDMKLUNMUlJUUyA9IDQKLQotRFRSX0NPTlRST0xfSEFORFNIQUtFID0gMiAjIFZhcmlhYmxlIGNfaW50Ci1EVFJfQ09OVFJPTF9ESVNBQkxFID0gMCAjIFZhcmlhYmxlIGNfaW50Ci1EVFJfQ09OVFJPTF9FTkFCTEUgPSAxICMgVmFyaWFibGUgY19pbnQKLVNFVERUUiA9IDUKLUNMUkRUUiA9IDYKLQotTVNfRFNSX09OID0gMzIgIyBWYXJpYWJsZSBjX3Vsb25nCi1FVl9SSU5HID0gMjU2ICMgVmFyaWFibGUgY19pbnQKLUVWX1BFUlIgPSA1MTIgIyBWYXJpYWJsZSBjX2ludAotRVZfRVJSID0gMTI4ICMgVmFyaWFibGUgY19pbnQKLVNFVFhPRkYgPSAxICMgVmFyaWFibGUgY19pbnQKLUVWX1JYQ0hBUiA9IDEgIyBWYXJpYWJsZSBjX2ludAotR0VORVJJQ19XUklURSA9IDEwNzM3NDE4MjQgIyBWYXJpYWJsZSBjX2xvbmcKLVBVUkdFX1RYQ0xFQVIgPSA0ICMgVmFyaWFibGUgY19pbnQKLUZJTEVfRkxBR19PVkVSTEFQUEVEID0gMTA3Mzc0MTgyNCAjIFZhcmlhYmxlIGNfaW50Ci1FVl9EU1IgPSAxNiAjIFZhcmlhYmxlIGNfaW50Ci1NQVhEV09SRCA9IDQyOTQ5NjcyOTVMICMgVmFyaWFibGUgY191aW50Ci1FVl9STFNEID0gMzIgIyBWYXJpYWJsZSBjX2ludAotRVJST1JfSU9fUEVORElORyA9IDk5NyAjIFZhcmlhYmxlIGNfbG9uZwotTVNfQ1RTX09OID0gMTYgIyBWYXJpYWJsZSBjX3Vsb25nCi1FVl9FVkVOVDEgPSAyMDQ4ICMgVmFyaWFibGUgY19pbnQKLUVWX1JYODBGVUxMID0gMTAyNCAjIFZhcmlhYmxlIGNfaW50Ci1QVVJHRV9SWEFCT1JUID0gMiAjIFZhcmlhYmxlIGNfaW50Ci1GSUxFX0FUVFJJQlVURV9OT1JNQUwgPSAxMjggIyBWYXJpYWJsZSBjX2ludAotUFVSR0VfVFhBQk9SVCA9IDEgIyBWYXJpYWJsZSBjX2ludAotU0VUWE9OID0gMiAjIFZhcmlhYmxlIGNfaW50Ci1PUEVOX0VYSVNUSU5HID0gMyAjIFZhcmlhYmxlIGNfaW50Ci1NU19SSU5HX09OID0gNjQgIyBWYXJpYWJsZSBjX3Vsb25nCi1FVl9UWEVNUFRZID0gNCAjIFZhcmlhYmxlIGNfaW50Ci1FVl9SWEZMQUcgPSAyICMgVmFyaWFibGUgY19pbnQKLU1TX1JMU0RfT04gPSAxMjggIyBWYXJpYWJsZSBjX3Vsb25nCi1HRU5FUklDX1JFQUQgPSAyMTQ3NDgzNjQ4TCAjIFZhcmlhYmxlIGNfdWxvbmcKLUVWX0VWRU5UMiA9IDQwOTYgIyBWYXJpYWJsZSBjX2ludAotRVZfQ1RTID0gOCAjIFZhcmlhYmxlIGNfaW50Ci1FVl9CUkVBSyA9IDY0ICMgVmFyaWFibGUgY19pbnQKLVBVUkdFX1JYQ0xFQVIgPSA4ICMgVmFyaWFibGUgY19pbnQKLUlORklOSVRFID0gMHhGRkZGRkZGRkwKLQotCi1jbGFzcyBOMTFfT1ZFUkxBUFBFRDRET0xMQVJfNDhFKFVuaW9uKToKLSAgICBwYXNzCi1jbGFzcyBOMTFfT1ZFUkxBUFBFRDRET0xMQVJfNDg0RE9MTEFSXzQ5RShTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLU4xMV9PVkVSTEFQUEVENERPTExBUl80ODRET0xMQVJfNDlFLl9maWVsZHNfID0gWwotICAgICgnT2Zmc2V0JywgRFdPUkQpLAotICAgICgnT2Zmc2V0SGlnaCcsIERXT1JEKSwKLV0KLQotUFZPSUQgPSBjX3ZvaWRfcAotCi1OMTFfT1ZFUkxBUFBFRDRET0xMQVJfNDhFLl9hbm9ueW1vdXNfID0gWydfMCddCi1OMTFfT1ZFUkxBUFBFRDRET0xMQVJfNDhFLl9maWVsZHNfID0gWwotICAgICgnXzAnLCBOMTFfT1ZFUkxBUFBFRDRET0xMQVJfNDg0RE9MTEFSXzQ5RSksCi0gICAgKCdQb2ludGVyJywgUFZPSUQpLAotXQotX09WRVJMQVBQRUQuX2Fub255bW91c18gPSBbJ18wJ10KLV9PVkVSTEFQUEVELl9maWVsZHNfID0gWwotICAgICgnSW50ZXJuYWwnLCBVTE9OR19QVFIpLAotICAgICgnSW50ZXJuYWxIaWdoJywgVUxPTkdfUFRSKSwKLSAgICAoJ18wJywgTjExX09WRVJMQVBQRUQ0RE9MTEFSXzQ4RSksCi0gICAgKCdoRXZlbnQnLCBIQU5ETEUpLAotXQotX1NFQ1VSSVRZX0FUVFJJQlVURVMuX2ZpZWxkc18gPSBbCi0gICAgKCduTGVuZ3RoJywgRFdPUkQpLAotICAgICgnbHBTZWN1cml0eURlc2NyaXB0b3InLCBMUFZPSUQpLAotICAgICgnYkluaGVyaXRIYW5kbGUnLCBCT09MKSwKLV0KLV9DT01TVEFULl9maWVsZHNfID0gWwotICAgICgnZkN0c0hvbGQnLCBEV09SRCwgMSksCi0gICAgKCdmRHNySG9sZCcsIERXT1JELCAxKSwKLSAgICAoJ2ZSbHNkSG9sZCcsIERXT1JELCAxKSwKLSAgICAoJ2ZYb2ZmSG9sZCcsIERXT1JELCAxKSwKLSAgICAoJ2ZYb2ZmU2VudCcsIERXT1JELCAxKSwKLSAgICAoJ2ZFb2YnLCBEV09SRCwgMSksCi0gICAgKCdmVHhpbScsIERXT1JELCAxKSwKLSAgICAoJ2ZSZXNlcnZlZCcsIERXT1JELCAyNSksCi0gICAgKCdjYkluUXVlJywgRFdPUkQpLAotICAgICgnY2JPdXRRdWUnLCBEV09SRCksCi1dCi1fRENCLl9maWVsZHNfID0gWwotICAgICgnRENCbGVuZ3RoJywgRFdPUkQpLAotICAgICgnQmF1ZFJhdGUnLCBEV09SRCksCi0gICAgKCdmQmluYXJ5JywgRFdPUkQsIDEpLAotICAgICgnZlBhcml0eScsIERXT1JELCAxKSwKLSAgICAoJ2ZPdXR4Q3RzRmxvdycsIERXT1JELCAxKSwKLSAgICAoJ2ZPdXR4RHNyRmxvdycsIERXT1JELCAxKSwKLSAgICAoJ2ZEdHJDb250cm9sJywgRFdPUkQsIDIpLAotICAgICgnZkRzclNlbnNpdGl2aXR5JywgRFdPUkQsIDEpLAotICAgICgnZlRYQ29udGludWVPblhvZmYnLCBEV09SRCwgMSksCi0gICAgKCdmT3V0WCcsIERXT1JELCAxKSwKLSAgICAoJ2ZJblgnLCBEV09SRCwgMSksCi0gICAgKCdmRXJyb3JDaGFyJywgRFdPUkQsIDEpLAotICAgICgnZk51bGwnLCBEV09SRCwgMSksCi0gICAgKCdmUnRzQ29udHJvbCcsIERXT1JELCAyKSwKLSAgICAoJ2ZBYm9ydE9uRXJyb3InLCBEV09SRCwgMSksCi0gICAgKCdmRHVtbXkyJywgRFdPUkQsIDE3KSwKLSAgICAoJ3dSZXNlcnZlZCcsIFdPUkQpLAotICAgICgnWG9uTGltJywgV09SRCksCi0gICAgKCdYb2ZmTGltJywgV09SRCksCi0gICAgKCdCeXRlU2l6ZScsIEJZVEUpLAotICAgICgnUGFyaXR5JywgQllURSksCi0gICAgKCdTdG9wQml0cycsIEJZVEUpLAotICAgICgnWG9uQ2hhcicsIGNfY2hhciksCi0gICAgKCdYb2ZmQ2hhcicsIGNfY2hhciksCi0gICAgKCdFcnJvckNoYXInLCBjX2NoYXIpLAotICAgICgnRW9mQ2hhcicsIGNfY2hhciksCi0gICAgKCdFdnRDaGFyJywgY19jaGFyKSwKLSAgICAoJ3dSZXNlcnZlZDEnLCBXT1JEKSwKLV0KLV9DT01NVElNRU9VVFMuX2ZpZWxkc18gPSBbCi0gICAgKCdSZWFkSW50ZXJ2YWxUaW1lb3V0JywgRFdPUkQpLAotICAgICgnUmVhZFRvdGFsVGltZW91dE11bHRpcGxpZXInLCBEV09SRCksCi0gICAgKCdSZWFkVG90YWxUaW1lb3V0Q29uc3RhbnQnLCBEV09SRCksCi0gICAgKCdXcml0ZVRvdGFsVGltZW91dE11bHRpcGxpZXInLCBEV09SRCksCi0gICAgKCdXcml0ZVRvdGFsVGltZW91dENvbnN0YW50JywgRFdPUkQpLAotXQotX19hbGxfXyA9IFsnR2V0TGFzdEVycm9yJywgJ01TX0NUU19PTicsICdGSUxFX0FUVFJJQlVURV9OT1JNQUwnLAotICAgICAgICAgICAnRFRSX0NPTlRST0xfRU5BQkxFJywgJ19DT01TVEFUJywgJ01TX1JMU0RfT04nLAotICAgICAgICAgICAnR2V0T3ZlcmxhcHBlZFJlc3VsdCcsICdTRVRYT04nLCAnUFVSR0VfVFhBQk9SVCcsCi0gICAgICAgICAgICdQdXJnZUNvbW0nLCAnTjExX09WRVJMQVBQRUQ0RE9MTEFSXzQ4RScsICdFVl9SSU5HJywKLSAgICAgICAgICAgJ09ORVNUT1BCSVQnLCAnU0VUWE9GRicsICdQVVJHRV9SWEFCT1JUJywgJ0dldENvbW1TdGF0ZScsCi0gICAgICAgICAgICdSVFNfQ09OVFJPTF9FTkFCTEUnLCAnX0RDQicsICdDcmVhdGVFdmVudCcsCi0gICAgICAgICAgICdfQ09NTVRJTUVPVVRTJywgJ19TRUNVUklUWV9BVFRSSUJVVEVTJywgJ0VWX0RTUicsCi0gICAgICAgICAgICdFVl9QRVJSJywgJ0VWX1JYRkxBRycsICdPUEVOX0VYSVNUSU5HJywgJ0RDQicsCi0gICAgICAgICAgICdGSUxFX0ZMQUdfT1ZFUkxBUFBFRCcsICdFVl9DVFMnLCAnU2V0dXBDb21tJywKLSAgICAgICAgICAgJ0xQT1ZFUkxBUFBFRCcsICdFVl9UWEVNUFRZJywgJ0NsZWFyQ29tbUJyZWFrJywKLSAgICAgICAgICAgJ0xQU0VDVVJJVFlfQVRUUklCVVRFUycsICdTZXRDb21tQnJlYWsnLCAnU2V0Q29tbVRpbWVvdXRzJywKLSAgICAgICAgICAgJ0NPTU1USU1FT1VUUycsICdPRERQQVJJVFknLCAnRVZfUkxTRCcsCi0gICAgICAgICAgICdHZXRDb21tTW9kZW1TdGF0dXMnLCAnRVZfRVZFTlQyJywgJ1BVUkdFX1RYQ0xFQVInLAotICAgICAgICAgICAnRVZfQlJFQUsnLCAnRVZFTlBBUklUWScsICdMUENWT0lEJywgJ0NPTVNUQVQnLCAnUmVhZEZpbGUnLAotICAgICAgICAgICAnUFZPSUQnLCAnX09WRVJMQVBQRUQnLCAnV3JpdGVGaWxlJywgJ0dldENvbW1UaW1lb3V0cycsCi0gICAgICAgICAgICdSZXNldEV2ZW50JywgJ0VWX1JYQ0hBUicsICdMUENPTVNUQVQnLCAnQ2xlYXJDb21tRXJyb3InLAotICAgICAgICAgICAnRVJST1JfSU9fUEVORElORycsICdFc2NhcGVDb21tRnVuY3Rpb24nLCAnR0VORVJJQ19SRUFEJywKLSAgICAgICAgICAgJ1JUU19DT05UUk9MX0hBTkRTSEFLRScsICdPVkVSTEFQUEVEJywKLSAgICAgICAgICAgJ0RUUl9DT05UUk9MX0hBTkRTSEFLRScsICdQVVJHRV9SWENMRUFSJywgJ0dFTkVSSUNfV1JJVEUnLAotICAgICAgICAgICAnTFBEQ0InLCAnQ3JlYXRlRXZlbnRXJywgJ1NldENvbW1NYXNrJywgJ0VWX0VWRU5UMScsCi0gICAgICAgICAgICdTZXRDb21tU3RhdGUnLCAnTFBWT0lEJywgJ0NyZWF0ZUZpbGVXJywgJ0xQRFdPUkQnLAotICAgICAgICAgICAnRVZfUlg4MEZVTEwnLCAnVFdPU1RPUEJJVFMnLCAnTFBDT01NVElNRU9VVFMnLCAnTUFYRFdPUkQnLAotICAgICAgICAgICAnTVNfRFNSX09OJywgJ01TX1JJTkdfT04nLAotICAgICAgICAgICAnTjExX09WRVJMQVBQRUQ0RE9MTEFSXzQ4NERPTExBUl80OUUnLCAnRVZfRVJSJywKLSAgICAgICAgICAgJ1VMT05HX1BUUicsICdDcmVhdGVGaWxlJywgJ05PUEFSSVRZJywgJ0Nsb3NlSGFuZGxlJ10KZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3ppcGZpbGUvTElDRU5TRSBiL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3ppcGZpbGUvTElDRU5TRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRhMzMzNy4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS96aXBmaWxlL0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSwyNTUgKzAsMCBAQAotQS4gSElTVE9SWSBPRiBUSEUgU09GVFdBUkUKLT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVB5dGhvbiB3YXMgY3JlYXRlZCBpbiB0aGUgZWFybHkgMTk5MHMgYnkgR3VpZG8gdmFuIFJvc3N1bSBhdCBTdGljaHRpbmcKLU1hdGhlbWF0aXNjaCBDZW50cnVtIChDV0ksIHNlZSBodHRwOi8vd3d3LmN3aS5ubCkgaW4gdGhlIE5ldGhlcmxhbmRzCi1hcyBhIHN1Y2Nlc3NvciBvZiBhIGxhbmd1YWdlIGNhbGxlZCBBQkMuICBHdWlkbyByZW1haW5zIFB5dGhvbidzCi1wcmluY2lwYWwgYXV0aG9yLCBhbHRob3VnaCBpdCBpbmNsdWRlcyBtYW55IGNvbnRyaWJ1dGlvbnMgZnJvbSBvdGhlcnMuCi0KLUluIDE5OTUsIEd1aWRvIGNvbnRpbnVlZCBoaXMgd29yayBvbiBQeXRob24gYXQgdGhlIENvcnBvcmF0aW9uIGZvcgotTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMgKENOUkksIHNlZSBodHRwOi8vd3d3LmNucmkucmVzdG9uLnZhLnVzKQotaW4gUmVzdG9uLCBWaXJnaW5pYSB3aGVyZSBoZSByZWxlYXNlZCBzZXZlcmFsIHZlcnNpb25zIG9mIHRoZQotc29mdHdhcmUuCi0KLUluIE1heSAyMDAwLCBHdWlkbyBhbmQgdGhlIFB5dGhvbiBjb3JlIGRldmVsb3BtZW50IHRlYW0gbW92ZWQgdG8KLUJlT3Blbi5jb20gdG8gZm9ybSB0aGUgQmVPcGVuIFB5dGhvbkxhYnMgdGVhbS4gIEluIE9jdG9iZXIgb2YgdGhlIHNhbWUKLXllYXIsIHRoZSBQeXRob25MYWJzIHRlYW0gbW92ZWQgdG8gRGlnaXRhbCBDcmVhdGlvbnMgKG5vdyBab3BlCi1Db3Jwb3JhdGlvbiwgc2VlIGh0dHA6Ly93d3cuem9wZS5jb20pLiAgSW4gMjAwMSwgdGhlIFB5dGhvbiBTb2Z0d2FyZQotRm91bmRhdGlvbiAoUFNGLCBzZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi8pIHdhcyBmb3JtZWQsIGEKLW5vbi1wcm9maXQgb3JnYW5pemF0aW9uIGNyZWF0ZWQgc3BlY2lmaWNhbGx5IHRvIG93biBQeXRob24tcmVsYXRlZAotSW50ZWxsZWN0dWFsIFByb3BlcnR5LiAgWm9wZSBDb3Jwb3JhdGlvbiBpcyBhIHNwb25zb3JpbmcgbWVtYmVyIG9mCi10aGUgUFNGLgotCi1BbGwgUHl0aG9uIHJlbGVhc2VzIGFyZSBPcGVuIFNvdXJjZSAoc2VlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcgZm9yCi10aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbikuICBIaXN0b3JpY2FsbHksIG1vc3QsIGJ1dCBub3QgYWxsLCBQeXRob24KLXJlbGVhc2VzIGhhdmUgYWxzbyBiZWVuIEdQTC1jb21wYXRpYmxlOyB0aGUgdGFibGUgYmVsb3cgc3VtbWFyaXplcwotdGhlIHZhcmlvdXMgcmVsZWFzZXMuCi0KLSAgICBSZWxlYXNlICAgICAgICAgRGVyaXZlZCAgICAgWWVhciAgICAgICAgT3duZXIgICAgICAgR1BMLQotICAgICAgICAgICAgICAgICAgICBmcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlPyAoMSkKLQotICAgIDAuOS4wIHRocnUgMS4yICAgICAgICAgICAgICAxOTkxLTE5OTUgICBDV0kgICAgICAgICB5ZXMKLSAgICAxLjMgdGhydSAxLjUuMiAgMS4yICAgICAgICAgMTk5NS0xOTk5ICAgQ05SSSAgICAgICAgeWVzCi0gICAgMS42ICAgICAgICAgICAgIDEuNS4yICAgICAgIDIwMDAgICAgICAgIENOUkkgICAgICAgIG5vCi0gICAgMi4wICAgICAgICAgICAgIDEuNiAgICAgICAgIDIwMDAgICAgICAgIEJlT3Blbi5jb20gIG5vCi0gICAgMS42LjEgICAgICAgICAgIDEuNiAgICAgICAgIDIwMDEgICAgICAgIENOUkkgICAgICAgIHllcyAoMikKLSAgICAyLjEgICAgICAgICAgICAgMi4wKzEuNi4xICAgMjAwMSAgICAgICAgUFNGICAgICAgICAgbm8KLSAgICAyLjAuMSAgICAgICAgICAgMi4wKzEuNi4xICAgMjAwMSAgICAgICAgUFNGICAgICAgICAgeWVzCi0gICAgMi4xLjEgICAgICAgICAgIDIuMSsyLjAuMSAgIDIwMDEgICAgICAgIFBTRiAgICAgICAgIHllcwotICAgIDIuMS4yICAgICAgICAgICAyLjEuMSAgICAgICAyMDAyICAgICAgICBQU0YgICAgICAgICB5ZXMKLSAgICAyLjEuMyAgICAgICAgICAgMi4xLjIgICAgICAgMjAwMiAgICAgICAgUFNGICAgICAgICAgeWVzCi0gICAgMi4yIGFuZCBhYm92ZSAgIDIuMS4xICAgICAgIDIwMDEtbm93ICAgIFBTRiAgICAgICAgIHllcwotCi1Gb290bm90ZXM6Ci0KLSgxKSBHUEwtY29tcGF0aWJsZSBkb2Vzbid0IG1lYW4gdGhhdCB3ZSdyZSBkaXN0cmlidXRpbmcgUHl0aG9uIHVuZGVyCi0gICAgdGhlIEdQTC4gIEFsbCBQeXRob24gbGljZW5zZXMsIHVubGlrZSB0aGUgR1BMLCBsZXQgeW91IGRpc3RyaWJ1dGUKLSAgICBhIG1vZGlmaWVkIHZlcnNpb24gd2l0aG91dCBtYWtpbmcgeW91ciBjaGFuZ2VzIG9wZW4gc291cmNlLiAgVGhlCi0gICAgR1BMLWNvbXBhdGlibGUgbGljZW5zZXMgbWFrZSBpdCBwb3NzaWJsZSB0byBjb21iaW5lIFB5dGhvbiB3aXRoCi0gICAgb3RoZXIgc29mdHdhcmUgdGhhdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMOyB0aGUgb3RoZXJzIGRvbid0LgotCi0oMikgQWNjb3JkaW5nIHRvIFJpY2hhcmQgU3RhbGxtYW4sIDEuNi4xIGlzIG5vdCBHUEwtY29tcGF0aWJsZSwKLSAgICBiZWNhdXNlIGl0cyBsaWNlbnNlIGhhcyBhIGNob2ljZSBvZiBsYXcgY2xhdXNlLiAgQWNjb3JkaW5nIHRvCi0gICAgQ05SSSwgaG93ZXZlciwgU3RhbGxtYW4ncyBsYXd5ZXIgaGFzIHRvbGQgQ05SSSdzIGxhd3llciB0aGF0IDEuNi4xCi0gICAgaXMgIm5vdCBpbmNvbXBhdGlibGUiIHdpdGggdGhlIEdQTC4KLQotVGhhbmtzIHRvIHRoZSBtYW55IG91dHNpZGUgdm9sdW50ZWVycyB3aG8gaGF2ZSB3b3JrZWQgdW5kZXIgR3VpZG8ncwotZGlyZWN0aW9uIHRvIG1ha2UgdGhlc2UgcmVsZWFzZXMgcG9zc2libGUuCi0KLQotQi4gVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIEFDQ0VTU0lORyBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUFlUSE9OIFNPRlRXQVJFIEZPVU5EQVRJT04gTElDRU5TRSBWRVJTSU9OIDIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiB0aGUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KLSgiUFNGIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQKLW90aGVyd2lzZSB1c2luZyB0aGlzIHNvZnR3YXJlICgiUHl0aG9uIikgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZAotaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4KLQotMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgUFNGIGhlcmVieQotZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsCi1hbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsCi1kaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24gYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwKLXByb3ZpZGVkLCBob3dldmVyLCB0aGF0IFBTRidzIExpY2Vuc2UgQWdyZWVtZW50IGFuZCBQU0YncyBub3RpY2Ugb2YgY29weXJpZ2h0LAotaS5lLiwgIkNvcHlyaWdodCAoYykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwKLTIwMTEsIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUsIDIwMTYgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb247IEFsbCBSaWdodHMKLVJlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4gUHl0aG9uIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkKLUxpY2Vuc2VlLgotCi0zLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbgotb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZQotdGhlIGRlcml2YXRpdmUgd29yayBhdmFpbGFibGUgdG8gb3RoZXJzIGFzIHByb3ZpZGVkIGhlcmVpbiwgdGhlbgotTGljZW5zZWUgaGVyZWJ5IGFncmVlcyB0byBpbmNsdWRlIGluIGFueSBzdWNoIHdvcmsgYSBicmllZiBzdW1tYXJ5IG9mCi10aGUgY2hhbmdlcyBtYWRlIHRvIFB5dGhvbi4KLQotNC4gUFNGIGlzIG1ha2luZyBQeXRob24gYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKLWJhc2lzLiAgUFNGIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCi1JTVBMSUVELiAgQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgUFNGIE1BS0VTIE5PIEFORAotRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUwotRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFBZVEhPTiBXSUxMIE5PVAotSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KLQotNS4gUFNGIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTgotRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUyBBUwotQSBSRVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT04sCi1PUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCi0KLTYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwKLWJyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCi0KLTcuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueQotcmVsYXRpb25zaGlwIG9mIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiBQU0YgYW5kCi1MaWNlbnNlZS4gIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgUFNGCi10cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWUgaW4gYSB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlCi1wcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkIHBhcnR5LgotCi04LiBCeSBjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBQeXRob24sIExpY2Vuc2VlCi1hZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZQotQWdyZWVtZW50LgotCi0KLUJFT1BFTi5DT00gTElDRU5TRSBBR1JFRU1FTlQgRk9SIFBZVEhPTiAyLjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQkVPUEVOIFBZVEhPTiBPUEVOIFNPVVJDRSBMSUNFTlNFIEFHUkVFTUVOVCBWRVJTSU9OIDEKLQotMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIEJlT3Blbi5jb20gKCJCZU9wZW4iKSwgaGF2aW5nIGFuCi1vZmZpY2UgYXQgMTYwIFNhcmF0b2dhIEF2ZW51ZSwgU2FudGEgQ2xhcmEsIENBIDk1MDUxLCBhbmQgdGhlCi1JbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbiAoIkxpY2Vuc2VlIikgYWNjZXNzaW5nIGFuZCBvdGhlcndpc2UgdXNpbmcKLXRoaXMgc29mdHdhcmUgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZAotZG9jdW1lbnRhdGlvbiAoInRoZSBTb2Z0d2FyZSIpLgotCi0yLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEJlT3BlbiBQeXRob24gTGljZW5zZQotQWdyZWVtZW50LCBCZU9wZW4gaGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbi1leGNsdXNpdmUsCi1yb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0KLWFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsIGRpc3RyaWJ1dGUsIGFuZAotb3RoZXJ3aXNlIHVzZSB0aGUgU29mdHdhcmUgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwKLXByb3ZpZGVkLCBob3dldmVyLCB0aGF0IHRoZSBCZU9wZW4gUHl0aG9uIExpY2Vuc2UgaXMgcmV0YWluZWQgaW4gdGhlCi1Tb2Z0d2FyZSwgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS4KLQotMy4gQmVPcGVuIGlzIG1ha2luZyB0aGUgU29mdHdhcmUgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKLWJhc2lzLiAgQkVPUEVOIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCi1JTVBMSUVELiAgQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQkVPUEVOIE1BS0VTIE5PIEFORAotRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUwotRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIE5PVAotSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KLQotNC4gQkVPUEVOIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFRIRQotU09GVFdBUkUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUwotQVMgQSBSRVNVTFQgT0YgVVNJTkcsIE1PRElGWUlORyBPUiBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFLCBPUiBBTlkKLURFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgotCi01LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsCi1icmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgotCi02LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBpbnRlcnByZXRlZCBpbiBhbGwKLXJlc3BlY3RzIGJ5IHRoZSBsYXcgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2x1ZGluZyBjb25mbGljdCBvZgotbGF3IHByb3Zpc2lvbnMuICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvCi1jcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlCi1iZXR3ZWVuIEJlT3BlbiBhbmQgTGljZW5zZWUuICBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50Ci1wZXJtaXNzaW9uIHRvIHVzZSBCZU9wZW4gdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBpbiBhIHRyYWRlbWFyawotc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkKLXRoaXJkIHBhcnR5LiAgQXMgYW4gZXhjZXB0aW9uLCB0aGUgIkJlT3BlbiBQeXRob24iIGxvZ29zIGF2YWlsYWJsZSBhdAotaHR0cDovL3d3dy5weXRob25sYWJzLmNvbS9sb2dvcy5odG1sIG1heSBiZSB1c2VkIGFjY29yZGluZyB0byB0aGUKLXBlcm1pc3Npb25zIGdyYW50ZWQgb24gdGhhdCB3ZWIgcGFnZS4KLQotNy4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIHNvZnR3YXJlLCBMaWNlbnNlZQotYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKLUFncmVlbWVudC4KLQotCi1DTlJJIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMS42LjEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0xLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbAotUmVzZWFyY2ggSW5pdGlhdGl2ZXMsIGhhdmluZyBhbiBvZmZpY2UgYXQgMTg5NSBQcmVzdG9uIFdoaXRlIERyaXZlLAotUmVzdG9uLCBWQSAyMDE5MSAoIkNOUkkiKSwgYW5kIHRoZSBJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbgotKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiAxLjYuMSBzb2Z0d2FyZSBpbgotc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLgotCi0yLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBDTlJJCi1oZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUKLWxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LAotcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24gMS42LjEKLWFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IENOUkkncwotTGljZW5zZSBBZ3JlZW1lbnQgYW5kIENOUkkncyBub3RpY2Ugb2YgY29weXJpZ2h0LCBpLmUuLCAiQ29weXJpZ2h0IChjKQotMTk5NS0yMDAxIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlczsgQWxsIFJpZ2h0cwotUmVzZXJ2ZWQiIGFyZSByZXRhaW5lZCBpbiBQeXRob24gMS42LjEgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUKLXZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuICBBbHRlcm5hdGVseSwgaW4gbGlldSBvZiBDTlJJJ3MgTGljZW5zZQotQWdyZWVtZW50LCBMaWNlbnNlZSBtYXkgc3Vic3RpdHV0ZSB0aGUgZm9sbG93aW5nIHRleHQgKG9taXR0aW5nIHRoZQotcXVvdGVzKTogIlB5dGhvbiAxLjYuMSBpcyBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQKLWNvbmRpdGlvbnMgaW4gQ05SSSdzIExpY2Vuc2UgQWdyZWVtZW50LiAgVGhpcyBBZ3JlZW1lbnQgdG9nZXRoZXIgd2l0aAotUHl0aG9uIDEuNi4xIG1heSBiZSBsb2NhdGVkIG9uIHRoZSBJbnRlcm5ldCB1c2luZyB0aGUgZm9sbG93aW5nCi11bmlxdWUsIHBlcnNpc3RlbnQgaWRlbnRpZmllciAoa25vd24gYXMgYSBoYW5kbGUpOiAxODk1LjIyLzEwMTMuICBUaGlzCi1BZ3JlZW1lbnQgbWF5IGFsc28gYmUgb2J0YWluZWQgZnJvbSBhIHByb3h5IHNlcnZlciBvbiB0aGUgSW50ZXJuZXQKLXVzaW5nIHRoZSBmb2xsb3dpbmcgVVJMOiBodHRwOi8vaGRsLmhhbmRsZS5uZXQvMTg5NS4yMi8xMDEzIi4KLQotMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24KLW9yIGluY29ycG9yYXRlcyBQeXRob24gMS42LjEgb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UKLXRoZSBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4KLUxpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZgotdGhlIGNoYW5nZXMgbWFkZSB0byBQeXRob24gMS42LjEuCi0KLTQuIENOUkkgaXMgbWFraW5nIFB5dGhvbiAxLjYuMSBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgotYmFzaXMuICBDTlJJIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCi1JTVBMSUVELiAgQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQ05SSSBNQUtFUyBOTyBBTkQKLURJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKLUZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBQWVRIT04gMS42LjEgV0lMTCBOT1QKLUlORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuCi0KLTUuIENOUkkgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgUFlUSE9OCi0xLjYuMSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTCi1BIFJFU1VMVCBPRiBNT0RJRllJTkcsIERJU1RSSUJVVElORywgT1IgT1RIRVJXSVNFIFVTSU5HIFBZVEhPTiAxLjYuMSwKLU9SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KLQotNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbAotYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KLQotNy4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgZmVkZXJhbAotaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhdyBvZiB0aGUgVW5pdGVkIFN0YXRlcywgaW5jbHVkaW5nIHdpdGhvdXQKLWxpbWl0YXRpb24gdGhlIGZlZGVyYWwgY29weXJpZ2h0IGxhdywgYW5kLCB0byB0aGUgZXh0ZW50IHN1Y2gKLVUuUy4gZmVkZXJhbCBsYXcgZG9lcyBub3QgYXBwbHksIGJ5IHRoZSBsYXcgb2YgdGhlIENvbW1vbndlYWx0aCBvZgotVmlyZ2luaWEsIGV4Y2x1ZGluZyBWaXJnaW5pYSdzIGNvbmZsaWN0IG9mIGxhdyBwcm92aXNpb25zLgotTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHdpdGggcmVnYXJkIHRvIGRlcml2YXRpdmUgd29ya3MgYmFzZWQKLW9uIFB5dGhvbiAxLjYuMSB0aGF0IGluY29ycG9yYXRlIG5vbi1zZXBhcmFibGUgbWF0ZXJpYWwgdGhhdCB3YXMKLXByZXZpb3VzbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB0aGUKLWxhdyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIFZpcmdpbmlhIHNoYWxsIGdvdmVybiB0aGlzIExpY2Vuc2UKLUFncmVlbWVudCBvbmx5IGFzIHRvIGlzc3VlcyBhcmlzaW5nIHVuZGVyIG9yIHdpdGggcmVzcGVjdCB0bwotUGFyYWdyYXBocyA0LCA1LCBhbmQgNyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiAgTm90aGluZyBpbiB0aGlzCi1MaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YKLWFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiBDTlJJIGFuZCBMaWNlbnNlZS4gIFRoaXMKLUxpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIENOUkkgdHJhZGVtYXJrcyBvcgotdHJhZGUgbmFtZSBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgb3IKLXNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuCi0KLTguIEJ5IGNsaWNraW5nIG9uIHRoZSAiQUNDRVBUIiBidXR0b24gd2hlcmUgaW5kaWNhdGVkLCBvciBieSBjb3B5aW5nLAotaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUHl0aG9uIDEuNi4xLCBMaWNlbnNlZSBhZ3JlZXMgdG8gYmUKLWJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgotCi0gICAgICAgIEFDQ0VQVAotCi0KLUNXSSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDAuOS4wIFRIUk9VR0ggMS4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Db3B5cmlnaHQgKGMpIDE5OTEgLSAxOTk1LCBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0gQW1zdGVyZGFtLAotVGhlIE5ldGhlcmxhbmRzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCi1wcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Ci1ib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLXN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KLWRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgotcGVybWlzc2lvbi4KLQotU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTwotVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAotRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEJFIExJQUJMRQotRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLVdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLU9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS96aXBmaWxlL1JFQURNRS5jaHJvbWl1bSBiL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3ppcGZpbGUvUkVBRE1FLmNocm9taXVtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDVkM2NmLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL2NhdGFwdWx0L3RoaXJkX3BhcnR5L3ppcGZpbGUvUkVBRE1FLmNocm9taXVtCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotTmFtZTogUHl0aG9uIHppcGZpbGUgbW9kdWxlCi1TaG9ydCBOYW1lOiB6aXBmaWxlCi1VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRob24vY3B5dGhvbi9ibG9iL21hc3Rlci9MaWIvemlwZmlsZS5weQotVmVyc2lvbjogMi43LjEzCi1MaWNlbnNlOiBQeXRob24KLUxpY2Vuc2UgRmlsZTogTk9UX1NISVBQRUQKLVNlY3VyaXR5IENyaXRpY2FsOiBubwotCi1EZXNjcmlwdGlvbjoKLVRoaXMgaXMgYSBjb3B5IG9mIHRoZSB6aXBmaWxlIG1vZHVsZSBmcm9tIFB5dGhvbiAyLjcuMTMuIFRoaXMgc25hcHNob3Qgd2FzCi10YWtlbiB0byB3b3JrYXJvdW5kIGEgYnVnIGluIG9sZGVyIFB5dGhvbiB2ZXJzaW9ucyBzdWNoIGFzIDIuNy4zLiBTZWUKLTxodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTY5NzI+IGFuZCBzcGVjaWZpY2FsbHkgdGhlIGZpeCBhdAotPGh0dHBzOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL3Jldi8wYzVmYTM1YzlmMTIjbDMuMTE+LgotCi1Mb2NhbCBNb2RpZmljYXRpb25zOgotUmVuYW1lZCB6aXBmaWxlLnB5IHRvIHppcGZpbGVfMl83XzEzLnB5IHRvIGF2b2lkIGNvbmZsaWN0aW5nIHdpdGggc3lzdGVtIGNvcHkuCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS96aXBmaWxlL3ppcGZpbGVfMl83XzEzLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvdGhpcmRfcGFydHkvemlwZmlsZS96aXBmaWxlXzJfN18xMy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQxMDY1MC4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC90aGlyZF9wYXJ0eS96aXBmaWxlL3ppcGZpbGVfMl83XzEzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTU0MyArMCwwIEBACi0iIiIKLVJlYWQgYW5kIHdyaXRlIFpJUCBmaWxlcy4KLSIiIgotaW1wb3J0IHN0cnVjdCwgb3MsIHRpbWUsIHN5cywgc2h1dGlsCi1pbXBvcnQgYmluYXNjaWksIGNTdHJpbmdJTywgc3RhdAotaW1wb3J0IGlvCi1pbXBvcnQgcmUKLWltcG9ydCBzdHJpbmcKLQotdHJ5OgotICAgIGltcG9ydCB6bGliICMgV2UgbWF5IG5lZWQgaXRzIGNvbXByZXNzaW9uIG1ldGhvZAotICAgIGNyYzMyID0gemxpYi5jcmMzMgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHpsaWIgPSBOb25lCi0gICAgY3JjMzIgPSBiaW5hc2NpaS5jcmMzMgotCi1fX2FsbF9fID0gWyJCYWRaaXBmaWxlIiwgImVycm9yIiwgIlpJUF9TVE9SRUQiLCAiWklQX0RFRkxBVEVEIiwgImlzX3ppcGZpbGUiLAotICAgICAgICAgICAiWmlwSW5mbyIsICJaaXBGaWxlIiwgIlB5WmlwRmlsZSIsICJMYXJnZVppcEZpbGUiIF0KLQotY2xhc3MgQmFkWmlwZmlsZShFeGNlcHRpb24pOgotICAgIHBhc3MKLQotCi1jbGFzcyBMYXJnZVppcEZpbGUoRXhjZXB0aW9uKToKLSAgICAiIiIKLSAgICBSYWlzZWQgd2hlbiB3cml0aW5nIGEgemlwZmlsZSwgdGhlIHppcGZpbGUgcmVxdWlyZXMgWklQNjQgZXh0ZW5zaW9ucwotICAgIGFuZCB0aG9zZSBleHRlbnNpb25zIGFyZSBkaXNhYmxlZC4KLSAgICAiIiIKLQotZXJyb3IgPSBCYWRaaXBmaWxlICAgICAgIyBUaGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGlzIG1vZHVsZQotCi1aSVA2NF9MSU1JVCA9ICgxIDw8IDMxKSAtIDEKLVpJUF9GSUxFQ09VTlRfTElNSVQgPSAoMSA8PCAxNikgLSAxCi1aSVBfTUFYX0NPTU1FTlQgPSAoMSA8PCAxNikgLSAxCi0KLSMgY29uc3RhbnRzIGZvciBaaXAgZmlsZSBjb21wcmVzc2lvbiBtZXRob2RzCi1aSVBfU1RPUkVEID0gMAotWklQX0RFRkxBVEVEID0gOAotIyBPdGhlciBaSVAgY29tcHJlc3Npb24gbWV0aG9kcyBub3Qgc3VwcG9ydGVkCi0KLSMgQmVsb3cgYXJlIHNvbWUgZm9ybWF0cyBhbmQgYXNzb2NpYXRlZCBkYXRhIGZvciByZWFkaW5nL3dyaXRpbmcgaGVhZGVycyB1c2luZwotIyB0aGUgc3RydWN0IG1vZHVsZS4gIFRoZSBuYW1lcyBhbmQgc3RydWN0dXJlcyBvZiBoZWFkZXJzL3JlY29yZHMgYXJlIHRob3NlIHVzZWQKLSMgaW4gdGhlIFBLV0FSRSBkZXNjcmlwdGlvbiBvZiB0aGUgWklQIGZpbGUgZm9ybWF0OgotIyAgICAgaHR0cDovL3d3dy5wa3dhcmUuY29tL2RvY3VtZW50cy9jYXNlc3R1ZGllcy9BUFBOT1RFLlRYVAotIyAoVVJMIHZhbGlkIGFzIG9mIEphbnVhcnkgMjAwOCkKLQotIyBUaGUgImVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIgc3RydWN0dXJlLCBtYWdpYyBudW1iZXIsIHNpemUsIGFuZCBpbmRpY2VzCi0jIChzZWN0aW9uIFYuSSBpbiB0aGUgZm9ybWF0IGRvY3VtZW50KQotc3RydWN0RW5kQXJjaGl2ZSA9ICI8NHM0SDJMSCIKLXN0cmluZ0VuZEFyY2hpdmUgPSAiUEtcMDA1XDAwNiIKLXNpemVFbmRDZW50RGlyID0gc3RydWN0LmNhbGNzaXplKHN0cnVjdEVuZEFyY2hpdmUpCi0KLV9FQ0RfU0lHTkFUVVJFID0gMAotX0VDRF9ESVNLX05VTUJFUiA9IDEKLV9FQ0RfRElTS19TVEFSVCA9IDIKLV9FQ0RfRU5UUklFU19USElTX0RJU0sgPSAzCi1fRUNEX0VOVFJJRVNfVE9UQUwgPSA0Ci1fRUNEX1NJWkUgPSA1Ci1fRUNEX09GRlNFVCA9IDYKLV9FQ0RfQ09NTUVOVF9TSVpFID0gNwotIyBUaGVzZSBsYXN0IHR3byBpbmRpY2VzIGFyZSBub3QgcGFydCBvZiB0aGUgc3RydWN0dXJlIGFzIGRlZmluZWQgaW4gdGhlCi0jIHNwZWMsIGJ1dCB0aGV5IGFyZSB1c2VkIGludGVybmFsbHkgYnkgdGhpcyBtb2R1bGUgYXMgYSBjb252ZW5pZW5jZQotX0VDRF9DT01NRU5UID0gOAotX0VDRF9MT0NBVElPTiA9IDkKLQotIyBUaGUgImNlbnRyYWwgZGlyZWN0b3J5IiBzdHJ1Y3R1cmUsIG1hZ2ljIG51bWJlciwgc2l6ZSwgYW5kIGluZGljZXMKLSMgb2YgZW50cmllcyBpbiB0aGUgc3RydWN0dXJlIChzZWN0aW9uIFYuRiBpbiB0aGUgZm9ybWF0IGRvY3VtZW50KQotc3RydWN0Q2VudHJhbERpciA9ICI8NHM0QjRITDJMNUgyTCIKLXN0cmluZ0NlbnRyYWxEaXIgPSAiUEtcMDAxXDAwMiIKLXNpemVDZW50cmFsRGlyID0gc3RydWN0LmNhbGNzaXplKHN0cnVjdENlbnRyYWxEaXIpCi0KLSMgaW5kZXhlcyBvZiBlbnRyaWVzIGluIHRoZSBjZW50cmFsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKLV9DRF9TSUdOQVRVUkUgPSAwCi1fQ0RfQ1JFQVRFX1ZFUlNJT04gPSAxCi1fQ0RfQ1JFQVRFX1NZU1RFTSA9IDIKLV9DRF9FWFRSQUNUX1ZFUlNJT04gPSAzCi1fQ0RfRVhUUkFDVF9TWVNURU0gPSA0Ci1fQ0RfRkxBR19CSVRTID0gNQotX0NEX0NPTVBSRVNTX1RZUEUgPSA2Ci1fQ0RfVElNRSA9IDcKLV9DRF9EQVRFID0gOAotX0NEX0NSQyA9IDkKLV9DRF9DT01QUkVTU0VEX1NJWkUgPSAxMAotX0NEX1VOQ09NUFJFU1NFRF9TSVpFID0gMTEKLV9DRF9GSUxFTkFNRV9MRU5HVEggPSAxMgotX0NEX0VYVFJBX0ZJRUxEX0xFTkdUSCA9IDEzCi1fQ0RfQ09NTUVOVF9MRU5HVEggPSAxNAotX0NEX0RJU0tfTlVNQkVSX1NUQVJUID0gMTUKLV9DRF9JTlRFUk5BTF9GSUxFX0FUVFJJQlVURVMgPSAxNgotX0NEX0VYVEVSTkFMX0ZJTEVfQVRUUklCVVRFUyA9IDE3Ci1fQ0RfTE9DQUxfSEVBREVSX09GRlNFVCA9IDE4Ci0KLSMgVGhlICJsb2NhbCBmaWxlIGhlYWRlciIgc3RydWN0dXJlLCBtYWdpYyBudW1iZXIsIHNpemUsIGFuZCBpbmRpY2VzCi0jIChzZWN0aW9uIFYuQSBpbiB0aGUgZm9ybWF0IGRvY3VtZW50KQotc3RydWN0RmlsZUhlYWRlciA9ICI8NHMyQjRITDJMMkgiCi1zdHJpbmdGaWxlSGVhZGVyID0gIlBLXDAwM1wwMDQiCi1zaXplRmlsZUhlYWRlciA9IHN0cnVjdC5jYWxjc2l6ZShzdHJ1Y3RGaWxlSGVhZGVyKQotCi1fRkhfU0lHTkFUVVJFID0gMAotX0ZIX0VYVFJBQ1RfVkVSU0lPTiA9IDEKLV9GSF9FWFRSQUNUX1NZU1RFTSA9IDIKLV9GSF9HRU5FUkFMX1BVUlBPU0VfRkxBR19CSVRTID0gMwotX0ZIX0NPTVBSRVNTSU9OX01FVEhPRCA9IDQKLV9GSF9MQVNUX01PRF9USU1FID0gNQotX0ZIX0xBU1RfTU9EX0RBVEUgPSA2Ci1fRkhfQ1JDID0gNwotX0ZIX0NPTVBSRVNTRURfU0laRSA9IDgKLV9GSF9VTkNPTVBSRVNTRURfU0laRSA9IDkKLV9GSF9GSUxFTkFNRV9MRU5HVEggPSAxMAotX0ZIX0VYVFJBX0ZJRUxEX0xFTkdUSCA9IDExCi0KLSMgVGhlICJaaXA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvciIgc3RydWN0dXJlLCBtYWdpYyBudW1iZXIsIGFuZCBzaXplCi1zdHJ1Y3RFbmRBcmNoaXZlNjRMb2NhdG9yID0gIjw0c0xRTCIKLXN0cmluZ0VuZEFyY2hpdmU2NExvY2F0b3IgPSAiUEtceDA2XHgwNyIKLXNpemVFbmRDZW50RGlyNjRMb2NhdG9yID0gc3RydWN0LmNhbGNzaXplKHN0cnVjdEVuZEFyY2hpdmU2NExvY2F0b3IpCi0KLSMgVGhlICJaaXA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkiIHJlY29yZCwgbWFnaWMgbnVtYmVyLCBzaXplLCBhbmQgaW5kaWNlcwotIyAoc2VjdGlvbiBWLkcgaW4gdGhlIGZvcm1hdCBkb2N1bWVudCkKLXN0cnVjdEVuZEFyY2hpdmU2NCA9ICI8NHNRMkgyTDRRIgotc3RyaW5nRW5kQXJjaGl2ZTY0ID0gIlBLXHgwNlx4MDYiCi1zaXplRW5kQ2VudERpcjY0ID0gc3RydWN0LmNhbGNzaXplKHN0cnVjdEVuZEFyY2hpdmU2NCkKLQotX0NENjRfU0lHTkFUVVJFID0gMAotX0NENjRfRElSRUNUT1JZX1JFQ1NJWkUgPSAxCi1fQ0Q2NF9DUkVBVEVfVkVSU0lPTiA9IDIKLV9DRDY0X0VYVFJBQ1RfVkVSU0lPTiA9IDMKLV9DRDY0X0RJU0tfTlVNQkVSID0gNAotX0NENjRfRElTS19OVU1CRVJfU1RBUlQgPSA1Ci1fQ0Q2NF9OVU1CRVJfRU5UUklFU19USElTX0RJU0sgPSA2Ci1fQ0Q2NF9OVU1CRVJfRU5UUklFU19UT1RBTCA9IDcKLV9DRDY0X0RJUkVDVE9SWV9TSVpFID0gOAotX0NENjRfT0ZGU0VUX1NUQVJUX0NFTlRESVIgPSA5Ci0KLWRlZiBfY2hlY2tfemlwZmlsZShmcCk6Ci0gICAgdHJ5OgotICAgICAgICBpZiBfRW5kUmVjRGF0YShmcCk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZSAgICAgICAgICMgZmlsZSBoYXMgY29ycmVjdCBtYWdpYyBudW1iZXIKLSAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgcGFzcwotICAgIHJldHVybiBGYWxzZQotCi1kZWYgaXNfemlwZmlsZShmaWxlbmFtZSk6Ci0gICAgIiIiUXVpY2tseSBzZWUgaWYgYSBmaWxlIGlzIGEgWklQIGZpbGUgYnkgY2hlY2tpbmcgdGhlIG1hZ2ljIG51bWJlci4KLQotICAgIFRoZSBmaWxlbmFtZSBhcmd1bWVudCBtYXkgYmUgYSBmaWxlIG9yIGZpbGUtbGlrZSBvYmplY3QgdG9vLgotICAgICIiIgotICAgIHJlc3VsdCA9IEZhbHNlCi0gICAgdHJ5OgotICAgICAgICBpZiBoYXNhdHRyKGZpbGVuYW1lLCAicmVhZCIpOgotICAgICAgICAgICAgcmVzdWx0ID0gX2NoZWNrX3ppcGZpbGUoZnA9ZmlsZW5hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jaGVja196aXBmaWxlKGZwKQotICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICBwYXNzCi0gICAgcmV0dXJuIHJlc3VsdAotCi1kZWYgX0VuZFJlY0RhdGE2NChmcGluLCBvZmZzZXQsIGVuZHJlYyk6Ci0gICAgIiIiCi0gICAgUmVhZCB0aGUgWklQNjQgZW5kLW9mLWFyY2hpdmUgcmVjb3JkcyBhbmQgdXNlIHRoYXQgdG8gdXBkYXRlIGVuZHJlYwotICAgICIiIgotICAgIHRyeToKLSAgICAgICAgZnBpbi5zZWVrKG9mZnNldCAtIHNpemVFbmRDZW50RGlyNjRMb2NhdG9yLCAyKQotICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAjIElmIHRoZSBzZWVrIGZhaWxzLCB0aGUgZmlsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gYSBaSVA2NAotICAgICAgICAjIGVuZC1vZi1hcmNoaXZlIHJlY29yZCwgc28ganVzdCByZXR1cm4gdGhlIGVuZCByZWNvcmQgd2Ugd2VyZSBnaXZlbi4KLSAgICAgICAgcmV0dXJuIGVuZHJlYwotCi0gICAgZGF0YSA9IGZwaW4ucmVhZChzaXplRW5kQ2VudERpcjY0TG9jYXRvcikKLSAgICBpZiBsZW4oZGF0YSkgIT0gc2l6ZUVuZENlbnREaXI2NExvY2F0b3I6Ci0gICAgICAgIHJldHVybiBlbmRyZWMKLSAgICBzaWcsIGRpc2tubywgcmVsb2ZmLCBkaXNrcyA9IHN0cnVjdC51bnBhY2soc3RydWN0RW5kQXJjaGl2ZTY0TG9jYXRvciwgZGF0YSkKLSAgICBpZiBzaWcgIT0gc3RyaW5nRW5kQXJjaGl2ZTY0TG9jYXRvcjoKLSAgICAgICAgcmV0dXJuIGVuZHJlYwotCi0gICAgaWYgZGlza25vICE9IDAgb3IgZGlza3MgIT0gMToKLSAgICAgICAgcmFpc2UgQmFkWmlwZmlsZSgiemlwZmlsZXMgdGhhdCBzcGFuIG11bHRpcGxlIGRpc2tzIGFyZSBub3Qgc3VwcG9ydGVkIikKLQotICAgICMgQXNzdW1lIG5vICd6aXA2NCBleHRlbnNpYmxlIGRhdGEnCi0gICAgZnBpbi5zZWVrKG9mZnNldCAtIHNpemVFbmRDZW50RGlyNjRMb2NhdG9yIC0gc2l6ZUVuZENlbnREaXI2NCwgMikKLSAgICBkYXRhID0gZnBpbi5yZWFkKHNpemVFbmRDZW50RGlyNjQpCi0gICAgaWYgbGVuKGRhdGEpICE9IHNpemVFbmRDZW50RGlyNjQ6Ci0gICAgICAgIHJldHVybiBlbmRyZWMKLSAgICBzaWcsIHN6LCBjcmVhdGVfdmVyc2lvbiwgcmVhZF92ZXJzaW9uLCBkaXNrX251bSwgZGlza19kaXIsIFwKLSAgICAgICAgICAgIGRpcmNvdW50LCBkaXJjb3VudDIsIGRpcnNpemUsIGRpcm9mZnNldCA9IFwKLSAgICAgICAgICAgIHN0cnVjdC51bnBhY2soc3RydWN0RW5kQXJjaGl2ZTY0LCBkYXRhKQotICAgIGlmIHNpZyAhPSBzdHJpbmdFbmRBcmNoaXZlNjQ6Ci0gICAgICAgIHJldHVybiBlbmRyZWMKLQotICAgICMgVXBkYXRlIHRoZSBvcmlnaW5hbCBlbmRyZWMgdXNpbmcgZGF0YSBmcm9tIHRoZSBaSVA2NCByZWNvcmQKLSAgICBlbmRyZWNbX0VDRF9TSUdOQVRVUkVdID0gc2lnCi0gICAgZW5kcmVjW19FQ0RfRElTS19OVU1CRVJdID0gZGlza19udW0KLSAgICBlbmRyZWNbX0VDRF9ESVNLX1NUQVJUXSA9IGRpc2tfZGlyCi0gICAgZW5kcmVjW19FQ0RfRU5UUklFU19USElTX0RJU0tdID0gZGlyY291bnQKLSAgICBlbmRyZWNbX0VDRF9FTlRSSUVTX1RPVEFMXSA9IGRpcmNvdW50MgotICAgIGVuZHJlY1tfRUNEX1NJWkVdID0gZGlyc2l6ZQotICAgIGVuZHJlY1tfRUNEX09GRlNFVF0gPSBkaXJvZmZzZXQKLSAgICByZXR1cm4gZW5kcmVjCi0KLQotZGVmIF9FbmRSZWNEYXRhKGZwaW4pOgotICAgICIiIlJldHVybiBkYXRhIGZyb20gdGhlICJFbmQgb2YgQ2VudHJhbCBEaXJlY3RvcnkiIHJlY29yZCwgb3IgTm9uZS4KLQotICAgIFRoZSBkYXRhIGlzIGEgbGlzdCBvZiB0aGUgbmluZSBpdGVtcyBpbiB0aGUgWklQICJFbmQgb2YgY2VudHJhbCBkaXIiCi0gICAgcmVjb3JkIGZvbGxvd2VkIGJ5IGEgdGVudGggaXRlbSwgdGhlIGZpbGUgc2VlayBvZmZzZXQgb2YgdGhpcyByZWNvcmQuIiIiCi0KLSAgICAjIERldGVybWluZSBmaWxlIHNpemUKLSAgICBmcGluLnNlZWsoMCwgMikKLSAgICBmaWxlc2l6ZSA9IGZwaW4udGVsbCgpCi0KLSAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIFpJUCBmaWxlIHdpdGggbm8gYXJjaGl2ZSBjb21tZW50ICh0aGUKLSAgICAjICJlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkiIHN0cnVjdHVyZSBzaG91bGQgYmUgdGhlIGxhc3QgaXRlbSBpbiB0aGUKLSAgICAjIGZpbGUgaWYgdGhpcyBpcyB0aGUgY2FzZSkuCi0gICAgdHJ5OgotICAgICAgICBmcGluLnNlZWsoLXNpemVFbmRDZW50RGlyLCAyKQotICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICByZXR1cm4gTm9uZQotICAgIGRhdGEgPSBmcGluLnJlYWQoKQotICAgIGlmIChsZW4oZGF0YSkgPT0gc2l6ZUVuZENlbnREaXIgYW5kCi0gICAgICAgIGRhdGFbMDo0XSA9PSBzdHJpbmdFbmRBcmNoaXZlIGFuZAotICAgICAgICBkYXRhWy0yOl0gPT0gYiJcMDAwXDAwMCIpOgotICAgICAgICAjIHRoZSBzaWduYXR1cmUgaXMgY29ycmVjdCBhbmQgdGhlcmUncyBubyBjb21tZW50LCB1bnBhY2sgc3RydWN0dXJlCi0gICAgICAgIGVuZHJlYyA9IHN0cnVjdC51bnBhY2soc3RydWN0RW5kQXJjaGl2ZSwgZGF0YSkKLSAgICAgICAgZW5kcmVjPWxpc3QoZW5kcmVjKQotCi0gICAgICAgICMgQXBwZW5kIGEgYmxhbmsgY29tbWVudCBhbmQgcmVjb3JkIHN0YXJ0IG9mZnNldAotICAgICAgICBlbmRyZWMuYXBwZW5kKCIiKQotICAgICAgICBlbmRyZWMuYXBwZW5kKGZpbGVzaXplIC0gc2l6ZUVuZENlbnREaXIpCi0KLSAgICAgICAgIyBUcnkgdG8gcmVhZCB0aGUgIlppcDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIgc3RydWN0dXJlCi0gICAgICAgIHJldHVybiBfRW5kUmVjRGF0YTY0KGZwaW4sIC1zaXplRW5kQ2VudERpciwgZW5kcmVjKQotCi0gICAgIyBFaXRoZXIgdGhpcyBpcyBub3QgYSBaSVAgZmlsZSwgb3IgaXQgaXMgYSBaSVAgZmlsZSB3aXRoIGFuIGFyY2hpdmUKLSAgICAjIGNvbW1lbnQuICBTZWFyY2ggdGhlIGVuZCBvZiB0aGUgZmlsZSBmb3IgdGhlICJlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkiCi0gICAgIyByZWNvcmQgc2lnbmF0dXJlLiBUaGUgY29tbWVudCBpcyB0aGUgbGFzdCBpdGVtIGluIHRoZSBaSVAgZmlsZSBhbmQgbWF5IGJlCi0gICAgIyB1cCB0byA2NEsgbG9uZy4gIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgImVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIgbWFnaWMKLSAgICAjIG51bWJlciBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGNvbW1lbnQuCi0gICAgbWF4Q29tbWVudFN0YXJ0ID0gbWF4KGZpbGVzaXplIC0gKDEgPDwgMTYpIC0gc2l6ZUVuZENlbnREaXIsIDApCi0gICAgZnBpbi5zZWVrKG1heENvbW1lbnRTdGFydCwgMCkKLSAgICBkYXRhID0gZnBpbi5yZWFkKCkKLSAgICBzdGFydCA9IGRhdGEucmZpbmQoc3RyaW5nRW5kQXJjaGl2ZSkKLSAgICBpZiBzdGFydCA+PSAwOgotICAgICAgICAjIGZvdW5kIHRoZSBtYWdpYyBudW1iZXI7IGF0dGVtcHQgdG8gdW5wYWNrIGFuZCBpbnRlcnByZXQKLSAgICAgICAgcmVjRGF0YSA9IGRhdGFbc3RhcnQ6c3RhcnQrc2l6ZUVuZENlbnREaXJdCi0gICAgICAgIGlmIGxlbihyZWNEYXRhKSAhPSBzaXplRW5kQ2VudERpcjoKLSAgICAgICAgICAgICMgWmlwIGZpbGUgaXMgY29ycnVwdGVkLgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZW5kcmVjID0gbGlzdChzdHJ1Y3QudW5wYWNrKHN0cnVjdEVuZEFyY2hpdmUsIHJlY0RhdGEpKQotICAgICAgICBjb21tZW50U2l6ZSA9IGVuZHJlY1tfRUNEX0NPTU1FTlRfU0laRV0gI2FzIGNsYWltZWQgYnkgdGhlIHppcCBmaWxlCi0gICAgICAgIGNvbW1lbnQgPSBkYXRhW3N0YXJ0K3NpemVFbmRDZW50RGlyOnN0YXJ0K3NpemVFbmRDZW50RGlyK2NvbW1lbnRTaXplXQotICAgICAgICBlbmRyZWMuYXBwZW5kKGNvbW1lbnQpCi0gICAgICAgIGVuZHJlYy5hcHBlbmQobWF4Q29tbWVudFN0YXJ0ICsgc3RhcnQpCi0KLSAgICAgICAgIyBUcnkgdG8gcmVhZCB0aGUgIlppcDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIgc3RydWN0dXJlCi0gICAgICAgIHJldHVybiBfRW5kUmVjRGF0YTY0KGZwaW4sIG1heENvbW1lbnRTdGFydCArIHN0YXJ0IC0gZmlsZXNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHJlYykKLQotICAgICMgVW5hYmxlIHRvIGZpbmQgYSB2YWxpZCBlbmQgb2YgY2VudHJhbCBkaXJlY3Rvcnkgc3RydWN0dXJlCi0gICAgcmV0dXJuIE5vbmUKLQotCi1jbGFzcyBaaXBJbmZvIChvYmplY3QpOgotICAgICIiIkNsYXNzIHdpdGggYXR0cmlidXRlcyBkZXNjcmliaW5nIGVhY2ggZmlsZSBpbiB0aGUgWklQIGFyY2hpdmUuIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoCi0gICAgICAgICAgICAnb3JpZ19maWxlbmFtZScsCi0gICAgICAgICAgICAnZmlsZW5hbWUnLAotICAgICAgICAgICAgJ2RhdGVfdGltZScsCi0gICAgICAgICAgICAnY29tcHJlc3NfdHlwZScsCi0gICAgICAgICAgICAnY29tbWVudCcsCi0gICAgICAgICAgICAnZXh0cmEnLAotICAgICAgICAgICAgJ2NyZWF0ZV9zeXN0ZW0nLAotICAgICAgICAgICAgJ2NyZWF0ZV92ZXJzaW9uJywKLSAgICAgICAgICAgICdleHRyYWN0X3ZlcnNpb24nLAotICAgICAgICAgICAgJ3Jlc2VydmVkJywKLSAgICAgICAgICAgICdmbGFnX2JpdHMnLAotICAgICAgICAgICAgJ3ZvbHVtZScsCi0gICAgICAgICAgICAnaW50ZXJuYWxfYXR0cicsCi0gICAgICAgICAgICAnZXh0ZXJuYWxfYXR0cicsCi0gICAgICAgICAgICAnaGVhZGVyX29mZnNldCcsCi0gICAgICAgICAgICAnQ1JDJywKLSAgICAgICAgICAgICdjb21wcmVzc19zaXplJywKLSAgICAgICAgICAgICdmaWxlX3NpemUnLAotICAgICAgICAgICAgJ19yYXdfdGltZScsCi0gICAgICAgICkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZT0iTm9OYW1lIiwgZGF0ZV90aW1lPSgxOTgwLDEsMSwwLDAsMCkpOgotICAgICAgICBzZWxmLm9yaWdfZmlsZW5hbWUgPSBmaWxlbmFtZSAgICMgT3JpZ2luYWwgZmlsZSBuYW1lIGluIGFyY2hpdmUKLQotICAgICAgICAjIFRlcm1pbmF0ZSB0aGUgZmlsZSBuYW1lIGF0IHRoZSBmaXJzdCBudWxsIGJ5dGUuICBOdWxsIGJ5dGVzIGluIGZpbGUKLSAgICAgICAgIyBuYW1lcyBhcmUgdXNlZCBhcyB0cmlja3MgYnkgdmlydXNlcyBpbiBhcmNoaXZlcy4KLSAgICAgICAgbnVsbF9ieXRlID0gZmlsZW5hbWUuZmluZChjaHIoMCkpCi0gICAgICAgIGlmIG51bGxfYnl0ZSA+PSAwOgotICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZVswOm51bGxfYnl0ZV0KLSAgICAgICAgIyBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHBhdGhzIGluIGdlbmVyYXRlZCBaSVAgZmlsZXMgYWx3YXlzIHVzZQotICAgICAgICAjIGZvcndhcmQgc2xhc2hlcyBhcyB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvciwgYXMgcmVxdWlyZWQgYnkgdGhlCi0gICAgICAgICMgWklQIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgotICAgICAgICBpZiBvcy5zZXAgIT0gIi8iIGFuZCBvcy5zZXAgaW4gZmlsZW5hbWU6Ci0gICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2Uob3Muc2VwLCAiLyIpCi0KLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lICAgICAgICAjIE5vcm1hbGl6ZWQgZmlsZSBuYW1lCi0gICAgICAgIHNlbGYuZGF0ZV90aW1lID0gZGF0ZV90aW1lICAgICAgIyB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW4sIHNlYwotCi0gICAgICAgIGlmIGRhdGVfdGltZVswXSA8IDE5ODA6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdaSVAgZG9lcyBub3Qgc3VwcG9ydCB0aW1lc3RhbXBzIGJlZm9yZSAxOTgwJykKLQotICAgICAgICAjIFN0YW5kYXJkIHZhbHVlczoKLSAgICAgICAgc2VsZi5jb21wcmVzc190eXBlID0gWklQX1NUT1JFRCAjIFR5cGUgb2YgY29tcHJlc3Npb24gZm9yIHRoZSBmaWxlCi0gICAgICAgIHNlbGYuY29tbWVudCA9ICIiICAgICAgICAgICAgICAgIyBDb21tZW50IGZvciBlYWNoIGZpbGUKLSAgICAgICAgc2VsZi5leHRyYSA9ICIiICAgICAgICAgICAgICAgICAjIFpJUCBleHRyYSBkYXRhCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICAgICAgc2VsZi5jcmVhdGVfc3lzdGVtID0gMCAgICAgICAgICAjIFN5c3RlbSB3aGljaCBjcmVhdGVkIFpJUCBhcmNoaXZlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIEFzc3VtZSBldmVyeXRoaW5nIGVsc2UgaXMgdW5peC15Ci0gICAgICAgICAgICBzZWxmLmNyZWF0ZV9zeXN0ZW0gPSAzICAgICAgICAgICMgU3lzdGVtIHdoaWNoIGNyZWF0ZWQgWklQIGFyY2hpdmUKLSAgICAgICAgc2VsZi5jcmVhdGVfdmVyc2lvbiA9IDIwICAgICAgICAjIFZlcnNpb24gd2hpY2ggY3JlYXRlZCBaSVAgYXJjaGl2ZQotICAgICAgICBzZWxmLmV4dHJhY3RfdmVyc2lvbiA9IDIwICAgICAgICMgVmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdCBhcmNoaXZlCi0gICAgICAgIHNlbGYucmVzZXJ2ZWQgPSAwICAgICAgICAgICAgICAgIyBNdXN0IGJlIHplcm8KLSAgICAgICAgc2VsZi5mbGFnX2JpdHMgPSAwICAgICAgICAgICAgICAjIFpJUCBmbGFnIGJpdHMKLSAgICAgICAgc2VsZi52b2x1bWUgPSAwICAgICAgICAgICAgICAgICAjIFZvbHVtZSBudW1iZXIgb2YgZmlsZSBoZWFkZXIKLSAgICAgICAgc2VsZi5pbnRlcm5hbF9hdHRyID0gMCAgICAgICAgICAjIEludGVybmFsIGF0dHJpYnV0ZXMKLSAgICAgICAgc2VsZi5leHRlcm5hbF9hdHRyID0gMCAgICAgICAgICAjIEV4dGVybmFsIGZpbGUgYXR0cmlidXRlcwotICAgICAgICAjIE90aGVyIGF0dHJpYnV0ZXMgYXJlIHNldCBieSBjbGFzcyBaaXBGaWxlOgotICAgICAgICAjIGhlYWRlcl9vZmZzZXQgICAgICAgICBCeXRlIG9mZnNldCB0byB0aGUgZmlsZSBoZWFkZXIKLSAgICAgICAgIyBDUkMgICAgICAgICAgICAgICAgICAgQ1JDLTMyIG9mIHRoZSB1bmNvbXByZXNzZWQgZmlsZQotICAgICAgICAjIGNvbXByZXNzX3NpemUgICAgICAgICBTaXplIG9mIHRoZSBjb21wcmVzc2VkIGZpbGUKLSAgICAgICAgIyBmaWxlX3NpemUgICAgICAgICAgICAgU2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGZpbGUKLQotICAgIGRlZiBGaWxlSGVhZGVyKHNlbGYsIHppcDY0PU5vbmUpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHBlci1maWxlIGhlYWRlciBhcyBhIHN0cmluZy4iIiIKLSAgICAgICAgZHQgPSBzZWxmLmRhdGVfdGltZQotICAgICAgICBkb3NkYXRlID0gKGR0WzBdIC0gMTk4MCkgPDwgOSB8IGR0WzFdIDw8IDUgfCBkdFsyXQotICAgICAgICBkb3N0aW1lID0gZHRbM10gPDwgMTEgfCBkdFs0XSA8PCA1IHwgKGR0WzVdIC8vIDIpCi0gICAgICAgIGlmIHNlbGYuZmxhZ19iaXRzICYgMHgwODoKLSAgICAgICAgICAgICMgU2V0IHRoZXNlIHRvIHplcm8gYmVjYXVzZSB3ZSB3cml0ZSB0aGVtIGFmdGVyIHRoZSBmaWxlIGRhdGEKLSAgICAgICAgICAgIENSQyA9IGNvbXByZXNzX3NpemUgPSBmaWxlX3NpemUgPSAwCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBDUkMgPSBzZWxmLkNSQwotICAgICAgICAgICAgY29tcHJlc3Nfc2l6ZSA9IHNlbGYuY29tcHJlc3Nfc2l6ZQotICAgICAgICAgICAgZmlsZV9zaXplID0gc2VsZi5maWxlX3NpemUKLQotICAgICAgICBleHRyYSA9IHNlbGYuZXh0cmEKLQotICAgICAgICBpZiB6aXA2NCBpcyBOb25lOgotICAgICAgICAgICAgemlwNjQgPSBmaWxlX3NpemUgPiBaSVA2NF9MSU1JVCBvciBjb21wcmVzc19zaXplID4gWklQNjRfTElNSVQKLSAgICAgICAgaWYgemlwNjQ6Ci0gICAgICAgICAgICBmbXQgPSAnPEhIUVEnCi0gICAgICAgICAgICBleHRyYSA9IGV4dHJhICsgc3RydWN0LnBhY2soZm10LAotICAgICAgICAgICAgICAgICAgICAxLCBzdHJ1Y3QuY2FsY3NpemUoZm10KS00LCBmaWxlX3NpemUsIGNvbXByZXNzX3NpemUpCi0gICAgICAgIGlmIGZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUIG9yIGNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVDoKLSAgICAgICAgICAgIGlmIG5vdCB6aXA2NDoKLSAgICAgICAgICAgICAgICByYWlzZSBMYXJnZVppcEZpbGUoIkZpbGVzaXplIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCi0gICAgICAgICAgICAjIEZpbGUgaXMgbGFyZ2VyIHRoYW4gd2hhdCBmaXRzIGludG8gYSA0IGJ5dGUgaW50ZWdlciwKLSAgICAgICAgICAgICMgZmFsbCBiYWNrIHRvIHRoZSBaSVA2NCBleHRlbnNpb24KLSAgICAgICAgICAgIGZpbGVfc2l6ZSA9IDB4ZmZmZmZmZmYKLSAgICAgICAgICAgIGNvbXByZXNzX3NpemUgPSAweGZmZmZmZmZmCi0gICAgICAgICAgICBzZWxmLmV4dHJhY3RfdmVyc2lvbiA9IG1heCg0NSwgc2VsZi5leHRyYWN0X3ZlcnNpb24pCi0gICAgICAgICAgICBzZWxmLmNyZWF0ZV92ZXJzaW9uID0gbWF4KDQ1LCBzZWxmLmV4dHJhY3RfdmVyc2lvbikKLQotICAgICAgICBmaWxlbmFtZSwgZmxhZ19iaXRzID0gc2VsZi5fZW5jb2RlRmlsZW5hbWVGbGFncygpCi0gICAgICAgIGhlYWRlciA9IHN0cnVjdC5wYWNrKHN0cnVjdEZpbGVIZWFkZXIsIHN0cmluZ0ZpbGVIZWFkZXIsCi0gICAgICAgICAgICAgICAgIHNlbGYuZXh0cmFjdF92ZXJzaW9uLCBzZWxmLnJlc2VydmVkLCBmbGFnX2JpdHMsCi0gICAgICAgICAgICAgICAgIHNlbGYuY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwgQ1JDLAotICAgICAgICAgICAgICAgICBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYSkpCi0gICAgICAgIHJldHVybiBoZWFkZXIgKyBmaWxlbmFtZSArIGV4dHJhCi0KLSAgICBkZWYgX2VuY29kZUZpbGVuYW1lRmxhZ3Moc2VsZik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5maWxlbmFtZSwgdW5pY29kZSk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZW5hbWUuZW5jb2RlKCdhc2NpaScpLCBzZWxmLmZsYWdfYml0cwotICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlbmFtZS5lbmNvZGUoJ3V0Zi04JyksIHNlbGYuZmxhZ19iaXRzIHwgMHg4MDAKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVuYW1lLCBzZWxmLmZsYWdfYml0cwotCi0gICAgZGVmIF9kZWNvZGVGaWxlbmFtZShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5mbGFnX2JpdHMgJiAweDgwMDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVuYW1lLmRlY29kZSgndXRmLTgnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZW5hbWUKLQotICAgIGRlZiBfZGVjb2RlRXh0cmEoc2VsZik6Ci0gICAgICAgICMgVHJ5IHRvIGRlY29kZSB0aGUgZXh0cmEgZmllbGQuCi0gICAgICAgIGV4dHJhID0gc2VsZi5leHRyYQotICAgICAgICB1bnBhY2sgPSBzdHJ1Y3QudW5wYWNrCi0gICAgICAgIHdoaWxlIGxlbihleHRyYSkgPj0gNDoKLSAgICAgICAgICAgIHRwLCBsbiA9IHVucGFjaygnPEhIJywgZXh0cmFbOjRdKQotICAgICAgICAgICAgaWYgdHAgPT0gMToKLSAgICAgICAgICAgICAgICBpZiBsbiA+PSAyNDoKLSAgICAgICAgICAgICAgICAgICAgY291bnRzID0gdW5wYWNrKCc8UVFRJywgZXh0cmFbNDoyOF0pCi0gICAgICAgICAgICAgICAgZWxpZiBsbiA9PSAxNjoKLSAgICAgICAgICAgICAgICAgICAgY291bnRzID0gdW5wYWNrKCc8UVEnLCBleHRyYVs0OjIwXSkKLSAgICAgICAgICAgICAgICBlbGlmIGxuID09IDg6Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50cyA9IHVucGFjaygnPFEnLCBleHRyYVs0OjEyXSkKLSAgICAgICAgICAgICAgICBlbGlmIGxuID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50cyA9ICgpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiQ29ycnVwdCBleHRyYSBmaWVsZCAlcyIlKGxuLCkKLQotICAgICAgICAgICAgICAgIGlkeCA9IDAKLQotICAgICAgICAgICAgICAgICMgWklQNjQgZXh0ZW5zaW9uIChsYXJnZSBmaWxlcyBhbmQvb3IgbGFyZ2UgYXJjaGl2ZXMpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5maWxlX3NpemUgaW4gKDB4ZmZmZmZmZmZmZmZmZmZmZkwsIDB4ZmZmZmZmZmZMKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlX3NpemUgPSBjb3VudHNbaWR4XQotICAgICAgICAgICAgICAgICAgICBpZHggKz0gMQotCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5jb21wcmVzc19zaXplID09IDB4RkZGRkZGRkZMOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbXByZXNzX3NpemUgPSBjb3VudHNbaWR4XQotICAgICAgICAgICAgICAgICAgICBpZHggKz0gMQotCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5oZWFkZXJfb2Zmc2V0ID09IDB4ZmZmZmZmZmZMOgotICAgICAgICAgICAgICAgICAgICBvbGQgPSBzZWxmLmhlYWRlcl9vZmZzZXQKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5oZWFkZXJfb2Zmc2V0ID0gY291bnRzW2lkeF0KLSAgICAgICAgICAgICAgICAgICAgaWR4Kz0xCi0KLSAgICAgICAgICAgIGV4dHJhID0gZXh0cmFbbG4rNDpdCi0KLQotY2xhc3MgX1ppcERlY3J5cHRlcjoKLSAgICAiIiJDbGFzcyB0byBoYW5kbGUgZGVjcnlwdGlvbiBvZiBmaWxlcyBzdG9yZWQgd2l0aGluIGEgWklQIGFyY2hpdmUuCi0KLSAgICBaSVAgc3VwcG9ydHMgYSBwYXNzd29yZC1iYXNlZCBmb3JtIG9mIGVuY3J5cHRpb24uIEV2ZW4gdGhvdWdoIGtub3duCi0gICAgcGxhaW50ZXh0IGF0dGFja3MgaGF2ZSBiZWVuIGZvdW5kIGFnYWluc3QgaXQsIGl0IGlzIHN0aWxsIHVzZWZ1bAotICAgIHRvIGJlIGFibGUgdG8gZ2V0IGRhdGEgb3V0IG9mIHN1Y2ggYSBmaWxlLgotCi0gICAgVXNhZ2U6Ci0gICAgICAgIHpkID0gX1ppcERlY3J5cHRlcihteXB3ZCkKLSAgICAgICAgcGxhaW5fY2hhciA9IHpkKGN5cGhlcl9jaGFyKQotICAgICAgICBwbGFpbl90ZXh0ID0gbWFwKHpkLCBjeXBoZXJfdGV4dCkKLSAgICAiIiIKLQotICAgIGRlZiBfR2VuZXJhdGVDUkNUYWJsZSgpOgotICAgICAgICAiIiJHZW5lcmF0ZSBhIENSQy0zMiB0YWJsZS4KLQotICAgICAgICBaSVAgZW5jcnlwdGlvbiB1c2VzIHRoZSBDUkMzMiBvbmUtYnl0ZSBwcmltaXRpdmUgZm9yIHNjcmFtYmxpbmcgc29tZQotICAgICAgICBpbnRlcm5hbCBrZXlzLiBXZSBub3RpY2VkIHRoYXQgYSBkaXJlY3QgaW1wbGVtZW50YXRpb24gaXMgZmFzdGVyIHRoYW4KLSAgICAgICAgcmVseWluZyBvbiBiaW5hc2NpaS5jcmMzMigpLgotICAgICAgICAiIiIKLSAgICAgICAgcG9seSA9IDB4ZWRiODgzMjAKLSAgICAgICAgdGFibGUgPSBbMF0gKiAyNTYKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjU2KToKLSAgICAgICAgICAgIGNyYyA9IGkKLSAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKDgpOgotICAgICAgICAgICAgICAgIGlmIGNyYyAmIDE6Ci0gICAgICAgICAgICAgICAgICAgIGNyYyA9ICgoY3JjID4+IDEpICYgMHg3RkZGRkZGRikgXiBwb2x5Ci0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgY3JjID0gKChjcmMgPj4gMSkgJiAweDdGRkZGRkZGKQotICAgICAgICAgICAgdGFibGVbaV0gPSBjcmMKLSAgICAgICAgcmV0dXJuIHRhYmxlCi0gICAgY3JjdGFibGUgPSBfR2VuZXJhdGVDUkNUYWJsZSgpCi0KLSAgICBkZWYgX2NyYzMyKHNlbGYsIGNoLCBjcmMpOgotICAgICAgICAiIiJDb21wdXRlIHRoZSBDUkMzMiBwcmltaXRpdmUgb24gb25lIGJ5dGUuIiIiCi0gICAgICAgIHJldHVybiAoKGNyYyA+PiA4KSAmIDB4ZmZmZmZmKSBeIHNlbGYuY3JjdGFibGVbKGNyYyBeIG9yZChjaCkpICYgMHhmZl0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwd2QpOgotICAgICAgICBzZWxmLmtleTAgPSAzMDU0MTk4OTYKLSAgICAgICAgc2VsZi5rZXkxID0gNTkxNzUxMDQ5Ci0gICAgICAgIHNlbGYua2V5MiA9IDg3ODA4MjE5MgotICAgICAgICBmb3IgcCBpbiBwd2Q6Ci0gICAgICAgICAgICBzZWxmLl9VcGRhdGVLZXlzKHApCi0KLSAgICBkZWYgX1VwZGF0ZUtleXMoc2VsZiwgYyk6Ci0gICAgICAgIHNlbGYua2V5MCA9IHNlbGYuX2NyYzMyKGMsIHNlbGYua2V5MCkKLSAgICAgICAgc2VsZi5rZXkxID0gKHNlbGYua2V5MSArIChzZWxmLmtleTAgJiAyNTUpKSAmIDQyOTQ5NjcyOTUKLSAgICAgICAgc2VsZi5rZXkxID0gKHNlbGYua2V5MSAqIDEzNDc3NTgxMyArIDEpICYgNDI5NDk2NzI5NQotICAgICAgICBzZWxmLmtleTIgPSBzZWxmLl9jcmMzMihjaHIoKHNlbGYua2V5MSA+PiAyNCkgJiAyNTUpLCBzZWxmLmtleTIpCi0KLSAgICBkZWYgX19jYWxsX18oc2VsZiwgYyk6Ci0gICAgICAgICIiIkRlY3J5cHQgYSBzaW5nbGUgY2hhcmFjdGVyLiIiIgotICAgICAgICBjID0gb3JkKGMpCi0gICAgICAgIGsgPSBzZWxmLmtleTIgfCAyCi0gICAgICAgIGMgPSBjIF4gKCgoayAqIChrXjEpKSA+PiA4KSAmIDI1NSkKLSAgICAgICAgYyA9IGNocihjKQotICAgICAgICBzZWxmLl9VcGRhdGVLZXlzKGMpCi0gICAgICAgIHJldHVybiBjCi0KLQotY29tcHJlc3Nvcl9uYW1lcyA9IHsKLSAgICAwOiAnc3RvcmUnLAotICAgIDE6ICdzaHJpbmsnLAotICAgIDI6ICdyZWR1Y2UnLAotICAgIDM6ICdyZWR1Y2UnLAotICAgIDQ6ICdyZWR1Y2UnLAotICAgIDU6ICdyZWR1Y2UnLAotICAgIDY6ICdpbXBsb2RlJywKLSAgICA3OiAndG9rZW5pemUnLAotICAgIDg6ICdkZWZsYXRlJywKLSAgICA5OiAnZGVmbGF0ZTY0JywKLSAgICAxMDogJ2ltcGxvZGUnLAotICAgIDEyOiAnYnppcDInLAotICAgIDE0OiAnbHptYScsCi0gICAgMTg6ICd0ZXJzZScsCi0gICAgMTk6ICdsejc3JywKLSAgICA5NzogJ3dhdnBhY2snLAotICAgIDk4OiAncHBtZCcsCi19Ci0KLQotY2xhc3MgWmlwRXh0RmlsZShpby5CdWZmZXJlZElPQmFzZSk6Ci0gICAgIiIiRmlsZS1saWtlIG9iamVjdCBmb3IgcmVhZGluZyBhbiBhcmNoaXZlIG1lbWJlci4KLSAgICAgICBJcyByZXR1cm5lZCBieSBaaXBGaWxlLm9wZW4oKS4KLSAgICAiIiIKLQotICAgICMgTWF4IHNpemUgc3VwcG9ydGVkIGJ5IGRlY29tcHJlc3Nvci4KLSAgICBNQVhfTiA9IDEgPDwgMzEgLSAxCi0KLSAgICAjIFJlYWQgZnJvbSBjb21wcmVzc2VkIGZpbGVzIGluIDRrIGJsb2Nrcy4KLSAgICBNSU5fUkVBRF9TSVpFID0gNDA5NgotCi0gICAgIyBTZWFyY2ggZm9yIHVuaXZlcnNhbCBuZXdsaW5lcyBvciBsaW5lIGNodW5rcy4KLSAgICBQQVRURVJOID0gcmUuY29tcGlsZShyJ14oP1A8Y2h1bms+W15cclxuXSspfCg/UDxuZXdsaW5lPlxufFxyXG4/KScpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW9iaiwgbW9kZSwgemlwaW5mbywgZGVjcnlwdGVyPU5vbmUsCi0gICAgICAgICAgICBjbG9zZV9maWxlb2JqPUZhbHNlKToKLSAgICAgICAgc2VsZi5fZmlsZW9iaiA9IGZpbGVvYmoKLSAgICAgICAgc2VsZi5fZGVjcnlwdGVyID0gZGVjcnlwdGVyCi0gICAgICAgIHNlbGYuX2Nsb3NlX2ZpbGVvYmogPSBjbG9zZV9maWxlb2JqCi0KLSAgICAgICAgc2VsZi5fY29tcHJlc3NfdHlwZSA9IHppcGluZm8uY29tcHJlc3NfdHlwZQotICAgICAgICBzZWxmLl9jb21wcmVzc19zaXplID0gemlwaW5mby5jb21wcmVzc19zaXplCi0gICAgICAgIHNlbGYuX2NvbXByZXNzX2xlZnQgPSB6aXBpbmZvLmNvbXByZXNzX3NpemUKLQotICAgICAgICBpZiBzZWxmLl9jb21wcmVzc190eXBlID09IFpJUF9ERUZMQVRFRDoKLSAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IHpsaWIuZGVjb21wcmVzc29iaigtMTUpCi0gICAgICAgIGVsaWYgc2VsZi5fY29tcHJlc3NfdHlwZSAhPSBaSVBfU1RPUkVEOgotICAgICAgICAgICAgZGVzY3IgPSBjb21wcmVzc29yX25hbWVzLmdldChzZWxmLl9jb21wcmVzc190eXBlKQotICAgICAgICAgICAgaWYgZGVzY3I6Ci0gICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiY29tcHJlc3Npb24gdHlwZSAlZCAoJXMpIiAlIChzZWxmLl9jb21wcmVzc190eXBlLCBkZXNjcikpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImNvbXByZXNzaW9uIHR5cGUgJWQiICUgKHNlbGYuX2NvbXByZXNzX3R5cGUsKSkKLSAgICAgICAgc2VsZi5fdW5jb25zdW1lZCA9ICcnCi0KLSAgICAgICAgc2VsZi5fcmVhZGJ1ZmZlciA9ICcnCi0gICAgICAgIHNlbGYuX29mZnNldCA9IDAKLQotICAgICAgICBzZWxmLl91bml2ZXJzYWwgPSAnVScgaW4gbW9kZQotICAgICAgICBzZWxmLm5ld2xpbmVzID0gTm9uZQotCi0gICAgICAgICMgQWRqdXN0IHJlYWQgc2l6ZSBmb3IgZW5jcnlwdGVkIGZpbGVzIHNpbmNlIHRoZSBmaXJzdCAxMiBieXRlcwotICAgICAgICAjIGFyZSBmb3IgdGhlIGVuY3J5cHRpb24vcGFzc3dvcmQgaW5mb3JtYXRpb24uCi0gICAgICAgIGlmIHNlbGYuX2RlY3J5cHRlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzX2xlZnQgLT0gMTIKLQotICAgICAgICBzZWxmLm1vZGUgPSBtb2RlCi0gICAgICAgIHNlbGYubmFtZSA9IHppcGluZm8uZmlsZW5hbWUKLQotICAgICAgICBpZiBoYXNhdHRyKHppcGluZm8sICdDUkMnKToKLSAgICAgICAgICAgIHNlbGYuX2V4cGVjdGVkX2NyYyA9IHppcGluZm8uQ1JDCi0gICAgICAgICAgICBzZWxmLl9ydW5uaW5nX2NyYyA9IGNyYzMyKGInJykgJiAweGZmZmZmZmZmCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9leHBlY3RlZF9jcmMgPSBOb25lCi0KLSAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGltaXQ9LTEpOgotICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gYSBsaW5lIGZyb20gdGhlIHN0cmVhbS4KLQotICAgICAgICBJZiBsaW1pdCBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgbGltaXQgYnl0ZXMgd2lsbCBiZSByZWFkLgotICAgICAgICAiIiIKLQotICAgICAgICBpZiBub3Qgc2VsZi5fdW5pdmVyc2FsIGFuZCBsaW1pdCA8IDA6Ci0gICAgICAgICAgICAjIFNob3J0Y3V0IGNvbW1vbiBjYXNlIC0gbmV3bGluZSBmb3VuZCBpbiBidWZmZXIuCi0gICAgICAgICAgICBpID0gc2VsZi5fcmVhZGJ1ZmZlci5maW5kKCdcbicsIHNlbGYuX29mZnNldCkgKyAxCi0gICAgICAgICAgICBpZiBpID4gMDoKLSAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5fcmVhZGJ1ZmZlcltzZWxmLl9vZmZzZXQ6IGldCi0gICAgICAgICAgICAgICAgc2VsZi5fb2Zmc2V0ID0gaQotICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCi0KLSAgICAgICAgaWYgbm90IHNlbGYuX3VuaXZlcnNhbDoKLSAgICAgICAgICAgIHJldHVybiBpby5CdWZmZXJlZElPQmFzZS5yZWFkbGluZShzZWxmLCBsaW1pdCkKLQotICAgICAgICBsaW5lID0gJycKLSAgICAgICAgd2hpbGUgbGltaXQgPCAwIG9yIGxlbihsaW5lKSA8IGxpbWl0OgotICAgICAgICAgICAgcmVhZGFoZWFkID0gc2VsZi5wZWVrKDIpCi0gICAgICAgICAgICBpZiByZWFkYWhlYWQgPT0gJyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKLQotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBTZWFyY2ggZm9yIHVuaXZlcnNhbCBuZXdsaW5lcyBvciBsaW5lIGNodW5rcy4KLSAgICAgICAgICAgICMKLSAgICAgICAgICAgICMgVGhlIHBhdHRlcm4gcmV0dXJucyBlaXRoZXIgYSBsaW5lIGNodW5rIG9yIGEgbmV3bGluZSwgYnV0IG5vdAotICAgICAgICAgICAgIyBib3RoLiBDb21iaW5lZCB3aXRoIHBlZWsoMiksIHdlIGFyZSBhc3N1cmVkIHRoYXQgdGhlIHNlcXVlbmNlCi0gICAgICAgICAgICAjICdcclxuJyBpcyBhbHdheXMgcmV0cmlldmVkIGNvbXBsZXRlbHkgYW5kIG5ldmVyIHNwbGl0IGludG8KLSAgICAgICAgICAgICMgc2VwYXJhdGUgbmV3bGluZXMgLSAnXHInLCAnXG4nIGR1ZSB0byBjb2luY2lkZW50YWwgcmVhZGFoZWFkcy4KLSAgICAgICAgICAgICMKLSAgICAgICAgICAgIG1hdGNoID0gc2VsZi5QQVRURVJOLnNlYXJjaChyZWFkYWhlYWQpCi0gICAgICAgICAgICBuZXdsaW5lID0gbWF0Y2guZ3JvdXAoJ25ld2xpbmUnKQotICAgICAgICAgICAgaWYgbmV3bGluZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLm5ld2xpbmVzIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubmV3bGluZXMgPSBbXQotICAgICAgICAgICAgICAgIGlmIG5ld2xpbmUgbm90IGluIHNlbGYubmV3bGluZXM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubmV3bGluZXMuYXBwZW5kKG5ld2xpbmUpCi0gICAgICAgICAgICAgICAgc2VsZi5fb2Zmc2V0ICs9IGxlbihuZXdsaW5lKQotICAgICAgICAgICAgICAgIHJldHVybiBsaW5lICsgJ1xuJwotCi0gICAgICAgICAgICBjaHVuayA9IG1hdGNoLmdyb3VwKCdjaHVuaycpCi0gICAgICAgICAgICBpZiBsaW1pdCA+PSAwOgotICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmtbOiBsaW1pdCAtIGxlbihsaW5lKV0KLQotICAgICAgICAgICAgc2VsZi5fb2Zmc2V0ICs9IGxlbihjaHVuaykKLSAgICAgICAgICAgIGxpbmUgKz0gY2h1bmsKLQotICAgICAgICByZXR1cm4gbGluZQotCi0gICAgZGVmIHBlZWsoc2VsZiwgbj0xKToKLSAgICAgICAgIiIiUmV0dXJucyBidWZmZXJlZCBieXRlcyB3aXRob3V0IGFkdmFuY2luZyB0aGUgcG9zaXRpb24uIiIiCi0gICAgICAgIGlmIG4gPiBsZW4oc2VsZi5fcmVhZGJ1ZmZlcikgLSBzZWxmLl9vZmZzZXQ6Ci0gICAgICAgICAgICBjaHVuayA9IHNlbGYucmVhZChuKQotICAgICAgICAgICAgaWYgbGVuKGNodW5rKSA+IHNlbGYuX29mZnNldDoKLSAgICAgICAgICAgICAgICBzZWxmLl9yZWFkYnVmZmVyID0gY2h1bmsgKyBzZWxmLl9yZWFkYnVmZmVyW3NlbGYuX29mZnNldDpdCi0gICAgICAgICAgICAgICAgc2VsZi5fb2Zmc2V0ID0gMAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9vZmZzZXQgLT0gbGVuKGNodW5rKQotCi0gICAgICAgICMgUmV0dXJuIHVwIHRvIDUxMiBieXRlcyB0byByZWR1Y2UgYWxsb2NhdGlvbiBvdmVyaGVhZCBmb3IgdGlnaHQgbG9vcHMuCi0gICAgICAgIHJldHVybiBzZWxmLl9yZWFkYnVmZmVyW3NlbGYuX29mZnNldDogc2VsZi5fb2Zmc2V0ICsgNTEyXQotCi0gICAgZGVmIHJlYWRhYmxlKHNlbGYpOgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6Ci0gICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBuIGJ5dGVzLgotICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgTm9uZSwgb3IgbmVnYXRpdmUsIGRhdGEgaXMgcmVhZCBhbmQgcmV0dXJuZWQgdW50aWwgRU9GIGlzIHJlYWNoZWQuLgotICAgICAgICAiIiIKLSAgICAgICAgYnVmID0gJycKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBpZiBuIDwgMDoKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5yZWFkMShuKQotICAgICAgICAgICAgZWxpZiBuID4gbGVuKGJ1Zik6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVhZDEobiAtIGxlbihidWYpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gYnVmCi0gICAgICAgICAgICBpZiBsZW4oZGF0YSkgPT0gMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gYnVmCi0gICAgICAgICAgICBidWYgKz0gZGF0YQotCi0gICAgZGVmIF91cGRhdGVfY3JjKHNlbGYsIG5ld2RhdGEsIGVvZik6Ci0gICAgICAgICMgVXBkYXRlIHRoZSBDUkMgdXNpbmcgdGhlIGdpdmVuIGRhdGEuCi0gICAgICAgIGlmIHNlbGYuX2V4cGVjdGVkX2NyYyBpcyBOb25lOgotICAgICAgICAgICAgIyBObyBuZWVkIHRvIGNvbXB1dGUgdGhlIENSQyBpZiB3ZSBkb24ndCBoYXZlIGEgcmVmZXJlbmNlIHZhbHVlCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5fcnVubmluZ19jcmMgPSBjcmMzMihuZXdkYXRhLCBzZWxmLl9ydW5uaW5nX2NyYykgJiAweGZmZmZmZmZmCi0gICAgICAgICMgQ2hlY2sgdGhlIENSQyBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCi0gICAgICAgIGlmIGVvZiBhbmQgc2VsZi5fcnVubmluZ19jcmMgIT0gc2VsZi5fZXhwZWN0ZWRfY3JjOgotICAgICAgICAgICAgcmFpc2UgQmFkWmlwZmlsZSgiQmFkIENSQy0zMiBmb3IgZmlsZSAlciIgJSBzZWxmLm5hbWUpCi0KLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6Ci0gICAgICAgICIiIlJlYWQgdXAgdG8gbiBieXRlcyB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbC4iIiIKLQotICAgICAgICAjIFNpbXBsaWZ5IGFsZ29yaXRobSAoYnJhbmNoaW5nKSBieSB0cmFuc2Zvcm1pbmcgbmVnYXRpdmUgbiB0byBsYXJnZSBuLgotICAgICAgICBpZiBuIDwgMCBvciBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gc2VsZi5NQVhfTgotCi0gICAgICAgICMgQnl0ZXMgYXZhaWxhYmxlIGluIHJlYWQgYnVmZmVyLgotICAgICAgICBsZW5fcmVhZGJ1ZmZlciA9IGxlbihzZWxmLl9yZWFkYnVmZmVyKSAtIHNlbGYuX29mZnNldAotCi0gICAgICAgICMgUmVhZCBmcm9tIGZpbGUuCi0gICAgICAgIGlmIHNlbGYuX2NvbXByZXNzX2xlZnQgPiAwIGFuZCBuID4gbGVuX3JlYWRidWZmZXIgKyBsZW4oc2VsZi5fdW5jb25zdW1lZCk6Ci0gICAgICAgICAgICBuYnl0ZXMgPSBuIC0gbGVuX3JlYWRidWZmZXIgLSBsZW4oc2VsZi5fdW5jb25zdW1lZCkKLSAgICAgICAgICAgIG5ieXRlcyA9IG1heChuYnl0ZXMsIHNlbGYuTUlOX1JFQURfU0laRSkKLSAgICAgICAgICAgIG5ieXRlcyA9IG1pbihuYnl0ZXMsIHNlbGYuX2NvbXByZXNzX2xlZnQpCi0KLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9maWxlb2JqLnJlYWQobmJ5dGVzKQotICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NfbGVmdCAtPSBsZW4oZGF0YSkKLQotICAgICAgICAgICAgaWYgZGF0YSBhbmQgc2VsZi5fZGVjcnlwdGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGRhdGEgPSAnJy5qb2luKG1hcChzZWxmLl9kZWNyeXB0ZXIsIGRhdGEpKQotCi0gICAgICAgICAgICBpZiBzZWxmLl9jb21wcmVzc190eXBlID09IFpJUF9TVE9SRUQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5fdXBkYXRlX2NyYyhkYXRhLCBlb2Y9KHNlbGYuX2NvbXByZXNzX2xlZnQ9PTApKQotICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRidWZmZXIgPSBzZWxmLl9yZWFkYnVmZmVyW3NlbGYuX29mZnNldDpdICsgZGF0YQotICAgICAgICAgICAgICAgIHNlbGYuX29mZnNldCA9IDAKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBQcmVwYXJlIGRlZmxhdGVkIGJ5dGVzIGZvciBkZWNvbXByZXNzaW9uLgotICAgICAgICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWQgKz0gZGF0YQotCi0gICAgICAgICMgSGFuZGxlIHVuY29uc3VtZWQgZGF0YS4KLSAgICAgICAgaWYgKGxlbihzZWxmLl91bmNvbnN1bWVkKSA+IDAgYW5kIG4gPiBsZW5fcmVhZGJ1ZmZlciBhbmQKLSAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEKToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcygKLSAgICAgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkLAotICAgICAgICAgICAgICAgIG1heChuIC0gbGVuX3JlYWRidWZmZXIsIHNlbGYuTUlOX1JFQURfU0laRSkKLSAgICAgICAgICAgICkKLQotICAgICAgICAgICAgc2VsZi5fdW5jb25zdW1lZCA9IHNlbGYuX2RlY29tcHJlc3Nvci51bmNvbnN1bWVkX3RhaWwKLSAgICAgICAgICAgIGVvZiA9IGxlbihzZWxmLl91bmNvbnN1bWVkKSA9PSAwIGFuZCBzZWxmLl9jb21wcmVzc19sZWZ0ID09IDAKLSAgICAgICAgICAgIGlmIGVvZjoKLSAgICAgICAgICAgICAgICBkYXRhICs9IHNlbGYuX2RlY29tcHJlc3Nvci5mbHVzaCgpCi0KLSAgICAgICAgICAgIHNlbGYuX3VwZGF0ZV9jcmMoZGF0YSwgZW9mPWVvZikKLSAgICAgICAgICAgIHNlbGYuX3JlYWRidWZmZXIgPSBzZWxmLl9yZWFkYnVmZmVyW3NlbGYuX29mZnNldDpdICsgZGF0YQotICAgICAgICAgICAgc2VsZi5fb2Zmc2V0ID0gMAotCi0gICAgICAgICMgUmVhZCBmcm9tIGJ1ZmZlci4KLSAgICAgICAgZGF0YSA9IHNlbGYuX3JlYWRidWZmZXJbc2VsZi5fb2Zmc2V0OiBzZWxmLl9vZmZzZXQgKyBuXQotICAgICAgICBzZWxmLl9vZmZzZXQgKz0gbGVuKGRhdGEpCi0gICAgICAgIHJldHVybiBkYXRhCi0KLSAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHRyeSA6Ci0gICAgICAgICAgICBpZiBzZWxmLl9jbG9zZV9maWxlb2JqOgotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVvYmouY2xvc2UoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3VwZXIoWmlwRXh0RmlsZSwgc2VsZikuY2xvc2UoKQotCi0KLWNsYXNzIFppcEZpbGUob2JqZWN0KToKLSAgICAiIiIgQ2xhc3Mgd2l0aCBtZXRob2RzIHRvIG9wZW4sIHJlYWQsIHdyaXRlLCBjbG9zZSwgbGlzdCB6aXAgZmlsZXMuCi0KLSAgICB6ID0gWmlwRmlsZShmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1GYWxzZSkKLQotICAgIGZpbGU6IEVpdGhlciB0aGUgcGF0aCB0byB0aGUgZmlsZSwgb3IgYSBmaWxlLWxpa2Ugb2JqZWN0LgotICAgICAgICAgIElmIGl0IGlzIGEgcGF0aCwgdGhlIGZpbGUgd2lsbCBiZSBvcGVuZWQgYW5kIGNsb3NlZCBieSBaaXBGaWxlLgotICAgIG1vZGU6IFRoZSBtb2RlIGNhbiBiZSBlaXRoZXIgcmVhZCAiciIsIHdyaXRlICJ3IiBvciBhcHBlbmQgImEiLgotICAgIGNvbXByZXNzaW9uOiBaSVBfU1RPUkVEIChubyBjb21wcmVzc2lvbikgb3IgWklQX0RFRkxBVEVEIChyZXF1aXJlcyB6bGliKS4KLSAgICBhbGxvd1ppcDY0OiBpZiBUcnVlIFppcEZpbGUgd2lsbCBjcmVhdGUgZmlsZXMgd2l0aCBaSVA2NCBleHRlbnNpb25zIHdoZW4KLSAgICAgICAgICAgICAgICBuZWVkZWQsIG90aGVyd2lzZSBpdCB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoaXMgd291bGQKLSAgICAgICAgICAgICAgICBiZSBuZWNlc3NhcnkuCi0KLSAgICAiIiIKLQotICAgIGZwID0gTm9uZSAgICAgICAgICAgICAgICAgICAjIFNldCBoZXJlIHNpbmNlIF9fZGVsX18gY2hlY2tzIGl0Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgbW9kZT0iciIsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9RmFsc2UpOgotICAgICAgICAiIiJPcGVuIHRoZSBaSVAgZmlsZSB3aXRoIG1vZGUgcmVhZCAiciIsIHdyaXRlICJ3IiBvciBhcHBlbmQgImEiLiIiIgotICAgICAgICBpZiBtb2RlIG5vdCBpbiAoInIiLCAidyIsICJhIik6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1ppcEZpbGUoKSByZXF1aXJlcyBtb2RlICJyIiwgInciLCBvciAiYSInKQotCi0gICAgICAgIGlmIGNvbXByZXNzaW9uID09IFpJUF9TVE9SRUQ6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsaWYgY29tcHJlc3Npb24gPT0gWklQX0RFRkxBVEVEOgotICAgICAgICAgICAgaWYgbm90IHpsaWI6Ci0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLFwKLSAgICAgICAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSB6bGliIG1vZHVsZSIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIlRoYXQgY29tcHJlc3Npb24gbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQiCi0KLSAgICAgICAgc2VsZi5fYWxsb3daaXA2NCA9IGFsbG93WmlwNjQKLSAgICAgICAgc2VsZi5fZGlkTW9kaWZ5ID0gRmFsc2UKLSAgICAgICAgc2VsZi5kZWJ1ZyA9IDAgICMgTGV2ZWwgb2YgcHJpbnRpbmc6IDAgdGhyb3VnaCAzCi0gICAgICAgIHNlbGYuTmFtZVRvSW5mbyA9IHt9ICAgICMgRmluZCBmaWxlIGluZm8gZ2l2ZW4gbmFtZQotICAgICAgICBzZWxmLmZpbGVsaXN0ID0gW10gICAgICAjIExpc3Qgb2YgWmlwSW5mbyBpbnN0YW5jZXMgZm9yIGFyY2hpdmUKLSAgICAgICAgc2VsZi5jb21wcmVzc2lvbiA9IGNvbXByZXNzaW9uICAjIE1ldGhvZCBvZiBjb21wcmVzc2lvbgotICAgICAgICBzZWxmLm1vZGUgPSBrZXkgPSBtb2RlLnJlcGxhY2UoJ2InLCAnJylbMF0KLSAgICAgICAgc2VsZi5wd2QgPSBOb25lCi0gICAgICAgIHNlbGYuX2NvbW1lbnQgPSAnJwotCi0gICAgICAgICMgQ2hlY2sgaWYgd2Ugd2VyZSBwYXNzZWQgYSBmaWxlLWxpa2Ugb2JqZWN0Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZSwgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICBzZWxmLl9maWxlUGFzc2VkID0gMAotICAgICAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGUKLSAgICAgICAgICAgIG1vZGVEaWN0ID0geydyJyA6ICdyYicsICd3JzogJ3diJywgJ2EnIDogJ3IrYid9Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mcCA9IG9wZW4oZmlsZSwgbW9kZURpY3RbbW9kZV0pCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICAgICBpZiBtb2RlID09ICdhJzoKLSAgICAgICAgICAgICAgICAgICAgbW9kZSA9IGtleSA9ICd3JwotICAgICAgICAgICAgICAgICAgICBzZWxmLmZwID0gb3BlbihmaWxlLCBtb2RlRGljdFttb2RlXSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fZmlsZVBhc3NlZCA9IDEKLSAgICAgICAgICAgIHNlbGYuZnAgPSBmaWxlCi0gICAgICAgICAgICBzZWxmLmZpbGVuYW1lID0gZ2V0YXR0cihmaWxlLCAnbmFtZScsIE5vbmUpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYga2V5ID09ICdyJzoKLSAgICAgICAgICAgICAgICBzZWxmLl9SZWFsR2V0Q29udGVudHMoKQotICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ3cnOgotICAgICAgICAgICAgICAgICMgc2V0IHRoZSBtb2RpZmllZCBmbGFnIHNvIGNlbnRyYWwgZGlyZWN0b3J5IGdldHMgd3JpdHRlbgotICAgICAgICAgICAgICAgICMgZXZlbiBpZiBubyBmaWxlcyBhcmUgYWRkZWQgdG8gdGhlIGFyY2hpdmUKLSAgICAgICAgICAgICAgICBzZWxmLl9kaWRNb2RpZnkgPSBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5fc3RhcnRfZGlzayA9IHNlbGYuZnAudGVsbCgpCi0gICAgICAgICAgICBlbGlmIGtleSA9PSAnYSc6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAjIFNlZSBpZiBmaWxlIGlzIGEgemlwIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fUmVhbEdldENvbnRlbnRzKCkKLSAgICAgICAgICAgICAgICAgICAgIyBzZWVrIHRvIHN0YXJ0IG9mIGRpcmVjdG9yeSBhbmQgb3ZlcndyaXRlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZnAuc2VlayhzZWxmLnN0YXJ0X2RpciwgMCkKLSAgICAgICAgICAgICAgICBleGNlcHQgQmFkWmlwZmlsZToKLSAgICAgICAgICAgICAgICAgICAgIyBmaWxlIGlzIG5vdCBhIHppcCBmaWxlLCBqdXN0IGFwcGVuZAotICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLnNlZWsoMCwgMikKLQotICAgICAgICAgICAgICAgICAgICAjIHNldCB0aGUgbW9kaWZpZWQgZmxhZyBzbyBjZW50cmFsIGRpcmVjdG9yeSBnZXRzIHdyaXR0ZW4KLSAgICAgICAgICAgICAgICAgICAgIyBldmVuIGlmIG5vIGZpbGVzIGFyZSBhZGRlZCB0byB0aGUgYXJjaGl2ZQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9kaWRNb2RpZnkgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0X2Rpc2sgPSBzZWxmLmZwLnRlbGwoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ01vZGUgbXVzdCBiZSAiciIsICJ3IiBvciAiYSInKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBmcCA9IHNlbGYuZnAKLSAgICAgICAgICAgIHNlbGYuZnAgPSBOb25lCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZVBhc3NlZDoKLSAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICByYWlzZQotCi0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKLSAgICAgICAgc2VsZi5jbG9zZSgpCi0KLSAgICBkZWYgX1JlYWxHZXRDb250ZW50cyhzZWxmKToKLSAgICAgICAgIiIiUmVhZCBpbiB0aGUgdGFibGUgb2YgY29udGVudHMgZm9yIHRoZSBaSVAgZmlsZS4iIiIKLSAgICAgICAgZnAgPSBzZWxmLmZwCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVuZHJlYyA9IF9FbmRSZWNEYXRhKGZwKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIEJhZFppcGZpbGUoIkZpbGUgaXMgbm90IGEgemlwIGZpbGUiKQotICAgICAgICBpZiBub3QgZW5kcmVjOgotICAgICAgICAgICAgcmFpc2UgQmFkWmlwZmlsZSwgIkZpbGUgaXMgbm90IGEgemlwIGZpbGUiCi0gICAgICAgIGlmIHNlbGYuZGVidWcgPiAxOgotICAgICAgICAgICAgcHJpbnQgZW5kcmVjCi0gICAgICAgIHNpemVfY2QgPSBlbmRyZWNbX0VDRF9TSVpFXSAgICAgICAgICAgICAjIGJ5dGVzIGluIGNlbnRyYWwgZGlyZWN0b3J5Ci0gICAgICAgIG9mZnNldF9jZCA9IGVuZHJlY1tfRUNEX09GRlNFVF0gICAgICAgICAjIG9mZnNldCBvZiBjZW50cmFsIGRpcmVjdG9yeQotICAgICAgICBzZWxmLl9jb21tZW50ID0gZW5kcmVjW19FQ0RfQ09NTUVOVF0gICAgIyBhcmNoaXZlIGNvbW1lbnQKLQotICAgICAgICAjIHNlbGYuX3N0YXJ0X2Rpc2s6ICBQb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgWklQIGFyY2hpdmUKLSAgICAgICAgIyBJdCBpcyB6ZXJvLCB1bmxlc3MgWklQIHdhcyBjb25jYXRlbmF0ZWQgdG8gYW5vdGhlciBmaWxlCi0gICAgICAgIHNlbGYuX3N0YXJ0X2Rpc2sgPSBlbmRyZWNbX0VDRF9MT0NBVElPTl0gLSBzaXplX2NkIC0gb2Zmc2V0X2NkCi0gICAgICAgIGlmIGVuZHJlY1tfRUNEX1NJR05BVFVSRV0gPT0gc3RyaW5nRW5kQXJjaGl2ZTY0OgotICAgICAgICAgICAgIyBJZiBaaXA2NCBleHRlbnNpb24gc3RydWN0dXJlcyBhcmUgcHJlc2VudCwgYWNjb3VudCBmb3IgdGhlbQotICAgICAgICAgICAgc2VsZi5fc3RhcnRfZGlzayAtPSAoc2l6ZUVuZENlbnREaXI2NCArIHNpemVFbmRDZW50RGlyNjRMb2NhdG9yKQotCi0gICAgICAgIGlmIHNlbGYuZGVidWcgPiAyOgotICAgICAgICAgICAgaW5mZXJyZWQgPSBzZWxmLl9zdGFydF9kaXNrICsgb2Zmc2V0X2NkCi0gICAgICAgICAgICBwcmludCAiZ2l2ZW4sIGluZmVycmVkLCBvZmZzZXQiLCBvZmZzZXRfY2QsIGluZmVycmVkLCBzZWxmLl9zdGFydF9kaXNrCi0gICAgICAgICMgc2VsZi5zdGFydF9kaXI6ICBQb3NpdGlvbiBvZiBzdGFydCBvZiBjZW50cmFsIGRpcmVjdG9yeQotICAgICAgICBzZWxmLnN0YXJ0X2RpciA9IG9mZnNldF9jZCArIHNlbGYuX3N0YXJ0X2Rpc2sKLSAgICAgICAgZnAuc2VlayhzZWxmLnN0YXJ0X2RpciwgMCkKLSAgICAgICAgZGF0YSA9IGZwLnJlYWQoc2l6ZV9jZCkKLSAgICAgICAgZnAgPSBjU3RyaW5nSU8uU3RyaW5nSU8oZGF0YSkKLSAgICAgICAgdG90YWwgPSAwCi0gICAgICAgIHdoaWxlIHRvdGFsIDwgc2l6ZV9jZDoKLSAgICAgICAgICAgIGNlbnRkaXIgPSBmcC5yZWFkKHNpemVDZW50cmFsRGlyKQotICAgICAgICAgICAgaWYgbGVuKGNlbnRkaXIpICE9IHNpemVDZW50cmFsRGlyOgotICAgICAgICAgICAgICAgIHJhaXNlIEJhZFppcGZpbGUoIlRydW5jYXRlZCBjZW50cmFsIGRpcmVjdG9yeSIpCi0gICAgICAgICAgICBjZW50ZGlyID0gc3RydWN0LnVucGFjayhzdHJ1Y3RDZW50cmFsRGlyLCBjZW50ZGlyKQotICAgICAgICAgICAgaWYgY2VudGRpcltfQ0RfU0lHTkFUVVJFXSAhPSBzdHJpbmdDZW50cmFsRGlyOgotICAgICAgICAgICAgICAgIHJhaXNlIEJhZFppcGZpbGUoIkJhZCBtYWdpYyBudW1iZXIgZm9yIGNlbnRyYWwgZGlyZWN0b3J5IikKLSAgICAgICAgICAgIGlmIHNlbGYuZGVidWcgPiAyOgotICAgICAgICAgICAgICAgIHByaW50IGNlbnRkaXIKLSAgICAgICAgICAgIGZpbGVuYW1lID0gZnAucmVhZChjZW50ZGlyW19DRF9GSUxFTkFNRV9MRU5HVEhdKQotICAgICAgICAgICAgIyBDcmVhdGUgWmlwSW5mbyBpbnN0YW5jZSB0byBzdG9yZSBmaWxlIGluZm9ybWF0aW9uCi0gICAgICAgICAgICB4ID0gWmlwSW5mbyhmaWxlbmFtZSkKLSAgICAgICAgICAgIHguZXh0cmEgPSBmcC5yZWFkKGNlbnRkaXJbX0NEX0VYVFJBX0ZJRUxEX0xFTkdUSF0pCi0gICAgICAgICAgICB4LmNvbW1lbnQgPSBmcC5yZWFkKGNlbnRkaXJbX0NEX0NPTU1FTlRfTEVOR1RIXSkKLSAgICAgICAgICAgIHguaGVhZGVyX29mZnNldCA9IGNlbnRkaXJbX0NEX0xPQ0FMX0hFQURFUl9PRkZTRVRdCi0gICAgICAgICAgICAoeC5jcmVhdGVfdmVyc2lvbiwgeC5jcmVhdGVfc3lzdGVtLCB4LmV4dHJhY3RfdmVyc2lvbiwgeC5yZXNlcnZlZCwKLSAgICAgICAgICAgICAgICB4LmZsYWdfYml0cywgeC5jb21wcmVzc190eXBlLCB0LCBkLAotICAgICAgICAgICAgICAgIHguQ1JDLCB4LmNvbXByZXNzX3NpemUsIHguZmlsZV9zaXplKSA9IGNlbnRkaXJbMToxMl0KLSAgICAgICAgICAgIHgudm9sdW1lLCB4LmludGVybmFsX2F0dHIsIHguZXh0ZXJuYWxfYXR0ciA9IGNlbnRkaXJbMTU6MThdCi0gICAgICAgICAgICAjIENvbnZlcnQgZGF0ZS90aW1lIGNvZGUgdG8gKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbiwgc2VjKQotICAgICAgICAgICAgeC5fcmF3X3RpbWUgPSB0Ci0gICAgICAgICAgICB4LmRhdGVfdGltZSA9ICggKGQ+PjkpKzE5ODAsIChkPj41KSYweEYsIGQmMHgxRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Pj4xMSwgKHQ+PjUpJjB4M0YsICh0JjB4MUYpICogMiApCi0KLSAgICAgICAgICAgIHguX2RlY29kZUV4dHJhKCkKLSAgICAgICAgICAgIHguaGVhZGVyX29mZnNldCA9IHguaGVhZGVyX29mZnNldCArIHNlbGYuX3N0YXJ0X2Rpc2sKLSAgICAgICAgICAgIHguZmlsZW5hbWUgPSB4Ll9kZWNvZGVGaWxlbmFtZSgpCi0gICAgICAgICAgICBzZWxmLmZpbGVsaXN0LmFwcGVuZCh4KQotICAgICAgICAgICAgc2VsZi5OYW1lVG9JbmZvW3guZmlsZW5hbWVdID0geAotCi0gICAgICAgICAgICAjIHVwZGF0ZSB0b3RhbCBieXRlcyByZWFkIGZyb20gY2VudHJhbCBkaXJlY3RvcnkKLSAgICAgICAgICAgIHRvdGFsID0gKHRvdGFsICsgc2l6ZUNlbnRyYWxEaXIgKyBjZW50ZGlyW19DRF9GSUxFTkFNRV9MRU5HVEhdCi0gICAgICAgICAgICAgICAgICAgICArIGNlbnRkaXJbX0NEX0VYVFJBX0ZJRUxEX0xFTkdUSF0KLSAgICAgICAgICAgICAgICAgICAgICsgY2VudGRpcltfQ0RfQ09NTUVOVF9MRU5HVEhdKQotCi0gICAgICAgICAgICBpZiBzZWxmLmRlYnVnID4gMjoKLSAgICAgICAgICAgICAgICBwcmludCAidG90YWwiLCB0b3RhbAotCi0KLSAgICBkZWYgbmFtZWxpc3Qoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgZmlsZSBuYW1lcyBpbiB0aGUgYXJjaGl2ZS4iIiIKLSAgICAgICAgbCA9IFtdCi0gICAgICAgIGZvciBkYXRhIGluIHNlbGYuZmlsZWxpc3Q6Ci0gICAgICAgICAgICBsLmFwcGVuZChkYXRhLmZpbGVuYW1lKQotICAgICAgICByZXR1cm4gbAotCi0gICAgZGVmIGluZm9saXN0KHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGNsYXNzIFppcEluZm8gaW5zdGFuY2VzIGZvciBmaWxlcyBpbiB0aGUKLSAgICAgICAgYXJjaGl2ZS4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuZmlsZWxpc3QKLQotICAgIGRlZiBwcmludGRpcihzZWxmKToKLSAgICAgICAgIiIiUHJpbnQgYSB0YWJsZSBvZiBjb250ZW50cyBmb3IgdGhlIHppcCBmaWxlLiIiIgotICAgICAgICBwcmludCAiJS00NnMgJTE5cyAlMTJzIiAlICgiRmlsZSBOYW1lIiwgIk1vZGlmaWVkICAgICIsICJTaXplIikKLSAgICAgICAgZm9yIHppbmZvIGluIHNlbGYuZmlsZWxpc3Q6Ci0gICAgICAgICAgICBkYXRlID0gIiVkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6JTAyZCIgJSB6aW5mby5kYXRlX3RpbWVbOjZdCi0gICAgICAgICAgICBwcmludCAiJS00NnMgJXMgJTEyZCIgJSAoemluZm8uZmlsZW5hbWUsIGRhdGUsIHppbmZvLmZpbGVfc2l6ZSkKLQotICAgIGRlZiB0ZXN0emlwKHNlbGYpOgotICAgICAgICAiIiJSZWFkIGFsbCB0aGUgZmlsZXMgYW5kIGNoZWNrIHRoZSBDUkMuIiIiCi0gICAgICAgIGNodW5rX3NpemUgPSAyICoqIDIwCi0gICAgICAgIGZvciB6aW5mbyBpbiBzZWxmLmZpbGVsaXN0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgUmVhZCBieSBjaHVua3MsIHRvIGF2b2lkIGFuIE92ZXJmbG93RXJyb3Igb3IgYQotICAgICAgICAgICAgICAgICMgTWVtb3J5RXJyb3Igd2l0aCB2ZXJ5IGxhcmdlIGVtYmVkZGVkIGZpbGVzLgotICAgICAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHppbmZvLmZpbGVuYW1lLCAiciIpIGFzIGY6Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIGYucmVhZChjaHVua19zaXplKTogICAgICMgQ2hlY2sgQ1JDLTMyCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgQmFkWmlwZmlsZToKLSAgICAgICAgICAgICAgICByZXR1cm4gemluZm8uZmlsZW5hbWUKLQotICAgIGRlZiBnZXRpbmZvKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGluc3RhbmNlIG9mIFppcEluZm8gZ2l2ZW4gJ25hbWUnLiIiIgotICAgICAgICBpbmZvID0gc2VsZi5OYW1lVG9JbmZvLmdldChuYW1lKQotICAgICAgICBpZiBpbmZvIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBLZXlFcnJvcigKLSAgICAgICAgICAgICAgICAnVGhlcmUgaXMgbm8gaXRlbSBuYW1lZCAlciBpbiB0aGUgYXJjaGl2ZScgJSBuYW1lKQotCi0gICAgICAgIHJldHVybiBpbmZvCi0KLSAgICBkZWYgc2V0cGFzc3dvcmQoc2VsZiwgcHdkKToKLSAgICAgICAgIiIiU2V0IGRlZmF1bHQgcGFzc3dvcmQgZm9yIGVuY3J5cHRlZCBmaWxlcy4iIiIKLSAgICAgICAgc2VsZi5wd2QgPSBwd2QKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBjb21tZW50KHNlbGYpOgotICAgICAgICAiIiJUaGUgY29tbWVudCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgWklQIGZpbGUuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9jb21tZW50Ci0KLSAgICBAY29tbWVudC5zZXR0ZXIKLSAgICBkZWYgY29tbWVudChzZWxmLCBjb21tZW50KToKLSAgICAgICAgIyBjaGVjayBmb3IgdmFsaWQgY29tbWVudCBsZW5ndGgKLSAgICAgICAgaWYgbGVuKGNvbW1lbnQpID4gWklQX01BWF9DT01NRU5UOgotICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCi0gICAgICAgICAgICB3YXJuaW5ncy53YXJuKCdBcmNoaXZlIGNvbW1lbnQgaXMgdG9vIGxvbmc7IHRydW5jYXRpbmcgdG8gJWQgYnl0ZXMnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICUgWklQX01BWF9DT01NRU5ULCBzdGFja2xldmVsPTIpCi0gICAgICAgICAgICBjb21tZW50ID0gY29tbWVudFs6WklQX01BWF9DT01NRU5UXQotICAgICAgICBzZWxmLl9jb21tZW50ID0gY29tbWVudAotICAgICAgICBzZWxmLl9kaWRNb2RpZnkgPSBUcnVlCi0KLSAgICBkZWYgcmVhZChzZWxmLCBuYW1lLCBwd2Q9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybiBmaWxlIGJ5dGVzIChhcyBhIHN0cmluZykgZm9yIG5hbWUuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLm9wZW4obmFtZSwgInIiLCBwd2QpLnJlYWQoKQotCi0gICAgZGVmIG9wZW4oc2VsZiwgbmFtZSwgbW9kZT0iciIsIHB3ZD1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJuIGZpbGUtbGlrZSBvYmplY3QgZm9yICduYW1lJy4iIiIKLSAgICAgICAgaWYgbW9kZSBub3QgaW4gKCJyIiwgIlUiLCAiclUiKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgJ29wZW4oKSByZXF1aXJlcyBtb2RlICJyIiwgIlUiLCBvciAiclUiJwotICAgICAgICBpZiBub3Qgc2VsZi5mcDoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgXAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gcmVhZCBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIKLQotICAgICAgICAjIE9ubHkgb3BlbiBhIG5ldyBmaWxlIGZvciBpbnN0YW5jZXMgd2hlcmUgd2Ugd2VyZSBub3QKLSAgICAgICAgIyBnaXZlbiBhIGZpbGUgb2JqZWN0IGluIHRoZSBjb25zdHJ1Y3RvcgotICAgICAgICBpZiBzZWxmLl9maWxlUGFzc2VkOgotICAgICAgICAgICAgemVmX2ZpbGUgPSBzZWxmLmZwCi0gICAgICAgICAgICBzaG91bGRfY2xvc2UgPSBGYWxzZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgemVmX2ZpbGUgPSBvcGVuKHNlbGYuZmlsZW5hbWUsICdyYicpCi0gICAgICAgICAgICBzaG91bGRfY2xvc2UgPSBUcnVlCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBpbmZvIG9iamVjdAotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lLCBaaXBJbmZvKToKLSAgICAgICAgICAgICAgICAjICduYW1lJyBpcyBhbHJlYWR5IGFuIGluZm8gb2JqZWN0Ci0gICAgICAgICAgICAgICAgemluZm8gPSBuYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgR2V0IGluZm8gb2JqZWN0IGZvciBuYW1lCi0gICAgICAgICAgICAgICAgemluZm8gPSBzZWxmLmdldGluZm8obmFtZSkKLQotICAgICAgICAgICAgemVmX2ZpbGUuc2Vlayh6aW5mby5oZWFkZXJfb2Zmc2V0LCAwKQotCi0gICAgICAgICAgICAjIFNraXAgdGhlIGZpbGUgaGVhZGVyOgotICAgICAgICAgICAgZmhlYWRlciA9IHplZl9maWxlLnJlYWQoc2l6ZUZpbGVIZWFkZXIpCi0gICAgICAgICAgICBpZiBsZW4oZmhlYWRlcikgIT0gc2l6ZUZpbGVIZWFkZXI6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQmFkWmlwZmlsZSgiVHJ1bmNhdGVkIGZpbGUgaGVhZGVyIikKLSAgICAgICAgICAgIGZoZWFkZXIgPSBzdHJ1Y3QudW5wYWNrKHN0cnVjdEZpbGVIZWFkZXIsIGZoZWFkZXIpCi0gICAgICAgICAgICBpZiBmaGVhZGVyW19GSF9TSUdOQVRVUkVdICE9IHN0cmluZ0ZpbGVIZWFkZXI6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQmFkWmlwZmlsZSgiQmFkIG1hZ2ljIG51bWJlciBmb3IgZmlsZSBoZWFkZXIiKQotCi0gICAgICAgICAgICBmbmFtZSA9IHplZl9maWxlLnJlYWQoZmhlYWRlcltfRkhfRklMRU5BTUVfTEVOR1RIXSkKLSAgICAgICAgICAgIGlmIGZoZWFkZXJbX0ZIX0VYVFJBX0ZJRUxEX0xFTkdUSF06Ci0gICAgICAgICAgICAgICAgemVmX2ZpbGUucmVhZChmaGVhZGVyW19GSF9FWFRSQV9GSUVMRF9MRU5HVEhdKQotCi0gICAgICAgICAgICBpZiBmbmFtZSAhPSB6aW5mby5vcmlnX2ZpbGVuYW1lOgotICAgICAgICAgICAgICAgIHJhaXNlIEJhZFppcGZpbGUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICdGaWxlIG5hbWUgaW4gZGlyZWN0b3J5ICIlcyIgYW5kIGhlYWRlciAiJXMiIGRpZmZlci4nICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLm9yaWdfZmlsZW5hbWUsIGZuYW1lKQotCi0gICAgICAgICAgICAjIGNoZWNrIGZvciBlbmNyeXB0ZWQgZmxhZyAmIGhhbmRsZSBwYXNzd29yZAotICAgICAgICAgICAgaXNfZW5jcnlwdGVkID0gemluZm8uZmxhZ19iaXRzICYgMHgxCi0gICAgICAgICAgICB6ZCA9IE5vbmUKLSAgICAgICAgICAgIGlmIGlzX2VuY3J5cHRlZDoKLSAgICAgICAgICAgICAgICBpZiBub3QgcHdkOgotICAgICAgICAgICAgICAgICAgICBwd2QgPSBzZWxmLnB3ZAotICAgICAgICAgICAgICAgIGlmIG5vdCBwd2Q6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIkZpbGUgJXMgaXMgZW5jcnlwdGVkLCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICJwYXNzd29yZCByZXF1aXJlZCBmb3IgZXh0cmFjdGlvbiIgJSBuYW1lCi0KLSAgICAgICAgICAgICAgICB6ZCA9IF9aaXBEZWNyeXB0ZXIocHdkKQotICAgICAgICAgICAgICAgICMgVGhlIGZpcnN0IDEyIGJ5dGVzIGluIHRoZSBjeXBoZXIgc3RyZWFtIGlzIGFuIGVuY3J5cHRpb24gaGVhZGVyCi0gICAgICAgICAgICAgICAgIyAgdXNlZCB0byBzdHJlbmd0aGVuIHRoZSBhbGdvcml0aG0uIFRoZSBmaXJzdCAxMSBieXRlcyBhcmUKLSAgICAgICAgICAgICAgICAjICBjb21wbGV0ZWx5IHJhbmRvbSwgd2hpbGUgdGhlIDEydGggY29udGFpbnMgdGhlIE1TQiBvZiB0aGUgQ1JDLAotICAgICAgICAgICAgICAgICMgIG9yIHRoZSBNU0Igb2YgdGhlIGZpbGUgdGltZSBkZXBlbmRpbmcgb24gdGhlIGhlYWRlciB0eXBlCi0gICAgICAgICAgICAgICAgIyAgYW5kIGlzIHVzZWQgdG8gY2hlY2sgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBwYXNzd29yZC4KLSAgICAgICAgICAgICAgICBieXRlcyA9IHplZl9maWxlLnJlYWQoMTIpCi0gICAgICAgICAgICAgICAgaCA9IG1hcCh6ZCwgYnl0ZXNbMDoxMl0pCi0gICAgICAgICAgICAgICAgaWYgemluZm8uZmxhZ19iaXRzICYgMHg4OgotICAgICAgICAgICAgICAgICAgICAjIGNvbXBhcmUgYWdhaW5zdCB0aGUgZmlsZSB0eXBlIGZyb20gZXh0ZW5kZWQgbG9jYWwgaGVhZGVycwotICAgICAgICAgICAgICAgICAgICBjaGVja19ieXRlID0gKHppbmZvLl9yYXdfdGltZSA+PiA4KSAmIDB4ZmYKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIGNvbXBhcmUgYWdhaW5zdCB0aGUgQ1JDIG90aGVyd2lzZQotICAgICAgICAgICAgICAgICAgICBjaGVja19ieXRlID0gKHppbmZvLkNSQyA+PiAyNCkgJiAweGZmCi0gICAgICAgICAgICAgICAgaWYgb3JkKGhbMTFdKSAhPSBjaGVja19ieXRlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkJhZCBwYXNzd29yZCBmb3IgZmlsZSIsIG5hbWUpCi0KLSAgICAgICAgICAgIHJldHVybiBaaXBFeHRGaWxlKHplZl9maWxlLCBtb2RlLCB6aW5mbywgemQsCi0gICAgICAgICAgICAgICAgICAgIGNsb3NlX2ZpbGVvYmo9c2hvdWxkX2Nsb3NlKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBpZiBzaG91bGRfY2xvc2U6Ci0gICAgICAgICAgICAgICAgemVmX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgcmFpc2UKLQotICAgIGRlZiBleHRyYWN0KHNlbGYsIG1lbWJlciwgcGF0aD1Ob25lLCBwd2Q9Tm9uZSk6Ci0gICAgICAgICIiIkV4dHJhY3QgYSBtZW1iZXIgZnJvbSB0aGUgYXJjaGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwKLSAgICAgICAgICAgdXNpbmcgaXRzIGZ1bGwgbmFtZS4gSXRzIGZpbGUgaW5mb3JtYXRpb24gaXMgZXh0cmFjdGVkIGFzIGFjY3VyYXRlbHkKLSAgICAgICAgICAgYXMgcG9zc2libGUuIGBtZW1iZXInIG1heSBiZSBhIGZpbGVuYW1lIG9yIGEgWmlwSW5mbyBvYmplY3QuIFlvdSBjYW4KLSAgICAgICAgICAgc3BlY2lmeSBhIGRpZmZlcmVudCBkaXJlY3RvcnkgdXNpbmcgYHBhdGgnLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobWVtYmVyLCBaaXBJbmZvKToKLSAgICAgICAgICAgIG1lbWJlciA9IHNlbGYuZ2V0aW5mbyhtZW1iZXIpCi0KLSAgICAgICAgaWYgcGF0aCBpcyBOb25lOgotICAgICAgICAgICAgcGF0aCA9IG9zLmdldGN3ZCgpCi0KLSAgICAgICAgcmV0dXJuIHNlbGYuX2V4dHJhY3RfbWVtYmVyKG1lbWJlciwgcGF0aCwgcHdkKQotCi0gICAgZGVmIGV4dHJhY3RhbGwoc2VsZiwgcGF0aD1Ob25lLCBtZW1iZXJzPU5vbmUsIHB3ZD1Ob25lKToKLSAgICAgICAgIiIiRXh0cmFjdCBhbGwgbWVtYmVycyBmcm9tIHRoZSBhcmNoaXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcKLSAgICAgICAgICAgZGlyZWN0b3J5LiBgcGF0aCcgc3BlY2lmaWVzIGEgZGlmZmVyZW50IGRpcmVjdG9yeSB0byBleHRyYWN0IHRvLgotICAgICAgICAgICBgbWVtYmVycycgaXMgb3B0aW9uYWwgYW5kIG11c3QgYmUgYSBzdWJzZXQgb2YgdGhlIGxpc3QgcmV0dXJuZWQKLSAgICAgICAgICAgYnkgbmFtZWxpc3QoKS4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIG1lbWJlcnMgaXMgTm9uZToKLSAgICAgICAgICAgIG1lbWJlcnMgPSBzZWxmLm5hbWVsaXN0KCkKLQotICAgICAgICBmb3IgemlwaW5mbyBpbiBtZW1iZXJzOgotICAgICAgICAgICAgc2VsZi5leHRyYWN0KHppcGluZm8sIHBhdGgsIHB3ZCkKLQotICAgIGRlZiBfZXh0cmFjdF9tZW1iZXIoc2VsZiwgbWVtYmVyLCB0YXJnZXRwYXRoLCBwd2QpOgotICAgICAgICAiIiJFeHRyYWN0IHRoZSBaaXBJbmZvIG9iamVjdCAnbWVtYmVyJyB0byBhIHBoeXNpY2FsCi0gICAgICAgICAgIGZpbGUgb24gdGhlIHBhdGggdGFyZ2V0cGF0aC4KLSAgICAgICAgIiIiCi0gICAgICAgICMgYnVpbGQgdGhlIGRlc3RpbmF0aW9uIHBhdGhuYW1lLCByZXBsYWNpbmcKLSAgICAgICAgIyBmb3J3YXJkIHNsYXNoZXMgdG8gcGxhdGZvcm0gc3BlY2lmaWMgc2VwYXJhdG9ycy4KLSAgICAgICAgYXJjbmFtZSA9IG1lbWJlci5maWxlbmFtZS5yZXBsYWNlKCcvJywgb3MucGF0aC5zZXApCi0KLSAgICAgICAgaWYgb3MucGF0aC5hbHRzZXA6Ci0gICAgICAgICAgICBhcmNuYW1lID0gYXJjbmFtZS5yZXBsYWNlKG9zLnBhdGguYWx0c2VwLCBvcy5wYXRoLnNlcCkKLSAgICAgICAgIyBpbnRlcnByZXQgYWJzb2x1dGUgcGF0aG5hbWUgYXMgcmVsYXRpdmUsIHJlbW92ZSBkcml2ZSBsZXR0ZXIgb3IKLSAgICAgICAgIyBVTkMgcGF0aCwgcmVkdW5kYW50IHNlcGFyYXRvcnMsICIuIiBhbmQgIi4uIiBjb21wb25lbnRzLgotICAgICAgICBhcmNuYW1lID0gb3MucGF0aC5zcGxpdGRyaXZlKGFyY25hbWUpWzFdCi0gICAgICAgIGFyY25hbWUgPSBvcy5wYXRoLnNlcC5qb2luKHggZm9yIHggaW4gYXJjbmFtZS5zcGxpdChvcy5wYXRoLnNlcCkKLSAgICAgICAgICAgICAgICAgICAgaWYgeCBub3QgaW4gKCcnLCBvcy5wYXRoLmN1cmRpciwgb3MucGF0aC5wYXJkaXIpKQotICAgICAgICBpZiBvcy5wYXRoLnNlcCA9PSAnXFwnOgotICAgICAgICAgICAgIyBmaWx0ZXIgaWxsZWdhbCBjaGFyYWN0ZXJzIG9uIFdpbmRvd3MKLSAgICAgICAgICAgIGlsbGVnYWwgPSAnOjw+fCI/KicKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJjbmFtZSwgdW5pY29kZSk6Ci0gICAgICAgICAgICAgICAgdGFibGUgPSB7b3JkKGMpOiBvcmQoJ18nKSBmb3IgYyBpbiBpbGxlZ2FsfQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0YWJsZSA9IHN0cmluZy5tYWtldHJhbnMoaWxsZWdhbCwgJ18nICogbGVuKGlsbGVnYWwpKQotICAgICAgICAgICAgYXJjbmFtZSA9IGFyY25hbWUudHJhbnNsYXRlKHRhYmxlKQotICAgICAgICAgICAgIyByZW1vdmUgdHJhaWxpbmcgZG90cwotICAgICAgICAgICAgYXJjbmFtZSA9ICh4LnJzdHJpcCgnLicpIGZvciB4IGluIGFyY25hbWUuc3BsaXQob3MucGF0aC5zZXApKQotICAgICAgICAgICAgYXJjbmFtZSA9IG9zLnBhdGguc2VwLmpvaW4oeCBmb3IgeCBpbiBhcmNuYW1lIGlmIHgpCi0KLSAgICAgICAgdGFyZ2V0cGF0aCA9IG9zLnBhdGguam9pbih0YXJnZXRwYXRoLCBhcmNuYW1lKQotICAgICAgICB0YXJnZXRwYXRoID0gb3MucGF0aC5ub3JtcGF0aCh0YXJnZXRwYXRoKQotCi0gICAgICAgICMgQ3JlYXRlIGFsbCB1cHBlciBkaXJlY3RvcmllcyBpZiBuZWNlc3NhcnkuCi0gICAgICAgIHVwcGVyZGlycyA9IG9zLnBhdGguZGlybmFtZSh0YXJnZXRwYXRoKQotICAgICAgICBpZiB1cHBlcmRpcnMgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyh1cHBlcmRpcnMpOgotICAgICAgICAgICAgb3MubWFrZWRpcnModXBwZXJkaXJzKQotCi0gICAgICAgIGlmIG1lbWJlci5maWxlbmFtZVstMV0gPT0gJy8nOgotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIodGFyZ2V0cGF0aCk6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIodGFyZ2V0cGF0aCkKLSAgICAgICAgICAgIHJldHVybiB0YXJnZXRwYXRoCi0KLSAgICAgICAgd2l0aCBzZWxmLm9wZW4obWVtYmVyLCBwd2Q9cHdkKSBhcyBzb3VyY2UsIFwKLSAgICAgICAgICAgICBmaWxlKHRhcmdldHBhdGgsICJ3YiIpIGFzIHRhcmdldDoKLSAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZW9iaihzb3VyY2UsIHRhcmdldCkKLQotICAgICAgICByZXR1cm4gdGFyZ2V0cGF0aAotCi0gICAgZGVmIF93cml0ZWNoZWNrKHNlbGYsIHppbmZvKToKLSAgICAgICAgIiIiQ2hlY2sgZm9yIGVycm9ycyBiZWZvcmUgd3JpdGluZyBhIGZpbGUgdG8gdGhlIGFyY2hpdmUuIiIiCi0gICAgICAgIGlmIHppbmZvLmZpbGVuYW1lIGluIHNlbGYuTmFtZVRvSW5mbzoKLSAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncwotICAgICAgICAgICAgd2FybmluZ3Mud2FybignRHVwbGljYXRlIG5hbWU6ICVyJyAlIHppbmZvLmZpbGVuYW1lLCBzdGFja2xldmVsPTMpCi0gICAgICAgIGlmIHNlbGYubW9kZSBub3QgaW4gKCJ3IiwgImEiKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgJ3dyaXRlKCkgcmVxdWlyZXMgbW9kZSAidyIgb3IgImEiJwotICAgICAgICBpZiBub3Qgc2VsZi5mcDoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgXAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiCi0gICAgICAgIGlmIHppbmZvLmNvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEIGFuZCBub3QgemxpYjoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgXAotICAgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgemxpYiBtb2R1bGUiCi0gICAgICAgIGlmIHppbmZvLmNvbXByZXNzX3R5cGUgbm90IGluIChaSVBfU1RPUkVELCBaSVBfREVGTEFURUQpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCBcCi0gICAgICAgICAgICAgICAgICAiVGhhdCBjb21wcmVzc2lvbiBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCIKLSAgICAgICAgaWYgbm90IHNlbGYuX2FsbG93WmlwNjQ6Ci0gICAgICAgICAgICByZXF1aXJlc196aXA2NCA9IE5vbmUKLSAgICAgICAgICAgIGlmIGxlbihzZWxmLmZpbGVsaXN0KSA+PSBaSVBfRklMRUNPVU5UX0xJTUlUOgotICAgICAgICAgICAgICAgIHJlcXVpcmVzX3ppcDY0ID0gIkZpbGVzIGNvdW50IgotICAgICAgICAgICAgZWxpZiB6aW5mby5maWxlX3NpemUgPiBaSVA2NF9MSU1JVDoKLSAgICAgICAgICAgICAgICByZXF1aXJlc196aXA2NCA9ICJGaWxlc2l6ZSIKLSAgICAgICAgICAgIGVsaWYgemluZm8uaGVhZGVyX29mZnNldCA+IFpJUDY0X0xJTUlUOgotICAgICAgICAgICAgICAgIHJlcXVpcmVzX3ppcDY0ID0gIlppcGZpbGUgc2l6ZSIKLSAgICAgICAgICAgIGlmIHJlcXVpcmVzX3ppcDY0OgotICAgICAgICAgICAgICAgIHJhaXNlIExhcmdlWmlwRmlsZShyZXF1aXJlc196aXA2NCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKLQotICAgIGRlZiB3cml0ZShzZWxmLCBmaWxlbmFtZSwgYXJjbmFtZT1Ob25lLCBjb21wcmVzc190eXBlPU5vbmUpOgotICAgICAgICAiIiJQdXQgdGhlIGJ5dGVzIGZyb20gZmlsZW5hbWUgaW50byB0aGUgYXJjaGl2ZSB1bmRlciB0aGUgbmFtZQotICAgICAgICBhcmNuYW1lLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5mcDoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKLQotICAgICAgICBzdCA9IG9zLnN0YXQoZmlsZW5hbWUpCi0gICAgICAgIGlzZGlyID0gc3RhdC5TX0lTRElSKHN0LnN0X21vZGUpCi0gICAgICAgIG10aW1lID0gdGltZS5sb2NhbHRpbWUoc3Quc3RfbXRpbWUpCi0gICAgICAgIGRhdGVfdGltZSA9IG10aW1lWzA6Nl0KLSAgICAgICAgIyBDcmVhdGUgWmlwSW5mbyBpbnN0YW5jZSB0byBzdG9yZSBmaWxlIGluZm9ybWF0aW9uCi0gICAgICAgIGlmIGFyY25hbWUgaXMgTm9uZToKLSAgICAgICAgICAgIGFyY25hbWUgPSBmaWxlbmFtZQotICAgICAgICBhcmNuYW1lID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLnNwbGl0ZHJpdmUoYXJjbmFtZSlbMV0pCi0gICAgICAgIHdoaWxlIGFyY25hbWVbMF0gaW4gKG9zLnNlcCwgb3MuYWx0c2VwKToKLSAgICAgICAgICAgIGFyY25hbWUgPSBhcmNuYW1lWzE6XQotICAgICAgICBpZiBpc2RpcjoKLSAgICAgICAgICAgIGFyY25hbWUgKz0gJy8nCi0gICAgICAgIHppbmZvID0gWmlwSW5mbyhhcmNuYW1lLCBkYXRlX3RpbWUpCi0gICAgICAgIHppbmZvLmV4dGVybmFsX2F0dHIgPSAoc3RbMF0gJiAweEZGRkYpIDw8IDE2TCAgICAgICMgVW5peCBhdHRyaWJ1dGVzCi0gICAgICAgIGlmIGlzZGlyOgotICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IFpJUF9TVE9SRUQKLSAgICAgICAgZWxpZiBjb21wcmVzc190eXBlIGlzIE5vbmU6Ci0gICAgICAgICAgICB6aW5mby5jb21wcmVzc190eXBlID0gc2VsZi5jb21wcmVzc2lvbgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IGNvbXByZXNzX3R5cGUKLQotICAgICAgICB6aW5mby5maWxlX3NpemUgPSBzdC5zdF9zaXplCi0gICAgICAgIHppbmZvLmZsYWdfYml0cyA9IDB4MDAKLSAgICAgICAgemluZm8uaGVhZGVyX29mZnNldCA9IHNlbGYuZnAudGVsbCgpICAgICMgU3RhcnQgb2YgaGVhZGVyIGJ5dGVzCi0KLSAgICAgICAgc2VsZi5fd3JpdGVjaGVjayh6aW5mbykKLSAgICAgICAgc2VsZi5fZGlkTW9kaWZ5ID0gVHJ1ZQotCi0gICAgICAgIGlmIGlzZGlyOgotICAgICAgICAgICAgemluZm8uZmlsZV9zaXplID0gMAotICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IDAKLSAgICAgICAgICAgIHppbmZvLkNSQyA9IDAKLSAgICAgICAgICAgIHppbmZvLmV4dGVybmFsX2F0dHIgfD0gMHgxMCAgIyBNUy1ET1MgZGlyZWN0b3J5IGZsYWcKLSAgICAgICAgICAgIHNlbGYuZmlsZWxpc3QuYXBwZW5kKHppbmZvKQotICAgICAgICAgICAgc2VsZi5OYW1lVG9JbmZvW3ppbmZvLmZpbGVuYW1lXSA9IHppbmZvCi0gICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLkZpbGVIZWFkZXIoRmFsc2UpKQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKLSAgICAgICAgICAgICMgTXVzdCBvdmVyd3JpdGUgQ1JDIGFuZCBzaXplcyB3aXRoIGNvcnJlY3QgZGF0YSBsYXRlcgotICAgICAgICAgICAgemluZm8uQ1JDID0gQ1JDID0gMAotICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUgPSAwCi0gICAgICAgICAgICAjIENvbXByZXNzZWQgc2l6ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gdW5jb21wcmVzc2VkIHNpemUKLSAgICAgICAgICAgIHppcDY0ID0gc2VsZi5fYWxsb3daaXA2NCBhbmQgXAotICAgICAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUgKiAxLjA1ID4gWklQNjRfTElNSVQKLSAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcih6aXA2NCkpCi0gICAgICAgICAgICBpZiB6aW5mby5jb21wcmVzc190eXBlID09IFpJUF9ERUZMQVRFRDoKLSAgICAgICAgICAgICAgICBjbXByID0gemxpYi5jb21wcmVzc29iaih6bGliLlpfREVGQVVMVF9DT01QUkVTU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgIHpsaWIuREVGTEFURUQsIC0xNSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY21wciA9IE5vbmUKLSAgICAgICAgICAgIGZpbGVfc2l6ZSA9IDAKLSAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZCgxMDI0ICogOCkKLSAgICAgICAgICAgICAgICBpZiBub3QgYnVmOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGZpbGVfc2l6ZSA9IGZpbGVfc2l6ZSArIGxlbihidWYpCi0gICAgICAgICAgICAgICAgQ1JDID0gY3JjMzIoYnVmLCBDUkMpICYgMHhmZmZmZmZmZgotICAgICAgICAgICAgICAgIGlmIGNtcHI6Ci0gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGNtcHIuY29tcHJlc3MoYnVmKQotICAgICAgICAgICAgICAgICAgICBjb21wcmVzc19zaXplID0gY29tcHJlc3Nfc2l6ZSArIGxlbihidWYpCi0gICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShidWYpCi0gICAgICAgIGlmIGNtcHI6Ci0gICAgICAgICAgICBidWYgPSBjbXByLmZsdXNoKCkKLSAgICAgICAgICAgIGNvbXByZXNzX3NpemUgPSBjb21wcmVzc19zaXplICsgbGVuKGJ1ZikKLSAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoYnVmKQotICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSBmaWxlX3NpemUKLSAgICAgICAgemluZm8uQ1JDID0gQ1JDCi0gICAgICAgIHppbmZvLmZpbGVfc2l6ZSA9IGZpbGVfc2l6ZQotICAgICAgICBpZiBub3QgemlwNjQgYW5kIHNlbGYuX2FsbG93WmlwNjQ6Ci0gICAgICAgICAgICBpZiBmaWxlX3NpemUgPiBaSVA2NF9MSU1JVDoKLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0ZpbGUgc2l6ZSBoYXMgaW5jcmVhc2VkIGR1cmluZyBjb21wcmVzc2luZycpCi0gICAgICAgICAgICBpZiBjb21wcmVzc19zaXplID4gWklQNjRfTElNSVQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb21wcmVzc2VkIHNpemUgbGFyZ2VyIHRoYW4gdW5jb21wcmVzc2VkIHNpemUnKQotICAgICAgICAjIFNlZWsgYmFja3dhcmRzIGFuZCB3cml0ZSBmaWxlIGhlYWRlciAod2hpY2ggd2lsbCBub3cgaW5jbHVkZQotICAgICAgICAjIGNvcnJlY3QgQ1JDIGFuZCBmaWxlIHNpemVzKQotICAgICAgICBwb3NpdGlvbiA9IHNlbGYuZnAudGVsbCgpICMgUHJlc2VydmUgY3VycmVudCBwb3NpdGlvbiBpbiBmaWxlCi0gICAgICAgIHNlbGYuZnAuc2Vlayh6aW5mby5oZWFkZXJfb2Zmc2V0LCAwKQotICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLkZpbGVIZWFkZXIoemlwNjQpKQotICAgICAgICBzZWxmLmZwLnNlZWsocG9zaXRpb24sIDApCi0gICAgICAgIHNlbGYuZmlsZWxpc3QuYXBwZW5kKHppbmZvKQotICAgICAgICBzZWxmLk5hbWVUb0luZm9bemluZm8uZmlsZW5hbWVdID0gemluZm8KLQotICAgIGRlZiB3cml0ZXN0cihzZWxmLCB6aW5mb19vcl9hcmNuYW1lLCBieXRlcywgY29tcHJlc3NfdHlwZT1Ob25lKToKLSAgICAgICAgIiIiV3JpdGUgYSBmaWxlIGludG8gdGhlIGFyY2hpdmUuICBUaGUgY29udGVudHMgaXMgdGhlIHN0cmluZwotICAgICAgICAnYnl0ZXMnLiAgJ3ppbmZvX29yX2FyY25hbWUnIGlzIGVpdGhlciBhIFppcEluZm8gaW5zdGFuY2Ugb3IKLSAgICAgICAgdGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIGFyY2hpdmUuIiIiCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHppbmZvX29yX2FyY25hbWUsIFppcEluZm8pOgotICAgICAgICAgICAgemluZm8gPSBaaXBJbmZvKGZpbGVuYW1lPXppbmZvX29yX2FyY25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZV90aW1lPXRpbWUubG9jYWx0aW1lKHRpbWUudGltZSgpKVs6Nl0pCi0KLSAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBzZWxmLmNvbXByZXNzaW9uCi0gICAgICAgICAgICBpZiB6aW5mby5maWxlbmFtZVstMV0gPT0gJy8nOgotICAgICAgICAgICAgICAgIHppbmZvLmV4dGVybmFsX2F0dHIgPSAwbzQwNzc1IDw8IDE2ICAgIyBkcnd4cnd4ci14Ci0gICAgICAgICAgICAgICAgemluZm8uZXh0ZXJuYWxfYXR0ciB8PSAweDEwICAgICAgICAgICAjIE1TLURPUyBkaXJlY3RvcnkgZmxhZwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB6aW5mby5leHRlcm5hbF9hdHRyID0gMG82MDAgPDwgMTYgICAgICMgP3J3LS0tLS0tLQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgemluZm8gPSB6aW5mb19vcl9hcmNuYW1lCi0KLSAgICAgICAgaWYgbm90IHNlbGYuZnA6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSB0byBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCi0KLSAgICAgICAgaWYgY29tcHJlc3NfdHlwZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBjb21wcmVzc190eXBlCi0KLSAgICAgICAgemluZm8uZmlsZV9zaXplID0gbGVuKGJ5dGVzKSAgICAgICAgICAgICMgVW5jb21wcmVzc2VkIHNpemUKLSAgICAgICAgemluZm8uaGVhZGVyX29mZnNldCA9IHNlbGYuZnAudGVsbCgpICAgICMgU3RhcnQgb2YgaGVhZGVyIGJ5dGVzCi0gICAgICAgIHNlbGYuX3dyaXRlY2hlY2soemluZm8pCi0gICAgICAgIHNlbGYuX2RpZE1vZGlmeSA9IFRydWUKLSAgICAgICAgemluZm8uQ1JDID0gY3JjMzIoYnl0ZXMpICYgMHhmZmZmZmZmZiAgICAgICAjIENSQy0zMiBjaGVja3N1bQotICAgICAgICBpZiB6aW5mby5jb21wcmVzc190eXBlID09IFpJUF9ERUZMQVRFRDoKLSAgICAgICAgICAgIGNvID0gemxpYi5jb21wcmVzc29iaih6bGliLlpfREVGQVVMVF9DT01QUkVTU0lPTiwKLSAgICAgICAgICAgICAgICAgemxpYi5ERUZMQVRFRCwgLTE1KQotICAgICAgICAgICAgYnl0ZXMgPSBjby5jb21wcmVzcyhieXRlcykgKyBjby5mbHVzaCgpCi0gICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID0gbGVuKGJ5dGVzKSAgICAjIENvbXByZXNzZWQgc2l6ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IHppbmZvLmZpbGVfc2l6ZQotICAgICAgICB6aXA2NCA9IHppbmZvLmZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUIG9yIFwKLSAgICAgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQKLSAgICAgICAgaWYgemlwNjQgYW5kIG5vdCBzZWxmLl9hbGxvd1ppcDY0OgotICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKCJGaWxlc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQotICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLkZpbGVIZWFkZXIoemlwNjQpKQotICAgICAgICBzZWxmLmZwLndyaXRlKGJ5dGVzKQotICAgICAgICBpZiB6aW5mby5mbGFnX2JpdHMgJiAweDA4OgotICAgICAgICAgICAgIyBXcml0ZSBDUkMgYW5kIGZpbGUgc2l6ZXMgYWZ0ZXIgdGhlIGZpbGUgZGF0YQotICAgICAgICAgICAgZm10ID0gJzxMUVEnIGlmIHppcDY0IGVsc2UgJzxMTEwnCi0gICAgICAgICAgICBzZWxmLmZwLndyaXRlKHN0cnVjdC5wYWNrKGZtdCwgemluZm8uQ1JDLCB6aW5mby5jb21wcmVzc19zaXplLAotICAgICAgICAgICAgICAgICAgemluZm8uZmlsZV9zaXplKSkKLSAgICAgICAgc2VsZi5mcC5mbHVzaCgpCi0gICAgICAgIHNlbGYuZmlsZWxpc3QuYXBwZW5kKHppbmZvKQotICAgICAgICBzZWxmLk5hbWVUb0luZm9bemluZm8uZmlsZW5hbWVdID0gemluZm8KLQotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICAiIiJDYWxsIHRoZSAiY2xvc2UoKSIgbWV0aG9kIGluIGNhc2UgdGhlIHVzZXIgZm9yZ290LiIiIgotICAgICAgICBzZWxmLmNsb3NlKCkKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgIiIiQ2xvc2UgdGhlIGZpbGUsIGFuZCBmb3IgbW9kZSAidyIgYW5kICJhIiB3cml0ZSB0aGUgZW5kaW5nCi0gICAgICAgIHJlY29yZHMuIiIiCi0gICAgICAgIGlmIHNlbGYuZnAgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIHNlbGYubW9kZSBpbiAoInciLCAiYSIpIGFuZCBzZWxmLl9kaWRNb2RpZnk6ICMgd3JpdGUgZW5kaW5nIHJlY29yZHMKLSAgICAgICAgICAgICAgICBwb3MxID0gc2VsZi5mcC50ZWxsKCkKLSAgICAgICAgICAgICAgICBmb3IgemluZm8gaW4gc2VsZi5maWxlbGlzdDogICAgICAgICAjIHdyaXRlIGNlbnRyYWwgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIGR0ID0gemluZm8uZGF0ZV90aW1lCi0gICAgICAgICAgICAgICAgICAgIGRvc2RhdGUgPSAoZHRbMF0gLSAxOTgwKSA8PCA5IHwgZHRbMV0gPDwgNSB8IGR0WzJdCi0gICAgICAgICAgICAgICAgICAgIGRvc3RpbWUgPSBkdFszXSA8PCAxMSB8IGR0WzRdIDw8IDUgfCAoZHRbNV0gLy8gMikKLSAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBbXQotICAgICAgICAgICAgICAgICAgICBpZiB6aW5mby5maWxlX3NpemUgPiBaSVA2NF9MSU1JVCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgemluZm8uY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUOgotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXBwZW5kKHppbmZvLmZpbGVfc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmFwcGVuZCh6aW5mby5jb21wcmVzc19zaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplID0gMHhmZmZmZmZmZgotICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Nfc2l6ZSA9IDB4ZmZmZmZmZmYKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfc2l6ZSA9IHppbmZvLmZpbGVfc2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Nfc2l6ZSA9IHppbmZvLmNvbXByZXNzX3NpemUKLQotICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0ID0gemluZm8uaGVhZGVyX29mZnNldCAtIHNlbGYuX3N0YXJ0X2Rpc2sKLSAgICAgICAgICAgICAgICAgICAgaWYgaGVhZGVyX29mZnNldCA+IFpJUDY0X0xJTUlUOgotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXBwZW5kKGhlYWRlcl9vZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0ID0gMHhmZmZmZmZmZkwKLQotICAgICAgICAgICAgICAgICAgICBleHRyYV9kYXRhID0gemluZm8uZXh0cmEKLSAgICAgICAgICAgICAgICAgICAgaWYgZXh0cmE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIEFwcGVuZCBhIFpJUDY0IGZpZWxkIHRvIHRoZSBleHRyYSdzCi0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kYXRhID0gc3RydWN0LnBhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8SEgnICsgJ1EnKmxlbihleHRyYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDgqbGVuKGV4dHJhKSwgKmV4dHJhKSArIGV4dHJhX2RhdGEKLQotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdF92ZXJzaW9uID0gbWF4KDQ1LCB6aW5mby5leHRyYWN0X3ZlcnNpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVfdmVyc2lvbiA9IG1heCg0NSwgemluZm8uY3JlYXRlX3ZlcnNpb24pCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0X3ZlcnNpb24gPSB6aW5mby5leHRyYWN0X3ZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV92ZXJzaW9uID0gemluZm8uY3JlYXRlX3ZlcnNpb24KLQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZmxhZ19iaXRzID0gemluZm8uX2VuY29kZUZpbGVuYW1lRmxhZ3MoKQotICAgICAgICAgICAgICAgICAgICAgICAgY2VudGRpciA9IHN0cnVjdC5wYWNrKHN0cnVjdENlbnRyYWxEaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdDZW50cmFsRGlyLCBjcmVhdGVfdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBmbGFnX2JpdHMsIHppbmZvLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5DUkMsIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgMCwgemluZm8uaW50ZXJuYWxfYXR0ciwgemluZm8uZXh0ZXJuYWxfYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9vZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBEZXByZWNhdGlvbldhcm5pbmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsIChzdHJ1Y3RDZW50cmFsRGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQ2VudHJhbERpciwgY3JlYXRlX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5jcmVhdGVfc3lzdGVtLCBleHRyYWN0X3ZlcnNpb24sIHppbmZvLnJlc2VydmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uQ1JDLCBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZW4oemluZm8uZmlsZW5hbWUpLCBsZW4oZXh0cmFfZGF0YSksIGxlbih6aW5mby5jb21tZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0KQotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShjZW50ZGlyKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKGZpbGVuYW1lKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKGV4dHJhX2RhdGEpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uY29tbWVudCkKLQotICAgICAgICAgICAgICAgIHBvczIgPSBzZWxmLmZwLnRlbGwoKQotICAgICAgICAgICAgICAgICMgV3JpdGUgZW5kLW9mLXppcC1hcmNoaXZlIHJlY29yZAotICAgICAgICAgICAgICAgIGNlbnREaXJDb3VudCA9IGxlbihzZWxmLmZpbGVsaXN0KQotICAgICAgICAgICAgICAgIGNlbnREaXJTaXplID0gcG9zMiAtIHBvczEKLSAgICAgICAgICAgICAgICBjZW50RGlyT2Zmc2V0ID0gcG9zMSAtIHNlbGYuX3N0YXJ0X2Rpc2sKLSAgICAgICAgICAgICAgICByZXF1aXJlc196aXA2NCA9IE5vbmUKLSAgICAgICAgICAgICAgICBpZiBjZW50RGlyQ291bnQgPiBaSVBfRklMRUNPVU5UX0xJTUlUOgotICAgICAgICAgICAgICAgICAgICByZXF1aXJlc196aXA2NCA9ICJGaWxlcyBjb3VudCIKLSAgICAgICAgICAgICAgICBlbGlmIGNlbnREaXJPZmZzZXQgPiBaSVA2NF9MSU1JVDoKLSAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXNfemlwNjQgPSAiQ2VudHJhbCBkaXJlY3Rvcnkgb2Zmc2V0IgotICAgICAgICAgICAgICAgIGVsaWYgY2VudERpclNpemUgPiBaSVA2NF9MSU1JVDoKLSAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXNfemlwNjQgPSAiQ2VudHJhbCBkaXJlY3Rvcnkgc2l6ZSIKLSAgICAgICAgICAgICAgICBpZiByZXF1aXJlc196aXA2NDoKLSAgICAgICAgICAgICAgICAgICAgIyBOZWVkIHRvIHdyaXRlIHRoZSBaSVA2NCBlbmQtb2YtYXJjaGl2ZSByZWNvcmRzCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9hbGxvd1ppcDY0OgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKHJlcXVpcmVzX3ppcDY0ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCi0gICAgICAgICAgICAgICAgICAgIHppcDY0ZW5kcmVjID0gc3RydWN0LnBhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0LCBzdHJpbmdFbmRBcmNoaXZlNjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQsIDQ1LCA0NSwgMCwgMCwgY2VudERpckNvdW50LCBjZW50RGlyQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemlwNjRlbmRyZWMpCi0KLSAgICAgICAgICAgICAgICAgICAgemlwNjRsb2NyZWMgPSBzdHJ1Y3QucGFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjRMb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0VuZEFyY2hpdmU2NExvY2F0b3IsIDAsIHBvczIsIDEpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemlwNjRsb2NyZWMpCi0gICAgICAgICAgICAgICAgICAgIGNlbnREaXJDb3VudCA9IG1pbihjZW50RGlyQ291bnQsIDB4RkZGRikKLSAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUgPSBtaW4oY2VudERpclNpemUsIDB4RkZGRkZGRkYpCi0gICAgICAgICAgICAgICAgICAgIGNlbnREaXJPZmZzZXQgPSBtaW4oY2VudERpck9mZnNldCwgMHhGRkZGRkZGRikKLQotICAgICAgICAgICAgICAgIGVuZHJlYyA9IHN0cnVjdC5wYWNrKHN0cnVjdEVuZEFyY2hpdmUsIHN0cmluZ0VuZEFyY2hpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBjZW50RGlyQ291bnQsIGNlbnREaXJDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplLCBjZW50RGlyT2Zmc2V0LCBsZW4oc2VsZi5fY29tbWVudCkpCi0gICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShlbmRyZWMpCi0gICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShzZWxmLl9jb21tZW50KQotICAgICAgICAgICAgICAgIHNlbGYuZnAuZmx1c2goKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAgPSBzZWxmLmZwCi0gICAgICAgICAgICBzZWxmLmZwID0gTm9uZQotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVQYXNzZWQ6Ci0gICAgICAgICAgICAgICAgZnAuY2xvc2UoKQotCi0KLWNsYXNzIFB5WmlwRmlsZShaaXBGaWxlKToKLSAgICAiIiJDbGFzcyB0byBjcmVhdGUgWklQIGFyY2hpdmVzIHdpdGggUHl0aG9uIGxpYnJhcnkgZmlsZXMgYW5kIHBhY2thZ2VzLiIiIgotCi0gICAgZGVmIHdyaXRlcHkoc2VsZiwgcGF0aG5hbWUsIGJhc2VuYW1lID0gIiIpOgotICAgICAgICAiIiJBZGQgYWxsIGZpbGVzIGZyb20gInBhdGhuYW1lIiB0byB0aGUgWklQIGFyY2hpdmUuCi0KLSAgICAgICAgSWYgcGF0aG5hbWUgaXMgYSBwYWNrYWdlIGRpcmVjdG9yeSwgc2VhcmNoIHRoZSBkaXJlY3RvcnkgYW5kCi0gICAgICAgIGFsbCBwYWNrYWdlIHN1YmRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5IGZvciBhbGwgKi5weSBhbmQgZW50ZXIKLSAgICAgICAgdGhlIG1vZHVsZXMgaW50byB0aGUgYXJjaGl2ZS4gIElmIHBhdGhuYW1lIGlzIGEgcGxhaW4KLSAgICAgICAgZGlyZWN0b3J5LCBsaXN0ZGlyICoucHkgYW5kIGVudGVyIGFsbCBtb2R1bGVzLiAgRWxzZSwgcGF0aG5hbWUKLSAgICAgICAgbXVzdCBiZSBhIFB5dGhvbiAqLnB5IGZpbGUgYW5kIHRoZSBtb2R1bGUgd2lsbCBiZSBwdXQgaW50byB0aGUKLSAgICAgICAgYXJjaGl2ZS4gIEFkZGVkIG1vZHVsZXMgYXJlIGFsd2F5cyBtb2R1bGUucHlvIG9yIG1vZHVsZS5weWMuCi0gICAgICAgIFRoaXMgbWV0aG9kIHdpbGwgY29tcGlsZSB0aGUgbW9kdWxlLnB5IGludG8gbW9kdWxlLnB5YyBpZgotICAgICAgICBuZWNlc3NhcnkuCi0gICAgICAgICIiIgotICAgICAgICBkaXIsIG5hbWUgPSBvcy5wYXRoLnNwbGl0KHBhdGhuYW1lKQotICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGhuYW1lKToKLSAgICAgICAgICAgIGluaXRuYW1lID0gb3MucGF0aC5qb2luKHBhdGhuYW1lLCAiX19pbml0X18ucHkiKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoaW5pdG5hbWUpOgotICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhIHBhY2thZ2UgZGlyZWN0b3J5LCBhZGQgaXQKLSAgICAgICAgICAgICAgICBpZiBiYXNlbmFtZToKLSAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUgPSAiJXMvJXMiICUgKGJhc2VuYW1lLCBuYW1lKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gbmFtZQotICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICJBZGRpbmcgcGFja2FnZSBpbiIsIHBhdGhuYW1lLCAiYXMiLCBiYXNlbmFtZQotICAgICAgICAgICAgICAgIGZuYW1lLCBhcmNuYW1lID0gc2VsZi5fZ2V0X2NvZGVuYW1lKGluaXRuYW1lWzA6LTNdLCBiYXNlbmFtZSkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgotICAgICAgICAgICAgICAgICAgICBwcmludCAiQWRkaW5nIiwgYXJjbmFtZQotICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoZm5hbWUsIGFyY25hbWUpCi0gICAgICAgICAgICAgICAgZGlybGlzdCA9IG9zLmxpc3RkaXIocGF0aG5hbWUpCi0gICAgICAgICAgICAgICAgZGlybGlzdC5yZW1vdmUoIl9faW5pdF9fLnB5IikKLSAgICAgICAgICAgICAgICAjIEFkZCBhbGwgKi5weSBmaWxlcyBhbmQgcGFja2FnZSBzdWJkaXJlY3RvcmllcwotICAgICAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBkaXJsaXN0OgotICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGhuYW1lLCBmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgcm9vdCwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihwYXRoLCAiX19pbml0X18ucHkiKSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgcGFja2FnZSBkaXJlY3RvcnksIGFkZCBpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVweShwYXRoLCBiYXNlbmFtZSkgICMgUmVjdXJzaXZlIGNhbGwKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBleHQgPT0gIi5weSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSwgYXJjbmFtZSA9IHNlbGYuX2dldF9jb2RlbmFtZShwYXRoWzA6LTNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkFkZGluZyIsIGFyY25hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoZm5hbWUsIGFyY25hbWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgVGhpcyBpcyBOT1QgYSBwYWNrYWdlIGRpcmVjdG9yeSwgYWRkIGl0cyBmaWxlcyBhdCB0b3AgbGV2ZWwKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgotICAgICAgICAgICAgICAgICAgICBwcmludCAiQWRkaW5nIGZpbGVzIGZyb20gZGlyZWN0b3J5IiwgcGF0aG5hbWUKLSAgICAgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihwYXRobmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aG5hbWUsIGZpbGVuYW1lKQotICAgICAgICAgICAgICAgICAgICByb290LCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQotICAgICAgICAgICAgICAgICAgICBpZiBleHQgPT0gIi5weSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSwgYXJjbmFtZSA9IHNlbGYuX2dldF9jb2RlbmFtZShwYXRoWzA6LTNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkFkZGluZyIsIGFyY25hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoZm5hbWUsIGFyY25hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBwYXRobmFtZVstMzpdICE9ICIucHkiOgotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgXAotICAgICAgICAgICAgICAgICAgICAgICdGaWxlcyBhZGRlZCB3aXRoIHdyaXRlcHkoKSBtdXN0IGVuZCB3aXRoICIucHkiJwotICAgICAgICAgICAgZm5hbWUsIGFyY25hbWUgPSBzZWxmLl9nZXRfY29kZW5hbWUocGF0aG5hbWVbMDotM10sIGJhc2VuYW1lKQotICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKLSAgICAgICAgICAgICAgICBwcmludCAiQWRkaW5nIGZpbGUiLCBhcmNuYW1lCi0gICAgICAgICAgICBzZWxmLndyaXRlKGZuYW1lLCBhcmNuYW1lKQotCi0gICAgZGVmIF9nZXRfY29kZW5hbWUoc2VsZiwgcGF0aG5hbWUsIGJhc2VuYW1lKToKLSAgICAgICAgIiIiUmV0dXJuIChmaWxlbmFtZSwgYXJjaGl2ZW5hbWUpIGZvciB0aGUgcGF0aC4KLQotICAgICAgICBHaXZlbiBhIG1vZHVsZSBuYW1lIHBhdGgsIHJldHVybiB0aGUgY29ycmVjdCBmaWxlIHBhdGggYW5kCi0gICAgICAgIGFyY2hpdmUgbmFtZSwgY29tcGlsaW5nIGlmIG5lY2Vzc2FyeS4gIEZvciBleGFtcGxlLCBnaXZlbgotICAgICAgICAvcHl0aG9uL2xpYi9zdHJpbmcsIHJldHVybiAoL3B5dGhvbi9saWIvc3RyaW5nLnB5Yywgc3RyaW5nKS4KLSAgICAgICAgIiIiCi0gICAgICAgIGZpbGVfcHkgID0gcGF0aG5hbWUgKyAiLnB5IgotICAgICAgICBmaWxlX3B5YyA9IHBhdGhuYW1lICsgIi5weWMiCi0gICAgICAgIGZpbGVfcHlvID0gcGF0aG5hbWUgKyAiLnB5byIKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZV9weW8pIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdChmaWxlX3B5bykuc3RfbXRpbWUgPj0gb3Muc3RhdChmaWxlX3B5KS5zdF9tdGltZToKLSAgICAgICAgICAgIGZuYW1lID0gZmlsZV9weW8gICAgIyBVc2UgLnB5byBmaWxlCi0gICAgICAgIGVsaWYgbm90IG9zLnBhdGguaXNmaWxlKGZpbGVfcHljKSBvciBcCi0gICAgICAgICAgICAgb3Muc3RhdChmaWxlX3B5Yykuc3RfbXRpbWUgPCBvcy5zdGF0KGZpbGVfcHkpLnN0X210aW1lOgotICAgICAgICAgICAgaW1wb3J0IHB5X2NvbXBpbGUKLSAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIkNvbXBpbGluZyIsIGZpbGVfcHkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZV9weSwgZmlsZV9weWMsIE5vbmUsIFRydWUpCi0gICAgICAgICAgICBleGNlcHQgcHlfY29tcGlsZS5QeUNvbXBpbGVFcnJvcixlcnI6Ci0gICAgICAgICAgICAgICAgcHJpbnQgZXJyLm1zZwotICAgICAgICAgICAgZm5hbWUgPSBmaWxlX3B5YwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm5hbWUgPSBmaWxlX3B5YwotICAgICAgICBhcmNoaXZlbmFtZSA9IG9zLnBhdGguc3BsaXQoZm5hbWUpWzFdCi0gICAgICAgIGlmIGJhc2VuYW1lOgotICAgICAgICAgICAgYXJjaGl2ZW5hbWUgPSAiJXMvJXMiICUgKGJhc2VuYW1lLCBhcmNoaXZlbmFtZSkKLSAgICAgICAgcmV0dXJuIChmbmFtZSwgYXJjaGl2ZW5hbWUpCi0KLQotZGVmIG1haW4oYXJncyA9IE5vbmUpOgotICAgIGltcG9ydCB0ZXh0d3JhcAotICAgIFVTQUdFPXRleHR3cmFwLmRlZGVudCgiIiJcCi0gICAgICAgIFVzYWdlOgotICAgICAgICAgICAgemlwZmlsZS5weSAtbCB6aXBmaWxlLnppcCAgICAgICAgIyBTaG93IGxpc3Rpbmcgb2YgYSB6aXBmaWxlCi0gICAgICAgICAgICB6aXBmaWxlLnB5IC10IHppcGZpbGUuemlwICAgICAgICAjIFRlc3QgaWYgYSB6aXBmaWxlIGlzIHZhbGlkCi0gICAgICAgICAgICB6aXBmaWxlLnB5IC1lIHppcGZpbGUuemlwIHRhcmdldCAjIEV4dHJhY3QgemlwZmlsZSBpbnRvIHRhcmdldCBkaXIKLSAgICAgICAgICAgIHppcGZpbGUucHkgLWMgemlwZmlsZS56aXAgc3JjIC4uLiAjIENyZWF0ZSB6aXBmaWxlIGZyb20gc291cmNlcwotICAgICAgICAiIiIpCi0gICAgaWYgYXJncyBpcyBOb25lOgotICAgICAgICBhcmdzID0gc3lzLmFyZ3ZbMTpdCi0KLSAgICBpZiBub3QgYXJncyBvciBhcmdzWzBdIG5vdCBpbiAoJy1sJywgJy1jJywgJy1lJywgJy10Jyk6Ci0gICAgICAgIHByaW50IFVTQUdFCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBpZiBhcmdzWzBdID09ICctbCc6Ci0gICAgICAgIGlmIGxlbihhcmdzKSAhPSAyOgotICAgICAgICAgICAgcHJpbnQgVVNBR0UKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgICAgIHdpdGggWmlwRmlsZShhcmdzWzFdLCAncicpIGFzIHpmOgotICAgICAgICAgICAgemYucHJpbnRkaXIoKQotCi0gICAgZWxpZiBhcmdzWzBdID09ICctdCc6Ci0gICAgICAgIGlmIGxlbihhcmdzKSAhPSAyOgotICAgICAgICAgICAgcHJpbnQgVVNBR0UKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgICAgIHdpdGggWmlwRmlsZShhcmdzWzFdLCAncicpIGFzIHpmOgotICAgICAgICAgICAgYmFkZmlsZSA9IHpmLnRlc3R6aXAoKQotICAgICAgICBpZiBiYWRmaWxlOgotICAgICAgICAgICAgcHJpbnQoIlRoZSBmb2xsb3dpbmcgZW5jbG9zZWQgZmlsZSBpcyBjb3JydXB0ZWQ6IHshcn0iLmZvcm1hdChiYWRmaWxlKSkKLSAgICAgICAgcHJpbnQgIkRvbmUgdGVzdGluZyIKLQotICAgIGVsaWYgYXJnc1swXSA9PSAnLWUnOgotICAgICAgICBpZiBsZW4oYXJncykgIT0gMzoKLSAgICAgICAgICAgIHByaW50IFVTQUdFCi0gICAgICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgICAgIHdpdGggWmlwRmlsZShhcmdzWzFdLCAncicpIGFzIHpmOgotICAgICAgICAgICAgemYuZXh0cmFjdGFsbChhcmdzWzJdKQotCi0gICAgZWxpZiBhcmdzWzBdID09ICctYyc6Ci0gICAgICAgIGlmIGxlbihhcmdzKSA8IDM6Ci0gICAgICAgICAgICBwcmludCBVU0FHRQotICAgICAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgICAgICBkZWYgYWRkVG9aaXAoemYsIHBhdGgsIHppcHBhdGgpOgotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6Ci0gICAgICAgICAgICAgICAgemYud3JpdGUocGF0aCwgemlwcGF0aCwgWklQX0RFRkxBVEVEKQotICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgotICAgICAgICAgICAgICAgIGlmIHppcHBhdGg6Ci0gICAgICAgICAgICAgICAgICAgIHpmLndyaXRlKHBhdGgsIHppcHBhdGgpCi0gICAgICAgICAgICAgICAgZm9yIG5tIGluIG9zLmxpc3RkaXIocGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvWmlwKHpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRoLCBubSksIG9zLnBhdGguam9pbih6aXBwYXRoLCBubSkpCi0gICAgICAgICAgICAjIGVsc2U6IGlnbm9yZQotCi0gICAgICAgIHdpdGggWmlwRmlsZShhcmdzWzFdLCAndycsIGFsbG93WmlwNjQ9VHJ1ZSkgYXMgemY6Ci0gICAgICAgICAgICBmb3IgcGF0aCBpbiBhcmdzWzI6XToKLSAgICAgICAgICAgICAgICB6aXBwYXRoID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQotICAgICAgICAgICAgICAgIGlmIG5vdCB6aXBwYXRoOgotICAgICAgICAgICAgICAgICAgICB6aXBwYXRoID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmRpcm5hbWUocGF0aCkpCi0gICAgICAgICAgICAgICAgaWYgemlwcGF0aCBpbiAoJycsIG9zLmN1cmRpciwgb3MucGFyZGlyKToKLSAgICAgICAgICAgICAgICAgICAgemlwcGF0aCA9ICcnCi0gICAgICAgICAgICAgICAgYWRkVG9aaXAoemYsIHBhdGgsIHppcHBhdGgpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9jYXRhcHVsdC90cmFjaW5nL3RyYWNpbmcvX19pbml0X18ucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC90cmFjaW5nL3RyYWNpbmcvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MDYzYWEuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvdHJhY2luZy90cmFjaW5nL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgdHJhY2luZ19wcm9qZWN0Ci10cmFjaW5nX3Byb2plY3QuVXBkYXRlU3lzUGF0aElmTmVlZGVkKCkKZGlmZiAtLWdpdCBhL3N5c3RyYWNlL2NhdGFwdWx0L3RyYWNpbmcvdHJhY2luZy90cmFjZV9kYXRhL19faW5pdF9fLnB5IGIvc3lzdHJhY2UvY2F0YXB1bHQvdHJhY2luZy90cmFjaW5nL3RyYWNlX2RhdGEvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYjFmMjYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvdHJhY2luZy90cmFjaW5nL3RyYWNlX2RhdGEvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvdHJhY2luZy90cmFjaW5nL3RyYWNlX2RhdGEvdHJhY2VfZGF0YS5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3RyYWNpbmcvdHJhY2luZy90cmFjZV9kYXRhL3RyYWNlX2RhdGEucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNmY2MjQuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvdHJhY2luZy90cmFjaW5nL3RyYWNlX2RhdGEvdHJhY2VfZGF0YS5weQorKysgL2Rldi9udWxsCkBAIC0xLDM0MCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBjb3B5Ci1pbXBvcnQganNvbgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCB0ZW1wZmlsZQotCi0KLV9UUkFDSU5HX0RJUiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5wYXJkaXIsIG9zLnBhdGgucGFyZGlyKQotX1RSQUNFMkhUTUxfUEFUSCA9IG9zLnBhdGguam9pbihfVFJBQ0lOR19ESVIsICdiaW4nLCAndHJhY2UyaHRtbCcpCi0KLQotY2xhc3MgTm9uU2VyaWFsaXphYmxlVHJhY2VEYXRhKEV4Y2VwdGlvbik6Ci0gICIiIlJhaXNlZCB3aGVuIHJhdyB0cmFjZSBkYXRhIGNhbm5vdCBiZSBzZXJpYWxpemVkIHRvIFRyYWNlRGF0YS4iIiIKLSAgcGFzcwotCi0KLWNsYXNzIFRyYWNlRGF0YVBhcnQob2JqZWN0KToKLSAgIiIiVHJhY2VEYXRhIGNhbiBoYXZlIGEgdmFyaWV0eSBvZiBldmVudHMuCi0KLSAgVGhlc2UgYXJlIGNhbGxlZCAicGFydHMiIGFuZCBhcmUgYWNjZXNzZWQgYnkgdGhlIGZvbGxvd2luZyBmaXhlZCBmaWVsZCBuYW1lcy4KLSAgIiIiCi0gIGRlZiBfX2luaXRfXyhzZWxmLCByYXdfZmllbGRfbmFtZSk6Ci0gICAgc2VsZi5fcmF3X2ZpZWxkX25hbWUgPSByYXdfZmllbGRfbmFtZQotCi0gIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICByZXR1cm4gJ1RyYWNlRGF0YVBhcnQoIiVzIiknICUgc2VsZi5fcmF3X2ZpZWxkX25hbWUKLQotICBAcHJvcGVydHkKLSAgZGVmIHJhd19maWVsZF9uYW1lKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9yYXdfZmllbGRfbmFtZQotCi0gIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgIHJldHVybiBzZWxmLnJhd19maWVsZF9uYW1lID09IG90aGVyLnJhd19maWVsZF9uYW1lCi0KLSAgZGVmIF9faGFzaF9fKHNlbGYpOgotICAgIHJldHVybiBoYXNoKHNlbGYucmF3X2ZpZWxkX25hbWUpCi0KLQotQU5EUk9JRF9QUk9DRVNTX0RBVEFfUEFSVCA9IFRyYWNlRGF0YVBhcnQoJ2FuZHJvaWRQcm9jZXNzRHVtcCcpCi1BVFJBQ0VfUEFSVCA9IFRyYWNlRGF0YVBhcnQoJ3N5c3RlbVRyYWNlRXZlbnRzJykKLUFUUkFDRV9QUk9DRVNTX0RVTVBfUEFSVCA9IFRyYWNlRGF0YVBhcnQoJ2F0cmFjZVByb2Nlc3NEdW1wJykKLUJBVFRPUl9UUkFDRV9QQVJUID0gVHJhY2VEYXRhUGFydCgncG93ZXJUcmFjZUFzU3RyaW5nJykKLUNIUk9NRV9UUkFDRV9QQVJUID0gVHJhY2VEYXRhUGFydCgndHJhY2VFdmVudHMnKQotQ1BVX1RSQUNFX0RBVEEgPSBUcmFjZURhdGFQYXJ0KCdjcHVTbmFwc2hvdHMnKQotSU5TUEVDVE9SX1RSQUNFX1BBUlQgPSBUcmFjZURhdGFQYXJ0KCdpbnNwZWN0b3JUaW1lbGluZUV2ZW50cycpCi1TVVJGQUNFX0ZMSU5HRVJfUEFSVCA9IFRyYWNlRGF0YVBhcnQoJ3N1cmZhY2VGbGluZ2VyJykKLVRBQl9JRF9QQVJUID0gVHJhY2VEYXRhUGFydCgndGFiSWRzJykKLVRFTEVNRVRSWV9QQVJUID0gVHJhY2VEYXRhUGFydCgndGVsZW1ldHJ5JykKLVdBTFRfVFJBQ0VfUEFSVCA9IFRyYWNlRGF0YVBhcnQoJ3dhbHRUcmFjZUV2ZW50cycpCi0KLUFMTF9UUkFDRV9QQVJUUyA9IHtBTkRST0lEX1BST0NFU1NfREFUQV9QQVJULAotICAgICAgICAgICAgICAgICAgIEFUUkFDRV9QQVJULAotICAgICAgICAgICAgICAgICAgIEFUUkFDRV9QUk9DRVNTX0RVTVBfUEFSVCwKLSAgICAgICAgICAgICAgICAgICBCQVRUT1JfVFJBQ0VfUEFSVCwKLSAgICAgICAgICAgICAgICAgICBDSFJPTUVfVFJBQ0VfUEFSVCwKLSAgICAgICAgICAgICAgICAgICBDUFVfVFJBQ0VfREFUQSwKLSAgICAgICAgICAgICAgICAgICBJTlNQRUNUT1JfVFJBQ0VfUEFSVCwKLSAgICAgICAgICAgICAgICAgICBTVVJGQUNFX0ZMSU5HRVJfUEFSVCwKLSAgICAgICAgICAgICAgICAgICBUQUJfSURfUEFSVCwKLSAgICAgICAgICAgICAgICAgICBURUxFTUVUUllfUEFSVH0KLQotQUxMX1RSQUNFX1BBUlRTX1JBV19OQU1FUyA9IHNldChrLnJhd19maWVsZF9uYW1lIGZvciBrIGluIEFMTF9UUkFDRV9QQVJUUykKLQotZGVmIF9IYXNUcmFjZUZvcihwYXJ0LCByYXcpOgotICBhc3NlcnQgaXNpbnN0YW5jZShwYXJ0LCBUcmFjZURhdGFQYXJ0KQotICBpZiBwYXJ0LnJhd19maWVsZF9uYW1lIG5vdCBpbiByYXc6Ci0gICAgcmV0dXJuIEZhbHNlCi0gIHJldHVybiBsZW4ocmF3W3BhcnQucmF3X2ZpZWxkX25hbWVdKSA+IDAKLQotCi1kZWYgX0dldEZpbGVQYXRoRm9yVHJhY2UodHJhY2UsIGRpcl9wYXRoKToKLSAgIiIiIFJldHVybiBwYXRoIHRvIGEgZmlsZSB0aGF0IGNvbnRhaW5zIHx0cmFjZXwuCi0KLSAgTm90ZTogaWYgfHRyYWNlfCBpcyBhbiBpbnN0YW5jZSBvZiBUcmFjZUZpbGVIYW5kbGUsIHRoaXMgcmV1c2VzIHRoZSB0cmFjZSBwYXRoCi0gIHRoYXQgdGhlIHRyYWNlIGZpbGUgaGFuZGxlIGhvbGRzLiBPdGhlcndpc2UsIGl0IGNyZWF0ZXMgYSBuZXcgdHJhY2UgZmlsZQotICBpbiB8ZGlyX3BhdGh8IGRpcmVjdG9yeS4KLSAgIiIiCi0gIGlmIGlzaW5zdGFuY2UodHJhY2UsIFRyYWNlRmlsZUhhbmRsZSk6Ci0gICAgcmV0dXJuIHRyYWNlLmZpbGVfcGF0aAotICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShtb2RlPSd3JywgZGlyPWRpcl9wYXRoLCBkZWxldGU9RmFsc2UpIGFzIGZwOgotICAgIGlmIGlzaW5zdGFuY2UodHJhY2UsIGJhc2VzdHJpbmcpOgotICAgICAgZnAud3JpdGUodHJhY2UpCi0gICAgZWxpZiBpc2luc3RhbmNlKHRyYWNlLCBkaWN0KSBvciBpc2luc3RhbmNlKHRyYWNlLCBsaXN0KToKLSAgICAgIGpzb24uZHVtcCh0cmFjZSwgZnApCi0gICAgZWxzZToKLSAgICAgIHJhaXNlIFR5cGVFcnJvcignVHJhY2UgaXMgb2YgdW5rbm93biB0eXBlLicpCi0gICAgcmV0dXJuIGZwLm5hbWUKLQotCi1jbGFzcyBUcmFjZURhdGEob2JqZWN0KToKLSAgIiIiIFRyYWNlRGF0YSBob2xkcyBhIGNvbGxlY3Rpb24gb2YgdHJhY2VzIGZyb20gbXVsdGlwbGUgc291cmNlcy4KLQotICBBIFRyYWNlRGF0YSBjYW4gaGF2ZSBtdWx0aXBsZSBhY3RpdmUgcGFydHMuIEVhY2ggcGFydCByZXByZXNlbnRzIHRyYWNlcwotICBjb2xsZWN0ZWQgZnJvbSBhIGRpZmZlcmVudCB0cmFjZSBhZ2VudC4KLSAgIiIiCi0gIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAiIiJDcmVhdGVzIFRyYWNlRGF0YSBmcm9tIHRoZSBnaXZlbiBkYXRhLiIiIgotICAgIHNlbGYuX3Jhd19kYXRhID0ge30KLSAgICBzZWxmLl9ldmVudHNfYXJlX3NhZmVseV9tdXRhYmxlID0gRmFsc2UKLQotICBkZWYgX1NldEZyb21CdWlsZGVyKHNlbGYsIGQpOgotICAgIHNlbGYuX3Jhd19kYXRhID0gZAotICAgIHNlbGYuX2V2ZW50c19hcmVfc2FmZWx5X211dGFibGUgPSBUcnVlCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBldmVudHNfYXJlX3NhZmVseV9tdXRhYmxlKHNlbGYpOgotICAgICIiIlJldHVybnMgdHJ1ZSBpZiB0aGUgZXZlbnRzIGluIHRoaXMgdmFsdWUgYXJlIGNvbXBsZXRlbHkgc2VhbGVkLgotCi0gICAgU29tZSBpbXBvcnRlcnMgd2FudCB0byB0YWtlIGNvbXBsZXggZmllbGRzIG91dCBvZiB0aGUgVHJhY2VEYXRhIGFuZCBhZGQKLSAgICB0aGVtIHRvIHRoZSBtb2RlbCwgY2hhbmdpbmcgdGhlbSBzdWJ0bHkgYXMgdGhleSBkbyBzby4gSWYgdGhlIFRyYWNlRGF0YQotICAgIHdhcyBjb25zdHJ1Y3RlZCB3aXRoIGRhdGEgdGhhdCBpcyBzaGFyZWQgd2l0aCBzb21ldGhpbmcgb3V0c2lkZSB0aGUgdHJhY2UKLSAgICBkYXRhLCBmb3IgaW5zdGFuY2UgYSB0ZXN0IGhhcm5lc3MsIHRoZW4gdGhpcyBtdXRhdGlvbiBpcyB1bmV4cGVjdGVkLiBCdXQsCi0gICAgaWYgdGhlIHZhbHVlcyBhcmUgc2VhbGVkLCB0aGVuIG11dGF0aW5nIHRoZSBldmVudHMgaXMgYSBsb3QgZmFzdGVyLgotCi0gICAgV2Uga25vdyBpZiBldmVudHMgYXJlIHNlYWxlZCBpZiB0aGUgdmFsdWUgY2FtZSBmcm9tIGEgc3RyaW5nLCBvciBpZiB0aGUKLSAgICB2YWx1ZSBjYW1lIGZyb20gYSBUcmFjZURhdGFCdWlsZGVyLgotICAgICIiIgotICAgIHJldHVybiBzZWxmLl9ldmVudHNfYXJlX3NhZmVseV9tdXRhYmxlCi0KLSAgQHByb3BlcnR5Ci0gIGRlZiBhY3RpdmVfcGFydHMoc2VsZik6Ci0gICAgcmV0dXJuIHtwIGZvciBwIGluIEFMTF9UUkFDRV9QQVJUUyBpZiBwLnJhd19maWVsZF9uYW1lIGluIHNlbGYuX3Jhd19kYXRhfQotCi0gIGRlZiBIYXNUcmFjZXNGb3Ioc2VsZiwgcGFydCk6Ci0gICAgcmV0dXJuIF9IYXNUcmFjZUZvcihwYXJ0LCBzZWxmLl9yYXdfZGF0YSkKLQotICBkZWYgR2V0VHJhY2VzRm9yKHNlbGYsIHBhcnQpOgotICAgICIiIiBSZXR1cm4gdGhlIGxpc3Qgb2YgdHJhY2VzIGZvciB8cGFydHwgaW4gc3RyaW5nIG9yIGRpY3Rpb25hcnkgZm9ybXMuCi0KLSAgICBOb3RlOiBzaW5jZSB0aGlzIEFQSSByZXR1cm4gdGhlIHRyYWNlcyB0aGF0IGNhbiBiZSBkaXJlY3RseSBhY2Nlc3NlZCBpbgotICAgIG1lbW9yeSwgaXQgbWF5IHJlcXVpcmUgbG90cyBvZiBtZW1vcnkgdXNhZ2UgYXMgc29tZSBvZiB0aGUgdHJhY2UgY2FuIGJlCi0gICAgdmVyeSBiaWcuCi0gICAgRm9yIHJlZmVyZW5jZXMsIHdlIGhhdmUgY2FzZXMgd2hlcmUgVGVsZW1ldHJ5IGlzIE9PTSdlZCBiZWNhdXNlIHRoZSBtZW1vcnkKLSAgICByZXF1aXJlZCBmb3IgcHJvY2Vzc2luZyB0aGUgdHJhY2UgaW4gUHl0aG9uIGlzIHRvbyBiaWcgKGNyYnVnLmNvbS82NzIwOTcpLgotICAgICIiIgotICAgIGFzc2VydCBpc2luc3RhbmNlKHBhcnQsIFRyYWNlRGF0YVBhcnQpCi0gICAgaWYgbm90IHNlbGYuSGFzVHJhY2VzRm9yKHBhcnQpOgotICAgICAgcmV0dXJuIFtdCi0gICAgdHJhY2VzX2xpc3QgPSBzZWxmLl9yYXdfZGF0YVtwYXJ0LnJhd19maWVsZF9uYW1lXQotICAgICMgU2luY2UgdGhpcyBBUEkgcmV0dXJuIHRoZSB0cmFjZXMgaW4gbWVtb3J5IGZvcm0sIGFuZCBzaW5jZSB0aGUgbWVtb3J5Ci0gICAgIyBib3R0bGVuZWNrIG9mIFRlbGVtZXRyeSBpcyBmb3Iga2VlcGluZyB0cmFjZSBpbiBtZW1vcnksIHRoZXJlIGlzIG5vIHVzZXMKLSAgICAjIGluIGtlZXBpbmcgdGhlIG9uLWRpc2sgZm9ybSBvZiB0cmFjaW5nIGJleW9uZCB0aGlzIHBvaW50LiBIZW5jZSB3ZSBjb252ZXJ0Ci0gICAgIyBhbGwgdHJhY2VzIGZvciBwYXJ0IG9mIGZvcm0gVHJhY2VGaWxlSGFuZGxlIHRvIHRoZSBKU09OIGZvcm0uCi0gICAgZm9yIGksIGRhdGEgaW4gZW51bWVyYXRlKHRyYWNlc19saXN0KToKLSAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgVHJhY2VGaWxlSGFuZGxlKToKLSAgICAgICAgdHJhY2VzX2xpc3RbaV0gPSBkYXRhLkFzVHJhY2VEYXRhKCkKLSAgICByZXR1cm4gdHJhY2VzX2xpc3QKLQotICBkZWYgR2V0VHJhY2VGb3Ioc2VsZiwgcGFydCk6Ci0gICAgYXNzZXJ0IGlzaW5zdGFuY2UocGFydCwgVHJhY2VEYXRhUGFydCkKLSAgICB0cmFjZXMgPSBzZWxmLkdldFRyYWNlc0ZvcihwYXJ0KQotICAgIGFzc2VydCBsZW4odHJhY2VzKSA9PSAxCi0gICAgcmV0dXJuIHRyYWNlc1swXQotCi0gIGRlZiBDbGVhblVwQWxsVHJhY2VzKHNlbGYpOgotICAgICIiIiBSZW1vdmUgYWxsIHRoZSB0cmFjZXMgdGhhdCB0aGlzIGhhcyBoYW5kbGVzIHRvLgotCi0gICAgVGhvc2UgaW5jbHVkZSB0cmFjZXMgc3RvcmVkIGluIG1lbW9yeSAmIG9uIGRpc2suIEFmdGVyIGludm9raW5nIHRoaXMsCi0gICAgb25lIGNhbiBubyBsb25nZXIgdXNlcyB0aGlzIG9iamVjdCBmb3IgY29sbGVjdGluZyB0aGUgdHJhY2VzLgotICAgICIiIgotICAgIGZvciB0cmFjZXNfbGlzdCBpbiBzZWxmLl9yYXdfZGF0YS5pdGVydmFsdWVzKCk6Ci0gICAgICBmb3IgdHJhY2UgaW4gdHJhY2VzX2xpc3Q6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodHJhY2UsIFRyYWNlRmlsZUhhbmRsZSk6Ci0gICAgICAgICAgdHJhY2UuQ2xlYW4oKQotICAgIHNlbGYuX3Jhd19kYXRhID0ge30KLQotICBkZWYgU2VyaWFsaXplKHNlbGYsIGZpbGVfcGF0aCwgdHJhY2VfdGl0bGU9JycpOgotICAgICIiIlNlcmlhbGl6ZXMgdGhlIHRyYWNlIHJlc3VsdCB0byB8ZmlsZV9wYXRofC4KLQotICAgICIiIgotICAgIGlmIG5vdCBzZWxmLl9yYXdfZGF0YToKLSAgICAgIGxvZ2dpbmcud2FybmluZygnTm8gdHJhY2VzIHRvIGNvbnZlcnQgdG8gaHRtbC4nKQotICAgICAgcmV0dXJuCi0gICAgdGVtcF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKLSAgICB0cmFjZV9maWxlcyA9IFtdCi0gICAgdHJ5OgotICAgICAgdHJhY2Vfc2l6ZV9kYXRhID0ge30KLSAgICAgIGZvciBwYXJ0LCB0cmFjZXNfbGlzdCBpbiBzZWxmLl9yYXdfZGF0YS5pdGVyaXRlbXMoKToKLSAgICAgICAgZm9yIHRyYWNlIGluIHRyYWNlc19saXN0OgotICAgICAgICAgIHBhdGggPSBfR2V0RmlsZVBhdGhGb3JUcmFjZSh0cmFjZSwgdGVtcF9kaXIpCi0gICAgICAgICAgdHJhY2Vfc2l6ZV9kYXRhLnNldGRlZmF1bHQocGFydCwgMCkKLSAgICAgICAgICB0cmFjZV9zaXplX2RhdGFbcGFydF0gKz0gb3MucGF0aC5nZXRzaXplKHBhdGgpCi0gICAgICAgICAgdHJhY2VfZmlsZXMuYXBwZW5kKHBhdGgpCi0gICAgICBsb2dnaW5nLmluZm8oJ1RyYWNlIHNpemVzIGluIGJ5dGVzOiAlcycsIHRyYWNlX3NpemVfZGF0YSkKLQotICAgICAgY21kID0gKFsncHl0aG9uJywgX1RSQUNFMkhUTUxfUEFUSF0gKyB0cmFjZV9maWxlcyArCi0gICAgICAgICAgICAgWyctLW91dHB1dCcsIGZpbGVfcGF0aF0gKyBbJy0tdGl0bGUnLCB0cmFjZV90aXRsZV0pCi0gICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQpCi0gICAgZmluYWxseToKLSAgICAgIHNodXRpbC5ybXRyZWUodGVtcF9kaXIpCi0KLQotY2xhc3MgVHJhY2VGaWxlSGFuZGxlKG9iamVjdCk6Ci0gICIiIkEgdHJhY2UgZmlsZSBoYW5kbGUgb2JqZWN0IGFsbG93cyBzdG9yaW5nIHRyYWNlIGRhdGEgb24gZGlzay4KLQotICBUcmFjZUZpbGVIYW5kbGUgQVBJIGFsbG93cyBvbmUgdG8gY29sbGVjdCB0cmFjZXMgZnJvbSBDaHJvbWUgaW50byBkaXNrIGluc3RlYWQKLSAgb2Yga2VlcGluZyB0aGVtIGluIG1lbW9yeS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGtlZXBpbmcgbWVtb3J5IHVzYWdlIG9mCi0gIFRlbGVtZXRyeSBsb3cgdG8gYXZvaWQgT09NIChzZWU6Ci0gIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRhcHVsdC1wcm9qZWN0L2NhdGFwdWx0L2lzc3Vlcy8zMTE5KS4KLQotICBUaGUgZmFjdCB0aGF0IHRoaXMgdXNlcyBhIGZpbGUgdW5kZXJuZWF0aCB0byBzdG9yZSB0cmFjaW5nIGRhdGEgbWVhbnMgdGhlCi0gIGNhbGxzaXRlIGlzIHJlcHNvbnNpYmxlIGZvciBkaXNjYXJkaW5nIHRoZSBmaWxlIHdoZW4gdGhleSBubyBsb25nZXIgbmVlZCB0aGUKLSAgdHJhY2luZyBkYXRhLiBDYWxsIFRyYWNlRmlsZUhhbmRsZS5DbGVhbiB3aGVuIHlvdSBkb25lIHVzaW5nIHRoaXMgb2JqZWN0LgotICAiIiIKLSAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgIHNlbGYuX2JhY2tpbmdfZmlsZSA9IE5vbmUKLSAgICBzZWxmLl9maWxlX3BhdGggPSBOb25lCi0gICAgc2VsZi5fdHJhY2VfZGF0YSA9IE5vbmUKLQotICBkZWYgT3BlbihzZWxmKToKLSAgICBhc3NlcnQgbm90IHNlbGYuX2JhY2tpbmdfZmlsZSBhbmQgbm90IHNlbGYuX2ZpbGVfcGF0aAotICAgIHNlbGYuX2JhY2tpbmdfZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UsIG1vZGU9J2EnKQotCi0gIGRlZiBBcHBlbmRUcmFjZURhdGEoc2VsZiwgcGFydGlhbF90cmFjZV9kYXRhKToKLSAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXJ0aWFsX3RyYWNlX2RhdGEsIGJhc2VzdHJpbmcpCi0gICAgc2VsZi5fYmFja2luZ19maWxlLndyaXRlKHBhcnRpYWxfdHJhY2VfZGF0YSkKLQotICBAcHJvcGVydHkKLSAgZGVmIGZpbGVfcGF0aChzZWxmKToKLSAgICBhc3NlcnQgc2VsZi5fZmlsZV9wYXRoLCAoCi0gICAgICAgICdFaXRoZXIgdGhlIGhhbmRsZSBuZWVkIHRvIGJlIGNsb3NlZCBmaXJzdCBvciB0aGlzIGhhbmRsZSBpcyBjbGVhbmVkJykKLSAgICByZXR1cm4gc2VsZi5fZmlsZV9wYXRoCi0KLSAgZGVmIENsb3NlKHNlbGYpOgotICAgIGFzc2VydCBzZWxmLl9iYWNraW5nX2ZpbGUKLSAgICBzZWxmLl9iYWNraW5nX2ZpbGUuY2xvc2UoKQotICAgIHNlbGYuX2ZpbGVfcGF0aCA9IHNlbGYuX2JhY2tpbmdfZmlsZS5uYW1lCi0gICAgc2VsZi5fYmFja2luZ19maWxlID0gTm9uZQotCi0gIGRlZiBBc1RyYWNlRGF0YShzZWxmKToKLSAgICAiIiJHZXQgdGhlIG9iamVjdCBmb3JtIG9mIHRyYWNlIGRhdGEgdGhhdCB0aGlzIGhhbmRsZSBtYW5hZ2VzLgotCi0gICAgKldhcm5pbmc6IHRoaXMgY2FuIGhhdmUgbGFyZ2UgbWVtb3J5IGZvb3RwcmludCBpZiB0aGUgdHJhY2UgZGF0YSBpcyBiaWcuCi0KLSAgICBTaW5jZSB0aGlzIHJlcXVpcmVzIHRoZSBpbi1tZW1vcnkgZm9ybSBvZiB0aGUgdHJhY2UsIGl0IGlzIG5vIGxvbmdlciB1c2VmdWwKLSAgICB0byBzdGlsbCBrZWVwIHRoZSBiYWNraW5nIGZpbGUgdW5kZXJuZWF0aCwgaW52b2tpbmcgdGhpcyB3aWxsIGFsc28gZGlzY2FyZAotICAgIHRoZSBmaWxlIHRvIGF2b2lkIHRoZSByaXNrIG9mIGxlYWtpbmcgdGhlIGJhY2tpbmcgdHJhY2UgZmlsZS4KLSAgICAiIiIKLSAgICBpZiBzZWxmLl90cmFjZV9kYXRhOgotICAgICAgcmV0dXJuIHNlbGYuX3RyYWNlX2RhdGEKLSAgICBhc3NlcnQgc2VsZi5fZmlsZV9wYXRoCi0gICAgd2l0aCBvcGVuKHNlbGYuX2ZpbGVfcGF0aCkgYXMgZjoKLSAgICAgIHNlbGYuX3RyYWNlX2RhdGEgPSBqc29uLmxvYWQoZikKLSAgICBzZWxmLkNsZWFuKCkKLSAgICByZXR1cm4gc2VsZi5fdHJhY2VfZGF0YQotCi0gIGRlZiBDbGVhbihzZWxmKToKLSAgICAiIiJSZW1vdmUgdGhlIGJhY2tpbmcgZmlsZSB1c2VkIGZvciBzdG9yaW5nIHRyYWNlIG9uIGRpc2suCi0KLSAgICBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhbmQgb25seSB3aGVuIHlvdSBubyBsb25nZXIgbmVlZCB0byB1c2UKLSAgICBUcmFjZUZpbGVIYW5kbGUuCi0gICAgIiIiCi0gICAgYXNzZXJ0IHNlbGYuX2ZpbGVfcGF0aAotICAgIG9zLnJlbW92ZShzZWxmLl9maWxlX3BhdGgpCi0gICAgc2VsZi5fZmlsZV9wYXRoID0gTm9uZQotCi0KLWNsYXNzIFRyYWNlRGF0YUJ1aWxkZXIob2JqZWN0KToKLSAgIiIiVHJhY2VEYXRhQnVpbGRlciBoZWxwcyBidWlsZCB1cCBhIHRyYWNlIGZyb20gbXVsdGlwbGUgdHJhY2UgYWdlbnRzLgotCi0gIFRyYWNlRGF0YSBpcyBzdXBwb3NlZCB0byBiZSBpbW11dGFibGUsIGJ1dCBpdCBpcyB1c2VmdWwgZHVyaW5nIHJlY29yZGluZyB0bwotICBoYXZlIGEgbXV0YWJsZSB2ZXJzaW9uLiBUaGF0IGlzIFRyYWNlRGF0YUJ1aWxkZXIuCi0gICIiIgotICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgc2VsZi5fcmF3X2RhdGEgPSB7fQotCi0gIGRlZiBBc0RhdGEoc2VsZik6Ci0gICAgaWYgc2VsZi5fcmF3X2RhdGEgPT0gTm9uZToKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbignQ2FuIG9ubHkgQXNEYXRhIG9uY2UnKQotICAgIGRhdGEgPSBUcmFjZURhdGEoKQotICAgIGRhdGEuX1NldEZyb21CdWlsZGVyKHNlbGYuX3Jhd19kYXRhKQotICAgIHNlbGYuX3Jhd19kYXRhID0gTm9uZQotICAgIHJldHVybiBkYXRhCi0KLSAgZGVmIEFkZFRyYWNlRm9yKHNlbGYsIHBhcnQsIHRyYWNlKToKLSAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXJ0LCBUcmFjZURhdGFQYXJ0KSwgcGFydAotICAgIGlmIHBhcnQgPT0gQ0hST01FX1RSQUNFX1BBUlQ6Ci0gICAgICBhc3NlcnQgKGlzaW5zdGFuY2UodHJhY2UsIGRpY3QpIG9yCi0gICAgICAgICAgICAgIGlzaW5zdGFuY2UodHJhY2UsIGxpc3QpIG9yCi0gICAgICAgICAgICAgIGlzaW5zdGFuY2UodHJhY2UsIFRyYWNlRmlsZUhhbmRsZSkpCi0gICAgZWxzZToKLSAgICAgIGFzc2VydCAoaXNpbnN0YW5jZSh0cmFjZSwgYmFzZXN0cmluZykgb3IKLSAgICAgICAgICAgICAgaXNpbnN0YW5jZSh0cmFjZSwgZGljdCkgb3IKLSAgICAgICAgICAgICAgaXNpbnN0YW5jZSh0cmFjZSwgbGlzdCkpCi0KLSAgICBpZiBzZWxmLl9yYXdfZGF0YSA9PSBOb25lOgotICAgICAgcmFpc2UgRXhjZXB0aW9uKCdBbHJlYWR5IGNhbGxlZCBBc0RhdGEoKSBvbiB0aGlzIGJ1aWxkZXIuJykKLQotICAgIHNlbGYuX3Jhd19kYXRhLnNldGRlZmF1bHQocGFydC5yYXdfZmllbGRfbmFtZSwgW10pCi0gICAgc2VsZi5fcmF3X2RhdGFbcGFydC5yYXdfZmllbGRfbmFtZV0uYXBwZW5kKHRyYWNlKQotCi0gIGRlZiBIYXNUcmFjZXNGb3Ioc2VsZiwgcGFydCk6Ci0gICAgcmV0dXJuIF9IYXNUcmFjZUZvcihwYXJ0LCBzZWxmLl9yYXdfZGF0YSkKLQotCi1kZWYgQ3JlYXRlVHJhY2VEYXRhRnJvbVJhd0RhdGEocmF3X2RhdGEpOgotICAiIiJDb252ZW5pZW50IG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBUcmFjZURhdGEgb2JqZWN0IGZyb20gfHJhd19kYXRhfC4KLSAgICAgVGhpcyBpcyBtb3N0bHkgdXNlZCBmb3IgdGVzdGluZy4KLQotICAgICBBcmdzOgotICAgICAgICByYXdfZGF0YSBjYW4gYmU6Ci0gICAgICAgICAgICArIEEgZGljdGlvbmFyeSB0aGF0IHJlcHNlbnRzIG11bHRpcGxlIHRyYWNlIHBhcnRzLiBLZXlzIG9mIHRoZQotICAgICAgICAgICAgZGljdGlvbmFyeSBtdXN0IGFsd2F5cyBjb250YWluICd0cmFjZUV2ZW50cycsIGFzIGNocm9tZSB0cmFjZQotICAgICAgICAgICAgbXVzdCBhbHdheXMgcHJlc2VudC4KLSAgICAgICAgICAgICsgQSBsaXN0IHRoYXQgcmVwcmVzZW50cyBDaHJvbWUgdHJhY2UgZXZlbnRzLgotICAgICAgICAgICAgKyBKU09OIHN0cmluZyBvZiBlaXRoZXIgYWJvdmUuCi0KLSAgIiIiCi0gIHJhd19kYXRhID0gY29weS5kZWVwY29weShyYXdfZGF0YSkKLSAgaWYgaXNpbnN0YW5jZShyYXdfZGF0YSwgYmFzZXN0cmluZyk6Ci0gICAganNvbl9kYXRhID0ganNvbi5sb2FkcyhyYXdfZGF0YSkKLSAgZWxzZToKLSAgICBqc29uX2RhdGEgPSByYXdfZGF0YQotCi0gIGIgPSBUcmFjZURhdGFCdWlsZGVyKCkKLSAgaWYgbm90IGpzb25fZGF0YToKLSAgICByZXR1cm4gYi5Bc0RhdGEoKQotICBpZiBpc2luc3RhbmNlKGpzb25fZGF0YSwgZGljdCk6Ci0gICAgYXNzZXJ0ICd0cmFjZUV2ZW50cycgaW4ganNvbl9kYXRhLCAnT25seSByYXcgY2hyb21lIHRyYWNlIGlzIHN1cHBvcnRlZCcKLSAgICB0cmFjZV9wYXJ0c19rZXlzID0gW10KLSAgICBmb3IgayBpbiBqc29uX2RhdGE6Ci0gICAgICBpZiBrICE9ICd0cmFjZUV2ZW50cycgYW5kIGsgaW4gQUxMX1RSQUNFX1BBUlRTX1JBV19OQU1FUzoKLSAgICAgICAgdHJhY2VfcGFydHNfa2V5cy5hcHBlbmQoaykKLSAgICAgICAgYi5BZGRUcmFjZUZvcihUcmFjZURhdGFQYXJ0KGspLCBqc29uX2RhdGFba10pCi0gICAgIyBEZWxldGUgdGhlIGRhdGEgZm9yIGV4dHJhIGtleXMgdG8gZm9ybSB0cmFjZSBkYXRhIGZvciBDaHJvbWUgcGFydCBvbmx5LgotICAgIGZvciBrIGluIHRyYWNlX3BhcnRzX2tleXM6Ci0gICAgICBkZWwganNvbl9kYXRhW2tdCi0gICAgYi5BZGRUcmFjZUZvcihDSFJPTUVfVFJBQ0VfUEFSVCwganNvbl9kYXRhKQotICBlbGlmIGlzaW5zdGFuY2UoanNvbl9kYXRhLCBsaXN0KToKLSAgICBiLkFkZFRyYWNlRm9yKENIUk9NRV9UUkFDRV9QQVJULCB7J3RyYWNlRXZlbnRzJzoganNvbl9kYXRhfSkKLSAgZWxzZToKLSAgICByYWlzZSBOb25TZXJpYWxpemFibGVUcmFjZURhdGEoJ1VucmVjb2duaXplZCBkYXRhIGZvcm1hdC4nKQotICByZXR1cm4gYi5Bc0RhdGEoKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvdHJhY2luZy90cmFjaW5nL3RyYWNlX2RhdGEvdHJhY2VfZGF0YV91bml0dGVzdC5weSBiL3N5c3RyYWNlL2NhdGFwdWx0L3RyYWNpbmcvdHJhY2luZy90cmFjZV9kYXRhL3RyYWNlX2RhdGFfdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNjViNGYuLjAwMDAwMDAKLS0tIGEvc3lzdHJhY2UvY2F0YXB1bHQvdHJhY2luZy90cmFjaW5nL3RyYWNlX2RhdGEvdHJhY2VfZGF0YV91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBkYXRldGltZQotaW1wb3J0IGV4Y2VwdGlvbnMKLWltcG9ydCBvcwotaW1wb3J0IHNodXRpbAotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSB0cmFjaW5nLnRyYWNlX2RhdGEgaW1wb3J0IHRyYWNlX2RhdGEKLWZyb20gdHJhY2luZ19idWlsZCBpbXBvcnQgaHRtbDJ0cmFjZQotCi0KLWNsYXNzIFRyYWNlRGF0YVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICBkZWYgdGVzdFNlcmlhbGl6ZShzZWxmKToKLSAgICB0ZXN0X2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQotICAgIHRyYWNlX3BhdGggPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICd0ZXN0X3RyYWNlLmpzb24nKQotICAgIHRyeToKLSAgICAgIHJpID0gdHJhY2VfZGF0YS5DcmVhdGVUcmFjZURhdGFGcm9tUmF3RGF0YSh7J3RyYWNlRXZlbnRzJzogWzEsIDIsIDNdfSkKLSAgICAgIHJpLlNlcmlhbGl6ZSh0cmFjZV9wYXRoKQotICAgICAgd2l0aCBvcGVuKHRyYWNlX3BhdGgpIGFzIGY6Ci0gICAgICAgIGpzb25fdHJhY2VzID0gaHRtbDJ0cmFjZS5SZWFkVHJhY2VzRnJvbUhUTUxGaWxlUGF0aChmKQotICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uX3RyYWNlcywgW3sndHJhY2VFdmVudHMnOiBbMSwgMiwgM119XSkKLSAgICBmaW5hbGx5OgotICAgICAgc2h1dGlsLnJtdHJlZSh0ZXN0X2RpcikKLQotICBkZWYgdGVzdEVtcHR5QXJyYXlWYWx1ZShzZWxmKToKLSAgICAjIFdlIGNhbiBpbXBvcnQgZW1wdHkgbGlzdHMgYW5kIGVtcHR5IHN0cmluZy4KLSAgICBkID0gdHJhY2VfZGF0YS5DcmVhdGVUcmFjZURhdGFGcm9tUmF3RGF0YShbXSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKGQuSGFzVHJhY2VzRm9yKHRyYWNlX2RhdGEuQ0hST01FX1RSQUNFX1BBUlQpKQotCi0gIGRlZiB0ZXN0SW52YWxpZFRyYWNlKHNlbGYpOgotICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgotICAgICAgdHJhY2VfZGF0YS5DcmVhdGVUcmFjZURhdGFGcm9tUmF3RGF0YSh7J2hlbGxvJzogMX0pCi0KLSAgZGVmIHRlc3RMaXN0Rm9ybShzZWxmKToKLSAgICBkID0gdHJhY2VfZGF0YS5DcmVhdGVUcmFjZURhdGFGcm9tUmF3RGF0YShbeydwaCc6ICdCJ31dKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLkhhc1RyYWNlc0Zvcih0cmFjZV9kYXRhLkNIUk9NRV9UUkFDRV9QQVJUKSkKLSAgICBldmVudHMgPSBkLkdldFRyYWNlc0Zvcih0cmFjZV9kYXRhLkNIUk9NRV9UUkFDRV9QQVJUKVswXS5nZXQoCi0gICAgICAgICd0cmFjZUV2ZW50cycsIFtdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGxlbihldmVudHMpKQotCi0gIGRlZiB0ZXN0U3RyaW5nRm9ybShzZWxmKToKLSAgICBkID0gdHJhY2VfZGF0YS5DcmVhdGVUcmFjZURhdGFGcm9tUmF3RGF0YSgnW3sicGgiOiAiQiJ9XScpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGQuSGFzVHJhY2VzRm9yKHRyYWNlX2RhdGEuQ0hST01FX1RSQUNFX1BBUlQpKQotICAgIGV2ZW50cyA9IGQuR2V0VHJhY2VzRm9yKHRyYWNlX2RhdGEuQ0hST01FX1RSQUNFX1BBUlQpWzBdLmdldCgKLSAgICAgICAgJ3RyYWNlRXZlbnRzJywgW10pCi0gICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgbGVuKGV2ZW50cykpCi0KLQotY2xhc3MgVHJhY2VEYXRhQnVpbGRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICBkZWYgdGVzdEJhc2ljQ2hyb21lKHNlbGYpOgotICAgIGJ1aWxkZXIgPSB0cmFjZV9kYXRhLlRyYWNlRGF0YUJ1aWxkZXIoKQotICAgIGJ1aWxkZXIuQWRkVHJhY2VGb3IodHJhY2VfZGF0YS5DSFJPTUVfVFJBQ0VfUEFSVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsndHJhY2VFdmVudHMnOiBbMSwgMiwgM119KQotICAgIGJ1aWxkZXIuQWRkVHJhY2VGb3IodHJhY2VfZGF0YS5UQUJfSURfUEFSVCwgWyd0YWItNyddKQotICAgIGJ1aWxkZXIuQWRkVHJhY2VGb3IodHJhY2VfZGF0YS5CQVRUT1JfVFJBQ0VfUEFSVCwgJ2JhdHRvciBkYXRhIGhlcmUnKQotCi0gICAgZCA9IGJ1aWxkZXIuQXNEYXRhKCkKLSAgICBzZWxmLmFzc2VydFRydWUoZC5IYXNUcmFjZXNGb3IodHJhY2VfZGF0YS5DSFJPTUVfVFJBQ0VfUEFSVCkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGQuSGFzVHJhY2VzRm9yKHRyYWNlX2RhdGEuVEFCX0lEX1BBUlQpKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLkhhc1RyYWNlc0Zvcih0cmFjZV9kYXRhLkJBVFRPUl9UUkFDRV9QQVJUKSkKLQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgYnVpbGRlci5Bc0RhdGEpCi0KLSAgZGVmIHRlc3RTZXRUcmFjZUZvcihzZWxmKToKLSAgICB0ZWxlbWV0cnlfdHJhY2UgPSB7Ci0gICAgICAgICd0cmFjZUV2ZW50cyc6IFsxLCAyLCAzXSwKLSAgICAgICAgJ21ldGFkYXRhJzogewotICAgICAgICAgICAgJ2ZpZWxkMSc6ICd2YWx1ZTEnCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBidWlsZGVyID0gdHJhY2VfZGF0YS5UcmFjZURhdGFCdWlsZGVyKCkKLSAgICBidWlsZGVyLkFkZFRyYWNlRm9yKHRyYWNlX2RhdGEuVEVMRU1FVFJZX1BBUlQsIHRlbGVtZXRyeV90cmFjZSkKLSAgICBkID0gYnVpbGRlci5Bc0RhdGEoKQotCi0gICAgc2VsZi5hc3NlcnRFcXVhbChkLkdldFRyYWNlc0Zvcih0cmFjZV9kYXRhLlRFTEVNRVRSWV9QQVJUKSwKLSAgICAgICAgICAgICAgICAgICAgIFt0ZWxlbWV0cnlfdHJhY2VdKQotCi0gIGRlZiB0ZXN0U2V0VHJhY2VGb3JSYWlzZXNXaXRoSW52YWxpZFBhcnQoc2VsZik6Ci0gICAgYnVpbGRlciA9IHRyYWNlX2RhdGEuVHJhY2VEYXRhQnVpbGRlcigpCi0KLSAgICBzZWxmLmFzc2VydFJhaXNlcyhleGNlcHRpb25zLkFzc2VydGlvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogYnVpbGRlci5BZGRUcmFjZUZvcignbm90X2FfdHJhY2VfcGFydCcsIHt9KSkKLQotICBkZWYgdGVzdFNldFRyYWNlRm9yUmFpc2VzV2l0aEludmFsaWRUcmFjZShzZWxmKToKLSAgICBidWlsZGVyID0gdHJhY2VfZGF0YS5UcmFjZURhdGFCdWlsZGVyKCkKLQotICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICBleGNlcHRpb25zLkFzc2VydGlvbkVycm9yLAotICAgICAgICBsYW1iZGE6IGJ1aWxkZXIuQWRkVHJhY2VGb3IodHJhY2VfZGF0YS5URUxFTUVUUllfUEFSVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGV0aW1lLnRpbWUubWluKSkKLQotICBkZWYgdGVzdFNldFRyYWNlRm9yUmFpc2VzQWZ0ZXJBc0RhdGEoc2VsZik6Ci0gICAgYnVpbGRlciA9IHRyYWNlX2RhdGEuVHJhY2VEYXRhQnVpbGRlcigpCi0gICAgYnVpbGRlci5Bc0RhdGEoKQotCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgIGV4Y2VwdGlvbnMuRXhjZXB0aW9uLAotICAgICAgICBsYW1iZGE6IGJ1aWxkZXIuQWRkVHJhY2VGb3IodHJhY2VfZGF0YS5URUxFTUVUUllfUEFSVCwge30pKQpkaWZmIC0tZ2l0IGEvc3lzdHJhY2UvY2F0YXB1bHQvdHJhY2luZy90cmFjaW5nX3Byb2plY3QucHkgYi9zeXN0cmFjZS9jYXRhcHVsdC90cmFjaW5nL3RyYWNpbmdfcHJvamVjdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMzYjk4Yi4uMDAwMDAwMAotLS0gYS9zeXN0cmFjZS9jYXRhcHVsdC90cmFjaW5nL3RyYWNpbmdfcHJvamVjdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgc3lzCi1pbXBvcnQgb3MKLWltcG9ydCByZQotCi0KLWRlZiBfQWRkVG9QYXRoSWZOZWVkZWQocGF0aCk6Ci0gIGlmIHBhdGggbm90IGluIHN5cy5wYXRoOgotICAgIHN5cy5wYXRoLmluc2VydCgwLCBwYXRoKQotCi0KLWRlZiBVcGRhdGVTeXNQYXRoSWZOZWVkZWQoKToKLSAgZm9yIHBhdGggaW4gR2V0RGVwZW5kZW5jeVBhdGhzKCk6Ci0gICAgX0FkZFRvUGF0aElmTmVlZGVkKHBhdGgpCi0KLQotZGVmIEdldERlcGVuZGVuY3lQYXRocygpOgotICAjIFRPRE8oIzM3MDMpOiBTZXBhcmF0ZSB0aGUgcGF0aHMgdGhhdCBhcmUgb25seSB1c2VkIGJ5IHRoZSBkZXYgc2VydmVyIGludG8KLSAgIyBhbm90aGVyIGNhbGwuCi0gIHAgPSBUcmFjaW5nUHJvamVjdCgpCi0gIHJldHVybiBbCi0gICAgICBwLmNhdGFwdWx0X3BhdGgsCi0gICAgICBwLnB5X3Z1bGNhbml6ZV9wYXRoLAotICAgICAgcC52aW5uX3BhdGgsCi0gICAgICBvcy5wYXRoLmpvaW4ocC5jYXRhcHVsdF90aGlyZF9wYXJ0eV9wYXRoLCAnV2ViT2InKSwKLSAgICAgIG9zLnBhdGguam9pbihwLmNhdGFwdWx0X3RoaXJkX3BhcnR5X3BhdGgsICdQYXN0ZScpLAotICAgICAgb3MucGF0aC5qb2luKHAuY2F0YXB1bHRfdGhpcmRfcGFydHlfcGF0aCwgJ3NpeCcpLAotICAgICAgb3MucGF0aC5qb2luKHAuY2F0YXB1bHRfdGhpcmRfcGFydHlfcGF0aCwgJ3dlYmFwcDInKSwKLSAgICAgIG9zLnBhdGguam9pbihwLmNhdGFwdWx0X3BhdGgsICdjb21tb24nLCAncHlfdXRpbHMnKSwKLSAgICAgIG9zLnBhdGguam9pbihwLnRyYWNpbmdfdGhpcmRfcGFydHlfcGF0aCwgJ3N5bWJvbHMnKQotICBdCi0KLQotZGVmIF9GaW5kQWxsRmlsZXNSZWN1cnNpdmUoc291cmNlX3BhdGhzKToKLSAgYXNzZXJ0IGlzaW5zdGFuY2Uoc291cmNlX3BhdGhzLCBsaXN0KQotICBhbGxfZmlsZW5hbWVzID0gc2V0KCkKLSAgZm9yIHNvdXJjZV9wYXRoIGluIHNvdXJjZV9wYXRoczoKLSAgICBmb3IgZGlycGF0aCwgXywgZmlsZW5hbWVzIGluIG9zLndhbGsoc291cmNlX3BhdGgpOgotICAgICAgZm9yIGYgaW4gZmlsZW5hbWVzOgotICAgICAgICBpZiBmLnN0YXJ0c3dpdGgoJy4nKToKLSAgICAgICAgICBjb250aW51ZQotICAgICAgICB4ID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihkaXJwYXRoLCBmKSkKLSAgICAgICAgYWxsX2ZpbGVuYW1lcy5hZGQoeCkKLSAgcmV0dXJuIGFsbF9maWxlbmFtZXMKLQotZGVmIF9Jc0ZpbGVuYW1lQVRlc3QoeCk6Ci0gIGlmIHguZW5kc3dpdGgoJ190ZXN0LmpzJyk6Ci0gICAgcmV0dXJuIFRydWUKLQotICBpZiB4LmVuZHN3aXRoKCdfdGVzdC5odG1sJyk6Ci0gICAgcmV0dXJuIFRydWUKLQotICBpZiB4LmVuZHN3aXRoKCdfdW5pdHRlc3QuanMnKToKLSAgICByZXR1cm4gVHJ1ZQotCi0gIGlmIHguZW5kc3dpdGgoJ191bml0dGVzdC5odG1sJyk6Ci0gICAgcmV0dXJuIFRydWUKLQotICAjIFRPRE8obmR1Y2EpOiBBZGQgY29udGVudCB0ZXN0PwotICByZXR1cm4gRmFsc2UKLQotCi1jbGFzcyBUcmFjaW5nUHJvamVjdChvYmplY3QpOgotICBjYXRhcHVsdF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKAotICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIG9zLnBhdGgucGFyZGlyKSkKLQotICB0cmFjaW5nX3Jvb3RfcGF0aCA9IG9zLnBhdGguam9pbihjYXRhcHVsdF9wYXRoLCAndHJhY2luZycpCi0gIHRyYWNlX3Byb2Nlc3Nvcl9yb290X3BhdGggPSBvcy5wYXRoLmpvaW4oY2F0YXB1bHRfcGF0aCwgJ3RyYWNlX3Byb2Nlc3NvcicpCi0gIGNvbW1vbl9yb290X3BhdGggPSBvcy5wYXRoLmpvaW4oY2F0YXB1bHRfcGF0aCwgJ2NvbW1vbicpCi0gIHRyYWNpbmdfc3JjX3BhdGggPSBvcy5wYXRoLmpvaW4odHJhY2luZ19yb290X3BhdGgsICd0cmFjaW5nJykKLSAgZXh0cmFzX3BhdGggPSBvcy5wYXRoLmpvaW4odHJhY2luZ19zcmNfcGF0aCwgJ2V4dHJhcycpCi0gIHVpX2V4dHJhc19wYXRoID0gb3MucGF0aC5qb2luKHRyYWNpbmdfc3JjX3BhdGgsICd1aScsICdleHRyYXMnKQotCi0gIGNhdGFwdWx0X3RoaXJkX3BhcnR5X3BhdGggPSBvcy5wYXRoLmpvaW4oY2F0YXB1bHRfcGF0aCwgJ3RoaXJkX3BhcnR5JykKLSAgcG9seW1lcl9wYXRoID0gb3MucGF0aC5qb2luKGNhdGFwdWx0X3RoaXJkX3BhcnR5X3BhdGgsICdwb2x5bWVyJykKLQotICB0cmFjaW5nX3RoaXJkX3BhcnR5X3BhdGggPSBvcy5wYXRoLmpvaW4odHJhY2luZ19yb290X3BhdGgsICd0aGlyZF9wYXJ0eScpCi0gIHB5X3Z1bGNhbml6ZV9wYXRoID0gb3MucGF0aC5qb2luKGNvbW1vbl9yb290X3BhdGgsICdweV92dWxjYW5pemUnKQotICB2aW5uX3BhdGggPSBvcy5wYXRoLmpvaW4oY2F0YXB1bHRfdGhpcmRfcGFydHlfcGF0aCwgJ3Zpbm4nKQotCi0gIGpzemlwX3BhdGggPSBvcy5wYXRoLmpvaW4odHJhY2luZ190aGlyZF9wYXJ0eV9wYXRoLCAnanN6aXAnKQotICBwYWtvX3BhdGggPSBvcy5wYXRoLmpvaW4odHJhY2luZ190aGlyZF9wYXJ0eV9wYXRoLCAncGFrbycpCi0KLSAgZ2xtYXRyaXhfcGF0aCA9IG9zLnBhdGguam9pbigKLSAgICAgIHRyYWNpbmdfdGhpcmRfcGFydHlfcGF0aCwgJ2dsLW1hdHJpeCcsICdkaXN0JykKLQotICBtYW5ud2hpdG5leXVfcGF0aCA9IG9zLnBhdGguam9pbigKLSAgICAgIHRyYWNpbmdfdGhpcmRfcGFydHlfcGF0aCwgJ21hbm53aGl0bmV5dScpCi0KLSAgdWlfcGF0aCA9IG9zLnBhdGguam9pbih0cmFjaW5nX3NyY19wYXRoLCAndWknKQotICBkM19wYXRoID0gb3MucGF0aC5qb2luKHRyYWNpbmdfdGhpcmRfcGFydHlfcGF0aCwgJ2QzJykKLSAgY2hhaV9wYXRoID0gb3MucGF0aC5qb2luKHRyYWNpbmdfdGhpcmRfcGFydHlfcGF0aCwgJ2NoYWknKQotICBtb2NoYV9wYXRoID0gb3MucGF0aC5qb2luKHRyYWNpbmdfdGhpcmRfcGFydHlfcGF0aCwgJ21vY2hhJykKLSAgb2JvZV9wYXRoID0gb3MucGF0aC5qb2luKHRyYWNpbmdfdGhpcmRfcGFydHlfcGF0aCwgJ29ib2UnKQotCi0gIG1yZV9wYXRoID0gb3MucGF0aC5qb2luKHRyYWNpbmdfc3JjX3BhdGgsICdtcmUnKQotCi0gIG1ldHJpY3NfcGF0aCA9IG9zLnBhdGguam9pbih0cmFjaW5nX3NyY19wYXRoLCAnbWV0cmljcycpCi0gIGRpYWdub3N0aWNzX3BhdGggPSBvcy5wYXRoLmpvaW4odHJhY2luZ19zcmNfcGF0aCwgJ3ZhbHVlJywgJ2RpYWdub3N0aWNzJykKLQotICB2YWx1ZV91aV9wYXRoID0gb3MucGF0aC5qb2luKHRyYWNpbmdfc3JjX3BhdGgsICd2YWx1ZScsICd1aScpCi0gIG1ldHJpY3NfdWlfcGF0aCA9IG9zLnBhdGguam9pbih0cmFjaW5nX3NyY19wYXRoLCAnbWV0cmljcycsICd1aScpCi0KLSAgdGVzdF9kYXRhX3BhdGggPSBvcy5wYXRoLmpvaW4odHJhY2luZ19yb290X3BhdGgsICd0ZXN0X2RhdGEnKQotICBza3BfZGF0YV9wYXRoID0gb3MucGF0aC5qb2luKHRyYWNpbmdfcm9vdF9wYXRoLCAnc2twX2RhdGEnKQotCi0gIHJqc21pbl9wYXRoID0gb3MucGF0aC5qb2luKAotICAgICAgdHJhY2luZ190aGlyZF9wYXJ0eV9wYXRoLCAndHZjbScsICd0aGlyZF9wYXJ0eScsICdyanNtaW4nKQotICByY3NzbWluX3BhdGggPSBvcy5wYXRoLmpvaW4oCi0gICAgICB0cmFjaW5nX3RoaXJkX3BhcnR5X3BhdGgsICd0dmNtJywgJ3RoaXJkX3BhcnR5JywgJ3Jjc3NtaW4nKQotCi0gIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICBzZWxmLnNvdXJjZV9wYXRocyA9IFtdCi0gICAgc2VsZi5zb3VyY2VfcGF0aHMuYXBwZW5kKHNlbGYudHJhY2luZ19yb290X3BhdGgpCi0gICAgc2VsZi5zb3VyY2VfcGF0aHMuYXBwZW5kKHNlbGYucG9seW1lcl9wYXRoKQotICAgIHNlbGYuc291cmNlX3BhdGhzLmFwcGVuZChzZWxmLnRyYWNpbmdfdGhpcmRfcGFydHlfcGF0aCkKLSAgICBzZWxmLnNvdXJjZV9wYXRocy5hcHBlbmQoc2VsZi5tcmVfcGF0aCkKLSAgICBzZWxmLnNvdXJjZV9wYXRocy5hcHBlbmQoc2VsZi5qc3ppcF9wYXRoKQotICAgIHNlbGYuc291cmNlX3BhdGhzLmFwcGVuZChzZWxmLnBha29fcGF0aCkKLSAgICBzZWxmLnNvdXJjZV9wYXRocy5hcHBlbmQoc2VsZi5nbG1hdHJpeF9wYXRoKQotICAgIHNlbGYuc291cmNlX3BhdGhzLmFwcGVuZChzZWxmLm1hbm53aGl0bmV5dV9wYXRoKQotICAgIHNlbGYuc291cmNlX3BhdGhzLmFwcGVuZChzZWxmLmQzX3BhdGgpCi0gICAgc2VsZi5zb3VyY2VfcGF0aHMuYXBwZW5kKHNlbGYuY2hhaV9wYXRoKQotICAgIHNlbGYuc291cmNlX3BhdGhzLmFwcGVuZChzZWxmLm1vY2hhX3BhdGgpCi0gICAgc2VsZi5zb3VyY2VfcGF0aHMuYXBwZW5kKHNlbGYub2JvZV9wYXRoKQotCi0gIGRlZiBDcmVhdGVWdWxjYW5pemVyKHNlbGYpOgotICAgIGZyb20gcHlfdnVsY2FuaXplIGltcG9ydCBwcm9qZWN0IGFzIHByb2plY3RfbW9kdWxlCi0gICAgcmV0dXJuIHByb2plY3RfbW9kdWxlLlByb2plY3Qoc2VsZi5zb3VyY2VfcGF0aHMpCi0KLSAgZGVmIElzRDhDb21wYXRpYmxlRmlsZShzZWxmLCBmaWxlbmFtZSk6Ci0gICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aChzZWxmLnVpX3BhdGgpOgotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBpZiBmaWxlbmFtZS5zdGFydHN3aXRoKHNlbGYudmFsdWVfdWlfcGF0aCk6Ci0gICAgICByZXR1cm4gRmFsc2UKLQotICAgIGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoc2VsZi5tZXRyaWNzX3VpX3BhdGgpOgotICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICByZXR1cm4gVHJ1ZQotCi0gIGRlZiBGaW5kQWxsVGVzdE1vZHVsZVJlbFBhdGhzKHNlbGYsIHByZWQ9Tm9uZSk6Ci0gICAgaWYgcHJlZCBpcyBOb25lOgotICAgICAgcHJlZCA9IGxhbWJkYSB4OiBUcnVlCi0KLSAgICBhbGxfZmlsZW5hbWVzID0gX0ZpbmRBbGxGaWxlc1JlY3Vyc2l2ZShbc2VsZi50cmFjaW5nX3NyY19wYXRoXSkKLSAgICB0ZXN0X21vZHVsZV9maWxlbmFtZXMgPSBbeCBmb3IgeCBpbiBhbGxfZmlsZW5hbWVzIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Jc0ZpbGVuYW1lQVRlc3QoeCkgYW5kIHByZWQoeCldCi0gICAgdGVzdF9tb2R1bGVfZmlsZW5hbWVzLnNvcnQoKQotCi0gICAgcmV0dXJuIFtvcy5wYXRoLnJlbHBhdGgoeCwgc2VsZi50cmFjaW5nX3Jvb3RfcGF0aCkKLSAgICAgICAgICAgIGZvciB4IGluIHRlc3RfbW9kdWxlX2ZpbGVuYW1lc10KLQotICBkZWYgRmluZEFsbE1ldHJpY3NNb2R1bGVSZWxQYXRocyhzZWxmKToKLSAgICBhbGxfZmlsZW5hbWVzID0gX0ZpbmRBbGxGaWxlc1JlY3Vyc2l2ZShbc2VsZi50cmFjaW5nX3NyY19wYXRoXSkKLSAgICBhbGxfbWV0cmljc19tb2R1bGVfZmlsZW5hbWVzID0gW10KLSAgICBmb3IgeCBpbiBhbGxfZmlsZW5hbWVzOgotICAgICAgaWYgeC5zdGFydHN3aXRoKHNlbGYubWV0cmljc19wYXRoKSBhbmQgbm90IF9Jc0ZpbGVuYW1lQVRlc3QoeCk6Ci0gICAgICAgIGFsbF9tZXRyaWNzX21vZHVsZV9maWxlbmFtZXMuYXBwZW5kKHgpCi0gICAgYWxsX21ldHJpY3NfbW9kdWxlX2ZpbGVuYW1lcy5zb3J0KCkKLSAgICByZXR1cm4gW29zLnBhdGgucmVscGF0aCh4LCBzZWxmLnRyYWNpbmdfcm9vdF9wYXRoKQotICAgICAgICAgICAgZm9yIHggaW4gYWxsX21ldHJpY3NfbW9kdWxlX2ZpbGVuYW1lc10KLQotICBkZWYgRmluZEFsbERpYWdub3N0aWNzTW9kdWxlUmVsUGF0aHMoc2VsZik6Ci0gICAgYWxsX2ZpbGVuYW1lcyA9IF9GaW5kQWxsRmlsZXNSZWN1cnNpdmUoW3NlbGYudHJhY2luZ19zcmNfcGF0aF0pCi0gICAgYWxsX2RpYWdub3N0aWNzX21vZHVsZV9maWxlbmFtZXMgPSBbXQotICAgIGZvciB4IGluIGFsbF9maWxlbmFtZXM6Ci0gICAgICBpZiB4LnN0YXJ0c3dpdGgoc2VsZi5kaWFnbm9zdGljc19wYXRoKSBhbmQgbm90IF9Jc0ZpbGVuYW1lQVRlc3QoeCk6Ci0gICAgICAgIGFsbF9kaWFnbm9zdGljc19tb2R1bGVfZmlsZW5hbWVzLmFwcGVuZCh4KQotICAgIGFsbF9kaWFnbm9zdGljc19tb2R1bGVfZmlsZW5hbWVzLnNvcnQoKQotICAgIHJldHVybiBbb3MucGF0aC5yZWxwYXRoKHgsIHNlbGYudHJhY2luZ19yb290X3BhdGgpCi0gICAgICAgICAgICBmb3IgeCBpbiBhbGxfZGlhZ25vc3RpY3NfbW9kdWxlX2ZpbGVuYW1lc10KLQotICBkZWYgRmluZEFsbEQ4VGVzdE1vZHVsZVJlbFBhdGhzKHNlbGYpOgotICAgIHJldHVybiBzZWxmLkZpbmRBbGxUZXN0TW9kdWxlUmVsUGF0aHMocHJlZD1zZWxmLklzRDhDb21wYXRpYmxlRmlsZSkKLQotICBkZWYgR2V0Q29uZmlnTmFtZXMoc2VsZik6Ci0gICAgY29uZmlnX2ZpbGVzID0gWwotICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi51aV9leHRyYXNfcGF0aCwgeCkKLSAgICAgICAgZm9yIHggaW4gb3MubGlzdGRpcihzZWxmLnVpX2V4dHJhc19wYXRoKQotICAgICAgICBpZiB4LmVuZHN3aXRoKCdfY29uZmlnLmh0bWwnKQotICAgIF0KLQotICAgIGNvbmZpZ19maWxlcyA9IFt4IGZvciB4IGluIGNvbmZpZ19maWxlcyBpZiBvcy5wYXRoLmlzZmlsZSh4KV0KLQotICAgIGNvbmZpZ19iYXNlbmFtZXMgPSBbb3MucGF0aC5iYXNlbmFtZSh4KSBmb3IgeCBpbiBjb25maWdfZmlsZXNdCi0gICAgY29uZmlnX25hbWVzID0gW3JlLm1hdGNoKCcoLispX2NvbmZpZy5odG1sJCcsIHgpLmdyb3VwKDEpCi0gICAgICAgICAgICAgICAgICAgIGZvciB4IGluIGNvbmZpZ19iYXNlbmFtZXNdCi0gICAgcmV0dXJuIGNvbmZpZ19uYW1lcwotCi0gIGRlZiBHZXREZWZhdWx0Q29uZmlnTmFtZShzZWxmKToKLSAgICBhc3NlcnQgJ2Z1bGwnIGluIHNlbGYuR2V0Q29uZmlnTmFtZXMoKQotICAgIHJldHVybiAnZnVsbCcKLQotICBkZWYgQWRkQ29uZmlnTmFtZU9wdGlvblRvUGFyc2VyKHNlbGYsIHBhcnNlcik6Ci0gICAgY2hvaWNlcyA9IHNlbGYuR2V0Q29uZmlnTmFtZXMoKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAgICctLWNvbmZpZycsIGRlc3Q9J2NvbmZpZ19uYW1lJywKLSAgICAgICAgY2hvaWNlcz1jaG9pY2VzLCBkZWZhdWx0PXNlbGYuR2V0RGVmYXVsdENvbmZpZ05hbWUoKSwKLSAgICAgICAgaGVscD0nUGlja3MgYSBicm93c2VyIGNvbmZpZy4gVmFsaWQgY2hvaWNlczogJXMnICUgJywgJy5qb2luKGNob2ljZXMpKQotICAgIHJldHVybiBjaG9pY2VzCi0KLSAgZGVmIEdldE1vZHVsZU5hbWVGb3JDb25maWdOYW1lKHNlbGYsIGNvbmZpZ19uYW1lKToKLSAgICByZXR1cm4gJ3RyYWNpbmcudWkuZXh0cmFzLiVzX2NvbmZpZycgJSBjb25maWdfbmFtZQotCmRpZmYgLS1naXQgYS9zeXN0cmFjZS9zeXN0cmFjZS5weSBiL3N5c3RyYWNlL3N5c3RyYWNlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA3MWRhNjUwLi4wMDAwMDAwCi0tLSBhL3N5c3RyYWNlL3N5c3RyYWNlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi12ZXJzaW9uID0gc3lzLnZlcnNpb25faW5mb1s6Ml0KLWlmIHZlcnNpb24gIT0gKDIsIDcpOgotICBzeXMuc3RkZXJyLndyaXRlKCdTeXN0cmFjZSBkb2VzIG5vdCBzdXBwb3J0IFB5dGhvbiAlZC4lZC4gJwotICAgICAgICAgICAgICAgICAgICdQbGVhc2UgdXNlIFB5dGhvbiAyLjcuXG4nICUgdmVyc2lvbikKLSAgc3lzLmV4aXQoMSkKLQotc3lzdHJhY2VfZGlyID0gb3MucGF0aC5hYnNwYXRoKAotICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnY2F0YXB1bHQnLCAnc3lzdHJhY2UnKSkKLXN5cy5wYXRoLmluc2VydCgwLCBzeXN0cmFjZV9kaXIpCi0KLWRlZiBSZW1vdmVBbGxTdGFsZVB5Y0ZpbGVzKGJhc2VfZGlyKToKLSAgIiIiU2NhbiBkaXJlY3RvcmllcyBmb3Igb2xkIC5weWMgZmlsZXMgd2l0aG91dCBhIC5weSBmaWxlIGFuZCBkZWxldGUgdGhlbS4iIiIKLSAgZm9yIGRpcm5hbWUsIF8sIGZpbGVuYW1lcyBpbiBvcy53YWxrKGJhc2VfZGlyKToKLSAgICBpZiAnLmdpdCcgaW4gZGlybmFtZToKLSAgICAgIGNvbnRpbnVlCi0gICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKLSAgICAgIHJvb3QsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCi0gICAgICBpZiBleHQgIT0gJy5weWMnOgotICAgICAgICBjb250aW51ZQotCi0gICAgICBweWNfcGF0aCA9IG9zLnBhdGguam9pbihkaXJuYW1lLCBmaWxlbmFtZSkKLSAgICAgIHB5X3BhdGggPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgcm9vdCArICcucHknKQotCi0gICAgICB0cnk6Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhweV9wYXRoKToKLSAgICAgICAgICBvcy5yZW1vdmUocHljX3BhdGgpCi0gICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgIyBXcmFwIE9TIGNhbGxzIGluIHRyeS9leGNlcHQgaW4gY2FzZSBhbm90aGVyIHByb2Nlc3MgdG91Y2hlZCB0aGlzIGZpbGUuCi0gICAgICAgIHBhc3MKLQotICAgIHRyeToKLSAgICAgIG9zLnJlbW92ZWRpcnMoZGlybmFtZSkKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICMgV3JhcCBPUyBjYWxscyBpbiB0cnkvZXhjZXB0IGluIGNhc2UgYW5vdGhlciBwcm9jZXNzIHRvdWNoZWQgdGhpcyBkaXIuCi0gICAgICBwYXNzCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIFJlbW92ZUFsbFN0YWxlUHljRmlsZXMob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKLSAgZnJvbSBzeXN0cmFjZSBpbXBvcnQgcnVuX3N5c3RyYWNlCi0gIHN5cy5leGl0KHJ1bl9zeXN0cmFjZS5tYWluKCkpCg==